ZGlmZiAtLWdpdCBhL0FuZHJvaWQubWsgYi9BbmRyb2lkLm1rCmluZGV4IGFkZTVlMzguLjVlZTEwNzYgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQubWsKKysrIGIvQW5kcm9pZC5tawpAQCAtMzEsNiArMzEsMTAgQEAKICMgU28gd2UgZmlyc3QgYnVpbGQgdGhlIGZyYW1ld29yayBhcyBhIG1vbm9saXRoaWMgc3RhdGljIGxpYnJhcnkgdGhlbiBzcGxpdCBpdAogIyB1cCBpbnRvIHNtYWxsZXIgcGllY2VzLgogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBlbWJlZGRlZCBidWlsZHMgdXNlIG5vdGhpbmcgaW4gZnJhbWV3b3Jrcy9iYXNlCitpZm5lcSAoJChBTkRST0lEX0JVSUxEX0VNQkVEREVEKSx0cnVlKQorCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAogIyBGUkFNRVdPUktTX0JBU0VfU1VCRElSUyBjb21lcyBmcm9tIGJ1aWxkL2NvcmUvcGF0aG1hcC5tawpAQCAtMTA3LDkgKzExMSw5IEBACiAJY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JSW50ZW50UmVjZWl2ZXIuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JSW50ZW50U2VuZGVyLmFpZGwgXAogCWNvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSU9uUHJpbWFyeUNsaXBDaGFuZ2VkTGlzdGVuZXIuYWlkbCBcCi0JY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JQW5vbnltb3VzU3luY0FkYXB0ZXIuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JU3luY0FkYXB0ZXIuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JU3luY0NvbnRleHQuYWlkbCBcCisJY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JU3luY1NlcnZpY2VBZGFwdGVyLmFpZGwgXAogCWNvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSVN5bmNTdGF0dXNPYnNlcnZlci5haWRsIFwKIAljb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0lQYWNrYWdlRGF0YU9ic2VydmVyLmFpZGwgXAogCWNvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vSVBhY2thZ2VEZWxldGVPYnNlcnZlci5haWRsIFwKQEAgLTE1MCw2ICsxNTQsNyBAQAogCWNvcmUvamF2YS9hbmRyb2lkL25mYy9JTmZjQWRhcHRlckV4dHJhcy5haWRsIFwKIAljb3JlL2phdmEvYW5kcm9pZC9uZmMvSU5mY1RhZy5haWRsIFwKIAljb3JlL2phdmEvYW5kcm9pZC9uZmMvSU5mY0NhcmRFbXVsYXRpb24uYWlkbCBcCisJY29yZS9qYXZhL2FuZHJvaWQvbmZjL0lOZmNVbmxvY2tTZXR0aW5ncy5haWRsIFwKIAljb3JlL2phdmEvYW5kcm9pZC9vcy9JQmF0dGVyeVByb3BlcnRpZXNMaXN0ZW5lci5haWRsIFwKIAljb3JlL2phdmEvYW5kcm9pZC9vcy9JQmF0dGVyeVByb3BlcnRpZXNSZWdpc3RyYXIuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvb3MvSUNhbmNlbGxhdGlvblNpZ25hbC5haWRsIFwKQEAgLTI2Niw2ICsyNzEsOSBAQAogCXRlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JUGhvbmVTdGF0ZUxpc3RlbmVyLmFpZGwgXAogCXRlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JUGhvbmVTdWJJbmZvLmFpZGwgXAogCXRlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGVsZXBob255LmFpZGwgXAorCXRlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lci5haWRsIFwKKwl0ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRoaXJkUGFydHlDYWxsUHJvdmlkZXIuYWlkbCBcCisJdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuYWlkbCBcCiAJdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lTbXMuYWlkbCBcCiAJdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lUZWxlcGhvbnlSZWdpc3RyeS5haWRsIFwKIAl0ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVdhcFB1c2hNYW5hZ2VyLmFpZGwgXApAQCAtMjg4LDcgKzI5Niw3IEBACiAKIExPQ0FMX01PRFVMRSA6PSBmcmFtZXdvcmstYmFzZQogCi1MT0NBTF9KQVJfRVhDTFVERV9GSUxFUyA6PSBub25lCitMT0NBTF9STVRZUEVERUZTIDo9IHRydWUKIAogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19KQVZBX0xJQlJBUlkpCiAKQEAgLTc4NywzICs3OTUsNSBAQAogaWZlcSAoLCQoT05FX1NIT1RfTUFLRUZJTEUpKQogaW5jbHVkZSAkKGNhbGwgZmlyc3QtbWFrZWZpbGVzLXVuZGVyLCQoTE9DQUxfUEFUSCkpCiBlbmRpZgorCitlbmRpZiAjIEFORFJPSURfQlVJTERfRU1CRURERUQKZGlmZiAtLWdpdCBhL0NsZWFuU3BlYy5tayBiL0NsZWFuU3BlYy5tawppbmRleCBlZjNmNGFlLi4xZTQ5ZmNiYiAxMDA2NDQKLS0tIGEvQ2xlYW5TcGVjLm1rCisrKyBiL0NsZWFuU3BlYy5tawpAQCAtMTcxLDYgKzE3MSw3IEBACiAkKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKE9VVF9ESVIpL3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2ZyYW1ld29yay1iYXNlX2ludGVybWVkaWF0ZXMvc3JjL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50LykKICQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoT1VUX0RJUikvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZnJhbWV3b3JrLWJhc2VfaW50ZXJtZWRpYXRlcy9zcmMvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlLykKICQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoT1VUX0RJUikvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZnJhbWV3b3JrLWJhc2VfaW50ZXJtZWRpYXRlcy9zcmMvcGFja2FnZXMvc2VydmljZXMvUHJveHkvKQorJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChPVVRfRElSKS90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9mcmFtZXdvcmstYmFzZV9pbnRlcm1lZGlhdGVzKQogJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChPVVRfRElSKS90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9mcmFtZXdvcmstYmFzZV9pbnRlcm1lZGlhdGVzL3NyYy9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRlckRpc2NvdmVyeVNlc3Npb25PYnNlcnZlci4qKQogJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChPVVRfRElSKS90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9mcmFtZXdvcmstYmFzZV9pbnRlcm1lZGlhdGVzL3NyYy9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRlckRpc2NvdmVyeVNlc3Npb25DbGllbnQuKikKICQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoT1VUX0RJUikvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZnJhbWV3b3JrLWJhc2VfaW50ZXJtZWRpYXRlcy9zcmMvY29yZS9qYXZhL2FuZHJvaWQvb3MvSUJhdHRlcnkqKQpkaWZmIC0tZ2l0IGEvYXBpL2N1cnJlbnQudHh0IGIvYXBpL2N1cnJlbnQudHh0CmluZGV4IDczZmIyZWMuLjM3MTU3NjQgMTAwNjQ0Ci0tLSBhL2FwaS9jdXJyZW50LnR4dAorKysgYi9hcGkvY3VycmVudC50eHQKQEAgLTksNiArOSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDQ0VTU19DSEVDS0lOX1BST1BFUlRJRVMgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19DSEVDS0lOX1BST1BFUlRJRVMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ0NFU1NfQ09BUlNFX0xPQ0FUSU9OID0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfQ09BUlNFX0xPQ0FUSU9OIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNDRVNTX0ZJTkVfTE9DQVRJT04gPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19GSU5FX0xPQ0FUSU9OIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNDRVNTX0lOUFVUX0ZMSU5HRVIgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19JTlBVVF9GTElOR0VSIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNDRVNTX0xPQ0FUSU9OX0VYVFJBX0NPTU1BTkRTID0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfTE9DQVRJT05fRVhUUkFfQ09NTUFORFMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ0NFU1NfTU9DS19MT0NBVElPTiA9ICJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX01PQ0tfTE9DQVRJT04iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ0NFU1NfTkVUV09SS19TVEFURSA9ICJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX05FVFdPUktfU1RBVEUiOwpAQCAtMTA4LDYgKzEwOSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFJFQ0VJVkVfU01TID0gImFuZHJvaWQucGVybWlzc2lvbi5SRUNFSVZFX1NNUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFJFQ0VJVkVfV0FQX1BVU0ggPSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfV0FQX1BVU0giOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBSRUNPUkRfQVVESU8gPSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ09SRF9BVURJTyI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFJFQ09WRVJZID0gImFuZHJvaWQucGVybWlzc2lvbi5SRUNPVkVSWSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFJFT1JERVJfVEFTS1MgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFT1JERVJfVEFTS1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIFJFU1RBUlRfUEFDS0FHRVMgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFU1RBUlRfUEFDS0FHRVMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTRU5EX1JFU1BPTkRfVklBX01FU1NBR0UgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLlNFTkRfUkVTUE9ORF9WSUFfTUVTU0FHRSI7CkBAIC0xMjYsNiArMTI4LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU0VUX1dBTExQQVBFUiA9ICJhbmRyb2lkLnBlcm1pc3Npb24uU0VUX1dBTExQQVBFUiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNFVF9XQUxMUEFQRVJfSElOVFMgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9XQUxMUEFQRVJfSElOVFMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTSUdOQUxfUEVSU0lTVEVOVF9QUk9DRVNTRVMgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLlNJR05BTF9QRVJTSVNURU5UX1BST0NFU1NFUyI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNJTV9DT01NVU5JQ0FUSU9OID0gImFuZHJvaWQucGVybWlzc2lvbi5TSU1fQ09NTVVOSUNBVElPTiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNUQVRVU19CQVIgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLlNUQVRVU19CQVIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTVUJTQ1JJQkVEX0ZFRURTX1JFQUQgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLlNVQlNDUklCRURfRkVFRFNfUkVBRCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNVQlNDUklCRURfRkVFRFNfV1JJVEUgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLlNVQlNDUklCRURfRkVFRFNfV1JJVEUiOwpAQCAtMzc1LDYgKzM3OCw4IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY29sb3JBY3RpdmF0ZWRIaWdobGlnaHQgPSAxNjg0MzY2NDsgLy8gMHgxMDEwMzkwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY29sb3JCYWNrZ3JvdW5kID0gMTY4NDI4MDE7IC8vIDB4MTAxMDAzMQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGNvbG9yQmFja2dyb3VuZENhY2hlSGludCA9IDE2ODQzNDM1OyAvLyAweDEwMTAyYWIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBjb2xvckZpbHRlckNvbG9yID0gMTY4NDM3Njc7IC8vIDB4MTAxMDNmNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGNvbG9yRmlsdGVyTW9kZSA9IDE2ODQzNzY4OyAvLyAweDEwMTAzZjgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBjb2xvckZvY3VzZWRIaWdobGlnaHQgPSAxNjg0MzY2MzsgLy8gMHgxMDEwMzhmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY29sb3JGb3JlZ3JvdW5kID0gMTY4NDI4MDA7IC8vIDB4MTAxMDAzMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGNvbG9yRm9yZWdyb3VuZEludmVyc2UgPSAxNjg0MzI3MDsgLy8gMHgxMDEwMjA2CkBAIC00OTcsNiArNTAyLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBmYXN0U2Nyb2xsT3ZlcmxheVBvc2l0aW9uID0gMTY4NDM1Nzg7IC8vIDB4MTAxMDMzYQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGZhc3RTY3JvbGxQcmV2aWV3QmFja2dyb3VuZExlZnQgPSAxNjg0MzU3NTsgLy8gMHgxMDEwMzM3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZmFzdFNjcm9sbFByZXZpZXdCYWNrZ3JvdW5kUmlnaHQgPSAxNjg0MzU3NjsgLy8gMHgxMDEwMzM4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZmFzdFNjcm9sbFN0eWxlID0gMTY4NDM3NjM7IC8vIDB4MTAxMDNmMwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGZhc3RTY3JvbGxUZXh0Q29sb3IgPSAxNjg0MzYwOTsgLy8gMHgxMDEwMzU5CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZmFzdFNjcm9sbFRodW1iRHJhd2FibGUgPSAxNjg0MzU3NDsgLy8gMHgxMDEwMzM2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZmFzdFNjcm9sbFRyYWNrRHJhd2FibGUgPSAxNjg0MzU3NzsgLy8gMHgxMDEwMzM5CkBAIC01MjIsNiArNTI4LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBmb3JtYXQxMkhvdXIgPSAxNjg0MzcyMjsgLy8gMHgxMDEwM2NhCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZm9ybWF0MjRIb3VyID0gMTY4NDM3MjM7IC8vIDB4MTAxMDNjYgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGZyYWdtZW50ID0gMTY4NDM0OTE7IC8vIDB4MTAxMDJlMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGZyYWdtZW50QnJlYWRDcnVtYnNTdHlsZSA9IDE2ODQzNzYyOyAvLyAweDEwMTAzZjIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBmcmFnbWVudENsb3NlRW50ZXJBbmltYXRpb24gPSAxNjg0MzQ5NTsgLy8gMHgxMDEwMmU3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZnJhZ21lbnRDbG9zZUV4aXRBbmltYXRpb24gPSAxNjg0MzQ5NjsgLy8gMHgxMDEwMmU4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZnJhZ21lbnRGYWRlRW50ZXJBbmltYXRpb24gPSAxNjg0MzQ5NzsgLy8gMHgxMDEwMmU5CkBAIC0xMTQ4LDYgKzExNTUsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHRyYW5zaXRpb25PcmRlcmluZyA9IDE2ODQzNzQ0OyAvLyAweDEwMTAzZTAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0cmFuc2xhdGlvblggPSAxNjg0MzU1NDsgLy8gMHgxMDEwMzIyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdHJhbnNsYXRpb25ZID0gMTY4NDM1NTU7IC8vIDB4MTAxMDMyMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHRyYW5zbGF0aW9uWiA9IDE2ODQzNzY2OyAvLyAweDEwMTAzZjYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0eXBlID0gMTY4NDMxNjk7IC8vIDB4MTAxMDFhMQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHR5cGVmYWNlID0gMTY4NDI5MDI7IC8vIDB4MTAxMDA5NgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHVpT3B0aW9ucyA9IDE2ODQzNjcyOyAvLyAweDEwMTAzOTgKQEAgLTEyMDQsNiArMTIxMiw4IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgd2luZG93QmFja2dyb3VuZCA9IDE2ODQyODM2OyAvLyAweDEwMTAwNTQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB3aW5kb3dDbG9zZU9uVG91Y2hPdXRzaWRlID0gMTY4NDM2MTE7IC8vIDB4MTAxMDM1YgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHdpbmRvd0NvbnRlbnRPdmVybGF5ID0gMTY4NDI4NDE7IC8vIDB4MTAxMDA1OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHdpbmRvd0NvbnRlbnRUcmFuc2l0aW9uTWFuYWdlciA9IDE2ODQzNzY1OyAvLyAweDEwMTAzZjUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB3aW5kb3dDb250ZW50VHJhbnNpdGlvbnMgPSAxNjg0Mzc2NDsgLy8gMHgxMDEwM2Y0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgd2luZG93RGlzYWJsZVByZXZpZXcgPSAxNjg0MzI5ODsgLy8gMHgxMDEwMjIyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgd2luZG93RW5hYmxlU3BsaXRUb3VjaCA9IDE2ODQzNTQzOyAvLyAweDEwMTAzMTcKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB3aW5kb3dFbnRlckFuaW1hdGlvbiA9IDE2ODQyOTMyOyAvLyAweDEwMTAwYjQKQEAgLTE2MzgsNiArMTY0OCwxMiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1lZGlhQnV0dG9uX1BsYXkgPSAxNjk3Mzg4MjsgLy8gMHgxMDMwMDNhCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTWVkaWFCdXR0b25fUHJldmlvdXMgPSAxNjk3Mzg4MDsgLy8gMHgxMDMwMDM4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTWVkaWFCdXR0b25fUmV3ID0gMTY5NzM4ODQ7IC8vIDB4MTAzMDAzYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFF1YW50dW1fQnV0dG9uQmFyID0gMTY5NzQ0OTg7IC8vIDB4MTAzMDJhMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFF1YW50dW1fQnV0dG9uQmFyX0FsZXJ0RGlhbG9nID0gMTY5NzQ0OTc7IC8vIDB4MTAzMDJhMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFF1YW50dW1fTGlnaHRfQnV0dG9uQmFyID0gMTY5NzQ1MDE7IC8vIDB4MTAzMDJhNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFF1YW50dW1fTGlnaHRfQnV0dG9uQmFyX0FsZXJ0RGlhbG9nID0gMTY5NzQ1MDA7IC8vIDB4MTAzMDJhNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFF1YW50dW1fTGlnaHRfU2VnbWVudGVkQnV0dG9uID0gMTY5NzQ1MDI7IC8vIDB4MTAzMDJhNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFF1YW50dW1fU2VnbWVudGVkQnV0dG9uID0gMTY5NzQ0OTk7IC8vIDB4MTAzMDJhMwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlID0gMTY5NzM4ODY7IC8vIDB4MTAzMDAzZQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHQgPSAxNjk3NDI1MzsgLy8gMHgxMDMwMWFkCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9EaWFsb2dXaW5kb3dUaXRsZSA9IDE2OTc0MjY0OyAvLyAweDEwMzAxYjgKQEAgLTE3MTMsNiArMTcyOSw0MCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX0xhcmdlX0ludmVyc2UgPSAxNjk3Mzg5MTsgLy8gMHgxMDMwMDQzCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfTWVkaXVtID0gMTY5NzM4OTI7IC8vIDB4MTAzMDA0NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX01lZGl1bV9JbnZlcnNlID0gMTY5NzM4OTM7IC8vIDB4MTAzMDA0NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1F1YW50dW0gPSAxNjk3NDMxODsgLy8gMHgxMDMwMWVlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfUXVhbnR1bV9EaWFsb2dXaW5kb3dUaXRsZSA9IDE2OTc0MzE5OyAvLyAweDEwMzAxZWYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX0ludmVyc2UgPSAxNjk3NDMyMDsgLy8gMHgxMDMwMWYwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfUXVhbnR1bV9MYXJnZSA9IDE2OTc0MzIxOyAvLyAweDEwMzAxZjEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX0xhcmdlX0ludmVyc2UgPSAxNjk3NDMyMjsgLy8gMHgxMDMwMWYyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfUXVhbnR1bV9NZWRpdW0gPSAxNjk3NDMyMzsgLy8gMHgxMDMwMWYzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfUXVhbnR1bV9NZWRpdW1fSW52ZXJzZSA9IDE2OTc0MzI0OyAvLyAweDEwMzAxZjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX1NlYXJjaFJlc3VsdF9TdWJ0aXRsZSA9IDE2OTc0MzI1OyAvLyAweDEwMzAxZjUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX1NlYXJjaFJlc3VsdF9UaXRsZSA9IDE2OTc0MzI2OyAvLyAweDEwMzAxZjYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX1NtYWxsID0gMTY5NzQzMjc7IC8vIDB4MTAzMDFmNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1F1YW50dW1fU21hbGxfSW52ZXJzZSA9IDE2OTc0MzI4OyAvLyAweDEwMzAxZjgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX1dpZGdldCA9IDE2OTc0MzMwOyAvLyAweDEwMzAxZmEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX1dpZGdldF9BY3Rpb25CYXJfTWVudSA9IDE2OTc0MzMxOyAvLyAweDEwMzAxZmIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX1dpZGdldF9BY3Rpb25CYXJfU3VidGl0bGUgPSAxNjk3NDMzMjsgLy8gMHgxMDMwMWZjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfUXVhbnR1bV9XaWRnZXRfQWN0aW9uQmFyX1N1YnRpdGxlX0ludmVyc2UgPSAxNjk3NDMzMzsgLy8gMHgxMDMwMWZkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfUXVhbnR1bV9XaWRnZXRfQWN0aW9uQmFyX1RpdGxlID0gMTY5NzQzMzQ7IC8vIDB4MTAzMDFmZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1F1YW50dW1fV2lkZ2V0X0FjdGlvbkJhcl9UaXRsZV9JbnZlcnNlID0gMTY5NzQzMzU7IC8vIDB4MTAzMDFmZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1F1YW50dW1fV2lkZ2V0X0FjdGlvbk1vZGVfU3VidGl0bGUgPSAxNjk3NDMzNjsgLy8gMHgxMDMwMjAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfUXVhbnR1bV9XaWRnZXRfQWN0aW9uTW9kZV9TdWJ0aXRsZV9JbnZlcnNlID0gMTY5NzQzMzc7IC8vIDB4MTAzMDIwMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1F1YW50dW1fV2lkZ2V0X0FjdGlvbk1vZGVfVGl0bGUgPSAxNjk3NDMzODsgLy8gMHgxMDMwMjAyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfUXVhbnR1bV9XaWRnZXRfQWN0aW9uTW9kZV9UaXRsZV9JbnZlcnNlID0gMTY5NzQzMzk7IC8vIDB4MTAzMDIwMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1F1YW50dW1fV2lkZ2V0X0J1dHRvbiA9IDE2OTc0MzQwOyAvLyAweDEwMzAyMDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX1dpZGdldF9Ecm9wRG93bkhpbnQgPSAxNjk3NDM0MTsgLy8gMHgxMDMwMjA1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfUXVhbnR1bV9XaWRnZXRfRHJvcERvd25JdGVtID0gMTY5NzQzNDI7IC8vIDB4MTAzMDIwNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1F1YW50dW1fV2lkZ2V0X0VkaXRUZXh0ID0gMTY5NzQzNDM7IC8vIDB4MTAzMDIwNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1F1YW50dW1fV2lkZ2V0X0ljb25NZW51X0l0ZW0gPSAxNjk3NDM0NDsgLy8gMHgxMDMwMjA4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfUXVhbnR1bV9XaWRnZXRfUG9wdXBNZW51ID0gMTY5NzQzNDU7IC8vIDB4MTAzMDIwOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1F1YW50dW1fV2lkZ2V0X1BvcHVwTWVudV9MYXJnZSA9IDE2OTc0MzQ2OyAvLyAweDEwMzAyMGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX1dpZGdldF9Qb3B1cE1lbnVfU21hbGwgPSAxNjk3NDM0NzsgLy8gMHgxMDMwMjBiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfUXVhbnR1bV9XaWRnZXRfVGFiV2lkZ2V0ID0gMTY5NzQzNDg7IC8vIDB4MTAzMDIwYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1F1YW50dW1fV2lkZ2V0X1RleHRWaWV3ID0gMTY5NzQzNDk7IC8vIDB4MTAzMDIwZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1F1YW50dW1fV2lkZ2V0X1RleHRWaWV3X1BvcHVwTWVudSA9IDE2OTc0MzUwOyAvLyAweDEwMzAyMGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX1dpZGdldF9UZXh0Vmlld19TcGlubmVySXRlbSA9IDE2OTc0MzUxOyAvLyAweDEwMzAyMGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUZXh0QXBwZWFyYW5jZV9RdWFudHVtX1dpbmRvd1RpdGxlID0gMTY5NzQzMjk7IC8vIDB4MTAzMDFmOQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1NtYWxsID0gMTY5NzM4OTQ7IC8vIDB4MTAzMDA0NgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRleHRBcHBlYXJhbmNlX1NtYWxsX0ludmVyc2UgPSAxNjk3Mzg5NTsgLy8gMHgxMDMwMDQ3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGV4dEFwcGVhcmFuY2VfU3RhdHVzQmFyX0V2ZW50Q29udGVudCA9IDE2OTczOTI3OyAvLyAweDEwMzAwNjcKQEAgLTE4MDcsNiArMTg1NywzNCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX05vVGl0bGVCYXJfRnVsbHNjcmVlbiA9IDE2OTczODMxOyAvLyAweDEwMzAwMDcKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9Ob1RpdGxlQmFyX092ZXJsYXlBY3Rpb25Nb2RlcyA9IDE2OTczOTMwOyAvLyAweDEwMzAwNmEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9QYW5lbCA9IDE2OTczOTEzOyAvLyAweDEwMzAwNTkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9RdWFudHVtID0gMTY5NzQzNTI7IC8vIDB4MTAzMDIxMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1F1YW50dW1fRGlhbG9nID0gMTY5NzQzNTM7IC8vIDB4MTAzMDIxMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1F1YW50dW1fRGlhbG9nV2hlbkxhcmdlID0gMTY5NzQzNTc7IC8vIDB4MTAzMDIxNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1F1YW50dW1fRGlhbG9nV2hlbkxhcmdlX05vQWN0aW9uQmFyID0gMTY5NzQzNTg7IC8vIDB4MTAzMDIxNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1F1YW50dW1fRGlhbG9nX01pbldpZHRoID0gMTY5NzQzNTQ7IC8vIDB4MTAzMDIxMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1F1YW50dW1fRGlhbG9nX05vQWN0aW9uQmFyID0gMTY5NzQzNTU7IC8vIDB4MTAzMDIxMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1F1YW50dW1fRGlhbG9nX05vQWN0aW9uQmFyX01pbldpZHRoID0gMTY5NzQzNTY7IC8vIDB4MTAzMDIxNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1F1YW50dW1fSW5wdXRNZXRob2QgPSAxNjk3NDM1OTsgLy8gMHgxMDMwMjE3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfUXVhbnR1bV9MaWdodCA9IDE2OTc0MzY3OyAvLyAweDEwMzAyMWYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9RdWFudHVtX0xpZ2h0X0RhcmtBY3Rpb25CYXIgPSAxNjk3NDM2ODsgLy8gMHgxMDMwMjIwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfUXVhbnR1bV9MaWdodF9EaWFsb2cgPSAxNjk3NDM2OTsgLy8gMHgxMDMwMjIxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfUXVhbnR1bV9MaWdodF9EaWFsb2dXaGVuTGFyZ2UgPSAxNjk3NDM3MzsgLy8gMHgxMDMwMjI1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfUXVhbnR1bV9MaWdodF9EaWFsb2dXaGVuTGFyZ2VfTm9BY3Rpb25CYXIgPSAxNjk3NDM3NDsgLy8gMHgxMDMwMjI2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfUXVhbnR1bV9MaWdodF9EaWFsb2dfTWluV2lkdGggPSAxNjk3NDM3MDsgLy8gMHgxMDMwMjIyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfUXVhbnR1bV9MaWdodF9EaWFsb2dfTm9BY3Rpb25CYXIgPSAxNjk3NDM3MTsgLy8gMHgxMDMwMjIzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfUXVhbnR1bV9MaWdodF9EaWFsb2dfTm9BY3Rpb25CYXJfTWluV2lkdGggPSAxNjk3NDM3MjsgLy8gMHgxMDMwMjI0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfUXVhbnR1bV9MaWdodF9Ob0FjdGlvbkJhciA9IDE2OTc0Mzc1OyAvLyAweDEwMzAyMjcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9RdWFudHVtX0xpZ2h0X05vQWN0aW9uQmFyX0Z1bGxzY3JlZW4gPSAxNjk3NDM3NjsgLy8gMHgxMDMwMjI4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfUXVhbnR1bV9MaWdodF9Ob0FjdGlvbkJhcl9PdmVyc2NhbiA9IDE2OTc0Mzc3OyAvLyAweDEwMzAyMjkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9RdWFudHVtX0xpZ2h0X05vQWN0aW9uQmFyX1RyYW5zbHVjZW50RGVjb3IgPSAxNjk3NDM3ODsgLy8gMHgxMDMwMjJhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfUXVhbnR1bV9MaWdodF9QYW5lbCA9IDE2OTc0Mzc5OyAvLyAweDEwMzAyMmIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9RdWFudHVtX05vQWN0aW9uQmFyID0gMTY5NzQzNjA7IC8vIDB4MTAzMDIxOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1F1YW50dW1fTm9BY3Rpb25CYXJfRnVsbHNjcmVlbiA9IDE2OTc0MzYxOyAvLyAweDEwMzAyMTkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9RdWFudHVtX05vQWN0aW9uQmFyX092ZXJzY2FuID0gMTY5NzQzNjI7IC8vIDB4MTAzMDIxYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1F1YW50dW1fTm9BY3Rpb25CYXJfVHJhbnNsdWNlbnREZWNvciA9IDE2OTc0MzYzOyAvLyAweDEwMzAyMWIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9RdWFudHVtX1BhbmVsID0gMTY5NzQzNjQ7IC8vIDB4MTAzMDIxYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1F1YW50dW1fV2FsbHBhcGVyID0gMTY5NzQzNjU7IC8vIDB4MTAzMDIxZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1F1YW50dW1fV2FsbHBhcGVyX05vVGl0bGVCYXIgPSAxNjk3NDM2NjsgLy8gMHgxMDMwMjFlCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfVHJhbnNsdWNlbnQgPSAxNjk3MzgzOTsgLy8gMHgxMDMwMDBmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfVHJhbnNsdWNlbnRfTm9UaXRsZUJhciA9IDE2OTczODQwOyAvLyAweDEwMzAwMTAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9UcmFuc2x1Y2VudF9Ob1RpdGxlQmFyX0Z1bGxzY3JlZW4gPSAxNjk3Mzg0MTsgLy8gMHgxMDMwMDExCkBAIC0xODYzLDYgKzE5NDEsOCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0Ryb3BEb3duSXRlbV9TcGlubmVyID0gMTY5NzQxNzg7IC8vIDB4MTAzMDE2MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0VkaXRUZXh0ID0gMTY5NzQxNTQ7IC8vIDB4MTAzMDE0YQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0V4cGFuZGFibGVMaXN0VmlldyA9IDE2OTc0MTU1OyAvLyAweDEwMzAxNGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRGV2aWNlRGVmYXVsdF9GYXN0U2Nyb2xsID0gMTY5NzQzMTY7IC8vIDB4MTAzMDFlYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0ZyYWdtZW50QnJlYWRDcnVtYnMgPSAxNjk3NDMxMTsgLy8gMHgxMDMwMWU3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0RldmljZURlZmF1bHRfR3JpZFZpZXcgPSAxNjk3NDE1NjsgLy8gMHgxMDMwMTRjCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0RldmljZURlZmF1bHRfSG9yaXpvbnRhbFNjcm9sbFZpZXcgPSAxNjk3NDE3MTsgLy8gMHgxMDMwMTViCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0RldmljZURlZmF1bHRfSW1hZ2VCdXR0b24gPSAxNjk3NDE1NzsgLy8gMHgxMDMwMTRkCkBAIC0xODk2LDYgKzE5NzYsOCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0Ryb3BEb3duSXRlbV9TcGlubmVyID0gMTY5NzQyMzM7IC8vIDB4MTAzMDE5OQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0VkaXRUZXh0ID0gMTY5NzQyMDY7IC8vIDB4MTAzMDE3ZQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0V4cGFuZGFibGVMaXN0VmlldyA9IDE2OTc0MjA3OyAvLyAweDEwMzAxN2YKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9GYXN0U2Nyb2xsID0gMTY5NzQzMTc7IC8vIDB4MTAzMDFlZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0ZyYWdtZW50QnJlYWRDcnVtYnMgPSAxNjk3NDMxMjsgLy8gMHgxMDMwMWU4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfR3JpZFZpZXcgPSAxNjk3NDIwODsgLy8gMHgxMDMwMTgwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfSG9yaXpvbnRhbFNjcm9sbFZpZXcgPSAxNjk3NDIyNjsgLy8gMHgxMDMwMTkyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfSW1hZ2VCdXR0b24gPSAxNjk3NDIwOTsgLy8gMHgxMDMwMTgxCkBAIC0xOTUyLDYgKzIwMzQsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ecm9wRG93bkl0ZW1fU3Bpbm5lciA9IDE2OTczODY4OyAvLyAweDEwMzAwMmMKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRWRpdFRleHQgPSAxNjk3Mzg1OTsgLy8gMHgxMDMwMDIzCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0V4cGFuZGFibGVMaXN0VmlldyA9IDE2OTczODYwOyAvLyAweDEwMzAwMjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRmFzdFNjcm9sbCA9IDE2OTc0MzEzOyAvLyAweDEwMzAxZTkKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRnJhZ21lbnRCcmVhZENydW1icyA9IDE2OTczOTYxOyAvLyAweDEwMzAwODkKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfR2FsbGVyeSA9IDE2OTczODc3OyAvLyAweDEwMzAwMzUKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfR3JpZFZpZXcgPSAxNjk3Mzg3NDsgLy8gMHgxMDMwMDMyCkBAIC0xOTgzLDYgKzIwNjYsOCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0Ryb3BEb3duSXRlbV9TcGlubmVyID0gMTY5NzM5OTU7IC8vIDB4MTAzMDBhYgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0VkaXRUZXh0ID0gMTY5NzM5NzE7IC8vIDB4MTAzMDA5MwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0V4cGFuZGFibGVMaXN0VmlldyA9IDE2OTczOTcyOyAvLyAweDEwMzAwOTQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfSG9sb19GYXN0U2Nyb2xsID0gMTY5NzQzMTQ7IC8vIDB4MTAzMDFlYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0ZyYWdtZW50QnJlYWRDcnVtYnMgPSAxNjk3NDMwOTsgLy8gMHgxMDMwMWU1CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0hvbG9fR3JpZFZpZXcgPSAxNjk3Mzk3MzsgLy8gMHgxMDMwMDk1CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0hvbG9fSG9yaXpvbnRhbFNjcm9sbFZpZXcgPSAxNjk3Mzk4ODsgLy8gMHgxMDMwMGE0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0hvbG9fSW1hZ2VCdXR0b24gPSAxNjk3Mzk3NDsgLy8gMHgxMDMwMDk2CkBAIC0yMDE2LDYgKzIxMDEsOCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0xpZ2h0X0Ryb3BEb3duSXRlbV9TcGlubmVyID0gMTY5NzQwNDE7IC8vIDB4MTAzMDBkOQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0xpZ2h0X0VkaXRUZXh0ID0gMTY5NzQwMTQ7IC8vIDB4MTAzMDBiZQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0xpZ2h0X0V4cGFuZGFibGVMaXN0VmlldyA9IDE2OTc0MDE1OyAvLyAweDEwMzAwYmYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfSG9sb19MaWdodF9GYXN0U2Nyb2xsID0gMTY5NzQzMTU7IC8vIDB4MTAzMDFlYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0xpZ2h0X0ZyYWdtZW50QnJlYWRDcnVtYnMgPSAxNjk3NDMxMDsgLy8gMHgxMDMwMWU2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0hvbG9fTGlnaHRfR3JpZFZpZXcgPSAxNjk3NDAxNjsgLy8gMHgxMDMwMGMwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0hvbG9fTGlnaHRfSG9yaXpvbnRhbFNjcm9sbFZpZXcgPSAxNjk3NDAzNDsgLy8gMHgxMDMwMGQyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0hvbG9fTGlnaHRfSW1hZ2VCdXR0b24gPSAxNjk3NDAxNzsgLy8gMHgxMDMwMGMxCkBAIC0yMDg1LDYgKzIxNzIsMTIzIEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1Byb2dyZXNzQmFyX0xhcmdlX0ludmVyc2UgPSAxNjk3MzkxNjsgLy8gMHgxMDMwMDVjCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1Byb2dyZXNzQmFyX1NtYWxsID0gMTY5NzM4NTQ7IC8vIDB4MTAzMDAxZQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Qcm9ncmVzc0Jhcl9TbWFsbF9JbnZlcnNlID0gMTY5NzM5MTc7IC8vIDB4MTAzMDA1ZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtID0gMTY5NzQzODA7IC8vIDB4MTAzMDIyYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0FjdGlvbkJhciA9IDE2OTc0MzgxOyAvLyAweDEwMzAyMmQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9BY3Rpb25CYXJfU29saWQgPSAxNjk3NDM4MjsgLy8gMHgxMDMwMjJlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fQWN0aW9uQmFyX1RhYkJhciA9IDE2OTc0MzgzOyAvLyAweDEwMzAyMmYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9BY3Rpb25CYXJfVGFiVGV4dCA9IDE2OTc0Mzg0OyAvLyAweDEwMzAyMzAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9BY3Rpb25CYXJfVGFiVmlldyA9IDE2OTc0Mzg1OyAvLyAweDEwMzAyMzEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9BY3Rpb25CdXR0b24gPSAxNjk3NDM4NjsgLy8gMHgxMDMwMjMyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fQWN0aW9uQnV0dG9uX0Nsb3NlTW9kZSA9IDE2OTc0Mzg3OyAvLyAweDEwMzAyMzMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9BY3Rpb25CdXR0b25fT3ZlcmZsb3cgPSAxNjk3NDM4ODsgLy8gMHgxMDMwMjM0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fQWN0aW9uQnV0dG9uX1RleHRCdXR0b24gPSAxNjk3NDM4OTsgLy8gMHgxMDMwMjM1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fQWN0aW9uTW9kZSA9IDE2OTc0MzkwOyAvLyAweDEwMzAyMzYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9BdXRvQ29tcGxldGVUZXh0VmlldyA9IDE2OTc0MzkxOyAvLyAweDEwMzAyMzcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9CdXR0b24gPSAxNjk3NDM5MjsgLy8gMHgxMDMwMjM4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fQnV0dG9uX0JvcmRlcmxlc3MgPSAxNjk3NDM5MzsgLy8gMHgxMDMwMjM5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fQnV0dG9uX0JvcmRlcmxlc3NfU21hbGwgPSAxNjk3NDM5NDsgLy8gMHgxMDMwMjNhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fQnV0dG9uX0luc2V0ID0gMTY5NzQzOTU7IC8vIDB4MTAzMDIzYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0J1dHRvbl9TbWFsbCA9IDE2OTc0Mzk2OyAvLyAweDEwMzAyM2MKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9CdXR0b25fVG9nZ2xlID0gMTY5NzQzOTc7IC8vIDB4MTAzMDIzZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0NhbGVuZGFyVmlldyA9IDE2OTc0Mzk4OyAvLyAweDEwMzAyM2UKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9DaGVja2VkVGV4dFZpZXcgPSAxNjk3NDM5OTsgLy8gMHgxMDMwMjNmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fQ29tcG91bmRCdXR0b25fQ2hlY2tCb3ggPSAxNjk3NDQwMDsgLy8gMHgxMDMwMjQwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fQ29tcG91bmRCdXR0b25fUmFkaW9CdXR0b24gPSAxNjk3NDQwMTsgLy8gMHgxMDMwMjQxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fQ29tcG91bmRCdXR0b25fU3RhciA9IDE2OTc0NDAyOyAvLyAweDEwMzAyNDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9EYXRlUGlja2VyID0gMTY5NzQ0MDM7IC8vIDB4MTAzMDI0MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0Ryb3BEb3duSXRlbSA9IDE2OTc0NDA0OyAvLyAweDEwMzAyNDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9Ecm9wRG93bkl0ZW1fU3Bpbm5lciA9IDE2OTc0NDA1OyAvLyAweDEwMzAyNDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9FZGl0VGV4dCA9IDE2OTc0NDA2OyAvLyAweDEwMzAyNDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9FeHBhbmRhYmxlTGlzdFZpZXcgPSAxNjk3NDQwNzsgLy8gMHgxMDMwMjQ3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fRmFzdFNjcm9sbCA9IDE2OTc0NDA4OyAvLyAweDEwMzAyNDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9GcmFnbWVudEJyZWFkQ3J1bWJzID0gMTY5NzQ0MDk7IC8vIDB4MTAzMDI0OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0dyaWRWaWV3ID0gMTY5NzQ0MTA7IC8vIDB4MTAzMDI0YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0hvcml6b250YWxTY3JvbGxWaWV3ID0gMTY5NzQ0MTE7IC8vIDB4MTAzMDI0YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0ltYWdlQnV0dG9uID0gMTY5NzQ0MTI7IC8vIDB4MTAzMDI0YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0ID0gMTY5NzQ0MzY7IC8vIDB4MTAzMDI2NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0X0FjdGlvbkJhciA9IDE2OTc0NDM3OyAvLyAweDEwMzAyNjUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9BY3Rpb25CYXJfU29saWQgPSAxNjk3NDQzODsgLy8gMHgxMDMwMjY2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfQWN0aW9uQmFyX1NvbGlkX0ludmVyc2UgPSAxNjk3NDQzOTsgLy8gMHgxMDMwMjY3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfQWN0aW9uQmFyX1RhYkJhciA9IDE2OTc0NDQwOyAvLyAweDEwMzAyNjgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9BY3Rpb25CYXJfVGFiQmFyX0ludmVyc2UgPSAxNjk3NDQ0MTsgLy8gMHgxMDMwMjY5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfQWN0aW9uQmFyX1RhYlRleHQgPSAxNjk3NDQ0MjsgLy8gMHgxMDMwMjZhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfQWN0aW9uQmFyX1RhYlRleHRfSW52ZXJzZSA9IDE2OTc0NDQzOyAvLyAweDEwMzAyNmIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9BY3Rpb25CYXJfVGFiVmlldyA9IDE2OTc0NDQ0OyAvLyAweDEwMzAyNmMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9BY3Rpb25CYXJfVGFiVmlld19JbnZlcnNlID0gMTY5NzQ0NDU7IC8vIDB4MTAzMDI2ZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0X0FjdGlvbkJ1dHRvbiA9IDE2OTc0NDQ2OyAvLyAweDEwMzAyNmUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9BY3Rpb25CdXR0b25fQ2xvc2VNb2RlID0gMTY5NzQ0NDc7IC8vIDB4MTAzMDI2ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0X0FjdGlvbkJ1dHRvbl9PdmVyZmxvdyA9IDE2OTc0NDQ4OyAvLyAweDEwMzAyNzAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9BY3Rpb25Nb2RlID0gMTY5NzQ0NTA7IC8vIDB4MTAzMDI3MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0X0FjdGlvbk1vZGVfSW52ZXJzZSA9IDE2OTc0NDQ5OyAvLyAweDEwMzAyNzEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9BdXRvQ29tcGxldGVUZXh0VmlldyA9IDE2OTc0NDUxOyAvLyAweDEwMzAyNzMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9CdXR0b24gPSAxNjk3NDQ1MjsgLy8gMHgxMDMwMjc0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfQnV0dG9uX0JvcmRlcmxlc3NfU21hbGwgPSAxNjk3NDQ1MzsgLy8gMHgxMDMwMjc1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfQnV0dG9uX0luc2V0ID0gMTY5NzQ0NTQ7IC8vIDB4MTAzMDI3NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0X0J1dHRvbl9TbWFsbCA9IDE2OTc0NDU1OyAvLyAweDEwMzAyNzcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9CdXR0b25fVG9nZ2xlID0gMTY5NzQ0NTY7IC8vIDB4MTAzMDI3OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0X0NhbGVuZGFyVmlldyA9IDE2OTc0NDU3OyAvLyAweDEwMzAyNzkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9DaGVja2VkVGV4dFZpZXcgPSAxNjk3NDQ1ODsgLy8gMHgxMDMwMjdhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfQ29tcG91bmRCdXR0b25fQ2hlY2tCb3ggPSAxNjk3NDQ1OTsgLy8gMHgxMDMwMjdiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfQ29tcG91bmRCdXR0b25fUmFkaW9CdXR0b24gPSAxNjk3NDQ2MDsgLy8gMHgxMDMwMjdjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfQ29tcG91bmRCdXR0b25fU3RhciA9IDE2OTc0NDYxOyAvLyAweDEwMzAyN2QKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9Ecm9wRG93bkl0ZW0gPSAxNjk3NDQ2MjsgLy8gMHgxMDMwMjdlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfRHJvcERvd25JdGVtX1NwaW5uZXIgPSAxNjk3NDQ2MzsgLy8gMHgxMDMwMjdmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfRWRpdFRleHQgPSAxNjk3NDQ2NDsgLy8gMHgxMDMwMjgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfRXhwYW5kYWJsZUxpc3RWaWV3ID0gMTY5NzQ0NjU7IC8vIDB4MTAzMDI4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0X0Zhc3RTY3JvbGwgPSAxNjk3NDQ2NjsgLy8gMHgxMDMwMjgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfRnJhZ21lbnRCcmVhZENydW1icyA9IDE2OTc0NDY3OyAvLyAweDEwMzAyODMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9HcmlkVmlldyA9IDE2OTc0NDY4OyAvLyAweDEwMzAyODQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9Ib3Jpem9udGFsU2Nyb2xsVmlldyA9IDE2OTc0NDY5OyAvLyAweDEwMzAyODUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9JbWFnZUJ1dHRvbiA9IDE2OTc0NDcwOyAvLyAweDEwMzAyODYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9MaXN0UG9wdXBXaW5kb3cgPSAxNjk3NDQ3MTsgLy8gMHgxMDMwMjg3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfTGlzdFZpZXcgPSAxNjk3NDQ3MjsgLy8gMHgxMDMwMjg4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfTGlzdFZpZXdfRHJvcERvd24gPSAxNjk3NDQ3MzsgLy8gMHgxMDMwMjg5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfTWVkaWFSb3V0ZUJ1dHRvbiA9IDE2OTc0NDc0OyAvLyAweDEwMzAyOGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9Qb3B1cE1lbnUgPSAxNjk3NDQ3NTsgLy8gMHgxMDMwMjhiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfUG9wdXBXaW5kb3cgPSAxNjk3NDQ3NjsgLy8gMHgxMDMwMjhjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfUHJvZ3Jlc3NCYXIgPSAxNjk3NDQ3NzsgLy8gMHgxMDMwMjhkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfUHJvZ3Jlc3NCYXJfSG9yaXpvbnRhbCA9IDE2OTc0NDc4OyAvLyAweDEwMzAyOGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9Qcm9ncmVzc0Jhcl9JbnZlcnNlID0gMTY5NzQ0Nzk7IC8vIDB4MTAzMDI4ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0X1Byb2dyZXNzQmFyX0xhcmdlID0gMTY5NzQ0ODA7IC8vIDB4MTAzMDI5MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0X1Byb2dyZXNzQmFyX0xhcmdlX0ludmVyc2UgPSAxNjk3NDQ4MTsgLy8gMHgxMDMwMjkxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfUHJvZ3Jlc3NCYXJfU21hbGwgPSAxNjk3NDQ4MjsgLy8gMHgxMDMwMjkyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfUHJvZ3Jlc3NCYXJfU21hbGxfSW52ZXJzZSA9IDE2OTc0NDgzOyAvLyAweDEwMzAyOTMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9Qcm9ncmVzc0Jhcl9TbWFsbF9UaXRsZSA9IDE2OTc0NDg0OyAvLyAweDEwMzAyOTQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9SYXRpbmdCYXIgPSAxNjk3NDQ4NTsgLy8gMHgxMDMwMjk1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfUmF0aW5nQmFyX0luZGljYXRvciA9IDE2OTc0NDg2OyAvLyAweDEwMzAyOTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9SYXRpbmdCYXJfU21hbGwgPSAxNjk3NDQ4NzsgLy8gMHgxMDMwMjk3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfU2Nyb2xsVmlldyA9IDE2OTc0NDg4OyAvLyAweDEwMzAyOTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9TZWVrQmFyID0gMTY5NzQ0ODk7IC8vIDB4MTAzMDI5OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0X1NwaW5uZXIgPSAxNjk3NDQ5MDsgLy8gMHgxMDMwMjlhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fTGlnaHRfVGFiID0gMTY5NzQ0OTE7IC8vIDB4MTAzMDI5YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpZ2h0X1RhYldpZGdldCA9IDE2OTc0NDkyOyAvLyAweDEwMzAyOWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9UZXh0VmlldyA9IDE2OTc0NDkzOyAvLyAweDEwMzAyOWQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9UZXh0Vmlld19TcGlubmVySXRlbSA9IDE2OTc0NDk0OyAvLyAweDEwMzAyOWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9XZWJUZXh0VmlldyA9IDE2OTc0NDk1OyAvLyAweDEwMzAyOWYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaWdodF9XZWJWaWV3ID0gMTY5NzQ0OTY7IC8vIDB4MTAzMDJhMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX0xpc3RQb3B1cFdpbmRvdyA9IDE2OTc0NDEzOyAvLyAweDEwMzAyNGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaXN0VmlldyA9IDE2OTc0NDE0OyAvLyAweDEwMzAyNGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9MaXN0Vmlld19Ecm9wRG93biA9IDE2OTc0NDE1OyAvLyAweDEwMzAyNGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9NZWRpYVJvdXRlQnV0dG9uID0gMTY5NzQ0MTY7IC8vIDB4MTAzMDI1MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX1BvcHVwTWVudSA9IDE2OTc0NDE3OyAvLyAweDEwMzAyNTEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9Qb3B1cFdpbmRvdyA9IDE2OTc0NDE4OyAvLyAweDEwMzAyNTIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9Qcm9ncmVzc0JhciA9IDE2OTc0NDE5OyAvLyAweDEwMzAyNTMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9Qcm9ncmVzc0Jhcl9Ib3Jpem9udGFsID0gMTY5NzQ0MjA7IC8vIDB4MTAzMDI1NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX1Byb2dyZXNzQmFyX0xhcmdlID0gMTY5NzQ0MjE7IC8vIDB4MTAzMDI1NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX1Byb2dyZXNzQmFyX1NtYWxsID0gMTY5NzQ0MjI7IC8vIDB4MTAzMDI1NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX1Byb2dyZXNzQmFyX1NtYWxsX1RpdGxlID0gMTY5NzQ0MjM7IC8vIDB4MTAzMDI1NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX1JhdGluZ0JhciA9IDE2OTc0NDI0OyAvLyAweDEwMzAyNTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9SYXRpbmdCYXJfSW5kaWNhdG9yID0gMTY5NzQ0MjU7IC8vIDB4MTAzMDI1OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX1JhdGluZ0Jhcl9TbWFsbCA9IDE2OTc0NDI2OyAvLyAweDEwMzAyNWEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9TY3JvbGxWaWV3ID0gMTY5NzQ0Mjc7IC8vIDB4MTAzMDI1YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX1NlZWtCYXIgPSAxNjk3NDQyODsgLy8gMHgxMDMwMjVjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fU3Bpbm5lciA9IDE2OTc0NDI5OyAvLyAweDEwMzAyNWQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfUXVhbnR1bV9UYWIgPSAxNjk3NDQzMDsgLy8gMHgxMDMwMjVlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1F1YW50dW1fVGFiV2lkZ2V0ID0gMTY5NzQ0MzE7IC8vIDB4MTAzMDI1ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX1RleHRWaWV3ID0gMTY5NzQ0MzI7IC8vIDB4MTAzMDI2MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX1RleHRWaWV3X1NwaW5uZXJJdGVtID0gMTY5NzQ0MzM7IC8vIDB4MTAzMDI2MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX1dlYlRleHRWaWV3ID0gMTY5NzQ0MzQ7IC8vIDB4MTAzMDI2MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9RdWFudHVtX1dlYlZpZXcgPSAxNjk3NDQzNTsgLy8gMHgxMDMwMjYzCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X1JhdGluZ0JhciA9IDE2OTczODU3OyAvLyAweDEwMzAwMjEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfU2Nyb2xsVmlldyA9IDE2OTczODY5OyAvLyAweDEwMzAwMmQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfU2Vla0JhciA9IDE2OTczODU2OyAvLyAweDEwMzAwMjAKQEAgLTI0MzQsMTEgKzI2MzgsMjMgQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5PYmplY3QgZXZhbHVhdGUoZmxvYXQsIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpOwogICB9CiAKKyAgcHVibGljIGNsYXNzIEZsb2F0QXJyYXlFdmFsdWF0b3IgaW1wbGVtZW50cyBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yIHsKKyAgICBjdG9yIHB1YmxpYyBGbG9hdEFycmF5RXZhbHVhdG9yKCk7CisgICAgY3RvciBwdWJsaWMgRmxvYXRBcnJheUV2YWx1YXRvcihmbG9hdFtdKTsKKyAgICBtZXRob2QgcHVibGljIGZsb2F0W10gZXZhbHVhdGUoZmxvYXQsIGZsb2F0W10sIGZsb2F0W10pOworICB9CisKICAgcHVibGljIGNsYXNzIEZsb2F0RXZhbHVhdG9yIGltcGxlbWVudHMgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvciB7CiAgICAgY3RvciBwdWJsaWMgRmxvYXRFdmFsdWF0b3IoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5GbG9hdCBldmFsdWF0ZShmbG9hdCwgamF2YS5sYW5nLk51bWJlciwgamF2YS5sYW5nLk51bWJlcik7CiAgIH0KIAorICBwdWJsaWMgY2xhc3MgSW50QXJyYXlFdmFsdWF0b3IgaW1wbGVtZW50cyBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yIHsKKyAgICBjdG9yIHB1YmxpYyBJbnRBcnJheUV2YWx1YXRvcigpOworICAgIGN0b3IgcHVibGljIEludEFycmF5RXZhbHVhdG9yKGludFtdKTsKKyAgICBtZXRob2QgcHVibGljIGludFtdIGV2YWx1YXRlKGZsb2F0LCBpbnRbXSwgaW50W10pOworICB9CisKICAgcHVibGljIGNsYXNzIEludEV2YWx1YXRvciBpbXBsZW1lbnRzIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3IgewogICAgIGN0b3IgcHVibGljIEludEV2YWx1YXRvcigpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkludGVnZXIgZXZhbHVhdGUoZmxvYXQsIGphdmEubGFuZy5JbnRlZ2VyLCBqYXZhLmxhbmcuSW50ZWdlcik7CkBAIC0yNTA3LDE4ICsyNzIzLDM5IEBACiAgICAgY3RvciBwdWJsaWMgT2JqZWN0QW5pbWF0b3IoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0UHJvcGVydHlOYW1lKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IGdldFRhcmdldCgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mQXJnYihqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQuLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mQXJnYihULCBhbmRyb2lkLnV0aWwuUHJvcGVydHk8VCwgamF2YS5sYW5nLkludGVnZXI+LCBpbnQuLi4pOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mRmxvYXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgZmxvYXQuLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mRmxvYXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5ncmFwaGljcy5QYXRoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZkZsb2F0KFQsIGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTxULCBqYXZhLmxhbmcuRmxvYXQ+LCBmbG9hdC4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZGbG9hdChULCBhbmRyb2lkLnV0aWwuUHJvcGVydHk8VCwgamF2YS5sYW5nLkZsb2F0PiwgYW5kcm9pZC51dGlsLlByb3BlcnR5PFQsIGphdmEubGFuZy5GbG9hdD4sIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZJbnQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgaW50Li4uKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZkludChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmdyYXBoaWNzLlBhdGgpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mSW50KFQsIGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTxULCBqYXZhLmxhbmcuSW50ZWdlcj4sIGludC4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZJbnQoVCwgYW5kcm9pZC51dGlsLlByb3BlcnR5PFQsIGphdmEubGFuZy5JbnRlZ2VyPiwgYW5kcm9pZC51dGlsLlByb3BlcnR5PFQsIGphdmEubGFuZy5JbnRlZ2VyPiwgYW5kcm9pZC5ncmFwaGljcy5QYXRoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZk11bHRpRmxvYXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgZmxvYXRbXVtdKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZk11bHRpRmxvYXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5ncmFwaGljcy5QYXRoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZk11bHRpRmxvYXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5hbmltYXRpb24uVHlwZUNvbnZlcnRlcjxULCBmbG9hdFtdPiwgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvcjxUPiwgVC4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZNdWx0aUludChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBpbnRbXVtdKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZk11bHRpSW50KGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZNdWx0aUludChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlQ29udmVydGVyPFQsIGludFtdPiwgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvcjxUPiwgVC4uLik7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZPYmplY3QoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvciwgamF2YS5sYW5nLk9iamVjdC4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZPYmplY3QoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5hbmltYXRpb24uVHlwZUNvbnZlcnRlcjxhbmRyb2lkLmdyYXBoaWNzLlBvaW50RiwgPz4sIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZPYmplY3QoVCwgYW5kcm9pZC51dGlsLlByb3BlcnR5PFQsIFY+LCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yPFY+LCBWLi4uKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZk9iamVjdChULCBhbmRyb2lkLnV0aWwuUHJvcGVydHk8VCwgUD4sIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVDb252ZXJ0ZXI8ViwgUD4sIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3I8Vj4sIFYuLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mT2JqZWN0KFQsIGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTxULCBWPiwgYW5kcm9pZC5hbmltYXRpb24uVHlwZUNvbnZlcnRlcjxhbmRyb2lkLmdyYXBoaWNzLlBvaW50RiwgVj4sIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcihqYXZhLmxhbmcuT2JqZWN0LCBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlci4uLik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEF1dG9DYW5jZWwoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5KGFuZHJvaWQudXRpbC5Qcm9wZXJ0eSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5TmFtZShqYXZhLmxhbmcuU3RyaW5nKTsKICAgfQogCisgIHB1YmxpYyBjbGFzcyBQb2ludEZFdmFsdWF0b3IgaW1wbGVtZW50cyBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yIHsKKyAgICBjdG9yIHB1YmxpYyBQb2ludEZFdmFsdWF0b3IoKTsKKyAgICBjdG9yIHB1YmxpYyBQb2ludEZFdmFsdWF0b3IoYW5kcm9pZC5ncmFwaGljcy5Qb2ludEYpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5Qb2ludEYgZXZhbHVhdGUoZmxvYXQsIGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGLCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50Rik7CisgIH0KKwogICBwdWJsaWMgY2xhc3MgUHJvcGVydHlWYWx1ZXNIb2xkZXIgaW1wbGVtZW50cyBqYXZhLmxhbmcuQ2xvbmVhYmxlIHsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIGNsb25lKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFByb3BlcnR5TmFtZSgpOwpAQCAtMjUyOCw4ICsyNzY1LDIwIEBACiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZJbnQoYW5kcm9pZC51dGlsLlByb3BlcnR5PD8sIGphdmEubGFuZy5JbnRlZ2VyPiwgaW50Li4uKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlciBvZktleWZyYW1lKGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuYW5pbWF0aW9uLktleWZyYW1lLi4uKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlciBvZktleWZyYW1lKGFuZHJvaWQudXRpbC5Qcm9wZXJ0eSwgYW5kcm9pZC5hbmltYXRpb24uS2V5ZnJhbWUuLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlGbG9hdChqYXZhLmxhbmcuU3RyaW5nLCBmbG9hdFtdW10pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlGbG9hdChqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmdyYXBoaWNzLlBhdGgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlGbG9hdChqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlQ29udmVydGVyPFYsIGZsb2F0W10+LCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yPFY+LCBWLi4uKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk11bHRpRmxvYXQoamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5hbmltYXRpb24uVHlwZUNvbnZlcnRlcjxULCBmbG9hdFtdPiwgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvcjxUPiwgYW5kcm9pZC5hbmltYXRpb24uS2V5ZnJhbWUuLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlJbnQoamF2YS5sYW5nLlN0cmluZywgaW50W11bXSk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZNdWx0aUludChqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmdyYXBoaWNzLlBhdGgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlJbnQoamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5hbmltYXRpb24uVHlwZUNvbnZlcnRlcjxWLCBpbnRbXT4sIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3I8Vj4sIFYuLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlJbnQoamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5hbmltYXRpb24uVHlwZUNvbnZlcnRlcjxULCBpbnRbXT4sIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3I8VD4sIGFuZHJvaWQuYW5pbWF0aW9uLktleWZyYW1lLi4uKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk9iamVjdChqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yLCBqYXZhLmxhbmcuT2JqZWN0Li4uKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk9iamVjdChqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlQ29udmVydGVyPGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGLCA/PiwgYW5kcm9pZC5ncmFwaGljcy5QYXRoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk9iamVjdChhbmRyb2lkLnV0aWwuUHJvcGVydHksIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3I8Vj4sIFYuLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mT2JqZWN0KGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTw/LCBWPiwgYW5kcm9pZC5hbmltYXRpb24uVHlwZUNvbnZlcnRlcjxULCBWPiwgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvcjxUPiwgVC4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZPYmplY3QoYW5kcm9pZC51dGlsLlByb3BlcnR5PD8sIFY+LCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlQ29udmVydGVyPGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGLCBWPiwgYW5kcm9pZC5ncmFwaGljcy5QYXRoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29udmVydGVyKGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVDb252ZXJ0ZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRFdmFsdWF0b3IoYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEZsb2F0VmFsdWVzKGZsb2F0Li4uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SW50VmFsdWVzKGludC4uLik7CkBAIC0yNTQxLDYgKzI3OTAsNyBAQAogCiAgIHB1YmxpYyBjbGFzcyBSZWN0RXZhbHVhdG9yIGltcGxlbWVudHMgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvciB7CiAgICAgY3RvciBwdWJsaWMgUmVjdEV2YWx1YXRvcigpOworICAgIGN0b3IgcHVibGljIFJlY3RFdmFsdWF0b3IoYW5kcm9pZC5ncmFwaGljcy5SZWN0KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCBldmFsdWF0ZShmbG9hdCwgYW5kcm9pZC5ncmFwaGljcy5SZWN0LCBhbmRyb2lkLmdyYXBoaWNzLlJlY3QpOwogICB9CiAKQEAgLTI1NTcsNiArMjgwNywxMiBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgZmxvYXQgZ2V0SW50ZXJwb2xhdGlvbihmbG9hdCk7CiAgIH0KIAorICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVHlwZUNvbnZlcnRlciB7CisgICAgY3RvciBwdWJsaWMgVHlwZUNvbnZlcnRlcihqYXZhLmxhbmcuQ2xhc3M8VD4sIGphdmEubGFuZy5DbGFzczxWPik7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBWIGNvbnZlcnQoVCk7CisgICAgbWV0aG9kIHB1YmxpYyBUIGNvbnZlcnRCYWNrKFYpOworICB9CisKICAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBUeXBlRXZhbHVhdG9yIHsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IFQgZXZhbHVhdGUoZmxvYXQsIFQsIFQpOwogICB9CkBAIC0yNTc1LDYgKzI4MzEsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRTdGFydERlbGF5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlcltdIGdldFZhbHVlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1J1bm5pbmcoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5WYWx1ZUFuaW1hdG9yIG9mQXJnYihpbnQuLi4pOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3Igb2ZGbG9hdChmbG9hdC4uLik7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uVmFsdWVBbmltYXRvciBvZkludChpbnQuLi4pOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3Igb2ZPYmplY3QoYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvciwgamF2YS5sYW5nLk9iamVjdC4uLik7CkBAIC0yNzU2LDYgKzMwMTMsOCBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRDYWxsaW5nUGFja2FnZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldENoYW5naW5nQ29uZmlndXJhdGlvbnMoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lIGdldENvbXBvbmVudE5hbWUoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSBnZXRDb250ZW50U2NlbmUoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uTWFuYWdlciBnZXRDb250ZW50VHJhbnNpdGlvbk1hbmFnZXIoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5WaWV3IGdldEN1cnJlbnRGb2N1cygpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuRnJhZ21lbnRNYW5hZ2VyIGdldEZyYWdtZW50TWFuYWdlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkludGVudCBnZXRJbnRlbnQoKTsKQEAgLTI4NjEsNiArMzEyMCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlcG9ydEZ1bGx5RHJhd24oKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVxdWVzdFdpbmRvd0ZlYXR1cmUoaW50KTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgcnVuT25VaVRocmVhZChqYXZhLmxhbmcuUnVubmFibGUpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb250ZW50VHJhbnNpdGlvbk1hbmFnZXIoYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb25NYW5hZ2VyKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29udGVudFZpZXcoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29udGVudFZpZXcoYW5kcm9pZC52aWV3LlZpZXcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb250ZW50VmlldyhhbmRyb2lkLnZpZXcuVmlldywgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXMpOwpAQCAtMjg4Miw3ICszMTQyLDcgQEAKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2V0U2Vjb25kYXJ5UHJvZ3Jlc3MoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VGl0bGUoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRpdGxlKGludCk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRpdGxlQ29sb3IoaW50KTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCBzZXRUaXRsZUNvbG9yKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHNldFZvbHVtZUNvbnRyb2xTdHJlYW0oaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2hvdWxkVXBSZWNyZWF0ZVRhc2soYW5kcm9pZC5jb250ZW50LkludGVudCk7CkBAIC0zMTczLDYgKzM0MzMsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2cuQnVpbGRlciBzZXRTaW5nbGVDaG9pY2VJdGVtcyhhbmRyb2lkLndpZGdldC5MaXN0QWRhcHRlciwgaW50LCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lcik7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5BbGVydERpYWxvZy5CdWlsZGVyIHNldFRpdGxlKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5BbGVydERpYWxvZy5CdWlsZGVyIHNldFRpdGxlKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2cuQnVpbGRlciBzZXRWaWV3KGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5BbGVydERpYWxvZy5CdWlsZGVyIHNldFZpZXcoYW5kcm9pZC52aWV3LlZpZXcpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2cgc2hvdygpOwogICB9CkBAIC0zMzIyLDYgKzM1ODMsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRDb250ZW50VmlldyhhbmRyb2lkLnZpZXcuVmlldywgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjYW5jZWwoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY2xvc2VPcHRpb25zTWVudSgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjcmVhdGUoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZGlzbWlzcygpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaEdlbmVyaWNNb3Rpb25FdmVudChhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaEtleUV2ZW50KGFuZHJvaWQudmlldy5LZXlFdmVudCk7CkBAIC0zNjA4LDYgKzM4NzAsNyBAQAogICAgIGN0b3IgcHVibGljIEZyYWdtZW50QnJlYWRDcnVtYnMoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEZyYWdtZW50QnJlYWRDcnVtYnMoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEZyYWdtZW50QnJlYWRDcnVtYnMoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgRnJhZ21lbnRCcmVhZENydW1icyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkJhY2tTdGFja0NoYW5nZWQoKTsKICAgICBtZXRob2QgcHJvdGVjdGVkIHZvaWQgb25MYXlvdXQoYm9vbGVhbiwgaW50LCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QWN0aXZpdHkoYW5kcm9pZC5hcHAuQWN0aXZpdHkpOwpAQCAtMzg5NCw2ICs0MTU3LDcgQEAKICAgICBjdG9yIHB1YmxpYyBNZWRpYVJvdXRlQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBNZWRpYVJvdXRlQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBNZWRpYVJvdXRlQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIE1lZGlhUm91dGVCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRSb3V0ZVR5cGVzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQXR0YWNoZWRUb1dpbmRvdygpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkRldGFjaGVkRnJvbVdpbmRvdygpOwpAQCAtNTc2MSw2ICs2MDI1LDggQEAKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQub3MuQnVuZGxlIGNhbGwoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgY2FuY2VsU3luYyhhbmRyb2lkLm5ldC5VcmkpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgY2FuY2VsU3luYyhhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgY2FuY2VsU3luYyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBjYW5jZWxTeW5jKGFuZHJvaWQuY29udGVudC5TeW5jUmVxdWVzdCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLm5ldC5VcmkgY2Fub25pY2FsaXplKGFuZHJvaWQubmV0LlVyaSk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBpbnQgZGVsZXRlKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBkZXByZWNhdGVkIGFuZHJvaWQuY29udGVudC5TeW5jSW5mbyBnZXRDdXJyZW50U3luYygpOwpAQCAtNTc2OSwxNCArNjAzNSwxOCBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5VcmlQZXJtaXNzaW9uPiBnZXRPdXRnb2luZ1BlcnNpc3RlZFVyaVBlcm1pc3Npb25zKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LlBlcmlvZGljU3luYz4gZ2V0UGVyaW9kaWNTeW5jcyhhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5QZXJpb2RpY1N5bmM+IGdldFBlcmlvZGljU3luY3MoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LlVyaVBlcm1pc3Npb24+IGdldFBlcnNpc3RlZFVyaVBlcm1pc3Npb25zKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0U3RyZWFtVHlwZXMoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuU3luY0FkYXB0ZXJUeXBlW10gZ2V0U3luY0FkYXB0ZXJUeXBlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0U3luY0F1dG9tYXRpY2FsbHkoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0VHlwZShhbmRyb2lkLm5ldC5VcmkpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIGluc2VydChhbmRyb2lkLm5ldC5VcmksIGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU2VydmljZUFjdGl2ZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N5bmNBY3RpdmUoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3luY0FjdGl2ZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N5bmNQZW5kaW5nKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N5bmNQZW5kaW5nKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlKGFuZHJvaWQubmV0LlVyaSwgYW5kcm9pZC5kYXRhYmFzZS5Db250ZW50T2JzZXJ2ZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2UoYW5kcm9pZC5uZXQuVXJpLCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlciwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0RmlsZURlc2NyaXB0b3Igb3BlbkFzc2V0RmlsZURlc2NyaXB0b3IoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CkBAIC01Nzk4LDYgKzYwNjgsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgcmVxdWVzdFN5bmMoYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0KTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIHNldElzU3luY2FibGUoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgc2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkoYm9vbGVhbik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRTZXJ2aWNlQWN0aXZlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIHNldFN5bmNBdXRvbWF0aWNhbGx5KGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgc3RhcnRTeW5jKGFuZHJvaWQubmV0LlVyaSwgYW5kcm9pZC5vcy5CdW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB0YWtlUGVyc2lzdGFibGVVcmlQZXJtaXNzaW9uKGFuZHJvaWQubmV0LlVyaSwgaW50KTsKQEAgLTU5ODQsNiArNjI1NSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQklORF9OT1RfRk9SRUdST1VORCA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJJTkRfV0FJVkVfUFJJT1JJVFkgPSAzMjsgLy8gMHgyMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBCTFVFVE9PVEhfU0VSVklDRSA9ICJibHVldG9vdGgiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDQU1FUkFfU0VSVklDRSA9ICJjYW1lcmEiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDQVBUSU9OSU5HX1NFUlZJQ0UgPSAiY2FwdGlvbmluZyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENMSVBCT0FSRF9TRVJWSUNFID0gImNsaXBib2FyZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTk5FQ1RJVklUWV9TRVJWSUNFID0gImNvbm5lY3Rpdml0eSI7CkBAIC02NzQxLDcgKzcwMTMsOSBAQAogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQgYWNjb3VudDsKICAgICBmaWVsZCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBhdXRob3JpdHk7CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGFuZHJvaWQub3MuQnVuZGxlIGV4dHJhczsKKyAgICBmaWVsZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1NlcnZpY2U7CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGxvbmcgcGVyaW9kOworICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSBzZXJ2aWNlOwogICB9CiAKICAgcHVibGljIGNsYXNzIFJlY2VpdmVyQ2FsbE5vdEFsbG93ZWRFeGNlcHRpb24gZXh0ZW5kcyBhbmRyb2lkLnV0aWwuQW5kcm9pZFJ1bnRpbWVFeGNlcHRpb24gewpAQCAtNjg1NywxMSArNzEzMSwxMyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQgYWNjb3VudDsKICAgICBmaWVsZCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBhdXRob3JpdHk7CisgICAgZmllbGQgcHVibGljIGZpbmFsIGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lIHNlcnZpY2U7CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGxvbmcgc3RhcnRUaW1lOwogICB9CiAKICAgcHVibGljIGNsYXNzIFN5bmNSZXF1ZXN0IGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKICAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzRXhwZWRpdGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvciBDUkVBVE9SOwogICB9CkBAIC02ODc2LDcgKzcxNTIsMTAgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5TeW5jUmVxdWVzdC5CdWlsZGVyIHNldElnbm9yZVNldHRpbmdzKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0LkJ1aWxkZXIgc2V0TWFudWFsKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0LkJ1aWxkZXIgc2V0Tm9SZXRyeShib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5TeW5jUmVxdWVzdC5CdWlsZGVyIHNldFByaW9yaXR5KGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuU3luY1JlcXVlc3QuQnVpbGRlciBzZXRTeW5jQWRhcHRlcihhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0LkJ1aWxkZXIgc2V0U3luY0FkYXB0ZXIoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0LkJ1aWxkZXIgc2V0VHJhbnNmZXJTaXplKGxvbmcsIGxvbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0LkJ1aWxkZXIgc3luY09uY2UoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5TeW5jUmVxdWVzdC5CdWlsZGVyIHN5bmNQZXJpb2RpYyhsb25nLCBsb25nKTsKICAgfQpAQCAtNjkwNCw2ICs3MTgzLDEzIEBACiAgICAgZmllbGQgcHVibGljIGJvb2xlYW4gdG9vTWFueVJldHJpZXM7CiAgIH0KIAorICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3luY1NlcnZpY2UgZXh0ZW5kcyBhbmRyb2lkLmFwcC5TZXJ2aWNlIHsKKyAgICBjdG9yIHB1YmxpYyBTeW5jU2VydmljZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5JQmluZGVyIG9uQmluZChhbmRyb2lkLmNvbnRlbnQuSW50ZW50KTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25QZXJmb3JtU3luYyhhbmRyb2lkLm9zLkJ1bmRsZSwgYW5kcm9pZC5jb250ZW50LlN5bmNSZXN1bHQpOworICAgIG1ldGhvZCBwcm90ZWN0ZWQgYm9vbGVhbiBwYXJhbGxlbFN5bmNzRW5hYmxlZCgpOworICB9CisKICAgcHVibGljIGNsYXNzIFN5bmNTdGF0cyBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7CiAgICAgY3RvciBwdWJsaWMgU3luY1N0YXRzKCk7CiAgICAgY3RvciBwdWJsaWMgU3luY1N0YXRzKGFuZHJvaWQub3MuUGFyY2VsKTsKQEAgLTc1NjcsNiArNzg1Myw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldENvbG9yRm9yU3RhdGUoaW50W10sIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RGVmYXVsdENvbG9yKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzT3BhcXVlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzU3RhdGVmdWwoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0IHZhbHVlT2YoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3Qgd2l0aEFscGhhKGludCk7CkBAIC04NzU2LDYgKzkwNDMsNyBAQAogICAgIGN0b3IgcHVibGljIEdlc3R1cmVPdmVybGF5VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgR2VzdHVyZU92ZXJsYXlWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBHZXN0dXJlT3ZlcmxheVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgR2VzdHVyZU92ZXJsYXlWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZE9uR2VzdHVyZUxpc3RlbmVyKGFuZHJvaWQuZ2VzdHVyZS5HZXN0dXJlT3ZlcmxheVZpZXcuT25HZXN0dXJlTGlzdGVuZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRPbkdlc3R1cmVQZXJmb3JtZWRMaXN0ZW5lcihhbmRyb2lkLmdlc3R1cmUuR2VzdHVyZU92ZXJsYXlWaWV3Lk9uR2VzdHVyZVBlcmZvcm1lZExpc3RlbmVyKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkT25HZXN0dXJpbmdMaXN0ZW5lcihhbmRyb2lkLmdlc3R1cmUuR2VzdHVyZU92ZXJsYXlWaWV3Lk9uR2VzdHVyaW5nTGlzdGVuZXIpOwpAQCAtOTIyNCw2ICs5NTEyLDkgQEAKICAgcHVibGljIGNsYXNzIENvbG9yTWF0cml4Q29sb3JGaWx0ZXIgZXh0ZW5kcyBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yRmlsdGVyIHsKICAgICBjdG9yIHB1YmxpYyBDb2xvck1hdHJpeENvbG9yRmlsdGVyKGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JNYXRyaXgpOwogICAgIGN0b3IgcHVibGljIENvbG9yTWF0cml4Q29sb3JGaWx0ZXIoZmxvYXRbXSk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yTWF0cml4IGdldENvbG9yTWF0cml4KCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbG9yTWF0cml4KGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JNYXRyaXgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb2xvck1hdHJpeChmbG9hdFtdKTsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBDb21wb3NlUGF0aEVmZmVjdCBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aEVmZmVjdCB7CkBAIC05MjYxLDYgKzk1NTIsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEpQRUcgPSAyNTY7IC8vIDB4MTAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlYxNiA9IDE2OyAvLyAweDEwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlYyMSA9IDE3OyAvLyAweDExCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkFXX1NFTlNPUiA9IDMyOyAvLyAweDIwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkdCXzU2NSA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOS05PV04gPSAwOyAvLyAweDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBZVVZfNDIwXzg4OCA9IDM1OyAvLyAweDIzCkBAIC05Mjk4LDYgKzk1OTAsMTAgQEAKIAogICBwdWJsaWMgY2xhc3MgTGlnaHRpbmdDb2xvckZpbHRlciBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JGaWx0ZXIgewogICAgIGN0b3IgcHVibGljIExpZ2h0aW5nQ29sb3JGaWx0ZXIoaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldENvbG9yQWRkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Q29sb3JNdWx0aXBseSgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb2xvckFkZChpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb2xvck11bHRpcGx5KGludCk7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgTGluZWFyR3JhZGllbnQgZXh0ZW5kcyBhbmRyb2lkLmdyYXBoaWNzLlNoYWRlciB7CkBAIC05NjA4LDYgKzk5MDQsOCBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB0b2dnbGVJbnZlcnNlRmlsbFR5cGUoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgdHJhbnNmb3JtKGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4LCBhbmRyb2lkLmdyYXBoaWNzLlBhdGgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB0cmFuc2Zvcm0oYW5kcm9pZC5ncmFwaGljcy5NYXRyaXgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB0cmltKGZsb2F0LCBmbG9hdCwgZmxvYXQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB0cmltKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aCk7CiAgIH0KIAogICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFBhdGguRGlyZWN0aW9uIGV4dGVuZHMgamF2YS5sYW5nLkVudW0gewpAQCAtOTc3Miw2ICsxMDA3MCwxMCBAQAogCiAgIHB1YmxpYyBjbGFzcyBQb3J0ZXJEdWZmQ29sb3JGaWx0ZXIgZXh0ZW5kcyBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yRmlsdGVyIHsKICAgICBjdG9yIHB1YmxpYyBQb3J0ZXJEdWZmQ29sb3JGaWx0ZXIoaW50LCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmYuTW9kZSk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Q29sb3IoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZi5Nb2RlIGdldE1vZGUoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29sb3IoaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TW9kZShhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmYuTW9kZSk7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgUG9ydGVyRHVmZlhmZXJtb2RlIGV4dGVuZHMgYW5kcm9pZC5ncmFwaGljcy5YZmVybW9kZSB7CkBAIC0xMDAzNyw3ICsxMDMzOSw2IEBACiAgICAgY3RvciBwdWJsaWMgQml0bWFwRHJhd2FibGUoYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIGN0b3IgcHVibGljIGRlcHJlY2F0ZWQgQml0bWFwRHJhd2FibGUoamF2YS5pby5JbnB1dFN0cmVhbSk7CiAgICAgY3RvciBwdWJsaWMgQml0bWFwRHJhd2FibGUoYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMsIGphdmEuaW8uSW5wdXRTdHJlYW0pOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBkcmF3KGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwIGdldEJpdG1hcCgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZS5Db25zdGFudFN0YXRlIGdldENvbnN0YW50U3RhdGUoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRHcmF2aXR5KCk7CkBAIC0xMDA2Myw3ICsxMDM2NCw2IEBACiAKICAgcHVibGljIGNsYXNzIENsaXBEcmF3YWJsZSBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgaW1wbGVtZW50cyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLkNhbGxiYWNrIHsKICAgICBjdG9yIHB1YmxpYyBDbGlwRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSwgaW50LCBpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBkcmF3KGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRPcGFjaXR5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGludmFsaWRhdGVEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2NoZWR1bGVEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLCBqYXZhLmxhbmcuUnVubmFibGUsIGxvbmcpOwpAQCAtMTAwNzcsNyArMTAzNzcsNiBAQAogICBwdWJsaWMgY2xhc3MgQ29sb3JEcmF3YWJsZSBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgewogICAgIGN0b3IgcHVibGljIENvbG9yRHJhd2FibGUoKTsKICAgICBjdG9yIHB1YmxpYyBDb2xvckRyYXdhYmxlKGludCk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIGRyYXcoYW5kcm9pZC5ncmFwaGljcy5DYW52YXMpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldENvbG9yKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0T3BhY2l0eSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBbHBoYShpbnQpOwpAQCAtMTAwOTYsNyArMTAzOTUsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgY3JlYXRlRnJvbVN0cmVhbShqYXZhLmlvLklucHV0U3RyZWFtLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGNyZWF0ZUZyb21YbWwoYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMsIG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXIpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgY3JlYXRlRnJvbVhtbElubmVyKGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyLCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgZHJhdyhhbmRyb2lkLmdyYXBoaWNzLkNhbnZhcyk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGRyYXcoYW5kcm9pZC5ncmFwaGljcy5DYW52YXMpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEFscGhhKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLmdyYXBoaWNzLlJlY3QgZ2V0Qm91bmRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLkNhbGxiYWNrIGdldENhbGxiYWNrKCk7CkBAIC0xMDEyMCw2ICsxMDQxOSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGp1bXBUb0N1cnJlbnRTdGF0ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBtdXRhdGUoKTsKICAgICBtZXRob2QgcHJvdGVjdGVkIHZvaWQgb25Cb3VuZHNDaGFuZ2UoYW5kcm9pZC5ncmFwaGljcy5SZWN0KTsKKyAgICBtZXRob2QgcHJvdGVjdGVkIHZvaWQgb25EcmF3KGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzKTsKICAgICBtZXRob2QgcHJvdGVjdGVkIGJvb2xlYW4gb25MZXZlbENoYW5nZShpbnQpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgYm9vbGVhbiBvblN0YXRlQ2hhbmdlKGludFtdKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBpbnQgcmVzb2x2ZU9wYWNpdHkoaW50LCBpbnQpOwpAQCAtMTAxNTUsNyArMTA0NTUsNiBAQAogCiAgIHB1YmxpYyBjbGFzcyBEcmF3YWJsZUNvbnRhaW5lciBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgaW1wbGVtZW50cyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLkNhbGxiYWNrIHsKICAgICBjdG9yIHB1YmxpYyBEcmF3YWJsZUNvbnRhaW5lcigpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBkcmF3KGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRPcGFjaXR5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGludmFsaWRhdGVEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2NoZWR1bGVEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLCBqYXZhLmxhbmcuUnVubmFibGUsIGxvbmcpOwpAQCAtMTAxOTYsMTEgKzEwNDk1LDEyIEBACiAgIHB1YmxpYyBjbGFzcyBHcmFkaWVudERyYXdhYmxlIGV4dGVuZHMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSB7CiAgICAgY3RvciBwdWJsaWMgR3JhZGllbnREcmF3YWJsZSgpOwogICAgIGN0b3IgcHVibGljIEdyYWRpZW50RHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5HcmFkaWVudERyYXdhYmxlLk9yaWVudGF0aW9uLCBpbnRbXSk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIGRyYXcoYW5kcm9pZC5ncmFwaGljcy5DYW52YXMpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE9wYWNpdHkoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuR3JhZGllbnREcmF3YWJsZS5PcmllbnRhdGlvbiBnZXRPcmllbnRhdGlvbigpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvblN0YXRlQ2hhbmdlKGludFtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QWxwaGEoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29sb3IoaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29sb3IoYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbG9yRmlsdGVyKGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JGaWx0ZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb2xvcnMoaW50W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb3JuZXJSYWRpaShmbG9hdFtdKTsKQEAgLTEwMjEyLDcgKzEwNTEyLDkgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2hhcGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2l6ZShpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFN0cm9rZShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFN0cm9rZShpbnQsIGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3QpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTdHJva2UoaW50LCBpbnQsIGZsb2F0LCBmbG9hdCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFN0cm9rZShpbnQsIGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3QsIGZsb2F0LCBmbG9hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFVzZUxldmVsKGJvb2xlYW4pOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJTkUgPSAyOyAvLyAweDIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMSU5FQVJfR1JBRElFTlQgPSAwOyAvLyAweDAKQEAgLTEwMjM5LDcgKzEwNTQxLDYgQEAKICAgcHVibGljIGNsYXNzIEluc2V0RHJhd2FibGUgZXh0ZW5kcyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGltcGxlbWVudHMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZS5DYWxsYmFjayB7CiAgICAgY3RvciBwdWJsaWMgSW5zZXREcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLCBpbnQpOwogICAgIGN0b3IgcHVibGljIEluc2V0RHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSwgaW50LCBpbnQsIGludCwgaW50KTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgZHJhdyhhbmRyb2lkLmdyYXBoaWNzLkNhbnZhcyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldERyYXdhYmxlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0T3BhY2l0eSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSk7CkBAIC0xMDI1MSwxMiArMTA1NTIsMTIgQEAKIAogICBwdWJsaWMgY2xhc3MgTGF5ZXJEcmF3YWJsZSBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgaW1wbGVtZW50cyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLkNhbGxiYWNrIHsKICAgICBjdG9yIHB1YmxpYyBMYXllckRyYXdhYmxlKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGVbXSk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIGRyYXcoYW5kcm9pZC5ncmFwaGljcy5DYW52YXMpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBmaW5kRHJhd2FibGVCeUxheWVySWQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0RHJhd2FibGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRJZChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE51bWJlck9mTGF5ZXJzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0T3BhY2l0eSgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFBhZGRpbmdNb2RlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGludmFsaWRhdGVEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2NoZWR1bGVEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLCBqYXZhLmxhbmcuUnVubmFibGUsIGxvbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBbHBoYShpbnQpOwpAQCAtMTAyNjUsNyArMTA1NjYsMTAgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SWQoaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRMYXllckluc2V0KGludCwgaW50LCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T3BhY2l0eShpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQYWRkaW5nTW9kZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB1bnNjaGVkdWxlRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSwgamF2YS5sYW5nLlJ1bm5hYmxlKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQURESU5HX01PREVfTkVTVCA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBRERJTkdfTU9ERV9TVEFDSyA9IDE7IC8vIDB4MQogICB9CiAKICAgcHVibGljIGNsYXNzIExldmVsTGlzdERyYXdhYmxlIGV4dGVuZHMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZUNvbnRhaW5lciB7CkBAIC0xMDI3OCw3ICsxMDU4Miw2IEBACiAgICAgY3RvciBwdWJsaWMgTmluZVBhdGNoRHJhd2FibGUoYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMsIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwLCBieXRlW10sIGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCwgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgY3RvciBwdWJsaWMgZGVwcmVjYXRlZCBOaW5lUGF0Y2hEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLk5pbmVQYXRjaCk7CiAgICAgY3RvciBwdWJsaWMgTmluZVBhdGNoRHJhd2FibGUoYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMsIGFuZHJvaWQuZ3JhcGhpY3MuTmluZVBhdGNoKTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgZHJhdyhhbmRyb2lkLmdyYXBoaWNzLkNhbnZhcyk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0T3BhY2l0eSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5QYWludCBnZXRQYWludCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBbHBoYShpbnQpOwpAQCAtMTAyOTcsNyArMTA2MDAsNiBAQAogCiAgIHB1YmxpYyBjbGFzcyBQaWN0dXJlRHJhd2FibGUgZXh0ZW5kcyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIHsKICAgICBjdG9yIHB1YmxpYyBQaWN0dXJlRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5QaWN0dXJlKTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgZHJhdyhhbmRyb2lkLmdyYXBoaWNzLkNhbnZhcyk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0T3BhY2l0eSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5QaWN0dXJlIGdldFBpY3R1cmUoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QWxwaGEoaW50KTsKQEAgLTEwMzA1LDkgKzEwNjA3LDEyIEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFBpY3R1cmUoYW5kcm9pZC5ncmFwaGljcy5QaWN0dXJlKTsKICAgfQogCisgIHB1YmxpYyBjbGFzcyBSZXZlYWxEcmF3YWJsZSBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuTGF5ZXJEcmF3YWJsZSB7CisgICAgY3RvciBwdWJsaWMgUmV2ZWFsRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZVtdKTsKKyAgfQorCiAgIHB1YmxpYyBjbGFzcyBSb3RhdGVEcmF3YWJsZSBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgaW1wbGVtZW50cyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLkNhbGxiYWNrIHsKICAgICBjdG9yIHB1YmxpYyBSb3RhdGVEcmF3YWJsZSgpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBkcmF3KGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0RHJhd2FibGUoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRPcGFjaXR5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGludmFsaWRhdGVEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKQEAgLTEwMzE5LDcgKzEwNjI0LDYgQEAKIAogICBwdWJsaWMgY2xhc3MgU2NhbGVEcmF3YWJsZSBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgaW1wbGVtZW50cyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLkNhbGxiYWNrIHsKICAgICBjdG9yIHB1YmxpYyBTY2FsZURyYXdhYmxlKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUsIGludCwgZmxvYXQsIGZsb2F0KTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgZHJhdyhhbmRyb2lkLmdyYXBoaWNzLkNhbnZhcyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldERyYXdhYmxlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0T3BhY2l0eSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSk7CkBAIC0xMDMzMiw3ICsxMDYzNiw2IEBACiAgIHB1YmxpYyBjbGFzcyBTaGFwZURyYXdhYmxlIGV4dGVuZHMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSB7CiAgICAgY3RvciBwdWJsaWMgU2hhcGVEcmF3YWJsZSgpOwogICAgIGN0b3IgcHVibGljIFNoYXBlRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5zaGFwZXMuU2hhcGUpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBkcmF3KGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRPcGFjaXR5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLlBhaW50IGdldFBhaW50KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLlNoYXBlRHJhd2FibGUuU2hhZGVyRmFjdG9yeSBnZXRTaGFkZXJGYWN0b3J5KCk7CkBAIC0xMDg2OCw2ICsxMTE3MSw0MDEgQEAKIAogfQogCitwYWNrYWdlIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMiB7CisKKyAgcHVibGljIGNsYXNzIENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiBleHRlbmRzIGFuZHJvaWQudXRpbC5BbmRyb2lkRXhjZXB0aW9uIHsKKyAgICBjdG9yIHB1YmxpYyBDYW1lcmFBY2Nlc3NFeGNlcHRpb24oaW50KTsKKyAgICBjdG9yIHB1YmxpYyBDYW1lcmFBY2Nlc3NFeGNlcHRpb24oaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBjdG9yIHB1YmxpYyBDYW1lcmFBY2Nlc3NFeGNlcHRpb24oaW50LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuVGhyb3dhYmxlKTsKKyAgICBjdG9yIHB1YmxpYyBDYW1lcmFBY2Nlc3NFeGNlcHRpb24oaW50LCBqYXZhLmxhbmcuVGhyb3dhYmxlKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGludCBnZXRSZWFzb24oKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQU1FUkFfRElTQUJMRUQgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQU1FUkFfRElTQ09OTkVDVEVEID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FNRVJBX0VSUk9SID0gMzsgLy8gMHgzCisgIH0KKworICBwdWJsaWMgZmluYWwgY2xhc3MgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGV4dGVuZHMgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhIHsKKyAgICBtZXRob2QgcHVibGljIFQgZ2V0KGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXk8VD4pOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleTw/Pj4gZ2V0QXZhaWxhYmxlQ2FwdHVyZVJlcXVlc3RLZXlzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5PD8+PiBnZXRBdmFpbGFibGVDYXB0dXJlUmVzdWx0S2V5cygpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FFX0FWQUlMQUJMRV9BTlRJQkFORElOR19NT0RFUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRV9BVkFJTEFCTEVfTU9ERVM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUVfQVZBSUxBQkxFX1RBUkdFVF9GUFNfUkFOR0VTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FFX0NPTVBFTlNBVElPTl9SQU5HRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRV9DT01QRU5TQVRJT05fU1RFUDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRl9BVkFJTEFCTEVfTU9ERVM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQVZBSUxBQkxFX0VGRkVDVFM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQVZBSUxBQkxFX1NDRU5FX01PREVTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FWQUlMQUJMRV9WSURFT19TVEFCSUxJWkFUSU9OX01PREVTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FXQl9BVkFJTEFCTEVfTU9ERVM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfTUFYX1JFR0lPTlM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEZMQVNIX0lORk9fQVZBSUxBQkxFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBJTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSlBFR19BVkFJTEFCTEVfVEhVTUJOQUlMX1NJWkVTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0ZBQ0lORzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19JTkZPX0FWQUlMQUJMRV9BUEVSVFVSRVM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IExFTlNfSU5GT19BVkFJTEFCTEVfRklMVEVSX0RFTlNJVElFUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19JTkZPX0FWQUlMQUJMRV9GT0NBTF9MRU5HVEhTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0lORk9fQVZBSUxBQkxFX09QVElDQUxfU1RBQklMSVpBVElPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19JTkZPX0hZUEVSRk9DQUxfRElTVEFOQ0U7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IExFTlNfSU5GT19NSU5JTVVNX0ZPQ1VTX0RJU1RBTkNFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0lORk9fU0hBRElOR19NQVBfU0laRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgUkVRVUVTVF9NQVhfTlVNX09VVFBVVF9TVFJFQU1TOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTQ0FMRVJfQVZBSUxBQkxFX0ZPUk1BVFM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNDQUxFUl9BVkFJTEFCTEVfSlBFR19NSU5fRFVSQVRJT05TOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTQ0FMRVJfQVZBSUxBQkxFX0pQRUdfU0laRVM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNDQUxFUl9BVkFJTEFCTEVfTUFYX0RJR0lUQUxfWk9PTTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0NBTEVSX0FWQUlMQUJMRV9QUk9DRVNTRURfTUlOX0RVUkFUSU9OUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0NBTEVSX0FWQUlMQUJMRV9QUk9DRVNTRURfU0laRVM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNFTlNPUl9CQVNFX0dBSU5fRkFDVE9SOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX0lORk9fRVhQT1NVUkVfVElNRV9SQU5HRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX0lORk9fTUFYX0ZSQU1FX0RVUkFUSU9OOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTRU5TT1JfSU5GT19QSFlTSUNBTF9TSVpFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTRU5TT1JfSU5GT19TRU5TSVRJVklUWV9SQU5HRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX01BWF9BTkFMT0dfU0VOU0lUSVZJVFk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNFTlNPUl9PUklFTlRBVElPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU1RBVElTVElDU19JTkZPX0FWQUlMQUJMRV9GQUNFX0RFVEVDVF9NT0RFUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU1RBVElTVElDU19JTkZPX01BWF9GQUNFX0NPVU5UOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBUT05FTUFQX01BWF9DVVJWRV9QT0lOVFM7CisgIH0KKworICBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIENhbWVyYURldmljZSBpbXBsZW1lbnRzIGphdmEubGFuZy5BdXRvQ2xvc2VhYmxlIHsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBjYXB0dXJlKGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYXB0dXJlUmVxdWVzdCwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZS5DYXB0dXJlTGlzdGVuZXIsIGFuZHJvaWQub3MuSGFuZGxlcikgdGhyb3dzIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFBY2Nlc3NFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2FwdHVyZUJ1cnN0KGphdmEudXRpbC5MaXN0PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYXB0dXJlUmVxdWVzdD4sIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UuQ2FwdHVyZUxpc3RlbmVyLCBhbmRyb2lkLm9zLkhhbmRsZXIpIHRocm93cyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjbG9zZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjb25maWd1cmVPdXRwdXRzKGphdmEudXRpbC5MaXN0PGFuZHJvaWQudmlldy5TdXJmYWNlPikgdGhyb3dzIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFBY2Nlc3NFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3QuQnVpbGRlciBjcmVhdGVDYXB0dXJlUmVxdWVzdChpbnQpIHRocm93cyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBmbHVzaCgpIHRocm93cyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZyBnZXRJZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IHNldFJlcGVhdGluZ0J1cnN0KGphdmEudXRpbC5MaXN0PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYXB0dXJlUmVxdWVzdD4sIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UuQ2FwdHVyZUxpc3RlbmVyLCBhbmRyb2lkLm9zLkhhbmRsZXIpIHRocm93cyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IHNldFJlcGVhdGluZ1JlcXVlc3QoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhcHR1cmVSZXF1ZXN0LCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlLkNhcHR1cmVMaXN0ZW5lciwgYW5kcm9pZC5vcy5IYW5kbGVyKSB0aHJvd3MgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc3RvcFJlcGVhdGluZygpIHRocm93cyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9uOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFTVBMQVRFX1BSRVZJRVcgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBURU1QTEFURV9SRUNPUkQgPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBURU1QTEFURV9TVElMTF9DQVBUVVJFID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVNUExBVEVfVklERU9fU05BUFNIT1QgPSA0OyAvLyAweDQKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQ2FtZXJhRGV2aWNlLkNhcHR1cmVMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgQ2FtZXJhRGV2aWNlLkNhcHR1cmVMaXN0ZW5lcigpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNhcHR1cmVDb21wbGV0ZWQoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZSwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhcHR1cmVSZXF1ZXN0LCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlc3VsdCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZUZhaWxlZChhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlLCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3QsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYXB0dXJlRmFpbHVyZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZVNlcXVlbmNlQ29tcGxldGVkKGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25DYXB0dXJlU3RhcnRlZChhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlLCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3QsIGxvbmcpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBDYW1lcmFEZXZpY2UuU3RhdGVMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgQ2FtZXJhRGV2aWNlLlN0YXRlTGlzdGVuZXIoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25BY3RpdmUoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQnVzeShhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25DbG9zZWQoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZSk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uRGlzY29ubmVjdGVkKGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbkVycm9yKGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uSWRsZShhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25PcGVuZWQoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uVW5jb25maWd1cmVkKGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0NBTUVSQV9ERVZJQ0UgPSA0OyAvLyAweDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9DQU1FUkFfRElTQUJMRUQgPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9DQU1FUkFfSU5fVVNFID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfQ0FNRVJBX1NFUlZJQ0UgPSA1OyAvLyAweDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9NQVhfQ0FNRVJBU19JTl9VU0UgPSAyOyAvLyAweDIKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBjbGFzcyBDYW1lcmFNYW5hZ2VyIHsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkQXZhaWxhYmlsaXR5TGlzdGVuZXIoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1hbmFnZXIuQXZhaWxhYmlsaXR5TGlzdGVuZXIsIGFuZHJvaWQub3MuSGFuZGxlcik7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRDYW1lcmFJZExpc3QoKSB0aHJvd3MgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb3BlbkNhbWVyYShqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlLlN0YXRlTGlzdGVuZXIsIGFuZHJvaWQub3MuSGFuZGxlcikgdGhyb3dzIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFBY2Nlc3NFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbW92ZUF2YWlsYWJpbGl0eUxpc3RlbmVyKGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNYW5hZ2VyLkF2YWlsYWJpbGl0eUxpc3RlbmVyKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQ2FtZXJhTWFuYWdlci5BdmFpbGFiaWxpdHlMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgQ2FtZXJhTWFuYWdlci5BdmFpbGFiaWxpdHlMaXN0ZW5lcigpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNhbWVyYUF2YWlsYWJsZShqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25DYW1lcmFVbmF2YWlsYWJsZShqYXZhLmxhbmcuU3RyaW5nKTsKKyAgfQorCisgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDYW1lcmFNZXRhZGF0YSB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBUIGdldChhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5PFQ+KTsKKyAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXk8Pz4+IGdldEtleXMoKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0xPUl9DT1JSRUNUSU9OX01PREVfRkFTVCA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTE9SX0NPUlJFQ1RJT05fTU9ERV9ISUdIX1FVQUxJVFkgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0xPUl9DT1JSRUNUSU9OX01PREVfVFJBTlNGT1JNX01BVFJJWCA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfQU5USUJBTkRJTkdfTU9ERV81MEhaID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9BTlRJQkFORElOR19NT0RFXzYwSFogPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX0FOVElCQU5ESU5HX01PREVfQVVUTyA9IDM7IC8vIDB4MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfQU5USUJBTkRJTkdfTU9ERV9PRkYgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX01PREVfT0ZGID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9NT0RFX09OID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9NT0RFX09OX0FMV0FZU19GTEFTSCA9IDM7IC8vIDB4MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfTU9ERV9PTl9BVVRPX0ZMQVNIID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9NT0RFX09OX0FVVE9fRkxBU0hfUkVERVlFID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVJfSURMRSA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSX1NUQVJUID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9DT05WRVJHRUQgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX1NUQVRFX0ZMQVNIX1JFUVVJUkVEID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9JTkFDVElWRSA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfU1RBVEVfTE9DS0VEID0gMzsgLy8gMHgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9QUkVDQVBUVVJFID0gNTsgLy8gMHg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9TRUFSQ0hJTkcgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX01PREVfQVVUTyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfTU9ERV9DT05USU5VT1VTX1BJQ1RVUkUgPSA0OyAvLyAweDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX01PREVfQ09OVElOVU9VU19WSURFTyA9IDM7IC8vIDB4MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfTU9ERV9FRE9GID0gNTsgLy8gMHg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9NT0RFX01BQ1JPID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9NT0RFX09GRiA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfU1RBVEVfQUNUSVZFX1NDQU4gPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1NUQVRFX0ZPQ1VTRURfTE9DS0VEID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9JTkFDVElWRSA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfU1RBVEVfTk9UX0ZPQ1VTRURfTE9DS0VEID0gNTsgLy8gMHg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9QQVNTSVZFX0ZPQ1VTRUQgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1NUQVRFX1BBU1NJVkVfU0NBTiA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfU1RBVEVfUEFTU0lWRV9VTkZPQ1VTRUQgPSA2OyAvLyAweDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1RSSUdHRVJfQ0FOQ0VMID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9UUklHR0VSX0lETEUgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1RSSUdHRVJfU1RBUlQgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX0FVVE8gPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX0NMT1VEWV9EQVlMSUdIVCA9IDY7IC8vIDB4NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQVdCX01PREVfREFZTElHSFQgPSA1OyAvLyAweDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX0ZMVU9SRVNDRU5UID0gMzsgLy8gMHgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfTU9ERV9JTkNBTkRFU0NFTlQgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX09GRiA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQVdCX01PREVfU0hBREUgPSA4OyAvLyAweDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX1RXSUxJR0hUID0gNzsgLy8gMHg3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfTU9ERV9XQVJNX0ZMVU9SRVNDRU5UID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfU1RBVEVfQ09OVkVSR0VEID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfU1RBVEVfSU5BQ1RJVkUgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9TVEFURV9MT0NLRUQgPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9TVEFURV9TRUFSQ0hJTkcgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0NBUFRVUkVfSU5URU5UX0NVU1RPTSA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfUFJFVklFVyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfU1RJTExfQ0FQVFVSRSA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfVklERU9fUkVDT1JEID0gMzsgLy8gMHgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9DQVBUVVJFX0lOVEVOVF9WSURFT19TTkFQU0hPVCA9IDQ7IC8vIDB4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfWkVST19TSFVUVEVSX0xBRyA9IDU7IC8vIDB4NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfQVFVQSA9IDg7IC8vIDB4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfQkxBQ0tCT0FSRCA9IDc7IC8vIDB4NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfTU9OTyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfTkVHQVRJVkUgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0VGRkVDVF9NT0RFX09GRiA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfUE9TVEVSSVpFID0gNTsgLy8gMHg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9FRkZFQ1RfTU9ERV9TRVBJQSA9IDQ7IC8vIDB4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfU09MQVJJWkUgPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0VGRkVDVF9NT0RFX1dISVRFQk9BUkQgPSA2OyAvLyAweDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX01PREVfQVVUTyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfTU9ERV9PRkYgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX01PREVfVVNFX1NDRU5FX01PREUgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfQUNUSU9OID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9TQ0VORV9NT0RFX0JBUkNPREUgPSAxNjsgLy8gMHgxMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9CRUFDSCA9IDg7IC8vIDB4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9DQU5ETEVMSUdIVCA9IDE1OyAvLyAweGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfRkFDRV9QUklPUklUWSA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9GSVJFV09SS1MgPSAxMjsgLy8gMHhjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9TQ0VORV9NT0RFX0xBTkRTQ0FQRSA9IDQ7IC8vIDB4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9OSUdIVCA9IDU7IC8vIDB4NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9OSUdIVF9QT1JUUkFJVCA9IDY7IC8vIDB4NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9QQVJUWSA9IDE0OyAvLyAweGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfUE9SVFJBSVQgPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfU05PVyA9IDk7IC8vIDB4OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9TUE9SVFMgPSAxMzsgLy8gMHhkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9TQ0VORV9NT0RFX1NURUFEWVBIT1RPID0gMTE7IC8vIDB4YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9TVU5TRVQgPSAxMDsgLy8gMHhhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9TQ0VORV9NT0RFX1RIRUFUUkUgPSA3OyAvLyAweDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfVU5TVVBQT1JURUQgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFREdFX01PREVfRkFTVCA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVER0VfTU9ERV9ISUdIX1FVQUxJVFkgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFREdFX01PREVfT0ZGID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBU0hfTU9ERV9PRkYgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9NT0RFX1NJTkdMRSA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQVNIX01PREVfVE9SQ0ggPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9TVEFURV9DSEFSR0lORyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQVNIX1NUQVRFX0ZJUkVEID0gMzsgLy8gMHgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBU0hfU1RBVEVfUkVBRFkgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9TVEFURV9VTkFWQUlMQUJMRSA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMX0ZVTEwgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTF9MSU1JVEVEID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVOU19GQUNJTkdfQkFDSyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFTlNfRkFDSU5HX0ZST05UID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERV9PRkYgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFX09OID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVOU19TVEFURV9NT1ZJTkcgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRU5TX1NUQVRFX1NUQVRJT05BUlkgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT0lTRV9SRURVQ1RJT05fTU9ERV9GQVNUID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9JU0VfUkVEVUNUSU9OX01PREVfSElHSF9RVUFMSVRZID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9JU0VfUkVEVUNUSU9OX01PREVfT0ZGID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX0ZVTEwgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREVfT0ZGID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX1NJTVBMRSA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJU1RJQ1NfTEVOU19TSEFESU5HX01BUF9NT0RFX09GRiA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJU1RJQ1NfTEVOU19TSEFESU5HX01BUF9NT0RFX09OID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVElTVElDU19TQ0VORV9GTElDS0VSXzUwSFogPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUSVNUSUNTX1NDRU5FX0ZMSUNLRVJfNjBIWiA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJU1RJQ1NfU0NFTkVfRkxJQ0tFUl9OT05FID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE9ORU1BUF9NT0RFX0NPTlRSQVNUX0NVUlZFID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE9ORU1BUF9NT0RFX0ZBU1QgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUT05FTUFQX01PREVfSElHSF9RVUFMSVRZID0gMjsgLy8gMHgyCisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIENhbWVyYU1ldGFkYXRhLktleSB7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBib29sZWFuIGVxdWFscyhqYXZhLmxhbmcuT2JqZWN0KTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0TmFtZSgpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgaW50IGhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgY2xhc3MgQ2FwdHVyZUZhaWx1cmUgeworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEZyYW1lTnVtYmVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0UmVhc29uKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3QgZ2V0UmVxdWVzdCgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFNlcXVlbmNlSWQoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gd2FzSW1hZ2VDYXB0dXJlZCgpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9FUlJPUiA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9GTFVTSEVEID0gMTsgLy8gMHgxCisgIH0KKworICBwdWJsaWMgZmluYWwgY2xhc3MgQ2FwdHVyZVJlcXVlc3QgZXh0ZW5kcyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEgaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgeworICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKKyAgICBtZXRob2QgcHVibGljIFQgZ2V0KGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXk8VD4pOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLk9iamVjdCBnZXRUYWcoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQkxBQ0tfTEVWRUxfTE9DSzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09MT1JfQ09SUkVDVElPTl9HQUlOUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09MT1JfQ09SUkVDVElPTl9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT0xPUl9DT1JSRUNUSU9OX1RSQU5TRk9STTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRV9BTlRJQkFORElOR19NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FFX0VYUE9TVVJFX0NPTVBFTlNBVElPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRV9MT0NLOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FFX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FFX1JFR0lPTlM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUVfVEFSR0VUX0ZQU19SQU5HRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRl9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FGX1JFR0lPTlM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUZfVFJJR0dFUjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BV0JfTE9DSzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BV0JfTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BV0JfUkVHSU9OUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9DQVBUVVJFX0lOVEVOVDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9FRkZFQ1RfTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX1NDRU5FX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfVklERU9fU1RBQklMSVpBVElPTl9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3IgQ1JFQVRPUjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgRURHRV9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBGTEFTSF9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX0dQU19DT09SRElOQVRFUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSlBFR19HUFNfUFJPQ0VTU0lOR19NRVRIT0Q7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEpQRUdfR1BTX1RJTUVTVEFNUDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSlBFR19PUklFTlRBVElPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSlBFR19RVUFMSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX1RIVU1CTkFJTF9RVUFMSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX1RIVU1CTkFJTF9TSVpFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0FQRVJUVVJFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0ZJTFRFUl9ERU5TSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0ZPQ0FMX0xFTkdUSDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19GT0NVU19ESVNUQU5DRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTk9JU0VfUkVEVUNUSU9OX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNDQUxFUl9DUk9QX1JFR0lPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX0VYUE9TVVJFX1RJTUU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNFTlNPUl9GUkFNRV9EVVJBVElPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX1NFTlNJVElWSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNUQVRJU1RJQ1NfTEVOU19TSEFESU5HX01BUF9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBUT05FTUFQX0NVUlZFX0JMVUU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFRPTkVNQVBfQ1VSVkVfR1JFRU47CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFRPTkVNQVBfQ1VSVkVfUkVEOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBUT05FTUFQX01PREU7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIENhcHR1cmVSZXF1ZXN0LkJ1aWxkZXIgeworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRUYXJnZXQoYW5kcm9pZC52aWV3LlN1cmZhY2UpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhcHR1cmVSZXF1ZXN0IGJ1aWxkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBUIGdldChhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5PFQ+KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgcmVtb3ZlVGFyZ2V0KGFuZHJvaWQudmlldy5TdXJmYWNlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0KGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXk8VD4sIFQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUYWcoamF2YS5sYW5nLk9iamVjdCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgY2xhc3MgQ2FwdHVyZVJlc3VsdCBleHRlbmRzIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YSB7CisgICAgbWV0aG9kIHB1YmxpYyBUIGdldChhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5PFQ+KTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRGcmFtZU51bWJlcigpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhcHR1cmVSZXF1ZXN0IGdldFJlcXVlc3QoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRTZXF1ZW5jZUlkKCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEJMQUNLX0xFVkVMX0xPQ0s7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTE9SX0NPUlJFQ1RJT05fR0FJTlM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTE9SX0NPUlJFQ1RJT05fVFJBTlNGT1JNOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FFX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUVfUkVHSU9OUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRV9TVEFURTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRl9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FGX1JFR0lPTlM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUZfU1RBVEU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQVdCX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQVdCX1JFR0lPTlM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQVdCX1NUQVRFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEVER0VfTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgRkxBU0hfTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgRkxBU0hfU1RBVEU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEpQRUdfR1BTX0NPT1JESU5BVEVTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX0dQU19QUk9DRVNTSU5HX01FVEhPRDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSlBFR19HUFNfVElNRVNUQU1QOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX09SSUVOVEFUSU9OOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX1FVQUxJVFk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEpQRUdfVEhVTUJOQUlMX1FVQUxJVFk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEpQRUdfVEhVTUJOQUlMX1NJWkU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IExFTlNfQVBFUlRVUkU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IExFTlNfRklMVEVSX0RFTlNJVFk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IExFTlNfRk9DQUxfTEVOR1RIOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0ZPQ1VTX0RJU1RBTkNFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0ZPQ1VTX1JBTkdFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX1NUQVRFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBOT0lTRV9SRURVQ1RJT05fTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgUkVRVUVTVF9GUkFNRV9DT1VOVDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0NBTEVSX0NST1BfUkVHSU9OOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTRU5TT1JfRVhQT1NVUkVfVElNRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX0ZSQU1FX0RVUkFUSU9OOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTRU5TT1JfU0VOU0lUSVZJVFk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNFTlNPUl9URU1QRVJBVFVSRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX1RJTUVTVEFNUDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU1RBVElTVElDU19GQUNFUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTVEFUSVNUSUNTX0xFTlNfU0hBRElOR19NQVA7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNUQVRJU1RJQ1NfU0NFTkVfRkxJQ0tFUjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgVE9ORU1BUF9DVVJWRV9CTFVFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBUT05FTUFQX0NVUlZFX0dSRUVOOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBUT05FTUFQX0NVUlZFX1JFRDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgVE9ORU1BUF9NT0RFOworICB9CisKKyAgcHVibGljIGZpbmFsIGNsYXNzIEZhY2UgeworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5SZWN0IGdldEJvdW5kcygpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldElkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLlBvaW50IGdldExlZnRFeWVQb3NpdGlvbigpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5Qb2ludCBnZXRNb3V0aFBvc2l0aW9uKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLlBvaW50IGdldFJpZ2h0RXllUG9zaXRpb24oKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRTY29yZSgpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElEX1VOU1VQUE9SVEVEID0gLTE7IC8vIDB4ZmZmZmZmZmYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ09SRV9NQVggPSAxMDA7IC8vIDB4NjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ09SRV9NSU4gPSAxOyAvLyAweDEKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBjbGFzcyBSYXRpb25hbCB7CisgICAgY3RvciBwdWJsaWMgUmF0aW9uYWwoaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldERlbm9taW5hdG9yKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TnVtZXJhdG9yKCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgY2xhc3MgU2l6ZSB7CisgICAgY3RvciBwdWJsaWMgU2l6ZShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBpbnQgZ2V0SGVpZ2h0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBpbnQgZ2V0V2lkdGgoKTsKKyAgfQorCit9CisKIHBhY2thZ2UgYW5kcm9pZC5oYXJkd2FyZS5kaXNwbGF5IHsKIAogICBwdWJsaWMgZmluYWwgY2xhc3MgRGlzcGxheU1hbmFnZXIgewpAQCAtMTExNDksNiArMTE4NDcsNyBAQAogICAgIGN0b3IgcHVibGljIEV4dHJhY3RFZGl0VGV4dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgRXh0cmFjdEVkaXRUZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBFeHRyYWN0RWRpdFRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgRXh0cmFjdEVkaXRUZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZpbmlzaEludGVybmFsQ2hhbmdlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNWZXJ0aWNhbFNjcm9sbEJhcigpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzdGFydEludGVybmFsQ2hhbmdlcygpOwpAQCAtMTExNjMsNiArMTE4NjIsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0Q29ubmVjdGlvbiBnZXRDdXJyZW50SW5wdXRDb25uZWN0aW9uKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuRWRpdG9ySW5mbyBnZXRDdXJyZW50SW5wdXRFZGl0b3JJbmZvKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldEN1cnJlbnRJbnB1dFN0YXJ0ZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRJbnB1dE1ldGhvZFdpbmRvd1JlY29tbWVuZGVkSGVpZ2h0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXIgZ2V0TGF5b3V0SW5mbGF0ZXIoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRNYXhXaWR0aCgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXRUZXh0Rm9ySW1lQWN0aW9uKGludCk7CkBAIC0xMTM0NSw2ICsxMjA0NSw3IEBACiAgIHB1YmxpYyBjbGFzcyBLZXlib2FyZFZpZXcgZXh0ZW5kcyBhbmRyb2lkLnZpZXcuVmlldyBpbXBsZW1lbnRzIGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lciB7CiAgICAgY3RvciBwdWJsaWMgS2V5Ym9hcmRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBLZXlib2FyZFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgS2V5Ym9hcmRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsb3NpbmcoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuaW5wdXRtZXRob2RzZXJ2aWNlLktleWJvYXJkIGdldEtleWJvYXJkKCk7CiAgICAgbWV0aG9kIHByb3RlY3RlZCBhbmRyb2lkLmlucHV0bWV0aG9kc2VydmljZS5LZXlib2FyZFZpZXcuT25LZXlib2FyZEFjdGlvbkxpc3RlbmVyIGdldE9uS2V5Ym9hcmRBY3Rpb25MaXN0ZW5lcigpOwpAQCAtMTE5MDgsNiArMTI2MDksNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgaW50IHNldFBvc2l0aW9uTm90aWZpY2F0aW9uUGVyaW9kKGludCk7CiAgICAgbWV0aG9kIHByb3RlY3RlZCBkZXByZWNhdGVkIHZvaWQgc2V0U3RhdGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBzZXRTdGVyZW9Wb2x1bWUoZmxvYXQsIGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIGludCBzZXRWb2x1bWUoZmxvYXQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzdG9wKCkgdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgd3JpdGUoYnl0ZVtdLCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgd3JpdGUoc2hvcnRbXSwgaW50LCBpbnQpOwpAQCAtMTI2NjgsNiArMTMzNzAsNyBAQAogICAgIGN0b3IgcHVibGljIE1lZGlhUmVjb3JkZXIoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZ2V0QXVkaW9Tb3VyY2VNYXgoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRNYXhBbXBsaXR1ZGUoKSB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5TdXJmYWNlIGdldFN1cmZhY2UoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgcHJlcGFyZSgpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWxlYXNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlc2V0KCk7CkBAIC0xMjc1Miw2ICsxMzQ1NSw3IEBACiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBNZWRpYVJlY29yZGVyLlZpZGVvU291cmNlIHsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQU1FUkEgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZBVUxUID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VSRkFDRSA9IDI7IC8vIDB4MgogICB9CiAKICAgcHVibGljIGNsYXNzIE1lZGlhUm91dGVyIHsKQEAgLTE0MTc4LDYgKzE0ODgyLDcgQEAKICAgcHVibGljIGNsYXNzIFg1MDlUcnVzdE1hbmFnZXJFeHRlbnNpb25zIHsKICAgICBjdG9yIHB1YmxpYyBYNTA5VHJ1c3RNYW5hZ2VyRXh0ZW5zaW9ucyhqYXZheC5uZXQuc3NsLlg1MDlUcnVzdE1hbmFnZXIpIHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8amF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZT4gY2hlY2tTZXJ2ZXJUcnVzdGVkKGphdmEuc2VjdXJpdHkuY2VydC5YNTA5Q2VydGlmaWNhdGVbXSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVc2VyQWRkZWRDZXJ0aWZpY2F0ZShqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlKTsKICAgfQogCiB9CkBAIC0xNTAyOSw2ICsxNTczNCwxMSBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5uZmMuTmZjQWRhcHRlciBnZXREZWZhdWx0QWRhcHRlcigpOwogICB9CiAKKyAgcHVibGljIGNsYXNzIE5mY1VubG9jayB7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIGFuZHJvaWQubmZjLk5mY1VubG9jayBnZXRJbnN0YW5jZShhbmRyb2lkLm5mYy5OZmNBZGFwdGVyKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0TmZjVW5sb2NrRW5hYmxlZCgpOworICB9CisKICAgcHVibGljIGZpbmFsIGNsYXNzIFRhZyBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOwogICAgIG1ldGhvZCBwdWJsaWMgYnl0ZVtdIGdldElkKCk7CkBAIC0xNzc0NCwxMCArMTg0NTQsMTMgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmlvLkZpbGUgZ2V0RXh0ZXJuYWxTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5pby5GaWxlIGdldEV4dGVybmFsU3RvcmFnZVB1YmxpY0RpcmVjdG9yeShqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEV4dGVybmFsU3RvcmFnZVN0YXRlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZShqYXZhLmlvLkZpbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEuaW8uRmlsZSBnZXRSb290RGlyZWN0b3J5KCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnZXRTdG9yYWdlU3RhdGUoamF2YS5pby5GaWxlKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgZ2V0U3RvcmFnZVN0YXRlKGphdmEuaW8uRmlsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0V4dGVybmFsU3RvcmFnZUVtdWxhdGVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0V4dGVybmFsU3RvcmFnZUVtdWxhdGVkKGphdmEuaW8uRmlsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0V4dGVybmFsU3RvcmFnZVJlbW92YWJsZSgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFeHRlcm5hbFN0b3JhZ2VSZW1vdmFibGUoamF2YS5pby5GaWxlKTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgRElSRUNUT1JZX0FMQVJNUzsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgRElSRUNUT1JZX0RDSU07CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIERJUkVDVE9SWV9ET0NVTUVOVFM7CkBAIC0xODE2Niw2ICsxODg3OSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBGVUxMX1dBS0VfTE9DSyA9IDI2OyAvLyAweDFhCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT05fQUZURVJfUkVMRUFTRSA9IDUzNjg3MDkxMjsgLy8gMHgyMDAwMDAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBUlRJQUxfV0FLRV9MT0NLID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFJFQk9PVF9SRUNPVkVSWSA9ICJyZWNvdmVyeSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBTQ1JFRU5fQlJJR0hUX1dBS0VfTE9DSyA9IDEwOyAvLyAweGEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGRlcHJlY2F0ZWQgaW50IFNDUkVFTl9ESU1fV0FLRV9MT0NLID0gNjsgLy8gMHg2CiAgIH0KQEAgLTE4NDQzLDEzICsxOTE1NywxNiBAQAogCiAgIHB1YmxpYyBjbGFzcyBDaGVja0JveFByZWZlcmVuY2UgZXh0ZW5kcyBhbmRyb2lkLnByZWZlcmVuY2UuVHdvU3RhdGVQcmVmZXJlbmNlIHsKICAgICBjdG9yIHB1YmxpYyBDaGVja0JveFByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQ2hlY2tCb3hQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgQ2hlY2tCb3hQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBDaGVja0JveFByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICB9CiAKICAgcHVibGljIGFic3RyYWN0IGNsYXNzIERpYWxvZ1ByZWZlcmVuY2UgZXh0ZW5kcyBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZSBpbXBsZW1lbnRzIGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyIGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2UuT25EaXNtaXNzTGlzdGVuZXIgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2VNYW5hZ2VyLk9uQWN0aXZpdHlEZXN0cm95TGlzdGVuZXIgeworICAgIGN0b3IgcHVibGljIERpYWxvZ1ByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBEaWFsb2dQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIERpYWxvZ1ByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOworICAgIGN0b3IgcHVibGljIERpYWxvZ1ByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuRGlhbG9nIGdldERpYWxvZygpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXREaWFsb2dJY29uKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RGlhbG9nTGF5b3V0UmVzb3VyY2UoKTsKQEAgLTE4NDc5LDYgKzE5MTk2LDcgQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBFZGl0VGV4dFByZWZlcmVuY2UgZXh0ZW5kcyBhbmRyb2lkLnByZWZlcmVuY2UuRGlhbG9nUHJlZmVyZW5jZSB7CisgICAgY3RvciBwdWJsaWMgRWRpdFRleHRQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgRWRpdFRleHRQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIEVkaXRUZXh0UHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgRWRpdFRleHRQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKQEAgLTE4NDg5LDYgKzE5MjA3LDggQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBMaXN0UHJlZmVyZW5jZSBleHRlbmRzIGFuZHJvaWQucHJlZmVyZW5jZS5EaWFsb2dQcmVmZXJlbmNlIHsKKyAgICBjdG9yIHB1YmxpYyBMaXN0UHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOworICAgIGN0b3IgcHVibGljIExpc3RQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIExpc3RQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBMaXN0UHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZmluZEluZGV4T2ZWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKTsKQEAgLTE4NTA1LDYgKzE5MjI1LDggQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlIGV4dGVuZHMgYW5kcm9pZC5wcmVmZXJlbmNlLkRpYWxvZ1ByZWZlcmVuY2UgeworICAgIGN0b3IgcHVibGljIE11bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIE11bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIE11bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGZpbmRJbmRleE9mVmFsdWUoamF2YS5sYW5nLlN0cmluZyk7CkBAIC0xODUxOSw2ICsxOTI0MSw3IEBACiAgIH0KIAogICBwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZSBpbXBsZW1lbnRzIGphdmEubGFuZy5Db21wYXJhYmxlIHsKKyAgICBjdG9yIHB1YmxpYyBQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKQEAgLTE4Njg0LDYgKzE5NDA3LDcgQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBQcmVmZXJlbmNlQ2F0ZWdvcnkgZXh0ZW5kcyBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZUdyb3VwIHsKKyAgICBjdG9yIHB1YmxpYyBQcmVmZXJlbmNlQ2F0ZWdvcnkoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBQcmVmZXJlbmNlQ2F0ZWdvcnkoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgUHJlZmVyZW5jZUNhdGVnb3J5KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBQcmVmZXJlbmNlQ2F0ZWdvcnkoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwpAQCAtMTg3MDUsNiArMTk0MjksNyBAQAogICB9CiAKICAgcHVibGljIGFic3RyYWN0IGNsYXNzIFByZWZlcmVuY2VHcm91cCBleHRlbmRzIGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlIHsKKyAgICBjdG9yIHB1YmxpYyBQcmVmZXJlbmNlR3JvdXAoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBQcmVmZXJlbmNlR3JvdXAoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgUHJlZmVyZW5jZUdyb3VwKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkSXRlbUZyb21JbmZsYXRlcihhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZSk7CkBAIC0xODc1OSw2ICsxOTQ4NCw3IEBACiAgIH0KIAogICBwdWJsaWMgY2xhc3MgUmluZ3RvbmVQcmVmZXJlbmNlIGV4dGVuZHMgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2UgaW1wbGVtZW50cyBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZU1hbmFnZXIuT25BY3Rpdml0eVJlc3VsdExpc3RlbmVyIHsKKyAgICBjdG9yIHB1YmxpYyBSaW5ndG9uZVByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBSaW5ndG9uZVByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgUmluZ3RvbmVQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBSaW5ndG9uZVByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwpAQCAtMTg3NzUsNiArMTk1MDEsNyBAQAogICB9CiAKICAgcHVibGljIGNsYXNzIFN3aXRjaFByZWZlcmVuY2UgZXh0ZW5kcyBhbmRyb2lkLnByZWZlcmVuY2UuVHdvU3RhdGVQcmVmZXJlbmNlIHsKKyAgICBjdG9yIHB1YmxpYyBTd2l0Y2hQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgU3dpdGNoUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBTd2l0Y2hQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBTd2l0Y2hQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKQEAgLTE4Nzg3LDYgKzE5NTE0LDcgQEAKICAgfQogCiAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBUd29TdGF0ZVByZWZlcmVuY2UgZXh0ZW5kcyBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZSB7CisgICAgY3RvciBwdWJsaWMgVHdvU3RhdGVQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgVHdvU3RhdGVQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFR3b1N0YXRlUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgVHdvU3RhdGVQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKQEAgLTE5NTQyLDE2ICsyMDI3MCwyNCBAQAogICBwdWJsaWMgc3RhdGljIGNsYXNzIENhbGxMb2cuQ2FsbHMgaW1wbGVtZW50cyBhbmRyb2lkLnByb3ZpZGVyLkJhc2VDb2x1bW5zIHsKICAgICBjdG9yIHB1YmxpYyBDYWxsTG9nLkNhbGxzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnZXRMYXN0T3V0Z29pbmdDYWxsKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ0FDSEVEX0ZPUk1BVFRFRF9OVU1CRVIgPSAiZm9ybWF0dGVkX251bWJlciI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENBQ0hFRF9MT09LVVBfVVJJID0gImxvb2t1cF91cmkiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDQUNIRURfTUFUQ0hFRF9OVU1CRVIgPSAibWF0Y2hlZF9udW1iZXIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDQUNIRURfTkFNRSA9ICJuYW1lIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ0FDSEVEX05PUk1BTElaRURfTlVNQkVSID0gIm5vcm1hbGl6ZWRfbnVtYmVyIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ0FDSEVEX05VTUJFUl9MQUJFTCA9ICJudW1iZXJsYWJlbCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENBQ0hFRF9OVU1CRVJfVFlQRSA9ICJudW1iZXJ0eXBlIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ0FDSEVEX1BIT1RPX0lEID0gInBob3RvX2lkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQubmV0LlVyaSBDT05URU5UX0ZJTFRFUl9VUkk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTlRFTlRfSVRFTV9UWVBFID0gInZuZC5hbmRyb2lkLmN1cnNvci5pdGVtL2NhbGxzIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09OVEVOVF9UWVBFID0gInZuZC5hbmRyb2lkLmN1cnNvci5kaXIvY2FsbHMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIENPTlRFTlRfVVJJOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIENPTlRFTlRfVVJJX1dJVEhfVk9JQ0VNQUlMOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT1VOVFJZX0lTTyA9ICJjb3VudHJ5aXNvIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgREFURSA9ICJkYXRlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgREVGQVVMVF9TT1JUX09SREVSID0gImRhdGUgREVTQyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIERVUkFUSU9OID0gImR1cmF0aW9uIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgR0VPQ09ERURfTE9DQVRJT04gPSAiZ2VvY29kZWRfbG9jYXRpb24iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQ09NSU5HX1RZUEUgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgSVNfUkVBRCA9ICJpc19yZWFkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTElNSVRfUEFSQU1fS0VZID0gImxpbWl0IjsKQEAgLTE5NTY2LDYgKzIwMzAyLDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUkVTRU5UQVRJT05fUkVTVFJJQ1RFRCA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSRVNFTlRBVElPTl9VTktOT1dOID0gMzsgLy8gMHgzCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFRZUEUgPSAidHlwZSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVk9JQ0VNQUlMX1RZUEUgPSA0OyAvLyAweDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgVk9JQ0VNQUlMX1VSSSA9ICJ2b2ljZW1haWxfdXJpIjsKICAgfQogCiAgIHB1YmxpYyBkZXByZWNhdGVkIGNsYXNzIENvbnRhY3RzIHsKQEAgLTE5ODcyLDYgKzIwNjEwLDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTElNSVRfUEFSQU1fS0VZID0gImxpbWl0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUFJJTUFSWV9BQ0NPVU5UX05BTUUgPSAibmFtZV9mb3JfcHJpbWFyeV9hY2NvdW50IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUFJJTUFSWV9BQ0NPVU5UX1RZUEUgPSAidHlwZV9mb3JfcHJpbWFyeV9hY2NvdW50IjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUkVNT1ZFX0RVUExJQ0FURV9FTlRSSUVTID0gInJlbW92ZV9kdXBsaWNhdGVfZW50cmllcyI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNUUkVRVUVOVF9QSE9ORV9PTkxZID0gInN0cmVxdWVudF9waG9uZV9vbmx5IjsKICAgfQogCiAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQ29udGFjdHNDb250cmFjdC5BZ2dyZWdhdGlvbkV4Y2VwdGlvbnMgaW1wbGVtZW50cyBhbmRyb2lkLnByb3ZpZGVyLkJhc2VDb2x1bW5zIHsKQEAgLTE5OTAwLDYgKzIwNjQwLDEyIEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9DVVNUT00gPSAwOyAvLyAweDAKICAgfQogCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQ29udGFjdHNDb250cmFjdC5Db21tb25EYXRhS2luZHMuQ2FsbGFibGUgaW1wbGVtZW50cyBhbmRyb2lkLnByb3ZpZGVyLkNvbnRhY3RzQ29udHJhY3QuQ29tbW9uRGF0YUtpbmRzLkNvbW1vbkNvbHVtbnMgYW5kcm9pZC5wcm92aWRlci5Db250YWN0c0NvbnRyYWN0LkRhdGFDb2x1bW5zV2l0aEpvaW5zIHsKKyAgICBjdG9yIHB1YmxpYyBDb250YWN0c0NvbnRyYWN0LkNvbW1vbkRhdGFLaW5kcy5DYWxsYWJsZSgpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIENPTlRFTlRfRklMVEVSX1VSSTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQubmV0LlVyaSBDT05URU5UX1VSSTsKKyAgfQorCiAgIHByb3RlY3RlZCBzdGF0aWMgYWJzdHJhY3QgaW50ZXJmYWNlIENvbnRhY3RzQ29udHJhY3QuQ29tbW9uRGF0YUtpbmRzLkNvbW1vbkNvbHVtbnMgaW1wbGVtZW50cyBhbmRyb2lkLnByb3ZpZGVyLkNvbnRhY3RzQ29udHJhY3QuQ29tbW9uRGF0YUtpbmRzLkJhc2VUeXBlcyB7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIERBVEEgPSAiZGF0YTEiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBMQUJFTCA9ICJkYXRhMyI7CkBAIC0yMDA3OCw2ICsyMDgyNCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTlRFTlRfSVRFTV9UWVBFID0gInZuZC5hbmRyb2lkLmN1cnNvci5pdGVtL25hbWUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBESVNQTEFZX05BTUUgPSAiZGF0YTEiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGQU1JTFlfTkFNRSA9ICJkYXRhMyI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZVTExfTkFNRV9TVFlMRSA9ICJkYXRhMTAiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBHSVZFTl9OQU1FID0gImRhdGEyIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTUlERExFX05BTUUgPSAiZGF0YTUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBQSE9ORVRJQ19GQU1JTFlfTkFNRSA9ICJkYXRhOSI7CkBAIC0yMDEzMSw2ICsyMDg3OCw3IEBACiAgIHByb3RlY3RlZCBzdGF0aWMgYWJzdHJhY3QgaW50ZXJmYWNlIENvbnRhY3RzQ29udHJhY3QuQ29udGFjdE9wdGlvbnNDb2x1bW5zIHsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ1VTVE9NX1JJTkdUT05FID0gImN1c3RvbV9yaW5ndG9uZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIExBU1RfVElNRV9DT05UQUNURUQgPSAibGFzdF90aW1lX2NvbnRhY3RlZCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFBJTk5FRCA9ICJwaW5uZWQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTRU5EX1RPX1ZPSUNFTUFJTCA9ICJzZW5kX3RvX3ZvaWNlbWFpbCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNUQVJSRUQgPSAic3RhcnJlZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFRJTUVTX0NPTlRBQ1RFRCA9ICJ0aW1lc19jb250YWN0ZWQiOwpAQCAtMjAxNTcsNiArMjA5MDUsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIENPTlRFTlRfR1JPVVBfVVJJOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT05URU5UX0lURU1fVFlQRSA9ICJ2bmQuYW5kcm9pZC5jdXJzb3IuaXRlbS9jb250YWN0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQubmV0LlVyaSBDT05URU5UX0xPT0tVUF9VUkk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm5ldC5VcmkgQ09OVEVOVF9NVUxUSV9WQ0FSRF9VUkk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm5ldC5VcmkgQ09OVEVOVF9TVFJFUVVFTlRfRklMVEVSX1VSSTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQubmV0LlVyaSBDT05URU5UX1NUUkVRVUVOVF9VUkk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTlRFTlRfVFlQRSA9ICJ2bmQuYW5kcm9pZC5jdXJzb3IuZGlyL2NvbnRhY3QiOwpAQCAtMjAzODksNiArMjExMzgsNyBAQAogCiAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQ29udGFjdHNDb250cmFjdC5QaG9uZUxvb2t1cCBpbXBsZW1lbnRzIGFuZHJvaWQucHJvdmlkZXIuQmFzZUNvbHVtbnMgYW5kcm9pZC5wcm92aWRlci5Db250YWN0c0NvbnRyYWN0LkNvbnRhY3RPcHRpb25zQ29sdW1ucyBhbmRyb2lkLnByb3ZpZGVyLkNvbnRhY3RzQ29udHJhY3QuQ29udGFjdHNDb2x1bW5zIGFuZHJvaWQucHJvdmlkZXIuQ29udGFjdHNDb250cmFjdC5QaG9uZUxvb2t1cENvbHVtbnMgewogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIENPTlRFTlRfRklMVEVSX1VSSTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUVVFUllfUEFSQU1FVEVSX1NJUF9BRERSRVNTID0gInNpcCI7CiAgIH0KIAogICBwcm90ZWN0ZWQgc3RhdGljIGFic3RyYWN0IGludGVyZmFjZSBDb250YWN0c0NvbnRyYWN0LlBob25lTG9va3VwQ29sdW1ucyB7CkBAIC0yMDQwNSw2ICsyMTE1NSwyNSBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOREVGSU5FRCA9IDA7IC8vIDB4MAogICB9CiAKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBDb250YWN0c0NvbnRyYWN0LlBpbm5lZFBvc2l0aW9ucyB7CisgICAgY3RvciBwdWJsaWMgQ29udGFjdHNDb250cmFjdC5QaW5uZWRQb3NpdGlvbnMoKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERU1PVEVEID0gLTE7IC8vIDB4ZmZmZmZmZmYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU1RBUl9XSEVOX1BJTk5JTkcgPSAic3Rhcl93aGVuX3Bpbm5pbmciOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBVTkRFTU9URSA9ICJ1bmRlbW90ZSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5QSU5ORUQgPSAyMTQ3NDgzNjQ3OyAvLyAweDdmZmZmZmZmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm5ldC5VcmkgVVBEQVRFX1VSSTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQ29udGFjdHNDb250cmFjdC5QcmVmZXJlbmNlcyB7CisgICAgY3RvciBwdWJsaWMgQ29udGFjdHNDb250cmFjdC5QcmVmZXJlbmNlcygpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBESVNQTEFZX09SREVSID0gImFuZHJvaWQuY29udGFjdHMuRElTUExBWV9PUkRFUiI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElTUExBWV9PUkRFUl9BTFRFUk5BVElWRSA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERJU1BMQVlfT1JERVJfUFJJTUFSWSA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTT1JUX09SREVSID0gImFuZHJvaWQuY29udGFjdHMuU09SVF9PUkRFUiI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09SVF9PUkRFUl9BTFRFUk5BVElWRSA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPUlRfT1JERVJfUFJJTUFSWSA9IDE7IC8vIDB4MQorICB9CisKICAgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGNsYXNzIENvbnRhY3RzQ29udHJhY3QuUHJlc2VuY2UgZXh0ZW5kcyBhbmRyb2lkLnByb3ZpZGVyLkNvbnRhY3RzQ29udHJhY3QuU3RhdHVzVXBkYXRlcyB7CiAgICAgY3RvciBwdWJsaWMgQ29udGFjdHNDb250cmFjdC5QcmVzZW5jZSgpOwogICB9CkBAIC0yMTE3Miw2ICsyMTk0MSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIExPQ0tfUEFUVEVSTl9WSVNJQkxFID0gImxvY2tfcGF0dGVybl92aXNpYmxlX3BhdHRlcm4iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIExPR0dJTkdfSUQgPSAibG9nZ2luZ19pZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgTkVUV09SS19QUkVGRVJFTkNFID0gIm5ldHdvcmtfcHJlZmVyZW5jZSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIE5GQ19VTkxPQ0tfRU5BQkxFRCA9ICJuZmNfdW5sb2NrX2VuYWJsZWQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBQQVJFTlRBTF9DT05UUk9MX0VOQUJMRUQgPSAicGFyZW50YWxfY29udHJvbF9lbmFibGVkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUEFSRU5UQUxfQ09OVFJPTF9MQVNUX1VQREFURSA9ICJwYXJlbnRhbF9jb250cm9sX2xhc3RfdXBkYXRlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUEFSRU5UQUxfQ09OVFJPTF9SRURJUkVDVF9VUkwgPSAicGFyZW50YWxfY29udHJvbF9yZWRpcmVjdF91cmwiOwpAQCAtMjE3MTIsMTUgKzIyNDgyLDE4IEBACiBwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0IHsKIAogICBwdWJsaWMgY2xhc3MgQWxsb2NhdGlvbiBleHRlbmRzIGFuZHJvaWQucmVuZGVyc2NyaXB0LkJhc2VPYmogeworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50LCBpbnQsIGphdmEubGFuZy5PYmplY3QpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50LCBpbnQsIGludFtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weTFEUmFuZ2VGcm9tKGludCwgaW50LCBzaG9ydFtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weTFEUmFuZ2VGcm9tKGludCwgaW50LCBieXRlW10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50LCBpbnQsIGZsb2F0W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50LCBpbnQsIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQsIGludCwgamF2YS5sYW5nLk9iamVjdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQsIGludCwgaW50W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoaW50LCBpbnQsIHNob3J0W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoaW50LCBpbnQsIGJ5dGVbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQsIGludCwgZmxvYXRbXSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkyRFJhbmdlRnJvbShpbnQsIGludCwgaW50LCBpbnQsIGphdmEubGFuZy5PYmplY3QpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MkRSYW5nZUZyb20oaW50LCBpbnQsIGludCwgaW50LCBieXRlW10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MkRSYW5nZUZyb20oaW50LCBpbnQsIGludCwgaW50LCBzaG9ydFtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weTJEUmFuZ2VGcm9tKGludCwgaW50LCBpbnQsIGludCwgaW50W10pOwpAQCAtMjE3MjgsMTcgKzIyNTAxLDIwIEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkyRFJhbmdlRnJvbShpbnQsIGludCwgaW50LCBpbnQsIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24sIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weTJEUmFuZ2VGcm9tKGludCwgaW50LCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlGcm9tKGFuZHJvaWQucmVuZGVyc2NyaXB0LkJhc2VPYmpbXSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlGcm9tKGphdmEubGFuZy5PYmplY3QpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5RnJvbShpbnRbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlGcm9tKHNob3J0W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5RnJvbShieXRlW10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5RnJvbShmbG9hdFtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weUZyb20oYW5kcm9pZC5ncmFwaGljcy5CaXRtYXApOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5RnJvbShhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgY29weUZyb21VbmNoZWNrZWQoamF2YS5sYW5nLk9iamVjdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlGcm9tVW5jaGVja2VkKGludFtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weUZyb21VbmNoZWNrZWQoc2hvcnRbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlGcm9tVW5jaGVja2VkKGJ5dGVbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlGcm9tVW5jaGVja2VkKGZsb2F0W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5VG8oYW5kcm9pZC5ncmFwaGljcy5CaXRtYXApOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5VG8oamF2YS5sYW5nLk9iamVjdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlUbyhieXRlW10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5VG8oc2hvcnRbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlUbyhpbnRbXSk7CkBAIC0yMTgwMyw3ICsyMjU3OSw3IEBACiAgIH0KIAogICBwdWJsaWMgY2xhc3MgQmFzZU9iaiB7Ci0gICAgbWV0aG9kIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBkZXN0cm95KCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGRlc3Ryb3koKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TmFtZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpOwogICB9CkBAIC0yMjM5NSw2ICsyMzE3MSw3IEBACiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRJbnRyaW5zaWMzRExVVCBleHRlbmRzIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdEludHJpbnNpYyB7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0SW50cmluc2ljM0RMVVQgY3JlYXRlKGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdCwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2goYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2goYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0LkxhdW5jaE9wdGlvbnMpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldExVVChhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uKTsKICAgfQpAQCAtMjI0MDIsMjAgKzIzMTc5LDM1IEBACiAgIHB1YmxpYyBjbGFzcyBTY3JpcHRJbnRyaW5zaWNCbGVuZCBleHRlbmRzIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdEludHJpbnNpYyB7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0SW50cmluc2ljQmxlbmQgY3JlYXRlKGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdCwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hBZGQoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hBZGQoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0LkxhdW5jaE9wdGlvbnMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoQ2xlYXIoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hDbGVhcihhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuTGF1bmNoT3B0aW9ucyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hEc3QoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hEc3QoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0LkxhdW5jaE9wdGlvbnMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoRHN0QXRvcChhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZm9yRWFjaERzdEF0b3AoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0LkxhdW5jaE9wdGlvbnMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoRHN0SW4oYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hEc3RJbihhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuTGF1bmNoT3B0aW9ucyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hEc3RPdXQoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hEc3RPdXQoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0LkxhdW5jaE9wdGlvbnMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoRHN0T3ZlcihhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZm9yRWFjaERzdE92ZXIoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0LkxhdW5jaE9wdGlvbnMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoTXVsdGlwbHkoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hNdWx0aXBseShhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuTGF1bmNoT3B0aW9ucyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hTcmMoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hTcmMoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0LkxhdW5jaE9wdGlvbnMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoU3JjQXRvcChhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZm9yRWFjaFNyY0F0b3AoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0LkxhdW5jaE9wdGlvbnMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoU3JjSW4oYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hTcmNJbihhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuTGF1bmNoT3B0aW9ucyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hTcmNPdXQoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hTcmNPdXQoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0LkxhdW5jaE9wdGlvbnMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoU3JjT3ZlcihhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZm9yRWFjaFNyY092ZXIoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0LkxhdW5jaE9wdGlvbnMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoU3VidHJhY3QoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hTdWJ0cmFjdChhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuTGF1bmNoT3B0aW9ucyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hYb3IoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hYb3IoYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0LkxhdW5jaE9wdGlvbnMpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEQWRkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURDbGVhcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElERHN0KCk7CkBAIC0yMjQzNiw2ICsyMzIyOCw3IEBACiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRJbnRyaW5zaWNCbHVyIGV4dGVuZHMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0SW50cmluc2ljIHsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHRJbnRyaW5zaWNCbHVyIGNyZWF0ZShhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHQsIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoKGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoKGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24sIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdC5MYXVuY2hPcHRpb25zKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdC5GaWVsZElEIGdldEZpZWxkSURfSW5wdXQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRJbnB1dChhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uKTsKQEAgLTIyNDQ2LDYgKzIzMjM5LDcgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBkZXByZWNhdGVkIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdEludHJpbnNpY0NvbG9yTWF0cml4IGNyZWF0ZShhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHQsIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdEludHJpbnNpY0NvbG9yTWF0cml4IGNyZWF0ZShhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoKGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24sIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoKGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24sIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24sIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdC5MYXVuY2hPcHRpb25zKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBZGQoYW5kcm9pZC5yZW5kZXJzY3JpcHQuRmxvYXQ0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QWRkKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKQEAgLTIyNDU5LDYgKzIzMjUzLDcgQEAKICAgcHVibGljIGZpbmFsIGNsYXNzIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzIGV4dGVuZHMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0SW50cmluc2ljIHsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHRJbnRyaW5zaWNDb252b2x2ZTN4MyBjcmVhdGUoYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0LCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZm9yRWFjaChhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZm9yRWFjaChhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuTGF1bmNoT3B0aW9ucyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuRmllbGRJRCBnZXRGaWVsZElEX0lucHV0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSUQoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29lZmZpY2llbnRzKGZsb2F0W10pOwpAQCAtMjI0NjgsNiArMjMyNjMsNyBAQAogICBwdWJsaWMgZmluYWwgY2xhc3MgU2NyaXB0SW50cmluc2ljQ29udm9sdmU1eDUgZXh0ZW5kcyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHRJbnRyaW5zaWMgewogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdEludHJpbnNpY0NvbnZvbHZlNXg1IGNyZWF0ZShhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHQsIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoKGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoKGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24sIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdC5MYXVuY2hPcHRpb25zKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdC5GaWVsZElEIGdldEZpZWxkSURfSW5wdXQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb2VmZmljaWVudHMoZmxvYXRbXSk7CkBAIC0yMjQ3Nyw3ICsyMzI3Myw5IEBACiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRJbnRyaW5zaWNIaXN0b2dyYW0gZXh0ZW5kcyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHRJbnRyaW5zaWMgewogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdEludHJpbnNpY0hpc3RvZ3JhbSBjcmVhdGUoYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0LCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZm9yRWFjaChhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZm9yRWFjaChhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuTGF1bmNoT3B0aW9ucyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZvckVhY2hfRG90KGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoX0RvdChhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuTGF1bmNoT3B0aW9ucyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuRmllbGRJRCBnZXRGaWVsZElEX0lucHV0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURfU2VwYXJhdGUoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0RG90Q29lZmZpY2llbnRzKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKQEAgLTIyNDg3LDYgKzIzMjg1LDcgQEAKICAgcHVibGljIGZpbmFsIGNsYXNzIFNjcmlwdEludHJpbnNpY0xVVCBleHRlbmRzIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdEludHJpbnNpYyB7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2NyaXB0SW50cmluc2ljTFVUIGNyZWF0ZShhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHQsIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoKGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24sIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JFYWNoKGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24sIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24sIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdC5MYXVuY2hPcHRpb25zKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBbHBoYShpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEJsdWUoaW50LCBpbnQpOwpAQCAtMjI1MjcsNiArMjMzMjYsOSBAQAogICB9CiAKICAgcHVibGljIGNsYXNzIFR5cGUgZXh0ZW5kcyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5CYXNlT2JqIHsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5UeXBlIGNyZWF0ZVgoYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0LCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LlR5cGUgY3JlYXRlWFkoYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0LCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuVHlwZSBjcmVhdGVYWVooYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0LCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRDb3VudCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudCBnZXRFbGVtZW50KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0WCgpOwpAQCAtMjI5MTQsMTEgKzIzNzE2LDUyIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5zcGVlY2gudHRzIHsKIAorICBwdWJsaWMgZmluYWwgY2xhc3MgUmVxdWVzdENvbmZpZyB7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLkJ1bmRsZSBnZXRBdWRpb1BhcmFtcygpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mbyBnZXRWb2ljZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgZ2V0Vm9pY2VQYXJhbXMoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUmVxdWVzdENvbmZpZy5CdWlsZGVyIHsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnIGJ1aWxkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5zcGVlY2gudHRzLlJlcXVlc3RDb25maWcuQnVpbGRlciBuZXdCdWlsZGVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5zcGVlY2gudHRzLlJlcXVlc3RDb25maWcuQnVpbGRlciBuZXdCdWlsZGVyKGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnLkJ1aWxkZXIgc2V0QXVkaW9QYXJhbShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QXVkaW9QYXJhbVBhbihmbG9hdCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEF1ZGlvUGFyYW1TdHJlYW0oaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QXVkaW9QYXJhbVZvbHVtZShmbG9hdCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnNwZWVjaC50dHMuUmVxdWVzdENvbmZpZy5CdWlsZGVyIHNldFZvaWNlKGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8pOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlJlcXVlc3RDb25maWcuQnVpbGRlciBzZXRWb2ljZVBhcmFtKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3QpOworICB9CisKKyAgcHVibGljIGZpbmFsIGNsYXNzIFJlcXVlc3RDb25maWdIZWxwZXIgeworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnIGhpZ2hlc3RRdWFsaXR5KGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuRW5naW5lU3RhdHVzLCBib29sZWFuLCBhbmRyb2lkLnNwZWVjaC50dHMuUmVxdWVzdENvbmZpZ0hlbHBlci5Wb2ljZVNjb3Jlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5zcGVlY2gudHRzLlJlcXVlc3RDb25maWcgaGlnaGVzdFF1YWxpdHkoYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5FbmdpbmVTdGF0dXMsIGJvb2xlYW4pOworICB9CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBSZXF1ZXN0Q29uZmlnSGVscGVyLkV4YWN0TG9jYWxlTWF0Y2hlciBpbXBsZW1lbnRzIGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnSGVscGVyLlZvaWNlU2NvcmVyIHsKKyAgICBjdG9yIHB1YmxpYyBSZXF1ZXN0Q29uZmlnSGVscGVyLkV4YWN0TG9jYWxlTWF0Y2hlcihqYXZhLnV0aWwuTG9jYWxlKTsKKyAgICBtZXRob2QgcHVibGljIGludCBzY29yZVZvaWNlKGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8pOworICB9CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBSZXF1ZXN0Q29uZmlnSGVscGVyLkxhbmd1YWdlTWF0Y2hlciBpbXBsZW1lbnRzIGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnSGVscGVyLlZvaWNlU2NvcmVyIHsKKyAgICBjdG9yIHB1YmxpYyBSZXF1ZXN0Q29uZmlnSGVscGVyLkxhbmd1YWdlTWF0Y2hlcihqYXZhLnV0aWwuTG9jYWxlKTsKKyAgICBtZXRob2QgcHVibGljIGludCBzY29yZVZvaWNlKGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8pOworICB9CisKKyAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBpbnRlcmZhY2UgUmVxdWVzdENvbmZpZ0hlbHBlci5Wb2ljZVNjb3JlciB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnQgc2NvcmVWb2ljZShhbmRyb2lkLnNwZWVjaC50dHMuVm9pY2VJbmZvKTsKKyAgfQorCiAgIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgU3ludGhlc2lzQ2FsbGJhY2sgewogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IGF1ZGlvQXZhaWxhYmxlKGJ5dGVbXSwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IGRvbmUoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgZXJyb3IoKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgZXJyb3IoaW50KTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBmYWxsYmFjaygpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IGdldE1heEJ1ZmZlclNpemUoKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFzRmluaXNoZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFzU3RhcnRlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IHN0YXJ0KGludCwgaW50LCBpbnQpOwogICB9CiAKQEAgLTIyOTM0LDcgKzIzNzc3LDE3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFZhcmlhbnQoKTsKICAgfQogCi0gIHB1YmxpYyBjbGFzcyBUZXh0VG9TcGVlY2ggeworICBwdWJsaWMgZmluYWwgY2xhc3MgU3ludGhlc2lzUmVxdWVzdFYyIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKKyAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLkJ1bmRsZSBnZXRBdWRpb1BhcmFtcygpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRUZXh0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFV0dGVyYW5jZUlkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFZvaWNlTmFtZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgZ2V0Vm9pY2VQYXJhbXMoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKKyAgfQorCisgIHB1YmxpYyBkZXByZWNhdGVkIGNsYXNzIFRleHRUb1NwZWVjaCB7CiAgICAgY3RvciBwdWJsaWMgVGV4dFRvU3BlZWNoKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoLk9uSW5pdExpc3RlbmVyKTsKICAgICBjdG9yIHB1YmxpYyBUZXh0VG9TcGVlY2goYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2guT25Jbml0TGlzdGVuZXIsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGFkZEVhcmNvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQpOwpAQCAtMjMwMTksOCArMjM4NzIsODAgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25VdHRlcmFuY2VDb21wbGV0ZWQoamF2YS5sYW5nLlN0cmluZyk7CiAgIH0KIAorICBwdWJsaWMgZmluYWwgY2xhc3MgVGV4dFRvU3BlZWNoQ2xpZW50IHsKKyAgICBjdG9yIHB1YmxpYyBUZXh0VG9TcGVlY2hDbGllbnQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4sIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuUmVxdWVzdENhbGxiYWNrcywgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5Db25uZWN0aW9uQ2FsbGJhY2tzKTsKKyAgICBjdG9yIHB1YmxpYyBUZXh0VG9TcGVlY2hDbGllbnQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuUmVxdWVzdENhbGxiYWNrcywgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5Db25uZWN0aW9uQ2FsbGJhY2tzKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgY29ubmVjdCgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LkVuZ2luZVN0YXR1cyBnZXRFbmdpbmVTdGF0dXMoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNDb25uZWN0ZWQoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgcXVldWVBdWRpbyhhbmRyb2lkLm5ldC5VcmksIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuVXR0ZXJhbmNlSWQsIGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnLCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlJlcXVlc3RDYWxsYmFja3MpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBxdWV1ZVNpbGVuY2UobG9uZywgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5VdHRlcmFuY2VJZCwgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5SZXF1ZXN0Q2FsbGJhY2tzKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgcXVldWVTcGVhayhqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkLCBhbmRyb2lkLnNwZWVjaC50dHMuUmVxdWVzdENvbmZpZywgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5SZXF1ZXN0Q2FsbGJhY2tzKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgcXVldWVTeW50aGVzaXplVG9GaWxlKGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuVXR0ZXJhbmNlSWQsIGphdmEuaW8uRmlsZSwgYW5kcm9pZC5zcGVlY2gudHRzLlJlcXVlc3RDb25maWcsIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuUmVxdWVzdENhbGxiYWNrcyk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHN0b3AoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgaW50ZXJmYWNlIFRleHRUb1NwZWVjaENsaWVudC5Db25uZWN0aW9uQ2FsbGJhY2tzIHsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25Db25uZWN0aW9uRmFpbHVyZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbkNvbm5lY3Rpb25TdWNjZXNzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uRW5naW5lU3RhdHVzQ2hhbmdlKGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuRW5naW5lU3RhdHVzKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFRleHRUb1NwZWVjaENsaWVudC5FbmdpbmVTdGF0dXMgeworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRFbmdpbmVQYWNrYWdlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLnNwZWVjaC50dHMuVm9pY2VJbmZvPiBnZXRWb2ljZXMoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyB7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFVRElPX1BBUkFNX1BBTiA9ICJwYW4iOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBVURJT19QQVJBTV9TVFJFQU0gPSAic3RyZWFtVHlwZSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFVRElPX1BBUkFNX1ZPTFVNRSA9ICJ2b2x1bWUiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGQUxMQkFDS19WT0lDRV9OQU1FID0gImZhbGxiYWNrVm9pY2VOYW1lIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTkVUV09SS19SRVRSSUVTX0NPVU5UID0gIm5ldHdvcmtSZXRyaWVzQ291bnQiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBORVRXT1JLX1RJTUVPVVRfTVMgPSAibmV0d29ya1RpbWVvdXRNcyI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNQRUVDSF9QSVRDSCA9ICJzcGVlY2hQaXRjaCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNQRUVDSF9TUEVFRCA9ICJzcGVlY2hTcGVlZCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFRSQUNLX1NVQlVUVEVSQU5DRV9QUk9HUkVTUyA9ICJ0cmFja1N1YnV0dGVyYW5jZVByb2dyZXNzIjsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgVGV4dFRvU3BlZWNoQ2xpZW50LlJlcXVlc3RDYWxsYmFja3MgeworICAgIGN0b3IgcHVibGljIFRleHRUb1NwZWVjaENsaWVudC5SZXF1ZXN0Q2FsbGJhY2tzKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uU3ludGhlc2lzRmFpbHVyZShhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblN5bnRoZXNpc0ZhbGxiYWNrKGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuVXR0ZXJhbmNlSWQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblN5bnRoZXNpc1Byb2dyZXNzKGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuVXR0ZXJhbmNlSWQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25TeW50aGVzaXNTdGFydChhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25TeW50aGVzaXNTdG9wKGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuVXR0ZXJhbmNlSWQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblN5bnRoZXNpc1N1Y2Nlc3MoYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5VdHRlcmFuY2VJZCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMgeworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RPV05MT0FESU5HX0FERElUSU9OQUxfREFUQSA9IDE3OyAvLyAweDExCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfSU5WQUxJRF9SRVFVRVNUID0gMTU7IC8vIDB4ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX05FVFdPUksgPSAxMzsgLy8gMHhkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfTkVUV09SS19USU1FT1VUID0gMTQ7IC8vIDB4ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX05PTl9VTklRVUVfVVRURVJBTkNFX0lEID0gMTY7IC8vIDB4MTAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9PVVRQVVQgPSAxMjsgLy8gMHhjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfU0VSVklDRSA9IDExOyAvLyAweGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9TWU5USEVTSVMgPSAxMDsgLy8gMHhhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfVU5LTk9XTiA9IC0xOyAvLyAweGZmZmZmZmZmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RPUFBFRCA9IDEwMDsgLy8gMHg2NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVQ0NFU1MgPSAwOyAvLyAweDAKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkIHsKKyAgICBjdG9yIHB1YmxpYyBUZXh0VG9TcGVlY2hDbGllbnQuVXR0ZXJhbmNlSWQoKTsKKyAgICBjdG9yIHB1YmxpYyBUZXh0VG9TcGVlY2hDbGllbnQuVXR0ZXJhbmNlSWQoamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIHRvVW5pcXVlU3RyaW5nKCk7CisgIH0KKwogICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVGV4dFRvU3BlZWNoU2VydmljZSBleHRlbmRzIGFuZHJvaWQuYXBwLlNlcnZpY2UgewogICAgIGN0b3IgcHVibGljIFRleHRUb1NwZWVjaFNlcnZpY2UoKTsKKyAgICBtZXRob2QgcHJvdGVjdGVkIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8+IGNoZWNrVm9pY2VzSW5mbygpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb3JjZVZvaWNlc0luZm9DaGVjaygpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mbyBnZXRWb2ljZXNJbmZvV2l0aE5hbWUoamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBib29sZWFuIGltcGxlbWVudHNWMkFQSSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5JQmluZGVyIG9uQmluZChhbmRyb2lkLmNvbnRlbnQuSW50ZW50KTsKICAgICBtZXRob2QgcHJvdGVjdGVkIGphdmEudXRpbC5TZXQ8amF2YS5sYW5nLlN0cmluZz4gb25HZXRGZWF0dXJlc0Zvckxhbmd1YWdlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZ1tdIG9uR2V0TGFuZ3VhZ2UoKTsKQEAgLTIzMDI4LDYgKzIzOTUzLDggQEAKICAgICBtZXRob2QgcHJvdGVjdGVkIGFic3RyYWN0IGludCBvbkxvYWRMYW5ndWFnZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgb25TdG9wKCk7CiAgICAgbWV0aG9kIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIG9uU3ludGhlc2l6ZVRleHQoYW5kcm9pZC5zcGVlY2gudHRzLlN5bnRoZXNpc1JlcXVlc3QsIGFuZHJvaWQuc3BlZWNoLnR0cy5TeW50aGVzaXNDYWxsYmFjayk7CisgICAgbWV0aG9kIHByb3RlY3RlZCB2b2lkIG9uU3ludGhlc2l6ZVRleHRWMihhbmRyb2lkLnNwZWVjaC50dHMuU3ludGhlc2lzUmVxdWVzdFYyLCBhbmRyb2lkLnNwZWVjaC50dHMuVm9pY2VJbmZvLCBhbmRyb2lkLnNwZWVjaC50dHMuU3ludGhlc2lzQ2FsbGJhY2spOworICAgIG1ldGhvZCBwcm90ZWN0ZWQgdm9pZCBvblZvaWNlc0luZm9DaGFuZ2UoKTsKICAgfQogCiAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVdHRlcmFuY2VQcm9ncmVzc0xpc3RlbmVyIHsKQEAgLTIzMDM3LDYgKzIzOTY0LDQ0IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RhcnQoamF2YS5sYW5nLlN0cmluZyk7CiAgIH0KIAorICBwdWJsaWMgZmluYWwgY2xhc3MgVm9pY2VJbmZvIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKKyAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLkJ1bmRsZSBnZXRBZGRpdGlvbmFsRmVhdHVyZXMoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRMYXRlbmN5KCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTG9jYWxlIGdldExvY2FsZSgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXROYW1lKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLkJ1bmRsZSBnZXRQYXJhbXNXaXRoRGVmYXVsdHMoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRRdWFsaXR5KCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldFJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24oKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9NQVlfQVVUT0lOU1RBTEwgPSAibWF5QXV0b0luc3RhbGwiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1NQRUFLRVJfR0VOREVSID0gInNwZWFrZXJHZW5kZXIiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dPUkRTX1BFUl9NSU5VVEUgPSAid29yZHNQZXJNaW51dGUiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExBVEVOQ1lfSElHSCA9IDQwMDsgLy8gMHgxOTAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVRFTkNZX0xPVyA9IDIwMDsgLy8gMHhjOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExBVEVOQ1lfTk9STUFMID0gMzAwOyAvLyAweDEyYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExBVEVOQ1lfVkVSWV9ISUdIID0gNTAwOyAvLyAweDFmNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExBVEVOQ1lfVkVSWV9MT1cgPSAxMDA7IC8vIDB4NjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUFMSVRZX0hJR0ggPSA0MDA7IC8vIDB4MTkwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVBTElUWV9MT1cgPSAyMDA7IC8vIDB4YzgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUFMSVRZX05PUk1BTCA9IDMwMDsgLy8gMHgxMmMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUFMSVRZX1ZFUllfSElHSCA9IDUwMDsgLy8gMHgxZjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUFMSVRZX1ZFUllfTE9XID0gMTAwOyAvLyAweDY0CisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFZvaWNlSW5mby5CdWlsZGVyIHsKKyAgICBjdG9yIHB1YmxpYyBWb2ljZUluZm8uQnVpbGRlcigpOworICAgIGN0b3IgcHVibGljIFZvaWNlSW5mby5CdWlsZGVyKGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8pOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mbyBidWlsZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mby5CdWlsZGVyIHNldEFkZGl0aW9uYWxGZWF0dXJlcyhhbmRyb2lkLm9zLkJ1bmRsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnNwZWVjaC50dHMuVm9pY2VJbmZvLkJ1aWxkZXIgc2V0TGF0ZW5jeShpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mby5CdWlsZGVyIHNldExvY2FsZShqYXZhLnV0aWwuTG9jYWxlKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8uQnVpbGRlciBzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mby5CdWlsZGVyIHNldFBhcmFtc1dpdGhEZWZhdWx0cyhhbmRyb2lkLm9zLkJ1bmRsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnNwZWVjaC50dHMuVm9pY2VJbmZvLkJ1aWxkZXIgc2V0UXVhbGl0eShpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mby5CdWlsZGVyIHNldFJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24oYm9vbGVhbik7CisgIH0KKwogfQogCiBwYWNrYWdlIGFuZHJvaWQudGVsZXBob255IHsKQEAgLTIzMjA4LDYgKzI0MTczLDcgQEAKIAogICBwdWJsaWMgY2xhc3MgUGhvbmVOdW1iZXJGb3JtYXR0aW5nVGV4dFdhdGNoZXIgaW1wbGVtZW50cyBhbmRyb2lkLnRleHQuVGV4dFdhdGNoZXIgewogICAgIGN0b3IgcHVibGljIFBob25lTnVtYmVyRm9ybWF0dGluZ1RleHRXYXRjaGVyKCk7CisgICAgY3RvciBwdWJsaWMgUGhvbmVOdW1iZXJGb3JtYXR0aW5nVGV4dFdhdGNoZXIoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBhZnRlclRleHRDaGFuZ2VkKGFuZHJvaWQudGV4dC5FZGl0YWJsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGJlZm9yZVRleHRDaGFuZ2VkKGphdmEubGFuZy5DaGFyU2VxdWVuY2UsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblRleHRDaGFuZ2VkKGphdmEubGFuZy5DaGFyU2VxdWVuY2UsIGludCwgaW50LCBpbnQpOwpAQCAtMjMyMjIsMTEgKzI0MTg4LDE0IEBACiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBjb252ZXJ0S2V5cGFkTGV0dGVyc1RvRGlnaXRzKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZXh0cmFjdE5ldHdvcmtQb3J0aW9uKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZXh0cmFjdFBvc3REaWFsUG9ydGlvbihqYXZhLmxhbmcuU3RyaW5nKTsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGZvcm1hdEphcGFuZXNlTnVtYmVyKGFuZHJvaWQudGV4dC5FZGl0YWJsZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBmb3JtYXROYW5wTnVtYmVyKGFuZHJvaWQudGV4dC5FZGl0YWJsZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBmb3JtYXROdW1iZXIoamF2YS5sYW5nLlN0cmluZyk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBmb3JtYXROdW1iZXIoYW5kcm9pZC50ZXh0LkVkaXRhYmxlLCBpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGludCBnZXRGb3JtYXRUeXBlRm9yTG9jYWxlKGphdmEudXRpbC5Mb2NhbGUpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGRlcHJlY2F0ZWQgdm9pZCBmb3JtYXRKYXBhbmVzZU51bWJlcihhbmRyb2lkLnRleHQuRWRpdGFibGUpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGRlcHJlY2F0ZWQgdm9pZCBmb3JtYXROYW5wTnVtYmVyKGFuZHJvaWQudGV4dC5FZGl0YWJsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIGZvcm1hdE51bWJlcihqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBkZXByZWNhdGVkIHZvaWQgZm9ybWF0TnVtYmVyKGFuZHJvaWQudGV4dC5FZGl0YWJsZSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGZvcm1hdE51bWJlcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGZvcm1hdE51bWJlcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGZvcm1hdE51bWJlclRvRTE2NChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBkZXByZWNhdGVkIGludCBnZXRGb3JtYXRUeXBlRm9yTG9jYWxlKGphdmEudXRpbC5Mb2NhbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TnVtYmVyRnJvbUludGVudChhbmRyb2lkLmNvbnRlbnQuSW50ZW50LCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnZXRTdHJpcHBlZFJldmVyc2VkKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gaXMxMktleShjaGFyKTsKQEAgLTIzMjM0LDEzICsyNDIwMywxNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFbWVyZ2VuY3lOdW1iZXIoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0dsb2JhbFBob25lTnVtYmVyKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNJU09EaWdpdChjaGFyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTG9jYWxFbWVyZ2VuY3lOdW1iZXIoamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNOb25TZXBhcmF0b3IoY2hhcik7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc1JlYWxseURpYWxhYmxlKGNoYXIpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNTdGFydHNQb3N0RGlhbChjaGFyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVm9pY2VNYWlsTnVtYmVyKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNXZWxsRm9ybWVkU21zQWRkcmVzcyhqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBieXRlW10gbmV0d29ya1BvcnRpb25Ub0NhbGxlZFBhcnR5QkNEKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJ5dGVbXSBuZXR3b3JrUG9ydGlvblRvQ2FsbGVkUGFydHlCQ0RXaXRoTGVuZ3RoKGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgbm9ybWFsaXplTnVtYmVyKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJ5dGVbXSBudW1iZXJUb0NhbGxlZFBhcnR5QkNEKGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgcmVwbGFjZVVuaWNvZGVEaWdpdHMoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBzdHJpbmdGcm9tU3RyaW5nQW5kVE9BKGphdmEubGFuZy5TdHJpbmcsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBzdHJpcFNlcGFyYXRvcnMoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyB0b0NhbGxlcklETWluTWF0Y2goamF2YS5sYW5nLlN0cmluZyk7CkBAIC0yMzQyMiw2ICsyNDM5NSw5IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFZvaWNlTWFpbEFscGhhVGFnKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFZvaWNlTWFpbE51bWJlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNJY2NDYXJkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGljY0Nsb3NlTG9naWNhbENoYW5uZWwoaW50KTsKKyAgICBtZXRob2QgcHVibGljIGludCBpY2NPcGVuTG9naWNhbENoYW5uZWwoamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGljY1RyYW5zbWl0QXBkdUxvZ2ljYWxDaGFubmVsKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc05ldHdvcmtSb2FtaW5nKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGxpc3RlbihhbmRyb2lkLnRlbGVwaG9ueS5QaG9uZVN0YXRlTGlzdGVuZXIsIGludCk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9QSE9ORV9TVEFURV9DSEFOR0VEID0gImFuZHJvaWQuaW50ZW50LmFjdGlvbi5QSE9ORV9TVEFURSI7CkBAIC0yMzQ3MSw2ICsyNDQ0NywzMiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNJTV9TVEFURV9VTktOT1dOID0gMDsgLy8gMHgwCiAgIH0KIAorICBwdWJsaWMgY2xhc3MgVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lcihjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuSVRoaXJkUGFydHlDYWxsTGlzdGVuZXIpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNhbGxFbmRlZChpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNhbGxFc3RhYmxpc2hlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNhbGxQcm92aWRlckF0dGFjaGVkKGFuZHJvaWQudGVsZXBob255LlRoaXJkUGFydHlDYWxsUHJvdmlkZXIpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblJpbmdpbmdTdGFydGVkKCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTF9FTkRfSU5DT01JTkdfTUlTU0VEID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTF9FTkRfTk9STUFMID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTF9FTkRfT1RIRVIgPSAzOyAvLyAweDMKKyAgfQorCisgIHB1YmxpYyBjbGFzcyBUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyIHsKKyAgICBjdG9yIHB1YmxpYyBUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGhhbmd1cCgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBpbmNvbWluZ0NhbGxBY2NlcHQoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgbXV0ZShib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2VuZER0bWYoY2hhcik7CisgIH0KKworICBwdWJsaWMgY2xhc3MgVGhpcmRQYXJ0eUNhbGxTZXJ2aWNlIHsKKyAgICBjdG9yIHB1YmxpYyBUaGlyZFBhcnR5Q2FsbFNlcnZpY2UoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuSUJpbmRlciBnZXRCaW5kZXIoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgaW5jb21pbmdDYWxsQXR0YWNoKGFuZHJvaWQudGVsZXBob255LlRoaXJkUGFydHlDYWxsTGlzdGVuZXIsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvdXRnb2luZ0NhbGxJbml0aWF0ZShhbmRyb2lkLnRlbGVwaG9ueS5UaGlyZFBhcnR5Q2FsbExpc3RlbmVyLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgfQorCiB9CiAKIHBhY2thZ2UgYW5kcm9pZC50ZWxlcGhvbnkuY2RtYSB7CkBAIC0yNTU5MCw3ICsyNjU5Miw4IEBACiAKICAgcHVibGljIGZpbmFsIGNsYXNzIFNjZW5lIHsKICAgICBjdG9yIHB1YmxpYyBTY2VuZShhbmRyb2lkLnZpZXcuVmlld0dyb3VwKTsKLSAgICBjdG9yIHB1YmxpYyBTY2VuZShhbmRyb2lkLnZpZXcuVmlld0dyb3VwLCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwKTsKKyAgICBjdG9yIHB1YmxpYyBTY2VuZShhbmRyb2lkLnZpZXcuVmlld0dyb3VwLCBhbmRyb2lkLnZpZXcuVmlldyk7CisgICAgY3RvciBwdWJsaWMgZGVwcmVjYXRlZCBTY2VuZShhbmRyb2lkLnZpZXcuVmlld0dyb3VwLCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZW50ZXIoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZXhpdCgpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSBnZXRTY2VuZUZvckxheW91dChhbmRyb2lkLnZpZXcuVmlld0dyb3VwLCBpbnQsIGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKQEAgLTI1NjQ4LDEwICsyNjY1MSwxNSBAQAogICAgIGN0b3IgcHVibGljIFRyYW5zaXRpb25NYW5hZ2VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBiZWdpbkRlbGF5ZWRUcmFuc2l0aW9uKGFuZHJvaWQudmlldy5WaWV3R3JvdXApOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgYmVnaW5EZWxheWVkVHJhbnNpdGlvbihhbmRyb2lkLnZpZXcuVmlld0dyb3VwLCBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbiBnZXROYW1lZFRyYW5zaXRpb24oamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC50cmFuc2l0aW9uLlNjZW5lKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uIGdldE5hbWVkVHJhbnNpdGlvbihhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmUsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldFRhcmdldFNjZW5lTmFtZXMoYW5kcm9pZC50cmFuc2l0aW9uLlNjZW5lKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdvKGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbyhhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmUsIGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VHJhbnNpdGlvbihhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmUsIGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VHJhbnNpdGlvbihhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmUsIGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSwgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUcmFuc2l0aW9uKGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUcmFuc2l0aW9uKGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSwgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb24pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB0cmFuc2l0aW9uVG8oYW5kcm9pZC50cmFuc2l0aW9uLlNjZW5lKTsKICAgfQogCkBAIC0yNjQ4NSw2ICsyNzQ5Myw3IEBACiAgIH0KIAogICBwdWJsaWMgY2xhc3MgSGFwdGljRmVlZGJhY2tDb25zdGFudHMgeworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMT0NLX1RJQ0sgPSA0OyAvLyAweDQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0lHTk9SRV9HTE9CQUxfU0VUVElORyA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfSUdOT1JFX1ZJRVdfU0VUVElORyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtFWUJPQVJEX1RBUCA9IDM7IC8vIDB4MwpAQCAtMjc0MzUsNiArMjg0NDQsNyBAQAogICAgIGN0b3IgcHVibGljIFN1cmZhY2VWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBTdXJmYWNlVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgU3VyZmFjZVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgU3VyZmFjZVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2F0aGVyVHJhbnNwYXJlbnRSZWdpb24oYW5kcm9pZC5ncmFwaGljcy5SZWdpb24pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXIgZ2V0SG9sZGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNlY3VyZShib29sZWFuKTsKQEAgLTI3NDQ2LDYgKzI4NDU2LDcgQEAKICAgICBjdG9yIHB1YmxpYyBUZXh0dXJlVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgVGV4dHVyZVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFRleHR1cmVWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFRleHR1cmVWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIGRyYXcoYW5kcm9pZC5ncmFwaGljcy5DYW52YXMpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAgZ2V0Qml0bWFwKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCBnZXRCaXRtYXAoaW50LCBpbnQpOwpAQCAtMjc0OTcsNiArMjg1MDgsNyBAQAogICAgIGN0b3IgcHVibGljIFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRDaGlsZHJlbkZvckFjY2Vzc2liaWxpdHkoamF2YS51dGlsLkFycmF5TGlzdDxhbmRyb2lkLnZpZXcuVmlldz4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRGb2N1c2FibGVzKGphdmEudXRpbC5BcnJheUxpc3Q8YW5kcm9pZC52aWV3LlZpZXc+LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRGb2N1c2FibGVzKGphdmEudXRpbC5BcnJheUxpc3Q8YW5kcm9pZC52aWV3LlZpZXc+LCBpbnQsIGludCk7CkBAIC0yNzY3NSw2ICsyODY4Nyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0PGFuZHJvaWQudmlldy5WaWV3PiBnZXRUb3VjaGFibGVzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmbG9hdCBnZXRUcmFuc2xhdGlvblgoKTsKICAgICBtZXRob2QgcHVibGljIGZsb2F0IGdldFRyYW5zbGF0aW9uWSgpOworICAgIG1ldGhvZCBwdWJsaWMgZmxvYXQgZ2V0VHJhbnNsYXRpb25aKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0VmVydGljYWxGYWRpbmdFZGdlTGVuZ3RoKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0VmVydGljYWxTY3JvbGxiYXJQb3NpdGlvbigpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKQEAgLTI3NzAyLDYgKzI4NzE1LDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgaW52YWxpZGF0ZShpbnQsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGludmFsaWRhdGVEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNBY2Nlc3NpYmlsaXR5Rm9jdXNlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0FjdGl2YXRlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0F0dGFjaGVkVG9XaW5kb3coKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNDbGlja2FibGUoKTsKQEAgLTI3NzE3LDYgKzI4NzMxLDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNIb3Jpem9udGFsRmFkaW5nRWRnZUVuYWJsZWQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNIb3Jpem9udGFsU2Nyb2xsQmFyRW5hYmxlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0hvdmVyZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzSW5FZGl0TW9kZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0luTGF5b3V0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzSW5Ub3VjaE1vZGUoKTsKQEAgLTI3OTIwLDYgKzI4OTM1LDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VG91Y2hEZWxlZ2F0ZShhbmRyb2lkLnZpZXcuVG91Y2hEZWxlZ2F0ZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0aW9uWChmbG9hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0aW9uWShmbG9hdCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0aW9uWihmbG9hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFZlcnRpY2FsRmFkaW5nRWRnZUVuYWJsZWQoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFZlcnRpY2FsU2Nyb2xsQmFyRW5hYmxlZChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VmVydGljYWxTY3JvbGxiYXJQb3NpdGlvbihpbnQpOwpAQCAtMjgwNTAsNiArMjkwNjYsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFWFRfRElSRUNUSU9OX1JUTCA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC51dGlsLlByb3BlcnR5IFRSQU5TTEFUSU9OX1g7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLnV0aWwuUHJvcGVydHkgVFJBTlNMQVRJT05fWTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQudXRpbC5Qcm9wZXJ0eSBUUkFOU0xBVElPTl9aOwogICAgIGZpZWxkIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBWSUVXX0xPR19UQUcgPSAiVmlldyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVklTSUJMRSA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50W10gV0lORE9XX0ZPQ1VTRURfU1RBVEVfU0VUOwpAQCAtMjgyMzUsNiArMjkyNTIsNyBAQAogICAgIGN0b3IgcHVibGljIFZpZXdHcm91cChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgVmlld0dyb3VwKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBWaWV3R3JvdXAoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgVmlld0dyb3VwKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGFkZFN0YXRlc0Zyb21DaGlsZHJlbigpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRWaWV3KGFuZHJvaWQudmlldy5WaWV3KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkVmlldyhhbmRyb2lkLnZpZXcuVmlldywgaW50KTsKQEAgLTI4NDcyLDYgKzI5NDkwLDggQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5WaWV3UHJvcGVydHlBbmltYXRvciB0cmFuc2xhdGlvblhCeShmbG9hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuVmlld1Byb3BlcnR5QW5pbWF0b3IgdHJhbnNsYXRpb25ZKGZsb2F0KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5WaWV3UHJvcGVydHlBbmltYXRvciB0cmFuc2xhdGlvbllCeShmbG9hdCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuVmlld1Byb3BlcnR5QW5pbWF0b3IgdHJhbnNsYXRpb25aKGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5WaWV3UHJvcGVydHlBbmltYXRvciB0cmFuc2xhdGlvblpCeShmbG9hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuVmlld1Byb3BlcnR5QW5pbWF0b3Igd2l0aEVuZEFjdGlvbihqYXZhLmxhbmcuUnVubmFibGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LlZpZXdQcm9wZXJ0eUFuaW1hdG9yIHdpdGhMYXllcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LlZpZXdQcm9wZXJ0eUFuaW1hdG9yIHdpdGhTdGFydEFjdGlvbihqYXZhLmxhbmcuUnVubmFibGUpOwpAQCAtMjg0ODYsNiArMjk1MDYsNyBAQAogICAgIGN0b3IgcHVibGljIFZpZXdTdHViKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFZpZXdTdHViKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBWaWV3U3R1YihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBWaWV3U3R1YihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEluZmxhdGVkSWQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlciBnZXRMYXlvdXRJbmZsYXRlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldExheW91dFJlc291cmNlKCk7CkBAIC0yODU2OCw2ICsyOTU4OSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMgZ2V0QXR0cmlidXRlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC52aWV3LldpbmRvdy5DYWxsYmFjayBnZXRDYWxsYmFjaygpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC52aWV3LldpbmRvdyBnZXRDb250YWluZXIoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSBnZXRDb250ZW50U2NlbmUoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGdldENvbnRleHQoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQudmlldy5WaWV3IGdldEN1cnJlbnRGb2N1cygpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC52aWV3LlZpZXcgZ2V0RGVjb3JWaWV3KCk7CkBAIC0yODU3NSw2ICsyOTU5Nyw3IEBACiAgICAgbWV0aG9kIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0Rm9yY2VkV2luZG93RmxhZ3MoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlciBnZXRMYXlvdXRJbmZsYXRlcigpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgZmluYWwgaW50IGdldExvY2FsRmVhdHVyZXMoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uTWFuYWdlciBnZXRUcmFuc2l0aW9uTWFuYWdlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFZvbHVtZUNvbnRyb2xTdHJlYW0oKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyIGdldFdpbmRvd01hbmFnZXIoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheSBnZXRXaW5kb3dTdHlsZSgpOwpAQCAtMjg2MjMsNyArMjk2NDYsOSBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRMb2dvKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNvZnRJbnB1dE1vZGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0VGl0bGUoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFRpdGxlQ29sb3IoaW50KTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGRlcHJlY2F0ZWQgdm9pZCBzZXRUaXRsZUNvbG9yKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRyYW5zaXRpb25NYW5hZ2VyKGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uTWFuYWdlcik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRyYW5zaXRpb25PcHRpb25zKGFuZHJvaWQub3MuQnVuZGxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VHlwZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRVaU9wdGlvbnMoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VWlPcHRpb25zKGludCwgaW50KTsKQEAgLTI4NjQ0LDYgKzI5NjY5LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0FDVElPTl9CQVIgPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0FDVElPTl9CQVJfT1ZFUkxBWSA9IDk7IC8vIDB4OQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfQUNUSU9OX01PREVfT1ZFUkxBWSA9IDEwOyAvLyAweGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0NPTlRFTlRfVFJBTlNJVElPTlMgPSAxMTsgLy8gMHhiCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkVBVFVSRV9DT05URVhUX01FTlUgPSA2OyAvLyAweDYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0NVU1RPTV9USVRMRSA9IDc7IC8vIDB4NwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfSU5ERVRFUk1JTkFURV9QUk9HUkVTUyA9IDU7IC8vIDB4NQpAQCAtMjg5OTQsNiArMzAwMjAsOSBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtQWN0aW9uKGludCwgYW5kcm9pZC5vcy5CdW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWN5Y2xlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlZnJlc2goKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgcmVtb3ZlQWN0aW9uKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlbW92ZUNoaWxkKGFuZHJvaWQudmlldy5WaWV3KTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ2hpbGQoYW5kcm9pZC52aWV3LlZpZXcsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEFjY2Vzc2liaWxpdHlGb2N1c2VkKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRCb3VuZHNJblBhcmVudChhbmRyb2lkLmdyYXBoaWNzLlJlY3QpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRCb3VuZHNJblNjcmVlbihhbmRyb2lkLmdyYXBoaWNzLlJlY3QpOwpAQCAtMjkxNjUsMTMgKzMwMTk0LDE2IEBACiAKICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBDYXB0aW9uaW5nTWFuYWdlci5DYXB0aW9uU3R5bGUgewogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5UeXBlZmFjZSBnZXRUeXBlZmFjZSgpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVER0VfVFlQRV9ERVBSRVNTRUQgPSA0OyAvLyAweDQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFREdFX1RZUEVfRFJPUF9TSEFET1cgPSAyOyAvLyAweDIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFREdFX1RZUEVfTk9ORSA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVER0VfVFlQRV9PVVRMSU5FID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRURHRV9UWVBFX1JBSVNFRCA9IDM7IC8vIDB4MwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgYmFja2dyb3VuZENvbG9yOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgZWRnZUNvbG9yOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgZWRnZVR5cGU7CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBmb3JlZ3JvdW5kQ29sb3I7CisgICAgZmllbGQgcHVibGljIGZpbmFsIGludCB3aW5kb3dDb2xvcjsKICAgfQogCiAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQ2FwdGlvbmluZ01hbmFnZXIuQ2FwdGlvbmluZ0NoYW5nZUxpc3RlbmVyIHsKQEAgLTMwMjQ3LDYgKzMxMjc5LDcgQEAKICAgICBjdG9yIHB1YmxpYyBXZWJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBXZWJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBXZWJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFdlYlZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBkZXByZWNhdGVkIFdlYlZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZEphdmFzY3JpcHRJbnRlcmZhY2UoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGNhbkdvQmFjaygpOwpAQCAtMzA0MjEsNiArMzE0NTQsNyBAQAogICAgIGN0b3IgcHVibGljIEFic0xpc3RWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBBYnNMaXN0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgQWJzTGlzdFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQWJzTGlzdFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWZ0ZXJUZXh0Q2hhbmdlZChhbmRyb2lkLnRleHQuRWRpdGFibGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBiZWZvcmVUZXh0Q2hhbmdlZChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gY2FuU2Nyb2xsTGlzdChpbnQpOwpAQCAtMzA0MzMsMTAgKzMxNDY3LDEyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Q2hlY2tlZEl0ZW1Qb3NpdGlvbigpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC51dGlsLlNwYXJzZUJvb2xlYW5BcnJheSBnZXRDaGVja2VkSXRlbVBvc2l0aW9ucygpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldENob2ljZU1vZGUoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRGaXJzdFBvc2l0aW9uRm9yUm93KGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TGlzdFBhZGRpbmdCb3R0b20oKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRMaXN0UGFkZGluZ0xlZnQoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRMaXN0UGFkZGluZ1JpZ2h0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TGlzdFBhZGRpbmdUb3AoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRSb3dGb3JQb3NpdGlvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LlZpZXcgZ2V0U2VsZWN0ZWRWaWV3KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldFNlbGVjdG9yKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldFRleHRGaWx0ZXIoKTsKQEAgLTMwNDcyLDYgKzMxNTA4LDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0RHJhd1NlbGVjdG9yT25Ub3AoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEZhc3RTY3JvbGxBbHdheXNWaXNpYmxlKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRGYXN0U2Nyb2xsRW5hYmxlZChib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0RmFzdFNjcm9sbFN0eWxlKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEZpbHRlclRleHQoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEZyaWN0aW9uKGZsb2F0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SXRlbUNoZWNrZWQoaW50LCBib29sZWFuKTsKQEAgLTMwNDgxLDYgKzMxNTE4LDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UmVtb3RlVmlld3NBZGFwdGVyKGFuZHJvaWQuY29udGVudC5JbnRlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTY3JvbGxJbmRpY2F0b3JzKGFuZHJvaWQudmlldy5WaWV3LCBhbmRyb2lkLnZpZXcuVmlldyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNjcm9sbGluZ0NhY2hlRW5hYmxlZChib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uRnJvbVRvcChpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNlbGVjdG9yKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNlbGVjdG9yKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTbW9vdGhTY3JvbGxiYXJFbmFibGVkKGJvb2xlYW4pOwpAQCAtMzA1MzQsNiArMzE1NzIsNyBAQAogICAgIGN0b3IgcHVibGljIEFic1NlZWtCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEFic1NlZWtCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEFic1NlZWtCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQWJzU2Vla0JhcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEtleVByb2dyZXNzSW5jcmVtZW50KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldFRodW1iKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0VGh1bWJPZmZzZXQoKTsKQEAgLTMwNTQ2LDYgKzMxNTg1LDcgQEAKICAgICBjdG9yIHB1YmxpYyBBYnNTcGlubmVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBBYnNTcGlubmVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBBYnNTcGlubmVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEFic1NwaW5uZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQud2lkZ2V0LlNwaW5uZXJBZGFwdGVyIGdldEFkYXB0ZXIoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5WaWV3IGdldFNlbGVjdGVkVmlldygpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKGFuZHJvaWQub3MuUGFyY2VsYWJsZSk7CkBAIC0zMDU2MCw2ICszMTYwMCw3IEBACiAgICAgY3RvciBwdWJsaWMgQWJzb2x1dGVMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEFic29sdXRlTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBBYnNvbHV0ZUxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBBYnNvbHV0ZUxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFuLCBpbnQsIGludCwgaW50LCBpbnQpOwogICB9CiAKQEAgLTMwNTcyLDYgKzMxNjEzLDIxIEBACiAgICAgZmllbGQgcHVibGljIGludCB5OwogICB9CiAKKyAgcHVibGljIGNsYXNzIEFjdGlvbk1lbnVWaWV3IGV4dGVuZHMgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0IHsKKyAgICBjdG9yIHB1YmxpYyBBY3Rpb25NZW51VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CisgICAgY3RvciBwdWJsaWMgQWN0aW9uTWVudVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3Lk1lbnUgZ2V0TWVudSgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uRGV0YWNoZWRGcm9tV2luZG93KCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIEFjdGlvbk1lbnVWaWV3LkxheW91dFBhcmFtcyBleHRlbmRzIGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dC5MYXlvdXRQYXJhbXMgeworICAgIGN0b3IgcHVibGljIEFjdGlvbk1lbnVWaWV3LkxheW91dFBhcmFtcyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CisgICAgY3RvciBwdWJsaWMgQWN0aW9uTWVudVZpZXcuTGF5b3V0UGFyYW1zKGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zKTsKKyAgICBjdG9yIHB1YmxpYyBBY3Rpb25NZW51Vmlldy5MYXlvdXRQYXJhbXMoYW5kcm9pZC53aWRnZXQuQWN0aW9uTWVudVZpZXcuTGF5b3V0UGFyYW1zKTsKKyAgICBjdG9yIHB1YmxpYyBBY3Rpb25NZW51Vmlldy5MYXlvdXRQYXJhbXMoaW50LCBpbnQpOworICB9CisKICAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBBZGFwdGVyIHsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBnZXRDb3VudCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLk9iamVjdCBnZXRJdGVtKGludCk7CkBAIC0zMDU5MSw2ICszMTY0Nyw3IEBACiAgICAgY3RvciBwdWJsaWMgQWRhcHRlclZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEFkYXB0ZXJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBBZGFwdGVyVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBBZGFwdGVyVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgVCBnZXRBZGFwdGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Q291bnQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5WaWV3IGdldEVtcHR5VmlldygpOwpAQCAtMzA2NDQsNiArMzE3MDEsNyBAQAogICAgIGN0b3IgcHVibGljIEFkYXB0ZXJWaWV3QW5pbWF0b3IoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEFkYXB0ZXJWaWV3QW5pbWF0b3IoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEFkYXB0ZXJWaWV3QW5pbWF0b3IoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQWRhcHRlclZpZXdBbmltYXRvcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZHZhbmNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGRlZmVyTm90aWZ5RGF0YVNldENoYW5nZWQoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZnlpV2lsbEJlQWR2YW5jZWRCeUhvc3RLVGh4KCk7CkBAIC0zMDY3Myw2ICszMTczMSw4IEBACiAgIHB1YmxpYyBjbGFzcyBBZGFwdGVyVmlld0ZsaXBwZXIgZXh0ZW5kcyBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlld0FuaW1hdG9yIHsKICAgICBjdG9yIHB1YmxpYyBBZGFwdGVyVmlld0ZsaXBwZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEFkYXB0ZXJWaWV3RmxpcHBlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CisgICAgY3RvciBwdWJsaWMgQWRhcHRlclZpZXdGbGlwcGVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEFkYXB0ZXJWaWV3RmxpcHBlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEZsaXBJbnRlcnZhbCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0F1dG9TdGFydCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0ZsaXBwaW5nKCk7CkBAIC0zMDcwMyw2ICszMTc2Myw3IEBACiAgICAgY3RvciBwdWJsaWMgQW5hbG9nQ2xvY2soYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEFuYWxvZ0Nsb2NrKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBBbmFsb2dDbG9jayhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBBbmFsb2dDbG9jayhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICB9CiAKICAgcHVibGljIGNsYXNzIEFycmF5QWRhcHRlciBleHRlbmRzIGFuZHJvaWQud2lkZ2V0LkJhc2VBZGFwdGVyIGltcGxlbWVudHMgYW5kcm9pZC53aWRnZXQuRmlsdGVyYWJsZSB7CkBAIC0zMDczNSw2ICszMTc5Niw3IEBACiAgICAgY3RvciBwdWJsaWMgQXV0b0NvbXBsZXRlVGV4dFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEF1dG9Db21wbGV0ZVRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBBdXRvQ29tcGxldGVUZXh0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBBdXRvQ29tcGxldGVUZXh0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjbGVhckxpc3RTZWxlY3Rpb24oKTsKICAgICBtZXRob2QgcHJvdGVjdGVkIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgY29udmVydFNlbGVjdGlvblRvU3RyaW5nKGphdmEubGFuZy5PYmplY3QpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBkaXNtaXNzRHJvcERvd24oKTsKQEAgLTMwODI3LDEyICszMTg4OSwxNCBAQAogICAgIGN0b3IgcHVibGljIEJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgQ2FsZW5kYXJWaWV3IGV4dGVuZHMgYW5kcm9pZC53aWRnZXQuRnJhbWVMYXlvdXQgewogICAgIGN0b3IgcHVibGljIENhbGVuZGFyVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgQ2FsZW5kYXJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBDYWxlbmRhclZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQ2FsZW5kYXJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldERhdGUoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREYXRlVGV4dEFwcGVhcmFuY2UoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRGaXJzdERheU9mV2VlaygpOwpAQCAtMzA4NzQsNiArMzE5MzgsNyBAQAogICAgIGN0b3IgcHVibGljIENoZWNrQm94KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBDaGVja0JveChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgQ2hlY2tCb3goYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQ2hlY2tCb3goYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgfQogCiAgIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgQ2hlY2thYmxlIHsKQEAgLTMwODg2LDYgKzMxOTUxLDcgQEAKICAgICBjdG9yIHB1YmxpYyBDaGVja2VkVGV4dFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIENoZWNrZWRUZXh0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgQ2hlY2tlZFRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIENoZWNrZWRUZXh0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXRDaGVja01hcmtEcmF3YWJsZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0NoZWNrZWQoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q2hlY2tNYXJrRHJhd2FibGUoaW50KTsKQEAgLTMwODk4LDYgKzMxOTY0LDcgQEAKICAgICBjdG9yIHB1YmxpYyBDaHJvbm9tZXRlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgQ2hyb25vbWV0ZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIENocm9ub21ldGVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIENocm9ub21ldGVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldEJhc2UoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Rm9ybWF0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLndpZGdldC5DaHJvbm9tZXRlci5PbkNocm9ub21ldGVyVGlja0xpc3RlbmVyIGdldE9uQ2hyb25vbWV0ZXJUaWNrTGlzdGVuZXIoKTsKQEAgLTMwOTE2LDYgKzMxOTgzLDcgQEAKICAgICBjdG9yIHB1YmxpYyBDb21wb3VuZEJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgQ29tcG91bmRCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIENvbXBvdW5kQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIENvbXBvdW5kQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ2hlY2tlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRCdXR0b25EcmF3YWJsZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRCdXR0b25EcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKQEAgLTMwOTg3LDYgKzMyMDU1LDcgQEAKICAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIERhdGVQaWNrZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQud2lkZ2V0LkNhbGVuZGFyVmlldyBnZXRDYWxlbmRhclZpZXcoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0Q2FsZW5kYXJWaWV3U2hvd24oKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREYXlPZk1vbnRoKCk7CkBAIC0zMTA1MCw2ICszMjExOSw3IEBACiAgICAgY3RvciBwdWJsaWMgRWRpdFRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEVkaXRUZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBFZGl0VGV4dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBFZGl0VGV4dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBleHRlbmRTZWxlY3Rpb24oaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2VsZWN0QWxsKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihpbnQsIGludCk7CkBAIC0zMTA4MSw2ICszMjE1MSw3IEBACiAgICAgY3RvciBwdWJsaWMgRXhwYW5kYWJsZUxpc3RWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBFeHBhbmRhYmxlTGlzdFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEV4cGFuZGFibGVMaXN0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBFeHBhbmRhYmxlTGlzdFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gY29sbGFwc2VHcm91cChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBleHBhbmRHcm91cChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBleHBhbmRHcm91cChpbnQsIGJvb2xlYW4pOwpAQCAtMzExNzAsNiArMzIyNDEsNyBAQAogICAgIGN0b3IgcHVibGljIEZyYW1lTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBGcmFtZUxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgRnJhbWVMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgRnJhbWVMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBnZXRDb25zaWRlckdvbmVDaGlsZHJlbldoZW5NZWFzdXJpbmcoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0Rm9yZWdyb3VuZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEZvcmVncm91bmRHcmF2aXR5KCk7CkBAIC0zMTE5NCw2ICszMjI2Niw3IEBACiAgICAgY3RvciBwdWJsaWMgR2FsbGVyeShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgR2FsbGVyeShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgR2FsbGVyeShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBHYWxsZXJ5KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9uRG93bihhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvbkZsaW5nKGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudCwgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50LCBmbG9hdCwgZmxvYXQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkxvbmdQcmVzcyhhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQpOwpAQCAtMzEyMTQsOSArMzIyODcsMTAgQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBHcmlkTGF5b3V0IGV4dGVuZHMgYW5kcm9pZC52aWV3LlZpZXdHcm91cCB7Ci0gICAgY3RvciBwdWJsaWMgR3JpZExheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKLSAgICBjdG9yIHB1YmxpYyBHcmlkTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBHcmlkTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKKyAgICBjdG9yIHB1YmxpYyBHcmlkTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKKyAgICBjdG9yIHB1YmxpYyBHcmlkTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEdyaWRMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRBbGlnbm1lbnRNb2RlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Q29sdW1uQ291bnQoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRPcmllbnRhdGlvbigpOwpAQCAtMzEyNzQsNiArMzIzNDgsNyBAQAogICAgIGN0b3IgcHVibGljIEdyaWRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBHcmlkVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgR3JpZFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgR3JpZFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQud2lkZ2V0Lkxpc3RBZGFwdGVyIGdldEFkYXB0ZXIoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRDb2x1bW5XaWR0aCgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEdyYXZpdHkoKTsKQEAgLTMxMzMxLDYgKzMyNDA2LDcgQEAKICAgICBjdG9yIHB1YmxpYyBIb3Jpem9udGFsU2Nyb2xsVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgSG9yaXpvbnRhbFNjcm9sbFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEhvcml6b250YWxTY3JvbGxWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEhvcml6b250YWxTY3JvbGxWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGFycm93U2Nyb2xsKGludCk7CiAgICAgbWV0aG9kIHByb3RlY3RlZCBpbnQgY29tcHV0ZVNjcm9sbERlbHRhVG9HZXRDaGlsZFJlY3RPblNjcmVlbihhbmRyb2lkLmdyYXBoaWNzLlJlY3QpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBleGVjdXRlS2V5RXZlbnQoYW5kcm9pZC52aWV3LktleUV2ZW50KTsKQEAgLTMxMzUwLDYgKzMyNDI2LDcgQEAKICAgICBjdG9yIHB1YmxpYyBJbWFnZUJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgSW1hZ2VCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEltYWdlQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEltYWdlQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgSW1hZ2VTd2l0Y2hlciBleHRlbmRzIGFuZHJvaWQud2lkZ2V0LlZpZXdTd2l0Y2hlciB7CkBAIC0zMTM2NCw2ICszMjQ0MSw3IEBACiAgICAgY3RvciBwdWJsaWMgSW1hZ2VWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBJbWFnZVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEltYWdlVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBJbWFnZVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJDb2xvckZpbHRlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRBZGp1c3RWaWV3Qm91bmRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldEJhc2VsaW5lQWxpZ25Cb3R0b20oKTsKQEAgLTMxNDE1LDYgKzMyNDkzLDcgQEAKICAgICBjdG9yIHB1YmxpYyBMaW5lYXJMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIExpbmVhckxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgTGluZWFyTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIExpbmVhckxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEJhc2VsaW5lQWxpZ25lZENoaWxkSW5kZXgoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0RGl2aWRlckRyYXdhYmxlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RGl2aWRlclBhZGRpbmcoKTsKQEAgLTMxNTI1LDYgKzMyNjA0LDcgQEAKICAgICBjdG9yIHB1YmxpYyBMaXN0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgTGlzdFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIExpc3RWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIExpc3RWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZEZvb3RlclZpZXcoYW5kcm9pZC52aWV3LlZpZXcsIGphdmEubGFuZy5PYmplY3QsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRGb290ZXJWaWV3KGFuZHJvaWQudmlldy5WaWV3KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkSGVhZGVyVmlldyhhbmRyb2lkLnZpZXcuVmlldywgamF2YS5sYW5nLk9iamVjdCwgYm9vbGVhbik7CkBAIC0zMTU1NCw3ICszMjYzNCw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE92ZXJzY3JvbGxIZWFkZXIoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25BZnRlckhlYWRlclZpZXcoKTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uRnJvbVRvcChpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNtb290aFNjcm9sbEJ5T2Zmc2V0KGludCk7CiAgIH0KIApAQCAtMzE1OTcsNiArMzI2NzYsNyBAQAogICAgIGN0b3IgcHVibGljIE11bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIE11bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIE11bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgTXVsdGlBdXRvQ29tcGxldGVUZXh0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRmlsdGVyaW5nKGphdmEubGFuZy5DaGFyU2VxdWVuY2UsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUb2tlbml6ZXIoYW5kcm9pZC53aWRnZXQuTXVsdGlBdXRvQ29tcGxldGVUZXh0Vmlldy5Ub2tlbml6ZXIpOwogICB9CkBAIC0zMTYxOCw2ICszMjY5OCw3IEBACiAgICAgY3RvciBwdWJsaWMgTnVtYmVyUGlja2VyKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBOdW1iZXJQaWNrZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIE51bWJlclBpY2tlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBOdW1iZXJQaWNrZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXREaXNwbGF5ZWRWYWx1ZXMoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRNYXhWYWx1ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE1pblZhbHVlKCk7CkBAIC0zMTc2Myw2ICszMjg0NCw3IEBACiAgICAgY3RvciBwdWJsaWMgUHJvZ3Jlc3NCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFByb2dyZXNzQmFyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBQcm9ncmVzc0JhcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBQcm9ncmVzc0JhcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXRJbmRldGVybWluYXRlRHJhd2FibGUoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5hbmltYXRpb24uSW50ZXJwb2xhdG9yIGdldEludGVycG9sYXRvcigpOwogICAgIG1ldGhvZCBwdWJsaWMgc3luY2hyb25pemVkIGludCBnZXRNYXgoKTsKQEAgLTMxNzc2LDExICszMjg1OCwxMyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIG9uU2F2ZUluc3RhbmNlU3RhdGUoKTsKICAgICBtZXRob2QgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldEluZGV0ZXJtaW5hdGUoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEluZGV0ZXJtaW5hdGVEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SW5kZXRlcm1pbmF0ZURyYXdhYmxlVGlsZWQoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEludGVycG9sYXRvcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SW50ZXJwb2xhdG9yKGFuZHJvaWQudmlldy5hbmltYXRpb24uSW50ZXJwb2xhdG9yKTsKICAgICBtZXRob2QgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldE1heChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0UHJvZ3Jlc3MoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UHJvZ3Jlc3NEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UHJvZ3Jlc3NEcmF3YWJsZVRpbGVkKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUpOwogICAgIG1ldGhvZCBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0U2Vjb25kYXJ5UHJvZ3Jlc3MoaW50KTsKICAgfQogCkBAIC0zMTc4OCw2ICszMjg3Miw3IEBACiAgICAgY3RvciBwdWJsaWMgUXVpY2tDb250YWN0QmFkZ2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFF1aWNrQ29udGFjdEJhZGdlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBRdWlja0NvbnRhY3RCYWRnZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBRdWlja0NvbnRhY3RCYWRnZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhc3NpZ25Db250YWN0RnJvbUVtYWlsKGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhc3NpZ25Db250YWN0RnJvbUVtYWlsKGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4sIGFuZHJvaWQub3MuQnVuZGxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYXNzaWduQ29udGFjdEZyb21QaG9uZShqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuKTsKQEAgLTMxODA0LDYgKzMyODg5LDcgQEAKICAgICBjdG9yIHB1YmxpYyBSYWRpb0J1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgUmFkaW9CdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFJhZGlvQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFJhZGlvQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgUmFkaW9Hcm91cCBleHRlbmRzIGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dCB7CkBAIC0zMTgyOSw2ICszMjkxNSw3IEBACiAKICAgcHVibGljIGNsYXNzIFJhdGluZ0JhciBleHRlbmRzIGFuZHJvaWQud2lkZ2V0LkFic1NlZWtCYXIgewogICAgIGN0b3IgcHVibGljIFJhdGluZ0JhcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBSYXRpbmdCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBSYXRpbmdCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFJhdGluZ0JhcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TnVtU3RhcnMoKTsKQEAgLTMxODUxLDYgKzMyOTM4LDcgQEAKICAgICBjdG9yIHB1YmxpYyBSZWxhdGl2ZUxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgUmVsYXRpdmVMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFJlbGF0aXZlTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFJlbGF0aXZlTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0R3Jhdml0eSgpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFuLCBpbnQsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRHcmF2aXR5KGludCk7CkBAIC0zMTk5OSw2ICszMzA4Nyw3IEBACiAgICAgY3RvciBwdWJsaWMgU2Nyb2xsVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgU2Nyb2xsVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgU2Nyb2xsVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBTY3JvbGxWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGFycm93U2Nyb2xsKGludCk7CiAgICAgbWV0aG9kIHByb3RlY3RlZCBpbnQgY29tcHV0ZVNjcm9sbERlbHRhVG9HZXRDaGlsZFJlY3RPblNjcmVlbihhbmRyb2lkLmdyYXBoaWNzLlJlY3QpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBleGVjdXRlS2V5RXZlbnQoYW5kcm9pZC52aWV3LktleUV2ZW50KTsKQEAgLTMyMDQzLDYgKzMzMTMyLDggQEAKICAgcHVibGljIGNsYXNzIFNlYXJjaFZpZXcgZXh0ZW5kcyBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQgaW1wbGVtZW50cyBhbmRyb2lkLnZpZXcuQ29sbGFwc2libGVBY3Rpb25WaWV3IHsKICAgICBjdG9yIHB1YmxpYyBTZWFyY2hWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBTZWFyY2hWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKKyAgICBjdG9yIHB1YmxpYyBTZWFyY2hWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFNlYXJjaFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRJbWVPcHRpb25zKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0SW5wdXRUeXBlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TWF4V2lkdGgoKTsKQEAgLTMyMDk3LDYgKzMzMTg4LDcgQEAKICAgICBjdG9yIHB1YmxpYyBTZWVrQmFyKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBTZWVrQmFyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBTZWVrQmFyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFNlZWtCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T25TZWVrQmFyQ2hhbmdlTGlzdGVuZXIoYW5kcm9pZC53aWRnZXQuU2Vla0Jhci5PblNlZWtCYXJDaGFuZ2VMaXN0ZW5lcik7CiAgIH0KIApAQCAtMzIxOTgsNiArMzMyOTAsNyBAQAogICBwdWJsaWMgZGVwcmVjYXRlZCBjbGFzcyBTbGlkaW5nRHJhd2VyIGV4dGVuZHMgYW5kcm9pZC52aWV3LlZpZXdHcm91cCB7CiAgICAgY3RvciBwdWJsaWMgU2xpZGluZ0RyYXdlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgU2xpZGluZ0RyYXdlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBTbGlkaW5nRHJhd2VyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFuaW1hdGVDbG9zZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhbmltYXRlT3BlbigpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhbmltYXRlVG9nZ2xlKCk7CkBAIC0zMjIzMiw2ICszMzMyNSw3IEBACiAgIH0KIAogICBwdWJsaWMgZmluYWwgY2xhc3MgU3BhY2UgZXh0ZW5kcyBhbmRyb2lkLnZpZXcuVmlldyB7CisgICAgY3RvciBwdWJsaWMgU3BhY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBTcGFjZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBTcGFjZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgU3BhY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwpAQCAtMzIyNDMsNiArMzMzMzcsNyBAQAogICAgIGN0b3IgcHVibGljIFNwaW5uZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFNwaW5uZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgU3Bpbm5lcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOworICAgIGN0b3IgcHVibGljIFNwaW5uZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldERyb3BEb3duSG9yaXpvbnRhbE9mZnNldCgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldERyb3BEb3duVmVydGljYWxPZmZzZXQoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREcm9wRG93bldpZHRoKCk7CkBAIC0zMjI3MCwxMiArMzMzNjUsMTQgQEAKICAgICBjdG9yIHB1YmxpYyBTdGFja1ZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFN0YWNrVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgU3RhY2tWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFN0YWNrVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICB9CiAKICAgcHVibGljIGNsYXNzIFN3aXRjaCBleHRlbmRzIGFuZHJvaWQud2lkZ2V0LkNvbXBvdW5kQnV0dG9uIHsKICAgICBjdG9yIHB1YmxpYyBTd2l0Y2goYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFN3aXRjaChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgU3dpdGNoKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFN3aXRjaChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFN3aXRjaE1pbldpZHRoKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0U3dpdGNoUGFkZGluZygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXRUZXh0T2ZmKCk7CkBAIC0zMjMwMSw2ICszMzM5OCw4IEBACiAgIHB1YmxpYyBjbGFzcyBUYWJIb3N0IGV4dGVuZHMgYW5kcm9pZC53aWRnZXQuRnJhbWVMYXlvdXQgaW1wbGVtZW50cyBhbmRyb2lkLnZpZXcuVmlld1RyZWVPYnNlcnZlci5PblRvdWNoTW9kZUNoYW5nZUxpc3RlbmVyIHsKICAgICBjdG9yIHB1YmxpYyBUYWJIb3N0KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBUYWJIb3N0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKKyAgICBjdG9yIHB1YmxpYyBUYWJIb3N0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFRhYkhvc3QoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkVGFiKGFuZHJvaWQud2lkZ2V0LlRhYkhvc3QuVGFiU3BlYyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsZWFyQWxsVGFicygpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEN1cnJlbnRUYWIoKTsKQEAgLTMyMzQwLDYgKzMzNDM5LDcgQEAKICAgICBjdG9yIHB1YmxpYyBUYWJXaWRnZXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFRhYldpZGdldChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgVGFiV2lkZ2V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFRhYldpZGdldChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBkaXNwYXRjaERyYXcoYW5kcm9pZC5ncmFwaGljcy5DYW52YXMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmb2N1c0N1cnJlbnRUYWIoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5WaWV3IGdldENoaWxkVGFiVmlld0F0KGludCk7CkBAIC0zMjQwMiw2ICszMzUwMiw3IEBACiAgICAgY3RvciBwdWJsaWMgVGV4dENsb2NrKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBUZXh0Q2xvY2soYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFRleHRDbG9jayhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBUZXh0Q2xvY2soYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgZ2V0Rm9ybWF0MTJIb3VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldEZvcm1hdDI0SG91cigpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRUaW1lWm9uZSgpOwpAQCAtMzI0MjQsNiArMzM1MjUsNyBAQAogICAgIGN0b3IgcHVibGljIFRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBUZXh0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgVGV4dFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgVGV4dFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkVGV4dENoYW5nZWRMaXN0ZW5lcihhbmRyb2lkLnRleHQuVGV4dFdhdGNoZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBhcHBlbmQoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFwcGVuZChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLCBpbnQsIGludCk7CkBAIC0zMjYzMSw2ICszMzczMyw3IEBACiAgICAgY3RvciBwdWJsaWMgVGltZVBpY2tlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgVGltZVBpY2tlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgVGltZVBpY2tlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBUaW1lUGlja2VyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuSW50ZWdlciBnZXRDdXJyZW50SG91cigpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkludGVnZXIgZ2V0Q3VycmVudE1pbnV0ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpczI0SG91clZpZXcoKTsKQEAgLTMyNjY4LDYgKzMzNzcxLDcgQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBUb2dnbGVCdXR0b24gZXh0ZW5kcyBhbmRyb2lkLndpZGdldC5Db21wb3VuZEJ1dHRvbiB7CisgICAgY3RvciBwdWJsaWMgVG9nZ2xlQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgVG9nZ2xlQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFRvZ2dsZUJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgVG9nZ2xlQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKQEAgLTMyNjgxLDYgKzMzNzg1LDcgQEAKICAgICBjdG9yIHB1YmxpYyBUd29MaW5lTGlzdEl0ZW0oYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFR3b0xpbmVMaXN0SXRlbShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgVHdvTGluZUxpc3RJdGVtKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFR3b0xpbmVMaXN0SXRlbShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXcgZ2V0VGV4dDEoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3IGdldFRleHQyKCk7CiAgIH0KQEAgLTMyNjg5LDYgKzMzNzk0LDcgQEAKICAgICBjdG9yIHB1YmxpYyBWaWRlb1ZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFZpZGVvVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgVmlkZW9WaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFZpZGVvVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRTdWJ0aXRsZVNvdXJjZShqYXZhLmlvLklucHV0U3RyZWFtLCBhbmRyb2lkLm1lZGlhLk1lZGlhRm9ybWF0KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gY2FuUGF1c2UoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gY2FuU2Vla0JhY2t3YXJkKCk7CkBAIC0zMjc2Myw2ICszMzg2OSw3IEBACiAgICAgY3RvciBwdWJsaWMgWm9vbUJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgWm9vbUJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgWm9vbUJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBab29tQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9uTG9uZ0NsaWNrKGFuZHJvaWQudmlldy5WaWV3KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Wm9vbVNwZWVkKGxvbmcpOwogICB9CkBAIC0zMjgwMiw2ICszMzkwOSwyNCBAQAogCiB9CiAKK3BhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255IHsKKworICBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyIGltcGxlbWVudHMgYW5kcm9pZC5vcy5JSW50ZXJmYWNlIHsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25DYWxsRW5kZWQoaW50KSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uQ2FsbEVzdGFibGlzaGVkKCkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbkNhbGxQcm92aWRlckF0dGFjaGVkKGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5JVGhpcmRQYXJ0eUNhbGxQcm92aWRlcikgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblJpbmdpbmdTdGFydGVkKCkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworICB9CisKKyAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBJVGhpcmRQYXJ0eUNhbGxQcm92aWRlciBpbXBsZW1lbnRzIGFuZHJvaWQub3MuSUludGVyZmFjZSB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGhhbmd1cCgpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgaW5jb21pbmdDYWxsQWNjZXB0KCkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBtdXRlKGJvb2xlYW4pIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2VuZER0bWYoY2hhcikgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworICB9CisKK30KKwogcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsIHsKIAogICBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIFByZWRpY2F0ZSB7CkBAIC00MjcyOSwxMSArNDM4NTQsMTEgQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBDb25jdXJyZW50SGFzaE1hcCBleHRlbmRzIGphdmEudXRpbC5BYnN0cmFjdE1hcCBpbXBsZW1lbnRzIGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRNYXAgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIGN0b3IgcHVibGljIENvbmN1cnJlbnRIYXNoTWFwKGludCwgZmxvYXQsIGludCk7Ci0gICAgY3RvciBwdWJsaWMgQ29uY3VycmVudEhhc2hNYXAoaW50LCBmbG9hdCk7Ci0gICAgY3RvciBwdWJsaWMgQ29uY3VycmVudEhhc2hNYXAoaW50KTsKICAgICBjdG9yIHB1YmxpYyBDb25jdXJyZW50SGFzaE1hcCgpOworICAgIGN0b3IgcHVibGljIENvbmN1cnJlbnRIYXNoTWFwKGludCk7CiAgICAgY3RvciBwdWJsaWMgQ29uY3VycmVudEhhc2hNYXAoamF2YS51dGlsLk1hcDw/IGV4dGVuZHMgSywgPyBleHRlbmRzIFY+KTsKKyAgICBjdG9yIHB1YmxpYyBDb25jdXJyZW50SGFzaE1hcChpbnQsIGZsb2F0KTsKKyAgICBjdG9yIHB1YmxpYyBDb25jdXJyZW50SGFzaE1hcChpbnQsIGZsb2F0LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhqYXZhLmxhbmcuT2JqZWN0KTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5FbnVtZXJhdGlvbjxWPiBlbGVtZW50cygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLlNldDxqYXZhLnV0aWwuTWFwLkVudHJ5PEssIFY+PiBlbnRyeVNldCgpOwpAQCAtNDI3NDQsNiArNDM4NjksMzUgQEAKICAgICBtZXRob2QgcHVibGljIFYgcmVwbGFjZShLLCBWKTsKICAgfQogCisgIHB1YmxpYyBjbGFzcyBDb25jdXJyZW50TGlua2VkRGVxdWUgZXh0ZW5kcyBqYXZhLnV0aWwuQWJzdHJhY3RDb2xsZWN0aW9uIGltcGxlbWVudHMgamF2YS51dGlsLkRlcXVlIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKKyAgICBjdG9yIHB1YmxpYyBDb25jdXJyZW50TGlua2VkRGVxdWUoKTsKKyAgICBjdG9yIHB1YmxpYyBDb25jdXJyZW50TGlua2VkRGVxdWUoamF2YS51dGlsLkNvbGxlY3Rpb248PyBleHRlbmRzIEU+KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkRmlyc3QoRSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZExhc3QoRSk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuSXRlcmF0b3I8RT4gZGVzY2VuZGluZ0l0ZXJhdG9yKCk7CisgICAgbWV0aG9kIHB1YmxpYyBFIGVsZW1lbnQoKTsKKyAgICBtZXRob2QgcHVibGljIEUgZ2V0Rmlyc3QoKTsKKyAgICBtZXRob2QgcHVibGljIEUgZ2V0TGFzdCgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkl0ZXJhdG9yPEU+IGl0ZXJhdG9yKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9mZmVyKEUpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvZmZlckZpcnN0KEUpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvZmZlckxhc3QoRSk7CisgICAgbWV0aG9kIHB1YmxpYyBFIHBlZWsoKTsKKyAgICBtZXRob2QgcHVibGljIEUgcGVla0ZpcnN0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBFIHBlZWtMYXN0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBFIHBvbGwoKTsKKyAgICBtZXRob2QgcHVibGljIEUgcG9sbEZpcnN0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBFIHBvbGxMYXN0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBFIHBvcCgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBwdXNoKEUpOworICAgIG1ldGhvZCBwdWJsaWMgRSByZW1vdmUoKTsKKyAgICBtZXRob2QgcHVibGljIEUgcmVtb3ZlRmlyc3QoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVtb3ZlRmlyc3RPY2N1cnJlbmNlKGphdmEubGFuZy5PYmplY3QpOworICAgIG1ldGhvZCBwdWJsaWMgRSByZW1vdmVMYXN0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlbW92ZUxhc3RPY2N1cnJlbmNlKGphdmEubGFuZy5PYmplY3QpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IHNpemUoKTsKKyAgfQorCiAgIHB1YmxpYyBjbGFzcyBDb25jdXJyZW50TGlua2VkUXVldWUgZXh0ZW5kcyBqYXZhLnV0aWwuQWJzdHJhY3RRdWV1ZSBpbXBsZW1lbnRzIGphdmEudXRpbC5RdWV1ZSBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAgICAgY3RvciBwdWJsaWMgQ29uY3VycmVudExpbmtlZFF1ZXVlKCk7CiAgICAgY3RvciBwdWJsaWMgQ29uY3VycmVudExpbmtlZFF1ZXVlKGphdmEudXRpbC5Db2xsZWN0aW9uPD8gZXh0ZW5kcyBFPik7CkBAIC00Mjk4NCw2ICs0NDEzOCw5NCBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSB1bmNvbmZpZ3VyYWJsZVNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZShqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UpOwogICB9CiAKKyAgcHVibGljIGNsYXNzIEZvcmtKb2luUG9vbCBleHRlbmRzIGphdmEudXRpbC5jb25jdXJyZW50LkFic3RyYWN0RXhlY3V0b3JTZXJ2aWNlIHsKKyAgICBjdG9yIHB1YmxpYyBGb3JrSm9pblBvb2woKTsKKyAgICBjdG9yIHB1YmxpYyBGb3JrSm9pblBvb2woaW50KTsKKyAgICBjdG9yIHB1YmxpYyBGb3JrSm9pblBvb2woaW50LCBqYXZhLnV0aWwuY29uY3VycmVudC5Gb3JrSm9pblBvb2wuRm9ya0pvaW5Xb3JrZXJUaHJlYWRGYWN0b3J5LCBqYXZhLmxhbmcuVGhyZWFkLlVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlciwgYm9vbGVhbik7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGF3YWl0UXVpZXNjZW5jZShsb25nLCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGF3YWl0VGVybWluYXRpb24obG9uZywgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQpIHRocm93cyBqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb247CisgICAgbWV0aG9kIHByb3RlY3RlZCBpbnQgZHJhaW5UYXNrc1RvKGphdmEudXRpbC5Db2xsZWN0aW9uPD8gc3VwZXIgamF2YS51dGlsLmNvbmN1cnJlbnQuRm9ya0pvaW5UYXNrPD8+Pik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGV4ZWN1dGUoamF2YS51dGlsLmNvbmN1cnJlbnQuRm9ya0pvaW5UYXNrPD8+KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZXhlY3V0ZShqYXZhLmxhbmcuUnVubmFibGUpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEFjdGl2ZVRocmVhZENvdW50KCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldEFzeW5jTW9kZSgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLmNvbmN1cnJlbnQuRm9ya0pvaW5Qb29sLkZvcmtKb2luV29ya2VyVGhyZWFkRmFjdG9yeSBnZXRGYWN0b3J5KCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0UGFyYWxsZWxpc20oKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRQb29sU2l6ZSgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFF1ZXVlZFN1Ym1pc3Npb25Db3VudCgpOworICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRRdWV1ZWRUYXNrQ291bnQoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRSdW5uaW5nVGhyZWFkQ291bnQoKTsKKyAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0U3RlYWxDb3VudCgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlRocmVhZC5VbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIgZ2V0VW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc1F1ZXVlZFN1Ym1pc3Npb25zKCk7CisgICAgbWV0aG9kIHB1YmxpYyBUIGludm9rZShqYXZhLnV0aWwuY29uY3VycmVudC5Gb3JrSm9pblRhc2s8VD4pOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1F1aWVzY2VudCgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1NodXRkb3duKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzVGVybWluYXRlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1Rlcm1pbmF0aW5nKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBtYW5hZ2VkQmxvY2soamF2YS51dGlsLmNvbmN1cnJlbnQuRm9ya0pvaW5Qb29sLk1hbmFnZWRCbG9ja2VyKSB0aHJvd3MgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uOworICAgIG1ldGhvZCBwcm90ZWN0ZWQgamF2YS51dGlsLmNvbmN1cnJlbnQuRm9ya0pvaW5UYXNrPD8+IHBvbGxTdWJtaXNzaW9uKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNodXRkb3duKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxqYXZhLmxhbmcuUnVubmFibGU+IHNodXRkb3duTm93KCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuY29uY3VycmVudC5Gb3JrSm9pblRhc2s8VD4gc3VibWl0KGphdmEudXRpbC5jb25jdXJyZW50LkZvcmtKb2luVGFzazxUPik7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLnV0aWwuY29uY3VycmVudC5Gb3JrSm9pblBvb2wuRm9ya0pvaW5Xb3JrZXJUaHJlYWRGYWN0b3J5IGRlZmF1bHRGb3JrSm9pbldvcmtlclRocmVhZEZhY3Rvcnk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGludGVyZmFjZSBGb3JrSm9pblBvb2wuRm9ya0pvaW5Xb3JrZXJUaHJlYWRGYWN0b3J5IHsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEudXRpbC5jb25jdXJyZW50LkZvcmtKb2luV29ya2VyVGhyZWFkIG5ld1RocmVhZChqYXZhLnV0aWwuY29uY3VycmVudC5Gb3JrSm9pblBvb2wpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBpbnRlcmZhY2UgRm9ya0pvaW5Qb29sLk1hbmFnZWRCbG9ja2VyIHsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gYmxvY2soKSB0aHJvd3MgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1JlbGVhc2FibGUoKTsKKyAgfQorCisgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGb3JrSm9pblRhc2sgaW1wbGVtZW50cyBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmUgamF2YS5pby5TZXJpYWxpemFibGUgeworICAgIGN0b3IgcHVibGljIEZvcmtKb2luVGFzaygpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5jb25jdXJyZW50LkZvcmtKb2luVGFzazw/PiBhZGFwdChqYXZhLmxhbmcuUnVubmFibGUpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5jb25jdXJyZW50LkZvcmtKb2luVGFzazxUPiBhZGFwdChqYXZhLmxhbmcuUnVubmFibGUsIFQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5jb25jdXJyZW50LkZvcmtKb2luVGFzazxUPiBhZGFwdChqYXZhLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZTw/IGV4dGVuZHMgVD4pOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBjYW5jZWwoYm9vbGVhbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvbXBsZXRlKFYpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb21wbGV0ZUV4Y2VwdGlvbmFsbHkoamF2YS5sYW5nLlRocm93YWJsZSk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGV4ZWMoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEudXRpbC5jb25jdXJyZW50LkZvcmtKb2luVGFzazxWPiBmb3JrKCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBWIGdldCgpIHRocm93cyBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRpb25FeGNlcHRpb24sIGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIFYgZ2V0KGxvbmcsIGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0KSB0aHJvd3MgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0aW9uRXhjZXB0aW9uLCBqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb24sIGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuVGhyb3dhYmxlIGdldEV4Y2VwdGlvbigpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5jb25jdXJyZW50LkZvcmtKb2luUG9vbCBnZXRQb29sKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdldFF1ZXVlZFRhc2tDb3VudCgpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgViBnZXRSYXdSZXN1bHQoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBpbnQgZ2V0U3VycGx1c1F1ZXVlZFRhc2tDb3VudCgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgaGVscFF1aWVzY2UoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGluRm9ya0pvaW5Qb29sKCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBWIGludm9rZSgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgaW52b2tlQWxsKGphdmEudXRpbC5jb25jdXJyZW50LkZvcmtKb2luVGFzazw/PiwgamF2YS51dGlsLmNvbmN1cnJlbnQuRm9ya0pvaW5UYXNrPD8+KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGludm9rZUFsbChqYXZhLnV0aWwuY29uY3VycmVudC5Gb3JrSm9pblRhc2s8Pz4uLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5Db2xsZWN0aW9uPFQ+IGludm9rZUFsbChqYXZhLnV0aWwuQ29sbGVjdGlvbjxUPik7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzQ2FuY2VsbGVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzQ29tcGxldGVkQWJub3JtYWxseSgpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0NvbXBsZXRlZE5vcm1hbGx5KCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzRG9uZSgpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgViBqb2luKCk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBzdGF0aWMgamF2YS51dGlsLmNvbmN1cnJlbnQuRm9ya0pvaW5UYXNrPD8+IHBlZWtOZXh0TG9jYWxUYXNrKCk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBzdGF0aWMgamF2YS51dGlsLmNvbmN1cnJlbnQuRm9ya0pvaW5UYXNrPD8+IHBvbGxOZXh0TG9jYWxUYXNrKCk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBzdGF0aWMgamF2YS51dGlsLmNvbmN1cnJlbnQuRm9ya0pvaW5UYXNrPD8+IHBvbGxUYXNrKCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHF1aWV0bHlJbnZva2UoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgcXVpZXRseUpvaW4oKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgcmVpbml0aWFsaXplKCk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHNldFJhd1Jlc3VsdChWKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gdHJ5VW5mb3JrKCk7CisgIH0KKworICBwdWJsaWMgY2xhc3MgRm9ya0pvaW5Xb3JrZXJUaHJlYWQgZXh0ZW5kcyBqYXZhLmxhbmcuVGhyZWFkIHsKKyAgICBjdG9yIHByb3RlY3RlZCBGb3JrSm9pbldvcmtlclRocmVhZChqYXZhLnV0aWwuY29uY3VycmVudC5Gb3JrSm9pblBvb2wpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLmNvbmN1cnJlbnQuRm9ya0pvaW5Qb29sIGdldFBvb2woKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRQb29sSW5kZXgoKTsKKyAgICBtZXRob2QgcHJvdGVjdGVkIHZvaWQgb25TdGFydCgpOworICAgIG1ldGhvZCBwcm90ZWN0ZWQgdm9pZCBvblRlcm1pbmF0aW9uKGphdmEubGFuZy5UaHJvd2FibGUpOworICB9CisKICAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBGdXR1cmUgewogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBjYW5jZWwoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBWIGdldCgpIHRocm93cyBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRpb25FeGNlcHRpb24sIGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKQEAgLTQzMDY4LDYgKzQ0MzEwLDUyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBFIHRha2UoKSB0aHJvd3MgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uOwogICB9CiAKKyAgcHVibGljIGNsYXNzIExpbmtlZFRyYW5zZmVyUXVldWUgZXh0ZW5kcyBqYXZhLnV0aWwuQWJzdHJhY3RRdWV1ZSBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIGphdmEudXRpbC5jb25jdXJyZW50LlRyYW5zZmVyUXVldWUgeworICAgIGN0b3IgcHVibGljIExpbmtlZFRyYW5zZmVyUXVldWUoKTsKKyAgICBjdG9yIHB1YmxpYyBMaW5rZWRUcmFuc2ZlclF1ZXVlKGphdmEudXRpbC5Db2xsZWN0aW9uPD8gZXh0ZW5kcyBFPik7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZHJhaW5UbyhqYXZhLnV0aWwuQ29sbGVjdGlvbjw/IHN1cGVyIEU+KTsKKyAgICBtZXRob2QgcHVibGljIGludCBkcmFpblRvKGphdmEudXRpbC5Db2xsZWN0aW9uPD8gc3VwZXIgRT4sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0V2FpdGluZ0NvbnN1bWVyQ291bnQoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzV2FpdGluZ0NvbnN1bWVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuSXRlcmF0b3I8RT4gaXRlcmF0b3IoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb2ZmZXIoRSwgbG9uZywgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvZmZlcihFKTsKKyAgICBtZXRob2QgcHVibGljIEUgcGVlaygpOworICAgIG1ldGhvZCBwdWJsaWMgRSBwb2xsKGxvbmcsIGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0KSB0aHJvd3MgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgRSBwb2xsKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHB1dChFKTsKKyAgICBtZXRob2QgcHVibGljIGludCByZW1haW5pbmdDYXBhY2l0eSgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IHNpemUoKTsKKyAgICBtZXRob2QgcHVibGljIEUgdGFrZSgpIHRocm93cyBqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHRyYW5zZmVyKEUpIHRocm93cyBqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHRyeVRyYW5zZmVyKEUpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiB0cnlUcmFuc2ZlcihFLCBsb25nLCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdCkgdGhyb3dzIGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKKyAgfQorCisgIHB1YmxpYyBjbGFzcyBQaGFzZXIgeworICAgIGN0b3IgcHVibGljIFBoYXNlcigpOworICAgIGN0b3IgcHVibGljIFBoYXNlcihpbnQpOworICAgIGN0b3IgcHVibGljIFBoYXNlcihqYXZhLnV0aWwuY29uY3VycmVudC5QaGFzZXIpOworICAgIGN0b3IgcHVibGljIFBoYXNlcihqYXZhLnV0aWwuY29uY3VycmVudC5QaGFzZXIsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgYXJyaXZlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgYXJyaXZlQW5kQXdhaXRBZHZhbmNlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgYXJyaXZlQW5kRGVyZWdpc3RlcigpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGF3YWl0QWR2YW5jZShpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGF3YWl0QWR2YW5jZUludGVycnVwdGlibHkoaW50KSB0aHJvd3MgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGF3YWl0QWR2YW5jZUludGVycnVwdGlibHkoaW50LCBsb25nLCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdCkgdGhyb3dzIGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGludCBidWxrUmVnaXN0ZXIoaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZm9yY2VUZXJtaW5hdGlvbigpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEFycml2ZWRQYXJ0aWVzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuY29uY3VycmVudC5QaGFzZXIgZ2V0UGFyZW50KCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UGhhc2UoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRSZWdpc3RlcmVkUGFydGllcygpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLmNvbmN1cnJlbnQuUGhhc2VyIGdldFJvb3QoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRVbmFycml2ZWRQYXJ0aWVzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzVGVybWluYXRlZCgpOworICAgIG1ldGhvZCBwcm90ZWN0ZWQgYm9vbGVhbiBvbkFkdmFuY2UoaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IHJlZ2lzdGVyKCk7CisgIH0KKwogICBwdWJsaWMgY2xhc3MgUHJpb3JpdHlCbG9ja2luZ1F1ZXVlIGV4dGVuZHMgamF2YS51dGlsLkFic3RyYWN0UXVldWUgaW1wbGVtZW50cyBqYXZhLnV0aWwuY29uY3VycmVudC5CbG9ja2luZ1F1ZXVlIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKICAgICBjdG9yIHB1YmxpYyBQcmlvcml0eUJsb2NraW5nUXVldWUoKTsKICAgICBjdG9yIHB1YmxpYyBQcmlvcml0eUJsb2NraW5nUXVldWUoaW50KTsKQEAgLTQzMDg4LDYgKzQ0Mzc2LDIyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBFIHRha2UoKSB0aHJvd3MgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uOwogICB9CiAKKyAgcHVibGljIGFic3RyYWN0IGNsYXNzIFJlY3Vyc2l2ZUFjdGlvbiBleHRlbmRzIGphdmEudXRpbC5jb25jdXJyZW50LkZvcmtKb2luVGFzayB7CisgICAgY3RvciBwdWJsaWMgUmVjdXJzaXZlQWN0aW9uKCk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGNvbXB1dGUoKTsKKyAgICBtZXRob2QgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gZXhlYygpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlZvaWQgZ2V0UmF3UmVzdWx0KCk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldFJhd1Jlc3VsdChqYXZhLmxhbmcuVm9pZCk7CisgIH0KKworICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVjdXJzaXZlVGFzayBleHRlbmRzIGphdmEudXRpbC5jb25jdXJyZW50LkZvcmtKb2luVGFzayB7CisgICAgY3RvciBwdWJsaWMgUmVjdXJzaXZlVGFzaygpOworICAgIG1ldGhvZCBwcm90ZWN0ZWQgYWJzdHJhY3QgViBjb21wdXRlKCk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIGV4ZWMoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIFYgZ2V0UmF3UmVzdWx0KCk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBmaW5hbCB2b2lkIHNldFJhd1Jlc3VsdChWKTsKKyAgfQorCiAgIHB1YmxpYyBjbGFzcyBSZWplY3RlZEV4ZWN1dGlvbkV4Y2VwdGlvbiBleHRlbmRzIGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uIHsKICAgICBjdG9yIHB1YmxpYyBSZWplY3RlZEV4ZWN1dGlvbkV4Y2VwdGlvbigpOwogICAgIGN0b3IgcHVibGljIFJlamVjdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcpOwpAQCAtNDMxMjYsMTIgKzQ0NDMwLDE0IEBACiAgICAgbWV0aG9kIHByb3RlY3RlZCBqYXZhLnV0aWwuY29uY3VycmVudC5SdW5uYWJsZVNjaGVkdWxlZEZ1dHVyZTxWPiBkZWNvcmF0ZVRhc2soamF2YS51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGU8Vj4sIGphdmEudXRpbC5jb25jdXJyZW50LlJ1bm5hYmxlU2NoZWR1bGVkRnV0dXJlPFY+KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0Q29udGludWVFeGlzdGluZ1BlcmlvZGljVGFza3NBZnRlclNodXRkb3duUG9saWN5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldEV4ZWN1dGVFeGlzdGluZ0RlbGF5ZWRUYXNrc0FmdGVyU2h1dGRvd25Qb2xpY3koKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0UmVtb3ZlT25DYW5jZWxQb2xpY3koKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEZ1dHVyZTw/PiBzY2hlZHVsZShqYXZhLmxhbmcuUnVubmFibGUsIGxvbmcsIGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0KTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEZ1dHVyZTxWPiBzY2hlZHVsZShqYXZhLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZTxWPiwgbG9uZywgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRnV0dXJlPD8+IHNjaGVkdWxlQXRGaXhlZFJhdGUoamF2YS5sYW5nLlJ1bm5hYmxlLCBsb25nLCBsb25nLCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRGdXR1cmU8Pz4gc2NoZWR1bGVXaXRoRml4ZWREZWxheShqYXZhLmxhbmcuUnVubmFibGUsIGxvbmcsIGxvbmcsIGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29udGludWVFeGlzdGluZ1BlcmlvZGljVGFza3NBZnRlclNodXRkb3duUG9saWN5KGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRFeGVjdXRlRXhpc3RpbmdEZWxheWVkVGFza3NBZnRlclNodXRkb3duUG9saWN5KGJvb2xlYW4pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRSZW1vdmVPbkNhbmNlbFBvbGljeShib29sZWFuKTsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBTZW1hcGhvcmUgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CkBAIC00MzE3Nyw2ICs0NDQ4MywxNSBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlRocmVhZCBuZXdUaHJlYWQoamF2YS5sYW5nLlJ1bm5hYmxlKTsKICAgfQogCisgIHB1YmxpYyBjbGFzcyBUaHJlYWRMb2NhbFJhbmRvbSBleHRlbmRzIGphdmEudXRpbC5SYW5kb20geworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZExvY2FsUmFuZG9tIGN1cnJlbnQoKTsKKyAgICBtZXRob2QgcHVibGljIGRvdWJsZSBuZXh0RG91YmxlKGRvdWJsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBkb3VibGUgbmV4dERvdWJsZShkb3VibGUsIGRvdWJsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgbmV4dEludChpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBsb25nIG5leHRMb25nKGxvbmcpOworICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBuZXh0TG9uZyhsb25nLCBsb25nKTsKKyAgfQorCiAgIHB1YmxpYyBjbGFzcyBUaHJlYWRQb29sRXhlY3V0b3IgZXh0ZW5kcyBqYXZhLnV0aWwuY29uY3VycmVudC5BYnN0cmFjdEV4ZWN1dG9yU2VydmljZSB7CiAgICAgY3RvciBwdWJsaWMgVGhyZWFkUG9vbEV4ZWN1dG9yKGludCwgaW50LCBsb25nLCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdCwgamF2YS51dGlsLmNvbmN1cnJlbnQuQmxvY2tpbmdRdWV1ZTxqYXZhLmxhbmcuUnVubmFibGU+KTsKICAgICBjdG9yIHB1YmxpYyBUaHJlYWRQb29sRXhlY3V0b3IoaW50LCBpbnQsIGxvbmcsIGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0LCBqYXZhLnV0aWwuY29uY3VycmVudC5CbG9ja2luZ1F1ZXVlPGphdmEubGFuZy5SdW5uYWJsZT4sIGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZEZhY3RvcnkpOwpAQCAtNDMyNjQsNiArNDQ1NzksMTQgQEAKICAgICBjdG9yIHB1YmxpYyBUaW1lb3V0RXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcpOwogICB9CiAKKyAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBUcmFuc2ZlclF1ZXVlIGltcGxlbWVudHMgamF2YS51dGlsLmNvbmN1cnJlbnQuQmxvY2tpbmdRdWV1ZSB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0V2FpdGluZ0NvbnN1bWVyQ291bnQoKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFzV2FpdGluZ0NvbnN1bWVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHRyYW5zZmVyKEUpIHRocm93cyBqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHRyeVRyYW5zZmVyKEUpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiB0cnlUcmFuc2ZlcihFLCBsb25nLCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdCkgdGhyb3dzIGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKKyAgfQorCiB9CiAKIHBhY2thZ2UgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljIHsKQEAgLTQzNTE5LDYgKzQ0ODQyLDcgQEAKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGludCBnZXRXYWl0UXVldWVMZW5ndGgoamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIuQ29uZGl0aW9uT2JqZWN0KTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEudXRpbC5Db2xsZWN0aW9uPGphdmEubGFuZy5UaHJlYWQ+IGdldFdhaXRpbmdUaHJlYWRzKGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLkNvbmRpdGlvbk9iamVjdCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhc0NvbnRlbmRlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNRdWV1ZWRQcmVkZWNlc3NvcnMoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFzUXVldWVkVGhyZWFkcygpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNXYWl0ZXJzKGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkFic3RyYWN0UXVldWVkU3luY2hyb25pemVyLkNvbmRpdGlvbk9iamVjdCk7CiAgICAgbWV0aG9kIHByb3RlY3RlZCBib29sZWFuIGlzSGVsZEV4Y2x1c2l2ZWx5KCk7CmRpZmYgLS1naXQgYS9jbWRzL2Jvb3RhbmltYXRpb24vQm9vdEFuaW1hdGlvbi5jcHAgYi9jbWRzL2Jvb3RhbmltYXRpb24vQm9vdEFuaW1hdGlvbi5jcHAKaW5kZXggMWEyYWI4MS4uMTI1YmVhNiAxMDA2NDQKLS0tIGEvY21kcy9ib290YW5pbWF0aW9uL0Jvb3RBbmltYXRpb24uY3BwCisrKyBiL2NtZHMvYm9vdGFuaW1hdGlvbi9Cb290QW5pbWF0aW9uLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZS0+bmFtZSk7CiAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlLT5uYW1lKTsKIAotICAgIHN3aXRjaCAoYml0bWFwLmdldENvbmZpZygpKSB7CisgICAgc3dpdGNoIChiaXRtYXAuY29uZmlnKCkpIHsKICAgICAgICAgY2FzZSBTa0JpdG1hcDo6a0E4X0NvbmZpZzoKICAgICAgICAgICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9BTFBIQSwgdywgaCwgMCwgR0xfQUxQSEEsCiAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIHApOwpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgaWYgKHR3IDwgdykgdHcgPDw9IDE7CiAgICAgaWYgKHRoIDwgaCkgdGggPDw9IDE7CiAKLSAgICBzd2l0Y2ggKGJpdG1hcC5nZXRDb25maWcoKSkgeworICAgIHN3aXRjaCAoYml0bWFwLmNvbmZpZygpKSB7CiAgICAgICAgIGNhc2UgU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnOgogICAgICAgICAgICAgaWYgKHR3ICE9IHcgfHwgdGggIT0gaCkgewogICAgICAgICAgICAgICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCB0dywgdGgsIDAsIEdMX1JHQkEsCmRpZmYgLS1naXQgYS9jbWRzL2NvbnRlbnQvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL2NvbnRlbnQvQ29udGVudC5qYXZhIGIvY21kcy9jb250ZW50L3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9jb250ZW50L0NvbnRlbnQuamF2YQppbmRleCBlNjZiZGY0Li40NjZkY2Q0IDEwMDY0NAotLS0gYS9jbWRzL2NvbnRlbnQvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL2NvbnRlbnQvQ29udGVudC5qYXZhCisrKyBiL2NtZHMvY29udGVudC9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvY29udGVudC9Db250ZW50LmphdmEKQEAgLTQ5OCw3ICs0OTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVmFsdWUgPSBTdHJpbmcudmFsdWVPZihjdXJzb3IuZ2V0RmxvYXQoY29sdW1uSW5kZXgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEN1cnNvci5GSUVMRF9UWVBFX0lOVEVHRVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5WYWx1ZSA9IFN0cmluZy52YWx1ZU9mKGN1cnNvci5nZXRJbnQoY29sdW1uSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblZhbHVlID0gU3RyaW5nLnZhbHVlT2YoY3Vyc29yLmdldExvbmcoY29sdW1uSW5kZXgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEN1cnNvci5GSUVMRF9UWVBFX1NUUklORzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblZhbHVlID0gY3Vyc29yLmdldFN0cmluZyhjb2x1bW5JbmRleCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50QXV0aGVudGljYXRvckFjdGl2aXR5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50QXV0aGVudGljYXRvckFjdGl2aXR5LmphdmEKaW5kZXggNmE1NWRkZi4uZjkyODRlNjcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0FjY291bnRBdXRoZW50aWNhdG9yQWN0aXZpdHkuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50QXV0aGVudGljYXRvckFjdGl2aXR5LmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5hY2NvdW50czsKIAogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJGdXR1cmUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyRnV0dXJlLmphdmEKaW5kZXggYTFhYjAwYy4uYWYwMGEwOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJGdXR1cmUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckZ1dHVyZS5qYXZhCkBAIC0xNSwxMCArMTUsNyBAQAogICovCiBwYWNrYWdlIGFuZHJvaWQuYWNjb3VudHM7CiAKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmU7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9HcmFudENyZWRlbnRpYWxzUGVybWlzc2lvbkFjdGl2aXR5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9HcmFudENyZWRlbnRpYWxzUGVybWlzc2lvbkFjdGl2aXR5LmphdmEKaW5kZXggOGIwMWM2YS4uMTJiMmI5YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYWNjb3VudHMvR3JhbnRDcmVkZW50aWFsc1Blcm1pc3Npb25BY3Rpdml0eS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0dyYW50Q3JlZGVudGlhbHNQZXJtaXNzaW9uQWN0aXZpdHkuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogcGFja2FnZSBhbmRyb2lkLmFjY291bnRzOwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlZ2lzdGVyZWRTZXJ2aWNlc0NhY2hlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwpAQCAtMzAsNyArMjksNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LkF1dGhlbnRpY2F0b3I7CiAKIC8qKgogICogQGhpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvckluZmxhdGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3JJbmZsYXRlci5qYXZhCmluZGV4IGQ3NTNlMzIuLjIwMjM2YWEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvckluZmxhdGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9ySW5mbGF0ZXIuamF2YQpAQCAtMjE1LDcgKzIxNSw3IEBACiAgICAgICAgICAgICAgICAgKHRvVHlwZSA8PSBUeXBlZFZhbHVlLlRZUEVfTEFTVF9DT0xPUl9JTlQpKSkgewogICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciBjb2xvcnM6IGlnbm9yZSB2YWx1ZVR5cGUgYW5kIGdldCBpbnRzCiAgICAgICAgICAgICBnZXRGbG9hdHMgPSBmYWxzZTsKLSAgICAgICAgICAgIGFuaW0uc2V0RXZhbHVhdG9yKG5ldyBBcmdiRXZhbHVhdG9yKCkpOworICAgICAgICAgICAgZXZhbHVhdG9yID0gQXJnYkV2YWx1YXRvci5nZXRJbnN0YW5jZSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGdldEZsb2F0cykgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL0FyZ2JFdmFsdWF0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9BcmdiRXZhbHVhdG9yLmphdmEKaW5kZXggNzE3YTNkOS4uZWQwNzE5NSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL0FyZ2JFdmFsdWF0b3IuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vQXJnYkV2YWx1YXRvci5qYXZhCkBAIC0yMSw2ICsyMSwxOSBAQAogICogdmFsdWVzIHRoYXQgcmVwcmVzZW50IEFSR0IgY29sb3JzLgogICovCiBwdWJsaWMgY2xhc3MgQXJnYkV2YWx1YXRvciBpbXBsZW1lbnRzIFR5cGVFdmFsdWF0b3IgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEFyZ2JFdmFsdWF0b3Igc0luc3RhbmNlID0gbmV3IEFyZ2JFdmFsdWF0b3IoKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgPGNvZGU+QXJnYkV2YWx1YXRvcjwvY29kZT4gdGhhdCBtYXkgYmUgdXNlZCBpbgorICAgICAqIHtAbGluayBWYWx1ZUFuaW1hdG9yI3NldEV2YWx1YXRvcihUeXBlRXZhbHVhdG9yKX0uIFRoZSBzYW1lIGluc3RhbmNlIG1heQorICAgICAqIGJlIHVzZWQgaW4gbXVsdGlwbGUgPGNvZGU+QW5pbWF0b3I8L2NvZGU+cyBiZWNhdXNlIGl0IGhvbGRzIG5vIHN0YXRlLgorICAgICAqIEByZXR1cm4gQW4gaW5zdGFuY2Ugb2YgPGNvZGU+QXJnYkV2YWx1dG9yPC9jb2RlPi4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBBcmdiRXZhbHVhdG9yIGdldEluc3RhbmNlKCkgeworICAgICAgICByZXR1cm4gc0luc3RhbmNlOworICAgIH0KIAogICAgIC8qKgogICAgICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2FsY3VsYXRlZCBpbi1iZXR3ZWVuIHZhbHVlIGZvciBhIGNvbG9yCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vRmxvYXRBcnJheUV2YWx1YXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL0Zsb2F0QXJyYXlFdmFsdWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWUxMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL0Zsb2F0QXJyYXlFdmFsdWF0b3IuamF2YQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLmFuaW1hdGlvbjsKKworLyoqCisgKiBUaGlzIGV2YWx1YXRvciBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHR5cGUgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIDxjb2RlPmZsb2F0W108L2NvZGU+IHZhbHVlcy4KKyAqIEVhY2ggaW5kZXggaW50byB0aGUgYXJyYXkgaXMgdHJlYXRlZCBhcyBhIHNlcGFyYXRlIHZhbHVlIHRvIGludGVycG9sYXRlLiBGb3IgZXhhbXBsZSwKKyAqIGV2YWx1YXRpbmcgPGNvZGU+ezEwMCwgMjAwfTwvY29kZT4gYW5kIDxjb2RlPnszMDAsIDQwMH08L2NvZGU+IHdpbGwgaW50ZXJwb2xhdGUgdGhlIHZhbHVlIGF0CisgKiB0aGUgZmlyc3QgaW5kZXggYmV0d2VlbiAxMDAgYW5kIDMwMCBhbmQgdGhlIHZhbHVlIGF0IHRoZSBzZWNvbmQgaW5kZXggdmFsdWUgYmV0d2VlbiAyMDAgYW5kIDQwMC4KKyAqLworcHVibGljIGNsYXNzIEZsb2F0QXJyYXlFdmFsdWF0b3IgaW1wbGVtZW50cyBUeXBlRXZhbHVhdG9yPGZsb2F0W10+IHsKKworICAgIHByaXZhdGUgZmxvYXRbXSBtQXJyYXk7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBGbG9hdEFycmF5RXZhbHVhdG9yIHRoYXQgZG9lcyBub3QgcmV1c2UgdGhlIGFuaW1hdGVkIHZhbHVlLiBDYXJlIG11c3QgYmUgdGFrZW4KKyAgICAgKiB3aGVuIHVzaW5nIHRoaXMgb3B0aW9uIGJlY2F1c2Ugb24gZXZlcnkgZXZhbHVhdGlvbiBhIG5ldyA8Y29kZT5mbG9hdFtdPC9jb2RlPiB3aWxsIGJlCisgICAgICogYWxsb2NhdGVkLgorICAgICAqCisgICAgICogQHNlZSAjRmxvYXRBcnJheUV2YWx1YXRvcihmbG9hdFtdKQorICAgICAqLworICAgIHB1YmxpYyBGbG9hdEFycmF5RXZhbHVhdG9yKCkgeworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIEZsb2F0QXJyYXlFdmFsdWF0b3IgdGhhdCByZXVzZXMgPGNvZGU+cmV1c2VBcnJheTwvY29kZT4gZm9yIGV2ZXJ5IGV2YWx1YXRlKCkgY2FsbC4KKyAgICAgKiBDYXV0aW9uIG11c3QgYmUgdGFrZW4gdG8gZW5zdXJlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIGZyb20KKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5hbmltYXRpb24uVmFsdWVBbmltYXRvciNnZXRBbmltYXRlZFZhbHVlKCl9IGlzIG5vdCBjYWNoZWQsIG1vZGlmaWVkLCBvcgorICAgICAqIHVzZWQgYWNyb3NzIHRocmVhZHMuIFRoZSB2YWx1ZSB3aWxsIGJlIG1vZGlmaWVkIG9uIGVhY2ggPGNvZGU+ZXZhbHVhdGUoKTwvY29kZT4gY2FsbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSByZXVzZUFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkgYW5kIHJldHVybiBmcm9tIDxjb2RlPmV2YWx1YXRlPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwdWJsaWMgRmxvYXRBcnJheUV2YWx1YXRvcihmbG9hdFtdIHJldXNlQXJyYXkpIHsKKyAgICAgICAgbUFycmF5ID0gcmV1c2VBcnJheTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbnRlcnBvbGF0ZXMgdGhlIHZhbHVlIGF0IGVhY2ggaW5kZXggYnkgdGhlIGZyYWN0aW9uLiBJZgorICAgICAqIHtAbGluayAjRmxvYXRBcnJheUV2YWx1YXRvcihmbG9hdFtdKX0gd2FzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgb2JqZWN0LAorICAgICAqIDxjb2RlPnJldXNlQXJyYXk8L2NvZGU+IHdpbGwgYmUgcmV0dXJuZWQsIG90aGVyd2lzZSBhIG5ldyA8Y29kZT5mbG9hdFtdPC9jb2RlPgorICAgICAqIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZnJhY3Rpb24gICBUaGUgZnJhY3Rpb24gZnJvbSB0aGUgc3RhcnRpbmcgdG8gdGhlIGVuZGluZyB2YWx1ZXMKKyAgICAgKiBAcGFyYW0gc3RhcnRWYWx1ZSBUaGUgc3RhcnQgdmFsdWUuCisgICAgICogQHBhcmFtIGVuZFZhbHVlICAgVGhlIGVuZCB2YWx1ZS4KKyAgICAgKiBAcmV0dXJuIEEgPGNvZGU+ZmxvYXRbXTwvY29kZT4gd2hlcmUgZWFjaCBlbGVtZW50IGlzIGFuIGludGVycG9sYXRpb24gYmV0d2VlbgorICAgICAqICAgICAgICAgdGhlIHNhbWUgaW5kZXggaW4gc3RhcnRWYWx1ZSBhbmQgZW5kVmFsdWUuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGZsb2F0W10gZXZhbHVhdGUoZmxvYXQgZnJhY3Rpb24sIGZsb2F0W10gc3RhcnRWYWx1ZSwgZmxvYXRbXSBlbmRWYWx1ZSkgeworICAgICAgICBmbG9hdFtdIGFycmF5ID0gbUFycmF5OworICAgICAgICBpZiAoYXJyYXkgPT0gbnVsbCkgeworICAgICAgICAgICAgYXJyYXkgPSBuZXcgZmxvYXRbc3RhcnRWYWx1ZS5sZW5ndGhdOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgZmxvYXQgc3RhcnQgPSBzdGFydFZhbHVlW2ldOworICAgICAgICAgICAgZmxvYXQgZW5kID0gZW5kVmFsdWVbaV07CisgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXJ0ICsgKGZyYWN0aW9uICogKGVuZCAtIHN0YXJ0KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9JbnRBcnJheUV2YWx1YXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL0ludEFycmF5RXZhbHVhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdmMTBmMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9JbnRBcnJheUV2YWx1YXRvci5qYXZhCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYW5pbWF0aW9uOworCisvKioKKyAqIFRoaXMgZXZhbHVhdG9yIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gdHlwZSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gPGNvZGU+aW50W108L2NvZGU+IHZhbHVlcy4KKyAqIEVhY2ggaW5kZXggaW50byB0aGUgYXJyYXkgaXMgdHJlYXRlZCBhcyBhIHNlcGFyYXRlIHZhbHVlIHRvIGludGVycG9sYXRlLiBGb3IgZXhhbXBsZSwKKyAqIGV2YWx1YXRpbmcgPGNvZGU+ezEwMCwgMjAwfTwvY29kZT4gYW5kIDxjb2RlPnszMDAsIDQwMH08L2NvZGU+IHdpbGwgaW50ZXJwb2xhdGUgdGhlIHZhbHVlIGF0CisgKiB0aGUgZmlyc3QgaW5kZXggYmV0d2VlbiAxMDAgYW5kIDMwMCBhbmQgdGhlIHZhbHVlIGF0IHRoZSBzZWNvbmQgaW5kZXggdmFsdWUgYmV0d2VlbiAyMDAgYW5kIDQwMC4KKyAqLworcHVibGljIGNsYXNzIEludEFycmF5RXZhbHVhdG9yIGltcGxlbWVudHMgVHlwZUV2YWx1YXRvcjxpbnRbXT4geworCisgICAgcHJpdmF0ZSBpbnRbXSBtQXJyYXk7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYW4gSW50QXJyYXlFdmFsdWF0b3IgdGhhdCBkb2VzIG5vdCByZXVzZSB0aGUgYW5pbWF0ZWQgdmFsdWUuIENhcmUgbXVzdCBiZSB0YWtlbgorICAgICAqIHdoZW4gdXNpbmcgdGhpcyBvcHRpb24gYmVjYXVzZSBvbiBldmVyeSBldmFsdWF0aW9uIGEgbmV3IDxjb2RlPmludFtdPC9jb2RlPiB3aWxsIGJlCisgICAgICogYWxsb2NhdGVkLgorICAgICAqCisgICAgICogQHNlZSAjSW50QXJyYXlFdmFsdWF0b3IoaW50W10pCisgICAgICovCisgICAgcHVibGljIEludEFycmF5RXZhbHVhdG9yKCkgeworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhbiBJbnRBcnJheUV2YWx1YXRvciB0aGF0IHJldXNlcyA8Y29kZT5yZXVzZUFycmF5PC9jb2RlPiBmb3IgZXZlcnkgZXZhbHVhdGUoKSBjYWxsLgorICAgICAqIENhdXRpb24gbXVzdCBiZSB0YWtlbiB0byBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbQorICAgICAqIHtAbGluayBhbmRyb2lkLmFuaW1hdGlvbi5WYWx1ZUFuaW1hdG9yI2dldEFuaW1hdGVkVmFsdWUoKX0gaXMgbm90IGNhY2hlZCwgbW9kaWZpZWQsIG9yCisgICAgICogdXNlZCBhY3Jvc3MgdGhyZWFkcy4gVGhlIHZhbHVlIHdpbGwgYmUgbW9kaWZpZWQgb24gZWFjaCA8Y29kZT5ldmFsdWF0ZSgpPC9jb2RlPiBjYWxsLgorICAgICAqCisgICAgICogQHBhcmFtIHJldXNlQXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeSBhbmQgcmV0dXJuIGZyb20gPGNvZGU+ZXZhbHVhdGU8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBJbnRBcnJheUV2YWx1YXRvcihpbnRbXSByZXVzZUFycmF5KSB7CisgICAgICAgIG1BcnJheSA9IHJldXNlQXJyYXk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW50ZXJwb2xhdGVzIHRoZSB2YWx1ZSBhdCBlYWNoIGluZGV4IGJ5IHRoZSBmcmFjdGlvbi4gSWYge0BsaW5rICNJbnRBcnJheUV2YWx1YXRvcihpbnRbXSl9CisgICAgICogd2FzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgb2JqZWN0LCA8Y29kZT5yZXVzZUFycmF5PC9jb2RlPiB3aWxsIGJlIHJldHVybmVkLCBvdGhlcndpc2UKKyAgICAgKiBhIG5ldyA8Y29kZT5pbnRbXTwvY29kZT4gd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmcmFjdGlvbiAgIFRoZSBmcmFjdGlvbiBmcm9tIHRoZSBzdGFydGluZyB0byB0aGUgZW5kaW5nIHZhbHVlcworICAgICAqIEBwYXJhbSBzdGFydFZhbHVlIFRoZSBzdGFydCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gZW5kVmFsdWUgICBUaGUgZW5kIHZhbHVlLgorICAgICAqIEByZXR1cm4gQW4gPGNvZGU+aW50W108L2NvZGU+IHdoZXJlIGVhY2ggZWxlbWVudCBpcyBhbiBpbnRlcnBvbGF0aW9uIGJldHdlZW4KKyAgICAgKiAgICAgICAgIHRoZSBzYW1lIGluZGV4IGluIHN0YXJ0VmFsdWUgYW5kIGVuZFZhbHVlLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnRbXSBldmFsdWF0ZShmbG9hdCBmcmFjdGlvbiwgaW50W10gc3RhcnRWYWx1ZSwgaW50W10gZW5kVmFsdWUpIHsKKyAgICAgICAgaW50W10gYXJyYXkgPSBtQXJyYXk7CisgICAgICAgIGlmIChhcnJheSA9PSBudWxsKSB7CisgICAgICAgICAgICBhcnJheSA9IG5ldyBpbnRbc3RhcnRWYWx1ZS5sZW5ndGhdOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGludCBzdGFydCA9IHN0YXJ0VmFsdWVbaV07CisgICAgICAgICAgICBpbnQgZW5kID0gZW5kVmFsdWVbaV07CisgICAgICAgICAgICBhcnJheVtpXSA9IChpbnQpIChzdGFydCArIChmcmFjdGlvbiAqIChlbmQgLSBzdGFydCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL09iamVjdEFuaW1hdG9yLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vT2JqZWN0QW5pbWF0b3IuamF2YQppbmRleCA5Yzg4Y2NmLi5jMGNlNzk1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vT2JqZWN0QW5pbWF0b3IuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vT2JqZWN0QW5pbWF0b3IuamF2YQpAQCAtMTYsNiArMTYsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYW5pbWF0aW9uOwogCitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYXRoOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlByb3BlcnR5OwogCkBAIC0xOTEsNyArMTkzLDcgQEAKIAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBiZXR3ZWVuIGludCB2YWx1ZXMuIEEgc2luZ2xlCi0gICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gVHdvIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nCisgICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gVHdvIHZhbHVlcyBpbXBseSBzdGFydGluZwogICAgICAqIGFuZCBlbmRpbmcgdmFsdWVzLiBNb3JlIHRoYW4gdHdvIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nIHZhbHVlLCB2YWx1ZXMgdG8gYW5pbWF0ZSB0aHJvdWdoCiAgICAgICogYWxvbmcgdGhlIHdheSwgYW5kIGFuIGVuZGluZyB2YWx1ZSAodGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcwogICAgICAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uKS4KQEAgLTIxMCw4ICsyMTIsMzMgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgY29vcmRpbmF0ZXMgYWxvbmcgYSA8Y29kZT5QYXRoPC9jb2RlPgorICAgICAqIHVzaW5nIHR3byBwcm9wZXJ0aWVzLiBBIDxjb2RlPlBhdGg8L2NvZGU+PC8+IGFuaW1hdGlvbiBtb3ZlcyBpbiB0d28gZGltZW5zaW9ucywgYW5pbWF0aW5nCisgICAgICogY29vcmRpbmF0ZXMgPGNvZGU+KHgsIHkpPC9jb2RlPiB0b2dldGhlciB0byBmb2xsb3cgdGhlIGxpbmUuIEluIHRoaXMgdmFyaWF0aW9uLCB0aGUKKyAgICAgKiBjb29yZGluYXRlcyBhcmUgaW50ZWdlcnMgdGhhdCBhcmUgc2V0IHRvIHNlcGFyYXRlIHByb3BlcnRpZXMgZGVzaWduYXRlZCBieQorICAgICAqIDxjb2RlPnhQcm9wZXJ0eU5hbWU8L2NvZGU+IGFuZCA8Y29kZT55UHJvcGVydHlOYW1lPC9jb2RlPi4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSB0byBiZSBhbmltYXRlZC4gVGhpcyBvYmplY3Qgc2hvdWxkCisgICAgICogICAgICAgICAgICAgICBoYXZlIHB1YmxpYyBtZXRob2RzIG9uIGl0IGNhbGxlZCA8Y29kZT5zZXROYW1lWCgpPC9jb2RlPiBhbmQKKyAgICAgKiAgICAgICAgICAgICAgIDxjb2RlPnNldE5hbWVZPC9jb2RlPiwgd2hlcmUgPGNvZGU+bmFtZVg8L2NvZGU+IGFuZCA8Y29kZT5uYW1lWTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgIGFyZSB0aGUgdmFsdWUgb2YgPGNvZGU+eFByb3BlcnR5TmFtZTwvY29kZT4gYW5kIDxjb2RlPnlQcm9wZXJ0eU5hbWU8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICBwYXJhbWV0ZXJzLCByZXNwZWN0aXZlbHkuCisgICAgICogQHBhcmFtIHhQcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB0aGUgeCBjb29yZGluYXRlIGJlaW5nIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSB5UHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3IgdGhlIHkgY29vcmRpbmF0ZSBiZWluZyBhbmltYXRlZC4KKyAgICAgKiBAcGFyYW0gcGF0aCBUaGUgPGNvZGU+UGF0aDwvY29kZT4gdG8gYW5pbWF0ZSB2YWx1ZXMgYWxvbmcuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBhbG9uZyA8Y29kZT5wYXRoPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdEFuaW1hdG9yIG9mSW50KE9iamVjdCB0YXJnZXQsIFN0cmluZyB4UHJvcGVydHlOYW1lLCBTdHJpbmcgeVByb3BlcnR5TmFtZSwKKyAgICAgICAgICAgIFBhdGggcGF0aCkgeworICAgICAgICBLZXlmcmFtZVtdW10ga2V5ZnJhbWVzID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIuY3JlYXRlS2V5ZnJhbWVzKHBhdGgsIHRydWUpOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciB4ID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZLZXlmcmFtZSh4UHJvcGVydHlOYW1lLCBrZXlmcmFtZXNbMF0pOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciB5ID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZLZXlmcmFtZSh5UHJvcGVydHlOYW1lLCBrZXlmcmFtZXNbMV0pOworICAgICAgICByZXR1cm4gb2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcih0YXJnZXQsIHgsIHkpOworICAgIH0KKworICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBiZXR3ZWVuIGludCB2YWx1ZXMuIEEgc2luZ2xlCi0gICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gVHdvIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nCisgICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gVHdvIHZhbHVlcyBpbXBseSBzdGFydGluZwogICAgICAqIGFuZCBlbmRpbmcgdmFsdWVzLiBNb3JlIHRoYW4gdHdvIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nIHZhbHVlLCB2YWx1ZXMgdG8gYW5pbWF0ZSB0aHJvdWdoCiAgICAgICogYWxvbmcgdGhlIHdheSwgYW5kIGFuIGVuZGluZyB2YWx1ZSAodGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcwogICAgICAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uKS4KQEAgLTIyOCw4ICsyNTUsMTM1IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhbiBPYmplY3RBbmltYXRvciB0aGF0IGFuaW1hdGVzIGNvb3JkaW5hdGVzIGFsb25nIGEgPGNvZGU+UGF0aDwvY29kZT4KKyAgICAgKiB1c2luZyB0d28gcHJvcGVydGllcy4gIEEgPGNvZGU+UGF0aDwvY29kZT48Lz4gYW5pbWF0aW9uIG1vdmVzIGluIHR3byBkaW1lbnNpb25zLCBhbmltYXRpbmcKKyAgICAgKiBjb29yZGluYXRlcyA8Y29kZT4oeCwgeSk8L2NvZGU+IHRvZ2V0aGVyIHRvIGZvbGxvdyB0aGUgbGluZS4gSW4gdGhpcyB2YXJpYXRpb24sIHRoZQorICAgICAqIGNvb3JkaW5hdGVzIGFyZSBpbnRlZ2VycyB0aGF0IGFyZSBzZXQgdG8gc2VwYXJhdGUgcHJvcGVydGllcywgPGNvZGU+eFByb3BlcnR5PC9jb2RlPiBhbmQKKyAgICAgKiA8Y29kZT55UHJvcGVydHk8L2NvZGU+LgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIHRvIGJlIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSB4UHJvcGVydHkgVGhlIHByb3BlcnR5IGZvciB0aGUgeCBjb29yZGluYXRlIGJlaW5nIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSB5UHJvcGVydHkgVGhlIHByb3BlcnR5IGZvciB0aGUgeSBjb29yZGluYXRlIGJlaW5nIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSBwYXRoIFRoZSA8Y29kZT5QYXRoPC9jb2RlPiB0byBhbmltYXRlIHZhbHVlcyBhbG9uZy4KKyAgICAgKiBAcmV0dXJuIEFuIE9iamVjdEFuaW1hdG9yIG9iamVjdCB0aGF0IGlzIHNldCB1cCB0byBhbmltYXRlIGFsb25nIDxjb2RlPnBhdGg8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IE9iamVjdEFuaW1hdG9yIG9mSW50KFQgdGFyZ2V0LCBQcm9wZXJ0eTxULCBJbnRlZ2VyPiB4UHJvcGVydHksCisgICAgICAgICAgICBQcm9wZXJ0eTxULCBJbnRlZ2VyPiB5UHJvcGVydHksIFBhdGggcGF0aCkgeworICAgICAgICBLZXlmcmFtZVtdW10ga2V5ZnJhbWVzID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIuY3JlYXRlS2V5ZnJhbWVzKHBhdGgsIHRydWUpOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciB4ID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZLZXlmcmFtZSh4UHJvcGVydHksIGtleWZyYW1lc1swXSk7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHkgPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZktleWZyYW1lKHlQcm9wZXJ0eSwga2V5ZnJhbWVzWzFdKTsKKyAgICAgICAgcmV0dXJuIG9mUHJvcGVydHlWYWx1ZXNIb2xkZXIodGFyZ2V0LCB4LCB5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgb3ZlciBpbnQgdmFsdWVzIGZvciBhIG11bHRpcGxlCisgICAgICogcGFyYW1ldGVycyBzZXR0ZXIuIE9ubHkgcHVibGljIG1ldGhvZHMgdGhhdCB0YWtlIG9ubHkgaW50IHBhcmFtZXRlcnMgYXJlIHN1cHBvcnRlZC4KKyAgICAgKiBFYWNoIDxjb2RlPmludFtdPC9jb2RlPiBjb250YWlucyBhIGNvbXBsZXRlIHNldCBvZiBwYXJhbWV0ZXJzIHRvIHRoZSBzZXR0ZXIgbWV0aG9kLgorICAgICAqIEF0IGxlYXN0IHR3byA8Y29kZT5pbnRbXTwvY29kZT4gdmFsdWVzIG11c3QgYmUgcHJvdmlkZWQsIGEgc3RhcnQgYW5kIGVuZC4gTW9yZSB0aGFuIHR3bworICAgICAqIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nIHZhbHVlLCB2YWx1ZXMgdG8gYW5pbWF0ZSB0aHJvdWdoIGFsb25nIHRoZSB3YXksIGFuZCBhbiBlbmRpbmcKKyAgICAgKiB2YWx1ZSAodGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbikuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgaXMgdG8gYmUgYW5pbWF0ZWQuIFRoaXMgb2JqZWN0IG1heQorICAgICAqIGhhdmUgYSBwdWJsaWMgbWV0aG9kIG9uIGl0IGNhbGxlZCA8Y29kZT5zZXROYW1lKCk8L2NvZGU+LCB3aGVyZSA8Y29kZT5uYW1lPC9jb2RlPiBpcworICAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+cHJvcGVydHlOYW1lPC9jb2RlPiBwYXJhbWV0ZXIuIDxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT4gbWF5IGFsc28KKyAgICAgKiBiZSB0aGUgY2FzZS1zZW5zaXRpdmUgY29tcGxldGUgbmFtZSBvZiB0aGUgcHVibGljIHNldHRlciBtZXRob2QuCisgICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQgb3IgdGhlIG5hbWUgb2YgdGhlIHNldHRlciBtZXRob2QuCisgICAgICogQHBhcmFtIHZhbHVlcyBBIHNldCBvZiB2YWx1ZXMgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgYW5pbWF0ZSBiZXR3ZWVuIG92ZXIgdGltZS4KKyAgICAgKiBAcmV0dXJuIEFuIE9iamVjdEFuaW1hdG9yIG9iamVjdCB0aGF0IGlzIHNldCB1cCB0byBhbmltYXRlIGJldHdlZW4gdGhlIGdpdmVuIHZhbHVlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdEFuaW1hdG9yIG9mTXVsdGlJbnQoT2JqZWN0IHRhcmdldCwgU3RyaW5nIHByb3BlcnR5TmFtZSwgaW50W11bXSB2YWx1ZXMpIHsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgcHZoID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZNdWx0aUludChwcm9wZXJ0eU5hbWUsIHZhbHVlcyk7CisgICAgICAgIHJldHVybiBvZlByb3BlcnR5VmFsdWVzSG9sZGVyKHRhcmdldCwgcHZoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgdGhlIHRhcmdldCB1c2luZyBhIG11bHRpLWludCBzZXR0ZXIKKyAgICAgKiBhbG9uZyB0aGUgZ2l2ZW4gPGNvZGU+UGF0aDwvY29kZT4uIEEgPGNvZGU+UGF0aDwvY29kZT48Lz4gYW5pbWF0aW9uIG1vdmVzIGluIHR3byBkaW1lbnNpb25zLAorICAgICAqIGFuaW1hdGluZyBjb29yZGluYXRlcyA8Y29kZT4oeCwgeSk8L2NvZGU+IHRvZ2V0aGVyIHRvIGZvbGxvdyB0aGUgbGluZS4gSW4gdGhpcyB2YXJpYXRpb24sIHRoZQorICAgICAqIGNvb3JkaW5hdGVzIGFyZSBpbnRlZ2VyIHggYW5kIHkgY29vcmRpbmF0ZXMgdXNlZCBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBwYXJhbWV0ZXIgb2YgdGhlCisgICAgICogc2V0dGVyLCByZXNwZWN0aXZlbHkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgaXMgdG8gYmUgYW5pbWF0ZWQuIFRoaXMgb2JqZWN0IG1heQorICAgICAqIGhhdmUgYSBwdWJsaWMgbWV0aG9kIG9uIGl0IGNhbGxlZCA8Y29kZT5zZXROYW1lKCk8L2NvZGU+LCB3aGVyZSA8Y29kZT5uYW1lPC9jb2RlPiBpcworICAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+cHJvcGVydHlOYW1lPC9jb2RlPiBwYXJhbWV0ZXIuIDxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT4gbWF5IGFsc28KKyAgICAgKiBiZSB0aGUgY2FzZS1zZW5zaXRpdmUgY29tcGxldGUgbmFtZSBvZiB0aGUgcHVibGljIHNldHRlciBtZXRob2QuCisgICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQgb3IgdGhlIG5hbWUgb2YgdGhlIHNldHRlciBtZXRob2QuCisgICAgICogQHBhcmFtIHBhdGggVGhlIDxjb2RlPlBhdGg8L2NvZGU+IHRvIGFuaW1hdGUgdmFsdWVzIGFsb25nLgorICAgICAqIEByZXR1cm4gQW4gT2JqZWN0QW5pbWF0b3Igb2JqZWN0IHRoYXQgaXMgc2V0IHVwIHRvIGFuaW1hdGUgYWxvbmcgPGNvZGU+cGF0aDwvY29kZT4uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBPYmplY3RBbmltYXRvciBvZk11bHRpSW50KE9iamVjdCB0YXJnZXQsIFN0cmluZyBwcm9wZXJ0eU5hbWUsIFBhdGggcGF0aCkgeworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBwdmggPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZk11bHRpSW50KHByb3BlcnR5TmFtZSwgcGF0aCk7CisgICAgICAgIHJldHVybiBvZlByb3BlcnR5VmFsdWVzSG9sZGVyKHRhcmdldCwgcHZoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgb3ZlciB2YWx1ZXMgZm9yIGEgbXVsdGlwbGUgaW50CisgICAgICogcGFyYW1ldGVycyBzZXR0ZXIuIE9ubHkgcHVibGljIG1ldGhvZHMgdGhhdCB0YWtlIG9ubHkgaW50IHBhcmFtZXRlcnMgYXJlIHN1cHBvcnRlZC4KKyAgICAgKiA8cD5BdCBsZWFzdCB0d28gdmFsdWVzIG11c3QgYmUgcHJvdmlkZWQsIGEgc3RhcnQgYW5kIGVuZC4gTW9yZSB0aGFuIHR3bworICAgICAqIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nIHZhbHVlLCB2YWx1ZXMgdG8gYW5pbWF0ZSB0aHJvdWdoIGFsb25nIHRoZSB3YXksIGFuZCBhbiBlbmRpbmcKKyAgICAgKiB2YWx1ZSAodGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbikuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIGFuaW1hdGVkLiBUaGlzIG9iamVjdCBtYXkKKyAgICAgKiBoYXZlIGEgcHVibGljIG1ldGhvZCBvbiBpdCBjYWxsZWQgPGNvZGU+c2V0TmFtZSgpPC9jb2RlPiwgd2hlcmUgPGNvZGU+bmFtZTwvY29kZT4gaXMKKyAgICAgKiB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT4gcGFyYW1ldGVyLiA8Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+IG1heSBhbHNvCisgICAgICogYmUgdGhlIGNhc2Utc2Vuc2l0aXZlIGNvbXBsZXRlIG5hbWUgb2YgdGhlIHB1YmxpYyBzZXR0ZXIgbWV0aG9kLgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkIG9yIHRoZSBuYW1lIG9mIHRoZSBzZXR0ZXIgbWV0aG9kLgorICAgICAqIEBwYXJhbSBjb252ZXJ0ZXIgQ29udmVydHMgVCBvYmplY3RzIGludG8gaW50IHBhcmFtZXRlcnMgZm9yIHRoZSBtdWx0aS12YWx1ZSBzZXR0ZXIuCisgICAgICogQHBhcmFtIGV2YWx1YXRvciBBIFR5cGVFdmFsdWF0b3IgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGFuaW1hdGlvbiBmcmFtZSB0bworICAgICAqIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIE9iamVjdCB2YWx1ZXMgdG8gZGVyaXZlIHRoZSBhbmltYXRlZAorICAgICAqIHZhbHVlLgorICAgICAqIEBwYXJhbSB2YWx1ZXMgQSBzZXQgb2YgdmFsdWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIGFuaW1hdGUgYmV0d2VlbiBvdmVyIHRpbWUuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBiZXR3ZWVuIHRoZSBnaXZlbiB2YWx1ZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8VD4gT2JqZWN0QW5pbWF0b3Igb2ZNdWx0aUludChPYmplY3QgdGFyZ2V0LCBTdHJpbmcgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgVHlwZUNvbnZlcnRlcjxULCBpbnRbXT4gY29udmVydGVyLCBUeXBlRXZhbHVhdG9yPFQ+IGV2YWx1YXRvciwgVC4uLiB2YWx1ZXMpIHsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgcHZoID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZNdWx0aUludChwcm9wZXJ0eU5hbWUsIGNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICBldmFsdWF0b3IsIHZhbHVlcyk7CisgICAgICAgIHJldHVybiBPYmplY3RBbmltYXRvci5vZlByb3BlcnR5VmFsdWVzSG9sZGVyKHRhcmdldCwgcHZoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiBjb2xvciB2YWx1ZXMuIEEgc2luZ2xlCisgICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gVHdvIHZhbHVlcyBpbXBseSBzdGFydGluZworICAgICAqIGFuZCBlbmRpbmcgdmFsdWVzLiBNb3JlIHRoYW4gdHdvIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nIHZhbHVlLCB2YWx1ZXMgdG8gYW5pbWF0ZSB0aHJvdWdoCisgICAgICogYWxvbmcgdGhlIHdheSwgYW5kIGFuIGVuZGluZyB2YWx1ZSAodGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcworICAgICAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBpcyB0byBiZSBhbmltYXRlZC4gVGhpcyBvYmplY3Qgc2hvdWxkCisgICAgICogaGF2ZSBhIHB1YmxpYyBtZXRob2Qgb24gaXQgY2FsbGVkIDxjb2RlPnNldE5hbWUoKTwvY29kZT4sIHdoZXJlIDxjb2RlPm5hbWU8L2NvZGU+IGlzCisgICAgICogdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+IHBhcmFtZXRlci4KKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZC4KKyAgICAgKiBAcGFyYW0gdmFsdWVzIEEgc2V0IG9mIHZhbHVlcyB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBhbmltYXRlIGJldHdlZW4gb3ZlciB0aW1lLgorICAgICAqIEByZXR1cm4gQW4gT2JqZWN0QW5pbWF0b3Igb2JqZWN0IHRoYXQgaXMgc2V0IHVwIHRvIGFuaW1hdGUgYmV0d2VlbiB0aGUgZ2l2ZW4gdmFsdWVzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0QW5pbWF0b3Igb2ZBcmdiKE9iamVjdCB0YXJnZXQsIFN0cmluZyBwcm9wZXJ0eU5hbWUsIGludC4uLiB2YWx1ZXMpIHsKKyAgICAgICAgT2JqZWN0QW5pbWF0b3IgYW5pbWF0b3IgPSBvZkludCh0YXJnZXQsIHByb3BlcnR5TmFtZSwgdmFsdWVzKTsKKyAgICAgICAgYW5pbWF0b3Iuc2V0RXZhbHVhdG9yKEFyZ2JFdmFsdWF0b3IuZ2V0SW5zdGFuY2UoKSk7CisgICAgICAgIHJldHVybiBhbmltYXRvcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiBjb2xvciB2YWx1ZXMuIEEgc2luZ2xlCisgICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gVHdvIHZhbHVlcyBpbXBseSBzdGFydGluZworICAgICAqIGFuZCBlbmRpbmcgdmFsdWVzLiBNb3JlIHRoYW4gdHdvIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nIHZhbHVlLCB2YWx1ZXMgdG8gYW5pbWF0ZSB0aHJvdWdoCisgICAgICogYWxvbmcgdGhlIHdheSwgYW5kIGFuIGVuZGluZyB2YWx1ZSAodGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcworICAgICAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBpcyB0byBiZSBhbmltYXRlZC4KKyAgICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSB2YWx1ZXMgQSBzZXQgb2YgdmFsdWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIGFuaW1hdGUgYmV0d2VlbiBvdmVyIHRpbWUuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBiZXR3ZWVuIHRoZSBnaXZlbiB2YWx1ZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8VD4gT2JqZWN0QW5pbWF0b3Igb2ZBcmdiKFQgdGFyZ2V0LCBQcm9wZXJ0eTxULCBJbnRlZ2VyPiBwcm9wZXJ0eSwKKyAgICAgICAgICAgIGludC4uLiB2YWx1ZXMpIHsKKyAgICAgICAgT2JqZWN0QW5pbWF0b3IgYW5pbWF0b3IgPSBvZkludCh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZXMpOworICAgICAgICBhbmltYXRvci5zZXRFdmFsdWF0b3IoQXJnYkV2YWx1YXRvci5nZXRJbnN0YW5jZSgpKTsKKyAgICAgICAgcmV0dXJuIGFuaW1hdG9yOworICAgIH0KKworICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBiZXR3ZWVuIGZsb2F0IHZhbHVlcy4gQSBzaW5nbGUKLSAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcKKyAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IHN0YXJ0aW5nCiAgICAgICogYW5kIGVuZGluZyB2YWx1ZXMuIE1vcmUgdGhhbiB0d28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcgdmFsdWUsIHZhbHVlcyB0byBhbmltYXRlIHRocm91Z2gKICAgICAgKiBhbG9uZyB0aGUgd2F5LCBhbmQgYW4gZW5kaW5nIHZhbHVlICh0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXN0cmlidXRlZCBldmVubHkgYWNyb3NzCiAgICAgICogdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24pLgpAQCAtMjQ4LDggKzQwMiwzMyBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBjb29yZGluYXRlcyBhbG9uZyBhIDxjb2RlPlBhdGg8L2NvZGU+CisgICAgICogdXNpbmcgdHdvIHByb3BlcnRpZXMuIEEgPGNvZGU+UGF0aDwvY29kZT48Lz4gYW5pbWF0aW9uIG1vdmVzIGluIHR3byBkaW1lbnNpb25zLCBhbmltYXRpbmcKKyAgICAgKiBjb29yZGluYXRlcyA8Y29kZT4oeCwgeSk8L2NvZGU+IHRvZ2V0aGVyIHRvIGZvbGxvdyB0aGUgbGluZS4gSW4gdGhpcyB2YXJpYXRpb24sIHRoZQorICAgICAqIGNvb3JkaW5hdGVzIGFyZSBmbG9hdHMgdGhhdCBhcmUgc2V0IHRvIHNlcGFyYXRlIHByb3BlcnRpZXMgZGVzaWduYXRlZCBieQorICAgICAqIDxjb2RlPnhQcm9wZXJ0eU5hbWU8L2NvZGU+IGFuZCA8Y29kZT55UHJvcGVydHlOYW1lPC9jb2RlPi4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSB0byBiZSBhbmltYXRlZC4gVGhpcyBvYmplY3Qgc2hvdWxkCisgICAgICogICAgICAgICAgICAgICBoYXZlIHB1YmxpYyBtZXRob2RzIG9uIGl0IGNhbGxlZCA8Y29kZT5zZXROYW1lWCgpPC9jb2RlPiBhbmQKKyAgICAgKiAgICAgICAgICAgICAgIDxjb2RlPnNldE5hbWVZPC9jb2RlPiwgd2hlcmUgPGNvZGU+bmFtZVg8L2NvZGU+IGFuZCA8Y29kZT5uYW1lWTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgIGFyZSB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPnhQcm9wZXJ0eU5hbWU8L2NvZGU+IGFuZCA8Y29kZT55UHJvcGVydHlOYW1lPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgcGFyYW1ldGVycywgcmVzcGVjdGl2ZWx5LgorICAgICAqIEBwYXJhbSB4UHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3IgdGhlIHggY29vcmRpbmF0ZSBiZWluZyBhbmltYXRlZC4KKyAgICAgKiBAcGFyYW0geVByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZm9yIHRoZSB5IGNvb3JkaW5hdGUgYmVpbmcgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIHBhdGggVGhlIDxjb2RlPlBhdGg8L2NvZGU+IHRvIGFuaW1hdGUgdmFsdWVzIGFsb25nLgorICAgICAqIEByZXR1cm4gQW4gT2JqZWN0QW5pbWF0b3Igb2JqZWN0IHRoYXQgaXMgc2V0IHVwIHRvIGFuaW1hdGUgYWxvbmcgPGNvZGU+cGF0aDwvY29kZT4uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBPYmplY3RBbmltYXRvciBvZkZsb2F0KE9iamVjdCB0YXJnZXQsIFN0cmluZyB4UHJvcGVydHlOYW1lLCBTdHJpbmcgeVByb3BlcnR5TmFtZSwKKyAgICAgICAgICAgIFBhdGggcGF0aCkgeworICAgICAgICBLZXlmcmFtZVtdW10ga2V5ZnJhbWVzID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIuY3JlYXRlS2V5ZnJhbWVzKHBhdGgsIGZhbHNlKTsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgeCA9IFByb3BlcnR5VmFsdWVzSG9sZGVyLm9mS2V5ZnJhbWUoeFByb3BlcnR5TmFtZSwga2V5ZnJhbWVzWzBdKTsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgeSA9IFByb3BlcnR5VmFsdWVzSG9sZGVyLm9mS2V5ZnJhbWUoeVByb3BlcnR5TmFtZSwga2V5ZnJhbWVzWzFdKTsKKyAgICAgICAgcmV0dXJuIG9mUHJvcGVydHlWYWx1ZXNIb2xkZXIodGFyZ2V0LCB4LCB5KTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiBmbG9hdCB2YWx1ZXMuIEEgc2luZ2xlCi0gICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gVHdvIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nCisgICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gVHdvIHZhbHVlcyBpbXBseSBzdGFydGluZwogICAgICAqIGFuZCBlbmRpbmcgdmFsdWVzLiBNb3JlIHRoYW4gdHdvIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nIHZhbHVlLCB2YWx1ZXMgdG8gYW5pbWF0ZSB0aHJvdWdoCiAgICAgICogYWxvbmcgdGhlIHdheSwgYW5kIGFuIGVuZGluZyB2YWx1ZSAodGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcwogICAgICAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uKS4KQEAgLTI2Nyw4ICs0NDYsOTQgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgY29vcmRpbmF0ZXMgYWxvbmcgYSA8Y29kZT5QYXRoPC9jb2RlPgorICAgICAqIHVzaW5nIHR3byBwcm9wZXJ0aWVzLiBBIDxjb2RlPlBhdGg8L2NvZGU+PC8+IGFuaW1hdGlvbiBtb3ZlcyBpbiB0d28gZGltZW5zaW9ucywgYW5pbWF0aW5nCisgICAgICogY29vcmRpbmF0ZXMgPGNvZGU+KHgsIHkpPC9jb2RlPiB0b2dldGhlciB0byBmb2xsb3cgdGhlIGxpbmUuIEluIHRoaXMgdmFyaWF0aW9uLCB0aGUKKyAgICAgKiBjb29yZGluYXRlcyBhcmUgZmxvYXRzIHRoYXQgYXJlIHNldCB0byBzZXBhcmF0ZSBwcm9wZXJ0aWVzLCA8Y29kZT54UHJvcGVydHk8L2NvZGU+IGFuZAorICAgICAqIDxjb2RlPnlQcm9wZXJ0eTwvY29kZT4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgdG8gYmUgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIHhQcm9wZXJ0eSBUaGUgcHJvcGVydHkgZm9yIHRoZSB4IGNvb3JkaW5hdGUgYmVpbmcgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIHlQcm9wZXJ0eSBUaGUgcHJvcGVydHkgZm9yIHRoZSB5IGNvb3JkaW5hdGUgYmVpbmcgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIHBhdGggVGhlIDxjb2RlPlBhdGg8L2NvZGU+IHRvIGFuaW1hdGUgdmFsdWVzIGFsb25nLgorICAgICAqIEByZXR1cm4gQW4gT2JqZWN0QW5pbWF0b3Igb2JqZWN0IHRoYXQgaXMgc2V0IHVwIHRvIGFuaW1hdGUgYWxvbmcgPGNvZGU+cGF0aDwvY29kZT4uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8VD4gT2JqZWN0QW5pbWF0b3Igb2ZGbG9hdChUIHRhcmdldCwgUHJvcGVydHk8VCwgRmxvYXQ+IHhQcm9wZXJ0eSwKKyAgICAgICAgICAgIFByb3BlcnR5PFQsIEZsb2F0PiB5UHJvcGVydHksIFBhdGggcGF0aCkgeworICAgICAgICByZXR1cm4gb2ZGbG9hdCh0YXJnZXQsIHhQcm9wZXJ0eS5nZXROYW1lKCksIHlQcm9wZXJ0eS5nZXROYW1lKCksIHBhdGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBvdmVyIGZsb2F0IHZhbHVlcyBmb3IgYSBtdWx0aXBsZQorICAgICAqIHBhcmFtZXRlcnMgc2V0dGVyLiBPbmx5IHB1YmxpYyBtZXRob2RzIHRoYXQgdGFrZSBvbmx5IGZsb2F0IHBhcmFtZXRlcnMgYXJlIHN1cHBvcnRlZC4KKyAgICAgKiBFYWNoIDxjb2RlPmZsb2F0W108L2NvZGU+IGNvbnRhaW5zIGEgY29tcGxldGUgc2V0IG9mIHBhcmFtZXRlcnMgdG8gdGhlIHNldHRlciBtZXRob2QuCisgICAgICogQXQgbGVhc3QgdHdvIDxjb2RlPmZsb2F0W108L2NvZGU+IHZhbHVlcyBtdXN0IGJlIHByb3ZpZGVkLCBhIHN0YXJ0IGFuZCBlbmQuIE1vcmUgdGhhbiB0d28KKyAgICAgKiB2YWx1ZXMgaW1wbHkgYSBzdGFydGluZyB2YWx1ZSwgdmFsdWVzIHRvIGFuaW1hdGUgdGhyb3VnaCBhbG9uZyB0aGUgd2F5LCBhbmQgYW4gZW5kaW5nCisgICAgICogdmFsdWUgKHRoZXNlIHZhbHVlcyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGV2ZW5seSBhY3Jvc3MgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24pLgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIGFuaW1hdGVkLiBUaGlzIG9iamVjdCBtYXkKKyAgICAgKiBoYXZlIGEgcHVibGljIG1ldGhvZCBvbiBpdCBjYWxsZWQgPGNvZGU+c2V0TmFtZSgpPC9jb2RlPiwgd2hlcmUgPGNvZGU+bmFtZTwvY29kZT4gaXMKKyAgICAgKiB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT4gcGFyYW1ldGVyLiA8Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+IG1heSBhbHNvCisgICAgICogYmUgdGhlIGNhc2Utc2Vuc2l0aXZlIGNvbXBsZXRlIG5hbWUgb2YgdGhlIHB1YmxpYyBzZXR0ZXIgbWV0aG9kLgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkIG9yIHRoZSBuYW1lIG9mIHRoZSBzZXR0ZXIgbWV0aG9kLgorICAgICAqIEBwYXJhbSB2YWx1ZXMgQSBzZXQgb2YgdmFsdWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIGFuaW1hdGUgYmV0d2VlbiBvdmVyIHRpbWUuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBiZXR3ZWVuIHRoZSBnaXZlbiB2YWx1ZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBPYmplY3RBbmltYXRvciBvZk11bHRpRmxvYXQoT2JqZWN0IHRhcmdldCwgU3RyaW5nIHByb3BlcnR5TmFtZSwKKyAgICAgICAgICAgIGZsb2F0W11bXSB2YWx1ZXMpIHsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgcHZoID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZNdWx0aUZsb2F0KHByb3BlcnR5TmFtZSwgdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIG9mUHJvcGVydHlWYWx1ZXNIb2xkZXIodGFyZ2V0LCBwdmgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyB0aGUgdGFyZ2V0IHVzaW5nIGEgbXVsdGktZmxvYXQgc2V0dGVyCisgICAgICogYWxvbmcgdGhlIGdpdmVuIDxjb2RlPlBhdGg8L2NvZGU+LiBBIDxjb2RlPlBhdGg8L2NvZGU+PC8+IGFuaW1hdGlvbiBtb3ZlcyBpbiB0d28gZGltZW5zaW9ucywKKyAgICAgKiBhbmltYXRpbmcgY29vcmRpbmF0ZXMgPGNvZGU+KHgsIHkpPC9jb2RlPiB0b2dldGhlciB0byBmb2xsb3cgdGhlIGxpbmUuIEluIHRoaXMgdmFyaWF0aW9uLCB0aGUKKyAgICAgKiBjb29yZGluYXRlcyBhcmUgZmxvYXQgeCBhbmQgeSBjb29yZGluYXRlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIHBhcmFtZXRlciBvZiB0aGUKKyAgICAgKiBzZXR0ZXIsIHJlc3BlY3RpdmVseS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBpcyB0byBiZSBhbmltYXRlZC4gVGhpcyBvYmplY3QgbWF5CisgICAgICogaGF2ZSBhIHB1YmxpYyBtZXRob2Qgb24gaXQgY2FsbGVkIDxjb2RlPnNldE5hbWUoKTwvY29kZT4sIHdoZXJlIDxjb2RlPm5hbWU8L2NvZGU+IGlzCisgICAgICogdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+IHBhcmFtZXRlci4gPGNvZGU+cHJvcGVydHlOYW1lPC9jb2RlPiBtYXkgYWxzbworICAgICAqIGJlIHRoZSBjYXNlLXNlbnNpdGl2ZSBjb21wbGV0ZSBuYW1lIG9mIHRoZSBwdWJsaWMgc2V0dGVyIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZCBvciB0aGUgbmFtZSBvZiB0aGUgc2V0dGVyIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gcGF0aCBUaGUgPGNvZGU+UGF0aDwvY29kZT4gdG8gYW5pbWF0ZSB2YWx1ZXMgYWxvbmcuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBhbG9uZyA8Y29kZT5wYXRoPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdEFuaW1hdG9yIG9mTXVsdGlGbG9hdChPYmplY3QgdGFyZ2V0LCBTdHJpbmcgcHJvcGVydHlOYW1lLCBQYXRoIHBhdGgpIHsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgcHZoID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZNdWx0aUZsb2F0KHByb3BlcnR5TmFtZSwgcGF0aCk7CisgICAgICAgIHJldHVybiBvZlByb3BlcnR5VmFsdWVzSG9sZGVyKHRhcmdldCwgcHZoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgb3ZlciB2YWx1ZXMgZm9yIGEgbXVsdGlwbGUgZmxvYXQKKyAgICAgKiBwYXJhbWV0ZXJzIHNldHRlci4gT25seSBwdWJsaWMgbWV0aG9kcyB0aGF0IHRha2Ugb25seSBmbG9hdCBwYXJhbWV0ZXJzIGFyZSBzdXBwb3J0ZWQuCisgICAgICogPHA+QXQgbGVhc3QgdHdvIHZhbHVlcyBtdXN0IGJlIHByb3ZpZGVkLCBhIHN0YXJ0IGFuZCBlbmQuIE1vcmUgdGhhbiB0d28KKyAgICAgKiB2YWx1ZXMgaW1wbHkgYSBzdGFydGluZyB2YWx1ZSwgdmFsdWVzIHRvIGFuaW1hdGUgdGhyb3VnaCBhbG9uZyB0aGUgd2F5LCBhbmQgYW4gZW5kaW5nCisgICAgICogdmFsdWUgKHRoZXNlIHZhbHVlcyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGV2ZW5seSBhY3Jvc3MgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24pLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBpcyB0byBiZSBhbmltYXRlZC4gVGhpcyBvYmplY3QgbWF5CisgICAgICogaGF2ZSBhIHB1YmxpYyBtZXRob2Qgb24gaXQgY2FsbGVkIDxjb2RlPnNldE5hbWUoKTwvY29kZT4sIHdoZXJlIDxjb2RlPm5hbWU8L2NvZGU+IGlzCisgICAgICogdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+IHBhcmFtZXRlci4gPGNvZGU+cHJvcGVydHlOYW1lPC9jb2RlPiBtYXkgYWxzbworICAgICAqIGJlIHRoZSBjYXNlLXNlbnNpdGl2ZSBjb21wbGV0ZSBuYW1lIG9mIHRoZSBwdWJsaWMgc2V0dGVyIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZCBvciB0aGUgbmFtZSBvZiB0aGUgc2V0dGVyIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRzIFQgb2JqZWN0cyBpbnRvIGZsb2F0IHBhcmFtZXRlcnMgZm9yIHRoZSBtdWx0aS12YWx1ZSBzZXR0ZXIuCisgICAgICogQHBhcmFtIGV2YWx1YXRvciBBIFR5cGVFdmFsdWF0b3IgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGFuaW1hdGlvbiBmcmFtZSB0bworICAgICAqIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIE9iamVjdCB2YWx1ZXMgdG8gZGVyaXZlIHRoZSBhbmltYXRlZAorICAgICAqIHZhbHVlLgorICAgICAqIEBwYXJhbSB2YWx1ZXMgQSBzZXQgb2YgdmFsdWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIGFuaW1hdGUgYmV0d2VlbiBvdmVyIHRpbWUuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBiZXR3ZWVuIHRoZSBnaXZlbiB2YWx1ZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8VD4gT2JqZWN0QW5pbWF0b3Igb2ZNdWx0aUZsb2F0KE9iamVjdCB0YXJnZXQsIFN0cmluZyBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICBUeXBlQ29udmVydGVyPFQsIGZsb2F0W10+IGNvbnZlcnRlciwgVHlwZUV2YWx1YXRvcjxUPiBldmFsdWF0b3IsIFQuLi4gdmFsdWVzKSB7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHB2aCA9IFByb3BlcnR5VmFsdWVzSG9sZGVyLm9mTXVsdGlGbG9hdChwcm9wZXJ0eU5hbWUsIGNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICBldmFsdWF0b3IsIHZhbHVlcyk7CisgICAgICAgIHJldHVybiBPYmplY3RBbmltYXRvci5vZlByb3BlcnR5VmFsdWVzSG9sZGVyKHRhcmdldCwgcHZoKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiBPYmplY3QgdmFsdWVzLiBBIHNpbmdsZQotICAgICAqIHZhbHVlIGltcGxpZXMgdGhhdCB0aGF0IHZhbHVlIGlzIHRoZSBvbmUgYmVpbmcgYW5pbWF0ZWQgdG8uIFR3byB2YWx1ZXMgaW1wbHkgYSBzdGFydGluZworICAgICAqIHZhbHVlIGltcGxpZXMgdGhhdCB0aGF0IHZhbHVlIGlzIHRoZSBvbmUgYmVpbmcgYW5pbWF0ZWQgdG8uIFR3byB2YWx1ZXMgaW1wbHkgc3RhcnRpbmcKICAgICAgKiBhbmQgZW5kaW5nIHZhbHVlcy4gTW9yZSB0aGFuIHR3byB2YWx1ZXMgaW1wbHkgYSBzdGFydGluZyB2YWx1ZSwgdmFsdWVzIHRvIGFuaW1hdGUgdGhyb3VnaAogICAgICAqIGFsb25nIHRoZSB3YXksIGFuZCBhbiBlbmRpbmcgdmFsdWUgKHRoZXNlIHZhbHVlcyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGV2ZW5seSBhY3Jvc3MKICAgICAgKiB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbikuCkBAIC0yOTIsOCArNTU3LDMyIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhbiBPYmplY3RBbmltYXRvciB0aGF0IGFuaW1hdGVzIGEgcHJvcGVydHkgYWxvbmcgYSA8Y29kZT5QYXRoPC9jb2RlPi4KKyAgICAgKiBBIDxjb2RlPlBhdGg8L2NvZGU+PC8+IGFuaW1hdGlvbiBtb3ZlcyBpbiB0d28gZGltZW5zaW9ucywgYW5pbWF0aW5nIGNvb3JkaW5hdGVzCisgICAgICogPGNvZGU+KHgsIHkpPC9jb2RlPiB0b2dldGhlciB0byBmb2xsb3cgdGhlIGxpbmUuIFRoaXMgdmFyaWFudCBhbmltYXRlcyB0aGUgY29vcmRpbmF0ZXMKKyAgICAgKiBpbiBhIDxjb2RlPlBvaW50RjwvY29kZT4gdG8gZm9sbG93IHRoZSA8Y29kZT5QYXRoPC9jb2RlPi4gSWYgdGhlIDxjb2RlPlByb3BlcnR5PC9jb2RlPgorICAgICAqIGFzc29jaWF0ZWQgd2l0aCA8Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+IHVzZXMgYSB0eXBlIG90aGVyIHRoYW4gPGNvZGU+UG9pbnRGPC9jb2RlPiwKKyAgICAgKiA8Y29kZT5jb252ZXJ0ZXI8L2NvZGU+IGNhbiBiZSB1c2VkIHRvIGNoYW5nZSBmcm9tIDxjb2RlPlBvaW50RjwvY29kZT4gdG8gdGhlIHR5cGUKKyAgICAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIDxjb2RlPlByb3BlcnR5PC9jb2RlPi4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBpcyB0byBiZSBhbmltYXRlZC4gVGhpcyBvYmplY3Qgc2hvdWxkCisgICAgICogaGF2ZSBhIHB1YmxpYyBtZXRob2Qgb24gaXQgY2FsbGVkIDxjb2RlPnNldE5hbWUoKTwvY29kZT4sIHdoZXJlIDxjb2RlPm5hbWU8L2NvZGU+IGlzCisgICAgICogdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+IHBhcmFtZXRlci4KKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZC4KKyAgICAgKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRzIGEgUG9pbnRGIHRvIHRoZSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2V0dGVyLiBNYXkgYmUKKyAgICAgKiAgICAgICAgICAgICAgICAgIG51bGwgaWYgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4KKyAgICAgKiBAcGFyYW0gcGF0aCBUaGUgPGNvZGU+UGF0aDwvY29kZT4gdG8gYW5pbWF0ZSB2YWx1ZXMgYWxvbmcuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBhbG9uZyA8Y29kZT5wYXRoPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdEFuaW1hdG9yIG9mT2JqZWN0KE9iamVjdCB0YXJnZXQsIFN0cmluZyBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICBUeXBlQ29udmVydGVyPFBvaW50RiwgPz4gY29udmVydGVyLCBQYXRoIHBhdGgpIHsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgcHZoID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZPYmplY3QocHJvcGVydHlOYW1lLCBjb252ZXJ0ZXIsIHBhdGgpOworICAgICAgICByZXR1cm4gb2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcih0YXJnZXQsIHB2aCk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhbiBPYmplY3RBbmltYXRvciB0aGF0IGFuaW1hdGVzIGJldHdlZW4gT2JqZWN0IHZhbHVlcy4gQSBzaW5nbGUKLSAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcKKyAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IHN0YXJ0aW5nCiAgICAgICogYW5kIGVuZGluZyB2YWx1ZXMuIE1vcmUgdGhhbiB0d28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcgdmFsdWUsIHZhbHVlcyB0byBhbmltYXRlIHRocm91Z2gKICAgICAgKiBhbG9uZyB0aGUgd2F5LCBhbmQgYW4gZW5kaW5nIHZhbHVlICh0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXN0cmlidXRlZCBldmVubHkgYWNyb3NzCiAgICAgICogdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24pLgpAQCAtMzE1LDYgKzYwNCw1MyBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBiZXR3ZWVuIE9iamVjdCB2YWx1ZXMuIEEgc2luZ2xlCisgICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gVHdvIHZhbHVlcyBpbXBseSBzdGFydGluZworICAgICAqIGFuZCBlbmRpbmcgdmFsdWVzLiBNb3JlIHRoYW4gdHdvIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nIHZhbHVlLCB2YWx1ZXMgdG8gYW5pbWF0ZSB0aHJvdWdoCisgICAgICogYWxvbmcgdGhlIHdheSwgYW5kIGFuIGVuZGluZyB2YWx1ZSAodGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcworICAgICAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uKS4gVGhpcyB2YXJpYW50IHN1cHBsaWVzIGEgPGNvZGU+VHlwZUNvbnZlcnRlcjwvY29kZT4gdG8KKyAgICAgKiBjb252ZXJ0IGZyb20gdGhlIGFuaW1hdGVkIHZhbHVlcyB0byB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkuIElmIG9ubHkgb25lIHZhbHVlIGlzCisgICAgICogc3VwcGxpZWQsIHRoZSA8Y29kZT5UeXBlQ29udmVydGVyPC9jb2RlPiBtdXN0IGltcGxlbWVudAorICAgICAqIHtAbGluayBUeXBlQ29udmVydGVyI2NvbnZlcnRCYWNrKE9iamVjdCl9IHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIGNvbnZlcnRlciBDb252ZXJ0cyB0aGUgYW5pbWF0ZWQgb2JqZWN0IHRvIHRoZSBQcm9wZXJ0eSB0eXBlLgorICAgICAqIEBwYXJhbSBldmFsdWF0b3IgQSBUeXBlRXZhbHVhdG9yIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBhbmltYXRpb24gZnJhbWUgdG8KKyAgICAgKiBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHRoZSBPYmplY3QgdmFsdWVzIHRvIGRlcml2ZSB0aGUgYW5pbWF0ZWQKKyAgICAgKiB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gdmFsdWVzIEEgc2V0IG9mIHZhbHVlcyB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBhbmltYXRlIGJldHdlZW4gb3ZlciB0aW1lLgorICAgICAqIEByZXR1cm4gQW4gT2JqZWN0QW5pbWF0b3Igb2JqZWN0IHRoYXQgaXMgc2V0IHVwIHRvIGFuaW1hdGUgYmV0d2VlbiB0aGUgZ2l2ZW4gdmFsdWVzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgPFQsIFYsIFA+IE9iamVjdEFuaW1hdG9yIG9mT2JqZWN0KFQgdGFyZ2V0LCBQcm9wZXJ0eTxULCBQPiBwcm9wZXJ0eSwKKyAgICAgICAgICAgIFR5cGVDb252ZXJ0ZXI8ViwgUD4gY29udmVydGVyLCBUeXBlRXZhbHVhdG9yPFY+IGV2YWx1YXRvciwgVi4uLiB2YWx1ZXMpIHsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgcHZoID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZPYmplY3QocHJvcGVydHksIGNvbnZlcnRlciwgZXZhbHVhdG9yLAorICAgICAgICAgICAgICAgIHZhbHVlcyk7CisgICAgICAgIHJldHVybiBvZlByb3BlcnR5VmFsdWVzSG9sZGVyKHRhcmdldCwgcHZoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgYSBwcm9wZXJ0eSBhbG9uZyBhIDxjb2RlPlBhdGg8L2NvZGU+LgorICAgICAqIEEgPGNvZGU+UGF0aDwvY29kZT48Lz4gYW5pbWF0aW9uIG1vdmVzIGluIHR3byBkaW1lbnNpb25zLCBhbmltYXRpbmcgY29vcmRpbmF0ZXMKKyAgICAgKiA8Y29kZT4oeCwgeSk8L2NvZGU+IHRvZ2V0aGVyIHRvIGZvbGxvdyB0aGUgbGluZS4gVGhpcyB2YXJpYW50IGFuaW1hdGVzIHRoZSBjb29yZGluYXRlcworICAgICAqIGluIGEgPGNvZGU+UG9pbnRGPC9jb2RlPiB0byBmb2xsb3cgdGhlIDxjb2RlPlBhdGg8L2NvZGU+LiBJZiA8Y29kZT5wcm9wZXJ0eTwvY29kZT4KKyAgICAgKiB1c2VzIGEgdHlwZSBvdGhlciB0aGFuIDxjb2RlPlBvaW50RjwvY29kZT4sIDxjb2RlPmNvbnZlcnRlcjwvY29kZT4gY2FuIGJlIHVzZWQgdG8gY2hhbmdlCisgICAgICogZnJvbSA8Y29kZT5Qb2ludEY8L2NvZGU+IHRvIHRoZSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgPGNvZGU+UHJvcGVydHk8L2NvZGU+LgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQuIFNob3VsZCBub3QgYmUgbnVsbC4KKyAgICAgKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRzIGEgUG9pbnRGIHRvIHRoZSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2V0dGVyLiBNYXkgYmUKKyAgICAgKiAgICAgICAgICAgICAgICAgIG51bGwgaWYgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4KKyAgICAgKiBAcGFyYW0gcGF0aCBUaGUgPGNvZGU+UGF0aDwvY29kZT4gdG8gYW5pbWF0ZSB2YWx1ZXMgYWxvbmcuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBhbG9uZyA8Y29kZT5wYXRoPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIDxULCBWPiBPYmplY3RBbmltYXRvciBvZk9iamVjdChUIHRhcmdldCwgUHJvcGVydHk8VCwgVj4gcHJvcGVydHksCisgICAgICAgICAgICBUeXBlQ29udmVydGVyPFBvaW50RiwgVj4gY29udmVydGVyLCBQYXRoIHBhdGgpIHsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgcHZoID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZPYmplY3QocHJvcGVydHksIGNvbnZlcnRlciwgcGF0aCk7CisgICAgICAgIHJldHVybiBvZlByb3BlcnR5VmFsdWVzSG9sZGVyKHRhcmdldCwgcHZoKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiB0aGUgc2V0cyBvZiB2YWx1ZXMgc3BlY2lmaWVkCiAgICAgICogaW4gPGNvZGU+UHJvcGVydHlWYWx1ZUhvbGRlcjwvY29kZT4gb2JqZWN0cy4gVGhpcyB2YXJpYW50IHNob3VsZCBiZSB1c2VkIHdoZW4gYW5pbWF0aW5nCiAgICAgICogc2V2ZXJhbCBwcm9wZXJ0aWVzIGF0IG9uY2Ugd2l0aCB0aGUgc2FtZSBPYmplY3RBbmltYXRvciwgc2luY2UgUHJvcGVydHlWYWx1ZXNIb2xkZXIgYWxsb3dzCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vUG9pbnRGRXZhbHVhdG9yLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vUG9pbnRGRXZhbHVhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkNTAxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9Qb2ludEZFdmFsdWF0b3IuamF2YQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgYW5kcm9pZC5hbmltYXRpb247CisKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50RjsKKworLyoqCisgKiBUaGlzIGV2YWx1YXRvciBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHR5cGUgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIDxjb2RlPlBvaW50RjwvY29kZT4gdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgUG9pbnRGRXZhbHVhdG9yIGltcGxlbWVudHMgVHlwZUV2YWx1YXRvcjxQb2ludEY+IHsKKworICAgIC8qKgorICAgICAqIFdoZW4gbnVsbCwgYSBuZXcgUG9pbnRGIGlzIHJldHVybmVkIG9uIGV2ZXJ5IGV2YWx1YXRlIGNhbGwuIFdoZW4gbm9uLW51bGwsCisgICAgICogbVBvaW50IHdpbGwgYmUgbW9kaWZpZWQgYW5kIHJldHVybmVkIG9uIGV2ZXJ5IGV2YWx1YXRlLgorICAgICAqLworICAgIHByaXZhdGUgUG9pbnRGIG1Qb2ludDsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIFBvaW50RkV2YWx1YXRvciB0aGF0IHJldHVybnMgYSBuZXcgUG9pbnRGIG9uIGV2ZXJ5IGV2YWx1YXRlIGNhbGwuCisgICAgICogVG8gYXZvaWQgY3JlYXRpbmcgYW4gb2JqZWN0IGZvciBlYWNoIGV2YWx1YXRlIGNhbGwsCisgICAgICoge0BsaW5rIFBvaW50RkV2YWx1YXRvciNQb2ludEZFdmFsdWF0b3IoYW5kcm9pZC5ncmFwaGljcy5Qb2ludEYpfSBzaG91bGQgYmUgdXNlZAorICAgICAqIHdoZW5ldmVyIHBvc3NpYmxlLgorICAgICAqLworICAgIHB1YmxpYyBQb2ludEZFdmFsdWF0b3IoKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIFBvaW50RkV2YWx1YXRvciB0aGF0IG1vZGlmaWVzIGFuZCByZXR1cm5zIDxjb2RlPnJldXNlPC9jb2RlPgorICAgICAqIGluIHtAbGluayAjZXZhbHVhdGUoZmxvYXQsIGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGLCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50Ril9IGNhbGxzLgorICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tCisgICAgICoge0BsaW5rICNldmFsdWF0ZShmbG9hdCwgYW5kcm9pZC5ncmFwaGljcy5Qb2ludEYsIGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGKX0gc2hvdWxkCisgICAgICogbm90IGJlIGNhY2hlZCBiZWNhdXNlIGl0IHdpbGwgY2hhbmdlIG92ZXIgdGltZSBhcyB0aGUgb2JqZWN0IGlzIHJldXNlZCBvbiBlYWNoCisgICAgICogY2FsbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSByZXVzZSBBIFBvaW50RiB0byBiZSBtb2RpZmllZCBhbmQgcmV0dXJuZWQgYnkgZXZhbHVhdGUuCisgICAgICovCisgICAgcHVibGljIFBvaW50RkV2YWx1YXRvcihQb2ludEYgcmV1c2UpIHsKKyAgICAgICAgbVBvaW50ID0gcmV1c2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXN1bHQgb2YgbGluZWFybHkgaW50ZXJwb2xhdGluZyB0aGUgc3RhcnQgYW5kCisgICAgICogZW5kIFBvaW50RiB2YWx1ZXMsIHdpdGggPGNvZGU+ZnJhY3Rpb248L2NvZGU+IHJlcHJlc2VudGluZyB0aGUgcHJvcG9ydGlvbgorICAgICAqIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgdmFsdWVzLiBUaGUgY2FsY3VsYXRpb24gaXMgYSBzaW1wbGUgcGFyYW1ldHJpYworICAgICAqIGNhbGN1bGF0aW9uIG9uIGVhY2ggb2YgdGhlIHNlcGFyYXRlIGNvbXBvbmVudHMgaW4gdGhlIFBvaW50RiBvYmplY3RzCisgICAgICogKHgsIHkpLgorICAgICAqCisgICAgICogPHA+SWYge0BsaW5rICNQb2ludEZFdmFsdWF0b3IoYW5kcm9pZC5ncmFwaGljcy5Qb2ludEYpfSB3YXMgdXNlZCB0byBjb25zdHJ1Y3QKKyAgICAgKiB0aGlzIFBvaW50RkV2YWx1YXRvciwgdGhlIG9iamVjdCByZXR1cm5lZCB3aWxsIGJlIHRoZSA8Y29kZT5yZXVzZTwvY29kZT4KKyAgICAgKiBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGZyYWN0aW9uICAgVGhlIGZyYWN0aW9uIGZyb20gdGhlIHN0YXJ0aW5nIHRvIHRoZSBlbmRpbmcgdmFsdWVzCisgICAgICogQHBhcmFtIHN0YXJ0VmFsdWUgVGhlIHN0YXJ0IFBvaW50RgorICAgICAqIEBwYXJhbSBlbmRWYWx1ZSAgIFRoZSBlbmQgUG9pbnRGCisgICAgICogQHJldHVybiBBIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgdmFsdWVzLCBnaXZlbiB0aGUKKyAgICAgKiAgICAgICAgIDxjb2RlPmZyYWN0aW9uPC9jb2RlPiBwYXJhbWV0ZXIuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFBvaW50RiBldmFsdWF0ZShmbG9hdCBmcmFjdGlvbiwgUG9pbnRGIHN0YXJ0VmFsdWUsIFBvaW50RiBlbmRWYWx1ZSkgeworICAgICAgICBmbG9hdCB4ID0gc3RhcnRWYWx1ZS54ICsgKGZyYWN0aW9uICogKGVuZFZhbHVlLnggLSBzdGFydFZhbHVlLngpKTsKKyAgICAgICAgZmxvYXQgeSA9IHN0YXJ0VmFsdWUueSArIChmcmFjdGlvbiAqIChlbmRWYWx1ZS55IC0gc3RhcnRWYWx1ZS55KSk7CisKKyAgICAgICAgaWYgKG1Qb2ludCAhPSBudWxsKSB7CisgICAgICAgICAgICBtUG9pbnQuc2V0KHgsIHkpOworICAgICAgICAgICAgcmV0dXJuIG1Qb2ludDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnRGKHgsIHkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXIuamF2YQppbmRleCA0MzAxNGFkLi4xYjAyOGUwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXIuamF2YQpAQCAtMTYsNiArMTYsOSBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYW5pbWF0aW9uOwogCitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYXRoOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGOworaW1wb3J0IGFuZHJvaWQudXRpbC5GbG9hdE1hdGg7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkZsb2F0UHJvcGVydHk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkludFByb3BlcnR5OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CkBAIC0xMjQsNiArMTI3LDExIEBACiAgICAgcHJpdmF0ZSBPYmplY3QgbUFuaW1hdGVkVmFsdWU7CiAKICAgICAvKioKKyAgICAgKiBDb252ZXJ0cyBmcm9tIHRoZSBzb3VyY2UgT2JqZWN0IHR5cGUgdG8gdGhlIHNldHRlciBPYmplY3QgdHlwZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIFR5cGVDb252ZXJ0ZXIgbUNvbnZlcnRlcjsKKworICAgIC8qKgogICAgICAqIEludGVybmFsIHV0aWxpdHkgY29uc3RydWN0b3IsIHVzZWQgYnkgdGhlIGZhY3RvcnkgbWV0aG9kcyB0byBzZXQgdGhlIHByb3BlcnR5IG5hbWUuCiAgICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZm9yIHRoaXMgaG9sZGVyLgogICAgICAqLwpAQCAtMTY2LDYgKzE3NCwxMDQgQEAKIAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBQcm9wZXJ0eVZhbHVlc0hvbGRlciB3aXRoIGEgZ2l2ZW4gcHJvcGVydHkgbmFtZSBhbmQKKyAgICAgKiBzZXQgb2YgPGNvZGU+aW50W108L2NvZGU+IHZhbHVlcy4gQXQgbGVhc3QgdHdvIDxjb2RlPmludFtdPC9jb2RlPiB2YWx1ZXMgbXVzdCBiZSBzdXBwbGllZCwKKyAgICAgKiBhIHN0YXJ0IGFuZCBlbmQgdmFsdWUuIElmIG1vcmUgdmFsdWVzIGFyZSBzdXBwbGllZCwgdGhlIHZhbHVlcyB3aWxsIGJlIGFuaW1hdGVkIGZyb20gdGhlCisgICAgICogc3RhcnQsIHRocm91Z2ggYWxsIGludGVybWVkaWF0ZSB2YWx1ZXMgdG8gdGhlIGVuZCB2YWx1ZS4gV2hlbiB1c2VkIHdpdGggT2JqZWN0QW5pbWF0b3IsCisgICAgICogdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheSByZXByZXNlbnQgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIHNldHRlciBmdW5jdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkLiBDYW4gYWxzbyBiZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhc2Utc2Vuc2l0aXZlIG5hbWUgb2YgdGhlIGVudGlyZSBzZXR0ZXIgbWV0aG9kLiBTaG91bGQgbm90IGJlIG51bGwuCisgICAgICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIHRoYXQgdGhlIHByb3BlcnR5IHdpbGwgYW5pbWF0ZSBiZXR3ZWVuLgorICAgICAqIEByZXR1cm4gUHJvcGVydHlWYWx1ZXNIb2xkZXIgVGhlIGNvbnN0cnVjdGVkIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9iamVjdC4KKyAgICAgKiBAc2VlIEludEFycmF5RXZhbHVhdG9yI0ludEFycmF5RXZhbHVhdG9yKGludFtdKQorICAgICAqIEBzZWUgT2JqZWN0QW5pbWF0b3Ijb2ZNdWx0aUludChPYmplY3QsIFN0cmluZywgVHlwZUNvbnZlcnRlciwgVHlwZUV2YWx1YXRvciwgT2JqZWN0W10pCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk11bHRpSW50KFN0cmluZyBwcm9wZXJ0eU5hbWUsIGludFtdW10gdmFsdWVzKSB7CisgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoIDwgMikgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQXQgbGVhc3QgMiB2YWx1ZXMgbXVzdCBiZSBzdXBwbGllZCIpOworICAgICAgICB9CisgICAgICAgIGludCBudW1QYXJhbWV0ZXJzID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInZhbHVlcyBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gdmFsdWVzW2ldLmxlbmd0aDsKKyAgICAgICAgICAgIGlmIChpID09IDApIHsKKyAgICAgICAgICAgICAgICBudW1QYXJhbWV0ZXJzID0gbGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggIT0gbnVtUGFyYW1ldGVycykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlZhbHVlcyBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGxlbmd0aCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEludEFycmF5RXZhbHVhdG9yIGV2YWx1YXRvciA9IG5ldyBJbnRBcnJheUV2YWx1YXRvcihuZXcgaW50W251bVBhcmFtZXRlcnNdKTsKKyAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUludFZhbHVlc0hvbGRlcihwcm9wZXJ0eU5hbWUsIG51bGwsIGV2YWx1YXRvciwgKE9iamVjdFtdKSB2YWx1ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBQcm9wZXJ0eVZhbHVlc0hvbGRlciB3aXRoIGEgZ2l2ZW4gcHJvcGVydHkgbmFtZSB0byB1c2UKKyAgICAgKiBhcyBhIG11bHRpLWludCBzZXR0ZXIuIFRoZSB2YWx1ZXMgYXJlIGFuaW1hdGVkIGFsb25nIHRoZSBwYXRoLCB3aXRoIHRoZSBmaXJzdAorICAgICAqIHBhcmFtZXRlciBvZiB0aGUgc2V0dGVyIHNldCB0byB0aGUgeCBjb29yZGluYXRlIGFuZCB0aGUgc2Vjb25kIHNldCB0byB0aGUgeSBjb29yZGluYXRlLgorICAgICAqCisgICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQuIENhbiBhbHNvIGJlIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FzZS1zZW5zaXRpdmUgbmFtZSBvZiB0aGUgZW50aXJlIHNldHRlciBtZXRob2QuIFNob3VsZCBub3QgYmUgbnVsbC4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBzZXR0ZXIgbXVzdCB0YWtlIGV4YWN0bHkgdHdvIDxjb2RlPmludDwvY29kZT4gcGFyYW1ldGVycy4KKyAgICAgKiBAcGFyYW0gcGF0aCBUaGUgUGF0aCBhbG9uZyB3aGljaCB0aGUgdmFsdWVzIHNob3VsZCBiZSBhbmltYXRlZC4KKyAgICAgKiBAcmV0dXJuIFByb3BlcnR5VmFsdWVzSG9sZGVyIFRoZSBjb25zdHJ1Y3RlZCBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvYmplY3QuCisgICAgICogQHNlZSBPYmplY3RBbmltYXRvciNvZlByb3BlcnR5VmFsdWVzSG9sZGVyKE9iamVjdCwgUHJvcGVydHlWYWx1ZXNIb2xkZXIuLi4pCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk11bHRpSW50KFN0cmluZyBwcm9wZXJ0eU5hbWUsIFBhdGggcGF0aCkgeworICAgICAgICBLZXlmcmFtZVtdIGtleWZyYW1lcyA9IGNyZWF0ZUtleWZyYW1lcyhwYXRoKTsKKyAgICAgICAgS2V5ZnJhbWVTZXQga2V5ZnJhbWVTZXQgPSBLZXlmcmFtZVNldC5vZktleWZyYW1lKGtleWZyYW1lcyk7CisgICAgICAgIFR5cGVFdmFsdWF0b3I8UG9pbnRGPiBldmFsdWF0b3IgPSBuZXcgUG9pbnRGRXZhbHVhdG9yKG5ldyBQb2ludEYoKSk7CisgICAgICAgIFBvaW50RlRvSW50QXJyYXkgY29udmVydGVyID0gbmV3IFBvaW50RlRvSW50QXJyYXkoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUludFZhbHVlc0hvbGRlcihwcm9wZXJ0eU5hbWUsIGNvbnZlcnRlciwgZXZhbHVhdG9yLCBrZXlmcmFtZVNldCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBhbmQKKyAgICAgKiBzZXQgb2YgT2JqZWN0IHZhbHVlcyBmb3IgdXNlIHdpdGggT2JqZWN0QW5pbWF0b3IgbXVsdGktdmFsdWUgc2V0dGVycy4gVGhlIE9iamVjdAorICAgICAqIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIDxjb2RlPmludFtdPC9jb2RlPiB1c2luZyB0aGUgY29udmVydGVyLgorICAgICAqCisgICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQgb3IgY29tcGxldGUgbmFtZSBvZiB0aGUgc2V0dGVyLgorICAgICAqICAgICAgICAgICAgICAgICAgICAgU2hvdWxkIG5vdCBiZSBudWxsLgorICAgICAqIEBwYXJhbSBjb252ZXJ0ZXIgVXNlZCB0byBjb252ZXJ0IHRoZSBhbmltYXRlZCB2YWx1ZSB0byBzZXR0ZXIgcGFyYW1ldGVycy4KKyAgICAgKiBAcGFyYW0gZXZhbHVhdG9yIEEgVHlwZUV2YWx1YXRvciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggYW5pbWF0aW9uIGZyYW1lIHRvCisgICAgICogcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGludGVycG9sYXRpb24gYmV0d2VlbiB0aGUgT2JqZWN0IHZhbHVlcyB0byBkZXJpdmUgdGhlIGFuaW1hdGVkCisgICAgICogdmFsdWUuCisgICAgICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIHRoYXQgdGhlIHByb3BlcnR5IHdpbGwgYW5pbWF0ZSBiZXR3ZWVuLgorICAgICAqIEByZXR1cm4gUHJvcGVydHlWYWx1ZXNIb2xkZXIgVGhlIGNvbnN0cnVjdGVkIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9iamVjdC4KKyAgICAgKiBAc2VlIE9iamVjdEFuaW1hdG9yI29mTXVsdGlJbnQoT2JqZWN0LCBTdHJpbmcsIFR5cGVDb252ZXJ0ZXIsIFR5cGVFdmFsdWF0b3IsIE9iamVjdFtdKQorICAgICAqIEBzZWUgT2JqZWN0QW5pbWF0b3Ijb2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcihPYmplY3QsIFByb3BlcnR5VmFsdWVzSG9sZGVyLi4uKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgPFY+IFByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlJbnQoU3RyaW5nIHByb3BlcnR5TmFtZSwKKyAgICAgICAgICAgIFR5cGVDb252ZXJ0ZXI8ViwgaW50W10+IGNvbnZlcnRlciwgVHlwZUV2YWx1YXRvcjxWPiBldmFsdWF0b3IsIFYuLi4gdmFsdWVzKSB7CisgICAgICAgIHJldHVybiBuZXcgTXVsdGlJbnRWYWx1ZXNIb2xkZXIocHJvcGVydHlOYW1lLCBjb252ZXJ0ZXIsIGV2YWx1YXRvciwgdmFsdWVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBuYW1lIG9yCisgICAgICogc2V0dGVyIG5hbWUgZm9yIHVzZSBpbiBhIG11bHRpLWludCBzZXR0ZXIgZnVuY3Rpb24gdXNpbmcgT2JqZWN0QW5pbWF0b3IuIFRoZSB2YWx1ZXMgY2FuIGJlCisgICAgICogb2YgYW55IHR5cGUsIGJ1dCB0aGUgdHlwZSBzaG91bGQgYmUgY29uc2lzdGVudCBzbyB0aGF0IHRoZSBzdXBwbGllZAorICAgICAqIHtAbGluayBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yfSBjYW4gYmUgdXNlZCB0byB0byBldmFsdWF0ZSB0aGUgYW5pbWF0ZWQgdmFsdWUuIFRoZQorICAgICAqIDxjb2RlPmNvbnZlcnRlcjwvY29kZT4gY29udmVydHMgdGhlIHZhbHVlcyB0byBwYXJhbWV0ZXJzIGluIHRoZSBzZXR0ZXIgZnVuY3Rpb24uCisgICAgICoKKyAgICAgKiA8cD5BdCBsZWFzdCB0d28gdmFsdWVzIG11c3QgYmUgc3VwcGxpZWQsIGEgc3RhcnQgYW5kIGFuIGVuZCB2YWx1ZS48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2V0IG9mIHZhbHVlcy4gVGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICAgbWF5IGFsc28gYmUgdGhlIGNvbXBsZXRlIG5hbWUgb2YgYSBzZXR0ZXIgZnVuY3Rpb24uCisgICAgICogQHBhcmFtIGNvbnZlcnRlciAgICBDb252ZXJ0cyA8Y29kZT52YWx1ZXM8L2NvZGU+IGludG8gaW50IHBhcmFtZXRlcnMgZm9yIHRoZSBzZXR0ZXIuCisgICAgICogICAgICAgICAgICAgICAgICAgICBDYW4gYmUgbnVsbCBpZiB0aGUgS2V5ZnJhbWVzIGhhdmUgaW50W10gdmFsdWVzLgorICAgICAqIEBwYXJhbSBldmFsdWF0b3IgICAgVXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHZhbHVlcy4KKyAgICAgKiBAcGFyYW0gdmFsdWVzICAgICAgIFRoZSB2YWx1ZXMgYXQgc3BlY2lmaWMgZnJhY3Rpb25hbCB0aW1lcyB0byBldmFsdWF0ZSBiZXR3ZWVuCisgICAgICogQHJldHVybiBBIFByb3BlcnR5VmFsdWVzSG9sZGVyIGZvciBhIG11bHRpLWludCBwYXJhbWV0ZXIgc2V0dGVyLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlJbnQoU3RyaW5nIHByb3BlcnR5TmFtZSwKKyAgICAgICAgICAgIFR5cGVDb252ZXJ0ZXI8VCwgaW50W10+IGNvbnZlcnRlciwgVHlwZUV2YWx1YXRvcjxUPiBldmFsdWF0b3IsIEtleWZyYW1lLi4uIHZhbHVlcykgeworICAgICAgICBLZXlmcmFtZVNldCBrZXlmcmFtZVNldCA9IEtleWZyYW1lU2V0Lm9mS2V5ZnJhbWUodmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUludFZhbHVlc0hvbGRlcihwcm9wZXJ0eU5hbWUsIGNvbnZlcnRlciwgZXZhbHVhdG9yLCBrZXlmcmFtZVNldCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBuYW1lIGFuZAogICAgICAqIHNldCBvZiBmbG9hdCB2YWx1ZXMuCiAgICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQuCiAgICAgICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIHRoYXQgdGhlIG5hbWVkIHByb3BlcnR5IHdpbGwgYW5pbWF0ZSBiZXR3ZWVuLgpAQCAtMTg4LDYgKzI5NCwxMDMgQEAKIAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBQcm9wZXJ0eVZhbHVlc0hvbGRlciB3aXRoIGEgZ2l2ZW4gcHJvcGVydHkgbmFtZSBhbmQKKyAgICAgKiBzZXQgb2YgPGNvZGU+ZmxvYXRbXTwvY29kZT4gdmFsdWVzLiBBdCBsZWFzdCB0d28gPGNvZGU+ZmxvYXRbXTwvY29kZT4gdmFsdWVzIG11c3QgYmUgc3VwcGxpZWQsCisgICAgICogYSBzdGFydCBhbmQgZW5kIHZhbHVlLiBJZiBtb3JlIHZhbHVlcyBhcmUgc3VwcGxpZWQsIHRoZSB2YWx1ZXMgd2lsbCBiZSBhbmltYXRlZCBmcm9tIHRoZQorICAgICAqIHN0YXJ0LCB0aHJvdWdoIGFsbCBpbnRlcm1lZGlhdGUgdmFsdWVzIHRvIHRoZSBlbmQgdmFsdWUuIFdoZW4gdXNlZCB3aXRoIE9iamVjdEFuaW1hdG9yLAorICAgICAqIHRoZSBlbGVtZW50cyBvZiB0aGUgYXJyYXkgcmVwcmVzZW50IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBzZXR0ZXIgZnVuY3Rpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZC4gQ2FuIGFsc28gYmUgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICBjYXNlLXNlbnNpdGl2ZSBuYW1lIG9mIHRoZSBlbnRpcmUgc2V0dGVyIG1ldGhvZC4gU2hvdWxkIG5vdCBiZSBudWxsLgorICAgICAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyB0aGF0IHRoZSBwcm9wZXJ0eSB3aWxsIGFuaW1hdGUgYmV0d2Vlbi4KKyAgICAgKiBAcmV0dXJuIFByb3BlcnR5VmFsdWVzSG9sZGVyIFRoZSBjb25zdHJ1Y3RlZCBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvYmplY3QuCisgICAgICogQHNlZSBGbG9hdEFycmF5RXZhbHVhdG9yI0Zsb2F0QXJyYXlFdmFsdWF0b3IoZmxvYXRbXSkKKyAgICAgKiBAc2VlIE9iamVjdEFuaW1hdG9yI29mTXVsdGlGbG9hdChPYmplY3QsIFN0cmluZywgVHlwZUNvbnZlcnRlciwgVHlwZUV2YWx1YXRvciwgT2JqZWN0W10pCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk11bHRpRmxvYXQoU3RyaW5nIHByb3BlcnR5TmFtZSwgZmxvYXRbXVtdIHZhbHVlcykgeworICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkF0IGxlYXN0IDIgdmFsdWVzIG11c3QgYmUgc3VwcGxpZWQiKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgbnVtUGFyYW1ldGVycyA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAodmFsdWVzW2ldID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ2YWx1ZXMgbXVzdCBub3QgYmUgbnVsbCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGxlbmd0aCA9IHZhbHVlc1tpXS5sZW5ndGg7CisgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbnVtUGFyYW1ldGVycyA9IGxlbmd0aDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoICE9IG51bVBhcmFtZXRlcnMpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJWYWx1ZXMgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBsZW5ndGgiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBGbG9hdEFycmF5RXZhbHVhdG9yIGV2YWx1YXRvciA9IG5ldyBGbG9hdEFycmF5RXZhbHVhdG9yKG5ldyBmbG9hdFtudW1QYXJhbWV0ZXJzXSk7CisgICAgICAgIHJldHVybiBuZXcgTXVsdGlGbG9hdFZhbHVlc0hvbGRlcihwcm9wZXJ0eU5hbWUsIG51bGwsIGV2YWx1YXRvciwgKE9iamVjdFtdKSB2YWx1ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBQcm9wZXJ0eVZhbHVlc0hvbGRlciB3aXRoIGEgZ2l2ZW4gcHJvcGVydHkgbmFtZSB0byB1c2UKKyAgICAgKiBhcyBhIG11bHRpLWZsb2F0IHNldHRlci4gVGhlIHZhbHVlcyBhcmUgYW5pbWF0ZWQgYWxvbmcgdGhlIHBhdGgsIHdpdGggdGhlIGZpcnN0CisgICAgICogcGFyYW1ldGVyIG9mIHRoZSBzZXR0ZXIgc2V0IHRvIHRoZSB4IGNvb3JkaW5hdGUgYW5kIHRoZSBzZWNvbmQgc2V0IHRvIHRoZSB5IGNvb3JkaW5hdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZC4gQ2FuIGFsc28gYmUgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICBjYXNlLXNlbnNpdGl2ZSBuYW1lIG9mIHRoZSBlbnRpcmUgc2V0dGVyIG1ldGhvZC4gU2hvdWxkIG5vdCBiZSBudWxsLgorICAgICAqICAgICAgICAgICAgICAgICAgICAgVGhlIHNldHRlciBtdXN0IHRha2UgZXhhY3RseSB0d28gPGNvZGU+ZmxvYXQ8L2NvZGU+IHBhcmFtZXRlcnMuCisgICAgICogQHBhcmFtIHBhdGggVGhlIFBhdGggYWxvbmcgd2hpY2ggdGhlIHZhbHVlcyBzaG91bGQgYmUgYW5pbWF0ZWQuCisgICAgICogQHJldHVybiBQcm9wZXJ0eVZhbHVlc0hvbGRlciBUaGUgY29uc3RydWN0ZWQgUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2JqZWN0LgorICAgICAqIEBzZWUgT2JqZWN0QW5pbWF0b3Ijb2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcihPYmplY3QsIFByb3BlcnR5VmFsdWVzSG9sZGVyLi4uKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZNdWx0aUZsb2F0KFN0cmluZyBwcm9wZXJ0eU5hbWUsIFBhdGggcGF0aCkgeworICAgICAgICBLZXlmcmFtZVtdIGtleWZyYW1lcyA9IGNyZWF0ZUtleWZyYW1lcyhwYXRoKTsKKyAgICAgICAgS2V5ZnJhbWVTZXQga2V5ZnJhbWVTZXQgPSBLZXlmcmFtZVNldC5vZktleWZyYW1lKGtleWZyYW1lcyk7CisgICAgICAgIFR5cGVFdmFsdWF0b3I8UG9pbnRGPiBldmFsdWF0b3IgPSBuZXcgUG9pbnRGRXZhbHVhdG9yKG5ldyBQb2ludEYoKSk7CisgICAgICAgIFBvaW50RlRvRmxvYXRBcnJheSBjb252ZXJ0ZXIgPSBuZXcgUG9pbnRGVG9GbG9hdEFycmF5KCk7CisgICAgICAgIHJldHVybiBuZXcgTXVsdGlGbG9hdFZhbHVlc0hvbGRlcihwcm9wZXJ0eU5hbWUsIGNvbnZlcnRlciwgZXZhbHVhdG9yLCBrZXlmcmFtZVNldCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBhbmQKKyAgICAgKiBzZXQgb2YgT2JqZWN0IHZhbHVlcyBmb3IgdXNlIHdpdGggT2JqZWN0QW5pbWF0b3IgbXVsdGktdmFsdWUgc2V0dGVycy4gVGhlIE9iamVjdAorICAgICAqIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIDxjb2RlPmZsb2F0W108L2NvZGU+IHVzaW5nIHRoZSBjb252ZXJ0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZCBvciBjb21wbGV0ZSBuYW1lIG9mIHRoZSBzZXR0ZXIuCisgICAgICogICAgICAgICAgICAgICAgICAgICBTaG91bGQgbm90IGJlIG51bGwuCisgICAgICogQHBhcmFtIGNvbnZlcnRlciBVc2VkIHRvIGNvbnZlcnQgdGhlIGFuaW1hdGVkIHZhbHVlIHRvIHNldHRlciBwYXJhbWV0ZXJzLgorICAgICAqIEBwYXJhbSBldmFsdWF0b3IgQSBUeXBlRXZhbHVhdG9yIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBhbmltYXRpb24gZnJhbWUgdG8KKyAgICAgKiBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHRoZSBPYmplY3QgdmFsdWVzIHRvIGRlcml2ZSB0aGUgYW5pbWF0ZWQKKyAgICAgKiB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgdGhhdCB0aGUgcHJvcGVydHkgd2lsbCBhbmltYXRlIGJldHdlZW4uCisgICAgICogQHJldHVybiBQcm9wZXJ0eVZhbHVlc0hvbGRlciBUaGUgY29uc3RydWN0ZWQgUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2JqZWN0LgorICAgICAqIEBzZWUgT2JqZWN0QW5pbWF0b3Ijb2ZNdWx0aUZsb2F0KE9iamVjdCwgU3RyaW5nLCBUeXBlQ29udmVydGVyLCBUeXBlRXZhbHVhdG9yLCBPYmplY3RbXSkKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIDxWPiBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk11bHRpRmxvYXQoU3RyaW5nIHByb3BlcnR5TmFtZSwKKyAgICAgICAgICAgIFR5cGVDb252ZXJ0ZXI8ViwgZmxvYXRbXT4gY29udmVydGVyLCBUeXBlRXZhbHVhdG9yPFY+IGV2YWx1YXRvciwgVi4uLiB2YWx1ZXMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUZsb2F0VmFsdWVzSG9sZGVyKHByb3BlcnR5TmFtZSwgY29udmVydGVyLCBldmFsdWF0b3IsIHZhbHVlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgbmFtZSBvcgorICAgICAqIHNldHRlciBuYW1lIGZvciB1c2UgaW4gYSBtdWx0aS1mbG9hdCBzZXR0ZXIgZnVuY3Rpb24gdXNpbmcgT2JqZWN0QW5pbWF0b3IuIFRoZSB2YWx1ZXMgY2FuIGJlCisgICAgICogb2YgYW55IHR5cGUsIGJ1dCB0aGUgdHlwZSBzaG91bGQgYmUgY29uc2lzdGVudCBzbyB0aGF0IHRoZSBzdXBwbGllZAorICAgICAqIHtAbGluayBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yfSBjYW4gYmUgdXNlZCB0byB0byBldmFsdWF0ZSB0aGUgYW5pbWF0ZWQgdmFsdWUuIFRoZQorICAgICAqIDxjb2RlPmNvbnZlcnRlcjwvY29kZT4gY29udmVydHMgdGhlIHZhbHVlcyB0byBwYXJhbWV0ZXJzIGluIHRoZSBzZXR0ZXIgZnVuY3Rpb24uCisgICAgICoKKyAgICAgKiA8cD5BdCBsZWFzdCB0d28gdmFsdWVzIG11c3QgYmUgc3VwcGxpZWQsIGEgc3RhcnQgYW5kIGFuIGVuZCB2YWx1ZS48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2V0IG9mIHZhbHVlcy4gVGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICAgbWF5IGFsc28gYmUgdGhlIGNvbXBsZXRlIG5hbWUgb2YgYSBzZXR0ZXIgZnVuY3Rpb24uCisgICAgICogQHBhcmFtIGNvbnZlcnRlciAgICBDb252ZXJ0cyA8Y29kZT52YWx1ZXM8L2NvZGU+IGludG8gZmxvYXQgcGFyYW1ldGVycyBmb3IgdGhlIHNldHRlci4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIENhbiBiZSBudWxsIGlmIHRoZSBLZXlmcmFtZXMgaGF2ZSBmbG9hdFtdIHZhbHVlcy4KKyAgICAgKiBAcGFyYW0gZXZhbHVhdG9yICAgIFVzZWQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiB2YWx1ZXMuCisgICAgICogQHBhcmFtIHZhbHVlcyAgICAgICBUaGUgdmFsdWVzIGF0IHNwZWNpZmljIGZyYWN0aW9uYWwgdGltZXMgdG8gZXZhbHVhdGUgYmV0d2VlbgorICAgICAqIEByZXR1cm4gQSBQcm9wZXJ0eVZhbHVlc0hvbGRlciBmb3IgYSBtdWx0aS1mbG9hdCBwYXJhbWV0ZXIgc2V0dGVyLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlGbG9hdChTdHJpbmcgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgVHlwZUNvbnZlcnRlcjxULCBmbG9hdFtdPiBjb252ZXJ0ZXIsIFR5cGVFdmFsdWF0b3I8VD4gZXZhbHVhdG9yLCBLZXlmcmFtZS4uLiB2YWx1ZXMpIHsKKyAgICAgICAgS2V5ZnJhbWVTZXQga2V5ZnJhbWVTZXQgPSBLZXlmcmFtZVNldC5vZktleWZyYW1lKHZhbHVlcyk7CisgICAgICAgIHJldHVybiBuZXcgTXVsdGlGbG9hdFZhbHVlc0hvbGRlcihwcm9wZXJ0eU5hbWUsIGNvbnZlcnRlciwgZXZhbHVhdG9yLCBrZXlmcmFtZVNldCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBuYW1lIGFuZAogICAgICAqIHNldCBvZiBPYmplY3QgdmFsdWVzLiBUaGlzIHZhcmlhbnQgYWxzbyB0YWtlcyBhIFR5cGVFdmFsdWF0b3IgYmVjYXVzZSB0aGUgc3lzdGVtCiAgICAgICogY2Fubm90IGF1dG9tYXRpY2FsbHkgaW50ZXJwb2xhdGUgYmV0d2VlbiBvYmplY3RzIG9mIHVua25vd24gdHlwZS4KICAgICAgKgpAQCAtMjA3LDYgKzQxMCwyNyBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBQcm9wZXJ0eVZhbHVlc0hvbGRlciB3aXRoIGEgZ2l2ZW4gcHJvcGVydHkgbmFtZSBhbmQKKyAgICAgKiBhIFBhdGggYWxvbmcgd2hpY2ggdGhlIHZhbHVlcyBzaG91bGQgYmUgYW5pbWF0ZWQuIFRoaXMgdmFyaWFudCBzdXBwb3J0cyBhCisgICAgICogPGNvZGU+VHlwZUNvbnZlcnRlcjwvY29kZT4gdG8gY29udmVydCBmcm9tIDxjb2RlPlBvaW50RjwvY29kZT4gdG8gdGhlIHRhcmdldAorICAgICAqIHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZC4KKyAgICAgKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRzIGEgUG9pbnRGIHRvIHRoZSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2V0dGVyLiBNYXkgYmUKKyAgICAgKiAgICAgICAgICAgICAgICAgIG51bGwgaWYgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4KKyAgICAgKiBAcGFyYW0gcGF0aCBUaGUgUGF0aCBhbG9uZyB3aGljaCB0aGUgdmFsdWVzIHNob3VsZCBiZSBhbmltYXRlZC4KKyAgICAgKiBAcmV0dXJuIFByb3BlcnR5VmFsdWVzSG9sZGVyIFRoZSBjb25zdHJ1Y3RlZCBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk9iamVjdChTdHJpbmcgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgVHlwZUNvbnZlcnRlcjxQb2ludEYsID8+IGNvbnZlcnRlciwgUGF0aCBwYXRoKSB7CisgICAgICAgIEtleWZyYW1lW10ga2V5ZnJhbWVzID0gY3JlYXRlS2V5ZnJhbWVzKHBhdGgpOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBwdmggPSBvZktleWZyYW1lKHByb3BlcnR5TmFtZSwga2V5ZnJhbWVzKTsKKyAgICAgICAgcHZoLnNldEV2YWx1YXRvcihuZXcgUG9pbnRGRXZhbHVhdG9yKG5ldyBQb2ludEYoKSkpOworICAgICAgICBwdmguc2V0Q29udmVydGVyKGNvbnZlcnRlcik7CisgICAgICAgIHJldHVybiBwdmg7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBhbmQKICAgICAgKiBzZXQgb2YgT2JqZWN0IHZhbHVlcy4gVGhpcyB2YXJpYW50IGFsc28gdGFrZXMgYSBUeXBlRXZhbHVhdG9yIGJlY2F1c2UgdGhlIHN5c3RlbQogICAgICAqIGNhbm5vdCBhdXRvbWF0aWNhbGx5IGludGVycG9sYXRlIGJldHdlZW4gb2JqZWN0cyBvZiB1bmtub3duIHR5cGUuCkBAIC0yMjcsNiArNDUxLDU1IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBhbmQKKyAgICAgKiBzZXQgb2YgT2JqZWN0IHZhbHVlcy4gVGhpcyB2YXJpYW50IGFsc28gdGFrZXMgYSBUeXBlRXZhbHVhdG9yIGJlY2F1c2UgdGhlIHN5c3RlbQorICAgICAqIGNhbm5vdCBhdXRvbWF0aWNhbGx5IGludGVycG9sYXRlIGJldHdlZW4gb2JqZWN0cyBvZiB1bmtub3duIHR5cGUuIFRoaXMgdmFyaWFudCBhbHNvCisgICAgICogdGFrZXMgYSA8Y29kZT5UeXBlQ29udmVydGVyPC9jb2RlPiB0byBjb252ZXJ0IGZyb20gYW5pbWF0ZWQgdmFsdWVzIHRvIHRoZSB0eXBlCisgICAgICogb2YgdGhlIHByb3BlcnR5LiBJZiBvbmx5IG9uZSB2YWx1ZSBpcyBzdXBwbGllZCwgdGhlIDxjb2RlPlR5cGVDb252ZXJ0ZXI8L2NvZGU+CisgICAgICogbXVzdCBpbXBsZW1lbnQge0BsaW5rIFR5cGVDb252ZXJ0ZXIjY29udmVydEJhY2soT2JqZWN0KX0gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQKKyAgICAgKiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQuIFNob3VsZCBub3QgYmUgbnVsbC4KKyAgICAgKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRzIHRoZSBhbmltYXRlZCBvYmplY3QgdG8gdGhlIFByb3BlcnR5IHR5cGUuCisgICAgICogQHBhcmFtIGV2YWx1YXRvciBBIFR5cGVFdmFsdWF0b3IgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGFuaW1hdGlvbiBmcmFtZSB0bworICAgICAqIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIE9iamVjdCB2YWx1ZXMgdG8gZGVyaXZlIHRoZSBhbmltYXRlZAorICAgICAqIHZhbHVlLgorICAgICAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyB0aGF0IHRoZSBwcm9wZXJ0eSB3aWxsIGFuaW1hdGUgYmV0d2Vlbi4KKyAgICAgKiBAcmV0dXJuIFByb3BlcnR5VmFsdWVzSG9sZGVyIFRoZSBjb25zdHJ1Y3RlZCBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvYmplY3QuCisgICAgICogQHNlZSAjc2V0Q29udmVydGVyKFR5cGVDb252ZXJ0ZXIpCisgICAgICogQHNlZSBUeXBlQ29udmVydGVyCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8VCwgVj4gUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZPYmplY3QoUHJvcGVydHk8PywgVj4gcHJvcGVydHksCisgICAgICAgICAgICBUeXBlQ29udmVydGVyPFQsIFY+IGNvbnZlcnRlciwgVHlwZUV2YWx1YXRvcjxUPiBldmFsdWF0b3IsIFQuLi4gdmFsdWVzKSB7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHB2aCA9IG5ldyBQcm9wZXJ0eVZhbHVlc0hvbGRlcihwcm9wZXJ0eSk7CisgICAgICAgIHB2aC5zZXRDb252ZXJ0ZXIoY29udmVydGVyKTsKKyAgICAgICAgcHZoLnNldE9iamVjdFZhbHVlcyh2YWx1ZXMpOworICAgICAgICBwdmguc2V0RXZhbHVhdG9yKGV2YWx1YXRvcik7CisgICAgICAgIHJldHVybiBwdmg7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBhbmQKKyAgICAgKiBhIFBhdGggYWxvbmcgd2hpY2ggdGhlIHZhbHVlcyBzaG91bGQgYmUgYW5pbWF0ZWQuIFRoaXMgdmFyaWFudCBzdXBwb3J0cyBhCisgICAgICogPGNvZGU+VHlwZUNvbnZlcnRlcjwvY29kZT4gdG8gY29udmVydCBmcm9tIDxjb2RlPlBvaW50RjwvY29kZT4gdG8gdGhlIHRhcmdldAorICAgICAqIHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkLiBTaG91bGQgbm90IGJlIG51bGwuCisgICAgICogQHBhcmFtIGNvbnZlcnRlciBDb252ZXJ0cyBhIFBvaW50RiB0byB0aGUgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNldHRlci4gTWF5IGJlCisgICAgICogICAgICAgICAgICAgICAgICBudWxsIGlmIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuCisgICAgICogQHBhcmFtIHBhdGggVGhlIFBhdGggYWxvbmcgd2hpY2ggdGhlIHZhbHVlcyBzaG91bGQgYmUgYW5pbWF0ZWQuCisgICAgICogQHJldHVybiBQcm9wZXJ0eVZhbHVlc0hvbGRlciBUaGUgY29uc3RydWN0ZWQgUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgPFY+IFByb3BlcnR5VmFsdWVzSG9sZGVyIG9mT2JqZWN0KFByb3BlcnR5PD8sIFY+IHByb3BlcnR5LAorICAgICAgICAgICAgVHlwZUNvbnZlcnRlcjxQb2ludEYsIFY+IGNvbnZlcnRlciwgUGF0aCBwYXRoKSB7CisgICAgICAgIEtleWZyYW1lW10ga2V5ZnJhbWVzID0gY3JlYXRlS2V5ZnJhbWVzKHBhdGgpOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBwdmggPSBvZktleWZyYW1lKHByb3BlcnR5LCBrZXlmcmFtZXMpOworICAgICAgICBwdmguc2V0RXZhbHVhdG9yKG5ldyBQb2ludEZFdmFsdWF0b3IobmV3IFBvaW50RigpKSk7CisgICAgICAgIHB2aC5zZXRDb252ZXJ0ZXIoY29udmVydGVyKTsKKyAgICAgICAgcmV0dXJuIHB2aDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBuYW1lIGFuZCBzZXQKICAgICAgKiBvZiB2YWx1ZXMuIFRoZXNlIHZhbHVlcyBjYW4gYmUgb2YgYW55IHR5cGUsIGJ1dCB0aGUgdHlwZSBzaG91bGQgYmUgY29uc2lzdGVudCBzbyB0aGF0CiAgICAgICogYW4gYXBwcm9wcmlhdGUge0BsaW5rIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3J9IGNhbiBiZSBmb3VuZCB0aGF0IG1hdGNoZXMKQEAgLTM2MSw2ICs2MzQsMTQgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjb252ZXJ0ZXIgdG8gY29udmVydCBmcm9tIHRoZSB2YWx1ZXMgdHlwZSB0byB0aGUgc2V0dGVyJ3MgcGFyYW1ldGVyIHR5cGUuCisgICAgICogQHBhcmFtIGNvbnZlcnRlciBUaGUgY29udmVydGVyIHRvIHVzZSB0byBjb252ZXJ0IHZhbHVlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb252ZXJ0ZXIoVHlwZUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKKyAgICAgICAgbUNvbnZlcnRlciA9IGNvbnZlcnRlcjsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBEZXRlcm1pbmUgdGhlIHNldHRlciBvciBnZXR0ZXIgZnVuY3Rpb24gdXNpbmcgdGhlIEphdmFCZWFucyBjb252ZW50aW9uIG9mIHNldEZvbyBvcgogICAgICAqIGdldEZvbyBmb3IgYSBwcm9wZXJ0eSBuYW1lZCAnZm9vJy4gVGhpcyBmdW5jdGlvbiBmaWd1cmVzIG91dCB3aGF0IHRoZSBuYW1lIG9mIHRoZQogICAgICAqIGZ1bmN0aW9uIHNob3VsZCBiZSBhbmQgdXNlcyByZWZsZWN0aW9uIHRvIGZpbmQgdGhlIE1ldGhvZCB3aXRoIHRoYXQgbmFtZSBvbiB0aGUKQEAgLTM4OSwyMiArNjcwLDI0IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhcmdzID0gbmV3IENsYXNzWzFdOwogICAgICAgICAgICAgQ2xhc3MgdHlwZVZhcmlhbnRzW107Ci0gICAgICAgICAgICBpZiAobVZhbHVlVHlwZS5lcXVhbHMoRmxvYXQuY2xhc3MpKSB7CisgICAgICAgICAgICBpZiAodmFsdWVUeXBlLmVxdWFscyhGbG9hdC5jbGFzcykpIHsKICAgICAgICAgICAgICAgICB0eXBlVmFyaWFudHMgPSBGTE9BVF9WQVJJQU5UUzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobVZhbHVlVHlwZS5lcXVhbHMoSW50ZWdlci5jbGFzcykpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlLmVxdWFscyhJbnRlZ2VyLmNsYXNzKSkgewogICAgICAgICAgICAgICAgIHR5cGVWYXJpYW50cyA9IElOVEVHRVJfVkFSSUFOVFM7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1WYWx1ZVR5cGUuZXF1YWxzKERvdWJsZS5jbGFzcykpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlLmVxdWFscyhEb3VibGUuY2xhc3MpKSB7CiAgICAgICAgICAgICAgICAgdHlwZVZhcmlhbnRzID0gRE9VQkxFX1ZBUklBTlRTOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB0eXBlVmFyaWFudHMgPSBuZXcgQ2xhc3NbMV07Ci0gICAgICAgICAgICAgICAgdHlwZVZhcmlhbnRzWzBdID0gbVZhbHVlVHlwZTsKKyAgICAgICAgICAgICAgICB0eXBlVmFyaWFudHNbMF0gPSB2YWx1ZVR5cGU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKENsYXNzIHR5cGVWYXJpYW50IDogdHlwZVZhcmlhbnRzKSB7CiAgICAgICAgICAgICAgICAgYXJnc1swXSA9IHR5cGVWYXJpYW50OwogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbCA9IHRhcmdldENsYXNzLmdldE1ldGhvZChtZXRob2ROYW1lLCBhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSB2YWx1ZSB0eXBlIHRvIHN1aXQKLSAgICAgICAgICAgICAgICAgICAgbVZhbHVlVHlwZSA9IHR5cGVWYXJpYW50OworICAgICAgICAgICAgICAgICAgICBpZiAobUNvbnZlcnRlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHZhbHVlIHR5cGUgdG8gc3VpdAorICAgICAgICAgICAgICAgICAgICAgICAgbVZhbHVlVHlwZSA9IHR5cGVWYXJpYW50OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gU3dhbGxvdyB0aGUgZXJyb3IgYW5kIGtlZXAgdHJ5aW5nIG90aGVyIHZhcmlhbnRzCkBAIC00MTUsNyArNjk4LDcgQEAKIAogICAgICAgICBpZiAocmV0dXJuVmFsID09IG51bGwpIHsKICAgICAgICAgICAgIExvZy53KCJQcm9wZXJ0eVZhbHVlc0hvbGRlciIsICJNZXRob2QgIiArCi0gICAgICAgICAgICAgICAgICAgIGdldE1ldGhvZE5hbWUocHJlZml4LCBtUHJvcGVydHlOYW1lKSArICIoKSB3aXRoIHR5cGUgIiArIG1WYWx1ZVR5cGUgKworICAgICAgICAgICAgICAgICAgICBnZXRNZXRob2ROYW1lKHByZWZpeCwgbVByb3BlcnR5TmFtZSkgKyAiKCkgd2l0aCB0eXBlICIgKyB2YWx1ZVR5cGUgKwogICAgICAgICAgICAgICAgICAgICAiIG5vdCBmb3VuZCBvbiB0YXJnZXQgY2xhc3MgIiArIHRhcmdldENsYXNzKTsKICAgICAgICAgfQogCkBAIC00NjUsNyArNzQ4LDggQEAKICAgICAgKiBAcGFyYW0gdGFyZ2V0Q2xhc3MgVGhlIENsYXNzIG9uIHdoaWNoIHRoZSByZXF1ZXN0ZWQgbWV0aG9kIHNob3VsZCBleGlzdC4KICAgICAgKi8KICAgICB2b2lkIHNldHVwU2V0dGVyKENsYXNzIHRhcmdldENsYXNzKSB7Ci0gICAgICAgIG1TZXR0ZXIgPSBzZXR1cFNldHRlck9yR2V0dGVyKHRhcmdldENsYXNzLCBzU2V0dGVyUHJvcGVydHlNYXAsICJzZXQiLCBtVmFsdWVUeXBlKTsKKyAgICAgICAgQ2xhc3M8Pz4gcHJvcGVydHlUeXBlID0gbUNvbnZlcnRlciA9PSBudWxsID8gbVZhbHVlVHlwZSA6IG1Db252ZXJ0ZXIuZ2V0VGFyZ2V0VHlwZSgpOworICAgICAgICBtU2V0dGVyID0gc2V0dXBTZXR0ZXJPckdldHRlcih0YXJnZXRDbGFzcywgc1NldHRlclByb3BlcnR5TWFwLCAic2V0IiwgcHJvcGVydHlUeXBlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQ4OSwxMCArNzczLDEzIEBACiAgICAgICAgIGlmIChtUHJvcGVydHkgIT0gbnVsbCkgewogICAgICAgICAgICAgLy8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgbVByb3BlcnR5IGlzIG9uIHRoZSBjbGFzcyBvZiB0YXJnZXQKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IHRlc3RWYWx1ZSA9IG1Qcm9wZXJ0eS5nZXQodGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBPYmplY3QgdGVzdFZhbHVlID0gbnVsbDsKICAgICAgICAgICAgICAgICBmb3IgKEtleWZyYW1lIGtmIDogbUtleWZyYW1lU2V0Lm1LZXlmcmFtZXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFrZi5oYXNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZi5zZXRWYWx1ZShtUHJvcGVydHkuZ2V0KHRhcmdldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RWYWx1ZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFZhbHVlID0gY29udmVydEJhY2sobVByb3BlcnR5LmdldCh0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGtmLnNldFZhbHVlKHRlc3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTE2LDcgKzgwMyw4IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAga2Yuc2V0VmFsdWUobUdldHRlci5pbnZva2UodGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGNvbnZlcnRCYWNrKG1HZXR0ZXIuaW52b2tlKHRhcmdldCkpOworICAgICAgICAgICAgICAgICAgICBrZi5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgIExvZy5lKCJQcm9wZXJ0eVZhbHVlc0hvbGRlciIsIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7CkBAIC01MjYsNiArODE0LDE4IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIE9iamVjdCBjb252ZXJ0QmFjayhPYmplY3QgdmFsdWUpIHsKKyAgICAgICAgaWYgKG1Db252ZXJ0ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgdmFsdWUgPSBtQ29udmVydGVyLmNvbnZlcnRCYWNrKHZhbHVlKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29udmVydGVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgbUNvbnZlcnRlci5nZXRDbGFzcygpLmdldE5hbWUoKQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIG11c3QgaW1wbGVtZW50IGNvbnZlcnRCYWNrIGFuZCBub3QgcmV0dXJuIG51bGwuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSBzdG9yZWQgaW4gYSBwYXJ0aWN1bGFyIEtleWZyYW1lLiBUaGUgdmFsdWUgdXNlZCBpcwogICAgICAqIHdoYXRldmVyIHRoZSB2YWx1ZSBpcyBmb3IgdGhlIHByb3BlcnR5IG5hbWUgc3BlY2lmaWVkIGluIHRoZSBrZXlmcmFtZSBvbiB0aGUgdGFyZ2V0IG9iamVjdC4KQEAgLTUzNSw3ICs4MzUsOCBAQAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBzZXR1cFZhbHVlKE9iamVjdCB0YXJnZXQsIEtleWZyYW1lIGtmKSB7CiAgICAgICAgIGlmIChtUHJvcGVydHkgIT0gbnVsbCkgewotICAgICAgICAgICAga2Yuc2V0VmFsdWUobVByb3BlcnR5LmdldCh0YXJnZXQpKTsKKyAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGNvbnZlcnRCYWNrKG1Qcm9wZXJ0eS5nZXQodGFyZ2V0KSk7CisgICAgICAgICAgICBrZi5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChtR2V0dGVyID09IG51bGwpIHsKQEAgLTU0Niw3ICs4NDcsOCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAga2Yuc2V0VmFsdWUobUdldHRlci5pbnZva2UodGFyZ2V0KSk7CisgICAgICAgICAgICBPYmplY3QgdmFsdWUgPSBjb252ZXJ0QmFjayhtR2V0dGVyLmludm9rZSh0YXJnZXQpKTsKKyAgICAgICAgICAgIGtmLnNldFZhbHVlKHZhbHVlKTsKICAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBMb2cuZSgiUHJvcGVydHlWYWx1ZXNIb2xkZXIiLCBlLnRvU3RyaW5nKCkpOwogICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKQEAgLTY1Nyw3ICs5NTksOCBAQAogICAgICAqIEBwYXJhbSBmcmFjdGlvbiBUaGUgZWxhcHNlZCwgaW50ZXJwb2xhdGVkIGZyYWN0aW9uIG9mIHRoZSBhbmltYXRpb24uCiAgICAgICovCiAgICAgdm9pZCBjYWxjdWxhdGVWYWx1ZShmbG9hdCBmcmFjdGlvbikgewotICAgICAgICBtQW5pbWF0ZWRWYWx1ZSA9IG1LZXlmcmFtZVNldC5nZXRWYWx1ZShmcmFjdGlvbik7CisgICAgICAgIE9iamVjdCB2YWx1ZSA9IG1LZXlmcmFtZVNldC5nZXRWYWx1ZShmcmFjdGlvbik7CisgICAgICAgIG1BbmltYXRlZFZhbHVlID0gbUNvbnZlcnRlciA9PSBudWxsID8gdmFsdWUgOiBtQ29udmVydGVyLmNvbnZlcnQodmFsdWUpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTAxNSw4ICsxMzE4LDMzNCBAQAogCiAgICAgfQogCisgICAgc3RhdGljIGNsYXNzIE11bHRpRmxvYXRWYWx1ZXNIb2xkZXIgZXh0ZW5kcyBQcm9wZXJ0eVZhbHVlc0hvbGRlciB7CisgICAgICAgIHByaXZhdGUgaW50IG1KbmlTZXR0ZXI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEhhc2hNYXA8Q2xhc3MsIEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPj4gc0pOSVNldHRlclByb3BlcnR5TWFwID0KKyAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxDbGFzcywgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+PigpOworCisgICAgICAgIHB1YmxpYyBNdWx0aUZsb2F0VmFsdWVzSG9sZGVyKFN0cmluZyBwcm9wZXJ0eU5hbWUsIFR5cGVDb252ZXJ0ZXIgY29udmVydGVyLAorICAgICAgICAgICAgICAgIFR5cGVFdmFsdWF0b3IgZXZhbHVhdG9yLCBPYmplY3QuLi4gdmFsdWVzKSB7CisgICAgICAgICAgICBzdXBlcihwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgc2V0Q29udmVydGVyKGNvbnZlcnRlcik7CisgICAgICAgICAgICBzZXRPYmplY3RWYWx1ZXModmFsdWVzKTsKKyAgICAgICAgICAgIHNldEV2YWx1YXRvcihldmFsdWF0b3IpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIE11bHRpRmxvYXRWYWx1ZXNIb2xkZXIoU3RyaW5nIHByb3BlcnR5TmFtZSwgVHlwZUNvbnZlcnRlciBjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgVHlwZUV2YWx1YXRvciBldmFsdWF0b3IsIEtleWZyYW1lU2V0IGtleWZyYW1lU2V0KSB7CisgICAgICAgICAgICBzdXBlcihwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgc2V0Q29udmVydGVyKGNvbnZlcnRlcik7CisgICAgICAgICAgICBtS2V5ZnJhbWVTZXQgPSBrZXlmcmFtZVNldDsKKyAgICAgICAgICAgIHNldEV2YWx1YXRvcihldmFsdWF0b3IpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWUgb24gdGhlIHRhcmdldCBvYmplY3QsIHVzaW5nIHRoZSBzZXR0ZXIgc2V0IHVwCisgICAgICAgICAqIGVhcmxpZXIgb24gdGhpcyBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvYmplY3QuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IE9iamVjdEFuaW1hdG9yCisgICAgICAgICAqIHRvIGhhbmRsZSB0dXJuaW5nIHRoZSB2YWx1ZSBjYWxjdWxhdGVkIGJ5IFZhbHVlQW5pbWF0b3IgaW50byBhIHZhbHVlIHNldCBvbiB0aGUgb2JqZWN0CisgICAgICAgICAqIGFjY29yZGluZyB0byB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIHZhbHVlIGlzIHNldAorICAgICAgICAgKi8KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgc2V0QW5pbWF0ZWRWYWx1ZShPYmplY3QgdGFyZ2V0KSB7CisgICAgICAgICAgICBmbG9hdFtdIHZhbHVlcyA9IChmbG9hdFtdKSBnZXRBbmltYXRlZFZhbHVlKCk7CisgICAgICAgICAgICBpbnQgbnVtUGFyYW1ldGVycyA9IHZhbHVlcy5sZW5ndGg7CisgICAgICAgICAgICBpZiAobUpuaVNldHRlciAhPSAwKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChudW1QYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5DYWxsRmxvYXRNZXRob2QodGFyZ2V0LCBtSm5pU2V0dGVyLCB2YWx1ZXNbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5DYWxsVHdvRmxvYXRNZXRob2QodGFyZ2V0LCBtSm5pU2V0dGVyLCB2YWx1ZXNbMF0sIHZhbHVlc1sxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgbkNhbGxGb3VyRmxvYXRNZXRob2QodGFyZ2V0LCBtSm5pU2V0dGVyLCB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWzJdLCB2YWx1ZXNbM10pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5DYWxsTXVsdGlwbGVGbG9hdE1ldGhvZCh0YXJnZXQsIG1KbmlTZXR0ZXIsIHZhbHVlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJbnRlcm5hbCBmdW5jdGlvbiAoY2FsbGVkIGZyb20gT2JqZWN0QW5pbWF0b3IpIHRvIHNldCB1cCB0aGUgc2V0dGVyIGFuZCBnZXR0ZXIKKyAgICAgICAgICogcHJpb3IgdG8gcnVubmluZyB0aGUgYW5pbWF0aW9uLiBObyBnZXR0ZXIgY2FuIGJlIHVzZWQgZm9yIG11bHRpcGxlIHBhcmFtZXRlcnMuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2V0dGVyIGV4aXN0cy4KKyAgICAgICAgICovCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICB2b2lkIHNldHVwU2V0dGVyQW5kR2V0dGVyKE9iamVjdCB0YXJnZXQpIHsKKyAgICAgICAgICAgIHNldHVwU2V0dGVyKHRhcmdldC5nZXRDbGFzcygpKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICB2b2lkIHNldHVwU2V0dGVyKENsYXNzIHRhcmdldENsYXNzKSB7CisgICAgICAgICAgICBpZiAobUpuaVNldHRlciAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtUHJvcGVydHlNYXBMb2NrLndyaXRlTG9jaygpLmxvY2soKTsKKyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4gcHJvcGVydHlNYXAgPSBzSk5JU2V0dGVyUHJvcGVydHlNYXAuZ2V0KHRhcmdldENsYXNzKTsKKyAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlNYXAgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGpuaVNldHRlckludGVnZXIgPSBwcm9wZXJ0eU1hcC5nZXQobVByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChqbmlTZXR0ZXJJbnRlZ2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1KbmlTZXR0ZXIgPSBqbmlTZXR0ZXJJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtSm5pU2V0dGVyID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBnZXRNZXRob2ROYW1lKCJzZXQiLCBtUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlVmFsdWUoMGYpOworICAgICAgICAgICAgICAgICAgICBmbG9hdFtdIHZhbHVlcyA9IChmbG9hdFtdKSBnZXRBbmltYXRlZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGludCBudW1QYXJhbXMgPSB2YWx1ZXMubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUpuaVNldHRlciA9IG5HZXRNdWx0aXBsZUZsb2F0TWV0aG9kKHRhcmdldENsYXNzLCBtZXRob2ROYW1lLCBudW1QYXJhbXMpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFcnJvciBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnkgd2l0aG91dCB0aGUgJ3NldCcgcHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICBtSm5pU2V0dGVyID0gbkdldE11bHRpcGxlRmxvYXRNZXRob2QodGFyZ2V0Q2xhc3MsIG1Qcm9wZXJ0eU5hbWUsIG51bVBhcmFtcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1KbmlTZXR0ZXIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzSk5JU2V0dGVyUHJvcGVydHlNYXAucHV0KHRhcmdldENsYXNzLCBwcm9wZXJ0eU1hcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcC5wdXQobVByb3BlcnR5TmFtZSwgbUpuaVNldHRlcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIG1Qcm9wZXJ0eU1hcExvY2sud3JpdGVMb2NrKCkudW5sb2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgTXVsdGlJbnRWYWx1ZXNIb2xkZXIgZXh0ZW5kcyBQcm9wZXJ0eVZhbHVlc0hvbGRlciB7CisgICAgICAgIHByaXZhdGUgaW50IG1KbmlTZXR0ZXI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEhhc2hNYXA8Q2xhc3MsIEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPj4gc0pOSVNldHRlclByb3BlcnR5TWFwID0KKyAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxDbGFzcywgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+PigpOworCisgICAgICAgIHB1YmxpYyBNdWx0aUludFZhbHVlc0hvbGRlcihTdHJpbmcgcHJvcGVydHlOYW1lLCBUeXBlQ29udmVydGVyIGNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICBUeXBlRXZhbHVhdG9yIGV2YWx1YXRvciwgT2JqZWN0Li4uIHZhbHVlcykgeworICAgICAgICAgICAgc3VwZXIocHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHNldENvbnZlcnRlcihjb252ZXJ0ZXIpOworICAgICAgICAgICAgc2V0T2JqZWN0VmFsdWVzKHZhbHVlcyk7CisgICAgICAgICAgICBzZXRFdmFsdWF0b3IoZXZhbHVhdG9yKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBNdWx0aUludFZhbHVlc0hvbGRlcihTdHJpbmcgcHJvcGVydHlOYW1lLCBUeXBlQ29udmVydGVyIGNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICBUeXBlRXZhbHVhdG9yIGV2YWx1YXRvciwgS2V5ZnJhbWVTZXQga2V5ZnJhbWVTZXQpIHsKKyAgICAgICAgICAgIHN1cGVyKHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBzZXRDb252ZXJ0ZXIoY29udmVydGVyKTsKKyAgICAgICAgICAgIG1LZXlmcmFtZVNldCA9IGtleWZyYW1lU2V0OworICAgICAgICAgICAgc2V0RXZhbHVhdG9yKGV2YWx1YXRvcik7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSBvbiB0aGUgdGFyZ2V0IG9iamVjdCwgdXNpbmcgdGhlIHNldHRlciBzZXQgdXAKKyAgICAgICAgICogZWFybGllciBvbiB0aGlzIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9iamVjdC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgT2JqZWN0QW5pbWF0b3IKKyAgICAgICAgICogdG8gaGFuZGxlIHR1cm5pbmcgdGhlIHZhbHVlIGNhbGN1bGF0ZWQgYnkgVmFsdWVBbmltYXRvciBpbnRvIGEgdmFsdWUgc2V0IG9uIHRoZSBvYmplY3QKKyAgICAgICAgICogYWNjb3JkaW5nIHRvIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgdmFsdWUgaXMgc2V0CisgICAgICAgICAqLworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBzZXRBbmltYXRlZFZhbHVlKE9iamVjdCB0YXJnZXQpIHsKKyAgICAgICAgICAgIGludFtdIHZhbHVlcyA9IChpbnRbXSkgZ2V0QW5pbWF0ZWRWYWx1ZSgpOworICAgICAgICAgICAgaW50IG51bVBhcmFtZXRlcnMgPSB2YWx1ZXMubGVuZ3RoOworICAgICAgICAgICAgaWYgKG1KbmlTZXR0ZXIgIT0gMCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobnVtUGFyYW1ldGVycykgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBuQ2FsbEludE1ldGhvZCh0YXJnZXQsIG1KbmlTZXR0ZXIsIHZhbHVlc1swXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgbkNhbGxUd29JbnRNZXRob2QodGFyZ2V0LCBtSm5pU2V0dGVyLCB2YWx1ZXNbMF0sIHZhbHVlc1sxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgbkNhbGxGb3VySW50TWV0aG9kKHRhcmdldCwgbUpuaVNldHRlciwgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgICAgICAgICBuQ2FsbE11bHRpcGxlSW50TWV0aG9kKHRhcmdldCwgbUpuaVNldHRlciwgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVybmFsIGZ1bmN0aW9uIChjYWxsZWQgZnJvbSBPYmplY3RBbmltYXRvcikgdG8gc2V0IHVwIHRoZSBzZXR0ZXIgYW5kIGdldHRlcgorICAgICAgICAgKiBwcmlvciB0byBydW5uaW5nIHRoZSBhbmltYXRpb24uIE5vIGdldHRlciBjYW4gYmUgdXNlZCBmb3IgbXVsdGlwbGUgcGFyYW1ldGVycy4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzZXR0ZXIgZXhpc3RzLgorICAgICAgICAgKi8KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgc2V0dXBTZXR0ZXJBbmRHZXR0ZXIoT2JqZWN0IHRhcmdldCkgeworICAgICAgICAgICAgc2V0dXBTZXR0ZXIodGFyZ2V0LmdldENsYXNzKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgc2V0dXBTZXR0ZXIoQ2xhc3MgdGFyZ2V0Q2xhc3MpIHsKKyAgICAgICAgICAgIGlmIChtSm5pU2V0dGVyICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1Qcm9wZXJ0eU1hcExvY2sud3JpdGVMb2NrKCkubG9jaygpOworICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPiBwcm9wZXJ0eU1hcCA9IHNKTklTZXR0ZXJQcm9wZXJ0eU1hcC5nZXQodGFyZ2V0Q2xhc3MpOworICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU1hcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIEludGVnZXIgam5pU2V0dGVySW50ZWdlciA9IHByb3BlcnR5TWFwLmdldChtUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGpuaVNldHRlckludGVnZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUpuaVNldHRlciA9IGpuaVNldHRlckludGVnZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1KbmlTZXR0ZXIgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IGdldE1ldGhvZE5hbWUoInNldCIsIG1Qcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVWYWx1ZSgwZik7CisgICAgICAgICAgICAgICAgICAgIGludFtdIHZhbHVlcyA9IChpbnRbXSkgZ2V0QW5pbWF0ZWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpbnQgbnVtUGFyYW1zID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1KbmlTZXR0ZXIgPSBuR2V0TXVsdGlwbGVJbnRNZXRob2QodGFyZ2V0Q2xhc3MsIG1ldGhvZE5hbWUsIG51bVBhcmFtcyk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEVycm9yIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB3aXRob3V0IHRoZSAnc2V0JyBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1KbmlTZXR0ZXIgPSBuR2V0TXVsdGlwbGVJbnRNZXRob2QodGFyZ2V0Q2xhc3MsIG1Qcm9wZXJ0eU5hbWUsIG51bVBhcmFtcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1KbmlTZXR0ZXIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzSk5JU2V0dGVyUHJvcGVydHlNYXAucHV0KHRhcmdldENsYXNzLCBwcm9wZXJ0eU1hcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcC5wdXQobVByb3BlcnR5TmFtZSwgbUpuaVNldHRlcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIG1Qcm9wZXJ0eU1hcExvY2sud3JpdGVMb2NrKCkudW5sb2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBQYXRoIGludGVycG9sYXRpb24gcmVsaWVzIG9uIGFwcHJveGltYXRpbmcgdGhlIFBhdGggYXMgYSBzZXJpZXMgb2YgbGluZSBzZWdtZW50cy4KKyAgICAgICBUaGUgbGluZSBzZWdtZW50cyBhcmUgcmVjdXJzaXZlbHkgZGl2aWRlZCB1bnRpbCB0aGVyZSBpcyBsZXNzIHRoYW4gMS8yIHBpeGVsIGVycm9yCisgICAgICAgYmV0d2VlbiB0aGUgbGluZXMgYW5kIHRoZSBjdXJ2ZS4gRWFjaCBwb2ludCBvZiB0aGUgbGluZSBzZWdtZW50IGlzIGNvbnZlcnRlZAorICAgICAgIHRvIGEgS2V5ZnJhbWUgYW5kIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBLZXlmcmFtZXMgY3JlYXRlcyBhIGdvb2QgYXBwcm94aW1hdGlvbgorICAgICAgIG9mIHRoZSBjdXJ2ZS4KKworICAgICAgIFRoZSBmcmFjdGlvbiBmb3IgZWFjaCBLZXlmcmFtZSBpcyB0aGUgbGVuZ3RoIGFsb25nIHRoZSBQYXRoIHRvIHRoZSBwb2ludCwgZGl2aWRlZCBieQorICAgICAgIHRoZSB0b3RhbCBQYXRoIGxlbmd0aC4gVHdvIHBvaW50cyBtYXkgaGF2ZSB0aGUgc2FtZSBmcmFjdGlvbiBpbiB0aGUgY2FzZSBvZiBhIG1vdmUKKyAgICAgICBjb21tYW5kIGNhdXNpbmcgYSBkaXNqb2ludCBQYXRoLgorCisgICAgICAgVGhlIHZhbHVlIGZvciBlYWNoIEtleWZyYW1lIGlzIGVpdGhlciB0aGUgcG9pbnQgYXMgYSBQb2ludEYgb3Igb25lIG9mIHRoZSB4IG9yIHkKKyAgICAgICBjb29yZGluYXRlcyBhcyBhbiBpbnQgb3IgZmxvYXQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdHdvIEtleWZyYW1lcyBhcmUgZ2VuZXJhdGVkIGZvcgorICAgICAgIGVhY2ggcG9pbnQgdGhhdCBoYXZlIHRoZSBzYW1lIGZyYWN0aW9uLiAqLworCisgICAgLyoqCisgICAgICogUmV0dXJucyBzZXBhcmF0ZSBLZXlmcmFtZXMgYXJyYXlzIGZvciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBhbG9uZyBhIFBhdGguIElmCisgICAgICogaXNJbnQgaXMgdHJ1ZSwgdGhlIEtleWZyYW1lcyB3aWxsIGJlIEludEtleWZyYW1lcywgb3RoZXJ3aXNlIHRoZXkgd2lsbCBiZSBGbG9hdEtleWZyYW1lcy4KKyAgICAgKiBUaGUgZWxlbWVudCBhdCBpbmRleCAwIGFyZSB0aGUgeCBjb29yZGluYXRlIEtleWZyYW1lcyBhbmQgZWxlbWVudCBhdCBpbmRleCAxIGFyZSB0aGUKKyAgICAgKiB5IGNvb3JkaW5hdGUgS2V5ZnJhbWVzLiBUaGUgcmV0dXJuZWQgdmFsdWVzIGNhbiBiZSBsaW5lYXJseSBpbnRlcnBvbGF0ZWQgYW5kIGdldCBsZXNzCisgICAgICogdGhhbiAxLzIgcGl4ZWwgZXJyb3IuCisgICAgICovCisgICAgc3RhdGljIEtleWZyYW1lW11bXSBjcmVhdGVLZXlmcmFtZXMoUGF0aCBwYXRoLCBib29sZWFuIGlzSW50KSB7CisgICAgICAgIGlmIChwYXRoID09IG51bGwgfHwgcGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBwYXRoIG11c3Qgbm90IGJlIG51bGwgb3IgZW1wdHkiKTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdFtdIHBvaW50Q29tcG9uZW50cyA9IHBhdGguYXBwcm94aW1hdGUoMC41Zik7CisKKyAgICAgICAgaW50IG51bVBvaW50cyA9IHBvaW50Q29tcG9uZW50cy5sZW5ndGggLyAzOworCisgICAgICAgIEtleWZyYW1lW11bXSBrZXlmcmFtZXMgPSBuZXcgS2V5ZnJhbWVbMl1bXTsKKyAgICAgICAga2V5ZnJhbWVzWzBdID0gbmV3IEtleWZyYW1lW251bVBvaW50c107CisgICAgICAgIGtleWZyYW1lc1sxXSA9IG5ldyBLZXlmcmFtZVtudW1Qb2ludHNdOworICAgICAgICBpbnQgY29tcG9uZW50SW5kZXggPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBvaW50czsgaSsrKSB7CisgICAgICAgICAgICBmbG9hdCBmcmFjdGlvbiA9IHBvaW50Q29tcG9uZW50c1tjb21wb25lbnRJbmRleCsrXTsKKyAgICAgICAgICAgIGZsb2F0IHggPSBwb2ludENvbXBvbmVudHNbY29tcG9uZW50SW5kZXgrK107CisgICAgICAgICAgICBmbG9hdCB5ID0gcG9pbnRDb21wb25lbnRzW2NvbXBvbmVudEluZGV4KytdOworICAgICAgICAgICAgaWYgKGlzSW50KSB7CisgICAgICAgICAgICAgICAga2V5ZnJhbWVzWzBdW2ldID0gS2V5ZnJhbWUub2ZJbnQoZnJhY3Rpb24sIE1hdGgucm91bmQoeCkpOworICAgICAgICAgICAgICAgIGtleWZyYW1lc1sxXVtpXSA9IEtleWZyYW1lLm9mSW50KGZyYWN0aW9uLCBNYXRoLnJvdW5kKHkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAga2V5ZnJhbWVzWzBdW2ldID0gS2V5ZnJhbWUub2ZGbG9hdChmcmFjdGlvbiwgeCk7CisgICAgICAgICAgICAgICAga2V5ZnJhbWVzWzFdW2ldID0gS2V5ZnJhbWUub2ZGbG9hdChmcmFjdGlvbiwgeSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGtleWZyYW1lczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIFBvaW50RiBLZXlmcmFtZXMgZm9yIGEgUGF0aC4gVGhlIHJlc3VsdGluZyBwb2ludHMgY2FuIGJlIGxpbmVhcmx5IGludGVycG9sYXRlZAorICAgICAqIHdpdGggbGVzcyB0aGFuIDEvMiBwaXhlbCBpbiBlcnJvci4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBLZXlmcmFtZVtdIGNyZWF0ZUtleWZyYW1lcyhQYXRoIHBhdGgpIHsKKyAgICAgICAgaWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIHBhdGggbXVzdCBub3QgYmUgbnVsbCBvciBlbXB0eSIpOworICAgICAgICB9CisgICAgICAgIGZsb2F0W10gcG9pbnRDb21wb25lbnRzID0gcGF0aC5hcHByb3hpbWF0ZSgwLjVmKTsKKworICAgICAgICBpbnQgbnVtUG9pbnRzID0gcG9pbnRDb21wb25lbnRzLmxlbmd0aCAvIDM7CisKKyAgICAgICAgS2V5ZnJhbWVbXSBrZXlmcmFtZXMgPSBuZXcgS2V5ZnJhbWVbbnVtUG9pbnRzXTsKKyAgICAgICAgaW50IGNvbXBvbmVudEluZGV4ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qb2ludHM7IGkrKykgeworICAgICAgICAgICAgZmxvYXQgZnJhY3Rpb24gPSBwb2ludENvbXBvbmVudHNbY29tcG9uZW50SW5kZXgrK107CisgICAgICAgICAgICBmbG9hdCB4ID0gcG9pbnRDb21wb25lbnRzW2NvbXBvbmVudEluZGV4KytdOworICAgICAgICAgICAgZmxvYXQgeSA9IHBvaW50Q29tcG9uZW50c1tjb21wb25lbnRJbmRleCsrXTsKKyAgICAgICAgICAgIGtleWZyYW1lc1tpXSA9IEtleWZyYW1lLm9mT2JqZWN0KGZyYWN0aW9uLCBuZXcgUG9pbnRGKHgsIHkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ga2V5ZnJhbWVzOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgZnJvbSBQb2ludEYgdG8gZmxvYXRbXSBmb3IgbXVsdGktZmxvYXQgc2V0dGVycyBhbG9uZyBhIFBhdGguCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUG9pbnRGVG9GbG9hdEFycmF5IGV4dGVuZHMgVHlwZUNvbnZlcnRlcjxQb2ludEYsIGZsb2F0W10+IHsKKyAgICAgICAgcHJpdmF0ZSBmbG9hdFtdIG1Db29yZGluYXRlcyA9IG5ldyBmbG9hdFsyXTsKKworICAgICAgICBwdWJsaWMgUG9pbnRGVG9GbG9hdEFycmF5KCkgeworICAgICAgICAgICAgc3VwZXIoUG9pbnRGLmNsYXNzLCBmbG9hdFtdLmNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgZmxvYXRbXSBjb252ZXJ0KFBvaW50RiB2YWx1ZSkgeworICAgICAgICAgICAgbUNvb3JkaW5hdGVzWzBdID0gdmFsdWUueDsKKyAgICAgICAgICAgIG1Db29yZGluYXRlc1sxXSA9IHZhbHVlLnk7CisgICAgICAgICAgICByZXR1cm4gbUNvb3JkaW5hdGVzOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIENvbnZlcnQgZnJvbSBQb2ludEYgdG8gaW50W10gZm9yIG11bHRpLWludCBzZXR0ZXJzIGFsb25nIGEgUGF0aC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBQb2ludEZUb0ludEFycmF5IGV4dGVuZHMgVHlwZUNvbnZlcnRlcjxQb2ludEYsIGludFtdPiB7CisgICAgICAgIHByaXZhdGUgaW50W10gbUNvb3JkaW5hdGVzID0gbmV3IGludFsyXTsKKworICAgICAgICBwdWJsaWMgUG9pbnRGVG9JbnRBcnJheSgpIHsKKyAgICAgICAgICAgIHN1cGVyKFBvaW50Ri5jbGFzcywgaW50W10uY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnRbXSBjb252ZXJ0KFBvaW50RiB2YWx1ZSkgeworICAgICAgICAgICAgbUNvb3JkaW5hdGVzWzBdID0gTWF0aC5yb3VuZCh2YWx1ZS54KTsKKyAgICAgICAgICAgIG1Db29yZGluYXRlc1sxXSA9IE1hdGgucm91bmQodmFsdWUueSk7CisgICAgICAgICAgICByZXR1cm4gbUNvb3JkaW5hdGVzOworICAgICAgICB9CisgICAgfTsKKwogICAgIG5hdGl2ZSBzdGF0aWMgcHJpdmF0ZSBpbnQgbkdldEludE1ldGhvZChDbGFzcyB0YXJnZXRDbGFzcywgU3RyaW5nIG1ldGhvZE5hbWUpOwogICAgIG5hdGl2ZSBzdGF0aWMgcHJpdmF0ZSBpbnQgbkdldEZsb2F0TWV0aG9kKENsYXNzIHRhcmdldENsYXNzLCBTdHJpbmcgbWV0aG9kTmFtZSk7CisgICAgbmF0aXZlIHN0YXRpYyBwcml2YXRlIGludCBuR2V0TXVsdGlwbGVJbnRNZXRob2QoQ2xhc3MgdGFyZ2V0Q2xhc3MsIFN0cmluZyBtZXRob2ROYW1lLAorICAgICAgICAgICAgaW50IG51bVBhcmFtcyk7CisgICAgbmF0aXZlIHN0YXRpYyBwcml2YXRlIGludCBuR2V0TXVsdGlwbGVGbG9hdE1ldGhvZChDbGFzcyB0YXJnZXRDbGFzcywgU3RyaW5nIG1ldGhvZE5hbWUsCisgICAgICAgICAgICBpbnQgbnVtUGFyYW1zKTsKICAgICBuYXRpdmUgc3RhdGljIHByaXZhdGUgdm9pZCBuQ2FsbEludE1ldGhvZChPYmplY3QgdGFyZ2V0LCBpbnQgbWV0aG9kSUQsIGludCBhcmcpOwogICAgIG5hdGl2ZSBzdGF0aWMgcHJpdmF0ZSB2b2lkIG5DYWxsRmxvYXRNZXRob2QoT2JqZWN0IHRhcmdldCwgaW50IG1ldGhvZElELCBmbG9hdCBhcmcpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICBuYXRpdmUgc3RhdGljIHByaXZhdGUgdm9pZCBuQ2FsbFR3b0ludE1ldGhvZChPYmplY3QgdGFyZ2V0LCBpbnQgbWV0aG9kSUQsIGludCBhcmcxLCBpbnQgYXJnMik7CisgICAgbmF0aXZlIHN0YXRpYyBwcml2YXRlIHZvaWQgbkNhbGxGb3VySW50TWV0aG9kKE9iamVjdCB0YXJnZXQsIGludCBtZXRob2RJRCwgaW50IGFyZzEsIGludCBhcmcyLAorICAgICAgICAgICAgaW50IGFyZzMsIGludCBhcmc0KTsKKyAgICBuYXRpdmUgc3RhdGljIHByaXZhdGUgdm9pZCBuQ2FsbE11bHRpcGxlSW50TWV0aG9kKE9iamVjdCB0YXJnZXQsIGludCBtZXRob2RJRCwgaW50W10gYXJncyk7CisgICAgbmF0aXZlIHN0YXRpYyBwcml2YXRlIHZvaWQgbkNhbGxUd29GbG9hdE1ldGhvZChPYmplY3QgdGFyZ2V0LCBpbnQgbWV0aG9kSUQsIGZsb2F0IGFyZzEsCisgICAgICAgICAgICBmbG9hdCBhcmcyKTsKKyAgICBuYXRpdmUgc3RhdGljIHByaXZhdGUgdm9pZCBuQ2FsbEZvdXJGbG9hdE1ldGhvZChPYmplY3QgdGFyZ2V0LCBpbnQgbWV0aG9kSUQsIGZsb2F0IGFyZzEsCisgICAgICAgICAgICBmbG9hdCBhcmcyLCBmbG9hdCBhcmczLCBmbG9hdCBhcmc0KTsKKyAgICBuYXRpdmUgc3RhdGljIHByaXZhdGUgdm9pZCBuQ2FsbE11bHRpcGxlRmxvYXRNZXRob2QoT2JqZWN0IHRhcmdldCwgaW50IG1ldGhvZElELCBmbG9hdFtdIGFyZ3MpOworfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1JlY3RFdmFsdWF0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9SZWN0RXZhbHVhdG9yLmphdmEKaW5kZXggMjhkNDk2Yi4uMjNlYjc2NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1JlY3RFdmFsdWF0b3IuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vUmVjdEV2YWx1YXRvci5qYXZhCkBAIC0yMywxMiArMjMsNDUgQEAKIHB1YmxpYyBjbGFzcyBSZWN0RXZhbHVhdG9yIGltcGxlbWVudHMgVHlwZUV2YWx1YXRvcjxSZWN0PiB7CiAKICAgICAvKioKKyAgICAgKiBXaGVuIG51bGwsIGEgbmV3IFJlY3QgaXMgcmV0dXJuZWQgb24gZXZlcnkgZXZhbHVhdGUgY2FsbC4gV2hlbiBub24tbnVsbCwKKyAgICAgKiBtUmVjdCB3aWxsIGJlIG1vZGlmaWVkIGFuZCByZXR1cm5lZCBvbiBldmVyeSBldmFsdWF0ZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIFJlY3QgbVJlY3Q7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBSZWN0RXZhbHVhdG9yIHRoYXQgcmV0dXJucyBhIG5ldyBSZWN0IG9uIGV2ZXJ5IGV2YWx1YXRlIGNhbGwuCisgICAgICogVG8gYXZvaWQgY3JlYXRpbmcgYW4gb2JqZWN0IGZvciBlYWNoIGV2YWx1YXRlIGNhbGwsCisgICAgICoge0BsaW5rIFJlY3RFdmFsdWF0b3IjUmVjdEV2YWx1YXRvcihhbmRyb2lkLmdyYXBoaWNzLlJlY3QpfSBzaG91bGQgYmUgdXNlZAorICAgICAqIHdoZW5ldmVyIHBvc3NpYmxlLgorICAgICAqLworICAgIHB1YmxpYyBSZWN0RXZhbHVhdG9yKCkgeworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBSZWN0RXZhbHVhdG9yIHRoYXQgbW9kaWZpZXMgYW5kIHJldHVybnMgPGNvZGU+cmV1c2VSZWN0PC9jb2RlPgorICAgICAqIGluIHtAbGluayAjZXZhbHVhdGUoZmxvYXQsIGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCwgYW5kcm9pZC5ncmFwaGljcy5SZWN0KX0gY2FsbHMuCisgICAgICogVGhlIHZhbHVlIHJldHVybmVkIGZyb20KKyAgICAgKiB7QGxpbmsgI2V2YWx1YXRlKGZsb2F0LCBhbmRyb2lkLmdyYXBoaWNzLlJlY3QsIGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCl9IHNob3VsZAorICAgICAqIG5vdCBiZSBjYWNoZWQgYmVjYXVzZSBpdCB3aWxsIGNoYW5nZSBvdmVyIHRpbWUgYXMgdGhlIG9iamVjdCBpcyByZXVzZWQgb24gZWFjaAorICAgICAqIGNhbGwuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmV1c2VSZWN0IEEgUmVjdCB0byBiZSBtb2RpZmllZCBhbmQgcmV0dXJuZWQgYnkgZXZhbHVhdGUuCisgICAgICovCisgICAgcHVibGljIFJlY3RFdmFsdWF0b3IoUmVjdCByZXVzZVJlY3QpIHsKKyAgICAgICAgbVJlY3QgPSByZXVzZVJlY3Q7CisgICAgfQorCisgICAgLyoqCiAgICAgICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXN1bHQgb2YgbGluZWFybHkgaW50ZXJwb2xhdGluZyB0aGUgc3RhcnQgYW5kCiAgICAgICogZW5kIFJlY3QgdmFsdWVzLCB3aXRoIDxjb2RlPmZyYWN0aW9uPC9jb2RlPiByZXByZXNlbnRpbmcgdGhlIHByb3BvcnRpb24KICAgICAgKiBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlcy4gVGhlIGNhbGN1bGF0aW9uIGlzIGEgc2ltcGxlIHBhcmFtZXRyaWMKICAgICAgKiBjYWxjdWxhdGlvbiBvbiBlYWNoIG9mIHRoZSBzZXBhcmF0ZSBjb21wb25lbnRzIGluIHRoZSBSZWN0IG9iamVjdHMKICAgICAgKiAobGVmdCwgdG9wLCByaWdodCwgYW5kIGJvdHRvbSkuCiAgICAgICoKKyAgICAgKiA8cD5JZiB7QGxpbmsgI1JlY3RFdmFsdWF0b3IoYW5kcm9pZC5ncmFwaGljcy5SZWN0KX0gd2FzIHVzZWQgdG8gY29uc3RydWN0CisgICAgICogdGhpcyBSZWN0RXZhbHVhdG9yLCB0aGUgb2JqZWN0IHJldHVybmVkIHdpbGwgYmUgdGhlIDxjb2RlPnJldXNlUmVjdDwvY29kZT4KKyAgICAgKiBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IuPC9wPgorICAgICAqCiAgICAgICogQHBhcmFtIGZyYWN0aW9uICAgVGhlIGZyYWN0aW9uIGZyb20gdGhlIHN0YXJ0aW5nIHRvIHRoZSBlbmRpbmcgdmFsdWVzCiAgICAgICogQHBhcmFtIHN0YXJ0VmFsdWUgVGhlIHN0YXJ0IFJlY3QKICAgICAgKiBAcGFyYW0gZW5kVmFsdWUgICBUaGUgZW5kIFJlY3QKQEAgLTM3LDkgKzcwLDE1IEBACiAgICAgICovCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFJlY3QgZXZhbHVhdGUoZmxvYXQgZnJhY3Rpb24sIFJlY3Qgc3RhcnRWYWx1ZSwgUmVjdCBlbmRWYWx1ZSkgewotICAgICAgICByZXR1cm4gbmV3IFJlY3Qoc3RhcnRWYWx1ZS5sZWZ0ICsgKGludCkoKGVuZFZhbHVlLmxlZnQgLSBzdGFydFZhbHVlLmxlZnQpICogZnJhY3Rpb24pLAotICAgICAgICAgICAgICAgIHN0YXJ0VmFsdWUudG9wICsgKGludCkoKGVuZFZhbHVlLnRvcCAtIHN0YXJ0VmFsdWUudG9wKSAqIGZyYWN0aW9uKSwKLSAgICAgICAgICAgICAgICBzdGFydFZhbHVlLnJpZ2h0ICsgKGludCkoKGVuZFZhbHVlLnJpZ2h0IC0gc3RhcnRWYWx1ZS5yaWdodCkgKiBmcmFjdGlvbiksCi0gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZS5ib3R0b20gKyAoaW50KSgoZW5kVmFsdWUuYm90dG9tIC0gc3RhcnRWYWx1ZS5ib3R0b20pICogZnJhY3Rpb24pKTsKKyAgICAgICAgaW50IGxlZnQgPSBzdGFydFZhbHVlLmxlZnQgKyAoaW50KSAoKGVuZFZhbHVlLmxlZnQgLSBzdGFydFZhbHVlLmxlZnQpICogZnJhY3Rpb24pOworICAgICAgICBpbnQgdG9wID0gc3RhcnRWYWx1ZS50b3AgKyAoaW50KSAoKGVuZFZhbHVlLnRvcCAtIHN0YXJ0VmFsdWUudG9wKSAqIGZyYWN0aW9uKTsKKyAgICAgICAgaW50IHJpZ2h0ID0gc3RhcnRWYWx1ZS5yaWdodCArIChpbnQpICgoZW5kVmFsdWUucmlnaHQgLSBzdGFydFZhbHVlLnJpZ2h0KSAqIGZyYWN0aW9uKTsKKyAgICAgICAgaW50IGJvdHRvbSA9IHN0YXJ0VmFsdWUuYm90dG9tICsgKGludCkgKChlbmRWYWx1ZS5ib3R0b20gLSBzdGFydFZhbHVlLmJvdHRvbSkgKiBmcmFjdGlvbik7CisgICAgICAgIGlmIChtUmVjdCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1SZWN0LnNldChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgICAgICAgICAgcmV0dXJuIG1SZWN0OworICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1R5cGVDb252ZXJ0ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9UeXBlQ29udmVydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiM2ViNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9UeXBlQ29udmVydGVyLmphdmEKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5hbmltYXRpb247CisKKy8qKgorICogQWJzdHJhY3QgYmFzZSBjbGFzcyB1c2VkIGNvbnZlcnQgdHlwZSBUIHRvIGFub3RoZXIgdHlwZSBWLiBUaGlzCisgKiBpcyBuZWNlc3Nhcnkgd2hlbiB0aGUgdmFsdWUgdHlwZXMgb2YgaW4gYW5pbWF0aW9uIGFyZSBkaWZmZXJlbnQKKyAqIGZyb20gdGhlIHByb3BlcnR5IHR5cGUuCisgKiBAc2VlIFByb3BlcnR5VmFsdWVzSG9sZGVyI3NldENvbnZlcnRlcihUeXBlQ29udmVydGVyKQorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVHlwZUNvbnZlcnRlcjxULCBWPiB7CisgICAgcHJpdmF0ZSBDbGFzczxUPiBtRnJvbUNsYXNzOworICAgIHByaXZhdGUgQ2xhc3M8Vj4gbVRvQ2xhc3M7CisKKyAgICBwdWJsaWMgVHlwZUNvbnZlcnRlcihDbGFzczxUPiBmcm9tQ2xhc3MsIENsYXNzPFY+IHRvQ2xhc3MpIHsKKyAgICAgICAgbUZyb21DbGFzcyA9IGZyb21DbGFzczsKKyAgICAgICAgbVRvQ2xhc3MgPSB0b0NsYXNzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBjb252ZXJ0ZWQgdHlwZS4gVXNlZCBieSB0aGUgYW5pbWF0aW9uIHN5c3RlbSB0byBkZXRlcm1pbmUKKyAgICAgKiB0aGUgcHJvcGVyIHNldHRlciBmdW5jdGlvbiB0byBjYWxsLgorICAgICAqIEByZXR1cm4gVGhlIENsYXNzIHRvIGNvbnZlcnQgdGhlIGlucHV0IHRvLgorICAgICAqLworICAgIENsYXNzPFY+IGdldFRhcmdldFR5cGUoKSB7CisgICAgICAgIHJldHVybiBtVG9DbGFzczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzb3VyY2UgY29udmVyc2lvbiB0eXBlLgorICAgICAqLworICAgIENsYXNzPFQ+IGdldFNvdXJjZVR5cGUoKSB7CisgICAgICAgIHJldHVybiBtRnJvbUNsYXNzOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnRzIGEgdmFsdWUgZnJvbSBvbmUgdHlwZSB0byBhbm90aGVyLgorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgT2JqZWN0IHRvIGNvbnZlcnQuCisgICAgICogQHJldHVybiBBIHZhbHVlIG9mIHR5cGUgViwgY29udmVydGVkIGZyb20gPGNvZGU+dmFsdWU8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBWIGNvbnZlcnQoVCB2YWx1ZSk7CisKKyAgICAvKioKKyAgICAgKiBEb2VzIGEgY29udmVyc2lvbiBmcm9tIHRoZSB0YXJnZXQgdHlwZSBiYWNrIHRvIHRoZSBzb3VyY2UgdHlwZS4gVGhlIHN1YmNsYXNzCisgICAgICogbXVzdCBpbXBsZW1lbnQgdGhpcyB3aGVuIGEgVHlwZUNvbnZlcnRlciBpcyB1c2VkIGluIGFuaW1hdGlvbnMgYW5kIGN1cnJlbnQKKyAgICAgKiB2YWx1ZXMgd2lsbCBuZWVkIHRvIGJlIHJlYWQgZm9yIGFuIGFuaW1hdGlvbi4gQnkgZGVmYXVsdCwgdGhpcyB3aWxsIHJldHVybiBudWxsLAorICAgICAqIGluZGljYXRpbmcgdGhhdCBiYWNrLWNvbnZlcnNpb24gaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIE9iamVjdCB0byBjb252ZXJ0LgorICAgICAqIEByZXR1cm4gQSB2YWx1ZSBvZiB0eXBlIFQsIGNvbnZlcnRlZCBmcm9tIDxjb2RlPnZhbHVlPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwdWJsaWMgVCBjb252ZXJ0QmFjayhWIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9WYWx1ZUFuaW1hdG9yLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vVmFsdWVBbmltYXRvci5qYXZhCmluZGV4IDg2ZGE2NzMuLjc4ODBmMzkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9WYWx1ZUFuaW1hdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1ZhbHVlQW5pbWF0b3IuamF2YQpAQCAtMjgwLDYgKzI4MCwyNCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBWYWx1ZUFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiBjb2xvciB2YWx1ZXMuIEEgc2luZ2xlCisgICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gSG93ZXZlciwgdGhpcyBpcyBub3QgdHlwaWNhbGx5CisgICAgICogdXNlZnVsIGluIGEgVmFsdWVBbmltYXRvciBvYmplY3QgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgZm9yIHRoZSBvYmplY3QgdG8gZGV0ZXJtaW5lIHRoZQorICAgICAqIHN0YXJ0aW5nIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uICh1bmxpa2UgT2JqZWN0QW5pbWF0b3IsIHdoaWNoIGNhbiBkZXJpdmUgdGhhdCB2YWx1ZQorICAgICAqIGZyb20gdGhlIHRhcmdldCBvYmplY3QgYW5kIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkKS4gVGhlcmVmb3JlLCB0aGVyZSBzaG91bGQgdHlwaWNhbGx5CisgICAgICogYmUgdHdvIG9yIG1vcmUgdmFsdWVzLgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlcyBBIHNldCBvZiB2YWx1ZXMgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgYW5pbWF0ZSBiZXR3ZWVuIG92ZXIgdGltZS4KKyAgICAgKiBAcmV0dXJuIEEgVmFsdWVBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBiZXR3ZWVuIHRoZSBnaXZlbiB2YWx1ZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBWYWx1ZUFuaW1hdG9yIG9mQXJnYihpbnQuLi4gdmFsdWVzKSB7CisgICAgICAgIFZhbHVlQW5pbWF0b3IgYW5pbSA9IG5ldyBWYWx1ZUFuaW1hdG9yKCk7CisgICAgICAgIGFuaW0uc2V0SW50VmFsdWVzKHZhbHVlcyk7CisgICAgICAgIGFuaW0uc2V0RXZhbHVhdG9yKEFyZ2JFdmFsdWF0b3IuZ2V0SW5zdGFuY2UoKSk7CisgICAgICAgIHJldHVybiBhbmltOworICAgIH0KKworICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBWYWx1ZUFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiBmbG9hdCB2YWx1ZXMuIEEgc2luZ2xlCiAgICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gSG93ZXZlciwgdGhpcyBpcyBub3QgdHlwaWNhbGx5CiAgICAgICogdXNlZnVsIGluIGEgVmFsdWVBbmltYXRvciBvYmplY3QgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgZm9yIHRoZSBvYmplY3QgdG8gZGV0ZXJtaW5lIHRoZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYW5ub3RhdGlvbi9JbnREZWYuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2Fubm90YXRpb24vSW50RGVmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhZTljNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2Fubm90YXRpb24vSW50RGVmLmphdmEKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGFuZHJvaWQuYW5ub3RhdGlvbjsKKworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQ7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuQU5OT1RBVElPTl9UWVBFOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kuQ0xBU1M7CisKKy8qKgorICogRGVub3RlcyB0aGF0IHRoZSBhbm5vdGF0ZWQgZWxlbWVudCBvZiBpbnRlZ2VyIHR5cGUsIHJlcHJlc2VudHMKKyAqIGEgbG9naWNhbCB0eXBlIGFuZCB0aGF0IGl0cyB2YWx1ZSBzaG91bGQgYmUgb25lIG9mIHRoZSBleHBsaWNpdGx5CisgKiBuYW1lZCBjb25zdGFudHMuIElmIHRoZSB7QGxpbmsgI2ZsYWcoKX0gYXR0cmlidXRlIGlzIHNldCB0byB0cnVlLAorICogbXVsdGlwbGUgY29uc3RhbnRzIGNhbiBiZSBjb21iaW5lZC4KKyAqIDxwPgorICogRXhhbXBsZToKKyAqIDxwcmU+e0Bjb2RlCisgKiAgJiM2NDtSZXRlbnRpb24oQ0xBU1MpCisgKiAgJiM2NDtJbnREZWYoJiMxMjM7TkFWSUdBVElPTl9NT0RFX1NUQU5EQVJELCBOQVZJR0FUSU9OX01PREVfTElTVCwgTkFWSUdBVElPTl9NT0RFX1RBQlMmIzEyNTspCisgKiAgcHVibGljICYjNjQ7aW50ZXJmYWNlIE5hdmlnYXRpb25Nb2RlICYjMTIzOyYjMTI1OworICogIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BVklHQVRJT05fTU9ERV9TVEFOREFSRCA9IDA7CisgKiAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkFWSUdBVElPTl9NT0RFX0xJU1QgPSAxOworICogIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BVklHQVRJT05fTU9ERV9UQUJTID0gMjsKKyAqICAuLi4KKyAqICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYXZpZ2F0aW9uTW9kZSgmIzY0O05hdmlnYXRpb25Nb2RlIGludCBtb2RlKTsKKyAqICAmIzY0O05hdmlnYXRpb25Nb2RlCisgKiAgcHVibGljIGFic3RyYWN0IGludCBnZXROYXZpZ2F0aW9uTW9kZSgpOworICogfTwvcHJlPgorICogRm9yIGEgZmxhZywgc2V0IHRoZSBmbGFnIGF0dHJpYnV0ZToKKyAqIDxwcmU+e0Bjb2RlCisgKiAgJiM2NDtJbnREZWYoCisgKiAgICAgIGZsYWcgPSB0cnVlCisgKiAgICAgIHZhbHVlID0gJiMxMjM7TkFWSUdBVElPTl9NT0RFX1NUQU5EQVJELCBOQVZJR0FUSU9OX01PREVfTElTVCwgTkFWSUdBVElPTl9NT0RFX1RBQlMmIzEyNTspCisgKiB9PC9wcmU+CisgKgorICogQGhpZGUKKyAqLworQFJldGVudGlvbihDTEFTUykKK0BUYXJnZXQoe0FOTk9UQVRJT05fVFlQRX0pCitwdWJsaWMgQGludGVyZmFjZSBJbnREZWYgeworICAgIC8qKiBEZWZpbmVzIHRoZSBhbGxvd2VkIGNvbnN0YW50cyBmb3IgdGhpcyBlbGVtZW50ICovCisgICAgbG9uZ1tdIHZhbHVlKCkgZGVmYXVsdCB7fTsKKworICAgIC8qKiBEZWZpbmVzIHdoZXRoZXIgdGhlIGNvbnN0YW50cyBjYW4gYmUgdXNlZCBhcyBhIGZsYWcsIG9yIGp1c3QgYXMgYW4gZW51bSAodGhlIGRlZmF1bHQpICovCisgICAgYm9vbGVhbiBmbGFnKCkgZGVmYXVsdCBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2Fubm90YXRpb24vTm9uTnVsbC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5ub3RhdGlvbi9Ob25OdWxsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhOWVlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2Fubm90YXRpb24vTm9uTnVsbC5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBhbmRyb2lkLmFubm90YXRpb247CisKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OworCitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLkZJRUxEOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5NRVRIT0Q7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLlBBUkFNRVRFUjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5LlNPVVJDRTsKKworLyoqCisgKiBEZW5vdGVzIHRoYXQgYSBwYXJhbWV0ZXIsIGZpZWxkIG9yIG1ldGhvZCByZXR1cm4gdmFsdWUgY2FuIG5ldmVyIGJlIG51bGwuCisgKiA8cD4KKyAqIFRoaXMgaXMgYSBtYXJrZXIgYW5ub3RhdGlvbiBhbmQgaXQgaGFzIG5vIHNwZWNpZmljIGF0dHJpYnV0ZXMuCisgKgorICogQGhpZGUKKyAqLworQFJldGVudGlvbihTT1VSQ0UpCitAVGFyZ2V0KHtNRVRIT0QsIFBBUkFNRVRFUiwgRklFTER9KQorcHVibGljIEBpbnRlcmZhY2UgTm9uTnVsbCB7Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hbm5vdGF0aW9uL051bGxhYmxlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hbm5vdGF0aW9uL051bGxhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNmNDJmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2Fubm90YXRpb24vTnVsbGFibGUuamF2YQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgYW5kcm9pZC5hbm5vdGF0aW9uOworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldDsKKworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5GSUVMRDsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuTUVUSE9EOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5QQVJBTUVURVI7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS5TT1VSQ0U7CisKKy8qKgorICogRGVub3RlcyB0aGF0IGEgcGFyYW1ldGVyLCBmaWVsZCBvciBtZXRob2QgcmV0dXJuIHZhbHVlIGNhbiBiZSBudWxsLgorICogPHA+CisgKiBXaGVuIGRlY29yYXRpbmcgYSBtZXRob2QgY2FsbCBwYXJhbWV0ZXIsIHRoaXMgZGVub3RlcyB0aGF0IHRoZSBwYXJhbWV0ZXIgY2FuCisgKiBsZWdpdGltYXRlbHkgYmUgbnVsbCBhbmQgdGhlIG1ldGhvZCB3aWxsIGdyYWNlZnVsbHkgZGVhbCB3aXRoIGl0LiBUeXBpY2FsbHkKKyAqIHVzZWQgb24gb3B0aW9uYWwgcGFyYW1ldGVycy4KKyAqIDxwPgorICogV2hlbiBkZWNvcmF0aW5nIGEgbWV0aG9kLCB0aGlzIGRlbm90ZXMgdGhlIG1ldGhvZCBtaWdodCBsZWdpdGltYXRlbHkgcmV0dXJuCisgKiBudWxsLgorICogPHA+CisgKiBUaGlzIGlzIGEgbWFya2VyIGFubm90YXRpb24gYW5kIGl0IGhhcyBubyBzcGVjaWZpYyBhdHRyaWJ1dGVzLgorICoKKyAqIEBoaWRlCisgKi8KK0BSZXRlbnRpb24oU09VUkNFKQorQFRhcmdldCh7TUVUSE9ELCBQQVJBTUVURVIsIEZJRUxEfSkKK3B1YmxpYyBAaW50ZXJmYWNlIE51bGxhYmxlIHsKK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2Fubm90YXRpb24vU3RyaW5nRGVmLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hbm5vdGF0aW9uL1N0cmluZ0RlZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmN2YzODAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hbm5vdGF0aW9uL1N0cmluZ0RlZi5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBhbmRyb2lkLmFubm90YXRpb247CisKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OworCitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLkFOTk9UQVRJT05fVFlQRTsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5LkNMQVNTOworCisvKioKKyAqIERlbm90ZXMgdGhhdCB0aGUgYW5ub3RhdGVkIFN0cmluZyBlbGVtZW50LCByZXByZXNlbnRzIGEgbG9naWNhbAorICogdHlwZSBhbmQgdGhhdCBpdHMgdmFsdWUgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZXhwbGljaXRseSBuYW1lZCBjb25zdGFudHMuCisgKiA8cD4KKyAqIEV4YW1wbGU6CisgKiA8cHJlPntAY29kZQorICogICYjNjQ7UmV0ZW50aW9uKFNPVVJDRSkKKyAqICAmIzY0O1N0cmluZ0RlZigmIzEyMzsKKyAqICAgICBQT1dFUl9TRVJWSUNFLAorICogICAgIFdJTkRPV19TRVJWSUNFLAorICogICAgIExBWU9VVF9JTkZMQVRFUl9TRVJWSUNFCisgKiAgJiMxMjU7KQorICogIHB1YmxpYyAmIzY0O2ludGVyZmFjZSBTZXJ2aWNlTmFtZSAmIzEyMzsmIzEyNTsKKyAqICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQT1dFUl9TRVJWSUNFID0gInBvd2VyIjsKKyAqICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXSU5ET1dfU0VSVklDRSA9ICJ3aW5kb3ciOworICogIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExBWU9VVF9JTkZMQVRFUl9TRVJWSUNFID0gImxheW91dF9pbmZsYXRlciI7CisgKiAgLi4uCisgKiAgcHVibGljIGFic3RyYWN0IE9iamVjdCBnZXRTeXN0ZW1TZXJ2aWNlKCYjNjQ7U2VydmljZU5hbWUgU3RyaW5nIG5hbWUpOworICogfTwvcHJlPgorICoKKyAqIEBoaWRlCisgKi8KK0BSZXRlbnRpb24oQ0xBU1MpCitAVGFyZ2V0KHtBTk5PVEFUSU9OX1RZUEV9KQorcHVibGljIEBpbnRlcmZhY2UgU3RyaW5nRGVmIHsKKyAgICAvKiogRGVmaW5lcyB0aGUgYWxsb3dlZCBjb25zdGFudHMgZm9yIHRoaXMgZWxlbWVudCAqLworICAgIFN0cmluZ1tdIHZhbHVlKCkgZGVmYXVsdCB7fTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpb25CYXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpb25CYXIuamF2YQppbmRleCBjNGRkZjFmLi5mYmU4OTg3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aW9uQmFyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGlvbkJhci5qYXZhCkBAIC0xNiw2ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5hcHA7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKQEAgLTI4LDYgKzMxLDkgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNwaW5uZXJBZGFwdGVyOwogCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKwogLyoqCiAgKiBBIHdpbmRvdyBmZWF0dXJlIGF0IHRoZSB0b3Agb2YgdGhlIGFjdGl2aXR5IHRoYXQgbWF5IGRpc3BsYXkgdGhlIGFjdGl2aXR5IHRpdGxlLCBuYXZpZ2F0aW9uCiAgKiBtb2RlcywgYW5kIG90aGVyIGludGVyYWN0aXZlIGl0ZW1zLgpAQCAtNTcsNiArNjMsMTEgQEAKICAqIDwvZGl2PgogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWN0aW9uQmFyIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgQEludERlZih7TkFWSUdBVElPTl9NT0RFX1NUQU5EQVJELCBOQVZJR0FUSU9OX01PREVfTElTVCwgTkFWSUdBVElPTl9NT0RFX1RBQlN9KQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIE5hdmlnYXRpb25Nb2RlIHt9CisKICAgICAvKioKICAgICAgKiBTdGFuZGFyZCBuYXZpZ2F0aW9uIG1vZGUuIENvbnNpc3RzIG9mIGVpdGhlciBhIGxvZ28gb3IgaWNvbgogICAgICAqIGFuZCB0aXRsZSB0ZXh0IHdpdGggYW4gb3B0aW9uYWwgc3VidGl0bGUuIENsaWNraW5nIGFueSBvZiB0aGVzZSBlbGVtZW50cwpAQCAtNzgsNiArODksMTkgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOQVZJR0FUSU9OX01PREVfVEFCUyA9IDI7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwKKyAgICAgICAgICAgIHZhbHVlID0geworICAgICAgICAgICAgICAgICAgICBESVNQTEFZX1VTRV9MT0dPLAorICAgICAgICAgICAgICAgICAgICBESVNQTEFZX1NIT1dfSE9NRSwKKyAgICAgICAgICAgICAgICAgICAgRElTUExBWV9IT01FX0FTX1VQLAorICAgICAgICAgICAgICAgICAgICBESVNQTEFZX1NIT1dfVElUTEUsCisgICAgICAgICAgICAgICAgICAgIERJU1BMQVlfU0hPV19DVVNUT00sCisgICAgICAgICAgICAgICAgICAgIERJU1BMQVlfVElUTEVfTVVMVElQTEVfTElORVMKKyAgICAgICAgICAgIH0pCisgICAgcHVibGljIEBpbnRlcmZhY2UgRGlzcGxheU9wdGlvbnMge30KKwogICAgIC8qKgogICAgICAqIFVzZSBsb2dvIGluc3RlYWQgb2YgaWNvbiBpZiBhdmFpbGFibGUuIFRoaXMgZmxhZyB3aWxsIGNhdXNlIGFwcHJvcHJpYXRlCiAgICAgICogbmF2aWdhdGlvbiBtb2RlcyB0byB1c2UgYSB3aWRlciBsb2dvIGluIHBsYWNlIG9mIHRoZSBzdGFuZGFyZCBpY29uLgpAQCAtMzQxLDcgKzM2NSw3IEBACiAgICAgICogQHBhcmFtIG9wdGlvbnMgQSBjb21iaW5hdGlvbiBvZiB0aGUgYml0cyBkZWZpbmVkIGJ5IHRoZSBESVNQTEFZXyBjb25zdGFudHMKICAgICAgKiAgICAgICAgICAgICAgICBkZWZpbmVkIGluIEFjdGlvbkJhci4KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXREaXNwbGF5T3B0aW9ucyhpbnQgb3B0aW9ucyk7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0RGlzcGxheU9wdGlvbnMoQERpc3BsYXlPcHRpb25zIGludCBvcHRpb25zKTsKICAgICAKICAgICAvKioKICAgICAgKiBTZXQgc2VsZWN0ZWQgZGlzcGxheSBvcHRpb25zLiBPbmx5IHRoZSBvcHRpb25zIHNwZWNpZmllZCBieSBtYXNrIHdpbGwgYmUgY2hhbmdlZC4KQEAgLTM1Niw3ICszODAsNyBAQAogICAgICAqICAgICAgICAgICAgICAgIGRlZmluZWQgaW4gQWN0aW9uQmFyLgogICAgICAqIEBwYXJhbSBtYXNrIEEgYml0IG1hc2sgZGVjbGFyaW5nIHdoaWNoIGRpc3BsYXkgb3B0aW9ucyBzaG91bGQgYmUgY2hhbmdlZC4KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXREaXNwbGF5T3B0aW9ucyhpbnQgb3B0aW9ucywgaW50IG1hc2spOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldERpc3BsYXlPcHRpb25zKEBEaXNwbGF5T3B0aW9ucyBpbnQgb3B0aW9ucywgQERpc3BsYXlPcHRpb25zIGludCBtYXNrKTsKIAogICAgIC8qKgogICAgICAqIFNldCB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIGFjdGl2aXR5IGxvZ28gcmF0aGVyIHRoYW4gdGhlIGFjdGl2aXR5IGljb24uCkBAIC00MzEsNyArNDU1LDcgQEAKICAgICAgKiBAc2VlICNzZXRTdGFja2VkQmFja2dyb3VuZERyYXdhYmxlKERyYXdhYmxlKQogICAgICAqIEBzZWUgI3NldFNwbGl0QmFja2dyb3VuZERyYXdhYmxlKERyYXdhYmxlKQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEJhY2tncm91bmREcmF3YWJsZShEcmF3YWJsZSBkKTsKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRCYWNrZ3JvdW5kRHJhd2FibGUoQE51bGxhYmxlIERyYXdhYmxlIGQpOwogCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBBY3Rpb25CYXIncyBzdGFja2VkIGJhY2tncm91bmQuIFRoaXMgd2lsbCBhcHBlYXIKQEAgLTQ4NCw2ICs1MDgsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIG1vZGUuCiAgICAgICovCisgICAgQE5hdmlnYXRpb25Nb2RlCiAgICAgcHVibGljIGFic3RyYWN0IGludCBnZXROYXZpZ2F0aW9uTW9kZSgpOwogCiAgICAgLyoqCkBAIC00OTQsNyArNTE5LDcgQEAKICAgICAgKiBAc2VlICNOQVZJR0FUSU9OX01PREVfTElTVAogICAgICAqIEBzZWUgI05BVklHQVRJT05fTU9ERV9UQUJTCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmF2aWdhdGlvbk1vZGUoaW50IG1vZGUpOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hdmlnYXRpb25Nb2RlKEBOYXZpZ2F0aW9uTW9kZSBpbnQgbW9kZSk7CiAKICAgICAvKioKICAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHNldCBvZiBkaXNwbGF5IG9wdGlvbnMuIApAQCAtMTAyNCw3ICsxMDQ5LDcgQEAKICAgICAgICAgfSkKICAgICAgICAgcHVibGljIGludCBncmF2aXR5ID0gR3Jhdml0eS5OT19HUkFWSVRZOwogCi0gICAgICAgIHB1YmxpYyBMYXlvdXRQYXJhbXMoQ29udGV4dCBjLCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKKyAgICAgICAgcHVibGljIExheW91dFBhcmFtcyhATm9uTnVsbCBDb250ZXh0IGMsIEF0dHJpYnV0ZVNldCBhdHRycykgewogICAgICAgICAgICAgc3VwZXIoYywgYXR0cnMpOwogCiAgICAgICAgICAgICBUeXBlZEFycmF5IGEgPSBjLm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eS5qYXZhCmluZGV4IGQ2ZGI4YzIuLjY5OGYwNmEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eS5qYXZhCkBAIC0xNiwxMSArMTYsMTcgQEAKIAogcGFja2FnZSBhbmRyb2lkLmFwcDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZTsKK2ltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TdXBlck5vdENhbGxlZEV4Y2VwdGlvbjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuQWN0aW9uQmFySW1wbDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUG9saWN5TWFuYWdlcjsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnRDYWxsYmFja3MyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CkBAIC04NCw2ICs5MCw4IEBACiAKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogCkBAIC04NTIsNiArODYwLDcgQEAKICAgICAgKiBAc2VlICNnZXRXaW5kb3cKICAgICAgKiBAc2VlIGFuZHJvaWQudmlldy5XaW5kb3cjZ2V0Q3VycmVudEZvY3VzCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIFZpZXcgZ2V0Q3VycmVudEZvY3VzKCkgewogICAgICAgICByZXR1cm4gbVdpbmRvdyAhPSBudWxsID8gbVdpbmRvdy5nZXRDdXJyZW50Rm9jdXMoKSA6IG51bGw7CiAgICAgfQpAQCAtODgyLDcgKzg5MSw3IEBACiAgICAgICogQHNlZSAjb25SZXN0b3JlSW5zdGFuY2VTdGF0ZQogICAgICAqIEBzZWUgI29uUG9zdENyZWF0ZQogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShATnVsbGFibGUgQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewogICAgICAgICBpZiAoREVCVUdfTElGRUNZQ0xFKSBTbG9nLnYoVEFHLCAib25DcmVhdGUgIiArIHRoaXMgKyAiOiAiICsgc2F2ZWRJbnN0YW5jZVN0YXRlKTsKICAgICAgICAgaWYgKG1MYXN0Tm9uQ29uZmlndXJhdGlvbkluc3RhbmNlcyAhPSBudWxsKSB7CiAgICAgICAgICAgICBtQWxsTG9hZGVyTWFuYWdlcnMgPSBtTGFzdE5vbkNvbmZpZ3VyYXRpb25JbnN0YW5jZXMubG9hZGVyczsKQEAgLTEwMTAsNyArMTAxOSw3IEBACiAgICAgICogICAgIHJlY2VudGx5IHN1cHBsaWVkIGluIHtAbGluayAjb25TYXZlSW5zdGFuY2VTdGF0ZX0uICA8Yj48aT5Ob3RlOiBPdGhlcndpc2UgaXQgaXMgbnVsbC48L2k+PC9iPgogICAgICAqIEBzZWUgI29uQ3JlYXRlCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgb25Qb3N0Q3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RDcmVhdGUoQE51bGxhYmxlIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKICAgICAgICAgaWYgKCFpc0NoaWxkKCkpIHsKICAgICAgICAgICAgIG1UaXRsZVJlYWR5ID0gdHJ1ZTsKICAgICAgICAgICAgIG9uVGl0bGVDaGFuZ2VkKGdldFRpdGxlKCksIGdldFRpdGxlQ29sb3IoKSk7CkBAIC0xMzQ3LDYgKzEzNTYsNyBAQAogICAgICAqIEBzZWUgI29uU2F2ZUluc3RhbmNlU3RhdGUKICAgICAgKiBAc2VlICNvblBhdXNlCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIENoYXJTZXF1ZW5jZSBvbkNyZWF0ZURlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CkBAIC0xNTUxLDYgKzE1NjEsNyBAQAogICAgICAqIHtAbGluayBGcmFnbWVudCNzZXRSZXRhaW5JbnN0YW5jZShib29sZWFuKX0gaW5zdGVhZDsgdGhpcyBpcyBhbHNvCiAgICAgICogYXZhaWxhYmxlIG9uIG9sZGVyIHBsYXRmb3JtcyB0aHJvdWdoIHRoZSBBbmRyb2lkIGNvbXBhdGliaWxpdHkgcGFja2FnZS4KICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyBPYmplY3QgZ2V0TGFzdE5vbkNvbmZpZ3VyYXRpb25JbnN0YW5jZSgpIHsKICAgICAgICAgcmV0dXJuIG1MYXN0Tm9uQ29uZmlndXJhdGlvbkluc3RhbmNlcyAhPSBudWxsCkBAIC0xNjMwLDYgKzE2NDEsNyBAQAogICAgICAqIEByZXR1cm4gUmV0dXJucyB0aGUgb2JqZWN0IHByZXZpb3VzbHkgcmV0dXJuZWQgYnkKICAgICAgKiB7QGxpbmsgI29uUmV0YWluTm9uQ29uZmlndXJhdGlvbkNoaWxkSW5zdGFuY2VzKCl9CiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0TGFzdE5vbkNvbmZpZ3VyYXRpb25DaGlsZEluc3RhbmNlcygpIHsKICAgICAgICAgcmV0dXJuIG1MYXN0Tm9uQ29uZmlndXJhdGlvbkluc3RhbmNlcyAhPSBudWxsCiAgICAgICAgICAgICAgICAgPyBtTGFzdE5vbkNvbmZpZ3VyYXRpb25JbnN0YW5jZXMuY2hpbGRyZW4gOiBudWxsOwpAQCAtMTY0Miw2ICsxNjU0LDcgQEAKICAgICAgKiBzZXQgb2YgY2hpbGQgYWN0aXZpdGllcywgc3VjaCBhcyBBY3Rpdml0eUdyb3VwLiAgVGhlIHNhbWUgZ3VhcmFudGVlcyBhbmQgcmVzdHJpY3Rpb25zIGFwcGx5CiAgICAgICogYXMgZm9yIHtAbGluayAjb25SZXRhaW5Ob25Db25maWd1cmF0aW9uSW5zdGFuY2UoKX0uICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgSGFzaE1hcDxTdHJpbmcsT2JqZWN0PiBvblJldGFpbk5vbkNvbmZpZ3VyYXRpb25DaGlsZEluc3RhbmNlcygpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpAQCAtMTg4OSw2ICsxOTAyLDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIEFjdGl2aXR5J3MgQWN0aW9uQmFyLCBvciBudWxsIGlmIGl0IGRvZXMgbm90IGhhdmUgb25lLgogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIHB1YmxpYyBBY3Rpb25CYXIgZ2V0QWN0aW9uQmFyKCkgewogICAgICAgICBpbml0QWN0aW9uQmFyKCk7CiAgICAgICAgIHJldHVybiBtQWN0aW9uQmFyOwpAQCAtMTk3OSwxMyArMTk5Myw1OCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSB7QGxpbmsgVHJhbnNpdGlvbk1hbmFnZXJ9IHJlc3BvbnNpYmxlIGZvciBkZWZhdWx0IHRyYW5zaXRpb25zIGluIHRoaXMgd2luZG93LgorICAgICAqIFJlcXVpcmVzIHtAbGluayBXaW5kb3cjRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TfS4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG5vbi1udWxsIGFmdGVyIGNvbnRlbnQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKGUuZy4gYnkgdXNpbmcKKyAgICAgKiB7QGxpbmsgI3NldENvbnRlbnRWaWV3fSkgaWYge0BsaW5rIFdpbmRvdyNGRUFUVVJFX0NPTlRFTlRfVFJBTlNJVElPTlN9IGhhcyBiZWVuIGdyYW50ZWQuPC9wPgorICAgICAqCisgICAgICogQHJldHVybiBUaGlzIHdpbmRvdydzIGNvbnRlbnQgVHJhbnNpdGlvbk1hbmFnZXIgb3IgbnVsbCBpZiBub25lIGlzIHNldC4KKyAgICAgKi8KKyAgICBwdWJsaWMgVHJhbnNpdGlvbk1hbmFnZXIgZ2V0Q29udGVudFRyYW5zaXRpb25NYW5hZ2VyKCkgeworICAgICAgICByZXR1cm4gZ2V0V2luZG93KCkuZ2V0VHJhbnNpdGlvbk1hbmFnZXIoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHtAbGluayBUcmFuc2l0aW9uTWFuYWdlcn0gdG8gdXNlIGZvciBkZWZhdWx0IHRyYW5zaXRpb25zIGluIHRoaXMgd2luZG93LgorICAgICAqIFJlcXVpcmVzIHtAbGluayBXaW5kb3cjRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TfS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0bSBUaGUgVHJhbnNpdGlvbk1hbmFnZXIgdG8gdXNlIGZvciBzY2VuZSBjaGFuZ2VzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvbnRlbnRUcmFuc2l0aW9uTWFuYWdlcihUcmFuc2l0aW9uTWFuYWdlciB0bSkgeworICAgICAgICBnZXRXaW5kb3coKS5zZXRUcmFuc2l0aW9uTWFuYWdlcih0bSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0cmlldmUgdGhlIHtAbGluayBTY2VuZX0gcmVwcmVzZW50aW5nIHRoaXMgd2luZG93J3MgY3VycmVudCBjb250ZW50LgorICAgICAqIFJlcXVpcmVzIHtAbGluayBXaW5kb3cjRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TfS4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlIGN1cnJlbnQgY29udGVudCBpcyBub3QgcmVwcmVzZW50ZWQgYnkgYSBTY2VuZS48L3A+CisgICAgICoKKyAgICAgKiBAcmV0dXJuIEN1cnJlbnQgU2NlbmUgYmVpbmcgc2hvd24gb3IgbnVsbAorICAgICAqLworICAgIHB1YmxpYyBTY2VuZSBnZXRDb250ZW50U2NlbmUoKSB7CisgICAgICAgIHJldHVybiBnZXRXaW5kb3coKS5nZXRDb250ZW50U2NlbmUoKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBTZXRzIHdoZXRoZXIgdGhpcyBhY3Rpdml0eSBpcyBmaW5pc2hlZCB3aGVuIHRvdWNoZWQgb3V0c2lkZSBpdHMgd2luZG93J3MKICAgICAgKiBib3VuZHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RmluaXNoT25Ub3VjaE91dHNpZGUoYm9vbGVhbiBmaW5pc2gpIHsKICAgICAgICAgbVdpbmRvdy5zZXRDbG9zZU9uVG91Y2hPdXRzaWRlKGZpbmlzaCk7CiAgICAgfQotICAgIAorCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7CisgICAgICAgICAgICBERUZBVUxUX0tFWVNfRElTQUJMRSwKKyAgICAgICAgICAgIERFRkFVTFRfS0VZU19ESUFMRVIsCisgICAgICAgICAgICBERUZBVUxUX0tFWVNfU0hPUlRDVVQsCisgICAgICAgICAgICBERUZBVUxUX0tFWVNfU0VBUkNIX0xPQ0FMLAorICAgICAgICAgICAgREVGQVVMVF9LRVlTX1NFQVJDSF9HTE9CQUx9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBAaW50ZXJmYWNlIERlZmF1bHRLZXlNb2RlIHt9CisKICAgICAvKioKICAgICAgKiBVc2Ugd2l0aCB7QGxpbmsgI3NldERlZmF1bHRLZXlNb2RlfSB0byB0dXJuIG9mZiBkZWZhdWx0IGhhbmRsaW5nIG9mCiAgICAgICoga2V5cy4KQEAgLTIwNTUsNyArMjExNCw3IEBACiAgICAgICogQHNlZSAjREVGQVVMVF9LRVlTX1NFQVJDSF9HTE9CQUwKICAgICAgKiBAc2VlICNvbktleURvd24KICAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXREZWZhdWx0S2V5TW9kZShpbnQgbW9kZSkgeworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldERlZmF1bHRLZXlNb2RlKEBEZWZhdWx0S2V5TW9kZSBpbnQgbW9kZSkgewogICAgICAgICBtRGVmYXVsdEtleU1vZGUgPSBtb2RlOwogICAgICAgICAKICAgICAgICAgLy8gU29tZSBtb2RlcyB1c2UgYSBTcGFubmFibGVTdHJpbmdCdWlsZGVyIHRvIHRyYWNrICYgZGlzcGF0Y2ggaW5wdXQgZXZlbnRzCkBAIC0yNTIxLDYgKzI1ODAsNyBAQAogICAgICAqIHNpbXBseSByZXR1cm5zIG51bGwgc28gdGhhdCBhbGwgcGFuZWwgc3ViLXdpbmRvd3Mgd2lsbCBoYXZlIHRoZSBkZWZhdWx0CiAgICAgICogbWVudSBiZWhhdmlvci4KICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBwdWJsaWMgVmlldyBvbkNyZWF0ZVBhbmVsVmlldyhpbnQgZmVhdHVyZUlkKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KQEAgLTMwMTgsNiArMzA3OCw3IEBACiAgICAgICoge0BsaW5rIEZyYWdtZW50TWFuYWdlcn0gaW5zdGVhZDsgdGhpcyBpcyBhbHNvCiAgICAgICogYXZhaWxhYmxlIG9uIG9sZGVyIHBsYXRmb3JtcyB0aHJvdWdoIHRoZSBBbmRyb2lkIGNvbXBhdGliaWxpdHkgcGFja2FnZS4KICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBARGVwcmVjYXRlZAogICAgIHByb3RlY3RlZCBEaWFsb2cgb25DcmVhdGVEaWFsb2coaW50IGlkLCBCdW5kbGUgYXJncykgewogICAgICAgICByZXR1cm4gb25DcmVhdGVEaWFsb2coaWQpOwpAQCAtMzEwNSw2ICszMTY2LDcgQEAKICAgICAgKiB7QGxpbmsgRnJhZ21lbnRNYW5hZ2VyfSBpbnN0ZWFkOyB0aGlzIGlzIGFsc28KICAgICAgKiBhdmFpbGFibGUgb24gb2xkZXIgcGxhdGZvcm1zIHRocm91Z2ggdGhlIEFuZHJvaWQgY29tcGF0aWJpbGl0eSBwYWNrYWdlLgogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIEBEZXByZWNhdGVkCiAgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gc2hvd0RpYWxvZyhpbnQgaWQsIEJ1bmRsZSBhcmdzKSB7CiAgICAgICAgIGlmIChtTWFuYWdlZERpYWxvZ3MgPT0gbnVsbCkgewpAQCAtMzIyNiwxMyArMzI4OCwxMyBAQAogICAgICAqIDxwPkl0IGlzIHR5cGljYWxseSBjYWxsZWQgZnJvbSBvblNlYXJjaFJlcXVlc3RlZCgpLCBlaXRoZXIgZGlyZWN0bHkgZnJvbSAKICAgICAgKiBBY3Rpdml0eS5vblNlYXJjaFJlcXVlc3RlZCgpIG9yIGZyb20gYW4gb3ZlcnJpZGRlbiB2ZXJzaW9uIGluIGFueSBnaXZlbiAKICAgICAgKiBBY3Rpdml0eS4gIElmIHlvdXIgZ29hbCBpcyBzaW1wbHkgdG8gYWN0aXZhdGUgc2VhcmNoLCBpdCBpcyBwcmVmZXJyZWQgdG8gY2FsbAotICAgICAqIG9uU2VhcmNoUmVxdWVzdGVkKCksIHdoaWNoIG1heSBoYXZlIGJlZW4gb3ZlcnJpZGVuIGVsc2V3aGVyZSBpbiB5b3VyIEFjdGl2aXR5LiAgSWYgeW91ciBnb2FsCisgICAgICogb25TZWFyY2hSZXF1ZXN0ZWQoKSwgd2hpY2ggbWF5IGhhdmUgYmVlbiBvdmVycmlkZGVuIGVsc2V3aGVyZSBpbiB5b3VyIEFjdGl2aXR5LiAgSWYgeW91ciBnb2FsCiAgICAgICogaXMgdG8gaW5qZWN0IHNwZWNpZmljIGRhdGEgc3VjaCBhcyBjb250ZXh0IGRhdGEsIGl0IGlzIHByZWZlcnJlZCB0byA8aT5vdmVycmlkZTwvaT4KICAgICAgKiBvblNlYXJjaFJlcXVlc3RlZCgpLCBzbyB0aGF0IGFueSBjYWxsZXJzIHRvIGl0IHdpbGwgYmVuZWZpdCBmcm9tIHRoZSBvdmVycmlkZS4KICAgICAgKiAKICAgICAgKiBAcGFyYW0gaW5pdGlhbFF1ZXJ5IEFueSBub24tbnVsbCBub24tZW1wdHkgc3RyaW5nIHdpbGwgYmUgaW5zZXJ0ZWQgYXMgCiAgICAgICogcHJlLWVudGVyZWQgdGV4dCBpbiB0aGUgc2VhcmNoIHF1ZXJ5IGJveC4KLSAgICAgKiBAcGFyYW0gc2VsZWN0SW5pdGlhbFF1ZXJ5IElmIHRydWUsIHRoZSBpbnRpYWwgcXVlcnkgd2lsbCBiZSBwcmVzZWxlY3RlZCwgd2hpY2ggbWVhbnMgdGhhdAorICAgICAqIEBwYXJhbSBzZWxlY3RJbml0aWFsUXVlcnkgSWYgdHJ1ZSwgdGhlIGluaXRpYWwgcXVlcnkgd2lsbCBiZSBwcmVzZWxlY3RlZCwgd2hpY2ggbWVhbnMgdGhhdAogICAgICAqIGFueSBmdXJ0aGVyIHR5cGluZyB3aWxsIHJlcGxhY2UgaXQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgY2FzZXMgd2hlcmUgYW4gZW50aXJlIHByZS1mb3JtZWQKICAgICAgKiBxdWVyeSBpcyBiZWluZyBpbnNlcnRlZC4gIElmIGZhbHNlLCB0aGUgc2VsZWN0aW9uIHBvaW50IHdpbGwgYmUgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlCiAgICAgICogaW5zZXJ0ZWQgcXVlcnkuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBpbnNlcnRlZCBxdWVyeSBpcyB0ZXh0IHRoYXQgdGhlIHVzZXIgZW50ZXJlZCwKQEAgLTMyNTAsOCArMzMxMiw4IEBACiAgICAgICogQHNlZSBhbmRyb2lkLmFwcC5TZWFyY2hNYW5hZ2VyCiAgICAgICogQHNlZSAjb25TZWFyY2hSZXF1ZXN0ZWQKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydFNlYXJjaChTdHJpbmcgaW5pdGlhbFF1ZXJ5LCBib29sZWFuIHNlbGVjdEluaXRpYWxRdWVyeSwgCi0gICAgICAgICAgICBCdW5kbGUgYXBwU2VhcmNoRGF0YSwgYm9vbGVhbiBnbG9iYWxTZWFyY2gpIHsKKyAgICBwdWJsaWMgdm9pZCBzdGFydFNlYXJjaChATnVsbGFibGUgU3RyaW5nIGluaXRpYWxRdWVyeSwgYm9vbGVhbiBzZWxlY3RJbml0aWFsUXVlcnksCisgICAgICAgICAgICBATnVsbGFibGUgQnVuZGxlIGFwcFNlYXJjaERhdGEsIGJvb2xlYW4gZ2xvYmFsU2VhcmNoKSB7CiAgICAgICAgIGVuc3VyZVNlYXJjaE1hbmFnZXIoKTsKICAgICAgICAgbVNlYXJjaE1hbmFnZXIuc3RhcnRTZWFyY2goaW5pdGlhbFF1ZXJ5LCBzZWxlY3RJbml0aWFsUXVlcnksIGdldENvbXBvbmVudE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFNlYXJjaERhdGEsIGdsb2JhbFNlYXJjaCk7IApAQCAtMzI2Nyw3ICszMzI5LDcgQEAKICAgICAgKiBzZWFyY2hlcy4gIFRoaXMgZGF0YSB3aWxsIGJlIHJldHVybmVkIHdpdGggU0VBUkNIIGludGVudChzKS4gIE51bGwgaWYKICAgICAgKiBubyBleHRyYSBkYXRhIGlzIHJlcXVpcmVkLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHRyaWdnZXJTZWFyY2goU3RyaW5nIHF1ZXJ5LCBCdW5kbGUgYXBwU2VhcmNoRGF0YSkgeworICAgIHB1YmxpYyB2b2lkIHRyaWdnZXJTZWFyY2goU3RyaW5nIHF1ZXJ5LCBATnVsbGFibGUgQnVuZGxlIGFwcFNlYXJjaERhdGEpIHsKICAgICAgICAgZW5zdXJlU2VhcmNoTWFuYWdlcigpOwogICAgICAgICBtU2VhcmNoTWFuYWdlci50cmlnZ2VyU2VhcmNoKHF1ZXJ5LCBnZXRDb21wb25lbnROYW1lKCksIGFwcFNlYXJjaERhdGEpOwogICAgIH0KQEAgLTMzMzQsNiArMzM5Niw3IEBACiAgICAgICogQ29udmVuaWVuY2UgZm9yIGNhbGxpbmcKICAgICAgKiB7QGxpbmsgYW5kcm9pZC52aWV3LldpbmRvdyNnZXRMYXlvdXRJbmZsYXRlcn0uCiAgICAgICovCisgICAgQE5vbk51bGwKICAgICBwdWJsaWMgTGF5b3V0SW5mbGF0ZXIgZ2V0TGF5b3V0SW5mbGF0ZXIoKSB7CiAgICAgICAgIHJldHVybiBnZXRXaW5kb3coKS5nZXRMYXlvdXRJbmZsYXRlcigpOwogICAgIH0KQEAgLTMzNDEsNiArMzQwNCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHtAbGluayBNZW51SW5mbGF0ZXJ9IHdpdGggdGhpcyBjb250ZXh0LgogICAgICAqLworICAgIEBOb25OdWxsCiAgICAgcHVibGljIE1lbnVJbmZsYXRlciBnZXRNZW51SW5mbGF0ZXIoKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFjdGlvbiB2aWV3cyBjYW4gZ2V0IGFuIGFwcHJvcHJpYXRlIHRoZW1lLgogICAgICAgICBpZiAobU1lbnVJbmZsYXRlciA9PSBudWxsKSB7CkBAIC0zMzgyLDcgKzM0NDYsMjkgQEAKICAgICAgKiBAc2VlICNzdGFydEFjdGl2aXR5IAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoSW50ZW50IGludGVudCwgaW50IHJlcXVlc3RDb2RlKSB7Ci0gICAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaW50ZW50LCByZXF1ZXN0Q29kZSwgbnVsbCk7CisgICAgICAgIGZpbmFsIFRyYW5zaXRpb25NYW5hZ2VyIHRtID0gZ2V0V2luZG93KCkuZ2V0VHJhbnNpdGlvbk1hbmFnZXIoKTsKKyAgICAgICAgZmluYWwgU2NlbmUgY3VyclNjZW5lID0gZ2V0V2luZG93KCkuZ2V0Q29udGVudFNjZW5lKCk7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdIHRhcmdldFNjZW5lTmFtZXMgPSBjdXJyU2NlbmUgIT0gbnVsbCAmJiB0bSAhPSBudWxsID8KKyAgICAgICAgICAgICAgICB0bS5nZXRUYXJnZXRTY2VuZU5hbWVzKGN1cnJTY2VuZSkgOiBudWxsOworCisgICAgICAgIGlmICh0YXJnZXRTY2VuZU5hbWVzID09IG51bGwgfHwgdGFyZ2V0U2NlbmVOYW1lcy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpbnRlbnQsIHJlcXVlc3RDb2RlLCBudWxsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRPRE8gQ2FwdHVyZSB0aGUgc2NlbmUgdHJhbnNpdGlvbiBhcmdzIGFuZCBzZW5kIGFsb25nCisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eU9wdGlvbnMgb3B0cyA9IEFjdGl2aXR5T3B0aW9ucy5tYWtlU2NlbmVUcmFuc2l0aW9uQW5pbWF0aW9uKAorICAgICAgICAgICAgICAgICAgICB0YXJnZXRTY2VuZU5hbWVzLCBudWxsLAorICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aXZpdHlPcHRpb25zLk9uU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIG9uU2NlbmVUcmFuc2l0aW9uU3RhcnRlZChTdHJpbmcgZGVzdFNjZW5lTmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFRyYW5zaXRpb24gdCA9IHRtLmdldE5hbWVkVHJhbnNpdGlvbihjdXJyU2NlbmUsIGRlc3RTY2VuZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gRmlsbCB0aGlzIGluIHRvIG5vdGlmeSB0aGUgb3V0Z29pbmcgYWN0aXZpdHkgdGhhdCBpdCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmVhdCB0aGlzIGFzIGEgc3luYyBwb2ludCBmb3IgdGhlIHRyYW5zaXRpb24gLSB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBoYXMgc3RhcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJTY2VuZSB0cmFuc2l0aW9uIHRvIHNjZW5lICIgKyBkZXN0U2NlbmVOYW1lICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdHJhbnNpdGlvbiAiICsgdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0sIG1IYW5kbGVyKTsKKyAgICAgICAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaW50ZW50LCByZXF1ZXN0Q29kZSwgb3B0cy50b0J1bmRsZSgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtMzQxOSw3ICszNTA1LDcgQEAKICAgICAgKgogICAgICAqIEBzZWUgI3N0YXJ0QWN0aXZpdHkgCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChJbnRlbnQgaW50ZW50LCBpbnQgcmVxdWVzdENvZGUsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgcHVibGljIHZvaWQgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChJbnRlbnQgaW50ZW50LCBpbnQgcmVxdWVzdENvZGUsIEBOdWxsYWJsZSBCdW5kbGUgb3B0aW9ucykgewogICAgICAgICBpZiAobVBhcmVudCA9PSBudWxsKSB7CiAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb24uQWN0aXZpdHlSZXN1bHQgYXIgPQogICAgICAgICAgICAgICAgIG1JbnN0cnVtZW50YXRpb24uZXhlY1N0YXJ0QWN0aXZpdHkoCkBAIC0zNDk4LDcgKzM1ODQsNyBAQAogICAgICAqIEBwYXJhbSBleHRyYUZsYWdzIEFsd2F5cyBzZXQgdG8gMC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydEludGVudFNlbmRlckZvclJlc3VsdChJbnRlbnRTZW5kZXIgaW50ZW50LCBpbnQgcmVxdWVzdENvZGUsCi0gICAgICAgICAgICBJbnRlbnQgZmlsbEluSW50ZW50LCBpbnQgZmxhZ3NNYXNrLCBpbnQgZmxhZ3NWYWx1ZXMsIGludCBleHRyYUZsYWdzKQorICAgICAgICAgICAgQE51bGxhYmxlIEludGVudCBmaWxsSW5JbnRlbnQsIGludCBmbGFnc01hc2ssIGludCBmbGFnc1ZhbHVlcywgaW50IGV4dHJhRmxhZ3MpCiAgICAgICAgICAgICB0aHJvd3MgSW50ZW50U2VuZGVyLlNlbmRJbnRlbnRFeGNlcHRpb24gewogICAgICAgICBzdGFydEludGVudFNlbmRlckZvclJlc3VsdChpbnRlbnQsIHJlcXVlc3RDb2RlLCBmaWxsSW5JbnRlbnQsIGZsYWdzTWFzaywKICAgICAgICAgICAgICAgICBmbGFnc1ZhbHVlcywgZXh0cmFGbGFncywgbnVsbCk7CkBAIC0zNTMwLDcgKzM2MTYsNyBAQAogICAgICAqIG92ZXJyaWRlIGFueSB0aGF0IGNvbmZsaWN0IHdpdGggdGhvc2UgZ2l2ZW4gYnkgdGhlIEludGVudFNlbmRlci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydEludGVudFNlbmRlckZvclJlc3VsdChJbnRlbnRTZW5kZXIgaW50ZW50LCBpbnQgcmVxdWVzdENvZGUsCi0gICAgICAgICAgICBJbnRlbnQgZmlsbEluSW50ZW50LCBpbnQgZmxhZ3NNYXNrLCBpbnQgZmxhZ3NWYWx1ZXMsIGludCBleHRyYUZsYWdzLAorICAgICAgICAgICAgQE51bGxhYmxlIEludGVudCBmaWxsSW5JbnRlbnQsIGludCBmbGFnc01hc2ssIGludCBmbGFnc1ZhbHVlcywgaW50IGV4dHJhRmxhZ3MsCiAgICAgICAgICAgICBCdW5kbGUgb3B0aW9ucykgdGhyb3dzIEludGVudFNlbmRlci5TZW5kSW50ZW50RXhjZXB0aW9uIHsKICAgICAgICAgaWYgKG1QYXJlbnQgPT0gbnVsbCkgewogICAgICAgICAgICAgc3RhcnRJbnRlbnRTZW5kZXJGb3JSZXN1bHRJbm5lcihpbnRlbnQsIHJlcXVlc3RDb2RlLCBmaWxsSW5JbnRlbnQsCkBAIC0zNjE4LDcgKzM3MDQsNyBAQAogICAgICAqIEBzZWUgI3N0YXJ0QWN0aXZpdHlGb3JSZXN1bHQgCiAgICAgICovCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3RhcnRBY3Rpdml0eShJbnRlbnQgaW50ZW50LCBCdW5kbGUgb3B0aW9ucykgeworICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHkoSW50ZW50IGludGVudCwgQE51bGxhYmxlIEJ1bmRsZSBvcHRpb25zKSB7CiAgICAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHsKICAgICAgICAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaW50ZW50LCAtMSwgb3B0aW9ucyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zNjY3LDcgKzM3NTMsNyBAQAogICAgICAqIEBzZWUgI3N0YXJ0QWN0aXZpdHlGb3JSZXN1bHQKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXRpZXMoSW50ZW50W10gaW50ZW50cywgQnVuZGxlIG9wdGlvbnMpIHsKKyAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXRpZXMoSW50ZW50W10gaW50ZW50cywgQE51bGxhYmxlIEJ1bmRsZSBvcHRpb25zKSB7CiAgICAgICAgIG1JbnN0cnVtZW50YXRpb24uZXhlY1N0YXJ0QWN0aXZpdGllcyh0aGlzLCBtTWFpblRocmVhZC5nZXRBcHBsaWNhdGlvblRocmVhZCgpLAogICAgICAgICAgICAgICAgIG1Ub2tlbiwgdGhpcywgaW50ZW50cywgb3B0aW9ucyk7CiAgICAgfQpAQCAtMzY4Niw3ICszNzcyLDcgQEAKICAgICAgKiBAcGFyYW0gZXh0cmFGbGFncyBBbHdheXMgc2V0IHRvIDAuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnRJbnRlbnRTZW5kZXIoSW50ZW50U2VuZGVyIGludGVudCwKLSAgICAgICAgICAgIEludGVudCBmaWxsSW5JbnRlbnQsIGludCBmbGFnc01hc2ssIGludCBmbGFnc1ZhbHVlcywgaW50IGV4dHJhRmxhZ3MpCisgICAgICAgICAgICBATnVsbGFibGUgSW50ZW50IGZpbGxJbkludGVudCwgaW50IGZsYWdzTWFzaywgaW50IGZsYWdzVmFsdWVzLCBpbnQgZXh0cmFGbGFncykKICAgICAgICAgICAgIHRocm93cyBJbnRlbnRTZW5kZXIuU2VuZEludGVudEV4Y2VwdGlvbiB7CiAgICAgICAgIHN0YXJ0SW50ZW50U2VuZGVyKGludGVudCwgZmlsbEluSW50ZW50LCBmbGFnc01hc2ssIGZsYWdzVmFsdWVzLAogICAgICAgICAgICAgICAgIGV4dHJhRmxhZ3MsIG51bGwpOwpAQCAtMzcxMyw3ICszNzk5LDcgQEAKICAgICAgKiBvdmVycmlkZSBhbnkgdGhhdCBjb25mbGljdCB3aXRoIHRob3NlIGdpdmVuIGJ5IHRoZSBJbnRlbnRTZW5kZXIuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnRJbnRlbnRTZW5kZXIoSW50ZW50U2VuZGVyIGludGVudCwKLSAgICAgICAgICAgIEludGVudCBmaWxsSW5JbnRlbnQsIGludCBmbGFnc01hc2ssIGludCBmbGFnc1ZhbHVlcywgaW50IGV4dHJhRmxhZ3MsCisgICAgICAgICAgICBATnVsbGFibGUgSW50ZW50IGZpbGxJbkludGVudCwgaW50IGZsYWdzTWFzaywgaW50IGZsYWdzVmFsdWVzLCBpbnQgZXh0cmFGbGFncywKICAgICAgICAgICAgIEJ1bmRsZSBvcHRpb25zKSB0aHJvd3MgSW50ZW50U2VuZGVyLlNlbmRJbnRlbnRFeGNlcHRpb24gewogICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgICAgICBzdGFydEludGVudFNlbmRlckZvclJlc3VsdChpbnRlbnQsIC0xLCBmaWxsSW5JbnRlbnQsIGZsYWdzTWFzaywKQEAgLTM3NDEsNyArMzgyNyw3IEBACiAgICAgICogQHNlZSAjc3RhcnRBY3Rpdml0eQogICAgICAqIEBzZWUgI3N0YXJ0QWN0aXZpdHlGb3JSZXN1bHQKICAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzdGFydEFjdGl2aXR5SWZOZWVkZWQoSW50ZW50IGludGVudCwgaW50IHJlcXVlc3RDb2RlKSB7CisgICAgcHVibGljIGJvb2xlYW4gc3RhcnRBY3Rpdml0eUlmTmVlZGVkKEBOb25OdWxsIEludGVudCBpbnRlbnQsIGludCByZXF1ZXN0Q29kZSkgewogICAgICAgICByZXR1cm4gc3RhcnRBY3Rpdml0eUlmTmVlZGVkKGludGVudCwgcmVxdWVzdENvZGUsIG51bGwpOwogICAgIH0KIApAQCAtMzc3NSw3ICszODYxLDggQEAKICAgICAgKiBAc2VlICNzdGFydEFjdGl2aXR5CiAgICAgICogQHNlZSAjc3RhcnRBY3Rpdml0eUZvclJlc3VsdAogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0QWN0aXZpdHlJZk5lZWRlZChJbnRlbnQgaW50ZW50LCBpbnQgcmVxdWVzdENvZGUsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgcHVibGljIGJvb2xlYW4gc3RhcnRBY3Rpdml0eUlmTmVlZGVkKEBOb25OdWxsIEludGVudCBpbnRlbnQsIGludCByZXF1ZXN0Q29kZSwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBCdW5kbGUgb3B0aW9ucykgewogICAgICAgICBpZiAobVBhcmVudCA9PSBudWxsKSB7CiAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1JFVFVSTl9JTlRFTlRfVE9fQ0FMTEVSOwogICAgICAgICAgICAgdHJ5IHsKQEAgLTM4MjQsNyArMzkxMSw3IEBACiAgICAgICogd2Fzbid0LiAgSW4gZ2VuZXJhbCwgaWYgdHJ1ZSBpcyByZXR1cm5lZCB5b3Ugd2lsbCB0aGVuIHdhbnQgdG8gY2FsbAogICAgICAqIGZpbmlzaCgpIG9uIHlvdXJzZWxmLgogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0TmV4dE1hdGNoaW5nQWN0aXZpdHkoSW50ZW50IGludGVudCkgeworICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0TmV4dE1hdGNoaW5nQWN0aXZpdHkoQE5vbk51bGwgSW50ZW50IGludGVudCkgewogICAgICAgICByZXR1cm4gc3RhcnROZXh0TWF0Y2hpbmdBY3Rpdml0eShpbnRlbnQsIG51bGwpOwogICAgIH0KIApAQCAtMzg0Nyw3ICszOTM0LDcgQEAKICAgICAgKiB3YXNuJ3QuICBJbiBnZW5lcmFsLCBpZiB0cnVlIGlzIHJldHVybmVkIHlvdSB3aWxsIHRoZW4gd2FudCB0byBjYWxsCiAgICAgICogZmluaXNoKCkgb24geW91cnNlbGYuCiAgICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnROZXh0TWF0Y2hpbmdBY3Rpdml0eShJbnRlbnQgaW50ZW50LCBCdW5kbGUgb3B0aW9ucykgeworICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0TmV4dE1hdGNoaW5nQWN0aXZpdHkoQE5vbk51bGwgSW50ZW50IGludGVudCwgQE51bGxhYmxlIEJ1bmRsZSBvcHRpb25zKSB7CiAgICAgICAgIGlmIChtUGFyZW50ID09IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaW50ZW50Lm1pZ3JhdGVFeHRyYVN0cmVhbVRvQ2xpcERhdGEoKTsKQEAgLTM4NzcsNyArMzk2NCw3IEBACiAgICAgICogQHNlZSAjc3RhcnRBY3Rpdml0eQogICAgICAqIEBzZWUgI3N0YXJ0QWN0aXZpdHlGb3JSZXN1bHQKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXR5RnJvbUNoaWxkKEFjdGl2aXR5IGNoaWxkLCBJbnRlbnQgaW50ZW50LAorICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHlGcm9tQ2hpbGQoQE5vbk51bGwgQWN0aXZpdHkgY2hpbGQsIEludGVudCBpbnRlbnQsCiAgICAgICAgICAgICBpbnQgcmVxdWVzdENvZGUpIHsKICAgICAgICAgc3RhcnRBY3Rpdml0eUZyb21DaGlsZChjaGlsZCwgaW50ZW50LCByZXF1ZXN0Q29kZSwgbnVsbCk7CiAgICAgfQpAQCAtMzkwMSw4ICszOTg4LDggQEAKICAgICAgKiBAc2VlICNzdGFydEFjdGl2aXR5IAogICAgICAqIEBzZWUgI3N0YXJ0QWN0aXZpdHlGb3JSZXN1bHQgCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRBY3Rpdml0eUZyb21DaGlsZChBY3Rpdml0eSBjaGlsZCwgSW50ZW50IGludGVudCwgCi0gICAgICAgICAgICBpbnQgcmVxdWVzdENvZGUsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgcHVibGljIHZvaWQgc3RhcnRBY3Rpdml0eUZyb21DaGlsZChATm9uTnVsbCBBY3Rpdml0eSBjaGlsZCwgSW50ZW50IGludGVudCwKKyAgICAgICAgICAgIGludCByZXF1ZXN0Q29kZSwgQE51bGxhYmxlIEJ1bmRsZSBvcHRpb25zKSB7CiAgICAgICAgIEluc3RydW1lbnRhdGlvbi5BY3Rpdml0eVJlc3VsdCBhciA9CiAgICAgICAgICAgICBtSW5zdHJ1bWVudGF0aW9uLmV4ZWNTdGFydEFjdGl2aXR5KAogICAgICAgICAgICAgICAgIHRoaXMsIG1NYWluVGhyZWFkLmdldEFwcGxpY2F0aW9uVGhyZWFkKCksIG1Ub2tlbiwgY2hpbGQsCkBAIC0zOTI3LDcgKzQwMTQsNyBAQAogICAgICAqIEBzZWUgRnJhZ21lbnQjc3RhcnRBY3Rpdml0eQogICAgICAqIEBzZWUgRnJhZ21lbnQjc3RhcnRBY3Rpdml0eUZvclJlc3VsdAogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHlGcm9tRnJhZ21lbnQoRnJhZ21lbnQgZnJhZ21lbnQsIEludGVudCBpbnRlbnQsIAorICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHlGcm9tRnJhZ21lbnQoQE5vbk51bGwgRnJhZ21lbnQgZnJhZ21lbnQsIEludGVudCBpbnRlbnQsCiAgICAgICAgICAgICBpbnQgcmVxdWVzdENvZGUpIHsKICAgICAgICAgc3RhcnRBY3Rpdml0eUZyb21GcmFnbWVudChmcmFnbWVudCwgaW50ZW50LCByZXF1ZXN0Q29kZSwgbnVsbCk7CiAgICAgfQpAQCAtMzk1Miw4ICs0MDM5LDggQEAKICAgICAgKiBAc2VlIEZyYWdtZW50I3N0YXJ0QWN0aXZpdHkgCiAgICAgICogQHNlZSBGcmFnbWVudCNzdGFydEFjdGl2aXR5Rm9yUmVzdWx0IAogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHlGcm9tRnJhZ21lbnQoRnJhZ21lbnQgZnJhZ21lbnQsIEludGVudCBpbnRlbnQsIAotICAgICAgICAgICAgaW50IHJlcXVlc3RDb2RlLCBCdW5kbGUgb3B0aW9ucykgeworICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHlGcm9tRnJhZ21lbnQoQE5vbk51bGwgRnJhZ21lbnQgZnJhZ21lbnQsIEludGVudCBpbnRlbnQsCisgICAgICAgICAgICBpbnQgcmVxdWVzdENvZGUsIEBOdWxsYWJsZSBCdW5kbGUgb3B0aW9ucykgewogICAgICAgICBJbnN0cnVtZW50YXRpb24uQWN0aXZpdHlSZXN1bHQgYXIgPQogICAgICAgICAgICAgbUluc3RydW1lbnRhdGlvbi5leGVjU3RhcnRBY3Rpdml0eSgKICAgICAgICAgICAgICAgICB0aGlzLCBtTWFpblRocmVhZC5nZXRBcHBsaWNhdGlvblRocmVhZCgpLCBtVG9rZW4sIGZyYWdtZW50LApAQCAtMzk4NSw3ICs0MDcyLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydEludGVudFNlbmRlckZyb21DaGlsZChBY3Rpdml0eSBjaGlsZCwgSW50ZW50U2VuZGVyIGludGVudCwKICAgICAgICAgICAgIGludCByZXF1ZXN0Q29kZSwgSW50ZW50IGZpbGxJbkludGVudCwgaW50IGZsYWdzTWFzaywgaW50IGZsYWdzVmFsdWVzLAotICAgICAgICAgICAgaW50IGV4dHJhRmxhZ3MsIEJ1bmRsZSBvcHRpb25zKQorICAgICAgICAgICAgaW50IGV4dHJhRmxhZ3MsIEBOdWxsYWJsZSBCdW5kbGUgb3B0aW9ucykKICAgICAgICAgICAgIHRocm93cyBJbnRlbnRTZW5kZXIuU2VuZEludGVudEV4Y2VwdGlvbiB7CiAgICAgICAgIHN0YXJ0SW50ZW50U2VuZGVyRm9yUmVzdWx0SW5uZXIoaW50ZW50LCByZXF1ZXN0Q29kZSwgZmlsbEluSW50ZW50LAogICAgICAgICAgICAgICAgIGZsYWdzTWFzaywgZmxhZ3NWYWx1ZXMsIGNoaWxkLCBvcHRpb25zKTsKQEAgLTQwODQsNiArNDE3MSw3IEBACiAgICAgICogQHJldHVybiBUaGUgcGFja2FnZSBvZiB0aGUgYWN0aXZpdHkgdGhhdCB3aWxsIHJlY2VpdmUgeW91cgogICAgICAqICAgICAgICAgcmVwbHksIG9yIG51bGwgaWYgbm9uZS4KICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBwdWJsaWMgU3RyaW5nIGdldENhbGxpbmdQYWNrYWdlKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuZ2V0Q2FsbGluZ1BhY2thZ2UobVRva2VuKTsKQEAgLTQxMDYsNiArNDE5NCw3IEBACiAgICAgICogQHJldHVybiBUaGUgQ29tcG9uZW50TmFtZSBvZiB0aGUgYWN0aXZpdHkgdGhhdCB3aWxsIHJlY2VpdmUgeW91cgogICAgICAqICAgICAgICAgcmVwbHksIG9yIG51bGwgaWYgbm9uZS4KICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBwdWJsaWMgQ29tcG9uZW50TmFtZSBnZXRDYWxsaW5nQWN0aXZpdHkoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5nZXRDYWxsaW5nQWN0aXZpdHkobVRva2VuKTsKQEAgLTQyOTgsNyArNDM4Nyw3IEBACiAgICAgICogQHBhcmFtIHJlcXVlc3RDb2RlIFJlcXVlc3QgY29kZSB0aGF0IGhhZCBiZWVuIHVzZWQgdG8gc3RhcnQgdGhlCiAgICAgICogICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGZpbmlzaEFjdGl2aXR5RnJvbUNoaWxkKEFjdGl2aXR5IGNoaWxkLCBpbnQgcmVxdWVzdENvZGUpIHsKKyAgICBwdWJsaWMgdm9pZCBmaW5pc2hBY3Rpdml0eUZyb21DaGlsZChATm9uTnVsbCBBY3Rpdml0eSBjaGlsZCwgaW50IHJlcXVlc3RDb2RlKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgLmZpbmlzaFN1YkFjdGl2aXR5KG1Ub2tlbiwgY2hpbGQubUVtYmVkZGVkSUQsIHJlcXVlc3RDb2RlKTsKQEAgLTQzNTksOCArNDQ0OCw4IEBACiAgICAgICogCiAgICAgICogQHNlZSBQZW5kaW5nSW50ZW50CiAgICAgICovCi0gICAgcHVibGljIFBlbmRpbmdJbnRlbnQgY3JlYXRlUGVuZGluZ1Jlc3VsdChpbnQgcmVxdWVzdENvZGUsIEludGVudCBkYXRhLAotICAgICAgICAgICAgaW50IGZsYWdzKSB7CisgICAgcHVibGljIFBlbmRpbmdJbnRlbnQgY3JlYXRlUGVuZGluZ1Jlc3VsdChpbnQgcmVxdWVzdENvZGUsIEBOb25OdWxsIEludGVudCBkYXRhLAorICAgICAgICAgICAgQFBlbmRpbmdJbnRlbnQuRmxhZ3MgaW50IGZsYWdzKSB7CiAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGdldFBhY2thZ2VOYW1lKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBkYXRhLnByZXBhcmVUb0xlYXZlUHJvY2VzcygpOwpAQCAtNDM4Nyw3ICs0NDc2LDcgQEAKICAgICAgKiBAcGFyYW0gcmVxdWVzdGVkT3JpZW50YXRpb24gQW4gb3JpZW50YXRpb24gY29uc3RhbnQgYXMgdXNlZCBpbgogICAgICAqIHtAbGluayBBY3Rpdml0eUluZm8jc2NyZWVuT3JpZW50YXRpb24gQWN0aXZpdHlJbmZvLnNjcmVlbk9yaWVudGF0aW9ufS4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXF1ZXN0ZWRPcmllbnRhdGlvbihpbnQgcmVxdWVzdGVkT3JpZW50YXRpb24pIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRSZXF1ZXN0ZWRPcmllbnRhdGlvbihAQWN0aXZpdHlJbmZvLlNjcmVlbk9yaWVudGF0aW9uIGludCByZXF1ZXN0ZWRPcmllbnRhdGlvbikgewogICAgICAgICBpZiAobVBhcmVudCA9PSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuc2V0UmVxdWVzdGVkT3JpZW50YXRpb24oCkBAIC00NDA5LDYgKzQ0OTgsNyBAQAogICAgICAqIEByZXR1cm4gUmV0dXJucyBhbiBvcmllbnRhdGlvbiBjb25zdGFudCBhcyB1c2VkIGluCiAgICAgICoge0BsaW5rIEFjdGl2aXR5SW5mbyNzY3JlZW5PcmllbnRhdGlvbiBBY3Rpdml0eUluZm8uc2NyZWVuT3JpZW50YXRpb259LgogICAgICAqLworICAgIEBBY3Rpdml0eUluZm8uU2NyZWVuT3JpZW50YXRpb24KICAgICBwdWJsaWMgaW50IGdldFJlcXVlc3RlZE9yaWVudGF0aW9uKCkgewogICAgICAgICBpZiAobVBhcmVudCA9PSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewpAQCAtNDQ4MCw2ICs0NTcwLDcgQEAKICAgICAgKiAKICAgICAgKiBAcmV0dXJuIFRoZSBsb2NhbCBjbGFzcyBuYW1lLgogICAgICAqLworICAgIEBOb25OdWxsCiAgICAgcHVibGljIFN0cmluZyBnZXRMb2NhbENsYXNzTmFtZSgpIHsKICAgICAgICAgZmluYWwgU3RyaW5nIHBrZyA9IGdldFBhY2thZ2VOYW1lKCk7CiAgICAgICAgIGZpbmFsIFN0cmluZyBjbHMgPSBtQ29tcG9uZW50LmdldENsYXNzTmFtZSgpOwpAQCAtNDUyNSw5ICs0NjE2LDkgQEAKICAgICAgICAgCiAgICAgICAgIG1TZWFyY2hNYW5hZ2VyID0gbmV3IFNlYXJjaE1hbmFnZXIodGhpcywgbnVsbCk7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBnZXRTeXN0ZW1TZXJ2aWNlKFN0cmluZyBuYW1lKSB7CisgICAgcHVibGljIE9iamVjdCBnZXRTeXN0ZW1TZXJ2aWNlKEBTZXJ2aWNlTmFtZSBATm9uTnVsbCBTdHJpbmcgbmFtZSkgewogICAgICAgICBpZiAoZ2V0QmFzZUNvbnRleHQoKSA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAiU3lzdGVtIHNlcnZpY2VzIG5vdCBhdmFpbGFibGUgdG8gQWN0aXZpdGllcyBiZWZvcmUgb25DcmVhdGUoKSIpOwpAQCAtNDU2Nyw2ICs0NjU4LDE3IEBACiAgICAgICAgIHNldFRpdGxlKGdldFRleHQodGl0bGVJZCkpOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIENoYW5nZSB0aGUgY29sb3Igb2YgdGhlIHRpdGxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjdGl2aXR5LgorICAgICAqIDxwPgorICAgICAqIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgc3RhcnRpbmcgaW4gQVBJIExldmVsIDExIGFuZCByZXBsYWNlZCBieSBhY3Rpb24KKyAgICAgKiBiYXIgc3R5bGVzLiBGb3IgaW5mb3JtYXRpb24gb24gc3R5bGluZyB0aGUgQWN0aW9uIEJhciwgcmVhZCB0aGUgPGEKKyAgICAgKiBocmVmPSJ7QGRvY1Jvb3R9IGd1aWRlL3RvcGljcy91aS9hY3Rpb25iYXIuaHRtbCI+QWN0aW9uIEJhcjwvYT4gZGV2ZWxvcGVyCisgICAgICogZ3VpZGUuCisgICAgICoKKyAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYWN0aW9uIGJhciBzdHlsZXMgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyB2b2lkIHNldFRpdGxlQ29sb3IoaW50IHRleHRDb2xvcikgewogICAgICAgICBtVGl0bGVDb2xvciA9IHRleHRDb2xvcjsKICAgICAgICAgb25UaXRsZUNoYW5nZWQobVRpdGxlLCB0ZXh0Q29sb3IpOwpAQCAtNDY4OSw3ICs0NzkxLDcgQEAKIAogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHN1Z2dlc3RlZCBhdWRpbyBzdHJlYW0gd2hvc2Ugdm9sdW1lIHNob3VsZCBiZSBjaGFuZ2VkIGJ5IHRoZQotICAgICAqIGhhcndkYXJlIHZvbHVtZSBjb250cm9scy4KKyAgICAgKiBoYXJkd2FyZSB2b2x1bWUgY29udHJvbHMuCiAgICAgICogCiAgICAgICogQHJldHVybiBUaGUgc3VnZ2VzdGVkIGF1ZGlvIHN0cmVhbSB0eXBlIHdob3NlIHZvbHVtZSBzaG91bGQgYmUgY2hhbmdlZCBieQogICAgICAqICAgICAgICAgdGhlIGhhcmR3YXJlIHZvbHVtZSBjb250cm9scy4KQEAgLTQ3MjUsNiArNDgyNyw3IEBACiAgICAgICogQHNlZSBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXIjY3JlYXRlVmlldwogICAgICAqIEBzZWUgYW5kcm9pZC52aWV3LldpbmRvdyNnZXRMYXlvdXRJbmZsYXRlcgogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIHB1YmxpYyBWaWV3IG9uQ3JlYXRlVmlldyhTdHJpbmcgbmFtZSwgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpAQCAtNDk4Myw2ICs1MDg2LDcgQEAKICAgICAgKgogICAgICAqIEBzZWUgQWN0aW9uTW9kZQogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIHB1YmxpYyBBY3Rpb25Nb2RlIHN0YXJ0QWN0aW9uTW9kZShBY3Rpb25Nb2RlLkNhbGxiYWNrIGNhbGxiYWNrKSB7CiAgICAgICAgIHJldHVybiBtV2luZG93LmdldERlY29yVmlldygpLnN0YXJ0QWN0aW9uTW9kZShjYWxsYmFjayk7CiAgICAgfQpAQCAtNDk5OCw2ICs1MTAyLDcgQEAKICAgICAgKiBAcmV0dXJuIFRoZSBuZXcgYWN0aW9uIG1vZGUsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZSBhY3Rpdml0eSBkb2VzIG5vdCB3YW50IHRvCiAgICAgICogICAgICAgICBwcm92aWRlIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoaXMgYWN0aW9uIG1vZGUuIChJdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIHN5c3RlbS4pCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEFjdGlvbk1vZGUgb25XaW5kb3dTdGFydGluZ0FjdGlvbk1vZGUoQWN0aW9uTW9kZS5DYWxsYmFjayBjYWxsYmFjaykgewogICAgICAgICBpbml0QWN0aW9uQmFyKCk7CkBAIC01MTQxLDYgKzUyNDYsNyBAQAogICAgICAqIEByZXR1cm4gYSBuZXcgSW50ZW50IHRhcmdldGluZyB0aGUgZGVmaW5lZCBwYXJlbnQgb2YgdGhpcyBhY3Rpdml0eSBvciBudWxsIGlmCiAgICAgICogICAgICAgICB0aGVyZSBpcyBubyB2YWxpZCBwYXJlbnQuCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIEludGVudCBnZXRQYXJlbnRBY3Rpdml0eUludGVudCgpIHsKICAgICAgICAgZmluYWwgU3RyaW5nIHBhcmVudE5hbWUgPSBtQWN0aXZpdHlJbmZvLnBhcmVudEFjdGl2aXR5TmFtZTsKICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHBhcmVudE5hbWUpKSB7CkBAIC01MTgzLDYgKzUyODksMTYgQEAKICAgICAgICAgICAgIENoYXJTZXF1ZW5jZSB0aXRsZSwgQWN0aXZpdHkgcGFyZW50LCBTdHJpbmcgaWQsCiAgICAgICAgICAgICBOb25Db25maWd1cmF0aW9uSW5zdGFuY2VzIGxhc3ROb25Db25maWd1cmF0aW9uSW5zdGFuY2VzLAogICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBjb25maWcpIHsKKyAgICAgICAgYXR0YWNoKGNvbnRleHQsIGFUaHJlYWQsIGluc3RyLCB0b2tlbiwgaWRlbnQsIGFwcGxpY2F0aW9uLCBpbnRlbnQsIGluZm8sIHRpdGxlLCBwYXJlbnQsIGlkLAorICAgICAgICAgICAgICAgIGxhc3ROb25Db25maWd1cmF0aW9uSW5zdGFuY2VzLCBjb25maWcsIG51bGwpOworICAgIH0KKworICAgIGZpbmFsIHZvaWQgYXR0YWNoKENvbnRleHQgY29udGV4dCwgQWN0aXZpdHlUaHJlYWQgYVRocmVhZCwKKyAgICAgICAgICAgIEluc3RydW1lbnRhdGlvbiBpbnN0ciwgSUJpbmRlciB0b2tlbiwgaW50IGlkZW50LAorICAgICAgICAgICAgQXBwbGljYXRpb24gYXBwbGljYXRpb24sIEludGVudCBpbnRlbnQsIEFjdGl2aXR5SW5mbyBpbmZvLAorICAgICAgICAgICAgQ2hhclNlcXVlbmNlIHRpdGxlLCBBY3Rpdml0eSBwYXJlbnQsIFN0cmluZyBpZCwKKyAgICAgICAgICAgIE5vbkNvbmZpZ3VyYXRpb25JbnN0YW5jZXMgbGFzdE5vbkNvbmZpZ3VyYXRpb25JbnN0YW5jZXMsCisgICAgICAgICAgICBDb25maWd1cmF0aW9uIGNvbmZpZywgQnVuZGxlIG9wdGlvbnMpIHsKICAgICAgICAgYXR0YWNoQmFzZUNvbnRleHQoY29udGV4dCk7CiAKICAgICAgICAgbUZyYWdtZW50cy5hdHRhY2hBY3Rpdml0eSh0aGlzLCBtQ29udGFpbmVyLCBudWxsKTsKQEAgLTUyMTksNiArNTMzNSw3IEBACiAgICAgICAgICAgICBtV2luZG93LnNldENvbnRhaW5lcihtUGFyZW50LmdldFdpbmRvdygpKTsKICAgICAgICAgfQogICAgICAgICBtV2luZG93TWFuYWdlciA9IG1XaW5kb3cuZ2V0V2luZG93TWFuYWdlcigpOworICAgICAgICBtV2luZG93LnNldFRyYW5zaXRpb25PcHRpb25zKG9wdGlvbnMpOwogICAgICAgICBtQ3VycmVudENvbmZpZyA9IGNvbmZpZzsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnMuamF2YQppbmRleCA4N2IxZTI0Li41ODJjZTNjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlPcHRpb25zLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5T3B0aW9ucy5qYXZhCkBAIC0yMiw2ICsyMiw4IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSVJlbW90ZUNhbGxiYWNrOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIAogLyoqCkBAIC0zMCw2ICszMiw4IEBACiAgKiBDb250ZXh0LnN0YXJ0QWN0aXZpdHkoSW50ZW50LCBCdW5kbGUpfSBhbmQgcmVsYXRlZCBtZXRob2RzLgogICovCiBwdWJsaWMgY2xhc3MgQWN0aXZpdHlPcHRpb25zIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkFjdGl2aXR5T3B0aW9ucyI7CisKICAgICAvKioKICAgICAgKiBUaGUgcGFja2FnZSBuYW1lIHRoYXQgY3JlYXRlZCB0aGUgb3B0aW9ucy4KICAgICAgKiBAaGlkZQpAQCAtOTAsNiArOTQsMzUgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQU5JTV9TVEFSVF9MSVNURU5FUiA9ICJhbmRyb2lkOmFuaW1TdGFydExpc3RlbmVyIjsKIAorICAgIC8qKgorICAgICAqIEEgc3RyaW5nIGFycmF5IG9mIG5hbWVzIGZvciB0aGUgZGVzdGluYXRpb24gc2NlbmUuIFRoaXMgZGVmaW5lcyBhbiBBUEkgaW4gdGhlIHNhbWUKKyAgICAgKiB3YXkgdGhhdCBpbnRlbnQgYWN0aW9uIG9yIGV4dHJhIG5hbWVzIGRvIGFuZCBzaG91bGQgZm9sbG93IGEgc2ltaWxhciBjb252ZW50aW9uOgorICAgICAqICJjb20uZXhhbXBsZS5zY2VuZS5GT08iCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9ERVNUX1NDRU5FX05BTUVTID0gImFuZHJvaWQ6ZGVzdFNjZW5lTmFtZXMiOworCisgICAgLyoqCisgICAgICogQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgZGVzdGluYXRpb24gc2NlbmUgbmFtZSB0aGF0IHdhcyBjaG9zZW4gYnkgdGhlIHRhcmdldC4KKyAgICAgKiBVc2VkIGJ5IHtAbGluayBPblNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lcn0uCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfREVTVF9TQ0VORV9OQU1FX0NIT1NFTiA9ICJhbmRyb2lkOmRlc3RTY2VuZU5hbWVDaG9zZW4iOworCisgICAgLyoqCisgICAgICogQ2FsbGJhY2sgZm9yIHdoZW4gc2NlbmUgdHJhbnNpdGlvbiBpcyBzdGFydGVkLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1NDRU5FX1RSQU5TSVRJT05fU1RBUlRfTElTVEVORVIgPQorICAgICAgICAgICAgImFuZHJvaWQ6c2NlbmVUcmFuc2l0aW9uU3RhcnRMaXN0ZW5lciI7CisKKyAgICAvKioKKyAgICAgKiBBcmd1bWVudHMgZm9yIHRoZSBzY2VuZSB0cmFuc2l0aW9uIGFib3V0IHRvIGJlZ2luLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1NDRU5FX1RSQU5TSVRJT05fQVJHUyA9ICJhbmRyb2lkOnNjZW5lVHJhbnNpdGlvbkFyZ3MiOworCiAgICAgLyoqIEBoaWRlICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU5JTV9OT05FID0gMDsKICAgICAvKiogQGhpZGUgKi8KQEAgLTEwMCw2ICsxMzMsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFOSU1fVEhVTUJOQUlMX1NDQUxFX1VQID0gMzsKICAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTklNX1RIVU1CTkFJTF9TQ0FMRV9ET1dOID0gNDsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTklNX1NDRU5FX1RSQU5TSVRJT04gPSA1OwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgbVBhY2thZ2VOYW1lOwogICAgIHByaXZhdGUgaW50IG1BbmltYXRpb25UeXBlID0gQU5JTV9OT05FOwpAQCAtMTEwLDcgKzE0NSwxMCBAQAogICAgIHByaXZhdGUgaW50IG1TdGFydFk7CiAgICAgcHJpdmF0ZSBpbnQgbVN0YXJ0V2lkdGg7CiAgICAgcHJpdmF0ZSBpbnQgbVN0YXJ0SGVpZ2h0OworICAgIHByaXZhdGUgU3RyaW5nW10gbURlc3RTY2VuZU5hbWVzOworICAgIHByaXZhdGUgQnVuZGxlIG1UcmFuc2l0aW9uQXJnczsKICAgICBwcml2YXRlIElSZW1vdGVDYWxsYmFjayBtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyOworICAgIHByaXZhdGUgSVJlbW90ZUNhbGxiYWNrIG1TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXI7CiAKICAgICAvKioKICAgICAgKiBDcmVhdGUgYW4gQWN0aXZpdHlPcHRpb25zIHNwZWNpZnlpbmcgYSBjdXN0b20gYW5pbWF0aW9uIHRvIHJ1biB3aGVuCkBAIC0xNTYsMTEgKzE5NCwxMiBAQAogICAgICAgICBvcHRzLm1BbmltYXRpb25UeXBlID0gQU5JTV9DVVNUT007CiAgICAgICAgIG9wdHMubUN1c3RvbUVudGVyUmVzSWQgPSBlbnRlclJlc0lkOwogICAgICAgICBvcHRzLm1DdXN0b21FeGl0UmVzSWQgPSBleGl0UmVzSWQ7Ci0gICAgICAgIG9wdHMuc2V0TGlzdGVuZXIoaGFuZGxlciwgbGlzdGVuZXIpOworICAgICAgICBvcHRzLnNldE9uQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyKGhhbmRsZXIsIGxpc3RlbmVyKTsKICAgICAgICAgcmV0dXJuIG9wdHM7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHNldExpc3RlbmVyKEhhbmRsZXIgaGFuZGxlciwgT25BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICBwcml2YXRlIHZvaWQgc2V0T25BbmltYXRpb25TdGFydGVkTGlzdGVuZXIoSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgT25BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgbGlzdGVuZXIpIHsKICAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGZpbmFsIEhhbmRsZXIgaCA9IGhhbmRsZXI7CiAgICAgICAgICAgICBmaW5hbCBPbkFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciBmaW5hbExpc3RlbmVyID0gbGlzdGVuZXI7CkBAIC0xNzYsNiArMjE1LDI0IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgc2V0T25TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXIoSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgT25TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIEhhbmRsZXIgaCA9IGhhbmRsZXI7CisgICAgICAgICAgICBmaW5hbCBPblNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lciBsID0gbGlzdGVuZXI7CisgICAgICAgICAgICBtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyID0gbmV3IElSZW1vdGVDYWxsYmFjay5TdHViKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBzZW5kUmVzdWx0KGZpbmFsIEJ1bmRsZSBkYXRhKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgaC5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLm9uU2NlbmVUcmFuc2l0aW9uU3RhcnRlZChkYXRhICE9IG51bGwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5nZXRTdHJpbmcoS0VZX0RFU1RfU0NFTkVfTkFNRV9DSE9TRU4pIDogbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBDYWxsYmFjayBmb3IgdXNlIHdpdGgge0BsaW5rIEFjdGl2aXR5T3B0aW9ucyNtYWtlVGh1bWJuYWlsU2NhbGVVcEFuaW1hdGlvbn0KICAgICAgKiB0byBmaW5kIG91dCB3aGVuIHRoZSBnaXZlbiBhbmltYXRpb24gaGFzIHN0YXJ0ZWQgcnVubmluZy4KQEAgLTE4Niw2ICsyNDMsMTUgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBDYWxsYmFjayBmb3IgdXNlIHdpdGgge0BsaW5rIEFjdGl2aXR5T3B0aW9ucyNtYWtlU2NlbmVUcmFuc2l0aW9uQW5pbWF0aW9ufQorICAgICAqIHRvIGZpbmQgb3V0IHdoZW4gYSB0cmFuc2l0aW9uIGlzIGFib3V0IHRvIGJlZ2luLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIGludGVyZmFjZSBPblNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lciB7CisgICAgICAgIHZvaWQgb25TY2VuZVRyYW5zaXRpb25TdGFydGVkKFN0cmluZyBkZXN0U2NlbmVOYW1lKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDcmVhdGUgYW4gQWN0aXZpdHlPcHRpb25zIHNwZWNpZnlpbmcgYW4gYW5pbWF0aW9uIHdoZXJlIHRoZSBuZXcKICAgICAgKiBhY3Rpdml0eSBpcyBzY2FsZWQgZnJvbSBhIHNtYWxsIG9yaWdpbmF0aW5nIGFyZWEgb2YgdGhlIHNjcmVlbiB0bwogICAgICAqIGl0cyBmaW5hbCBmdWxsIHJlcHJlc2VudGF0aW9uLgpAQCAtMjk4LDcgKzM2NCwyMyBAQAogICAgICAgICBzb3VyY2UuZ2V0TG9jYXRpb25PblNjcmVlbihwdHMpOwogICAgICAgICBvcHRzLm1TdGFydFggPSBwdHNbMF0gKyBzdGFydFg7CiAgICAgICAgIG9wdHMubVN0YXJ0WSA9IHB0c1sxXSArIHN0YXJ0WTsKLSAgICAgICAgb3B0cy5zZXRMaXN0ZW5lcihzb3VyY2UuZ2V0SGFuZGxlcigpLCBsaXN0ZW5lcik7CisgICAgICAgIG9wdHMuc2V0T25BbmltYXRpb25TdGFydGVkTGlzdGVuZXIoc291cmNlLmdldEhhbmRsZXIoKSwgbGlzdGVuZXIpOworICAgICAgICByZXR1cm4gb3B0czsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYW4gQWN0aXZpdHlPcHRpb25zIHNwZWNpZnlpbmcgYW4gYW5pbWF0aW9uIHdoZXJlIGFuIGFjdGl2aXR5IHdpbmRvdyBpcyBhc2tlZAorICAgICAqIHRvIHBlcmZvcm0gYW5pbWF0aW9ucyB3aXRoaW4gdGhlIHdpbmRvdyBjb250ZW50LgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEFjdGl2aXR5T3B0aW9ucyBtYWtlU2NlbmVUcmFuc2l0aW9uQW5pbWF0aW9uKFN0cmluZ1tdIGRlc3RTY2VuZU5hbWVzLAorICAgICAgICAgICAgQnVuZGxlIGFyZ3MsIE9uU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyIGxpc3RlbmVyLCBIYW5kbGVyIGhhbmRsZXIpIHsKKyAgICAgICAgQWN0aXZpdHlPcHRpb25zIG9wdHMgPSBuZXcgQWN0aXZpdHlPcHRpb25zKCk7CisgICAgICAgIG9wdHMubUFuaW1hdGlvblR5cGUgPSBBTklNX1NDRU5FX1RSQU5TSVRJT047CisgICAgICAgIG9wdHMubURlc3RTY2VuZU5hbWVzID0gZGVzdFNjZW5lTmFtZXM7CisgICAgICAgIG9wdHMubVRyYW5zaXRpb25BcmdzID0gYXJnczsKKyAgICAgICAgb3B0cy5zZXRPblNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lcihoYW5kbGVyLCBsaXN0ZW5lcik7CiAgICAgICAgIHJldHVybiBvcHRzOwogICAgIH0KIApAQCAtMzA5LDIzICszOTEsMzYgQEAKICAgICBwdWJsaWMgQWN0aXZpdHlPcHRpb25zKEJ1bmRsZSBvcHRzKSB7CiAgICAgICAgIG1QYWNrYWdlTmFtZSA9IG9wdHMuZ2V0U3RyaW5nKEtFWV9QQUNLQUdFX05BTUUpOwogICAgICAgICBtQW5pbWF0aW9uVHlwZSA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX1RZUEUpOwotICAgICAgICBpZiAobUFuaW1hdGlvblR5cGUgPT0gQU5JTV9DVVNUT00pIHsKLSAgICAgICAgICAgIG1DdXN0b21FbnRlclJlc0lkID0gb3B0cy5nZXRJbnQoS0VZX0FOSU1fRU5URVJfUkVTX0lELCAwKTsKLSAgICAgICAgICAgIG1DdXN0b21FeGl0UmVzSWQgPSBvcHRzLmdldEludChLRVlfQU5JTV9FWElUX1JFU19JRCwgMCk7Ci0gICAgICAgICAgICBtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyID0gSVJlbW90ZUNhbGxiYWNrLlN0dWIuYXNJbnRlcmZhY2UoCi0gICAgICAgICAgICAgICAgICAgIG9wdHMuZ2V0SUJpbmRlcihLRVlfQU5JTV9TVEFSVF9MSVNURU5FUikpOwotICAgICAgICB9IGVsc2UgaWYgKG1BbmltYXRpb25UeXBlID09IEFOSU1fU0NBTEVfVVApIHsKLSAgICAgICAgICAgIG1TdGFydFggPSBvcHRzLmdldEludChLRVlfQU5JTV9TVEFSVF9YLCAwKTsKLSAgICAgICAgICAgIG1TdGFydFkgPSBvcHRzLmdldEludChLRVlfQU5JTV9TVEFSVF9ZLCAwKTsKLSAgICAgICAgICAgIG1TdGFydFdpZHRoID0gb3B0cy5nZXRJbnQoS0VZX0FOSU1fU1RBUlRfV0lEVEgsIDApOwotICAgICAgICAgICAgbVN0YXJ0SGVpZ2h0ID0gb3B0cy5nZXRJbnQoS0VZX0FOSU1fU1RBUlRfSEVJR0hULCAwKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQW5pbWF0aW9uVHlwZSA9PSBBTklNX1RIVU1CTkFJTF9TQ0FMRV9VUCB8fAotICAgICAgICAgICAgICAgIG1BbmltYXRpb25UeXBlID09IEFOSU1fVEhVTUJOQUlMX1NDQUxFX0RPV04pIHsKLSAgICAgICAgICAgIG1UaHVtYm5haWwgPSAoQml0bWFwKW9wdHMuZ2V0UGFyY2VsYWJsZShLRVlfQU5JTV9USFVNQk5BSUwpOwotICAgICAgICAgICAgbVN0YXJ0WCA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX1NUQVJUX1gsIDApOwotICAgICAgICAgICAgbVN0YXJ0WSA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX1NUQVJUX1ksIDApOwotICAgICAgICAgICAgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciA9IElSZW1vdGVDYWxsYmFjay5TdHViLmFzSW50ZXJmYWNlKAotICAgICAgICAgICAgICAgICAgICBvcHRzLmdldElCaW5kZXIoS0VZX0FOSU1fU1RBUlRfTElTVEVORVIpKTsKKyAgICAgICAgc3dpdGNoIChtQW5pbWF0aW9uVHlwZSkgeworICAgICAgICAgICAgY2FzZSBBTklNX0NVU1RPTToKKyAgICAgICAgICAgICAgICBtQ3VzdG9tRW50ZXJSZXNJZCA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX0VOVEVSX1JFU19JRCwgMCk7CisgICAgICAgICAgICAgICAgbUN1c3RvbUV4aXRSZXNJZCA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX0VYSVRfUkVTX0lELCAwKTsKKyAgICAgICAgICAgICAgICBtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyID0gSVJlbW90ZUNhbGxiYWNrLlN0dWIuYXNJbnRlcmZhY2UoCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmdldEJpbmRlcihLRVlfQU5JTV9TVEFSVF9MSVNURU5FUikpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFOSU1fU0NBTEVfVVA6CisgICAgICAgICAgICAgICAgbVN0YXJ0WCA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX1NUQVJUX1gsIDApOworICAgICAgICAgICAgICAgIG1TdGFydFkgPSBvcHRzLmdldEludChLRVlfQU5JTV9TVEFSVF9ZLCAwKTsKKyAgICAgICAgICAgICAgICBtU3RhcnRXaWR0aCA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX1NUQVJUX1dJRFRILCAwKTsKKyAgICAgICAgICAgICAgICBtU3RhcnRIZWlnaHQgPSBvcHRzLmdldEludChLRVlfQU5JTV9TVEFSVF9IRUlHSFQsIDApOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFOSU1fVEhVTUJOQUlMX1NDQUxFX1VQOgorICAgICAgICAgICAgY2FzZSBBTklNX1RIVU1CTkFJTF9TQ0FMRV9ET1dOOgorICAgICAgICAgICAgICAgIG1UaHVtYm5haWwgPSAoQml0bWFwKW9wdHMuZ2V0UGFyY2VsYWJsZShLRVlfQU5JTV9USFVNQk5BSUwpOworICAgICAgICAgICAgICAgIG1TdGFydFggPSBvcHRzLmdldEludChLRVlfQU5JTV9TVEFSVF9YLCAwKTsKKyAgICAgICAgICAgICAgICBtU3RhcnRZID0gb3B0cy5nZXRJbnQoS0VZX0FOSU1fU1RBUlRfWSwgMCk7CisgICAgICAgICAgICAgICAgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciA9IElSZW1vdGVDYWxsYmFjay5TdHViLmFzSW50ZXJmYWNlKAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5nZXRCaW5kZXIoS0VZX0FOSU1fU1RBUlRfTElTVEVORVIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBTklNX1NDRU5FX1RSQU5TSVRJT046CisgICAgICAgICAgICAgICAgbURlc3RTY2VuZU5hbWVzID0gb3B0cy5nZXRTdHJpbmdBcnJheShLRVlfREVTVF9TQ0VORV9OQU1FUyk7CisgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25BcmdzID0gb3B0cy5nZXRCdW5kbGUoS0VZX1NDRU5FX1RSQU5TSVRJT05fQVJHUyk7CisgICAgICAgICAgICAgICAgbVNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lciA9IElSZW1vdGVDYWxsYmFjay5TdHViLmFzSW50ZXJmYWNlKAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5nZXRCaW5kZXIoS0VZX1NDRU5FX1RSQU5TSVRJT05fU1RBUlRfTElTVEVORVIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzc1LDExICs0NzAsMzcgQEAKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVzdFNjZW5lTmFtZXMoKSB7CisgICAgICAgIHJldHVybiBtRGVzdFNjZW5lTmFtZXM7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIEJ1bmRsZSBnZXRTY2VuZVRyYW5zaXRpb25BcmdzKCkgeworICAgICAgICByZXR1cm4gbVRyYW5zaXRpb25BcmdzOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyBJUmVtb3RlQ2FsbGJhY2sgZ2V0T25BbmltYXRpb25TdGFydExpc3RlbmVyKCkgewogICAgICAgICByZXR1cm4gbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lcjsKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaFNjZW5lVHJhbnNpdGlvblN0YXJ0ZWQoU3RyaW5nIGRlc3RTY2VuZSkgeworICAgICAgICBpZiAobVNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICBCdW5kbGUgZGF0YSA9IG51bGw7CisgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGRlc3RTY2VuZSkpIHsKKyAgICAgICAgICAgICAgICBkYXRhID0gbmV3IEJ1bmRsZSgpOworICAgICAgICAgICAgICAgIGRhdGEucHV0U3RyaW5nKEtFWV9ERVNUX1NDRU5FX05BTUVfQ0hPU0VOLCBkZXN0U2NlbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyLnNlbmRSZXN1bHQoZGF0YSk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhdWdodCBleGNlcHRpb24gZGlzcGF0Y2hpbmcgc2NlbmUgdHJhbnNpdGlvbiBzdGFydCIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCiAgICAgcHVibGljIHZvaWQgYWJvcnQoKSB7CiAgICAgICAgIGlmIChtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7CkBAIC0zODcsNiArNTA4LDEyIEBACiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGlmIChtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lci5zZW5kUmVzdWx0KG51bGwpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwpAQCAtNDExLDEzICs1MzgsMTYgQEAKICAgICAgICAgICAgICAgICBtQ3VzdG9tRW50ZXJSZXNJZCA9IG90aGVyT3B0aW9ucy5tQ3VzdG9tRW50ZXJSZXNJZDsKICAgICAgICAgICAgICAgICBtQ3VzdG9tRXhpdFJlc0lkID0gb3RoZXJPcHRpb25zLm1DdXN0b21FeGl0UmVzSWQ7CiAgICAgICAgICAgICAgICAgbVRodW1ibmFpbCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKG90aGVyT3B0aW9ucy5tQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiAobUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdGhlck9wdGlvbnMubUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lci5zZW5kUmVzdWx0KG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lci5zZW5kUmVzdWx0KG51bGwpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgPSBvdGhlck9wdGlvbnMubUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lcjsKKyAgICAgICAgICAgICAgICBtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtVHJhbnNpdGlvbkFyZ3MgPSBudWxsOworICAgICAgICAgICAgICAgIG1EZXN0U2NlbmVOYW1lcyA9IG51bGw7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFOSU1fU0NBTEVfVVA6CiAgICAgICAgICAgICAgICAgbUFuaW1hdGlvblR5cGUgPSBvdGhlck9wdGlvbnMubUFuaW1hdGlvblR5cGU7CkBAIC00MjUsMTMgKzU1NSwxNiBAQAogICAgICAgICAgICAgICAgIG1TdGFydFkgPSBvdGhlck9wdGlvbnMubVN0YXJ0WTsKICAgICAgICAgICAgICAgICBtU3RhcnRXaWR0aCA9IG90aGVyT3B0aW9ucy5tU3RhcnRXaWR0aDsKICAgICAgICAgICAgICAgICBtU3RhcnRIZWlnaHQgPSBvdGhlck9wdGlvbnMubVN0YXJ0SGVpZ2h0OwotICAgICAgICAgICAgICAgIGlmIChvdGhlck9wdGlvbnMubUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJPcHRpb25zLm1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIuc2VuZFJlc3VsdChudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIuc2VuZFJlc3VsdChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtVHJhbnNpdGlvbkFyZ3MgPSBudWxsOworICAgICAgICAgICAgICAgIG1EZXN0U2NlbmVOYW1lcyA9IG51bGw7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFOSU1fVEhVTUJOQUlMX1NDQUxFX1VQOgogICAgICAgICAgICAgY2FzZSBBTklNX1RIVU1CTkFJTF9TQ0FMRV9ET1dOOgpAQCAtNDM5LDEzICs1NzIsMzAgQEAKICAgICAgICAgICAgICAgICBtVGh1bWJuYWlsID0gb3RoZXJPcHRpb25zLm1UaHVtYm5haWw7CiAgICAgICAgICAgICAgICAgbVN0YXJ0WCA9IG90aGVyT3B0aW9ucy5tU3RhcnRYOwogICAgICAgICAgICAgICAgIG1TdGFydFkgPSBvdGhlck9wdGlvbnMubVN0YXJ0WTsKLSAgICAgICAgICAgICAgICBpZiAob3RoZXJPcHRpb25zLm1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyT3B0aW9ucy5tQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyLnNlbmRSZXN1bHQobnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyLnNlbmRSZXN1bHQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciA9IG90aGVyT3B0aW9ucy5tQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyOworICAgICAgICAgICAgICAgIG1TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXIgPSBudWxsOworICAgICAgICAgICAgICAgIG1UcmFuc2l0aW9uQXJncyA9IG51bGw7CisgICAgICAgICAgICAgICAgbURlc3RTY2VuZU5hbWVzID0gbnVsbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQU5JTV9TQ0VORV9UUkFOU0lUSU9OOgorICAgICAgICAgICAgICAgIG1BbmltYXRpb25UeXBlID0gb3RoZXJPcHRpb25zLm1BbmltYXRpb25UeXBlOworICAgICAgICAgICAgICAgIGlmIChtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXIuc2VuZFJlc3VsdChudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyID0gb3RoZXJPcHRpb25zLm1TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXI7CisgICAgICAgICAgICAgICAgbURlc3RTY2VuZU5hbWVzID0gb3RoZXJPcHRpb25zLm1EZXN0U2NlbmVOYW1lczsKKyAgICAgICAgICAgICAgICBtVHJhbnNpdGlvbkFyZ3MgPSBvdGhlck9wdGlvbnMubVRyYW5zaXRpb25BcmdzOworICAgICAgICAgICAgICAgIG1UaHVtYm5haWwgPSBudWxsOworICAgICAgICAgICAgICAgIG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgPSBudWxsOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNDY4LDcgKzYxOCw3IEBACiAgICAgICAgICAgICAgICAgYi5wdXRJbnQoS0VZX0FOSU1fVFlQRSwgbUFuaW1hdGlvblR5cGUpOwogICAgICAgICAgICAgICAgIGIucHV0SW50KEtFWV9BTklNX0VOVEVSX1JFU19JRCwgbUN1c3RvbUVudGVyUmVzSWQpOwogICAgICAgICAgICAgICAgIGIucHV0SW50KEtFWV9BTklNX0VYSVRfUkVTX0lELCBtQ3VzdG9tRXhpdFJlc0lkKTsKLSAgICAgICAgICAgICAgICBiLnB1dElCaW5kZXIoS0VZX0FOSU1fU1RBUlRfTElTVEVORVIsIG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIKKyAgICAgICAgICAgICAgICBiLnB1dEJpbmRlcihLRVlfQU5JTV9TVEFSVF9MSVNURU5FUiwgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lcgogICAgICAgICAgICAgICAgICAgICAgICAgIT0gbnVsbCA/IG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIuYXNCaW5kZXIoKSA6IG51bGwpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBTklNX1NDQUxFX1VQOgpAQCAtNDg0LDEwICs2MzQsMzEgQEAKICAgICAgICAgICAgICAgICBiLnB1dFBhcmNlbGFibGUoS0VZX0FOSU1fVEhVTUJOQUlMLCBtVGh1bWJuYWlsKTsKICAgICAgICAgICAgICAgICBiLnB1dEludChLRVlfQU5JTV9TVEFSVF9YLCBtU3RhcnRYKTsKICAgICAgICAgICAgICAgICBiLnB1dEludChLRVlfQU5JTV9TVEFSVF9ZLCBtU3RhcnRZKTsKLSAgICAgICAgICAgICAgICBiLnB1dElCaW5kZXIoS0VZX0FOSU1fU1RBUlRfTElTVEVORVIsIG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIKKyAgICAgICAgICAgICAgICBiLnB1dEJpbmRlcihLRVlfQU5JTV9TVEFSVF9MSVNURU5FUiwgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lcgogICAgICAgICAgICAgICAgICAgICAgICAgIT0gbnVsbCA/IG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIuYXNCaW5kZXIoKSA6IG51bGwpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTklNX1NDRU5FX1RSQU5TSVRJT046CisgICAgICAgICAgICAgICAgYi5wdXRJbnQoS0VZX0FOSU1fVFlQRSwgbUFuaW1hdGlvblR5cGUpOworICAgICAgICAgICAgICAgIGIucHV0U3RyaW5nQXJyYXkoS0VZX0RFU1RfU0NFTkVfTkFNRVMsIG1EZXN0U2NlbmVOYW1lcyk7CisgICAgICAgICAgICAgICAgYi5wdXRCdW5kbGUoS0VZX1NDRU5FX1RSQU5TSVRJT05fQVJHUywgbVRyYW5zaXRpb25BcmdzKTsKKyAgICAgICAgICAgICAgICBiLnB1dEJpbmRlcihLRVlfU0NFTkVfVFJBTlNJVElPTl9TVEFSVF9MSVNURU5FUiwgbVNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lcgorICAgICAgICAgICAgICAgICAgICAgICAgIT0gbnVsbCA/IG1TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXIuYXNCaW5kZXIoKSA6IG51bGwpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBiOwogICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZmlsdGVyZWQgb3B0aW9ucyBvbmx5IG1lYW50IHRvIGJlIHNlZW4gYnkgdGhlIHRhcmdldCBhY3Rpdml0eSBpdHNlbGYKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBBY3Rpdml0eU9wdGlvbnMgZm9yVGFyZ2V0QWN0aXZpdHkoKSB7CisgICAgICAgIGlmIChtQW5pbWF0aW9uVHlwZSA9PSBBTklNX1NDRU5FX1RSQU5TSVRJT04pIHsKKyAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5T3B0aW9ucyByZXN1bHQgPSBuZXcgQWN0aXZpdHlPcHRpb25zKCk7CisgICAgICAgICAgICByZXN1bHQudXBkYXRlKHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eVRocmVhZC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5VGhyZWFkLmphdmEKaW5kZXggOWYyMWEzNi4uNTIzOWNjNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5VGhyZWFkLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5VGhyZWFkLmphdmEKQEAgLTU2LDYgKzU2LDcgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5JUmVtb3RlQ2FsbGJhY2s7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZVF1ZXVlOwpAQCAtNjgsMTIgKzY5LDE1IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwogaW1wb3J0IGFuZHJvaWQub3MuVHJhY2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOworaW1wb3J0IGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZTsKK2ltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFuZHJvaWRSdW50aW1lRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkV2ZW50TG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZ1ByaW50ZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlByaW50V3JpdGVyUHJpbnRlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3VwZXJOb3RDYWxsZWRFeGNlcHRpb247CkBAIC0yODcsNiArMjkxLDcgQEAKICAgICAgICAgYm9vbGVhbiBpc0ZvcndhcmQ7CiAgICAgICAgIGludCBwZW5kaW5nQ29uZmlnQ2hhbmdlczsKICAgICAgICAgYm9vbGVhbiBvbmx5TG9jYWxSZXF1ZXN0OworICAgICAgICBCdW5kbGUgYWN0aXZpdHlPcHRpb25zOwogCiAgICAgICAgIFZpZXcgbVBlbmRpbmdSZW1vdmVXaW5kb3c7CiAgICAgICAgIFdpbmRvd01hbmFnZXIgbVBlbmRpbmdSZW1vdmVXaW5kb3dNYW5hZ2VyOwpAQCAtNTc5LDkgKzU4NCwxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIGZpbmFsIHZvaWQgc2NoZWR1bGVSZXN1bWVBY3Rpdml0eShJQmluZGVyIHRva2VuLCBpbnQgcHJvY2Vzc1N0YXRlLAotICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNGb3J3YXJkKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBpc0ZvcndhcmQsIEJ1bmRsZSByZXN1bWVBcmdzKSB7CiAgICAgICAgICAgICB1cGRhdGVQcm9jZXNzU3RhdGUocHJvY2Vzc1N0YXRlLCBmYWxzZSk7Ci0gICAgICAgICAgICBzZW5kTWVzc2FnZShILlJFU1VNRV9BQ1RJVklUWSwgdG9rZW4sIGlzRm9yd2FyZCA/IDEgOiAwKTsKKyAgICAgICAgICAgIHNlbmRNZXNzYWdlKEguUkVTVU1FX0FDVElWSVRZLCBuZXcgUGFpcjxJQmluZGVyLCBCdW5kbGU+KHRva2VuLCByZXN1bWVBcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgaXNGb3J3YXJkID8gMSA6IDApOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIGZpbmFsIHZvaWQgc2NoZWR1bGVTZW5kUmVzdWx0KElCaW5kZXIgdG9rZW4sIExpc3Q8UmVzdWx0SW5mbz4gcmVzdWx0cykgewpAQCAtNTk3LDcgKzYwMyw4IEBACiAgICAgICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGluZm8sIENvbmZpZ3VyYXRpb24gY3VyQ29uZmlnLCBDb21wYXRpYmlsaXR5SW5mbyBjb21wYXRJbmZvLAogICAgICAgICAgICAgICAgIGludCBwcm9jU3RhdGUsIEJ1bmRsZSBzdGF0ZSwgTGlzdDxSZXN1bHRJbmZvPiBwZW5kaW5nUmVzdWx0cywKICAgICAgICAgICAgICAgICBMaXN0PEludGVudD4gcGVuZGluZ05ld0ludGVudHMsIGJvb2xlYW4gbm90UmVzdW1lZCwgYm9vbGVhbiBpc0ZvcndhcmQsCi0gICAgICAgICAgICAgICAgU3RyaW5nIHByb2ZpbGVOYW1lLCBQYXJjZWxGaWxlRGVzY3JpcHRvciBwcm9maWxlRmQsIGJvb2xlYW4gYXV0b1N0b3BQcm9maWxlcikgeworICAgICAgICAgICAgICAgIFN0cmluZyBwcm9maWxlTmFtZSwgUGFyY2VsRmlsZURlc2NyaXB0b3IgcHJvZmlsZUZkLCBib29sZWFuIGF1dG9TdG9wUHJvZmlsZXIsCisgICAgICAgICAgICAgICAgQnVuZGxlIHJlc3VtZUFyZ3MpIHsKIAogICAgICAgICAgICAgdXBkYXRlUHJvY2Vzc1N0YXRlKHByb2NTdGF0ZSwgZmFsc2UpOwogCkBAIC02MTksNiArNjI2LDcgQEAKICAgICAgICAgICAgIHIucHJvZmlsZUZpbGUgPSBwcm9maWxlTmFtZTsKICAgICAgICAgICAgIHIucHJvZmlsZUZkID0gcHJvZmlsZUZkOwogICAgICAgICAgICAgci5hdXRvU3RvcFByb2ZpbGVyID0gYXV0b1N0b3BQcm9maWxlcjsKKyAgICAgICAgICAgIHIuYWN0aXZpdHlPcHRpb25zID0gcmVzdW1lQXJnczsKIAogICAgICAgICAgICAgdXBkYXRlUGVuZGluZ0NvbmZpZ3VyYXRpb24oY3VyQ29uZmlnKTsKIApAQCAtMTIwMiw3ICsxMjEwLDcgQEAKICAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKICAgICAgICAgICAgICAgICBjYXNlIExBVU5DSF9BQ1RJVklUWTogewogICAgICAgICAgICAgICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRyYWNlLlRSQUNFX1RBR19BQ1RJVklUWV9NQU5BR0VSLCAiYWN0aXZpdHlTdGFydCIpOwotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUNsaWVudFJlY29yZCByID0gKEFjdGl2aXR5Q2xpZW50UmVjb3JkKW1zZy5vYmo7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5Q2xpZW50UmVjb3JkIHIgPSAoQWN0aXZpdHlDbGllbnRSZWNvcmQpIG1zZy5vYmo7CiAKICAgICAgICAgICAgICAgICAgICAgci5wYWNrYWdlSW5mbyA9IGdldFBhY2thZ2VJbmZvTm9DaGVjaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8sIHIuY29tcGF0SW5mbyk7CkBAIC0xMjQ4LDcgKzEyNTYsOCBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFJFU1VNRV9BQ1RJVklUWToKICAgICAgICAgICAgICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfQUNUSVZJVFlfTUFOQUdFUiwgImFjdGl2aXR5UmVzdW1lIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZVJlc3VtZUFjdGl2aXR5KChJQmluZGVyKW1zZy5vYmosIHRydWUsCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFBhaXI8SUJpbmRlciwgQnVuZGxlPiByZXN1bWVBcmdzID0gKFBhaXI8SUJpbmRlciwgQnVuZGxlPikgbXNnLm9iajsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlUmVzdW1lQWN0aXZpdHkocmVzdW1lQXJncy5maXJzdCwgcmVzdW1lQXJncy5zZWNvbmQsIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmFyZzEgIT0gMCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIFRyYWNlLnRyYWNlRW5kKFRyYWNlLlRSQUNFX1RBR19BQ1RJVklUWV9NQU5BR0VSKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDQ1LDcgKzIwNTQsNyBAQAogICAgICAgICAgICAgICAgICAgICArICIsIGNvbXA9IiArIG5hbWUKICAgICAgICAgICAgICAgICAgICAgKyAiLCB0b2tlbj0iICsgdG9rZW4pOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwZXJmb3JtTGF1bmNoQWN0aXZpdHkociwgbnVsbCk7CisgICAgICAgIHJldHVybiBwZXJmb3JtTGF1bmNoQWN0aXZpdHkociwgbnVsbCwgbnVsbCk7CiAgICAgfQogCiAgICAgcHVibGljIGZpbmFsIEFjdGl2aXR5IGdldEFjdGl2aXR5KElCaW5kZXIgdG9rZW4pIHsKQEAgLTIwOTgsNyArMjEwNyw4IEBACiAgICAgICAgIHNlbmRNZXNzYWdlKEguQ0xFQU5fVVBfQ09OVEVYVCwgY2NpKTsKICAgICB9CiAKLSAgICBwcml2YXRlIEFjdGl2aXR5IHBlcmZvcm1MYXVuY2hBY3Rpdml0eShBY3Rpdml0eUNsaWVudFJlY29yZCByLCBJbnRlbnQgY3VzdG9tSW50ZW50KSB7CisgICAgcHJpdmF0ZSBBY3Rpdml0eSBwZXJmb3JtTGF1bmNoQWN0aXZpdHkoQWN0aXZpdHlDbGllbnRSZWNvcmQgciwgSW50ZW50IGN1c3RvbUludGVudCwKKyAgICAgICAgICAgIEJ1bmRsZSBvcHRpb25zKSB7CiAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMgWyIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArICJdIEFjdGl2aXR5VGhyZWFkLnBlcmZvcm1MYXVuY2hBY3Rpdml0eSgiICsgciArICIpIik7CiAKICAgICAgICAgQWN0aXZpdHlJbmZvIGFJbmZvID0gci5hY3Rpdml0eUluZm87CkBAIC0yMTU2LDcgKzIxNjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKyByLmFjdGl2aXR5SW5mby5uYW1lICsgIiB3aXRoIGNvbmZpZyAiICsgY29uZmlnKTsKICAgICAgICAgICAgICAgICBhY3Rpdml0eS5hdHRhY2goYXBwQ29udGV4dCwgdGhpcywgZ2V0SW5zdHJ1bWVudGF0aW9uKCksIHIudG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICByLmlkZW50LCBhcHAsIHIuaW50ZW50LCByLmFjdGl2aXR5SW5mbywgdGl0bGUsIHIucGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgci5lbWJlZGRlZElELCByLmxhc3ROb25Db25maWd1cmF0aW9uSW5zdGFuY2VzLCBjb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgci5lbWJlZGRlZElELCByLmxhc3ROb25Db25maWd1cmF0aW9uSW5zdGFuY2VzLCBjb25maWcsIG9wdGlvbnMpOwogCiAgICAgICAgICAgICAgICAgaWYgKGN1c3RvbUludGVudCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5Lm1JbnRlbnQgPSBjdXN0b21JbnRlbnQ7CkBAIC0yMjY3LDEyICsyMjc3LDEzIEBACiAKICAgICAgICAgaWYgKGxvY2FsTE9HVikgU2xvZy52KAogICAgICAgICAgICAgVEFHLCAiSGFuZGxpbmcgbGF1bmNoIG9mICIgKyByKTsKLSAgICAgICAgQWN0aXZpdHkgYSA9IHBlcmZvcm1MYXVuY2hBY3Rpdml0eShyLCBjdXN0b21JbnRlbnQpOworCisgICAgICAgIEFjdGl2aXR5IGEgPSBwZXJmb3JtTGF1bmNoQWN0aXZpdHkociwgY3VzdG9tSW50ZW50LCByLmFjdGl2aXR5T3B0aW9ucyk7CiAKICAgICAgICAgaWYgKGEgIT0gbnVsbCkgewogICAgICAgICAgICAgci5jcmVhdGVkQ29uZmlnID0gbmV3IENvbmZpZ3VyYXRpb24obUNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICAgQnVuZGxlIG9sZFN0YXRlID0gci5zdGF0ZTsKLSAgICAgICAgICAgIGhhbmRsZVJlc3VtZUFjdGl2aXR5KHIudG9rZW4sIGZhbHNlLCByLmlzRm9yd2FyZCwKKyAgICAgICAgICAgIGhhbmRsZVJlc3VtZUFjdGl2aXR5KHIudG9rZW4sIHIuYWN0aXZpdHlPcHRpb25zLCBmYWxzZSwgci5pc0ZvcndhcmQsCiAgICAgICAgICAgICAgICAgICAgICFyLmFjdGl2aXR5Lm1GaW5pc2hlZCAmJiAhci5zdGFydHNOb3RSZXN1bWVkKTsKIAogICAgICAgICAgICAgaWYgKCFyLmFjdGl2aXR5Lm1GaW5pc2hlZCAmJiByLnN0YXJ0c05vdFJlc3VtZWQpIHsKQEAgLTI4MzMsMTIgKzI4NDQsMTMgQEAKICAgICAgICAgci5tUGVuZGluZ1JlbW92ZVdpbmRvd01hbmFnZXIgPSBudWxsOwogICAgIH0KIAotICAgIGZpbmFsIHZvaWQgaGFuZGxlUmVzdW1lQWN0aXZpdHkoSUJpbmRlciB0b2tlbiwgYm9vbGVhbiBjbGVhckhpZGUsIGJvb2xlYW4gaXNGb3J3YXJkLAotICAgICAgICAgICAgYm9vbGVhbiByZWFsbHlSZXN1bWUpIHsKKyAgICBmaW5hbCB2b2lkIGhhbmRsZVJlc3VtZUFjdGl2aXR5KElCaW5kZXIgdG9rZW4sIEJ1bmRsZSByZXN1bWVBcmdzLAorICAgICAgICAgICAgYm9vbGVhbiBjbGVhckhpZGUsIGJvb2xlYW4gaXNGb3J3YXJkLCBib29sZWFuIHJlYWxseVJlc3VtZSkgewogICAgICAgICAvLyBJZiB3ZSBhcmUgZ2V0dGluZyByZWFkeSB0byBnYyBhZnRlciBnb2luZyB0byB0aGUgYmFja2dyb3VuZCwgd2VsbAogICAgICAgICAvLyB3ZSBhcmUgYmFjayBhY3RpdmUgc28gc2tpcCBpdC4KICAgICAgICAgdW5zY2hlZHVsZUdjSWRsZXIoKTsKIAorICAgICAgICAvLyBUT0RPIFB1c2ggcmVzdW1lQXJncyBpbnRvIHRoZSBhY3Rpdml0eSBmb3IgY29uc2lkZXJhdGlvbgogICAgICAgICBBY3Rpdml0eUNsaWVudFJlY29yZCByID0gcGVyZm9ybVJlc3VtZUFjdGl2aXR5KHRva2VuLCBjbGVhckhpZGUpOwogCiAgICAgICAgIGlmIChyICE9IG51bGwpIHsKQEAgLTM3NTksNiArMzc3MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgci5zdGFydHNOb3RSZXN1bWVkID0gdG1wLnN0YXJ0c05vdFJlc3VtZWQ7CisgICAgICAgIHIuYWN0aXZpdHlPcHRpb25zID0gbnVsbDsKIAogICAgICAgICBoYW5kbGVMYXVuY2hBY3Rpdml0eShyLCBjdXJyZW50SW50ZW50KTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWxlcnREaWFsb2cuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BbGVydERpYWxvZy5qYXZhCmluZGV4IDEwZDVlMjUuLmFiMTQ4YTkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BbGVydERpYWxvZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BbGVydERpYWxvZy5qYXZhCkBAIC0yNyw3ICsyNyw2IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRUaGVtZVdyYXBwZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldzsKQEAgLTE0NywxMCArMTQ2LDEwIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogR2V0cyBvbmUgb2YgdGhlIGJ1dHRvbnMgdXNlZCBpbiB0aGUgZGlhbG9nLgotICAgICAqIDxwPgotICAgICAqIElmIGEgYnV0dG9uIGRvZXMgbm90IGV4aXN0IGluIHRoZSBkaWFsb2csIG51bGwgd2lsbCBiZSByZXR1cm5lZC4KLSAgICAgKiAKKyAgICAgKiBHZXRzIG9uZSBvZiB0aGUgYnV0dG9ucyB1c2VkIGluIHRoZSBkaWFsb2cuIFJldHVybnMgbnVsbCBpZiB0aGUgc3BlY2lmaWVkCisgICAgICogYnV0dG9uIGRvZXMgbm90IGV4aXN0IG9yIHRoZSBkaWFsb2cgaGFzIG5vdCB5ZXQgYmVlbiBmdWxseSBjcmVhdGVkIChmb3IKKyAgICAgKiBleGFtcGxlLCB2aWEge0BsaW5rICNzaG93KCl9IG9yIHtAbGluayAjY3JlYXRlKCl9KS4KKyAgICAgKgogICAgICAqIEBwYXJhbSB3aGljaEJ1dHRvbiBUaGUgaWRlbnRpZmllciBvZiB0aGUgYnV0dG9uIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogICAgICAqICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgY2FuIGJlCiAgICAgICogICAgICAgICAgICB7QGxpbmsgRGlhbG9nSW50ZXJmYWNlI0JVVFRPTl9QT1NJVElWRX0uCkBAIC0xNTksNyArMTU4LDcgQEAKICAgICBwdWJsaWMgQnV0dG9uIGdldEJ1dHRvbihpbnQgd2hpY2hCdXR0b24pIHsKICAgICAgICAgcmV0dXJuIG1BbGVydC5nZXRCdXR0b24od2hpY2hCdXR0b24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxpc3QgdmlldyB1c2VkIGluIHRoZSBkaWFsb2cuCiAgICAgICogIApAQCAtODUzLDYgKzg1MiwyMSBAQAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvKioKKyAgICAgICAgICogU2V0IGEgY3VzdG9tIHZpZXcgcmVzb3VyY2UgdG8gYmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBEaWFsb2cuIFRoZQorICAgICAgICAgKiByZXNvdXJjZSB3aWxsIGJlIGluZmxhdGVkLCBhZGRpbmcgYWxsIHRvcC1sZXZlbCB2aWV3cyB0byB0aGUgc2NyZWVuLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gbGF5b3V0UmVzSWQgUmVzb3VyY2UgSUQgdG8gYmUgaW5mbGF0ZWQuCisgICAgICAgICAqIEByZXR1cm4gVGhpcyBCdWlsZGVyIG9iamVjdCB0byBhbGxvdyBmb3IgY2hhaW5pbmcgb2YgY2FsbHMgdG8gc2V0CisgICAgICAgICAqICAgICAgICAgbWV0aG9kcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0VmlldyhpbnQgbGF5b3V0UmVzSWQpIHsKKyAgICAgICAgICAgIFAubVZpZXcgPSBudWxsOworICAgICAgICAgICAgUC5tVmlld0xheW91dFJlc0lkID0gbGF5b3V0UmVzSWQ7CisgICAgICAgICAgICBQLm1WaWV3U3BhY2luZ1NwZWNpZmllZCA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKICAgICAgICAgICogU2V0IGEgY3VzdG9tIHZpZXcgdG8gYmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBEaWFsb2cuIElmIHRoZSBzdXBwbGllZCB2aWV3IGlzIGFuIGluc3RhbmNlCiAgICAgICAgICAqIG9mIGEge0BsaW5rIExpc3RWaWV3fSB0aGUgbGlnaHQgYmFja2dyb3VuZCB3aWxsIGJlIHVzZWQuCiAgICAgICAgICAqCkBAIC04NjIsNiArODc2LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFZpZXcoVmlldyB2aWV3KSB7CiAgICAgICAgICAgICBQLm1WaWV3ID0gdmlldzsKKyAgICAgICAgICAgIFAubVZpZXdMYXlvdXRSZXNJZCA9IDA7CiAgICAgICAgICAgICBQLm1WaWV3U3BhY2luZ1NwZWNpZmllZCA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTg5MSw2ICs5MDYsNyBAQAogICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRWaWV3KFZpZXcgdmlldywgaW50IHZpZXdTcGFjaW5nTGVmdCwgaW50IHZpZXdTcGFjaW5nVG9wLAogICAgICAgICAgICAgICAgIGludCB2aWV3U3BhY2luZ1JpZ2h0LCBpbnQgdmlld1NwYWNpbmdCb3R0b20pIHsKICAgICAgICAgICAgIFAubVZpZXcgPSB2aWV3OworICAgICAgICAgICAgUC5tVmlld0xheW91dFJlc0lkID0gMDsKICAgICAgICAgICAgIFAubVZpZXdTcGFjaW5nU3BlY2lmaWVkID0gdHJ1ZTsKICAgICAgICAgICAgIFAubVZpZXdTcGFjaW5nTGVmdCA9IHZpZXdTcGFjaW5nTGVmdDsKICAgICAgICAgICAgIFAubVZpZXdTcGFjaW5nVG9wID0gdmlld1NwYWNpbmdUb3A7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwT3BzTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcE9wc01hbmFnZXIuamF2YQppbmRleCBhZWNlNDYyLi5lNzFkNDdkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwT3BzTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBPcHNNYW5hZ2VyLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAqIEFQSSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCAiYXBwbGljYXRpb24gb3BlcmF0aW9uIiB0cmFja2luZy4KICAqCiAgKiA8cD5UaGlzIEFQSSBpcyBub3QgZ2VuZXJhbGx5IGludGVuZGVkIGZvciB0aGlyZCBwYXJ0eSBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzOyBtb3N0Ci0gKiBmZWF0dXJlcyBhcmUgb25seSBhdmFpbGFibGUgdG8gc3lzdGVtIGFwcGxpY2F0aW5zLiAgT2J0YWluIGFuIGluc3RhbmNlIG9mIGl0IHRocm91Z2gKKyAqIGZlYXR1cmVzIGFyZSBvbmx5IGF2YWlsYWJsZSB0byBzeXN0ZW0gYXBwbGljYXRpb25zLiAgT2J0YWluIGFuIGluc3RhbmNlIG9mIGl0IHRocm91Z2gKICAqIHtAbGluayBDb250ZXh0I2dldFN5c3RlbVNlcnZpY2UoU3RyaW5nKSBDb250ZXh0LmdldFN5c3RlbVNlcnZpY2V9IHdpdGgKICAqIHtAbGluayBDb250ZXh0I0FQUF9PUFNfU0VSVklDRSBDb250ZXh0LkFQUF9PUFNfU0VSVklDRX0uPC9wPgogICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25FcnJvclJlcG9ydC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uRXJyb3JSZXBvcnQuamF2YQppbmRleCBjMTE3NDg2Li44YjEzMmUwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25FcnJvclJlcG9ydC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvbkVycm9yUmVwb3J0LmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlByaW50ZXI7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25QYWNrYWdlTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uUGFja2FnZU1hbmFnZXIuamF2YQppbmRleCBiNTA1ZDRmLi5iOTEwYmE1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25QYWNrYWdlTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvblBhY2thZ2VNYW5hZ2VyLmphdmEKQEAgLTU3LDggKzU3LDYgQEAKIAogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLypwYWNrYWdlKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvblRocmVhZE5hdGl2ZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uVGhyZWFkTmF0aXZlLmphdmEKaW5kZXggMzQ3ZDQzZi4uYzhmMTI4MCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uVGhyZWFkTmF0aXZlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uVGhyZWFkTmF0aXZlLmphdmEKQEAgLTExMyw3ICsxMTMsOCBAQAogICAgICAgICAgICAgSUJpbmRlciBiID0gZGF0YS5yZWFkU3Ryb25nQmluZGVyKCk7CiAgICAgICAgICAgICBpbnQgcHJvY1N0YXRlID0gZGF0YS5yZWFkSW50KCk7CiAgICAgICAgICAgICBib29sZWFuIGlzRm9yd2FyZCA9IGRhdGEucmVhZEludCgpICE9IDA7Ci0gICAgICAgICAgICBzY2hlZHVsZVJlc3VtZUFjdGl2aXR5KGIsIHByb2NTdGF0ZSwgaXNGb3J3YXJkKTsKKyAgICAgICAgICAgIEJ1bmRsZSByZXN1bWVBcmdzID0gZGF0YS5yZWFkQnVuZGxlKCk7CisgICAgICAgICAgICBzY2hlZHVsZVJlc3VtZUFjdGl2aXR5KGIsIHByb2NTdGF0ZSwgaXNGb3J3YXJkLCByZXN1bWVBcmdzKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTQ1LDggKzE0NiwxMCBAQAogICAgICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3IgcHJvZmlsZUZkID0gZGF0YS5yZWFkSW50KCkgIT0gMAogICAgICAgICAgICAgICAgICAgICA/IFBhcmNlbEZpbGVEZXNjcmlwdG9yLkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChkYXRhKSA6IG51bGw7CiAgICAgICAgICAgICBib29sZWFuIGF1dG9TdG9wUHJvZmlsZXIgPSBkYXRhLnJlYWRJbnQoKSAhPSAwOworICAgICAgICAgICAgQnVuZGxlIHJlc3VtZUFyZ3MgPSBkYXRhLnJlYWRCdW5kbGUoKTsKICAgICAgICAgICAgIHNjaGVkdWxlTGF1bmNoQWN0aXZpdHkoaW50ZW50LCBiLCBpZGVudCwgaW5mbywgY3VyQ29uZmlnLCBjb21wYXRJbmZvLCBwcm9jU3RhdGUsIHN0YXRlLAotICAgICAgICAgICAgICAgICAgICByaSwgcGksIG5vdFJlc3VtZWQsIGlzRm9yd2FyZCwgcHJvZmlsZU5hbWUsIHByb2ZpbGVGZCwgYXV0b1N0b3BQcm9maWxlcik7CisgICAgICAgICAgICAgICAgICAgIHJpLCBwaSwgbm90UmVzdW1lZCwgaXNGb3J3YXJkLCBwcm9maWxlTmFtZSwgcHJvZmlsZUZkLCBhdXRvU3RvcFByb2ZpbGVyLAorICAgICAgICAgICAgICAgICAgICByZXN1bWVBcmdzKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjk2LDEzICs2OTksMTUgQEAKICAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CiAgICAgfQogCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2NoZWR1bGVSZXN1bWVBY3Rpdml0eShJQmluZGVyIHRva2VuLCBpbnQgcHJvY1N0YXRlLCBib29sZWFuIGlzRm9yd2FyZCkKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBzY2hlZHVsZVJlc3VtZUFjdGl2aXR5KElCaW5kZXIgdG9rZW4sIGludCBwcm9jU3RhdGUsIGJvb2xlYW4gaXNGb3J3YXJkLAorICAgICAgICAgICAgQnVuZGxlIHJlc3VtZUFyZ3MpCiAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQXBwbGljYXRpb25UaHJlYWQuZGVzY3JpcHRvcik7CiAgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIodG9rZW4pOwogICAgICAgICBkYXRhLndyaXRlSW50KHByb2NTdGF0ZSk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQoaXNGb3J3YXJkID8gMSA6IDApOworICAgICAgICBkYXRhLndyaXRlQnVuZGxlKHJlc3VtZUFyZ3MpOwogICAgICAgICBtUmVtb3RlLnRyYW5zYWN0KFNDSEVEVUxFX1JFU1VNRV9BQ1RJVklUWV9UUkFOU0FDVElPTiwgZGF0YSwgbnVsbCwKICAgICAgICAgICAgICAgICBJQmluZGVyLkZMQUdfT05FV0FZKTsKICAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CkBAIC03MjIsOSArNzI3LDEwIEBACiAgICAgcHVibGljIGZpbmFsIHZvaWQgc2NoZWR1bGVMYXVuY2hBY3Rpdml0eShJbnRlbnQgaW50ZW50LCBJQmluZGVyIHRva2VuLCBpbnQgaWRlbnQsCiAgICAgICAgICAgICBBY3Rpdml0eUluZm8gaW5mbywgQ29uZmlndXJhdGlvbiBjdXJDb25maWcsIENvbXBhdGliaWxpdHlJbmZvIGNvbXBhdEluZm8sCiAgICAgICAgICAgICBpbnQgcHJvY1N0YXRlLCBCdW5kbGUgc3RhdGUsIExpc3Q8UmVzdWx0SW5mbz4gcGVuZGluZ1Jlc3VsdHMsCi0gICAgCQlMaXN0PEludGVudD4gcGVuZGluZ05ld0ludGVudHMsIGJvb2xlYW4gbm90UmVzdW1lZCwgYm9vbGVhbiBpc0ZvcndhcmQsCi0gICAgCQlTdHJpbmcgcHJvZmlsZU5hbWUsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHByb2ZpbGVGZCwgYm9vbGVhbiBhdXRvU3RvcFByb2ZpbGVyKQotICAgIAkJdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICBMaXN0PEludGVudD4gcGVuZGluZ05ld0ludGVudHMsIGJvb2xlYW4gbm90UmVzdW1lZCwgYm9vbGVhbiBpc0ZvcndhcmQsCisgICAgICAgICAgICBTdHJpbmcgcHJvZmlsZU5hbWUsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHByb2ZpbGVGZCwgYm9vbGVhbiBhdXRvU3RvcFByb2ZpbGVyLAorICAgICAgICAgICAgQnVuZGxlIHJlc3VtZUFyZ3MpCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQXBwbGljYXRpb25UaHJlYWQuZGVzY3JpcHRvcik7CiAgICAgICAgIGludGVudC53cml0ZVRvUGFyY2VsKGRhdGEsIDApOwpAQCAtNzQ3LDYgKzc1Myw3IEBACiAgICAgICAgICAgICBkYXRhLndyaXRlSW50KDApOwogICAgICAgICB9CiAgICAgICAgIGRhdGEud3JpdGVJbnQoYXV0b1N0b3BQcm9maWxlciA/IDEgOiAwKTsKKyAgICAgICAgZGF0YS53cml0ZUJ1bmRsZShyZXN1bWVBcmdzKTsKICAgICAgICAgbVJlbW90ZS50cmFuc2FjdChTQ0hFRFVMRV9MQVVOQ0hfQUNUSVZJVFlfVFJBTlNBQ1RJT04sIGRhdGEsIG51bGwsCiAgICAgICAgICAgICAgICAgSUJpbmRlci5GTEFHX09ORVdBWSk7CiAgICAgICAgIGRhdGEucmVjeWNsZSgpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0RpYWxvZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0RpYWxvZy5qYXZhCmluZGV4IGNkYTJjNWYuLjI1NTkyNTQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9EaWFsb2cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRGlhbG9nLmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5hcHA7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuQWN0aW9uQmFySW1wbDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUG9saWN5TWFuYWdlcjsKIApAQCAtMjQwLDYgKzIzOSwxOCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIEZvcmNlcyBpbW1lZGlhdGUgY3JlYXRpb24gb2YgdGhlIGRpYWxvZy4KKyAgICAgKiA8cD4KKyAgICAgKiBOb3RlIHRoYXQgeW91IHNob3VsZCBub3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcGVyZm9ybSBkaWFsb2cgY3JlYXRpb24uCisgICAgICogUmF0aGVyLCBvdmVycmlkZSB7QGxpbmsgI29uQ3JlYXRlKEJ1bmRsZSl9LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNyZWF0ZSgpIHsKKyAgICAgICAgaWYgKCFtQ3JlYXRlZCkgeworICAgICAgICAgICAgZGlzcGF0Y2hPbkNyZWF0ZShudWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgogICAgICAqIFN0YXJ0IHRoZSBkaWFsb2cgYW5kIGRpc3BsYXkgaXQgb24gc2NyZWVuLiAgVGhlIHdpbmRvdyBpcyBwbGFjZWQgaW4gdGhlCiAgICAgICogYXBwbGljYXRpb24gbGF5ZXIgYW5kIG9wYXF1ZS4gIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIG5vdCBvdmVycmlkZSB0aGlzCiAgICAgICogbWV0aG9kIHRvIGRvIGluaXRpYWxpemF0aW9uIHdoZW4gdGhlIGRpYWxvZyBpcyBzaG93biwgaW5zdGVhZCBpbXBsZW1lbnQKQEAgLTQ1NywxMSArNDY4LDEyIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRmluZHMgYSB2aWV3IHRoYXQgd2FzIGlkZW50aWZpZWQgYnkgdGhlIGlkIGF0dHJpYnV0ZSBmcm9tIHRoZSBYTUwgdGhhdAotICAgICAqIHdhcyBwcm9jZXNzZWQgaW4ge0BsaW5rICNvblN0YXJ0fS4KKyAgICAgKiBGaW5kcyBhIGNoaWxkIHZpZXcgd2l0aCB0aGUgZ2l2ZW4gaWRlbnRpZmllci4gUmV0dXJucyBudWxsIGlmIHRoZQorICAgICAqIHNwZWNpZmllZCBjaGlsZCB2aWV3IGRvZXMgbm90IGV4aXN0IG9yIHRoZSBkaWFsb2cgaGFzIG5vdCB5ZXQgYmVlbiBmdWxseQorICAgICAqIGNyZWF0ZWQgKGZvciBleGFtcGxlLCB2aWEge0BsaW5rICNzaG93KCl9IG9yIHtAbGluayAjY3JlYXRlKCl9KS4KICAgICAgKgogICAgICAqIEBwYXJhbSBpZCB0aGUgaWRlbnRpZmllciBvZiB0aGUgdmlldyB0byBmaW5kCi0gICAgICogQHJldHVybiBUaGUgdmlldyBpZiBmb3VuZCBvciBudWxsIG90aGVyd2lzZS4KKyAgICAgKiBAcmV0dXJuIFRoZSB2aWV3IHdpdGggdGhlIGdpdmVuIGlkIG9yIG51bGwuCiAgICAgICovCiAgICAgcHVibGljIFZpZXcgZmluZFZpZXdCeUlkKGludCBpZCkgewogICAgICAgICByZXR1cm4gbVdpbmRvdy5maW5kVmlld0J5SWQoaWQpOwpAQCAtNDgwLDcgKzQ5Miw3IEBACiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBzY3JlZW4gY29udGVudCB0byBhbiBleHBsaWNpdCB2aWV3LiAgVGhpcyB2aWV3IGlzIHBsYWNlZAogICAgICAqIGRpcmVjdGx5IGludG8gdGhlIHNjcmVlbidzIHZpZXcgaGllcmFyY2h5LiAgSXQgY2FuIGl0c2VsZiBiZSBhIGNvbXBsZXgKLSAgICAgKiB2aWV3IGhpZXJhcmhjeS4KKyAgICAgKiB2aWV3IGhpZXJhcmNoeS4KICAgICAgKiAKICAgICAgKiBAcGFyYW0gdmlldyBUaGUgZGVzaXJlZCBjb250ZW50IHRvIGRpc3BsYXkuCiAgICAgICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRXhwYW5kYWJsZUxpc3RBY3Rpdml0eS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0V4cGFuZGFibGVMaXN0QWN0aXZpdHkuamF2YQppbmRleCA5NjUxMDc4Li5lMDhmMjVhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRXhwYW5kYWJsZUxpc3RBY3Rpdml0eS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9FeHBhbmRhYmxlTGlzdEFjdGl2aXR5LmphdmEKQEAgLTI3LDcgKzI3LDYgQEAKIGltcG9ydCBhbmRyb2lkLndpZGdldC5FeHBhbmRhYmxlTGlzdFZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuU2ltcGxlQ3Vyc29yVHJlZUFkYXB0ZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuU2ltcGxlRXhwYW5kYWJsZUxpc3RBZGFwdGVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250ZXh0TWVudUluZm87CiAKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRnJhZ21lbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9GcmFnbWVudC5qYXZhCmluZGV4IGQ2MjZlNWYuLmMwOWRhODcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9GcmFnbWVudC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9GcmFnbWVudC5qYXZhCkBAIC0xNyw2ICsxNyw3IEBACiBwYWNrYWdlIGFuZHJvaWQuYXBwOwogCiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnRDYWxsYmFja3MyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CkBAIC01NzUsNyArNTc2LDcgQEAKICAgICAgKiB0aGUgZ2l2ZW4gZnJhZ21lbnQgY2xhc3MuICBUaGlzIGlzIGEgcnVudGltZSBleGNlcHRpb247IGl0IGlzIG5vdAogICAgICAqIG5vcm1hbGx5IGV4cGVjdGVkIHRvIGhhcHBlbi4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEZyYWdtZW50IGluc3RhbnRpYXRlKENvbnRleHQgY29udGV4dCwgU3RyaW5nIGZuYW1lLCBCdW5kbGUgYXJncykgeworICAgIHB1YmxpYyBzdGF0aWMgRnJhZ21lbnQgaW5zdGFudGlhdGUoQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgZm5hbWUsIEBOdWxsYWJsZSBCdW5kbGUgYXJncykgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3M8Pz4gY2xhenogPSBzQ2xhc3NNYXAuZ2V0KGZuYW1lKTsKICAgICAgICAgICAgIGlmIChjbGF6eiA9PSBudWxsKSB7CkBAIC0xMjEzLDcgKzEyMTQsOCBAQAogICAgICAqIAogICAgICAqIEByZXR1cm4gUmV0dXJuIHRoZSBWaWV3IGZvciB0aGUgZnJhZ21lbnQncyBVSSwgb3IgbnVsbC4KICAgICAgKi8KLSAgICBwdWJsaWMgVmlldyBvbkNyZWF0ZVZpZXcoTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIsIFZpZXdHcm91cCBjb250YWluZXIsCisgICAgQE51bGxhYmxlCisgICAgcHVibGljIFZpZXcgb25DcmVhdGVWaWV3KExheW91dEluZmxhdGVyIGluZmxhdGVyLCBATnVsbGFibGUgVmlld0dyb3VwIGNvbnRhaW5lciwKICAgICAgICAgICAgIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpAQCAtMTIyOCw3ICsxMjMwLDcgQEAKICAgICAgKiBAcGFyYW0gc2F2ZWRJbnN0YW5jZVN0YXRlIElmIG5vbi1udWxsLCB0aGlzIGZyYWdtZW50IGlzIGJlaW5nIHJlLWNvbnN0cnVjdGVkCiAgICAgICogZnJvbSBhIHByZXZpb3VzIHNhdmVkIHN0YXRlIGFzIGdpdmVuIGhlcmUuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgb25WaWV3Q3JlYXRlZChWaWV3IHZpZXcsIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICBwdWJsaWMgdm9pZCBvblZpZXdDcmVhdGVkKFZpZXcgdmlldywgQE51bGxhYmxlIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKICAgICB9CiAgICAgCiAgICAgLyoqCkBAIC0xMjM3LDYgKzEyMzksNyBAQAogICAgICAqIAogICAgICAqIEByZXR1cm4gVGhlIGZyYWdtZW50J3Mgcm9vdCB2aWV3LCBvciBudWxsIGlmIGl0IGhhcyBubyBsYXlvdXQuCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIFZpZXcgZ2V0VmlldygpIHsKICAgICAgICAgcmV0dXJuIG1WaWV3OwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9GcmFnbWVudEJyZWFkQ3J1bWJzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRnJhZ21lbnRCcmVhZENydW1icy5qYXZhCmluZGV4IGI4MTBiODkuLmU0ZGU3YWYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9GcmFnbWVudEJyZWFkQ3J1bWJzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0ZyYWdtZW50QnJlYWRDcnVtYnMuamF2YQpAQCAtODEsMTQgKzgxLDE5IEBACiAgICAgfQogCiAgICAgcHVibGljIEZyYWdtZW50QnJlYWRDcnVtYnMoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgYW5kcm9pZC5SLnN0eWxlLldpZGdldF9GcmFnbWVudEJyZWFkQ3J1bWJzKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmZyYWdtZW50QnJlYWRDcnVtYnNTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIEZyYWdtZW50QnJlYWRDcnVtYnMoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBGcmFnbWVudEJyZWFkQ3J1bWJzKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GcmFnbWVudEJyZWFkQ3J1bWJzLCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIEZyYWdtZW50QnJlYWRDcnVtYnMoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRnJhZ21lbnRCcmVhZENydW1icywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgbUdyYXZpdHkgPSBhLmdldEludChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GcmFnbWVudEJyZWFkQ3J1bWJzX2dyYXZpdHksCiAgICAgICAgICAgICAgICAgREVGQVVMVF9HUkFWSVRZKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9JQXBwbGljYXRpb25UaHJlYWQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9JQXBwbGljYXRpb25UaHJlYWQuamF2YQppbmRleCBkMGNjMWJiLi4xZWE5ZDg3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvSUFwcGxpY2F0aW9uVGhyZWFkLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lBcHBsaWNhdGlvblRocmVhZC5qYXZhCkBAIC01MCwxNSArNTAsMTYgQEAKICAgICAgICAgICAgIGludCBjb25maWdDaGFuZ2VzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHZvaWQgc2NoZWR1bGVXaW5kb3dWaXNpYmlsaXR5KElCaW5kZXIgdG9rZW4sIGJvb2xlYW4gc2hvd1dpbmRvdykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICB2b2lkIHNjaGVkdWxlU2xlZXBpbmcoSUJpbmRlciB0b2tlbiwgYm9vbGVhbiBzbGVlcGluZykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICB2b2lkIHNjaGVkdWxlUmVzdW1lQWN0aXZpdHkoSUJpbmRlciB0b2tlbiwgaW50IHByb2NTdGF0ZSwgYm9vbGVhbiBpc0ZvcndhcmQpCisgICAgdm9pZCBzY2hlZHVsZVJlc3VtZUFjdGl2aXR5KElCaW5kZXIgdG9rZW4sIGludCBwcm9jU3RhdGUsIGJvb2xlYW4gaXNGb3J3YXJkLCBCdW5kbGUgcmVzdW1lQXJncykKICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgdm9pZCBzY2hlZHVsZVNlbmRSZXN1bHQoSUJpbmRlciB0b2tlbiwgTGlzdDxSZXN1bHRJbmZvPiByZXN1bHRzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHZvaWQgc2NoZWR1bGVMYXVuY2hBY3Rpdml0eShJbnRlbnQgaW50ZW50LCBJQmluZGVyIHRva2VuLCBpbnQgaWRlbnQsCiAgICAgICAgICAgICBBY3Rpdml0eUluZm8gaW5mbywgQ29uZmlndXJhdGlvbiBjdXJDb25maWcsIENvbXBhdGliaWxpdHlJbmZvIGNvbXBhdEluZm8sCiAgICAgICAgICAgICBpbnQgcHJvY1N0YXRlLCBCdW5kbGUgc3RhdGUsIExpc3Q8UmVzdWx0SW5mbz4gcGVuZGluZ1Jlc3VsdHMsCi0gICAgCQlMaXN0PEludGVudD4gcGVuZGluZ05ld0ludGVudHMsIGJvb2xlYW4gbm90UmVzdW1lZCwgYm9vbGVhbiBpc0ZvcndhcmQsCi0gICAgCQlTdHJpbmcgcHJvZmlsZU5hbWUsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHByb2ZpbGVGZCwgYm9vbGVhbiBhdXRvU3RvcFByb2ZpbGVyKQotICAgIAkJdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICAgICAgICAgIExpc3Q8SW50ZW50PiBwZW5kaW5nTmV3SW50ZW50cywgYm9vbGVhbiBub3RSZXN1bWVkLCBib29sZWFuIGlzRm9yd2FyZCwKKyAgICAgICAgICAgIFN0cmluZyBwcm9maWxlTmFtZSwgUGFyY2VsRmlsZURlc2NyaXB0b3IgcHJvZmlsZUZkLCBib29sZWFuIGF1dG9TdG9wUHJvZmlsZXIsCisgICAgICAgICAgICBCdW5kbGUgcmVzdW1lQXJncykKKyAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgdm9pZCBzY2hlZHVsZVJlbGF1bmNoQWN0aXZpdHkoSUJpbmRlciB0b2tlbiwgTGlzdDxSZXN1bHRJbmZvPiBwZW5kaW5nUmVzdWx0cywKICAgICAgICAgICAgIExpc3Q8SW50ZW50PiBwZW5kaW5nTmV3SW50ZW50cywgaW50IGNvbmZpZ0NoYW5nZXMsCiAgICAgICAgICAgICBib29sZWFuIG5vdFJlc3VtZWQsIENvbmZpZ3VyYXRpb24gY29uZmlnKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL01lZGlhUm91dGVCdXR0b24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9NZWRpYVJvdXRlQnV0dG9uLmphdmEKaW5kZXggYTc5ODJmNC4uZmEyODEzZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL01lZGlhUm91dGVCdXR0b24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTWVkaWFSb3V0ZUJ1dHRvbi5qYXZhCkBAIC03MywxMyArNzMsMTggQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWVkaWFSb3V0ZUJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTWVkaWFSb3V0ZUJ1dHRvbigKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIG1Sb3V0ZXIgPSAoTWVkaWFSb3V0ZXIpY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuTUVESUFfUk9VVEVSX1NFUlZJQ0UpOwogICAgICAgICBtQ2FsbGJhY2sgPSBuZXcgTWVkaWFSb3V0ZXJDYWxsYmFjaygpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5NZWRpYVJvdXRlQnV0dG9uLCBkZWZTdHlsZUF0dHIsIDApOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTWVkaWFSb3V0ZUJ1dHRvbiwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIHNldFJlbW90ZUluZGljYXRvckRyYXdhYmxlKGEuZ2V0RHJhd2FibGUoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTWVkaWFSb3V0ZUJ1dHRvbl9leHRlcm5hbFJvdXRlRW5hYmxlZERyYXdhYmxlKSk7CiAgICAgICAgIG1NaW5XaWR0aCA9IGEuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbi5qYXZhCmluZGV4IGM2M2U1ODYuLjYyYTg0MjE5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbi5qYXZhCkBAIC0xOCw2ICsxOCw3IEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwpAQCAtMzcsNiArMzgsOCBAQAogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlByb2dyZXNzQmFyOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlJlbW90ZVZpZXdzOwogCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKIGltcG9ydCBqYXZhLnRleHQuTnVtYmVyRm9ybWF0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiAKQEAgLTM1MCw2ICszNTMsMTEgQEAKIAogICAgIHB1YmxpYyBpbnQgZmxhZ3M7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHtQUklPUklUWV9ERUZBVUxULFBSSU9SSVRZX0xPVyxQUklPUklUWV9NSU4sUFJJT1JJVFlfSElHSCxQUklPUklUWV9NQVh9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBQcmlvcml0eSB7fQorCiAgICAgLyoqCiAgICAgICogRGVmYXVsdCBub3RpZmljYXRpb24ge0BsaW5rICNwcmlvcml0eX0uIElmIHlvdXIgYXBwbGljYXRpb24gZG9lcyBub3QgcHJpb3JpdGl6ZSBpdHMgb3duCiAgICAgICogbm90aWZpY2F0aW9ucywgdXNlIHRoaXMgdmFsdWUgZm9yIGFsbCBub3RpZmljYXRpb25zLgpAQCAtMzkxLDYgKzM5OSw3IEBACiAgICAgICogc3lzdGVtIHdpbGwgbWFrZSBhIGRldGVybWluYXRpb24gYWJvdXQgaG93IHRvIGludGVycHJldCB0aGlzIHByaW9yaXR5IHdoZW4gcHJlc2VudGluZwogICAgICAqIHRoZSBub3RpZmljYXRpb24uCiAgICAgICovCisgICAgQFByaW9yaXR5CiAgICAgcHVibGljIGludCBwcmlvcml0eTsKIAogICAgIC8qKgpAQCAtMTU1MCw3ICsxNTU5LDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHNlZSBOb3RpZmljYXRpb24jcHJpb3JpdHkKICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFByaW9yaXR5KGludCBwcmkpIHsKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0UHJpb3JpdHkoQFByaW9yaXR5IGludCBwcmkpIHsKICAgICAgICAgICAgIG1Qcmlvcml0eSA9IHByaTsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CkBAIC0xNzc4LDcgKzE3ODcsNyBAQAogICAgICAgICAgICAgUmVtb3RlVmlld3MgYnV0dG9uID0gbmV3IFJlbW90ZVZpZXdzKG1Db250ZXh0LmdldFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgIHRvbWJzdG9uZSA/IFIubGF5b3V0Lm5vdGlmaWNhdGlvbl9hY3Rpb25fdG9tYnN0b25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFIubGF5b3V0Lm5vdGlmaWNhdGlvbl9hY3Rpb24pOwotICAgICAgICAgICAgYnV0dG9uLnNldFRleHRWaWV3Q29tcG91bmREcmF3YWJsZXMoUi5pZC5hY3Rpb24wLCBhY3Rpb24uaWNvbiwgMCwgMCwgMCk7CisgICAgICAgICAgICBidXR0b24uc2V0VGV4dFZpZXdDb21wb3VuZERyYXdhYmxlc1JlbGF0aXZlKFIuaWQuYWN0aW9uMCwgYWN0aW9uLmljb24sIDAsIDAsIDApOwogICAgICAgICAgICAgYnV0dG9uLnNldFRleHRWaWV3VGV4dChSLmlkLmFjdGlvbjAsIGFjdGlvbi50aXRsZSk7CiAgICAgICAgICAgICBpZiAoIXRvbWJzdG9uZSkgewogICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrUGVuZGluZ0ludGVudChSLmlkLmFjdGlvbjAsIGFjdGlvbi5hY3Rpb25JbnRlbnQpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50LmphdmEKaW5kZXggZjZlMWY3Mi4uZDNiMDc2MyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudC5qYXZhCkBAIC0xNiw2ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5hcHA7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JSW50ZW50UmVjZWl2ZXI7CkBAIC0zMCw2ICszMyw5IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BbmRyb2lkRXhjZXB0aW9uOwogCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKwogLyoqCiAgKiBBIGRlc2NyaXB0aW9uIG9mIGFuIEludGVudCBhbmQgdGFyZ2V0IGFjdGlvbiB0byBwZXJmb3JtIHdpdGggaXQuICBJbnN0YW5jZXMKICAqIG9mIHRoaXMgY2xhc3MgYXJlIGNyZWF0ZWQgd2l0aCB7QGxpbmsgI2dldEFjdGl2aXR5fSwge0BsaW5rICNnZXRBY3Rpdml0aWVzfSwKQEAgLTg2LDYgKzkyLDI2IEBACiBwdWJsaWMgZmluYWwgY2xhc3MgUGVuZGluZ0ludGVudCBpbXBsZW1lbnRzIFBhcmNlbGFibGUgewogICAgIHByaXZhdGUgZmluYWwgSUludGVudFNlbmRlciBtVGFyZ2V0OwogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwKKyAgICAgICAgICAgIHZhbHVlID0geworICAgICAgICAgICAgICAgICAgICBGTEFHX09ORV9TSE9ULAorICAgICAgICAgICAgICAgICAgICBGTEFHX05PX0NSRUFURSwKKyAgICAgICAgICAgICAgICAgICAgRkxBR19DQU5DRUxfQ1VSUkVOVCwKKyAgICAgICAgICAgICAgICAgICAgRkxBR19VUERBVEVfQ1VSUkVOVCwKKworICAgICAgICAgICAgICAgICAgICBJbnRlbnQuRklMTF9JTl9BQ1RJT04sCisgICAgICAgICAgICAgICAgICAgIEludGVudC5GSUxMX0lOX0RBVEEsCisgICAgICAgICAgICAgICAgICAgIEludGVudC5GSUxMX0lOX0NBVEVHT1JJRVMsCisgICAgICAgICAgICAgICAgICAgIEludGVudC5GSUxMX0lOX0NPTVBPTkVOVCwKKyAgICAgICAgICAgICAgICAgICAgSW50ZW50LkZJTExfSU5fUEFDS0FHRSwKKyAgICAgICAgICAgICAgICAgICAgSW50ZW50LkZJTExfSU5fU09VUkNFX0JPVU5EUywKKyAgICAgICAgICAgICAgICAgICAgSW50ZW50LkZJTExfSU5fU0VMRUNUT1IsCisgICAgICAgICAgICAgICAgICAgIEludGVudC5GSUxMX0lOX0NMSVBfREFUQQorICAgICAgICAgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgRmxhZ3Mge30KKwogICAgIC8qKgogICAgICAqIEZsYWcgaW5kaWNhdGluZyB0aGF0IHRoaXMgUGVuZGluZ0ludGVudCBjYW4gYmUgdXNlZCBvbmx5IG9uY2UuCiAgICAgICogRm9yIHVzZSB3aXRoIHtAbGluayAjZ2V0QWN0aXZpdHl9LCB7QGxpbmsgI2dldEJyb2FkY2FzdH0sIGFuZApAQCAtMjIyLDcgKzI0OCw3IEBACiAgICAgICogc3VwcGxpZWQuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQZW5kaW5nSW50ZW50IGdldEFjdGl2aXR5KENvbnRleHQgY29udGV4dCwgaW50IHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgSW50ZW50IGludGVudCwgaW50IGZsYWdzKSB7CisgICAgICAgICAgICBJbnRlbnQgaW50ZW50LCBARmxhZ3MgaW50IGZsYWdzKSB7CiAgICAgICAgIHJldHVybiBnZXRBY3Rpdml0eShjb250ZXh0LCByZXF1ZXN0Q29kZSwgaW50ZW50LCBmbGFncywgbnVsbCk7CiAgICAgfQogCkBAIC0yNTUsNyArMjgxLDcgQEAKICAgICAgKiBzdXBwbGllZC4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBlbmRpbmdJbnRlbnQgZ2V0QWN0aXZpdHkoQ29udGV4dCBjb250ZXh0LCBpbnQgcmVxdWVzdENvZGUsCi0gICAgICAgICAgICBJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgICAgICAgICBATm9uTnVsbCBJbnRlbnQgaW50ZW50LCBARmxhZ3MgaW50IGZsYWdzLCBATnVsbGFibGUgQnVuZGxlIG9wdGlvbnMpIHsKICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gY29udGV4dC5nZXRQYWNrYWdlTmFtZSgpOwogICAgICAgICBTdHJpbmcgcmVzb2x2ZWRUeXBlID0gaW50ZW50ICE9IG51bGwgPyBpbnRlbnQucmVzb2x2ZVR5cGVJZk5lZWRlZCgKICAgICAgICAgICAgICAgICBjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpKSA6IG51bGw7CkBAIC0yODAsNyArMzA2LDcgQEAKICAgICAgKiBhY3Rpdml0eSBpcyBzdGFydGVkLCBub3Qgd2hlbiB0aGUgcGVuZGluZyBpbnRlbnQgaXMgY3JlYXRlZC4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBlbmRpbmdJbnRlbnQgZ2V0QWN0aXZpdHlBc1VzZXIoQ29udGV4dCBjb250ZXh0LCBpbnQgcmVxdWVzdENvZGUsCi0gICAgICAgICAgICBJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIEJ1bmRsZSBvcHRpb25zLCBVc2VySGFuZGxlIHVzZXIpIHsKKyAgICAgICAgICAgIEBOb25OdWxsIEludGVudCBpbnRlbnQsIGludCBmbGFncywgQnVuZGxlIG9wdGlvbnMsIFVzZXJIYW5kbGUgdXNlcikgewogICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBjb250ZXh0LmdldFBhY2thZ2VOYW1lKCk7CiAgICAgICAgIFN0cmluZyByZXNvbHZlZFR5cGUgPSBpbnRlbnQgIT0gbnVsbCA/IGludGVudC5yZXNvbHZlVHlwZUlmTmVlZGVkKAogICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCkpIDogbnVsbDsKQEAgLTM0NSw3ICszNzEsNyBAQAogICAgICAqIHN1cHBsaWVkLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUGVuZGluZ0ludGVudCBnZXRBY3Rpdml0aWVzKENvbnRleHQgY29udGV4dCwgaW50IHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgSW50ZW50W10gaW50ZW50cywgaW50IGZsYWdzKSB7CisgICAgICAgICAgICBATm9uTnVsbCBJbnRlbnRbXSBpbnRlbnRzLCBARmxhZ3MgaW50IGZsYWdzKSB7CiAgICAgICAgIHJldHVybiBnZXRBY3Rpdml0aWVzKGNvbnRleHQsIHJlcXVlc3RDb2RlLCBpbnRlbnRzLCBmbGFncywgbnVsbCk7CiAgICAgfQogCkBAIC0zOTUsNyArNDIxLDcgQEAKICAgICAgKiBzdXBwbGllZC4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBlbmRpbmdJbnRlbnQgZ2V0QWN0aXZpdGllcyhDb250ZXh0IGNvbnRleHQsIGludCByZXF1ZXN0Q29kZSwKLSAgICAgICAgICAgIEludGVudFtdIGludGVudHMsIGludCBmbGFncywgQnVuZGxlIG9wdGlvbnMpIHsKKyAgICAgICAgICAgIEBOb25OdWxsIEludGVudFtdIGludGVudHMsIEBGbGFncyBpbnQgZmxhZ3MsIEBOdWxsYWJsZSBCdW5kbGUgb3B0aW9ucykgewogICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBjb250ZXh0LmdldFBhY2thZ2VOYW1lKCk7CiAgICAgICAgIFN0cmluZ1tdIHJlc29sdmVkVHlwZXMgPSBuZXcgU3RyaW5nW2ludGVudHMubGVuZ3RoXTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGludGVudHMubGVuZ3RoOyBpKyspIHsKQEAgLTQyMSw3ICs0NDcsNyBAQAogICAgICAqIGFjdGl2aXR5IGlzIHN0YXJ0ZWQsIG5vdCB3aGVuIHRoZSBwZW5kaW5nIGludGVudCBpcyBjcmVhdGVkLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUGVuZGluZ0ludGVudCBnZXRBY3Rpdml0aWVzQXNVc2VyKENvbnRleHQgY29udGV4dCwgaW50IHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgSW50ZW50W10gaW50ZW50cywgaW50IGZsYWdzLCBCdW5kbGUgb3B0aW9ucywgVXNlckhhbmRsZSB1c2VyKSB7CisgICAgICAgICAgICBATm9uTnVsbCBJbnRlbnRbXSBpbnRlbnRzLCBpbnQgZmxhZ3MsIEJ1bmRsZSBvcHRpb25zLCBVc2VySGFuZGxlIHVzZXIpIHsKICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gY29udGV4dC5nZXRQYWNrYWdlTmFtZSgpOwogICAgICAgICBTdHJpbmdbXSByZXNvbHZlZFR5cGVzID0gbmV3IFN0cmluZ1tpbnRlbnRzLmxlbmd0aF07CiAgICAgICAgIGZvciAoaW50IGk9MDsgaTxpbnRlbnRzLmxlbmd0aDsgaSsrKSB7CkBAIC00NjUsNyArNDkxLDcgQEAKICAgICAgKiBzdXBwbGllZC4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBlbmRpbmdJbnRlbnQgZ2V0QnJvYWRjYXN0KENvbnRleHQgY29udGV4dCwgaW50IHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgSW50ZW50IGludGVudCwgaW50IGZsYWdzKSB7CisgICAgICAgICAgICBJbnRlbnQgaW50ZW50LCBARmxhZ3MgaW50IGZsYWdzKSB7CiAgICAgICAgIHJldHVybiBnZXRCcm9hZGNhc3RBc1VzZXIoY29udGV4dCwgcmVxdWVzdENvZGUsIGludGVudCwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgbmV3IFVzZXJIYW5kbGUoVXNlckhhbmRsZS5teVVzZXJJZCgpKSk7CiAgICAgfQpAQCAtNTE5LDcgKzU0NSw3IEBACiAgICAgICogc3VwcGxpZWQuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQZW5kaW5nSW50ZW50IGdldFNlcnZpY2UoQ29udGV4dCBjb250ZXh0LCBpbnQgcmVxdWVzdENvZGUsCi0gICAgICAgICAgICBJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgICAgIEBOb25OdWxsIEludGVudCBpbnRlbnQsIEBGbGFncyBpbnQgZmxhZ3MpIHsKICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gY29udGV4dC5nZXRQYWNrYWdlTmFtZSgpOwogICAgICAgICBTdHJpbmcgcmVzb2x2ZWRUeXBlID0gaW50ZW50ICE9IG51bGwgPyBpbnRlbnQucmVzb2x2ZVR5cGVJZk5lZWRlZCgKICAgICAgICAgICAgICAgICBjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpKSA6IG51bGw7CkBAIC03NDksNiArNzc1LDcgQEAKICAgICAgKiBAcmV0dXJuIFRoZSBwYWNrYWdlIG5hbWUgb2YgdGhlIFBlbmRpbmdJbnRlbnQsIG9yIG51bGwgaWYgdGhlcmUgaXMKICAgICAgKiBub25lIGFzc29jaWF0ZWQgd2l0aCBpdC4KICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBwdWJsaWMgU3RyaW5nIGdldENyZWF0b3JQYWNrYWdlKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkKQEAgLTgwNyw2ICs4MzQsNyBAQAogICAgICAqIEByZXR1cm4gVGhlIHVzZXIgaGFuZGxlIG9mIHRoZSBQZW5kaW5nSW50ZW50LCBvciBudWxsIGlmIHRoZXJlIGlzCiAgICAgICogbm9uZSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIFVzZXJIYW5kbGUgZ2V0Q3JlYXRvclVzZXJIYW5kbGUoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgdWlkID0gQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKQpAQCAtOTIyLDggKzk1MCw4IEBACiAgICAgICogQHBhcmFtIHNlbmRlciBUaGUgUGVuZGluZ0ludGVudCB0byB3cml0ZSwgb3IgbnVsbC4KICAgICAgKiBAcGFyYW0gb3V0IFdoZXJlIHRvIHdyaXRlIHRoZSBQZW5kaW5nSW50ZW50LgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZVBlbmRpbmdJbnRlbnRPck51bGxUb1BhcmNlbChQZW5kaW5nSW50ZW50IHNlbmRlciwKLSAgICAgICAgICAgIFBhcmNlbCBvdXQpIHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVQZW5kaW5nSW50ZW50T3JOdWxsVG9QYXJjZWwoQE51bGxhYmxlIFBlbmRpbmdJbnRlbnQgc2VuZGVyLAorICAgICAgICAgICAgQE5vbk51bGwgUGFyY2VsIG91dCkgewogICAgICAgICBvdXQud3JpdGVTdHJvbmdCaW5kZXIoc2VuZGVyICE9IG51bGwgPyBzZW5kZXIubVRhcmdldC5hc0JpbmRlcigpCiAgICAgICAgICAgICAgICAgOiBudWxsKTsKICAgICB9CkBAIC05MzgsNyArOTY2LDggQEAKICAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIE1lc3NlbmdlciByZWFkIGZyb20gdGhlIFBhcmNlbCwgb3IgbnVsbCBpZiBudWxsIGhhZAogICAgICAqIGJlZW4gd3JpdHRlbi4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFBlbmRpbmdJbnRlbnQgcmVhZFBlbmRpbmdJbnRlbnRPck51bGxGcm9tUGFyY2VsKFBhcmNlbCBpbikgeworICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBzdGF0aWMgUGVuZGluZ0ludGVudCByZWFkUGVuZGluZ0ludGVudE9yTnVsbEZyb21QYXJjZWwoQE5vbk51bGwgUGFyY2VsIGluKSB7CiAgICAgICAgIElCaW5kZXIgYiA9IGluLnJlYWRTdHJvbmdCaW5kZXIoKTsKICAgICAgICAgcmV0dXJuIGIgIT0gbnVsbCA/IG5ldyBQZW5kaW5nSW50ZW50KGIpIDogbnVsbDsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvUmVzdWx0SW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1Jlc3VsdEluZm8uamF2YQppbmRleCA0OGEwZmMyLi41ZTA4NjdjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvUmVzdWx0SW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9SZXN1bHRJbmZvLmphdmEKQEAgLTE3LDEyICsxNyw4IEBACiBwYWNrYWdlIGFuZHJvaWQuYXBwOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKIAogLyoqCiAgKiB7QGhpZGV9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvU2VhcmNoTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1NlYXJjaE1hbmFnZXIuamF2YQppbmRleCBmOWMyNDVlLi4zM2MzNDA5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvU2VhcmNoTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9TZWFyY2hNYW5hZ2VyLmphdmEKQEAgLTIyLDcgKzIyLDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CkBAIC0zNCw3ICszMyw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CiAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9TaGFyZWRQcmVmZXJlbmNlc0ltcGwuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9TaGFyZWRQcmVmZXJlbmNlc0ltcGwuamF2YQppbmRleCBhMjkyZWNiLi4xYjgzOGZiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvU2hhcmVkUHJlZmVyZW5jZXNJbXBsLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1NoYXJlZFByZWZlcmVuY2VzSW1wbC5qYXZhCkBAIC00Miw3ICs0Miw2IEBACiBpbXBvcnQgamF2YS51dGlsLlNldDsKIGltcG9ydCBqYXZhLnV0aWwuV2Vha0hhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwogCiBpbXBvcnQgbGliY29yZS5pby5FcnJub0V4Y2VwdGlvbjsKIGltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvVGFza1N0YWNrQnVpbGRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1Rhc2tTdGFja0J1aWxkZXIuamF2YQppbmRleCAzZTBhYzdlLi4wMDc3ZGIxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvVGFza1N0YWNrQnVpbGRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9UYXNrU3RhY2tCdWlsZGVyLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLmFwcDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CkBAIC0yNDQsNyArMjQ1LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIG9idGFpbmVkIFBlbmRpbmdJbnRlbnQKICAgICAgKi8KLSAgICBwdWJsaWMgUGVuZGluZ0ludGVudCBnZXRQZW5kaW5nSW50ZW50KGludCByZXF1ZXN0Q29kZSwgaW50IGZsYWdzKSB7CisgICAgcHVibGljIFBlbmRpbmdJbnRlbnQgZ2V0UGVuZGluZ0ludGVudChpbnQgcmVxdWVzdENvZGUsIEBQZW5kaW5nSW50ZW50LkZsYWdzIGludCBmbGFncykgewogICAgICAgICByZXR1cm4gZ2V0UGVuZGluZ0ludGVudChyZXF1ZXN0Q29kZSwgZmxhZ3MsIG51bGwpOwogICAgIH0KIApAQCAtMjYzLDcgKzI2NCw4IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBvYnRhaW5lZCBQZW5kaW5nSW50ZW50CiAgICAgICovCi0gICAgcHVibGljIFBlbmRpbmdJbnRlbnQgZ2V0UGVuZGluZ0ludGVudChpbnQgcmVxdWVzdENvZGUsIGludCBmbGFncywgQnVuZGxlIG9wdGlvbnMpIHsKKyAgICBwdWJsaWMgUGVuZGluZ0ludGVudCBnZXRQZW5kaW5nSW50ZW50KGludCByZXF1ZXN0Q29kZSwgQFBlbmRpbmdJbnRlbnQuRmxhZ3MgaW50IGZsYWdzLAorICAgICAgICAgICAgQnVuZGxlIG9wdGlvbnMpIHsKICAgICAgICAgaWYgKG1JbnRlbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgIk5vIGludGVudHMgYWRkZWQgdG8gVGFza1N0YWNrQnVpbGRlcjsgY2Fubm90IGdldFBlbmRpbmdJbnRlbnQiKTsKQEAgLTI5NCw2ICsyOTYsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbnRlbnRzIGFkZGVkIHRvIHRoaXMgYnVpbGRlci4KICAgICAgKi8KKyAgICBATm9uTnVsbAogICAgIHB1YmxpYyBJbnRlbnRbXSBnZXRJbnRlbnRzKCkgewogICAgICAgICBJbnRlbnRbXSBpbnRlbnRzID0gbmV3IEludGVudFttSW50ZW50cy5zaXplKCldOwogICAgICAgICBpZiAoaW50ZW50cy5sZW5ndGggPT0gMCkgcmV0dXJuIGludGVudHM7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvVGltZVBpY2tlckRpYWxvZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1RpbWVQaWNrZXJEaWFsb2cuamF2YQppbmRleCA5NTIyMjdmLi5hODVjNjFmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvVGltZVBpY2tlckRpYWxvZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9UaW1lUGlja2VyRGlhbG9nLmphdmEKQEAgLTE2LDE3ICsxNiwxOSBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYXBwOwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKLQogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRpbWVQaWNrZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGltZVBpY2tlci5PblRpbWVDaGFuZ2VkTGlzdGVuZXI7CiAKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOworCisKIC8qKgogICogQSBkaWFsb2cgdGhhdCBwcm9tcHRzIHRoZSB1c2VyIGZvciB0aGUgdGltZSBvZiBkYXkgdXNpbmcgYSB7QGxpbmsgVGltZVBpY2tlcn0uCiAgKgpAQCAtMzgsNyArNDAsNyBAQAogCiAgICAgLyoqCiAgICAgICogVGhlIGNhbGxiYWNrIGludGVyZmFjZSB1c2VkIHRvIGluZGljYXRlIHRoZSB1c2VyIGlzIGRvbmUgZmlsbGluZyBpbgotICAgICAqIHRoZSB0aW1lICh0aGV5IGNsaWNrZWQgb24gdGhlICdTZXQnIGJ1dHRvbikuCisgICAgICogdGhlIHRpbWUgKHRoZXkgY2xpY2tlZCBvbiB0aGUgJ0RvbmUnIGJ1dHRvbikuCiAgICAgICovCiAgICAgcHVibGljIGludGVyZmFjZSBPblRpbWVTZXRMaXN0ZW5lciB7CiAKQEAgLTU1LDcgKzU3LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVNfMjRfSE9VUiA9ICJpczI0aG91ciI7CiAKICAgICBwcml2YXRlIGZpbmFsIFRpbWVQaWNrZXIgbVRpbWVQaWNrZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBPblRpbWVTZXRMaXN0ZW5lciBtQ2FsbGJhY2s7CisgICAgcHJpdmF0ZSBmaW5hbCBPblRpbWVTZXRMaXN0ZW5lciBtVGltZVNldENhbGxiYWNrOwogCiAgICAgaW50IG1Jbml0aWFsSG91ck9mRGF5OwogICAgIGludCBtSW5pdGlhbE1pbnV0ZTsKQEAgLTc0LDYgKzc2LDE2IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgMCwgY2FsbEJhY2ssIGhvdXJPZkRheSwgbWludXRlLCBpczI0SG91clZpZXcpOwogICAgIH0KIAorICAgIHN0YXRpYyBpbnQgcmVzb2x2ZURpYWxvZ1RoZW1lKENvbnRleHQgY29udGV4dCwgaW50IHJlc2lkKSB7CisgICAgICAgIGlmIChyZXNpZCA9PSAwKSB7CisgICAgICAgICAgICBUeXBlZFZhbHVlIG91dFZhbHVlID0gbmV3IFR5cGVkVmFsdWUoKTsKKyAgICAgICAgICAgIGNvbnRleHQuZ2V0VGhlbWUoKS5yZXNvbHZlQXR0cmlidXRlKFIuYXR0ci50aW1lUGlja2VyRGlhbG9nVGhlbWUsIG91dFZhbHVlLCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBvdXRWYWx1ZS5yZXNvdXJjZUlkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHJlc2lkOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGNvbnRleHQgUGFyZW50LgogICAgICAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gYXBwbHkgdG8gdGhpcyBkaWFsb2cKQEAgLTg2LDE3ICs5OCwxMyBAQAogICAgICAgICAgICAgaW50IHRoZW1lLAogICAgICAgICAgICAgT25UaW1lU2V0TGlzdGVuZXIgY2FsbEJhY2ssCiAgICAgICAgICAgICBpbnQgaG91ck9mRGF5LCBpbnQgbWludXRlLCBib29sZWFuIGlzMjRIb3VyVmlldykgewotICAgICAgICBzdXBlcihjb250ZXh0LCB0aGVtZSk7Ci0gICAgICAgIG1DYWxsYmFjayA9IGNhbGxCYWNrOworICAgICAgICBzdXBlcihjb250ZXh0LCByZXNvbHZlRGlhbG9nVGhlbWUoY29udGV4dCwgdGhlbWUpKTsKKyAgICAgICAgbVRpbWVTZXRDYWxsYmFjayA9IGNhbGxCYWNrOwogICAgICAgICBtSW5pdGlhbEhvdXJPZkRheSA9IGhvdXJPZkRheTsKICAgICAgICAgbUluaXRpYWxNaW51dGUgPSBtaW51dGU7CiAgICAgICAgIG1JczI0SG91clZpZXcgPSBpczI0SG91clZpZXc7CiAKLSAgICAgICAgc2V0SWNvbigwKTsKLSAgICAgICAgc2V0VGl0bGUoUi5zdHJpbmcudGltZV9waWNrZXJfZGlhbG9nX3RpdGxlKTsKLQogICAgICAgICBDb250ZXh0IHRoZW1lQ29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICAgICAgc2V0QnV0dG9uKEJVVFRPTl9QT1NJVElWRSwgdGhlbWVDb250ZXh0LmdldFRleHQoUi5zdHJpbmcuZGF0ZV90aW1lX2RvbmUpLCB0aGlzKTsKIAogICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9CiAgICAgICAgICAgICAgICAgKExheW91dEluZmxhdGVyKSB0aGVtZUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkxBWU9VVF9JTkZMQVRFUl9TRVJWSUNFKTsKQEAgLTEwNCw3ICsxMTIsMTggQEAKICAgICAgICAgc2V0Vmlldyh2aWV3KTsKICAgICAgICAgbVRpbWVQaWNrZXIgPSAoVGltZVBpY2tlcikgdmlldy5maW5kVmlld0J5SWQoUi5pZC50aW1lUGlja2VyKTsKIAotICAgICAgICAvLyBpbml0aWFsaXplIHN0YXRlCisgICAgICAgIC8vIEluaXRpYWxpemUgc3RhdGUKKyAgICAgICAgbVRpbWVQaWNrZXIuc2V0TGVnYWN5TW9kZShmYWxzZSAvKiB3aWxsIHNob3cgbmV3IFVJICovKTsKKyAgICAgICAgbVRpbWVQaWNrZXIuc2V0U2hvd0RvbmVCdXR0b24odHJ1ZSk7CisgICAgICAgIG1UaW1lUGlja2VyLnNldERpc21pc3NDYWxsYmFjayhuZXcgVGltZVBpY2tlci5UaW1lUGlja2VyRGlzbWlzc0NhbGxiYWNrKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBkaXNtaXNzKFRpbWVQaWNrZXIgdmlldywgYm9vbGVhbiBpc0NhbmNlbCwgaW50IGhvdXJPZkRheSwgaW50IG1pbnV0ZSkgeworICAgICAgICAgICAgICAgIGlmICghaXNDYW5jZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgbVRpbWVTZXRDYWxsYmFjay5vblRpbWVTZXQodmlldywgaG91ck9mRGF5LCBtaW51dGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBUaW1lUGlja2VyRGlhbG9nLnRoaXMuZGlzbWlzcygpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKICAgICAgICAgbVRpbWVQaWNrZXIuc2V0SXMyNEhvdXJWaWV3KG1JczI0SG91clZpZXcpOwogICAgICAgICBtVGltZVBpY2tlci5zZXRDdXJyZW50SG91cihtSW5pdGlhbEhvdXJPZkRheSk7CiAgICAgICAgIG1UaW1lUGlja2VyLnNldEN1cnJlbnRNaW51dGUobUluaXRpYWxNaW51dGUpOwpAQCAtMTI1LDkgKzE0NCw5IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRyeU5vdGlmeVRpbWVTZXQoKSB7Ci0gICAgICAgIGlmIChtQ2FsbGJhY2sgIT0gbnVsbCkgeworICAgICAgICBpZiAobVRpbWVTZXRDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgICAgICAgICBtVGltZVBpY2tlci5jbGVhckZvY3VzKCk7Ci0gICAgICAgICAgICBtQ2FsbGJhY2sub25UaW1lU2V0KG1UaW1lUGlja2VyLCBtVGltZVBpY2tlci5nZXRDdXJyZW50SG91cigpLAorICAgICAgICAgICAgbVRpbWVTZXRDYWxsYmFjay5vblRpbWVTZXQobVRpbWVQaWNrZXIsIG1UaW1lUGlja2VyLmdldEN1cnJlbnRIb3VyKCksCiAgICAgICAgICAgICAgICAgICAgIG1UaW1lUGlja2VyLmdldEN1cnJlbnRNaW51dGUoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvV2FsbHBhcGVyTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1dhbGxwYXBlck1hbmFnZXIuamF2YQppbmRleCBjZWQ3MmY4Li5lNmUwZjM1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvV2FsbHBhcGVyTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9XYWxscGFwZXJNYW5hZ2VyLmphdmEKQEAgLTQxLDEzICs0MSwxMCBAQAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlckdsb2JhbDsKIAogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKQEAgLTIyMSwyNCArMjE4LDkgQEAKICAgICAgICAgCiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfQ0xFQVJfV0FMTFBBUEVSID0gMTsKICAgICAgICAgCi0gICAgICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtSGFuZGxlcjsKLSAgICAgICAgCiAgICAgICAgIEdsb2JhbHMoTG9vcGVyIGxvb3BlcikgewogICAgICAgICAgICAgSUJpbmRlciBiID0gU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZShDb250ZXh0LldBTExQQVBFUl9TRVJWSUNFKTsKICAgICAgICAgICAgIG1TZXJ2aWNlID0gSVdhbGxwYXBlck1hbmFnZXIuU3R1Yi5hc0ludGVyZmFjZShiKTsKLSAgICAgICAgICAgIG1IYW5kbGVyID0gbmV3IEhhbmRsZXIobG9vcGVyKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1TR19DTEVBUl9XQUxMUEFQRVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XYWxscGFwZXIgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGVmYXVsdFdhbGxwYXBlciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcHVibGljIHZvaWQgb25XYWxscGFwZXJDaGFuZ2VkKCkgewpAQCAtMjQ3LDcgKzIyOSwxMCBAQAogICAgICAgICAgICAgICogdG8gbnVsbCBzbyBpZiB0aGUgdXNlciByZXF1ZXN0cyB0aGUgd2FsbHBhcGVyIGFnYWluIHRoZW4gd2UnbGwKICAgICAgICAgICAgICAqIGZldGNoIGl0LgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtSGFuZGxlci5zZW5kRW1wdHlNZXNzYWdlKE1TR19DTEVBUl9XQUxMUEFQRVIpOworICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICAgICAgbVdhbGxwYXBlciA9IG51bGw7CisgICAgICAgICAgICAgICAgbURlZmF1bHRXYWxscGFwZXIgPSBudWxsOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIEJpdG1hcCBwZWVrV2FsbHBhcGVyQml0bWFwKENvbnRleHQgY29udGV4dCwgYm9vbGVhbiByZXR1cm5EZWZhdWx0KSB7CkBAIC0yODAsNyArMjY1LDYgQEAKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgICAgIG1XYWxscGFwZXIgPSBudWxsOwogICAgICAgICAgICAgICAgIG1EZWZhdWx0V2FsbHBhcGVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVNZXNzYWdlcyhNU0dfQ0xFQVJfV0FMTFBBUEVSKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yOTQsOSArMjc4LDggQEAKIAogICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwRmFjdG9yeS5PcHRpb25zIG9wdGlvbnMgPSBuZXcgQml0bWFwRmFjdG9yeS5PcHRpb25zKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAgYm0gPSBCaXRtYXBGYWN0b3J5LmRlY29kZUZpbGVEZXNjcmlwdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJpdG1hcEZhY3RvcnkuZGVjb2RlRmlsZURlc2NyaXB0b3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLmdldEZpbGVEZXNjcmlwdG9yKCksIG51bGwsIG9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQml0bWFwKGNvbnRleHQsIGJtLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoT3V0T2ZNZW1vcnlFcnJvciBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW4ndCBkZWNvZGUgZmlsZSIsIGUpOwogICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewpAQCAtMzIzLDggKzMwNiw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcEZhY3RvcnkuT3B0aW9ucyBvcHRpb25zID0gbmV3IEJpdG1hcEZhY3RvcnkuT3B0aW9ucygpOwotICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwIGJtID0gQml0bWFwRmFjdG9yeS5kZWNvZGVTdHJlYW0oaXMsIG51bGwsIG9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQml0bWFwKGNvbnRleHQsIGJtLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCaXRtYXBGYWN0b3J5LmRlY29kZVN0cmVhbShpcywgbnVsbCwgb3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE91dE9mTWVtb3J5RXJyb3IgZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2FuJ3QgZGVjb2RlIHN0cmVhbSIsIGUpOwogICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewpAQCAtMTAyOSw2MiArMTAxMSw0IEBACiAgICAgcHVibGljIHZvaWQgY2xlYXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBzZXRSZXNvdXJjZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRyYXdhYmxlLmRlZmF1bHRfd2FsbHBhcGVyKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIEJpdG1hcCBnZW5lcmF0ZUJpdG1hcChDb250ZXh0IGNvbnRleHQsIEJpdG1hcCBibSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICAgIGlmIChibSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFdpbmRvd01hbmFnZXIgd20gPSAoV2luZG93TWFuYWdlciljb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSU5ET1dfU0VSVklDRSk7Ci0gICAgICAgIERpc3BsYXlNZXRyaWNzIG1ldHJpY3MgPSBuZXcgRGlzcGxheU1ldHJpY3MoKTsKLSAgICAgICAgd20uZ2V0RGVmYXVsdERpc3BsYXkoKS5nZXRNZXRyaWNzKG1ldHJpY3MpOwotICAgICAgICBibS5zZXREZW5zaXR5KG1ldHJpY3Mubm9uY29tcGF0RGVuc2l0eURwaSk7Ci0KLSAgICAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAKLSAgICAgICAgICAgICAgICB8fCAoYm0uZ2V0V2lkdGgoKSA9PSB3aWR0aCAmJiBibS5nZXRIZWlnaHQoKSA9PSBoZWlnaHQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gYm07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaW5hbCBiaXRtYXAgd2Ugd2FudCB0byByZXR1cm4uCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBCaXRtYXAgbmV3Ym0gPSBCaXRtYXAuY3JlYXRlQml0bWFwKHdpZHRoLCBoZWlnaHQsIEJpdG1hcC5Db25maWcuQVJHQl84ODg4KTsKLSAgICAgICAgICAgIG5ld2JtLnNldERlbnNpdHkobWV0cmljcy5ub25jb21wYXREZW5zaXR5RHBpKTsKLQotICAgICAgICAgICAgQ2FudmFzIGMgPSBuZXcgQ2FudmFzKG5ld2JtKTsKLSAgICAgICAgICAgIFJlY3QgdGFyZ2V0UmVjdCA9IG5ldyBSZWN0KCk7Ci0gICAgICAgICAgICB0YXJnZXRSZWN0LnJpZ2h0ID0gYm0uZ2V0V2lkdGgoKTsKLSAgICAgICAgICAgIHRhcmdldFJlY3QuYm90dG9tID0gYm0uZ2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIGludCBkZWx0YXcgPSB3aWR0aCAtIHRhcmdldFJlY3QucmlnaHQ7Ci0gICAgICAgICAgICBpbnQgZGVsdGFoID0gaGVpZ2h0IC0gdGFyZ2V0UmVjdC5ib3R0b207Ci0KLSAgICAgICAgICAgIGlmIChkZWx0YXcgPiAwIHx8IGRlbHRhaCA+IDApIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNjYWxlIHVwIHNvIGl0IGNvdmVycyB0aGUgZW50aXJlIGFyZWEuCi0gICAgICAgICAgICAgICAgZmxvYXQgc2NhbGU7Ci0gICAgICAgICAgICAgICAgaWYgKGRlbHRhdyA+IGRlbHRhaCkgewotICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IHdpZHRoIC8gKGZsb2F0KXRhcmdldFJlY3QucmlnaHQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBoZWlnaHQgLyAoZmxvYXQpdGFyZ2V0UmVjdC5ib3R0b207Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRhcmdldFJlY3QucmlnaHQgPSAoaW50KSh0YXJnZXRSZWN0LnJpZ2h0KnNjYWxlKTsKLSAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LmJvdHRvbSA9IChpbnQpKHRhcmdldFJlY3QuYm90dG9tKnNjYWxlKTsKLSAgICAgICAgICAgICAgICBkZWx0YXcgPSB3aWR0aCAtIHRhcmdldFJlY3QucmlnaHQ7Ci0gICAgICAgICAgICAgICAgZGVsdGFoID0gaGVpZ2h0IC0gdGFyZ2V0UmVjdC5ib3R0b207Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRhcmdldFJlY3Qub2Zmc2V0KGRlbHRhdy8yLCBkZWx0YWgvMik7Ci0KLSAgICAgICAgICAgIFBhaW50IHBhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgICAgICAgICBwYWludC5zZXRGaWx0ZXJCaXRtYXAodHJ1ZSk7Ci0gICAgICAgICAgICBwYWludC5zZXRYZmVybW9kZShuZXcgUG9ydGVyRHVmZlhmZXJtb2RlKFBvcnRlckR1ZmYuTW9kZS5TUkMpKTsKLSAgICAgICAgICAgIGMuZHJhd0JpdG1hcChibSwgbnVsbCwgdGFyZ2V0UmVjdCwgcGFpbnQpOwotCi0gICAgICAgICAgICBibS5yZWN5Y2xlKCk7Ci0gICAgICAgICAgICBjLnNldEJpdG1hcChudWxsKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdibTsKLSAgICAgICAgfSBjYXRjaCAoT3V0T2ZNZW1vcnlFcnJvciBlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJDYW4ndCBnZW5lcmF0ZSBkZWZhdWx0IGJpdG1hcCIsIGUpOwotICAgICAgICAgICAgcmV0dXJuIGJtOwotICAgICAgICB9Ci0gICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2JhY2t1cC9GdWxsQmFja3VwLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYmFja3VwL0Z1bGxCYWNrdXAuamF2YQppbmRleCBjYjA3MzdlLi5jZmQwYTY1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYmFja3VwL0Z1bGxCYWNrdXAuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYmFja3VwL0Z1bGxCYWNrdXAuamF2YQpAQCAtMTYsOSArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYXBwLmJhY2t1cDsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2JhY2t1cC9TaGFyZWRQcmVmZXJlbmNlc0JhY2t1cEhlbHBlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2JhY2t1cC9TaGFyZWRQcmVmZXJlbmNlc0JhY2t1cEhlbHBlci5qYXZhCmluZGV4IDIxM2JkMzEuLjkzOTYxNmIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9iYWNrdXAvU2hhcmVkUHJlZmVyZW5jZXNCYWNrdXBIZWxwZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYmFja3VwL1NoYXJlZFByZWZlcmVuY2VzQmFja3VwSGVscGVyLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuYXBwLlF1ZXVlZFdvcms7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNoYXJlZFByZWZlcmVuY2VzOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwd2lkZ2V0L0FwcFdpZGdldEhvc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRIb3N0LmphdmEKaW5kZXggZjEwNGQ3MS4uODRkMzgzNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwd2lkZ2V0L0FwcFdpZGdldEhvc3QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHB3aWRnZXQvQXBwV2lkZ2V0SG9zdC5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5VGhyZWFkOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKQEAgLTMxLDcgKzMwLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZW1vdGVWaWV3czsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZW1vdGVWaWV3cy5PbkNsaWNrSGFuZGxlcjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHB3aWRnZXQvQXBwV2lkZ2V0TWFuYWdlci5qYXZhCmluZGV4IGQxYzdiZWMuLjhhODljYmMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwd2lkZ2V0L0FwcFdpZGdldE1hbmFnZXIuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYXBwd2lkZ2V0OwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyTmF0aXZlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoQWRhcHRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEFkYXB0ZXIuamF2YQppbmRleCBkMWYxZjJhLi4zOGE3MWFhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoQWRhcHRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhBZGFwdGVyLmphdmEKQEAgLTE5LDkgKzE5LDcgQEAKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2RrQ29uc3RhbnQ7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlNka0NvbnN0YW50LlNka0NvbnN0YW50VHlwZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsVXVpZDsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwpAQCAtMzcsNyArMzUsNiBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiBpbXBvcnQgamF2YS51dGlsLlVVSUQ7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2UuamF2YQppbmRleCBkNzg5YTk0NC4uYTM5NmEwNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2UuamF2YQpAQCAtMTksMTIgKzE5LDEwIEBACiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlNka0NvbnN0YW50OwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudC5TZGtDb25zdGFudFR5cGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbFV1aWQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKQEAgLTk0Nyw4ICs5NDUsMTMgQEAKICAgICAgICogICAgICAgICAgICAgICB3YXMgc3RhcnRlZC4KICAgICAgICovCiAgICAgIHB1YmxpYyBib29sZWFuIGZldGNoVXVpZHNXaXRoU2RwKCkgeworICAgICAgICBJQmx1ZXRvb3RoIHNlcnZpY2UgPSBzU2VydmljZTsKKyAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiQlQgbm90IGVuYWJsZWQuIENhbm5vdCBmZXRjaFV1aWRzV2l0aFNkcCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gc1NlcnZpY2UuZmV0Y2hSZW1vdGVVdWlkcyh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLmZldGNoUmVtb3RlVXVpZHModGhpcyk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7TG9nLmUoVEFHLCAiIiwgZSk7fQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5qYXZhCmluZGV4IGNkMDkzYzUuLmUzODIwYTIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQuamF2YQpAQCAtMTgsMTggKzE4LDkgQEAKIAogaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLkJsdWV0b290aERldmljZTsKIGltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhQcm9maWxlOwotaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLkJsdWV0b290aFByb2ZpbGUuU2VydmljZUxpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLklCbHVldG9vdGhNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLklCbHVldG9vdGhTdGF0ZUNoYW5nZUNhbGxiYWNrOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsVXVpZDsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRDaGFyYWN0ZXJpc3RpYy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRDaGFyYWN0ZXJpc3RpYy5qYXZhCmluZGV4IGYwZWNiYjQuLmE4NjY3N2MgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0Q2hhcmFjdGVyaXN0aWMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dENoYXJhY3RlcmlzdGljLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5ibHVldG9vdGg7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JbGxlZ2FsRm9ybWF0Q29udmVyc2lvbkV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuVVVJRDsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRTZXJ2ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0U2VydmVyLmphdmEKaW5kZXggMTUzMjE1Yy4uMGMwMGMwNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRTZXJ2ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dFNlcnZlci5qYXZhCkBAIC0xOSwxOCArMTksOSBAQAogaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLkJsdWV0b290aEFkYXB0ZXI7CiBpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoRGV2aWNlOwogaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLkJsdWV0b290aFByb2ZpbGU7Ci1pbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoUHJvZmlsZS5TZXJ2aWNlTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguSUJsdWV0b290aE1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguSUJsdWV0b290aFN0YXRlQ2hhbmdlQ2FsbGJhY2s7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxVdWlkOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dFNlcnZlckNhbGxiYWNrLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dFNlcnZlckNhbGxiYWNrLmphdmEKaW5kZXggZjlmMWQ5Ny4uZmMzZmZlOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRTZXJ2ZXJDYWxsYmFjay5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0U2VydmVyQ2FsbGJhY2suamF2YQpAQCAtMTgsOCArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoRGV2aWNlOwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKiBUaGlzIGFic3RyYWN0IGNsYXNzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBCbHVldG9vdGhHYXR0U2VydmVyfSBjYWxsYmFja3MuCiAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhIZWFsdGguamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhIZWFsdGguamF2YQppbmRleCAyZTk1MGZhLi5kYWYzYmFkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSGVhbHRoLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhlYWx0aC5qYXZhCkBAIC0yMyw3ICsyMyw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhJbnB1dERldmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aElucHV0RGV2aWNlLmphdmEKaW5kZXggODQ0ZjQzMi4uYzRiYTViMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aElucHV0RGV2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aElucHV0RGV2aWNlLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoTWFwLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoTWFwLmphdmEKaW5kZXggOTJhMmYxZS4uNWExYjdhYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aE1hcC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhNYXAuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhQYW4uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhQYW4uamF2YQppbmRleCBiN2EzN2Y0Li5lNzI4MzJjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoUGFuLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFBhbi5qYXZhCkBAIC0yNCw3ICsyNCw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFBiYXAuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhQYmFwLmphdmEKaW5kZXggN2Y0NTY1Mi4uODUyMmVlMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFBiYXAuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoUGJhcC5qYXZhCkBAIC0yMiw3ICsyMiw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNlcnZlclNvY2tldC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNlcnZlclNvY2tldC5qYXZhCmluZGV4IDk2YmU4YTIuLmJjNTZlNTUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhTZXJ2ZXJTb2NrZXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoU2VydmVyU29ja2V0LmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5ibHVldG9vdGg7CiAKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsVXVpZDsKIAogaW1wb3J0IGphdmEuaW8uQ2xvc2VhYmxlOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNvY2tldC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNvY2tldC5qYXZhCmluZGV4IDFlNzVmYzIuLjIyMzIyZTMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhTb2NrZXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoU29ja2V0LmphdmEKQEAgLTE2LDIxICsxNiwxNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYmx1ZXRvb3RoOwogCi1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsVXVpZDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGphdmEuaW8uQ2xvc2VhYmxlOwogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwogaW1wb3J0IGphdmEudXRpbC5VVUlEOwogaW1wb3J0IGFuZHJvaWQubmV0LkxvY2FsU29ja2V0OwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFRldGhlcmluZ0RhdGFUcmFja2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoVGV0aGVyaW5nRGF0YVRyYWNrZXIuamF2YQppbmRleCBhOWI3MTc2Li42ZGQ1NTFlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoVGV0aGVyaW5nRGF0YVRyYWNrZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoVGV0aGVyaW5nRGF0YVRyYWNrZXIuamF2YQpAQCAtMTcsOSArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLmJsdWV0b290aDsKIAogaW1wb3J0IGFuZHJvaWQubmV0LkJhc2VOZXR3b3JrU3RhdGVUcmFja2VyOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuSU5ldHdvcmtNYW5hZ2VtZW50U2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubmV0LkRoY3BSZXN1bHRzOwpAQCAtMzUsMTEgKzMyLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgamF2YS5uZXQuSW50ZXJmYWNlQWRkcmVzczsKLWltcG9ydCBhbmRyb2lkLm5ldC5MaW5rQWRkcmVzczsKLWltcG9ydCBhbmRyb2lkLm5ldC5Sb3V0ZUluZm87Ci1pbXBvcnQgamF2YS5uZXQuSW5ldDRBZGRyZXNzOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuQXN5bmNDaGFubmVsOwogCkBAIC0xNDMsMTEgKzEzNSw2IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGUoKSB7Ci0gICAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZAotICAgIH0KLQotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlZChib29sZWFuIGlzQ2FwdGl2ZVBvcnRhbCkgewogICAgICAgICAvLyBub3QgaW1wbGVtZW50ZWQKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0FzeW5jVGFza0xvYWRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Bc3luY1Rhc2tMb2FkZXIuamF2YQppbmRleCBlYjc0MjZlLi43MjQxZTBkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0FzeW5jVGFza0xvYWRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQXN5bmNUYXNrTG9hZGVyLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5PcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlRpbWVVdGlsczsKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CkBAIC02NCwxMCArNjQsMTAgQEAKICAgICAgICAgLyogUnVucyBvbiBhIHdvcmtlciB0aHJlYWQgKi8KICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCBEIGRvSW5CYWNrZ3JvdW5kKFZvaWQuLi4gcGFyYW1zKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsIHRoaXMgKyAiID4+PiBkb0luQmFja2dyb3VuZCIpOworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsIHRoaXMgKyAiID4+PiBkb0luQmFja2dyb3VuZCIpOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBEIGRhdGEgPSBBc3luY1Rhc2tMb2FkZXIudGhpcy5vbkxvYWRJbkJhY2tncm91bmQoKTsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsIHRoaXMgKyAiICA8PDwgZG9JbkJhY2tncm91bmQiKTsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgdGhpcyArICIgIDw8PCBkb0luQmFja2dyb3VuZCIpOwogICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAgICAgfSBjYXRjaCAoT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoIWlzQ2FuY2VsbGVkKCkpIHsKQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gU28gd2UgdHJlYXQgdGhpcyBjYXNlIGFzIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uCiAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsIHRoaXMgKyAiICA8PDwgZG9JbkJhY2tncm91bmQgKHdhcyBjYW5jZWxlZCkiLCBleCk7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsIHRoaXMgKyAiICA8PDwgZG9JbkJhY2tncm91bmQgKHdhcyBjYW5jZWxlZCkiLCBleCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgLyogUnVucyBvbiB0aGUgVUkgdGhyZWFkICovCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlKEQgZGF0YSkgewotICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLnYoVEFHLCB0aGlzICsgIiBvblBvc3RFeGVjdXRlIik7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgdGhpcyArICIgb25Qb3N0RXhlY3V0ZSIpOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBBc3luY1Rhc2tMb2FkZXIudGhpcy5kaXNwYXRjaE9uTG9hZENvbXBsZXRlKHRoaXMsIGRhdGEpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgLyogUnVucyBvbiB0aGUgVUkgdGhyZWFkICovCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNhbmNlbGxlZChEIGRhdGEpIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgdGhpcyArICIgb25DYW5jZWxsZWQiKTsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCB0aGlzICsgIiBvbkNhbmNlbGxlZCIpOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBBc3luY1Rhc2tMb2FkZXIudGhpcy5kaXNwYXRjaE9uQ2FuY2VsbGVkKHRoaXMsIGRhdGEpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTE2MiwxOCArMTYyLDE4IEBACiAgICAgICAgIHN1cGVyLm9uRm9yY2VMb2FkKCk7CiAgICAgICAgIGNhbmNlbExvYWQoKTsKICAgICAgICAgbVRhc2sgPSBuZXcgTG9hZFRhc2soKTsKLSAgICAgICAgaWYgKERFQlVHKSBTbG9nLnYoVEFHLCAiUHJlcGFyaW5nIGxvYWQ6IG1UYXNrPSIgKyBtVGFzayk7CisgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiUHJlcGFyaW5nIGxvYWQ6IG1UYXNrPSIgKyBtVGFzayk7CiAgICAgICAgIGV4ZWN1dGVQZW5kaW5nVGFzaygpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCBib29sZWFuIG9uQ2FuY2VsTG9hZCgpIHsKLSAgICAgICAgaWYgKERFQlVHKSBTbG9nLnYoVEFHLCAib25DYW5jZWxMb2FkOiBtVGFzaz0iICsgbVRhc2spOworICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIm9uQ2FuY2VsTG9hZDogbVRhc2s9IiArIG1UYXNrKTsKICAgICAgICAgaWYgKG1UYXNrICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChtQ2FuY2VsbGluZ1Rhc2sgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBhIHBlbmRpbmcgdGFzayBhbHJlYWR5IHdhaXRpbmcgZm9yIGEgcHJldmlvdXMKICAgICAgICAgICAgICAgICAvLyBvbmUgYmVpbmcgY2FuY2VsZWQ7IGp1c3QgZHJvcCBpdC4KLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsCisgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuY2VsTG9hZDogc3RpbGwgd2FpdGluZyBmb3IgY2FuY2VsbGVkIHRhc2s7IGRyb3BwaW5nIG5leHQiKTsKICAgICAgICAgICAgICAgICBpZiAobVRhc2sud2FpdGluZykgewogICAgICAgICAgICAgICAgICAgICBtVGFzay53YWl0aW5nID0gZmFsc2U7CkBAIC0xODQsMTQgKzE4NCwxNCBAQAogICAgICAgICAgICAgfSBlbHNlIGlmIChtVGFzay53YWl0aW5nKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSB0YXNrLCBidXQgaXQgaXMgd2FpdGluZyBmb3IgdGhlIHRpbWUgaXQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gZXhlY3V0ZS4gIFdlIGNhbiBqdXN0IHRvc3MgaXQuCi0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLnYoVEFHLCAiY2FuY2VsTG9hZDogdGFzayBpcyB3YWl0aW5nLCBkcm9wcGluZyBpdCIpOworICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiY2FuY2VsTG9hZDogdGFzayBpcyB3YWl0aW5nLCBkcm9wcGluZyBpdCIpOwogICAgICAgICAgICAgICAgIG1UYXNrLndhaXRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVDYWxsYmFja3MobVRhc2spOwogICAgICAgICAgICAgICAgIG1UYXNrID0gbnVsbDsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGJvb2xlYW4gY2FuY2VsbGVkID0gbVRhc2suY2FuY2VsKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICJjYW5jZWxMb2FkOiBjYW5jZWxsZWQ9IiArIGNhbmNlbGxlZCk7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJjYW5jZWxMb2FkOiBjYW5jZWxsZWQ9IiArIGNhbmNlbGxlZCk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkgewogICAgICAgICAgICAgICAgICAgICBtQ2FuY2VsbGluZ1Rhc2sgPSBtVGFzazsKICAgICAgICAgICAgICAgICAgICAgY2FuY2VsTG9hZEluQmFja2dyb3VuZCgpOwpAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgICAgICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgICAgICBpZiAobm93IDwgKG1MYXN0TG9hZENvbXBsZXRlVGltZSttVXBkYXRlVGhyb3R0bGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCB5ZXQgdGltZSB0byBkbyBhbm90aGVyIGxvYWQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgIldhaXRpbmcgdW50aWwgIgorICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIldhaXRpbmcgdW50aWwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKG1MYXN0TG9hZENvbXBsZXRlVGltZSttVXBkYXRlVGhyb3R0bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRvIGV4ZWN1dGU6ICIgKyBtVGFzayk7CiAgICAgICAgICAgICAgICAgICAgIG1UYXNrLndhaXRpbmcgPSB0cnVlOwpAQCAtMjMxLDcgKzIzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICJFeGVjdXRpbmc6ICIgKyBtVGFzayk7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIkV4ZWN1dGluZzogIiArIG1UYXNrKTsKICAgICAgICAgICAgIG1UYXNrLmV4ZWN1dGVPbkV4ZWN1dG9yKG1FeGVjdXRvciwgKFZvaWRbXSkgbnVsbCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzksMTEgKzIzOSwxMSBAQAogICAgIHZvaWQgZGlzcGF0Y2hPbkNhbmNlbGxlZChMb2FkVGFzayB0YXNrLCBEIGRhdGEpIHsKICAgICAgICAgb25DYW5jZWxlZChkYXRhKTsKICAgICAgICAgaWYgKG1DYW5jZWxsaW5nVGFzayA9PSB0YXNrKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICJDYW5jZWxsZWQgdGFzayBpcyBub3cgY2FuY2VsZWQhIik7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIkNhbmNlbGxlZCB0YXNrIGlzIG5vdyBjYW5jZWxlZCEiKTsKICAgICAgICAgICAgIHJvbGxiYWNrQ29udGVudENoYW5nZWQoKTsKICAgICAgICAgICAgIG1MYXN0TG9hZENvbXBsZXRlVGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOwogICAgICAgICAgICAgbUNhbmNlbGxpbmdUYXNrID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgIkRlbGl2ZXJpbmcgY2FuY2VsbGF0aW9uIik7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIkRlbGl2ZXJpbmcgY2FuY2VsbGF0aW9uIik7CiAgICAgICAgICAgICBkZWxpdmVyQ2FuY2VsbGF0aW9uKCk7CiAgICAgICAgICAgICBleGVjdXRlUGVuZGluZ1Rhc2soKTsKICAgICAgICAgfQpAQCAtMjUxLDcgKzI1MSw3IEBACiAKICAgICB2b2lkIGRpc3BhdGNoT25Mb2FkQ29tcGxldGUoTG9hZFRhc2sgdGFzaywgRCBkYXRhKSB7CiAgICAgICAgIGlmIChtVGFzayAhPSB0YXNrKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICJMb2FkIGNvbXBsZXRlIG9mIG9sZCB0YXNrLCB0cnlpbmcgdG8gY2FuY2VsIik7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIkxvYWQgY29tcGxldGUgb2Ygb2xkIHRhc2ssIHRyeWluZyB0byBjYW5jZWwiKTsKICAgICAgICAgICAgIGRpc3BhdGNoT25DYW5jZWxsZWQodGFzaywgZGF0YSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaXNBYmFuZG9uZWQoKSkgewpAQCAtMjYxLDcgKzI2MSw3IEBACiAgICAgICAgICAgICAgICAgY29tbWl0Q29udGVudENoYW5nZWQoKTsKICAgICAgICAgICAgICAgICBtTGFzdExvYWRDb21wbGV0ZVRpbWUgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgICAgICBtVGFzayA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLnYoVEFHLCAiRGVsaXZlcmluZyByZXN1bHQiKTsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIkRlbGl2ZXJpbmcgcmVzdWx0Iik7CiAgICAgICAgICAgICAgICAgZGVsaXZlclJlc3VsdChkYXRhKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9DbGlwYm9hcmRNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NsaXBib2FyZE1hbmFnZXIuamF2YQppbmRleCA3M2U2ZmQwLi41NjUzY2FkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NsaXBib2FyZE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NsaXBib2FyZE1hbmFnZXIuamF2YQpAQCAtMjIsOCArMjIsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlN0cmljdE1vZGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlci5qYXZhCmluZGV4IGJhOTNhMjAuLjNmYzkzM2QgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXIuamF2YQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lOQ19FWFRSQVNfUFJJT1JJVFkgPSAic3luY19wcmlvcml0eSI7CiAKICAgICAvKioge0BoaWRlfSBGbGFnIHRvIGFsbG93IHN5bmMgdG8gb2NjdXIgb24gbWV0ZXJlZCBuZXR3b3JrLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNZTkNfRVhUUkFTX0RJU0FMTE9XX01FVEVSRUQgPSAiZGlzYWxsb3dfbWV0ZXJlZCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lOQ19FWFRSQVNfRElTQUxMT1dfTUVURVJFRCA9ICJhbGxvd19tZXRlcmVkIjsKIAogICAgIC8qKgogICAgICAqIFNldCBieSB0aGUgU3luY01hbmFnZXIgdG8gcmVxdWVzdCB0aGF0IHRoZSBTeW5jQWRhcHRlciBpbml0aWFsaXplIGl0c2VsZiBmb3IKQEAgLTM2OCw5ICszNjgsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIDxwPgogICAgICAqIFF1ZXJ5IHRoZSBnaXZlbiBVUkksIHJldHVybmluZyBhIHtAbGluayBDdXJzb3J9IG92ZXIgdGhlIHJlc3VsdCBzZXQuCi0gICAgICogPC9wPgogICAgICAqIDxwPgogICAgICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCB0aGUgY2FsbGVyIHNob3VsZCBmb2xsb3cgdGhlc2UgZ3VpZGVsaW5lczoKICAgICAgKiA8dWw+CkBAIC00MDUsOSArNDAzLDggQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBRdWVyeSB0aGUgZ2l2ZW4gVVJJLCByZXR1cm5pbmcgYSB7QGxpbmsgQ3Vyc29yfSBvdmVyIHRoZSByZXN1bHQgc2V0LgotICAgICAqIDwvcD4KKyAgICAgKiBRdWVyeSB0aGUgZ2l2ZW4gVVJJLCByZXR1cm5pbmcgYSB7QGxpbmsgQ3Vyc29yfSBvdmVyIHRoZSByZXN1bHQgc2V0CisgICAgICogd2l0aCBvcHRpb25hbCBzdXBwb3J0IGZvciBjYW5jZWxsYXRpb24uCiAgICAgICogPHA+CiAgICAgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIHRoZSBjYWxsZXIgc2hvdWxkIGZvbGxvdyB0aGVzZSBndWlkZWxpbmVzOgogICAgICAqIDx1bD4KQEAgLTE3NTEsNyArMTc0OCw3IEBACiAgICAgICAgICAgICBuZXcgU3luY1JlcXVlc3QuQnVpbGRlcigpCiAgICAgICAgICAgICAgICAgLnNldFN5bmNBZGFwdGVyKGFjY291bnQsIGF1dGhvcml0eSkKICAgICAgICAgICAgICAgICAuc2V0RXh0cmFzKGV4dHJhcykKLSAgICAgICAgICAgICAgICAuc3luY09uY2UoKQorICAgICAgICAgICAgICAgIC5zeW5jT25jZSgpICAgICAvLyBJbW1lZGlhdGUgc3luYy4KICAgICAgICAgICAgICAgICAuYnVpbGQoKTsKICAgICAgICAgcmVxdWVzdFN5bmMocmVxdWVzdCk7CiAgICAgfQpAQCAtMTc1OSw5ICsxNzU2LDYgQEAKICAgICAvKioKICAgICAgKiBSZWdpc3RlciBhIHN5bmMgd2l0aCB0aGUgU3luY01hbmFnZXIuIFRoZXNlIHJlcXVlc3RzIGFyZSBidWlsdCB1c2luZyB0aGUKICAgICAgKiB7QGxpbmsgU3luY1JlcXVlc3QuQnVpbGRlcn0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVxdWVzdCBUaGUgaW1tdXRhYmxlIFN5bmNSZXF1ZXN0IG9iamVjdCBjb250YWluaW5nIHRoZSBzeW5jIHBhcmFtZXRlcnMuIFVzZQotICAgICAqIHtAbGluayBTeW5jUmVxdWVzdC5CdWlsZGVyfSB0byBjb25zdHJ1Y3QgdGhlc2UuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlcXVlc3RTeW5jKFN5bmNSZXF1ZXN0IHJlcXVlc3QpIHsKICAgICAgICAgdHJ5IHsKQEAgLTE4MjksMTIgKzE4MjMsMjUgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2FuY2VsU3luYyhBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGdldENvbnRlbnRTZXJ2aWNlKCkuY2FuY2VsU3luYyhhY2NvdW50LCBhdXRob3JpdHkpOworICAgICAgICAgICAgZ2V0Q29udGVudFNlcnZpY2UoKS5jYW5jZWxTeW5jKGFjY291bnQsIGF1dGhvcml0eSwgbnVsbCk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKKyAgICAgKiBDYW5jZWwgYW55IGFjdGl2ZSBvciBwZW5kaW5nIHN5bmNzIHRoYXQgYXJlIHJ1bm5pbmcgb24gdGhpcyBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHBhcmFtIGNuYW1lIHRoZSBzZXJ2aWNlIGZvciB3aGljaCB0byBjYW5jZWwgYWxsIGFjdGl2ZS9wZW5kaW5nIG9wZXJhdGlvbnMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGNhbmNlbFN5bmMoQ29tcG9uZW50TmFtZSBjbmFtZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZ2V0Q29udGVudFNlcnZpY2UoKS5jYW5jZWxTeW5jKG51bGwsIG51bGwsIGNuYW1lKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBTeW5jQWRhcHRlcnMgdGhhdCBhcmUga25vd24gdG8gdGhlIHN5c3RlbS4KICAgICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIFN5bmNBZGFwdGVycyB0aGF0IGhhdmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzeXN0ZW0KICAgICAgKi8KQEAgLTE4OTcsMTIgKzE5MDQsMTMgQEAKICAgICAgKiB7QGxpbmsgI1NZTkNfRVhUUkFTX0lOSVRJQUxJWkV9LCB7QGxpbmsgI1NZTkNfRVhUUkFTX0ZPUkNFfSwKICAgICAgKiB7QGxpbmsgI1NZTkNfRVhUUkFTX0VYUEVESVRFRH0sIHtAbGluayAjU1lOQ19FWFRSQVNfTUFOVUFMfSBzZXQgdG8gdHJ1ZS4KICAgICAgKiBJZiBhbnkgYXJlIHN1cHBsaWVkIHRoZW4gYW4ge0BsaW5rIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbn0gd2lsbCBiZSB0aHJvd24uCi0gICAgICogPHA+QXMgb2YgQVBJIGxldmVsIDE5IHRoaXMgZnVuY3Rpb24gaW50cm9kdWNlcyBhIGRlZmF1bHQgZmxleGliaWxpdHkgb2YgfjQlICh1cCB0byBhIG1heGltdW0KLSAgICAgKiBvZiBvbmUgaG91ciBpbiB0aGUgZGF5KSBpbnRvIHRoZSByZXF1ZXN0ZWQgcGVyaW9kLiBVc2UKLSAgICAgKiB7QGxpbmsgU3luY1JlcXVlc3QuQnVpbGRlciNzeW5jUGVyaW9kaWMobG9uZywgbG9uZyl9IHRvIHNldCB0aGlzIGZsZXhpYmlsaXR5IG1hbnVhbGx5LgogICAgICAqCiAgICAgICogPHA+VGhpcyBtZXRob2QgcmVxdWlyZXMgdGhlIGNhbGxlciB0byBob2xkIHRoZSBwZXJtaXNzaW9uCiAgICAgICoge0BsaW5rIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbiNXUklURV9TWU5DX1NFVFRJTkdTfS4KKyAgICAgKiA8cD5UaGUgYnVuZGxlIGZvciBhIHBlcmlvZGljIHN5bmMgY2FuIGJlIHF1ZXJpZWQgYnkgYXBwbGljYXRpb25zIHdpdGggdGhlIGNvcnJlY3QKKyAgICAgKiBwZXJtaXNzaW9ucyB1c2luZworICAgICAqIHtAbGluayBDb250ZW50UmVzb2x2ZXIjZ2V0UGVyaW9kaWNTeW5jcyhBY2NvdW50IGFjY291bnQsIFN0cmluZyBwcm92aWRlcil9LCBzbyBubworICAgICAqIHNlbnNpdGl2ZSBkYXRhIHNob3VsZCBiZSB0cmFuc2ZlcnJlZCBoZXJlLgogICAgICAqCiAgICAgICogQHBhcmFtIGFjY291bnQgdGhlIGFjY291bnQgdG8gc3BlY2lmeSBpbiB0aGUgc3luYwogICAgICAqIEBwYXJhbSBhdXRob3JpdHkgdGhlIHByb3ZpZGVyIHRvIHNwZWNpZnkgaW4gdGhlIHN5bmMgcmVxdWVzdApAQCAtMTkzMiw2ICsxOTQwLDI2IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICoge0BoaWRlfQorICAgICAqIEhlbHBlciBmdW5jdGlvbiB0byB0aHJvdyBhbiA8Y29kZT5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L2NvZGU+IGlmIGFueSBpbGxlZ2FsCisgICAgICogZXh0cmFzIHdlcmUgc2V0IGZvciBhIHBlcmlvZGljIHN5bmMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXh0cmFzIGJ1bmRsZSB0byB2YWxpZGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaW52YWxpZFBlcmlvZGljRXh0cmFzKEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgaWYgKGV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19NQU5VQUwsIGZhbHNlKQorICAgICAgICAgICAgICAgIHx8IGV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19ET19OT1RfUkVUUlksIGZhbHNlKQorICAgICAgICAgICAgICAgIHx8IGV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19JR05PUkVfQkFDS09GRiwgZmFsc2UpCisgICAgICAgICAgICAgICAgfHwgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9TRVRUSU5HUywgZmFsc2UpCisgICAgICAgICAgICAgICAgfHwgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lOSVRJQUxJWkUsIGZhbHNlKQorICAgICAgICAgICAgICAgIHx8IGV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19GT1JDRSwgZmFsc2UpCisgICAgICAgICAgICAgICAgfHwgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0VYUEVESVRFRCwgZmFsc2UpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCiAgICAgICogUmVtb3ZlIGEgcGVyaW9kaWMgc3luYy4gSGFzIG5vIGFmZmVjdCBpZiBhY2NvdW50LCBhdXRob3JpdHkgYW5kIGV4dHJhcyBkb24ndCBtYXRjaAogICAgICAqIGFuIGV4aXN0aW5nIHBlcmlvZGljIHN5bmMuCiAgICAgICogPHA+VGhpcyBtZXRob2QgcmVxdWlyZXMgdGhlIGNhbGxlciB0byBob2xkIHRoZSBwZXJtaXNzaW9uCkBAIC0xOTUxLDYgKzE5NzksMzEgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBSZW1vdmUgdGhlIHNwZWNpZmllZCBzeW5jLiBUaGlzIHdpbGwgY2FuY2VsIGFueSBwZW5kaW5nIG9yIGFjdGl2ZSBzeW5jcy4gSWYgdGhlIHJlcXVlc3QgaXMKKyAgICAgKiBmb3IgYSBwZXJpb2RpYyBzeW5jLCB0aGlzIGNhbGwgd2lsbCByZW1vdmUgYW55IGZ1dHVyZSBvY2N1cnJlbmNlcy4KKyAgICAgKiA8cD5JZiBhIHBlcmlvZGljIHN5bmMgaXMgc3BlY2lmaWVkLCB0aGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcGVybWlzc2lvbgorICAgICAqIHtAbGluayBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24jV1JJVEVfU1lOQ19TRVRUSU5HU30uIElmIHRoaXMgU3luY1JlcXVlc3QgdGFyZ2V0cyBhCisgICAgICogU3luY1NlcnZpY2UgYWRhcHRlcix0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiBtdXN0IGJlIHNpZ25lZCB3aXRoIHRoZSBzYW1lIGNlcnRpZmljYXRlIGFzIHRoZQorICAgICAqIGFkYXB0ZXIuCisgICAgICo8L3A+SXQgaXMgcG9zc2libGUgdG8gY2FuY2VsIGEgc3luYyB1c2luZyBhIFN5bmNSZXF1ZXN0IG9iamVjdCB0aGF0IGlzIG5vdCB0aGUgc2FtZSBvYmplY3QKKyAgICAgKiB3aXRoIHdoaWNoIHlvdSByZXF1ZXN0ZWQgdGhlIHN5bmMuIERvIHNvIGJ5IGJ1aWxkaW5nIGEgU3luY1JlcXVlc3Qgd2l0aCB0aGUgc2FtZQorICAgICAqIHNlcnZpY2UvYWRhcHRlciwgZnJlcXVlbmN5LCA8Yj5hbmQ8L2I+IGV4dHJhcyBidW5kbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVxdWVzdCBTeW5jUmVxdWVzdCBvYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBzeW5jIHRvIGNhbmNlbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2FuY2VsU3luYyhTeW5jUmVxdWVzdCByZXF1ZXN0KSB7CisgICAgICAgIGlmIChyZXF1ZXN0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJlcXVlc3QgY2Fubm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgZ2V0Q29udGVudFNlcnZpY2UoKS5jYW5jZWxSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlnbm9yZWQ7IGlmIHRoaXMgaXMgdGhyb3duIHRoZW4gaXQgbWVhbnMgdGhlIHJ1bnRpbWUgaXMgaW4gdGhlIG1pZHN0IG9mCisgICAgICAgICAgICAvLyBiZWluZyByZXN0YXJ0ZWQKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgogICAgICAqIEdldCB0aGUgbGlzdCBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVyaW9kaWMgc3luY3MgZm9yIHRoZSBnaXZlbiBhY2NvdW50IGFuZCBhdXRob3JpdHkuCiAgICAgICogPHA+VGhpcyBtZXRob2QgcmVxdWlyZXMgdGhlIGNhbGxlciB0byBob2xkIHRoZSBwZXJtaXNzaW9uCiAgICAgICoge0BsaW5rIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbiNSRUFEX1NZTkNfU0VUVElOR1N9LgpAQCAtMTk2MSw3ICsyMDE0LDIzIEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBMaXN0PFBlcmlvZGljU3luYz4gZ2V0UGVyaW9kaWNTeW5jcyhBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBnZXRDb250ZW50U2VydmljZSgpLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgYXV0aG9yaXR5KTsKKyAgICAgICAgICAgIHJldHVybiBnZXRDb250ZW50U2VydmljZSgpLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgYXV0aG9yaXR5LCBudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJ0aGUgQ29udGVudFNlcnZpY2Ugc2hvdWxkIGFsd2F5cyBiZSByZWFjaGFibGUiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBwZXJpb2RpYyBzeW5jcyBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVkIGNvbXBvbmVudC4KKyAgICAgKiA8cD5UaGUgY2FsbGluZyBhcHBsaWNhdGlvbiBtdXN0IGJlIHNpZ25lZCB3aXRoIHRoZSBzYW1lIGNlcnRpZmljYXRlIGFzIHRoZSB0YXJnZXQgY29tcG9uZW50LAorICAgICAqIG90aGVyd2lzZSB0aGlzIGNhbGwgd2lsbCBmYWlsLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxQZXJpb2RpY1N5bmM+IGdldFBlcmlvZGljU3luY3MoQ29tcG9uZW50TmFtZSBjbmFtZSkgeworICAgICAgICBpZiAoY25hbWUgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29tcG9uZW50IG11c3Qgbm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIGdldENvbnRlbnRTZXJ2aWNlKCkuZ2V0UGVyaW9kaWNTeW5jcyhudWxsLCBudWxsLCBjbmFtZSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigidGhlIENvbnRlbnRTZXJ2aWNlIHNob3VsZCBhbHdheXMgYmUgcmVhY2hhYmxlIiwgZSk7CiAgICAgICAgIH0KQEAgLTE5OTcsNiArMjA2NiwzOCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFNldCB3aGV0aGVyIHRoZSBwcm92aWRlZCB7QGxpbmsgU3luY1NlcnZpY2V9IGlzIGF2YWlsYWJsZSB0byBwcm9jZXNzIHdvcmsuCisgICAgICogPHA+VGhpcyBtZXRob2QgcmVxdWlyZXMgdGhlIGNhbGxlciB0byBob2xkIHRoZSBwZXJtaXNzaW9uCisgICAgICoge0BsaW5rIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbiNXUklURV9TWU5DX1NFVFRJTkdTfS4KKyAgICAgKiA8cD5UaGUgY2FsbGluZyBhcHBsaWNhdGlvbiBtdXN0IGJlIHNpZ25lZCB3aXRoIHRoZSBzYW1lIGNlcnRpZmljYXRlIGFzIHRoZSB0YXJnZXQgY29tcG9uZW50LAorICAgICAqIG90aGVyd2lzZSB0aGlzIGNhbGwgd2lsbCBmYWlsLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRTZXJ2aWNlQWN0aXZlKENvbXBvbmVudE5hbWUgY25hbWUsIGJvb2xlYW4gYWN0aXZlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBnZXRDb250ZW50U2VydmljZSgpLnNldFNlcnZpY2VBY3RpdmUoY25hbWUsIGFjdGl2ZSk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBleGNlcHRpb24gaWdub3JlZDsgaWYgdGhpcyBpcyB0aHJvd24gdGhlbiBpdCBtZWFucyB0aGUgcnVudGltZSBpcyBpbiB0aGUgbWlkc3Qgb2YKKyAgICAgICAgICAgIC8vIGJlaW5nIHJlc3RhcnRlZAorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUXVlcnkgdGhlIHN0YXRlIG9mIHRoaXMgc3luYyBzZXJ2aWNlLgorICAgICAqIDxwPlNldCB3aXRoIHtAbGluayAjc2V0U2VydmljZUFjdGl2ZShDb21wb25lbnROYW1lIGNuYW1lLCBib29sZWFuIGFjdGl2ZSl9LgorICAgICAqIDxwPlRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIG11c3QgYmUgc2lnbmVkIHdpdGggdGhlIHNhbWUgY2VydGlmaWNhdGUgYXMgdGhlIHRhcmdldCBjb21wb25lbnQsCisgICAgICogb3RoZXJ3aXNlIHRoaXMgY2FsbCB3aWxsIGZhaWwuCisgICAgICogQHBhcmFtIGNuYW1lIENvbXBvbmVudE5hbWUgcmVmZXJyaW5nIHRvIGEge0BsaW5rIFN5bmNTZXJ2aWNlfQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBqb2JzIHdpbGwgYmUgcnVuIG9uIHRoaXMgc2VydmljZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1NlcnZpY2VBY3RpdmUoQ29tcG9uZW50TmFtZSBjbmFtZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIGdldENvbnRlbnRTZXJ2aWNlKCkuaXNTZXJ2aWNlQWN0aXZlKGNuYW1lKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJ0aGUgQ29udGVudFNlcnZpY2Ugc2hvdWxkIGFsd2F5cyBiZSByZWFjaGFibGUiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgogICAgICAqIEdldHMgdGhlIG1hc3RlciBhdXRvLXN5bmMgc2V0dGluZyB0aGF0IGFwcGxpZXMgdG8gYWxsIHRoZSBwcm92aWRlcnMgYW5kIGFjY291bnRzLgogICAgICAqIElmIHRoaXMgaXMgZmFsc2UgdGhlbiB0aGUgcGVyLXByb3ZpZGVyIGF1dG8tc3luYyBzZXR0aW5nIGlzIGlnbm9yZWQuCiAgICAgICogPHA+VGhpcyBtZXRob2QgcmVxdWlyZXMgdGhlIGNhbGxlciB0byBob2xkIHRoZSBwZXJtaXNzaW9uCkBAIC0yMDMwLDggKzIxMzEsOCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBjdXJyZW50bHkgYSBzeW5jIG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuCi0gICAgICogYWNjb3VudCBvciBhdXRob3JpdHkgaW4gdGhlIHBlbmRpbmcgbGlzdCwgb3IgYWN0aXZlbHkgYmVpbmcgcHJvY2Vzc2VkLgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBjdXJyZW50bHkgYSBzeW5jIG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGFjY291bnQgb3IgYXV0aG9yaXR5CisgICAgICogYWN0aXZlbHkgYmVpbmcgcHJvY2Vzc2VkLgogICAgICAqIDxwPlRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gaG9sZCB0aGUgcGVybWlzc2lvbgogICAgICAqIHtAbGluayBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24jUkVBRF9TWU5DX1NUQVRTfS4KICAgICAgKiBAcGFyYW0gYWNjb3VudCB0aGUgYWNjb3VudCB3aG9zZSBzZXR0aW5nIHdlIGFyZSBxdWVyeWluZwpAQCAtMjAzOSw4ICsyMTQwLDI2IEBACiAgICAgICogQHJldHVybiB0cnVlIGlmIGEgc3luYyBpcyBhY3RpdmUgZm9yIHRoZSBnaXZlbiBhY2NvdW50IG9yIGF1dGhvcml0eS4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTeW5jQWN0aXZlKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSkgeworICAgICAgICBpZiAoYWNjb3VudCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJhY2NvdW50IG11c3Qgbm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImF1dGhvcml0eSBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKwogICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIGdldENvbnRlbnRTZXJ2aWNlKCkuaXNTeW5jQWN0aXZlKGFjY291bnQsIGF1dGhvcml0eSk7CisgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5pc1N5bmNBY3RpdmUoYWNjb3VudCwgYXV0aG9yaXR5LCBudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJ0aGUgQ29udGVudFNlcnZpY2Ugc2hvdWxkIGFsd2F5cyBiZSByZWFjaGFibGUiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N5bmNBY3RpdmUoQ29tcG9uZW50TmFtZSBjbmFtZSkgeworICAgICAgICBpZiAoY25hbWUgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29tcG9uZW50IG5hbWUgbXVzdCBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5pc1N5bmNBY3RpdmUobnVsbCwgbnVsbCwgY25hbWUpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oInRoZSBDb250ZW50U2VydmljZSBzaG91bGQgYWx3YXlzIGJlIHJlYWNoYWJsZSIsIGUpOwogICAgICAgICB9CkBAIC0yMDk4LDcgKzIyMTcsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgU3luY1N0YXR1c0luZm8gZ2V0U3luY1N0YXR1cyhBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBnZXRDb250ZW50U2VydmljZSgpLmdldFN5bmNTdGF0dXMoYWNjb3VudCwgYXV0aG9yaXR5KTsKKyAgICAgICAgICAgIHJldHVybiBnZXRDb250ZW50U2VydmljZSgpLmdldFN5bmNTdGF0dXMoYWNjb3VudCwgYXV0aG9yaXR5LCBudWxsKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJ0aGUgQ29udGVudFNlcnZpY2Ugc2hvdWxkIGFsd2F5cyBiZSByZWFjaGFibGUiLCBlKTsKICAgICAgICAgfQpAQCAtMjExNCw3ICsyMjMzLDE1IEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3luY1BlbmRpbmcoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5KSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5pc1N5bmNQZW5kaW5nKGFjY291bnQsIGF1dGhvcml0eSk7CisgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5pc1N5bmNQZW5kaW5nKGFjY291bnQsIGF1dGhvcml0eSwgbnVsbCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigidGhlIENvbnRlbnRTZXJ2aWNlIHNob3VsZCBhbHdheXMgYmUgcmVhY2hhYmxlIiwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTeW5jUGVuZGluZyhDb21wb25lbnROYW1lIGNuYW1lKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5pc1N5bmNQZW5kaW5nKG51bGwsIG51bGwsIGNuYW1lKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJ0aGUgQ29udGVudFNlcnZpY2Ugc2hvdWxkIGFsd2F5cyBiZSByZWFjaGFibGUiLCBlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZXh0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRleHQuamF2YQppbmRleCAyZTRlMjA5Li5hYzA4ZDliIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRleHQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRleHQuamF2YQpAQCAtMTYsNiArMTYsMTAgQEAKIAogcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3RyaW5nRGVmOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRNYW5hZ2VyOwpAQCAtNDcsNiArNTEsOCBAQAogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKIAogLyoqCiAgKiBJbnRlcmZhY2UgdG8gZ2xvYmFsIGluZm9ybWF0aW9uIGFib3V0IGFuIGFwcGxpY2F0aW9uIGVudmlyb25tZW50LiAgVGhpcyBpcwpAQCAtMTMyLDYgKzEzOCwyMCBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1PREVfRU5BQkxFX1dSSVRFX0FIRUFEX0xPR0dJTkcgPSAweDAwMDg7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLAorICAgICAgICAgICAgdmFsdWUgPSB7CisgICAgICAgICAgICAgICAgQklORF9BVVRPX0NSRUFURSwKKyAgICAgICAgICAgICAgICBCSU5EX0FVVE9fQ1JFQVRFLAorICAgICAgICAgICAgICAgIEJJTkRfREVCVUdfVU5CSU5ELAorICAgICAgICAgICAgICAgIEJJTkRfTk9UX0ZPUkVHUk9VTkQsCisgICAgICAgICAgICAgICAgQklORF9BQk9WRV9DTElFTlQsCisgICAgICAgICAgICAgICAgQklORF9BTExPV19PT01fTUFOQUdFTUVOVCwKKyAgICAgICAgICAgICAgICBCSU5EX1dBSVZFX1BSSU9SSVRZCisgICAgICAgICAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBCaW5kU2VydmljZUZsYWdzIHt9CisKICAgICAvKioKICAgICAgKiBGbGFnIGZvciB7QGxpbmsgI2JpbmRTZXJ2aWNlfTogYXV0b21hdGljYWxseSBjcmVhdGUgdGhlIHNlcnZpY2UgYXMgbG9uZwogICAgICAqIGFzIHRoZSBiaW5kaW5nIGV4aXN0cy4gIE5vdGUgdGhhdCB3aGlsZSB0aGlzIHdpbGwgY3JlYXRlIHRoZSBzZXJ2aWNlLApAQCAtNDk1LDcgKzUxNSw3IEBACiAgICAgICogYW5kIHtAbGluayAjTU9ERV9XT1JMRF9XUklURUFCTEV9IHRvIGNvbnRyb2wgcGVybWlzc2lvbnMuICBUaGUgYml0CiAgICAgICoge0BsaW5rICNNT0RFX01VTFRJX1BST0NFU1N9IGNhbiBhbHNvIGJlIHVzZWQgaWYgbXVsdGlwbGUgcHJvY2Vzc2VzCiAgICAgICogYXJlIG11dGF0aW5nIHRoZSBzYW1lIFNoYXJlZFByZWZlcmVuY2VzIGZpbGUuICB7QGxpbmsgI01PREVfTVVMVElfUFJPQ0VTU30KLSAgICAgKiBpcyBhbHdheXMgb24gaW4gYXBwcyB0YXJnZXR0aW5nIEdpbmdlcmJyZWFkIChBbmRyb2lkIDIuMykgYW5kIGJlbG93LCBhbmQKKyAgICAgKiBpcyBhbHdheXMgb24gaW4gYXBwcyB0YXJnZXRpbmcgR2luZ2VyYnJlYWQgKEFuZHJvaWQgMi4zKSBhbmQgYmVsb3csIGFuZAogICAgICAqIG9mZiBieSBkZWZhdWx0IGluIGxhdGVyIHZlcnNpb25zLgogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgc2luZ2xlIHtAbGluayBTaGFyZWRQcmVmZXJlbmNlc30gaW5zdGFuY2UgdGhhdCBjYW4gYmUgdXNlZApAQCAtNjc0LDcgKzY5NCw4IEBACiAgICAgICogQHNlZSAjZ2V0RmlsZXNEaXIKICAgICAgKiBAc2VlIGFuZHJvaWQub3MuRW52aXJvbm1lbnQjZ2V0RXh0ZXJuYWxTdG9yYWdlUHVibGljRGlyZWN0b3J5CiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IEZpbGUgZ2V0RXh0ZXJuYWxGaWxlc0RpcihTdHJpbmcgdHlwZSk7CisgICAgQE51bGxhYmxlCisgICAgcHVibGljIGFic3RyYWN0IEZpbGUgZ2V0RXh0ZXJuYWxGaWxlc0RpcihATnVsbGFibGUgU3RyaW5nIHR5cGUpOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhYnNvbHV0ZSBwYXRocyB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBkaXJlY3RvcmllcyBvbiBhbGwKQEAgLTcwNyw3ICs3MjgsNyBAQAogICAgICAqIFJldHVybmVkIHBhdGhzIG1heSBiZSB7QGNvZGUgbnVsbH0gaWYgYSBzdG9yYWdlIGRldmljZSBpcyB1bmF2YWlsYWJsZS4KICAgICAgKgogICAgICAqIEBzZWUgI2dldEV4dGVybmFsRmlsZXNEaXIoU3RyaW5nKQotICAgICAqIEBzZWUgRW52aXJvbm1lbnQjZ2V0U3RvcmFnZVN0YXRlKEZpbGUpCisgICAgICogQHNlZSBFbnZpcm9ubWVudCNnZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZShGaWxlKQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBGaWxlW10gZ2V0RXh0ZXJuYWxGaWxlc0RpcnMoU3RyaW5nIHR5cGUpOwogCkBAIC03NzEsNyArNzkyLDcgQEAKICAgICAgKiBSZXR1cm5lZCBwYXRocyBtYXkgYmUge0Bjb2RlIG51bGx9IGlmIGEgc3RvcmFnZSBkZXZpY2UgaXMgdW5hdmFpbGFibGUuCiAgICAgICoKICAgICAgKiBAc2VlICNnZXRPYmJEaXIoKQotICAgICAqIEBzZWUgRW52aXJvbm1lbnQjZ2V0U3RvcmFnZVN0YXRlKEZpbGUpCisgICAgICogQHNlZSBFbnZpcm9ubWVudCNnZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZShGaWxlKQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBGaWxlW10gZ2V0T2JiRGlycygpOwogCkBAIC04NDAsNiArODYxLDcgQEAKICAgICAgKgogICAgICAqIEBzZWUgI2dldENhY2hlRGlyCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIGFic3RyYWN0IEZpbGUgZ2V0RXh0ZXJuYWxDYWNoZURpcigpOwogCiAgICAgLyoqCkBAIC04NzMsNyArODk1LDcgQEAKICAgICAgKiBSZXR1cm5lZCBwYXRocyBtYXkgYmUge0Bjb2RlIG51bGx9IGlmIGEgc3RvcmFnZSBkZXZpY2UgaXMgdW5hdmFpbGFibGUuCiAgICAgICoKICAgICAgKiBAc2VlICNnZXRFeHRlcm5hbENhY2hlRGlyKCkKLSAgICAgKiBAc2VlIEVudmlyb25tZW50I2dldFN0b3JhZ2VTdGF0ZShGaWxlKQorICAgICAqIEBzZWUgRW52aXJvbm1lbnQjZ2V0RXh0ZXJuYWxTdG9yYWdlU3RhdGUoRmlsZSkKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgRmlsZVtdIGdldEV4dGVybmFsQ2FjaGVEaXJzKCk7CiAKQEAgLTk2MCw3ICs5ODIsOCBAQAogICAgICAqIEBzZWUgI2RlbGV0ZURhdGFiYXNlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IFNRTGl0ZURhdGFiYXNlIG9wZW5PckNyZWF0ZURhdGFiYXNlKFN0cmluZyBuYW1lLAotICAgICAgICAgICAgaW50IG1vZGUsIEN1cnNvckZhY3RvcnkgZmFjdG9yeSwgRGF0YWJhc2VFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyKTsKKyAgICAgICAgICAgIGludCBtb2RlLCBDdXJzb3JGYWN0b3J5IGZhY3RvcnksCisgICAgICAgICAgICBATnVsbGFibGUgRGF0YWJhc2VFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyKTsKIAogICAgIC8qKgogICAgICAqIERlbGV0ZSBhbiBleGlzdGluZyBwcml2YXRlIFNRTGl0ZURhdGFiYXNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIENvbnRleHQncwpAQCAtMTEwNiw3ICsxMTI5LDcgQEAKICAgICAgKiBAc2VlICNzdGFydEFjdGl2aXR5KEludGVudCkKICAgICAgKiBAc2VlIFBhY2thZ2VNYW5hZ2VyI3Jlc29sdmVBY3Rpdml0eQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHN0YXJ0QWN0aXZpdHkoSW50ZW50IGludGVudCwgQnVuZGxlIG9wdGlvbnMpOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHN0YXJ0QWN0aXZpdHkoSW50ZW50IGludGVudCwgQE51bGxhYmxlIEJ1bmRsZSBvcHRpb25zKTsKIAogICAgIC8qKgogICAgICAqIFZlcnNpb24gb2Yge0BsaW5rICNzdGFydEFjdGl2aXR5KEludGVudCwgQnVuZGxlKX0gdGhhdCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlCkBAIC0xMTIyLDcgKzExNDUsNyBAQAogICAgICAqIEB0aHJvd3MgQWN0aXZpdHlOb3RGb3VuZEV4Y2VwdGlvbiAmbmJzcDsKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHlBc1VzZXIoSW50ZW50IGludGVudCwgQnVuZGxlIG9wdGlvbnMsIFVzZXJIYW5kbGUgdXNlcklkKSB7CisgICAgcHVibGljIHZvaWQgc3RhcnRBY3Rpdml0eUFzVXNlcihJbnRlbnQgaW50ZW50LCBATnVsbGFibGUgQnVuZGxlIG9wdGlvbnMsIFVzZXJIYW5kbGUgdXNlcklkKSB7CiAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQuIE11c3Qgb3ZlcnJpZGUgaW4gYSBzdWJjbGFzcy4iKTsKICAgICB9CiAKQEAgLTEyNDEsNyArMTI2NCw3IEBACiAgICAgICogQHNlZSAjc3RhcnRJbnRlbnRTZW5kZXIoSW50ZW50U2VuZGVyLCBJbnRlbnQsIGludCwgaW50LCBpbnQpCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc3RhcnRJbnRlbnRTZW5kZXIoSW50ZW50U2VuZGVyIGludGVudCwKLSAgICAgICAgICAgIEludGVudCBmaWxsSW5JbnRlbnQsIGludCBmbGFnc01hc2ssIGludCBmbGFnc1ZhbHVlcywgaW50IGV4dHJhRmxhZ3MsCisgICAgICAgICAgICBATnVsbGFibGUgSW50ZW50IGZpbGxJbkludGVudCwgaW50IGZsYWdzTWFzaywgaW50IGZsYWdzVmFsdWVzLCBpbnQgZXh0cmFGbGFncywKICAgICAgICAgICAgIEJ1bmRsZSBvcHRpb25zKSB0aHJvd3MgSW50ZW50U2VuZGVyLlNlbmRJbnRlbnRFeGNlcHRpb247CiAKICAgICAvKioKQEAgLTEyOTEsMTEgKzEzMTQsMTEgQEAKICAgICAgKiBAc2VlICNzZW5kT3JkZXJlZEJyb2FkY2FzdChJbnRlbnQsIFN0cmluZywgQnJvYWRjYXN0UmVjZWl2ZXIsIEhhbmRsZXIsIGludCwgU3RyaW5nLCBCdW5kbGUpCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2VuZEJyb2FkY2FzdChJbnRlbnQgaW50ZW50LAotICAgICAgICAgICAgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbik7CisgICAgICAgICAgICBATnVsbGFibGUgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbik7CiAKICAgICAvKioKICAgICAgKiBMaWtlIHtAbGluayAjc2VuZEJyb2FkY2FzdChJbnRlbnQsIFN0cmluZyl9LCBidXQgYWxzbyBhbGxvd3Mgc3BlY2lmaWNhdGlvbgotICAgICAqIG9mIGFuIGFzc29jYXRlZCBhcHAgb3AgYXMgcGVyIHtAbGluayBhbmRyb2lkLmFwcC5BcHBPcHNNYW5hZ2VyfS4KKyAgICAgKiBvZiBhbiBhc3NvY2lhdGVkIGFwcCBvcCBhcyBwZXIge0BsaW5rIGFuZHJvaWQuYXBwLkFwcE9wc01hbmFnZXJ9LgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2VuZEJyb2FkY2FzdChJbnRlbnQgaW50ZW50LApAQCAtMTMyMiw3ICsxMzQ1LDcgQEAKICAgICAgKiBAc2VlICNzZW5kT3JkZXJlZEJyb2FkY2FzdChJbnRlbnQsIFN0cmluZywgQnJvYWRjYXN0UmVjZWl2ZXIsIEhhbmRsZXIsIGludCwgU3RyaW5nLCBCdW5kbGUpCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2VuZE9yZGVyZWRCcm9hZGNhc3QoSW50ZW50IGludGVudCwKLSAgICAgICAgICAgIFN0cmluZyByZWNlaXZlclBlcm1pc3Npb24pOworICAgICAgICAgICAgQE51bGxhYmxlIFN0cmluZyByZWNlaXZlclBlcm1pc3Npb24pOwogCiAgICAgLyoqCiAgICAgICogVmVyc2lvbiBvZiB7QGxpbmsgI3NlbmRCcm9hZGNhc3QoSW50ZW50KX0gdGhhdCBhbGxvd3MgeW91IHRvCkBAIC0xMzY2LDE1ICsxMzg5LDE1IEBACiAgICAgICogQHNlZSAjcmVnaXN0ZXJSZWNlaXZlcgogICAgICAqIEBzZWUgYW5kcm9pZC5hcHAuQWN0aXZpdHkjUkVTVUxUX09LCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2VuZE9yZGVyZWRCcm9hZGNhc3QoSW50ZW50IGludGVudCwKLSAgICAgICAgICAgIFN0cmluZyByZWNlaXZlclBlcm1pc3Npb24sIEJyb2FkY2FzdFJlY2VpdmVyIHJlc3VsdFJlY2VpdmVyLAotICAgICAgICAgICAgSGFuZGxlciBzY2hlZHVsZXIsIGludCBpbml0aWFsQ29kZSwgU3RyaW5nIGluaXRpYWxEYXRhLAotICAgICAgICAgICAgQnVuZGxlIGluaXRpYWxFeHRyYXMpOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNlbmRPcmRlcmVkQnJvYWRjYXN0KEBOb25OdWxsIEludGVudCBpbnRlbnQsCisgICAgICAgICAgICBATnVsbGFibGUgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbiwgQnJvYWRjYXN0UmVjZWl2ZXIgcmVzdWx0UmVjZWl2ZXIsCisgICAgICAgICAgICBATnVsbGFibGUgSGFuZGxlciBzY2hlZHVsZXIsIGludCBpbml0aWFsQ29kZSwgQE51bGxhYmxlIFN0cmluZyBpbml0aWFsRGF0YSwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBCdW5kbGUgaW5pdGlhbEV4dHJhcyk7CiAKICAgICAvKioKICAgICAgKiBMaWtlIHtAbGluayAjc2VuZE9yZGVyZWRCcm9hZGNhc3QoSW50ZW50LCBTdHJpbmcsIEJyb2FkY2FzdFJlY2VpdmVyLCBhbmRyb2lkLm9zLkhhbmRsZXIsCiAgICAgICogaW50LCBTdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlKX0sIGJ1dCBhbHNvIGFsbG93cyBzcGVjaWZpY2F0aW9uCi0gICAgICogb2YgYW4gYXNzb2NhdGVkIGFwcCBvcCBhcyBwZXIge0BsaW5rIGFuZHJvaWQuYXBwLkFwcE9wc01hbmFnZXJ9LgorICAgICAqIG9mIGFuIGFzc29jaWF0ZWQgYXBwIG9wIGFzIHBlciB7QGxpbmsgYW5kcm9pZC5hcHAuQXBwT3BzTWFuYWdlcn0uCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZW5kT3JkZXJlZEJyb2FkY2FzdChJbnRlbnQgaW50ZW50LApAQCAtMTQwOSw3ICsxNDMyLDcgQEAKICAgICAgKiBAc2VlICNzZW5kQnJvYWRjYXN0KEludGVudCwgU3RyaW5nKQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNlbmRCcm9hZGNhc3RBc1VzZXIoSW50ZW50IGludGVudCwgVXNlckhhbmRsZSB1c2VyLAotICAgICAgICAgICAgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbik7CisgICAgICAgICAgICBATnVsbGFibGUgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbik7CiAKICAgICAvKioKICAgICAgKiBWZXJzaW9uIG9mCkBAIC0xNDQyLDggKzE0NjUsOSBAQAogICAgICAqIEBzZWUgI3NlbmRPcmRlcmVkQnJvYWRjYXN0KEludGVudCwgU3RyaW5nLCBCcm9hZGNhc3RSZWNlaXZlciwgSGFuZGxlciwgaW50LCBTdHJpbmcsIEJ1bmRsZSkKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZW5kT3JkZXJlZEJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LCBVc2VySGFuZGxlIHVzZXIsCi0gICAgICAgICAgICBTdHJpbmcgcmVjZWl2ZXJQZXJtaXNzaW9uLCBCcm9hZGNhc3RSZWNlaXZlciByZXN1bHRSZWNlaXZlciwgSGFuZGxlciBzY2hlZHVsZXIsCi0gICAgICAgICAgICBpbnQgaW5pdGlhbENvZGUsIFN0cmluZyBpbml0aWFsRGF0YSwgQnVuZGxlIGluaXRpYWxFeHRyYXMpOworICAgICAgICAgICAgQE51bGxhYmxlIFN0cmluZyByZWNlaXZlclBlcm1pc3Npb24sIEJyb2FkY2FzdFJlY2VpdmVyIHJlc3VsdFJlY2VpdmVyLAorICAgICAgICAgICAgQE51bGxhYmxlIEhhbmRsZXIgc2NoZWR1bGVyLCBpbnQgaW5pdGlhbENvZGUsIEBOdWxsYWJsZSBTdHJpbmcgaW5pdGlhbERhdGEsCisgICAgICAgICAgICBATnVsbGFibGUgIEJ1bmRsZSBpbml0aWFsRXh0cmFzKTsKIAogICAgIC8qKgogICAgICAqIFBlcmZvcm0gYSB7QGxpbmsgI3NlbmRCcm9hZGNhc3QoSW50ZW50KX0gdGhhdCBpcyAic3RpY2t5LCIgbWVhbmluZyB0aGUKQEAgLTE1MDgsOCArMTUzMiw4IEBACiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2VuZFN0aWNreU9yZGVyZWRCcm9hZGNhc3QoSW50ZW50IGludGVudCwKICAgICAgICAgICAgIEJyb2FkY2FzdFJlY2VpdmVyIHJlc3VsdFJlY2VpdmVyLAotICAgICAgICAgICAgSGFuZGxlciBzY2hlZHVsZXIsIGludCBpbml0aWFsQ29kZSwgU3RyaW5nIGluaXRpYWxEYXRhLAotICAgICAgICAgICAgQnVuZGxlIGluaXRpYWxFeHRyYXMpOworICAgICAgICAgICAgQE51bGxhYmxlIEhhbmRsZXIgc2NoZWR1bGVyLCBpbnQgaW5pdGlhbENvZGUsIEBOdWxsYWJsZSBTdHJpbmcgaW5pdGlhbERhdGEsCisgICAgICAgICAgICBATnVsbGFibGUgQnVuZGxlIGluaXRpYWxFeHRyYXMpOwogCiAgICAgLyoqCiAgICAgICogUmVtb3ZlIHRoZSBkYXRhIHByZXZpb3VzbHkgc2VudCB3aXRoIHtAbGluayAjc2VuZFN0aWNreUJyb2FkY2FzdH0sCkBAIC0xNTY5LDggKzE1OTMsOCBAQAogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNlbmRTdGlja3lPcmRlcmVkQnJvYWRjYXN0QXNVc2VyKEludGVudCBpbnRlbnQsCiAgICAgICAgICAgICBVc2VySGFuZGxlIHVzZXIsIEJyb2FkY2FzdFJlY2VpdmVyIHJlc3VsdFJlY2VpdmVyLAotICAgICAgICAgICAgSGFuZGxlciBzY2hlZHVsZXIsIGludCBpbml0aWFsQ29kZSwgU3RyaW5nIGluaXRpYWxEYXRhLAotICAgICAgICAgICAgQnVuZGxlIGluaXRpYWxFeHRyYXMpOworICAgICAgICAgICAgQE51bGxhYmxlIEhhbmRsZXIgc2NoZWR1bGVyLCBpbnQgaW5pdGlhbENvZGUsIEBOdWxsYWJsZSBTdHJpbmcgaW5pdGlhbERhdGEsCisgICAgICAgICAgICBATnVsbGFibGUgQnVuZGxlIGluaXRpYWxFeHRyYXMpOwogCiAgICAgLyoqCiAgICAgICogVmVyc2lvbiBvZiB7QGxpbmsgI3JlbW92ZVN0aWNreUJyb2FkY2FzdChJbnRlbnQpfSB0aGF0IGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUKQEAgLTE2MzcsNyArMTY2MSw4IEBACiAgICAgICogQHNlZSAjc2VuZEJyb2FkY2FzdAogICAgICAqIEBzZWUgI3VucmVnaXN0ZXJSZWNlaXZlcgogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBJbnRlbnQgcmVnaXN0ZXJSZWNlaXZlcihCcm9hZGNhc3RSZWNlaXZlciByZWNlaXZlciwKKyAgICBATnVsbGFibGUKKyAgICBwdWJsaWMgYWJzdHJhY3QgSW50ZW50IHJlZ2lzdGVyUmVjZWl2ZXIoQE51bGxhYmxlIEJyb2FkY2FzdFJlY2VpdmVyIHJlY2VpdmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbnRGaWx0ZXIgZmlsdGVyKTsKIAogICAgIC8qKgpAQCAtMTY3MSw4ICsxNjk2LDEwIEBACiAgICAgICogQHNlZSAjc2VuZEJyb2FkY2FzdAogICAgICAqIEBzZWUgI3VucmVnaXN0ZXJSZWNlaXZlcgogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIHB1YmxpYyBhYnN0cmFjdCBJbnRlbnQgcmVnaXN0ZXJSZWNlaXZlcihCcm9hZGNhc3RSZWNlaXZlciByZWNlaXZlciwKLSAgICAgICAgICAgIEludGVudEZpbHRlciBmaWx0ZXIsIFN0cmluZyBicm9hZGNhc3RQZXJtaXNzaW9uLCBIYW5kbGVyIHNjaGVkdWxlcik7CisgICAgICAgICAgICBJbnRlbnRGaWx0ZXIgZmlsdGVyLCBATnVsbGFibGUgU3RyaW5nIGJyb2FkY2FzdFBlcm1pc3Npb24sCisgICAgICAgICAgICBATnVsbGFibGUgSGFuZGxlciBzY2hlZHVsZXIpOwogCiAgICAgLyoqCiAgICAgICogQGhpZGUKQEAgLTE2OTgsOSArMTcyNSwxMCBAQAogICAgICAqIEBzZWUgI3NlbmRCcm9hZGNhc3QKICAgICAgKiBAc2VlICN1bnJlZ2lzdGVyUmVjZWl2ZXIKICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBwdWJsaWMgYWJzdHJhY3QgSW50ZW50IHJlZ2lzdGVyUmVjZWl2ZXJBc1VzZXIoQnJvYWRjYXN0UmVjZWl2ZXIgcmVjZWl2ZXIsCi0gICAgICAgICAgICBVc2VySGFuZGxlIHVzZXIsIEludGVudEZpbHRlciBmaWx0ZXIsIFN0cmluZyBicm9hZGNhc3RQZXJtaXNzaW9uLAotICAgICAgICAgICAgSGFuZGxlciBzY2hlZHVsZXIpOworICAgICAgICAgICAgVXNlckhhbmRsZSB1c2VyLCBJbnRlbnRGaWx0ZXIgZmlsdGVyLCBATnVsbGFibGUgU3RyaW5nIGJyb2FkY2FzdFBlcm1pc3Npb24sCisgICAgICAgICAgICBATnVsbGFibGUgSGFuZGxlciBzY2hlZHVsZXIpOwogCiAgICAgLyoqCiAgICAgICogVW5yZWdpc3RlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBCcm9hZGNhc3RSZWNlaXZlci4gIDxlbT5BbGw8L2VtPgpAQCAtMTc1OSw2ICsxNzg3LDcgQEAKICAgICAgKiBAc2VlICNzdG9wU2VydmljZQogICAgICAqIEBzZWUgI2JpbmRTZXJ2aWNlCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIGFic3RyYWN0IENvbXBvbmVudE5hbWUgc3RhcnRTZXJ2aWNlKEludGVudCBzZXJ2aWNlKTsKIAogICAgIC8qKgpAQCAtMTg0Niw4ICsxODc1LDggQEAKICAgICAgKiBAc2VlICNCSU5EX0RFQlVHX1VOQklORAogICAgICAqIEBzZWUgI0JJTkRfTk9UX0ZPUkVHUk9VTkQKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBiaW5kU2VydmljZShJbnRlbnQgc2VydmljZSwgU2VydmljZUNvbm5lY3Rpb24gY29ubiwKLSAgICAgICAgICAgIGludCBmbGFncyk7CisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gYmluZFNlcnZpY2UoSW50ZW50IHNlcnZpY2UsIEBOb25OdWxsIFNlcnZpY2VDb25uZWN0aW9uIGNvbm4sCisgICAgICAgICAgICBAQmluZFNlcnZpY2VGbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogU2FtZSBhcyB7QGxpbmsgI2JpbmRTZXJ2aWNlKEludGVudCwgU2VydmljZUNvbm5lY3Rpb24sIGludCl9LCBidXQgd2l0aCBhbiBleHBsaWNpdCB1c2VySGFuZGxlCkBAIC0xODY4LDcgKzE4OTcsNyBAQAogICAgICAqCiAgICAgICogQHNlZSAjYmluZFNlcnZpY2UKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB1bmJpbmRTZXJ2aWNlKFNlcnZpY2VDb25uZWN0aW9uIGNvbm4pOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHVuYmluZFNlcnZpY2UoQE5vbk51bGwgU2VydmljZUNvbm5lY3Rpb24gY29ubik7CiAKICAgICAvKioKICAgICAgKiBTdGFydCBleGVjdXRpbmcgYW4ge0BsaW5rIGFuZHJvaWQuYXBwLkluc3RydW1lbnRhdGlvbn0gY2xhc3MuICBUaGUgZ2l2ZW4KQEAgLTE4OTMsOCArMTkyMiw2NCBAQAogICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBpbnN0cnVtZW50YXRpb24gd2FzIHN1Y2Nlc3NmdWxseSBzdGFydGVkLAogICAgICAqIGVsc2Uge0Bjb2RlIGZhbHNlfSBpZiBpdCBjb3VsZCBub3QgYmUgZm91bmQuCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gc3RhcnRJbnN0cnVtZW50YXRpb24oQ29tcG9uZW50TmFtZSBjbGFzc05hbWUsCi0gICAgICAgICAgICBTdHJpbmcgcHJvZmlsZUZpbGUsIEJ1bmRsZSBhcmd1bWVudHMpOworICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHN0YXJ0SW5zdHJ1bWVudGF0aW9uKEBOb25OdWxsIENvbXBvbmVudE5hbWUgY2xhc3NOYW1lLAorICAgICAgICAgICAgQE51bGxhYmxlIFN0cmluZyBwcm9maWxlRmlsZSwgQE51bGxhYmxlIEJ1bmRsZSBhcmd1bWVudHMpOworCisgICAgLyoqIEBoaWRlICovCisgICAgQFN0cmluZ0RlZih7CisgICAgICAgICAgICBQT1dFUl9TRVJWSUNFLAorICAgICAgICAgICAgV0lORE9XX1NFUlZJQ0UsCisgICAgICAgICAgICBMQVlPVVRfSU5GTEFURVJfU0VSVklDRSwKKyAgICAgICAgICAgIEFDQ09VTlRfU0VSVklDRSwKKyAgICAgICAgICAgIEFDVElWSVRZX1NFUlZJQ0UsCisgICAgICAgICAgICBBTEFSTV9TRVJWSUNFLAorICAgICAgICAgICAgTk9USUZJQ0FUSU9OX1NFUlZJQ0UsCisgICAgICAgICAgICBBQ0NFU1NJQklMSVRZX1NFUlZJQ0UsCisgICAgICAgICAgICBDQVBUSU9OSU5HX1NFUlZJQ0UsCisgICAgICAgICAgICBLRVlHVUFSRF9TRVJWSUNFLAorICAgICAgICAgICAgTE9DQVRJT05fU0VSVklDRSwKKyAgICAgICAgICAgIC8vQGhpZGU6IENPVU5UUllfREVURUNUT1IsCisgICAgICAgICAgICBTRUFSQ0hfU0VSVklDRSwKKyAgICAgICAgICAgIFNFTlNPUl9TRVJWSUNFLAorICAgICAgICAgICAgU1RPUkFHRV9TRVJWSUNFLAorICAgICAgICAgICAgV0FMTFBBUEVSX1NFUlZJQ0UsCisgICAgICAgICAgICBWSUJSQVRPUl9TRVJWSUNFLAorICAgICAgICAgICAgLy9AaGlkZTogU1RBVFVTX0JBUl9TRVJWSUNFLAorICAgICAgICAgICAgQ09OTkVDVElWSVRZX1NFUlZJQ0UsCisgICAgICAgICAgICAvL0BoaWRlOiBVUERBVEVfTE9DS19TRVJWSUNFLAorICAgICAgICAgICAgLy9AaGlkZTogTkVUV09SS01BTkFHRU1FTlRfU0VSVklDRSwKKyAgICAgICAgICAgIC8vQGhpZGU6IE5FVFdPUktfU1RBVFNfU0VSVklDRSwKKyAgICAgICAgICAgIC8vQGhpZGU6IE5FVFdPUktfUE9MSUNZX1NFUlZJQ0UsCisgICAgICAgICAgICBXSUZJX1NFUlZJQ0UsCisgICAgICAgICAgICBXSUZJX1AyUF9TRVJWSUNFLAorICAgICAgICAgICAgTlNEX1NFUlZJQ0UsCisgICAgICAgICAgICBBVURJT19TRVJWSUNFLAorICAgICAgICAgICAgTUVESUFfUk9VVEVSX1NFUlZJQ0UsCisgICAgICAgICAgICBURUxFUEhPTllfU0VSVklDRSwKKyAgICAgICAgICAgIENMSVBCT0FSRF9TRVJWSUNFLAorICAgICAgICAgICAgSU5QVVRfTUVUSE9EX1NFUlZJQ0UsCisgICAgICAgICAgICBURVhUX1NFUlZJQ0VTX01BTkFHRVJfU0VSVklDRSwKKyAgICAgICAgICAgIC8vQGhpZGU6IEFQUFdJREdFVF9TRVJWSUNFLAorICAgICAgICAgICAgLy9AaGlkZTogQkFDS1VQX1NFUlZJQ0UsCisgICAgICAgICAgICBEUk9QQk9YX1NFUlZJQ0UsCisgICAgICAgICAgICBERVZJQ0VfUE9MSUNZX1NFUlZJQ0UsCisgICAgICAgICAgICBVSV9NT0RFX1NFUlZJQ0UsCisgICAgICAgICAgICBET1dOTE9BRF9TRVJWSUNFLAorICAgICAgICAgICAgTkZDX1NFUlZJQ0UsCisgICAgICAgICAgICBCTFVFVE9PVEhfU0VSVklDRSwKKyAgICAgICAgICAgIC8vQGhpZGU6IFNJUF9TRVJWSUNFLAorICAgICAgICAgICAgVVNCX1NFUlZJQ0UsCisgICAgICAgICAgICAvL0BoaWRlOiBTRVJJQUxfU0VSVklDRSwKKyAgICAgICAgICAgIElOUFVUX1NFUlZJQ0UsCisgICAgICAgICAgICBESVNQTEFZX1NFUlZJQ0UsCisgICAgICAgICAgICAvL0BoaWRlOiBTQ0hFRFVMSU5HX1BPTElDWV9TRVJWSUNFLAorICAgICAgICAgICAgVVNFUl9TRVJWSUNFLAorICAgICAgICAgICAgLy9AaGlkZTogQVBQX09QU19TRVJWSUNFCisgICAgICAgICAgICBDQU1FUkFfU0VSVklDRSwKKyAgICAgICAgICAgIFBSSU5UX1NFUlZJQ0UKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBTZXJ2aWNlTmFtZSB7fQogCiAgICAgLyoqCiAgICAgICogUmV0dXJuIHRoZSBoYW5kbGUgdG8gYSBzeXN0ZW0tbGV2ZWwgc2VydmljZSBieSBuYW1lLiBUaGUgY2xhc3Mgb2YgdGhlCkBAIC0xOTk1LDcgKzIwODAsNyBAQAogICAgICAqIEBzZWUgI0RPV05MT0FEX1NFUlZJQ0UKICAgICAgKiBAc2VlIGFuZHJvaWQuYXBwLkRvd25sb2FkTWFuYWdlcgogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBPYmplY3QgZ2V0U3lzdGVtU2VydmljZShTdHJpbmcgbmFtZSk7CisgICAgcHVibGljIGFic3RyYWN0IE9iamVjdCBnZXRTeXN0ZW1TZXJ2aWNlKEBTZXJ2aWNlTmFtZSBATm9uTnVsbCBTdHJpbmcgbmFtZSk7CiAKICAgICAvKioKICAgICAgKiBVc2Ugd2l0aCB7QGxpbmsgI2dldFN5c3RlbVNlcnZpY2V9IHRvIHJldHJpZXZlIGEKQEAgLTI0MzEsNyArMjUxNiw2IEBACiAgICAgICoKICAgICAgKiBAc2VlICNnZXRTeXN0ZW1TZXJ2aWNlCiAgICAgICogQHNlZSBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWFuYWdlcgotICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FNRVJBX1NFUlZJQ0UgPSAiY2FtZXJhIjsKIApAQCAtMjQ3MCw3ICsyNTU0LDggQEAKICAgICAgKiBAc2VlIFBhY2thZ2VNYW5hZ2VyI2NoZWNrUGVybWlzc2lvbihTdHJpbmcsIFN0cmluZykKICAgICAgKiBAc2VlICNjaGVja0NhbGxpbmdQZXJtaXNzaW9uCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGludCBjaGVja1Blcm1pc3Npb24oU3RyaW5nIHBlcm1pc3Npb24sIGludCBwaWQsIGludCB1aWQpOworICAgIEBQYWNrYWdlTWFuYWdlci5QZXJtaXNzaW9uUmVzdWx0CisgICAgcHVibGljIGFic3RyYWN0IGludCBjaGVja1Blcm1pc3Npb24oQE5vbk51bGwgU3RyaW5nIHBlcm1pc3Npb24sIGludCBwaWQsIGludCB1aWQpOwogCiAgICAgLyoqCiAgICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNhbGxpbmcgcHJvY2VzcyBvZiBhbiBJUEMgeW91IGFyZSBoYW5kbGluZyBoYXMgYmVlbgpAQCAtMjQ5Myw3ICsyNTc4LDggQEAKICAgICAgKiBAc2VlICNjaGVja1Blcm1pc3Npb24KICAgICAgKiBAc2VlICNjaGVja0NhbGxpbmdPclNlbGZQZXJtaXNzaW9uCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGludCBjaGVja0NhbGxpbmdQZXJtaXNzaW9uKFN0cmluZyBwZXJtaXNzaW9uKTsKKyAgICBAUGFja2FnZU1hbmFnZXIuUGVybWlzc2lvblJlc3VsdAorICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2hlY2tDYWxsaW5nUGVybWlzc2lvbihATm9uTnVsbCBTdHJpbmcgcGVybWlzc2lvbik7CiAKICAgICAvKioKICAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgY2FsbGluZyBwcm9jZXNzIG9mIGFuIElQQyA8ZW0+b3IgeW91PC9lbT4gaGF2ZSBiZWVuCkBAIC0yNTExLDcgKzI1OTcsOCBAQAogICAgICAqIEBzZWUgI2NoZWNrUGVybWlzc2lvbgogICAgICAqIEBzZWUgI2NoZWNrQ2FsbGluZ1Blcm1pc3Npb24KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNoZWNrQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oU3RyaW5nIHBlcm1pc3Npb24pOworICAgIEBQYWNrYWdlTWFuYWdlci5QZXJtaXNzaW9uUmVzdWx0CisgICAgcHVibGljIGFic3RyYWN0IGludCBjaGVja0NhbGxpbmdPclNlbGZQZXJtaXNzaW9uKEBOb25OdWxsIFN0cmluZyBwZXJtaXNzaW9uKTsKIAogICAgIC8qKgogICAgICAqIElmIHRoZSBnaXZlbiBwZXJtaXNzaW9uIGlzIG5vdCBhbGxvd2VkIGZvciBhIHBhcnRpY3VsYXIgcHJvY2VzcwpAQCAtMjUyNiw3ICsyNjEzLDcgQEAKICAgICAgKiBAc2VlICNjaGVja1Blcm1pc3Npb24oU3RyaW5nLCBpbnQsIGludCkKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBlbmZvcmNlUGVybWlzc2lvbigKLSAgICAgICAgICAgIFN0cmluZyBwZXJtaXNzaW9uLCBpbnQgcGlkLCBpbnQgdWlkLCBTdHJpbmcgbWVzc2FnZSk7CisgICAgICAgICAgICBATm9uTnVsbCBTdHJpbmcgcGVybWlzc2lvbiwgaW50IHBpZCwgaW50IHVpZCwgQE51bGxhYmxlIFN0cmluZyBtZXNzYWdlKTsKIAogICAgIC8qKgogICAgICAqIElmIHRoZSBjYWxsaW5nIHByb2Nlc3Mgb2YgYW4gSVBDIHlvdSBhcmUgaGFuZGxpbmcgaGFzIG5vdCBiZWVuCkBAIC0yNTQ3LDcgKzI2MzQsNyBAQAogICAgICAqIEBzZWUgI2NoZWNrQ2FsbGluZ1Blcm1pc3Npb24oU3RyaW5nKQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbigKLSAgICAgICAgICAgIFN0cmluZyBwZXJtaXNzaW9uLCBTdHJpbmcgbWVzc2FnZSk7CisgICAgICAgICAgICBATm9uTnVsbCBTdHJpbmcgcGVybWlzc2lvbiwgQE51bGxhYmxlIFN0cmluZyBtZXNzYWdlKTsKIAogICAgIC8qKgogICAgICAqIElmIG5laXRoZXIgeW91IG5vciB0aGUgY2FsbGluZyBwcm9jZXNzIG9mIGFuIElQQyB5b3UgYXJlCkBAIC0yNTYzLDcgKzI2NTAsNyBAQAogICAgICAqIEBzZWUgI2NoZWNrQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oU3RyaW5nKQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbigKLSAgICAgICAgICAgIFN0cmluZyBwZXJtaXNzaW9uLCBTdHJpbmcgbWVzc2FnZSk7CisgICAgICAgICAgICBATm9uTnVsbCBTdHJpbmcgcGVybWlzc2lvbiwgQE51bGxhYmxlIFN0cmluZyBtZXNzYWdlKTsKIAogICAgIC8qKgogICAgICAqIEdyYW50IHBlcm1pc3Npb24gdG8gYWNjZXNzIGEgc3BlY2lmaWMgVXJpIHRvIGFub3RoZXIgcGFja2FnZSwgcmVnYXJkbGVzcwpAQCAtMjU5OSw3ICsyNjg2LDcgQEAKICAgICAgKiBAc2VlICNyZXZva2VVcmlQZXJtaXNzaW9uCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZ3JhbnRVcmlQZXJtaXNzaW9uKFN0cmluZyB0b1BhY2thZ2UsIFVyaSB1cmksCi0gICAgICAgICAgICBpbnQgbW9kZUZsYWdzKTsKKyAgICAgICAgICAgIEBJbnRlbnQuR3JhbnRVcmlNb2RlIGludCBtb2RlRmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogUmVtb3ZlIGFsbCBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgYSBwYXJ0aWN1bGFyIGNvbnRlbnQgcHJvdmlkZXIgVXJpCkBAIC0yNjE4LDcgKzI3MDUsNyBAQAogICAgICAqCiAgICAgICogQHNlZSAjZ3JhbnRVcmlQZXJtaXNzaW9uCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgcmV2b2tlVXJpUGVybWlzc2lvbihVcmkgdXJpLCBpbnQgbW9kZUZsYWdzKTsKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZXZva2VVcmlQZXJtaXNzaW9uKFVyaSB1cmksIEBJbnRlbnQuR3JhbnRVcmlNb2RlIGludCBtb2RlRmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHByb2Nlc3MgYW5kIHVzZXIgSUQgaGFzIGJlZW4gZ3JhbnRlZApAQCAtMjY0MSw3ICsyNzI4LDggQEAKICAgICAgKgogICAgICAqIEBzZWUgI2NoZWNrQ2FsbGluZ1VyaVBlcm1pc3Npb24KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNoZWNrVXJpUGVybWlzc2lvbihVcmkgdXJpLCBpbnQgcGlkLCBpbnQgdWlkLCBpbnQgbW9kZUZsYWdzKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNoZWNrVXJpUGVybWlzc2lvbihVcmkgdXJpLCBpbnQgcGlkLCBpbnQgdWlkLAorICAgICAgICAgICAgQEludGVudC5HcmFudFVyaU1vZGUgaW50IG1vZGVGbGFncyk7CiAKICAgICAvKioKICAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgY2FsbGluZyBwcm9jZXNzIGFuZCB1c2VyIElEIGhhcyBiZWVuCkBAIC0yNjY0LDcgKzI3NTIsNyBAQAogICAgICAqCiAgICAgICogQHNlZSAjY2hlY2tVcmlQZXJtaXNzaW9uKFVyaSwgaW50LCBpbnQsIGludCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNoZWNrQ2FsbGluZ1VyaVBlcm1pc3Npb24oVXJpIHVyaSwgaW50IG1vZGVGbGFncyk7CisgICAgcHVibGljIGFic3RyYWN0IGludCBjaGVja0NhbGxpbmdVcmlQZXJtaXNzaW9uKFVyaSB1cmksIEBJbnRlbnQuR3JhbnRVcmlNb2RlIGludCBtb2RlRmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNhbGxpbmcgcHJvY2VzcyBvZiBhbiBJUEMgPGVtPm9yIHlvdTwvZW0+IGhhcyBiZWVuIGdyYW50ZWQKQEAgLTI2ODMsNyArMjc3MSw4IEBACiAgICAgICoKICAgICAgKiBAc2VlICNjaGVja0NhbGxpbmdVcmlQZXJtaXNzaW9uCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGludCBjaGVja0NhbGxpbmdPclNlbGZVcmlQZXJtaXNzaW9uKFVyaSB1cmksIGludCBtb2RlRmxhZ3MpOworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2hlY2tDYWxsaW5nT3JTZWxmVXJpUGVybWlzc2lvbihVcmkgdXJpLAorICAgICAgICAgICAgQEludGVudC5HcmFudFVyaU1vZGUgaW50IG1vZGVGbGFncyk7CiAKICAgICAvKioKICAgICAgKiBDaGVjayBib3RoIGEgVXJpIGFuZCBub3JtYWwgcGVybWlzc2lvbi4gIFRoaXMgYWxsb3dzIHlvdSB0byBwZXJmb3JtCkBAIC0yNjk1LDcgKzI3ODQsNyBAQAogICAgICAqIEBwYXJhbSByZWFkUGVybWlzc2lvbiBUaGUgcGVybWlzc2lvbiB0aGF0IHByb3ZpZGVzIG92ZXJhbGwgcmVhZCBhY2Nlc3MsCiAgICAgICogb3IgbnVsbCB0byBub3QgZG8gdGhpcyBjaGVjay4KICAgICAgKiBAcGFyYW0gd3JpdGVQZXJtaXNzaW9uIFRoZSBwZXJtaXNzaW9uIHRoYXQgcHJvdmlkZXMgb3ZlcmFsbCB3cml0ZQotICAgICAqIGFjZXNzLCBvciBudWxsIHRvIG5vdCBkbyB0aGlzIGNoZWNrLgorICAgICAqIGFjY2Vzcywgb3IgbnVsbCB0byBub3QgZG8gdGhpcyBjaGVjay4KICAgICAgKiBAcGFyYW0gcGlkIFRoZSBwcm9jZXNzIElEIGJlaW5nIGNoZWNrZWQgYWdhaW5zdC4gIE11c3QgYmUgJmd0OyAwLgogICAgICAqIEBwYXJhbSB1aWQgVGhlIHVzZXIgSUQgYmVpbmcgY2hlY2tlZCBhZ2FpbnN0LiAgQSB1aWQgb2YgMCBpcyB0aGUgcm9vdAogICAgICAqIHVzZXIsIHdoaWNoIHdpbGwgcGFzcyBldmVyeSBwZXJtaXNzaW9uIGNoZWNrLgpAQCAtMjcwNyw4ICsyNzk2LDkgQEAKICAgICAgKiBpcyBhbGxvd2VkIHRvIGFjY2VzcyB0aGF0IHVyaSBvciBob2xkcyBvbmUgb2YgdGhlIGdpdmVuIHBlcm1pc3Npb25zLCBvcgogICAgICAqIHtAbGluayBQYWNrYWdlTWFuYWdlciNQRVJNSVNTSU9OX0RFTklFRH0gaWYgaXQgaXMgbm90LgogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2hlY2tVcmlQZXJtaXNzaW9uKFVyaSB1cmksIFN0cmluZyByZWFkUGVybWlzc2lvbiwKLSAgICAgICAgICAgIFN0cmluZyB3cml0ZVBlcm1pc3Npb24sIGludCBwaWQsIGludCB1aWQsIGludCBtb2RlRmxhZ3MpOworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2hlY2tVcmlQZXJtaXNzaW9uKEBOdWxsYWJsZSBVcmkgdXJpLCBATnVsbGFibGUgU3RyaW5nIHJlYWRQZXJtaXNzaW9uLAorICAgICAgICAgICAgQE51bGxhYmxlIFN0cmluZyB3cml0ZVBlcm1pc3Npb24sIGludCBwaWQsIGludCB1aWQsCisgICAgICAgICAgICBASW50ZW50LkdyYW50VXJpTW9kZSBpbnQgbW9kZUZsYWdzKTsKIAogICAgIC8qKgogICAgICAqIElmIGEgcGFydGljdWxhciBwcm9jZXNzIGFuZCB1c2VyIElEIGhhcyBub3QgYmVlbiBncmFudGVkCkBAIC0yNzMwLDcgKzI4MjAsNyBAQAogICAgICAqIEBzZWUgI2NoZWNrVXJpUGVybWlzc2lvbihVcmksIGludCwgaW50LCBpbnQpCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZW5mb3JjZVVyaVBlcm1pc3Npb24oCi0gICAgICAgICAgICBVcmkgdXJpLCBpbnQgcGlkLCBpbnQgdWlkLCBpbnQgbW9kZUZsYWdzLCBTdHJpbmcgbWVzc2FnZSk7CisgICAgICAgICAgICBVcmkgdXJpLCBpbnQgcGlkLCBpbnQgdWlkLCBASW50ZW50LkdyYW50VXJpTW9kZSBpbnQgbW9kZUZsYWdzLCBTdHJpbmcgbWVzc2FnZSk7CiAKICAgICAvKioKICAgICAgKiBJZiB0aGUgY2FsbGluZyBwcm9jZXNzIGFuZCB1c2VyIElEIGhhcyBub3QgYmVlbiBncmFudGVkCkBAIC0yNzUyLDcgKzI4NDIsNyBAQAogICAgICAqIEBzZWUgI2NoZWNrQ2FsbGluZ1VyaVBlcm1pc3Npb24oVXJpLCBpbnQpCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZW5mb3JjZUNhbGxpbmdVcmlQZXJtaXNzaW9uKAotICAgICAgICAgICAgVXJpIHVyaSwgaW50IG1vZGVGbGFncywgU3RyaW5nIG1lc3NhZ2UpOworICAgICAgICAgICAgVXJpIHVyaSwgQEludGVudC5HcmFudFVyaU1vZGUgaW50IG1vZGVGbGFncywgU3RyaW5nIG1lc3NhZ2UpOwogCiAgICAgLyoqCiAgICAgICogSWYgdGhlIGNhbGxpbmcgcHJvY2VzcyBvZiBhbiBJUEMgPGVtPm9yIHlvdTwvZW0+IGhhcyBub3QgYmVlbgpAQCAtMjc3MSw3ICsyODYxLDcgQEAKICAgICAgKiBAc2VlICNjaGVja0NhbGxpbmdPclNlbGZVcmlQZXJtaXNzaW9uKFVyaSwgaW50KQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGVuZm9yY2VDYWxsaW5nT3JTZWxmVXJpUGVybWlzc2lvbigKLSAgICAgICAgICAgIFVyaSB1cmksIGludCBtb2RlRmxhZ3MsIFN0cmluZyBtZXNzYWdlKTsKKyAgICAgICAgICAgIFVyaSB1cmksIEBJbnRlbnQuR3JhbnRVcmlNb2RlIGludCBtb2RlRmxhZ3MsIFN0cmluZyBtZXNzYWdlKTsKIAogICAgIC8qKgogICAgICAqIEVuZm9yY2UgYm90aCBhIFVyaSBhbmQgbm9ybWFsIHBlcm1pc3Npb24uICBUaGlzIGFsbG93cyB5b3UgdG8gcGVyZm9ybQpAQCAtMjc4Myw3ICsyODczLDcgQEAKICAgICAgKiBAcGFyYW0gcmVhZFBlcm1pc3Npb24gVGhlIHBlcm1pc3Npb24gdGhhdCBwcm92aWRlcyBvdmVyYWxsIHJlYWQgYWNjZXNzLAogICAgICAqIG9yIG51bGwgdG8gbm90IGRvIHRoaXMgY2hlY2suCiAgICAgICogQHBhcmFtIHdyaXRlUGVybWlzc2lvbiBUaGUgcGVybWlzc2lvbiB0aGF0IHByb3ZpZGVzIG92ZXJhbGwgd3JpdGUKLSAgICAgKiBhY2Vzcywgb3IgbnVsbCB0byBub3QgZG8gdGhpcyBjaGVjay4KKyAgICAgKiBhY2Nlc3MsIG9yIG51bGwgdG8gbm90IGRvIHRoaXMgY2hlY2suCiAgICAgICogQHBhcmFtIHBpZCBUaGUgcHJvY2VzcyBJRCBiZWluZyBjaGVja2VkIGFnYWluc3QuICBNdXN0IGJlICZndDsgMC4KICAgICAgKiBAcGFyYW0gdWlkIFRoZSB1c2VyIElEIGJlaW5nIGNoZWNrZWQgYWdhaW5zdC4gIEEgdWlkIG9mIDAgaXMgdGhlIHJvb3QKICAgICAgKiB1c2VyLCB3aGljaCB3aWxsIHBhc3MgZXZlcnkgcGVybWlzc2lvbiBjaGVjay4KQEAgLTI3OTUsOCArMjg4NSwxNSBAQAogICAgICAqIEBzZWUgI2NoZWNrVXJpUGVybWlzc2lvbihVcmksIFN0cmluZywgU3RyaW5nLCBpbnQsIGludCwgaW50KQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGVuZm9yY2VVcmlQZXJtaXNzaW9uKAotICAgICAgICAgICAgVXJpIHVyaSwgU3RyaW5nIHJlYWRQZXJtaXNzaW9uLCBTdHJpbmcgd3JpdGVQZXJtaXNzaW9uLAotICAgICAgICAgICAgaW50IHBpZCwgaW50IHVpZCwgaW50IG1vZGVGbGFncywgU3RyaW5nIG1lc3NhZ2UpOworICAgICAgICAgICAgQE51bGxhYmxlIFVyaSB1cmksIEBOdWxsYWJsZSBTdHJpbmcgcmVhZFBlcm1pc3Npb24sCisgICAgICAgICAgICBATnVsbGFibGUgU3RyaW5nIHdyaXRlUGVybWlzc2lvbiwgaW50IHBpZCwgaW50IHVpZCwgQEludGVudC5HcmFudFVyaU1vZGUgaW50IG1vZGVGbGFncywKKyAgICAgICAgICAgIEBOdWxsYWJsZSBTdHJpbmcgbWVzc2FnZSk7CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLAorICAgICAgICAgICAgdmFsdWUgPSB7Q09OVEVYVF9JTkNMVURFX0NPREUsIENPTlRFWFRfSUdOT1JFX1NFQ1VSSVRZLCBDT05URVhUX1JFU1RSSUNURUR9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBDcmVhdGVQYWNrYWdlT3B0aW9ucyB7fQogCiAgICAgLyoqCiAgICAgICogRmxhZyBmb3IgdXNlIHdpdGgge0BsaW5rICNjcmVhdGVQYWNrYWdlQ29udGV4dH06IGluY2x1ZGUgdGhlIGFwcGxpY2F0aW9uCkBAIC0yODU0LDcgKzI5NTEsNyBAQAogICAgICAqIHRoZSBnaXZlbiBwYWNrYWdlIG5hbWUuCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IENvbnRleHQgY3JlYXRlUGFja2FnZUNvbnRleHQoU3RyaW5nIHBhY2thZ2VOYW1lLAotICAgICAgICAgICAgaW50IGZsYWdzKSB0aHJvd3MgUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworICAgICAgICAgICAgQENyZWF0ZVBhY2thZ2VPcHRpb25zIGludCBmbGFncykgdGhyb3dzIFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFNpbWlsYXIgdG8ge0BsaW5rICNjcmVhdGVQYWNrYWdlQ29udGV4dChTdHJpbmcsIGludCl9LCBidXQgd2l0aCBhCkBAIC0yODkwLDcgKzI5ODcsOCBAQAogICAgICAqCiAgICAgICogQHJldHVybiBBIHtAbGluayBDb250ZXh0fSB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIG92ZXJyaWRlLgogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBDb250ZXh0IGNyZWF0ZUNvbmZpZ3VyYXRpb25Db250ZXh0KENvbmZpZ3VyYXRpb24gb3ZlcnJpZGVDb25maWd1cmF0aW9uKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgQ29udGV4dCBjcmVhdGVDb25maWd1cmF0aW9uQ29udGV4dCgKKyAgICAgICAgICAgIEBOb25OdWxsIENvbmZpZ3VyYXRpb24gb3ZlcnJpZGVDb25maWd1cmF0aW9uKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybiBhIG5ldyBDb250ZXh0IG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgQ29udGV4dCBidXQgd2hvc2UgcmVzb3VyY2VzCkBAIC0yOTEwLDcgKzMwMDgsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBBIHtAbGluayBDb250ZXh0fSBmb3IgdGhlIGRpc3BsYXkuCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IENvbnRleHQgY3JlYXRlRGlzcGxheUNvbnRleHQoRGlzcGxheSBkaXNwbGF5KTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgQ29udGV4dCBjcmVhdGVEaXNwbGF5Q29udGV4dChATm9uTnVsbCBEaXNwbGF5IGRpc3BsYXkpOwogCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGlzcGxheSBhZGp1c3RtZW50cyBob2xkZXIgZm9yIHRoaXMgY29udGV4dC4gIFRoaXMgaW5mb3JtYXRpb24KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGV4dFdyYXBwZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGV4dFdyYXBwZXIuamF2YQppbmRleCBhNzA4ZGFkLi45M2Y2Y2RmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRleHRXcmFwcGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZXh0V3JhcHBlci5qYXZhCkBAIC0xNiw5ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5jb250ZW50OwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyTmF0aXZlOwotaW1wb3J0IGFuZHJvaWQuYXBwLkxvYWRlZEFwazsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0TWFuYWdlcjsKQEAgLTMzLDcgKzMwLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5QWRqdXN0bWVudHM7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0N1cnNvckxvYWRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9DdXJzb3JMb2FkZXIuamF2YQppbmRleCA1ZDdkNjc3Li5jNzg4NzFjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0N1cnNvckxvYWRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ3Vyc29yTG9hZGVyLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQ7CiAKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5DYW5jZWxsYXRpb25TaWduYWw7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0VudGl0eS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9FbnRpdHkuamF2YQppbmRleCA3ODQyZGUwLi42MDdjYjNmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0VudGl0eS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvRW50aXR5LmphdmEKQEAgLTE2LDEwICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5jb250ZW50OwogCi1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JQW5vbnltb3VzU3luY0FkYXB0ZXIuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSUFub255bW91c1N5bmNBZGFwdGVyLmFpZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MGNlYTMuLjAwMDAwMDAKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JQW5vbnltb3VzU3luY0FkYXB0ZXIuYWlkbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuY29udGVudDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSVN5bmNDb250ZXh0OwotCi0vKioKLSAqIEludGVyZmFjZSB0byBkZWZpbmUgYW4gYW5vbnltb3VzIHNlcnZpY2UgdGhhdCBpcyBleHRlbmRlZCBieSBkZXZlbG9wZXJzCi0gKiBpbiBvcmRlciB0byBwZXJmb3JtIGFub255bW91cyBzeW5jcyAoc3luY3Mgd2l0aG91dCBhbiBBY2NvdW50IG9yIENvbnRlbnQKLSAqIFByb3ZpZGVyIHNwZWNpZmllZCkuIFNlZSB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkFic3RyYWN0VGhyZWFkZWRTeW5jQWRhcHRlcn0uCi0gKiB7QGhpZGV9Ci0gKi8KLW9uZXdheSBpbnRlcmZhY2UgSUFub255bW91c1N5bmNBZGFwdGVyIHsKLQotICAgIC8qKgotICAgICAqIEluaXRpYXRlIGEgc3luYy4gU3luY0FkYXB0ZXItc3BlY2lmaWMgcGFyYW1ldGVycyBtYXkgYmUgc3BlY2lmaWVkIGluCi0gICAgICogZXh0cmFzLCB3aGljaCBpcyBndWFyYW50ZWVkIHRvIG5vdCBiZSBudWxsLgotICAgICAqCi0gICAgICogQHBhcmFtIHN5bmNDb250ZXh0IHRoZSBJU3luY0NvbnRleHQgdXNlZCB0byBpbmRpY2F0ZSB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHN5bmMuIFdoZW4KLSAgICAgKiAgIHRoZSBzeW5jIGlzIGZpbmlzaGVkIChzdWNjZXNzZnVsbHkgb3Igbm90KSBJU3luY0NvbnRleHQub25GaW5pc2hlZCgpIG11c3QgYmUgY2FsbGVkLgotICAgICAqIEBwYXJhbSBleHRyYXMgU3luY0FkYXB0ZXItc3BlY2lmaWMgcGFyYW1ldGVycy4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc3RhcnRTeW5jKElTeW5jQ29udGV4dCBzeW5jQ29udGV4dCwgaW4gQnVuZGxlIGV4dHJhcyk7Ci0KLSAgICAvKioKLSAgICAgKiBDYW5jZWwgdGhlIGN1cnJlbnRseSBvbmdvaW5nIHN5bmMuCi0gICAgICovCi0gICAgdm9pZCBjYW5jZWxTeW5jKElTeW5jQ29udGV4dCBzeW5jQ29udGV4dCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSUNvbnRlbnRTZXJ2aWNlLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0lDb250ZW50U2VydmljZS5haWRsCmluZGV4IDlhZDVhMTkuLjczYTc2ZTggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSUNvbnRlbnRTZXJ2aWNlLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JQ29udGVudFNlcnZpY2UuYWlkbApAQCAtMTcsNiArMTcsNyBAQAogcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQ7CiAKIGltcG9ydCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlN5bmNJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JU3luY1N0YXR1c09ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TeW5jQWRhcHRlclR5cGU7CkBAIC01NSw4ICs1NiwxNCBAQAogICAgICAgICAgICAgaW50IHVzZXJIYW5kbGUpOwogCiAgICAgdm9pZCByZXF1ZXN0U3luYyhpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHksIGluIEJ1bmRsZSBleHRyYXMpOworICAgIC8qKgorICAgICAqIFN0YXJ0IGEgc3luYyBnaXZlbiBhIHJlcXVlc3QuCisgICAgICovCiAgICAgdm9pZCBzeW5jKGluIFN5bmNSZXF1ZXN0IHJlcXVlc3QpOwotICAgIHZvaWQgY2FuY2VsU3luYyhpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpOworICAgIHZvaWQgY2FuY2VsU3luYyhpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHksIGluIENvbXBvbmVudE5hbWUgY25hbWUpOworCisgICAgLyoqIENhbmNlbCBhIHN5bmMsIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3luYyB0byBiZSBjYW5jZWxsZWQuICovCisgICAgIHZvaWQgY2FuY2VsUmVxdWVzdChpbiBTeW5jUmVxdWVzdCByZXF1ZXN0KTsKIAogICAgIC8qKgogICAgICAqIENoZWNrIGlmIHRoZSBwcm92aWRlciBzaG91bGQgYmUgc3luY2VkIHdoZW4gYSBuZXR3b3JrIHRpY2tsZSBpcyByZWNlaXZlZApAQCAtNzQsMTIgKzgxLDE0IEBACiAgICAgdm9pZCBzZXRTeW5jQXV0b21hdGljYWxseShpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBwcm92aWRlck5hbWUsIGJvb2xlYW4gc3luYyk7CiAKICAgICAvKioKLSAgICAgKiBHZXQgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgcGVyaW9kaWMgcG9sbCwgaWYgYW55LgotICAgICAqIEBwYXJhbSBwcm92aWRlck5hbWUgdGhlIHByb3ZpZGVyIHdob3NlIHNldHRpbmcgd2UgYXJlIHF1ZXJ5aW5nCi0gICAgICogQHJldHVybiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBwZXJpb2RpYyBzeW5jIGluIHNlY29uZHMuIElmIDAgdGhlbiBubyBwZXJpb2RpYyBzeW5jcwotICAgICAqIHdpbGwgdGFrZSBwbGFjZS4KKyAgICAgKiBHZXQgYSBsaXN0IG9mIHBlcmlvZGljIG9wZXJhdGlvbnMgZm9yIGEgc3BlY2lmaWVkIGF1dGhvcml0eSwgb3Igc2VydmljZS4KKyAgICAgKiBAcGFyYW0gYWNjb3VudCBhY2NvdW50IGZvciBhdXRob3JpdHksIG11c3QgYmUgbnVsbCBpZiBjbmFtZSBpcyBub24tbnVsbC4KKyAgICAgKiBAcGFyYW0gcHJvdmlkZXJOYW1lIG5hbWUgb2YgcHJvdmlkZXIsIG11c3QgYmUgbnVsbCBpZiBjbmFtZSBpcyBub24tbnVsbC4KKyAgICAgKiBAcGFyYW0gY25hbWUgY29tcG9uZW50IHRvIGlkZW50aWZ5IHN5bmMgc2VydmljZSwgbXVzdCBiZSBudWxsIGlmIGFjY291bnQvcHJvdmlkZXJOYW1lIGFyZQorICAgICAqIG5vbi1udWxsLgogICAgICAqLwotICAgIExpc3Q8UGVyaW9kaWNTeW5jPiBnZXRQZXJpb2RpY1N5bmNzKGluIEFjY291bnQgYWNjb3VudCwgU3RyaW5nIHByb3ZpZGVyTmFtZSk7CisgICAgTGlzdDxQZXJpb2RpY1N5bmM+IGdldFBlcmlvZGljU3luY3MoaW4gQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgcHJvdmlkZXJOYW1lLAorICAgICAgICBpbiBDb21wb25lbnROYW1lIGNuYW1lKTsKIAogICAgIC8qKgogICAgICAqIFNldCB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZXIgaXMgdG8gYmUgc3luY2VkIG9uIGEgcGVyaW9kaWMgYmFzaXMuCkBAIC0xMTIsMTYgKzEyMSwyMyBAQAogICAgICAqLwogICAgIHZvaWQgc2V0SXNTeW5jYWJsZShpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBwcm92aWRlck5hbWUsIGludCBzeW5jYWJsZSk7CiAKKyAgICAvKioKKyAgICAgKiBDb3JyZXNwb25kcyByb3VnaGx5IHRvIHNldElzU3luY2FibGUoU3RyaW5nIGFjY291bnQsIFN0cmluZyBwcm92aWRlcikgZm9yIHN5bmNzIHRoYXQgYmluZAorICAgICAqIHRvIGEgU3luY1NlcnZpY2UuCisgICAgICovCisgICAgdm9pZCBzZXRTZXJ2aWNlQWN0aXZlKGluIENvbXBvbmVudE5hbWUgY25hbWUsIGJvb2xlYW4gYWN0aXZlKTsKKworICAgIC8qKgorICAgICAqIENvcnJlc3BvbmRzIHJvdWdobHkgdG8gZ2V0SXNTeW5jYWJsZShTdHJpbmcgYWNjb3VudCwgU3RyaW5nIHByb3ZpZGVyKSBmb3Igc3luY3MgdGhhdCBiaW5kCisgICAgICogdG8gYSBTeW5jU2VydmljZS4KKyAgICAgKiBAcmV0dXJuIDAgaWYgdGhpcyBTeW5jU2VydmljZSBpcyBub3QgZW5hYmxlZCwgMSBpZiBlbmFibGVkLCA8MCBpZiB1bmtub3duLgorICAgICAqLworICAgIGJvb2xlYW4gaXNTZXJ2aWNlQWN0aXZlKGluIENvbXBvbmVudE5hbWUgY25hbWUpOworCiAgICAgdm9pZCBzZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseShib29sZWFuIGZsYWcpOwogCiAgICAgYm9vbGVhbiBnZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseSgpOwogCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHN5bmMgb3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4KLSAgICAgKiBhY2NvdW50IG9yIGF1dGhvcml0eSBpbiB0aGUgcGVuZGluZyBsaXN0LCBvciBhY3RpdmVseSBiZWluZyBwcm9jZXNzZWQuCi0gICAgICovCi0gICAgYm9vbGVhbiBpc1N5bmNBY3RpdmUoaW4gQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5KTsKLQogICAgIExpc3Q8U3luY0luZm8+IGdldEN1cnJlbnRTeW5jcygpOwogCiAgICAgLyoqCkBAIC0xMzEsMTcgKzE0NywzMyBAQAogICAgIFN5bmNBZGFwdGVyVHlwZVtdIGdldFN5bmNBZGFwdGVyVHlwZXMoKTsKIAogICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBjdXJyZW50bHkgYSBvcGVyYXRpb24gZm9yIHRoZSBnaXZlbiBhY2NvdW50L2F1dGhvcml0eSBvciBzZXJ2aWNlCisgICAgICogYWN0aXZlbHkgYmVpbmcgcHJvY2Vzc2VkLgorICAgICAqIEBwYXJhbSBhY2NvdW50IGFjY291bnQgZm9yIGF1dGhvcml0eSwgbXVzdCBiZSBudWxsIGlmIGNuYW1lIGlzIG5vbi1udWxsLgorICAgICAqIEBwYXJhbSBwcm92aWRlck5hbWUgbmFtZSBvZiBwcm92aWRlciwgbXVzdCBiZSBudWxsIGlmIGNuYW1lIGlzIG5vbi1udWxsLgorICAgICAqIEBwYXJhbSBjbmFtZSBjb21wb25lbnQgdG8gaWRlbnRpZnkgc3luYyBzZXJ2aWNlLCBtdXN0IGJlIG51bGwgaWYgYWNjb3VudC9wcm92aWRlck5hbWUgYXJlCisgICAgICogbm9uLW51bGwuCisgICAgICovCisgICAgYm9vbGVhbiBpc1N5bmNBY3RpdmUoaW4gQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBpbiBDb21wb25lbnROYW1lIGNuYW1lKTsKKworICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHN0YXR1cyB0aGF0IG1hdGNoZXMgdGhlIGF1dGhvcml0eS4gSWYgdGhlcmUgYXJlIG11bHRpcGxlcyBhY2NvdW50cyBmb3IKICAgICAgKiB0aGUgYXV0aG9yaXR5LCB0aGUgb25lIHdpdGggdGhlIGxhdGVzdCAibGFzdFN1Y2Nlc3NUaW1lIiBzdGF0dXMgaXMgcmV0dXJuZWQuCi0gICAgICogQHBhcmFtIGF1dGhvcml0eSB0aGUgYXV0aG9yaXR5IHdob3NlIHJvdyBzaG91bGQgYmUgc2VsZWN0ZWQKLSAgICAgKiBAcmV0dXJuIHRoZSBTeW5jU3RhdHVzSW5mbyBmb3IgdGhlIGF1dGhvcml0eSwgb3IgbnVsbCBpZiBub25lIGV4aXN0cworICAgICAqIEBwYXJhbSBhY2NvdW50IGFjY291bnQgZm9yIGF1dGhvcml0eSwgbXVzdCBiZSBudWxsIGlmIGNuYW1lIGlzIG5vbi1udWxsLgorICAgICAqIEBwYXJhbSBwcm92aWRlck5hbWUgbmFtZSBvZiBwcm92aWRlciwgbXVzdCBiZSBudWxsIGlmIGNuYW1lIGlzIG5vbi1udWxsLgorICAgICAqIEBwYXJhbSBjbmFtZSBjb21wb25lbnQgdG8gaWRlbnRpZnkgc3luYyBzZXJ2aWNlLCBtdXN0IGJlIG51bGwgaWYgYWNjb3VudC9wcm92aWRlck5hbWUgYXJlCisgICAgICogbm9uLW51bGwuCiAgICAgICovCi0gICAgU3luY1N0YXR1c0luZm8gZ2V0U3luY1N0YXR1cyhpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpOworICAgIFN5bmNTdGF0dXNJbmZvIGdldFN5bmNTdGF0dXMoaW4gQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBpbiBDb21wb25lbnROYW1lIGNuYW1lKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwZW5kaW5nIHN0YXR1cyBpcyB0cnVlIG9mIGFueSBtYXRjaGluZyBhdXRob3JpdGllcy4KKyAgICAgKiBAcGFyYW0gYWNjb3VudCBhY2NvdW50IGZvciBhdXRob3JpdHksIG11c3QgYmUgbnVsbCBpZiBjbmFtZSBpcyBub24tbnVsbC4KKyAgICAgKiBAcGFyYW0gcHJvdmlkZXJOYW1lIG5hbWUgb2YgcHJvdmlkZXIsIG11c3QgYmUgbnVsbCBpZiBjbmFtZSBpcyBub24tbnVsbC4KKyAgICAgKiBAcGFyYW0gY25hbWUgY29tcG9uZW50IHRvIGlkZW50aWZ5IHN5bmMgc2VydmljZSwgbXVzdCBiZSBudWxsIGlmIGFjY291bnQvcHJvdmlkZXJOYW1lIGFyZQorICAgICAqIG5vbi1udWxsLgogICAgICAqLwotICAgIGJvb2xlYW4gaXNTeW5jUGVuZGluZyhpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpOworICAgIGJvb2xlYW4gaXNTeW5jUGVuZGluZyhpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHksIGluIENvbXBvbmVudE5hbWUgY25hbWUpOwogCiAgICAgdm9pZCBhZGRTdGF0dXNDaGFuZ2VMaXN0ZW5lcihpbnQgbWFzaywgSVN5bmNTdGF0dXNPYnNlcnZlciBjYWxsYmFjayk7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSVN5bmNTZXJ2aWNlQWRhcHRlci5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JU3luY1NlcnZpY2VBZGFwdGVyLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxOTMwNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSVN5bmNTZXJ2aWNlQWRhcHRlci5haWRsCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuY29udGVudDsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSVN5bmNDb250ZXh0OworCisvKioKKyAqIEludGVyZmFjZSB0byBkZWZpbmUgYW4gYW5vbnltb3VzIHNlcnZpY2UgdGhhdCBpcyBleHRlbmRlZCBieSBkZXZlbG9wZXJzCisgKiBpbiBvcmRlciB0byBwZXJmb3JtIGFub255bW91cyBzeW5jcyAoc3luY3Mgd2l0aG91dCBhbiBBY2NvdW50IG9yIENvbnRlbnQKKyAqIFByb3ZpZGVyIHNwZWNpZmllZCkuIFNlZSB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkFic3RyYWN0VGhyZWFkZWRTeW5jQWRhcHRlcn0uCisgKiB7QGhpZGV9CisgKi8KK29uZXdheSBpbnRlcmZhY2UgSVN5bmNTZXJ2aWNlQWRhcHRlciB7CisKKyAgICAvKioKKyAgICAgKiBJbml0aWF0ZSBhIHN5bmMuIFN5bmNBZGFwdGVyLXNwZWNpZmljIHBhcmFtZXRlcnMgbWF5IGJlIHNwZWNpZmllZCBpbgorICAgICAqIGV4dHJhcywgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBub3QgYmUgbnVsbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzeW5jQ29udGV4dCB0aGUgSVN5bmNDb250ZXh0IHVzZWQgdG8gaW5kaWNhdGUgdGhlIHByb2dyZXNzIG9mIHRoZSBzeW5jLiBXaGVuCisgICAgICogICB0aGUgc3luYyBpcyBmaW5pc2hlZCAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkgSVN5bmNDb250ZXh0Lm9uRmluaXNoZWQoKSBtdXN0IGJlIGNhbGxlZC4KKyAgICAgKiBAcGFyYW0gZXh0cmFzIFN5bmNBZGFwdGVyLXNwZWNpZmljIHBhcmFtZXRlcnMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIHN0YXJ0U3luYyhJU3luY0NvbnRleHQgc3luY0NvbnRleHQsIGluIEJ1bmRsZSBleHRyYXMpOworCisgICAgLyoqCisgICAgICogQ2FuY2VsIHRoZSBjdXJyZW50bHkgb25nb2luZyBzeW5jLgorICAgICAqLworICAgIHZvaWQgY2FuY2VsU3luYyhJU3luY0NvbnRleHQgc3luY0NvbnRleHQpOworCit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0ludGVudC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JbnRlbnQuamF2YQppbmRleCAzYzY2YjY4Li45ZjNiNjgyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0ludGVudC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50LmphdmEKQEAgLTIxLDYgKzIxLDcgQEAKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudDsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2RrQ29uc3RhbnQuU2RrQ29uc3RhbnRUeXBlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CkBAIC00NSw2ICs0Niw4IEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CiBpbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CkBAIC0zMzM1LDYgKzMzMzgsMTIgQEAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBJbnRlbnQgZmxhZ3MgKHNlZSBtRmxhZ3MgdmFyaWFibGUpLgogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwKKyAgICAgICAgICAgIHZhbHVlID0ge0ZMQUdfR1JBTlRfUkVBRF9VUklfUEVSTUlTU0lPTiwgRkxBR19HUkFOVF9XUklURV9VUklfUEVSTUlTU0lPTn0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIEdyYW50VXJpTW9kZSB7fQorCiAgICAgLyoqCiAgICAgICogSWYgc2V0LCB0aGUgcmVjaXBpZW50IG9mIHRoaXMgSW50ZW50IHdpbGwgYmUgZ3JhbnRlZCBwZXJtaXNzaW9uIHRvCiAgICAgICogcGVyZm9ybSByZWFkIG9wZXJhdGlvbnMgb24gdGhlIFVSSSBpbiB0aGUgSW50ZW50J3MgZGF0YSBhbmQgYW55IFVSSXMKQEAgLTYzNzQsNiArNjM4MywyMSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwKKyAgICAgICAgICAgIHZhbHVlID0geworICAgICAgICAgICAgICAgICAgICBGSUxMX0lOX0FDVElPTiwKKyAgICAgICAgICAgICAgICAgICAgRklMTF9JTl9EQVRBLAorICAgICAgICAgICAgICAgICAgICBGSUxMX0lOX0NBVEVHT1JJRVMsCisgICAgICAgICAgICAgICAgICAgIEZJTExfSU5fQ09NUE9ORU5ULAorICAgICAgICAgICAgICAgICAgICBGSUxMX0lOX1BBQ0tBR0UsCisgICAgICAgICAgICAgICAgICAgIEZJTExfSU5fU09VUkNFX0JPVU5EUywKKyAgICAgICAgICAgICAgICAgICAgRklMTF9JTl9TRUxFQ1RPUiwKKyAgICAgICAgICAgICAgICAgICAgRklMTF9JTl9DTElQX0RBVEEKKyAgICAgICAgICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIEZpbGxJbkZsYWdzIHt9CisKICAgICAvKioKICAgICAgKiBVc2Ugd2l0aCB7QGxpbmsgI2ZpbGxJbn0gdG8gYWxsb3cgdGhlIGN1cnJlbnQgYWN0aW9uIHZhbHVlIHRvIGJlCiAgICAgICogb3ZlcndyaXR0ZW4sIGV2ZW4gaWYgaXQgaXMgYWxyZWFkeSBzZXQuCkBAIC02NDY3LDEwICs2NDkxLDEyIEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBiaXQgbWFzayBvZiB7QGxpbmsgI0ZJTExfSU5fQUNUSU9OfSwKICAgICAgKiB7QGxpbmsgI0ZJTExfSU5fREFUQX0sIHtAbGluayAjRklMTF9JTl9DQVRFR09SSUVTfSwge0BsaW5rICNGSUxMX0lOX1BBQ0tBR0V9LAotICAgICAqIHtAbGluayAjRklMTF9JTl9DT01QT05FTlR9LCB7QGxpbmsgI0ZJTExfSU5fU09VUkNFX0JPVU5EU30sIGFuZAotICAgICAqIHtAbGluayAjRklMTF9JTl9TRUxFQ1RPUn0gaW5kaWNhdGluZyB3aGljaCBmaWVsZHMgd2VyZSBjaGFuZ2VkLgorICAgICAqIHtAbGluayAjRklMTF9JTl9DT01QT05FTlR9LCB7QGxpbmsgI0ZJTExfSU5fU09VUkNFX0JPVU5EU30sCisgICAgICoge0BsaW5rICNGSUxMX0lOX1NFTEVDVE9SfSBhbmQge0BsaW5rICNGSUxMX0lOX0NMSVBfREFUQSBpbmRpY2F0aW5nIHdoaWNoIGZpZWxkcyB3ZXJlCisgICAgICogY2hhbmdlZC4KICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGZpbGxJbihJbnRlbnQgb3RoZXIsIGludCBmbGFncykgeworICAgIEBGaWxsSW5GbGFncworICAgIHB1YmxpYyBpbnQgZmlsbEluKEludGVudCBvdGhlciwgQEZpbGxJbkZsYWdzIGludCBmbGFncykgewogICAgICAgICBpbnQgY2hhbmdlcyA9IDA7CiAgICAgICAgIGlmIChvdGhlci5tQWN0aW9uICE9IG51bGwKICAgICAgICAgICAgICAgICAmJiAobUFjdGlvbiA9PSBudWxsIHx8IChmbGFncyZGSUxMX0lOX0FDVElPTikgIT0gMCkpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvTG9hZGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0xvYWRlci5qYXZhCmluZGV4IDkxMWU0OWMuLmYzODI4YjAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvTG9hZGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Mb2FkZXIuamF2YQpAQCAtNDEzLDcgKzQxMyw3IEBACiAgICAgICoge0BsaW5rICNvblJlc2V0KCl9IGhhcHBlbnMuICBZb3UgY2FuIHJldHJpZXZlIHRoZSBjdXJyZW50IGFiYW5kb25lZAogICAgICAqIHN0YXRlIHdpdGgge0BsaW5rICNpc0FiYW5kb25lZH0uCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgb25BYmFuZG9uKCkgeyAgICAgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgb25BYmFuZG9uKCkgewogICAgIH0KICAgICAKICAgICAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvUGVyaW9kaWNTeW5jLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L1BlcmlvZGljU3luYy5qYXZhCmluZGV4IGI1ODZlZWMuLjgzNmM2ZjggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvUGVyaW9kaWNTeW5jLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9QZXJpb2RpY1N5bmMuamF2YQpAQCAtMjksMTMgKzI5LDE3IEBACiAgICAgcHVibGljIGZpbmFsIEFjY291bnQgYWNjb3VudDsKICAgICAvKiogVGhlIGF1dGhvcml0eSBvZiB0aGUgc3luYy4gQ2FuIGJlIG51bGwuICovCiAgICAgcHVibGljIGZpbmFsIFN0cmluZyBhdXRob3JpdHk7CisgICAgLyoqIFRoZSBzZXJ2aWNlIGZvciBzeW5jaW5nLCBpZiB0aGlzIGlzIGFuIGFub255bW91cyBzeW5jLiBDYW4gYmUgbnVsbC4qLworICAgIHB1YmxpYyBmaW5hbCBDb21wb25lbnROYW1lIHNlcnZpY2U7CiAgICAgLyoqIEFueSBleHRyYXMgdGhhdCBwYXJhbWV0ZXJzIHRoYXQgYXJlIHRvIGJlIHBhc3NlZCB0byB0aGUgc3luYyBhZGFwdGVyLiAqLwogICAgIHB1YmxpYyBmaW5hbCBCdW5kbGUgZXh0cmFzOwogICAgIC8qKiBIb3cgZnJlcXVlbnRseSB0aGUgc3luYyBzaG91bGQgYmUgc2NoZWR1bGVkLCBpbiBzZWNvbmRzLiBLZXB0IGFyb3VuZCBmb3IgQVBJIHB1cnBvc2VzLiAqLwogICAgIHB1YmxpYyBmaW5hbCBsb25nIHBlcmlvZDsKKyAgICAvKiogV2hldGhlciB0aGlzIHBlcmlvZGljIHN5bmMgcnVucyBvbiBhIHtAbGluayBTeW5jU2VydmljZX0uICovCisgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTZXJ2aWNlOwogICAgIC8qKgotICAgICAqIHtAaGlkZX0KICAgICAgKiBIb3cgbXVjaCBmbGV4aWJpbGl0eSBjYW4gYmUgdGFrZW4gaW4gc2NoZWR1bGluZyB0aGUgc3luYywgaW4gc2Vjb25kcy4KKyAgICAgKiB7QGhpZGV9CiAgICAgICovCiAgICAgcHVibGljIGZpbmFsIGxvbmcgZmxleFRpbWU7CiAKQEAgLTQ4LDQ0ICs1Miw3NCBAQAogICAgIHB1YmxpYyBQZXJpb2RpY1N5bmMoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBCdW5kbGUgZXh0cmFzLCBsb25nIHBlcmlvZEluU2Vjb25kcykgewogICAgICAgICB0aGlzLmFjY291bnQgPSBhY2NvdW50OwogICAgICAgICB0aGlzLmF1dGhvcml0eSA9IGF1dGhvcml0eTsKKyAgICAgICAgdGhpcy5zZXJ2aWNlID0gbnVsbDsKKyAgICAgICAgdGhpcy5pc1NlcnZpY2UgPSBmYWxzZTsKICAgICAgICAgaWYgKGV4dHJhcyA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aGlzLmV4dHJhcyA9IG5ldyBCdW5kbGUoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRoaXMuZXh0cmFzID0gbmV3IEJ1bmRsZShleHRyYXMpOwogICAgICAgICB9CiAgICAgICAgIHRoaXMucGVyaW9kID0gcGVyaW9kSW5TZWNvbmRzOwotICAgICAgICAvLyBJbml0aWFsaXNlIHRvIGEgc2FuZSB2YWx1ZS4KKyAgICAgICAgLy8gT2xkIEFQSSB1c2VzIGRlZmF1bHQgZmxleCB0aW1lLiBOby1vbmUgc2hvdWxkIGJlIHVzaW5nIHRoaXMgY3RvciBhbnl3YXkuCiAgICAgICAgIHRoaXMuZmxleFRpbWUgPSAwTDsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiB7QGhpZGV9CiAgICAgICogQ3JlYXRlIGEgY29weSBvZiBhIHBlcmlvZGljIHN5bmMuCisgICAgICoge0BoaWRlfQogICAgICAqLwogICAgIHB1YmxpYyBQZXJpb2RpY1N5bmMoUGVyaW9kaWNTeW5jIG90aGVyKSB7CiAgICAgICAgIHRoaXMuYWNjb3VudCA9IG90aGVyLmFjY291bnQ7CiAgICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gb3RoZXIuYXV0aG9yaXR5OworICAgICAgICB0aGlzLnNlcnZpY2UgPSBvdGhlci5zZXJ2aWNlOworICAgICAgICB0aGlzLmlzU2VydmljZSA9IG90aGVyLmlzU2VydmljZTsKICAgICAgICAgdGhpcy5leHRyYXMgPSBuZXcgQnVuZGxlKG90aGVyLmV4dHJhcyk7CiAgICAgICAgIHRoaXMucGVyaW9kID0gb3RoZXIucGVyaW9kOwogICAgICAgICB0aGlzLmZsZXhUaW1lID0gb3RoZXIuZmxleFRpbWU7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICoge0BoaWRlfQogICAgICAqIEEgUGVyaW9kaWNTeW5jIGZvciBhIHN5bmMgd2l0aCBhIHNwZWNpZmllZCBwcm92aWRlci4KKyAgICAgKiB7QGhpZGV9CiAgICAgICovCiAgICAgcHVibGljIFBlcmlvZGljU3luYyhBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHksIEJ1bmRsZSBleHRyYXMsCiAgICAgICAgICAgICBsb25nIHBlcmlvZCwgbG9uZyBmbGV4VGltZSkgewogICAgICAgICB0aGlzLmFjY291bnQgPSBhY2NvdW50OwogICAgICAgICB0aGlzLmF1dGhvcml0eSA9IGF1dGhvcml0eTsKKyAgICAgICAgdGhpcy5zZXJ2aWNlID0gbnVsbDsKKyAgICAgICAgdGhpcy5pc1NlcnZpY2UgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5leHRyYXMgPSBuZXcgQnVuZGxlKGV4dHJhcyk7CisgICAgICAgIHRoaXMucGVyaW9kID0gcGVyaW9kOworICAgICAgICB0aGlzLmZsZXhUaW1lID0gZmxleFRpbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBQZXJpb2RpY1N5bmMgZm9yIGEgc3luYyB3aXRoIGEgc3BlY2lmaWVkIFN5bmNTZXJ2aWNlLgorICAgICAqIHtAaGlkZX0KKyAgICAgKi8KKyAgICBwdWJsaWMgUGVyaW9kaWNTeW5jKENvbXBvbmVudE5hbWUgc2VydmljZSwgQnVuZGxlIGV4dHJhcywKKyAgICAgICAgICAgIGxvbmcgcGVyaW9kLAorICAgICAgICAgICAgbG9uZyBmbGV4VGltZSkgeworICAgICAgICB0aGlzLmFjY291bnQgPSBudWxsOworICAgICAgICB0aGlzLmF1dGhvcml0eSA9IG51bGw7CisgICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7CisgICAgICAgIHRoaXMuaXNTZXJ2aWNlID0gdHJ1ZTsKICAgICAgICAgdGhpcy5leHRyYXMgPSBuZXcgQnVuZGxlKGV4dHJhcyk7CiAgICAgICAgIHRoaXMucGVyaW9kID0gcGVyaW9kOwogICAgICAgICB0aGlzLmZsZXhUaW1lID0gZmxleFRpbWU7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBQZXJpb2RpY1N5bmMoUGFyY2VsIGluKSB7Ci0gICAgICAgIHRoaXMuYWNjb3VudCA9IGluLnJlYWRQYXJjZWxhYmxlKG51bGwpOwotICAgICAgICB0aGlzLmF1dGhvcml0eSA9IGluLnJlYWRTdHJpbmcoKTsKKyAgICAgICAgdGhpcy5pc1NlcnZpY2UgPSAoaW4ucmVhZEludCgpICE9IDApOworICAgICAgICBpZiAodGhpcy5pc1NlcnZpY2UpIHsKKyAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IGluLnJlYWRQYXJjZWxhYmxlKG51bGwpOworICAgICAgICAgICAgdGhpcy5hY2NvdW50ID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gbnVsbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IGluLnJlYWRQYXJjZWxhYmxlKG51bGwpOworICAgICAgICAgICAgdGhpcy5hdXRob3JpdHkgPSBpbi5yZWFkU3RyaW5nKCk7CisgICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSBudWxsOworICAgICAgICB9CiAgICAgICAgIHRoaXMuZXh0cmFzID0gaW4ucmVhZEJ1bmRsZSgpOwogICAgICAgICB0aGlzLnBlcmlvZCA9IGluLnJlYWRMb25nKCk7CiAgICAgICAgIHRoaXMuZmxleFRpbWUgPSBpbi5yZWFkTG9uZygpOwpAQCAtOTgsOCArMTMyLDEzIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgZGVzdC53cml0ZVBhcmNlbGFibGUoYWNjb3VudCwgZmxhZ3MpOwotICAgICAgICBkZXN0LndyaXRlU3RyaW5nKGF1dGhvcml0eSk7CisgICAgICAgIGRlc3Qud3JpdGVJbnQoaXNTZXJ2aWNlID8gMSA6IDApOworICAgICAgICBpZiAoYWNjb3VudCA9PSBudWxsICYmIGF1dGhvcml0eSA9PSBudWxsKSB7CisgICAgICAgICAgICBkZXN0LndyaXRlUGFyY2VsYWJsZShzZXJ2aWNlLCBmbGFncyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0LndyaXRlUGFyY2VsYWJsZShhY2NvdW50LCBmbGFncyk7CisgICAgICAgICAgICBkZXN0LndyaXRlU3RyaW5nKGF1dGhvcml0eSk7CisgICAgICAgIH0KICAgICAgICAgZGVzdC53cml0ZUJ1bmRsZShleHRyYXMpOwogICAgICAgICBkZXN0LndyaXRlTG9uZyhwZXJpb2QpOwogICAgICAgICBkZXN0LndyaXRlTG9uZyhmbGV4VGltZSk7CkBAIC0xMjYsMTQgKzE2NSwyNCBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsIFBlcmlvZGljU3luYyBvdGhlciA9IChQZXJpb2RpY1N5bmMpIG87Ci0gICAgICAgIHJldHVybiBhY2NvdW50LmVxdWFscyhvdGhlci5hY2NvdW50KQotICAgICAgICAgICAgJiYgYXV0aG9yaXR5LmVxdWFscyhvdGhlci5hdXRob3JpdHkpCisgICAgICAgIGlmICh0aGlzLmlzU2VydmljZSAhPSBvdGhlci5pc1NlcnZpY2UpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBib29sZWFuIGVxdWFsID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlzLmlzU2VydmljZSkgeworICAgICAgICAgICAgZXF1YWwgPSBzZXJ2aWNlLmVxdWFscyhvdGhlci5zZXJ2aWNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVxdWFsID0gYWNjb3VudC5lcXVhbHMob3RoZXIuYWNjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgJiYgYXV0aG9yaXR5LmVxdWFscyhvdGhlci5hdXRob3JpdHkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBlcXVhbAogICAgICAgICAgICAgJiYgcGVyaW9kID09IG90aGVyLnBlcmlvZAogICAgICAgICAgICAgJiYgc3luY0V4dHJhc0VxdWFscyhleHRyYXMsIG90aGVyLmV4dHJhcyk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUGVyaW9kaWMgc3luYyBleHRyYSBjb21wYXJpc29uIGZ1bmN0aW9uLgorICAgICAqIFBlcmlvZGljIHN5bmMgZXh0cmEgY29tcGFyaXNvbiBmdW5jdGlvbi4gRHVwbGljYXRlZCBmcm9tCisgICAgICoge0BsaW5rIGNvbS5hbmRyb2lkLnNlcnZlci5jb250ZW50LlN5bmNNYW5hZ2VyI3N5bmNFeHRyYXNFcXVhbHMoQnVuZGxlIGIxLCBCdW5kbGUgYjIpfQogICAgICAqIHtAaGlkZX0KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc3luY0V4dHJhc0VxdWFscyhCdW5kbGUgYjEsIEJ1bmRsZSBiMikgewpAQCAtMTU4LDYgKzIwNyw3IEBACiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJhY2NvdW50OiAiICsgYWNjb3VudCArCiAgICAgICAgICAgICAgICAiLCBhdXRob3JpdHk6ICIgKyBhdXRob3JpdHkgKworICAgICAgICAgICAgICAgIiwgc2VydmljZTogIiArIHNlcnZpY2UgKwogICAgICAgICAgICAgICAgIi4gcGVyaW9kOiAiICsgcGVyaW9kICsgInMgIiArCiAgICAgICAgICAgICAgICAiLCBmbGV4OiAiICsgZmxleFRpbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9SZXN0cmljdGlvbkVudHJ5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L1Jlc3RyaWN0aW9uRW50cnkuamF2YQppbmRleCAyODNhMDk3Ny4uM2ZmNTNiZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9SZXN0cmljdGlvbkVudHJ5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9SZXN0cmljdGlvbkVudHJ5LmphdmEKQEAgLTE5LDggKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiAKLWltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Jbmhlcml0ZWQ7Ci0KIC8qKgogICogQXBwbGljYXRpb25zIGNhbiBleHBvc2UgcmVzdHJpY3Rpb25zIGZvciBhIHJlc3RyaWN0ZWQgdXNlciBvbiBhCiAgKiBtdWx0aXVzZXIgZGV2aWNlLiBUaGUgYWRtaW5pc3RyYXRvciBjYW4gY29uZmlndXJlIHRoZXNlIHJlc3RyaWN0aW9ucyB0aGF0IHdpbGwgdGhlbiBiZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9TeW5jSW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9TeW5jSW5mby5qYXZhCmluZGV4IGNmZmM2NTMuLjE0NmRkOTkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvU3luY0luZm8uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L1N5bmNJbmZvLmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yOwogCiAvKioKICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBzeW5jIG9wZXJhdGlvbiB0aGF0IGlzIGN1cnJlbnRseSB1bmRlcndheS4KQEAgLTI5LDE2ICsyOCwyNCBAQAogICAgIHB1YmxpYyBmaW5hbCBpbnQgYXV0aG9yaXR5SWQ7CiAKICAgICAvKioKLSAgICAgKiBUaGUge0BsaW5rIEFjY291bnR9IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHN5bmNlZC4KKyAgICAgKiBUaGUge0BsaW5rIEFjY291bnR9IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHN5bmNlZC4gV2lsbCBiZSBudWxsIGlmIHRoaXMgc3luYyBpcyBydW5uaW5nIHZpYQorICAgICAqIGEge0BsaW5rIFN5bmNTZXJ2aWNlfS4KICAgICAgKi8KICAgICBwdWJsaWMgZmluYWwgQWNjb3VudCBhY2NvdW50OwogCiAgICAgLyoqCi0gICAgICogVGhlIGF1dGhvcml0eSBvZiB0aGUgcHJvdmlkZXIgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgc3luY2VkLgorICAgICAqIFRoZSBhdXRob3JpdHkgb2YgdGhlIHByb3ZpZGVyIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHN5bmNlZC4gV2lsbCBiZSBudWxsIGlmIHRoaXMgc3luYworICAgICAqIGlzIHJ1bm5pbmcgdmlhIGEge0BsaW5rIFN5bmNTZXJ2aWNlfS4KICAgICAgKi8KICAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGF1dGhvcml0eTsKIAogICAgIC8qKgorICAgICAqIFRoZSB7QGxpbmsgU3luY1NlcnZpY2V9IHRoYXQgaXMgdGFyZ2V0ZWQgYnkgdGhpcyBvcGVyYXRpb24uIE51bGwgaWYgdGhpcyBzeW5jIGlzIHJ1bm5pbmcgdmlhCisgICAgICogYSB7QGxpbmsgQWJzdHJhY3RUaHJlYWRlZFN5bmNBZGFwdGVyfS4gCisgICAgICovCisgICAgcHVibGljIGZpbmFsIENvbXBvbmVudE5hbWUgc2VydmljZTsKKworICAgIC8qKgogICAgICAqIFRoZSBzdGFydCB0aW1lIG9mIHRoZSBjdXJyZW50IHN5bmMgb3BlcmF0aW9uIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBib290LgogICAgICAqIFRoaXMgaXMgcmVwcmVzZW50ZWQgaW4gZWxhcHNlZCByZWFsIHRpbWUuCiAgICAgICogU2VlIHtAbGluayBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrI2VsYXBzZWRSZWFsdGltZSgpfS4KQEAgLTQ2LDEyICs1MywxMyBAQAogICAgIHB1YmxpYyBmaW5hbCBsb25nIHN0YXJ0VGltZTsKIAogICAgIC8qKiBAaGlkZSAqLwotICAgIHB1YmxpYyBTeW5jSW5mbyhpbnQgYXV0aG9yaXR5SWQsIEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwKKyAgICBwdWJsaWMgU3luY0luZm8oaW50IGF1dGhvcml0eUlkLCBBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHksIENvbXBvbmVudE5hbWUgc2VydmljZSwKICAgICAgICAgICAgIGxvbmcgc3RhcnRUaW1lKSB7CiAgICAgICAgIHRoaXMuYXV0aG9yaXR5SWQgPSBhdXRob3JpdHlJZDsKICAgICAgICAgdGhpcy5hY2NvdW50ID0gYWNjb3VudDsKICAgICAgICAgdGhpcy5hdXRob3JpdHkgPSBhdXRob3JpdHk7CiAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gc3RhcnRUaW1lOworICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlOwogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwpAQCAtNjAsNiArNjgsNyBAQAogICAgICAgICB0aGlzLmFjY291bnQgPSBuZXcgQWNjb3VudChvdGhlci5hY2NvdW50Lm5hbWUsIG90aGVyLmFjY291bnQudHlwZSk7CiAgICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gb3RoZXIuYXV0aG9yaXR5OwogICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IG90aGVyLnN0YXJ0VGltZTsKKyAgICAgICAgdGhpcy5zZXJ2aWNlID0gb3RoZXIuc2VydmljZTsKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KQEAgLTcwLDE3ICs3OSwyMCBAQAogICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIHBhcmNlbCwgaW50IGZsYWdzKSB7CiAgICAgICAgIHBhcmNlbC53cml0ZUludChhdXRob3JpdHlJZCk7Ci0gICAgICAgIGFjY291bnQud3JpdGVUb1BhcmNlbChwYXJjZWwsIDApOworICAgICAgICBwYXJjZWwud3JpdGVQYXJjZWxhYmxlKGFjY291bnQsIGZsYWdzKTsKICAgICAgICAgcGFyY2VsLndyaXRlU3RyaW5nKGF1dGhvcml0eSk7CiAgICAgICAgIHBhcmNlbC53cml0ZUxvbmcoc3RhcnRUaW1lKTsKKyAgICAgICAgcGFyY2VsLndyaXRlUGFyY2VsYWJsZShzZXJ2aWNlLCBmbGFncyk7CisgICAgICAgIAogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwogICAgIFN5bmNJbmZvKFBhcmNlbCBwYXJjZWwpIHsKICAgICAgICAgYXV0aG9yaXR5SWQgPSBwYXJjZWwucmVhZEludCgpOwotICAgICAgICBhY2NvdW50ID0gbmV3IEFjY291bnQocGFyY2VsKTsKKyAgICAgICAgYWNjb3VudCA9IHBhcmNlbC5yZWFkUGFyY2VsYWJsZShBY2NvdW50LmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwogICAgICAgICBhdXRob3JpdHkgPSBwYXJjZWwucmVhZFN0cmluZygpOwogICAgICAgICBzdGFydFRpbWUgPSBwYXJjZWwucmVhZExvbmcoKTsKKyAgICAgICAgc2VydmljZSA9IHBhcmNlbC5yZWFkUGFyY2VsYWJsZShDb21wb25lbnROYW1lLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdC5qYXZhCmluZGV4IDZjYTI4M2QuLmE5YTYyYTcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvU3luY1JlcXVlc3QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L1N5bmNSZXF1ZXN0LmphdmEKQEAgLTIzLDE1ICsyMywxNSBAQAogCiBwdWJsaWMgY2xhc3MgU3luY1JlcXVlc3QgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlN5bmNSZXF1ZXN0IjsKLSAgICAvKiogQWNjb3VudCB0byBwYXNzIHRvIHRoZSBzeW5jIGFkYXB0ZXIuIE1heSBiZSBudWxsLiAqLworICAgIC8qKiBBY2NvdW50IHRvIHBhc3MgdG8gdGhlIHN5bmMgYWRhcHRlci4gQ2FuIGJlIG51bGwuICovCiAgICAgcHJpdmF0ZSBmaW5hbCBBY2NvdW50IG1BY2NvdW50VG9TeW5jOwogICAgIC8qKiBBdXRob3JpdHkgc3RyaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBDb250ZW50UHJvdmlkZXIuICovCiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUF1dGhvcml0eTsKLSAgICAvKiogU3luYyBzZXJ2aWNlIGlkZW50aWZpZXIuIE1heSBiZSBudWxsLiovCisgICAgLyoqIHtAbGluayBTeW5jU2VydmljZX0gaWRlbnRpZmllci4gKi8KICAgICBwcml2YXRlIGZpbmFsIENvbXBvbmVudE5hbWUgbUNvbXBvbmVudEluZm87CiAgICAgLyoqIEJ1bmRsZSBjb250YWluaW5nIHVzZXIgaW5mbyBhcyB3ZWxsIGFzIHN5bmMgc2V0dGluZ3MuICovCiAgICAgcHJpdmF0ZSBmaW5hbCBCdW5kbGUgbUV4dHJhczsKLSAgICAvKiogRGlzYWxsb3cgdGhpcyBzeW5jIHJlcXVlc3Qgb24gbWV0ZXJlZCBuZXR3b3Jrcy4gKi8KKyAgICAvKiogRG9uJ3QgYWxsb3cgdGhpcyBzeW5jIHJlcXVlc3Qgb24gbWV0ZXJlZCBuZXR3b3Jrcy4gKi8KICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbURpc2FsbG93TWV0ZXJlZDsKICAgICAvKioKICAgICAgKiBBbnRpY2lwYXRlZCB1cGxvYWQgc2l6ZSBpbiBieXRlcy4KQEAgLTY5LDE4ICs2OSwxNCBAQAogICAgICAgICByZXR1cm4gbUlzUGVyaW9kaWM7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICoge0BoaWRlfQotICAgICAqIEByZXR1cm4gd2hldGhlciB0aGlzIGlzIGFuIGV4cGVkaXRlZCBzeW5jLgotICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzRXhwZWRpdGVkKCkgewogICAgICAgICByZXR1cm4gbUlzRXhwZWRpdGVkOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIHtAaGlkZX0KLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBzeW5jIHVzZXMgYW4gYWNjb3VudC9hdXRob3JpdHkgcGFpciwgb3IgZmFsc2UgaWYgdGhpcyBzeW5jIGlzIGJvdW5kIHRvCi0gICAgICogYSBTeW5jIFNlcnZpY2UuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgc3luYyB1c2VzIGFuIGFjY291bnQvYXV0aG9yaXR5IHBhaXIsIG9yIGZhbHNlIGlmCisgICAgICogICAgICAgICB0aGlzIGlzIGFuIGFub255bW91cyBzeW5jIGJvdW5kIHRvIGFuIEBsaW5rIEFub255bW91c1N5bmNTZXJ2aWNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGhhc0F1dGhvcml0eSgpIHsKICAgICAgICAgcmV0dXJuIG1Jc0F1dGhvcml0eTsKQEAgLTg4LDM0ICs4NCw1MSBAQAogCiAgICAgLyoqCiAgICAgICoge0BoaWRlfQorICAgICAqCiAgICAgICogQHJldHVybiBhY2NvdW50IG9iamVjdCBmb3IgdGhpcyBzeW5jLgotICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdAotICAgICAqIHNwZWNpZnkgYW4gYWNjb3VudC9wcm92aWRlciBhdXRob3JpdHkuCisgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGEgcmVxdWVzdCB0aGF0IHRhcmdldHMgYQorICAgICAqIHN5bmMgc2VydmljZS4KICAgICAgKi8KICAgICBwdWJsaWMgQWNjb3VudCBnZXRBY2NvdW50KCkgewogICAgICAgICBpZiAoIWhhc0F1dGhvcml0eSgpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3QgZ2V0QWNjb3VudCgpIGZvciBhIHN5bmMgdGhhdCBkb2VzIG5vdCIKLSAgICAgICAgICAgICAgICAgICAgKyAic3BlY2lmeSBhbiBhdXRob3JpdHkuIik7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3QgZ2V0QWNjb3VudCgpIGZvciBhIHN5bmMgdGhhdCB0YXJnZXRzIGEgc3luYyIKKyAgICAgICAgICAgICAgICAgICAgKyAic2VydmljZS4iKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbUFjY291bnRUb1N5bmM7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICoge0BoaWRlfQorICAgICAqCiAgICAgICogQHJldHVybiBwcm92aWRlciBmb3IgdGhpcyBzeW5jLgotICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdAotICAgICAqIHNwZWNpZnkgYW4gYWNjb3VudC9wcm92aWRlciBhdXRob3JpdHkuCisgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGEgcmVxdWVzdCB0aGF0IHRhcmdldHMgYQorICAgICAqIHN5bmMgc2VydmljZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFByb3ZpZGVyKCkgewogICAgICAgICBpZiAoIWhhc0F1dGhvcml0eSgpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3QgZ2V0UHJvdmlkZXIoKSBmb3IgYSBzeW5jIHRoYXQgZG9lcyBub3QiCi0gICAgICAgICAgICAgICAgICAgICsgInNwZWNpZnkgYSBwcm92aWRlci4iKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNhbm5vdCBnZXRQcm92aWRlcigpIGZvciBhIHN5bmMgdGhhdCB0YXJnZXRzIGEiCisgICAgICAgICAgICAgICAgICAgICsgInN5bmMgc2VydmljZS4iKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbUF1dGhvcml0eTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiB7QGhpZGV9CisgICAgICogVGhyb3dzIGEgcnVudGltZSBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGEKKyAgICAgKiBTeW5jUmVxdWVzdCB0aGF0IGlzIGJvdW5kIHRvIGFuIGFjY291bnQvcHJvdmlkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIENvbXBvbmVudE5hbWUgZm9yIHRoZSBzZXJ2aWNlIHRoYXQgdGhpcyBzeW5jIHdpbGwgYmluZCB0by4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ29tcG9uZW50TmFtZSBnZXRTZXJ2aWNlKCkgeworICAgICAgICBpZiAoaGFzQXV0aG9yaXR5KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJDYW5ub3QgZ2V0QW5vbnltb3VzU2VydmljZSgpIGZvciBhIHN5bmMgdGhhdCBoYXMgc3BlY2lmaWVkIGEgcHJvdmlkZXIuIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Db21wb25lbnRJbmZvOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaGlkZX0KICAgICAgKiBSZXRyaWV2ZSBidW5kbGUgZm9yIHRoaXMgU3luY1JlcXVlc3QuIFdpbGwgbm90IGJlIG51bGwuCiAgICAgICovCiAgICAgcHVibGljIEJ1bmRsZSBnZXRCdW5kbGUoKSB7CkBAIC0xMjksNyArMTQyLDYgQEAKICAgICBwdWJsaWMgbG9uZyBnZXRTeW5jRmxleFRpbWUoKSB7CiAgICAgICAgIHJldHVybiBtU3luY0ZsZXhUaW1lU2VjczsKICAgICB9Ci0KICAgICAvKioKICAgICAgKiB7QGhpZGV9CiAgICAgICogQHJldHVybiB0aGUgbGFzdCBwb2ludCBpbiB0aW1lIGF0IHdoaWNoIHRoaXMgc3luYyBtdXN0IHNjaGVkdWxlZC4KQEAgLTIxNiw3ICsyMjgsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEJ1aWxkZXIgY2xhc3MgZm9yIGEge0BsaW5rIFN5bmNSZXF1ZXN0fS4gQXMgeW91IGJ1aWxkIHlvdXIgU3luY1JlcXVlc3QgdGhpcyBjbGFzcyB3aWxsIGFsc28KKyAgICAgKiBCdWlsZGVyIGNsYXNzIGZvciBhIEBsaW5rIFN5bmNSZXF1ZXN0LiBBcyB5b3UgYnVpbGQgeW91ciBTeW5jUmVxdWVzdCB0aGlzIGNsYXNzIHdpbGwgYWxzbwogICAgICAqIHBlcmZvcm0gdmFsaWRhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgewpAQCAtMjMyLDkgKzI0NCwxMiBAQAogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1lOQ19UQVJHRVRfU0VSVklDRSA9IDE7CiAgICAgICAgIC8qKiBTcGVjaWZ5IHRoYXQgdGhpcyBpcyBhIHN5bmMgd2l0aCBhIHByb3ZpZGVyLiAqLwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1lOQ19UQVJHRVRfQURBUFRFUiA9IDI7Ci0gICAgICAgIC8qKiBFYXJsaWVzdCBwb2ludCBvZiBkaXNwbGFjZW1lbnQgaW50byB0aGUgZnV0dXJlIGF0IHdoaWNoIHRoaXMgc3luYyBjYW4gb2NjdXIuICovCisgICAgICAgIC8qKgorICAgICAgICAgKiBFYXJsaWVzdCBwb2ludCBvZiBkaXNwbGFjZW1lbnQgaW50byB0aGUgZnV0dXJlIGF0IHdoaWNoIHRoaXMgc3luYyBjYW4KKyAgICAgICAgICogb2NjdXIuCisgICAgICAgICAqLwogICAgICAgICBwcml2YXRlIGxvbmcgbVN5bmNGbGV4VGltZVNlY3M7Ci0gICAgICAgIC8qKiBMYXRlc3QgcG9pbnQgb2YgZGlzcGxhY2VtZW50IGludG8gdGhlIGZ1dHVyZSBhdCB3aGljaCB0aGlzIHN5bmMgbXVzdCBvY2N1ci4gKi8KKyAgICAgICAgLyoqIERpc3BsYWNlbWVudCBpbnRvIHRoZSBmdXR1cmUgYXQgd2hpY2ggdGhpcyBzeW5jIG11c3Qgb2NjdXIuICovCiAgICAgICAgIHByaXZhdGUgbG9uZyBtU3luY1J1blRpbWVTZWNzOwogICAgICAgICAvKioKICAgICAgICAgICogU3luYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIC0gY3VzdG9tIHVzZXIgZGF0YSBleHBsaWNpdGx5IHByb3ZpZGVkIGJ5IHRoZSBkZXZlbG9wZXIuCkBAIC0yODMsOCArMjk4LDkgQEAKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1FeHBlZGl0ZWQ7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBzeW5jIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBzeW5jIGxvZ2ljIGlmIHRoaXMgaXMgYSBwcm92aWRlci1sZXNzIHN5bmMsCi0gICAgICAgICAqIG90aGVyd2lzZSBudWxsLgorICAgICAgICAgKiBUaGUge0BsaW5rIFN5bmNTZXJ2aWNlfSBjb21wb25lbnQgdGhhdAorICAgICAgICAgKiBjb250YWlucyB0aGUgc3luYyBsb2dpYyBpZiB0aGlzIGlzIGEgcHJvdmlkZXItbGVzcyBzeW5jLCBvdGhlcndpc2UKKyAgICAgICAgICogbnVsbC4KICAgICAgICAgICovCiAgICAgICAgIHByaXZhdGUgQ29tcG9uZW50TmFtZSBtQ29tcG9uZW50TmFtZTsKICAgICAgICAgLyoqCkBAIC0zMjAsMTEgKzMzNiwxNSBAQAogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBCdWlsZCBhIHBlcmlvZGljIHN5bmMuIEVpdGhlciB0aGlzIG9yIHN5bmNPbmNlKCkgPGI+bXVzdDwvYj4gYmUgY2FsbGVkIGZvciB0aGlzIGJ1aWxkZXIuCi0gICAgICAgICAqIFN5bmNzIGFyZSBpZGVudGlmaWVkIGJ5IHRhcmdldCB7QGxpbmsgYW5kcm9pZC5wcm92aWRlcn0ve0BsaW5rIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudH0KLSAgICAgICAgICogYW5kIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgZXh0cmFzIGJ1bmRsZS4KLSAgICAgICAgICogWW91IGNhbm5vdCByZXVzZSB0aGUgc2FtZSBidWlsZGVyIGZvciBvbmUtdGltZSBzeW5jcyAoYnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uKSBhZnRlcgotICAgICAgICAgKiBoYXZpbmcgc3BlY2lmaWVkIGEgcGVyaW9kaWMgc3luYy4gSWYgeW91IGRvLCBhbiA8Y29kZT5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L2NvZGU+CisgICAgICAgICAqIFN5bmNzIGFyZSBpZGVudGlmaWVkIGJ5IHRhcmdldCB7QGxpbmsgU3luY1NlcnZpY2V9L3tAbGluayBhbmRyb2lkLnByb3ZpZGVyfSBhbmQgYnkgdGhlCisgICAgICAgICAqIGNvbnRlbnRzIG9mIHRoZSBleHRyYXMgYnVuZGxlLgorICAgICAgICAgKiBZb3UgY2Fubm90IHJldXNlIHRoZSBzYW1lIGJ1aWxkZXIgZm9yIG9uZS10aW1lIHN5bmNzIGFmdGVyIGhhdmluZyBzcGVjaWZpZWQgYSBwZXJpb2RpYworICAgICAgICAgKiBzeW5jIChieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24pLiBJZiB5b3UgZG8sIGFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4KICAgICAgICAgICogd2lsbCBiZSB0aHJvd24uCisgICAgICAgICAqIDxwPlRoZSBidW5kbGUgZm9yIGEgcGVyaW9kaWMgc3luYyBjYW4gYmUgcXVlcmllZCBieSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgY29ycmVjdAorICAgICAgICAgKiBwZXJtaXNzaW9ucyB1c2luZworICAgICAgICAgKiB7QGxpbmsgQ29udGVudFJlc29sdmVyI2dldFBlcmlvZGljU3luY3MoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgcHJvdmlkZXIpfSwgc28gbm8KKyAgICAgICAgICogc2Vuc2l0aXZlIGRhdGEgc2hvdWxkIGJlIHRyYW5zZmVycmVkIGhlcmUuCiAgICAgICAgICAqCiAgICAgICAgICAqIEV4YW1wbGUgdXNhZ2UuCiAgICAgICAgICAqCkBAIC0zNzUsNyArMzk1LDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiB7QGhpZGV9CiAgICAgICAgICAqIERldmVsb3BlciBjYW4gcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlaXIgcGF5bG9hZCBzaXplOyBvcHRpb25hbC4gLTEgc3BlY2lmaWVzIHVua25vd24sCiAgICAgICAgICAqIHNvIHRoYXQgeW91IGFyZSBub3QgcmVzdHJpY3RlZCB0byBkZWZpbmluZyBib3RoIGZpZWxkcy4KICAgICAgICAgICoKQEAgLTM4OSwyMCArNDA4LDI4IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICogQHNlZSBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyI2lzQWN0aXZlTmV0d29ya01ldGVyZWQoKQotICAgICAgICAgKiBAcGFyYW0gZGlzYWxsb3cgdHJ1ZSB0byBlbmZvcmNlIHRoYXQgdGhpcyB0cmFuc2ZlciBub3Qgb2NjdXIgb24gbWV0ZXJlZCBuZXR3b3Jrcy4KLSAgICAgICAgICogICAgICAgICAgICAgICAgIERlZmF1bHQgZmFsc2UuCisgICAgICAgICAqIFdpbGwgdGhyb3cgYW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPiBpZiBjYWxsZWQgYW5kCisgICAgICAgICAqIHtAbGluayAjc2V0SWdub3JlU2V0dGluZ3MoYm9vbGVhbiBpZ25vcmVTZXR0aW5ncyl9IGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkLgorICAgICAgICAgKiBAcGFyYW0gZGlzYWxsb3cgdHJ1ZSB0byBhbGxvdyB0aGlzIHRyYW5zZmVyIG9uIG1ldGVyZWQgbmV0d29ya3MuIERlZmF1bHQgZmFsc2UuCisgICAgICAgICAqIAogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RGlzYWxsb3dNZXRlcmVkKGJvb2xlYW4gZGlzYWxsb3cpIHsKKyAgICAgICAgICAgIGlmIChtSWdub3JlU2V0dGluZ3MgJiYgZGlzYWxsb3cpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJzZXREaXNhbGxvd01ldGVyZWQodHJ1ZSkgYWZ0ZXIgaGF2aW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgKyAic3BlY2lmaWVkIHRoYXQgc2V0dGluZ3MgYXJlIGlnbm9yZWQuIik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtRGlzYWxsb3dNZXRlcmVkID0gZGlzYWxsb3c7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBTcGVjaWZ5IGFuIGF1dGhvcml0eSBhbmQgYWNjb3VudCBmb3IgdGhpcyB0cmFuc2Zlci4KKyAgICAgICAgICogU3BlY2lmeSBhbiBhdXRob3JpdHkgYW5kIGFjY291bnQgZm9yIHRoaXMgdHJhbnNmZXIuIENhbm5vdCBiZSB1c2VkIHdpdGgKKyAgICAgICAgICoge0BsaW5rICNzZXRTeW5jQWRhcHRlcihDb21wb25lbnROYW1lIGNuYW1lKX0uCiAgICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBhdXRob3JpdHkgU3RyaW5nIGlkZW50aWZ5aW5nIHdoaWNoIGNvbnRlbnQgcHJvdmlkZXIgdG8gc3luYy4KLSAgICAgICAgICogQHBhcmFtIGFjY291bnQgQWNjb3VudCB0byBzeW5jLiBDYW4gYmUgbnVsbCB1bmxlc3MgdGhpcyBpcyBhIHBlcmlvZGljIHN5bmMuCisgICAgICAgICAqIEBwYXJhbSBhdXRob3JpdHkKKyAgICAgICAgICogQHBhcmFtIGFjY291bnQgQWNjb3VudCB0byBzeW5jLiBDYW4gYmUgbnVsbCB1bmxlc3MgdGhpcyBpcyBhIHBlcmlvZGljCisgICAgICAgICAqICAgICAgICAgICAgc3luYywgZm9yIHdoaWNoIHZlcmlmaWNhdGlvbiBieSB0aGUgQ29udGVudFJlc29sdmVyIHdpbGwKKyAgICAgICAgICogICAgICAgICAgICBmYWlsLiBJZiBhIHN5bmMgaXMgcGVyZm9ybWVkIHdpdGhvdXQgYW4gYWNjb3VudCwgdGhlCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRTeW5jQWRhcHRlcihBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpIHsKICAgICAgICAgICAgIGlmIChtU3luY1RhcmdldCAhPSBTWU5DX1RBUkdFVF9VTktOT1dOKSB7CkBAIC00MTksMTAgKzQ0NiwyNiBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIE9wdGlvbmFsIGRldmVsb3Blci1wcm92aWRlZCBleHRyYXMgaGFuZGVkIGJhY2sgaW4KLSAgICAgICAgICoge0BsaW5rIEFic3RyYWN0VGhyZWFkZWRTeW5jQWRhcHRlciNvblBlcmZvcm1TeW5jKEFjY291bnQsIEJ1bmRsZSwgU3RyaW5nLAotICAgICAgICAgKiBDb250ZW50UHJvdmlkZXJDbGllbnQsIFN5bmNSZXN1bHQpfSBvY2N1cnMuIFRoaXMgYnVuZGxlIGlzIGNvcGllZCBpbnRvIHRoZSBTeW5jUmVxdWVzdAotICAgICAgICAgKiByZXR1cm5lZCBieSB7QGxpbmsgI2J1aWxkKCl9LgorICAgICAgICAgKiBTcGVjaWZ5IHRoZSB7QGxpbmsgU3luY1NlcnZpY2V9IGNvbXBvbmVudCBmb3IgdGhpcyBzeW5jLiBUaGlzIGlzIG5vdCB2YWxpZGF0ZWQgdW50aWwKKyAgICAgICAgICogc3luYyB0aW1lIHNvIHByb3ZpZGluZyBhbiBpbmNvcnJlY3QgY29tcG9uZW50IG5hbWUgaGVyZSB3aWxsIG5vdCBmYWlsLiBDYW5ub3QgYmUgdXNlZAorICAgICAgICAgKiB3aXRoIHtAbGluayAjc2V0U3luY0FkYXB0ZXIoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5KX0uCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBjbmFtZSBDb21wb25lbnROYW1lIHRvIGlkZW50aWZ5IHlvdXIgQW5vbnltb3VzIHNlcnZpY2UKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFN5bmNBZGFwdGVyKENvbXBvbmVudE5hbWUgY25hbWUpIHsKKyAgICAgICAgICAgIGlmIChtU3luY1RhcmdldCAhPSBTWU5DX1RBUkdFVF9VTktOT1dOKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU3luYyB0YXJnZXQgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVN5bmNUYXJnZXQgPSBTWU5DX1RBUkdFVF9TRVJWSUNFOworICAgICAgICAgICAgbUNvbXBvbmVudE5hbWUgPSBjbmFtZTsKKyAgICAgICAgICAgIG1BY2NvdW50ID0gbnVsbDsKKyAgICAgICAgICAgIG1BdXRob3JpdHkgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogRGV2ZWxvcGVyLXByb3ZpZGVkIGV4dHJhcyBoYW5kZWQgYmFjayB3aGVuIHN5bmMgYWN0dWFsbHkgb2NjdXJzLiBUaGlzIGJ1bmRsZSBpcyBjb3BpZWQKKyAgICAgICAgICogaW50byB0aGUgU3luY1JlcXVlc3QgcmV0dXJuZWQgYnkge0BsaW5rICNidWlsZCgpfS4KICAgICAgICAgICoKICAgICAgICAgICogRXhhbXBsZToKICAgICAgICAgICogPHByZT4KQEAgLTQzNiw3ICs0NzksNyBAQAogICAgICAgICAgKiAgICAgQnVuZGxlIGV4dHJhcyA9IG5ldyBCdW5kbGUoKTsKICAgICAgICAgICogICAgIGV4dHJhcy5zZXRTdHJpbmcoImRhdGEiLCBzeW5jRGF0YSk7CiAgICAgICAgICAqICAgICBidWlsZGVyLnNldEV4dHJhcyhleHRyYXMpOwotICAgICAgICAgKiAgICAgQ29udGVudFJlc29sdmVyLnN5bmMoYnVpbGRlci5idWlsZCgpKTsgLy8gRWFjaCBzeW5jKCkgcmVxdWVzdCBpcyBmb3IgYSB1bmlxdWUgc3luYy4KKyAgICAgICAgICogICAgIENvbnRlbnRSZXNvbHZlci5zeW5jKGJ1aWxkZXIuYnVpbGQoKSk7IC8vIEVhY2ggc3luYygpIHJlcXVlc3QgY3JlYXRlcyBhIHVuaXF1ZSBzeW5jLgogICAgICAgICAgKiAgIH0KICAgICAgICAgICogPC9wcmU+CiAgICAgICAgICAqIE9ubHkgdmFsdWVzIG9mIHRoZSBmb2xsb3dpbmcgdHlwZXMgbWF5IGJlIHVzZWQgaW4gdGhlIGV4dHJhcyBidW5kbGU6CkBAIC00NzcsMTMgKzUyMCwxOSBAQAogICAgICAgICAvKioKICAgICAgICAgICogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHNldHRpbmcge0BsaW5rIENvbnRlbnRSZXNvbHZlciNTWU5DX0VYVFJBU19JR05PUkVfU0VUVElOR1N9LgogICAgICAgICAgKgotICAgICAgICAgKiBBIHN5bmMgY2FuIHNwZWNpZnkgdGhhdCBzeXN0ZW0gc3luYyBzZXR0aW5ncyBiZSBpZ25vcmVkICh1c2VyIGhhcyB0dXJuZWQgc3luYyBvZmYpLiBOb3QKLSAgICAgICAgICogdmFsaWQgZm9yIHBlcmlvZGljIHN5bmMgYW5kIHdpbGwgdGhyb3cgYW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPiBpbgorICAgICAgICAgKiBOb3QgdmFsaWQgZm9yIHBlcmlvZGljIHN5bmMgYW5kIHdpbGwgdGhyb3cgYW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPiBpbgogICAgICAgICAgKiB7QGxpbmsgI2J1aWxkKCl9LgorICAgICAgICAgKiA8cD5UaHJvd3MgPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPiBpZiBjYWxsZWQgYW5kCisgICAgICAgICAqIHtAbGluayAjc2V0RGlzYWxsb3dNZXRlcmVkKGJvb2xlYW4pfSBoYXMgYmVlbiBzZXQuCisgICAgICAgICAqIAogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0gaWdub3JlU2V0dGluZ3MgdHJ1ZSB0byBpZ25vcmUgdGhlIHN5bmMgYXV0b21hdGljYWxseSBzZXR0aW5ncy4gRGVmYXVsdCBmYWxzZS4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldElnbm9yZVNldHRpbmdzKGJvb2xlYW4gaWdub3JlU2V0dGluZ3MpIHsKKyAgICAgICAgICAgIGlmIChtRGlzYWxsb3dNZXRlcmVkICYmIGlnbm9yZVNldHRpbmdzKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigic2V0SWdub3JlU2V0dGluZ3ModHJ1ZSkgYWZ0ZXIgaGF2aW5nIHNwZWNpZmllZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzeW5jIHNldHRpbmdzIHdpdGggdGhpcyBidWlsZGVyLiIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbUlnbm9yZVNldHRpbmdzID0gaWdub3JlU2V0dGluZ3M7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQpAQCAtNDkxLDEzICs1NDAsMTMgQEAKICAgICAgICAgLyoqCiAgICAgICAgICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBzZXR0aW5nIHtAbGluayBDb250ZW50UmVzb2x2ZXIjU1lOQ19FWFRSQVNfSUdOT1JFX0JBQ0tPRkZ9LgogICAgICAgICAgKgotICAgICAgICAgKiBGb3JjZSB0aGUgc3luYyBzY2hlZHVsaW5nIHByb2Nlc3MgdG8gaWdub3JlIGFueSBiYWNrLW9mZiB0aGF0IHdhcyB0aGUgcmVzdWx0IG9mIGEgZmFpbGVkCi0gICAgICAgICAqIHN5bmMsIGFzIHdlbGwgYXMgdG8gaW52YWxpZGF0ZSBhbnkge0BsaW5rIFN5bmNSZXN1bHQjZGVsYXlVbnRpbH0gdmFsdWUgdGhhdCBtYXkgaGF2ZQotICAgICAgICAgKiBiZWVuIHNldCBieSB0aGUgYWRhcHRlci4gU3VjY2Vzc2l2ZSBmYWlsdXJlcyB3aWxsIG5vdCBob25vciB0aGlzIGZsYWcuIE5vdCB2YWxpZCBmb3IKLSAgICAgICAgICogcGVyaW9kaWMgc3luYyBhbmQgd2lsbCB0aHJvdyBhbiA8Y29kZT5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L2NvZGU+IGluCi0gICAgICAgICAqIHtAbGluayAjYnVpbGQoKX0uCisgICAgICAgICAqIElnbm9yaW5nIGJhY2stb2ZmIHdpbGwgZm9yY2UgdGhlIHN5bmMgc2NoZWR1bGluZyBwcm9jZXNzIHRvIGlnbm9yZSBhbnkgYmFjay1vZmYgdGhhdCB3YXMKKyAgICAgICAgICogdGhlIHJlc3VsdCBvZiBhIGZhaWxlZCBzeW5jLCBhcyB3ZWxsIGFzIHRvIGludmFsaWRhdGUgYW55IHtAbGluayBTeW5jUmVzdWx0I2RlbGF5VW50aWx9CisgICAgICAgICAqIHZhbHVlIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgdGhlIGFkYXB0ZXIuIFN1Y2Nlc3NpdmUgZmFpbHVyZXMgd2lsbCBub3QgaG9ub3IgdGhpcworICAgICAgICAgKiBmbGFnLiBOb3QgdmFsaWQgZm9yIHBlcmlvZGljIHN5bmMgYW5kIHdpbGwgdGhyb3cgYW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPgorICAgICAgICAgKiBpbiB7QGxpbmsgI2J1aWxkKCl9LgogICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gaWdub3JlQmFja29mZiBpZ25vcmUgYmFjay1vZmYgc2V0dGluZ3MuIERlZmF1bHQgZmFsc2UuCisgICAgICAgICAqIEBwYXJhbSBpZ25vcmVCYWNrb2ZmIGlnbm9yZSBiYWNrIG9mZiBzZXR0aW5ncy4gRGVmYXVsdCBmYWxzZS4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldElnbm9yZUJhY2tvZmYoYm9vbGVhbiBpZ25vcmVCYWNrb2ZmKSB7CiAgICAgICAgICAgICBtSWdub3JlQmFja29mZiA9IGlnbm9yZUJhY2tvZmY7CkBAIC01MDcsOSArNTU2LDggQEAKICAgICAgICAgLyoqCiAgICAgICAgICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBzZXR0aW5nIHtAbGluayBDb250ZW50UmVzb2x2ZXIjU1lOQ19FWFRSQVNfTUFOVUFMfS4KICAgICAgICAgICoKLSAgICAgICAgICogQSBtYW51YWwgc3luYyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBjYWxsaW5nIHtAbGluayAjc2V0SWdub3JlQmFja29mZihib29sZWFuKX0KLSAgICAgICAgICogYW5kIHtAbGluayAjc2V0SWdub3JlU2V0dGluZ3MoYm9vbGVhbil9LiBOb3QgdmFsaWQgZm9yIHBlcmlvZGljIHN5bmMgYW5kIHdpbGwgdGhyb3cgYW4KLSAgICAgICAgICogPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPiBpbiB7QGxpbmsgI2J1aWxkKCl9LgorICAgICAgICAgKiBOb3QgdmFsaWQgZm9yIHBlcmlvZGljIHN5bmMgYW5kIHdpbGwgdGhyb3cgYW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPiBpbgorICAgICAgICAgKiB7QGxpbmsgI2J1aWxkKCl9LgogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0gaXNNYW51YWwgVXNlci1pbml0aWF0ZWQgc3luYyBvciBub3QuIERlZmF1bHQgZmFsc2UuCiAgICAgICAgICAqLwpAQCAtNTE5LDcgKzU2Nyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICogQW4gZXhwZWRpdGVkIHN5bmMgcnVucyBpbW1lZGlhdGVseSBhbmQgd2lsbCBwcmVlbXB0IGFub3RoZXIgbm9uLWV4cGVkaXRlZCBydW5uaW5nIHN5bmMuCisgICAgICAgICAqIEFuIGV4cGVkaXRlZCBzeW5jIHJ1bnMgaW1tZWRpYXRlbHkgYW5kIGNhbiBwcmVlbXB0IG90aGVyIG5vbi1leHBlZGl0ZWQgcnVubmluZyBzeW5jcy4KICAgICAgICAgICoKICAgICAgICAgICogTm90IHZhbGlkIGZvciBwZXJpb2RpYyBzeW5jIGFuZCB3aWxsIHRocm93IGFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaW4KICAgICAgICAgICoge0BsaW5rICNidWlsZCgpfS4KQEAgLTUzMiw3ICs1ODAsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIHtAaGlkZX0KICAgICAgICAgICogQHBhcmFtIHByaW9yaXR5IHRoZSBwcmlvcml0eSBvZiB0aGlzIHJlcXVlc3QgYW1vbmcgYWxsIHJlcXVlc3RzIGZyb20gdGhlIGNhbGxpbmcgYXBwLgogICAgICAgICAgKiBSYW5nZSBvZiBbLTIsMl0gc2ltaWxhciB0byBob3cgdGhpcyBpcyBkb25lIHdpdGggbm90aWZpY2F0aW9ucy4KICAgICAgICAgICovCkBAIC01NTIsMTEgKzU5OSwxMSBAQAogICAgICAgICAgKiAgICAgICAgIGJ1aWxkZXIuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgU3luY1JlcXVlc3QgYnVpbGQoKSB7CisgICAgICAgICAgICAvLyBWYWxpZGF0ZSB0aGUgZXh0cmFzIGJ1bmRsZQorICAgICAgICAgICAgQ29udGVudFJlc29sdmVyLnZhbGlkYXRlU3luY0V4dHJhc0J1bmRsZShtQ3VzdG9tRXh0cmFzKTsKICAgICAgICAgICAgIGlmIChtQ3VzdG9tRXh0cmFzID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBtQ3VzdG9tRXh0cmFzID0gbmV3IEJ1bmRsZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGV4dHJhcyBidW5kbGUKLSAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlci52YWxpZGF0ZVN5bmNFeHRyYXNCdW5kbGUobUN1c3RvbUV4dHJhcyk7CiAgICAgICAgICAgICAvLyBDb21iaW5lIGJ1aWxkZXIgZXh0cmEgZmxhZ3MgaW50byB0aGUgY29uZmlnIGJ1bmRsZS4KICAgICAgICAgICAgIG1TeW5jQ29uZmlnRXh0cmFzID0gbmV3IEJ1bmRsZSgpOwogICAgICAgICAgICAgaWYgKG1JZ25vcmVCYWNrb2ZmKSB7CkBAIC01NzUsNTEgKzYyMiwzMyBAQAogICAgICAgICAgICAgICAgIG1TeW5jQ29uZmlnRXh0cmFzLnB1dEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0VYUEVESVRFRCwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobUlzTWFudWFsKSB7Ci0gICAgICAgICAgICAgICAgbVN5bmNDb25maWdFeHRyYXMucHV0Qm9vbGVhbihDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfTUFOVUFMLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBtU3luY0NvbmZpZ0V4dHJhcy5wdXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19JR05PUkVfQkFDS09GRiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgbVN5bmNDb25maWdFeHRyYXMucHV0Qm9vbGVhbihDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfSUdOT1JFX1NFVFRJTkdTLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1TeW5jQ29uZmlnRXh0cmFzLnB1dExvbmcoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0VYUEVDVEVEX1VQTE9BRCwgbVR4Qnl0ZXMpOwogICAgICAgICAgICAgbVN5bmNDb25maWdFeHRyYXMucHV0TG9uZyhDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRVhQRUNURURfRE9XTkxPQUQsIG1SeEJ5dGVzKTsKICAgICAgICAgICAgIG1TeW5jQ29uZmlnRXh0cmFzLnB1dEludChDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfUFJJT1JJVFksIG1Qcmlvcml0eSk7CiAgICAgICAgICAgICBpZiAobVN5bmNUeXBlID09IFNZTkNfVFlQRV9QRVJJT0RJQykgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBwZXJpb2RpYyBzeW5jIGVuc3VyZSB0aGFuIGludmFsaWQgZXh0cmFzIHdlcmUgbm90IHNldC4KLSAgICAgICAgICAgICAgICB2YWxpZGF0ZVBlcmlvZGljRXh0cmFzKG1DdXN0b21FeHRyYXMpOwotICAgICAgICAgICAgICAgIHZhbGlkYXRlUGVyaW9kaWNFeHRyYXMobVN5bmNDb25maWdFeHRyYXMpOwotICAgICAgICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IGFjY291bnQgYW5kIHByb3ZpZGVyIGFyZSBub3QgbnVsbC4KLSAgICAgICAgICAgICAgICBpZiAobUFjY291bnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBY2NvdW50IG11c3Qgbm90IGJlIG51bGwgZm9yIHBlcmlvZGljIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzeW5jLiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobUF1dGhvcml0eSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkF1dGhvcml0eSBtdXN0IG5vdCBiZSBudWxsIGZvciBwZXJpb2RpYyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgc3luYy4iKTsKKyAgICAgICAgICAgICAgICBpZiAoQ29udGVudFJlc29sdmVyLmludmFsaWRQZXJpb2RpY0V4dHJhcyhtQ3VzdG9tRXh0cmFzKSB8fCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlci5pbnZhbGlkUGVyaW9kaWNFeHRyYXMobVN5bmNDb25maWdFeHRyYXMpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgZXh0cmFzIHdlcmUgc2V0Iik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChtU3luY1R5cGUgPT0gU1lOQ19UWVBFX1VOS05PV04pIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNdXN0IGNhbGwgZWl0aGVyIHN5bmNPbmNlKCkgb3Igc3luY1BlcmlvZGljKCkiKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtU3luY1RhcmdldCA9PSBTWU5DX1RBUkdFVF9TRVJWSUNFKSB7CisgICAgICAgICAgICAgICAgaWYgKG1TeW5jQ29uZmlnRXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lOSVRJQUxJWkUsIGZhbHNlKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3Qgc3BlY2lmeSBhbiBpbml0aWFsaXNhdGlvbiBzeW5jIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB0aGF0IHRhcmdldHMgYSBzZXJ2aWNlLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGEgdGFyZ2V0IGZvciB0aGUgc3luYyBoYXMgYmVlbiBzZXQuCiAgICAgICAgICAgICBpZiAobVN5bmNUYXJnZXQgPT0gU1lOQ19UQVJHRVRfVU5LTk9XTikgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk11c3Qgc3BlY2lmeSBhbiBhZGFwdGVyIHdpdGggIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAic2V0U3luY0FkYXB0ZXIoQWNjb3VudCwgU3RyaW5nIik7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTXVzdCBzcGVjaWZ5IGFuIGFkYXB0ZXIgd2l0aCBvbmUgb2YiCisgICAgICAgICAgICAgICAgICAgICsgInNldFN5bmNBZGFwdGVyKENvbXBvbmVudE5hbWUpIG9yIHNldFN5bmNBZGFwdGVyKEFjY291bnQsIFN0cmluZyIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG5ldyBTeW5jUmVxdWVzdCh0aGlzKTsKICAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gdGhyb3cgYW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPiBpZiBhbnkgaWxsZWdhbAotICAgICAgICAgKiBleHRyYXMgd2VyZSBzZXQgZm9yIGEgcGVyaW9kaWMgc3luYy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGV4dHJhcyBidW5kbGUgdG8gdmFsaWRhdGUuCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVQZXJpb2RpY0V4dHJhcyhCdW5kbGUgZXh0cmFzKSB7Ci0gICAgICAgICAgICBpZiAoZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX01BTlVBTCwgZmFsc2UpCi0gICAgICAgICAgICAgICAgICAgIHx8IGV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19ET19OT1RfUkVUUlksIGZhbHNlKQotICAgICAgICAgICAgICAgICAgICB8fCBleHRyYXMuZ2V0Qm9vbGVhbihDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfSUdOT1JFX0JBQ0tPRkYsIGZhbHNlKQotICAgICAgICAgICAgICAgICAgICB8fCBleHRyYXMuZ2V0Qm9vbGVhbihDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfSUdOT1JFX1NFVFRJTkdTLCBmYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgfHwgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lOSVRJQUxJWkUsIGZhbHNlKQotICAgICAgICAgICAgICAgICAgICB8fCBleHRyYXMuZ2V0Qm9vbGVhbihDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRk9SQ0UsIGZhbHNlKQotICAgICAgICAgICAgICAgICAgICB8fCBleHRyYXMuZ2V0Qm9vbGVhbihDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRVhQRURJVEVELCBmYWxzZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIGV4dHJhcyB3ZXJlIHNldCIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIH0gICAKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvU3luY1NlcnZpY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvU3luY1NlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGY5OThjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9TeW5jU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQ7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5TZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CitpbXBvcnQgYW5kcm9pZC5vcy5UcmFjZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLkd1YXJkZWRCeTsKKworLyoqCisgKiBTaW1wbGlmaWVkIEBsaW5rIGFuZHJvaWQuY29udGVudC5BYnN0cmFjdFRocmVhZGVkU3luY0FkYXB0ZXIuIEZvbGRzIHRoYXQKKyAqIGJlaGF2aW91ciBpbnRvIGEgc2VydmljZSB0byB3aGljaCB0aGUgc3lzdGVtIGNhbiBiaW5kIHdoZW4gcmVxdWVzdGluZyBhbgorICogYW5vbnltb3VzIChwcm92aWRlcmxlc3MvYWNjb3VudGxlc3MpIHN5bmMuCisgKiA8cD4KKyAqIEluIG9yZGVyIHRvIHBlcmZvcm0gYW4gYW5vbnltb3VzIHN5bmMgb3BlcmF0aW9uIHlvdSBtdXN0IGV4dGVuZCB0aGlzIHNlcnZpY2UsIGltcGxlbWVudGluZyB0aGUKKyAqIGFic3RyYWN0IG1ldGhvZHMuIFRoaXMgc2VydmljZSBtdXN0IGJlIGRlY2xhcmVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0IGFzIHVzdWFsLiBZb3UKKyAqIGNhbiB1c2UgdGhpcyBzZXJ2aWNlIGZvciBvdGhlciB3b3JrLCBob3dldmVyIHlvdSA8Yj4gbXVzdCBub3QgPC9iPiBvdmVycmlkZSB0aGUgb25CaW5kKCkgbWV0aG9kCisgKiB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcsIHdoaWNoIGxpbWl0cyB0aGUgdXNlZnVsbmVzcyBvZiB0aGlzIHNlcnZpY2UgZm9yIG90aGVyIHdvcmsuCisgKiA8cD5BIHtAbGluayBTeW5jU2VydmljZX0gY2FuIGVpdGhlciBiZSBhY3RpdmUgb3IgaW5hY3RpdmUuIERpZmZlcmVudCB0byBhbgorICoge0BsaW5rIEFic3RyYWN0VGhyZWFkZWRTeW5jQWRhcHRlcn0sIHRoZXJlIGlzIG5vCisgKiB7QGxpbmsgQ29udGVudFJlc29sdmVyI3NldFN5bmNBdXRvbWF0aWNhbGx5KGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgcHJvdmlkZXIsIGJvb2xlYW4gc3luYyl9LAorICogYXMgd2VsbCBhcyBubyBjb25jZXB0IG9mIGluaXRpYWxpc2F0aW9uICh5b3UgY2FuIGhhbmRsZSB5b3VyIG93biBpZiBuZWVkZWQpLgorICoKKyAqIDxwcmU+CisgKiAmbHQ7c2VydmljZSBhbmRyb2lkOm5hbWU9Ii5NeVN5bmNTZXJ2aWNlIi8mZ3Q7CisgKiA8L3ByZT4KKyAqIExpa2UgQGxpbmsgYW5kcm9pZC5jb250ZW50LkFic3RyYWN0VGhyZWFkZWRTeW5jQWRhcHRlciB0aGlzIHNlcnZpY2Ugc3VwcG9ydHMKKyAqIG11bHRpcGxlIHN5bmNzIGF0IHRoZSBzYW1lIHRpbWUuIEVhY2ggaW5jb21pbmcgc3RhcnRTeW5jKCkgd2l0aCBhIHVuaXF1ZSB0YWcKKyAqIHdpbGwgc3Bhd24gYSB0aHJlYWQgdG8gZG8gdGhlIHdvcmsgb2YgdGhhdCBzeW5jLiBJZiBzdGFydFN5bmMoKSBpcyBjYWxsZWQKKyAqIHdpdGggYSB0YWcgdGhhdCBhbHJlYWR5IGV4aXN0cywgYSBTeW5jUmVzdWx0LkFMUkVBRFlfSU5fUFJPR1JFU1MgaXMgcmV0dXJuZWQuCisgKiBSZW1lbWJlciB0aGF0IHlvdXIgc2VydmljZSB3aWxsIHNwYXduIG11bHRpcGxlIHRocmVhZHMgaWYgeW91IHNjaGVkdWxlIG11bHRpcGxlIHN5bmNzCisgKiBhdCBvbmNlLCBzbyBpZiB5b3UgbXV0YXRlIGxvY2FsIG9iamVjdHMgeW91IG11c3QgZW5zdXJlIHN5bmNocm9uaXphdGlvbi4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN5bmNTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJTeW5jU2VydmljZSI7CisKKyAgICBwcml2YXRlIGZpbmFsIFN5bmNBZGFwdGVySW1wbCBtU3luY0FkYXB0ZXIgPSBuZXcgU3luY0FkYXB0ZXJJbXBsKCk7CisKKyAgICAvKiogS2VlcCB0cmFjayBvZiBvbi1nb2luZyBzeW5jcywga2V5ZWQgYnkgYnVuZGxlLiAqLworICAgIEBHdWFyZGVkQnkoIm1TeW5jVGhyZWFkTG9jayIpCisgICAgcHJpdmF0ZSBmaW5hbCBTcGFyc2VBcnJheTxTeW5jVGhyZWFkPgorICAgICAgICAgICAgbVN5bmNUaHJlYWRzID0gbmV3IFNwYXJzZUFycmF5PFN5bmNUaHJlYWQ+KCk7CisgICAgLyoqIExvY2sgb2JqZWN0IGZvciBhY2Nlc3NpbmcgdGhlIFN5bmNUaHJlYWRzIEhhc2hNYXAuICovCisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbVN5bmNUaHJlYWRMb2NrID0gbmV3IE9iamVjdCgpOworICAgIC8qKgorICAgICAqIERlZmF1bHQga2V5IGZvciBpZiB0aGlzIHN5bmMgc2VydmljZSBkb2VzIG5vdCBzdXBwb3J0IHBhcmFsbGVsIG9wZXJhdGlvbnMuIEN1cnJlbnRseSBub3QKKyAgICAgKiBzdXJlIGlmIG51bGwga2V5cyB3aWxsIG1ha2UgaXQgaW50byB0aGUgQXJyYXlNYXAgZm9yIEtMUCwgc28ga2VlcGluZyBvdXIgZGVmYXVsdCBmb3Igbm93LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLRVlfREVGQVVMVCA9IDA7CisgICAgLyoqIElkZW50aWZpZXIgZm9yIHRoaXMgc3luYyBzZXJ2aWNlLiAqLworICAgIHByaXZhdGUgQ29tcG9uZW50TmFtZSBtU2VydmljZUNvbXBvbmVudDsKKworICAgIC8qKiB7QGhpZGV9ICovCisgICAgcHVibGljIElCaW5kZXIgb25CaW5kKEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgbVNlcnZpY2VDb21wb25lbnQgPSBuZXcgQ29tcG9uZW50TmFtZSh0aGlzLCBnZXRDbGFzcygpKTsKKyAgICAgICAgcmV0dXJuIG1TeW5jQWRhcHRlci5hc0JpbmRlcigpOworICAgIH0KKworICAgIC8qKiB7QGhpZGV9ICovCisgICAgcHJpdmF0ZSBjbGFzcyBTeW5jQWRhcHRlckltcGwgZXh0ZW5kcyBJU3luY1NlcnZpY2VBZGFwdGVyLlN0dWIgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc3RhcnRTeW5jKElTeW5jQ29udGV4dCBzeW5jQ29udGV4dCwgQnVuZGxlIGV4dHJhcykgeworICAgICAgICAgICAgLy8gV3JhcCB0aGUgcHJvdmlkZWQgU3luYyBDb250ZXh0IGJlY2F1c2UgaXQgbWF5IGdvIGF3YXkgYnkgdGhlIHRpbWUKKyAgICAgICAgICAgIC8vIHdlIGNhbGwgaXQuCisgICAgICAgICAgICBmaW5hbCBTeW5jQ29udGV4dCBzeW5jQ29udGV4dENsaWVudCA9IG5ldyBTeW5jQ29udGV4dChzeW5jQ29udGV4dCk7CisgICAgICAgICAgICBib29sZWFuIGFscmVhZHlJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgICAgICBmaW5hbCBpbnQgZXh0cmFzQXNLZXkgPSBleHRyYXNUb0tleShleHRyYXMpOworICAgICAgICAgICAgc3luY2hyb25pemVkIChtU3luY1RocmVhZExvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAobVN5bmNUaHJlYWRzLmdldChleHRyYXNBc0tleSkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgInN0YXJ0aW5nIHN5bmMgZm9yIDogIiArIG1TZXJ2aWNlQ29tcG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBzeW5jLgorICAgICAgICAgICAgICAgICAgICBTeW5jVGhyZWFkIHN5bmNUaHJlYWQgPSBuZXcgU3luY1RocmVhZChzeW5jQ29udGV4dENsaWVudCwgZXh0cmFzKTsKKyAgICAgICAgICAgICAgICAgICAgbVN5bmNUaHJlYWRzLnB1dChleHRyYXNBc0tleSwgc3luY1RocmVhZCk7CisgICAgICAgICAgICAgICAgICAgIHN5bmNUaHJlYWQuc3RhcnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCB3YW50IHRvIGNhbGwgYmFjayB0byBTeW5jTWFuYWdlciB3aGlsZSBzdGlsbAorICAgICAgICAgICAgICAgICAgICAvLyBob2xkaW5nIGxvY2suCisgICAgICAgICAgICAgICAgICAgIGFscmVhZHlJblByb2dyZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYWxyZWFkeUluUHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgICAgICBzeW5jQ29udGV4dENsaWVudC5vbkZpbmlzaGVkKFN5bmNSZXN1bHQuQUxSRUFEWV9JTl9QUk9HUkVTUyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVXNlZCBieSB0aGUgU00gdG8gY2FuY2VsIGEgc3BlY2lmaWMgc3luYyB1c2luZyB0aGUKKyAgICAgICAgICogY29tLmFuZHJvaWQuc2VydmVyLmNvbnRlbnQuU3luY01hbmFnZXIuQWN0aXZlU3luY0NvbnRleHQgYXMgYSBoYW5kbGUuCisgICAgICAgICAqLworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgY2FuY2VsU3luYyhJU3luY0NvbnRleHQgc3luY0NvbnRleHQpIHsKKyAgICAgICAgICAgIFN5bmNUaHJlYWQgcnVubmluZ1N5bmMgPSBudWxsOworICAgICAgICAgICAgc3luY2hyb25pemVkIChtU3luY1RocmVhZExvY2spIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1TeW5jVGhyZWFkcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBTeW5jVGhyZWFkIHRocmVhZCA9IG1TeW5jVGhyZWFkcy52YWx1ZUF0KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAodGhyZWFkLm1TeW5jQ29udGV4dC5nZXRTeW5jQ29udGV4dEJpbmRlcigpID09IHN5bmNDb250ZXh0LmFzQmluZGVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdTeW5jID0gdGhyZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocnVubmluZ1N5bmMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJ1bm5pbmdTeW5jLmludGVycnVwdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogCisgICAgICogQHBhcmFtIGV4dHJhcyBCdW5kbGUgZm9yIHdoaWNoIHRvIGNvbXB1dGUgaGFzaAorICAgICAqIEByZXR1cm4gYW4gaW50ZWdlciBoYXNoIHRoYXQgaXMgZXF1YWwgdG8gdGhhdCBvZiBhbm90aGVyIGJ1bmRsZSBpZiB0aGV5IGJvdGggY29udGFpbiB0aGUKKyAgICAgKiBzYW1lIGtleSAtPiB2YWx1ZSBtYXBwaW5ncywgaG93ZXZlciwgbm90IG5lY2Vzc2FyaWx5IGluIG9yZGVyLgorICAgICAqIEJhc2VkIG9uIHRoZSB0b1N0cmluZygpIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBtYXBwZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZXh0cmFzVG9LZXkoQnVuZGxlIGV4dHJhcykgeworICAgICAgICBpbnQgaGFzaCA9IEtFWV9ERUZBVUxUOyAvLyBFbXB0eSBidW5kbGUsIG9yIG5vIHBhcmFsbGVsIG9wZXJhdGlvbnMgZW5hYmxlZC4KKyAgICAgICAgaWYgKHBhcmFsbGVsU3luY3NFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIGtleSA6IGV4dHJhcy5rZXlTZXQoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBtYXBwaW5nID0ga2V5ICsgIiAiICsgZXh0cmFzLmdldChrZXkpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaGFzaCArPSBtYXBwaW5nLmhhc2hDb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0BoaWRlfQorICAgICAqIFNpbWlsYXIgdG8ge0BsaW5rIGFuZHJvaWQuY29udGVudC5BYnN0cmFjdFRocmVhZGVkU3luY0FkYXB0ZXIuU3luY1RocmVhZH0uIEhvd2V2ZXIgd2hpbGUKKyAgICAgKiB0aGUgQVRTQSBjb25zaWRlcnMgYW4gYWxyZWFkeSBpbi1wcm9ncmVzcyBzeW5jIHRvIGJlIGlmIHRoZSBhY2NvdW50IHByb3ZpZGVkIGlzIGN1cnJlbnRseQorICAgICAqIHN5bmNpbmcsIHRoaXMgYW5vbnltb3VzIHN5bmMgaGFzIG5vIG5vdGlvbiBvZiBhY2NvdW50IGFuZCBjb25zaWRlcnMgYSBzeW5jIHVuaXF1ZSBpZiB0aGUKKyAgICAgKiBwcm92aWRlZCBidW5kbGUgaXMgZGlmZmVyZW50LgorICAgICAqLworICAgIHByaXZhdGUgY2xhc3MgU3luY1RocmVhZCBleHRlbmRzIFRocmVhZCB7CisgICAgICAgIHByaXZhdGUgZmluYWwgU3luY0NvbnRleHQgbVN5bmNDb250ZXh0OworICAgICAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtRXh0cmFzOworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtVGhyZWFkc0tleTsKKworICAgICAgICBwdWJsaWMgU3luY1RocmVhZChTeW5jQ29udGV4dCBzeW5jQ29udGV4dCwgQnVuZGxlIGV4dHJhcykgeworICAgICAgICAgICAgbVN5bmNDb250ZXh0ID0gc3luY0NvbnRleHQ7CisgICAgICAgICAgICBtRXh0cmFzID0gZXh0cmFzOworICAgICAgICAgICAgbVRocmVhZHNLZXkgPSBleHRyYXNUb0tleShleHRyYXMpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIFByb2Nlc3Muc2V0VGhyZWFkUHJpb3JpdHkoUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfQkFDS0dST1VORCk7CisKKyAgICAgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVHJhY2UuVFJBQ0VfVEFHX1NZTkNfTUFOQUdFUiwgZ2V0QXBwbGljYXRpb24oKS5nZXRQYWNrYWdlTmFtZSgpKTsKKworICAgICAgICAgICAgU3luY1Jlc3VsdCBzeW5jUmVzdWx0ID0gbmV3IFN5bmNSZXN1bHQoKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWYgKGlzQ2FuY2VsbGVkKCkpIHJldHVybjsKKyAgICAgICAgICAgICAgICAvLyBSdW4gdGhlIHN5bmMuCisgICAgICAgICAgICAgICAgU3luY1NlcnZpY2UudGhpcy5vblBlcmZvcm1TeW5jKG1FeHRyYXMsIHN5bmNSZXN1bHQpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfU1lOQ19NQU5BR0VSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzQ2FuY2VsbGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbVN5bmNDb250ZXh0Lm9uRmluaXNoZWQoc3luY1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFN5bmNocm9uaXplIHNvIHRoYXQgdGhlIGFzc2lnbm1lbnQgd2lsbCBiZSBzZWVuIGJ5IG90aGVyCisgICAgICAgICAgICAgICAgLy8gdGhyZWFkcyB0aGF0IGFsc28gc3luY2hyb25pemUgYWNjZXNzZXMgdG8gbVN5bmNUaHJlYWRzLgorICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN5bmNUaHJlYWRMb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIG1TeW5jVGhyZWFkcy5yZW1vdmUobVRocmVhZHNLZXkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc0NhbmNlbGxlZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBUaHJlYWQuY3VycmVudFRocmVhZCgpLmlzSW50ZXJydXB0ZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEluaXRpYXRlIGFuIGFub255bW91cyBzeW5jIHVzaW5nIHRoaXMgc2VydmljZS4gU3luY0FkYXB0ZXItc3BlY2lmaWMKKyAgICAgKiBwYXJhbWV0ZXJzIG1heSBiZSBzcGVjaWZpZWQgaW4gZXh0cmFzLCB3aGljaCBpcyBndWFyYW50ZWVkIHRvIG5vdCBiZQorICAgICAqIG51bGwuCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgb25QZXJmb3JtU3luYyhCdW5kbGUgZXh0cmFzLCBTeW5jUmVzdWx0IHN5bmNSZXN1bHQpOworCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBpbmRpY2F0ZWQgd2hldGhlciB5b3Ugd2FudCB0byBzdXBwb3J0IHBhcmFsbGVsIHN5bmNzLgorICAgICAqIDxwPklmIHlvdSBvdmVycmlkZSBhbmQgcmV0dXJuIHRydWUgbXVsdGlwbGUgdGhyZWFkcyB3aWxsIGJlIHNwYXduZWQgd2l0aGluIHlvdXIgU2VydmljZSB0bworICAgICAqIGhhbmRsZSBlYWNoIGNvbmN1cnJlbnQgc3luYyByZXF1ZXN0LgorICAgICAqCisgICAgICogQHJldHVybiBmYWxzZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgc2VydmljZSBkb2VzIG5vdCBzdXBwb3J0IHBhcmFsbGVsIG9wZXJhdGlvbnMgYnkgZGVmYXVsdC4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwYXJhbGxlbFN5bmNzRW5hYmxlZCgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vQWN0aXZpdHlJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0FjdGl2aXR5SW5mby5qYXZhCmluZGV4IGI4YWMzYmYuLjQwMjc1ZDggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vQWN0aXZpdHlJbmZvLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9BY3Rpdml0eUluZm8uamF2YQpAQCAtMTYsMTEgKzE2LDE1IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnBtOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5QcmludGVyOwogCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKwogLyoqCiAgKiBJbmZvcm1hdGlvbiB5b3UgY2FuIHJldHJpZXZlIGFib3V0IGEgcGFydGljdWxhciBhcHBsaWNhdGlvbgogICogYWN0aXZpdHkgb3IgcmVjZWl2ZXIuIFRoaXMgY29ycmVzcG9uZHMgdG8gaW5mb3JtYXRpb24gY29sbGVjdGVkCkBAIC0yMTIsNiArMjE2LDI4IEBACiAgICAgICovCiAgICAgcHVibGljIGludCBmbGFnczsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoeworICAgICAgICAgICAgU0NSRUVOX09SSUVOVEFUSU9OX1VOU1BFQ0lGSUVELAorICAgICAgICAgICAgU0NSRUVOX09SSUVOVEFUSU9OX0xBTkRTQ0FQRSwKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9QT1JUUkFJVCwKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9VU0VSLAorICAgICAgICAgICAgU0NSRUVOX09SSUVOVEFUSU9OX0JFSElORCwKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9TRU5TT1IsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fTk9TRU5TT1IsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fU0VOU09SX0xBTkRTQ0FQRSwKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9TRU5TT1JfUE9SVFJBSVQsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fUkVWRVJTRV9MQU5EU0NBUEUsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fUkVWRVJTRV9QT1JUUkFJVCwKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9GVUxMX1NFTlNPUiwKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9VU0VSX0xBTkRTQ0FQRSwKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9VU0VSX1BPUlRSQUlULAorICAgICAgICAgICAgU0NSRUVOX09SSUVOVEFUSU9OX0ZVTExfVVNFUiwKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9MT0NLRUQKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBTY3JlZW5PcmllbnRhdGlvbiB7fQorCiAgICAgLyoqCiAgICAgICogQ29uc3RhbnQgY29ycmVzcG9uZGluZyB0byA8Y29kZT51bnNwZWNpZmllZDwvY29kZT4gaW4KICAgICAgKiB0aGUge0BsaW5rIGFuZHJvaWQuUi5hdHRyI3NjcmVlbk9yaWVudGF0aW9ufSBhdHRyaWJ1dGUuCkBAIC0zMjMsNiArMzQ5LDcgQEAKICAgICAgKiB7QGxpbmsgI1NDUkVFTl9PUklFTlRBVElPTl9GVUxMX1VTRVJ9LAogICAgICAqIHtAbGluayAjU0NSRUVOX09SSUVOVEFUSU9OX0xPQ0tFRH0sCiAgICAgICovCisgICAgQFNjcmVlbk9yaWVudGF0aW9uCiAgICAgcHVibGljIGludCBzY3JlZW5PcmllbnRhdGlvbiA9IFNDUkVFTl9PUklFTlRBVElPTl9VTlNQRUNJRklFRDsKICAgICAKICAgICAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vRmVhdHVyZUluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vRmVhdHVyZUluZm8uamF2YQppbmRleCA4OTM5NGY5Li5kOTE5ZmMzIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0ZlYXR1cmVJbmZvLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9GZWF0dXJlSW5mby5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I7CiAKIC8qKgogICogQSBzaW5nbGUgZmVhdHVyZSB0aGF0IGNhbiBiZSByZXF1ZXN0ZWQgYnkgYW4gYXBwbGljYXRpb24uIFRoaXMgY29ycmVzcG9uZHMKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXIuamF2YQppbmRleCBjOTdjMmI4Li4wMTkyYTMwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlTWFuYWdlci5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnBtOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2RrQ29uc3RhbnQ7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlNka0NvbnN0YW50LlNka0NvbnN0YW50VHlwZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKQEAgLTMzLDYgKzM0LDggQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCkBAIC0xOTAsNiArMTkzLDExIEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfREVGQVVMVF9PTkxZICAgPSAweDAwMDEwMDAwOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7UEVSTUlTU0lPTl9HUkFOVEVELCBQRVJNSVNTSU9OX0RFTklFRH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFBlcm1pc3Npb25SZXN1bHQge30KKwogICAgIC8qKgogICAgICAqIFBlcm1pc3Npb24gY2hlY2sgcmVzdWx0OiB0aGlzIGlzIHJldHVybmVkIGJ5IHtAbGluayAjY2hlY2tQZXJtaXNzaW9ufQogICAgICAqIGlmIHRoZSBwZXJtaXNzaW9uIGhhcyBiZWVuIGdyYW50ZWQgdG8gdGhlIGdpdmVuIHBhY2thZ2UuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1htbFNlcmlhbGl6ZXJBbmRQYXJzZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vWG1sU2VyaWFsaXplckFuZFBhcnNlci5qYXZhCmluZGV4IDkzNWZjMDIuLjIwY2I2MWMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vWG1sU2VyaWFsaXplckFuZFBhcnNlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vWG1sU2VyaWFsaXplckFuZFBhcnNlci5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sU2VyaWFsaXplcjsKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlci5qYXZhCmluZGV4IDQ4MjExYjUuLmM3N2NlMGQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlci5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIGFuZHJvaWQuY29udGVudC5yZXM7CiAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGFuZHJvaWQub3MuVHJhY2U7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0LmphdmEKaW5kZXggYmQyM2RiNC4uNDMxMjI2YSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdC5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnJlczsKIAoraW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3I7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5BcnJheVV0aWxzOwogCiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKQEAgLTI1OSw3ICsyNjAsMTcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRlZnVsKCkgewogICAgICAgICByZXR1cm4gbVN0YXRlU3BlY3MubGVuZ3RoID4gMTsKICAgICB9Ci0gICAgCisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc09wYXF1ZSgpIHsKKyAgICAgICAgZmluYWwgaW50IG4gPSBtQ29sb3JzLmxlbmd0aDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChDb2xvci5hbHBoYShtQ29sb3JzW2ldKSAhPSAweEZGKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHVybiB0aGUgY29sb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBzZXQgb2Yge0BsaW5rIGFuZHJvaWQudmlldy5WaWV3fSBzdGF0ZXMuCiAgICAgICoKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzLmphdmEKaW5kZXggY2Q1YjVkMmYuLmViNDFlZTllIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMuamF2YQpAQCAtMzYsNyArMzYsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb25nU3BhcnNlQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXlBZGp1c3RtZW50czsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXkuamF2YQppbmRleCA4M2Q0OGFhLi40Yjk2ODAwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9UeXBlZEFycmF5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9yZXMvVHlwZWRBcnJheS5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnJlczsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2RhdGFiYXNlL0N1cnNvclRvQnVsa0N1cnNvckFkYXB0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2RhdGFiYXNlL0N1cnNvclRvQnVsa0N1cnNvckFkYXB0b3IuamF2YQppbmRleCA4MmE2MWQ0Li43ZGNmYWUyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3JUb0J1bGtDdXJzb3JBZGFwdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yVG9CdWxrQ3Vyc29yQWRhcHRvci5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlT3BlbkhlbHBlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZU9wZW5IZWxwZXIuamF2YQppbmRleCA0MzFlY2EyLi4yZGQ0ODAwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlT3BlbkhlbHBlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVPcGVuSGVscGVyLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuRGF0YWJhc2VFcnJvckhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5EZWZhdWx0RGF0YWJhc2VFcnJvckhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlRGF0YWJhc2UuQ3Vyc29yRmFjdG9yeTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9kZG0vRGRtSGFuZGxlTmF0aXZlSGVhcC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvZGRtL0RkbUhhbmRsZU5hdGl2ZUhlYXAuamF2YQppbmRleCA2YmQ2NWFhLi43NzVjNTcwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9kZG0vRGRtSGFuZGxlTmF0aXZlSGVhcC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2RkbS9EZG1IYW5kbGVOYXRpdmVIZWFwLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLmhhcm1vbnkuZGFsdmlrLmRkbWMuQ2h1bmtIYW5kbGVyOwogaW1wb3J0IG9yZy5hcGFjaGUuaGFybW9ueS5kYWx2aWsuZGRtYy5EZG1TZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogCiAvKioKICAqIEhhbmRsZSB0aHJlYWQtcmVsYXRlZCB0cmFmZmljLgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvZGRtL0RkbUhhbmRsZVByb2ZpbGluZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvZGRtL0RkbUhhbmRsZVByb2ZpbGluZy5qYXZhCmluZGV4IDUzNzc2M2RhLi5jY2U0ZGQyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9kZG0vRGRtSGFuZGxlUHJvZmlsaW5nLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvZGRtL0RkbUhhbmRsZVByb2ZpbGluZy5qYXZhCkBAIC0yMSw3ICsyMSw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5oYXJtb255LmRhbHZpay5kZG1jLkRkbVNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkRlYnVnOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVPdmVybGF5Vmlldy5qYXZhCmluZGV4IDJkNDdmMjguLjZlM2EwMGYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlT3ZlcmxheVZpZXcuamF2YQpAQCAtMTM0LDExICsxMzQsMTYgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmdlc3R1cmVPdmVybGF5Vmlld1N0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgR2VzdHVyZU92ZXJsYXlWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgR2VzdHVyZU92ZXJsYXlWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5HZXN0dXJlT3ZlcmxheVZpZXcsIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgR2VzdHVyZU92ZXJsYXlWaWV3KAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5HZXN0dXJlT3ZlcmxheVZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIG1HZXN0dXJlU3Ryb2tlV2lkdGggPSBhLmdldEZsb2F0KFIuc3R5bGVhYmxlLkdlc3R1cmVPdmVybGF5Vmlld19nZXN0dXJlU3Ryb2tlV2lkdGgsCiAgICAgICAgICAgICAgICAgbUdlc3R1cmVTdHJva2VXaWR0aCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5qYXZhCmluZGV4IDExMTA2MmQuLjZlMmEwOTkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5qYXZhCkBAIC00Niw3ICs0Niw2IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrOwogCiAvKioKICAqIFRoZSBDYW1lcmEgY2xhc3MgaXMgdXNlZCB0byBzZXQgaW1hZ2UgY2FwdHVyZSBzZXR0aW5ncywgc3RhcnQvc3RvcCBwcmV2aWV3LApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvU2VyaWFsTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvU2VyaWFsTWFuYWdlci5qYXZhCmluZGV4IGM1ZTFjMmIuLmUwNjgwYmYyMiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvU2VyaWFsTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL1NlcmlhbE1hbmFnZXIuamF2YQpAQCAtMTcsMTYgKzE3LDEyIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5oYXJkd2FyZTsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiAKIC8qKgogICogQGhpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL1NlcmlhbFBvcnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL1NlcmlhbFBvcnQuamF2YQppbmRleCBmNTBjZGVmLi41ZDgzZDljIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9TZXJpYWxQb3J0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvU2VyaWFsUG9ydC5qYXZhCkBAIC0xNywxNCArMTcsOSBAQAogcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlOwogCiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwogCiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDaGFyYWN0ZXJpc3RpY3MuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmphdmEKaW5kZXggYTM4YmVlYy4uY2RlOTc0MCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDaGFyYWN0ZXJpc3RpY3MuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNoYXJhY3RlcmlzdGljcy5qYXZhCkBAIC0xMjYsMjA2ICsxMjYsMjIyIEBACiAgICAgICogbW9kaWZ5IHRoZSBjb21tZW50IGJsb2NrcyBhdCB0aGUgc3RhcnQgb3IgZW5kLgogICAgICAqfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+Ki8KIAorCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hpY2ggc2V0IG9mIGFudGliYW5kaW5nIG1vZGVzIGFyZQotICAgICAqIHN1cHBvcnRlZAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGUgc2V0IG9mIGF1dG8tZXhwb3N1cmUgYW50aWJhbmRpbmcgbW9kZXMgdGhhdCBhcmUKKyAgICAgKiBzdXBwb3J0ZWQgYnkgdGhpcyBjYW1lcmEgZGV2aWNlLjwvcD4KKyAgICAgKiA8cD5Ob3QgYWxsIG9mIHRoZSBhdXRvLWV4cG9zdXJlIGFudGktYmFuZGluZyBtb2RlcyBtYXkgYmUKKyAgICAgKiBzdXBwb3J0ZWQgYnkgYSBnaXZlbiBjYW1lcmEgZGV2aWNlLiBUaGlzIGZpZWxkIGxpc3RzIHRoZQorICAgICAqIHZhbGlkIGFudGktYmFuZGluZyBtb2RlcyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBtYXkgcmVxdWVzdAorICAgICAqIGZvciB0aGlzIGNhbWVyYSBkZXZpY2U7IHRoZXkgbXVzdCBpbmNsdWRlIEFVVE8uPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGJ5dGVbXT4gQ09OVFJPTF9BRV9BVkFJTEFCTEVfQU5USUJBTkRJTkdfTU9ERVMgPQogICAgICAgICAgICAgbmV3IEtleTxieXRlW10+KCJhbmRyb2lkLmNvbnRyb2wuYWVBdmFpbGFibGVBbnRpYmFuZGluZ01vZGVzIiwgYnl0ZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgZnJhbWUgcmF0ZSByYW5nZXMgc3VwcG9ydGVkIGJ5IHRoZQotICAgICAqIEFFIGFsZ29yaXRobS9oYXJkd2FyZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGUgc2V0IG9mIGF1dG8tZXhwb3N1cmUgbW9kZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMKKyAgICAgKiBjYW1lcmEgZGV2aWNlLjwvcD4KKyAgICAgKiA8cD5Ob3QgYWxsIHRoZSBhdXRvLWV4cG9zdXJlIG1vZGVzIG1heSBiZSBzdXBwb3J0ZWQgYnkgYQorICAgICAqIGdpdmVuIGNhbWVyYSBkZXZpY2UsIGVzcGVjaWFsbHkgaWYgbm8gZmxhc2ggdW5pdCBpcworICAgICAqIGF2YWlsYWJsZS4gVGhpcyBlbnRyeSBsaXN0cyB0aGUgdmFsaWQgbW9kZXMgZm9yCisgICAgICoge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTU9ERSBhbmRyb2lkLmNvbnRyb2wuYWVNb2RlfSBmb3IgdGhpcyBjYW1lcmEgZGV2aWNlLjwvcD4KKyAgICAgKiA8cD5BbGwgY2FtZXJhIGRldmljZXMgc3VwcG9ydCBPTiwgYW5kIGFsbCBjYW1lcmEgZGV2aWNlcyB3aXRoCisgICAgICogZmxhc2ggdW5pdHMgc3VwcG9ydCBPTl9BVVRPX0ZMQVNIIGFuZAorICAgICAqIE9OX0FMV0FZU19GTEFTSC48L3A+CisgICAgICogPHA+RnVsbC1jYXBhYmlsaXR5IGNhbWVyYSBkZXZpY2VzIGFsd2F5cyBzdXBwb3J0IE9GRiBtb2RlLAorICAgICAqIHdoaWNoIGVuYWJsZXMgYXBwbGljYXRpb24gY29udHJvbCBvZiBjYW1lcmEgZXhwb3N1cmUgdGltZSwKKyAgICAgKiBzZW5zaXRpdml0eSwgYW5kIGZyYW1lIGR1cmF0aW9uLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9NT0RFCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Ynl0ZVtdPiBDT05UUk9MX0FFX0FWQUlMQUJMRV9NT0RFUyA9CisgICAgICAgICAgICBuZXcgS2V5PGJ5dGVbXT4oImFuZHJvaWQuY29udHJvbC5hZUF2YWlsYWJsZU1vZGVzIiwgYnl0ZVtdLmNsYXNzKTsKKworICAgIC8qKgorICAgICAqIDxwPkxpc3Qgb2YgZnJhbWUgcmF0ZSByYW5nZXMgc3VwcG9ydGVkIGJ5IHRoZQorICAgICAqIEFFIGFsZ29yaXRobS9oYXJkd2FyZTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxpbnRbXT4gQ09OVFJPTF9BRV9BVkFJTEFCTEVfVEFSR0VUX0ZQU19SQU5HRVMgPQogICAgICAgICAgICAgbmV3IEtleTxpbnRbXT4oImFuZHJvaWQuY29udHJvbC5hZUF2YWlsYWJsZVRhcmdldEZwc1JhbmdlcyIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE1heGltdW0gYW5kIG1pbmltdW0gZXhwb3N1cmUgY29tcGVuc2F0aW9uCisgICAgICogPHA+TWF4aW11bSBhbmQgbWluaW11bSBleHBvc3VyZSBjb21wZW5zYXRpb24KICAgICAgKiBzZXR0aW5nLCBpbiBjb3VudHMgb2YKLSAgICAgKiBhbmRyb2lkLmNvbnRyb2wuYWVDb21wZW5zYXRpb25TdGVwU2l6ZQotICAgICAqIDwvcD4KKyAgICAgKiBhbmRyb2lkLmNvbnRyb2wuYWVDb21wZW5zYXRpb25TdGVwU2l6ZTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxpbnRbXT4gQ09OVFJPTF9BRV9DT01QRU5TQVRJT05fUkFOR0UgPQogICAgICAgICAgICAgbmV3IEtleTxpbnRbXT4oImFuZHJvaWQuY29udHJvbC5hZUNvbXBlbnNhdGlvblJhbmdlIiwgaW50W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogU21hbGxlc3Qgc3RlcCBieSB3aGljaCBleHBvc3VyZSBjb21wZW5zYXRpb24KLSAgICAgKiBjYW4gYmUgY2hhbmdlZAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5TbWFsbGVzdCBzdGVwIGJ5IHdoaWNoIGV4cG9zdXJlIGNvbXBlbnNhdGlvbgorICAgICAqIGNhbiBiZSBjaGFuZ2VkPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PFJhdGlvbmFsPiBDT05UUk9MX0FFX0NPTVBFTlNBVElPTl9TVEVQID0KICAgICAgICAgICAgIG5ldyBLZXk8UmF0aW9uYWw+KCJhbmRyb2lkLmNvbnRyb2wuYWVDb21wZW5zYXRpb25TdGVwIiwgUmF0aW9uYWwuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiBBRiBtb2RlcyB0aGF0IGNhbiBiZQotICAgICAqIHNlbGVjdGVkCi0gICAgICogPC9wPgorICAgICAqIDxwPkxpc3Qgb2YgQUYgbW9kZXMgdGhhdCBjYW4gYmUKKyAgICAgKiBzZWxlY3RlZCB3aXRoIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX01PREUgYW5kcm9pZC5jb250cm9sLmFmTW9kZX0uPC9wPgorICAgICAqIDxwPk5vdCBhbGwgdGhlIGF1dG8tZm9jdXMgbW9kZXMgbWF5IGJlIHN1cHBvcnRlZCBieSBhCisgICAgICogZ2l2ZW4gY2FtZXJhIGRldmljZS4gVGhpcyBlbnRyeSBsaXN0cyB0aGUgdmFsaWQgbW9kZXMgZm9yCisgICAgICoge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUZfTU9ERSBhbmRyb2lkLmNvbnRyb2wuYWZNb2RlfSBmb3IgdGhpcyBjYW1lcmEgZGV2aWNlLjwvcD4KKyAgICAgKiA8cD5BbGwgY2FtZXJhIGRldmljZXMgd2lsbCBzdXBwb3J0IE9GRiBtb2RlLCBhbmQgYWxsIGNhbWVyYSBkZXZpY2VzIHdpdGgKKyAgICAgKiBhZGp1c3RhYmxlIGZvY3VzZXIgdW5pdHMgKDxjb2RlPntAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjTEVOU19JTkZPX01JTklNVU1fRk9DVVNfRElTVEFOQ0UgYW5kcm9pZC5sZW5zLmluZm8ubWluaW11bUZvY3VzRGlzdGFuY2V9ICZndDsgMDwvY29kZT4pCisgICAgICogd2lsbCBzdXBwb3J0IEFVVE8gbW9kZS48L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUZfTU9ERQorICAgICAqIEBzZWUgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI0xFTlNfSU5GT19NSU5JTVVNX0ZPQ1VTX0RJU1RBTkNFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Ynl0ZVtdPiBDT05UUk9MX0FGX0FWQUlMQUJMRV9NT0RFUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGJ5dGVbXT4oImFuZHJvaWQuY29udHJvbC5hZkF2YWlsYWJsZU1vZGVzIiwgYnl0ZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIHdoYXQgc3Vic2V0IG9mIHRoZSBmdWxsIGNvbG9yIGVmZmVjdCBlbnVtCi0gICAgICogbGlzdCBpcyBzdXBwb3J0ZWQKLSAgICAgKiA8L3A+CisgICAgICogPHA+d2hhdCBzdWJzZXQgb2YgdGhlIGZ1bGwgY29sb3IgZWZmZWN0IGVudW0KKyAgICAgKiBsaXN0IGlzIHN1cHBvcnRlZDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxieXRlW10+IENPTlRST0xfQVZBSUxBQkxFX0VGRkVDVFMgPQogICAgICAgICAgICAgbmV3IEtleTxieXRlW10+KCJhbmRyb2lkLmNvbnRyb2wuYXZhaWxhYmxlRWZmZWN0cyIsIGJ5dGVbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiB3aGF0IHN1YnNldCBvZiB0aGUgc2NlbmUgbW9kZSBlbnVtIGxpc3QgaXMKLSAgICAgKiBzdXBwb3J0ZWQuCi0gICAgICogPC9wPgorICAgICAqIDxwPndoYXQgc3Vic2V0IG9mIHRoZSBzY2VuZSBtb2RlIGVudW0gbGlzdCBpcworICAgICAqIHN1cHBvcnRlZC48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Ynl0ZVtdPiBDT05UUk9MX0FWQUlMQUJMRV9TQ0VORV9NT0RFUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGJ5dGVbXT4oImFuZHJvaWQuY29udHJvbC5hdmFpbGFibGVTY2VuZU1vZGVzIiwgYnl0ZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgdmlkZW8gc3RhYmlsaXphdGlvbiBtb2RlcyB0aGF0IGNhbgotICAgICAqIGJlIHN1cHBvcnRlZAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIHZpZGVvIHN0YWJpbGl6YXRpb24gbW9kZXMgdGhhdCBjYW4KKyAgICAgKiBiZSBzdXBwb3J0ZWQ8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Ynl0ZVtdPiBDT05UUk9MX0FWQUlMQUJMRV9WSURFT19TVEFCSUxJWkFUSU9OX01PREVTID0KICAgICAgICAgICAgIG5ldyBLZXk8Ynl0ZVtdPigiYW5kcm9pZC5jb250cm9sLmF2YWlsYWJsZVZpZGVvU3RhYmlsaXphdGlvbk1vZGVzIiwgYnl0ZVtdLmNsYXNzKTsKIAogICAgIC8qKgorICAgICAqIDxwPlRoZSBzZXQgb2YgYXV0by13aGl0ZS1iYWxhbmNlIG1vZGVzICh7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BV0JfTU9ERSBhbmRyb2lkLmNvbnRyb2wuYXdiTW9kZX0pCisgICAgICogdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgY2FtZXJhIGRldmljZS48L3A+CisgICAgICogPHA+Tm90IGFsbCB0aGUgYXV0by13aGl0ZS1iYWxhbmNlIG1vZGVzIG1heSBiZSBzdXBwb3J0ZWQgYnkgYQorICAgICAqIGdpdmVuIGNhbWVyYSBkZXZpY2UuIFRoaXMgZW50cnkgbGlzdHMgdGhlIHZhbGlkIG1vZGVzIGZvcgorICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9NT0RFIGFuZHJvaWQuY29udHJvbC5hd2JNb2RlfSBmb3IgdGhpcyBjYW1lcmEgZGV2aWNlLjwvcD4KKyAgICAgKiA8cD5BbGwgY2FtZXJhIGRldmljZXMgd2lsbCBzdXBwb3J0IE9OIG1vZGUuPC9wPgorICAgICAqIDxwPkZ1bGwtY2FwYWJpbGl0eSBjYW1lcmEgZGV2aWNlcyB3aWxsIGFsd2F5cyBzdXBwb3J0IE9GRiBtb2RlLAorICAgICAqIHdoaWNoIGVuYWJsZXMgYXBwbGljYXRpb24gY29udHJvbCBvZiB3aGl0ZSBiYWxhbmNlLCBieSB1c2luZworICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX1RSQU5TRk9STSBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi50cmFuc2Zvcm19IGFuZCB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9HQUlOUyBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5nYWluc30oe0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fTU9ERSBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5tb2RlfSBtdXN0IGJlIHNldCB0byBUUkFOU0ZPUk1fTUFUUklYKS48L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fR0FJTlMKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fTU9ERQorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9UUkFOU0ZPUk0KKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQVdCX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxieXRlW10+IENPTlRST0xfQVdCX0FWQUlMQUJMRV9NT0RFUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGJ5dGVbXT4oImFuZHJvaWQuY29udHJvbC5hd2JBdmFpbGFibGVNb2RlcyIsIGJ5dGVbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBGb3IgQUUsIEFXQiwgYW5kIEFGLCBob3cgbWFueSBpbmRpdmlkdWFsCi0gICAgICogcmVnaW9ucyBjYW4gYmUgbGlzdGVkIGZvciBtZXRlcmluZz8KLSAgICAgKiA8L3A+CisgICAgICogPHA+Rm9yIEFFLCBBV0IsIGFuZCBBRiwgaG93IG1hbnkgaW5kaXZpZHVhbAorICAgICAqIHJlZ2lvbnMgY2FuIGJlIGxpc3RlZCBmb3IgbWV0ZXJpbmc/PC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEludGVnZXI+IENPTlRST0xfTUFYX1JFR0lPTlMgPQogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLm1heFJlZ2lvbnMiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciB0aGlzIGNhbWVyYSBoYXMgYQotICAgICAqIGZsYXNoCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIElmIG5vIGZsYXNoLCBub25lIG9mIHRoZSBmbGFzaCBjb250cm9scyBkbwotICAgICAqIGFueXRoaW5nLiBBbGwgb3RoZXIgbWV0YWRhdGEgc2hvdWxkIHJldHVybiAwCi0gICAgICogPC9wPgorICAgICAqIDxwPldoZXRoZXIgdGhpcyBjYW1lcmEgaGFzIGEKKyAgICAgKiBmbGFzaDwvcD4KKyAgICAgKiA8cD5JZiBubyBmbGFzaCwgbm9uZSBvZiB0aGUgZmxhc2ggY29udHJvbHMgZG8KKyAgICAgKiBhbnl0aGluZy4gQWxsIG90aGVyIG1ldGFkYXRhIHNob3VsZCByZXR1cm4gMDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxCeXRlPiBGTEFTSF9JTkZPX0FWQUlMQUJMRSA9CiAgICAgICAgICAgICBuZXcgS2V5PEJ5dGU+KCJhbmRyb2lkLmZsYXNoLmluZm8uYXZhaWxhYmxlIiwgYnl0ZS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBTdXBwb3J0ZWQgcmVzb2x1dGlvbnMgZm9yIHRoZSBKUEVHCi0gICAgICogdGh1bWJuYWlsCi0gICAgICogPC9wPgorICAgICAqIDxwPlN1cHBvcnRlZCByZXNvbHV0aW9ucyBmb3IgdGhlIEpQRUcgdGh1bWJuYWlsPC9wPgorICAgICAqIDxwPkJlbG93IGNvbmRpZGl0aW9ucyB3aWxsIGJlIHNhdGlzZmllZCBmb3IgdGhpcyBzaXplIGxpc3Q6PC9wPgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+VGhlIHNpemVzIHdpbGwgYmUgc29ydGVkIGJ5IGluY3JlYXNpbmcgcGl4ZWwgYXJlYSAod2lkdGggeCBoZWlnaHQpLgorICAgICAqIElmIHNldmVyYWwgcmVzb2x1dGlvbnMgaGF2ZSB0aGUgc2FtZSBhcmVhLCB0aGV5IHdpbGwgYmUgc29ydGVkIGJ5IGluY3JlYXNpbmcgd2lkdGguPC9saT4KKyAgICAgKiA8bGk+VGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgbGFyZ2VzdCB0aHVtYm5haWwgc2l6ZSB3aWxsIGJlIHNhbWUgYXMgdGhlCisgICAgICogYXNwZWN0IHJhdGlvIG9mIGxhcmdlc3Qgc2l6ZSBpbiB7QGxpbmsgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI1NDQUxFUl9BVkFJTEFCTEVfSlBFR19TSVpFUyBhbmRyb2lkLnNjYWxlci5hdmFpbGFibGVKcGVnU2l6ZXN9LgorICAgICAqIFRoZSBsYXJnZXN0IHNpemUgaXMgZGVmaW5lZCBhcyB0aGUgc2l6ZSB0aGF0IGhhcyB0aGUgbGFyZ2VzdCBwaXhlbCBhcmVhCisgICAgICogaW4gYSBnaXZlbiBzaXplIGxpc3QuPC9saT4KKyAgICAgKiA8bGk+RWFjaCBzaXplIGluIHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjU0NBTEVSX0FWQUlMQUJMRV9KUEVHX1NJWkVTIGFuZHJvaWQuc2NhbGVyLmF2YWlsYWJsZUpwZWdTaXplc30gd2lsbCBoYXZlIGF0IGxlYXN0CisgICAgICogb25lIGNvcnJlc3BvbmRpbmcgc2l6ZSB0aGF0IGhhcyB0aGUgc2FtZSBhc3BlY3QgcmF0aW8gaW4gYXZhaWxhYmxlVGh1bWJuYWlsU2l6ZXMsCisgICAgICogYW5kIHZpY2UgdmVyc2EuPC9saT4KKyAgICAgKiA8bGk+QWxsIG5vbiAoMCwgMCkgc2l6ZXMgd2lsbCBoYXZlIG5vbi16ZXJvIHdpZHRocyBhbmQgaGVpZ2h0cy48L2xpPgorICAgICAqIDwvdWw+CisgICAgICoKKyAgICAgKiBAc2VlIENhbWVyYUNoYXJhY3RlcmlzdGljcyNTQ0FMRVJfQVZBSUxBQkxFX0pQRUdfU0laRVMKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuU2l6ZVtdPiBKUEVHX0FWQUlMQUJMRV9USFVNQk5BSUxfU0laRVMgPQogICAgICAgICAgICAgbmV3IEtleTxhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuU2l6ZVtdPigiYW5kcm9pZC5qcGVnLmF2YWlsYWJsZVRodW1ibmFpbFNpemVzIiwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemVbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBMaXN0IG9mIHN1cHBvcnRlZCBhcGVydHVyZQotICAgICAqIHZhbHVlcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBJZiB2YXJpYWJsZSBhcGVydHVyZSBub3QgYXZhaWxhYmxlLCBvbmx5IHNldHRpbmcKLSAgICAgKiBzaG91bGQgYmUgZm9yIHRoZSBmaXhlZCBhcGVydHVyZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIHN1cHBvcnRlZCBhcGVydHVyZQorICAgICAqIHZhbHVlcy48L3A+CisgICAgICogPHA+SWYgdGhlIGNhbWVyYSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHZhcmlhYmxlIGFwZXJ0dXJlcywKKyAgICAgKiBsaXN0ZWQgdmFsdWUgd2lsbCBiZSB0aGUgZml4ZWQgYXBlcnR1cmUuPC9wPgorICAgICAqIDxwPklmIHRoZSBjYW1lcmEgZGV2aWNlIHN1cHBvcnRzIHZhcmlhYmxlIGFwZXJ0dXJlcywgdGhlIGFwZXJ0dXJlIHZhbHVlCisgICAgICogaW4gdGhpcyBsaXN0IHdpbGwgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gTEVOU19JTkZPX0FWQUlMQUJMRV9BUEVSVFVSRVMgPQogICAgICAgICAgICAgbmV3IEtleTxmbG9hdFtdPigiYW5kcm9pZC5sZW5zLmluZm8uYXZhaWxhYmxlQXBlcnR1cmVzIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBMaXN0IG9mIHN1cHBvcnRlZCBORCBmaWx0ZXIKLSAgICAgKiB2YWx1ZXMKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogSWYgbm90IGF2YWlsYWJsZSwgb25seSBzZXR0aW5nIGlzIDAuIE90aGVyd2lzZSwKLSAgICAgKiBsaXN0cyB0aGUgYXZhaWxhYmxlIGV4cG9zdXJlIGluZGV4IHZhbHVlcyBmb3IgZGltbWluZwotICAgICAqICgyIHdvdWxkIG1lYW4gdGhlIGZpbHRlciBpcyBzZXQgdG8gcmVkdWNlIGluY29taW5nCi0gICAgICogbGlnaHQgYnkgdHdvIHN0b3BzKQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIHN1cHBvcnRlZCBuZXV0cmFsIGRlbnNpdHkgZmlsdGVyIHZhbHVlcyBmb3IKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjTEVOU19GSUxURVJfREVOU0lUWSBhbmRyb2lkLmxlbnMuZmlsdGVyRGVuc2l0eX0uPC9wPgorICAgICAqIDxwPklmIGNoYW5naW5nIHtAbGluayBDYXB0dXJlUmVxdWVzdCNMRU5TX0ZJTFRFUl9ERU5TSVRZIGFuZHJvaWQubGVucy5maWx0ZXJEZW5zaXR5fSBpcyBub3Qgc3VwcG9ydGVkLAorICAgICAqIGF2YWlsYWJsZUZpbHRlckRlbnNpdGllcyBtdXN0IGNvbnRhaW4gb25seSAwLiBPdGhlcndpc2UsIHRoaXMKKyAgICAgKiBsaXN0IGNvbnRhaW5zIG9ubHkgdGhlIGV4YWN0IGZpbHRlciBkZW5zaXR5IHZhbHVlcyBhdmFpbGFibGUgb24KKyAgICAgKiB0aGlzIGNhbWVyYSBkZXZpY2UuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNMRU5TX0ZJTFRFUl9ERU5TSVRZCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gTEVOU19JTkZPX0FWQUlMQUJMRV9GSUxURVJfREVOU0lUSUVTID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQubGVucy5pbmZvLmF2YWlsYWJsZUZpbHRlckRlbnNpdGllcyIsIGZsb2F0W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogSWYgZml0dGVkIHdpdGggb3B0aWNhbCB6b29tLCB3aGF0IGZvY2FsCisgICAgICogPHA+SWYgZml0dGVkIHdpdGggb3B0aWNhbCB6b29tLCB3aGF0IGZvY2FsCiAgICAgICogbGVuZ3RocyBhcmUgYXZhaWxhYmxlLiBJZiBub3QsIHRoZSBzdGF0aWMgZm9jYWwKLSAgICAgKiBsZW5ndGgKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogSWYgb3B0aWNhbCB6b29tIG5vdCBzdXBwb3J0ZWQsIG9ubHkgb25lIHZhbHVlCi0gICAgICogc2hvdWxkIGJlIHJlcG9ydGVkCi0gICAgICogPC9wPgorICAgICAqIGxlbmd0aDwvcD4KKyAgICAgKiA8cD5JZiBvcHRpY2FsIHpvb20gbm90IHN1cHBvcnRlZCwgb25seSBvbmUgdmFsdWUKKyAgICAgKiBzaG91bGQgYmUgcmVwb3J0ZWQ8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gTEVOU19JTkZPX0FWQUlMQUJMRV9GT0NBTF9MRU5HVEhTID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQubGVucy5pbmZvLmF2YWlsYWJsZUZvY2FsTGVuZ3RocyIsIGZsb2F0W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiBzdXBwb3J0ZWQgb3B0aWNhbCBpbWFnZQotICAgICAqIHN0YWJpbGl6YXRpb24gbW9kZXMKLSAgICAgKiA8L3A+CisgICAgICogPHA+TGlzdCBvZiBzdXBwb3J0ZWQgb3B0aWNhbCBpbWFnZQorICAgICAqIHN0YWJpbGl6YXRpb24gbW9kZXM8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Ynl0ZVtdPiBMRU5TX0lORk9fQVZBSUxBQkxFX09QVElDQUxfU1RBQklMSVpBVElPTiA9CiAgICAgICAgICAgICBuZXcgS2V5PGJ5dGVbXT4oImFuZHJvaWQubGVucy5pbmZvLmF2YWlsYWJsZU9wdGljYWxTdGFiaWxpemF0aW9uIiwgYnl0ZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEh5cGVyZm9jYWwgZGlzdGFuY2UgZm9yIHRoaXMgbGVuczsgc2V0IHRvCi0gICAgICogMCBpZiBmaXhlZCBmb2N1cwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgaHlwZXJmb2NhbCBkaXN0YW5jZSBpcyB1c2VkIGZvciB0aGUgb2xkCi0gICAgICogQVBJJ3MgJ2ZpeGVkJyBzZXR0aW5nCi0gICAgICogPC9wPgorICAgICAqIDxwPkh5cGVyZm9jYWwgZGlzdGFuY2UgZm9yIHRoaXMgbGVuczsgc2V0IHRvCisgICAgICogMCBpZiBmaXhlZCBmb2N1czwvcD4KKyAgICAgKiA8cD5UaGUgaHlwZXJmb2NhbCBkaXN0YW5jZSBpcyB1c2VkIGZvciB0aGUgb2xkCisgICAgICogQVBJJ3MgJ2ZpeGVkJyBzZXR0aW5nPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEZsb2F0PiBMRU5TX0lORk9fSFlQRVJGT0NBTF9ESVNUQU5DRSA9CiAgICAgICAgICAgICBuZXcgS2V5PEZsb2F0PigiYW5kcm9pZC5sZW5zLmluZm8uaHlwZXJmb2NhbERpc3RhbmNlIiwgZmxvYXQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogU2hvcnRlc3QgZGlzdGFuY2UgZnJvbSBmcm9udG1vc3Qgc3VyZmFjZQotICAgICAqIG9mIHRoZSBsZW5zIHRoYXQgY2FuIGJlIGZvY3VzZWQgY29ycmVjdGx5Ci0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSBsZW5zIGlzIGZpeGVkLWZvY3VzLCB0aGlzIHNob3VsZCBiZQotICAgICAqIDAKLSAgICAgKiA8L3A+CisgICAgICogPHA+U2hvcnRlc3QgZGlzdGFuY2UgZnJvbSBmcm9udG1vc3Qgc3VyZmFjZQorICAgICAqIG9mIHRoZSBsZW5zIHRoYXQgY2FuIGJlIGZvY3VzZWQgY29ycmVjdGx5PC9wPgorICAgICAqIDxwPklmIHRoZSBsZW5zIGlzIGZpeGVkLWZvY3VzLCB0aGlzIHNob3VsZCBiZQorICAgICAqIDA8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8RmxvYXQ+IExFTlNfSU5GT19NSU5JTVVNX0ZPQ1VTX0RJU1RBTkNFID0KICAgICAgICAgICAgIG5ldyBLZXk8RmxvYXQ+KCJhbmRyb2lkLmxlbnMuaW5mby5taW5pbXVtRm9jdXNEaXN0YW5jZSIsIGZsb2F0LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIERpbWVuc2lvbnMgb2YgbGVucyBzaGFkaW5nCi0gICAgICogbWFwCi0gICAgICogPC9wPgorICAgICAqIDxwPkRpbWVuc2lvbnMgb2YgbGVucyBzaGFkaW5nIG1hcC48L3A+CisgICAgICogPHA+VGhlIG1hcCBzaG91bGQgYmUgb24gdGhlIG9yZGVyIG9mIDMwLTQwIHJvd3MgYW5kIGNvbHVtbnMsIGFuZAorICAgICAqIG11c3QgYmUgc21hbGxlciB0aGFuIDY0eDY0LjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuU2l6ZT4gTEVOU19JTkZPX1NIQURJTkdfTUFQX1NJWkUgPQogICAgICAgICAgICAgbmV3IEtleTxhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuU2l6ZT4oImFuZHJvaWQubGVucy5pbmZvLnNoYWRpbmdNYXBTaXplIiwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemUuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRGlyZWN0aW9uIHRoZSBjYW1lcmEgZmFjZXMgcmVsYXRpdmUgdG8KLSAgICAgKiBkZXZpY2Ugc2NyZWVuCi0gICAgICogPC9wPgorICAgICAqIDxwPkRpcmVjdGlvbiB0aGUgY2FtZXJhIGZhY2VzIHJlbGF0aXZlIHRvCisgICAgICogZGV2aWNlIHNjcmVlbjwvcD4KICAgICAgKiBAc2VlICNMRU5TX0ZBQ0lOR19GUk9OVAogICAgICAqIEBzZWUgI0xFTlNfRkFDSU5HX0JBQ0sKICAgICAgKi8KQEAgLTMzMywyODYgKzM0OSwyMjEgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQubGVucy5mYWNpbmciLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogSWYgc2V0IHRvIDEsIHRoZSBIQUwgd2lsbCBhbHdheXMgc3BsaXQgcmVzdWx0CisgICAgICogPHA+SWYgc2V0IHRvIDEsIHRoZSBIQUwgd2lsbCBhbHdheXMgc3BsaXQgcmVzdWx0CiAgICAgICogbWV0YWRhdGEgZm9yIGEgc2luZ2xlIGNhcHR1cmUgaW50byBtdWx0aXBsZSBidWZmZXJzLAotICAgICAqIHJldHVybmVkIHVzaW5nIG11bHRpcGxlIHByb2Nlc3NfY2FwdHVyZV9yZXN1bHQgY2FsbHMuCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIERvZXMgbm90IG5lZWQgdG8gYmUgbGlzdGVkIGluIHN0YXRpYworICAgICAqIHJldHVybmVkIHVzaW5nIG11bHRpcGxlIHByb2Nlc3NfY2FwdHVyZV9yZXN1bHQgY2FsbHMuPC9wPgorICAgICAqIDxwPkRvZXMgbm90IG5lZWQgdG8gYmUgbGlzdGVkIGluIHN0YXRpYwogICAgICAqIG1ldGFkYXRhLiBTdXBwb3J0IGZvciBwYXJ0aWFsIHJlc3VsdHMgd2lsbCBiZSByZXdvcmtlZCBpbgogICAgICAqIGZ1dHVyZSB2ZXJzaW9ucyBvZiBjYW1lcmEgc2VydmljZS4gVGhpcyBxdWlyayB3aWxsIHN0b3AKICAgICAgKiB3b3JraW5nIGF0IHRoYXQgcG9pbnQ7IERPIE5PVCBVU0Ugd2l0aG91dCBjYXJlZnVsCi0gICAgICogY29uc2lkZXJhdGlvbiBvZiBmdXR1cmUgc3VwcG9ydC4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiA8Yj5PcHRpb25hbDwvYj4gLSBUaGlzIHZhbHVlIG1heSBiZSBudWxsIG9uIHNvbWUgZGV2aWNlcy4KLSAgICAgKgorICAgICAqIGNvbnNpZGVyYXRpb24gb2YgZnV0dXJlIHN1cHBvcnQuPC9wPgorICAgICAqIDxwPjxiPk9wdGlvbmFsPC9iPiAtIFRoaXMgdmFsdWUgbWF5IGJlIHtAY29kZSBudWxsfSBvbiBzb21lIGRldmljZXMuPC9wPgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Qnl0ZT4gUVVJUktTX1VTRV9QQVJUSUFMX1JFU1VMVCA9CiAgICAgICAgICAgICBuZXcgS2V5PEJ5dGU+KCJhbmRyb2lkLnF1aXJrcy51c2VQYXJ0aWFsUmVzdWx0IiwgYnl0ZS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBIb3cgbWFueSBvdXRwdXQgc3RyZWFtcyBjYW4gYmUgYWxsb2NhdGVkIGF0Ci0gICAgICogdGhlIHNhbWUgdGltZSBmb3IgZWFjaCB0eXBlIG9mIHN0cmVhbQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBWaWRlbyBzbmFwc2hvdCB3aXRoIHByZXZpZXcgY2FsbGJhY2tzIHJlcXVpcmVzIDMKKyAgICAgKiA8cD5Ib3cgbWFueSBvdXRwdXQgc3RyZWFtcyBjYW4gYmUgYWxsb2NhdGVkIGF0CisgICAgICogdGhlIHNhbWUgdGltZSBmb3IgZWFjaCB0eXBlIG9mIHN0cmVhbTwvcD4KKyAgICAgKiA8cD5WaWRlbyBzbmFwc2hvdCB3aXRoIHByZXZpZXcgY2FsbGJhY2tzIHJlcXVpcmVzIDMKICAgICAgKiBwcm9jZXNzZWQgc3RyZWFtcyAocHJldmlldywgcmVjb3JkLCBhcHAgY2FsbGJhY2tzKSBhbmQKLSAgICAgKiBvbmUgSlBFRyBzdHJlYW0gKHNuYXBzaG90KQotICAgICAqIDwvcD4KKyAgICAgKiBvbmUgSlBFRyBzdHJlYW0gKHNuYXBzaG90KTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxpbnRbXT4gUkVRVUVTVF9NQVhfTlVNX09VVFBVVF9TVFJFQU1TID0KICAgICAgICAgICAgIG5ldyBLZXk8aW50W10+KCJhbmRyb2lkLnJlcXVlc3QubWF4TnVtT3V0cHV0U3RyZWFtcyIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgYXBwLXZpc2libGUgZm9ybWF0cwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIGFwcC12aXNpYmxlIGZvcm1hdHM8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8aW50W10+IFNDQUxFUl9BVkFJTEFCTEVfRk9STUFUUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGludFtdPigiYW5kcm9pZC5zY2FsZXIuYXZhaWxhYmxlRm9ybWF0cyIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSBtaW5pbXVtIGZyYW1lIGR1cmF0aW9uIHRoYXQgaXMgc3VwcG9ydGVkCisgICAgICogPHA+VGhlIG1pbmltdW0gZnJhbWUgZHVyYXRpb24gdGhhdCBpcyBzdXBwb3J0ZWQKICAgICAgKiBmb3IgZWFjaCByZXNvbHV0aW9uIGluIGF2YWlsYWJsZUpwZWdTaXplcy4gU2hvdWxkCiAgICAgICogY29ycmVzcG9uZCB0byB0aGUgZnJhbWUgZHVyYXRpb24gd2hlbiBvbmx5IHRoYXQgSlBFRwogICAgICAqIHN0cmVhbSBpcyBhY3RpdmUgYW5kIGNhcHR1cmVkIGluIGEgYnVyc3QsIHdpdGggYWxsCi0gICAgICogcHJvY2Vzc2luZyBzZXQgdG8gRkFTVAotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuIG11bHRpcGxlIHN0cmVhbXMgYXJlIGNvbmZpZ3VyZWQsIHRoZSBtaW5pbXVtCi0gICAgICogZnJhbWUgZHVyYXRpb24gd2lsbCBiZSA+PSBtYXgoaW5kaXZpZHVhbCBzdHJlYW0gbWluCi0gICAgICogZHVyYXRpb25zKQotICAgICAqIDwvcD4KKyAgICAgKiBwcm9jZXNzaW5nIHNldCB0byBGQVNUPC9wPgorICAgICAqIDxwPldoZW4gbXVsdGlwbGUgc3RyZWFtcyBhcmUgY29uZmlndXJlZCwgdGhlIG1pbmltdW0KKyAgICAgKiBmcmFtZSBkdXJhdGlvbiB3aWxsIGJlICZndDs9IG1heChpbmRpdmlkdWFsIHN0cmVhbSBtaW4KKyAgICAgKiBkdXJhdGlvbnMpPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGxvbmdbXT4gU0NBTEVSX0FWQUlMQUJMRV9KUEVHX01JTl9EVVJBVElPTlMgPQogICAgICAgICAgICAgbmV3IEtleTxsb25nW10+KCJhbmRyb2lkLnNjYWxlci5hdmFpbGFibGVKcGVnTWluRHVyYXRpb25zIiwgbG9uZ1tdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSByZXNvbHV0aW9ucyBhdmFpbGFibGUgZm9yIG91dHB1dCBmcm9tCi0gICAgICogdGhlIEpQRUcgYmxvY2suIExpc3RlZCBhcyB3aWR0aCB4IGhlaWdodAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGUgcmVzb2x1dGlvbnMgYXZhaWxhYmxlIGZvciBvdXRwdXQgZnJvbQorICAgICAqIHRoZSBKUEVHIGJsb2NrLiBMaXN0ZWQgYXMgd2lkdGggeCBoZWlnaHQ8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemVbXT4gU0NBTEVSX0FWQUlMQUJMRV9KUEVHX1NJWkVTID0KICAgICAgICAgICAgIG5ldyBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemVbXT4oImFuZHJvaWQuc2NhbGVyLmF2YWlsYWJsZUpwZWdTaXplcyIsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplW10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhlIG1heGltdW0gcmF0aW8gYmV0d2VlbiBhY3RpdmUgYXJlYSB3aWR0aAorICAgICAqIDxwPlRoZSBtYXhpbXVtIHJhdGlvIGJldHdlZW4gYWN0aXZlIGFyZWEgd2lkdGgKICAgICAgKiBhbmQgY3JvcCByZWdpb24gd2lkdGgsIG9yIGJldHdlZW4gYWN0aXZlIGFyZWEgaGVpZ2h0IGFuZAogICAgICAqIGNyb3AgcmVnaW9uIGhlaWdodCwgaWYgdGhlIGNyb3AgcmVnaW9uIGhlaWdodCBpcyBsYXJnZXIKLSAgICAgKiB0aGFuIHdpZHRoCi0gICAgICogPC9wPgorICAgICAqIHRoYW4gd2lkdGg8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8RmxvYXQ+IFNDQUxFUl9BVkFJTEFCTEVfTUFYX0RJR0lUQUxfWk9PTSA9CiAgICAgICAgICAgICBuZXcgS2V5PEZsb2F0PigiYW5kcm9pZC5zY2FsZXIuYXZhaWxhYmxlTWF4RGlnaXRhbFpvb20iLCBmbG9hdC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgbWluaW11bSBmcmFtZSBkdXJhdGlvbiB0aGF0IGlzIHN1cHBvcnRlZAorICAgICAqIDxwPlRoZSBtaW5pbXVtIGZyYW1lIGR1cmF0aW9uIHRoYXQgaXMgc3VwcG9ydGVkCiAgICAgICogZm9yIGVhY2ggcmVzb2x1dGlvbiBpbiBhdmFpbGFibGVQcm9jZXNzZWRTaXplcy4gU2hvdWxkCiAgICAgICogY29ycmVzcG9uZCB0byB0aGUgZnJhbWUgZHVyYXRpb24gd2hlbiBvbmx5IHRoYXQgcHJvY2Vzc2VkCiAgICAgICogc3RyZWFtIGlzIGFjdGl2ZSwgd2l0aCBhbGwgcHJvY2Vzc2luZyBzZXQgdG8KLSAgICAgKiBGQVNUCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFdoZW4gbXVsdGlwbGUgc3RyZWFtcyBhcmUgY29uZmlndXJlZCwgdGhlIG1pbmltdW0KLSAgICAgKiBmcmFtZSBkdXJhdGlvbiB3aWxsIGJlID49IG1heChpbmRpdmlkdWFsIHN0cmVhbSBtaW4KLSAgICAgKiBkdXJhdGlvbnMpCi0gICAgICogPC9wPgorICAgICAqIEZBU1Q8L3A+CisgICAgICogPHA+V2hlbiBtdWx0aXBsZSBzdHJlYW1zIGFyZSBjb25maWd1cmVkLCB0aGUgbWluaW11bQorICAgICAqIGZyYW1lIGR1cmF0aW9uIHdpbGwgYmUgJmd0Oz0gbWF4KGluZGl2aWR1YWwgc3RyZWFtIG1pbgorICAgICAqIGR1cmF0aW9ucyk8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8bG9uZ1tdPiBTQ0FMRVJfQVZBSUxBQkxFX1BST0NFU1NFRF9NSU5fRFVSQVRJT05TID0KICAgICAgICAgICAgIG5ldyBLZXk8bG9uZ1tdPigiYW5kcm9pZC5zY2FsZXIuYXZhaWxhYmxlUHJvY2Vzc2VkTWluRHVyYXRpb25zIiwgbG9uZ1tdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSByZXNvbHV0aW9ucyBhdmFpbGFibGUgZm9yIHVzZSB3aXRoCisgICAgICogPHA+VGhlIHJlc29sdXRpb25zIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGgKICAgICAgKiBwcm9jZXNzZWQgb3V0cHV0IHN0cmVhbXMsIHN1Y2ggYXMgWVYxMiwgTlYxMiwgYW5kCiAgICAgICogcGxhdGZvcm0gb3BhcXVlIFlVVi9SR0Igc3RyZWFtcyB0byB0aGUgR1BVIG9yIHZpZGVvCi0gICAgICogZW5jb2RlcnMuIExpc3RlZCBhcyB3aWR0aCwgaGVpZ2h0Ci0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRoZSBhY3R1YWwgc3VwcG9ydGVkIHJlc29sdXRpb24gbGlzdCBtYXkgYmUgbGltaXRlZCBieQorICAgICAqIGVuY29kZXJzLiBMaXN0ZWQgYXMgd2lkdGgsIGhlaWdodDwvcD4KKyAgICAgKiA8cD5UaGUgYWN0dWFsIHN1cHBvcnRlZCByZXNvbHV0aW9uIGxpc3QgbWF5IGJlIGxpbWl0ZWQgYnkKICAgICAgKiBjb25zdW1lciBlbmQgcG9pbnRzIGZvciBkaWZmZXJlbnQgdXNlIGNhc2VzLiBGb3IgZXhhbXBsZSwgZm9yCiAgICAgICogcmVjb3JkaW5nIHVzZSBjYXNlLCB0aGUgbGFyZ2VzdCBzdXBwb3J0ZWQgcmVzb2x1dGlvbiBtYXkgYmUKICAgICAgKiBsaW1pdGVkIGJ5IG1heCBzdXBwb3J0ZWQgc2l6ZSBmcm9tIGVuY29kZXIsIGZvciBwcmV2aWV3IHVzZQogICAgICAqIGNhc2UsIHRoZSBsYXJnZXN0IHN1cHBvcnRlZCByZXNvbHV0aW9uIG1heSBiZSBsaW1pdGVkIGJ5IG1heAotICAgICAqIHJlc29sdXRpb24gU3VyZmFjZVRleHR1cmUvU3VyZmFjZVZpZXcgY2FuIHN1cHBvcnQuCi0gICAgICogPC9wPgorICAgICAqIHJlc29sdXRpb24gU3VyZmFjZVRleHR1cmUvU3VyZmFjZVZpZXcgY2FuIHN1cHBvcnQuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplW10+IFNDQUxFUl9BVkFJTEFCTEVfUFJPQ0VTU0VEX1NJWkVTID0KICAgICAgICAgICAgIG5ldyBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemVbXT4oImFuZHJvaWQuc2NhbGVyLmF2YWlsYWJsZVByb2Nlc3NlZFNpemVzIiwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemVbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBcmVhIG9mIHJhdyBkYXRhIHdoaWNoIGNvcnJlc3BvbmRzIHRvIG9ubHkKKyAgICAgKiA8cD5BcmVhIG9mIHJhdyBkYXRhIHdoaWNoIGNvcnJlc3BvbmRzIHRvIG9ubHkKICAgICAgKiBhY3RpdmUgcGl4ZWxzOyBzbWFsbGVyIG9yIGVxdWFsIHRvCi0gICAgICogcGl4ZWxBcnJheVNpemUuCi0gICAgICogPC9wPgorICAgICAqIHBpeGVsQXJyYXlTaXplLjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxhbmRyb2lkLmdyYXBoaWNzLlJlY3Q+IFNFTlNPUl9JTkZPX0FDVElWRV9BUlJBWV9TSVpFID0KICAgICAgICAgICAgIG5ldyBLZXk8YW5kcm9pZC5ncmFwaGljcy5SZWN0PigiYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemUiLCBhbmRyb2lkLmdyYXBoaWNzLlJlY3QuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogUmFuZ2Ugb2YgdmFsaWQgc2Vuc2l0aXZpdGllcwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5SYW5nZSBvZiB2YWxpZCBzZW5zaXRpdml0aWVzPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGludFtdPiBTRU5TT1JfSU5GT19TRU5TSVRJVklUWV9SQU5HRSA9CiAgICAgICAgICAgICBuZXcgS2V5PGludFtdPigiYW5kcm9pZC5zZW5zb3IuaW5mby5zZW5zaXRpdml0eVJhbmdlIiwgaW50W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogUmFuZ2Ugb2YgdmFsaWQgZXhwb3N1cmUKLSAgICAgKiB0aW1lcwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5SYW5nZSBvZiB2YWxpZCBleHBvc3VyZQorICAgICAqIHRpbWVzPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGxvbmdbXT4gU0VOU09SX0lORk9fRVhQT1NVUkVfVElNRV9SQU5HRSA9CiAgICAgICAgICAgICBuZXcgS2V5PGxvbmdbXT4oImFuZHJvaWQuc2Vuc29yLmluZm8uZXhwb3N1cmVUaW1lUmFuZ2UiLCBsb25nW10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTWF4aW11bSBwb3NzaWJsZSBmcmFtZSBkdXJhdGlvbiAobWluaW11bSBmcmFtZQotICAgICAqIHJhdGUpCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE1pbmltdW0gZHVyYXRpb24gaXMgYSBmdW5jdGlvbiBvZiByZXNvbHV0aW9uLAorICAgICAqIDxwPk1heGltdW0gcG9zc2libGUgZnJhbWUgZHVyYXRpb24gKG1pbmltdW0gZnJhbWUKKyAgICAgKiByYXRlKTwvcD4KKyAgICAgKiA8cD5NaW5pbXVtIGR1cmF0aW9uIGlzIGEgZnVuY3Rpb24gb2YgcmVzb2x1dGlvbiwKICAgICAgKiBwcm9jZXNzaW5nIHNldHRpbmdzLiBTZWUKICAgICAgKiBhbmRyb2lkLnNjYWxlci5hdmFpbGFibGVQcm9jZXNzZWRNaW5EdXJhdGlvbnMKICAgICAgKiBhbmRyb2lkLnNjYWxlci5hdmFpbGFibGVKcGVnTWluRHVyYXRpb25zCi0gICAgICogYW5kcm9pZC5zY2FsZXIuYXZhaWxhYmxlUmF3TWluRHVyYXRpb25zCi0gICAgICogPC9wPgorICAgICAqIGFuZHJvaWQuc2NhbGVyLmF2YWlsYWJsZVJhd01pbkR1cmF0aW9uczwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxMb25nPiBTRU5TT1JfSU5GT19NQVhfRlJBTUVfRFVSQVRJT04gPQogICAgICAgICAgICAgbmV3IEtleTxMb25nPigiYW5kcm9pZC5zZW5zb3IuaW5mby5tYXhGcmFtZUR1cmF0aW9uIiwgbG9uZy5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgcGh5c2ljYWwgZGltZW5zaW9ucyBvZiB0aGUgZnVsbCBwaXhlbAotICAgICAqIGFycmF5Ci0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE5lZWRlZCBmb3IgRk9WIGNhbGN1bGF0aW9uIGZvciBvbGQgQVBJCi0gICAgICogPC9wPgorICAgICAqIDxwPlRoZSBwaHlzaWNhbCBkaW1lbnNpb25zIG9mIHRoZSBmdWxsIHBpeGVsCisgICAgICogYXJyYXk8L3A+CisgICAgICogPHA+TmVlZGVkIGZvciBGT1YgY2FsY3VsYXRpb24gZm9yIG9sZCBBUEk8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gU0VOU09SX0lORk9fUEhZU0lDQUxfU0laRSA9CiAgICAgICAgICAgICBuZXcgS2V5PGZsb2F0W10+KCJhbmRyb2lkLnNlbnNvci5pbmZvLnBoeXNpY2FsU2l6ZSIsIGZsb2F0W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogR2FpbiBmYWN0b3IgZnJvbSBlbGVjdHJvbnMgdG8gcmF3IHVuaXRzIHdoZW4KLSAgICAgKiBJU089MTAwCi0gICAgICogPC9wPgorICAgICAqIDxwPkdhaW4gZmFjdG9yIGZyb20gZWxlY3Ryb25zIHRvIHJhdyB1bml0cyB3aGVuCisgICAgICogSVNPPTEwMDwvcD4KKyAgICAgKiA8cD48Yj5PcHRpb25hbDwvYj4gLSBUaGlzIHZhbHVlIG1heSBiZSB7QGNvZGUgbnVsbH0gb24gc29tZSBkZXZpY2VzLjwvcD4KKyAgICAgKiA8cD48Yj5GdWxsIGNhcGFiaWxpdHk8L2I+IC0KKyAgICAgKiBQcmVzZW50IG9uIGFsbCBjYW1lcmEgZGV2aWNlcyB0aGF0IHJlcG9ydCBiZWluZyB7QGxpbmsgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI0lORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMX0ZVTEwgSEFSRFdBUkVfTEVWRUxfRlVMTH0gZGV2aWNlcyBpbiB0aGUKKyAgICAgKiB7QGxpbmsgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI0lORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMIGFuZHJvaWQuaW5mby5zdXBwb3J0ZWRIYXJkd2FyZUxldmVsfSBrZXk8L3A+CiAgICAgICoKLSAgICAgKiA8Yj5PcHRpb25hbDwvYj4gLSBUaGlzIHZhbHVlIG1heSBiZSBudWxsIG9uIHNvbWUgZGV2aWNlcy4KLSAgICAgKgotICAgICAqIDxiPntAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUxfRlVMTCBIQVJEV0FSRV9MRVZFTF9GVUxMfTwvYj4gLQotICAgICAqIFByZXNlbnQgb24gYWxsIGRldmljZXMgdGhhdCByZXBvcnQgYmVpbmcgRlVMTCBsZXZlbCBoYXJkd2FyZSBkZXZpY2VzIGluIHRoZQotICAgICAqIHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUwgSEFSRFdBUkVfTEVWRUx9IGtleS4KKyAgICAgKiBAc2VlIENhbWVyYUNoYXJhY3RlcmlzdGljcyNJTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PFJhdGlvbmFsPiBTRU5TT1JfQkFTRV9HQUlOX0ZBQ1RPUiA9CiAgICAgICAgICAgICBuZXcgS2V5PFJhdGlvbmFsPigiYW5kcm9pZC5zZW5zb3IuYmFzZUdhaW5GYWN0b3IiLCBSYXRpb25hbC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBNYXhpbXVtIHNlbnNpdGl2aXR5IHRoYXQgaXMgaW1wbGVtZW50ZWQKLSAgICAgKiBwdXJlbHkgdGhyb3VnaCBhbmFsb2cgZ2FpbgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBGb3IgYW5kcm9pZC5zZW5zb3Iuc2Vuc2l0aXZpdHkgdmFsdWVzIGxlc3MgdGhhbiBvcgorICAgICAqIDxwPk1heGltdW0gc2Vuc2l0aXZpdHkgdGhhdCBpcyBpbXBsZW1lbnRlZAorICAgICAqIHB1cmVseSB0aHJvdWdoIGFuYWxvZyBnYWluPC9wPgorICAgICAqIDxwPkZvciB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX1NFTlNJVElWSVRZIGFuZHJvaWQuc2Vuc29yLnNlbnNpdGl2aXR5fSB2YWx1ZXMgbGVzcyB0aGFuIG9yCiAgICAgICogZXF1YWwgdG8gdGhpcywgYWxsIGFwcGxpZWQgZ2FpbiBtdXN0IGJlIGFuYWxvZy4gRm9yCiAgICAgICogdmFsdWVzIGFib3ZlIHRoaXMsIGl0IGNhbiBiZSBhIG1peCBvZiBhbmFsb2cgYW5kCi0gICAgICogZGlnaXRhbAotICAgICAqIDwvcD4KKyAgICAgKiBkaWdpdGFsPC9wPgorICAgICAqIDxwPjxiPk9wdGlvbmFsPC9iPiAtIFRoaXMgdmFsdWUgbWF5IGJlIHtAY29kZSBudWxsfSBvbiBzb21lIGRldmljZXMuPC9wPgorICAgICAqIDxwPjxiPkZ1bGwgY2FwYWJpbGl0eTwvYj4gLQorICAgICAqIFByZXNlbnQgb24gYWxsIGNhbWVyYSBkZXZpY2VzIHRoYXQgcmVwb3J0IGJlaW5nIHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUxfRlVMTCBIQVJEV0FSRV9MRVZFTF9GVUxMfSBkZXZpY2VzIGluIHRoZQorICAgICAqIHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUwgYW5kcm9pZC5pbmZvLnN1cHBvcnRlZEhhcmR3YXJlTGV2ZWx9IGtleTwvcD4KICAgICAgKgotICAgICAqIDxiPk9wdGlvbmFsPC9iPiAtIFRoaXMgdmFsdWUgbWF5IGJlIG51bGwgb24gc29tZSBkZXZpY2VzLgotICAgICAqCi0gICAgICogPGI+e0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNJTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTF9GVUxMIEhBUkRXQVJFX0xFVkVMX0ZVTEx9PC9iPiAtCi0gICAgICogUHJlc2VudCBvbiBhbGwgZGV2aWNlcyB0aGF0IHJlcG9ydCBiZWluZyBGVUxMIGxldmVsIGhhcmR3YXJlIGRldmljZXMgaW4gdGhlCi0gICAgICoge0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNJTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTCBIQVJEV0FSRV9MRVZFTH0ga2V5LgorICAgICAqIEBzZWUgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI0lORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfU0VOU0lUSVZJVFkKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxJbnRlZ2VyPiBTRU5TT1JfTUFYX0FOQUxPR19TRU5TSVRJVklUWSA9CiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLnNlbnNvci5tYXhBbmFsb2dTZW5zaXRpdml0eSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBDbG9ja3dpc2UgYW5nbGUgdGhyb3VnaCB3aGljaCB0aGUgb3V0cHV0CisgICAgICogPHA+Q2xvY2t3aXNlIGFuZ2xlIHRocm91Z2ggd2hpY2ggdGhlIG91dHB1dAogICAgICAqIGltYWdlIG5lZWRzIHRvIGJlIHJvdGF0ZWQgdG8gYmUgdXByaWdodCBvbiB0aGUgZGV2aWNlCiAgICAgICogc2NyZWVuIGluIGl0cyBuYXRpdmUgb3JpZW50YXRpb24uIEFsc28gZGVmaW5lcyB0aGUKICAgICAgKiBkaXJlY3Rpb24gb2Ygcm9sbGluZyBzaHV0dGVyIHJlYWRvdXQsIHdoaWNoIGlzIGZyb20gdG9wCi0gICAgICogdG8gYm90dG9tIGluIHRoZSBzZW5zb3IncyBjb29yZGluYXRlIHN5c3RlbQotICAgICAqIDwvcD4KKyAgICAgKiB0byBib3R0b20gaW4gdGhlIHNlbnNvcidzIGNvb3JkaW5hdGUgc3lzdGVtPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEludGVnZXI+IFNFTlNPUl9PUklFTlRBVElPTiA9CiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLnNlbnNvci5vcmllbnRhdGlvbiIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGljaCBmYWNlIGRldGVjdGlvbiBtb2RlcyBhcmUgYXZhaWxhYmxlLAotICAgICAqIGlmIGFueQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBPRkYgbWVhbnMgZmFjZSBkZXRlY3Rpb24gaXMgZGlzYWJsZWQsIGl0IG11c3QKLSAgICAgKiBiZSBpbmNsdWRlZCBpbiB0aGUgbGlzdC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogU0lNUExFIG1lYW5zIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlCisgICAgICogPHA+V2hpY2ggZmFjZSBkZXRlY3Rpb24gbW9kZXMgYXJlIGF2YWlsYWJsZSwKKyAgICAgKiBpZiBhbnk8L3A+CisgICAgICogPHA+T0ZGIG1lYW5zIGZhY2UgZGV0ZWN0aW9uIGlzIGRpc2FibGVkLCBpdCBtdXN0CisgICAgICogYmUgaW5jbHVkZWQgaW4gdGhlIGxpc3QuPC9wPgorICAgICAqIDxwPlNJTVBMRSBtZWFucyB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZQogICAgICAqIGFuZHJvaWQuc3RhdGlzdGljcy5mYWNlUmVjdGFuZ2xlcyBhbmQKLSAgICAgKiBhbmRyb2lkLnN0YXRpc3RpY3MuZmFjZVNjb3JlcyBvdXRwdXRzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBGVUxMIG1lYW5zIHRoZSBkZXZpY2UgYWRkaXRpb25hbGx5IHN1cHBvcnRzIHRoZQorICAgICAqIGFuZHJvaWQuc3RhdGlzdGljcy5mYWNlU2NvcmVzIG91dHB1dHMuPC9wPgorICAgICAqIDxwPkZVTEwgbWVhbnMgdGhlIGRldmljZSBhZGRpdGlvbmFsbHkgc3VwcG9ydHMgdGhlCiAgICAgICogYW5kcm9pZC5zdGF0aXN0aWNzLmZhY2VJZHMgYW5kCi0gICAgICogYW5kcm9pZC5zdGF0aXN0aWNzLmZhY2VMYW5kbWFya3Mgb3V0cHV0cy4KLSAgICAgKiA8L3A+CisgICAgICogYW5kcm9pZC5zdGF0aXN0aWNzLmZhY2VMYW5kbWFya3Mgb3V0cHV0cy48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Ynl0ZVtdPiBTVEFUSVNUSUNTX0lORk9fQVZBSUxBQkxFX0ZBQ0VfREVURUNUX01PREVTID0KICAgICAgICAgICAgIG5ldyBLZXk8Ynl0ZVtdPigiYW5kcm9pZC5zdGF0aXN0aWNzLmluZm8uYXZhaWxhYmxlRmFjZURldGVjdE1vZGVzIiwgYnl0ZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91c2x5IGRldGVjdGFibGUKLSAgICAgKiBmYWNlcwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5NYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVvdXNseSBkZXRlY3RhYmxlCisgICAgICogZmFjZXM8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8SW50ZWdlcj4gU1RBVElTVElDU19JTkZPX01BWF9GQUNFX0NPVU5UID0KICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuc3RhdGlzdGljcy5pbmZvLm1heEZhY2VDb3VudCIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBzdXBwb3J0ZWQgcG9pbnRzIGluIHRoZQotICAgICAqIHRvbmVtYXAgY3VydmUKLSAgICAgKiA8L3A+CisgICAgICogPHA+TWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHBvaW50cyBpbiB0aGUKKyAgICAgKiB0b25lbWFwIGN1cnZlPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEludGVnZXI+IFRPTkVNQVBfTUFYX0NVUlZFX1BPSU5UUyA9CiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLnRvbmVtYXAubWF4Q3VydmVQb2ludHMiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQSBsaXN0IG9mIGNhbWVyYSBMRURzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbS4KLSAgICAgKiA8L3A+CisgICAgICogPHA+QSBsaXN0IG9mIGNhbWVyYSBMRURzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbS48L3A+CiAgICAgICogQHNlZSAjTEVEX0FWQUlMQUJMRV9MRURTX1RSQU5TTUlUCi0gICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGludFtdPiBMRURfQVZBSUxBQkxFX0xFRFMgPQogICAgICAgICAgICAgbmV3IEtleTxpbnRbXT4oImFuZHJvaWQubGVkLmF2YWlsYWJsZUxlZHMiLCBpbnRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgY2FtZXJhIDMgSEFMIGRldmljZSBjYW4gaW1wbGVtZW50IG9uZSBvZiB0d28gcG9zc2libGUKKyAgICAgKiA8cD5UaGUgY2FtZXJhIDMgSEFMIGRldmljZSBjYW4gaW1wbGVtZW50IG9uZSBvZiB0d28gcG9zc2libGUKICAgICAgKiBvcGVyYXRpb25hbCBtb2RlczsgbGltaXRlZCBhbmQgZnVsbC4gRnVsbCBzdXBwb3J0IGlzCiAgICAgICogZXhwZWN0ZWQgZnJvbSBuZXcgaGlnaGVyLWVuZCBkZXZpY2VzLiBMaW1pdGVkIG1vZGUgaGFzCiAgICAgICogaGFyZHdhcmUgcmVxdWlyZW1lbnRzIHJvdWdobHkgaW4gbGluZSB3aXRoIHRob3NlIGZvciBhCiAgICAgICogY2FtZXJhIEhBTCBkZXZpY2UgdjEgaW1wbGVtZW50YXRpb24sIGFuZCBpcyBleHBlY3RlZCBmcm9tCiAgICAgICogb2xkZXIgb3IgaW5leHBlbnNpdmUgZGV2aWNlcy4gRnVsbCBpcyBhIHN0cmljdCBzdXBlcnNldCBvZgotICAgICAqIGxpbWl0ZWQsIGFuZCB0aGV5IHNoYXJlIHRoZSBzYW1lIGVzc2VudGlhbCBvcGVyYXRpb25hbCBmbG93LgotICAgICAqIDwvcD48cD4KLSAgICAgKiBGb3IgZnVsbCBkZXRhaWxzIHJlZmVyIHRvICJTMy4gT3BlcmF0aW9uYWwgTW9kZXMiIGluIGNhbWVyYTMuaAotICAgICAqIDwvcD4KKyAgICAgKiBsaW1pdGVkLCBhbmQgdGhleSBzaGFyZSB0aGUgc2FtZSBlc3NlbnRpYWwgb3BlcmF0aW9uYWwgZmxvdy48L3A+CisgICAgICogPHA+Rm9yIGZ1bGwgZGV0YWlscyByZWZlciB0byAiUzMuIE9wZXJhdGlvbmFsIE1vZGVzIiBpbiBjYW1lcmEzLmg8L3A+CiAgICAgICogQHNlZSAjSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUxfTElNSVRFRAogICAgICAqIEBzZWUgI0lORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMX0ZVTEwKICAgICAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhRGV2aWNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYURldmljZS5qYXZhCmluZGV4IDllOGQ3ZDEuLjQyODgwYWYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhRGV2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFEZXZpY2UuamF2YQpAQCAtNTAxLDMxICs1MDEsNiBAQAogICAgIHB1YmxpYyB2b2lkIHN0b3BSZXBlYXRpbmcoKSB0aHJvd3MgQ2FtZXJhQWNjZXNzRXhjZXB0aW9uOwogCiAgICAgLyoqCi0gICAgICogPHA+V2FpdCB1bnRpbCBhbGwgdGhlIHN1Ym1pdHRlZCByZXF1ZXN0cyBoYXZlIGZpbmlzaGVkIHByb2Nlc3Npbmc8L3A+Ci0gICAgICoKLSAgICAgKiA8cD5UaGlzIG1ldGhvZCBibG9ja3MgdW50aWwgYWxsIHRoZSByZXF1ZXN0cyB0aGF0IGhhdmUgYmVlbiBzdWJtaXR0ZWQgdG8KLSAgICAgKiB0aGUgY2FtZXJhIGRldmljZSwgZWl0aGVyIHRocm91Z2gge0BsaW5rICNjYXB0dXJlIGNhcHR1cmV9LAotICAgICAqIHtAbGluayAjY2FwdHVyZUJ1cnN0IGNhcHR1cmVCdXJzdH0sCi0gICAgICoge0BsaW5rICNzZXRSZXBlYXRpbmdSZXF1ZXN0IHNldFJlcGVhdGluZ1JlcXVlc3R9LCBvcgotICAgICAqIHtAbGluayAjc2V0UmVwZWF0aW5nQnVyc3Qgc2V0UmVwZWF0aW5nQnVyc3R9LCBoYXZlIGNvbXBsZXRlZCB0aGVpcgotICAgICAqIHByb2Nlc3NpbmcuPC9wPgotICAgICAqCi0gICAgICogPHA+T25jZSB0aGlzIGNhbGwgcmV0dXJucyBzdWNjZXNzZnVsbHksIHRoZSBkZXZpY2UgaXMgaW4gYW4gaWRsZSBzdGF0ZSwKLSAgICAgKiBhbmQgY2FuIGJlIHJlY29uZmlndXJlZCB3aXRoIHtAbGluayAjY29uZmlndXJlT3V0cHV0cyBjb25maWd1cmVPdXRwdXRzfS48L3A+Ci0gICAgICoKLSAgICAgKiA8cD5UaGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgcmVwZWF0aW5nIHJlcXVlc3Qgb3IKLSAgICAgKiBidXJzdCwgc2V0IHdpdGgge0BsaW5rICNzZXRSZXBlYXRpbmdSZXF1ZXN0IHNldFJlcGVhdGluZ1JlcXVlc3R9IG9yCi0gICAgICoge0BsaW5rICNzZXRSZXBlYXRpbmdCdXJzdCBzZXRSZXBlYXRpbmdCdXJzdH0uIENhbGwKLSAgICAgKiB7QGxpbmsgI3N0b3BSZXBlYXRpbmcgc3RvcFJlcGVhdGluZ30gYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuPC9wPgotICAgICAqCi0gICAgICogQHRocm93cyBDYW1lcmFBY2Nlc3NFeGNlcHRpb24gaWYgdGhlIGNhbWVyYSBkZXZpY2UgaXMgbm8gbG9uZ2VyIGNvbm5lY3RlZAotICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSBjYW1lcmEgZGV2aWNlIGhhcyBiZWVuIGNsb3NlZCwgdGhlCi0gICAgICogZGV2aWNlIGhhcyBlbmNvdW50ZXJlZCBhIGZhdGFsIGVycm9yLCBvciBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgcmVwZWF0aW5nCi0gICAgICogcmVxdWVzdCBvciBidXJzdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB3YWl0VW50aWxJZGxlKCkgdGhyb3dzIENhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKLQotICAgIC8qKgogICAgICAqIEZsdXNoIGFsbCBjYXB0dXJlcyBjdXJyZW50bHkgcGVuZGluZyBhbmQgaW4tcHJvZ3Jlc3MgYXMgZmFzdCBhcwogICAgICAqIHBvc3NpYmxlLgogICAgICAqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWFuYWdlci5qYXZhCmluZGV4IDY1YjZjN2EuLjJhYzUwZTQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWFuYWdlci5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5JQ2FtZXJhU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLklDYW1lcmFTZXJ2aWNlTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5JUHJvQ2FtZXJhVXNlcjsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuaW1wbC5DYW1lcmFNZXRhZGF0YU5hdGl2ZTsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIudXRpbHMuQ2FtZXJhQmluZGVyRGVjb3JhdG9yOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi51dGlscy5DYW1lcmFSdW50aW1lRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFNZXRhZGF0YS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFNZXRhZGF0YS5qYXZhCmluZGV4IDFkNmZmN2QuLjNiMTQxMmUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWV0YWRhdGEuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYU1ldGFkYXRhLmphdmEKQEAgLTE2OCw3ICsxNjgsNyBAQAogCiAgICAgICAgICAgICBLZXkgbGhzID0gKEtleSkgbzsKIAotICAgICAgICAgICAgcmV0dXJuIG1OYW1lLmVxdWFscyhsaHMubU5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG1OYW1lLmVxdWFscyhsaHMubU5hbWUpICYmIG1UeXBlLmVxdWFscyhsaHMubVR5cGUpOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCkBAIC0yMjQsOSArMjI0LDcgQEAKICAgICAvLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogYW5kcm9pZC5sZWQudHJhbnNtaXQgY29udHJvbCBpcyB1c2VkCi0gICAgICogPC9wPgorICAgICAqIDxwPmFuZHJvaWQubGVkLnRyYW5zbWl0IGNvbnRyb2wgaXMgdXNlZDwvcD4KICAgICAgKiBAc2VlIENhbWVyYUNoYXJhY3RlcmlzdGljcyNMRURfQVZBSUxBQkxFX0xFRFMKICAgICAgKiBAaGlkZQogICAgICAqLwpAQCAtMjUxLDI4ICsyNDksMjUgQEAKICAgICAvLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVXNlIHRoZSBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi50cmFuc2Zvcm0gbWF0cml4Ci0gICAgICogYW5kIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLmdhaW5zIHRvIGRvIGNvbG9yIGNvbnZlcnNpb24KLSAgICAgKiA8L3A+CisgICAgICogPHA+VXNlIHRoZSB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9UUkFOU0ZPUk0gYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24udHJhbnNmb3JtfSBtYXRyaXgKKyAgICAgKiBhbmQge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fR0FJTlMgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24uZ2FpbnN9IHRvIGRvIGNvbG9yIGNvbnZlcnNpb248L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fR0FJTlMKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fVFJBTlNGT1JNCiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0xPUl9DT1JSRUNUSU9OX01PREVfVFJBTlNGT1JNX01BVFJJWCA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBNdXN0IG5vdCBzbG93IGRvd24gZnJhbWUgcmF0ZSByZWxhdGl2ZSB0byByYXcKLSAgICAgKiBiYXllciBvdXRwdXQKLSAgICAgKiA8L3A+CisgICAgICogPHA+TXVzdCBub3Qgc2xvdyBkb3duIGZyYW1lIHJhdGUgcmVsYXRpdmUgdG8gcmF3CisgICAgICogYmF5ZXIgb3V0cHV0PC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfQ09SUkVDVElPTl9NT0RFX0ZBU1QgPSAxOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRnJhbWUgcmF0ZSBtYXkgYmUgcmVkdWNlZCBieSBoaWdoCi0gICAgICogcXVhbGl0eQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5GcmFtZSByYXRlIG1heSBiZSByZWR1Y2VkIGJ5IGhpZ2gKKyAgICAgKiBxdWFsaXR5PC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfQ09SUkVDVElPTl9NT0RFX0hJR0hfUVVBTElUWSA9IDI7CkBAIC0yODIsMjEgKzI3NywzMSBAQAogICAgIC8vCiAKICAgICAvKioKKyAgICAgKiA8cD5UaGUgY2FtZXJhIGRldmljZSB3aWxsIG5vdCBhZGp1c3QgZXhwb3N1cmUgZHVyYXRpb24gdG8KKyAgICAgKiBhdm9pZCBiYW5kaW5nIHByb2JsZW1zLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfQU5USUJBTkRJTkdfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfQU5USUJBTkRJTkdfTU9ERV9PRkYgPSAwOwogCiAgICAgLyoqCisgICAgICogPHA+VGhlIGNhbWVyYSBkZXZpY2Ugd2lsbCBhZGp1c3QgZXhwb3N1cmUgZHVyYXRpb24gdG8KKyAgICAgKiBhdm9pZCBiYW5kaW5nIHByb2JsZW1zIHdpdGggNTBIeiBpbGx1bWluYXRpb24gc291cmNlcy48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX0FOVElCQU5ESU5HX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX0FOVElCQU5ESU5HX01PREVfNTBIWiA9IDE7CiAKICAgICAvKioKKyAgICAgKiA8cD5UaGUgY2FtZXJhIGRldmljZSB3aWxsIGFkanVzdCBleHBvc3VyZSBkdXJhdGlvbiB0bworICAgICAqIGF2b2lkIGJhbmRpbmcgcHJvYmxlbXMgd2l0aCA2MEh6IGlsbHVtaW5hdGlvbgorICAgICAqIHNvdXJjZXMuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9BTlRJQkFORElOR19NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9BTlRJQkFORElOR19NT0RFXzYwSFogPSAyOwogCiAgICAgLyoqCisgICAgICogPHA+VGhlIGNhbWVyYSBkZXZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGFkYXB0IGl0cworICAgICAqIGFudGliYW5kaW5nIHJvdXRpbmUgdG8gdGhlIGN1cnJlbnQgaWxsdW1pbmF0aW9uCisgICAgICogY29uZGl0aW9ucy4gVGhpcyBpcyB0aGUgZGVmYXVsdC48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX0FOVElCQU5ESU5HX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX0FOVElCQU5ESU5HX01PREVfQVVUTyA9IDM7CkBAIC0zMDYsNTIgKzMxMSw3MyBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBdXRvZXhwb3N1cmUgaXMgZGlzYWJsZWQ7IHNlbnNvci5leHBvc3VyZVRpbWUsCi0gICAgICogc2Vuc29yLnNlbnNpdGl2aXR5IGFuZCBzZW5zb3IuZnJhbWVEdXJhdGlvbiBhcmUgdXNlZAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGUgY2FtZXJhIGRldmljZSdzIGF1dG9leHBvc3VyZSByb3V0aW5lIGlzIGRpc2FibGVkOworICAgICAqIHRoZSBhcHBsaWNhdGlvbi1zZWxlY3RlZCB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX0VYUE9TVVJFX1RJTUUgYW5kcm9pZC5zZW5zb3IuZXhwb3N1cmVUaW1lfSwKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX1NFTlNJVElWSVRZIGFuZHJvaWQuc2Vuc29yLnNlbnNpdGl2aXR5fSBhbmQKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX0ZSQU1FX0RVUkFUSU9OIGFuZHJvaWQuc2Vuc29yLmZyYW1lRHVyYXRpb259IGFyZSB1c2VkIGJ5IHRoZSBjYW1lcmEKKyAgICAgKiBkZXZpY2UsIGFsb25nIHdpdGggYW5kcm9pZC5mbGFzaC4qIGZpZWxkcywgaWYgdGhlcmUncworICAgICAqIGEgZmxhc2ggdW5pdCBmb3IgdGhpcyBjYW1lcmEgZGV2aWNlLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX0VYUE9TVVJFX1RJTUUKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I1NFTlNPUl9GUkFNRV9EVVJBVElPTgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX1NFTlNJVElWSVRZCiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX01PREVfT0ZGID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEF1dG9leHBvc3VyZSBpcyBhY3RpdmUsIG5vIGZsYXNoCi0gICAgICogY29udHJvbAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGUgY2FtZXJhIGRldmljZSdzIGF1dG9leHBvc3VyZSByb3V0aW5lIGlzIGFjdGl2ZSwKKyAgICAgKiB3aXRoIG5vIGZsYXNoIGNvbnRyb2wuIFRoZSBhcHBsaWNhdGlvbidzIHZhbHVlcyBmb3IKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX0VYUE9TVVJFX1RJTUUgYW5kcm9pZC5zZW5zb3IuZXhwb3N1cmVUaW1lfSwKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX1NFTlNJVElWSVRZIGFuZHJvaWQuc2Vuc29yLnNlbnNpdGl2aXR5fSwgYW5kCisgICAgICoge0BsaW5rIENhcHR1cmVSZXF1ZXN0I1NFTlNPUl9GUkFNRV9EVVJBVElPTiBhbmRyb2lkLnNlbnNvci5mcmFtZUR1cmF0aW9ufSBhcmUgaWdub3JlZC4gVGhlCisgICAgICogYXBwbGljYXRpb24gaGFzIGNvbnRyb2wgb3ZlciB0aGUgdmFyaW91cworICAgICAqIGFuZHJvaWQuZmxhc2guKiBmaWVsZHMuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfRVhQT1NVUkVfVElNRQorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX0ZSQU1FX0RVUkFUSU9OCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfU0VOU0lUSVZJVFkKICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfTU9ERV9PTiA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBmbGFzaCBleGlzdHMgQXV0b2V4cG9zdXJlIGlzIGFjdGl2ZSwgYXV0bwotICAgICAqIGZsYXNoIGNvbnRyb2w7IGZsYXNoIG1heSBiZSBmaXJlZCB3aGVuIHByZWNhcHR1cmUKLSAgICAgKiB0cmlnZ2VyIGlzIGFjdGl2YXRlZCwgYW5kIGZvciBjYXB0dXJlcyBmb3Igd2hpY2gKLSAgICAgKiBjYXB0dXJlSW50ZW50ID0gU1RJTExfQ0FQVFVSRQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaWtlIE9OLCBleGNlcHQgdGhhdCB0aGUgY2FtZXJhIGRldmljZSBhbHNvIGNvbnRyb2xzCisgICAgICogdGhlIGNhbWVyYSdzIGZsYXNoIHVuaXQsIGZpcmluZyBpdCBpbiBsb3ctbGlnaHQKKyAgICAgKiBjb25kaXRpb25zLiBUaGUgZmxhc2ggbWF5IGJlIGZpcmVkIGR1cmluZyBhCisgICAgICogcHJlY2FwdHVyZSBzZXF1ZW5jZSAodHJpZ2dlcmVkIGJ5CisgICAgICoge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSIGFuZHJvaWQuY29udHJvbC5hZVByZWNhcHR1cmVUcmlnZ2VyfSkgYW5kIG1heSBiZSBmaXJlZAorICAgICAqIGZvciBjYXB0dXJlcyBmb3Igd2hpY2ggdGhlCisgICAgICoge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQ0FQVFVSRV9JTlRFTlQgYW5kcm9pZC5jb250cm9sLmNhcHR1cmVJbnRlbnR9IGZpZWxkIGlzIHNldCB0bworICAgICAqIFNUSUxMX0NBUFRVUkU8L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0NBUFRVUkVfSU5URU5UCiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX01PREVfT05fQVVUT19GTEFTSCA9IDI7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBmbGFzaCBleGlzdHMgQXV0b2V4cG9zdXJlIGlzIGFjdGl2ZSwgYXV0bwotICAgICAqIGZsYXNoIGNvbnRyb2wgZm9yIHByZWNhcHR1cmUgdHJpZ2dlciBhbmQgYWx3YXlzIGZsYXNoCi0gICAgICogd2hlbiBjYXB0dXJlSW50ZW50ID0gU1RJTExfQ0FQVFVSRQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaWtlIE9OLCBleGNlcHQgdGhhdCB0aGUgY2FtZXJhIGRldmljZSBhbHNvIGNvbnRyb2xzCisgICAgICogdGhlIGNhbWVyYSdzIGZsYXNoIHVuaXQsIGFsd2F5cyBmaXJpbmcgaXQgZm9yIHN0aWxsCisgICAgICogY2FwdHVyZXMuIFRoZSBmbGFzaCBtYXkgYmUgZmlyZWQgZHVyaW5nIGEgcHJlY2FwdHVyZQorICAgICAqIHNlcXVlbmNlICh0cmlnZ2VyZWQgYnkKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVIgYW5kcm9pZC5jb250cm9sLmFlUHJlY2FwdHVyZVRyaWdnZXJ9KSBhbmQgd2lsbCBhbHdheXMKKyAgICAgKiBiZSBmaXJlZCBmb3IgY2FwdHVyZXMgZm9yIHdoaWNoIHRoZQorICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0NBUFRVUkVfSU5URU5UIGFuZHJvaWQuY29udHJvbC5jYXB0dXJlSW50ZW50fSBmaWVsZCBpcyBzZXQgdG8KKyAgICAgKiBTVElMTF9DQVBUVVJFPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX1BSRUNBUFRVUkVfVFJJR0dFUgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9DQVBUVVJFX0lOVEVOVAogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9NT0RFX09OX0FMV0FZU19GTEFTSCA9IDM7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBvcHRpb25hbCBBdXRvbWF0aWMgcmVkIGV5ZSByZWR1Y3Rpb24gd2l0aCBmbGFzaC4KLSAgICAgKiBJZiBkZWVtZWQgbmVjZXNzYXJ5LCByZWQgZXllIHJlZHVjdGlvbiBzZXF1ZW5jZSBzaG91bGQKLSAgICAgKiBmaXJlIHdoZW4gcHJlY2FwdHVyZSB0cmlnZ2VyIGlzIGFjdGl2YXRlZCwgYW5kIGZpbmFsCi0gICAgICogZmxhc2ggc2hvdWxkIGZpcmUgd2hlbiBjYXB0dXJlSW50ZW50ID0KLSAgICAgKiBTVElMTF9DQVBUVVJFCi0gICAgICogPC9wPgorICAgICAqIDxwPkxpa2UgT05fQVVUT19GTEFTSCwgYnV0IHdpdGggYXV0b21hdGljIHJlZCBleWUKKyAgICAgKiByZWR1Y3Rpb24uIElmIGRlZW1lZCBuZWNlc3NhcnkgYnkgdGhlIGNhbWVyYSBkZXZpY2UsCisgICAgICogYSByZWQgZXllIHJlZHVjdGlvbiBmbGFzaCB3aWxsIGZpcmUgZHVyaW5nIHRoZQorICAgICAqIHByZWNhcHR1cmUgc2VxdWVuY2UuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9NT0RFX09OX0FVVE9fRkxBU0hfUkVERVlFID0gNDsKQEAgLTM2MSwyMCArMzg3LDE1IEBACiAgICAgLy8KIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSB0cmlnZ2VyIGlzIGlkbGUuCi0gICAgICogPC9wPgorICAgICAqIDxwPlRoZSB0cmlnZ2VyIGlzIGlkbGUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVIKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX1BSRUNBUFRVUkVfVFJJR0dFUl9JRExFID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSBwcmVjYXB0dXJlIG1ldGVyaW5nIHNlcXVlbmNlCi0gICAgICogbXVzdCBiZSBzdGFydGVkLiBUaGUgZXhhY3QgZWZmZWN0IG9mIHRoZSBwcmVjYXB0dXJlCi0gICAgICogdHJpZ2dlciBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IEFFIG1vZGUgYW5kCi0gICAgICogc3RhdGUuCi0gICAgICogPC9wPgorICAgICAqIDxwPlRoZSBwcmVjYXB0dXJlIG1ldGVyaW5nIHNlcXVlbmNlIHdpbGwgYmUgc3RhcnRlZAorICAgICAqIGJ5IHRoZSBjYW1lcmEgZGV2aWNlLiBUaGUgZXhhY3QgZWZmZWN0IG9mIHRoZSBwcmVjYXB0dXJlCisgICAgICogdHJpZ2dlciBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IEFFIG1vZGUgYW5kIHN0YXRlLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVJfU1RBUlQgPSAxOwpAQCAtMzg0LDU1ICs0MDUsNDcgQEAKICAgICAvLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhlIDNBIHJvdXRpbmVzIGRvIG5vdCBjb250cm9sIHRoZSBsZW5zOwotICAgICAqIGFuZHJvaWQubGVucy5mb2N1c0Rpc3RhbmNlIGlzIGNvbnRyb2xsZWQgYnkgdGhlCi0gICAgICogYXBwbGljYXRpb24KLSAgICAgKiA8L3A+CisgICAgICogPHA+VGhlIGF1dG8tZm9jdXMgcm91dGluZSBkb2VzIG5vdCBjb250cm9sIHRoZSBsZW5zOworICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNMRU5TX0ZPQ1VTX0RJU1RBTkNFIGFuZHJvaWQubGVucy5mb2N1c0Rpc3RhbmNlfSBpcyBjb250cm9sbGVkIGJ5IHRoZQorICAgICAqIGFwcGxpY2F0aW9uPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNMRU5TX0ZPQ1VTX0RJU1RBTkNFCiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX01PREVfT0ZGID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIGlmIGxlbnMgaXMgbm90IGZpeGVkIGZvY3VzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBVc2UgYW5kcm9pZC5sZW5zLm1pbmltdW1Gb2N1c0Rpc3RhbmNlIHRvIGRldGVybWluZSBpZiBsZW5zCi0gICAgICogaXMgZml4ZWQgZm9jdXMgSW4gdGhpcyBtb2RlLCB0aGUgbGVucyBkb2VzIG5vdCBtb3ZlIHVubGVzcworICAgICAqIDxwPklmIGxlbnMgaXMgbm90IGZpeGVkIGZvY3VzLjwvcD4KKyAgICAgKiA8cD5Vc2Uge0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNMRU5TX0lORk9fTUlOSU1VTV9GT0NVU19ESVNUQU5DRSBhbmRyb2lkLmxlbnMuaW5mby5taW5pbXVtRm9jdXNEaXN0YW5jZX0gdG8gZGV0ZXJtaW5lIGlmIGxlbnMKKyAgICAgKiBpcyBmaXhlZC1mb2N1cy4gSW4gdGhpcyBtb2RlLCB0aGUgbGVucyBkb2VzIG5vdCBtb3ZlIHVubGVzcwogICAgICAqIHRoZSBhdXRvZm9jdXMgdHJpZ2dlciBhY3Rpb24gaXMgY2FsbGVkLiBXaGVuIHRoYXQgdHJpZ2dlcgogICAgICAqIGlzIGFjdGl2YXRlZCwgQUYgbXVzdCB0cmFuc2l0aW9uIHRvIEFDVElWRV9TQ0FOLCB0aGVuIHRvCi0gICAgICogdGhlIG91dGNvbWUgb2YgdGhlIHNjYW4gKEZPQ1VTRUQgb3IKLSAgICAgKiBOT1RfRk9DVVNFRCkuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRyaWdnZXJpbmcgY2FuY2VsIEFGIHJlc2V0cyB0aGUgbGVucyBwb3NpdGlvbiB0byBkZWZhdWx0LAotICAgICAqIGFuZCBzZXRzIHRoZSBBRiBzdGF0ZSB0byBJTkFDVElWRS4KLSAgICAgKiA8L3A+CisgICAgICogdGhlIG91dGNvbWUgb2YgdGhlIHNjYW4gKEZPQ1VTRUQgb3IgTk9UX0ZPQ1VTRUQpLjwvcD4KKyAgICAgKiA8cD5UcmlnZ2VyaW5nIEFGX0NBTkNFTCByZXNldHMgdGhlIGxlbnMgcG9zaXRpb24gdG8gZGVmYXVsdCwKKyAgICAgKiBhbmQgc2V0cyB0aGUgQUYgc3RhdGUgdG8gSU5BQ1RJVkUuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjTEVOU19JTkZPX01JTklNVU1fRk9DVVNfRElTVEFOQ0UKICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUZfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfTU9ERV9BVVRPID0gMTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEluIHRoaXMgbW9kZSwgdGhlIGxlbnMgZG9lcyBub3QgbW92ZSB1bmxlc3MgdGhlCi0gICAgICogYXV0b2ZvY3VzIHRyaWdnZXIgYWN0aW9uIGlzIGNhbGxlZC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogV2hlbiB0aGF0IHRyaWdnZXIgaXMgYWN0aXZhdGVkLCBBRiBtdXN0IHRyYW5zaXRpb24gdG8KKyAgICAgKiA8cD5JbiB0aGlzIG1vZGUsIHRoZSBsZW5zIGRvZXMgbm90IG1vdmUgdW5sZXNzIHRoZQorICAgICAqIGF1dG9mb2N1cyB0cmlnZ2VyIGFjdGlvbiBpcyBjYWxsZWQuPC9wPgorICAgICAqIDxwPldoZW4gdGhhdCB0cmlnZ2VyIGlzIGFjdGl2YXRlZCwgQUYgbXVzdCB0cmFuc2l0aW9uIHRvCiAgICAgICogQUNUSVZFX1NDQU4sIHRoZW4gdG8gdGhlIG91dGNvbWUgb2YgdGhlIHNjYW4gKEZPQ1VTRUQgb3IKICAgICAgKiBOT1RfRk9DVVNFRCkuICBUcmlnZ2VyaW5nIGNhbmNlbCBBRiByZXNldHMgdGhlIGxlbnMKICAgICAgKiBwb3NpdGlvbiB0byBkZWZhdWx0LCBhbmQgc2V0cyB0aGUgQUYgc3RhdGUgdG8KLSAgICAgKiBJTkFDVElWRS4KLSAgICAgKiA8L3A+CisgICAgICogSU5BQ1RJVkUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9NT0RFX01BQ1JPID0gMjsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEluIHRoaXMgbW9kZSwgdGhlIEFGIGFsZ29yaXRobSBtb2RpZmllcyB0aGUgbGVucworICAgICAqIDxwPkluIHRoaXMgbW9kZSwgdGhlIEFGIGFsZ29yaXRobSBtb2RpZmllcyB0aGUgbGVucwogICAgICAqIHBvc2l0aW9uIGNvbnRpbnVhbGx5IHRvIGF0dGVtcHQgdG8gcHJvdmlkZSBhCi0gICAgICogY29uc3RhbnRseS1pbi1mb2N1cyBpbWFnZSBzdHJlYW0uCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBmb2N1c2luZyBiZWhhdmlvciBzaG91bGQgYmUgc3VpdGFibGUgZm9yIGdvb2QgcXVhbGl0eQorICAgICAqIGNvbnN0YW50bHktaW4tZm9jdXMgaW1hZ2Ugc3RyZWFtLjwvcD4KKyAgICAgKiA8cD5UaGUgZm9jdXNpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIHN1aXRhYmxlIGZvciBnb29kIHF1YWxpdHkKICAgICAgKiB2aWRlbyByZWNvcmRpbmc7IHR5cGljYWxseSB0aGlzIG1lYW5zIHNsb3dlciBmb2N1cwogICAgICAqIG1vdmVtZW50IGFuZCBubyBvdmVyc2hvb3RzLiBXaGVuIHRoZSBBRiB0cmlnZ2VyIGlzIG5vdAogICAgICAqIGludm9sdmVkLCB0aGUgQUYgYWxnb3JpdGhtIHNob3VsZCBzdGFydCBpbiBJTkFDVElWRSBzdGF0ZSwKQEAgLTQ0MCwyNSArNDUzLDIxIEBACiAgICAgICogc3RhdGVzIGFzIGFwcHJvcHJpYXRlLiBXaGVuIHRoZSBBRiB0cmlnZ2VyIGlzIGFjdGl2YXRlZCwKICAgICAgKiB0aGUgYWxnb3JpdGhtIHNob3VsZCBpbW1lZGlhdGVseSB0cmFuc2l0aW9uIGludG8KICAgICAgKiBBRl9GT0NVU0VEIG9yIEFGX05PVF9GT0NVU0VEIGFzIGFwcHJvcHJpYXRlLCBhbmQgbG9jayB0aGUKLSAgICAgKiBsZW5zIHBvc2l0aW9uIHVudGlsIGEgY2FuY2VsIEFGIHRyaWdnZXIgaXMgcmVjZWl2ZWQuCi0gICAgICogPC9wPjxwPgotICAgICAqIE9uY2UgY2FuY2VsIGlzIHJlY2VpdmVkLCB0aGUgYWxnb3JpdGhtIHNob3VsZCB0cmFuc2l0aW9uCisgICAgICogbGVucyBwb3NpdGlvbiB1bnRpbCBhIGNhbmNlbCBBRiB0cmlnZ2VyIGlzIHJlY2VpdmVkLjwvcD4KKyAgICAgKiA8cD5PbmNlIGNhbmNlbCBpcyByZWNlaXZlZCwgdGhlIGFsZ29yaXRobSBzaG91bGQgdHJhbnNpdGlvbgogICAgICAqIGJhY2sgdG8gSU5BQ1RJVkUgYW5kIHJlc3VtZSBwYXNzaXZlIHNjYW4uIE5vdGUgdGhhdCB0aGlzCiAgICAgICogYmVoYXZpb3IgaXMgbm90IGlkZW50aWNhbCB0byBDT05USU5VT1VTX1BJQ1RVUkUsIHNpbmNlIGFuCiAgICAgICogb25nb2luZyBQQVNTSVZFX1NDQU4gbXVzdCBpbW1lZGlhdGVseSBiZQotICAgICAqIGNhbmNlbGVkLgotICAgICAqIDwvcD4KKyAgICAgKiBjYW5jZWxlZC48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX01PREVfQ09OVElOVU9VU19WSURFTyA9IDM7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBJbiB0aGlzIG1vZGUsIHRoZSBBRiBhbGdvcml0aG0gbW9kaWZpZXMgdGhlIGxlbnMKKyAgICAgKiA8cD5JbiB0aGlzIG1vZGUsIHRoZSBBRiBhbGdvcml0aG0gbW9kaWZpZXMgdGhlIGxlbnMKICAgICAgKiBwb3NpdGlvbiBjb250aW51YWxseSB0byBhdHRlbXB0IHRvIHByb3ZpZGUgYQotICAgICAqIGNvbnN0YW50bHktaW4tZm9jdXMgaW1hZ2Ugc3RyZWFtLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgZm9jdXNpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIHN1aXRhYmxlIGZvciBzdGlsbCBpbWFnZQorICAgICAqIGNvbnN0YW50bHktaW4tZm9jdXMgaW1hZ2Ugc3RyZWFtLjwvcD4KKyAgICAgKiA8cD5UaGUgZm9jdXNpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIHN1aXRhYmxlIGZvciBzdGlsbCBpbWFnZQogICAgICAqIGNhcHR1cmU7IHR5cGljYWxseSB0aGlzIG1lYW5zIGZvY3VzaW5nIGFzIGZhc3QgYXMKICAgICAgKiBwb3NzaWJsZS4gV2hlbiB0aGUgQUYgdHJpZ2dlciBpcyBub3QgaW52b2x2ZWQsIHRoZSBBRgogICAgICAqIGFsZ29yaXRobSBzaG91bGQgc3RhcnQgaW4gSU5BQ1RJVkUgc3RhdGUsIGFuZCB0aGVuCkBAIC00NjcsMjIgKzQ3NiwxOCBAQAogICAgICAqIHRyaWdnZXIgaXMgYWN0aXZhdGVkLCB0aGUgYWxnb3JpdGhtIHNob3VsZCBmaW5pc2ggaXRzCiAgICAgICogUEFTU0lWRV9TQ0FOIGlmIGFjdGl2ZSwgYW5kIHRoZW4gdHJhbnNpdGlvbiBpbnRvCiAgICAgICogQUZfRk9DVVNFRCBvciBBRl9OT1RfRk9DVVNFRCBhcyBhcHByb3ByaWF0ZSwgYW5kIGxvY2sgdGhlCi0gICAgICogbGVucyBwb3NpdGlvbiB1bnRpbCBhIGNhbmNlbCBBRiB0cmlnZ2VyIGlzIHJlY2VpdmVkLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBXaGVuIHRoZSBBRiBjYW5jZWwgdHJpZ2dlciBpcyBhY3RpdmF0ZWQsIHRoZSBhbGdvcml0aG0KKyAgICAgKiBsZW5zIHBvc2l0aW9uIHVudGlsIGEgY2FuY2VsIEFGIHRyaWdnZXIgaXMgcmVjZWl2ZWQuPC9wPgorICAgICAqIDxwPldoZW4gdGhlIEFGIGNhbmNlbCB0cmlnZ2VyIGlzIGFjdGl2YXRlZCwgdGhlIGFsZ29yaXRobQogICAgICAqIHNob3VsZCB0cmFuc2l0aW9uIGJhY2sgdG8gSU5BQ1RJVkUgYW5kIHRoZW4gYWN0IGFzIGlmIGl0Ci0gICAgICogaGFzIGp1c3QgYmVlbiBzdGFydGVkLgotICAgICAqIDwvcD4KKyAgICAgKiBoYXMganVzdCBiZWVuIHN0YXJ0ZWQuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9NT0RFX0NPTlRJTlVPVVNfUElDVFVSRSA9IDQ7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBFeHRlbmRlZCBkZXB0aCBvZiBmaWVsZCAoZGlnaXRhbCBmb2N1cykuIEFGCisgICAgICogPHA+RXh0ZW5kZWQgZGVwdGggb2YgZmllbGQgKGRpZ2l0YWwgZm9jdXMpLiBBRgogICAgICAqIHRyaWdnZXIgaXMgaWdub3JlZCwgQUYgc3RhdGUgc2hvdWxkIGFsd2F5cyBiZQotICAgICAqIElOQUNUSVZFLgotICAgICAqIDwvcD4KKyAgICAgKiBJTkFDVElWRS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX01PREVfRURPRiA9IDU7CkBAIC00OTIsMjYgKzQ5NywyMCBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgdHJpZ2dlciBpcyBpZGxlLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGUgdHJpZ2dlciBpcyBpZGxlLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUZfVFJJR0dFUgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfVFJJR0dFUl9JRExFID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEF1dG9mb2N1cyBtdXN0IHRyaWdnZXIgbm93LgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5BdXRvZm9jdXMgd2lsbCB0cmlnZ2VyIG5vdy48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX1RSSUdHRVIKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1RSSUdHRVJfU1RBUlQgPSAxOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQXV0b2ZvY3VzIG11c3QgcmV0dXJuIHRvIGluaXRpYWwKLSAgICAgKiBzdGF0ZSwgYW5kIGNhbmNlbCBhbnkgYWN0aXZlIHRyaWdnZXIuCi0gICAgICogPC9wPgorICAgICAqIDxwPkF1dG9mb2N1cyB3aWxsIHJldHVybiB0byBpdHMgaW5pdGlhbAorICAgICAqIHN0YXRlLCBhbmQgY2FuY2VsIGFueSBjdXJyZW50bHkgYWN0aXZlIHRyaWdnZXIuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRl9UUklHR0VSCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9UUklHR0VSX0NBTkNFTCA9IDI7CkBAIC01MjEsNDYgKzUyMCw4OCBAQAogICAgIC8vCiAKICAgICAvKioKKyAgICAgKiA8cD5UaGUgY2FtZXJhIGRldmljZSdzIGF1dG8gd2hpdGUgYmFsYW5jZSByb3V0aW5lIGlzIGRpc2FibGVkOworICAgICAqIHRoZSBhcHBsaWNhdGlvbi1zZWxlY3RlZCBjb2xvciB0cmFuc2Zvcm0gbWF0cml4CisgICAgICogKHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX1RSQU5TRk9STSBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi50cmFuc2Zvcm19KSBhbmQgZ2FpbnMKKyAgICAgKiAoe0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fR0FJTlMgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24uZ2FpbnN9KSBhcmUgdXNlZCBieSB0aGUgY2FtZXJhCisgICAgICogZGV2aWNlIGZvciBtYW51YWwgd2hpdGUgYmFsYW5jZSBjb250cm9sLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9HQUlOUworICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9UUkFOU0ZPUk0KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQVdCX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX09GRiA9IDA7CiAKICAgICAvKioKKyAgICAgKiA8cD5UaGUgY2FtZXJhIGRldmljZSdzIGF1dG8gd2hpdGUgYmFsYW5jZSByb3V0aW5lIGlzIGFjdGl2ZTsKKyAgICAgKiB0aGUgYXBwbGljYXRpb24ncyB2YWx1ZXMgZm9yIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLnRyYW5zZm9ybQorICAgICAqIGFuZCB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9HQUlOUyBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5nYWluc30gYXJlIGlnbm9yZWQuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX0dBSU5TCiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfTU9ERV9BVVRPID0gMTsKIAogICAgIC8qKgorICAgICAqIDxwPlRoZSBjYW1lcmEgZGV2aWNlJ3MgYXV0byB3aGl0ZSBiYWxhbmNlIHJvdXRpbmUgaXMgZGlzYWJsZWQ7CisgICAgICogdGhlIGNhbWVyYSBkZXZpY2UgdXNlcyBpbmNhbmRlc2NlbnQgbGlnaHQgYXMgdGhlIGFzc3VtZWQgc2NlbmUKKyAgICAgKiBpbGx1bWluYXRpb24gZm9yIHdoaXRlIGJhbGFuY2UuIFdoaWxlIHRoZSBleGFjdCB3aGl0ZSBiYWxhbmNlCisgICAgICogdHJhbnNmb3JtcyBhcmUgdXAgdG8gdGhlIGNhbWVyYSBkZXZpY2UsIHRoZXkgd2lsbCBhcHByb3hpbWF0ZWx5CisgICAgICogbWF0Y2ggdGhlIENJRSBzdGFuZGFyZCBpbGx1bWluYW50IEEuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BV0JfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQVdCX01PREVfSU5DQU5ERVNDRU5UID0gMjsKIAogICAgIC8qKgorICAgICAqIDxwPlRoZSBjYW1lcmEgZGV2aWNlJ3MgYXV0byB3aGl0ZSBiYWxhbmNlIHJvdXRpbmUgaXMgZGlzYWJsZWQ7CisgICAgICogdGhlIGNhbWVyYSBkZXZpY2UgdXNlcyBmbHVvcmVzY2VudCBsaWdodCBhcyB0aGUgYXNzdW1lZCBzY2VuZQorICAgICAqIGlsbHVtaW5hdGlvbiBmb3Igd2hpdGUgYmFsYW5jZS4gV2hpbGUgdGhlIGV4YWN0IHdoaXRlIGJhbGFuY2UKKyAgICAgKiB0cmFuc2Zvcm1zIGFyZSB1cCB0byB0aGUgY2FtZXJhIGRldmljZSwgdGhleSB3aWxsIGFwcHJveGltYXRlbHkKKyAgICAgKiBtYXRjaCB0aGUgQ0lFIHN0YW5kYXJkIGlsbHVtaW5hbnQgRjIuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BV0JfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQVdCX01PREVfRkxVT1JFU0NFTlQgPSAzOwogCiAgICAgLyoqCisgICAgICogPHA+VGhlIGNhbWVyYSBkZXZpY2UncyBhdXRvIHdoaXRlIGJhbGFuY2Ugcm91dGluZSBpcyBkaXNhYmxlZDsKKyAgICAgKiB0aGUgY2FtZXJhIGRldmljZSB1c2VzIHdhcm0gZmx1b3Jlc2NlbnQgbGlnaHQgYXMgdGhlIGFzc3VtZWQgc2NlbmUKKyAgICAgKiBpbGx1bWluYXRpb24gZm9yIHdoaXRlIGJhbGFuY2UuIFdoaWxlIHRoZSBleGFjdCB3aGl0ZSBiYWxhbmNlCisgICAgICogdHJhbnNmb3JtcyBhcmUgdXAgdG8gdGhlIGNhbWVyYSBkZXZpY2UsIHRoZXkgd2lsbCBhcHByb3hpbWF0ZWx5CisgICAgICogbWF0Y2ggdGhlIENJRSBzdGFuZGFyZCBpbGx1bWluYW50IEY0LjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQVdCX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX1dBUk1fRkxVT1JFU0NFTlQgPSA0OwogCiAgICAgLyoqCisgICAgICogPHA+VGhlIGNhbWVyYSBkZXZpY2UncyBhdXRvIHdoaXRlIGJhbGFuY2Ugcm91dGluZSBpcyBkaXNhYmxlZDsKKyAgICAgKiB0aGUgY2FtZXJhIGRldmljZSB1c2VzIGRheWxpZ2h0IGxpZ2h0IGFzIHRoZSBhc3N1bWVkIHNjZW5lCisgICAgICogaWxsdW1pbmF0aW9uIGZvciB3aGl0ZSBiYWxhbmNlLiBXaGlsZSB0aGUgZXhhY3Qgd2hpdGUgYmFsYW5jZQorICAgICAqIHRyYW5zZm9ybXMgYXJlIHVwIHRvIHRoZSBjYW1lcmEgZGV2aWNlLCB0aGV5IHdpbGwgYXBwcm94aW1hdGVseQorICAgICAqIG1hdGNoIHRoZSBDSUUgc3RhbmRhcmQgaWxsdW1pbmFudCBENjUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BV0JfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQVdCX01PREVfREFZTElHSFQgPSA1OwogCiAgICAgLyoqCisgICAgICogPHA+VGhlIGNhbWVyYSBkZXZpY2UncyBhdXRvIHdoaXRlIGJhbGFuY2Ugcm91dGluZSBpcyBkaXNhYmxlZDsKKyAgICAgKiB0aGUgY2FtZXJhIGRldmljZSB1c2VzIGNsb3VkeSBkYXlsaWdodCBsaWdodCBhcyB0aGUgYXNzdW1lZCBzY2VuZQorICAgICAqIGlsbHVtaW5hdGlvbiBmb3Igd2hpdGUgYmFsYW5jZS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfTU9ERV9DTE9VRFlfREFZTElHSFQgPSA2OwogCiAgICAgLyoqCisgICAgICogPHA+VGhlIGNhbWVyYSBkZXZpY2UncyBhdXRvIHdoaXRlIGJhbGFuY2Ugcm91dGluZSBpcyBkaXNhYmxlZDsKKyAgICAgKiB0aGUgY2FtZXJhIGRldmljZSB1c2VzIHR3aWxpZ2h0IGxpZ2h0IGFzIHRoZSBhc3N1bWVkIHNjZW5lCisgICAgICogaWxsdW1pbmF0aW9uIGZvciB3aGl0ZSBiYWxhbmNlLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQVdCX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX1RXSUxJR0hUID0gNzsKIAogICAgIC8qKgorICAgICAqIDxwPlRoZSBjYW1lcmEgZGV2aWNlJ3MgYXV0byB3aGl0ZSBiYWxhbmNlIHJvdXRpbmUgaXMgZGlzYWJsZWQ7CisgICAgICogdGhlIGNhbWVyYSBkZXZpY2UgdXNlcyBzaGFkZSBsaWdodCBhcyB0aGUgYXNzdW1lZCBzY2VuZQorICAgICAqIGlsbHVtaW5hdGlvbiBmb3Igd2hpdGUgYmFsYW5jZS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfTU9ERV9TSEFERSA9IDg7CkBAIC01NzAsNTkgKzYxMSw0NyBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIHJlcXVlc3QgZG9lc24ndCBmYWxsIGludG8gdGhlIG90aGVyCisgICAgICogPHA+VGhpcyByZXF1ZXN0IGRvZXNuJ3QgZmFsbCBpbnRvIHRoZSBvdGhlcgogICAgICAqIGNhdGVnb3JpZXMuIERlZmF1bHQgdG8gcHJldmlldy1saWtlCi0gICAgICogYmVoYXZpb3IuCi0gICAgICogPC9wPgorICAgICAqIGJlaGF2aW9yLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQ0FQVFVSRV9JTlRFTlQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0NBUFRVUkVfSU5URU5UX0NVU1RPTSA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIHJlcXVlc3QgaXMgZm9yIGEgcHJldmlldy1saWtlIHVzZWNhc2UuIFRoZQorICAgICAqIDxwPlRoaXMgcmVxdWVzdCBpcyBmb3IgYSBwcmV2aWV3LWxpa2UgdXNlY2FzZS4gVGhlCiAgICAgICogcHJlY2FwdHVyZSB0cmlnZ2VyIG1heSBiZSB1c2VkIHRvIHN0YXJ0IG9mZiBhIG1ldGVyaW5nCi0gICAgICogdy9mbGFzaCBzZXF1ZW5jZQotICAgICAqIDwvcD4KKyAgICAgKiB3L2ZsYXNoIHNlcXVlbmNlPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9DQVBUVVJFX0lOVEVOVAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfUFJFVklFVyA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIHJlcXVlc3QgaXMgZm9yIGEgc3RpbGwgY2FwdHVyZS10eXBlCi0gICAgICogdXNlY2FzZS4KLSAgICAgKiA8L3A+CisgICAgICogPHA+VGhpcyByZXF1ZXN0IGlzIGZvciBhIHN0aWxsIGNhcHR1cmUtdHlwZQorICAgICAqIHVzZWNhc2UuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9DQVBUVVJFX0lOVEVOVAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfU1RJTExfQ0FQVFVSRSA9IDI7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIHJlcXVlc3QgaXMgZm9yIGEgdmlkZW8gcmVjb3JkaW5nCi0gICAgICogdXNlY2FzZS4KLSAgICAgKiA8L3A+CisgICAgICogPHA+VGhpcyByZXF1ZXN0IGlzIGZvciBhIHZpZGVvIHJlY29yZGluZworICAgICAqIHVzZWNhc2UuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9DQVBUVVJFX0lOVEVOVAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfVklERU9fUkVDT1JEID0gMzsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoaXMgcmVxdWVzdCBpcyBmb3IgYSB2aWRlbyBzbmFwc2hvdCAoc3RpbGwKLSAgICAgKiBpbWFnZSB3aGlsZSByZWNvcmRpbmcgdmlkZW8pIHVzZWNhc2UKLSAgICAgKiA8L3A+CisgICAgICogPHA+VGhpcyByZXF1ZXN0IGlzIGZvciBhIHZpZGVvIHNuYXBzaG90IChzdGlsbAorICAgICAqIGltYWdlIHdoaWxlIHJlY29yZGluZyB2aWRlbykgdXNlY2FzZTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQ0FQVFVSRV9JTlRFTlQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0NBUFRVUkVfSU5URU5UX1ZJREVPX1NOQVBTSE9UID0gNDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoaXMgcmVxdWVzdCBpcyBmb3IgYSBaU0wgdXNlY2FzZTsgdGhlCisgICAgICogPHA+VGhpcyByZXF1ZXN0IGlzIGZvciBhIFpTTCB1c2VjYXNlOyB0aGUKICAgICAgKiBhcHBsaWNhdGlvbiB3aWxsIHN0cmVhbSBmdWxsLXJlc29sdXRpb24gaW1hZ2VzIGFuZAogICAgICAqIHJlcHJvY2VzcyBvbmUgb3Igc2V2ZXJhbCBsYXRlciBmb3IgYSBmaW5hbAotICAgICAqIGNhcHR1cmUKLSAgICAgKiA8L3A+CisgICAgICogY2FwdHVyZTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQ0FQVFVSRV9JTlRFTlQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0NBUFRVUkVfSU5URU5UX1pFUk9fU0hVVFRFUl9MQUcgPSA1OwpAQCAtNjgxLDM2ICs3MTAsMzAgQEAKICAgICAvLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRnVsbCBhcHBsaWNhdGlvbiBjb250cm9sIG9mIHBpcGVsaW5lLiBBbGwgM0EKKyAgICAgKiA8cD5GdWxsIGFwcGxpY2F0aW9uIGNvbnRyb2wgb2YgcGlwZWxpbmUuIEFsbCAzQQogICAgICAqIHJvdXRpbmVzIGFyZSBkaXNhYmxlZCwgbm8gb3RoZXIgc2V0dGluZ3MgaW4KLSAgICAgKiBhbmRyb2lkLmNvbnRyb2wuKiBoYXZlIGFueSBlZmZlY3QKLSAgICAgKiA8L3A+CisgICAgICogYW5kcm9pZC5jb250cm9sLiogaGF2ZSBhbnkgZWZmZWN0PC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9NT0RFX09GRiA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBVc2Ugc2V0dGluZ3MgZm9yIGVhY2ggaW5kaXZpZHVhbCAzQSByb3V0aW5lLgorICAgICAqIDxwPlVzZSBzZXR0aW5ncyBmb3IgZWFjaCBpbmRpdmlkdWFsIDNBIHJvdXRpbmUuCiAgICAgICogTWFudWFsIGNvbnRyb2wgb2YgY2FwdHVyZSBwYXJhbWV0ZXJzIGlzIGRpc2FibGVkLiBBbGwKICAgICAgKiBjb250cm9scyBpbiBhbmRyb2lkLmNvbnRyb2wuKiBiZXNpZGVzIHNjZW5lTW9kZSB0YWtlCi0gICAgICogZWZmZWN0Ci0gICAgICogPC9wPgorICAgICAqIGVmZmVjdDwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfTU9ERV9BVVRPID0gMTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFVzZSBzcGVjaWZpYyBzY2VuZSBtb2RlLiBFbmFibGluZyB0aGlzIGRpc2FibGVzCisgICAgICogPHA+VXNlIHNwZWNpZmljIHNjZW5lIG1vZGUuIEVuYWJsaW5nIHRoaXMgZGlzYWJsZXMKICAgICAgKiBjb250cm9sLmFlTW9kZSwgY29udHJvbC5hd2JNb2RlIGFuZCBjb250cm9sLmFmTW9kZQogICAgICAqIGNvbnRyb2xzOyB0aGUgSEFMIG11c3QgaWdub3JlIHRob3NlIHNldHRpbmdzIHdoaWxlCiAgICAgICogVVNFX1NDRU5FX01PREUgaXMgYWN0aXZlIChleGNlcHQgZm9yIEZBQ0VfUFJJT1JJVFkKICAgICAgKiBzY2VuZSBtb2RlKS4gT3RoZXIgY29udHJvbCBlbnRyaWVzIGFyZSBzdGlsbCBhY3RpdmUuCiAgICAgICogVGhpcyBzZXR0aW5nIGNhbiBvbmx5IGJlIHVzZWQgaWYgYXZhaWxhYmxlU2NlbmVNb2RlcyAhPQotICAgICAqIFVOU1VQUE9SVEVECi0gICAgICogPC9wPgorICAgICAqIFVOU1VQUE9SVEVEPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9NT0RFX1VTRV9TQ0VORV9NT0RFID0gMjsKQEAgLTcyNSwxOCArNzQ4LDE1IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9TQ0VORV9NT0RFX1VOU1VQUE9SVEVEID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIGlmIGZhY2UgZGV0ZWN0aW9uIHN1cHBvcnQgZXhpc3RzIFVzZSBmYWNlCisgICAgICogPHA+aWYgZmFjZSBkZXRlY3Rpb24gc3VwcG9ydCBleGlzdHMgVXNlIGZhY2UKICAgICAgKiBkZXRlY3Rpb24gZGF0YSB0byBkcml2ZSAzQSByb3V0aW5lcy4gSWYgZmFjZSBkZXRlY3Rpb24KICAgICAgKiBzdGF0aXN0aWNzIGFyZSBkaXNhYmxlZCwgc2hvdWxkIHN0aWxsIG9wZXJhdGUgY29ycmVjdGx5CiAgICAgICogKGJ1dCBub3QgcmV0dXJuIGZhY2UgZGV0ZWN0aW9uIHN0YXRpc3RpY3MgdG8gdGhlCi0gICAgICogZnJhbWV3b3JrKS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVW5saWtlIHRoZSBvdGhlciBzY2VuZSBtb2RlcywgYWVNb2RlLCBhd2JNb2RlLCBhbmQgYWZNb2RlCisgICAgICogZnJhbWV3b3JrKS48L3A+CisgICAgICogPHA+VW5saWtlIHRoZSBvdGhlciBzY2VuZSBtb2RlcywgYWVNb2RlLCBhd2JNb2RlLCBhbmQgYWZNb2RlCiAgICAgICogcmVtYWluIGFjdGl2ZSB3aGVuIEZBQ0VfUFJJT1JJVFkgaXMgc2V0LiBUaGlzIGlzIGR1ZSB0bwogICAgICAqIGNvbXBhdGliaWxpdHkgY29uY2VybnMgd2l0aCB0aGUgb2xkIGNhbWVyYQotICAgICAqIEFQSQotICAgICAqIDwvcD4KKyAgICAgKiBBUEk8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX1NDRU5FX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfRkFDRV9QUklPUklUWSA9IDE7CkBAIC04MjEsMjcgKzg0MSwyMSBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBObyBlZGdlIGVuaGFuY2VtZW50IGlzIGFwcGxpZWQKLSAgICAgKiA8L3A+CisgICAgICogPHA+Tm8gZWRnZSBlbmhhbmNlbWVudCBpcyBhcHBsaWVkPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjRURHRV9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRURHRV9NT0RFX09GRiA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBNdXN0IG5vdCBzbG93IGRvd24gZnJhbWUgcmF0ZSByZWxhdGl2ZSB0byByYXcKLSAgICAgKiBiYXllciBvdXRwdXQKLSAgICAgKiA8L3A+CisgICAgICogPHA+TXVzdCBub3Qgc2xvdyBkb3duIGZyYW1lIHJhdGUgcmVsYXRpdmUgdG8gc2Vuc29yCisgICAgICogb3V0cHV0PC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjRURHRV9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRURHRV9NT0RFX0ZBU1QgPSAxOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRnJhbWUgcmF0ZSBtYXkgYmUgcmVkdWNlZCBieSBoaWdoCi0gICAgICogcXVhbGl0eQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5GcmFtZSByYXRlIG1heSBiZSByZWR1Y2VkIGJ5IGhpZ2gKKyAgICAgKiBxdWFsaXR5PC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjRURHRV9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRURHRV9NT0RFX0hJR0hfUVVBTElUWSA9IDI7CkBAIC04NTEsMzAgKzg2NSwyMSBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBEbyBub3QgZmlyZSB0aGUgZmxhc2ggZm9yIHRoaXMKLSAgICAgKiBjYXB0dXJlCi0gICAgICogPC9wPgorICAgICAqIDxwPkRvIG5vdCBmaXJlIHRoZSBmbGFzaCBmb3IgdGhpcyBjYXB0dXJlLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0ZMQVNIX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9NT0RFX09GRiA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBhbmRyb2lkLmZsYXNoLmF2YWlsYWJsZSBpcyB0cnVlIEZpcmUgZmxhc2gKLSAgICAgKiBmb3IgdGhpcyBjYXB0dXJlIGJhc2VkIG9uIGZpcmluZ1Bvd2VyLAotICAgICAqIGZpcmluZ1RpbWUuCi0gICAgICogPC9wPgorICAgICAqIDxwPklmIHRoZSBmbGFzaCBpcyBhdmFpbGFibGUgYW5kIGNoYXJnZWQsIGZpcmUgZmxhc2gKKyAgICAgKiBmb3IgdGhpcyBjYXB0dXJlIGJhc2VkIG9uIGFuZHJvaWQuZmxhc2guZmlyaW5nUG93ZXIgYW5kCisgICAgICogYW5kcm9pZC5mbGFzaC5maXJpbmdUaW1lLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0ZMQVNIX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9NT0RFX1NJTkdMRSA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBhbmRyb2lkLmZsYXNoLmF2YWlsYWJsZSBpcyB0cnVlIEZsYXNoCi0gICAgICogY29udGludW91c2x5IG9uLCBwb3dlciBzZXQgYnkKLSAgICAgKiBmaXJpbmdQb3dlcgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UcmFuc2l0aW9uIGZsYXNoIHRvIGNvbnRpbnVvdXNseSBvbi48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNGTEFTSF9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBU0hfTU9ERV9UT1JDSCA9IDI7CkBAIC04OTgsMjcgKzkwMywyMSBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBObyBub2lzZSByZWR1Y3Rpb24gaXMgYXBwbGllZAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5ObyBub2lzZSByZWR1Y3Rpb24gaXMgYXBwbGllZDwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I05PSVNFX1JFRFVDVElPTl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9JU0VfUkVEVUNUSU9OX01PREVfT0ZGID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE11c3Qgbm90IHNsb3cgZG93biBmcmFtZSByYXRlIHJlbGF0aXZlIHRvIHJhdwotICAgICAqIGJheWVyIG91dHB1dAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5NdXN0IG5vdCBzbG93IGRvd24gZnJhbWUgcmF0ZSByZWxhdGl2ZSB0byBzZW5zb3IKKyAgICAgKiBvdXRwdXQ8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNOT0lTRV9SRURVQ1RJT05fTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PSVNFX1JFRFVDVElPTl9NT0RFX0ZBU1QgPSAxOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTWF5IHNsb3cgZG93biBmcmFtZSByYXRlIHRvIHByb3ZpZGUgaGlnaGVzdAotICAgICAqIHF1YWxpdHkKLSAgICAgKiA8L3A+CisgICAgICogPHA+TWF5IHNsb3cgZG93biBmcmFtZSByYXRlIHRvIHByb3ZpZGUgaGlnaGVzdAorICAgICAqIHF1YWxpdHk8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNOT0lTRV9SRURVQ1RJT05fTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PSVNFX1JFRFVDVElPTl9NT0RFX0hJR0hfUVVBTElUWSA9IDI7CkBAIC05MzMsMTkgKzkzMiwxNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJU1RJQ1NfRkFDRV9ERVRFQ1RfTU9ERV9PRkYgPSAwOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogT3B0aW9uYWwgUmV0dXJuIHJlY3RhbmdsZSBhbmQgY29uZmlkZW5jZQotICAgICAqIG9ubHkKLSAgICAgKiA8L3A+CisgICAgICogPHA+T3B0aW9uYWwgUmV0dXJuIHJlY3RhbmdsZSBhbmQgY29uZmlkZW5jZQorICAgICAqIG9ubHk8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREVfU0lNUExFID0gMTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE9wdGlvbmFsIFJldHVybiBhbGwgZmFjZQotICAgICAqIG1ldGFkYXRhCi0gICAgICogPC9wPgorICAgICAqIDxwPk9wdGlvbmFsIFJldHVybiBhbGwgZmFjZQorICAgICAqIG1ldGFkYXRhPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX0ZVTEwgPSAyOwpAQCAtOTY5LDI4ICs5NjQsMjIgQEAKICAgICAvLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVXNlIHRoZSB0b25lIG1hcHBpbmcgY3VydmUgc3BlY2lmaWVkIGluCi0gICAgICogYW5kcm9pZC50b25lbWFwLmN1cnZlCi0gICAgICogPC9wPgorICAgICAqIDxwPlVzZSB0aGUgdG9uZSBtYXBwaW5nIGN1cnZlIHNwZWNpZmllZCBpbgorICAgICAqIGFuZHJvaWQudG9uZW1hcC5jdXJ2ZTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I1RPTkVNQVBfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRPTkVNQVBfTU9ERV9DT05UUkFTVF9DVVJWRSA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBNdXN0IG5vdCBzbG93IGRvd24gZnJhbWUgcmF0ZSByZWxhdGl2ZSB0byByYXcKLSAgICAgKiBiYXllciBvdXRwdXQKLSAgICAgKiA8L3A+CisgICAgICogPHA+TXVzdCBub3Qgc2xvdyBkb3duIGZyYW1lIHJhdGUgcmVsYXRpdmUgdG8gcmF3CisgICAgICogYmF5ZXIgb3V0cHV0PC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjVE9ORU1BUF9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE9ORU1BUF9NT0RFX0ZBU1QgPSAxOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRnJhbWUgcmF0ZSBtYXkgYmUgcmVkdWNlZCBieSBoaWdoCi0gICAgICogcXVhbGl0eQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5GcmFtZSByYXRlIG1heSBiZSByZWR1Y2VkIGJ5IGhpZ2gKKyAgICAgKiBxdWFsaXR5PC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjVE9ORU1BUF9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE9ORU1BUF9NT0RFX0hJR0hfUVVBTElUWSA9IDI7CkBAIC0xMDAwLDYwICs5ODksNDggQEAKICAgICAvLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQUUgaXMgb2ZmLiAgV2hlbiBhIGNhbWVyYSBkZXZpY2UgaXMgb3BlbmVkLCBpdCBzdGFydHMgaW4KLSAgICAgKiB0aGlzIHN0YXRlLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5BRSBpcyBvZmYgb3IgcmVjZW50bHkgcmVzZXQuIFdoZW4gYSBjYW1lcmEgZGV2aWNlIGlzIG9wZW5lZCwgaXQgc3RhcnRzIGluCisgICAgICogdGhpcyBzdGF0ZS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQUVfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX1NUQVRFX0lOQUNUSVZFID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEFFIGRvZXNuJ3QgeWV0IGhhdmUgYSBnb29kIHNldCBvZiBjb250cm9sIHZhbHVlcwotICAgICAqIGZvciB0aGUgY3VycmVudCBzY2VuZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5BRSBkb2Vzbid0IHlldCBoYXZlIGEgZ29vZCBzZXQgb2YgY29udHJvbCB2YWx1ZXMKKyAgICAgKiBmb3IgdGhlIGN1cnJlbnQgc2NlbmUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FFX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9TRUFSQ0hJTkcgPSAxOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQUUgaGFzIGEgZ29vZCBzZXQgb2YgY29udHJvbCB2YWx1ZXMgZm9yIHRoZQotICAgICAqIGN1cnJlbnQgc2NlbmUKLSAgICAgKiA8L3A+CisgICAgICogPHA+QUUgaGFzIGEgZ29vZCBzZXQgb2YgY29udHJvbCB2YWx1ZXMgZm9yIHRoZQorICAgICAqIGN1cnJlbnQgc2NlbmUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FFX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9DT05WRVJHRUQgPSAyOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQUUgaGFzIGJlZW4gbG9ja2VkIChhZU1vZGUgPQotICAgICAqIExPQ0tFRCkKLSAgICAgKiA8L3A+CisgICAgICogPHA+QUUgaGFzIGJlZW4gbG9ja2VkLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjQ09OVFJPTF9BRV9TVEFURQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfU1RBVEVfTE9DS0VEID0gMzsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEFFIGhhcyBhIGdvb2Qgc2V0IG9mIGNvbnRyb2wgdmFsdWVzLCBidXQgZmxhc2gKKyAgICAgKiA8cD5BRSBoYXMgYSBnb29kIHNldCBvZiBjb250cm9sIHZhbHVlcywgYnV0IGZsYXNoCiAgICAgICogbmVlZHMgdG8gYmUgZmlyZWQgZm9yIGdvb2QgcXVhbGl0eSBzdGlsbAotICAgICAqIGNhcHR1cmUKLSAgICAgKiA8L3A+CisgICAgICogY2FwdHVyZS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQUVfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX1NUQVRFX0ZMQVNIX1JFUVVJUkVEID0gNDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEFFIGhhcyBiZWVuIGFza2VkIHRvIGRvIGEgcHJlY2FwdHVyZSBzZXF1ZW5jZQotICAgICAqICh0aHJvdWdoIHRoZQotICAgICAqIHRyaWdnZXJfYWN0aW9uKENBTUVSQTJfVFJJR0dFUl9QUkVDQVBUVVJFX01FVEVSSU5HKQotICAgICAqIGNhbGwpLCBhbmQgaXMgY3VycmVudGx5IGV4ZWN1dGluZyBpdC4gT25jZSBQUkVDQVBUVVJFCisgICAgICogPHA+QUUgaGFzIGJlZW4gYXNrZWQgdG8gZG8gYSBwcmVjYXB0dXJlIHNlcXVlbmNlCisgICAgICogKHRocm91Z2ggdGhlIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX1BSRUNBUFRVUkVfVFJJR0dFUiBhbmRyb2lkLmNvbnRyb2wuYWVQcmVjYXB0dXJlVHJpZ2dlcn0gU1RBUlQpLAorICAgICAqIGFuZCBpcyBjdXJyZW50bHkgZXhlY3V0aW5nIGl0LiBPbmNlIFBSRUNBUFRVUkUKICAgICAgKiBjb21wbGV0ZXMsIEFFIHdpbGwgdHJhbnNpdGlvbiB0byBDT05WRVJHRUQgb3IKLSAgICAgKiBGTEFTSF9SRVFVSVJFRCBhcyBhcHByb3ByaWF0ZQotICAgICAqIDwvcD4KKyAgICAgKiBGTEFTSF9SRVFVSVJFRCBhcyBhcHByb3ByaWF0ZS48L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSCiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQUVfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX1NUQVRFX1BSRUNBUFRVUkUgPSA1OwpAQCAtMTA2Myw3MSArMTA0MCw1NyBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBRiBvZmYgb3IgaGFzIG5vdCB5ZXQgdHJpZWQgdG8gc2Nhbi9iZWVuIGFza2VkCisgICAgICogPHA+QUYgb2ZmIG9yIGhhcyBub3QgeWV0IHRyaWVkIHRvIHNjYW4vYmVlbiBhc2tlZAogICAgICAqIHRvIHNjYW4uICBXaGVuIGEgY2FtZXJhIGRldmljZSBpcyBvcGVuZWQsIGl0IHN0YXJ0cyBpbgotICAgICAqIHRoaXMgc3RhdGUuCi0gICAgICogPC9wPgorICAgICAqIHRoaXMgc3RhdGUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FGX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9JTkFDVElWRSA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBDT05USU5VT1VTXyogbW9kZXMgYXJlIHN1cHBvcnRlZC4gQUYgaXMKKyAgICAgKiA8cD5pZiBDT05USU5VT1VTXyogbW9kZXMgYXJlIHN1cHBvcnRlZC4gQUYgaXMKICAgICAgKiBjdXJyZW50bHkgZG9pbmcgYW4gQUYgc2NhbiBpbml0aWF0ZWQgYnkgYSBjb250aW51b3VzCi0gICAgICogYXV0b2ZvY3VzIG1vZGUKLSAgICAgKiA8L3A+CisgICAgICogYXV0b2ZvY3VzIG1vZGU8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQUZfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1NUQVRFX1BBU1NJVkVfU0NBTiA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBDT05USU5VT1VTXyogbW9kZXMgYXJlIHN1cHBvcnRlZC4gQUYgY3VycmVudGx5CisgICAgICogPHA+aWYgQ09OVElOVU9VU18qIG1vZGVzIGFyZSBzdXBwb3J0ZWQuIEFGIGN1cnJlbnRseQogICAgICAqIGJlbGlldmVzIGl0IGlzIGluIGZvY3VzLCBidXQgbWF5IHJlc3RhcnQgc2Nhbm5pbmcgYXQKLSAgICAgKiBhbnkgdGltZS4KLSAgICAgKiA8L3A+CisgICAgICogYW55IHRpbWUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FGX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9QQVNTSVZFX0ZPQ1VTRUQgPSAyOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogaWYgQVVUTyBvciBNQUNSTyBtb2RlcyBhcmUgc3VwcG9ydGVkLiBBRiBpcyBkb2luZworICAgICAqIDxwPmlmIEFVVE8gb3IgTUFDUk8gbW9kZXMgYXJlIHN1cHBvcnRlZC4gQUYgaXMgZG9pbmcKICAgICAgKiBhbiBBRiBzY2FuIGJlY2F1c2UgaXQgd2FzIHRyaWdnZXJlZCBieSBBRgotICAgICAqIHRyaWdnZXIKLSAgICAgKiA8L3A+CisgICAgICogdHJpZ2dlcjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjQ09OVFJPTF9BRl9TVEFURQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfU1RBVEVfQUNUSVZFX1NDQU4gPSAzOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogaWYgYW55IEFGIG1vZGUgYmVzaWRlcyBPRkYgaXMgc3VwcG9ydGVkLiBBRgorICAgICAqIDxwPmlmIGFueSBBRiBtb2RlIGJlc2lkZXMgT0ZGIGlzIHN1cHBvcnRlZC4gQUYKICAgICAgKiBiZWxpZXZlcyBpdCBpcyBmb2N1c2VkIGNvcnJlY3RseSBhbmQgaXMKLSAgICAgKiBsb2NrZWQKLSAgICAgKiA8L3A+CisgICAgICogbG9ja2VkPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FGX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9GT0NVU0VEX0xPQ0tFRCA9IDQ7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBhbnkgQUYgbW9kZSBiZXNpZGVzIE9GRiBpcyBzdXBwb3J0ZWQuIEFGIGhhcworICAgICAqIDxwPmlmIGFueSBBRiBtb2RlIGJlc2lkZXMgT0ZGIGlzIHN1cHBvcnRlZC4gQUYgaGFzCiAgICAgICogZmFpbGVkIHRvIGZvY3VzIHN1Y2Nlc3NmdWxseSBhbmQgaXMKLSAgICAgKiBsb2NrZWQKLSAgICAgKiA8L3A+CisgICAgICogbG9ja2VkPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FGX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9OT1RfRk9DVVNFRF9MT0NLRUQgPSA1OwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogaWYgQ09OVElOVU9VU18qIG1vZGVzIGFyZSBzdXBwb3J0ZWQuIEFGIGZpbmlzaGVkIGEKKyAgICAgKiA8cD5pZiBDT05USU5VT1VTXyogbW9kZXMgYXJlIHN1cHBvcnRlZC4gQUYgZmluaXNoZWQgYQogICAgICAqIHBhc3NpdmUgc2NhbiB3aXRob3V0IGZpbmRpbmcgZm9jdXMsIGFuZCBtYXkgcmVzdGFydAotICAgICAqIHNjYW5uaW5nIGF0IGFueSB0aW1lLgotICAgICAqIDwvcD4KKyAgICAgKiBzY2FubmluZyBhdCBhbnkgdGltZS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQUZfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1NUQVRFX1BBU1NJVkVfVU5GT0NVU0VEID0gNjsKQEAgLTExMzcsMzcgKzExMDAsMjggQEAKICAgICAvLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQVdCIGlzIG5vdCBpbiBhdXRvIG1vZGUuICBXaGVuIGEgY2FtZXJhIGRldmljZSBpcyBvcGVuZWQsIGl0Ci0gICAgICogc3RhcnRzIGluIHRoaXMgc3RhdGUuCi0gICAgICogPC9wPgorICAgICAqIDxwPkFXQiBpcyBub3QgaW4gYXV0byBtb2RlLiAgV2hlbiBhIGNhbWVyYSBkZXZpY2UgaXMgb3BlbmVkLCBpdAorICAgICAqIHN0YXJ0cyBpbiB0aGlzIHN0YXRlLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjQ09OVFJPTF9BV0JfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9TVEFURV9JTkFDVElWRSA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBV0IgZG9lc24ndCB5ZXQgaGF2ZSBhIGdvb2Qgc2V0IG9mIGNvbnRyb2wKLSAgICAgKiB2YWx1ZXMgZm9yIHRoZSBjdXJyZW50IHNjZW5lCi0gICAgICogPC9wPgorICAgICAqIDxwPkFXQiBkb2Vzbid0IHlldCBoYXZlIGEgZ29vZCBzZXQgb2YgY29udHJvbAorICAgICAqIHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgc2NlbmUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FXQl9TVEFURQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQVdCX1NUQVRFX1NFQVJDSElORyA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBV0IgaGFzIGEgZ29vZCBzZXQgb2YgY29udHJvbCB2YWx1ZXMgZm9yIHRoZQotICAgICAqIGN1cnJlbnQgc2NlbmUKLSAgICAgKiA8L3A+CisgICAgICogPHA+QVdCIGhhcyBhIGdvb2Qgc2V0IG9mIGNvbnRyb2wgdmFsdWVzIGZvciB0aGUKKyAgICAgKiBjdXJyZW50IHNjZW5lLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjQ09OVFJPTF9BV0JfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9TVEFURV9DT05WRVJHRUQgPSAyOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQUUgaGFzIGJlZW4gbG9ja2VkIChhZU1vZGUgPQotICAgICAqIExPQ0tFRCkKLSAgICAgKiA8L3A+CisgICAgICogPHA+QVdCIGhhcyBiZWVuIGxvY2tlZC48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQVdCX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfU1RBVEVfTE9DS0VEID0gMzsKQEAgLTExNzcsMzYgKzExMzEsMjggQEAKICAgICAvLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTm8gZmxhc2ggb24gY2FtZXJhCi0gICAgICogPC9wPgorICAgICAqIDxwPk5vIGZsYXNoIG9uIGNhbWVyYTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjRkxBU0hfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9TVEFURV9VTkFWQUlMQUJMRSA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBhbmRyb2lkLmZsYXNoLmF2YWlsYWJsZSBpcyB0cnVlIEZsYXNoIGlzCi0gICAgICogY2hhcmdpbmcgYW5kIGNhbm5vdCBiZSBmaXJlZAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5pZiBhbmRyb2lkLmZsYXNoLmF2YWlsYWJsZSBpcyB0cnVlIEZsYXNoIGlzCisgICAgICogY2hhcmdpbmcgYW5kIGNhbm5vdCBiZSBmaXJlZDwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjRkxBU0hfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9TVEFURV9DSEFSR0lORyA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBhbmRyb2lkLmZsYXNoLmF2YWlsYWJsZSBpcyB0cnVlIEZsYXNoIGlzCi0gICAgICogcmVhZHkgdG8gZmlyZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5pZiBhbmRyb2lkLmZsYXNoLmF2YWlsYWJsZSBpcyB0cnVlIEZsYXNoIGlzCisgICAgICogcmVhZHkgdG8gZmlyZTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjRkxBU0hfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9TVEFURV9SRUFEWSA9IDI7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBhbmRyb2lkLmZsYXNoLmF2YWlsYWJsZSBpcyB0cnVlIEZsYXNoIGZpcmVkCi0gICAgICogZm9yIHRoaXMgY2FwdHVyZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5pZiBhbmRyb2lkLmZsYXNoLmF2YWlsYWJsZSBpcyB0cnVlIEZsYXNoIGZpcmVkCisgICAgICogZm9yIHRoaXMgY2FwdHVyZTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjRkxBU0hfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9TVEFURV9GSVJFRCA9IDM7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVGYWlsdXJlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVGYWlsdXJlLmphdmEKaW5kZXggM2I0MDhjZi4uMzVmOWFmMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlRmFpbHVyZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZUZhaWx1cmUuamF2YQpAQCAtMTUsOCArMTUsNiBAQAogICovCiBwYWNrYWdlIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMjsKIAotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UuQ2FwdHVyZUxpc3RlbmVyOwotCiAvKioKICAqIEEgcmVwb3J0IG9mIGZhaWxlZCBjYXB0dXJlIGZvciBhIHNpbmdsZSBpbWFnZSBjYXB0dXJlIGZyb20gdGhlIGltYWdlIHNlbnNvci4KICAqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0LmphdmEKaW5kZXggODk4ZjEyMy4uNzMxYzBiZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3QuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTI7CiAKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuaW1wbC5DYW1lcmFNZXRhZGF0YU5hdGl2ZTsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlLkNhcHR1cmVMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7CkBAIC0zMTgsMTEgKzMxNywxMiBAQAogICAgICAqIG1vZGlmeSB0aGUgY29tbWVudCBibG9ja3MgYXQgdGhlIHN0YXJ0IG9yIGVuZC4KICAgICAgKn5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfiovCiAKKwogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZW4gYW5kcm9pZC5jb250cm9sLmF3Yk1vZGUgaXMgbm90IE9GRiwgVFJBTlNGT1JNX01BVFJJWAotICAgICAqIHNob3VsZCBiZSBpZ25vcmVkLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGVuIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9NT0RFIGFuZHJvaWQuY29udHJvbC5hd2JNb2RlfSBpcyBub3QgT0ZGLCBUUkFOU0ZPUk1fTUFUUklYCisgICAgICogc2hvdWxkIGJlIGlnbm9yZWQuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9NT0RFCiAgICAgICogQHNlZSAjQ09MT1JfQ09SUkVDVElPTl9NT0RFX1RSQU5TRk9STV9NQVRSSVgKICAgICAgKiBAc2VlICNDT0xPUl9DT1JSRUNUSU9OX01PREVfRkFTVAogICAgICAqIEBzZWUgI0NPTE9SX0NPUlJFQ1RJT05fTU9ERV9ISUdIX1FVQUxJVFkKQEAgLTMzMSw1NSArMzMxLDc4IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5tb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEEgY29sb3IgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UgdG8gdHJhbnNmb3JtCi0gICAgICogZnJvbSBzZW5zb3IgUkdCIGNvbG9yIHNwYWNlIHRvIG91dHB1dCBsaW5lYXIgc1JHQiBjb2xvciBzcGFjZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIG1hdHJpeCBpcyBlaXRoZXIgc2V0IGJ5IEhBTCB3aGVuIHRoZSByZXF1ZXN0Ci0gICAgICogYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZSBpcyBub3QgVFJBTlNGT1JNX01BVFJJWCwgb3IKKyAgICAgKiA8cD5BIGNvbG9yIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlIHRvIHRyYW5zZm9ybQorICAgICAqIGZyb20gc2Vuc29yIFJHQiBjb2xvciBzcGFjZSB0byBvdXRwdXQgbGluZWFyIHNSR0IgY29sb3Igc3BhY2U8L3A+CisgICAgICogPHA+VGhpcyBtYXRyaXggaXMgZWl0aGVyIHNldCBieSBIQUwgd2hlbiB0aGUgcmVxdWVzdAorICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZX0gaXMgbm90IFRSQU5TRk9STV9NQVRSSVgsIG9yCiAgICAgICogZGlyZWN0bHkgYnkgdGhlIGFwcGxpY2F0aW9uIGluIHRoZSByZXF1ZXN0IHdoZW4gdGhlCi0gICAgICogYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZSBpcyBUUkFOU0ZPUk1fTUFUUklYLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZSBIQUwgbWF5IHJvdW5kIHRoZSBtYXRyaXggdG8gYWNjb3VudAorICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZX0gaXMgVFJBTlNGT1JNX01BVFJJWC48L3A+CisgICAgICogPHA+SW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgSEFMIG1heSByb3VuZCB0aGUgbWF0cml4IHRvIGFjY291bnQKICAgICAgKiBmb3IgcHJlY2lzaW9uIGlzc3VlczsgdGhlIGZpbmFsIHJvdW5kZWQgbWF0cml4IHNob3VsZCBiZQotICAgICAqIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyBtYXRyaXggcmVzdWx0IG1ldGFkYXRhLgotICAgICAqIDwvcD4KKyAgICAgKiByZXBvcnRlZCBiYWNrIGluIHRoaXMgbWF0cml4IHJlc3VsdCBtZXRhZGF0YS48L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PFJhdGlvbmFsW10+IENPTE9SX0NPUlJFQ1RJT05fVFJBTlNGT1JNID0KICAgICAgICAgICAgIG5ldyBLZXk8UmF0aW9uYWxbXT4oImFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLnRyYW5zZm9ybSIsIFJhdGlvbmFsW10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogR2FpbnMgYXBwbHlpbmcgdG8gQmF5ZXIgY29sb3IgY2hhbm5lbHMgZm9yCi0gICAgICogd2hpdGUtYmFsYW5jZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgNC1jaGFubmVsIHdoaXRlLWJhbGFuY2UgZ2FpbnMgYXJlIGRlZmluZWQgaW4KKyAgICAgKiA8cD5HYWlucyBhcHBseWluZyB0byBCYXllciBjb2xvciBjaGFubmVscyBmb3IKKyAgICAgKiB3aGl0ZS1iYWxhbmNlPC9wPgorICAgICAqIDxwPlRoZSA0LWNoYW5uZWwgd2hpdGUtYmFsYW5jZSBnYWlucyBhcmUgZGVmaW5lZCBpbgogICAgICAqIHRoZSBvcmRlciBvZiBbUiBHX2V2ZW4gR19vZGQgQl0sIHdoZXJlIEdfZXZlbiBpcyB0aGUgZ2FpbgogICAgICAqIGZvciBncmVlbiBwaXhlbHMgb24gZXZlbiByb3dzIG9mIHRoZSBvdXRwdXQsIGFuZCBHX29kZAogICAgICAqIGlzIHRoZSBnYWluIGZvciBncmVlbnBpeGVscyBvbiB0aGUgb2RkIHJvd3MuIGlmIGEgSEFMCiAgICAgICogZG9lcyBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlIGdhaW4gZm9yIGV2ZW4vb2RkIGdyZWVuIGNoYW5uZWxzLAogICAgICAqIGl0IHNob3VsZCB1c2UgdGhlIEdfZXZlbiB2YWx1ZSxhbmQgd3JpdGUgR19vZGQgZXF1YWwgdG8KLSAgICAgKiBHX2V2ZW4gaW4gdGhlIG91dHB1dCByZXN1bHQgbWV0YWRhdGEuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoaXMgYXJyYXkgaXMgZWl0aGVyIHNldCBieSBIQUwgd2hlbiB0aGUgcmVxdWVzdAotICAgICAqIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGUgaXMgbm90IFRSQU5TRk9STV9NQVRSSVgsIG9yCisgICAgICogR19ldmVuIGluIHRoZSBvdXRwdXQgcmVzdWx0IG1ldGFkYXRhLjwvcD4KKyAgICAgKiA8cD5UaGlzIGFycmF5IGlzIGVpdGhlciBzZXQgYnkgSEFMIHdoZW4gdGhlIHJlcXVlc3QKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9NT0RFIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGV9IGlzIG5vdCBUUkFOU0ZPUk1fTUFUUklYLCBvcgogICAgICAqIGRpcmVjdGx5IGJ5IHRoZSBhcHBsaWNhdGlvbiBpbiB0aGUgcmVxdWVzdCB3aGVuIHRoZQotICAgICAqIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGUgaXMgVFJBTlNGT1JNX01BVFJJWC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIG91cHV0IHNob3VsZCBiZSB0aGUgZ2FpbnMgYWN0dWFsbHkgYXBwbGllZCBieSB0aGUgSEFMIHRvCi0gICAgICogdGhlIGN1cnJlbnQgZnJhbWUuCi0gICAgICogPC9wPgorICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZX0gaXMgVFJBTlNGT1JNX01BVFJJWC48L3A+CisgICAgICogPHA+VGhlIG91cHV0IHNob3VsZCBiZSB0aGUgZ2FpbnMgYWN0dWFsbHkgYXBwbGllZCBieSB0aGUgSEFMIHRvCisgICAgICogdGhlIGN1cnJlbnQgZnJhbWUuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxmbG9hdFtdPiBDT0xPUl9DT1JSRUNUSU9OX0dBSU5TID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLmdhaW5zIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBFbnVtIGZvciBjb250cm9sbGluZwotICAgICAqIGFudGliYW5kaW5nCi0gICAgICogPC9wPgorICAgICAqIDxwPlRoZSBkZXNpcmVkIHNldHRpbmcgZm9yIHRoZSBjYW1lcmEgZGV2aWNlJ3MgYXV0by1leHBvc3VyZQorICAgICAqIGFsZ29yaXRobSdzIGFudGliYW5kaW5nIGNvbXBlbnNhdGlvbi48L3A+CisgICAgICogPHA+U29tZSBraW5kcyBvZiBsaWdodGluZyBmaXh0dXJlcywgc3VjaCBhcyBzb21lIGZsdW9yZXNjZW50CisgICAgICogbGlnaHRzLCBmbGlja2VyIGF0IHRoZSByYXRlIG9mIHRoZSBwb3dlciBzdXBwbHkgZnJlcXVlbmN5CisgICAgICogKDYwSHogb3IgNTBIeiwgZGVwZW5kaW5nIG9uIGNvdW50cnkpLiBXaGlsZSB0aGlzIGlzCisgICAgICogdHlwaWNhbGx5IG5vdCBub3RpY2VhYmxlIHRvIGEgcGVyc29uLCBpdCBjYW4gYmUgdmlzaWJsZSB0bworICAgICAqIGEgY2FtZXJhIGRldmljZS4gSWYgYSBjYW1lcmEgc2V0cyBpdHMgZXhwb3N1cmUgdGltZSB0byB0aGUKKyAgICAgKiB3cm9uZyB2YWx1ZSwgdGhlIGZsaWNrZXIgbWF5IGJlY29tZSB2aXNpYmxlIGluIHRoZQorICAgICAqIHZpZXdmaW5kZXIgYXMgZmxpY2tlciBvciBpbiBhIGZpbmFsIGNhcHR1cmVkIGltYWdlLCBhcyBhCisgICAgICogc2V0IG9mIHZhcmlhYmxlLWJyaWdodG5lc3MgYmFuZHMgYWNyb3NzIHRoZSBpbWFnZS48L3A+CisgICAgICogPHA+VGhlcmVmb3JlLCB0aGUgYXV0by1leHBvc3VyZSByb3V0aW5lcyBvZiBjYW1lcmEgZGV2aWNlcworICAgICAqIGluY2x1ZGUgYW50aWJhbmRpbmcgcm91dGluZXMgdGhhdCBlbnN1cmUgdGhhdCB0aGUgY2hvc2VuCisgICAgICogZXhwb3N1cmUgdmFsdWUgd2lsbCBub3QgY2F1c2Ugc3VjaCBiYW5kaW5nLiBUaGUgY2hvaWNlIG9mCisgICAgICogZXhwb3N1cmUgdGltZSBkZXBlbmRzIG9uIHRoZSByYXRlIG9mIGZsaWNrZXIsIHdoaWNoIHRoZQorICAgICAqIGNhbWVyYSBkZXZpY2UgY2FuIGRldGVjdCBhdXRvbWF0aWNhbGx5LCBvciB0aGUgZXhwZWN0ZWQKKyAgICAgKiByYXRlIGNhbiBiZSBzZWxlY3RlZCBieSB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhpcworICAgICAqIGNvbnRyb2wuPC9wPgorICAgICAqIDxwPkEgZ2l2ZW4gY2FtZXJhIGRldmljZSBtYXkgbm90IHN1cHBvcnQgYWxsIG9mIHRoZSBwb3NzaWJsZQorICAgICAqIG9wdGlvbnMgZm9yIHRoZSBhbnRpYmFuZGluZyBtb2RlLiBUaGUKKyAgICAgKiB7QGxpbmsgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI0NPTlRST0xfQUVfQVZBSUxBQkxFX0FOVElCQU5ESU5HX01PREVTIGFuZHJvaWQuY29udHJvbC5hZUF2YWlsYWJsZUFudGliYW5kaW5nTW9kZXN9IGtleSBjb250YWlucworICAgICAqIHRoZSBhdmFpbGFibGUgbW9kZXMgZm9yIGEgZ2l2ZW4gY2FtZXJhIGRldmljZS48L3A+CisgICAgICogPHA+VGhlIGRlZmF1bHQgbW9kZSBpcyBBVVRPLCB3aGljaCBtdXN0IGJlIHN1cHBvcnRlZCBieSBhbGwKKyAgICAgKiBjYW1lcmEgZGV2aWNlcy48L3A+CisgICAgICogPHA+SWYgbWFudWFsIGV4cG9zdXJlIGNvbnRyb2wgaXMgZW5hYmxlZCAoYnkgc2V0dGluZworICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX01PREUgYW5kcm9pZC5jb250cm9sLmFlTW9kZX0gb3Ige0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERSBhbmRyb2lkLmNvbnRyb2wubW9kZX0gdG8gT0ZGKSwKKyAgICAgKiB0aGVuIHRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0LCBhbmQgdGhlIGFwcGxpY2F0aW9uIG11c3QKKyAgICAgKiBlbnN1cmUgaXQgc2VsZWN0cyBleHBvc3VyZSB0aW1lcyB0aGF0IGRvIG5vdCBjYXVzZSBiYW5kaW5nCisgICAgICogaXNzdWVzLiBUaGUge0BsaW5rIENhcHR1cmVSZXN1bHQjU1RBVElTVElDU19TQ0VORV9GTElDS0VSIGFuZHJvaWQuc3RhdGlzdGljcy5zY2VuZUZsaWNrZXJ9IGtleSBjYW4gYXNzaXN0CisgICAgICogdGhlIGFwcGxpY2F0aW9uIGluIHRoaXMuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjQ09OVFJPTF9BRV9BVkFJTEFCTEVfQU5USUJBTkRJTkdfTU9ERVMKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTU9ERQorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFCisgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I1NUQVRJU1RJQ1NfU0NFTkVfRkxJQ0tFUgogICAgICAqIEBzZWUgI0NPTlRST0xfQUVfQU5USUJBTkRJTkdfTU9ERV9PRkYKICAgICAgKiBAc2VlICNDT05UUk9MX0FFX0FOVElCQU5ESU5HX01PREVfNTBIWgogICAgICAqIEBzZWUgI0NPTlRST0xfQUVfQU5USUJBTkRJTkdfTU9ERV82MEhaCkBAIC0zODksNDIgKzQxMiw1MyBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLmFlQW50aWJhbmRpbmdNb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEFkanVzdG1lbnQgdG8gQUUgdGFyZ2V0IGltYWdlCi0gICAgICogYnJpZ2h0bmVzcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBGb3IgZXhhbXBsZSwgaWYgRVYgc3RlcCBpcyAwLjMzMywgJzYnIHdpbGwgbWVhbiBhbgorICAgICAqIDxwPkFkanVzdG1lbnQgdG8gQUUgdGFyZ2V0IGltYWdlCisgICAgICogYnJpZ2h0bmVzczwvcD4KKyAgICAgKiA8cD5Gb3IgZXhhbXBsZSwgaWYgRVYgc3RlcCBpcyAwLjMzMywgJzYnIHdpbGwgbWVhbiBhbgogICAgICAqIGV4cG9zdXJlIGNvbXBlbnNhdGlvbiBvZiArMiBFVjsgLTMgd2lsbCBtZWFuIGFuIGV4cG9zdXJlCi0gICAgICogY29tcGVuc2F0aW9uIG9mIC0xCi0gICAgICogPC9wPgorICAgICAqIGNvbXBlbnNhdGlvbiBvZiAtMTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxJbnRlZ2VyPiBDT05UUk9MX0FFX0VYUE9TVVJFX0NPTVBFTlNBVElPTiA9CiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuYWVFeHBvc3VyZUNvbXBlbnNhdGlvbiIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIEFFIGlzIGN1cnJlbnRseSBsb2NrZWQgdG8gaXRzIGxhdGVzdAotICAgICAqIGNhbGN1bGF0ZWQgdmFsdWVzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE5vdGUgdGhhdCBldmVuIHdoZW4gQUUgaXMgbG9ja2VkLCB0aGUgZmxhc2ggbWF5IGJlCisgICAgICogPHA+V2hldGhlciBBRSBpcyBjdXJyZW50bHkgbG9ja2VkIHRvIGl0cyBsYXRlc3QKKyAgICAgKiBjYWxjdWxhdGVkIHZhbHVlczwvcD4KKyAgICAgKiA8cD5Ob3RlIHRoYXQgZXZlbiB3aGVuIEFFIGlzIGxvY2tlZCwgdGhlIGZsYXNoIG1heSBiZQogICAgICAqIGZpcmVkIGlmIHRoZSBBRSBtb2RlIGlzIE9OX0FVVE9fRkxBU0ggLyBPTl9BTFdBWVNfRkxBU0ggLwotICAgICAqIE9OX0FVVE9fRkxBU0hfUkVERVlFLgotICAgICAqIDwvcD4KKyAgICAgKiBPTl9BVVRPX0ZMQVNIX1JFREVZRS48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Qm9vbGVhbj4gQ09OVFJPTF9BRV9MT0NLID0KICAgICAgICAgICAgIG5ldyBLZXk8Qm9vbGVhbj4oImFuZHJvaWQuY29udHJvbC5hZUxvY2siLCBib29sZWFuLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgQUUgaXMgY3VycmVudGx5IHVwZGF0aW5nIHRoZSBzZW5zb3IKLSAgICAgKiBleHBvc3VyZSBhbmQgc2Vuc2l0aXZpdHkgZmllbGRzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE9ubHkgZWZmZWN0aXZlIGlmIGFuZHJvaWQuY29udHJvbC5tb2RlID0KLSAgICAgKiBBVVRPCi0gICAgICogPC9wPgorICAgICAqIDxwPlRoZSBkZXNpcmVkIG1vZGUgZm9yIHRoZSBjYW1lcmEgZGV2aWNlJ3MKKyAgICAgKiBhdXRvLWV4cG9zdXJlIHJvdXRpbmUuPC9wPgorICAgICAqIDxwPlRoaXMgY29udHJvbCBpcyBvbmx5IGVmZmVjdGl2ZSBpZiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFIGFuZHJvaWQuY29udHJvbC5tb2RlfSBpcworICAgICAqIEFVVE8uPC9wPgorICAgICAqIDxwPldoZW4gc2V0IHRvIGFueSBvZiB0aGUgT04gbW9kZXMsIHRoZSBjYW1lcmEgZGV2aWNlJ3MKKyAgICAgKiBhdXRvLWV4cG9zdXJlIHJvdXRpbmUgaXMgZW5hYmxlZCwgb3ZlcnJpZGluZyB0aGUKKyAgICAgKiBhcHBsaWNhdGlvbidzIHNlbGVjdGVkIGV4cG9zdXJlIHRpbWUsIHNlbnNvciBzZW5zaXRpdml0eSwKKyAgICAgKiBhbmQgZnJhbWUgZHVyYXRpb24gKHtAbGluayBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfRVhQT1NVUkVfVElNRSBhbmRyb2lkLnNlbnNvci5leHBvc3VyZVRpbWV9LAorICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfU0VOU0lUSVZJVFkgYW5kcm9pZC5zZW5zb3Iuc2Vuc2l0aXZpdHl9LCBhbmQKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX0ZSQU1FX0RVUkFUSU9OIGFuZHJvaWQuc2Vuc29yLmZyYW1lRHVyYXRpb259KS4gSWYgb25lIG9mIHRoZSBGTEFTSCBtb2RlcworICAgICAqIGlzIHNlbGVjdGVkLCB0aGUgY2FtZXJhIGRldmljZSdzIGZsYXNoIHVuaXQgY29udHJvbHMgYXJlCisgICAgICogYWxzbyBvdmVycmlkZGVuLjwvcD4KKyAgICAgKiA8cD5UaGUgRkxBU0ggbW9kZXMgYXJlIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBjYW1lcmEgZGV2aWNlCisgICAgICogaGFzIGEgZmxhc2ggdW5pdCAoe0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNGTEFTSF9JTkZPX0FWQUlMQUJMRSBhbmRyb2lkLmZsYXNoLmluZm8uYXZhaWxhYmxlfSBpcyA8Y29kZT50cnVlPC9jb2RlPikuPC9wPgorICAgICAqIDxwPklmIGZsYXNoIFRPUkNIIG1vZGUgaXMgZGVzaXJlZCwgdGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0bworICAgICAqIE9OIG9yIE9GRiwgYW5kIHtAbGluayBDYXB0dXJlUmVxdWVzdCNGTEFTSF9NT0RFIGFuZHJvaWQuZmxhc2gubW9kZX0gc2V0IHRvIFRPUkNILjwvcD4KKyAgICAgKiA8cD5XaGVuIHNldCB0byBhbnkgb2YgdGhlIE9OIG1vZGVzLCB0aGUgdmFsdWVzIGNob3NlbiBieSB0aGUKKyAgICAgKiBjYW1lcmEgZGV2aWNlIGF1dG8tZXhwb3N1cmUgcm91dGluZSBmb3IgdGhlIG92ZXJyaWRkZW4KKyAgICAgKiBmaWVsZHMgZm9yIGEgZ2l2ZW4gY2FwdHVyZSB3aWxsIGJlIGF2YWlsYWJsZSBpbiBpdHMKKyAgICAgKiBDYXB0dXJlUmVzdWx0LjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFCisgICAgICogQHNlZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjRkxBU0hfSU5GT19BVkFJTEFCTEUKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0ZMQVNIX01PREUKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I1NFTlNPUl9FWFBPU1VSRV9USU1FCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfRlJBTUVfRFVSQVRJT04KKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I1NFTlNPUl9TRU5TSVRJVklUWQogICAgICAqIEBzZWUgI0NPTlRST0xfQUVfTU9ERV9PRkYKICAgICAgKiBAc2VlICNDT05UUk9MX0FFX01PREVfT04KICAgICAgKiBAc2VlICNDT05UUk9MX0FFX01PREVfT05fQVVUT19GTEFTSApAQCAtNDM1LDYwICs0NjksNTIgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5hZU1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yCi0gICAgICogbWV0ZXJpbmcKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogRWFjaCBhcmVhIGlzIGEgcmVjdGFuZ2xlIHBsdXMgd2VpZ2h0OiB4bWluLCB5bWluLAorICAgICAqIDxwPkxpc3Qgb2YgYXJlYXMgdG8gdXNlIGZvcgorICAgICAqIG1ldGVyaW5nPC9wPgorICAgICAqIDxwPkVhY2ggYXJlYSBpcyBhIHJlY3RhbmdsZSBwbHVzIHdlaWdodDogeG1pbiwgeW1pbiwKICAgICAgKiB4bWF4LCB5bWF4LCB3ZWlnaHQuIFRoZSByZWN0YW5nbGUgaXMgZGVmaW5lZCBpbmNsdXNpdmUgb2YgdGhlCi0gICAgICogc3BlY2lmaWVkIGNvb3JkaW5hdGVzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYmFzZWQgb24gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwKKyAgICAgKiBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuPC9wPgorICAgICAqIDxwPlRoZSBjb29yZGluYXRlIHN5c3RlbSBpcyBiYXNlZCBvbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LAogICAgICAqIHdpdGggKDAsMCkgYmVpbmcgdGhlIHRvcC1sZWZ0IHBpeGVsIGluIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksIGFuZAotICAgICAqIChhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZS53aWR0aCAtIDEsCi0gICAgICogYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemUuaGVpZ2h0IC0gMSkgYmVpbmcgdGhlCisgICAgICogKHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjU0VOU09SX0lORk9fQUNUSVZFX0FSUkFZX1NJWkUgYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemV9LndpZHRoIC0gMSwKKyAgICAgKiB7QGxpbmsgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI1NFTlNPUl9JTkZPX0FDVElWRV9BUlJBWV9TSVpFIGFuZHJvaWQuc2Vuc29yLmluZm8uYWN0aXZlQXJyYXlTaXplfS5oZWlnaHQgLSAxKSBiZWluZyB0aGUKICAgICAgKiBib3R0b20tcmlnaHQgcGl4ZWwgaW4gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheS4gVGhlIHdlaWdodAotICAgICAqIHNob3VsZCBiZSBub25uZWdhdGl2ZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSWYgYWxsIHJlZ2lvbnMgaGF2ZSAwIHdlaWdodCwgdGhlbiBubyBzcGVjaWZpYyBtZXRlcmluZyBhcmVhCisgICAgICogc2hvdWxkIGJlIG5vbm5lZ2F0aXZlLjwvcD4KKyAgICAgKiA8cD5JZiBhbGwgcmVnaW9ucyBoYXZlIDAgd2VpZ2h0LCB0aGVuIG5vIHNwZWNpZmljIG1ldGVyaW5nIGFyZWEKICAgICAgKiBuZWVkcyB0byBiZSB1c2VkIGJ5IHRoZSBIQUwuIElmIHRoZSBtZXRlcmluZyByZWdpb24gaXMKLSAgICAgKiBvdXRzaWRlIHRoZSBjdXJyZW50IGFuZHJvaWQuc2NhbGVyLmNyb3BSZWdpb24sIHRoZSBIQUwKKyAgICAgKiBvdXRzaWRlIHRoZSBjdXJyZW50IHtAbGluayBDYXB0dXJlUmVxdWVzdCNTQ0FMRVJfQ1JPUF9SRUdJT04gYW5kcm9pZC5zY2FsZXIuY3JvcFJlZ2lvbn0sIHRoZSBIQUwKICAgICAgKiBzaG91bGQgaWdub3JlIHRoZSBzZWN0aW9ucyBvdXRzaWRlIHRoZSByZWdpb24gYW5kIG91dHB1dCB0aGUKLSAgICAgKiB1c2VkIHNlY3Rpb25zIGluIHRoZSBmcmFtZSBtZXRhZGF0YQotICAgICAqIDwvcD4KKyAgICAgKiB1c2VkIHNlY3Rpb25zIGluIHRoZSBmcmFtZSBtZXRhZGF0YTwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjU0NBTEVSX0NST1BfUkVHSU9OCisgICAgICogQHNlZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjU0VOU09SX0lORk9fQUNUSVZFX0FSUkFZX1NJWkUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxpbnRbXT4gQ09OVFJPTF9BRV9SRUdJT05TID0KICAgICAgICAgICAgIG5ldyBLZXk8aW50W10+KCJhbmRyb2lkLmNvbnRyb2wuYWVSZWdpb25zIiwgaW50W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogUmFuZ2Ugb3ZlciB3aGljaCBmcHMgY2FuIGJlIGFkanVzdGVkIHRvCi0gICAgICogbWFpbnRhaW4gZXhwb3N1cmUKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogT25seSBjb25zdHJhaW5zIEFFIGFsZ29yaXRobSwgbm90IG1hbnVhbCBjb250cm9sCi0gICAgICogb2YgYW5kcm9pZC5zZW5zb3IuZXhwb3N1cmVUaW1lCi0gICAgICogPC9wPgorICAgICAqIDxwPlJhbmdlIG92ZXIgd2hpY2ggZnBzIGNhbiBiZSBhZGp1c3RlZCB0bworICAgICAqIG1haW50YWluIGV4cG9zdXJlPC9wPgorICAgICAqIDxwPk9ubHkgY29uc3RyYWlucyBBRSBhbGdvcml0aG0sIG5vdCBtYW51YWwgY29udHJvbAorICAgICAqIG9mIHtAbGluayBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfRVhQT1NVUkVfVElNRSBhbmRyb2lkLnNlbnNvci5leHBvc3VyZVRpbWV9PC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfRVhQT1NVUkVfVElNRQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGludFtdPiBDT05UUk9MX0FFX1RBUkdFVF9GUFNfUkFOR0UgPQogICAgICAgICAgICAgbmV3IEtleTxpbnRbXT4oImFuZHJvaWQuY29udHJvbC5hZVRhcmdldEZwc1JhbmdlIiwgaW50W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciB0aGUgSEFMIG11c3QgdHJpZ2dlciBwcmVjYXB0dXJlCi0gICAgICogbWV0ZXJpbmcuCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRoaXMgZW50cnkgaXMgbm9ybWFsbHkgc2V0IHRvIElETEUsIG9yIGlzIG5vdAorICAgICAqIDxwPldoZXRoZXIgdGhlIGNhbWVyYSBkZXZpY2Ugd2lsbCB0cmlnZ2VyIGEgcHJlY2FwdHVyZQorICAgICAqIG1ldGVyaW5nIHNlcXVlbmNlIHdoZW4gaXQgcHJvY2Vzc2VzIHRoaXMgcmVxdWVzdC48L3A+CisgICAgICogPHA+VGhpcyBlbnRyeSBpcyBub3JtYWxseSBzZXQgdG8gSURMRSwgb3IgaXMgbm90CiAgICAgICogaW5jbHVkZWQgYXQgYWxsIGluIHRoZSByZXF1ZXN0IHNldHRpbmdzLiBXaGVuIGluY2x1ZGVkIGFuZAotICAgICAqIHNldCB0byBTVEFSVCwgdGhlIEhBTCBtdXN0IHRyaWdnZXIgdGhlIGF1dG9leHBvc3VyZQotICAgICAqIHByZWNhcHR1cmUgbWV0ZXJpbmcgc2VxdWVuY2UuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBlZmZlY3Qgb2YgQUUgcHJlY2FwdHVyZSB0cmlnZ2VyIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQKLSAgICAgKiBBRSBtb2RlIGFuZCBzdGF0ZTsgc2VlIHRoZSBjYW1lcmEgSEFMIGRldmljZSB2MyBoZWFkZXIgZm9yCi0gICAgICogZGV0YWlscy4KLSAgICAgKiA8L3A+CisgICAgICogc2V0IHRvIFNUQVJULCB0aGUgY2FtZXJhIGRldmljZSB3aWxsIHRyaWdnZXIgdGhlIGF1dG9leHBvc3VyZQorICAgICAqIHByZWNhcHR1cmUgbWV0ZXJpbmcgc2VxdWVuY2UuPC9wPgorICAgICAqIDxwPlRoZSBlZmZlY3Qgb2YgQUUgcHJlY2FwdHVyZSB0cmlnZ2VyIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQKKyAgICAgKiBBRSBtb2RlIGFuZCBzdGF0ZTsgc2VlIHtAbGluayBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQUVfU1RBVEUgYW5kcm9pZC5jb250cm9sLmFlU3RhdGV9IGZvciBBRSBwcmVjYXB0dXJlCisgICAgICogc3RhdGUgdHJhbnNpdGlvbiBkZXRhaWxzLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FFX1NUQVRFCiAgICAgICogQHNlZSAjQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVJfSURMRQogICAgICAqIEBzZWUgI0NPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSX1NUQVJUCiAgICAgICovCkBAIC00OTYsMTAgKzUyMiwxNCBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLmFlUHJlY2FwdHVyZVRyaWdnZXIiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciBBRiBpcyBjdXJyZW50bHkgZW5hYmxlZCwgYW5kIHdoYXQKLSAgICAgKiBtb2RlIGl0IGlzIHNldCB0bwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGV0aGVyIEFGIGlzIGN1cnJlbnRseSBlbmFibGVkLCBhbmQgd2hhdAorICAgICAqIG1vZGUgaXQgaXMgc2V0IHRvPC9wPgorICAgICAqIDxwPk9ubHkgZWZmZWN0aXZlIGlmIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX01PREUgYW5kcm9pZC5jb250cm9sLm1vZGV9ID0gQVVUTy48L3A+CisgICAgICogPHA+SWYgdGhlIGxlbnMgaXMgY29udHJvbGxlZCBieSB0aGUgY2FtZXJhIGRldmljZSBhdXRvLWZvY3VzIGFsZ29yaXRobSwKKyAgICAgKiB0aGUgY2FtZXJhIGRldmljZSB3aWxsIHJlcG9ydCB0aGUgY3VycmVudCBBRiBzdGF0dXMgaW4gYW5kcm9pZC5jb250cm9sLmFmU3RhdGUKKyAgICAgKiBpbiByZXN1bHQgbWV0YWRhdGEuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX01PREUKICAgICAgKiBAc2VlICNDT05UUk9MX0FGX01PREVfT0ZGCiAgICAgICogQHNlZSAjQ09OVFJPTF9BRl9NT0RFX0FVVE8KICAgICAgKiBAc2VlICNDT05UUk9MX0FGX01PREVfTUFDUk8KQEAgLTUxMSw0NiArNTQxLDQwIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuYWZNb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgYXJlYXMgdG8gdXNlIGZvciBmb2N1cwotICAgICAqIGVzdGltYXRpb24KLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogRWFjaCBhcmVhIGlzIGEgcmVjdGFuZ2xlIHBsdXMgd2VpZ2h0OiB4bWluLCB5bWluLAorICAgICAqIDxwPkxpc3Qgb2YgYXJlYXMgdG8gdXNlIGZvciBmb2N1cworICAgICAqIGVzdGltYXRpb248L3A+CisgICAgICogPHA+RWFjaCBhcmVhIGlzIGEgcmVjdGFuZ2xlIHBsdXMgd2VpZ2h0OiB4bWluLCB5bWluLAogICAgICAqIHhtYXgsIHltYXgsIHdlaWdodC4gVGhlIHJlY3RhbmdsZSBpcyBkZWZpbmVkIGluY2x1c2l2ZSBvZiB0aGUKLSAgICAgKiBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBjb29yZGluYXRlIHN5c3RlbSBpcyBiYXNlZCBvbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LAorICAgICAqIHNwZWNpZmllZCBjb29yZGluYXRlcy48L3A+CisgICAgICogPHA+VGhlIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJhc2VkIG9uIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksCiAgICAgICogd2l0aCAoMCwwKSBiZWluZyB0aGUgdG9wLWxlZnQgcGl4ZWwgaW4gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwgYW5kCi0gICAgICogKGFuZHJvaWQuc2Vuc29yLmluZm8uYWN0aXZlQXJyYXlTaXplLndpZHRoIC0gMSwKLSAgICAgKiBhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZS5oZWlnaHQgLSAxKSBiZWluZyB0aGUKKyAgICAgKiAoe0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNTRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRSBhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZX0ud2lkdGggLSAxLAorICAgICAqIHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjU0VOU09SX0lORk9fQUNUSVZFX0FSUkFZX1NJWkUgYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemV9LmhlaWdodCAtIDEpIGJlaW5nIHRoZQogICAgICAqIGJvdHRvbS1yaWdodCBwaXhlbCBpbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LiBUaGUgd2VpZ2h0Ci0gICAgICogc2hvdWxkIGJlIG5vbm5lZ2F0aXZlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiBhbGwgcmVnaW9ucyBoYXZlIDAgd2VpZ2h0LCB0aGVuIG5vIHNwZWNpZmljIGZvY3VzIGFyZWEKKyAgICAgKiBzaG91bGQgYmUgbm9ubmVnYXRpdmUuPC9wPgorICAgICAqIDxwPklmIGFsbCByZWdpb25zIGhhdmUgMCB3ZWlnaHQsIHRoZW4gbm8gc3BlY2lmaWMgZm9jdXMgYXJlYQogICAgICAqIG5lZWRzIHRvIGJlIHVzZWQgYnkgdGhlIEhBTC4gSWYgdGhlIGZvY3VzaW5nIHJlZ2lvbiBpcwotICAgICAqIG91dHNpZGUgdGhlIGN1cnJlbnQgYW5kcm9pZC5zY2FsZXIuY3JvcFJlZ2lvbiwgdGhlIEhBTAorICAgICAqIG91dHNpZGUgdGhlIGN1cnJlbnQge0BsaW5rIENhcHR1cmVSZXF1ZXN0I1NDQUxFUl9DUk9QX1JFR0lPTiBhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9ufSwgdGhlIEhBTAogICAgICAqIHNob3VsZCBpZ25vcmUgdGhlIHNlY3Rpb25zIG91dHNpZGUgdGhlIHJlZ2lvbiBhbmQgb3V0cHV0IHRoZQotICAgICAqIHVzZWQgc2VjdGlvbnMgaW4gdGhlIGZyYW1lIG1ldGFkYXRhCi0gICAgICogPC9wPgorICAgICAqIHVzZWQgc2VjdGlvbnMgaW4gdGhlIGZyYW1lIG1ldGFkYXRhPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTQ0FMRVJfQ1JPUF9SRUdJT04KKyAgICAgKiBAc2VlIENhbWVyYUNoYXJhY3RlcmlzdGljcyNTRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGludFtdPiBDT05UUk9MX0FGX1JFR0lPTlMgPQogICAgICAgICAgICAgbmV3IEtleTxpbnRbXT4oImFuZHJvaWQuY29udHJvbC5hZlJlZ2lvbnMiLCBpbnRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIHRoZSBIQUwgbXVzdCB0cmlnZ2VyIGF1dG9mb2N1cy4KLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogVGhpcyBlbnRyeSBpcyBub3JtYWxseSBzZXQgdG8gSURMRSwgb3IgaXMgbm90Ci0gICAgICogaW5jbHVkZWQgYXQgYWxsIGluIHRoZSByZXF1ZXN0IHNldHRpbmdzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBXaGVuIGluY2x1ZGVkIGFuZCBzZXQgdG8gU1RBUlQsIHRoZSBIQUwgbXVzdCB0cmlnZ2VyIHRoZQotICAgICAqIGF1dG9mb2N1cyBhbGdvcml0aG0uIFRoZSBlZmZlY3Qgb2YgQUYgdHJpZ2dlciBkZXBlbmRzIG9uIHRoZQotICAgICAqIGN1cnJlbnQgQUYgbW9kZSBhbmQgc3RhdGU7IHNlZSB0aGUgY2FtZXJhIEhBTCBkZXZpY2UgdjMKLSAgICAgKiBoZWFkZXIgZm9yIGRldGFpbHMuIFdoZW4gc2V0IHRvIENBTkNFTCwgdGhlIEhBTCBtdXN0IGNhbmNlbAotICAgICAqIGFueSBhY3RpdmUgdHJpZ2dlciwgYW5kIHJldHVybiB0byBpbml0aWFsIEFGIHN0YXRlLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGV0aGVyIHRoZSBjYW1lcmEgZGV2aWNlIHdpbGwgdHJpZ2dlciBhdXRvZm9jdXMgZm9yIHRoaXMgcmVxdWVzdC48L3A+CisgICAgICogPHA+VGhpcyBlbnRyeSBpcyBub3JtYWxseSBzZXQgdG8gSURMRSwgb3IgaXMgbm90CisgICAgICogaW5jbHVkZWQgYXQgYWxsIGluIHRoZSByZXF1ZXN0IHNldHRpbmdzLjwvcD4KKyAgICAgKiA8cD5XaGVuIGluY2x1ZGVkIGFuZCBzZXQgdG8gU1RBUlQsIHRoZSBjYW1lcmEgZGV2aWNlIHdpbGwgdHJpZ2dlciB0aGUKKyAgICAgKiBhdXRvZm9jdXMgYWxnb3JpdGhtLiBJZiBhdXRvZm9jdXMgaXMgZGlzYWJsZWQsIHRoaXMgdHJpZ2dlciBoYXMgbm8gZWZmZWN0LjwvcD4KKyAgICAgKiA8cD5XaGVuIHNldCB0byBDQU5DRUwsIHRoZSBjYW1lcmEgZGV2aWNlIHdpbGwgY2FuY2VsIGFueSBhY3RpdmUgdHJpZ2dlciwKKyAgICAgKiBhbmQgcmV0dXJuIHRvIGl0cyBpbml0aWFsIEFGIHN0YXRlLjwvcD4KKyAgICAgKiA8cD5TZWUge0BsaW5rIENhcHR1cmVSZXN1bHQjQ09OVFJPTF9BRl9TVEFURSBhbmRyb2lkLmNvbnRyb2wuYWZTdGF0ZX0gZm9yIHdoYXQgdGhhdCBtZWFucyBmb3IgZWFjaCBBRiBtb2RlLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FGX1NUQVRFCiAgICAgICogQHNlZSAjQ09OVFJPTF9BRl9UUklHR0VSX0lETEUKICAgICAgKiBAc2VlICNDT05UUk9MX0FGX1RSSUdHRVJfU1RBUlQKICAgICAgKiBAc2VlICNDT05UUk9MX0FGX1RSSUdHRVJfQ0FOQ0VMCkBAIC01NTksMjggKzU4MywzNiBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLmFmVHJpZ2dlciIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIEFXQiBpcyBjdXJyZW50bHkgbG9ja2VkIHRvIGl0cwotICAgICAqIGxhdGVzdCBjYWxjdWxhdGVkIHZhbHVlcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBOb3RlIHRoYXQgQVdCIGxvY2sgaXMgb25seSBtZWFuaW5nZnVsIGZvciBBVVRPCisgICAgICogPHA+V2hldGhlciBBV0IgaXMgY3VycmVudGx5IGxvY2tlZCB0byBpdHMKKyAgICAgKiBsYXRlc3QgY2FsY3VsYXRlZCB2YWx1ZXM8L3A+CisgICAgICogPHA+Tm90ZSB0aGF0IEFXQiBsb2NrIGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3IgQVVUTwogICAgICAqIG1vZGU7IGluIG90aGVyIG1vZGVzLCBBV0IgaXMgYWxyZWFkeSBmaXhlZCB0byBhIHNwZWNpZmljCi0gICAgICogc2V0dGluZwotICAgICAqIDwvcD4KKyAgICAgKiBzZXR0aW5nPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEJvb2xlYW4+IENPTlRST0xfQVdCX0xPQ0sgPQogICAgICAgICAgICAgbmV3IEtleTxCb29sZWFuPigiYW5kcm9pZC5jb250cm9sLmF3YkxvY2siLCBib29sZWFuLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgQVdCIGlzIGN1cnJlbnRseSBzZXR0aW5nIHRoZSBjb2xvcgorICAgICAqIDxwPldoZXRoZXIgQVdCIGlzIGN1cnJlbnRseSBzZXR0aW5nIHRoZSBjb2xvcgogICAgICAqIHRyYW5zZm9ybSBmaWVsZHMsIGFuZCB3aGF0IGl0cyBpbGx1bWluYXRpb24gdGFyZ2V0Ci0gICAgICogaXMKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogW0JDIC0gQVdCIGxvY2ssQVdCIG1vZGVzXQotICAgICAqIDwvcD4KKyAgICAgKiBpczwvcD4KKyAgICAgKiA8cD5UaGlzIGNvbnRyb2wgaXMgb25seSBlZmZlY3RpdmUgaWYge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERSBhbmRyb2lkLmNvbnRyb2wubW9kZX0gaXMgQVVUTy48L3A+CisgICAgICogPHA+V2hlbiBzZXQgdG8gdGhlIE9OIG1vZGUsIHRoZSBjYW1lcmEgZGV2aWNlJ3MgYXV0byB3aGl0ZSBiYWxhbmNlCisgICAgICogcm91dGluZSBpcyBlbmFibGVkLCBvdmVycmlkaW5nIHRoZSBhcHBsaWNhdGlvbidzIHNlbGVjdGVkCisgICAgICoge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fVFJBTlNGT1JNIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLnRyYW5zZm9ybX0sIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX0dBSU5TIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLmdhaW5zfSBhbmQKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9NT0RFIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGV9LjwvcD4KKyAgICAgKiA8cD5XaGVuIHNldCB0byB0aGUgT0ZGIG1vZGUsIHRoZSBjYW1lcmEgZGV2aWNlJ3MgYXV0byB3aGl0ZSBiYWxhbmNlCisgICAgICogcm91dGluZSBpcyBkaXNhYmxlZC4gVGhlIGFwcGxpY2FudGlvbiBtYW51YWxseSBjb250cm9scyB0aGUgd2hpdGUKKyAgICAgKiBiYWxhbmNlIGJ5IHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX1RSQU5TRk9STSBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi50cmFuc2Zvcm19LCBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5nYWlucworICAgICAqIGFuZCB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9NT0RFIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGV9LjwvcD4KKyAgICAgKiA8cD5XaGVuIHNldCB0byBhbnkgb3RoZXIgbW9kZXMsIHRoZSBjYW1lcmEgZGV2aWNlJ3MgYXV0byB3aGl0ZSBiYWxhbmNlCisgICAgICogcm91dGluZSBpcyBkaXNhYmxlZC4gVGhlIGNhbWVyYSBkZXZpY2UgdXNlcyBlYWNoIHBhcnRpY3VsYXIgaWxsdW1pbmF0aW9uCisgICAgICogdGFyZ2V0IGZvciB3aGl0ZSBiYWxhbmNlIGFkanVzdG1lbnQuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX0dBSU5TCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fVFJBTlNGT1JNCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX01PREUKICAgICAgKiBAc2VlICNDT05UUk9MX0FXQl9NT0RFX09GRgogICAgICAqIEBzZWUgI0NPTlRST0xfQVdCX01PREVfQVVUTwogICAgICAqIEBzZWUgI0NPTlRST0xfQVdCX01PREVfSU5DQU5ERVNDRU5UCkBAIC01OTUsNDMgKzYyNywzOSBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLmF3Yk1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yIGlsbHVtaW5hbnQKLSAgICAgKiBlc3RpbWF0aW9uCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE9ubHkgdXNlZCBpbiBBVVRPIG1vZGUuCi0gICAgICogPC9wPjxwPgotICAgICAqIEVhY2ggYXJlYSBpcyBhIHJlY3RhbmdsZSBwbHVzIHdlaWdodDogeG1pbiwgeW1pbiwKKyAgICAgKiA8cD5MaXN0IG9mIGFyZWFzIHRvIHVzZSBmb3IgaWxsdW1pbmFudAorICAgICAqIGVzdGltYXRpb248L3A+CisgICAgICogPHA+T25seSB1c2VkIGluIEFVVE8gbW9kZS48L3A+CisgICAgICogPHA+RWFjaCBhcmVhIGlzIGEgcmVjdGFuZ2xlIHBsdXMgd2VpZ2h0OiB4bWluLCB5bWluLAogICAgICAqIHhtYXgsIHltYXgsIHdlaWdodC4gVGhlIHJlY3RhbmdsZSBpcyBkZWZpbmVkIGluY2x1c2l2ZSBvZiB0aGUKLSAgICAgKiBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBjb29yZGluYXRlIHN5c3RlbSBpcyBiYXNlZCBvbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LAorICAgICAqIHNwZWNpZmllZCBjb29yZGluYXRlcy48L3A+CisgICAgICogPHA+VGhlIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJhc2VkIG9uIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksCiAgICAgICogd2l0aCAoMCwwKSBiZWluZyB0aGUgdG9wLWxlZnQgcGl4ZWwgaW4gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwgYW5kCi0gICAgICogKGFuZHJvaWQuc2Vuc29yLmluZm8uYWN0aXZlQXJyYXlTaXplLndpZHRoIC0gMSwKLSAgICAgKiBhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZS5oZWlnaHQgLSAxKSBiZWluZyB0aGUKKyAgICAgKiAoe0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNTRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRSBhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZX0ud2lkdGggLSAxLAorICAgICAqIHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjU0VOU09SX0lORk9fQUNUSVZFX0FSUkFZX1NJWkUgYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemV9LmhlaWdodCAtIDEpIGJlaW5nIHRoZQogICAgICAqIGJvdHRvbS1yaWdodCBwaXhlbCBpbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LiBUaGUgd2VpZ2h0Ci0gICAgICogc2hvdWxkIGJlIG5vbm5lZ2F0aXZlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiBhbGwgcmVnaW9ucyBoYXZlIDAgd2VpZ2h0LCB0aGVuIG5vIHNwZWNpZmljIG1ldGVyaW5nIGFyZWEKKyAgICAgKiBzaG91bGQgYmUgbm9ubmVnYXRpdmUuPC9wPgorICAgICAqIDxwPklmIGFsbCByZWdpb25zIGhhdmUgMCB3ZWlnaHQsIHRoZW4gbm8gc3BlY2lmaWMgbWV0ZXJpbmcgYXJlYQogICAgICAqIG5lZWRzIHRvIGJlIHVzZWQgYnkgdGhlIEhBTC4gSWYgdGhlIG1ldGVyaW5nIHJlZ2lvbiBpcwotICAgICAqIG91dHNpZGUgdGhlIGN1cnJlbnQgYW5kcm9pZC5zY2FsZXIuY3JvcFJlZ2lvbiwgdGhlIEhBTAorICAgICAqIG91dHNpZGUgdGhlIGN1cnJlbnQge0BsaW5rIENhcHR1cmVSZXF1ZXN0I1NDQUxFUl9DUk9QX1JFR0lPTiBhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9ufSwgdGhlIEhBTAogICAgICAqIHNob3VsZCBpZ25vcmUgdGhlIHNlY3Rpb25zIG91dHNpZGUgdGhlIHJlZ2lvbiBhbmQgb3V0cHV0IHRoZQotICAgICAqIHVzZWQgc2VjdGlvbnMgaW4gdGhlIGZyYW1lIG1ldGFkYXRhCi0gICAgICogPC9wPgorICAgICAqIHVzZWQgc2VjdGlvbnMgaW4gdGhlIGZyYW1lIG1ldGFkYXRhPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTQ0FMRVJfQ1JPUF9SRUdJT04KKyAgICAgKiBAc2VlIENhbWVyYUNoYXJhY3RlcmlzdGljcyNTRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGludFtdPiBDT05UUk9MX0FXQl9SRUdJT05TID0KICAgICAgICAgICAgIG5ldyBLZXk8aW50W10+KCJhbmRyb2lkLmNvbnRyb2wuYXdiUmVnaW9ucyIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEluZm9ybWF0aW9uIHRvIDNBIHJvdXRpbmVzIGFib3V0IHRoZSBwdXJwb3NlCi0gICAgICogb2YgdGhpcyBjYXB0dXJlLCB0byBoZWxwIGRlY2lkZSBvcHRpbWFsIDNBCi0gICAgICogc3RyYXRlZ3kKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogT25seSB1c2VkIGlmIGFuZHJvaWQuY29udHJvbC5tb2RlICE9IE9GRi4KLSAgICAgKiA8L3A+CisgICAgICogPHA+SW5mb3JtYXRpb24gdG8gdGhlIGNhbWVyYSBkZXZpY2UgM0EgKGF1dG8tZXhwb3N1cmUsCisgICAgICogYXV0by1mb2N1cywgYXV0by13aGl0ZSBiYWxhbmNlKSByb3V0aW5lcyBhYm91dCB0aGUgcHVycG9zZQorICAgICAqIG9mIHRoaXMgY2FwdHVyZSwgdG8gaGVscCB0aGUgY2FtZXJhIGRldmljZSB0byBkZWNpZGUgb3B0aW1hbCAzQQorICAgICAqIHN0cmF0ZWd5LjwvcD4KKyAgICAgKiA8cD5UaGlzIGNvbnRyb2wgaXMgb25seSBlZmZlY3RpdmUgaWYgPGNvZGU+e0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERSBhbmRyb2lkLmNvbnRyb2wubW9kZX0gIT0gT0ZGPC9jb2RlPgorICAgICAqIGFuZCBhbnkgM0Egcm91dGluZSBpcyBhY3RpdmUuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX01PREUKICAgICAgKiBAc2VlICNDT05UUk9MX0NBUFRVUkVfSU5URU5UX0NVU1RPTQogICAgICAqIEBzZWUgI0NPTlRST0xfQ0FQVFVSRV9JTlRFTlRfUFJFVklFVwogICAgICAqIEBzZWUgI0NPTlRST0xfQ0FQVFVSRV9JTlRFTlRfU1RJTExfQ0FQVFVSRQpAQCAtNjQzLDEwICs2NzEsMTAgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5jYXB0dXJlSW50ZW50IiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgYW55IHNwZWNpYWwgY29sb3IgZWZmZWN0IGlzIGluIHVzZS4KLSAgICAgKiBPbmx5IHVzZWQgaWYgYW5kcm9pZC5jb250cm9sLm1vZGUgIT0gT0ZGCi0gICAgICogPC9wPgorICAgICAqIDxwPldoZXRoZXIgYW55IHNwZWNpYWwgY29sb3IgZWZmZWN0IGlzIGluIHVzZS4KKyAgICAgKiBPbmx5IHVzZWQgaWYge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERSBhbmRyb2lkLmNvbnRyb2wubW9kZX0gIT0gT0ZGPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX01PREUKICAgICAgKiBAc2VlICNDT05UUk9MX0VGRkVDVF9NT0RFX09GRgogICAgICAqIEBzZWUgI0NPTlRST0xfRUZGRUNUX01PREVfTU9OTwogICAgICAqIEBzZWUgI0NPTlRST0xfRUZGRUNUX01PREVfTkVHQVRJVkUKQEAgLTY2MSwxMCArNjg5LDIwIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuZWZmZWN0TW9kZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBPdmVyYWxsIG1vZGUgb2YgM0EgY29udHJvbAotICAgICAqIHJvdXRpbmVzCi0gICAgICogPC9wPgorICAgICAqIDxwPk92ZXJhbGwgbW9kZSBvZiAzQSBjb250cm9sCisgICAgICogcm91dGluZXM8L3A+CisgICAgICogPHA+SGlnaC1sZXZlbCAzQSBjb250cm9sLiBXaGVuIHNldCB0byBPRkYsIGFsbCAzQSBjb250cm9sCisgICAgICogYnkgdGhlIGNhbWVyYSBkZXZpY2UgaXMgZGlzYWJsZWQuIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHNldCB0aGUgZmllbGRzIGZvcgorICAgICAqIGNhcHR1cmUgcGFyYW1ldGVycyBpdHNlbGYuPC9wPgorICAgICAqIDxwPldoZW4gc2V0IHRvIEFVVE8sIHRoZSBpbmRpdmlkdWFsIGFsZ29yaXRobSBjb250cm9scyBpbgorICAgICAqIGFuZHJvaWQuY29udHJvbC4qIGFyZSBpbiBlZmZlY3QsIHN1Y2ggYXMge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUZfTU9ERSBhbmRyb2lkLmNvbnRyb2wuYWZNb2RlfS48L3A+CisgICAgICogPHA+V2hlbiBzZXQgdG8gVVNFX1NDRU5FX01PREUsIHRoZSBpbmRpdmlkdWFsIGNvbnRyb2xzIGluCisgICAgICogYW5kcm9pZC5jb250cm9sLiogYXJlIG1vc3RseSBkaXNhYmxlZCwgYW5kIHRoZSBjYW1lcmEgZGV2aWNlIGltcGxlbWVudHMKKyAgICAgKiBvbmUgb2YgdGhlIHNjZW5lIG1vZGUgc2V0dGluZ3MgKHN1Y2ggYXMgQUNUSU9OLCBTVU5TRVQsIG9yIFBBUlRZKQorICAgICAqIGFzIGl0IHdpc2hlcy4gVGhlIGNhbWVyYSBkZXZpY2Ugc2NlbmUgbW9kZSAzQSBzZXR0aW5ncyBhcmUgcHJvdmlkZWQgYnkKKyAgICAgKiBhbmRyb2lkLmNvbnRyb2wuc2NlbmVNb2RlT3ZlcnJpZGVzLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRl9NT0RFCiAgICAgICogQHNlZSAjQ09OVFJPTF9NT0RFX09GRgogICAgICAqIEBzZWUgI0NPTlRST0xfTU9ERV9BVVRPCiAgICAgICogQHNlZSAjQ09OVFJPTF9NT0RFX1VTRV9TQ0VORV9NT0RFCkBAIC02NzMsMTAgKzcxMSwxMCBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hpY2ggc2NlbmUgbW9kZSBpcyBhY3RpdmUgd2hlbgotICAgICAqIGFuZHJvaWQuY29udHJvbC5tb2RlID0gU0NFTkVfTU9ERQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGljaCBzY2VuZSBtb2RlIGlzIGFjdGl2ZSB3aGVuCisgICAgICoge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERSBhbmRyb2lkLmNvbnRyb2wubW9kZX0gPSBTQ0VORV9NT0RFPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX01PREUKICAgICAgKiBAc2VlICNDT05UUk9MX1NDRU5FX01PREVfVU5TVVBQT1JURUQKICAgICAgKiBAc2VlICNDT05UUk9MX1NDRU5FX01PREVfRkFDRV9QUklPUklUWQogICAgICAqIEBzZWUgI0NPTlRST0xfU0NFTkVfTU9ERV9BQ1RJT04KQEAgLTY5OSwyNCArNzM3LDI3IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuc2NlbmVNb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgdmlkZW8gc3RhYmlsaXphdGlvbiBpcwotICAgICAqIGFjdGl2ZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBJZiBlbmFibGVkLCB2aWRlbyBzdGFiaWxpemF0aW9uIGNhbiBtb2RpZnkgdGhlCi0gICAgICogYW5kcm9pZC5zY2FsZXIuY3JvcFJlZ2lvbiB0byBrZWVwIHRoZSB2aWRlbyBzdHJlYW0KLSAgICAgKiBzdGFiaWxpemVkCi0gICAgICogPC9wPgorICAgICAqIDxwPldoZXRoZXIgdmlkZW8gc3RhYmlsaXphdGlvbiBpcworICAgICAqIGFjdGl2ZTwvcD4KKyAgICAgKiA8cD5JZiBlbmFibGVkLCB2aWRlbyBzdGFiaWxpemF0aW9uIGNhbiBtb2RpZnkgdGhlCisgICAgICoge0BsaW5rIENhcHR1cmVSZXF1ZXN0I1NDQUxFUl9DUk9QX1JFR0lPTiBhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9ufSB0byBrZWVwIHRoZSB2aWRlbyBzdHJlYW0KKyAgICAgKiBzdGFiaWxpemVkPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTQ0FMRVJfQ1JPUF9SRUdJT04KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxCb29sZWFuPiBDT05UUk9MX1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERSA9CiAgICAgICAgICAgICBuZXcgS2V5PEJvb2xlYW4+KCJhbmRyb2lkLmNvbnRyb2wudmlkZW9TdGFiaWxpemF0aW9uTW9kZSIsIGJvb2xlYW4uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogT3BlcmF0aW9uIG1vZGUgZm9yIGVkZ2UKLSAgICAgKiBlbmhhbmNlbWVudAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5PcGVyYXRpb24gbW9kZSBmb3IgZWRnZQorICAgICAqIGVuaGFuY2VtZW50PC9wPgorICAgICAqIDxwPkVkZ2Uvc2hhcnBuZXNzL2RldGFpbCBlbmhhbmNlbWVudC4gT0ZGIG1lYW5zIG5vCisgICAgICogZW5oYW5jZW1lbnQgd2lsbCBiZSBhcHBsaWVkIGJ5IHRoZSBIQUwuPC9wPgorICAgICAqIDxwPkZBU1QvSElHSF9RVUFMSVRZIGJvdGggbWVhbiBjYW1lcmEgZGV2aWNlIGRldGVybWluZWQgZW5oYW5jZW1lbnQKKyAgICAgKiB3aWxsIGJlIGFwcGxpZWQuIEhJR0hfUVVBTElUWSBtb2RlIGluZGljYXRlcyB0aGF0IHRoZQorICAgICAqIGNhbWVyYSBkZXZpY2Ugd2lsbCB1c2UgdGhlIGhpZ2hlc3QtcXVhbGl0eSBlbmhhbmNlbWVudCBhbGdvcml0aG1zLAorICAgICAqIGV2ZW4gaWYgaXQgc2xvd3MgZG93biBjYXB0dXJlIHJhdGUuIEZBU1QgbWVhbnMgdGhlIGNhbWVyYSBkZXZpY2Ugd2lsbAorICAgICAqIG5vdCBzbG93IGRvd24gY2FwdHVyZSByYXRlIHdoZW4gYXBwbHlpbmcgZWRnZSBlbmhhbmNlbWVudC48L3A+CiAgICAgICogQHNlZSAjRURHRV9NT0RFX09GRgogICAgICAqIEBzZWUgI0VER0VfTU9ERV9GQVNUCiAgICAgICogQHNlZSAjRURHRV9NT0RFX0hJR0hfUVVBTElUWQpAQCAtNzI1LDkgKzc2NiwyMyBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5lZGdlLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogU2VsZWN0IGZsYXNoIG9wZXJhdGlvbiBtb2RlCi0gICAgICogPC9wPgorICAgICAqIDxwPlRoZSBkZXNpcmVkIG1vZGUgZm9yIGZvciB0aGUgY2FtZXJhIGRldmljZSdzIGZsYXNoIGNvbnRyb2wuPC9wPgorICAgICAqIDxwPlRoaXMgY29udHJvbCBpcyBvbmx5IGVmZmVjdGl2ZSB3aGVuIGZsYXNoIHVuaXQgaXMgYXZhaWxhYmxlCisgICAgICogKDxjb2RlPntAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjRkxBU0hfSU5GT19BVkFJTEFCTEUgYW5kcm9pZC5mbGFzaC5pbmZvLmF2YWlsYWJsZX0gIT0gMDwvY29kZT4pLjwvcD4KKyAgICAgKiA8cD5XaGVuIHRoaXMgY29udHJvbCBpcyB1c2VkLCB0aGUge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTU9ERSBhbmRyb2lkLmNvbnRyb2wuYWVNb2RlfSBtdXN0IGJlIHNldCB0byBPTiBvciBPRkYuCisgICAgICogT3RoZXJ3aXNlLCB0aGUgY2FtZXJhIGRldmljZSBhdXRvLWV4cG9zdXJlIHJlbGF0ZWQgZmxhc2ggY29udHJvbCAoT05fQVVUT19GTEFTSCwKKyAgICAgKiBPTl9BTFdBWVNfRkxBU0gsIG9yIE9OX0FVVE9fRkxBU0hfUkVERVlFKSB3aWxsIG92ZXJyaWRlIHRoaXMgY29udHJvbC48L3A+CisgICAgICogPHA+V2hlbiBzZXQgdG8gT0ZGLCB0aGUgY2FtZXJhIGRldmljZSB3aWxsIG5vdCBmaXJlIGZsYXNoIGZvciB0aGlzIGNhcHR1cmUuPC9wPgorICAgICAqIDxwPldoZW4gc2V0IHRvIFNJTkdMRSwgdGhlIGNhbWVyYSBkZXZpY2Ugd2lsbCBmaXJlIGZsYXNoIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbWVyYQorICAgICAqIGRldmljZSdzIGF1dG8tZXhwb3N1cmUgcm91dGluZSdzIHJlc3VsdC4gV2hlbiB1c2VkIGluIHN0aWxsIGNhcHR1cmUgY2FzZSwgdGhpcworICAgICAqIGNvbnRyb2wgc2hvdWxkIGJlIHVzZWQgYWxvbmcgd2l0aCBBRSBwcmVjYXB0dXJlIG1ldGVyaW5nIHNlcXVlbmNlCisgICAgICogKHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX1BSRUNBUFRVUkVfVFJJR0dFUiBhbmRyb2lkLmNvbnRyb2wuYWVQcmVjYXB0dXJlVHJpZ2dlcn0pLCBvdGhlcndpc2UsIHRoZSBpbWFnZSBtYXkgYmUgaW5jb3JyZWN0bHkgZXhwb3NlZC48L3A+CisgICAgICogPHA+V2hlbiBzZXQgdG8gVE9SQ0gsIHRoZSBmbGFzaCB3aWxsIGJlIG9uIGNvbnRpbnVvdXNseS4gVGhpcyBtb2RlIGNhbiBiZSB1c2VkCisgICAgICogZm9yIHVzZSBjYXNlcyBzdWNoIGFzIHByZXZpZXcsIGF1dG8tZm9jdXMgYXNzaXN0LCBzdGlsbCBjYXB0dXJlLCBvciB2aWRlbyByZWNvcmRpbmcuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX01PREUKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSCisgICAgICogQHNlZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjRkxBU0hfSU5GT19BVkFJTEFCTEUKICAgICAgKiBAc2VlICNGTEFTSF9NT0RFX09GRgogICAgICAqIEBzZWUgI0ZMQVNIX01PREVfU0lOR0xFCiAgICAgICogQHNlZSAjRkxBU0hfTU9ERV9UT1JDSApAQCAtNzM2LDEyOCArNzkxLDEyMyBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5mbGFzaC5tb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEdQUyBjb29yZGluYXRlcyB0byBpbmNsdWRlIGluIG91dHB1dCBKUEVHCi0gICAgICogRVhJRgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5HUFMgY29vcmRpbmF0ZXMgdG8gaW5jbHVkZSBpbiBvdXRwdXQgSlBFRworICAgICAqIEVYSUY8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZG91YmxlW10+IEpQRUdfR1BTX0NPT1JESU5BVEVTID0KICAgICAgICAgICAgIG5ldyBLZXk8ZG91YmxlW10+KCJhbmRyb2lkLmpwZWcuZ3BzQ29vcmRpbmF0ZXMiLCBkb3VibGVbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiAzMiBjaGFyYWN0ZXJzIGRlc2NyaWJpbmcgR1BTIGFsZ29yaXRobSB0bwotICAgICAqIGluY2x1ZGUgaW4gRVhJRgotICAgICAqIDwvcD4KKyAgICAgKiA8cD4zMiBjaGFyYWN0ZXJzIGRlc2NyaWJpbmcgR1BTIGFsZ29yaXRobSB0bworICAgICAqIGluY2x1ZGUgaW4gRVhJRjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxTdHJpbmc+IEpQRUdfR1BTX1BST0NFU1NJTkdfTUVUSE9EID0KICAgICAgICAgICAgIG5ldyBLZXk8U3RyaW5nPigiYW5kcm9pZC5qcGVnLmdwc1Byb2Nlc3NpbmdNZXRob2QiLCBTdHJpbmcuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGltZSBHUFMgZml4IHdhcyBtYWRlIHRvIGluY2x1ZGUgaW4KLSAgICAgKiBFWElGCi0gICAgICogPC9wPgorICAgICAqIDxwPlRpbWUgR1BTIGZpeCB3YXMgbWFkZSB0byBpbmNsdWRlIGluCisgICAgICogRVhJRjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxMb25nPiBKUEVHX0dQU19USU1FU1RBTVAgPQogICAgICAgICAgICAgbmV3IEtleTxMb25nPigiYW5kcm9pZC5qcGVnLmdwc1RpbWVzdGFtcCIsIGxvbmcuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogT3JpZW50YXRpb24gb2YgSlBFRyBpbWFnZSB0bwotICAgICAqIHdyaXRlCi0gICAgICogPC9wPgorICAgICAqIDxwPk9yaWVudGF0aW9uIG9mIEpQRUcgaW1hZ2UgdG8KKyAgICAgKiB3cml0ZTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxJbnRlZ2VyPiBKUEVHX09SSUVOVEFUSU9OID0KICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuanBlZy5vcmllbnRhdGlvbiIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBDb21wcmVzc2lvbiBxdWFsaXR5IG9mIHRoZSBmaW5hbCBKUEVHCi0gICAgICogaW1hZ2UKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogODUtOTUgaXMgdHlwaWNhbCB1c2FnZSByYW5nZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5Db21wcmVzc2lvbiBxdWFsaXR5IG9mIHRoZSBmaW5hbCBKUEVHCisgICAgICogaW1hZ2U8L3A+CisgICAgICogPHA+ODUtOTUgaXMgdHlwaWNhbCB1c2FnZSByYW5nZTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxCeXRlPiBKUEVHX1FVQUxJVFkgPQogICAgICAgICAgICAgbmV3IEtleTxCeXRlPigiYW5kcm9pZC5qcGVnLnF1YWxpdHkiLCBieXRlLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIENvbXByZXNzaW9uIHF1YWxpdHkgb2YgSlBFRwotICAgICAqIHRodW1ibmFpbAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5Db21wcmVzc2lvbiBxdWFsaXR5IG9mIEpQRUcKKyAgICAgKiB0aHVtYm5haWw8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Qnl0ZT4gSlBFR19USFVNQk5BSUxfUVVBTElUWSA9CiAgICAgICAgICAgICBuZXcgS2V5PEJ5dGU+KCJhbmRyb2lkLmpwZWcudGh1bWJuYWlsUXVhbGl0eSIsIGJ5dGUuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogUmVzb2x1dGlvbiBvZiBlbWJlZGRlZCBKUEVHCi0gICAgICogdGh1bWJuYWlsCi0gICAgICogPC9wPgorICAgICAqIDxwPlJlc29sdXRpb24gb2YgZW1iZWRkZWQgSlBFRyB0aHVtYm5haWw8L3A+CisgICAgICogPHA+V2hlbiBzZXQgdG8gKDAsIDApIHZhbHVlLCB0aGUgSlBFRyBFWElGIHdpbGwgbm90IGNvbnRhaW4gdGh1bWJuYWlsLAorICAgICAqIGJ1dCB0aGUgY2FwdHVyZWQgSlBFRyB3aWxsIHN0aWxsIGJlIGEgdmFsaWQgaW1hZ2UuPC9wPgorICAgICAqIDxwPldoZW4gYSBqcGVnIGltYWdlIGNhcHR1cmUgaXMgaXNzdWVkLCB0aGUgdGh1bWJuYWlsIHNpemUgc2VsZWN0ZWQgc2hvdWxkIGhhdmUKKyAgICAgKiB0aGUgc2FtZSBhc3BlY3QgcmF0aW8gYXMgdGhlIGpwZWcgaW1hZ2UuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplPiBKUEVHX1RIVU1CTkFJTF9TSVpFID0KICAgICAgICAgICAgIG5ldyBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemU+KCJhbmRyb2lkLmpwZWcudGh1bWJuYWlsU2l6ZSIsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFNpemUgb2YgdGhlIGxlbnMgYXBlcnR1cmUKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogV2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgZGV2aWNlcy4gQ2FuIG9ubHkKLSAgICAgKiBwaWNrIGZyb20gc3VwcG9ydGVkIGxpc3QKLSAgICAgKiA8L3A+CisgICAgICogPHA+VGhlIHJhdGlvIG9mIGxlbnMgZm9jYWwgbGVuZ3RoIHRvIHRoZSBlZmZlY3RpdmUKKyAgICAgKiBhcGVydHVyZSBkaWFtZXRlci48L3A+CisgICAgICogPHA+VGhpcyB3aWxsIG9ubHkgYmUgc3VwcG9ydGVkIG9uIHRoZSBjYW1lcmEgZGV2aWNlcyB0aGF0CisgICAgICogaGF2ZSB2YXJpYWJsZSBhcGVydHVyZSBsZW5zLiBUaGUgYXBlcnR1cmUgdmFsdWUgY2FuIG9ubHkgYmUKKyAgICAgKiBvbmUgb2YgdGhlIHZhbHVlcyBsaXN0ZWQgaW4ge0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNMRU5TX0lORk9fQVZBSUxBQkxFX0FQRVJUVVJFUyBhbmRyb2lkLmxlbnMuaW5mby5hdmFpbGFibGVBcGVydHVyZXN9LjwvcD4KKyAgICAgKiA8cD5XaGVuIHRoaXMgaXMgc3VwcG9ydGVkIGFuZCB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9NT0RFIGFuZHJvaWQuY29udHJvbC5hZU1vZGV9IGlzIE9GRiwKKyAgICAgKiB0aGlzIGNhbiBiZSBzZXQgYWxvbmcgd2l0aCB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX0VYUE9TVVJFX1RJTUUgYW5kcm9pZC5zZW5zb3IuZXhwb3N1cmVUaW1lfSwKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX1NFTlNJVElWSVRZIGFuZHJvaWQuc2Vuc29yLnNlbnNpdGl2aXR5fSwgYW5kIGFuZHJvaWQuc2Vuc29yLmZyYW1lRHVyYXRpb24KKyAgICAgKiB0byBhY2hpZXZlIG1hbnVhbCBleHBvc3VyZSBjb250cm9sLjwvcD4KKyAgICAgKiA8cD5UaGUgcmVxdWVzdGVkIGFwZXJ0dXJlIHZhbHVlIG1heSB0YWtlIHNldmVyYWwgZnJhbWVzIHRvIHJlYWNoIHRoZQorICAgICAqIHJlcXVlc3RlZCB2YWx1ZTsgdGhlIGNhbWVyYSBkZXZpY2Ugd2lsbCByZXBvcnQgdGhlIGN1cnJlbnQgKGludGVybWVkaWF0ZSkKKyAgICAgKiBhcGVydHVyZSBzaXplIGluIGNhcHR1cmUgcmVzdWx0IG1ldGFkYXRhIHdoaWxlIHRoZSBhcGVydHVyZSBpcyBjaGFuZ2luZy48L3A+CisgICAgICogPHA+V2hlbiB0aGlzIGlzIHN1cHBvcnRlZCBhbmQge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTU9ERSBhbmRyb2lkLmNvbnRyb2wuYWVNb2RlfSBpcyBvbmUgb2YKKyAgICAgKiB0aGUgT04gbW9kZXMsIHRoaXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjYW1lcmEgZGV2aWNlCisgICAgICogYXV0by1leHBvc3VyZSBhbGdvcml0aG0sIHRoZSBvdmVycmlkZGVuIHZhbHVlcyBhcmUgdGhlbiBwcm92aWRlZAorICAgICAqIGJhY2sgdG8gdGhlIHVzZXIgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzdWx0LjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9NT0RFCisgICAgICogQHNlZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjTEVOU19JTkZPX0FWQUlMQUJMRV9BUEVSVFVSRVMKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I1NFTlNPUl9FWFBPU1VSRV9USU1FCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfU0VOU0lUSVZJVFkKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxGbG9hdD4gTEVOU19BUEVSVFVSRSA9CiAgICAgICAgICAgICBuZXcgS2V5PEZsb2F0PigiYW5kcm9pZC5sZW5zLmFwZXJ0dXJlIiwgZmxvYXQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogU3RhdGUgb2YgbGVucyBuZXV0cmFsIGRlbnNpdHkKLSAgICAgKiBmaWx0ZXIocykKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogV2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgZGV2aWNlcy4gQ2FuIG9ubHkKLSAgICAgKiBwaWNrIGZyb20gc3VwcG9ydGVkIGxpc3QKLSAgICAgKiA8L3A+CisgICAgICogPHA+U3RhdGUgb2YgbGVucyBuZXV0cmFsIGRlbnNpdHkgZmlsdGVyKHMpLjwvcD4KKyAgICAgKiA8cD5UaGlzIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBvbiBtb3N0IGNhbWVyYSBkZXZpY2VzLiBPbiBkZXZpY2VzCisgICAgICogd2hlcmUgdGhpcyBpcyBzdXBwb3J0ZWQsIHRoaXMgbWF5IG9ubHkgYmUgc2V0IHRvIG9uZSBvZiB0aGUKKyAgICAgKiB2YWx1ZXMgaW5jbHVkZWQgaW4ge0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNMRU5TX0lORk9fQVZBSUxBQkxFX0ZJTFRFUl9ERU5TSVRJRVMgYW5kcm9pZC5sZW5zLmluZm8uYXZhaWxhYmxlRmlsdGVyRGVuc2l0aWVzfS48L3A+CisgICAgICogPHA+TGVucyBmaWx0ZXJzIGFyZSB0eXBpY2FsbHkgdXNlZCB0byBsb3dlciB0aGUgYW1vdW50IG9mIGxpZ2h0IHRoZQorICAgICAqIHNlbnNvciBpcyBleHBvc2VkIHRvIChtZWFzdXJlZCBpbiBzdGVwcyBvZiBFVikuIEFzIHVzZWQgaGVyZSwgYW4gRVYKKyAgICAgKiBzdGVwIGlzIHRoZSBzdGFuZGFyZCBsb2dhcml0aG1pYyByZXByZXNlbnRhdGlvbiwgd2hpY2ggYXJlCisgICAgICogbm9uLW5lZ2F0aXZlLCBhbmQgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgYW1vdW50IG9mIGxpZ2h0CisgICAgICogaGl0dGluZyB0aGUgc2Vuc29yLiAgRm9yIGV4YW1wbGUsIHNldHRpbmcgdGhpcyB0byAwIHdvdWxkIHJlc3VsdAorICAgICAqIGluIG5vIHJlZHVjdGlvbiBvZiB0aGUgaW5jb21pbmcgbGlnaHQsIGFuZCBzZXR0aW5nIHRoaXMgdG8gMiB3b3VsZAorICAgICAqIG1lYW4gdGhhdCB0aGUgZmlsdGVyIGlzIHNldCB0byByZWR1Y2UgaW5jb21pbmcgbGlnaHQgYnkgdHdvIHN0b3BzCisgICAgICogKGFsbG93aW5nIDEvNCBvZiB0aGUgcHJpb3IgYW1vdW50IG9mIGxpZ2h0IHRvIHRoZSBzZW5zb3IpLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI0xFTlNfSU5GT19BVkFJTEFCTEVfRklMVEVSX0RFTlNJVElFUwogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEZsb2F0PiBMRU5TX0ZJTFRFUl9ERU5TSVRZID0KICAgICAgICAgICAgIG5ldyBLZXk8RmxvYXQ+KCJhbmRyb2lkLmxlbnMuZmlsdGVyRGVuc2l0eSIsIGZsb2F0LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExlbnMgb3B0aWNhbCB6b29tIHNldHRpbmcKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogV2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgZGV2aWNlcy4KLSAgICAgKiA8L3A+CisgICAgICogPHA+TGVucyBvcHRpY2FsIHpvb20gc2V0dGluZzwvcD4KKyAgICAgKiA8cD5XaWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gbW9zdCBkZXZpY2VzLjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxGbG9hdD4gTEVOU19GT0NBTF9MRU5HVEggPQogICAgICAgICAgICAgbmV3IEtleTxGbG9hdD4oImFuZHJvaWQubGVucy5mb2NhbExlbmd0aCIsIGZsb2F0LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIERpc3RhbmNlIHRvIHBsYW5lIG9mIHNoYXJwZXN0IGZvY3VzLAotICAgICAqIG1lYXN1cmVkIGZyb20gZnJvbnRtb3N0IHN1cmZhY2Ugb2YgdGhlIGxlbnMKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogMCA9IGluZmluaXR5IGZvY3VzLiBVc2VkIHZhbHVlIHNob3VsZCBiZSBjbGFtcGVkCi0gICAgICogdG8gKDAsbWluaW11bSBmb2N1cyBkaXN0YW5jZSkKLSAgICAgKiA8L3A+CisgICAgICogPHA+RGlzdGFuY2UgdG8gcGxhbmUgb2Ygc2hhcnBlc3QgZm9jdXMsCisgICAgICogbWVhc3VyZWQgZnJvbSBmcm9udG1vc3Qgc3VyZmFjZSBvZiB0aGUgbGVuczwvcD4KKyAgICAgKiA8cD4wID0gaW5maW5pdHkgZm9jdXMuIFVzZWQgdmFsdWUgc2hvdWxkIGJlIGNsYW1wZWQKKyAgICAgKiB0byAoMCxtaW5pbXVtIGZvY3VzIGRpc3RhbmNlKTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxGbG9hdD4gTEVOU19GT0NVU19ESVNUQU5DRSA9CiAgICAgICAgICAgICBuZXcgS2V5PEZsb2F0PigiYW5kcm9pZC5sZW5zLmZvY3VzRGlzdGFuY2UiLCBmbG9hdC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIG9wdGljYWwgaW1hZ2Ugc3RhYmlsaXphdGlvbiBpcwotICAgICAqIGVuYWJsZWQuCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFdpbGwgbm90IGJlIHN1cHBvcnRlZCBvbiBtb3N0IGRldmljZXMuCi0gICAgICogPC9wPgorICAgICAqIDxwPldoZXRoZXIgb3B0aWNhbCBpbWFnZSBzdGFiaWxpemF0aW9uIGlzCisgICAgICogZW5hYmxlZC48L3A+CisgICAgICogPHA+V2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgZGV2aWNlcy48L3A+CiAgICAgICogQHNlZSAjTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERV9PRkYKICAgICAgKiBAc2VlICNMRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFX09OCiAgICAgICovCkBAIC04NjUsMTAgKzkxNSwxNSBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5sZW5zLm9wdGljYWxTdGFiaWxpemF0aW9uTW9kZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBNb2RlIG9mIG9wZXJhdGlvbiBmb3IgdGhlIG5vaXNlIHJlZHVjdGlvbgotICAgICAqIGFsZ29yaXRobQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5Nb2RlIG9mIG9wZXJhdGlvbiBmb3IgdGhlIG5vaXNlIHJlZHVjdGlvbgorICAgICAqIGFsZ29yaXRobTwvcD4KKyAgICAgKiA8cD5Ob2lzZSBmaWx0ZXJpbmcgY29udHJvbC4gT0ZGIG1lYW5zIG5vIG5vaXNlIHJlZHVjdGlvbgorICAgICAqIHdpbGwgYmUgYXBwbGllZCBieSB0aGUgSEFMLjwvcD4KKyAgICAgKiA8cD5GQVNUL0hJR0hfUVVBTElUWSBib3RoIG1lYW4gY2FtZXJhIGRldmljZSBkZXRlcm1pbmVkIG5vaXNlIGZpbHRlcmluZworICAgICAqIHdpbGwgYmUgYXBwbGllZC4gSElHSF9RVUFMSVRZIG1vZGUgaW5kaWNhdGVzIHRoYXQgdGhlIGNhbWVyYSBkZXZpY2UKKyAgICAgKiB3aWxsIHVzZSB0aGUgaGlnaGVzdC1xdWFsaXR5IG5vaXNlIGZpbHRlcmluZyBhbGdvcml0aG1zLAorICAgICAqIGV2ZW4gaWYgaXQgc2xvd3MgZG93biBjYXB0dXJlIHJhdGUuIEZBU1QgbWVhbnMgdGhlIGNhbWVyYSBkZXZpY2Ugc2hvdWxkIG5vdAorICAgICAqIHNsb3cgZG93biBjYXB0dXJlIHJhdGUgd2hlbiBhcHBseWluZyBub2lzZSBmaWx0ZXJpbmcuPC9wPgogICAgICAqIEBzZWUgI05PSVNFX1JFRFVDVElPTl9NT0RFX09GRgogICAgICAqIEBzZWUgI05PSVNFX1JFRFVDVElPTl9NT0RFX0ZBU1QKICAgICAgKiBAc2VlICNOT0lTRV9SRURVQ1RJT05fTU9ERV9ISUdIX1FVQUxJVFkKQEAgLTg3Nyw0NCArOTMyLDMzIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLm5vaXNlUmVkdWN0aW9uLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQW4gYXBwbGljYXRpb24tc3BlY2lmaWVkIElEIGZvciB0aGUgY3VycmVudAorICAgICAqIDxwPkFuIGFwcGxpY2F0aW9uLXNwZWNpZmllZCBJRCBmb3IgdGhlIGN1cnJlbnQKICAgICAgKiByZXF1ZXN0LiBNdXN0IGJlIG1haW50YWluZWQgdW5jaGFuZ2VkIGluIG91dHB1dAotICAgICAqIGZyYW1lCi0gICAgICogPC9wPgotICAgICAqCisgICAgICogZnJhbWU8L3A+CiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxJbnRlZ2VyPiBSRVFVRVNUX0lEID0KICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQucmVxdWVzdC5pZCIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiAoeCwgeSwgd2lkdGgsIGhlaWdodCkuCi0gICAgICogPC9wPjxwPgotICAgICAqIEEgcmVjdGFuZ2xlIHdpdGggdGhlIHRvcC1sZXZlbCBjb3JuZXIgb2YgKHgseSkgYW5kIHNpemUKKyAgICAgKiA8cD4oeCwgeSwgd2lkdGgsIGhlaWdodCkuPC9wPgorICAgICAqIDxwPkEgcmVjdGFuZ2xlIHdpdGggdGhlIHRvcC1sZXZlbCBjb3JuZXIgb2YgKHgseSkgYW5kIHNpemUKICAgICAgKiAod2lkdGgsIGhlaWdodCkuIFRoZSByZWdpb24gb2YgdGhlIHNlbnNvciB0aGF0IGlzIHVzZWQgZm9yCiAgICAgICogb3V0cHV0LiBFYWNoIHN0cmVhbSBtdXN0IHVzZSB0aGlzIHJlY3RhbmdsZSB0byBwcm9kdWNlIGl0cwogICAgICAqIG91dHB1dCwgY3JvcHBpbmcgdG8gYSBzbWFsbGVyIHJlZ2lvbiBpZiBuZWNlc3NhcnkgdG8KLSAgICAgKiBtYWludGFpbiB0aGUgc3RyZWFtJ3MgYXNwZWN0IHJhdGlvLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBIQUwyLnggdXNlcyBvbmx5ICh4LCB5LCB3aWR0aCkKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogQW55IGFkZGl0aW9uYWwgcGVyLXN0cmVhbSBjcm9wcGluZyBtdXN0IGJlIGRvbmUgdG8KLSAgICAgKiBtYXhpbWl6ZSB0aGUgZmluYWwgcGl4ZWwgYXJlYSBvZiB0aGUgc3RyZWFtLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGNyb3AgcmVnaW9uIGlzIHNldCB0byBhIDQ6MyBhc3BlY3QKKyAgICAgKiBtYWludGFpbiB0aGUgc3RyZWFtJ3MgYXNwZWN0IHJhdGlvLjwvcD4KKyAgICAgKiA8cD5IQUwyLnggdXNlcyBvbmx5ICh4LCB5LCB3aWR0aCk8L3A+CisgICAgICogPHA+QW55IGFkZGl0aW9uYWwgcGVyLXN0cmVhbSBjcm9wcGluZyBtdXN0IGJlIGRvbmUgdG8KKyAgICAgKiBtYXhpbWl6ZSB0aGUgZmluYWwgcGl4ZWwgYXJlYSBvZiB0aGUgc3RyZWFtLjwvcD4KKyAgICAgKiA8cD5Gb3IgZXhhbXBsZSwgaWYgdGhlIGNyb3AgcmVnaW9uIGlzIHNldCB0byBhIDQ6MyBhc3BlY3QKICAgICAgKiByYXRpbywgdGhlbiA0OjMgc3RyZWFtcyBzaG91bGQgdXNlIHRoZSBleGFjdCBjcm9wCiAgICAgICogcmVnaW9uLiAxNjo5IHN0cmVhbXMgc2hvdWxkIGZ1cnRoZXIgY3JvcCB2ZXJ0aWNhbGx5Ci0gICAgICogKGxldHRlcmJveCkuCi0gICAgICogPC9wPjxwPgotICAgICAqIENvbnZlcnNlbHksIGlmIHRoZSBjcm9wIHJlZ2lvbiBpcyBzZXQgdG8gYSAxNjo5LCB0aGVuIDQ6MworICAgICAqIChsZXR0ZXJib3gpLjwvcD4KKyAgICAgKiA8cD5Db252ZXJzZWx5LCBpZiB0aGUgY3JvcCByZWdpb24gaXMgc2V0IHRvIGEgMTY6OSwgdGhlbiA0OjMKICAgICAgKiBvdXRwdXRzIHNob3VsZCBjcm9wIGhvcml6b250YWxseSAocGlsbGFyYm94KSwgYW5kIDE2OjkKICAgICAgKiBzdHJlYW1zIHNob3VsZCBtYXRjaCBleGFjdGx5LiBUaGVzZSBhZGRpdGlvbmFsIGNyb3BzIG11c3QKLSAgICAgKiBiZSBjZW50ZXJlZCB3aXRoaW4gdGhlIGNyb3AgcmVnaW9uLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgb3V0cHV0IHN0cmVhbXMgbXVzdCBtYWludGFpbiBzcXVhcmUgcGl4ZWxzIGF0IGFsbAorICAgICAqIGJlIGNlbnRlcmVkIHdpdGhpbiB0aGUgY3JvcCByZWdpb24uPC9wPgorICAgICAqIDxwPlRoZSBvdXRwdXQgc3RyZWFtcyBtdXN0IG1haW50YWluIHNxdWFyZSBwaXhlbHMgYXQgYWxsCiAgICAgICogdGltZXMsIG5vIG1hdHRlciB3aGF0IHRoZSByZWxhdGl2ZSBhc3BlY3QgcmF0aW9zIG9mIHRoZQogICAgICAqIGNyb3AgcmVnaW9uIGFuZCB0aGUgc3RyZWFtIGFyZS4gIE5lZ2F0aXZlIHZhbHVlcyBmb3IKICAgICAgKiBjb3JuZXIgYXJlIGFsbG93ZWQgZm9yIHJhdyBvdXRwdXQgaWYgZnVsbCBwaXhlbCBhcnJheSBpcwpAQCAtOTI1LDY3ICs5NjksNTAgQEAKICAgICAgKiBiZSBzZXQgdG8gYmUgc21hbGxlciB0aGFuIGZsb29yKCBhY3RpdmVBcnJheVNpemUud2lkdGggLwogICAgICAqIGFuZHJvaWQuc2NhbGVyLm1heERpZ2l0YWxab29tICkgYW5kIGZsb29yKAogICAgICAqIGFjdGl2ZUFycmF5U2l6ZS5oZWlnaHQgLyBhbmRyb2lkLnNjYWxlci5tYXhEaWdpdGFsWm9vbSksCi0gICAgICogcmVzcGVjdGl2ZWx5LgotICAgICAqIDwvcD4KKyAgICAgKiByZXNwZWN0aXZlbHkuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGFuZHJvaWQuZ3JhcGhpY3MuUmVjdD4gU0NBTEVSX0NST1BfUkVHSU9OID0KICAgICAgICAgICAgIG5ldyBLZXk8YW5kcm9pZC5ncmFwaGljcy5SZWN0PigiYW5kcm9pZC5zY2FsZXIuY3JvcFJlZ2lvbiIsIGFuZHJvaWQuZ3JhcGhpY3MuUmVjdC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBEdXJhdGlvbiBlYWNoIHBpeGVsIGlzIGV4cG9zZWQgdG8KLSAgICAgKiBsaWdodC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSWYgdGhlIHNlbnNvciBjYW4ndCBleHBvc2UgdGhpcyBleGFjdCBkdXJhdGlvbiwgaXQgc2hvdWxkIHNob3J0ZW4gdGhlCi0gICAgICogZHVyYXRpb24gZXhwb3NlZCB0byB0aGUgbmVhcmVzdCBwb3NzaWJsZSB2YWx1ZSAocmF0aGVyIHRoYW4gZXhwb3NlIGxvbmdlcikuCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIDEvMTAwMDAgLSAzMCBzZWMgcmFuZ2UuIE5vIGJ1bGIgbW9kZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5EdXJhdGlvbiBlYWNoIHBpeGVsIGlzIGV4cG9zZWQgdG8KKyAgICAgKiBsaWdodC48L3A+CisgICAgICogPHA+SWYgdGhlIHNlbnNvciBjYW4ndCBleHBvc2UgdGhpcyBleGFjdCBkdXJhdGlvbiwgaXQgc2hvdWxkIHNob3J0ZW4gdGhlCisgICAgICogZHVyYXRpb24gZXhwb3NlZCB0byB0aGUgbmVhcmVzdCBwb3NzaWJsZSB2YWx1ZSAocmF0aGVyIHRoYW4gZXhwb3NlIGxvbmdlcikuPC9wPgorICAgICAqIDxwPjEvMTAwMDAgLSAzMCBzZWMgcmFuZ2UuIE5vIGJ1bGIgbW9kZTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxMb25nPiBTRU5TT1JfRVhQT1NVUkVfVElNRSA9CiAgICAgICAgICAgICBuZXcgS2V5PExvbmc+KCJhbmRyb2lkLnNlbnNvci5leHBvc3VyZVRpbWUiLCBsb25nLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIER1cmF0aW9uIGZyb20gc3RhcnQgb2YgZnJhbWUgZXhwb3N1cmUgdG8KLSAgICAgKiBzdGFydCBvZiBuZXh0IGZyYW1lIGV4cG9zdXJlCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIEV4cG9zdXJlIHRpbWUgaGFzIHByaW9yaXR5LCBzbyBkdXJhdGlvbiBpcyBzZXQgdG8KLSAgICAgKiBtYXgoZHVyYXRpb24sIGV4cG9zdXJlIHRpbWUgKyBvdmVyaGVhZCkKLSAgICAgKiA8L3A+CisgICAgICogPHA+RHVyYXRpb24gZnJvbSBzdGFydCBvZiBmcmFtZSBleHBvc3VyZSB0bworICAgICAqIHN0YXJ0IG9mIG5leHQgZnJhbWUgZXhwb3N1cmU8L3A+CisgICAgICogPHA+RXhwb3N1cmUgdGltZSBoYXMgcHJpb3JpdHksIHNvIGR1cmF0aW9uIGlzIHNldCB0bworICAgICAqIG1heChkdXJhdGlvbiwgZXhwb3N1cmUgdGltZSArIG92ZXJoZWFkKTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxMb25nPiBTRU5TT1JfRlJBTUVfRFVSQVRJT04gPQogICAgICAgICAgICAgbmV3IEtleTxMb25nPigiYW5kcm9pZC5zZW5zb3IuZnJhbWVEdXJhdGlvbiIsIGxvbmcuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogR2FpbiBhcHBsaWVkIHRvIGltYWdlIGRhdGEuIE11c3QgYmUKKyAgICAgKiA8cD5HYWluIGFwcGxpZWQgdG8gaW1hZ2UgZGF0YS4gTXVzdCBiZQogICAgICAqIGltcGxlbWVudGVkIHRocm91Z2ggYW5hbG9nIGdhaW4gb25seSBpZiBzZXQgdG8gdmFsdWVzCi0gICAgICogYmVsb3cgJ21heGltdW0gYW5hbG9nIHNlbnNpdGl2aXR5Jy4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSWYgdGhlIHNlbnNvciBjYW4ndCBhcHBseSB0aGlzIGV4YWN0IGdhaW4sIGl0IHNob3VsZCBsZXNzZW4gdGhlCi0gICAgICogZ2FpbiB0byB0aGUgbmVhcmVzdCBwb3NzaWJsZSB2YWx1ZSAocmF0aGVyIHRoYW4gZ2FpbiBtb3JlKS4KLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogSVNPIDEyMjMyOjIwMDYgUkVJIG1ldGhvZAotICAgICAqIDwvcD4KKyAgICAgKiBiZWxvdyAnbWF4aW11bSBhbmFsb2cgc2Vuc2l0aXZpdHknLjwvcD4KKyAgICAgKiA8cD5JZiB0aGUgc2Vuc29yIGNhbid0IGFwcGx5IHRoaXMgZXhhY3QgZ2FpbiwgaXQgc2hvdWxkIGxlc3NlbiB0aGUKKyAgICAgKiBnYWluIHRvIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHZhbHVlIChyYXRoZXIgdGhhbiBnYWluIG1vcmUpLjwvcD4KKyAgICAgKiA8cD5JU08gMTIyMzI6MjAwNiBSRUkgbWV0aG9kPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEludGVnZXI+IFNFTlNPUl9TRU5TSVRJVklUWSA9CiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLnNlbnNvci5zZW5zaXRpdml0eSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBTdGF0ZSBvZiB0aGUgZmFjZSBkZXRlY3RvcgotICAgICAqIHVuaXQKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogV2hldGhlciBmYWNlIGRldGVjdGlvbiBpcyBlbmFibGVkLCBhbmQgd2hldGhlciBpdAorICAgICAqIDxwPlN0YXRlIG9mIHRoZSBmYWNlIGRldGVjdG9yCisgICAgICogdW5pdDwvcD4KKyAgICAgKiA8cD5XaGV0aGVyIGZhY2UgZGV0ZWN0aW9uIGlzIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0CiAgICAgICogc2hvdWxkIG91dHB1dCBqdXN0IHRoZSBiYXNpYyBmaWVsZHMgb3IgdGhlIGZ1bGwgc2V0IG9mCiAgICAgICogZmllbGRzLiBWYWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUKLSAgICAgKiBhbmRyb2lkLnN0YXRpc3RpY3MuaW5mby5hdmFpbGFibGVGYWNlRGV0ZWN0TW9kZXMuCi0gICAgICogPC9wPgorICAgICAqIHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjU1RBVElTVElDU19JTkZPX0FWQUlMQUJMRV9GQUNFX0RFVEVDVF9NT0RFUyBhbmRyb2lkLnN0YXRpc3RpY3MuaW5mby5hdmFpbGFibGVGYWNlRGV0ZWN0TW9kZXN9LjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI1NUQVRJU1RJQ1NfSU5GT19BVkFJTEFCTEVfRkFDRV9ERVRFQ1RfTU9ERVMKICAgICAgKiBAc2VlICNTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREVfT0ZGCiAgICAgICogQHNlZSAjU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX1NJTVBMRQogICAgICAqIEBzZWUgI1NUQVRJU1RJQ1NfRkFDRV9ERVRFQ1RfTU9ERV9GVUxMCkBAIC05OTQsMTUgKzEwMjEsMTMgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuc3RhdGlzdGljcy5mYWNlRGV0ZWN0TW9kZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIHRoZSBIQUwgbmVlZHMgdG8gb3V0cHV0IHRoZSBsZW5zCi0gICAgICogc2hhZGluZyBtYXAgaW4gb3V0cHV0IHJlc3VsdCBtZXRhZGF0YQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuIHNldCB0byBPTiwKLSAgICAgKiBhbmRyb2lkLnN0YXRpc3RpY3MubGVuc1NoYWRpbmdNYXAgbXVzdCBiZSBwcm92aWRlZCBpbgotICAgICAqIHRoZSBvdXRwdXQgcmVzdWx0IG1ldGRhdGEuCi0gICAgICogPC9wPgorICAgICAqIDxwPldoZXRoZXIgdGhlIEhBTCBuZWVkcyB0byBvdXRwdXQgdGhlIGxlbnMKKyAgICAgKiBzaGFkaW5nIG1hcCBpbiBvdXRwdXQgcmVzdWx0IG1ldGFkYXRhPC9wPgorICAgICAqIDxwPldoZW4gc2V0IHRvIE9OLAorICAgICAqIHtAbGluayBDYXB0dXJlUmVzdWx0I1NUQVRJU1RJQ1NfTEVOU19TSEFESU5HX01BUCBhbmRyb2lkLnN0YXRpc3RpY3MubGVuc1NoYWRpbmdNYXB9IG11c3QgYmUgcHJvdmlkZWQgaW4KKyAgICAgKiB0aGUgb3V0cHV0IHJlc3VsdCBtZXRhZGF0YS48L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjU1RBVElTVElDU19MRU5TX1NIQURJTkdfTUFQCiAgICAgICogQHNlZSAjU1RBVElTVElDU19MRU5TX1NIQURJTkdfTUFQX01PREVfT0ZGCiAgICAgICogQHNlZSAjU1RBVElTVElDU19MRU5TX1NIQURJTkdfTUFQX01PREVfT04KICAgICAgKi8KQEAgLTEwMTAsNjEgKzEwMzUsNTQgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcE1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGFibGUgbWFwcGluZyBibHVlIGlucHV0IHZhbHVlcyB0byBvdXRwdXQKLSAgICAgKiB2YWx1ZXMKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogVG9uZW1hcHBpbmcgLyBjb250cmFzdCAvIGdhbW1hIGN1cnZlIGZvciB0aGUgYmx1ZQotICAgICAqIGNoYW5uZWwsIHRvIHVzZSB3aGVuIGFuZHJvaWQudG9uZW1hcC5tb2RlIGlzIENPTlRSQVNUX0NVUlZFLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBTZWUgYW5kcm9pZC50b25lbWFwLmN1cnZlUmVkIGZvciBtb3JlIGRldGFpbHMuCi0gICAgICogPC9wPgorICAgICAqIDxwPlRhYmxlIG1hcHBpbmcgYmx1ZSBpbnB1dCB2YWx1ZXMgdG8gb3V0cHV0CisgICAgICogdmFsdWVzPC9wPgorICAgICAqIDxwPlRvbmVtYXBwaW5nIC8gY29udHJhc3QgLyBnYW1tYSBjdXJ2ZSBmb3IgdGhlIGJsdWUKKyAgICAgKiBjaGFubmVsLCB0byB1c2Ugd2hlbiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjVE9ORU1BUF9NT0RFIGFuZHJvaWQudG9uZW1hcC5tb2RlfSBpcyBDT05UUkFTVF9DVVJWRS48L3A+CisgICAgICogPHA+U2VlIHtAbGluayBDYXB0dXJlUmVxdWVzdCNUT05FTUFQX0NVUlZFX1JFRCBhbmRyb2lkLnRvbmVtYXAuY3VydmVSZWR9IGZvciBtb3JlIGRldGFpbHMuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNUT05FTUFQX0NVUlZFX1JFRAorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjVE9ORU1BUF9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gVE9ORU1BUF9DVVJWRV9CTFVFID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQudG9uZW1hcC5jdXJ2ZUJsdWUiLCBmbG9hdFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRhYmxlIG1hcHBpbmcgZ3JlZW4gaW5wdXQgdmFsdWVzIHRvIG91dHB1dAotICAgICAqIHZhbHVlcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUb25lbWFwcGluZyAvIGNvbnRyYXN0IC8gZ2FtbWEgY3VydmUgZm9yIHRoZSBncmVlbgotICAgICAqIGNoYW5uZWwsIHRvIHVzZSB3aGVuIGFuZHJvaWQudG9uZW1hcC5tb2RlIGlzIENPTlRSQVNUX0NVUlZFLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBTZWUgYW5kcm9pZC50b25lbWFwLmN1cnZlUmVkIGZvciBtb3JlIGRldGFpbHMuCi0gICAgICogPC9wPgorICAgICAqIDxwPlRhYmxlIG1hcHBpbmcgZ3JlZW4gaW5wdXQgdmFsdWVzIHRvIG91dHB1dAorICAgICAqIHZhbHVlczwvcD4KKyAgICAgKiA8cD5Ub25lbWFwcGluZyAvIGNvbnRyYXN0IC8gZ2FtbWEgY3VydmUgZm9yIHRoZSBncmVlbgorICAgICAqIGNoYW5uZWwsIHRvIHVzZSB3aGVuIHtAbGluayBDYXB0dXJlUmVxdWVzdCNUT05FTUFQX01PREUgYW5kcm9pZC50b25lbWFwLm1vZGV9IGlzIENPTlRSQVNUX0NVUlZFLjwvcD4KKyAgICAgKiA8cD5TZWUge0BsaW5rIENhcHR1cmVSZXF1ZXN0I1RPTkVNQVBfQ1VSVkVfUkVEIGFuZHJvaWQudG9uZW1hcC5jdXJ2ZVJlZH0gZm9yIG1vcmUgZGV0YWlscy48L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I1RPTkVNQVBfQ1VSVkVfUkVECisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNUT05FTUFQX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxmbG9hdFtdPiBUT05FTUFQX0NVUlZFX0dSRUVOID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQudG9uZW1hcC5jdXJ2ZUdyZWVuIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUYWJsZSBtYXBwaW5nIHJlZCBpbnB1dCB2YWx1ZXMgdG8gb3V0cHV0Ci0gICAgICogdmFsdWVzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRvbmVtYXBwaW5nIC8gY29udHJhc3QgLyBnYW1tYSBjdXJ2ZSBmb3IgdGhlIHJlZAotICAgICAqIGNoYW5uZWwsIHRvIHVzZSB3aGVuIGFuZHJvaWQudG9uZW1hcC5tb2RlIGlzIENPTlRSQVNUX0NVUlZFLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBTaW5jZSB0aGUgaW5wdXQgYW5kIG91dHB1dCByYW5nZXMgbWF5IHZhcnkgZGVwZW5kaW5nIG9uCisgICAgICogPHA+VGFibGUgbWFwcGluZyByZWQgaW5wdXQgdmFsdWVzIHRvIG91dHB1dAorICAgICAqIHZhbHVlczwvcD4KKyAgICAgKiA8cD5Ub25lbWFwcGluZyAvIGNvbnRyYXN0IC8gZ2FtbWEgY3VydmUgZm9yIHRoZSByZWQKKyAgICAgKiBjaGFubmVsLCB0byB1c2Ugd2hlbiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjVE9ORU1BUF9NT0RFIGFuZHJvaWQudG9uZW1hcC5tb2RlfSBpcyBDT05UUkFTVF9DVVJWRS48L3A+CisgICAgICogPHA+U2luY2UgdGhlIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIG1heSB2YXJ5IGRlcGVuZGluZyBvbgogICAgICAqIHRoZSBjYW1lcmEgcGlwZWxpbmUsIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHBpeGVsIHZhbHVlcwogICAgICAqIGFyZSByZXByZXNlbnRlZCBieSBub3JtYWxpemVkIGZsb2F0aW5nLXBvaW50IHZhbHVlcwotICAgICAqIGJldHdlZW4gMCBhbmQgMSwgd2l0aCAwID09IGJsYWNrIGFuZCAxID09IHdoaXRlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgY3VydmUgc2hvdWxkIGJlIGxpbmVhcmx5IGludGVycG9sYXRlZCBiZXR3ZWVuIHRoZQorICAgICAqIGJldHdlZW4gMCBhbmQgMSwgd2l0aCAwID09IGJsYWNrIGFuZCAxID09IHdoaXRlLjwvcD4KKyAgICAgKiA8cD5UaGUgY3VydmUgc2hvdWxkIGJlIGxpbmVhcmx5IGludGVycG9sYXRlZCBiZXR3ZWVuIHRoZQogICAgICAqIGRlZmluZWQgcG9pbnRzLiBUaGUgcG9pbnRzIHdpbGwgYmUgbGlzdGVkIGluIGluY3JlYXNpbmcKICAgICAgKiBvcmRlciBvZiBQX0lOLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFycmF5IGlzOiBbMC4wLCAwLjAsCi0gICAgICogMC4zLCAwLjUsIDEuMCwgMS4wXSwgdGhlbiB0aGUgaW5wdXQtPm91dHB1dCBtYXBwaW5nCi0gICAgICogZm9yIGEgZmV3IHNhbXBsZSBwb2ludHMgd291bGQgYmU6IDAgLT4gMCwgMC4xNSAtPgotICAgICAqIDAuMjUsIDAuMyAtPiAwLjUsIDAuNSAtPiAwLjY0Ci0gICAgICogPC9wPgorICAgICAqIDAuMywgMC41LCAxLjAsIDEuMF0sIHRoZW4gdGhlIGlucHV0LSZndDtvdXRwdXQgbWFwcGluZworICAgICAqIGZvciBhIGZldyBzYW1wbGUgcG9pbnRzIHdvdWxkIGJlOiAwIC0mZ3Q7IDAsIDAuMTUgLSZndDsKKyAgICAgKiAwLjI1LCAwLjMgLSZndDsgMC41LCAwLjUgLSZndDsgMC42NDwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjVE9ORU1BUF9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gVE9ORU1BUF9DVVJWRV9SRUQgPQogICAgICAgICAgICAgbmV3IEtleTxmbG9hdFtdPigiYW5kcm9pZC50b25lbWFwLmN1cnZlUmVkIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKKyAgICAgKgogICAgICAqIEBzZWUgI1RPTkVNQVBfTU9ERV9DT05UUkFTVF9DVVJWRQogICAgICAqIEBzZWUgI1RPTkVNQVBfTU9ERV9GQVNUCiAgICAgICogQHNlZSAjVE9ORU1BUF9NT0RFX0hJR0hfUVVBTElUWQpAQCAtMTA3Myw0OSArMTA5MSw1OSBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC50b25lbWFwLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhpcyBMRUQgaXMgbm9taW5hbGx5IHVzZWQgdG8gaW5kaWNhdGUgdG8gdGhlIHVzZXIKKyAgICAgKiA8cD5UaGlzIExFRCBpcyBub21pbmFsbHkgdXNlZCB0byBpbmRpY2F0ZSB0byB0aGUgdXNlcgogICAgICAqIHRoYXQgdGhlIGNhbWVyYSBpcyBwb3dlcmVkIG9uIGFuZCBtYXkgYmUgc3RyZWFtaW5nIGltYWdlcyBiYWNrIHRvIHRoZQogICAgICAqIEFwcGxpY2F0aW9uIFByb2Nlc3Nvci4gSW4gY2VydGFpbiByYXJlIGNpcmN1bXN0YW5jZXMsIHRoZSBPUyBtYXkKICAgICAgKiBkaXNhYmxlIHRoaXMgd2hlbiB2aWRlbyBpcyBwcm9jZXNzZWQgbG9jYWxseSBhbmQgbm90IHRyYW5zbWl0dGVkIHRvCi0gICAgICogYW55IHVudHJ1c3RlZCBhcHBsaWNhdGlvbnMuCi0gICAgICogPC9wPjxwPgotICAgICAqIEluIHBhcnRpY3VsYXIsIHRoZSBMRUQgKm11c3QqIGFsd2F5cyBiZSBvbiB3aGVuIHRoZSBkYXRhIGNvdWxkIGJlCi0gICAgICogdHJhbnNtaXR0ZWQgb2ZmIHRoZSBkZXZpY2UuIFRoZSBMRUQgKnNob3VsZCogYWx3YXlzIGJlIG9uIHdoZW5ldmVyCi0gICAgICogZGF0YSBpcyBzdG9yZWQgbG9jYWxseSBvbiB0aGUgZGV2aWNlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgTEVEICptYXkqIGJlIG9mZiBpZiBhIHRydXN0ZWQgYXBwbGljYXRpb24gaXMgdXNpbmcgdGhlIGRhdGEgdGhhdAotICAgICAqIGRvZXNuJ3QgdmlvbGF0ZSB0aGUgYWJvdmUgcnVsZXMuCi0gICAgICogPC9wPgotICAgICAqCisgICAgICogYW55IHVudHJ1c3RlZCBhcHBsaWNhdGlvbnMuPC9wPgorICAgICAqIDxwPkluIHBhcnRpY3VsYXIsIHRoZSBMRUQgPGVtPm11c3Q8L2VtPiBhbHdheXMgYmUgb24gd2hlbiB0aGUgZGF0YSBjb3VsZCBiZQorICAgICAqIHRyYW5zbWl0dGVkIG9mZiB0aGUgZGV2aWNlLiBUaGUgTEVEIDxlbT5zaG91bGQ8L2VtPiBhbHdheXMgYmUgb24gd2hlbmV2ZXIKKyAgICAgKiBkYXRhIGlzIHN0b3JlZCBsb2NhbGx5IG9uIHRoZSBkZXZpY2UuPC9wPgorICAgICAqIDxwPlRoZSBMRUQgPGVtPm1heTwvZW0+IGJlIG9mZiBpZiBhIHRydXN0ZWQgYXBwbGljYXRpb24gaXMgdXNpbmcgdGhlIGRhdGEgdGhhdAorICAgICAqIGRvZXNuJ3QgdmlvbGF0ZSB0aGUgYWJvdmUgcnVsZXMuPC9wPgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Qm9vbGVhbj4gTEVEX1RSQU5TTUlUID0KICAgICAgICAgICAgIG5ldyBLZXk8Qm9vbGVhbj4oImFuZHJvaWQubGVkLnRyYW5zbWl0IiwgYm9vbGVhbi5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIGJsYWNrLWxldmVsIGNvbXBlbnNhdGlvbiBpcyBsb2NrZWQKLSAgICAgKiB0byBpdHMgY3VycmVudCB2YWx1ZXMsIG9yIGlzIGZyZWUgdG8gdmFyeQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuIHNldCB0byBPTiwgdGhlIHZhbHVlcyB1c2VkIGZvciBibGFjay1sZXZlbAotICAgICAqIGNvbXBlbnNhdGlvbiBtdXN0IG5vdCBjaGFuZ2UgdW50aWwgdGhlIGxvY2sgaXMgc2V0IHRvCi0gICAgICogT0ZGCi0gICAgICogPC9wPjxwPgotICAgICAqIFNpbmNlIGNoYW5nZXMgdG8gY2VydGFpbiBjYXB0dXJlIHBhcmFtZXRlcnMgKHN1Y2ggYXMKKyAgICAgKiA8cD5XaGV0aGVyIGJsYWNrLWxldmVsIGNvbXBlbnNhdGlvbiBpcyBsb2NrZWQKKyAgICAgKiB0byBpdHMgY3VycmVudCB2YWx1ZXMsIG9yIGlzIGZyZWUgdG8gdmFyeS48L3A+CisgICAgICogPHA+V2hlbiBzZXQgdG8gT04sIHRoZSB2YWx1ZXMgdXNlZCBmb3IgYmxhY2stbGV2ZWwKKyAgICAgKiBjb21wZW5zYXRpb24gd2lsbCBub3QgY2hhbmdlIHVudGlsIHRoZSBsb2NrIGlzIHNldCB0bworICAgICAqIE9GRi48L3A+CisgICAgICogPHA+U2luY2UgY2hhbmdlcyB0byBjZXJ0YWluIGNhcHR1cmUgcGFyYW1ldGVycyAoc3VjaCBhcwogICAgICAqIGV4cG9zdXJlIHRpbWUpIG1heSByZXF1aXJlIHJlc2V0dGluZyBvZiBibGFjayBsZXZlbAotICAgICAqIGNvbXBlbnNhdGlvbiwgdGhlIEhBTCBtdXN0IHJlcG9ydCB3aGV0aGVyIHNldHRpbmcgdGhlCi0gICAgICogYmxhY2sgbGV2ZWwgbG9jayB3YXMgc3VjY2Vzc2Z1bCBpbiB0aGUgb3V0cHV0IHJlc3VsdAotICAgICAqIG1ldGFkYXRhLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgYmxhY2sgbGV2ZWwgbG9ja2luZyBtdXN0IGhhcHBlbiBhdCB0aGUgc2Vuc29yLCBhbmQgbm90IGF0IHRoZSBJU1AuCi0gICAgICogSWYgZm9yIHNvbWUgcmVhc29uIGJsYWNrIGxldmVsIGxvY2tpbmcgaXMgbm8gbG9uZ2VyIGxlZ2FsIChmb3IgZXhhbXBsZSwKLSAgICAgKiB0aGUgYW5hbG9nIGdhaW4gaGFzIGNoYW5nZWQsIHdoaWNoIGZvcmNlcyBibGFjayBsZXZlbHMgdG8gYmUKLSAgICAgKiByZWNhbGN1bGF0ZWQpLCB0aGVuIHRoZSBIQUwgaXMgZnJlZSB0byBvdmVycmlkZSB0aGlzIHJlcXVlc3QgKGFuZCBpdAotICAgICAqIG11c3QgcmVwb3J0ICdPRkYnIHdoZW4gdGhpcyBkb2VzIGhhcHBlbikgdW50aWwgdGhlIG5leHQgdGltZSBsb2NraW5nCi0gICAgICogaXMgbGVnYWwgYWdhaW4uCi0gICAgICogPC9wPgorICAgICAqIGNvbXBlbnNhdGlvbiwgdGhlIGNhbWVyYSBkZXZpY2UgbXVzdCByZXBvcnQgd2hldGhlciBzZXR0aW5nCisgICAgICogdGhlIGJsYWNrIGxldmVsIGxvY2sgd2FzIHN1Y2Nlc3NmdWwgaW4gdGhlIG91dHB1dCByZXN1bHQKKyAgICAgKiBtZXRhZGF0YS48L3A+CisgICAgICogPHA+Rm9yIGV4YW1wbGUsIGlmIGEgc2VxdWVuY2Ugb2YgcmVxdWVzdHMgaXMgYXMgZm9sbG93czo8L3A+CisgICAgICogPHVsPgorICAgICAqIDxsaT5SZXF1ZXN0IDE6IEV4cG9zdXJlID0gMTBtcywgQmxhY2sgbGV2ZWwgbG9jayA9IE9GRjwvbGk+CisgICAgICogPGxpPlJlcXVlc3QgMjogRXhwb3N1cmUgPSAxMG1zLCBCbGFjayBsZXZlbCBsb2NrID0gT048L2xpPgorICAgICAqIDxsaT5SZXF1ZXN0IDM6IEV4cG9zdXJlID0gMTBtcywgQmxhY2sgbGV2ZWwgbG9jayA9IE9OPC9saT4KKyAgICAgKiA8bGk+UmVxdWVzdCA0OiBFeHBvc3VyZSA9IDIwbXMsIEJsYWNrIGxldmVsIGxvY2sgPSBPTjwvbGk+CisgICAgICogPGxpPlJlcXVlc3QgNTogRXhwb3N1cmUgPSAyMG1zLCBCbGFjayBsZXZlbCBsb2NrID0gT048L2xpPgorICAgICAqIDxsaT5SZXF1ZXN0IDY6IEV4cG9zdXJlID0gMjBtcywgQmxhY2sgbGV2ZWwgbG9jayA9IE9OPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqIDxwPkFuZCB0aGUgZXhwb3N1cmUgY2hhbmdlIGluIFJlcXVlc3QgNCByZXF1aXJlcyB0aGUgY2FtZXJhCisgICAgICogZGV2aWNlIHRvIHJlc2V0IHRoZSBibGFjayBsZXZlbCBvZmZzZXRzLCB0aGVuIHRoZSBvdXRwdXQKKyAgICAgKiByZXN1bHQgbWV0YWRhdGEgaXMgZXhwZWN0ZWQgdG8gYmU6PC9wPgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+UmVzdWx0IDE6IEV4cG9zdXJlID0gMTBtcywgQmxhY2sgbGV2ZWwgbG9jayA9IE9GRjwvbGk+CisgICAgICogPGxpPlJlc3VsdCAyOiBFeHBvc3VyZSA9IDEwbXMsIEJsYWNrIGxldmVsIGxvY2sgPSBPTjwvbGk+CisgICAgICogPGxpPlJlc3VsdCAzOiBFeHBvc3VyZSA9IDEwbXMsIEJsYWNrIGxldmVsIGxvY2sgPSBPTjwvbGk+CisgICAgICogPGxpPlJlc3VsdCA0OiBFeHBvc3VyZSA9IDIwbXMsIEJsYWNrIGxldmVsIGxvY2sgPSBPRkY8L2xpPgorICAgICAqIDxsaT5SZXN1bHQgNTogRXhwb3N1cmUgPSAyMG1zLCBCbGFjayBsZXZlbCBsb2NrID0gT048L2xpPgorICAgICAqIDxsaT5SZXN1bHQgNjogRXhwb3N1cmUgPSAyMG1zLCBCbGFjayBsZXZlbCBsb2NrID0gT048L2xpPgorICAgICAqIDwvdWw+CisgICAgICogPHA+VGhpcyBpbmRpY2F0ZXMgdG8gdGhlIGFwcGxpY2F0aW9uIHRoYXQgb24gZnJhbWUgNCwgYmxhY2sKKyAgICAgKiBsZXZlbHMgd2VyZSByZXNldCBkdWUgdG8gZXhwb3N1cmUgdmFsdWUgY2hhbmdlcywgYW5kIHBpeGVsCisgICAgICogdmFsdWVzIG1heSBub3QgYmUgY29uc2lzdGVudCBhY3Jvc3MgY2FwdHVyZXMuPC9wPgorICAgICAqIDxwPlRoZSBjYW1lcmEgZGV2aWNlIHdpbGwgbWFpbnRhaW4gdGhlIGxvY2sgdG8gdGhlIGV4dGVudAorICAgICAqIHBvc3NpYmxlLCBvbmx5IG92ZXJyaWRpbmcgdGhlIGxvY2sgdG8gT0ZGIHdoZW4gY2hhbmdlcyB0bworICAgICAqIG90aGVyIHJlcXVlc3QgcGFyYW1ldGVycyByZXF1aXJlIGEgYmxhY2sgbGV2ZWwgcmVjYWxjdWxhdGlvbgorICAgICAqIG9yIHJlc2V0LjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxCb29sZWFuPiBCTEFDS19MRVZFTF9MT0NLID0KICAgICAgICAgICAgIG5ldyBLZXk8Qm9vbGVhbj4oImFuZHJvaWQuYmxhY2tMZXZlbC5sb2NrIiwgYm9vbGVhbi5jbGFzcyk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXN1bHQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlc3VsdC5qYXZhCmluZGV4IDUzNWI5NjMuLmU1NGZiNTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlc3VsdC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlc3VsdC5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyOwogCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLmltcGwuQ2FtZXJhTWV0YWRhdGFOYXRpdmU7CiAKIC8qKgpAQCAtMTI0LDEwNCArMTIyLDI1OCBAQAogICAgICAqIG1vZGlmeSB0aGUgY29tbWVudCBibG9ja3MgYXQgdGhlIHN0YXJ0IG9yIGVuZC4KICAgICAgKn5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfiovCiAKKwogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEEgY29sb3IgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UgdG8gdHJhbnNmb3JtCi0gICAgICogZnJvbSBzZW5zb3IgUkdCIGNvbG9yIHNwYWNlIHRvIG91dHB1dCBsaW5lYXIgc1JHQiBjb2xvciBzcGFjZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIG1hdHJpeCBpcyBlaXRoZXIgc2V0IGJ5IEhBTCB3aGVuIHRoZSByZXF1ZXN0Ci0gICAgICogYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZSBpcyBub3QgVFJBTlNGT1JNX01BVFJJWCwgb3IKKyAgICAgKiA8cD5BIGNvbG9yIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlIHRvIHRyYW5zZm9ybQorICAgICAqIGZyb20gc2Vuc29yIFJHQiBjb2xvciBzcGFjZSB0byBvdXRwdXQgbGluZWFyIHNSR0IgY29sb3Igc3BhY2U8L3A+CisgICAgICogPHA+VGhpcyBtYXRyaXggaXMgZWl0aGVyIHNldCBieSBIQUwgd2hlbiB0aGUgcmVxdWVzdAorICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZX0gaXMgbm90IFRSQU5TRk9STV9NQVRSSVgsIG9yCiAgICAgICogZGlyZWN0bHkgYnkgdGhlIGFwcGxpY2F0aW9uIGluIHRoZSByZXF1ZXN0IHdoZW4gdGhlCi0gICAgICogYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZSBpcyBUUkFOU0ZPUk1fTUFUUklYLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZSBIQUwgbWF5IHJvdW5kIHRoZSBtYXRyaXggdG8gYWNjb3VudAorICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZX0gaXMgVFJBTlNGT1JNX01BVFJJWC48L3A+CisgICAgICogPHA+SW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgSEFMIG1heSByb3VuZCB0aGUgbWF0cml4IHRvIGFjY291bnQKICAgICAgKiBmb3IgcHJlY2lzaW9uIGlzc3VlczsgdGhlIGZpbmFsIHJvdW5kZWQgbWF0cml4IHNob3VsZCBiZQotICAgICAqIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyBtYXRyaXggcmVzdWx0IG1ldGFkYXRhLgotICAgICAqIDwvcD4KKyAgICAgKiByZXBvcnRlZCBiYWNrIGluIHRoaXMgbWF0cml4IHJlc3VsdCBtZXRhZGF0YS48L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PFJhdGlvbmFsW10+IENPTE9SX0NPUlJFQ1RJT05fVFJBTlNGT1JNID0KICAgICAgICAgICAgIG5ldyBLZXk8UmF0aW9uYWxbXT4oImFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLnRyYW5zZm9ybSIsIFJhdGlvbmFsW10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogR2FpbnMgYXBwbHlpbmcgdG8gQmF5ZXIgY29sb3IgY2hhbm5lbHMgZm9yCi0gICAgICogd2hpdGUtYmFsYW5jZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgNC1jaGFubmVsIHdoaXRlLWJhbGFuY2UgZ2FpbnMgYXJlIGRlZmluZWQgaW4KKyAgICAgKiA8cD5HYWlucyBhcHBseWluZyB0byBCYXllciBjb2xvciBjaGFubmVscyBmb3IKKyAgICAgKiB3aGl0ZS1iYWxhbmNlPC9wPgorICAgICAqIDxwPlRoZSA0LWNoYW5uZWwgd2hpdGUtYmFsYW5jZSBnYWlucyBhcmUgZGVmaW5lZCBpbgogICAgICAqIHRoZSBvcmRlciBvZiBbUiBHX2V2ZW4gR19vZGQgQl0sIHdoZXJlIEdfZXZlbiBpcyB0aGUgZ2FpbgogICAgICAqIGZvciBncmVlbiBwaXhlbHMgb24gZXZlbiByb3dzIG9mIHRoZSBvdXRwdXQsIGFuZCBHX29kZAogICAgICAqIGlzIHRoZSBnYWluIGZvciBncmVlbnBpeGVscyBvbiB0aGUgb2RkIHJvd3MuIGlmIGEgSEFMCiAgICAgICogZG9lcyBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlIGdhaW4gZm9yIGV2ZW4vb2RkIGdyZWVuIGNoYW5uZWxzLAogICAgICAqIGl0IHNob3VsZCB1c2UgdGhlIEdfZXZlbiB2YWx1ZSxhbmQgd3JpdGUgR19vZGQgZXF1YWwgdG8KLSAgICAgKiBHX2V2ZW4gaW4gdGhlIG91dHB1dCByZXN1bHQgbWV0YWRhdGEuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoaXMgYXJyYXkgaXMgZWl0aGVyIHNldCBieSBIQUwgd2hlbiB0aGUgcmVxdWVzdAotICAgICAqIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGUgaXMgbm90IFRSQU5TRk9STV9NQVRSSVgsIG9yCisgICAgICogR19ldmVuIGluIHRoZSBvdXRwdXQgcmVzdWx0IG1ldGFkYXRhLjwvcD4KKyAgICAgKiA8cD5UaGlzIGFycmF5IGlzIGVpdGhlciBzZXQgYnkgSEFMIHdoZW4gdGhlIHJlcXVlc3QKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9NT0RFIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGV9IGlzIG5vdCBUUkFOU0ZPUk1fTUFUUklYLCBvcgogICAgICAqIGRpcmVjdGx5IGJ5IHRoZSBhcHBsaWNhdGlvbiBpbiB0aGUgcmVxdWVzdCB3aGVuIHRoZQotICAgICAqIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGUgaXMgVFJBTlNGT1JNX01BVFJJWC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIG91cHV0IHNob3VsZCBiZSB0aGUgZ2FpbnMgYWN0dWFsbHkgYXBwbGllZCBieSB0aGUgSEFMIHRvCi0gICAgICogdGhlIGN1cnJlbnQgZnJhbWUuCi0gICAgICogPC9wPgorICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZX0gaXMgVFJBTlNGT1JNX01BVFJJWC48L3A+CisgICAgICogPHA+VGhlIG91cHV0IHNob3VsZCBiZSB0aGUgZ2FpbnMgYWN0dWFsbHkgYXBwbGllZCBieSB0aGUgSEFMIHRvCisgICAgICogdGhlIGN1cnJlbnQgZnJhbWUuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxmbG9hdFtdPiBDT0xPUl9DT1JSRUNUSU9OX0dBSU5TID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLmdhaW5zIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgSUQgc2VudCB3aXRoIHRoZSBsYXRlc3QKLSAgICAgKiBDQU1FUkEyX1RSSUdHRVJfUFJFQ0FQVFVSRV9NRVRFUklORyBjYWxsCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE11c3QgYmUgMCBpZiBubworICAgICAqIDxwPlRoZSBJRCBzZW50IHdpdGggdGhlIGxhdGVzdAorICAgICAqIENBTUVSQTJfVFJJR0dFUl9QUkVDQVBUVVJFX01FVEVSSU5HIGNhbGw8L3A+CisgICAgICogPHA+TXVzdCBiZSAwIGlmIG5vCiAgICAgICogQ0FNRVJBMl9UUklHR0VSX1BSRUNBUFRVUkVfTUVURVJJTkcgdHJpZ2dlciByZWNlaXZlZCB5ZXQKICAgICAgKiBieSBIQUwuIEFsd2F5cyB1cGRhdGVkIGV2ZW4gaWYgQUUgYWxnb3JpdGhtIGlnbm9yZXMgdGhlCi0gICAgICogdHJpZ2dlcgotICAgICAqIDwvcD4KLSAgICAgKgorICAgICAqIHRyaWdnZXI8L3A+CiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxJbnRlZ2VyPiBDT05UUk9MX0FFX1BSRUNBUFRVUkVfSUQgPQogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLmFlUHJlY2FwdHVyZUlkIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgYXJlYXMgdG8gdXNlIGZvcgotICAgICAqIG1ldGVyaW5nCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIEVhY2ggYXJlYSBpcyBhIHJlY3RhbmdsZSBwbHVzIHdlaWdodDogeG1pbiwgeW1pbiwKKyAgICAgKiA8cD5UaGUgZGVzaXJlZCBtb2RlIGZvciB0aGUgY2FtZXJhIGRldmljZSdzCisgICAgICogYXV0by1leHBvc3VyZSByb3V0aW5lLjwvcD4KKyAgICAgKiA8cD5UaGlzIGNvbnRyb2wgaXMgb25seSBlZmZlY3RpdmUgaWYge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERSBhbmRyb2lkLmNvbnRyb2wubW9kZX0gaXMKKyAgICAgKiBBVVRPLjwvcD4KKyAgICAgKiA8cD5XaGVuIHNldCB0byBhbnkgb2YgdGhlIE9OIG1vZGVzLCB0aGUgY2FtZXJhIGRldmljZSdzCisgICAgICogYXV0by1leHBvc3VyZSByb3V0aW5lIGlzIGVuYWJsZWQsIG92ZXJyaWRpbmcgdGhlCisgICAgICogYXBwbGljYXRpb24ncyBzZWxlY3RlZCBleHBvc3VyZSB0aW1lLCBzZW5zb3Igc2Vuc2l0aXZpdHksCisgICAgICogYW5kIGZyYW1lIGR1cmF0aW9uICh7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX0VYUE9TVVJFX1RJTUUgYW5kcm9pZC5zZW5zb3IuZXhwb3N1cmVUaW1lfSwKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX1NFTlNJVElWSVRZIGFuZHJvaWQuc2Vuc29yLnNlbnNpdGl2aXR5fSwgYW5kCisgICAgICoge0BsaW5rIENhcHR1cmVSZXF1ZXN0I1NFTlNPUl9GUkFNRV9EVVJBVElPTiBhbmRyb2lkLnNlbnNvci5mcmFtZUR1cmF0aW9ufSkuIElmIG9uZSBvZiB0aGUgRkxBU0ggbW9kZXMKKyAgICAgKiBpcyBzZWxlY3RlZCwgdGhlIGNhbWVyYSBkZXZpY2UncyBmbGFzaCB1bml0IGNvbnRyb2xzIGFyZQorICAgICAqIGFsc28gb3ZlcnJpZGRlbi48L3A+CisgICAgICogPHA+VGhlIEZMQVNIIG1vZGVzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgY2FtZXJhIGRldmljZQorICAgICAqIGhhcyBhIGZsYXNoIHVuaXQgKHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjRkxBU0hfSU5GT19BVkFJTEFCTEUgYW5kcm9pZC5mbGFzaC5pbmZvLmF2YWlsYWJsZX0gaXMgPGNvZGU+dHJ1ZTwvY29kZT4pLjwvcD4KKyAgICAgKiA8cD5JZiBmbGFzaCBUT1JDSCBtb2RlIGlzIGRlc2lyZWQsIHRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8KKyAgICAgKiBPTiBvciBPRkYsIGFuZCB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjRkxBU0hfTU9ERSBhbmRyb2lkLmZsYXNoLm1vZGV9IHNldCB0byBUT1JDSC48L3A+CisgICAgICogPHA+V2hlbiBzZXQgdG8gYW55IG9mIHRoZSBPTiBtb2RlcywgdGhlIHZhbHVlcyBjaG9zZW4gYnkgdGhlCisgICAgICogY2FtZXJhIGRldmljZSBhdXRvLWV4cG9zdXJlIHJvdXRpbmUgZm9yIHRoZSBvdmVycmlkZGVuCisgICAgICogZmllbGRzIGZvciBhIGdpdmVuIGNhcHR1cmUgd2lsbCBiZSBhdmFpbGFibGUgaW4gaXRzCisgICAgICogQ2FwdHVyZVJlc3VsdC48L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERQorICAgICAqIEBzZWUgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI0ZMQVNIX0lORk9fQVZBSUxBQkxFCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNGTEFTSF9NT0RFCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfRVhQT1NVUkVfVElNRQorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX0ZSQU1FX0RVUkFUSU9OCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfU0VOU0lUSVZJVFkKKyAgICAgKiBAc2VlICNDT05UUk9MX0FFX01PREVfT0ZGCisgICAgICogQHNlZSAjQ09OVFJPTF9BRV9NT0RFX09OCisgICAgICogQHNlZSAjQ09OVFJPTF9BRV9NT0RFX09OX0FVVE9fRkxBU0gKKyAgICAgKiBAc2VlICNDT05UUk9MX0FFX01PREVfT05fQUxXQVlTX0ZMQVNICisgICAgICogQHNlZSAjQ09OVFJPTF9BRV9NT0RFX09OX0FVVE9fRkxBU0hfUkVERVlFCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8SW50ZWdlcj4gQ09OVFJPTF9BRV9NT0RFID0KKyAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5hZU1vZGUiLCBpbnQuY2xhc3MpOworCisgICAgLyoqCisgICAgICogPHA+TGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yCisgICAgICogbWV0ZXJpbmc8L3A+CisgICAgICogPHA+RWFjaCBhcmVhIGlzIGEgcmVjdGFuZ2xlIHBsdXMgd2VpZ2h0OiB4bWluLCB5bWluLAogICAgICAqIHhtYXgsIHltYXgsIHdlaWdodC4gVGhlIHJlY3RhbmdsZSBpcyBkZWZpbmVkIGluY2x1c2l2ZSBvZiB0aGUKLSAgICAgKiBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBjb29yZGluYXRlIHN5c3RlbSBpcyBiYXNlZCBvbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LAorICAgICAqIHNwZWNpZmllZCBjb29yZGluYXRlcy48L3A+CisgICAgICogPHA+VGhlIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJhc2VkIG9uIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksCiAgICAgICogd2l0aCAoMCwwKSBiZWluZyB0aGUgdG9wLWxlZnQgcGl4ZWwgaW4gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwgYW5kCi0gICAgICogKGFuZHJvaWQuc2Vuc29yLmluZm8uYWN0aXZlQXJyYXlTaXplLndpZHRoIC0gMSwKLSAgICAgKiBhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZS5oZWlnaHQgLSAxKSBiZWluZyB0aGUKKyAgICAgKiAoe0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNTRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRSBhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZX0ud2lkdGggLSAxLAorICAgICAqIHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjU0VOU09SX0lORk9fQUNUSVZFX0FSUkFZX1NJWkUgYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemV9LmhlaWdodCAtIDEpIGJlaW5nIHRoZQogICAgICAqIGJvdHRvbS1yaWdodCBwaXhlbCBpbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LiBUaGUgd2VpZ2h0Ci0gICAgICogc2hvdWxkIGJlIG5vbm5lZ2F0aXZlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiBhbGwgcmVnaW9ucyBoYXZlIDAgd2VpZ2h0LCB0aGVuIG5vIHNwZWNpZmljIG1ldGVyaW5nIGFyZWEKKyAgICAgKiBzaG91bGQgYmUgbm9ubmVnYXRpdmUuPC9wPgorICAgICAqIDxwPklmIGFsbCByZWdpb25zIGhhdmUgMCB3ZWlnaHQsIHRoZW4gbm8gc3BlY2lmaWMgbWV0ZXJpbmcgYXJlYQogICAgICAqIG5lZWRzIHRvIGJlIHVzZWQgYnkgdGhlIEhBTC4gSWYgdGhlIG1ldGVyaW5nIHJlZ2lvbiBpcwotICAgICAqIG91dHNpZGUgdGhlIGN1cnJlbnQgYW5kcm9pZC5zY2FsZXIuY3JvcFJlZ2lvbiwgdGhlIEhBTAorICAgICAqIG91dHNpZGUgdGhlIGN1cnJlbnQge0BsaW5rIENhcHR1cmVSZXF1ZXN0I1NDQUxFUl9DUk9QX1JFR0lPTiBhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9ufSwgdGhlIEhBTAogICAgICAqIHNob3VsZCBpZ25vcmUgdGhlIHNlY3Rpb25zIG91dHNpZGUgdGhlIHJlZ2lvbiBhbmQgb3V0cHV0IHRoZQotICAgICAqIHVzZWQgc2VjdGlvbnMgaW4gdGhlIGZyYW1lIG1ldGFkYXRhCi0gICAgICogPC9wPgorICAgICAqIHVzZWQgc2VjdGlvbnMgaW4gdGhlIGZyYW1lIG1ldGFkYXRhPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTQ0FMRVJfQ1JPUF9SRUdJT04KKyAgICAgKiBAc2VlIENhbWVyYUNoYXJhY3RlcmlzdGljcyNTRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGludFtdPiBDT05UUk9MX0FFX1JFR0lPTlMgPQogICAgICAgICAgICAgbmV3IEtleTxpbnRbXT4oImFuZHJvaWQuY29udHJvbC5hZVJlZ2lvbnMiLCBpbnRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBDdXJyZW50IHN0YXRlIG9mIEFFIGFsZ29yaXRobQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuZXZlciB0aGUgQUUgYWxnb3JpdGhtIHN0YXRlIGNoYW5nZXMsIGEKLSAgICAgKiBNU0dfQVVUT0VYUE9TVVJFIG5vdGlmaWNhdGlvbiBtdXN0IGJlIHNlbmQgaWYgYQotICAgICAqIG5vdGlmaWNhdGlvbiBjYWxsYmFjayBpcyByZWdpc3RlcmVkLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5DdXJyZW50IHN0YXRlIG9mIEFFIGFsZ29yaXRobTwvcD4KKyAgICAgKiA8cD5Td2l0Y2hpbmcgYmV0d2VlbiBvciBlbmFibGluZyBBRSBtb2RlcyAoe0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTU9ERSBhbmRyb2lkLmNvbnRyb2wuYWVNb2RlfSkgYWx3YXlzCisgICAgICogcmVzZXRzIHRoZSBBRSBzdGF0ZSB0byBJTkFDVElWRS4gU2ltaWxhcmx5LCBzd2l0Y2hpbmcgYmV0d2VlbiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFIGFuZHJvaWQuY29udHJvbC5tb2RlfSwKKyAgICAgKiBvciB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9TQ0VORV9NT0RFIGFuZHJvaWQuY29udHJvbC5zY2VuZU1vZGV9IGlmIDxjb2RlPntAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX01PREUgYW5kcm9pZC5jb250cm9sLm1vZGV9ID09IFVTRV9TQ0VORV9NT0RFPC9jb2RlPiByZXNldHMgYWxsCisgICAgICogdGhlIGFsZ29yaXRobSBzdGF0ZXMgdG8gSU5BQ1RJVkUuPC9wPgorICAgICAqIDxwPlRoZSBjYW1lcmEgZGV2aWNlIGNhbiBkbyBzZXZlcmFsIHN0YXRlIHRyYW5zaXRpb25zIGJldHdlZW4gdHdvIHJlc3VsdHMsIGlmIGl0IGlzCisgICAgICogYWxsb3dlZCBieSB0aGUgc3RhdGUgdHJhbnNpdGlvbiB0YWJsZS4gRm9yIGV4YW1wbGU6IElOQUNUSVZFIG1heSBuZXZlciBhY3R1YWxseSBiZQorICAgICAqIHNlZW4gaW4gYSByZXN1bHQuPC9wPgorICAgICAqIDxwPlRoZSBzdGF0ZSBpbiB0aGUgcmVzdWx0IGlzIHRoZSBzdGF0ZSBmb3IgdGhpcyBpbWFnZSAoaW4gc3luYyB3aXRoIHRoaXMgaW1hZ2UpOiBpZgorICAgICAqIEFFIHN0YXRlIGJlY29tZXMgQ09OVkVSR0VELCB0aGVuIHRoZSBpbWFnZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc3VsdCBzaG91bGQKKyAgICAgKiBiZSBnb29kIHRvIHVzZS48L3A+CisgICAgICogPHA+QmVsb3cgYXJlIHN0YXRlIHRyYW5zaXRpb24gdGFibGVzIGZvciBkaWZmZXJlbnQgQUUgbW9kZXMuPC9wPgorICAgICAqIDx0YWJsZT4KKyAgICAgKiA8dGhlYWQ+CisgICAgICogPHRyPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5TdGF0ZTwvdGg+CisgICAgICogPHRoIGFsaWduPSJjZW50ZXIiPlRyYW5zaXRpb24gQ2F1c2U8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5OZXcgU3RhdGU8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5Ob3RlczwvdGg+CisgICAgICogPC90cj4KKyAgICAgKiA8L3RoZWFkPgorICAgICAqIDx0Ym9keT4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPklOQUNUSVZFPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+PC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SU5BQ1RJVkU8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DYW1lcmEgZGV2aWNlIGF1dG8gZXhwb3N1cmUgYWxnb3JpdGhtIGlzIGRpc2FibGVkPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDwvdGJvZHk+CisgICAgICogPC90YWJsZT4KKyAgICAgKiA8cD5XaGVuIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX01PREUgYW5kcm9pZC5jb250cm9sLmFlTW9kZX0gaXMgQUVfTU9ERV9PTl8qOjwvcD4KKyAgICAgKiA8dGFibGU+CisgICAgICogPHRoZWFkPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGggYWxpZ249ImNlbnRlciI+U3RhdGU8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5UcmFuc2l0aW9uIENhdXNlPC90aD4KKyAgICAgKiA8dGggYWxpZ249ImNlbnRlciI+TmV3IFN0YXRlPC90aD4KKyAgICAgKiA8dGggYWxpZ249ImNlbnRlciI+Tm90ZXM8L3RoPgorICAgICAqIDwvdHI+CisgICAgICogPC90aGVhZD4KKyAgICAgKiA8dGJvZHk+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5JTkFDVElWRTwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkNhbWVyYSBkZXZpY2UgaW5pdGlhdGVzIEFFIHNjYW48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5TRUFSQ0hJTkc8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5WYWx1ZXMgY2hhbmdpbmc8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5JTkFDVElWRTwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPntAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX0xPQ0sgYW5kcm9pZC5jb250cm9sLmFlTG9ja30gaXMgT048L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5WYWx1ZXMgbG9ja2VkPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+U0VBUkNISU5HPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Q2FtZXJhIGRldmljZSBmaW5pc2hlcyBBRSBzY2FuPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Q09OVkVSR0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+R29vZCB2YWx1ZXMsIG5vdCBjaGFuZ2luZzwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlNFQVJDSElORzwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkNhbWVyYSBkZXZpY2UgZmluaXNoZXMgQUUgc2NhbjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkZMQVNIX1JFUVVJUkVEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Q29udmVyZ2VkIGJ1dCB0b28gZGFyayB3L28gZmxhc2g8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5TRUFSQ0hJTkc8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj57QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9MT0NLIGFuZHJvaWQuY29udHJvbC5hZUxvY2t9IGlzIE9OPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+TE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+VmFsdWVzIGxvY2tlZDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkNPTlZFUkdFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkNhbWVyYSBkZXZpY2UgaW5pdGlhdGVzIEFFIHNjYW48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5TRUFSQ0hJTkc8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5WYWx1ZXMgY2hhbmdpbmc8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DT05WRVJHRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj57QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9MT0NLIGFuZHJvaWQuY29udHJvbC5hZUxvY2t9IGlzIE9OPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+TE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+VmFsdWVzIGxvY2tlZDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkZMQVNIX1JFUVVJUkVEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Q2FtZXJhIGRldmljZSBpbml0aWF0ZXMgQUUgc2NhbjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlNFQVJDSElORzwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlZhbHVlcyBjaGFuZ2luZzwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkZMQVNIX1JFUVVJUkVEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+e0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTE9DSyBhbmRyb2lkLmNvbnRyb2wuYWVMb2NrfSBpcyBPTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkxPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlZhbHVlcyBsb2NrZWQ8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj57QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9MT0NLIGFuZHJvaWQuY29udHJvbC5hZUxvY2t9IGlzIE9GRjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlNFQVJDSElORzwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlZhbHVlcyBub3QgZ29vZCBhZnRlciB1bmxvY2s8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj57QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9MT0NLIGFuZHJvaWQuY29udHJvbC5hZUxvY2t9IGlzIE9GRjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkNPTlZFUkdFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlZhbHVlcyBnb29kIGFmdGVyIHVubG9jazwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkxPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPntAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX0xPQ0sgYW5kcm9pZC5jb250cm9sLmFlTG9ja30gaXMgT0ZGPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+RkxBU0hfUkVRVUlSRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5FeHBvc3VyZSBnb29kLCBidXQgdG9vIGRhcms8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5QUkVDQVBUVVJFPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+U2VxdWVuY2UgZG9uZS4ge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTE9DSyBhbmRyb2lkLmNvbnRyb2wuYWVMb2NrfSBpcyBPRkY8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DT05WRVJHRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5SZWFkeSBmb3IgaGlnaC1xdWFsaXR5IGNhcHR1cmU8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5QUkVDQVBUVVJFPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+U2VxdWVuY2UgZG9uZS4ge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTE9DSyBhbmRyb2lkLmNvbnRyb2wuYWVMb2NrfSBpcyBPTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkxPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlJlYWR5IGZvciBoaWdoLXF1YWxpdHkgY2FwdHVyZTwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFueSBzdGF0ZTwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPntAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX1BSRUNBUFRVUkVfVFJJR0dFUiBhbmRyb2lkLmNvbnRyb2wuYWVQcmVjYXB0dXJlVHJpZ2dlcn0gaXMgU1RBUlQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5QUkVDQVBUVVJFPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+U3RhcnQgQUUgcHJlY2FwdHVyZSBtZXRlcmluZyBzZXF1ZW5jZTwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8L3Rib2R5PgorICAgICAqIDwvdGFibGU+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTE9DSworICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9NT0RFCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX1BSRUNBUFRVUkVfVFJJR0dFUgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX1NDRU5FX01PREUKICAgICAgKiBAc2VlICNDT05UUk9MX0FFX1NUQVRFX0lOQUNUSVZFCiAgICAgICogQHNlZSAjQ09OVFJPTF9BRV9TVEFURV9TRUFSQ0hJTkcKICAgICAgKiBAc2VlICNDT05UUk9MX0FFX1NUQVRFX0NPTlZFUkdFRApAQCAtMjMzLDEwICszODUsMTQgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5hZVN0YXRlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgQUYgaXMgY3VycmVudGx5IGVuYWJsZWQsIGFuZCB3aGF0Ci0gICAgICogbW9kZSBpdCBpcyBzZXQgdG8KLSAgICAgKiA8L3A+CisgICAgICogPHA+V2hldGhlciBBRiBpcyBjdXJyZW50bHkgZW5hYmxlZCwgYW5kIHdoYXQKKyAgICAgKiBtb2RlIGl0IGlzIHNldCB0bzwvcD4KKyAgICAgKiA8cD5Pbmx5IGVmZmVjdGl2ZSBpZiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFIGFuZHJvaWQuY29udHJvbC5tb2RlfSA9IEFVVE8uPC9wPgorICAgICAqIDxwPklmIHRoZSBsZW5zIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGNhbWVyYSBkZXZpY2UgYXV0by1mb2N1cyBhbGdvcml0aG0sCisgICAgICogdGhlIGNhbWVyYSBkZXZpY2Ugd2lsbCByZXBvcnQgdGhlIGN1cnJlbnQgQUYgc3RhdHVzIGluIGFuZHJvaWQuY29udHJvbC5hZlN0YXRlCisgICAgICogaW4gcmVzdWx0IG1ldGFkYXRhLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFCiAgICAgICogQHNlZSAjQ09OVFJPTF9BRl9NT0RFX09GRgogICAgICAqIEBzZWUgI0NPTlRST0xfQUZfTU9ERV9BVVRPCiAgICAgICogQHNlZSAjQ09OVFJPTF9BRl9NT0RFX01BQ1JPCkBAIC0yNDgsNDEgKzQwNCwzMzggQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5hZk1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yIGZvY3VzCi0gICAgICogZXN0aW1hdGlvbgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBFYWNoIGFyZWEgaXMgYSByZWN0YW5nbGUgcGx1cyB3ZWlnaHQ6IHhtaW4sIHltaW4sCisgICAgICogPHA+TGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yIGZvY3VzCisgICAgICogZXN0aW1hdGlvbjwvcD4KKyAgICAgKiA8cD5FYWNoIGFyZWEgaXMgYSByZWN0YW5nbGUgcGx1cyB3ZWlnaHQ6IHhtaW4sIHltaW4sCiAgICAgICogeG1heCwgeW1heCwgd2VpZ2h0LiBUaGUgcmVjdGFuZ2xlIGlzIGRlZmluZWQgaW5jbHVzaXZlIG9mIHRoZQotICAgICAqIHNwZWNpZmllZCBjb29yZGluYXRlcy4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJhc2VkIG9uIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksCisgICAgICogc3BlY2lmaWVkIGNvb3JkaW5hdGVzLjwvcD4KKyAgICAgKiA8cD5UaGUgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYmFzZWQgb24gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwKICAgICAgKiB3aXRoICgwLDApIGJlaW5nIHRoZSB0b3AtbGVmdCBwaXhlbCBpbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LCBhbmQKLSAgICAgKiAoYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemUud2lkdGggLSAxLAotICAgICAqIGFuZHJvaWQuc2Vuc29yLmluZm8uYWN0aXZlQXJyYXlTaXplLmhlaWdodCAtIDEpIGJlaW5nIHRoZQorICAgICAqICh7QGxpbmsgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI1NFTlNPUl9JTkZPX0FDVElWRV9BUlJBWV9TSVpFIGFuZHJvaWQuc2Vuc29yLmluZm8uYWN0aXZlQXJyYXlTaXplfS53aWR0aCAtIDEsCisgICAgICoge0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNTRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRSBhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZX0uaGVpZ2h0IC0gMSkgYmVpbmcgdGhlCiAgICAgICogYm90dG9tLXJpZ2h0IHBpeGVsIGluIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXkuIFRoZSB3ZWlnaHQKLSAgICAgKiBzaG91bGQgYmUgbm9ubmVnYXRpdmUuCi0gICAgICogPC9wPjxwPgotICAgICAqIElmIGFsbCByZWdpb25zIGhhdmUgMCB3ZWlnaHQsIHRoZW4gbm8gc3BlY2lmaWMgZm9jdXMgYXJlYQorICAgICAqIHNob3VsZCBiZSBub25uZWdhdGl2ZS48L3A+CisgICAgICogPHA+SWYgYWxsIHJlZ2lvbnMgaGF2ZSAwIHdlaWdodCwgdGhlbiBubyBzcGVjaWZpYyBmb2N1cyBhcmVhCiAgICAgICogbmVlZHMgdG8gYmUgdXNlZCBieSB0aGUgSEFMLiBJZiB0aGUgZm9jdXNpbmcgcmVnaW9uIGlzCi0gICAgICogb3V0c2lkZSB0aGUgY3VycmVudCBhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9uLCB0aGUgSEFMCisgICAgICogb3V0c2lkZSB0aGUgY3VycmVudCB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjU0NBTEVSX0NST1BfUkVHSU9OIGFuZHJvaWQuc2NhbGVyLmNyb3BSZWdpb259LCB0aGUgSEFMCiAgICAgICogc2hvdWxkIGlnbm9yZSB0aGUgc2VjdGlvbnMgb3V0c2lkZSB0aGUgcmVnaW9uIGFuZCBvdXRwdXQgdGhlCi0gICAgICogdXNlZCBzZWN0aW9ucyBpbiB0aGUgZnJhbWUgbWV0YWRhdGEKLSAgICAgKiA8L3A+CisgICAgICogdXNlZCBzZWN0aW9ucyBpbiB0aGUgZnJhbWUgbWV0YWRhdGE8L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I1NDQUxFUl9DUk9QX1JFR0lPTgorICAgICAqIEBzZWUgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI1NFTlNPUl9JTkZPX0FDVElWRV9BUlJBWV9TSVpFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8aW50W10+IENPTlRST0xfQUZfUkVHSU9OUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGludFtdPigiYW5kcm9pZC5jb250cm9sLmFmUmVnaW9ucyIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEN1cnJlbnQgc3RhdGUgb2YgQUYgYWxnb3JpdGhtCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFdoZW5ldmVyIHRoZSBBRiBhbGdvcml0aG0gc3RhdGUgY2hhbmdlcywgYQotICAgICAqIE1TR19BVVRPRk9DVVMgbm90aWZpY2F0aW9uIG11c3QgYmUgc2VuZCBpZiBhIG5vdGlmaWNhdGlvbgotICAgICAqIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQuCi0gICAgICogPC9wPgorICAgICAqIDxwPkN1cnJlbnQgc3RhdGUgb2YgQUYgYWxnb3JpdGhtPC9wPgorICAgICAqIDxwPlN3aXRjaGluZyBiZXR3ZWVuIG9yIGVuYWJsaW5nIEFGIG1vZGVzICh7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRl9NT0RFIGFuZHJvaWQuY29udHJvbC5hZk1vZGV9KSBhbHdheXMKKyAgICAgKiByZXNldHMgdGhlIEFGIHN0YXRlIHRvIElOQUNUSVZFLiBTaW1pbGFybHksIHN3aXRjaGluZyBiZXR3ZWVuIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX01PREUgYW5kcm9pZC5jb250cm9sLm1vZGV9LAorICAgICAqIG9yIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX1NDRU5FX01PREUgYW5kcm9pZC5jb250cm9sLnNjZW5lTW9kZX0gaWYgPGNvZGU+e0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERSBhbmRyb2lkLmNvbnRyb2wubW9kZX0gPT0gVVNFX1NDRU5FX01PREU8L2NvZGU+IHJlc2V0cyBhbGwKKyAgICAgKiB0aGUgYWxnb3JpdGhtIHN0YXRlcyB0byBJTkFDVElWRS48L3A+CisgICAgICogPHA+VGhlIGNhbWVyYSBkZXZpY2UgY2FuIGRvIHNldmVyYWwgc3RhdGUgdHJhbnNpdGlvbnMgYmV0d2VlbiB0d28gcmVzdWx0cywgaWYgaXQgaXMKKyAgICAgKiBhbGxvd2VkIGJ5IHRoZSBzdGF0ZSB0cmFuc2l0aW9uIHRhYmxlLiBGb3IgZXhhbXBsZTogSU5BQ1RJVkUgbWF5IG5ldmVyIGFjdHVhbGx5IGJlCisgICAgICogc2VlbiBpbiBhIHJlc3VsdC48L3A+CisgICAgICogPHA+VGhlIHN0YXRlIGluIHRoZSByZXN1bHQgaXMgdGhlIHN0YXRlIGZvciB0aGlzIGltYWdlIChpbiBzeW5jIHdpdGggdGhpcyBpbWFnZSk6IGlmCisgICAgICogQUYgc3RhdGUgYmVjb21lcyBGT0NVU0VELCB0aGVuIHRoZSBpbWFnZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc3VsdCBzaG91bGQKKyAgICAgKiBiZSBzaGFycC48L3A+CisgICAgICogPHA+QmVsb3cgYXJlIHN0YXRlIHRyYW5zaXRpb24gdGFibGVzIGZvciBkaWZmZXJlbnQgQUYgbW9kZXMuPC9wPgorICAgICAqIDxwPldoZW4ge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUZfTU9ERSBhbmRyb2lkLmNvbnRyb2wuYWZNb2RlfSBpcyBBRl9NT0RFX09GRiBvciBBRl9NT0RFX0VET0Y6PC9wPgorICAgICAqIDx0YWJsZT4KKyAgICAgKiA8dGhlYWQ+CisgICAgICogPHRyPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5TdGF0ZTwvdGg+CisgICAgICogPHRoIGFsaWduPSJjZW50ZXIiPlRyYW5zaXRpb24gQ2F1c2U8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5OZXcgU3RhdGU8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5Ob3RlczwvdGg+CisgICAgICogPC90cj4KKyAgICAgKiA8L3RoZWFkPgorICAgICAqIDx0Ym9keT4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPklOQUNUSVZFPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+PC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SU5BQ1RJVkU8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5OZXZlciBjaGFuZ2VzPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDwvdGJvZHk+CisgICAgICogPC90YWJsZT4KKyAgICAgKiA8cD5XaGVuIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX01PREUgYW5kcm9pZC5jb250cm9sLmFmTW9kZX0gaXMgQUZfTU9ERV9BVVRPIG9yIEFGX01PREVfTUFDUk86PC9wPgorICAgICAqIDx0YWJsZT4KKyAgICAgKiA8dGhlYWQ+CisgICAgICogPHRyPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5TdGF0ZTwvdGg+CisgICAgICogPHRoIGFsaWduPSJjZW50ZXIiPlRyYW5zaXRpb24gQ2F1c2U8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5OZXcgU3RhdGU8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5Ob3RlczwvdGg+CisgICAgICogPC90cj4KKyAgICAgKiA8L3RoZWFkPgorICAgICAqIDx0Ym9keT4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPklOQUNUSVZFPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUZfVFJJR0dFUjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFDVElWRV9TQ0FOPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+U3RhcnQgQUYgc3dlZXAsIExlbnMgbm93IG1vdmluZzwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFDVElWRV9TQ0FOPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUYgc3dlZXAgZG9uZTwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Rm9jdXNlZCwgTGVucyBub3cgbG9ja2VkPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUNUSVZFX1NDQU48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5BRiBzd2VlcCBkb25lPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Tk9UX0ZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Tm90IGZvY3VzZWQsIExlbnMgbm93IGxvY2tlZDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFDVElWRV9TQ0FOPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUZfQ0FOQ0VMPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SU5BQ1RJVkU8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DYW5jZWwvcmVzZXQgQUYsIExlbnMgbm93IGxvY2tlZDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUZfQ0FOQ0VMPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SU5BQ1RJVkU8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DYW5jZWwvcmVzZXQgQUY8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5GT0NVU0VEX0xPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFGX1RSSUdHRVI8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5BQ1RJVkVfU0NBTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlN0YXJ0IG5ldyBzd2VlcCwgTGVucyBub3cgbW92aW5nPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Tk9UX0ZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUZfQ0FOQ0VMPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SU5BQ1RJVkU8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DYW5jZWwvcmVzZXQgQUY8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5OT1RfRk9DVVNFRF9MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5BRl9UUklHR0VSPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUNUSVZFX1NDQU48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5TdGFydCBuZXcgc3dlZXAsIExlbnMgbm93IG1vdmluZzwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFueSBzdGF0ZTwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPk1vZGUgY2hhbmdlPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SU5BQ1RJVkU8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj48L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPC90Ym9keT4KKyAgICAgKiA8L3RhYmxlPgorICAgICAqIDxwPldoZW4ge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUZfTU9ERSBhbmRyb2lkLmNvbnRyb2wuYWZNb2RlfSBpcyBBRl9NT0RFX0NPTlRJTlVPVVNfVklERU86PC9wPgorICAgICAqIDx0YWJsZT4KKyAgICAgKiA8dGhlYWQ+CisgICAgICogPHRyPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5TdGF0ZTwvdGg+CisgICAgICogPHRoIGFsaWduPSJjZW50ZXIiPlRyYW5zaXRpb24gQ2F1c2U8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5OZXcgU3RhdGU8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5Ob3RlczwvdGg+CisgICAgICogPC90cj4KKyAgICAgKiA8L3RoZWFkPgorICAgICAqIDx0Ym9keT4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPklOQUNUSVZFPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Q2FtZXJhIGRldmljZSBpbml0aWF0ZXMgbmV3IHNjYW48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5QQVNTSVZFX1NDQU48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5TdGFydCBBRiBzY2FuLCBMZW5zIG5vdyBtb3Zpbmc8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5JTkFDVElWRTwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFGX1RSSUdHRVI8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5OT1RfRk9DVVNFRF9MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5BRiBzdGF0ZSBxdWVyeSwgTGVucyBub3cgbG9ja2VkPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UEFTU0lWRV9TQ0FOPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Q2FtZXJhIGRldmljZSBjb21wbGV0ZXMgY3VycmVudCBzY2FuPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UEFTU0lWRV9GT0NVU0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+RW5kIEFGIHNjYW4sIExlbnMgbm93IGxvY2tlZDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlBBU1NJVkVfU0NBTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkNhbWVyYSBkZXZpY2UgZmFpbHMgY3VycmVudCBzY2FuPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UEFTU0lWRV9VTkZPQ1VTRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5FbmQgQUYgc2NhbiwgTGVucyBub3cgbG9ja2VkPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UEFTU0lWRV9TQ0FOPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUZfVFJJR0dFUjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SW1tZWRpYXRlIHRyYW5zLiBJZiBmb2N1cyBpcyBnb29kLCBMZW5zIG5vdyBsb2NrZWQ8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5QQVNTSVZFX1NDQU48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5BRl9UUklHR0VSPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Tk9UX0ZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SW1tZWRpYXRlIHRyYW5zLiBpZiBmb2N1cyBpcyBiYWQsIExlbnMgbm93IGxvY2tlZDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlBBU1NJVkVfU0NBTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFGX0NBTkNFTDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPklOQUNUSVZFPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UmVzZXQgbGVucyBwb3NpdGlvbiwgTGVucyBub3cgbG9ja2VkPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UEFTU0lWRV9GT0NVU0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Q2FtZXJhIGRldmljZSBpbml0aWF0ZXMgbmV3IHNjYW48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5QQVNTSVZFX1NDQU48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5TdGFydCBBRiBzY2FuLCBMZW5zIG5vdyBtb3Zpbmc8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5QQVNTSVZFX1VORk9DVVNFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkNhbWVyYSBkZXZpY2UgaW5pdGlhdGVzIG5ldyBzY2FuPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UEFTU0lWRV9TQ0FOPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+U3RhcnQgQUYgc2NhbiwgTGVucyBub3cgbW92aW5nPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UEFTU0lWRV9GT0NVU0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUZfVFJJR0dFUjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SW1tZWRpYXRlIHRyYW5zLiBMZW5zIG5vdyBsb2NrZWQ8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5QQVNTSVZFX1VORk9DVVNFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFGX1RSSUdHRVI8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5OT1RfRk9DVVNFRF9MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5JbW1lZGlhdGUgdHJhbnMuIExlbnMgbm93IGxvY2tlZDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUZfVFJJR0dFUjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Tm8gZWZmZWN0PC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Rk9DVVNFRF9MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5BRl9DQU5DRUw8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5JTkFDVElWRTwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlJlc3RhcnQgQUYgc2NhbjwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPk5PVF9GT0NVU0VEX0xPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFGX1RSSUdHRVI8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5OT1RfRk9DVVNFRF9MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5ObyBlZmZlY3Q8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5OT1RfRk9DVVNFRF9MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5BRl9DQU5DRUw8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5JTkFDVElWRTwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlJlc3RhcnQgQUYgc2NhbjwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8L3Rib2R5PgorICAgICAqIDwvdGFibGU+CisgICAgICogPHA+V2hlbiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRl9NT0RFIGFuZHJvaWQuY29udHJvbC5hZk1vZGV9IGlzIEFGX01PREVfQ09OVElOVU9VU19QSUNUVVJFOjwvcD4KKyAgICAgKiA8dGFibGU+CisgICAgICogPHRoZWFkPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGggYWxpZ249ImNlbnRlciI+U3RhdGU8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5UcmFuc2l0aW9uIENhdXNlPC90aD4KKyAgICAgKiA8dGggYWxpZ249ImNlbnRlciI+TmV3IFN0YXRlPC90aD4KKyAgICAgKiA8dGggYWxpZ249ImNlbnRlciI+Tm90ZXM8L3RoPgorICAgICAqIDwvdHI+CisgICAgICogPC90aGVhZD4KKyAgICAgKiA8dGJvZHk+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5JTkFDVElWRTwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkNhbWVyYSBkZXZpY2UgaW5pdGlhdGVzIG5ldyBzY2FuPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UEFTU0lWRV9TQ0FOPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+U3RhcnQgQUYgc2NhbiwgTGVucyBub3cgbW92aW5nPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SU5BQ1RJVkU8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5BRl9UUklHR0VSPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Tk9UX0ZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUYgc3RhdGUgcXVlcnksIExlbnMgbm93IGxvY2tlZDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlBBU1NJVkVfU0NBTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkNhbWVyYSBkZXZpY2UgY29tcGxldGVzIGN1cnJlbnQgc2NhbjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlBBU1NJVkVfRk9DVVNFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkVuZCBBRiBzY2FuLCBMZW5zIG5vdyBsb2NrZWQ8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5QQVNTSVZFX1NDQU48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DYW1lcmEgZGV2aWNlIGZhaWxzIGN1cnJlbnQgc2NhbjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlBBU1NJVkVfVU5GT0NVU0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+RW5kIEFGIHNjYW4sIExlbnMgbm93IGxvY2tlZDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlBBU1NJVkVfU0NBTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFGX1RSSUdHRVI8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5GT0NVU0VEX0xPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkV2ZW50dWFsIHRyYW5zLiBvbmNlIGZvY3VzIGdvb2QsIExlbnMgbm93IGxvY2tlZDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlBBU1NJVkVfU0NBTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFGX1RSSUdHRVI8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5OT1RfRk9DVVNFRF9MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5FdmVudHVhbCB0cmFucy4gaWYgY2Fubm90IGZvY3VzLCBMZW5zIG5vdyBsb2NrZWQ8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5QQVNTSVZFX1NDQU48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5BRl9DQU5DRUw8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5JTkFDVElWRTwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlJlc2V0IGxlbnMgcG9zaXRpb24sIExlbnMgbm93IGxvY2tlZDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlBBU1NJVkVfRk9DVVNFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkNhbWVyYSBkZXZpY2UgaW5pdGlhdGVzIG5ldyBzY2FuPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UEFTU0lWRV9TQ0FOPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+U3RhcnQgQUYgc2NhbiwgTGVucyBub3cgbW92aW5nPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UEFTU0lWRV9VTkZPQ1VTRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DYW1lcmEgZGV2aWNlIGluaXRpYXRlcyBuZXcgc2NhbjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlBBU1NJVkVfU0NBTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlN0YXJ0IEFGIHNjYW4sIExlbnMgbm93IG1vdmluZzwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlBBU1NJVkVfRk9DVVNFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFGX1RSSUdHRVI8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5GT0NVU0VEX0xPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkltbWVkaWF0ZSB0cmFucy4gTGVucyBub3cgbG9ja2VkPC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+UEFTU0lWRV9VTkZPQ1VTRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5BRl9UUklHR0VSPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Tk9UX0ZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SW1tZWRpYXRlIHRyYW5zLiBMZW5zIG5vdyBsb2NrZWQ8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5GT0NVU0VEX0xPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkFGX1RSSUdHRVI8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5GT0NVU0VEX0xPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPk5vIGVmZmVjdDwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUZfQ0FOQ0VMPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SU5BQ1RJVkU8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5SZXN0YXJ0IEFGIHNjYW48L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5OT1RfRk9DVVNFRF9MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5BRl9UUklHR0VSPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Tk9UX0ZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Tm8gZWZmZWN0PC90ZD4KKyAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Tk9UX0ZPQ1VTRURfTE9DS0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+QUZfQ0FOQ0VMPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SU5BQ1RJVkU8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5SZXN0YXJ0IEFGIHNjYW48L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPC90Ym9keT4KKyAgICAgKiA8L3RhYmxlPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX01PREUKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERQorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9TQ0VORV9NT0RFCiAgICAgICogQHNlZSAjQ09OVFJPTF9BRl9TVEFURV9JTkFDVElWRQogICAgICAqIEBzZWUgI0NPTlRST0xfQUZfU1RBVEVfUEFTU0lWRV9TQ0FOCiAgICAgICogQHNlZSAjQ09OVFJPTF9BRl9TVEFURV9QQVNTSVZFX0ZPQ1VTRUQKQEAgLTI5NSwzMCArNzQ4LDM3IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuYWZTdGF0ZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgSUQgc2VudCB3aXRoIHRoZSBsYXRlc3QKLSAgICAgKiBDQU1FUkEyX1RSSUdHRVJfQVVUT0ZPQ1VTIGNhbGwKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogTXVzdCBiZSAwIGlmIG5vIENBTUVSQTJfVFJJR0dFUl9BVVRPRk9DVVMgdHJpZ2dlcgorICAgICAqIDxwPlRoZSBJRCBzZW50IHdpdGggdGhlIGxhdGVzdAorICAgICAqIENBTUVSQTJfVFJJR0dFUl9BVVRPRk9DVVMgY2FsbDwvcD4KKyAgICAgKiA8cD5NdXN0IGJlIDAgaWYgbm8gQ0FNRVJBMl9UUklHR0VSX0FVVE9GT0NVUyB0cmlnZ2VyCiAgICAgICogcmVjZWl2ZWQgeWV0IGJ5IEhBTC4gQWx3YXlzIHVwZGF0ZWQgZXZlbiBpZiBBRiBhbGdvcml0aG0KLSAgICAgKiBpZ25vcmVzIHRoZSB0cmlnZ2VyCi0gICAgICogPC9wPgotICAgICAqCisgICAgICogaWdub3JlcyB0aGUgdHJpZ2dlcjwvcD4KICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEludGVnZXI+IENPTlRST0xfQUZfVFJJR0dFUl9JRCA9CiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuYWZUcmlnZ2VySWQiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciBBV0IgaXMgY3VycmVudGx5IHNldHRpbmcgdGhlIGNvbG9yCisgICAgICogPHA+V2hldGhlciBBV0IgaXMgY3VycmVudGx5IHNldHRpbmcgdGhlIGNvbG9yCiAgICAgICogdHJhbnNmb3JtIGZpZWxkcywgYW5kIHdoYXQgaXRzIGlsbHVtaW5hdGlvbiB0YXJnZXQKLSAgICAgKiBpcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBbQkMgLSBBV0IgbG9jayxBV0IgbW9kZXNdCi0gICAgICogPC9wPgorICAgICAqIGlzPC9wPgorICAgICAqIDxwPlRoaXMgY29udHJvbCBpcyBvbmx5IGVmZmVjdGl2ZSBpZiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFIGFuZHJvaWQuY29udHJvbC5tb2RlfSBpcyBBVVRPLjwvcD4KKyAgICAgKiA8cD5XaGVuIHNldCB0byB0aGUgT04gbW9kZSwgdGhlIGNhbWVyYSBkZXZpY2UncyBhdXRvIHdoaXRlIGJhbGFuY2UKKyAgICAgKiByb3V0aW5lIGlzIGVuYWJsZWQsIG92ZXJyaWRpbmcgdGhlIGFwcGxpY2F0aW9uJ3Mgc2VsZWN0ZWQKKyAgICAgKiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9UUkFOU0ZPUk0gYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24udHJhbnNmb3JtfSwge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fR0FJTlMgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24uZ2FpbnN9IGFuZAorICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZX0uPC9wPgorICAgICAqIDxwPldoZW4gc2V0IHRvIHRoZSBPRkYgbW9kZSwgdGhlIGNhbWVyYSBkZXZpY2UncyBhdXRvIHdoaXRlIGJhbGFuY2UKKyAgICAgKiByb3V0aW5lIGlzIGRpc2FibGVkLiBUaGUgYXBwbGljYW50aW9uIG1hbnVhbGx5IGNvbnRyb2xzIHRoZSB3aGl0ZQorICAgICAqIGJhbGFuY2UgYnkge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fVFJBTlNGT1JNIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLnRyYW5zZm9ybX0sIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLmdhaW5zCisgICAgICogYW5kIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZX0uPC9wPgorICAgICAqIDxwPldoZW4gc2V0IHRvIGFueSBvdGhlciBtb2RlcywgdGhlIGNhbWVyYSBkZXZpY2UncyBhdXRvIHdoaXRlIGJhbGFuY2UKKyAgICAgKiByb3V0aW5lIGlzIGRpc2FibGVkLiBUaGUgY2FtZXJhIGRldmljZSB1c2VzIGVhY2ggcGFydGljdWxhciBpbGx1bWluYXRpb24KKyAgICAgKiB0YXJnZXQgZm9yIHdoaXRlIGJhbGFuY2UgYWRqdXN0bWVudC48L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fR0FJTlMKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fTU9ERQorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9UUkFOU0ZPUk0KKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERQogICAgICAqIEBzZWUgI0NPTlRST0xfQVdCX01PREVfT0ZGCiAgICAgICogQHNlZSAjQ09OVFJPTF9BV0JfTU9ERV9BVVRPCiAgICAgICogQHNlZSAjQ09OVFJPTF9BV0JfTU9ERV9JTkNBTkRFU0NFTlQKQEAgLTMzMyw0MyArNzkzLDEyOCBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLmF3Yk1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yIGlsbHVtaW5hbnQKLSAgICAgKiBlc3RpbWF0aW9uCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE9ubHkgdXNlZCBpbiBBVVRPIG1vZGUuCi0gICAgICogPC9wPjxwPgotICAgICAqIEVhY2ggYXJlYSBpcyBhIHJlY3RhbmdsZSBwbHVzIHdlaWdodDogeG1pbiwgeW1pbiwKKyAgICAgKiA8cD5MaXN0IG9mIGFyZWFzIHRvIHVzZSBmb3IgaWxsdW1pbmFudAorICAgICAqIGVzdGltYXRpb248L3A+CisgICAgICogPHA+T25seSB1c2VkIGluIEFVVE8gbW9kZS48L3A+CisgICAgICogPHA+RWFjaCBhcmVhIGlzIGEgcmVjdGFuZ2xlIHBsdXMgd2VpZ2h0OiB4bWluLCB5bWluLAogICAgICAqIHhtYXgsIHltYXgsIHdlaWdodC4gVGhlIHJlY3RhbmdsZSBpcyBkZWZpbmVkIGluY2x1c2l2ZSBvZiB0aGUKLSAgICAgKiBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBjb29yZGluYXRlIHN5c3RlbSBpcyBiYXNlZCBvbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LAorICAgICAqIHNwZWNpZmllZCBjb29yZGluYXRlcy48L3A+CisgICAgICogPHA+VGhlIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJhc2VkIG9uIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksCiAgICAgICogd2l0aCAoMCwwKSBiZWluZyB0aGUgdG9wLWxlZnQgcGl4ZWwgaW4gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwgYW5kCi0gICAgICogKGFuZHJvaWQuc2Vuc29yLmluZm8uYWN0aXZlQXJyYXlTaXplLndpZHRoIC0gMSwKLSAgICAgKiBhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZS5oZWlnaHQgLSAxKSBiZWluZyB0aGUKKyAgICAgKiAoe0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNTRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRSBhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZX0ud2lkdGggLSAxLAorICAgICAqIHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjU0VOU09SX0lORk9fQUNUSVZFX0FSUkFZX1NJWkUgYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemV9LmhlaWdodCAtIDEpIGJlaW5nIHRoZQogICAgICAqIGJvdHRvbS1yaWdodCBwaXhlbCBpbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LiBUaGUgd2VpZ2h0Ci0gICAgICogc2hvdWxkIGJlIG5vbm5lZ2F0aXZlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiBhbGwgcmVnaW9ucyBoYXZlIDAgd2VpZ2h0LCB0aGVuIG5vIHNwZWNpZmljIG1ldGVyaW5nIGFyZWEKKyAgICAgKiBzaG91bGQgYmUgbm9ubmVnYXRpdmUuPC9wPgorICAgICAqIDxwPklmIGFsbCByZWdpb25zIGhhdmUgMCB3ZWlnaHQsIHRoZW4gbm8gc3BlY2lmaWMgbWV0ZXJpbmcgYXJlYQogICAgICAqIG5lZWRzIHRvIGJlIHVzZWQgYnkgdGhlIEhBTC4gSWYgdGhlIG1ldGVyaW5nIHJlZ2lvbiBpcwotICAgICAqIG91dHNpZGUgdGhlIGN1cnJlbnQgYW5kcm9pZC5zY2FsZXIuY3JvcFJlZ2lvbiwgdGhlIEhBTAorICAgICAqIG91dHNpZGUgdGhlIGN1cnJlbnQge0BsaW5rIENhcHR1cmVSZXF1ZXN0I1NDQUxFUl9DUk9QX1JFR0lPTiBhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9ufSwgdGhlIEhBTAogICAgICAqIHNob3VsZCBpZ25vcmUgdGhlIHNlY3Rpb25zIG91dHNpZGUgdGhlIHJlZ2lvbiBhbmQgb3V0cHV0IHRoZQotICAgICAqIHVzZWQgc2VjdGlvbnMgaW4gdGhlIGZyYW1lIG1ldGFkYXRhCi0gICAgICogPC9wPgorICAgICAqIHVzZWQgc2VjdGlvbnMgaW4gdGhlIGZyYW1lIG1ldGFkYXRhPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTQ0FMRVJfQ1JPUF9SRUdJT04KKyAgICAgKiBAc2VlIENhbWVyYUNoYXJhY3RlcmlzdGljcyNTRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGludFtdPiBDT05UUk9MX0FXQl9SRUdJT05TID0KICAgICAgICAgICAgIG5ldyBLZXk8aW50W10+KCJhbmRyb2lkLmNvbnRyb2wuYXdiUmVnaW9ucyIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEN1cnJlbnQgc3RhdGUgb2YgQVdCIGFsZ29yaXRobQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuZXZlciB0aGUgQVdCIGFsZ29yaXRobSBzdGF0ZSBjaGFuZ2VzLCBhCi0gICAgICogTVNHX0FVVE9XSElURUJBTEFOQ0Ugbm90aWZpY2F0aW9uIG11c3QgYmUgc2VuZCBpZiBhCi0gICAgICogbm90aWZpY2F0aW9uIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQuCi0gICAgICogPC9wPgorICAgICAqIDxwPkN1cnJlbnQgc3RhdGUgb2YgQVdCIGFsZ29yaXRobTwvcD4KKyAgICAgKiA8cD5Td2l0Y2hpbmcgYmV0d2VlbiBvciBlbmFibGluZyBBV0IgbW9kZXMgKHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9NT0RFIGFuZHJvaWQuY29udHJvbC5hd2JNb2RlfSkgYWx3YXlzCisgICAgICogcmVzZXRzIHRoZSBBV0Igc3RhdGUgdG8gSU5BQ1RJVkUuIFNpbWlsYXJseSwgc3dpdGNoaW5nIGJldHdlZW4ge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfTU9ERSBhbmRyb2lkLmNvbnRyb2wubW9kZX0sCisgICAgICogb3Ige0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfU0NFTkVfTU9ERSBhbmRyb2lkLmNvbnRyb2wuc2NlbmVNb2RlfSBpZiA8Y29kZT57QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFIGFuZHJvaWQuY29udHJvbC5tb2RlfSA9PSBVU0VfU0NFTkVfTU9ERTwvY29kZT4gcmVzZXRzIGFsbAorICAgICAqIHRoZSBhbGdvcml0aG0gc3RhdGVzIHRvIElOQUNUSVZFLjwvcD4KKyAgICAgKiA8cD5UaGUgY2FtZXJhIGRldmljZSBjYW4gZG8gc2V2ZXJhbCBzdGF0ZSB0cmFuc2l0aW9ucyBiZXR3ZWVuIHR3byByZXN1bHRzLCBpZiBpdCBpcworICAgICAqIGFsbG93ZWQgYnkgdGhlIHN0YXRlIHRyYW5zaXRpb24gdGFibGUuIFNvIElOQUNUSVZFIG1heSBuZXZlciBhY3R1YWxseSBiZSBzZWVuIGluCisgICAgICogYSByZXN1bHQuPC9wPgorICAgICAqIDxwPlRoZSBzdGF0ZSBpbiB0aGUgcmVzdWx0IGlzIHRoZSBzdGF0ZSBmb3IgdGhpcyBpbWFnZSAoaW4gc3luYyB3aXRoIHRoaXMgaW1hZ2UpOiBpZgorICAgICAqIEFXQiBzdGF0ZSBiZWNvbWVzIENPTlZFUkdFRCwgdGhlbiB0aGUgaW1hZ2UgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXN1bHQgc2hvdWxkCisgICAgICogYmUgZ29vZCB0byB1c2UuPC9wPgorICAgICAqIDxwPkJlbG93IGFyZSBzdGF0ZSB0cmFuc2l0aW9uIHRhYmxlcyBmb3IgZGlmZmVyZW50IEFXQiBtb2Rlcy48L3A+CisgICAgICogPHA+V2hlbiA8Y29kZT57QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BV0JfTU9ERSBhbmRyb2lkLmNvbnRyb2wuYXdiTW9kZX0gIT0gQVdCX01PREVfQVVUTzwvY29kZT46PC9wPgorICAgICAqIDx0YWJsZT4KKyAgICAgKiA8dGhlYWQ+CisgICAgICogPHRyPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5TdGF0ZTwvdGg+CisgICAgICogPHRoIGFsaWduPSJjZW50ZXIiPlRyYW5zaXRpb24gQ2F1c2U8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5OZXcgU3RhdGU8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5Ob3RlczwvdGg+CisgICAgICogPC90cj4KKyAgICAgKiA8L3RoZWFkPgorICAgICAqIDx0Ym9keT4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPklOQUNUSVZFPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+PC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+SU5BQ1RJVkU8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DYW1lcmEgZGV2aWNlIGF1dG8gd2hpdGUgYmFsYW5jZSBhbGdvcml0aG0gaXMgZGlzYWJsZWQ8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPC90Ym9keT4KKyAgICAgKiA8L3RhYmxlPgorICAgICAqIDxwPldoZW4ge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQVdCX01PREUgYW5kcm9pZC5jb250cm9sLmF3Yk1vZGV9IGlzIEFXQl9NT0RFX0FVVE86PC9wPgorICAgICAqIDx0YWJsZT4KKyAgICAgKiA8dGhlYWQ+CisgICAgICogPHRyPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5TdGF0ZTwvdGg+CisgICAgICogPHRoIGFsaWduPSJjZW50ZXIiPlRyYW5zaXRpb24gQ2F1c2U8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5OZXcgU3RhdGU8L3RoPgorICAgICAqIDx0aCBhbGlnbj0iY2VudGVyIj5Ob3RlczwvdGg+CisgICAgICogPC90cj4KKyAgICAgKiA8L3RoZWFkPgorICAgICAqIDx0Ym9keT4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPklOQUNUSVZFPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Q2FtZXJhIGRldmljZSBpbml0aWF0ZXMgQVdCIHNjYW48L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5TRUFSQ0hJTkc8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5WYWx1ZXMgY2hhbmdpbmc8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5JTkFDVElWRTwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPntAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9MT0NLIGFuZHJvaWQuY29udHJvbC5hd2JMb2NrfSBpcyBPTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkxPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlZhbHVlcyBsb2NrZWQ8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5TRUFSQ0hJTkc8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DYW1lcmEgZGV2aWNlIGZpbmlzaGVzIEFXQiBzY2FuPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+Q09OVkVSR0VEPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+R29vZCB2YWx1ZXMsIG5vdCBjaGFuZ2luZzwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlNFQVJDSElORzwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPntAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9MT0NLIGFuZHJvaWQuY29udHJvbC5hd2JMb2NrfSBpcyBPTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkxPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlZhbHVlcyBsb2NrZWQ8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DT05WRVJHRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DYW1lcmEgZGV2aWNlIGluaXRpYXRlcyBBV0Igc2NhbjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlNFQVJDSElORzwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlZhbHVlcyBjaGFuZ2luZzwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkNPTlZFUkdFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPntAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9MT0NLIGFuZHJvaWQuY29udHJvbC5hd2JMb2NrfSBpcyBPTjwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkxPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPlZhbHVlcyBsb2NrZWQ8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5MT0NLRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj57QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BV0JfTE9DSyBhbmRyb2lkLmNvbnRyb2wuYXdiTG9ja30gaXMgT0ZGPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+U0VBUkNISU5HPC90ZD4KKyAgICAgKiA8dGQgYWxpZ249ImNlbnRlciI+VmFsdWVzIG5vdCBnb29kIGFmdGVyIHVubG9jazwvdGQ+CisgICAgICogPC90cj4KKyAgICAgKiA8dHI+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPkxPQ0tFRDwvdGQ+CisgICAgICogPHRkIGFsaWduPSJjZW50ZXIiPntAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9MT0NLIGFuZHJvaWQuY29udHJvbC5hd2JMb2NrfSBpcyBPRkY8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5DT05WRVJHRUQ8L3RkPgorICAgICAqIDx0ZCBhbGlnbj0iY2VudGVyIj5WYWx1ZXMgZ29vZCBhZnRlciB1bmxvY2s8L3RkPgorICAgICAqIDwvdHI+CisgICAgICogPC90Ym9keT4KKyAgICAgKiA8L3RhYmxlPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9MT0NLCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FXQl9NT0RFCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX01PREUKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfU0NFTkVfTU9ERQogICAgICAqIEBzZWUgI0NPTlRST0xfQVdCX1NUQVRFX0lOQUNUSVZFCiAgICAgICogQHNlZSAjQ09OVFJPTF9BV0JfU1RBVEVfU0VBUkNISU5HCiAgICAgICogQHNlZSAjQ09OVFJPTF9BV0JfU1RBVEVfQ09OVkVSR0VECkBAIC0zNzksMTAgKzkyNCwyMCBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLmF3YlN0YXRlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE92ZXJhbGwgbW9kZSBvZiAzQSBjb250cm9sCi0gICAgICogcm91dGluZXMKLSAgICAgKiA8L3A+CisgICAgICogPHA+T3ZlcmFsbCBtb2RlIG9mIDNBIGNvbnRyb2wKKyAgICAgKiByb3V0aW5lczwvcD4KKyAgICAgKiA8cD5IaWdoLWxldmVsIDNBIGNvbnRyb2wuIFdoZW4gc2V0IHRvIE9GRiwgYWxsIDNBIGNvbnRyb2wKKyAgICAgKiBieSB0aGUgY2FtZXJhIGRldmljZSBpcyBkaXNhYmxlZC4gVGhlIGFwcGxpY2F0aW9uIG11c3Qgc2V0IHRoZSBmaWVsZHMgZm9yCisgICAgICogY2FwdHVyZSBwYXJhbWV0ZXJzIGl0c2VsZi48L3A+CisgICAgICogPHA+V2hlbiBzZXQgdG8gQVVUTywgdGhlIGluZGl2aWR1YWwgYWxnb3JpdGhtIGNvbnRyb2xzIGluCisgICAgICogYW5kcm9pZC5jb250cm9sLiogYXJlIGluIGVmZmVjdCwgc3VjaCBhcyB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRl9NT0RFIGFuZHJvaWQuY29udHJvbC5hZk1vZGV9LjwvcD4KKyAgICAgKiA8cD5XaGVuIHNldCB0byBVU0VfU0NFTkVfTU9ERSwgdGhlIGluZGl2aWR1YWwgY29udHJvbHMgaW4KKyAgICAgKiBhbmRyb2lkLmNvbnRyb2wuKiBhcmUgbW9zdGx5IGRpc2FibGVkLCBhbmQgdGhlIGNhbWVyYSBkZXZpY2UgaW1wbGVtZW50cworICAgICAqIG9uZSBvZiB0aGUgc2NlbmUgbW9kZSBzZXR0aW5ncyAoc3VjaCBhcyBBQ1RJT04sIFNVTlNFVCwgb3IgUEFSVFkpCisgICAgICogYXMgaXQgd2lzaGVzLiBUaGUgY2FtZXJhIGRldmljZSBzY2VuZSBtb2RlIDNBIHNldHRpbmdzIGFyZSBwcm92aWRlZCBieQorICAgICAqIGFuZHJvaWQuY29udHJvbC5zY2VuZU1vZGVPdmVycmlkZXMuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX01PREUKICAgICAgKiBAc2VlICNDT05UUk9MX01PREVfT0ZGCiAgICAgICogQHNlZSAjQ09OVFJPTF9NT0RFX0FVVE8KICAgICAgKiBAc2VlICNDT05UUk9MX01PREVfVVNFX1NDRU5FX01PREUKQEAgLTM5MSwxMCArOTQ2LDE1IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wubW9kZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBPcGVyYXRpb24gbW9kZSBmb3IgZWRnZQotICAgICAqIGVuaGFuY2VtZW50Ci0gICAgICogPC9wPgorICAgICAqIDxwPk9wZXJhdGlvbiBtb2RlIGZvciBlZGdlCisgICAgICogZW5oYW5jZW1lbnQ8L3A+CisgICAgICogPHA+RWRnZS9zaGFycG5lc3MvZGV0YWlsIGVuaGFuY2VtZW50LiBPRkYgbWVhbnMgbm8KKyAgICAgKiBlbmhhbmNlbWVudCB3aWxsIGJlIGFwcGxpZWQgYnkgdGhlIEhBTC48L3A+CisgICAgICogPHA+RkFTVC9ISUdIX1FVQUxJVFkgYm90aCBtZWFuIGNhbWVyYSBkZXZpY2UgZGV0ZXJtaW5lZCBlbmhhbmNlbWVudAorICAgICAqIHdpbGwgYmUgYXBwbGllZC4gSElHSF9RVUFMSVRZIG1vZGUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICAgICogY2FtZXJhIGRldmljZSB3aWxsIHVzZSB0aGUgaGlnaGVzdC1xdWFsaXR5IGVuaGFuY2VtZW50IGFsZ29yaXRobXMsCisgICAgICogZXZlbiBpZiBpdCBzbG93cyBkb3duIGNhcHR1cmUgcmF0ZS4gRkFTVCBtZWFucyB0aGUgY2FtZXJhIGRldmljZSB3aWxsCisgICAgICogbm90IHNsb3cgZG93biBjYXB0dXJlIHJhdGUgd2hlbiBhcHBseWluZyBlZGdlIGVuaGFuY2VtZW50LjwvcD4KICAgICAgKiBAc2VlICNFREdFX01PREVfT0ZGCiAgICAgICogQHNlZSAjRURHRV9NT0RFX0ZBU1QKICAgICAgKiBAc2VlICNFREdFX01PREVfSElHSF9RVUFMSVRZCkBAIC00MDMsOSArOTYzLDIzIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmVkZ2UubW9kZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBTZWxlY3QgZmxhc2ggb3BlcmF0aW9uIG1vZGUKLSAgICAgKiA8L3A+CisgICAgICogPHA+VGhlIGRlc2lyZWQgbW9kZSBmb3IgZm9yIHRoZSBjYW1lcmEgZGV2aWNlJ3MgZmxhc2ggY29udHJvbC48L3A+CisgICAgICogPHA+VGhpcyBjb250cm9sIGlzIG9ubHkgZWZmZWN0aXZlIHdoZW4gZmxhc2ggdW5pdCBpcyBhdmFpbGFibGUKKyAgICAgKiAoPGNvZGU+e0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNGTEFTSF9JTkZPX0FWQUlMQUJMRSBhbmRyb2lkLmZsYXNoLmluZm8uYXZhaWxhYmxlfSAhPSAwPC9jb2RlPikuPC9wPgorICAgICAqIDxwPldoZW4gdGhpcyBjb250cm9sIGlzIHVzZWQsIHRoZSB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9NT0RFIGFuZHJvaWQuY29udHJvbC5hZU1vZGV9IG11c3QgYmUgc2V0IHRvIE9OIG9yIE9GRi4KKyAgICAgKiBPdGhlcndpc2UsIHRoZSBjYW1lcmEgZGV2aWNlIGF1dG8tZXhwb3N1cmUgcmVsYXRlZCBmbGFzaCBjb250cm9sIChPTl9BVVRPX0ZMQVNILAorICAgICAqIE9OX0FMV0FZU19GTEFTSCwgb3IgT05fQVVUT19GTEFTSF9SRURFWUUpIHdpbGwgb3ZlcnJpZGUgdGhpcyBjb250cm9sLjwvcD4KKyAgICAgKiA8cD5XaGVuIHNldCB0byBPRkYsIHRoZSBjYW1lcmEgZGV2aWNlIHdpbGwgbm90IGZpcmUgZmxhc2ggZm9yIHRoaXMgY2FwdHVyZS48L3A+CisgICAgICogPHA+V2hlbiBzZXQgdG8gU0lOR0xFLCB0aGUgY2FtZXJhIGRldmljZSB3aWxsIGZpcmUgZmxhc2ggcmVnYXJkbGVzcyBvZiB0aGUgY2FtZXJhCisgICAgICogZGV2aWNlJ3MgYXV0by1leHBvc3VyZSByb3V0aW5lJ3MgcmVzdWx0LiBXaGVuIHVzZWQgaW4gc3RpbGwgY2FwdHVyZSBjYXNlLCB0aGlzCisgICAgICogY29udHJvbCBzaG91bGQgYmUgdXNlZCBhbG9uZyB3aXRoIEFFIHByZWNhcHR1cmUgbWV0ZXJpbmcgc2VxdWVuY2UKKyAgICAgKiAoe0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSIGFuZHJvaWQuY29udHJvbC5hZVByZWNhcHR1cmVUcmlnZ2VyfSksIG90aGVyd2lzZSwgdGhlIGltYWdlIG1heSBiZSBpbmNvcnJlY3RseSBleHBvc2VkLjwvcD4KKyAgICAgKiA8cD5XaGVuIHNldCB0byBUT1JDSCwgdGhlIGZsYXNoIHdpbGwgYmUgb24gY29udGludW91c2x5LiBUaGlzIG1vZGUgY2FuIGJlIHVzZWQKKyAgICAgKiBmb3IgdXNlIGNhc2VzIHN1Y2ggYXMgcHJldmlldywgYXV0by1mb2N1cyBhc3Npc3QsIHN0aWxsIGNhcHR1cmUsIG9yIHZpZGVvIHJlY29yZGluZy48L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTU9ERQorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVIKKyAgICAgKiBAc2VlIENhbWVyYUNoYXJhY3RlcmlzdGljcyNGTEFTSF9JTkZPX0FWQUlMQUJMRQogICAgICAqIEBzZWUgI0ZMQVNIX01PREVfT0ZGCiAgICAgICogQHNlZSAjRkxBU0hfTU9ERV9TSU5HTEUKICAgICAgKiBAc2VlICNGTEFTSF9NT0RFX1RPUkNICkBAIC00MTQsMTAgKzk4OCw4IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmZsYXNoLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQ3VycmVudCBzdGF0ZSBvZiB0aGUgZmxhc2gKLSAgICAgKiB1bml0Ci0gICAgICogPC9wPgorICAgICAqIDxwPkN1cnJlbnQgc3RhdGUgb2YgdGhlIGZsYXNoCisgICAgICogdW5pdDwvcD4KICAgICAgKiBAc2VlICNGTEFTSF9TVEFURV9VTkFWQUlMQUJMRQogICAgICAqIEBzZWUgI0ZMQVNIX1NUQVRFX0NIQVJHSU5HCiAgICAgICogQHNlZSAjRkxBU0hfU1RBVEVfUkVBRFkKQEAgLTQyNywxNDAgKzk5OSwxMzEgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuZmxhc2guc3RhdGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogR1BTIGNvb3JkaW5hdGVzIHRvIGluY2x1ZGUgaW4gb3V0cHV0IEpQRUcKLSAgICAgKiBFWElGCi0gICAgICogPC9wPgorICAgICAqIDxwPkdQUyBjb29yZGluYXRlcyB0byBpbmNsdWRlIGluIG91dHB1dCBKUEVHCisgICAgICogRVhJRjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxkb3VibGVbXT4gSlBFR19HUFNfQ09PUkRJTkFURVMgPQogICAgICAgICAgICAgbmV3IEtleTxkb3VibGVbXT4oImFuZHJvaWQuanBlZy5ncHNDb29yZGluYXRlcyIsIGRvdWJsZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIDMyIGNoYXJhY3RlcnMgZGVzY3JpYmluZyBHUFMgYWxnb3JpdGhtIHRvCi0gICAgICogaW5jbHVkZSBpbiBFWElGCi0gICAgICogPC9wPgorICAgICAqIDxwPjMyIGNoYXJhY3RlcnMgZGVzY3JpYmluZyBHUFMgYWxnb3JpdGhtIHRvCisgICAgICogaW5jbHVkZSBpbiBFWElGPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PFN0cmluZz4gSlBFR19HUFNfUFJPQ0VTU0lOR19NRVRIT0QgPQogICAgICAgICAgICAgbmV3IEtleTxTdHJpbmc+KCJhbmRyb2lkLmpwZWcuZ3BzUHJvY2Vzc2luZ01ldGhvZCIsIFN0cmluZy5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaW1lIEdQUyBmaXggd2FzIG1hZGUgdG8gaW5jbHVkZSBpbgotICAgICAqIEVYSUYKLSAgICAgKiA8L3A+CisgICAgICogPHA+VGltZSBHUFMgZml4IHdhcyBtYWRlIHRvIGluY2x1ZGUgaW4KKyAgICAgKiBFWElGPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PExvbmc+IEpQRUdfR1BTX1RJTUVTVEFNUCA9CiAgICAgICAgICAgICBuZXcgS2V5PExvbmc+KCJhbmRyb2lkLmpwZWcuZ3BzVGltZXN0YW1wIiwgbG9uZy5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBPcmllbnRhdGlvbiBvZiBKUEVHIGltYWdlIHRvCi0gICAgICogd3JpdGUKLSAgICAgKiA8L3A+CisgICAgICogPHA+T3JpZW50YXRpb24gb2YgSlBFRyBpbWFnZSB0bworICAgICAqIHdyaXRlPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEludGVnZXI+IEpQRUdfT1JJRU5UQVRJT04gPQogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5qcGVnLm9yaWVudGF0aW9uIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIENvbXByZXNzaW9uIHF1YWxpdHkgb2YgdGhlIGZpbmFsIEpQRUcKLSAgICAgKiBpbWFnZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiA4NS05NSBpcyB0eXBpY2FsIHVzYWdlIHJhbmdlCi0gICAgICogPC9wPgorICAgICAqIDxwPkNvbXByZXNzaW9uIHF1YWxpdHkgb2YgdGhlIGZpbmFsIEpQRUcKKyAgICAgKiBpbWFnZTwvcD4KKyAgICAgKiA8cD44NS05NSBpcyB0eXBpY2FsIHVzYWdlIHJhbmdlPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEJ5dGU+IEpQRUdfUVVBTElUWSA9CiAgICAgICAgICAgICBuZXcgS2V5PEJ5dGU+KCJhbmRyb2lkLmpwZWcucXVhbGl0eSIsIGJ5dGUuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQ29tcHJlc3Npb24gcXVhbGl0eSBvZiBKUEVHCi0gICAgICogdGh1bWJuYWlsCi0gICAgICogPC9wPgorICAgICAqIDxwPkNvbXByZXNzaW9uIHF1YWxpdHkgb2YgSlBFRworICAgICAqIHRodW1ibmFpbDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxCeXRlPiBKUEVHX1RIVU1CTkFJTF9RVUFMSVRZID0KICAgICAgICAgICAgIG5ldyBLZXk8Qnl0ZT4oImFuZHJvaWQuanBlZy50aHVtYm5haWxRdWFsaXR5IiwgYnl0ZS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBSZXNvbHV0aW9uIG9mIGVtYmVkZGVkIEpQRUcKLSAgICAgKiB0aHVtYm5haWwKLSAgICAgKiA8L3A+CisgICAgICogPHA+UmVzb2x1dGlvbiBvZiBlbWJlZGRlZCBKUEVHIHRodW1ibmFpbDwvcD4KKyAgICAgKiA8cD5XaGVuIHNldCB0byAoMCwgMCkgdmFsdWUsIHRoZSBKUEVHIEVYSUYgd2lsbCBub3QgY29udGFpbiB0aHVtYm5haWwsCisgICAgICogYnV0IHRoZSBjYXB0dXJlZCBKUEVHIHdpbGwgc3RpbGwgYmUgYSB2YWxpZCBpbWFnZS48L3A+CisgICAgICogPHA+V2hlbiBhIGpwZWcgaW1hZ2UgY2FwdHVyZSBpcyBpc3N1ZWQsIHRoZSB0aHVtYm5haWwgc2l6ZSBzZWxlY3RlZCBzaG91bGQgaGF2ZQorICAgICAqIHRoZSBzYW1lIGFzcGVjdCByYXRpbyBhcyB0aGUganBlZyBpbWFnZS48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemU+IEpQRUdfVEhVTUJOQUlMX1NJWkUgPQogICAgICAgICAgICAgbmV3IEtleTxhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuU2l6ZT4oImFuZHJvaWQuanBlZy50aHVtYm5haWxTaXplIiwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemUuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogU2l6ZSBvZiB0aGUgbGVucyBhcGVydHVyZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gbW9zdCBkZXZpY2VzLiBDYW4gb25seQotICAgICAqIHBpY2sgZnJvbSBzdXBwb3J0ZWQgbGlzdAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGUgcmF0aW8gb2YgbGVucyBmb2NhbCBsZW5ndGggdG8gdGhlIGVmZmVjdGl2ZQorICAgICAqIGFwZXJ0dXJlIGRpYW1ldGVyLjwvcD4KKyAgICAgKiA8cD5UaGlzIHdpbGwgb25seSBiZSBzdXBwb3J0ZWQgb24gdGhlIGNhbWVyYSBkZXZpY2VzIHRoYXQKKyAgICAgKiBoYXZlIHZhcmlhYmxlIGFwZXJ0dXJlIGxlbnMuIFRoZSBhcGVydHVyZSB2YWx1ZSBjYW4gb25seSBiZQorICAgICAqIG9uZSBvZiB0aGUgdmFsdWVzIGxpc3RlZCBpbiB7QGxpbmsgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI0xFTlNfSU5GT19BVkFJTEFCTEVfQVBFUlRVUkVTIGFuZHJvaWQubGVucy5pbmZvLmF2YWlsYWJsZUFwZXJ0dXJlc30uPC9wPgorICAgICAqIDxwPldoZW4gdGhpcyBpcyBzdXBwb3J0ZWQgYW5kIHtAbGluayBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX01PREUgYW5kcm9pZC5jb250cm9sLmFlTW9kZX0gaXMgT0ZGLAorICAgICAqIHRoaXMgY2FuIGJlIHNldCBhbG9uZyB3aXRoIHtAbGluayBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfRVhQT1NVUkVfVElNRSBhbmRyb2lkLnNlbnNvci5leHBvc3VyZVRpbWV9LAorICAgICAqIHtAbGluayBDYXB0dXJlUmVxdWVzdCNTRU5TT1JfU0VOU0lUSVZJVFkgYW5kcm9pZC5zZW5zb3Iuc2Vuc2l0aXZpdHl9LCBhbmQgYW5kcm9pZC5zZW5zb3IuZnJhbWVEdXJhdGlvbgorICAgICAqIHRvIGFjaGlldmUgbWFudWFsIGV4cG9zdXJlIGNvbnRyb2wuPC9wPgorICAgICAqIDxwPlRoZSByZXF1ZXN0ZWQgYXBlcnR1cmUgdmFsdWUgbWF5IHRha2Ugc2V2ZXJhbCBmcmFtZXMgdG8gcmVhY2ggdGhlCisgICAgICogcmVxdWVzdGVkIHZhbHVlOyB0aGUgY2FtZXJhIGRldmljZSB3aWxsIHJlcG9ydCB0aGUgY3VycmVudCAoaW50ZXJtZWRpYXRlKQorICAgICAqIGFwZXJ0dXJlIHNpemUgaW4gY2FwdHVyZSByZXN1bHQgbWV0YWRhdGEgd2hpbGUgdGhlIGFwZXJ0dXJlIGlzIGNoYW5naW5nLjwvcD4KKyAgICAgKiA8cD5XaGVuIHRoaXMgaXMgc3VwcG9ydGVkIGFuZCB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9NT0RFIGFuZHJvaWQuY29udHJvbC5hZU1vZGV9IGlzIG9uZSBvZgorICAgICAqIHRoZSBPTiBtb2RlcywgdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGNhbWVyYSBkZXZpY2UKKyAgICAgKiBhdXRvLWV4cG9zdXJlIGFsZ29yaXRobSwgdGhlIG92ZXJyaWRkZW4gdmFsdWVzIGFyZSB0aGVuIHByb3ZpZGVkCisgICAgICogYmFjayB0byB0aGUgdXNlciBpbiB0aGUgY29ycmVzcG9uZGluZyByZXN1bHQuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX01PREUKKyAgICAgKiBAc2VlIENhbWVyYUNoYXJhY3RlcmlzdGljcyNMRU5TX0lORk9fQVZBSUxBQkxFX0FQRVJUVVJFUworICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjU0VOU09SX0VYUE9TVVJFX1RJTUUKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I1NFTlNPUl9TRU5TSVRJVklUWQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEZsb2F0PiBMRU5TX0FQRVJUVVJFID0KICAgICAgICAgICAgIG5ldyBLZXk8RmxvYXQ+KCJhbmRyb2lkLmxlbnMuYXBlcnR1cmUiLCBmbG9hdC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBTdGF0ZSBvZiBsZW5zIG5ldXRyYWwgZGVuc2l0eQotICAgICAqIGZpbHRlcihzKQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gbW9zdCBkZXZpY2VzLiBDYW4gb25seQotICAgICAqIHBpY2sgZnJvbSBzdXBwb3J0ZWQgbGlzdAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5TdGF0ZSBvZiBsZW5zIG5ldXRyYWwgZGVuc2l0eSBmaWx0ZXIocykuPC9wPgorICAgICAqIDxwPlRoaXMgd2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgY2FtZXJhIGRldmljZXMuIE9uIGRldmljZXMKKyAgICAgKiB3aGVyZSB0aGlzIGlzIHN1cHBvcnRlZCwgdGhpcyBtYXkgb25seSBiZSBzZXQgdG8gb25lIG9mIHRoZQorICAgICAqIHZhbHVlcyBpbmNsdWRlZCBpbiB7QGxpbmsgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI0xFTlNfSU5GT19BVkFJTEFCTEVfRklMVEVSX0RFTlNJVElFUyBhbmRyb2lkLmxlbnMuaW5mby5hdmFpbGFibGVGaWx0ZXJEZW5zaXRpZXN9LjwvcD4KKyAgICAgKiA8cD5MZW5zIGZpbHRlcnMgYXJlIHR5cGljYWxseSB1c2VkIHRvIGxvd2VyIHRoZSBhbW91bnQgb2YgbGlnaHQgdGhlCisgICAgICogc2Vuc29yIGlzIGV4cG9zZWQgdG8gKG1lYXN1cmVkIGluIHN0ZXBzIG9mIEVWKS4gQXMgdXNlZCBoZXJlLCBhbiBFVgorICAgICAqIHN0ZXAgaXMgdGhlIHN0YW5kYXJkIGxvZ2FyaXRobWljIHJlcHJlc2VudGF0aW9uLCB3aGljaCBhcmUKKyAgICAgKiBub24tbmVnYXRpdmUsIGFuZCBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBhbW91bnQgb2YgbGlnaHQKKyAgICAgKiBoaXR0aW5nIHRoZSBzZW5zb3IuICBGb3IgZXhhbXBsZSwgc2V0dGluZyB0aGlzIHRvIDAgd291bGQgcmVzdWx0CisgICAgICogaW4gbm8gcmVkdWN0aW9uIG9mIHRoZSBpbmNvbWluZyBsaWdodCwgYW5kIHNldHRpbmcgdGhpcyB0byAyIHdvdWxkCisgICAgICogbWVhbiB0aGF0IHRoZSBmaWx0ZXIgaXMgc2V0IHRvIHJlZHVjZSBpbmNvbWluZyBsaWdodCBieSB0d28gc3RvcHMKKyAgICAgKiAoYWxsb3dpbmcgMS80IG9mIHRoZSBwcmlvciBhbW91bnQgb2YgbGlnaHQgdG8gdGhlIHNlbnNvcikuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjTEVOU19JTkZPX0FWQUlMQUJMRV9GSUxURVJfREVOU0lUSUVTCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8RmxvYXQ+IExFTlNfRklMVEVSX0RFTlNJVFkgPQogICAgICAgICAgICAgbmV3IEtleTxGbG9hdD4oImFuZHJvaWQubGVucy5maWx0ZXJEZW5zaXR5IiwgZmxvYXQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGVucyBvcHRpY2FsIHpvb20gc2V0dGluZwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gbW9zdCBkZXZpY2VzLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MZW5zIG9wdGljYWwgem9vbSBzZXR0aW5nPC9wPgorICAgICAqIDxwPldpbGwgbm90IGJlIHN1cHBvcnRlZCBvbiBtb3N0IGRldmljZXMuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEZsb2F0PiBMRU5TX0ZPQ0FMX0xFTkdUSCA9CiAgICAgICAgICAgICBuZXcgS2V5PEZsb2F0PigiYW5kcm9pZC5sZW5zLmZvY2FsTGVuZ3RoIiwgZmxvYXQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRGlzdGFuY2UgdG8gcGxhbmUgb2Ygc2hhcnBlc3QgZm9jdXMsCi0gICAgICogbWVhc3VyZWQgZnJvbSBmcm9udG1vc3Qgc3VyZmFjZSBvZiB0aGUgbGVucwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBTaG91bGQgYmUgemVybyBmb3IgZml4ZWQtZm9jdXMgY2FtZXJhcwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5EaXN0YW5jZSB0byBwbGFuZSBvZiBzaGFycGVzdCBmb2N1cywKKyAgICAgKiBtZWFzdXJlZCBmcm9tIGZyb250bW9zdCBzdXJmYWNlIG9mIHRoZSBsZW5zPC9wPgorICAgICAqIDxwPlNob3VsZCBiZSB6ZXJvIGZvciBmaXhlZC1mb2N1cyBjYW1lcmFzPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEZsb2F0PiBMRU5TX0ZPQ1VTX0RJU1RBTkNFID0KICAgICAgICAgICAgIG5ldyBLZXk8RmxvYXQ+KCJhbmRyb2lkLmxlbnMuZm9jdXNEaXN0YW5jZSIsIGZsb2F0LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSByYW5nZSBvZiBzY2VuZSBkaXN0YW5jZXMgdGhhdCBhcmUgaW4KLSAgICAgKiBzaGFycCBmb2N1cyAoZGVwdGggb2YgZmllbGQpCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIElmIHZhcmlhYmxlIGZvY3VzIG5vdCBzdXBwb3J0ZWQsIGNhbiBzdGlsbCByZXBvcnQKLSAgICAgKiBmaXhlZCBkZXB0aCBvZiBmaWVsZCByYW5nZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGUgcmFuZ2Ugb2Ygc2NlbmUgZGlzdGFuY2VzIHRoYXQgYXJlIGluCisgICAgICogc2hhcnAgZm9jdXMgKGRlcHRoIG9mIGZpZWxkKTwvcD4KKyAgICAgKiA8cD5JZiB2YXJpYWJsZSBmb2N1cyBub3Qgc3VwcG9ydGVkLCBjYW4gc3RpbGwgcmVwb3J0CisgICAgICogZml4ZWQgZGVwdGggb2YgZmllbGQgcmFuZ2U8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gTEVOU19GT0NVU19SQU5HRSA9CiAgICAgICAgICAgICBuZXcgS2V5PGZsb2F0W10+KCJhbmRyb2lkLmxlbnMuZm9jdXNSYW5nZSIsIGZsb2F0W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciBvcHRpY2FsIGltYWdlIHN0YWJpbGl6YXRpb24gaXMKLSAgICAgKiBlbmFibGVkLgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gbW9zdCBkZXZpY2VzLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGV0aGVyIG9wdGljYWwgaW1hZ2Ugc3RhYmlsaXphdGlvbiBpcworICAgICAqIGVuYWJsZWQuPC9wPgorICAgICAqIDxwPldpbGwgbm90IGJlIHN1cHBvcnRlZCBvbiBtb3N0IGRldmljZXMuPC9wPgogICAgICAqIEBzZWUgI0xFTlNfT1BUSUNBTF9TVEFCSUxJWkFUSU9OX01PREVfT0ZGCiAgICAgICogQHNlZSAjTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERV9PTgogICAgICAqLwpAQCAtNTY4LDkgKzExMzEsNyBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5sZW5zLm9wdGljYWxTdGFiaWxpemF0aW9uTW9kZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBDdXJyZW50IGxlbnMgc3RhdHVzCi0gICAgICogPC9wPgorICAgICAqIDxwPkN1cnJlbnQgbGVucyBzdGF0dXM8L3A+CiAgICAgICogQHNlZSAjTEVOU19TVEFURV9TVEFUSU9OQVJZCiAgICAgICogQHNlZSAjTEVOU19TVEFURV9NT1ZJTkcKICAgICAgKi8KQEAgLTU3OCwxMCArMTEzOSwxNSBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5sZW5zLnN0YXRlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE1vZGUgb2Ygb3BlcmF0aW9uIGZvciB0aGUgbm9pc2UgcmVkdWN0aW9uCi0gICAgICogYWxnb3JpdGhtCi0gICAgICogPC9wPgorICAgICAqIDxwPk1vZGUgb2Ygb3BlcmF0aW9uIGZvciB0aGUgbm9pc2UgcmVkdWN0aW9uCisgICAgICogYWxnb3JpdGhtPC9wPgorICAgICAqIDxwPk5vaXNlIGZpbHRlcmluZyBjb250cm9sLiBPRkYgbWVhbnMgbm8gbm9pc2UgcmVkdWN0aW9uCisgICAgICogd2lsbCBiZSBhcHBsaWVkIGJ5IHRoZSBIQUwuPC9wPgorICAgICAqIDxwPkZBU1QvSElHSF9RVUFMSVRZIGJvdGggbWVhbiBjYW1lcmEgZGV2aWNlIGRldGVybWluZWQgbm9pc2UgZmlsdGVyaW5nCisgICAgICogd2lsbCBiZSBhcHBsaWVkLiBISUdIX1FVQUxJVFkgbW9kZSBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FtZXJhIGRldmljZQorICAgICAqIHdpbGwgdXNlIHRoZSBoaWdoZXN0LXF1YWxpdHkgbm9pc2UgZmlsdGVyaW5nIGFsZ29yaXRobXMsCisgICAgICogZXZlbiBpZiBpdCBzbG93cyBkb3duIGNhcHR1cmUgcmF0ZS4gRkFTVCBtZWFucyB0aGUgY2FtZXJhIGRldmljZSBzaG91bGQgbm90CisgICAgICogc2xvdyBkb3duIGNhcHR1cmUgcmF0ZSB3aGVuIGFwcGx5aW5nIG5vaXNlIGZpbHRlcmluZy48L3A+CiAgICAgICogQHNlZSAjTk9JU0VfUkVEVUNUSU9OX01PREVfT0ZGCiAgICAgICogQHNlZSAjTk9JU0VfUkVEVUNUSU9OX01PREVfRkFTVAogICAgICAqIEBzZWUgI05PSVNFX1JFRFVDVElPTl9NT0RFX0hJR0hfUVVBTElUWQpAQCAtNTkwLDE0ICsxMTU2LDExIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLm5vaXNlUmVkdWN0aW9uLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciBhIHJlc3VsdCBnaXZlbiB0byB0aGUgZnJhbWV3b3JrIGlzIHRoZQorICAgICAqIDxwPldoZXRoZXIgYSByZXN1bHQgZ2l2ZW4gdG8gdGhlIGZyYW1ld29yayBpcyB0aGUKICAgICAgKiBmaW5hbCBvbmUgZm9yIHRoZSBjYXB0dXJlLCBvciBvbmx5IGEgcGFydGlhbCB0aGF0IGNvbnRhaW5zIGEKICAgICAgKiBzdWJzZXQgb2YgdGhlIGZ1bGwgc2V0IG9mIGR5bmFtaWMgbWV0YWRhdGEKLSAgICAgKiB2YWx1ZXMuCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRoZSBlbnRyaWVzIGluIHRoZSByZXN1bHQgbWV0YWRhdGEgYnVmZmVycyBmb3IgYQorICAgICAqIHZhbHVlcy48L3A+CisgICAgICogPHA+VGhlIGVudHJpZXMgaW4gdGhlIHJlc3VsdCBtZXRhZGF0YSBidWZmZXJzIGZvciBhCiAgICAgICogc2luZ2xlIGNhcHR1cmUgbWF5IG5vdCBvdmVybGFwLCBleGNlcHQgZm9yIHRoaXMgZW50cnkuIFRoZQogICAgICAqIEZJTkFMIGJ1ZmZlcnMgbXVzdCByZXRhaW4gRklGTyBvcmRlcmluZyByZWxhdGl2ZSB0byB0aGUKICAgICAgKiByZXF1ZXN0cyB0aGF0IGdlbmVyYXRlIHRoZW0sIHNvIHRoZSBGSU5BTCBidWZmZXIgZm9yIGZyYW1lIDMgbXVzdApAQCAtNjA1LDY4ICsxMTY4LDUwIEBACiAgICAgICogYmVmb3JlIHRoZSBGSU5BTCBidWZmZXIgZm9yIGZyYW1lIDQuIFBBUlRJQUwgYnVmZmVycyBtYXkgYmUgcmV0dXJuZWQKICAgICAgKiBpbiBhbnkgb3JkZXIgcmVsYXRpdmUgdG8gb3RoZXIgZnJhbWVzLCBidXQgYWxsIFBBUlRJQUwgYnVmZmVycyBmb3IgYSBnaXZlbgogICAgICAqIGNhcHR1cmUgbXVzdCBhcnJpdmUgYmVmb3JlIHRoZSBGSU5BTCBidWZmZXIgZm9yIHRoYXQgY2FwdHVyZS4gVGhpcyBlbnRyeSBtYXkKLSAgICAgKiBvbmx5IGJlIHVzZWQgYnkgdGhlIEhBTCBpZiBxdWlya3MudXNlUGFydGlhbFJlc3VsdCBpcyBzZXQgdG8gMS4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiA8Yj5PcHRpb25hbDwvYj4gLSBUaGlzIHZhbHVlIG1heSBiZSBudWxsIG9uIHNvbWUgZGV2aWNlcy4KLSAgICAgKgorICAgICAqIG9ubHkgYmUgdXNlZCBieSB0aGUgSEFMIGlmIHF1aXJrcy51c2VQYXJ0aWFsUmVzdWx0IGlzIHNldCB0byAxLjwvcD4KKyAgICAgKiA8cD48Yj5PcHRpb25hbDwvYj4gLSBUaGlzIHZhbHVlIG1heSBiZSB7QGNvZGUgbnVsbH0gb24gc29tZSBkZXZpY2VzLjwvcD4KICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEJvb2xlYW4+IFFVSVJLU19QQVJUSUFMX1JFU1VMVCA9CiAgICAgICAgICAgICBuZXcgS2V5PEJvb2xlYW4+KCJhbmRyb2lkLnF1aXJrcy5wYXJ0aWFsUmVzdWx0IiwgYm9vbGVhbi5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBIGZyYW1lIGNvdW50ZXIgc2V0IGJ5IHRoZSBmcmFtZXdvcmsuIFRoaXMgdmFsdWUgbW9ub3RvbmljYWxseQorICAgICAqIDxwPkEgZnJhbWUgY291bnRlciBzZXQgYnkgdGhlIGZyYW1ld29yay4gVGhpcyB2YWx1ZSBtb25vdG9uaWNhbGx5CiAgICAgICogaW5jcmVhc2VzIHdpdGggZXZlcnkgbmV3IHJlc3VsdCAodGhhdCBpcywgZWFjaCBuZXcgcmVzdWx0IGhhcyBhIHVuaXF1ZQotICAgICAqIGZyYW1lQ291bnQgdmFsdWUpLgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBSZXNldCBvbiByZWxlYXNlKCkKLSAgICAgKiA8L3A+CisgICAgICogZnJhbWVDb3VudCB2YWx1ZSkuPC9wPgorICAgICAqIDxwPlJlc2V0IG9uIHJlbGVhc2UoKTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxJbnRlZ2VyPiBSRVFVRVNUX0ZSQU1FX0NPVU5UID0KICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQucmVxdWVzdC5mcmFtZUNvdW50IiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEFuIGFwcGxpY2F0aW9uLXNwZWNpZmllZCBJRCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgKiA8cD5BbiBhcHBsaWNhdGlvbi1zcGVjaWZpZWQgSUQgZm9yIHRoZSBjdXJyZW50CiAgICAgICogcmVxdWVzdC4gTXVzdCBiZSBtYWludGFpbmVkIHVuY2hhbmdlZCBpbiBvdXRwdXQKLSAgICAgKiBmcmFtZQotICAgICAqIDwvcD4KLSAgICAgKgorICAgICAqIGZyYW1lPC9wPgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8SW50ZWdlcj4gUkVRVUVTVF9JRCA9CiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLnJlcXVlc3QuaWQiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogKHgsIHksIHdpZHRoLCBoZWlnaHQpLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBBIHJlY3RhbmdsZSB3aXRoIHRoZSB0b3AtbGV2ZWwgY29ybmVyIG9mICh4LHkpIGFuZCBzaXplCisgICAgICogPHA+KHgsIHksIHdpZHRoLCBoZWlnaHQpLjwvcD4KKyAgICAgKiA8cD5BIHJlY3RhbmdsZSB3aXRoIHRoZSB0b3AtbGV2ZWwgY29ybmVyIG9mICh4LHkpIGFuZCBzaXplCiAgICAgICogKHdpZHRoLCBoZWlnaHQpLiBUaGUgcmVnaW9uIG9mIHRoZSBzZW5zb3IgdGhhdCBpcyB1c2VkIGZvcgogICAgICAqIG91dHB1dC4gRWFjaCBzdHJlYW0gbXVzdCB1c2UgdGhpcyByZWN0YW5nbGUgdG8gcHJvZHVjZSBpdHMKICAgICAgKiBvdXRwdXQsIGNyb3BwaW5nIHRvIGEgc21hbGxlciByZWdpb24gaWYgbmVjZXNzYXJ5IHRvCi0gICAgICogbWFpbnRhaW4gdGhlIHN0cmVhbSdzIGFzcGVjdCByYXRpby4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSEFMMi54IHVzZXMgb25seSAoeCwgeSwgd2lkdGgpCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIEFueSBhZGRpdGlvbmFsIHBlci1zdHJlYW0gY3JvcHBpbmcgbXVzdCBiZSBkb25lIHRvCi0gICAgICogbWF4aW1pemUgdGhlIGZpbmFsIHBpeGVsIGFyZWEgb2YgdGhlIHN0cmVhbS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSBjcm9wIHJlZ2lvbiBpcyBzZXQgdG8gYSA0OjMgYXNwZWN0CisgICAgICogbWFpbnRhaW4gdGhlIHN0cmVhbSdzIGFzcGVjdCByYXRpby48L3A+CisgICAgICogPHA+SEFMMi54IHVzZXMgb25seSAoeCwgeSwgd2lkdGgpPC9wPgorICAgICAqIDxwPkFueSBhZGRpdGlvbmFsIHBlci1zdHJlYW0gY3JvcHBpbmcgbXVzdCBiZSBkb25lIHRvCisgICAgICogbWF4aW1pemUgdGhlIGZpbmFsIHBpeGVsIGFyZWEgb2YgdGhlIHN0cmVhbS48L3A+CisgICAgICogPHA+Rm9yIGV4YW1wbGUsIGlmIHRoZSBjcm9wIHJlZ2lvbiBpcyBzZXQgdG8gYSA0OjMgYXNwZWN0CiAgICAgICogcmF0aW8sIHRoZW4gNDozIHN0cmVhbXMgc2hvdWxkIHVzZSB0aGUgZXhhY3QgY3JvcAogICAgICAqIHJlZ2lvbi4gMTY6OSBzdHJlYW1zIHNob3VsZCBmdXJ0aGVyIGNyb3AgdmVydGljYWxseQotICAgICAqIChsZXR0ZXJib3gpLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBDb252ZXJzZWx5LCBpZiB0aGUgY3JvcCByZWdpb24gaXMgc2V0IHRvIGEgMTY6OSwgdGhlbiA0OjMKKyAgICAgKiAobGV0dGVyYm94KS48L3A+CisgICAgICogPHA+Q29udmVyc2VseSwgaWYgdGhlIGNyb3AgcmVnaW9uIGlzIHNldCB0byBhIDE2OjksIHRoZW4gNDozCiAgICAgICogb3V0cHV0cyBzaG91bGQgY3JvcCBob3Jpem9udGFsbHkgKHBpbGxhcmJveCksIGFuZCAxNjo5CiAgICAgICogc3RyZWFtcyBzaG91bGQgbWF0Y2ggZXhhY3RseS4gVGhlc2UgYWRkaXRpb25hbCBjcm9wcyBtdXN0Ci0gICAgICogYmUgY2VudGVyZWQgd2l0aGluIHRoZSBjcm9wIHJlZ2lvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIG91dHB1dCBzdHJlYW1zIG11c3QgbWFpbnRhaW4gc3F1YXJlIHBpeGVscyBhdCBhbGwKKyAgICAgKiBiZSBjZW50ZXJlZCB3aXRoaW4gdGhlIGNyb3AgcmVnaW9uLjwvcD4KKyAgICAgKiA8cD5UaGUgb3V0cHV0IHN0cmVhbXMgbXVzdCBtYWludGFpbiBzcXVhcmUgcGl4ZWxzIGF0IGFsbAogICAgICAqIHRpbWVzLCBubyBtYXR0ZXIgd2hhdCB0aGUgcmVsYXRpdmUgYXNwZWN0IHJhdGlvcyBvZiB0aGUKICAgICAgKiBjcm9wIHJlZ2lvbiBhbmQgdGhlIHN0cmVhbSBhcmUuICBOZWdhdGl2ZSB2YWx1ZXMgZm9yCiAgICAgICogY29ybmVyIGFyZSBhbGxvd2VkIGZvciByYXcgb3V0cHV0IGlmIGZ1bGwgcGl4ZWwgYXJyYXkgaXMKQEAgLTY3Nyw5OCArMTIyMiw3NCBAQAogICAgICAqIGJlIHNldCB0byBiZSBzbWFsbGVyIHRoYW4gZmxvb3IoIGFjdGl2ZUFycmF5U2l6ZS53aWR0aCAvCiAgICAgICogYW5kcm9pZC5zY2FsZXIubWF4RGlnaXRhbFpvb20gKSBhbmQgZmxvb3IoCiAgICAgICogYWN0aXZlQXJyYXlTaXplLmhlaWdodCAvIGFuZHJvaWQuc2NhbGVyLm1heERpZ2l0YWxab29tKSwKLSAgICAgKiByZXNwZWN0aXZlbHkuCi0gICAgICogPC9wPgorICAgICAqIHJlc3BlY3RpdmVseS48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8YW5kcm9pZC5ncmFwaGljcy5SZWN0PiBTQ0FMRVJfQ1JPUF9SRUdJT04gPQogICAgICAgICAgICAgbmV3IEtleTxhbmRyb2lkLmdyYXBoaWNzLlJlY3Q+KCJhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9uIiwgYW5kcm9pZC5ncmFwaGljcy5SZWN0LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIER1cmF0aW9uIGVhY2ggcGl4ZWwgaXMgZXhwb3NlZCB0bwotICAgICAqIGxpZ2h0LgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiB0aGUgc2Vuc29yIGNhbid0IGV4cG9zZSB0aGlzIGV4YWN0IGR1cmF0aW9uLCBpdCBzaG91bGQgc2hvcnRlbiB0aGUKLSAgICAgKiBkdXJhdGlvbiBleHBvc2VkIHRvIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHZhbHVlIChyYXRoZXIgdGhhbiBleHBvc2UgbG9uZ2VyKS4KLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogMS8xMDAwMCAtIDMwIHNlYyByYW5nZS4gTm8gYnVsYiBtb2RlCi0gICAgICogPC9wPgorICAgICAqIDxwPkR1cmF0aW9uIGVhY2ggcGl4ZWwgaXMgZXhwb3NlZCB0bworICAgICAqIGxpZ2h0LjwvcD4KKyAgICAgKiA8cD5JZiB0aGUgc2Vuc29yIGNhbid0IGV4cG9zZSB0aGlzIGV4YWN0IGR1cmF0aW9uLCBpdCBzaG91bGQgc2hvcnRlbiB0aGUKKyAgICAgKiBkdXJhdGlvbiBleHBvc2VkIHRvIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHZhbHVlIChyYXRoZXIgdGhhbiBleHBvc2UgbG9uZ2VyKS48L3A+CisgICAgICogPHA+MS8xMDAwMCAtIDMwIHNlYyByYW5nZS4gTm8gYnVsYiBtb2RlPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PExvbmc+IFNFTlNPUl9FWFBPU1VSRV9USU1FID0KICAgICAgICAgICAgIG5ldyBLZXk8TG9uZz4oImFuZHJvaWQuc2Vuc29yLmV4cG9zdXJlVGltZSIsIGxvbmcuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRHVyYXRpb24gZnJvbSBzdGFydCBvZiBmcmFtZSBleHBvc3VyZSB0bwotICAgICAqIHN0YXJ0IG9mIG5leHQgZnJhbWUgZXhwb3N1cmUKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogRXhwb3N1cmUgdGltZSBoYXMgcHJpb3JpdHksIHNvIGR1cmF0aW9uIGlzIHNldCB0bwotICAgICAqIG1heChkdXJhdGlvbiwgZXhwb3N1cmUgdGltZSArIG92ZXJoZWFkKQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5EdXJhdGlvbiBmcm9tIHN0YXJ0IG9mIGZyYW1lIGV4cG9zdXJlIHRvCisgICAgICogc3RhcnQgb2YgbmV4dCBmcmFtZSBleHBvc3VyZTwvcD4KKyAgICAgKiA8cD5FeHBvc3VyZSB0aW1lIGhhcyBwcmlvcml0eSwgc28gZHVyYXRpb24gaXMgc2V0IHRvCisgICAgICogbWF4KGR1cmF0aW9uLCBleHBvc3VyZSB0aW1lICsgb3ZlcmhlYWQpPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PExvbmc+IFNFTlNPUl9GUkFNRV9EVVJBVElPTiA9CiAgICAgICAgICAgICBuZXcgS2V5PExvbmc+KCJhbmRyb2lkLnNlbnNvci5mcmFtZUR1cmF0aW9uIiwgbG9uZy5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBHYWluIGFwcGxpZWQgdG8gaW1hZ2UgZGF0YS4gTXVzdCBiZQorICAgICAqIDxwPkdhaW4gYXBwbGllZCB0byBpbWFnZSBkYXRhLiBNdXN0IGJlCiAgICAgICogaW1wbGVtZW50ZWQgdGhyb3VnaCBhbmFsb2cgZ2FpbiBvbmx5IGlmIHNldCB0byB2YWx1ZXMKLSAgICAgKiBiZWxvdyAnbWF4aW11bSBhbmFsb2cgc2Vuc2l0aXZpdHknLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiB0aGUgc2Vuc29yIGNhbid0IGFwcGx5IHRoaXMgZXhhY3QgZ2FpbiwgaXQgc2hvdWxkIGxlc3NlbiB0aGUKLSAgICAgKiBnYWluIHRvIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHZhbHVlIChyYXRoZXIgdGhhbiBnYWluIG1vcmUpLgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBJU08gMTIyMzI6MjAwNiBSRUkgbWV0aG9kCi0gICAgICogPC9wPgorICAgICAqIGJlbG93ICdtYXhpbXVtIGFuYWxvZyBzZW5zaXRpdml0eScuPC9wPgorICAgICAqIDxwPklmIHRoZSBzZW5zb3IgY2FuJ3QgYXBwbHkgdGhpcyBleGFjdCBnYWluLCBpdCBzaG91bGQgbGVzc2VuIHRoZQorICAgICAqIGdhaW4gdG8gdGhlIG5lYXJlc3QgcG9zc2libGUgdmFsdWUgKHJhdGhlciB0aGFuIGdhaW4gbW9yZSkuPC9wPgorICAgICAqIDxwPklTTyAxMjIzMjoyMDA2IFJFSSBtZXRob2Q8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8SW50ZWdlcj4gU0VOU09SX1NFTlNJVElWSVRZID0KICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuc2Vuc29yLnNlbnNpdGl2aXR5IiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRpbWUgYXQgc3RhcnQgb2YgZXhwb3N1cmUgb2YgZmlyc3QKLSAgICAgKiByb3cKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogTW9ub3RvbmljLCBzaG91bGQgYmUgc3luY2VkIHRvIG90aGVyIHRpbWVzdGFtcHMgaW4KLSAgICAgKiBzeXN0ZW0KLSAgICAgKiA8L3A+CisgICAgICogPHA+VGltZSBhdCBzdGFydCBvZiBleHBvc3VyZSBvZiBmaXJzdAorICAgICAqIHJvdzwvcD4KKyAgICAgKiA8cD5Nb25vdG9uaWMsIHNob3VsZCBiZSBzeW5jZWQgdG8gb3RoZXIgdGltZXN0YW1wcyBpbgorICAgICAqIHN5c3RlbTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxMb25nPiBTRU5TT1JfVElNRVNUQU1QID0KICAgICAgICAgICAgIG5ldyBLZXk8TG9uZz4oImFuZHJvaWQuc2Vuc29yLnRpbWVzdGFtcCIsIGxvbmcuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhlIHRlbXBlcmF0dXJlIG9mIHRoZSBzZW5zb3IsIHNhbXBsZWQgYXQgdGhlIHRpbWUKLSAgICAgKiBleHBvc3VyZSBiZWdhbiBmb3IgdGhpcyBmcmFtZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIHRoZXJtYWwgZGlvZGUgYmVpbmcgcXVlcmllZCBzaG91bGQgYmUgaW5zaWRlIHRoZSBzZW5zb3IgUENCLCBvcgotICAgICAqIHNvbWV3aGVyZSBjbG9zZSB0byBpdC4KLSAgICAgKiA8L3A+CisgICAgICogPHA+VGhlIHRlbXBlcmF0dXJlIG9mIHRoZSBzZW5zb3IsIHNhbXBsZWQgYXQgdGhlIHRpbWUKKyAgICAgKiBleHBvc3VyZSBiZWdhbiBmb3IgdGhpcyBmcmFtZS48L3A+CisgICAgICogPHA+VGhlIHRoZXJtYWwgZGlvZGUgYmVpbmcgcXVlcmllZCBzaG91bGQgYmUgaW5zaWRlIHRoZSBzZW5zb3IgUENCLCBvcgorICAgICAqIHNvbWV3aGVyZSBjbG9zZSB0byBpdC48L3A+CisgICAgICogPHA+PGI+T3B0aW9uYWw8L2I+IC0gVGhpcyB2YWx1ZSBtYXkgYmUge0Bjb2RlIG51bGx9IG9uIHNvbWUgZGV2aWNlcy48L3A+CisgICAgICogPHA+PGI+RnVsbCBjYXBhYmlsaXR5PC9iPiAtCisgICAgICogUHJlc2VudCBvbiBhbGwgY2FtZXJhIGRldmljZXMgdGhhdCByZXBvcnQgYmVpbmcge0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNJTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTF9GVUxMIEhBUkRXQVJFX0xFVkVMX0ZVTEx9IGRldmljZXMgaW4gdGhlCisgICAgICoge0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNJTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTCBhbmRyb2lkLmluZm8uc3VwcG9ydGVkSGFyZHdhcmVMZXZlbH0ga2V5PC9wPgogICAgICAqCi0gICAgICogPGI+T3B0aW9uYWw8L2I+IC0gVGhpcyB2YWx1ZSBtYXkgYmUgbnVsbCBvbiBzb21lIGRldmljZXMuCi0gICAgICoKLSAgICAgKiA8Yj57QGxpbmsgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI0lORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMX0ZVTEwgSEFSRFdBUkVfTEVWRUxfRlVMTH08L2I+IC0KLSAgICAgKiBQcmVzZW50IG9uIGFsbCBkZXZpY2VzIHRoYXQgcmVwb3J0IGJlaW5nIEZVTEwgbGV2ZWwgaGFyZHdhcmUgZGV2aWNlcyBpbiB0aGUKLSAgICAgKiB7QGxpbmsgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzI0lORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMIEhBUkRXQVJFX0xFVkVMfSBrZXkuCisgICAgICogQHNlZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUwKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxGbG9hdD4gU0VOU09SX1RFTVBFUkFUVVJFID0KICAgICAgICAgICAgIG5ldyBLZXk8RmxvYXQ+KCJhbmRyb2lkLnNlbnNvci50ZW1wZXJhdHVyZSIsIGZsb2F0LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFN0YXRlIG9mIHRoZSBmYWNlIGRldGVjdG9yCi0gICAgICogdW5pdAotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIGZhY2UgZGV0ZWN0aW9uIGlzIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0CisgICAgICogPHA+U3RhdGUgb2YgdGhlIGZhY2UgZGV0ZWN0b3IKKyAgICAgKiB1bml0PC9wPgorICAgICAqIDxwPldoZXRoZXIgZmFjZSBkZXRlY3Rpb24gaXMgZW5hYmxlZCwgYW5kIHdoZXRoZXIgaXQKICAgICAgKiBzaG91bGQgb3V0cHV0IGp1c3QgdGhlIGJhc2ljIGZpZWxkcyBvciB0aGUgZnVsbCBzZXQgb2YKICAgICAgKiBmaWVsZHMuIFZhbHVlIG11c3QgYmUgb25lIG9mIHRoZQotICAgICAqIGFuZHJvaWQuc3RhdGlzdGljcy5pbmZvLmF2YWlsYWJsZUZhY2VEZXRlY3RNb2Rlcy4KLSAgICAgKiA8L3A+CisgICAgICoge0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNTVEFUSVNUSUNTX0lORk9fQVZBSUxBQkxFX0ZBQ0VfREVURUNUX01PREVTIGFuZHJvaWQuc3RhdGlzdGljcy5pbmZvLmF2YWlsYWJsZUZhY2VEZXRlY3RNb2Rlc30uPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjU1RBVElTVElDU19JTkZPX0FWQUlMQUJMRV9GQUNFX0RFVEVDVF9NT0RFUwogICAgICAqIEBzZWUgI1NUQVRJU1RJQ1NfRkFDRV9ERVRFQ1RfTU9ERV9PRkYKICAgICAgKiBAc2VlICNTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREVfU0lNUExFCiAgICAgICogQHNlZSAjU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX0ZVTEwKQEAgLTc3NywxMjkgKzEyOTgsMTM3IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLnN0YXRpc3RpY3MuZmFjZURldGVjdE1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiB1bmlxdWUgSURzIGZvciBkZXRlY3RlZAotICAgICAqIGZhY2VzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE9ubHkgYXZhaWxhYmxlIGlmIGZhY2VEZXRlY3RNb2RlID09IEZVTEwKLSAgICAgKiA8L3A+CisgICAgICogPHA+TGlzdCBvZiB1bmlxdWUgSURzIGZvciBkZXRlY3RlZAorICAgICAqIGZhY2VzPC9wPgorICAgICAqIDxwPk9ubHkgYXZhaWxhYmxlIGlmIGZhY2VEZXRlY3RNb2RlID09IEZVTEw8L3A+CisgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxpbnRbXT4gU1RBVElTVElDU19GQUNFX0lEUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGludFtdPigiYW5kcm9pZC5zdGF0aXN0aWNzLmZhY2VJZHMiLCBpbnRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBMaXN0IG9mIGxhbmRtYXJrcyBmb3IgZGV0ZWN0ZWQKLSAgICAgKiBmYWNlcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBPbmx5IGF2YWlsYWJsZSBpZiBmYWNlRGV0ZWN0TW9kZSA9PSBGVUxMCi0gICAgICogPC9wPgorICAgICAqIDxwPkxpc3Qgb2YgbGFuZG1hcmtzIGZvciBkZXRlY3RlZAorICAgICAqIGZhY2VzPC9wPgorICAgICAqIDxwPk9ubHkgYXZhaWxhYmxlIGlmIGZhY2VEZXRlY3RNb2RlID09IEZVTEw8L3A+CisgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxpbnRbXT4gU1RBVElTVElDU19GQUNFX0xBTkRNQVJLUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGludFtdPigiYW5kcm9pZC5zdGF0aXN0aWNzLmZhY2VMYW5kbWFya3MiLCBpbnRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBMaXN0IG9mIHRoZSBib3VuZGluZyByZWN0YW5nbGVzIGZvciBkZXRlY3RlZAotICAgICAqIGZhY2VzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE9ubHkgYXZhaWxhYmxlIGlmIGZhY2VEZXRlY3RNb2RlICE9IE9GRgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIHRoZSBib3VuZGluZyByZWN0YW5nbGVzIGZvciBkZXRlY3RlZAorICAgICAqIGZhY2VzPC9wPgorICAgICAqIDxwPk9ubHkgYXZhaWxhYmxlIGlmIGZhY2VEZXRlY3RNb2RlICE9IE9GRjwvcD4KKyAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGFuZHJvaWQuZ3JhcGhpY3MuUmVjdFtdPiBTVEFUSVNUSUNTX0ZBQ0VfUkVDVEFOR0xFUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGFuZHJvaWQuZ3JhcGhpY3MuUmVjdFtdPigiYW5kcm9pZC5zdGF0aXN0aWNzLmZhY2VSZWN0YW5nbGVzIiwgYW5kcm9pZC5ncmFwaGljcy5SZWN0W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiB0aGUgZmFjZSBjb25maWRlbmNlIHNjb3JlcyBmb3IKLSAgICAgKiBkZXRlY3RlZCBmYWNlcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBPbmx5IGF2YWlsYWJsZSBpZiBmYWNlRGV0ZWN0TW9kZSAhPSBPRkYuIFRoZSB2YWx1ZSBzaG91bGQgYmUKLSAgICAgKiBtZWFuaW5nZnVsIChmb3IgZXhhbXBsZSwgc2V0dGluZyAxMDAgYXQgYWxsIHRpbWVzIGlzIGlsbGVnYWwpLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIHRoZSBmYWNlIGNvbmZpZGVuY2Ugc2NvcmVzIGZvcgorICAgICAqIGRldGVjdGVkIGZhY2VzPC9wPgorICAgICAqIDxwPk9ubHkgYXZhaWxhYmxlIGlmIGZhY2VEZXRlY3RNb2RlICE9IE9GRi4gVGhlIHZhbHVlIHNob3VsZCBiZQorICAgICAqIG1lYW5pbmdmdWwgKGZvciBleGFtcGxlLCBzZXR0aW5nIDEwMCBhdCBhbGwgdGltZXMgaXMgaWxsZWdhbCkuPC9wPgorICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Ynl0ZVtdPiBTVEFUSVNUSUNTX0ZBQ0VfU0NPUkVTID0KICAgICAgICAgICAgIG5ldyBLZXk8Ynl0ZVtdPigiYW5kcm9pZC5zdGF0aXN0aWNzLmZhY2VTY29yZXMiLCBieXRlW10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQSBsb3ctcmVzb2x1dGlvbiBtYXAgb2YgbGVucyBzaGFkaW5nLCBwZXIKLSAgICAgKiBjb2xvciBjaGFubmVsCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIEFzc3VtZSBiaWxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIG1hcC4gVGhlIGxlYXN0Ci0gICAgICogc2hhZGVkIHNlY3Rpb24gb2YgdGhlIGltYWdlIHNob3VsZCBoYXZlIGEgZ2FpbiBmYWN0b3IKLSAgICAgKiBvZiAxOyBhbGwgb3RoZXIgc2VjdGlvbnMgc2hvdWxkIGhhdmUgZ2FpbnMgYWJvdmUgMS4KLSAgICAgKiB0aGUgbWFwIHNob3VsZCBiZSBvbiB0aGUgb3JkZXIgb2YgMzAtNDAgcm93cywgYW5kCi0gICAgICogbXVzdCBiZSBzbWFsbGVyIHRoYW4gNjR4NjQuCi0gICAgICogPC9wPjxwPgotICAgICAqIFdoZW4gYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZSA9IFRSQU5TRk9STV9NQVRSSVgsIHRoZSBtYXAKLSAgICAgKiBtdXN0IHRha2UgaW50byBhY2NvdW50IHRoZSBjb2xvckNvcnJlY3Rpb24gc2V0dGluZ3MuCi0gICAgICogPC9wPgorICAgICAqIDxwPlRoZSBzaGFkaW5nIG1hcCBpcyBhIGxvdy1yZXNvbHV0aW9uIGZsb2F0aW5nLXBvaW50IG1hcAorICAgICAqIHRoYXQgbGlzdHMgdGhlIGNvZWZmaWNpZW50cyB1c2VkIHRvIGNvcnJlY3QgZm9yIHZpZ25ldHRpbmcsIGZvciBlYWNoCisgICAgICogQmF5ZXIgY29sb3IgY2hhbm5lbC48L3A+CisgICAgICogPHA+VGhlIGxlYXN0IHNoYWRlZCBzZWN0aW9uIG9mIHRoZSBpbWFnZSBzaG91bGQgaGF2ZSBhIGdhaW4gZmFjdG9yCisgICAgICogb2YgMTsgYWxsIG90aGVyIHNlY3Rpb25zIHNob3VsZCBoYXZlIGdhaW5zIGFib3ZlIDEuPC9wPgorICAgICAqIDxwPldoZW4ge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fTU9ERSBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5tb2RlfSA9IFRSQU5TRk9STV9NQVRSSVgsIHRoZSBtYXAKKyAgICAgKiBtdXN0IHRha2UgaW50byBhY2NvdW50IHRoZSBjb2xvckNvcnJlY3Rpb24gc2V0dGluZ3MuPC9wPgorICAgICAqIDxwPlRoZSBzaGFkaW5nIG1hcCBpcyBmb3IgdGhlIGVudGlyZSBhY3RpdmUgcGl4ZWwgYXJyYXksIGFuZCBpcyBub3QKKyAgICAgKiBhZmZlY3RlZCBieSB0aGUgY3JvcCByZWdpb24gc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0LiBFYWNoIHNoYWRpbmcgbWFwCisgICAgICogZW50cnkgaXMgdGhlIHZhbHVlIG9mIHRoZSBzaGFkaW5nIGNvbXBlbnNhdGlvbiBtYXAgb3ZlciBhIHNwZWNpZmljCisgICAgICogcGl4ZWwgb24gdGhlIHNlbnNvci4gIFNwZWNpZmljYWxseSwgd2l0aCBhIChOIHggTSkgcmVzb2x1dGlvbiBzaGFkaW5nCisgICAgICogbWFwLCBhbmQgYW4gYWN0aXZlIHBpeGVsIGFycmF5IHNpemUgKFcgeCBIKSwgc2hhZGluZyBtYXAgZW50cnkKKyAgICAgKiAoeCx5KSDPtSAoMCAuLi4gTi0xLCAwIC4uLiBNLTEpIGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2hhZGluZyBtYXAgYXQKKyAgICAgKiBwaXhlbCAoICgoVy0xKS8oTi0xKSkgKiB4LCAoKEgtMSkvKE0tMSkpICogeSkgZm9yIHRoZSBmb3VyIGNvbG9yIGNoYW5uZWxzLgorICAgICAqIFRoZSBtYXAgaXMgYXNzdW1lZCB0byBiZSBiaWxpbmVhcmx5IGludGVycG9sYXRlZCBiZXR3ZWVuIHRoZSBzYW1wbGUgcG9pbnRzLjwvcD4KKyAgICAgKiA8cD5UaGUgY2hhbm5lbCBvcmRlciBpcyBbUiwgR2V2ZW4sIEdvZGQsIEJdLCB3aGVyZSBHZXZlbiBpcyB0aGUgZ3JlZW4KKyAgICAgKiBjaGFubmVsIGZvciB0aGUgZXZlbiByb3dzIG9mIGEgQmF5ZXIgcGF0dGVybiwgYW5kIEdvZGQgaXMgdGhlIG9kZCByb3dzLgorICAgICAqIFRoZSBzaGFkaW5nIG1hcCBpcyBzdG9yZWQgaW4gYSBmdWxseSBpbnRlcmxlYXZlZCBmb3JtYXQsIGFuZCBpdHMgc2l6ZQorICAgICAqIGlzIHByb3ZpZGVkIGluIHRoZSBjYW1lcmEgc3RhdGljIG1ldGFkYXRhIGJ5IHtAbGluayBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjTEVOU19JTkZPX1NIQURJTkdfTUFQX1NJWkUgYW5kcm9pZC5sZW5zLmluZm8uc2hhZGluZ01hcFNpemV9LjwvcD4KKyAgICAgKiA8cD5UaGUgc2hhZGluZyBtYXAgc2hvdWxkIGhhdmUgb24gdGhlIG9yZGVyIG9mIDMwLTQwIHJvd3MgYW5kIGNvbHVtbnMsCisgICAgICogYW5kIG11c3QgYmUgc21hbGxlciB0aGFuIDY0eDY0LjwvcD4KKyAgICAgKiA8cD5BcyBhbiBleGFtcGxlLCBnaXZlbiBhIHZlcnkgc21hbGwgbWFwIGRlZmluZWQgYXM6PC9wPgorICAgICAqIDxwcmU+PGNvZGU+e0BsaW5rIENhbWVyYUNoYXJhY3RlcmlzdGljcyNMRU5TX0lORk9fU0hBRElOR19NQVBfU0laRSBhbmRyb2lkLmxlbnMuaW5mby5zaGFkaW5nTWFwU2l6ZX0gPSBbIDQsIDMgXQorICAgICAqIHtAbGluayBDYXB0dXJlUmVzdWx0I1NUQVRJU1RJQ1NfTEVOU19TSEFESU5HX01BUCBhbmRyb2lkLnN0YXRpc3RpY3MubGVuc1NoYWRpbmdNYXB9ID0KKyAgICAgKiBbIDEuMywgMS4yLCAxLjE1LCAxLjIsICAxLjIsIDEuMiwgMS4xNSwgMS4yLAorICAgICAqIDEuMSwgMS4yLCAxLjIsIDEuMiwgIDEuMywgMS4yLCAxLjMsIDEuMywKKyAgICAgKiAxLjIsIDEuMiwgMS4yNSwgMS4xLCAgMS4xLCAxLjEsIDEuMSwgMS4wLAorICAgICAqIDEuMCwgMS4wLCAxLjAsIDEuMCwgIDEuMiwgMS4zLCAxLjI1LCAxLjIsCisgICAgICogMS4zLCAxLjIsIDEuMiwgMS4zLCAgIDEuMiwgMS4xNSwgMS4xLCAxLjIsCisgICAgICogMS4yLCAxLjEsIDEuMCwgMS4yLCAgMS4zLCAxLjE1LCAxLjIsIDEuMyBdCisgICAgICogPC9jb2RlPjwvcHJlPgorICAgICAqIDxwPlRoZSBsb3ctcmVzb2x1dGlvbiBzY2FsaW5nIG1hcCBpbWFnZXMgZm9yIGVhY2ggY2hhbm5lbCBhcmUKKyAgICAgKiAoZGlzcGxheWVkIHVzaW5nIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbik6PC9wPgorICAgICAqIDxwPjxpbWcgYWx0PSJSZWQgbGVucyBzaGFkaW5nIG1hcCIgc3JjPSIuLi8uLi8uLi8uLi9pbWFnZXMvY2FtZXJhMi9tZXRhZGF0YS9hbmRyb2lkLnN0YXRpc3RpY3MubGVuc1NoYWRpbmdNYXAvcmVkX3NoYWRpbmcucG5nIiAvPgorICAgICAqIDxpbWcgYWx0PSJHcmVlbiAoZXZlbiByb3dzKSBsZW5zIHNoYWRpbmcgbWFwIiBzcmM9Ii4uLy4uLy4uLy4uL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9ncmVlbl9lX3NoYWRpbmcucG5nIiAvPgorICAgICAqIDxpbWcgYWx0PSJHcmVlbiAob2RkIHJvd3MpIGxlbnMgc2hhZGluZyBtYXAiIHNyYz0iLi4vLi4vLi4vLi4vaW1hZ2VzL2NhbWVyYTIvbWV0YWRhdGEvYW5kcm9pZC5zdGF0aXN0aWNzLmxlbnNTaGFkaW5nTWFwL2dyZWVuX29fc2hhZGluZy5wbmciIC8+CisgICAgICogPGltZyBhbHQ9IkJsdWUgbGVucyBzaGFkaW5nIG1hcCIgc3JjPSIuLi8uLi8uLi8uLi9pbWFnZXMvY2FtZXJhMi9tZXRhZGF0YS9hbmRyb2lkLnN0YXRpc3RpY3MubGVuc1NoYWRpbmdNYXAvYmx1ZV9zaGFkaW5nLnBuZyIgLz48L3A+CisgICAgICogPHA+QXMgYSB2aXN1YWxpemF0aW9uIG9ubHksIGludmVydGluZyB0aGUgZnVsbC1jb2xvciBtYXAgdG8gcmVjb3ZlciBhbgorICAgICAqIGltYWdlIG9mIGEgZ3JheSB3YWxsICh1c2luZyBiaWN1YmljIGludGVycG9sYXRpb24gZm9yIHZpc3VhbCBxdWFsaXR5KSBhcyBjYXB0dXJlZCBieSB0aGUgc2Vuc29yIGdpdmVzOjwvcD4KKyAgICAgKiA8cD48aW1nIGFsdD0iSW1hZ2Ugb2YgYSB1bmlmb3JtIHdoaXRlIHdhbGwgKGludmVyc2Ugc2hhZGluZyBtYXApIiBzcmM9Ii4uLy4uLy4uLy4uL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9pbnZfc2hhZGluZy5wbmciIC8+PC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT0xPUl9DT1JSRUNUSU9OX01PREUKKyAgICAgKiBAc2VlIENhbWVyYUNoYXJhY3RlcmlzdGljcyNMRU5TX0lORk9fU0hBRElOR19NQVBfU0laRQorICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNTVEFUSVNUSUNTX0xFTlNfU0hBRElOR19NQVAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxmbG9hdFtdPiBTVEFUSVNUSUNTX0xFTlNfU0hBRElOR19NQVAgPQogICAgICAgICAgICAgbmV3IEtleTxmbG9hdFtdPigiYW5kcm9pZC5zdGF0aXN0aWNzLmxlbnNTaGFkaW5nTWFwIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgYmVzdC1maXQgY29sb3IgY2hhbm5lbCBnYWlucyBjYWxjdWxhdGVkCi0gICAgICogYnkgdGhlIEhBTCdzIHN0YXRpc3RpY3MgdW5pdHMgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBmcmFtZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIG1heSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgZ2FpbnMgdXNlZCBmb3IgdGhpcyBmcmFtZSwKKyAgICAgKiA8cD5UaGUgYmVzdC1maXQgY29sb3IgY2hhbm5lbCBnYWlucyBjYWxjdWxhdGVkCisgICAgICogYnkgdGhlIEhBTCdzIHN0YXRpc3RpY3MgdW5pdHMgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBmcmFtZTwvcD4KKyAgICAgKiA8cD5UaGlzIG1heSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgZ2FpbnMgdXNlZCBmb3IgdGhpcyBmcmFtZSwKICAgICAgKiBzaW5jZSBzdGF0aXN0aWNzIHByb2Nlc3Npbmcgb24gZGF0YSBmcm9tIGEgbmV3IGZyYW1lCiAgICAgICogdHlwaWNhbGx5IGNvbXBsZXRlcyBhZnRlciB0aGUgdHJhbnNmb3JtIGhhcyBhbHJlYWR5IGJlZW4KLSAgICAgKiBhcHBsaWVkIHRvIHRoYXQgZnJhbWUuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSA0IGNoYW5uZWwgZ2FpbnMgYXJlIGRlZmluZWQgaW4gQmF5ZXIgZG9tYWluLAotICAgICAqIHNlZSBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5nYWlucyBmb3IgZGV0YWlscy4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyB2YWx1ZSBzaG91bGQgYWx3YXlzIGJlIGNhbGN1bGF0ZWQgYnkgdGhlIEFXQiBibG9jaywKLSAgICAgKiByZWdhcmRsZXNzIG9mIHRoZSBhbmRyb2lkLmNvbnRyb2wuKiBjdXJyZW50IHZhbHVlcy4KLSAgICAgKiA8L3A+CisgICAgICogYXBwbGllZCB0byB0aGF0IGZyYW1lLjwvcD4KKyAgICAgKiA8cD5UaGUgNCBjaGFubmVsIGdhaW5zIGFyZSBkZWZpbmVkIGluIEJheWVyIGRvbWFpbiwKKyAgICAgKiBzZWUge0BsaW5rIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fR0FJTlMgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24uZ2FpbnN9IGZvciBkZXRhaWxzLjwvcD4KKyAgICAgKiA8cD5UaGlzIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgY2FsY3VsYXRlZCBieSB0aGUgQVdCIGJsb2NrLAorICAgICAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGFuZHJvaWQuY29udHJvbC4qIGN1cnJlbnQgdmFsdWVzLjwvcD4KKyAgICAgKiA8cD48Yj5PcHRpb25hbDwvYj4gLSBUaGlzIHZhbHVlIG1heSBiZSB7QGNvZGUgbnVsbH0gb24gc29tZSBkZXZpY2VzLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9HQUlOUworICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gU1RBVElTVElDU19QUkVESUNURURfQ09MT1JfR0FJTlMgPQogICAgICAgICAgICAgbmV3IEtleTxmbG9hdFtdPigiYW5kcm9pZC5zdGF0aXN0aWNzLnByZWRpY3RlZENvbG9yR2FpbnMiLCBmbG9hdFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSBiZXN0LWZpdCBjb2xvciB0cmFuc2Zvcm0gbWF0cml4IGVzdGltYXRlCisgICAgICogPHA+VGhlIGJlc3QtZml0IGNvbG9yIHRyYW5zZm9ybSBtYXRyaXggZXN0aW1hdGUKICAgICAgKiBjYWxjdWxhdGVkIGJ5IHRoZSBIQUwncyBzdGF0aXN0aWNzIHVuaXRzIGZvciB0aGUgY3VycmVudAotICAgICAqIG91dHB1dCBmcmFtZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgSEFMIG11c3QgcHJvdmlkZSB0aGUgZXN0aW1hdGUgZnJvbSBpdHMKKyAgICAgKiBvdXRwdXQgZnJhbWU8L3A+CisgICAgICogPHA+VGhlIEhBTCBtdXN0IHByb3ZpZGUgdGhlIGVzdGltYXRlIGZyb20gaXRzCiAgICAgICogc3RhdGlzdGljcyB1bml0IG9uIHRoZSB3aGl0ZSBiYWxhbmNlIHRyYW5zZm9ybXMgdG8gdXNlCiAgICAgICogZm9yIHRoZSBuZXh0IGZyYW1lLiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGUgSEFMIGJlbGlldmVzCiAgICAgICogYXJlIHRoZSBiZXN0IGZpdCBmb3IgdGhlIGN1cnJlbnQgb3V0cHV0IGZyYW1lLiBUaGlzIG1heQogICAgICAqIGJlIGRpZmZlcmVudCB0aGFuIHRoZSB0cmFuc2Zvcm0gdXNlZCBmb3IgdGhpcyBmcmFtZSwgc2luY2UKICAgICAgKiBzdGF0aXN0aWNzIHByb2Nlc3Npbmcgb24gZGF0YSBmcm9tIGEgbmV3IGZyYW1lIHR5cGljYWxseQogICAgICAqIGNvbXBsZXRlcyBhZnRlciB0aGUgdHJhbnNmb3JtIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCB0bwotICAgICAqIHRoYXQgZnJhbWUuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZXNlIGVzdGltYXRlcyBtdXN0IGJlIHByb3ZpZGVkIGZvciBhbGwgZnJhbWVzLCBldmVuIGlmCi0gICAgICogY2FwdHVyZSBzZXR0aW5ncyBhbmQgY29sb3IgdHJhbnNmb3JtcyBhcmUgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyB2YWx1ZSBzaG91bGQgYWx3YXlzIGJlIGNhbGN1bGF0ZWQgYnkgdGhlIEFXQiBibG9jaywKLSAgICAgKiByZWdhcmRsZXNzIG9mIHRoZSBhbmRyb2lkLmNvbnRyb2wuKiBjdXJyZW50IHZhbHVlcy4KLSAgICAgKiA8L3A+CisgICAgICogdGhhdCBmcmFtZS48L3A+CisgICAgICogPHA+VGhlc2UgZXN0aW1hdGVzIG11c3QgYmUgcHJvdmlkZWQgZm9yIGFsbCBmcmFtZXMsIGV2ZW4gaWYKKyAgICAgKiBjYXB0dXJlIHNldHRpbmdzIGFuZCBjb2xvciB0cmFuc2Zvcm1zIGFyZSBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uLjwvcD4KKyAgICAgKiA8cD5UaGlzIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgY2FsY3VsYXRlZCBieSB0aGUgQVdCIGJsb2NrLAorICAgICAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGFuZHJvaWQuY29udHJvbC4qIGN1cnJlbnQgdmFsdWVzLjwvcD4KKyAgICAgKiA8cD48Yj5PcHRpb25hbDwvYj4gLSBUaGlzIHZhbHVlIG1heSBiZSB7QGNvZGUgbnVsbH0gb24gc29tZSBkZXZpY2VzLjwvcD4KKyAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PFJhdGlvbmFsW10+IFNUQVRJU1RJQ1NfUFJFRElDVEVEX0NPTE9SX1RSQU5TRk9STSA9CiAgICAgICAgICAgICBuZXcgS2V5PFJhdGlvbmFsW10+KCJhbmRyb2lkLnN0YXRpc3RpY3MucHJlZGljdGVkQ29sb3JUcmFuc2Zvcm0iLCBSYXRpb25hbFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSBIQUwgZXN0aW1hdGVkIHNjZW5lIGlsbHVtaW5hdGlvbiBsaWdodGluZwotICAgICAqIGZyZXF1ZW5jeQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBSZXBvcnQgTk9ORSBpZiB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBmbGlja2VyaW5nCi0gICAgICogaWxsdW1pbmF0aW9uCi0gICAgICogPC9wPgorICAgICAqIDxwPlRoZSBIQUwgZXN0aW1hdGVkIHNjZW5lIGlsbHVtaW5hdGlvbiBsaWdodGluZworICAgICAqIGZyZXF1ZW5jeTwvcD4KKyAgICAgKiA8cD5SZXBvcnQgTk9ORSBpZiB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBmbGlja2VyaW5nCisgICAgICogaWxsdW1pbmF0aW9uPC9wPgogICAgICAqIEBzZWUgI1NUQVRJU1RJQ1NfU0NFTkVfRkxJQ0tFUl9OT05FCiAgICAgICogQHNlZSAjU1RBVElTVElDU19TQ0VORV9GTElDS0VSXzUwSFoKICAgICAgKiBAc2VlICNTVEFUSVNUSUNTX1NDRU5FX0ZMSUNLRVJfNjBIWgpAQCAtOTA4LDYxICsxNDM3LDU0IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLnN0YXRpc3RpY3Muc2NlbmVGbGlja2VyIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRhYmxlIG1hcHBpbmcgYmx1ZSBpbnB1dCB2YWx1ZXMgdG8gb3V0cHV0Ci0gICAgICogdmFsdWVzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRvbmVtYXBwaW5nIC8gY29udHJhc3QgLyBnYW1tYSBjdXJ2ZSBmb3IgdGhlIGJsdWUKLSAgICAgKiBjaGFubmVsLCB0byB1c2Ugd2hlbiBhbmRyb2lkLnRvbmVtYXAubW9kZSBpcyBDT05UUkFTVF9DVVJWRS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogU2VlIGFuZHJvaWQudG9uZW1hcC5jdXJ2ZVJlZCBmb3IgbW9yZSBkZXRhaWxzLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UYWJsZSBtYXBwaW5nIGJsdWUgaW5wdXQgdmFsdWVzIHRvIG91dHB1dAorICAgICAqIHZhbHVlczwvcD4KKyAgICAgKiA8cD5Ub25lbWFwcGluZyAvIGNvbnRyYXN0IC8gZ2FtbWEgY3VydmUgZm9yIHRoZSBibHVlCisgICAgICogY2hhbm5lbCwgdG8gdXNlIHdoZW4ge0BsaW5rIENhcHR1cmVSZXF1ZXN0I1RPTkVNQVBfTU9ERSBhbmRyb2lkLnRvbmVtYXAubW9kZX0gaXMgQ09OVFJBU1RfQ1VSVkUuPC9wPgorICAgICAqIDxwPlNlZSB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjVE9ORU1BUF9DVVJWRV9SRUQgYW5kcm9pZC50b25lbWFwLmN1cnZlUmVkfSBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjVE9ORU1BUF9DVVJWRV9SRUQKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I1RPTkVNQVBfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGZsb2F0W10+IFRPTkVNQVBfQ1VSVkVfQkxVRSA9CiAgICAgICAgICAgICBuZXcgS2V5PGZsb2F0W10+KCJhbmRyb2lkLnRvbmVtYXAuY3VydmVCbHVlIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUYWJsZSBtYXBwaW5nIGdyZWVuIGlucHV0IHZhbHVlcyB0byBvdXRwdXQKLSAgICAgKiB2YWx1ZXMKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogVG9uZW1hcHBpbmcgLyBjb250cmFzdCAvIGdhbW1hIGN1cnZlIGZvciB0aGUgZ3JlZW4KLSAgICAgKiBjaGFubmVsLCB0byB1c2Ugd2hlbiBhbmRyb2lkLnRvbmVtYXAubW9kZSBpcyBDT05UUkFTVF9DVVJWRS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogU2VlIGFuZHJvaWQudG9uZW1hcC5jdXJ2ZVJlZCBmb3IgbW9yZSBkZXRhaWxzLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UYWJsZSBtYXBwaW5nIGdyZWVuIGlucHV0IHZhbHVlcyB0byBvdXRwdXQKKyAgICAgKiB2YWx1ZXM8L3A+CisgICAgICogPHA+VG9uZW1hcHBpbmcgLyBjb250cmFzdCAvIGdhbW1hIGN1cnZlIGZvciB0aGUgZ3JlZW4KKyAgICAgKiBjaGFubmVsLCB0byB1c2Ugd2hlbiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjVE9ORU1BUF9NT0RFIGFuZHJvaWQudG9uZW1hcC5tb2RlfSBpcyBDT05UUkFTVF9DVVJWRS48L3A+CisgICAgICogPHA+U2VlIHtAbGluayBDYXB0dXJlUmVxdWVzdCNUT05FTUFQX0NVUlZFX1JFRCBhbmRyb2lkLnRvbmVtYXAuY3VydmVSZWR9IGZvciBtb3JlIGRldGFpbHMuPC9wPgorICAgICAqCisgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNUT05FTUFQX0NVUlZFX1JFRAorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjVE9ORU1BUF9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gVE9ORU1BUF9DVVJWRV9HUkVFTiA9CiAgICAgICAgICAgICBuZXcgS2V5PGZsb2F0W10+KCJhbmRyb2lkLnRvbmVtYXAuY3VydmVHcmVlbiIsIGZsb2F0W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGFibGUgbWFwcGluZyByZWQgaW5wdXQgdmFsdWVzIHRvIG91dHB1dAotICAgICAqIHZhbHVlcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUb25lbWFwcGluZyAvIGNvbnRyYXN0IC8gZ2FtbWEgY3VydmUgZm9yIHRoZSByZWQKLSAgICAgKiBjaGFubmVsLCB0byB1c2Ugd2hlbiBhbmRyb2lkLnRvbmVtYXAubW9kZSBpcyBDT05UUkFTVF9DVVJWRS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogU2luY2UgdGhlIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIG1heSB2YXJ5IGRlcGVuZGluZyBvbgorICAgICAqIDxwPlRhYmxlIG1hcHBpbmcgcmVkIGlucHV0IHZhbHVlcyB0byBvdXRwdXQKKyAgICAgKiB2YWx1ZXM8L3A+CisgICAgICogPHA+VG9uZW1hcHBpbmcgLyBjb250cmFzdCAvIGdhbW1hIGN1cnZlIGZvciB0aGUgcmVkCisgICAgICogY2hhbm5lbCwgdG8gdXNlIHdoZW4ge0BsaW5rIENhcHR1cmVSZXF1ZXN0I1RPTkVNQVBfTU9ERSBhbmRyb2lkLnRvbmVtYXAubW9kZX0gaXMgQ09OVFJBU1RfQ1VSVkUuPC9wPgorICAgICAqIDxwPlNpbmNlIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHJhbmdlcyBtYXkgdmFyeSBkZXBlbmRpbmcgb24KICAgICAgKiB0aGUgY2FtZXJhIHBpcGVsaW5lLCB0aGUgaW5wdXQgYW5kIG91dHB1dCBwaXhlbCB2YWx1ZXMKICAgICAgKiBhcmUgcmVwcmVzZW50ZWQgYnkgbm9ybWFsaXplZCBmbG9hdGluZy1wb2ludCB2YWx1ZXMKLSAgICAgKiBiZXR3ZWVuIDAgYW5kIDEsIHdpdGggMCA9PSBibGFjayBhbmQgMSA9PSB3aGl0ZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIGN1cnZlIHNob3VsZCBiZSBsaW5lYXJseSBpbnRlcnBvbGF0ZWQgYmV0d2VlbiB0aGUKKyAgICAgKiBiZXR3ZWVuIDAgYW5kIDEsIHdpdGggMCA9PSBibGFjayBhbmQgMSA9PSB3aGl0ZS48L3A+CisgICAgICogPHA+VGhlIGN1cnZlIHNob3VsZCBiZSBsaW5lYXJseSBpbnRlcnBvbGF0ZWQgYmV0d2VlbiB0aGUKICAgICAgKiBkZWZpbmVkIHBvaW50cy4gVGhlIHBvaW50cyB3aWxsIGJlIGxpc3RlZCBpbiBpbmNyZWFzaW5nCiAgICAgICogb3JkZXIgb2YgUF9JTi4gRm9yIGV4YW1wbGUsIGlmIHRoZSBhcnJheSBpczogWzAuMCwgMC4wLAotICAgICAqIDAuMywgMC41LCAxLjAsIDEuMF0sIHRoZW4gdGhlIGlucHV0LT5vdXRwdXQgbWFwcGluZwotICAgICAqIGZvciBhIGZldyBzYW1wbGUgcG9pbnRzIHdvdWxkIGJlOiAwIC0+IDAsIDAuMTUgLT4KLSAgICAgKiAwLjI1LCAwLjMgLT4gMC41LCAwLjUgLT4gMC42NAotICAgICAqIDwvcD4KKyAgICAgKiAwLjMsIDAuNSwgMS4wLCAxLjBdLCB0aGVuIHRoZSBpbnB1dC0mZ3Q7b3V0cHV0IG1hcHBpbmcKKyAgICAgKiBmb3IgYSBmZXcgc2FtcGxlIHBvaW50cyB3b3VsZCBiZTogMCAtJmd0OyAwLCAwLjE1IC0mZ3Q7CisgICAgICogMC4yNSwgMC4zIC0mZ3Q7IDAuNSwgMC41IC0mZ3Q7IDAuNjQ8L3A+CisgICAgICoKKyAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I1RPTkVNQVBfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGZsb2F0W10+IFRPTkVNQVBfQ1VSVkVfUkVEID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQudG9uZW1hcC5jdXJ2ZVJlZCIsIGZsb2F0W10uY2xhc3MpOwogCiAgICAgLyoqCisgICAgICoKICAgICAgKiBAc2VlICNUT05FTUFQX01PREVfQ09OVFJBU1RfQ1VSVkUKICAgICAgKiBAc2VlICNUT05FTUFQX01PREVfRkFTVAogICAgICAqIEBzZWUgI1RPTkVNQVBfTU9ERV9ISUdIX1FVQUxJVFkKQEAgLTk3MSw0OSArMTQ5MywzMCBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC50b25lbWFwLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhpcyBMRUQgaXMgbm9taW5hbGx5IHVzZWQgdG8gaW5kaWNhdGUgdG8gdGhlIHVzZXIKKyAgICAgKiA8cD5UaGlzIExFRCBpcyBub21pbmFsbHkgdXNlZCB0byBpbmRpY2F0ZSB0byB0aGUgdXNlcgogICAgICAqIHRoYXQgdGhlIGNhbWVyYSBpcyBwb3dlcmVkIG9uIGFuZCBtYXkgYmUgc3RyZWFtaW5nIGltYWdlcyBiYWNrIHRvIHRoZQogICAgICAqIEFwcGxpY2F0aW9uIFByb2Nlc3Nvci4gSW4gY2VydGFpbiByYXJlIGNpcmN1bXN0YW5jZXMsIHRoZSBPUyBtYXkKICAgICAgKiBkaXNhYmxlIHRoaXMgd2hlbiB2aWRlbyBpcyBwcm9jZXNzZWQgbG9jYWxseSBhbmQgbm90IHRyYW5zbWl0dGVkIHRvCi0gICAgICogYW55IHVudHJ1c3RlZCBhcHBsaWNhdGlvbnMuCi0gICAgICogPC9wPjxwPgotICAgICAqIEluIHBhcnRpY3VsYXIsIHRoZSBMRUQgKm11c3QqIGFsd2F5cyBiZSBvbiB3aGVuIHRoZSBkYXRhIGNvdWxkIGJlCi0gICAgICogdHJhbnNtaXR0ZWQgb2ZmIHRoZSBkZXZpY2UuIFRoZSBMRUQgKnNob3VsZCogYWx3YXlzIGJlIG9uIHdoZW5ldmVyCi0gICAgICogZGF0YSBpcyBzdG9yZWQgbG9jYWxseSBvbiB0aGUgZGV2aWNlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgTEVEICptYXkqIGJlIG9mZiBpZiBhIHRydXN0ZWQgYXBwbGljYXRpb24gaXMgdXNpbmcgdGhlIGRhdGEgdGhhdAotICAgICAqIGRvZXNuJ3QgdmlvbGF0ZSB0aGUgYWJvdmUgcnVsZXMuCi0gICAgICogPC9wPgotICAgICAqCisgICAgICogYW55IHVudHJ1c3RlZCBhcHBsaWNhdGlvbnMuPC9wPgorICAgICAqIDxwPkluIHBhcnRpY3VsYXIsIHRoZSBMRUQgPGVtPm11c3Q8L2VtPiBhbHdheXMgYmUgb24gd2hlbiB0aGUgZGF0YSBjb3VsZCBiZQorICAgICAqIHRyYW5zbWl0dGVkIG9mZiB0aGUgZGV2aWNlLiBUaGUgTEVEIDxlbT5zaG91bGQ8L2VtPiBhbHdheXMgYmUgb24gd2hlbmV2ZXIKKyAgICAgKiBkYXRhIGlzIHN0b3JlZCBsb2NhbGx5IG9uIHRoZSBkZXZpY2UuPC9wPgorICAgICAqIDxwPlRoZSBMRUQgPGVtPm1heTwvZW0+IGJlIG9mZiBpZiBhIHRydXN0ZWQgYXBwbGljYXRpb24gaXMgdXNpbmcgdGhlIGRhdGEgdGhhdAorICAgICAqIGRvZXNuJ3QgdmlvbGF0ZSB0aGUgYWJvdmUgcnVsZXMuPC9wPgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Qm9vbGVhbj4gTEVEX1RSQU5TTUlUID0KICAgICAgICAgICAgIG5ldyBLZXk8Qm9vbGVhbj4oImFuZHJvaWQubGVkLnRyYW5zbWl0IiwgYm9vbGVhbi5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIGJsYWNrLWxldmVsIGNvbXBlbnNhdGlvbiBpcyBsb2NrZWQKLSAgICAgKiB0byBpdHMgY3VycmVudCB2YWx1ZXMsIG9yIGlzIGZyZWUgdG8gdmFyeQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuIHNldCB0byBPTiwgdGhlIHZhbHVlcyB1c2VkIGZvciBibGFjay1sZXZlbAotICAgICAqIGNvbXBlbnNhdGlvbiBtdXN0IG5vdCBjaGFuZ2UgdW50aWwgdGhlIGxvY2sgaXMgc2V0IHRvCi0gICAgICogT0ZGCi0gICAgICogPC9wPjxwPgotICAgICAqIFNpbmNlIGNoYW5nZXMgdG8gY2VydGFpbiBjYXB0dXJlIHBhcmFtZXRlcnMgKHN1Y2ggYXMKLSAgICAgKiBleHBvc3VyZSB0aW1lKSBtYXkgcmVxdWlyZSByZXNldHRpbmcgb2YgYmxhY2sgbGV2ZWwKLSAgICAgKiBjb21wZW5zYXRpb24sIHRoZSBIQUwgbXVzdCByZXBvcnQgd2hldGhlciBzZXR0aW5nIHRoZQotICAgICAqIGJsYWNrIGxldmVsIGxvY2sgd2FzIHN1Y2Nlc3NmdWwgaW4gdGhlIG91dHB1dCByZXN1bHQKLSAgICAgKiBtZXRhZGF0YS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIGJsYWNrIGxldmVsIGxvY2tpbmcgbXVzdCBoYXBwZW4gYXQgdGhlIHNlbnNvciwgYW5kIG5vdCBhdCB0aGUgSVNQLgotICAgICAqIElmIGZvciBzb21lIHJlYXNvbiBibGFjayBsZXZlbCBsb2NraW5nIGlzIG5vIGxvbmdlciBsZWdhbCAoZm9yIGV4YW1wbGUsCi0gICAgICogdGhlIGFuYWxvZyBnYWluIGhhcyBjaGFuZ2VkLCB3aGljaCBmb3JjZXMgYmxhY2sgbGV2ZWxzIHRvIGJlCi0gICAgICogcmVjYWxjdWxhdGVkKSwgdGhlbiB0aGUgSEFMIGlzIGZyZWUgdG8gb3ZlcnJpZGUgdGhpcyByZXF1ZXN0IChhbmQgaXQKLSAgICAgKiBtdXN0IHJlcG9ydCAnT0ZGJyB3aGVuIHRoaXMgZG9lcyBoYXBwZW4pIHVudGlsIHRoZSBuZXh0IHRpbWUgbG9ja2luZwotICAgICAqIGlzIGxlZ2FsIGFnYWluLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGV0aGVyIGJsYWNrLWxldmVsIGNvbXBlbnNhdGlvbiBpcyBsb2NrZWQKKyAgICAgKiB0byBpdHMgY3VycmVudCB2YWx1ZXMsIG9yIGlzIGZyZWUgdG8gdmFyeS48L3A+CisgICAgICogPHA+V2hldGhlciB0aGUgYmxhY2sgbGV2ZWwgb2Zmc2V0IHdhcyBsb2NrZWQgZm9yIHRoaXMgZnJhbWUuICBTaG91bGQgYmUKKyAgICAgKiBPTiBpZiB7QGxpbmsgQ2FwdHVyZVJlcXVlc3QjQkxBQ0tfTEVWRUxfTE9DSyBhbmRyb2lkLmJsYWNrTGV2ZWwubG9ja30gd2FzIE9OIGluIHRoZSBjYXB0dXJlIHJlcXVlc3QsIHVubGVzcworICAgICAqIGEgY2hhbmdlIGluIG90aGVyIGNhcHR1cmUgc2V0dGluZ3MgZm9yY2VkIHRoZSBjYW1lcmEgZGV2aWNlIHRvCisgICAgICogcGVyZm9ybSBhIGJsYWNrIGxldmVsIHJlc2V0LjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQkxBQ0tfTEVWRUxfTE9DSwogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEJvb2xlYW4+IEJMQUNLX0xFVkVMX0xPQ0sgPQogICAgICAgICAgICAgbmV3IEtleTxCb29sZWFuPigiYW5kcm9pZC5ibGFja0xldmVsLmxvY2siLCBib29sZWFuLmNsYXNzKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvaW1wbC9DYW1lcmFEZXZpY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvaW1wbC9DYW1lcmFEZXZpY2UuamF2YQppbmRleCA0MDU4NmYwLi4yYzhhNWMyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL2ltcGwvQ2FtZXJhRGV2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9pbXBsL0NhbWVyYURldmljZS5qYXZhCkBAIC0xMDYsOSArMTA2LDcgQEAKIAogICAgIHByaXZhdGUgZmluYWwgUnVubmFibGUgbUNhbGxPbkNsb3NlZCA9IG5ldyBSdW5uYWJsZSgpIHsKICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgaWYgKCFDYW1lcmFEZXZpY2UudGhpcy5pc0Nsb3NlZCgpKSB7Ci0gICAgICAgICAgICAgICAgbURldmljZUxpc3RlbmVyLm9uQ2xvc2VkKENhbWVyYURldmljZS50aGlzKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1EZXZpY2VMaXN0ZW5lci5vbkNsb3NlZChDYW1lcmFEZXZpY2UudGhpcyk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0zNTEsOCArMzQ5LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdhaXRVbnRpbElkbGUoKSB0aHJvd3MgQ2FtZXJhQWNjZXNzRXhjZXB0aW9uIHsKKyAgICBwcml2YXRlIHZvaWQgd2FpdFVudGlsSWRsZSgpIHRocm93cyBDYW1lcmFBY2Nlc3NFeGNlcHRpb24gewogCiAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKICAgICAgICAgICAgIGNoZWNrSWZDYW1lcmFDbG9zZWQoKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvaW1wbC9DYW1lcmFNZXRhZGF0YU5hdGl2ZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9pbXBsL0NhbWVyYU1ldGFkYXRhTmF0aXZlLmphdmEKaW5kZXggMDcyYzViYi4uMmRkY2IxNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9pbXBsL0NhbWVyYU1ldGFkYXRhTmF0aXZlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9pbXBsL0NhbWVyYU1ldGFkYXRhTmF0aXZlLmphdmEKQEAgLTQ0OCw3ICs0NDgsNyBAQAogICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoQ2FwdHVyZVJlc3VsdC5TVEFUSVNUSUNTX0ZBQ0VTKSkgewogICAgICAgICAgICAgcmV0dXJuIChUKSBnZXRGYWNlcygpOwogICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoQ2FwdHVyZVJlc3VsdC5TVEFUSVNUSUNTX0ZBQ0VfUkVDVEFOR0xFUykpIHsKLSAgICAgICAgICAgIHJldHVybiAoVCkgZml4RmFjZVJlY3RhbmdsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiAoVCkgZ2V0RmFjZVJlY3RhbmdsZXMoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZvciBvdGhlciBrZXlzLCBnZXQoKSBmYWxscyBiYWNrIHRvIGdldEJhc2UoKQpAQCAtNDU3LDEyICs0NTcsMTUgQEAKIAogICAgIHByaXZhdGUgaW50W10gZ2V0QXZhaWxhYmxlRm9ybWF0cygpIHsKICAgICAgICAgaW50W10gYXZhaWxhYmxlRm9ybWF0cyA9IGdldEJhc2UoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLlNDQUxFUl9BVkFJTEFCTEVfRk9STUFUUyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXZhaWxhYmxlRm9ybWF0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgLy8gSlBFRyBoYXMgZGlmZmVyZW50IHZhbHVlIGJldHdlZW4gbmF0aXZlIGFuZCBtYW5hZ2VkIHNpZGUsIG5lZWQgb3ZlcnJpZGUuCi0gICAgICAgICAgICBpZiAoYXZhaWxhYmxlRm9ybWF0c1tpXSA9PSBOQVRJVkVfSlBFR19GT1JNQVQpIHsKLSAgICAgICAgICAgICAgICBhdmFpbGFibGVGb3JtYXRzW2ldID0gSW1hZ2VGb3JtYXQuSlBFRzsKKyAgICAgICAgaWYgKGF2YWlsYWJsZUZvcm1hdHMgIT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdmFpbGFibGVGb3JtYXRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgLy8gSlBFRyBoYXMgZGlmZmVyZW50IHZhbHVlIGJldHdlZW4gbmF0aXZlIGFuZCBtYW5hZ2VkIHNpZGUsIG5lZWQgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUZvcm1hdHNbaV0gPT0gTkFUSVZFX0pQRUdfRk9STUFUKSB7CisgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUZvcm1hdHNbaV0gPSBJbWFnZUZvcm1hdC5KUEVHOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBhdmFpbGFibGVGb3JtYXRzOwogICAgIH0KIApAQCAtNTUwLDcgKzU1Myw3IEBACiAgICAgLy8gKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkgYXQgdGhlIG5hdGl2ZSBsZXZlbCwgc28gdGhlIG5vcm1hbCBSZWN0CiAgICAgLy8gY29udmVyc2lvbiB0aGF0IGRvZXMgKGwsIHQsIHcsIGgpIC0+IChsLCB0LCByLCBiKSBpcyB1bm5lY2Vzc2FyeS4gVW5kbwogICAgIC8vIHRoYXQgY29udmVyc2lvbiBoZXJlIGZvciBqdXN0IHRoZSBmYWNlcy4KLSAgICBwcml2YXRlIFJlY3RbXSBmaXhGYWNlUmVjdGFuZ2xlcygpIHsKKyAgICBwcml2YXRlIFJlY3RbXSBnZXRGYWNlUmVjdGFuZ2xlcygpIHsKICAgICAgICAgUmVjdFtdIGZhY2VSZWN0YW5nbGVzID0gZ2V0QmFzZShDYXB0dXJlUmVzdWx0LlNUQVRJU1RJQ1NfRkFDRV9SRUNUQU5HTEVTKTsKICAgICAgICAgaWYgKGZhY2VSZWN0YW5nbGVzID09IG51bGwpIHJldHVybiBudWxsOwogCkBAIC01OTAsNiArNTkzLDggQEAKICAgICBwcml2YXRlIDxUPiBib29sZWFuIHNldE92ZXJyaWRlKEtleTxUPiBrZXksIFQgdmFsdWUpIHsKICAgICAgICAgaWYgKGtleS5lcXVhbHMoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLlNDQUxFUl9BVkFJTEFCTEVfRk9STUFUUykpIHsKICAgICAgICAgICAgIHJldHVybiBzZXRBdmFpbGFibGVGb3JtYXRzKChpbnRbXSkgdmFsdWUpOworICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoQ2FwdHVyZVJlc3VsdC5TVEFUSVNUSUNTX0ZBQ0VfUkVDVEFOR0xFUykpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRGYWNlUmVjdGFuZ2xlcygoUmVjdFtdKSB2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGb3Igb3RoZXIga2V5cywgc2V0KCkgZmFsbHMgYmFjayB0byBzZXRCYXNlKCkuCkBAIC02MTUsNiArNjIwLDM2IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIENvbnZlcnQgRmFjZSBSZWN0YW5nbGVzIGZyb20gbWFuYWdlZCBzaWRlIHRvIG5hdGl2ZSBzaWRlIGFzIHRoZXkgaGF2ZSBkaWZmZXJlbnQgZGVmaW5pdGlvbnMuCisgICAgICogPHA+CisgICAgICogTWFuYWdlZCBzaWRlIGZhY2UgcmVjdGFuZ2xlcyBhcmUgZGVmaW5lZCBhczogbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LgorICAgICAqIE5hdGl2ZSBzaWRlIGZhY2UgcmVjdGFuZ2xlcyBhcmUgZGVmaW5lZCBhczogbGVmdCwgdG9wLCByaWdodCwgYm90dG9tLgorICAgICAqIFRoZSBpbnB1dCBmYWNlIHJlY3RhbmdsZSBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byBuYXRpdmUgc2lkZSBkZWZpbml0aW9uIHdoZW4gc2V0IGlzIGNhbGxlZC4KKyAgICAgKiA8L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gZmFjZVJlY3RzIElucHV0IGZhY2UgcmVjdGFuZ2xlcy4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgZmFjZSByZWN0YW5nbGVzIGNhbiBiZSBzZXQgc3VjY2Vzc2Z1bGx5LiBPdGhlcndpc2UsIExldCB0aGUgY2FsbGVyCisgICAgICogICAgICAgICAgICAgKHNldEJhc2UpIHRvIGhhbmRsZSBpdCBhcHByb3ByaWF0ZWx5LgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBzZXRGYWNlUmVjdGFuZ2xlcyhSZWN0W10gZmFjZVJlY3RzKSB7CisgICAgICAgIGlmIChmYWNlUmVjdHMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgUmVjdFtdIG5ld0ZhY2VSZWN0cyA9IG5ldyBSZWN0W2ZhY2VSZWN0cy5sZW5ndGhdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld0ZhY2VSZWN0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbmV3RmFjZVJlY3RzW2ldID0gbmV3IFJlY3QoCisgICAgICAgICAgICAgICAgICAgIGZhY2VSZWN0c1tpXS5sZWZ0LAorICAgICAgICAgICAgICAgICAgICBmYWNlUmVjdHNbaV0udG9wLAorICAgICAgICAgICAgICAgICAgICBmYWNlUmVjdHNbaV0ucmlnaHQgKyBmYWNlUmVjdHNbaV0ubGVmdCwKKyAgICAgICAgICAgICAgICAgICAgZmFjZVJlY3RzW2ldLmJvdHRvbSArIGZhY2VSZWN0c1tpXS50b3ApOworICAgICAgICB9CisKKyAgICAgICAgc2V0QmFzZShDYXB0dXJlUmVzdWx0LlNUQVRJU1RJQ1NfRkFDRV9SRUNUQU5HTEVTLCBuZXdGYWNlUmVjdHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBwcml2YXRlIGxvbmcgbU1ldGFkYXRhUHRyOyAvLyBuYXRpdmUgQ2FtZXJhTWV0YWRhdGEqCiAKICAgICBwcml2YXRlIG5hdGl2ZSBsb25nIG5hdGl2ZUFsbG9jYXRlKCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL3BhY2thZ2UuaHRtbCBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFja2FnZS5odG1sCmluZGV4IGM2MTk5ODQuLjlmNmMyYTkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFja2FnZS5odG1sCkBAIC04MCw3ICs4MCw1IEBACiBhc3luY2hyb25vdXNseSByZWxhdGl2ZSB0byB0aGUgb3V0cHV0IENhcHR1cmVSZXN1bHQsIHNvbWV0aW1lcwogc3Vic3RhbnRpYWxseSBsYXRlci48L3A+CiAKLXtAaGlkZX0KLQogPC9CT0RZPgogPC9IVE1MPgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvZGlzcGxheS9XaWZpRGlzcGxheVN0YXR1cy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvZGlzcGxheS9XaWZpRGlzcGxheVN0YXR1cy5qYXZhCmluZGV4IDUyMTY3MjcuLmI2NDU2NjIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2Rpc3BsYXkvV2lmaURpc3BsYXlTdGF0dXMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9kaXNwbGF5L1dpZmlEaXNwbGF5U3RhdHVzLmphdmEKQEAgLTIwLDggKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgogICogRGVzY3JpYmVzIHRoZSBjdXJyZW50IGdsb2JhbCBzdGF0ZSBvZiBXaWZpIGRpc3BsYXkgY29ubmVjdGl2aXR5LCBpbmNsdWRpbmcgdGhlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JSW5wdXRNYW5hZ2VyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JSW5wdXRNYW5hZ2VyLmFpZGwKaW5kZXggOWI2ZjgyYS4uZjFlN2U5OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvaW5wdXQvSUlucHV0TWFuYWdlci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2lucHV0L0lJbnB1dE1hbmFnZXIuYWlkbApAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQuaGFyZHdhcmUuaW5wdXQ7CiAKK2ltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmlucHV0LklucHV0RGV2aWNlSWRlbnRpZmllcjsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmlucHV0LktleWJvYXJkTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuaW5wdXQuSUlucHV0RGV2aWNlc0NoYW5nZWRMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CkBAIC00MSwxMyArNDIsMTMgQEAKICAgICAvLyBLZXlib2FyZCBsYXlvdXRzIGNvbmZpZ3VyYXRpb24uCiAgICAgS2V5Ym9hcmRMYXlvdXRbXSBnZXRLZXlib2FyZExheW91dHMoKTsKICAgICBLZXlib2FyZExheW91dCBnZXRLZXlib2FyZExheW91dChTdHJpbmcga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yKTsKLSAgICBTdHJpbmcgZ2V0Q3VycmVudEtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoU3RyaW5nIGlucHV0RGV2aWNlRGVzY3JpcHRvcik7Ci0gICAgdm9pZCBzZXRDdXJyZW50S2V5Ym9hcmRMYXlvdXRGb3JJbnB1dERldmljZShTdHJpbmcgaW5wdXREZXZpY2VEZXNjcmlwdG9yLAorICAgIFN0cmluZyBnZXRDdXJyZW50S2V5Ym9hcmRMYXlvdXRGb3JJbnB1dERldmljZShpbiBJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllcik7CisgICAgdm9pZCBzZXRDdXJyZW50S2V5Ym9hcmRMYXlvdXRGb3JJbnB1dERldmljZShpbiBJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllciwKICAgICAgICAgICAgIFN0cmluZyBrZXlib2FyZExheW91dERlc2NyaXB0b3IpOwotICAgIFN0cmluZ1tdIGdldEtleWJvYXJkTGF5b3V0c0ZvcklucHV0RGV2aWNlKFN0cmluZyBpbnB1dERldmljZURlc2NyaXB0b3IpOwotICAgIHZvaWQgYWRkS2V5Ym9hcmRMYXlvdXRGb3JJbnB1dERldmljZShTdHJpbmcgaW5wdXREZXZpY2VEZXNjcmlwdG9yLAorICAgIFN0cmluZ1tdIGdldEtleWJvYXJkTGF5b3V0c0ZvcklucHV0RGV2aWNlKGluIElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyKTsKKyAgICB2b2lkIGFkZEtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoaW4gSW5wdXREZXZpY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsCiAgICAgICAgICAgICBTdHJpbmcga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yKTsKLSAgICB2b2lkIHJlbW92ZUtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoU3RyaW5nIGlucHV0RGV2aWNlRGVzY3JpcHRvciwKKyAgICB2b2lkIHJlbW92ZUtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoaW4gSW5wdXREZXZpY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsCiAgICAgICAgICAgICBTdHJpbmcga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yKTsKIAogICAgIC8vIFJlZ2lzdGVycyBhbiBpbnB1dCBkZXZpY2VzIGNoYW5nZWQgbGlzdGVuZXIuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JbnB1dERldmljZUlkZW50aWZpZXIuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2lucHV0L0lucHV0RGV2aWNlSWRlbnRpZmllci5haWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzRhOTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JbnB1dERldmljZUlkZW50aWZpZXIuYWlkbApAQCAtMCwwICsxLDE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlLmlucHV0OworCitwYXJjZWxhYmxlIElucHV0RGV2aWNlSWRlbnRpZmllcjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2lucHV0L0lucHV0RGV2aWNlSWRlbnRpZmllci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvaW5wdXQvSW5wdXREZXZpY2VJZGVudGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU4MzJlMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2lucHV0L0lucHV0RGV2aWNlSWRlbnRpZmllci5qYXZhCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuaGFyZHdhcmUuaW5wdXQ7CisKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CisKKy8qKgorICogV3JhcHBlciBmb3IgcGFzc2luZyBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiBmb3IgaW5wdXQgZGV2aWNlcy4KKyAqCisgKiBAaGlkZQorICovCitwdWJsaWMgZmluYWwgY2xhc3MgSW5wdXREZXZpY2VJZGVudGlmaWVyIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbURlc2NyaXB0b3I7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVZlbmRvcklkOworICAgIHByaXZhdGUgZmluYWwgaW50IG1Qcm9kdWN0SWQ7CisKKyAgICBwdWJsaWMgSW5wdXREZXZpY2VJZGVudGlmaWVyKFN0cmluZyBkZXNjcmlwdG9yLCBpbnQgdmVuZG9ySWQsIGludCBwcm9kdWN0SWQpIHsKKyAgICAgICAgdGhpcy5tRGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7CisgICAgICAgIHRoaXMubVZlbmRvcklkID0gdmVuZG9ySWQ7CisgICAgICAgIHRoaXMubVByb2R1Y3RJZCA9IHByb2R1Y3RJZDsKKyAgICB9CisKKyAgICBwcml2YXRlIElucHV0RGV2aWNlSWRlbnRpZmllcihQYXJjZWwgc3JjKSB7CisgICAgICAgIG1EZXNjcmlwdG9yID0gc3JjLnJlYWRTdHJpbmcoKTsKKyAgICAgICAgbVZlbmRvcklkID0gc3JjLnJlYWRJbnQoKTsKKyAgICAgICAgbVByb2R1Y3RJZCA9IHNyYy5yZWFkSW50KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgZGVzdC53cml0ZVN0cmluZyhtRGVzY3JpcHRvcik7CisgICAgICAgIGRlc3Qud3JpdGVJbnQobVZlbmRvcklkKTsKKyAgICAgICAgZGVzdC53cml0ZUludChtUHJvZHVjdElkKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0b3IoKSB7CisgICAgICAgIHJldHVybiBtRGVzY3JpcHRvcjsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldFZlbmRvcklkKCkgeworICAgICAgICByZXR1cm4gbVZlbmRvcklkOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0UHJvZHVjdElkKCkgeworICAgICAgICByZXR1cm4gbVByb2R1Y3RJZDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxJbnB1dERldmljZUlkZW50aWZpZXI+IENSRUFUT1IgPQorICAgICAgICAgICAgbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxJbnB1dERldmljZUlkZW50aWZpZXI+KCkgeworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgSW5wdXREZXZpY2VJZGVudGlmaWVyIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHNvdXJjZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnB1dERldmljZUlkZW50aWZpZXIoc291cmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgSW5wdXREZXZpY2VJZGVudGlmaWVyW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSW5wdXREZXZpY2VJZGVudGlmaWVyW3NpemVdOworICAgICAgICB9CisKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvaW5wdXQvSW5wdXRNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JbnB1dE1hbmFnZXIuamF2YQppbmRleCAzMGU2OWE2Li5hMmFlYWZiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JbnB1dE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JbnB1dE1hbmFnZXIuamF2YQpAQCAtMjYsNiArMjYsOCBAQAogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5WaWJyYXRvcjsKQEAgLTM3MywyMCArMzc1LDE3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgY3VycmVudCBrZXlib2FyZCBsYXlvdXQgZGVzY3JpcHRvciBmb3IgdGhlIHNwZWNpZmllZCBpbnB1dCBkZXZpY2UuCisgICAgICogR2V0cyB0aGUgY3VycmVudCBrZXlib2FyZCBsYXlvdXQgZGVzY3JpcHRvciBmb3IgdGhlIHNwZWNpZmllZCBpbnB1dAorICAgICAqIGRldmljZS4KICAgICAgKgotICAgICAqIEBwYXJhbSBpbnB1dERldmljZURlc2NyaXB0b3IgVGhlIGlucHV0IGRldmljZSBkZXNjcmlwdG9yLgotICAgICAqIEByZXR1cm4gVGhlIGtleWJvYXJkIGxheW91dCBkZXNjcmlwdG9yLCBvciBudWxsIGlmIG5vIGtleWJvYXJkIGxheW91dCBoYXMgYmVlbiBzZXQuCi0gICAgICoKKyAgICAgKiBAcGFyYW0gaWRlbnRpZmllciBJZGVudGlmaWVyIGZvciB0aGUgaW5wdXQgZGV2aWNlCisgICAgICogQHJldHVybiBUaGUga2V5Ym9hcmQgbGF5b3V0IGRlc2NyaXB0b3IsIG9yIG51bGwgaWYgbm8ga2V5Ym9hcmQgbGF5b3V0IGhhcworICAgICAqICAgICAgICAgYmVlbiBzZXQuCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKFN0cmluZyBpbnB1dERldmljZURlc2NyaXB0b3IpIHsKLSAgICAgICAgaWYgKGlucHV0RGV2aWNlRGVzY3JpcHRvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnB1dERldmljZURlc2NyaXB0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0KKyAgICBwdWJsaWMgU3RyaW5nIGdldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyKSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gbUltLmdldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKGlucHV0RGV2aWNlRGVzY3JpcHRvcik7CisgICAgICAgICAgICByZXR1cm4gbUltLmdldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKGlkZW50aWZpZXIpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIExvZy53KFRBRywgIkNvdWxkIG5vdCBnZXQgY3VycmVudCBrZXlib2FyZCBsYXlvdXQgZm9yIGlucHV0IGRldmljZS4iLCBleCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTM5NCwyOCArMzkzLDI5IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogU2V0cyB0aGUgY3VycmVudCBrZXlib2FyZCBsYXlvdXQgZGVzY3JpcHRvciBmb3IgdGhlIHNwZWNpZmllZCBpbnB1dCBkZXZpY2UuCisgICAgICogU2V0cyB0aGUgY3VycmVudCBrZXlib2FyZCBsYXlvdXQgZGVzY3JpcHRvciBmb3IgdGhlIHNwZWNpZmllZCBpbnB1dAorICAgICAqIGRldmljZS4KICAgICAgKiA8cD4KLSAgICAgKiBUaGlzIG1ldGhvZCBtYXkgaGF2ZSB0aGUgc2lkZS1lZmZlY3Qgb2YgY2F1c2luZyB0aGUgaW5wdXQgZGV2aWNlIGluIHF1ZXN0aW9uCi0gICAgICogdG8gYmUgcmVjb25maWd1cmVkLgorICAgICAqIFRoaXMgbWV0aG9kIG1heSBoYXZlIHRoZSBzaWRlLWVmZmVjdCBvZiBjYXVzaW5nIHRoZSBpbnB1dCBkZXZpY2UgaW4KKyAgICAgKiBxdWVzdGlvbiB0byBiZSByZWNvbmZpZ3VyZWQuCiAgICAgICogPC9wPgogICAgICAqCi0gICAgICogQHBhcmFtIGlucHV0RGV2aWNlRGVzY3JpcHRvciBUaGUgaW5wdXQgZGV2aWNlIGRlc2NyaXB0b3IuCi0gICAgICogQHBhcmFtIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciBUaGUga2V5Ym9hcmQgbGF5b3V0IGRlc2NyaXB0b3IgdG8gdXNlLCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqCisgICAgICogQHBhcmFtIGlkZW50aWZpZXIgVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBpbnB1dCBkZXZpY2UuCisgICAgICogQHBhcmFtIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciBUaGUga2V5Ym9hcmQgbGF5b3V0IGRlc2NyaXB0b3IgdG8gdXNlLAorICAgICAqICAgICAgICAgICAgbXVzdCBub3QgYmUgbnVsbC4KICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKFN0cmluZyBpbnB1dERldmljZURlc2NyaXB0b3IsCisgICAgcHVibGljIHZvaWQgc2V0Q3VycmVudEtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoSW5wdXREZXZpY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsCiAgICAgICAgICAgICBTdHJpbmcga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yKSB7Ci0gICAgICAgIGlmIChpbnB1dERldmljZURlc2NyaXB0b3IgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaW5wdXREZXZpY2VEZXNjcmlwdG9yIG11c3Qgbm90IGJlIG51bGwiKTsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaWRlbnRpZmllciBtdXN0IG5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJrZXlib2FyZExheW91dERlc2NyaXB0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1JbS5zZXRDdXJyZW50S2V5Ym9hcmRMYXlvdXRGb3JJbnB1dERldmljZShpbnB1dERldmljZURlc2NyaXB0b3IsCisgICAgICAgICAgICBtSW0uc2V0Q3VycmVudEtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoaWRlbnRpZmllciwKICAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3Qgc2V0IGN1cnJlbnQga2V5Ym9hcmQgbGF5b3V0IGZvciBpbnB1dCBkZXZpY2UuIiwgZXgpOwpAQCAtNDIzLDIwICs0MjMsMjAgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBHZXRzIGFsbCBrZXlib2FyZCBsYXlvdXQgZGVzY3JpcHRvcnMgdGhhdCBhcmUgZW5hYmxlZCBmb3IgdGhlIHNwZWNpZmllZCBpbnB1dCBkZXZpY2UuCisgICAgICogR2V0cyBhbGwga2V5Ym9hcmQgbGF5b3V0IGRlc2NyaXB0b3JzIHRoYXQgYXJlIGVuYWJsZWQgZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBpbnB1dCBkZXZpY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gaW5wdXREZXZpY2VEZXNjcmlwdG9yIFRoZSBpbnB1dCBkZXZpY2UgZGVzY3JpcHRvci4KKyAgICAgKiBAcGFyYW0gaWRlbnRpZmllciBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGlucHV0IGRldmljZS4KICAgICAgKiBAcmV0dXJuIFRoZSBrZXlib2FyZCBsYXlvdXQgZGVzY3JpcHRvcnMuCi0gICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRLZXlib2FyZExheW91dHNGb3JJbnB1dERldmljZShTdHJpbmcgaW5wdXREZXZpY2VEZXNjcmlwdG9yKSB7Ci0gICAgICAgIGlmIChpbnB1dERldmljZURlc2NyaXB0b3IgPT0gbnVsbCkgeworICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRLZXlib2FyZExheW91dHNGb3JJbnB1dERldmljZShJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllcikgeworICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnB1dERldmljZURlc2NyaXB0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBtSW0uZ2V0S2V5Ym9hcmRMYXlvdXRzRm9ySW5wdXREZXZpY2UoaW5wdXREZXZpY2VEZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtSW0uZ2V0S2V5Ym9hcmRMYXlvdXRzRm9ySW5wdXREZXZpY2UoaWRlbnRpZmllcik7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgTG9nLncoVEFHLCAiQ291bGQgbm90IGdldCBrZXlib2FyZCBsYXlvdXRzIGZvciBpbnB1dCBkZXZpY2UuIiwgZXgpOwogICAgICAgICAgICAgcmV0dXJuIEFycmF5VXRpbHMuZW1wdHlBcnJheShTdHJpbmcuY2xhc3MpOwpAQCAtNDQ2LDE4ICs0NDYsMTggQEAKICAgICAvKioKICAgICAgKiBBZGRzIHRoZSBrZXlib2FyZCBsYXlvdXQgZGVzY3JpcHRvciBmb3IgdGhlIHNwZWNpZmllZCBpbnB1dCBkZXZpY2UuCiAgICAgICogPHA+Ci0gICAgICogVGhpcyBtZXRob2QgbWF5IGhhdmUgdGhlIHNpZGUtZWZmZWN0IG9mIGNhdXNpbmcgdGhlIGlucHV0IGRldmljZSBpbiBxdWVzdGlvbgotICAgICAqIHRvIGJlIHJlY29uZmlndXJlZC4KKyAgICAgKiBUaGlzIG1ldGhvZCBtYXkgaGF2ZSB0aGUgc2lkZS1lZmZlY3Qgb2YgY2F1c2luZyB0aGUgaW5wdXQgZGV2aWNlIGluCisgICAgICogcXVlc3Rpb24gdG8gYmUgcmVjb25maWd1cmVkLgogICAgICAqIDwvcD4KICAgICAgKgotICAgICAqIEBwYXJhbSBpbnB1dERldmljZURlc2NyaXB0b3IgVGhlIGlucHV0IGRldmljZSBkZXNjcmlwdG9yLgotICAgICAqIEBwYXJhbSBrZXlib2FyZExheW91dERlc2NyaXB0b3IgVGhlIGRlc2NyaXB0b3Igb2YgdGhlIGtleWJvYXJkIGxheW91dCB0byBhZGQuCi0gICAgICoKKyAgICAgKiBAcGFyYW0gaWRlbnRpZmllciBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGlucHV0IGRldmljZS4KKyAgICAgKiBAcGFyYW0ga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG9mIHRoZSBrZXlib2FyZCBsYXlvdXQgdG8KKyAgICAgKiAgICAgICAgICAgIGFkZC4KICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZEtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoU3RyaW5nIGlucHV0RGV2aWNlRGVzY3JpcHRvciwKKyAgICBwdWJsaWMgdm9pZCBhZGRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyLAogICAgICAgICAgICAgU3RyaW5nIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvcikgewotICAgICAgICBpZiAoaW5wdXREZXZpY2VEZXNjcmlwdG9yID09IG51bGwpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaW5wdXREZXZpY2VEZXNjcmlwdG9yIG11c3Qgbm90IGJlIG51bGwiKTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yID09IG51bGwpIHsKQEAgLTQ2NSw3ICs0NjUsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1JbS5hZGRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKGlucHV0RGV2aWNlRGVzY3JpcHRvciwga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIG1JbS5hZGRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKGlkZW50aWZpZXIsIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvcik7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgTG9nLncoVEFHLCAiQ291bGQgbm90IGFkZCBrZXlib2FyZCBsYXlvdXQgZm9yIGlucHV0IGRldmljZS4iLCBleCk7CiAgICAgICAgIH0KQEAgLTQ3NCwxOCArNDc0LDE4IEBACiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyB0aGUga2V5Ym9hcmQgbGF5b3V0IGRlc2NyaXB0b3IgZm9yIHRoZSBzcGVjaWZpZWQgaW5wdXQgZGV2aWNlLgogICAgICAqIDxwPgotICAgICAqIFRoaXMgbWV0aG9kIG1heSBoYXZlIHRoZSBzaWRlLWVmZmVjdCBvZiBjYXVzaW5nIHRoZSBpbnB1dCBkZXZpY2UgaW4gcXVlc3Rpb24KLSAgICAgKiB0byBiZSByZWNvbmZpZ3VyZWQuCisgICAgICogVGhpcyBtZXRob2QgbWF5IGhhdmUgdGhlIHNpZGUtZWZmZWN0IG9mIGNhdXNpbmcgdGhlIGlucHV0IGRldmljZSBpbgorICAgICAqIHF1ZXN0aW9uIHRvIGJlIHJlY29uZmlndXJlZC4KICAgICAgKiA8L3A+CiAgICAgICoKLSAgICAgKiBAcGFyYW0gaW5wdXREZXZpY2VEZXNjcmlwdG9yIFRoZSBpbnB1dCBkZXZpY2UgZGVzY3JpcHRvci4KLSAgICAgKiBAcGFyYW0ga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG9mIHRoZSBrZXlib2FyZCBsYXlvdXQgdG8gcmVtb3ZlLgotICAgICAqCisgICAgICogQHBhcmFtIGlkZW50aWZpZXIgVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBpbnB1dCBkZXZpY2UuCisgICAgICogQHBhcmFtIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciBUaGUgZGVzY3JpcHRvciBvZiB0aGUga2V5Ym9hcmQgbGF5b3V0IHRvCisgICAgICogICAgICAgICAgICByZW1vdmUuCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKFN0cmluZyBpbnB1dERldmljZURlc2NyaXB0b3IsCisgICAgcHVibGljIHZvaWQgcmVtb3ZlS2V5Ym9hcmRMYXlvdXRGb3JJbnB1dERldmljZShJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllciwKICAgICAgICAgICAgIFN0cmluZyBrZXlib2FyZExheW91dERlc2NyaXB0b3IpIHsKLSAgICAgICAgaWYgKGlucHV0RGV2aWNlRGVzY3JpcHRvciA9PSBudWxsKSB7CisgICAgICAgIGlmIChpZGVudGlmaWVyID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImlucHV0RGV2aWNlRGVzY3JpcHRvciBtdXN0IG5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciA9PSBudWxsKSB7CkBAIC00OTMsNyArNDkzLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtSW0ucmVtb3ZlS2V5Ym9hcmRMYXlvdXRGb3JJbnB1dERldmljZShpbnB1dERldmljZURlc2NyaXB0b3IsIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvcik7CisgICAgICAgICAgICBtSW0ucmVtb3ZlS2V5Ym9hcmRMYXlvdXRGb3JJbnB1dERldmljZShpZGVudGlmaWVyLCBrZXlib2FyZExheW91dERlc2NyaXB0b3IpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIExvZy53KFRBRywgIkNvdWxkIG5vdCByZW1vdmUga2V5Ym9hcmQgbGF5b3V0IGZvciBpbnB1dCBkZXZpY2UuIiwgZXgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9sb2NhdGlvbi9HZW9mZW5jZUhhcmR3YXJlUmVxdWVzdC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvbG9jYXRpb24vR2VvZmVuY2VIYXJkd2FyZVJlcXVlc3QuamF2YQppbmRleCA2ZTdiNTkyLi43OTZkN2Y4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9sb2NhdGlvbi9HZW9mZW5jZUhhcmR3YXJlUmVxdWVzdC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2xvY2F0aW9uL0dlb2ZlbmNlSGFyZHdhcmVSZXF1ZXN0LmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uOwogCi1pbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvbjsKLQogLyoqCiAgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgZ2VvZmVuY2UuCiAgKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkFjY2Vzc29yeS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkFjY2Vzc29yeS5qYXZhCmluZGV4IDU3MTk0NTIuLjJmOTE3OGMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JBY2Nlc3NvcnkuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiQWNjZXNzb3J5LmphdmEKQEAgLTE2LDEwICsxNiw4IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5oYXJkd2FyZS51c2I7CiAKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogLyoqCiAgKiBBIGNsYXNzIHJlcHJlc2VudGluZyBhIFVTQiBhY2Nlc3NvcnksIHdoaWNoIGlzIGFuIGV4dGVybmFsIGhhcmR3YXJlIGNvbXBvbmVudApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkRldmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkRldmljZS5qYXZhCmluZGV4IGQxZTYzZjYuLmIwYmE5YzEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JEZXZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiRGV2aWNlLmphdmEKQEAgLTE2LDEyICsxNiw4IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5oYXJkd2FyZS51c2I7CiAKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiAKIC8qKgogICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgVVNCIGRldmljZSBhdHRhY2hlZCB0byB0aGUgYW5kcm9pZCBkZXZpY2Ugd2l0aCB0aGUgYW5kcm9pZCBkZXZpY2UKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JFbmRwb2ludC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkVuZHBvaW50LmphdmEKaW5kZXggNzUzYTQ0Ny4uNzA4ZDY1MSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkVuZHBvaW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkVuZHBvaW50LmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlLnVzYjsKIAotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkludGVyZmFjZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkludGVyZmFjZS5qYXZhCmluZGV4IGQ2YzU0YTguLmU5NGJhYTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JJbnRlcmZhY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiSW50ZXJmYWNlLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlLnVzYjsKIAotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0V4dHJhY3RCdXR0b24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9FeHRyYWN0QnV0dG9uLmphdmEKaW5kZXggYjZiNzU5NS4uZmU2M2MxZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0V4dHJhY3RCdXR0b24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvRXh0cmFjdEJ1dHRvbi5qYXZhCkBAIC0zMiw4ICszMiwxMiBAQAogICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmJ1dHRvblN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgRXh0cmFjdEJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEV4dHJhY3RCdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgRXh0cmFjdEJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAgICAgCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvRXh0cmFjdEVkaXRUZXh0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvRXh0cmFjdEVkaXRUZXh0LmphdmEKaW5kZXggMjNhZTIxYi4uNDhiNjA0YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0V4dHJhY3RFZGl0VGV4dC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9FeHRyYWN0RWRpdFRleHQuamF2YQpAQCAtMzgsOCArMzgsMTIgQEAKICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5lZGl0VGV4dFN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgRXh0cmFjdEVkaXRUZXh0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgRXh0cmFjdEVkaXRUZXh0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEV4dHJhY3RFZGl0VGV4dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRJTUUoSW5wdXRNZXRob2RTZXJ2aWNlIGltZSkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0lJbnB1dE1ldGhvZFNlc3Npb25XcmFwcGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvSUlucHV0TWV0aG9kU2Vzc2lvbldyYXBwZXIuamF2YQppbmRleCBiYmVhOGZmLi44NDM3MjI4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvSUlucHV0TWV0aG9kU2Vzc2lvbldyYXBwZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvSUlucHV0TWV0aG9kU2Vzc2lvbldyYXBwZXIuamF2YQpAQCAtMjUsNyArMjUsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXRDaGFubmVsOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0lucHV0TWV0aG9kU2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0lucHV0TWV0aG9kU2VydmljZS5qYXZhCmluZGV4IDFiN2Q5ZWEuLjgxYWQyOGIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9JbnB1dE1ldGhvZFNlcnZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvSW5wdXRNZXRob2RTZXJ2aWNlLmphdmEKQEAgLTIzMjIsNiArMjMyMiwyMSBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIEByZXR1cm4gVGhlIHJlY29tbWVuZGVkIGhlaWdodCBvZiB0aGUgaW5wdXQgbWV0aG9kIHdpbmRvdy4KKyAgICAgKiBBbiBJTUUgYXV0aG9yIGNhbiBnZXQgdGhlIGxhc3QgaW5wdXQgbWV0aG9kJ3MgaGVpZ2h0IGFzIHRoZSByZWNvbW1lbmRlZCBoZWlnaHQKKyAgICAgKiBieSBjYWxsaW5nIHRoaXMgaW4KKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5pbnB1dG1ldGhvZHNlcnZpY2UuSW5wdXRNZXRob2RTZXJ2aWNlI29uU3RhcnRJbnB1dFZpZXcoRWRpdG9ySW5mbywgYm9vbGVhbil9LgorICAgICAqIElmIHlvdSBkb24ndCBuZWVkIHRvIHVzZSBhIHByZWRlZmluZWQgZml4ZWQgaGVpZ2h0LCB5b3UgY2FuIGF2b2lkIHRoZSB3aW5kb3ctcmVzaXppbmcgb2YgSU1FCisgICAgICogc3dpdGNoaW5nIGJ5IHVzaW5nIHRoaXMgdmFsdWUgYXMgYSB2aXNpYmxlIGluc2V0IGhlaWdodC4gSXQncyBlZmZpY2llbnQgZm9yIHRoZSBzbW9vdGgKKyAgICAgKiB0cmFuc2l0aW9uIGJldHdlZW4gZGlmZmVyZW50IElNRXMuIEhvd2V2ZXIsIG5vdGUgdGhhdCB0aGlzIG1heSByZXR1cm4gMCAob3IgcG9zc2libHkKKyAgICAgKiB1bmV4cGVjdGVkbHkgbG93IGhlaWdodCkuIFlvdSBzaG91bGQgdGh1cyBhdm9pZCByZWx5aW5nIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBtZXRob2QKKyAgICAgKiBhbGwgdGhlIHRpbWUuIFBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIGEgcmVhc29uYWJsZSBoZWlnaHQgZm9yIHRoZSBJTUUuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRJbnB1dE1ldGhvZFdpbmRvd1JlY29tbWVuZGVkSGVpZ2h0KCkgeworICAgICAgICByZXR1cm4gbUltbS5nZXRJbnB1dE1ldGhvZFdpbmRvd1Zpc2libGVIZWlnaHQoKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBQZXJmb3JtcyBhIGR1bXAgb2YgdGhlIElucHV0TWV0aG9kU2VydmljZSdzIGludGVybmFsIHN0YXRlLiAgT3ZlcnJpZGUKICAgICAgKiB0byBhZGQgeW91ciBvd24gaW5mb3JtYXRpb24gdG8gdGhlIGR1bXAuCiAgICAgICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmRWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmRWaWV3LmphdmEKaW5kZXggNDkxNjI0NC4uYWY3NWEwYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0tleWJvYXJkVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9LZXlib2FyZFZpZXcuamF2YQpAQCAtMjc5LDEyICsyNzksMTUgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmtleWJvYXJkVmlld1N0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgS2V5Ym9hcmRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgS2V5Ym9hcmRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9Ci0gICAgICAgICAgICBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsIGFuZHJvaWQuUi5zdHlsZWFibGUuS2V5Ym9hcmRWaWV3LCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIEtleWJvYXJkVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGFuZHJvaWQuUi5zdHlsZWFibGUuS2V5Ym9hcmRWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlID0KICAgICAgICAgICAgICAgICAoTGF5b3V0SW5mbGF0ZXIpIGNvbnRleHQKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9CYXNlTmV0d29ya1N0YXRlVHJhY2tlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0Jhc2VOZXR3b3JrU3RhdGVUcmFja2VyLmphdmEKaW5kZXggNDc2ZmVmZS4uODA0ZjhlZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0Jhc2VOZXR3b3JrU3RhdGVUcmFja2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0Jhc2VOZXR3b3JrU3RhdGVUcmFja2VyLmphdmEKQEAgLTIwLDEwICsyMCwxMCBAQAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9uczsKLQogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zOworCiAvKioKICAqIEludGVyZmFjZSB0byBjb250cm9sIGFuZCBvYnNlcnZlIHN0YXRlIG9mIGEgc3BlY2lmaWMgbmV0d29yaywgaGlkaW5nCiAgKiBuZXR3b3JrLXNwZWNpZmljIGRldGFpbHMgZnJvbSB7QGxpbmsgQ29ubmVjdGl2aXR5TWFuYWdlcn0uIFN1cmZhY2VzIGV2ZW50cwpAQCAtMTA4LDExICsxMDgsNiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCkgewotICAgICAgICAvLyBub3QgaW1wbGVtZW50ZWQKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZWQoYm9vbGVhbiBpc0NhcHRpdmVQb3J0YWwpIHsKICAgICAgICAgLy8gbm90IGltcGxlbWVudGVkCiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0NhcHRpdmVQb3J0YWxUcmFja2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvQ2FwdGl2ZVBvcnRhbFRyYWNrZXIuamF2YQppbmRleCBkNjc4ZjFlLi41YjZmMTU0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvQ2FwdGl2ZVBvcnRhbFRyYWNrZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvQ2FwdGl2ZVBvcnRhbFRyYWNrZXIuamF2YQpAQCAtNDgsNyArNDgsNiBAQAogaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOwogaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwogaW1wb3J0IGphdmEubmV0LkluZXQ0QWRkcmVzczsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXRUaW1lb3V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmV0LlVSTDsKIGltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKQEAgLTg0LDEzICs4MywxMiBAQAogICAgIHByaXZhdGUgU3RyaW5nIG1TZXJ2ZXI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbVVybDsKICAgICBwcml2YXRlIGJvb2xlYW4gbUlzQ2FwdGl2ZVBvcnRhbENoZWNrRW5hYmxlZCA9IGZhbHNlOwotICAgIHByaXZhdGUgSUNvbm5lY3Rpdml0eU1hbmFnZXIgbUNvbm5TZXJ2aWNlOwotICAgIHByaXZhdGUgVGVsZXBob255TWFuYWdlciBtVGVsZXBob255TWFuYWdlcjsKLSAgICBwcml2YXRlIFdpZmlNYW5hZ2VyIG1XaWZpTWFuYWdlcjsKLSAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBJQ29ubmVjdGl2aXR5TWFuYWdlciBtQ29ublNlcnZpY2U7CisgICAgcHJpdmF0ZSBmaW5hbCBUZWxlcGhvbnlNYW5hZ2VyIG1UZWxlcGhvbnlNYW5hZ2VyOworICAgIHByaXZhdGUgZmluYWwgV2lmaU1hbmFnZXIgbVdpZmlNYW5hZ2VyOworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIE5ldHdvcmtJbmZvIG1OZXR3b3JrSW5mbzsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDTURfREVURUNUX1BPUlRBTCAgICAgICAgICA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENNRF9DT05ORUNUSVZJVFlfQ0hBTkdFICAgID0gMTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0RFTEFZRURfQ0FQVElWRV9DSEVDSyAgPSAyOwogCkBAIC05OCwxNCArOTYsMTUgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVMQVlFRF9DSEVDS19JTlRFUlZBTF9NUyA9IDEwMDAwOwogICAgIHByaXZhdGUgaW50IG1EZWxheWVkQ2hlY2tUb2tlbiA9IDA7CiAKLSAgICBwcml2YXRlIFN0YXRlIG1EZWZhdWx0U3RhdGUgPSBuZXcgRGVmYXVsdFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBTdGF0ZSBtTm9BY3RpdmVOZXR3b3JrU3RhdGUgPSBuZXcgTm9BY3RpdmVOZXR3b3JrU3RhdGUoKTsKLSAgICBwcml2YXRlIFN0YXRlIG1BY3RpdmVOZXR3b3JrU3RhdGUgPSBuZXcgQWN0aXZlTmV0d29ya1N0YXRlKCk7Ci0gICAgcHJpdmF0ZSBTdGF0ZSBtRGVsYXllZENhcHRpdmVDaGVja1N0YXRlID0gbmV3IERlbGF5ZWRDYXB0aXZlQ2hlY2tTdGF0ZSgpOworICAgIHByaXZhdGUgZmluYWwgU3RhdGUgbURlZmF1bHRTdGF0ZSA9IG5ldyBEZWZhdWx0U3RhdGUoKTsKKyAgICBwcml2YXRlIGZpbmFsIFN0YXRlIG1Ob0FjdGl2ZU5ldHdvcmtTdGF0ZSA9IG5ldyBOb0FjdGl2ZU5ldHdvcmtTdGF0ZSgpOworICAgIHByaXZhdGUgZmluYWwgU3RhdGUgbUFjdGl2ZU5ldHdvcmtTdGF0ZSA9IG5ldyBBY3RpdmVOZXR3b3JrU3RhdGUoKTsKKyAgICBwcml2YXRlIGZpbmFsIFN0YXRlIG1EZWxheWVkQ2FwdGl2ZUNoZWNrU3RhdGUgPSBuZXcgRGVsYXllZENhcHRpdmVDaGVja1N0YXRlKCk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VUVVBfV0laQVJEX1BBQ0tBR0UgPSAiY29tLmdvb2dsZS5hbmRyb2lkLnNldHVwd2l6YXJkIjsKICAgICBwcml2YXRlIGJvb2xlYW4gbURldmljZVByb3Zpc2lvbmVkID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBQcm92aXNpb25pbmdPYnNlcnZlciBtUHJvdmlzaW9uaW5nT2JzZXJ2ZXI7CisgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisgICAgcHJpdmF0ZSBmaW5hbCBQcm92aXNpb25pbmdPYnNlcnZlciBtUHJvdmlzaW9uaW5nT2JzZXJ2ZXI7CiAKICAgICBwcml2YXRlIENhcHRpdmVQb3J0YWxUcmFja2VyKENvbnRleHQgY29udGV4dCwgSUNvbm5lY3Rpdml0eU1hbmFnZXIgY3MpIHsKICAgICAgICAgc3VwZXIoVEFHKTsKQEAgLTE3NCwyOSArMTczLDExIEBACiAgICAgICAgIHJldHVybiBjYXB0aXZlUG9ydGFsOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRldGVjdENhcHRpdmVQb3J0YWwoTmV0d29ya0luZm8gaW5mbykgewotICAgICAgICBzZW5kTWVzc2FnZShvYnRhaW5NZXNzYWdlKENNRF9ERVRFQ1RfUE9SVEFMLCBpbmZvKSk7Ci0gICAgfQotCiAgICAgcHJpdmF0ZSBjbGFzcyBEZWZhdWx0U3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RFVEVDVF9QT1JUQUw6Ci0gICAgICAgICAgICAgICAgICAgIE5ldHdvcmtJbmZvIGluZm8gPSAoTmV0d29ya0luZm8pIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICAvLyBDaGVja2luZyBvbiBhIHNlY29uZGFyeSBjb25uZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgICAgICAgICAgICAgICAgICAgLy8geWV0Ci0gICAgICAgICAgICAgICAgICAgIG5vdGlmeVBvcnRhbENoZWNrQ29tcGxldGUoaW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0NPTk5FQ1RJVklUWV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfREVMQVlFRF9DQVBUSVZFX0NIRUNLOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBsb2dlKCJJZ25vcmluZyAiICsgbWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9nZSgiSWdub3JpbmcgIiArIG1lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTYsMTkgKzI5Nyw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgbm90aWZ5UG9ydGFsQ2hlY2tDb21wbGV0ZShOZXR3b3JrSW5mbyBpbmZvKSB7Ci0gICAgICAgIGlmIChpbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgIGxvZ2UoIm5vdGlmeVBvcnRhbENoZWNrQ29tcGxldGUgb24gbnVsbCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2coIm5vdGlmeVBvcnRhbENoZWNrQ29tcGxldGU6IG5pPSIgKyBpbmZvKTsKLSAgICAgICAgICAgIG1Db25uU2VydmljZS5jYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZShpbmZvKTsKLSAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHByaXZhdGUgdm9pZCBub3RpZnlQb3J0YWxDaGVja0NvbXBsZXRlZChOZXR3b3JrSW5mbyBpbmZvLCBib29sZWFuIGlzQ2FwdGl2ZVBvcnRhbCkgewogICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgICAgICAgICBsb2dlKCJub3RpZnlQb3J0YWxDaGVja0NvbXBsZXRlIG9uIG51bGwiKTsKQEAgLTQ2NCw3ICs0MzIsNiBAQAogICAgICAgICAgICAgICAgIGxhdGVuY3lCcm9hZGNhc3QucHV0RXh0cmEoRVhUUkFfTkVUV09SS19UWVBFLCBtVGVsZXBob255TWFuYWdlci5nZXROZXR3b3JrVHlwZSgpKTsKICAgICAgICAgICAgICAgICBMaXN0PENlbGxJbmZvPiBpbmZvID0gbVRlbGVwaG9ueU1hbmFnZXIuZ2V0QWxsQ2VsbEluZm8oKTsKICAgICAgICAgICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHVuaXF1ZUNlbGxJZCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgICAgICAgICBpbnQgbnVtUmVnaXN0ZXJlZENlbGxJbmZvID0gMDsKICAgICAgICAgICAgICAgICBmb3IgKENlbGxJbmZvIGNlbGxJbmZvIDogaW5mbykgewogICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbEluZm8uaXNSZWdpc3RlcmVkKCkpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvQ29ubmVjdGl2aXR5TWFuYWdlci5qYXZhCmluZGV4IGM3OGE5NzMuLmE5YjI1MzMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0Nvbm5lY3Rpdml0eU1hbmFnZXIuamF2YQpAQCAtMjUsNyArMjUsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUzsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlc3VsdFJlY2VpdmVyOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiAKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKQEAgLTEzMzAsMjQgKzEzMjksNiBAQAogCiAgICAgLyoqCiAgICAgICogU2lnbmFsIHRoYXQgdGhlIGNhcHRpdmUgcG9ydGFsIGNoZWNrIG9uIHRoZSBpbmRpY2F0ZWQgbmV0d29yawotICAgICAqIGlzIGNvbXBsZXRlIGFuZCB3ZSBjYW4gdHVybiB0aGUgbmV0d29yayBvbiBmb3IgZ2VuZXJhbCB1c2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5mbyB0aGUge0BsaW5rIE5ldHdvcmtJbmZvfSBvYmplY3QgZm9yIHRoZSBuZXR3b3JrVHlwZQotICAgICAqICAgICAgICBpbiBxdWVzdGlvbi4KLSAgICAgKgotICAgICAqIDxwPlRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoZSBjYWxsIHRvIGhvbGQgdGhlIHBlcm1pc3Npb24KLSAgICAgKiB7QGxpbmsgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uI0NPTk5FQ1RJVklUWV9JTlRFUk5BTH0uCi0gICAgICoge0BoaWRlfQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKE5ldHdvcmtJbmZvIGluZm8pIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLmNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKGluZm8pOwotICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2lnbmFsIHRoYXQgdGhlIGNhcHRpdmUgcG9ydGFsIGNoZWNrIG9uIHRoZSBpbmRpY2F0ZWQgbmV0d29yawogICAgICAqIGlzIGNvbXBsZXRlIGFuZCB3aGV0aGVyIGl0cyBhIGNhcHRpdmUgcG9ydGFsIG9yIG5vdC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbmZvIHRoZSB7QGxpbmsgTmV0d29ya0luZm99IG9iamVjdCBmb3IgdGhlIG5ldHdvcmtUeXBlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRGhjcEluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9EaGNwSW5mby5qYXZhCmluZGV4IDNiZWRlNWQuLjc4OGQ3ZDkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9EaGNwSW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9EaGNwSW5mby5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiAKIC8qKgogICogQSBzaW1wbGUgb2JqZWN0IGZvciByZXRyaWV2aW5nIHRoZSByZXN1bHRzIG9mIGEgREhDUCByZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0RoY3BSZXN1bHRzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRGhjcFJlc3VsdHMuamF2YQppbmRleCBhM2Y3MGRhLi4yMmIyNmIxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRGhjcFJlc3VsdHMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRGhjcFJlc3VsdHMuamF2YQpAQCAtMjMsOSArMjMsNiBAQAogCiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiAKIC8qKgogICogQSBzaW1wbGUgb2JqZWN0IGZvciByZXRyaWV2aW5nIHRoZSByZXN1bHRzIG9mIGEgREhDUCByZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0R1bW15RGF0YVN0YXRlVHJhY2tlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0R1bW15RGF0YVN0YXRlVHJhY2tlci5qYXZhCmluZGV4IDUxYTExOTEuLmE1ZDA1OWUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9EdW1teURhdGFTdGF0ZVRyYWNrZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRHVtbXlEYXRhU3RhdGVUcmFja2VyLmphdmEKQEAgLTExNywxMSArMTE3LDYgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZSgpIHsKLSAgICAgICAgLy8gbm90IGltcGxlbWVudGVkCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGVkKGJvb2xlYW4gaXNDYXB0aXZlUG9ydGFsKSB7CiAgICAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZAogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9FdGhlcm5ldERhdGFUcmFja2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRXRoZXJuZXREYXRhVHJhY2tlci5qYXZhCmluZGV4IGNjOGM3NzEuLjk1ZmFhNzcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9FdGhlcm5ldERhdGFUcmFja2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0V0aGVybmV0RGF0YVRyYWNrZXIuamF2YQpAQCAtMjcwLDExICsyNzAsNiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCkgewotICAgICAgICAvLyBub3QgaW1wbGVtZW50ZWQKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZWQoYm9vbGVhbiBpc0NhcHRpdmVQb3J0YWwpIHsKICAgICAgICAgLy8gbm90IGltcGxlbWVudGVkCiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0lDb25uZWN0aXZpdHlNYW5hZ2VyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvSUNvbm5lY3Rpdml0eU1hbmFnZXIuYWlkbAppbmRleCBjMWRhMmUzLi5iMzIxN2ViIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvSUNvbm5lY3Rpdml0eU1hbmFnZXIuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvSUNvbm5lY3Rpdml0eU1hbmFnZXIuYWlkbApAQCAtMTI5LDggKzEyOSw2IEBACiAKICAgICBib29sZWFuIHVwZGF0ZUxvY2tkb3duVnBuKCk7CiAKLSAgICB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKGluIE5ldHdvcmtJbmZvIGluZm8pOwotCiAgICAgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZWQoaW4gTmV0d29ya0luZm8gaW5mbywgYm9vbGVhbiBpc0NhcHRpdmVQb3J0YWwpOwogCiAgICAgdm9pZCBzdXBwbHlNZXNzZW5nZXIoaW50IG5ldHdvcmtUeXBlLCBpbiBNZXNzZW5nZXIgbWVzc2VuZ2VyKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9MaW5rU29ja2V0Tm90aWZpZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9MaW5rU29ja2V0Tm90aWZpZXIuamF2YQppbmRleCAyOGUyODM0Li5lMjQyOWQ4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTGlua1NvY2tldE5vdGlmaWVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0xpbmtTb2NrZXROb3RpZmllci5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5uZXQ7CiAKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCiAvKioKICAqIEludGVyZmFjZSB1c2VkIHRvIGdldCBmZWVkYmFjayBhYm91dCBhIHtAbGluayBhbmRyb2lkLm5ldC5MaW5rU29ja2V0fS4gIEluc3RhbmNlIGlzIG9wdGlvbmFsbHkKICAqIHBhc3NlZCB3aGVuIGEgTGlua1NvY2tldCBpcyBjb25zdHJ1Y3RlZC4gIE11bHRpcGxlIExpbmtTb2NrZXRzIG1heSB1c2UgdGhlIHNhbWUgbm90aWZpZXIuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTWFpbFRvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTWFpbFRvLmphdmEKaW5kZXggYjkwZGNiMS4uZGFkYjZkOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L01haWxUby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9NYWlsVG8uamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiAvKioKICAqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTW9iaWxlRGF0YVN0YXRlVHJhY2tlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L01vYmlsZURhdGFTdGF0ZVRyYWNrZXIuamF2YQppbmRleCBjMTA2NTE0Li5kOWMzNWMwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTW9iaWxlRGF0YVN0YXRlVHJhY2tlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Nb2JpbGVEYXRhU3RhdGVUcmFja2VyLmphdmEKQEAgLTQ2MCwxMSArNDYwLDYgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZSgpIHsKLSAgICAgICAgLy8gbm90IGltcGxlbWVudGVkCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGVkKGJvb2xlYW4gaXNDYXB0aXZlUG9ydGFsKSB7CiAgICAgICAgIGlmIChtSXNDYXB0aXZlUG9ydGFsLmdldEFuZFNldChpc0NhcHRpdmVQb3J0YWwpICE9IGlzQ2FwdGl2ZVBvcnRhbCkgewogICAgICAgICAgICAgLy8gQ2FwdGl2ZSBwb3J0YWwgY2hhbmdlIGVuYWJsZS9kaXNhYmxlIGZhaWxpbmcgZmFzdApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L05ldHdvcmtDb25maWcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrQ29uZmlnLmphdmEKaW5kZXggNWQ5NWY0MS4uMzJhMmNkYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L05ldHdvcmtDb25maWcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTmV0d29ya0NvbmZpZy5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5uZXQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L05ldHdvcmtJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTmV0d29ya0luZm8uamF2YQppbmRleCA0ZDJhNzBkLi41M2IxMzA4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTmV0d29ya0luZm8uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTmV0d29ya0luZm8uamF2YQpAQCAtMTU2LDE4ICsxNTYsMjAgQEAKICAgICAvKioge0BoaWRlfSAqLwogICAgIHB1YmxpYyBOZXR3b3JrSW5mbyhOZXR3b3JrSW5mbyBzb3VyY2UpIHsKICAgICAgICAgaWYgKHNvdXJjZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtTmV0d29ya1R5cGUgPSBzb3VyY2UubU5ldHdvcmtUeXBlOwotICAgICAgICAgICAgbVN1YnR5cGUgPSBzb3VyY2UubVN1YnR5cGU7Ci0gICAgICAgICAgICBtVHlwZU5hbWUgPSBzb3VyY2UubVR5cGVOYW1lOwotICAgICAgICAgICAgbVN1YnR5cGVOYW1lID0gc291cmNlLm1TdWJ0eXBlTmFtZTsKLSAgICAgICAgICAgIG1TdGF0ZSA9IHNvdXJjZS5tU3RhdGU7Ci0gICAgICAgICAgICBtRGV0YWlsZWRTdGF0ZSA9IHNvdXJjZS5tRGV0YWlsZWRTdGF0ZTsKLSAgICAgICAgICAgIG1SZWFzb24gPSBzb3VyY2UubVJlYXNvbjsKLSAgICAgICAgICAgIG1FeHRyYUluZm8gPSBzb3VyY2UubUV4dHJhSW5mbzsKLSAgICAgICAgICAgIG1Jc0ZhaWxvdmVyID0gc291cmNlLm1Jc0ZhaWxvdmVyOwotICAgICAgICAgICAgbUlzUm9hbWluZyA9IHNvdXJjZS5tSXNSb2FtaW5nOwotICAgICAgICAgICAgbUlzQXZhaWxhYmxlID0gc291cmNlLm1Jc0F2YWlsYWJsZTsKLSAgICAgICAgICAgIG1Jc0Nvbm5lY3RlZFRvUHJvdmlzaW9uaW5nTmV0d29yayA9IHNvdXJjZS5tSXNDb25uZWN0ZWRUb1Byb3Zpc2lvbmluZ05ldHdvcms7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHNvdXJjZSkgeworICAgICAgICAgICAgICAgIG1OZXR3b3JrVHlwZSA9IHNvdXJjZS5tTmV0d29ya1R5cGU7CisgICAgICAgICAgICAgICAgbVN1YnR5cGUgPSBzb3VyY2UubVN1YnR5cGU7CisgICAgICAgICAgICAgICAgbVR5cGVOYW1lID0gc291cmNlLm1UeXBlTmFtZTsKKyAgICAgICAgICAgICAgICBtU3VidHlwZU5hbWUgPSBzb3VyY2UubVN1YnR5cGVOYW1lOworICAgICAgICAgICAgICAgIG1TdGF0ZSA9IHNvdXJjZS5tU3RhdGU7CisgICAgICAgICAgICAgICAgbURldGFpbGVkU3RhdGUgPSBzb3VyY2UubURldGFpbGVkU3RhdGU7CisgICAgICAgICAgICAgICAgbVJlYXNvbiA9IHNvdXJjZS5tUmVhc29uOworICAgICAgICAgICAgICAgIG1FeHRyYUluZm8gPSBzb3VyY2UubUV4dHJhSW5mbzsKKyAgICAgICAgICAgICAgICBtSXNGYWlsb3ZlciA9IHNvdXJjZS5tSXNGYWlsb3ZlcjsKKyAgICAgICAgICAgICAgICBtSXNSb2FtaW5nID0gc291cmNlLm1Jc1JvYW1pbmc7CisgICAgICAgICAgICAgICAgbUlzQXZhaWxhYmxlID0gc291cmNlLm1Jc0F2YWlsYWJsZTsKKyAgICAgICAgICAgICAgICBtSXNDb25uZWN0ZWRUb1Byb3Zpc2lvbmluZ05ldHdvcmsgPSBzb3VyY2UubUlzQ29ubmVjdGVkVG9Qcm92aXNpb25pbmdOZXR3b3JrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTmV0d29ya1N0YXRlVHJhY2tlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L05ldHdvcmtTdGF0ZVRyYWNrZXIuamF2YQppbmRleCAxY2E5MjU1Li5jNDliMWQxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTmV0d29ya1N0YXRlVHJhY2tlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrU3RhdGVUcmFja2VyLmphdmEKQEAgLTE0NCwxMSArMTQ0LDYgQEAKICAgICBwdWJsaWMgYm9vbGVhbiByZWNvbm5lY3QoKTsKIAogICAgIC8qKgotICAgICAqIFJlYWR5IHRvIHN3aXRjaCBvbiB0byB0aGUgbmV0d29yayBhZnRlciBjYXB0aXZlIHBvcnRhbCBjaGVjawotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCk7Ci0KLSAgICAvKioKICAgICAgKiBDYXB0aXZlIHBvcnRhbCBjaGVjayBoYXMgY29tcGxldGVkCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGVkKGJvb2xlYW4gaXNDYXB0aXZlKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Qcm94eVByb3BlcnRpZXMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Qcm94eVByb3BlcnRpZXMuamF2YQppbmRleCAwMTBlNTI3Li41NGZjMDFkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvUHJveHlQcm9wZXJ0aWVzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L1Byb3h5UHJvcGVydGllcy5qYXZhCkBAIC0yMiw3ICsyMiw2IEBACiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIAogaW1wb3J0IGphdmEubmV0LkluZXRTb2NrZXRBZGRyZXNzOwotaW1wb3J0IGphdmEubmV0LlVua25vd25Ib3N0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L1NTTENlcnRpZmljYXRlU29ja2V0RmFjdG9yeS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L1NTTENlcnRpZmljYXRlU29ja2V0RmFjdG9yeS5qYXZhCmluZGV4IGIwMjc4ZDMuLjEyZTg3OTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9TU0xDZXJ0aWZpY2F0ZVNvY2tldEZhY3RvcnkuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvU1NMQ2VydGlmaWNhdGVTb2NrZXRGYWN0b3J5LmphdmEKQEAgLTEzNSw3ICsxMzUsOCBAQAogICAgICAqIGRpc2FibGVkLCB1c2luZyBhbiBvcHRpb25hbCBoYW5kc2hha2UgdGltZW91dCBhbmQgU1NMIHNlc3Npb24gY2FjaGUuCiAgICAgICoKICAgICAgKiA8cCBjbGFzcz0iY2F1dGlvbiI+PGI+V2FybmluZzo8L2I+IFNvY2tldHMgY3JlYXRlZCB1c2luZyB0aGlzIGZhY3RvcnkKLSAgICAgKiBhcmUgdnVsbmVyYWJsZSB0byBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzITwvcD4KKyAgICAgKiBhcmUgdnVsbmVyYWJsZSB0byBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzITwvcD4uIFRoZSBjYWxsZXIgbXVzdCBpbXBsZW1lbnQKKyAgICAgKiBpdHMgb3duIHZlcmlmaWNhdGlvbi4KICAgICAgKgogICAgICAqIEBwYXJhbSBoYW5kc2hha2VUaW1lb3V0TWlsbGlzIHRvIHVzZSBmb3IgU1NMIGNvbm5lY3Rpb24gaGFuZHNoYWtlLCBvciAwCiAgICAgICogICAgICAgICBmb3Igbm9uZS4gIFRoZSBzb2NrZXQgdGltZW91dCBpcyByZXNldCB0byAwIGFmdGVyIHRoZSBoYW5kc2hha2UuCkBAIC0yMjMsOCArMjI0LDYgQEAKICAgICAgICAgICAgIGlmIChtSW5zZWN1cmVGYWN0b3J5ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZiAobVNlY3VyZSkgewogICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICIqKiogQllQQVNTSU5HIFNTTCBTRUNVUklUWSBDSEVDS1MgKHNvY2tldC5yZWxheHNzbGNoZWNrPXllcykgKioqIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQnlwYXNzaW5nIFNTTCBzZWN1cml0eSBjaGVja3MgYXQgY2FsbGVyJ3MgcmVxdWVzdCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtSW5zZWN1cmVGYWN0b3J5ID0gbWFrZVNvY2tldEZhY3RvcnkobUtleU1hbmFnZXJzLCBJTlNFQ1VSRV9UUlVTVF9NQU5BR0VSKTsKICAgICAgICAgICAgIH0KQEAgLTQzMSw2ICs0MzAsNyBAQAogICAgICAgICBzLnNldEFscG5Qcm90b2NvbHMobUFscG5Qcm90b2NvbHMpOwogICAgICAgICBzLnNldEhhbmRzaGFrZVRpbWVvdXQobUhhbmRzaGFrZVRpbWVvdXRNaWxsaXMpOwogICAgICAgICBzLnNldENoYW5uZWxJZFByaXZhdGVLZXkobUNoYW5uZWxJZFByaXZhdGVLZXkpOworICAgICAgICBzLnNldEhvc3RuYW1lKGhvc3QpOwogICAgICAgICBpZiAobVNlY3VyZSkgewogICAgICAgICAgICAgdmVyaWZ5SG9zdG5hbWUocywgaG9zdCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9TU0xTZXNzaW9uQ2FjaGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9TU0xTZXNzaW9uQ2FjaGUuamF2YQppbmRleCAxNTQyMWRlLi42NWRiMmMzIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvU1NMU2Vzc2lvbkNhY2hlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L1NTTFNlc3Npb25DYWNoZS5qYXZhCkBAIC0xOSwxMiArMTksMTYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCitpbXBvcnQgY29tLmFuZHJvaWQub3JnLmNvbnNjcnlwdC5DbGllbnRTZXNzaW9uQ29udGV4dDsKIGltcG9ydCBjb20uYW5kcm9pZC5vcmcuY29uc2NyeXB0LkZpbGVDbGllbnRTZXNzaW9uQ2FjaGU7CiBpbXBvcnQgY29tLmFuZHJvaWQub3JnLmNvbnNjcnlwdC5TU0xDbGllbnRTZXNzaW9uQ2FjaGU7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIAoraW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMQ29udGV4dDsKK2ltcG9ydCBqYXZheC5uZXQuc3NsLlNTTFNlc3Npb25Db250ZXh0OworCiAvKioKICAqIEZpbGUtYmFzZWQgY2FjaGUgb2YgZXN0YWJsaXNoZWQgU1NMIHNlc3Npb25zLiAgV2hlbiByZS1lc3RhYmxpc2hpbmcgYQogICogY29ubmVjdGlvbiB0byB0aGUgc2FtZSBzZXJ2ZXIsIHVzaW5nIGFuIFNTTCBzZXNzaW9uIGNhY2hlIGNhbiBzYXZlIHNvbWUgdGltZSwKQEAgLTM4LDYgKzQyLDQwIEBACiAgICAgLyogcGFja2FnZSAqLyBmaW5hbCBTU0xDbGllbnRTZXNzaW9uQ2FjaGUgbVNlc3Npb25DYWNoZTsKIAogICAgIC8qKgorICAgICAqIEluc3RhbGxzIGEge0BsaW5rIFNTTFNlc3Npb25DYWNoZX0gb24gYSB7QGxpbmsgU1NMQ29udGV4dH0uIFRoZSBjYWNoZSB3aWxsCisgICAgICogYmUgdXNlZCBvbiBhbGwgc29ja2V0IGZhY3RvcmllcyBjcmVhdGVkIGJ5IHRoaXMgY29udGV4dCAoaW5jbHVkaW5nIGZhY3RvcmllcworICAgICAqIGNyZWF0ZWQgYmVmb3JlIHRoaXMgY2FsbCkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2FjaGUgdGhlIGNhY2hlIGluc3RhbmNlIHRvIGluc3RhbGwsIG9yIHtAY29kZSBudWxsfSB0byB1bmluc3RhbGwgYW55CisgICAgICogICAgICAgICBleGlzdGluZyBjYWNoZS4KKyAgICAgKiBAcGFyYW0gY29udGV4dCB0aGUgY29udGV4dCB0byBpbnN0YWxsIGl0IG9uLgorICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBjb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgYSBzZXNzaW9uCisgICAgICogICAgICAgICBjYWNoZS4KKyAgICAgKgorICAgICAqIEBoaWRlIGNhbmRpZGF0ZSBmb3IgcHVibGljIEFQSQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbnN0YWxsKFNTTFNlc3Npb25DYWNoZSBjYWNoZSwgU1NMQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIFNTTFNlc3Npb25Db250ZXh0IGNsaWVudENvbnRleHQgPSBjb250ZXh0LmdldENsaWVudFNlc3Npb25Db250ZXh0KCk7CisgICAgICAgIGlmIChjbGllbnRDb250ZXh0IGluc3RhbmNlb2YgQ2xpZW50U2Vzc2lvbkNvbnRleHQpIHsKKyAgICAgICAgICAgICgoQ2xpZW50U2Vzc2lvbkNvbnRleHQpIGNsaWVudENvbnRleHQpLnNldFBlcnNpc3RlbnRDYWNoZSgKKyAgICAgICAgICAgICAgICAgICAgY2FjaGUgPT0gbnVsbCA/IG51bGwgOiBjYWNoZS5tU2Vzc2lvbkNhY2hlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkluY29tcGF0aWJsZSBTU0xDb250ZXh0OiAiICsgY29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOT1RFOiBUaGlzIG5lZWRzIHRvIGJlIE9iamVjdCAoYW5kIG5vdCBTU0xDbGllbnRTZXNzaW9uQ2FjaGUpIGJlY2F1c2UgYXBwcworICAgICAqIHRoYXQgYnVpbGQgZGlyZWN0bHkgYWdhaW5zdCB0aGUgZnJhbWV3b3JrIChhbmQgbm90IHRoZSBTREspIG1pZ2h0IG5vdCBkZWNsYXJlCisgICAgICogYSBkZXBlbmRlbmN5IG9uIGNvbnNjcnlwdC4gSmF2YWMgd2lsbCB0aGVuIGhhcyBmYWlsIHdoaWxlIHJlc29sdmluZyBjb25zdHJ1Y3RvcnMuCisgICAgICoKKyAgICAgKiBAaGlkZSBGb3IgdW5pdCB0ZXN0IHVzZSBvbmx5CisgICAgICovCisgICAgcHVibGljIFNTTFNlc3Npb25DYWNoZShPYmplY3QgY2FjaGUpIHsKKyAgICAgICAgbVNlc3Npb25DYWNoZSA9IChTU0xDbGllbnRTZXNzaW9uQ2FjaGUpIGNhY2hlOworICAgIH0KKworICAgIC8qKgogICAgICAqIENyZWF0ZSBhIHNlc3Npb24gY2FjaGUgdXNpbmcgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCiAgICAgICogSW5kaXZpZHVhbCBzZXNzaW9uIGVudHJpZXMgd2lsbCBiZSBmaWxlcyB3aXRoaW4gdGhlIGRpcmVjdG9yeS4KICAgICAgKiBNdWx0aXBsZSBpbnN0YW5jZXMgZm9yIHRoZSBzYW1lIGRpcmVjdG9yeSBzaGFyZSBkYXRhIGludGVybmFsbHkuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvU250cENsaWVudC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L1NudHBDbGllbnQuamF2YQppbmRleCAzMTY0NDBmLi43NjczMDExIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvU250cENsaWVudC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9TbnRwQ2xpZW50LmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmV0LkRhdGFncmFtUGFja2V0OwogaW1wb3J0IGphdmEubmV0LkRhdGFncmFtU29ja2V0OwogaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcEFja1BhY2tldC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcEFja1BhY2tldC5qYXZhCmluZGV4IDRlY2E1MzEuLjdiOGJlOWMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9kaGNwL0RoY3BBY2tQYWNrZXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwQWNrUGFja2V0LmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5JbmV0NEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCiAgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIERIQ1AtQUNLIHBhY2tldC4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9kaGNwL0RoY3BPZmZlclBhY2tldC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcE9mZmVyUGFja2V0LmphdmEKaW5kZXggM2Q3OWY0ZC4uZjFjMzBlMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcE9mZmVyUGFja2V0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcE9mZmVyUGFja2V0LmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5JbmV0NEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCiAgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIERIQ1AtT0ZGRVIgcGFja2V0LgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcFBhY2tldC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcFBhY2tldC5qYXZhCmluZGV4IDMxN2E5YjQuLmM3YzI1ZjAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9kaGNwL0RoY3BQYWNrZXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwUGFja2V0LmphdmEKQEAgLTEsOCArMSw1IEBACiBwYWNrYWdlIGFuZHJvaWQubmV0LmRoY3A7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwogaW1wb3J0IGphdmEubmV0LlVua25vd25Ib3N0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwU3RhdGVNYWNoaW5lLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwU3RhdGVNYWNoaW5lLmphdmEKaW5kZXggYjZjMzg0ZC4uYmM5YTc5OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcFN0YXRlTWFjaGluZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9kaGNwL0RoY3BTdGF0ZU1hY2hpbmUuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLm5ldC5kaGNwOwogCiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9BbmRyb2lkSHR0cENsaWVudENvbm5lY3Rpb24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0FuZHJvaWRIdHRwQ2xpZW50Q29ubmVjdGlvbi5qYXZhCmluZGV4IGViOTY2NzkuLjZkNDhmY2UgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0FuZHJvaWRIdHRwQ2xpZW50Q29ubmVjdGlvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0FuZHJvaWRIdHRwQ2xpZW50Q29ubmVjdGlvbi5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5uZXQuaHR0cDsKIAotaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IZWFkZXI7Ci0KIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cENvbm5lY3Rpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBDbGllbnRDb25uZWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwQ29ubmVjdGlvbk1ldHJpY3M7CkBAIC0yNywxMiArMjUsMTAgQEAKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cEluZXRDb25uZWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwUmVxdWVzdDsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cFJlc3BvbnNlOwotaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwUmVzcG9uc2VGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5Ob0h0dHBSZXNwb25zZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuU3RhdHVzTGluZTsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuZW50aXR5LkJhc2ljSHR0cEVudGl0eTsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuZW50aXR5LkNvbnRlbnRMZW5ndGhTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuaW1wbC5EZWZhdWx0SHR0cFJlc3BvbnNlRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuaW1wbC5IdHRwQ29ubmVjdGlvbk1ldHJpY3NJbXBsOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLmVudGl0eS5FbnRpdHlTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLmVudGl0eS5TdHJpY3RDb250ZW50TGVuZ3RoU3RyYXRlZ3k7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9Db25uZWN0aW9uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9Db25uZWN0aW9uLmphdmEKaW5kZXggOTVjZWNkMi4uODM0YWQ2OSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvQ29ubmVjdGlvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0Nvbm5lY3Rpb24uamF2YQpAQCAtMjEsNyArMjEsNiBAQAogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwogCiBpbXBvcnQgamF2YXgubmV0LnNzbC5TU0xIYW5kc2hha2VFeGNlcHRpb247CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9Db25uZWN0aW9uVGhyZWFkLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9Db25uZWN0aW9uVGhyZWFkLmphdmEKaW5kZXggMzIxOTFkMi4uZDgyNTUzMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvQ29ubmVjdGlvblRocmVhZC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0Nvbm5lY3Rpb25UaHJlYWQuamF2YQpAQCAtMTksOCArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiAKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cEhvc3Q7Ci0KIGltcG9ydCBqYXZhLmxhbmcuVGhyZWFkOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0h0dHBDb25uZWN0aW9uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9IdHRwQ29ubmVjdGlvbi5qYXZhCmluZGV4IDZkZjg2YmYuLmVkZjhmZWQzIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9IdHRwQ29ubmVjdGlvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0h0dHBDb25uZWN0aW9uLmphdmEKQEAgLTIxLDkgKzIxLDcgQEAKIGltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIAotaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwQ2xpZW50Q29ubmVjdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cEhvc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLmltcGwuRGVmYXVsdEh0dHBDbGllbnRDb25uZWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5wYXJhbXMuQmFzaWNIdHRwUGFyYW1zOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5wYXJhbXMuSHR0cENvbm5lY3Rpb25QYXJhbXM7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0h0dHBSZXNwb25zZUNhY2hlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9IdHRwUmVzcG9uc2VDYWNoZS5qYXZhCmluZGV4IDI2OWRmYjguLjI3ODVhMTUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0h0dHBSZXNwb25zZUNhY2hlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvSHR0cFJlc3BvbnNlQ2FjaGUuamF2YQpAQCAtMTcsOSArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLm5ldC5odHRwOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQub2todHRwLk9rUmVzcG9uc2VDYWNoZTsKLWltcG9ydCBjb20uYW5kcm9pZC5va2h0dHAuUmVzcG9uc2VTb3VyY2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQub2todHRwLmludGVybmFsLkRpc2tMcnVDYWNoZTsKIGltcG9ydCBqYXZhLmlvLkNsb3NlYWJsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKQEAgLTMyLDcgKzI5LDYgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmF4Lm5ldC5zc2wuSHR0cHNVUkxDb25uZWN0aW9uOwotaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuaW1wbC5jbGllbnQuRGVmYXVsdEh0dHBDbGllbnQ7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvSHR0cHNDb25uZWN0aW9uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9IdHRwc0Nvbm5lY3Rpb24uamF2YQppbmRleCA3YTEyZTUzLi42YmYwMWUyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9IdHRwc0Nvbm5lY3Rpb24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9IdHRwc0Nvbm5lY3Rpb24uamF2YQpAQCAtNDAsNyArNDAsNiBAQAogaW1wb3J0IGphdmF4Lm5ldC5zc2wuWDUwOVRydXN0TWFuYWdlcjsKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5JbmV0U29ja2V0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5LZXlNYW5hZ2VtZW50RXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5YNTA5Q2VydGlmaWNhdGU7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9SZXF1ZXN0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9SZXF1ZXN0LmphdmEKaW5kZXggOGMwZDUwMy4uNzZkN2JiOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvUmVxdWVzdC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL1JlcXVlc3QuamF2YQpAQCAtMjYsMTUgKzI2LDEyIEBACiAKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuZW50aXR5LklucHV0U3RyZWFtRW50aXR5OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IZWFkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBDbGllbnRDb25uZWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwRW50aXR5OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwRW50aXR5RW5jbG9zaW5nUmVxdWVzdDsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cEhvc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBSZXF1ZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwUmVzcG9uc2U7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBTdGF0dXM7Ci1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBWZXJzaW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5QYXJzZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuUHJvdG9jb2xWZXJzaW9uOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9SZXF1ZXN0UXVldWUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL1JlcXVlc3RRdWV1ZS5qYXZhCmluZGV4IGNlNmIxYWQuLjdkMmRhMWIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL1JlcXVlc3RRdWV1ZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL1JlcXVlc3RRdWV1ZS5qYXZhCkBAIC0yOSwxMCArMjksNiBAQAogaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvOwogaW1wb3J0IGFuZHJvaWQubmV0LlByb3h5OwogaW1wb3J0IGFuZHJvaWQubmV0LldlYkFkZHJlc3M7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL1g1MDlUcnVzdE1hbmFnZXJFeHRlbnNpb25zLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9YNTA5VHJ1c3RNYW5hZ2VyRXh0ZW5zaW9ucy5qYXZhCmluZGV4IGNmZTVmMjcuLmRiNzEyNzkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL1g1MDlUcnVzdE1hbmFnZXJFeHRlbnNpb25zLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvWDUwOVRydXN0TWFuYWdlckV4dGVuc2lvbnMuamF2YQpAQCAtNjMsNCArNjMsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaG9zdCkgdGhyb3dzIENlcnRpZmljYXRlRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5jaGVja1NlcnZlclRydXN0ZWQoY2hhaW4sIGF1dGhUeXBlLCBob3N0KTsKICAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mgd2hldGhlciBhIENBIGNlcnRpZmljYXRlIGlzIGFkZGVkIGJ5IGFuIHVzZXIuCisgICAgICoKKyAgICAgKiA8cD5TaW5jZSB7QGxpbmsgWDUwOVRydXN0TWFuYWdlciNjaGVja1NlcnZlclRydXN0ZWR9IGFsbG93cyBpdHMgcGFyYW1ldGVyIHtAY29kZSBjaGFpbn0gdG8KKyAgICAgKiBjaGFpbiB1cCB0byB1c2VyLWFkZGVkIENBIGNlcnRpZmljYXRlcywgdGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsCisgICAgICogcG9saWNpZXMgZm9yIHVzZXItYWRkZWQgQ0EgY2VydGlmaWNhdGVzLgorICAgICAqCisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2VydGlmaWNhdGUgd2FzIGFkZGVkIGJ5IHRoZSB1c2VyLCB7QGNvZGUgZmFsc2V9CisgICAgICogb3RoZXJ3aXNlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzVXNlckFkZGVkQ2VydGlmaWNhdGUoWDUwOUNlcnRpZmljYXRlIGNlcnQpIHsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5pc1VzZXJBZGRlZENlcnRpZmljYXRlKGNlcnQpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9uc2QvTnNkTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L25zZC9Oc2RNYW5hZ2VyLmphdmEKaW5kZXggOWMzZTQwNS4uNjg0MDIwNyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L25zZC9Oc2RNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L25zZC9Oc2RNYW5hZ2VyLmphdmEKQEAgLTE5LDggKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2RrQ29uc3RhbnQ7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlNka0NvbnN0YW50LlNka0NvbnN0YW50VHlwZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25mYy9JTmZjQWRhcHRlci5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvbmZjL0lOZmNBZGFwdGVyLmFpZGwKaW5kZXggODQxNDczOC4uMTA5ODhjNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmZjL0lOZmNBZGFwdGVyLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmZjL0lOZmNBZGFwdGVyLmFpZGwKQEAgLTI1LDYgKzI1LDcgQEAKIGltcG9ydCBhbmRyb2lkLm5mYy5JTmZjQWRhcHRlckV4dHJhczsKIGltcG9ydCBhbmRyb2lkLm5mYy5JTmZjVGFnOwogaW1wb3J0IGFuZHJvaWQubmZjLklOZmNDYXJkRW11bGF0aW9uOworaW1wb3J0IGFuZHJvaWQubmZjLklOZmNVbmxvY2tTZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIAogLyoqCkBAIC0zNSw2ICszNiw3IEBACiAgICAgSU5mY1RhZyBnZXROZmNUYWdJbnRlcmZhY2UoKTsKICAgICBJTmZjQ2FyZEVtdWxhdGlvbiBnZXROZmNDYXJkRW11bGF0aW9uSW50ZXJmYWNlKCk7CiAgICAgSU5mY0FkYXB0ZXJFeHRyYXMgZ2V0TmZjQWRhcHRlckV4dHJhc0ludGVyZmFjZShpbiBTdHJpbmcgcGtnKTsKKyAgICBJTmZjVW5sb2NrU2V0dGluZ3MgZ2V0TmZjVW5sb2NrU2V0dGluZ3NJbnRlcmZhY2UoKTsKIAogICAgIGludCBnZXRTdGF0ZSgpOwogICAgIGJvb2xlYW4gZGlzYWJsZShib29sZWFuIHNhdmVTdGF0ZSk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZmMvSU5mY1VubG9ja1NldHRpbmdzLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9uZmMvSU5mY1VubG9ja1NldHRpbmdzLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5ZWVlZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25mYy9JTmZjVW5sb2NrU2V0dGluZ3MuYWlkbApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm5mYzsKKworaW1wb3J0IGFuZHJvaWQubmZjLlRhZzsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBJbnRlcmZhY2UgdG8gTkZDIHVubG9jayBmdW5jdGlvbmFsaXR5LgorICoKKyAqIEBoaWRlCisgKi8KK2ludGVyZmFjZSBJTmZjVW5sb2NrU2V0dGluZ3MgeworCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgdGFnIGFuZCBhdHRlbXB0cyB0byB1bmxvY2sgdGhlIHNjcmVlbi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc2NyZWVuIHdhcyBzdWNjZXNzZnVseSB1bmxvY2tlZC4KKyAgICAgKi8KKyAgICBib29sZWFuIHRyeVVubG9jayhpbnQgdXNlcklkLCBpbiBUYWcgdGFnKTsKKworICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyB0aGUgZ2l2ZW4gdGFnIGFzIGFuIHVubG9jayB0YWcuIFN1YnNlcXVlbnQgY2FsbHMgdG8ge0Bjb2RlIHRyeVVubG9ja30KKyAgICAgKiB3aXRoIHRoZSBzYW1lIHtAY29kZSB0YWd9IHNob3VsZCBzdWNjZWVkLgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0YWcgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLgorICAgICAqLworICAgIGJvb2xlYW4gcmVnaXN0ZXJUYWcoaW50IHVzZXJJZCwgaW4gVGFnIHRhZyk7CisKKyAgICAvKioKKyAgICAgKiBEZXJlZ2lzdGVycyB0aGUgdGFnIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdGltZXN0YW1wLgorICAgICAqIFN1YnNlcXVlbnQgY2FsbHMgdG8ge0Bjb2RlIHRyeVVubG9ja30gd2l0aCB0aGUgc2FtZSB0YWcgc2hvdWxkIGZhaWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRhZyB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuCisgICAgICovCisgICAgYm9vbGVhbiBkZXJlZ2lzdGVyVGFnKGludCB1c2VySWQsIGxvbmcgdGltZXN0YW1wKTsKKworICAgIC8qKgorICAgICAqIFVzZWQgZm9yIHVzZXItdmlzaWJsZSByZW5kZXJpbmcgb2YgcmVnaXN0ZXJlZCB0YWdzLgorICAgICAqCisgICAgICogQHJldHVybiBhIGxpc3Qgb2YgdGhlIHRpbWVzIGluIG1pbGxpcyBzaW5jZSBlcG9jaCB3aGVuIHRoZSByZWdpc3RlcmVkIHRhZ3Mgd2VyZSBwYWlyZWQuCisgICAgICovCisgICAgbG9uZ1tdIGdldFRhZ1JlZ2lzdHJ5VGltZXMoaW50IHVzZXJJZCk7CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHRoZSBzdGF0ZSBvZiB0aGUgTkZDIHVubG9jayBmZWF0dXJlLgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIE5GQyB1bmxvY2sgaXMgZW5hYmxlZC4KKyAgICAgKi8KKyAgICBib29sZWFuIGdldE5mY1VubG9ja0VuYWJsZWQoaW50IHVzZXJJZCk7CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBzdGF0ZSBbT04gfCBPRkZdIG9mIHRoZSBORkMgdW5sb2NrIGZlYXR1cmUuCisgICAgICovCisgICAgdm9pZCBzZXROZmNVbmxvY2tFbmFibGVkKGludCB1c2VySWQsIGJvb2xlYW4gZW5hYmxlZCk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZmMvTmRlZlJlY29yZC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmZjL05kZWZSZWNvcmQuamF2YQppbmRleCAyYjU4ODE4Li5kZTQ4MWNmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZmMvTmRlZlJlY29yZC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25mYy9OZGVmUmVjb3JkLmphdmEKQEAgLTI2OSw2ICsyNjksNyBAQAogICAgICAgICAgICAgInVybjplcGM6cGF0OiIsIC8vIDB4MjAKICAgICAgICAgICAgICJ1cm46ZXBjOnJhdzoiLCAvLyAweDIxCiAgICAgICAgICAgICAidXJuOmVwYzoiLCAvLyAweDIyCisgICAgICAgICAgICAidXJuOm5mYzoiLCAvLyAweDIzCiAgICAgfTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfUEFZTE9BRF9TSVpFID0gMTAgKiAoMSA8PCAyMCk7ICAvLyAxMCBNQiBwYXlsb2FkIGxpbWl0CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZmMvTmZjQWRhcHRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmZjL05mY0FkYXB0ZXIuamF2YQppbmRleCA2NzQzYzZjLi5lOGI3NDM3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZmMvTmZjQWRhcHRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25mYy9OZmNBZGFwdGVyLmphdmEKQEAgLTI5Miw2ICsyOTIsNyBAQAogICAgIHN0YXRpYyBJTmZjQWRhcHRlciBzU2VydmljZTsKICAgICBzdGF0aWMgSU5mY1RhZyBzVGFnU2VydmljZTsKICAgICBzdGF0aWMgSU5mY0NhcmRFbXVsYXRpb24gc0NhcmRFbXVsYXRpb25TZXJ2aWNlOworICAgIHN0YXRpYyBJTmZjVW5sb2NrU2V0dGluZ3Mgc05mY1VubG9ja1NldHRpbmdzU2VydmljZTsKIAogICAgIC8qKgogICAgICAqIFRoZSBOZmNBZGFwdGVyIG9iamVjdCBmb3IgZWFjaCBhcHBsaWNhdGlvbiBjb250ZXh0LgpAQCAtNDMyLDYgKzQzMywxMyBAQAogICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgc05mY1VubG9ja1NldHRpbmdzU2VydmljZSA9IHNTZXJ2aWNlLmdldE5mY1VubG9ja1NldHRpbmdzSW50ZXJmYWNlKCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgImNvdWxkIG5vdCByZXRyaWV2ZSBORkMgdW5sb2NrIHNldHRpbmdzIHNlcnZpY2UiKTsKKyAgICAgICAgICAgICAgICBzTmZjVW5sb2NrU2V0dGluZ3NTZXJ2aWNlID0gbnVsbDsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc0lzSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHsKQEAgLTU0OSw2ICs1NTcsMjIgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBiaW5kZXIgaW50ZXJmYWNlIHRvIHRoZSBORkMgdW5sb2NrIHNlcnZpY2UuCisgICAgICoKKyAgICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGlmIHRoZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgSU5mY1VubG9ja1NldHRpbmdzIGdldE5mY1VubG9ja1NldHRpbmdzU2VydmljZSgpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgICBpc0VuYWJsZWQoKTsKKworICAgICAgICBpZiAoc05mY1VubG9ja1NldHRpbmdzU2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIk5mY1VubG9ja1NldHRpbmdzU2VydmljZSBub3QgYXZhaWxhYmxlIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc05mY1VubG9ja1NldHRpbmdzU2VydmljZTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBORkMgc2VydmljZSBkZWFkIC0gYXR0ZW1wdCBiZXN0IGVmZm9ydCByZWNvdmVyeQogICAgICAqIEBoaWRlCiAgICAgICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZmMvTmZjVW5sb2NrLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZmMvTmZjVW5sb2NrLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJkY2Q5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25mYy9OZmNVbmxvY2suamF2YQpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5uZmM7CisKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbDsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworLyoqCisgKiBQcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gcmVhZCBhbmQgdXBkYXRlIE5GQyB1bmxvY2sgc2V0dGluZ3MuCisgKiA8cC8+CisgKiBBbGxvd3Mgc3lzdGVtIHNlcnZpY2VzIChjdXJyZW50bHkgZXhjbHVzaXZlbHkgTG9ja1NldHRpbmdzU2VydmljZSkgdG8KKyAqIHJlZ2lzdGVyIE5GQyB0YWdzIHRvIGJlIHVzZWQgdG8gdW5sb2NrIHRoZSBkZXZpY2UsIGFzIHdlbGwgYXMgdGhlIGFiaWxpdHkKKyAqIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBzZXJ2aWNlIGVudGlyZWx5LgorICoKKyAqLworcHVibGljIGNsYXNzIE5mY1VubG9jayB7CisKKyAgICAvKioKKyAgICAgKiBBY3Rpb24gdG8gdW5sb2NrIHRoZSBkZXZpY2UuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9ORkNfVU5MT0NLID0gImFuZHJvaWQubmZjLkFDVElPTl9ORkNfVU5MT0NLIjsKKyAgICAvKioKKyAgICAgKiBQZXJtaXNzaW9uIHRvIHVubG9jayB0aGUgZGV2aWNlLgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBORkNfVU5MT0NLX1BFUk1JU1NJT04gPSAiYW5kcm9pZC5wZXJtaXNzaW9uLk5GQ19VTkxPQ0siOworCisgICAgLyoqCisgICAgICogUHJvcGVydHkgdG8gZW5hYmxlIE5GQyBVbmxvY2sKKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVFkgPSAicm8uY29tLmFuZHJvaWQubmZjLnVubG9jayI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk5mY1VubG9jayI7CisgICAgcHJpdmF0ZSBzdGF0aWMgSGFzaE1hcDxDb250ZXh0LCBOZmNVbmxvY2s+IHNOZmNVbmxvY2tzID0gbmV3IEhhc2hNYXA8Q29udGV4dCwgTmZjVW5sb2NrPigpOworCisgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtRW5hYmxlZDsKKyAgICBwcml2YXRlIElOZmNVbmxvY2tTZXR0aW5ncyBzU2VydmljZTsKKworICAgIHByaXZhdGUgTmZjVW5sb2NrKENvbnRleHQgY29udGV4dCwgSU5mY1VubG9ja1NldHRpbmdzIHNlcnZpY2UpIHsKKyAgICAgICAgdGhpcy5tQ29udGV4dCA9IGNoZWNrTm90TnVsbChjb250ZXh0KTsKKyAgICAgICAgdGhpcy5zU2VydmljZSA9IGNoZWNrTm90TnVsbChzZXJ2aWNlKTsKKyAgICAgICAgdGhpcy5tRW5hYmxlZCA9IGdldFByb3BlcnR5RW5hYmxlZCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIE5mY1VubG9ja30uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgTmZjVW5sb2NrIGdldEluc3RhbmNlKE5mY0FkYXB0ZXIgbmZjQWRhcHRlcikgeworICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZmNBZGFwdGVyLmdldENvbnRleHQoKTsKKyAgICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiTmZjQWRhcHRlciBjb250ZXh0IGlzIG51bGwiKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgTmZjVW5sb2NrIG1hbmFnZXIgPSBzTmZjVW5sb2Nrcy5nZXQoY29udGV4dCk7CisgICAgICAgIGlmIChtYW5hZ2VyID09IG51bGwpIHsKKyAgICAgICAgICAgIElOZmNVbmxvY2tTZXR0aW5ncyBzZXJ2aWNlID0gbmZjQWRhcHRlci5nZXROZmNVbmxvY2tTZXR0aW5nc1NlcnZpY2UoKTsKKyAgICAgICAgICAgIG1hbmFnZXIgPSBuZXcgTmZjVW5sb2NrKGNvbnRleHQsIHNlcnZpY2UpOworICAgICAgICAgICAgc05mY1VubG9ja3MucHV0KGNvbnRleHQsIG1hbmFnZXIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1hbmFnZXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBnaXZlbiB7QGNvZGUgdGFnfSBhcyBhbiB1bmxvY2sgdGFnLgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0YWcgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gcmVnaXN0ZXJUYWcoVGFnIHRhZykgeworICAgICAgICBlbmZvcmNlUHJvcGVydHlFbmFibGVkKCk7CisKKyAgICAgICAgaW50IGN1cnJlbnRVc2VyID0gQWN0aXZpdHlNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBzU2VydmljZS5yZWdpc3RlclRhZyhjdXJyZW50VXNlciwgdGFnKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJlY292ZXJTZXJ2aWNlKCk7CisgICAgICAgICAgICBpZiAoc1NlcnZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byByZWNvdmVyIE5mY1VubG9ja1NldHRpbmdzU2VydmljZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc1NlcnZpY2UucmVnaXN0ZXJUYWcoY3VycmVudFVzZXIsIHRhZyk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZWUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gcmVhY2ggTmZjVW5sb2NrU2V0dGluZ3NTZXJ2aWNlIiwgZWUpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIERlcmVnaXN0ZXJzIHRoZSBnaXZlbiB7QGNvZGUgdGFnfSBhcyBhbiB1bmxvY2sgdGFnLgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0YWcgd2FzIHN1Y2Nlc3NmdWxseSBkZXJlZ2lzdGVyZWQuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBkZXJlZ2lzdGVyVGFnKGxvbmcgdGltZXN0YW1wKSB7CisgICAgICAgIGVuZm9yY2VQcm9wZXJ0eUVuYWJsZWQoKTsKKyAgICAgICAgaW50IGN1cnJlbnRVc2VyID0gQWN0aXZpdHlNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBzU2VydmljZS5kZXJlZ2lzdGVyVGFnKGN1cnJlbnRVc2VyLCB0aW1lc3RhbXApOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmVjb3ZlclNlcnZpY2UoKTsKKyAgICAgICAgICAgIGlmIChzU2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHJlY292ZXIgTmZjVW5sb2NrU2V0dGluZ3NTZXJ2aWNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBzU2VydmljZS5kZXJlZ2lzdGVyVGFnKGN1cnJlbnRVc2VyLCB0aW1lc3RhbXApOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGVlKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHJlYWNoIE5mY1VubG9ja1NldHRpbmdzU2VydmljZSIsIGVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHRoZSBlbmFibGUgc3RhdGUgb2YgdGhlIE5GQyB1bmxvY2sgZmVhdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBORkMgdW5sb2NrIGlzIGVuYWJsZWQuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZ2V0TmZjVW5sb2NrRW5hYmxlZCgpIHsKKyAgICAgICAgZW5mb3JjZVByb3BlcnR5RW5hYmxlZCgpOworICAgICAgICBpbnQgY3VycmVudFVzZXIgPSBBY3Rpdml0eU1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIHNTZXJ2aWNlLmdldE5mY1VubG9ja0VuYWJsZWQoY3VycmVudFVzZXIpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmVjb3ZlclNlcnZpY2UoKTsKKyAgICAgICAgICAgIGlmIChzU2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHJlY292ZXIgTmZjVW5sb2NrU2V0dGluZ3NTZXJ2aWNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBzU2VydmljZS5nZXROZmNVbmxvY2tFbmFibGVkKGN1cnJlbnRVc2VyKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlZSkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byByZWFjaCBOZmNVbmxvY2tTZXR0aW5nc1NlcnZpY2UiLCBlZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBlbmFibGUgc3RhdGUgb2YgdGhlIE5GQyB1bmxvY2sgZmVhdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc2V0dGluZyB3YXMgc3VjY2Vzc2Z1bGx5IHBlcnNpc3RlZC4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHNldE5mY1VubG9ja0VuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIGVuZm9yY2VQcm9wZXJ0eUVuYWJsZWQoKTsKKyAgICAgICAgaW50IGN1cnJlbnRVc2VyID0gQWN0aXZpdHlNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNTZXJ2aWNlLnNldE5mY1VubG9ja0VuYWJsZWQoY3VycmVudFVzZXIsIGVuYWJsZWQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gIGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmVjb3ZlclNlcnZpY2UoKTsKKyAgICAgICAgICAgIGlmIChzU2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHJlY292ZXIgTmZjVW5sb2NrU2V0dGluZ3NTZXJ2aWNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHNTZXJ2aWNlLnNldE5mY1VubG9ja0VuYWJsZWQoY3VycmVudFVzZXIsIGVuYWJsZWQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGVlKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHJlYWNoIE5mY1VubG9ja1NldHRpbmdzU2VydmljZSIsIGVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBsaXN0IG9mIHRpbWVzIChpbiBtaWxsaXMgc2luY2UgZXBvY2gpIGNvcnJlc3BvbmRpbmcgdG8gd2hlbgorICAgICAqIHVubG9jayB0YWdzIHdlcmUgcmVnaXN0ZXJlZC4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgQE51bGxhYmxlCisgICAgcHVibGljIGxvbmdbXSBnZXRUYWdSZWdpc3RyeVRpbWVzKCkgeworICAgICAgICBlbmZvcmNlUHJvcGVydHlFbmFibGVkKCk7CisgICAgICAgIGludCBjdXJyZW50VXNlciA9IEFjdGl2aXR5TWFuYWdlci5nZXRDdXJyZW50VXNlcigpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gc1NlcnZpY2UuZ2V0VGFnUmVnaXN0cnlUaW1lcyhjdXJyZW50VXNlcik7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZWNvdmVyU2VydmljZSgpOworICAgICAgICAgICAgaWYgKHNTZXJ2aWNlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gcmVjb3ZlciBOZmNVbmxvY2tTZXR0aW5nc1NlcnZpY2UiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc1NlcnZpY2UuZ2V0VGFnUmVnaXN0cnlUaW1lcyhjdXJyZW50VXNlcik7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZWUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gcmVhY2ggTmZjVW5sb2NrU2V0dGluZ3NTZXJ2aWNlIiwgZWUpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0UHJvcGVydHlFbmFibGVkKCkgeworICAgICAgICByZXR1cm4gU3lzdGVtUHJvcGVydGllcy5nZXQoUFJPUEVSVFkpLmVxdWFscygiT04iKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVjb3ZlclNlcnZpY2UoKSB7CisgICAgICAgIE5mY0FkYXB0ZXIgYWRhcHRlciA9IE5mY0FkYXB0ZXIuZ2V0RGVmYXVsdEFkYXB0ZXIobUNvbnRleHQpOworICAgICAgICBzU2VydmljZSA9IGFkYXB0ZXIuZ2V0TmZjVW5sb2NrU2V0dGluZ3NTZXJ2aWNlKCk7CisgICAgfQorCisKKyAgICBwcml2YXRlIHZvaWQgZW5mb3JjZVByb3BlcnR5RW5hYmxlZCgpIHsKKyAgICAgICAgaWYgKCFtRW5hYmxlZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJORkMgVW5sb2NrIHByb3BlcnR5IGlzIG5vdCBlbmFibGVkIik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZmMvVGFnLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZmMvVGFnLmphdmEKaW5kZXggZjJjZDIzMi4uMGQyNjFkMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmZjL1RhZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25mYy9UYWcuamF2YQpAQCAtMjA0LDYgKzIwNCwxNCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIEZvciB1c2UgYnkgTmZjU2VydmljZSBvbmx5LgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIGludFtdIGdldFRlY2hDb2RlTGlzdCgpIHsKKyAgICAgICAgcmV0dXJuIG1UZWNoTGlzdDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXQgdGhlIFRhZyBJZGVudGlmaWVyIChpZiBpdCBoYXMgb25lKS4KICAgICAgKiA8cD5UaGUgdGFnIGlkZW50aWZpZXIgaXMgYSBsb3cgbGV2ZWwgc2VyaWFsIG51bWJlciwgdXNlZCBmb3IgYW50aS1jb2xsaXNpb24KICAgICAgKiBhbmQgaWRlbnRpZmljYXRpb24uCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZmMvdGVjaC9OZGVmLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZmMvdGVjaC9OZGVmLmphdmEKaW5kZXggNjRhYTI5OTYuLjgyNDBlYTYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25mYy90ZWNoL05kZWYuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZmMvdGVjaC9OZGVmLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLm5mYy5Gb3JtYXRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5uZmMuSU5mY1RhZzsKIGltcG9ydCBhbmRyb2lkLm5mYy5OZGVmTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm5mYy5OZmNBZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQubmZjLlRhZzsKIGltcG9ydCBhbmRyb2lkLm5mYy5UYWdMb3N0RXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmZjL3RlY2gvTmRlZkZvcm1hdGFibGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25mYy90ZWNoL05kZWZGb3JtYXRhYmxlLmphdmEKaW5kZXggZmZhNmEyYi4uNDE3NWNkMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmZjL3RlY2gvTmRlZkZvcm1hdGFibGUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZmMvdGVjaC9OZGVmRm9ybWF0YWJsZS5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5uZmMuRm9ybWF0RXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQubmZjLklOZmNUYWc7CiBpbXBvcnQgYW5kcm9pZC5uZmMuTmRlZk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5uZmMuTmZjQWRhcHRlcjsKIGltcG9ydCBhbmRyb2lkLm5mYy5UYWc7CiBpbXBvcnQgYW5kcm9pZC5uZmMuVGFnTG9zdEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlQcm9wZXJ0aWVzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9CYXR0ZXJ5UHJvcGVydGllcy5qYXZhCmluZGV4IDVkZjUyMTQuLjJkNjcyNjQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlQcm9wZXJ0aWVzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQmF0dGVyeVByb3BlcnRpZXMuamF2YQpAQCAtMzAsOCArMzAsNiBAQAogICAgIHB1YmxpYyBib29sZWFuIGJhdHRlcnlQcmVzZW50OwogICAgIHB1YmxpYyBpbnQgYmF0dGVyeUxldmVsOwogICAgIHB1YmxpYyBpbnQgYmF0dGVyeVZvbHRhZ2U7Ci0gICAgcHVibGljIGludCBiYXR0ZXJ5Q3VycmVudE5vdzsKLSAgICBwdWJsaWMgaW50IGJhdHRlcnlDaGFyZ2VDb3VudGVyOwogICAgIHB1YmxpYyBpbnQgYmF0dGVyeVRlbXBlcmF0dXJlOwogICAgIHB1YmxpYyBTdHJpbmcgYmF0dGVyeVRlY2hub2xvZ3k7CiAKQEAgLTQ5LDggKzQ3LDYgQEAKICAgICAgICAgYmF0dGVyeVByZXNlbnQgPSBwLnJlYWRJbnQoKSA9PSAxID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICBiYXR0ZXJ5TGV2ZWwgPSBwLnJlYWRJbnQoKTsKICAgICAgICAgYmF0dGVyeVZvbHRhZ2UgPSBwLnJlYWRJbnQoKTsKLSAgICAgICAgYmF0dGVyeUN1cnJlbnROb3cgPSBwLnJlYWRJbnQoKTsKLSAgICAgICAgYmF0dGVyeUNoYXJnZUNvdW50ZXIgPSBwLnJlYWRJbnQoKTsKICAgICAgICAgYmF0dGVyeVRlbXBlcmF0dXJlID0gcC5yZWFkSW50KCk7CiAgICAgICAgIGJhdHRlcnlUZWNobm9sb2d5ID0gcC5yZWFkU3RyaW5nKCk7CiAgICAgfQpAQCAtNjQsOCArNjAsNiBAQAogICAgICAgICBwLndyaXRlSW50KGJhdHRlcnlQcmVzZW50ID8gMSA6IDApOwogICAgICAgICBwLndyaXRlSW50KGJhdHRlcnlMZXZlbCk7CiAgICAgICAgIHAud3JpdGVJbnQoYmF0dGVyeVZvbHRhZ2UpOwotICAgICAgICBwLndyaXRlSW50KGJhdHRlcnlDdXJyZW50Tm93KTsKLSAgICAgICAgcC53cml0ZUludChiYXR0ZXJ5Q2hhcmdlQ291bnRlcik7CiAgICAgICAgIHAud3JpdGVJbnQoYmF0dGVyeVRlbXBlcmF0dXJlKTsKICAgICAgICAgcC53cml0ZVN0cmluZyhiYXR0ZXJ5VGVjaG5vbG9neSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvQmF0dGVyeVByb3BlcnR5LmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9CYXR0ZXJ5UHJvcGVydHkuYWlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2YyZWMzZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlQcm9wZXJ0eS5haWRsCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisqKiBDb3B5cmlnaHQgMjAxMywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBhbmRyb2lkLm9zOworCitwYXJjZWxhYmxlIEJhdHRlcnlQcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlQcm9wZXJ0eS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQmF0dGVyeVByb3BlcnR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2ZjVkZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlQcm9wZXJ0eS5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKKy8qIENvcHlyaWdodCAyMDEzLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCitwYWNrYWdlIGFuZHJvaWQub3M7CisKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CisKKy8qKgorICoge0BoaWRlfQorICovCitwdWJsaWMgY2xhc3MgQmF0dGVyeVByb3BlcnR5IGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CisgICAgLyoKKyAgICAgKiBCYXR0ZXJ5IHByb3BlcnR5IGlkZW50aWZpZXJzLiAgVGhlc2UgbXVzdCBtYXRjaCB0aGUgdmFsdWVzIGluCisgICAgICogZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9iYXR0ZXJ5c2VydmljZS9CYXR0ZXJ5U2VydmljZS5oCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkFUVEVSWV9QUk9QX0NIQVJHRV9DT1VOVEVSID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCQVRURVJZX1BST1BfQ1VSUkVOVF9OT1cgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBVFRFUllfUFJPUF9DVVJSRU5UX0FWRyA9IDM7CisKKyAgICBwdWJsaWMgaW50IHZhbHVlSW50OworCisgICAgcHVibGljIEJhdHRlcnlQcm9wZXJ0eSgpIHsKKyAgICAgICAgdmFsdWVJbnQgPSBJbnRlZ2VyLk1JTl9WQUxVRTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFBhcmNlbCByZWFkL3dyaXRlIGNvZGUgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aAorICAgICAqIGZyYW1ld29ya3MvbmF0aXZlL3NlcnZpY2VzL2JhdHRlcnlzZXJ2aWNlL0JhdHRlcnlQcm9wZXJ0eS5jcHAKKyAgICAgKi8KKworICAgIHByaXZhdGUgQmF0dGVyeVByb3BlcnR5KFBhcmNlbCBwKSB7CisgICAgICAgIHJlYWRGcm9tUGFyY2VsKHApOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlYWRGcm9tUGFyY2VsKFBhcmNlbCBwKSB7CisgICAgICAgIHZhbHVlSW50ID0gcC5yZWFkSW50KCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgcCwgaW50IGZsYWdzKSB7CisgICAgICAgIHAud3JpdGVJbnQodmFsdWVJbnQpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPEJhdHRlcnlQcm9wZXJ0eT4gQ1JFQVRPUgorICAgICAgICA9IG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8QmF0dGVyeVByb3BlcnR5PigpIHsKKyAgICAgICAgcHVibGljIEJhdHRlcnlQcm9wZXJ0eSBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBwKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEJhdHRlcnlQcm9wZXJ0eShwKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCYXR0ZXJ5UHJvcGVydHlbXSBuZXdBcnJheShpbnQgc2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBCYXR0ZXJ5UHJvcGVydHlbc2l6ZV07CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9CYXR0ZXJ5U3RhdHMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlTdGF0cy5qYXZhCmluZGV4IGIxYTllYTMwLi45MzVlYzlhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9CYXR0ZXJ5U3RhdHMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9CYXR0ZXJ5U3RhdHMuamF2YQpAQCAtMjQsMTMgKzI0LDE0IEBACiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIAoraW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuU2lnbmFsU3RyZW5ndGg7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUHJpbnRlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlRpbWVVdGlsczsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5CYXR0ZXJ5U2lwcGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLkJhdHRlcnlTdGF0c0hlbHBlcjsKIAogLyoqCiAgKiBBIGNsYXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gYmF0dGVyeSB1c2FnZSBzdGF0aXN0aWNzLCBpbmNsdWRpbmcgaW5mb3JtYXRpb24gb24KQEAgLTE2MCw2ICsxNjEsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVRURVJZX0xFVkVMX0RBVEEgPSAibHYiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXSUZJX0RBVEEgPSAid2ZsIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlTQ19EQVRBID0gIm0iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHTE9CQUxfTkVUV09SS19EQVRBID0gImduIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSElTVE9SWV9EQVRBID0gImgiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ1JFRU5fQlJJR0hUTkVTU19EQVRBID0gImJyIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0lHTkFMX1NUUkVOR1RIX1RJTUVfREFUQSA9ICJzZ3QiOwpAQCAtMTY3LDYgKzE2OSw4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNJR05BTF9TVFJFTkdUSF9DT1VOVF9EQVRBID0gInNnYyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFfQ09OTkVDVElPTl9USU1FX0RBVEEgPSAiZGN0IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9DT05ORUNUSU9OX0NPVU5UX0RBVEEgPSAiZGNjIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9XRVJfVVNFX1NVTU1BUllfREFUQSA9ICJwd3MiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1dFUl9VU0VfSVRFTV9EQVRBID0gInB3aSI7CiAKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZ0J1aWxkZXIgbUZvcm1hdEJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigzMik7CiAgICAgcHJpdmF0ZSBmaW5hbCBGb3JtYXR0ZXIgbUZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIobUZvcm1hdEJ1aWxkZXIpOwpAQCAtMzE0LDcgKzMxOCw4IEBACiAgICAgICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0VXNlckFjdGl2aXR5Q291bnQoaW50IHR5cGUsIGludCB3aGljaCk7CiAKICAgICAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFzTmV0d29ya0FjdGl2aXR5KCk7Ci0gICAgICAgIHB1YmxpYyBhYnN0cmFjdCBsb25nIGdldE5ldHdvcmtBY3Rpdml0eUNvdW50KGludCB0eXBlLCBpbnQgd2hpY2gpOworICAgICAgICBwdWJsaWMgYWJzdHJhY3QgbG9uZyBnZXROZXR3b3JrQWN0aXZpdHlCeXRlcyhpbnQgdHlwZSwgaW50IHdoaWNoKTsKKyAgICAgICAgcHVibGljIGFic3RyYWN0IGxvbmcgZ2V0TmV0d29ya0FjdGl2aXR5UGFja2V0cyhpbnQgdHlwZSwgaW50IHdoaWNoKTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIFNlbnNvciB7CiAgICAgICAgICAgICAvKgpAQCAtNDQ3LDE0ICs0NTIsMzEgQEAKICAgICAgICAgcHVibGljIEhpc3RvcnlJdGVtIG5leHQ7CiAgICAgICAgIAogICAgICAgICBwdWJsaWMgbG9uZyB0aW1lOwotICAgICAgICAKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIENNRF9OVUxMID0gMDsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIENNRF9VUERBVEUgPSAxOwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgQ01EX1NUQVJUID0gMjsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIENNRF9PVkVSRkxPVyA9IDM7Ci0gICAgICAgIAorCisgICAgICAgIC8vIFRoZSBjb21tYW5kIGNvZGVzIDAtMyBjYW4gYmUgd3JpdHRlbiB3aXRoIGRlbHRhIHVwZGF0ZXM7IGFsbCBvdGhlcnMgcmVxdWlyZQorICAgICAgICAvLyB0aGF0IGEgZnVsbCBlbnRyeSBiZSB3cml0dGVuLgorICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgQ01EX1VQREFURSA9IDA7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBDTURfRVZFTlQgPSAxOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGUgQ01EX05VTEwgPSAtMTsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBieXRlIENNRF9TVEFSVCA9IDQ7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYnl0ZSBDTURfT1ZFUkZMT1cgPSA1OworCiAgICAgICAgIHB1YmxpYyBieXRlIGNtZCA9IENNRF9OVUxMOwogICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybiB3aGV0aGVyIHRoZSBjb21tYW5kIGNvZGUgaXMgYSBkZWx0YSBkYXRhIHVwZGF0ZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlbHRhRGF0YShieXRlIGNtZCkgeworICAgICAgICAgICAgcmV0dXJuIGNtZCA+PSAwICYmIGNtZCA8PSAzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybiB3aGV0aGVyIHRoZSBjb21tYW5kIGNvZGUgaXMgYSBkZWx0YSBkYXRhIHVwZGF0ZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzRGVsdGFEYXRhKCkgeworICAgICAgICAgICAgcmV0dXJuIGNtZCA+PSAwICYmIGNtZCA8PSAzOworICAgICAgICB9CisKICAgICAgICAgcHVibGljIGJ5dGUgYmF0dGVyeUxldmVsOwogICAgICAgICBwdWJsaWMgYnl0ZSBiYXR0ZXJ5U3RhdHVzOwogICAgICAgICBwdWJsaWMgYnl0ZSBiYXR0ZXJ5SGVhbHRoOwpAQCAtNDY0LDE4ICs0ODYsMTggQEAKICAgICAgICAgcHVibGljIGNoYXIgYmF0dGVyeVZvbHRhZ2U7CiAgICAgICAgIAogICAgICAgICAvLyBDb25zdGFudHMgZnJvbSBTQ1JFRU5fQlJJR0hUTkVTU18qCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0JSSUdIVE5FU1NfTUFTSyA9IDB4MDAwMDAwMGY7CiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0JSSUdIVE5FU1NfU0hJRlQgPSAwOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9CUklHSFRORVNTX01BU0sgPSAweDc7CiAgICAgICAgIC8vIENvbnN0YW50cyBmcm9tIFNJR05BTF9TVFJFTkdUSF8qCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1NJR05BTF9TVFJFTkdUSF9NQVNLID0gMHgwMDAwMDBmMDsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfU0lHTkFMX1NUUkVOR1RIX1NISUZUID0gNDsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfU0lHTkFMX1NUUkVOR1RIX1NISUZUID0gMzsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfU0lHTkFMX1NUUkVOR1RIX01BU0sgPSAweDcgPDwgU1RBVEVfU0lHTkFMX1NUUkVOR1RIX1NISUZUOwogICAgICAgICAvLyBDb25zdGFudHMgZnJvbSBTZXJ2aWNlU3RhdGUuU1RBVEVfKgotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9QSE9ORV9TVEFURV9NQVNLID0gMHgwMDAwMGYwMDsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfUEhPTkVfU1RBVEVfU0hJRlQgPSA4OworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9QSE9ORV9TVEFURV9TSElGVCA9IDY7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1BIT05FX1NUQVRFX01BU0sgPSAweDcgPDwgU1RBVEVfUEhPTkVfU1RBVEVfU0hJRlQ7CiAgICAgICAgIC8vIENvbnN0YW50cyBmcm9tIERBVEFfQ09OTkVDVElPTl8qCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0RBVEFfQ09OTkVDVElPTl9NQVNLID0gMHgwMDAwZjAwMDsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfREFUQV9DT05ORUNUSU9OX1NISUZUID0gMTI7Ci0gICAgICAgIAorICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9EQVRBX0NPTk5FQ1RJT05fU0hJRlQgPSA5OworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9EQVRBX0NPTk5FQ1RJT05fTUFTSyA9IDB4MWY7CisKICAgICAgICAgLy8gVGhlc2Ugc3RhdGVzIGFsd2F5cyBhcHBlYXIgZGlyZWN0bHkgaW4gdGhlIGZpcnN0IGludCB0b2tlbgogICAgICAgICAvLyBvZiBhIGRlbHRhIGNoYW5nZTsgdGhleSBzaG91bGQgYmUgb25lcyB0aGF0IGNoYW5nZSByZWxhdGl2ZWx5CiAgICAgICAgIC8vIGZyZXF1ZW50bHkuCkBAIC01MDMsNiArNTI1LDE0IEBACiAKICAgICAgICAgcHVibGljIGludCBzdGF0ZXM7CiAKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfTk9ORSA9IDA7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0FQUF9GT1JFR1JPVU5EID0gMTsKKworICAgICAgICAvLyBGb3IgQ01EX0VWRU5ULgorICAgICAgICBwdWJsaWMgaW50IGV2ZW50Q29kZTsKKyAgICAgICAgcHVibGljIGludCBldmVudFVpZDsKKyAgICAgICAgcHVibGljIFN0cmluZyBldmVudE5hbWU7CisKICAgICAgICAgcHVibGljIEhpc3RvcnlJdGVtKCkgewogICAgICAgICB9CiAgICAgICAgIApAQCAtNTI3LDkgKzU1NywxNCBAQAogICAgICAgICAgICAgICAgICAgICB8ICgoKChpbnQpYmF0dGVyeVZvbHRhZ2UpPDwxNikmMHhmZmZmMDAwMCk7CiAgICAgICAgICAgICBkZXN0LndyaXRlSW50KGJhdCk7CiAgICAgICAgICAgICBkZXN0LndyaXRlSW50KHN0YXRlcyk7CisgICAgICAgICAgICBpZiAoY21kID09IENNRF9FVkVOVCkgeworICAgICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQoZXZlbnRDb2RlKTsKKyAgICAgICAgICAgICAgICBkZXN0LndyaXRlSW50KGV2ZW50VWlkKTsKKyAgICAgICAgICAgICAgICBkZXN0LndyaXRlU3RyaW5nKGV2ZW50TmFtZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIHZvaWQgcmVhZEZyb21QYXJjZWwoUGFyY2VsIHNyYykgeworICAgICAgICBwdWJsaWMgdm9pZCByZWFkRnJvbVBhcmNlbChQYXJjZWwgc3JjKSB7CiAgICAgICAgICAgICBpbnQgYmF0ID0gc3JjLnJlYWRJbnQoKTsKICAgICAgICAgICAgIGNtZCA9IChieXRlKShiYXQmMHhmZik7CiAgICAgICAgICAgICBiYXR0ZXJ5TGV2ZWwgPSAoYnl0ZSkoKGJhdD4+OCkmMHhmZik7CkBAIC01NDAsMTQ4ICs1NzUsMTIgQEAKICAgICAgICAgICAgIGJhdHRlcnlUZW1wZXJhdHVyZSA9IChzaG9ydCkoYmF0JjB4ZmZmZik7CiAgICAgICAgICAgICBiYXR0ZXJ5Vm9sdGFnZSA9IChjaGFyKSgoYmF0Pj4xNikmMHhmZmZmKTsKICAgICAgICAgICAgIHN0YXRlcyA9IHNyYy5yZWFkSW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQYXJ0IG9mIGluaXRpYWwgZGVsdGEgaW50IHRoYXQgc3BlY2lmaWVzIHRoZSB0aW1lIGRlbHRhLgotICAgICAgICBzdGF0aWMgZmluYWwgaW50IERFTFRBX1RJTUVfTUFTSyA9IDB4M2ZmZmY7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgREVMVEFfVElNRV9BQlMgPSAweDNmZmZkOyAgICAvLyBGb2xsb3dpbmcgaXMgYW4gZW50aXJlIGFicyB1cGRhdGUuCi0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgREVMVEFfVElNRV9JTlQgPSAweDNmZmZlOyAgICAvLyBUaGUgZGVsdGEgaXMgYSBmb2xsb3dpbmcgaW50Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgREVMVEFfVElNRV9MT05HID0gMHgzZmZmZjsgICAvLyBUaGUgZGVsdGEgaXMgYSBmb2xsb3dpbmcgbG9uZwotICAgICAgICAvLyBQYXJ0IG9mIGluaXRpYWwgZGVsdGEgaW50IGhvbGRpbmcgdGhlIGNvbW1hbmQgY29kZS4KLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBERUxUQV9DTURfTUFTSyA9IDB4MzsKLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBERUxUQV9DTURfU0hJRlQgPSAxODsKLSAgICAgICAgLy8gRmxhZyBpbiBkZWx0YSBpbnQ6IGEgbmV3IGJhdHRlcnkgbGV2ZWwgaW50IGZvbGxvd3MuCi0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgREVMVEFfQkFUVEVSWV9MRVZFTF9GTEFHID0gMTw8MjA7Ci0gICAgICAgIC8vIEZsYWcgaW4gZGVsdGEgaW50OiBhIG5ldyBmdWxsIHN0YXRlIGFuZCBiYXR0ZXJ5IHN0YXR1cyBpbnQgZm9sbG93cy4KLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBERUxUQV9TVEFURV9GTEFHID0gMTw8MjE7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgREVMVEFfU1RBVEVfTUFTSyA9IDB4ZmZjMDAwMDA7Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZURlbHRhKFBhcmNlbCBkZXN0LCBIaXN0b3J5SXRlbSBsYXN0KSB7Ci0gICAgICAgICAgICBpZiAobGFzdCA9PSBudWxsIHx8IGxhc3QuY21kICE9IENNRF9VUERBVEUpIHsKLSAgICAgICAgICAgICAgICBkZXN0LndyaXRlSW50KERFTFRBX1RJTUVfQUJTKTsKLSAgICAgICAgICAgICAgICB3cml0ZVRvUGFyY2VsKGRlc3QsIDApOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmluYWwgbG9uZyBkZWx0YVRpbWUgPSB0aW1lIC0gbGFzdC50aW1lOwotICAgICAgICAgICAgZmluYWwgaW50IGxhc3RCYXR0ZXJ5TGV2ZWxJbnQgPSBsYXN0LmJ1aWxkQmF0dGVyeUxldmVsSW50KCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbGFzdFN0YXRlSW50ID0gbGFzdC5idWlsZFN0YXRlSW50KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBkZWx0YVRpbWVUb2tlbjsKLSAgICAgICAgICAgIGlmIChkZWx0YVRpbWUgPCAwIHx8IGRlbHRhVGltZSA+IEludGVnZXIuTUFYX1ZBTFVFKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFUaW1lVG9rZW4gPSBERUxUQV9USU1FX0xPTkc7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRlbHRhVGltZSA+PSBERUxUQV9USU1FX0FCUykgewotICAgICAgICAgICAgICAgIGRlbHRhVGltZVRva2VuID0gREVMVEFfVElNRV9JTlQ7CisgICAgICAgICAgICBpZiAoY21kID09IENNRF9FVkVOVCkgeworICAgICAgICAgICAgICAgIGV2ZW50Q29kZSA9IHNyYy5yZWFkSW50KCk7CisgICAgICAgICAgICAgICAgZXZlbnRVaWQgPSBzcmMucmVhZEludCgpOworICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9IHNyYy5yZWFkU3RyaW5nKCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlbHRhVGltZVRva2VuID0gKGludClkZWx0YVRpbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgZmlyc3RUb2tlbiA9IGRlbHRhVGltZVRva2VuCi0gICAgICAgICAgICAgICAgICAgIHwgKGNtZDw8REVMVEFfQ01EX1NISUZUKQotICAgICAgICAgICAgICAgICAgICB8IChzdGF0ZXMmREVMVEFfU1RBVEVfTUFTSyk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgYmF0dGVyeUxldmVsSW50ID0gYnVpbGRCYXR0ZXJ5TGV2ZWxJbnQoKTsKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gYmF0dGVyeUxldmVsSW50Q2hhbmdlZCA9IGJhdHRlcnlMZXZlbEludCAhPSBsYXN0QmF0dGVyeUxldmVsSW50OwotICAgICAgICAgICAgaWYgKGJhdHRlcnlMZXZlbEludENoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICBmaXJzdFRva2VuIHw9IERFTFRBX0JBVFRFUllfTEVWRUxfRkxBRzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsIGludCBzdGF0ZUludCA9IGJ1aWxkU3RhdGVJbnQoKTsKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc3RhdGVJbnRDaGFuZ2VkID0gc3RhdGVJbnQgIT0gbGFzdFN0YXRlSW50OwotICAgICAgICAgICAgaWYgKHN0YXRlSW50Q2hhbmdlZCkgewotICAgICAgICAgICAgICAgIGZpcnN0VG9rZW4gfD0gREVMVEFfU1RBVEVfRkxBRzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQoZmlyc3RUb2tlbik7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cuaShUQUcsICJXUklURSBERUxUQTogZmlyc3RUb2tlbj0weCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGZpcnN0VG9rZW4pCi0gICAgICAgICAgICAgICAgICAgICsgIiBkZWx0YVRpbWU9IiArIGRlbHRhVGltZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChkZWx0YVRpbWVUb2tlbiA+PSBERUxUQV9USU1FX0lOVCkgewotICAgICAgICAgICAgICAgIGlmIChkZWx0YVRpbWVUb2tlbiA9PSBERUxUQV9USU1FX0lOVCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cuaShUQUcsICJXUklURSBERUxUQTogaW50IGRlbHRhVGltZT0iICsgKGludClkZWx0YVRpbWUpOwotICAgICAgICAgICAgICAgICAgICBkZXN0LndyaXRlSW50KChpbnQpZGVsdGFUaW1lKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cuaShUQUcsICJXUklURSBERUxUQTogbG9uZyBkZWx0YVRpbWU9IiArIGRlbHRhVGltZSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3Qud3JpdGVMb25nKGRlbHRhVGltZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGJhdHRlcnlMZXZlbEludENoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICBkZXN0LndyaXRlSW50KGJhdHRlcnlMZXZlbEludCk7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLmkoVEFHLCAiV1JJVEUgREVMVEE6IGJhdHRlcnlUb2tlbj0weCIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgSW50ZWdlci50b0hleFN0cmluZyhiYXR0ZXJ5TGV2ZWxJbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICArICIgYmF0dGVyeUxldmVsPSIgKyBiYXR0ZXJ5TGV2ZWwKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiYXR0ZXJ5VGVtcD0iICsgYmF0dGVyeVRlbXBlcmF0dXJlCi0gICAgICAgICAgICAgICAgICAgICAgICArICIgYmF0dGVyeVZvbHQ9IiArIChpbnQpYmF0dGVyeVZvbHRhZ2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0YXRlSW50Q2hhbmdlZCkgewotICAgICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQoc3RhdGVJbnQpOwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy5pKFRBRywgIldSSVRFIERFTFRBOiBzdGF0ZVRva2VuPTB4IgotICAgICAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHN0YXRlSW50KQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGJhdHRlcnlTdGF0dXM9IiArIGJhdHRlcnlTdGF0dXMKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiYXR0ZXJ5SGVhbHRoPSIgKyBiYXR0ZXJ5SGVhbHRoCi0gICAgICAgICAgICAgICAgICAgICAgICArICIgYmF0dGVyeVBsdWdUeXBlPSIgKyBiYXR0ZXJ5UGx1Z1R5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzdGF0ZXM9MHgiICsgSW50ZWdlci50b0hleFN0cmluZyhzdGF0ZXMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBpbnQgYnVpbGRCYXR0ZXJ5TGV2ZWxJbnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gKCgoKGludCliYXR0ZXJ5TGV2ZWwpPDwyNSkmMHhmZTAwMDAwMCkKLSAgICAgICAgICAgICAgICAgICAgfCAoKCgoaW50KWJhdHRlcnlUZW1wZXJhdHVyZSk8PDE0KSYweDAxZmZjMDAwKQotICAgICAgICAgICAgICAgICAgICB8ICgoKGludCliYXR0ZXJ5Vm9sdGFnZSkmMHgwMDAwM2ZmZik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgaW50IGJ1aWxkU3RhdGVJbnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gKCgoKGludCliYXR0ZXJ5U3RhdHVzKTw8MjgpJjB4ZjAwMDAwMDApCi0gICAgICAgICAgICAgICAgICAgIHwgKCgoKGludCliYXR0ZXJ5SGVhbHRoKTw8MjQpJjB4MGYwMDAwMDApCi0gICAgICAgICAgICAgICAgICAgIHwgKCgoKGludCliYXR0ZXJ5UGx1Z1R5cGUpPDwyMikmMHgwMGMwMDAwMCkKLSAgICAgICAgICAgICAgICAgICAgfCAoc3RhdGVzJih+REVMVEFfU1RBVEVfTUFTSykpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgdm9pZCByZWFkRGVsdGEoUGFyY2VsIHNyYykgewotICAgICAgICAgICAgaW50IGZpcnN0VG9rZW4gPSBzcmMucmVhZEludCgpOwotICAgICAgICAgICAgaW50IGRlbHRhVGltZVRva2VuID0gZmlyc3RUb2tlbiZERUxUQV9USU1FX01BU0s7Ci0gICAgICAgICAgICBjbWQgPSAoYnl0ZSkoKGZpcnN0VG9rZW4+PkRFTFRBX0NNRF9TSElGVCkmREVMVEFfQ01EX01BU0spOwotICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLmkoVEFHLCAiUkVBRCBERUxUQTogZmlyc3RUb2tlbj0weCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGZpcnN0VG9rZW4pCi0gICAgICAgICAgICAgICAgICAgICsgIiBkZWx0YVRpbWVUb2tlbj0iICsgZGVsdGFUaW1lVG9rZW4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZGVsdGFUaW1lVG9rZW4gPCBERUxUQV9USU1FX0FCUykgewotICAgICAgICAgICAgICAgIHRpbWUgKz0gZGVsdGFUaW1lVG9rZW47Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRlbHRhVGltZVRva2VuID09IERFTFRBX1RJTUVfQUJTKSB7Ci0gICAgICAgICAgICAgICAgdGltZSA9IHNyYy5yZWFkTG9uZygpOwotICAgICAgICAgICAgICAgIHJlYWRGcm9tUGFyY2VsKHNyYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkZWx0YVRpbWVUb2tlbiA9PSBERUxUQV9USU1FX0lOVCkgewotICAgICAgICAgICAgICAgIGludCBkZWx0YSA9IHNyYy5yZWFkSW50KCk7Ci0gICAgICAgICAgICAgICAgdGltZSArPSBkZWx0YTsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cuaShUQUcsICJSRUFEIERFTFRBOiB0aW1lIGRlbHRhPSIgKyBkZWx0YSArICIgbmV3IHRpbWU9IiArIHRpbWUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb25nIGRlbHRhID0gc3JjLnJlYWRMb25nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLmkoVEFHLCAiUkVBRCBERUxUQTogdGltZSBkZWx0YT0iICsgZGVsdGEgKyAiIG5ldyB0aW1lPSIgKyB0aW1lKTsKLSAgICAgICAgICAgICAgICB0aW1lICs9IGRlbHRhOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoKGZpcnN0VG9rZW4mREVMVEFfQkFUVEVSWV9MRVZFTF9GTEFHKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhdHRlcnlMZXZlbEludCA9IHNyYy5yZWFkSW50KCk7Ci0gICAgICAgICAgICAgICAgYmF0dGVyeUxldmVsID0gKGJ5dGUpKChiYXR0ZXJ5TGV2ZWxJbnQ+PjI1KSYweDdmKTsKLSAgICAgICAgICAgICAgICBiYXR0ZXJ5VGVtcGVyYXR1cmUgPSAoc2hvcnQpKChiYXR0ZXJ5TGV2ZWxJbnQ8PDcpPj4yMSk7Ci0gICAgICAgICAgICAgICAgYmF0dGVyeVZvbHRhZ2UgPSAoY2hhcikoYmF0dGVyeUxldmVsSW50JjB4M2ZmZik7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLmkoVEFHLCAiUkVBRCBERUxUQTogYmF0dGVyeVRva2VuPTB4IgotICAgICAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGJhdHRlcnlMZXZlbEludCkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiYXR0ZXJ5TGV2ZWw9IiArIGJhdHRlcnlMZXZlbAotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGJhdHRlcnlUZW1wPSIgKyBiYXR0ZXJ5VGVtcGVyYXR1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiYXR0ZXJ5Vm9sdD0iICsgKGludCliYXR0ZXJ5Vm9sdGFnZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgoZmlyc3RUb2tlbiZERUxUQV9TVEFURV9GTEFHKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IHN0YXRlSW50ID0gc3JjLnJlYWRJbnQoKTsKLSAgICAgICAgICAgICAgICBzdGF0ZXMgPSAoZmlyc3RUb2tlbiZERUxUQV9TVEFURV9NQVNLKSB8IChzdGF0ZUludCYofkRFTFRBX1NUQVRFX01BU0spKTsKLSAgICAgICAgICAgICAgICBiYXR0ZXJ5U3RhdHVzID0gKGJ5dGUpKChzdGF0ZUludD4+MjgpJjB4Zik7Ci0gICAgICAgICAgICAgICAgYmF0dGVyeUhlYWx0aCA9IChieXRlKSgoc3RhdGVJbnQ+PjI0KSYweGYpOwotICAgICAgICAgICAgICAgIGJhdHRlcnlQbHVnVHlwZSA9IChieXRlKSgoc3RhdGVJbnQ+PjIyKSYweDMpOwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy5pKFRBRywgIlJFQUQgREVMVEE6IHN0YXRlVG9rZW49MHgiCi0gICAgICAgICAgICAgICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcoc3RhdGVJbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICArICIgYmF0dGVyeVN0YXR1cz0iICsgYmF0dGVyeVN0YXR1cwotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGJhdHRlcnlIZWFsdGg9IiArIGJhdHRlcnlIZWFsdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiYXR0ZXJ5UGx1Z1R5cGU9IiArIGJhdHRlcnlQbHVnVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHN0YXRlcz0weCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHN0YXRlcykpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdGF0ZXMgPSAoZmlyc3RUb2tlbiZERUxUQV9TVEFURV9NQVNLKSB8IChzdGF0ZXMmKH5ERUxUQV9TVEFURV9NQVNLKSk7CisgICAgICAgICAgICAgICAgZXZlbnRDb2RlID0gRVZFTlRfTk9ORTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC02OTUsNiArNTk0LDkgQEAKICAgICAgICAgICAgIGJhdHRlcnlUZW1wZXJhdHVyZSA9IDA7CiAgICAgICAgICAgICBiYXR0ZXJ5Vm9sdGFnZSA9IDA7CiAgICAgICAgICAgICBzdGF0ZXMgPSAwOworICAgICAgICAgICAgZXZlbnRDb2RlID0gRVZFTlRfTk9ORTsKKyAgICAgICAgICAgIGV2ZW50VWlkID0gMDsKKyAgICAgICAgICAgIGV2ZW50TmFtZSA9IG51bGw7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFRvKEhpc3RvcnlJdGVtIG8pIHsKQEAgLTcwNywxMSArNjA5LDE4IEBACiAgICAgICAgICAgICBiYXR0ZXJ5VGVtcGVyYXR1cmUgPSBvLmJhdHRlcnlUZW1wZXJhdHVyZTsKICAgICAgICAgICAgIGJhdHRlcnlWb2x0YWdlID0gby5iYXR0ZXJ5Vm9sdGFnZTsKICAgICAgICAgICAgIHN0YXRlcyA9IG8uc3RhdGVzOworICAgICAgICAgICAgZXZlbnRDb2RlID0gby5ldmVudENvZGU7CisgICAgICAgICAgICBldmVudFVpZCA9IG8uZXZlbnRVaWQ7CisgICAgICAgICAgICBldmVudE5hbWUgPSBvLmV2ZW50TmFtZTsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFRvKGxvbmcgdGltZSwgYnl0ZSBjbWQsIEhpc3RvcnlJdGVtIG8pIHsKKyAgICAgICAgcHVibGljIHZvaWQgc2V0VG8obG9uZyB0aW1lLCBieXRlIGNtZCwgaW50IGV2ZW50Q29kZSwgaW50IGV2ZW50VWlkLCBTdHJpbmcgZXZlbnROYW1lLAorICAgICAgICAgICAgICAgIEhpc3RvcnlJdGVtIG8pIHsKICAgICAgICAgICAgIHRoaXMudGltZSA9IHRpbWU7CiAgICAgICAgICAgICB0aGlzLmNtZCA9IGNtZDsKKyAgICAgICAgICAgIHRoaXMuZXZlbnRDb2RlID0gZXZlbnRDb2RlOworICAgICAgICAgICAgdGhpcy5ldmVudFVpZCA9IGV2ZW50VWlkOworICAgICAgICAgICAgdGhpcy5ldmVudE5hbWUgPSBldmVudE5hbWU7CiAgICAgICAgICAgICBiYXR0ZXJ5TGV2ZWwgPSBvLmJhdHRlcnlMZXZlbDsKICAgICAgICAgICAgIGJhdHRlcnlTdGF0dXMgPSBvLmJhdHRlcnlTdGF0dXM7CiAgICAgICAgICAgICBiYXR0ZXJ5SGVhbHRoID0gby5iYXR0ZXJ5SGVhbHRoOwpAQCAtNzIxLDcgKzYzMCw3IEBACiAgICAgICAgICAgICBzdGF0ZXMgPSBvLnN0YXRlczsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHNhbWUoSGlzdG9yeUl0ZW0gbykgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBzYW1lTm9uRXZlbnQoSGlzdG9yeUl0ZW0gbykgewogICAgICAgICAgICAgcmV0dXJuIGJhdHRlcnlMZXZlbCA9PSBvLmJhdHRlcnlMZXZlbAogICAgICAgICAgICAgICAgICAgICAmJiBiYXR0ZXJ5U3RhdHVzID09IG8uYmF0dGVyeVN0YXR1cwogICAgICAgICAgICAgICAgICAgICAmJiBiYXR0ZXJ5SGVhbHRoID09IG8uYmF0dGVyeUhlYWx0aApAQCAtNzMwLDI2ICs2MzksNDMgQEAKICAgICAgICAgICAgICAgICAgICAgJiYgYmF0dGVyeVZvbHRhZ2UgPT0gby5iYXR0ZXJ5Vm9sdGFnZQogICAgICAgICAgICAgICAgICAgICAmJiBzdGF0ZXMgPT0gby5zdGF0ZXM7CiAgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBzYW1lKEhpc3RvcnlJdGVtIG8pIHsKKyAgICAgICAgICAgIGlmICghc2FtZU5vbkV2ZW50KG8pIHx8IGV2ZW50Q29kZSAhPSBvLmV2ZW50Q29kZSB8fCBldmVudFVpZCAhPSBvLmV2ZW50VWlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV2ZW50TmFtZSA9PSBvLmV2ZW50TmFtZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZSAhPSBudWxsICYmIG8uZXZlbnROYW1lICE9IG51bGwgJiYgZXZlbnROYW1lLmVxdWFscyhvLmV2ZW50TmFtZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBCaXREZXNjcmlwdGlvbiB7CiAgICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgbWFzazsKICAgICAgICAgcHVibGljIGZpbmFsIGludCBzaGlmdDsKICAgICAgICAgcHVibGljIGZpbmFsIFN0cmluZyBuYW1lOworICAgICAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHNob3J0TmFtZTsKICAgICAgICAgcHVibGljIGZpbmFsIFN0cmluZ1tdIHZhbHVlczsKKyAgICAgICAgcHVibGljIGZpbmFsIFN0cmluZ1tdIHNob3J0VmFsdWVzOwogICAgICAgICAKLSAgICAgICAgcHVibGljIEJpdERlc2NyaXB0aW9uKGludCBtYXNrLCBTdHJpbmcgbmFtZSkgeworICAgICAgICBwdWJsaWMgQml0RGVzY3JpcHRpb24oaW50IG1hc2ssIFN0cmluZyBuYW1lLCBTdHJpbmcgc2hvcnROYW1lKSB7CiAgICAgICAgICAgICB0aGlzLm1hc2sgPSBtYXNrOwogICAgICAgICAgICAgdGhpcy5zaGlmdCA9IC0xOwogICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHRoaXMuc2hvcnROYW1lID0gc2hvcnROYW1lOwogICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsOworICAgICAgICAgICAgdGhpcy5zaG9ydFZhbHVlcyA9IG51bGw7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHB1YmxpYyBCaXREZXNjcmlwdGlvbihpbnQgbWFzaywgaW50IHNoaWZ0LCBTdHJpbmcgbmFtZSwgU3RyaW5nW10gdmFsdWVzKSB7CisgICAgICAgIHB1YmxpYyBCaXREZXNjcmlwdGlvbihpbnQgbWFzaywgaW50IHNoaWZ0LCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNob3J0TmFtZSwKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSB2YWx1ZXMsIFN0cmluZ1tdIHNob3J0VmFsdWVzKSB7CiAgICAgICAgICAgICB0aGlzLm1hc2sgPSBtYXNrOwogICAgICAgICAgICAgdGhpcy5zaGlmdCA9IHNoaWZ0OwogICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHRoaXMuc2hvcnROYW1lID0gc2hvcnROYW1lOwogICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7CisgICAgICAgICAgICB0aGlzLnNob3J0VmFsdWVzID0gc2hvcnRWYWx1ZXM7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC03OTMsNiArNzE5LDEwIEBACiAgICAgICAgICJkYXJrIiwgImRpbSIsICJtZWRpdW0iLCAibGlnaHQiLCAiYnJpZ2h0IgogICAgIH07CiAgICAgCisgICAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFNDUkVFTl9CUklHSFRORVNTX1NIT1JUX05BTUVTID0geworICAgICAgICAiMCIsICIxIiwgIjIiLCAiMyIsICI0IgorICAgIH07CisKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1fU0NSRUVOX0JSSUdIVE5FU1NfQklOUyA9IDU7CiAgICAgCiAgICAgLyoqCkBAIC04ODQsMzMgKzgxNCwzNiBAQAogICAgIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQml0RGVzY3JpcHRpb25bXSBISVNUT1JZX1NUQVRFX0RFU0NSSVBUSU9OUwogICAgICAgICAgICAgPSBuZXcgQml0RGVzY3JpcHRpb25bXSB7Ci0gICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9CQVRURVJZX1BMVUdHRURfRkxBRywgInBsdWdnZWQiKSwKLSAgICAgICAgbmV3IEJpdERlc2NyaXB0aW9uKEhpc3RvcnlJdGVtLlNUQVRFX1NDUkVFTl9PTl9GTEFHLCAic2NyZWVuIiksCi0gICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9HUFNfT05fRkxBRywgImdwcyIpLAotICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfUEhPTkVfSU5fQ0FMTF9GTEFHLCAicGhvbmVfaW5fY2FsbCIpLAotICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfUEhPTkVfU0NBTk5JTkdfRkxBRywgInBob25lX3NjYW5uaW5nIiksCi0gICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9XSUZJX09OX0ZMQUcsICJ3aWZpIiksCi0gICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9XSUZJX1JVTk5JTkdfRkxBRywgIndpZmlfcnVubmluZyIpLAotICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfV0lGSV9GVUxMX0xPQ0tfRkxBRywgIndpZmlfZnVsbF9sb2NrIiksCi0gICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9XSUZJX1NDQU5fRkxBRywgIndpZmlfc2NhbiIpLAotICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfV0lGSV9NVUxUSUNBU1RfT05fRkxBRywgIndpZmlfbXVsdGljYXN0IiksCi0gICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9CTFVFVE9PVEhfT05fRkxBRywgImJsdWV0b290aCIpLAotICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfQVVESU9fT05fRkxBRywgImF1ZGlvIiksCi0gICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9WSURFT19PTl9GTEFHLCAidmlkZW8iKSwKLSAgICAgICAgbmV3IEJpdERlc2NyaXB0aW9uKEhpc3RvcnlJdGVtLlNUQVRFX1dBS0VfTE9DS19GTEFHLCAid2FrZV9sb2NrIiksCi0gICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9TRU5TT1JfT05fRkxBRywgInNlbnNvciIpLAorICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfQkFUVEVSWV9QTFVHR0VEX0ZMQUcsICJwbHVnZ2VkIiwgIkJQIiksCisgICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9TQ1JFRU5fT05fRkxBRywgInNjcmVlbiIsICJTIiksCisgICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9HUFNfT05fRkxBRywgImdwcyIsICJnIiksCisgICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9QSE9ORV9JTl9DQUxMX0ZMQUcsICJwaG9uZV9pbl9jYWxsIiwgIlBjbCIpLAorICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfUEhPTkVfU0NBTk5JTkdfRkxBRywgInBob25lX3NjYW5uaW5nIiwgIlBzYyIpLAorICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfV0lGSV9PTl9GTEFHLCAid2lmaSIsICJXIiksCisgICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9XSUZJX1JVTk5JTkdfRkxBRywgIndpZmlfcnVubmluZyIsICJXciIpLAorICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfV0lGSV9GVUxMX0xPQ0tfRkxBRywgIndpZmlfZnVsbF9sb2NrIiwgIldsIiksCisgICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9XSUZJX1NDQU5fRkxBRywgIndpZmlfc2NhbiIsICJXcyIpLAorICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfV0lGSV9NVUxUSUNBU1RfT05fRkxBRywgIndpZmlfbXVsdGljYXN0IiwgIldtIiksCisgICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9CTFVFVE9PVEhfT05fRkxBRywgImJsdWV0b290aCIsICJiIiksCisgICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9BVURJT19PTl9GTEFHLCAiYXVkaW8iLCAiYSIpLAorICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfVklERU9fT05fRkxBRywgInZpZGVvIiwgInYiKSwKKyAgICAgICAgbmV3IEJpdERlc2NyaXB0aW9uKEhpc3RvcnlJdGVtLlNUQVRFX1dBS0VfTE9DS19GTEFHLCAid2FrZV9sb2NrIiwgInciKSwKKyAgICAgICAgbmV3IEJpdERlc2NyaXB0aW9uKEhpc3RvcnlJdGVtLlNUQVRFX1NFTlNPUl9PTl9GTEFHLCAic2Vuc29yIiwgInMiKSwKICAgICAgICAgbmV3IEJpdERlc2NyaXB0aW9uKEhpc3RvcnlJdGVtLlNUQVRFX0JSSUdIVE5FU1NfTUFTSywKLSAgICAgICAgICAgICAgICBIaXN0b3J5SXRlbS5TVEFURV9CUklHSFRORVNTX1NISUZULCAiYnJpZ2h0bmVzcyIsCi0gICAgICAgICAgICAgICAgU0NSRUVOX0JSSUdIVE5FU1NfTkFNRVMpLAorICAgICAgICAgICAgICAgIEhpc3RvcnlJdGVtLlNUQVRFX0JSSUdIVE5FU1NfU0hJRlQsICJicmlnaHRuZXNzIiwgIlNiIiwKKyAgICAgICAgICAgICAgICBTQ1JFRU5fQlJJR0hUTkVTU19OQU1FUywgU0NSRUVOX0JSSUdIVE5FU1NfU0hPUlRfTkFNRVMpLAogICAgICAgICBuZXcgQml0RGVzY3JpcHRpb24oSGlzdG9yeUl0ZW0uU1RBVEVfU0lHTkFMX1NUUkVOR1RIX01BU0ssCi0gICAgICAgICAgICAgICAgSGlzdG9yeUl0ZW0uU1RBVEVfU0lHTkFMX1NUUkVOR1RIX1NISUZULCAic2lnbmFsX3N0cmVuZ3RoIiwKLSAgICAgICAgICAgICAgICBTaWduYWxTdHJlbmd0aC5TSUdOQUxfU1RSRU5HVEhfTkFNRVMpLAorICAgICAgICAgICAgICAgIEhpc3RvcnlJdGVtLlNUQVRFX1NJR05BTF9TVFJFTkdUSF9TSElGVCwgInNpZ25hbF9zdHJlbmd0aCIsICJQc3MiLAorICAgICAgICAgICAgICAgIFNpZ25hbFN0cmVuZ3RoLlNJR05BTF9TVFJFTkdUSF9OQU1FUywgbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgICAgICAgICAgIjAiLCAiMSIsICIyIiwgIjMiLCAiNCIKKyAgICAgICAgfSksCiAgICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9QSE9ORV9TVEFURV9NQVNLLAotICAgICAgICAgICAgICAgIEhpc3RvcnlJdGVtLlNUQVRFX1BIT05FX1NUQVRFX1NISUZULCAicGhvbmVfc3RhdGUiLAotICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7ImluIiwgIm91dCIsICJlbWVyZ2VuY3kiLCAib2ZmIn0pLAorICAgICAgICAgICAgICAgIEhpc3RvcnlJdGVtLlNUQVRFX1BIT05FX1NUQVRFX1NISUZULCAicGhvbmVfc3RhdGUiLCAiUHN0IiwKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyJpbiIsICJvdXQiLCAiZW1lcmdlbmN5IiwgIm9mZiJ9LAorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7ImluIiwgIm91dCIsICJlbSIsICJvZmYifSksCiAgICAgICAgIG5ldyBCaXREZXNjcmlwdGlvbihIaXN0b3J5SXRlbS5TVEFURV9EQVRBX0NPTk5FQ1RJT05fTUFTSywKLSAgICAgICAgICAgICAgICBIaXN0b3J5SXRlbS5TVEFURV9EQVRBX0NPTk5FQ1RJT05fU0hJRlQsICJkYXRhX2Nvbm4iLAotICAgICAgICAgICAgICAgIERBVEFfQ09OTkVDVElPTl9OQU1FUyksCisgICAgICAgICAgICAgICAgSGlzdG9yeUl0ZW0uU1RBVEVfREFUQV9DT05ORUNUSU9OX1NISUZULCAiZGF0YV9jb25uIiwgIlBjbiIsCisgICAgICAgICAgICAgICAgREFUQV9DT05ORUNUSU9OX05BTUVTLCBEQVRBX0NPTk5FQ1RJT05fTkFNRVMpLAogICAgIH07CiAKICAgICAvKioKQEAgLTkzNywxNCArODcwLDE3IEBACiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGxvbmcgZ2V0Qmx1ZXRvb3RoT25UaW1lKGxvbmcgYmF0dGVyeVJlYWx0aW1lLCBpbnQgd2hpY2gpOwogICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktfTU9CSUxFX1JYX0JZVEVTID0gMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLX01PQklMRV9UWF9CWVRFUyA9IDE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS19XSUZJX1JYX0JZVEVTID0gMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLX1dJRklfVFhfQllURVMgPSAzOworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0Qmx1ZXRvb3RoUGluZ0NvdW50KCk7CiAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1fTkVUV09SS19BQ1RJVklUWV9UWVBFUyA9IE5FVFdPUktfV0lGSV9UWF9CWVRFUyArIDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS19NT0JJTEVfUlhfREFUQSA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS19NT0JJTEVfVFhfREFUQSA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS19XSUZJX1JYX0RBVEEgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktfV0lGSV9UWF9EQVRBID0gMzsKIAotICAgIHB1YmxpYyBhYnN0cmFjdCBsb25nIGdldE5ldHdvcmtBY3Rpdml0eUNvdW50KGludCB0eXBlLCBpbnQgd2hpY2gpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTV9ORVRXT1JLX0FDVElWSVRZX1RZUEVTID0gTkVUV09SS19XSUZJX1RYX0RBVEEgKyAxOworCisgICAgcHVibGljIGFic3RyYWN0IGxvbmcgZ2V0TmV0d29ya0FjdGl2aXR5Qnl0ZXMoaW50IHR5cGUsIGludCB3aGljaCk7CisgICAgcHVibGljIGFic3RyYWN0IGxvbmcgZ2V0TmV0d29ya0FjdGl2aXR5UGFja2V0cyhpbnQgdHlwZSwgaW50IHdoaWNoKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybiB3aGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgcnVubmluZyBvbiBiYXR0ZXJ5LgpAQCAtMTA2OCw2ICsxMDA0LDggQEAKICAgICAvKiogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBzcGVlZHMgdGhhdCB0aGUgQ1BVIGNhbiBydW4gYXQgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldENwdVNwZWVkU3RlcHMoKTsKIAorICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlVG9QYXJjZWxXaXRob3V0VWlkcyhQYXJjZWwgb3V0LCBpbnQgZmxhZ3MpOworCiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgdm9pZCBmb3JtYXRUaW1lUmF3KFN0cmluZ0J1aWxkZXIgb3V0LCBsb25nIHNlY29uZHMpIHsKICAgICAgICAgbG9uZyBkYXlzID0gc2Vjb25kcyAvICg2MCAqIDYwICogMjQpOwogICAgICAgICBpZiAoZGF5cyAhPSAwKSB7CkBAIC0xMTEyLDcgKzEwNTAsNyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZm9ybWF0UmF0aW9Mb2NrZWQobG9uZyBudW0sIGxvbmcgZGVuKSB7CiAgICAgICAgIGlmIChkZW4gPT0gMEwpIHsKLSAgICAgICAgICAgIHJldHVybiAiLS0tJSI7CisgICAgICAgICAgICByZXR1cm4gIi0tJSI7CiAgICAgICAgIH0KICAgICAgICAgZmxvYXQgcGVyYyA9ICgoZmxvYXQpbnVtKSAvICgoZmxvYXQpZGVuKSAqIDEwMDsKICAgICAgICAgbUZvcm1hdEJ1aWxkZXIuc2V0TGVuZ3RoKDApOwpAQCAtMTIzNCw3ICsxMTcyLDcgQEAKICAgICAgKiAKICAgICAgKiBOT1RFOiBhbGwgdGltZXMgYXJlIGV4cHJlc3NlZCBpbiAnbXMnLgogICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCB2b2lkIGR1bXBDaGVja2luTG9ja2VkKFByaW50V3JpdGVyIHB3LCBpbnQgd2hpY2gsIGludCByZXFVaWQpIHsKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBkdW1wQ2hlY2tpbkxvY2tlZChDb250ZXh0IGNvbnRleHQsIFByaW50V3JpdGVyIHB3LCBpbnQgd2hpY2gsIGludCByZXFVaWQpIHsKICAgICAgICAgZmluYWwgbG9uZyByYXdVcHRpbWUgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSAqIDEwMDA7CiAgICAgICAgIGZpbmFsIGxvbmcgcmF3UmVhbHRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAqIDEwMDA7CiAgICAgICAgIGZpbmFsIGxvbmcgYmF0dGVyeVVwdGltZSA9IGdldEJhdHRlcnlVcHRpbWUocmF3VXB0aW1lKTsKQEAgLTEyNjIsMjAgKzEyMDAsMTIgQEAKICAgICAgICAgICAgICAgICB3aGljaEJhdHRlcnlSZWFsdGltZSAvIDEwMDAsIHdoaWNoQmF0dGVyeVVwdGltZSAvIDEwMDAsCiAgICAgICAgICAgICAgICAgdG90YWxSZWFsdGltZSAvIDEwMDAsIHRvdGFsVXB0aW1lIC8gMTAwMCk7IAogICAgICAgICAKLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRvdGFsIG5ldHdvcmsgYW5kIHdha2Vsb2NrIHRpbWVzIGFjcm9zcyBhbGwgdWlkcy4KLSAgICAgICAgbG9uZyBtb2JpbGVSeFRvdGFsID0gMDsKLSAgICAgICAgbG9uZyBtb2JpbGVUeFRvdGFsID0gMDsKLSAgICAgICAgbG9uZyB3aWZpUnhUb3RhbCA9IDA7Ci0gICAgICAgIGxvbmcgd2lmaVR4VG90YWwgPSAwOworICAgICAgICAvLyBDYWxjdWxhdGUgd2FrZWxvY2sgdGltZXMgYWNyb3NzIGFsbCB1aWRzLgogICAgICAgICBsb25nIGZ1bGxXYWtlTG9ja1RpbWVUb3RhbCA9IDA7CiAgICAgICAgIGxvbmcgcGFydGlhbFdha2VMb2NrVGltZVRvdGFsID0gMDsKICAgICAgICAgCiAgICAgICAgIGZvciAoaW50IGl1ID0gMDsgaXUgPCBOVTsgaXUrKykgewogICAgICAgICAgICAgVWlkIHUgPSB1aWRTdGF0cy52YWx1ZUF0KGl1KTsKLSAgICAgICAgICAgIG1vYmlsZVJ4VG90YWwgKz0gdS5nZXROZXR3b3JrQWN0aXZpdHlDb3VudChORVRXT1JLX01PQklMRV9SWF9CWVRFUywgd2hpY2gpOwotICAgICAgICAgICAgbW9iaWxlVHhUb3RhbCArPSB1LmdldE5ldHdvcmtBY3Rpdml0eUNvdW50KE5FVFdPUktfTU9CSUxFX1RYX0JZVEVTLCB3aGljaCk7Ci0gICAgICAgICAgICB3aWZpUnhUb3RhbCArPSB1LmdldE5ldHdvcmtBY3Rpdml0eUNvdW50KE5FVFdPUktfV0lGSV9SWF9CWVRFUywgd2hpY2gpOwotICAgICAgICAgICAgd2lmaVR4VG90YWwgKz0gdS5nZXROZXR3b3JrQWN0aXZpdHlDb3VudChORVRXT1JLX1dJRklfVFhfQllURVMsIHdoaWNoKTsKIAogICAgICAgICAgICAgTWFwPFN0cmluZywgPyBleHRlbmRzIEJhdHRlcnlTdGF0cy5VaWQuV2FrZWxvY2s+IHdha2Vsb2NrcyA9IHUuZ2V0V2FrZWxvY2tTdGF0cygpOwogICAgICAgICAgICAgaWYgKHdha2Vsb2Nrcy5zaXplKCkgPiAwKSB7CkBAIC0xMjk3LDExICsxMjI3LDI1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGxvbmcgbW9iaWxlUnhUb3RhbEJ5dGVzID0gZ2V0TmV0d29ya0FjdGl2aXR5Qnl0ZXMoTkVUV09SS19NT0JJTEVfUlhfREFUQSwgd2hpY2gpOworICAgICAgICBsb25nIG1vYmlsZVR4VG90YWxCeXRlcyA9IGdldE5ldHdvcmtBY3Rpdml0eUJ5dGVzKE5FVFdPUktfTU9CSUxFX1RYX0RBVEEsIHdoaWNoKTsKKyAgICAgICAgbG9uZyB3aWZpUnhUb3RhbEJ5dGVzID0gZ2V0TmV0d29ya0FjdGl2aXR5Qnl0ZXMoTkVUV09SS19XSUZJX1JYX0RBVEEsIHdoaWNoKTsKKyAgICAgICAgbG9uZyB3aWZpVHhUb3RhbEJ5dGVzID0gZ2V0TmV0d29ya0FjdGl2aXR5Qnl0ZXMoTkVUV09SS19XSUZJX1RYX0RBVEEsIHdoaWNoKTsKKyAgICAgICAgbG9uZyBtb2JpbGVSeFRvdGFsUGFja2V0cyA9IGdldE5ldHdvcmtBY3Rpdml0eVBhY2tldHMoTkVUV09SS19NT0JJTEVfUlhfREFUQSwgd2hpY2gpOworICAgICAgICBsb25nIG1vYmlsZVR4VG90YWxQYWNrZXRzID0gZ2V0TmV0d29ya0FjdGl2aXR5UGFja2V0cyhORVRXT1JLX01PQklMRV9UWF9EQVRBLCB3aGljaCk7CisgICAgICAgIGxvbmcgd2lmaVJ4VG90YWxQYWNrZXRzID0gZ2V0TmV0d29ya0FjdGl2aXR5UGFja2V0cyhORVRXT1JLX1dJRklfUlhfREFUQSwgd2hpY2gpOworICAgICAgICBsb25nIHdpZmlUeFRvdGFsUGFja2V0cyA9IGdldE5ldHdvcmtBY3Rpdml0eVBhY2tldHMoTkVUV09SS19XSUZJX1RYX0RBVEEsIHdoaWNoKTsKKworICAgICAgICAvLyBEdW1wIG5ldHdvcmsgc3RhdHMKKyAgICAgICAgZHVtcExpbmUocHcsIDAgLyogdWlkICovLCBjYXRlZ29yeSwgR0xPQkFMX05FVFdPUktfREFUQSwKKyAgICAgICAgICAgICAgICBtb2JpbGVSeFRvdGFsQnl0ZXMsIG1vYmlsZVR4VG90YWxCeXRlcywgd2lmaVJ4VG90YWxCeXRlcywgd2lmaVR4VG90YWxCeXRlcywKKyAgICAgICAgICAgICAgICBtb2JpbGVSeFRvdGFsUGFja2V0cywgbW9iaWxlVHhUb3RhbFBhY2tldHMsIHdpZmlSeFRvdGFsUGFja2V0cywgd2lmaVR4VG90YWxQYWNrZXRzKTsKKwogICAgICAgICAvLyBEdW1wIG1pc2Mgc3RhdHMKICAgICAgICAgZHVtcExpbmUocHcsIDAgLyogdWlkICovLCBjYXRlZ29yeSwgTUlTQ19EQVRBLAogICAgICAgICAgICAgICAgIHNjcmVlbk9uVGltZSAvIDEwMDAsIHBob25lT25UaW1lIC8gMTAwMCwgd2lmaU9uVGltZSAvIDEwMDAsCiAgICAgICAgICAgICAgICAgd2lmaVJ1bm5pbmdUaW1lIC8gMTAwMCwgYmx1ZXRvb3RoT25UaW1lIC8gMTAwMCwKLSAgICAgICAgICAgICAgICBtb2JpbGVSeFRvdGFsLCBtb2JpbGVUeFRvdGFsLCB3aWZpUnhUb3RhbCwgd2lmaVR4VG90YWwsCisgICAgICAgICAgICAgICAgbW9iaWxlUnhUb3RhbEJ5dGVzLCBtb2JpbGVUeFRvdGFsQnl0ZXMsIHdpZmlSeFRvdGFsQnl0ZXMsIHdpZmlUeFRvdGFsQnl0ZXMsCiAgICAgICAgICAgICAgICAgZnVsbFdha2VMb2NrVGltZVRvdGFsLCBwYXJ0aWFsV2FrZUxvY2tUaW1lVG90YWwsCiAgICAgICAgICAgICAgICAgZ2V0SW5wdXRFdmVudENvdW50KHdoaWNoKSk7CiAgICAgICAgIApAQCAtMTM2NSw2ICsxMzA5LDYxIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIEJhdHRlcnlTdGF0c0hlbHBlciBoZWxwZXIgPSBuZXcgQmF0dGVyeVN0YXRzSGVscGVyKGNvbnRleHQpOworICAgICAgICBoZWxwZXIuY3JlYXRlKHRoaXMpOworICAgICAgICBoZWxwZXIucmVmcmVzaFN0YXRzKHdoaWNoLCBVc2VySGFuZGxlLlVTRVJfQUxMKTsKKyAgICAgICAgTGlzdDxCYXR0ZXJ5U2lwcGVyPiBzaXBwZXJzID0gaGVscGVyLmdldFVzYWdlTGlzdCgpOworICAgICAgICBpZiAoc2lwcGVycyAhPSBudWxsICYmIHNpcHBlcnMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgZHVtcExpbmUocHcsIDAgLyogdWlkICovLCBjYXRlZ29yeSwgUE9XRVJfVVNFX1NVTU1BUllfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgQmF0dGVyeVN0YXRzSGVscGVyLm1ha2VtQWgoaGVscGVyLmdldFBvd2VyUHJvZmlsZSgpLmdldEJhdHRlcnlDYXBhY2l0eSgpKSwKKyAgICAgICAgICAgICAgICAgICAgQmF0dGVyeVN0YXRzSGVscGVyLm1ha2VtQWgoaGVscGVyLmdldFRvdGFsUG93ZXIoKSksCisgICAgICAgICAgICAgICAgICAgIEJhdHRlcnlTdGF0c0hlbHBlci5tYWtlbUFoKGhlbHBlci5nZXRNaW5EcmFpbmVkUG93ZXIoKSksCisgICAgICAgICAgICAgICAgICAgIEJhdHRlcnlTdGF0c0hlbHBlci5tYWtlbUFoKGhlbHBlci5nZXRNYXhEcmFpbmVkUG93ZXIoKSkpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHNpcHBlcnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBCYXR0ZXJ5U2lwcGVyIGJzID0gc2lwcGVycy5nZXQoaSk7CisgICAgICAgICAgICAgICAgaW50IHVpZCA9IDA7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxhYmVsOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYnMuZHJhaW5UeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSURMRToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSJpZGxlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENFTEw6CisgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iY2VsbCI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQSE9ORToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSJwaG9uZSI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBXSUZJOgorICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IndpZmkiOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQkxVRVRPT1RIOgorICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9ImJsdWUiOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU0NSRUVOOgorICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9InNjcm4iOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQVBQOgorICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gYnMudWlkT2JqLmdldFVpZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAidWlkIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFVTRVI6CisgICAgICAgICAgICAgICAgICAgICAgICB1aWQgPSBVc2VySGFuZGxlLmdldFVpZChicy51c2VySWQsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAidXNlciI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVTkFDQ09VTlRFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gInVuYWNjIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIE9WRVJDT1VOVEVEOgorICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAib3ZlciI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gIj8/PyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGR1bXBMaW5lKHB3LCB1aWQsIGNhdGVnb3J5LCBQT1dFUl9VU0VfSVRFTV9EQVRBLCBsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhdHRlcnlTdGF0c0hlbHBlci5tYWtlbUFoKGJzLnZhbHVlKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBmb3IgKGludCBpdSA9IDA7IGl1IDwgTlU7IGl1KyspIHsKICAgICAgICAgICAgIGZpbmFsIGludCB1aWQgPSB1aWRTdGF0cy5rZXlBdChpdSk7CiAgICAgICAgICAgICBpZiAocmVxVWlkID49IDAgJiYgdWlkICE9IHJlcVVpZCkgewpAQCAtMTM3MiwxNiArMTM3MSwyNSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgVWlkIHUgPSB1aWRTdGF0cy52YWx1ZUF0KGl1KTsKICAgICAgICAgICAgIC8vIER1bXAgTmV0d29yayBzdGF0cyBwZXIgdWlkLCBpZiBhbnkKLSAgICAgICAgICAgIGxvbmcgbW9iaWxlUnggPSB1LmdldE5ldHdvcmtBY3Rpdml0eUNvdW50KE5FVFdPUktfTU9CSUxFX1JYX0JZVEVTLCB3aGljaCk7Ci0gICAgICAgICAgICBsb25nIG1vYmlsZVR4ID0gdS5nZXROZXR3b3JrQWN0aXZpdHlDb3VudChORVRXT1JLX01PQklMRV9UWF9CWVRFUywgd2hpY2gpOwotICAgICAgICAgICAgbG9uZyB3aWZpUnggPSB1LmdldE5ldHdvcmtBY3Rpdml0eUNvdW50KE5FVFdPUktfV0lGSV9SWF9CWVRFUywgd2hpY2gpOwotICAgICAgICAgICAgbG9uZyB3aWZpVHggPSB1LmdldE5ldHdvcmtBY3Rpdml0eUNvdW50KE5FVFdPUktfV0lGSV9UWF9CWVRFUywgd2hpY2gpOworICAgICAgICAgICAgbG9uZyBtb2JpbGVCeXRlc1J4ID0gdS5nZXROZXR3b3JrQWN0aXZpdHlCeXRlcyhORVRXT1JLX01PQklMRV9SWF9EQVRBLCB3aGljaCk7CisgICAgICAgICAgICBsb25nIG1vYmlsZUJ5dGVzVHggPSB1LmdldE5ldHdvcmtBY3Rpdml0eUJ5dGVzKE5FVFdPUktfTU9CSUxFX1RYX0RBVEEsIHdoaWNoKTsKKyAgICAgICAgICAgIGxvbmcgd2lmaUJ5dGVzUnggPSB1LmdldE5ldHdvcmtBY3Rpdml0eUJ5dGVzKE5FVFdPUktfV0lGSV9SWF9EQVRBLCB3aGljaCk7CisgICAgICAgICAgICBsb25nIHdpZmlCeXRlc1R4ID0gdS5nZXROZXR3b3JrQWN0aXZpdHlCeXRlcyhORVRXT1JLX1dJRklfVFhfREFUQSwgd2hpY2gpOworICAgICAgICAgICAgbG9uZyBtb2JpbGVQYWNrZXRzUnggPSB1LmdldE5ldHdvcmtBY3Rpdml0eVBhY2tldHMoTkVUV09SS19NT0JJTEVfUlhfREFUQSwgd2hpY2gpOworICAgICAgICAgICAgbG9uZyBtb2JpbGVQYWNrZXRzVHggPSB1LmdldE5ldHdvcmtBY3Rpdml0eVBhY2tldHMoTkVUV09SS19NT0JJTEVfVFhfREFUQSwgd2hpY2gpOworICAgICAgICAgICAgbG9uZyB3aWZpUGFja2V0c1J4ID0gdS5nZXROZXR3b3JrQWN0aXZpdHlQYWNrZXRzKE5FVFdPUktfV0lGSV9SWF9EQVRBLCB3aGljaCk7CisgICAgICAgICAgICBsb25nIHdpZmlQYWNrZXRzVHggPSB1LmdldE5ldHdvcmtBY3Rpdml0eVBhY2tldHMoTkVUV09SS19XSUZJX1RYX0RBVEEsIHdoaWNoKTsKICAgICAgICAgICAgIGxvbmcgZnVsbFdpZmlMb2NrT25UaW1lID0gdS5nZXRGdWxsV2lmaUxvY2tUaW1lKGJhdHRlcnlSZWFsdGltZSwgd2hpY2gpOwogICAgICAgICAgICAgbG9uZyB3aWZpU2NhblRpbWUgPSB1LmdldFdpZmlTY2FuVGltZShiYXR0ZXJ5UmVhbHRpbWUsIHdoaWNoKTsKICAgICAgICAgICAgIGxvbmcgdWlkV2lmaVJ1bm5pbmdUaW1lID0gdS5nZXRXaWZpUnVubmluZ1RpbWUoYmF0dGVyeVJlYWx0aW1lLCB3aGljaCk7CiAKLSAgICAgICAgICAgIGlmIChtb2JpbGVSeCA+IDAgfHwgbW9iaWxlVHggPiAwIHx8IHdpZmlSeCA+IDAgfHwgd2lmaVR4ID4gMCkgewotICAgICAgICAgICAgICAgIGR1bXBMaW5lKHB3LCB1aWQsIGNhdGVnb3J5LCBORVRXT1JLX0RBVEEsIG1vYmlsZVJ4LCBtb2JpbGVUeCwgd2lmaVJ4LCB3aWZpVHgpOworICAgICAgICAgICAgaWYgKG1vYmlsZUJ5dGVzUnggPiAwIHx8IG1vYmlsZUJ5dGVzVHggPiAwIHx8IHdpZmlCeXRlc1J4ID4gMCB8fCB3aWZpQnl0ZXNUeCA+IDAKKyAgICAgICAgICAgICAgICAgICAgfHwgbW9iaWxlUGFja2V0c1J4ID4gMCB8fCBtb2JpbGVQYWNrZXRzVHggPiAwIHx8IHdpZmlQYWNrZXRzUnggPiAwCisgICAgICAgICAgICAgICAgICAgIHx8IHdpZmlQYWNrZXRzVHggPiAwKSB7CisgICAgICAgICAgICAgICAgZHVtcExpbmUocHcsIHVpZCwgY2F0ZWdvcnksIE5FVFdPUktfREFUQSwgbW9iaWxlQnl0ZXNSeCwgbW9iaWxlQnl0ZXNUeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZmlCeXRlc1J4LCB3aWZpQnl0ZXNUeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vYmlsZVBhY2tldHNSeCwgbW9iaWxlUGFja2V0c1R4LAorICAgICAgICAgICAgICAgICAgICAgICAgd2lmaVBhY2tldHNSeCwgd2lmaVBhY2tldHNUeCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChmdWxsV2lmaUxvY2tPblRpbWUgIT0gMCB8fCB3aWZpU2NhblRpbWUgIT0gMApAQCAtMTUyNyw4ICsxNTM1LDEzIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgcHJpbnRtQWgoUHJpbnRXcml0ZXIgcHJpbnRlciwgZG91YmxlIHBvd2VyKSB7CisgICAgICAgIHByaW50ZXIucHJpbnQoQmF0dGVyeVN0YXRzSGVscGVyLm1ha2VtQWgocG93ZXIpKTsKKyAgICB9CisKICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBkdW1wTG9ja2VkKFByaW50V3JpdGVyIHB3LCBTdHJpbmcgcHJlZml4LCBmaW5hbCBpbnQgd2hpY2gsIGludCByZXFVaWQpIHsKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBkdW1wTG9ja2VkKENvbnRleHQgY29udGV4dCwgUHJpbnRXcml0ZXIgcHcsIFN0cmluZyBwcmVmaXgsIGZpbmFsIGludCB3aGljaCwKKyAgICAgICAgICAgIGludCByZXFVaWQpIHsKICAgICAgICAgZmluYWwgbG9uZyByYXdVcHRpbWUgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSAqIDEwMDA7CiAgICAgICAgIGZpbmFsIGxvbmcgcmF3UmVhbHRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAqIDEwMDA7CiAgICAgICAgIGZpbmFsIGxvbmcgYmF0dGVyeVVwdGltZSA9IGdldEJhdHRlcnlVcHRpbWUocmF3VXB0aW1lKTsKQEAgLTE1OTgsMTEgKzE2MTEsNyBAQAogICAgICAgICBpZiAoIWRpZE9uZSkgc2IuYXBwZW5kKCJObyBhY3Rpdml0eSIpOwogICAgICAgICBwdy5wcmludGxuKHNiLnRvU3RyaW5nKCkpOwogICAgICAgICAKLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRvdGFsIG5ldHdvcmsgYW5kIHdha2Vsb2NrIHRpbWVzIGFjcm9zcyBhbGwgdWlkcy4KLSAgICAgICAgbG9uZyBtb2JpbGVSeFRvdGFsID0gMDsKLSAgICAgICAgbG9uZyBtb2JpbGVUeFRvdGFsID0gMDsKLSAgICAgICAgbG9uZyB3aWZpUnhUb3RhbCA9IDA7Ci0gICAgICAgIGxvbmcgd2lmaVR4VG90YWwgPSAwOworICAgICAgICAvLyBDYWxjdWxhdGUgd2FrZWxvY2sgdGltZXMgYWNyb3NzIGFsbCB1aWRzLgogICAgICAgICBsb25nIGZ1bGxXYWtlTG9ja1RpbWVUb3RhbE1pY3JvcyA9IDA7CiAgICAgICAgIGxvbmcgcGFydGlhbFdha2VMb2NrVGltZVRvdGFsTWljcm9zID0gMDsKIApAQCAtMTY1NSwxMCArMTY2NCw2IEBACiAKICAgICAgICAgZm9yIChpbnQgaXUgPSAwOyBpdSA8IE5VOyBpdSsrKSB7CiAgICAgICAgICAgICBVaWQgdSA9IHVpZFN0YXRzLnZhbHVlQXQoaXUpOwotICAgICAgICAgICAgbW9iaWxlUnhUb3RhbCArPSB1LmdldE5ldHdvcmtBY3Rpdml0eUNvdW50KE5FVFdPUktfTU9CSUxFX1JYX0JZVEVTLCB3aGljaCk7Ci0gICAgICAgICAgICBtb2JpbGVUeFRvdGFsICs9IHUuZ2V0TmV0d29ya0FjdGl2aXR5Q291bnQoTkVUV09SS19NT0JJTEVfVFhfQllURVMsIHdoaWNoKTsKLSAgICAgICAgICAgIHdpZmlSeFRvdGFsICs9IHUuZ2V0TmV0d29ya0FjdGl2aXR5Q291bnQoTkVUV09SS19XSUZJX1JYX0JZVEVTLCB3aGljaCk7Ci0gICAgICAgICAgICB3aWZpVHhUb3RhbCArPSB1LmdldE5ldHdvcmtBY3Rpdml0eUNvdW50KE5FVFdPUktfV0lGSV9UWF9CWVRFUywgd2hpY2gpOwogCiAgICAgICAgICAgICBNYXA8U3RyaW5nLCA/IGV4dGVuZHMgQmF0dGVyeVN0YXRzLlVpZC5XYWtlbG9jaz4gd2FrZWxvY2tzID0gdS5nZXRXYWtlbG9ja1N0YXRzKCk7CiAgICAgICAgICAgICBpZiAod2FrZWxvY2tzLnNpemUoKSA+IDApIHsKQEAgLTE2OTEsMTIgKzE2OTYsMjUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgbG9uZyBtb2JpbGVSeFRvdGFsQnl0ZXMgPSBnZXROZXR3b3JrQWN0aXZpdHlCeXRlcyhORVRXT1JLX01PQklMRV9SWF9EQVRBLCB3aGljaCk7CisgICAgICAgIGxvbmcgbW9iaWxlVHhUb3RhbEJ5dGVzID0gZ2V0TmV0d29ya0FjdGl2aXR5Qnl0ZXMoTkVUV09SS19NT0JJTEVfVFhfREFUQSwgd2hpY2gpOworICAgICAgICBsb25nIHdpZmlSeFRvdGFsQnl0ZXMgPSBnZXROZXR3b3JrQWN0aXZpdHlCeXRlcyhORVRXT1JLX1dJRklfUlhfREFUQSwgd2hpY2gpOworICAgICAgICBsb25nIHdpZmlUeFRvdGFsQnl0ZXMgPSBnZXROZXR3b3JrQWN0aXZpdHlCeXRlcyhORVRXT1JLX1dJRklfVFhfREFUQSwgd2hpY2gpOworICAgICAgICBsb25nIG1vYmlsZVJ4VG90YWxQYWNrZXRzID0gZ2V0TmV0d29ya0FjdGl2aXR5UGFja2V0cyhORVRXT1JLX01PQklMRV9SWF9EQVRBLCB3aGljaCk7CisgICAgICAgIGxvbmcgbW9iaWxlVHhUb3RhbFBhY2tldHMgPSBnZXROZXR3b3JrQWN0aXZpdHlQYWNrZXRzKE5FVFdPUktfTU9CSUxFX1RYX0RBVEEsIHdoaWNoKTsKKyAgICAgICAgbG9uZyB3aWZpUnhUb3RhbFBhY2tldHMgPSBnZXROZXR3b3JrQWN0aXZpdHlQYWNrZXRzKE5FVFdPUktfV0lGSV9SWF9EQVRBLCB3aGljaCk7CisgICAgICAgIGxvbmcgd2lmaVR4VG90YWxQYWNrZXRzID0gZ2V0TmV0d29ya0FjdGl2aXR5UGFja2V0cyhORVRXT1JLX1dJRklfVFhfREFUQSwgd2hpY2gpOworCiAgICAgICAgIHB3LnByaW50KHByZWZpeCk7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnQoIiAgTW9iaWxlIHRvdGFsIHJlY2VpdmVkOiAiKTsgcHcucHJpbnQoZm9ybWF0Qnl0ZXNMb2NrZWQobW9iaWxlUnhUb3RhbCkpOwotICAgICAgICAgICAgICAgIHB3LnByaW50KCIsIFRvdGFsIHNlbnQ6ICIpOyBwdy5wcmludGxuKGZvcm1hdEJ5dGVzTG9ja2VkKG1vYmlsZVR4VG90YWwpKTsKKyAgICAgICAgICAgICAgICBwdy5wcmludCgiICBNb2JpbGUgdG90YWwgcmVjZWl2ZWQ6ICIpOyBwdy5wcmludChmb3JtYXRCeXRlc0xvY2tlZChtb2JpbGVSeFRvdGFsQnl0ZXMpKTsKKyAgICAgICAgICAgICAgICBwdy5wcmludCgiLCBzZW50OiAiKTsgcHcucHJpbnQoZm9ybWF0Qnl0ZXNMb2NrZWQobW9iaWxlVHhUb3RhbEJ5dGVzKSk7CisgICAgICAgICAgICAgICAgcHcucHJpbnQoIiAocGFja2V0cyByZWNlaXZlZCAiKTsgcHcucHJpbnQobW9iaWxlUnhUb3RhbFBhY2tldHMpOworICAgICAgICAgICAgICAgIHB3LnByaW50KCIsIHNlbnQgIik7IHB3LnByaW50KG1vYmlsZVR4VG90YWxQYWNrZXRzKTsgcHcucHJpbnRsbigiKSIpOwogICAgICAgICBwdy5wcmludChwcmVmaXgpOwotICAgICAgICAgICAgICAgIHB3LnByaW50KCIgIFdpLUZpIHRvdGFsIHJlY2VpdmVkOiAiKTsgcHcucHJpbnQoZm9ybWF0Qnl0ZXNMb2NrZWQod2lmaVJ4VG90YWwpKTsKLSAgICAgICAgICAgICAgICBwdy5wcmludCgiLCBUb3RhbCBzZW50OiAiKTsgcHcucHJpbnRsbihmb3JtYXRCeXRlc0xvY2tlZCh3aWZpVHhUb3RhbCkpOworICAgICAgICAgICAgICAgIHB3LnByaW50KCIgIFdpLUZpIHRvdGFsIHJlY2VpdmVkOiAiKTsgcHcucHJpbnQoZm9ybWF0Qnl0ZXNMb2NrZWQod2lmaVJ4VG90YWxCeXRlcykpOworICAgICAgICAgICAgICAgIHB3LnByaW50KCIsIHNlbnQ6ICIpOyBwdy5wcmludChmb3JtYXRCeXRlc0xvY2tlZCh3aWZpVHhUb3RhbEJ5dGVzKSk7CisgICAgICAgICAgICAgICAgcHcucHJpbnQoIiAocGFja2V0cyByZWNlaXZlZCAiKTsgcHcucHJpbnQod2lmaVJ4VG90YWxQYWNrZXRzKTsKKyAgICAgICAgICAgICAgICBwdy5wcmludCgiLCBzZW50ICIpOyBwdy5wcmludCh3aWZpVHhUb3RhbFBhY2tldHMpOyBwdy5wcmludGxuKCIpIik7CiAgICAgICAgIHNiLnNldExlbmd0aCgwKTsKICAgICAgICAgc2IuYXBwZW5kKHByZWZpeCk7CiAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIgIFRvdGFsIGZ1bGwgd2FrZWxvY2sgdGltZTogIik7IGZvcm1hdFRpbWVNcyhzYiwKQEAgLTE4MDksNiArMTgyNyw2NiBAQAogICAgICAgICAgICAgcHcucHJpbnRsbigpOwogICAgICAgICB9CiAKKyAgICAgICAgQmF0dGVyeVN0YXRzSGVscGVyIGhlbHBlciA9IG5ldyBCYXR0ZXJ5U3RhdHNIZWxwZXIoY29udGV4dCk7CisgICAgICAgIGhlbHBlci5jcmVhdGUodGhpcyk7CisgICAgICAgIGhlbHBlci5yZWZyZXNoU3RhdHMod2hpY2gsIFVzZXJIYW5kbGUuVVNFUl9BTEwpOworICAgICAgICBMaXN0PEJhdHRlcnlTaXBwZXI+IHNpcHBlcnMgPSBoZWxwZXIuZ2V0VXNhZ2VMaXN0KCk7CisgICAgICAgIGlmIChzaXBwZXJzICE9IG51bGwgJiYgc2lwcGVycy5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludGxuKCIgIEVzdGltYXRlZCBwb3dlciB1c2UgKG1BaCk6Iik7CisgICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgiICAgIENhcGFjaXR5OiAiKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRtQWgocHcsIGhlbHBlci5nZXRQb3dlclByb2ZpbGUoKS5nZXRCYXR0ZXJ5Q2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIsIENvbXB1dGVkIGRyYWluOiAiKTsgcHJpbnRtQWgocHcsIGhlbHBlci5nZXRUb3RhbFBvd2VyKCkpOworICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiLCBNaW4gZHJhaW46ICIpOyBwcmludG1BaChwdywgaGVscGVyLmdldE1pbkRyYWluZWRQb3dlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiwgTWF4IGRyYWluOiAiKTsgcHJpbnRtQWgocHcsIGhlbHBlci5nZXRNYXhEcmFpbmVkUG93ZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIHB3LnByaW50bG4oKTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxzaXBwZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgQmF0dGVyeVNpcHBlciBicyA9IHNpcHBlcnMuZ2V0KGkpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYnMuZHJhaW5UeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSURMRToKKyAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCIgICAgSWRsZTogIik7IHByaW50bUFoKHB3LCBicy52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDRUxMOgorICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoIiAgICBDZWxsIHN0YW5kYnk6ICIpOyBwcmludG1BaChwdywgYnMudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUEhPTkU6CisgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgiICAgIFBob25lIGNhbGxzOiAiKTsgcHJpbnRtQWgocHcsIGJzLnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50bG4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFdJRkk6CisgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgiICAgIFdpZmk6ICIpOyBwcmludG1BaChwdywgYnMudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQkxVRVRPT1RIOgorICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoIiAgICBCbHVldG9vdGg6ICIpOyBwcmludG1BaChwdywgYnMudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU0NSRUVOOgorICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoIiAgICBTY3JlZW46ICIpOyBwcmludG1BaChwdywgYnMudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQVBQOgorICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoIiAgICBVaWQgIik7IHB3LnByaW50KGJzLnVpZE9iai5nZXRVaWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiOiAiKTsgcHJpbnRtQWgocHcsIGJzLnZhbHVlKTsgcHcucHJpbnRsbigpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVVNFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCIgICAgVXNlciAiKTsgcHcucHJpbnQoYnMudXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCI6ICIpOyBwcmludG1BaChwdywgYnMudmFsdWUpOyBwdy5wcmludGxuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVTkFDQ09VTlRFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCIgICAgVW5hY2NvdW50ZWQ6ICIpOyBwcmludG1BaChwdywgYnMudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgT1ZFUkNPVU5URUQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgiICAgIE92ZXItY291bnRlZDogIik7IHByaW50bUFoKHB3LCBicy52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdy5wcmludGxuKCk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAodGltZXJzLnNpemUoKSA+IDApIHsKICAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQodGltZXJzLCB0aW1lckNvbXBhcmF0b3IpOwogICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnRsbigiICBBbGwgcGFydGlhbCB3YWtlIGxvY2tzOiIpOwpAQCAtMTg0MSwyMyArMTkxOSwzMiBAQAogICAgICAgICAgICAgcHcucHJpbnRsbigiOiIpOwogICAgICAgICAgICAgYm9vbGVhbiB1aWRBY3Rpdml0eSA9IGZhbHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBsb25nIG1vYmlsZVJ4Qnl0ZXMgPSB1LmdldE5ldHdvcmtBY3Rpdml0eUNvdW50KE5FVFdPUktfTU9CSUxFX1JYX0JZVEVTLCB3aGljaCk7Ci0gICAgICAgICAgICBsb25nIG1vYmlsZVR4Qnl0ZXMgPSB1LmdldE5ldHdvcmtBY3Rpdml0eUNvdW50KE5FVFdPUktfTU9CSUxFX1RYX0JZVEVTLCB3aGljaCk7Ci0gICAgICAgICAgICBsb25nIHdpZmlSeEJ5dGVzID0gdS5nZXROZXR3b3JrQWN0aXZpdHlDb3VudChORVRXT1JLX1dJRklfUlhfQllURVMsIHdoaWNoKTsKLSAgICAgICAgICAgIGxvbmcgd2lmaVR4Qnl0ZXMgPSB1LmdldE5ldHdvcmtBY3Rpdml0eUNvdW50KE5FVFdPUktfV0lGSV9UWF9CWVRFUywgd2hpY2gpOworICAgICAgICAgICAgbG9uZyBtb2JpbGVSeEJ5dGVzID0gdS5nZXROZXR3b3JrQWN0aXZpdHlCeXRlcyhORVRXT1JLX01PQklMRV9SWF9EQVRBLCB3aGljaCk7CisgICAgICAgICAgICBsb25nIG1vYmlsZVR4Qnl0ZXMgPSB1LmdldE5ldHdvcmtBY3Rpdml0eUJ5dGVzKE5FVFdPUktfTU9CSUxFX1RYX0RBVEEsIHdoaWNoKTsKKyAgICAgICAgICAgIGxvbmcgd2lmaVJ4Qnl0ZXMgPSB1LmdldE5ldHdvcmtBY3Rpdml0eUJ5dGVzKE5FVFdPUktfV0lGSV9SWF9EQVRBLCB3aGljaCk7CisgICAgICAgICAgICBsb25nIHdpZmlUeEJ5dGVzID0gdS5nZXROZXR3b3JrQWN0aXZpdHlCeXRlcyhORVRXT1JLX1dJRklfVFhfREFUQSwgd2hpY2gpOworICAgICAgICAgICAgbG9uZyBtb2JpbGVSeFBhY2tldHMgPSB1LmdldE5ldHdvcmtBY3Rpdml0eVBhY2tldHMoTkVUV09SS19NT0JJTEVfUlhfREFUQSwgd2hpY2gpOworICAgICAgICAgICAgbG9uZyBtb2JpbGVUeFBhY2tldHMgPSB1LmdldE5ldHdvcmtBY3Rpdml0eVBhY2tldHMoTkVUV09SS19NT0JJTEVfVFhfREFUQSwgd2hpY2gpOworICAgICAgICAgICAgbG9uZyB3aWZpUnhQYWNrZXRzID0gdS5nZXROZXR3b3JrQWN0aXZpdHlQYWNrZXRzKE5FVFdPUktfV0lGSV9SWF9EQVRBLCB3aGljaCk7CisgICAgICAgICAgICBsb25nIHdpZmlUeFBhY2tldHMgPSB1LmdldE5ldHdvcmtBY3Rpdml0eVBhY2tldHMoTkVUV09SS19XSUZJX1RYX0RBVEEsIHdoaWNoKTsKICAgICAgICAgICAgIGxvbmcgZnVsbFdpZmlMb2NrT25UaW1lID0gdS5nZXRGdWxsV2lmaUxvY2tUaW1lKGJhdHRlcnlSZWFsdGltZSwgd2hpY2gpOwogICAgICAgICAgICAgbG9uZyB3aWZpU2NhblRpbWUgPSB1LmdldFdpZmlTY2FuVGltZShiYXR0ZXJ5UmVhbHRpbWUsIHdoaWNoKTsKICAgICAgICAgICAgIGxvbmcgdWlkV2lmaVJ1bm5pbmdUaW1lID0gdS5nZXRXaWZpUnVubmluZ1RpbWUoYmF0dGVyeVJlYWx0aW1lLCB3aGljaCk7CiAKLSAgICAgICAgICAgIGlmIChtb2JpbGVSeEJ5dGVzID4gMCB8fCBtb2JpbGVUeEJ5dGVzID4gMCkgeworICAgICAgICAgICAgaWYgKG1vYmlsZVJ4Qnl0ZXMgPiAwIHx8IG1vYmlsZVR4Qnl0ZXMgPiAwCisgICAgICAgICAgICAgICAgICAgIHx8IG1vYmlsZVJ4UGFja2V0cyA+IDAgfHwgbW9iaWxlVHhQYWNrZXRzID4gMCkgewogICAgICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCIgICAgTW9iaWxlIG5ldHdvcms6ICIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoZm9ybWF0Qnl0ZXNMb2NrZWQobW9iaWxlUnhCeXRlcykpOyBwdy5wcmludCgiIHJlY2VpdmVkLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGZvcm1hdEJ5dGVzTG9ja2VkKG1vYmlsZVR4Qnl0ZXMpKTsgcHcucHJpbnRsbigiIHNlbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGZvcm1hdEJ5dGVzTG9ja2VkKG1vYmlsZVR4Qnl0ZXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIgc2VudCAocGFja2V0cyAiKTsgcHcucHJpbnQobW9iaWxlUnhQYWNrZXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIgcmVjZWl2ZWQsICIpOyBwdy5wcmludChtb2JpbGVUeFBhY2tldHMpOyBwdy5wcmludGxuKCIgc2VudCkiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aWZpUnhCeXRlcyA+IDAgfHwgd2lmaVR4Qnl0ZXMgPiAwKSB7CisgICAgICAgICAgICBpZiAod2lmaVJ4Qnl0ZXMgPiAwIHx8IHdpZmlUeEJ5dGVzID4gMCB8fCB3aWZpUnhQYWNrZXRzID4gMCB8fCB3aWZpVHhQYWNrZXRzID4gMCkgewogICAgICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCIgICAgV2ktRmkgbmV0d29yazogIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChmb3JtYXRCeXRlc0xvY2tlZCh3aWZpUnhCeXRlcykpOyBwdy5wcmludCgiIHJlY2VpdmVkLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGZvcm1hdEJ5dGVzTG9ja2VkKHdpZmlUeEJ5dGVzKSk7IHB3LnByaW50bG4oIiBzZW50Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChmb3JtYXRCeXRlc0xvY2tlZCh3aWZpVHhCeXRlcykpOworICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBzZW50IChwYWNrZXRzICIpOyBwdy5wcmludCh3aWZpUnhQYWNrZXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIgcmVjZWl2ZWQsICIpOyBwdy5wcmludCh3aWZpVHhQYWNrZXRzKTsgcHcucHJpbnRsbigiIHNlbnQpIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh1Lmhhc1VzZXJBY3Rpdml0eSgpKSB7CkBAIC0yMTUxLDIyICsyMjM4LDIzIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBwcmludEJpdERlc2NyaXB0aW9ucyhQcmludFdyaXRlciBwdywgaW50IG9sZHZhbCwgaW50IG5ld3ZhbCwgQml0RGVzY3JpcHRpb25bXSBkZXNjcmlwdGlvbnMpIHsKKyAgICBzdGF0aWMgdm9pZCBwcmludEJpdERlc2NyaXB0aW9ucyhQcmludFdyaXRlciBwdywgaW50IG9sZHZhbCwgaW50IG5ld3ZhbCwKKyAgICAgICAgICAgIEJpdERlc2NyaXB0aW9uW10gZGVzY3JpcHRpb25zLCBib29sZWFuIGxvbmdOYW1lcykgewogICAgICAgICBpbnQgZGlmZiA9IG9sZHZhbCBeIG5ld3ZhbDsKICAgICAgICAgaWYgKGRpZmYgPT0gMCkgcmV0dXJuOwogICAgICAgICBmb3IgKGludCBpPTA7IGk8ZGVzY3JpcHRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBCaXREZXNjcmlwdGlvbiBiZCA9IGRlc2NyaXB0aW9uc1tpXTsKICAgICAgICAgICAgIGlmICgoZGlmZiZiZC5tYXNrKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcHcucHJpbnQobG9uZ05hbWVzID8gIiAiIDogIiwiKTsKICAgICAgICAgICAgICAgICBpZiAoYmQuc2hpZnQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB3LnByaW50KChuZXd2YWwmYmQubWFzaykgIT0gMCA/ICIgKyIgOiAiIC0iKTsKLSAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoYmQubmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KChuZXd2YWwmYmQubWFzaykgIT0gMCA/ICIrIiA6ICItIik7CisgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGxvbmdOYW1lcyA/IGJkLm5hbWUgOiBiZC5zaG9ydE5hbWUpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIgIik7Ci0gICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGJkLm5hbWUpOworICAgICAgICAgICAgICAgICAgICBwdy5wcmludChsb25nTmFtZXMgPyBiZC5uYW1lIDogYmQuc2hvcnROYW1lKTsKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIj0iKTsKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCA9IChuZXd2YWwmYmQubWFzayk+PmJkLnNoaWZ0OwogICAgICAgICAgICAgICAgICAgICBpZiAoYmQudmFsdWVzICE9IG51bGwgJiYgdmFsID49IDAgJiYgdmFsIDwgYmQudmFsdWVzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoYmQudmFsdWVzW3ZhbF0pOworICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQobG9uZ05hbWVzPyBiZC52YWx1ZXNbdmFsXSA6IGJkLnNob3J0VmFsdWVzW3ZhbF0pOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQodmFsKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjE4MCw1MSArMjI2OCw3NiBAQAogCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBIaXN0b3J5UHJpbnRlciB7CiAgICAgICAgIGludCBvbGRTdGF0ZSA9IDA7CisgICAgICAgIGludCBvbGRMZXZlbCA9IC0xOwogICAgICAgICBpbnQgb2xkU3RhdHVzID0gLTE7CiAgICAgICAgIGludCBvbGRIZWFsdGggPSAtMTsKICAgICAgICAgaW50IG9sZFBsdWcgPSAtMTsKICAgICAgICAgaW50IG9sZFRlbXAgPSAtMTsKICAgICAgICAgaW50IG9sZFZvbHQgPSAtMTsKKyAgICAgICAgbG9uZyBsYXN0VGltZSA9IC0xOwogCi0gICAgICAgIHB1YmxpYyB2b2lkIHByaW50TmV4dEl0ZW0oUHJpbnRXcml0ZXIgcHcsIEhpc3RvcnlJdGVtIHJlYywgbG9uZyBub3cpIHsKLSAgICAgICAgICAgIHB3LnByaW50KCIgICIpOwotICAgICAgICAgICAgVGltZVV0aWxzLmZvcm1hdER1cmF0aW9uKHJlYy50aW1lLW5vdywgcHcsIFRpbWVVdGlscy5IVU5EUkVEX0RBWV9GSUVMRF9MRU4pOwotICAgICAgICAgICAgcHcucHJpbnQoIiAiKTsKLSAgICAgICAgICAgIGlmIChyZWMuY21kID09IEhpc3RvcnlJdGVtLkNNRF9TVEFSVCkgewotICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIiBTVEFSVCIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChyZWMuY21kID09IEhpc3RvcnlJdGVtLkNNRF9PVkVSRkxPVykgewotICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIiAqT1ZFUkZMT1cqIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChyZWMuYmF0dGVyeUxldmVsIDwgMTApIHB3LnByaW50KCIwMCIpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYy5iYXR0ZXJ5TGV2ZWwgPCAxMDApIHB3LnByaW50KCIwIik7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnQocmVjLmJhdHRlcnlMZXZlbCk7CisgICAgICAgIHB1YmxpYyB2b2lkIHByaW50TmV4dEl0ZW0oUHJpbnRXcml0ZXIgcHcsIEhpc3RvcnlJdGVtIHJlYywgbG9uZyBub3csIGJvb2xlYW4gY2hlY2tpbikgeworICAgICAgICAgICAgaWYgKCFjaGVja2luKSB7CisgICAgICAgICAgICAgICAgcHcucHJpbnQoIiAgIik7CisgICAgICAgICAgICAgICAgVGltZVV0aWxzLmZvcm1hdER1cmF0aW9uKHJlYy50aW1lLW5vdywgcHcsIFRpbWVVdGlscy5IVU5EUkVEX0RBWV9GSUVMRF9MRU4pOwogICAgICAgICAgICAgICAgIHB3LnByaW50KCIgIik7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYy5zdGF0ZXMgPCAweDEwKSBwdy5wcmludCgiMDAwMDAwMCIpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYy5zdGF0ZXMgPCAweDEwMCkgcHcucHJpbnQoIjAwMDAwMCIpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYy5zdGF0ZXMgPCAweDEwMDApIHB3LnByaW50KCIwMDAwMCIpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYy5zdGF0ZXMgPCAweDEwMDAwKSBwdy5wcmludCgiMDAwMCIpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYy5zdGF0ZXMgPCAweDEwMDAwMCkgcHcucHJpbnQoIjAwMCIpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYy5zdGF0ZXMgPCAweDEwMDAwMDApIHB3LnByaW50KCIwMCIpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYy5zdGF0ZXMgPCAweDEwMDAwMDAwKSBwdy5wcmludCgiMCIpOwotICAgICAgICAgICAgICAgIHB3LnByaW50KEludGVnZXIudG9IZXhTdHJpbmcocmVjLnN0YXRlcykpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdFRpbWUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCJAIik7CisgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KHJlYy50aW1lLW5vdyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQocmVjLnRpbWUtbGFzdFRpbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsYXN0VGltZSA9IHJlYy50aW1lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlYy5jbWQgPT0gSGlzdG9yeUl0ZW0uQ01EX1NUQVJUKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoZWNraW4pIHsKKyAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIjoiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiU1RBUlQiKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjLmNtZCA9PSBIaXN0b3J5SXRlbS5DTURfT1ZFUkZMT1cpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tpbikgeworICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiOiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIqT1ZFUkZMT1cqIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghY2hlY2tpbikgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVjLmJhdHRlcnlMZXZlbCA8IDEwKSBwdy5wcmludCgiMDAiKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVjLmJhdHRlcnlMZXZlbCA8IDEwMCkgcHcucHJpbnQoIjAiKTsKKyAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQocmVjLmJhdHRlcnlMZXZlbCk7CisgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIgIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWMuc3RhdGVzIDwgMHgxMCkgcHcucHJpbnQoIjAwMDAwMDAiKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVjLnN0YXRlcyA8IDB4MTAwKSBwdy5wcmludCgiMDAwMDAwIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYy5zdGF0ZXMgPCAweDEwMDApIHB3LnByaW50KCIwMDAwMCIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWMuc3RhdGVzIDwgMHgxMDAwMCkgcHcucHJpbnQoIjAwMDAiKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVjLnN0YXRlcyA8IDB4MTAwMDAwKSBwdy5wcmludCgiMDAwIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYy5zdGF0ZXMgPCAweDEwMDAwMDApIHB3LnByaW50KCIwMCIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWMuc3RhdGVzIDwgMHgxMDAwMDAwMCkgcHcucHJpbnQoIjAiKTsKKyAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoSW50ZWdlci50b0hleFN0cmluZyhyZWMuc3RhdGVzKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9sZExldmVsICE9IHJlYy5iYXR0ZXJ5TGV2ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZExldmVsID0gcmVjLmJhdHRlcnlMZXZlbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIsQmw9Iik7IHB3LnByaW50KHJlYy5iYXR0ZXJ5TGV2ZWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChvbGRTdGF0dXMgIT0gcmVjLmJhdHRlcnlTdGF0dXMpIHsKICAgICAgICAgICAgICAgICAgICAgb2xkU3RhdHVzID0gcmVjLmJhdHRlcnlTdGF0dXM7Ci0gICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIgc3RhdHVzPSIpOworICAgICAgICAgICAgICAgICAgICBwdy5wcmludChjaGVja2luID8gIixCcz0iIDogIiBzdGF0dXM9Iik7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2xkU3RhdHVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJhdHRlcnlNYW5hZ2VyLkJBVFRFUllfU1RBVFVTX1VOS05PV046Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoInVua25vd24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChjaGVja2luID8gIj8iIDogInVua25vd24iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQmF0dGVyeU1hbmFnZXIuQkFUVEVSWV9TVEFUVVNfQ0hBUkdJTkc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoImNoYXJnaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoY2hlY2tpbiA/ICJjIiA6ICJjaGFyZ2luZyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCYXR0ZXJ5TWFuYWdlci5CQVRURVJZX1NUQVRVU19ESVNDSEFSR0lORzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiZGlzY2hhcmdpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChjaGVja2luID8gImQiIDogImRpc2NoYXJnaW5nIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJhdHRlcnlNYW5hZ2VyLkJBVFRFUllfU1RBVFVTX05PVF9DSEFSR0lORzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgibm90LWNoYXJnaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoY2hlY2tpbiA/ICJuIiA6ICJub3QtY2hhcmdpbmciKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQmF0dGVyeU1hbmFnZXIuQkFUVEVSWV9TVEFUVVNfRlVMTDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiZnVsbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGNoZWNraW4gPyAiZiIgOiAiZnVsbCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChvbGRTdGF0dXMpOwpAQCAtMjIzMywyNSArMjM0NiwyNSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAob2xkSGVhbHRoICE9IHJlYy5iYXR0ZXJ5SGVhbHRoKSB7CiAgICAgICAgICAgICAgICAgICAgIG9sZEhlYWx0aCA9IHJlYy5iYXR0ZXJ5SGVhbHRoOwotICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiIGhlYWx0aD0iKTsKKyAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoY2hlY2tpbiA/ICIsQmg9IiA6ICIgaGVhbHRoPSIpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9sZEhlYWx0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCYXR0ZXJ5TWFuYWdlci5CQVRURVJZX0hFQUxUSF9VTktOT1dOOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCJ1bmtub3duIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoY2hlY2tpbiA/ICI/IiA6ICJ1bmtub3duIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJhdHRlcnlNYW5hZ2VyLkJBVFRFUllfSEVBTFRIX0dPT0Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoImdvb2QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChjaGVja2luID8gImciIDogImdvb2QiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQmF0dGVyeU1hbmFnZXIuQkFUVEVSWV9IRUFMVEhfT1ZFUkhFQVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIm92ZXJoZWF0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoY2hlY2tpbiA/ICJoIiA6ICJvdmVyaGVhdCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCYXR0ZXJ5TWFuYWdlci5CQVRURVJZX0hFQUxUSF9ERUFEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCJkZWFkIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoY2hlY2tpbiA/ICJkIiA6ICJkZWFkIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJhdHRlcnlNYW5hZ2VyLkJBVFRFUllfSEVBTFRIX09WRVJfVk9MVEFHRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgib3Zlci12b2x0YWdlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoY2hlY2tpbiA/ICJ2IiA6ICJvdmVyLXZvbHRhZ2UiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQmF0dGVyeU1hbmFnZXIuQkFUVEVSWV9IRUFMVEhfVU5TUEVDSUZJRURfRkFJTFVSRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiZmFpbHVyZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGNoZWNraW4gPyAiZiIgOiAiZmFpbHVyZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChvbGRIZWFsdGgpOwpAQCAtMjI2MCwxOSArMjM3MywxOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAob2xkUGx1ZyAhPSByZWMuYmF0dGVyeVBsdWdUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIG9sZFBsdWcgPSByZWMuYmF0dGVyeVBsdWdUeXBlOwotICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiIHBsdWc9Iik7CisgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGNoZWNraW4gPyAiLEJwPSIgOiAiIHBsdWc9Iik7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2xkUGx1ZykgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCJub25lIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoY2hlY2tpbiA/ICJuIiA6ICJub25lIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJhdHRlcnlNYW5hZ2VyLkJBVFRFUllfUExVR0dFRF9BQzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiYWMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChjaGVja2luID8gImEiIDogImFjIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJhdHRlcnlNYW5hZ2VyLkJBVFRFUllfUExVR0dFRF9VU0I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoInVzYiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGNoZWNraW4gPyAidSIgOiAidXNiIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEJhdHRlcnlNYW5hZ2VyLkJBVFRFUllfUExVR0dFRF9XSVJFTEVTUzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgid2lyZWxlc3MiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludChjaGVja2luID8gInciIDogIndpcmVsZXNzIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KG9sZFBsdWcpOwpAQCAtMjI4MSw0NCArMjM5NCwyMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAob2xkVGVtcCAhPSByZWMuYmF0dGVyeVRlbXBlcmF0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgIG9sZFRlbXAgPSByZWMuYmF0dGVyeVRlbXBlcmF0dXJlOwotICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiIHRlbXA9Iik7CisgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGNoZWNraW4gPyAiLEJ0PSIgOiAiIHRlbXA9Iik7CiAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KG9sZFRlbXApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAob2xkVm9sdCAhPSByZWMuYmF0dGVyeVZvbHRhZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgb2xkVm9sdCA9IHJlYy5iYXR0ZXJ5Vm9sdGFnZTsKLSAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiB2b2x0PSIpOworICAgICAgICAgICAgICAgICAgICBwdy5wcmludChjaGVja2luID8gIixCdj0iIDogIiB2b2x0PSIpOwogICAgICAgICAgICAgICAgICAgICBwdy5wcmludChvbGRWb2x0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHJpbnRCaXREZXNjcmlwdGlvbnMocHcsIG9sZFN0YXRlLCByZWMuc3RhdGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgSElTVE9SWV9TVEFURV9ERVNDUklQVElPTlMpOworICAgICAgICAgICAgICAgICAgICAgICAgSElTVE9SWV9TVEFURV9ERVNDUklQVElPTlMsICFjaGVja2luKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvbGRTdGF0ZSA9IHJlYy5zdGF0ZXM7CiAgICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBwcmludE5leHRJdGVtQ2hlY2tpbihQcmludFdyaXRlciBwdywgSGlzdG9yeUl0ZW0gcmVjLCBsb25nIG5vdykgewotICAgICAgICAgICAgcHcucHJpbnQocmVjLnRpbWUtbm93KTsKLSAgICAgICAgICAgIHB3LnByaW50KCIsIik7Ci0gICAgICAgICAgICBpZiAocmVjLmNtZCA9PSBIaXN0b3J5SXRlbS5DTURfU1RBUlQpIHsKLSAgICAgICAgICAgICAgICBwdy5wcmludCgic3RhcnQiKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjLmNtZCA9PSBIaXN0b3J5SXRlbS5DTURfT1ZFUkZMT1cpIHsKLSAgICAgICAgICAgICAgICBwdy5wcmludCgib3ZlcmZsb3ciKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnQocmVjLmJhdHRlcnlMZXZlbCk7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnQoIiwiKTsKLSAgICAgICAgICAgICAgICBwdy5wcmludChyZWMuc3RhdGVzKTsKLSAgICAgICAgICAgICAgICBwdy5wcmludCgiLCIpOwotICAgICAgICAgICAgICAgIHB3LnByaW50KHJlYy5iYXR0ZXJ5U3RhdHVzKTsKLSAgICAgICAgICAgICAgICBwdy5wcmludCgiLCIpOwotICAgICAgICAgICAgICAgIHB3LnByaW50KHJlYy5iYXR0ZXJ5SGVhbHRoKTsKLSAgICAgICAgICAgICAgICBwdy5wcmludCgiLCIpOwotICAgICAgICAgICAgICAgIHB3LnByaW50KHJlYy5iYXR0ZXJ5UGx1Z1R5cGUpOwotICAgICAgICAgICAgICAgIHB3LnByaW50KCIsIik7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnQoKGludClyZWMuYmF0dGVyeVRlbXBlcmF0dXJlKTsKLSAgICAgICAgICAgICAgICBwdy5wcmludCgiLCIpOwotICAgICAgICAgICAgICAgIHB3LnByaW50KChpbnQpcmVjLmJhdHRlcnlWb2x0YWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtMjMyNyw3ICsyNDE2LDcgQEAKICAgICAgKiBAcGFyYW0gcHcgYSBQcmludGVyIHRvIHJlY2VpdmUgdGhlIGR1bXAgb3V0cHV0LgogICAgICAqLwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQotICAgIHB1YmxpYyB2b2lkIGR1bXBMb2NrZWQoUHJpbnRXcml0ZXIgcHcsIGJvb2xlYW4gaXNVbnBsdWdnZWRPbmx5LCBpbnQgcmVxVWlkKSB7CisgICAgcHVibGljIHZvaWQgZHVtcExvY2tlZChDb250ZXh0IGNvbnRleHQsIFByaW50V3JpdGVyIHB3LCBib29sZWFuIGlzVW5wbHVnZ2VkT25seSwgaW50IHJlcVVpZCkgewogICAgICAgICBwcmVwYXJlRm9yRHVtcExvY2tlZCgpOwogCiAgICAgICAgIGxvbmcgbm93ID0gZ2V0SGlzdG9yeUJhc2VUaW1lKCkgKyBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKQEAgLTIzMzcsNyArMjQyNiw3IEBACiAgICAgICAgICAgICBwdy5wcmludGxuKCJCYXR0ZXJ5IEhpc3Rvcnk6Iik7CiAgICAgICAgICAgICBIaXN0b3J5UHJpbnRlciBocHJpbnRlciA9IG5ldyBIaXN0b3J5UHJpbnRlcigpOwogICAgICAgICAgICAgd2hpbGUgKGdldE5leHRIaXN0b3J5TG9ja2VkKHJlYykpIHsKLSAgICAgICAgICAgICAgICBocHJpbnRlci5wcmludE5leHRJdGVtKHB3LCByZWMsIG5vdyk7CisgICAgICAgICAgICAgICAgaHByaW50ZXIucHJpbnROZXh0SXRlbShwdywgcmVjLCBub3csIGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpbmlzaEl0ZXJhdGluZ0hpc3RvcnlMb2NrZWQoKTsKICAgICAgICAgICAgIHB3LnByaW50bG4oIiIpOwpAQCAtMjM0Nyw3ICsyNDM2LDcgQEAKICAgICAgICAgICAgIHB3LnByaW50bG4oIk9sZCBiYXR0ZXJ5IEhpc3Rvcnk6Iik7CiAgICAgICAgICAgICBIaXN0b3J5UHJpbnRlciBocHJpbnRlciA9IG5ldyBIaXN0b3J5UHJpbnRlcigpOwogICAgICAgICAgICAgd2hpbGUgKGdldE5leHRPbGRIaXN0b3J5TG9ja2VkKHJlYykpIHsKLSAgICAgICAgICAgICAgICBocHJpbnRlci5wcmludE5leHRJdGVtKHB3LCByZWMsIG5vdyk7CisgICAgICAgICAgICAgICAgaHByaW50ZXIucHJpbnROZXh0SXRlbShwdywgcmVjLCBub3csIGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpbmlzaEl0ZXJhdGluZ09sZEhpc3RvcnlMb2NrZWQoKTsKICAgICAgICAgICAgIHB3LnByaW50bG4oIiIpOwpAQCAtMjM4NCwxNSArMjQ3MywxNSBAQAogICAgICAgICAgICAgcHcucHJpbnRsbigiU3RhdGlzdGljcyBzaW5jZSBsYXN0IGNoYXJnZToiKTsKICAgICAgICAgICAgIHB3LnByaW50bG4oIiAgU3lzdGVtIHN0YXJ0czogIiArIGdldFN0YXJ0Q291bnQoKQogICAgICAgICAgICAgICAgICAgICArICIsIGN1cnJlbnRseSBvbiBiYXR0ZXJ5OiAiICsgZ2V0SXNPbkJhdHRlcnkoKSk7Ci0gICAgICAgICAgICBkdW1wTG9ja2VkKHB3LCAiIiwgU1RBVFNfU0lOQ0VfQ0hBUkdFRCwgcmVxVWlkKTsKKyAgICAgICAgICAgIGR1bXBMb2NrZWQoY29udGV4dCwgcHcsICIiLCBTVEFUU19TSU5DRV9DSEFSR0VELCByZXFVaWQpOwogICAgICAgICAgICAgcHcucHJpbnRsbigiIik7CiAgICAgICAgIH0KICAgICAgICAgcHcucHJpbnRsbigiU3RhdGlzdGljcyBzaW5jZSBsYXN0IHVucGx1Z2dlZDoiKTsKLSAgICAgICAgZHVtcExvY2tlZChwdywgIiIsIFNUQVRTX1NJTkNFX1VOUExVR0dFRCwgcmVxVWlkKTsKKyAgICAgICAgZHVtcExvY2tlZChjb250ZXh0LCBwdywgIiIsIFNUQVRTX1NJTkNFX1VOUExVR0dFRCwgcmVxVWlkKTsKICAgICB9CiAgICAgCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCi0gICAgcHVibGljIHZvaWQgZHVtcENoZWNraW5Mb2NrZWQoCisgICAgcHVibGljIHZvaWQgZHVtcENoZWNraW5Mb2NrZWQoQ29udGV4dCBjb250ZXh0LAogICAgICAgICAgICAgUHJpbnRXcml0ZXIgcHcsIExpc3Q8QXBwbGljYXRpb25JbmZvPiBhcHBzLCBib29sZWFuIGlzVW5wbHVnZ2VkT25seSwKICAgICAgICAgICAgIGJvb2xlYW4gaW5jbHVkZUhpc3RvcnkpIHsKICAgICAgICAgcHJlcGFyZUZvckR1bXBMb2NrZWQoKTsKQEAgLTI0MDUsMTAgKzI0OTQsOCBAQAogICAgICAgICAgICAgICAgIEhpc3RvcnlQcmludGVyIGhwcmludGVyID0gbmV3IEhpc3RvcnlQcmludGVyKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKGdldE5leHRIaXN0b3J5TG9ja2VkKHJlYykpIHsKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoQkFUVEVSWV9TVEFUU19DSEVDS0lOX1ZFUlNJT04pOyBwdy5wcmludCgnLCcpOwotICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgwKTsgcHcucHJpbnQoJywnKTsKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoSElTVE9SWV9EQVRBKTsgcHcucHJpbnQoJywnKTsKLSAgICAgICAgICAgICAgICAgICAgaHByaW50ZXIucHJpbnROZXh0SXRlbUNoZWNraW4ocHcsIHJlYywgbm93KTsKLSAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigpOworICAgICAgICAgICAgICAgICAgICBocHJpbnRlci5wcmludE5leHRJdGVtKHB3LCByZWMsIG5vdywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGZpbmlzaEl0ZXJhdGluZ0hpc3RvcnlMb2NrZWQoKTsKICAgICAgICAgICAgIH0KQEAgLTI0NDIsMTEgKzI1MjksMTEgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoaXNVbnBsdWdnZWRPbmx5KSB7Ci0gICAgICAgICAgICBkdW1wQ2hlY2tpbkxvY2tlZChwdywgU1RBVFNfU0lOQ0VfVU5QTFVHR0VELCAtMSk7CisgICAgICAgICAgICBkdW1wQ2hlY2tpbkxvY2tlZChjb250ZXh0LCBwdywgU1RBVFNfU0lOQ0VfVU5QTFVHR0VELCAtMSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBkdW1wQ2hlY2tpbkxvY2tlZChwdywgU1RBVFNfU0lOQ0VfQ0hBUkdFRCwgLTEpOwotICAgICAgICAgICAgZHVtcENoZWNraW5Mb2NrZWQocHcsIFNUQVRTX1NJTkNFX1VOUExVR0dFRCwgLTEpOworICAgICAgICAgICAgZHVtcENoZWNraW5Mb2NrZWQoY29udGV4dCwgcHcsIFNUQVRTX1NJTkNFX0NIQVJHRUQsIC0xKTsKKyAgICAgICAgICAgIGR1bXBDaGVja2luTG9ja2VkKGNvbnRleHQsIHB3LCBTVEFUU19TSU5DRV9VTlBMVUdHRUQsIC0xKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0NvbW1vbkNsb2NrLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Db21tb25DbG9jay5qYXZhCmluZGV4IDNhMWRhOTcuLjJlY2YzMTcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0NvbW1vbkNsb2NrLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQ29tbW9uQ2xvY2suamF2YQpAQCAtMTUsMTcgKzE1LDggQEAKICAqLwogcGFja2FnZSBhbmRyb2lkLm9zOwogCi1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldDRBZGRyZXNzOwotaW1wb3J0IGphdmEubmV0LkluZXQ2QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5JbmV0U29ja2V0QWRkcmVzczsKIGltcG9ydCBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKLWltcG9ydCBzdGF0aWMgbGliY29yZS5pby5Pc0NvbnN0YW50cy4qOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Db21tb25UaW1lVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvQ29tbW9uVGltZUNvbmZpZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQ29tbW9uVGltZUNvbmZpZy5qYXZhCmluZGV4IDMzNTVlZTMuLjFmOWZhYjUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0NvbW1vblRpbWVDb25maWcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Db21tb25UaW1lQ29uZmlnLmphdmEKQEAgLTE1LDcgKzE1LDYgQEAKICAqLwogcGFja2FnZSBhbmRyb2lkLm9zOwogCi1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuSW5ldFNvY2tldEFkZHJlc3M7CiBpbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0NvdW50RG93blRpbWVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Db3VudERvd25UaW1lci5qYXZhCmluZGV4IDE1ZTY0MDUuLmM1YjExNDYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0NvdW50RG93blRpbWVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQ291bnREb3duVGltZXIuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQub3M7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIFNjaGVkdWxlIGEgY291bnRkb3duIHVudGlsIGEgdGltZSBpbiB0aGUgZnV0dXJlLCB3aXRoCiAgKiByZWd1bGFyIG5vdGlmaWNhdGlvbnMgb24gaW50ZXJ2YWxzIGFsb25nIHRoZSB3YXkuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9EZWJ1Zy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvRGVidWcuamF2YQppbmRleCAyZGUxMjA0Li4xODczMGI2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9EZWJ1Zy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0RlYnVnLmphdmEKQEAgLTI2LDcgKzI2LDYgQEAKIGltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLmlvLlJlYWRlcjsKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKQEAgLTQxLDcgKzQwLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLmhhcm1vbnkuZGFsdmlrLmRkbWMuRGRtU2VydmVyOwogCiBpbXBvcnQgZGFsdmlrLmJ5dGVjb2RlLk9wY29kZUluZm87Ci1pbXBvcnQgZGFsdmlrLmJ5dGVjb2RlLk9wY29kZXM7CiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5WTURlYnVnOwogCiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0Ryb3BCb3hNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Ecm9wQm94TWFuYWdlci5qYXZhCmluZGV4IGUxYzE2NzguLjI3MDAxZGMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0Ryb3BCb3hNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvRHJvcEJveE1hbmFnZXIuamF2YQpAQCAtMTYsMTQgKzE2LDExIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5vczsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5JRHJvcEJveE1hbmFnZXJTZXJ2aWNlOwogCiBpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkNsb3NlYWJsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEudXRpbC56aXAuR1pJUElucHV0U3RyZWFtOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvRW52aXJvbm1lbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0Vudmlyb25tZW50LmphdmEKaW5kZXggYjU0MTNkYi4uNTRlMmMwYiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvRW52aXJvbm1lbnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9FbnZpcm9ubWVudC5qYXZhCkBAIC0xNiwxNCArMTYsMTMgQEAKIAogcGFja2FnZSBhbmRyb2lkLm9zOwogCitpbXBvcnQgYW5kcm9pZC5hcHAuYWRtaW4uRGV2aWNlUG9saWN5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLm9zLnN0b3JhZ2UuSU1vdW50U2VydmljZTsKLWltcG9ydCBhbmRyb2lkLm9zLnN0b3JhZ2UuU3RvcmFnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5zdG9yYWdlLlN0b3JhZ2VWb2x1bWU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuR3VhcmRlZEJ5OwogaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5jb2xsZWN0Lkxpc3RzOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwpAQCAtNjYsMzMgKzY1LDYgQEAKICAgICBwcml2YXRlIHN0YXRpYyBVc2VyRW52aXJvbm1lbnQgc0N1cnJlbnRVc2VyOwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc1VzZXJSZXF1aXJlZDsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdCBzTG9jayA9IG5ldyBPYmplY3QoKTsKLQotICAgIEBHdWFyZGVkQnkoInNMb2NrIikKLSAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBTdG9yYWdlVm9sdW1lIHNQcmltYXJ5Vm9sdW1lOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RvcmFnZVZvbHVtZSBnZXRQcmltYXJ5Vm9sdW1lKCkgewotICAgICAgICBpZiAoU3lzdGVtUHJvcGVydGllcy5nZXRCb29sZWFuKCJjb25maWcuZGlzYWJsZV9zdG9yYWdlIiwgZmFsc2UpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzUHJpbWFyeVZvbHVtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHNMb2NrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNQcmltYXJ5Vm9sdW1lID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIElNb3VudFNlcnZpY2UgbW91bnRTZXJ2aWNlID0gSU1vdW50U2VydmljZS5TdHViLmFzSW50ZXJmYWNlKFNlcnZpY2VNYW5hZ2VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlKCJtb3VudCIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0b3JhZ2VWb2x1bWVbXSB2b2x1bWVzID0gbW91bnRTZXJ2aWNlLmdldFZvbHVtZUxpc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNQcmltYXJ5Vm9sdW1lID0gU3RvcmFnZU1hbmFnZXIuZ2V0UHJpbWFyeVZvbHVtZSh2b2x1bWVzKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgImNvdWxkbid0IHRhbGsgdG8gTW91bnRTZXJ2aWNlIiwgZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNQcmltYXJ5Vm9sdW1lOwotICAgIH0KLQogICAgIHN0YXRpYyB7CiAgICAgICAgIGluaXRGb3JDdXJyZW50VXNlcigpOwogICAgIH0KQEAgLTEwMSwxMCArNzMsNiBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbml0Rm9yQ3VycmVudFVzZXIoKSB7CiAgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBVc2VySGFuZGxlLm15VXNlcklkKCk7CiAgICAgICAgIHNDdXJyZW50VXNlciA9IG5ldyBVc2VyRW52aXJvbm1lbnQodXNlcklkKTsKLQotICAgICAgICBzeW5jaHJvbml6ZWQgKHNMb2NrKSB7Ci0gICAgICAgICAgICBzUHJpbWFyeVZvbHVtZSA9IG51bGw7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAvKioge0BoaWRlfSAqLwpAQCAtNjAzLDI4ICs1NzEsMjggQEAKICAgICAgKiBVbmtub3duIHN0b3JhZ2Ugc3RhdGUsIHN1Y2ggYXMgd2hlbiBhIHBhdGggaXNuJ3QgYmFja2VkIGJ5IGtub3duIHN0b3JhZ2UKICAgICAgKiBtZWRpYS4KICAgICAgKgotICAgICAqIEBzZWUgI2dldFN0b3JhZ2VTdGF0ZShGaWxlKQorICAgICAqIEBzZWUgI2dldEV4dGVybmFsU3RvcmFnZVN0YXRlKEZpbGUpCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVESUFfVU5LTk9XTiA9ICJ1bmtub3duIjsKIAogICAgIC8qKgogICAgICAqIFN0b3JhZ2Ugc3RhdGUgaWYgdGhlIG1lZGlhIGlzIG5vdCBwcmVzZW50LgogICAgICAqCi0gICAgICogQHNlZSAjZ2V0U3RvcmFnZVN0YXRlKEZpbGUpCisgICAgICogQHNlZSAjZ2V0RXh0ZXJuYWxTdG9yYWdlU3RhdGUoRmlsZSkKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRURJQV9SRU1PVkVEID0gInJlbW92ZWQiOwogCiAgICAgLyoqCiAgICAgICogU3RvcmFnZSBzdGF0ZSBpZiB0aGUgbWVkaWEgaXMgcHJlc2VudCBidXQgbm90IG1vdW50ZWQuCiAgICAgICoKLSAgICAgKiBAc2VlICNnZXRTdG9yYWdlU3RhdGUoRmlsZSkKKyAgICAgKiBAc2VlICNnZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZShGaWxlKQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FRElBX1VOTU9VTlRFRCA9ICJ1bm1vdW50ZWQiOwogCiAgICAgLyoqCiAgICAgICogU3RvcmFnZSBzdGF0ZSBpZiB0aGUgbWVkaWEgaXMgcHJlc2VudCBhbmQgYmVpbmcgZGlzay1jaGVja2VkLgogICAgICAqCi0gICAgICogQHNlZSAjZ2V0U3RvcmFnZVN0YXRlKEZpbGUpCisgICAgICogQHNlZSAjZ2V0RXh0ZXJuYWxTdG9yYWdlU3RhdGUoRmlsZSkKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRURJQV9DSEVDS0lORyA9ICJjaGVja2luZyI7CiAKQEAgLTYzMiw3ICs2MDAsNyBAQAogICAgICAqIFN0b3JhZ2Ugc3RhdGUgaWYgdGhlIG1lZGlhIGlzIHByZXNlbnQgYnV0IGlzIGJsYW5rIG9yIGlzIHVzaW5nIGFuCiAgICAgICogdW5zdXBwb3J0ZWQgZmlsZXN5c3RlbS4KICAgICAgKgotICAgICAqIEBzZWUgI2dldFN0b3JhZ2VTdGF0ZShGaWxlKQorICAgICAqIEBzZWUgI2dldEV4dGVybmFsU3RvcmFnZVN0YXRlKEZpbGUpCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVESUFfTk9GUyA9ICJub2ZzIjsKIApAQCAtNjQwLDcgKzYwOCw3IEBACiAgICAgICogU3RvcmFnZSBzdGF0ZSBpZiB0aGUgbWVkaWEgaXMgcHJlc2VudCBhbmQgbW91bnRlZCBhdCBpdHMgbW91bnQgcG9pbnQgd2l0aAogICAgICAqIHJlYWQvd3JpdGUgYWNjZXNzLgogICAgICAqCi0gICAgICogQHNlZSAjZ2V0U3RvcmFnZVN0YXRlKEZpbGUpCisgICAgICogQHNlZSAjZ2V0RXh0ZXJuYWxTdG9yYWdlU3RhdGUoRmlsZSkKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRURJQV9NT1VOVEVEID0gIm1vdW50ZWQiOwogCkBAIC02NDgsNyArNjE2LDcgQEAKICAgICAgKiBTdG9yYWdlIHN0YXRlIGlmIHRoZSBtZWRpYSBpcyBwcmVzZW50IGFuZCBtb3VudGVkIGF0IGl0cyBtb3VudCBwb2ludCB3aXRoCiAgICAgICogcmVhZC1vbmx5IGFjY2Vzcy4KICAgICAgKgotICAgICAqIEBzZWUgI2dldFN0b3JhZ2VTdGF0ZShGaWxlKQorICAgICAqIEBzZWUgI2dldEV4dGVybmFsU3RvcmFnZVN0YXRlKEZpbGUpCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVESUFfTU9VTlRFRF9SRUFEX09OTFkgPSAibW91bnRlZF9ybyI7CiAKQEAgLTY1NiwxNCArNjI0LDE0IEBACiAgICAgICogU3RvcmFnZSBzdGF0ZSBpZiB0aGUgbWVkaWEgaXMgcHJlc2VudCBub3QgbW91bnRlZCwgYW5kIHNoYXJlZCB2aWEgVVNCCiAgICAgICogbWFzcyBzdG9yYWdlLgogICAgICAqCi0gICAgICogQHNlZSAjZ2V0U3RvcmFnZVN0YXRlKEZpbGUpCisgICAgICogQHNlZSAjZ2V0RXh0ZXJuYWxTdG9yYWdlU3RhdGUoRmlsZSkKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRURJQV9TSEFSRUQgPSAic2hhcmVkIjsKIAogICAgIC8qKgogICAgICAqIFN0b3JhZ2Ugc3RhdGUgaWYgdGhlIG1lZGlhIHdhcyByZW1vdmVkIGJlZm9yZSBpdCB3YXMgdW5tb3VudGVkLgogICAgICAqCi0gICAgICogQHNlZSAjZ2V0U3RvcmFnZVN0YXRlKEZpbGUpCisgICAgICogQHNlZSAjZ2V0RXh0ZXJuYWxTdG9yYWdlU3RhdGUoRmlsZSkKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRURJQV9CQURfUkVNT1ZBTCA9ICJiYWRfcmVtb3ZhbCI7CiAKQEAgLTY3MSw3ICs2MzksNyBAQAogICAgICAqIFN0b3JhZ2Ugc3RhdGUgaWYgdGhlIG1lZGlhIGlzIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBtb3VudGVkLiBUeXBpY2FsbHkKICAgICAgKiB0aGlzIGhhcHBlbnMgaWYgdGhlIGZpbGUgc3lzdGVtIG9uIHRoZSBtZWRpYSBpcyBjb3JydXB0ZWQuCiAgICAgICoKLSAgICAgKiBAc2VlICNnZXRTdG9yYWdlU3RhdGUoRmlsZSkKKyAgICAgKiBAc2VlICNnZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZShGaWxlKQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FRElBX1VOTU9VTlRBQkxFID0gInVubW91bnRhYmxlIjsKIApAQCAtNjg3LDcgKzY1NSwxNSBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEV4dGVybmFsU3RvcmFnZVN0YXRlKCkgewogICAgICAgICBmaW5hbCBGaWxlIGV4dGVybmFsRGlyID0gc0N1cnJlbnRVc2VyLmdldEV4dGVybmFsRGlyc0ZvckFwcCgpWzBdOwotICAgICAgICByZXR1cm4gZ2V0U3RvcmFnZVN0YXRlKGV4dGVybmFsRGlyKTsKKyAgICAgICAgcmV0dXJuIGdldEV4dGVybmFsU3RvcmFnZVN0YXRlKGV4dGVybmFsRGlyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rICNnZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZShGaWxlKX0KKyAgICAgKi8KKyAgICBARGVwcmVjYXRlZAorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0b3JhZ2VTdGF0ZShGaWxlIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIGdldEV4dGVybmFsU3RvcmFnZVN0YXRlKHBhdGgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNzAwLDU5ICs2NzYsODEgQEAKICAgICAgKiAgICAgICAgIHtAbGluayAjTUVESUFfTU9VTlRFRF9SRUFEX09OTFl9LCB7QGxpbmsgI01FRElBX1NIQVJFRH0sCiAgICAgICogICAgICAgICB7QGxpbmsgI01FRElBX0JBRF9SRU1PVkFMfSwgb3Ige0BsaW5rICNNRURJQV9VTk1PVU5UQUJMRX0uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RvcmFnZVN0YXRlKEZpbGUgcGF0aCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmF3UGF0aDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJhd1BhdGggPSBwYXRoLmdldENhbm9uaWNhbFBhdGgoKTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHJlc29sdmUgdGFyZ2V0IHBhdGg6ICIgKyBlKTsKLSAgICAgICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5NRURJQV9VTktOT1dOOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZShGaWxlIHBhdGgpIHsKKyAgICAgICAgZmluYWwgU3RvcmFnZVZvbHVtZSB2b2x1bWUgPSBnZXRTdG9yYWdlVm9sdW1lKHBhdGgpOworICAgICAgICBpZiAodm9sdW1lICE9IG51bGwpIHsKICAgICAgICAgICAgIGZpbmFsIElNb3VudFNlcnZpY2UgbW91bnRTZXJ2aWNlID0gSU1vdW50U2VydmljZS5TdHViLmFzSW50ZXJmYWNlKAogICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKCJtb3VudCIpKTsKLSAgICAgICAgICAgIGZpbmFsIFN0b3JhZ2VWb2x1bWVbXSB2b2x1bWVzID0gbW91bnRTZXJ2aWNlLmdldFZvbHVtZUxpc3QoKTsKLSAgICAgICAgICAgIGZvciAoU3RvcmFnZVZvbHVtZSB2b2x1bWUgOiB2b2x1bWVzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJhd1BhdGguc3RhcnRzV2l0aCh2b2x1bWUuZ2V0UGF0aCgpKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW91bnRTZXJ2aWNlLmdldFZvbHVtZVN0YXRlKHZvbHVtZS5nZXRQYXRoKCkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vdW50U2VydmljZS5nZXRWb2x1bWVTdGF0ZSh2b2x1bWUuZ2V0UGF0aCgpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gZmluZCBleHRlcm5hbCBzdG9yYWdlIHN0YXRlOiAiICsgZSk7CiAgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuTUVESUFfVU5LTk9XTjsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByaW1hcnkgImV4dGVybmFsIiBzdG9yYWdlIGRldmljZSBpcyByZW1vdmFibGUuCi0gICAgICogSWYgdHJ1ZSBpcyByZXR1cm5lZCwgdGhpcyBkZXZpY2UgaXMgZm9yIGV4YW1wbGUgYW4gU0QgY2FyZCB0aGF0IHRoZQotICAgICAqIHVzZXIgY2FuIHJlbW92ZS4gIElmIGZhbHNlIGlzIHJldHVybmVkLCB0aGUgc3RvcmFnZSBpcyBidWlsdCBpbnRvCi0gICAgICogdGhlIGRldmljZSBhbmQgY2FuIG5vdCBiZSBwaHlzaWNhbGx5IHJlbW92ZWQuCiAgICAgICoKLSAgICAgKiA8cD5TZWUge0BsaW5rICNnZXRFeHRlcm5hbFN0b3JhZ2VEaXJlY3RvcnkoKX0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzdG9yYWdlIGRldmljZSBjYW4gYmUgcmVtb3ZlZCAoc3VjaCBhcyBhbiBTRCBjYXJkKSwKKyAgICAgKiAgICAgICAgIG9yIGZhbHNlIGlmIHRoZSBzdG9yYWdlIGRldmljZSBpcyBidWlsdCBpbiBhbmQgY2Fubm90IGJlCisgICAgICogICAgICAgICBwaHlzaWNhbGx5IHJlbW92ZWQuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzRXh0ZXJuYWxTdG9yYWdlUmVtb3ZhYmxlKCkgewotICAgICAgICBmaW5hbCBTdG9yYWdlVm9sdW1lIHByaW1hcnkgPSBnZXRQcmltYXJ5Vm9sdW1lKCk7Ci0gICAgICAgIHJldHVybiAocHJpbWFyeSAhPSBudWxsICYmIHByaW1hcnkuaXNSZW1vdmFibGUoKSk7CisgICAgICAgIGlmIChpc1N0b3JhZ2VEaXNhYmxlZCgpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGZpbmFsIEZpbGUgZXh0ZXJuYWxEaXIgPSBzQ3VycmVudFVzZXIuZ2V0RXh0ZXJuYWxEaXJzRm9yQXBwKClbMF07CisgICAgICAgIHJldHVybiBpc0V4dGVybmFsU3RvcmFnZVJlbW92YWJsZShleHRlcm5hbERpcik7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBkZXZpY2UgaGFzIGFuIGV4dGVybmFsIHN0b3JhZ2UgZGV2aWNlIHdoaWNoIGlzCi0gICAgICogZW11bGF0ZWQuIElmIHRydWUsIHRoZSBkZXZpY2UgZG9lcyBub3QgaGF2ZSByZWFsIGV4dGVybmFsIHN0b3JhZ2UsIGFuZCB0aGUgZGlyZWN0b3J5Ci0gICAgICogcmV0dXJuZWQgYnkge0BsaW5rICNnZXRFeHRlcm5hbFN0b3JhZ2VEaXJlY3RvcnkoKX0gd2lsbCBiZSBhbGxvY2F0ZWQgdXNpbmcgYSBwb3J0aW9uIG9mCi0gICAgICogdGhlIGludGVybmFsIHN0b3JhZ2Ugc3lzdGVtLgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgc3RvcmFnZSBkZXZpY2UgdGhhdCBwcm92aWRlcyB0aGUgZ2l2ZW4gcGF0aCBpcworICAgICAqIHJlbW92YWJsZS4KICAgICAgKgotICAgICAqIDxwPkNlcnRhaW4gc3lzdGVtIHNlcnZpY2VzLCBzdWNoIGFzIHRoZSBwYWNrYWdlIG1hbmFnZXIsIHVzZSB0aGlzCi0gICAgICogdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIGluc3RhbGwgYW4gYXBwbGljYXRpb24uCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzdG9yYWdlIGRldmljZSBjYW4gYmUgcmVtb3ZlZCAoc3VjaCBhcyBhbiBTRCBjYXJkKSwKKyAgICAgKiAgICAgICAgIG9yIGZhbHNlIGlmIHRoZSBzdG9yYWdlIGRldmljZSBpcyBidWlsdCBpbiBhbmQgY2Fubm90IGJlCisgICAgICogICAgICAgICBwaHlzaWNhbGx5IHJlbW92ZWQuCisgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIHBhdGggaXMgbm90IGEgdmFsaWQgc3RvcmFnZQorICAgICAqICAgICAgICAgICAgIGRldmljZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFeHRlcm5hbFN0b3JhZ2VSZW1vdmFibGUoRmlsZSBwYXRoKSB7CisgICAgICAgIGZpbmFsIFN0b3JhZ2VWb2x1bWUgdm9sdW1lID0gZ2V0U3RvcmFnZVZvbHVtZShwYXRoKTsKKyAgICAgICAgaWYgKHZvbHVtZSAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gdm9sdW1lLmlzUmVtb3ZhYmxlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJGYWlsZWQgdG8gZmluZCBzdG9yYWdlIGRldmljZSBhdCAiICsgcGF0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByaW1hcnkgImV4dGVybmFsIiBzdG9yYWdlIGRldmljZSBpcyBlbXVsYXRlZC4gSWYKKyAgICAgKiB0cnVlLCBkYXRhIHN0b3JlZCBvbiB0aGlzIGRldmljZSB3aWxsIGJlIHN0b3JlZCBvbiBhIHBvcnRpb24gb2YgdGhlCisgICAgICogaW50ZXJuYWwgc3RvcmFnZSBzeXN0ZW0uCiAgICAgICoKLSAgICAgKiA8cD5FbXVsYXRlZCBleHRlcm5hbCBzdG9yYWdlIG1heSBhbHNvIGJlIGVuY3J5cHRlZCAtIHNlZQotICAgICAqIHtAbGluayBhbmRyb2lkLmFwcC5hZG1pbi5EZXZpY2VQb2xpY3lNYW5hZ2VyI3NldFN0b3JhZ2VFbmNyeXB0aW9uKAotICAgICAqIGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKX0gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KKyAgICAgKiBAc2VlIERldmljZVBvbGljeU1hbmFnZXIjc2V0U3RvcmFnZUVuY3J5cHRpb24oYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsCisgICAgICogICAgICBib29sZWFuKQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0V4dGVybmFsU3RvcmFnZUVtdWxhdGVkKCkgewotICAgICAgICBmaW5hbCBTdG9yYWdlVm9sdW1lIHByaW1hcnkgPSBnZXRQcmltYXJ5Vm9sdW1lKCk7Ci0gICAgICAgIHJldHVybiAocHJpbWFyeSAhPSBudWxsICYmIHByaW1hcnkuaXNFbXVsYXRlZCgpKTsKKyAgICAgICAgaWYgKGlzU3RvcmFnZURpc2FibGVkKCkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgZmluYWwgRmlsZSBleHRlcm5hbERpciA9IHNDdXJyZW50VXNlci5nZXRFeHRlcm5hbERpcnNGb3JBcHAoKVswXTsKKyAgICAgICAgcmV0dXJuIGlzRXh0ZXJuYWxTdG9yYWdlRW11bGF0ZWQoZXh0ZXJuYWxEaXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgc3RvcmFnZSBkZXZpY2UgdGhhdCBwcm92aWRlcyB0aGUgZ2l2ZW4gcGF0aCBpcworICAgICAqIGVtdWxhdGVkLiBJZiB0cnVlLCBkYXRhIHN0b3JlZCBvbiB0aGlzIGRldmljZSB3aWxsIGJlIHN0b3JlZCBvbiBhIHBvcnRpb24KKyAgICAgKiBvZiB0aGUgaW50ZXJuYWwgc3RvcmFnZSBzeXN0ZW0uCisgICAgICoKKyAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgcGF0aCBpcyBub3QgYSB2YWxpZCBzdG9yYWdlCisgICAgICogICAgICAgICAgICAgZGV2aWNlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0V4dGVybmFsU3RvcmFnZUVtdWxhdGVkKEZpbGUgcGF0aCkgeworICAgICAgICBmaW5hbCBTdG9yYWdlVm9sdW1lIHZvbHVtZSA9IGdldFN0b3JhZ2VWb2x1bWUocGF0aCk7CisgICAgICAgIGlmICh2b2x1bWUgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHZvbHVtZS5pc0VtdWxhdGVkKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJGYWlsZWQgdG8gZmluZCBzdG9yYWdlIGRldmljZSBhdCAiICsgcGF0aCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzdGF0aWMgRmlsZSBnZXREaXJlY3RvcnkoU3RyaW5nIHZhcmlhYmxlTmFtZSwgU3RyaW5nIGRlZmF1bHRQYXRoKSB7CkBAIC04MTUsNiArODEzLDMyIEBACiAgICAgICAgIHJldHVybiBjdXI7CiAgICAgfQogCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1N0b3JhZ2VEaXNhYmxlZCgpIHsKKyAgICAgICAgcmV0dXJuIFN5c3RlbVByb3BlcnRpZXMuZ2V0Qm9vbGVhbigiY29uZmlnLmRpc2FibGVfc3RvcmFnZSIsIGZhbHNlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdG9yYWdlVm9sdW1lIGdldFN0b3JhZ2VWb2x1bWUoRmlsZSBwYXRoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBwYXRoID0gcGF0aC5nZXRDYW5vbmljYWxGaWxlKCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIElNb3VudFNlcnZpY2UgbW91bnRTZXJ2aWNlID0gSU1vdW50U2VydmljZS5TdHViLmFzSW50ZXJmYWNlKAorICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKCJtb3VudCIpKTsKKyAgICAgICAgICAgIGZpbmFsIFN0b3JhZ2VWb2x1bWVbXSB2b2x1bWVzID0gbW91bnRTZXJ2aWNlLmdldFZvbHVtZUxpc3QoKTsKKyAgICAgICAgICAgIGZvciAoU3RvcmFnZVZvbHVtZSB2b2x1bWUgOiB2b2x1bWVzKSB7CisgICAgICAgICAgICAgICAgaWYgKEZpbGVVdGlscy5jb250YWlucyh2b2x1bWUuZ2V0UGF0aEZpbGUoKSwgcGF0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZvbHVtZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBJZiB0aGUgZ2l2ZW4gcGF0aCBleGlzdHMgb24gZW11bGF0ZWQgZXh0ZXJuYWwgc3RvcmFnZSwgcmV0dXJuIHRoZQogICAgICAqIHRyYW5zbGF0ZWQgYmFja2luZyBwYXRoIGhvc3RlZCBvbiBpbnRlcm5hbCBzdG9yYWdlLiBUaGlzIGJ5cGFzc2VzIGFueQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvRmlsZU9ic2VydmVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9GaWxlT2JzZXJ2ZXIuamF2YQppbmRleCBkNjMzNDg2Li40ZTcwNWUwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9GaWxlT2JzZXJ2ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9GaWxlT2JzZXJ2ZXIuamF2YQpAQCAtMTgsMTAgKzE4LDcgQEAKIAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5SdW50aW1lSW5pdDsKLQogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0ZpbGVVdGlscy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvRmlsZVV0aWxzLmphdmEKaW5kZXggZmYzZTI3Ny4uMTVhMTU0YSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvRmlsZVV0aWxzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvRmlsZVV0aWxzLmphdmEKQEAgLTIwLDkgKzIwLDcgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIAogaW1wb3J0IGxpYmNvcmUuaW8uRXJybm9FeGNlcHRpb247Ci1pbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOwogaW1wb3J0IGxpYmNvcmUuaW8uTGliY29yZTsKLWltcG9ydCBsaWJjb3JlLmlvLk9zQ29uc3RhbnRzOwogCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwpAQCAtMzU3LDQgKzM1NSwyNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBpZiBhIGZpbGUgbGl2ZXMgdW5kZXIgdGhlIGdpdmVuIGRpcmVjdG9yeSwgZWl0aGVyIGFzIGEgZGlyZWN0IGNoaWxkCisgICAgICogb3IgYSBkaXN0YW50IGdyYW5kY2hpbGQuCisgICAgICogPHA+CisgICAgICogQm90aCBmaWxlcyA8ZW0+bXVzdDwvZW0+IGhhdmUgYmVlbiByZXNvbHZlZCB1c2luZworICAgICAqIHtAbGluayBGaWxlI2dldENhbm9uaWNhbEZpbGUoKX0gdG8gYXZvaWQgc3ltbGluayBvciBwYXRoIHRyYXZlcnNhbAorICAgICAqIGF0dGFja3MuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGNvbnRhaW5zKEZpbGUgZGlyLCBGaWxlIGZpbGUpIHsKKyAgICAgICAgU3RyaW5nIGRpclBhdGggPSBkaXIuZ2V0UGF0aCgpOworICAgICAgICBTdHJpbmcgZmlsZVBhdGggPSBmaWxlLmdldFBhdGgoKTsKKworICAgICAgICBpZiAoZGlyUGF0aC5lcXVhbHMoZmlsZVBhdGgpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZGlyUGF0aC5lbmRzV2l0aCgiLyIpKSB7CisgICAgICAgICAgICBkaXJQYXRoICs9ICIvIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmlsZVBhdGguc3RhcnRzV2l0aChkaXJQYXRoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9IYW5kbGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9IYW5kbGVyLmphdmEKaW5kZXggZTY4ODZjNGQuLjQ0MzY3ZjMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0hhbmRsZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9IYW5kbGVyLmphdmEKQEAgLTMzMCw2ICszMzAsNyBAQAogICAgICAqIENhdXNlcyB0aGUgUnVubmFibGUgciB0byBiZSBhZGRlZCB0byB0aGUgbWVzc2FnZSBxdWV1ZSwgdG8gYmUgcnVuCiAgICAgICogYXQgYSBzcGVjaWZpYyB0aW1lIGdpdmVuIGJ5IDx2YXI+dXB0aW1lTWlsbGlzPC92YXI+LgogICAgICAqIDxiPlRoZSB0aW1lLWJhc2UgaXMge0BsaW5rIGFuZHJvaWQub3MuU3lzdGVtQ2xvY2sjdXB0aW1lTWlsbGlzfS48L2I+CisgICAgICogVGltZSBzcGVudCBpbiBkZWVwIHNsZWVwIHdpbGwgYWRkIGFuIGFkZGl0aW9uYWwgZGVsYXkgdG8gZXhlY3V0aW9uLgogICAgICAqIFRoZSBydW5uYWJsZSB3aWxsIGJlIHJ1biBvbiB0aGUgdGhyZWFkIHRvIHdoaWNoIHRoaXMgaGFuZGxlciBpcyBhdHRhY2hlZC4KICAgICAgKgogICAgICAqIEBwYXJhbSByIFRoZSBSdW5uYWJsZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuCkBAIC0zNTIsNiArMzUzLDcgQEAKICAgICAgKiBDYXVzZXMgdGhlIFJ1bm5hYmxlIHIgdG8gYmUgYWRkZWQgdG8gdGhlIG1lc3NhZ2UgcXVldWUsIHRvIGJlIHJ1bgogICAgICAqIGF0IGEgc3BlY2lmaWMgdGltZSBnaXZlbiBieSA8dmFyPnVwdGltZU1pbGxpczwvdmFyPi4KICAgICAgKiA8Yj5UaGUgdGltZS1iYXNlIGlzIHtAbGluayBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrI3VwdGltZU1pbGxpc30uPC9iPgorICAgICAqIFRpbWUgc3BlbnQgaW4gZGVlcCBzbGVlcCB3aWxsIGFkZCBhbiBhZGRpdGlvbmFsIGRlbGF5IHRvIGV4ZWN1dGlvbi4KICAgICAgKiBUaGUgcnVubmFibGUgd2lsbCBiZSBydW4gb24gdGhlIHRocmVhZCB0byB3aGljaCB0aGlzIGhhbmRsZXIgaXMgYXR0YWNoZWQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gciBUaGUgUnVubmFibGUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLgpAQCAtMzc3LDYgKzM3OSw4IEBACiAgICAgICogYWZ0ZXIgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZSBlbGFwc2VzLgogICAgICAqIFRoZSBydW5uYWJsZSB3aWxsIGJlIHJ1biBvbiB0aGUgdGhyZWFkIHRvIHdoaWNoIHRoaXMgaGFuZGxlcgogICAgICAqIGlzIGF0dGFjaGVkLgorICAgICAqIDxiPlRoZSB0aW1lLWJhc2UgaXMge0BsaW5rIGFuZHJvaWQub3MuU3lzdGVtQ2xvY2sjdXB0aW1lTWlsbGlzfS48L2I+CisgICAgICogVGltZSBzcGVudCBpbiBkZWVwIHNsZWVwIHdpbGwgYWRkIGFuIGFkZGl0aW9uYWwgZGVsYXkgdG8gZXhlY3V0aW9uLgogICAgICAqICAKICAgICAgKiBAcGFyYW0gciBUaGUgUnVubmFibGUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLgogICAgICAqIEBwYXJhbSBkZWxheU1pbGxpcyBUaGUgZGVsYXkgKGluIG1pbGxpc2Vjb25kcykgdW50aWwgdGhlIFJ1bm5hYmxlCkBAIC01NzAsNiArNTc0LDcgQEAKICAgICAgKiBFbnF1ZXVlIGEgbWVzc2FnZSBpbnRvIHRoZSBtZXNzYWdlIHF1ZXVlIGFmdGVyIGFsbCBwZW5kaW5nIG1lc3NhZ2VzCiAgICAgICogYmVmb3JlIHRoZSBhYnNvbHV0ZSB0aW1lIChpbiBtaWxsaXNlY29uZHMpIDx2YXI+dXB0aW1lTWlsbGlzPC92YXI+LgogICAgICAqIDxiPlRoZSB0aW1lLWJhc2UgaXMge0BsaW5rIGFuZHJvaWQub3MuU3lzdGVtQ2xvY2sjdXB0aW1lTWlsbGlzfS48L2I+CisgICAgICogVGltZSBzcGVudCBpbiBkZWVwIHNsZWVwIHdpbGwgYWRkIGFuIGFkZGl0aW9uYWwgZGVsYXkgdG8gZXhlY3V0aW9uLgogICAgICAqIFlvdSB3aWxsIHJlY2VpdmUgaXQgaW4ge0BsaW5rICNoYW5kbGVNZXNzYWdlfSwgaW4gdGhlIHRocmVhZCBhdHRhY2hlZAogICAgICAqIHRvIHRoaXMgaGFuZGxlci4KICAgICAgKiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0lCYXR0ZXJ5UHJvcGVydGllc1JlZ2lzdHJhci5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvSUJhdHRlcnlQcm9wZXJ0aWVzUmVnaXN0cmFyLmFpZGwKaW5kZXggMzc2ZjZjOS4uZmQwMTgwMiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvSUJhdHRlcnlQcm9wZXJ0aWVzUmVnaXN0cmFyLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvSUJhdHRlcnlQcm9wZXJ0aWVzUmVnaXN0cmFyLmFpZGwKQEAgLTE3LDYgKzE3LDcgQEAKIHBhY2thZ2UgYW5kcm9pZC5vczsKIAogaW1wb3J0IGFuZHJvaWQub3MuSUJhdHRlcnlQcm9wZXJ0aWVzTGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5CYXR0ZXJ5UHJvcGVydHk7CiAKIC8qKgogICoge0BoaWRlfQpAQCAtMjUsNCArMjYsNSBAQAogaW50ZXJmYWNlIElCYXR0ZXJ5UHJvcGVydGllc1JlZ2lzdHJhciB7CiAgICAgdm9pZCByZWdpc3Rlckxpc3RlbmVyKElCYXR0ZXJ5UHJvcGVydGllc0xpc3RlbmVyIGxpc3RlbmVyKTsKICAgICB2b2lkIHVucmVnaXN0ZXJMaXN0ZW5lcihJQmF0dGVyeVByb3BlcnRpZXNMaXN0ZW5lciBsaXN0ZW5lcik7CisgICAgaW50IGdldFByb3BlcnR5KGluIGludCBpZCwgb3V0IEJhdHRlcnlQcm9wZXJ0eSBwcm9wKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0lCaW5kZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0lCaW5kZXIuamF2YQppbmRleCBhMjQzMmQ2Li43M2EwZjY1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9JQmluZGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvSUJpbmRlci5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIGFuZHJvaWQub3M7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CiAKIC8qKgogICogQmFzZSBpbnRlcmZhY2UgZm9yIGEgcmVtb3RhYmxlIG9iamVjdCwgdGhlIGNvcmUgcGFydCBvZiBhIGxpZ2h0d2VpZ2h0CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9Mb29wZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0xvb3Blci5qYXZhCmluZGV4IDIxZTlmNmIuLmZmMzExMzAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0xvb3Blci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0xvb3Blci5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5QcmludGVyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5QcmVmaXhQcmludGVyOwogCiAvKioKICAgKiBDbGFzcyB1c2VkIHRvIHJ1biBhIG1lc3NhZ2UgbG9vcCBmb3IgYSB0aHJlYWQuICBUaHJlYWRzIGJ5IGRlZmF1bHQgZG8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL01lc3NhZ2VRdWV1ZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvTWVzc2FnZVF1ZXVlLmphdmEKaW5kZXggNzVmOTgxMy4uN2NhNWQ0OSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvTWVzc2FnZVF1ZXVlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvTWVzc2FnZVF1ZXVlLmphdmEKQEAgLTEyNiw2ICsxMjYsMTQgQEAKICAgICB9CiAKICAgICBNZXNzYWdlIG5leHQoKSB7CisgICAgICAgIC8vIFJldHVybiBoZXJlIGlmIHRoZSBtZXNzYWdlIGxvb3AgaGFzIGFscmVhZHkgcXVpdCBhbmQgYmVlbiBkaXNwb3NlZC4KKyAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBhcHBsaWNhdGlvbiB0cmllcyB0byByZXN0YXJ0IGEgbG9vcGVyIGFmdGVyIHF1aXQKKyAgICAgICAgLy8gd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgZmluYWwgbG9uZyBwdHIgPSBtUHRyOworICAgICAgICBpZiAocHRyID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKICAgICAgICAgaW50IHBlbmRpbmdJZGxlSGFuZGxlckNvdW50ID0gLTE7IC8vIC0xIG9ubHkgZHVyaW5nIGZpcnN0IGl0ZXJhdGlvbgogICAgICAgICBpbnQgbmV4dFBvbGxUaW1lb3V0TWlsbGlzID0gMDsKICAgICAgICAgZm9yICg7OykgewpAQCAtMTMzLDkgKzE0MSw3IEBACiAgICAgICAgICAgICAgICAgQmluZGVyLmZsdXNoUGVuZGluZ0NvbW1hbmRzKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFdlIGNhbiBhc3N1bWUgbVB0ciAhPSAwIGJlY2F1c2UgdGhlIGxvb3AgaXMgb2J2aW91c2x5IHN0aWxsIHJ1bm5pbmcuCi0gICAgICAgICAgICAvLyBUaGUgbG9vcGVyIHdpbGwgbm90IGNhbGwgdGhpcyBtZXRob2QgYWZ0ZXIgdGhlIGxvb3AgcXVpdHMuCi0gICAgICAgICAgICBuYXRpdmVQb2xsT25jZShtUHRyLCBuZXh0UG9sbFRpbWVvdXRNaWxsaXMpOworICAgICAgICAgICAgbmF0aXZlUG9sbE9uY2UocHRyLCBuZXh0UG9sbFRpbWVvdXRNaWxsaXMpOwogCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gcmV0cmlldmUgdGhlIG5leHQgbWVzc2FnZS4gIFJldHVybiBpZiBmb3VuZC4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL051bGxWaWJyYXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvTnVsbFZpYnJhdG9yLmphdmEKaW5kZXggYWM2MDI3Zi4uYWY5MGJkYiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvTnVsbFZpYnJhdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvTnVsbFZpYnJhdG9yLmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLm9zOwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKiBWaWJyYXRvciBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90aGluZy4KICAqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9QYXJjZWwuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1BhcmNlbC5qYXZhCmluZGV4IDk0Yjk2MTcuLmIxMzI2MjcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1BhcmNlbC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1BhcmNlbC5qYXZhCkBAIC0yOSw2ICsyOSw3IEBACiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT2JqZWN0U3RyZWFtQ2xhc3M7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKQEAgLTIwNjEsNyArMjA2Miw3IEBACiAgICAgICAgICAgICByZXR1cm4gcmVhZEJ5dGUoKTsKIAogICAgICAgICBjYXNlIFZBTF9TRVJJQUxJWkFCTEU6Ci0gICAgICAgICAgICByZXR1cm4gcmVhZFNlcmlhbGl6YWJsZSgpOworICAgICAgICAgICAgcmV0dXJuIHJlYWRTZXJpYWxpemFibGUobG9hZGVyKTsKIAogICAgICAgICBjYXNlIFZBTF9QQVJDRUxBQkxFQVJSQVk6CiAgICAgICAgICAgICByZXR1cm4gcmVhZFBhcmNlbGFibGVBcnJheShsb2FkZXIpOwpAQCAtMjE5OCw2ICsyMTk5LDEwIEBACiAgICAgICogd2Fzbid0IGZvdW5kIGluIHRoZSBwYXJjZWwuCiAgICAgICovCiAgICAgcHVibGljIGZpbmFsIFNlcmlhbGl6YWJsZSByZWFkU2VyaWFsaXphYmxlKCkgeworICAgICAgICByZXR1cm4gcmVhZFNlcmlhbGl6YWJsZShudWxsKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIFNlcmlhbGl6YWJsZSByZWFkU2VyaWFsaXphYmxlKGZpbmFsIENsYXNzTG9hZGVyIGxvYWRlcikgewogICAgICAgICBTdHJpbmcgbmFtZSA9IHJlYWRTdHJpbmcoKTsKICAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIHdlIHdlcmUgdW5hYmxlIHRvIHJlYWQgdGhlIG5hbWUgb2YgdGhlIFNlcmlhbGl6YWJsZSAoZWl0aGVyIHRoZXJlCkBAIC0yMjA5LDE0ICsyMjE0LDI3IEBACiAgICAgICAgIGJ5dGVbXSBzZXJpYWxpemVkRGF0YSA9IGNyZWF0ZUJ5dGVBcnJheSgpOwogICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHNlcmlhbGl6ZWREYXRhKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIE9iamVjdElucHV0U3RyZWFtIG9pcyA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbShiYWlzKTsKKyAgICAgICAgICAgIE9iamVjdElucHV0U3RyZWFtIG9pcyA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbShiYWlzKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHJvdGVjdGVkIENsYXNzPD8+IHJlc29sdmVDbGFzcyhPYmplY3RTdHJlYW1DbGFzcyBvc0NsYXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBjdXN0b20gY2xhc3Nsb2FkZXIgaWYgcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDbGFzczw/PiBjID0gQ2xhc3MuZm9yTmFtZShvc0NsYXNzLmdldE5hbWUoKSwgZmFsc2UsIGxvYWRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnJlc29sdmVDbGFzcyhvc0NsYXNzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OwogICAgICAgICAgICAgcmV0dXJuIChTZXJpYWxpemFibGUpIG9pcy5yZWFkT2JqZWN0KCk7CiAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBhcmNlbGFibGUgZW5jb3VudGVyZWQgIiArCiAgICAgICAgICAgICAgICAgIklPRXhjZXB0aW9uIHJlYWRpbmcgYSBTZXJpYWxpemFibGUgb2JqZWN0IChuYW1lID0gIiArIG5hbWUgKwogICAgICAgICAgICAgICAgICIpIiwgaW9lKTsKICAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBjbmZlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUGFyY2VsYWJsZSBlbmNvdW50ZXJlZCIgKworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBhcmNlbGFibGUgZW5jb3VudGVyZWQgIiArCiAgICAgICAgICAgICAgICAgIkNsYXNzTm90Rm91bmRFeGNlcHRpb24gcmVhZGluZyBhIFNlcmlhbGl6YWJsZSBvYmplY3QgKG5hbWUgPSAiCiAgICAgICAgICAgICAgICAgKyBuYW1lICsgIikiLCBjbmZlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yLmphdmEKaW5kZXggNTI3M2MyMC4uODZkYzhiNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3IuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvci5qYXZhCkBAIC04NzIsNiArODcyLDggQEAKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBvdXQsIGludCBmbGFncykgeworICAgICAgICAvLyBXQVJOSU5HOiBUaGlzIG11c3Qgc3RheSBpbiBzeW5jIHdpdGggUGFyY2VsOjpyZWFkUGFyY2VsRmlsZURlc2NyaXB0b3IoKQorICAgICAgICAvLyBpbiBmcmFtZXdvcmtzL25hdGl2ZS9saWJzL2JpbmRlci9QYXJjZWwuY3BwCiAgICAgICAgIGlmIChtV3JhcHBlZCAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1XcmFwcGVkLndyaXRlVG9QYXJjZWwob3V0LCBmbGFncyk7CkBAIC04OTcsNiArODk5LDggQEAKICAgICAgICAgICAgID0gbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxQYXJjZWxGaWxlRGVzY3JpcHRvcj4oKSB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgUGFyY2VsRmlsZURlc2NyaXB0b3IgY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKKyAgICAgICAgICAgIC8vIFdBUk5JTkc6IFRoaXMgbXVzdCBzdGF5IGluIHN5bmMgd2l0aCBQYXJjZWw6OndyaXRlUGFyY2VsRmlsZURlc2NyaXB0b3IoKQorICAgICAgICAgICAgLy8gaW4gZnJhbWV3b3Jrcy9uYXRpdmUvbGlicy9iaW5kZXIvUGFyY2VsLmNwcAogICAgICAgICAgICAgZmluYWwgRmlsZURlc2NyaXB0b3IgZmQgPSBpbi5yZWFkUmF3RmlsZURlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIEZpbGVEZXNjcmlwdG9yIGNvbW1DaGFubmVsID0gbnVsbDsKICAgICAgICAgICAgIGlmIChpbi5yZWFkSW50KCkgIT0gMCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUG93ZXJNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Qb3dlck1hbmFnZXIuamF2YQppbmRleCA1ZTBkNDg5Li4zYTk2MTFlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9Qb3dlck1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Qb3dlck1hbmFnZXIuamF2YQpAQCAtMjkwLDYgKzI5MCwxOCBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdPX1RPX1NMRUVQX1JFQVNPTl9USU1FT1VUID0gMjsKIAorICAgIC8qKgorICAgICAqIFRoZSB2YWx1ZSB0byBwYXNzIGFzIHRoZSAncmVhc29uJyBhcmd1bWVudCB0byByZWJvb3QoKSB0bworICAgICAqIHJlYm9vdCBpbnRvIHJlY292ZXJ5IG1vZGUgKGZvciBhcHBseWluZyBzeXN0ZW0gdXBkYXRlcywgZG9pbmcKKyAgICAgKiBmYWN0b3J5IHJlc2V0cywgZXRjLikuCisgICAgICogPHA+CisgICAgICogUmVxdWlyZXMgdGhlIHtAbGluayBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24jUkVDT1ZFUll9CisgICAgICogcGVybWlzc2lvbiAoaW4gYWRkaXRpb24gdG8KKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uI1JFQk9PVH0pLgorICAgICAqIDwvcD4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUJPT1RfUkVDT1ZFUlkgPSAicmVjb3ZlcnkiOworICAgIAogICAgIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CiAgICAgZmluYWwgSVBvd2VyTWFuYWdlciBtU2VydmljZTsKICAgICBmaW5hbCBIYW5kbGVyIG1IYW5kbGVyOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUmVnaXN0cmFudC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvUmVnaXN0cmFudC5qYXZhCmluZGV4IGMxNzgwYjkuLjcwNWNjNWQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1JlZ2lzdHJhbnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9SZWdpc3RyYW50LmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiAKIC8qKiBAaGlkZSAqLwogcHVibGljIGNsYXNzIFJlZ2lzdHJhbnQKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1JlZ2lzdHJhbnRMaXN0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9SZWdpc3RyYW50TGlzdC5qYXZhCmluZGV4IDU2YjllMmIuLjlhYjYxZjUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1JlZ2lzdHJhbnRMaXN0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvUmVnaXN0cmFudExpc3QuamF2YQpAQCAtMTcsMTAgKzE3LDggQEAKIHBhY2thZ2UgYW5kcm9pZC5vczsKIAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsgICAgICAgICAKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7ICAgICAgICAgCiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogCiAvKiogQGhpZGUgKi8KIHB1YmxpYyBjbGFzcyBSZWdpc3RyYW50TGlzdApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvU3RyaWN0TW9kZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvU3RyaWN0TW9kZS5qYXZhCmluZGV4IGQ3OTRjYTYuLmVhNzFhZDggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1N0cmljdE1vZGUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9TdHJpY3RNb2RlLmphdmEKQEAgLTE0NDksNyArMTQ0OSwxMSBAQAogICAgICAgICBpZiAocG9saWN5LmNsYXNzSW5zdGFuY2VMaW1pdC5zaXplKCkgPT0gMCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJ1bnRpbWUuZ2V0UnVudGltZSgpLmdjKCk7CisKKyAgICAgICAgU3lzdGVtLmdjKCk7CisgICAgICAgIFN5c3RlbS5ydW5GaW5hbGl6YXRpb24oKTsKKyAgICAgICAgU3lzdGVtLmdjKCk7CisKICAgICAgICAgLy8gTm90ZTogY2xhc3NJbnN0YW5jZUxpbWl0IGlzIGltbXV0YWJsZSwgc28gdGhpcyBpcyBsb2NrLWZyZWUKICAgICAgICAgZm9yIChNYXAuRW50cnk8Q2xhc3MsIEludGVnZXI+IGVudHJ5IDogcG9saWN5LmNsYXNzSW5zdGFuY2VMaW1pdC5lbnRyeVNldCgpKSB7CiAgICAgICAgICAgICBDbGFzcyBrbGFzcyA9IGVudHJ5LmdldEtleSgpOwpAQCAtMjAwNSw3ICsyMDA5LDEwIEBACiAgICAgICAgIC8vIG5vdGljZWFibHkgbGVzcyByZXNwb25zaXZlIGR1cmluZyBvcmllbnRhdGlvbiBjaGFuZ2VzIHdoZW4gYWN0aXZpdGllcyBhcmUKICAgICAgICAgLy8gYmVpbmcgcmVzdGFydGVkLiAgR3JhbnRlZCwgaXQgaXMgb25seSBhIHByb2JsZW0gd2hlbiBTdHJpY3RNb2RlIGlzIGVuYWJsZWQKICAgICAgICAgLy8gYnV0IGl0IGlzIGFubm95aW5nLgotICAgICAgICBSdW50aW1lLmdldFJ1bnRpbWUoKS5nYygpOworCisgICAgICAgIFN5c3RlbS5nYygpOworICAgICAgICBTeXN0ZW0ucnVuRmluYWxpemF0aW9uKCk7CisgICAgICAgIFN5c3RlbS5nYygpOwogCiAgICAgICAgIGxvbmcgaW5zdGFuY2VzID0gVk1EZWJ1Zy5jb3VudEluc3RhbmNlc09mQ2xhc3Moa2xhc3MsIGZhbHNlKTsKICAgICAgICAgaWYgKGluc3RhbmNlcyA+IGxpbWl0KSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9TeXN0ZW1Qcm9wZXJ0aWVzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9TeXN0ZW1Qcm9wZXJ0aWVzLmphdmEKaW5kZXggMTU2NjAwZS4uMTQ3OTAzNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvU3lzdGVtUHJvcGVydGllcy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1N5c3RlbVByb3BlcnRpZXMuamF2YQpAQCAtMTgsOCArMTgsNiBAQAogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIAogLyoqCiAgKiBHaXZlcyBhY2Nlc3MgdG8gdGhlIHN5c3RlbSBwcm9wZXJ0aWVzIHN0b3JlLiAgVGhlIHN5c3RlbSBwcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9TeXN0ZW1TZXJ2aWNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9TeXN0ZW1TZXJ2aWNlLmphdmEKaW5kZXggZjM0NTI3MS4uNDFlNzU0NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvU3lzdGVtU2VydmljZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1N5c3RlbVNlcnZpY2UuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQub3M7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKLQogaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5jb2xsZWN0Lk1hcHM7CiAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1RyYWNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9UcmFjZS5qYXZhCmluZGV4IDMyNDliY2IuLjU3ZWQ5NzkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1RyYWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvVHJhY2UuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQub3M7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIFdyaXRlcyB0cmFjZSBldmVudHMgdG8gdGhlIHN5c3RlbSB0cmFjZSBidWZmZXIuICBUaGVzZSB0cmFjZSBldmVudHMgY2FuIGJlCiAgKiBjb2xsZWN0ZWQgYW5kIHZpc3VhbGl6ZWQgdXNpbmcgdGhlIFN5c3RyYWNlIHRvb2wuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9Vc2VyTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvVXNlck1hbmFnZXIuamF2YQppbmRleCBhMzc1MmExLi41ZDA4N2VhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9Vc2VyTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1VzZXJNYW5hZ2VyLmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlck5hdGl2ZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuUmVzdHJpY3Rpb25FbnRyeTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uVXNlckluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0NoZWNrQm94UHJlZmVyZW5jZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9DaGVja0JveFByZWZlcmVuY2UuamF2YQppbmRleCAxNTM2NzYwLi4xY2U5OGI4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0NoZWNrQm94UHJlZmVyZW5jZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvQ2hlY2tCb3hQcmVmZXJlbmNlLmphdmEKQEAgLTM0LDExICszNCwxNiBAQAogICovCiBwdWJsaWMgY2xhc3MgQ2hlY2tCb3hQcmVmZXJlbmNlIGV4dGVuZHMgVHdvU3RhdGVQcmVmZXJlbmNlIHsKIAotICAgIHB1YmxpYyBDaGVja0JveFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotICAgICAgICAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkNoZWNrQm94UHJlZmVyZW5jZSwgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBDaGVja0JveFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ2hlY2tCb3hQcmVmZXJlbmNlKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkNoZWNrQm94UHJlZmVyZW5jZSwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIHNldFN1bW1hcnlPbihhLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5DaGVja0JveFByZWZlcmVuY2Vfc3VtbWFyeU9uKSk7CiAgICAgICAgIHNldFN1bW1hcnlPZmYoYS5nZXRTdHJpbmcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQ2hlY2tCb3hQcmVmZXJlbmNlX3N1bW1hcnlPZmYpKTsKICAgICAgICAgc2V0RGlzYWJsZURlcGVuZGVudHNTdGF0ZShhLmdldEJvb2xlYW4oCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0RpYWxvZ1ByZWZlcmVuY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvRGlhbG9nUHJlZmVyZW5jZS5qYXZhCmluZGV4IGE2NDNjOGEuLjUyNzViYzAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvRGlhbG9nUHJlZmVyZW5jZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvRGlhbG9nUHJlZmVyZW5jZS5qYXZhCkBAIC02NCwxMiArNjQsMTMgQEAKIAogICAgIC8qKiBXaGljaCBidXR0b24gd2FzIGNsaWNrZWQuICovCiAgICAgcHJpdmF0ZSBpbnQgbVdoaWNoQnV0dG9uQ2xpY2tlZDsKLSAgICAKLSAgICBwdWJsaWMgRGlhbG9nUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRGlhbG9nUHJlZmVyZW5jZSwgZGVmU3R5bGUsIDApOworCisgICAgcHVibGljIERpYWxvZ1ByZWZlcmVuY2UoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRGlhbG9nUHJlZmVyZW5jZSwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1EaWFsb2dUaXRsZSA9IGEuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkRpYWxvZ1ByZWZlcmVuY2VfZGlhbG9nVGl0bGUpOwogICAgICAgICBpZiAobURpYWxvZ1RpdGxlID09IG51bGwpIHsKICAgICAgICAgICAgIC8vIEZhbGxiYWNrIG9uIHRoZSByZWd1bGFyIHRpdGxlIG9mIHRoZSBwcmVmZXJlbmNlCkBAIC04MywxMyArODQsMjAgQEAKICAgICAgICAgbURpYWxvZ0xheW91dFJlc0lkID0gYS5nZXRSZXNvdXJjZUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkRpYWxvZ1ByZWZlcmVuY2VfZGlhbG9nTGF5b3V0LAogICAgICAgICAgICAgICAgIG1EaWFsb2dMYXlvdXRSZXNJZCk7CiAgICAgICAgIGEucmVjeWNsZSgpOwotICAgICAgICAKKyAgICB9CisKKyAgICBwdWJsaWMgRGlhbG9nUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOwogICAgIH0KIAogICAgIHB1YmxpYyBEaWFsb2dQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5kaWFsb2dQcmVmZXJlbmNlU3R5bGUpOwogICAgIH0KLSAgICAKKworICAgIHB1YmxpYyBEaWFsb2dQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCkgeworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuIFRoaXMgd2lsbCBiZSBzaG93biBvbiBzdWJzZXF1ZW50IGRpYWxvZ3MuCiAgICAgICogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0VkaXRUZXh0UHJlZmVyZW5jZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9FZGl0VGV4dFByZWZlcmVuY2UuamF2YQppbmRleCBhYTI3NjI3Li5mZjM3MDQyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0VkaXRUZXh0UHJlZmVyZW5jZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvRWRpdFRleHRQcmVmZXJlbmNlLmphdmEKQEAgLTQ5LDkgKzQ5LDkgQEAKICAgICBwcml2YXRlIEVkaXRUZXh0IG1FZGl0VGV4dDsKICAgICAKICAgICBwcml2YXRlIFN0cmluZyBtVGV4dDsKLSAgICAKLSAgICBwdWJsaWMgRWRpdFRleHRQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKworICAgIHB1YmxpYyBFZGl0VGV4dFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIAogICAgICAgICBtRWRpdFRleHQgPSBuZXcgRWRpdFRleHQoY29udGV4dCwgYXR0cnMpOwogICAgICAgICAKQEAgLTY3LDYgKzY3LDEwIEBACiAgICAgICAgIG1FZGl0VGV4dC5zZXRFbmFibGVkKHRydWUpOwogICAgIH0KIAorICAgIHB1YmxpYyBFZGl0VGV4dFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKICAgICBwdWJsaWMgRWRpdFRleHRQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5lZGl0VGV4dFByZWZlcmVuY2VTdHlsZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9MaXN0UHJlZmVyZW5jZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9MaXN0UHJlZmVyZW5jZS5qYXZhCmluZGV4IDllZGYxMTIuLjgwODFhNTQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvTGlzdFByZWZlcmVuY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0xpc3RQcmVmZXJlbmNlLmphdmEKQEAgLTQyLDEyICs0MiwxMiBAQAogICAgIHByaXZhdGUgU3RyaW5nIG1TdW1tYXJ5OwogICAgIHByaXZhdGUgaW50IG1DbGlja2VkRGlhbG9nRW50cnlJbmRleDsKICAgICBwcml2YXRlIGJvb2xlYW4gbVZhbHVlU2V0OwotICAgIAotICAgIHB1YmxpYyBMaXN0UHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGlzdFByZWZlcmVuY2UsIDAsIDApOworCisgICAgcHVibGljIExpc3RQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGlzdFByZWZlcmVuY2UsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBtRW50cmllcyA9IGEuZ2V0VGV4dEFycmF5KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkxpc3RQcmVmZXJlbmNlX2VudHJpZXMpOwogICAgICAgICBtRW50cnlWYWx1ZXMgPSBhLmdldFRleHRBcnJheShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5MaXN0UHJlZmVyZW5jZV9lbnRyeVZhbHVlcyk7CiAgICAgICAgIGEucmVjeWNsZSgpOwpAQCAtNTYsMTEgKzU2LDE5IEBACiAgICAgICAgICAqIGluIHRoZSBQcmVmZXJlbmNlIGNsYXNzLgogICAgICAgICAgKi8KICAgICAgICAgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgbVN1bW1hcnkgPSBhLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlX3N1bW1hcnkpOwogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgTGlzdFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmRpYWxvZ1ByZWZlcmVuY2VTdHlsZSk7CisgICAgfQorCiAgICAgcHVibGljIExpc3RQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCkgewogICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvTXVsdGlDaGVja1ByZWZlcmVuY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvTXVsdGlDaGVja1ByZWZlcmVuY2UuamF2YQppbmRleCA2OTUzMDc1Li41N2M5MDZkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL011bHRpQ2hlY2tQcmVmZXJlbmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9NdWx0aUNoZWNrUHJlZmVyZW5jZS5qYXZhCkBAIC00MCwxMiArNDAsMTMgQEAKICAgICBwcml2YXRlIGJvb2xlYW5bXSBtU2V0VmFsdWVzOwogICAgIHByaXZhdGUgYm9vbGVhbltdIG1PcmlnVmFsdWVzOwogICAgIHByaXZhdGUgU3RyaW5nIG1TdW1tYXJ5OwotICAgIAotICAgIHB1YmxpYyBNdWx0aUNoZWNrUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGlzdFByZWZlcmVuY2UsIDAsIDApOworCisgICAgcHVibGljIE11bHRpQ2hlY2tQcmVmZXJlbmNlKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5MaXN0UHJlZmVyZW5jZSwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1FbnRyaWVzID0gYS5nZXRUZXh0QXJyYXkoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGlzdFByZWZlcmVuY2VfZW50cmllcyk7CiAgICAgICAgIGlmIChtRW50cmllcyAhPSBudWxsKSB7CiAgICAgICAgICAgICBzZXRFbnRyaWVzKG1FbnRyaWVzKTsKQEAgLTYzLDYgKzY0LDE0IEBACiAgICAgICAgIGEucmVjeWNsZSgpOwogICAgIH0KIAorICAgIHB1YmxpYyBNdWx0aUNoZWNrUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBNdWx0aUNoZWNrUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuZGlhbG9nUHJlZmVyZW5jZVN0eWxlKTsKKyAgICB9CisKICAgICBwdWJsaWMgTXVsdGlDaGVja1ByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9NdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL011bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UuamF2YQppbmRleCA1NTNjZTgwLi42YzRjMjBmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL011bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL011bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UuamF2YQpAQCAtNDQsMTYgKzQ0LDI2IEBACiAgICAgcHJpdmF0ZSBTZXQ8U3RyaW5nPiBtVmFsdWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwogICAgIHByaXZhdGUgU2V0PFN0cmluZz4gbU5ld1ZhbHVlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKICAgICBwcml2YXRlIGJvb2xlYW4gbVByZWZlcmVuY2VDaGFuZ2VkOwotICAgIAotICAgIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKLSAgICAgICAgCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5NdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlLCAwLCAwKTsKKworICAgIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk11bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UsIGRlZlN0eWxlQXR0ciwKKyAgICAgICAgICAgICAgICBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1FbnRyaWVzID0gYS5nZXRUZXh0QXJyYXkoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTXVsdGlTZWxlY3RMaXN0UHJlZmVyZW5jZV9lbnRyaWVzKTsKICAgICAgICAgbUVudHJ5VmFsdWVzID0gYS5nZXRUZXh0QXJyYXkoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTXVsdGlTZWxlY3RMaXN0UHJlZmVyZW5jZV9lbnRyeVZhbHVlcyk7CiAgICAgICAgIGEucmVjeWNsZSgpOwogICAgIH0KKworICAgIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIE11bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmRpYWxvZ1ByZWZlcmVuY2VTdHlsZSk7CisgICAgfQogICAgIAogICAgIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCkgewogICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UuamF2YQppbmRleCBmN2QxZWI3Li43NmZjY2M3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UuamF2YQpAQCAtMTg4LDMwICsxODgsMzMgQEAKIAogICAgIC8qKgogICAgICAqIFBlcmZvcm0gaW5mbGF0aW9uIGZyb20gWE1MIGFuZCBhcHBseSBhIGNsYXNzLXNwZWNpZmljIGJhc2Ugc3R5bGUuIFRoaXMKLSAgICAgKiBjb25zdHJ1Y3RvciBvZiBQcmVmZXJlbmNlIGFsbG93cyBzdWJjbGFzc2VzIHRvIHVzZSB0aGVpciBvd24gYmFzZQotICAgICAqIHN0eWxlIHdoZW4gdGhleSBhcmUgaW5mbGF0aW5nLiBGb3IgZXhhbXBsZSwgYSB7QGxpbmsgQ2hlY2tCb3hQcmVmZXJlbmNlfQorICAgICAqIGNvbnN0cnVjdG9yIG9mIFByZWZlcmVuY2UgYWxsb3dzIHN1YmNsYXNzZXMgdG8gdXNlIHRoZWlyIG93biBiYXNlIHN0eWxlCisgICAgICogd2hlbiB0aGV5IGFyZSBpbmZsYXRpbmcuIEZvciBleGFtcGxlLCBhIHtAbGluayBDaGVja0JveFByZWZlcmVuY2V9CiAgICAgICogY29uc3RydWN0b3IgY2FsbHMgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzdXBlciBjbGFzcyBjb25zdHJ1Y3RvciBhbmQKLSAgICAgKiBzdXBwbGllcyB7QGNvZGUgYW5kcm9pZC5SLmF0dHIuY2hlY2tCb3hQcmVmZXJlbmNlU3R5bGV9IGZvciA8dmFyPmRlZlN0eWxlPC92YXI+LgotICAgICAqIFRoaXMgYWxsb3dzIHRoZSB0aGVtZSdzIGNoZWNrYm94IHByZWZlcmVuY2Ugc3R5bGUgdG8gbW9kaWZ5IGFsbCBvZiB0aGUgYmFzZQotICAgICAqIHByZWZlcmVuY2UgYXR0cmlidXRlcyBhcyB3ZWxsIGFzIHRoZSB7QGxpbmsgQ2hlY2tCb3hQcmVmZXJlbmNlfSBjbGFzcydzCi0gICAgICogYXR0cmlidXRlcy4KLSAgICAgKiAKKyAgICAgKiBzdXBwbGllcyB7QGNvZGUgYW5kcm9pZC5SLmF0dHIuY2hlY2tCb3hQcmVmZXJlbmNlU3R5bGV9IGZvcgorICAgICAqIDx2YXI+ZGVmU3R5bGVBdHRyPC92YXI+LiBUaGlzIGFsbG93cyB0aGUgdGhlbWUncyBjaGVja2JveCBwcmVmZXJlbmNlCisgICAgICogc3R5bGUgdG8gbW9kaWZ5IGFsbCBvZiB0aGUgYmFzZSBwcmVmZXJlbmNlIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyB0aGUKKyAgICAgKiB7QGxpbmsgQ2hlY2tCb3hQcmVmZXJlbmNlfSBjbGFzcydzIGF0dHJpYnV0ZXMuCisgICAgICoKICAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dCB0aGlzIGlzIGFzc29jaWF0ZWQgd2l0aCwgdGhyb3VnaCB3aGljaCBpdCBjYW4KLSAgICAgKiAgICAgICAgICAgIGFjY2VzcyB0aGUgY3VycmVudCB0aGVtZSwgcmVzb3VyY2VzLCB7QGxpbmsgU2hhcmVkUHJlZmVyZW5jZXN9LAotICAgICAqICAgICAgICAgICAgZXRjLgotICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgWE1MIHRhZyB0aGF0IGlzIGluZmxhdGluZyB0aGUgcHJlZmVyZW5jZS4KLSAgICAgKiBAcGFyYW0gZGVmU3R5bGUgVGhlIGRlZmF1bHQgc3R5bGUgdG8gYXBwbHkgdG8gdGhpcyBwcmVmZXJlbmNlLiBJZiAwLCBubyBzdHlsZQotICAgICAqICAgICAgICAgICAgd2lsbCBiZSBhcHBsaWVkIChiZXlvbmQgd2hhdCBpcyBpbmNsdWRlZCBpbiB0aGUgdGhlbWUpLiBUaGlzCi0gICAgICogICAgICAgICAgICBtYXkgZWl0aGVyIGJlIGFuIGF0dHJpYnV0ZSByZXNvdXJjZSwgd2hvc2UgdmFsdWUgd2lsbCBiZQotICAgICAqICAgICAgICAgICAgcmV0cmlldmVkIGZyb20gdGhlIGN1cnJlbnQgdGhlbWUsIG9yIGFuIGV4cGxpY2l0IHN0eWxlCi0gICAgICogICAgICAgICAgICByZXNvdXJjZS4KKyAgICAgKiAgICAgICAgICAgIGFjY2VzcyB0aGUgY3VycmVudCB0aGVtZSwgcmVzb3VyY2VzLAorICAgICAqICAgICAgICAgICAge0BsaW5rIFNoYXJlZFByZWZlcmVuY2VzfSwgZXRjLgorICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgWE1MIHRhZyB0aGF0IGlzIGluZmxhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgIHByZWZlcmVuY2UuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVSZXMgQSByZXNvdXJjZSBpZGVudGlmaWVyIG9mIGEgc3R5bGUgcmVzb3VyY2UgdGhhdAorICAgICAqICAgICAgICAgICAgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB2aWV3LCB1c2VkIG9ubHkgaWYKKyAgICAgKiAgICAgICAgICAgIGRlZlN0eWxlQXR0ciBpcyAwIG9yIGNhbiBub3QgYmUgZm91bmQgaW4gdGhlIHRoZW1lLiBDYW4gYmUgMAorICAgICAqICAgICAgICAgICAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqIEBzZWUgI1ByZWZlcmVuY2UoQ29udGV4dCwgQXR0cmlidXRlU2V0KQogICAgICAqLwotICAgIHB1YmxpYyBQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKKyAgICBwdWJsaWMgUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CiAgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUHJlZmVyZW5jZSwgZGVmU3R5bGUsIDApOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlByZWZlcmVuY2UsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBmb3IgKGludCBpID0gYS5nZXRJbmRleENvdW50KCk7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICBpbnQgYXR0ciA9IGEuZ2V0SW5kZXgoaSk7IAogICAgICAgICAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC0yODEsNiArMjg0LDMwIEBACiAgICAgICAgICAgICBtQ2FuUmVjeWNsZUxheW91dCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBpbmZsYXRpb24gZnJvbSBYTUwgYW5kIGFwcGx5IGEgY2xhc3Mtc3BlY2lmaWMgYmFzZSBzdHlsZS4gVGhpcworICAgICAqIGNvbnN0cnVjdG9yIG9mIFByZWZlcmVuY2UgYWxsb3dzIHN1YmNsYXNzZXMgdG8gdXNlIHRoZWlyIG93biBiYXNlIHN0eWxlCisgICAgICogd2hlbiB0aGV5IGFyZSBpbmZsYXRpbmcuIEZvciBleGFtcGxlLCBhIHtAbGluayBDaGVja0JveFByZWZlcmVuY2V9CisgICAgICogY29uc3RydWN0b3IgY2FsbHMgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzdXBlciBjbGFzcyBjb25zdHJ1Y3RvciBhbmQKKyAgICAgKiBzdXBwbGllcyB7QGNvZGUgYW5kcm9pZC5SLmF0dHIuY2hlY2tCb3hQcmVmZXJlbmNlU3R5bGV9IGZvcgorICAgICAqIDx2YXI+ZGVmU3R5bGVBdHRyPC92YXI+LiBUaGlzIGFsbG93cyB0aGUgdGhlbWUncyBjaGVja2JveCBwcmVmZXJlbmNlCisgICAgICogc3R5bGUgdG8gbW9kaWZ5IGFsbCBvZiB0aGUgYmFzZSBwcmVmZXJlbmNlIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyB0aGUKKyAgICAgKiB7QGxpbmsgQ2hlY2tCb3hQcmVmZXJlbmNlfSBjbGFzcydzIGF0dHJpYnV0ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dCB0aGlzIGlzIGFzc29jaWF0ZWQgd2l0aCwgdGhyb3VnaCB3aGljaCBpdCBjYW4KKyAgICAgKiAgICAgICAgICAgIGFjY2VzcyB0aGUgY3VycmVudCB0aGVtZSwgcmVzb3VyY2VzLAorICAgICAqICAgICAgICAgICAge0BsaW5rIFNoYXJlZFByZWZlcmVuY2VzfSwgZXRjLgorICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgWE1MIHRhZyB0aGF0IGlzIGluZmxhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgIHByZWZlcmVuY2UuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAc2VlICNQcmVmZXJlbmNlKENvbnRleHQsIEF0dHJpYnV0ZVNldCkKKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KICAgICAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciB0aGF0IGlzIGNhbGxlZCB3aGVuIGluZmxhdGluZyBhIFByZWZlcmVuY2UgZnJvbSBYTUwuIFRoaXMgaXMKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUFjdGl2aXR5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VBY3Rpdml0eS5qYXZhCmluZGV4IDJhYjVhOTEuLjA0MTgwNDkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUFjdGl2aXR5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlQWN0aXZpdHkuamF2YQpAQCAtMzMsNyArMzMsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuWG1sOwogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKQEAgLTc5NCw4ICs3OTMsOCBAQAogICAgICAgICAgICAgICAgIGlmICgiaGVhZGVyIi5lcXVhbHMobm9kZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIEhlYWRlciBoZWFkZXIgPSBuZXcgSGVhZGVyKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgVHlwZWRBcnJheSBzYSA9IGdldFJlc291cmNlcygpLm9idGFpbkF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUHJlZmVyZW5jZUhlYWRlcik7CisgICAgICAgICAgICAgICAgICAgIFR5cGVkQXJyYXkgc2EgPSBvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlSGVhZGVyKTsKICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmlkID0gc2EuZ2V0UmVzb3VyY2VJZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlSGVhZGVyX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpSEVBREVSX0lEX1VOREVGSU5FRCk7CkBAIC0xMTczLDcgKzExNzIsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHN3aXRjaFRvSGVhZGVySW5uZXIoU3RyaW5nIGZyYWdtZW50TmFtZSwgQnVuZGxlIGFyZ3MsIGludCBkaXJlY3Rpb24pIHsKKyAgICBwcml2YXRlIHZvaWQgc3dpdGNoVG9IZWFkZXJJbm5lcihTdHJpbmcgZnJhZ21lbnROYW1lLCBCdW5kbGUgYXJncykgewogICAgICAgICBnZXRGcmFnbWVudE1hbmFnZXIoKS5wb3BCYWNrU3RhY2soQkFDS19TVEFDS19QUkVGUywKICAgICAgICAgICAgICAgICBGcmFnbWVudE1hbmFnZXIuUE9QX0JBQ0tfU1RBQ0tfSU5DTFVTSVZFKTsKICAgICAgICAgaWYgKCFpc1ZhbGlkRnJhZ21lbnQoZnJhZ21lbnROYW1lKSkgewpAQCAtMTE5Niw3ICsxMTk1LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzd2l0Y2hUb0hlYWRlcihTdHJpbmcgZnJhZ21lbnROYW1lLCBCdW5kbGUgYXJncykgewogICAgICAgICBzZXRTZWxlY3RlZEhlYWRlcihudWxsKTsKLSAgICAgICAgc3dpdGNoVG9IZWFkZXJJbm5lcihmcmFnbWVudE5hbWUsIGFyZ3MsIDApOworICAgICAgICBzd2l0Y2hUb0hlYWRlcklubmVyKGZyYWdtZW50TmFtZSwgYXJncyk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMjE1LDggKzEyMTQsNyBAQAogICAgICAgICAgICAgaWYgKGhlYWRlci5mcmFnbWVudCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiY2FuJ3Qgc3dpdGNoIHRvIGhlYWRlciB0aGF0IGhhcyBubyBmcmFnbWVudCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGRpcmVjdGlvbiA9IG1IZWFkZXJzLmluZGV4T2YoaGVhZGVyKSAtIG1IZWFkZXJzLmluZGV4T2YobUN1ckhlYWRlcik7Ci0gICAgICAgICAgICBzd2l0Y2hUb0hlYWRlcklubmVyKGhlYWRlci5mcmFnbWVudCwgaGVhZGVyLmZyYWdtZW50QXJndW1lbnRzLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3dpdGNoVG9IZWFkZXJJbm5lcihoZWFkZXIuZnJhZ21lbnQsIGhlYWRlci5mcmFnbWVudEFyZ3VtZW50cyk7CiAgICAgICAgICAgICBzZXRTZWxlY3RlZEhlYWRlcihoZWFkZXIpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlQ2F0ZWdvcnkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUNhdGVnb3J5LmphdmEKaW5kZXggMjI5YTk2YS4uMjUzNDgxYiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlQ2F0ZWdvcnkuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VDYXRlZ29yeS5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmVmZXJlbmNlOwogCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiAKQEAgLTM0LDkgKzMyLDE0IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBQcmVmZXJlbmNlQ2F0ZWdvcnkgZXh0ZW5kcyBQcmVmZXJlbmNlR3JvdXAgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUHJlZmVyZW5jZUNhdGVnb3J5IjsKLSAgICAKLSAgICBwdWJsaWMgUHJlZmVyZW5jZUNhdGVnb3J5KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKworICAgIHB1YmxpYyBQcmVmZXJlbmNlQ2F0ZWdvcnkoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgUHJlZmVyZW5jZUNhdGVnb3J5KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CiAgICAgfQogCiAgICAgcHVibGljIFByZWZlcmVuY2VDYXRlZ29yeShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlRnJhbWVMYXlvdXQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUZyYW1lTGF5b3V0LmphdmEKaW5kZXggNzUzNzJhYS4uODg2MzM4ZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlRnJhbWVMYXlvdXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VGcmFtZUxheW91dC5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmVmZXJlbmNlOwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuRnJhZ21lbnRCcmVhZENydW1iczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKQEAgLTQ1LDEwICs0NCwxNSBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIucHJlZmVyZW5jZUZyYW1lTGF5b3V0U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBQcmVmZXJlbmNlRnJhbWVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUHJlZmVyZW5jZUZyYW1lTGF5b3V0LCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIFByZWZlcmVuY2VGcmFtZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBQcmVmZXJlbmNlRnJhbWVMYXlvdXQoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlByZWZlcmVuY2VGcmFtZUxheW91dCwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgZmxvYXQgZGVuc2l0eSA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGlzcGxheU1ldHJpY3MoKS5kZW5zaXR5OwogICAgICAgICBpbnQgZGVmYXVsdEJvcmRlclRvcCA9IChpbnQpIChkZW5zaXR5ICogREVGQVVMVF9CT1JERVJfVE9QICsgMC41Zik7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VHcm91cC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlR3JvdXAuamF2YQppbmRleCA1ZjhjNzhkLi4yZDM1YjFiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VHcm91cC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUdyb3VwLmphdmEKQEAgLTU1LDE5ICs1NSwyMyBAQAogICAgIHByaXZhdGUgaW50IG1DdXJyZW50UHJlZmVyZW5jZU9yZGVyID0gMDsKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtQXR0YWNoZWRUb0FjdGl2aXR5ID0gZmFsc2U7Ci0gICAgCi0gICAgcHVibGljIFByZWZlcmVuY2VHcm91cChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisKKyAgICBwdWJsaWMgUHJlZmVyZW5jZUdyb3VwKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIG1QcmVmZXJlbmNlTGlzdCA9IG5ldyBBcnJheUxpc3Q8UHJlZmVyZW5jZT4oKTsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUHJlZmVyZW5jZUdyb3VwLCBkZWZTdHlsZSwgMCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUHJlZmVyZW5jZUdyb3VwLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgbU9yZGVyaW5nQXNBZGRlZCA9IGEuZ2V0Qm9vbGVhbihjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlR3JvdXBfb3JkZXJpbmdGcm9tWG1sLAogICAgICAgICAgICAgICAgIG1PcmRlcmluZ0FzQWRkZWQpOwogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgUHJlZmVyZW5jZUdyb3VwKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCiAgICAgcHVibGljIFByZWZlcmVuY2VHcm91cChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VJbmZsYXRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlSW5mbGF0ZXIuamF2YQppbmRleCBjMjFhYTE4Li43MjdmYmNhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VJbmZsYXRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUluZmxhdGVyLmphdmEKQEAgLTE5LDE2ICsxOSwxMyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHM7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BbGlhc0FjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiAvKioKICAqIFRoZSB7QGxpbmsgUHJlZmVyZW5jZUluZmxhdGVyfSBpcyB1c2VkIHRvIGluZmxhdGUgcHJlZmVyZW5jZSBoaWVyYXJjaGllcyBmcm9tCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VTY3JlZW4uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZVNjcmVlbi5qYXZhCmluZGV4IGRiODA2NzYuLmIxMzE3ZTYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZVNjcmVlbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZVNjcmVlbi5qYXZhCkBAIC0yNyw3ICsyNyw2IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQWJzTGlzdFZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0QWRhcHRlcjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUmluZ3RvbmVQcmVmZXJlbmNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1Jpbmd0b25lUHJlZmVyZW5jZS5qYXZhCmluZGV4IDJlYmYyOTQuLjQ4OGEwYzQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUmluZ3RvbmVQcmVmZXJlbmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9SaW5ndG9uZVByZWZlcmVuY2UuamF2YQpAQCAtNTAsMTEgKzUwLDExIEBACiAgICAgCiAgICAgcHJpdmF0ZSBpbnQgbVJlcXVlc3RDb2RlOwogCi0gICAgcHVibGljIFJpbmd0b25lUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUmluZ3RvbmVQcmVmZXJlbmNlLCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIFJpbmd0b25lUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUmluZ3RvbmVQcmVmZXJlbmNlLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgbVJpbmd0b25lVHlwZSA9IGEuZ2V0SW50KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlJpbmd0b25lUHJlZmVyZW5jZV9yaW5ndG9uZVR5cGUsCiAgICAgICAgICAgICAgICAgUmluZ3RvbmVNYW5hZ2VyLlRZUEVfUklOR1RPTkUpOwogICAgICAgICBtU2hvd0RlZmF1bHQgPSBhLmdldEJvb2xlYW4oY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUmluZ3RvbmVQcmVmZXJlbmNlX3Nob3dEZWZhdWx0LApAQCAtNjQsNiArNjQsMTAgQEAKICAgICAgICAgYS5yZWN5Y2xlKCk7CiAgICAgfQogCisgICAgcHVibGljIFJpbmd0b25lUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKwogICAgIHB1YmxpYyBSaW5ndG9uZVByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLnJpbmd0b25lUHJlZmVyZW5jZVN0eWxlKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1NlZWtCYXJEaWFsb2dQcmVmZXJlbmNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1NlZWtCYXJEaWFsb2dQcmVmZXJlbmNlLmphdmEKaW5kZXggMGU4OWIxNi4uOWEwODgyNyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9TZWVrQmFyRGlhbG9nUHJlZmVyZW5jZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvU2Vla0JhckRpYWxvZ1ByZWZlcmVuY2UuamF2YQpAQCAtMzIsOCArMzIsOSBAQAogCiAgICAgcHJpdmF0ZSBEcmF3YWJsZSBtTXlJY29uOwogCi0gICAgcHVibGljIFNlZWtCYXJEaWFsb2dQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICBwdWJsaWMgU2Vla0JhckRpYWxvZ1ByZWZlcmVuY2UoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBzZXREaWFsb2dMYXlvdXRSZXNvdXJjZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmxheW91dC5zZWVrYmFyX2RpYWxvZyk7CiAgICAgICAgIGNyZWF0ZUFjdGlvbkJ1dHRvbnMoKTsKQEAgLTQzLDYgKzQ0LDE4IEBACiAgICAgICAgIHNldERpYWxvZ0ljb24obnVsbCk7CiAgICAgfQogCisgICAgcHVibGljIFNlZWtCYXJEaWFsb2dQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFNlZWtCYXJEaWFsb2dQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5kaWFsb2dQcmVmZXJlbmNlU3R5bGUpOworICAgIH0KKworICAgIHB1YmxpYyBTZWVrQmFyRGlhbG9nUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKKyAgICB9CisKICAgICAvLyBBbGxvdyBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlIHRoZSBhY3Rpb24gYnV0dG9ucwogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUFjdGlvbkJ1dHRvbnMoKSB7CiAgICAgICAgIHNldFBvc2l0aXZlQnV0dG9uVGV4dChhbmRyb2lkLlIuc3RyaW5nLm9rKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvU2Vla0JhclByZWZlcmVuY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvU2Vla0JhclByZWZlcmVuY2UuamF2YQppbmRleCA3MTMzZDNhLi5lMzI4OTBkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1NlZWtCYXJQcmVmZXJlbmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9TZWVrQmFyUHJlZmVyZW5jZS5qYXZhCkBAIC0zNywxNSArMzcsMjAgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gbVRyYWNraW5nVG91Y2g7CiAKICAgICBwdWJsaWMgU2Vla0JhclByZWZlcmVuY2UoCi0gICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7Ci0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Qcm9ncmVzc0JhciwgZGVmU3R5bGUsIDApOworICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Qcm9ncmVzc0JhciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIHNldE1heChhLmdldEludChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Qcm9ncmVzc0Jhcl9tYXgsIG1NYXgpKTsKICAgICAgICAgYS5yZWN5Y2xlKCk7CiAgICAgICAgIHNldExheW91dFJlc291cmNlKGNvbS5hbmRyb2lkLmludGVybmFsLlIubGF5b3V0LnByZWZlcmVuY2Vfd2lkZ2V0X3NlZWtiYXIpOwogICAgIH0KIAorICAgIHB1YmxpYyBTZWVrQmFyUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKwogICAgIHB1YmxpYyBTZWVrQmFyUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1N3aXRjaFByZWZlcmVuY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvU3dpdGNoUHJlZmVyZW5jZS5qYXZhCmluZGV4IDhiYWM2YmQuLjc2ZWY1NDQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvU3dpdGNoUHJlZmVyZW5jZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvU3dpdGNoUHJlZmVyZW5jZS5qYXZhCkBAIC02MCwxMyArNjAsMTkgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0IHRoYXQgd2lsbCBzdHlsZSB0aGlzIHByZWZlcmVuY2UKICAgICAgKiBAcGFyYW0gYXR0cnMgU3R5bGUgYXR0cmlidXRlcyB0aGF0IGRpZmZlciBmcm9tIHRoZSBkZWZhdWx0Ci0gICAgICogQHBhcmFtIGRlZlN0eWxlIFRoZW1lIGF0dHJpYnV0ZSBkZWZpbmluZyB0aGUgZGVmYXVsdCBzdHlsZSBvcHRpb25zCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICogQHBhcmFtIGRlZlN0eWxlUmVzIEEgcmVzb3VyY2UgaWRlbnRpZmllciBvZiBhIHN0eWxlIHJlc291cmNlIHRoYXQKKyAgICAgKiAgICAgICAgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB2aWV3LCB1c2VkIG9ubHkgaWYKKyAgICAgKiAgICAgICAgZGVmU3R5bGVBdHRyIGlzIDAgb3IgY2FuIG5vdCBiZSBmb3VuZCBpbiB0aGUgdGhlbWUuIENhbiBiZSAwCisgICAgICogICAgICAgIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KICAgICAgKi8KLSAgICBwdWJsaWMgU3dpdGNoUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFN3aXRjaFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN3aXRjaFByZWZlcmVuY2UsIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Td2l0Y2hQcmVmZXJlbmNlLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgc2V0U3VtbWFyeU9uKGEuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN3aXRjaFByZWZlcmVuY2Vfc3VtbWFyeU9uKSk7CiAgICAgICAgIHNldFN1bW1hcnlPZmYoYS5nZXRTdHJpbmcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3dpdGNoUHJlZmVyZW5jZV9zdW1tYXJ5T2ZmKSk7CiAgICAgICAgIHNldFN3aXRjaFRleHRPbihhLmdldFN0cmluZygKQEAgLTgzLDYgKzg5LDE5IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dCB0aGF0IHdpbGwgc3R5bGUgdGhpcyBwcmVmZXJlbmNlCiAgICAgICogQHBhcmFtIGF0dHJzIFN0eWxlIGF0dHJpYnV0ZXMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgZGVmYXVsdAorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgQW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgorICAgICAqLworICAgIHB1YmxpYyBTd2l0Y2hQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgbmV3IFN3aXRjaFByZWZlcmVuY2Ugd2l0aCB0aGUgZ2l2ZW4gc3R5bGUgb3B0aW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0IHRoYXQgd2lsbCBzdHlsZSB0aGlzIHByZWZlcmVuY2UKKyAgICAgKiBAcGFyYW0gYXR0cnMgU3R5bGUgYXR0cmlidXRlcyB0aGF0IGRpZmZlciBmcm9tIHRoZSBkZWZhdWx0CiAgICAgICovCiAgICAgcHVibGljIFN3aXRjaFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLnN3aXRjaFByZWZlcmVuY2VTdHlsZSk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1R3b1N0YXRlUHJlZmVyZW5jZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9Ud29TdGF0ZVByZWZlcmVuY2UuamF2YQppbmRleCBhZjgzOTUzLi42ZjhiZTFmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1R3b1N0YXRlUHJlZmVyZW5jZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvVHdvU3RhdGVQcmVmZXJlbmNlLmphdmEKQEAgLTQyLDkgKzQyLDEzIEBACiAgICAgcHJpdmF0ZSBib29sZWFuIG1TZW5kQ2xpY2tBY2Nlc3NpYmlsaXR5RXZlbnQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1EaXNhYmxlRGVwZW5kZW50c1N0YXRlOwogCisgICAgcHVibGljIFR3b1N0YXRlUHJlZmVyZW5jZSgKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworICAgIH0KIAotICAgIHB1YmxpYyBUd29TdGF0ZVByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBUd29TdGF0ZVByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKICAgICB9CiAKICAgICBwdWJsaWMgVHdvU3RhdGVQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ZvbHVtZVByZWZlcmVuY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvVm9sdW1lUHJlZmVyZW5jZS5qYXZhCmluZGV4IGRjNjgzYTYuLjI5ZjI1NDUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvVm9sdW1lUHJlZmVyZW5jZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvVm9sdW1lUHJlZmVyZW5jZS5qYXZhCkBAIC01MSwxNSArNTEsMjQgQEAKICAgICAvKiogTWF5IGJlIG51bGwgaWYgdGhlIGRpYWxvZyBpc24ndCB2aXNpYmxlLiAqLwogICAgIHByaXZhdGUgU2Vla0JhclZvbHVtaXplciBtU2Vla0JhclZvbHVtaXplcjsKIAotICAgIHB1YmxpYyBWb2x1bWVQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICBwdWJsaWMgVm9sdW1lUHJlZmVyZW5jZSgKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Wb2x1bWVQcmVmZXJlbmNlLCAwLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlZvbHVtZVByZWZlcmVuY2UsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBtU3RyZWFtVHlwZSA9IGEuZ2V0SW50KGFuZHJvaWQuUi5zdHlsZWFibGUuVm9sdW1lUHJlZmVyZW5jZV9zdHJlYW1UeXBlLCAwKTsKICAgICAgICAgYS5yZWN5Y2xlKCk7CiAgICAgfQogCisgICAgcHVibGljIFZvbHVtZVByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgVm9sdW1lUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBzZXRTdHJlYW1UeXBlKGludCBzdHJlYW1UeXBlKSB7CiAgICAgICAgIG1TdHJlYW1UeXBlID0gc3RyZWFtVHlwZTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9DYWxsTG9nLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9DYWxsTG9nLmphdmEKaW5kZXggYTZmMjNhOC4uM2IwZDdmZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvQ2FsbExvZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0NhbGxMb2cuamF2YQpAQCAtODYsMTAgKzg2LDggQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUxMT1dfVk9JQ0VNQUlMU19QQVJBTV9LRVkgPSAiYWxsb3dfdm9pY2VtYWlscyI7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnRlbnQgdXJpIHdpdGgge0BsaW5rICNBTExPV19WT0lDRU1BSUxTX1BBUkFNX0tFWX0gc2V0LiBUaGlzIGNhbiBkaXJlY3RseSBiZSB1c2VkIHRvCi0gICAgICAgICAqIGFjY2VzcyBjYWxsIGxvZyBlbnRyaWVzIHRoYXQgaW5jbHVkZXMgdm9pY2VtYWlsIHJlY29yZHMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBoaWRlCisgICAgICAgICAqIENvbnRlbnQgdXJpIHVzZWQgdG8gYWNjZXNzIGNhbGwgbG9nIGVudHJpZXMsIGluY2x1ZGluZyB2b2ljZW1haWwgcmVjb3Jkcy4gWW91IG11c3QgaGF2ZQorICAgICAgICAgKiB0aGUgUkVBRF9DQUxMX0xPRyBhbmQgV1JJVEVfQ0FMTF9MT0cgcGVybWlzc2lvbnMgdG8gcmVhZCBhbmQgd3JpdGUgdG8gdGhlIGNhbGwgbG9nLgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVcmkgQ09OVEVOVF9VUklfV0lUSF9WT0lDRU1BSUwgPSBDT05URU5UX1VSSS5idWlsZFVwb24oKQogICAgICAgICAgICAgICAgIC5hcHBlbmRRdWVyeVBhcmFtZXRlcihBTExPV19WT0lDRU1BSUxTX1BBUkFNX0tFWSwgInRydWUiKQpAQCAtMTI0LDEwICsxMjIsNyBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPVVRHT0lOR19UWVBFID0gMjsKICAgICAgICAgLyoqIENhbGwgbG9nIHR5cGUgZm9yIG1pc3NlZCBjYWxscy4gKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlTU0VEX1RZUEUgPSAzOwotICAgICAgICAvKioKLSAgICAgICAgICogQ2FsbCBsb2cgdHlwZSBmb3Igdm9pY2VtYWlscy4KLSAgICAgICAgICogQGhpZGUKLSAgICAgICAgICovCisgICAgICAgIC8qKiBDYWxsIGxvZyB0eXBlIGZvciB2b2ljZW1haWxzLiAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWT0lDRU1BSUxfVFlQRSA9IDQ7CiAKICAgICAgICAgLyoqCkBAIC0xNjgsOCArMTYzLDYgQEAKICAgICAgICAgICogPFA+CiAgICAgICAgICAqIFR5cGU6IFRFWFQKICAgICAgICAgICogPC9QPgotICAgICAgICAgKgotICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09VTlRSWV9JU08gPSAiY291bnRyeWlzbyI7CiAKQEAgLTIyMCw3ICsyMTMsNiBAQAogICAgICAgICAvKioKICAgICAgICAgICogVVJJIG9mIHRoZSB2b2ljZW1haWwgZW50cnkuIFBvcHVsYXRlZCBvbmx5IGZvciB7QGxpbmsgI1ZPSUNFTUFJTF9UWVBFfS4KICAgICAgICAgICogPFA+VHlwZTogVEVYVDwvUD4KLSAgICAgICAgICogQGhpZGUKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZPSUNFTUFJTF9VUkkgPSAidm9pY2VtYWlsX3VyaSI7CiAKQEAgLTIzOCw1MSArMjMwLDQ4IEBACiAgICAgICAgICAqIDxwPgogICAgICAgICAgKiBUaGUgc3RyaW5nIHJlcHJlc2VudHMgYSBjaXR5LCBzdGF0ZSwgb3IgY291bnRyeSBhc3NvY2lhdGVkIHdpdGggdGhlIG51bWJlci4KICAgICAgICAgICogPFA+VHlwZTogVEVYVDwvUD4KLSAgICAgICAgICogQGhpZGUKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdFT0NPREVEX0xPQ0FUSU9OID0gImdlb2NvZGVkX2xvY2F0aW9uIjsKIAogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGNhY2hlZCBVUkkgdG8gbG9vayB1cCB0aGUgY29udGFjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHBob25lIG51bWJlciwgaWYgaXQgZXhpc3RzLgotICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGN1cnJlbnQsIGlmIHRoZSBjb250YWN0IGluZm9ybWF0aW9uCi0gICAgICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG51bWJlciBoYXMgY2hhbmdlZC4KKyAgICAgICAgICogVGhpcyB2YWx1ZSBtYXkgbm90IGJlIGN1cnJlbnQgaWYgdGhlIGNvbnRhY3QgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgbnVtYmVyCisgICAgICAgICAqIGhhcyBjaGFuZ2VkLgogICAgICAgICAgKiA8UD5UeXBlOiBURVhUPC9QPgotICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FDSEVEX0xPT0tVUF9VUkkgPSAibG9va3VwX3VyaSI7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBjYWNoZWQgcGhvbmUgbnVtYmVyIG9mIHRoZSBjb250YWN0IHdoaWNoIG1hdGNoZXMgdGhpcyBlbnRyeSwgaWYgaXQgZXhpc3RzLgotICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGN1cnJlbnQsIGlmIHRoZSBjb250YWN0IGluZm9ybWF0aW9uCi0gICAgICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG51bWJlciBoYXMgY2hhbmdlZC4KKyAgICAgICAgICogVGhpcyB2YWx1ZSBtYXkgbm90IGJlIGN1cnJlbnQgaWYgdGhlIGNvbnRhY3QgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgbnVtYmVyCisgICAgICAgICAqIGhhcyBjaGFuZ2VkLgogICAgICAgICAgKiA8UD5UeXBlOiBURVhUPC9QPgotICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FDSEVEX01BVENIRURfTlVNQkVSID0gIm1hdGNoZWRfbnVtYmVyIjsKIAogICAgICAgICAvKioKLSAgICAgICAgICogVGhlIGNhY2hlZCBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHBob25lIG51bWJlciwgaWYgaXQgZXhpc3RzLgotICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGN1cnJlbnQsIGlmIHRoZSBjb250YWN0IGluZm9ybWF0aW9uCi0gICAgICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG51bWJlciBoYXMgY2hhbmdlZC4KKyAgICAgICAgICogVGhlIGNhY2hlZCBub3JtYWxpemVkKEUxNjQpIHZlcnNpb24gb2YgdGhlIHBob25lIG51bWJlciwgaWYgaXQgZXhpc3RzLgorICAgICAgICAgKiBUaGlzIHZhbHVlIG1heSBub3QgYmUgY3VycmVudCBpZiB0aGUgY29udGFjdCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBudW1iZXIKKyAgICAgICAgICogaGFzIGNoYW5nZWQuCiAgICAgICAgICAqIDxQPlR5cGU6IFRFWFQ8L1A+Ci0gICAgICAgICAqIEBoaWRlCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQUNIRURfTk9STUFMSVpFRF9OVU1CRVIgPSAibm9ybWFsaXplZF9udW1iZXIiOwogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgY2FjaGVkIHBob3RvIGlkIG9mIHRoZSBwaWN0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGhvbmUgbnVtYmVyLCBpZiBpdCBleGlzdHMuCi0gICAgICAgICAqIFRoaXMgdmFsdWUgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgY3VycmVudCwgaWYgdGhlIGNvbnRhY3QgaW5mb3JtYXRpb24KLSAgICAgICAgICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgbnVtYmVyIGhhcyBjaGFuZ2VkLgorICAgICAgICAgKiBUaGlzIHZhbHVlIG1heSBub3QgYmUgY3VycmVudCBpZiB0aGUgY29udGFjdCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBudW1iZXIKKyAgICAgICAgICogaGFzIGNoYW5nZWQuCiAgICAgICAgICAqIDxQPlR5cGU6IElOVEVHRVIgKGxvbmcpPC9QPgotICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FDSEVEX1BIT1RPX0lEID0gInBob3RvX2lkIjsKIAogICAgICAgICAvKioKLSAgICAgICAgICogVGhlIGNhY2hlZCBmb3JtYXR0ZWQgcGhvbmUgbnVtYmVyLgotICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHByZXNlbnQuCisgICAgICAgICAqIFRoZSBjYWNoZWQgcGhvbmUgbnVtYmVyLCBmb3JtYXR0ZWQgd2l0aCBmb3JtYXR0aW5nIHJ1bGVzIGJhc2VkIG9uIHRoZSBjb3VudHJ5IHRoZQorICAgICAgICAgKiB1c2VyIHdhcyBpbiB3aGVuIHRoZSBjYWxsIHdhcyBtYWRlIG9yIHJlY2VpdmVkLgorICAgICAgICAgKiBUaGlzIHZhbHVlIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHByZXNlbnQsIGFuZCBtYXkgbm90IGJlIGN1cnJlbnQgaWYgdGhlIGNvbnRhY3QKKyAgICAgICAgICogaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgbnVtYmVyCisgICAgICAgICAqIGhhcyBjaGFuZ2VkLgogICAgICAgICAgKiA8UD5UeXBlOiBURVhUPC9QPgotICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FDSEVEX0ZPUk1BVFRFRF9OVU1CRVIgPSAiZm9ybWF0dGVkX251bWJlciI7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9Db250YWN0cy5qYXZhCmluZGV4IGM3ZTNjMDguLjllMmFhY2QgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMuamF2YQpAQCAtMjYsNyArMjYsNiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdC5qYXZhCmluZGV4IGIxNmRmMjguLjFiNWNjNjggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0LmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKIAogaW1wb3J0IGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudDsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQWN0aXZpdHlOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyQ2xpZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJPcGVyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKQEAgLTQwLDE0ICs0MSwxMiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUGFpcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKIAogaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CiAKIC8qKgogICogPHA+CkBAIC0xNjUsOCArMTY0LDYgQEAKICAgICAgKiB7QGxpbmsgQ29udGFjdHMjQ09OVEVOVF9TVFJFUVVFTlRfRklMVEVSX1VSSX0sIHdoaWNoIHJlcXVpcmVzIHRoZSBDb250YWN0c1Byb3ZpZGVyIHRvCiAgICAgICogcmV0dXJuIG9ubHkgcGhvbmUtcmVsYXRlZCByZXN1bHRzLiBGb3IgZXhhbXBsZSwgZnJlcXVlbnRseSBjb250YWN0ZWQgcGVyc29uIGxpc3Qgc2hvdWxkCiAgICAgICogaW5jbHVkZSBwZXJzb25zIGNvbnRhY3RlZCB2aWEgcGhvbmUgKG5vdCBlbWFpbCwgc21zLCBldGMuKQotICAgICAqCi0gICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJFUVVFTlRfUEhPTkVfT05MWSA9ICJzdHJlcXVlbnRfcGhvbmVfb25seSI7CiAKQEAgLTE5MSw4ICsxODgsNiBAQAogICAgICAqIHtAbGluayBDb21tb25EYXRhS2luZHMuRW1haWwjQ09OVEVOVF9VUkl9LCBhbmQKICAgICAgKiB7QGxpbmsgQ29tbW9uRGF0YUtpbmRzLlN0cnVjdHVyZWRQb3N0YWwjQ09OVEVOVF9VUkl9LgogICAgICAqIFRoaXMgZW5hYmxlcyBhIGNvbnRlbnQgcHJvdmlkZXIgdG8gcmVtb3ZlIGR1cGxpY2F0ZSBlbnRyaWVzIGluIHJlc3VsdHMuCi0gICAgICoKLSAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTU9WRV9EVVBMSUNBVEVfRU5UUklFUyA9ICJyZW1vdmVfZHVwbGljYXRlX2VudHJpZXMiOwogCkBAIC0yNDksMzAgKzI0NCwyMSBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQVVUSE9SSVpFRF9VUkkgPSAiYXV0aG9yaXplZF91cmkiOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBQcmVmZXJlbmNlcyB7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIEEga2V5IGluIHRoZSB7QGxpbmsgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncyBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzfSBwcm92aWRlcgogICAgICAgICAgKiB0aGF0IHN0b3JlcyB0aGUgcHJlZmVycmVkIHNvcnRpbmcgb3JkZXIgZm9yIGNvbnRhY3RzIChieSBnaXZlbiBuYW1lIHZzLiBieSBmYW1pbHkgbmFtZSkuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBoaWRlCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT1JUX09SREVSID0gImFuZHJvaWQuY29udGFjdHMuU09SVF9PUkRFUiI7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSB2YWx1ZSBmb3IgdGhlIFNPUlRfT1JERVIga2V5IGNvcnJlc3BvbmRpbmcgdG8gc29ydGluZyBieSBnaXZlbiBuYW1lIGZpcnN0LgotICAgICAgICAgKgotICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09SVF9PUkRFUl9QUklNQVJZID0gMTsKIAogICAgICAgICAvKioKICAgICAgICAgICogVGhlIHZhbHVlIGZvciB0aGUgU09SVF9PUkRFUiBrZXkgY29ycmVzcG9uZGluZyB0byBzb3J0aW5nIGJ5IGZhbWlseSBuYW1lIGZpcnN0LgotICAgICAgICAgKgotICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09SVF9PUkRFUl9BTFRFUk5BVElWRSA9IDI7CiAKQEAgLTI4MCwyMiArMjY2LDE2IEBACiAgICAgICAgICAqIEEga2V5IGluIHRoZSB7QGxpbmsgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncyBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzfSBwcm92aWRlcgogICAgICAgICAgKiB0aGF0IHN0b3JlcyB0aGUgcHJlZmVycmVkIGRpc3BsYXkgb3JkZXIgZm9yIGNvbnRhY3RzIChnaXZlbiBuYW1lIGZpcnN0IHZzLiBmYW1pbHkKICAgICAgICAgICogbmFtZSBmaXJzdCkuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBoaWRlCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNQTEFZX09SREVSID0gImFuZHJvaWQuY29udGFjdHMuRElTUExBWV9PUkRFUiI7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSB2YWx1ZSBmb3IgdGhlIERJU1BMQVlfT1JERVIga2V5IGNvcnJlc3BvbmRpbmcgdG8gc2hvd2luZyB0aGUgZ2l2ZW4gbmFtZSBmaXJzdC4KLSAgICAgICAgICoKLSAgICAgICAgICogQGhpZGUKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERJU1BMQVlfT1JERVJfUFJJTUFSWSA9IDE7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSB2YWx1ZSBmb3IgdGhlIERJU1BMQVlfT1JERVIga2V5IGNvcnJlc3BvbmRpbmcgdG8gc2hvd2luZyB0aGUgZmFtaWx5IG5hbWUgZmlyc3QuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBoaWRlCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESVNQTEFZX09SREVSX0FMVEVSTkFUSVZFID0gMjsKICAgICB9CkBAIC04MjUsMTAgKzgwNSw5IEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVJSRUQgPSAic3RhcnJlZCI7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBwb3NpdGlvbiBhdCB3aGljaCB0aGUgY29udGFjdCBpcyBwaW5uZWQuIElmIHtAbGluayBQaW5uZWRQb3NpdGlvbnMuVU5QSU5ORUR9LAorICAgICAgICAgKiBUaGUgcG9zaXRpb24gYXQgd2hpY2ggdGhlIGNvbnRhY3QgaXMgcGlubmVkLiBJZiB7QGxpbmsgUGlubmVkUG9zaXRpb25zI1VOUElOTkVEfSwKICAgICAgICAgICogdGhlIGNvbnRhY3QgaXMgbm90IHBpbm5lZC4gQWxzbyBzZWUge0BsaW5rIFBpbm5lZFBvc2l0aW9uc30uCiAgICAgICAgICAqIDxQPlR5cGU6IElOVEVHRVIgPC9QPgotICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUElOTkVEID0gInBpbm5lZCI7CiAKQEAgLTE0NjgsMTcgKzE0NDcsNDMgQEAKICAgICAgICAgICogQmFzZSB7QGxpbmsgVXJpfSBmb3IgcmVmZXJlbmNpbmcgbXVsdGlwbGUge0BsaW5rIENvbnRhY3RzfSBlbnRyeSwKICAgICAgICAgICogY3JlYXRlZCBieSBhcHBlbmRpbmcge0BsaW5rICNMT09LVVBfS0VZfSB1c2luZwogICAgICAgICAgKiB7QGxpbmsgVXJpI3dpdGhBcHBlbmRlZFBhdGgoVXJpLCBTdHJpbmcpfS4gVGhlIGxvb2t1cCBrZXlzIGhhdmUgdG8gYmUKLSAgICAgICAgICogZW5jb2RlZCBhbmQgam9pbmVkIHdpdGggdGhlIGNvbG9uICgiOiIpIHNlcGFyYXRvci4gVGhlIHJlc3VsdGluZyBzdHJpbmcKLSAgICAgICAgICogaGFzIHRvIGJlIGVuY29kZWQgYWdhaW4uIFByb3ZpZGVzCi0gICAgICAgICAqIHtAbGluayBPcGVuYWJsZUNvbHVtbnN9IGNvbHVtbnMgd2hlbiBxdWVyaWVkLCBvciByZXR1cm5zIHRoZQorICAgICAgICAgKiBqb2luZWQgd2l0aCB0aGUgY29sb24gKCI6Iikgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdGluZyBzdHJpbmcgZW5jb2RlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogUHJvdmlkZXMge0BsaW5rIE9wZW5hYmxlQ29sdW1uc30gY29sdW1ucyB3aGVuIHF1ZXJpZWQsIG9yIHJldHVybnMgdGhlCiAgICAgICAgICAqIHJlZmVyZW5jZWQgY29udGFjdCBmb3JtYXR0ZWQgYXMgYSB2Q2FyZCB3aGVuIG9wZW5lZCB0aHJvdWdoCiAgICAgICAgICAqIHtAbGluayBDb250ZW50UmVzb2x2ZXIjb3BlbkFzc2V0RmlsZURlc2NyaXB0b3IoVXJpLCBTdHJpbmcpfS4KICAgICAgICAgICoKLSAgICAgICAgICogVGhpcyBpcyBwcml2YXRlIEFQSSBiZWNhdXNlIHdlIGRvIG5vdCBoYXZlIGEgd2VsbC1kZWZpbmVkIHdheSB0bwotICAgICAgICAgKiBzcGVjaWZ5IHNldmVyYWwgZW50aXRpZXMgeWV0LiBUaGUgZm9ybWF0IG9mIHRoaXMgVXJpIG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlCi0gICAgICAgICAqIG9yIHRoZSBVcmkgbWlnaHQgYmUgY29tcGxldGVseSByZW1vdmVkLgorICAgICAgICAgKiA8cD4KKyAgICAgICAgICogVXNhZ2UgZXhhbXBsZToKKyAgICAgICAgICogPGRsPgorICAgICAgICAgKiA8ZHQ+VGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgY3JlYXRlcyBhIG11bHRpLXZjYXJkIFVSSSB0aGF0IHJlZmVyZW5jZXMgYWxsIHRoZQorICAgICAgICAgKiBjb250YWN0cyBpbiBhIHVzZXIncyBkYXRhYmFzZS48L2R0PgorICAgICAgICAgKiA8ZGQ+CiAgICAgICAgICAqCi0gICAgICAgICAqIEBoaWRlCisgICAgICAgICAqIDxwcmU+CisgICAgICAgICAqIHB1YmxpYyBVcmkgZ2V0QWxsQ29udGFjdHNWY2FyZFVyaSgpIHsKKyAgICAgICAgICogICAgIEN1cnNvciBjdXJzb3IgPSBnZXRBY3Rpdml0eSgpLmdldENvbnRlbnRSZXNvbHZlcigpLnF1ZXJ5KENvbnRhY3RzLkNPTlRFTlRfVVJJLAorICAgICAgICAgKiAgICAgICAgIG5ldyBTdHJpbmdbXSB7Q29udGFjdHMuTE9PS1VQX0tFWX0sIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICAgKiAgICAgaWYgKGN1cnNvciA9PSBudWxsKSB7CisgICAgICAgICAqICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAqICAgICB9CisgICAgICAgICAqICAgICB0cnkgeworICAgICAgICAgKiAgICAgICAgIFN0cmluZ0J1aWxkZXIgdXJpTGlzdEJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICAgKiAgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgICAqICAgICAgICAgd2hpbGUgKGN1cnNvci5tb3ZlVG9OZXh0KCkpIHsKKyAgICAgICAgICogICAgICAgICAgICAgaWYgKGluZGV4ICE9IDApIHVyaUxpc3RCdWlsZGVyLmFwcGVuZCgnOicpOworICAgICAgICAgKiAgICAgICAgICAgICB1cmlMaXN0QnVpbGRlci5hcHBlbmQoY3Vyc29yLmdldFN0cmluZygwKSk7CisgICAgICAgICAqICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAqICAgICAgICAgfQorICAgICAgICAgKiAgICAgICAgIHJldHVybiBVcmkud2l0aEFwcGVuZGVkUGF0aChDb250YWN0cy5DT05URU5UX01VTFRJX1ZDQVJEX1VSSSwKKyAgICAgICAgICogICAgICAgICAgICAgICAgIFVyaS5lbmNvZGUodXJpTGlzdEJ1aWxkZXIudG9TdHJpbmcoKSkpOworICAgICAgICAgKiAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICogICAgICAgICBjdXJzb3IuY2xvc2UoKTsKKyAgICAgICAgICogICAgIH0KKyAgICAgICAgICogfQorICAgICAgICAgKiA8L3ByZT4KKyAgICAgICAgICoKKyAgICAgICAgICogPC9wPgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVcmkgQ09OVEVOVF9NVUxUSV9WQ0FSRF9VUkkgPSBVcmkud2l0aEFwcGVuZGVkUGF0aChDT05URU5UX1VSSSwKICAgICAgICAgICAgICAgICAiYXNfbXVsdGlfdmNhcmQiKTsKQEAgLTQ3OTIsMTEgKzQ3OTcsMTEgQEAKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfVFlQRSA9ICJ2bmQuYW5kcm9pZC5jdXJzb3IuZGlyL3Bob25lX2xvb2t1cCI7CiAKLSAgICAgICAvKioKLSAgICAgICAgKiBCb29sZWFuIHBhcmFtZXRlciB0aGF0IGlzIHVzZWQgdG8gbG9vayB1cCBhIFNJUCBhZGRyZXNzLgotICAgICAgICAqCi0gICAgICAgICogQGhpZGUKLSAgICAgICAgKi8KKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoaXMgYm9vbGVhbiBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWUsIHRoZW4gdGhlIGFwcGVuZGVkIHF1ZXJ5IGlzIHRyZWF0ZWQgYXMgYQorICAgICAgICAgKiBTSVAgYWRkcmVzcyBhbmQgdGhlIGxvb2t1cCB3aWxsIGJlIHBlcmZvcm1lZCBhZ2FpbnN0IFNJUCBhZGRyZXNzZXMgaW4gdGhlIHVzZXIncworICAgICAgICAgKiBjb250YWN0cy4KKyAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX1BBUkFNRVRFUl9TSVBfQUREUkVTUyA9ICJzaXAiOwogICAgIH0KIApAQCAtNTMwNSw4ICs1MzEwLDYgQEAKICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICogVGhlIHN0eWxlIHVzZWQgZm9yIGNvbWJpbmluZyBnaXZlbi9taWRkbGUvZmFtaWx5IG5hbWUgaW50byBhIGZ1bGwgbmFtZS4KICAgICAgICAgICAgICAqIFNlZSB7QGxpbmsgQ29udGFjdHNDb250cmFjdC5GdWxsTmFtZVN0eWxlfS4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBAaGlkZQogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGVUxMX05BTUVfU1RZTEUgPSBEQVRBMTA7CiAKQEAgLTY4OTgsOCArNjkwMSw2IEBACiAgICAgICAgICAqIGVhY2ggY29sdW1uLiBGb3IgZXhhbXBsZSB0aGUgbWVhbmluZyBmb3Ige0BsaW5rIFBob25lfSdzIHR5cGUgaXMgZGlmZmVyZW50IHRoYW4KICAgICAgICAgICoge0BsaW5rIFNpcEFkZHJlc3N9J3MuCiAgICAgICAgICAqIDwvcD4KLSAgICAgICAgICoKLSAgICAgICAgICogQGhpZGUKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQ2FsbGFibGUgaW1wbGVtZW50cyBEYXRhQ29sdW1uc1dpdGhKb2lucywgQ29tbW9uQ29sdW1ucyB7CiAgICAgICAgICAgICAvKioKQEAgLTc3NTcsNyArNzc1OCw2IEBACiAgICAgICoge0BsaW5rIFBpbm5lZFBvc2l0aW9ucyNTVEFSX1dIRU5fUElOTklOR30gdG8gdHJ1ZSB0byBmb3JjZSBhbGwgcGlubmVkIGFuZCB1bnBpbm5lZAogICAgICAqIGNvbnRhY3RzIHRvIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnJlZCBhbmQgdW5zdGFycmVkLgogICAgICAqIDwvcD4KLSAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUGlubmVkUG9zaXRpb25zIHsKIApAQCAtNzk4MSw3ICs3OTgxLDcgQEAKICAgICAgICAgICAgIC8vIFRyaWdnZXIgd2l0aCBvYnRhaW5lZCByZWN0YW5nbGUKICAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBjb21wb3NlUXVpY2tDb250YWN0c0ludGVudChjb250ZXh0LCB0YXJnZXQsIGxvb2t1cFVyaSwgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZU1pbWVzKTsKLSAgICAgICAgICAgIGNvbnRleHQuc3RhcnRBY3Rpdml0eShpbnRlbnQpOworICAgICAgICAgICAgc3RhcnRBY3Rpdml0eVdpdGhFcnJvclRvYXN0KGNvbnRleHQsIGludGVudCk7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTgwMTQsNyArODAxNCwxNiBAQAogICAgICAgICAgICAgICAgIFN0cmluZ1tdIGV4Y2x1ZGVNaW1lcykgewogICAgICAgICAgICAgSW50ZW50IGludGVudCA9IGNvbXBvc2VRdWlja0NvbnRhY3RzSW50ZW50KGNvbnRleHQsIHRhcmdldCwgbG9va3VwVXJpLCBtb2RlLAogICAgICAgICAgICAgICAgICAgICBleGNsdWRlTWltZXMpOwotICAgICAgICAgICAgY29udGV4dC5zdGFydEFjdGl2aXR5KGludGVudCk7CisgICAgICAgICAgICBzdGFydEFjdGl2aXR5V2l0aEVycm9yVG9hc3QoY29udGV4dCwgaW50ZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc3RhcnRBY3Rpdml0eVdpdGhFcnJvclRvYXN0KENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgY29udGV4dC5zdGFydEFjdGl2aXR5KGludGVudCk7CisgICAgICAgICAgICB9IGNhdGNoIChBY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBUb2FzdC5tYWtlVGV4dChjb250ZXh0LCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5xdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLmphdmEKaW5kZXggMDRmM2YwYS4uODQzYTQ2OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5qYXZhCkBAIC0zNDA3LDYgKzM0MDcsMTEgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DS19QQVRURVJOX1ZJU0lCTEUgPSAibG9ja19wYXR0ZXJuX3Zpc2libGVfcGF0dGVybiI7CiAKICAgICAgICAgLyoqCisgICAgICAgICAqIFdoZXRoZXIgdGhlIE5GQyB1bmxvY2sgZmVhdHVyZSBpcyBlbmFibGVkICgwID0gZmFsc2UsIDEgPSB0cnVlKQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkZDX1VOTE9DS19FTkFCTEVEID0gIm5mY191bmxvY2tfZW5hYmxlZCI7CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIFdoZXRoZXIgbG9jayBwYXR0ZXJuIHdpbGwgdmlicmF0ZSBhcyB1c2VyIGVudGVycyAoMCA9IGZhbHNlLCAxID0KICAgICAgICAgICogdHJ1ZSkKICAgICAgICAgICoKQEAgLTM3NDEsNiArMzc0NiwxNiBAQAogICAgICAgICAgICAgICAgICJhY2Nlc3NpYmlsaXR5X2NhcHRpb25pbmdfZWRnZV9jb2xvciI7CiAKICAgICAgICAgLyoqCisgICAgICAgICAqIEludGVnZXIgcHJvcGVydHkgdGhhdCBzcGVjaWZlcyB0aGUgd2luZG93IGNvbG9yIGZvciBjYXB0aW9ucyBhcyBhCisgICAgICAgICAqIHBhY2tlZCAzMi1iaXQgY29sb3IuCisgICAgICAgICAqCisgICAgICAgICAqIEBzZWUgYW5kcm9pZC5ncmFwaGljcy5Db2xvciNhcmdiCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFU1NJQklMSVRZX0NBUFRJT05JTkdfV0lORE9XX0NPTE9SID0KKyAgICAgICAgICAgICAgICAiYWNjZXNzaWJpbGl0eV9jYXB0aW9uaW5nX3dpbmRvd19jb2xvciI7CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIFN0cmluZyBwcm9wZXJ0eSB0aGF0IHNwZWNpZmllcyB0aGUgdHlwZWZhY2UgZm9yIGNhcHRpb25zLCBvbmUgb2Y6CiAgICAgICAgICAqIDx1bD4KICAgICAgICAgICogPGxpPkRFRkFVTFQKQEAgLTM3NjQsNiArMzc3OSw5NyBAQAogICAgICAgICAgICAgICAgICJhY2Nlc3NpYmlsaXR5X2NhcHRpb25pbmdfZm9udF9zY2FsZSI7CiAKICAgICAgICAgLyoqCisgICAgICAgICAqIFNldHRpbmcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgcXVpY2sgc2V0dGluZyB0aWxlIGZvciBkaXNwbGF5CisgICAgICAgICAqIGNvbG9yIGludmVyc2lvbiBpcyBlbmFibGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9RVUlDS19TRVRUSU5HX0VOQUJMRUQgPQorICAgICAgICAgICAgICAgICJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfaW52ZXJzaW9uX3F1aWNrX3NldHRpbmdfZW5hYmxlZCI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHRpbmcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciBkaXNwbGF5IGNvbG9yIGludmVyc2lvbiBpcyBlbmFibGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9FTkFCTEVEID0KKyAgICAgICAgICAgICAgICAiYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2ludmVyc2lvbl9lbmFibGVkIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogSW50ZWdlciBwcm9wZXJ0eSB0aGF0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiBjb2xvciBpbnZlcnNpb24gdG8KKyAgICAgICAgICogcGVyZm9ybS4gVmFsaWQgdmFsdWVzIGFyZSBkZWZpbmVkIGluIEFjY2Vzc2liaWxpdHlNYW5hZ2VyLgorICAgICAgICAgKgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTiA9CisgICAgICAgICAgICAgICAgImFjY2Vzc2liaWxpdHlfZGlzcGxheV9pbnZlcnNpb24iOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXR0aW5nIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHF1aWNrIHNldHRpbmcgdGlsZSBmb3IgZGlzcGxheQorICAgICAgICAgKiBjb2xvciBzcGFjZSBhZGp1c3RtZW50IGlzIGVuYWJsZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUl9RVUlDS19TRVRUSU5HX0VOQUJMRUQgPQorICAgICAgICAgICAgICAgICJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9xdWlja19zZXR0aW5nX2VuYWJsZWQiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXR0aW5nIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgZGlzcGxheSBjb2xvciBzcGFjZSBhZGp1c3RtZW50IGlzCisgICAgICAgICAqIGVuYWJsZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUl9FTkFCTEVEID0KKyAgICAgICAgICAgICAgICAiYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfZW5hYmxlZCI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVnZXIgcHJvcGVydHkgdGhhdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgY29sb3Igc3BhY2UgYWRqdXN0bWVudCB0bworICAgICAgICAgKiBwZXJmb3JtLiBWYWxpZCB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gQWNjZXNzaWJpbGl0eU1hbmFnZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUiA9CisgICAgICAgICAgICAgICAgImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0dGluZyB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSBxdWljayBzZXR0aW5nIHRpbGUgZm9yIGRpc3BsYXkKKyAgICAgICAgICogY29udHJhc3QgZW5oYW5jZW1lbnQgaXMgZW5hYmxlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQGhpZGUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT05UUkFTVF9RVUlDS19TRVRUSU5HX0VOQUJMRUQgPQorICAgICAgICAgICAgICAgICJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfY29udHJhc3RfcXVpY2tfc2V0dGluZ19lbmFibGVkIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0dGluZyB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIGRpc3BsYXkgY29udHJhc3QgZW5oYW5jZW1lbnQgaXMKKyAgICAgICAgICogZW5hYmxlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQGhpZGUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT05UUkFTVF9FTkFCTEVEID0KKyAgICAgICAgICAgICAgICAiYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2NvbnRyYXN0X2VuYWJsZWQiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBGbG9hdGluZyBwb2ludCBwcm9wZXJ0eSB0aGF0IHNwZWNpZmllcyBkaXNwbGF5IGNvbnRyYXN0IGFkanVzdG1lbnQuCisgICAgICAgICAqIFZhbGlkIHJhbmdlIGlzIFswLCAuLi5dIHdoZXJlIDAgaXMgZ3JheSwgMSBpcyBub3JtYWwsIGFuZCBoaWdoZXIKKyAgICAgICAgICogdmFsdWVzIGluZGljYXRlIGVuaGFuY2VkIGNvbnRyYXN0LgorICAgICAgICAgKgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTlRSQVNUID0KKyAgICAgICAgICAgICAgICAiYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2NvbnRyYXN0IjsKKworICAgICAgICAvKioKKyAgICAgICAgICogRmxvYXRpbmcgcG9pbnQgcHJvcGVydHkgdGhhdCBzcGVjaWZpZXMgZGlzcGxheSBicmlnaHRuZXNzIGFkanVzdG1lbnQuCisgICAgICAgICAqIFZhbGlkIHJhbmdlIGlzIFstMSwgMV0gd2hlcmUgLTEgaXMgYmxhY2ssIDAgaXMgZGVmYXVsdCwgYW5kIDEgaXMKKyAgICAgICAgICogd2hpdGUuCisgICAgICAgICAqCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFU1NJQklMSVRZX0RJU1BMQVlfQlJJR0hUTkVTUyA9CisgICAgICAgICAgICAgICAgImFjY2Vzc2liaWxpdHlfZGlzcGxheV9icmlnaHRuZXNzIjsKKworICAgICAgICAvKioKICAgICAgICAgICogVGhlIHRpbW91dCBmb3IgY29uc2lkZXJpbmcgYSBwcmVzcyB0byBiZSBhIGxvbmcgcHJlc3MgaW4gbWlsbGlzZWNvbmRzLgogICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VyU2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS90ZXh0c2VydmljZS9TcGVsbENoZWNrZXJTZXJ2aWNlLmphdmEKaW5kZXggNzdiMjJlZC4uYWNmZWY4MiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS90ZXh0c2VydmljZS9TcGVsbENoZWNrZXJTZXJ2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS90ZXh0c2VydmljZS9TcGVsbENoZWNrZXJTZXJ2aWNlLmphdmEKQEAgLTMyLDcgKzMyLDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcudGV4dHNlcnZpY2UuU2VudGVuY2VTdWdnZXN0aW9uc0luZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LnRleHRzZXJ2aWNlLlN1Z2dlc3Rpb25zSW5mbzsKIGltcG9ydCBhbmRyb2lkLnZpZXcudGV4dHNlcnZpY2UuVGV4dEluZm87Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuU3BlbGxDaGVja2VyOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwogaW1wb3J0IGphdmEudGV4dC5CcmVha0l0ZXJhdG9yOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS93YWxscGFwZXIvV2FsbHBhcGVyU2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS93YWxscGFwZXIvV2FsbHBhcGVyU2VydmljZS5qYXZhCmluZGV4IDVkYjgxNjguLjAzY2U0ZTAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvd2FsbHBhcGVyL1dhbGxwYXBlclNlcnZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL3dhbGxwYXBlci9XYWxscGFwZXJTZXJ2aWNlLmphdmEKQEAgLTM4LDcgKzM4LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2dQcmludGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5JV2luZG93U2Vzc2lvbjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC9zcmVjL1JlY29nbml6ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC9zcmVjL1JlY29nbml6ZXIuamF2YQppbmRleCAxMzk2MjA0Li42YzQ5MWEwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvc3JlYy9SZWNvZ25pemVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3NyZWMvUmVjb2duaXplci5qYXZhCkBAIC0yMiw4ICsyMiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5zcGVlY2guc3JlYzsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9BYnN0cmFjdEV2ZW50TG9nZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0Fic3RyYWN0RXZlbnRMb2dnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y4NjU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9BYnN0cmFjdEV2ZW50TG9nZ2VyLmphdmEKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgYW5kcm9pZC5zcGVlY2gudHRzOworCitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKKworLyoqCisgKiBCYXNlIGNsYXNzIGZvciBzdG9yaW5nIGRhdGEgYWJvdXQgYSBnaXZlbiBzcGVlY2ggc3ludGhlc2lzIHJlcXVlc3QgdG8gdGhlCisgKiBldmVudCBsb2dzLiBUaGUgZGF0YSB0aGF0IGlzIGxvZ2dlZCBkZXBlbmRzIG9uIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gTm90ZQorICogdGhhdCB7QGxpbmsgQWJzdHJhY3RFdmVudExvZ2dlciNvbkF1ZGlvRGF0YVdyaXR0ZW4oKX0gYW5kCisgKiB7QGxpbmsgQWJzdHJhY3RFdmVudExvZ2dlciNvbkVuZ2luZUNvbXBsZXRlKCl9IG11c3QgYmUgY2FsbGVkIGZyb20gYSBzaW5nbGUKKyAqIHRocmVhZCAodXN1YWxseSB0aGUgYXVkaW8gcGxheWJhY2sgdGhyZWFkfS4KKyAqLworYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFdmVudExvZ2dlciB7CisgICAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBtU2VydmljZUFwcDsKKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IG1DYWxsZXJVaWQ7CisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBtQ2FsbGVyUGlkOworICAgIHByb3RlY3RlZCBmaW5hbCBsb25nIG1SZWNlaXZlZFRpbWU7CisgICAgcHJvdGVjdGVkIGxvbmcgbVBsYXliYWNrU3RhcnRUaW1lID0gLTE7CisKKyAgICBwcml2YXRlIHZvbGF0aWxlIGxvbmcgbVJlcXVlc3RQcm9jZXNzaW5nU3RhcnRUaW1lID0gLTE7CisgICAgcHJpdmF0ZSB2b2xhdGlsZSBsb25nIG1FbmdpbmVTdGFydFRpbWUgPSAtMTsKKyAgICBwcml2YXRlIHZvbGF0aWxlIGxvbmcgbUVuZ2luZUNvbXBsZXRlVGltZSA9IC0xOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1Mb2dXcml0dGVuID0gZmFsc2U7CisKKyAgICBBYnN0cmFjdEV2ZW50TG9nZ2VyKGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQsIFN0cmluZyBzZXJ2aWNlQXBwKSB7CisgICAgICAgIG1DYWxsZXJVaWQgPSBjYWxsZXJVaWQ7CisgICAgICAgIG1DYWxsZXJQaWQgPSBjYWxsZXJQaWQ7CisgICAgICAgIG1TZXJ2aWNlQXBwID0gc2VydmljZUFwcDsKKyAgICAgICAgbVJlY2VpdmVkVGltZSA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE5vdGlmaWVzIHRoZSBsb2dnZXIgdGhhdCB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gc2VsZWN0ZWQgZnJvbQorICAgICAqIHRoZSBwcm9jZXNzaW5nIHF1ZXVlIGZvciBwcm9jZXNzaW5nLiBFbmdpbmUgbGF0ZW5jeSAvIHRvdGFsIHRpbWUKKyAgICAgKiBpcyBtZWFzdXJlZCBmcm9tIHRoaXMgYmFzZWxpbmUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgb25SZXF1ZXN0UHJvY2Vzc2luZ1N0YXJ0KCkgeworICAgICAgICBtUmVxdWVzdFByb2Nlc3NpbmdTdGFydFRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOb3RpZmllcyB0aGUgbG9nZ2VyIHRoYXQgYSBjaHVuayBvZiBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20KKyAgICAgKiB0aGUgZW5naW5lLiBNaWdodCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgb25FbmdpbmVEYXRhUmVjZWl2ZWQoKSB7CisgICAgICAgIGlmIChtRW5naW5lU3RhcnRUaW1lID09IC0xKSB7CisgICAgICAgICAgICBtRW5naW5lU3RhcnRUaW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOb3RpZmllcyB0aGUgbG9nZ2VyIHRoYXQgdGhlIGVuZ2luZSBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBkYXRhLgorICAgICAqIFdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvbkVuZ2luZUNvbXBsZXRlKCkgeworICAgICAgICBtRW5naW5lQ29tcGxldGVUaW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTm90aWZpZXMgdGhlIGxvZ2dlciB0aGF0IGF1ZGlvIHBsYXliYWNrIGhhcyBzdGFydGVkIGZvciBzb21lIHNlY3Rpb24KKyAgICAgKiBvZiB0aGUgc3ludGhlc2lzLiBUaGlzIGlzIG5vcm1hbGx5IHNvbWUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIGVuZ2luZQorICAgICAqIGhhcyBzeW50aGVzaXplZCBkYXRhIGFuZCB2YXJpZXMgZGVwZW5kaW5nIG9uIHV0dGVyYW5jZXMgYW5kCisgICAgICogb3RoZXIgYXVkaW8gY3VycmVudGx5IGluIHRoZSBxdWV1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvbkF1ZGlvRGF0YVdyaXR0ZW4oKSB7CisgICAgICAgIC8vIEZvciBub3csIGtlZXAgdHJhY2sgb2Ygb25seSB0aGUgZmlyc3QgY2h1bmsgb2YgYXVkaW8KKyAgICAgICAgLy8gdGhhdCB3YXMgcGxheWVkLgorICAgICAgICBpZiAobVBsYXliYWNrU3RhcnRUaW1lID09IC0xKSB7CisgICAgICAgICAgICBtUGxheWJhY2tTdGFydFRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE5vdGlmaWVzIHRoZSBsb2dnZXIgdGhhdCB0aGUgY3VycmVudCBzeW50aGVzaXMgaGFzIGNvbXBsZXRlZC4KKyAgICAgKiBBbGwgYXZhaWxhYmxlIGRhdGEgaXMgbm90IGxvZ2dlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvbkNvbXBsZXRlZChpbnQgc3RhdHVzQ29kZSkgeworICAgICAgICBpZiAobUxvZ1dyaXR0ZW4pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1Mb2dXcml0dGVuID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxvbmcgY29tcGxldGlvblRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKKworICAgICAgICAvLyBXZSBkb24ndCByZXBvcnQgbGF0ZW5jeSBmb3Igc3RvcHBlZCBzeW50aGVzZXMgYmVjYXVzZSB0aGVpciBvdmVyYWxsCisgICAgICAgIC8vIHRvdGFsIHRpbWUgc3BlbnQgd2lsbCBiZSBpbmFjY3VyYXRlICh3aWxsIG5vdCBjb3JyZWxhdGUgd2l0aAorICAgICAgICAvLyB0aGUgbGVuZ3RoIG9mIHRoZSB1dHRlcmFuY2UpLgorCisgICAgICAgIC8vIG9uQXVkaW9EYXRhV3JpdHRlbigpIHNob3VsZCBub3JtYWxseSBhbHdheXMgYmUgY2FsbGVkLCBhbmQgaGVuY2UgbVBsYXliYWNrU3RhcnRUaW1lCisgICAgICAgIC8vIHNob3VsZCBiZSBzZXQsIGlmIGFuIGVycm9yIGRvZXMgbm90IG9jY3VyLgorICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MKKyAgICAgICAgICAgICAgICB8fCBtUGxheWJhY2tTdGFydFRpbWUgPT0gLTEgfHwgbUVuZ2luZUNvbXBsZXRlVGltZSA9PSAtMSkgeworICAgICAgICAgICAgbG9nRmFpbHVyZShzdGF0dXNDb2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGxvbmcgYXVkaW9MYXRlbmN5ID0gbVBsYXliYWNrU3RhcnRUaW1lIC0gbVJlY2VpdmVkVGltZTsKKyAgICAgICAgZmluYWwgbG9uZyBlbmdpbmVMYXRlbmN5ID0gbUVuZ2luZVN0YXJ0VGltZSAtIG1SZXF1ZXN0UHJvY2Vzc2luZ1N0YXJ0VGltZTsKKyAgICAgICAgZmluYWwgbG9uZyBlbmdpbmVUb3RhbCA9IG1FbmdpbmVDb21wbGV0ZVRpbWUgLSBtUmVxdWVzdFByb2Nlc3NpbmdTdGFydFRpbWU7CisgICAgICAgIGxvZ1N1Y2Nlc3MoYXVkaW9MYXRlbmN5LCBlbmdpbmVMYXRlbmN5LCBlbmdpbmVUb3RhbCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgbG9nRmFpbHVyZShpbnQgc3RhdHVzQ29kZSk7CisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgbG9nU3VjY2Vzcyhsb25nIGF1ZGlvTGF0ZW5jeSwgbG9uZyBlbmdpbmVMYXRlbmN5LAorICAgICAgICAgICAgbG9uZyBlbmdpbmVUb3RhbCk7CisKKworfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9BYnN0cmFjdFN5bnRoZXNpc0NhbGxiYWNrLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0Fic3RyYWN0U3ludGhlc2lzQ2FsbGJhY2suamF2YQppbmRleCBjN2E0YWYwLi45MWUxMTliIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0Fic3RyYWN0U3ludGhlc2lzQ2FsbGJhY2suamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0Fic3RyYWN0U3ludGhlc2lzQ2FsbGJhY2suamF2YQpAQCAtMTUsMTUgKzE1LDI4IEBACiAgKi8KIHBhY2thZ2UgYW5kcm9pZC5zcGVlY2gudHRzOwogCisKIC8qKgogICogRGVmaW5lcyBhZGRpdGlvbmFsIG1ldGhvZHMgdGhlIHN5bnRoZXNpcyBjYWxsYmFjayBtdXN0IGltcGxlbWVudCB0aGF0CiAgKiBhcmUgcHJpdmF0ZSB0byB0aGUgVFRTIHNlcnZpY2UgaW1wbGVtZW50YXRpb24uCisgKgorICogQWxsIG9mIHRoZXNlIGNsYXNzIG1ldGhvZHMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB7QGxpbmsgI3N0b3AoKX0pIGNhbiBiZSBvbmx5IGNhbGxlZCBvbiB0aGUKKyAqIHN5bnRoZXNpcyB0aHJlYWQsIHdoaWxlIGluc2lkZQorICoge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dH0gb3Ige0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dFYyfS4KKyAqIHtAbGluayAjc3RvcCgpfSBpcyB0aGUgZXhjZXB0aW9uLCBpdCBtYXkgYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KICAqLwogYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBpbXBsZW1lbnRzIFN5bnRoZXNpc0NhbGxiYWNrIHsKKyAgICAvKiogSWYgdHJ1ZSwgcmVxdWVzdCBjb21lcyBmcm9tIFYyIFRUUyBpbnRlcmZhY2UgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBtQ2xpZW50SXNVc2luZ1YyOworCiAgICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHN5bnRoZXNpcyByZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCisgICAgICogQ29uc3RydWN0b3IuCisgICAgICogQHBhcmFtIGNsaWVudElzVXNpbmdWMiBJZiB0cnVlLCB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgdXNlZCBpbnNpZGUKKyAgICAgKiAgICAgICAgIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHRWMn0gbWV0aG9kLgogICAgICAqLwotICAgIGFic3RyYWN0IGJvb2xlYW4gaXNEb25lKCk7CisgICAgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayhib29sZWFuIGNsaWVudElzVXNpbmdWMikgeworICAgICAgICBtQ2xpZW50SXNVc2luZ1YyID0gY2xpZW50SXNVc2luZ1YyOworICAgIH0KIAogICAgIC8qKgogICAgICAqIEFib3J0cyB0aGUgc3BlZWNoIHJlcXVlc3QuCkBAIC0zMSw0ICs0NCwxNiBAQAogICAgICAqIENhbiBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgogICAgICAqLwogICAgIGFic3RyYWN0IHZvaWQgc3RvcCgpOworCisgICAgLyoqCisgICAgICogR2V0IHN0YXR1cyBjb2RlIGZvciBhICJzdG9wIi4KKyAgICAgKgorICAgICAqIFYyIENsaWVudHMgd2lsbCByZWNlaXZlIHNwZWNpYWwgc3RhdHVzLCBWMSBjbGllbnRzIHdpbGwgcmVjZWl2ZSBzdGFuZGFyZCBlcnJvci4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgc3ludGhlc2lzIHRocmVhZCwKKyAgICAgKiB3aGlsZSBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0fS4KKyAgICAgKi8KKyAgICBpbnQgZXJyb3JDb2RlT25TdG9wKCkgeworICAgICAgICByZXR1cm4gbUNsaWVudElzVXNpbmdWMiA/IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCA6IFRleHRUb1NwZWVjaC5FUlJPUjsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0F1ZGlvUGxheWJhY2tIYW5kbGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0F1ZGlvUGxheWJhY2tIYW5kbGVyLmphdmEKaW5kZXggZDYzZjYwNS4uZGNmNDliMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9BdWRpb1BsYXliYWNrSGFuZGxlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvQXVkaW9QbGF5YmFja0hhbmRsZXIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaXRlbS5zdG9wKGZhbHNlKTsKKyAgICAgICAgaXRlbS5zdG9wKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZW5xdWV1ZShQbGF5YmFja1F1ZXVlSXRlbSBpdGVtKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0F1ZGlvUGxheWJhY2tRdWV1ZUl0ZW0uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvQXVkaW9QbGF5YmFja1F1ZXVlSXRlbS5qYXZhCmluZGV4IDFhMWZkYTgxLi5jNTE0NjM5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0F1ZGlvUGxheWJhY2tRdWV1ZUl0ZW0uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0F1ZGlvUGxheWJhY2tRdWV1ZUl0ZW0uamF2YQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25TdGFydCgpOwogICAgICAgICBtUGxheWVyID0gTWVkaWFQbGF5ZXIuY3JlYXRlKG1Db250ZXh0LCBtVXJpKTsKICAgICAgICAgaWYgKG1QbGF5ZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaE9uRXJyb3IoKTsKKyAgICAgICAgICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2hPbkVycm9yKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfT1VUUFVUKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC04Myw5ICs4Myw5IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAobUZpbmlzaGVkKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25Eb25lKCk7CisgICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25TdWNjZXNzKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25FcnJvcigpOworICAgICAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaE9uU3RvcCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC05OSw3ICs5OSw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgdm9pZCBzdG9wKGJvb2xlYW4gaXNFcnJvcikgeworICAgIHZvaWQgc3RvcChpbnQgZXJyb3JDb2RlKSB7CiAgICAgICAgIG1Eb25lLm9wZW4oKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nVGFncy5sb2d0YWdzIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9FdmVudExvZ1RhZ3MubG9ndGFncwppbmRleCBmODY1NGFkLi5lMjA5YTI4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nVGFncy5sb2d0YWdzCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvRXZlbnRMb2dUYWdzLmxvZ3RhZ3MKQEAgLTQsMyArNCw2IEBACiAKIDc2MDAxIHR0c19zcGVha19zdWNjZXNzIChlbmdpbmV8MyksKGNhbGxlcl91aWR8MSksKGNhbGxlcl9waWR8MSksKGxlbmd0aHwxKSwobG9jYWxlfDMpLChyYXRlfDEpLChwaXRjaHwxKSwoZW5naW5lX2xhdGVuY3l8MnwzKSwoZW5naW5lX3RvdGFsfDJ8MyksKGF1ZGlvX2xhdGVuY3l8MnwzKQogNzYwMDIgdHRzX3NwZWFrX2ZhaWx1cmUgKGVuZ2luZXwzKSwoY2FsbGVyX3VpZHwxKSwoY2FsbGVyX3BpZHwxKSwobGVuZ3RofDEpLChsb2NhbGV8MyksKHJhdGV8MSksKHBpdGNofDEpCisKKzc2MDAzIHR0c192Ml9zcGVha19zdWNjZXNzIChlbmdpbmV8MyksKGNhbGxlcl91aWR8MSksKGNhbGxlcl9waWR8MSksKGxlbmd0aHwxKSwocmVxdWVzdF9jb25maWd8MyksKGVuZ2luZV9sYXRlbmN5fDJ8MyksKGVuZ2luZV90b3RhbHwyfDMpLChhdWRpb19sYXRlbmN5fDJ8MykKKzc2MDA0IHR0c192Ml9zcGVha19mYWlsdXJlIChlbmdpbmV8MyksKGNhbGxlcl91aWR8MSksKGNhbGxlcl9waWR8MSksKGxlbmd0aHwxKSwocmVxdWVzdF9jb25maWd8MyksIChzdGF0dXNDb2RlfDEpCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZWQ0ZGQuLjAwMDAwMDAKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9FdmVudExvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAotICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKLSAqIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCi0gKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgotICogdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2UgYW5kcm9pZC5zcGVlY2gudHRzOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLS8qKgotICogV3JpdGVzIGRhdGEgYWJvdXQgYSBnaXZlbiBzcGVlY2ggc3ludGhlc2lzIHJlcXVlc3QgdG8gdGhlIGV2ZW50IGxvZ3MuCi0gKiBUaGUgZGF0YSB0aGF0IGlzIGxvZ2dlZCBpbmNsdWRlcyB0aGUgY2FsbGluZyBhcHAsIGxlbmd0aCBvZiB0aGUgdXR0ZXJhbmNlLAotICogc3BlZWNoIHJhdGUgLyBwaXRjaCBhbmQgdGhlIGxhdGVuY3kgYW5kIG92ZXJhbGwgdGltZSB0YWtlbi4KLSAqCi0gKiBOb3RlIHRoYXQge0BsaW5rIEV2ZW50TG9nZ2VyI29uU3RvcHBlZCgpfSBhbmQge0BsaW5rIEV2ZW50TG9nZ2VyI29uRXJyb3IoKX0KLSAqIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQsIGJ1dCBvbiB7QGxpbmsgRXZlbnRMb2dnZXIjb25BdWRpb0RhdGFXcml0dGVuKCl9IGFuZAotICoge0BsaW5rIEV2ZW50TG9nZ2VyI29uQ29tcGxldGUoKX0gbXVzdCBiZSBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQKLSAqICh1c3VhbGx5IHRoZSBhdWRpbyBwbGF5YmFjayB0aHJlYWR9Ci0gKi8KLWNsYXNzIEV2ZW50TG9nZ2VyIHsKLSAgICBwcml2YXRlIGZpbmFsIFN5bnRoZXNpc1JlcXVlc3QgbVJlcXVlc3Q7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVNlcnZpY2VBcHA7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUNhbGxlclVpZDsKLSAgICBwcml2YXRlIGZpbmFsIGludCBtQ2FsbGVyUGlkOwotICAgIHByaXZhdGUgZmluYWwgbG9uZyBtUmVjZWl2ZWRUaW1lOwotICAgIHByaXZhdGUgbG9uZyBtUGxheWJhY2tTdGFydFRpbWUgPSAtMTsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGxvbmcgbVJlcXVlc3RQcm9jZXNzaW5nU3RhcnRUaW1lID0gLTE7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBsb25nIG1FbmdpbmVTdGFydFRpbWUgPSAtMTsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGxvbmcgbUVuZ2luZUNvbXBsZXRlVGltZSA9IC0xOwotCi0gICAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIG1FcnJvciA9IGZhbHNlOwotICAgIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBtU3RvcHBlZCA9IGZhbHNlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtTG9nV3JpdHRlbiA9IGZhbHNlOwotCi0gICAgRXZlbnRMb2dnZXIoU3ludGhlc2lzUmVxdWVzdCByZXF1ZXN0LCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkLCBTdHJpbmcgc2VydmljZUFwcCkgewotICAgICAgICBtUmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgICAgIG1DYWxsZXJVaWQgPSBjYWxsZXJVaWQ7Ci0gICAgICAgIG1DYWxsZXJQaWQgPSBjYWxsZXJQaWQ7Ci0gICAgICAgIG1TZXJ2aWNlQXBwID0gc2VydmljZUFwcDsKLSAgICAgICAgbVJlY2VpdmVkVGltZSA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE5vdGlmaWVzIHRoZSBsb2dnZXIgdGhhdCB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gc2VsZWN0ZWQgZnJvbQotICAgICAqIHRoZSBwcm9jZXNzaW5nIHF1ZXVlIGZvciBwcm9jZXNzaW5nLiBFbmdpbmUgbGF0ZW5jeSAvIHRvdGFsIHRpbWUKLSAgICAgKiBpcyBtZWFzdXJlZCBmcm9tIHRoaXMgYmFzZWxpbmUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgb25SZXF1ZXN0UHJvY2Vzc2luZ1N0YXJ0KCkgewotICAgICAgICBtUmVxdWVzdFByb2Nlc3NpbmdTdGFydFRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBOb3RpZmllcyB0aGUgbG9nZ2VyIHRoYXQgYSBjaHVuayBvZiBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20KLSAgICAgKiB0aGUgZW5naW5lLiBNaWdodCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgb25FbmdpbmVEYXRhUmVjZWl2ZWQoKSB7Ci0gICAgICAgIGlmIChtRW5naW5lU3RhcnRUaW1lID09IC0xKSB7Ci0gICAgICAgICAgICBtRW5naW5lU3RhcnRUaW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBOb3RpZmllcyB0aGUgbG9nZ2VyIHRoYXQgdGhlIGVuZ2luZSBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBkYXRhLgotICAgICAqIFdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbkVuZ2luZUNvbXBsZXRlKCkgewotICAgICAgICBtRW5naW5lQ29tcGxldGVUaW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTm90aWZpZXMgdGhlIGxvZ2dlciB0aGF0IGF1ZGlvIHBsYXliYWNrIGhhcyBzdGFydGVkIGZvciBzb21lIHNlY3Rpb24KLSAgICAgKiBvZiB0aGUgc3ludGhlc2lzLiBUaGlzIGlzIG5vcm1hbGx5IHNvbWUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIGVuZ2luZQotICAgICAqIGhhcyBzeW50aGVzaXplZCBkYXRhIGFuZCB2YXJpZXMgZGVwZW5kaW5nIG9uIHV0dGVyYW5jZXMgYW5kCi0gICAgICogb3RoZXIgYXVkaW8gY3VycmVudGx5IGluIHRoZSBxdWV1ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbkF1ZGlvRGF0YVdyaXR0ZW4oKSB7Ci0gICAgICAgIC8vIEZvciBub3csIGtlZXAgdHJhY2sgb2Ygb25seSB0aGUgZmlyc3QgY2h1bmsgb2YgYXVkaW8KLSAgICAgICAgLy8gdGhhdCB3YXMgcGxheWVkLgotICAgICAgICBpZiAobVBsYXliYWNrU3RhcnRUaW1lID09IC0xKSB7Ci0gICAgICAgICAgICBtUGxheWJhY2tTdGFydFRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIE5vdGlmaWVzIHRoZSBsb2dnZXIgdGhhdCB0aGUgY3VycmVudCBzeW50aGVzaXMgd2FzIHN0b3BwZWQuCi0gICAgICogTGF0ZW5jeSBudW1iZXJzIGFyZSBub3QgcmVwb3J0ZWQgZm9yIHN0b3BwZWQgc3ludGhlc2VzLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uU3RvcHBlZCgpIHsKLSAgICAgICAgbVN0b3BwZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBOb3RpZmllcyB0aGUgbG9nZ2VyIHRoYXQgdGhlIGN1cnJlbnQgc3ludGhlc2lzIHJlc3VsdGVkIGluCi0gICAgICogYW4gZXJyb3IuIFRoaXMgaXMgbG9nZ2VkIHVzaW5nIHtAbGluayBFdmVudExvZ1RhZ3Mjd3JpdGVUdHNTcGVha0ZhaWx1cmV9LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoKSB7Ci0gICAgICAgIG1FcnJvciA9IHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTm90aWZpZXMgdGhlIGxvZ2dlciB0aGF0IHRoZSBjdXJyZW50IHN5bnRoZXNpcyBoYXMgY29tcGxldGVkLgotICAgICAqIEFsbCBhdmFpbGFibGUgZGF0YSBpcyBub3QgbG9nZ2VkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uV3JpdGVEYXRhKCkgewotICAgICAgICBpZiAobUxvZ1dyaXR0ZW4pIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1Mb2dXcml0dGVuID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGxvbmcgY29tcGxldGlvblRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgLy8gb25BdWRpb0RhdGFXcml0dGVuKCkgc2hvdWxkIG5vcm1hbGx5IGFsd2F5cyBiZSBjYWxsZWQgaWYgYW4KLSAgICAgICAgLy8gZXJyb3IgZG9lcyBub3Qgb2NjdXIuCi0gICAgICAgIGlmIChtRXJyb3IgfHwgbVBsYXliYWNrU3RhcnRUaW1lID09IC0xIHx8IG1FbmdpbmVDb21wbGV0ZVRpbWUgPT0gLTEpIHsKLSAgICAgICAgICAgIEV2ZW50TG9nVGFncy53cml0ZVR0c1NwZWFrRmFpbHVyZShtU2VydmljZUFwcCwgbUNhbGxlclVpZCwgbUNhbGxlclBpZCwKLSAgICAgICAgICAgICAgICAgICAgZ2V0VXR0ZXJhbmNlTGVuZ3RoKCksIGdldExvY2FsZVN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBtUmVxdWVzdC5nZXRTcGVlY2hSYXRlKCksIG1SZXF1ZXN0LmdldFBpdGNoKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgZG9uJ3QgcmVwb3J0IHN0b3BwZWQgc3ludGhlc2VzIGJlY2F1c2UgdGhlaXIgb3ZlcmFsbAotICAgICAgICAvLyB0b3RhbCB0aW1lIHNwZW50IHdpbGwgYmUgaW5uYWN1cmF0ZSAod2lsbCBub3QgY29ycmVsYXRlIHdpdGgKLSAgICAgICAgLy8gdGhlIGxlbmd0aCBvZiB0aGUgdXR0ZXJhbmNlKS4KLSAgICAgICAgaWYgKG1TdG9wcGVkKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBsb25nIGF1ZGlvTGF0ZW5jeSA9IG1QbGF5YmFja1N0YXJ0VGltZSAtIG1SZWNlaXZlZFRpbWU7Ci0gICAgICAgIGZpbmFsIGxvbmcgZW5naW5lTGF0ZW5jeSA9IG1FbmdpbmVTdGFydFRpbWUgLSBtUmVxdWVzdFByb2Nlc3NpbmdTdGFydFRpbWU7Ci0gICAgICAgIGZpbmFsIGxvbmcgZW5naW5lVG90YWwgPSBtRW5naW5lQ29tcGxldGVUaW1lIC0gbVJlcXVlc3RQcm9jZXNzaW5nU3RhcnRUaW1lOwotCi0gICAgICAgIEV2ZW50TG9nVGFncy53cml0ZVR0c1NwZWFrU3VjY2VzcyhtU2VydmljZUFwcCwgbUNhbGxlclVpZCwgbUNhbGxlclBpZCwKLSAgICAgICAgICAgICAgICBnZXRVdHRlcmFuY2VMZW5ndGgoKSwgZ2V0TG9jYWxlU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgbVJlcXVlc3QuZ2V0U3BlZWNoUmF0ZSgpLCBtUmVxdWVzdC5nZXRQaXRjaCgpLAotICAgICAgICAgICAgICAgIGVuZ2luZUxhdGVuY3ksIGVuZ2luZVRvdGFsLCBhdWRpb0xhdGVuY3kpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdXR0ZXJhbmNlIGZvciB0aGUgZ2l2ZW4gc3ludGhlc2lzLCAwCi0gICAgICogICAgICAgICAgaWYgdGhlIHV0dGVyYW5jZSB3YXMge0Bjb2RlIG51bGx9LgotICAgICAqLwotICAgIHByaXZhdGUgaW50IGdldFV0dGVyYW5jZUxlbmd0aCgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHV0dGVyYW5jZSA9IG1SZXF1ZXN0LmdldFRleHQoKTsKLSAgICAgICAgcmV0dXJuIHV0dGVyYW5jZSA9PSBudWxsID8gMCA6IHV0dGVyYW5jZS5sZW5ndGgoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIGxvY2FsZSBzdHJpbmcgZnJvbSB0aGUgc3ludGhlc2lzIHBhcmFtcyBvZiB0aGUKLSAgICAgKiBmb3JtIGxhbmctY291bnRyeS12YXJpYW50LgotICAgICAqLwotICAgIHByaXZhdGUgU3RyaW5nIGdldExvY2FsZVN0cmluZygpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKG1SZXF1ZXN0LmdldExhbmd1YWdlKCkpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KG1SZXF1ZXN0LmdldENvdW50cnkoKSkpIHsKLSAgICAgICAgICAgIHNiLmFwcGVuZCgnLScpOwotICAgICAgICAgICAgc2IuYXBwZW5kKG1SZXF1ZXN0LmdldENvdW50cnkoKSk7Ci0KLSAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkobVJlcXVlc3QuZ2V0VmFyaWFudCgpKSkgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgnLScpOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZChtUmVxdWVzdC5nZXRWYXJpYW50KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyVjEuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvRXZlbnRMb2dnZXJWMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ODQzNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyVjEuamF2YQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CisKKy8qKgorICogV3JpdGVzIGRhdGEgYWJvdXQgYSBnaXZlbiBzcGVlY2ggc3ludGhlc2lzIHJlcXVlc3QgZm9yIFYxIEFQSSB0byB0aGUgZXZlbnQKKyAqIGxvZ3MuIFRoZSBkYXRhIHRoYXQgaXMgbG9nZ2VkIGluY2x1ZGVzIHRoZSBjYWxsaW5nIGFwcCwgbGVuZ3RoIG9mIHRoZQorICogdXR0ZXJhbmNlLCBzcGVlY2ggcmF0ZSAvIHBpdGNoLCB0aGUgbGF0ZW5jeSwgYW5kIG92ZXJhbGwgdGltZSB0YWtlbi4KKyAqLworY2xhc3MgRXZlbnRMb2dnZXJWMSBleHRlbmRzIEFic3RyYWN0RXZlbnRMb2dnZXIgeworICAgIHByaXZhdGUgZmluYWwgU3ludGhlc2lzUmVxdWVzdCBtUmVxdWVzdDsKKworICAgIEV2ZW50TG9nZ2VyVjEoU3ludGhlc2lzUmVxdWVzdCByZXF1ZXN0LCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkLCBTdHJpbmcgc2VydmljZUFwcCkgeworICAgICAgICBzdXBlcihjYWxsZXJVaWQsIGNhbGxlclBpZCwgc2VydmljZUFwcCk7CisgICAgICAgIG1SZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBsb2dGYWlsdXJlKGludCBzdGF0dXNDb2RlKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlcG9ydCBzdG9wcGVkIHN5bnRoZXNlcyBiZWNhdXNlIHRoZWlyIG92ZXJhbGwKKyAgICAgICAgLy8gdG90YWwgdGltZSBzcGVudCB3aWxsIGJlIGluYWNjdXJhdGUgKHdpbGwgbm90IGNvcnJlbGF0ZSB3aXRoCisgICAgICAgIC8vIHRoZSBsZW5ndGggb2YgdGhlIHV0dGVyYW5jZSkuCisgICAgICAgIGlmIChzdGF0dXNDb2RlICE9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCkgeworICAgICAgICAgICAgRXZlbnRMb2dUYWdzLndyaXRlVHRzU3BlYWtGYWlsdXJlKG1TZXJ2aWNlQXBwLCBtQ2FsbGVyVWlkLCBtQ2FsbGVyUGlkLAorICAgICAgICAgICAgICAgICAgICBnZXRVdHRlcmFuY2VMZW5ndGgoKSwgZ2V0TG9jYWxlU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgIG1SZXF1ZXN0LmdldFNwZWVjaFJhdGUoKSwgbVJlcXVlc3QuZ2V0UGl0Y2goKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBsb2dTdWNjZXNzKGxvbmcgYXVkaW9MYXRlbmN5LCBsb25nIGVuZ2luZUxhdGVuY3ksIGxvbmcgZW5naW5lVG90YWwpIHsKKyAgICAgICAgRXZlbnRMb2dUYWdzLndyaXRlVHRzU3BlYWtTdWNjZXNzKG1TZXJ2aWNlQXBwLCBtQ2FsbGVyVWlkLCBtQ2FsbGVyUGlkLAorICAgICAgICAgICAgICAgIGdldFV0dGVyYW5jZUxlbmd0aCgpLCBnZXRMb2NhbGVTdHJpbmcoKSwKKyAgICAgICAgICAgICAgICBtUmVxdWVzdC5nZXRTcGVlY2hSYXRlKCksIG1SZXF1ZXN0LmdldFBpdGNoKCksCisgICAgICAgICAgICAgICAgZW5naW5lTGF0ZW5jeSwgZW5naW5lVG90YWwsIGF1ZGlvTGF0ZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSB1dHRlcmFuY2UgZm9yIHRoZSBnaXZlbiBzeW50aGVzaXMsIDAKKyAgICAgKiAgICAgICAgICBpZiB0aGUgdXR0ZXJhbmNlIHdhcyB7QGNvZGUgbnVsbH0uCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0VXR0ZXJhbmNlTGVuZ3RoKCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgdXR0ZXJhbmNlID0gbVJlcXVlc3QuZ2V0VGV4dCgpOworICAgICAgICByZXR1cm4gdXR0ZXJhbmNlID09IG51bGwgPyAwIDogdXR0ZXJhbmNlLmxlbmd0aCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBmb3JtYXR0ZWQgbG9jYWxlIHN0cmluZyBmcm9tIHRoZSBzeW50aGVzaXMgcGFyYW1zIG9mIHRoZQorICAgICAqIGZvcm0gbGFuZy1jb3VudHJ5LXZhcmlhbnQuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TG9jYWxlU3RyaW5nKCkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIobVJlcXVlc3QuZ2V0TGFuZ3VhZ2UoKSk7CisgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkobVJlcXVlc3QuZ2V0Q291bnRyeSgpKSkgeworICAgICAgICAgICAgc2IuYXBwZW5kKCctJyk7CisgICAgICAgICAgICBzYi5hcHBlbmQobVJlcXVlc3QuZ2V0Q291bnRyeSgpKTsKKworICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShtUmVxdWVzdC5nZXRWYXJpYW50KCkpKSB7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCctJyk7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKG1SZXF1ZXN0LmdldFZhcmlhbnQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyVjIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvRXZlbnRMb2dnZXJWMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTRkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyVjIuamF2YQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworCisKKy8qKgorICogV3JpdGVzIGRhdGEgYWJvdXQgYSBnaXZlbiBzcGVlY2ggc3ludGhlc2lzIHJlcXVlc3QgZm9yIFYyIEFQSSB0byB0aGUgZXZlbnQgbG9ncy4KKyAqIFRoZSBkYXRhIHRoYXQgaXMgbG9nZ2VkIGluY2x1ZGVzIHRoZSBjYWxsaW5nIGFwcCwgbGVuZ3RoIG9mIHRoZSB1dHRlcmFuY2UsCisgKiBzeW50aGVzaXMgcmVxdWVzdCBjb25maWd1cmF0aW9uIGFuZCB0aGUgbGF0ZW5jeSBhbmQgb3ZlcmFsbCB0aW1lIHRha2VuLgorICovCitjbGFzcyBFdmVudExvZ2dlclYyIGV4dGVuZHMgQWJzdHJhY3RFdmVudExvZ2dlciB7CisgICAgcHJpdmF0ZSBmaW5hbCBTeW50aGVzaXNSZXF1ZXN0VjIgbVJlcXVlc3Q7CisKKyAgICBFdmVudExvZ2dlclYyKFN5bnRoZXNpc1JlcXVlc3RWMiByZXF1ZXN0LCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkLCBTdHJpbmcgc2VydmljZUFwcCkgeworICAgICAgICBzdXBlcihjYWxsZXJVaWQsIGNhbGxlclBpZCwgc2VydmljZUFwcCk7CisgICAgICAgIG1SZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBsb2dGYWlsdXJlKGludCBzdGF0dXNDb2RlKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlcG9ydCBzdG9wcGVkIHN5bnRoZXNlcyBiZWNhdXNlIHRoZWlyIG92ZXJhbGwKKyAgICAgICAgLy8gdG90YWwgdGltZSBzcGVudCB3aWxsIGJlIGluYWNjdXJhdGUgKHdpbGwgbm90IGNvcnJlbGF0ZSB3aXRoCisgICAgICAgIC8vIHRoZSBsZW5ndGggb2YgdGhlIHV0dGVyYW5jZSkuCisgICAgICAgIGlmIChzdGF0dXNDb2RlICE9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCkgeworICAgICAgICAgICAgRXZlbnRMb2dUYWdzLndyaXRlVHRzVjJTcGVha0ZhaWx1cmUobVNlcnZpY2VBcHAsCisgICAgICAgICAgICAgICAgICAgIG1DYWxsZXJVaWQsIG1DYWxsZXJQaWQsIGdldFV0dGVyYW5jZUxlbmd0aCgpLCBnZXRSZXF1ZXN0Q29uZmlnU3RyaW5nKCksIHN0YXR1c0NvZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgbG9nU3VjY2Vzcyhsb25nIGF1ZGlvTGF0ZW5jeSwgbG9uZyBlbmdpbmVMYXRlbmN5LCBsb25nIGVuZ2luZVRvdGFsKSB7CisgICAgICAgIEV2ZW50TG9nVGFncy53cml0ZVR0c1YyU3BlYWtTdWNjZXNzKG1TZXJ2aWNlQXBwLAorICAgICAgICAgICAgICAgIG1DYWxsZXJVaWQsIG1DYWxsZXJQaWQsIGdldFV0dGVyYW5jZUxlbmd0aCgpLCBnZXRSZXF1ZXN0Q29uZmlnU3RyaW5nKCksCisgICAgICAgICAgICAgICAgZW5naW5lTGF0ZW5jeSwgZW5naW5lVG90YWwsIGF1ZGlvTGF0ZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSB1dHRlcmFuY2UgZm9yIHRoZSBnaXZlbiBzeW50aGVzaXMsIDAKKyAgICAgKiAgICAgICAgICBpZiB0aGUgdXR0ZXJhbmNlIHdhcyB7QGNvZGUgbnVsbH0uCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0VXR0ZXJhbmNlTGVuZ3RoKCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgdXR0ZXJhbmNlID0gbVJlcXVlc3QuZ2V0VGV4dCgpOworICAgICAgICByZXR1cm4gdXR0ZXJhbmNlID09IG51bGwgPyAwIDogdXR0ZXJhbmNlLmxlbmd0aCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN5bnRoZXNpcyByZXF1ZXN0IGNvbmZpZ3VyYXRpb24uCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0UmVxdWVzdENvbmZpZ1N0cmluZygpIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoZSBidW5kbGVzIGFyZSB1bnBhcmNlbGVkLgorICAgICAgICBtUmVxdWVzdC5nZXRWb2ljZVBhcmFtcygpLnNpemUoKTsKKyAgICAgICAgbVJlcXVlc3QuZ2V0QXVkaW9QYXJhbXMoKS5zaXplKCk7CisKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCdWlsZGVyKDY0KS5hcHBlbmQoIlZvaWNlTmFtZTogIikuYXBwZW5kKG1SZXF1ZXN0LmdldFZvaWNlTmFtZSgpKQorICAgICAgICAgICAgLmFwcGVuZCgiICxWb2ljZVBhcmFtczogIikuYXBwZW5kKG1SZXF1ZXN0LmdldFZvaWNlUGFyYW1zKCkpCisgICAgICAgICAgICAuYXBwZW5kKCIgLFN5c3RlbVBhcmFtczogIikuYXBwZW5kKG1SZXF1ZXN0LmdldEF1ZGlvUGFyYW1zKCkpCisgICAgICAgICAgICAuYXBwZW5kKCJdIikudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0ZpbGVTeW50aGVzaXNDYWxsYmFjay5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9GaWxlU3ludGhlc2lzQ2FsbGJhY2suamF2YQppbmRleCBhYjhmODJmLi43MTdhZWI2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0ZpbGVTeW50aGVzaXNDYWxsYmFjay5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvRmlsZVN5bnRoZXNpc0NhbGxiYWNrLmphdmEKQEAgLTE2LDEzICsxNiwxMCBAQAogcGFja2FnZSBhbmRyb2lkLnNwZWVjaC50dHM7CiAKIGltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQub3MuRmlsZVV0aWxzOworaW1wb3J0IGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hTZXJ2aWNlLlV0dGVyYW5jZVByb2dyZXNzRGlzcGF0Y2hlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmFuZG9tQWNjZXNzRmlsZTsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsKIGltcG9ydCBqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5lbDsKQEAgLTQ4LDE5ICs0NSwzOSBAQAogCiAgICAgcHJpdmF0ZSBGaWxlQ2hhbm5lbCBtRmlsZUNoYW5uZWw7CiAKKyAgICBwcml2YXRlIGZpbmFsIFV0dGVyYW5jZVByb2dyZXNzRGlzcGF0Y2hlciBtRGlzcGF0Y2hlcjsKKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtQ2FsbGVySWRlbnRpdHk7CisKICAgICBwcml2YXRlIGJvb2xlYW4gbVN0YXJ0ZWQgPSBmYWxzZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbVN0b3BwZWQgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gbURvbmUgPSBmYWxzZTsKIAotICAgIEZpbGVTeW50aGVzaXNDYWxsYmFjayhGaWxlQ2hhbm5lbCBmaWxlQ2hhbm5lbCkgeworICAgIC8qKiBTdGF0dXMgY29kZSBvZiBzeW50aGVzaXMgKi8KKyAgICBwcm90ZWN0ZWQgaW50IG1TdGF0dXNDb2RlOworCisgICAgRmlsZVN5bnRoZXNpc0NhbGxiYWNrKEZpbGVDaGFubmVsIGZpbGVDaGFubmVsLCBVdHRlcmFuY2VQcm9ncmVzc0Rpc3BhdGNoZXIgZGlzcGF0Y2hlciwKKyAgICAgICAgICAgIE9iamVjdCBjYWxsZXJJZGVudGl0eSwgYm9vbGVhbiBjbGllbnRJc1VzaW5nVjIpIHsKKyAgICAgICAgc3VwZXIoY2xpZW50SXNVc2luZ1YyKTsKICAgICAgICAgbUZpbGVDaGFubmVsID0gZmlsZUNoYW5uZWw7CisgICAgICAgIG1EaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsKKyAgICAgICAgbUNhbGxlcklkZW50aXR5ID0gY2FsbGVySWRlbnRpdHk7CisgICAgICAgIG1TdGF0dXNDb2RlID0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVUNDRVNTOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHZvaWQgc3RvcCgpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7Ci0gICAgICAgICAgICBtU3RvcHBlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAobURvbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVN0YXR1c0NvZGUgPT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRDsKICAgICAgICAgICAgIGNsZWFuVXAoKTsKKyAgICAgICAgICAgIGlmIChtRGlzcGF0Y2hlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbURpc3BhdGNoZXIuZGlzcGF0Y2hPblN0b3AoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtNzUsMTQgKzkyLDggQEAKICAgICAgKiBNdXN0IGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIHRoZSBtb25pdG9yIG9uIHtAbGluayAjbVN0YXRlTG9ja30uCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlRmlsZSgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChtRmlsZUNoYW5uZWwgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbC5jbG9zZSgpOwotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbCA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gY2xvc2Ugb3V0cHV0IGZpbGUgZGVzY3JpcHRvciIsIGV4KTsKLSAgICAgICAgfQorICAgICAgICAvLyBGaWxlIHdpbGwgYmUgY2xvc2VkIGJ5IHRoZSBTcGVlY2hJdGVtIGluIHRoZSBzcGVlY2ggc2VydmljZS4KKyAgICAgICAgbUZpbGVDaGFubmVsID0gbnVsbDsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTkxLDM4ICsxMDIsNDYgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBib29sZWFuIGlzRG9uZSgpIHsKLSAgICAgICAgcmV0dXJuIG1Eb25lOwotICAgIH0KLQotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgc3RhcnQoaW50IHNhbXBsZVJhdGVJbkh6LCBpbnQgYXVkaW9Gb3JtYXQsIGludCBjaGFubmVsQ291bnQpIHsKICAgICAgICAgaWYgKERCRykgewogICAgICAgICAgICAgTG9nLmQoVEFHLCAiRmlsZVN5bnRoZXNpc1JlcXVlc3Quc3RhcnQoIiArIHNhbXBsZVJhdGVJbkh6ICsgIiwiICsgYXVkaW9Gb3JtYXQKICAgICAgICAgICAgICAgICAgICAgKyAiLCIgKyBjaGFubmVsQ291bnQgKyAiKSIpOwogICAgICAgICB9CisgICAgICAgIEZpbGVDaGFubmVsIGZpbGVDaGFubmVsID0gbnVsbDsKICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7Ci0gICAgICAgICAgICBpZiAobVN0b3BwZWQpIHsKKyAgICAgICAgICAgIGlmIChtU3RhdHVzQ29kZSA9PSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNUT1BQRUQpIHsKICAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJSZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yQ29kZU9uU3RvcCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1TdGF0dXNDb2RlICE9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkVycm9yIHdhcyByYWlzZWQiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1TdGFydGVkKSB7Ci0gICAgICAgICAgICAgICAgY2xlYW5VcCgpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkZpbGVTeW50aGVzaXNSZXF1ZXN0LnN0YXJ0KCkgY2FsbGVkIHR3aWNlIik7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiU3RhcnQgY2FsbGVkIHR3aWNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1TdGFydGVkID0gdHJ1ZTsKICAgICAgICAgICAgIG1TYW1wbGVSYXRlSW5IeiA9IHNhbXBsZVJhdGVJbkh6OwogICAgICAgICAgICAgbUF1ZGlvRm9ybWF0ID0gYXVkaW9Gb3JtYXQ7CiAgICAgICAgICAgICBtQ2hhbm5lbENvdW50ID0gY2hhbm5lbENvdW50OwogCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbC53cml0ZShCeXRlQnVmZmVyLmFsbG9jYXRlKFdBVl9IRUFERVJfTEVOR1RIKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5TVUNDRVNTOwotICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gd3JpdGUgd2F2IGhlYWRlciB0byBvdXRwdXQgZmlsZSBkZXNjcmlwdG9yIiArIGV4KTsKLSAgICAgICAgICAgICAgICBjbGVhblVwKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKKyAgICAgICAgICAgIGlmIChtRGlzcGF0Y2hlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbURpc3BhdGNoZXIuZGlzcGF0Y2hPblN0YXJ0KCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWxlQ2hhbm5lbCA9IG1GaWxlQ2hhbm5lbDsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaWxlQ2hhbm5lbC53cml0ZShCeXRlQnVmZmVyLmFsbG9jYXRlKFdBVl9IRUFERVJfTEVOR1RIKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5TVUNDRVNTOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHdyaXRlIHdhdiBoZWFkZXIgdG8gb3V0cHV0IGZpbGUgZGVzY3JpcHRvciIsIGV4KTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgeworICAgICAgICAgICAgICAgIGNsZWFuVXAoKTsKKyAgICAgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfT1VUUFVUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMyLDY2ICsxNTEsMTI4IEBACiAgICAgICAgICAgICBMb2cuZChUQUcsICJGaWxlU3ludGhlc2lzUmVxdWVzdC5hdWRpb0F2YWlsYWJsZSgiICsgYnVmZmVyICsgIiwiICsgb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICsgIiwiICsgbGVuZ3RoICsgIikiKTsKICAgICAgICAgfQorICAgICAgICBGaWxlQ2hhbm5lbCBmaWxlQ2hhbm5lbCA9IG51bGw7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgewotICAgICAgICAgICAgaWYgKG1TdG9wcGVkKSB7CisgICAgICAgICAgICBpZiAobVN0YXR1c0NvZGUgPT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CiAgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiUmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckNvZGVPblN0b3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtU3RhdHVzQ29kZSAhPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJFcnJvciB3YXMgcmFpc2VkIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtRmlsZUNoYW5uZWwgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZpbGUgbm90IG9wZW4iKTsKKyAgICAgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfT1VUUFVUOwogICAgICAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guRVJST1I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbC53cml0ZShCeXRlQnVmZmVyLndyYXAoYnVmZmVyLCAgb2Zmc2V0LCAgbGVuZ3RoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5TVUNDRVNTOwotICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gd3JpdGUgdG8gb3V0cHV0IGZpbGUgZGVzY3JpcHRvciIsIGV4KTsKKyAgICAgICAgICAgIGlmICghbVN0YXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJTdGFydCBtZXRob2Qgd2FzIG5vdCBjYWxsZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsZUNoYW5uZWwgPSBtRmlsZUNoYW5uZWw7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmlsZUNoYW5uZWwud3JpdGUoQnl0ZUJ1ZmZlci53cmFwKGJ1ZmZlciwgIG9mZnNldCwgIGxlbmd0aCkpOworICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5TVUNDRVNTOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHdyaXRlIHRvIG91dHB1dCBmaWxlIGRlc2NyaXB0b3IiLCBleCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKICAgICAgICAgICAgICAgICBjbGVhblVwKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKKyAgICAgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfT1VUUFVUOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZG9uZSgpIHsKICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiRmlsZVN5bnRoZXNpc1JlcXVlc3QuZG9uZSgpIik7CisgICAgICAgIEZpbGVDaGFubmVsIGZpbGVDaGFubmVsID0gbnVsbDsKKworICAgICAgICBpbnQgc2FtcGxlUmF0ZUluSHogPSAwOworICAgICAgICBpbnQgYXVkaW9Gb3JtYXQgPSAwOworICAgICAgICBpbnQgY2hhbm5lbENvdW50ID0gMDsKKwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKICAgICAgICAgICAgIGlmIChtRG9uZSkgewotICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkR1cGxpY2F0ZSBjYWxsIHRvIGRvbmUoKSIpOwotICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJlc2VydmVzIGV4aXN0aW5nIGJlaGF2aW91ci4gRWFybGllciwgaWYgZG9uZSB3YXMgY2FsbGVkIHR3aWNlCi0gICAgICAgICAgICAgICAgLy8gd2UnZCByZXR1cm4gRVJST1IgYmVjYXVzZSBtRmlsZSA9PSBudWxsIGFuZCB3ZSdkIGFkZCB0byBsb2dzcGFtLgorICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkR1cGxpY2F0ZSBjYWxsIHRvIGRvbmUoKSIpOworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGFuIGVycm9yIHRoYXQgd291bGQgcHJldmVudCBzeW50aGVzaXMuIEhlbmNlIG5vCisgICAgICAgICAgICAgICAgLy8gc2V0U3RhdHVzQ29kZSBpcyBzZXQuCiAgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtU3RvcHBlZCkgeworICAgICAgICAgICAgaWYgKG1TdGF0dXNDb2RlID09IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCkgewogICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIlJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JDb2RlT25TdG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobURpc3BhdGNoZXIgIT0gbnVsbCAmJiBtU3RhdHVzQ29kZSAhPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MgJiYKKyAgICAgICAgICAgICAgICAgICAgbVN0YXR1c0NvZGUgIT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CisgICAgICAgICAgICAgICAgbURpc3BhdGNoZXIuZGlzcGF0Y2hPbkVycm9yKG1TdGF0dXNDb2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1GaWxlQ2hhbm5lbCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmlsZSBub3Qgb3BlbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guRVJST1I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIC8vIFdyaXRlIFdBViBoZWFkZXIgYXQgc3RhcnQgb2YgZmlsZQotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbC5wb3NpdGlvbigwKTsKLSAgICAgICAgICAgICAgICBpbnQgZGF0YUxlbmd0aCA9IChpbnQpIChtRmlsZUNoYW5uZWwuc2l6ZSgpIC0gV0FWX0hFQURFUl9MRU5HVEgpOwotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbC53cml0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VXYXZIZWFkZXIobVNhbXBsZVJhdGVJbkh6LCBtQXVkaW9Gb3JtYXQsIG1DaGFubmVsQ291bnQsIGRhdGFMZW5ndGgpKTsKKyAgICAgICAgICAgIG1Eb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIGZpbGVDaGFubmVsID0gbUZpbGVDaGFubmVsOworICAgICAgICAgICAgc2FtcGxlUmF0ZUluSHogPSBtU2FtcGxlUmF0ZUluSHo7CisgICAgICAgICAgICBhdWRpb0Zvcm1hdCA9IG1BdWRpb0Zvcm1hdDsKKyAgICAgICAgICAgIGNoYW5uZWxDb3VudCA9IG1DaGFubmVsQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gV3JpdGUgV0FWIGhlYWRlciBhdCBzdGFydCBvZiBmaWxlCisgICAgICAgICAgICBmaWxlQ2hhbm5lbC5wb3NpdGlvbigwKTsKKyAgICAgICAgICAgIGludCBkYXRhTGVuZ3RoID0gKGludCkgKGZpbGVDaGFubmVsLnNpemUoKSAtIFdBVl9IRUFERVJfTEVOR1RIKTsKKyAgICAgICAgICAgIGZpbGVDaGFubmVsLndyaXRlKAorICAgICAgICAgICAgICAgICAgICBtYWtlV2F2SGVhZGVyKHNhbXBsZVJhdGVJbkh6LCBhdWRpb0Zvcm1hdCwgY2hhbm5lbENvdW50LCBkYXRhTGVuZ3RoKSk7CisKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgewogICAgICAgICAgICAgICAgIGNsb3NlRmlsZSgpOwotICAgICAgICAgICAgICAgIG1Eb25lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobURpc3BhdGNoZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBtRGlzcGF0Y2hlci5kaXNwYXRjaE9uU3VjY2VzcygpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLlNVQ0NFU1M7Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byB3cml0ZSB0byBvdXRwdXQgZmlsZSBkZXNjcmlwdG9yIiwgZXgpOwotICAgICAgICAgICAgICAgIGNsZWFuVXAoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHdyaXRlIHRvIG91dHB1dCBmaWxlIGRlc2NyaXB0b3IiLCBleCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKKyAgICAgICAgICAgICAgICBjbGVhblVwKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgZXJyb3IoKSB7CisgICAgICAgIGVycm9yKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfU1lOVEhFU0lTKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBlcnJvcihpbnQgZXJyb3JDb2RlKSB7CiAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkZpbGVTeW50aGVzaXNSZXF1ZXN0LmVycm9yKCkiKTsKICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7CisgICAgICAgICAgICBpZiAobURvbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjbGVhblVwKCk7CisgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IGVycm9yQ29kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGhhc1N0YXJ0ZWQoKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1TdGFydGVkOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaGFzRmluaXNoZWQoKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1Eb25lOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMjUsNCArMzA2LDE2IEBACiAgICAgICAgIHJldHVybiBoZWFkZXI7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBmYWxsYmFjaygpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7CisgICAgICAgICAgICBpZiAoaGFzU3RhcnRlZCgpIHx8IGhhc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRGlzcGF0Y2hlci5kaXNwYXRjaE9uRmFsbGJhY2soKTsKKyAgICAgICAgICAgIG1TdGF0dXNDb2RlID0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVUNDRVNTOworICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvSVRleHRUb1NwZWVjaENhbGxiYWNrLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0lUZXh0VG9TcGVlY2hDYWxsYmFjay5haWRsCmluZGV4IGYwMjg3ZDQuLjNjODA4ZmYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvSVRleHRUb1NwZWVjaENhbGxiYWNrLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9JVGV4dFRvU3BlZWNoQ2FsbGJhY2suYWlkbApAQCAtMTUsMTMgKzE1LDUzIEBACiAgKi8KIHBhY2thZ2UgYW5kcm9pZC5zcGVlY2gudHRzOwogCitpbXBvcnQgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mbzsKKwogLyoqCiAgKiBJbnRlcmZhY2UgZm9yIGNhbGxiYWNrcyBmcm9tIFRleHRUb1NwZWVjaFNlcnZpY2UKICAqCiAgKiB7QGhpZGV9CiAgKi8KIG9uZXdheSBpbnRlcmZhY2UgSVRleHRUb1NwZWVjaENhbGxiYWNrIHsKKyAgICAvKioKKyAgICAgKiBUZWxscyB0aGUgY2xpZW50IHRoYXQgdGhlIHN5bnRoZXNpcyBoYXMgc3RhcnRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1dHRlcmFuY2VJZCBVbmlxdWUgaWQgaWRlbnRpZnlpbmcgc3ludGhlc2lzIHJlcXVlc3QuCisgICAgICovCiAgICAgdm9pZCBvblN0YXJ0KFN0cmluZyB1dHRlcmFuY2VJZCk7Ci0gICAgdm9pZCBvbkRvbmUoU3RyaW5nIHV0dGVyYW5jZUlkKTsKLSAgICB2b2lkIG9uRXJyb3IoU3RyaW5nIHV0dGVyYW5jZUlkKTsKKworICAgIC8qKgorICAgICAqIFRlbGxzIHRoZSBjbGllbnQgdGhhdCB0aGUgc3ludGhlc2lzIGhhcyBmaW5pc2hlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1dHRlcmFuY2VJZCBVbmlxdWUgaWQgaWRlbnRpZnlpbmcgc3ludGhlc2lzIHJlcXVlc3QuCisgICAgICovCisgICAgdm9pZCBvblN1Y2Nlc3MoU3RyaW5nIHV0dGVyYW5jZUlkKTsKKworICAgIC8qKgorICAgICAqIFRlbGxzIHRoZSBjbGllbnQgdGhhdCB0aGUgc3ludGhlc2lzIHdhcyBzdG9wcGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkIFVuaXF1ZSBpZCBpZGVudGlmeWluZyBzeW50aGVzaXMgcmVxdWVzdC4KKyAgICAgKi8KKyAgICB2b2lkIG9uU3RvcChTdHJpbmcgdXR0ZXJhbmNlSWQpOworCisgICAgLyoqCisgICAgICogVGVsbHMgdGhlIGNsaWVudCB0aGF0IHRoZSBzeW50aGVzaXMgZmFpbGVkLCBhbmQgZmFsbGJhY2sgc3ludGhlc2lzIHdpbGwgYmUgYXR0ZW1wdGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkIFVuaXF1ZSBpZCBpZGVudGlmeWluZyBzeW50aGVzaXMgcmVxdWVzdC4KKyAgICAgKi8KKyAgICB2b2lkIG9uRmFsbGJhY2soU3RyaW5nIHV0dGVyYW5jZUlkKTsKKworICAgIC8qKgorICAgICAqIFRlbGxzIHRoZSBjbGllbnQgdGhhdCB0aGUgc3ludGhlc2lzIGhhcyBmYWlsZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQgVW5pcXVlIGlkIGlkZW50aWZ5aW5nIHN5bnRoZXNpcyByZXF1ZXN0LgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgT25lIG9mIHRoZSB2YWx1ZXMgZnJvbQorICAgICAqICAgICAgICB7QGxpbmsgYW5kcm9pZC5zcGVlY2gudHRzLnYyLlRleHRUb1NwZWVjaENsaWVudC5TdGF0dXN9LgorICAgICAqLworICAgIHZvaWQgb25FcnJvcihTdHJpbmcgdXR0ZXJhbmNlSWQsIGludCBlcnJvckNvZGUpOworCisgICAgLyoqCisgICAgICogSW5mb3JtIHRoZSBjbGllbnQgdGhhdCBzZXQgb2YgYXZhaWxhYmxlIHZvaWNlcyBjaGFuZ2VkLgorICAgICAqLworICAgIHZvaWQgb25Wb2ljZXNJbmZvQ2hhbmdlKGluIExpc3Q8Vm9pY2VJbmZvPiB2b2ljZXMpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9JVGV4dFRvU3BlZWNoU2VydmljZS5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9JVGV4dFRvU3BlZWNoU2VydmljZS5haWRsCmluZGV4IGI3YmM3MGMuLjljZjQ5ZmYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvSVRleHRUb1NwZWVjaFNlcnZpY2UuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0lUZXh0VG9TcGVlY2hTZXJ2aWNlLmFpZGwKQEAgLTIwLDYgKzIwLDggQEAKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQuc3BlZWNoLnR0cy5JVGV4dFRvU3BlZWNoQ2FsbGJhY2s7CitpbXBvcnQgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnNwZWVjaC50dHMuU3ludGhlc2lzUmVxdWVzdFYyOwogCiAvKioKICAqIEludGVyZmFjZSBmb3IgVGV4dFRvU3BlZWNoIHRvIHRhbGsgdG8gVGV4dFRvU3BlZWNoU2VydmljZS4KQEAgLTcwLDkgKzcyLDEwIEBACiAgICAgICogICAgICAgIFRleHRUb1NwZWVjaCBvYmplY3QuCiAgICAgICogQHBhcmFtIGR1cmF0aW9uIE51bWJlciBvZiBtaWxsaXNlY29uZHMgb2Ygc2lsZW5jZSB0byBwbGF5LgogICAgICAqIEBwYXJhbSBxdWV1ZU1vZGUgRGV0ZXJtaW5lcyB3aGF0IHRvIGRvIHRvIHJlcXVlc3RzIGFscmVhZHkgaW4gdGhlIHF1ZXVlLgotICAgICAqIEBwYXJhbSBwYXJhbSBSZXF1ZXN0IHBhcmFtZXRlcnMuCisgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkIFVuaXF1ZSBpZCB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgcmVxdWVzdCBpbiBjYWxsYmFja3MuCiAgICAgICovCi0gICAgaW50IHBsYXlTaWxlbmNlKGluIElCaW5kZXIgY2FsbGluZ0luc3RhbmNlLCBpbiBsb25nIGR1cmF0aW9uLCBpbiBpbnQgcXVldWVNb2RlLCBpbiBCdW5kbGUgcGFyYW1zKTsKKyAgICBpbnQgcGxheVNpbGVuY2UoaW4gSUJpbmRlciBjYWxsaW5nSW5zdGFuY2UsIGluIGxvbmcgZHVyYXRpb24sIGluIGludCBxdWV1ZU1vZGUsCisgICAgICAgIGluIFN0cmluZyB1dHRlcmFuY2VJZCk7CiAKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgc2VydmljZSBpcyBjdXJyZW50bHkgcGxheWluZyBzb21lIGF1ZGlvLgpAQCAtOTAsNyArOTMsNiBAQAogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbGFuZ3VhZ2UsIGNvdW50cnkgYW5kIHZhcmlhbnQgY3VycmVudGx5IGJlaW5nIHVzZWQgYnkgdGhlIFRUUyBlbmdpbmUuCi0gICAgICoKICAgICAgKiBDYW4gYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KICAgICAgKgogICAgICAqIEByZXR1cm4gQSAzLWVsZW1lbnQgYXJyYXksIGNvbnRhaW5pbmcgbGFuZ3VhZ2UgKElTTyAzLWxldHRlciBjb2RlKSwKQEAgLTk5LDcgKzEwMSw3IEBACiAgICAgICogICAgICAgICBiZSBlbXB0eSB0b28uCiAgICAgICovCiAgICAgU3RyaW5nW10gZ2V0TGFuZ3VhZ2UoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYSBkZWZhdWx0IFRUUyBsYW5ndWFnZSwgY291bnRyeSBhbmQgdmFyaWFudCBhcyBzZXQgYnkgdGhlIHVzZXIuCiAgICAgICoKQEAgLTExMSw3ICsxMTMsNyBAQAogICAgICAqICAgICAgICAgYmUgZW1wdHkgdG9vLgogICAgICAqLwogICAgIFN0cmluZ1tdIGdldENsaWVudERlZmF1bHRMYW5ndWFnZSgpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGVuZ2luZSBzdXBwb3J0cyBhIGdpdmVuIGxhbmd1YWdlLgogICAgICAqCkBAIC0xMzcsNyArMTM5LDcgQEAKICAgICAgKiBAcGFyYW0gY291bnRyeSBJU08tMyBjb3VudHJ5IGNvZGUuIE1heSBiZSBlbXB0eSBvciBudWxsLgogICAgICAqIEBwYXJhbSB2YXJpYW50IExhbmd1YWdlIHZhcmlhbnQuIE1heSBiZSBlbXB0eSBvciBudWxsLgogICAgICAqIEByZXR1cm4gQW4gYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBzZXQgb2YgZmVhdHVyZXMgc3VwcG9ydGVkIGZvcgotICAgICAqICAgICAgICAgdGhlIHN1cHBsaWVkIGxvY2FsZS4gVGhlIGFycmF5IG9mIHN0cmluZ3MgbXVzdCBub3QgY29udGFpbiAKKyAgICAgKiAgICAgICAgIHRoZSBzdXBwbGllZCBsb2NhbGUuIFRoZSBhcnJheSBvZiBzdHJpbmdzIG11c3Qgbm90IGNvbnRhaW4KICAgICAgKiAgICAgICAgIGR1cGxpY2F0ZXMuCiAgICAgICovCiAgICAgU3RyaW5nW10gZ2V0RmVhdHVyZXNGb3JMYW5ndWFnZShpbiBTdHJpbmcgbGFuZywgaW4gU3RyaW5nIGNvdW50cnksIGluIFN0cmluZyB2YXJpYW50KTsKQEAgLTE2OSw0ICsxNzEsNDQgQEAKICAgICAgKi8KICAgICB2b2lkIHNldENhbGxiYWNrKGluIElCaW5kZXIgY2FsbGVyLCBJVGV4dFRvU3BlZWNoQ2FsbGJhY2sgY2IpOwogCisgICAgLyoqCisgICAgICogVGVsbHMgdGhlIGVuZ2luZSB0byBzeW50aGVzaXplIHNvbWUgc3BlZWNoIGFuZCBwbGF5IGl0IGJhY2suCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2FsbGluZ0luc3RhbmNlIGEgYmluZGVyIHJlcHJlc2VudGluZyB0aGUgaWRlbnRpdHkgb2YgdGhlIGNhbGxpbmcKKyAgICAgKiAgICAgICAgVGV4dFRvU3BlZWNoIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBzeW50aGVzaXplLgorICAgICAqIEBwYXJhbSBxdWV1ZU1vZGUgRGV0ZXJtaW5lcyB3aGF0IHRvIGRvIHRvIHJlcXVlc3RzIGFscmVhZHkgaW4gdGhlIHF1ZXVlLgorICAgICAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3QgcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICBpbnQgc3BlYWtWMihpbiBJQmluZGVyIGNhbGxpbmdJbnN0YW5jZSwgaW4gU3ludGhlc2lzUmVxdWVzdFYyIHJlcXVlc3QpOworCisgICAgLyoqCisgICAgICogVGVsbHMgdGhlIGVuZ2luZSB0byBzeW50aGVzaXplIHNvbWUgc3BlZWNoIGFuZCB3cml0ZSBpdCB0byBhIGZpbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2FsbGluZ0luc3RhbmNlIGEgYmluZGVyIHJlcHJlc2VudGluZyB0aGUgaWRlbnRpdHkgb2YgdGhlIGNhbGxpbmcKKyAgICAgKiAgICAgICAgVGV4dFRvU3BlZWNoIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBzeW50aGVzaXplLgorICAgICAqIEBwYXJhbSBmaWxlRGVzY3JpcHRvciBUaGUgZmlsZSBkZXNjcmlwdG9yIHRvIHdyaXRlIHRoZSBzeW50aGVzaXplZCBhdWRpbyB0by4gSGFzIHRvIGJlCisgICAgICAgICAgICAgIHdyaXRhYmxlLgorICAgICAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3QgcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICBpbnQgc3ludGhlc2l6ZVRvRmlsZURlc2NyaXB0b3JWMihpbiBJQmluZGVyIGNhbGxpbmdJbnN0YW5jZSwKKyAgICAgICAgaW4gUGFyY2VsRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIGluIFN5bnRoZXNpc1JlcXVlc3RWMiByZXF1ZXN0KTsKKworICAgIC8qKgorICAgICAqIFBsYXlzIGFuIGV4aXN0aW5nIGF1ZGlvIHJlc291cmNlLiBWMiB2ZXJzaW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2FsbGluZ0luc3RhbmNlIGEgYmluZGVyIHJlcHJlc2VudGluZyB0aGUgaWRlbnRpdHkgb2YgdGhlIGNhbGxpbmcKKyAgICAgKiAgICAgICAgVGV4dFRvU3BlZWNoIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gYXVkaW9VcmkgVVJJIGZvciB0aGUgYXVkaW8gcmVzb3VyY2UgKGEgZmlsZSBvciBhbmRyb2lkLnJlc291cmNlIFVSSSkKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQgVW5pcXVlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIGF1ZGlvUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciBhdWRpbyBwbGF5YmFjayAoZnJvbSB7QGxpbmsgU3ludGhlc2lzUmVxdWVzdFYyfSkuCisgICAgICovCisgICAgaW50IHBsYXlBdWRpb1YyKGluIElCaW5kZXIgY2FsbGluZ0luc3RhbmNlLCBpbiBVcmkgYXVkaW9VcmksIGluIFN0cmluZyB1dHRlcmFuY2VJZCwKKyAgICAgICAgaW4gQnVuZGxlIGF1ZGlvUGFyYW1ldGVycyk7CisKKyAgICAvKioKKyAgICAgKiBSZXF1ZXN0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB2b2ljZXMgZnJvbSB0aGUgc2VydmljZS4KKyAgICAgKi8KKyAgICBMaXN0PFZvaWNlSW5mbz4gZ2V0Vm9pY2VzSW5mbygpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9QbGF5YmFja1F1ZXVlSXRlbS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9QbGF5YmFja1F1ZXVlSXRlbS5qYXZhCmluZGV4IGQwOTU3ZmYuLmIyZTMyM2UgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvUGxheWJhY2tRdWV1ZUl0ZW0uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1BsYXliYWNrUXVldWVJdGVtLmphdmEKQEAgLTIyLDYgKzIyLDE2IEBACiAgICAgICAgIHJldHVybiBtRGlzcGF0Y2hlcjsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBydW4oKTsKLSAgICBhYnN0cmFjdCB2b2lkIHN0b3AoYm9vbGVhbiBpc0Vycm9yKTsKKworICAgIC8qKgorICAgICAqIFN0b3AgdGhlIHBsYXliYWNrLgorICAgICAqCisgICAgICogQHBhcmFtIGVycm9yQ29kZSBDYXVzZSBvZiB0aGUgc3RvcC4gQ2FuIGJlIGVpdGhlciBvbmUgb2YgdGhlIGVycm9yIGNvZGVzIGZyb20KKyAgICAgKiAgICAgICAgIHtAbGluayBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1c30gb3IKKyAgICAgKiAgICAgICAgIHtAbGluayBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cyNTVE9QUEVEfQorICAgICAqICAgICAgICAgaWYgc3RvcHBlZCBvbiBhIGNsaWVudCByZXF1ZXN0LgorICAgICAqLworICAgIGFic3RyYWN0IHZvaWQgc3RvcChpbnQgZXJyb3JDb2RlKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvUGxheWJhY2tTeW50aGVzaXNDYWxsYmFjay5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9QbGF5YmFja1N5bnRoZXNpc0NhbGxiYWNrLmphdmEKaW5kZXggYzk5ZjIwMS4uZTM0NWU4OSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9QbGF5YmFja1N5bnRoZXNpc0NhbGxiYWNrLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9QbGF5YmFja1N5bnRoZXNpc0NhbGxiYWNrLmphdmEKQEAgLTU1LDIwICs1NSwyMCBAQAogICAgIHByaXZhdGUgZmluYWwgQXVkaW9QbGF5YmFja0hhbmRsZXIgbUF1ZGlvVHJhY2tIYW5kbGVyOwogICAgIC8vIEEgcmVxdWVzdCAidG9rZW4iLCB3aGljaCB3aWxsIGJlIG5vbiBudWxsIGFmdGVyIHN0YXJ0KCkgaGFzIGJlZW4gY2FsbGVkLgogICAgIHByaXZhdGUgU3ludGhlc2lzUGxheWJhY2tRdWV1ZUl0ZW0gbUl0ZW0gPSBudWxsOwotICAgIC8vIFdoZXRoZXIgdGhpcyByZXF1ZXN0IGhhcyBiZWVuIHN0b3BwZWQuIFRoaXMgaXMgdXNlZnVsIGZvciBrZWVwaW5nCi0gICAgLy8gdHJhY2sgd2hldGhlciBzdG9wKCkgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSBzdGFydCgpLiBJbiBhbGwgb3RoZXIgY2FzZXMsCi0gICAgLy8gYSBub24tbnVsbCB2YWx1ZSBvZiBtSXRlbSB3aWxsIHByb3ZpZGUgdGhlIHNhbWUgaW5mb3JtYXRpb24uCi0gICAgcHJpdmF0ZSBib29sZWFuIG1TdG9wcGVkID0gZmFsc2U7CiAKICAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gbURvbmUgPSBmYWxzZTsKIAorICAgIC8qKiBTdGF0dXMgY29kZSBvZiBzeW50aGVzaXMgKi8KKyAgICBwcm90ZWN0ZWQgaW50IG1TdGF0dXNDb2RlOworCiAgICAgcHJpdmF0ZSBmaW5hbCBVdHRlcmFuY2VQcm9ncmVzc0Rpc3BhdGNoZXIgbURpc3BhdGNoZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUNhbGxlcklkZW50aXR5OwotICAgIHByaXZhdGUgZmluYWwgRXZlbnRMb2dnZXIgbUxvZ2dlcjsKKyAgICBwcml2YXRlIGZpbmFsIEFic3RyYWN0RXZlbnRMb2dnZXIgbUxvZ2dlcjsKIAogICAgIFBsYXliYWNrU3ludGhlc2lzQ2FsbGJhY2soaW50IHN0cmVhbVR5cGUsIGZsb2F0IHZvbHVtZSwgZmxvYXQgcGFuLAogICAgICAgICAgICAgQXVkaW9QbGF5YmFja0hhbmRsZXIgYXVkaW9UcmFja0hhbmRsZXIsIFV0dGVyYW5jZVByb2dyZXNzRGlzcGF0Y2hlciBkaXNwYXRjaGVyLAotICAgICAgICAgICAgT2JqZWN0IGNhbGxlcklkZW50aXR5LCBFdmVudExvZ2dlciBsb2dnZXIpIHsKKyAgICAgICAgICAgIE9iamVjdCBjYWxsZXJJZGVudGl0eSwgQWJzdHJhY3RFdmVudExvZ2dlciBsb2dnZXIsIGJvb2xlYW4gY2xpZW50SXNVc2luZ1YyKSB7CisgICAgICAgIHN1cGVyKGNsaWVudElzVXNpbmdWMik7CiAgICAgICAgIG1TdHJlYW1UeXBlID0gc3RyZWFtVHlwZTsKICAgICAgICAgbVZvbHVtZSA9IHZvbHVtZTsKICAgICAgICAgbVBhbiA9IHBhbjsKQEAgLTc2LDI4ICs3NiwyNSBAQAogICAgICAgICBtRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7CiAgICAgICAgIG1DYWxsZXJJZGVudGl0eSA9IGNhbGxlcklkZW50aXR5OwogICAgICAgICBtTG9nZ2VyID0gbG9nZ2VyOworICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUzsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICB2b2lkIHN0b3AoKSB7Ci0gICAgICAgIHN0b3BJbXBsKGZhbHNlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0b3BJbXBsKGJvb2xlYW4gd2FzRXJyb3IpIHsKICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAic3RvcCgpIik7CiAKLSAgICAgICAgLy8gTm90ZSB0aGF0IG1Mb2dnZXIubUVycm9yIG1pZ2h0IGJlIHRydWUgdG9vIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgIG1Mb2dnZXIub25TdG9wcGVkKCk7Ci0KICAgICAgICAgU3ludGhlc2lzUGxheWJhY2tRdWV1ZUl0ZW0gaXRlbTsKICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7Ci0gICAgICAgICAgICBpZiAobVN0b3BwZWQpIHsKKyAgICAgICAgICAgIGlmIChtRG9uZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtU3RhdHVzQ29kZSA9PSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNUT1BQRUQpIHsKICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJzdG9wKCkgY2FsbGVkIHR3aWNlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpdGVtID0gbUl0ZW07Ci0gICAgICAgICAgICBtU3RvcHBlZCA9IHRydWU7CisgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHsKQEAgLTEwNSwxOSArMTAyLDE1IEBACiAgICAgICAgICAgICAvLyBwb2ludCBpdCB3aWxsIHdyaXRlIGFuIGFkZGl0aW9uYWwgYnVmZmVyIHRvIHRoZSBpdGVtIC0gYnV0IHdlCiAgICAgICAgICAgICAvLyB3b24ndCB3b3JyeSBhYm91dCB0aGF0IGJlY2F1c2UgdGhlIGF1ZGlvIHBsYXliYWNrIHF1ZXVlIHdpbGwgYmUgY2xlYXJlZAogICAgICAgICAgICAgLy8gc29vbiBhZnRlciAoc2VlIFN5bnRoSGFuZGxlciNzdG9wKFN0cmluZykuCi0gICAgICAgICAgICBpdGVtLnN0b3Aod2FzRXJyb3IpOworICAgICAgICAgICAgaXRlbS5zdG9wKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBzdG9wKCkgb3IgZXJyb3IoKSB3ZXJlIGNhbGxlZCBiZWZvcmUgc3RhcnQoKSB3YXMuCiAKICAgICAgICAgICAgIC8vIEluIGFsbCBvdGhlciBjYXNlcywgbUF1ZGlvVHJhY2tIYW5kbGVyLnN0b3AoKSB3aWxsCiAgICAgICAgICAgICAvLyByZXN1bHQgaW4gb25TeW50aGVzaXNEb25lIGJlaW5nIGNhbGxlZCwgYW5kIHdlIHdpbGwKICAgICAgICAgICAgIC8vIHdyaXRlIGRhdGEgdGhlcmUuCi0gICAgICAgICAgICBtTG9nZ2VyLm9uV3JpdGVEYXRhKCk7Ci0KLSAgICAgICAgICAgIGlmICh3YXNFcnJvcikgewotICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZGlzcGF0Y2ggdGhlIGVycm9yIG91cnNlbHZlcy4KLSAgICAgICAgICAgICAgICBtRGlzcGF0Y2hlci5kaXNwYXRjaE9uRXJyb3IoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1Mb2dnZXIub25Db21wbGV0ZWQoVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKTsKKyAgICAgICAgICAgIG1EaXNwYXRjaGVyLmRpc3BhdGNoT25TdG9wKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyOSwyNiArMTIyLDQyIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgYm9vbGVhbiBpc0RvbmUoKSB7Ci0gICAgICAgIHJldHVybiBtRG9uZTsKKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNTdGFydGVkKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKKyAgICAgICAgICAgIHJldHVybiBtSXRlbSAhPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaGFzRmluaXNoZWQoKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1Eb25lOworICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBzdGFydChpbnQgc2FtcGxlUmF0ZUluSHosIGludCBhdWRpb0Zvcm1hdCwgaW50IGNoYW5uZWxDb3VudCkgewotICAgICAgICBpZiAoREJHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJzdGFydCgiICsgc2FtcGxlUmF0ZUluSHogKyAiLCIgKyBhdWRpb0Zvcm1hdAotICAgICAgICAgICAgICAgICAgICArICIsIiArIGNoYW5uZWxDb3VudCArICIpIik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAic3RhcnQoIiArIHNhbXBsZVJhdGVJbkh6ICsgIiwiICsgYXVkaW9Gb3JtYXQgKyAiLCIgKyBjaGFubmVsQ291bnQKKyAgICAgICAgICAgICAgICArICIpIik7CiAKICAgICAgICAgaW50IGNoYW5uZWxDb25maWcgPSBCbG9ja2luZ0F1ZGlvVHJhY2suZ2V0Q2hhbm5lbENvbmZpZyhjaGFubmVsQ291bnQpOwotICAgICAgICBpZiAoY2hhbm5lbENvbmZpZyA9PSAwKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJVbnN1cHBvcnRlZCBudW1iZXIgb2YgY2hhbm5lbHMgOiIgKyBjaGFubmVsQ291bnQpOwotICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKLSAgICAgICAgfQogCiAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgewotICAgICAgICAgICAgaWYgKG1TdG9wcGVkKSB7CisgICAgICAgICAgICBpZiAoY2hhbm5lbENvbmZpZyA9PSAwKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIGNoYW5uZWxzIDoiICsgY2hhbm5lbENvdW50KTsKKyAgICAgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfT1VUUFVUOworICAgICAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVN0YXR1c0NvZGUgPT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CiAgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAic3RvcCgpIGNhbGxlZCBiZWZvcmUgc3RhcnQoKSwgcmV0dXJuaW5nLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckNvZGVPblN0b3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtU3RhdHVzQ29kZSAhPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJFcnJvciB3YXMgcmFpc2VkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtSXRlbSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiU3RhcnQgY2FsbGVkIHR3aWNlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN5bnRoZXNpc1BsYXliYWNrUXVldWVJdGVtIGl0ZW0gPSBuZXcgU3ludGhlc2lzUGxheWJhY2tRdWV1ZUl0ZW0oCkBAIC0xNjEsMTMgKzE3MCwxMSBAQAogICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLlNVQ0NFU1M7CiAgICAgfQogCi0KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGF1ZGlvQXZhaWxhYmxlKGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKLSAgICAgICAgaWYgKERCRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiYXVkaW9BdmFpbGFibGUoYnl0ZVsiICsgYnVmZmVyLmxlbmd0aCArICJdLCIKLSAgICAgICAgICAgICAgICAgICAgKyBvZmZzZXQgKyAiLCIgKyBsZW5ndGggKyAiKSIpOwotICAgICAgICB9CisgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgImF1ZGlvQXZhaWxhYmxlKGJ5dGVbIiArIGJ1ZmZlci5sZW5ndGggKyAiXSwiICsgb2Zmc2V0ICsgIiwiICsgbGVuZ3RoCisgICAgICAgICAgICAgICAgKyAiKSIpOworCiAgICAgICAgIGlmIChsZW5ndGggPiBnZXRNYXhCdWZmZXJTaXplKCkgfHwgbGVuZ3RoIDw9IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImJ1ZmZlciBpcyB0b28gbGFyZ2Ugb3Igb2YgemVybyBsZW5ndGggKCIgKwogICAgICAgICAgICAgICAgICAgICArIGxlbmd0aCArICIgYnl0ZXMpIik7CkBAIC0xNzUsOSArMTgyLDE3IEBACiAKICAgICAgICAgU3ludGhlc2lzUGxheWJhY2tRdWV1ZUl0ZW0gaXRlbSA9IG51bGw7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgewotICAgICAgICAgICAgaWYgKG1JdGVtID09IG51bGwgfHwgbVN0b3BwZWQpIHsKKyAgICAgICAgICAgIGlmIChtSXRlbSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVN0YXR1c0NvZGUgPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLkVSUk9SX09VVFBVVDsKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1TdGF0dXNDb2RlICE9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkVycm9yIHdhcyByYWlzZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1TdGF0dXNDb2RlID09IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckNvZGVPblN0b3AoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGl0ZW0gPSBtSXRlbTsKICAgICAgICAgfQogCkBAIC0xOTAsMTEgKzIwNSwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaXRlbS5wdXQoYnVmZmVyQ29weSk7CiAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7Ci0gICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7CisgICAgICAgICAgICAgICAgbVN0YXR1c0NvZGUgPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLkVSUk9SX09VVFBVVDsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgbUxvZ2dlci5vbkVuZ2luZURhdGFSZWNlaXZlZCgpOwotCiAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guU1VDQ0VTUzsKICAgICB9CiAKQEAgLTIwMiwzNSArMjE5LDc0IEBACiAgICAgcHVibGljIGludCBkb25lKCkgewogICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJkb25lKCkiKTsKIAorICAgICAgICBpbnQgc3RhdHVzQ29kZSA9IDA7CiAgICAgICAgIFN5bnRoZXNpc1BsYXliYWNrUXVldWVJdGVtIGl0ZW0gPSBudWxsOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKICAgICAgICAgICAgIGlmIChtRG9uZSkgewogICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkR1cGxpY2F0ZSBjYWxsIHRvIGRvbmUoKSIpOworICAgICAgICAgICAgICAgIC8vIE5vdCBhbiBlcnJvciB0aGF0IHdvdWxkIHByZXZlbnQgc3ludGhlc2lzLiBIZW5jZSBubworICAgICAgICAgICAgICAgIC8vIHNldFN0YXR1c0NvZGUKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQotCisgICAgICAgICAgICBpZiAobVN0YXR1c0NvZGUgPT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CisgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiUmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckNvZGVPblN0b3AoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1Eb25lID0gdHJ1ZTsKIAogICAgICAgICAgICAgaWYgKG1JdGVtID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyAuZG9uZSgpIHdhcyBjYWxsZWQgYmVmb3JlIC5zdGFydC4gVHJlYXQgaXQgYXMgc3VjY2Vzc2Z1bCBzeW50aGVzaXMKKyAgICAgICAgICAgICAgICAvLyBmb3IgYSBjbGllbnQsIGRlc3BpdGUgc2VydmljZSBiYWQgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiZG9uZSgpIHdhcyBjYWxsZWQgYmVmb3JlIHN0YXJ0KCkgY2FsbCIpOworICAgICAgICAgICAgICAgIGlmIChtU3RhdHVzQ29kZSA9PSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgbURpc3BhdGNoZXIuZGlzcGF0Y2hPblN1Y2Nlc3MoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtRGlzcGF0Y2hlci5kaXNwYXRjaE9uRXJyb3IobVN0YXR1c0NvZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtTG9nZ2VyLm9uRW5naW5lQ29tcGxldGUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpdGVtID0gbUl0ZW07CisgICAgICAgICAgICBzdGF0dXNDb2RlID0gbVN0YXR1c0NvZGU7CiAgICAgICAgIH0KIAotICAgICAgICBpdGVtLmRvbmUoKTsKKyAgICAgICAgLy8gU2lnbmFsIGRvbmUgb3IgZXJyb3IgdG8gaXRlbQorICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgIGl0ZW0uZG9uZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXRlbS5zdG9wKHN0YXR1c0NvZGUpOworICAgICAgICB9CiAgICAgICAgIG1Mb2dnZXIub25FbmdpbmVDb21wbGV0ZSgpOwotCiAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guU1VDQ0VTUzsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBlcnJvcigpIHsKLSAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiZXJyb3IoKSBbd2lsbCBjYWxsIHN0b3BdIik7Ci0gICAgICAgIC8vIEN1cnJlbnRseSwgdGhpcyBjYWxsIHdpbGwgbm90IGJlIGxvZ2dlZCBpZiBlcnJvciggKSBpcyBjYWxsZWQKLSAgICAgICAgLy8gYmVmb3JlIHN0YXJ0LgotICAgICAgICBtTG9nZ2VyLm9uRXJyb3IoKTsKLSAgICAgICAgc3RvcEltcGwodHJ1ZSk7CisgICAgICAgIGVycm9yKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfU1lOVEhFU0lTKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBlcnJvcihpbnQgZXJyb3JDb2RlKSB7CisgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgImVycm9yKCkgW3dpbGwgY2FsbCBzdG9wXSIpOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKKyAgICAgICAgICAgIGlmIChtRG9uZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TdGF0dXNDb2RlID0gZXJyb3JDb2RlOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBmYWxsYmFjaygpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7CisgICAgICAgICAgICBpZiAoaGFzU3RhcnRlZCgpIHx8IGhhc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRGlzcGF0Y2hlci5kaXNwYXRjaE9uRmFsbGJhY2soKTsKKyAgICAgICAgICAgIG1TdGF0dXNDb2RlID0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVUNDRVNTOworICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvUmVxdWVzdENvbmZpZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9SZXF1ZXN0Q29uZmlnLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1Mzg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvUmVxdWVzdENvbmZpZy5qYXZhCkBAIC0wLDAgKzEsMjEzIEBACitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworCisvKioKKyAqIFN5bnRoZXNpcyByZXF1ZXN0IGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBjbGFzcyBpcyBpbW11dGFibGUsIGFuZCBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB1c2luZworICoge0BsaW5rIFJlcXVlc3RDb25maWcuQnVpbGRlcn0uCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBSZXF1ZXN0Q29uZmlnIHsKKworICAgIC8qKiBCdWlsZGVyIGZvciBjb25zdHJ1Y3RpbmcgUmVxdWVzdENvbmZpZyBvYmplY3RzLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQnVpbGRlciB7CisgICAgICAgIHByaXZhdGUgVm9pY2VJbmZvIG1DdXJyZW50Vm9pY2VJbmZvOworICAgICAgICBwcml2YXRlIEJ1bmRsZSBtVm9pY2VQYXJhbXM7CisgICAgICAgIHByaXZhdGUgQnVuZGxlIG1BdWRpb1BhcmFtczsKKworICAgICAgICBCdWlsZGVyKFZvaWNlSW5mbyBjdXJyZW50Vm9pY2VJbmZvLCBCdW5kbGUgdm9pY2VQYXJhbXMsIEJ1bmRsZSBhdWRpb1BhcmFtcykgeworICAgICAgICAgICAgbUN1cnJlbnRWb2ljZUluZm8gPSBjdXJyZW50Vm9pY2VJbmZvOworICAgICAgICAgICAgbVZvaWNlUGFyYW1zID0gdm9pY2VQYXJhbXM7CisgICAgICAgICAgICBtQXVkaW9QYXJhbXMgPSBhdWRpb1BhcmFtczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGUgbmV3IFJlcXVlc3RDb25maWcgYnVpbGRlci4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBuZXdCdWlsZGVyKCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKG51bGwsIG5ldyBCdW5kbGUoKSwgbmV3IEJ1bmRsZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGUgbmV3IFJlcXVlc3RDb25maWcgYnVpbGRlci4KKyAgICAgICAgICogQHBhcmFtIHByb3RvdHlwZQorICAgICAgICAgKiAgICAgICAgICAgIFByb3RvdHlwZSBvZiBuZXcgUmVxdWVzdENvbmZpZy4gQ29waWVzIGFsbCBmaWVsZHMgb2YgdGhlCisgICAgICAgICAqICAgICAgICAgICAgcHJvdG90eXBlIHRvIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgbmV3QnVpbGRlcihSZXF1ZXN0Q29uZmlnIHByb3RvdHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKHByb3RvdHlwZS5tQ3VycmVudFZvaWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgKEJ1bmRsZSlwcm90b3R5cGUubVZvaWNlUGFyYW1zLmNsb25lKCksCisgICAgICAgICAgICAgICAgICAgIChCdW5kbGUpcHJvdG90eXBlLm1BdWRpb1BhcmFtcy5jbG9uZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBTZXQgdm9pY2UgZm9yIHJlcXVlc3QuIFdpbGwgcmVzZXQgdm9pY2UgcGFyYW1ldGVycyB0byB0aGUgZGVmYXVsdHMuICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFZvaWNlKFZvaWNlSW5mbyB2b2ljZSkgeworICAgICAgICAgICAgbUN1cnJlbnRWb2ljZUluZm8gPSB2b2ljZTsKKyAgICAgICAgICAgIG1Wb2ljZVBhcmFtcyA9IChCdW5kbGUpdm9pY2UuZ2V0UGFyYW1zV2l0aERlZmF1bHRzKCkuY2xvbmUoKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldCByZXF1ZXN0IHZvaWNlIHBhcmFtZXRlci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHBhcmFtTmFtZQorICAgICAgICAgKiAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuIEl0IGhhcyB0byBiZSBvbmUgb2YgdGhlIGtleXMKKyAgICAgICAgICogICAgICAgICAgICBmcm9tIHtAbGluayBWb2ljZUluZm8jZ2V0UGFyYW1zV2l0aERlZmF1bHRzKCl9CisgICAgICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAgICAgKiAgICAgICAgICAgIFZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuIEl0cyB0eXBlIGNhbiBiZSBvbmUgb2Y6IEludGVnZXIsIEZsb2F0LAorICAgICAgICAgKiAgICAgICAgICAgIEJvb2xlYW4sIFN0cmluZywgVm9pY2VJbmZvICh3aWxsIGJlIHNldCBhcyBhIFN0cmluZywgcmVzdWx0IG9mIGEgY2FsbCB0bworICAgICAgICAgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVm9pY2VJbmZvI2dldE5hbWUoKX0pIG9yIGJ5dGVbXS4gSXQgaGFzIHRvIGJlIG9mIHRoZSBzYW1lIHR5cGUKKyAgICAgICAgICogICAgICAgICAgICBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmcm9tIHtAbGluayBWb2ljZUluZm8jZ2V0UGFyYW1zV2l0aERlZmF1bHRzKCl9CisgICAgICAgICAqICAgICAgICAgICAgZm9yIHRoYXQgcGFyYW1ldGVyLgorICAgICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgorICAgICAgICAgKiAgICAgICAgICAgIElmIHBhcmFtTmFtZSBpcyBub3QgYSB2YWxpZCBwYXJhbWV0ZXIgbmFtZSBvciBpdHMgdmFsdWUgaXMgb2YgYSB3cm9uZworICAgICAgICAgKiAgICAgICAgICAgIHR5cGUuCisgICAgICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCisgICAgICAgICAqICAgICAgICAgICAgSWYgbm8gdm9pY2UgaXMgc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0Vm9pY2VQYXJhbShTdHJpbmcgcGFyYW1OYW1lLCBPYmplY3QgdmFsdWUpeworICAgICAgICAgICAgaWYgKG1DdXJyZW50Vm9pY2VJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IHNldCB2b2ljZSBwYXJhbWV0ZXIsIG5vIHZvaWNlIGlzIHNldCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0IGRlZmF1bHRWYWx1ZSA9IG1DdXJyZW50Vm9pY2VJbmZvLmdldFBhcmFtc1dpdGhEZWZhdWx0cygpLmdldChwYXJhbU5hbWUpOworICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJQYXJhbWV0ZXIgXCIiICsgcGFyYW1OYW1lICsgIlwiIGlzIG5vdCBhdmFpbGFibGUgaW4gc2V0IHZvaWNlIHdpdGggIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lOiAiICsgbUN1cnJlbnRWb2ljZUluZm8uZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgaXQncyBWb2ljZUluZm8sIGdldCBpdHMgbmFtZQorICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVm9pY2VJbmZvKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSAoKFZvaWNlSW5mbyl2YWx1ZSkuZ2V0TmFtZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayB0eXBlIGluZm9ybWF0aW9uCisgICAgICAgICAgICBpZiAoIWRlZmF1bHRWYWx1ZS5nZXRDbGFzcygpLmVxdWFscyh2YWx1ZS5nZXRDbGFzcygpKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAiUGFyYW1ldGVyIFwiIiArIHBhcmFtTmFtZSArIlwiIGlzIG9mIGRpZmZlcmVudCB0eXBlLiBWYWx1ZSBwYXNzZWQgaGFzICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSAiICsgdmFsdWUuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIGJ1dCBzaG91bGQgaGF2ZSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUgIiArIGRlZmF1bHRWYWx1ZS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFBhcmFtKG1Wb2ljZVBhcmFtcywgcGFyYW1OYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgcmVxdWVzdCBhdWRpbyBwYXJhbWV0ZXIuCisgICAgICAgICAqCisgICAgICAgICAqIERvZXNuJ3QgcmVxdWlyZXMgYSBzZXQgdm9pY2UuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBwYXJhbU5hbWUKKyAgICAgICAgICogICAgICAgICAgICBOYW1lIG9mIHBhcmFtZXRlci4KKyAgICAgICAgICogQHBhcmFtIHZhbHVlCisgICAgICAgICAqICAgICAgICAgICAgVmFsdWUgb2YgcGFyYW1ldGVyLiBJdHMgdHlwZSBjYW4gYmUgb25lIG9mOiBJbnRlZ2VyLCBGbG9hdCwgQm9vbGVhbiwgU3RyaW5nCisgICAgICAgICAqICAgICAgICAgICAgb3IgYnl0ZVtdLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0QXVkaW9QYXJhbShTdHJpbmcgcGFyYW1OYW1lLCBPYmplY3QgdmFsdWUpIHsKKyAgICAgICAgICAgIHNldFBhcmFtKG1BdWRpb1BhcmFtcywgcGFyYW1OYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zI0FVRElPX1BBUkFNX1NUUkVBTX0gYXVkaW8gcGFyYW1ldGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gc3RyZWFtSWQgT25lIG9mIHRoZSBTVFJFQU1fIGNvbnN0YW50cyBkZWZpbmVkIGluIHtAbGluayBBdWRpb01hbmFnZXJ9LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgc2V0QXVkaW9QYXJhbVN0cmVhbShpbnQgc3RyZWFtSWQpIHsKKyAgICAgICAgICAgIHNldEF1ZGlvUGFyYW0oVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcy5BVURJT19QQVJBTV9TVFJFQU0sIHN0cmVhbUlkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zI0FVRElPX1BBUkFNX1ZPTFVNRX0gYXVkaW8gcGFyYW1ldGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gdm9sdW1lIEZsb2F0IGluIHJhbmdlIG9mIDAuMCB0byAxLjAuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBzZXRBdWRpb1BhcmFtVm9sdW1lKGZsb2F0IHZvbHVtZSkgeworICAgICAgICAgICAgc2V0QXVkaW9QYXJhbShUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLkFVRElPX1BBUkFNX1ZPTFVNRSwgdm9sdW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zI0FVRElPX1BBUkFNX1BBTn0gYXVkaW8gcGFyYW1ldGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gcGFuIEZsb2F0IGluIHJhbmdlIG9mIC0xLjAgdG8gKzEuMC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEF1ZGlvUGFyYW1QYW4oZmxvYXQgcGFuKSB7CisgICAgICAgICAgICBzZXRBdWRpb1BhcmFtKFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMuQVVESU9fUEFSQU1fUEFOLCBwYW4pOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHNldFBhcmFtKEJ1bmRsZSBidW5kbGUsIFN0cmluZyBmZWF0dXJlTmFtZSwgT2JqZWN0IHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICBidW5kbGUucHV0U3RyaW5nKGZlYXR1cmVOYW1lLCAoU3RyaW5nKXZhbHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZih2YWx1ZSBpbnN0YW5jZW9mIGJ5dGVbXSkgeworICAgICAgICAgICAgICAgIGJ1bmRsZS5wdXRCeXRlQXJyYXkoZmVhdHVyZU5hbWUsIChieXRlW10pdmFsdWUpOworICAgICAgICAgICAgfSBlbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgSW50ZWdlcikgeworICAgICAgICAgICAgICAgIGJ1bmRsZS5wdXRJbnQoZmVhdHVyZU5hbWUsIChJbnRlZ2VyKXZhbHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZih2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0KSB7CisgICAgICAgICAgICAgICAgYnVuZGxlLnB1dEZsb2F0KGZlYXR1cmVOYW1lLCAoRmxvYXQpdmFsdWUpOworICAgICAgICAgICAgfSBlbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgRG91YmxlKSB7CisgICAgICAgICAgICAgICAgYnVuZGxlLnB1dEZsb2F0KGZlYXR1cmVOYW1lLCAoRmxvYXQpdmFsdWUpOworICAgICAgICAgICAgfSBlbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbikgeworICAgICAgICAgICAgICAgIGJ1bmRsZS5wdXRCb29sZWFuKGZlYXR1cmVOYW1lLCAoQm9vbGVhbil2YWx1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgdHlwZSBvZiBvYmplY3QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBCdWlsZCBuZXcgUmVxdWVzdENvbmZpZyBpbnN0YW5jZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBSZXF1ZXN0Q29uZmlnIGJ1aWxkKCkgeworICAgICAgICAgICAgUmVxdWVzdENvbmZpZyBjb25maWcgPQorICAgICAgICAgICAgICAgICAgICBuZXcgUmVxdWVzdENvbmZpZyhtQ3VycmVudFZvaWNlSW5mbywgbVZvaWNlUGFyYW1zLCBtQXVkaW9QYXJhbXMpOworICAgICAgICAgICAgcmV0dXJuIGNvbmZpZzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgUmVxdWVzdENvbmZpZyhWb2ljZUluZm8gdm9pY2VJbmZvLCBCdW5kbGUgdm9pY2VQYXJhbXMsIEJ1bmRsZSBhdWRpb1BhcmFtcykgeworICAgICAgICBtQ3VycmVudFZvaWNlSW5mbyA9IHZvaWNlSW5mbzsKKyAgICAgICAgbVZvaWNlUGFyYW1zID0gdm9pY2VQYXJhbXM7CisgICAgICAgIG1BdWRpb1BhcmFtcyA9IGF1ZGlvUGFyYW1zOworICAgIH0KKworICAgIC8qKgorICAgICAqIEN1cnJlbnRseSBzZXQgdm9pY2UuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBWb2ljZUluZm8gbUN1cnJlbnRWb2ljZUluZm87CisKKyAgICAvKioKKyAgICAgKiBWb2ljZSBwYXJhbWV0ZXJzIGJ1bmRsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtVm9pY2VQYXJhbXM7CisKKyAgICAvKioKKyAgICAgKiBBdWRpbyBwYXJhbWV0ZXJzIGJ1bmRsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQXVkaW9QYXJhbXM7CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIEN1cnJlbnRseSBzZXQgcmVxdWVzdCB2b2ljZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgVm9pY2VJbmZvIGdldFZvaWNlKCkgeworICAgICAgICByZXR1cm4gbUN1cnJlbnRWb2ljZUluZm87CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBSZXF1ZXN0IGF1ZGlvIHBhcmFtZXRlcnMuCisgICAgICovCisgICAgcHVibGljIEJ1bmRsZSBnZXRBdWRpb1BhcmFtcygpIHsKKyAgICAgICAgcmV0dXJuIG1BdWRpb1BhcmFtczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFJlcXVlc3Qgdm9pY2UgcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgQnVuZGxlIGdldFZvaWNlUGFyYW1zKCkgeworICAgICAgICByZXR1cm4gbVZvaWNlUGFyYW1zOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9SZXF1ZXN0Q29uZmlnSGVscGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1JlcXVlc3RDb25maWdIZWxwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjVjOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9SZXF1ZXN0Q29uZmlnSGVscGVyLmphdmEKQEAgLTAsMCArMSwxNzAgQEAKK3BhY2thZ2UgYW5kcm9pZC5zcGVlY2gudHRzOworCitpbXBvcnQgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5FbmdpbmVTdGF0dXM7CisKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCisvKioKKyAqIFNldCBvZiBjb21tb24gaGV1cmlzdGljcyBmb3Igc2VsZWN0aW5nIHtAbGluayBWb2ljZUluZm99IGZyb20KKyAqIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjZ2V0RW5naW5lU3RhdHVzKCl9IG91dHB1dC4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFJlcXVlc3RDb25maWdIZWxwZXIgeworICAgIHByaXZhdGUgUmVxdWVzdENvbmZpZ0hlbHBlcigpIHt9CisKKyAgICAvKioKKyAgICAgKiBJbnRlcmZhY2UgZm9yIHNjb3JpbmcgVm9pY2VJbmZvIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBWb2ljZVNjb3JlciB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTY29yZSBWb2ljZUluZm8uIElmIHRoZSBzY29yZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybywgdGhhdCB2b2ljZSBpcyBkaXNjYXJkZWQuCisgICAgICAgICAqIElmIHR3byB2b2ljZXMgaGF2ZSBzYW1lIGRlc2lyZWQgcHJpbWFyeSBjaGFyYWN0ZXJpc3RpY3MgKGhpZ2hlc3QgcXVhbGl0eSwgbG93ZXN0CisgICAgICAgICAqIGxhdGVuY3kgb3Igb3RoZXJzKSwgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXIgc2NvcmUgaXMgc2VsZWN0ZWQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IHNjb3JlVm9pY2UoVm9pY2VJbmZvIHZvaWNlSW5mbyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2NvcmUgcG9zaXRpdmVseSB2b2ljZXMgdGhhdCBleGFjdGx5IG1hdGNoIHRoZSBsb2NhbGUgc3VwcGxpZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRXhhY3RMb2NhbGVNYXRjaGVyIGltcGxlbWVudHMgVm9pY2VTY29yZXIgeworICAgICAgICBwcml2YXRlIGZpbmFsIExvY2FsZSBtTG9jYWxlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTY29yZSBwb3NpdGl2ZWx5IHZvaWNlcyB0aGF0IGV4YWN0bHkgbWF0Y2ggdGhlIGdpdmVuIGxvY2FsZQorICAgICAgICAgKiBAcGFyYW0gbG9jYWxlIFJlZmVyZW5jZSBsb2NhbGUuIElmIG51bGwsIHRoZSBkZWZhdWx0IGxvY2FsZSB3aWxsIGJlIHVzZWQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgRXhhY3RMb2NhbGVNYXRjaGVyKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgICAgIGlmIChsb2NhbGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1Mb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtTG9jYWxlID0gbG9jYWxlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IHNjb3JlVm9pY2UoVm9pY2VJbmZvIHZvaWNlSW5mbykgeworICAgICAgICAgICAgcmV0dXJuIG1Mb2NhbGUuZXF1YWxzKHZvaWNlSW5mby5nZXRMb2NhbGUoKSkgPyAxIDogMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNjb3JlIHBvc2l0aXZlbHkgdm9pY2VzIHRoYXQgbWF0Y2ggZXhhY3RseSB0aGUgZ2l2ZW4gbG9jYWxlIChzY29yZSAzKQorICAgICAqIG9yIHRoYXQgc2hhcmUgc2FtZSBsYW5ndWFnZSBhbmQgY291bnRyeSAoc2NvcmUgMiksIG9yIHRoYXQgc2hhcmUganVzdCBhIGxhbmd1YWdlIChzY29yZSAxKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIExhbmd1YWdlTWF0Y2hlciBpbXBsZW1lbnRzIFZvaWNlU2NvcmVyIHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBMb2NhbGUgbUxvY2FsZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogU2NvcmUgcG9zaXRpdmVseSB2b2ljZXMgd2l0aCBzaW1pbGFyIGxvY2FsZS4KKyAgICAgICAgICogQHBhcmFtIGxvY2FsZSBSZWZlcmVuY2UgbG9jYWxlLiBJZiBudWxsLCBkZWZhdWx0IHdpbGwgYmUgdXNlZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBMYW5ndWFnZU1hdGNoZXIoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAgICAgaWYgKGxvY2FsZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUxvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1Mb2NhbGUgPSBsb2NhbGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBzY29yZVZvaWNlKFZvaWNlSW5mbyB2b2ljZUluZm8pIHsKKyAgICAgICAgICAgIGZpbmFsIExvY2FsZSB2b2ljZUxvY2FsZSA9IHZvaWNlSW5mby5nZXRMb2NhbGUoKTsKKyAgICAgICAgICAgIGlmIChtTG9jYWxlLmVxdWFscyh2b2ljZUxvY2FsZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG1Mb2NhbGUuZ2V0TGFuZ3VhZ2UoKS5lcXVhbHModm9pY2VMb2NhbGUuZ2V0TGFuZ3VhZ2UoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1Mb2NhbGUuZ2V0Q291bnRyeSgpLmVxdWFscyh2b2ljZUxvY2FsZS5nZXRDb3VudHJ5KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGhpZ2hlc3QgcXVhbGl0eSB2b2ljZSBmcm9tIHZvaWNlcyB0aGF0IHNjb3JlIG1vcmUgdGhhbiB6ZXJvIGZyb20gdGhlIHBhc3NlZCBzY29yZXIuCisgICAgICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB2b2ljZSB3aXRoIHRoZSBzYW1lIGhpZ2hlc3QgcXVhbGl0eSwgdGhlbiB0aGlzIG1ldGhvZCByZXR1cm5zIG9uZQorICAgICAqIHdpdGggdGhlIGhpZ2hlc3Qgc2NvcmUuIElmIHRoZXkgc2hhcmUgc2FtZSBzY29yZSBhcyB3ZWxsLCBvbmUgd2l0aCB0aGUgbG93ZXIgaW5kZXggaW4gdGhlCisgICAgICogdm9pY2VzIGxpc3QgaXMgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZW5naW5lU3RhdHVzCisgICAgICogICAgICAgICAgICBWb2ljZXMgc3RhdHVzIHJlY2VpdmVkIGZyb20gYSB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50I2dldEVuZ2luZVN0YXR1cygpfSBjYWxsLgorICAgICAqIEBwYXJhbSB2b2ljZVNjb3JlcgorICAgICAqICAgICAgICAgICAgVXNlZCB0byBkaXNjYXJkIHVuc3VpdGFibGUgdm9pY2VzIGFuZCBoZWxwIHNldHRsZSBjYXNlcyB3aGVyZSBtb3JlIHRoYW4KKyAgICAgKiAgICAgICAgICAgIG9uZSB2b2ljZSBoYXMgdGhlIGRlc2lyZWQgY2hhcmFjdGVyaXN0aWMuCisgICAgICogQHBhcmFtIGhhc1RvQmVFbWJlZGRlZAorICAgICAqICAgICAgICAgICAgSWYgdHJ1ZSwgcmVxdWlyZSB0aGUgdm9pY2UgdG8gYmUgYW4gZW1iZWRkZWQgdm9pY2UgKG5vIG5ldHdvcmsKKyAgICAgKiAgICAgICAgICAgIGFjY2VzcyB3aWxsIGJlIHJlcXVpcmVkIGZvciBzeW50aGVzaXMpLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFZvaWNlSW5mbyBnZXRIaWdoZXN0UXVhbGl0eVZvaWNlKEVuZ2luZVN0YXR1cyBlbmdpbmVTdGF0dXMsCisgICAgICAgICAgICBWb2ljZVNjb3JlciB2b2ljZVNjb3JlciwgYm9vbGVhbiBoYXNUb0JlRW1iZWRkZWQpIHsKKyAgICAgICAgVm9pY2VJbmZvIGJlc3RWb2ljZSA9IG51bGw7CisgICAgICAgIGludCBiZXN0U2NvcmVNYXRjaCA9IDE7CisgICAgICAgIGludCBiZXN0Vm9pY2VRdWFsaXR5ID0gMDsKKworICAgICAgICBmb3IgKFZvaWNlSW5mbyB2b2ljZSA6IGVuZ2luZVN0YXR1cy5nZXRWb2ljZXMoKSkgeworICAgICAgICAgICAgaW50IHNjb3JlID0gdm9pY2VTY29yZXIuc2NvcmVWb2ljZSh2b2ljZSk7CisgICAgICAgICAgICBpZiAoc2NvcmUgPD0gMCB8fCBoYXNUb0JlRW1iZWRkZWQgJiYgdm9pY2UuZ2V0UmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHx8IHZvaWNlLmdldFF1YWxpdHkoKSA8IGJlc3RWb2ljZVF1YWxpdHkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJlc3RWb2ljZSA9PSBudWxsIHx8CisgICAgICAgICAgICAgICAgICAgIHZvaWNlLmdldFF1YWxpdHkoKSA+IGJlc3RWb2ljZVF1YWxpdHkgfHwKKyAgICAgICAgICAgICAgICAgICAgc2NvcmUgPiBiZXN0U2NvcmVNYXRjaCkgeworICAgICAgICAgICAgICAgIGJlc3RWb2ljZSA9IHZvaWNlOworICAgICAgICAgICAgICAgIGJlc3RTY29yZU1hdGNoID0gc2NvcmU7CisgICAgICAgICAgICAgICAgYmVzdFZvaWNlUXVhbGl0eSA9IHZvaWNlLmdldFF1YWxpdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmVzdFZvaWNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBoaWdoZXN0IHF1YWxpdHkgdm9pY2UuCisgICAgICoKKyAgICAgKiBIaWdoZXN0IHF1YWxpdHkgdm9pY2UgaXMgc2VsZWN0ZWQgZnJvbSB2b2ljZXMgdGhhdCBzY29yZSBtb3JlIHRoYW4gemVybyBmcm9tIHRoZSBwYXNzZWQKKyAgICAgKiBzY29yZXIuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgdm9pY2Ugd2l0aCB0aGUgc2FtZSBoaWdoZXN0IHF1YWxpdHksIHRoZW4gdGhpcyBtZXRob2QKKyAgICAgKiB3aWxsIHJldHVybiBvbmUgd2l0aCB0aGUgaGlnaGVzdCBzY29yZS4gSWYgdGhleSBzaGFyZSBzYW1lIHNjb3JlIGFzIHdlbGwsIG9uZSB3aXRoIHRoZSBsb3dlcgorICAgICAqIGluZGV4IGluIHRoZSB2b2ljZXMgbGlzdCBpcyByZXR1cm5lZC4KKworICAgICAqIEBwYXJhbSBlbmdpbmVTdGF0dXMKKyAgICAgKiAgICAgICAgICAgIFZvaWNlcyBzdGF0dXMgcmVjZWl2ZWQgZnJvbSBhIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjZ2V0RW5naW5lU3RhdHVzKCl9IGNhbGwuCisgICAgICogQHBhcmFtIGhhc1RvQmVFbWJlZGRlZAorICAgICAqICAgICAgICAgICAgSWYgdHJ1ZSwgcmVxdWlyZSB0aGUgdm9pY2UgdG8gYmUgYW4gZW1iZWRkZWQgdm9pY2UgKG5vIG5ldHdvcmsKKyAgICAgKiAgICAgICAgICAgIGFjY2VzcyB3aWxsIGJlIHJlcXVpcmVkIGZvciBzeW50aGVzaXMpLgorICAgICAqIEBwYXJhbSB2b2ljZVNjb3JlcgorICAgICAqICAgICAgICAgICAgU2NvcmVyIGlzIHVzZWQgdG8gZGlzY2FyZCB1bnN1aXRhYmxlIHZvaWNlcyBhbmQgaGVscCBzZXR0bGUgY2FzZXMgd2hlcmUgbW9yZSB0aGFuCisgICAgICogICAgICAgICAgICBvbmUgdm9pY2UgaGFzIGhpZ2hlc3QgcXVhbGl0eS4KKyAgICAgKiBAcmV0dXJuIFJlcXVlc3RDb25maWcgd2l0aCBzZWxlY3RlZCB2b2ljZSBvciBudWxsIGlmIHN1aXRhYmxlIHZvaWNlIHdhcyBub3QgZm91bmQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBSZXF1ZXN0Q29uZmlnIGhpZ2hlc3RRdWFsaXR5KEVuZ2luZVN0YXR1cyBlbmdpbmVTdGF0dXMsCisgICAgICAgICAgICBib29sZWFuIGhhc1RvQmVFbWJlZGRlZCwgVm9pY2VTY29yZXIgdm9pY2VTY29yZXIpIHsKKyAgICAgICAgVm9pY2VJbmZvIHZvaWNlID0gZ2V0SGlnaGVzdFF1YWxpdHlWb2ljZShlbmdpbmVTdGF0dXMsIHZvaWNlU2NvcmVyLCBoYXNUb0JlRW1iZWRkZWQpOworICAgICAgICBpZiAodm9pY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFJlcXVlc3RDb25maWcuQnVpbGRlci5uZXdCdWlsZGVyKCkuc2V0Vm9pY2Uodm9pY2UpLmJ1aWxkKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGhpZ2hlc3QgcXVhbGl0eSB2b2ljZSBmb3IgdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqCisgICAgICogQ2FsbCB7QGxpbmsgI2hpZ2hlc3RRdWFsaXR5KEVuZ2luZVN0YXR1cywgYm9vbGVhbiwgVm9pY2VTY29yZXIpfSB3aXRoCisgICAgICoge0BsaW5rIExhbmd1YWdlTWF0Y2hlcn0gc2V0IHRvIGRldmljZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBlbmdpbmVTdGF0dXMKKyAgICAgKiAgICAgICAgICAgIFZvaWNlcyBzdGF0dXMgcmVjZWl2ZWQgZnJvbSBhIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjZ2V0RW5naW5lU3RhdHVzKCl9IGNhbGwuCisgICAgICogQHBhcmFtIGhhc1RvQmVFbWJlZGRlZAorICAgICAqICAgICAgICAgICAgSWYgdHJ1ZSwgcmVxdWlyZSB0aGUgdm9pY2UgdG8gYmUgYW4gZW1iZWRkZWQgdm9pY2UgKG5vIG5ldHdvcmsKKyAgICAgKiAgICAgICAgICAgIGFjY2VzcyB3aWxsIGJlIHJlcXVpcmVkIGZvciBzeW50aGVzaXMpLgorICAgICAqIEByZXR1cm4gUmVxdWVzdENvbmZpZyB3aXRoIHNlbGVjdGVkIHZvaWNlIG9yIG51bGwgaWYgc3VpdGFibGUgdm9pY2Ugd2FzIG5vdCBmb3VuZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlcXVlc3RDb25maWcgaGlnaGVzdFF1YWxpdHkoRW5naW5lU3RhdHVzIGVuZ2luZVN0YXR1cywKKyAgICAgICAgICAgIGJvb2xlYW4gaGFzVG9CZUVtYmVkZGVkKSB7CisgICAgICAgIHJldHVybiBoaWdoZXN0UXVhbGl0eShlbmdpbmVTdGF0dXMsIGhhc1RvQmVFbWJlZGRlZCwKKyAgICAgICAgICAgICAgICBuZXcgTGFuZ3VhZ2VNYXRjaGVyKExvY2FsZS5nZXREZWZhdWx0KCkpKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU2lsZW5jZVBsYXliYWNrUXVldWVJdGVtLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1NpbGVuY2VQbGF5YmFja1F1ZXVlSXRlbS5qYXZhCmluZGV4IGE1ZTQ3YWUuLjg4YjdjNzAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU2lsZW5jZVBsYXliYWNrUXVldWVJdGVtLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9TaWxlbmNlUGxheWJhY2tRdWV1ZUl0ZW0uamF2YQpAQCAtMTcsNyArMTcsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5vcy5Db25kaXRpb25WYXJpYWJsZTsKIGltcG9ydCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoU2VydmljZS5VdHRlcmFuY2VQcm9ncmVzc0Rpc3BhdGNoZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogY2xhc3MgU2lsZW5jZVBsYXliYWNrUXVldWVJdGVtIGV4dGVuZHMgUGxheWJhY2tRdWV1ZUl0ZW0gewogICAgIHByaXZhdGUgZmluYWwgQ29uZGl0aW9uVmFyaWFibGUgbUNvbmRWYXIgPSBuZXcgQ29uZGl0aW9uVmFyaWFibGUoKTsKQEAgLTMyLDE0ICszMSwyMCBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgZ2V0RGlzcGF0Y2hlcigpLmRpc3BhdGNoT25TdGFydCgpOworICAgICAgICBib29sZWFuIHdhc1N0b3BwZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKG1TaWxlbmNlRHVyYXRpb25NcyA+IDApIHsKLSAgICAgICAgICAgIG1Db25kVmFyLmJsb2NrKG1TaWxlbmNlRHVyYXRpb25Ncyk7CisgICAgICAgICAgd2FzU3RvcHBlZCA9IG1Db25kVmFyLmJsb2NrKG1TaWxlbmNlRHVyYXRpb25Ncyk7CiAgICAgICAgIH0KLSAgICAgICAgZ2V0RGlzcGF0Y2hlcigpLmRpc3BhdGNoT25Eb25lKCk7CisgICAgICAgIGlmICh3YXNTdG9wcGVkKSB7CisgICAgICAgICAgICBnZXREaXNwYXRjaGVyKCkuZGlzcGF0Y2hPblN0b3AoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdldERpc3BhdGNoZXIoKS5kaXNwYXRjaE9uU3VjY2VzcygpOworICAgICAgICB9CisKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICB2b2lkIHN0b3AoYm9vbGVhbiBpc0Vycm9yKSB7CisgICAgdm9pZCBzdG9wKGludCBlcnJvckNvZGUpIHsKICAgICAgICAgbUNvbmRWYXIub3BlbigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzQ2FsbGJhY2suamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzQ2FsbGJhY2suamF2YQppbmRleCBmOThiYjA5Li5iYzJmMjM5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc0NhbGxiYWNrLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9TeW50aGVzaXNDYWxsYmFjay5qYXZhCkBAIC0yNiw3ICsyNiw5IEBACiAgKiBpbmRpY2F0ZSB0aGF0IGFuIGVycm9yIGhhcyBvY2N1cnJlZCwgYnV0IGlmIHRoZSBjYWxsIGlzIG1hZGUgYWZ0ZXIgYSBjYWxsCiAgKiB0byB7QGxpbmsgI2RvbmV9LCBpdCBtaWdodCBiZSBkaXNjYXJkZWQuCiAgKgotICogQWZ0ZXIge0BsaW5rICNzdGFydH0gYmVlbiBjYWxsZWQsIHtAbGluayAjZG9uZX0gbXVzdCBiZSBjYWxsZWQgcmVnYXJkbGVzcyBvZiBlcnJvcnMuCisgKiB7QGxpbmsgI2RvbmV9IG11c3QgYmUgY2FsbGVkIGF0IHRoZSBlbmQgb2Ygc3ludGhlc2lzLCByZWdhcmRsZXNzIG9mIGVycm9ycy4KKyAqCisgKiBBbGwgbWV0aG9kcyBjYW4gYmUgb25seSBjYWxsZWQgb24gdGhlIHN5bnRoZXNpcyB0aHJlYWQuCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgU3ludGhlc2lzQ2FsbGJhY2sgewogICAgIC8qKgpAQCAtNDEsMTMgKzQzLDE2IEBACiAgICAgICogcmVxdWVzdC4KICAgICAgKgogICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgc3ludGhlc2lzIHRocmVhZCwKLSAgICAgKiB3aGlsZSBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0fS4KKyAgICAgKiB3aGlsZSBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0fSBvcgorICAgICAqIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHRWMn0uCiAgICAgICoKICAgICAgKiBAcGFyYW0gc2FtcGxlUmF0ZUluSHogU2FtcGxlIHJhdGUgaW4gSFogb2YgdGhlIGdlbmVyYXRlZCBhdWRpby4KICAgICAgKiBAcGFyYW0gYXVkaW9Gb3JtYXQgQXVkaW8gZm9ybWF0IG9mIHRoZSBnZW5lcmF0ZWQgYXVkaW8uIE11c3QgYmUgb25lIG9mCiAgICAgICogICAgICAgICB0aGUgRU5DT0RJTkdfIGNvbnN0YW50cyBkZWZpbmVkIGluIHtAbGluayBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0fS4KICAgICAgKiBAcGFyYW0gY2hhbm5lbENvdW50IFRoZSBudW1iZXIgb2YgY2hhbm5lbHMuIE11c3QgYmUge0Bjb2RlIDF9IG9yIHtAY29kZSAyfS4KLSAgICAgKiBAcmV0dXJuIHtAbGluayBUZXh0VG9TcGVlY2gjU1VDQ0VTU30gb3Ige0BsaW5rIFRleHRUb1NwZWVjaCNFUlJPUn0uCisgICAgICogQHJldHVybiB7QGxpbmsgVGV4dFRvU3BlZWNoI1NVQ0NFU1N9LCB7QGxpbmsgVGV4dFRvU3BlZWNoI0VSUk9SfS4KKyAgICAgKiAgICAgICAgICB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cyNTVE9QUEVEfSBpcyBhbHNvIHBvc3NpYmxlIGlmIGNhbGxlZCBpbiBjb250ZXh0IG9mCisgICAgICogICAgICAgICAge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dFYyfS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IHN0YXJ0KGludCBzYW1wbGVSYXRlSW5IeiwgaW50IGF1ZGlvRm9ybWF0LCBpbnQgY2hhbm5lbENvdW50KTsKIApAQCAtNTUsNyArNjAsOCBAQAogICAgICAqIFRoZSBzZXJ2aWNlIHNob3VsZCBjYWxsIHRoaXMgbWV0aG9kIHdoZW4gc3ludGhlc2l6ZWQgYXVkaW8gaXMgcmVhZHkgZm9yIGNvbnN1bXB0aW9uLgogICAgICAqCiAgICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBzeW50aGVzaXMgdGhyZWFkLAotICAgICAqIHdoaWxlIGluIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHR9LgorICAgICAqIHdoaWxlIGluIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHR9IG9yCisgICAgICoge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dFYyfS4KICAgICAgKgogICAgICAqIEBwYXJhbSBidWZmZXIgVGhlIGdlbmVyYXRlZCBhdWRpbyBkYXRhLiBUaGlzIG1ldGhvZCB3aWxsIG5vdCBob2xkIG9uIHRvIHtAY29kZSBidWZmZXJ9LAogICAgICAqICAgICAgICAgc28gdGhlIGNhbGxlciBpcyBmcmVlIHRvIG1vZGlmeSBpdCBhZnRlciB0aGlzIG1ldGhvZCByZXR1cm5zLgpAQCAtNjMsNiArNjksOCBAQAogICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBieXRlcyBvZiBhdWRpbyBkYXRhIGluIHtAY29kZSBidWZmZXJ9LiBUaGlzIG11c3QgYmUKICAgICAgKiAgICAgICAgIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHtAbGluayAjZ2V0TWF4QnVmZmVyU2l6ZX0uCiAgICAgICogQHJldHVybiB7QGxpbmsgVGV4dFRvU3BlZWNoI1NVQ0NFU1N9IG9yIHtAbGluayBUZXh0VG9TcGVlY2gjRVJST1J9LgorICAgICAqICAgICAgICAgIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzI1NUT1BQRUR9IGlzIGFsc28gcG9zc2libGUgaWYgY2FsbGVkIGluIGNvbnRleHQgb2YKKyAgICAgKiAgICAgICAgICB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0VjJ9LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgYXVkaW9BdmFpbGFibGUoYnl0ZVtdIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGxlbmd0aCk7CiAKQEAgLTcxLDExICs3OSwxNCBAQAogICAgICAqIGJlZW4gcGFzc2VkIHRvIHtAbGluayAjYXVkaW9BdmFpbGFibGV9LgogICAgICAqCiAgICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBzeW50aGVzaXMgdGhyZWFkLAotICAgICAqIHdoaWxlIGluIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHR9LgorICAgICAqIHdoaWxlIGluIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHR9IG9yCisgICAgICoge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dFYyfS4KICAgICAgKgotICAgICAqIFRoaXMgbWV0aG9kIGhhcyB0byBiZSBjYWxsZWQgaWYge0BsaW5rICNzdGFydH0gd2FzIGNhbGxlZC4KKyAgICAgKiBUaGlzIG1ldGhvZCBoYXMgdG8gYmUgY2FsbGVkIGlmIHtAbGluayAjc3RhcnR9IGFuZC9vciB7QGxpbmsgI2Vycm9yfSB3YXMgY2FsbGVkLgogICAgICAqCiAgICAgICogQHJldHVybiB7QGxpbmsgVGV4dFRvU3BlZWNoI1NVQ0NFU1N9IG9yIHtAbGluayBUZXh0VG9TcGVlY2gjRVJST1J9LgorICAgICAqICAgICAgICAgIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzI1NUT1BQRUR9IGlzIGFsc28gcG9zc2libGUgaWYgY2FsbGVkIGluIGNvbnRleHQgb2YKKyAgICAgKiAgICAgICAgICB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0VjJ9LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZG9uZSgpOwogCkBAIC04Nyw0ICs5OCw1OCBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVycm9yKCk7CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKKyAgICAvKioKKyAgICAgKiBUaGUgc2VydmljZSBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUgc3BlZWNoIHN5bnRoZXNpcyBmYWlscy4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgc3ludGhlc2lzIHRocmVhZCwKKyAgICAgKiB3aGlsZSBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0fSBvcgorICAgICAqIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHRWMn0uCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIEVycm9yIGNvZGUgdG8gcGFzcyB0byB0aGUgY2xpZW50LiBPbmUgb2YgdGhlIEVSUk9SXyB2YWx1ZXMgZnJvbQorICAgICAqICAgICAge0BsaW5rIFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXN9CisgICAgICovCisgICAgcHVibGljIHZvaWQgZXJyb3IoaW50IGVycm9yQ29kZSk7CisKKyAgICAvKioKKyAgICAgKiBDb21tdW5pY2F0ZSB0byBjbGllbnQgdGhhdCB0aGUgb3JpZ2luYWwgcmVxdWVzdCBjYW4ndCBiZSBkb25lIGFuZCBjbGllbnQtcmVxdWVzdGVkCisgICAgICogZmFsbGJhY2sgaXMgaGFwcGVuaW5nLgorICAgICAqCisgICAgICogRmFsbGJhY2sgY2FuIGJlIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IGJ5IHNldHRpbmcKKyAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNGQUxMQkFDS19WT0lDRV9OQU1FfSB2b2ljZSBwYXJhbWV0ZXIgd2l0aCBhIGlkIG9mCisgICAgICogdGhlIHZvaWNlIHRoYXQgaXMgZXhwZWN0ZWQgdG8gYmUgdXNlZCBmb3IgdGhlIGZhbGxiYWNrLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2Qgd2lsbCBmYWlsIGlmIHVzZXIgY2FsbGVkIHtAbGluayAjc3RhcnQoaW50LCBpbnQsIGludCl9IGFuZC9vcgorICAgICAqIHtAbGluayAjZG9uZSgpfS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgc3ludGhlc2lzIHRocmVhZCwKKyAgICAgKiB3aGlsZSBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0VjJ9LgorICAgICAqCisgICAgICogQHJldHVybiB7QGxpbmsgVGV4dFRvU3BlZWNoI1NVQ0NFU1N9LCB7QGxpbmsgVGV4dFRvU3BlZWNoI0VSUk9SfSBpZiBjbGllbnQgYWxyZWFkeQorICAgICAqICAgICAgICAgIGNhbGxlZCB7QGxpbmsgI3N0YXJ0KGludCwgaW50LCBpbnQpfSwge0BsaW5rIFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMjU1RPUFBFRH0KKyAgICAgKiAgICAgICAgICBpZiBzdG9wIHdhcyByZXF1ZXN0ZWQuCisgICAgICovCisgICAgcHVibGljIGludCBmYWxsYmFjaygpOworCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYge0BsaW5rICNzdGFydH0gd2FzIGNhbGxlZCBvciBub3QuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIHN5bnRoZXNpcyB0aHJlYWQsCisgICAgICogd2hpbGUgaW4ge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dH0gb3IKKyAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0VjJ9LgorICAgICAqCisgICAgICogVXNlZnVsIGZvciBjaGVja2luZyBpZiBhIGZhbGxiYWNrIGZyb20gbmV0d29yayByZXF1ZXN0IGlzIHBvc3NpYmxlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGhhc1N0YXJ0ZWQoKTsKKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHtAbGluayAjZG9uZX0gd2FzIGNhbGxlZCBvciBub3QuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIHN5bnRoZXNpcyB0aHJlYWQsCisgICAgICogd2hpbGUgaW4ge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dH0gb3IKKyAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0VjJ9LgorICAgICAqCisgICAgICogVXNlZnVsIGZvciBjaGVja2luZyBpZiBhIGZhbGxiYWNrIGZyb20gbmV0d29yayByZXF1ZXN0IGlzIHBvc3NpYmxlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGhhc0ZpbmlzaGVkKCk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc1BsYXliYWNrUXVldWVJdGVtLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc1BsYXliYWNrUXVldWVJdGVtLmphdmEKaW5kZXggZTg1M2M5ZS4uYjQyNDM1NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9TeW50aGVzaXNQbGF5YmFja1F1ZXVlSXRlbS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzUGxheWJhY2tRdWV1ZUl0ZW0uamF2YQpAQCAtNTcsMjMgKzU3LDIyIEBACiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIG1TdG9wcGVkOwogICAgIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBtRG9uZTsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gbUlzRXJyb3I7CisgICAgcHJpdmF0ZSB2b2xhdGlsZSBpbnQgbVN0YXR1c0NvZGU7CiAKICAgICBwcml2YXRlIGZpbmFsIEJsb2NraW5nQXVkaW9UcmFjayBtQXVkaW9UcmFjazsKLSAgICBwcml2YXRlIGZpbmFsIEV2ZW50TG9nZ2VyIG1Mb2dnZXI7Ci0KKyAgICBwcml2YXRlIGZpbmFsIEFic3RyYWN0RXZlbnRMb2dnZXIgbUxvZ2dlcjsKIAogICAgIFN5bnRoZXNpc1BsYXliYWNrUXVldWVJdGVtKGludCBzdHJlYW1UeXBlLCBpbnQgc2FtcGxlUmF0ZSwKICAgICAgICAgICAgIGludCBhdWRpb0Zvcm1hdCwgaW50IGNoYW5uZWxDb3VudCwKICAgICAgICAgICAgIGZsb2F0IHZvbHVtZSwgZmxvYXQgcGFuLCBVdHRlcmFuY2VQcm9ncmVzc0Rpc3BhdGNoZXIgZGlzcGF0Y2hlciwKLSAgICAgICAgICAgIE9iamVjdCBjYWxsZXJJZGVudGl0eSwgRXZlbnRMb2dnZXIgbG9nZ2VyKSB7CisgICAgICAgICAgICBPYmplY3QgY2FsbGVySWRlbnRpdHksIEFic3RyYWN0RXZlbnRMb2dnZXIgbG9nZ2VyKSB7CiAgICAgICAgIHN1cGVyKGRpc3BhdGNoZXIsIGNhbGxlcklkZW50aXR5KTsKIAogICAgICAgICBtVW5jb25zdW1lZEJ5dGVzID0gMDsKIAogICAgICAgICBtU3RvcHBlZCA9IGZhbHNlOwogICAgICAgICBtRG9uZSA9IGZhbHNlOwotICAgICAgICBtSXNFcnJvciA9IGZhbHNlOworICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUzsKIAogICAgICAgICBtQXVkaW9UcmFjayA9IG5ldyBCbG9ja2luZ0F1ZGlvVHJhY2soc3RyZWFtVHlwZSwgc2FtcGxlUmF0ZSwgYXVkaW9Gb3JtYXQsCiAgICAgICAgICAgICAgICAgY2hhbm5lbENvdW50LCB2b2x1bWUsIHBhbik7CkBAIC04Niw5ICs4NSw4IEBACiAgICAgICAgIGZpbmFsIFV0dGVyYW5jZVByb2dyZXNzRGlzcGF0Y2hlciBkaXNwYXRjaGVyID0gZ2V0RGlzcGF0Y2hlcigpOwogICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25TdGFydCgpOwogCi0KICAgICAgICAgaWYgKCFtQXVkaW9UcmFjay5pbml0KCkpIHsKLSAgICAgICAgICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2hPbkVycm9yKCk7CisgICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25FcnJvcihUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLkVSUk9SX09VVFBVVCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTEyLDIzICsxMTAsMjUgQEAKIAogICAgICAgICBtQXVkaW9UcmFjay53YWl0QW5kUmVsZWFzZSgpOwogCi0gICAgICAgIGlmIChtSXNFcnJvcikgewotICAgICAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaE9uRXJyb3IoKTsKKyAgICAgICAgaWYgKG1TdGF0dXNDb2RlID09IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUykgeworICAgICAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaE9uU3VjY2VzcygpOworICAgICAgICB9IGVsc2UgaWYobVN0YXR1c0NvZGUgPT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CisgICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25TdG9wKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25Eb25lKCk7CisgICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25FcnJvcihtU3RhdHVzQ29kZSk7CiAgICAgICAgIH0KIAotICAgICAgICBtTG9nZ2VyLm9uV3JpdGVEYXRhKCk7CisgICAgICAgIG1Mb2dnZXIub25Db21wbGV0ZWQobVN0YXR1c0NvZGUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHZvaWQgc3RvcChib29sZWFuIGlzRXJyb3IpIHsKKyAgICB2b2lkIHN0b3AoaW50IHN0YXR1c0NvZGUpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1MaXN0TG9jay5sb2NrKCk7CiAKICAgICAgICAgICAgIC8vIFVwZGF0ZSBvdXIgaW50ZXJuYWwgc3RhdGUuCiAgICAgICAgICAgICBtU3RvcHBlZCA9IHRydWU7Ci0gICAgICAgICAgICBtSXNFcnJvciA9IGlzRXJyb3I7CisgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7CiAKICAgICAgICAgICAgIC8vIFdha2UgdXAgdGhlIGF1ZGlvIHBsYXliYWNrIHRocmVhZCBpZiBpdCB3YXMgd2FpdGluZyBvbiB0YWtlKCkuCiAgICAgICAgICAgICAvLyB0YWtlKCkgd2lsbCByZXR1cm4gbnVsbCBzaW5jZSBtU3RvcHBlZCB3YXMgdHJ1ZSwgYW5kIHdpbGwgdGhlbgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9TeW50aGVzaXNSZXF1ZXN0VjIuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzUmVxdWVzdFYyLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjN2RhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzUmVxdWVzdFYyLmFpZGwKQEAgLTAsMCArMSwyMCBAQAorLyoKKyoqCisqKiBDb3B5cmlnaHQgMjAxMywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBhbmRyb2lkLnNwZWVjaC50dHM7CisKK3BhcmNlbGFibGUgU3ludGhlc2lzUmVxdWVzdFYyOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzUmVxdWVzdFYyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc1JlcXVlc3RWMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMjY4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc1JlcXVlc3RWMi5qYXZhCkBAIC0wLDAgKzEsMTMyIEBACitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkOworCisvKioKKyAqIFNlcnZpY2Utc2lkZSByZXByZXNlbnRhdGlvbiBvZiBhIHN5bnRoZXNpcyByZXF1ZXN0IGZyb20gYSBWMiBBUEkgY2xpZW50LiBDb250YWluczoKKyAqIDx1bD4KKyAqICAgPGxpPlRoZSB1dHRlcmFuY2UgdG8gc3ludGhlc2l6ZTwvbGk+CisgKiAgIDxsaT5UaGUgaWQgb2YgdGhlIHV0dGVyYW5jZSAoU3RyaW5nLCByZXN1bHQgb2Yge0BsaW5rIFV0dGVyYW5jZUlkI3RvVW5pcXVlU3RyaW5nKCl9PC9saT4KKyAqICAgPGxpPlRoZSBzeW50aGVzaXMgdm9pY2UgbmFtZSAoU3RyaW5nLCByZXN1bHQgb2Yge0BsaW5rIFZvaWNlSW5mbyNnZXROYW1lKCl9KTwvbGk+CisgKiAgIDxsaT5Wb2ljZSBwYXJhbWV0ZXJzIChCdW5kbGUgb2YgcGFyYW1ldGVycyk8L2xpPgorICogICA8bGk+QXVkaW8gcGFyYW1ldGVycyAoQnVuZGxlIG9mIHBhcmFtZXRlcnMpPC9saT4KKyAqIDwvdWw+CisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTeW50aGVzaXNSZXF1ZXN0VjIgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKKyAgICAvKiogU3ludGhlc2lzIHV0dGVyYW5jZS4gKi8KKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtVGV4dDsKKworICAgIC8qKiBTeW50aGVzaXMgaWQuICovCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVV0dGVyYW5jZUlkOworCisgICAgLyoqIFZvaWNlIElELiAqLworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Wb2ljZU5hbWU7CisKKyAgICAvKiogVm9pY2UgUGFyYW1ldGVycy4gKi8KKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtVm9pY2VQYXJhbXM7CisKKyAgICAvKiogQXVkaW8gUGFyYW1ldGVycy4gKi8KKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQXVkaW9QYXJhbXM7CisKKyAgICAvKioKKyAgICAgKiBQYXJjZWwgYmFzZWQgY29uc3RydWN0b3IuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBTeW50aGVzaXNSZXF1ZXN0VjIoUGFyY2VsIGluKSB7CisgICAgICAgIHRoaXMubVRleHQgPSBpbi5yZWFkU3RyaW5nKCk7CisgICAgICAgIHRoaXMubVV0dGVyYW5jZUlkID0gaW4ucmVhZFN0cmluZygpOworICAgICAgICB0aGlzLm1Wb2ljZU5hbWUgPSBpbi5yZWFkU3RyaW5nKCk7CisgICAgICAgIHRoaXMubVZvaWNlUGFyYW1zID0gaW4ucmVhZEJ1bmRsZSgpOworICAgICAgICB0aGlzLm1BdWRpb1BhcmFtcyA9IGluLnJlYWRCdW5kbGUoKTsKKyAgICB9CisKKyAgICBTeW50aGVzaXNSZXF1ZXN0VjIoU3RyaW5nIHRleHQsIFN0cmluZyB1dHRlcmFuY2VJZCwgUmVxdWVzdENvbmZpZyByY29uZmlnKSB7CisgICAgICAgIHRoaXMubVRleHQgPSB0ZXh0OworICAgICAgICB0aGlzLm1VdHRlcmFuY2VJZCA9IHV0dGVyYW5jZUlkOworICAgICAgICB0aGlzLm1Wb2ljZU5hbWUgPSByY29uZmlnLmdldFZvaWNlKCkuZ2V0TmFtZSgpOworICAgICAgICB0aGlzLm1Wb2ljZVBhcmFtcyA9IHJjb25maWcuZ2V0Vm9pY2VQYXJhbXMoKTsKKyAgICAgICAgdGhpcy5tQXVkaW9QYXJhbXMgPSByY29uZmlnLmdldEF1ZGlvUGFyYW1zKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogV3JpdGUgdG8gcGFyY2VsLgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgZGVzdC53cml0ZVN0cmluZyhtVGV4dCk7CisgICAgICAgIGRlc3Qud3JpdGVTdHJpbmcobVV0dGVyYW5jZUlkKTsKKyAgICAgICAgZGVzdC53cml0ZVN0cmluZyhtVm9pY2VOYW1lKTsKKyAgICAgICAgZGVzdC53cml0ZUJ1bmRsZShtVm9pY2VQYXJhbXMpOworICAgICAgICBkZXN0LndyaXRlQnVuZGxlKG1BdWRpb1BhcmFtcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgdGV4dCB3aGljaCBzaG91bGQgYmUgc3ludGhlc2l6ZWQuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworICAgICAgICByZXR1cm4gbVRleHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgaWQgb2YgdGhlIHN5bnRoZXNpcyByZXF1ZXN0LiBJdCdzIGFuIG91dHB1dCBvZiBhIGNhbGwgdG8gdGhlCisgICAgICoge0BsaW5rIFV0dGVyYW5jZUlkI3RvVW5pcXVlU3RyaW5nKCl9IG1ldGhvZCBvZiB0aGUge0BsaW5rIFV0dGVyYW5jZUlkfSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiB0aGlzIHJlcXVlc3QuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRVdHRlcmFuY2VJZCgpIHsKKyAgICAgICAgcmV0dXJuIG1VdHRlcmFuY2VJZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB2b2ljZSB0byB1c2UgZm9yIHRoaXMgc3ludGhlc2lzIHJlcXVlc3QuIFJlc3VsdCBvZiBhIGNhbGwgdG8KKyAgICAgKiB0aGUge0BsaW5rIFZvaWNlSW5mbyNnZXROYW1lKCl9IG1ldGhvZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFZvaWNlTmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIG1Wb2ljZU5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBidW5kbGUgb2Ygdm9pY2UgcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgQnVuZGxlIGdldFZvaWNlUGFyYW1zKCkgeworICAgICAgICByZXR1cm4gbVZvaWNlUGFyYW1zOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gYnVuZGxlIG9mIGF1ZGlvIHBhcmFtZXRlcnMuCisgICAgICovCisgICAgcHVibGljIEJ1bmRsZSBnZXRBdWRpb1BhcmFtcygpIHsKKyAgICAgICAgcmV0dXJuIG1BdWRpb1BhcmFtczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYXJjZWwgY3JlYXRvcnMuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFN5bnRoZXNpc1JlcXVlc3RWMj4gQ1JFQVRPUiA9CisgICAgICAgICAgICBuZXcgUGFyY2VsYWJsZS5DcmVhdG9yPFN5bnRoZXNpc1JlcXVlc3RWMj4oKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3ludGhlc2lzUmVxdWVzdFYyIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHNvdXJjZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBTeW50aGVzaXNSZXF1ZXN0VjIoc291cmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3ludGhlc2lzUmVxdWVzdFYyW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgU3ludGhlc2lzUmVxdWVzdFYyW3NpemVdOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9UZXh0VG9TcGVlY2guamF2YQppbmRleCAyNzUyMDg1Li4wMjE1MmZiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoLmphdmEKQEAgLTU0LDcgKzU0LDkgQEAKICAqIFdoZW4geW91IGFyZSBkb25lIHVzaW5nIHRoZSBUZXh0VG9TcGVlY2ggaW5zdGFuY2UsIGNhbGwgdGhlIHtAbGluayAjc2h1dGRvd24oKX0gbWV0aG9kCiAgKiB0byByZWxlYXNlIHRoZSBuYXRpdmUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIFRleHRUb1NwZWVjaCBlbmdpbmUuCiAgKgorICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnR9IGluc3RlYWQKICAqLworQERlcHJlY2F0ZWQKIHB1YmxpYyBjbGFzcyBUZXh0VG9TcGVlY2ggewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJUZXh0VG9TcGVlY2giOwpAQCAtOTcwLDcgKzk3Miw3IEBACiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBJbnRlZ2VyIHJ1bihJVGV4dFRvU3BlZWNoU2VydmljZSBzZXJ2aWNlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5wbGF5U2lsZW5jZShnZXRDYWxsZXJJZGVudGl0eSgpLCBkdXJhdGlvbkluTXMsIHF1ZXVlTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFBhcmFtcyhwYXJhbXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9PSBudWxsID8gbnVsbCA6IHBhcmFtcy5nZXQoRW5naW5lLktFWV9QQVJBTV9VVFRFUkFOQ0VfSUQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwgRVJST1IsICJwbGF5U2lsZW5jZSIpOwogICAgIH0KQEAgLTE0NDMsOCArMTQ0NSwxNyBAQAogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUVzdGFibGlzaGVkOwogCiAgICAgICAgIHByaXZhdGUgZmluYWwgSVRleHRUb1NwZWVjaENhbGxiYWNrLlN0dWIgbUNhbGxiYWNrID0gbmV3IElUZXh0VG9TcGVlY2hDYWxsYmFjay5TdHViKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25TdG9wKFN0cmluZyB1dHRlcmFuY2VJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZworICAgICAgICAgICAgfTsKKwogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkRvbmUoU3RyaW5nIHV0dGVyYW5jZUlkKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkZhbGxiYWNrKFN0cmluZyB1dHRlcmFuY2VJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU3VjY2VzcyhTdHJpbmcgdXR0ZXJhbmNlSWQpIHsKICAgICAgICAgICAgICAgICBVdHRlcmFuY2VQcm9ncmVzc0xpc3RlbmVyIGxpc3RlbmVyID0gbVV0dGVyYW5jZVByb2dyZXNzTGlzdGVuZXI7CiAgICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIub25Eb25lKHV0dGVyYW5jZUlkKTsKQEAgLTE0NTIsNyArMTQ2Myw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25FcnJvcihTdHJpbmcgdXR0ZXJhbmNlSWQpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoU3RyaW5nIHV0dGVyYW5jZUlkLCBpbnQgZXJyb3JDb2RlKSB7CiAgICAgICAgICAgICAgICAgVXR0ZXJhbmNlUHJvZ3Jlc3NMaXN0ZW5lciBsaXN0ZW5lciA9IG1VdHRlcmFuY2VQcm9ncmVzc0xpc3RlbmVyOwogICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLm9uRXJyb3IodXR0ZXJhbmNlSWQpOwpAQCAtMTQ2Niw2ICsxNDc3LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLm9uU3RhcnQodXR0ZXJhbmNlSWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblZvaWNlc0luZm9DaGFuZ2UoTGlzdDxWb2ljZUluZm8+IHZvaWNlc0luZm8pIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgICAgIC8vIElnbm9yZSBpdAorICAgICAgICAgICAgfQogICAgICAgICB9OwogCiAgICAgICAgIHByaXZhdGUgY2xhc3MgU2V0dXBDb25uZWN0aW9uQXN5bmNUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFZvaWQsIFZvaWQsIEludGVnZXI+IHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoQ2xpZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaENsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOGQ0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaENsaWVudC5qYXZhCkBAIC0wLDAgKzEsMTA1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuYXBwLkFwcGxpY2F0aW9uOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnNwZWVjaC50dHMuSVRleHRUb1NwZWVjaENhbGxiYWNrOworaW1wb3J0IGFuZHJvaWQuc3BlZWNoLnR0cy5JVGV4dFRvU3BlZWNoU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudXRpbC5QYWlyOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIFN5bnRoZXNpemVzIHNwZWVjaCBmcm9tIHRleHQgZm9yIGltbWVkaWF0ZSBwbGF5YmFjayBvciB0byBjcmVhdGUgYSBzb3VuZAorICogZmlsZS4KKyAqIDxwPgorICogVGhpcyBpcyBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIHNwZWVjaCBzeW50aGVzaXMgY2xpZW50IHRoYXQgc3VwZXJzZWRlcworICoge0BsaW5rIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2h9LgorICogPHA+CisgKiBBIFRleHRUb1NwZWVjaENsaWVudCBpbnN0YW5jZSBjYW4gb25seSBiZSB1c2VkIHRvIHN5bnRoZXNpemUgdGV4dCBvbmNlIGl0IGhhcworICogY29ubmVjdGVkIHRvIHRoZSBzZXJ2aWNlLiBUaGUgVGV4dFRvU3BlZWNoQ2xpZW50IGluc3RhbmNlIHdpbGwgc3RhcnQgZXN0YWJsaXNoaW5nCisgKiB0aGUgY29ubmVjdGlvbiBhZnRlciBhIGNhbGwgdG8gdGhlIHtAbGluayAjY29ubmVjdCgpfSBtZXRob2QuIFRoaXMgaXMgdXN1YWxseSBkb25lIGluCisgKiB7QGxpbmsgQXBwbGljYXRpb24jb25DcmVhdGUoKX0gb3Ige0BsaW5rIEFjdGl2aXR5I29uQ3JlYXRlfS4gV2hlbiB0aGUgY29ubmVjdGlvbgorICogaXMgZXN0YWJsaXNoZWQsIHRoZSBpbnN0YW5jZSB3aWxsIGNhbGwgYmFjayB1c2luZyB0aGUKKyAqIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuQ29ubmVjdGlvbkNhbGxiYWNrc30gaW50ZXJmYWNlLiBPbmx5IGFmdGVyIGEKKyAqIHN1Y2Nlc3NmdWwgY2FsbGJhY2sgaXMgdGhlIGNsaWVudCB1c2FibGUuCisgKiA8cD4KKyAqIEFmdGVyIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbiwgdGhlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSB2b2ljZXMgY2FuIGJlIG9idGFpbmVkCisgKiBieSBjYWxsaW5nIHRoZSB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50I2dldEVuZ2luZVN0YXR1cygpIG1ldGhvZC4gVGhlIGNsaWVudCBjYW4KKyAqIGNob29zZSBhIHZvaWNlIHVzaW5nIHNvbWUgY3VzdG9tIGhldXJpc3RpYyBhbmQgYnVpbGQgYSB7QGxpbmsgUmVxdWVzdENvbmZpZ30gb2JqZWN0CisgKiB1c2luZyB7QGxpbmsgUmVxdWVzdENvbmZpZy5CdWlsZGVyfSwgb3IgY2FuIHVzZSBvbmUgb2YgdGhlIGNvbW1vbiBoZXVyaXN0aWNzIGZvdW5kCisgKiBpbiAoe0BsaW5rIFJlcXVlc3RDb25maWdIZWxwZXJ9LgorICogPHA+CisgKiBXaGVuIHlvdSBhcmUgZG9uZSB1c2luZyB0aGUgVGV4dFRvU3BlZWNoQ2xpZW50IGluc3RhbmNlLCBjYWxsIHRoZQorICoge0BsaW5rICNkaXNjb25uZWN0KCl9IG1ldGhvZCB0byByZWxlYXNlIHRoZSBjb25uZWN0aW9uLgorICogPHA+CisgKiBJbiB0aGUgcmFyZSBjYXNlIG9mIGEgY2hhbmdlIHRvIHRoZSBzZXQgb2YgYXZhaWxhYmxlIHZvaWNlcywgdGhlIHNlcnZpY2Ugd2lsbCBjYWxsIHRvIHRoZQorICoge0BsaW5rIENvbm5lY3Rpb25DYWxsYmFja3Mjb25FbmdpbmVTdGF0dXNDaGFuZ2V9IHdpdGggbmV3IHNldCBvZiBhdmFpbGFibGUgdm9pY2VzIGFzIGFyZ3VtZW50LgorICogSW4gcmVzcG9uc2UsIHRoZSBjbGllbnQgSEFWRSB0byByZWNyZWF0ZSBhbGwge0BsaW5rIFJlcXVlc3RDb25maWd9IGluc3RhbmNlcyBpbiB1c2UuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBUZXh0VG9TcGVlY2hDbGllbnQgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSBUZXh0VG9TcGVlY2hDbGllbnQuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpOworCisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUxvY2sgPSBuZXcgT2JqZWN0KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBUdHNFbmdpbmVzIG1FbmdpbmVzSGVscGVyOworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKKworICAgIC8vIEd1YXJkZWQgYnkgbUxvY2sKKyAgICBwcml2YXRlIENvbm5lY3Rpb24gbVNlcnZpY2VDb25uZWN0aW9uOworICAgIHByaXZhdGUgZmluYWwgUmVxdWVzdENhbGxiYWNrcyBtRGVmYXVsdFJlcXVlc3RDYWxsYmFja3M7CisgICAgcHJpdmF0ZSBmaW5hbCBDb25uZWN0aW9uQ2FsbGJhY2tzIG1Db25uZWN0aW9uQ2FsbGJhY2tzOworICAgIHByaXZhdGUgRW5naW5lU3RhdHVzIG1FbmdpbmVTdGF0dXM7CisgICAgcHJpdmF0ZSBTdHJpbmcgbVJlcXVlc3RlZEVuZ2luZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUZhbGxiYWNrVG9EZWZhdWx0OworICAgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsIFBhaXI8VXR0ZXJhbmNlSWQsIFJlcXVlc3RDYWxsYmFja3M+PiBtQ2FsbGJhY2tzOworICAgIC8vIEd1YXJkZWQgYnkgbUxvY2sKKworICAgIC8qKiBDb21tb24gdm9pY2VzIHBhcmFtZXRlcnMgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFBhcmFtcyB7CisgICAgICAgIHByaXZhdGUgUGFyYW1zKCkge30KKworICAgICAgICAvKioKKyAgICAgICAgICogTWF4aW11bSBhbGxvd2VkIHRpbWUgZm9yIGEgc2luZ2xlIHJlcXVlc3QgYXR0ZW1wdCwgaW4gbWlsbGlzZWNvbmRzLCBiZWZvcmUgc3ludGhlc2lzCisgICAgICAgICAqIGZhaWxzIChvciBmYWxsYmFjayByZXF1ZXN0IHN0YXJ0cywgaWYgcmVxdWVzdGVkIHVzaW5nCisgICAgICAgICAqIHtAbGluayAjRkFMTEJBQ0tfVk9JQ0VfTkFNRX0pLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVUV09SS19USU1FT1VUX01TID0gIm5ldHdvcmtUaW1lb3V0TXMiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBOdW1iZXIgb2YgbmV0d29yayByZXF1ZXN0IHJldHJpZXMgdGhhdCBhcmUgYXR0ZW1wdGVkIGluIGNhc2Ugb2YgZmFpbHVyZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVUV09SS19SRVRSSUVTX0NPVU5UID0gIm5ldHdvcmtSZXRyaWVzQ291bnQiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTaG91bGQgc3ludGhlc2l6ZXIgcmVwb3J0IHN1Yi11dHRlcmFuY2UgcHJvZ3Jlc3Mgb24gc3ludGhlc2lzLiBPbmx5IGFwcGxpY2FibGUKKyAgICAgICAgICogZm9yIHRoZSB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50I3F1ZXVlU3BlYWt9IG1ldGhvZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNLX1NVQlVUVEVSQU5DRV9QUk9HUkVTUyA9ICJ0cmFja1N1YnV0dGVyYW5jZVByb2dyZXNzIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogSWYgYSB2b2ljZSBleHBvc2VzIHRoaXMgcGFyYW1ldGVyIHRoZW4gaXQgc3VwcG9ydHMgdGhlIGZhbGxiYWNrIHJlcXVlc3QgZmVhdHVyZS4KKyAgICAgICAgICoKKyAgICAgICAgICogSWYgaXQgaXMgc2V0IHRvIGEgdmFsaWQgbmFtZSBvZiBzb21lIG90aGVyIHZvaWNlICh7QGxpbmsgVm9pY2VJbmZvI2dldE5hbWUoKX0pIHRoZW4KKyAgICAgICAgICogaW4gY2FzZSBvZiByZXF1ZXN0IGZhaWx1cmUgKGR1ZSB0byBuZXR3b3JrIHByb2JsZW1zIG9yIG1pc3NpbmcgZGF0YSksIGZhbGxiYWNrIHJlcXVlc3QKKyAgICAgICAgICogd2lsbCBiZSBhdHRlbXB0ZWQuIFJlcXVlc3Qgd2lsbCBiZSBkb25lIHVzaW5nIHRoZSB2b2ljZSByZWZlcmVuY2VkIGJ5IHRoaXMgcGFyYW1ldGVyLgorICAgICAgICAgKiBJZiBpdCBpcyB0aGUgY2FzZSwgdGhlIGNsaWVudCB3aWxsIGJlIGluZm9ybWVkIGJ5IGEgY2FsbGJhY2sgdG8gdGhlIHtAbGluaworICAgICAgICAgKiBSZXF1ZXN0Q2FsbGJhY2tzI29uU3ludGhlc2lzRmFsbGJhY2soVXR0ZXJhbmNlSWQpfS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBTExCQUNLX1ZPSUNFX05BTUUgPSAiZmFsbGJhY2tWb2ljZU5hbWUiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBBdWRpbyBwYXJhbWV0ZXIgZm9yIHNwZWNpZnlpbmcgYSBsaW5lYXIgbXVsdGlwbGllciB0byB0aGUgc3BlYWtpbmcgc3BlZWQgb2YgdGhlIHZvaWNlLgorICAgICAgICAgKiBUaGUgdmFsdWUgaXMgYSBmbG9hdC4gVmFsdWVzIGJlbG93IHplcm8gZGVjcmVhc2Ugc3BlZWQgb2YgdGhlIHN5bnRoZXNpemVkIHNwZWVjaAorICAgICAgICAgKiB2YWx1ZXMgYWJvdmUgb25lIGluY3JlYXNlIGl0LiBJZiB0aGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgZXF1YWwgdG8gemVybywKKyAgICAgICAgICogdGhlbiBpdCB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgc2V0dGluZ3MtY29uZmlndXJhYmxlIGRlZmF1bHQgYmVmb3JlIGl0IHJlYWNoZXMKKyAgICAgICAgICogVFRTIHNlcnZpY2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTUEVFQ0hfU1BFRUQgPSAic3BlZWNoU3BlZWQiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBBdWRpbyBwYXJhbWV0ZXIgZm9yIGNvbnRyb2xsaW5nIHRoZSBwaXRjaCBvZiB0aGUgb3V0cHV0LiBUaGUgVmFsdWUgaXMgYSBwb3NpdGl2ZSBmbG9hdCwKKyAgICAgICAgICogd2l0aCBkZWZhdWx0IG9mIHtAY29kZSAxLjB9LiBUaGUgdmFsdWUgaXMgdXNlZCB0byBzY2FsZSB0aGUgcHJpbWFyeSBmcmVxdWVuY3kgbGluZWFybHkuCisgICAgICAgICAqIExvd2VyIHZhbHVlcyBsb3dlciB0aGUgdG9uZSBvZiB0aGUgc3ludGhlc2l6ZWQgdm9pY2UsIGdyZWF0ZXIgdmFsdWVzIGluY3JlYXNlIGl0LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFRUNIX1BJVENIID0gInNwZWVjaFBpdGNoIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogQXVkaW8gcGFyYW1ldGVyIGZvciBjb250cm9sbGluZyBvdXRwdXQgdm9sdW1lLiBWYWx1ZSBpcyBhIGZsb2F0IHdpdGggc2NhbGUgb2YgMCB0byAxCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJT19QQVJBTV9WT0xVTUUgPSBUZXh0VG9TcGVlY2guRW5naW5lLktFWV9QQVJBTV9WT0xVTUU7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEF1ZGlvIHBhcmFtZXRlciBmb3IgY29udHJvbGxpbmcgb3V0cHV0IHBhbi4KKyAgICAgICAgICogVmFsdWUgaXMgYSBmbG9hdCByYW5naW5nIGZyb20gLTEgdG8gKzEgd2hlcmUgLTEgbWFwcyB0byBhIGhhcmQtbGVmdCBwYW4sCisgICAgICAgICAqIDAgdG8gY2VudGVyICh0aGUgZGVmYXVsdCBiZWhhdmlvciksIGFuZCArMSB0byBoYXJkLXJpZ2h0LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fUEFSQU1fUEFOID0gVGV4dFRvU3BlZWNoLkVuZ2luZS5LRVlfUEFSQU1fUEFOOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBBdWRpbyBwYXJhbWV0ZXIgZm9yIHNwZWNpZnlpbmcgdGhlIGF1ZGlvIHN0cmVhbSB0eXBlIHRvIGJlIHVzZWQgd2hlbiBzcGVha2luZyB0ZXh0CisgICAgICAgICAqIG9yIHBsYXlpbmcgYmFjayBhIGZpbGUuIFRoZSB2YWx1ZSBzaG91bGQgYmUgb25lIG9mIHRoZSBTVFJFQU1fIGNvbnN0YW50cworICAgICAgICAgKiBkZWZpbmVkIGluIHtAbGluayBBdWRpb01hbmFnZXJ9LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fUEFSQU1fU1RSRUFNID0gVGV4dFRvU3BlZWNoLkVuZ2luZS5LRVlfUEFSQU1fU1RSRUFNOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc3VsdCBjb2RlcyBmb3IgVFRTIG9wZXJhdGlvbnMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBTdGF0dXMgeworICAgICAgICBwcml2YXRlIFN0YXR1cygpIHt9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlbm90ZXMgYSBzdWNjZXNzZnVsIG9wZXJhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVQ0NFU1MgPSAwOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZW5vdGVzIGEgc3RvcCByZXF1ZXN0ZWQgYnkgYSBjbGllbnQuIEl0J3MgdXNlZCBvbmx5IG9uIHRoZSBzZXJ2aWNlIHNpZGUgb2YgdGhlIEFQSSwKKyAgICAgICAgICogY2xpZW50IHNob3VsZCBuZXZlciBleHBlY3QgdG8gc2VlIHRoaXMgcmVzdWx0IGNvZGUuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVE9QUEVEID0gMTAwOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZW5vdGVzIGEgZ2VuZXJpYyBmYWlsdXJlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfVU5LTk9XTiA9IC0xOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZW5vdGVzIGEgZmFpbHVyZSBvZiBhIFRUUyBlbmdpbmUgdG8gc3ludGhlc2l6ZSB0aGUgZ2l2ZW4gaW5wdXQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9TWU5USEVTSVMgPSAxMDsKKworICAgICAgICAvKioKKyAgICAgICAgICogRGVub3RlcyBhIGZhaWx1cmUgb2YgYSBUVFMgc2VydmljZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX1NFUlZJQ0UgPSAxMTsKKworICAgICAgICAvKioKKyAgICAgICAgICogRGVub3RlcyBhIGZhaWx1cmUgcmVsYXRlZCB0byB0aGUgb3V0cHV0IChhdWRpbyBkZXZpY2Ugb3IgYSBmaWxlKS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX09VVFBVVCA9IDEyOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZW5vdGVzIGEgZmFpbHVyZSBjYXVzZWQgYnkgYSBuZXR3b3JrIGNvbm5lY3Rpdml0eSBwcm9ibGVtcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX05FVFdPUksgPSAxMzsKKworICAgICAgICAvKioKKyAgICAgICAgICogRGVub3RlcyBhIGZhaWx1cmUgY2F1c2VkIGJ5IG5ldHdvcmsgdGltZW91dC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX05FVFdPUktfVElNRU9VVCA9IDE0OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZW5vdGVzIGEgZmFpbHVyZSBjYXVzZWQgYnkgYW4gaW52YWxpZCByZXF1ZXN0LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfSU5WQUxJRF9SRVFVRVNUID0gMTU7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlbm90ZXMgYSBmYWlsdXJlIHJlbGF0ZWQgdG8gcGFzc2luZyBhIG5vbi11bmlxdWUgdXR0ZXJhbmNlIGlkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfTk9OX1VOSVFVRV9VVFRFUkFOQ0VfSUQgPSAxNjsKKworICAgICAgICAvKioKKyAgICAgICAgICogRGVub3RlcyBhIGZhaWx1cmUgcmVsYXRlZCB0byBtaXNzaW5nIGRhdGEuIFRoZSBUVFMgaW1wbGVtZW50YXRpb24gbWF5IGRvd25sb2FkCisgICAgICAgICAqIHRoZSBtaXNzaW5nIGRhdGEsIGFuZCBpZiBzbywgcmVxdWVzdCB3aWxsIHN1Y2NlZWQgaW4gZnV0dXJlLiBUaGlzIGVycm9yIGNhbiBvbmx5IGhhcHBlbgorICAgICAgICAgKiBmb3Igdm9pY2VzIHdpdGgge0BsaW5rIFZvaWNlSW5mbyNGRUFUVVJFX01BWV9BVVRPSU5TVEFMTH0gZmVhdHVyZS4KKyAgICAgICAgICogTm90ZTogdGhlIHJlY29tbWVuZGVkIHdheSB0byBhdm9pZCB0aGlzIGVycm9yIGlzIHRvIGNyZWF0ZSBhIHJlcXVlc3Qgd2l0aCB0aGUgZmFsbGJhY2sKKyAgICAgICAgICogdm9pY2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ET1dOTE9BRElOR19BRERJVElPTkFMX0RBVEEgPSAxNzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgb2YgY2FsbGJhY2tzIGZvciB0aGUgZXZlbnRzIHJlbGF0ZWQgdG8gdGhlIHByb2dyZXNzIG9mIGEgc3ludGhlc2lzIHJlcXVlc3QKKyAgICAgKiB0aHJvdWdoIHRoZSBzeW50aGVzaXMgcXVldWUuIEVhY2ggc3ludGhlc2lzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoIGEgY2FsbCB0bworICAgICAqIHtAbGluayAjcXVldWVTcGVha30gb3Ige0BsaW5rICNxdWV1ZVN5bnRoZXNpemVUb0ZpbGV9LgorICAgICAqCisgICAgICogVGhlIGNhbGxiYWNrcyBzcGVjaWZpZWQgaW4gdGhpcyBtZXRob2Qgd2lsbCBOT1QgYmUgY2FsbGVkIG9uIFVJIHRocmVhZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIFJlcXVlc3RDYWxsYmFja3MgIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxlZCBhZnRlciBzeW50aGVzaXMgb2YgdXR0ZXJhbmNlIHN1Y2Nlc3NmdWxseSBzdGFydHMuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvblN5bnRoZXNpc1N0YXJ0KFV0dGVyYW5jZUlkIHV0dGVyYW5jZUlkKSB7fQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgYWZ0ZXIgc3ludGhlc2lzIHN1Y2Nlc3NmdWxseSBmaW5pc2hlcy4KKyAgICAgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkCisgICAgICAgICAqICAgICAgICAgICAgVW5pcXVlIGlkZW50aWZpZXIgb2Ygc3ludGhlc2l6ZWQgdXR0ZXJhbmNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25TeW50aGVzaXNTdWNjZXNzKFV0dGVyYW5jZUlkIHV0dGVyYW5jZUlkKSB7fQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgYWZ0ZXIgc3ludGhlc2lzIHdhcyBzdG9wcGVkIGluIG1pZGRsZSBvZiBzeW50aGVzaXMgcHJvY2Vzcy4KKyAgICAgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkCisgICAgICAgICAqICAgICAgICAgICAgVW5pcXVlIGlkZW50aWZpZXIgb2Ygc3ludGhlc2l6ZWQgdXR0ZXJhbmNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25TeW50aGVzaXNTdG9wKFV0dGVyYW5jZUlkIHV0dGVyYW5jZUlkKSB7fQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgd2hlbiByZXF1ZXN0ZWQgc3ludGhlc2lzIGZhaWxlZCBhbmQgZmFsbGJhY2sgc3ludGhlc2lzIGlzIGFib3V0IHRvIGJlIGF0dGVtcHRlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogUmVxdWlyZXMgdm9pY2Ugd2l0aCBhdmFpbGFibGUge0BsaW5rIFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMjRkFMTEJBQ0tfVk9JQ0VfTkFNRX0KKyAgICAgICAgICogcGFyYW1ldGVyLCBhbmQgcmVxdWVzdCB3aXRoIHRoaXMgcGFyYW1ldGVyIGVuYWJsZWQuCisgICAgICAgICAqCisgICAgICAgICAqIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBmb2xsb3dlZCBieSBjYWxsYmFjayB0byB0aGUge0BsaW5rICNvblN5bnRoZXNpc1N0YXJ0fSwKKyAgICAgICAgICoge0BsaW5rICNvblN5bnRoZXNpc0ZhaWx1cmV9IG9yIHtAbGluayAjb25TeW50aGVzaXNTdWNjZXNzfSB0aGF0IGRlcGVuZHMgb24gdGhlCisgICAgICAgICAqIGZhbGxiYWNrIG91dGNvbWUuCisgICAgICAgICAqCisgICAgICAgICAqIEZvciBtb3JlIGZhbGxiYWNrIGZlYXR1cmUgcmVmZXJlbmNlLCBsb29rIGF0IHRoZQorICAgICAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNGQUxMQkFDS19WT0lDRV9OQU1FfS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkCisgICAgICAgICAqICAgICAgICAgICAgVW5pcXVlIGlkZW50aWZpZXIgb2Ygc3ludGhlc2l6ZWQgdXR0ZXJhbmNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25TeW50aGVzaXNGYWxsYmFjayhVdHRlcmFuY2VJZCB1dHRlcmFuY2VJZCkge30KKworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGVkIGFmdGVyIHN5bnRoZXNpcyBvZiB1dHRlcmFuY2UgZmFpbHMuCisgICAgICAgICAqCisgICAgICAgICAqIEl0IG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvciBhZnRlciBhIHtAbGluayAjb25TeW50aGVzaXNTdGFydH0gY2FsbGJhY2suCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB1dHRlcmFuY2VJZAorICAgICAgICAgKiAgICAgICAgICAgIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHN5bnRoZXNpemVkIHV0dGVyYW5jZS4KKyAgICAgICAgICogQHBhcmFtIGVycm9yQ29kZQorICAgICAgICAgKiAgICAgICAgICAgIE9uZSBvZiB0aGUgdmFsdWVzIGZyb20ge0BsaW5rIFN0YXR1c30uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvblN5bnRoZXNpc0ZhaWx1cmUoVXR0ZXJhbmNlSWQgdXR0ZXJhbmNlSWQsIGludCBlcnJvckNvZGUpIHt9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxlZCBkdXJpbmcgc3ludGhlc2lzIHRvIG1hcmsgc3ludGhlc2lzIHByb2dyZXNzLgorICAgICAgICAgKgorICAgICAgICAgKiBSZXF1aXJlcyB2b2ljZSB3aXRoIGF2YWlsYWJsZQorICAgICAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNUUkFDS19TVUJVVFRFUkFOQ0VfUFJPR1JFU1N9IHBhcmFtZXRlciwgYW5kCisgICAgICAgICAqIHJlcXVlc3Qgd2l0aCB0aGlzIHBhcmFtZXRlciBlbmFibGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQKKyAgICAgICAgICogICAgICAgICAgICBVbmlxdWUgaWRlbnRpZmllciBvZiBzeW50aGVzaXplZCB1dHRlcmFuY2UuCisgICAgICAgICAqIEBwYXJhbSBjaGFySW5kZXgKKyAgICAgICAgICogICAgICAgICAgICBTdHJpbmcgaW5kZXggKGphdmEgY2hhciBvZmZzZXQpIG9mIHJlY2VudGx5IHN5bnRoZXNpemVkIGNoYXJhY3Rlci4KKyAgICAgICAgICogQHBhcmFtIG1zRnJvbVN0YXJ0CisgICAgICAgICAqICAgICAgICAgICAgTWlsaXNlY29uZHMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN5bnRoZXNpcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU3ludGhlc2lzUHJvZ3Jlc3MoVXR0ZXJhbmNlSWQgdXR0ZXJhbmNlSWQsIGludCBjaGFySW5kZXgsIGludCBtc0Zyb21TdGFydCkge30KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbnRlcmZhY2UgZGVmaW5pdGlvbiBvZiBjYWxsYmFja3MgdGhhdCBhcmUgY2FsbGVkIHdoZW4gdGhlIGNsaWVudCBpcworICAgICAqIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgVFRTIHNlcnZpY2UuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgQ29ubmVjdGlvbkNhbGxiYWNrcyB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBZnRlciBjYWxsaW5nIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjY29ubmVjdCgpfSwgdGhpcyBtZXRob2Qgd2lsbCBiZSBpbnZva2VkCisgICAgICAgICAqIGFzeW5jaHJvbm91c2x5IHdoZW4gdGhlIGNvbm5lY3QgcmVxdWVzdCBoYXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQ2xpZW50cyBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byBjYWxsIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjZ2V0RW5naW5lU3RhdHVzKCl9CisgICAgICAgICAqIGFuZCBjcmVhdGUge0BsaW5rIFJlcXVlc3RDb25maWd9IG9iamVjdHMgdXNlZCBpbiBzdWJzZXF1ZW50IHN5bnRoZXNpcyByZXF1ZXN0cy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ29ubmVjdGlvblN1Y2Nlc3MoKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQWZ0ZXIgY2FsbGluZyB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50I2Nvbm5lY3QoKX0sIHRoaXMgbWV0aG9kIG1heSBiZSBpbnZva2VkCisgICAgICAgICAqIGFzeW5jaHJvbm91c2x5IHdoZW4gdGhlIGNvbm5lY3QgcmVxdWVzdCBoYXMgZmFpbGVkIHRvIGNvbXBsZXRlLgorICAgICAgICAgKgorICAgICAgICAgKiBJdCBtYXkgYmUgYWxzbyBpbnZva2VkIHN5bmNocm9ub3VzbHksIGZyb20gdGhlIGJvZHkgb2YKKyAgICAgICAgICoge0BsaW5rIFRleHRUb1NwZWVjaENsaWVudCNjb25uZWN0KCl9IG1ldGhvZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ29ubmVjdGlvbkZhaWx1cmUoKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZpY2UgaXMgbG9zdC4gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZXJlIGlzIGEgcHJvYmxlbQorICAgICAgICAgKiB3aXRoIHRoZSBzcGVlY2ggc2VydmljZSAoZS5nLiBhIGNyYXNoIG9yIHJlc291cmNlIHByb2JsZW0gY2F1c2VzIGl0IHRvIGJlIGtpbGxlZCBieSB0aGUKKyAgICAgICAgICogc3lzdGVtKS4gV2hlbiBjYWxsZWQsIGFsbCByZXF1ZXN0cyBoYXZlIGJlZW4gY2FuY2VsZWQgYW5kIG5vIG91dHN0YW5kaW5nIGxpc3RlbmVycyB3aWxsCisgICAgICAgICAqIGJlIGV4ZWN1dGVkLiBBcHBsaWNhdGlvbnMgc2hvdWxkIGRpc2FibGUgVUkgY29tcG9uZW50cyB0aGF0IHJlcXVpcmUgdGhlIHNlcnZpY2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VEaXNjb25uZWN0ZWQoKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQWZ0ZXIgcmVjZWl2aW5nIHtAbGluayAjb25Db25uZWN0aW9uU3VjY2VzcygpfSBjYWxsYmFjaywgdGhpcyBtZXRob2QgbWF5IGJlIGludm9rZWQKKyAgICAgICAgICogaWYgZW5naW5lIHN0YXR1cyBvYnRhaW5lZCBmcm9tIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjZ2V0RW5naW5lU3RhdHVzKCl9KSBjaGFuZ2VzLgorICAgICAgICAgKiBJdCB1c3VhbGx5IG1lYW5zIHRoYXQgc29tZSB2b2ljZXMgd2VyZSByZW1vdmVkLCBjaGFuZ2VkIG9yIGFkZGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBDbGllbnRzIGFyZSByZXF1aXJlZCB0byByZWNyZWF0ZSB7QGxpbmsgUmVxdWVzdENvbmZpZ30gb2JqZWN0cyB1c2VkIGluIHN1YnNlcXVlbnQKKyAgICAgICAgICogc3ludGhlc2lzIHJlcXVlc3RzLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25FbmdpbmVTdGF0dXNDaGFuZ2UoRW5naW5lU3RhdHVzIG5ld0VuZ2luZVN0YXR1cyk7CisgICAgfQorCisgICAgLyoqIFN0YXRlIG9mIHZvaWNlcyBhcyBwcm92aWRlZCBieSBlbmdpbmUgYW5kIHVzZXIuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBFbmdpbmVTdGF0dXMgeworICAgICAgICAvKiogQWxsIGF2YWlsYWJsZSB2b2ljZXMuICovCisgICAgICAgIHByaXZhdGUgZmluYWwgTGlzdDxWb2ljZUluZm8+IG1Wb2ljZXM7CisKKyAgICAgICAgLyoqIE5hbWUgb2YgdGhlIFRUUyBlbmdpbmUgcGFja2FnZSAqLworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtUGFja2FnZU5hbWU7CisKKyAgICAgICAgcHJpdmF0ZSBFbmdpbmVTdGF0dXMoU3RyaW5nIHBhY2thZ2VOYW1lLCBMaXN0PFZvaWNlSW5mbz4gdm9pY2VzKSB7CisgICAgICAgICAgICB0aGlzLm1Wb2ljZXMgPSAgQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdCh2b2ljZXMpOworICAgICAgICAgICAgdGhpcy5tUGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgYW4gaW1tdXRhYmxlIGxpc3Qgb2YgYWxsIFZvaWNlcyBleHBvc2VkIGJ5IHRoZSBUVFMgZW5naW5lLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIExpc3Q8Vm9pY2VJbmZvPiBnZXRWb2ljZXMoKSB7CisgICAgICAgICAgICByZXR1cm4gbVZvaWNlczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgbmFtZSBvZiB0aGUgVFRTIGVuZ2luZSBwYWNrYWdlIGN1cnJlbnRseSBpbiB1c2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEVuZ2luZVBhY2thZ2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbVBhY2thZ2VOYW1lOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIFVuaXF1ZSBzeW50aGVzaXMgcmVxdWVzdCBpZGVudGlmaWVyLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgVXR0ZXJhbmNlSWQgeworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtRGVzY3JpcHRpb247CisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGUgbmV3LCB1bmlxdWUgVXR0ZXJhbmNlSWQgaW5zdGFuY2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgVXR0ZXJhbmNlSWQoKSB7CisgICAgICAgICAgICBtRGVzY3JpcHRpb24gPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZSBuZXcsIHVuaXF1ZSBVdHRlcmFuY2VJZCBpbnN0YW5jZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIEFkZGl0aW9uYWwgc3RyaW5nLCB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8KKyAgICAgICAgICoge0BsaW5rICN0b1VuaXF1ZVN0cmluZygpfSBvdXRwdXQsIGFsbG93aW5nIGVhc2llciBpZGVudGlmaWNhdGlvbiBvZiB0aGUgdXR0ZXJhbmNlIGluCisgICAgICAgICAqIGNhbGxiYWNrcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBVdHRlcmFuY2VJZChTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIG1EZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgYSB1bmlxdWUgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgICAgICoKKyAgICAgICAgICogSWYgeW91IHN1YmNsYXNzIHtAbGluayBVdHRlcmFuY2VJZH0gbWFrZSBzdXJlIHRoYXQgb3V0cHV0IG9mIHRoaXMgbWV0aG9kIGlzCisgICAgICAgICAqIGNvbnNpc3RlbnQgYWNyb3NzIG11bHRpcGxlIGNhbGxzIGFuZCB1bmlxdWUgZm9yIHRoZSBpbnN0YW5jZS4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhpcyBzdHJpbmcgd2lsbCBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzeW50aGVzaXMgcmVxdWVzdC91dHRlcmFuY2UgaW5zaWRlIHRoZQorICAgICAgICAgKiBUVFMgc2VydmljZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9VbmlxdWVTdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gbURlc2NyaXB0aW9uID09IG51bGwgPyAiVXR0ZXJhbmNlSWQiICsgU3lzdGVtLmlkZW50aXR5SGFzaENvZGUodGhpcykgOgorICAgICAgICAgICAgICAgICAgICAiVXR0ZXJhbmNlSWQiICsgU3lzdGVtLmlkZW50aXR5SGFzaENvZGUodGhpcykgKyAiOiAiICsgbURlc2NyaXB0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIFRleHRUb1NwZWVjaCBzZXJ2aWNlIGNsaWVudC4KKyAgICAgKgorICAgICAqIFdpbGwgY29ubmVjdCB0byB0aGUgZGVmYXVsdCBUVFMgc2VydmljZS4gSW4gb3JkZXIgdG8gYmUgdXNhYmxlLCB7QGxpbmsgI2Nvbm5lY3QoKX0gbmVlZAorICAgICAqIHRvIGJlIGNhbGxlZCBmaXJzdCBhbmQgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uIGNhbGxiYWNrIG5lZWQgdG8gYmUgcmVjZWl2ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dAorICAgICAqICAgICAgICAgICAgVGhlIGNvbnRleHQgdGhpcyBpbnN0YW5jZSBpcyBydW5uaW5nIGluLgorICAgICAqIEBwYXJhbSBlbmdpbmUKKyAgICAgKiAgICAgICAgICAgIFBhY2thZ2UgbmFtZSBvZiByZXF1ZXN0ZWQgVFRTIGVuZ2luZS4gSWYgaXQncyBudWxsLCB0aGVuIGRlZmF1bHQgZW5naW5lIHdpbGwKKyAgICAgKiAgICAgICAgICAgIGJlIHNlbGVjdGVkIHJlZ2FyZGxlc3Mgb2Yge0Bjb2RlIGZhbGxiYWNrVG9EZWZhdWx0RW5naW5lfSBwYXJhbWV0ZXIgdmFsdWUuCisgICAgICogQHBhcmFtIGZhbGxiYWNrVG9EZWZhdWx0RW5naW5lCisgICAgICogICAgICAgICAgICBJZiByZXF1ZXN0ZWQgZW5naW5lIGlzIG5vdCBhdmFpbGFibGUsIHNob3VsZCB3ZSBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBlbmdpbmU/CisgICAgICogQHBhcmFtIGRlZmF1bHRSZXF1ZXN0Q2FsbGJhY2tzCisgICAgICogICAgICAgICAgICBEZWZhdWx0IHJlcXVlc3QgY2FsbGJhY2tzLCBpdCB3aWxsIGJlIHVzZWQgZm9yIGFsbCBzeW50aGVzaXMgcmVxdWVzdHMgd2l0aG91dAorICAgICAqICAgICAgICAgICAgc3VwcGxpZWQgUmVxdWVzdENhbGxiYWNrcyBpbnN0YW5jZS4gQ2FuJ3QgYmUgbnVsbC4KKyAgICAgKiBAcGFyYW0gY29ubmVjdGlvbkNhbGxiYWNrcworICAgICAqICAgICAgICAgICAgQ2FsbGJhY2tzIGZvciBjb25uZWN0aW5nIGFuZCBkaXNjb25uZWN0aW5nIGZyb20gdGhlIHNlcnZpY2UuIENhbid0IGJlIG51bGwuCisgICAgICovCisgICAgcHVibGljIFRleHRUb1NwZWVjaENsaWVudChDb250ZXh0IGNvbnRleHQsCisgICAgICAgICAgICBTdHJpbmcgZW5naW5lLCBib29sZWFuIGZhbGxiYWNrVG9EZWZhdWx0RW5naW5lLAorICAgICAgICAgICAgUmVxdWVzdENhbGxiYWNrcyBkZWZhdWx0UmVxdWVzdENhbGxiYWNrcywKKyAgICAgICAgICAgIENvbm5lY3Rpb25DYWxsYmFja3MgY29ubmVjdGlvbkNhbGxiYWNrcykgeworICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29udGV4dCBjYW4ndCBiZSBudWxsIik7CisgICAgICAgIGlmIChkZWZhdWx0UmVxdWVzdENhbGxiYWNrcyA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZGVmYXVsdFJlcXVlc3RDYWxsYmFja3MgY2FuJ3QgYmUgbnVsbCIpOworICAgICAgICBpZiAoY29ubmVjdGlvbkNhbGxiYWNrcyA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29ubmVjdGlvbkNhbGxiYWNrcyBjYW4ndCBiZSBudWxsIik7CisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgbUVuZ2luZXNIZWxwZXIgPSBuZXcgVHRzRW5naW5lcyhtQ29udGV4dCk7CisgICAgICAgIG1DYWxsYmFja3MgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFBhaXI8VXR0ZXJhbmNlSWQsIFJlcXVlc3RDYWxsYmFja3M+PigpOworICAgICAgICBtRGVmYXVsdFJlcXVlc3RDYWxsYmFja3MgPSBkZWZhdWx0UmVxdWVzdENhbGxiYWNrczsKKyAgICAgICAgbUNvbm5lY3Rpb25DYWxsYmFja3MgPSBjb25uZWN0aW9uQ2FsbGJhY2tzOworCisgICAgICAgIG1SZXF1ZXN0ZWRFbmdpbmUgPSBlbmdpbmU7CisgICAgICAgIG1GYWxsYmFja1RvRGVmYXVsdCA9IGZhbGxiYWNrVG9EZWZhdWx0RW5naW5lOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBUZXh0VG9TcGVlY2ggc2VydmljZSBjbGllbnQuIFdpbGwgY29ubmVjdCB0byB0aGUgZGVmYXVsdCBUVFMKKyAgICAgKiBzZXJ2aWNlLiBJbiBvcmRlciB0byBiZSB1c2FibGUsIHtAbGluayAjY29ubmVjdCgpfSBuZWVkIHRvIGJlIGNhbGxlZAorICAgICAqIGZpcnN0IGFuZCBzdWNjZXNzZnVsIGNvbm5lY3Rpb24gY2FsbGJhY2sgbmVlZCB0byBiZSByZWNlaXZlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdGhpcyBpbnN0YW5jZSBpcyBydW5uaW5nIGluLgorICAgICAqIEBwYXJhbSBkZWZhdWx0UmVxdWVzdENhbGxiYWNrcyBEZWZhdWx0IHJlcXVlc3QgY2FsbGJhY2tzLCBpdAorICAgICAqICAgICAgICAgICAgd2lsbCBiZSB1c2VkIGZvciBhbGwgc3ludGhlc2lzIHJlcXVlc3RzIHdpdGhvdXQgc3VwcGxpZWQKKyAgICAgKiAgICAgICAgICAgIFJlcXVlc3RDYWxsYmFja3MgaW5zdGFuY2UuIENhbid0IGJlIG51bGwuCisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25DYWxsYmFja3MgQ2FsbGJhY2tzIGZvciBjb25uZWN0aW5nIGFuZCBkaXNjb25uZWN0aW5nCisgICAgICogICAgICAgICAgICBmcm9tIHRoZSBzZXJ2aWNlLiBDYW4ndCBiZSBudWxsLgorICAgICAqLworICAgIHB1YmxpYyBUZXh0VG9TcGVlY2hDbGllbnQoQ29udGV4dCBjb250ZXh0LCBSZXF1ZXN0Q2FsbGJhY2tzIGRlZmF1bHRSZXF1ZXN0Q2FsbGJhY2tzLAorICAgICAgICAgICAgQ29ubmVjdGlvbkNhbGxiYWNrcyBjb25uZWN0aW9uQ2FsbGJhY2tzKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCwgdHJ1ZSwgZGVmYXVsdFJlcXVlc3RDYWxsYmFja3MsIGNvbm5lY3Rpb25DYWxsYmFja3MpOworICAgIH0KKworCisgICAgcHJpdmF0ZSBib29sZWFuIGluaXRUdHMoU3RyaW5nIHJlcXVlc3RlZEVuZ2luZSwgYm9vbGVhbiBmYWxsYmFja1RvRGVmYXVsdEVuZ2luZSkgeworICAgICAgICAvLyBTdGVwIDE6IFRyeSBjb25uZWN0aW5nIHRvIHRoZSBlbmdpbmUgdGhhdCB3YXMgcmVxdWVzdGVkLgorICAgICAgICBpZiAocmVxdWVzdGVkRW5naW5lICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChtRW5naW5lc0hlbHBlci5pc0VuZ2luZUluc3RhbGxlZChyZXF1ZXN0ZWRFbmdpbmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKChtU2VydmljZUNvbm5lY3Rpb24gPSBjb25uZWN0VG9FbmdpbmUocmVxdWVzdGVkRW5naW5lKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmYWxsYmFja1RvRGVmYXVsdEVuZ2luZSkgeworICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZG4ndCBjb25uZWN0IHRvIHJlcXVlc3RlZCBlbmdpbmU6ICIgKyByZXF1ZXN0ZWRFbmdpbmUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICghZmFsbGJhY2tUb0RlZmF1bHRFbmdpbmUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJSZXF1ZXN0ZWQgZW5naW5lIG5vdCBpbnN0YWxsZWQ6ICIgKyByZXF1ZXN0ZWRFbmdpbmUpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0ZXAgMjogVHJ5IGNvbm5lY3RpbmcgdG8gdGhlIHVzZXIncyBkZWZhdWx0IGVuZ2luZS4KKyAgICAgICAgZmluYWwgU3RyaW5nIGRlZmF1bHRFbmdpbmUgPSBtRW5naW5lc0hlbHBlci5nZXREZWZhdWx0RW5naW5lKCk7CisgICAgICAgIGlmIChkZWZhdWx0RW5naW5lICE9IG51bGwgJiYgIWRlZmF1bHRFbmdpbmUuZXF1YWxzKHJlcXVlc3RlZEVuZ2luZSkpIHsKKyAgICAgICAgICAgIGlmICgobVNlcnZpY2VDb25uZWN0aW9uID0gY29ubmVjdFRvRW5naW5lKGRlZmF1bHRFbmdpbmUpKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTdGVwIDM6IFRyeSBjb25uZWN0aW5nIHRvIHRoZSBoaWdoZXN0IHJhbmtlZCBlbmdpbmUgaW4gdGhlCisgICAgICAgIC8vIHN5c3RlbS4KKyAgICAgICAgZmluYWwgU3RyaW5nIGhpZ2hlc3RSYW5rZWQgPSBtRW5naW5lc0hlbHBlci5nZXRIaWdoZXN0UmFua2VkRW5naW5lTmFtZSgpOworICAgICAgICBpZiAoaGlnaGVzdFJhbmtlZCAhPSBudWxsICYmICFoaWdoZXN0UmFua2VkLmVxdWFscyhyZXF1ZXN0ZWRFbmdpbmUpICYmCisgICAgICAgICAgICAgICAgIWhpZ2hlc3RSYW5rZWQuZXF1YWxzKGRlZmF1bHRFbmdpbmUpKSB7CisgICAgICAgICAgICBpZiAoKG1TZXJ2aWNlQ29ubmVjdGlvbiA9IGNvbm5lY3RUb0VuZ2luZShoaWdoZXN0UmFua2VkKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTG9nLncoVEFHLCAiQ291bGRuJ3QgZmluZCB3b3JraW5nIFRUUyBlbmdpbmUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb25uZWN0VG9FbmdpbmUoU3RyaW5nIGVuZ2luZSkgeworICAgICAgICBDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihlbmdpbmUpOworICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChUZXh0VG9TcGVlY2guRW5naW5lLklOVEVOVF9BQ1RJT05fVFRTX1NFUlZJQ0UpOworICAgICAgICBpbnRlbnQuc2V0UGFja2FnZShlbmdpbmUpOworICAgICAgICBib29sZWFuIGJvdW5kID0gbUNvbnRleHQuYmluZFNlcnZpY2UoaW50ZW50LCBjb25uZWN0aW9uLCBDb250ZXh0LkJJTkRfQVVUT19DUkVBVEUpOworICAgICAgICBpZiAoIWJvdW5kKSB7CisgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gYmluZCB0byAiICsgZW5naW5lKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTG9nLmkoVEFHLCAiU3VjY2Vzc2Z1bGx5IGJvdW5kIHRvICIgKyBlbmdpbmUpOworICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENvbm5lY3RzIHRoZSBjbGllbnQgdG8gVFRTIHNlcnZpY2UuIFRoaXMgbWV0aG9kIHJldHVybnMgaW1tZWRpYXRlbHksIGFuZCBjb25uZWN0cyB0byB0aGUKKyAgICAgKiBzZXJ2aWNlIGluIHRoZSBiYWNrZ3JvdW5kLgorICAgICAqCisgICAgICogQWZ0ZXIgY29ubmVjdGlvbiBpbml0aWFsaXplcyBzdWNjZXNzZnVsbHksIHtAbGluayBDb25uZWN0aW9uQ2FsbGJhY2tzI29uQ29ubmVjdGlvblN1Y2Nlc3MoKX0KKyAgICAgKiBpcyBjYWxsZWQuIE9uIGEgZmFpbHVyZSB7QGxpbmsgQ29ubmVjdGlvbkNhbGxiYWNrcyNvbkNvbm5lY3Rpb25GYWlsdXJlfSBpcyBjYWxsZWQuCisgICAgICoKKyAgICAgKiBCb3RoIG9mIHRob3NlIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHkgb24gdGhlIG1haW4gdGhyZWFkLAorICAgICAqIHtAbGluayBDb25uZWN0aW9uQ2FsbGJhY2tzI29uQ29ubmVjdGlvbkZhaWx1cmV9IG1heSBiZSBjYWxsZWQgc3luY2hyb25vdXNseSwgYmVmb3JlCisgICAgICogdGhpcyBtZXRob2QgcmV0dXJucy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb25uZWN0KCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBpZiAobVNlcnZpY2VDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighaW5pdFR0cyhtUmVxdWVzdGVkRW5naW5lLCBtRmFsbGJhY2tUb0RlZmF1bHQpKSB7CisgICAgICAgICAgICAgICAgbUNvbm5lY3Rpb25DYWxsYmFja3Mub25Db25uZWN0aW9uRmFpbHVyZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBjbGllbnQgaXMgY3VycmVudGx5IGNvbm5lY3RlZCB0byB0aGUgc2VydmljZSwgc28gdGhhdAorICAgICAqIHJlcXVlc3RzIHRvIG90aGVyIG1ldGhvZHMgd2lsbCBzdWNjZWVkLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ29ubmVjdGVkKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2VDb25uZWN0aW9uICE9IG51bGwgJiYgbVNlcnZpY2VDb25uZWN0aW9uLmlzRXN0YWJsaXNoZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENsb3NlcyB0aGUgY29ubmVjdGlvbiB0byBUZXh0VG9TcGVlY2ggc2VydmljZS4gTm8gY2FsbHMgY2FuIGJlIG1hZGUgb24gdGhpcyBvYmplY3QgYWZ0ZXIKKyAgICAgKiBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAqIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gY2FsbCB0aGlzIG1ldGhvZCBpbiB0aGUgb25EZXN0cm95KCkgbWV0aG9kIG9mIGFuIEFjdGl2aXR5CisgICAgICogc28gdGhlIFRleHRUb1NwZWVjaCBlbmdpbmUgY2FuIGJlIGNsZWFubHkgc3RvcHBlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBpZiAobVNlcnZpY2VDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtU2VydmljZUNvbm5lY3Rpb24uZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgIG1TZXJ2aWNlQ29ubmVjdGlvbiA9IG51bGw7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgY2FsbGJhY2suCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQgTm9uLW51bGwgVXR0ZXJhbmNlSWQgaW5zdGFuY2UuCisgICAgICogQHBhcmFtIGNhbGxiYWNrIE5vbi1udWxsIGNhbGxiYWNrcyBmb3IgdGhlIHJlcXVlc3QKKyAgICAgKiBAcmV0dXJuIFN0YXR1cy5TVUNDRVNTIG9yIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBpbnZhbGlkIGFyZ3VtZW50cy4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBhZGRDYWxsYmFjayhVdHRlcmFuY2VJZCB1dHRlcmFuY2VJZCwgUmVxdWVzdENhbGxiYWNrcyBjYWxsYmFjaykgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBpZiAodXR0ZXJhbmNlSWQgPT0gbnVsbCB8fCBjYWxsYmFjayA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5FUlJPUl9JTlZBTElEX1JFUVVFU1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobUNhbGxiYWNrcy5wdXQodXR0ZXJhbmNlSWQudG9VbmlxdWVTdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFBhaXI8VXR0ZXJhbmNlSWQsIFJlcXVlc3RDYWxsYmFja3M+KHV0dGVyYW5jZUlkLCBjYWxsYmFjaykpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzLkVSUk9SX05PTl9VTklRVUVfVVRURVJBTkNFX0lEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5TVUNDRVNTOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlIGFuZCByZXR1cm4gY2FsbGJhY2suCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWRTdHIgVW5pcXVlIHN0cmluZyBvYnRhaW5lZCBmcm9tIHtAbGluayBVdHRlcmFuY2VJZCN0b1VuaXF1ZVN0cmluZ30uCisgICAgICovCisgICAgcHJpdmF0ZSBQYWlyPFV0dGVyYW5jZUlkLCBSZXF1ZXN0Q2FsbGJhY2tzPiByZW1vdmVDYWxsYmFjayhTdHJpbmcgdXR0ZXJhbmNlSWRTdHIpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1DYWxsYmFja3MucmVtb3ZlKHV0dGVyYW5jZUlkU3RyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBjYWxsYmFjayBhbmQgdXR0ZXJhbmNlIGlkLgorICAgICAqCisgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkU3RyIFVuaXF1ZSBzdHJpbmcgb2J0YWluZWQgZnJvbSB7QGxpbmsgVXR0ZXJhbmNlSWQjdG9VbmlxdWVTdHJpbmd9LgorICAgICAqLworICAgIHByaXZhdGUgUGFpcjxVdHRlcmFuY2VJZCwgUmVxdWVzdENhbGxiYWNrcz4gZ2V0Q2FsbGJhY2soU3RyaW5nIHV0dGVyYW5jZUlkU3RyKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgIHJldHVybiBtQ2FsbGJhY2tzLmdldCh1dHRlcmFuY2VJZFN0cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgY2FsbGJhY2sgYW5kIGNhbGwge0BsaW5rIFJlcXVlc3RDYWxsYmFja3Mjb25TeW50aGVzaXNGYWlsdXJlfSB3aXRoIHBhc3NlZAorICAgICAqIGVycm9yIGNvZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWRTdHIgVW5pcXVlIHN0cmluZyBvYnRhaW5lZCBmcm9tIHtAbGluayBVdHRlcmFuY2VJZCN0b1VuaXF1ZVN0cmluZ30uCisgICAgICogQHBhcmFtIGVycm9yQ29kZSBhcmd1bWVudCB0byB7QGxpbmsgUmVxdWVzdENhbGxiYWNrcyNvblN5bnRoZXNpc0ZhaWx1cmV9IGNhbGwuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlbW92ZUNhbGxiYWNrQW5kRXJyKFN0cmluZyB1dHRlcmFuY2VJZFN0ciwgaW50IGVycm9yQ29kZSkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBQYWlyPFV0dGVyYW5jZUlkLCBSZXF1ZXN0Q2FsbGJhY2tzPiBjID0gbUNhbGxiYWNrcy5yZW1vdmUodXR0ZXJhbmNlSWRTdHIpOworICAgICAgICAgICAgYy5zZWNvbmQub25TeW50aGVzaXNGYWlsdXJlKGMuZmlyc3QsIGVycm9yQ29kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZSBUVFMgZW5naW5lIHN0YXR1cyB7QGxpbmsgRW5naW5lU3RhdHVzfS4gUmVxdWlyZXMgY29ubmVjdGVkIGNsaWVudC4KKyAgICAgKi8KKyAgICBwdWJsaWMgRW5naW5lU3RhdHVzIGdldEVuZ2luZVN0YXR1cygpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1FbmdpbmVTdGF0dXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBRdWVyeSBUVFMgZW5naW5lIGFib3V0IGF2YWlsYWJsZSB2b2ljZXMgYW5kIGRlZmF1bHRzLgorICAgICAqCisgICAgICogQHJldHVybiBFbmdpbmVTdGF0dXMgaXMgY29ubmVjdGVkIG9yIG51bGwgaWYgY2xpZW50IGlzIGRpc2Nvbm5lY3RlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIEVuZ2luZVN0YXR1cyByZXF1ZXN0RW5naW5lU3RhdHVzKElUZXh0VG9TcGVlY2hTZXJ2aWNlIHNlcnZpY2UpCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgTGlzdDxWb2ljZUluZm8+IHZvaWNlcyA9IHNlcnZpY2UuZ2V0Vm9pY2VzSW5mbygpOworICAgICAgICBpZiAodm9pY2VzID09IG51bGwpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIlJlcXVlc3RlZCBlbmdpbmUgZG9lc24ndCBzdXBwb3J0IFRUUyBWMiBBUEkiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBFbmdpbmVTdGF0dXMobVNlcnZpY2VDb25uZWN0aW9uLmdldEVuZ2luZU5hbWUoKSwgdm9pY2VzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIENvbm5lY3Rpb24gaW1wbGVtZW50cyBTZXJ2aWNlQ29ubmVjdGlvbiB7CisgICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1FbmdpbmVOYW1lOworCisgICAgICAgIHByaXZhdGUgSVRleHRUb1NwZWVjaFNlcnZpY2UgbVNlcnZpY2U7CisKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Fc3RhYmxpc2hlZDsKKworICAgICAgICBwcml2YXRlIFByZXBhcmVDb25uZWN0aW9uQXN5bmNUYXNrIG1TZXR1cENvbm5lY3Rpb25Bc3luY1Rhc2s7CisKKyAgICAgICAgcHVibGljIENvbm5lY3Rpb24oU3RyaW5nIGVuZ2luZU5hbWUpIHsKKyAgICAgICAgICAgIHRoaXMubUVuZ2luZU5hbWUgPSBlbmdpbmVOYW1lOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBJVGV4dFRvU3BlZWNoQ2FsbGJhY2suU3R1YiBtQ2FsbGJhY2sgPSBuZXcgSVRleHRUb1NwZWVjaENhbGxiYWNrLlN0dWIoKSB7CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25TdGFydChTdHJpbmcgdXR0ZXJhbmNlSWRTdHIpIHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIFBhaXI8VXR0ZXJhbmNlSWQsIFJlcXVlc3RDYWxsYmFja3M+IGNhbGxiYWNrcyA9IGdldENhbGxiYWNrKHV0dGVyYW5jZUlkU3RyKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnNlY29uZC5vblN5bnRoZXNpc1N0YXJ0KGNhbGxiYWNrcy5maXJzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblN0b3AoU3RyaW5nIHV0dGVyYW5jZUlkU3RyKSB7CisgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICBQYWlyPFV0dGVyYW5jZUlkLCBSZXF1ZXN0Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSByZW1vdmVDYWxsYmFjayh1dHRlcmFuY2VJZFN0cik7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5zZWNvbmQub25TeW50aGVzaXNTdG9wKGNhbGxiYWNrcy5maXJzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU3VjY2VzcyhTdHJpbmcgdXR0ZXJhbmNlSWRTdHIpIHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIFBhaXI8VXR0ZXJhbmNlSWQsIFJlcXVlc3RDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHJlbW92ZUNhbGxiYWNrKHV0dGVyYW5jZUlkU3RyKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnNlY29uZC5vblN5bnRoZXNpc1N1Y2Nlc3MoY2FsbGJhY2tzLmZpcnN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uRmFsbGJhY2soU3RyaW5nIHV0dGVyYW5jZUlkU3RyKSB7CisgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICBQYWlyPFV0dGVyYW5jZUlkLCBSZXF1ZXN0Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBnZXRDYWxsYmFjayh1dHRlcmFuY2VJZFN0cik7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5zZWNvbmQub25TeW50aGVzaXNGYWxsYmFjayhjYWxsYmFja3MuZmlyc3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25FcnJvcihTdHJpbmcgdXR0ZXJhbmNlSWRTdHIsIGludCBlcnJvckNvZGUpIHsKKyAgICAgICAgICAgICAgICByZW1vdmVDYWxsYmFja0FuZEVycih1dHRlcmFuY2VJZFN0ciwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblZvaWNlc0luZm9DaGFuZ2UoTGlzdDxWb2ljZUluZm8+IHZvaWNlc0luZm8pIHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIG1FbmdpbmVTdGF0dXMgPSBuZXcgRW5naW5lU3RhdHVzKG1TZXJ2aWNlQ29ubmVjdGlvbi5nZXRFbmdpbmVOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pY2VzSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uQ2FsbGJhY2tzLm9uRW5naW5lU3RhdHVzQ2hhbmdlKG1FbmdpbmVTdGF0dXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIGNsYXNzIFByZXBhcmVDb25uZWN0aW9uQXN5bmNUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFZvaWQsIFZvaWQsIEVuZ2luZVN0YXR1cz4geworCisgICAgICAgICAgICBwcml2YXRlIGZpbmFsIENvbXBvbmVudE5hbWUgbU5hbWU7CisKKyAgICAgICAgICAgIHB1YmxpYyBQcmVwYXJlQ29ubmVjdGlvbkFzeW5jVGFzayhDb21wb25lbnROYW1lIG5hbWUpIHsKKyAgICAgICAgICAgICAgICBtTmFtZSA9IG5hbWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHJvdGVjdGVkIEVuZ2luZVN0YXR1cyBkb0luQmFja2dyb3VuZChWb2lkLi4uIHBhcmFtcykgeworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNDYW5jZWxsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldENhbGxiYWNrKGdldENhbGxlcklkZW50aXR5KCksIG1DYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdEVuZ2luZVN0YXR1cyhtU2VydmljZSk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXJyb3Igc2V0dGluZyB1cCB0aGUgVFRTIHNlcnZpY2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUG9zdEV4ZWN1dGUoRW5naW5lU3RhdHVzIHJlc3VsdCkgeworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAobVNldHVwQ29ubmVjdGlvbkFzeW5jVGFzayA9PSB0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtU2V0dXBDb25uZWN0aW9uQXN5bmNUYXNrID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlNldHVwIHRhc2sgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNjb25uZWN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbkNhbGxiYWNrcy5vbkNvbm5lY3Rpb25GYWlsdXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBtRW5naW5lU3RhdHVzID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBtRXN0YWJsaXNoZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbkNhbGxiYWNrcy5vbkNvbm5lY3Rpb25TdWNjZXNzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgbmFtZSwgSUJpbmRlciBzZXJ2aWNlKSB7CisgICAgICAgICAgICBMb2cuaShUQUcsICJDb25uZWN0ZWQgdG8gIiArIG5hbWUpOworCisgICAgICAgICAgICBzeW5jaHJvbml6ZWQobUxvY2spIHsKKyAgICAgICAgICAgICAgICBtRXN0YWJsaXNoZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtU2VydmljZSA9IElUZXh0VG9TcGVlY2hTZXJ2aWNlLlN0dWIuYXNJbnRlcmZhY2Uoc2VydmljZSk7CisgICAgICAgICAgICAgICAgc3RhcnRTZXR1cENvbm5lY3Rpb25UYXNrKG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUpIHsKKyAgICAgICAgICAgIExvZy5pKFRBRywgIkFza2VkIHRvIGRpc2Nvbm5lY3QgZnJvbSAiICsgbmFtZSk7CisKKyAgICAgICAgICAgIHN5bmNocm9uaXplZChtTG9jaykgeworICAgICAgICAgICAgICAgIHN0b3BTZXR1cENvbm5lY3Rpb25UYXNrKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ29ubmVjdGlvbkNhbGxiYWNrcy5vblNlcnZpY2VEaXNjb25uZWN0ZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBzdGFydFNldHVwQ29ubmVjdGlvblRhc2soQ29tcG9uZW50TmFtZSBuYW1lKSB7CisgICAgICAgICAgICBzdG9wU2V0dXBDb25uZWN0aW9uVGFzaygpOworICAgICAgICAgICAgbVNldHVwQ29ubmVjdGlvbkFzeW5jVGFzayA9IG5ldyBQcmVwYXJlQ29ubmVjdGlvbkFzeW5jVGFzayhuYW1lKTsKKyAgICAgICAgICAgIG1TZXR1cENvbm5lY3Rpb25Bc3luY1Rhc2suZXhlY3V0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3BTZXR1cENvbm5lY3Rpb25UYXNrKCkgeworICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtU2V0dXBDb25uZWN0aW9uQXN5bmNUYXNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtU2V0dXBDb25uZWN0aW9uQXN5bmNUYXNrLmNhbmNlbChmYWxzZSk7CisgICAgICAgICAgICAgICAgbVNldHVwQ29ubmVjdGlvbkFzeW5jVGFzayA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgSUJpbmRlciBnZXRDYWxsZXJJZGVudGl0eSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ2FsbGJhY2s7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIGlzRXN0YWJsaXNoZWQoKSB7CisgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UgIT0gbnVsbCAmJiBtRXN0YWJsaXNoZWQ7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIHJ1bkFjdGlvbihBY3Rpb24gYWN0aW9uKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bihtU2VydmljZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsIGFjdGlvbi5nZXROYW1lKCkgKyAiIGZhaWxlZCIsIGV4KTsKKyAgICAgICAgICAgICAgICAgICAgZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0KCkgeworICAgICAgICAgICAgbUNvbnRleHQudW5iaW5kU2VydmljZSh0aGlzKTsKKyAgICAgICAgICAgIHN0b3BTZXR1cENvbm5lY3Rpb25UYXNrKCk7CisgICAgICAgICAgICBtU2VydmljZSA9IG51bGw7CisgICAgICAgICAgICBtRXN0YWJsaXNoZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtU2VydmljZUNvbm5lY3Rpb24gPT0gdGhpcykgeworICAgICAgICAgICAgICAgIG1TZXJ2aWNlQ29ubmVjdGlvbiA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgZ2V0RW5naW5lTmFtZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtRW5naW5lTmFtZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgQWN0aW9uIHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU5hbWU7CisKKyAgICAgICAgcHVibGljIEFjdGlvbihTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgbU5hbWUgPSBuYW1lOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkge3JldHVybiBtTmFtZTt9CisgICAgICAgIGFic3RyYWN0IHZvaWQgcnVuKElUZXh0VG9TcGVlY2hTZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgfQorCisgICAgcHJpdmF0ZSBJQmluZGVyIGdldENhbGxlcklkZW50aXR5KCkgeworICAgICAgICBpZiAobVNlcnZpY2VDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBtU2VydmljZUNvbm5lY3Rpb24uZ2V0Q2FsbGVySWRlbnRpdHkoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gcnVuQWN0aW9uKEFjdGlvbiBhY3Rpb24pIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgaWYgKG1TZXJ2aWNlQ29ubmVjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtU2VydmljZUNvbm5lY3Rpb24uaXNFc3RhYmxpc2hlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVNlcnZpY2VDb25uZWN0aW9uLnJ1bkFjdGlvbihhY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1NUT1BfTkFNRSA9ICJzdG9wIjsKKworICAgIC8qKgorICAgICAqIEludGVycnVwdHMgdGhlIGN1cnJlbnQgdXR0ZXJhbmNlIHNwb2tlbiAod2hldGhlciBwbGF5ZWQgb3IgcmVuZGVyZWQgdG8gZmlsZSkgYW5kIGRpc2NhcmRzCisgICAgICogb3RoZXIgdXR0ZXJhbmNlcyBpbiB0aGUgcXVldWUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKKyAgICAgICAgcnVuQWN0aW9uKG5ldyBBY3Rpb24oQUNUSU9OX1NUT1BfTkFNRSkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVRleHRUb1NwZWVjaFNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICBpZiAoc2VydmljZS5zdG9wKGdldENhbGxlcklkZW50aXR5KCkpICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiU3RvcCBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIG1DYWxsYmFja3MuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9RVUVVRV9TUEVBS19OQU1FID0gInF1ZXVlU3BlYWsiOworCisgICAgLyoqCisgICAgICogU3BlYWtzIHRoZSBzdHJpbmcgdXNpbmcgdGhlIHNwZWNpZmllZCBxdWV1aW5nIHN0cmF0ZWd5IHVzaW5nIGN1cnJlbnQKKyAgICAgKiB2b2ljZS4gVGhpcyBtZXRob2QgaXMgYXN5bmNocm9ub3VzLCBpLmUuIHRoZSBtZXRob2QganVzdCBhZGRzIHRoZSByZXF1ZXN0CisgICAgICogdG8gdGhlIHF1ZXVlIG9mIFRUUyByZXF1ZXN0cyBhbmQgdGhlbiByZXR1cm5zLiBUaGUgc3ludGhlc2lzIG1pZ2h0IG5vdAorICAgICAqIGhhdmUgZmluaXNoZWQgKG9yIGV2ZW4gc3RhcnRlZCEpIGF0IHRoZSB0aW1lIHdoZW4gdGhpcyBtZXRob2QgcmV0dXJucy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1dHRlcmFuY2UgVGhlIHN0cmluZyBvZiB0ZXh0IHRvIGJlIHNwb2tlbi4gTm8gbG9uZ2VyIHRoYW4KKyAgICAgKiAgICAgICAgICAgIDEwMDAgY2hhcmFjdGVycy4KKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQgVW5pcXVlIGlkZW50aWZpY2F0b3IgdXNlZCB0byB0cmFjayB0aGUgc3ludGhlc2lzIHByb2dyZXNzCisgICAgICogICAgICAgICAgICBpbiB7QGxpbmsgUmVxdWVzdENhbGxiYWNrc30uCisgICAgICogQHBhcmFtIGNvbmZpZyBTeW50aGVzaXMgcmVxdWVzdCBjb25maWd1cmF0aW9uLiBDYW4ndCBiZSBudWxsLiBIYXMgdG8gY29udGFpbiBhCisgICAgICogICAgICAgICAgICB2b2ljZS4KKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tzIFN5bnRoZXNpcyByZXF1ZXN0IGNhbGxiYWNrcy4gSWYgbnVsbCwgZGVmYXVsdCByZXF1ZXN0CisgICAgICogICAgICAgICAgICBjYWxsYmFja3Mgb2JqZWN0IHdpbGwgYmUgdXNlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBxdWV1ZVNwZWFrKGZpbmFsIFN0cmluZyB1dHRlcmFuY2UsIGZpbmFsIFV0dGVyYW5jZUlkIHV0dGVyYW5jZUlkLAorICAgICAgICAgICAgZmluYWwgUmVxdWVzdENvbmZpZyBjb25maWcsCisgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0Q2FsbGJhY2tzIGNhbGxiYWNrcykgeworICAgICAgICBydW5BY3Rpb24obmV3IEFjdGlvbihBQ1RJT05fUVVFVUVfU1BFQUtfTkFNRSkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVRleHRUb1NwZWVjaFNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgUmVxdWVzdENhbGxiYWNrcyBjID0gbURlZmF1bHRSZXF1ZXN0Q2FsbGJhY2tzOworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjID0gY2FsbGJhY2tzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgYWRkQ2FsbGJhY2tTdGF0dXMgPSBhZGRDYWxsYmFjayh1dHRlcmFuY2VJZCwgYyk7CisgICAgICAgICAgICAgICAgaWYgKGFkZENhbGxiYWNrU3RhdHVzICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIGMub25TeW50aGVzaXNGYWlsdXJlKHV0dGVyYW5jZUlkLCBTdGF0dXMuRVJST1JfSU5WQUxJRF9SRVFVRVNUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGludCBxdWV1ZVJlc3VsdCA9IHNlcnZpY2Uuc3BlYWtWMigKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldENhbGxlcklkZW50aXR5KCksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3ludGhlc2lzUmVxdWVzdFYyKHV0dGVyYW5jZSwgdXR0ZXJhbmNlSWQudG9VbmlxdWVTdHJpbmcoKSwgY29uZmlnKSk7CisgICAgICAgICAgICAgICAgaWYgKHF1ZXVlUmVzdWx0ICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrQW5kRXJyKHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCksIHF1ZXVlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fUVVFVUVfU1lOVEhFU0laRV9UT19GSUxFID0gInF1ZXVlU3ludGhlc2l6ZVRvRmlsZSI7CisKKyAgICAvKioKKyAgICAgKiBTeW50aGVzaXplcyB0aGUgZ2l2ZW4gdGV4dCB0byBhIGZpbGUgdXNpbmcgdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLiBUaGlzCisgICAgICogbWV0aG9kIGlzIGFzeW5jaHJvbm91cywgaS5lLiB0aGUgbWV0aG9kIGp1c3QgYWRkcyB0aGUgcmVxdWVzdCB0byB0aGUKKyAgICAgKiBxdWV1ZSBvZiBUVFMgcmVxdWVzdHMgYW5kIHRoZW4gcmV0dXJucy4gVGhlIHN5bnRoZXNpcyBtaWdodCBub3QgaGF2ZQorICAgICAqIGZpbmlzaGVkIChvciBldmVuIHN0YXJ0ZWQhKSBhdCB0aGUgdGltZSB3aGVuIHRoaXMgbWV0aG9kIHJldHVybnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlIFRoZSB0ZXh0IHRoYXQgc2hvdWxkIGJlIHN5bnRoZXNpemVkLiBObyBsb25nZXIgdGhhbgorICAgICAqICAgICAgICAgICAgMTAwMCBjaGFyYWN0ZXJzLgorICAgICAqIEBwYXJhbSB1dHRlcmFuY2VJZCBVbmlxdWUgaWRlbnRpZmljYXRvciB1c2VkIHRvIHRyYWNrIHRoZSBzeW50aGVzaXMgcHJvZ3Jlc3MKKyAgICAgKiAgICAgICAgICAgIGluIHtAbGluayBSZXF1ZXN0Q2FsbGJhY2tzfS4KKyAgICAgKiBAcGFyYW0gb3V0cHV0RmlsZSBGaWxlIHRvIHdyaXRlIHRoZSBnZW5lcmF0ZWQgYXVkaW8gZGF0YSB0by4KKyAgICAgKiBAcGFyYW0gY29uZmlnIFN5bnRoZXNpcyByZXF1ZXN0IGNvbmZpZ3VyYXRpb24uIENhbid0IGJlIG51bGwuIEhhdmUgdG8gY29udGFpbiBhCisgICAgICogICAgICAgICAgICB2b2ljZS4KKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tzIFN5bnRoZXNpcyByZXF1ZXN0IGNhbGxiYWNrcy4gSWYgbnVsbCwgZGVmYXVsdCByZXF1ZXN0CisgICAgICogICAgICAgICAgICBjYWxsYmFja3Mgb2JqZWN0IHdpbGwgYmUgdXNlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBxdWV1ZVN5bnRoZXNpemVUb0ZpbGUoZmluYWwgU3RyaW5nIHV0dGVyYW5jZSwgZmluYWwgVXR0ZXJhbmNlSWQgdXR0ZXJhbmNlSWQsCisgICAgICAgICAgICBmaW5hbCBGaWxlIG91dHB1dEZpbGUsIGZpbmFsIFJlcXVlc3RDb25maWcgY29uZmlnLAorICAgICAgICAgICAgZmluYWwgUmVxdWVzdENhbGxiYWNrcyBjYWxsYmFja3MpIHsKKyAgICAgICAgcnVuQWN0aW9uKG5ldyBBY3Rpb24oQUNUSU9OX1FVRVVFX1NZTlRIRVNJWkVfVE9fRklMRSkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVRleHRUb1NwZWVjaFNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgUmVxdWVzdENhbGxiYWNrcyBjID0gbURlZmF1bHRSZXF1ZXN0Q2FsbGJhY2tzOworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjID0gY2FsbGJhY2tzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgYWRkQ2FsbGJhY2tTdGF0dXMgPSBhZGRDYWxsYmFjayh1dHRlcmFuY2VJZCwgYyk7CisgICAgICAgICAgICAgICAgaWYgKGFkZENhbGxiYWNrU3RhdHVzICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIGMub25TeW50aGVzaXNGYWlsdXJlKHV0dGVyYW5jZUlkLCBTdGF0dXMuRVJST1JfSU5WQUxJRF9SRVFVRVNUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAob3V0cHV0RmlsZS5leGlzdHMoKSAmJiAhb3V0cHV0RmlsZS5jYW5Xcml0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJObyBwZXJtaXNzaW9ucyB0byB3cml0ZSB0byAiICsgb3V0cHV0RmlsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDYWxsYmFja0FuZEVycih1dHRlcmFuY2VJZC50b1VuaXF1ZVN0cmluZygpLCBTdGF0dXMuRVJST1JfT1VUUFVUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmaWxlRGVzY3JpcHRvciA9IFBhcmNlbEZpbGVEZXNjcmlwdG9yLm9wZW4ob3V0cHV0RmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX1dSSVRFX09OTFkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfQ1JFQVRFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX1RSVU5DQVRFKTsKKworICAgICAgICAgICAgICAgICAgICBpbnQgcXVldWVSZXN1bHQgPSBzZXJ2aWNlLnN5bnRoZXNpemVUb0ZpbGVEZXNjcmlwdG9yVjIoZ2V0Q2FsbGVySWRlbnRpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlRGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3ludGhlc2lzUmVxdWVzdFYyKHV0dGVyYW5jZSwgdXR0ZXJhbmNlSWQudG9VbmlxdWVTdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZykpOworICAgICAgICAgICAgICAgICAgICBmaWxlRGVzY3JpcHRvci5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAocXVldWVSZXN1bHQgIT0gU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrQW5kRXJyKHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCksIHF1ZXVlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIk9wZW5pbmcgZmlsZSAiICsgb3V0cHV0RmlsZSArICIgZmFpbGVkIiwgZSk7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrQW5kRXJyKHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCksIFN0YXR1cy5FUlJPUl9PVVRQVVQpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2xvc2luZyBmaWxlICIgKyBvdXRwdXRGaWxlICsgIiBmYWlsZWQiLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2FsbGJhY2tBbmRFcnIodXR0ZXJhbmNlSWQudG9VbmlxdWVTdHJpbmcoKSwgU3RhdHVzLkVSUk9SX09VVFBVVCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1FVRVVFX1NJTEVOQ0VfTkFNRSA9ICJxdWV1ZVNpbGVuY2UiOworCisgICAgLyoqCisgICAgICogUGxheXMgc2lsZW5jZSBmb3IgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZS4gVGhpcyBtZXRob2QgaXMgYXN5bmNocm9ub3VzLAorICAgICAqIGkuZS4gdGhlIG1ldGhvZCBqdXN0IGFkZHMgdGhlIHJlcXVlc3QgdG8gdGhlIHF1ZXVlIG9mIFRUUyByZXF1ZXN0cyBhbmQgdGhlbgorICAgICAqIHJldHVybnMuIFRoZSBzeW50aGVzaXMgbWlnaHQgbm90IGhhdmUgZmluaXNoZWQgKG9yIGV2ZW4gc3RhcnRlZCEpIGF0IHRoZSB0aW1lCisgICAgICogd2hlbiB0aGlzIG1ldGhvZCByZXR1cm5zLgorICAgICAqCisgICAgICogQHBhcmFtIGR1cmF0aW9uSW5NcyBUaGUgZHVyYXRpb24gb2YgdGhlIHNpbGVuY2UgaW4gbWlsbGlzZWNvbmRzLgorICAgICAqIEBwYXJhbSB1dHRlcmFuY2VJZCBVbmlxdWUgaWRlbnRpZmljYXRvciB1c2VkIHRvIHRyYWNrIHRoZSBzeW50aGVzaXMgcHJvZ3Jlc3MKKyAgICAgKiAgICAgICAgICAgIGluIHtAbGluayBSZXF1ZXN0Q2FsbGJhY2tzfS4KKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tzIFN5bnRoZXNpcyByZXF1ZXN0IGNhbGxiYWNrcy4gSWYgbnVsbCwgZGVmYXVsdCByZXF1ZXN0CisgICAgICogICAgICAgICAgICBjYWxsYmFja3Mgb2JqZWN0IHdpbGwgYmUgdXNlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBxdWV1ZVNpbGVuY2UoZmluYWwgbG9uZyBkdXJhdGlvbkluTXMsIGZpbmFsIFV0dGVyYW5jZUlkIHV0dGVyYW5jZUlkLAorICAgICAgICAgICAgZmluYWwgUmVxdWVzdENhbGxiYWNrcyBjYWxsYmFja3MpIHsKKyAgICAgICAgcnVuQWN0aW9uKG5ldyBBY3Rpb24oQUNUSU9OX1FVRVVFX1NJTEVOQ0VfTkFNRSkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVRleHRUb1NwZWVjaFNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgUmVxdWVzdENhbGxiYWNrcyBjID0gbURlZmF1bHRSZXF1ZXN0Q2FsbGJhY2tzOworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjID0gY2FsbGJhY2tzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgYWRkQ2FsbGJhY2tTdGF0dXMgPSBhZGRDYWxsYmFjayh1dHRlcmFuY2VJZCwgYyk7CisgICAgICAgICAgICAgICAgaWYgKGFkZENhbGxiYWNrU3RhdHVzICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIGMub25TeW50aGVzaXNGYWlsdXJlKHV0dGVyYW5jZUlkLCBTdGF0dXMuRVJST1JfSU5WQUxJRF9SRVFVRVNUKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpbnQgcXVldWVSZXN1bHQgPSBzZXJ2aWNlLnBsYXlTaWxlbmNlKGdldENhbGxlcklkZW50aXR5KCksIGR1cmF0aW9uSW5NcywKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHRUb1NwZWVjaC5RVUVVRV9BREQsIHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCkpOworCisgICAgICAgICAgICAgICAgaWYgKHF1ZXVlUmVzdWx0ICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrQW5kRXJyKHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCksIHF1ZXVlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9RVUVVRV9BVURJT19OQU1FID0gInF1ZXVlQXVkaW8iOworCisgICAgLyoqCisgICAgICogUGxheXMgdGhlIGF1ZGlvIHJlc291cmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4KKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBhc3luY2hyb25vdXMsIGkuZS4gdGhlIG1ldGhvZCBqdXN0IGFkZHMgdGhlIHJlcXVlc3QgdG8gdGhlIHF1ZXVlIG9mIFRUUworICAgICAqIHJlcXVlc3RzIGFuZCB0aGVuIHJldHVybnMuIFRoZSBzeW50aGVzaXMgbWlnaHQgbm90IGhhdmUgZmluaXNoZWQgKG9yIGV2ZW4gc3RhcnRlZCEpIGF0IHRoZQorICAgICAqIHRpbWUgd2hlbiB0aGlzIG1ldGhvZCByZXR1cm5zLgorICAgICAqCisgICAgICogQHBhcmFtIGF1ZGlvVXJsIFRoZSBhdWRpbyByZXNvdXJjZSB0aGF0IHNob3VsZCBiZSBwbGF5ZWQKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQgVW5pcXVlIGlkZW50aWZpY2F0b3IgdXNlZCB0byB0cmFjayBzeW50aGVzaXMgcHJvZ3Jlc3MKKyAgICAgKiAgICAgICAgICAgIGluIHtAbGluayBSZXF1ZXN0Q2FsbGJhY2tzfS4KKyAgICAgKiBAcGFyYW0gY29uZmlnIFN5bnRoZXNpcyByZXF1ZXN0IGNvbmZpZ3VyYXRpb24uIENhbid0IGJlIG51bGwuIERvZXNuJ3QgaGF2ZSB0byBjb250YWluIGEKKyAgICAgKiAgICAgICAgICAgIHZvaWNlIChvbmx5IHN5c3RlbSBwYXJhbWV0ZXJzIGFyZSB1c2VkKS4KKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tzIFN5bnRoZXNpcyByZXF1ZXN0IGNhbGxiYWNrcy4gSWYgbnVsbCwgZGVmYXVsdCByZXF1ZXN0CisgICAgICogICAgICAgICAgICBjYWxsYmFja3Mgb2JqZWN0IHdpbGwgYmUgdXNlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBxdWV1ZUF1ZGlvKGZpbmFsIFVyaSBhdWRpb1VybCwgZmluYWwgVXR0ZXJhbmNlSWQgdXR0ZXJhbmNlSWQsCisgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0Q29uZmlnIGNvbmZpZywgZmluYWwgUmVxdWVzdENhbGxiYWNrcyBjYWxsYmFja3MpIHsKKyAgICAgICAgcnVuQWN0aW9uKG5ldyBBY3Rpb24oQUNUSU9OX1FVRVVFX0FVRElPX05BTUUpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKElUZXh0VG9TcGVlY2hTZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgICAgIFJlcXVlc3RDYWxsYmFja3MgYyA9IG1EZWZhdWx0UmVxdWVzdENhbGxiYWNrczsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgYyA9IGNhbGxiYWNrczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IGFkZENhbGxiYWNrU3RhdHVzID0gYWRkQ2FsbGJhY2sodXR0ZXJhbmNlSWQsIGMpOworICAgICAgICAgICAgICAgIGlmIChhZGRDYWxsYmFja1N0YXR1cyAhPSBTdGF0dXMuU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICBjLm9uU3ludGhlc2lzRmFpbHVyZSh1dHRlcmFuY2VJZCwgU3RhdHVzLkVSUk9SX0lOVkFMSURfUkVRVUVTVCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaW50IHF1ZXVlUmVzdWx0ID0gc2VydmljZS5wbGF5QXVkaW9WMihnZXRDYWxsZXJJZGVudGl0eSgpLCBhdWRpb1VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCksIGNvbmZpZy5nZXRWb2ljZVBhcmFtcygpKTsKKworICAgICAgICAgICAgICAgIGlmIChxdWV1ZVJlc3VsdCAhPSBTdGF0dXMuU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICByZW1vdmVDYWxsYmFja0FuZEVycih1dHRlcmFuY2VJZC50b1VuaXF1ZVN0cmluZygpLCBxdWV1ZVJlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaFNlcnZpY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoU2VydmljZS5qYXZhCmluZGV4IDU3NTg1NWMuLmQ3YzUxZmMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoU2VydmljZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoU2VydmljZS5qYXZhCkBAIC0zNCwyNiArMzQsMjcgQEAKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKLWltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLlNldDsKIAogCiAvKioKICAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIFRUUyBlbmdpbmUgaW1wbGVtZW50YXRpb25zLiBUaGUgZm9sbG93aW5nIG1ldGhvZHMKLSAqIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQuCi0gKgorICogbmVlZCB0byBiZSBpbXBsZW1lbnRlZCBmb3IgVjEgQVBJICh7QGxpbmsgVGV4dFRvU3BlZWNofSkgaW1wbGVtZW50YXRpb24uCiAgKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgI29uSXNMYW5ndWFnZUF2YWlsYWJsZX08L2xpPgotICogICA8bGk+e0BsaW5rICNvbkxvYWRMYW5ndWFnZX08L2xpPgotICogICA8bGk+e0BsaW5rICNvbkdldExhbmd1YWdlfTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgI29uU3ludGhlc2l6ZVRleHR9PC9saT4KLSAqICAgPGxpPntAbGluayAjb25TdG9wfTwvbGk+CisgKiA8bGk+e0BsaW5rICNvbklzTGFuZ3VhZ2VBdmFpbGFibGV9PC9saT4KKyAqIDxsaT57QGxpbmsgI29uTG9hZExhbmd1YWdlfTwvbGk+CisgKiA8bGk+e0BsaW5rICNvbkdldExhbmd1YWdlfTwvbGk+CisgKiA8bGk+e0BsaW5rICNvblN5bnRoZXNpemVUZXh0fTwvbGk+CisgKiA8bGk+e0BsaW5rICNvblN0b3B9PC9saT4KICAqIDwvdWw+Ci0gKgogICogVGhlIGZpcnN0IHRocmVlIGRlYWwgcHJpbWFyaWx5IHdpdGggbGFuZ3VhZ2UgbWFuYWdlbWVudCwgYW5kIGFyZSB1c2VkIHRvCiAgKiBxdWVyeSB0aGUgZW5naW5lIGZvciBpdCdzIHN1cHBvcnQgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UgYW5kIGluZGljYXRlIHRvIGl0CiAgKiB0aGF0IHJlcXVlc3RzIGluIGEgZ2l2ZW4gbGFuZ3VhZ2UgYXJlIGltbWluZW50LgpAQCAtNjEsMjIgKzYyLDQ0IEBACiAgKiB7QGxpbmsgI29uU3ludGhlc2l6ZVRleHR9IGlzIGNlbnRyYWwgdG8gdGhlIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi4gVGhlCiAgKiBpbXBsZW1lbnRhdGlvbiBzaG91bGQgc3ludGhlc2l6ZSB0ZXh0IGFzIHBlciB0aGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGFuZAogICogcmV0dXJuIHN5bnRoZXNpemVkIGRhdGEgdmlhIHRoZSBzdXBwbGllZCBjYWxsYmFjay4gVGhpcyBjbGFzcyBhbmQgaXRzIGhlbHBlcnMKLSAqIHdpbGwgdGhlbiBjb25zdW1lIHRoYXQgZGF0YSwgd2hpY2ggbWlnaHQgbWVhbiBxdWV1ZWluZyBpdCBmb3IgcGxheWJhY2sgb3Igd3JpdGluZwotICogaXQgdG8gYSBmaWxlIG9yIHNpbWlsYXIuIEFsbCBjYWxscyB0byB0aGlzIG1ldGhvZCB3aWxsIGJlIG9uIGEgc2luZ2xlCi0gKiB0aHJlYWQsIHdoaWNoIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIG1haW4gdGhyZWFkIG9mIHRoZSBzZXJ2aWNlLiBTeW50aGVzaXMKLSAqIG11c3QgYmUgc3luY2hyb25vdXMgd2hpY2ggbWVhbnMgdGhlIGVuZ2luZSBtdXN0IE5PVCBob2xkIG9uIHRoZSBjYWxsYmFjayBvciBjYWxsCi0gKiBhbnkgbWV0aG9kcyBvbiBpdCBhZnRlciB0aGUgbWV0aG9kIHJldHVybnMKKyAqIHdpbGwgdGhlbiBjb25zdW1lIHRoYXQgZGF0YSwgd2hpY2ggbWlnaHQgbWVhbiBxdWV1aW5nIGl0IGZvciBwbGF5YmFjayBvciB3cml0aW5nCisgKiBpdCB0byBhIGZpbGUgb3Igc2ltaWxhci4gQWxsIGNhbGxzIHRvIHRoaXMgbWV0aG9kIHdpbGwgYmUgb24gYSBzaW5nbGUgdGhyZWFkLAorICogd2hpY2ggd2lsbCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbWFpbiB0aHJlYWQgb2YgdGhlIHNlcnZpY2UuIFN5bnRoZXNpcyBtdXN0IGJlCisgKiBzeW5jaHJvbm91cyB3aGljaCBtZWFucyB0aGUgZW5naW5lIG11c3QgTk9UIGhvbGQgb24gdG8gdGhlIGNhbGxiYWNrIG9yIGNhbGwgYW55CisgKiBtZXRob2RzIG9uIGl0IGFmdGVyIHRoZSBtZXRob2QgcmV0dXJucy4KICAqCi0gKiB7QGxpbmsgI29uU3RvcH0gdGVsbHMgdGhlIGVuZ2luZSB0aGF0IGl0IHNob3VsZCBzdG9wIGFsbCBvbmdvaW5nIHN5bnRoZXNpcywgaWYKLSAqIGFueS4gQW55IHBlbmRpbmcgZGF0YSBmcm9tIHRoZSBjdXJyZW50IHN5bnRoZXNpcyB3aWxsIGJlIGRpc2NhcmRlZC4KKyAqIHtAbGluayAjb25TdG9wfSB0ZWxscyB0aGUgZW5naW5lIHRoYXQgaXQgc2hvdWxkIHN0b3AKKyAqIGFsbCBvbmdvaW5nIHN5bnRoZXNpcywgaWYgYW55LiBBbnkgcGVuZGluZyBkYXRhIGZyb20gdGhlIGN1cnJlbnQgc3ludGhlc2lzCisgKiB3aWxsIGJlIGRpc2NhcmRlZC4KICAqCisgKiB7QGxpbmsgI29uR2V0TGFuZ3VhZ2V9IGlzIG5vdCByZXF1aXJlZCBhcyBvZiBKRUxMWUJFQU5fTVIyIChBUEkgMTgpIGFuZCBsYXRlciwgaXQgaXMgb25seQorICogY2FsbGVkIG9uIGVhcmxpZXIgdmVyc2lvbnMgb2YgQW5kcm9pZC4KKyAqIDxwPgorICogSW4gb3JkZXIgdG8gZnVsbHkgc3VwcG9ydCB0aGUgVjIgQVBJICh7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50fSksCisgKiB0aGVzZSBtZXRob2RzIG11c3QgYmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rICNvblN5bnRoZXNpemVUZXh0VjJ9PC9saT4KKyAqIDxsaT57QGxpbmsgI2NoZWNrVm9pY2VzSW5mb308L2xpPgorICogPGxpPntAbGluayAjb25Wb2ljZXNJbmZvQ2hhbmdlfTwvbGk+CisgKiA8bGk+e0BsaW5rICNpbXBsZW1lbnRzVjJBUEl9PC9saT4KKyAqIDwvdWw+CisgKiBJbiBhZGRpdGlvbiB7QGxpbmsgI2ltcGxlbWVudHNWMkFQSX0gaGFzIHRvIHJldHVybiB0cnVlLgorICogPHA+CisgKiBJZiB0aGUgc2VydmljZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlc2UgbWV0aG9kcyBhbmQge0BsaW5rICNpbXBsZW1lbnRzVjJBUEl9IHJldHVybnMgZmFsc2UsCisgKiB0aGVuIHRoZSBWMiBBUEkgd2lsbCBiZSBwcm92aWRlZCBieSBjb252ZXJ0aW5nIFYyIHJlcXVlc3RzICh7QGxpbmsgI29uU3ludGhlc2l6ZVRleHRWMn0pCisgKiB0byBWMSByZXF1ZXN0cyAoe0BsaW5rICNvblN5bnRoZXNpemVUZXh0fSkuIE9uIHNlcnZpY2Ugc2V0dXAsIGFsbCBvZiB0aGUgYXZhaWxhYmxlIGRldmljZQorICogbG9jYWxlcyB3aWxsIGJlIGZlZCB0byB7QGxpbmsgI29uSXNMYW5ndWFnZUF2YWlsYWJsZX0gdG8gY2hlY2sgaWYgdGhleSBhcmUgc3VwcG9ydGVkLgorICogSWYgdGhleSBhcmUsIGVtYmVkZGVkIGFuZC9vciBuZXR3b3JrIHZvaWNlcyB3aWxsIGJlIGNyZWF0ZWQgZGVwZW5kaW5nIG9uIHRoZSByZXN1bHQgb2YKKyAqIHtAbGluayAjb25HZXRGZWF0dXJlc0Zvckxhbmd1YWdlfS4KKyAqIDxwPgorICogTm90ZSB0aGF0IGEgVjIgc2VydmljZSB3aWxsIHN0aWxsIHJlY2VpdmUgcmVxdWVzdHMgZnJvbSBWMSBjbGllbnRzIGFuZCBoYXMgdG8gaW1wbGVtZW50IGFsbAorICogb2YgdGhlIFYxIEFQSSBtZXRob2RzLgogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVGV4dFRvU3BlZWNoU2VydmljZSBleHRlbmRzIFNlcnZpY2UgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBEQkcgPSBmYWxzZTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlRleHRUb1NwZWVjaFNlcnZpY2UiOwogCi0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lOVEhfVEhSRUFEX05BTUUgPSAiU3ludGhUaHJlYWQiOwogCiAgICAgcHJpdmF0ZSBTeW50aEhhbmRsZXIgbVN5bnRoSGFuZGxlcjsKQEAgLTg5LDYgKzExMiwxMSBAQAogICAgIHByaXZhdGUgQ2FsbGJhY2tNYXAgbUNhbGxiYWNrczsKICAgICBwcml2YXRlIFN0cmluZyBtUGFja2FnZU5hbWU7CiAKKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtVm9pY2VzSW5mb0xvY2sgPSBuZXcgT2JqZWN0KCk7CisKKyAgICBwcml2YXRlIExpc3Q8Vm9pY2VJbmZvPiBtVm9pY2VzSW5mb0xpc3Q7CisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBWb2ljZUluZm8+IG1Wb2ljZXNJbmZvTG9va3VwOworCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25DcmVhdGUoKSB7CiAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIm9uQ3JlYXRlKCkiKTsKQEAgLTEwOCw2ICsxMzYsNyBAQAogICAgICAgICBtUGFja2FnZU5hbWUgPSBnZXRBcHBsaWNhdGlvbkluZm8oKS5wYWNrYWdlTmFtZTsKIAogICAgICAgICBTdHJpbmdbXSBkZWZhdWx0TG9jYWxlID0gZ2V0U2V0dGluZ3NMb2NhbGUoKTsKKwogICAgICAgICAvLyBMb2FkIGRlZmF1bHQgbGFuZ3VhZ2UKICAgICAgICAgb25Mb2FkTGFuZ3VhZ2UoZGVmYXVsdExvY2FsZVswXSwgZGVmYXVsdExvY2FsZVsxXSwgZGVmYXVsdExvY2FsZVsyXSk7CiAgICAgfQpAQCAtMTQ4LDYgKzE3Nyw5IEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbGFuZ3VhZ2UsIGNvdW50cnkgYW5kIHZhcmlhbnQgY3VycmVudGx5IGJlaW5nIHVzZWQgYnkgdGhlIFRUUyBlbmdpbmUuCiAgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uIEFuZHJvaWQgNC4yIGFuZCBiZWZvcmUgKEFQSSA8PSAxNykuIEluIGxhdGVyIHZlcnNpb25zCisgICAgICogdGhpcyBtZXRob2QgaXMgbm90IGNhbGxlZCBieSB0aGUgQW5kcm9pZCBUVFMgZnJhbWV3b3JrLgorICAgICAqCiAgICAgICogQ2FuIGJlIGNhbGxlZCBvbiBtdWx0aXBsZSB0aHJlYWRzLgogICAgICAqCiAgICAgICogQHJldHVybiBBIDMtZWxlbWVudCBhcnJheSwgY29udGFpbmluZyBsYW5ndWFnZSAoSVNPIDMtbGV0dGVyIGNvZGUpLApAQCAtMTkxLDIxICsyMjMsMTU5IEBACiAgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgb25TdG9wKCk7CiAKICAgICAvKioKLSAgICAgKiBUZWxscyB0aGUgc2VydmljZSB0byBzeW50aGVzaXplIHNwZWVjaCBmcm9tIHRoZSBnaXZlbiB0ZXh0LiBUaGlzIG1ldGhvZCBzaG91bGQKLSAgICAgKiBibG9jayB1bnRpbCB0aGUgc3ludGhlc2lzIGlzIGZpbmlzaGVkLgotICAgICAqCi0gICAgICogQ2FsbGVkIG9uIHRoZSBzeW50aGVzaXMgdGhyZWFkLgorICAgICAqIFRlbGxzIHRoZSBzZXJ2aWNlIHRvIHN5bnRoZXNpemUgc3BlZWNoIGZyb20gdGhlIGdpdmVuIHRleHQuIFRoaXMgbWV0aG9kCisgICAgICogc2hvdWxkIGJsb2NrIHVudGlsIHRoZSBzeW50aGVzaXMgaXMgZmluaXNoZWQuIFVzZWQgZm9yIHJlcXVlc3RzIGZyb20gVjEKKyAgICAgKiBjbGllbnRzICh7QGxpbmsgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaH0pLiBDYWxsZWQgb24gdGhlIHN5bnRoZXNpcworICAgICAqIHRocmVhZC4KICAgICAgKgogICAgICAqIEBwYXJhbSByZXF1ZXN0IFRoZSBzeW50aGVzaXMgcmVxdWVzdC4KLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRoZSB0aGUgZW5naW5lIG11c3QgdXNlIHRvIG1ha2UgZGF0YSBhdmFpbGFibGUgZm9yCi0gICAgICogICAgICAgICBwbGF5YmFjayBvciBmb3Igd3JpdGluZyB0byBhIGZpbGUuCisgICAgICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0aGF0IHRoZSBlbmdpbmUgbXVzdCB1c2UgdG8gbWFrZSBkYXRhCisgICAgICogICAgICAgICAgICBhdmFpbGFibGUgZm9yIHBsYXliYWNrIG9yIGZvciB3cml0aW5nIHRvIGEgZmlsZS4KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBvblN5bnRoZXNpemVUZXh0KFN5bnRoZXNpc1JlcXVlc3QgcmVxdWVzdCwKICAgICAgICAgICAgIFN5bnRoZXNpc0NhbGxiYWNrIGNhbGxiYWNrKTsKIAogICAgIC8qKgorICAgICAqIENoZWNrIHRoZSBhdmFpbGFibGUgdm9pY2VzIGRhdGEgYW5kIHJldHVybiBhbiBpbW11dGFibGUgbGlzdCBvZiB0aGUgYXZhaWxhYmxlIHZvaWNlcy4KKyAgICAgKiBUaGUgb3V0cHV0IG9mIHRoaXMgbWV0aG9kIHdpbGwgYmUgcGFzc2VkIHRvIGNsaWVudHMgdG8gYWxsb3cgdGhlbSB0byBjb25maWd1cmUgc3ludGhlc2lzCisgICAgICogcmVxdWVzdHMuCisgICAgICoKKyAgICAgKiBDYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlIHRocmVhZHMuCisgICAgICoKKyAgICAgKiBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIHdpbGwgYmUgc2F2ZWQgYW5kIHNlcnZlZCB0byBhbGwgVFRTIGNsaWVudHMuIElmIGEgVFRTIHNlcnZpY2Ugd2FudHMKKyAgICAgKiB0byB1cGRhdGUgdGhlIHNldCBvZiBhdmFpbGFibGUgdm9pY2VzLCBpdCBzaG91bGQgY2FsbCB0aGUge0BsaW5rICNmb3JjZVZvaWNlc0luZm9DaGVjaygpfQorICAgICAqIG1ldGhvZC4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgTGlzdDxWb2ljZUluZm8+IGNoZWNrVm9pY2VzSW5mbygpIHsKKyAgICAgICAgaWYgKGltcGxlbWVudHNWMkFQSSgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJGb3IgcHJvcGVyIFYyIEFQSSBpbXBsZW1lbnRhdGlvbiB0aGlzIG1ldGhvZCBoYXMgdG8iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgYmUgaW1wbGVtZW50ZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFYyIHRvIFYxIGludGVyZmFjZSBhZGFwdGVyLiBUaGlzIGFsbG93cyB1c2luZyBWMiBjbGllbnQgaW50ZXJmYWNlIG9uIFYxLW9ubHkgc2VydmljZXMuCisgICAgICAgIEJ1bmRsZSBkZWZhdWx0UGFyYW1zID0gbmV3IEJ1bmRsZSgpOworICAgICAgICBkZWZhdWx0UGFyYW1zLnB1dEZsb2F0KFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMuU1BFRUNIX1BJVENILCAxLjBmKTsKKyAgICAgICAgZGVmYXVsdFBhcmFtcy5wdXRGbG9hdChUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLlNQRUVDSF9TUEVFRCwgLTEuMGYpOworCisgICAgICAgIC8vIEVudW1lcmF0ZSBhbGwgbG9jYWxlcyBhbmQgY2hlY2sgaWYgdGhleSBhcmUgYXZhaWxhYmxlCisgICAgICAgIEFycmF5TGlzdDxWb2ljZUluZm8+IHZvaWNlc0luZm8gPSBuZXcgQXJyYXlMaXN0PFZvaWNlSW5mbz4oKTsKKyAgICAgICAgaW50IGlkID0gMDsKKyAgICAgICAgZm9yIChMb2NhbGUgbG9jYWxlIDogTG9jYWxlLmdldEF2YWlsYWJsZUxvY2FsZXMoKSkgeworICAgICAgICAgICAgaW50IGV4cGVjdGVkU3RhdHVzID0gVGV4dFRvU3BlZWNoLkxBTkdfQ09VTlRSWV9WQVJfQVZBSUxBQkxFOworICAgICAgICAgICAgaWYgKGxvY2FsZS5nZXRWYXJpYW50KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxvY2FsZS5nZXRDb3VudHJ5KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkU3RhdHVzID0gVGV4dFRvU3BlZWNoLkxBTkdfQVZBSUxBQkxFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkU3RhdHVzID0gVGV4dFRvU3BlZWNoLkxBTkdfQ09VTlRSWV9BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbnQgbG9jYWxlU3RhdHVzID0gb25Jc0xhbmd1YWdlQXZhaWxhYmxlKGxvY2FsZS5nZXRJU08zTGFuZ3VhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRJU08zQ291bnRyeSgpLCBsb2NhbGUuZ2V0VmFyaWFudCgpKTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxlU3RhdHVzICE9IGV4cGVjdGVkU3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgLy8gSWdub3JlIGxvY2FsZSB3aXRob3V0IGlzbyAzIGNvZGVzCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNldDxTdHJpbmc+IGZlYXR1cmVzID0gb25HZXRGZWF0dXJlc0Zvckxhbmd1YWdlKGxvY2FsZS5nZXRJU08zTGFuZ3VhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRJU08zQ291bnRyeSgpLCBsb2NhbGUuZ2V0VmFyaWFudCgpKTsKKworICAgICAgICAgICAgVm9pY2VJbmZvLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBWb2ljZUluZm8uQnVpbGRlcigpOworICAgICAgICAgICAgYnVpbGRlci5zZXRMYXRlbmN5KFZvaWNlSW5mby5MQVRFTkNZX05PUk1BTCk7CisgICAgICAgICAgICBidWlsZGVyLnNldFF1YWxpdHkoVm9pY2VJbmZvLlFVQUxJVFlfTk9STUFMKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0TG9jYWxlKGxvY2FsZSk7CisgICAgICAgICAgICBidWlsZGVyLnNldFBhcmFtc1dpdGhEZWZhdWx0cyhkZWZhdWx0UGFyYW1zKTsKKworICAgICAgICAgICAgaWYgKGZlYXR1cmVzID09IG51bGwgfHwgZmVhdHVyZXMuY29udGFpbnMoCisgICAgICAgICAgICAgICAgICAgIFRleHRUb1NwZWVjaC5FbmdpbmUuS0VZX0ZFQVRVUkVfRU1CRURERURfU1lOVEhFU0lTKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0TmFtZShsb2NhbGUudG9TdHJpbmcoKSArICItZW1iZWRkZWQiKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLnNldFJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24oZmFsc2UpOworICAgICAgICAgICAgICAgIHZvaWNlc0luZm8uYWRkKGJ1aWxkZXIuYnVpbGQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmZWF0dXJlcyAhPSBudWxsICYmIGZlYXR1cmVzLmNvbnRhaW5zKAorICAgICAgICAgICAgICAgICAgICBUZXh0VG9TcGVlY2guRW5naW5lLktFWV9GRUFUVVJFX05FVFdPUktfU1lOVEhFU0lTKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0TmFtZShsb2NhbGUudG9TdHJpbmcoKSArICItbmV0d29yayIpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0UmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbih0cnVlKTsKKyAgICAgICAgICAgICAgICB2b2ljZXNJbmZvLmFkZChidWlsZGVyLmJ1aWxkKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHZvaWNlc0luZm87CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVsbHMgdGhlIHN5bnRoZXNpcyB0aHJlYWQgdGhhdCBpdCBzaG91bGQgcmVsb2FkIHZvaWNlIGRhdGEuCisgICAgICogVGhlcmUncyBhIGhpZ2ggcHJvYmFiaWxpdHkgdGhhdCB0aGUgdW5kZXJseWluZyBzZXQgb2YgYXZhaWxhYmxlIHZvaWNlIGRhdGEgaGFzIGNoYW5nZWQuCisgICAgICogQ2FsbGVkIG9ubHkgb24gdGhlIHN5bnRoZXNpcyB0aHJlYWQuCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgb25Wb2ljZXNJbmZvQ2hhbmdlKCkgeworCisgICAgfQorCisgICAgLyoqCisgICAgICogVGVsbHMgdGhlIHNlcnZpY2UgdG8gc3ludGhlc2l6ZSBzcGVlY2ggZnJvbSB0aGUgZ2l2ZW4gdGV4dC4gVGhpcyBtZXRob2QKKyAgICAgKiBzaG91bGQgYmxvY2sgdW50aWwgdGhlIHN5bnRoZXNpcyBpcyBmaW5pc2hlZC4gVXNlZCBmb3IgcmVxdWVzdHMgZnJvbSBWMgorICAgICAqIGNsaWVudCB7QGxpbmsgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudH0uIENhbGxlZCBvbiB0aGUKKyAgICAgKiBzeW50aGVzaXMgdGhyZWFkLgorICAgICAqCisgICAgICogQHBhcmFtIHJlcXVlc3QgVGhlIHN5bnRoZXNpcyByZXF1ZXN0LgorICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdGhlIHRoZSBlbmdpbmUgbXVzdCB1c2UgdG8gbWFrZSBkYXRhCisgICAgICogICAgICAgICAgICBhdmFpbGFibGUgZm9yIHBsYXliYWNrIG9yIGZvciB3cml0aW5nIHRvIGEgZmlsZS4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBvblN5bnRoZXNpemVUZXh0VjIoU3ludGhlc2lzUmVxdWVzdFYyIHJlcXVlc3QsCisgICAgICAgICAgICBWb2ljZUluZm8gc2VsZWN0ZWRWb2ljZSwKKyAgICAgICAgICAgIFN5bnRoZXNpc0NhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgICAgIGlmIChpbXBsZW1lbnRzVjJBUEkoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiRm9yIHByb3BlciBWMiBBUEkgaW1wbGVtZW50YXRpb24gdGhpcyBtZXRob2QgaGFzIHRvIiArCisgICAgICAgICAgICAgICAgICAgICIgIGJlIGltcGxlbWVudGVkIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb252ZXJ0IHRvIFYxIHBhcmFtcworICAgICAgICBpbnQgc3BlZWNoUmF0ZSA9IChpbnQpIChyZXF1ZXN0LmdldFZvaWNlUGFyYW1zKCkuZ2V0RmxvYXQoCisgICAgICAgICAgICAgICAgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcy5TUEVFQ0hfU1BFRUQsIDEuMGYpICogMTAwKTsKKyAgICAgICAgaW50IHNwZWVjaFBpdGNoID0gKGludCkgKHJlcXVlc3QuZ2V0Vm9pY2VQYXJhbXMoKS5nZXRGbG9hdCgKKyAgICAgICAgICAgICAgICBUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLlNQRUVDSF9QSVRDSCwgMS4wZikgKiAxMDApOworCisgICAgICAgIC8vIFByb3ZpZGUgYWRhcHRlciB0byBWMSBBUEkKKyAgICAgICAgQnVuZGxlIHBhcmFtcyA9IG5ldyBCdW5kbGUoKTsKKyAgICAgICAgcGFyYW1zLnB1dFN0cmluZyhUZXh0VG9TcGVlY2guRW5naW5lLktFWV9QQVJBTV9VVFRFUkFOQ0VfSUQsIHJlcXVlc3QuZ2V0VXR0ZXJhbmNlSWQoKSk7CisgICAgICAgIHBhcmFtcy5wdXRJbnQoVGV4dFRvU3BlZWNoLkVuZ2luZS5LRVlfUEFSQU1fUElUQ0gsIHNwZWVjaFBpdGNoKTsKKyAgICAgICAgcGFyYW1zLnB1dEludChUZXh0VG9TcGVlY2guRW5naW5lLktFWV9QQVJBTV9SQVRFLCBzcGVlY2hSYXRlKTsKKyAgICAgICAgaWYgKHNlbGVjdGVkVm9pY2UuZ2V0UmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbigpKSB7CisgICAgICAgICAgICBwYXJhbXMucHV0U3RyaW5nKFRleHRUb1NwZWVjaC5FbmdpbmUuS0VZX0ZFQVRVUkVfTkVUV09SS19TWU5USEVTSVMsICJ0cnVlIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXJhbXMucHV0U3RyaW5nKFRleHRUb1NwZWVjaC5FbmdpbmUuS0VZX0ZFQVRVUkVfRU1CRURERURfU1lOVEhFU0lTLCAidHJ1ZSIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQnVpbGQgVjEgcmVxdWVzdAorICAgICAgICBTeW50aGVzaXNSZXF1ZXN0IHJlcXVlc3RWMSA9IG5ldyBTeW50aGVzaXNSZXF1ZXN0KHJlcXVlc3QuZ2V0VGV4dCgpLCBwYXJhbXMpOworICAgICAgICBMb2NhbGUgbG9jYWxlID0gc2VsZWN0ZWRWb2ljZS5nZXRMb2NhbGUoKTsKKyAgICAgICAgcmVxdWVzdFYxLnNldExhbmd1YWdlKGxvY2FsZS5nZXRJU08zTGFuZ3VhZ2UoKSwgbG9jYWxlLmdldElTTzNDb3VudHJ5KCksCisgICAgICAgICAgICAgICAgbG9jYWxlLmdldFZhcmlhbnQoKSk7CisgICAgICAgIHJlcXVlc3RWMS5zZXRTcGVlY2hSYXRlKHNwZWVjaFJhdGUpOworICAgICAgICByZXF1ZXN0VjEuc2V0UGl0Y2goc3BlZWNoUGl0Y2gpOworCisgICAgICAgIC8vIFN5bnRoZXNpemUgdXNpbmcgVjEgaW50ZXJmYWNlCisgICAgICAgIG9uU3ludGhlc2l6ZVRleHQocmVxdWVzdFYxLCBjYWxsYmFjayk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSWYgdHJ1ZSwgdGhpcyBzZXJ2aWNlIGltcGxlbWVudHMgcHJvcGVyIFYyIFRUUyBBUEkgc2VydmljZS4gSWYgaXQncyBmYWxzZSwKKyAgICAgKiBWMiBBUEkgd2lsbCBiZSBwcm92aWRlZCB0aHJvdWdoIGFkYXB0ZXIuCisgICAgICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gaW1wbGVtZW50c1YyQVBJKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCiAgICAgICogUXVlcmllcyB0aGUgc2VydmljZSBmb3IgYSBzZXQgb2YgZmVhdHVyZXMgc3VwcG9ydGVkIGZvciBhIGdpdmVuIGxhbmd1YWdlLgogICAgICAqCisgICAgICogQ2FuIGJlIGNhbGxlZCBvbiBtdWx0aXBsZSB0aHJlYWRzLgorICAgICAqCiAgICAgICogQHBhcmFtIGxhbmcgSVNPLTMgbGFuZ3VhZ2UgY29kZS4KICAgICAgKiBAcGFyYW0gY291bnRyeSBJU08tMyBjb3VudHJ5IGNvZGUuIE1heSBiZSBlbXB0eSBvciBudWxsLgogICAgICAqIEBwYXJhbSB2YXJpYW50IExhbmd1YWdlIHZhcmlhbnQuIE1heSBiZSBlbXB0eSBvciBudWxsLgpAQCAtMjE1LDYgKzM4NSw2OSBAQAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKKyAgICBwcml2YXRlIExpc3Q8Vm9pY2VJbmZvPiBnZXRWb2ljZXNJbmZvKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Wb2ljZXNJbmZvTG9jaykgeworICAgICAgICAgICAgaWYgKG1Wb2ljZXNJbmZvTGlzdCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gR2V0IHZvaWNlcy4gRGVmZW5zaXZlIGNvcHkgdG8gbWFrZSBzdXJlIFRUUyBlbmdpbmUgd29uJ3QgYWx0ZXIgdGhlIGxpc3QuCisgICAgICAgICAgICAgICAgbVZvaWNlc0luZm9MaXN0ID0gbmV3IEFycmF5TGlzdDxWb2ljZUluZm8+KGNoZWNrVm9pY2VzSW5mbygpKTsKKyAgICAgICAgICAgICAgICAvLyBCdWlsZCBsb29rdXAgbWFwCisgICAgICAgICAgICAgICAgbVZvaWNlc0luZm9Mb29rdXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFZvaWNlSW5mbz4oKGludCkgKAorICAgICAgICAgICAgICAgICAgICAgICAgbVZvaWNlc0luZm9MaXN0LnNpemUoKSoxLjVmKSk7CisgICAgICAgICAgICAgICAgZm9yIChWb2ljZUluZm8gdm9pY2VJbmZvIDogbVZvaWNlc0luZm9MaXN0KSB7CisgICAgICAgICAgICAgICAgICAgIFZvaWNlSW5mbyBwcmV2ID0gbVZvaWNlc0luZm9Mb29rdXAucHV0KHZvaWNlSW5mby5nZXROYW1lKCksIHZvaWNlSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkR1cGxpY2F0ZSBuYW1lICgiICsgdm9pY2VJbmZvLmdldE5hbWUoKSArICIpIG9mIHRoZSB2b2ljZSAiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtVm9pY2VzSW5mb0xpc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgVm9pY2VJbmZvIGdldFZvaWNlc0luZm9XaXRoTmFtZShTdHJpbmcgbmFtZSkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Wb2ljZXNJbmZvTG9jaykgeworICAgICAgICAgICAgaWYgKG1Wb2ljZXNJbmZvTG9va3VwICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVZvaWNlc0luZm9Mb29rdXAuZ2V0KG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZvcmNlIFRUUyBzZXJ2aWNlIHRvIHJlZXZhbHVhdGUgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLiBXaWxsIHJlc3VsdCBpbgorICAgICAqIGEgY2FsbCB0byB7QGxpbmsgI2NoZWNrVm9pY2VzSW5mbygpfSBvbiB0aGUgc2FtZSB0aHJlYWQsIHtAbGluayAjb25Wb2ljZXNJbmZvQ2hhbmdlfQorICAgICAqIG9uIHRoZSBzeW50aGVzaXplciB0aHJlYWQgYW5kIGNhbGxiYWNrIHRvCisgICAgICoge0BsaW5rIFRleHRUb1NwZWVjaENsaWVudC5Db25uZWN0aW9uQ2FsbGJhY2tzI29uRW5naW5lU3RhdHVzQ2hhbmdlfSBvZiBhbGwgY29ubmVjdGVkCisgICAgICogVFRTIGNsaWVudHMuCisgICAgICoKKyAgICAgKiBVc2UgdGhpcyBtZXRob2Qgb25seSBpZiB5b3Uga25vdyB0aGF0IHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGNoYW5nZWQuCisgICAgICoKKyAgICAgKiBDYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlIHRocmVhZHMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yY2VWb2ljZXNJbmZvQ2hlY2soKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVZvaWNlc0luZm9Mb2NrKSB7CisgICAgICAgICAgICBMaXN0PFZvaWNlSW5mbz4gb2xkID0gbVZvaWNlc0luZm9MaXN0OworCisgICAgICAgICAgICBtVm9pY2VzSW5mb0xpc3QgPSBudWxsOyAvLyBGb3JjZSByZWNyZWF0aW9uIG9mIHZvaWNlcyBpbmZvIGxpc3QKKyAgICAgICAgICAgIGdldFZvaWNlc0luZm8oKTsKKworICAgICAgICAgICAgaWYgKG1Wb2ljZXNJbmZvTGlzdCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhpcyBtZXRob2QgYXBwbGllcyBvbmx5IHRvIHNlcnZpY2VzICIgKworICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRpbmcgVjIgVFRTIEFQSS4gVGhpcyBzZXJ2aWNlcyBkb2Vzbid0IHN1cHBvcnQgVjIgVFRTIEFQSS4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG9sZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gRmx1c2ggYWxsIGV4aXN0aW5nIGl0ZW1zLCBhbmQgaW5mb3JtIHN5bnRoZXNpcyB0aHJlYWQgYWJvdXQgdGhlIGNoYW5nZS4KKyAgICAgICAgICAgICAgICBtU3ludGhIYW5kbGVyLmVucXVldWVTcGVlY2hJdGVtKFRleHRUb1NwZWVjaC5RVUVVRV9GTFVTSCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWb2ljZXNJbmZvQ2hhbmdlSXRlbSgpKTsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgaXRlbXMgdGhhdCBtYXkgYmUgYWRkZWQgdG8gcXVldWUgYWZ0ZXIgU3ludGhlc2l6ZXJSZXN0YXJ0SXRlbQorICAgICAgICAgICAgICAgIC8vIGJ1dCBiZWZvcmUgY2xpZW50IHJlY29ubmVjdGlvbgorICAgICAgICAgICAgICAgIC8vIERpc2Nvbm5lY3QgYWxsIG9mIHRoZW0KKyAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLmRpc3BhdGNoVm9pY2VzSW5mb0NoYW5nZShtVm9pY2VzSW5mb0xpc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgcHJpdmF0ZSBpbnQgZ2V0RGVmYXVsdFNwZWVjaFJhdGUoKSB7CiAgICAgICAgIHJldHVybiBnZXRTZWN1cmVTZXR0aW5nSW50KFNldHRpbmdzLlNlY3VyZS5UVFNfREVGQVVMVF9SQVRFLCBFbmdpbmUuREVGQVVMVF9SQVRFKTsKICAgICB9CkBAIC0zMTcsNyArNTUwLDggQEAKIAogICAgICAgICAgICAgaWYgKCFzcGVlY2hJdGVtLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgICAgIGlmICh1dHRlcmVuY2VQcm9ncmVzcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHV0dGVyZW5jZVByb2dyZXNzLmRpc3BhdGNoT25FcnJvcigpOworICAgICAgICAgICAgICAgICAgICB1dHRlcmVuY2VQcm9ncmVzcy5kaXNwYXRjaE9uRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5FUlJPUl9JTlZBTElEX1JFUVVFU1QpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQpAQCAtMzQyLDEyICs1NzYsMTMgQEAKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBzdHJpbmcgaXMgaW50ZXJuZWQsIHNvIHRoZSA9PSBjb21wYXJpc29uIHdvcmtzLgogICAgICAgICAgICAgbXNnLm9iaiA9IHNwZWVjaEl0ZW0uZ2V0Q2FsbGVySWRlbnRpdHkoKTsKKwogICAgICAgICAgICAgaWYgKHNlbmRNZXNzYWdlKG1zZykpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLlNVQ0NFU1M7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIExvZy53KFRBRywgIlN5bnRoVGhyZWFkIGhhcyBxdWl0Iik7CiAgICAgICAgICAgICAgICAgaWYgKHV0dGVyZW5jZVByb2dyZXNzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdXR0ZXJlbmNlUHJvZ3Jlc3MuZGlzcGF0Y2hPbkVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIHV0dGVyZW5jZVByb2dyZXNzLmRpc3BhdGNoT25FcnJvcihUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLkVSUk9SX1NFUlZJQ0UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQpAQCAtMzk5LDkgKzYzNCwxMSBAQAogICAgIH0KIAogICAgIGludGVyZmFjZSBVdHRlcmFuY2VQcm9ncmVzc0Rpc3BhdGNoZXIgewotICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRG9uZSgpOworICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRmFsbGJhY2soKTsKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPblN0b3AoKTsKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPblN1Y2Nlc3MoKTsKICAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPblN0YXJ0KCk7Ci0gICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoT25FcnJvcigpOworICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRXJyb3IoaW50IGVycm9yQ29kZSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MDksMTUgKzY0NiwxMyBAQAogICAgICAqLwogICAgIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgU3BlZWNoSXRlbSB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1DYWxsZXJJZGVudGl0eTsKLSAgICAgICAgcHJvdGVjdGVkIGZpbmFsIEJ1bmRsZSBtUGFyYW1zOwogICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtQ2FsbGVyVWlkOwogICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtQ2FsbGVyUGlkOwogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbVN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1TdG9wcGVkID0gZmFsc2U7CiAKLSAgICAgICAgcHVibGljIFNwZWVjaEl0ZW0oT2JqZWN0IGNhbGxlciwgaW50IGNhbGxlclVpZCwgaW50IGNhbGxlclBpZCwgQnVuZGxlIHBhcmFtcykgeworICAgICAgICBwdWJsaWMgU3BlZWNoSXRlbShPYmplY3QgY2FsbGVyLCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkKSB7CiAgICAgICAgICAgICBtQ2FsbGVySWRlbnRpdHkgPSBjYWxsZXI7Ci0gICAgICAgICAgICBtUGFyYW1zID0gcGFyYW1zOwogICAgICAgICAgICAgbUNhbGxlclVpZCA9IGNhbGxlclVpZDsKICAgICAgICAgICAgIG1DYWxsZXJQaWQgPSBjYWxsZXJQaWQ7CiAgICAgICAgIH0KQEAgLTQ0NiwyMCArNjgxLDE4IEBACiAgICAgICAgICAqIE11c3Qgbm90IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4KICAgICAgICAgICoKICAgICAgICAgICogT25seSBjYWxsZWQgb24gdGhlIHN5bnRoZXNpcyB0aHJlYWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4ge0BsaW5rIFRleHRUb1NwZWVjaCNTVUNDRVNTfSBvciB7QGxpbmsgVGV4dFRvU3BlZWNoI0VSUk9SfS4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgcGxheSgpIHsKKyAgICAgICAgcHVibGljIHZvaWQgcGxheSgpIHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgICAgIGlmIChtU3RhcnRlZCkgewogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJwbGF5KCkgY2FsbGVkIHR3aWNlIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1TdGFydGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBwbGF5SW1wbCgpOworICAgICAgICAgICAgcGxheUltcGwoKTsKICAgICAgICAgfQogCi0gICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpbnQgcGxheUltcGwoKTsKKyAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgcGxheUltcGwoKTsKIAogICAgICAgICAvKioKICAgICAgICAgICogU3RvcHMgdGhlIHNwZWVjaCBpdGVtLgpAQCAtNDg1LDIwICs3MTgsMzcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBBbiBpdGVtIGluIHRoZSBzeW50aCB0aHJlYWQgcXVldWUgdGhhdCBwcm9jZXNzIHV0dGVyYW5jZS4KKyAgICAgKiBBbiBpdGVtIGluIHRoZSBzeW50aCB0aHJlYWQgcXVldWUgdGhhdCBwcm9jZXNzIHV0dGVyYW5jZSAoYW5kIGNhbGwgYmFjayB0byBjbGllbnQgYWJvdXQKKyAgICAgKiBwcm9ncmVzcykuCiAgICAgICovCiAgICAgcHJpdmF0ZSBhYnN0cmFjdCBjbGFzcyBVdHRlcmFuY2VTcGVlY2hJdGVtIGV4dGVuZHMgU3BlZWNoSXRlbQogICAgICAgICBpbXBsZW1lbnRzIFV0dGVyYW5jZVByb2dyZXNzRGlzcGF0Y2hlciAgewogCi0gICAgICAgIHB1YmxpYyBVdHRlcmFuY2VTcGVlY2hJdGVtKE9iamVjdCBjYWxsZXIsIGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQsIEJ1bmRsZSBwYXJhbXMpIHsKLSAgICAgICAgICAgIHN1cGVyKGNhbGxlciwgY2FsbGVyVWlkLCBjYWxsZXJQaWQsIHBhcmFtcyk7CisgICAgICAgIHB1YmxpYyBVdHRlcmFuY2VTcGVlY2hJdGVtKE9iamVjdCBjYWxsZXIsIGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNhbGxlciwgY2FsbGVyVWlkLCBjYWxsZXJQaWQpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoT25Eb25lKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uU3VjY2VzcygpIHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB1dHRlcmFuY2VJZCA9IGdldFV0dGVyYW5jZUlkKCk7CiAgICAgICAgICAgICBpZiAodXR0ZXJhbmNlSWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1DYWxsYmFja3MuZGlzcGF0Y2hPbkRvbmUoZ2V0Q2FsbGVySWRlbnRpdHkoKSwgdXR0ZXJhbmNlSWQpOworICAgICAgICAgICAgICAgIG1DYWxsYmFja3MuZGlzcGF0Y2hPblN1Y2Nlc3MoZ2V0Q2FsbGVySWRlbnRpdHkoKSwgdXR0ZXJhbmNlSWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoT25TdG9wKCkgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHV0dGVyYW5jZUlkID0gZ2V0VXR0ZXJhbmNlSWQoKTsKKyAgICAgICAgICAgIGlmICh1dHRlcmFuY2VJZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5kaXNwYXRjaE9uU3RvcChnZXRDYWxsZXJJZGVudGl0eSgpLCB1dHRlcmFuY2VJZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPbkZhbGxiYWNrKCkgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHV0dGVyYW5jZUlkID0gZ2V0VXR0ZXJhbmNlSWQoKTsKKyAgICAgICAgICAgIGlmICh1dHRlcmFuY2VJZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5kaXNwYXRjaE9uRmFsbGJhY2soZ2V0Q2FsbGVySWRlbnRpdHkoKSwgdXR0ZXJhbmNlSWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTUxMSw0NCArNzYxLDI2MCBAQAogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoT25FcnJvcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPbkVycm9yKGludCBlcnJvckNvZGUpIHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB1dHRlcmFuY2VJZCA9IGdldFV0dGVyYW5jZUlkKCk7CiAgICAgICAgICAgICBpZiAodXR0ZXJhbmNlSWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1DYWxsYmFja3MuZGlzcGF0Y2hPbkVycm9yKGdldENhbGxlcklkZW50aXR5KCksIHV0dGVyYW5jZUlkKTsKKyAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLmRpc3BhdGNoT25FcnJvcihnZXRDYWxsZXJJZGVudGl0eSgpLCB1dHRlcmFuY2VJZCwgZXJyb3JDb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0U3RyZWFtVHlwZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbShFbmdpbmUuS0VZX1BBUkFNX1NUUkVBTSwgRW5naW5lLkRFRkFVTFRfU1RSRUFNKTsKKyAgICAgICAgYWJzdHJhY3QgcHVibGljIFN0cmluZyBnZXRVdHRlcmFuY2VJZCgpOworCisgICAgICAgIFN0cmluZyBnZXRTdHJpbmdQYXJhbShCdW5kbGUgcGFyYW1zLCBTdHJpbmcga2V5LCBTdHJpbmcgZGVmYXVsdFZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyYW1zID09IG51bGwgPyBkZWZhdWx0VmFsdWUgOiBwYXJhbXMuZ2V0U3RyaW5nKGtleSwgZGVmYXVsdFZhbHVlKTsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBmbG9hdCBnZXRWb2x1bWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbShFbmdpbmUuS0VZX1BBUkFNX1ZPTFVNRSwgRW5naW5lLkRFRkFVTFRfVk9MVU1FKTsKKyAgICAgICAgaW50IGdldEludFBhcmFtKEJ1bmRsZSBwYXJhbXMsIFN0cmluZyBrZXksIGludCBkZWZhdWx0VmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJhbXMgPT0gbnVsbCA/IGRlZmF1bHRWYWx1ZSA6IHBhcmFtcy5nZXRJbnQoa2V5LCBkZWZhdWx0VmFsdWUpOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIGZsb2F0IGdldFBhbigpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtKEVuZ2luZS5LRVlfUEFSQU1fUEFOLCBFbmdpbmUuREVGQVVMVF9QQU4pOworICAgICAgICBmbG9hdCBnZXRGbG9hdFBhcmFtKEJ1bmRsZSBwYXJhbXMsIFN0cmluZyBrZXksIGZsb2F0IGRlZmF1bHRWYWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcmFtcyA9PSBudWxsID8gZGVmYXVsdFZhbHVlIDogcGFyYW1zLmdldEZsb2F0KGtleSwgZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFV0dGVyYW5jZVNwZWVjaEl0ZW0gZm9yIFYxIEFQSSBzcGVlY2ggaXRlbXMuIFYxIEFQSSBzcGVlY2ggaXRlbXMga2VlcAorICAgICAqIHN5bnRoZXNpcyBwYXJhbWV0ZXJzIGluIGEgc2luZ2xlIEJ1bmRsZSBwYXNzZWQgYXMgcGFyYW1ldGVyLiBUaGlzIGNsYXNzCisgICAgICogYWxsb3cgc3ViY2xhc3NlcyB0byBhY2Nlc3MgdGhlbSBjb252ZW5pZW50bHkuCisgICAgICovCisgICAgcHJpdmF0ZSBhYnN0cmFjdCBjbGFzcyBTcGVlY2hJdGVtVjEgZXh0ZW5kcyBVdHRlcmFuY2VTcGVlY2hJdGVtIHsKKyAgICAgICAgcHJvdGVjdGVkIGZpbmFsIEJ1bmRsZSBtUGFyYW1zOworCisgICAgICAgIFNwZWVjaEl0ZW1WMShPYmplY3QgY2FsbGVySWRlbnRpdHksIGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQsCisgICAgICAgICAgICAgICAgQnVuZGxlIHBhcmFtcykgeworICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkKTsKKyAgICAgICAgICAgIG1QYXJhbXMgPSBwYXJhbXM7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIGhhc0xhbmd1YWdlKCkgeworICAgICAgICAgICAgcmV0dXJuICFUZXh0VXRpbHMuaXNFbXB0eShnZXRTdHJpbmdQYXJhbShtUGFyYW1zLCBFbmdpbmUuS0VZX1BBUkFNX0xBTkdVQUdFLCBudWxsKSk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgZ2V0U3BlZWNoUmF0ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbShtUGFyYW1zLCBFbmdpbmUuS0VZX1BBUkFNX1JBVEUsIGdldERlZmF1bHRTcGVlY2hSYXRlKCkpOworICAgICAgICB9CisKKyAgICAgICAgaW50IGdldFBpdGNoKCkgeworICAgICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtKG1QYXJhbXMsIEVuZ2luZS5LRVlfUEFSQU1fUElUQ0gsIEVuZ2luZS5ERUZBVUxUX1BJVENIKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFV0dGVyYW5jZUlkKCkgeworICAgICAgICAgICAgcmV0dXJuIGdldFN0cmluZ1BhcmFtKG1QYXJhbXMsIEVuZ2luZS5LRVlfUEFSQU1fVVRURVJBTkNFX0lELCBudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBnZXRTdHJlYW1UeXBlKCkgeworICAgICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtKG1QYXJhbXMsIEVuZ2luZS5LRVlfUEFSQU1fU1RSRUFNLCBFbmdpbmUuREVGQVVMVF9TVFJFQU0pOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgZ2V0Vm9sdW1lKCkgeworICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW0obVBhcmFtcywgRW5naW5lLktFWV9QQVJBTV9WT0xVTUUsIEVuZ2luZS5ERUZBVUxUX1ZPTFVNRSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBnZXRQYW4oKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbShtUGFyYW1zLCBFbmdpbmUuS0VZX1BBUkFNX1BBTiwgRW5naW5lLkRFRkFVTFRfUEFOKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFN5bnRoZXNpc1NwZWVjaEl0ZW1WMiBleHRlbmRzIFV0dGVyYW5jZVNwZWVjaEl0ZW0geworICAgICAgICBwcml2YXRlIGZpbmFsIFN5bnRoZXNpc1JlcXVlc3RWMiBtU3ludGhlc2lzUmVxdWVzdDsKKyAgICAgICAgcHJpdmF0ZSBBYnN0cmFjdFN5bnRoZXNpc0NhbGxiYWNrIG1TeW50aGVzaXNDYWxsYmFjazsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBFdmVudExvZ2dlclYyIG1FdmVudExvZ2dlcjsKKworICAgICAgICBwdWJsaWMgU3ludGhlc2lzU3BlZWNoSXRlbVYyKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwgaW50IGNhbGxlclBpZCwKKyAgICAgICAgICAgICAgICBTeW50aGVzaXNSZXF1ZXN0VjIgc3ludGhlc2lzUmVxdWVzdCkgeworICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkKTsKKworICAgICAgICAgICAgbVN5bnRoZXNpc1JlcXVlc3QgPSBzeW50aGVzaXNSZXF1ZXN0OworICAgICAgICAgICAgbUV2ZW50TG9nZ2VyID0gbmV3IEV2ZW50TG9nZ2VyVjIoc3ludGhlc2lzUmVxdWVzdCwgY2FsbGVyVWlkLCBjYWxsZXJQaWQsCisgICAgICAgICAgICAgICAgICAgIG1QYWNrYWdlTmFtZSk7CisKKyAgICAgICAgICAgIHVwZGF0ZVNwZWVjaFNwZWVkUGFyYW0oc3ludGhlc2lzUmVxdWVzdCk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlU3BlZWNoU3BlZWRQYXJhbShTeW50aGVzaXNSZXF1ZXN0VjIgc3ludGhlc2lzUmVxdWVzdCkgeworICAgICAgICAgICAgQnVuZGxlIHZvaWNlUGFyYW1zID0gbVN5bnRoZXNpc1JlcXVlc3QuZ2V0Vm9pY2VQYXJhbXMoKTsKKworICAgICAgICAgICAgLy8gSW5qZWN0IGRlZmF1bHQgc3BlZWNoIHNwZWVkIGlmIG5lZWRlZAorICAgICAgICAgICAgaWYgKHZvaWNlUGFyYW1zLmNvbnRhaW5zS2V5KFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMuU1BFRUNIX1NQRUVEKSkgeworICAgICAgICAgICAgICAgIGlmICh2b2ljZVBhcmFtcy5nZXRGbG9hdChUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLlNQRUVDSF9TUEVFRCkgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICB2b2ljZVBhcmFtcy5wdXRGbG9hdChUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLlNQRUVDSF9TUEVFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREZWZhdWx0U3BlZWNoUmF0ZSgpIC8gMTAwLjBmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKKyAgICAgICAgICAgIGlmIChtU3ludGhlc2lzUmVxdWVzdC5nZXRUZXh0KCkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIm51bGwgc3ludGhlc2lzIHRleHQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVN5bnRoZXNpc1JlcXVlc3QuZ2V0VGV4dCgpLmxlbmd0aCgpID49IFRleHRUb1NwZWVjaC5nZXRNYXhTcGVlY2hJbnB1dExlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiVGV4dCB0b28gbG9uZzogIiArIG1TeW50aGVzaXNSZXF1ZXN0LmdldFRleHQoKS5sZW5ndGgoKSArICIgY2hhcnMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBsYXlJbXBsKCkgeworICAgICAgICAgICAgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBzeW50aGVzaXNDYWxsYmFjazsKKyAgICAgICAgICAgIGlmIChtRXZlbnRMb2dnZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1FdmVudExvZ2dlci5vblJlcXVlc3RQcm9jZXNzaW5nU3RhcnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgICAgIC8vIHN0b3AoKSBtaWdodCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSB3ZSBlbnRlciB0aGlzCisgICAgICAgICAgICAgICAgLy8gc3luY2hyb25pemVkIGJsb2NrLgorICAgICAgICAgICAgICAgIGlmIChpc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1TeW50aGVzaXNDYWxsYmFjayA9IGNyZWF0ZVN5bnRoZXNpc0NhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgc3ludGhlc2lzQ2FsbGJhY2sgPSBtU3ludGhlc2lzQ2FsbGJhY2s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEdldCB2b2ljZSBpbmZvCisgICAgICAgICAgICBWb2ljZUluZm8gdm9pY2VJbmZvID0gZ2V0Vm9pY2VzSW5mb1dpdGhOYW1lKG1TeW50aGVzaXNSZXF1ZXN0LmdldFZvaWNlTmFtZSgpKTsKKyAgICAgICAgICAgIGlmICh2b2ljZUluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFByaW1hcnkgdm9pY2UKKyAgICAgICAgICAgICAgICBUZXh0VG9TcGVlY2hTZXJ2aWNlLnRoaXMub25TeW50aGVzaXplVGV4dFYyKG1TeW50aGVzaXNSZXF1ZXN0LCB2b2ljZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXNDYWxsYmFjayk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVua25vd24gdm9pY2UgbmFtZToiICsgbVN5bnRoZXNpc1JlcXVlc3QuZ2V0Vm9pY2VOYW1lKCkpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpc0NhbGxiYWNrLmVycm9yKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfSU5WQUxJRF9SRVFVRVNUKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRml4IGZvciBjYXNlIHdoZXJlIGNsaWVudCBjYWxsZWQgLnN0YXJ0KCkgJiAuZXJyb3IoKSwgYnV0IGRpZCBub3QgY2FsbGVkIC5kb25lKCkKKyAgICAgICAgICAgIGlmICghc3ludGhlc2lzQ2FsbGJhY2suaGFzRmluaXNoZWQoKSkgeworICAgICAgICAgICAgICAgIHN5bnRoZXNpc0NhbGxiYWNrLmRvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBzdG9wSW1wbCgpIHsKKyAgICAgICAgICAgIEFic3RyYWN0U3ludGhlc2lzQ2FsbGJhY2sgc3ludGhlc2lzQ2FsbGJhY2s7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXNDYWxsYmFjayA9IG1TeW50aGVzaXNDYWxsYmFjazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzeW50aGVzaXNDYWxsYmFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHN5bnRoZXNpcyBjYWxsYmFjayBpcyBudWxsLCBpdCBpbXBsaWVzIHRoYXQgd2UgaGF2ZW4ndAorICAgICAgICAgICAgICAgIC8vIGVudGVyZWQgdGhlIHN5bmNocm9uaXplZCh0aGlzKSBibG9jayBpbiBwbGF5SW1wbCB3aGljaCBpbgorICAgICAgICAgICAgICAgIC8vIHR1cm4gaW1wbGllcyB0aGF0IHN5bnRoZXNpcyB3b3VsZCBub3QgaGF2ZSBzdGFydGVkLgorICAgICAgICAgICAgICAgIHN5bnRoZXNpc0NhbGxiYWNrLnN0b3AoKTsKKyAgICAgICAgICAgICAgICBUZXh0VG9TcGVlY2hTZXJ2aWNlLnRoaXMub25TdG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBjcmVhdGVTeW50aGVzaXNDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUGxheWJhY2tTeW50aGVzaXNDYWxsYmFjayhnZXRTdHJlYW1UeXBlKCksIGdldFZvbHVtZSgpLCBnZXRQYW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbUF1ZGlvUGxheWJhY2tIYW5kbGVyLCB0aGlzLCBnZXRDYWxsZXJJZGVudGl0eSgpLCBtRXZlbnRMb2dnZXIsCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudHNWMkFQSSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgaW50IGdldFN0cmVhbVR5cGUoKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW0obVN5bnRoZXNpc1JlcXVlc3QuZ2V0QXVkaW9QYXJhbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcy5BVURJT19QQVJBTV9TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgIEVuZ2luZS5ERUZBVUxUX1NUUkVBTSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGZsb2F0IGdldFZvbHVtZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtKG1TeW50aGVzaXNSZXF1ZXN0LmdldEF1ZGlvUGFyYW1zKCksCisgICAgICAgICAgICAgICAgICAgIFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMuQVVESU9fUEFSQU1fVk9MVU1FLAorICAgICAgICAgICAgICAgICAgICBFbmdpbmUuREVGQVVMVF9WT0xVTUUpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBmbG9hdCBnZXRQYW4oKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbShtU3ludGhlc2lzUmVxdWVzdC5nZXRBdWRpb1BhcmFtcygpLAorICAgICAgICAgICAgICAgICAgICBUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLkFVRElPX1BBUkFNX1BBTiwKKyAgICAgICAgICAgICAgICAgICAgRW5naW5lLkRFRkFVTFRfUEFOKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFV0dGVyYW5jZUlkKCkgeworICAgICAgICAgICAgcmV0dXJuIG1TeW50aGVzaXNSZXF1ZXN0LmdldFV0dGVyYW5jZUlkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFN5bnRoZXNpc1RvRmlsZU91dHB1dFN0cmVhbVNwZWVjaEl0ZW1WMiBleHRlbmRzIFN5bnRoZXNpc1NwZWVjaEl0ZW1WMiB7CisgICAgICAgIHByaXZhdGUgZmluYWwgRmlsZU91dHB1dFN0cmVhbSBtRmlsZU91dHB1dFN0cmVhbTsKKworICAgICAgICBwdWJsaWMgU3ludGhlc2lzVG9GaWxlT3V0cHV0U3RyZWFtU3BlZWNoSXRlbVYyKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwKKyAgICAgICAgICAgICAgICBpbnQgY2FsbGVyUGlkLAorICAgICAgICAgICAgICAgIFN5bnRoZXNpc1JlcXVlc3RWMiBzeW50aGVzaXNSZXF1ZXN0LAorICAgICAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZmlsZU91dHB1dFN0cmVhbSkgeworICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkLCBzeW50aGVzaXNSZXF1ZXN0KTsKKyAgICAgICAgICAgIG1GaWxlT3V0cHV0U3RyZWFtID0gZmlsZU91dHB1dFN0cmVhbTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBjcmVhdGVTeW50aGVzaXNDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN5bnRoZXNpc0NhbGxiYWNrKG1GaWxlT3V0cHV0U3RyZWFtLmdldENoYW5uZWwoKSwKKyAgICAgICAgICAgICAgICAgICAgdGhpcywgZ2V0Q2FsbGVySWRlbnRpdHkoKSwgaW1wbGVtZW50c1YyQVBJKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBsYXlJbXBsKCkgeworICAgICAgICAgICAgc3VwZXIucGxheUltcGwoKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIG1GaWxlT3V0cHV0U3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIGNsb3NlIG91dHB1dCBmaWxlIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIEF1ZGlvU3BlZWNoSXRlbVYyIGV4dGVuZHMgVXR0ZXJhbmNlU3BlZWNoSXRlbSB7CisgICAgICAgIHByaXZhdGUgZmluYWwgQXVkaW9QbGF5YmFja1F1ZXVlSXRlbSBtSXRlbTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBCdW5kbGUgbUF1ZGlvUGFyYW1zOworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtVXR0ZXJhbmNlSWQ7CisKKyAgICAgICAgcHVibGljIEF1ZGlvU3BlZWNoSXRlbVYyKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwgaW50IGNhbGxlclBpZCwKKyAgICAgICAgICAgICAgICBTdHJpbmcgdXR0ZXJhbmNlSWQsIEJ1bmRsZSBhdWRpb1BhcmFtcywgVXJpIHVyaSkgeworICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkKTsKKyAgICAgICAgICAgIG1VdHRlcmFuY2VJZCA9IHV0dGVyYW5jZUlkOworICAgICAgICAgICAgbUF1ZGlvUGFyYW1zID0gYXVkaW9QYXJhbXM7CisgICAgICAgICAgICBtSXRlbSA9IG5ldyBBdWRpb1BsYXliYWNrUXVldWVJdGVtKHRoaXMsIGdldENhbGxlcklkZW50aXR5KCksCisgICAgICAgICAgICAgICAgICAgIFRleHRUb1NwZWVjaFNlcnZpY2UudGhpcywgdXJpLCBnZXRTdHJlYW1UeXBlKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBwbGF5SW1wbCgpIHsKKyAgICAgICAgICAgIG1BdWRpb1BsYXliYWNrSGFuZGxlci5lbnF1ZXVlKG1JdGVtKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBzdG9wSW1wbCgpIHsKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgaW50IGdldFN0cmVhbVR5cGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbUF1ZGlvUGFyYW1zLmdldEludChUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLkFVRElPX1BBUkFNX1NUUkVBTSk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFV0dGVyYW5jZUlkKCkgewotICAgICAgICAgICAgcmV0dXJuIGdldFN0cmluZ1BhcmFtKEVuZ2luZS5LRVlfUEFSQU1fVVRURVJBTkNFX0lELCBudWxsKTsKKyAgICAgICAgICAgIHJldHVybiBtVXR0ZXJhbmNlSWQ7CiAgICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN0cmluZ1BhcmFtKFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVybiBtUGFyYW1zID09IG51bGwgPyBkZWZhdWx0VmFsdWUgOiBtUGFyYW1zLmdldFN0cmluZyhrZXksIGRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgaW50IGdldEludFBhcmFtKFN0cmluZyBrZXksIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVybiBtUGFyYW1zID09IG51bGwgPyBkZWZhdWx0VmFsdWUgOiBtUGFyYW1zLmdldEludChrZXksIGRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgZmxvYXQgZ2V0RmxvYXRQYXJhbShTdHJpbmcga2V5LCBmbG9hdCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVybiBtUGFyYW1zID09IG51bGwgPyBkZWZhdWx0VmFsdWUgOiBtUGFyYW1zLmdldEZsb2F0KGtleSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgfQotCiAgICAgfQogCi0gICAgY2xhc3MgU3ludGhlc2lzU3BlZWNoSXRlbSBleHRlbmRzIFV0dGVyYW5jZVNwZWVjaEl0ZW0geworCisgICAgY2xhc3MgU3ludGhlc2lzU3BlZWNoSXRlbVYxIGV4dGVuZHMgU3BlZWNoSXRlbVYxIHsKICAgICAgICAgLy8gTmV2ZXIgbnVsbC4KICAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVRleHQ7CiAgICAgICAgIHByaXZhdGUgZmluYWwgU3ludGhlc2lzUmVxdWVzdCBtU3ludGhlc2lzUmVxdWVzdDsKQEAgLTU1NiwxMCArMTAyMiwxMCBAQAogICAgICAgICAvLyBOb24gbnVsbCBhZnRlciBzeW50aGVzaXMgaGFzIHN0YXJ0ZWQsIGFuZCBhbGwgYWNjZXNzZXMKICAgICAgICAgLy8gZ3VhcmRlZCBieSAndGhpcycuCiAgICAgICAgIHByaXZhdGUgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBtU3ludGhlc2lzQ2FsbGJhY2s7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgRXZlbnRMb2dnZXIgbUV2ZW50TG9nZ2VyOworICAgICAgICBwcml2YXRlIGZpbmFsIEV2ZW50TG9nZ2VyVjEgbUV2ZW50TG9nZ2VyOwogICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtQ2FsbGVyVWlkOwogCi0gICAgICAgIHB1YmxpYyBTeW50aGVzaXNTcGVlY2hJdGVtKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwgaW50IGNhbGxlclBpZCwKKyAgICAgICAgcHVibGljIFN5bnRoZXNpc1NwZWVjaEl0ZW1WMShPYmplY3QgY2FsbGVySWRlbnRpdHksIGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQsCiAgICAgICAgICAgICAgICAgQnVuZGxlIHBhcmFtcywgU3RyaW5nIHRleHQpIHsKICAgICAgICAgICAgIHN1cGVyKGNhbGxlcklkZW50aXR5LCBjYWxsZXJVaWQsIGNhbGxlclBpZCwgcGFyYW1zKTsKICAgICAgICAgICAgIG1UZXh0ID0gdGV4dDsKQEAgLTU2Nyw3ICsxMDMzLDcgQEAKICAgICAgICAgICAgIG1TeW50aGVzaXNSZXF1ZXN0ID0gbmV3IFN5bnRoZXNpc1JlcXVlc3QobVRleHQsIG1QYXJhbXMpOwogICAgICAgICAgICAgbURlZmF1bHRMb2NhbGUgPSBnZXRTZXR0aW5nc0xvY2FsZSgpOwogICAgICAgICAgICAgc2V0UmVxdWVzdFBhcmFtcyhtU3ludGhlc2lzUmVxdWVzdCk7Ci0gICAgICAgICAgICBtRXZlbnRMb2dnZXIgPSBuZXcgRXZlbnRMb2dnZXIobVN5bnRoZXNpc1JlcXVlc3QsIGNhbGxlclVpZCwgY2FsbGVyUGlkLAorICAgICAgICAgICAgbUV2ZW50TG9nZ2VyID0gbmV3IEV2ZW50TG9nZ2VyVjEobVN5bnRoZXNpc1JlcXVlc3QsIGNhbGxlclVpZCwgY2FsbGVyUGlkLAogICAgICAgICAgICAgICAgICAgICBtUGFja2FnZU5hbWUpOwogICAgICAgICB9CiAKQEAgLTU4OSwyNSArMTA1NSwzMCBAQAogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBpbnQgcGxheUltcGwoKSB7CisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBsYXlJbXBsKCkgewogICAgICAgICAgICAgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBzeW50aGVzaXNDYWxsYmFjazsKICAgICAgICAgICAgIG1FdmVudExvZ2dlci5vblJlcXVlc3RQcm9jZXNzaW5nU3RhcnQoKTsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgICAgIC8vIHN0b3AoKSBtaWdodCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSB3ZSBlbnRlciB0aGlzCiAgICAgICAgICAgICAgICAgLy8gc3luY2hyb25pemVkIGJsb2NrLgogICAgICAgICAgICAgICAgIGlmIChpc1N0b3BwZWQoKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1TeW50aGVzaXNDYWxsYmFjayA9IGNyZWF0ZVN5bnRoZXNpc0NhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgc3ludGhlc2lzQ2FsbGJhY2sgPSBtU3ludGhlc2lzQ2FsbGJhY2s7CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIFRleHRUb1NwZWVjaFNlcnZpY2UudGhpcy5vblN5bnRoZXNpemVUZXh0KG1TeW50aGVzaXNSZXF1ZXN0LCBzeW50aGVzaXNDYWxsYmFjayk7Ci0gICAgICAgICAgICByZXR1cm4gc3ludGhlc2lzQ2FsbGJhY2suaXNEb25lKCkgPyBUZXh0VG9TcGVlY2guU1VDQ0VTUyA6IFRleHRUb1NwZWVjaC5FUlJPUjsKKworICAgICAgICAgICAgLy8gRml4IGZvciBjYXNlIHdoZXJlIGNsaWVudCBjYWxsZWQgLnN0YXJ0KCkgJiAuZXJyb3IoKSwgYnV0IGRpZCBub3QgY2FsbGVkIC5kb25lKCkKKyAgICAgICAgICAgIGlmIChzeW50aGVzaXNDYWxsYmFjay5oYXNTdGFydGVkKCkgJiYgIXN5bnRoZXNpc0NhbGxiYWNrLmhhc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXNDYWxsYmFjay5kb25lKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBwcm90ZWN0ZWQgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBjcmVhdGVTeW50aGVzaXNDYWxsYmFjaygpIHsKICAgICAgICAgICAgIHJldHVybiBuZXcgUGxheWJhY2tTeW50aGVzaXNDYWxsYmFjayhnZXRTdHJlYW1UeXBlKCksIGdldFZvbHVtZSgpLCBnZXRQYW4oKSwKLSAgICAgICAgICAgICAgICAgICAgbUF1ZGlvUGxheWJhY2tIYW5kbGVyLCB0aGlzLCBnZXRDYWxsZXJJZGVudGl0eSgpLCBtRXZlbnRMb2dnZXIpOworICAgICAgICAgICAgICAgICAgICBtQXVkaW9QbGF5YmFja0hhbmRsZXIsIHRoaXMsIGdldENhbGxlcklkZW50aXR5KCksIG1FdmVudExvZ2dlciwgZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZSB2b2lkIHNldFJlcXVlc3RQYXJhbXMoU3ludGhlc2lzUmVxdWVzdCByZXF1ZXN0KSB7CkBAIC02MzIsMzcgKzExMDMsMjUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2UoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0oRW5naW5lLktFWV9QQVJBTV9MQU5HVUFHRSwgbURlZmF1bHRMb2NhbGVbMF0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGhhc0xhbmd1YWdlKCkgewotICAgICAgICAgICAgcmV0dXJuICFUZXh0VXRpbHMuaXNFbXB0eShnZXRTdHJpbmdQYXJhbShFbmdpbmUuS0VZX1BBUkFNX0xBTkdVQUdFLCBudWxsKSk7Ci0gICAgICAgIH0KLQogICAgICAgICBwcml2YXRlIFN0cmluZyBnZXRDb3VudHJ5KCkgewogICAgICAgICAgICAgaWYgKCFoYXNMYW5ndWFnZSgpKSByZXR1cm4gbURlZmF1bHRMb2NhbGVbMV07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0oRW5naW5lLktFWV9QQVJBTV9DT1VOVFJZLCAiIik7CisgICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0obVBhcmFtcywgRW5naW5lLktFWV9QQVJBTV9DT1VOVFJZLCAiIik7CiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIFN0cmluZyBnZXRWYXJpYW50KCkgewogICAgICAgICAgICAgaWYgKCFoYXNMYW5ndWFnZSgpKSByZXR1cm4gbURlZmF1bHRMb2NhbGVbMl07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0oRW5naW5lLktFWV9QQVJBTV9WQVJJQU5ULCAiIik7CisgICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0obVBhcmFtcywgRW5naW5lLktFWV9QQVJBTV9WQVJJQU5ULCAiIik7CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIGludCBnZXRTcGVlY2hSYXRlKCkgewotICAgICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtKEVuZ2luZS5LRVlfUEFSQU1fUkFURSwgZ2V0RGVmYXVsdFNwZWVjaFJhdGUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGludCBnZXRQaXRjaCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbShFbmdpbmUuS0VZX1BBUkFNX1BJVENILCBFbmdpbmUuREVGQVVMVF9QSVRDSCk7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2UoKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0obVBhcmFtcywgRW5naW5lLktFWV9QQVJBTV9MQU5HVUFHRSwgbURlZmF1bHRMb2NhbGVbMF0pOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBjbGFzcyBTeW50aGVzaXNUb0ZpbGVPdXRwdXRTdHJlYW1TcGVlY2hJdGVtIGV4dGVuZHMgU3ludGhlc2lzU3BlZWNoSXRlbSB7CisgICAgcHJpdmF0ZSBjbGFzcyBTeW50aGVzaXNUb0ZpbGVPdXRwdXRTdHJlYW1TcGVlY2hJdGVtVjEgZXh0ZW5kcyBTeW50aGVzaXNTcGVlY2hJdGVtVjEgewogICAgICAgICBwcml2YXRlIGZpbmFsIEZpbGVPdXRwdXRTdHJlYW0gbUZpbGVPdXRwdXRTdHJlYW07CiAKLSAgICAgICAgcHVibGljIFN5bnRoZXNpc1RvRmlsZU91dHB1dFN0cmVhbVNwZWVjaEl0ZW0oT2JqZWN0IGNhbGxlcklkZW50aXR5LCBpbnQgY2FsbGVyVWlkLAorICAgICAgICBwdWJsaWMgU3ludGhlc2lzVG9GaWxlT3V0cHV0U3RyZWFtU3BlZWNoSXRlbVYxKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwKICAgICAgICAgICAgICAgICBpbnQgY2FsbGVyUGlkLCBCdW5kbGUgcGFyYW1zLCBTdHJpbmcgdGV4dCwgRmlsZU91dHB1dFN0cmVhbSBmaWxlT3V0cHV0U3RyZWFtKSB7CiAgICAgICAgICAgICBzdXBlcihjYWxsZXJJZGVudGl0eSwgY2FsbGVyVWlkLCBjYWxsZXJQaWQsIHBhcmFtcywgdGV4dCk7CiAgICAgICAgICAgICBtRmlsZU91dHB1dFN0cmVhbSA9IGZpbGVPdXRwdXRTdHJlYW07CkBAIC02NzAsMzAgKzExMjksMjYgQEAKIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHJvdGVjdGVkIEFic3RyYWN0U3ludGhlc2lzQ2FsbGJhY2sgY3JlYXRlU3ludGhlc2lzQ2FsbGJhY2soKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTeW50aGVzaXNDYWxsYmFjayhtRmlsZU91dHB1dFN0cmVhbS5nZXRDaGFubmVsKCkpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3ludGhlc2lzQ2FsbGJhY2sobUZpbGVPdXRwdXRTdHJlYW0uZ2V0Q2hhbm5lbCgpLAorICAgICAgICAgICAgICAgICAgICB0aGlzLCBnZXRDYWxsZXJJZGVudGl0eSgpLCBmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIGludCBwbGF5SW1wbCgpIHsKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgcGxheUltcGwoKSB7CiAgICAgICAgICAgICBkaXNwYXRjaE9uU3RhcnQoKTsKLSAgICAgICAgICAgIGludCBzdGF0dXMgPSBzdXBlci5wbGF5SW1wbCgpOwotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBUZXh0VG9TcGVlY2guU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIGRpc3BhdGNoT25Eb25lKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRpc3BhdGNoT25FcnJvcigpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc3VwZXIucGxheUltcGwoKTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgIG1GaWxlT3V0cHV0U3RyZWFtLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIGNsb3NlIG91dHB1dCBmaWxlIiwgZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBjbGFzcyBBdWRpb1NwZWVjaEl0ZW0gZXh0ZW5kcyBVdHRlcmFuY2VTcGVlY2hJdGVtIHsKKyAgICBwcml2YXRlIGNsYXNzIEF1ZGlvU3BlZWNoSXRlbVYxIGV4dGVuZHMgU3BlZWNoSXRlbVYxIHsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBBdWRpb1BsYXliYWNrUXVldWVJdGVtIG1JdGVtOwotICAgICAgICBwdWJsaWMgQXVkaW9TcGVlY2hJdGVtKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwgaW50IGNhbGxlclBpZCwKKworICAgICAgICBwdWJsaWMgQXVkaW9TcGVlY2hJdGVtVjEoT2JqZWN0IGNhbGxlcklkZW50aXR5LCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkLAogICAgICAgICAgICAgICAgIEJ1bmRsZSBwYXJhbXMsIFVyaSB1cmkpIHsKICAgICAgICAgICAgIHN1cGVyKGNhbGxlcklkZW50aXR5LCBjYWxsZXJVaWQsIGNhbGxlclBpZCwgcGFyYW1zKTsKICAgICAgICAgICAgIG1JdGVtID0gbmV3IEF1ZGlvUGxheWJhY2tRdWV1ZUl0ZW0odGhpcywgZ2V0Q2FsbGVySWRlbnRpdHkoKSwKQEAgLTcwNiwyMyArMTE2MSwyOSBAQAogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBpbnQgcGxheUltcGwoKSB7CisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBsYXlJbXBsKCkgewogICAgICAgICAgICAgbUF1ZGlvUGxheWJhY2tIYW5kbGVyLmVucXVldWUobUl0ZW0pOwotICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5TVUNDRVNTOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCB2b2lkIHN0b3BJbXBsKCkgewogICAgICAgICAgICAgLy8gRG8gbm90aGluZy4KICAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFV0dGVyYW5jZUlkKCkgeworICAgICAgICAgICAgcmV0dXJuIGdldFN0cmluZ1BhcmFtKG1QYXJhbXMsIEVuZ2luZS5LRVlfUEFSQU1fVVRURVJBTkNFX0lELCBudWxsKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgY2xhc3MgU2lsZW5jZVNwZWVjaEl0ZW0gZXh0ZW5kcyBVdHRlcmFuY2VTcGVlY2hJdGVtIHsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBsb25nIG1EdXJhdGlvbjsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVV0dGVyYW5jZUlkOwogCiAgICAgICAgIHB1YmxpYyBTaWxlbmNlU3BlZWNoSXRlbShPYmplY3QgY2FsbGVySWRlbnRpdHksIGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQsCi0gICAgICAgICAgICAgICAgQnVuZGxlIHBhcmFtcywgbG9uZyBkdXJhdGlvbikgewotICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkLCBwYXJhbXMpOworICAgICAgICAgICAgICAgIFN0cmluZyB1dHRlcmFuY2VJZCwgbG9uZyBkdXJhdGlvbikgeworICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkKTsKKyAgICAgICAgICAgIG1VdHRlcmFuY2VJZCA9IHV0dGVyYW5jZUlkOwogICAgICAgICAgICAgbUR1cmF0aW9uID0gZHVyYXRpb247CiAgICAgICAgIH0KIApAQCAtNzMyLDI2ICsxMTkzLDU3IEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIGludCBwbGF5SW1wbCgpIHsKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgcGxheUltcGwoKSB7CiAgICAgICAgICAgICBtQXVkaW9QbGF5YmFja0hhbmRsZXIuZW5xdWV1ZShuZXcgU2lsZW5jZVBsYXliYWNrUXVldWVJdGVtKAogICAgICAgICAgICAgICAgICAgICB0aGlzLCBnZXRDYWxsZXJJZGVudGl0eSgpLCBtRHVyYXRpb24pKTsKLSAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guU1VDQ0VTUzsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwcm90ZWN0ZWQgdm9pZCBzdG9wSW1wbCgpIHsKLSAgICAgICAgICAgIC8vIERvIG5vdGhpbmcsIGhhbmRsZWQgYnkgQXVkaW9QbGF5YmFja0hhbmRsZXIjc3RvcEZvckFwcAorCisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRVdHRlcmFuY2VJZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtVXR0ZXJhbmNlSWQ7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBDYWxsIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uVm9pY2VzSW5mb0NoYW5nZX0gb24gc3ludGhlc2lzIHRocmVhZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGNsYXNzIFZvaWNlc0luZm9DaGFuZ2VJdGVtIGV4dGVuZHMgU3BlZWNoSXRlbSB7CisgICAgICAgIHB1YmxpYyBWb2ljZXNJbmZvQ2hhbmdlSXRlbSgpIHsKKyAgICAgICAgICAgIHN1cGVyKG51bGwsIDAsIDApOyAvLyBJdCdzIG5ldmVyIGluaXRpYXRlZCBieSBhbiB1c2VyCisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBsYXlJbXBsKCkgeworICAgICAgICAgICAgVGV4dFRvU3BlZWNoU2VydmljZS50aGlzLm9uVm9pY2VzSW5mb0NoYW5nZSgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHN0b3BJbXBsKCkgeworICAgICAgICAgICAgLy8gTm8tb3AKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGwge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25Mb2FkTGFuZ3VhZ2V9IG9uIHN5bnRoIHRocmVhZC4KKyAgICAgKi8KICAgICBwcml2YXRlIGNsYXNzIExvYWRMYW5ndWFnZUl0ZW0gZXh0ZW5kcyBTcGVlY2hJdGVtIHsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUxhbmd1YWdlOwogICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtQ291bnRyeTsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVZhcmlhbnQ7CiAKICAgICAgICAgcHVibGljIExvYWRMYW5ndWFnZUl0ZW0oT2JqZWN0IGNhbGxlcklkZW50aXR5LCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkLAotICAgICAgICAgICAgICAgIEJ1bmRsZSBwYXJhbXMsIFN0cmluZyBsYW5ndWFnZSwgU3RyaW5nIGNvdW50cnksIFN0cmluZyB2YXJpYW50KSB7Ci0gICAgICAgICAgICBzdXBlcihjYWxsZXJJZGVudGl0eSwgY2FsbGVyVWlkLCBjYWxsZXJQaWQsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxhbmd1YWdlLCBTdHJpbmcgY291bnRyeSwgU3RyaW5nIHZhcmlhbnQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNhbGxlcklkZW50aXR5LCBjYWxsZXJVaWQsIGNhbGxlclBpZCk7CiAgICAgICAgICAgICBtTGFuZ3VhZ2UgPSBsYW5ndWFnZTsKICAgICAgICAgICAgIG1Db3VudHJ5ID0gY291bnRyeTsKICAgICAgICAgICAgIG1WYXJpYW50ID0gdmFyaWFudDsKQEAgLTc2MywxNCArMTI1NSw4IEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIGludCBwbGF5SW1wbCgpIHsKLSAgICAgICAgICAgIGludCByZXN1bHQgPSBUZXh0VG9TcGVlY2hTZXJ2aWNlLnRoaXMub25Mb2FkTGFuZ3VhZ2UobUxhbmd1YWdlLCBtQ291bnRyeSwgbVZhcmlhbnQpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBUZXh0VG9TcGVlY2guTEFOR19BVkFJTEFCTEUgfHwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID09IFRleHRUb1NwZWVjaC5MQU5HX0NPVU5UUllfQVZBSUxBQkxFIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9PSBUZXh0VG9TcGVlY2guTEFOR19DT1VOVFJZX1ZBUl9BVkFJTEFCTEUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLlNVQ0NFU1M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBwbGF5SW1wbCgpIHsKKyAgICAgICAgICAgIFRleHRUb1NwZWVjaFNlcnZpY2UudGhpcy5vbkxvYWRMYW5ndWFnZShtTGFuZ3VhZ2UsIG1Db3VudHJ5LCBtVmFyaWFudCk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTgwMCw3ICsxMjg2LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTcGVlY2hJdGVtIGl0ZW0gPSBuZXcgU3ludGhlc2lzU3BlZWNoSXRlbShjYWxsZXIsCisgICAgICAgICAgICBTcGVlY2hJdGVtIGl0ZW0gPSBuZXcgU3ludGhlc2lzU3BlZWNoSXRlbVYxKGNhbGxlciwKICAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgQmluZGVyLmdldENhbGxpbmdQaWQoKSwgcGFyYW1zLCB0ZXh0KTsKICAgICAgICAgICAgIHJldHVybiBtU3ludGhIYW5kbGVyLmVucXVldWVTcGVlY2hJdGVtKHF1ZXVlTW9kZSwgaXRlbSk7CiAgICAgICAgIH0KQEAgLTgxOCw3ICsxMzA0LDcgQEAKICAgICAgICAgICAgIGZpbmFsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHNhbWVGaWxlRGVzY3JpcHRvciA9IFBhcmNlbEZpbGVEZXNjcmlwdG9yLmFkb3B0RmQoCiAgICAgICAgICAgICAgICAgICAgIGZpbGVEZXNjcmlwdG9yLmRldGFjaEZkKCkpOwogCi0gICAgICAgICAgICBTcGVlY2hJdGVtIGl0ZW0gPSBuZXcgU3ludGhlc2lzVG9GaWxlT3V0cHV0U3RyZWFtU3BlZWNoSXRlbShjYWxsZXIsCisgICAgICAgICAgICBTcGVlY2hJdGVtIGl0ZW0gPSBuZXcgU3ludGhlc2lzVG9GaWxlT3V0cHV0U3RyZWFtU3BlZWNoSXRlbVYxKGNhbGxlciwKICAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgQmluZGVyLmdldENhbGxpbmdQaWQoKSwgcGFyYW1zLCB0ZXh0LAogICAgICAgICAgICAgICAgICAgICBuZXcgUGFyY2VsRmlsZURlc2NyaXB0b3IuQXV0b0Nsb3NlT3V0cHV0U3RyZWFtKHNhbWVGaWxlRGVzY3JpcHRvcikpOwogICAgICAgICAgICAgcmV0dXJuIG1TeW50aEhhbmRsZXIuZW5xdWV1ZVNwZWVjaEl0ZW0oVGV4dFRvU3BlZWNoLlFVRVVFX0FERCwgaXRlbSk7CkBAIC04MzAsMTkgKzEzMTYsMTkgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTcGVlY2hJdGVtIGl0ZW0gPSBuZXcgQXVkaW9TcGVlY2hJdGVtKGNhbGxlciwKKyAgICAgICAgICAgIFNwZWVjaEl0ZW0gaXRlbSA9IG5ldyBBdWRpb1NwZWVjaEl0ZW1WMShjYWxsZXIsCiAgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIHBhcmFtcywgYXVkaW9VcmkpOwogICAgICAgICAgICAgcmV0dXJuIG1TeW50aEhhbmRsZXIuZW5xdWV1ZVNwZWVjaEl0ZW0ocXVldWVNb2RlLCBpdGVtKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IHBsYXlTaWxlbmNlKElCaW5kZXIgY2FsbGVyLCBsb25nIGR1cmF0aW9uLCBpbnQgcXVldWVNb2RlLCBCdW5kbGUgcGFyYW1zKSB7Ci0gICAgICAgICAgICBpZiAoIWNoZWNrTm9uTnVsbChjYWxsZXIsIHBhcmFtcykpIHsKKyAgICAgICAgcHVibGljIGludCBwbGF5U2lsZW5jZShJQmluZGVyIGNhbGxlciwgbG9uZyBkdXJhdGlvbiwgaW50IHF1ZXVlTW9kZSwgU3RyaW5nIHV0dGVyYW5jZUlkKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrTm9uTnVsbChjYWxsZXIpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3BlZWNoSXRlbSBpdGVtID0gbmV3IFNpbGVuY2VTcGVlY2hJdGVtKGNhbGxlciwKLSAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgQmluZGVyLmdldENhbGxpbmdQaWQoKSwgcGFyYW1zLCBkdXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIHV0dGVyYW5jZUlkLCBkdXJhdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gbVN5bnRoSGFuZGxlci5lbnF1ZXVlU3BlZWNoSXRlbShxdWV1ZU1vZGUsIGl0ZW0pOwogICAgICAgICB9CiAKQEAgLTkxMiw3ICsxMzk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID09IFRleHRUb1NwZWVjaC5MQU5HX0NPVU5UUllfVkFSX0FWQUlMQUJMRSkgewogCiAgICAgICAgICAgICAgICAgU3BlZWNoSXRlbSBpdGVtID0gbmV3IExvYWRMYW5ndWFnZUl0ZW0oY2FsbGVyLCBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLAotICAgICAgICAgICAgICAgICAgICBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpLCBudWxsLCBsYW5nLCBjb3VudHJ5LCB2YXJpYW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIGxhbmcsIGNvdW50cnksIHZhcmlhbnQpOwogCiAgICAgICAgICAgICAgICAgaWYgKG1TeW50aEhhbmRsZXIuZW5xdWV1ZVNwZWVjaEl0ZW0oVGV4dFRvU3BlZWNoLlFVRVVFX0FERCwgaXRlbSkgIT0KICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRUb1NwZWVjaC5TVUNDRVNTKSB7CkBAIC05NDMsNiArMTQyOSw1OCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIExpc3Q8Vm9pY2VJbmZvPiBnZXRWb2ljZXNJbmZvKCkgeworICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaFNlcnZpY2UudGhpcy5nZXRWb2ljZXNJbmZvKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBzcGVha1YyKElCaW5kZXIgY2FsbGluZ0luc3RhbmNlLAorICAgICAgICAgICAgICAgIFN5bnRoZXNpc1JlcXVlc3RWMiByZXF1ZXN0KSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrTm9uTnVsbChjYWxsaW5nSW5zdGFuY2UsIHJlcXVlc3QpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3BlZWNoSXRlbSBpdGVtID0gbmV3IFN5bnRoZXNpc1NwZWVjaEl0ZW1WMihjYWxsaW5nSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIHJlcXVlc3QpOworICAgICAgICAgICAgcmV0dXJuIG1TeW50aEhhbmRsZXIuZW5xdWV1ZVNwZWVjaEl0ZW0oVGV4dFRvU3BlZWNoLlFVRVVFX0FERCwgaXRlbSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBzeW50aGVzaXplVG9GaWxlRGVzY3JpcHRvclYyKElCaW5kZXIgY2FsbGluZ0luc3RhbmNlLAorICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgIFN5bnRoZXNpc1JlcXVlc3RWMiByZXF1ZXN0KSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrTm9uTnVsbChjYWxsaW5nSW5zdGFuY2UsIHJlcXVlc3QsIGZpbGVEZXNjcmlwdG9yKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEluIHRlc3QgZW52LCBQYXJjZWxGaWxlRGVzY3JpcHRvciBpbnN0YW5jZSBtYXkgYmUgRVhBQ1RMWSB0aGUgc2FtZQorICAgICAgICAgICAgLy8gb25lIHRoYXQgaXMgdXNlZCBieSBjbGllbnQuIEFuZCBpdCB3aWxsIGJlIGNsb3NlZCBieSBhIGNsaWVudCwgdGh1cworICAgICAgICAgICAgLy8gcHJldmVudGluZyB1cyBmcm9tIHdyaXRpbmcgYW55dGhpbmcgdG8gaXQuCisgICAgICAgICAgICBmaW5hbCBQYXJjZWxGaWxlRGVzY3JpcHRvciBzYW1lRmlsZURlc2NyaXB0b3IgPSBQYXJjZWxGaWxlRGVzY3JpcHRvci5hZG9wdEZkKAorICAgICAgICAgICAgICAgICAgICBmaWxlRGVzY3JpcHRvci5kZXRhY2hGZCgpKTsKKworICAgICAgICAgICAgU3BlZWNoSXRlbSBpdGVtID0gbmV3IFN5bnRoZXNpc1RvRmlsZU91dHB1dFN0cmVhbVNwZWVjaEl0ZW1WMihjYWxsaW5nSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgIG5ldyBQYXJjZWxGaWxlRGVzY3JpcHRvci5BdXRvQ2xvc2VPdXRwdXRTdHJlYW0oc2FtZUZpbGVEZXNjcmlwdG9yKSk7CisgICAgICAgICAgICByZXR1cm4gbVN5bnRoSGFuZGxlci5lbnF1ZXVlU3BlZWNoSXRlbShUZXh0VG9TcGVlY2guUVVFVUVfQURELCBpdGVtKTsKKworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgcGxheUF1ZGlvVjIoCisgICAgICAgICAgICAgICAgSUJpbmRlciBjYWxsaW5nSW5zdGFuY2UsIFVyaSBhdWRpb1VyaSwgU3RyaW5nIHV0dGVyYW5jZUlkLAorICAgICAgICAgICAgICAgIEJ1bmRsZSBzeXN0ZW1QYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrTm9uTnVsbChjYWxsaW5nSW5zdGFuY2UsIGF1ZGlvVXJpLCBzeXN0ZW1QYXJhbWV0ZXJzKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNwZWVjaEl0ZW0gaXRlbSA9IG5ldyBBdWRpb1NwZWVjaEl0ZW1WMihjYWxsaW5nSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIHV0dGVyYW5jZUlkLCBzeXN0ZW1QYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICBhdWRpb1VyaSk7CisgICAgICAgICAgICByZXR1cm4gbVN5bnRoSGFuZGxlci5lbnF1ZXVlU3BlZWNoSXRlbShUZXh0VG9TcGVlY2guUVVFVUVfQURELCBpdGVtKTsKKyAgICAgICAgfQogICAgIH07CiAKICAgICBwcml2YXRlIGNsYXNzIENhbGxiYWNrTWFwIGV4dGVuZHMgUmVtb3RlQ2FsbGJhY2tMaXN0PElUZXh0VG9TcGVlY2hDYWxsYmFjaz4gewpAQCAtOTY0LDExICsxNTAyLDMxIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRG9uZShPYmplY3QgY2FsbGVySWRlbnRpdHksIFN0cmluZyB1dHRlcmFuY2VJZCkgeworICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRmFsbGJhY2soT2JqZWN0IGNhbGxlcklkZW50aXR5LCBTdHJpbmcgdXR0ZXJhbmNlSWQpIHsKICAgICAgICAgICAgIElUZXh0VG9TcGVlY2hDYWxsYmFjayBjYiA9IGdldENhbGxiYWNrRm9yKGNhbGxlcklkZW50aXR5KTsKICAgICAgICAgICAgIGlmIChjYiA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNiLm9uRG9uZSh1dHRlcmFuY2VJZCk7CisgICAgICAgICAgICAgICAgY2Iub25GYWxsYmFjayh1dHRlcmFuY2VJZCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhbGxiYWNrIG9uRmFsbGJhY2sgZmFpbGVkOiAiICsgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uU3RvcChPYmplY3QgY2FsbGVySWRlbnRpdHksIFN0cmluZyB1dHRlcmFuY2VJZCkgeworICAgICAgICAgICAgSVRleHRUb1NwZWVjaENhbGxiYWNrIGNiID0gZ2V0Q2FsbGJhY2tGb3IoY2FsbGVySWRlbnRpdHkpOworICAgICAgICAgICAgaWYgKGNiID09IG51bGwpIHJldHVybjsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY2Iub25TdG9wKHV0dGVyYW5jZUlkKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2FsbGJhY2sgb25TdG9wIGZhaWxlZDogIiArIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPblN1Y2Nlc3MoT2JqZWN0IGNhbGxlcklkZW50aXR5LCBTdHJpbmcgdXR0ZXJhbmNlSWQpIHsKKyAgICAgICAgICAgIElUZXh0VG9TcGVlY2hDYWxsYmFjayBjYiA9IGdldENhbGxiYWNrRm9yKGNhbGxlcklkZW50aXR5KTsKKyAgICAgICAgICAgIGlmIChjYiA9PSBudWxsKSByZXR1cm47CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNiLm9uU3VjY2Vzcyh1dHRlcmFuY2VJZCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhbGxiYWNrIG9uRG9uZSBmYWlsZWQ6ICIgKyBlKTsKICAgICAgICAgICAgIH0KQEAgLTk4NSwxMSArMTU0MywxMiBAQAogCiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRXJyb3IoT2JqZWN0IGNhbGxlcklkZW50aXR5LCBTdHJpbmcgdXR0ZXJhbmNlSWQpIHsKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPbkVycm9yKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgU3RyaW5nIHV0dGVyYW5jZUlkLAorICAgICAgICAgICAgICAgIGludCBlcnJvckNvZGUpIHsKICAgICAgICAgICAgIElUZXh0VG9TcGVlY2hDYWxsYmFjayBjYiA9IGdldENhbGxiYWNrRm9yKGNhbGxlcklkZW50aXR5KTsKICAgICAgICAgICAgIGlmIChjYiA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNiLm9uRXJyb3IodXR0ZXJhbmNlSWQpOworICAgICAgICAgICAgICAgIGNiLm9uRXJyb3IodXR0ZXJhbmNlSWQsIGVycm9yQ29kZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhbGxiYWNrIG9uRXJyb3IgZmFpbGVkOiAiICsgZSk7CiAgICAgICAgICAgICB9CkBAIC0xMDAxLDcgKzE1NjAsNyBAQAogICAgICAgICAgICAgc3luY2hyb25pemVkIChtQ2FsbGVyVG9DYWxsYmFjaykgewogICAgICAgICAgICAgICAgIG1DYWxsZXJUb0NhbGxiYWNrLnJlbW92ZShjYWxsZXIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbVN5bnRoSGFuZGxlci5zdG9wRm9yQXBwKGNhbGxlcik7CisgICAgICAgICAgICAvL21TeW50aEhhbmRsZXIuc3RvcEZvckFwcChjYWxsZXIpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0xMDEyLDYgKzE1NzEsMTggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoVm9pY2VzSW5mb0NoYW5nZShMaXN0PFZvaWNlSW5mbz4gdm9pY2VzSW5mbykgeworICAgICAgICAgICAgc3luY2hyb25pemVkIChtQ2FsbGVyVG9DYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGZvciAoSVRleHRUb1NwZWVjaENhbGxiYWNrIGNhbGxiYWNrIDogbUNhbGxlclRvQ2FsbGJhY2sudmFsdWVzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLm9uVm9pY2VzSW5mb0NoYW5nZSh2b2ljZXNJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byByZXF1ZXN0IHJlY29ubmVjdCIsIGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgcHJpdmF0ZSBJVGV4dFRvU3BlZWNoQ2FsbGJhY2sgZ2V0Q2FsbGJhY2tGb3IoT2JqZWN0IGNhbGxlcikgewogICAgICAgICAgICAgSVRleHRUb1NwZWVjaENhbGxiYWNrIGNiOwogICAgICAgICAgICAgSUJpbmRlciBhc0JpbmRlciA9IChJQmluZGVyKSBjYWxsZXI7CkBAIC0xMDIxLDcgKzE1OTIsNSBAQAogCiAgICAgICAgICAgICByZXR1cm4gY2I7CiAgICAgICAgIH0KLQogICAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9Wb2ljZUluZm8uYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVm9pY2VJbmZvLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwNWY4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVm9pY2VJbmZvLmFpZGwKQEAgLTAsMCArMSwyMCBAQAorLyoKKyoqCisqKiBDb3B5cmlnaHQgMjAxMywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBhbmRyb2lkLnNwZWVjaC50dHM7CisKK3BhcmNlbGFibGUgVm9pY2VJbmZvOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVm9pY2VJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1ZvaWNlSW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YjlhOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1ZvaWNlSW5mby5qYXZhCkBAIC0wLDAgKzEsMzI1IEBACitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKKworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKy8qKgorICogQ2hhcmFjdGVyaXN0aWNzIGFuZCBmZWF0dXJlcyBvZiBhIFRleHQtVG8tU3BlZWNoIFZvaWNlLiBFYWNoIFRUUyBFbmdpbmUgY2FuIGV4cG9zZQorICogbXVsdGlwbGUgdm9pY2VzIGZvciBtdWx0aXBsZSBsb2NhbGVzLCB3aXRoIGRpZmZlcmVudCBzZXQgb2YgZmVhdHVyZXMuCisgKgorICogRWFjaCBWb2ljZUluZm8gaGFzIGFuIHVuaXF1ZSBuYW1lLiBUaGlzIG5hbWUgY2FuIGJlIG9idGFpbmVkIHVzaW5nIHRoZSB7QGxpbmsgI2dldE5hbWUoKX0gbWV0aG9kCisgKiBhbmQgd2lsbCBwZXJzaXN0IHVudGlsIHRoZSBjbGllbnQgaXMgYXNrZWQgdG8gcmUtZXZhbHVhdGUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHZvaWNlcyBpbiB0aGUKKyAqIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuQ29ubmVjdGlvbkNhbGxiYWNrcyNvbkVuZ2luZVN0YXR1c0NoYW5nZShhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LkVuZ2luZVN0YXR1cyl9CisgKiBjYWxsYmFjay4gVGhlIG5hbWUgY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlIGEgVm9pY2VJbmZvIGluIGFuIGluc3RhbmNlIG9mIHtAbGluayBSZXF1ZXN0Q29uZmlnfTsKKyAqIHRoZSB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNGQUxMQkFDS19WT0lDRV9OQU1FfSB2b2ljZSBwYXJhbWV0ZXIgaXMgYW4gZXhhbXBsZSBvZiB0aGlzLgorICogSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgdm9pY2UgbmFtZSBuZXZlciBjaGFuZ2UgZHVyaW5nIHRoZSBUVFMgc2VydmljZSBsaWZldGltZS4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFZvaWNlSW5mbyBpbXBsZW1lbnRzIFBhcmNlbGFibGUgeworICAgIC8qKiBWZXJ5IGxvdywgYnV0IHN0aWxsIGludGVsbGlnaWJsZSBxdWFsaXR5IG9mIHNwZWVjaCBzeW50aGVzaXMgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUFMSVRZX1ZFUllfTE9XID0gMTAwOworCisgICAgLyoqIExvdywgbm90IGh1bWFuLWxpa2UgcXVhbGl0eSBvZiBzcGVlY2ggc3ludGhlc2lzICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVBTElUWV9MT1cgPSAyMDA7CisKKyAgICAvKiogTm9ybWFsIHF1YWxpdHkgb2Ygc3BlZWNoIHN5bnRoZXNpcyAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVQUxJVFlfTk9STUFMID0gMzAwOworCisgICAgLyoqIEhpZ2gsIGh1bWFuLWxpa2UgcXVhbGl0eSBvZiBzcGVlY2ggc3ludGhlc2lzICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVBTElUWV9ISUdIID0gNDAwOworCisgICAgLyoqIFZlcnkgaGlnaCwgYWxtb3N0IGh1bWFuLWluZGlzdGluZ3Vpc2hhYmxlIHF1YWxpdHkgb2Ygc3BlZWNoIHN5bnRoZXNpcyAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVQUxJVFlfVkVSWV9ISUdIID0gNTAwOworCisgICAgLyoqIFZlcnkgbG93IGV4cGVjdGVkIHN5bnRoZXNpemVyIGxhdGVuY3kgKDwgMjBtcykgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVRFTkNZX1ZFUllfTE9XID0gMTAwOworCisgICAgLyoqIExvdyBleHBlY3RlZCBzeW50aGVzaXplciBsYXRlbmN5ICh+MjBtcykgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVRFTkNZX0xPVyA9IDIwMDsKKworICAgIC8qKiBOb3JtYWwgZXhwZWN0ZWQgc3ludGhlc2l6ZXIgbGF0ZW5jeSAofjUwbXMpICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEFURU5DWV9OT1JNQUwgPSAzMDA7CisKKyAgICAvKiogTmV0d29yayBiYXNlZCBleHBlY3RlZCBzeW50aGVzaXplciBsYXRlbmN5ICh+MjAwbXMpICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEFURU5DWV9ISUdIID0gNDAwOworCisgICAgLyoqIFZlcnkgc2xvdyBuZXR3b3JrIGJhc2VkIGV4cGVjdGVkIHN5bnRoZXNpemVyIGxhdGVuY3kgKD4gMjAwbXMpICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEFURU5DWV9WRVJZX0hJR0ggPSA1MDA7CisKKyAgICAvKiogQWRkaXRpb25hbCBmZWF0dXJlIGtleSwgd2l0aCBzdHJpbmcgdmFsdWUsIGdlbmRlciBvZiB0aGUgc3BlYWtlciAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfU1BFQUtFUl9HRU5ERVIgPSAic3BlYWtlckdlbmRlciI7CisKKyAgICAvKiogQWRkaXRpb25hbCBmZWF0dXJlIGtleSwgd2l0aCBpbnRlZ2VyIHZhbHVlLCBzcGVha2luZyBzcGVlZCBpbiB3b3JkcyBwZXIgbWludXRlCisgICAgICogd2hlbiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNTUEVFQ0hfU1BFRUR9IHBhcmFtZXRlciBpcyBzZXQgdG8ge0Bjb2RlIDEuMH0gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGRUFUVVJFX1dPUkRTX1BFUl9NSU5VVEUgPSAid29yZHNQZXJNaW51dGUiOworCisgICAgLyoqCisgICAgICogQWRkaXRpb25hbCBmZWF0dXJlIGtleSwgd2l0aCBib29sZWFuIHZhbHVlLCB0aGF0IGluZGljYXRlcyB0aGF0IHZvaWNlIG1heSBuZWVkIHRvCisgICAgICogZG93bmxvYWQgYWRkaXRpb25hbCBkYXRhIGlmIHVzZWQgZm9yIHN5bnRoZXNpcy4KKyAgICAgKgorICAgICAqIE1ha2luZyBhIHJlcXVlc3Qgd2l0aCBhIHZvaWNlIHRoYXQgaGFzIHRoaXMgZmVhdHVyZSBtYXkgcmVzdWx0IGluIGEKKyAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cyNFUlJPUl9ET1dOTE9BRElOR19BRERJVElPTkFMX0RBVEF9IGVycm9yLiBJdCdzIHJlY29tbWVuZGVkCisgICAgICogdG8gc2V0IHRoZSB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNGQUxMQkFDS19WT0lDRV9OQU1FfSB2b2ljZSBwYXJhbWV0ZXIgdG8gcmVmZXJlbmNlCisgICAgICogYSBmdWxseSBpbnN0YWxsZWQgdm9pY2UgKG9yIG5ldHdvcmsgdm9pY2UpIHRoYXQgY2FuIHNlcnZlIGFzIHJlcGxhY2VtZW50LgorICAgICAqCisgICAgICogTm90ZTogSXQncyBhIGdvb2QgcHJhY3RpY2UgZm9yIGEgVFRTIGVuZ2luZSB0byBwcm92aWRlIGEgc2Vuc2libGUgZmFsbGJhY2sgdm9pY2UgYXMgdGhlCisgICAgICogZGVmYXVsdCB2YWx1ZSBmb3Ige0BsaW5rIFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMjRkFMTEJBQ0tfVk9JQ0VfTkFNRX0gcGFyYW1ldGVyIGlmIHRoaXMKKyAgICAgKiBmZWF0dXJlIGlzIHByZXNlbnQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkVBVFVSRV9NQVlfQVVUT0lOU1RBTEwgPSAibWF5QXV0b0luc3RhbGwiOworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU5hbWU7CisgICAgcHJpdmF0ZSBmaW5hbCBMb2NhbGUgbUxvY2FsZTsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtUXVhbGl0eTsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtTGF0ZW5jeTsKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb247CisgICAgcHJpdmF0ZSBmaW5hbCBCdW5kbGUgbVBhcmFtczsKKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQWRkaXRpb25hbEZlYXR1cmVzOworCisgICAgcHJpdmF0ZSBWb2ljZUluZm8oUGFyY2VsIGluKSB7CisgICAgICAgIHRoaXMubU5hbWUgPSBpbi5yZWFkU3RyaW5nKCk7CisgICAgICAgIFN0cmluZ1tdIGxvY2FsZXNEYXRhID0gbmV3IFN0cmluZ1szXTsKKyAgICAgICAgaW4ucmVhZFN0cmluZ0FycmF5KGxvY2FsZXNEYXRhKTsKKyAgICAgICAgdGhpcy5tTG9jYWxlID0gbmV3IExvY2FsZShsb2NhbGVzRGF0YVswXSwgbG9jYWxlc0RhdGFbMV0sIGxvY2FsZXNEYXRhWzJdKTsKKworICAgICAgICB0aGlzLm1RdWFsaXR5ID0gaW4ucmVhZEludCgpOworICAgICAgICB0aGlzLm1MYXRlbmN5ID0gaW4ucmVhZEludCgpOworICAgICAgICB0aGlzLm1SZXF1aXJlc05ldHdvcmtDb25uZWN0aW9uID0gKGluLnJlYWRCeXRlKCkgPT0gMSk7CisKKyAgICAgICAgdGhpcy5tUGFyYW1zID0gaW4ucmVhZEJ1bmRsZSgpOworICAgICAgICB0aGlzLm1BZGRpdGlvbmFsRmVhdHVyZXMgPSBpbi5yZWFkQnVuZGxlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBWb2ljZUluZm8oU3RyaW5nIG5hbWUsCisgICAgICAgICAgICBMb2NhbGUgbG9jYWxlLAorICAgICAgICAgICAgaW50IHF1YWxpdHksCisgICAgICAgICAgICBpbnQgbGF0ZW5jeSwKKyAgICAgICAgICAgIGJvb2xlYW4gcmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbiwKKyAgICAgICAgICAgIEJ1bmRsZSBwYXJhbXMsCisgICAgICAgICAgICBCdW5kbGUgYWRkaXRpb25hbEZlYXR1cmVzKSB7CisgICAgICAgIHRoaXMubU5hbWUgPSBuYW1lOworICAgICAgICB0aGlzLm1Mb2NhbGUgPSBsb2NhbGU7CisgICAgICAgIHRoaXMubVF1YWxpdHkgPSBxdWFsaXR5OworICAgICAgICB0aGlzLm1MYXRlbmN5ID0gbGF0ZW5jeTsKKyAgICAgICAgdGhpcy5tUmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbiA9IHJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb247CisgICAgICAgIHRoaXMubVBhcmFtcyA9IHBhcmFtczsKKyAgICAgICAgdGhpcy5tQWRkaXRpb25hbEZlYXR1cmVzID0gYWRkaXRpb25hbEZlYXR1cmVzOworICAgIH0KKworICAgIC8qKiBCdWlsZGVyLCBhbGxvd3MgVFRTIGVuZ2luZXMgdG8gY3JlYXRlIFZvaWNlSW5mbyBpbnN0YW5jZXMuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBCdWlsZGVyIHsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICAgICAgcHJpdmF0ZSBMb2NhbGUgbG9jYWxlOworICAgICAgICBwcml2YXRlIGludCBxdWFsaXR5ID0gVm9pY2VJbmZvLlFVQUxJVFlfTk9STUFMOworICAgICAgICBwcml2YXRlIGludCBsYXRlbmN5ID0gVm9pY2VJbmZvLkxBVEVOQ1lfTk9STUFMOworICAgICAgICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbjsKKyAgICAgICAgcHJpdmF0ZSBCdW5kbGUgcGFyYW1zOworICAgICAgICBwcml2YXRlIEJ1bmRsZSBhZGRpdGlvbmFsRmVhdHVyZXM7CisKKyAgICAgICAgcHVibGljIEJ1aWxkZXIoKSB7CisKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb3B5IGZpZWxkcyBmcm9tIGdpdmVuIFZvaWNlSW5mbyBpbnN0YW5jZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyKFZvaWNlSW5mbyB2b2ljZUluZm8pIHsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IHZvaWNlSW5mby5tTmFtZTsKKyAgICAgICAgICAgIHRoaXMubG9jYWxlID0gdm9pY2VJbmZvLm1Mb2NhbGU7CisgICAgICAgICAgICB0aGlzLnF1YWxpdHkgPSB2b2ljZUluZm8ubVF1YWxpdHk7CisgICAgICAgICAgICB0aGlzLmxhdGVuY3kgPSB2b2ljZUluZm8ubUxhdGVuY3k7CisgICAgICAgICAgICB0aGlzLnJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24gPSB2b2ljZUluZm8ubVJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb247CisgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IChCdW5kbGUpdm9pY2VJbmZvLm1QYXJhbXMuY2xvbmUoKTsKKyAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbEZlYXR1cmVzID0gKEJ1bmRsZSkgdm9pY2VJbmZvLm1BZGRpdGlvbmFsRmVhdHVyZXMuY2xvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2b2ljZSdzIHVuaXF1ZSBuYW1lLiBJdCB3aWxsIGJlIHVzZWQgYnkgY2xpZW50cyB0byByZWZlcmVuY2UgdGhlIHZvaWNlIHVzZWQgYnkgYQorICAgICAgICAgKiByZXF1ZXN0LgorICAgICAgICAgKgorICAgICAgICAgKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgZWFjaCB2b2ljZSB1c2UgdGhlIHNhbWUgY29uc2lzdGVudCBuYW1lIGR1cmluZyB0aGUgVFRTIHNlcnZpY2UKKyAgICAgICAgICogbGlmZXRpbWUuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB2b2ljZSBsb2NhbGUuIFRoaXMgaGFzIHRvIGJlIGEgdmFsaWQgbG9jYWxlLCBidWlsdCBmcm9tIElTTyA2MzktMSBhbmQgSVNPIDMxNjYtMQorICAgICAgICAgKiB0d28gbGV0dGVyIGNvZGVzLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0TG9jYWxlKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyBtYXAgb2YgYWxsIGF2YWlsYWJsZSByZXF1ZXN0IHBhcmFtZXRlcnMgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICogU29tZSBjb21tb24gcGFyYW1ldGVyIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtc30gc3RhdGljCisgICAgICAgICAqIG1lbWJlcnMuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRQYXJhbXNXaXRoRGVmYXVsdHMoQnVuZGxlIHBhcmFtcykgeworICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIG1hcCBvZiBhZGRpdGlvbmFsIHZvaWNlIGZlYXR1cmVzLiBTb21lIGNvbW1vbiBmZWF0dXJlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbgorICAgICAgICAgKiB7QGxpbmsgVm9pY2VJbmZvfSBzdGF0aWMgbWVtYmVycy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEFkZGl0aW9uYWxGZWF0dXJlcyhCdW5kbGUgYWRkaXRpb25hbEZlYXR1cmVzKSB7CisgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxGZWF0dXJlcyA9IGFkZGl0aW9uYWxGZWF0dXJlczsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZvaWNlIHF1YWxpdHkgKGhpZ2hlciBpcyBiZXR0ZXIpLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0UXVhbGl0eShpbnQgcXVhbGl0eSkgeworICAgICAgICAgICAgdGhpcy5xdWFsaXR5ID0gcXVhbGl0eTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZvaWNlIGxhdGVuY3kgKGxvd2VyIGlzIGJldHRlcikuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRMYXRlbmN5KGludCBsYXRlbmN5KSB7CisgICAgICAgICAgICB0aGlzLmxhdGVuY3kgPSBsYXRlbmN5OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3aGV0aGVyIHRoZSB2b2ljZSByZXF1aXJlcyBuZXR3b3JrIGNvbm5lY3Rpb24gdG8gd29yayBwcm9wZXJseS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24oYm9vbGVhbiByZXF1aXJlc05ldHdvcmtDb25uZWN0aW9uKSB7CisgICAgICAgICAgICB0aGlzLnJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24gPSByZXF1aXJlc05ldHdvcmtDb25uZWN0aW9uOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQHJldHVybiBUaGUgYnVpbHQgVm9pY2VJbmZvIGluc3RhbmNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFZvaWNlSW5mbyBidWlsZCgpIHsKKyAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJOYW1lIGNhbid0IGJlIG51bGwgb3IgZW1wdHkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsb2NhbGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkxvY2FsZSBjYW4ndCBiZSBudWxsIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgVm9pY2VJbmZvKG5hbWUsIGxvY2FsZSwgcXVhbGl0eSwgbGF0ZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAoKHBhcmFtcyA9PSBudWxsKSA/IG5ldyBCdW5kbGUoKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJ1bmRsZSlwYXJhbXMuY2xvbmUoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAoKGFkZGl0aW9uYWxGZWF0dXJlcyA9PSBudWxsKSA/IG5ldyBCdW5kbGUoKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJ1bmRsZSlhZGRpdGlvbmFsRmVhdHVyZXMuY2xvbmUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgZGVzdCwgaW50IGZsYWdzKSB7CisgICAgICAgIGRlc3Qud3JpdGVTdHJpbmcobU5hbWUpOworICAgICAgICBTdHJpbmdbXSBsb2NhbGVzRGF0YSA9IG5ldyBTdHJpbmdbXXttTG9jYWxlLmdldExhbmd1YWdlKCksIG1Mb2NhbGUuZ2V0Q291bnRyeSgpLCBtTG9jYWxlLmdldFZhcmlhbnQoKX07CisgICAgICAgIGRlc3Qud3JpdGVTdHJpbmdBcnJheShsb2NhbGVzRGF0YSk7CisgICAgICAgIGRlc3Qud3JpdGVJbnQobVF1YWxpdHkpOworICAgICAgICBkZXN0LndyaXRlSW50KG1MYXRlbmN5KTsKKyAgICAgICAgZGVzdC53cml0ZUJ5dGUoKGJ5dGUpIChtUmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbiA/IDEgOiAwKSk7CisgICAgICAgIGRlc3Qud3JpdGVCdW5kbGUobVBhcmFtcyk7CisgICAgICAgIGRlc3Qud3JpdGVCdW5kbGUobUFkZGl0aW9uYWxGZWF0dXJlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxWb2ljZUluZm8+IENSRUFUT1IgPSBuZXcgUGFyY2VsYWJsZS5DcmVhdG9yPFZvaWNlSW5mbz4oKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgVm9pY2VJbmZvIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIGluKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFZvaWNlSW5mbyhpbik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFZvaWNlSW5mb1tdIG5ld0FycmF5KGludCBzaXplKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFZvaWNlSW5mb1tzaXplXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFRoZSB2b2ljZSdzIGxvY2FsZQorICAgICAqLworICAgIHB1YmxpYyBMb2NhbGUgZ2V0TG9jYWxlKCkgeworICAgICAgICByZXR1cm4gbUxvY2FsZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFRoZSB2b2ljZSdzIHF1YWxpdHkgKGhpZ2hlciBpcyBiZXR0ZXIpCisgICAgICovCisgICAgcHVibGljIGludCBnZXRRdWFsaXR5KCkgeworICAgICAgICByZXR1cm4gbVF1YWxpdHk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBUaGUgdm9pY2UncyBsYXRlbmN5IChsb3dlciBpcyBiZXR0ZXIpCisgICAgICovCisgICAgcHVibGljIGludCBnZXRMYXRlbmN5KCkgeworICAgICAgICByZXR1cm4gbUxhdGVuY3k7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBEb2VzIHRoZSBWb2ljZSByZXF1aXJlIGEgbmV0d29yayBjb25uZWN0aW9uIHRvIHdvcmsuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZ2V0UmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIG1SZXF1aXJlc05ldHdvcmtDb25uZWN0aW9uOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gQnVuZGxlIG9mIGFsbCBhdmFpbGFibGUgcGFyYW1ldGVycyB3aXRoIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICAgICAqLworICAgIHB1YmxpYyBCdW5kbGUgZ2V0UGFyYW1zV2l0aERlZmF1bHRzKCkgeworICAgICAgICByZXR1cm4gbVBhcmFtczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFVuaXF1ZSB2b2ljZSBuYW1lLgorICAgICAqCisgICAgICogRWFjaCBWb2ljZUluZm8gaGFzIGFuIHVuaXF1ZSBuYW1lLCB0aGF0IHBlcnNpc3RzIHVudGlsIGNsaWVudCBpcyBhc2tlZCB0byByZS1ldmFsdWF0ZSB0aGUKKyAgICAgKiBzZXQgb2YgdGhlIGF2YWlsYWJsZSBsYW5ndWFnZXMgaW4gdGhlIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuQ29ubmVjdGlvbkNhbGxiYWNrcyNvbkVuZ2luZVN0YXR1c0NoYW5nZShhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LkVuZ2luZVN0YXR1cyl9CisgICAgICogY2FsbGJhY2sgKFZvaWNlIG1heSBkaXNhcHBlYXIgZnJvbSB0aGUgc2V0IGlmIHZvaWNlIHdhcyByZW1vdmVkIGJ5IHRoZSB1c2VyKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiBtTmFtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIEFkZGl0aW9uYWwgZmVhdHVyZXMgb2YgdGhlIHZvaWNlLgorICAgICAqLworICAgIHB1YmxpYyBCdW5kbGUgZ2V0QWRkaXRpb25hbEZlYXR1cmVzKCkgeworICAgICAgICByZXR1cm4gbUFkZGl0aW9uYWxGZWF0dXJlczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcig2NCk7CisgICAgICAgIHJldHVybiBidWlsZGVyLmFwcGVuZCgiVm9pY2VJbmZvW05hbWU6ICIpLmFwcGVuZChtTmFtZSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCIgLGxvY2FsZTogIikuYXBwZW5kKG1Mb2NhbGUpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiICxxdWFsaXR5OiAiKS5hcHBlbmQobVF1YWxpdHkpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiICxsYXRlbmN5OiAiKS5hcHBlbmQobUxhdGVuY3kpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiICxyZXF1aXJlc05ldHdvcms6ICIpLmFwcGVuZChtUmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbikKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCIgLHBhcmFtc1dpdGhEZWZhdWx0czogIikuYXBwZW5kKG1QYXJhbXMudG9TdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCIgLGFkZGl0aW9uYWxGZWF0dXJlczogIikuYXBwZW5kKG1BZGRpdGlvbmFsRmVhdHVyZXMudG9TdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCJdIikudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L0h0bWwuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvSHRtbC5qYXZhCmluZGV4IGY4MzlkNTIuLmM4MDMyMWMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvSHRtbC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvSHRtbC5qYXZhCkBAIC00OCwxMSArNDgsOCBAQAogaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5VUkxTcGFuOwogaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5VbmRlcmxpbmVTcGFuOwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5YbWxVdGlsczsKLQogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiAKIC8qKgogICogVGhpcyBjbGFzcyBwcm9jZXNzZXMgSFRNTCBzdHJpbmdzIGludG8gZGlzcGxheWFibGUgc3R5bGVkIHRleHQuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L2Zvcm1hdC9EYXRlVXRpbHMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvZm9ybWF0L0RhdGVVdGlscy5qYXZhCmluZGV4IDIyNjc1YjQuLmQwZWQ4NzEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvZm9ybWF0L0RhdGVVdGlscy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvZm9ybWF0L0RhdGVVdGlscy5qYXZhCkBAIC0yOCw3ICsyOCw2IEBACiBpbXBvcnQgamF2YS51dGlsLkZvcm1hdHRlcjsKIGltcG9ydCBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7CiAKIGltcG9ydCBsaWJjb3JlLmljdS5EYXRlSW50ZXJ2YWxGb3JtYXQ7CiBpbXBvcnQgbGliY29yZS5pY3UuTG9jYWxlRGF0YTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvbWV0aG9kL0hpZGVSZXR1cm5zVHJhbnNmb3JtYXRpb25NZXRob2QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvbWV0aG9kL0hpZGVSZXR1cm5zVHJhbnNmb3JtYXRpb25NZXRob2QuamF2YQppbmRleCBjZTE4NjkyLi5jNmE5MGNhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L21ldGhvZC9IaWRlUmV0dXJuc1RyYW5zZm9ybWF0aW9uTWV0aG9kLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvSGlkZVJldHVybnNUcmFuc2Zvcm1hdGlvbk1ldGhvZC5qYXZhCkBAIC0xNiwxMyArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQudGV4dC5tZXRob2Q7CiAKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LkdldENoYXJzOwotaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmVkOwotaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmVkU3RyaW5nOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7IAotCiAvKioKICAqIFRoaXMgdHJhbnNmb3JtYXRpb24gbWV0aG9kIGNhdXNlcyBhbnkgY2FycmlhZ2UgcmV0dXJuIGNoYXJhY3RlcnMgKFxyKQogICogdG8gYmUgaGlkZGVuIGJ5IGRpc3BsYXlpbmcgdGhlbSBhcyB6ZXJvLXdpZHRoIG5vbi1icmVha2luZyBzcGFjZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvUGFzc3dvcmRUcmFuc2Zvcm1hdGlvbk1ldGhvZC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvUGFzc3dvcmRUcmFuc2Zvcm1hdGlvbk1ldGhvZC5qYXZhCmluZGV4IGI3NjliNzYuLjg4YTY5YjkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvbWV0aG9kL1Bhc3N3b3JkVHJhbnNmb3JtYXRpb25NZXRob2QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L21ldGhvZC9QYXNzd29yZFRyYW5zZm9ybWF0aW9uTWV0aG9kLmphdmEKQEAgLTI1LDcgKzI1LDYgQEAKIGltcG9ydCBhbmRyb2lkLnRleHQuTm9Db3B5U3BhbjsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0V2F0Y2hlcjsKLWltcG9ydCBhbmRyb2lkLnRleHQuU2VsZWN0aW9uOwogaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmVkOwogaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmFibGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlVwZGF0ZUxheW91dDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvbWV0aG9kL1NpbmdsZUxpbmVUcmFuc2Zvcm1hdGlvbk1ldGhvZC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvU2luZ2xlTGluZVRyYW5zZm9ybWF0aW9uTWV0aG9kLmphdmEKaW5kZXggNmEwNWZlNC4uODE4NTI2YSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvU2luZ2xlTGluZVRyYW5zZm9ybWF0aW9uTWV0aG9kLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvU2luZ2xlTGluZVRyYW5zZm9ybWF0aW9uTWV0aG9kLmphdmEKQEAgLTE2LDE1ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC50ZXh0Lm1ldGhvZDsKIAotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLnRleHQuRWRpdGFibGU7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LkdldENoYXJzOwotaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmFibGU7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uZWQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uZWRTdHJpbmc7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLQogLyoqCiAgKiBUaGlzIHRyYW5zZm9ybWF0aW9uIG1ldGhvZCBjYXVzZXMgYW55IG5ld2xpbmUgY2hhcmFjdGVycyAoXG4pIHRvIGJlCiAgKiBkaXNwbGF5ZWQgYXMgc3BhY2VzIGluc3RlYWQgb2YgY2F1c2luZyBsaW5lIGJyZWFrcywgYW5kIGNhdXNlcwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9EcmF3YWJsZU1hcmdpblNwYW4uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvc3R5bGUvRHJhd2FibGVNYXJnaW5TcGFuLmphdmEKaW5kZXggYzI1NjRkNS4uMjBiNjg4NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9EcmF3YWJsZU1hcmdpblNwYW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0RyYXdhYmxlTWFyZ2luU3Bhbi5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uZWQ7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LkxheW91dDsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9EeW5hbWljRHJhd2FibGVTcGFuLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0R5bmFtaWNEcmF3YWJsZVNwYW4uamF2YQppbmRleCA4OWRjNDViLi41YjhhNmRkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0R5bmFtaWNEcmF3YWJsZVNwYW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0R5bmFtaWNEcmF3YWJsZVNwYW4uamF2YQpAQCAtMTcsMTIgKzE3LDkgQEAKIHBhY2thZ2UgYW5kcm9pZC50ZXh0LnN0eWxlOwogCiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50LlN0eWxlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9JY29uTWFyZ2luU3Bhbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9JY29uTWFyZ2luU3Bhbi5qYXZhCmluZGV4IGM3ODZhMTcuLmNmOWE3MDUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvc3R5bGUvSWNvbk1hcmdpblNwYW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0ljb25NYXJnaW5TcGFuLmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uZWQ7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LkxheW91dDsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9MaW5lSGVpZ2h0U3Bhbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9MaW5lSGVpZ2h0U3Bhbi5qYXZhCmluZGV4IDQ0YTE3MDYuLjFlYmVlODIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvc3R5bGUvTGluZUhlaWdodFNwYW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0xpbmVIZWlnaHRTcGFuLmphdmEKQEAgLTE3LDggKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC50ZXh0LnN0eWxlOwogCiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLnRleHQuTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0UGFpbnQ7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTGluZUhlaWdodFNwYW4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvc3R5bGUvTWV0cmljQWZmZWN0aW5nU3Bhbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9NZXRyaWNBZmZlY3RpbmdTcGFuLmphdmEKaW5kZXggOTI1NThlYi4uYTAyYjI3NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9NZXRyaWNBZmZlY3RpbmdTcGFuLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9NZXRyaWNBZmZlY3RpbmdTcGFuLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnRleHQuc3R5bGU7CiAKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0UGFpbnQ7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9TdWdnZXN0aW9uU3Bhbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9TdWdnZXN0aW9uU3Bhbi5qYXZhCmluZGV4IDBlYzdlODQuLjhiNDA5NTMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvc3R5bGUvU3VnZ2VzdGlvblNwYW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL1N1Z2dlc3Rpb25TcGFuLmphdmEKQEAgLTE2NiwyNSArMTY2LDI1IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgZGVmU3R5bGUgPSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIudGV4dEFwcGVhcmFuY2VNaXNzcGVsbGVkU3VnZ2VzdGlvbjsKKyAgICAgICAgaW50IGRlZlN0eWxlQXR0ciA9IGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci50ZXh0QXBwZWFyYW5jZU1pc3NwZWxsZWRTdWdnZXN0aW9uOwogICAgICAgICBUeXBlZEFycmF5IHR5cGVkQXJyYXkgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgbnVsbCwgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3VnZ2VzdGlvblNwYW4sIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgICAgICAgICBudWxsLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdWdnZXN0aW9uU3BhbiwgZGVmU3R5bGVBdHRyLCAwKTsKICAgICAgICAgbU1pc3NwZWxsZWRVbmRlcmxpbmVUaGlja25lc3MgPSB0eXBlZEFycmF5LmdldERpbWVuc2lvbigKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdWdnZXN0aW9uU3Bhbl90ZXh0VW5kZXJsaW5lVGhpY2tuZXNzLCAwKTsKICAgICAgICAgbU1pc3NwZWxsZWRVbmRlcmxpbmVDb2xvciA9IHR5cGVkQXJyYXkuZ2V0Q29sb3IoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3VnZ2VzdGlvblNwYW5fdGV4dFVuZGVybGluZUNvbG9yLCBDb2xvci5CTEFDSyk7CiAKLSAgICAgICAgZGVmU3R5bGUgPSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIudGV4dEFwcGVhcmFuY2VFYXN5Q29ycmVjdFN1Z2dlc3Rpb247CisgICAgICAgIGRlZlN0eWxlQXR0ciA9IGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci50ZXh0QXBwZWFyYW5jZUVhc3lDb3JyZWN0U3VnZ2VzdGlvbjsKICAgICAgICAgdHlwZWRBcnJheSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICBudWxsLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdWdnZXN0aW9uU3BhbiwgZGVmU3R5bGUsIDApOworICAgICAgICAgICAgICAgIG51bGwsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN1Z2dlc3Rpb25TcGFuLCBkZWZTdHlsZUF0dHIsIDApOwogICAgICAgICBtRWFzeUNvcnJlY3RVbmRlcmxpbmVUaGlja25lc3MgPSB0eXBlZEFycmF5LmdldERpbWVuc2lvbigKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdWdnZXN0aW9uU3Bhbl90ZXh0VW5kZXJsaW5lVGhpY2tuZXNzLCAwKTsKICAgICAgICAgbUVhc3lDb3JyZWN0VW5kZXJsaW5lQ29sb3IgPSB0eXBlZEFycmF5LmdldENvbG9yKAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN1Z2dlc3Rpb25TcGFuX3RleHRVbmRlcmxpbmVDb2xvciwgQ29sb3IuQkxBQ0spOwogCi0gICAgICAgIGRlZlN0eWxlID0gY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLnRleHRBcHBlYXJhbmNlQXV0b0NvcnJlY3Rpb25TdWdnZXN0aW9uOworICAgICAgICBkZWZTdHlsZUF0dHIgPSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIudGV4dEFwcGVhcmFuY2VBdXRvQ29ycmVjdGlvblN1Z2dlc3Rpb247CiAgICAgICAgIHR5cGVkQXJyYXkgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgbnVsbCwgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3VnZ2VzdGlvblNwYW4sIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgICAgICAgICBudWxsLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdWdnZXN0aW9uU3BhbiwgZGVmU3R5bGVBdHRyLCAwKTsKICAgICAgICAgbUF1dG9Db3JyZWN0aW9uVW5kZXJsaW5lVGhpY2tuZXNzID0gdHlwZWRBcnJheS5nZXREaW1lbnNpb24oCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3VnZ2VzdGlvblNwYW5fdGV4dFVuZGVybGluZVRoaWNrbmVzcywgMCk7CiAgICAgICAgIG1BdXRvQ29ycmVjdGlvblVuZGVybGluZUNvbG9yID0gdHlwZWRBcnJheS5nZXRDb2xvcigKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3RyYW5zaXRpb24vUmVjb2xvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9SZWNvbG9yLmphdmEKaW5kZXggNzAxMTFkMS4uMTYzOGY2NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9SZWNvbG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9SZWNvbG9yLmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC50cmFuc2l0aW9uOwogCiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3I7Ci1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQXJnYkV2YWx1YXRvcjsKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkNvbG9yRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKQEAgLTc1LDggKzc0LDggQEAKICAgICAgICAgICAgIGlmIChzdGFydENvbG9yLmdldENvbG9yKCkgIT0gZW5kQ29sb3IuZ2V0Q29sb3IoKSkgewogICAgICAgICAgICAgICAgIGVuZENvbG9yLnNldENvbG9yKHN0YXJ0Q29sb3IuZ2V0Q29sb3IoKSk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdEFuaW1hdG9yLm9mT2JqZWN0KGVuZEJhY2tncm91bmQsICJjb2xvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXJnYkV2YWx1YXRvcigpLCBzdGFydENvbG9yLmdldENvbG9yKCksIGVuZENvbG9yLmdldENvbG9yKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RBbmltYXRvci5vZkFyZ2IoZW5kQmFja2dyb3VuZCwgImNvbG9yIiwgc3RhcnRDb2xvci5nZXRDb2xvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ29sb3IuZ2V0Q29sb3IoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2VvZiBUZXh0VmlldykgewpAQCAtODYsOCArODUsNyBAQAogICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IGVuZCkgewogICAgICAgICAgICAgICAgIHRleHRWaWV3LnNldFRleHRDb2xvcihlbmQpOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RBbmltYXRvci5vZk9iamVjdCh0ZXh0VmlldywgInRleHRDb2xvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXJnYkV2YWx1YXRvcigpLCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0QW5pbWF0b3Iub2ZBcmdiKHRleHRWaWV3LCAidGV4dENvbG9yIiwgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC90cmFuc2l0aW9uL1NjZW5lLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC90cmFuc2l0aW9uL1NjZW5lLmphdmEKaW5kZXggZTFmMTg5Ni4uNDI2N2E2NSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9TY2VuZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3RyYW5zaXRpb24vU2NlbmUuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIGludCBtTGF5b3V0SWQgPSAtMTsKICAgICBwcml2YXRlIFZpZXdHcm91cCBtU2NlbmVSb290OwotICAgIHByaXZhdGUgVmlld0dyb3VwIG1MYXlvdXQ7IC8vIGFsdGVybmF0aXZlIHRvIGxheW91dElkCisgICAgcHJpdmF0ZSBWaWV3IG1MYXlvdXQ7IC8vIGFsdGVybmF0aXZlIHRvIGxheW91dElkCiAgICAgUnVubmFibGUgbUVudGVyQWN0aW9uLCBtRXhpdEFjdGlvbjsKIAogICAgIC8qKgpAQCAtMTE0LDYgKzExNCwxNSBAQAogICAgICAqIEBwYXJhbSBsYXlvdXQgVGhlIHZpZXcgaGllcmFyY2h5IG9mIHRoaXMgc2NlbmUsIGFkZGVkIGFzIGEgY2hpbGQKICAgICAgKiBvZiBzY2VuZVJvb3Qgd2hlbiB0aGlzIHNjZW5lIGlzIGVudGVyZWQuCiAgICAgICovCisgICAgcHVibGljIFNjZW5lKFZpZXdHcm91cCBzY2VuZVJvb3QsIFZpZXcgbGF5b3V0KSB7CisgICAgICAgIG1TY2VuZVJvb3QgPSBzY2VuZVJvb3Q7CisgICAgICAgIG1MYXlvdXQgPSBsYXlvdXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayAjU2NlbmUoVmlld0dyb3VwLCBWaWV3KX0uCisgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgU2NlbmUoVmlld0dyb3VwIHNjZW5lUm9vdCwgVmlld0dyb3VwIGxheW91dCkgewogICAgICAgICBtU2NlbmVSb290ID0gc2NlbmVSb290OwogICAgICAgICBtTGF5b3V0ID0gbGF5b3V0OwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uSW5mbGF0ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbkluZmxhdGVyLmphdmEKaW5kZXggOWY3N2Q1ZS4uOWZhNTU0YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uSW5mbGF0ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25JbmZsYXRlci5qYXZhCkBAIC0yMCw2ICsyMCw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuWG1sUmVzb3VyY2VQYXJzZXI7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5YbWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkluZmxhdGVFeGNlcHRpb247CkBAIC0yOTEsMTkgKzI5Miw0MCBAQAogICAgICAgICBpbnQgdG9JZCA9IGEuZ2V0UmVzb3VyY2VJZCgKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5UcmFuc2l0aW9uTWFuYWdlcl90b1NjZW5lLCAtMSk7CiAgICAgICAgIGlmICh0b0lkID49IDApIHRvU2NlbmUgPSBTY2VuZS5nZXRTY2VuZUZvckxheW91dChzY2VuZVJvb3QsIHRvSWQsIG1Db250ZXh0KTsKKyAgICAgICAgU3RyaW5nIGZyb21OYW1lID0gYS5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVHJhbnNpdGlvbk1hbmFnZXJfZnJvbVNjZW5lTmFtZSk7CisgICAgICAgIFN0cmluZyB0b05hbWUgPSBhLmdldFN0cmluZygKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5UcmFuc2l0aW9uTWFuYWdlcl90b1NjZW5lTmFtZSk7CiAgICAgICAgIGlmICh0cmFuc2l0aW9uSWQgPj0gMCkgewogICAgICAgICAgICAgVHJhbnNpdGlvbiB0cmFuc2l0aW9uID0gaW5mbGF0ZVRyYW5zaXRpb24odHJhbnNpdGlvbklkKTsKICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZiAoZnJvbVNjZW5lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRvU2NlbmUgPT0gbnVsbCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm8gbWF0Y2hpbmcgdG9TY2VuZSBmb3IgZ2l2ZW4gZnJvbVNjZW5lICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIHRyYW5zaXRpb24gSUQgIiArIHRyYW5zaXRpb25JZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaGFzRGVzdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAodG9TY2VuZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uTWFuYWdlci5zZXRUcmFuc2l0aW9uKGZyb21TY2VuZSwgdG9TY2VuZSwgdHJhbnNpdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNEZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodG9OYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbk1hbmFnZXIuc2V0VHJhbnNpdGlvbihmcm9tU2NlbmUsIHRvTmFtZSwgdHJhbnNpdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNEZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghaGFzRGVzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vIG1hdGNoaW5nIHRvU2NlbmUgb3IgdG9TY2VuZU5hbWUgZm9yIGdpdmVuICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbVNjZW5lIGZvciB0cmFuc2l0aW9uIElEICIgKyB0cmFuc2l0aW9uSWQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b0lkID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbk1hbmFnZXIuc2V0VHJhbnNpdGlvbih0b1NjZW5lLCB0cmFuc2l0aW9uKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZyb21OYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRvU2NlbmUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbk1hbmFnZXIuc2V0VHJhbnNpdGlvbihmcm9tTmFtZSwgdG9TY2VuZSwgdHJhbnNpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm8gbWF0Y2hpbmcgdG9TY2VuZSBmb3IgZ2l2ZW4gZnJvbVNjZW5lTmFtZSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciB0cmFuc2l0aW9uIElEICIgKyB0cmFuc2l0aW9uSWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGEucmVjeWNsZSgpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uTWFuYWdlci5qYXZhCmluZGV4IDNiZjY3OTAuLjAxMDZmN2ZiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25NYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uTWFuYWdlci5qYXZhCkBAIC02Nyw5ICs2NywxNSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgVHJhbnNpdGlvbiBzRGVmYXVsdFRyYW5zaXRpb24gPSBuZXcgQXV0b1RyYW5zaXRpb24oKTsKIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVNUFRZX1NUUklOR1MgPSBuZXcgU3RyaW5nWzBdOworCiAgICAgQXJyYXlNYXA8U2NlbmUsIFRyYW5zaXRpb24+IG1TY2VuZVRyYW5zaXRpb25zID0gbmV3IEFycmF5TWFwPFNjZW5lLCBUcmFuc2l0aW9uPigpOwogICAgIEFycmF5TWFwPFNjZW5lLCBBcnJheU1hcDxTY2VuZSwgVHJhbnNpdGlvbj4+IG1TY2VuZVBhaXJUcmFuc2l0aW9ucyA9CiAgICAgICAgICAgICBuZXcgQXJyYXlNYXA8U2NlbmUsIEFycmF5TWFwPFNjZW5lLCBUcmFuc2l0aW9uPj4oKTsKKyAgICBBcnJheU1hcDxTY2VuZSwgQXJyYXlNYXA8U3RyaW5nLCBUcmFuc2l0aW9uPj4gbVNjZW5lTmFtZVRyYW5zaXRpb25zID0KKyAgICAgICAgICAgIG5ldyBBcnJheU1hcDxTY2VuZSwgQXJyYXlNYXA8U3RyaW5nLCBUcmFuc2l0aW9uPj4oKTsKKyAgICBBcnJheU1hcDxTdHJpbmcsIEFycmF5TWFwPFNjZW5lLCBUcmFuc2l0aW9uPj4gbU5hbWVTY2VuZVRyYW5zaXRpb25zID0KKyAgICAgICAgICAgIG5ldyBBcnJheU1hcDxTdHJpbmcsIEFycmF5TWFwPFNjZW5lLCBUcmFuc2l0aW9uPj4oKTsKICAgICBwcml2YXRlIHN0YXRpYyBUaHJlYWRMb2NhbDxXZWFrUmVmZXJlbmNlPEFycmF5TWFwPFZpZXdHcm91cCwgQXJyYXlMaXN0PFRyYW5zaXRpb24+Pj4+CiAgICAgICAgICAgICBzUnVubmluZ1RyYW5zaXRpb25zID0KICAgICAgICAgICAgIG5ldyBUaHJlYWRMb2NhbDxXZWFrUmVmZXJlbmNlPEFycmF5TWFwPFZpZXdHcm91cCwgQXJyYXlMaXN0PFRyYW5zaXRpb24+Pj4+KCk7CkBAIC0yMTgsNiArMjI0LDE0MSBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSB0cmFuc2l0aW9uIGZyb20gYSBuYW1lZCBzY2VuZSB0byBhIHRhcmdldCBkZWZpbmVkIHNjZW5lIGlmIG9uZSBoYXMgYmVlbgorICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFRyYW5zaXRpb25NYW5hZ2VyLgorICAgICAqCisgICAgICogPHA+QSBuYW1lZCBzY2VuZSBpcyBhbiBpbmRpcmVjdCBsaW5rIGZvciBhIHRyYW5zaXRpb24uIEZ1bmRhbWVudGFsbHkgYSBuYW1lZAorICAgICAqIHNjZW5lIHJlcHJlc2VudHMgYSBwb3RlbnRpYWxseSBhcmJpdHJhcnkgaW50ZXJzZWN0aW9uIHBvaW50IG9mIHR3byBvdGhlcndpc2UgaW5kZXBlbmRlbnQKKyAgICAgKiB0cmFuc2l0aW9ucy4gQWN0aXZpdHkgQSBtYXkgZGVmaW5lIGEgdHJhbnNpdGlvbiBmcm9tIHNjZW5lIFggdG8gImNvbS5leGFtcGxlLnNjZW5lLkZPTyIKKyAgICAgKiB3aGlsZSBhY3Rpdml0eSBCIG1heSBkZWZpbmUgYSB0cmFuc2l0aW9uIGZyb20gc2NlbmUgImNvbS5leGFtcGxlLnNjZW5lLkZPTyIgdG8gc2NlbmUgWS4KKyAgICAgKiBJbiB0aGlzIHdheSBhcHBsaWNhdGlvbnMgbWF5IGRlZmluZSBhbiBBUEkgZm9yIG1vcmUgc29waGlzdGljYXRlZCB0cmFuc2l0aW9ucyBiZXR3ZWVuCisgICAgICogY2FsbGVyIGFuZCBjYWxsZWQgYWN0aXZpdGllcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHdheSB0aGF0IDxjb2RlPkludGVudDwvY29kZT4gZXh0cmFzCisgICAgICogZGVmaW5lIEFQSXMgZm9yIGFyZ3VtZW50cyBhbmQgZGF0YSBwcm9wYWdhdGlvbiBiZXR3ZWVuIGFjdGl2aXRpZXMuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGZyb21OYW1lIE5hbWVkIHNjZW5lIHRoYXQgdGhpcyB0cmFuc2l0aW9uIGNvcnJlc3BvbmRzIHRvCisgICAgICogQHBhcmFtIHRvU2NlbmUgVGFyZ2V0IHNjZW5lIHRoYXQgdGhpcyB0cmFuc2l0aW9uIHdpbGwgbW92ZSB0bworICAgICAqIEByZXR1cm4gVHJhbnNpdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBmcm9tTmFtZSBhbmQgdG9TY2VuZSBvciBudWxsCisgICAgICogICAgICAgICBpZiBubyBhc3NvY2lhdGlvbiBleGlzdHMgaW4gdGhpcyBUcmFuc2l0aW9uTWFuYWdlcgorICAgICAqCisgICAgICogQHNlZSAjc2V0VHJhbnNpdGlvbihTdHJpbmcsIFNjZW5lLCBUcmFuc2l0aW9uKQorICAgICAqLworICAgIHB1YmxpYyBUcmFuc2l0aW9uIGdldE5hbWVkVHJhbnNpdGlvbihTdHJpbmcgZnJvbU5hbWUsIFNjZW5lIHRvU2NlbmUpIHsKKyAgICAgICAgQXJyYXlNYXA8U2NlbmUsIFRyYW5zaXRpb24+IG0gPSBtTmFtZVNjZW5lVHJhbnNpdGlvbnMuZ2V0KGZyb21OYW1lKTsKKyAgICAgICAgaWYgKG0gIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG0uZ2V0KHRvU2NlbmUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSB0cmFuc2l0aW9uIGZyb20gYSBkZWZpbmVkIHNjZW5lIHRvIGEgdGFyZ2V0IG5hbWVkIHNjZW5lIGlmIG9uZSBoYXMgYmVlbgorICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFRyYW5zaXRpb25NYW5hZ2VyLgorICAgICAqCisgICAgICogPHA+QSBuYW1lZCBzY2VuZSBpcyBhbiBpbmRpcmVjdCBsaW5rIGZvciBhIHRyYW5zaXRpb24uIEZ1bmRhbWVudGFsbHkgYSBuYW1lZAorICAgICAqIHNjZW5lIHJlcHJlc2VudHMgYSBwb3RlbnRpYWxseSBhcmJpdHJhcnkgaW50ZXJzZWN0aW9uIHBvaW50IG9mIHR3byBvdGhlcndpc2UgaW5kZXBlbmRlbnQKKyAgICAgKiB0cmFuc2l0aW9ucy4gQWN0aXZpdHkgQSBtYXkgZGVmaW5lIGEgdHJhbnNpdGlvbiBmcm9tIHNjZW5lIFggdG8gImNvbS5leGFtcGxlLnNjZW5lLkZPTyIKKyAgICAgKiB3aGlsZSBhY3Rpdml0eSBCIG1heSBkZWZpbmUgYSB0cmFuc2l0aW9uIGZyb20gc2NlbmUgImNvbS5leGFtcGxlLnNjZW5lLkZPTyIgdG8gc2NlbmUgWS4KKyAgICAgKiBJbiB0aGlzIHdheSBhcHBsaWNhdGlvbnMgbWF5IGRlZmluZSBhbiBBUEkgZm9yIG1vcmUgc29waGlzdGljYXRlZCB0cmFuc2l0aW9ucyBiZXR3ZWVuCisgICAgICogY2FsbGVyIGFuZCBjYWxsZWQgYWN0aXZpdGllcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHdheSB0aGF0IDxjb2RlPkludGVudDwvY29kZT4gZXh0cmFzCisgICAgICogZGVmaW5lIEFQSXMgZm9yIGFyZ3VtZW50cyBhbmQgZGF0YSBwcm9wYWdhdGlvbiBiZXR3ZWVuIGFjdGl2aXRpZXMuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGZyb21TY2VuZSBTY2VuZSB0aGF0IHRoaXMgdHJhbnNpdGlvbiBzdGFydHMgZnJvbQorICAgICAqIEBwYXJhbSB0b05hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHNjZW5lCisgICAgICogQHJldHVybiBUcmFuc2l0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGZyb21TY2VuZSBhbmQgdG9OYW1lIG9yIG51bGwKKyAgICAgKiAgICAgICAgIGlmIG5vIGFzc29jaWF0aW9uIGV4aXN0cyBpbiB0aGlzIFRyYW5zaXRpb25NYW5hZ2VyCisgICAgICovCisgICAgcHVibGljIFRyYW5zaXRpb24gZ2V0TmFtZWRUcmFuc2l0aW9uKFNjZW5lIGZyb21TY2VuZSwgU3RyaW5nIHRvTmFtZSkgeworICAgICAgICBBcnJheU1hcDxTdHJpbmcsIFRyYW5zaXRpb24+IG0gPSBtU2NlbmVOYW1lVHJhbnNpdGlvbnMuZ2V0KGZyb21TY2VuZSk7CisgICAgICAgIGlmIChtICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBtLmdldCh0b05hbWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSBzdXBwb3J0ZWQgdGFyZ2V0IG5hbWVkIHNjZW5lcyB3aGVuIHRyYW5zaXRpb25pbmcgYXdheSBmcm9tIHRoZSBnaXZlbiBzY2VuZS4KKyAgICAgKgorICAgICAqIDxwPkEgbmFtZWQgc2NlbmUgaXMgYW4gaW5kaXJlY3QgbGluayBmb3IgYSB0cmFuc2l0aW9uLiBGdW5kYW1lbnRhbGx5IGEgbmFtZWQKKyAgICAgKiBzY2VuZSByZXByZXNlbnRzIGEgcG90ZW50aWFsbHkgYXJiaXRyYXJ5IGludGVyc2VjdGlvbiBwb2ludCBvZiB0d28gb3RoZXJ3aXNlIGluZGVwZW5kZW50CisgICAgICogdHJhbnNpdGlvbnMuIEFjdGl2aXR5IEEgbWF5IGRlZmluZSBhIHRyYW5zaXRpb24gZnJvbSBzY2VuZSBYIHRvICJjb20uZXhhbXBsZS5zY2VuZS5GT08iCisgICAgICogd2hpbGUgYWN0aXZpdHkgQiBtYXkgZGVmaW5lIGEgdHJhbnNpdGlvbiBmcm9tIHNjZW5lICJjb20uZXhhbXBsZS5zY2VuZS5GT08iIHRvIHNjZW5lIFkuCisgICAgICogSW4gdGhpcyB3YXkgYXBwbGljYXRpb25zIG1heSBkZWZpbmUgYW4gQVBJIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgdHJhbnNpdGlvbnMgYmV0d2VlbgorICAgICAqIGNhbGxlciBhbmQgY2FsbGVkIGFjdGl2aXRpZXMgdmVyeSBzaW1pbGFyIHRvIHRoZSB3YXkgdGhhdCA8Y29kZT5JbnRlbnQ8L2NvZGU+IGV4dHJhcworICAgICAqIGRlZmluZSBBUElzIGZvciBhcmd1bWVudHMgYW5kIGRhdGEgcHJvcGFnYXRpb24gYmV0d2VlbiBhY3Rpdml0aWVzLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmcm9tU2NlbmUgU2NlbmUgdG8gdHJhbnNpdGlvbiBmcm9tCisgICAgICogQHJldHVybiBBbiBhcnJheSBvZiBTdHJpbmdzIG5hbWluZyBlYWNoIHN1cHBvcnRlZCB0cmFuc2l0aW9uIHN0YXJ0aW5nIGZyb20KKyAgICAgKiAgICAgICAgIDxjb2RlPmZyb21TY2VuZTwvY29kZT4uIElmIG5vIHRyYW5zaXRpb25zIHRvIGEgbmFtZWQgc2NlbmUgZnJvbSB0aGUgZ2l2ZW4KKyAgICAgKiAgICAgICAgIHNjZW5lIGFyZSBzdXBwb3J0ZWQgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIFN0cmluZ1tdIG9mIGxlbmd0aCAwLgorICAgICAqCisgICAgICogQHNlZSAjc2V0VHJhbnNpdGlvbihTY2VuZSwgU3RyaW5nLCBUcmFuc2l0aW9uKQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUYXJnZXRTY2VuZU5hbWVzKFNjZW5lIGZyb21TY2VuZSkgeworICAgICAgICBmaW5hbCBBcnJheU1hcDxTdHJpbmcsIFRyYW5zaXRpb24+IG0gPSBtU2NlbmVOYW1lVHJhbnNpdGlvbnMuZ2V0KGZyb21TY2VuZSk7CisgICAgICAgIGlmIChtID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdTOworICAgICAgICB9CisgICAgICAgIGZpbmFsIGludCBjb3VudCA9IG0uc2l6ZSgpOworICAgICAgICBmaW5hbCBTdHJpbmdbXSByZXN1bHQgPSBuZXcgU3RyaW5nW2NvdW50XTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICByZXN1bHRbaV0gPSBtLmtleUF0KGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IGEgdHJhbnNpdGlvbiBmcm9tIGEgc3BlY2lmaWMgc2NlbmUgdG8gYSBuYW1lZCBzY2VuZS4KKyAgICAgKgorICAgICAqIDxwPkEgbmFtZWQgc2NlbmUgaXMgYW4gaW5kaXJlY3QgbGluayBmb3IgYSB0cmFuc2l0aW9uLiBGdW5kYW1lbnRhbGx5IGEgbmFtZWQKKyAgICAgKiBzY2VuZSByZXByZXNlbnRzIGEgcG90ZW50aWFsbHkgYXJiaXRyYXJ5IGludGVyc2VjdGlvbiBwb2ludCBvZiB0d28gb3RoZXJ3aXNlIGluZGVwZW5kZW50CisgICAgICogdHJhbnNpdGlvbnMuIEFjdGl2aXR5IEEgbWF5IGRlZmluZSBhIHRyYW5zaXRpb24gZnJvbSBzY2VuZSBYIHRvICJjb20uZXhhbXBsZS5zY2VuZS5GT08iCisgICAgICogd2hpbGUgYWN0aXZpdHkgQiBtYXkgZGVmaW5lIGEgdHJhbnNpdGlvbiBmcm9tIHNjZW5lICJjb20uZXhhbXBsZS5zY2VuZS5GT08iIHRvIHNjZW5lIFkuCisgICAgICogSW4gdGhpcyB3YXkgYXBwbGljYXRpb25zIG1heSBkZWZpbmUgYW4gQVBJIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgdHJhbnNpdGlvbnMgYmV0d2VlbgorICAgICAqIGNhbGxlciBhbmQgY2FsbGVkIGFjdGl2aXRpZXMgdmVyeSBzaW1pbGFyIHRvIHRoZSB3YXkgdGhhdCA8Y29kZT5JbnRlbnQ8L2NvZGU+IGV4dHJhcworICAgICAqIGRlZmluZSBBUElzIGZvciBhcmd1bWVudHMgYW5kIGRhdGEgcHJvcGFnYXRpb24gYmV0d2VlbiBhY3Rpdml0aWVzLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmcm9tU2NlbmUgU2NlbmUgdG8gdHJhbnNpdGlvbiBmcm9tCisgICAgICogQHBhcmFtIHRvTmFtZSBOYW1lZCBzY2VuZSB0byB0cmFuc2l0aW9uIHRvCisgICAgICogQHBhcmFtIHRyYW5zaXRpb24gVHJhbnNpdGlvbiB0byB1c2UKKyAgICAgKgorICAgICAqIEBzZWUgI2dldFRhcmdldFNjZW5lTmFtZXMoU2NlbmUpCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VHJhbnNpdGlvbihTY2VuZSBmcm9tU2NlbmUsIFN0cmluZyB0b05hbWUsIFRyYW5zaXRpb24gdHJhbnNpdGlvbikgeworICAgICAgICBBcnJheU1hcDxTdHJpbmcsIFRyYW5zaXRpb24+IG0gPSBtU2NlbmVOYW1lVHJhbnNpdGlvbnMuZ2V0KGZyb21TY2VuZSk7CisgICAgICAgIGlmIChtID09IG51bGwpIHsKKyAgICAgICAgICAgIG0gPSBuZXcgQXJyYXlNYXA8U3RyaW5nLCBUcmFuc2l0aW9uPigpOworICAgICAgICAgICAgbVNjZW5lTmFtZVRyYW5zaXRpb25zLnB1dChmcm9tU2NlbmUsIG0pOworICAgICAgICB9CisgICAgICAgIG0ucHV0KHRvTmFtZSwgdHJhbnNpdGlvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IGEgdHJhbnNpdGlvbiBmcm9tIGEgbmFtZWQgc2NlbmUgdG8gYSBjb25jcmV0ZSBzY2VuZS4KKyAgICAgKgorICAgICAqIDxwPkEgbmFtZWQgc2NlbmUgaXMgYW4gaW5kaXJlY3QgbGluayBmb3IgYSB0cmFuc2l0aW9uLiBGdW5kYW1lbnRhbGx5IGEgbmFtZWQKKyAgICAgKiBzY2VuZSByZXByZXNlbnRzIGEgcG90ZW50aWFsbHkgYXJiaXRyYXJ5IGludGVyc2VjdGlvbiBwb2ludCBvZiB0d28gb3RoZXJ3aXNlIGluZGVwZW5kZW50CisgICAgICogdHJhbnNpdGlvbnMuIEFjdGl2aXR5IEEgbWF5IGRlZmluZSBhIHRyYW5zaXRpb24gZnJvbSBzY2VuZSBYIHRvICJjb20uZXhhbXBsZS5zY2VuZS5GT08iCisgICAgICogd2hpbGUgYWN0aXZpdHkgQiBtYXkgZGVmaW5lIGEgdHJhbnNpdGlvbiBmcm9tIHNjZW5lICJjb20uZXhhbXBsZS5zY2VuZS5GT08iIHRvIHNjZW5lIFkuCisgICAgICogSW4gdGhpcyB3YXkgYXBwbGljYXRpb25zIG1heSBkZWZpbmUgYW4gQVBJIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgdHJhbnNpdGlvbnMgYmV0d2VlbgorICAgICAqIGNhbGxlciBhbmQgY2FsbGVkIGFjdGl2aXRpZXMgdmVyeSBzaW1pbGFyIHRvIHRoZSB3YXkgdGhhdCA8Y29kZT5JbnRlbnQ8L2NvZGU+IGV4dHJhcworICAgICAqIGRlZmluZSBBUElzIGZvciBhcmd1bWVudHMgYW5kIGRhdGEgcHJvcGFnYXRpb24gYmV0d2VlbiBhY3Rpdml0aWVzLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmcm9tTmFtZSBOYW1lZCBzY2VuZSB0byB0cmFuc2l0aW9uIGZyb20KKyAgICAgKiBAcGFyYW0gdG9TY2VuZSBTY2VuZSB0byB0cmFuc2l0aW9uIHRvCisgICAgICogQHBhcmFtIHRyYW5zaXRpb24gVHJhbnNpdGlvbiB0byB1c2UKKyAgICAgKgorICAgICAqIEBzZWUgI2dldE5hbWVkVHJhbnNpdGlvbihTdHJpbmcsIFNjZW5lKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zaXRpb24oU3RyaW5nIGZyb21OYW1lLCBTY2VuZSB0b1NjZW5lLCBUcmFuc2l0aW9uIHRyYW5zaXRpb24pIHsKKyAgICAgICAgQXJyYXlNYXA8U2NlbmUsIFRyYW5zaXRpb24+IG0gPSBtTmFtZVNjZW5lVHJhbnNpdGlvbnMuZ2V0KGZyb21OYW1lKTsKKyAgICAgICAgaWYgKG0gPT0gbnVsbCkgeworICAgICAgICAgICAgbSA9IG5ldyBBcnJheU1hcDxTY2VuZSwgVHJhbnNpdGlvbj4oKTsKKyAgICAgICAgICAgIG1OYW1lU2NlbmVUcmFuc2l0aW9ucy5wdXQoZnJvbU5hbWUsIG0pOworICAgICAgICB9CisgICAgICAgIG0ucHV0KHRvU2NlbmUsIHRyYW5zaXRpb24pOworICAgIH0KKworICAgIC8qKgogICAgICAqIFRoaXMgcHJpdmF0ZSB1dGlsaXR5IGNsYXNzIGlzIHVzZWQgdG8gbGlzdGVuIGZvciBib3RoIE9uUHJlRHJhdyBhbmQKICAgICAgKiBPbkF0dGFjaFN0YXRlQ2hhbmdlIGV2ZW50cy4gT25QcmVEcmF3IGV2ZW50cyBhcmUgdGhlIG1haW4gb25lcyB3ZSBjYXJlCiAgICAgICogYWJvdXQgc2luY2UgdGhhdCdzIHdoYXQgdHJpZ2dlcnMgdGhlIHRyYW5zaXRpb24gdG8gdGFrZSBwbGFjZS4KQEAgLTMyOSw3ICs0NzAsNiBAQAogICAgICAgICAvLyBBdXRvIHRyYW5zaXRpb24gaWYgdGhlcmUgaXMgbm8gdHJhbnNpdGlvbiBkZWNsYXJlZCBmb3IgdGhlIFNjZW5lLCBidXQgdGhlcmUgaXMKICAgICAgICAgLy8gYSByb290IG9yIHBhcmVudCB2aWV3CiAgICAgICAgIGNoYW5nZVNjZW5lKHNjZW5lLCBnZXRUcmFuc2l0aW9uKHNjZW5lKSk7Ci0KICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvRXZlbnRMb2dUYWdzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0V2ZW50TG9nVGFncy5qYXZhCmluZGV4IDhjMTg0MTcuLmY0Y2U0ZmQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvRXZlbnRMb2dUYWdzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9FdmVudExvZ1RhZ3MuamF2YQpAQCAtMTYsMTQgKzE2LDggQEAKIAogcGFja2FnZSBhbmRyb2lkLnV0aWw7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKIAogLyoqCiAgKiBAZGVwcmVjYXRlZCBUaGlzIGNsYXNzIGlzIG5vIGxvbmdlciBmdW5jdGlvbmFsLgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9Mb2NhbExvZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9Mb2NhbExvZy5qYXZhCmluZGV4IDY0MWQxYjQuLmVlYjZkNTggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9jYWxMb2cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvY2FsTG9nLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9uZ0FycmF5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvbmdBcnJheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MGE4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvbmdBcnJheS5qYXZhCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnV0aWw7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFycmF5VXRpbHM7CisKKy8qKgorICogSW1wbGVtZW50cyBhIGdyb3dpbmcgYXJyYXkgb2YgbG9uZyBwcmltaXRpdmVzLgorICoKKyAqIEBoaWRlCisgKi8KK3B1YmxpYyBjbGFzcyBMb25nQXJyYXkgaW1wbGVtZW50cyBDbG9uZWFibGUgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5fQ0FQQUNJVFlfSU5DUkVNRU5UID0gMTI7CisKKyAgICBwcml2YXRlIGxvbmdbXSBtVmFsdWVzOworICAgIHByaXZhdGUgaW50IG1TaXplOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBlbXB0eSBMb25nQXJyYXkgd2l0aCB0aGUgZGVmYXVsdCBpbml0aWFsIGNhcGFjaXR5LgorICAgICAqLworICAgIHB1YmxpYyBMb25nQXJyYXkoKSB7CisgICAgICAgIHRoaXMoMTApOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gZW1wdHkgTG9uZ0FycmF5IHdpdGggdGhlIHNwZWNpZmllZCBpbml0aWFsIGNhcGFjaXR5LgorICAgICAqLworICAgIHB1YmxpYyBMb25nQXJyYXkoaW50IGluaXRpYWxDYXBhY2l0eSkgeworICAgICAgICBpZiAoaW5pdGlhbENhcGFjaXR5ID09IDApIHsKKyAgICAgICAgICAgIG1WYWx1ZXMgPSBDb250YWluZXJIZWxwZXJzLkVNUFRZX0xPTkdTOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5pdGlhbENhcGFjaXR5ID0gQXJyYXlVdGlscy5pZGVhbExvbmdBcnJheVNpemUoaW5pdGlhbENhcGFjaXR5KTsKKyAgICAgICAgICAgIG1WYWx1ZXMgPSBuZXcgbG9uZ1tpbml0aWFsQ2FwYWNpdHldOworICAgICAgICB9CisgICAgICAgIG1TaXplID0gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcHBlbmRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGlzIGFycmF5LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZChsb25nIHZhbHVlKSB7CisgICAgICAgIGFkZChtU2l6ZSwgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEluc2VydHMgYSB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoaXMgYXJyYXkuCisgICAgICoKKyAgICAgKiBAdGhyb3dzIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gd2hlbiBpbmRleCAmbHQ7IDAgfHwgaW5kZXggJmd0OyBzaXplKCkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGQoaW50IGluZGV4LCBsb25nIHZhbHVlKSB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBtU2l6ZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGVuc3VyZUNhcGFjaXR5KDEpOworCisgICAgICAgIGlmIChtU2l6ZSAtIGluZGV4ICE9IDApIHsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobVZhbHVlcywgaW5kZXgsIG1WYWx1ZXMsIGluZGV4ICsgMSwgbVNpemUgLSBpbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBtVmFsdWVzW2luZGV4XSA9IHZhbHVlOworICAgICAgICBtU2l6ZSsrOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZHMgdGhlIHZhbHVlcyBpbiB0aGUgc3BlY2lmaWVkIGFycmF5IHRvIHRoaXMgYXJyYXkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkQWxsKExvbmdBcnJheSB2YWx1ZXMpIHsKKyAgICAgICAgZmluYWwgaW50IGNvdW50ID0gdmFsdWVzLm1TaXplOworICAgICAgICBlbnN1cmVDYXBhY2l0eShjb3VudCk7CisKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weSh2YWx1ZXMubVZhbHVlcywgMCwgbVZhbHVlcywgbVNpemUsIGNvdW50KTsKKyAgICAgICAgbVNpemUgKz0gY291bnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5zdXJlcyBjYXBhY2l0eSB0byBhcHBlbmQgYXQgbGVhc3QgPGNvZGU+Y291bnQ8L2NvZGU+IHZhbHVlcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZW5zdXJlQ2FwYWNpdHkoaW50IGNvdW50KSB7CisgICAgICAgIGZpbmFsIGludCBjdXJyZW50U2l6ZSA9IG1TaXplOworICAgICAgICBmaW5hbCBpbnQgbWluQ2FwYWNpdHkgPSBjdXJyZW50U2l6ZSArIGNvdW50OworICAgICAgICBpZiAobWluQ2FwYWNpdHkgPj0gbVZhbHVlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGZpbmFsIGludCB0YXJnZXRDYXAgPSBjdXJyZW50U2l6ZSArIChjdXJyZW50U2l6ZSA8IChNSU5fQ0FQQUNJVFlfSU5DUkVNRU5UIC8gMikgPworICAgICAgICAgICAgICAgICAgICBNSU5fQ0FQQUNJVFlfSU5DUkVNRU5UIDogY3VycmVudFNpemUgPj4gMSk7CisgICAgICAgICAgICBmaW5hbCBpbnQgbmV3Q2FwYWNpdHkgPSB0YXJnZXRDYXAgPiBtaW5DYXBhY2l0eSA/IHRhcmdldENhcCA6IG1pbkNhcGFjaXR5OworICAgICAgICAgICAgZmluYWwgbG9uZ1tdIG5ld1ZhbHVlcyA9IG5ldyBsb25nW0FycmF5VXRpbHMuaWRlYWxMb25nQXJyYXlTaXplKG5ld0NhcGFjaXR5KV07CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1WYWx1ZXMsIDAsIG5ld1ZhbHVlcywgMCwgY3VycmVudFNpemUpOworICAgICAgICAgICAgbVZhbHVlcyA9IG5ld1ZhbHVlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZXMgYWxsIHZhbHVlcyBmcm9tIHRoaXMgYXJyYXkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgY2xlYXIoKSB7CisgICAgICAgIG1TaXplID0gMDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKyAgICBwdWJsaWMgTG9uZ0FycmF5IGNsb25lKCkgeworICAgICAgICBMb25nQXJyYXkgY2xvbmUgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY2xvbmUgPSAoTG9uZ0FycmF5KSBzdXBlci5jbG9uZSgpOworICAgICAgICAgICAgY2xvbmUubVZhbHVlcyA9IG1WYWx1ZXMuY2xvbmUoKTsKKyAgICAgICAgfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gY25zZSkgeworICAgICAgICAgICAgLyogaWdub3JlICovCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNsb25lOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gaW4gdGhpcyBhcnJheS4KKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBnZXQoaW50IGluZGV4KSB7CisgICAgICAgIGlmIChpbmRleCA+PSBtU2l6ZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihtU2l6ZSwgaW5kZXgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtVmFsdWVzW2luZGV4XTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRoaXMKKyAgICAgKiBhcnJheSwgb3IgLTEgaWYgdGhpcyBhcnJheSBkb2VzIG5vdCBjb250YWluIHRoZSB2YWx1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGluZGV4T2YobG9uZyB2YWx1ZSkgeworICAgICAgICBmaW5hbCBpbnQgbiA9IG1TaXplOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgaWYgKG1WYWx1ZXNbaV0gPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBmcm9tIHRoaXMgYXJyYXkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlKGludCBpbmRleCkgeworICAgICAgICBpZiAoaW5kZXggPj0gbVNpemUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24obVNpemUsIGluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1WYWx1ZXMsIGluZGV4LCBtVmFsdWVzLCBpbmRleCArIDEsIG1TaXplIC0gaW5kZXgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhpcyBhcnJheS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHNpemUoKSB7CisgICAgICAgIHJldHVybiBtU2l6ZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvbmdTcGFyc2VMb25nQXJyYXkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9uZ1NwYXJzZUxvbmdBcnJheS5qYXZhCmluZGV4IDY2NTQ4OTkuLmI4MDczZGQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9uZ1NwYXJzZUxvbmdBcnJheS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9uZ1NwYXJzZUxvbmdBcnJheS5qYXZhCkBAIC0xOCw4ICsxOCw2IEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFycmF5VXRpbHM7CiAKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCiAvKioKICAqIE1hcCBvZiB7QGNvZGUgbG9uZ30gdG8ge0Bjb2RlIGxvbmd9LiBVbmxpa2UgYSBub3JtYWwgYXJyYXkgb2YgbG9uZ3MsIHRoZXJlCiAgKiBjYW4gYmUgZ2FwcyBpbiB0aGUgaW5kaWNlcy4gSXQgaXMgaW50ZW5kZWQgdG8gYmUgbW9yZSBtZW1vcnkgZWZmaWNpZW50IHRoYW4gdXNpbmcgYQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9TbG9nLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL1Nsb2cuamF2YQppbmRleCA3MDc5NWJiLi5iMjVkODBmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC91dGlsL1Nsb2cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL1Nsb2cuamF2YQpAQCAtMTYsMTEgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnV0aWw7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5SdW50aW1lSW5pdDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KIC8qKgogICogQGhpZGUKICAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9BY2Nlc3NpYmlsaXR5SW50ZXJhY3Rpb25Db250cm9sbGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNvbnRyb2xsZXIuamF2YQppbmRleCA0MWQzNzAwLi4zODU5YWQ0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNvbnRyb2xsZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNvbnRyb2xsZXIuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUxvbmdBcnJheTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5BdHRhY2hJbmZvOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNsaWVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CkBAIC04ODEsMTMgKzg4MCwxMiBAQAogICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBwYXJlbnQgPQogICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5jcmVhdGVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8ocGFyZW50VmlydHVhbERlc2NlbmRhbnRJZCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNwYXJzZUxvbmdBcnJheSBjaGlsZE5vZGVJZHMgPSBwYXJlbnQuZ2V0Q2hpbGROb2RlSWRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gY2hpbGROb2RlSWRzLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBwYXJlbnQuZ2V0Q2hpbGRDb3VudCgpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dEluZm9zLnNpemUoKSA+PSBNQVhfQUNDRVNTSUJJTElUWV9OT0RFX0lORk9fQkFUQ0hfU0laRSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGROb2RlSWQgPSBjaGlsZE5vZGVJZHMuZ2V0KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjaGlsZE5vZGVJZCA9IHBhcmVudC5nZXRDaGlsZElkKGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZUlkICE9IGN1cnJlbnQuZ2V0U291cmNlTm9kZUlkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRWaXJ0dWFsRGVzY2VuZGFudElkID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLmdldFZpcnR1YWxEZXNjZW5kYW50SWQoY2hpbGROb2RlSWQpOwpAQCAtOTA2LDE0ICs5MDQsMTMgQEAKIAogICAgICAgICBwcml2YXRlIHZvaWQgcHJlZmV0Y2hEZXNjZW5kYW50c09mVmlydHVhbE5vZGUoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHJvb3QsCiAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVQcm92aWRlciBwcm92aWRlciwgTGlzdDxBY2Nlc3NpYmlsaXR5Tm9kZUluZm8+IG91dEluZm9zKSB7Ci0gICAgICAgICAgICBTcGFyc2VMb25nQXJyYXkgY2hpbGROb2RlSWRzID0gcm9vdC5nZXRDaGlsZE5vZGVJZHMoKTsKICAgICAgICAgICAgIGZpbmFsIGludCBpbml0aWFsT3V0SW5mb3NTaXplID0gb3V0SW5mb3Muc2l6ZSgpOwotICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBjaGlsZE5vZGVJZHMuc2l6ZSgpOworICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSByb290LmdldENoaWxkQ291bnQoKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKG91dEluZm9zLnNpemUoKSA+PSBNQVhfQUNDRVNTSUJJTElUWV9OT0RFX0lORk9fQkFUQ0hfU0laRSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGROb2RlSWQgPSBjaGlsZE5vZGVJZHMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGROb2RlSWQgPSByb290LmdldENoaWxkSWQoaSk7CiAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGNoaWxkID0gcHJvdmlkZXIuY3JlYXRlQWNjZXNzaWJpbGl0eU5vZGVJbmZvKAogICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLmdldFZpcnR1YWxEZXNjZW5kYW50SWQoY2hpbGROb2RlSWQpKTsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQgIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9BY2Nlc3NpYmlsaXR5SXRlcmF0b3JzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJdGVyYXRvcnMuamF2YQppbmRleCAxN2NlNGY2Li5lNTk5MzdkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJdGVyYXRvcnMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJdGVyYXRvcnMuamF2YQpAQCAtMTcsOCArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLnZpZXc7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50Q2FsbGJhY2tzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogCiBpbXBvcnQgamF2YS50ZXh0LkJyZWFrSXRlcmF0b3I7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0NvbnRleHRUaGVtZVdyYXBwZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvQ29udGV4dFRoZW1lV3JhcHBlci5qYXZhCmluZGV4IDZjNzMzZjkuLjFkZTljMzUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvQ29udGV4dFRoZW1lV3JhcHBlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvQ29udGV4dFRoZW1lV3JhcHBlci5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHRXcmFwcGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwogCiAvKioKICAqIEEgQ29udGV4dFdyYXBwZXIgdGhhdCBhbGxvd3MgeW91IHRvIG1vZGlmeSB0aGUgdGhlbWUgZnJvbSB3aGF0IGlzIGluIHRoZSAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRGlzcGxheS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EaXNwbGF5LmphdmEKaW5kZXggN2QzMTBhMi4uZDNmNjNiNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EaXNwbGF5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EaXNwbGF5LmphdmEKQEAgLTUyOCw2ICs1MjgsNyBAQAogICAgICAqIDkwIGRlZ3JlZXMgY2xvY2t3aXNlIGFuZCB0aHVzIHRoZSByZXR1cm5lZCB2YWx1ZSBoZXJlIHdpbGwgYmUKICAgICAgKiB7QGxpbmsgU3VyZmFjZSNST1RBVElPTl85MCBTdXJmYWNlLlJPVEFUSU9OXzkwfS4KICAgICAgKi8KKyAgICBAU3VyZmFjZS5Sb3RhdGlvbgogICAgIHB1YmxpYyBpbnQgZ2V0Um90YXRpb24oKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgdXBkYXRlRGlzcGxheUluZm9Mb2NrZWQoKTsKQEAgLTU0MCw2ICs1NDEsNyBAQAogICAgICAqIEByZXR1cm4gb3JpZW50YXRpb24gb2YgdGhpcyBkaXNwbGF5LgogICAgICAqLwogICAgIEBEZXByZWNhdGVkCisgICAgQFN1cmZhY2UuUm90YXRpb24KICAgICBwdWJsaWMgaW50IGdldE9yaWVudGF0aW9uKCkgewogICAgICAgICByZXR1cm4gZ2V0Um90YXRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0Rpc3BsYXlJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0Rpc3BsYXlJbmZvLmphdmEKaW5kZXggODk0NDIwNy4uN2ZkN2I4MyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EaXNwbGF5SW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRGlzcGxheUluZm8uamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIAogaW1wb3J0IGxpYmNvcmUudXRpbC5PYmplY3RzOwpAQCAtMTQ0LDYgKzE0Myw3IEBACiAgICAgICogbW9yZSB0aGFuIG9uZSBwaHlzaWNhbCBkaXNwbGF5LgogICAgICAqIDwvcD4KICAgICAgKi8KKyAgICBAU3VyZmFjZS5Sb3RhdGlvbgogICAgIHB1YmxpYyBpbnQgcm90YXRpb247CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRGlzcGxheUxpc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRGlzcGxheUxpc3QuamF2YQppbmRleCA0M2ZkNjI4Li44ZGQ2YTkxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0Rpc3BsYXlMaXN0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EaXNwbGF5TGlzdC5qYXZhCkBAIC0xOCw2ICsxOCw4IEBACiAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeDsKIAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKIC8qKgogICogPHA+QSBkaXNwbGF5IGxpc3QgcmVjb3JkcyBhIHNlcmllcyBvZiBncmFwaGljcyByZWxhdGVkIG9wZXJhdGlvbnMgYW5kIGNhbiByZXBsYXkKICAqIHRoZW0gbGF0ZXIuIERpc3BsYXkgbGlzdHMgYXJlIHVzdWFsbHkgYnVpbHQgYnkgcmVjb3JkaW5nIG9wZXJhdGlvbnMgb24gYQpAQCAtODYsMTggKzg4LDE1IEBACiAgKgogICogPHByZSBjbGFzcz0icHJldHR5cHJpbnQiPgogICogICAgIHByaXZhdGUgdm9pZCBjcmVhdGVEaXNwbGF5TGlzdCgpIHsKLSAqICAgICAgICAgSGFyZHdhcmVSZW5kZXJlciByZW5kZXJlciA9IGdldEhhcmR3YXJlUmVuZGVyZXIoKTsKLSAqICAgICAgICAgaWYgKHJlbmRlcmVyICE9IG51bGwpIHsKLSAqICAgICAgICAgICAgIG1EaXNwbGF5TGlzdCA9IHJlbmRlcmVyLmNyZWF0ZURpc3BsYXlMaXN0KCk7Ci0gKiAgICAgICAgICAgICBIYXJkd2FyZUNhbnZhcyBjYW52YXMgPSBtRGlzcGxheUxpc3Quc3RhcnQod2lkdGgsIGhlaWdodCk7Ci0gKiAgICAgICAgICAgICB0cnkgewotICogICAgICAgICAgICAgICAgIGZvciAoQml0bWFwIGIgOiBtQml0bWFwcykgewotICogICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChiLCAwLjBmLCAwLjBmLCBudWxsKTsKLSAqICAgICAgICAgICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgwLjBmLCBiLmdldEhlaWdodCgpKTsKLSAqICAgICAgICAgICAgICAgICB9Ci0gKiAgICAgICAgICAgICB9IGZpbmFsbHkgewotICogICAgICAgICAgICAgICAgIGRpc3BsYXlMaXN0LmVuZCgpOworICogICAgICAgICBtRGlzcGxheUxpc3QgPSBEaXNwbGF5TGlzdC5jcmVhdGUoIk15RGlzcGxheUxpc3QiKTsKKyAqICAgICAgICAgSGFyZHdhcmVDYW52YXMgY2FudmFzID0gbURpc3BsYXlMaXN0LnN0YXJ0KHdpZHRoLCBoZWlnaHQpOworICogICAgICAgICB0cnkgeworICogICAgICAgICAgICAgZm9yIChCaXRtYXAgYiA6IG1CaXRtYXBzKSB7CisgKiAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAoYiwgMC4wZiwgMC4wZiwgbnVsbCk7CisgKiAgICAgICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgwLjBmLCBiLmdldEhlaWdodCgpKTsKICAqICAgICAgICAgICAgIH0KKyAqICAgICAgICAgfSBmaW5hbGx5IHsKKyAqICAgICAgICAgICAgIGRpc3BsYXlMaXN0LmVuZCgpOwogICogICAgICAgICB9CiAgKiAgICAgfQogICoKQEAgLTEyMywxMiArMTIyLDIzIEBACiAgKgogICogQGhpZGUKICAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIERpc3BsYXlMaXN0IHsKK3B1YmxpYyBjbGFzcyBEaXNwbGF5TGlzdCB7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1EaXJ0eTsKKyAgICBwcml2YXRlIEFycmF5TGlzdDxEaXNwbGF5TGlzdD4gbUNoaWxkRGlzcGxheUxpc3RzOworCisgICAgcHJpdmF0ZSBHTEVTMjBSZWNvcmRpbmdDYW52YXMgbUNhbnZhczsKKyAgICBwcml2YXRlIGJvb2xlYW4gbVZhbGlkOworCisgICAgLy8gVXNlZCBmb3IgZGVidWdnaW5nCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU5hbWU7CisKKyAgICAvLyBUaGUgbmF0aXZlIGRpc3BsYXkgbGlzdCB3aWxsIGJlIGRlc3Ryb3llZCB3aGVuIHRoaXMgb2JqZWN0IGRpZXMuCisgICAgLy8gRE8gTk9UIG92ZXJ3cml0ZSB0aGlzIHJlZmVyZW5jZSBvbmNlIGl0IGlzIHNldC4KKyAgICBwcml2YXRlIERpc3BsYXlMaXN0RmluYWxpemVyIG1GaW5hbGl6ZXI7CiAKICAgICAvKioKICAgICAgKiBGbGFnIHVzZWQgd2hlbiBjYWxsaW5nCi0gICAgICoge0BsaW5rIEhhcmR3YXJlQ2FudmFzI2RyYXdEaXNwbGF5TGlzdChEaXNwbGF5TGlzdCwgYW5kcm9pZC5ncmFwaGljcy5SZWN0LCBpbnQpfSAKKyAgICAgKiB7QGxpbmsgSGFyZHdhcmVDYW52YXMjZHJhd0Rpc3BsYXlMaXN0KERpc3BsYXlMaXN0LCBhbmRyb2lkLmdyYXBoaWNzLlJlY3QsIGludCl9CiAgICAgICogV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCBkcmF3IG9wZXJhdGlvbnMgbHlpbmcgb3V0c2lkZSBvZiB0aGUgYm91bmRzIG9mIHRoZQogICAgICAqIGRpc3BsYXkgbGlzdCB3aWxsIGJlIGN1bGxlZCBlYXJseS4gSXQgaXMgcmVjb21tZW5lZGVkIHRvIGFsd2F5cyBzZXQgdGhpcwogICAgICAqIGZsYWcuCkBAIC0xNzYsNiArMTg2LDI0IEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0RSRVcgPSAweDQ7CiAKKyAgICBwcml2YXRlIERpc3BsYXlMaXN0KFN0cmluZyBuYW1lKSB7CisgICAgICAgIG1OYW1lID0gbmFtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGRpc3BsYXkgbGlzdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlY29yZCBiYXRjaGVzIG9mCisgICAgICogZHJhd2luZyBvcGVyYXRpb25zLgorICAgICAqCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGRpc3BsYXkgbGlzdCwgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2UuIE1heSBiZSBudWxsLgorICAgICAqCisgICAgICogQHJldHVybiBBIG5ldyBkaXNwbGF5IGxpc3QuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgRGlzcGxheUxpc3QgY3JlYXRlKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHJldHVybiBuZXcgRGlzcGxheUxpc3QobmFtZSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogU3RhcnRzIHJlY29yZGluZyB0aGUgZGlzcGxheSBsaXN0LiBBbGwgb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gdGhlCiAgICAgICogcmV0dXJuZWQgY2FudmFzIGFyZSByZWNvcmRlZCBhbmQgc3RvcmVkIGluIHRoaXMgZGlzcGxheSBsaXN0LgpAQCAtMTkxLDcgKzIxOSwyMSBAQAogICAgICAqIEBzZWUgI2VuZCgpCiAgICAgICogQHNlZSAjaXNWYWxpZCgpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IEhhcmR3YXJlQ2FudmFzIHN0YXJ0KGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgcHVibGljIEhhcmR3YXJlQ2FudmFzIHN0YXJ0KGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICBpZiAobUNhbnZhcyAhPSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJSZWNvcmRpbmcgaGFzIGFscmVhZHkgc3RhcnRlZCIpOworICAgICAgICB9CisKKyAgICAgICAgbVZhbGlkID0gZmFsc2U7CisgICAgICAgIG1DYW52YXMgPSBHTEVTMjBSZWNvcmRpbmdDYW52YXMub2J0YWluKHRoaXMpOworICAgICAgICBtQ2FudmFzLnN0YXJ0KCk7CisKKyAgICAgICAgbUNhbnZhcy5zZXRWaWV3cG9ydCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgLy8gVGhlIGRpcnR5IHJlY3Qgc2hvdWxkIGFsd2F5cyBiZSBudWxsIGZvciBhIGRpc3BsYXkgbGlzdAorICAgICAgICBtQ2FudmFzLm9uUHJlRHJhdyhudWxsKTsKKworICAgICAgICByZXR1cm4gbUNhbnZhczsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSByZWNvcmRpbmcgZm9yIHRoaXMgZGlzcGxheSBsaXN0LiBBIGRpc3BsYXkgbGlzdCBjYW5ub3QgYmUKQEAgLTIwMSw3ICsyNDMsMjAgQEAKICAgICAgKiBAc2VlICNzdGFydChpbnQsIGludCkKICAgICAgKiBAc2VlICNpc1ZhbGlkKCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBlbmQoKTsKKyAgICBwdWJsaWMgdm9pZCBlbmQoKSB7CisgICAgICAgIGlmIChtQ2FudmFzICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1DYW52YXMub25Qb3N0RHJhdygpOworICAgICAgICAgICAgaWYgKG1GaW5hbGl6ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1DYW52YXMuZW5kKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbUZpbmFsaXplciA9IG5ldyBEaXNwbGF5TGlzdEZpbmFsaXplcihtQ2FudmFzLmVuZCgwKSk7CisgICAgICAgICAgICAgICAgblNldERpc3BsYXlMaXN0TmFtZShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgbU5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUNhbnZhcy5yZWN5Y2xlKCk7CisgICAgICAgICAgICBtQ2FudmFzID0gbnVsbDsKKyAgICAgICAgICAgIG1WYWxpZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBDbGVhcnMgcmVzb3VyY2VzIGhlbGQgb250byBieSB0aGlzIGRpc3BsYXkgbGlzdC4gQWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZApAQCAtMjEwLDggKzI2NSwyNiBAQAogICAgICAqIEBzZWUgI2lzVmFsaWQoKQogICAgICAqIEBzZWUgI3Jlc2V0KCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjbGVhcigpOworICAgIHB1YmxpYyB2b2lkIGNsZWFyKCkgeworICAgICAgICBjbGVhckRpcnR5KCk7CiAKKyAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgeworICAgICAgICAgICAgbUNhbnZhcy5yZWN5Y2xlKCk7CisgICAgICAgICAgICBtQ2FudmFzID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBtVmFsaWQgPSBmYWxzZTsKKworICAgICAgICBjbGVhclJlZmVyZW5jZXMoKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyUmVmZXJlbmNlcygpIHsKKyAgICAgICAgaWYgKG1DaGlsZERpc3BsYXlMaXN0cyAhPSBudWxsKSBtQ2hpbGREaXNwbGF5TGlzdHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBBcnJheUxpc3Q8RGlzcGxheUxpc3Q+IGdldENoaWxkRGlzcGxheUxpc3RzKCkgeworICAgICAgICBpZiAobUNoaWxkRGlzcGxheUxpc3RzID09IG51bGwpIG1DaGlsZERpc3BsYXlMaXN0cyA9IG5ldyBBcnJheUxpc3Q8RGlzcGxheUxpc3Q+KCk7CisgICAgICAgIHJldHVybiBtQ2hpbGREaXNwbGF5TGlzdHM7CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmVzZXQgbmF0aXZlIHJlc291cmNlcy4gVGhpcyBpcyBjYWxsZWQgd2hlbiBjbGVhbmluZyB1cCB0aGUgc3RhdGUgb2YgZGlzcGxheSBsaXN0cwpAQCAtMjIyLDcgKzI5NSwxMiBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZXNldCgpOworICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgblJlc2V0KG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0KTsKKyAgICAgICAgfQorICAgICAgICBjbGVhcigpOworICAgIH0KIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRpcnR5IGZsYWcuIFdoZW4gYSBkaXNwbGF5IGxpc3QgaXMgZGlydHksIHtAbGluayAjY2xlYXIoKX0gc2hvdWxkCkBAIC0yNjgsMTYgKzM0NiwzMCBAQAogICAgICAqCiAgICAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhlIGRpc3BsYXkgbGlzdCBpcyBhYmxlIHRvIGJlIHJlcGxheWVkLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNWYWxpZCgpOworICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKSB7IHJldHVybiBtVmFsaWQ7IH0KIAogICAgIC8qKgogICAgICAqIFJldHVybiB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHRoaXMgZGlzcGxheSBsaXN0LgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiBUaGUgc2l6ZSBvZiB0aGlzIGRpc3BsYXkgbGlzdCBpbiBieXRlcwogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFNpemUoKTsKKyAgICBwdWJsaWMgaW50IGdldFNpemUoKSB7CisgICAgICAgIGlmIChtRmluYWxpemVyID09IG51bGwpIHJldHVybiAwOworICAgICAgICByZXR1cm4gbkdldERpc3BsYXlMaXN0U2l6ZShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7CisgICAgfQorCisgICAgYm9vbGVhbiBoYXNOYXRpdmVEaXNwbGF5TGlzdCgpIHsKKyAgICAgICAgcmV0dXJuIG1WYWxpZCAmJiBtRmluYWxpemVyICE9IG51bGw7CisgICAgfQorCisgICAgaW50IGdldE5hdGl2ZURpc3BsYXlMaXN0KCkgeworICAgICAgICBpZiAoIW1WYWxpZCB8fCBtRmluYWxpemVyID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlRoZSBkaXNwbGF5IGxpc3QgaXMgbm90IHZhbGlkLiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdDsKKyAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAvLyBEaXNwbGF5TGlzdCBQcm9wZXJ0eSBTZXR0ZXJzCkBAIC0yOTIsNyArMzg0LDExIEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldENhY2hpbmcoYm9vbGVhbiBjYWNoaW5nKTsKKyAgICBwdWJsaWMgdm9pZCBzZXRDYWNoaW5nKGJvb2xlYW4gY2FjaGluZykgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgblNldENhY2hpbmcobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIGNhY2hpbmcpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogU2V0IHdoZXRoZXIgdGhlIGRpc3BsYXkgbGlzdCBzaG91bGQgY2xpcCBpdHNlbGYgdG8gaXRzIGJvdW5kcy4gVGhpcyBwcm9wZXJ0eSBpcyBjb250cm9sbGVkIGJ5CkBAIC0zMDAsNyArMzk2LDM4IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gY2xpcFRvQm91bmRzIHRydWUgaWYgdGhlIGRpc3BsYXkgbGlzdCBzaG91bGQgY2xpcCB0byBpdHMgYm91bmRzCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0Q2xpcFRvQm91bmRzKGJvb2xlYW4gY2xpcFRvQm91bmRzKTsKKyAgICBwdWJsaWMgdm9pZCBzZXRDbGlwVG9Cb3VuZHMoYm9vbGVhbiBjbGlwVG9Cb3VuZHMpIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIG5TZXRDbGlwVG9Cb3VuZHMobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIGNsaXBUb0JvdW5kcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgd2hldGhlciB0aGUgZGlzcGxheSBsaXN0IHNob3VsZCBjb2xsZWN0IGFuZCBaIG9yZGVyIGFsbCAzZCBjb21wb3NpdGVkIGRlc2NlbmRlbnRzLCBhbmQKKyAgICAgKiBkcmF3IHRoZW0gaW4gb3JkZXIgd2l0aCB0aGUgZGVmYXVsdCBaPTAgY29udGVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpc0NvbnRhaW5lZFZvbHVtZSB0cnVlIGlmIHRoZSBkaXNwbGF5IGxpc3Qgc2hvdWxkIGNvbGxlY3QgYW5kIFogb3JkZXIgZGVzY2VuZGVudHMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SXNDb250YWluZWRWb2x1bWUoYm9vbGVhbiBpc0NvbnRhaW5lZFZvbHVtZSkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgblNldElzQ29udGFpbmVkVm9sdW1lKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBpc0NvbnRhaW5lZFZvbHVtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIGRpc3BsYXkgbGlzdCBzaG91bGQgYmUgZHJhd24gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlCisgICAgICogY2xvc2VzdCBhbmNlc3RvciBkaXNwbGF5IGxpc3Qgd2hlcmUgaXNDb250YWluZWRWb2x1bWUgaXMgdHJ1ZS4gSWYgdGhlCisgICAgICogZGlzcGxheSBsaXN0IGl0c2VsZiBzYXRpc2ZpZXMgdGhpcyBjb25zdHJhaW50LCBjaGFuZ2luZyB0aGlzIGF0dHJpYnV0ZQorICAgICAqIGhhcyBubyBlZmZlY3Qgb24gZHJhd2luZyBvcmRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzaG91bGRQcm9qZWN0IHRydWUgaWYgdGhlIGRpc3BsYXkgbGlzdCBzaG91bGQgYmUgcHJvamVjdGVkIG9udG8gYQorICAgICAqICAgICAgICAgICAgY29udGFpbmluZyB2b2x1bWUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UHJvamVjdFRvQ29udGFpbmVkVm9sdW1lKGJvb2xlYW4gc2hvdWxkUHJvamVjdCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgblNldFByb2plY3RUb0NvbnRhaW5lZFZvbHVtZShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgc2hvdWxkUHJvamVjdCk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHN0YXRpYyBtYXRyaXggb24gdGhlIGRpc3BsYXkgbGlzdC4gVGhlIHNwZWNpZmllZCBtYXRyaXggaXMgY29tYmluZWQgd2l0aCBvdGhlcgpAQCAtMzExLDcgKzQzOCwxMSBAQAogICAgICAqIEBzZWUgI2dldE1hdHJpeChhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeCkKICAgICAgKiBAc2VlICNnZXRNYXRyaXgoKQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE1hdHJpeChNYXRyaXggbWF0cml4KTsKKyAgICBwdWJsaWMgdm9pZCBzZXRNYXRyaXgoTWF0cml4IG1hdHJpeCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgblNldFN0YXRpY01hdHJpeChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgbWF0cml4Lm5hdGl2ZV9pbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBzdGF0aWMgbWF0cml4IHNldCBvbiB0aGlzIGRpc3BsYXkgbGlzdC4KQEAgLTMzNyw3ICs0NjgsMTIgQEAKICAgICAgKiBAc2VlICNnZXRNYXRyaXgoKQogICAgICAqIEBzZWUgI3NldE1hdHJpeChhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgTWF0cml4IGdldE1hdHJpeChNYXRyaXggbWF0cml4KTsKKyAgICBwdWJsaWMgTWF0cml4IGdldE1hdHJpeChNYXRyaXggbWF0cml4KSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICBuR2V0TWF0cml4KG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBtYXRyaXgubmF0aXZlX2luc3RhbmNlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWF0cml4OworICAgIH0KIAogICAgIC8qKgogICAgICAqIFNldCB0aGUgQW5pbWF0aW9uIG1hdHJpeCBvbiB0aGUgZGlzcGxheSBsaXN0LiBUaGlzIG1hdHJpeCBleGlzdHMgaWYgYW4gQW5pbWF0aW9uIGlzCkBAIC0zNDksNyArNDg1LDEyIEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEFuaW1hdGlvbk1hdHJpeChNYXRyaXggbWF0cml4KTsKKyAgICBwdWJsaWMgdm9pZCBzZXRBbmltYXRpb25NYXRyaXgoTWF0cml4IG1hdHJpeCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgblNldEFuaW1hdGlvbk1hdHJpeChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgKG1hdHJpeCAhPSBudWxsKSA/IG1hdHJpeC5uYXRpdmVfaW5zdGFuY2UgOiAwKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zbHVjZW5jeSBsZXZlbCBmb3IgdGhlIGRpc3BsYXkgbGlzdC4KQEAgLTM1OSw3ICs1MDAsMTEgQEAKICAgICAgKiBAc2VlIFZpZXcjc2V0QWxwaGEoZmxvYXQpCiAgICAgICogQHNlZSAjZ2V0QWxwaGEoKQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKTsKKyAgICBwdWJsaWMgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgblNldEFscGhhKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBhbHBoYSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2x1Y2VuY3kgbGV2ZWwgb2YgdGhpcyBkaXNwbGF5IGxpc3QuCkBAIC0zNjgsNyArNTEzLDEyIEBACiAgICAgICoKICAgICAgKiBAc2VlICNzZXRBbHBoYShmbG9hdCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgZmxvYXQgZ2V0QWxwaGEoKTsKKyAgICBwdWJsaWMgZmxvYXQgZ2V0QWxwaGEoKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICByZXR1cm4gbkdldEFscGhhKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMS4wZjsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIGRpc3BsYXkgbGlzdCByZW5kZXJzIGNvbnRlbnQgd2hpY2ggb3ZlcmxhcHMuIE5vbi1vdmVybGFwcGluZyByZW5kZXJpbmcKQEAgLTM4MSw3ICs1MzEsMTEgQEAKICAgICAgKiBAc2VlIGFuZHJvaWQudmlldy5WaWV3I2hhc092ZXJsYXBwaW5nUmVuZGVyaW5nKCkKICAgICAgKiBAc2VlICNoYXNPdmVybGFwcGluZ1JlbmRlcmluZygpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoYm9vbGVhbiBoYXNPdmVybGFwcGluZ1JlbmRlcmluZyk7CisgICAgcHVibGljIHZvaWQgc2V0SGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoYm9vbGVhbiBoYXNPdmVybGFwcGluZ1JlbmRlcmluZykgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgblNldEhhc092ZXJsYXBwaW5nUmVuZGVyaW5nKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBoYXNPdmVybGFwcGluZ1JlbmRlcmluZyk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29udGVudCBvZiB0aGlzIGRpc3BsYXkgbGlzdCBvdmVybGFwcy4KQEAgLTM5MCwxMjYgKzU0NCwyMTkgQEAKICAgICAgKgogICAgICAqIEBzZWUgI3NldEhhc092ZXJsYXBwaW5nUmVuZGVyaW5nKGJvb2xlYW4pCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoKTsKKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNPdmVybGFwcGluZ1JlbmRlcmluZygpIHsKKyAgICAgICAgLy9ub2luc3BlY3Rpb24gU2ltcGxpZmlhYmxlSWZTdGF0ZW1lbnQKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBuSGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIC8qKgotICAgICAqIFNldHMgdGhlIHRyYW5zbGF0aW9uIHZhbHVlIGZvciB0aGUgZGlzcGxheSBsaXN0IG9uIHRoZSBYIGF4aXMKKyAgICAgKiBTZXRzIHRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBmb3IgdGhlIGRpc3BsYXkgbGlzdCBvbiB0aGUgWCBheGlzLgogICAgICAqCiAgICAgICogQHBhcmFtIHRyYW5zbGF0aW9uWCBUaGUgWCBheGlzIHRyYW5zbGF0aW9uIHZhbHVlIG9mIHRoZSBkaXNwbGF5IGxpc3QsIGluIHBpeGVscwogICAgICAqCiAgICAgICogQHNlZSBWaWV3I3NldFRyYW5zbGF0aW9uWChmbG9hdCkKICAgICAgKiBAc2VlICNnZXRUcmFuc2xhdGlvblgoKQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFRyYW5zbGF0aW9uWChmbG9hdCB0cmFuc2xhdGlvblgpOworICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0aW9uWChmbG9hdCB0cmFuc2xhdGlvblgpIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIG5TZXRUcmFuc2xhdGlvblgobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHRyYW5zbGF0aW9uWCk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBmb3IgdGhpcyBkaXNwbGF5IGxpc3Qgb24gdGhlIFggYXhpcywgaW4gcGl4ZWxzLgogICAgICAqCiAgICAgICogQHNlZSAjc2V0VHJhbnNsYXRpb25YKGZsb2F0KQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBmbG9hdCBnZXRUcmFuc2xhdGlvblgoKTsKKyAgICBwdWJsaWMgZmxvYXQgZ2V0VHJhbnNsYXRpb25YKCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgcmV0dXJuIG5HZXRUcmFuc2xhdGlvblgobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwLjBmOworICAgIH0KIAogICAgIC8qKgotICAgICAqIFNldHMgdGhlIHRyYW5zbGF0aW9uIHZhbHVlIGZvciB0aGUgZGlzcGxheSBsaXN0IG9uIHRoZSBZIGF4aXMKKyAgICAgKiBTZXRzIHRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBmb3IgdGhlIGRpc3BsYXkgbGlzdCBvbiB0aGUgWSBheGlzLgogICAgICAqCiAgICAgICogQHBhcmFtIHRyYW5zbGF0aW9uWSBUaGUgWSBheGlzIHRyYW5zbGF0aW9uIHZhbHVlIG9mIHRoZSBkaXNwbGF5IGxpc3QsIGluIHBpeGVscwogICAgICAqCiAgICAgICogQHNlZSBWaWV3I3NldFRyYW5zbGF0aW9uWShmbG9hdCkKICAgICAgKiBAc2VlICNnZXRUcmFuc2xhdGlvblkoKQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFRyYW5zbGF0aW9uWShmbG9hdCB0cmFuc2xhdGlvblkpOworICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0aW9uWShmbG9hdCB0cmFuc2xhdGlvblkpIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIG5TZXRUcmFuc2xhdGlvblkobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHRyYW5zbGF0aW9uWSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBmb3IgdGhpcyBkaXNwbGF5IGxpc3Qgb24gdGhlIFkgYXhpcywgaW4gcGl4ZWxzLgogICAgICAqCiAgICAgICogQHNlZSAjc2V0VHJhbnNsYXRpb25ZKGZsb2F0KQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBmbG9hdCBnZXRUcmFuc2xhdGlvblkoKTsKKyAgICBwdWJsaWMgZmxvYXQgZ2V0VHJhbnNsYXRpb25ZKCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgcmV0dXJuIG5HZXRUcmFuc2xhdGlvblkobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwLjBmOworICAgIH0KIAogICAgIC8qKgotICAgICAqIFNldHMgdGhlIHJvdGF0aW9uIHZhbHVlIGZvciB0aGUgZGlzcGxheSBsaXN0IGFyb3VuZCB0aGUgWiBheGlzCisgICAgICogU2V0cyB0aGUgdHJhbnNsYXRpb24gdmFsdWUgZm9yIHRoZSBkaXNwbGF5IGxpc3Qgb24gdGhlIFogYXhpcy4KKyAgICAgKgorICAgICAqIEBzZWUgVmlldyNzZXRUcmFuc2xhdGlvblooZmxvYXQpCisgICAgICogQHNlZSAjZ2V0VHJhbnNsYXRpb25aKCkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2xhdGlvblooZmxvYXQgdHJhbnNsYXRpb25aKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICBuU2V0VHJhbnNsYXRpb25aKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCB0cmFuc2xhdGlvblopOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdHJhbnNsYXRpb24gdmFsdWUgZm9yIHRoaXMgZGlzcGxheSBsaXN0IG9uIHRoZSBaIGF4aXMuCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRUcmFuc2xhdGlvblooZmxvYXQpCisgICAgICovCisgICAgcHVibGljIGZsb2F0IGdldFRyYW5zbGF0aW9uWigpIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBuR2V0VHJhbnNsYXRpb25aKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSByb3RhdGlvbiB2YWx1ZSBmb3IgdGhlIGRpc3BsYXkgbGlzdCBhcm91bmQgdGhlIFogYXhpcy4KICAgICAgKgogICAgICAqIEBwYXJhbSByb3RhdGlvbiBUaGUgcm90YXRpb24gdmFsdWUgb2YgdGhlIGRpc3BsYXkgbGlzdCwgaW4gZGVncmVlcwogICAgICAqCiAgICAgICogQHNlZSBWaWV3I3NldFJvdGF0aW9uKGZsb2F0KQogICAgICAqIEBzZWUgI2dldFJvdGF0aW9uKCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRSb3RhdGlvbihmbG9hdCByb3RhdGlvbik7CisgICAgcHVibGljIHZvaWQgc2V0Um90YXRpb24oZmxvYXQgcm90YXRpb24pIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIG5TZXRSb3RhdGlvbihtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgcm90YXRpb24pOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgcm90YXRpb24gdmFsdWUgZm9yIHRoaXMgZGlzcGxheSBsaXN0IGFyb3VuZCB0aGUgWiBheGlzLCBpbiBkZWdyZWVzLgogICAgICAqCiAgICAgICogQHNlZSAjc2V0Um90YXRpb24oZmxvYXQpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGZsb2F0IGdldFJvdGF0aW9uKCk7CisgICAgcHVibGljIGZsb2F0IGdldFJvdGF0aW9uKCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgcmV0dXJuIG5HZXRSb3RhdGlvbihtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgfQogCiAgICAgLyoqCi0gICAgICogU2V0cyB0aGUgcm90YXRpb24gdmFsdWUgZm9yIHRoZSBkaXNwbGF5IGxpc3QgYXJvdW5kIHRoZSBYIGF4aXMKKyAgICAgKiBTZXRzIHRoZSByb3RhdGlvbiB2YWx1ZSBmb3IgdGhlIGRpc3BsYXkgbGlzdCBhcm91bmQgdGhlIFggYXhpcy4KICAgICAgKgogICAgICAqIEBwYXJhbSByb3RhdGlvblggVGhlIHJvdGF0aW9uIHZhbHVlIG9mIHRoZSBkaXNwbGF5IGxpc3QsIGluIGRlZ3JlZXMKICAgICAgKgogICAgICAqIEBzZWUgVmlldyNzZXRSb3RhdGlvblgoZmxvYXQpCiAgICAgICogQHNlZSAjZ2V0Um90YXRpb25YKCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRSb3RhdGlvblgoZmxvYXQgcm90YXRpb25YKTsKKyAgICBwdWJsaWMgdm9pZCBzZXRSb3RhdGlvblgoZmxvYXQgcm90YXRpb25YKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICBuU2V0Um90YXRpb25YKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCByb3RhdGlvblgpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgcm90YXRpb24gdmFsdWUgZm9yIHRoaXMgZGlzcGxheSBsaXN0IGFyb3VuZCB0aGUgWCBheGlzLCBpbiBkZWdyZWVzLgogICAgICAqCiAgICAgICogQHNlZSAjc2V0Um90YXRpb25YKGZsb2F0KQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBmbG9hdCBnZXRSb3RhdGlvblgoKTsKKyAgICBwdWJsaWMgZmxvYXQgZ2V0Um90YXRpb25YKCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgcmV0dXJuIG5HZXRSb3RhdGlvblgobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwLjBmOworICAgIH0KIAogICAgIC8qKgotICAgICAqIFNldHMgdGhlIHJvdGF0aW9uIHZhbHVlIGZvciB0aGUgZGlzcGxheSBsaXN0IGFyb3VuZCB0aGUgWSBheGlzCisgICAgICogU2V0cyB0aGUgcm90YXRpb24gdmFsdWUgZm9yIHRoZSBkaXNwbGF5IGxpc3QgYXJvdW5kIHRoZSBZIGF4aXMuCiAgICAgICoKICAgICAgKiBAcGFyYW0gcm90YXRpb25ZIFRoZSByb3RhdGlvbiB2YWx1ZSBvZiB0aGUgZGlzcGxheSBsaXN0LCBpbiBkZWdyZWVzCiAgICAgICoKICAgICAgKiBAc2VlIFZpZXcjc2V0Um90YXRpb25ZKGZsb2F0KQogICAgICAqIEBzZWUgI2dldFJvdGF0aW9uWSgpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0Um90YXRpb25ZKGZsb2F0IHJvdGF0aW9uWSk7CisgICAgcHVibGljIHZvaWQgc2V0Um90YXRpb25ZKGZsb2F0IHJvdGF0aW9uWSkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgblNldFJvdGF0aW9uWShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgcm90YXRpb25ZKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHJvdGF0aW9uIHZhbHVlIGZvciB0aGlzIGRpc3BsYXkgbGlzdCBhcm91bmQgdGhlIFkgYXhpcywgaW4gZGVncmVlcy4KICAgICAgKgogICAgICAqIEBzZWUgI3NldFJvdGF0aW9uWShmbG9hdCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgZmxvYXQgZ2V0Um90YXRpb25ZKCk7CisgICAgcHVibGljIGZsb2F0IGdldFJvdGF0aW9uWSgpIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBuR2V0Um90YXRpb25ZKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICB9CiAKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBzY2FsZSB2YWx1ZSBmb3IgdGhlIGRpc3BsYXkgbGlzdCBvbiB0aGUgWCBheGlzCisgICAgICogU2V0cyB0aGUgc2NhbGUgdmFsdWUgZm9yIHRoZSBkaXNwbGF5IGxpc3Qgb24gdGhlIFggYXhpcy4KICAgICAgKgogICAgICAqIEBwYXJhbSBzY2FsZVggVGhlIHNjYWxlIHZhbHVlIG9mIHRoZSBkaXNwbGF5IGxpc3QKICAgICAgKgogICAgICAqIEBzZWUgVmlldyNzZXRTY2FsZVgoZmxvYXQpCiAgICAgICogQHNlZSAjZ2V0U2NhbGVYKCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRTY2FsZVgoZmxvYXQgc2NhbGVYKTsKKyAgICBwdWJsaWMgdm9pZCBzZXRTY2FsZVgoZmxvYXQgc2NhbGVYKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICBuU2V0U2NhbGVYKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBzY2FsZVgpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgc2NhbGUgdmFsdWUgZm9yIHRoaXMgZGlzcGxheSBsaXN0IG9uIHRoZSBYIGF4aXMuCiAgICAgICoKICAgICAgKiBAc2VlICNzZXRTY2FsZVgoZmxvYXQpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGZsb2F0IGdldFNjYWxlWCgpOworICAgIHB1YmxpYyBmbG9hdCBnZXRTY2FsZVgoKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICByZXR1cm4gbkdldFNjYWxlWChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDEuMGY7CisgICAgfQogCiAgICAgLyoqCi0gICAgICogU2V0cyB0aGUgc2NhbGUgdmFsdWUgZm9yIHRoZSBkaXNwbGF5IGxpc3Qgb24gdGhlIFkgYXhpcworICAgICAqIFNldHMgdGhlIHNjYWxlIHZhbHVlIGZvciB0aGUgZGlzcGxheSBsaXN0IG9uIHRoZSBZIGF4aXMuCiAgICAgICoKICAgICAgKiBAcGFyYW0gc2NhbGVZIFRoZSBzY2FsZSB2YWx1ZSBvZiB0aGUgZGlzcGxheSBsaXN0CiAgICAgICoKICAgICAgKiBAc2VlIFZpZXcjc2V0U2NhbGVZKGZsb2F0KQogICAgICAqIEBzZWUgI2dldFNjYWxlWSgpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0U2NhbGVZKGZsb2F0IHNjYWxlWSk7CisgICAgcHVibGljIHZvaWQgc2V0U2NhbGVZKGZsb2F0IHNjYWxlWSkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgblNldFNjYWxlWShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgc2NhbGVZKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHNjYWxlIHZhbHVlIGZvciB0aGlzIGRpc3BsYXkgbGlzdCBvbiB0aGUgWSBheGlzLgogICAgICAqCiAgICAgICogQHNlZSAjc2V0U2NhbGVZKGZsb2F0KQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBmbG9hdCBnZXRTY2FsZVkoKTsKKyAgICBwdWJsaWMgZmxvYXQgZ2V0U2NhbGVZKCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgcmV0dXJuIG5HZXRTY2FsZVkobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAxLjBmOworICAgIH0KIAogICAgIC8qKgogICAgICAqIFNldHMgYWxsIG9mIHRoZSB0cmFuc2Zvcm0tcmVsYXRlZCB2YWx1ZXMgb2YgdGhlIGRpc3BsYXkgbGlzdApAQCAtNTI1LDggKzc3MiwxNSBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRUcmFuc2Zvcm1hdGlvbkluZm8oZmxvYXQgYWxwaGEsIGZsb2F0IHRyYW5zbGF0aW9uWCwgZmxvYXQgdHJhbnNsYXRpb25ZLAotICAgICAgICAgICAgZmxvYXQgcm90YXRpb24sIGZsb2F0IHJvdGF0aW9uWCwgZmxvYXQgcm90YXRpb25ZLCBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSk7CisgICAgcHVibGljIHZvaWQgc2V0VHJhbnNmb3JtYXRpb25JbmZvKGZsb2F0IGFscGhhLAorICAgICAgICAgICAgZmxvYXQgdHJhbnNsYXRpb25YLCBmbG9hdCB0cmFuc2xhdGlvblksIGZsb2F0IHRyYW5zbGF0aW9uWiwKKyAgICAgICAgICAgIGZsb2F0IHJvdGF0aW9uLCBmbG9hdCByb3RhdGlvblgsIGZsb2F0IHJvdGF0aW9uWSwgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVkpIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIG5TZXRUcmFuc2Zvcm1hdGlvbkluZm8obUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIGFscGhhLAorICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvblgsIHRyYW5zbGF0aW9uWSwgdHJhbnNsYXRpb25aLAorICAgICAgICAgICAgICAgICAgICByb3RhdGlvbiwgcm90YXRpb25YLCByb3RhdGlvblksIHNjYWxlWCwgc2NhbGVZKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBpdm90IHZhbHVlIGZvciB0aGUgZGlzcGxheSBsaXN0IG9uIHRoZSBYIGF4aXMKQEAgLTUzNiwxNCArNzkwLDIzIEBACiAgICAgICogQHNlZSBWaWV3I3NldFBpdm90WChmbG9hdCkKICAgICAgKiBAc2VlICNnZXRQaXZvdFgoKQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFBpdm90WChmbG9hdCBwaXZvdFgpOworICAgIHB1YmxpYyB2b2lkIHNldFBpdm90WChmbG9hdCBwaXZvdFgpIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIG5TZXRQaXZvdFgobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHBpdm90WCk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBwaXZvdCB2YWx1ZSBmb3IgdGhpcyBkaXNwbGF5IGxpc3Qgb24gdGhlIFggYXhpcywgaW4gcGl4ZWxzLgogICAgICAqCiAgICAgICogQHNlZSAjc2V0UGl2b3RYKGZsb2F0KQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBmbG9hdCBnZXRQaXZvdFgoKTsKKyAgICBwdWJsaWMgZmxvYXQgZ2V0UGl2b3RYKCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgcmV0dXJuIG5HZXRQaXZvdFgobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwLjBmOworICAgIH0KIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBpdm90IHZhbHVlIGZvciB0aGUgZGlzcGxheSBsaXN0IG9uIHRoZSBZIGF4aXMKQEAgLTU1MywxNCArODE2LDIzIEBACiAgICAgICogQHNlZSBWaWV3I3NldFBpdm90WShmbG9hdCkKICAgICAgKiBAc2VlICNnZXRQaXZvdFkoKQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFBpdm90WShmbG9hdCBwaXZvdFkpOworICAgIHB1YmxpYyB2b2lkIHNldFBpdm90WShmbG9hdCBwaXZvdFkpIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIG5TZXRQaXZvdFkobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHBpdm90WSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBwaXZvdCB2YWx1ZSBmb3IgdGhpcyBkaXNwbGF5IGxpc3Qgb24gdGhlIFkgYXhpcywgaW4gcGl4ZWxzLgogICAgICAqCiAgICAgICogQHNlZSAjc2V0UGl2b3RZKGZsb2F0KQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBmbG9hdCBnZXRQaXZvdFkoKTsKKyAgICBwdWJsaWMgZmxvYXQgZ2V0UGl2b3RZKCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgcmV0dXJuIG5HZXRQaXZvdFkobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwLjBmOworICAgIH0KIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhbWVyYSBkaXN0YW5jZSBmb3IgdGhlIGRpc3BsYXkgbGlzdC4gUmVmZXIgdG8KQEAgLTU3MiwxNCArODQ0LDIzIEBACiAgICAgICogQHNlZSBWaWV3I3NldENhbWVyYURpc3RhbmNlKGZsb2F0KQogICAgICAqIEBzZWUgI2dldENhbWVyYURpc3RhbmNlKCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRDYW1lcmFEaXN0YW5jZShmbG9hdCBkaXN0YW5jZSk7CisgICAgcHVibGljIHZvaWQgc2V0Q2FtZXJhRGlzdGFuY2UoZmxvYXQgZGlzdGFuY2UpIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIG5TZXRDYW1lcmFEaXN0YW5jZShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgZGlzdGFuY2UpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgZGlzdGFuY2UgaW4gWiBvZiB0aGUgY2FtZXJhIG9mIHRoZSBkaXNwbGF5IGxpc3QuCiAgICAgICoKICAgICAgKiBAc2VlICNzZXRDYW1lcmFEaXN0YW5jZShmbG9hdCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgZmxvYXQgZ2V0Q2FtZXJhRGlzdGFuY2UoKTsKKyAgICBwdWJsaWMgZmxvYXQgZ2V0Q2FtZXJhRGlzdGFuY2UoKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICByZXR1cm4gbkdldENhbWVyYURpc3RhbmNlKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsZWZ0IHBvc2l0aW9uIGZvciB0aGUgZGlzcGxheSBsaXN0LgpAQCAtNTg5LDE0ICs4NzAsMjMgQEAKICAgICAgKiBAc2VlIFZpZXcjc2V0TGVmdChpbnQpCiAgICAgICogQHNlZSAjZ2V0TGVmdCgpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TGVmdChpbnQgbGVmdCk7CisgICAgcHVibGljIHZvaWQgc2V0TGVmdChpbnQgbGVmdCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgblNldExlZnQobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIGxlZnQpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbGVmdCBwb3NpdGlvbiBmb3IgdGhlIGRpc3BsYXkgbGlzdCBpbiBwaXhlbHMuCiAgICAgICoKICAgICAgKiBAc2VlICNzZXRMZWZ0KGludCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgZmxvYXQgZ2V0TGVmdCgpOworICAgIHB1YmxpYyBmbG9hdCBnZXRMZWZ0KCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgcmV0dXJuIG5HZXRMZWZ0KG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0b3AgcG9zaXRpb24gZm9yIHRoZSBkaXNwbGF5IGxpc3QuCkBAIC02MDYsMTQgKzg5NiwyMyBAQAogICAgICAqIEBzZWUgVmlldyNzZXRUb3AoaW50KQogICAgICAqIEBzZWUgI2dldFRvcCgpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0VG9wKGludCB0b3ApOworICAgIHB1YmxpYyB2b2lkIHNldFRvcChpbnQgdG9wKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICBuU2V0VG9wKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCB0b3ApOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdG9wIHBvc2l0aW9uIGZvciB0aGUgZGlzcGxheSBsaXN0IGluIHBpeGVscy4KICAgICAgKgogICAgICAqIEBzZWUgI3NldFRvcChpbnQpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGZsb2F0IGdldFRvcCgpOworICAgIHB1YmxpYyBmbG9hdCBnZXRUb3AoKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICByZXR1cm4gbkdldFRvcChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgfQogCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIHRoZSBkaXNwbGF5IGxpc3QuCkBAIC02MjMsMTQgKzkyMiwyMyBAQAogICAgICAqIEBzZWUgVmlldyNzZXRSaWdodChpbnQpCiAgICAgICogQHNlZSAjZ2V0UmlnaHQoKQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFJpZ2h0KGludCByaWdodCk7CisgICAgcHVibGljIHZvaWQgc2V0UmlnaHQoaW50IHJpZ2h0KSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICBuU2V0UmlnaHQobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHJpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciB0aGUgZGlzcGxheSBsaXN0IGluIHBpeGVscy4KICAgICAgKgogICAgICAqIEBzZWUgI3NldFJpZ2h0KGludCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgZmxvYXQgZ2V0UmlnaHQoKTsKKyAgICBwdWJsaWMgZmxvYXQgZ2V0UmlnaHQoKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICByZXR1cm4gbkdldFJpZ2h0KG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBib3R0b20gcG9zaXRpb24gZm9yIHRoZSBkaXNwbGF5IGxpc3QuCkBAIC02NDAsMTQgKzk0OCwyMyBAQAogICAgICAqIEBzZWUgVmlldyNzZXRCb3R0b20oaW50KQogICAgICAqIEBzZWUgI2dldEJvdHRvbSgpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0Qm90dG9tKGludCBib3R0b20pOworICAgIHB1YmxpYyB2b2lkIHNldEJvdHRvbShpbnQgYm90dG9tKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICBuU2V0Qm90dG9tKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBib3R0b20pOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYm90dG9tIHBvc2l0aW9uIGZvciB0aGUgZGlzcGxheSBsaXN0IGluIHBpeGVscy4KICAgICAgKgogICAgICAqIEBzZWUgI3NldEJvdHRvbShpbnQpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGZsb2F0IGdldEJvdHRvbSgpOworICAgIHB1YmxpYyBmbG9hdCBnZXRCb3R0b20oKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICByZXR1cm4gbkdldEJvdHRvbShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgfQogCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbGVmdCBhbmQgdG9wIHBvc2l0aW9ucyBmb3IgdGhlIGRpc3BsYXkgbGlzdApAQCAtNjYyLDcgKzk3OSwxMSBAQAogICAgICAqIEBzZWUgVmlldyNzZXRSaWdodChpbnQpCiAgICAgICogQHNlZSBWaWV3I3NldEJvdHRvbShpbnQpCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TGVmdFRvcFJpZ2h0Qm90dG9tKGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pOworICAgIHB1YmxpYyB2b2lkIHNldExlZnRUb3BSaWdodEJvdHRvbShpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICBuU2V0TGVmdFRvcFJpZ2h0Qm90dG9tKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogT2Zmc2V0cyB0aGUgbGVmdCBhbmQgcmlnaHQgcG9zaXRpb25zIGZvciB0aGUgZGlzcGxheSBsaXN0CkBAIC02NzIsNyArOTkzLDExIEBACiAgICAgICoKICAgICAgKiBAc2VlIFZpZXcjb2Zmc2V0TGVmdEFuZFJpZ2h0KGludCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvZmZzZXRMZWZ0QW5kUmlnaHQoZmxvYXQgb2Zmc2V0KTsKKyAgICBwdWJsaWMgdm9pZCBvZmZzZXRMZWZ0QW5kUmlnaHQoZmxvYXQgb2Zmc2V0KSB7CisgICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICBuT2Zmc2V0TGVmdEFuZFJpZ2h0KG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBvZmZzZXQpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogT2Zmc2V0cyB0aGUgdG9wIGFuZCBib3R0b20gdmFsdWVzIGZvciB0aGUgZGlzcGxheSBsaXN0CkBAIC02ODIsNSArMTAwNywxMDUgQEAKICAgICAgKgogICAgICAqIEBzZWUgVmlldyNvZmZzZXRUb3BBbmRCb3R0b20oaW50KQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9mZnNldFRvcEFuZEJvdHRvbShmbG9hdCBvZmZzZXQpOworICAgIHB1YmxpYyB2b2lkIG9mZnNldFRvcEFuZEJvdHRvbShmbG9hdCBvZmZzZXQpIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIG5PZmZzZXRUb3BBbmRCb3R0b20obUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIG9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPdXRwdXRzIHRoZSBkaXNwbGF5IGxpc3QgdG8gdGhlIGxvZy4gVGhpcyBtZXRob2QgZXhpc3RzIGZvciB1c2UgYnkKKyAgICAgKiB0b29scyB0byBvdXRwdXQgZGlzcGxheSBsaXN0cyBmb3Igc2VsZWN0ZWQgbm9kZXMgdG8gdGhlIGxvZy4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHZvaWQgb3V0cHV0KCkgeworICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgeworICAgICAgICAgICAgbk91dHB1dChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBOYXRpdmUgbWV0aG9kcworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbkRlc3Ryb3lEaXNwbGF5TGlzdChpbnQgZGlzcGxheUxpc3QpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBpbnQgbkdldERpc3BsYXlMaXN0U2l6ZShpbnQgZGlzcGxheUxpc3QpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXREaXNwbGF5TGlzdE5hbWUoaW50IGRpc3BsYXlMaXN0LCBTdHJpbmcgbmFtZSk7CisKKyAgICAvLyBQcm9wZXJ0aWVzCisKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuUmVzZXQoaW50IGRpc3BsYXlMaXN0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuT2Zmc2V0VG9wQW5kQm90dG9tKGludCBkaXNwbGF5TGlzdCwgZmxvYXQgb2Zmc2V0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuT2Zmc2V0TGVmdEFuZFJpZ2h0KGludCBkaXNwbGF5TGlzdCwgZmxvYXQgb2Zmc2V0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0TGVmdFRvcFJpZ2h0Qm90dG9tKGludCBkaXNwbGF5TGlzdCwgaW50IGxlZnQsIGludCB0b3AsCisgICAgICAgICAgICBpbnQgcmlnaHQsIGludCBib3R0b20pOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRCb3R0b20oaW50IGRpc3BsYXlMaXN0LCBpbnQgYm90dG9tKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0UmlnaHQoaW50IGRpc3BsYXlMaXN0LCBpbnQgcmlnaHQpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRUb3AoaW50IGRpc3BsYXlMaXN0LCBpbnQgdG9wKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0TGVmdChpbnQgZGlzcGxheUxpc3QsIGludCBsZWZ0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0Q2FtZXJhRGlzdGFuY2UoaW50IGRpc3BsYXlMaXN0LCBmbG9hdCBkaXN0YW5jZSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFBpdm90WShpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHBpdm90WSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFBpdm90WChpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHBpdm90WCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldENhY2hpbmcoaW50IGRpc3BsYXlMaXN0LCBib29sZWFuIGNhY2hpbmcpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRDbGlwVG9Cb3VuZHMoaW50IGRpc3BsYXlMaXN0LCBib29sZWFuIGNsaXBUb0JvdW5kcyk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFByb2plY3RUb0NvbnRhaW5lZFZvbHVtZShpbnQgZGlzcGxheUxpc3QsIGJvb2xlYW4gc2hvdWxkUHJvamVjdCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldElzQ29udGFpbmVkVm9sdW1lKGludCBkaXNwbGF5TGlzdCwgYm9vbGVhbiBpc0NvbnRhaW5lZFZvbHVtZSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldEFscGhhKGludCBkaXNwbGF5TGlzdCwgZmxvYXQgYWxwaGEpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRIYXNPdmVybGFwcGluZ1JlbmRlcmluZyhpbnQgZGlzcGxheUxpc3QsCisgICAgICAgICAgICBib29sZWFuIGhhc092ZXJsYXBwaW5nUmVuZGVyaW5nKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0VHJhbnNsYXRpb25YKGludCBkaXNwbGF5TGlzdCwgZmxvYXQgdHJhbnNsYXRpb25YKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0VHJhbnNsYXRpb25ZKGludCBkaXNwbGF5TGlzdCwgZmxvYXQgdHJhbnNsYXRpb25ZKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0VHJhbnNsYXRpb25aKGludCBkaXNwbGF5TGlzdCwgZmxvYXQgdHJhbnNsYXRpb25aKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0Um90YXRpb24oaW50IGRpc3BsYXlMaXN0LCBmbG9hdCByb3RhdGlvbik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFJvdGF0aW9uWChpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHJvdGF0aW9uWCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFJvdGF0aW9uWShpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHJvdGF0aW9uWSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFNjYWxlWChpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHNjYWxlWCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFNjYWxlWShpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHNjYWxlWSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFRyYW5zZm9ybWF0aW9uSW5mbyhpbnQgZGlzcGxheUxpc3QsIGZsb2F0IGFscGhhLAorICAgICAgICAgICAgZmxvYXQgdHJhbnNsYXRpb25YLCBmbG9hdCB0cmFuc2xhdGlvblksIGZsb2F0IHRyYW5zbGF0aW9uWiwKKyAgICAgICAgICAgIGZsb2F0IHJvdGF0aW9uLCBmbG9hdCByb3RhdGlvblgsIGZsb2F0IHJvdGF0aW9uWSwgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVkpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRTdGF0aWNNYXRyaXgoaW50IGRpc3BsYXlMaXN0LCBpbnQgbmF0aXZlTWF0cml4KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0QW5pbWF0aW9uTWF0cml4KGludCBkaXNwbGF5TGlzdCwgaW50IGFuaW1hdGlvbk1hdHJpeCk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuSGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoaW50IGRpc3BsYXlMaXN0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuR2V0TWF0cml4KGludCBkaXNwbGF5TGlzdCwgaW50IG1hdHJpeCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRBbHBoYShpbnQgZGlzcGxheUxpc3QpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0TGVmdChpbnQgZGlzcGxheUxpc3QpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0VG9wKGludCBkaXNwbGF5TGlzdCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRSaWdodChpbnQgZGlzcGxheUxpc3QpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0Qm90dG9tKGludCBkaXNwbGF5TGlzdCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRDYW1lcmFEaXN0YW5jZShpbnQgZGlzcGxheUxpc3QpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0U2NhbGVYKGludCBkaXNwbGF5TGlzdCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRTY2FsZVkoaW50IGRpc3BsYXlMaXN0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFRyYW5zbGF0aW9uWChpbnQgZGlzcGxheUxpc3QpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0VHJhbnNsYXRpb25ZKGludCBkaXNwbGF5TGlzdCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRUcmFuc2xhdGlvblooaW50IGRpc3BsYXlMaXN0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFJvdGF0aW9uKGludCBkaXNwbGF5TGlzdCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRSb3RhdGlvblgoaW50IGRpc3BsYXlMaXN0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFJvdGF0aW9uWShpbnQgZGlzcGxheUxpc3QpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0UGl2b3RYKGludCBkaXNwbGF5TGlzdCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRQaXZvdFkoaW50IGRpc3BsYXlMaXN0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuT3V0cHV0KGludCBkaXNwbGF5TGlzdCk7CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBGaW5hbGl6YXRpb24KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIERpc3BsYXlMaXN0RmluYWxpemVyIHsKKyAgICAgICAgZmluYWwgaW50IG1OYXRpdmVEaXNwbGF5TGlzdDsKKworICAgICAgICBwdWJsaWMgRGlzcGxheUxpc3RGaW5hbGl6ZXIoaW50IG5hdGl2ZURpc3BsYXlMaXN0KSB7CisgICAgICAgICAgICBtTmF0aXZlRGlzcGxheUxpc3QgPSBuYXRpdmVEaXNwbGF5TGlzdDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBuRGVzdHJveURpc3BsYXlMaXN0KG1OYXRpdmVEaXNwbGF5TGlzdCk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0dMRVMyMENhbnZhcy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9HTEVTMjBDYW52YXMuamF2YQppbmRleCBiZWVmYzIxLi40NDkzMThlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0dMRVMyMENhbnZhcy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvR0xFUzIwQ2FudmFzLmphdmEKQEAgLTE0NSwxMyArMTQ1LDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyLnNldE5hbWUobmFtZSk7Ci0gICAgICAgIG5TZXROYW1lKG1SZW5kZXJlciwgbmFtZSk7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgblNldFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0TmFtZShpbnQgcmVuZGVyZXIsIFN0cmluZyBuYW1lKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0UHJvcGVydHkoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSk7CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAvLyBIYXJkd2FyZSBsYXllcnMKQEAgLTQwOSwxNSArNDA3LDggQEAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgaW50IG5HZXREaXNwbGF5TGlzdChpbnQgcmVuZGVyZXIsIGludCBkaXNwbGF5TGlzdCk7CiAKICAgICBAT3ZlcnJpZGUKLSAgICB2b2lkIG91dHB1dERpc3BsYXlMaXN0KERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0KSB7Ci0gICAgICAgIG5PdXRwdXREaXNwbGF5TGlzdChtUmVuZGVyZXIsICgoR0xFUzIwRGlzcGxheUxpc3QpIGRpc3BsYXlMaXN0KS5nZXROYXRpdmVEaXNwbGF5TGlzdCgpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuT3V0cHV0RGlzcGxheUxpc3QoaW50IHJlbmRlcmVyLCBpbnQgZGlzcGxheUxpc3QpOwotCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBkcmF3RGlzcGxheUxpc3QoRGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFJlY3QgZGlydHksIGludCBmbGFncykgewotICAgICAgICByZXR1cm4gbkRyYXdEaXNwbGF5TGlzdChtUmVuZGVyZXIsICgoR0xFUzIwRGlzcGxheUxpc3QpIGRpc3BsYXlMaXN0KS5nZXROYXRpdmVEaXNwbGF5TGlzdCgpLAorICAgICAgICByZXR1cm4gbkRyYXdEaXNwbGF5TGlzdChtUmVuZGVyZXIsIGRpc3BsYXlMaXN0LmdldE5hdGl2ZURpc3BsYXlMaXN0KCksCiAgICAgICAgICAgICAgICAgZGlydHksIGZsYWdzKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvR0xFUzIwRGlzcGxheUxpc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvR0xFUzIwRGlzcGxheUxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY1MmJhYy4uMDAwMDAwMAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0dMRVMyMERpc3BsYXlMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC52aWV3OwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi0vKioKLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGRpc3BsYXkgbGlzdCBmb3IgT3BlbkdMIEVTIDIuMC4KLSAqLwotY2xhc3MgR0xFUzIwRGlzcGxheUxpc3QgZXh0ZW5kcyBEaXNwbGF5TGlzdCB7Ci0gICAgcHJpdmF0ZSBBcnJheUxpc3Q8RGlzcGxheUxpc3Q+IG1DaGlsZERpc3BsYXlMaXN0czsKLQotICAgIHByaXZhdGUgR0xFUzIwUmVjb3JkaW5nQ2FudmFzIG1DYW52YXM7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1WYWxpZDsKLQotICAgIC8vIFVzZWQgZm9yIGRlYnVnZ2luZwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1OYW1lOwotCi0gICAgLy8gVGhlIG5hdGl2ZSBkaXNwbGF5IGxpc3Qgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB0aGlzIG9iamVjdCBkaWVzLgotICAgIC8vIERPIE5PVCBvdmVyd3JpdGUgdGhpcyByZWZlcmVuY2Ugb25jZSBpdCBpcyBzZXQuCi0gICAgcHJpdmF0ZSBEaXNwbGF5TGlzdEZpbmFsaXplciBtRmluYWxpemVyOwotCi0gICAgR0xFUzIwRGlzcGxheUxpc3QoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgbU5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIGJvb2xlYW4gaGFzTmF0aXZlRGlzcGxheUxpc3QoKSB7Ci0gICAgICAgIHJldHVybiBtVmFsaWQgJiYgbUZpbmFsaXplciAhPSBudWxsOwotICAgIH0KLQotICAgIGludCBnZXROYXRpdmVEaXNwbGF5TGlzdCgpIHsKLSAgICAgICAgaWYgKCFtVmFsaWQgfHwgbUZpbmFsaXplciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUaGUgZGlzcGxheSBsaXN0IGlzIG5vdCB2YWxpZC4iKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3Q7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEhhcmR3YXJlQ2FudmFzIHN0YXJ0KGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICBpZiAobUNhbnZhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJSZWNvcmRpbmcgaGFzIGFscmVhZHkgc3RhcnRlZCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG1DYW52YXMgPSBHTEVTMjBSZWNvcmRpbmdDYW52YXMub2J0YWluKHRoaXMpOwotICAgICAgICBtQ2FudmFzLnN0YXJ0KCk7Ci0KLSAgICAgICAgbUNhbnZhcy5zZXRWaWV3cG9ydCh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgLy8gVGhlIGRpcnR5IHJlY3Qgc2hvdWxkIGFsd2F5cyBiZSBudWxsIGZvciBhIGRpc3BsYXkgbGlzdAotICAgICAgICBtQ2FudmFzLm9uUHJlRHJhdyhudWxsKTsKLQotICAgICAgICByZXR1cm4gbUNhbnZhczsKLSAgICB9Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xlYXIoKSB7Ci0gICAgICAgIGNsZWFyRGlydHkoKTsKLQotICAgICAgICBpZiAobUNhbnZhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQ2FudmFzLnJlY3ljbGUoKTsKLSAgICAgICAgICAgIG1DYW52YXMgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIG1WYWxpZCA9IGZhbHNlOwotCi0gICAgICAgIGNsZWFyUmVmZXJlbmNlcygpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJSZWZlcmVuY2VzKCkgewotICAgICAgICBpZiAobUNoaWxkRGlzcGxheUxpc3RzICE9IG51bGwpIG1DaGlsZERpc3BsYXlMaXN0cy5jbGVhcigpOwotICAgIH0KLQotICAgIEFycmF5TGlzdDxEaXNwbGF5TGlzdD4gZ2V0Q2hpbGREaXNwbGF5TGlzdHMoKSB7Ci0gICAgICAgIGlmIChtQ2hpbGREaXNwbGF5TGlzdHMgPT0gbnVsbCkgbUNoaWxkRGlzcGxheUxpc3RzID0gbmV3IEFycmF5TGlzdDxEaXNwbGF5TGlzdD4oKTsKLSAgICAgICAgcmV0dXJuIG1DaGlsZERpc3BsYXlMaXN0czsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZXNldCgpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5SZXNldChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkgewotICAgICAgICByZXR1cm4gbVZhbGlkOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGVuZCgpIHsKLSAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgewotICAgICAgICAgICAgbUNhbnZhcy5vblBvc3REcmF3KCk7Ci0gICAgICAgICAgICBpZiAobUZpbmFsaXplciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNhbnZhcy5lbmQobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtRmluYWxpemVyID0gbmV3IERpc3BsYXlMaXN0RmluYWxpemVyKG1DYW52YXMuZW5kKDApKTsKLSAgICAgICAgICAgICAgICBuU2V0RGlzcGxheUxpc3ROYW1lKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBtTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtQ2FudmFzLnJlY3ljbGUoKTsKLSAgICAgICAgICAgIG1DYW52YXMgPSBudWxsOwotICAgICAgICAgICAgbVZhbGlkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0U2l6ZSgpIHsKLSAgICAgICAgaWYgKG1GaW5hbGl6ZXIgPT0gbnVsbCkgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBuR2V0RGlzcGxheUxpc3RTaXplKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuRGVzdHJveURpc3BsYXlMaXN0KGludCBkaXNwbGF5TGlzdCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBuR2V0RGlzcGxheUxpc3RTaXplKGludCBkaXNwbGF5TGlzdCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldERpc3BsYXlMaXN0TmFtZShpbnQgZGlzcGxheUxpc3QsIFN0cmluZyBuYW1lKTsKLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIE5hdGl2ZSBWaWV3IFByb3BlcnRpZXMKLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldENhY2hpbmcoYm9vbGVhbiBjYWNoaW5nKSB7Ci0gICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7Ci0gICAgICAgICAgICBuU2V0Q2FjaGluZyhtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgY2FjaGluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRDbGlwVG9Cb3VuZHMoYm9vbGVhbiBjbGlwVG9Cb3VuZHMpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5TZXRDbGlwVG9Cb3VuZHMobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIGNsaXBUb0JvdW5kcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRNYXRyaXgoTWF0cml4IG1hdHJpeCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgblNldFN0YXRpY01hdHJpeChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgbWF0cml4Lm5hdGl2ZV9pbnN0YW5jZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWF0cml4IGdldE1hdHJpeChNYXRyaXggbWF0cml4KSB7Ci0gICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7Ci0gICAgICAgICAgICBuR2V0TWF0cml4KG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBtYXRyaXgubmF0aXZlX2luc3RhbmNlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFuaW1hdGlvbk1hdHJpeChNYXRyaXggbWF0cml4KSB7Ci0gICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7Ci0gICAgICAgICAgICBuU2V0QW5pbWF0aW9uTWF0cml4KG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LAotICAgICAgICAgICAgICAgICAgICAobWF0cml4ICE9IG51bGwpID8gbWF0cml4Lm5hdGl2ZV9pbnN0YW5jZSA6IDApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5TZXRBbHBoYShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgYWxwaGEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldEFscGhhKCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgcmV0dXJuIG5HZXRBbHBoYShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDEuMGY7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0SGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoYm9vbGVhbiBoYXNPdmVybGFwcGluZ1JlbmRlcmluZykgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgblNldEhhc092ZXJsYXBwaW5nUmVuZGVyaW5nKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBoYXNPdmVybGFwcGluZ1JlbmRlcmluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNPdmVybGFwcGluZ1JlbmRlcmluZygpIHsKLSAgICAgICAgLy9ub2luc3BlY3Rpb24gU2ltcGxpZmlhYmxlSWZTdGF0ZW1lbnQKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIHJldHVybiBuSGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0aW9uWChmbG9hdCB0cmFuc2xhdGlvblgpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5TZXRUcmFuc2xhdGlvblgobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHRyYW5zbGF0aW9uWCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0VHJhbnNsYXRpb25YKCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgcmV0dXJuIG5HZXRUcmFuc2xhdGlvblgobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0aW9uWShmbG9hdCB0cmFuc2xhdGlvblkpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5TZXRUcmFuc2xhdGlvblkobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHRyYW5zbGF0aW9uWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0VHJhbnNsYXRpb25ZKCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgcmV0dXJuIG5HZXRUcmFuc2xhdGlvblkobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFJvdGF0aW9uKGZsb2F0IHJvdGF0aW9uKSB7Ci0gICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7Ci0gICAgICAgICAgICBuU2V0Um90YXRpb24obUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHJvdGF0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXRSb3RhdGlvbigpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIHJldHVybiBuR2V0Um90YXRpb24obUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFJvdGF0aW9uWChmbG9hdCByb3RhdGlvblgpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5TZXRSb3RhdGlvblgobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHJvdGF0aW9uWCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0Um90YXRpb25YKCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgcmV0dXJuIG5HZXRSb3RhdGlvblgobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFJvdGF0aW9uWShmbG9hdCByb3RhdGlvblkpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5TZXRSb3RhdGlvblkobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHJvdGF0aW9uWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0Um90YXRpb25ZKCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgcmV0dXJuIG5HZXRSb3RhdGlvblkobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFNjYWxlWChmbG9hdCBzY2FsZVgpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5TZXRTY2FsZVgobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHNjYWxlWCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0U2NhbGVYKCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgcmV0dXJuIG5HZXRTY2FsZVgobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAxLjBmOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFNjYWxlWShmbG9hdCBzY2FsZVkpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5TZXRTY2FsZVkobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIHNjYWxlWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0U2NhbGVZKCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgcmV0dXJuIG5HZXRTY2FsZVkobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAxLjBmOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zZm9ybWF0aW9uSW5mbyhmbG9hdCBhbHBoYSwgZmxvYXQgdHJhbnNsYXRpb25YLCBmbG9hdCB0cmFuc2xhdGlvblksCi0gICAgICAgICAgICBmbG9hdCByb3RhdGlvbiwgZmxvYXQgcm90YXRpb25YLCBmbG9hdCByb3RhdGlvblksIGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKSB7Ci0gICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7Ci0gICAgICAgICAgICBuU2V0VHJhbnNmb3JtYXRpb25JbmZvKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBhbHBoYSwgdHJhbnNsYXRpb25YLCB0cmFuc2xhdGlvblksCi0gICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uLCByb3RhdGlvblgsIHJvdGF0aW9uWSwgc2NhbGVYLCBzY2FsZVkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0UGl2b3RYKGZsb2F0IHBpdm90WCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgblNldFBpdm90WChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgcGl2b3RYKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXRQaXZvdFgoKSB7Ci0gICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbkdldFBpdm90WChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0UGl2b3RZKGZsb2F0IHBpdm90WSkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgblNldFBpdm90WShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgcGl2b3RZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXRQaXZvdFkoKSB7Ci0gICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbkdldFBpdm90WShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0Q2FtZXJhRGlzdGFuY2UoZmxvYXQgZGlzdGFuY2UpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5TZXRDYW1lcmFEaXN0YW5jZShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgZGlzdGFuY2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldENhbWVyYURpc3RhbmNlKCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgcmV0dXJuIG5HZXRDYW1lcmFEaXN0YW5jZShtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0TGVmdChpbnQgbGVmdCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgblNldExlZnQobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIGxlZnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldExlZnQoKSB7Ci0gICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbkdldExlZnQobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFRvcChpbnQgdG9wKSB7Ci0gICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7Ci0gICAgICAgICAgICBuU2V0VG9wKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCB0b3ApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldFRvcCgpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIHJldHVybiBuR2V0VG9wKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRSaWdodChpbnQgcmlnaHQpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5TZXRSaWdodChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgcmlnaHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldFJpZ2h0KCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgcmV0dXJuIG5HZXRSaWdodChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0Qm90dG9tKGludCBib3R0b20pIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5TZXRCb3R0b20obUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIGJvdHRvbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0Qm90dG9tKCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgcmV0dXJuIG5HZXRCb3R0b20obUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldExlZnRUb3BSaWdodEJvdHRvbShpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7Ci0gICAgICAgIGlmIChoYXNOYXRpdmVEaXNwbGF5TGlzdCgpKSB7Ci0gICAgICAgICAgICBuU2V0TGVmdFRvcFJpZ2h0Qm90dG9tKG1GaW5hbGl6ZXIubU5hdGl2ZURpc3BsYXlMaXN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb2Zmc2V0TGVmdEFuZFJpZ2h0KGZsb2F0IG9mZnNldCkgewotICAgICAgICBpZiAoaGFzTmF0aXZlRGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgbk9mZnNldExlZnRBbmRSaWdodChtRmluYWxpemVyLm1OYXRpdmVEaXNwbGF5TGlzdCwgb2Zmc2V0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9mZnNldFRvcEFuZEJvdHRvbShmbG9hdCBvZmZzZXQpIHsKLSAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKLSAgICAgICAgICAgIG5PZmZzZXRUb3BBbmRCb3R0b20obUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QsIG9mZnNldCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuUmVzZXQoaW50IGRpc3BsYXlMaXN0KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuT2Zmc2V0VG9wQW5kQm90dG9tKGludCBkaXNwbGF5TGlzdCwgZmxvYXQgb2Zmc2V0KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuT2Zmc2V0TGVmdEFuZFJpZ2h0KGludCBkaXNwbGF5TGlzdCwgZmxvYXQgb2Zmc2V0KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0TGVmdFRvcFJpZ2h0Qm90dG9tKGludCBkaXNwbGF5TGlzdCwgaW50IGxlZnQsIGludCB0b3AsCi0gICAgICAgICAgICBpbnQgcmlnaHQsIGludCBib3R0b20pOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRCb3R0b20oaW50IGRpc3BsYXlMaXN0LCBpbnQgYm90dG9tKTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0UmlnaHQoaW50IGRpc3BsYXlMaXN0LCBpbnQgcmlnaHQpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRUb3AoaW50IGRpc3BsYXlMaXN0LCBpbnQgdG9wKTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0TGVmdChpbnQgZGlzcGxheUxpc3QsIGludCBsZWZ0KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0Q2FtZXJhRGlzdGFuY2UoaW50IGRpc3BsYXlMaXN0LCBmbG9hdCBkaXN0YW5jZSk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFBpdm90WShpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHBpdm90WSk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFBpdm90WChpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHBpdm90WCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldENhY2hpbmcoaW50IGRpc3BsYXlMaXN0LCBib29sZWFuIGNhY2hpbmcpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRDbGlwVG9Cb3VuZHMoaW50IGRpc3BsYXlMaXN0LCBib29sZWFuIGNsaXBUb0JvdW5kcyk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldEFscGhhKGludCBkaXNwbGF5TGlzdCwgZmxvYXQgYWxwaGEpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRIYXNPdmVybGFwcGluZ1JlbmRlcmluZyhpbnQgZGlzcGxheUxpc3QsCi0gICAgICAgICAgICBib29sZWFuIGhhc092ZXJsYXBwaW5nUmVuZGVyaW5nKTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0VHJhbnNsYXRpb25YKGludCBkaXNwbGF5TGlzdCwgZmxvYXQgdHJhbnNsYXRpb25YKTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0VHJhbnNsYXRpb25ZKGludCBkaXNwbGF5TGlzdCwgZmxvYXQgdHJhbnNsYXRpb25ZKTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0Um90YXRpb24oaW50IGRpc3BsYXlMaXN0LCBmbG9hdCByb3RhdGlvbik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFJvdGF0aW9uWChpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHJvdGF0aW9uWCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFJvdGF0aW9uWShpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHJvdGF0aW9uWSk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFNjYWxlWChpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHNjYWxlWCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFNjYWxlWShpbnQgZGlzcGxheUxpc3QsIGZsb2F0IHNjYWxlWSk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFRyYW5zZm9ybWF0aW9uSW5mbyhpbnQgZGlzcGxheUxpc3QsIGZsb2F0IGFscGhhLAotICAgICAgICAgICAgZmxvYXQgdHJhbnNsYXRpb25YLCBmbG9hdCB0cmFuc2xhdGlvblksIGZsb2F0IHJvdGF0aW9uLCBmbG9hdCByb3RhdGlvblgsCi0gICAgICAgICAgICBmbG9hdCByb3RhdGlvblksIGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0U3RhdGljTWF0cml4KGludCBkaXNwbGF5TGlzdCwgaW50IG5hdGl2ZU1hdHJpeCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldEFuaW1hdGlvbk1hdHJpeChpbnQgZGlzcGxheUxpc3QsIGludCBhbmltYXRpb25NYXRyaXgpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbkhhc092ZXJsYXBwaW5nUmVuZGVyaW5nKGludCBkaXNwbGF5TGlzdCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbkdldE1hdHJpeChpbnQgZGlzcGxheUxpc3QsIGludCBtYXRyaXgpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0QWxwaGEoaW50IGRpc3BsYXlMaXN0KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldExlZnQoaW50IGRpc3BsYXlMaXN0KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFRvcChpbnQgZGlzcGxheUxpc3QpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0UmlnaHQoaW50IGRpc3BsYXlMaXN0KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldEJvdHRvbShpbnQgZGlzcGxheUxpc3QpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0Q2FtZXJhRGlzdGFuY2UoaW50IGRpc3BsYXlMaXN0KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFNjYWxlWChpbnQgZGlzcGxheUxpc3QpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0U2NhbGVZKGludCBkaXNwbGF5TGlzdCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRUcmFuc2xhdGlvblgoaW50IGRpc3BsYXlMaXN0KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFRyYW5zbGF0aW9uWShpbnQgZGlzcGxheUxpc3QpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0Um90YXRpb24oaW50IGRpc3BsYXlMaXN0KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFJvdGF0aW9uWChpbnQgZGlzcGxheUxpc3QpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0Um90YXRpb25ZKGludCBkaXNwbGF5TGlzdCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRQaXZvdFgoaW50IGRpc3BsYXlMaXN0KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFBpdm90WShpbnQgZGlzcGxheUxpc3QpOwotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gRmluYWxpemF0aW9uCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEaXNwbGF5TGlzdEZpbmFsaXplciB7Ci0gICAgICAgIGZpbmFsIGludCBtTmF0aXZlRGlzcGxheUxpc3Q7Ci0KLSAgICAgICAgcHVibGljIERpc3BsYXlMaXN0RmluYWxpemVyKGludCBuYXRpdmVEaXNwbGF5TGlzdCkgewotICAgICAgICAgICAgbU5hdGl2ZURpc3BsYXlMaXN0ID0gbmF0aXZlRGlzcGxheUxpc3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbkRlc3Ryb3lEaXNwbGF5TGlzdChtTmF0aXZlRGlzcGxheUxpc3QpOwotICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICBzdXBlci5maW5hbGl6ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9HTEVTMjBSZWNvcmRpbmdDYW52YXMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvR0xFUzIwUmVjb3JkaW5nQ2FudmFzLmphdmEKaW5kZXggYjZmYzM4ZC4uOTdlZmExOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9HTEVTMjBSZWNvcmRpbmdDYW52YXMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0dMRVMyMFJlY29yZGluZ0NhbnZhcy5qYXZhCkBAIC0zMywxMyArMzMsMTMgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTeW5jaHJvbml6ZWRQb29sPEdMRVMyMFJlY29yZGluZ0NhbnZhcz4gc1Bvb2wgPQogICAgICAgICAgICAgbmV3IFN5bmNocm9uaXplZFBvb2w8R0xFUzIwUmVjb3JkaW5nQ2FudmFzPihQT09MX0xJTUlUKTsKIAotICAgIHByaXZhdGUgR0xFUzIwRGlzcGxheUxpc3QgbURpc3BsYXlMaXN0OworICAgIHByaXZhdGUgRGlzcGxheUxpc3QgbURpc3BsYXlMaXN0OwogCiAgICAgcHJpdmF0ZSBHTEVTMjBSZWNvcmRpbmdDYW52YXMoKSB7CiAgICAgICAgIHN1cGVyKHRydWUsIHRydWUpOwogICAgIH0KIAotICAgIHN0YXRpYyBHTEVTMjBSZWNvcmRpbmdDYW52YXMgb2J0YWluKEdMRVMyMERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0KSB7CisgICAgc3RhdGljIEdMRVMyMFJlY29yZGluZ0NhbnZhcyBvYnRhaW4oRGlzcGxheUxpc3QgZGlzcGxheUxpc3QpIHsKICAgICAgICAgR0xFUzIwUmVjb3JkaW5nQ2FudmFzIGNhbnZhcyA9IHNQb29sLmFjcXVpcmUoKTsKICAgICAgICAgaWYgKGNhbnZhcyA9PSBudWxsKSB7CiAgICAgICAgICAgICBjYW52YXMgPSBuZXcgR0xFUzIwUmVjb3JkaW5nQ2FudmFzKCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0dMRVMyMFJlbmRlckxheWVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0dMRVMyMFJlbmRlckxheWVyLmphdmEKaW5kZXggNjhiYTc3Yy4uOGM5Nzg2NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9HTEVTMjBSZW5kZXJMYXllci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvR0xFUzIwUmVuZGVyTGF5ZXIuamF2YQpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgdm9pZCByZWRyYXdMYXRlcihEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgUmVjdCBkaXJ0eVJlY3QpIHsKICAgICAgICAgR0xFUzIwQ2FudmFzLm5VcGRhdGVSZW5kZXJMYXllcihtTGF5ZXIsIG1DYW52YXMuZ2V0UmVuZGVyZXIoKSwKLSAgICAgICAgICAgICAgICAoKEdMRVMyMERpc3BsYXlMaXN0KSBkaXNwbGF5TGlzdCkuZ2V0TmF0aXZlRGlzcGxheUxpc3QoKSwKKyAgICAgICAgICAgICAgICBkaXNwbGF5TGlzdC5nZXROYXRpdmVEaXNwbGF5TGlzdCgpLAogICAgICAgICAgICAgICAgIGRpcnR5UmVjdC5sZWZ0LCBkaXJ0eVJlY3QudG9wLCBkaXJ0eVJlY3QucmlnaHQsIGRpcnR5UmVjdC5ib3R0b20pOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvR0xSZW5kZXJlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9HTFJlbmRlcmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgxMTExMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvR0xSZW5kZXJlci5qYXZhCkBAIC0wLDAgKzEsMTYwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC52aWV3OworCitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfQUxQSEFfU0laRTsKK2ltcG9ydCBzdGF0aWMgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwLkVHTF9CQURfTkFUSVZFX1dJTkRPVzsKK2ltcG9ydCBzdGF0aWMgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwLkVHTF9CTFVFX1NJWkU7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfQ09ORklHX0NBVkVBVDsKK2ltcG9ydCBzdGF0aWMgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwLkVHTF9ERUZBVUxUX0RJU1BMQVk7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfREVQVEhfU0laRTsKK2ltcG9ydCBzdGF0aWMgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwLkVHTF9EUkFXOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX0dSRUVOX1NJWkU7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfSEVJR0hUOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX05PTkU7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfTk9fQ09OVEVYVDsKK2ltcG9ydCBzdGF0aWMgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwLkVHTF9OT19ESVNQTEFZOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX05PX1NVUkZBQ0U7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfUkVEX1NJWkU7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfUkVOREVSQUJMRV9UWVBFOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX1NBTVBMRVM7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfU0FNUExFX0JVRkZFUlM7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfU1RFTkNJTF9TSVpFOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX1NVQ0NFU1M7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfU1VSRkFDRV9UWVBFOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX1dJRFRIOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX1dJTkRPV19CSVQ7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50Q2FsbGJhY2tzMjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMMTQ7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xVdGlsczsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5NYW5hZ2VkRUdMQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CitpbXBvcnQgYW5kcm9pZC5vcy5UcmFjZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZS5PdXRPZlJlc291cmNlc0V4Y2VwdGlvbjsKKworaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5nbGVzX2puaS5FR0xJbXBsOworCitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrOworCitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMTsKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29uZmlnOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xDb250ZXh0OworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xEaXNwbGF5OworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xTdXJmYWNlOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLm9wZW5nbGVzLkdMOworCisvKioKKyAqIEhhcmR3YXJlIHJlbmRlcmVyIHVzaW5nIE9wZW5HTAorICoKKyAqIEBoaWRlCisgKi8KK3B1YmxpYyBjbGFzcyBHTFJlbmRlcmVyIGV4dGVuZHMgSGFyZHdhcmVSZW5kZXJlciB7CisgICAgc3RhdGljIGZpbmFsIGludCBTVVJGQUNFX1NUQVRFX0VSUk9SID0gMDsKKyAgICBzdGF0aWMgZmluYWwgaW50IFNVUkZBQ0VfU1RBVEVfU1VDQ0VTUyA9IDE7CisgICAgc3RhdGljIGZpbmFsIGludCBTVVJGQUNFX1NUQVRFX1VQREFURUQgPSAyOworCisgICAgc3RhdGljIGZpbmFsIGludCBGVU5DVE9SX1BST0NFU1NfREVMQVkgPSA0OworCisgICAgLyoqCisgICAgICogTnVtYmVyIG9mIGZyYW1lcyB0byBwcm9maWxlLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX01BWF9GUkFNRVMgPSAxMjg7CisKKyAgICAvKioKKyAgICAgKiBOdW1iZXIgb2YgZmxvYXRzIHBlciBwcm9maWxlZCBmcmFtZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UID0gMzsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX0RSQVdfTUFSR0lOID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX1dJRFRIID0gMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBQUk9GSUxFX0RSQVdfQ09MT1JTID0geyAweGNmM2U2NmNjLCAweGNmZGMzOTEyLCAweGNmZTY5ODAwIH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST0ZJTEVfRFJBV19DVVJSRU5UX0ZSQU1FX0NPTE9SID0gMHhjZjVmYWE0ZDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX1RIUkVTSE9MRF9DT0xPUiA9IDB4ZmY1ZmFhNGQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST0ZJTEVfRFJBV19USFJFU0hPTERfU1RST0tFX1dJRFRIID0gMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX0RQX1BFUl9NUyA9IDc7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBWSVNVQUxJWkVSUyA9IHsKKyAgICAgICAgICAgIFBST0ZJTEVfUFJPUEVSVFlfVklTVUFMSVpFX0JBUlMsCisgICAgICAgICAgICBQUk9GSUxFX1BST1BFUlRZX1ZJU1VBTElaRV9MSU5FUworICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBPVkVSRFJBVyA9IHsKKyAgICAgICAgICAgIE9WRVJEUkFXX1BST1BFUlRZX1NIT1csCisgICAgICAgICAgICBPVkVSRFJBV19QUk9QRVJUWV9DT1VOVAorICAgIH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9WRVJEUkFXX1RZUEVfQ09VTlQgPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBHTF9WRVJTSU9OID0gMjsKKworICAgIHN0YXRpYyBFR0wxMCBzRWdsOworICAgIHN0YXRpYyBFR0xEaXNwbGF5IHNFZ2xEaXNwbGF5OworICAgIHN0YXRpYyBFR0xDb25maWcgc0VnbENvbmZpZzsKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W10gc0VnbExvY2sgPSBuZXcgT2JqZWN0WzBdOworICAgIGludCBtV2lkdGggPSAtMSwgbUhlaWdodCA9IC0xOworCisgICAgc3RhdGljIGZpbmFsIFRocmVhZExvY2FsPE1hbmFnZWRFR0xDb250ZXh0PiBzRWdsQ29udGV4dFN0b3JhZ2UKKyAgICAgICAgICAgID0gbmV3IFRocmVhZExvY2FsPE1hbmFnZWRFR0xDb250ZXh0PigpOworCisgICAgRUdMQ29udGV4dCBtRWdsQ29udGV4dDsKKyAgICBUaHJlYWQgbUVnbFRocmVhZDsKKworICAgIEVHTFN1cmZhY2UgbUVnbFN1cmZhY2U7CisKKyAgICBHTCBtR2w7CisgICAgSGFyZHdhcmVDYW52YXMgbUNhbnZhczsKKworICAgIFN0cmluZyBtTmFtZTsKKworICAgIGxvbmcgbUZyYW1lQ291bnQ7CisgICAgUGFpbnQgbURlYnVnUGFpbnQ7CisKKyAgICBzdGF0aWMgYm9vbGVhbiBzRGlydHlSZWdpb25zOworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIHNEaXJ0eVJlZ2lvbnNSZXF1ZXN0ZWQ7CisgICAgc3RhdGljIHsKKyAgICAgICAgU3RyaW5nIGRpcnR5UHJvcGVydHkgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldChSRU5ERVJfRElSVFlfUkVHSU9OU19QUk9QRVJUWSwgInRydWUiKTsKKyAgICAgICAgLy9ub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb24sQ29uc3RhbnRDb25kaXRpb25zCisgICAgICAgIHNEaXJ0eVJlZ2lvbnMgPSAidHJ1ZSIuZXF1YWxzSWdub3JlQ2FzZShkaXJ0eVByb3BlcnR5KTsKKyAgICAgICAgc0RpcnR5UmVnaW9uc1JlcXVlc3RlZCA9IHNEaXJ0eVJlZ2lvbnM7CisgICAgfQorCisgICAgYm9vbGVhbiBtRGlydHlSZWdpb25zRW5hYmxlZDsKKyAgICBib29sZWFuIG1VcGRhdGVEaXJ0eVJlZ2lvbnM7CisKKyAgICBib29sZWFuIG1Qcm9maWxlRW5hYmxlZDsKKyAgICBpbnQgbVByb2ZpbGVWaXN1YWxpemVyVHlwZSA9IC0xOworICAgIGZsb2F0W10gbVByb2ZpbGVEYXRhOworICAgIFJlZW50cmFudExvY2sgbVByb2ZpbGVMb2NrOworICAgIGludCBtUHJvZmlsZUN1cnJlbnRGcmFtZSA9IC1QUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQ7CisKKyAgICBHcmFwaERhdGFQcm92aWRlciBtRGVidWdEYXRhUHJvdmlkZXI7CisgICAgZmxvYXRbXVtdIG1Qcm9maWxlU2hhcGVzOworICAgIFBhaW50IG1Qcm9maWxlUGFpbnQ7CisKKyAgICBib29sZWFuIG1EZWJ1Z0RpcnR5UmVnaW9uczsKKyAgICBpbnQgbURlYnVnT3ZlcmRyYXcgPSAtMTsKKyAgICBIYXJkd2FyZUxheWVyIG1EZWJ1Z092ZXJkcmF3TGF5ZXI7CisgICAgUGFpbnQgbURlYnVnT3ZlcmRyYXdQYWludDsKKworICAgIGZpbmFsIGJvb2xlYW4gbVRyYW5zbHVjZW50OworCisgICAgcHJpdmF0ZSBib29sZWFuIG1EZXN0cm95ZWQ7CisKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVJlZHJhd0NsaXAgPSBuZXcgUmVjdCgpOworCisgICAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBtU3VyZmFjZVNpemUgPSBuZXcgaW50WzJdOworICAgIHByaXZhdGUgZmluYWwgRnVuY3RvcnNSdW5uYWJsZSBtRnVuY3RvcnNSdW5uYWJsZSA9IG5ldyBGdW5jdG9yc1J1bm5hYmxlKCk7CisKKyAgICBwcml2YXRlIGxvbmcgbURyYXdEZWx0YSA9IExvbmcuTUFYX1ZBTFVFOworCisgICAgcHJpdmF0ZSBHTEVTMjBDYW52YXMgbUdsQ2FudmFzOworCisgICAgcHJpdmF0ZSBEaXNwbGF5TWV0cmljcyBtRGlzcGxheU1ldHJpY3M7CisKKyAgICBwcml2YXRlIHN0YXRpYyBFR0xTdXJmYWNlIHNQYnVmZmVyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdFtdIHNQYnVmZmVyTG9jayA9IG5ldyBPYmplY3RbMF07CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBHTFJlbmRlcmVyRWdsQ29udGV4dCBleHRlbmRzIE1hbmFnZWRFR0xDb250ZXh0IHsKKyAgICAgICAgZmluYWwgSGFuZGxlciBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7CisKKyAgICAgICAgcHVibGljIEdMUmVuZGVyZXJFZ2xDb250ZXh0KEVHTENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25UZXJtaW5hdGUoZmluYWwgRUdMQ29udGV4dCBlZ2xDb250ZXh0KSB7CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gdGhpcyBvbiB0aGUgY29ycmVjdCB0aHJlYWQuCisgICAgICAgICAgICBpZiAobUhhbmRsZXIuZ2V0TG9vcGVyKCkgIT0gTG9vcGVyLm15TG9vcGVyKCkpIHsKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uVGVybWluYXRlKGVnbENvbnRleHQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHNFZ2xMb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKHNFZ2wgPT0gbnVsbCkgcmV0dXJuOworCisgICAgICAgICAgICAgICAgaWYgKEVHTEltcGwuZ2V0SW5pdENvdW50KHNFZ2xEaXNwbGF5KSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHVzZVBidWZmZXJTdXJmYWNlKGVnbENvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBHTEVTMjBDYW52YXMudGVybWluYXRlQ2FjaGVzKCk7CisKKyAgICAgICAgICAgICAgICAgICAgc0VnbC5lZ2xEZXN0cm95Q29udGV4dChzRWdsRGlzcGxheSwgZWdsQ29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIHNFZ2xDb250ZXh0U3RvcmFnZS5zZXQobnVsbCk7CisgICAgICAgICAgICAgICAgICAgIHNFZ2xDb250ZXh0U3RvcmFnZS5yZW1vdmUoKTsKKworICAgICAgICAgICAgICAgICAgICBzRWdsLmVnbERlc3Ryb3lTdXJmYWNlKHNFZ2xEaXNwbGF5LCBzUGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIHNFZ2wuZWdsTWFrZUN1cnJlbnQoc0VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7CisKKyAgICAgICAgICAgICAgICAgICAgc0VnbC5lZ2xSZWxlYXNlVGhyZWFkKCk7CisgICAgICAgICAgICAgICAgICAgIHNFZ2wuZWdsVGVybWluYXRlKHNFZ2xEaXNwbGF5KTsKKworICAgICAgICAgICAgICAgICAgICBzRWdsID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgc0VnbERpc3BsYXkgPSBudWxsOworICAgICAgICAgICAgICAgICAgICBzRWdsQ29uZmlnID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgc1BidWZmZXIgPSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEhhcmR3YXJlQ2FudmFzIGNyZWF0ZUNhbnZhcygpIHsKKyAgICAgICAgcmV0dXJuIG1HbENhbnZhcyA9IG5ldyBHTEVTMjBDYW52YXMobVRyYW5zbHVjZW50KTsKKyAgICB9CisKKyAgICBNYW5hZ2VkRUdMQ29udGV4dCBjcmVhdGVNYW5hZ2VkQ29udGV4dChFR0xDb250ZXh0IGVnbENvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBHTFJlbmRlcmVyRWdsQ29udGV4dChtRWdsQ29udGV4dCk7CisgICAgfQorCisgICAgaW50W10gZ2V0Q29uZmlnKGJvb2xlYW4gZGlydHlSZWdpb25zKSB7CisgICAgICAgIC8vbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uLENvbnN0YW50Q29uZGl0aW9ucworICAgICAgICBmaW5hbCBpbnQgc3RlbmNpbFNpemUgPSBHTEVTMjBDYW52YXMuZ2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgZmluYWwgaW50IHN3YXBCZWhhdmlvciA9IGRpcnR5UmVnaW9ucyA/IEVHTDE0LkVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQgOiAwOworCisgICAgICAgIHJldHVybiBuZXcgaW50W10geworICAgICAgICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTDE0LkVHTF9PUEVOR0xfRVMyX0JJVCwKKyAgICAgICAgICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfREVQVEhfU0laRSwgMCwKKyAgICAgICAgICAgICAgICBFR0xfQ09ORklHX0NBVkVBVCwgRUdMX05PTkUsCisgICAgICAgICAgICAgICAgRUdMX1NURU5DSUxfU0laRSwgc3RlbmNpbFNpemUsCisgICAgICAgICAgICAgICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX1dJTkRPV19CSVQgfCBzd2FwQmVoYXZpb3IsCisgICAgICAgICAgICAgICAgRUdMX05PTkUKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICB2b2lkIGluaXRDYWNoZXMoKSB7CisgICAgICAgIGlmIChHTEVTMjBDYW52YXMuaW5pdENhY2hlcygpKSB7CisgICAgICAgICAgICAvLyBDYWNoZXMgd2VyZSAocmUpaW5pdGlhbGl6ZWQsIHJlYmluZCBhdGxhcworICAgICAgICAgICAgaW5pdEF0bGFzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGluaXRBdGxhcygpIHsKKyAgICAgICAgSUJpbmRlciBiaW5kZXIgPSBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKCJhc3NldGF0bGFzIik7CisgICAgICAgIGlmIChiaW5kZXIgPT0gbnVsbCkgcmV0dXJuOworCisgICAgICAgIElBc3NldEF0bGFzIGF0bGFzID0gSUFzc2V0QXRsYXMuU3R1Yi5hc0ludGVyZmFjZShiaW5kZXIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKGF0bGFzLmlzQ29tcGF0aWJsZShhbmRyb2lkLm9zLlByb2Nlc3MubXlQcGlkKCkpKSB7CisgICAgICAgICAgICAgICAgR3JhcGhpY0J1ZmZlciBidWZmZXIgPSBhdGxhcy5nZXRCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50W10gbWFwID0gYXRsYXMuZ2V0TWFwKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXAgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgR0xFUzIwQ2FudmFzLmluaXRBdGxhcyhidWZmZXIsIG1hcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgSUFzc2V0QXRsYXMgaXMgbm90IHRoZSBzYW1lIGNsYXNzIGFzIHRoZSBJQmluZGVyCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGFyZSB1c2luZyBhIHJlbW90ZSBzZXJ2aWNlIGFuZCB3ZSBjYW4gc2FmZWx5CisgICAgICAgICAgICAgICAgICAgIC8vIGRlc3Ryb3kgdGhlIGdyYXBoaWMgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgIGlmIChhdGxhcy5nZXRDbGFzcygpICE9IGJpbmRlci5nZXRDbGFzcygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuZGVzdHJveSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkNvdWxkIG5vdCBhY3F1aXJlIGF0bGFzIiwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sZWFuIGNhbkRyYXcoKSB7CisgICAgICAgIHJldHVybiBtR2wgIT0gbnVsbCAmJiBtQ2FudmFzICE9IG51bGwgJiYgbUdsQ2FudmFzICE9IG51bGw7CisgICAgfQorCisgICAgaW50IG9uUHJlRHJhdyhSZWN0IGRpcnR5KSB7CisgICAgICAgIHJldHVybiBtR2xDYW52YXMub25QcmVEcmF3KGRpcnR5KTsKKyAgICB9CisKKyAgICB2b2lkIG9uUG9zdERyYXcoKSB7CisgICAgICAgIG1HbENhbnZhcy5vblBvc3REcmF3KCk7CisgICAgfQorCisgICAgdm9pZCBkcmF3UHJvZmlsZURhdGEoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8pIHsKKyAgICAgICAgaWYgKG1EZWJ1Z0RhdGFQcm92aWRlciAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBHcmFwaERhdGFQcm92aWRlciBwcm92aWRlciA9IG1EZWJ1Z0RhdGFQcm92aWRlcjsKKyAgICAgICAgICAgIGluaXRQcm9maWxlRHJhd0RhdGEoYXR0YWNoSW5mbywgcHJvdmlkZXIpOworCisgICAgICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gcHJvdmlkZXIuZ2V0VmVydGljYWxVbml0U2l6ZSgpOworICAgICAgICAgICAgZmluYWwgaW50IG1hcmdpbiA9IHByb3ZpZGVyLmdldEhvcml6b250YVVuaXRNYXJnaW4oKTsKKyAgICAgICAgICAgIGZpbmFsIGludCB3aWR0aCA9IHByb3ZpZGVyLmdldEhvcml6b250YWxVbml0U2l6ZSgpOworCisgICAgICAgICAgICBpbnQgeCA9IDA7CisgICAgICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICAgICAgaW50IGN1cnJlbnQgPSAwOworCisgICAgICAgICAgICBmaW5hbCBmbG9hdFtdIGRhdGEgPSBwcm92aWRlci5nZXREYXRhKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgZWxlbWVudENvdW50ID0gcHJvdmlkZXIuZ2V0RWxlbWVudENvdW50KCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgZ3JhcGhUeXBlID0gcHJvdmlkZXIuZ2V0R3JhcGhUeXBlKCk7CisKKyAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gcHJvdmlkZXIuZ2V0RnJhbWVDb3VudCgpICogZWxlbWVudENvdW50OworICAgICAgICAgICAgaWYgKGdyYXBoVHlwZSA9PSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0xJTkVTKSB7CisgICAgICAgICAgICAgICAgdG90YWxDb3VudCAtPSBlbGVtZW50Q291bnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxDb3VudDsgaSArPSBlbGVtZW50Q291bnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YVtpXSA8IDAuMGYpIGJyZWFrOworCisgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gY291bnQgKiA0OworICAgICAgICAgICAgICAgIGlmIChpID09IHByb3ZpZGVyLmdldEN1cnJlbnRGcmFtZSgpICogZWxlbWVudENvdW50KSBjdXJyZW50ID0gaW5kZXg7CisKKyAgICAgICAgICAgICAgICB4ICs9IG1hcmdpbjsKKyAgICAgICAgICAgICAgICBpbnQgeDIgPSB4ICsgd2lkdGg7CisKKyAgICAgICAgICAgICAgICBpbnQgeTIgPSBtSGVpZ2h0OworICAgICAgICAgICAgICAgIGludCB5MSA9IChpbnQpICh5MiAtIGRhdGFbaV0gKiBoZWlnaHQpOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChncmFwaFR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0JBUlM6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZWxlbWVudENvdW50OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBNaXNtYXRjaGVkUmVhZEFuZFdyaXRlT2ZBcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0W10gciA9IG1Qcm9maWxlU2hhcGVzW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaW5kZXhdID0geDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgMV0gPSB5MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgMl0gPSB4MjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgM10gPSB5MjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyID0geTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBlbGVtZW50Q291bnQgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gKGludCkgKHkyIC0gZGF0YVtpICsgaiArIDFdICogaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhEYXRhUHJvdmlkZXIuR1JBUEhfVFlQRV9MSU5FUzogeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbGVtZW50Q291bnQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIE1pc21hdGNoZWRSZWFkQW5kV3JpdGVPZkFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXRbXSByID0gbVByb2ZpbGVTaGFwZXNbal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleF0gPSAoeCArIHgyKSAqIDAuNWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleCArIDFdID0gaW5kZXggPT0gMCA/IHkxIDogcltpbmRleCAtIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaW5kZXggKyAyXSA9IHJbaW5kZXhdICsgd2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleCArIDNdID0geTE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MiA9IHkxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgZWxlbWVudENvdW50IC0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IChpbnQpICh5MiAtIGRhdGFbaSArIGogKyAxXSAqIGhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICAgICAgeCArPSB3aWR0aDsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB4ICs9IG1hcmdpbjsKKworICAgICAgICAgICAgZHJhd0dyYXBoKGdyYXBoVHlwZSwgY291bnQpOworICAgICAgICAgICAgZHJhd0N1cnJlbnRGcmFtZShncmFwaFR5cGUsIGN1cnJlbnQpOworICAgICAgICAgICAgZHJhd1RocmVzaG9sZCh4LCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRyYXdHcmFwaChpbnQgZ3JhcGhUeXBlLCBpbnQgY291bnQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUHJvZmlsZVNoYXBlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbURlYnVnRGF0YVByb3ZpZGVyLnNldHVwR3JhcGhQYWludChtUHJvZmlsZVBhaW50LCBpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3JhcGhUeXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0JBUlM6CisgICAgICAgICAgICAgICAgICAgIG1HbENhbnZhcy5kcmF3UmVjdHMobVByb2ZpbGVTaGFwZXNbaV0sIGNvdW50ICogNCwgbVByb2ZpbGVQYWludCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhEYXRhUHJvdmlkZXIuR1JBUEhfVFlQRV9MSU5FUzoKKyAgICAgICAgICAgICAgICAgICAgbUdsQ2FudmFzLmRyYXdMaW5lcyhtUHJvZmlsZVNoYXBlc1tpXSwgMCwgY291bnQgKiA0LCBtUHJvZmlsZVBhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZHJhd0N1cnJlbnRGcmFtZShpbnQgZ3JhcGhUeXBlLCBpbnQgaW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4ID49IDApIHsKKyAgICAgICAgICAgIG1EZWJ1Z0RhdGFQcm92aWRlci5zZXR1cEN1cnJlbnRGcmFtZVBhaW50KG1Qcm9maWxlUGFpbnQpOworICAgICAgICAgICAgc3dpdGNoIChncmFwaFR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfQkFSUzoKKyAgICAgICAgICAgICAgICAgICAgbUdsQ2FudmFzLmRyYXdSZWN0KG1Qcm9maWxlU2hhcGVzWzJdW2luZGV4XSwgbVByb2ZpbGVTaGFwZXNbMl1baW5kZXggKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZVNoYXBlc1syXVtpbmRleCArIDJdLCBtUHJvZmlsZVNoYXBlc1swXVtpbmRleCArIDNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlUGFpbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfTElORVM6CisgICAgICAgICAgICAgICAgICAgIG1HbENhbnZhcy5kcmF3TGluZShtUHJvZmlsZVNoYXBlc1syXVtpbmRleF0sIG1Qcm9maWxlU2hhcGVzWzJdW2luZGV4ICsgMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVTaGFwZXNbMl1baW5kZXhdLCBtSGVpZ2h0LCBtUHJvZmlsZVBhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZHJhd1RocmVzaG9sZChpbnQgeCwgaW50IGhlaWdodCkgeworICAgICAgICBmbG9hdCB0aHJlc2hvbGQgPSBtRGVidWdEYXRhUHJvdmlkZXIuZ2V0VGhyZXNob2xkKCk7CisgICAgICAgIGlmICh0aHJlc2hvbGQgPiAwLjBmKSB7CisgICAgICAgICAgICBtRGVidWdEYXRhUHJvdmlkZXIuc2V0dXBUaHJlc2hvbGRQYWludChtUHJvZmlsZVBhaW50KTsKKyAgICAgICAgICAgIGludCB5ID0gKGludCkgKG1IZWlnaHQgLSB0aHJlc2hvbGQgKiBoZWlnaHQpOworICAgICAgICAgICAgbUdsQ2FudmFzLmRyYXdMaW5lKDAuMGYsIHksIHgsIHksIG1Qcm9maWxlUGFpbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluaXRQcm9maWxlRHJhd0RhdGEoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIEdyYXBoRGF0YVByb3ZpZGVyIHByb3ZpZGVyKSB7CisgICAgICAgIGlmIChtUHJvZmlsZVNoYXBlcyA9PSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgZWxlbWVudENvdW50ID0gcHJvdmlkZXIuZ2V0RWxlbWVudENvdW50KCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgZnJhbWVDb3VudCA9IHByb3ZpZGVyLmdldEZyYW1lQ291bnQoKTsKKworICAgICAgICAgICAgbVByb2ZpbGVTaGFwZXMgPSBuZXcgZmxvYXRbZWxlbWVudENvdW50XVtdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50Q291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIG1Qcm9maWxlU2hhcGVzW2ldID0gbmV3IGZsb2F0W2ZyYW1lQ291bnQgKiA0XTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVByb2ZpbGVQYWludCA9IG5ldyBQYWludCgpOworICAgICAgICB9CisKKyAgICAgICAgbVByb2ZpbGVQYWludC5yZXNldCgpOworICAgICAgICBpZiAocHJvdmlkZXIuZ2V0R3JhcGhUeXBlKCkgPT0gR3JhcGhEYXRhUHJvdmlkZXIuR1JBUEhfVFlQRV9MSU5FUykgeworICAgICAgICAgICAgbVByb2ZpbGVQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobURpc3BsYXlNZXRyaWNzID09IG51bGwpIHsKKyAgICAgICAgICAgIG1EaXNwbGF5TWV0cmljcyA9IG5ldyBEaXNwbGF5TWV0cmljcygpOworICAgICAgICB9CisKKyAgICAgICAgYXR0YWNoSW5mby5tRGlzcGxheS5nZXRNZXRyaWNzKG1EaXNwbGF5TWV0cmljcyk7CisgICAgICAgIHByb3ZpZGVyLnByZXBhcmUobURpc3BsYXlNZXRyaWNzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGRlc3Ryb3koYm9vbGVhbiBmdWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoZnVsbCAmJiBtQ2FudmFzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtQ2FudmFzID0gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQoKSB8fCBtRGVzdHJveWVkKSB7CisgICAgICAgICAgICAgICAgc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZXN0cm95U3VyZmFjZSgpOworICAgICAgICAgICAgc2V0RW5hYmxlZChmYWxzZSk7CisKKyAgICAgICAgICAgIG1EZXN0cm95ZWQgPSB0cnVlOworICAgICAgICAgICAgbUdsID0gbnVsbDsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmIChmdWxsICYmIG1HbENhbnZhcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUdsQ2FudmFzID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgcHVzaExheWVyVXBkYXRlKEhhcmR3YXJlTGF5ZXIgbGF5ZXIpIHsKKyAgICAgICAgbUdsQ2FudmFzLnB1c2hMYXllclVwZGF0ZShsYXllcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBjYW5jZWxMYXllclVwZGF0ZShIYXJkd2FyZUxheWVyIGxheWVyKSB7CisgICAgICAgIG1HbENhbnZhcy5jYW5jZWxMYXllclVwZGF0ZShsYXllcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBmbHVzaExheWVyVXBkYXRlcygpIHsKKyAgICAgICAgbUdsQ2FudmFzLmZsdXNoTGF5ZXJVcGRhdGVzKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgSGFyZHdhcmVMYXllciBjcmVhdGVIYXJkd2FyZUxheWVyKGJvb2xlYW4gaXNPcGFxdWUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBHTEVTMjBUZXh0dXJlTGF5ZXIoaXNPcGFxdWUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBIYXJkd2FyZUxheWVyIGNyZWF0ZUhhcmR3YXJlTGF5ZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sZWFuIGlzT3BhcXVlKSB7CisgICAgICAgIHJldHVybiBuZXcgR0xFUzIwUmVuZGVyTGF5ZXIod2lkdGgsIGhlaWdodCwgaXNPcGFxdWUpOworICAgIH0KKworICAgIHZvaWQgY291bnRPdmVyZHJhdyhIYXJkd2FyZUNhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgKChHTEVTMjBDYW52YXMpIGNhbnZhcykuc2V0Q291bnRPdmVyZHJhd0VuYWJsZWQodHJ1ZSk7CisgICAgfQorCisgICAgZmxvYXQgZ2V0T3ZlcmRyYXcoSGFyZHdhcmVDYW52YXMgY2FudmFzKSB7CisgICAgICAgIHJldHVybiAoKEdMRVMyMENhbnZhcykgY2FudmFzKS5nZXRPdmVyZHJhdygpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdXJmYWNlVGV4dHVyZSBjcmVhdGVTdXJmYWNlVGV4dHVyZShIYXJkd2FyZUxheWVyIGxheWVyKSB7CisgICAgICAgIHJldHVybiAoKEdMRVMyMFRleHR1cmVMYXllcikgbGF5ZXIpLmdldFN1cmZhY2VUZXh0dXJlKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBzZXRTdXJmYWNlVGV4dHVyZShIYXJkd2FyZUxheWVyIGxheWVyLCBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSkgeworICAgICAgICAoKEdMRVMyMFRleHR1cmVMYXllcikgbGF5ZXIpLnNldFN1cmZhY2VUZXh0dXJlKHN1cmZhY2VUZXh0dXJlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBib29sZWFuIHNhZmVseVJ1bihSdW5uYWJsZSBhY3Rpb24pIHsKKyAgICAgICAgYm9vbGVhbiBuZWVkc0NvbnRleHQgPSAhaXNFbmFibGVkKCkgfHwgY2hlY2tSZW5kZXJDb250ZXh0KCkgPT0gU1VSRkFDRV9TVEFURV9FUlJPUjsKKworICAgICAgICBpZiAobmVlZHNDb250ZXh0KSB7CisgICAgICAgICAgICBHTFJlbmRlcmVyRWdsQ29udGV4dCBtYW5hZ2VkQ29udGV4dCA9CisgICAgICAgICAgICAgICAgICAgIChHTFJlbmRlcmVyRWdsQ29udGV4dCkgc0VnbENvbnRleHRTdG9yYWdlLmdldCgpOworICAgICAgICAgICAgaWYgKG1hbmFnZWRDb250ZXh0ID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVzZVBidWZmZXJTdXJmYWNlKG1hbmFnZWRDb250ZXh0LmdldENvbnRleHQoKSk7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgYWN0aW9uLnJ1bigpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKG5lZWRzQ29udGV4dCkgeworICAgICAgICAgICAgICAgIHNFZ2wuZWdsTWFrZUN1cnJlbnQoc0VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZGVzdHJveUxheWVycyhmaW5hbCBWaWV3IHZpZXcpIHsKKyAgICAgICAgaWYgKHZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgc2FmZWx5UnVuKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtQ2FudmFzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXMuY2xlYXJMYXllclVwZGF0ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZXN0cm95SGFyZHdhcmVMYXllcih2aWV3KTsKKyAgICAgICAgICAgICAgICAgICAgR0xFUzIwQ2FudmFzLmZsdXNoQ2FjaGVzKEdMRVMyMENhbnZhcy5GTFVTSF9DQUNIRVNfTEFZRVJTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZGVzdHJveUhhcmR3YXJlTGF5ZXIoVmlldyB2aWV3KSB7CisgICAgICAgIHZpZXcuZGVzdHJveUxheWVyKHRydWUpOworCisgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7CisgICAgICAgICAgICBWaWV3R3JvdXAgZ3JvdXAgPSAoVmlld0dyb3VwKSB2aWV3OworCisgICAgICAgICAgICBpbnQgY291bnQgPSBncm91cC5nZXRDaGlsZENvdW50KCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBkZXN0cm95SGFyZHdhcmVMYXllcihncm91cC5nZXRDaGlsZEF0KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZGVzdHJveUhhcmR3YXJlUmVzb3VyY2VzKGZpbmFsIFZpZXcgdmlldykgeworICAgICAgICBpZiAodmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICBzYWZlbHlSdW4obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUNhbnZhcy5jbGVhckxheWVyVXBkYXRlcygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lSZXNvdXJjZXModmlldyk7CisgICAgICAgICAgICAgICAgICAgIEdMRVMyMENhbnZhcy5mbHVzaENhY2hlcyhHTEVTMjBDYW52YXMuRkxVU0hfQ0FDSEVTX0xBWUVSUyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRlc3Ryb3lSZXNvdXJjZXMoVmlldyB2aWV3KSB7CisgICAgICAgIHZpZXcuZGVzdHJveUhhcmR3YXJlUmVzb3VyY2VzKCk7CisKKyAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2VvZiBWaWV3R3JvdXApIHsKKyAgICAgICAgICAgIFZpZXdHcm91cCBncm91cCA9IChWaWV3R3JvdXApIHZpZXc7CisKKyAgICAgICAgICAgIGludCBjb3VudCA9IGdyb3VwLmdldENoaWxkQ291bnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGRlc3Ryb3lSZXNvdXJjZXMoZ3JvdXAuZ2V0Q2hpbGRBdChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBzdGFydFRyaW1NZW1vcnkoaW50IGxldmVsKSB7CisgICAgICAgIGlmIChzRWdsID09IG51bGwgfHwgc0VnbENvbmZpZyA9PSBudWxsKSByZXR1cm47CisKKyAgICAgICAgR0xSZW5kZXJlckVnbENvbnRleHQgbWFuYWdlZENvbnRleHQgPQorICAgICAgICAgICAgICAgIChHTFJlbmRlcmVyRWdsQ29udGV4dCkgc0VnbENvbnRleHRTdG9yYWdlLmdldCgpOworICAgICAgICAvLyBXZSBkbyBub3QgaGF2ZSBPcGVuR0wgb2JqZWN0cworICAgICAgICBpZiAobWFuYWdlZENvbnRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdXNlUGJ1ZmZlclN1cmZhY2UobWFuYWdlZENvbnRleHQuZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZlbCA+PSBDb21wb25lbnRDYWxsYmFja3MyLlRSSU1fTUVNT1JZX0NPTVBMRVRFKSB7CisgICAgICAgICAgICBHTEVTMjBDYW52YXMuZmx1c2hDYWNoZXMoR0xFUzIwQ2FudmFzLkZMVVNIX0NBQ0hFU19GVUxMKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZXZlbCA+PSBDb21wb25lbnRDYWxsYmFja3MyLlRSSU1fTUVNT1JZX1VJX0hJRERFTikgeworICAgICAgICAgICAgR0xFUzIwQ2FudmFzLmZsdXNoQ2FjaGVzKEdMRVMyMENhbnZhcy5GTFVTSF9DQUNIRVNfTU9ERVJBVEUpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZW5kVHJpbU1lbW9yeSgpIHsKKyAgICAgICAgaWYgKHNFZ2wgIT0gbnVsbCAmJiBzRWdsRGlzcGxheSAhPSBudWxsKSB7CisgICAgICAgICAgICBzRWdsLmVnbE1ha2VDdXJyZW50KHNFZ2xEaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdXNlUGJ1ZmZlclN1cmZhY2UoRUdMQ29udGV4dCBlZ2xDb250ZXh0KSB7CisgICAgICAgIHN5bmNocm9uaXplZCAoc1BidWZmZXJMb2NrKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgMXgxIHBidWZmZXIgc28gd2UgaGF2ZSBhIGNvbnRleHQKKyAgICAgICAgICAgIC8vIHRvIGNsZWFyIG91ciBPcGVuR0wgb2JqZWN0cworICAgICAgICAgICAgaWYgKHNQYnVmZmVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzUGJ1ZmZlciA9IHNFZ2wuZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2Uoc0VnbERpc3BsYXksIHNFZ2xDb25maWcsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFR0xfV0lEVEgsIDEsIEVHTF9IRUlHSFQsIDEsIEVHTF9OT05FCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc0VnbC5lZ2xNYWtlQ3VycmVudChzRWdsRGlzcGxheSwgc1BidWZmZXIsIHNQYnVmZmVyLCBlZ2xDb250ZXh0KTsKKyAgICB9CisKKyAgICBHTFJlbmRlcmVyKGJvb2xlYW4gdHJhbnNsdWNlbnQpIHsKKyAgICAgICAgbVRyYW5zbHVjZW50ID0gdHJhbnNsdWNlbnQ7CisKKyAgICAgICAgbG9hZFN5c3RlbVByb3BlcnRpZXMoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBib29sZWFuIGxvYWRTeXN0ZW1Qcm9wZXJ0aWVzKCkgeworICAgICAgICBib29sZWFuIHZhbHVlOworICAgICAgICBib29sZWFuIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICBTdHJpbmcgcHJvZmlsaW5nID0gU3lzdGVtUHJvcGVydGllcy5nZXQoUFJPRklMRV9QUk9QRVJUWSk7CisgICAgICAgIGludCBncmFwaFR5cGUgPSBzZWFyY2goVklTVUFMSVpFUlMsIHByb2ZpbGluZyk7CisgICAgICAgIHZhbHVlID0gZ3JhcGhUeXBlID49IDA7CisKKyAgICAgICAgaWYgKGdyYXBoVHlwZSAhPSBtUHJvZmlsZVZpc3VhbGl6ZXJUeXBlKSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1Qcm9maWxlVmlzdWFsaXplclR5cGUgPSBncmFwaFR5cGU7CisKKyAgICAgICAgICAgIG1Qcm9maWxlU2hhcGVzID0gbnVsbDsKKyAgICAgICAgICAgIG1Qcm9maWxlUGFpbnQgPSBudWxsOworCisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBtRGVidWdEYXRhUHJvdmlkZXIgPSBuZXcgRHJhd1BlcmZvcm1hbmNlRGF0YVByb3ZpZGVyKGdyYXBoVHlwZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1EZWJ1Z0RhdGFQcm92aWRlciA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBvbi1zY3JlZW4gcHJvZmlsaW5nIGlzIG5vdCBlbmFibGVkLCB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIKKyAgICAgICAgLy8gY29uc29sZSBwcm9maWxpbmcgb25seSBpcyBlbmFibGVkCisgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgIHZhbHVlID0gQm9vbGVhbi5wYXJzZUJvb2xlYW4ocHJvZmlsaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZSAhPSBtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgbVByb2ZpbGVFbmFibGVkID0gdmFsdWU7CisKKyAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBMb2cuZChMT0dfVEFHLCAiUHJvZmlsaW5nIGhhcmR3YXJlIHJlbmRlcmVyIik7CisKKyAgICAgICAgICAgICAgICBpbnQgbWF4UHJvZmlsZUZyYW1lcyA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0SW50KFBST0ZJTEVfTUFYRlJBTUVTX1BST1BFUlRZLAorICAgICAgICAgICAgICAgICAgICAgICAgUFJPRklMRV9NQVhfRlJBTUVTKTsKKyAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGEgPSBuZXcgZmxvYXRbbWF4UHJvZmlsZUZyYW1lcyAqIFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVF07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUHJvZmlsZURhdGEubGVuZ3RoOyBpICs9IFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVCkgeworICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGFbaV0gPSBtUHJvZmlsZURhdGFbaSArIDFdID0gbVByb2ZpbGVEYXRhW2kgKyAyXSA9IC0xOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1Qcm9maWxlTG9jayA9IG5ldyBSZWVudHJhbnRMb2NrKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1Qcm9maWxlRGF0YSA9IG51bGw7CisgICAgICAgICAgICAgICAgbVByb2ZpbGVMb2NrID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtUHJvZmlsZVZpc3VhbGl6ZXJUeXBlID0gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1Qcm9maWxlQ3VycmVudEZyYW1lID0gLVBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVDsKKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlID0gU3lzdGVtUHJvcGVydGllcy5nZXRCb29sZWFuKERFQlVHX0RJUlRZX1JFR0lPTlNfUFJPUEVSVFksIGZhbHNlKTsKKyAgICAgICAgaWYgKHZhbHVlICE9IG1EZWJ1Z0RpcnR5UmVnaW9ucykgeworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBtRGVidWdEaXJ0eVJlZ2lvbnMgPSB2YWx1ZTsKKworICAgICAgICAgICAgaWYgKG1EZWJ1Z0RpcnR5UmVnaW9ucykgeworICAgICAgICAgICAgICAgIExvZy5kKExPR19UQUcsICJEZWJ1Z2dpbmcgZGlydHkgcmVnaW9ucyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIG92ZXJkcmF3ID0gU3lzdGVtUHJvcGVydGllcy5nZXQoSGFyZHdhcmVSZW5kZXJlci5ERUJVR19PVkVSRFJBV19QUk9QRVJUWSk7CisgICAgICAgIGludCBkZWJ1Z092ZXJkcmF3ID0gc2VhcmNoKE9WRVJEUkFXLCBvdmVyZHJhdyk7CisgICAgICAgIGlmIChkZWJ1Z092ZXJkcmF3ICE9IG1EZWJ1Z092ZXJkcmF3KSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3ID0gZGVidWdPdmVyZHJhdzsKKworICAgICAgICAgICAgaWYgKG1EZWJ1Z092ZXJkcmF3ICE9IE9WRVJEUkFXX1RZUEVfQ09VTlQpIHsKKyAgICAgICAgICAgICAgICBpZiAobURlYnVnT3ZlcmRyYXdMYXllciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3TGF5ZXIuZGVzdHJveSgpOworICAgICAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdQYWludCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvYWRQcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHNlYXJjaChTdHJpbmdbXSB2YWx1ZXMsIFN0cmluZyB2YWx1ZSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHZhbHVlc1tpXS5lcXVhbHModmFsdWUpKSByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBkdW1wR2Z4SW5mbyhQcmludFdyaXRlciBwdykgeworICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7CisgICAgICAgICAgICBwdy5wcmludGYoIlxuXHREcmF3XHRQcm9jZXNzXHRFeGVjdXRlXG4iKTsKKworICAgICAgICAgICAgbVByb2ZpbGVMb2NrLmxvY2soKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUHJvZmlsZURhdGEubGVuZ3RoOyBpICs9IFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVEYXRhW2ldIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRmKCJcdCUzLjJmXHQlMy4yZlx0JTMuMmZcbiIsIG1Qcm9maWxlRGF0YVtpXSwgbVByb2ZpbGVEYXRhW2kgKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGFbaSArIDJdKTsKKyAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhW2ldID0gbVByb2ZpbGVEYXRhW2kgKyAxXSA9IG1Qcm9maWxlRGF0YVtpICsgMl0gPSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbVByb2ZpbGVDdXJyZW50RnJhbWUgPSBtUHJvZmlsZURhdGEubGVuZ3RoOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBtUHJvZmlsZUxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBsb25nIGdldEZyYW1lQ291bnQoKSB7CisgICAgICAgIHJldHVybiBtRnJhbWVDb3VudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJlbmRlcmVyIGluc3RhbmNlIGNhbiB0cmFjayBhbmQgdXBkYXRlIGRpcnR5IHJlZ2lvbnMuCisgICAgICovCisgICAgYm9vbGVhbiBoYXNEaXJ0eVJlZ2lvbnMoKSB7CisgICAgICAgIHJldHVybiBtRGlydHlSZWdpb25zRW5hYmxlZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgZm9yIE9wZW5HTCBlcnJvcnMuIElmIGFuIGVycm9yIGhhcyBvY2N1cmVkLCB7QGxpbmsgI2Rlc3Ryb3koYm9vbGVhbil9CisgICAgICogaXMgaW52b2tlZCBhbmQgdGhlIHJlcXVlc3RlZCBmbGFnIGlzIHR1cm5lZCBvZmYuIFRoZSBlcnJvciBjb2RlIGlzCisgICAgICogYWxzbyBsb2dnZWQgYXMgYSB3YXJuaW5nLgorICAgICAqLworICAgIHZvaWQgY2hlY2tFZ2xFcnJvcnMoKSB7CisgICAgICAgIGlmIChpc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgY2hlY2tFZ2xFcnJvcnNGb3JjZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjaGVja0VnbEVycm9yc0ZvcmNlZCgpIHsKKyAgICAgICAgaW50IGVycm9yID0gc0VnbC5lZ2xHZXRFcnJvcigpOworICAgICAgICBpZiAoZXJyb3IgIT0gRUdMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIC8vIHNvbWV0aGluZyBiYWQgaGFzIGhhcHBlbmVkIHJldmVydCB0bworICAgICAgICAgICAgLy8gbm9ybWFsIHJlbmRlcmluZy4KKyAgICAgICAgICAgIExvZy53KExPR19UQUcsICJFR0wgZXJyb3I6ICIgKyBHTFV0aWxzLmdldEVHTEVycm9yU3RyaW5nKGVycm9yKSk7CisgICAgICAgICAgICBmYWxsYmFjayhlcnJvciAhPSBFR0wxMS5FR0xfQ09OVEVYVF9MT1NUKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBmYWxsYmFjayhib29sZWFuIGZhbGxiYWNrKSB7CisgICAgICAgIGRlc3Ryb3kodHJ1ZSk7CisgICAgICAgIGlmIChmYWxsYmFjaykgeworICAgICAgICAgICAgLy8gd2UnbGwgdHJ5IGFnYWluIGlmIGl0IHdhcyBjb250ZXh0IGxvc3QKKyAgICAgICAgICAgIHNldFJlcXVlc3RlZChmYWxzZSk7CisgICAgICAgICAgICBMb2cudyhMT0dfVEFHLCAiTW91bnRhaW4gVmlldywgd2UndmUgaGFkIGEgcHJvYmxlbSBoZXJlLiAiCisgICAgICAgICAgICAgICAgICAgICsgIlN3aXRjaGluZyBiYWNrIHRvIHNvZnR3YXJlIHJlbmRlcmluZy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGJvb2xlYW4gaW5pdGlhbGl6ZShTdXJmYWNlIHN1cmZhY2UpIHRocm93cyBPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChpc1JlcXVlc3RlZCgpICYmICFpc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgYm9vbGVhbiBjb250ZXh0Q3JlYXRlZCA9IGluaXRpYWxpemVFZ2woKTsKKyAgICAgICAgICAgIG1HbCA9IGNyZWF0ZUVnbFN1cmZhY2Uoc3VyZmFjZSk7CisgICAgICAgICAgICBtRGVzdHJveWVkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChtR2wgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGludCBlcnIgPSBzRWdsLmVnbEdldEVycm9yKCk7CisgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBFR0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICBkZXN0cm95KHRydWUpOworICAgICAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0ZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtQ2FudmFzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXMgPSBjcmVhdGVDYW52YXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzZXRFbmFibGVkKHRydWUpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0Q3JlYXRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5pdEF0bGFzKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbUNhbnZhcyAhPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoU3VyZmFjZSBzdXJmYWNlKSB0aHJvd3MgT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24geworICAgICAgICBpZiAoaXNSZXF1ZXN0ZWQoKSAmJiBpc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgY3JlYXRlRWdsU3VyZmFjZShzdXJmYWNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2xlYW4gaW5pdGlhbGl6ZUVnbCgpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChzRWdsTG9jaykgeworICAgICAgICAgICAgaWYgKHNFZ2wgPT0gbnVsbCAmJiBzRWdsQ29uZmlnID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzRWdsID0gKEVHTDEwKSBFR0xDb250ZXh0LmdldEVHTCgpOworCisgICAgICAgICAgICAgICAgLy8gR2V0IHRvIHRoZSBkZWZhdWx0IGRpc3BsYXkuCisgICAgICAgICAgICAgICAgc0VnbERpc3BsYXkgPSBzRWdsLmVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CisKKyAgICAgICAgICAgICAgICBpZiAoc0VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbEdldERpc3BsYXkgZmFpbGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoc0VnbC5lZ2xHZXRFcnJvcigpKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gV2UgY2FuIG5vdyBpbml0aWFsaXplIEVHTCBmb3IgdGhhdCBkaXNwbGF5CisgICAgICAgICAgICAgICAgaW50W10gdmVyc2lvbiA9IG5ldyBpbnRbMl07CisgICAgICAgICAgICAgICAgaWYgKCFzRWdsLmVnbEluaXRpYWxpemUoc0VnbERpc3BsYXksIHZlcnNpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2xJbml0aWFsaXplIGZhaWxlZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTFV0aWxzLmdldEVHTEVycm9yU3RyaW5nKHNFZ2wuZWdsR2V0RXJyb3IoKSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNoZWNrRWdsRXJyb3JzRm9yY2VkKCk7CisKKyAgICAgICAgICAgICAgICBzRWdsQ29uZmlnID0gbG9hZEVnbENvbmZpZygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTWFuYWdlZEVHTENvbnRleHQgbWFuYWdlZENvbnRleHQgPSBzRWdsQ29udGV4dFN0b3JhZ2UuZ2V0KCk7CisgICAgICAgIG1FZ2xDb250ZXh0ID0gbWFuYWdlZENvbnRleHQgIT0gbnVsbCA/IG1hbmFnZWRDb250ZXh0LmdldENvbnRleHQoKSA6IG51bGw7CisgICAgICAgIG1FZ2xUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOworCisgICAgICAgIGlmIChtRWdsQ29udGV4dCA9PSBudWxsKSB7CisgICAgICAgICAgICBtRWdsQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoc0VnbCwgc0VnbERpc3BsYXksIHNFZ2xDb25maWcpOworICAgICAgICAgICAgc0VnbENvbnRleHRTdG9yYWdlLnNldChjcmVhdGVNYW5hZ2VkQ29udGV4dChtRWdsQ29udGV4dCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHJpdmF0ZSBFR0xDb25maWcgbG9hZEVnbENvbmZpZygpIHsKKyAgICAgICAgRUdMQ29uZmlnIGVnbENvbmZpZyA9IGNob29zZUVnbENvbmZpZygpOworICAgICAgICBpZiAoZWdsQ29uZmlnID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFdlIHRyaWVkIHRvIHVzZSBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklULCB0cnkgYWdhaW4gd2l0aG91dAorICAgICAgICAgICAgaWYgKHNEaXJ0eVJlZ2lvbnMpIHsKKyAgICAgICAgICAgICAgICBzRGlydHlSZWdpb25zID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZWdsQ29uZmlnID0gY2hvb3NlRWdsQ29uZmlnKCk7CisgICAgICAgICAgICAgICAgaWYgKGVnbENvbmZpZyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2xDb25maWcgbm90IGluaXRpYWxpemVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZWdsQ29uZmlnIG5vdCBpbml0aWFsaXplZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBlZ2xDb25maWc7CisgICAgfQorCisgICAgcHJpdmF0ZSBFR0xDb25maWcgY2hvb3NlRWdsQ29uZmlnKCkgeworICAgICAgICBFR0xDb25maWdbXSBjb25maWdzID0gbmV3IEVHTENvbmZpZ1sxXTsKKyAgICAgICAgaW50W10gY29uZmlnc0NvdW50ID0gbmV3IGludFsxXTsKKyAgICAgICAgaW50W10gY29uZmlnU3BlYyA9IGdldENvbmZpZyhzRGlydHlSZWdpb25zKTsKKworICAgICAgICAvLyBEZWJ1ZworICAgICAgICBmaW5hbCBTdHJpbmcgZGVidWcgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldChQUklOVF9DT05GSUdfUFJPUEVSVFksICIiKTsKKyAgICAgICAgaWYgKCJhbGwiLmVxdWFsc0lnbm9yZUNhc2UoZGVidWcpKSB7CisgICAgICAgICAgICBzRWdsLmVnbENob29zZUNvbmZpZyhzRWdsRGlzcGxheSwgY29uZmlnU3BlYywgbnVsbCwgMCwgY29uZmlnc0NvdW50KTsKKworICAgICAgICAgICAgRUdMQ29uZmlnW10gZGVidWdDb25maWdzID0gbmV3IEVHTENvbmZpZ1tjb25maWdzQ291bnRbMF1dOworICAgICAgICAgICAgc0VnbC5lZ2xDaG9vc2VDb25maWcoc0VnbERpc3BsYXksIGNvbmZpZ1NwZWMsIGRlYnVnQ29uZmlncywKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnc0NvdW50WzBdLCBjb25maWdzQ291bnQpOworCisgICAgICAgICAgICBmb3IgKEVHTENvbmZpZyBjb25maWcgOiBkZWJ1Z0NvbmZpZ3MpIHsKKyAgICAgICAgICAgICAgICBwcmludENvbmZpZyhjb25maWcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzRWdsLmVnbENob29zZUNvbmZpZyhzRWdsRGlzcGxheSwgY29uZmlnU3BlYywgY29uZmlncywgMSwgY29uZmlnc0NvdW50KSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZWdsQ2hvb3NlQ29uZmlnIGZhaWxlZCAiICsKKyAgICAgICAgICAgICAgICAgICAgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhzRWdsLmVnbEdldEVycm9yKCkpKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25maWdzQ291bnRbMF0gPiAwKSB7CisgICAgICAgICAgICBpZiAoImNob2ljZSIuZXF1YWxzSWdub3JlQ2FzZShkZWJ1ZykpIHsKKyAgICAgICAgICAgICAgICBwcmludENvbmZpZyhjb25maWdzWzBdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBjb25maWdzWzBdOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludENvbmZpZyhFR0xDb25maWcgY29uZmlnKSB7CisgICAgICAgIGludFtdIHZhbHVlID0gbmV3IGludFsxXTsKKworICAgICAgICBMb2cuZChMT0dfVEFHLCAiRUdMIGNvbmZpZ3VyYXRpb24gIiArIGNvbmZpZyArICI6Iik7CisKKyAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX1JFRF9TSVpFLCB2YWx1ZSk7CisgICAgICAgIExvZy5kKExPR19UQUcsICIgIFJFRF9TSVpFID0gIiArIHZhbHVlWzBdKTsKKworICAgICAgICBzRWdsLmVnbEdldENvbmZpZ0F0dHJpYihzRWdsRGlzcGxheSwgY29uZmlnLCBFR0xfR1JFRU5fU0laRSwgdmFsdWUpOworICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBHUkVFTl9TSVpFID0gIiArIHZhbHVlWzBdKTsKKworICAgICAgICBzRWdsLmVnbEdldENvbmZpZ0F0dHJpYihzRWdsRGlzcGxheSwgY29uZmlnLCBFR0xfQkxVRV9TSVpFLCB2YWx1ZSk7CisgICAgICAgIExvZy5kKExPR19UQUcsICIgIEJMVUVfU0laRSA9ICIgKyB2YWx1ZVswXSk7CisKKyAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX0FMUEhBX1NJWkUsIHZhbHVlKTsKKyAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgQUxQSEFfU0laRSA9ICIgKyB2YWx1ZVswXSk7CisKKyAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX0RFUFRIX1NJWkUsIHZhbHVlKTsKKyAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgREVQVEhfU0laRSA9ICIgKyB2YWx1ZVswXSk7CisKKyAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX1NURU5DSUxfU0laRSwgdmFsdWUpOworICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBTVEVOQ0lMX1NJWkUgPSAiICsgdmFsdWVbMF0pOworCisgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9TQU1QTEVfQlVGRkVSUywgdmFsdWUpOworICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBTQU1QTEVfQlVGRkVSUyA9ICIgKyB2YWx1ZVswXSk7CisKKyAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX1NBTVBMRVMsIHZhbHVlKTsKKyAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgU0FNUExFUyA9ICIgKyB2YWx1ZVswXSk7CisKKyAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX1NVUkZBQ0VfVFlQRSwgdmFsdWUpOworICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBTVVJGQUNFX1RZUEUgPSAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHZhbHVlWzBdKSk7CisKKyAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX0NPTkZJR19DQVZFQVQsIHZhbHVlKTsKKyAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgQ09ORklHX0NBVkVBVCA9IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcodmFsdWVbMF0pKTsKKyAgICB9CisKKyAgICBHTCBjcmVhdGVFZ2xTdXJmYWNlKFN1cmZhY2Ugc3VyZmFjZSkgdGhyb3dzIE91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIHsKKyAgICAgICAgLy8gQ2hlY2sgcHJlY29uZGl0aW9ucy4KKyAgICAgICAgaWYgKHNFZ2wgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbCBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc0VnbERpc3BsYXkgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbERpc3BsYXkgbm90IGluaXRpYWxpemVkIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNFZ2xDb25maWcgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbENvbmZpZyBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAhPSBtRWdsVGhyZWFkKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJIYXJkd2FyZVJlbmRlcmVyIGNhbm5vdCBiZSB1c2VkICIKKyAgICAgICAgICAgICAgICAgICAgKyAiZnJvbSBtdWx0aXBsZSB0aHJlYWRzIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBJbiBjYXNlIHdlIG5lZWQgdG8gZGVzdHJveSBhbiBleGlzdGluZyBzdXJmYWNlCisgICAgICAgIGRlc3Ryb3lTdXJmYWNlKCk7CisKKyAgICAgICAgLy8gQ3JlYXRlIGFuIEVHTCBzdXJmYWNlIHdlIGNhbiByZW5kZXIgaW50by4KKyAgICAgICAgaWYgKCFjcmVhdGVTdXJmYWNlKHN1cmZhY2UpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGluaXRDYWNoZXMoKTsKKworICAgICAgICByZXR1cm4gbUVnbENvbnRleHQuZ2V0R0woKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZW5hYmxlRGlydHlSZWdpb25zKCkgeworICAgICAgICAvLyBJZiBtRGlydHlSZWdpb25zIGlzIHNldCwgdGhpcyBtZWFucyB3ZSBoYXZlIGFuIEVHTCBjb25maWd1cmF0aW9uCisgICAgICAgIC8vIHdpdGggRUdMX1NXQVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJVCBzZXQKKyAgICAgICAgaWYgKHNEaXJ0eVJlZ2lvbnMpIHsKKyAgICAgICAgICAgIGlmICghKG1EaXJ0eVJlZ2lvbnNFbmFibGVkID0gcHJlc2VydmVCYWNrQnVmZmVyKCkpKSB7CisgICAgICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkJhY2tidWZmZXIgY2Fubm90IGJlIHByZXNlcnZlZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNEaXJ0eVJlZ2lvbnNSZXF1ZXN0ZWQpIHsKKyAgICAgICAgICAgIC8vIElmIG1EaXJ0eVJlZ2lvbnMgaXMgbm90IHNldCwgb3VyIEVHTCBjb25maWd1cmF0aW9uIGRvZXMgbm90CisgICAgICAgICAgICAvLyBoYXZlIEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQ7IGhvd2V2ZXIsIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAvLyBzd2FwIGJlaGF2aW9yIG1pZ2h0IGJlIEVHTF9CVUZGRVJfUFJFU0VSVkVELCB3aGljaCBtZWFucyB3ZQorICAgICAgICAgICAgLy8gd2FudCB0byBzZXQgbURpcnR5UmVnaW9ucy4gV2UgdHJ5IHRvIGRvIHRoaXMgb25seSBpZiBkaXJ0eQorICAgICAgICAgICAgLy8gcmVnaW9ucyB3ZXJlIGluaXRpYWxseSByZXF1ZXN0ZWQgYXMgcGFydCBvZiB0aGUgZGV2aWNlCisgICAgICAgICAgICAvLyBjb25maWd1cmF0aW9uIChzZWUgUkVOREVSX0RJUlRZX1JFR0lPTlMpCisgICAgICAgICAgICBtRGlydHlSZWdpb25zRW5hYmxlZCA9IGlzQmFja0J1ZmZlclByZXNlcnZlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgRUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTDEwIGVnbCwgRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBFR0xDb25maWcgZWdsQ29uZmlnKSB7CisgICAgICAgIGZpbmFsIGludFtdIGF0dHJpYnMgPSB7IEVHTDE0LkVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCBHTF9WRVJTSU9OLCBFR0xfTk9ORSB9OworCisgICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IGVnbC5lZ2xDcmVhdGVDb250ZXh0KGVnbERpc3BsYXksIGVnbENvbmZpZywgRUdMX05PX0NPTlRFWFQsCisgICAgICAgICAgICAgICAgYXR0cmlicyk7CisgICAgICAgIGlmIChjb250ZXh0ID09IG51bGwgfHwgY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkgeworICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gQ29uc3RhbnRDb25kaXRpb25zCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNyZWF0ZSBhbiBFR0wgY29udGV4dC4gZWdsQ3JlYXRlQ29udGV4dCBmYWlsZWQgd2l0aCBlcnJvcjogIiArCisgICAgICAgICAgICAgICAgICAgIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoc0VnbC5lZ2xHZXRFcnJvcigpKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY29udGV4dDsKKyAgICB9CisKKyAgICB2b2lkIGRlc3Ryb3lTdXJmYWNlKCkgeworICAgICAgICBpZiAobUVnbFN1cmZhY2UgIT0gbnVsbCAmJiBtRWdsU3VyZmFjZSAhPSBFR0xfTk9fU1VSRkFDRSkgeworICAgICAgICAgICAgaWYgKG1FZ2xTdXJmYWNlLmVxdWFscyhzRWdsLmVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKSkpIHsKKyAgICAgICAgICAgICAgICBzRWdsLmVnbE1ha2VDdXJyZW50KHNFZ2xEaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzRWdsLmVnbERlc3Ryb3lTdXJmYWNlKHNFZ2xEaXNwbGF5LCBtRWdsU3VyZmFjZSk7CisgICAgICAgICAgICBtRWdsU3VyZmFjZSA9IG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGludmFsaWRhdGUoU3VyZmFjZSBzdXJmYWNlKSB7CisgICAgICAgIC8vIENhbmNlbHMgYW55IGV4aXN0aW5nIGJ1ZmZlciB0byBlbnN1cmUgd2UnbGwgZ2V0IGEgYnVmZmVyCisgICAgICAgIC8vIG9mIHRoZSByaWdodCBzaXplIGJlZm9yZSB3ZSBjYWxsIGVnbFN3YXBCdWZmZXJzCisgICAgICAgIHNFZ2wuZWdsTWFrZUN1cnJlbnQoc0VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworCisgICAgICAgIGlmIChtRWdsU3VyZmFjZSAhPSBudWxsICYmIG1FZ2xTdXJmYWNlICE9IEVHTF9OT19TVVJGQUNFKSB7CisgICAgICAgICAgICBzRWdsLmVnbERlc3Ryb3lTdXJmYWNlKHNFZ2xEaXNwbGF5LCBtRWdsU3VyZmFjZSk7CisgICAgICAgICAgICBtRWdsU3VyZmFjZSA9IG51bGw7CisgICAgICAgICAgICBzZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdXJmYWNlLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKCFjcmVhdGVTdXJmYWNlKHN1cmZhY2UpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtVXBkYXRlRGlydHlSZWdpb25zID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpIHsKKyAgICAgICAgbUVnbFN1cmZhY2UgPSBzRWdsLmVnbENyZWF0ZVdpbmRvd1N1cmZhY2Uoc0VnbERpc3BsYXksIHNFZ2xDb25maWcsIHN1cmZhY2UsIG51bGwpOworCisgICAgICAgIGlmIChtRWdsU3VyZmFjZSA9PSBudWxsIHx8IG1FZ2xTdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKSB7CisgICAgICAgICAgICBpbnQgZXJyb3IgPSBzRWdsLmVnbEdldEVycm9yKCk7CisgICAgICAgICAgICBpZiAoZXJyb3IgPT0gRUdMX0JBRF9OQVRJVkVfV0lORE9XKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoTE9HX1RBRywgImNyZWF0ZVdpbmRvd1N1cmZhY2UgcmV0dXJuZWQgRUdMX0JBRF9OQVRJVkVfV0lORE9XLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjcmVhdGVXaW5kb3dTdXJmYWNlIGZhaWxlZCAiCisgICAgICAgICAgICAgICAgICAgICsgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhlcnJvcikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzRWdsLmVnbE1ha2VDdXJyZW50KHNFZ2xEaXNwbGF5LCBtRWdsU3VyZmFjZSwgbUVnbFN1cmZhY2UsIG1FZ2xDb250ZXh0KSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZWdsTWFrZUN1cnJlbnQgZmFpbGVkICIgKworICAgICAgICAgICAgICAgICAgICBHTFV0aWxzLmdldEVHTEVycm9yU3RyaW5nKHNFZ2wuZWdsR2V0RXJyb3IoKSkpOworICAgICAgICB9CisKKyAgICAgICAgZW5hYmxlRGlydHlSZWdpb25zKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIGNoZWNrUmVuZGVyQ29udGV4dCgpICE9IFNVUkZBQ0VfU1RBVEVfRVJST1I7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBzZXR1cChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICAgICAgaWYgKHZhbGlkYXRlKCkpIHsKKyAgICAgICAgICAgIG1DYW52YXMuc2V0Vmlld3BvcnQod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBtV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBpbnQgZ2V0V2lkdGgoKSB7CisgICAgICAgIHJldHVybiBtV2lkdGg7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgaW50IGdldEhlaWdodCgpIHsKKyAgICAgICAgcmV0dXJuIG1IZWlnaHQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIG1OYW1lID0gbmFtZTsKKyAgICB9CisKKyAgICBjbGFzcyBGdW5jdG9yc1J1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgeworICAgICAgICBWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbzsKKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgZmluYWwgSGFyZHdhcmVSZW5kZXJlciByZW5kZXJlciA9IGF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXI7CisgICAgICAgICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCB8fCAhcmVuZGVyZXIuaXNFbmFibGVkKCkgfHwgcmVuZGVyZXIgIT0gR0xSZW5kZXJlci50aGlzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2hlY2tSZW5kZXJDb250ZXh0KCkgIT0gU1VSRkFDRV9TVEFURV9FUlJPUikgeworICAgICAgICAgICAgICAgIGludCBzdGF0dXMgPSBtQ2FudmFzLmludm9rZUZ1bmN0b3JzKG1SZWRyYXdDbGlwKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVGdW5jdG9yU3RhdHVzKGF0dGFjaEluZm8sIHN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGRyYXcoVmlldyB2aWV3LCBWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywgSGFyZHdhcmVEcmF3Q2FsbGJhY2tzIGNhbGxiYWNrcywKKyAgICAgICAgICAgIFJlY3QgZGlydHkpIHsKKyAgICAgICAgaWYgKGNhbkRyYXcoKSkgeworICAgICAgICAgICAgaWYgKCFoYXNEaXJ0eVJlZ2lvbnMoKSkgeworICAgICAgICAgICAgICAgIGRpcnR5ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF0dGFjaEluZm8ubUlnbm9yZURpcnR5U3RhdGUgPSB0cnVlOworICAgICAgICAgICAgYXR0YWNoSW5mby5tRHJhd2luZ1RpbWUgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKTsKKworICAgICAgICAgICAgdmlldy5tUHJpdmF0ZUZsYWdzIHw9IFZpZXcuUEZMQUdfRFJBV047CisKKyAgICAgICAgICAgIC8vIFdlIGFyZSBhbHJlYWR5IG9uIHRoZSBjb3JyZWN0IHRocmVhZAorICAgICAgICAgICAgZmluYWwgaW50IHN1cmZhY2VTdGF0ZSA9IGNoZWNrUmVuZGVyQ29udGV4dFVuc2FmZSgpOworICAgICAgICAgICAgaWYgKHN1cmZhY2VTdGF0ZSAhPSBTVVJGQUNFX1NUQVRFX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgSGFyZHdhcmVDYW52YXMgY2FudmFzID0gbUNhbnZhczsKKworICAgICAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVMb2NrLmxvY2soKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkaXJ0eSA9IGJlZ2luRnJhbWUoY2FudmFzLCBkaXJ0eSwgc3VyZmFjZVN0YXRlKTsKKworICAgICAgICAgICAgICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0ID0gYnVpbGREaXNwbGF5TGlzdCh2aWV3LCBjYW52YXMpOworCisgICAgICAgICAgICAgICAgLy8gYnVpbGREaXNwbGF5TGlzdCgpIGNhbGxzIGludG8gdXNlciBjb2RlIHdoaWNoIGNhbiBjYXVzZQorICAgICAgICAgICAgICAgIC8vIGFuIGVnbE1ha2VDdXJyZW50IHRvIGhhcHBlbiB3aXRoIGEgZGlmZmVyZW50IHN1cmZhY2UvY29udGV4dC4KKyAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IHRoZXJlZm9yZSBjaGVjayBhZ2FpbiBoZXJlLgorICAgICAgICAgICAgICAgIGlmIChjaGVja1JlbmRlckNvbnRleHRVbnNhZmUoKSA9PSBTVVJGQUNFX1NUQVRFX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpbnQgc2F2ZUNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgc3RhdHVzID0gRGlzcGxheUxpc3QuU1RBVFVTX0RPTkU7CisKKyAgICAgICAgICAgICAgICBsb25nIHN0YXJ0ID0gZ2V0U3lzdGVtVGltZSgpOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHByZXBhcmVGcmFtZShkaXJ0eSk7CisKKyAgICAgICAgICAgICAgICAgICAgc2F2ZUNvdW50ID0gY2FudmFzLnNhdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uSGFyZHdhcmVQcmVEcmF3KGNhbnZhcyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlMaXN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyB8PSBkcmF3RGlzcGxheUxpc3QoYXR0YWNoSW5mbywgY2FudmFzLCBkaXNwbGF5TGlzdCwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZG4ndCByZWFjaCBoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmRyYXcoY2FudmFzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgZHJhd2luZzoiLCBlKTsKKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3Mub25IYXJkd2FyZVBvc3REcmF3KGNhbnZhcyk7CisgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChzYXZlQ291bnQpOworICAgICAgICAgICAgICAgICAgICB2aWV3Lm1SZWNyZWF0ZURpc3BsYXlMaXN0ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgbURyYXdEZWx0YSA9IGdldFN5c3RlbVRpbWUoKSAtIHN0YXJ0OworCisgICAgICAgICAgICAgICAgICAgIGlmIChtRHJhd0RlbHRhID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUZyYW1lQ291bnQrKzsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdPdmVyZHJhdyhhdHRhY2hJbmZvLCBkaXJ0eSwgY2FudmFzLCBkaXNwbGF5TGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0RpcnR5UmVnaW9ucyhkaXJ0eSwgY2FudmFzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdQcm9maWxlRGF0YShhdHRhY2hJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG9uUG9zdERyYXcoKTsKKworICAgICAgICAgICAgICAgIHN3YXBCdWZmZXJzKHN0YXR1cyk7CisKKyAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlTG9jay51bmxvY2soKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhdHRhY2hJbmZvLm1JZ25vcmVEaXJ0eVN0YXRlID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGVidWdPdmVyZHJhdyhWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywgUmVjdCBkaXJ0eSwKKyAgICAgICAgICAgIEhhcmR3YXJlQ2FudmFzIGNhbnZhcywgRGlzcGxheUxpc3QgZGlzcGxheUxpc3QpIHsKKworICAgICAgICBpZiAobURlYnVnT3ZlcmRyYXcgPT0gT1ZFUkRSQVdfVFlQRV9DT1VOVCkgeworICAgICAgICAgICAgaWYgKG1EZWJ1Z092ZXJkcmF3TGF5ZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3TGF5ZXIgPSBjcmVhdGVIYXJkd2FyZUxheWVyKG1XaWR0aCwgbUhlaWdodCwgdHJ1ZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1EZWJ1Z092ZXJkcmF3TGF5ZXIuZ2V0V2lkdGgoKSAhPSBtV2lkdGggfHwKKyAgICAgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdMYXllci5nZXRIZWlnaHQoKSAhPSBtSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdMYXllci5yZXNpemUobVdpZHRoLCBtSGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtRGVidWdPdmVyZHJhd0xheWVyLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3ID0gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIYXJkd2FyZUNhbnZhcyBsYXllckNhbnZhcyA9IG1EZWJ1Z092ZXJkcmF3TGF5ZXIuc3RhcnQoY2FudmFzLCBkaXJ0eSk7CisgICAgICAgICAgICBjb3VudE92ZXJkcmF3KGxheWVyQ2FudmFzKTsKKyAgICAgICAgICAgIGZpbmFsIGludCByZXN0b3JlQ291bnQgPSBsYXllckNhbnZhcy5zYXZlKCk7CisgICAgICAgICAgICBsYXllckNhbnZhcy5kcmF3RGlzcGxheUxpc3QoZGlzcGxheUxpc3QsIG51bGwsIERpc3BsYXlMaXN0LkZMQUdfQ0xJUF9DSElMRFJFTik7CisgICAgICAgICAgICBsYXllckNhbnZhcy5yZXN0b3JlVG9Db3VudChyZXN0b3JlQ291bnQpOworICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdMYXllci5lbmQoY2FudmFzKTsKKworICAgICAgICAgICAgZmxvYXQgb3ZlcmRyYXcgPSBnZXRPdmVyZHJhdyhsYXllckNhbnZhcyk7CisgICAgICAgICAgICBEaXNwbGF5TWV0cmljcyBtZXRyaWNzID0gYXR0YWNoSW5mby5tUm9vdFZpZXcuZ2V0UmVzb3VyY2VzKCkuZ2V0RGlzcGxheU1ldHJpY3MoKTsKKworICAgICAgICAgICAgZHJhd092ZXJkcmF3Q291bnRlcihjYW52YXMsIG92ZXJkcmF3LCBtZXRyaWNzLmRlbnNpdHkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRyYXdPdmVyZHJhd0NvdW50ZXIoSGFyZHdhcmVDYW52YXMgY2FudmFzLCBmbG9hdCBvdmVyZHJhdywgZmxvYXQgZGVuc2l0eSkgeworICAgICAgICBmaW5hbCBTdHJpbmcgdGV4dCA9IFN0cmluZy5mb3JtYXQoIiUuMmZ4Iiwgb3ZlcmRyYXcpOworICAgICAgICBmaW5hbCBQYWludCBwYWludCA9IHNldHVwUGFpbnQoZGVuc2l0eSk7CisgICAgICAgIC8vIEhTQnRvQ29sb3Igd2lsbCBjbGFtcCB0aGUgdmFsdWVzIGluIHRoZSAwLi4xIHJhbmdlCisgICAgICAgIHBhaW50LnNldENvbG9yKENvbG9yLkhTQnRvQ29sb3IoMC4yOGYgLSAwLjI4ZiAqIG92ZXJkcmF3IC8gMy41ZiwgMC44ZiwgMS4wZikpOworCisgICAgICAgIGNhbnZhcy5kcmF3VGV4dCh0ZXh0LCBkZW5zaXR5ICogNC4wZiwgbUhlaWdodCAtIHBhaW50LmdldEZvbnRNZXRyaWNzKCkuYm90dG9tLCBwYWludCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBQYWludCBzZXR1cFBhaW50KGZsb2F0IGRlbnNpdHkpIHsKKyAgICAgICAgaWYgKG1EZWJ1Z092ZXJkcmF3UGFpbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdQYWludCA9IG5ldyBQYWludCgpOworICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgICAgICBtRGVidWdPdmVyZHJhd1BhaW50LnNldFNoYWRvd0xheWVyKGRlbnNpdHkgKiAzLjBmLCAwLjBmLCAwLjBmLCAweGZmMDAwMDAwKTsKKyAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3UGFpbnQuc2V0VGV4dFNpemUoZGVuc2l0eSAqIDIwLjBmKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbURlYnVnT3ZlcmRyYXdQYWludDsKKyAgICB9CisKKyAgICBwcml2YXRlIERpc3BsYXlMaXN0IGJ1aWxkRGlzcGxheUxpc3QoVmlldyB2aWV3LCBIYXJkd2FyZUNhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgaWYgKG1EcmF3RGVsdGEgPD0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHZpZXcubURpc3BsYXlMaXN0OworICAgICAgICB9CisKKyAgICAgICAgdmlldy5tUmVjcmVhdGVEaXNwbGF5TGlzdCA9ICh2aWV3Lm1Qcml2YXRlRmxhZ3MgJiBWaWV3LlBGTEFHX0lOVkFMSURBVEVEKQorICAgICAgICAgICAgICAgID09IFZpZXcuUEZMQUdfSU5WQUxJREFURUQ7CisgICAgICAgIHZpZXcubVByaXZhdGVGbGFncyAmPSB+Vmlldy5QRkxBR19JTlZBTElEQVRFRDsKKworICAgICAgICBsb25nIGJ1aWxkRGlzcGxheUxpc3RTdGFydFRpbWUgPSBzdGFydEJ1aWxkRGlzcGxheUxpc3RQcm9maWxpbmcoKTsKKyAgICAgICAgY2FudmFzLmNsZWFyTGF5ZXJVcGRhdGVzKCk7CisKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfVklFVywgImdldERpc3BsYXlMaXN0Iik7CisgICAgICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0ID0gdmlldy5nZXREaXNwbGF5TGlzdCgpOworICAgICAgICBUcmFjZS50cmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfVklFVyk7CisKKyAgICAgICAgZW5kQnVpbGREaXNwbGF5TGlzdFByb2ZpbGluZyhidWlsZERpc3BsYXlMaXN0U3RhcnRUaW1lKTsKKworICAgICAgICByZXR1cm4gZGlzcGxheUxpc3Q7CisgICAgfQorCisgICAgcHJpdmF0ZSBSZWN0IGJlZ2luRnJhbWUoSGFyZHdhcmVDYW52YXMgY2FudmFzLCBSZWN0IGRpcnR5LCBpbnQgc3VyZmFjZVN0YXRlKSB7CisgICAgICAgIC8vIFdlIGhhZCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgc3VyZmFjZSBhbmQvb3IgY29udGV4dCwgcmVkcmF3IGV2ZXJ5dGhpbmcKKyAgICAgICAgaWYgKHN1cmZhY2VTdGF0ZSA9PSBTVVJGQUNFX1NUQVRFX1VQREFURUQpIHsKKyAgICAgICAgICAgIGRpcnR5ID0gbnVsbDsKKyAgICAgICAgICAgIGJlZ2luRnJhbWUobnVsbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnRbXSBzaXplID0gbVN1cmZhY2VTaXplOworICAgICAgICAgICAgYmVnaW5GcmFtZShzaXplKTsKKworICAgICAgICAgICAgaWYgKHNpemVbMV0gIT0gbUhlaWdodCB8fCBzaXplWzBdICE9IG1XaWR0aCkgeworICAgICAgICAgICAgICAgIG1XaWR0aCA9IHNpemVbMF07CisgICAgICAgICAgICAgICAgbUhlaWdodCA9IHNpemVbMV07CisKKyAgICAgICAgICAgICAgICBjYW52YXMuc2V0Vmlld3BvcnQobVdpZHRoLCBtSGVpZ2h0KTsKKworICAgICAgICAgICAgICAgIGRpcnR5ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtRGVidWdEYXRhUHJvdmlkZXIgIT0gbnVsbCkgZGlydHkgPSBudWxsOworCisgICAgICAgIHJldHVybiBkaXJ0eTsKKyAgICB9CisKKyAgICBwcml2YXRlIGxvbmcgc3RhcnRCdWlsZERpc3BsYXlMaXN0UHJvZmlsaW5nKCkgeworICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7CisgICAgICAgICAgICBtUHJvZmlsZUN1cnJlbnRGcmFtZSArPSBQUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQ7CisgICAgICAgICAgICBpZiAobVByb2ZpbGVDdXJyZW50RnJhbWUgPj0gbVByb2ZpbGVEYXRhLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIG1Qcm9maWxlQ3VycmVudEZyYW1lID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIFN5c3RlbS5uYW5vVGltZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBlbmRCdWlsZERpc3BsYXlMaXN0UHJvZmlsaW5nKGxvbmcgZ2V0RGlzcGxheUxpc3RTdGFydFRpbWUpIHsKKyAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgeworICAgICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW0ubmFub1RpbWUoKTsKKyAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gKG5vdyAtIGdldERpc3BsYXlMaXN0U3RhcnRUaW1lKSAqIDAuMDAwMDAxZjsKKyAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIFBvaW50bGVzc0FyaXRobWV0aWNFeHByZXNzaW9uCisgICAgICAgICAgICBtUHJvZmlsZURhdGFbbVByb2ZpbGVDdXJyZW50RnJhbWVdID0gdG90YWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGludCBwcmVwYXJlRnJhbWUoUmVjdCBkaXJ0eSkgeworICAgICAgICBpbnQgc3RhdHVzOworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRyYWNlLlRSQUNFX1RBR19WSUVXLCAicHJlcGFyZUZyYW1lIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdGF0dXMgPSBvblByZURyYXcoZGlydHkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1ZJRVcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgZHJhd0Rpc3BsYXlMaXN0KFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvLCBIYXJkd2FyZUNhbnZhcyBjYW52YXMsCisgICAgICAgICAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgaW50IHN0YXR1cykgeworCisgICAgICAgIGxvbmcgZHJhd0Rpc3BsYXlMaXN0U3RhcnRUaW1lID0gMDsKKyAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgeworICAgICAgICAgICAgZHJhd0Rpc3BsYXlMaXN0U3RhcnRUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7CisgICAgICAgIH0KKworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRyYWNlLlRSQUNFX1RBR19WSUVXLCAiZHJhd0Rpc3BsYXlMaXN0Iik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdGF0dXMgfD0gY2FudmFzLmRyYXdEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCwgbVJlZHJhd0NsaXAsCisgICAgICAgICAgICAgICAgICAgIERpc3BsYXlMaXN0LkZMQUdfQ0xJUF9DSElMRFJFTik7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfVklFVyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7CisgICAgICAgICAgICBsb25nIG5vdyA9IFN5c3RlbS5uYW5vVGltZSgpOworICAgICAgICAgICAgZmxvYXQgdG90YWwgPSAobm93IC0gZHJhd0Rpc3BsYXlMaXN0U3RhcnRUaW1lKSAqIDAuMDAwMDAxZjsKKyAgICAgICAgICAgIG1Qcm9maWxlRGF0YVttUHJvZmlsZUN1cnJlbnRGcmFtZSArIDFdID0gdG90YWw7CisgICAgICAgIH0KKworICAgICAgICBoYW5kbGVGdW5jdG9yU3RhdHVzKGF0dGFjaEluZm8sIHN0YXR1cyk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHN3YXBCdWZmZXJzKGludCBzdGF0dXMpIHsKKyAgICAgICAgaWYgKChzdGF0dXMgJiBEaXNwbGF5TGlzdC5TVEFUVVNfRFJFVykgPT0gRGlzcGxheUxpc3QuU1RBVFVTX0RSRVcpIHsKKyAgICAgICAgICAgIGxvbmcgZWdsU3dhcEJ1ZmZlcnNTdGFydFRpbWUgPSAwOworICAgICAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGVnbFN3YXBCdWZmZXJzU3RhcnRUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNFZ2wuZWdsU3dhcEJ1ZmZlcnMoc0VnbERpc3BsYXksIG1FZ2xTdXJmYWNlKTsKKworICAgICAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGxvbmcgbm93ID0gU3lzdGVtLm5hbm9UaW1lKCk7CisgICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSAobm93IC0gZWdsU3dhcEJ1ZmZlcnNTdGFydFRpbWUpICogMC4wMDAwMDFmOworICAgICAgICAgICAgICAgIG1Qcm9maWxlRGF0YVttUHJvZmlsZUN1cnJlbnRGcmFtZSArIDJdID0gdG90YWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNoZWNrRWdsRXJyb3JzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGVidWdEaXJ0eVJlZ2lvbnMoUmVjdCBkaXJ0eSwgSGFyZHdhcmVDYW52YXMgY2FudmFzKSB7CisgICAgICAgIGlmIChtRGVidWdEaXJ0eVJlZ2lvbnMpIHsKKyAgICAgICAgICAgIGlmIChtRGVidWdQYWludCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbURlYnVnUGFpbnQgPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgICAgICAgICBtRGVidWdQYWludC5zZXRDb2xvcigweDdmZmYwMDAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRpcnR5ICE9IG51bGwgJiYgKG1GcmFtZUNvdW50ICYgMSkgPT0gMCkgeworICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3UmVjdChkaXJ0eSwgbURlYnVnUGFpbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUZ1bmN0b3JTdGF0dXMoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIGludCBzdGF0dXMpIHsKKyAgICAgICAgLy8gSWYgdGhlIGRyYXcgZmxhZyBpcyBzZXQsIGZ1bmN0b3JzIHdpbGwgYmUgaW52b2tlZCB3aGlsZSBleGVjdXRpbmcKKyAgICAgICAgLy8gdGhlIHRyZWUgb2YgZGlzcGxheSBsaXN0cworICAgICAgICBpZiAoKHN0YXR1cyAmIERpc3BsYXlMaXN0LlNUQVRVU19EUkFXKSAhPSAwKSB7CisgICAgICAgICAgICBpZiAobVJlZHJhd0NsaXAuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tVmlld1Jvb3RJbXBsLmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tVmlld1Jvb3RJbXBsLmludmFsaWRhdGVDaGlsZEluUGFyZW50KG51bGwsIG1SZWRyYXdDbGlwKTsKKyAgICAgICAgICAgICAgICBtUmVkcmF3Q2xpcC5zZXRFbXB0eSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKChzdGF0dXMgJiBEaXNwbGF5TGlzdC5TVEFUVVNfSU5WT0tFKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tSGFuZGxlci5oYXNDYWxsYmFja3MobUZ1bmN0b3JzUnVubmFibGUpKSB7CisgICAgICAgICAgICBhdHRhY2hJbmZvLm1IYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhtRnVuY3RvcnNSdW5uYWJsZSk7CisgICAgICAgICAgICBtRnVuY3RvcnNSdW5uYWJsZS5hdHRhY2hJbmZvID0gYXR0YWNoSW5mbzsKKyAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIucG9zdERlbGF5ZWQobUZ1bmN0b3JzUnVubmFibGUsIEZVTkNUT1JfUFJPQ0VTU19ERUxBWSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGRldGFjaEZ1bmN0b3IoaW50IGZ1bmN0b3IpIHsKKyAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgeworICAgICAgICAgICAgbUNhbnZhcy5kZXRhY2hGdW5jdG9yKGZ1bmN0b3IpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgYm9vbGVhbiBhdHRhY2hGdW5jdG9yKFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvLCBpbnQgZnVuY3RvcikgeworICAgICAgICBpZiAobUNhbnZhcyAhPSBudWxsKSB7CisgICAgICAgICAgICBtQ2FudmFzLmF0dGFjaEZ1bmN0b3IoZnVuY3Rvcik7CisgICAgICAgICAgICBtRnVuY3RvcnNSdW5uYWJsZS5hdHRhY2hJbmZvID0gYXR0YWNoSW5mbzsKKyAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKG1GdW5jdG9yc1J1bm5hYmxlKTsKKyAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIucG9zdERlbGF5ZWQobUZ1bmN0b3JzUnVubmFibGUsICAwKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbnN1cmVzIHRoZSBjdXJyZW50IEVHTCBjb250ZXh0IGFuZCBzdXJmYWNlIGFyZSB0aGUgb25lcyB3ZSBleHBlY3QuCisgICAgICogVGhpcyBtZXRob2QgdGhyb3dzIGFuIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiBpbnZva2VkIGZyb20gYSB0aHJlYWQKKyAgICAgKiB0aGF0IGRpZCBub3QgaW5pdGlhbGl6ZSBFR0wuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHtAbGluayAjU1VSRkFDRV9TVEFURV9FUlJPUn0gaWYgdGhlIGNvcnJlY3QgRUdMIGNvbnRleHQgY2Fubm90IGJlIG1hZGUgY3VycmVudCwKKyAgICAgKiAgICAgICAgIHtAbGluayAjU1VSRkFDRV9TVEFURV9VUERBVEVEfSBpZiB0aGUgRUdMIGNvbnRleHQgd2FzIGNoYW5nZWQgb3IKKyAgICAgKiAgICAgICAgIHtAbGluayAjU1VSRkFDRV9TVEFURV9TVUNDRVNTfSBpZiB0aGUgRUdMIGNvbnRleHQgd2FzIHRoZSBjb3JyZWN0IG9uZQorICAgICAqCisgICAgICogQHNlZSAjY2hlY2tSZW5kZXJDb250ZXh0VW5zYWZlKCkKKyAgICAgKi8KKyAgICBpbnQgY2hlY2tSZW5kZXJDb250ZXh0KCkgeworICAgICAgICBpZiAobUVnbFRocmVhZCAhPSBUaHJlYWQuY3VycmVudFRocmVhZCgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJIYXJkd2FyZSBhY2NlbGVyYXRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGEgIiArCisgICAgICAgICAgICAgICAgICAgICJzaW5nbGUgVUkgdGhyZWFkLlxuT3JpZ2luYWwgdGhyZWFkOiAiICsgbUVnbFRocmVhZCArICJcbiIgKworICAgICAgICAgICAgICAgICAgICAiQ3VycmVudCB0aHJlYWQ6ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjaGVja1JlbmRlckNvbnRleHRVbnNhZmUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbnN1cmVzIHRoZSBjdXJyZW50IEVHTCBjb250ZXh0IGFuZCBzdXJmYWNlIGFyZSB0aGUgb25lcyB3ZSBleHBlY3QuCisgICAgICogVGhpcyBtZXRob2QgZG9lcyBub3QgY2hlY2sgdGhlIGN1cnJlbnQgdGhyZWFkLgorICAgICAqCisgICAgICogQHJldHVybiB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfRVJST1J9IGlmIHRoZSBjb3JyZWN0IEVHTCBjb250ZXh0IGNhbm5vdCBiZSBtYWRlIGN1cnJlbnQsCisgICAgICogICAgICAgICB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfVVBEQVRFRH0gaWYgdGhlIEVHTCBjb250ZXh0IHdhcyBjaGFuZ2VkIG9yCisgICAgICogICAgICAgICB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfU1VDQ0VTU30gaWYgdGhlIEVHTCBjb250ZXh0IHdhcyB0aGUgY29ycmVjdCBvbmUKKyAgICAgKgorICAgICAqIEBzZWUgI2NoZWNrUmVuZGVyQ29udGV4dCgpCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgY2hlY2tSZW5kZXJDb250ZXh0VW5zYWZlKCkgeworICAgICAgICBpZiAoIW1FZ2xTdXJmYWNlLmVxdWFscyhzRWdsLmVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKSkgfHwKKyAgICAgICAgICAgICAgICAhbUVnbENvbnRleHQuZXF1YWxzKHNFZ2wuZWdsR2V0Q3VycmVudENvbnRleHQoKSkpIHsKKyAgICAgICAgICAgIGlmICghc0VnbC5lZ2xNYWtlQ3VycmVudChzRWdsRGlzcGxheSwgbUVnbFN1cmZhY2UsIG1FZ2xTdXJmYWNlLCBtRWdsQ29udGV4dCkpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiZWdsTWFrZUN1cnJlbnQgZmFpbGVkICIgKworICAgICAgICAgICAgICAgICAgICAgICAgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhzRWdsLmVnbEdldEVycm9yKCkpKTsKKyAgICAgICAgICAgICAgICBmYWxsYmFjayh0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU1VSRkFDRV9TVEFURV9FUlJPUjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG1VcGRhdGVEaXJ0eVJlZ2lvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlRGlydHlSZWdpb25zKCk7CisgICAgICAgICAgICAgICAgICAgIG1VcGRhdGVEaXJ0eVJlZ2lvbnMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIFNVUkZBQ0VfU1RBVEVfVVBEQVRFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU1VSRkFDRV9TVEFURV9TVUNDRVNTOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGludCBkcFRvUHgoaW50IGRwLCBmbG9hdCBkZW5zaXR5KSB7CisgICAgICAgIHJldHVybiAoaW50KSAoZHAgKiBkZW5zaXR5ICsgMC41Zik7CisgICAgfQorCisgICAgc3RhdGljIG5hdGl2ZSBib29sZWFuIGxvYWRQcm9wZXJ0aWVzKCk7CisKKyAgICBzdGF0aWMgbmF0aXZlIHZvaWQgc2V0dXBTaGFkZXJzRGlza0NhY2hlKFN0cmluZyBjYWNoZUZpbGUpOworCisgICAgLyoqCisgICAgICogTm90aWZpZXMgRUdMIHRoYXQgdGhlIGZyYW1lIGlzIGFib3V0IHRvIGJlIHJlbmRlcmVkLgorICAgICAqIEBwYXJhbSBzaXplCisgICAgICovCisgICAgc3RhdGljIG5hdGl2ZSB2b2lkIGJlZ2luRnJhbWUoaW50W10gc2l6ZSk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lIGFjY29yZGluZyB0byB0aGUgcmVuZGVyZXIuCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBmb3IgZGVidWdnaW5nIG9ubHkgYW5kIHNob3VsZCBub3QgYmUgdXNlZAorICAgICAqIGFzIGEgY2xvY2suCisgICAgICovCisgICAgc3RhdGljIG5hdGl2ZSBsb25nIGdldFN5c3RlbVRpbWUoKTsKKworICAgIC8qKgorICAgICAqIFByZXNlcnZlcyB0aGUgYmFjayBidWZmZXIgb2YgdGhlIGN1cnJlbnQgc3VyZmFjZSBhZnRlciBhIGJ1ZmZlciBzd2FwLgorICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgc2V0cyB0aGUgRUdMX1NXQVBfQkVIQVZJT1IgYXR0cmlidXRlIG9mIHRoZSBjdXJyZW50CisgICAgICogc3VyZmFjZSB0byBFR0xfQlVGRkVSX1BSRVNFUlZFRC4gQ2FsbGluZyB0aGlzIG1ldGhvZCByZXF1aXJlcyBhbiBFR0wKKyAgICAgKiBjb25maWcgdGhhdCBzdXBwb3J0cyBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklULgorICAgICAqCisgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzd2FwIGJlaGF2aW9yIHdhcyBzdWNjZXNzZnVsbHkgY2hhbmdlZCwKKyAgICAgKiAgICAgICAgIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gcHJlc2VydmVCYWNrQnVmZmVyKCk7CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY3VycmVudCBzdXJmYWNlIHByZXNlcnZlcyBpdHMgYmFjayBidWZmZXIKKyAgICAgKiBhZnRlciBhIGJ1ZmZlciBzd2FwLgorICAgICAqCisgICAgICogQHJldHVybiBUcnVlLCBpZiB0aGUgc3VyZmFjZSdzIEVHTF9TV0FQX0JFSEFWSU9SIGlzIEVHTF9CVUZGRVJfUFJFU0VSVkVELAorICAgICAqICAgICAgICAgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgc3RhdGljIG5hdGl2ZSBib29sZWFuIGlzQmFja0J1ZmZlclByZXNlcnZlZCgpOworCisgICAgY2xhc3MgRHJhd1BlcmZvcm1hbmNlRGF0YVByb3ZpZGVyIGV4dGVuZHMgR3JhcGhEYXRhUHJvdmlkZXIgeworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtR3JhcGhUeXBlOworCisgICAgICAgIHByaXZhdGUgaW50IG1WZXJ0aWNhbFVuaXQ7CisgICAgICAgIHByaXZhdGUgaW50IG1Ib3Jpem9udGFsVW5pdDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUhvcml6b250YWxNYXJnaW47CisgICAgICAgIHByaXZhdGUgaW50IG1UaHJlc2hvbGRTdHJva2U7CisKKyAgICAgICAgRHJhd1BlcmZvcm1hbmNlRGF0YVByb3ZpZGVyKGludCBncmFwaFR5cGUpIHsKKyAgICAgICAgICAgIG1HcmFwaFR5cGUgPSBncmFwaFR5cGU7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBwcmVwYXJlKERpc3BsYXlNZXRyaWNzIG1ldHJpY3MpIHsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IGRlbnNpdHkgPSBtZXRyaWNzLmRlbnNpdHk7CisKKyAgICAgICAgICAgIG1WZXJ0aWNhbFVuaXQgPSBkcFRvUHgoUFJPRklMRV9EUkFXX0RQX1BFUl9NUywgZGVuc2l0eSk7CisgICAgICAgICAgICBtSG9yaXpvbnRhbFVuaXQgPSBkcFRvUHgoUFJPRklMRV9EUkFXX1dJRFRILCBkZW5zaXR5KTsKKyAgICAgICAgICAgIG1Ib3Jpem9udGFsTWFyZ2luID0gZHBUb1B4KFBST0ZJTEVfRFJBV19NQVJHSU4sIGRlbnNpdHkpOworICAgICAgICAgICAgbVRocmVzaG9sZFN0cm9rZSA9IGRwVG9QeChQUk9GSUxFX0RSQVdfVEhSRVNIT0xEX1NUUk9LRV9XSURUSCwgZGVuc2l0eSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgaW50IGdldEdyYXBoVHlwZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtR3JhcGhUeXBlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIGludCBnZXRWZXJ0aWNhbFVuaXRTaXplKCkgeworICAgICAgICAgICAgcmV0dXJuIG1WZXJ0aWNhbFVuaXQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgaW50IGdldEhvcml6b250YWxVbml0U2l6ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtSG9yaXpvbnRhbFVuaXQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgaW50IGdldEhvcml6b250YVVuaXRNYXJnaW4oKSB7CisgICAgICAgICAgICByZXR1cm4gbUhvcml6b250YWxNYXJnaW47CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgZmxvYXRbXSBnZXREYXRhKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Qcm9maWxlRGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBmbG9hdCBnZXRUaHJlc2hvbGQoKSB7CisgICAgICAgICAgICByZXR1cm4gMTY7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgaW50IGdldEZyYW1lQ291bnQoKSB7CisgICAgICAgICAgICByZXR1cm4gbVByb2ZpbGVEYXRhLmxlbmd0aCAvIFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBpbnQgZ2V0RWxlbWVudENvdW50KCkgeworICAgICAgICAgICAgcmV0dXJuIFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBpbnQgZ2V0Q3VycmVudEZyYW1lKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Qcm9maWxlQ3VycmVudEZyYW1lIC8gUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgc2V0dXBHcmFwaFBhaW50KFBhaW50IHBhaW50LCBpbnQgZWxlbWVudEluZGV4KSB7CisgICAgICAgICAgICBwYWludC5zZXRDb2xvcihQUk9GSUxFX0RSQVdfQ09MT1JTW2VsZW1lbnRJbmRleF0pOworICAgICAgICAgICAgaWYgKG1HcmFwaFR5cGUgPT0gR1JBUEhfVFlQRV9MSU5FUykgcGFpbnQuc2V0U3Ryb2tlV2lkdGgobVRocmVzaG9sZFN0cm9rZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBzZXR1cFRocmVzaG9sZFBhaW50KFBhaW50IHBhaW50KSB7CisgICAgICAgICAgICBwYWludC5zZXRDb2xvcihQUk9GSUxFX0RSQVdfVEhSRVNIT0xEX0NPTE9SKTsKKyAgICAgICAgICAgIHBhaW50LnNldFN0cm9rZVdpZHRoKG1UaHJlc2hvbGRTdHJva2UpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgc2V0dXBDdXJyZW50RnJhbWVQYWludChQYWludCBwYWludCkgeworICAgICAgICAgICAgcGFpbnQuc2V0Q29sb3IoUFJPRklMRV9EUkFXX0NVUlJFTlRfRlJBTUVfQ09MT1IpOworICAgICAgICAgICAgaWYgKG1HcmFwaFR5cGUgPT0gR1JBUEhfVFlQRV9MSU5FUykgcGFpbnQuc2V0U3Ryb2tlV2lkdGgobVRocmVzaG9sZFN0cm9rZSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0hhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0hhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzLmphdmEKaW5kZXggOGY0MDI2MC4uMjZmNDdmOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9IYXB0aWNGZWVkYmFja0NvbnN0YW50cy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSGFwdGljRmVlZGJhY2tDb25zdGFudHMuamF2YQpAQCAtNDEsNiArNDEsMTEgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLRVlCT0FSRF9UQVAgPSAzOwogCiAgICAgLyoqCisgICAgICogVGhlIHVzZXIgaGFzIHByZXNzZWQgZWl0aGVyIGFuIGhvdXIgb3IgbWludXRlIHRpY2sgb2YgYSBDbG9jay4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTE9DS19USUNLID0gNDsKKworICAgIC8qKgogICAgICAqIFRoaXMgaXMgYSBwcml2YXRlIGNvbnN0YW50LiAgRmVlbCBmcmVlIHRvIHJlbnVtYmVyIGFzIGRlc2lyZWQuCiAgICAgICogQGhpZGUKICAgICAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSGFyZHdhcmVDYW52YXMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSGFyZHdhcmVDYW52YXMuamF2YQppbmRleCAyNTllMWNkLi4yZTk3MmM1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0hhcmR3YXJlQ2FudmFzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9IYXJkd2FyZUNhbnZhcy5qYXZhCkBAIC0yNyw3ICsyNyw2IEBACiAgKiBAaGlkZQogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSGFyZHdhcmVDYW52YXMgZXh0ZW5kcyBDYW52YXMgewotICAgIHByaXZhdGUgU3RyaW5nIG1OYW1lOwogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNIYXJkd2FyZUFjY2VsZXJhdGVkKCkgewpAQCAtNDAsMzMgKzM5LDYgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhpcyBjYW52YXMuIE5hbWluZyB0aGUgY2FudmFzIGlzIGVudGlyZWx5Ci0gICAgICogb3B0aW9uYWwgYnV0IGNhbiBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjYW52YXMsIGNhbiBiZSBudWxsCi0gICAgICoKLSAgICAgKiBAc2VlICNnZXROYW1lKCkKLSAgICAgKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgICBtTmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGlzIGNhbnZhcy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5hbWUgb2YgdGhlIGNhbnZhcyBvciBudWxsCi0gICAgICoKLSAgICAgKiBAc2VlICNzZXROYW1lKFN0cmluZykKLSAgICAgKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gbU5hbWU7Ci0gICAgfQotCi0gICAgLyoqCiAgICAgICogSW52b2tlZCBiZWZvcmUgYW55IGRyYXdpbmcgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBpbiB0aGlzIGNhbnZhcy4KICAgICAgKiAKICAgICAgKiBAcGFyYW0gZGlydHkgVGhlIGRpcnR5IHJlY3RhbmdsZSB0byB1cGRhdGUsIGNhbiBiZSBudWxsLgpAQCAtMTEyLDE2ICs4NCw2IEBACiAgICAgcHVibGljIGFic3RyYWN0IGludCBkcmF3RGlzcGxheUxpc3QoRGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFJlY3QgZGlydHksIGludCBmbGFncyk7CiAKICAgICAvKioKLSAgICAgKiBPdXRwdXRzIHRoZSBzcGVjaWZpZWQgZGlzcGxheSBsaXN0IHRvIHRoZSBsb2cuIFRoaXMgbWV0aG9kIGV4aXN0cyBmb3IgdXNlIGJ5Ci0gICAgICogdG9vbHMgdG8gb3V0cHV0IGRpc3BsYXkgbGlzdHMgZm9yIHNlbGVjdGVkIG5vZGVzIHRvIHRoZSBsb2cuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZGlzcGxheUxpc3QgVGhlIGRpc3BsYXkgbGlzdCB0byBiZSBsb2dnZWQuCi0gICAgICoKLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIGFic3RyYWN0IHZvaWQgb3V0cHV0RGlzcGxheUxpc3QoRGlzcGxheUxpc3QgZGlzcGxheUxpc3QpOwotCi0gICAgLyoqCiAgICAgICogRHJhd3MgdGhlIHNwZWNpZmllZCBsYXllciBvbnRvIHRoaXMgY2FudmFzLgogICAgICAqCiAgICAgICogQHBhcmFtIGxheWVyIFRoZSBsYXllciB0byBjb21wb3NpdGUgb24gdGhpcyBjYW52YXMKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSGFyZHdhcmVSZW5kZXJlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9IYXJkd2FyZVJlbmRlcmVyLmphdmEKaW5kZXggZjIxNTE4OS4uYWM3MjhmMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9IYXJkd2FyZVJlbmRlcmVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9IYXJkd2FyZVJlbmRlcmVyLmphdmEKQEAgLTE2LDQxICsxNiwxNCBAQAogCiBwYWNrYWdlIGFuZHJvaWQudmlldzsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnRDYWxsYmFja3MyOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3I7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5FR0wxNDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFV0aWxzOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLk1hbmFnZWRFR0xDb250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lkLm9zLlRyYWNlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlLk91dE9mUmVzb3VyY2VzRXhjZXB0aW9uOwogCi1pbXBvcnQgY29tLmdvb2dsZS5hbmRyb2lkLmdsZXNfam5pLkVHTEltcGw7Ci0KLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTA7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDExOwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xDb25maWc7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTENvbnRleHQ7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTERpc3BsYXk7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTFN1cmZhY2U7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0w7Ci0KIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrOwotCi1pbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC4qOwogCiAvKioKICAqIEludGVyZmFjZSBmb3IgcmVuZGVyaW5nIGEgdmlldyBoaWVyYXJjaHkgdXNpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uLgpAQCAtNjYsMTMgKzM5LDYgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FDSEVfUEFUSF9TSEFERVJTID0gImNvbS5hbmRyb2lkLm9wZW5nbC5zaGFkZXJzX2NhY2hlIjsKIAogICAgIC8qKgotICAgICAqIFR1cm4gb24gdG8gb25seSByZWZyZXNoIHRoZSBwYXJ0cyBvZiB0aGUgc2NyZWVuIHRoYXQgbmVlZCB1cGRhdGluZy4KLSAgICAgKiBXaGVuIHR1cm5lZCBvbiB0aGUgcHJvcGVydHkgZGVmaW5lZCBieSB7QGxpbmsgI1JFTkRFUl9ESVJUWV9SRUdJT05TX1BST1BFUlRZfQotICAgICAqIG11c3QgYWxzbyBoYXZlIHRoZSB2YWx1ZSAidHJ1ZSIuCi0gICAgICovCi0gICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gUkVOREVSX0RJUlRZX1JFR0lPTlMgPSB0cnVlOwotCi0gICAgLyoqCiAgICAgICogU3lzdGVtIHByb3BlcnR5IHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgZGlydHkgcmVnaW9ucyBpbnZhbGlkYXRpb24uCiAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHF1ZXJpZWQgaWYge0BsaW5rICNSRU5ERVJfRElSVFlfUkVHSU9OU30gaXMgdHJ1ZS4KICAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGlzIGFzc3VtZWQgdG8gYmUgdHJ1ZS4KQEAgLTIyMiwxNSArMTg4LDggQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc1N5c3RlbVJlbmRlcmVyRGlzYWJsZWQgPSBmYWxzZTsKIAotICAgIC8qKgotICAgICAqIE51bWJlciBvZiBmcmFtZXMgdG8gcHJvZmlsZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9NQVhfRlJBTUVTID0gMTI4OwotCi0gICAgLyoqCi0gICAgICogTnVtYmVyIG9mIGZsb2F0cyBwZXIgcHJvZmlsZWQgZnJhbWUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVCA9IDM7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHNVc2VSZW5kZXJUaHJlYWQgPSBmYWxzZTsKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtRW5hYmxlZDsKICAgICBwcml2YXRlIGJvb2xlYW4gbVJlcXVlc3RlZCA9IHRydWU7CkBAIC0zNTAsMTMgKzMwOSw2IEBACiAgICAgYWJzdHJhY3QgaW50IGdldEhlaWdodCgpOwogCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgY3VycmVudCBjYW52YXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgSGFyZHdhcmVSZW5kZXJlci4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgSGFyZHdhcmVDYW52YXMKLSAgICAgKi8KLSAgICBhYnN0cmFjdCBIYXJkd2FyZUNhbnZhcyBnZXRDYW52YXMoKTsKLQotICAgIC8qKgogICAgICAqIE91dHB1dHMgZXh0cmEgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLgogICAgICAqIEBwYXJhbSBwdwogICAgICAqLwpAQCAtMzc5LDkgKzMzMSw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgYSBwcm9wZXJ0eSBoYXMgY2hhbmdlZC4KICAgICAgKi8KLSAgICBhYnN0cmFjdCBib29sZWFuIGxvYWRTeXN0ZW1Qcm9wZXJ0aWVzKFN1cmZhY2Ugc3VyZmFjZSk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuTG9hZFByb3BlcnRpZXMoKTsKKyAgICBhYnN0cmFjdCBib29sZWFuIGxvYWRTeXN0ZW1Qcm9wZXJ0aWVzKCk7CiAKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkaXJlY3RvcnkgdG8gdXNlIGFzIGEgcGVyc2lzdGVudCBzdG9yYWdlIGZvciBoYXJkd2FyZSByZW5kZXJpbmcKQEAgLTM5Miw2MCArMzQyLDkgQEAKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXR1cERpc2tDYWNoZShGaWxlIGNhY2hlRGlyKSB7Ci0gICAgICAgIG5TZXR1cFNoYWRlcnNEaXNrQ2FjaGUobmV3IEZpbGUoY2FjaGVEaXIsIENBQ0hFX1BBVEhfU0hBREVSUykuZ2V0QWJzb2x1dGVQYXRoKCkpOworICAgICAgICBHTFJlbmRlcmVyLnNldHVwU2hhZGVyc0Rpc2tDYWNoZShuZXcgRmlsZShjYWNoZURpciwgQ0FDSEVfUEFUSF9TSEFERVJTKS5nZXRBYnNvbHV0ZVBhdGgoKSk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldHVwU2hhZGVyc0Rpc2tDYWNoZShTdHJpbmcgY2FjaGVGaWxlKTsKLQotICAgIC8qKgotICAgICAqIE5vdGlmaWVzIEVHTCB0aGF0IHRoZSBmcmFtZSBpcyBhYm91dCB0byBiZSByZW5kZXJlZC4KLSAgICAgKiBAcGFyYW0gc2l6ZQotICAgICAqLwotICAgIHN0YXRpYyB2b2lkIGJlZ2luRnJhbWUoaW50W10gc2l6ZSkgewotICAgICAgICBuQmVnaW5GcmFtZShzaXplKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuQmVnaW5GcmFtZShpbnRbXSBzaXplKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgYWNjb3JkaW5nIHRvIHRoZSByZW5kZXJlci4KLSAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCi0gICAgICogYXMgYSBjbG9jay4KLSAgICAgKi8KLSAgICBzdGF0aWMgbG9uZyBnZXRTeXN0ZW1UaW1lKCkgewotICAgICAgICByZXR1cm4gbkdldFN5c3RlbVRpbWUoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuR2V0U3lzdGVtVGltZSgpOwotCi0gICAgLyoqCi0gICAgICogUHJlc2VydmVzIHRoZSBiYWNrIGJ1ZmZlciBvZiB0aGUgY3VycmVudCBzdXJmYWNlIGFmdGVyIGEgYnVmZmVyIHN3YXAuCi0gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBzZXRzIHRoZSBFR0xfU1dBUF9CRUhBVklPUiBhdHRyaWJ1dGUgb2YgdGhlIGN1cnJlbnQKLSAgICAgKiBzdXJmYWNlIHRvIEVHTF9CVUZGRVJfUFJFU0VSVkVELiBDYWxsaW5nIHRoaXMgbWV0aG9kIHJlcXVpcmVzIGFuIEVHTAotICAgICAqIGNvbmZpZyB0aGF0IHN1cHBvcnRzIEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN3YXAgYmVoYXZpb3Igd2FzIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkLAotICAgICAqICAgICAgICAgZmFsc2Ugb3RoZXJ3aXNlLgotICAgICAqLwotICAgIHN0YXRpYyBib29sZWFuIHByZXNlcnZlQmFja0J1ZmZlcigpIHsKLSAgICAgICAgcmV0dXJuIG5QcmVzZXJ2ZUJhY2tCdWZmZXIoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuUHJlc2VydmVCYWNrQnVmZmVyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY3VycmVudCBzdXJmYWNlIHByZXNlcnZlcyBpdHMgYmFjayBidWZmZXIKLSAgICAgKiBhZnRlciBhIGJ1ZmZlciBzd2FwLgotICAgICAqCi0gICAgICogQHJldHVybiBUcnVlLCBpZiB0aGUgc3VyZmFjZSdzIEVHTF9TV0FQX0JFSEFWSU9SIGlzIEVHTF9CVUZGRVJfUFJFU0VSVkVELAotICAgICAqICAgICAgICAgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICovCi0gICAgc3RhdGljIGJvb2xlYW4gaXNCYWNrQnVmZmVyUHJlc2VydmVkKCkgewotICAgICAgICByZXR1cm4gbklzQmFja0J1ZmZlclByZXNlcnZlZCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5Jc0JhY2tCdWZmZXJQcmVzZXJ2ZWQoKTsKLQogICAgIC8qKgogICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgbGF5ZXIgbmVlZHMgdG8gYmUgdXBkYXRlZAogICAgICAqIGFzIHNvb24gYXMgcG9zc2libGUuCkBAIC01MDksMTggKzQwOCw2IEBACiAgICAgICAgICAgICBSZWN0IGRpcnR5KTsKIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgZGlzcGxheSBsaXN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVjb3JkIGJhdGNoZXMgb2YKLSAgICAgKiBkcmF3aW5nIG9wZXJhdGlvbnMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZGlzcGxheSBsaXN0LCB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4gTWF5IGJlIG51bGwuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEEgbmV3IGRpc3BsYXkgbGlzdC4KLSAgICAgKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IERpc3BsYXlMaXN0IGNyZWF0ZURpc3BsYXlMaXN0KFN0cmluZyBuYW1lKTsKLQotICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgaGFyZHdhcmUgbGF5ZXIuIEEgaGFyZHdhcmUgbGF5ZXIgYnVpbHQgYnkgY2FsbGluZyB0aGlzCiAgICAgICogbWV0aG9kIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHRleHR1cmUgbGF5ZXIsIGluc3RlYWQgb2YgYXMgYSByZW5kZXIgdGFyZ2V0LgogICAgICAqCkBAIC02MjEsMTcgKzUwOCwyMCBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBoYXJkd2FyZSByZW5kZXJlciB1c2luZyBPcGVuR0wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZ2xWZXJzaW9uIFRoZSB2ZXJzaW9uIG9mIE9wZW5HTCB0byB1c2UgKDEgZm9yIE9wZW5HTCAxLCAxMSBmb3IgT3BlbkdMIDEuMSwgZXRjLikKICAgICAgKiBAcGFyYW0gdHJhbnNsdWNlbnQgVHJ1ZSBpZiB0aGUgc3VyZmFjZSBpcyB0cmFuc2x1Y2VudCwgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKICAgICAgKiBAcmV0dXJuIEEgaGFyZHdhcmUgcmVuZGVyZXIgYmFja2VkIGJ5IE9wZW5HTC4KICAgICAgKi8KLSAgICBzdGF0aWMgSGFyZHdhcmVSZW5kZXJlciBjcmVhdGVHbFJlbmRlcmVyKGludCBnbFZlcnNpb24sIGJvb2xlYW4gdHJhbnNsdWNlbnQpIHsKLSAgICAgICAgc3dpdGNoIChnbFZlcnNpb24pIHsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gR2wyMFJlbmRlcmVyLmNyZWF0ZSh0cmFuc2x1Y2VudCk7CisgICAgc3RhdGljIEhhcmR3YXJlUmVuZGVyZXIgY3JlYXRlKGJvb2xlYW4gdHJhbnNsdWNlbnQpIHsKKyAgICAgICAgSGFyZHdhcmVSZW5kZXJlciByZW5kZXJlciA9IG51bGw7CisgICAgICAgIGlmIChHTEVTMjBDYW52YXMuaXNBdmFpbGFibGUoKSkgeworICAgICAgICAgICAgaWYgKHNVc2VSZW5kZXJUaHJlYWQpIHsKKyAgICAgICAgICAgICAgICByZW5kZXJlciA9IG5ldyBUaHJlYWRlZFJlbmRlcmVyKHRyYW5zbHVjZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSBuZXcgR0xSZW5kZXJlcih0cmFuc2x1Y2VudCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5rbm93biBHTCB2ZXJzaW9uOiAiICsgZ2xWZXJzaW9uKTsKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyOwogICAgIH0KIAogICAgIC8qKgpAQCAtNjU2LDcgKzU0Niw3IEBACiAgICAgICogICAgICAgICAgICAgIHNlZSB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudENhbGxiYWNrc30KICAgICAgKi8KICAgICBzdGF0aWMgdm9pZCBzdGFydFRyaW1NZW1vcnkoaW50IGxldmVsKSB7Ci0gICAgICAgIEdsMjBSZW5kZXJlci5zdGFydFRyaW1NZW1vcnkobGV2ZWwpOworICAgICAgICBHTFJlbmRlcmVyLnN0YXJ0VHJpbU1lbW9yeShsZXZlbCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02NjQsNyArNTU0LDcgQEAKICAgICAgKiBjbGVhbnVwIHNwZWNpYWwgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIG1lbW9yeSB0cmltbWluZyBwcm9jZXNzLgogICAgICAqLwogICAgIHN0YXRpYyB2b2lkIGVuZFRyaW1NZW1vcnkoKSB7Ci0gICAgICAgIEdsMjBSZW5kZXJlci5lbmRUcmltTWVtb3J5KCk7CisgICAgICAgIEdMUmVuZGVyZXIuZW5kVHJpbU1lbW9yeSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNzk4LDE1NTMgKzY4OCw0IEBACiAgICAgICAgICAqLwogICAgICAgICBhYnN0cmFjdCB2b2lkIHNldHVwQ3VycmVudEZyYW1lUGFpbnQoUGFpbnQgcGFpbnQpOwogICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsiZGVwcmVjYXRpb24ifSkKLSAgICBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgR2xSZW5kZXJlciBleHRlbmRzIEhhcmR3YXJlUmVuZGVyZXIgewotICAgICAgICBzdGF0aWMgZmluYWwgaW50IFNVUkZBQ0VfU1RBVEVfRVJST1IgPSAwOwotICAgICAgICBzdGF0aWMgZmluYWwgaW50IFNVUkZBQ0VfU1RBVEVfU1VDQ0VTUyA9IDE7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgU1VSRkFDRV9TVEFURV9VUERBVEVEID0gMjsKLQotICAgICAgICBzdGF0aWMgZmluYWwgaW50IEZVTkNUT1JfUFJPQ0VTU19ERUxBWSA9IDQ7Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST0ZJTEVfRFJBV19NQVJHSU4gPSAwOwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX1dJRFRIID0gMzsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gUFJPRklMRV9EUkFXX0NPTE9SUyA9IHsgMHhjZjNlNjZjYywgMHhjZmRjMzkxMiwgMHhjZmU2OTgwMCB9OwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX0NVUlJFTlRfRlJBTUVfQ09MT1IgPSAweGNmNWZhYTRkOwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX1RIUkVTSE9MRF9DT0xPUiA9IDB4ZmY1ZmFhNGQ7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX0RSQVdfVEhSRVNIT0xEX1NUUk9LRV9XSURUSCA9IDI7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX0RSQVdfRFBfUEVSX01TID0gNzsKLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBWSVNVQUxJWkVSUyA9IHsKLSAgICAgICAgICAgICAgICBQUk9GSUxFX1BST1BFUlRZX1ZJU1VBTElaRV9CQVJTLAotICAgICAgICAgICAgICAgIFBST0ZJTEVfUFJPUEVSVFlfVklTVUFMSVpFX0xJTkVTCi0gICAgICAgIH07Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gT1ZFUkRSQVcgPSB7Ci0gICAgICAgICAgICAgICAgT1ZFUkRSQVdfUFJPUEVSVFlfU0hPVywKLSAgICAgICAgICAgICAgICBPVkVSRFJBV19QUk9QRVJUWV9DT1VOVAotICAgICAgICB9OwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT1ZFUkRSQVdfVFlQRV9DT1VOVCA9IDE7Ci0KLSAgICAgICAgc3RhdGljIEVHTDEwIHNFZ2w7Ci0gICAgICAgIHN0YXRpYyBFR0xEaXNwbGF5IHNFZ2xEaXNwbGF5OwotICAgICAgICBzdGF0aWMgRUdMQ29uZmlnIHNFZ2xDb25maWc7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBPYmplY3RbXSBzRWdsTG9jayA9IG5ldyBPYmplY3RbMF07Ci0gICAgICAgIGludCBtV2lkdGggPSAtMSwgbUhlaWdodCA9IC0xOwotCi0gICAgICAgIHN0YXRpYyBmaW5hbCBUaHJlYWRMb2NhbDxNYW5hZ2VkRUdMQ29udGV4dD4gc0VnbENvbnRleHRTdG9yYWdlCi0gICAgICAgICAgICAgICAgPSBuZXcgVGhyZWFkTG9jYWw8TWFuYWdlZEVHTENvbnRleHQ+KCk7Ci0KLSAgICAgICAgRUdMQ29udGV4dCBtRWdsQ29udGV4dDsKLSAgICAgICAgVGhyZWFkIG1FZ2xUaHJlYWQ7Ci0KLSAgICAgICAgRUdMU3VyZmFjZSBtRWdsU3VyZmFjZTsKLQotICAgICAgICBHTCBtR2w7Ci0gICAgICAgIEhhcmR3YXJlQ2FudmFzIG1DYW52YXM7Ci0KLSAgICAgICAgU3RyaW5nIG1OYW1lOwotCi0gICAgICAgIGxvbmcgbUZyYW1lQ291bnQ7Ci0gICAgICAgIFBhaW50IG1EZWJ1Z1BhaW50OwotCi0gICAgICAgIHN0YXRpYyBib29sZWFuIHNEaXJ0eVJlZ2lvbnM7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIHNEaXJ0eVJlZ2lvbnNSZXF1ZXN0ZWQ7Ci0gICAgICAgIHN0YXRpYyB7Ci0gICAgICAgICAgICBTdHJpbmcgZGlydHlQcm9wZXJ0eSA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0KFJFTkRFUl9ESVJUWV9SRUdJT05TX1BST1BFUlRZLCAidHJ1ZSIpOwotICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb24sQ29uc3RhbnRDb25kaXRpb25zCi0gICAgICAgICAgICBzRGlydHlSZWdpb25zID0gUkVOREVSX0RJUlRZX1JFR0lPTlMgJiYgInRydWUiLmVxdWFsc0lnbm9yZUNhc2UoZGlydHlQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBzRGlydHlSZWdpb25zUmVxdWVzdGVkID0gc0RpcnR5UmVnaW9uczsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gbURpcnR5UmVnaW9uc0VuYWJsZWQ7Ci0gICAgICAgIGJvb2xlYW4gbVVwZGF0ZURpcnR5UmVnaW9uczsKLQotICAgICAgICBib29sZWFuIG1Qcm9maWxlRW5hYmxlZDsKLSAgICAgICAgaW50IG1Qcm9maWxlVmlzdWFsaXplclR5cGUgPSAtMTsKLSAgICAgICAgZmxvYXRbXSBtUHJvZmlsZURhdGE7Ci0gICAgICAgIFJlZW50cmFudExvY2sgbVByb2ZpbGVMb2NrOwotICAgICAgICBpbnQgbVByb2ZpbGVDdXJyZW50RnJhbWUgPSAtUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UOwotCi0gICAgICAgIEdyYXBoRGF0YVByb3ZpZGVyIG1EZWJ1Z0RhdGFQcm92aWRlcjsKLSAgICAgICAgZmxvYXRbXVtdIG1Qcm9maWxlU2hhcGVzOwotICAgICAgICBQYWludCBtUHJvZmlsZVBhaW50OwotCi0gICAgICAgIGJvb2xlYW4gbURlYnVnRGlydHlSZWdpb25zOwotICAgICAgICBpbnQgbURlYnVnT3ZlcmRyYXcgPSAtMTsKLSAgICAgICAgSGFyZHdhcmVMYXllciBtRGVidWdPdmVyZHJhd0xheWVyOwotICAgICAgICBQYWludCBtRGVidWdPdmVyZHJhd1BhaW50OwotCi0gICAgICAgIGZpbmFsIGludCBtR2xWZXJzaW9uOwotICAgICAgICBmaW5hbCBib29sZWFuIG1UcmFuc2x1Y2VudDsKLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbURlc3Ryb3llZDsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVJlZHJhd0NsaXAgPSBuZXcgUmVjdCgpOwotCi0gICAgICAgIHByaXZhdGUgZmluYWwgaW50W10gbVN1cmZhY2VTaXplID0gbmV3IGludFsyXTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBGdW5jdG9yc1J1bm5hYmxlIG1GdW5jdG9yc1J1bm5hYmxlID0gbmV3IEZ1bmN0b3JzUnVubmFibGUoKTsKLQotICAgICAgICBwcml2YXRlIGxvbmcgbURyYXdEZWx0YSA9IExvbmcuTUFYX1ZBTFVFOwotCi0gICAgICAgIEdsUmVuZGVyZXIoaW50IGdsVmVyc2lvbiwgYm9vbGVhbiB0cmFuc2x1Y2VudCkgewotICAgICAgICAgICAgbUdsVmVyc2lvbiA9IGdsVmVyc2lvbjsKLSAgICAgICAgICAgIG1UcmFuc2x1Y2VudCA9IHRyYW5zbHVjZW50OwotCi0gICAgICAgICAgICBsb2FkU3lzdGVtUHJvcGVydGllcyhudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBib29sZWFuIGxvYWRTeXN0ZW1Qcm9wZXJ0aWVzKFN1cmZhY2Ugc3VyZmFjZSkgewotICAgICAgICAgICAgYm9vbGVhbiB2YWx1ZTsKLSAgICAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBTdHJpbmcgcHJvZmlsaW5nID0gU3lzdGVtUHJvcGVydGllcy5nZXQoUFJPRklMRV9QUk9QRVJUWSk7Ci0gICAgICAgICAgICBpbnQgZ3JhcGhUeXBlID0gc2VhcmNoKFZJU1VBTElaRVJTLCBwcm9maWxpbmcpOwotICAgICAgICAgICAgdmFsdWUgPSBncmFwaFR5cGUgPj0gMDsKLQotICAgICAgICAgICAgaWYgKGdyYXBoVHlwZSAhPSBtUHJvZmlsZVZpc3VhbGl6ZXJUeXBlKSB7Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbVByb2ZpbGVWaXN1YWxpemVyVHlwZSA9IGdyYXBoVHlwZTsKLQotICAgICAgICAgICAgICAgIG1Qcm9maWxlU2hhcGVzID0gbnVsbDsKLSAgICAgICAgICAgICAgICBtUHJvZmlsZVBhaW50ID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBtRGVidWdEYXRhUHJvdmlkZXIgPSBuZXcgRHJhd1BlcmZvcm1hbmNlRGF0YVByb3ZpZGVyKGdyYXBoVHlwZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbURlYnVnRGF0YVByb3ZpZGVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIG9uLXNjcmVlbiBwcm9maWxpbmcgaXMgbm90IGVuYWJsZWQsIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlcgotICAgICAgICAgICAgLy8gY29uc29sZSBwcm9maWxpbmcgb25seSBpcyBlbmFibGVkCi0gICAgICAgICAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBCb29sZWFuLnBhcnNlQm9vbGVhbihwcm9maWxpbmcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodmFsdWUgIT0gbVByb2ZpbGVFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbVByb2ZpbGVFbmFibGVkID0gdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5kKExPR19UQUcsICJQcm9maWxpbmcgaGFyZHdhcmUgcmVuZGVyZXIiKTsKLQotICAgICAgICAgICAgICAgICAgICBpbnQgbWF4UHJvZmlsZUZyYW1lcyA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0SW50KFBST0ZJTEVfTUFYRlJBTUVTX1BST1BFUlRZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST0ZJTEVfTUFYX0ZSQU1FUyk7Ci0gICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlRGF0YSA9IG5ldyBmbG9hdFttYXhQcm9maWxlRnJhbWVzICogUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUHJvZmlsZURhdGEubGVuZ3RoOyBpICs9IFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhW2ldID0gbVByb2ZpbGVEYXRhW2kgKyAxXSA9IG1Qcm9maWxlRGF0YVtpICsgMl0gPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlTG9jayA9IG5ldyBSZWVudHJhbnRMb2NrKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVMb2NrID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVWaXN1YWxpemVyVHlwZSA9IC0xOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1Qcm9maWxlQ3VycmVudEZyYW1lID0gLVBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFsdWUgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldEJvb2xlYW4oREVCVUdfRElSVFlfUkVHSU9OU19QUk9QRVJUWSwgZmFsc2UpOwotICAgICAgICAgICAgaWYgKHZhbHVlICE9IG1EZWJ1Z0RpcnR5UmVnaW9ucykgewotICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIG1EZWJ1Z0RpcnR5UmVnaW9ucyA9IHZhbHVlOwotCi0gICAgICAgICAgICAgICAgaWYgKG1EZWJ1Z0RpcnR5UmVnaW9ucykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChMT0dfVEFHLCAiRGVidWdnaW5nIGRpcnR5IHJlZ2lvbnMiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN0cmluZyBvdmVyZHJhdyA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0KEhhcmR3YXJlUmVuZGVyZXIuREVCVUdfT1ZFUkRSQVdfUFJPUEVSVFkpOwotICAgICAgICAgICAgaW50IGRlYnVnT3ZlcmRyYXcgPSBzZWFyY2goT1ZFUkRSQVcsIG92ZXJkcmF3KTsKLSAgICAgICAgICAgIGlmIChkZWJ1Z092ZXJkcmF3ICE9IG1EZWJ1Z092ZXJkcmF3KSB7Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXcgPSBkZWJ1Z092ZXJkcmF3OwotCi0gICAgICAgICAgICAgICAgaWYgKG1EZWJ1Z092ZXJkcmF3ICE9IE9WRVJEUkFXX1RZUEVfQ09VTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1EZWJ1Z092ZXJkcmF3TGF5ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdMYXllci5kZXN0cm95KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3UGFpbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobkxvYWRQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBpbnQgc2VhcmNoKFN0cmluZ1tdIHZhbHVlcywgU3RyaW5nIHZhbHVlKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0uZXF1YWxzKHZhbHVlKSkgcmV0dXJuIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBkdW1wR2Z4SW5mbyhQcmludFdyaXRlciBwdykgewotICAgICAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgewotICAgICAgICAgICAgICAgIHB3LnByaW50ZigiXG5cdERyYXdcdFByb2Nlc3NcdEV4ZWN1dGVcbiIpOwotCi0gICAgICAgICAgICAgICAgbVByb2ZpbGVMb2NrLmxvY2soKTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Qcm9maWxlRGF0YS5sZW5ndGg7IGkgKz0gUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVEYXRhW2ldIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRmKCJcdCUzLjJmXHQlMy4yZlx0JTMuMmZcbiIsIG1Qcm9maWxlRGF0YVtpXSwgbVByb2ZpbGVEYXRhW2kgKyAxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhW2kgKyAyXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGFbaV0gPSBtUHJvZmlsZURhdGFbaSArIDFdID0gbVByb2ZpbGVEYXRhW2kgKyAyXSA9IC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlQ3VycmVudEZyYW1lID0gbVByb2ZpbGVEYXRhLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZUxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIGxvbmcgZ2V0RnJhbWVDb3VudCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtRnJhbWVDb3VudDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJlbmRlcmVyIGluc3RhbmNlIGNhbiB0cmFjayBhbmQgdXBkYXRlIGRpcnR5IHJlZ2lvbnMuCi0gICAgICAgICAqLwotICAgICAgICBib29sZWFuIGhhc0RpcnR5UmVnaW9ucygpIHsKLSAgICAgICAgICAgIHJldHVybiBtRGlydHlSZWdpb25zRW5hYmxlZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDaGVja3MgZm9yIE9wZW5HTCBlcnJvcnMuIElmIGFuIGVycm9yIGhhcyBvY2N1cmVkLCB7QGxpbmsgI2Rlc3Ryb3koYm9vbGVhbil9Ci0gICAgICAgICAqIGlzIGludm9rZWQgYW5kIHRoZSByZXF1ZXN0ZWQgZmxhZyBpcyB0dXJuZWQgb2ZmLiBUaGUgZXJyb3IgY29kZSBpcwotICAgICAgICAgKiBhbHNvIGxvZ2dlZCBhcyBhIHdhcm5pbmcuCi0gICAgICAgICAqLwotICAgICAgICB2b2lkIGNoZWNrRWdsRXJyb3JzKCkgewotICAgICAgICAgICAgaWYgKGlzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tFZ2xFcnJvcnNGb3JjZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBjaGVja0VnbEVycm9yc0ZvcmNlZCgpIHsKLSAgICAgICAgICAgIGludCBlcnJvciA9IHNFZ2wuZWdsR2V0RXJyb3IoKTsKLSAgICAgICAgICAgIGlmIChlcnJvciAhPSBFR0xfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBiYWQgaGFzIGhhcHBlbmVkIHJldmVydCB0bwotICAgICAgICAgICAgICAgIC8vIG5vcm1hbCByZW5kZXJpbmcuCi0gICAgICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkVHTCBlcnJvcjogIiArIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoZXJyb3IpKTsKLSAgICAgICAgICAgICAgICBmYWxsYmFjayhlcnJvciAhPSBFR0wxMS5FR0xfQ09OVEVYVF9MT1NUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBmYWxsYmFjayhib29sZWFuIGZhbGxiYWNrKSB7Ci0gICAgICAgICAgICBkZXN0cm95KHRydWUpOwotICAgICAgICAgICAgaWYgKGZhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgLy8gd2UnbGwgdHJ5IGFnYWluIGlmIGl0IHdhcyBjb250ZXh0IGxvc3QKLSAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0ZWQoZmFsc2UpOwotICAgICAgICAgICAgICAgIExvZy53KExPR19UQUcsICJNb3VudGFpbiBWaWV3LCB3ZSd2ZSBoYWQgYSBwcm9ibGVtIGhlcmUuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIlN3aXRjaGluZyBiYWNrIHRvIHNvZnR3YXJlIHJlbmRlcmluZy4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBib29sZWFuIGluaXRpYWxpemUoU3VyZmFjZSBzdXJmYWNlKSB0aHJvd3MgT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24gewotICAgICAgICAgICAgaWYgKGlzUmVxdWVzdGVkKCkgJiYgIWlzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBjb250ZXh0Q3JlYXRlZCA9IGluaXRpYWxpemVFZ2woKTsKLSAgICAgICAgICAgICAgICBtR2wgPSBjcmVhdGVFZ2xTdXJmYWNlKHN1cmZhY2UpOwotICAgICAgICAgICAgICAgIG1EZXN0cm95ZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgIGlmIChtR2wgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgZXJyID0gc0VnbC5lZ2xHZXRFcnJvcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IEVHTF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95KHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVxdWVzdGVkKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQ2FudmFzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2FudmFzID0gY3JlYXRlQ2FudmFzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNhbnZhcy5zZXROYW1lKG1OYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0Q3JlYXRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRBdGxhcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1DYW52YXMgIT0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCB1cGRhdGVTdXJmYWNlKFN1cmZhY2Ugc3VyZmFjZSkgdGhyb3dzIE91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIGlmIChpc1JlcXVlc3RlZCgpICYmIGlzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgY3JlYXRlRWdsU3VyZmFjZShzdXJmYWNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFic3RyYWN0IEhhcmR3YXJlQ2FudmFzIGNyZWF0ZUNhbnZhcygpOwotCi0gICAgICAgIGFic3RyYWN0IGludFtdIGdldENvbmZpZyhib29sZWFuIGRpcnR5UmVnaW9ucyk7Ci0KLSAgICAgICAgYm9vbGVhbiBpbml0aWFsaXplRWdsKCkgewotICAgICAgICAgICAgc3luY2hyb25pemVkIChzRWdsTG9jaykgewotICAgICAgICAgICAgICAgIGlmIChzRWdsID09IG51bGwgJiYgc0VnbENvbmZpZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNFZ2wgPSAoRUdMMTApIEVHTENvbnRleHQuZ2V0RUdMKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRvIHRoZSBkZWZhdWx0IGRpc3BsYXkuCi0gICAgICAgICAgICAgICAgICAgIHNFZ2xEaXNwbGF5ID0gc0VnbC5lZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzRWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbEdldERpc3BsYXkgZmFpbGVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBHTFV0aWxzLmdldEVHTEVycm9yU3RyaW5nKHNFZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIG5vdyBpbml0aWFsaXplIEVHTCBmb3IgdGhhdCBkaXNwbGF5Ci0gICAgICAgICAgICAgICAgICAgIGludFtdIHZlcnNpb24gPSBuZXcgaW50WzJdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXNFZ2wuZWdsSW5pdGlhbGl6ZShzRWdsRGlzcGxheSwgdmVyc2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2xJbml0aWFsaXplIGZhaWxlZCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhzRWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrRWdsRXJyb3JzRm9yY2VkKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc0VnbENvbmZpZyA9IGxvYWRFZ2xDb25maWcoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE1hbmFnZWRFR0xDb250ZXh0IG1hbmFnZWRDb250ZXh0ID0gc0VnbENvbnRleHRTdG9yYWdlLmdldCgpOwotICAgICAgICAgICAgbUVnbENvbnRleHQgPSBtYW5hZ2VkQ29udGV4dCAhPSBudWxsID8gbWFuYWdlZENvbnRleHQuZ2V0Q29udGV4dCgpIDogbnVsbDsKLSAgICAgICAgICAgIG1FZ2xUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotCi0gICAgICAgICAgICBpZiAobUVnbENvbnRleHQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1FZ2xDb250ZXh0ID0gY3JlYXRlQ29udGV4dChzRWdsLCBzRWdsRGlzcGxheSwgc0VnbENvbmZpZyk7Ci0gICAgICAgICAgICAgICAgc0VnbENvbnRleHRTdG9yYWdlLnNldChjcmVhdGVNYW5hZ2VkQ29udGV4dChtRWdsQ29udGV4dCkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIEVHTENvbmZpZyBsb2FkRWdsQ29uZmlnKCkgewotICAgICAgICAgICAgRUdMQ29uZmlnIGVnbENvbmZpZyA9IGNob29zZUVnbENvbmZpZygpOwotICAgICAgICAgICAgaWYgKGVnbENvbmZpZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgdHJpZWQgdG8gdXNlIEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQsIHRyeSBhZ2FpbiB3aXRob3V0Ci0gICAgICAgICAgICAgICAgaWYgKHNEaXJ0eVJlZ2lvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgc0RpcnR5UmVnaW9ucyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBlZ2xDb25maWcgPSBjaG9vc2VFZ2xDb25maWcoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVnbENvbmZpZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZWdsQ29uZmlnIG5vdCBpbml0aWFsaXplZCIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbENvbmZpZyBub3QgaW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZWdsQ29uZmlnOwotICAgICAgICB9Ci0KLSAgICAgICAgYWJzdHJhY3QgTWFuYWdlZEVHTENvbnRleHQgY3JlYXRlTWFuYWdlZENvbnRleHQoRUdMQ29udGV4dCBlZ2xDb250ZXh0KTsKLQotICAgICAgICBwcml2YXRlIEVHTENvbmZpZyBjaG9vc2VFZ2xDb25maWcoKSB7Ci0gICAgICAgICAgICBFR0xDb25maWdbXSBjb25maWdzID0gbmV3IEVHTENvbmZpZ1sxXTsKLSAgICAgICAgICAgIGludFtdIGNvbmZpZ3NDb3VudCA9IG5ldyBpbnRbMV07Ci0gICAgICAgICAgICBpbnRbXSBjb25maWdTcGVjID0gZ2V0Q29uZmlnKHNEaXJ0eVJlZ2lvbnMpOwotCi0gICAgICAgICAgICAvLyBEZWJ1ZwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRlYnVnID0gU3lzdGVtUHJvcGVydGllcy5nZXQoUFJJTlRfQ09ORklHX1BST1BFUlRZLCAiIik7Ci0gICAgICAgICAgICBpZiAoImFsbCIuZXF1YWxzSWdub3JlQ2FzZShkZWJ1ZykpIHsKLSAgICAgICAgICAgICAgICBzRWdsLmVnbENob29zZUNvbmZpZyhzRWdsRGlzcGxheSwgY29uZmlnU3BlYywgbnVsbCwgMCwgY29uZmlnc0NvdW50KTsKLQotICAgICAgICAgICAgICAgIEVHTENvbmZpZ1tdIGRlYnVnQ29uZmlncyA9IG5ldyBFR0xDb25maWdbY29uZmlnc0NvdW50WzBdXTsKLSAgICAgICAgICAgICAgICBzRWdsLmVnbENob29zZUNvbmZpZyhzRWdsRGlzcGxheSwgY29uZmlnU3BlYywgZGVidWdDb25maWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnc0NvdW50WzBdLCBjb25maWdzQ291bnQpOwotCi0gICAgICAgICAgICAgICAgZm9yIChFR0xDb25maWcgY29uZmlnIDogZGVidWdDb25maWdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Q29uZmlnKGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXNFZ2wuZWdsQ2hvb3NlQ29uZmlnKHNFZ2xEaXNwbGF5LCBjb25maWdTcGVjLCBjb25maWdzLCAxLCBjb25maWdzQ291bnQpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZWdsQ2hvb3NlQ29uZmlnIGZhaWxlZCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoc0VnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZ3NDb3VudFswXSA+IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoImNob2ljZSIuZXF1YWxzSWdub3JlQ2FzZShkZWJ1ZykpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRDb25maWcoY29uZmlnc1swXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdzWzBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRDb25maWcoRUdMQ29uZmlnIGNvbmZpZykgewotICAgICAgICAgICAgaW50W10gdmFsdWUgPSBuZXcgaW50WzFdOwotCi0gICAgICAgICAgICBMb2cuZChMT0dfVEFHLCAiRUdMIGNvbmZpZ3VyYXRpb24gIiArIGNvbmZpZyArICI6Iik7Ci0KLSAgICAgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9SRURfU0laRSwgdmFsdWUpOwotICAgICAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgUkVEX1NJWkUgPSAiICsgdmFsdWVbMF0pOwotCi0gICAgICAgICAgICBzRWdsLmVnbEdldENvbmZpZ0F0dHJpYihzRWdsRGlzcGxheSwgY29uZmlnLCBFR0xfR1JFRU5fU0laRSwgdmFsdWUpOwotICAgICAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgR1JFRU5fU0laRSA9ICIgKyB2YWx1ZVswXSk7Ci0KLSAgICAgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9CTFVFX1NJWkUsIHZhbHVlKTsKLSAgICAgICAgICAgIExvZy5kKExPR19UQUcsICIgIEJMVUVfU0laRSA9ICIgKyB2YWx1ZVswXSk7Ci0KLSAgICAgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9BTFBIQV9TSVpFLCB2YWx1ZSk7Ci0gICAgICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBBTFBIQV9TSVpFID0gIiArIHZhbHVlWzBdKTsKLQotICAgICAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX0RFUFRIX1NJWkUsIHZhbHVlKTsKLSAgICAgICAgICAgIExvZy5kKExPR19UQUcsICIgIERFUFRIX1NJWkUgPSAiICsgdmFsdWVbMF0pOwotCi0gICAgICAgICAgICBzRWdsLmVnbEdldENvbmZpZ0F0dHJpYihzRWdsRGlzcGxheSwgY29uZmlnLCBFR0xfU1RFTkNJTF9TSVpFLCB2YWx1ZSk7Ci0gICAgICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBTVEVOQ0lMX1NJWkUgPSAiICsgdmFsdWVbMF0pOwotCi0gICAgICAgICAgICBzRWdsLmVnbEdldENvbmZpZ0F0dHJpYihzRWdsRGlzcGxheSwgY29uZmlnLCBFR0xfU0FNUExFX0JVRkZFUlMsIHZhbHVlKTsKLSAgICAgICAgICAgIExvZy5kKExPR19UQUcsICIgIFNBTVBMRV9CVUZGRVJTID0gIiArIHZhbHVlWzBdKTsKLQotICAgICAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX1NBTVBMRVMsIHZhbHVlKTsKLSAgICAgICAgICAgIExvZy5kKExPR19UQUcsICIgIFNBTVBMRVMgPSAiICsgdmFsdWVbMF0pOwotCi0gICAgICAgICAgICBzRWdsLmVnbEdldENvbmZpZ0F0dHJpYihzRWdsRGlzcGxheSwgY29uZmlnLCBFR0xfU1VSRkFDRV9UWVBFLCB2YWx1ZSk7Ci0gICAgICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBTVVJGQUNFX1RZUEUgPSAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHZhbHVlWzBdKSk7Ci0KLSAgICAgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9DT05GSUdfQ0FWRUFULCB2YWx1ZSk7Ci0gICAgICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBDT05GSUdfQ0FWRUFUID0gMHgiICsgSW50ZWdlci50b0hleFN0cmluZyh2YWx1ZVswXSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgR0wgY3JlYXRlRWdsU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpIHRocm93cyBPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBDaGVjayBwcmVjb25kaXRpb25zLgotICAgICAgICAgICAgaWYgKHNFZ2wgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2wgbm90IGluaXRpYWxpemVkIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc0VnbERpc3BsYXkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2xEaXNwbGF5IG5vdCBpbml0aWFsaXplZCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNFZ2xDb25maWcgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2xDb25maWcgbm90IGluaXRpYWxpemVkIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAhPSBtRWdsVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSGFyZHdhcmVSZW5kZXJlciBjYW5ub3QgYmUgdXNlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICArICJmcm9tIG11bHRpcGxlIHRocmVhZHMiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSW4gY2FzZSB3ZSBuZWVkIHRvIGRlc3Ryb3kgYW4gZXhpc3Rpbmcgc3VyZmFjZQotICAgICAgICAgICAgZGVzdHJveVN1cmZhY2UoKTsKLQotICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIEVHTCBzdXJmYWNlIHdlIGNhbiByZW5kZXIgaW50by4KLSAgICAgICAgICAgIGlmICghY3JlYXRlU3VyZmFjZShzdXJmYWNlKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbml0Q2FjaGVzKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBtRWdsQ29udGV4dC5nZXRHTCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGVuYWJsZURpcnR5UmVnaW9ucygpIHsKLSAgICAgICAgICAgIC8vIElmIG1EaXJ0eVJlZ2lvbnMgaXMgc2V0LCB0aGlzIG1lYW5zIHdlIGhhdmUgYW4gRUdMIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgIC8vIHdpdGggRUdMX1NXQVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJVCBzZXQKLSAgICAgICAgICAgIGlmIChzRGlydHlSZWdpb25zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEobURpcnR5UmVnaW9uc0VuYWJsZWQgPSBwcmVzZXJ2ZUJhY2tCdWZmZXIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkJhY2tidWZmZXIgY2Fubm90IGJlIHByZXNlcnZlZCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc0RpcnR5UmVnaW9uc1JlcXVlc3RlZCkgewotICAgICAgICAgICAgICAgIC8vIElmIG1EaXJ0eVJlZ2lvbnMgaXMgbm90IHNldCwgb3VyIEVHTCBjb25maWd1cmF0aW9uIGRvZXMgbm90Ci0gICAgICAgICAgICAgICAgLy8gaGF2ZSBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUOyBob3dldmVyLCB0aGUgZGVmYXVsdAotICAgICAgICAgICAgICAgIC8vIHN3YXAgYmVoYXZpb3IgbWlnaHQgYmUgRUdMX0JVRkZFUl9QUkVTRVJWRUQsIHdoaWNoIG1lYW5zIHdlCi0gICAgICAgICAgICAgICAgLy8gd2FudCB0byBzZXQgbURpcnR5UmVnaW9ucy4gV2UgdHJ5IHRvIGRvIHRoaXMgb25seSBpZiBkaXJ0eQotICAgICAgICAgICAgICAgIC8vIHJlZ2lvbnMgd2VyZSBpbml0aWFsbHkgcmVxdWVzdGVkIGFzIHBhcnQgb2YgdGhlIGRldmljZQotICAgICAgICAgICAgICAgIC8vIGNvbmZpZ3VyYXRpb24gKHNlZSBSRU5ERVJfRElSVFlfUkVHSU9OUykKLSAgICAgICAgICAgICAgICBtRGlydHlSZWdpb25zRW5hYmxlZCA9IGlzQmFja0J1ZmZlclByZXNlcnZlZCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYWJzdHJhY3Qgdm9pZCBpbml0Q2FjaGVzKCk7Ci0gICAgICAgIGFic3RyYWN0IHZvaWQgaW5pdEF0bGFzKCk7Ci0KLSAgICAgICAgRUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTDEwIGVnbCwgRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBFR0xDb25maWcgZWdsQ29uZmlnKSB7Ci0gICAgICAgICAgICBpbnRbXSBhdHRyaWJzID0geyBFR0wxNC5FR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwgbUdsVmVyc2lvbiwgRUdMX05PTkUgfTsKLQotICAgICAgICAgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gZWdsLmVnbENyZWF0ZUNvbnRleHQoZWdsRGlzcGxheSwgZWdsQ29uZmlnLCBFR0xfTk9fQ09OVEVYVCwKLSAgICAgICAgICAgICAgICAgICAgbUdsVmVyc2lvbiAhPSAwID8gYXR0cmlicyA6IG51bGwpOwotICAgICAgICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCB8fCBjb250ZXh0ID09IEVHTF9OT19DT05URVhUKSB7Ci0gICAgICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gQ29uc3RhbnRDb25kaXRpb25zCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGFuIEVHTCBjb250ZXh0LiBlZ2xDcmVhdGVDb250ZXh0IGZhaWxlZCB3aXRoIGVycm9yOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoc0VnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgZGVzdHJveShib29sZWFuIGZ1bGwpIHsKLSAgICAgICAgICAgIGlmIChmdWxsICYmIG1DYW52YXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1DYW52YXMgPSBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWlzRW5hYmxlZCgpIHx8IG1EZXN0cm95ZWQpIHsKLSAgICAgICAgICAgICAgICBzZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlc3Ryb3lTdXJmYWNlKCk7Ci0gICAgICAgICAgICBzZXRFbmFibGVkKGZhbHNlKTsKLQotICAgICAgICAgICAgbURlc3Ryb3llZCA9IHRydWU7Ci0gICAgICAgICAgICBtR2wgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkZXN0cm95U3VyZmFjZSgpIHsKLSAgICAgICAgICAgIGlmIChtRWdsU3VyZmFjZSAhPSBudWxsICYmIG1FZ2xTdXJmYWNlICE9IEVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1FZ2xTdXJmYWNlLmVxdWFscyhzRWdsLmVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc0VnbC5lZ2xNYWtlQ3VycmVudChzRWdsRGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc0VnbC5lZ2xEZXN0cm95U3VyZmFjZShzRWdsRGlzcGxheSwgbUVnbFN1cmZhY2UpOwotICAgICAgICAgICAgICAgIG1FZ2xTdXJmYWNlID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICB2b2lkIGludmFsaWRhdGUoU3VyZmFjZSBzdXJmYWNlKSB7Ci0gICAgICAgICAgICAvLyBDYW5jZWxzIGFueSBleGlzdGluZyBidWZmZXIgdG8gZW5zdXJlIHdlJ2xsIGdldCBhIGJ1ZmZlcgotICAgICAgICAgICAgLy8gb2YgdGhlIHJpZ2h0IHNpemUgYmVmb3JlIHdlIGNhbGwgZWdsU3dhcEJ1ZmZlcnMKLSAgICAgICAgICAgIHNFZ2wuZWdsTWFrZUN1cnJlbnQoc0VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwotCi0gICAgICAgICAgICBpZiAobUVnbFN1cmZhY2UgIT0gbnVsbCAmJiBtRWdsU3VyZmFjZSAhPSBFR0xfTk9fU1VSRkFDRSkgewotICAgICAgICAgICAgICAgIHNFZ2wuZWdsRGVzdHJveVN1cmZhY2Uoc0VnbERpc3BsYXksIG1FZ2xTdXJmYWNlKTsKLSAgICAgICAgICAgICAgICBtRWdsU3VyZmFjZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzdXJmYWNlLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIGlmICghY3JlYXRlU3VyZmFjZShzdXJmYWNlKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbVVwZGF0ZURpcnR5UmVnaW9ucyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAobUNhbnZhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZSBzdXJmYWNlKSB7Ci0gICAgICAgICAgICBtRWdsU3VyZmFjZSA9IHNFZ2wuZWdsQ3JlYXRlV2luZG93U3VyZmFjZShzRWdsRGlzcGxheSwgc0VnbENvbmZpZywgc3VyZmFjZSwgbnVsbCk7Ci0KLSAgICAgICAgICAgIGlmIChtRWdsU3VyZmFjZSA9PSBudWxsIHx8IG1FZ2xTdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICAgICAgICAgICAgaW50IGVycm9yID0gc0VnbC5lZ2xHZXRFcnJvcigpOwotICAgICAgICAgICAgICAgIGlmIChlcnJvciA9PSBFR0xfQkFEX05BVElWRV9XSU5ET1cpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmUoTE9HX1RBRywgImNyZWF0ZVdpbmRvd1N1cmZhY2UgcmV0dXJuZWQgRUdMX0JBRF9OQVRJVkVfV0lORE9XLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjcmVhdGVXaW5kb3dTdXJmYWNlIGZhaWxlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoZXJyb3IpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzRWdsLmVnbE1ha2VDdXJyZW50KHNFZ2xEaXNwbGF5LCBtRWdsU3VyZmFjZSwgbUVnbFN1cmZhY2UsIG1FZ2xDb250ZXh0KSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImVnbE1ha2VDdXJyZW50IGZhaWxlZCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoc0VnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVuYWJsZURpcnR5UmVnaW9ucygpOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBib29sZWFuIHZhbGlkYXRlKCkgewotICAgICAgICAgICAgcmV0dXJuIGNoZWNrUmVuZGVyQ29udGV4dCgpICE9IFNVUkZBQ0VfU1RBVEVfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBzZXR1cChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgICAgIGlmICh2YWxpZGF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbUNhbnZhcy5zZXRWaWV3cG9ydCh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBtV2lkdGggPSB3aWR0aDsKLSAgICAgICAgICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIGludCBnZXRXaWR0aCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtV2lkdGg7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgaW50IGdldEhlaWdodCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtSGVpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIEhhcmR3YXJlQ2FudmFzIGdldENhbnZhcygpIHsKLSAgICAgICAgICAgIHJldHVybiBtQ2FudmFzOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgbU5hbWUgPSBuYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbGVhbiBjYW5EcmF3KCkgewotICAgICAgICAgICAgcmV0dXJuIG1HbCAhPSBudWxsICYmIG1DYW52YXMgIT0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBvblByZURyYXcoUmVjdCBkaXJ0eSkgewotICAgICAgICAgICAgcmV0dXJuIERpc3BsYXlMaXN0LlNUQVRVU19ET05FOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBvblBvc3REcmF3KCkgewotICAgICAgICB9Ci0KLSAgICAgICAgY2xhc3MgRnVuY3RvcnNSdW5uYWJsZSBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLSAgICAgICAgICAgIFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvOwotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBIYXJkd2FyZVJlbmRlcmVyIHJlbmRlcmVyID0gYXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlcjsKLSAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXIgPT0gbnVsbCB8fCAhcmVuZGVyZXIuaXNFbmFibGVkKCkgfHwgcmVuZGVyZXIgIT0gR2xSZW5kZXJlci50aGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2hlY2tSZW5kZXJDb250ZXh0KCkgIT0gU1VSRkFDRV9TVEFURV9FUlJPUikgewotICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzID0gbUNhbnZhcy5pbnZva2VGdW5jdG9ycyhtUmVkcmF3Q2xpcCk7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUZ1bmN0b3JTdGF0dXMoYXR0YWNoSW5mbywgc3RhdHVzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBkcmF3KFZpZXcgdmlldywgVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIEhhcmR3YXJlRHJhd0NhbGxiYWNrcyBjYWxsYmFja3MsCi0gICAgICAgICAgICAgICAgUmVjdCBkaXJ0eSkgewotICAgICAgICAgICAgaWYgKGNhbkRyYXcoKSkgewotICAgICAgICAgICAgICAgIGlmICghaGFzRGlydHlSZWdpb25zKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGlydHkgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhdHRhY2hJbmZvLm1JZ25vcmVEaXJ0eVN0YXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBhdHRhY2hJbmZvLm1EcmF3aW5nVGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOwotCi0gICAgICAgICAgICAgICAgdmlldy5tUHJpdmF0ZUZsYWdzIHw9IFZpZXcuUEZMQUdfRFJBV047Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgYWxyZWFkeSBvbiB0aGUgY29ycmVjdCB0aHJlYWQKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3VyZmFjZVN0YXRlID0gY2hlY2tSZW5kZXJDb250ZXh0VW5zYWZlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN1cmZhY2VTdGF0ZSAhPSBTVVJGQUNFX1NUQVRFX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIEhhcmR3YXJlQ2FudmFzIGNhbnZhcyA9IG1DYW52YXM7Ci0gICAgICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhcmR3YXJlQ2FudmFzID0gY2FudmFzOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlTG9jay5sb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IGJlZ2luRnJhbWUoY2FudmFzLCBkaXJ0eSwgc3VyZmFjZVN0YXRlKTsKLQotICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCA9IGJ1aWxkRGlzcGxheUxpc3QodmlldywgY2FudmFzKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBidWlsZERpc3BsYXlMaXN0KCkgY2FsbHMgaW50byB1c2VyIGNvZGUgd2hpY2ggY2FuIGNhdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuIGVnbE1ha2VDdXJyZW50IHRvIGhhcHBlbiB3aXRoIGEgZGlmZmVyZW50IHN1cmZhY2UvY29udGV4dC4KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCB0aGVyZWZvcmUgY2hlY2sgYWdhaW4gaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrUmVuZGVyQ29udGV4dFVuc2FmZSgpID09IFNVUkZBQ0VfU1RBVEVfRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGludCBzYXZlQ291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzID0gRGlzcGxheUxpc3QuU1RBVFVTX0RPTkU7Ci0KLSAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGFydCA9IGdldFN5c3RlbVRpbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHByZXBhcmVGcmFtZShkaXJ0eSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVDb3VudCA9IGNhbnZhcy5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3Mub25IYXJkd2FyZVByZURyYXcoY2FudmFzKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlMaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgfD0gZHJhd0Rpc3BsYXlMaXN0KGF0dGFjaEluZm8sIGNhbnZhcywgZGlzcGxheUxpc3QsIHN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZG4ndCByZWFjaCBoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5kcmF3KGNhbnZhcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIGRyYXdpbmc6IiwgZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3Mub25IYXJkd2FyZVBvc3REcmF3KGNhbnZhcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMucmVzdG9yZVRvQ291bnQoc2F2ZUNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcubVJlY3JlYXRlRGlzcGxheUxpc3QgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbURyYXdEZWx0YSA9IGdldFN5c3RlbVRpbWUoKSAtIHN0YXJ0OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobURyYXdEZWx0YSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRnJhbWVDb3VudCsrOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdPdmVyZHJhdyhhdHRhY2hJbmZvLCBkaXJ0eSwgY2FudmFzLCBkaXNwbGF5TGlzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdEaXJ0eVJlZ2lvbnMoZGlydHksIGNhbnZhcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1Byb2ZpbGVEYXRhKGF0dGFjaEluZm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgb25Qb3N0RHJhdygpOwotCi0gICAgICAgICAgICAgICAgICAgIHN3YXBCdWZmZXJzKHN0YXR1cyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVMb2NrLnVubG9jaygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tSWdub3JlRGlydHlTdGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFic3RyYWN0IHZvaWQgY291bnRPdmVyZHJhdyhIYXJkd2FyZUNhbnZhcyBjYW52YXMpOwotICAgICAgICBhYnN0cmFjdCBmbG9hdCBnZXRPdmVyZHJhdyhIYXJkd2FyZUNhbnZhcyBjYW52YXMpOwotCi0gICAgICAgIHByaXZhdGUgdm9pZCBkZWJ1Z092ZXJkcmF3KFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvLCBSZWN0IGRpcnR5LAotICAgICAgICAgICAgICAgIEhhcmR3YXJlQ2FudmFzIGNhbnZhcywgRGlzcGxheUxpc3QgZGlzcGxheUxpc3QpIHsKLQotICAgICAgICAgICAgaWYgKG1EZWJ1Z092ZXJkcmF3ID09IE9WRVJEUkFXX1RZUEVfQ09VTlQpIHsKLSAgICAgICAgICAgICAgICBpZiAobURlYnVnT3ZlcmRyYXdMYXllciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3TGF5ZXIgPSBjcmVhdGVIYXJkd2FyZUxheWVyKG1XaWR0aCwgbUhlaWdodCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtRGVidWdPdmVyZHJhd0xheWVyLmdldFdpZHRoKCkgIT0gbVdpZHRoIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyLmdldEhlaWdodCgpICE9IG1IZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdMYXllci5yZXNpemUobVdpZHRoLCBtSGVpZ2h0KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1EZWJ1Z092ZXJkcmF3TGF5ZXIuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBIYXJkd2FyZUNhbnZhcyBsYXllckNhbnZhcyA9IG1EZWJ1Z092ZXJkcmF3TGF5ZXIuc3RhcnQoY2FudmFzLCBkaXJ0eSk7Ci0gICAgICAgICAgICAgICAgY291bnRPdmVyZHJhdyhsYXllckNhbnZhcyk7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHJlc3RvcmVDb3VudCA9IGxheWVyQ2FudmFzLnNhdmUoKTsKLSAgICAgICAgICAgICAgICBsYXllckNhbnZhcy5kcmF3RGlzcGxheUxpc3QoZGlzcGxheUxpc3QsIG51bGwsIERpc3BsYXlMaXN0LkZMQUdfQ0xJUF9DSElMRFJFTik7Ci0gICAgICAgICAgICAgICAgbGF5ZXJDYW52YXMucmVzdG9yZVRvQ291bnQocmVzdG9yZUNvdW50KTsKLSAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyLmVuZChjYW52YXMpOwotCi0gICAgICAgICAgICAgICAgZmxvYXQgb3ZlcmRyYXcgPSBnZXRPdmVyZHJhdyhsYXllckNhbnZhcyk7Ci0gICAgICAgICAgICAgICAgRGlzcGxheU1ldHJpY3MgbWV0cmljcyA9IGF0dGFjaEluZm8ubVJvb3RWaWV3LmdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCk7Ci0KLSAgICAgICAgICAgICAgICBkcmF3T3ZlcmRyYXdDb3VudGVyKGNhbnZhcywgb3ZlcmRyYXcsIG1ldHJpY3MuZGVuc2l0eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZHJhd092ZXJkcmF3Q291bnRlcihIYXJkd2FyZUNhbnZhcyBjYW52YXMsIGZsb2F0IG92ZXJkcmF3LCBmbG9hdCBkZW5zaXR5KSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgdGV4dCA9IFN0cmluZy5mb3JtYXQoIiUuMmZ4Iiwgb3ZlcmRyYXcpOwotICAgICAgICAgICAgZmluYWwgUGFpbnQgcGFpbnQgPSBzZXR1cFBhaW50KGRlbnNpdHkpOwotICAgICAgICAgICAgLy8gSFNCdG9Db2xvciB3aWxsIGNsYW1wIHRoZSB2YWx1ZXMgaW4gdGhlIDAuLjEgcmFuZ2UKLSAgICAgICAgICAgIHBhaW50LnNldENvbG9yKENvbG9yLkhTQnRvQ29sb3IoMC4yOGYgLSAwLjI4ZiAqIG92ZXJkcmF3IC8gMy41ZiwgMC44ZiwgMS4wZikpOwotCi0gICAgICAgICAgICBjYW52YXMuZHJhd1RleHQodGV4dCwgZGVuc2l0eSAqIDQuMGYsIG1IZWlnaHQgLSBwYWludC5nZXRGb250TWV0cmljcygpLmJvdHRvbSwgcGFpbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBQYWludCBzZXR1cFBhaW50KGZsb2F0IGRlbnNpdHkpIHsKLSAgICAgICAgICAgIGlmIChtRGVidWdPdmVyZHJhd1BhaW50ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd1BhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdQYWludC5zZXRTaGFkb3dMYXllcihkZW5zaXR5ICogMy4wZiwgMC4wZiwgMC4wZiwgMHhmZjAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdQYWludC5zZXRUZXh0U2l6ZShkZW5zaXR5ICogMjAuMGYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1EZWJ1Z092ZXJkcmF3UGFpbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIERpc3BsYXlMaXN0IGJ1aWxkRGlzcGxheUxpc3QoVmlldyB2aWV3LCBIYXJkd2FyZUNhbnZhcyBjYW52YXMpIHsKLSAgICAgICAgICAgIGlmIChtRHJhd0RlbHRhIDw9IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmlldy5tRGlzcGxheUxpc3Q7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZpZXcubVJlY3JlYXRlRGlzcGxheUxpc3QgPSAodmlldy5tUHJpdmF0ZUZsYWdzICYgVmlldy5QRkxBR19JTlZBTElEQVRFRCkKLSAgICAgICAgICAgICAgICAgICAgPT0gVmlldy5QRkxBR19JTlZBTElEQVRFRDsKLSAgICAgICAgICAgIHZpZXcubVByaXZhdGVGbGFncyAmPSB+Vmlldy5QRkxBR19JTlZBTElEQVRFRDsKLQotICAgICAgICAgICAgbG9uZyBidWlsZERpc3BsYXlMaXN0U3RhcnRUaW1lID0gc3RhcnRCdWlsZERpc3BsYXlMaXN0UHJvZmlsaW5nKCk7Ci0gICAgICAgICAgICBjYW52YXMuY2xlYXJMYXllclVwZGF0ZXMoKTsKLQotICAgICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfVklFVywgImdldERpc3BsYXlMaXN0Iik7Ci0gICAgICAgICAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCA9IHZpZXcuZ2V0RGlzcGxheUxpc3QoKTsKLSAgICAgICAgICAgIFRyYWNlLnRyYWNlRW5kKFRyYWNlLlRSQUNFX1RBR19WSUVXKTsKLQotICAgICAgICAgICAgZW5kQnVpbGREaXNwbGF5TGlzdFByb2ZpbGluZyhidWlsZERpc3BsYXlMaXN0U3RhcnRUaW1lKTsKLQotICAgICAgICAgICAgcmV0dXJuIGRpc3BsYXlMaXN0OwotICAgICAgICB9Ci0KLSAgICAgICAgYWJzdHJhY3Qgdm9pZCBkcmF3UHJvZmlsZURhdGEoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8pOwotCi0gICAgICAgIHByaXZhdGUgUmVjdCBiZWdpbkZyYW1lKEhhcmR3YXJlQ2FudmFzIGNhbnZhcywgUmVjdCBkaXJ0eSwgaW50IHN1cmZhY2VTdGF0ZSkgewotICAgICAgICAgICAgLy8gV2UgaGFkIHRvIGNoYW5nZSB0aGUgY3VycmVudCBzdXJmYWNlIGFuZC9vciBjb250ZXh0LCByZWRyYXcgZXZlcnl0aGluZwotICAgICAgICAgICAgaWYgKHN1cmZhY2VTdGF0ZSA9PSBTVVJGQUNFX1NUQVRFX1VQREFURUQpIHsKLSAgICAgICAgICAgICAgICBkaXJ0eSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgYmVnaW5GcmFtZShudWxsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW50W10gc2l6ZSA9IG1TdXJmYWNlU2l6ZTsKLSAgICAgICAgICAgICAgICBiZWdpbkZyYW1lKHNpemUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNpemVbMV0gIT0gbUhlaWdodCB8fCBzaXplWzBdICE9IG1XaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBtV2lkdGggPSBzaXplWzBdOwotICAgICAgICAgICAgICAgICAgICBtSGVpZ2h0ID0gc2l6ZVsxXTsKLQotICAgICAgICAgICAgICAgICAgICBjYW52YXMuc2V0Vmlld3BvcnQobVdpZHRoLCBtSGVpZ2h0KTsKLQotICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobURlYnVnRGF0YVByb3ZpZGVyICE9IG51bGwpIGRpcnR5ID0gbnVsbDsKLQotICAgICAgICAgICAgcmV0dXJuIGRpcnR5OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBsb25nIHN0YXJ0QnVpbGREaXNwbGF5TGlzdFByb2ZpbGluZygpIHsKLSAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBtUHJvZmlsZUN1cnJlbnRGcmFtZSArPSBQUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQ7Ci0gICAgICAgICAgICAgICAgaWYgKG1Qcm9maWxlQ3VycmVudEZyYW1lID49IG1Qcm9maWxlRGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVDdXJyZW50RnJhbWUgPSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGVuZEJ1aWxkRGlzcGxheUxpc3RQcm9maWxpbmcobG9uZyBnZXREaXNwbGF5TGlzdFN0YXJ0VGltZSkgewotICAgICAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgewotICAgICAgICAgICAgICAgIGxvbmcgbm93ID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSAobm93IC0gZ2V0RGlzcGxheUxpc3RTdGFydFRpbWUpICogMC4wMDAwMDFmOwotICAgICAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIFBvaW50bGVzc0FyaXRobWV0aWNFeHByZXNzaW9uCi0gICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhW21Qcm9maWxlQ3VycmVudEZyYW1lXSA9IHRvdGFsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBpbnQgcHJlcGFyZUZyYW1lKFJlY3QgZGlydHkpIHsKLSAgICAgICAgICAgIGludCBzdGF0dXM7Ci0gICAgICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRyYWNlLlRSQUNFX1RBR19WSUVXLCAicHJlcGFyZUZyYW1lIik7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHN0YXR1cyA9IG9uUHJlRHJhdyhkaXJ0eSk7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIFRyYWNlLnRyYWNlRW5kKFRyYWNlLlRSQUNFX1RBR19WSUVXKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGludCBkcmF3RGlzcGxheUxpc3QoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIEhhcmR3YXJlQ2FudmFzIGNhbnZhcywKLSAgICAgICAgICAgICAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgaW50IHN0YXR1cykgewotCi0gICAgICAgICAgICBsb25nIGRyYXdEaXNwbGF5TGlzdFN0YXJ0VGltZSA9IDA7Ci0gICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgZHJhd0Rpc3BsYXlMaXN0U3RhcnRUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVHJhY2UuVFJBQ0VfVEFHX1ZJRVcsICJkcmF3RGlzcGxheUxpc3QiKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzIHw9IGNhbnZhcy5kcmF3RGlzcGxheUxpc3QoZGlzcGxheUxpc3QsIG1SZWRyYXdDbGlwLAotICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheUxpc3QuRkxBR19DTElQX0NISUxEUkVOKTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1ZJRVcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IChub3cgLSBkcmF3RGlzcGxheUxpc3RTdGFydFRpbWUpICogMC4wMDAwMDFmOwotICAgICAgICAgICAgICAgIG1Qcm9maWxlRGF0YVttUHJvZmlsZUN1cnJlbnRGcmFtZSArIDFdID0gdG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhhbmRsZUZ1bmN0b3JTdGF0dXMoYXR0YWNoSW5mbywgc3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgc3dhcEJ1ZmZlcnMoaW50IHN0YXR1cykgewotICAgICAgICAgICAgaWYgKChzdGF0dXMgJiBEaXNwbGF5TGlzdC5TVEFUVVNfRFJFVykgPT0gRGlzcGxheUxpc3QuU1RBVFVTX0RSRVcpIHsKLSAgICAgICAgICAgICAgICBsb25nIGVnbFN3YXBCdWZmZXJzU3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVnbFN3YXBCdWZmZXJzU3RhcnRUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc0VnbC5lZ2xTd2FwQnVmZmVycyhzRWdsRGlzcGxheSwgbUVnbFN1cmZhY2UpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgewotICAgICAgICAgICAgICAgICAgICBsb25nIG5vdyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IChub3cgLSBlZ2xTd2FwQnVmZmVyc1N0YXJ0VGltZSkgKiAwLjAwMDAwMWY7Ci0gICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlRGF0YVttUHJvZmlsZUN1cnJlbnRGcmFtZSArIDJdID0gdG90YWw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2hlY2tFZ2xFcnJvcnMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBkZWJ1Z0RpcnR5UmVnaW9ucyhSZWN0IGRpcnR5LCBIYXJkd2FyZUNhbnZhcyBjYW52YXMpIHsKLSAgICAgICAgICAgIGlmIChtRGVidWdEaXJ0eVJlZ2lvbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAobURlYnVnUGFpbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtRGVidWdQYWludCA9IG5ldyBQYWludCgpOwotICAgICAgICAgICAgICAgICAgICBtRGVidWdQYWludC5zZXRDb2xvcigweDdmZmYwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZGlydHkgIT0gbnVsbCAmJiAobUZyYW1lQ291bnQgJiAxKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3UmVjdChkaXJ0eSwgbURlYnVnUGFpbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVGdW5jdG9yU3RhdHVzKFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvLCBpbnQgc3RhdHVzKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgZHJhdyBmbGFnIGlzIHNldCwgZnVuY3RvcnMgd2lsbCBiZSBpbnZva2VkIHdoaWxlIGV4ZWN1dGluZwotICAgICAgICAgICAgLy8gdGhlIHRyZWUgb2YgZGlzcGxheSBsaXN0cwotICAgICAgICAgICAgaWYgKChzdGF0dXMgJiBEaXNwbGF5TGlzdC5TVEFUVVNfRFJBVykgIT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChtUmVkcmF3Q2xpcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tVmlld1Jvb3RJbXBsLmludmFsaWRhdGUoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdHRhY2hJbmZvLm1WaWV3Um9vdEltcGwuaW52YWxpZGF0ZUNoaWxkSW5QYXJlbnQobnVsbCwgbVJlZHJhd0NsaXApOwotICAgICAgICAgICAgICAgICAgICBtUmVkcmF3Q2xpcC5zZXRFbXB0eSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKChzdGF0dXMgJiBEaXNwbGF5TGlzdC5TVEFUVVNfSU5WT0tFKSAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIuaGFzQ2FsbGJhY2tzKG1GdW5jdG9yc1J1bm5hYmxlKSkgewotICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKG1GdW5jdG9yc1J1bm5hYmxlKTsKLSAgICAgICAgICAgICAgICBtRnVuY3RvcnNSdW5uYWJsZS5hdHRhY2hJbmZvID0gYXR0YWNoSW5mbzsKLSAgICAgICAgICAgICAgICBhdHRhY2hJbmZvLm1IYW5kbGVyLnBvc3REZWxheWVkKG1GdW5jdG9yc1J1bm5hYmxlLCBGVU5DVE9SX1BST0NFU1NfREVMQVkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgZGV0YWNoRnVuY3RvcihpbnQgZnVuY3RvcikgewotICAgICAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1DYW52YXMuZGV0YWNoRnVuY3RvcihmdW5jdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBib29sZWFuIGF0dGFjaEZ1bmN0b3IoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIGludCBmdW5jdG9yKSB7Ci0gICAgICAgICAgICBpZiAobUNhbnZhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNhbnZhcy5hdHRhY2hGdW5jdG9yKGZ1bmN0b3IpOwotICAgICAgICAgICAgICAgIG1GdW5jdG9yc1J1bm5hYmxlLmF0dGFjaEluZm8gPSBhdHRhY2hJbmZvOwotICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKG1GdW5jdG9yc1J1bm5hYmxlKTsKLSAgICAgICAgICAgICAgICBhdHRhY2hJbmZvLm1IYW5kbGVyLnBvc3REZWxheWVkKG1GdW5jdG9yc1J1bm5hYmxlLCAgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRW5zdXJlcyB0aGUgY3VycmVudCBFR0wgY29udGV4dCBhbmQgc3VyZmFjZSBhcmUgdGhlIG9uZXMgd2UgZXhwZWN0LgotICAgICAgICAgKiBUaGlzIG1ldGhvZCB0aHJvd3MgYW4gSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIGludm9rZWQgZnJvbSBhIHRocmVhZAotICAgICAgICAgKiB0aGF0IGRpZCBub3QgaW5pdGlhbGl6ZSBFR0wuCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4ge0BsaW5rICNTVVJGQUNFX1NUQVRFX0VSUk9SfSBpZiB0aGUgY29ycmVjdCBFR0wgY29udGV4dCBjYW5ub3QgYmUgbWFkZSBjdXJyZW50LAotICAgICAgICAgKiAgICAgICAgIHtAbGluayAjU1VSRkFDRV9TVEFURV9VUERBVEVEfSBpZiB0aGUgRUdMIGNvbnRleHQgd2FzIGNoYW5nZWQgb3IKLSAgICAgICAgICogICAgICAgICB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfU1VDQ0VTU30gaWYgdGhlIEVHTCBjb250ZXh0IHdhcyB0aGUgY29ycmVjdCBvbmUKLSAgICAgICAgICoKLSAgICAgICAgICogQHNlZSAjY2hlY2tSZW5kZXJDb250ZXh0VW5zYWZlKCkKLSAgICAgICAgICovCi0gICAgICAgIGludCBjaGVja1JlbmRlckNvbnRleHQoKSB7Ci0gICAgICAgICAgICBpZiAobUVnbFRocmVhZCAhPSBUaHJlYWQuY3VycmVudFRocmVhZCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBhICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgInNpbmdsZSBVSSB0aHJlYWQuXG5PcmlnaW5hbCB0aHJlYWQ6ICIgKyBtRWdsVGhyZWFkICsgIlxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ3VycmVudCB0aHJlYWQ6ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGNoZWNrUmVuZGVyQ29udGV4dFVuc2FmZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEVuc3VyZXMgdGhlIGN1cnJlbnQgRUdMIGNvbnRleHQgYW5kIHN1cmZhY2UgYXJlIHRoZSBvbmVzIHdlIGV4cGVjdC4KLSAgICAgICAgICogVGhpcyBtZXRob2QgZG9lcyBub3QgY2hlY2sgdGhlIGN1cnJlbnQgdGhyZWFkLgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIHtAbGluayAjU1VSRkFDRV9TVEFURV9FUlJPUn0gaWYgdGhlIGNvcnJlY3QgRUdMIGNvbnRleHQgY2Fubm90IGJlIG1hZGUgY3VycmVudCwKLSAgICAgICAgICogICAgICAgICB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfVVBEQVRFRH0gaWYgdGhlIEVHTCBjb250ZXh0IHdhcyBjaGFuZ2VkIG9yCi0gICAgICAgICAqICAgICAgICAge0BsaW5rICNTVVJGQUNFX1NUQVRFX1NVQ0NFU1N9IGlmIHRoZSBFR0wgY29udGV4dCB3YXMgdGhlIGNvcnJlY3Qgb25lCi0gICAgICAgICAqCi0gICAgICAgICAqIEBzZWUgI2NoZWNrUmVuZGVyQ29udGV4dCgpCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIGludCBjaGVja1JlbmRlckNvbnRleHRVbnNhZmUoKSB7Ci0gICAgICAgICAgICBpZiAoIW1FZ2xTdXJmYWNlLmVxdWFscyhzRWdsLmVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgIW1FZ2xDb250ZXh0LmVxdWFscyhzRWdsLmVnbEdldEN1cnJlbnRDb250ZXh0KCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzRWdsLmVnbE1ha2VDdXJyZW50KHNFZ2xEaXNwbGF5LCBtRWdsU3VyZmFjZSwgbUVnbFN1cmZhY2UsIG1FZ2xDb250ZXh0KSkgewotICAgICAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiZWdsTWFrZUN1cnJlbnQgZmFpbGVkICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoc0VnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrKHRydWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1VSRkFDRV9TVEFURV9FUlJPUjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAobVVwZGF0ZURpcnR5UmVnaW9ucykgewotICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlRGlydHlSZWdpb25zKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVXBkYXRlRGlydHlSZWdpb25zID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNVUkZBQ0VfU1RBVEVfVVBEQVRFRDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gU1VSRkFDRV9TVEFURV9TVUNDRVNTOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGRwVG9QeChpbnQgZHAsIGZsb2F0IGRlbnNpdHkpIHsKLSAgICAgICAgICAgIHJldHVybiAoaW50KSAoZHAgKiBkZW5zaXR5ICsgMC41Zik7Ci0gICAgICAgIH0KLQotICAgICAgICBjbGFzcyBEcmF3UGVyZm9ybWFuY2VEYXRhUHJvdmlkZXIgZXh0ZW5kcyBHcmFwaERhdGFQcm92aWRlciB7Ci0gICAgICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtR3JhcGhUeXBlOwotCi0gICAgICAgICAgICBwcml2YXRlIGludCBtVmVydGljYWxVbml0OwotICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbUhvcml6b250YWxVbml0OwotICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbUhvcml6b250YWxNYXJnaW47Ci0gICAgICAgICAgICBwcml2YXRlIGludCBtVGhyZXNob2xkU3Ryb2tlOwotCi0gICAgICAgICAgICBEcmF3UGVyZm9ybWFuY2VEYXRhUHJvdmlkZXIoaW50IGdyYXBoVHlwZSkgewotICAgICAgICAgICAgICAgIG1HcmFwaFR5cGUgPSBncmFwaFR5cGU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgdm9pZCBwcmVwYXJlKERpc3BsYXlNZXRyaWNzIG1ldHJpY3MpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBkZW5zaXR5ID0gbWV0cmljcy5kZW5zaXR5OwotCi0gICAgICAgICAgICAgICAgbVZlcnRpY2FsVW5pdCA9IGRwVG9QeChQUk9GSUxFX0RSQVdfRFBfUEVSX01TLCBkZW5zaXR5KTsKLSAgICAgICAgICAgICAgICBtSG9yaXpvbnRhbFVuaXQgPSBkcFRvUHgoUFJPRklMRV9EUkFXX1dJRFRILCBkZW5zaXR5KTsKLSAgICAgICAgICAgICAgICBtSG9yaXpvbnRhbE1hcmdpbiA9IGRwVG9QeChQUk9GSUxFX0RSQVdfTUFSR0lOLCBkZW5zaXR5KTsKLSAgICAgICAgICAgICAgICBtVGhyZXNob2xkU3Ryb2tlID0gZHBUb1B4KFBST0ZJTEVfRFJBV19USFJFU0hPTERfU1RST0tFX1dJRFRILCBkZW5zaXR5KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBpbnQgZ2V0R3JhcGhUeXBlKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtR3JhcGhUeXBlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIGludCBnZXRWZXJ0aWNhbFVuaXRTaXplKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtVmVydGljYWxVbml0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIGludCBnZXRIb3Jpem9udGFsVW5pdFNpemUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1Ib3Jpem9udGFsVW5pdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBpbnQgZ2V0SG9yaXpvbnRhVW5pdE1hcmdpbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbUhvcml6b250YWxNYXJnaW47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgZmxvYXRbXSBnZXREYXRhKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtUHJvZmlsZURhdGE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgZmxvYXQgZ2V0VGhyZXNob2xkKCkgewotICAgICAgICAgICAgICAgIHJldHVybiAxNjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBpbnQgZ2V0RnJhbWVDb3VudCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbVByb2ZpbGVEYXRhLmxlbmd0aCAvIFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBpbnQgZ2V0RWxlbWVudENvdW50KCkgewotICAgICAgICAgICAgICAgIHJldHVybiBQUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgaW50IGdldEN1cnJlbnRGcmFtZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbVByb2ZpbGVDdXJyZW50RnJhbWUgLyBQUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgdm9pZCBzZXR1cEdyYXBoUGFpbnQoUGFpbnQgcGFpbnQsIGludCBlbGVtZW50SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBwYWludC5zZXRDb2xvcihQUk9GSUxFX0RSQVdfQ09MT1JTW2VsZW1lbnRJbmRleF0pOwotICAgICAgICAgICAgICAgIGlmIChtR3JhcGhUeXBlID09IEdSQVBIX1RZUEVfTElORVMpIHBhaW50LnNldFN0cm9rZVdpZHRoKG1UaHJlc2hvbGRTdHJva2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHZvaWQgc2V0dXBUaHJlc2hvbGRQYWludChQYWludCBwYWludCkgewotICAgICAgICAgICAgICAgIHBhaW50LnNldENvbG9yKFBST0ZJTEVfRFJBV19USFJFU0hPTERfQ09MT1IpOwotICAgICAgICAgICAgICAgIHBhaW50LnNldFN0cm9rZVdpZHRoKG1UaHJlc2hvbGRTdHJva2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHZvaWQgc2V0dXBDdXJyZW50RnJhbWVQYWludChQYWludCBwYWludCkgewotICAgICAgICAgICAgICAgIHBhaW50LnNldENvbG9yKFBST0ZJTEVfRFJBV19DVVJSRU5UX0ZSQU1FX0NPTE9SKTsKLSAgICAgICAgICAgICAgICBpZiAobUdyYXBoVHlwZSA9PSBHUkFQSF9UWVBFX0xJTkVTKSBwYWludC5zZXRTdHJva2VXaWR0aChtVGhyZXNob2xkU3Ryb2tlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEhhcmR3YXJlIHJlbmRlcmVyIHVzaW5nIE9wZW5HTCBFUyAyLjAuCi0gICAgICovCi0gICAgc3RhdGljIGNsYXNzIEdsMjBSZW5kZXJlciBleHRlbmRzIEdsUmVuZGVyZXIgewotICAgICAgICBwcml2YXRlIEdMRVMyMENhbnZhcyBtR2xDYW52YXM7Ci0KLSAgICAgICAgcHJpdmF0ZSBEaXNwbGF5TWV0cmljcyBtRGlzcGxheU1ldHJpY3M7Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgRUdMU3VyZmFjZSBzUGJ1ZmZlcjsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0W10gc1BidWZmZXJMb2NrID0gbmV3IE9iamVjdFswXTsKLQotICAgICAgICBzdGF0aWMgY2xhc3MgR2wyMFJlbmRlcmVyRWdsQ29udGV4dCBleHRlbmRzIE1hbmFnZWRFR0xDb250ZXh0IHsKLSAgICAgICAgICAgIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOwotCi0gICAgICAgICAgICBwdWJsaWMgR2wyMFJlbmRlcmVyRWdsQ29udGV4dChFR0xDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblRlcm1pbmF0ZShmaW5hbCBFR0xDb250ZXh0IGVnbENvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gdGhpcyBvbiB0aGUgY29ycmVjdCB0aHJlYWQuCi0gICAgICAgICAgICAgICAgaWYgKG1IYW5kbGVyLmdldExvb3BlcigpICE9IExvb3Blci5teUxvb3BlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25UZXJtaW5hdGUoZWdsQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChzRWdsTG9jaykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc0VnbCA9PSBudWxsKSByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKEVHTEltcGwuZ2V0SW5pdENvdW50KHNFZ2xEaXNwbGF5KSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2VQYnVmZmVyU3VyZmFjZShlZ2xDb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMRVMyMENhbnZhcy50ZXJtaW5hdGVDYWNoZXMoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgc0VnbC5lZ2xEZXN0cm95Q29udGV4dChzRWdsRGlzcGxheSwgZWdsQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzRWdsQ29udGV4dFN0b3JhZ2Uuc2V0KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgc0VnbENvbnRleHRTdG9yYWdlLnJlbW92ZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBzRWdsLmVnbERlc3Ryb3lTdXJmYWNlKHNFZ2xEaXNwbGF5LCBzUGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzRWdsLmVnbE1ha2VDdXJyZW50KHNFZ2xEaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgc0VnbC5lZ2xSZWxlYXNlVGhyZWFkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzRWdsLmVnbFRlcm1pbmF0ZShzRWdsRGlzcGxheSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNFZ2wgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgc0VnbERpc3BsYXkgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgc0VnbENvbmZpZyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzUGJ1ZmZlciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBHbDIwUmVuZGVyZXIoYm9vbGVhbiB0cmFuc2x1Y2VudCkgewotICAgICAgICAgICAgc3VwZXIoMiwgdHJhbnNsdWNlbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIEhhcmR3YXJlQ2FudmFzIGNyZWF0ZUNhbnZhcygpIHsKLSAgICAgICAgICAgIHJldHVybiBtR2xDYW52YXMgPSBuZXcgR0xFUzIwQ2FudmFzKG1UcmFuc2x1Y2VudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgTWFuYWdlZEVHTENvbnRleHQgY3JlYXRlTWFuYWdlZENvbnRleHQoRUdMQ29udGV4dCBlZ2xDb250ZXh0KSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEdsMjBSZW5kZXJlci5HbDIwUmVuZGVyZXJFZ2xDb250ZXh0KG1FZ2xDb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBpbnRbXSBnZXRDb25maWcoYm9vbGVhbiBkaXJ0eVJlZ2lvbnMpIHsKLSAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uLENvbnN0YW50Q29uZGl0aW9ucwotICAgICAgICAgICAgZmluYWwgaW50IHN0ZW5jaWxTaXplID0gR0xFUzIwQ2FudmFzLmdldFN0ZW5jaWxTaXplKCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgc3dhcEJlaGF2aW9yID0gZGlydHlSZWdpb25zID8gRUdMMTQuRUdMX1NXQVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJVCA6IDA7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgaW50W10gewotICAgICAgICAgICAgICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0wxNC5FR0xfT1BFTkdMX0VTMl9CSVQsCi0gICAgICAgICAgICAgICAgICAgIEVHTF9SRURfU0laRSwgOCwKLSAgICAgICAgICAgICAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgICAgICAgICAgICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCi0gICAgICAgICAgICAgICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAotICAgICAgICAgICAgICAgICAgICBFR0xfREVQVEhfU0laRSwgMCwKLSAgICAgICAgICAgICAgICAgICAgRUdMX0NPTkZJR19DQVZFQVQsIEVHTF9OT05FLAotICAgICAgICAgICAgICAgICAgICBFR0xfU1RFTkNJTF9TSVpFLCBzdGVuY2lsU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX1dJTkRPV19CSVQgfCBzd2FwQmVoYXZpb3IsCi0gICAgICAgICAgICAgICAgICAgIEVHTF9OT05FCi0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgaW5pdENhY2hlcygpIHsKLSAgICAgICAgICAgIGlmIChHTEVTMjBDYW52YXMuaW5pdENhY2hlcygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2FjaGVzIHdlcmUgKHJlKWluaXRpYWxpemVkLCByZWJpbmQgYXRsYXMKLSAgICAgICAgICAgICAgICBpbml0QXRsYXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICB2b2lkIGluaXRBdGxhcygpIHsKLSAgICAgICAgICAgIElCaW5kZXIgYmluZGVyID0gU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZSgiYXNzZXRhdGxhcyIpOwotICAgICAgICAgICAgaWYgKGJpbmRlciA9PSBudWxsKSByZXR1cm47Ci0KLSAgICAgICAgICAgIElBc3NldEF0bGFzIGF0bGFzID0gSUFzc2V0QXRsYXMuU3R1Yi5hc0ludGVyZmFjZShiaW5kZXIpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBpZiAoYXRsYXMuaXNDb21wYXRpYmxlKGFuZHJvaWQub3MuUHJvY2Vzcy5teVBwaWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgR3JhcGhpY0J1ZmZlciBidWZmZXIgPSBhdGxhcy5nZXRCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBtYXAgPSBhdGxhcy5nZXRNYXAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMRVMyMENhbnZhcy5pbml0QXRsYXMoYnVmZmVyLCBtYXApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgSUFzc2V0QXRsYXMgaXMgbm90IHRoZSBzYW1lIGNsYXNzIGFzIHRoZSBJQmluZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgdXNpbmcgYSByZW1vdGUgc2VydmljZSBhbmQgd2UgY2FuIHNhZmVseQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVzdHJveSB0aGUgZ3JhcGhpYyBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdGxhcy5nZXRDbGFzcygpICE9IGJpbmRlci5nZXRDbGFzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmRlc3Ryb3koKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkNvdWxkIG5vdCBhY3F1aXJlIGF0bGFzIiwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgYm9vbGVhbiBjYW5EcmF3KCkgewotICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmNhbkRyYXcoKSAmJiBtR2xDYW52YXMgIT0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBpbnQgb25QcmVEcmF3KFJlY3QgZGlydHkpIHsKLSAgICAgICAgICAgIHJldHVybiBtR2xDYW52YXMub25QcmVEcmF3KGRpcnR5KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICB2b2lkIG9uUG9zdERyYXcoKSB7Ci0gICAgICAgICAgICBtR2xDYW52YXMub25Qb3N0RHJhdygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgZHJhd1Byb2ZpbGVEYXRhKFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvKSB7Ci0gICAgICAgICAgICBpZiAobURlYnVnRGF0YVByb3ZpZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBHcmFwaERhdGFQcm92aWRlciBwcm92aWRlciA9IG1EZWJ1Z0RhdGFQcm92aWRlcjsKLSAgICAgICAgICAgICAgICBpbml0UHJvZmlsZURyYXdEYXRhKGF0dGFjaEluZm8sIHByb3ZpZGVyKTsKLQotICAgICAgICAgICAgICAgIGZpbmFsIGludCBoZWlnaHQgPSBwcm92aWRlci5nZXRWZXJ0aWNhbFVuaXRTaXplKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IG1hcmdpbiA9IHByb3ZpZGVyLmdldEhvcml6b250YVVuaXRNYXJnaW4oKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgd2lkdGggPSBwcm92aWRlci5nZXRIb3Jpem9udGFsVW5pdFNpemUoKTsKLQotICAgICAgICAgICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICAgICAgICAgIGludCBjdXJyZW50ID0gMDsKLQotICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0W10gZGF0YSA9IHByb3ZpZGVyLmdldERhdGEoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZWxlbWVudENvdW50ID0gcHJvdmlkZXIuZ2V0RWxlbWVudENvdW50KCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGdyYXBoVHlwZSA9IHByb3ZpZGVyLmdldEdyYXBoVHlwZSgpOwotCi0gICAgICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBwcm92aWRlci5nZXRGcmFtZUNvdW50KCkgKiBlbGVtZW50Q291bnQ7Ci0gICAgICAgICAgICAgICAgaWYgKGdyYXBoVHlwZSA9PSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0xJTkVTKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsQ291bnQgLT0gZWxlbWVudENvdW50OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxDb3VudDsgaSArPSBlbGVtZW50Q291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbaV0gPCAwLjBmKSBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBjb3VudCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID09IHByb3ZpZGVyLmdldEN1cnJlbnRGcmFtZSgpICogZWxlbWVudENvdW50KSBjdXJyZW50ID0gaW5kZXg7Ci0KLSAgICAgICAgICAgICAgICAgICAgeCArPSBtYXJnaW47Ci0gICAgICAgICAgICAgICAgICAgIGludCB4MiA9IHggKyB3aWR0aDsKLQotICAgICAgICAgICAgICAgICAgICBpbnQgeTIgPSBtSGVpZ2h0OwotICAgICAgICAgICAgICAgICAgICBpbnQgeTEgPSAoaW50KSAoeTIgLSBkYXRhW2ldICogaGVpZ2h0KTsKLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdyYXBoVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0JBUlM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVsZW1lbnRDb3VudDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIE1pc21hdGNoZWRSZWFkQW5kV3JpdGVPZkFycmF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0W10gciA9IG1Qcm9maWxlU2hhcGVzW2pdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4XSA9IHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaW5kZXggKyAxXSA9IHkxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgMl0gPSB4MjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleCArIDNdID0geTI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSB5MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBlbGVtZW50Q291bnQgLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IChpbnQpICh5MiAtIGRhdGFbaSArIGogKyAxXSAqIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0xJTkVTOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbGVtZW50Q291bnQ7IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBNaXNtYXRjaGVkUmVhZEFuZFdyaXRlT2ZBcnJheQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdFtdIHIgPSBtUHJvZmlsZVNoYXBlc1tqXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleF0gPSAoeCArIHgyKSAqIDAuNWY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaW5kZXggKyAxXSA9IGluZGV4ID09IDAgPyB5MSA6IHJbaW5kZXggLSAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleCArIDJdID0gcltpbmRleF0gKyB3aWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleCArIDNdID0geTE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSB5MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBlbGVtZW50Q291bnQgLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IChpbnQpICh5MiAtIGRhdGFbaSArIGogKyAxXSAqIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgICAgICAgICB4ICs9IHdpZHRoOwotICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHggKz0gbWFyZ2luOwotCi0gICAgICAgICAgICAgICAgZHJhd0dyYXBoKGdyYXBoVHlwZSwgY291bnQpOwotICAgICAgICAgICAgICAgIGRyYXdDdXJyZW50RnJhbWUoZ3JhcGhUeXBlLCBjdXJyZW50KTsKLSAgICAgICAgICAgICAgICBkcmF3VGhyZXNob2xkKHgsIGhlaWdodCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZHJhd0dyYXBoKGludCBncmFwaFR5cGUsIGludCBjb3VudCkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUHJvZmlsZVNoYXBlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIG1EZWJ1Z0RhdGFQcm92aWRlci5zZXR1cEdyYXBoUGFpbnQobVByb2ZpbGVQYWludCwgaSk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChncmFwaFR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0JBUlM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtR2xDYW52YXMuZHJhd1JlY3RzKG1Qcm9maWxlU2hhcGVzW2ldLCBjb3VudCAqIDQsIG1Qcm9maWxlUGFpbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhEYXRhUHJvdmlkZXIuR1JBUEhfVFlQRV9MSU5FUzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1HbENhbnZhcy5kcmF3TGluZXMobVByb2ZpbGVTaGFwZXNbaV0sIDAsIGNvdW50ICogNCwgbVByb2ZpbGVQYWludCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZHJhd0N1cnJlbnRGcmFtZShpbnQgZ3JhcGhUeXBlLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgbURlYnVnRGF0YVByb3ZpZGVyLnNldHVwQ3VycmVudEZyYW1lUGFpbnQobVByb2ZpbGVQYWludCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChncmFwaFR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0JBUlM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtR2xDYW52YXMuZHJhd1JlY3QobVByb2ZpbGVTaGFwZXNbMl1baW5kZXhdLCBtUHJvZmlsZVNoYXBlc1syXVtpbmRleCArIDFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZVNoYXBlc1syXVtpbmRleCArIDJdLCBtUHJvZmlsZVNoYXBlc1swXVtpbmRleCArIDNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZVBhaW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfTElORVM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtR2xDYW52YXMuZHJhd0xpbmUobVByb2ZpbGVTaGFwZXNbMl1baW5kZXhdLCBtUHJvZmlsZVNoYXBlc1syXVtpbmRleCArIDFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZVNoYXBlc1syXVtpbmRleF0sIG1IZWlnaHQsIG1Qcm9maWxlUGFpbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGRyYXdUaHJlc2hvbGQoaW50IHgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgICAgIGZsb2F0IHRocmVzaG9sZCA9IG1EZWJ1Z0RhdGFQcm92aWRlci5nZXRUaHJlc2hvbGQoKTsKLSAgICAgICAgICAgIGlmICh0aHJlc2hvbGQgPiAwLjBmKSB7Ci0gICAgICAgICAgICAgICAgbURlYnVnRGF0YVByb3ZpZGVyLnNldHVwVGhyZXNob2xkUGFpbnQobVByb2ZpbGVQYWludCk7Ci0gICAgICAgICAgICAgICAgaW50IHkgPSAoaW50KSAobUhlaWdodCAtIHRocmVzaG9sZCAqIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgbUdsQ2FudmFzLmRyYXdMaW5lKDAuMGYsIHksIHgsIHksIG1Qcm9maWxlUGFpbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXRQcm9maWxlRHJhd0RhdGEoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIEdyYXBoRGF0YVByb3ZpZGVyIHByb3ZpZGVyKSB7Ci0gICAgICAgICAgICBpZiAobVByb2ZpbGVTaGFwZXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZpbmFsIGludCBlbGVtZW50Q291bnQgPSBwcm92aWRlci5nZXRFbGVtZW50Q291bnQoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZnJhbWVDb3VudCA9IHByb3ZpZGVyLmdldEZyYW1lQ291bnQoKTsKLQotICAgICAgICAgICAgICAgIG1Qcm9maWxlU2hhcGVzID0gbmV3IGZsb2F0W2VsZW1lbnRDb3VudF1bXTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlU2hhcGVzW2ldID0gbmV3IGZsb2F0W2ZyYW1lQ291bnQgKiA0XTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtUHJvZmlsZVBhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1Qcm9maWxlUGFpbnQucmVzZXQoKTsKLSAgICAgICAgICAgIGlmIChwcm92aWRlci5nZXRHcmFwaFR5cGUoKSA9PSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0xJTkVTKSB7Ci0gICAgICAgICAgICAgICAgbVByb2ZpbGVQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtRGlzcGxheU1ldHJpY3MgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1EaXNwbGF5TWV0cmljcyA9IG5ldyBEaXNwbGF5TWV0cmljcygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdHRhY2hJbmZvLm1EaXNwbGF5LmdldE1ldHJpY3MobURpc3BsYXlNZXRyaWNzKTsKLSAgICAgICAgICAgIHByb3ZpZGVyLnByZXBhcmUobURpc3BsYXlNZXRyaWNzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICB2b2lkIGRlc3Ryb3koYm9vbGVhbiBmdWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHN1cGVyLmRlc3Ryb3koZnVsbCk7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIGlmIChmdWxsICYmIG1HbENhbnZhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1HbENhbnZhcyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgcHVzaExheWVyVXBkYXRlKEhhcmR3YXJlTGF5ZXIgbGF5ZXIpIHsKLSAgICAgICAgICAgIG1HbENhbnZhcy5wdXNoTGF5ZXJVcGRhdGUobGF5ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgY2FuY2VsTGF5ZXJVcGRhdGUoSGFyZHdhcmVMYXllciBsYXllcikgewotICAgICAgICAgICAgbUdsQ2FudmFzLmNhbmNlbExheWVyVXBkYXRlKGxheWVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICB2b2lkIGZsdXNoTGF5ZXJVcGRhdGVzKCkgewotICAgICAgICAgICAgbUdsQ2FudmFzLmZsdXNoTGF5ZXJVcGRhdGVzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIERpc3BsYXlMaXN0IGNyZWF0ZURpc3BsYXlMaXN0KFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEdMRVMyMERpc3BsYXlMaXN0KG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIEhhcmR3YXJlTGF5ZXIgY3JlYXRlSGFyZHdhcmVMYXllcihib29sZWFuIGlzT3BhcXVlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEdMRVMyMFRleHR1cmVMYXllcihpc09wYXF1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEhhcmR3YXJlTGF5ZXIgY3JlYXRlSGFyZHdhcmVMYXllcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2xlYW4gaXNPcGFxdWUpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgR0xFUzIwUmVuZGVyTGF5ZXIod2lkdGgsIGhlaWdodCwgaXNPcGFxdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgY291bnRPdmVyZHJhdyhIYXJkd2FyZUNhbnZhcyBjYW52YXMpIHsKLSAgICAgICAgICAgICgoR0xFUzIwQ2FudmFzKSBjYW52YXMpLnNldENvdW50T3ZlcmRyYXdFbmFibGVkKHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIGZsb2F0IGdldE92ZXJkcmF3KEhhcmR3YXJlQ2FudmFzIGNhbnZhcykgewotICAgICAgICAgICAgcmV0dXJuICgoR0xFUzIwQ2FudmFzKSBjYW52YXMpLmdldE92ZXJkcmF3KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFN1cmZhY2VUZXh0dXJlIGNyZWF0ZVN1cmZhY2VUZXh0dXJlKEhhcmR3YXJlTGF5ZXIgbGF5ZXIpIHsKLSAgICAgICAgICAgIHJldHVybiAoKEdMRVMyMFRleHR1cmVMYXllcikgbGF5ZXIpLmdldFN1cmZhY2VUZXh0dXJlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBzZXRTdXJmYWNlVGV4dHVyZShIYXJkd2FyZUxheWVyIGxheWVyLCBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSkgewotICAgICAgICAgICAgKChHTEVTMjBUZXh0dXJlTGF5ZXIpIGxheWVyKS5zZXRTdXJmYWNlVGV4dHVyZShzdXJmYWNlVGV4dHVyZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgYm9vbGVhbiBzYWZlbHlSdW4oUnVubmFibGUgYWN0aW9uKSB7Ci0gICAgICAgICAgICBib29sZWFuIG5lZWRzQ29udGV4dCA9ICFpc0VuYWJsZWQoKSB8fCBjaGVja1JlbmRlckNvbnRleHQoKSA9PSBTVVJGQUNFX1NUQVRFX0VSUk9SOwotCi0gICAgICAgICAgICBpZiAobmVlZHNDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgR2wyMFJlbmRlcmVyRWdsQ29udGV4dCBtYW5hZ2VkQ29udGV4dCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoR2wyMFJlbmRlcmVyRWdsQ29udGV4dCkgc0VnbENvbnRleHRTdG9yYWdlLmdldCgpOwotICAgICAgICAgICAgICAgIGlmIChtYW5hZ2VkQ29udGV4dCA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdXNlUGJ1ZmZlclN1cmZhY2UobWFuYWdlZENvbnRleHQuZ2V0Q29udGV4dCgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBhY3Rpb24ucnVuKCk7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIGlmIChuZWVkc0NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgc0VnbC5lZ2xNYWtlQ3VycmVudChzRWdsRGlzcGxheSwgRUdMX05PX1NVUkZBQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgZGVzdHJveUxheWVycyhmaW5hbCBWaWV3IHZpZXcpIHsKLSAgICAgICAgICAgIGlmICh2aWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzYWZlbHlSdW4obmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXMuY2xlYXJMYXllclVwZGF0ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lIYXJkd2FyZUxheWVyKHZpZXcpOwotICAgICAgICAgICAgICAgICAgICAgICAgR0xFUzIwQ2FudmFzLmZsdXNoQ2FjaGVzKEdMRVMyMENhbnZhcy5GTFVTSF9DQUNIRVNfTEFZRVJTKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkZXN0cm95SGFyZHdhcmVMYXllcihWaWV3IHZpZXcpIHsKLSAgICAgICAgICAgIHZpZXcuZGVzdHJveUxheWVyKHRydWUpOwotCi0gICAgICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIFZpZXdHcm91cCkgewotICAgICAgICAgICAgICAgIFZpZXdHcm91cCBncm91cCA9IChWaWV3R3JvdXApIHZpZXc7Ci0KLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSBncm91cC5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lIYXJkd2FyZUxheWVyKGdyb3VwLmdldENoaWxkQXQoaSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICB2b2lkIGRlc3Ryb3lIYXJkd2FyZVJlc291cmNlcyhmaW5hbCBWaWV3IHZpZXcpIHsKLSAgICAgICAgICAgIGlmICh2aWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzYWZlbHlSdW4obmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXMuY2xlYXJMYXllclVwZGF0ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lSZXNvdXJjZXModmlldyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHTEVTMjBDYW52YXMuZmx1c2hDYWNoZXMoR0xFUzIwQ2FudmFzLkZMVVNIX0NBQ0hFU19MQVlFUlMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRlc3Ryb3lSZXNvdXJjZXMoVmlldyB2aWV3KSB7Ci0gICAgICAgICAgICB2aWV3LmRlc3Ryb3lIYXJkd2FyZVJlc291cmNlcygpOwotCi0gICAgICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIFZpZXdHcm91cCkgewotICAgICAgICAgICAgICAgIFZpZXdHcm91cCBncm91cCA9IChWaWV3R3JvdXApIHZpZXc7Ci0KLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSBncm91cC5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lSZXNvdXJjZXMoZ3JvdXAuZ2V0Q2hpbGRBdChpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIEhhcmR3YXJlUmVuZGVyZXIgY3JlYXRlKGJvb2xlYW4gdHJhbnNsdWNlbnQpIHsKLSAgICAgICAgICAgIGlmIChHTEVTMjBDYW52YXMuaXNBdmFpbGFibGUoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgR2wyMFJlbmRlcmVyKHRyYW5zbHVjZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgc3RhcnRUcmltTWVtb3J5KGludCBsZXZlbCkgewotICAgICAgICAgICAgaWYgKHNFZ2wgPT0gbnVsbCB8fCBzRWdsQ29uZmlnID09IG51bGwpIHJldHVybjsKLQotICAgICAgICAgICAgR2wyMFJlbmRlcmVyRWdsQ29udGV4dCBtYW5hZ2VkQ29udGV4dCA9Ci0gICAgICAgICAgICAgICAgICAgIChHbDIwUmVuZGVyZXJFZ2xDb250ZXh0KSBzRWdsQ29udGV4dFN0b3JhZ2UuZ2V0KCk7Ci0gICAgICAgICAgICAvLyBXZSBkbyBub3QgaGF2ZSBPcGVuR0wgb2JqZWN0cwotICAgICAgICAgICAgaWYgKG1hbmFnZWRDb250ZXh0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVzZVBidWZmZXJTdXJmYWNlKG1hbmFnZWRDb250ZXh0LmdldENvbnRleHQoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsZXZlbCA+PSBDb21wb25lbnRDYWxsYmFja3MyLlRSSU1fTUVNT1JZX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgR0xFUzIwQ2FudmFzLmZsdXNoQ2FjaGVzKEdMRVMyMENhbnZhcy5GTFVTSF9DQUNIRVNfRlVMTCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxldmVsID49IENvbXBvbmVudENhbGxiYWNrczIuVFJJTV9NRU1PUllfVUlfSElEREVOKSB7Ci0gICAgICAgICAgICAgICAgR0xFUzIwQ2FudmFzLmZsdXNoQ2FjaGVzKEdMRVMyMENhbnZhcy5GTFVTSF9DQUNIRVNfTU9ERVJBVEUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgZW5kVHJpbU1lbW9yeSgpIHsKLSAgICAgICAgICAgIGlmIChzRWdsICE9IG51bGwgJiYgc0VnbERpc3BsYXkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHNFZ2wuZWdsTWFrZUN1cnJlbnQoc0VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB1c2VQYnVmZmVyU3VyZmFjZShFR0xDb250ZXh0IGVnbENvbnRleHQpIHsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAoc1BidWZmZXJMb2NrKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IDF4MSBwYnVmZmVyIHNvIHdlIGhhdmUgYSBjb250ZXh0Ci0gICAgICAgICAgICAgICAgLy8gdG8gY2xlYXIgb3VyIE9wZW5HTCBvYmplY3RzCi0gICAgICAgICAgICAgICAgaWYgKHNQYnVmZmVyID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc1BidWZmZXIgPSBzRWdsLmVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKHNFZ2xEaXNwbGF5LCBzRWdsQ29uZmlnLCBuZXcgaW50W10gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9XSURUSCwgMSwgRUdMX0hFSUdIVCwgMSwgRUdMX05PTkUKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgc0VnbC5lZ2xNYWtlQ3VycmVudChzRWdsRGlzcGxheSwgc1BidWZmZXIsIHNQYnVmZmVyLCBlZ2xDb250ZXh0KTsKLSAgICAgICAgfQotICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSW5wdXREZXZpY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSW5wdXREZXZpY2UuamF2YQppbmRleCBlODI5MTE2Li4wYjEyY2JlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lucHV0RGV2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JbnB1dERldmljZS5qYXZhCkBAIC0xNyw2ICsxNyw3IEBACiBwYWNrYWdlIGFuZHJvaWQudmlldzsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuaW5wdXQuSW5wdXREZXZpY2VJZGVudGlmaWVyOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuaW5wdXQuSW5wdXRNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKQEAgLTQ5LDYgKzUwLDcgQEAKICAgICBwcml2YXRlIGZpbmFsIGludCBtVmVuZG9ySWQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVByb2R1Y3RJZDsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtRGVzY3JpcHRvcjsKKyAgICBwcml2YXRlIGZpbmFsIElucHV0RGV2aWNlSWRlbnRpZmllciBtSWRlbnRpZmllcjsKICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUlzRXh0ZXJuYWw7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVNvdXJjZXM7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUtleWJvYXJkVHlwZTsKQEAgLTYxLDcgKzYzLDcgQEAKIAogICAgIC8qKgogICAgICAqIEEgbWFzayBmb3IgaW5wdXQgc291cmNlIGNsYXNzZXMuCi0gICAgICogCisgICAgICoKICAgICAgKiBFYWNoIGRpc3RpbmN0IGlucHV0IHNvdXJjZSBjb25zdGFudCBoYXMgb25lIG9yIG1vcmUgaW5wdXQgc291cmNlIGNsYXNzIGJpdHMgc2V0IHRvCiAgICAgICogc3BlY2lmeSB0aGUgZGVzaXJlZCBpbnRlcnByZXRhdGlvbiBmb3IgaXRzIGlucHV0IGV2ZW50cy4KICAgICAgKi8KQEAgLTc3LDQ2ICs3OSw0NiBAQAogICAgIC8qKgogICAgICAqIFRoZSBpbnB1dCBzb3VyY2UgaGFzIGJ1dHRvbnMgb3Iga2V5cy4KICAgICAgKiBFeGFtcGxlczoge0BsaW5rICNTT1VSQ0VfS0VZQk9BUkR9LCB7QGxpbmsgI1NPVVJDRV9EUEFEfS4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEEge0BsaW5rIEtleUV2ZW50fSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYSBidXR0b24gb3Iga2V5IHByZXNzLgotICAgICAqIAorICAgICAqCiAgICAgICogVXNlIHtAbGluayAjZ2V0S2V5Q2hhcmFjdGVyTWFwfSB0byBxdWVyeSB0aGUgZGV2aWNlJ3MgYnV0dG9uIGFuZCBrZXkgbWFwcGluZ3MuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VUkNFX0NMQVNTX0JVVFRPTiA9IDB4MDAwMDAwMDE7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGUgaW5wdXQgc291cmNlIGlzIGEgcG9pbnRpbmcgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBhIGRpc3BsYXkuCiAgICAgICogRXhhbXBsZXM6IHtAbGluayAjU09VUkNFX1RPVUNIU0NSRUVOfSwge0BsaW5rICNTT1VSQ0VfTU9VU0V9LgotICAgICAqIAorICAgICAqCiAgICAgICogQSB7QGxpbmsgTW90aW9uRXZlbnR9IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhYnNvbHV0ZSBjb29yZGluYXRlcyBpbgogICAgICAqIGRpc3BsYXkgdW5pdHMgYWNjb3JkaW5nIHRvIHRoZSB7QGxpbmsgVmlld30gaGllcmFyY2h5LiAgUG9pbnRlciBkb3duL3VwIGluZGljYXRlZCB3aGVuCiAgICAgICogdGhlIGZpbmdlciB0b3VjaGVzIHRoZSBkaXNwbGF5IG9yIHdoZW4gdGhlIHNlbGVjdGlvbiBidXR0b24gaXMgcHJlc3NlZC9yZWxlYXNlZC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIFVzZSB7QGxpbmsgI2dldE1vdGlvblJhbmdlfSB0byBxdWVyeSB0aGUgcmFuZ2Ugb2YgdGhlIHBvaW50aW5nIGRldmljZS4gIFNvbWUgZGV2aWNlcyBwZXJtaXQKICAgICAgKiB0b3VjaGVzIG91dHNpZGUgdGhlIGRpc3BsYXkgYXJlYSBzbyB0aGUgZWZmZWN0aXZlIHJhbmdlIG1heSBiZSBzb21ld2hhdCBzbWFsbGVyIG9yIGxhcmdlcgogICAgICAqIHRoYW4gdGhlIGFjdHVhbCBkaXNwbGF5IHNpemUuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VUkNFX0NMQVNTX1BPSU5URVIgPSAweDAwMDAwMDAyOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhlIGlucHV0IHNvdXJjZSBpcyBhIHRyYWNrYmFsbCBuYXZpZ2F0aW9uIGRldmljZS4KICAgICAgKiBFeGFtcGxlczoge0BsaW5rICNTT1VSQ0VfVFJBQ0tCQUxMfS4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEEge0BsaW5rIE1vdGlvbkV2ZW50fSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgcmVsYXRpdmUgbW92ZW1lbnRzIGluIGRldmljZS1zcGVjaWZpYwogICAgICAqIHVuaXRzIHVzZWQgZm9yIG5hdmlnYXRpb24gcHVycG9zZXMuICBQb2ludGVyIGRvd24vdXAgaW5kaWNhdGVzIHdoZW4gdGhlIHNlbGVjdGlvbiBidXR0b24KICAgICAgKiBpcyBwcmVzc2VkL3JlbGVhc2VkLgotICAgICAqIAorICAgICAqCiAgICAgICogVXNlIHtAbGluayAjZ2V0TW90aW9uUmFuZ2V9IHRvIHF1ZXJ5IHRoZSByYW5nZSBvZiBtb3Rpb24uCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VUkNFX0NMQVNTX1RSQUNLQkFMTCA9IDB4MDAwMDAwMDQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGUgaW5wdXQgc291cmNlIGlzIGFuIGFic29sdXRlIHBvc2l0aW9uaW5nIGRldmljZSBub3QgYXNzb2NpYXRlZCB3aXRoIGEgZGlzcGxheQogICAgICAqICh1bmxpa2Uge0BsaW5rICNTT1VSQ0VfQ0xBU1NfUE9JTlRFUn0pLgotICAgICAqIAorICAgICAqCiAgICAgICogQSB7QGxpbmsgTW90aW9uRXZlbnR9IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhYnNvbHV0ZSBjb29yZGluYXRlcyBpbgogICAgICAqIGRldmljZS1zcGVjaWZpYyBzdXJmYWNlIHVuaXRzLgotICAgICAqIAorICAgICAqCiAgICAgICogVXNlIHtAbGluayAjZ2V0TW90aW9uUmFuZ2V9IHRvIHF1ZXJ5IHRoZSByYW5nZSBvZiBwb3NpdGlvbnMuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VUkNFX0NMQVNTX1BPU0lUSU9OID0gMHgwMDAwMDAwODsKQEAgLTEzNCw3ICsxMzYsNyBAQAogICAgICAqIFRoZSBpbnB1dCBzb3VyY2UgaXMgdW5rbm93bi4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT1VSQ0VfVU5LTk9XTiA9IDB4MDAwMDAwMDA7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGUgaW5wdXQgc291cmNlIGlzIGEga2V5Ym9hcmQuCiAgICAgICoKQEAgLTE0NSwxMCArMTQ3LDEwIEBACiAgICAgICogQHNlZSAjU09VUkNFX0NMQVNTX0JVVFRPTgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPVVJDRV9LRVlCT0FSRCA9IDB4MDAwMDAxMDAgfCBTT1VSQ0VfQ0xBU1NfQlVUVE9OOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhlIGlucHV0IHNvdXJjZSBpcyBhIERQYWQuCi0gICAgICogCisgICAgICoKICAgICAgKiBAc2VlICNTT1VSQ0VfQ0xBU1NfQlVUVE9OCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VUkNFX0RQQUQgPSAweDAwMDAwMjAwIHwgU09VUkNFX0NMQVNTX0JVVFRPTjsKQEAgLTE2MywxNiArMTY1LDE2IEBACiAKICAgICAvKioKICAgICAgKiBUaGUgaW5wdXQgc291cmNlIGlzIGEgdG91Y2ggc2NyZWVuIHBvaW50aW5nIGRldmljZS4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBzZWUgI1NPVVJDRV9DTEFTU19QT0lOVEVSCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VUkNFX1RPVUNIU0NSRUVOID0gMHgwMDAwMTAwMCB8IFNPVVJDRV9DTEFTU19QT0lOVEVSOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhlIGlucHV0IHNvdXJjZSBpcyBhIG1vdXNlIHBvaW50aW5nIGRldmljZS4KICAgICAgKiBUaGlzIGNvZGUgaXMgYWxzbyB1c2VkIGZvciBvdGhlciBtb3VzZS1saWtlIHBvaW50aW5nIGRldmljZXMgc3VjaCBhcyB0cmFja3BhZHMKICAgICAgKiBhbmQgdHJhY2twb2ludHMuCi0gICAgICogCisgICAgICoKICAgICAgKiBAc2VlICNTT1VSQ0VfQ0xBU1NfUE9JTlRFUgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPVVJDRV9NT1VTRSA9IDB4MDAwMDIwMDAgfCBTT1VSQ0VfQ0xBU1NfUE9JTlRFUjsKQEAgLTE5OSwxNSArMjAxLDE1IEBACiAKICAgICAvKioKICAgICAgKiBUaGUgaW5wdXQgc291cmNlIGlzIGEgdHJhY2tiYWxsLgotICAgICAqIAorICAgICAqCiAgICAgICogQHNlZSAjU09VUkNFX0NMQVNTX1RSQUNLQkFMTAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPVVJDRV9UUkFDS0JBTEwgPSAweDAwMDEwMDAwIHwgU09VUkNFX0NMQVNTX1RSQUNLQkFMTDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoZSBpbnB1dCBzb3VyY2UgaXMgYSB0b3VjaCBwYWQgb3IgZGlnaXRpemVyIHRhYmxldCB0aGF0IGlzIG5vdAogICAgICAqIGFzc29jaWF0ZWQgd2l0aCBhIGRpc3BsYXkgKHVubGlrZSB7QGxpbmsgI1NPVVJDRV9UT1VDSFNDUkVFTn0pLgotICAgICAqIAorICAgICAqCiAgICAgICogQHNlZSAjU09VUkNFX0NMQVNTX1BPU0lUSU9OCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VUkNFX1RPVUNIUEFEID0gMHgwMDEwMDAwMCB8IFNPVVJDRV9DTEFTU19QT1NJVElPTjsKQEAgLTIzOSw3ICsyNDEsNyBAQAogCiAgICAgLyoqCiAgICAgICogQ29uc3RhbnQgZm9yIHJldHJpZXZpbmcgdGhlIHJhbmdlIG9mIHZhbHVlcyBmb3Ige0BsaW5rIE1vdGlvbkV2ZW50I0FYSVNfWH0uCi0gICAgICogCisgICAgICoKICAgICAgKiBAc2VlICNnZXRNb3Rpb25SYW5nZQogICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgTW90aW9uRXZlbnQjQVhJU19YfSBpbnN0ZWFkLgogICAgICAqLwpAQCAtMjQ4LDcgKzI1MCw3IEBACiAKICAgICAvKioKICAgICAgKiBDb25zdGFudCBmb3IgcmV0cmlldmluZyB0aGUgcmFuZ2Ugb2YgdmFsdWVzIGZvciB7QGxpbmsgTW90aW9uRXZlbnQjQVhJU19ZfS4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBzZWUgI2dldE1vdGlvblJhbmdlCiAgICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBNb3Rpb25FdmVudCNBWElTX1l9IGluc3RlYWQuCiAgICAgICovCkBAIC0yNTcsNyArMjU5LDcgQEAKIAogICAgIC8qKgogICAgICAqIENvbnN0YW50IGZvciByZXRyaWV2aW5nIHRoZSByYW5nZSBvZiB2YWx1ZXMgZm9yIHtAbGluayBNb3Rpb25FdmVudCNBWElTX1BSRVNTVVJFfS4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBzZWUgI2dldE1vdGlvblJhbmdlCiAgICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBNb3Rpb25FdmVudCNBWElTX1BSRVNTVVJFfSBpbnN0ZWFkLgogICAgICAqLwpAQCAtMjY2LDcgKzI2OCw3IEBACiAKICAgICAvKioKICAgICAgKiBDb25zdGFudCBmb3IgcmV0cmlldmluZyB0aGUgcmFuZ2Ugb2YgdmFsdWVzIGZvciB7QGxpbmsgTW90aW9uRXZlbnQjQVhJU19TSVpFfS4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBzZWUgI2dldE1vdGlvblJhbmdlCiAgICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBNb3Rpb25FdmVudCNBWElTX1NJWkV9IGluc3RlYWQuCiAgICAgICovCkBAIC0yNzUsNyArMjc3LDcgQEAKIAogICAgIC8qKgogICAgICAqIENvbnN0YW50IGZvciByZXRyaWV2aW5nIHRoZSByYW5nZSBvZiB2YWx1ZXMgZm9yIHtAbGluayBNb3Rpb25FdmVudCNBWElTX1RPVUNIX01BSk9SfS4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBzZWUgI2dldE1vdGlvblJhbmdlCiAgICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBNb3Rpb25FdmVudCNBWElTX1RPVUNIX01BSk9SfSBpbnN0ZWFkLgogICAgICAqLwpAQCAtMjg0LDcgKzI4Niw3IEBACiAKICAgICAvKioKICAgICAgKiBDb25zdGFudCBmb3IgcmV0cmlldmluZyB0aGUgcmFuZ2Ugb2YgdmFsdWVzIGZvciB7QGxpbmsgTW90aW9uRXZlbnQjQVhJU19UT1VDSF9NSU5PUn0uCi0gICAgICogCisgICAgICoKICAgICAgKiBAc2VlICNnZXRNb3Rpb25SYW5nZQogICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgTW90aW9uRXZlbnQjQVhJU19UT1VDSF9NSU5PUn0gaW5zdGVhZC4KICAgICAgKi8KQEAgLTI5Myw3ICsyOTUsNyBAQAogCiAgICAgLyoqCiAgICAgICogQ29uc3RhbnQgZm9yIHJldHJpZXZpbmcgdGhlIHJhbmdlIG9mIHZhbHVlcyBmb3Ige0BsaW5rIE1vdGlvbkV2ZW50I0FYSVNfVE9PTF9NQUpPUn0uCi0gICAgICogCisgICAgICoKICAgICAgKiBAc2VlICNnZXRNb3Rpb25SYW5nZQogICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgTW90aW9uRXZlbnQjQVhJU19UT09MX01BSk9SfSBpbnN0ZWFkLgogICAgICAqLwpAQCAtMzAyLDcgKzMwNCw3IEBACiAKICAgICAvKioKICAgICAgKiBDb25zdGFudCBmb3IgcmV0cmlldmluZyB0aGUgcmFuZ2Ugb2YgdmFsdWVzIGZvciB7QGxpbmsgTW90aW9uRXZlbnQjQVhJU19UT09MX01JTk9SfS4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBzZWUgI2dldE1vdGlvblJhbmdlCiAgICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBNb3Rpb25FdmVudCNBWElTX1RPT0xfTUlOT1J9IGluc3RlYWQuCiAgICAgICovCkBAIC0zMTEsMjQgKzMxMywyNCBAQAogCiAgICAgLyoqCiAgICAgICogQ29uc3RhbnQgZm9yIHJldHJpZXZpbmcgdGhlIHJhbmdlIG9mIHZhbHVlcyBmb3Ige0BsaW5rIE1vdGlvbkV2ZW50I0FYSVNfT1JJRU5UQVRJT059LgotICAgICAqIAorICAgICAqCiAgICAgICogQHNlZSAjZ2V0TW90aW9uUmFuZ2UKICAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIE1vdGlvbkV2ZW50I0FYSVNfT1JJRU5UQVRJT059IGluc3RlYWQuCiAgICAgICovCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNT1RJT05fUkFOR0VfT1JJRU5UQVRJT04gPSBNb3Rpb25FdmVudC5BWElTX09SSUVOVEFUSU9OOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhlcmUgaXMgbm8ga2V5Ym9hcmQuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0VZQk9BUkRfVFlQRV9OT05FID0gMDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoZSBrZXlib2FyZCBpcyBub3QgZnVsbHkgYWxwaGFiZXRpYy4gIEl0IG1heSBiZSBhIG51bWVyaWMga2V5cGFkIG9yIGFuIGFzc29ydG1lbnQKICAgICAgKiBvZiBidXR0b25zIHRoYXQgYXJlIG5vdCBtYXBwZWQgYXMgYWxwaGFiZXRpYyBrZXlzIHN1aXRhYmxlIGZvciB0ZXh0IGlucHV0LgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtFWUJPQVJEX1RZUEVfTk9OX0FMUEhBQkVUSUMgPSAxOwotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhlIGtleWJvYXJkIHN1cHBvcnRzIGEgY29tcGxlbWVudCBvZiBhbHBoYWJldGljIGtleXMuCiAgICAgICovCkBAIC0zNjEsNiArMzYzLDcgQEAKICAgICAgICAgbUtleUNoYXJhY3Rlck1hcCA9IGtleUNoYXJhY3Rlck1hcDsKICAgICAgICAgbUhhc1ZpYnJhdG9yID0gaGFzVmlicmF0b3I7CiAgICAgICAgIG1IYXNCdXR0b25VbmRlclBhZCA9IGhhc0J1dHRvblVuZGVyUGFkOworICAgICAgICBtSWRlbnRpZmllciA9IG5ldyBJbnB1dERldmljZUlkZW50aWZpZXIoZGVzY3JpcHRvciwgdmVuZG9ySWQsIHByb2R1Y3RJZCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBJbnB1dERldmljZShQYXJjZWwgaW4pIHsKQEAgLTM3Nyw2ICszODAsNyBAQAogICAgICAgICBtS2V5Q2hhcmFjdGVyTWFwID0gS2V5Q2hhcmFjdGVyTWFwLkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChpbik7CiAgICAgICAgIG1IYXNWaWJyYXRvciA9IGluLnJlYWRJbnQoKSAhPSAwOwogICAgICAgICBtSGFzQnV0dG9uVW5kZXJQYWQgPSBpbi5yZWFkSW50KCkgIT0gMDsKKyAgICAgICAgbUlkZW50aWZpZXIgPSBuZXcgSW5wdXREZXZpY2VJZGVudGlmaWVyKG1EZXNjcmlwdG9yLCBtVmVuZG9ySWQsIG1Qcm9kdWN0SWQpOwogCiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgIGludCBheGlzID0gaW4ucmVhZEludCgpOwpAQCAtMzk2LDcgKzQwMCw3IEBACiAgICAgcHVibGljIHN0YXRpYyBJbnB1dERldmljZSBnZXREZXZpY2UoaW50IGlkKSB7CiAgICAgICAgIHJldHVybiBJbnB1dE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbnB1dERldmljZShpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgaWRzIG9mIGFsbCBpbnB1dCBkZXZpY2VzIGluIHRoZSBzeXN0ZW0uCiAgICAgICogQHJldHVybiBUaGUgaW5wdXQgZGV2aWNlIGlkcy4KQEAgLTQ0MSw2ICs0NDUsMTggQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBUaGUgc2V0IG9mIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIGZvciB0eXBlIG9mIGlucHV0IGRldmljZS4gVGhpcworICAgICAqIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIGJ5IHRoZSBzeXN0ZW0gdG8gY29uZmlndXJlIGFwcHJvcHJpYXRlIHNldHRpbmdzCisgICAgICogZm9yIHRoZSBkZXZpY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBpZGVudGlmaWVyIG9iamVjdCBmb3IgdGhpcyBkZXZpY2UKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBJbnB1dERldmljZUlkZW50aWZpZXIgZ2V0SWRlbnRpZmllcigpIHsKKyAgICAgICAgcmV0dXJuIG1JZGVudGlmaWVyOworICAgIH0KKworICAgIC8qKgogICAgICAqIEdldHMgYSBnZW5lcmF0aW9uIG51bWJlciBmb3IgdGhpcyBpbnB1dCBkZXZpY2UuCiAgICAgICogVGhlIGdlbmVyYXRpb24gbnVtYmVyIGlzIGluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSBkZXZpY2UgaXMgcmVjb25maWd1cmVkIGFuZCBpdHMKICAgICAgKiBwcm9wZXJ0aWVzIG1heSBoYXZlIGNoYW5nZWQuCkBAIC01NTMsNyArNTY5LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBtTmFtZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBpbnB1dCBzb3VyY2VzIHN1cHBvcnRlZCBieSB0aGlzIGlucHV0IGRldmljZSBhcyBhIGNvbWJpbmVkIGJpdGZpZWxkLgogICAgICAqIEByZXR1cm4gVGhlIHN1cHBvcnRlZCBpbnB1dCBzb3VyY2VzLgpAQCAtNTYxLDcgKzU3Nyw3IEBACiAgICAgcHVibGljIGludCBnZXRTb3VyY2VzKCkgewogICAgICAgICByZXR1cm4gbVNvdXJjZXM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUga2V5Ym9hcmQgdHlwZS4KICAgICAgKiBAcmV0dXJuIFRoZSBrZXlib2FyZCB0eXBlLgpAQCAtNTY5LDcgKzU4NSw3IEBACiAgICAgcHVibGljIGludCBnZXRLZXlib2FyZFR5cGUoKSB7CiAgICAgICAgIHJldHVybiBtS2V5Ym9hcmRUeXBlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGtleSBjaGFyYWN0ZXIgbWFwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlucHV0IGRldmljZS4KICAgICAgKiBAcmV0dXJuIFRoZSBrZXkgY2hhcmFjdGVyIG1hcC4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSW5wdXRRdWV1ZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JbnB1dFF1ZXVlLmphdmEKaW5kZXggZDVjZWM0OS4uYWViYzYwMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JbnB1dFF1ZXVlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JbnB1dFF1ZXVlLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGRhbHZpay5zeXN0ZW0uQ2xvc2VHdWFyZDsKIAotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2VRdWV1ZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUG9vbHMuUG9vbDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvS2V5RXZlbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvS2V5RXZlbnQuamF2YQppbmRleCA1YTVmYzEwLi4zMGIxZTUyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0tleUV2ZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9LZXlFdmVudC5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5tZXRob2QuTWV0YUtleUtleUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VJbnRBcnJheTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5Q2hhcmFjdGVyTWFwOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlci5qYXZhCmluZGV4IGFhNDNiYWQuLmVkNzU4NTAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyLmphdmEKQEAgLTkxLDYgKzkxLDggQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHXzE5OTUgPSAiYmxpbmsiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfUkVRVUVTVF9GT0NVUyA9ICJyZXF1ZXN0Rm9jdXMiOwogCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVEhFTUUgPSAidGhlbWUiOworCiAgICAgLyoqCiAgICAgICogSG9vayB0byBhbGxvdyBjbGllbnRzIG9mIHRoZSBMYXlvdXRJbmZsYXRlciB0byByZXN0cmljdCB0aGUgc2V0IG9mIFZpZXdzIHRoYXQgYXJlIGFsbG93ZWQKICAgICAgKiB0byBiZSBpbmZsYXRlZC4KQEAgLTQ1OSwxNSArNDYxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIlZpZXdHcm91cCByb290IGFuZCBhdHRhY2hUb1Jvb3Q9dHJ1ZSIpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgckluZmxhdGUocGFyc2VyLCByb290LCBhdHRycywgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBySW5mbGF0ZShwYXJzZXIsIHJvb3QsIGF0dHJzLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRlbXAgaXMgdGhlIHJvb3QgdmlldyB0aGF0IHdhcyBmb3VuZCBpbiB0aGUgeG1sCi0gICAgICAgICAgICAgICAgICAgIFZpZXcgdGVtcDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFRBR18xOTk1LmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IG5ldyBCbGlua0xheW91dChtQ29udGV4dCwgYXR0cnMpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGNyZWF0ZVZpZXdGcm9tVGFnKHJvb3QsIG5hbWUsIGF0dHJzKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IHRlbXAgPSBjcmVhdGVWaWV3RnJvbVRhZyhyb290LCBuYW1lLCBhdHRycywgZmFsc2UpOwogCiAgICAgICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgcGFyYW1zID0gbnVsbDsKIApAQCAtNDg5LDcgKzQ4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tPiBzdGFydCBpbmZsYXRpbmcgY2hpbGRyZW4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBJbmZsYXRlIGFsbCBjaGlsZHJlbiB1bmRlciB0ZW1wCi0gICAgICAgICAgICAgICAgICAgIHJJbmZsYXRlKHBhcnNlciwgdGVtcCwgYXR0cnMsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBySW5mbGF0ZShwYXJzZXIsIHRlbXAsIGF0dHJzLCB0cnVlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tPiBkb25lIGluZmxhdGluZyBjaGlsZHJlbiIpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC02NjksMzEgKzY2Niw2NiBAQAogICAgICAgICByZXR1cm4gb25DcmVhdGVWaWV3KG5hbWUsIGF0dHJzKTsKICAgICB9CiAKLSAgICAvKgotICAgICAqIGRlZmF1bHQgdmlzaWJpbGl0eSBzbyB0aGUgQnJpZGdlSW5mbGF0ZXIgY2FuIG92ZXJyaWRlIGl0LgorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB2aWV3IGZyb20gYSB0YWcgbmFtZSB1c2luZyB0aGUgc3VwcGxpZWQgYXR0cmlidXRlIHNldC4KKyAgICAgKiA8cD4KKyAgICAgKiBJZiB7QGNvZGUgaW5oZXJpdENvbnRleHR9IGlzIHRydWUgYW5kIHRoZSBwYXJlbnQgaXMgbm9uLW51bGwsIHRoZSB2aWV3CisgICAgICogd2lsbCBiZSBpbmZsYXRlZCBpbiBwYXJlbnQgdmlldydzIGNvbnRleHQuIElmIHRoZSB2aWV3IHNwZWNpZmllcyBhCisgICAgICogJmx0O3RoZW1lJmd0OyBhdHRyaWJ1dGUsIHRoZSBpbmZsYXRpb24gY29udGV4dCB3aWxsIGJlIHdyYXBwZWQgd2l0aCB0aGUKKyAgICAgKiBzcGVjaWZpZWQgdGhlbWUuCisgICAgICogPHA+CisgICAgICogTm90ZTogRGVmYXVsdCB2aXNpYmlsaXR5IHNvIHRoZSBCcmlkZ2VJbmZsYXRlciBjYW4gb3ZlcnJpZGUgaXQuCiAgICAgICovCi0gICAgVmlldyBjcmVhdGVWaWV3RnJvbVRhZyhWaWV3IHBhcmVudCwgU3RyaW5nIG5hbWUsIEF0dHJpYnV0ZVNldCBhdHRycykgeworICAgIFZpZXcgY3JlYXRlVmlld0Zyb21UYWcoVmlldyBwYXJlbnQsIFN0cmluZyBuYW1lLCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGJvb2xlYW4gaW5oZXJpdENvbnRleHQpIHsKICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKCJ2aWV3IikpIHsKICAgICAgICAgICAgIG5hbWUgPSBhdHRycy5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiY2xhc3MiKTsKICAgICAgICAgfQogCisgICAgICAgIENvbnRleHQgdmlld0NvbnRleHQ7CisgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiBpbmhlcml0Q29udGV4dCkgeworICAgICAgICAgICAgdmlld0NvbnRleHQgPSBwYXJlbnQuZ2V0Q29udGV4dCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmlld0NvbnRleHQgPSBtQ29udGV4dDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IGEgdGhlbWUgd3JhcHBlciwgaWYgcmVxdWVzdGVkLgorICAgICAgICBmaW5hbCBpbnQgdGhlbWVSZXNJZCA9IGF0dHJzLmdldEF0dHJpYnV0ZVJlc291cmNlVmFsdWUobnVsbCwgQVRUUl9USEVNRSwgMCk7CisgICAgICAgIGlmICh0aGVtZVJlc0lkICE9IDApIHsKKyAgICAgICAgICAgIHZpZXdDb250ZXh0ID0gbmV3IENvbnRleHRUaGVtZVdyYXBwZXIodmlld0NvbnRleHQsIHRoZW1lUmVzSWQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5hbWUuZXF1YWxzKFRBR18xOTk1KSkgeworICAgICAgICAgICAgLy8gTGV0J3MgcGFydHkgbGlrZSBpdCdzIDE5OTUhCisgICAgICAgICAgICByZXR1cm4gbmV3IEJsaW5rTGF5b3V0KHZpZXdDb250ZXh0LCBhdHRycyk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoREVCVUcpIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKiogQ3JlYXRpbmcgdmlldzogIiArIG5hbWUpOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBWaWV3IHZpZXc7Ci0gICAgICAgICAgICBpZiAobUZhY3RvcnkyICE9IG51bGwpIHZpZXcgPSBtRmFjdG9yeTIub25DcmVhdGVWaWV3KHBhcmVudCwgbmFtZSwgbUNvbnRleHQsIGF0dHJzKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1GYWN0b3J5ICE9IG51bGwpIHZpZXcgPSBtRmFjdG9yeS5vbkNyZWF0ZVZpZXcobmFtZSwgbUNvbnRleHQsIGF0dHJzKTsKLSAgICAgICAgICAgIGVsc2UgdmlldyA9IG51bGw7CisgICAgICAgICAgICBpZiAobUZhY3RvcnkyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB2aWV3ID0gbUZhY3RvcnkyLm9uQ3JlYXRlVmlldyhwYXJlbnQsIG5hbWUsIHZpZXdDb250ZXh0LCBhdHRycyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1GYWN0b3J5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB2aWV3ID0gbUZhY3Rvcnkub25DcmVhdGVWaWV3KG5hbWUsIHZpZXdDb250ZXh0LCBhdHRycyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZpZXcgPSBudWxsOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodmlldyA9PSBudWxsICYmIG1Qcml2YXRlRmFjdG9yeSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdmlldyA9IG1Qcml2YXRlRmFjdG9yeS5vbkNyZWF0ZVZpZXcocGFyZW50LCBuYW1lLCBtQ29udGV4dCwgYXR0cnMpOworICAgICAgICAgICAgICAgIHZpZXcgPSBtUHJpdmF0ZUZhY3Rvcnkub25DcmVhdGVWaWV3KHBhcmVudCwgbmFtZSwgdmlld0NvbnRleHQsIGF0dHJzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAodmlldyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKC0xID09IG5hbWUuaW5kZXhPZignLicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcgPSBvbkNyZWF0ZVZpZXcocGFyZW50LCBuYW1lLCBhdHRycyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldyA9IGNyZWF0ZVZpZXcobmFtZSwgbnVsbCwgYXR0cnMpOworICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCBsYXN0Q29udGV4dCA9IG1Db25zdHJ1Y3RvckFyZ3NbMF07CisgICAgICAgICAgICAgICAgbUNvbnN0cnVjdG9yQXJnc1swXSA9IHZpZXdDb250ZXh0OworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgtMSA9PSBuYW1lLmluZGV4T2YoJy4nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmlldyA9IG9uQ3JlYXRlVmlldyhwYXJlbnQsIG5hbWUsIGF0dHJzKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgPSBjcmVhdGVWaWV3KG5hbWUsIG51bGwsIGF0dHJzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgIG1Db25zdHJ1Y3RvckFyZ3NbMF0gPSBsYXN0Q29udGV4dDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTcyMCw5ICs3NTIsMTQgQEAKICAgICAvKioKICAgICAgKiBSZWN1cnNpdmUgbWV0aG9kIHVzZWQgdG8gZGVzY2VuZCBkb3duIHRoZSB4bWwgaGllcmFyY2h5IGFuZCBpbnN0YW50aWF0ZQogICAgICAqIHZpZXdzLCBpbnN0YW50aWF0ZSB0aGVpciBjaGlsZHJlbiwgYW5kIHRoZW4gY2FsbCBvbkZpbmlzaEluZmxhdGUoKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmhlcml0Q29udGV4dCBXaGV0aGVyIHRoZSByb290IHZpZXcgc2hvdWxkIGJlIGluZmxhdGVkIGluIGl0cworICAgICAqICAgICAgICAgICAgcGFyZW50J3MgY29udGV4dC4gVGhpcyBzaG91bGQgYmUgdHJ1ZSB3aGVuIGNhbGxlZCBpbmZsYXRpbmcKKyAgICAgKiAgICAgICAgICAgIGNoaWxkIHZpZXdzIHJlY3Vyc2l2ZWx5LCBvciBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgdm9pZCBySW5mbGF0ZShYbWxQdWxsUGFyc2VyIHBhcnNlciwgVmlldyBwYXJlbnQsIGZpbmFsIEF0dHJpYnV0ZVNldCBhdHRycywKLSAgICAgICAgICAgIGJvb2xlYW4gZmluaXNoSW5mbGF0ZSkgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGJvb2xlYW4gZmluaXNoSW5mbGF0ZSwgYm9vbGVhbiBpbmhlcml0Q29udGV4dCkgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24sCisgICAgICAgICAgICBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgZmluYWwgaW50IGRlcHRoID0gcGFyc2VyLmdldERlcHRoKCk7CiAgICAgICAgIGludCB0eXBlOwpAQCAtNzQyLDIwICs3NzksMTQgQEAKICAgICAgICAgICAgICAgICBpZiAocGFyc2VyLmdldERlcHRoKCkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW5mbGF0ZUV4Y2VwdGlvbigiPGluY2x1ZGUgLz4gY2Fubm90IGJlIHRoZSByb290IGVsZW1lbnQiKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGFyc2VJbmNsdWRlKHBhcnNlciwgcGFyZW50LCBhdHRycyk7CisgICAgICAgICAgICAgICAgcGFyc2VJbmNsdWRlKHBhcnNlciwgcGFyZW50LCBhdHRycywgaW5oZXJpdENvbnRleHQpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChUQUdfTUVSR0UuZXF1YWxzKG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEluZmxhdGVFeGNlcHRpb24oIjxtZXJnZSAvPiBtdXN0IGJlIHRoZSByb290IGVsZW1lbnQiKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoVEFHXzE5OTUuZXF1YWxzKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgVmlldyB2aWV3ID0gbmV3IEJsaW5rTGF5b3V0KG1Db250ZXh0LCBhdHRycyk7Ci0gICAgICAgICAgICAgICAgZmluYWwgVmlld0dyb3VwIHZpZXdHcm91cCA9IChWaWV3R3JvdXApIHBhcmVudDsKLSAgICAgICAgICAgICAgICBmaW5hbCBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zIHBhcmFtcyA9IHZpZXdHcm91cC5nZW5lcmF0ZUxheW91dFBhcmFtcyhhdHRycyk7Ci0gICAgICAgICAgICAgICAgckluZmxhdGUocGFyc2VyLCB2aWV3LCBhdHRycywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgdmlld0dyb3VwLmFkZFZpZXcodmlldywgcGFyYW1zKTsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgdmlldyA9IGNyZWF0ZVZpZXdGcm9tVGFnKHBhcmVudCwgbmFtZSwgYXR0cnMpOworICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgdmlldyA9IGNyZWF0ZVZpZXdGcm9tVGFnKHBhcmVudCwgbmFtZSwgYXR0cnMsIGluaGVyaXRDb250ZXh0KTsKICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3R3JvdXAgdmlld0dyb3VwID0gKFZpZXdHcm91cCkgcGFyZW50OwogICAgICAgICAgICAgICAgIGZpbmFsIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgcGFyYW1zID0gdmlld0dyb3VwLmdlbmVyYXRlTGF5b3V0UGFyYW1zKGF0dHJzKTsKLSAgICAgICAgICAgICAgICBySW5mbGF0ZShwYXJzZXIsIHZpZXcsIGF0dHJzLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBySW5mbGF0ZShwYXJzZXIsIHZpZXcsIGF0dHJzLCB0cnVlLCB0cnVlKTsKICAgICAgICAgICAgICAgICB2aWV3R3JvdXAuYWRkVmlldyh2aWV3LCBwYXJhbXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC03NzQsOSArODA1LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBwYXJzZUluY2x1ZGUoWG1sUHVsbFBhcnNlciBwYXJzZXIsIFZpZXcgcGFyZW50LCBBdHRyaWJ1dGVTZXQgYXR0cnMpCi0gICAgICAgICAgICB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCisgICAgcHJpdmF0ZSB2b2lkIHBhcnNlSW5jbHVkZShYbWxQdWxsUGFyc2VyIHBhcnNlciwgVmlldyBwYXJlbnQsIEF0dHJpYnV0ZVNldCBhdHRycywKKyAgICAgICAgICAgIGJvb2xlYW4gaW5oZXJpdENvbnRleHQpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGludCB0eXBlOwogCiAgICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBWaWV3R3JvdXApIHsKQEAgLTgxMSw5ICs4NDEsMTAgQEAKIAogICAgICAgICAgICAgICAgICAgICBpZiAoVEFHX01FUkdFLmVxdWFscyhjaGlsZE5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmZsYXRlIGFsbCBjaGlsZHJlbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJJbmZsYXRlKGNoaWxkUGFyc2VyLCBwYXJlbnQsIGNoaWxkQXR0cnMsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJJbmZsYXRlKGNoaWxkUGFyc2VyLCBwYXJlbnQsIGNoaWxkQXR0cnMsIGZhbHNlLCBpbmhlcml0Q29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IHZpZXcgPSBjcmVhdGVWaWV3RnJvbVRhZyhwYXJlbnQsIGNoaWxkTmFtZSwgY2hpbGRBdHRycyk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IHZpZXcgPSBjcmVhdGVWaWV3RnJvbVRhZyhwYXJlbnQsIGNoaWxkTmFtZSwgY2hpbGRBdHRycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdENvbnRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVmlld0dyb3VwIGdyb3VwID0gKFZpZXdHcm91cCkgcGFyZW50OwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cnkgdG8gbG9hZCB0aGUgbGF5b3V0IHBhcmFtcyBzZXQgaW4gdGhlIDxpbmNsdWRlIC8+IHRhZy4gSWYKQEAgLTgzNiw3ICs4NjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmZsYXRlIGFsbCBjaGlsZHJlbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJJbmZsYXRlKGNoaWxkUGFyc2VyLCB2aWV3LCBjaGlsZEF0dHJzLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJJbmZsYXRlKGNoaWxkUGFyc2VyLCB2aWV3LCBjaGlsZEF0dHJzLCB0cnVlLCB0cnVlKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvdmVycmlkZSB0aGUgaW5jbHVkZWQgbGF5b3V0J3MgYW5kcm9pZDppZCB3aXRoIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25lIHNldCBvbiB0aGUgPGluY2x1ZGUgLz4gdGFnIGl0c2VsZi4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvUmVtb3RlR0xSZW5kZXJlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9SZW1vdGVHTFJlbmRlcmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxOTc3NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvUmVtb3RlR0xSZW5kZXJlci5qYXZhCkBAIC0wLDAgKzEsMTA3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC52aWV3OworCitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOworaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKK2ltcG9ydCBhbmRyb2lkLm9zLlRyYWNlOworaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlLk91dE9mUmVzb3VyY2VzRXhjZXB0aW9uOworCitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrOworCisvKioKKyAqIEhhcmR3YXJlIHJlbmRlcmVyIHVzaW5nIE9wZW5HTCB0aGF0J3MgdXNlZCBhcyB0aGUgcmVtb3RlIGVuZHBvaW50CisgKiBvZiBUaHJlYWRlZFJlbmRlcmVyCisgKgorICogQ3VycmVudGx5IHRoaXMgaXMgbW9zdGx5IGEgY29weSBvZiBHTFJlbmRlcmVyLCBidXQgd2l0aCBhIGZldyBtb2RpZmljYXRpb25zCisgKiB0byBkZWFsIHdpdGggdGhlIHRocmVhZGluZyBpc3N1ZXMuIElkZWFsbHkgbmF0aXZlLXNpZGUgZnVuY3Rpb25hbGl0eQorICogd2lsbCByZXBsYWNlIHRoaXMsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gYm9vdHN0cmFwIHdpdGhvdXQgcmlza2luZyBicmVha2luZworICogY2hhbmdlcyBpbiBHTFJlbmRlcmVyCisgKgorICogQGhpZGUKKyAqLworcHVibGljIGNsYXNzIFJlbW90ZUdMUmVuZGVyZXIgZXh0ZW5kcyBIYXJkd2FyZVJlbmRlcmVyIHsKKyAgICBzdGF0aWMgZmluYWwgaW50IFNVUkZBQ0VfU1RBVEVfRVJST1IgPSAwOworICAgIHN0YXRpYyBmaW5hbCBpbnQgU1VSRkFDRV9TVEFURV9TVUNDRVNTID0gMTsKKyAgICBzdGF0aWMgZmluYWwgaW50IFNVUkZBQ0VfU1RBVEVfVVBEQVRFRCA9IDI7CisKKyAgICBzdGF0aWMgZmluYWwgaW50IEZVTkNUT1JfUFJPQ0VTU19ERUxBWSA9IDQ7CisKKyAgICAvKioKKyAgICAgKiBOdW1iZXIgb2YgZnJhbWVzIHRvIHByb2ZpbGUuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST0ZJTEVfTUFYX0ZSQU1FUyA9IDEyODsKKworICAgIC8qKgorICAgICAqIE51bWJlciBvZiBmbG9hdHMgcGVyIHByb2ZpbGVkIGZyYW1lLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQgPSAzOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST0ZJTEVfRFJBV19NQVJHSU4gPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX0RSQVdfV0lEVEggPSAzOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIFBST0ZJTEVfRFJBV19DT0xPUlMgPSB7IDB4Y2YzZTY2Y2MsIDB4Y2ZkYzM5MTIsIDB4Y2ZlNjk4MDAgfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX0NVUlJFTlRfRlJBTUVfQ09MT1IgPSAweGNmNWZhYTRkOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX0RSQVdfVEhSRVNIT0xEX0NPTE9SID0gMHhmZjVmYWE0ZDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX1RIUkVTSE9MRF9TVFJPS0VfV0lEVEggPSAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX0RSQVdfRFBfUEVSX01TID0gNzsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFZJU1VBTElaRVJTID0geworICAgICAgICAgICAgUFJPRklMRV9QUk9QRVJUWV9WSVNVQUxJWkVfQkFSUywKKyAgICAgICAgICAgIFBST0ZJTEVfUFJPUEVSVFlfVklTVUFMSVpFX0xJTkVTCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIE9WRVJEUkFXID0geworICAgICAgICAgICAgT1ZFUkRSQVdfUFJPUEVSVFlfU0hPVywKKyAgICAgICAgICAgIE9WRVJEUkFXX1BST1BFUlRZX0NPVU5UCisgICAgfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT1ZFUkRSQVdfVFlQRV9DT1VOVCA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEdMX1ZFUlNJT04gPSAyOworCisgICAgaW50IG1XaWR0aCA9IC0xLCBtSGVpZ2h0ID0gLTE7CisKKyAgICBIYXJkd2FyZUNhbnZhcyBtQ2FudmFzOworCisgICAgU3RyaW5nIG1OYW1lOworCisgICAgbG9uZyBtRnJhbWVDb3VudDsKKyAgICBQYWludCBtRGVidWdQYWludDsKKworICAgIGJvb2xlYW4gbURpcnR5UmVnaW9uc0VuYWJsZWQ7CisgICAgYm9vbGVhbiBtU3VyZmFjZVVwZGF0ZWQ7CisKKyAgICBib29sZWFuIG1Qcm9maWxlRW5hYmxlZDsKKyAgICBpbnQgbVByb2ZpbGVWaXN1YWxpemVyVHlwZSA9IC0xOworICAgIGZsb2F0W10gbVByb2ZpbGVEYXRhOworICAgIFJlZW50cmFudExvY2sgbVByb2ZpbGVMb2NrOworICAgIGludCBtUHJvZmlsZUN1cnJlbnRGcmFtZSA9IC1QUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQ7CisKKyAgICBHcmFwaERhdGFQcm92aWRlciBtRGVidWdEYXRhUHJvdmlkZXI7CisgICAgZmxvYXRbXVtdIG1Qcm9maWxlU2hhcGVzOworICAgIFBhaW50IG1Qcm9maWxlUGFpbnQ7CisKKyAgICBib29sZWFuIG1EZWJ1Z0RpcnR5UmVnaW9uczsKKyAgICBpbnQgbURlYnVnT3ZlcmRyYXcgPSAtMTsKKyAgICBIYXJkd2FyZUxheWVyIG1EZWJ1Z092ZXJkcmF3TGF5ZXI7CisgICAgUGFpbnQgbURlYnVnT3ZlcmRyYXdQYWludDsKKworICAgIGZpbmFsIGJvb2xlYW4gbVRyYW5zbHVjZW50OworCisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1SZWRyYXdDbGlwID0gbmV3IFJlY3QoKTsKKworICAgIHByaXZhdGUgZmluYWwgaW50W10gbVN1cmZhY2VTaXplID0gbmV3IGludFsyXTsKKyAgICBwcml2YXRlIGZpbmFsIEZ1bmN0b3JzUnVubmFibGUgbUZ1bmN0b3JzUnVubmFibGUgPSBuZXcgRnVuY3RvcnNSdW5uYWJsZSgpOworCisgICAgcHJpdmF0ZSBsb25nIG1EcmF3RGVsdGEgPSBMb25nLk1BWF9WQUxVRTsKKworICAgIHByaXZhdGUgR0xFUzIwQ2FudmFzIG1HbENhbnZhczsKKworICAgIHByaXZhdGUgRGlzcGxheU1ldHJpY3MgbURpc3BsYXlNZXRyaWNzOworICAgIHByaXZhdGUgVGhyZWFkZWRSZW5kZXJlciBtT3duaW5nUmVuZGVyZXI7CisgICAgcHJpdmF0ZSBsb25nIG1OYXRpdmVDYW52YXNDb250ZXh0OworCisgICAgSGFyZHdhcmVDYW52YXMgY3JlYXRlQ2FudmFzKCkgeworICAgICAgICByZXR1cm4gbUdsQ2FudmFzID0gbmV3IEdMRVMyMENhbnZhcyhtVHJhbnNsdWNlbnQpOworICAgIH0KKworICAgIHZvaWQgaW5pdENhY2hlcygpIHsKKyAgICAgICAgaWYgKEdMRVMyMENhbnZhcy5pbml0Q2FjaGVzKCkpIHsKKyAgICAgICAgICAgIC8vIENhY2hlcyB3ZXJlIChyZSlpbml0aWFsaXplZCwgcmViaW5kIGF0bGFzCisgICAgICAgICAgICBpbml0QXRsYXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgaW5pdEF0bGFzKCkgeworICAgICAgICBJQmluZGVyIGJpbmRlciA9IFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoImFzc2V0YXRsYXMiKTsKKyAgICAgICAgaWYgKGJpbmRlciA9PSBudWxsKSByZXR1cm47CisKKyAgICAgICAgSUFzc2V0QXRsYXMgYXRsYXMgPSBJQXNzZXRBdGxhcy5TdHViLmFzSW50ZXJmYWNlKGJpbmRlcik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoYXRsYXMuaXNDb21wYXRpYmxlKGFuZHJvaWQub3MuUHJvY2Vzcy5teVBwaWQoKSkpIHsKKyAgICAgICAgICAgICAgICBHcmFwaGljQnVmZmVyIGJ1ZmZlciA9IGF0bGFzLmdldEJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGlmIChidWZmZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpbnRbXSBtYXAgPSBhdGxhcy5nZXRNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTEVTMjBDYW52YXMuaW5pdEF0bGFzKGJ1ZmZlciwgbWFwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBJZiBJQXNzZXRBdGxhcyBpcyBub3QgdGhlIHNhbWUgY2xhc3MgYXMgdGhlIElCaW5kZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgYXJlIHVzaW5nIGEgcmVtb3RlIHNlcnZpY2UgYW5kIHdlIGNhbiBzYWZlbHkKKyAgICAgICAgICAgICAgICAgICAgLy8gZGVzdHJveSB0aGUgZ3JhcGhpYyBidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0bGFzLmdldENsYXNzKCkgIT0gYmluZGVyLmdldENsYXNzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cudyhMT0dfVEFHLCAiQ291bGQgbm90IGFjcXVpcmUgYXRsYXMiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2xlYW4gY2FuRHJhdygpIHsKKyAgICAgICAgcmV0dXJuIG1DYW52YXMgIT0gbnVsbCAmJiBtR2xDYW52YXMgIT0gbnVsbDsKKyAgICB9CisKKyAgICBpbnQgb25QcmVEcmF3KFJlY3QgZGlydHkpIHsKKyAgICAgICAgcmV0dXJuIG1HbENhbnZhcy5vblByZURyYXcoZGlydHkpOworICAgIH0KKworICAgIHZvaWQgb25Qb3N0RHJhdygpIHsKKyAgICAgICAgbUdsQ2FudmFzLm9uUG9zdERyYXcoKTsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdQcm9maWxlRGF0YShWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbykgeworICAgICAgICBpZiAobURlYnVnRGF0YVByb3ZpZGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIEdyYXBoRGF0YVByb3ZpZGVyIHByb3ZpZGVyID0gbURlYnVnRGF0YVByb3ZpZGVyOworICAgICAgICAgICAgaW5pdFByb2ZpbGVEcmF3RGF0YShhdHRhY2hJbmZvLCBwcm92aWRlcik7CisKKyAgICAgICAgICAgIGZpbmFsIGludCBoZWlnaHQgPSBwcm92aWRlci5nZXRWZXJ0aWNhbFVuaXRTaXplKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgbWFyZ2luID0gcHJvdmlkZXIuZ2V0SG9yaXpvbnRhVW5pdE1hcmdpbigpOworICAgICAgICAgICAgZmluYWwgaW50IHdpZHRoID0gcHJvdmlkZXIuZ2V0SG9yaXpvbnRhbFVuaXRTaXplKCk7CisKKyAgICAgICAgICAgIGludCB4ID0gMDsKKyAgICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAgICBpbnQgY3VycmVudCA9IDA7CisKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0W10gZGF0YSA9IHByb3ZpZGVyLmdldERhdGEoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBlbGVtZW50Q291bnQgPSBwcm92aWRlci5nZXRFbGVtZW50Q291bnQoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBncmFwaFR5cGUgPSBwcm92aWRlci5nZXRHcmFwaFR5cGUoKTsKKworICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBwcm92aWRlci5nZXRGcmFtZUNvdW50KCkgKiBlbGVtZW50Q291bnQ7CisgICAgICAgICAgICBpZiAoZ3JhcGhUeXBlID09IEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfTElORVMpIHsKKyAgICAgICAgICAgICAgICB0b3RhbENvdW50IC09IGVsZW1lbnRDb3VudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbENvdW50OyBpICs9IGVsZW1lbnRDb3VudCkgeworICAgICAgICAgICAgICAgIGlmIChkYXRhW2ldIDwgMC4wZikgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBjb3VudCAqIDQ7CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gcHJvdmlkZXIuZ2V0Q3VycmVudEZyYW1lKCkgKiBlbGVtZW50Q291bnQpIGN1cnJlbnQgPSBpbmRleDsKKworICAgICAgICAgICAgICAgIHggKz0gbWFyZ2luOworICAgICAgICAgICAgICAgIGludCB4MiA9IHggKyB3aWR0aDsKKworICAgICAgICAgICAgICAgIGludCB5MiA9IG1IZWlnaHQ7CisgICAgICAgICAgICAgICAgaW50IHkxID0gKGludCkgKHkyIC0gZGF0YVtpXSAqIGhlaWdodCk7CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGdyYXBoVHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfQkFSUzogeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbGVtZW50Q291bnQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIE1pc21hdGNoZWRSZWFkQW5kV3JpdGVPZkFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXRbXSByID0gbVByb2ZpbGVTaGFwZXNbal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleF0gPSB4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaW5kZXggKyAxXSA9IHkxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaW5kZXggKyAyXSA9IHgyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaW5kZXggKyAzXSA9IHkyOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSB5MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IGVsZW1lbnRDb3VudCAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSAoaW50KSAoeTIgLSBkYXRhW2kgKyBqICsgMV0gKiBoZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0xJTkVTOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVsZW1lbnRDb3VudDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gTWlzbWF0Y2hlZFJlYWRBbmRXcml0ZU9mQXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdFtdIHIgPSBtUHJvZmlsZVNoYXBlc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4XSA9ICh4ICsgeDIpICogMC41ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgMV0gPSBpbmRleCA9PSAwID8geTEgOiByW2luZGV4IC0gMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleCArIDJdID0gcltpbmRleF0gKyB3aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgM10gPSB5MTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyID0geTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBlbGVtZW50Q291bnQgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gKGludCkgKHkyIC0gZGF0YVtpICsgaiArIDFdICogaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgICAgICB4ICs9IHdpZHRoOworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHggKz0gbWFyZ2luOworCisgICAgICAgICAgICBkcmF3R3JhcGgoZ3JhcGhUeXBlLCBjb3VudCk7CisgICAgICAgICAgICBkcmF3Q3VycmVudEZyYW1lKGdyYXBoVHlwZSwgY3VycmVudCk7CisgICAgICAgICAgICBkcmF3VGhyZXNob2xkKHgsIGhlaWdodCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZHJhd0dyYXBoKGludCBncmFwaFR5cGUsIGludCBjb3VudCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Qcm9maWxlU2hhcGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBtRGVidWdEYXRhUHJvdmlkZXIuc2V0dXBHcmFwaFBhaW50KG1Qcm9maWxlUGFpbnQsIGkpOworICAgICAgICAgICAgc3dpdGNoIChncmFwaFR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfQkFSUzoKKyAgICAgICAgICAgICAgICAgICAgbUdsQ2FudmFzLmRyYXdSZWN0cyhtUHJvZmlsZVNoYXBlc1tpXSwgY291bnQgKiA0LCBtUHJvZmlsZVBhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0xJTkVTOgorICAgICAgICAgICAgICAgICAgICBtR2xDYW52YXMuZHJhd0xpbmVzKG1Qcm9maWxlU2hhcGVzW2ldLCAwLCBjb3VudCAqIDQsIG1Qcm9maWxlUGFpbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3Q3VycmVudEZyYW1lKGludCBncmFwaFR5cGUsIGludCBpbmRleCkgeworICAgICAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAgICAgICAgbURlYnVnRGF0YVByb3ZpZGVyLnNldHVwQ3VycmVudEZyYW1lUGFpbnQobVByb2ZpbGVQYWludCk7CisgICAgICAgICAgICBzd2l0Y2ggKGdyYXBoVHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhEYXRhUHJvdmlkZXIuR1JBUEhfVFlQRV9CQVJTOgorICAgICAgICAgICAgICAgICAgICBtR2xDYW52YXMuZHJhd1JlY3QobVByb2ZpbGVTaGFwZXNbMl1baW5kZXhdLCBtUHJvZmlsZVNoYXBlc1syXVtpbmRleCArIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlU2hhcGVzWzJdW2luZGV4ICsgMl0sIG1Qcm9maWxlU2hhcGVzWzBdW2luZGV4ICsgM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVQYWludCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhEYXRhUHJvdmlkZXIuR1JBUEhfVFlQRV9MSU5FUzoKKyAgICAgICAgICAgICAgICAgICAgbUdsQ2FudmFzLmRyYXdMaW5lKG1Qcm9maWxlU2hhcGVzWzJdW2luZGV4XSwgbVByb2ZpbGVTaGFwZXNbMl1baW5kZXggKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZVNoYXBlc1syXVtpbmRleF0sIG1IZWlnaHQsIG1Qcm9maWxlUGFpbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3VGhyZXNob2xkKGludCB4LCBpbnQgaGVpZ2h0KSB7CisgICAgICAgIGZsb2F0IHRocmVzaG9sZCA9IG1EZWJ1Z0RhdGFQcm92aWRlci5nZXRUaHJlc2hvbGQoKTsKKyAgICAgICAgaWYgKHRocmVzaG9sZCA+IDAuMGYpIHsKKyAgICAgICAgICAgIG1EZWJ1Z0RhdGFQcm92aWRlci5zZXR1cFRocmVzaG9sZFBhaW50KG1Qcm9maWxlUGFpbnQpOworICAgICAgICAgICAgaW50IHkgPSAoaW50KSAobUhlaWdodCAtIHRocmVzaG9sZCAqIGhlaWdodCk7CisgICAgICAgICAgICBtR2xDYW52YXMuZHJhd0xpbmUoMC4wZiwgeSwgeCwgeSwgbVByb2ZpbGVQYWludCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaW5pdFByb2ZpbGVEcmF3RGF0YShWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywgR3JhcGhEYXRhUHJvdmlkZXIgcHJvdmlkZXIpIHsKKyAgICAgICAgaWYgKG1Qcm9maWxlU2hhcGVzID09IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBlbGVtZW50Q291bnQgPSBwcm92aWRlci5nZXRFbGVtZW50Q291bnQoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBmcmFtZUNvdW50ID0gcHJvdmlkZXIuZ2V0RnJhbWVDb3VudCgpOworCisgICAgICAgICAgICBtUHJvZmlsZVNoYXBlcyA9IG5ldyBmbG9hdFtlbGVtZW50Q291bnRdW107CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgbVByb2ZpbGVTaGFwZXNbaV0gPSBuZXcgZmxvYXRbZnJhbWVDb3VudCAqIDRdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtUHJvZmlsZVBhaW50ID0gbmV3IFBhaW50KCk7CisgICAgICAgIH0KKworICAgICAgICBtUHJvZmlsZVBhaW50LnJlc2V0KCk7CisgICAgICAgIGlmIChwcm92aWRlci5nZXRHcmFwaFR5cGUoKSA9PSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0xJTkVTKSB7CisgICAgICAgICAgICBtUHJvZmlsZVBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtRGlzcGxheU1ldHJpY3MgPT0gbnVsbCkgeworICAgICAgICAgICAgbURpc3BsYXlNZXRyaWNzID0gbmV3IERpc3BsYXlNZXRyaWNzKCk7CisgICAgICAgIH0KKworICAgICAgICBhdHRhY2hJbmZvLm1EaXNwbGF5LmdldE1ldHJpY3MobURpc3BsYXlNZXRyaWNzKTsKKyAgICAgICAgcHJvdmlkZXIucHJlcGFyZShtRGlzcGxheU1ldHJpY3MpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZGVzdHJveShib29sZWFuIGZ1bGwpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChmdWxsICYmIG1DYW52YXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1DYW52YXMgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1OYXRpdmVDYW52YXNDb250ZXh0ICE9IDApIHsKKyAgICAgICAgICAgICAgICBkZXN0cm95Q29udGV4dChtTmF0aXZlQ2FudmFzQ29udGV4dCk7CisgICAgICAgICAgICAgICAgbU5hdGl2ZUNhbnZhc0NvbnRleHQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAoZnVsbCAmJiBtR2xDYW52YXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1HbENhbnZhcyA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIHB1c2hMYXllclVwZGF0ZShIYXJkd2FyZUxheWVyIGxheWVyKSB7CisgICAgICAgIG1HbENhbnZhcy5wdXNoTGF5ZXJVcGRhdGUobGF5ZXIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgY2FuY2VsTGF5ZXJVcGRhdGUoSGFyZHdhcmVMYXllciBsYXllcikgeworICAgICAgICBtR2xDYW52YXMuY2FuY2VsTGF5ZXJVcGRhdGUobGF5ZXIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZmx1c2hMYXllclVwZGF0ZXMoKSB7CisgICAgICAgIG1HbENhbnZhcy5mbHVzaExheWVyVXBkYXRlcygpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIEhhcmR3YXJlTGF5ZXIgY3JlYXRlSGFyZHdhcmVMYXllcihib29sZWFuIGlzT3BhcXVlKSB7CisgICAgICAgIHJldHVybiBuZXcgR0xFUzIwVGV4dHVyZUxheWVyKGlzT3BhcXVlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSGFyZHdhcmVMYXllciBjcmVhdGVIYXJkd2FyZUxheWVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbGVhbiBpc09wYXF1ZSkgeworICAgICAgICByZXR1cm4gbmV3IEdMRVMyMFJlbmRlckxheWVyKHdpZHRoLCBoZWlnaHQsIGlzT3BhcXVlKTsKKyAgICB9CisKKyAgICB2b2lkIGNvdW50T3ZlcmRyYXcoSGFyZHdhcmVDYW52YXMgY2FudmFzKSB7CisgICAgICAgICgoR0xFUzIwQ2FudmFzKSBjYW52YXMpLnNldENvdW50T3ZlcmRyYXdFbmFibGVkKHRydWUpOworICAgIH0KKworICAgIGZsb2F0IGdldE92ZXJkcmF3KEhhcmR3YXJlQ2FudmFzIGNhbnZhcykgeworICAgICAgICByZXR1cm4gKChHTEVTMjBDYW52YXMpIGNhbnZhcykuZ2V0T3ZlcmRyYXcoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3VyZmFjZVRleHR1cmUgY3JlYXRlU3VyZmFjZVRleHR1cmUoSGFyZHdhcmVMYXllciBsYXllcikgeworICAgICAgICByZXR1cm4gKChHTEVTMjBUZXh0dXJlTGF5ZXIpIGxheWVyKS5nZXRTdXJmYWNlVGV4dHVyZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgc2V0U3VyZmFjZVRleHR1cmUoSGFyZHdhcmVMYXllciBsYXllciwgU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1cmUpIHsKKyAgICAgICAgKChHTEVTMjBUZXh0dXJlTGF5ZXIpIGxheWVyKS5zZXRTdXJmYWNlVGV4dHVyZShzdXJmYWNlVGV4dHVyZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgYm9vbGVhbiBzYWZlbHlSdW4oUnVubmFibGUgYWN0aW9uKSB7CisgICAgICAgIGJvb2xlYW4gbmVlZHNDb250ZXh0ID0gIWlzRW5hYmxlZCgpIHx8IGNoZWNrUmVuZGVyQ29udGV4dCgpID09IFNVUkZBQ0VfU1RBVEVfRVJST1I7CisKKyAgICAgICAgaWYgKG5lZWRzQ29udGV4dCkgeworICAgICAgICAgICAgaWYgKCF1c2VQQnVmZmVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYWN0aW9uLnJ1bigpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZGVzdHJveUxheWVycyhmaW5hbCBWaWV3IHZpZXcpIHsKKyAgICAgICAgaWYgKHZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgc2FmZWx5UnVuKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtQ2FudmFzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXMuY2xlYXJMYXllclVwZGF0ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZXN0cm95SGFyZHdhcmVMYXllcih2aWV3KTsKKyAgICAgICAgICAgICAgICAgICAgR0xFUzIwQ2FudmFzLmZsdXNoQ2FjaGVzKEdMRVMyMENhbnZhcy5GTFVTSF9DQUNIRVNfTEFZRVJTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZGVzdHJveUhhcmR3YXJlTGF5ZXIoVmlldyB2aWV3KSB7CisgICAgICAgIHZpZXcuZGVzdHJveUxheWVyKHRydWUpOworCisgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7CisgICAgICAgICAgICBWaWV3R3JvdXAgZ3JvdXAgPSAoVmlld0dyb3VwKSB2aWV3OworCisgICAgICAgICAgICBpbnQgY291bnQgPSBncm91cC5nZXRDaGlsZENvdW50KCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBkZXN0cm95SGFyZHdhcmVMYXllcihncm91cC5nZXRDaGlsZEF0KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZGVzdHJveUhhcmR3YXJlUmVzb3VyY2VzKGZpbmFsIFZpZXcgdmlldykgeworICAgICAgICBpZiAodmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICBzYWZlbHlSdW4obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUNhbnZhcy5jbGVhckxheWVyVXBkYXRlcygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lSZXNvdXJjZXModmlldyk7CisgICAgICAgICAgICAgICAgICAgIEdMRVMyMENhbnZhcy5mbHVzaENhY2hlcyhHTEVTMjBDYW52YXMuRkxVU0hfQ0FDSEVTX0xBWUVSUyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRlc3Ryb3lSZXNvdXJjZXMoVmlldyB2aWV3KSB7CisgICAgICAgIHZpZXcuZGVzdHJveUhhcmR3YXJlUmVzb3VyY2VzKCk7CisKKyAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2VvZiBWaWV3R3JvdXApIHsKKyAgICAgICAgICAgIFZpZXdHcm91cCBncm91cCA9IChWaWV3R3JvdXApIHZpZXc7CisKKyAgICAgICAgICAgIGludCBjb3VudCA9IGdyb3VwLmdldENoaWxkQ291bnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGRlc3Ryb3lSZXNvdXJjZXMoZ3JvdXAuZ2V0Q2hpbGRBdChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZW1vdGVHTFJlbmRlcmVyKFRocmVhZGVkUmVuZGVyZXIgb3duaW5nUmVuZGVyZXIsIGJvb2xlYW4gdHJhbnNsdWNlbnQpIHsKKyAgICAgICAgbU93bmluZ1JlbmRlcmVyID0gb3duaW5nUmVuZGVyZXI7CisgICAgICAgIG1UcmFuc2x1Y2VudCA9IHRyYW5zbHVjZW50OworCisgICAgICAgIGxvYWRTeXN0ZW1Qcm9wZXJ0aWVzKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgYm9vbGVhbiBsb2FkU3lzdGVtUHJvcGVydGllcygpIHsKKyAgICAgICAgYm9vbGVhbiB2YWx1ZTsKKyAgICAgICAgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7CisKKyAgICAgICAgU3RyaW5nIHByb2ZpbGluZyA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0KFBST0ZJTEVfUFJPUEVSVFkpOworICAgICAgICBpbnQgZ3JhcGhUeXBlID0gc2VhcmNoKFZJU1VBTElaRVJTLCBwcm9maWxpbmcpOworICAgICAgICB2YWx1ZSA9IGdyYXBoVHlwZSA+PSAwOworCisgICAgICAgIGlmIChncmFwaFR5cGUgIT0gbVByb2ZpbGVWaXN1YWxpemVyVHlwZSkgeworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBtUHJvZmlsZVZpc3VhbGl6ZXJUeXBlID0gZ3JhcGhUeXBlOworCisgICAgICAgICAgICBtUHJvZmlsZVNoYXBlcyA9IG51bGw7CisgICAgICAgICAgICBtUHJvZmlsZVBhaW50ID0gbnVsbDsKKworICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgbURlYnVnRGF0YVByb3ZpZGVyID0gbmV3IERyYXdQZXJmb3JtYW5jZURhdGFQcm92aWRlcihncmFwaFR5cGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtRGVidWdEYXRhUHJvdmlkZXIgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgb24tc2NyZWVuIHByb2ZpbGluZyBpcyBub3QgZW5hYmxlZCwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyCisgICAgICAgIC8vIGNvbnNvbGUgcHJvZmlsaW5nIG9ubHkgaXMgZW5hYmxlZAorICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICB2YWx1ZSA9IEJvb2xlYW4ucGFyc2VCb29sZWFuKHByb2ZpbGluZyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmFsdWUgIT0gbVByb2ZpbGVFbmFibGVkKSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1Qcm9maWxlRW5hYmxlZCA9IHZhbHVlOworCisgICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgTG9nLmQoTE9HX1RBRywgIlByb2ZpbGluZyBoYXJkd2FyZSByZW5kZXJlciIpOworCisgICAgICAgICAgICAgICAgaW50IG1heFByb2ZpbGVGcmFtZXMgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldEludChQUk9GSUxFX01BWEZSQU1FU19QUk9QRVJUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBST0ZJTEVfTUFYX0ZSQU1FUyk7CisgICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhID0gbmV3IGZsb2F0W21heFByb2ZpbGVGcmFtZXMgKiBQUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlRdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVByb2ZpbGVEYXRhLmxlbmd0aDsgaSArPSBQUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQpIHsKKyAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhW2ldID0gbVByb2ZpbGVEYXRhW2kgKyAxXSA9IG1Qcm9maWxlRGF0YVtpICsgMl0gPSAtMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtUHJvZmlsZUxvY2sgPSBuZXcgUmVlbnRyYW50TG9jaygpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGEgPSBudWxsOworICAgICAgICAgICAgICAgIG1Qcm9maWxlTG9jayA9IG51bGw7CisgICAgICAgICAgICAgICAgbVByb2ZpbGVWaXN1YWxpemVyVHlwZSA9IC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtUHJvZmlsZUN1cnJlbnRGcmFtZSA9IC1QUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQ7CisgICAgICAgIH0KKworICAgICAgICB2YWx1ZSA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0Qm9vbGVhbihERUJVR19ESVJUWV9SRUdJT05TX1BST1BFUlRZLCBmYWxzZSk7CisgICAgICAgIGlmICh2YWx1ZSAhPSBtRGVidWdEaXJ0eVJlZ2lvbnMpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgbURlYnVnRGlydHlSZWdpb25zID0gdmFsdWU7CisKKyAgICAgICAgICAgIGlmIChtRGVidWdEaXJ0eVJlZ2lvbnMpIHsKKyAgICAgICAgICAgICAgICBMb2cuZChMT0dfVEFHLCAiRGVidWdnaW5nIGRpcnR5IHJlZ2lvbnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyBvdmVyZHJhdyA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0KEhhcmR3YXJlUmVuZGVyZXIuREVCVUdfT1ZFUkRSQVdfUFJPUEVSVFkpOworICAgICAgICBpbnQgZGVidWdPdmVyZHJhdyA9IHNlYXJjaChPVkVSRFJBVywgb3ZlcmRyYXcpOworICAgICAgICBpZiAoZGVidWdPdmVyZHJhdyAhPSBtRGVidWdPdmVyZHJhdykgeworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBtRGVidWdPdmVyZHJhdyA9IGRlYnVnT3ZlcmRyYXc7CisKKyAgICAgICAgICAgIGlmIChtRGVidWdPdmVyZHJhdyAhPSBPVkVSRFJBV19UWVBFX0NPVU5UKSB7CisgICAgICAgICAgICAgICAgaWYgKG1EZWJ1Z092ZXJkcmF3TGF5ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyLmRlc3Ryb3koKTsKKyAgICAgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdMYXllciA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3UGFpbnQgPSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChHTFJlbmRlcmVyLmxvYWRQcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHNlYXJjaChTdHJpbmdbXSB2YWx1ZXMsIFN0cmluZyB2YWx1ZSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHZhbHVlc1tpXS5lcXVhbHModmFsdWUpKSByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBkdW1wR2Z4SW5mbyhQcmludFdyaXRlciBwdykgeworICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7CisgICAgICAgICAgICBwdy5wcmludGYoIlxuXHREcmF3XHRQcm9jZXNzXHRFeGVjdXRlXG4iKTsKKworICAgICAgICAgICAgbVByb2ZpbGVMb2NrLmxvY2soKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUHJvZmlsZURhdGEubGVuZ3RoOyBpICs9IFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVEYXRhW2ldIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRmKCJcdCUzLjJmXHQlMy4yZlx0JTMuMmZcbiIsIG1Qcm9maWxlRGF0YVtpXSwgbVByb2ZpbGVEYXRhW2kgKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGFbaSArIDJdKTsKKyAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhW2ldID0gbVByb2ZpbGVEYXRhW2kgKyAxXSA9IG1Qcm9maWxlRGF0YVtpICsgMl0gPSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbVByb2ZpbGVDdXJyZW50RnJhbWUgPSBtUHJvZmlsZURhdGEubGVuZ3RoOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBtUHJvZmlsZUxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBsb25nIGdldEZyYW1lQ291bnQoKSB7CisgICAgICAgIHJldHVybiBtRnJhbWVDb3VudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJlbmRlcmVyIGluc3RhbmNlIGNhbiB0cmFjayBhbmQgdXBkYXRlIGRpcnR5IHJlZ2lvbnMuCisgICAgICovCisgICAgYm9vbGVhbiBoYXNEaXJ0eVJlZ2lvbnMoKSB7CisgICAgICAgIHJldHVybiBtRGlydHlSZWdpb25zRW5hYmxlZDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdHJpZ2dlclNvZnR3YXJlRmFsbGJhY2soKSB7CisgICAgICAgIGRlc3Ryb3kodHJ1ZSk7CisgICAgICAgIC8vIHdlJ2xsIHRyeSBhZ2FpbiBpZiBpdCB3YXMgY29udGV4dCBsb3N0CisgICAgICAgIHNldFJlcXVlc3RlZChmYWxzZSk7CisgICAgICAgIExvZy53KExPR19UQUcsICJNb3VudGFpbiBWaWV3LCB3ZSd2ZSBoYWQgYSBwcm9ibGVtIGhlcmUuICIKKyAgICAgICAgICAgICAgICArICJTd2l0Y2hpbmcgYmFjayB0byBzb2Z0d2FyZSByZW5kZXJpbmcuIik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgYm9vbGVhbiBpbml0aWFsaXplKFN1cmZhY2Ugc3VyZmFjZSkgdGhyb3dzIE91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKGlzUmVxdWVzdGVkKCkgJiYgIWlzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBtTmF0aXZlQ2FudmFzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoKTsKKyAgICAgICAgICAgIGJvb2xlYW4gc3VyZmFjZUNyZWF0ZWQgPSBjcmVhdGVFZ2xTdXJmYWNlKHN1cmZhY2UpOworCisgICAgICAgICAgICBpZiAoc3VyZmFjZUNyZWF0ZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAobUNhbnZhcyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1DYW52YXMgPSBjcmVhdGVDYW52YXMoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBpbml0QXRsYXMoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVzdHJveSh0cnVlKTsKKyAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0ZWQoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoU3VyZmFjZSBzdXJmYWNlKSB0aHJvd3MgT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24geworICAgICAgICBpZiAoaXNSZXF1ZXN0ZWQoKSAmJiBpc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgY3JlYXRlRWdsU3VyZmFjZShzdXJmYWNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2xlYW4gY3JlYXRlRWdsU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpIHRocm93cyBPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiB7CisgICAgICAgIC8vIENyZWF0ZSBhbiBFR0wgc3VyZmFjZSB3ZSBjYW4gcmVuZGVyIGludG8uCisgICAgICAgIGlmICghc2V0U3VyZmFjZShtTmF0aXZlQ2FudmFzQ29udGV4dCwgc3VyZmFjZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtYWtlQ3VycmVudChtTmF0aXZlQ2FudmFzQ29udGV4dCk7CisgICAgICAgIG1TdXJmYWNlVXBkYXRlZCA9IHRydWU7CisKKyAgICAgICAgaW5pdENhY2hlcygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGludmFsaWRhdGUoU3VyZmFjZSBzdXJmYWNlKSB7CisgICAgICAgIHNldFN1cmZhY2UobU5hdGl2ZUNhbnZhc0NvbnRleHQsIG51bGwpOworICAgICAgICBzZXRFbmFibGVkKGZhbHNlKTsKKworICAgICAgICBpZiAoc3VyZmFjZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGVFZ2xTdXJmYWNlKHN1cmZhY2UpICYmIG1DYW52YXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBib29sZWFuIHZhbGlkYXRlKCkgeworICAgICAgICByZXR1cm4gY2hlY2tSZW5kZXJDb250ZXh0KCkgIT0gU1VSRkFDRV9TVEFURV9FUlJPUjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIHNldHVwKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICBpZiAodmFsaWRhdGUoKSkgeworICAgICAgICAgICAgbUNhbnZhcy5zZXRWaWV3cG9ydCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1XaWR0aCA9IHdpZHRoOworICAgICAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGludCBnZXRXaWR0aCgpIHsKKyAgICAgICAgcmV0dXJuIG1XaWR0aDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBpbnQgZ2V0SGVpZ2h0KCkgeworICAgICAgICByZXR1cm4gbUhlaWdodDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgbU5hbWUgPSBuYW1lOworICAgIH0KKworICAgIC8vIFRPRE86IFBpbmcgcG9uZyBpcyBmdW4gYW5kIGFsbCwgYnV0IHRoaXMgaXNuJ3QgdGhlIHRpbWUgb3IgcGxhY2UKKyAgICAvLyBIb3dldmVyIHdlIGRvbid0IHlldCBoYXZlIHRoZSBhYmlsaXR5IGZvciB0aGUgUmVuZGVyVGhyZWFkIHRvIHJ1bgorICAgIC8vIGluZGVwZW5kZW50bHkgbm9yIGhhdmUgYSB3YXkgdG8gcG9zdERlbGF5ZWQsIHNvIHRoaXMgd2lsbCB3b3JrIGZvciBub3cKKyAgICBwcml2YXRlIFJ1bm5hYmxlIG1EaXNwYXRjaEZ1bmN0b3JzUnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBUaHJlYWRlZFJlbmRlcmVyLnBvc3RUb1JlbmRlclRocmVhZChtRnVuY3RvcnNSdW5uYWJsZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgY2xhc3MgRnVuY3RvcnNSdW5uYWJsZSBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgICAgICAgVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm87CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIGZpbmFsIEhhcmR3YXJlUmVuZGVyZXIgcmVuZGVyZXIgPSBhdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyOworICAgICAgICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwgfHwgIXJlbmRlcmVyLmlzRW5hYmxlZCgpIHx8IHJlbmRlcmVyICE9IG1Pd25pbmdSZW5kZXJlcikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoZWNrUmVuZGVyQ29udGV4dCgpICE9IFNVUkZBQ0VfU1RBVEVfRVJST1IpIHsKKyAgICAgICAgICAgICAgICBpbnQgc3RhdHVzID0gbUNhbnZhcy5pbnZva2VGdW5jdG9ycyhtUmVkcmF3Q2xpcCk7CisgICAgICAgICAgICAgICAgaGFuZGxlRnVuY3RvclN0YXR1cyhhdHRhY2hJbmZvLCBzdGF0dXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQHBhcmFtIGRpc3BsYXlMaXN0IFRoZSBkaXNwbGF5IGxpc3QgdG8gZHJhdworICAgICAqIEBwYXJhbSBhdHRhY2hJbmZvIEF0dGFjaEluZm8gdGllZCB0byB0aGUgc3BlY2lmaWVkIHZpZXcuCisgICAgICogQHBhcmFtIGNhbGxiYWNrcyBDYWxsYmFja3MgaW52b2tlZCB3aGVuIGRyYXdpbmcgaGFwcGVucy4KKyAgICAgKiBAcGFyYW0gZGlydHkgVGhlIGRpcnR5IHJlY3RhbmdsZSB0byB1cGRhdGUsIGNhbiBiZSBudWxsLgorICAgICAqLworICAgIHZvaWQgZHJhd0Rpc3BsYXlMaXN0KERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywKKyAgICAgICAgICAgIEhhcmR3YXJlRHJhd0NhbGxiYWNrcyBjYWxsYmFja3MsIFJlY3QgZGlydHkpIHsKKyAgICAgICAgaWYgKGNhbkRyYXcoKSkgeworICAgICAgICAgICAgaWYgKCFoYXNEaXJ0eVJlZ2lvbnMoKSkgeworICAgICAgICAgICAgICAgIGRpcnR5ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgaW50IHN1cmZhY2VTdGF0ZSA9IGNoZWNrUmVuZGVyQ29udGV4dCgpOworICAgICAgICAgICAgaWYgKHN1cmZhY2VTdGF0ZSAhPSBTVVJGQUNFX1NUQVRFX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgSGFyZHdhcmVDYW52YXMgY2FudmFzID0gbUNhbnZhczsKKworICAgICAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVMb2NrLmxvY2soKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkaXJ0eSA9IGJlZ2luRnJhbWUoY2FudmFzLCBkaXJ0eSwgc3VyZmFjZVN0YXRlKTsKKworICAgICAgICAgICAgICAgIGludCBzYXZlQ291bnQgPSAwOworICAgICAgICAgICAgICAgIGludCBzdGF0dXMgPSBEaXNwbGF5TGlzdC5TVEFUVVNfRE9ORTsKKworICAgICAgICAgICAgICAgIGxvbmcgc3RhcnQgPSBHTFJlbmRlcmVyLmdldFN5c3RlbVRpbWUoKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBwcmVwYXJlRnJhbWUoZGlydHkpOworCisgICAgICAgICAgICAgICAgICAgIHNhdmVDb3VudCA9IGNhbnZhcy5zYXZlKCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkhhcmR3YXJlUHJlRHJhdyhjYW52YXMpOworCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyB8PSBkb0RyYXdEaXNwbGF5TGlzdChhdHRhY2hJbmZvLCBjYW52YXMsIGRpc3BsYXlMaXN0LCBzdGF0dXMpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgZHJhd2luZzoiLCBlKTsKKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3Mub25IYXJkd2FyZVBvc3REcmF3KGNhbnZhcyk7CisgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChzYXZlQ291bnQpOworCisgICAgICAgICAgICAgICAgICAgIG1EcmF3RGVsdGEgPSBHTFJlbmRlcmVyLmdldFN5c3RlbVRpbWUoKSAtIHN0YXJ0OworCisgICAgICAgICAgICAgICAgICAgIGlmIChtRHJhd0RlbHRhID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUZyYW1lQ291bnQrKzsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdPdmVyZHJhdyhhdHRhY2hJbmZvLCBkaXJ0eSwgY2FudmFzLCBkaXNwbGF5TGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0RpcnR5UmVnaW9ucyhkaXJ0eSwgY2FudmFzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdQcm9maWxlRGF0YShhdHRhY2hJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG9uUG9zdERyYXcoKTsKKworICAgICAgICAgICAgICAgIHN3YXBCdWZmZXJzKHN0YXR1cyk7CisKKyAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlTG9jay51bmxvY2soKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhdHRhY2hJbmZvLm1JZ25vcmVEaXJ0eVN0YXRlID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGRyYXcoVmlldyB2aWV3LCBWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywgSGFyZHdhcmVEcmF3Q2FsbGJhY2tzIGNhbGxiYWNrcywKKyAgICAgICAgICAgIFJlY3QgZGlydHkpIHsKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBY2Nlc3NFcnJvcigpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkZWJ1Z092ZXJkcmF3KFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvLCBSZWN0IGRpcnR5LAorICAgICAgICAgICAgSGFyZHdhcmVDYW52YXMgY2FudmFzLCBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCkgeworCisgICAgICAgIGlmIChtRGVidWdPdmVyZHJhdyA9PSBPVkVSRFJBV19UWVBFX0NPVU5UKSB7CisgICAgICAgICAgICBpZiAobURlYnVnT3ZlcmRyYXdMYXllciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdMYXllciA9IGNyZWF0ZUhhcmR3YXJlTGF5ZXIobVdpZHRoLCBtSGVpZ2h0LCB0cnVlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobURlYnVnT3ZlcmRyYXdMYXllci5nZXRXaWR0aCgpICE9IG1XaWR0aCB8fAorICAgICAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyLmdldEhlaWdodCgpICE9IG1IZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyLnJlc2l6ZShtV2lkdGgsIG1IZWlnaHQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIW1EZWJ1Z092ZXJkcmF3TGF5ZXIuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXcgPSAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEhhcmR3YXJlQ2FudmFzIGxheWVyQ2FudmFzID0gbURlYnVnT3ZlcmRyYXdMYXllci5zdGFydChjYW52YXMsIGRpcnR5KTsKKyAgICAgICAgICAgIGNvdW50T3ZlcmRyYXcobGF5ZXJDYW52YXMpOworICAgICAgICAgICAgZmluYWwgaW50IHJlc3RvcmVDb3VudCA9IGxheWVyQ2FudmFzLnNhdmUoKTsKKyAgICAgICAgICAgIGxheWVyQ2FudmFzLmRyYXdEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCwgbnVsbCwgRGlzcGxheUxpc3QuRkxBR19DTElQX0NISUxEUkVOKTsKKyAgICAgICAgICAgIGxheWVyQ2FudmFzLnJlc3RvcmVUb0NvdW50KHJlc3RvcmVDb3VudCk7CisgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyLmVuZChjYW52YXMpOworCisgICAgICAgICAgICBmbG9hdCBvdmVyZHJhdyA9IGdldE92ZXJkcmF3KGxheWVyQ2FudmFzKTsKKyAgICAgICAgICAgIERpc3BsYXlNZXRyaWNzIG1ldHJpY3MgPSBhdHRhY2hJbmZvLm1Sb290Vmlldy5nZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpOworCisgICAgICAgICAgICBkcmF3T3ZlcmRyYXdDb3VudGVyKGNhbnZhcywgb3ZlcmRyYXcsIG1ldHJpY3MuZGVuc2l0eSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZHJhd092ZXJkcmF3Q291bnRlcihIYXJkd2FyZUNhbnZhcyBjYW52YXMsIGZsb2F0IG92ZXJkcmF3LCBmbG9hdCBkZW5zaXR5KSB7CisgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gU3RyaW5nLmZvcm1hdCgiJS4yZngiLCBvdmVyZHJhdyk7CisgICAgICAgIGZpbmFsIFBhaW50IHBhaW50ID0gc2V0dXBQYWludChkZW5zaXR5KTsKKyAgICAgICAgLy8gSFNCdG9Db2xvciB3aWxsIGNsYW1wIHRoZSB2YWx1ZXMgaW4gdGhlIDAuLjEgcmFuZ2UKKyAgICAgICAgcGFpbnQuc2V0Q29sb3IoQ29sb3IuSFNCdG9Db2xvcigwLjI4ZiAtIDAuMjhmICogb3ZlcmRyYXcgLyAzLjVmLCAwLjhmLCAxLjBmKSk7CisKKyAgICAgICAgY2FudmFzLmRyYXdUZXh0KHRleHQsIGRlbnNpdHkgKiA0LjBmLCBtSGVpZ2h0IC0gcGFpbnQuZ2V0Rm9udE1ldHJpY3MoKS5ib3R0b20sIHBhaW50KTsKKyAgICB9CisKKyAgICBwcml2YXRlIFBhaW50IHNldHVwUGFpbnQoZmxvYXQgZGVuc2l0eSkgeworICAgICAgICBpZiAobURlYnVnT3ZlcmRyYXdQYWludCA9PSBudWxsKSB7CisgICAgICAgICAgICBtRGVidWdPdmVyZHJhd1BhaW50ID0gbmV3IFBhaW50KCk7CisgICAgICAgICAgICBtRGVidWdPdmVyZHJhd1BhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3UGFpbnQuc2V0U2hhZG93TGF5ZXIoZGVuc2l0eSAqIDMuMGYsIDAuMGYsIDAuMGYsIDB4ZmYwMDAwMDApOworICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdQYWludC5zZXRUZXh0U2l6ZShkZW5zaXR5ICogMjAuMGYpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtRGVidWdPdmVyZHJhd1BhaW50OworICAgIH0KKworICAgIHByaXZhdGUgUmVjdCBiZWdpbkZyYW1lKEhhcmR3YXJlQ2FudmFzIGNhbnZhcywgUmVjdCBkaXJ0eSwgaW50IHN1cmZhY2VTdGF0ZSkgeworICAgICAgICAvLyBXZSBoYWQgdG8gY2hhbmdlIHRoZSBjdXJyZW50IHN1cmZhY2UgYW5kL29yIGNvbnRleHQsIHJlZHJhdyBldmVyeXRoaW5nCisgICAgICAgIGlmIChzdXJmYWNlU3RhdGUgPT0gU1VSRkFDRV9TVEFURV9VUERBVEVEKSB7CisgICAgICAgICAgICBkaXJ0eSA9IG51bGw7CisgICAgICAgICAgICBHTFJlbmRlcmVyLmJlZ2luRnJhbWUobnVsbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnRbXSBzaXplID0gbVN1cmZhY2VTaXplOworICAgICAgICAgICAgR0xSZW5kZXJlci5iZWdpbkZyYW1lKHNpemUpOworCisgICAgICAgICAgICBpZiAoc2l6ZVsxXSAhPSBtSGVpZ2h0IHx8IHNpemVbMF0gIT0gbVdpZHRoKSB7CisgICAgICAgICAgICAgICAgbVdpZHRoID0gc2l6ZVswXTsKKyAgICAgICAgICAgICAgICBtSGVpZ2h0ID0gc2l6ZVsxXTsKKworICAgICAgICAgICAgICAgIGNhbnZhcy5zZXRWaWV3cG9ydChtV2lkdGgsIG1IZWlnaHQpOworCisgICAgICAgICAgICAgICAgZGlydHkgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1EZWJ1Z0RhdGFQcm92aWRlciAhPSBudWxsKSBkaXJ0eSA9IG51bGw7CisKKyAgICAgICAgcmV0dXJuIGRpcnR5OworICAgIH0KKworICAgIHByaXZhdGUgaW50IHByZXBhcmVGcmFtZShSZWN0IGRpcnR5KSB7CisgICAgICAgIGludCBzdGF0dXM7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVHJhY2UuVFJBQ0VfVEFHX1ZJRVcsICJwcmVwYXJlRnJhbWUiKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0YXR1cyA9IG9uUHJlRHJhdyhkaXJ0eSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfVklFVyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBkb0RyYXdEaXNwbGF5TGlzdChWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywgSGFyZHdhcmVDYW52YXMgY2FudmFzLAorICAgICAgICAgICAgRGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIGludCBzdGF0dXMpIHsKKworICAgICAgICBsb25nIGRyYXdEaXNwbGF5TGlzdFN0YXJ0VGltZSA9IDA7CisgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIGRyYXdEaXNwbGF5TGlzdFN0YXJ0VGltZSA9IFN5c3RlbS5uYW5vVGltZSgpOworICAgICAgICB9CisKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfVklFVywgImRyYXdEaXNwbGF5TGlzdCIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RhdHVzIHw9IGNhbnZhcy5kcmF3RGlzcGxheUxpc3QoZGlzcGxheUxpc3QsIG1SZWRyYXdDbGlwLAorICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TGlzdC5GTEFHX0NMSVBfQ0hJTERSRU4pOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1ZJRVcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgeworICAgICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW0ubmFub1RpbWUoKTsKKyAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gKG5vdyAtIGRyYXdEaXNwbGF5TGlzdFN0YXJ0VGltZSkgKiAwLjAwMDAwMWY7CisgICAgICAgICAgICBtUHJvZmlsZURhdGFbbVByb2ZpbGVDdXJyZW50RnJhbWUgKyAxXSA9IHRvdGFsOworICAgICAgICB9CisKKyAgICAgICAgaGFuZGxlRnVuY3RvclN0YXR1cyhhdHRhY2hJbmZvLCBzdGF0dXMpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzd2FwQnVmZmVycyhpbnQgc3RhdHVzKSB7CisgICAgICAgIGlmICgoc3RhdHVzICYgRGlzcGxheUxpc3QuU1RBVFVTX0RSRVcpID09IERpc3BsYXlMaXN0LlNUQVRVU19EUkVXKSB7CisgICAgICAgICAgICBsb25nIGVnbFN3YXBCdWZmZXJzU3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBlZ2xTd2FwQnVmZmVyc1N0YXJ0VGltZSA9IFN5c3RlbS5uYW5vVGltZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXN3YXBCdWZmZXJzKG1OYXRpdmVDYW52YXNDb250ZXh0KSkgeworICAgICAgICAgICAgICAgIHRyaWdnZXJTb2Z0d2FyZUZhbGxiYWNrKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtU3VyZmFjZVVwZGF0ZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGxvbmcgbm93ID0gU3lzdGVtLm5hbm9UaW1lKCk7CisgICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSAobm93IC0gZWdsU3dhcEJ1ZmZlcnNTdGFydFRpbWUpICogMC4wMDAwMDFmOworICAgICAgICAgICAgICAgIG1Qcm9maWxlRGF0YVttUHJvZmlsZUN1cnJlbnRGcmFtZSArIDJdID0gdG90YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGVidWdEaXJ0eVJlZ2lvbnMoUmVjdCBkaXJ0eSwgSGFyZHdhcmVDYW52YXMgY2FudmFzKSB7CisgICAgICAgIGlmIChtRGVidWdEaXJ0eVJlZ2lvbnMpIHsKKyAgICAgICAgICAgIGlmIChtRGVidWdQYWludCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbURlYnVnUGFpbnQgPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgICAgICAgICBtRGVidWdQYWludC5zZXRDb2xvcigweDdmZmYwMDAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRpcnR5ICE9IG51bGwgJiYgKG1GcmFtZUNvdW50ICYgMSkgPT0gMCkgeworICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3UmVjdChkaXJ0eSwgbURlYnVnUGFpbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUZ1bmN0b3JTdGF0dXMoZmluYWwgVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIGludCBzdGF0dXMpIHsKKyAgICAgICAgLy8gSWYgdGhlIGRyYXcgZmxhZyBpcyBzZXQsIGZ1bmN0b3JzIHdpbGwgYmUgaW52b2tlZCB3aGlsZSBleGVjdXRpbmcKKyAgICAgICAgLy8gdGhlIHRyZWUgb2YgZGlzcGxheSBsaXN0cworICAgICAgICBpZiAoKHN0YXR1cyAmIERpc3BsYXlMaXN0LlNUQVRVU19EUkFXKSAhPSAwKSB7CisgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UganVzdCByZS1xdWV1ZSBvdXJzZWx2ZXMgdXAgdG8gZHJhdyBuZXh0IGZyYW1lIGluc3RlYWQKKyAgICAgICAgICAgIC8vIG9mIGJvdW5jaW5nIGJhY2sgdG8gdGhlIFVJIHRocmVhZD8KKyAgICAgICAgICAgIC8vIFRPRE86IFJlc3BlY3QgbVJlZHJhd0NsaXAgLSBmb3Igbm93IGp1c3QgZnVsbCBpbnZhbAorICAgICAgICAgICAgYXR0YWNoSW5mby5tSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubVZpZXdSb290SW1wbC5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBtUmVkcmF3Q2xpcC5zZXRFbXB0eSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChzdGF0dXMgJiBEaXNwbGF5TGlzdC5TVEFUVVNfSU5WT0tFKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tSGFuZGxlci5oYXNDYWxsYmFja3MobURpc3BhdGNoRnVuY3RvcnNSdW5uYWJsZSkpIHsKKyAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKG1EaXNwYXRjaEZ1bmN0b3JzUnVubmFibGUpOworICAgICAgICAgICAgbUZ1bmN0b3JzUnVubmFibGUuYXR0YWNoSW5mbyA9IGF0dGFjaEluZm87CisgICAgICAgICAgICBhdHRhY2hJbmZvLm1IYW5kbGVyLnBvc3REZWxheWVkKG1EaXNwYXRjaEZ1bmN0b3JzUnVubmFibGUsIEZVTkNUT1JfUFJPQ0VTU19ERUxBWSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGRldGFjaEZ1bmN0b3IoaW50IGZ1bmN0b3IpIHsKKyAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgeworICAgICAgICAgICAgbUNhbnZhcy5kZXRhY2hGdW5jdG9yKGZ1bmN0b3IpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgYm9vbGVhbiBhdHRhY2hGdW5jdG9yKFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvLCBpbnQgZnVuY3RvcikgeworICAgICAgICBpZiAobUNhbnZhcyAhPSBudWxsKSB7CisgICAgICAgICAgICBtQ2FudmFzLmF0dGFjaEZ1bmN0b3IoZnVuY3Rvcik7CisgICAgICAgICAgICBtRnVuY3RvcnNSdW5uYWJsZS5hdHRhY2hJbmZvID0gYXR0YWNoSW5mbzsKKyAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKG1EaXNwYXRjaEZ1bmN0b3JzUnVubmFibGUpOworICAgICAgICAgICAgYXR0YWNoSW5mby5tSGFuZGxlci5wb3N0RGVsYXllZChtRGlzcGF0Y2hGdW5jdG9yc1J1bm5hYmxlLCAgMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5zdXJlcyB0aGUgY3VycmVudCBFR0wgY29udGV4dCBhbmQgc3VyZmFjZSBhcmUgdGhlIG9uZXMgd2UgZXhwZWN0LgorICAgICAqIFRoaXMgbWV0aG9kIHRocm93cyBhbiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgaW52b2tlZCBmcm9tIGEgdGhyZWFkCisgICAgICogdGhhdCBkaWQgbm90IGluaXRpYWxpemUgRUdMLgorICAgICAqCisgICAgICogQHJldHVybiB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfRVJST1J9IGlmIHRoZSBjb3JyZWN0IEVHTCBjb250ZXh0IGNhbm5vdCBiZSBtYWRlIGN1cnJlbnQsCisgICAgICogICAgICAgICB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfVVBEQVRFRH0gaWYgdGhlIEVHTCBjb250ZXh0IHdhcyBjaGFuZ2VkIG9yCisgICAgICogICAgICAgICB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfU1VDQ0VTU30gaWYgdGhlIEVHTCBjb250ZXh0IHdhcyB0aGUgY29ycmVjdCBvbmUKKyAgICAgKgorICAgICAqIEBzZWUgI2NoZWNrUmVuZGVyQ29udGV4dFVuc2FmZSgpCisgICAgICovCisgICAgaW50IGNoZWNrUmVuZGVyQ29udGV4dCgpIHsKKyAgICAgICAgaWYgKCFtYWtlQ3VycmVudChtTmF0aXZlQ2FudmFzQ29udGV4dCkpIHsKKyAgICAgICAgICAgIHRyaWdnZXJTb2Z0d2FyZUZhbGxiYWNrKCk7CisgICAgICAgICAgICByZXR1cm4gU1VSRkFDRV9TVEFURV9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbVN1cmZhY2VVcGRhdGVkID8gU1VSRkFDRV9TVEFURV9VUERBVEVEIDogU1VSRkFDRV9TVEFURV9TVUNDRVNTOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGludCBkcFRvUHgoaW50IGRwLCBmbG9hdCBkZW5zaXR5KSB7CisgICAgICAgIHJldHVybiAoaW50KSAoZHAgKiBkZW5zaXR5ICsgMC41Zik7CisgICAgfQorCisgICAgY2xhc3MgRHJhd1BlcmZvcm1hbmNlRGF0YVByb3ZpZGVyIGV4dGVuZHMgR3JhcGhEYXRhUHJvdmlkZXIgeworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtR3JhcGhUeXBlOworCisgICAgICAgIHByaXZhdGUgaW50IG1WZXJ0aWNhbFVuaXQ7CisgICAgICAgIHByaXZhdGUgaW50IG1Ib3Jpem9udGFsVW5pdDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUhvcml6b250YWxNYXJnaW47CisgICAgICAgIHByaXZhdGUgaW50IG1UaHJlc2hvbGRTdHJva2U7CisKKyAgICAgICAgRHJhd1BlcmZvcm1hbmNlRGF0YVByb3ZpZGVyKGludCBncmFwaFR5cGUpIHsKKyAgICAgICAgICAgIG1HcmFwaFR5cGUgPSBncmFwaFR5cGU7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBwcmVwYXJlKERpc3BsYXlNZXRyaWNzIG1ldHJpY3MpIHsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IGRlbnNpdHkgPSBtZXRyaWNzLmRlbnNpdHk7CisKKyAgICAgICAgICAgIG1WZXJ0aWNhbFVuaXQgPSBkcFRvUHgoUFJPRklMRV9EUkFXX0RQX1BFUl9NUywgZGVuc2l0eSk7CisgICAgICAgICAgICBtSG9yaXpvbnRhbFVuaXQgPSBkcFRvUHgoUFJPRklMRV9EUkFXX1dJRFRILCBkZW5zaXR5KTsKKyAgICAgICAgICAgIG1Ib3Jpem9udGFsTWFyZ2luID0gZHBUb1B4KFBST0ZJTEVfRFJBV19NQVJHSU4sIGRlbnNpdHkpOworICAgICAgICAgICAgbVRocmVzaG9sZFN0cm9rZSA9IGRwVG9QeChQUk9GSUxFX0RSQVdfVEhSRVNIT0xEX1NUUk9LRV9XSURUSCwgZGVuc2l0eSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgaW50IGdldEdyYXBoVHlwZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtR3JhcGhUeXBlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIGludCBnZXRWZXJ0aWNhbFVuaXRTaXplKCkgeworICAgICAgICAgICAgcmV0dXJuIG1WZXJ0aWNhbFVuaXQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgaW50IGdldEhvcml6b250YWxVbml0U2l6ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtSG9yaXpvbnRhbFVuaXQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgaW50IGdldEhvcml6b250YVVuaXRNYXJnaW4oKSB7CisgICAgICAgICAgICByZXR1cm4gbUhvcml6b250YWxNYXJnaW47CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgZmxvYXRbXSBnZXREYXRhKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Qcm9maWxlRGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBmbG9hdCBnZXRUaHJlc2hvbGQoKSB7CisgICAgICAgICAgICByZXR1cm4gMTY7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgaW50IGdldEZyYW1lQ291bnQoKSB7CisgICAgICAgICAgICByZXR1cm4gbVByb2ZpbGVEYXRhLmxlbmd0aCAvIFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBpbnQgZ2V0RWxlbWVudENvdW50KCkgeworICAgICAgICAgICAgcmV0dXJuIFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBpbnQgZ2V0Q3VycmVudEZyYW1lKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Qcm9maWxlQ3VycmVudEZyYW1lIC8gUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgc2V0dXBHcmFwaFBhaW50KFBhaW50IHBhaW50LCBpbnQgZWxlbWVudEluZGV4KSB7CisgICAgICAgICAgICBwYWludC5zZXRDb2xvcihQUk9GSUxFX0RSQVdfQ09MT1JTW2VsZW1lbnRJbmRleF0pOworICAgICAgICAgICAgaWYgKG1HcmFwaFR5cGUgPT0gR1JBUEhfVFlQRV9MSU5FUykgcGFpbnQuc2V0U3Ryb2tlV2lkdGgobVRocmVzaG9sZFN0cm9rZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBzZXR1cFRocmVzaG9sZFBhaW50KFBhaW50IHBhaW50KSB7CisgICAgICAgICAgICBwYWludC5zZXRDb2xvcihQUk9GSUxFX0RSQVdfVEhSRVNIT0xEX0NPTE9SKTsKKyAgICAgICAgICAgIHBhaW50LnNldFN0cm9rZVdpZHRoKG1UaHJlc2hvbGRTdHJva2UpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgc2V0dXBDdXJyZW50RnJhbWVQYWludChQYWludCBwYWludCkgeworICAgICAgICAgICAgcGFpbnQuc2V0Q29sb3IoUFJPRklMRV9EUkFXX0NVUlJFTlRfRlJBTUVfQ09MT1IpOworICAgICAgICAgICAgaWYgKG1HcmFwaFR5cGUgPT0gR1JBUEhfVFlQRV9MSU5FUykgcGFpbnQuc2V0U3Ryb2tlV2lkdGgobVRocmVzaG9sZFN0cm9rZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgbmF0aXZlIGxvbmcgY3JlYXRlQ29udGV4dCgpOworICAgIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiB1c2VQQnVmZmVyU3VyZmFjZSgpOworICAgIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBzZXRTdXJmYWNlKGxvbmcgbmF0aXZlQ2FudmFzQ29udGV4dCwgU3VyZmFjZSBzdXJmYWNlKTsKKyAgICBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gc3dhcEJ1ZmZlcnMobG9uZyBuYXRpdmVDYW52YXNDb250ZXh0KTsKKyAgICBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbWFrZUN1cnJlbnQobG9uZyBuYXRpdmVDYW52YXNDb250ZXh0KTsKKyAgICBzdGF0aWMgbmF0aXZlIHZvaWQgZGVzdHJveUNvbnRleHQobG9uZyBuYXRpdmVDYW52YXNDb250ZXh0KTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlLmphdmEKaW5kZXggMWJmZGEyZC4uYTI3NzVkNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLnZpZXc7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29tcGF0aWJpbGl0eUluZm8uVHJhbnNsYXRvcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeDsKQEAgLTI0LDYgKzI1LDEwIEBACiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OworCiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5DbG9zZUd1YXJkOwogCiAvKioKQEAgLTgwLDYgKzg1LDExIEBACiAgICAgLy8gbm9uIGNvbXBhdGliaWxpdHkgbW9kZS4KICAgICBwcml2YXRlIE1hdHJpeCBtQ29tcGF0aWJsZU1hdHJpeDsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoe1JPVEFUSU9OXzAsIFJPVEFUSU9OXzkwLCBST1RBVElPTl8xODAsIFJPVEFUSU9OXzI3MH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFJvdGF0aW9uIHt9CisKICAgICAvKioKICAgICAgKiBSb3RhdGlvbiBjb25zdGFudDogMCBkZWdyZWUgcm90YXRpb24gKG5hdHVyYWwgb3JpZW50YXRpb24pCiAgICAgICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1N1cmZhY2VDb250cm9sLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1N1cmZhY2VDb250cm9sLmphdmEKaW5kZXggYTA2YTIwYi4uOTE0YTVjYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlQ29udHJvbC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZUNvbnRyb2wuamF2YQpAQCAtMjIsNyArMjIsNiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVnaW9uOwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZS5PdXRPZlJlc291cmNlc0V4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlVmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlVmlldy5qYXZhCmluZGV4IDIyZDRjOWIuLjY1ZDNmNmQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZVZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1N1cmZhY2VWaWV3LmphdmEKQEAgLTE4OCw4ICsxODgsMTMgQEAKICAgICAgICAgaW5pdCgpOwogICAgIH0KIAotICAgIHB1YmxpYyBTdXJmYWNlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFN1cmZhY2VWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIpOworICAgICAgICBpbml0KCk7CisgICAgfQorCisgICAgcHVibGljIFN1cmZhY2VWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBpbml0KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1RleHR1cmVWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1RleHR1cmVWaWV3LmphdmEKaW5kZXggNDdmNzYyOC4uYmY4MTgxMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9UZXh0dXJlVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVGV4dHVyZVZpZXcuamF2YQpAQCAtMTU2LDE0ICsxNTYsMzIgQEAKICAgICAgKiAKICAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBhc3NvY2lhdGUgdGhpcyB2aWV3IHdpdGguCiAgICAgICogQHBhcmFtIGF0dHJzIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBYTUwgdGFnIHRoYXQgaXMgaW5mbGF0aW5nIHRoZSB2aWV3LgotICAgICAqIEBwYXJhbSBkZWZTdHlsZSBUaGUgZGVmYXVsdCBzdHlsZSB0byBhcHBseSB0byB0aGlzIHZpZXcuIElmIDAsIG5vIHN0eWxlCi0gICAgICogICAgICAgIHdpbGwgYmUgYXBwbGllZCAoYmV5b25kIHdoYXQgaXMgaW5jbHVkZWQgaW4gdGhlIHRoZW1lKS4gVGhpcyBtYXkKLSAgICAgKiAgICAgICAgZWl0aGVyIGJlIGFuIGF0dHJpYnV0ZSByZXNvdXJjZSwgd2hvc2UgdmFsdWUgd2lsbCBiZSByZXRyaWV2ZWQKLSAgICAgKiAgICAgICAgZnJvbSB0aGUgY3VycmVudCB0aGVtZSwgb3IgYW4gZXhwbGljaXQgc3R5bGUgcmVzb3VyY2UuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCiAgICAgICovCiAgICAgQFN1cHByZXNzV2FybmluZ3MoeyJVbnVzZWREZWNsYXJhdGlvbiJ9KQotICAgIHB1YmxpYyBUZXh0dXJlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFRleHR1cmVWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIpOworICAgICAgICBpbml0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBUZXh0dXJlVmlldy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGFzc29jaWF0ZSB0aGlzIHZpZXcgd2l0aC4KKyAgICAgKiBAcGFyYW0gYXR0cnMgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIFhNTCB0YWcgdGhhdCBpcyBpbmZsYXRpbmcgdGhlIHZpZXcuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICogQHBhcmFtIGRlZlN0eWxlUmVzIEEgcmVzb3VyY2UgaWRlbnRpZmllciBvZiBhIHN0eWxlIHJlc291cmNlIHRoYXQKKyAgICAgKiAgICAgICAgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB2aWV3LCB1c2VkIG9ubHkgaWYKKyAgICAgKiAgICAgICAgZGVmU3R5bGVBdHRyIGlzIDAgb3IgY2FuIG5vdCBiZSBmb3VuZCBpbiB0aGUgdGhlbWUuIENhbiBiZSAwCisgICAgICogICAgICAgIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKi8KKyAgICBAU3VwcHJlc3NXYXJuaW5ncyh7IlVudXNlZERlY2xhcmF0aW9uIn0pCisgICAgcHVibGljIFRleHR1cmVWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBpbml0KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1RocmVhZGVkUmVuZGVyZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVGhyZWFkZWRSZW5kZXJlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZDFiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1RocmVhZGVkUmVuZGVyZXIuamF2YQpAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC52aWV3OworCitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7CitpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLm9zLlRyYWNlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2UuT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuQXR0YWNoSW5mbzsKKworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworCisvKioKKyAqIEhhcmR3YXJlIHJlbmRlcmVyIHRoYXQgcHJveGllcyB0aGUgcmVuZGVyaW5nIHRvIGEgcmVuZGVyIHRocmVhZC4gTW9zdCBjYWxscworICogYXJlIHN5bmNocm9ub3VzLCBob3dldmVyIGEgZmV3IHN1Y2ggYXMgZHJhdygpIGFyZSBwb3N0ZWQgYXN5bmMuIFRoZSBkaXNwbGF5IGxpc3QKKyAqIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28gdGhyZWFkcyBhbmQgaXMgZ3VhcmRlZCBieSBhIHRvcCBsZXZlbCBsb2NrLgorICoKKyAqIFRoZSBVSSB0aHJlYWQgY2FuIGJsb2NrIG9uIHRoZSBSZW5kZXJUaHJlYWQsIGJ1dCBSZW5kZXJUaHJlYWQgbXVzdCBuZXZlcgorICogYmxvY2sgb24gdGhlIFVJIHRocmVhZC4KKyAqCisgKiBOb3RlIHRoYXQgYWx0aG91Z2ggY3VycmVudGx5IHRoZSBFR0wgY29udGV4dCAmIHN1cmZhY2VzIGFyZSBjcmVhdGVkICYgbWFuYWdlZAorICogYnkgdGhlIHJlbmRlciB0aHJlYWQsIHRoZSBnb2FsIGlzIHRvIG1vdmUgdGhhdCBpbnRvIGEgc2hhcmVkIHN0cnVjdHVyZSB0aGF0IGNhbgorICogYmUgbWFuYWdlZCBieSBib3RoIHRocmVhZHMuIEVHTFN1cmZhY2UgY3JlYXRpb24gJiBkZWxldGlvbiBzaG91bGQgaWRlYWxseSBiZQorICogZG9uZSBvbiB0aGUgVUkgdGhyZWFkIGFuZCBub3QgdGhlIFJlbmRlclRocmVhZCB0byBhdm9pZCBzdGFsbGluZyB0aGUKKyAqIFJlbmRlclRocmVhZCB3aXRoIHN1cmZhY2UgYnVmZmVyIGFsbG9jYXRpb24uCisgKgorICogQGhpZGUKKyAqLworcHVibGljIGNsYXNzIFRocmVhZGVkUmVuZGVyZXIgZXh0ZW5kcyBIYXJkd2FyZVJlbmRlcmVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HVEFHID0gIlRocmVhZGVkUmVuZGVyZXIiOworCisgICAgQFN1cHByZXNzV2FybmluZ3MoInNlcmlhbCIpCisgICAgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBNZXRob2Q+IHNNZXRob2RMdXQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1ldGhvZD4oKSB7eworICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gUmVtb3RlR0xSZW5kZXJlci5jbGFzcy5nZXREZWNsYXJlZE1ldGhvZHMoKTsKKyAgICAgICAgZm9yIChNZXRob2QgbSA6IG1ldGhvZHMpIHsKKyAgICAgICAgICAgIG0uc2V0QWNjZXNzaWJsZSh0cnVlKTsKKyAgICAgICAgICAgIHB1dChtLmdldE5hbWUoKSArICI6IiArIG0uZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGgsIG0pOworICAgICAgICB9CisgICAgfX07CisgICAgc3RhdGljIGJvb2xlYW4gc05lZWRzSW5pdCA9IHRydWU7CisKKyAgICBwcml2YXRlIFJlbW90ZUdMUmVuZGVyZXIgbVJlbW90ZVJlbmRlcmVyOworICAgIHByaXZhdGUgaW50IG1XaWR0aCwgbUhlaWdodDsKKyAgICBwcml2YXRlIFJUSm9iIG1QcmV2aW91c0RyYXc7CisKKyAgICBUaHJlYWRlZFJlbmRlcmVyKGJvb2xlYW4gdHJhbnNsdWNlbnQpIHsKKyAgICAgICAgbVJlbW90ZVJlbmRlcmVyID0gbmV3IFJlbW90ZUdMUmVuZGVyZXIodGhpcywgdHJhbnNsdWNlbnQpOworICAgICAgICBzZXRFbmFibGVkKHRydWUpOworICAgICAgICBpZiAoc05lZWRzSW5pdCkgeworICAgICAgICAgICAgc05lZWRzSW5pdCA9IGZhbHNlOworICAgICAgICAgICAgcG9zdFRvUmVuZGVyVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEhhY2sgdG8gYWxsb3cgR0xSZW5kZXJlciB0byBjcmVhdGUgYSBoYW5kbGVyIHRvIHBvc3QgdGhlIEVHTAorICAgICAgICAgICAgICAgICAgICAvLyBkZXN0cnVjdGlvbiB0bywgYWx0aG91Z2ggaXQnbGwgbmV2ZXIgcnVuCisgICAgICAgICAgICAgICAgICAgIExvb3Blci5wcmVwYXJlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGRlc3Ryb3koYm9vbGVhbiBmdWxsKSB7CisgICAgICAgIHJ1bigiZGVzdHJveSIsIGZ1bGwpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGJvb2xlYW4gaW5pdGlhbGl6ZShTdXJmYWNlIHN1cmZhY2UpIHRocm93cyBPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiAoQm9vbGVhbikgcnVuKCJpbml0aWFsaXplIiwgc3VyZmFjZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCB1cGRhdGVTdXJmYWNlKFN1cmZhY2Ugc3VyZmFjZSkgdGhyb3dzIE91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIHsKKyAgICAgICAgcG9zdCgidXBkYXRlU3VyZmFjZSIsIHN1cmZhY2UpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZGVzdHJveUxheWVycyhWaWV3IHZpZXcpIHsKKyAgICAgICAgdGhyb3cgbmV3IE5vU3VjaE1ldGhvZEVycm9yKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBkZXN0cm95SGFyZHdhcmVSZXNvdXJjZXMoVmlldyB2aWV3KSB7CisgICAgICAgIHJ1bigiZGVzdHJveUhhcmR3YXJlUmVzb3VyY2VzIiwgdmlldyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBpbnZhbGlkYXRlKFN1cmZhY2Ugc3VyZmFjZSkgeworICAgICAgICBwb3N0KCJpbnZhbGlkYXRlIiwgc3VyZmFjZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKyAgICAgICAgLy8gVE9ETyBSZW1vdmUgdXNlcnMgb2YgdGhpcyBBUEkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGJvb2xlYW4gc2FmZWx5UnVuKFJ1bm5hYmxlIGFjdGlvbikgeworICAgICAgICByZXR1cm4gKEJvb2xlYW4pIHJ1bigic2FmZWx5UnVuIiwgYWN0aW9uKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIHNldHVwKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICBtV2lkdGggPSB3aWR0aDsKKyAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgcG9zdCgic2V0dXAiLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBpbnQgZ2V0V2lkdGgoKSB7CisgICAgICAgIHJldHVybiBtV2lkdGg7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgaW50IGdldEhlaWdodCgpIHsKKyAgICAgICAgcmV0dXJuIG1IZWlnaHQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBkdW1wR2Z4SW5mbyhQcmludFdyaXRlciBwdykgeworICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgbG9uZyBnZXRGcmFtZUNvdW50KCkgeworICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGJvb2xlYW4gbG9hZFN5c3RlbVByb3BlcnRpZXMoKSB7CisgICAgICAgIHJldHVybiAoQm9vbGVhbikgcnVuKCJsb2FkU3lzdGVtUHJvcGVydGllcyIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgcHVzaExheWVyVXBkYXRlKEhhcmR3YXJlTGF5ZXIgbGF5ZXIpIHsKKyAgICAgICAgdGhyb3cgbmV3IE5vU3VjaE1ldGhvZEVycm9yKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBjYW5jZWxMYXllclVwZGF0ZShIYXJkd2FyZUxheWVyIGxheWVyKSB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hNZXRob2RFcnJvcigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZmx1c2hMYXllclVwZGF0ZXMoKSB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hNZXRob2RFcnJvcigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRPRE86IFJlbW92ZQorICAgICAqIFRlbXBvcmFyeSBoYWNrIHRvIGFsbG93IFJlbmRlclRocmVhZFRlc3QgcHJvdG90eXBlIGFwcCB0byB0cmlnZ2VyCisgICAgICogcmVwbGF5aW5nIGEgRGlzcGxheUxpc3QgYWZ0ZXIgbW9kaWZ5aW5nIHRoZSBkaXNwbGF5bGlzdCBwcm9wZXJ0aWVzCisgICAgICoKKyAgICAgKiAgQGhpZGUgKi8KKyAgICBwdWJsaWMgdm9pZCByZXBlYXRMYXN0RHJhdygpIHsKKyAgICAgICAgaWYgKG1QcmV2aW91c0RyYXcgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhlcmUgaXNuJ3QgYSBwcmV2aW91cyBkcmF3Iik7CisgICAgICAgIH0KKyAgICAgICAgc3luY2hyb25pemVkIChtUHJldmlvdXNEcmF3KSB7CisgICAgICAgICAgICBtUHJldmlvdXNEcmF3LmNvbXBsZXRlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1QcmV2aW91c0RyYXcuYXJnc1szXSA9IG51bGw7CisgICAgICAgIHBvc3RUb1JlbmRlclRocmVhZChtUHJldmlvdXNEcmF3KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGRyYXcoVmlldyB2aWV3LCBBdHRhY2hJbmZvIGF0dGFjaEluZm8sIEhhcmR3YXJlRHJhd0NhbGxiYWNrcyBjYWxsYmFja3MsIFJlY3QgZGlydHkpIHsKKyAgICAgICAgcmVxdWlyZUNvbXBsZXRpb24obVByZXZpb3VzRHJhdyk7CisKKyAgICAgICAgYXR0YWNoSW5mby5tSWdub3JlRGlydHlTdGF0ZSA9IHRydWU7CisgICAgICAgIGF0dGFjaEluZm8ubURyYXdpbmdUaW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7CisgICAgICAgIHZpZXcubVByaXZhdGVGbGFncyB8PSBWaWV3LlBGTEFHX0RSQVdOOworCisgICAgICAgIHZpZXcubVJlY3JlYXRlRGlzcGxheUxpc3QgPSAodmlldy5tUHJpdmF0ZUZsYWdzICYgVmlldy5QRkxBR19JTlZBTElEQVRFRCkKKyAgICAgICAgICAgICAgICA9PSBWaWV3LlBGTEFHX0lOVkFMSURBVEVEOworICAgICAgICB2aWV3Lm1Qcml2YXRlRmxhZ3MgJj0gflZpZXcuUEZMQUdfSU5WQUxJREFURUQ7CisKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfVklFVywgImdldERpc3BsYXlMaXN0Iik7CisgICAgICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0ID0gdmlldy5nZXREaXNwbGF5TGlzdCgpOworICAgICAgICBUcmFjZS50cmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfVklFVyk7CisKKyAgICAgICAgdmlldy5tUmVjcmVhdGVEaXNwbGF5TGlzdCA9IGZhbHNlOworCisgICAgICAgIG1QcmV2aW91c0RyYXcgPSBwb3N0KCJkcmF3RGlzcGxheUxpc3QiLCBkaXNwbGF5TGlzdCwgYXR0YWNoSW5mbywKKyAgICAgICAgICAgICAgICBjYWxsYmFja3MsIGRpcnR5KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBIYXJkd2FyZUxheWVyIGNyZWF0ZUhhcmR3YXJlTGF5ZXIoYm9vbGVhbiBpc09wYXF1ZSkgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoTWV0aG9kRXJyb3IoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBIYXJkd2FyZUxheWVyIGNyZWF0ZUhhcmR3YXJlTGF5ZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sZWFuIGlzT3BhcXVlKSB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hNZXRob2RFcnJvcigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIFN1cmZhY2VUZXh0dXJlIGNyZWF0ZVN1cmZhY2VUZXh0dXJlKEhhcmR3YXJlTGF5ZXIgbGF5ZXIpIHsKKyAgICAgICAgdGhyb3cgbmV3IE5vU3VjaE1ldGhvZEVycm9yKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBzZXRTdXJmYWNlVGV4dHVyZShIYXJkd2FyZUxheWVyIGxheWVyLCBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSkgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoTWV0aG9kRXJyb3IoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGRldGFjaEZ1bmN0b3IoaW50IGZ1bmN0b3IpIHsKKyAgICAgICAgcnVuKCJkZXRhY2hGdW5jdG9yIiwgZnVuY3Rvcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgYm9vbGVhbiBhdHRhY2hGdW5jdG9yKEF0dGFjaEluZm8gYXR0YWNoSW5mbywgaW50IGZ1bmN0b3IpIHsKKyAgICAgICAgcmV0dXJuIChCb29sZWFuKSBydW4oImF0dGFjaEZ1bmN0b3IiLCBhdHRhY2hJbmZvLCBmdW5jdG9yKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgcG9zdCgic2V0TmFtZSIsIG5hbWUpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcmVxdWlyZUNvbXBsZXRpb24oUlRKb2Igam9iKSB7CisgICAgICAgIGlmIChqb2IgIT0gbnVsbCkgeworICAgICAgICAgICAgc3luY2hyb25pemVkIChqb2IpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWpvYi5jb21wbGV0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpvYi53YWl0KCk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBSVEpvYiBwb3N0KFN0cmluZyBtZXRob2QsIE9iamVjdC4uLiBhcmdzKSB7CisgICAgICAgIFJUSm9iIGpvYiA9IG5ldyBSVEpvYigpOworICAgICAgICBqb2IubWV0aG9kID0gc01ldGhvZEx1dC5nZXQobWV0aG9kICsgIjoiICsgYXJncy5sZW5ndGgpOworICAgICAgICBqb2IuYXJncyA9IGFyZ3M7CisgICAgICAgIGpvYi50YXJnZXQgPSBtUmVtb3RlUmVuZGVyZXI7CisgICAgICAgIGlmIChqb2IubWV0aG9kID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigiQ291bGRuJ3QgZmluZCBtZXRob2Q6ICIgKyBtZXRob2QpOworICAgICAgICB9CisgICAgICAgIHBvc3RUb1JlbmRlclRocmVhZChqb2IpOworICAgICAgICByZXR1cm4gam9iOworICAgIH0KKworICAgIHByaXZhdGUgT2JqZWN0IHJ1bihTdHJpbmcgbWV0aG9kLCBPYmplY3QuLi4gYXJncykgeworICAgICAgICBSVEpvYiBqb2IgPSBuZXcgUlRKb2IoKTsKKyAgICAgICAgam9iLm1ldGhvZCA9IHNNZXRob2RMdXQuZ2V0KG1ldGhvZCArICI6IiArIGFyZ3MubGVuZ3RoKTsKKyAgICAgICAgam9iLmFyZ3MgPSBhcmdzOworICAgICAgICBqb2IudGFyZ2V0ID0gbVJlbW90ZVJlbmRlcmVyOworICAgICAgICBpZiAoam9iLm1ldGhvZCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oIkNvdWxkbid0IGZpbmQgbWV0aG9kOiAiICsgbWV0aG9kKTsKKyAgICAgICAgfQorICAgICAgICBzeW5jaHJvbml6ZWQgKGpvYikgeworICAgICAgICAgICAgcG9zdFRvUmVuZGVyVGhyZWFkKGpvYik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGpvYi53YWl0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpvYi5yZXQ7CisgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgUlRKb2IgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgICAgICAgIE1ldGhvZCBtZXRob2Q7CisgICAgICAgIE9iamVjdFtdIGFyZ3M7CisgICAgICAgIE9iamVjdCB0YXJnZXQ7CisgICAgICAgIE9iamVjdCByZXQ7CisgICAgICAgIGJvb2xlYW4gY29tcGxldGVkID0gZmFsc2U7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0ID0gbWV0aG9kLmludm9rZSh0YXJnZXQsIGFyZ3MpOworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub3RpZnkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy5lKExPR1RBRywgIkZhaWxlZCB0byBpbnZva2U6ICIgKyBtZXRob2QuZ2V0TmFtZSgpLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgcG9zdFRvUmVuZGVyVGhyZWFkKFJ1bm5hYmxlIHJ1bm5hYmxlKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3LmphdmEKaW5kZXggYjBiYWU0Ni4uNTJiMWIzOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3LmphdmEKQEAgLTE2LDYgKzE2LDkgQEAKIAogcGFja2FnZSBhbmRyb2lkLnZpZXc7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ2xpcERhdGE7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwpAQCAtODMsOSArODYsMTIgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlZGljYXRlOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5NZW51QnVpbGRlcjsKKwogaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5jb2xsZWN0Lkxpc3RzOwogaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5jb2xsZWN0Lk1hcHM7CiAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OwogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwpAQCAtNjY2LDYgKzY3Miw3IEBACiAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNWaWV3X3RyYW5zZm9ybVBpdm90WQogICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjVmlld190cmFuc2xhdGlvblgKICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI1ZpZXdfdHJhbnNsYXRpb25ZCisgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNWaWV3X3RyYW5zbGF0aW9uWgogICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjVmlld192aXNpYmlsaXR5CiAgKgogICogQHNlZSBhbmRyb2lkLnZpZXcuVmlld0dyb3VwCkBAIC03MjksNiArNzM2LDExIEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJVFNfU1lTVEVNX1dJTkRPV1MgPSAweDAwMDAwMDAyOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7VklTSUJMRSwgSU5WSVNJQkxFLCBHT05FfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgVmlzaWJpbGl0eSB7fQorCiAgICAgLyoqCiAgICAgICogVGhpcyB2aWV3IGlzIHZpc2libGUuCiAgICAgICogVXNlIHdpdGgge0BsaW5rICNzZXRWaXNpYmlsaXR5fSBhbmQgPGEgaHJlZj0iI2F0dHJfYW5kcm9pZDp2aXNpYmlsaXR5Ij57QGNvZGUKQEAgLTg5Niw2ICs5MDgsMTEgQEAKICAgICAgKi8KICAgICBzdGF0aWMgZmluYWwgaW50IEZPQ1VTQUJMRV9JTl9UT1VDSF9NT0RFID0gMHgwMDA0MDAwMDsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBASW50RGVmKHtEUkFXSU5HX0NBQ0hFX1FVQUxJVFlfTE9XLCBEUkFXSU5HX0NBQ0hFX1FVQUxJVFlfSElHSCwgRFJBV0lOR19DQUNIRV9RVUFMSVRZX0FVVE99KQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIERyYXdpbmdDYWNoZVF1YWxpdHkge30KKwogICAgIC8qKgogICAgICAqIDxwPkVuYWJsZXMgbG93IHF1YWxpdHkgbW9kZSBmb3IgdGhlIGRyYXdpbmcgY2FjaGUuPC9wPgogICAgICAqLwpAQCAtOTQwLDYgKzk1NywxNiBAQAogICAgICAqLwogICAgIHN0YXRpYyBmaW5hbCBpbnQgRFVQTElDQVRFX1BBUkVOVF9TVEFURSA9IDB4MDA0MDAwMDA7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHsKKyAgICAgICAgU0NST0xMQkFSU19JTlNJREVfT1ZFUkxBWSwKKyAgICAgICAgU0NST0xMQkFSU19JTlNJREVfSU5TRVQsCisgICAgICAgIFNDUk9MTEJBUlNfT1VUU0lERV9PVkVSTEFZLAorICAgICAgICBTQ1JPTExCQVJTX09VVFNJREVfSU5TRVQKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBTY3JvbGxCYXJTdHlsZSB7fQorCiAgICAgLyoqCiAgICAgICogVGhlIHNjcm9sbGJhciBzdHlsZSB0byBkaXNwbGF5IHRoZSBzY3JvbGxiYXJzIGluc2lkZSB0aGUgY29udGVudCBhcmVhLAogICAgICAqIHdpdGhvdXQgaW5jcmVhc2luZyB0aGUgcGFkZGluZy4gVGhlIHNjcm9sbGJhcnMgd2lsbCBiZSBvdmVybGFpZCB3aXRoCkBAIC0xMDIwLDYgKzEwNDcsMTUgQEAKICAgICAgKi8KICAgICBzdGF0aWMgZmluYWwgaW50IFBBUkVOVF9TQVZFX0RJU0FCTEVEX01BU0sgPSAweDIwMDAwMDAwOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwKKyAgICAgICAgICAgIHZhbHVlID0geworICAgICAgICAgICAgICAgIEZPQ1VTQUJMRVNfQUxMLAorICAgICAgICAgICAgICAgIEZPQ1VTQUJMRVNfVE9VQ0hfTU9ERQorICAgICAgICAgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgRm9jdXNhYmxlTW9kZSB7fQorCiAgICAgLyoqCiAgICAgICogVmlldyBmbGFnIGluZGljYXRpbmcgd2hldGhlciB7QGxpbmsgI2FkZEZvY3VzYWJsZXMoQXJyYXlMaXN0LCBpbnQsIGludCl9CiAgICAgICogc2hvdWxkIGFkZCBhbGwgZm9jdXNhYmxlIFZpZXdzIHJlZ2FyZGxlc3MgaWYgdGhleSBhcmUgZm9jdXNhYmxlIGluIHRvdWNoIG1vZGUuCkBAIC0xMDMyLDYgKzEwNjgsMjggQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT0NVU0FCTEVTX1RPVUNIX01PREUgPSAweDAwMDAwMDAxOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7CisgICAgICAgICAgICBGT0NVU19CQUNLV0FSRCwKKyAgICAgICAgICAgIEZPQ1VTX0ZPUldBUkQsCisgICAgICAgICAgICBGT0NVU19MRUZULAorICAgICAgICAgICAgRk9DVVNfVVAsCisgICAgICAgICAgICBGT0NVU19SSUdIVCwKKyAgICAgICAgICAgIEZPQ1VTX0RPV04KKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBGb2N1c0RpcmVjdGlvbiB7fQorCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7CisgICAgICAgICAgICBGT0NVU19MRUZULAorICAgICAgICAgICAgRk9DVVNfVVAsCisgICAgICAgICAgICBGT0NVU19SSUdIVCwKKyAgICAgICAgICAgIEZPQ1VTX0RPV04KKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBGb2N1c1JlYWxEaXJlY3Rpb24ge30gLy8gTGlrZSBARm9jdXNEaXJlY3Rpb24sIGJ1dCB3aXRob3V0IGZvcndhcmQvYmFja3dhcmQKKwogICAgIC8qKgogICAgICAqIFVzZSB3aXRoIHtAbGluayAjZm9jdXNTZWFyY2goaW50KX0uIE1vdmUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIHNlbGVjdGFibGUKICAgICAgKiBpdGVtLgpAQCAtMTU4Nyw3ICsxNjQ1LDcgQEAKICAgICAgKiBAc2VlICNzZXRUYWcoT2JqZWN0KQogICAgICAqIEBzZWUgI2dldFRhZygpCiAgICAgICovCi0gICAgcHJvdGVjdGVkIE9iamVjdCBtVGFnOworICAgIHByb3RlY3RlZCBPYmplY3QgbVRhZyA9IG51bGw7CiAKICAgICAvLyBmb3IgbVByaXZhdGVGbGFnczoKICAgICAvKioge0BoaWRlfSAqLwpAQCAtMTgwNCw2ICsxODYyLDI1IEBACiAgICAgICovCiAgICAgc3RhdGljIGZpbmFsIGludCBQRkxBRzJfRFJBR19IT1ZFUkVEICAgICAgICAgICAgICAgPSAweDAwMDAwMDAyOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7CisgICAgICAgIExBWU9VVF9ESVJFQ1RJT05fTFRSLAorICAgICAgICBMQVlPVVRfRElSRUNUSU9OX1JUTCwKKyAgICAgICAgTEFZT1VUX0RJUkVDVElPTl9JTkhFUklULAorICAgICAgICBMQVlPVVRfRElSRUNUSU9OX0xPQ0FMRQorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIC8vIE5vdCBjYWxsZWQgTGF5b3V0RGlyZWN0aW9uIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggYW5kcm9pZC51dGlsLkxheW91dERpcmVjdGlvbgorICAgIHB1YmxpYyBAaW50ZXJmYWNlIExheW91dERpciB7fQorCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7CisgICAgICAgIExBWU9VVF9ESVJFQ1RJT05fTFRSLAorICAgICAgICBMQVlPVVRfRElSRUNUSU9OX1JUTAorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFJlc29sdmVkTGF5b3V0RGlyIHt9CisKICAgICAvKioKICAgICAgKiBIb3Jpem9udGFsIGxheW91dCBkaXJlY3Rpb24gb2YgdGhpcyB2aWV3IGlzIGZyb20gTGVmdCB0byBSaWdodC4KICAgICAgKiBVc2Ugd2l0aCB7QGxpbmsgI3NldExheW91dERpcmVjdGlvbn0uCkBAIC0xOTgyLDcgKzIwNTksMjAgQEAKICAgICBzdGF0aWMgZmluYWwgaW50IFBGTEFHMl9URVhUX0RJUkVDVElPTl9SRVNPTFZFRF9ERUZBVUxUID0KICAgICAgICAgICAgIFRFWFRfRElSRUNUSU9OX1JFU09MVkVEX0RFRkFVTFQgPDwgUEZMQUcyX1RFWFRfRElSRUNUSU9OX1JFU09MVkVEX01BU0tfU0hJRlQ7CiAKLSAgICAvKgorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoeworICAgICAgICBURVhUX0FMSUdOTUVOVF9JTkhFUklULAorICAgICAgICBURVhUX0FMSUdOTUVOVF9HUkFWSVRZLAorICAgICAgICBURVhUX0FMSUdOTUVOVF9DRU5URVIsCisgICAgICAgIFRFWFRfQUxJR05NRU5UX1RFWFRfU1RBUlQsCisgICAgICAgIFRFWFRfQUxJR05NRU5UX1RFWFRfRU5ELAorICAgICAgICBURVhUX0FMSUdOTUVOVF9WSUVXX1NUQVJULAorICAgICAgICBURVhUX0FMSUdOTUVOVF9WSUVXX0VORAorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFRleHRBbGlnbm1lbnQge30KKworICAgIC8qKgogICAgICAqIERlZmF1bHQgdGV4dCBhbGlnbm1lbnQuIFRoZSB0ZXh0IGFsaWdubWVudCBvZiB0aGlzIFZpZXcgaXMgaW5oZXJpdGVkIGZyb20gaXRzIHBhcmVudC4KICAgICAgKiBVc2Ugd2l0aCB7QGxpbmsgI3NldFRleHRBbGlnbm1lbnQoaW50KX0KICAgICAgKi8KQEAgLTI2NjQsNiArMjc1NCwxMiBAQAogICAgICAgICAgICAgU1lTVEVNX1VJX0ZMQUdfTEFZT1VUX0hJREVfTkFWSUdBVElPTgogICAgICAgICAgICAgfCBTWVNURU1fVUlfRkxBR19MQVlPVVRfRlVMTFNDUkVFTjsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoZmxhZyA9IHRydWUsCisgICAgICAgICAgICB2YWx1ZSA9IHsgRklORF9WSUVXU19XSVRIX1RFWFQsIEZJTkRfVklFV1NfV0lUSF9DT05URU5UX0RFU0NSSVBUSU9OIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIEZpbmRWaWV3RmxhZ3Mge30KKwogICAgIC8qKgogICAgICAqIEZpbmQgdmlld3MgdGhhdCByZW5kZXIgdGhlIHNwZWNpZmllZCB0ZXh0LgogICAgICAqCkBAIC0yNjg1LDcgKzI3ODEsNyBAQAogICAgICAqIGFkZGVkIGFuZCBpdCBpcyBhIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjbGllbnQgdG8gY2FsbCB0aGUgQVBJcyBvZgogICAgICAqIHRoZSBwcm92aWRlciB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdmlydHVhbCB0cmVlIHJvb3RlZCBhdCB0aGlzIFZpZXcKICAgICAgKiBjb250YWlucyB0aGUgdGV4dCwgaS5lLiBnZXR0aW5nIHRoZSBsaXN0IG9mIHtAbGluayBBY2Nlc3NpYmlsaXR5Tm9kZUluZm99cwotICAgICAqIHJlcHJlc2V0aW5nIHRoZSB2aXJ0dWFsIHZpZXdzIHdpdGggdGhpcyB0ZXh0LgorICAgICAqIHJlcHJlc2VudGluZyB0aGUgdmlydHVhbCB2aWV3cyB3aXRoIHRoaXMgdGV4dC4KICAgICAgKgogICAgICAqIEBzZWUgI2ZpbmRWaWV3c1dpdGhUZXh0KEFycmF5TGlzdCwgQ2hhclNlcXVlbmNlLCBpbnQpCiAgICAgICoKQEAgLTI4ODcsNiArMjk4Myw5IEBACiAgICAgICAgIEBWaWV3RGVidWcuRXhwb3J0ZWRQcm9wZXJ0eQogICAgICAgICBmbG9hdCBtVHJhbnNsYXRpb25ZID0gMGY7CiAKKyAgICAgICAgQFZpZXdEZWJ1Zy5FeHBvcnRlZFByb3BlcnR5CisgICAgICAgIGZsb2F0IG1UcmFuc2xhdGlvblogPSAwZjsKKwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGFtb3VudCBvZiBzY2FsZSBpbiB0aGUgeCBkaXJlY3Rpb24gYXJvdW5kIHRoZSBwaXZvdCBwb2ludC4gQQogICAgICAgICAgKiB2YWx1ZSBvZiAxIG1lYW5zIG5vIHNjYWxpbmcgaXMgYXBwbGllZC4KQEAgLTM0ODUsMjcgKzM1ODQsNjQgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBQZXJmb3JtIGluZmxhdGlvbiBmcm9tIFhNTCBhbmQgYXBwbHkgYSBjbGFzcy1zcGVjaWZpYyBiYXNlIHN0eWxlLiBUaGlzCi0gICAgICogY29uc3RydWN0b3Igb2YgVmlldyBhbGxvd3Mgc3ViY2xhc3NlcyB0byB1c2UgdGhlaXIgb3duIGJhc2Ugc3R5bGUgd2hlbgotICAgICAqIHRoZXkgYXJlIGluZmxhdGluZy4gRm9yIGV4YW1wbGUsIGEgQnV0dG9uIGNsYXNzJ3MgY29uc3RydWN0b3Igd291bGQgY2FsbAotICAgICAqIHRoaXMgdmVyc2lvbiBvZiB0aGUgc3VwZXIgY2xhc3MgY29uc3RydWN0b3IgYW5kIHN1cHBseQotICAgICAqIDxjb2RlPlIuYXR0ci5idXR0b25TdHlsZTwvY29kZT4gZm9yIDx2YXI+ZGVmU3R5bGU8L3Zhcj47IHRoaXMgYWxsb3dzCi0gICAgICogdGhlIHRoZW1lJ3MgYnV0dG9uIHN0eWxlIHRvIG1vZGlmeSBhbGwgb2YgdGhlIGJhc2UgdmlldyBhdHRyaWJ1dGVzIChpbgotICAgICAqIHBhcnRpY3VsYXIgaXRzIGJhY2tncm91bmQpIGFzIHdlbGwgYXMgdGhlIEJ1dHRvbiBjbGFzcydzIGF0dHJpYnV0ZXMuCisgICAgICogUGVyZm9ybSBpbmZsYXRpb24gZnJvbSBYTUwgYW5kIGFwcGx5IGEgY2xhc3Mtc3BlY2lmaWMgYmFzZSBzdHlsZSBmcm9tIGEKKyAgICAgKiB0aGVtZSBhdHRyaWJ1dGUuIFRoaXMgY29uc3RydWN0b3Igb2YgVmlldyBhbGxvd3Mgc3ViY2xhc3NlcyB0byB1c2UgdGhlaXIKKyAgICAgKiBvd24gYmFzZSBzdHlsZSB3aGVuIHRoZXkgYXJlIGluZmxhdGluZy4gRm9yIGV4YW1wbGUsIGEgQnV0dG9uIGNsYXNzJ3MKKyAgICAgKiBjb25zdHJ1Y3RvciB3b3VsZCBjYWxsIHRoaXMgdmVyc2lvbiBvZiB0aGUgc3VwZXIgY2xhc3MgY29uc3RydWN0b3IgYW5kCisgICAgICogc3VwcGx5IDxjb2RlPlIuYXR0ci5idXR0b25TdHlsZTwvY29kZT4gZm9yIDx2YXI+ZGVmU3R5bGVBdHRyPC92YXI+OyB0aGlzCisgICAgICogYWxsb3dzIHRoZSB0aGVtZSdzIGJ1dHRvbiBzdHlsZSB0byBtb2RpZnkgYWxsIG9mIHRoZSBiYXNlIHZpZXcgYXR0cmlidXRlcworICAgICAqIChpbiBwYXJ0aWN1bGFyIGl0cyBiYWNrZ3JvdW5kKSBhcyB3ZWxsIGFzIHRoZSBCdXR0b24gY2xhc3MncyBhdHRyaWJ1dGVzLgogICAgICAqCiAgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdGhlIHZpZXcgaXMgcnVubmluZyBpbiwgdGhyb3VnaCB3aGljaCBpdCBjYW4KICAgICAgKiAgICAgICAgYWNjZXNzIHRoZSBjdXJyZW50IHRoZW1lLCByZXNvdXJjZXMsIGV0Yy4KICAgICAgKiBAcGFyYW0gYXR0cnMgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIFhNTCB0YWcgdGhhdCBpcyBpbmZsYXRpbmcgdGhlIHZpZXcuCiAgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCi0gICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRvIGFwcGx5IHRvIHRoaXMgdmlldy4gSWYgMCwgbm8KLSAgICAgKiAgICAgICAgZGVmYXVsdCBzdHlsZSB3aWxsIGJlIGFwcGxpZWQuCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCiAgICAgICogQHNlZSAjVmlldyhDb250ZXh0LCBBdHRyaWJ1dGVTZXQpCiAgICAgICovCiAgICAgcHVibGljIFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZXJmb3JtIGluZmxhdGlvbiBmcm9tIFhNTCBhbmQgYXBwbHkgYSBjbGFzcy1zcGVjaWZpYyBiYXNlIHN0eWxlIGZyb20gYQorICAgICAqIHRoZW1lIGF0dHJpYnV0ZSBvciBzdHlsZSByZXNvdXJjZS4gVGhpcyBjb25zdHJ1Y3RvciBvZiBWaWV3IGFsbG93cworICAgICAqIHN1YmNsYXNzZXMgdG8gdXNlIHRoZWlyIG93biBiYXNlIHN0eWxlIHdoZW4gdGhleSBhcmUgaW5mbGF0aW5nLgorICAgICAqIDxwPgorICAgICAqIFdoZW4gZGV0ZXJtaW5pbmcgdGhlIGZpbmFsIHZhbHVlIG9mIGEgcGFydGljdWxhciBhdHRyaWJ1dGUsIHRoZXJlIGFyZQorICAgICAqIGZvdXIgaW5wdXRzIHRoYXQgY29tZSBpbnRvIHBsYXk6CisgICAgICogPG9sPgorICAgICAqIDxsaT5BbnkgYXR0cmlidXRlIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gQXR0cmlidXRlU2V0LgorICAgICAqIDxsaT5UaGUgc3R5bGUgcmVzb3VyY2Ugc3BlY2lmaWVkIGluIHRoZSBBdHRyaWJ1dGVTZXQgKG5hbWVkICJzdHlsZSIpLgorICAgICAqIDxsaT5UaGUgZGVmYXVsdCBzdHlsZSBzcGVjaWZpZWQgYnkgPHZhcj5kZWZTdHlsZUF0dHI8L3Zhcj4uCisgICAgICogPGxpPlRoZSBkZWZhdWx0IHN0eWxlIHNwZWNpZmllZCBieSA8dmFyPmRlZlN0eWxlUmVzPC92YXI+LgorICAgICAqIDxsaT5UaGUgYmFzZSB2YWx1ZXMgaW4gdGhpcyB0aGVtZS4KKyAgICAgKiA8L29sPgorICAgICAqIDxwPgorICAgICAqIEVhY2ggb2YgdGhlc2UgaW5wdXRzIGlzIGNvbnNpZGVyZWQgaW4tb3JkZXIsIHdpdGggdGhlIGZpcnN0IGxpc3RlZCB0YWtpbmcKKyAgICAgKiBwcmVjZWRlbmNlIG92ZXIgdGhlIGZvbGxvd2luZyBvbmVzLiBJbiBvdGhlciB3b3JkcywgaWYgaW4gdGhlCisgICAgICogQXR0cmlidXRlU2V0IHlvdSBoYXZlIHN1cHBsaWVkIDxjb2RlPiZsdDtCdXR0b24gKiB0ZXh0Q29sb3I9IiNmZjAwMDAwMCImZ3Q7PC9jb2RlPgorICAgICAqICwgdGhlbiB0aGUgYnV0dG9uJ3MgdGV4dCB3aWxsIDxlbT5hbHdheXM8L2VtPiBiZSBibGFjaywgcmVnYXJkbGVzcyBvZgorICAgICAqIHdoYXQgaXMgc3BlY2lmaWVkIGluIGFueSBvZiB0aGUgc3R5bGVzLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdGhlIHZpZXcgaXMgcnVubmluZyBpbiwgdGhyb3VnaCB3aGljaCBpdCBjYW4KKyAgICAgKiAgICAgICAgYWNjZXNzIHRoZSBjdXJyZW50IHRoZW1lLCByZXNvdXJjZXMsIGV0Yy4KKyAgICAgKiBAcGFyYW0gYXR0cnMgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIFhNTCB0YWcgdGhhdCBpcyBpbmZsYXRpbmcgdGhlIHZpZXcuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICogQHBhcmFtIGRlZlN0eWxlUmVzIEEgcmVzb3VyY2UgaWRlbnRpZmllciBvZiBhIHN0eWxlIHJlc291cmNlIHRoYXQKKyAgICAgKiAgICAgICAgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB2aWV3LCB1c2VkIG9ubHkgaWYKKyAgICAgKiAgICAgICAgZGVmU3R5bGVBdHRyIGlzIDAgb3IgY2FuIG5vdCBiZSBmb3VuZCBpbiB0aGUgdGhlbWUuIENhbiBiZSAwCisgICAgICogICAgICAgIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAc2VlICNWaWV3KENvbnRleHQsIEF0dHJpYnV0ZVNldCwgaW50KQorICAgICAqLworICAgIHB1YmxpYyBWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKICAgICAgICAgdGhpcyhjb250ZXh0KTsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlZpZXcsCi0gICAgICAgICAgICAgICAgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5WaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBEcmF3YWJsZSBiYWNrZ3JvdW5kID0gbnVsbDsKIApAQCAtMzUyOCw2ICszNjY0LDcgQEAKIAogICAgICAgICBmbG9hdCB0eCA9IDA7CiAgICAgICAgIGZsb2F0IHR5ID0gMDsKKyAgICAgICAgZmxvYXQgdHogPSAwOwogICAgICAgICBmbG9hdCByb3RhdGlvbiA9IDA7CiAgICAgICAgIGZsb2F0IHJvdGF0aW9uWCA9IDA7CiAgICAgICAgIGZsb2F0IHJvdGF0aW9uWSA9IDA7CkBAIC0zNjA3LDYgKzM3NDQsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgdHkgPSBhLmdldERpbWVuc2lvblBpeGVsT2Zmc2V0KGF0dHIsIDApOwogICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlZpZXdfdHJhbnNsYXRpb25aOgorICAgICAgICAgICAgICAgICAgICB0eiA9IGEuZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQoYXR0ciwgMCk7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlld19yb3RhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgcm90YXRpb24gPSBhLmdldEZsb2F0KGF0dHIsIDApOwogICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TZXQgPSB0cnVlOwpAQCAtMzk0OCw2ICs0MDg5LDcgQEAKICAgICAgICAgaWYgKHRyYW5zZm9ybVNldCkgewogICAgICAgICAgICAgc2V0VHJhbnNsYXRpb25YKHR4KTsKICAgICAgICAgICAgIHNldFRyYW5zbGF0aW9uWSh0eSk7CisgICAgICAgICAgICBzZXRUcmFuc2xhdGlvbloodHopOwogICAgICAgICAgICAgc2V0Um90YXRpb24ocm90YXRpb24pOwogICAgICAgICAgICAgc2V0Um90YXRpb25YKHJvdGF0aW9uWCk7CiAgICAgICAgICAgICBzZXRSb3RhdGlvblkocm90YXRpb25ZKTsKQEAgLTQ1OTYsNyArNDczOCw3IEBACiAgICAgICogQHBhcmFtIHByZXZpb3VzbHlGb2N1c2VkUmVjdCBUaGUgcmVjdGFuZ2xlIG9mIHRoZSB2aWV3IHRoYXQgaGFkIGZvY3VzCiAgICAgICogICAgICAgIHByaW9yIGluIHRoaXMgVmlldydzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgICAqLwotICAgIHZvaWQgaGFuZGxlRm9jdXNHYWluSW50ZXJuYWwoaW50IGRpcmVjdGlvbiwgUmVjdCBwcmV2aW91c2x5Rm9jdXNlZFJlY3QpIHsKKyAgICB2b2lkIGhhbmRsZUZvY3VzR2FpbkludGVybmFsKEBGb2N1c1JlYWxEaXJlY3Rpb24gaW50IGRpcmVjdGlvbiwgUmVjdCBwcmV2aW91c2x5Rm9jdXNlZFJlY3QpIHsKICAgICAgICAgaWYgKERCRykgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRoaXMgKyAiIHJlcXVlc3RGb2N1cygpIik7CiAgICAgICAgIH0KQEAgLTQ2MTQsMTIgKzQ3NTYsNDMgQEAKICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tVHJlZU9ic2VydmVyLmRpc3BhdGNoT25HbG9iYWxGb2N1c0NoYW5nZShvbGRGb2N1cywgdGhpcyk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIG1hbmFnZUZvY3VzSG90c3BvdCh0cnVlLCBvbGRGb2N1cyk7CiAgICAgICAgICAgICBvbkZvY3VzQ2hhbmdlZCh0cnVlLCBkaXJlY3Rpb24sIHByZXZpb3VzbHlGb2N1c2VkUmVjdCk7CiAgICAgICAgICAgICByZWZyZXNoRHJhd2FibGVTdGF0ZSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCisgICAgICogRm9yd2FyZHMgZm9jdXMgaW5mb3JtYXRpb24gdG8gdGhlIGJhY2tncm91bmQgZHJhd2FibGUsIGlmIG5lY2Vzc2FyeS4gV2hlbgorICAgICAqIHRoZSB2aWV3IGlzIGdhaW5pbmcgZm9jdXMsIDxjb2RlPnY8L2NvZGU+IGlzIHRoZSBwcmV2aW91cyBmb2N1cyBob2xkZXIuCisgICAgICogV2hlbiB0aGUgdmlldyBpcyBsb3NpbmcgZm9jdXMsIDxjb2RlPnY8L2NvZGU+IGlzIHRoZSBuZXh0IGZvY3VzIGhvbGRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmb2N1c2VkIHdoZXRoZXIgdGhpcyB2aWV3IGlzIGZvY3VzZWQKKyAgICAgKiBAcGFyYW0gdiBwcmV2aW91cyBvciB0aGUgbmV4dCBmb2N1cyBob2xkZXIsIG9yIG51bGwgaWYgbm9uZQorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBtYW5hZ2VGb2N1c0hvdHNwb3QoYm9vbGVhbiBmb2N1c2VkLCBWaWV3IHYpIHsKKyAgICAgICAgaWYgKG1CYWNrZ3JvdW5kICE9IG51bGwgJiYgbUJhY2tncm91bmQuc3VwcG9ydHNIb3RzcG90cygpKSB7CisgICAgICAgICAgICBmaW5hbCBSZWN0IHIgPSBuZXcgUmVjdCgpOworICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHYuZ2V0Qm91bmRzT25TY3JlZW4ocik7CisgICAgICAgICAgICAgICAgZmluYWwgaW50W10gbG9jYXRpb24gPSBuZXcgaW50WzJdOworICAgICAgICAgICAgICAgIGdldExvY2F0aW9uT25TY3JlZW4obG9jYXRpb24pOworICAgICAgICAgICAgICAgIHIub2Zmc2V0KC1sb2NhdGlvblswXSwgLWxvY2F0aW9uWzFdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgci5zZXQobUxlZnQsIG1Ub3AsIG1SaWdodCwgbUJvdHRvbSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IHggPSByLmV4YWN0Q2VudGVyWCgpOworICAgICAgICAgICAgZmluYWwgZmxvYXQgeSA9IHIuZXhhY3RDZW50ZXJZKCk7CisgICAgICAgICAgICBtQmFja2dyb3VuZC5zZXRIb3RzcG90KERyYXdhYmxlLkhPVFNQT1RfRk9DVVMsIHgsIHkpOworCisgICAgICAgICAgICBpZiAoIWZvY3VzZWQpIHsKKyAgICAgICAgICAgICAgICBtQmFja2dyb3VuZC5yZW1vdmVIb3RzcG90KERyYXdhYmxlLkhPVFNQT1RfRk9DVVMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogUmVxdWVzdCB0aGF0IGEgcmVjdGFuZ2xlIG9mIHRoaXMgdmlldyBiZSB2aXNpYmxlIG9uIHRoZSBzY3JlZW4sCiAgICAgICogc2Nyb2xsaW5nIGlmIG5lY2Vzc2FyeSBqdXN0IGVub3VnaC4KICAgICAgKgpAQCAtNDcwNSw3ICs0ODc4LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzICsgIiBjbGVhckZvY3VzKCkiKTsKICAgICAgICAgfQogCi0gICAgICAgIGNsZWFyRm9jdXNJbnRlcm5hbCh0cnVlLCB0cnVlKTsKKyAgICAgICAgY2xlYXJGb2N1c0ludGVybmFsKG51bGwsIHRydWUsIHRydWUpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDcxNywxMCArNDg5MCwxNCBAQAogICAgICAqIEBwYXJhbSByZWZvY3VzIHdoZW4gcHJvcGFnYXRlIGlzIHRydWUsIHNwZWNpZmllcyB3aGV0aGVyIHRvIHJlcXVlc3QgdGhlCiAgICAgICogICAgICAgICAgICByb290IHZpZXcgcGxhY2UgbmV3IGZvY3VzCiAgICAgICovCi0gICAgdm9pZCBjbGVhckZvY3VzSW50ZXJuYWwoYm9vbGVhbiBwcm9wYWdhdGUsIGJvb2xlYW4gcmVmb2N1cykgeworICAgIHZvaWQgY2xlYXJGb2N1c0ludGVybmFsKFZpZXcgZm9jdXNlZCwgYm9vbGVhbiBwcm9wYWdhdGUsIGJvb2xlYW4gcmVmb2N1cykgewogICAgICAgICBpZiAoKG1Qcml2YXRlRmxhZ3MgJiBQRkxBR19GT0NVU0VEKSAhPSAwKSB7CiAgICAgICAgICAgICBtUHJpdmF0ZUZsYWdzICY9IH5QRkxBR19GT0NVU0VEOwogCisgICAgICAgICAgICBpZiAoaGFzRm9jdXMoKSkgeworICAgICAgICAgICAgICAgIG1hbmFnZUZvY3VzSG90c3BvdChmYWxzZSwgZm9jdXNlZCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChwcm9wYWdhdGUgJiYgbVBhcmVudCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbVBhcmVudC5jbGVhckNoaWxkRm9jdXModGhpcyk7CiAgICAgICAgICAgICB9CkBAIC00NzU0LDEyICs0OTMxLDEyIEBACiAgICAgICogYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZC4gT3RoZXJ3aXNlLCB0aGUgdmlldyBoaWVyYXJjaHkgbWF5IGJlIGxlZnQgaW4KICAgICAgKiBhbiBpbmNvbnN0ZW50IHN0YXRlLgogICAgICAqLwotICAgIHZvaWQgdW5Gb2N1cygpIHsKKyAgICB2b2lkIHVuRm9jdXMoVmlldyBmb2N1c2VkKSB7CiAgICAgICAgIGlmIChEQkcpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzICsgIiB1bkZvY3VzKCkiKTsKICAgICAgICAgfQogCi0gICAgICAgIGNsZWFyRm9jdXNJbnRlcm5hbChmYWxzZSwgZmFsc2UpOworICAgICAgICBjbGVhckZvY3VzSW50ZXJuYWwoZm9jdXNlZCwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQ4MDcsNyArNDk4NCw4IEBACiAgICAgICogICAgICAgIHBhc3NlZCBpbiBhcyBmaW5lciBncmFpbmVkIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHRoZSBmb2N1cyBpcyBjb21pbmcKICAgICAgKiAgICAgICAgZnJvbSAoaW4gYWRkaXRpb24gdG8gZGlyZWN0aW9uKS4gIFdpbGwgYmUgPGNvZGU+bnVsbDwvY29kZT4gb3RoZXJ3aXNlLgogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIG9uRm9jdXNDaGFuZ2VkKGJvb2xlYW4gZ2FpbkZvY3VzLCBpbnQgZGlyZWN0aW9uLCBSZWN0IHByZXZpb3VzbHlGb2N1c2VkUmVjdCkgeworICAgIHByb3RlY3RlZCB2b2lkIG9uRm9jdXNDaGFuZ2VkKGJvb2xlYW4gZ2FpbkZvY3VzLCBARm9jdXNEaXJlY3Rpb24gaW50IGRpcmVjdGlvbiwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBSZWN0IHByZXZpb3VzbHlGb2N1c2VkUmVjdCkgewogICAgICAgICBpZiAoZ2FpbkZvY3VzKSB7CiAgICAgICAgICAgICBzZW5kQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfRk9DVVNFRCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC00ODkwLDcgKzUwNjgsOCBAQAogICAgICAqIEBwYXJhbSB0ZXh0IFRoZSBhbm5vdW5jZW1lbnQgdGV4dC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkoQ2hhclNlcXVlbmNlIHRleHQpIHsKLSAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlNYW5hZ2VyLmdldEluc3RhbmNlKG1Db250ZXh0KS5pc0VuYWJsZWQoKSAmJiBtUGFyZW50ICE9IG51bGwpIHsKKyAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlNYW5hZ2VyLmdldEluc3RhbmNlKG1Db250ZXh0KS5pc0VuYWJsZWQoKSAmJiBtUGFyZW50ICE9IG51bGwKKyAgICAgICAgICAgICAgICAmJiBpc0ltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoKSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50ID0gQWNjZXNzaWJpbGl0eUV2ZW50Lm9idGFpbigKICAgICAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfQU5OT1VOQ0VNRU5UKTsKICAgICAgICAgICAgIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7CkBAIC00OTQwLDcgKzUxMTksNyBAQAogICAgICAqIE5vdGU6IENhbGxlZCBmcm9tIHRoZSBkZWZhdWx0IHtAbGluayBBY2Nlc3NpYmlsaXR5RGVsZWdhdGV9LgogICAgICAqLwogICAgIHZvaWQgc2VuZEFjY2Vzc2liaWxpdHlFdmVudFVuY2hlY2tlZEludGVybmFsKEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgewotICAgICAgICBpZiAoIWlzU2hvd24oKSkgeworICAgICAgICBpZiAoIWlzU2hvd24oKSB8fCAhaXNJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KCkpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOwpAQCAtNTY2Nyw2ICs1ODQ2LDcgQEAKICAgICAgKgogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI1ZpZXdfZHJhd2luZ0NhY2hlUXVhbGl0eQogICAgICAqLworICAgIEBEcmF3aW5nQ2FjaGVRdWFsaXR5CiAgICAgcHVibGljIGludCBnZXREcmF3aW5nQ2FjaGVRdWFsaXR5KCkgewogICAgICAgICByZXR1cm4gbVZpZXdGbGFncyAmIERSQVdJTkdfQ0FDSEVfUVVBTElUWV9NQVNLOwogICAgIH0KQEAgLTU2ODQsNyArNTg2NCw3IEBACiAgICAgICoKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNWaWV3X2RyYXdpbmdDYWNoZVF1YWxpdHkKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXREcmF3aW5nQ2FjaGVRdWFsaXR5KGludCBxdWFsaXR5KSB7CisgICAgcHVibGljIHZvaWQgc2V0RHJhd2luZ0NhY2hlUXVhbGl0eShARHJhd2luZ0NhY2hlUXVhbGl0eSBpbnQgcXVhbGl0eSkgewogICAgICAgICBzZXRGbGFncyhxdWFsaXR5LCBEUkFXSU5HX0NBQ0hFX1FVQUxJVFlfTUFTSyk7CiAgICAgfQogCkBAIC02MDIxLDYgKzYyMDEsNyBAQAogICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBJTlZJU0lCTEUsIHRvID0gIklOVklTSUJMRSIpLAogICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBHT05FLCAgICAgIHRvID0gIkdPTkUiKQogICAgIH0pCisgICAgQFZpc2liaWxpdHkKICAgICBwdWJsaWMgaW50IGdldFZpc2liaWxpdHkoKSB7CiAgICAgICAgIHJldHVybiBtVmlld0ZsYWdzICYgVklTSUJJTElUWV9NQVNLOwogICAgIH0KQEAgLTYwMzIsNyArNjIxMyw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjVmlld192aXNpYmlsaXR5CiAgICAgICovCiAgICAgQFJlbW90YWJsZVZpZXdNZXRob2QKLSAgICBwdWJsaWMgdm9pZCBzZXRWaXNpYmlsaXR5KGludCB2aXNpYmlsaXR5KSB7CisgICAgcHVibGljIHZvaWQgc2V0VmlzaWJpbGl0eShAVmlzaWJpbGl0eSBpbnQgdmlzaWJpbGl0eSkgewogICAgICAgICBzZXRGbGFncyh2aXNpYmlsaXR5LCBWSVNJQklMSVRZX01BU0spOwogICAgICAgICBpZiAobUJhY2tncm91bmQgIT0gbnVsbCkgbUJhY2tncm91bmQuc2V0VmlzaWJsZSh2aXNpYmlsaXR5ID09IFZJU0lCTEUsIGZhbHNlKTsKICAgICB9CkBAIC02MTkxLDYgKzYzNzIsNyBAQAogICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBMQVlPVVRfRElSRUNUSU9OX0lOSEVSSVQsIHRvID0gIklOSEVSSVQiKSwKICAgICAgICAgQFZpZXdEZWJ1Zy5JbnRUb1N0cmluZyhmcm9tID0gTEFZT1VUX0RJUkVDVElPTl9MT0NBTEUsICB0byA9ICJMT0NBTEUiKQogICAgIH0pCisgICAgQExheW91dERpcgogICAgIHB1YmxpYyBpbnQgZ2V0UmF3TGF5b3V0RGlyZWN0aW9uKCkgewogICAgICAgICByZXR1cm4gKG1Qcml2YXRlRmxhZ3MyICYgUEZMQUcyX0xBWU9VVF9ESVJFQ1RJT05fTUFTSykgPj4gUEZMQUcyX0xBWU9VVF9ESVJFQ1RJT05fTUFTS19TSElGVDsKICAgICB9CkBAIC02MjEzLDcgKzYzOTUsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI1ZpZXdfbGF5b3V0RGlyZWN0aW9uCiAgICAgICovCiAgICAgQFJlbW90YWJsZVZpZXdNZXRob2QKLSAgICBwdWJsaWMgdm9pZCBzZXRMYXlvdXREaXJlY3Rpb24oaW50IGxheW91dERpcmVjdGlvbikgeworICAgIHB1YmxpYyB2b2lkIHNldExheW91dERpcmVjdGlvbihATGF5b3V0RGlyIGludCBsYXlvdXREaXJlY3Rpb24pIHsKICAgICAgICAgaWYgKGdldFJhd0xheW91dERpcmVjdGlvbigpICE9IGxheW91dERpcmVjdGlvbikgewogICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgbGF5b3V0IGRpcmVjdGlvbiBhbmQgdGhlIHJlc29sdmVkIG9uZQogICAgICAgICAgICAgbVByaXZhdGVGbGFnczIgJj0gflBGTEFHMl9MQVlPVVRfRElSRUNUSU9OX01BU0s7CkBAIC02MjQzLDYgKzY0MjUsNyBAQAogICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBMQVlPVVRfRElSRUNUSU9OX0xUUiwgdG8gPSAiUkVTT0xWRURfRElSRUNUSU9OX0xUUiIpLAogICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBMQVlPVVRfRElSRUNUSU9OX1JUTCwgdG8gPSAiUkVTT0xWRURfRElSRUNUSU9OX1JUTCIpCiAgICAgfSkKKyAgICBAUmVzb2x2ZWRMYXlvdXREaXIKICAgICBwdWJsaWMgaW50IGdldExheW91dERpcmVjdGlvbigpIHsKICAgICAgICAgZmluYWwgaW50IHRhcmdldFNka1ZlcnNpb24gPSBnZXRDb250ZXh0KCkuZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbjsKICAgICAgICAgaWYgKHRhcmdldFNka1ZlcnNpb24gPCBKRUxMWV9CRUFOX01SMSkgewpAQCAtNjYxMiw3ICs2Nzk1LDcgQEAKICAgICAgKiBAcmV0dXJuIFRoZSBuZWFyZXN0IGZvY3VzYWJsZSBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdGlvbiwgb3IgbnVsbCBpZiBub25lCiAgICAgICogICAgICAgICBjYW4gYmUgZm91bmQuCiAgICAgICovCi0gICAgcHVibGljIFZpZXcgZm9jdXNTZWFyY2goaW50IGRpcmVjdGlvbikgeworICAgIHB1YmxpYyBWaWV3IGZvY3VzU2VhcmNoKEBGb2N1c1JlYWxEaXJlY3Rpb24gaW50IGRpcmVjdGlvbikgewogICAgICAgICBpZiAobVBhcmVudCAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbVBhcmVudC5mb2N1c1NlYXJjaCh0aGlzLCBkaXJlY3Rpb24pOwogICAgICAgICB9IGVsc2UgewpAQCAtNjYzMSw3ICs2ODE0LDcgQEAKICAgICAgKiAgICAgICAgRk9DVVNfRE9XTiwgRk9DVVNfTEVGVCwgYW5kIEZPQ1VTX1JJR0hULgogICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdGhpcyB2aWV3IGNvbnN1bWVkIHRoaXMgdW5oYW5kbGVkIG1vdmUuCiAgICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hVbmhhbmRsZWRNb3ZlKFZpZXcgZm9jdXNlZCwgaW50IGRpcmVjdGlvbikgeworICAgIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoVW5oYW5kbGVkTW92ZShWaWV3IGZvY3VzZWQsIEBGb2N1c1JlYWxEaXJlY3Rpb24gaW50IGRpcmVjdGlvbikgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC02NjQzLDcgKzY4MjYsNyBAQAogICAgICAqIG9yIEZPQ1VTX0JBQ0tXQVJELgogICAgICAqIEByZXR1cm4gVGhlIHVzZXIgc3BlY2lmaWVkIG5leHQgdmlldywgb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgogICAgICAqLwotICAgIFZpZXcgZmluZFVzZXJTZXROZXh0Rm9jdXMoVmlldyByb290LCBpbnQgZGlyZWN0aW9uKSB7CisgICAgVmlldyBmaW5kVXNlclNldE5leHRGb2N1cyhWaWV3IHJvb3QsIEBGb2N1c0RpcmVjdGlvbiBpbnQgZGlyZWN0aW9uKSB7CiAgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgICAgICAgICBjYXNlIEZPQ1VTX0xFRlQ6CiAgICAgICAgICAgICAgICAgaWYgKG1OZXh0Rm9jdXNMZWZ0SWQgPT0gVmlldy5OT19JRCkgcmV0dXJuIG51bGw7CkBAIC02NjkzLDcgKzY4NzYsNyBAQAogICAgICAqIEBwYXJhbSBkaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiBvZiB0aGUgZm9jdXMKICAgICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBmb2N1c2FibGUgdmlld3MKICAgICAgKi8KLSAgICBwdWJsaWMgQXJyYXlMaXN0PFZpZXc+IGdldEZvY3VzYWJsZXMoaW50IGRpcmVjdGlvbikgeworICAgIHB1YmxpYyBBcnJheUxpc3Q8Vmlldz4gZ2V0Rm9jdXNhYmxlcyhARm9jdXNEaXJlY3Rpb24gaW50IGRpcmVjdGlvbikgewogICAgICAgICBBcnJheUxpc3Q8Vmlldz4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxWaWV3PigyNCk7CiAgICAgICAgIGFkZEZvY3VzYWJsZXMocmVzdWx0LCBkaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjcwNyw3ICs2ODkwLDcgQEAKICAgICAgKiBAcGFyYW0gdmlld3MgRm9jdXNhYmxlIHZpZXdzIGZvdW5kIHNvIGZhcgogICAgICAqIEBwYXJhbSBkaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiBvZiB0aGUgZm9jdXMKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRGb2N1c2FibGVzKEFycmF5TGlzdDxWaWV3PiB2aWV3cywgaW50IGRpcmVjdGlvbikgeworICAgIHB1YmxpYyB2b2lkIGFkZEZvY3VzYWJsZXMoQXJyYXlMaXN0PFZpZXc+IHZpZXdzLCBARm9jdXNEaXJlY3Rpb24gaW50IGRpcmVjdGlvbikgewogICAgICAgICBhZGRGb2N1c2FibGVzKHZpZXdzLCBkaXJlY3Rpb24sIEZPQ1VTQUJMRVNfVE9VQ0hfTU9ERSk7CiAgICAgfQogCkBAIC02NzI3LDcgKzY5MTAsOCBAQAogICAgICAqIEBzZWUgI0ZPQ1VTQUJMRVNfQUxMCiAgICAgICogQHNlZSAjRk9DVVNBQkxFU19UT1VDSF9NT0RFCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkRm9jdXNhYmxlcyhBcnJheUxpc3Q8Vmlldz4gdmlld3MsIGludCBkaXJlY3Rpb24sIGludCBmb2N1c2FibGVNb2RlKSB7CisgICAgcHVibGljIHZvaWQgYWRkRm9jdXNhYmxlcyhBcnJheUxpc3Q8Vmlldz4gdmlld3MsIEBGb2N1c0RpcmVjdGlvbiBpbnQgZGlyZWN0aW9uLAorICAgICAgICAgICAgQEZvY3VzYWJsZU1vZGUgaW50IGZvY3VzYWJsZU1vZGUpIHsKICAgICAgICAgaWYgKHZpZXdzID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjc1Niw3ICs2OTQwLDggQEAKICAgICAgKiBAc2VlICNGSU5EX1ZJRVdTX1dJVEhfQ09OVEVOVF9ERVNDUklQVElPTgogICAgICAqIEBzZWUgI3NldENvbnRlbnREZXNjcmlwdGlvbihDaGFyU2VxdWVuY2UpCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgZmluZFZpZXdzV2l0aFRleHQoQXJyYXlMaXN0PFZpZXc+IG91dFZpZXdzLCBDaGFyU2VxdWVuY2Ugc2VhcmNoZWQsIGludCBmbGFncykgeworICAgIHB1YmxpYyB2b2lkIGZpbmRWaWV3c1dpdGhUZXh0KEFycmF5TGlzdDxWaWV3PiBvdXRWaWV3cywgQ2hhclNlcXVlbmNlIHNlYXJjaGVkLAorICAgICAgICAgICAgQEZpbmRWaWV3RmxhZ3MgaW50IGZsYWdzKSB7CiAgICAgICAgIGlmIChnZXRBY2Nlc3NpYmlsaXR5Tm9kZVByb3ZpZGVyKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKChmbGFncyAmIEZJTkRfVklFV1NfV0lUSF9BQ0NFU1NJQklMSVRZX05PREVfUFJPVklERVJTKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgb3V0Vmlld3MuYWRkKHRoaXMpOwpAQCAtNjgwMyw3ICs2OTg4LDYgQEAKICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBWaWV3IGlzIGFjY2Vzc2liaWxpdHkgZm9jdXNlZC4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIFZpZXcgaXMgYWNjZXNzaWJpbGl0eSBmb2N1c2VkLgotICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNBY2Nlc3NpYmlsaXR5Rm9jdXNlZCgpIHsKICAgICAgICAgcmV0dXJuIChtUHJpdmF0ZUZsYWdzMiAmIFBGTEFHMl9BQ0NFU1NJQklMSVRZX0ZPQ1VTRUQpICE9IDA7CkBAIC03MTUxLDExICs3MzM1LDM4IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogR2V0cyB3aGV0aGVyIHRoaXMgdmlldyBzaG91bGQgYmUgZXhwb3NlZCBmb3IgYWNjZXNzaWJpbGl0eS4KKyAgICAgKiBDb21wdXRlcyB3aGV0aGVyIHRoaXMgdmlldyBzaG91bGQgYmUgZXhwb3NlZCBmb3IgYWNjZXNzaWJpbGl0eS4gSW4KKyAgICAgKiBnZW5lcmFsLCB2aWV3cyB0aGF0IGFyZSBpbnRlcmFjdGl2ZSBvciBwcm92aWRlIGluZm9ybWF0aW9uIGFyZSBleHBvc2VkCisgICAgICogd2hpbGUgdmlld3MgdGhhdCBzZXJ2ZSBvbmx5IGFzIGNvbnRhaW5lcnMgYXJlIGhpZGRlbi4KKyAgICAgKiA8cD4KKyAgICAgKiBJZiBhbiBhbmNlc3RvciBvZiB0aGlzIHZpZXcgaGFzIGltcG9ydGFuY2UKKyAgICAgKiB7QGxpbmsgI0lNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9OT19ISURFX0RFU0NFTkRBTlRTfSwgdGhpcyBtZXRob2QKKyAgICAgKiByZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPi4KKyAgICAgKiA8cD4KKyAgICAgKiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBpcyBjb21wdXRlZCBhY2NvcmRpbmcgdG8gdGhlIHZpZXcncworICAgICAqIHtAbGluayAjZ2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSgpfSB2YWx1ZToKKyAgICAgKiA8b2w+CisgICAgICogPGxpPntAbGluayAjSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX05PfSBvcgorICAgICAqIHtAbGluayAjSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX05PX0hJREVfREVTQ0VOREFOVFN9LCByZXR1cm4gPGNvZGU+ZmFsc2UKKyAgICAgKiA8L2NvZGU+CisgICAgICogPGxpPntAbGluayAjSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX1lFU30sIHJldHVybiA8Y29kZT50cnVlPC9jb2RlPgorICAgICAqIDxsaT57QGxpbmsgI0lNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9BVVRPfSwgcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmCisgICAgICogdmlldyBzYXRpc2ZpZXMgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICogPHVsPgorICAgICAqIDxsaT5JcyBhY3Rpb25hYmxlLCBlLmcuIHtAbGluayAjaXNDbGlja2FibGUoKX0sCisgICAgICoge0BsaW5rICNpc0xvbmdDbGlja2FibGUoKX0sIG9yIHtAbGluayAjaXNGb2N1c2FibGUoKX0KKyAgICAgKiA8bGk+SGFzIGFuIHtAbGluayBBY2Nlc3NpYmlsaXR5RGVsZWdhdGV9CisgICAgICogPGxpPkhhcyBhbiBpbnRlcmFjdGlvbiBsaXN0ZW5lciwgZS5nLiB7QGxpbmsgT25Ub3VjaExpc3RlbmVyfSwKKyAgICAgKiB7QGxpbmsgT25LZXlMaXN0ZW5lcn0sIGV0Yy4KKyAgICAgKiA8bGk+SXMgYW4gYWNjZXNzaWJpbGl0eSBsaXZlIHJlZ2lvbiwgZS5nLgorICAgICAqIHtAbGluayAjZ2V0QWNjZXNzaWJpbGl0eUxpdmVSZWdpb24oKX0gaXMgbm90CisgICAgICoge0BsaW5rICNBQ0NFU1NJQklMSVRZX0xJVkVfUkVHSU9OX05PTkV9LgorICAgICAqIDwvdWw+CisgICAgICogPC9vbD4KICAgICAgKgogICAgICAqIEByZXR1cm4gV2hldGhlciB0aGUgdmlldyBpcyBleHBvc2VkIGZvciBhY2Nlc3NpYmlsaXR5LgotICAgICAqCi0gICAgICogQGhpZGUKKyAgICAgKiBAc2VlICNzZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KGludCkKKyAgICAgKiBAc2VlICNnZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KCkKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0ltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoKSB7CiAgICAgICAgIGZpbmFsIGludCBtb2RlID0gKG1Qcml2YXRlRmxhZ3MyICYgUEZMQUcyX0lNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9NQVNLKQpAQCAtNzIwOCw5ICs3NDE5LDcgQEAKICAgICAgKiBAcGFyYW0gY2hpbGRyZW4gVGhlIGxpc3Qgb2YgY2hpbGRyZW4gZm9yIGFjY2Vzc2liaWxpdHkuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkQ2hpbGRyZW5Gb3JBY2Nlc3NpYmlsaXR5KEFycmF5TGlzdDxWaWV3PiBjaGlsZHJlbikgewotICAgICAgICBpZiAoaW5jbHVkZUZvckFjY2Vzc2liaWxpdHkoKSkgewotICAgICAgICAgICAgY2hpbGRyZW4uYWRkKHRoaXMpOwotICAgICAgICB9CisKICAgICB9CiAKICAgICAvKioKQEAgLTcyMjQsNyArNzQzMyw2IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpbmNsdWRlRm9yQWNjZXNzaWJpbGl0eSgpIHsKLSAgICAgICAgLy9ub2luc3BlY3Rpb24gU2ltcGxpZmlhYmxlSWZTdGF0ZW1lbnQKICAgICAgICAgaWYgKG1BdHRhY2hJbmZvICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiAobUF0dGFjaEluZm8ubUFjY2Vzc2liaWxpdHlGZXRjaEZsYWdzCiAgICAgICAgICAgICAgICAgICAgICYgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkZMQUdfSU5DTFVERV9OT1RfSU1QT1JUQU5UX1ZJRVdTKSAhPSAwCkBAIC03MjQ3LDcgKzc0NTUsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgVmlldyBoYXMgcmVnaXN0ZXJlZCBjYWxsYmFja3Mgd2ljaCBtYWtlcyBpdAorICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgVmlldyBoYXMgcmVnaXN0ZXJlZCBjYWxsYmFja3Mgd2hpY2ggbWFrZXMgaXQKICAgICAgKiBpbXBvcnRhbnQgZm9yIGFjY2Vzc2liaWxpdHkuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHZpZXcgaXMgYWN0aW9uYWJsZSBmb3IgYWNjZXNzaWJpbGl0eS4KQEAgLTcyNjYsNyArNzQ3NCw3IEBACiAgICAgICogbm90aWZpY2F0aW9uIGlzIGF0IGF0IG1vc3Qgb25jZSBldmVyeQogICAgICAqIHtAbGluayBWaWV3Q29uZmlndXJhdGlvbiNnZXRTZW5kUmVjdXJyaW5nQWNjZXNzaWJpbGl0eUV2ZW50c0ludGVydmFsKCl9CiAgICAgICogdG8gYXZvaWQgdW5uZWNlc3NhcnkgbG9hZCB0byB0aGUgc3lzdGVtLiBBbHNvIG9uY2UgYSB2aWV3IGhhcyBhIHBlbmRpbmcKLSAgICAgKiBub3RpZnVjYXRpb24gdGhpcyBtZXRob2QgaXMgYSBOT1AgdW50aWwgdGhlIG5vdGlmaWNhdGlvbiBoYXMgYmVlbiBzZW50LgorICAgICAqIG5vdGlmaWNhdGlvbiB0aGlzIG1ldGhvZCBpcyBhIE5PUCB1bnRpbCB0aGUgbm90aWZpY2F0aW9uIGhhcyBiZWVuIHNlbnQuCiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwpAQCAtNzk0Niw3ICs4MTU0LDggQEAKICAgICAgKiBAcGFyYW0gdmlzaWJpbGl0eSBUaGUgbmV3IHZpc2liaWxpdHkgb2YgY2hhbmdlZFZpZXc6IHtAbGluayAjVklTSUJMRX0sCiAgICAgICoge0BsaW5rICNJTlZJU0lCTEV9IG9yIHtAbGluayAjR09ORX0uCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgZGlzcGF0Y2hWaXNpYmlsaXR5Q2hhbmdlZChWaWV3IGNoYW5nZWRWaWV3LCBpbnQgdmlzaWJpbGl0eSkgeworICAgIHByb3RlY3RlZCB2b2lkIGRpc3BhdGNoVmlzaWJpbGl0eUNoYW5nZWQoQE5vbk51bGwgVmlldyBjaGFuZ2VkVmlldywKKyAgICAgICAgICAgIEBWaXNpYmlsaXR5IGludCB2aXNpYmlsaXR5KSB7CiAgICAgICAgIG9uVmlzaWJpbGl0eUNoYW5nZWQoY2hhbmdlZFZpZXcsIHZpc2liaWxpdHkpOwogICAgIH0KIApAQCAtNzk1Nyw3ICs4MTY2LDcgQEAKICAgICAgKiBAcGFyYW0gdmlzaWJpbGl0eSBUaGUgbmV3IHZpc2liaWxpdHkgb2YgY2hhbmdlZFZpZXc6IHtAbGluayAjVklTSUJMRX0sCiAgICAgICoge0BsaW5rICNJTlZJU0lCTEV9IG9yIHtAbGluayAjR09ORX0uCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgb25WaXNpYmlsaXR5Q2hhbmdlZChWaWV3IGNoYW5nZWRWaWV3LCBpbnQgdmlzaWJpbGl0eSkgeworICAgIHByb3RlY3RlZCB2b2lkIG9uVmlzaWJpbGl0eUNoYW5nZWQoQE5vbk51bGwgVmlldyBjaGFuZ2VkVmlldywgQFZpc2liaWxpdHkgaW50IHZpc2liaWxpdHkpIHsKICAgICAgICAgaWYgKHZpc2liaWxpdHkgPT0gVklTSUJMRSkgewogICAgICAgICAgICAgaWYgKG1BdHRhY2hJbmZvICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBpbml0aWFsQXdha2VuU2Nyb2xsQmFycygpOwpAQCAtNzk3Niw3ICs4MTg1LDcgQEAKICAgICAgKiBAcGFyYW0gaGludCBBIGhpbnQgYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB2aWV3IGlzIGRpc3BsYXllZDoKICAgICAgKiB7QGxpbmsgI1ZJU0lCTEV9IG9yIHtAbGluayAjSU5WSVNJQkxFfS4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaERpc3BsYXlIaW50KGludCBoaW50KSB7CisgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hEaXNwbGF5SGludChAVmlzaWJpbGl0eSBpbnQgaGludCkgewogICAgICAgICBvbkRpc3BsYXlIaW50KGhpbnQpOwogICAgIH0KIApAQCAtNzk4OSw3ICs4MTk4LDcgQEAKICAgICAgKiBAcGFyYW0gaGludCBBIGhpbnQgYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB2aWV3IGlzIGRpc3BsYXllZDoKICAgICAgKiB7QGxpbmsgI1ZJU0lCTEV9IG9yIHtAbGluayAjSU5WSVNJQkxFfS4KICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkRpc3BsYXlIaW50KGludCBoaW50KSB7CisgICAgcHJvdGVjdGVkIHZvaWQgb25EaXNwbGF5SGludChAVmlzaWJpbGl0eSBpbnQgaGludCkgewogICAgIH0KIAogICAgIC8qKgpAQCAtODAwMCw3ICs4MjA5LDcgQEAKICAgICAgKgogICAgICAqIEBzZWUgI29uV2luZG93VmlzaWJpbGl0eUNoYW5nZWQoaW50KQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoV2luZG93VmlzaWJpbGl0eUNoYW5nZWQoaW50IHZpc2liaWxpdHkpIHsKKyAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaFdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKEBWaXNpYmlsaXR5IGludCB2aXNpYmlsaXR5KSB7CiAgICAgICAgIG9uV2luZG93VmlzaWJpbGl0eUNoYW5nZWQodmlzaWJpbGl0eSk7CiAgICAgfQogCkBAIC04MDE0LDcgKzgyMjMsNyBAQAogICAgICAqCiAgICAgICogQHBhcmFtIHZpc2liaWxpdHkgVGhlIG5ldyB2aXNpYmlsaXR5IG9mIHRoZSB3aW5kb3cuCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgb25XaW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChpbnQgdmlzaWJpbGl0eSkgeworICAgIHByb3RlY3RlZCB2b2lkIG9uV2luZG93VmlzaWJpbGl0eUNoYW5nZWQoQFZpc2liaWxpdHkgaW50IHZpc2liaWxpdHkpIHsKICAgICAgICAgaWYgKHZpc2liaWxpdHkgPT0gVklTSUJMRSkgewogICAgICAgICAgICAgaW5pdGlhbEF3YWtlblNjcm9sbEJhcnMoKTsKICAgICAgICAgfQpAQCAtODAyNiw2ICs4MjM1LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCB2aXNpYmlsaXR5IG9mIHRoZSB2aWV3J3Mgd2luZG93LgogICAgICAqLworICAgIEBWaXNpYmlsaXR5CiAgICAgcHVibGljIGludCBnZXRXaW5kb3dWaXNpYmlsaXR5KCkgewogICAgICAgICByZXR1cm4gbUF0dGFjaEluZm8gIT0gbnVsbCA/IG1BdHRhY2hJbmZvLm1XaW5kb3dWaXNpYmlsaXR5IDogR09ORTsKICAgICB9CkBAIC04NzQyLDEyICs4OTUyLDQ5IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtQmFja2dyb3VuZCAhPSBudWxsICYmIG1CYWNrZ3JvdW5kLnN1cHBvcnRzSG90c3BvdHMoKSkgeworICAgICAgICAgICAgICAgIG1hbmFnZVRvdWNoSG90c3BvdChldmVudCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIHByaXZhdGUgdm9pZCBtYW5hZ2VUb3VjaEhvdHNwb3QoTW90aW9uRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC5nZXRBY3Rpb24oKSkgeworICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fRE9XTjoKKyAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfRE9XTjogeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBpbmRleCA9IGV2ZW50LmdldEFjdGlvbkluZGV4KCk7CisgICAgICAgICAgICAgICAgc2V0UG9pbnRlckhvdHNwb3QoZXZlbnQsIGluZGV4KTsKKyAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9NT1ZFOiB7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gZXZlbnQuZ2V0UG9pbnRlckNvdW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNldFBvaW50ZXJIb3RzcG90KGV2ZW50LCBpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfVVA6IHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgYWN0aW9uSW5kZXggPSBldmVudC5nZXRBY3Rpb25JbmRleCgpOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBwb2ludGVySWQgPSBldmVudC5nZXRQb2ludGVySWQoYWN0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIG1CYWNrZ3JvdW5kLnJlbW92ZUhvdHNwb3QocG9pbnRlcklkKTsKKyAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDoKKyAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX0NBTkNFTDoKKyAgICAgICAgICAgICAgICBtQmFja2dyb3VuZC5jbGVhckhvdHNwb3RzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0UG9pbnRlckhvdHNwb3QoTW90aW9uRXZlbnQgZXZlbnQsIGludCBpbmRleCkgeworICAgICAgICBmaW5hbCBpbnQgaWQgPSBldmVudC5nZXRQb2ludGVySWQoaW5kZXgpOworICAgICAgICBmaW5hbCBmbG9hdCB4ID0gZXZlbnQuZ2V0WChpbmRleCk7CisgICAgICAgIGZpbmFsIGZsb2F0IHkgPSBldmVudC5nZXRZKGluZGV4KTsKKyAgICAgICAgbUJhY2tncm91bmQuc2V0SG90c3BvdChpZCwgeCwgeSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQGhpZGUKICAgICAgKi8KQEAgLTEwMzQ0LDYgKzEwNTkxLDM5IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogVGhlIGRlcHRoIGxvY2F0aW9uIG9mIHRoaXMgdmlldyByZWxhdGl2ZSB0byBpdHMgcGFyZW50LgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgZGVwdGggb2YgdGhpcyB2aWV3IHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQuCisgICAgICovCisgICAgQFZpZXdEZWJ1Zy5FeHBvcnRlZFByb3BlcnR5KGNhdGVnb3J5ID0gImRyYXdpbmciKQorICAgIHB1YmxpYyBmbG9hdCBnZXRUcmFuc2xhdGlvblooKSB7CisgICAgICAgIHJldHVybiBtVHJhbnNmb3JtYXRpb25JbmZvICE9IG51bGwgPyBtVHJhbnNmb3JtYXRpb25JbmZvLm1UcmFuc2xhdGlvblogOiAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRlcHRoIGxvY2F0aW9uIG9mIHRoaXMgdmlldyByZWxhdGl2ZSB0byBpdHMgcGFyZW50LgorICAgICAqCisgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjVmlld190cmFuc2xhdGlvbloKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2xhdGlvblooZmxvYXQgdHJhbnNsYXRpb25aKSB7CisgICAgICAgIGVuc3VyZVRyYW5zZm9ybWF0aW9uSW5mbygpOworICAgICAgICBmaW5hbCBUcmFuc2Zvcm1hdGlvbkluZm8gaW5mbyA9IG1UcmFuc2Zvcm1hdGlvbkluZm87CisgICAgICAgIGlmIChpbmZvLm1UcmFuc2xhdGlvblogIT0gdHJhbnNsYXRpb25aKSB7CisgICAgICAgICAgICBpbnZhbGlkYXRlVmlld1Byb3BlcnR5KHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIGluZm8ubVRyYW5zbGF0aW9uWiA9IHRyYW5zbGF0aW9uWjsKKyAgICAgICAgICAgIGluZm8ubU1hdHJpeERpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGludmFsaWRhdGVWaWV3UHJvcGVydHkoZmFsc2UsIHRydWUpOworICAgICAgICAgICAgaWYgKG1EaXNwbGF5TGlzdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbURpc3BsYXlMaXN0LnNldFRyYW5zbGF0aW9uWih0cmFuc2xhdGlvblopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChtUHJpdmF0ZUZsYWdzMiAmIFBGTEFHMl9WSUVXX1FVSUNLX1JFSkVDVEVEKSA9PSBQRkxBRzJfVklFV19RVUlDS19SRUpFQ1RFRCkgeworICAgICAgICAgICAgICAgIC8vIFZpZXcgd2FzIHJlamVjdGVkIGxhc3QgdGltZSBpdCB3YXMgZHJhd24gYnkgaXRzIHBhcmVudDsgdGhpcyBtYXkgaGF2ZSBjaGFuZ2VkCisgICAgICAgICAgICAgICAgaW52YWxpZGF0ZVBhcmVudElmTmVlZGVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKICAgICAgKiBIaXQgcmVjdGFuZ2xlIGluIHBhcmVudCdzIGNvb3JkaW5hdGVzCiAgICAgICoKICAgICAgKiBAcGFyYW0gb3V0UmVjdCBUaGUgaGl0IHJlY3RhbmdsZSBvZiB0aGUgdmlldy4KQEAgLTEwODE4LDE1ICsxMTA5OCw2IEBACiAgICAgICAgICAgICBtUHJpdmF0ZUZsYWdzIHw9IFBGTEFHX0RJUlRZOwogICAgICAgICAgICAgZmluYWwgVmlld1BhcmVudCBwID0gbVBhcmVudDsKICAgICAgICAgICAgIGZpbmFsIEF0dGFjaEluZm8gYWkgPSBtQXR0YWNoSW5mbzsKLSAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uLENvbnN0YW50Q29uZGl0aW9ucwotICAgICAgICAgICAgaWYgKCFIYXJkd2FyZVJlbmRlcmVyLlJFTkRFUl9ESVJUWV9SRUdJT05TKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHAgIT0gbnVsbCAmJiBhaSAhPSBudWxsICYmIGFpLm1IYXJkd2FyZUFjY2VsZXJhdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZhc3QtdHJhY2sgZm9yIEdMLWVuYWJsZWQgYXBwbGljYXRpb25zOyBqdXN0IGludmFsaWRhdGUgdGhlIHdob2xlIGhpZXJhcmNoeQotICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGEgbnVsbCBkaXJ0eSByZWN0LCB3aGljaCB0ZWxscyB0aGUgVmlld0FuY2VzdG9yIHRvIHJlZHJhdyBldmVyeXRoaW5nCi0gICAgICAgICAgICAgICAgICAgIHAuaW52YWxpZGF0ZUNoaWxkKHRoaXMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHAgIT0gbnVsbCAmJiBhaSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHNjcm9sbFggPSBtU2Nyb2xsWDsKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc2Nyb2xsWSA9IG1TY3JvbGxZOwpAQCAtMTA4NjEsMTUgKzExMTMyLDYgQEAKICAgICAgICAgICAgIG1Qcml2YXRlRmxhZ3MgfD0gUEZMQUdfRElSVFk7CiAgICAgICAgICAgICBmaW5hbCBWaWV3UGFyZW50IHAgPSBtUGFyZW50OwogICAgICAgICAgICAgZmluYWwgQXR0YWNoSW5mbyBhaSA9IG1BdHRhY2hJbmZvOwotICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb24sQ29uc3RhbnRDb25kaXRpb25zCi0gICAgICAgICAgICBpZiAoIUhhcmR3YXJlUmVuZGVyZXIuUkVOREVSX0RJUlRZX1JFR0lPTlMpIHsKLSAgICAgICAgICAgICAgICBpZiAocCAhPSBudWxsICYmIGFpICE9IG51bGwgJiYgYWkubUhhcmR3YXJlQWNjZWxlcmF0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmFzdC10cmFjayBmb3IgR0wtZW5hYmxlZCBhcHBsaWNhdGlvbnM7IGp1c3QgaW52YWxpZGF0ZSB0aGUgd2hvbGUgaGllcmFyY2h5Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBudWxsIGRpcnR5IHJlY3QsIHdoaWNoIHRlbGxzIHRoZSBWaWV3QW5jZXN0b3IgdG8gcmVkcmF3IGV2ZXJ5dGhpbmcKLSAgICAgICAgICAgICAgICAgICAgcC5pbnZhbGlkYXRlQ2hpbGQodGhpcywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocCAhPSBudWxsICYmIGFpICE9IG51bGwgJiYgbCA8IHIgJiYgdCA8IGIpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc2Nyb2xsWCA9IG1TY3JvbGxYOwogICAgICAgICAgICAgICAgIGZpbmFsIGludCBzY3JvbGxZID0gbVNjcm9sbFk7CkBAIC0xMDkxNywxNSArMTExNzksNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZmluYWwgQXR0YWNoSW5mbyBhaSA9IG1BdHRhY2hJbmZvOwogICAgICAgICAgICAgZmluYWwgVmlld1BhcmVudCBwID0gbVBhcmVudDsKLSAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uLENvbnN0YW50Q29uZGl0aW9ucwotICAgICAgICAgICAgaWYgKCFIYXJkd2FyZVJlbmRlcmVyLlJFTkRFUl9ESVJUWV9SRUdJT05TKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHAgIT0gbnVsbCAmJiBhaSAhPSBudWxsICYmIGFpLm1IYXJkd2FyZUFjY2VsZXJhdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZhc3QtdHJhY2sgZm9yIEdMLWVuYWJsZWQgYXBwbGljYXRpb25zOyBqdXN0IGludmFsaWRhdGUgdGhlIHdob2xlIGhpZXJhcmNoeQotICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGEgbnVsbCBkaXJ0eSByZWN0LCB3aGljaCB0ZWxscyB0aGUgVmlld0FuY2VzdG9yIHRvIHJlZHJhdyBldmVyeXRoaW5nCi0gICAgICAgICAgICAgICAgICAgIHAuaW52YWxpZGF0ZUNoaWxkKHRoaXMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocCAhPSBudWxsICYmIGFpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBSZWN0IHIgPSBhaS5tVG1wSW52YWxSZWN0OwpAQCAtMTEwOTYsNiArMTEzNDksMTMgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBIYXJkd2FyZVJlbmRlcmVyIGdldEhhcmR3YXJlUmVuZGVyZXIoKSB7CisgICAgICAgIHJldHVybiBtQXR0YWNoSW5mbyAhPSBudWxsID8gbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIgOiBudWxsOworICAgIH0KKworICAgIC8qKgogICAgICAqIDxwPkNhdXNlcyB0aGUgUnVubmFibGUgdG8gYmUgYWRkZWQgdG8gdGhlIG1lc3NhZ2UgcXVldWUuCiAgICAgICogVGhlIHJ1bm5hYmxlIHdpbGwgYmUgcnVuIG9uIHRoZSB1c2VyIGludGVyZmFjZSB0aHJlYWQuPC9wPgogICAgICAqCkBAIC0xMTIxMiwxMCArMTE0NzIsOSBAQAogICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKGFjdGlvbik7CiAgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tVmlld1Jvb3RJbXBsLm1DaG9yZW9ncmFwaGVyLnJlbW92ZUNhbGxiYWNrcygKICAgICAgICAgICAgICAgICAgICAgICAgIENob3Jlb2dyYXBoZXIuQ0FMTEJBQ0tfQU5JTUFUSU9OLCBhY3Rpb24sIG51bGwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBBc3N1bWUgdGhhdCBwb3N0IHdpbGwgc3VjY2VlZCBsYXRlcgotICAgICAgICAgICAgICAgIFZpZXdSb290SW1wbC5nZXRSdW5RdWV1ZSgpLnJlbW92ZUNhbGxiYWNrcyhhY3Rpb24pOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgcG9zdCB3aWxsIHN1Y2NlZWQgbGF0ZXIKKyAgICAgICAgICAgIFZpZXdSb290SW1wbC5nZXRSdW5RdWV1ZSgpLnJlbW92ZUNhbGxiYWNrcyhhY3Rpb24pOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTExNzA2LDcgKzExOTY1LDcgQEAKICAgICAgKgogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI1ZpZXdfc2Nyb2xsYmFyU3R5bGUKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRTY3JvbGxCYXJTdHlsZShpbnQgc3R5bGUpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRTY3JvbGxCYXJTdHlsZShAU2Nyb2xsQmFyU3R5bGUgaW50IHN0eWxlKSB7CiAgICAgICAgIGlmIChzdHlsZSAhPSAobVZpZXdGbGFncyAmIFNDUk9MTEJBUlNfU1RZTEVfTUFTSykpIHsKICAgICAgICAgICAgIG1WaWV3RmxhZ3MgPSAobVZpZXdGbGFncyAmIH5TQ1JPTExCQVJTX1NUWUxFX01BU0spIHwgKHN0eWxlICYgU0NST0xMQkFSU19TVFlMRV9NQVNLKTsKICAgICAgICAgICAgIGNvbXB1dGVPcGFxdWVGbGFncygpOwpAQCAtMTE3MzAsNiArMTE5ODksNyBAQAogICAgICAgICAgICAgQFZpZXdEZWJ1Zy5JbnRUb1N0cmluZyhmcm9tID0gU0NST0xMQkFSU19PVVRTSURFX09WRVJMQVksIHRvID0gIk9VVFNJREVfT1ZFUkxBWSIpLAogICAgICAgICAgICAgQFZpZXdEZWJ1Zy5JbnRUb1N0cmluZyhmcm9tID0gU0NST0xMQkFSU19PVVRTSURFX0lOU0VULCB0byA9ICJPVVRTSURFX0lOU0VUIikKICAgICB9KQorICAgIEBTY3JvbGxCYXJTdHlsZQogICAgIHB1YmxpYyBpbnQgZ2V0U2Nyb2xsQmFyU3R5bGUoKSB7CiAgICAgICAgIHJldHVybiBtVmlld0ZsYWdzICYgU0NST0xMQkFSU19TVFlMRV9NQVNLOwogICAgIH0KQEAgLTEyMjMxLDcgKzEyNDkxLDcgQEAKICAgICAgKiBAc2VlICNMQVlPVVRfRElSRUNUSU9OX0xUUgogICAgICAqIEBzZWUgI0xBWU9VVF9ESVJFQ1RJT05fUlRMCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgb25SdGxQcm9wZXJ0aWVzQ2hhbmdlZChpbnQgbGF5b3V0RGlyZWN0aW9uKSB7CisgICAgcHVibGljIHZvaWQgb25SdGxQcm9wZXJ0aWVzQ2hhbmdlZChAUmVzb2x2ZWRMYXlvdXREaXIgaW50IGxheW91dERpcmVjdGlvbikgewogICAgIH0KIAogICAgIC8qKgpAQCAtMTMyNjAsMjAgKzEzNTIwLDYgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBAcmV0dXJuIFRoZSB7QGxpbmsgSGFyZHdhcmVSZW5kZXJlcn0gYXNzb2NpYXRlZCB3aXRoIHRoYXQgdmlldyBvciBudWxsIGlmCi0gICAgICogICAgICAgICBoYXJkd2FyZSByZW5kZXJpbmcgaXMgbm90IHN1cHBvcnRlZCBvciB0aGlzIHZpZXcgaXMgbm90IGF0dGFjaGVkCi0gICAgICogICAgICAgICB0byBhIHdpbmRvdy4KLSAgICAgKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIEhhcmR3YXJlUmVuZGVyZXIgZ2V0SGFyZHdhcmVSZW5kZXJlcigpIHsKLSAgICAgICAgaWYgKG1BdHRhY2hJbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlcjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgRGlzcGxheUxpc3QuIElmIHRoZSBpbmNvbWluZyBkaXNwbGF5TGlzdCBpcyBudWxsLCBvbmUgd2lsbCBiZSBjcmVhdGVkLgogICAgICAqIE90aGVyd2lzZSwgdGhlIHNhbWUgZGlzcGxheSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQgKGFmdGVyIGhhdmluZyBiZWVuIHJlbmRlcmVkIGludG8KICAgICAgKiBhbG9uZyB0aGUgd2F5LCBkZXBlbmRpbmcgb24gdGhlIGludmFsaWRhdGlvbiBzdGF0ZSBvZiB0aGUgdmlldykuCkBAIC0xMzMwOCw3ICsxMzU1NCw3IEBACiAgICAgICAgICAgICAgICAgbVJlY3JlYXRlRGlzcGxheUxpc3QgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGRpc3BsYXlMaXN0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBkaXNwbGF5TGlzdCA9IG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmNyZWF0ZURpc3BsYXlMaXN0KGdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5TGlzdCA9IERpc3BsYXlMaXN0LmNyZWF0ZShnZXRDbGFzcygpLmdldE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgY3JlYXRpbmcgYSBuZXcgZGlzcGxheSBsaXN0LCBtYWtlIHN1cmUgb3VyIHBhcmVudCBnZXRzIGludmFsaWRhdGVkCiAgICAgICAgICAgICAgICAgLy8gc2luY2UgdGhleSB3aWxsIG5lZWQgdG8gcmVjcmVhdGUgdGhlaXIgZGlzcGxheSBsaXN0IHRvIGFjY291bnQgZm9yIHRoaXMKICAgICAgICAgICAgICAgICAvLyBuZXcgY2hpbGQgZGlzcGxheSBsaXN0LgpAQCAtMTQwMTYsNiArMTQyNjIsMTAgQEAKICAgICAgICAgICAgICAgICBkaXNwbGF5TGlzdC5zZXRDbGlwVG9Cb3VuZHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAoKChWaWV3R3JvdXApIG1QYXJlbnQpLm1Hcm91cEZsYWdzICYgVmlld0dyb3VwLkZMQUdfQ0xJUF9DSElMRFJFTikgIT0gMCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFZpZXdHcm91cCkgeworICAgICAgICAgICAgICAgIGRpc3BsYXlMaXN0LnNldElzQ29udGFpbmVkVm9sdW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgKCgoVmlld0dyb3VwKSB0aGlzKS5tR3JvdXBGbGFncyAmIFZpZXdHcm91cC5GTEFHX0lTX0NPTlRBSU5FRF9WT0xVTUUpICE9IDApOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSAxOwogICAgICAgICAgICAgaWYgKG1QYXJlbnQgaW5zdGFuY2VvZiBWaWV3R3JvdXAgJiYgKCgoVmlld0dyb3VwKSBtUGFyZW50KS5tR3JvdXBGbGFncyAmCiAgICAgICAgICAgICAgICAgICAgIFZpZXdHcm91cC5GTEFHX1NVUFBPUlRfU1RBVElDX1RSQU5TRk9STUFUSU9OUykgIT0gMCkgewpAQCAtMTQwNDMsNiArMTQyOTMsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkaXNwbGF5TGlzdC5zZXRUcmFuc2Zvcm1hdGlvbkluZm8oYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtYXRpb25JbmZvLm1UcmFuc2xhdGlvblgsIG1UcmFuc2Zvcm1hdGlvbkluZm8ubVRyYW5zbGF0aW9uWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1hdGlvbkluZm8ubVRyYW5zbGF0aW9uWiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1hdGlvbkluZm8ubVJvdGF0aW9uLCBtVHJhbnNmb3JtYXRpb25JbmZvLm1Sb3RhdGlvblgsCiAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtYXRpb25JbmZvLm1Sb3RhdGlvblksIG1UcmFuc2Zvcm1hdGlvbkluZm8ubVNjYWxlWCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1hdGlvbkluZm8ubVNjYWxlWSk7CkBAIC0xNTAwMyw5ICsxNTI1NCw4IEBACiAgICAgICAgICAgICBpZiAobUF0dGFjaEluZm8gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1WaWV3Um9vdEltcGwubUNob3Jlb2dyYXBoZXIucmVtb3ZlQ2FsbGJhY2tzKAogICAgICAgICAgICAgICAgICAgICAgICAgQ2hvcmVvZ3JhcGhlci5DQUxMQkFDS19BTklNQVRJT04sIHdoYXQsIHdobyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFZpZXdSb290SW1wbC5nZXRSdW5RdWV1ZSgpLnJlbW92ZUNhbGxiYWNrcyh3aGF0KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFZpZXdSb290SW1wbC5nZXRSdW5RdWV1ZSgpLnJlbW92ZUNhbGxiYWNrcyh3aGF0KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTUwNjgsNyArMTUzMTgsNyBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvblJlc29sdmVEcmF3YWJsZXMoaW50IGxheW91dERpcmVjdGlvbikgeworICAgIHB1YmxpYyB2b2lkIG9uUmVzb2x2ZURyYXdhYmxlcyhAUmVzb2x2ZWRMYXlvdXREaXIgaW50IGxheW91dERpcmVjdGlvbikgewogICAgIH0KIAogICAgIC8qKgpAQCAtMTU4MzUsOCArMTYwODUsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIHRyYW5zZm9ybU1vdGlvbkV2ZW50VG9HbG9iYWwoZXYpOwotICAgICAgICBldi5vZmZzZXRMb2NhdGlvbihpbmZvLm1XaW5kb3dMZWZ0LCBpbmZvLm1XaW5kb3dUb3ApOworICAgICAgICBmaW5hbCBNYXRyaXggbSA9IGluZm8ubVRtcE1hdHJpeDsKKyAgICAgICAgbS5zZXQoTWF0cml4LklERU5USVRZX01BVFJJWCk7CisgICAgICAgIHRyYW5zZm9ybU1hdHJpeFRvR2xvYmFsKG0pOworICAgICAgICBldi50cmFuc2Zvcm0obSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTU4NTQsNTQgKzE2MTA2LDYwIEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBldi5vZmZzZXRMb2NhdGlvbigtaW5mby5tV2luZG93TGVmdCwgLWluZm8ubVdpbmRvd1RvcCk7Ci0gICAgICAgIHRyYW5zZm9ybU1vdGlvbkV2ZW50VG9Mb2NhbChldik7CisgICAgICAgIGZpbmFsIE1hdHJpeCBtID0gaW5mby5tVG1wTWF0cml4OworICAgICAgICBtLnNldChNYXRyaXguSURFTlRJVFlfTUFUUklYKTsKKyAgICAgICAgdHJhbnNmb3JtTWF0cml4VG9Mb2NhbChtKTsKKyAgICAgICAgZXYudHJhbnNmb3JtKG0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZWN1cnNpdmUgaGVscGVyIG1ldGhvZCB0aGF0IGFwcGxpZXMgdHJhbnNmb3JtYXRpb25zIGluIHBvc3Qtb3JkZXIuCisgICAgICogTW9kaWZpZXMgdGhlIGlucHV0IG1hdHJpeCBzdWNoIHRoYXQgaXQgbWFwcyB2aWV3LWxvY2FsIGNvb3JkaW5hdGVzIHRvCisgICAgICogb24tc2NyZWVuIGNvb3JkaW5hdGVzLgogICAgICAqCi0gICAgICogQHBhcmFtIGV2IHRoZSBvbi1zY3JlZW4gbW90aW9uIGV2ZW50CisgICAgICogQHBhcmFtIG0gaW5wdXQgbWF0cml4IHRvIG1vZGlmeQogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCB0cmFuc2Zvcm1Nb3Rpb25FdmVudFRvTG9jYWwoTW90aW9uRXZlbnQgZXYpIHsKKyAgICB2b2lkIHRyYW5zZm9ybU1hdHJpeFRvR2xvYmFsKE1hdHJpeCBtKSB7CiAgICAgICAgIGZpbmFsIFZpZXdQYXJlbnQgcGFyZW50ID0gbVBhcmVudDsKICAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFZpZXcpIHsKICAgICAgICAgICAgIGZpbmFsIFZpZXcgdnAgPSAoVmlldykgcGFyZW50OwotICAgICAgICAgICAgdnAudHJhbnNmb3JtTW90aW9uRXZlbnRUb0xvY2FsKGV2KTsKLSAgICAgICAgICAgIGV2Lm9mZnNldExvY2F0aW9uKHZwLm1TY3JvbGxYLCB2cC5tU2Nyb2xsWSk7CisgICAgICAgICAgICB2cC50cmFuc2Zvcm1NYXRyaXhUb0dsb2JhbChtKTsKKyAgICAgICAgICAgIG0ucG9zdFRyYW5zbGF0ZSgtdnAubVNjcm9sbFgsIC12cC5tU2Nyb2xsWSk7CiAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgVmlld1Jvb3RJbXBsKSB7CiAgICAgICAgICAgICBmaW5hbCBWaWV3Um9vdEltcGwgdnIgPSAoVmlld1Jvb3RJbXBsKSBwYXJlbnQ7Ci0gICAgICAgICAgICBldi5vZmZzZXRMb2NhdGlvbigwLCB2ci5tQ3VyU2Nyb2xsWSk7CisgICAgICAgICAgICB2ci50cmFuc2Zvcm1NYXRyaXhUb0dsb2JhbChtKTsKKyAgICAgICAgICAgIG0ucG9zdFRyYW5zbGF0ZSgwLCAtdnIubUN1clNjcm9sbFkpOwogICAgICAgICB9CiAKLSAgICAgICAgZXYub2Zmc2V0TG9jYXRpb24oLW1MZWZ0LCAtbVRvcCk7CisgICAgICAgIG0ucG9zdFRyYW5zbGF0ZShtTGVmdCwgbVRvcCk7CiAKICAgICAgICAgaWYgKCFoYXNJZGVudGl0eU1hdHJpeCgpKSB7Ci0gICAgICAgICAgICBldi50cmFuc2Zvcm0oZ2V0SW52ZXJzZU1hdHJpeCgpKTsKKyAgICAgICAgICAgIG0ucG9zdENvbmNhdChnZXRNYXRyaXgoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZWN1cnNpdmUgaGVscGVyIG1ldGhvZCB0aGF0IGFwcGxpZXMgdHJhbnNmb3JtYXRpb25zIGluIHByZS1vcmRlci4KKyAgICAgKiBNb2RpZmllcyB0aGUgaW5wdXQgbWF0cml4IHN1Y2ggdGhhdCBpdCBtYXBzIG9uLXNjcmVlbiBjb29yZGluYXRlcyB0bworICAgICAqIHZpZXctbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZXYgdGhlIG9uLXNjcmVlbiBtb3Rpb24gZXZlbnQKKyAgICAgKiBAcGFyYW0gbSBpbnB1dCBtYXRyaXggdG8gbW9kaWZ5CiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHRyYW5zZm9ybU1vdGlvbkV2ZW50VG9HbG9iYWwoTW90aW9uRXZlbnQgZXYpIHsKLSAgICAgICAgaWYgKCFoYXNJZGVudGl0eU1hdHJpeCgpKSB7Ci0gICAgICAgICAgICBldi50cmFuc2Zvcm0oZ2V0TWF0cml4KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZXYub2Zmc2V0TG9jYXRpb24obUxlZnQsIG1Ub3ApOwotCisgICAgdm9pZCB0cmFuc2Zvcm1NYXRyaXhUb0xvY2FsKE1hdHJpeCBtKSB7CiAgICAgICAgIGZpbmFsIFZpZXdQYXJlbnQgcGFyZW50ID0gbVBhcmVudDsKICAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFZpZXcpIHsKICAgICAgICAgICAgIGZpbmFsIFZpZXcgdnAgPSAoVmlldykgcGFyZW50OwotICAgICAgICAgICAgZXYub2Zmc2V0TG9jYXRpb24oLXZwLm1TY3JvbGxYLCAtdnAubVNjcm9sbFkpOwotICAgICAgICAgICAgdnAudHJhbnNmb3JtTW90aW9uRXZlbnRUb0dsb2JhbChldik7CisgICAgICAgICAgICB2cC50cmFuc2Zvcm1NYXRyaXhUb0xvY2FsKG0pOworICAgICAgICAgICAgbS5wcmVUcmFuc2xhdGUodnAubVNjcm9sbFgsIHZwLm1TY3JvbGxZKTsKICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBWaWV3Um9vdEltcGwpIHsKICAgICAgICAgICAgIGZpbmFsIFZpZXdSb290SW1wbCB2ciA9IChWaWV3Um9vdEltcGwpIHBhcmVudDsKLSAgICAgICAgICAgIGV2Lm9mZnNldExvY2F0aW9uKDAsIC12ci5tQ3VyU2Nyb2xsWSk7CisgICAgICAgICAgICB2ci50cmFuc2Zvcm1NYXRyaXhUb0xvY2FsKG0pOworICAgICAgICAgICAgbS5wcmVUcmFuc2xhdGUoMCwgdnIubUN1clNjcm9sbFkpOworICAgICAgICB9CisKKyAgICAgICAgbS5wcmVUcmFuc2xhdGUoLW1MZWZ0LCAtbVRvcCk7CisKKyAgICAgICAgaWYgKCFoYXNJZGVudGl0eU1hdHJpeCgpKSB7CisgICAgICAgICAgICBtLnByZUNvbmNhdChnZXRJbnZlcnNlTWF0cml4KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjE4NCw3ICsxNjQ0Miw4IEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGlzIHZpZXcncyB0YWcuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBPYmplY3Qgc3RvcmVkIGluIHRoaXMgdmlldyBhcyBhIHRhZworICAgICAqIEByZXR1cm4gdGhlIE9iamVjdCBzdG9yZWQgaW4gdGhpcyB2aWV3IGFzIGEgdGFnLCBvciB7QGNvZGUgbnVsbH0gaWYgbm90CisgICAgICogICAgICAgICBzZXQKICAgICAgKgogICAgICAqIEBzZWUgI3NldFRhZyhPYmplY3QpCiAgICAgICogQHNlZSAjZ2V0VGFnKGludCkKQEAgLTE2MjE0LDcgKzE2NDczLDggQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgdGFnCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBPYmplY3Qgc3RvcmVkIGluIHRoaXMgdmlldyBhcyBhIHRhZworICAgICAqIEByZXR1cm4gdGhlIE9iamVjdCBzdG9yZWQgaW4gdGhpcyB2aWV3IGFzIGEgdGFnLCBvciB7QGNvZGUgbnVsbH0gaWYgbm90CisgICAgICogICAgICAgICBzZXQKICAgICAgKgogICAgICAqIEBzZWUgI3NldFRhZyhpbnQsIE9iamVjdCkKICAgICAgKiBAc2VlICNnZXRUYWcoKQpAQCAtMTc4NzAsNiArMTgxMzAsNyBAQAogICAgICAgICAgICAgQFZpZXdEZWJ1Zy5JbnRUb1N0cmluZyhmcm9tID0gVEVYVF9BTElHTk1FTlRfVklFV19TVEFSVCwgdG8gPSAiVklFV19TVEFSVCIpLAogICAgICAgICAgICAgQFZpZXdEZWJ1Zy5JbnRUb1N0cmluZyhmcm9tID0gVEVYVF9BTElHTk1FTlRfVklFV19FTkQsIHRvID0gIlZJRVdfRU5EIikKICAgICB9KQorICAgIEBUZXh0QWxpZ25tZW50CiAgICAgcHVibGljIGludCBnZXRSYXdUZXh0QWxpZ25tZW50KCkgewogICAgICAgICByZXR1cm4gKG1Qcml2YXRlRmxhZ3MyICYgUEZMQUcyX1RFWFRfQUxJR05NRU5UX01BU0spID4+IFBGTEFHMl9URVhUX0FMSUdOTUVOVF9NQVNLX1NISUZUOwogICAgIH0KQEAgLTE3ODkzLDcgKzE4MTU0LDcgQEAKICAgICAgKgogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI1ZpZXdfdGV4dEFsaWdubWVudAogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFRleHRBbGlnbm1lbnQoaW50IHRleHRBbGlnbm1lbnQpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRUZXh0QWxpZ25tZW50KEBUZXh0QWxpZ25tZW50IGludCB0ZXh0QWxpZ25tZW50KSB7CiAgICAgICAgIGlmICh0ZXh0QWxpZ25tZW50ICE9IGdldFJhd1RleHRBbGlnbm1lbnQoKSkgewogICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgYW5kIHJlc29sdmVkIHRleHQgYWxpZ25tZW50CiAgICAgICAgICAgICBtUHJpdmF0ZUZsYWdzMiAmPSB+UEZMQUcyX1RFWFRfQUxJR05NRU5UX01BU0s7CkBAIC0xNzkzNCw2ICsxODE5NSw3IEBACiAgICAgICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBURVhUX0FMSUdOTUVOVF9WSUVXX1NUQVJULCB0byA9ICJWSUVXX1NUQVJUIiksCiAgICAgICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBURVhUX0FMSUdOTUVOVF9WSUVXX0VORCwgdG8gPSAiVklFV19FTkQiKQogICAgIH0pCisgICAgQFRleHRBbGlnbm1lbnQKICAgICBwdWJsaWMgaW50IGdldFRleHRBbGlnbm1lbnQoKSB7CiAgICAgICAgIHJldHVybiAobVByaXZhdGVGbGFnczIgJiBQRkxBRzJfVEVYVF9BTElHTk1FTlRfUkVTT0xWRURfTUFTSykgPj4KICAgICAgICAgICAgICAgICBQRkxBRzJfVEVYVF9BTElHTk1FTlRfUkVTT0xWRURfTUFTS19TSElGVDsKQEAgLTE4MTQ4LDYgKzE4NDEwLDIyIEBACiAgICAgfTsKIAogICAgIC8qKgorICAgICAqIEEgUHJvcGVydHkgd3JhcHBlciBhcm91bmQgdGhlIDxjb2RlPnRyYW5zbGF0aW9uWjwvY29kZT4gZnVuY3Rpb25hbGl0eSBoYW5kbGVkIGJ5IHRoZQorICAgICAqIHtAbGluayBWaWV3I3NldFRyYW5zbGF0aW9uWihmbG9hdCl9IGFuZCB7QGxpbmsgVmlldyNnZXRUcmFuc2xhdGlvblooKX0gbWV0aG9kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFByb3BlcnR5PFZpZXcsIEZsb2F0PiBUUkFOU0xBVElPTl9aID0gbmV3IEZsb2F0UHJvcGVydHk8Vmlldz4oInRyYW5zbGF0aW9uWiIpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKFZpZXcgb2JqZWN0LCBmbG9hdCB2YWx1ZSkgeworICAgICAgICAgICAgb2JqZWN0LnNldFRyYW5zbGF0aW9uWih2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIEZsb2F0IGdldChWaWV3IG9iamVjdCkgeworICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5nZXRUcmFuc2xhdGlvblooKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKICAgICAgKiBBIFByb3BlcnR5IHdyYXBwZXIgYXJvdW5kIHRoZSA8Y29kZT54PC9jb2RlPiBmdW5jdGlvbmFsaXR5IGhhbmRsZWQgYnkgdGhlCiAgICAgICoge0BsaW5rIFZpZXcjc2V0WChmbG9hdCl9IGFuZCB7QGxpbmsgVmlldyNnZXRYKCl9IG1ldGhvZHMuCiAgICAgICovCkBAIC0xODczNSw4ICsxOTAxMyw2IEBACiAKICAgICAgICAgZmluYWwgQ2FsbGJhY2tzIG1Sb290Q2FsbGJhY2tzOwogCi0gICAgICAgIEhhcmR3YXJlQ2FudmFzIG1IYXJkd2FyZUNhbnZhczsKLQogICAgICAgICBJV2luZG93SWQgbUlXaW5kb3dJZDsKICAgICAgICAgV2luZG93SWQgbVdpbmRvd0lkOwogCkBAIC0xODc0Niw3ICsxOTAyMiw2IEBACiAgICAgICAgIFZpZXcgbVJvb3RWaWV3OwogCiAgICAgICAgIElCaW5kZXIgbVBhbmVsUGFyZW50V2luZG93VG9rZW47Ci0gICAgICAgIFN1cmZhY2UgbVN1cmZhY2U7CiAKICAgICAgICAgYm9vbGVhbiBtSGFyZHdhcmVBY2NlbGVyYXRlZDsKICAgICAgICAgYm9vbGVhbiBtSGFyZHdhcmVBY2NlbGVyYXRpb25SZXF1ZXN0ZWQ7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdDb25maWd1cmF0aW9uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdDb25maWd1cmF0aW9uLmphdmEKaW5kZXggYzNmMDY0Zi4uZTY3NjU5YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3Q29uZmlndXJhdGlvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld0NvbmZpZ3VyYXRpb24uamF2YQpAQCAtMjEyLDYgKzIxMiwxNCBAQAogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPVkVSRkxJTkdfRElTVEFOQ0UgPSA2OwogCisgICAgLyoqCisgICAgICogQ29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIG92ZXJyaWRpbmcge0BsaW5rICNoYXNQZXJtYW5lbnRNZW51S2V5KCl9IGJlaGF2aW9yLgorICAgICAqIFRoZXNlIGNvbnN0YW50cyBtdXN0IG1hdGNoIHRoZSBkZWZpbml0aW9uIGluIHJlcy92YWx1ZXMvY29uZmlnLnhtbC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEFTX1BFUk1BTkVOVF9NRU5VX0tFWV9BVVRPREVURUNUID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEFTX1BFUk1BTkVOVF9NRU5VX0tFWV9UUlVFID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEFTX1BFUk1BTkVOVF9NRU5VX0tFWV9GQUxTRSA9IDI7CisKICAgICBwcml2YXRlIGZpbmFsIGludCBtRWRnZVNsb3A7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUZhZGluZ0VkZ2VMZW5ndGg7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1pbmltdW1GbGluZ1ZlbG9jaXR5OwpAQCAtMjk2LDEyICszMDQsMzEgQEAKICAgICAgICAgbU92ZXJmbGluZ0Rpc3RhbmNlID0gKGludCkgKHNpemVBbmREZW5zaXR5ICogT1ZFUkZMSU5HX0RJU1RBTkNFICsgMC41Zik7CiAKICAgICAgICAgaWYgKCFzSGFzUGVybWFuZW50TWVudUtleVNldCkgewotICAgICAgICAgICAgSVdpbmRvd01hbmFnZXIgd20gPSBXaW5kb3dNYW5hZ2VyR2xvYmFsLmdldFdpbmRvd01hbmFnZXJTZXJ2aWNlKCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHNIYXNQZXJtYW5lbnRNZW51S2V5ID0gIXdtLmhhc05hdmlnYXRpb25CYXIoKTsKLSAgICAgICAgICAgICAgICBzSGFzUGVybWFuZW50TWVudUtleVNldCA9IHRydWU7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBzSGFzUGVybWFuZW50TWVudUtleSA9IGZhbHNlOworICAgICAgICAgICAgZmluYWwgaW50IGNvbmZpZ1ZhbCA9IHJlcy5nZXRJbnRlZ2VyKAorICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmludGVnZXIuY29uZmlnX292ZXJyaWRlSGFzUGVybWFuZW50TWVudUtleSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoY29uZmlnVmFsKSB7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBjYXNlIEhBU19QRVJNQU5FTlRfTUVOVV9LRVlfQVVUT0RFVEVDVDogeworICAgICAgICAgICAgICAgICAgICBJV2luZG93TWFuYWdlciB3bSA9IFdpbmRvd01hbmFnZXJHbG9iYWwuZ2V0V2luZG93TWFuYWdlclNlcnZpY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNIYXNQZXJtYW5lbnRNZW51S2V5ID0gIXdtLmhhc05hdmlnYXRpb25CYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNIYXNQZXJtYW5lbnRNZW51S2V5U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzSGFzUGVybWFuZW50TWVudUtleSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBIQVNfUEVSTUFORU5UX01FTlVfS0VZX1RSVUU6CisgICAgICAgICAgICAgICAgICAgIHNIYXNQZXJtYW5lbnRNZW51S2V5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc0hhc1Blcm1hbmVudE1lbnVLZXlTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgSEFTX1BFUk1BTkVOVF9NRU5VX0tFWV9GQUxTRToKKyAgICAgICAgICAgICAgICAgICAgc0hhc1Blcm1hbmVudE1lbnVLZXkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgc0hhc1Blcm1hbmVudE1lbnVLZXlTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdHcm91cC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3R3JvdXAuamF2YQppbmRleCA5NDE0MjM3Li4yNDFiMWE3YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3R3JvdXAuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdHcm91cC5qYXZhCkBAIC0zOCw3ICszOCw2IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlBvb2xzLlN5bmNocm9uaXplZFBvb2w7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb247CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb25VdGlsczsKQEAgLTM1Niw2ICszNTUsMTIgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19MQVlPVVRfTU9ERV9XQVNfRVhQTElDSVRMWV9TRVQgPSAweDgwMDAwMDsKIAogICAgIC8qKgorICAgICAqIFdoZW4gdHJ1ZSwgaW5kaWNhdGVzIHRoYXQgYWxsIDNkIGNvbXBvc2l0ZWQgZGVzY2VuZGVudHMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBncm91cCwgYW5kCisgICAgICogd2lsbCBub3QgYmUgaW50ZXJsZWF2ZWQgd2l0aCBvdGhlciAzZCBjb21wb3NpdGVkIGNvbnRlbnQuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBGTEFHX0lTX0NPTlRBSU5FRF9WT0xVTUUgPSAweDEwMDAwMDA7CisKKyAgICAvKioKICAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggdHlwZXMgb2YgZHJhd2luZyBjYWNoZXMgYXJlIHRvIGJlIGtlcHQgaW4gbWVtb3J5LgogICAgICAqIFRoaXMgZmllbGQgc2hvdWxkIGJlIG1hZGUgcHJpdmF0ZSwgc28gaXQgaXMgaGlkZGVuIGZyb20gdGhlIFNESy4KICAgICAgKiB7QGhpZGV9CkBAIC00NTYsMjAgKzQ2MSwyMSBAQAogICAgIHByaXZhdGUgaW50IG1DaGlsZENvdW50V2l0aFRyYW5zaWVudFN0YXRlID0gMDsKIAogICAgIHB1YmxpYyBWaWV3R3JvdXAoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICBpbml0Vmlld0dyb3VwKCk7CisgICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7CiAgICAgfQogCiAgICAgcHVibGljIFZpZXdHcm91cChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgIGluaXRWaWV3R3JvdXAoKTsKLSAgICAgICAgaW5pdEZyb21BdHRyaWJ1dGVzKGNvbnRleHQsIGF0dHJzKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogCi0gICAgcHVibGljIFZpZXdHcm91cChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFZpZXdHcm91cChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBWaWV3R3JvdXAoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIGluaXRWaWV3R3JvdXAoKTsKLSAgICAgICAgaW5pdEZyb21BdHRyaWJ1dGVzKGNvbnRleHQsIGF0dHJzKTsKKyAgICAgICAgaW5pdEZyb21BdHRyaWJ1dGVzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWdEcmF3KCkgewpAQCAtNDg2LDYgKzQ5Miw3IEBACiAgICAgICAgIG1Hcm91cEZsYWdzIHw9IEZMQUdfQU5JTUFUSU9OX0RPTkU7CiAgICAgICAgIG1Hcm91cEZsYWdzIHw9IEZMQUdfQU5JTUFUSU9OX0NBQ0hFOwogICAgICAgICBtR3JvdXBGbGFncyB8PSBGTEFHX0FMV0FZU19EUkFXTl9XSVRIX0NBQ0hFOworICAgICAgICBtR3JvdXBGbGFncyB8PSBGTEFHX0lTX0NPTlRBSU5FRF9WT0xVTUU7CiAKICAgICAgICAgaWYgKG1Db250ZXh0LmdldEFwcGxpY2F0aW9uSW5mbygpLnRhcmdldFNka1ZlcnNpb24gPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5IT05FWUNPTUIpIHsKICAgICAgICAgICAgIG1Hcm91cEZsYWdzIHw9IEZMQUdfU1BMSVRfTU9USU9OX0VWRU5UUzsKQEAgLTQ5OSw5ICs1MDYsOSBAQAogICAgICAgICBtUGVyc2lzdGVudERyYXdpbmdDYWNoZSA9IFBFUlNJU1RFTlRfU0NST0xMSU5HX0NBQ0hFOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBpbml0RnJvbUF0dHJpYnV0ZXMoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZpZXdHcm91cCk7CisgICAgcHJpdmF0ZSB2b2lkIGluaXRGcm9tQXR0cmlidXRlcygKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5WaWV3R3JvdXApOwogCiAgICAgICAgIGZpbmFsIGludCBOID0gYS5nZXRJbmRleENvdW50KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CkBAIC01OTgsNyArNjA1LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICB2b2lkIGhhbmRsZUZvY3VzR2FpbkludGVybmFsKGludCBkaXJlY3Rpb24sIFJlY3QgcHJldmlvdXNseUZvY3VzZWRSZWN0KSB7CiAgICAgICAgIGlmIChtRm9jdXNlZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRm9jdXNlZC51bkZvY3VzKCk7CisgICAgICAgICAgICBtRm9jdXNlZC51bkZvY3VzKHRoaXMpOwogICAgICAgICAgICAgbUZvY3VzZWQgPSBudWxsOwogICAgICAgICB9CiAgICAgICAgIHN1cGVyLmhhbmRsZUZvY3VzR2FpbkludGVybmFsKGRpcmVjdGlvbiwgcHJldmlvdXNseUZvY3VzZWRSZWN0KTsKQEAgLTYxNiwxMiArNjIzLDEyIEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBVbmZvY3VzIHVzLCBpZiBuZWNlc3NhcnkKLSAgICAgICAgc3VwZXIudW5Gb2N1cygpOworICAgICAgICBzdXBlci51bkZvY3VzKGZvY3VzZWQpOwogCiAgICAgICAgIC8vIFdlIGhhZCBhIHByZXZpb3VzIG5vdGlvbiBvZiB3aG8gaGFkIGZvY3VzLiBDbGVhciBpdC4KICAgICAgICAgaWYgKG1Gb2N1c2VkICE9IGNoaWxkKSB7CiAgICAgICAgICAgICBpZiAobUZvY3VzZWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1Gb2N1c2VkLnVuRm9jdXMoKTsKKyAgICAgICAgICAgICAgICBtRm9jdXNlZC51bkZvY3VzKGZvY3VzZWQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtRm9jdXNlZCA9IGNoaWxkOwpAQCAtODEyLDE0ICs4MTksMTQgQEAKICAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgICovCiAgICAgQE92ZXJyaWRlCi0gICAgdm9pZCB1bkZvY3VzKCkgeworICAgIHZvaWQgdW5Gb2N1cyhWaWV3IGZvY3VzZWQpIHsKICAgICAgICAgaWYgKERCRykgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRoaXMgKyAiIHVuRm9jdXMoKSIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtRm9jdXNlZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzdXBlci51bkZvY3VzKCk7CisgICAgICAgICAgICBzdXBlci51bkZvY3VzKGZvY3VzZWQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUZvY3VzZWQudW5Gb2N1cygpOworICAgICAgICAgICAgbUZvY3VzZWQudW5Gb2N1cyhmb2N1c2VkKTsKICAgICAgICAgICAgIG1Gb2N1c2VkID0gbnVsbDsKICAgICAgICAgfQogICAgIH0KQEAgLTI1MTAsMTMgKzI1MTcsMTMgQEAKICAgICB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mb0ludGVybmFsKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBpbmZvKSB7CiAgICAgICAgIHN1cGVyLm9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mb0ludGVybmFsKGluZm8pOwogICAgICAgICBpZiAobUF0dGFjaEluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgQXJyYXlMaXN0PFZpZXc+IGNoaWxkcmVuRm9yQWNjZXNzaWJpbGl0eSA9IG1BdHRhY2hJbmZvLm1UZW1wQXJyYXlMaXN0OworICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PFZpZXc+IGNoaWxkcmVuRm9yQWNjZXNzaWJpbGl0eSA9IG1BdHRhY2hJbmZvLm1UZW1wQXJyYXlMaXN0OwogICAgICAgICAgICAgY2hpbGRyZW5Gb3JBY2Nlc3NpYmlsaXR5LmNsZWFyKCk7CiAgICAgICAgICAgICBhZGRDaGlsZHJlbkZvckFjY2Vzc2liaWxpdHkoY2hpbGRyZW5Gb3JBY2Nlc3NpYmlsaXR5KTsKICAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZHJlbkZvckFjY2Vzc2liaWxpdHlDb3VudCA9IGNoaWxkcmVuRm9yQWNjZXNzaWJpbGl0eS5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuRm9yQWNjZXNzaWJpbGl0eUNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBWaWV3IGNoaWxkID0gY2hpbGRyZW5Gb3JBY2Nlc3NpYmlsaXR5LmdldChpKTsKLSAgICAgICAgICAgICAgICBpbmZvLmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gY2hpbGRyZW5Gb3JBY2Nlc3NpYmlsaXR5LmdldChpKTsKKyAgICAgICAgICAgICAgICBpbmZvLmFkZENoaWxkVW5jaGVja2VkKGNoaWxkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNoaWxkcmVuRm9yQWNjZXNzaWJpbGl0eS5jbGVhcigpOwogICAgICAgICB9CkBAIC0zMTA0LDcgKzMxMTEsNDQgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhzIGdyb3VwJ3MgY2hpbGRyZW4gYXJlIGNsaXBwZWQgdG8gdGhlaXIgYm91bmRzIGJlZm9yZSBkcmF3aW5nLgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIGdyb3VwJ3MgZGVzY2VuZGVudHMgYXJlIGRyYXduIGluIHRoZWlyIG93bgorICAgICAqIGluZGVwZW5kZW50IFogdm9sdW1lLiBWaWV3cyBkcmF3biBpbiBvbmUgY29udGFpbmVkIHZvbHVtZSB3aWxsIG5vdAorICAgICAqIGludGVybGVhdmUgd2l0aCB2aWV3cyBpbiBhbm90aGVyLCBldmVuIGlmIHRoZWlyIFogdmFsdWVzIGFyZSBpbnRlcmxlYXZlZC4KKyAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLgorICAgICAqIEBzZWUgI3NldElzQ29udGFpbmVkVm9sdW1lKGJvb2xlYW4pCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIFZpZXdHcm91cCBpcyBhIGNvbnRhaW5lZCB2b2x1bWUuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ29udGFpbmVkVm9sdW1lKCkgeworICAgICAgICByZXR1cm4gKChtR3JvdXBGbGFncyAmIEZMQUdfSVNfQ09OVEFJTkVEX1ZPTFVNRSkgIT0gMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQnkgZGVmYXVsdCwgb25seSBkaXJlY3QgY2hpbGRyZW4gb2YgYSBncm91cCBjYW4gaW50ZXJsZWF2ZSB3aXRoCisgICAgICogaW50ZXJsZWF2ZWQgWiB2YWx1ZXMuIFNldCB0byBmYWxzZSBvbiBpbmRpdmlkdWFsIGdyb3VwcyB0byBlbmFibGUgWgorICAgICAqIGludGVybGVhdmluZyBvZiB2aWV3cyB0aGF0IGFyZW4ndCBkaXJlY3Qgc2libGluZ3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGdyb3VwIHNob3VsZCBiZSBhIGNvbnRhaW5lZCB2b2x1bWUgd2l0aCBpdHMgb3duIFoKKyAgICAgKiAgICAgICAgIG9yZGVyaW5nIHNwYWNlLCBmYWxzZSBpZiBpdHMgZGVjZW5kZW50cyBzaG91bGQgam9pbiB0aGUgY3VycmVudCBaCisgICAgICogICAgICAgICBvcmRlcmluZyB2b2x1bWUuCisgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjVmlld0dyb3VwX2lzQ29udGFpbmVkVm9sdW1lCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldElzQ29udGFpbmVkVm9sdW1lKGJvb2xlYW4gaXNDb250YWluZWRWb2x1bWUpIHsKKyAgICAgICAgYm9vbGVhbiBwcmV2aW91c1ZhbHVlID0gKG1Hcm91cEZsYWdzICYgRkxBR19JU19DT05UQUlORURfVk9MVU1FKSA9PSBGTEFHX0lTX0NPTlRBSU5FRF9WT0xVTUU7CisgICAgICAgIGlmIChpc0NvbnRhaW5lZFZvbHVtZSAhPSBwcmV2aW91c1ZhbHVlKSB7CisgICAgICAgICAgICBzZXRCb29sZWFuRmxhZyhGTEFHX0lTX0NPTlRBSU5FRF9WT0xVTUUsIGlzQ29udGFpbmVkVm9sdW1lKTsKKyAgICAgICAgICAgIGlmIChtRGlzcGxheUxpc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1EaXNwbGF5TGlzdC5zZXRJc0NvbnRhaW5lZFZvbHVtZShpc0NvbnRhaW5lZFZvbHVtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBncm91cCdzIGNoaWxkcmVuIGFyZSBjbGlwcGVkIHRvIHRoZWlyIGJvdW5kcyBiZWZvcmUgZHJhd2luZy4KICAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLgogICAgICAqIEBzZWUgI3NldENsaXBDaGlsZHJlbihib29sZWFuKQogICAgICAqCkBAIC0zODI3LDcgKzM4NzEsNyBAQAogCiAgICAgICAgIGJvb2xlYW4gY2xlYXJDaGlsZEZvY3VzID0gZmFsc2U7CiAgICAgICAgIGlmICh2aWV3ID09IG1Gb2N1c2VkKSB7Ci0gICAgICAgICAgICB2aWV3LnVuRm9jdXMoKTsKKyAgICAgICAgICAgIHZpZXcudW5Gb2N1cyhudWxsKTsKICAgICAgICAgICAgIGNsZWFyQ2hpbGRGb2N1cyA9IHRydWU7CiAgICAgICAgIH0KIApAQCAtMzkyMiw3ICszOTY2LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHZpZXcgPT0gZm9jdXNlZCkgewotICAgICAgICAgICAgICAgIHZpZXcudW5Gb2N1cygpOworICAgICAgICAgICAgICAgIHZpZXcudW5Gb2N1cyhudWxsKTsKICAgICAgICAgICAgICAgICBjbGVhckNoaWxkRm9jdXMgPSB0cnVlOwogICAgICAgICAgICAgfQogCkBAIC00MDA5LDcgKzQwNTMsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodmlldyA9PSBmb2N1c2VkKSB7Ci0gICAgICAgICAgICAgICAgdmlldy51bkZvY3VzKCk7CisgICAgICAgICAgICAgICAgdmlldy51bkZvY3VzKG51bGwpOwogICAgICAgICAgICAgICAgIGNsZWFyQ2hpbGRGb2N1cyA9IHRydWU7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld092ZXJsYXkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld092ZXJsYXkuamF2YQppbmRleCA5NzU5MzFhLi40N2RlNzgwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdPdmVybGF5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3T3ZlcmxheS5qYXZhCkBAIC0xNTUsNiArMTU1LDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gdmVyaWZ5RHJhd2FibGUoRHJhd2FibGUgd2hvKSB7CisgICAgICAgICAgICByZXR1cm4gc3VwZXIudmVyaWZ5RHJhd2FibGUod2hvKSB8fCAobURyYXdhYmxlcyAhPSBudWxsICYmIG1EcmF3YWJsZXMuY29udGFpbnMod2hvKSk7CisgICAgICAgIH0KKwogICAgICAgICBwdWJsaWMgdm9pZCBhZGQoVmlldyBjaGlsZCkgewogICAgICAgICAgICAgaWYgKGNoaWxkLmdldFBhcmVudCgpIGluc3RhbmNlb2YgVmlld0dyb3VwKSB7CiAgICAgICAgICAgICAgICAgVmlld0dyb3VwIHBhcmVudCA9IChWaWV3R3JvdXApIGNoaWxkLmdldFBhcmVudCgpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvci5qYXZhCmluZGV4IDY3YTk0YmUuLjE4OTJhYTcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3IuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdQcm9wZXJ0eUFuaW1hdG9yLmphdmEKQEAgLTEzNiwxNyArMTM2LDE4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PTkUgICAgICAgICAgID0gMHgwMDAwOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUkFOU0xBVElPTl9YICA9IDB4MDAwMTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNMQVRJT05fWSAgPSAweDAwMDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDQUxFX1ggICAgICAgID0gMHgwMDA0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTQ0FMRV9ZICAgICAgICA9IDB4MDAwODsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUk9UQVRJT04gICAgICAgPSAweDAwMTA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJPVEFUSU9OX1ggICAgID0gMHgwMDIwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBST1RBVElPTl9ZICAgICA9IDB4MDA0MDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWCAgICAgICAgICAgICAgPSAweDAwODA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFkgICAgICAgICAgICAgID0gMHgwMTAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBTFBIQSAgICAgICAgICA9IDB4MDIwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNMQVRJT05fWiAgPSAweDAwMDQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDQUxFX1ggICAgICAgID0gMHgwMDA4OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTQ0FMRV9ZICAgICAgICA9IDB4MDAxMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUk9UQVRJT04gICAgICAgPSAweDAwMjA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJPVEFUSU9OX1ggICAgID0gMHgwMDQwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBST1RBVElPTl9ZICAgICA9IDB4MDA4MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWCAgICAgICAgICAgICAgPSAweDAxMDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFkgICAgICAgICAgICAgID0gMHgwMjAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBTFBIQSAgICAgICAgICA9IDB4MDQwMDsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUkFOU0ZPUk1fTUFTSyA9IFRSQU5TTEFUSU9OX1ggfCBUUkFOU0xBVElPTl9ZIHwgU0NBTEVfWCB8IFNDQUxFX1kgfAotICAgICAgICAgICAgUk9UQVRJT04gfCBST1RBVElPTl9YIHwgUk9UQVRJT05fWSB8IFggfCBZOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUkFOU0ZPUk1fTUFTSyA9IFRSQU5TTEFUSU9OX1ggfCBUUkFOU0xBVElPTl9ZIHwgVFJBTlNMQVRJT05fWiB8CisgICAgICAgICAgICBTQ0FMRV9YIHwgU0NBTEVfWSB8IFJPVEFUSU9OIHwgUk9UQVRJT05fWCB8IFJPVEFUSU9OX1kgfCBYIHwgWTsKIAogICAgIC8qKgogICAgICAqIFRoZSBtZWNoYW5pc20gYnkgd2hpY2ggdGhlIHVzZXIgY2FuIHJlcXVlc3Qgc2V2ZXJhbCBwcm9wZXJ0aWVzIHRoYXQgYXJlIHRoZW4gYW5pbWF0ZWQKQEAgLTU5OSw2ICs2MDAsMzEgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGNhdXNlIHRoZSBWaWV3J3MgPGNvZGU+dHJhbnNsYXRpb25aPC9jb2RlPiBwcm9wZXJ0eSB0byBiZSBhbmltYXRlZCB0byB0aGUKKyAgICAgKiBzcGVjaWZpZWQgdmFsdWUuIEFuaW1hdGlvbnMgYWxyZWFkeSBydW5uaW5nIG9uIHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGNhbmNlbGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSBhbmltYXRlZCB0by4KKyAgICAgKiBAc2VlIFZpZXcjc2V0VHJhbnNsYXRpb25aKGZsb2F0KQorICAgICAqIEByZXR1cm4gVGhpcyBvYmplY3QsIGFsbG93aW5nIGNhbGxzIHRvIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyB0byBiZSBjaGFpbmVkLgorICAgICAqLworICAgIHB1YmxpYyBWaWV3UHJvcGVydHlBbmltYXRvciB0cmFuc2xhdGlvblooZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgYW5pbWF0ZVByb3BlcnR5KFRSQU5TTEFUSU9OX1osIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgd2lsbCBjYXVzZSB0aGUgVmlldydzIDxjb2RlPnRyYW5zbGF0aW9uWjwvY29kZT4gcHJvcGVydHkgdG8gYmUgYW5pbWF0ZWQgYnkgdGhlCisgICAgICogc3BlY2lmaWVkIHZhbHVlLiBBbmltYXRpb25zIGFscmVhZHkgcnVubmluZyBvbiB0aGUgcHJvcGVydHkgd2lsbCBiZSBjYW5jZWxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgYW1vdW50IHRvIGJlIGFuaW1hdGVkIGJ5LCBhcyBhbiBvZmZzZXQgZnJvbSB0aGUgY3VycmVudCB2YWx1ZS4KKyAgICAgKiBAc2VlIFZpZXcjc2V0VHJhbnNsYXRpb25aKGZsb2F0KQorICAgICAqIEByZXR1cm4gVGhpcyBvYmplY3QsIGFsbG93aW5nIGNhbGxzIHRvIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyB0byBiZSBjaGFpbmVkLgorICAgICAqLworICAgIHB1YmxpYyBWaWV3UHJvcGVydHlBbmltYXRvciB0cmFuc2xhdGlvblpCeShmbG9hdCB2YWx1ZSkgeworICAgICAgICBhbmltYXRlUHJvcGVydHlCeShUUkFOU0xBVElPTl9aLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGNhdXNlIHRoZSBWaWV3J3MgPGNvZGU+c2NhbGVYPC9jb2RlPiBwcm9wZXJ0eSB0byBiZSBhbmltYXRlZCB0byB0aGUKICAgICAgKiBzcGVjaWZpZWQgdmFsdWUuIEFuaW1hdGlvbnMgYWxyZWFkeSBydW5uaW5nIG9uIHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGNhbmNlbGVkLgogICAgICAqCkBAIC05MDksNiArOTM1LDEwIEBACiAgICAgICAgICAgICAgICAgaW5mby5tVHJhbnNsYXRpb25ZID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlMaXN0ICE9IG51bGwpIGRpc3BsYXlMaXN0LnNldFRyYW5zbGF0aW9uWSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRSQU5TTEFUSU9OX1o6CisgICAgICAgICAgICAgICAgaW5mby5tVHJhbnNsYXRpb25aID0gdmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlMaXN0ICE9IG51bGwpIGRpc3BsYXlMaXN0LnNldFRyYW5zbGF0aW9uWih2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFJPVEFUSU9OOgogICAgICAgICAgICAgICAgIGluZm8ubVJvdGF0aW9uID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlMaXN0ICE9IG51bGwpIGRpc3BsYXlMaXN0LnNldFJvdGF0aW9uKHZhbHVlKTsKQEAgLTk1Nyw2ICs5ODcsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLm1UcmFuc2xhdGlvblg7CiAgICAgICAgICAgICBjYXNlIFRSQU5TTEFUSU9OX1k6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluZm8ubVRyYW5zbGF0aW9uWTsKKyAgICAgICAgICAgIGNhc2UgVFJBTlNMQVRJT05fWjoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5mby5tVHJhbnNsYXRpb25aOwogICAgICAgICAgICAgY2FzZSBST1RBVElPTjoKICAgICAgICAgICAgICAgICByZXR1cm4gaW5mby5tUm90YXRpb247CiAgICAgICAgICAgICBjYXNlIFJPVEFUSU9OX1g6CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdSb290SW1wbC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3Um9vdEltcGwuamF2YQppbmRleCBiYzBkN2UzLi40MWIwYzY3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdSb290SW1wbC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld1Jvb3RJbXBsLmphdmEKQEAgLTI4LDYgKzI4LDcgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXg7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpeGVsRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7CkBAIC0xMDgsNyArMTA5LDYgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0lNRiA9IGZhbHNlIHx8IExPQ0FMX0xPR1Y7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19DT05GSUdVUkFUSU9OID0gZmFsc2UgfHwgTE9DQUxfTE9HVjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0ZQUyA9IGZhbHNlOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfSU5QVVRfUFJPQ0VTU0lORyA9IGZhbHNlIHx8IExPQ0FMX0xPR1Y7CiAKICAgICAvKioKICAgICAgKiBTZXQgdGhpcyBzeXN0ZW0gcHJvcGVydHkgdG8gdHJ1ZSB0byBmb3JjZSB0aGUgdmlldyBoaWVyYXJjaHkgdG8gcmVuZGVyCkBAIC0yNjYsMTAgKzI2NiwxMCBAQAogICAgIGludCBtU2Nyb2xsWTsKICAgICBpbnQgbUN1clNjcm9sbFk7CiAgICAgU2Nyb2xsZXIgbVNjcm9sbGVyOwotICAgIEhhcmR3YXJlTGF5ZXIgbVJlc2l6ZUJ1ZmZlcjsKLSAgICBsb25nIG1SZXNpemVCdWZmZXJTdGFydFRpbWU7Ci0gICAgaW50IG1SZXNpemVCdWZmZXJEdXJhdGlvbjsKLSAgICBzdGF0aWMgZmluYWwgSW50ZXJwb2xhdG9yIG1SZXNpemVJbnRlcnBvbGF0b3IgPSBuZXcgQWNjZWxlcmF0ZURlY2VsZXJhdGVJbnRlcnBvbGF0b3IoKTsKKy8vICAgIEhhcmR3YXJlTGF5ZXIgbVJlc2l6ZUJ1ZmZlcjsKKy8vICAgIGxvbmcgbVJlc2l6ZUJ1ZmZlclN0YXJ0VGltZTsKKy8vICAgIGludCBtUmVzaXplQnVmZmVyRHVyYXRpb247CisvLyAgICBzdGF0aWMgZmluYWwgSW50ZXJwb2xhdG9yIG1SZXNpemVJbnRlcnBvbGF0b3IgPSBuZXcgQWNjZWxlcmF0ZURlY2VsZXJhdGVJbnRlcnBvbGF0b3IoKTsKICAgICBwcml2YXRlIEFycmF5TGlzdDxMYXlvdXRUcmFuc2l0aW9uPiBtUGVuZGluZ1RyYW5zaXRpb25zOwogCiAgICAgZmluYWwgVmlld0NvbmZpZ3VyYXRpb24gbVZpZXdDb25maWd1cmF0aW9uOwpAQCAtNzE5LDcgKzcxOSw3IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB0cmFuc2x1Y2VudCA9IGF0dHJzLmZvcm1hdCAhPSBQaXhlbEZvcm1hdC5PUEFRVUU7Ci0gICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIgPSBIYXJkd2FyZVJlbmRlcmVyLmNyZWF0ZUdsUmVuZGVyZXIoMiwgdHJhbnNsdWNlbnQpOworICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyID0gSGFyZHdhcmVSZW5kZXJlci5jcmVhdGUodHJhbnNsdWNlbnQpOwogICAgICAgICAgICAgICAgIGlmIChtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLnNldE5hbWUoYXR0cnMuZ2V0VGl0bGUoKS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlQWNjZWxlcmF0ZWQgPQpAQCAtOTMzLDE3ICs5MzMsMTcgQEAKICAgICAgICAgcmV0dXJuIG1BcHBWaXNpYmxlID8gbVZpZXcuZ2V0VmlzaWJpbGl0eSgpIDogVmlldy5HT05FOwogICAgIH0KIAotICAgIHZvaWQgZGlzcG9zZVJlc2l6ZUJ1ZmZlcigpIHsKLSAgICAgICAgaWYgKG1SZXNpemVCdWZmZXIgIT0gbnVsbCAmJiBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5zYWZlbHlSdW4obmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgbVJlc2l6ZUJ1ZmZlci5kZXN0cm95KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXIgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQorLy8gICAgdm9pZCBkaXNwb3NlUmVzaXplQnVmZmVyKCkgeworLy8gICAgICAgIGlmIChtUmVzaXplQnVmZmVyICE9IG51bGwgJiYgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIgIT0gbnVsbCkgeworLy8gICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5zYWZlbHlSdW4obmV3IFJ1bm5hYmxlKCkgeworLy8gICAgICAgICAgICAgICAgQE92ZXJyaWRlCisvLyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisvLyAgICAgICAgICAgICAgICAgICAgbVJlc2l6ZUJ1ZmZlci5kZXN0cm95KCk7CisvLyAgICAgICAgICAgICAgICAgICAgbVJlc2l6ZUJ1ZmZlciA9IG51bGw7CisvLyAgICAgICAgICAgICAgICB9CisvLyAgICAgICAgICAgIH0pOworLy8gICAgICAgIH0KKy8vICAgIH0KIAogICAgIC8qKgogICAgICAqIEFkZCBMYXlvdXRUcmFuc2l0aW9uIHRvIHRoZSBsaXN0IG9mIHRyYW5zaXRpb25zIHRvIGJlIHN0YXJ0ZWQgaW4gdGhlIG5leHQgdHJhdmVyc2FsLgpAQCAtMTEyNSw2ICsxMTI1LDI4IEBACiAgICAgICAgIHJldHVybiB3aW5kb3dTaXplTWF5Q2hhbmdlOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIE1vZGlmaWVzIHRoZSBpbnB1dCBtYXRyaXggc3VjaCB0aGF0IGl0IG1hcHMgdmlldy1sb2NhbCBjb29yZGluYXRlcyB0bworICAgICAqIG9uLXNjcmVlbiBjb29yZGluYXRlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtIGlucHV0IG1hdHJpeCB0byBtb2RpZnkKKyAgICAgKi8KKyAgICB2b2lkIHRyYW5zZm9ybU1hdHJpeFRvR2xvYmFsKE1hdHJpeCBtKSB7CisgICAgICAgIGZpbmFsIFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvID0gbUF0dGFjaEluZm87CisgICAgICAgIG0ucG9zdFRyYW5zbGF0ZShhdHRhY2hJbmZvLm1XaW5kb3dMZWZ0LCBhdHRhY2hJbmZvLm1XaW5kb3dUb3ApOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1vZGlmaWVzIHRoZSBpbnB1dCBtYXRyaXggc3VjaCB0aGF0IGl0IG1hcHMgb24tc2NyZWVuIGNvb3JkaW5hdGVzIHRvCisgICAgICogdmlldy1sb2NhbCBjb29yZGluYXRlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtIGlucHV0IG1hdHJpeCB0byBtb2RpZnkKKyAgICAgKi8KKyAgICB2b2lkIHRyYW5zZm9ybU1hdHJpeFRvTG9jYWwoTWF0cml4IG0pIHsKKyAgICAgICAgZmluYWwgVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8gPSBtQXR0YWNoSW5mbzsKKyAgICAgICAgbS5wcmVUcmFuc2xhdGUoLWF0dGFjaEluZm8ubVdpbmRvd0xlZnQsIC1hdHRhY2hJbmZvLm1XaW5kb3dUb3ApOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCBwZXJmb3JtVHJhdmVyc2FscygpIHsKICAgICAgICAgLy8gY2FjaGUgbVZpZXcgc2luY2UgaXQgaXMgdXNlZCBzbyBtdWNoIGJlbG93Li4uCiAgICAgICAgIGZpbmFsIFZpZXcgaG9zdCA9IG1WaWV3OwpAQCAtMTE5NSwxMSArMTIxNyw2IEBACiAgICAgICAgICAgICAgICAgZGVzaXJlZFdpbmRvd0hlaWdodCA9IHBhY2thZ2VNZXRyaWNzLmhlaWdodFBpeGVsczsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gRm9yIHRoZSB2ZXJ5IGZpcnN0IHRpbWUsIHRlbGwgdGhlIHZpZXcgaGllcmFyY2h5IHRoYXQgaXQKLSAgICAgICAgICAgIC8vIGlzIGF0dGFjaGVkIHRvIHRoZSB3aW5kb3cuICBOb3RlIHRoYXQgYXQgdGhpcyBwb2ludCB0aGUgc3VyZmFjZQotICAgICAgICAgICAgLy8gb2JqZWN0IGlzIG5vdCBpbml0aWFsaXplZCB0byBpdHMgYmFja2luZyBzdG9yZSwgYnV0IHNvb24gaXQKLSAgICAgICAgICAgIC8vIHdpbGwgYmUgKGFzc3VtaW5nIHRoZSB3aW5kb3cgaXMgdmlzaWJsZSkuCi0gICAgICAgICAgICBhdHRhY2hJbmZvLm1TdXJmYWNlID0gbVN1cmZhY2U7CiAgICAgICAgICAgICAvLyBXZSB1c2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbiB0byBjaG9vc2UgMzIgYml0cyBkcmF3aW5nIGNhY2hlczoKICAgICAgICAgICAgIC8vIFBpeGVsRm9ybWF0Lmhhc0FscGhhKGxwLmZvcm1hdCkgfHwgbHAuZm9ybWF0ID09IFBpeGVsRm9ybWF0LlJHQlhfODg4OAogICAgICAgICAgICAgLy8gSG93ZXZlciwgd2luZG93cyBhcmUgbm93IGFsd2F5cyAzMiBiaXRzIGJ5IGRlZmF1bHQsIHNvIGNob29zZSAzMiBiaXRzCkBAIC0xNDM3LDc1ICsxNDU0LDc2IEBACiAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB2aXNpYmxlSW5zZXRzQ2hhbmdlZCA9ICFtUGVuZGluZ1Zpc2libGVJbnNldHMuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubVZpc2libGVJbnNldHMpOwogICAgICAgICAgICAgICAgIGlmIChjb250ZW50SW5zZXRzQ2hhbmdlZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZHRoID4gMCAmJiBtSGVpZ2h0ID4gMCAmJiBscCAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChscC5zeXN0ZW1VaVZpc2liaWxpdHl8bHAuc3VidHJlZVN5c3RlbVVpVmlzaWJpbGl0eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgVmlldy5TWVNURU1fVUlfTEFZT1VUX0ZMQUdTKSA9PSAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1cmZhY2UgIT0gbnVsbCAmJiBtU3VyZmFjZS5pc1ZhbGlkKCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbUF0dGFjaEluZm8ubVR1cm5PZmZXaW5kb3dSZXNpemVBbmltICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmlzRW5hYmxlZCgpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIudmFsaWRhdGUoKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwICE9IG51bGwgJiYgIVBpeGVsRm9ybWF0LmZvcm1hdEhhc0FscGhhKGxwLmZvcm1hdCkpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zZVJlc2l6ZUJ1ZmZlcigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNvbXBsZXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgSGFyZHdhcmVDYW52YXMgaHdSZW5kZXJlckNhbnZhcyA9IG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmdldENhbnZhcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgSGFyZHdhcmVDYW52YXMgbGF5ZXJDYW52YXMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVJlc2l6ZUJ1ZmZlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXIgPSBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5jcmVhdGVIYXJkd2FyZUxheWVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodCwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobVJlc2l6ZUJ1ZmZlci5nZXRXaWR0aCgpICE9IG1XaWR0aCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc2l6ZUJ1ZmZlci5nZXRIZWlnaHQoKSAhPSBtSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXIucmVzaXplKG1XaWR0aCwgbUhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBoYW5kbGUgY3JlYXRlL3Jlc2l6ZSBmYWlsdXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJDYW52YXMgPSBtUmVzaXplQnVmZmVyLnN0YXJ0KGh3UmVuZGVyZXJDYW52YXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCByZXN0b3JlQ291bnQgPSBsYXllckNhbnZhcy5zYXZlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeW9mZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHNjcm9sbGluZyA9IG1TY3JvbGxlciAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtU2Nyb2xsZXIuY29tcHV0ZVNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW9mZiA9IG1TY3JvbGxlci5nZXRDdXJyWSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2Nyb2xsZXIuYWJvcnRBbmltYXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b2ZmID0gbVNjcm9sbFk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJDYW52YXMudHJhbnNsYXRlKDAsIC15b2ZmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVRyYW5zbGF0b3IgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNsYXRvci50cmFuc2xhdGVDYW52YXMobGF5ZXJDYW52YXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0ID0gbVZpZXcubURpc3BsYXlMaXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5TGlzdCAhPSBudWxsICYmIGRpc3BsYXlMaXN0LmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckNhbnZhcy5kcmF3RGlzcGxheUxpc3QoZGlzcGxheUxpc3QsIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheUxpc3QuRkxBR19DTElQX0NISUxEUkVOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVmlldy5kcmF3KGxheWVyQ2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3QWNjZXNzaWJpbGl0eUZvY3VzZWREcmF3YWJsZUlmTmVlZGVkKGxheWVyQ2FudmFzKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXJTdGFydFRpbWUgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzaXplQnVmZmVyRHVyYXRpb24gPSBtVmlldy5nZXRSZXNvdXJjZXMoKS5nZXRJbnRlZ2VyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pbnRlZ2VyLmNvbmZpZ19tZWRpdW1BbmltVGltZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQ2FudmFzLnJlc3RvcmVUb0NvdW50KHJlc3RvcmVDb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChPdXRPZk1lbW9yeUVycm9yIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgY29udGVudCBjaGFuZ2UgYW5pbSBidWZmZXIiLCBlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1SZXNpemVCdWZmZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzaXplQnVmZmVyLmVuZChod1JlbmRlcmVyQ2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wbGV0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2VSZXNpemVCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQorLy8gICAgICAgICAgICAgICAgICAgIFRPRE86IERvIHNvbWV0aGluZyB3aXRoIHRoaXMuLi4KKy8vICAgICAgICAgICAgICAgICAgICBpZiAobVdpZHRoID4gMCAmJiBtSGVpZ2h0ID4gMCAmJiBscCAhPSBudWxsICYmCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxwLnN5c3RlbVVpVmlzaWJpbGl0eXxscC5zdWJ0cmVlU3lzdGVtVWlWaXNpYmlsaXR5KQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFZpZXcuU1lTVEVNX1VJX0xBWU9VVF9GTEFHUykgPT0gMCAmJgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1cmZhY2UgIT0gbnVsbCAmJiBtU3VyZmFjZS5pc1ZhbGlkKCkgJiYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICFtQXR0YWNoSW5mby5tVHVybk9mZldpbmRvd1Jlc2l6ZUFuaW0gJiYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyICE9IG51bGwgJiYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmlzRW5hYmxlZCgpICYmCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci52YWxpZGF0ZSgpICYmCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBscCAhPSBudWxsICYmICFQaXhlbEZvcm1hdC5mb3JtYXRIYXNBbHBoYShscC5mb3JtYXQpKSB7CisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NlUmVzaXplQnVmZmVyKCk7CisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNvbXBsZXRlZCA9IGZhbHNlOworLy8gICAgICAgICAgICAgICAgICAgICAgICBIYXJkd2FyZUNhbnZhcyBod1JlbmRlcmVyQ2FudmFzID0gbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuZ2V0Q2FudmFzKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhcmR3YXJlQ2FudmFzIGxheWVyQ2FudmFzID0gbnVsbDsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtUmVzaXplQnVmZmVyID09IG51bGwpIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzaXplQnVmZmVyID0gbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuY3JlYXRlSGFyZHdhcmVMYXllcigKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodCwgZmFsc2UpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtUmVzaXplQnVmZmVyLmdldFdpZHRoKCkgIT0gbVdpZHRoIHx8CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXIuZ2V0SGVpZ2h0KCkgIT0gbUhlaWdodCkgeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXIucmVzaXplKG1XaWR0aCwgbUhlaWdodCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgaGFuZGxlIGNyZWF0ZS9yZXNpemUgZmFpbHVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJDYW52YXMgPSBtUmVzaXplQnVmZmVyLnN0YXJ0KGh3UmVuZGVyZXJDYW52YXMpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHJlc3RvcmVDb3VudCA9IGxheWVyQ2FudmFzLnNhdmUoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeW9mZjsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc2Nyb2xsaW5nID0gbVNjcm9sbGVyICE9IG51bGwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbVNjcm9sbGVyLmNvbXB1dGVTY3JvbGxPZmZzZXQoKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxpbmcpIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b2ZmID0gbVNjcm9sbGVyLmdldEN1cnJZKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNjcm9sbGVyLmFib3J0QW5pbWF0aW9uKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvZmYgPSBtU2Nyb2xsWTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckNhbnZhcy50cmFuc2xhdGUoMCwgLXlvZmYpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1UcmFuc2xhdG9yICE9IG51bGwpIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNsYXRvci50cmFuc2xhdGVDYW52YXMobGF5ZXJDYW52YXMpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0ID0gbVZpZXcubURpc3BsYXlMaXN0OworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlMaXN0ICE9IG51bGwgJiYgZGlzcGxheUxpc3QuaXNWYWxpZCgpKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJDYW52YXMuZHJhd0Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0LCBudWxsLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheUxpc3QuRkxBR19DTElQX0NISUxEUkVOKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXcuZHJhdyhsYXllckNhbnZhcyk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0FjY2Vzc2liaWxpdHlGb2N1c2VkRHJhd2FibGVJZk5lZWRlZChsYXllckNhbnZhcyk7CisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc2l6ZUJ1ZmZlclN0YXJ0VGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc2l6ZUJ1ZmZlckR1cmF0aW9uID0gbVZpZXcuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pbnRlZ2VyLmNvbmZpZ19tZWRpdW1BbmltVGltZSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlOworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQ2FudmFzLnJlc3RvcmVUb0NvdW50KHJlc3RvcmVDb3VudCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE91dE9mTWVtb3J5RXJyb3IgZSkgeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiTm90IGVub3VnaCBtZW1vcnkgZm9yIGNvbnRlbnQgY2hhbmdlIGFuaW0gYnVmZmVyIiwgZSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVJlc2l6ZUJ1ZmZlciAhPSBudWxsKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc2l6ZUJ1ZmZlci5lbmQoaHdSZW5kZXJlckNhbnZhcyk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wbGV0ZWQpIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zZVJlc2l6ZUJ1ZmZlcigpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgfQorLy8gICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUNvbnRlbnRJbnNldHMuc2V0KG1QZW5kaW5nQ29udGVudEluc2V0cyk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19MQVlPVVQpIExvZy52KFRBRywgIkNvbnRlbnQgaW5zZXRzIGNoYW5naW5nIHRvOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtQXR0YWNoSW5mby5tQ29udGVudEluc2V0cyk7CkBAIC0xNTQ4LDcgKzE1NjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod0luaXRpYWxpemVkID0gbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuaW5pdGlhbGl6ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSG9sZGVyLmdldFN1cmZhY2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1cmZhY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24oZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1NjUsNyArMTU4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChtU2Nyb2xsZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbVNjcm9sbGVyLmFib3J0QW5pbWF0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGlzcG9zZVJlc2l6ZUJ1ZmZlcigpOworLy8gICAgICAgICAgICAgICAgICAgIGRpc3Bvc2VSZXNpemVCdWZmZXIoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gT3VyIHN1cmZhY2UgaXMgZ29uZQogICAgICAgICAgICAgICAgICAgICBpZiAobUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmlzRW5hYmxlZCgpKSB7CkBAIC0xNTc1LDcgKzE1OTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbVN1cmZhY2VIb2xkZXIgPT0gbnVsbCAmJiBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG1GdWxsUmVkcmF3TmVlZGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLnVwZGF0ZVN1cmZhY2UobUhvbGRlci5nZXRTdXJmYWNlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIudXBkYXRlU3VyZmFjZShtU3VyZmFjZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU91dE9mUmVzb3VyY2VzRXhjZXB0aW9uKGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTY1OCw3ICsxNjc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1IZWlnaHQgIT0gbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuZ2V0SGVpZ2h0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuc2V0dXAobVdpZHRoLCBtSGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFod0luaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5pbnZhbGlkYXRlKG1Ib2xkZXIuZ2V0U3VyZmFjZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmludmFsaWRhdGUobVN1cmZhY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgbUZ1bGxSZWRyYXdOZWVkZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMjE2NCwyMiArMjE4MiwyMyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25IYXJkd2FyZVBvc3REcmF3KEhhcmR3YXJlQ2FudmFzIGNhbnZhcykgewotICAgICAgICBpZiAobVJlc2l6ZUJ1ZmZlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUmVzaXplUGFpbnQuc2V0QWxwaGEobVJlc2l6ZUFscGhhKTsKLSAgICAgICAgICAgIGNhbnZhcy5kcmF3SGFyZHdhcmVMYXllcihtUmVzaXplQnVmZmVyLCAwLjBmLCBtSGFyZHdhcmVZT2Zmc2V0LCBtUmVzaXplUGFpbnQpOworLy8gICAgICAgIGlmIChtUmVzaXplQnVmZmVyICE9IG51bGwpIHsKKy8vICAgICAgICAgICAgbVJlc2l6ZVBhaW50LnNldEFscGhhKG1SZXNpemVBbHBoYSk7CisvLyAgICAgICAgICAgIGNhbnZhcy5kcmF3SGFyZHdhcmVMYXllcihtUmVzaXplQnVmZmVyLCAwLjBmLCBtSGFyZHdhcmVZT2Zmc2V0LCBtUmVzaXplUGFpbnQpOworLy8gICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogdGhpcworICAgICAgICBpZiAoIUhhcmR3YXJlUmVuZGVyZXIuc1VzZVJlbmRlclRocmVhZCkgeworICAgICAgICAgICAgZHJhd0FjY2Vzc2liaWxpdHlGb2N1c2VkRHJhd2FibGVJZk5lZWRlZChjYW52YXMpOwogICAgICAgICB9Ci0gICAgICAgIGRyYXdBY2Nlc3NpYmlsaXR5Rm9jdXNlZERyYXdhYmxlSWZOZWVkZWQoY2FudmFzKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHZvaWQgb3V0cHV0RGlzcGxheUxpc3QoVmlldyB2aWV3KSB7Ci0gICAgICAgIGlmIChtQXR0YWNoSW5mbyAhPSBudWxsICYmIG1BdHRhY2hJbmZvLm1IYXJkd2FyZUNhbnZhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCA9IHZpZXcuZ2V0RGlzcGxheUxpc3QoKTsKLSAgICAgICAgICAgIGlmIChkaXNwbGF5TGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlQ2FudmFzLm91dHB1dERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgRGlzcGxheUxpc3QgZGlzcGxheUxpc3QgPSB2aWV3LmdldERpc3BsYXlMaXN0KCk7CisgICAgICAgIGlmIChkaXNwbGF5TGlzdCAhPSBudWxsKSB7CisgICAgICAgICAgICBkaXNwbGF5TGlzdC5vdXRwdXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMyNSwxNyArMjM0NCwxNyBAQAogICAgICAgICBmaW5hbCBib29sZWFuIHNjYWxpbmdSZXF1aXJlZCA9IGF0dGFjaEluZm8ubVNjYWxpbmdSZXF1aXJlZDsKIAogICAgICAgICBpbnQgcmVzaXplQWxwaGEgPSAwOwotICAgICAgICBpZiAobVJlc2l6ZUJ1ZmZlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBsb25nIGRlbHRhVGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpIC0gbVJlc2l6ZUJ1ZmZlclN0YXJ0VGltZTsKLSAgICAgICAgICAgIGlmIChkZWx0YVRpbWUgPCBtUmVzaXplQnVmZmVyRHVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBhbXQgPSBkZWx0YVRpbWUvKGZsb2F0KSBtUmVzaXplQnVmZmVyRHVyYXRpb247Ci0gICAgICAgICAgICAgICAgYW10ID0gbVJlc2l6ZUludGVycG9sYXRvci5nZXRJbnRlcnBvbGF0aW9uKGFtdCk7Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXNpemVBbHBoYSA9IDI1NSAtIChpbnQpKGFtdCoyNTUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkaXNwb3NlUmVzaXplQnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKy8vICAgICAgICBpZiAobVJlc2l6ZUJ1ZmZlciAhPSBudWxsKSB7CisvLyAgICAgICAgICAgIGxvbmcgZGVsdGFUaW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCkgLSBtUmVzaXplQnVmZmVyU3RhcnRUaW1lOworLy8gICAgICAgICAgICBpZiAoZGVsdGFUaW1lIDwgbVJlc2l6ZUJ1ZmZlckR1cmF0aW9uKSB7CisvLyAgICAgICAgICAgICAgICBmbG9hdCBhbXQgPSBkZWx0YVRpbWUvKGZsb2F0KSBtUmVzaXplQnVmZmVyRHVyYXRpb247CisvLyAgICAgICAgICAgICAgICBhbXQgPSBtUmVzaXplSW50ZXJwb2xhdG9yLmdldEludGVycG9sYXRpb24oYW10KTsKKy8vICAgICAgICAgICAgICAgIGFuaW1hdGluZyA9IHRydWU7CisvLyAgICAgICAgICAgICAgICByZXNpemVBbHBoYSA9IDI1NSAtIChpbnQpKGFtdCoyNTUpOworLy8gICAgICAgICAgICB9IGVsc2UgeworLy8gICAgICAgICAgICAgICAgZGlzcG9zZVJlc2l6ZUJ1ZmZlcigpOworLy8gICAgICAgICAgICB9CisvLyAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIFJlY3QgZGlydHkgPSBtRGlydHk7CiAgICAgICAgIGlmIChtU3VyZmFjZUhvbGRlciAhPSBudWxsKSB7CkBAIC0yMzQ1LDcgKzIzNjQsNyBAQAogICAgICAgICAgICAgICAgIGlmIChtU2Nyb2xsZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtU2Nyb2xsZXIuYWJvcnRBbmltYXRpb24oKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGlzcG9zZVJlc2l6ZUJ1ZmZlcigpOworLy8gICAgICAgICAgICAgICAgZGlzcG9zZVJlc2l6ZUJ1ZmZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yMzk1LDcgKzI0MTQsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmluaXRpYWxpemVJZk5lZWRlZChtV2lkdGgsIG1IZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Ib2xkZXIuZ2V0U3VyZmFjZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1cmZhY2UpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPdXRPZlJlc291cmNlc0V4Y2VwdGlvbihlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTI1MzAsMjggKzI1NDksMzUgQEAKICAgICAgKiBAcGFyYW0gY2FudmFzIFRoZSBjYW52YXMgb24gd2hpY2ggdG8gZHJhdy4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgZHJhd0FjY2Vzc2liaWxpdHlGb2N1c2VkRHJhd2FibGVJZk5lZWRlZChDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyIG1hbmFnZXIgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlci5nZXRJbnN0YW5jZShtVmlldy5tQ29udGV4dCk7CisgICAgICAgIGlmICghbUF0dGFjaEluZm8ubUhhc1dpbmRvd0ZvY3VzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBBY2Nlc3NpYmlsaXR5TWFuYWdlciBtYW5hZ2VyID0gQWNjZXNzaWJpbGl0eU1hbmFnZXIuZ2V0SW5zdGFuY2UobVZpZXcubUNvbnRleHQpOwogICAgICAgICBpZiAoIW1hbmFnZXIuaXNFbmFibGVkKCkgfHwgIW1hbmFnZXIuaXNUb3VjaEV4cGxvcmF0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1BY2Nlc3NpYmlsaXR5Rm9jdXNlZEhvc3QgPT0gbnVsbCB8fCBtQWNjZXNzaWJpbGl0eUZvY3VzZWRIb3N0Lm1BdHRhY2hJbmZvID09IG51bGwpIHsKKworICAgICAgICBmaW5hbCBWaWV3IGhvc3QgPSBtQWNjZXNzaWJpbGl0eUZvY3VzZWRIb3N0OworICAgICAgICBpZiAoaG9zdCA9PSBudWxsIHx8IGhvc3QubUF0dGFjaEluZm8gPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIERyYXdhYmxlIGRyYXdhYmxlID0gZ2V0QWNjZXNzaWJpbGl0eUZvY3VzZWREcmF3YWJsZSgpOworCisgICAgICAgIGZpbmFsIERyYXdhYmxlIGRyYXdhYmxlID0gZ2V0QWNjZXNzaWJpbGl0eUZvY3VzZWREcmF3YWJsZSgpOwogICAgICAgICBpZiAoZHJhd2FibGUgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlUHJvdmlkZXIgcHJvdmlkZXIgPQotICAgICAgICAgICAgbUFjY2Vzc2liaWxpdHlGb2N1c2VkSG9zdC5nZXRBY2Nlc3NpYmlsaXR5Tm9kZVByb3ZpZGVyKCk7Ci0gICAgICAgIFJlY3QgYm91bmRzID0gbVZpZXcubUF0dGFjaEluZm8ubVRtcEludmFsUmVjdDsKKworICAgICAgICBmaW5hbCBBY2Nlc3NpYmlsaXR5Tm9kZVByb3ZpZGVyIHByb3ZpZGVyID0gaG9zdC5nZXRBY2Nlc3NpYmlsaXR5Tm9kZVByb3ZpZGVyKCk7CisgICAgICAgIGZpbmFsIFJlY3QgYm91bmRzID0gbVZpZXcubUF0dGFjaEluZm8ubVRtcEludmFsUmVjdDsKICAgICAgICAgaWYgKHByb3ZpZGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIG1BY2Nlc3NpYmlsaXR5Rm9jdXNlZEhvc3QuZ2V0Qm91bmRzT25TY3JlZW4oYm91bmRzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtQWNjZXNzaWJpbGl0eUZvY3VzZWRWaXJ0dWFsVmlldyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaG9zdC5nZXRCb3VuZHNPblNjcmVlbihib3VuZHMpOworICAgICAgICB9IGVsc2UgaWYgKG1BY2Nlc3NpYmlsaXR5Rm9jdXNlZFZpcnR1YWxWaWV3ICE9IG51bGwpIHsKICAgICAgICAgICAgIG1BY2Nlc3NpYmlsaXR5Rm9jdXNlZFZpcnR1YWxWaWV3LmdldEJvdW5kc0luU2NyZWVuKGJvdW5kcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBib3VuZHMub2Zmc2V0KC1tQXR0YWNoSW5mby5tV2luZG93TGVmdCwgLW1BdHRhY2hJbmZvLm1XaW5kb3dUb3ApOwogICAgICAgICBib3VuZHMuaW50ZXJzZWN0KDAsIDAsIG1BdHRhY2hJbmZvLm1WaWV3Um9vdEltcGwubVdpZHRoLCBtQXR0YWNoSW5mby5tVmlld1Jvb3RJbXBsLm1IZWlnaHQpOwogICAgICAgICBkcmF3YWJsZS5zZXRCb3VuZHMoYm91bmRzKTsKQEAgLTI3MDEsNyArMjcyNyw3IEBACiAgICAgICAgIGlmIChzY3JvbGxZICE9IG1TY3JvbGxZKSB7CiAgICAgICAgICAgICBpZiAoREVCVUdfSU5QVVRfUkVTSVpFKSBMb2cudihUQUcsICJQYW4gc2Nyb2xsIGNoYW5nZWQ6IG9sZD0iCiAgICAgICAgICAgICAgICAgICAgICsgbVNjcm9sbFkgKyAiICwgbmV3PSIgKyBzY3JvbGxZKTsKLSAgICAgICAgICAgIGlmICghaW1tZWRpYXRlICYmIG1SZXNpemVCdWZmZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUgLyomJiBtUmVzaXplQnVmZmVyID09IG51bGwqLykgewogICAgICAgICAgICAgICAgIGlmIChtU2Nyb2xsZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtU2Nyb2xsZXIgPSBuZXcgU2Nyb2xsZXIobVZpZXcuZ2V0Q29udGV4dCgpKTsKICAgICAgICAgICAgICAgICB9CkBAIC0yODUwLDcgKzI4NzYsNiBAQAogICAgICAgICBtVmlldy5hc3NpZ25QYXJlbnQobnVsbCk7CiAgICAgICAgIG1WaWV3ID0gbnVsbDsKICAgICAgICAgbUF0dGFjaEluZm8ubVJvb3RWaWV3ID0gbnVsbDsKLSAgICAgICAgbUF0dGFjaEluZm8ubVN1cmZhY2UgPSBudWxsOwogCiAgICAgICAgIG1TdXJmYWNlLnJlbGVhc2UoKTsKIApAQCAtMzExMCw3ICszMTM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRnVsbFJlZHJhd05lZWRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuaW5pdGlhbGl6ZUlmTmVlZGVkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodCwgbUhvbGRlci5nZXRTdXJmYWNlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodCwgbVN1cmZhY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24gbG9ja2luZyBzdXJmYWNlIiwgZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CkBAIC0zMTU5LDggKzMxODQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbUhhc0hhZFdpbmRvd0ZvY3VzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHNldEFjY2Vzc2liaWxpdHlGb2N1cyhudWxsLCBudWxsKTsKLQogICAgICAgICAgICAgICAgICAgICBpZiAobVZpZXcgIT0gbnVsbCAmJiBtQWNjZXNzaWJpbGl0eU1hbmFnZXIuaXNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNXaW5kb3dGb2N1cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WaWV3LnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoCkBAIC0zMzA4LDcgKzMzMzEsNyBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlJ3Mgbm90aGluZyB0byBmb2N1cy4gQ2xlYXIgYW5kIHByb3BhZ2F0ZSB0aHJvdWdoIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBoaWVyYXJjaHksIGJ1dCBkb24ndCBhdHRlbXB0IHRvIHBsYWNlIG5ldyBmb2N1cy4KLSAgICAgICAgICAgICAgICAgICAgZm9jdXNlZC5jbGVhckZvY3VzSW50ZXJuYWwodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBmb2N1c2VkLmNsZWFyRm9jdXNJbnRlcm5hbChudWxsLCB0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ1MDYsOCArNDUyOSw3IEBACiAgICAgICAgIC8vIFRoZSBhY3RpdmUgcG9pbnRlciBpZCwgb3IgLTEgaWYgbm9uZS4KICAgICAgICAgcHJpdmF0ZSBpbnQgbUFjdGl2ZVBvaW50ZXJJZCA9IC0xOwogCi0gICAgICAgIC8vIFRpbWUgYW5kIGxvY2F0aW9uIHdoZXJlIHRyYWNraW5nIHN0YXJ0ZWQuCi0gICAgICAgIHByaXZhdGUgbG9uZyBtU3RhcnRUaW1lOworICAgICAgICAvLyBMb2NhdGlvbiB3aGVyZSB0cmFja2luZyBzdGFydGVkLgogICAgICAgICBwcml2YXRlIGZsb2F0IG1TdGFydFg7CiAgICAgICAgIHByaXZhdGUgZmxvYXQgbVN0YXJ0WTsKIApAQCAtNDUzNSw5ICs0NTU3LDYgQEAKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1GbGluZ2luZzsKICAgICAgICAgcHJpdmF0ZSBmbG9hdCBtRmxpbmdWZWxvY2l0eTsKIAotICAgICAgICAvLyBUaGUgbGFzdCB0aW1lIGEgY29uZmlybSBrZXkgd2FzIHByZXNzZWQgb24gdGhlIHRvdWNoIG5hdiBkZXZpY2UKLSAgICAgICAgcHJpdmF0ZSBsb25nIG1MYXN0Q29uZmlybUtleVRpbWUgPSBMb25nLk1BWF9WQUxVRTsKLQogICAgICAgICBwdWJsaWMgU3ludGhldGljVG91Y2hOYXZpZ2F0aW9uSGFuZGxlcigpIHsKICAgICAgICAgICAgIHN1cGVyKHRydWUpOwogICAgICAgICB9CkBAIC00NjA0LDcgKzQ2MjMsNiBAQAogICAgICAgICAgICAgICAgICAgICBtQWN0aXZlUG9pbnRlcklkID0gZXZlbnQuZ2V0UG9pbnRlcklkKDApOwogICAgICAgICAgICAgICAgICAgICBtVmVsb2NpdHlUcmFja2VyID0gVmVsb2NpdHlUcmFja2VyLm9idGFpbigpOwogICAgICAgICAgICAgICAgICAgICBtVmVsb2NpdHlUcmFja2VyLmFkZE1vdmVtZW50KGV2ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbVN0YXJ0VGltZSA9IHRpbWU7CiAgICAgICAgICAgICAgICAgICAgIG1TdGFydFggPSBldmVudC5nZXRYKCk7CiAgICAgICAgICAgICAgICAgICAgIG1TdGFydFkgPSBldmVudC5nZXRZKCk7CiAgICAgICAgICAgICAgICAgICAgIG1MYXN0WCA9IG1TdGFydFg7CkBAIC00ODQzLDU5ICs0ODYxLDY3IEBACiAgICAgICAgIH07CiAgICAgfQogCisgICAgcHJpdmF0ZSBLZXlFdmVudCBnZXRTeW50aGV0aWNGYWxsYmFja0tleShLZXlFdmVudCBldmVudCkgeworICAgICAgICAvLyBJbiBzb21lIGxvY2FsZXMgKGxpa2UgSmFwYW4pIGNvbnRyb2xsZXJzIHVzZSBCIGZvciBjb25maXJtIGFuZCBBIGZvciBiYWNrLCByYXRoZXIKKyAgICAgICAgLy8gdGhhbiB2aWNlIHZlcnNhLCBzbyB3ZSBuZWVkIHRvIHNwZWNpYWwgY2FzZSB0aGlzIGhlcmUgc2luY2UgdGhlIGlucHV0IHN5c3RlbSBpdHNlbGYKKyAgICAgICAgLy8gaXMgbm90IGxvY2FsZS1hd2FyZS4KKyAgICAgICAgaW50IGtleUNvZGU7CisgICAgICAgIHN3aXRjaChldmVudC5nZXRLZXlDb2RlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fQToKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fQzoKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fWDoKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fWjoKKyAgICAgICAgICAgICAgICBrZXlDb2RlID0gbUZsaXBDb250cm9sbGVyRmFsbGJhY2tLZXlzID8KKyAgICAgICAgICAgICAgICAgICAgS2V5RXZlbnQuS0VZQ09ERV9CQUNLIDogS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0NFTlRFUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fQjoKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fWToKKyAgICAgICAgICAgICAgICBrZXlDb2RlID0gbUZsaXBDb250cm9sbGVyRmFsbGJhY2tLZXlzID8KKyAgICAgICAgICAgICAgICAgICAgS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0NFTlRFUiA6IEtleUV2ZW50LktFWUNPREVfQkFDSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fVEhVTUJMOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9USFVNQlI6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX1NUQVJUOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8yOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8zOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl80OgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl81OgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl82OgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl83OgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl84OgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl85OgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xMDoKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fMTE6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzEyOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xMzoKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fMTQ6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzE1OgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xNjoKKyAgICAgICAgICAgICAgICBrZXlDb2RlID0gS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0NFTlRFUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fU0VMRUNUOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9NT0RFOgorICAgICAgICAgICAgICAgIGtleUNvZGUgPSBLZXlFdmVudC5LRVlDT0RFX01FTlU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBLZXlFdmVudC5vYnRhaW4oZXZlbnQuZ2V0RG93blRpbWUoKSwgZXZlbnQuZ2V0RXZlbnRUaW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRBY3Rpb24oKSwga2V5Q29kZSwgZXZlbnQuZ2V0UmVwZWF0Q291bnQoKSwgZXZlbnQuZ2V0TWV0YVN0YXRlKCksCisgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXREZXZpY2VJZCgpLCBldmVudC5nZXRTY2FuQ29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0RmxhZ3MoKSB8IEtleUV2ZW50LkZMQUdfRkFMTEJBQ0ssIGV2ZW50LmdldFNvdXJjZSgpLCBudWxsKTsKKyAgICB9CisKKwogICAgIGZpbmFsIGNsYXNzIFN5bnRoZXRpY0tleUhhbmRsZXIgewogCiAgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3MoS2V5RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgIC8vIEluIHNvbWUgbG9jYWxlcyAobGlrZSBKYXBhbikgY29udHJvbGxlcnMgdXNlIEIgZm9yIGNvbmZpcm0gYW5kIEEgZm9yIGJhY2ssIHJhdGhlcgotICAgICAgICAgICAgLy8gdGhhbiB2aWNlIHZlcnNhLCBzbyB3ZSBuZWVkIHRvIHNwZWNpYWwgY2FzZSB0aGlzIGhlcmUgc2luY2UgdGhlIGlucHV0IHN5c3RlbSBpdHNlbGYKLSAgICAgICAgICAgIC8vIGlzIG5vdCBsb2NhbGUtYXdhcmUuCi0gICAgICAgICAgICBpbnQga2V5Q29kZTsKLSAgICAgICAgICAgIHN3aXRjaChldmVudC5nZXRLZXlDb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX0E6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9DOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fWDoKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX1o6Ci0gICAgICAgICAgICAgICAgICAgIGtleUNvZGUgPSBtRmxpcENvbnRyb2xsZXJGYWxsYmFja0tleXMgPwotICAgICAgICAgICAgICAgICAgICAgICAgS2V5RXZlbnQuS0VZQ09ERV9CQUNLIDogS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0NFTlRFUjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9COgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fWToKLSAgICAgICAgICAgICAgICAgICAga2V5Q29kZSA9IG1GbGlwQ29udHJvbGxlckZhbGxiYWNrS2V5cyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBLZXlFdmVudC5LRVlDT0RFX0RQQURfQ0VOVEVSIDogS2V5RXZlbnQuS0VZQ09ERV9CQUNLOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX1RIVU1CTDoKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX1RIVU1CUjoKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX1NUQVJUOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fMToKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzI6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8zOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fNDoKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzU6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl82OgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fNzoKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzg6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl85OgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fMTA6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xMToKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzEyOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fMTM6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xNDoKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzE1OgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fMTY6Ci0gICAgICAgICAgICAgICAgICAgIGtleUNvZGUgPSBLZXlFdmVudC5LRVlDT0RFX0RQQURfQ0VOVEVSOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX1NFTEVDVDoKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX01PREU6Ci0gICAgICAgICAgICAgICAgICAgIGtleUNvZGUgPSBLZXlFdmVudC5LRVlDT0RFX01FTlU7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgS2V5RXZlbnQgc3ludGhldGljS2V5ID0gZ2V0U3ludGhldGljRmFsbGJhY2tLZXkoZXZlbnQpOworICAgICAgICAgICAgaWYgKHN5bnRoZXRpY0tleSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZW5xdWV1ZUlucHV0RXZlbnQoc3ludGhldGljS2V5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZW5xdWV1ZUlucHV0RXZlbnQobmV3IEtleUV2ZW50KGV2ZW50LmdldERvd25UaW1lKCksIGV2ZW50LmdldEV2ZW50VGltZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0QWN0aW9uKCksIGtleUNvZGUsIGV2ZW50LmdldFJlcGVhdENvdW50KCksIGV2ZW50LmdldE1ldGFTdGF0ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0RGV2aWNlSWQoKSwgZXZlbnQuZ2V0U2NhbkNvZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldEZsYWdzKCkgfCBLZXlFdmVudC5GTEFHX0ZBTExCQUNLLCBldmVudC5nZXRTb3VyY2UoKSkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAogICAgIH0KQEAgLTUzODgsNyArNTQxNCw3IEBACiAKICAgICAgICAgICAgICAgICAvLyBIYXJkd2FyZSByZW5kZXJpbmcKICAgICAgICAgICAgICAgICBpZiAobUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIubG9hZFN5c3RlbVByb3BlcnRpZXMobUhvbGRlci5nZXRTdXJmYWNlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5sb2FkU3lzdGVtUHJvcGVydGllcygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC01ODM1LDIzICs1ODYxLDMyIEBACiAKICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaFVuaGFuZGxlZEtleShLZXlFdmVudCBldmVudCkgewogICAgICAgICBpZiAoKGV2ZW50LmdldEZsYWdzKCkgJiBLZXlFdmVudC5GTEFHX0ZBTExCQUNLKSA9PSAwKSB7Ci0gICAgICAgICAgICBmaW5hbCBLZXlDaGFyYWN0ZXJNYXAga2NtID0gZXZlbnQuZ2V0S2V5Q2hhcmFjdGVyTWFwKCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQga2V5Q29kZSA9IGV2ZW50LmdldEtleUNvZGUoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBtZXRhU3RhdGUgPSBldmVudC5nZXRNZXRhU3RhdGUoKTsKKyAgICAgICAgICAgIC8vIFNvbWUgZmFsbGJhY2sga2V5cyBhcmUgZGVjaWRlZCBieSB0aGUgVmlld1Jvb3QgYXMgdGhleSBtaWdodCBoYXZlIHNwZWNpYWwKKyAgICAgICAgICAgIC8vIHByb3BlcnRpZXMgKGUuZy4gYXJlIGxvY2FsZSBhd2FyZSkuIFRoZXNlIHRha2UgcHJlY2VkZW5jZSBvdmVyIGZhbGxiYWNrcyBkZWZpbmVkIGJ5CisgICAgICAgICAgICAvLyB0aGUga2NtLgorICAgICAgICAgICAgS2V5RXZlbnQgZmFsbGJhY2tFdmVudCA9IGdldFN5bnRoZXRpY0ZhbGxiYWNrS2V5KGV2ZW50KTsKIAotICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGZhbGxiYWNrIGFjdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSBrZXkgY2hhcmFjdGVyIG1hcC4KLSAgICAgICAgICAgIEtleUNoYXJhY3Rlck1hcC5GYWxsYmFja0FjdGlvbiBmYWxsYmFja0FjdGlvbiA9Ci0gICAgICAgICAgICAgICAgICAgIGtjbS5nZXRGYWxsYmFja0FjdGlvbihrZXlDb2RlLCBtZXRhU3RhdGUpOwotICAgICAgICAgICAgaWYgKGZhbGxiYWNrQWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBldmVudC5nZXRGbGFncygpIHwgS2V5RXZlbnQuRkxBR19GQUxMQkFDSzsKLSAgICAgICAgICAgICAgICBLZXlFdmVudCBmYWxsYmFja0V2ZW50ID0gS2V5RXZlbnQub2J0YWluKAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0RG93blRpbWUoKSwgZXZlbnQuZ2V0RXZlbnRUaW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRBY3Rpb24oKSwgZmFsbGJhY2tBY3Rpb24ua2V5Q29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldFJlcGVhdENvdW50KCksIGZhbGxiYWNrQWN0aW9uLm1ldGFTdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldERldmljZUlkKCksIGV2ZW50LmdldFNjYW5Db2RlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgZXZlbnQuZ2V0U291cmNlKCksIG51bGwpOwotICAgICAgICAgICAgICAgIGZhbGxiYWNrQWN0aW9uLnJlY3ljbGUoKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja0V2ZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBLZXlDaGFyYWN0ZXJNYXAga2NtID0gZXZlbnQuZ2V0S2V5Q2hhcmFjdGVyTWFwKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGtleUNvZGUgPSBldmVudC5nZXRLZXlDb2RlKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IG1ldGFTdGF0ZSA9IGV2ZW50LmdldE1ldGFTdGF0ZSgpOwogCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGZhbGxiYWNrIGFjdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSBrZXkgY2hhcmFjdGVyIG1hcC4KKyAgICAgICAgICAgICAgICBLZXlDaGFyYWN0ZXJNYXAuRmFsbGJhY2tBY3Rpb24gZmFsbGJhY2tBY3Rpb24gPQorICAgICAgICAgICAgICAgICAgICAgICAga2NtLmdldEZhbGxiYWNrQWN0aW9uKGtleUNvZGUsIG1ldGFTdGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrQWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGZsYWdzID0gZXZlbnQuZ2V0RmxhZ3MoKSB8IEtleUV2ZW50LkZMQUdfRkFMTEJBQ0s7CisgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrRXZlbnQgPSBLZXlFdmVudC5vYnRhaW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0RG93blRpbWUoKSwgZXZlbnQuZ2V0RXZlbnRUaW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0QWN0aW9uKCksIGZhbGxiYWNrQWN0aW9uLmtleUNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0UmVwZWF0Q291bnQoKSwgZmFsbGJhY2tBY3Rpb24ubWV0YVN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldERldmljZUlkKCksIGV2ZW50LmdldFNjYW5Db2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIGV2ZW50LmdldFNvdXJjZSgpLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tBY3Rpb24ucmVjeWNsZSgpOworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZhbGxiYWNrRXZlbnQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRpc3BhdGNoSW5wdXRFdmVudChmYWxsYmFja0V2ZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNjMzNSw2OCArNjM3MCw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIGZpbmFsIFN1cmZhY2VIb2xkZXIgbUhvbGRlciA9IG5ldyBTdXJmYWNlSG9sZGVyKCkgewotICAgICAgICAvLyB3ZSBvbmx5IG5lZWQgYSBTdXJmYWNlSG9sZGVyIGZvciBvcGVuZ2wuIGl0IHdvdWxkIGJlIG5pY2UKLSAgICAgICAgLy8gdG8gaW1wbGVtZW50IGV2ZXJ5dGhpbmcgZWxzZSB0aG91Z2gsIGVzcGVjaWFsbHkgdGhlIGNhbGxiYWNrCi0gICAgICAgIC8vIHN1cHBvcnQgKG9wZW5nbCBkb2Vzbid0IG1ha2UgdXNlIG9mIGl0IHJpZ2h0IG5vdywgYnV0IGV2ZW50dWFsbHkKLSAgICAgICAgLy8gd2lsbCkuCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3VyZmFjZSBnZXRTdXJmYWNlKCkgewotICAgICAgICAgICAgcmV0dXJuIG1TdXJmYWNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzQ3JlYXRpbmcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgYWRkQ2FsbGJhY2soQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCByZW1vdmVDYWxsYmFjayhDYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEZpeGVkU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRTaXplRnJvbUxheW91dCgpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRGb3JtYXQoaW50IGZvcm1hdCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFR5cGUoaW50IHR5cGUpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRLZWVwU2NyZWVuT24oYm9vbGVhbiBzY3JlZW5PbikgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBDYW52YXMgbG9ja0NhbnZhcygpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBDYW52YXMgbG9ja0NhbnZhcyhSZWN0IGRpcnR5KSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB1bmxvY2tDYW52YXNBbmRQb3N0KENhbnZhcyBjYW52YXMpIHsKLSAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFJlY3QgZ2V0U3VyZmFjZUZyYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9OwotCiAgICAgc3RhdGljIFJ1blF1ZXVlIGdldFJ1blF1ZXVlKCkgewogICAgICAgICBSdW5RdWV1ZSBycSA9IHNSdW5RdWV1ZXMuZ2V0KCk7CiAgICAgICAgIGlmIChycSAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdTdHViLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdTdHViLmphdmEKaW5kZXggYTVkYzNhZS4uZDY4YTg2MCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3U3R1Yi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld1N0dWIuamF2YQpAQCAtOTcsMTYgKzk3LDIxIEBACiAgICAgfQogCiAgICAgQFN1cHByZXNzV2FybmluZ3MoeyJVbnVzZWREZWNsYXJhdGlvbiJ9KQotICAgIHB1YmxpYyBWaWV3U3R1YihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlld1N0dWIsCi0gICAgICAgICAgICAgICAgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBWaWV3U3R1YihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBWaWV3U3R1YihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlld1N0dWIsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIG1JbmZsYXRlZElkID0gYS5nZXRSZXNvdXJjZUlkKFIuc3R5bGVhYmxlLlZpZXdTdHViX2luZmxhdGVkSWQsIE5PX0lEKTsKICAgICAgICAgbUxheW91dFJlc291cmNlID0gYS5nZXRSZXNvdXJjZUlkKFIuc3R5bGVhYmxlLlZpZXdTdHViX2xheW91dCwgMCk7CiAKICAgICAgICAgYS5yZWN5Y2xlKCk7CiAKLSAgICAgICAgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlldywgZGVmU3R5bGUsIDApOworICAgICAgICBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5WaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgbUlEID0gYS5nZXRSZXNvdXJjZUlkKFIuc3R5bGVhYmxlLlZpZXdfaWQsIE5PX0lEKTsKICAgICAgICAgYS5yZWN5Y2xlKCk7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVm9sdW1lUGFuZWwuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVm9sdW1lUGFuZWwuamF2YQppbmRleCBmMGU2Njc3Li41MmY5YzBiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZvbHVtZVBhbmVsLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Wb2x1bWVQYW5lbC5qYXZhCkBAIC0zMTEsNyArMzExLDYgQEAKICAgICAgICAgbHAudHlwZSA9IExheW91dFBhcmFtcy5UWVBFX1ZPTFVNRV9PVkVSTEFZOwogICAgICAgICBscC53aWR0aCA9IExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQ7CiAgICAgICAgIGxwLmhlaWdodCA9IExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQ7Ci0gICAgICAgIGxwLnByaXZhdGVGbGFncyB8PSBMYXlvdXRQYXJhbXMuUFJJVkFURV9GTEFHX0ZPUkNFX1NIT1dfTkFWX0JBUjsKICAgICAgICAgd2luZG93LnNldEF0dHJpYnV0ZXMobHApOwogICAgICAgICB3aW5kb3cuYWRkRmxhZ3MoTGF5b3V0UGFyYW1zLkZMQUdfTk9UX0ZPQ1VTQUJMRSB8IExheW91dFBhcmFtcy5GTEFHX05PVF9UT1VDSF9NT0RBTAogICAgICAgICAgICAgICAgIHwgTGF5b3V0UGFyYW1zLkZMQUdfV0FUQ0hfT1VUU0lERV9UT1VDSCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvdy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3cuamF2YQppbmRleCBiM2EwNjk5Li4yZjYyNDMxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvdy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93LmphdmEKQEAgLTE2LDYgKzE2LDggQEAKIAogcGFja2FnZSBhbmRyb2lkLnZpZXc7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKQEAgLTI1LDYgKzI3LDggQEAKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOworaW1wb3J0IGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZTsKK2ltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwogCiAvKioKQEAgLTg5LDEyICs5MywyMSBAQAogICAgICAqIElmIG92ZXJsYXkgaXMgZW5hYmxlZCwgdGhlIGFjdGlvbiBtb2RlIFVJIHdpbGwgYmUgYWxsb3dlZCB0byBjb3ZlciBleGlzdGluZyB3aW5kb3cgY29udGVudC4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0FDVElPTl9NT0RFX09WRVJMQVkgPSAxMDsKKyAgICAvKioKKyAgICAgKiBGbGFnIGZvciByZXF1ZXN0aW5nIHRoYXQgd2luZG93IGNvbnRlbnQgY2hhbmdlcyBzaG91bGQgYmUgcmVwcmVzZW50ZWQKKyAgICAgKiB3aXRoIHNjZW5lcyBhbmQgdHJhbnNpdGlvbnMuCisgICAgICoKKyAgICAgKiBUT0RPIEFkZCBkb2NzCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRDb250ZW50VmlldworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OUyA9IDExOwogCiAgICAgLyoqCiAgICAgICogTWF4IHZhbHVlIHVzZWQgYXMgYSBmZWF0dXJlIElECiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX01BWCA9IEZFQVRVUkVfQUNUSU9OX01PREVfT1ZFUkxBWTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX01BWCA9IEZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OUzsKIAogICAgIC8qKiBGbGFnIGZvciBzZXR0aW5nIHRoZSBwcm9ncmVzcyBiYXIncyB2aXNpYmlsaXR5IHRvIFZJU0lCTEUgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9HUkVTU19WSVNJQklMSVRZX09OID0gLTE7CkBAIC0yNDAsNiArMjUzLDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHNlZSAjb25QcmVwYXJlUGFuZWwKICAgICAgICAgICovCisgICAgICAgIEBOdWxsYWJsZQogICAgICAgICBwdWJsaWMgVmlldyBvbkNyZWF0ZVBhbmVsVmlldyhpbnQgZmVhdHVyZUlkKTsKIAogICAgICAgICAvKioKQEAgLTM2OCw2ICszODIsNyBAQAogICAgICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gY29udHJvbCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgYWN0aW9uIG1vZGUKICAgICAgICAgICogQHJldHVybiBUaGUgQWN0aW9uTW9kZSB0aGF0IHdhcyBzdGFydGVkLCBvciBudWxsIGlmIHRoZSBzeXN0ZW0gc2hvdWxkIHByZXNlbnQgaXQKICAgICAgICAgICovCisgICAgICAgIEBOdWxsYWJsZQogICAgICAgICBwdWJsaWMgQWN0aW9uTW9kZSBvbldpbmRvd1N0YXJ0aW5nQWN0aW9uTW9kZShBY3Rpb25Nb2RlLkNhbGxiYWNrIGNhbGxiYWNrKTsKIAogICAgICAgICAvKioKQEAgLTk2OSw2ICs5ODQsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBWaWV3IFRoZSBjdXJyZW50IFZpZXcgd2l0aCBmb2N1cyBvciBudWxsLgogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIHB1YmxpYyBhYnN0cmFjdCBWaWV3IGdldEN1cnJlbnRGb2N1cygpOwogCiAgICAgLyoqCkBAIC05NzcsMTAgKzk5MywxMiBAQAogICAgICAqCiAgICAgICogQHJldHVybiBMYXlvdXRJbmZsYXRlciBUaGUgc2hhcmVkIExheW91dEluZmxhdGVyLgogICAgICAqLworICAgIEBOb25OdWxsCiAgICAgcHVibGljIGFic3RyYWN0IExheW91dEluZmxhdGVyIGdldExheW91dEluZmxhdGVyKCk7CiAKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRUaXRsZShDaGFyU2VxdWVuY2UgdGl0bGUpOwogCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRUaXRsZUNvbG9yKGludCB0ZXh0Q29sb3IpOwogCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgb3BlblBhbmVsKGludCBmZWF0dXJlSWQsIEtleUV2ZW50IGV2ZW50KTsKQEAgLTEzMTcsNCArMTMzNSw0NyBAQAogICAgICAqIEBwYXJhbSBldmVudCBBIGtleSBvciB0b3VjaCBldmVudCB0byBpbmplY3QgdG8gdGhpcyB3aW5kb3cuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaW5qZWN0SW5wdXRFdmVudChJbnB1dEV2ZW50IGV2ZW50KSB7IH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSB7QGxpbmsgVHJhbnNpdGlvbk1hbmFnZXJ9IHJlc3BvbnNpYmxlIGZvciAgZm9yIGRlZmF1bHQgdHJhbnNpdGlvbnMKKyAgICAgKiBpbiB0aGlzIHdpbmRvdy4gUmVxdWlyZXMge0BsaW5rICNGRUFUVVJFX0NPTlRFTlRfVFJBTlNJVElPTlN9LgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbm9uLW51bGwgYWZ0ZXIgY29udGVudCBoYXMgYmVlbiBpbml0aWFsaXplZCAoZS5nLiBieSB1c2luZworICAgICAqIHtAbGluayAjc2V0Q29udGVudFZpZXd9KSBpZiB7QGxpbmsgI0ZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OU30gaGFzIGJlZW4gZ3JhbnRlZC48L3A+CisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoaXMgd2luZG93J3MgY29udGVudCBUcmFuc2l0aW9uTWFuYWdlciBvciBudWxsIGlmIG5vbmUgaXMgc2V0LgorICAgICAqLworICAgIHB1YmxpYyBUcmFuc2l0aW9uTWFuYWdlciBnZXRUcmFuc2l0aW9uTWFuYWdlcigpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSB7QGxpbmsgVHJhbnNpdGlvbk1hbmFnZXJ9IHRvIHVzZSBmb3IgZGVmYXVsdCB0cmFuc2l0aW9ucyBpbiB0aGlzIHdpbmRvdy4KKyAgICAgKiBSZXF1aXJlcyB7QGxpbmsgI0ZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OU30uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdG0gVGhlIFRyYW5zaXRpb25NYW5hZ2VyIHRvIHVzZSBmb3Igc2NlbmUgY2hhbmdlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2l0aW9uTWFuYWdlcihUcmFuc2l0aW9uTWFuYWdlciB0bSkgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZSB0aGUge0BsaW5rIFNjZW5lfSByZXByZXNlbnRpbmcgdGhpcyB3aW5kb3cncyBjdXJyZW50IGNvbnRlbnQuCisgICAgICogUmVxdWlyZXMge0BsaW5rICNGRUFUVVJFX0NPTlRFTlRfVFJBTlNJVElPTlN9LgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgY3VycmVudCBjb250ZW50IGlzIG5vdCByZXByZXNlbnRlZCBieSBhIFNjZW5lLjwvcD4KKyAgICAgKgorICAgICAqIEByZXR1cm4gQ3VycmVudCBTY2VuZSBiZWluZyBzaG93biBvciBudWxsCisgICAgICovCisgICAgcHVibGljIFNjZW5lIGdldENvbnRlbnRTY2VuZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IG9wdGlvbnMgdGhhdCBjYW4gYWZmZWN0IHRoZSB0cmFuc2l0aW9uIGJlaGF2aW9yIHdpdGhpbiB0aGlzIHdpbmRvdy4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIHNldCBvciBudWxsIGZvciBub25lCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VHJhbnNpdGlvbk9wdGlvbnMoQnVuZGxlIG9wdGlvbnMpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXIuamF2YQppbmRleCAwY2U0ZGE1Li41M2E0YzBkMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyLmphdmEKQEAgLTEwNjMsMTMgKzEwNjMsNiBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUklWQVRFX0ZMQUdfU0hPV19GT1JfQUxMX1VTRVJTID0gMHgwMDAwMDAxMDsKIAogICAgICAgICAvKioKLSAgICAgICAgICogU3BlY2lhbCBmbGFnIGZvciB0aGUgdm9sdW1lIG92ZXJsYXk6IGZvcmNlIHRoZSB3aW5kb3cgbWFuYWdlciBvdXQgb2YgImhpZGUgbmF2IGJhciIKLSAgICAgICAgICogbW9kZSB3aGlsZSB0aGUgd2luZG93IGlzIG9uIHNjcmVlbi4KLSAgICAgICAgICoKLSAgICAgICAgICoge0BoaWRlfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUklWQVRFX0ZMQUdfRk9SQ0VfU0hPV19OQVZfQkFSID0gMHgwMDAwMDAyMDsKLQotICAgICAgICAvKioKICAgICAgICAgICogTmV2ZXIgYW5pbWF0ZSBwb3NpdGlvbiBjaGFuZ2VzIG9mIHRoZSB3aW5kb3cuCiAgICAgICAgICAqCiAgICAgICAgICAqIHtAaGlkZX0gKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlclBvbGljeS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyUG9saWN5LmphdmEKaW5kZXggYzVhMWI4NmMuLmQ5ZTE0MGUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlclBvbGljeS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlclBvbGljeS5qYXZhCkBAIC0xNiw3ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC52aWV3OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29tcGF0aWJpbGl0eUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKQEAgLTI3LDYgKzI5LDggQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvbjsKIAogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKIAogLyoqCiAgKiBUaGlzIGludGVyZmFjZSBzdXBwbGllcyBhbGwgVUktc3BlY2lmaWMgYmVoYXZpb3Igb2YgdGhlIHdpbmRvdyBtYW5hZ2VyLiAgQW4KQEAgLTQ2NCw2ICs0NjgsMTEgQEAKICAgICAvKiogU2NyZWVuIHR1cm5lZCBvZmYgYmVjYXVzZSBvZiBwcm94aW1pdHkgc2Vuc29yICovCiAgICAgcHVibGljIGZpbmFsIGludCBPRkZfQkVDQVVTRV9PRl9QUk9YX1NFTlNPUiA9IDQ7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHtVU0VSX1JPVEFUSU9OX0ZSRUUsIFVTRVJfUk9UQVRJT05fTE9DS0VEfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgVXNlclJvdGF0aW9uTW9kZSB7fQorCiAgICAgLyoqIFdoZW4gbm90IG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGhlIGFjdGl2aXR5J3Mgc2NyZWVuT3JpZW50YXRpb24sIHJvdGF0aW9uIHNob3VsZCBiZQogICAgICAqIGRldGVybWluZWQgYnkgdGhlIHN5c3RlbSAodGhhdCBpcywgdXNpbmcgc2Vuc29ycykuICovCiAgICAgcHVibGljIGZpbmFsIGludCBVU0VSX1JPVEFUSU9OX0ZSRUUgPSAwOwpAQCAtMTAyMiw3ICsxMDMxLDggQEAKICAgICAgKiBAcGFyYW0gbGFzdFJvdGF0aW9uIFRoZSBtb3N0IHJlY2VudGx5IHVzZWQgcm90YXRpb24uCiAgICAgICogQHJldHVybiBUaGUgc3VyZmFjZSByb3RhdGlvbiB0byB1c2UuCiAgICAgICovCi0gICAgcHVibGljIGludCByb3RhdGlvbkZvck9yaWVudGF0aW9uTHcoaW50IG9yaWVudGF0aW9uLCBpbnQgbGFzdFJvdGF0aW9uKTsKKyAgICBwdWJsaWMgaW50IHJvdGF0aW9uRm9yT3JpZW50YXRpb25MdyhAQWN0aXZpdHlJbmZvLlNjcmVlbk9yaWVudGF0aW9uIGludCBvcmllbnRhdGlvbiwKKyAgICAgICAgICAgIGludCBsYXN0Um90YXRpb24pOwogCiAgICAgLyoqCiAgICAgICogR2l2ZW4gYW4gb3JpZW50YXRpb24gY29uc3RhbnQgYW5kIGEgcm90YXRpb24sIHJldHVybnMgdHJ1ZSBpZiB0aGUgcm90YXRpb24KQEAgLTEwMzcsNyArMTA0Nyw4IEBACiAgICAgICogQHBhcmFtIHJvdGF0aW9uIFRoZSByb3RhdGlvbiB0byBjaGVjay4KICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHJvdGF0aW9uIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcmVxdWVzdGVkIG9yaWVudGF0aW9uLgogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHJvdGF0aW9uSGFzQ29tcGF0aWJsZU1ldHJpY3NMdyhpbnQgb3JpZW50YXRpb24sIGludCByb3RhdGlvbik7CisgICAgcHVibGljIGJvb2xlYW4gcm90YXRpb25IYXNDb21wYXRpYmxlTWV0cmljc0x3KEBBY3Rpdml0eUluZm8uU2NyZWVuT3JpZW50YXRpb24gaW50IG9yaWVudGF0aW9uLAorICAgICAgICAgICAgaW50IHJvdGF0aW9uKTsKIAogICAgIC8qKgogICAgICAqIENhbGxlZCBieSB0aGUgd2luZG93IG1hbmFnZXIgd2hlbiB0aGUgcm90YXRpb24gY2hhbmdlcy4KQEAgLTEwODYsNyArMTA5Nyw3IEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5hYmxlU2NyZWVuQWZ0ZXJCb290KCk7CiAgICAgCi0gICAgcHVibGljIHZvaWQgc2V0Q3VycmVudE9yaWVudGF0aW9uTHcoaW50IG5ld09yaWVudGF0aW9uKTsKKyAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50T3JpZW50YXRpb25MdyhAQWN0aXZpdHlJbmZvLlNjcmVlbk9yaWVudGF0aW9uIGludCBuZXdPcmllbnRhdGlvbik7CiAgICAgCiAgICAgLyoqCiAgICAgICogQ2FsbCBmcm9tIGFwcGxpY2F0aW9uIHRvIHBlcmZvcm0gaGFwdGljIGZlZWRiYWNrIG9uIGl0cyB3aW5kb3cuCkBAIC0xMTEzLDYgKzExMjQsNyBAQAogICAgICAqIEBzZWUgV2luZG93TWFuYWdlclBvbGljeSNVU0VSX1JPVEFUSU9OX0xPQ0tFRAogICAgICAqIEBzZWUgV2luZG93TWFuYWdlclBvbGljeSNVU0VSX1JPVEFUSU9OX0ZSRUUgCiAgICAgICovCisgICAgQFVzZXJSb3RhdGlvbk1vZGUKICAgICBwdWJsaWMgaW50IGdldFVzZXJSb3RhdGlvbk1vZGUoKTsKIAogICAgIC8qKgpAQCAtMTEyMywxMiArMTEzNSwxMiBAQAogICAgICAqIEBwYXJhbSByb3RhdGlvbiBPbmUgb2Yge0BsaW5rIFN1cmZhY2UjUk9UQVRJT05fMH0sIHtAbGluayBTdXJmYWNlI1JPVEFUSU9OXzkwfSwKICAgICAgKiAgICAgICAgICAgICAgICAge0BsaW5rIFN1cmZhY2UjUk9UQVRJT05fMTgwfSwge0BsaW5rIFN1cmZhY2UjUk9UQVRJT05fMjcwfS4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VyUm90YXRpb25Nb2RlKGludCBtb2RlLCBpbnQgcm90YXRpb24pOworICAgIHB1YmxpYyB2b2lkIHNldFVzZXJSb3RhdGlvbk1vZGUoQFVzZXJSb3RhdGlvbk1vZGUgaW50IG1vZGUsIEBTdXJmYWNlLlJvdGF0aW9uIGludCByb3RhdGlvbik7CiAKICAgICAvKioKICAgICAgKiBDYWxsZWQgd2hlbiBhIG5ldyBzeXN0ZW0gVUkgdmlzaWJpbGl0eSBpcyBiZWluZyByZXBvcnRlZCwgYWxsb3dpbmcKICAgICAgKiB0aGUgcG9saWN5IHRvIGFkanVzdCB3aGF0IGlzIGFjdHVhbGx5IHJlcG9ydGVkLgotICAgICAqIEBwYXJhbSB2aXNpYmlsaXR5IFRoZSByYXcgdmlzaWJsaXR5IHJlcG9ydGVkIGJ5IHRoZSBzdGF0dXMgYmFyLgorICAgICAqIEBwYXJhbSB2aXNpYmlsaXR5IFRoZSByYXcgdmlzaWJpbGl0eSByZXBvcnRlZCBieSB0aGUgc3RhdHVzIGJhci4KICAgICAgKiBAcmV0dXJuIFRoZSBuZXcgZGVzaXJlZCB2aXNpYmlsaXR5LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgYWRqdXN0U3lzdGVtVWlWaXNpYmlsaXR5THcoaW50IHZpc2liaWxpdHkpOwpAQCAtMTE1MSw2ICsxMTYzLDExIEBACiAgICAgcHVibGljIHZvaWQgc2V0TGFzdElucHV0TWV0aG9kV2luZG93THcoV2luZG93U3RhdGUgaW1lLCBXaW5kb3dTdGF0ZSB0YXJnZXQpOwogCiAgICAgLyoqCisgICAgICogQHJldHVybiBUaGUgY3VycmVudCBoZWlnaHQgb2YgdGhlIGlucHV0IG1ldGhvZCB3aW5kb3cuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRJbnB1dE1ldGhvZFdpbmRvd1Zpc2libGVIZWlnaHRMdygpOworCisgICAgLyoqCiAgICAgICogQ2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgdXNlciBjaGFuZ2VzLiBHdWFyYW50ZWVkIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGJyb2FkY2FzdAogICAgICAqIG9mIHRoZSBuZXcgdXNlciBpZCBpcyBtYWRlIHRvIGFsbCBsaXN0ZW5lcnMuCiAgICAgICoKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5RXZlbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5RXZlbnQuamF2YQppbmRleCBmNjM1ZWVlLi44YjkxMTU1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUV2ZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudC5qYXZhCkBAIC03MjIsNyArNzIyLDcgQEAKICAgICBpbnQgbUFjdGlvbjsKICAgICBpbnQgbUNvbnRlbnRDaGFuZ2VUeXBlczsKIAotICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PEFjY2Vzc2liaWxpdHlSZWNvcmQ+IG1SZWNvcmRzID0gbmV3IEFycmF5TGlzdDxBY2Nlc3NpYmlsaXR5UmVjb3JkPigpOworICAgIHByaXZhdGUgQXJyYXlMaXN0PEFjY2Vzc2liaWxpdHlSZWNvcmQ+IG1SZWNvcmRzOwogCiAgICAgLyoKICAgICAgKiBIaWRlIGNvbnN0cnVjdG9yIGZyb20gY2xpZW50cy4KQEAgLTc1NSwxMSArNzU1LDEzIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0U2VhbGVkKGJvb2xlYW4gc2VhbGVkKSB7CiAgICAgICAgIHN1cGVyLnNldFNlYWxlZChzZWFsZWQpOwotICAgICAgICBMaXN0PEFjY2Vzc2liaWxpdHlSZWNvcmQ+IHJlY29yZHMgPSBtUmVjb3JkczsKLSAgICAgICAgZmluYWwgaW50IHJlY29yZENvdW50ID0gcmVjb3Jkcy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjb3JkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVJlY29yZCByZWNvcmQgPSByZWNvcmRzLmdldChpKTsKLSAgICAgICAgICAgIHJlY29yZC5zZXRTZWFsZWQoc2VhbGVkKTsKKyAgICAgICAgZmluYWwgTGlzdDxBY2Nlc3NpYmlsaXR5UmVjb3JkPiByZWNvcmRzID0gbVJlY29yZHM7CisgICAgICAgIGlmIChyZWNvcmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIGludCByZWNvcmRDb3VudCA9IHJlY29yZHMuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNvcmRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVJlY29yZCByZWNvcmQgPSByZWNvcmRzLmdldChpKTsKKyAgICAgICAgICAgICAgICByZWNvcmQuc2V0U2VhbGVkKHNlYWxlZCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc2OSw3ICs3NzEsNyBAQAogICAgICAqIEByZXR1cm4gVGhlIG51bWJlciBvZiByZWNvcmRzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0UmVjb3JkQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtUmVjb3Jkcy5zaXplKCk7CisgICAgICAgIHJldHVybiBtUmVjb3JkcyA9PSBudWxsID8gMCA6IG1SZWNvcmRzLnNpemUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTc4MSw2ICs3ODMsOSBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFwcGVuZFJlY29yZChBY2Nlc3NpYmlsaXR5UmVjb3JkIHJlY29yZCkgewogICAgICAgICBlbmZvcmNlTm90U2VhbGVkKCk7CisgICAgICAgIGlmIChtUmVjb3JkcyA9PSBudWxsKSB7CisgICAgICAgICAgICBtUmVjb3JkcyA9IG5ldyBBcnJheUxpc3Q8QWNjZXNzaWJpbGl0eVJlY29yZD4oKTsKKyAgICAgICAgfQogICAgICAgICBtUmVjb3Jkcy5hZGQocmVjb3JkKTsKICAgICB9CiAKQEAgLTc5MSw2ICs3OTYsOSBAQAogICAgICAqIEByZXR1cm4gVGhlIHJlY29yZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LgogICAgICAqLwogICAgIHB1YmxpYyBBY2Nlc3NpYmlsaXR5UmVjb3JkIGdldFJlY29yZChpbnQgaW5kZXgpIHsKKyAgICAgICAgaWYgKG1SZWNvcmRzID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbnZhbGlkIGluZGV4ICIgKyBpbmRleCArICIsIHNpemUgaXMgMCIpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtUmVjb3Jkcy5nZXQoaW5kZXgpOwogICAgIH0KIApAQCAtOTY0LDExICs5NzIsMTQgQEAKICAgICAgICAgQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50Q2xvbmUgPSBBY2Nlc3NpYmlsaXR5RXZlbnQub2J0YWluKCk7CiAgICAgICAgIGV2ZW50Q2xvbmUuaW5pdChldmVudCk7CiAKLSAgICAgICAgZmluYWwgaW50IHJlY29yZENvdW50ID0gZXZlbnQubVJlY29yZHMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY29yZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlSZWNvcmQgcmVjb3JkID0gZXZlbnQubVJlY29yZHMuZ2V0KGkpOwotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVJlY29yZCByZWNvcmRDbG9uZSA9IEFjY2Vzc2liaWxpdHlSZWNvcmQub2J0YWluKHJlY29yZCk7Ci0gICAgICAgICAgICBldmVudENsb25lLm1SZWNvcmRzLmFkZChyZWNvcmRDbG9uZSk7CisgICAgICAgIGlmIChldmVudC5tUmVjb3JkcyAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgcmVjb3JkQ291bnQgPSBldmVudC5tUmVjb3Jkcy5zaXplKCk7CisgICAgICAgICAgICBldmVudENsb25lLm1SZWNvcmRzID0gbmV3IEFycmF5TGlzdDxBY2Nlc3NpYmlsaXR5UmVjb3JkPihyZWNvcmRDb3VudCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY29yZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBBY2Nlc3NpYmlsaXR5UmVjb3JkIHJlY29yZCA9IGV2ZW50Lm1SZWNvcmRzLmdldChpKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBBY2Nlc3NpYmlsaXR5UmVjb3JkIHJlY29yZENsb25lID0gQWNjZXNzaWJpbGl0eVJlY29yZC5vYnRhaW4ocmVjb3JkKTsKKyAgICAgICAgICAgICAgICBldmVudENsb25lLm1SZWNvcmRzLmFkZChyZWNvcmRDbG9uZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZXZlbnRDbG9uZTsKQEAgLTEwMTMsOSArMTAyNCwxMSBAQAogICAgICAgICBtQ29udGVudENoYW5nZVR5cGVzID0gMDsKICAgICAgICAgbVBhY2thZ2VOYW1lID0gbnVsbDsKICAgICAgICAgbUV2ZW50VGltZSA9IDA7Ci0gICAgICAgIHdoaWxlICghbVJlY29yZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5UmVjb3JkIHJlY29yZCA9IG1SZWNvcmRzLnJlbW92ZSgwKTsKLSAgICAgICAgICAgIHJlY29yZC5yZWN5Y2xlKCk7CisgICAgICAgIGlmIChtUmVjb3JkcyAhPSBudWxsKSB7CisgICAgICAgICAgICB3aGlsZSAoIW1SZWNvcmRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlSZWNvcmQgcmVjb3JkID0gbVJlY29yZHMucmVtb3ZlKDApOworICAgICAgICAgICAgICAgIHJlY29yZC5yZWN5Y2xlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwMzcsMTEgKzEwNTAsMTQgQEAKIAogICAgICAgICAvLyBSZWFkIHRoZSByZWNvcmRzLgogICAgICAgICBmaW5hbCBpbnQgcmVjb3JkQ291bnQgPSBwYXJjZWwucmVhZEludCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY29yZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlSZWNvcmQgcmVjb3JkID0gQWNjZXNzaWJpbGl0eVJlY29yZC5vYnRhaW4oKTsKLSAgICAgICAgICAgIHJlYWRBY2Nlc3NpYmlsaXR5UmVjb3JkRnJvbVBhcmNlbChyZWNvcmQsIHBhcmNlbCk7Ci0gICAgICAgICAgICByZWNvcmQubUNvbm5lY3Rpb25JZCA9IG1Db25uZWN0aW9uSWQ7Ci0gICAgICAgICAgICBtUmVjb3Jkcy5hZGQocmVjb3JkKTsKKyAgICAgICAgaWYgKHJlY29yZENvdW50ID4gMCkgeworICAgICAgICAgICAgbVJlY29yZHMgPSBuZXcgQXJyYXlMaXN0PEFjY2Vzc2liaWxpdHlSZWNvcmQ+KHJlY29yZENvdW50KTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjb3JkQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlSZWNvcmQgcmVjb3JkID0gQWNjZXNzaWJpbGl0eVJlY29yZC5vYnRhaW4oKTsKKyAgICAgICAgICAgICAgICByZWFkQWNjZXNzaWJpbGl0eVJlY29yZEZyb21QYXJjZWwocmVjb3JkLCBwYXJjZWwpOworICAgICAgICAgICAgICAgIHJlY29yZC5tQ29ubmVjdGlvbklkID0gbUNvbm5lY3Rpb25JZDsKKyAgICAgICAgICAgICAgICBtUmVjb3Jkcy5hZGQocmVjb3JkKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMTE0Nyw4ICsxMTYzLDggQEAKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI7IENvbnRlbnRDaGFuZ2VUeXBlczogIikuYXBwZW5kKG1Db250ZW50Q2hhbmdlVHlwZXMpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIjsgc291cmNlV2luZG93SWQ6ICIpLmFwcGVuZChtU291cmNlV2luZG93SWQpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIjsgbVNvdXJjZU5vZGVJZDogIikuYXBwZW5kKG1Tb3VyY2VOb2RlSWQpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUmVjb3Jkcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlSZWNvcmQgcmVjb3JkID0gbVJlY29yZHMuZ2V0KGkpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnZXRSZWNvcmRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBBY2Nlc3NpYmlsaXR5UmVjb3JkIHJlY29yZCA9IGdldFJlY29yZChpKTsKICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiICBSZWNvcmQgIik7CiAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaSk7CiAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIjoiKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW50ZXJhY3Rpb25DbGllbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW50ZXJhY3Rpb25DbGllbnQuamF2YQppbmRleCAxMzlkZjNlLi41YTU1ZTM0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUludGVyYWN0aW9uQ2xpZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw2IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9uZ1NwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlTG9uZ0FycmF5OwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CkBAIC03MTgsMTAgKzcxNyw5IEBACiAgICAgICAgICAgICAgICAgTG9nLmUoTE9HX1RBRywgIkR1cGxpY2F0ZSBub2RlLiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFNwYXJzZUxvbmdBcnJheSBjaGlsZElkcyA9IGN1cnJlbnQuZ2V0Q2hpbGROb2RlSWRzKCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRDb3VudCA9IGNoaWxkSWRzLnNpemUoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gY3VycmVudC5nZXRDaGlsZENvdW50KCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGRJZCA9IGNoaWxkSWRzLnZhbHVlQXQoaSk7CisgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjaGlsZElkID0gY3VycmVudC5nZXRDaGlsZElkKGkpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaW5mb0NvdW50OyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGNoaWxkID0gaW5mb3MuZ2V0KGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0U291cmNlTm9kZUlkKCkgPT0gY2hpbGRJZCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXIuamF2YQppbmRleCA4NzllNThmLi5hNzExZjQ4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXIuamF2YQpAQCAtNzUsNiArNzUsNDIgQEAKICAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9GTEFHX1RPVUNIX0VYUExPUkFUSU9OX0VOQUJMRUQgPSAweDAwMDAwMDAyOwogCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5WRVJTSU9OX0RJU0FCTEVEID0gLTE7CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlZFUlNJT05fU1RBTkRBUkQgPSAwOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5WRVJTSU9OX0hVRV9PTkxZID0gMTsKKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVkVSU0lPTl9WQUxVRV9PTkxZID0gMjsKKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBTFRPTklaRVJfRElTQUJMRUQgPSAtMTsKKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBTFRPTklaRVJfU0lNVUxBVEVfTU9OT0NIUk9NQUNZID0gMDsKKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBTFRPTklaRVJfU0lNVUxBVEVfUFJPVEFOT01BTFkgPSAxOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFMVE9OSVpFUl9TSU1VTEFURV9ERVVURVJBTk9NQUxZID0gMjsKKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBTFRPTklaRVJfU0lNVUxBVEVfVFJJVEFOT01BTFkgPSAzOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFMVE9OSVpFUl9DT1JSRUNUX1BST1RBTk9NQUxZID0gMTE7CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQUxUT05JWkVSX0NPUlJFQ1RfREVVVEVSQU5PTUFMWSA9IDEyOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFMVE9OSVpFUl9DT1JSRUNUX1RSSVRBTk9NQUxZID0gMTM7CisKICAgICBzdGF0aWMgZmluYWwgT2JqZWN0IHNJbnN0YW5jZVN5bmMgPSBuZXcgT2JqZWN0KCk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBBY2Nlc3NpYmlsaXR5TWFuYWdlciBzSW5zdGFuY2U7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvLmphdmEKaW5kZXggNGY1M2MxZS4uNjFhYWJlYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm8uamF2YQpAQCAtMjIsOCArMjIsOCBAQAogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuSW5wdXRUeXBlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb25nQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlBvb2xzLlN5bmNocm9uaXplZFBvb2w7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUxvbmdBcnJheTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIAogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKQEAgLTUwMyw3ICs1MDMsNyBAQAogICAgIHByaXZhdGUgQ2hhclNlcXVlbmNlIG1Db250ZW50RGVzY3JpcHRpb247CiAgICAgcHJpdmF0ZSBTdHJpbmcgbVZpZXdJZFJlc291cmNlTmFtZTsKIAotICAgIHByaXZhdGUgZmluYWwgU3BhcnNlTG9uZ0FycmF5IG1DaGlsZE5vZGVJZHMgPSBuZXcgU3BhcnNlTG9uZ0FycmF5KCk7CisgICAgcHJpdmF0ZSBMb25nQXJyYXkgbUNoaWxkTm9kZUlkczsKICAgICBwcml2YXRlIGludCBtQWN0aW9uczsKIAogICAgIHByaXZhdGUgaW50IG1Nb3ZlbWVudEdyYW51bGFyaXRpZXM7CkBAIC02NjYsMjEgKzY2NiwzNSBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEByZXR1cm4gVGhlIGlkcyBvZiB0aGUgY2hpbGRyZW4uCisgICAgICogUmV0dXJucyB0aGUgYXJyYXkgY29udGFpbmluZyB0aGUgSURzIG9mIHRoaXMgbm9kZSdzIGNoaWxkcmVuLgogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgU3BhcnNlTG9uZ0FycmF5IGdldENoaWxkTm9kZUlkcygpIHsKKyAgICBwdWJsaWMgTG9uZ0FycmF5IGdldENoaWxkTm9kZUlkcygpIHsKICAgICAgICAgcmV0dXJuIG1DaGlsZE5vZGVJZHM7CiAgICAgfQogCiAgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaWQgb2YgdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguCisgICAgICoKKyAgICAgKiBAdGhyb3dzIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gd2hlbiBpbmRleCAmbHQ7IDAgfHwgaW5kZXggJmd0Oz0KKyAgICAgKiAgICAgICAgICAgICBnZXRDaGlsZENvdW50KCkKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBsb25nIGdldENoaWxkSWQoaW50IGluZGV4KSB7CisgICAgICAgIGlmIChtQ2hpbGROb2RlSWRzID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1DaGlsZE5vZGVJZHMuZ2V0KGluZGV4KTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBjaGlsZCBjb3VudC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldENoaWxkQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtQ2hpbGROb2RlSWRzLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1DaGlsZE5vZGVJZHMgPT0gbnVsbCA/IDAgOiBtQ2hpbGROb2RlSWRzLnNpemUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTY5OSw2ICs3MTMsOSBAQAogICAgICAqLwogICAgIHB1YmxpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gZ2V0Q2hpbGQoaW50IGluZGV4KSB7CiAgICAgICAgIGVuZm9yY2VTZWFsZWQoKTsKKyAgICAgICAgaWYgKG1DaGlsZE5vZGVJZHMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KICAgICAgICAgaWYgKCFjYW5QZXJmb3JtUmVxdWVzdE92ZXJDb25uZWN0aW9uKG1Tb3VyY2VOb2RlSWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQpAQCAtNzIxLDcgKzczOCwzNSBAQAogICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIElmIGNhbGxlZCBmcm9tIGFuIEFjY2Vzc2liaWxpdHlTZXJ2aWNlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZENoaWxkKFZpZXcgY2hpbGQpIHsKLSAgICAgICAgYWRkQ2hpbGQoY2hpbGQsIFVOREVGSU5FRCk7CisgICAgICAgIGFkZENoaWxkSW50ZXJuYWwoY2hpbGQsIFVOREVGSU5FRCwgdHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVW5jaGVja2VkIHZlcnNpb24gb2Yge0BsaW5rICNhZGRDaGlsZChWaWV3KX0gdGhhdCBkb2VzIG5vdCB2ZXJpZnkKKyAgICAgKiB1bmlxdWVuZXNzLiBGb3IgZnJhbWV3b3JrIHVzZSBvbmx5LgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRDaGlsZFVuY2hlY2tlZChWaWV3IGNoaWxkKSB7CisgICAgICAgIGFkZENoaWxkSW50ZXJuYWwoY2hpbGQsIFVOREVGSU5FRCwgZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZXMgYSBjaGlsZC4gSWYgdGhlIGNoaWxkIHdhcyBub3QgcHJldmlvdXNseSBhZGRlZCB0byB0aGUgbm9kZSwKKyAgICAgKiBjYWxsaW5nIHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QuCisgICAgICogPHA+CisgICAgICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBDYW5ub3QgYmUgY2FsbGVkIGZyb20gYW4KKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5BY2Nlc3NpYmlsaXR5U2VydmljZX0uCisgICAgICogVGhpcyBjbGFzcyBpcyBtYWRlIGltbXV0YWJsZSBiZWZvcmUgYmVpbmcgZGVsaXZlcmVkIHRvIGFuIEFjY2Vzc2liaWxpdHlTZXJ2aWNlLgorICAgICAqIDwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjaGlsZCBUaGUgY2hpbGQuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjaGlsZCB3YXMgcHJlc2VudAorICAgICAqCisgICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gSWYgY2FsbGVkIGZyb20gYW4gQWNjZXNzaWJpbGl0eVNlcnZpY2UuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ2hpbGQoVmlldyBjaGlsZCkgeworICAgICAgICByZXR1cm4gcmVtb3ZlQ2hpbGQoY2hpbGQsIFVOREVGSU5FRCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC03MzksMTIgKzc4NCw0OSBAQAogICAgICAqIEBwYXJhbSB2aXJ0dWFsRGVzY2VuZGFudElkIFRoZSBpZCBvZiB0aGUgdmlydHVhbCBjaGlsZC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRDaGlsZChWaWV3IHJvb3QsIGludCB2aXJ0dWFsRGVzY2VuZGFudElkKSB7CisgICAgICAgIGFkZENoaWxkSW50ZXJuYWwocm9vdCwgdmlydHVhbERlc2NlbmRhbnRJZCwgdHJ1ZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFkZENoaWxkSW50ZXJuYWwoVmlldyByb290LCBpbnQgdmlydHVhbERlc2NlbmRhbnRJZCwgYm9vbGVhbiBjaGVja2VkKSB7CiAgICAgICAgIGVuZm9yY2VOb3RTZWFsZWQoKTsKLSAgICAgICAgZmluYWwgaW50IGluZGV4ID0gbUNoaWxkTm9kZUlkcy5zaXplKCk7CisgICAgICAgIGlmIChtQ2hpbGROb2RlSWRzID09IG51bGwpIHsKKyAgICAgICAgICAgIG1DaGlsZE5vZGVJZHMgPSBuZXcgTG9uZ0FycmF5KCk7CisgICAgICAgIH0KICAgICAgICAgZmluYWwgaW50IHJvb3RBY2Nlc3NpYmlsaXR5Vmlld0lkID0KICAgICAgICAgICAgIChyb290ICE9IG51bGwpID8gcm9vdC5nZXRBY2Nlc3NpYmlsaXR5Vmlld0lkKCkgOiBVTkRFRklORUQ7CiAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGROb2RlSWQgPSBtYWtlTm9kZUlkKHJvb3RBY2Nlc3NpYmlsaXR5Vmlld0lkLCB2aXJ0dWFsRGVzY2VuZGFudElkKTsKLSAgICAgICAgbUNoaWxkTm9kZUlkcy5wdXQoaW5kZXgsIGNoaWxkTm9kZUlkKTsKKyAgICAgICAgLy8gSWYgd2UncmUgY2hlY2tpbmcgdW5pcXVlbmVzcyBhbmQgdGhlIElEIGFscmVhZHkgZXhpc3RzLCBhYm9ydC4KKyAgICAgICAgaWYgKGNoZWNrZWQgJiYgbUNoaWxkTm9kZUlkcy5pbmRleE9mKGNoaWxkTm9kZUlkKSA+PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbUNoaWxkTm9kZUlkcy5hZGQoY2hpbGROb2RlSWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZXMgYSB2aXJ0dWFsIGNoaWxkIHdoaWNoIGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgZ2l2ZW4KKyAgICAgKiA8Y29kZT5yb290PC9jb2RlPi4gSWYgdGhlIGNoaWxkIHdhcyBub3QgcHJldmlvdXNseSBhZGRlZCB0byB0aGUgbm9kZSwKKyAgICAgKiBjYWxsaW5nIHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCBvZiB0aGUgdmlydHVhbCBzdWJ0cmVlLgorICAgICAqIEBwYXJhbSB2aXJ0dWFsRGVzY2VuZGFudElkIFRoZSBpZCBvZiB0aGUgdmlydHVhbCBjaGlsZC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNoaWxkIHdhcyBwcmVzZW50CisgICAgICogQHNlZSAjYWRkQ2hpbGQoVmlldywgaW50KQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHJlbW92ZUNoaWxkKFZpZXcgcm9vdCwgaW50IHZpcnR1YWxEZXNjZW5kYW50SWQpIHsKKyAgICAgICAgZW5mb3JjZU5vdFNlYWxlZCgpOworICAgICAgICBmaW5hbCBMb25nQXJyYXkgY2hpbGRJZHMgPSBtQ2hpbGROb2RlSWRzOworICAgICAgICBpZiAoY2hpbGRJZHMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGZpbmFsIGludCByb290QWNjZXNzaWJpbGl0eVZpZXdJZCA9CisgICAgICAgICAgICAgICAgKHJvb3QgIT0gbnVsbCkgPyByb290LmdldEFjY2Vzc2liaWxpdHlWaWV3SWQoKSA6IFVOREVGSU5FRDsKKyAgICAgICAgZmluYWwgbG9uZyBjaGlsZE5vZGVJZCA9IG1ha2VOb2RlSWQocm9vdEFjY2Vzc2liaWxpdHlWaWV3SWQsIHZpcnR1YWxEZXNjZW5kYW50SWQpOworICAgICAgICBmaW5hbCBpbnQgaW5kZXggPSBjaGlsZElkcy5pbmRleE9mKGNoaWxkTm9kZUlkKTsKKyAgICAgICAgaWYgKGluZGV4IDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNoaWxkSWRzLnJlbW92ZShpbmRleCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8qKgpAQCAtNzg5LDYgKzg3MSwyNCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFJlbW92ZXMgYW4gYWN0aW9uIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBvbiB0aGUgbm9kZS4gSWYgdGhlIGFjdGlvbiB3YXMKKyAgICAgKiBub3QgYWxyZWFkeSBhZGRlZCB0byB0aGUgbm9kZSwgY2FsbGluZyB0aGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0LgorICAgICAqIDxwPgorICAgICAqICAgPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBDYW5ub3QgYmUgY2FsbGVkIGZyb20gYW4KKyAgICAgKiAgIHtAbGluayBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlTZXJ2aWNlfS4KKyAgICAgKiAgIFRoaXMgY2xhc3MgaXMgbWFkZSBpbW11dGFibGUgYmVmb3JlIGJlaW5nIGRlbGl2ZXJlZCB0byBhbiBBY2Nlc3NpYmlsaXR5U2VydmljZS4KKyAgICAgKiA8L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24uCisgICAgICoKKyAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBJZiBjYWxsZWQgZnJvbSBhbiBBY2Nlc3NpYmlsaXR5U2VydmljZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZW1vdmVBY3Rpb24oaW50IGFjdGlvbikgeworICAgICAgICBlbmZvcmNlTm90U2VhbGVkKCk7CisgICAgICAgIG1BY3Rpb25zICY9IH5hY3Rpb247CisgICAgfQorCisgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbW92ZW1lbnQgZ3JhbnVsYXJpdGllcyBmb3IgdHJhdmVyc2luZyB0aGUgdGV4dCBvZiB0aGlzIG5vZGUuCiAgICAgICogPHA+CiAgICAgICogICA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IENhbm5vdCBiZSBjYWxsZWQgZnJvbSBhbgpAQCAtMTQwOCw4ICsxNTA4LDYgQEAKICAgICAgKiAgIHtAbGluayBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlTZXJ2aWNlfS4KICAgICAgKiAgIFRoaXMgY2xhc3MgaXMgbWFkZSBpbW11dGFibGUgYmVmb3JlIGJlaW5nIGRlbGl2ZXJlZCB0byBhbiBBY2Nlc3NpYmlsaXR5U2VydmljZS4KICAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIGNvbGxlY3Rpb25JdGVtIFRydWUgaWYgdGhlIG5vZGUgaXMgYW4gaXRlbS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDb2xsZWN0aW9uSXRlbUluZm8oQ29sbGVjdGlvbkl0ZW1JbmZvIGNvbGxlY3Rpb25JdGVtSW5mbykgewogICAgICAgICBlbmZvcmNlTm90U2VhbGVkKCk7CkBAIC0xOTUxLDYgKzIwNDksNyBAQAogICAgIC8qKgogICAgICAqIHtAaW5oZXJpdERvY30KICAgICAgKi8KKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIxMTQsNiArMjIxMyw3IEBACiAgICAgICogICAgICBpcyByZWN5Y2xlZC4gWW91IG11c3Qgbm90IHRvdWNoIHRoZSBvYmplY3QgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogICAgICAqIDwvcD4KICAgICAgKi8KKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBwYXJjZWwsIGludCBmbGFncykgewogICAgICAgICBwYXJjZWwud3JpdGVJbnQoaXNTZWFsZWQoKSA/IDEgOiAwKTsKICAgICAgICAgcGFyY2VsLndyaXRlTG9uZyhtU291cmNlTm9kZUlkKTsKQEAgLTIxMjMsMTEgKzIyMjMsMTUgQEAKICAgICAgICAgcGFyY2VsLndyaXRlTG9uZyhtTGFiZWxlZEJ5SWQpOwogICAgICAgICBwYXJjZWwud3JpdGVJbnQobUNvbm5lY3Rpb25JZCk7CiAKLSAgICAgICAgU3BhcnNlTG9uZ0FycmF5IGNoaWxkSWRzID0gbUNoaWxkTm9kZUlkczsKLSAgICAgICAgZmluYWwgaW50IGNoaWxkSWRzU2l6ZSA9IGNoaWxkSWRzLnNpemUoKTsKLSAgICAgICAgcGFyY2VsLndyaXRlSW50KGNoaWxkSWRzU2l6ZSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRJZHNTaXplOyBpKyspIHsKLSAgICAgICAgICAgIHBhcmNlbC53cml0ZUxvbmcoY2hpbGRJZHMudmFsdWVBdChpKSk7CisgICAgICAgIGZpbmFsIExvbmdBcnJheSBjaGlsZElkcyA9IG1DaGlsZE5vZGVJZHM7CisgICAgICAgIGlmIChjaGlsZElkcyA9PSBudWxsKSB7CisgICAgICAgICAgICBwYXJjZWwud3JpdGVJbnQoMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRJZHNTaXplID0gY2hpbGRJZHMuc2l6ZSgpOworICAgICAgICAgICAgcGFyY2VsLndyaXRlSW50KGNoaWxkSWRzU2l6ZSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkSWRzU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgcGFyY2VsLndyaXRlTG9uZyhjaGlsZElkcy5nZXQoaSkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgcGFyY2VsLndyaXRlSW50KG1Cb3VuZHNJblBhcmVudC50b3ApOwpAQCAtMjIyMiwxMCArMjMyNiwxNiBAQAogICAgICAgICBtQWN0aW9ucz0gb3RoZXIubUFjdGlvbnM7CiAgICAgICAgIG1Cb29sZWFuUHJvcGVydGllcyA9IG90aGVyLm1Cb29sZWFuUHJvcGVydGllczsKICAgICAgICAgbU1vdmVtZW50R3JhbnVsYXJpdGllcyA9IG90aGVyLm1Nb3ZlbWVudEdyYW51bGFyaXRpZXM7Ci0gICAgICAgIGZpbmFsIGludCBvdGhlckNoaWxkSWRDb3VudCA9IG90aGVyLm1DaGlsZE5vZGVJZHMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG90aGVyQ2hpbGRJZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgIG1DaGlsZE5vZGVJZHMucHV0KGksIG90aGVyLm1DaGlsZE5vZGVJZHMudmFsdWVBdChpKSk7CisKKyAgICAgICAgZmluYWwgTG9uZ0FycmF5IG90aGVyQ2hpbGROb2RlSWRzID0gb3RoZXIubUNoaWxkTm9kZUlkczsKKyAgICAgICAgaWYgKG90aGVyQ2hpbGROb2RlSWRzICE9IG51bGwgJiYgb3RoZXJDaGlsZE5vZGVJZHMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgaWYgKG1DaGlsZE5vZGVJZHMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1DaGlsZE5vZGVJZHMgPSBvdGhlckNoaWxkTm9kZUlkcy5jbG9uZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtQ2hpbGROb2RlSWRzLmFkZEFsbChvdGhlckNoaWxkTm9kZUlkcyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBtVGV4dFNlbGVjdGlvblN0YXJ0ID0gb3RoZXIubVRleHRTZWxlY3Rpb25TdGFydDsKICAgICAgICAgbVRleHRTZWxlY3Rpb25FbmQgPSBvdGhlci5tVGV4dFNlbGVjdGlvbkVuZDsKICAgICAgICAgbUlucHV0VHlwZSA9IG90aGVyLm1JbnB1dFR5cGU7CkBAIC0yMjU1LDExICsyMzY1LDE1IEBACiAgICAgICAgIG1MYWJlbGVkQnlJZCA9IHBhcmNlbC5yZWFkTG9uZygpOwogICAgICAgICBtQ29ubmVjdGlvbklkID0gcGFyY2VsLnJlYWRJbnQoKTsKIAotICAgICAgICBTcGFyc2VMb25nQXJyYXkgY2hpbGRJZHMgPSBtQ2hpbGROb2RlSWRzOwogICAgICAgICBmaW5hbCBpbnQgY2hpbGRyZW5TaXplID0gcGFyY2VsLnJlYWRJbnQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlblNpemU7IGkrKykgewotICAgICAgICAgICAgZmluYWwgbG9uZyBjaGlsZElkID0gcGFyY2VsLnJlYWRMb25nKCk7Ci0gICAgICAgICAgICBjaGlsZElkcy5wdXQoaSwgY2hpbGRJZCk7CisgICAgICAgIGlmIChjaGlsZHJlblNpemUgPD0gMCkgeworICAgICAgICAgICAgbUNoaWxkTm9kZUlkcyA9IG51bGw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQ2hpbGROb2RlSWRzID0gbmV3IExvbmdBcnJheShjaGlsZHJlblNpemUpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlblNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGRJZCA9IHBhcmNlbC5yZWFkTG9uZygpOworICAgICAgICAgICAgICAgIG1DaGlsZE5vZGVJZHMuYWRkKGNoaWxkSWQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgbUJvdW5kc0luUGFyZW50LnRvcCA9IHBhcmNlbC5yZWFkSW50KCk7CkBAIC0yMzMxLDcgKzI0NDUsOSBAQAogICAgICAgICBtV2luZG93SWQgPSBVTkRFRklORUQ7CiAgICAgICAgIG1Db25uZWN0aW9uSWQgPSBVTkRFRklORUQ7CiAgICAgICAgIG1Nb3ZlbWVudEdyYW51bGFyaXRpZXMgPSAwOwotICAgICAgICBtQ2hpbGROb2RlSWRzLmNsZWFyKCk7CisgICAgICAgIGlmIChtQ2hpbGROb2RlSWRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1DaGlsZE5vZGVJZHMuY2xlYXIoKTsKKyAgICAgICAgfQogICAgICAgICBtQm91bmRzSW5QYXJlbnQuc2V0KDAsIDAsIDAsIDApOwogICAgICAgICBtQm91bmRzSW5TY3JlZW4uc2V0KDAsIDAsIDAsIDApOwogICAgICAgICBtQm9vbGVhblByb3BlcnRpZXMgPSAwOwpAQCAtMjQ5MywxMiArMjYwOSwxNCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIl0iKTsKIAotICAgICAgICAgICAgU3BhcnNlTG9uZ0FycmF5IGNoaWxkSWRzID0gbUNoaWxkTm9kZUlkczsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI7IGNoaWxkQWNjZXNzaWJpbGl0eUlkczogWyIpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0gY2hpbGRJZHMuc2l6ZSgpOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGNoaWxkSWRzLnZhbHVlQXQoaSkpOwotICAgICAgICAgICAgICAgIGlmIChpIDwgY291bnQgLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgZmluYWwgTG9uZ0FycmF5IGNoaWxkSWRzID0gbUNoaWxkTm9kZUlkczsKKyAgICAgICAgICAgIGlmIChjaGlsZElkcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0gY2hpbGRJZHMuc2l6ZSgpOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjaGlsZElkcy5nZXQoaSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGNvdW50IC0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiXSIpOwpAQCAtMjg5MywxNiArMzAxMSwxOCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEBzZWUgUGFyY2VsYWJsZS5DcmVhdG9yCisgICAgICogQHNlZSBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPEFjY2Vzc2liaWxpdHlOb2RlSW5mbz4gQ1JFQVRPUiA9CiAgICAgICAgICAgICBuZXcgUGFyY2VsYWJsZS5DcmVhdG9yPEFjY2Vzc2liaWxpdHlOb2RlSW5mbz4oKSB7CisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHBhcmNlbCkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8gPSBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8ub2J0YWluKCk7CiAgICAgICAgICAgICBpbmZvLmluaXRGcm9tUGFyY2VsKHBhcmNlbCk7CiAgICAgICAgICAgICByZXR1cm4gaW5mbzsKICAgICAgICAgfQogCisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgQWNjZXNzaWJpbGl0eU5vZGVJbmZvW10gbmV3QXJyYXkoaW50IHNpemUpIHsKICAgICAgICAgICAgIHJldHVybiBuZXcgQWNjZXNzaWJpbGl0eU5vZGVJbmZvW3NpemVdOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvQ2FjaGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm9DYWNoZS5qYXZhCmluZGV4IGE5NDczYTguLjk3ZGI4NGIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm9DYWNoZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm9DYWNoZS5qYXZhCkBAIC0xOCw4ICsxOCw4IEBACiAKIGltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvbmdBcnJheTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9uZ1NwYXJzZUFycmF5OwotaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VMb25nQXJyYXk7CiAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKQEAgLTE3MiwxMyArMTcyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBuZXcgb25lIHJlcHJlc2VudHMgYSBzb3VyY2Ugc3RhdGUgd2hlcmUgc29tZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgLy8gY2hpbGRyZW4gaGF2ZSBiZWVuIHJlbW92ZWQgdG8gYXZvaWQgaGF2aW5nIGRpc2Nvbm5lY3RlZAogICAgICAgICAgICAgICAgICAgICAvLyBzdWJ0cmVlcyBpbiB0aGUgY2FjaGUuCi0gICAgICAgICAgICAgICAgICAgIFNwYXJzZUxvbmdBcnJheSBvbGRDaGlsZHJlbklkcyA9IG9sZEluZm8uZ2V0Q2hpbGROb2RlSWRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIFNwYXJzZUxvbmdBcnJheSBuZXdDaGlsZHJlbklkcyA9IGluZm8uZ2V0Q2hpbGROb2RlSWRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBvbGRDaGlsZENvdW50ID0gb2xkQ2hpbGRyZW5JZHMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9sZENoaWxkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBvbGRDaGlsZElkID0gb2xkQ2hpbGRyZW5JZHMudmFsdWVBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZHJlbklkcy5pbmRleE9mVmFsdWUob2xkQ2hpbGRJZCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWJUcmVlTG9ja2VkKG9sZENoaWxkSWQpOworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBSdW5zIGluIE8obl4yKSwgY291bGQgb3B0aW1pemUgdG8gTyhuICsgbiBsb2cgbikKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgTG9uZ0FycmF5IG5ld0NoaWxkcmVuSWRzID0gaW5mby5nZXRDaGlsZE5vZGVJZHMoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkcmVuSWRzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBvbGRDaGlsZENvdW50ID0gb2xkSW5mby5nZXRDaGlsZENvdW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9sZENoaWxkQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgb2xkQ2hpbGRJZCA9IG9sZEluZm8uZ2V0Q2hpbGRJZChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGRyZW5JZHMuaW5kZXhPZihvbGRDaGlsZElkKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWJUcmVlTG9ja2VkKG9sZENoaWxkSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0yMzcsMTAgKzIzOSw5IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbUNhY2hlSW1wbC5yZW1vdmUocm9vdE5vZGVJZCk7Ci0gICAgICAgIFNwYXJzZUxvbmdBcnJheSBjaGlsZE5vZGVJZHMgPSBjdXJyZW50LmdldENoaWxkTm9kZUlkcygpOwotICAgICAgICBmaW5hbCBpbnQgY2hpbGRDb3VudCA9IGNoaWxkTm9kZUlkcy5zaXplKCk7CisgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gY3VycmVudC5nZXRDaGlsZENvdW50KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBsb25nIGNoaWxkTm9kZUlkID0gY2hpbGROb2RlSWRzLnZhbHVlQXQoaSk7CisgICAgICAgICAgICBmaW5hbCBsb25nIGNoaWxkTm9kZUlkID0gY3VycmVudC5nZXRDaGlsZElkKGkpOwogICAgICAgICAgICAgY2xlYXJTdWJUcmVlUmVjdXJzaXZlTG9ja2VkKGNoaWxkTm9kZUlkKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwMSwxMSArMzAyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBTcGFyc2VMb25nQXJyYXkgY2hpbGRJZHMgPSBjdXJyZW50LmdldENoaWxkTm9kZUlkcygpOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gY2hpbGRJZHMuc2l6ZSgpOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gY3VycmVudC5nZXRDaGlsZENvdW50KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjaGlsZElkID0gY2hpbGRJZHMudmFsdWVBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGNoaWxkID0gbUNhY2hlSW1wbC5nZXQoY2hpbGRJZCk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGRJZCA9IGN1cnJlbnQuZ2V0Q2hpbGRJZChpKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGNoaWxkID0gbUNhY2hlSW1wbC5nZXQoY2hpbGRJZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmcmluZ2UuYWRkKGNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0NhcHRpb25pbmdNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQ2FwdGlvbmluZ01hbmFnZXIuamF2YQppbmRleCA1NTcyMzlmLi5hMDEzNGQ2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQ2FwdGlvbmluZ01hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQ2FwdGlvbmluZ01hbmFnZXIuamF2YQpAQCAtMjUwLDYgKzI1MCw5IEBACiAgICAgICogYmFja2dyb3VuZCBjb2xvcnMsIGVkZ2UgcHJvcGVydGllcywgYW5kIHR5cGVmYWNlLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQ2FwdGlvblN0eWxlIHsKKyAgICAgICAgLyoqIFBhY2tlZCB2YWx1ZSBmb3IgYSBjb2xvciBvZiAnbm9uZScgYW5kIGEgY2FjaGVkIG9wYWNpdHkgb2YgMTAwJS4gKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTE9SX05PTkVfT1BBUVVFID0gMHgwMDAwMDBGRjsKKwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDYXB0aW9uU3R5bGUgV0hJVEVfT05fQkxBQ0s7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIENhcHRpb25TdHlsZSBCTEFDS19PTl9XSElURTsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2FwdGlvblN0eWxlIFlFTExPV19PTl9CTEFDSzsKQEAgLTI3MSw2ICsyNzQsMTIgQEAKICAgICAgICAgLyoqIEVkZ2UgdHlwZSB2YWx1ZSBzcGVjaWZ5aW5nIGRyb3Atc2hhZG93ZWQgY2hhcmFjdGVyIGVkZ2VzLiAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFREdFX1RZUEVfRFJPUF9TSEFET1cgPSAyOwogCisgICAgICAgIC8qKiBFZGdlIHR5cGUgdmFsdWUgc3BlY2lmeWluZyByYWlzZWQgYmV2ZWwgY2hhcmFjdGVyIGVkZ2VzLiAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFREdFX1RZUEVfUkFJU0VEID0gMzsKKworICAgICAgICAvKiogRWRnZSB0eXBlIHZhbHVlIHNwZWNpZnlpbmcgZGVwcmVzc2VkIGJldmVsIGNoYXJhY3RlciBlZGdlcy4gKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRURHRV9UWVBFX0RFUFJFU1NFRCA9IDQ7CisKICAgICAgICAgLyoqIFRoZSBwcmVmZXJyZWQgZm9yZWdyb3VuZCBjb2xvciBmb3IgdmlkZW8gY2FwdGlvbnMuICovCiAgICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZm9yZWdyb3VuZENvbG9yOwogCkBAIC0yODMsNiArMjkyLDggQEAKICAgICAgICAgICogPGxpPntAbGluayAjRURHRV9UWVBFX05PTkV9CiAgICAgICAgICAqIDxsaT57QGxpbmsgI0VER0VfVFlQRV9PVVRMSU5FfQogICAgICAgICAgKiA8bGk+e0BsaW5rICNFREdFX1RZUEVfRFJPUF9TSEFET1d9CisgICAgICAgICAqIDxsaT57QGxpbmsgI0VER0VfVFlQRV9SQUlTRUR9CisgICAgICAgICAqIDxsaT57QGxpbmsgI0VER0VfVFlQRV9ERVBSRVNTRUR9CiAgICAgICAgICAqIDwvdWw+CiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgZmluYWwgaW50IGVkZ2VUeXBlOwpAQCAtMjkzLDYgKzMwNCw5IEBACiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgZmluYWwgaW50IGVkZ2VDb2xvcjsKIAorICAgICAgICAvKiogVGhlIHByZWZlcnJlZCB3aW5kb3cgY29sb3IgZm9yIHZpZGVvIGNhcHRpb25zLiAqLworICAgICAgICBwdWJsaWMgZmluYWwgaW50IHdpbmRvd0NvbG9yOworCiAgICAgICAgIC8qKgogICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KQEAgLTMwMSwxMSArMzE1LDEyIEBACiAgICAgICAgIHByaXZhdGUgVHlwZWZhY2UgbVBhcnNlZFR5cGVmYWNlOwogCiAgICAgICAgIHByaXZhdGUgQ2FwdGlvblN0eWxlKGludCBmb3JlZ3JvdW5kQ29sb3IsIGludCBiYWNrZ3JvdW5kQ29sb3IsIGludCBlZGdlVHlwZSwgaW50IGVkZ2VDb2xvciwKLSAgICAgICAgICAgICAgICBTdHJpbmcgcmF3VHlwZWZhY2UpIHsKKyAgICAgICAgICAgICAgICBpbnQgd2luZG93Q29sb3IsIFN0cmluZyByYXdUeXBlZmFjZSkgewogICAgICAgICAgICAgdGhpcy5mb3JlZ3JvdW5kQ29sb3IgPSBmb3JlZ3JvdW5kQ29sb3I7CiAgICAgICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcjsKICAgICAgICAgICAgIHRoaXMuZWRnZVR5cGUgPSBlZGdlVHlwZTsKICAgICAgICAgICAgIHRoaXMuZWRnZUNvbG9yID0gZWRnZUNvbG9yOworICAgICAgICAgICAgdGhpcy53aW5kb3dDb2xvciA9IHdpbmRvd0NvbG9yOwogCiAgICAgICAgICAgICBtUmF3VHlwZWZhY2UgPSByYXdUeXBlZmFjZTsKICAgICAgICAgfQpAQCAtMzM0LDI1ICszNDksMjcgQEAKICAgICAgICAgICAgICAgICAgICAgY3IsIFNlY3VyZS5BQ0NFU1NJQklMSVRZX0NBUFRJT05JTkdfRURHRV9UWVBFLCBkZWZTdHlsZS5lZGdlVHlwZSk7CiAgICAgICAgICAgICBmaW5hbCBpbnQgZWRnZUNvbG9yID0gU2VjdXJlLmdldEludCgKICAgICAgICAgICAgICAgICAgICAgY3IsIFNlY3VyZS5BQ0NFU1NJQklMSVRZX0NBUFRJT05JTkdfRURHRV9DT0xPUiwgZGVmU3R5bGUuZWRnZUNvbG9yKTsKKyAgICAgICAgICAgIGZpbmFsIGludCB3aW5kb3dDb2xvciA9IFNlY3VyZS5nZXRJbnQoCisgICAgICAgICAgICAgICAgICAgIGNyLCBTZWN1cmUuQUNDRVNTSUJJTElUWV9DQVBUSU9OSU5HX1dJTkRPV19DT0xPUiwgZGVmU3R5bGUud2luZG93Q29sb3IpOwogCiAgICAgICAgICAgICBTdHJpbmcgcmF3VHlwZWZhY2UgPSBTZWN1cmUuZ2V0U3RyaW5nKGNyLCBTZWN1cmUuQUNDRVNTSUJJTElUWV9DQVBUSU9OSU5HX1RZUEVGQUNFKTsKICAgICAgICAgICAgIGlmIChyYXdUeXBlZmFjZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmF3VHlwZWZhY2UgPSBkZWZTdHlsZS5tUmF3VHlwZWZhY2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ2FwdGlvblN0eWxlKAotICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kQ29sb3IsIGJhY2tncm91bmRDb2xvciwgZWRnZVR5cGUsIGVkZ2VDb2xvciwgcmF3VHlwZWZhY2UpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBDYXB0aW9uU3R5bGUoZm9yZWdyb3VuZENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsIGVkZ2VUeXBlLCBlZGdlQ29sb3IsCisgICAgICAgICAgICAgICAgICAgIHdpbmRvd0NvbG9yLCByYXdUeXBlZmFjZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgewotICAgICAgICAgICAgV0hJVEVfT05fQkxBQ0sgPSBuZXcgQ2FwdGlvblN0eWxlKAotICAgICAgICAgICAgICAgICAgICBDb2xvci5XSElURSwgQ29sb3IuQkxBQ0ssIEVER0VfVFlQRV9OT05FLCBDb2xvci5CTEFDSywgbnVsbCk7Ci0gICAgICAgICAgICBCTEFDS19PTl9XSElURSA9IG5ldyBDYXB0aW9uU3R5bGUoCi0gICAgICAgICAgICAgICAgICAgIENvbG9yLkJMQUNLLCBDb2xvci5XSElURSwgRURHRV9UWVBFX05PTkUsIENvbG9yLkJMQUNLLCBudWxsKTsKLSAgICAgICAgICAgIFlFTExPV19PTl9CTEFDSyA9IG5ldyBDYXB0aW9uU3R5bGUoCi0gICAgICAgICAgICAgICAgICAgIENvbG9yLllFTExPVywgQ29sb3IuQkxBQ0ssIEVER0VfVFlQRV9OT05FLCBDb2xvci5CTEFDSywgbnVsbCk7Ci0gICAgICAgICAgICBZRUxMT1dfT05fQkxVRSA9IG5ldyBDYXB0aW9uU3R5bGUoCi0gICAgICAgICAgICAgICAgICAgIENvbG9yLllFTExPVywgQ29sb3IuQkxVRSwgRURHRV9UWVBFX05PTkUsIENvbG9yLkJMQUNLLCBudWxsKTsKKyAgICAgICAgICAgIFdISVRFX09OX0JMQUNLID0gbmV3IENhcHRpb25TdHlsZShDb2xvci5XSElURSwgQ29sb3IuQkxBQ0ssIEVER0VfVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICBDb2xvci5CTEFDSywgQ09MT1JfTk9ORV9PUEFRVUUsIG51bGwpOworICAgICAgICAgICAgQkxBQ0tfT05fV0hJVEUgPSBuZXcgQ2FwdGlvblN0eWxlKENvbG9yLkJMQUNLLCBDb2xvci5XSElURSwgRURHRV9UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgIENvbG9yLkJMQUNLLCBDT0xPUl9OT05FX09QQVFVRSwgbnVsbCk7CisgICAgICAgICAgICBZRUxMT1dfT05fQkxBQ0sgPSBuZXcgQ2FwdGlvblN0eWxlKENvbG9yLllFTExPVywgQ29sb3IuQkxBQ0ssIEVER0VfVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICBDb2xvci5CTEFDSywgQ09MT1JfTk9ORV9PUEFRVUUsIG51bGwpOworICAgICAgICAgICAgWUVMTE9XX09OX0JMVUUgPSBuZXcgQ2FwdGlvblN0eWxlKENvbG9yLllFTExPVywgQ29sb3IuQkxVRSwgRURHRV9UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgIENvbG9yLkJMQUNLLCBDT0xPUl9OT05FX09QQVFVRSwgbnVsbCk7CiAKICAgICAgICAgICAgIFBSRVNFVFMgPSBuZXcgQ2FwdGlvblN0eWxlW10gewogICAgICAgICAgICAgICAgICAgICBXSElURV9PTl9CTEFDSywgQkxBQ0tfT05fV0hJVEUsIFlFTExPV19PTl9CTEFDSywgWUVMTE9XX09OX0JMVUUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0JvdW5jZUludGVycG9sYXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hbmltYXRpb24vQm91bmNlSW50ZXJwb2xhdG9yLmphdmEKaW5kZXggZjc5ZTczMC4uZWNmOTlhNyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hbmltYXRpb24vQm91bmNlSW50ZXJwb2xhdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hbmltYXRpb24vQm91bmNlSW50ZXJwb2xhdG9yLmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC52aWV3LmFuaW1hdGlvbjsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQmFzZUlucHV0Q29ubmVjdGlvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9CYXNlSW5wdXRDb25uZWN0aW9uLmphdmEKaW5kZXggZjczMGNmNy4uY2NjZmE3OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9CYXNlSW5wdXRDb25uZWN0aW9uLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9CYXNlSW5wdXRDb25uZWN0aW9uLmphdmEKQEAgLTQ4NCwxMCArNDg0LDEwIEBACiAgICAgICAgIGZpbmFsIEVkaXRhYmxlIGNvbnRlbnQgPSBnZXRFZGl0YWJsZSgpOwogICAgICAgICBpZiAoY29udGVudCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgICAgIGludCBsZW4gPSBjb250ZW50Lmxlbmd0aCgpOwotICAgICAgICBpZiAoc3RhcnQgPiBsZW4gfHwgZW5kID4gbGVuKSB7CisgICAgICAgIGlmIChzdGFydCA+IGxlbiB8fCBlbmQgPiBsZW4gfHwgc3RhcnQgPCAwIHx8IGVuZCA8IDApIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBnaXZlbiBzZWxlY3Rpb24gaXMgb3V0IG9mIGJvdW5kcywganVzdCBpZ25vcmUgaXQuCiAgICAgICAgICAgICAvLyBNb3N0IGxpa2VseSB0aGUgdGV4dCB3YXMgY2hhbmdlZCBvdXQgZnJvbSB1bmRlciB0aGUgSU1FLAotICAgICAgICAgICAgLy8gdGhlIHRoZSBJTUUgaXMgZ29pbmcgdG8gaGF2ZSB0byB1cGRhdGUgYWxsIG9mIGl0cyBzdGF0ZQorICAgICAgICAgICAgLy8gYW5kIHRoZSBJTUUgaXMgZ29pbmcgdG8gaGF2ZSB0byB1cGRhdGUgYWxsIG9mIGl0cyBzdGF0ZQogICAgICAgICAgICAgLy8gYW55d2F5LgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTYwMSw3ICs2MDEsMTEgQEAKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgYmVnaW5CYXRjaEVkaXQoKTsKLSAgICAgICAgCisgICAgICAgIGlmICghY29tcG9zaW5nICYmICFUZXh0VXRpbHMuaXNFbXB0eSh0ZXh0KSkgeworICAgICAgICAgICAgLy8gTm90aWZ5IHRoZSB0ZXh0IGlzIGNvbW1pdHRlZCBieSB0aGUgdXNlciB0byBJbnB1dE1ldGhvZE1hbmFnZXJTZXJ2aWNlCisgICAgICAgICAgICBtSU1NLm5vdGlmeVRleHRDb21taXR0ZWQoKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIGRlbGV0ZSBjb21wb3NpbmcgdGV4dCBzZXQgcHJldmlvdXNseS4KICAgICAgICAgaW50IGEgPSBnZXRDb21wb3NpbmdTcGFuU3RhcnQoY29udGVudCk7CiAgICAgICAgIGludCBiID0gZ2V0Q29tcG9zaW5nU3BhbkVuZChjb250ZW50KTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvRXh0cmFjdGVkVGV4dFJlcXVlc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvRXh0cmFjdGVkVGV4dFJlcXVlc3QuamF2YQppbmRleCBmNjU4Yjg3Li5iZjBiZWYzIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0V4dHJhY3RlZFRleHRSZXF1ZXN0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9FeHRyYWN0ZWRUZXh0UmVxdWVzdC5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIAogLyoqCiAgKiBEZXNjcmlwdGlvbiBvZiB3aGF0IGFuIGlucHV0IG1ldGhvZCB3b3VsZCBsaWtlIGZyb20gYW4gYXBwbGljYXRpb24gd2hlbgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dEJpbmRpbmcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRCaW5kaW5nLmphdmEKaW5kZXggZjQyMDllZi4uYmNkNDU5ZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dEJpbmRpbmcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0QmluZGluZy5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogCiAvKioKICAqIEluZm9ybWF0aW9uIGdpdmVuIHRvIGFuIHtAbGluayBJbnB1dE1ldGhvZH0gYWJvdXQgYSBjbGllbnQgY29ubmVjdGluZwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZE1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RNYW5hZ2VyLmphdmEKaW5kZXggNTNmN2M3OS4uNzBjNTNkMiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kTWFuYWdlci5qYXZhCkBAIC0xODA1LDYgKzE4MDUsMjAgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBOb3RpZnkgdGhlIGN1cnJlbnQgSU1FIGNvbW1pdHMgdGV4dAorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHZvaWQgbm90aWZ5VGV4dENvbW1pdHRlZCgpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtSCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2VydmljZS5ub3RpZnlUZXh0Q29tbWl0dGVkKCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIklNRSBkaWVkOiAiICsgbUN1cklkLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgogICAgICAqIFJldHVybnMgYSBtYXAgb2YgYWxsIHNob3J0Y3V0IGlucHV0IG1ldGhvZCBpbmZvIGFuZCB0aGVpciBzdWJ0eXBlcy4KICAgICAgKi8KICAgICBwdWJsaWMgTWFwPElucHV0TWV0aG9kSW5mbywgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+PiBnZXRTaG9ydGN1dElucHV0TWV0aG9kc0FuZFN1YnR5cGVzKCkgewpAQCAtMTg0MCw2ICsxODU0LDIxIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQHJldHVybiBUaGUgY3VycmVudCBoZWlnaHQgb2YgdGhlIGlucHV0IG1ldGhvZCB3aW5kb3cuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldElucHV0TWV0aG9kV2luZG93VmlzaWJsZUhlaWdodCgpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtSCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0SW5wdXRNZXRob2RXaW5kb3dWaXNpYmxlSGVpZ2h0KCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIklNRSBkaWVkOiAiICsgbUN1cklkLCBlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgogICAgICAqIEZvcmNlIHN3aXRjaCB0byB0aGUgbGFzdCB1c2VkIGlucHV0IG1ldGhvZCBhbmQgc3VidHlwZS4gSWYgdGhlIGxhc3QgaW5wdXQgbWV0aG9kIGRpZG4ndCBoYXZlCiAgICAgICogYW55IHN1YnR5cGVzLCB0aGUgZnJhbWV3b3JrIHdpbGwgc2ltcGx5IHN3aXRjaCB0byB0aGUgbGFzdCBpbnB1dCBtZXRob2Qgd2l0aCBubyBzdWJ0eXBlCiAgICAgICogc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlLmphdmEKaW5kZXggMmFiMzAyNC4uZTdhZGEyNyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZS5qYXZhCkBAIC00NzIsMTIgKzQ3MiwxMiBAQAogICAgICAgICAgICAgICAgIHJldHVybiAoc3VidHlwZS5oYXNoQ29kZSgpID09IGhhc2hDb2RlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIChzdWJ0eXBlLmhhc2hDb2RlKCkgPT0gaGFzaENvZGUoKSkKLSAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5nZXROYW1lUmVzSWQoKSA9PSBnZXROYW1lUmVzSWQoKSkKLSAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5nZXRNb2RlKCkuZXF1YWxzKGdldE1vZGUoKSkpCi0gICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuZ2V0SWNvblJlc0lkKCkgPT0gZ2V0SWNvblJlc0lkKCkpCiAgICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuZ2V0TG9jYWxlKCkuZXF1YWxzKGdldExvY2FsZSgpKSkKKyAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5nZXRNb2RlKCkuZXF1YWxzKGdldE1vZGUoKSkpCiAgICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuZ2V0RXh0cmFWYWx1ZSgpLmVxdWFscyhnZXRFeHRyYVZhbHVlKCkpKQogICAgICAgICAgICAgICAgICYmIChzdWJ0eXBlLmlzQXV4aWxpYXJ5KCkgPT0gaXNBdXhpbGlhcnkoKSkKKyAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5vdmVycmlkZXNJbXBsaWNpdGx5RW5hYmxlZFN1YnR5cGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgPT0gb3ZlcnJpZGVzSW1wbGljaXRseUVuYWJsZWRTdWJ0eXBlKCkpCiAgICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuaXNBc2NpaUNhcGFibGUoKSA9PSBpc0FzY2lpQ2FwYWJsZSgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvQ2FjaGVNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvQ2FjaGVNYW5hZ2VyLmphdmEKaW5kZXggYmJkM2YyYi4uNDVlNmViMyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L0NhY2hlTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9DYWNoZU1hbmFnZXIuamF2YQpAQCAtMTYsMTMgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLndlYmtpdDsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQubmV0Lmh0dHAuSGVhZGVyczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiBpbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9EYXRlU29ydGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvRGF0ZVNvcnRlci5qYXZhCmluZGV4IDgyYzEzYWUuLmZlZGUyNDQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9EYXRlU29ydGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L0RhdGVTb3J0ZXIuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogCiBpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiAKIGltcG9ydCBsaWJjb3JlLmljdS5Mb2NhbGVEYXRhOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1BsdWdpbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1BsdWdpbi5qYXZhCmluZGV4IDUyOTgyMGIuLjA3MmUwMmEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9QbHVnaW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvUGx1Z2luLmphdmEKQEAgLTIxLDcgKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQud2Via2l0LldlYlZpZXc7CiAKIC8qKgogICogUmVwcmVzZW50cyBhIHBsdWdpbiAoSmF2YSBlcXVpdmFsZW50IG9mIHRoZSBQbHVnaW5QYWNrYWdlQW5kcm9pZApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlJlc291cmNlUmVzcG9uc2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJSZXNvdXJjZVJlc3BvbnNlLmphdmEKaW5kZXggYjcxNzFlZS4uZjIxZTJiNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlJlc291cmNlUmVzcG9uc2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViUmVzb3VyY2VSZXNwb25zZS5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC53ZWJraXQ7CiAKLWltcG9ydCBhbmRyb2lkLm5ldC5odHRwLkhlYWRlcnM7Ci0KIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViVmlldy5qYXZhCmluZGV4IDViYzM5ZjE1Li43ZWUzM2MxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3LmphdmEKQEAgLTI4LDcgKzI4LDYgQEAKIGltcG9ydCBhbmRyb2lkLm5ldC5odHRwLlNzbENlcnRpZmljYXRlOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5DYW5jZWxsYXRpb25TaWduYWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuU3RyaWN0TW9kZTsKQEAgLTI1NSw3ICsyNTQsNyBAQAogICAgIC8vIFRocm93aW5nIGFuIGV4Y2VwdGlvbiBmb3IgaW5jb3JyZWN0IHRocmVhZCB1c2FnZSBpZiB0aGUKICAgICAvLyBidWlsZCB0YXJnZXQgaXMgSkIgTVIyIG9yIG5ld2VyLiBEZWZhdWx0cyB0byBmYWxzZSwgYW5kIGlzCiAgICAgLy8gc2V0IGluIHRoZSBXZWJWaWV3IGNvbnN0cnVjdG9yLgotICAgIHByaXZhdGUgc3RhdGljIEJvb2xlYW4gc0VuZm9yY2VUaHJlYWRDaGVja2luZyA9IGZhbHNlOworICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gc0VuZm9yY2VUaHJlYWRDaGVja2luZyA9IGZhbHNlOwogCiAgICAgLyoqCiAgICAgICogIFRyYW5zcG9ydGF0aW9uIG9iamVjdCBmb3IgcmV0dXJuaW5nIFdlYlZpZXcgYWNyb3NzIHRocmVhZCBib3VuZGFyaWVzLgpAQCAtNDQ5LDEwICs0NDgsMTIgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBjb250ZXh0IGEgQ29udGV4dCBvYmplY3QgdXNlZCB0byBhY2Nlc3MgYXBwbGljYXRpb24gYXNzZXRzCiAgICAgICogQHBhcmFtIGF0dHJzIGFuIEF0dHJpYnV0ZVNldCBwYXNzZWQgdG8gb3VyIHBhcmVudAotICAgICAqIEBwYXJhbSBkZWZTdHlsZSB0aGUgZGVmYXVsdCBzdHlsZSByZXNvdXJjZSBJRAorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgYW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqLwotICAgIHB1YmxpYyBXZWJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGUsIGZhbHNlKTsKKyAgICBwdWJsaWMgV2ViVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDYwLDcgKzQ2MSwyNiBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGNvbnRleHQgYSBDb250ZXh0IG9iamVjdCB1c2VkIHRvIGFjY2VzcyBhcHBsaWNhdGlvbiBhc3NldHMKICAgICAgKiBAcGFyYW0gYXR0cnMgYW4gQXR0cmlidXRlU2V0IHBhc3NlZCB0byBvdXIgcGFyZW50Ci0gICAgICogQHBhcmFtIGRlZlN0eWxlIHRoZSBkZWZhdWx0IHN0eWxlIHJlc291cmNlIElECisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBhbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICogQHBhcmFtIGRlZlN0eWxlUmVzIGEgcmVzb3VyY2UgaWRlbnRpZmllciBvZiBhIHN0eWxlIHJlc291cmNlIHRoYXQKKyAgICAgKiAgICAgICAgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB2aWV3LCB1c2VkIG9ubHkgaWYKKyAgICAgKiAgICAgICAgZGVmU3R5bGVBdHRyIGlzIDAgb3IgY2FuIG5vdCBiZSBmb3VuZCBpbiB0aGUgdGhlbWUuIENhbiBiZSAwCisgICAgICogICAgICAgIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgV2ViVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMsIG51bGwsIGZhbHNlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFdlYlZpZXcgd2l0aCBsYXlvdXQgcGFyYW1ldGVycyBhbmQgYSBkZWZhdWx0IHN0eWxlLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgYSBDb250ZXh0IG9iamVjdCB1c2VkIHRvIGFjY2VzcyBhcHBsaWNhdGlvbiBhc3NldHMKKyAgICAgKiBAcGFyYW0gYXR0cnMgYW4gQXR0cmlidXRlU2V0IHBhc3NlZCB0byBvdXIgcGFyZW50CisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBhbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCiAgICAgICogQHBhcmFtIHByaXZhdGVCcm93c2luZyB3aGV0aGVyIHRoaXMgV2ViVmlldyB3aWxsIGJlIGluaXRpYWxpemVkIGluCiAgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIG1vZGUKICAgICAgKgpAQCAtNDcwLDkgKzQ5MCw5IEBACiAgICAgICogYW5kIHtAbGluayBXZWJTdG9yYWdlfSBmb3IgZmluZS1ncmFpbmVkIGNvbnRyb2wgb2YgcHJpdmFjeSBkYXRhLgogICAgICAqLwogICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIFdlYlZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSwKKyAgICBwdWJsaWMgV2ViVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwKICAgICAgICAgICAgIGJvb2xlYW4gcHJpdmF0ZUJyb3dzaW5nKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlLCBudWxsLCBwcml2YXRlQnJvd3NpbmcpOworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDAsIG51bGwsIHByaXZhdGVCcm93c2luZyk7CiAgICAgfQogCiAgICAgLyoqCkBAIC00ODMsNyArNTAzLDkgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBjb250ZXh0IGEgQ29udGV4dCBvYmplY3QgdXNlZCB0byBhY2Nlc3MgYXBwbGljYXRpb24gYXNzZXRzCiAgICAgICogQHBhcmFtIGF0dHJzIGFuIEF0dHJpYnV0ZVNldCBwYXNzZWQgdG8gb3VyIHBhcmVudAotICAgICAqIEBwYXJhbSBkZWZTdHlsZSB0aGUgZGVmYXVsdCBzdHlsZSByZXNvdXJjZSBJRAorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgYW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqIEBwYXJhbSBqYXZhU2NyaXB0SW50ZXJmYWNlcyBhIE1hcCBvZiBpbnRlcmZhY2UgbmFtZXMsIGFzIGtleXMsIGFuZAogICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgaW1wbGVtZW50aW5nIHRob3NlIGludGVyZmFjZXMsIGFzCiAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcwpAQCAtNDkyLDEwICs1MTQsMTggQEAKICAgICAgKiBAaGlkZSBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBkdW1wcmVuZGVydHJlZSwgYXMgaXQgcmVxdWlyZXMgdGhlIGphdmFTY3JpcHQgaW50ZXJmYWNlcyB0bwogICAgICAqICAgICAgIGJlIGFkZGVkIHN5bmNocm9ub3VzbHksIGJlZm9yZSBhIHN1YnNlcXVlbnQgbG9hZFVybCBjYWxsIHRha2VzIGVmZmVjdC4KICAgICAgKi8KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKSAgLy8gZm9yIHN1cGVyKCkgY2FsbCBpbnRvIGRlcHJlY2F0ZWQgYmFzZSBjbGFzcyBjb25zdHJ1Y3Rvci4KLSAgICBwcm90ZWN0ZWQgV2ViVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlLAorICAgIHByb3RlY3RlZCBXZWJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLAogICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBqYXZhU2NyaXB0SW50ZXJmYWNlcywgYm9vbGVhbiBwcml2YXRlQnJvd3NpbmcpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwLCBqYXZhU2NyaXB0SW50ZXJmYWNlcywgcHJpdmF0ZUJyb3dzaW5nKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpICAvLyBmb3Igc3VwZXIoKSBjYWxsIGludG8gZGVwcmVjYXRlZCBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yLgorICAgIHByb3RlY3RlZCBXZWJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMsCisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGphdmFTY3JpcHRJbnRlcmZhY2VzLCBib29sZWFuIHByaXZhdGVCcm93c2luZykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgY29udGV4dCBhcmd1bWVudCIpOwogICAgICAgICB9CkBAIC02ODYsNiArNzE2LDE1IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogVXNlZCBvbmx5IGJ5IGludGVybmFsIHRlc3RzIHRvIGZyZWUgdXAgbWVtb3J5LgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZnJlZU1lbW9yeUZvclRlc3RzKCkgeworICAgICAgICBnZXRGYWN0b3J5KCkuZ2V0U3RhdGljcygpLmZyZWVNZW1vcnlGb3JUZXN0cygpOworICAgIH0KKworICAgIC8qKgogICAgICAqIEluZm9ybXMgV2ViVmlldyBvZiB0aGUgbmV0d29yayBzdGF0ZS4gVGhpcyBpcyB1c2VkIHRvIHNldAogICAgICAqIHRoZSBKYXZhU2NyaXB0IHByb3BlcnR5IHdpbmRvdy5uYXZpZ2F0b3IuaXNPbmxpbmUgYW5kCiAgICAgICogZ2VuZXJhdGVzIHRoZSBvbmxpbmUvb2ZmbGluZSBldmVudCBhcyBzcGVjaWZpZWQgaW4gSFRNTDUsIHNlYy4gNS43LjcKQEAgLTc4MSw3ICs4MjAsMTUgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBsb2FkVXJsKFN0cmluZyB1cmwsIE1hcDxTdHJpbmcsIFN0cmluZz4gYWRkaXRpb25hbEh0dHBIZWFkZXJzKSB7CiAgICAgICAgIGNoZWNrVGhyZWFkKCk7Ci0gICAgICAgIGlmIChEZWJ1Z0ZsYWdzLlRSQUNFX0FQSSkgTG9nLmQoTE9HVEFHLCAibG9hZFVybChleHRyYSBoZWFkZXJzKT0iICsgdXJsKTsKKyAgICAgICAgaWYgKERlYnVnRmxhZ3MuVFJBQ0VfQVBJKSB7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGhlYWRlcnMgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICAgICAgaWYgKGFkZGl0aW9uYWxIdHRwSGVhZGVycyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IGVudHJ5IDogYWRkaXRpb25hbEh0dHBIZWFkZXJzLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQoZW50cnkuZ2V0S2V5KCkgKyAiOiIgKyBlbnRyeS5nZXRWYWx1ZSgpICsgIlxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgTG9nLmQoTE9HVEFHLCAibG9hZFVybChleHRyYSBoZWFkZXJzKT0iICsgdXJsICsgIlxuIiArIGhlYWRlcnMpOworICAgICAgICB9CiAgICAgICAgIG1Qcm92aWRlci5sb2FkVXJsKHVybCwgYWRkaXRpb25hbEh0dHBIZWFkZXJzKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3RmFjdG9yeS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdGYWN0b3J5LmphdmEKaW5kZXggYjkxMzFiZi4uMjViY2Q0NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdGYWN0b3J5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdGYWN0b3J5LmphdmEKQEAgLTE2LDkgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLndlYmtpdDsKIAotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5TdHJpY3RNb2RlOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQW5kcm9pZFJ1bnRpbWVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdGYWN0b3J5UHJvdmlkZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3RmFjdG9yeVByb3ZpZGVyLmphdmEKaW5kZXggOWQ5ZDg4Mi4uZTM5MWFhZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdGYWN0b3J5UHJvdmlkZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViVmlld0ZhY3RvcnlQcm92aWRlci5qYXZhCkBAIC01MCw2ICs1MCwxMSBAQAogICAgICAgICBTdHJpbmcgZ2V0RGVmYXVsdFVzZXJBZ2VudChDb250ZXh0IGNvbnRleHQpOwogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBVc2VkIGZvciB0ZXN0cyBvbmx5LgorICAgICAgICAgKi8KKyAgICAgICAgIHZvaWQgZnJlZU1lbW9yeUZvclRlc3RzKCk7CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIEltcGxlbWVudHMgdGhlIEFQSSBtZXRob2Q6CiAgICAgICAgICAqIHtAbGluayBhbmRyb2lkLndlYmtpdC5XZWJWaWV3I3NldFdlYkNvbnRlbnRzRGVidWdnaW5nRW5hYmxlZChib29sZWFuKSB9CiAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic0xpc3RWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXcuamF2YQppbmRleCAxODk5YTFkLi5lOTEwN2Q2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXcuamF2YQpAQCAtMzYsNiArMzYsNyBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9uZ1NwYXJzZUFycmF5OworaW1wb3J0IGFuZHJvaWQudXRpbC5NYXRoVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VCb29sZWFuQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlN0YXRlU2V0OwpAQCAtNTUsMTAgKzU2LDEzIEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdEZWJ1ZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3UGFyZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Um9vdEltcGw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdUcmVlT2JzZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFjY2VsZXJhdGVEZWNlbGVyYXRlSW50ZXJwb2xhdG9yOworaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5JbnRlcnBvbGF0b3I7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5MaW5lYXJJbnRlcnBvbGF0b3I7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLkJhc2VJbnB1dENvbm5lY3Rpb247CkBAIC00MTcsNyArNDIxLDcgQEAKICAgICAvKioKICAgICAgKiBIYW5kbGVzIHNjcm9sbGluZyBiZXR3ZWVuIHBvc2l0aW9ucyB3aXRoaW4gdGhlIGxpc3QuCiAgICAgICovCi0gICAgUG9zaXRpb25TY3JvbGxlciBtUG9zaXRpb25TY3JvbGxlcjsKKyAgICBTdWJQb3NpdGlvblNjcm9sbGVyIG1Qb3NpdGlvblNjcm9sbGVyOwogCiAgICAgLyoqCiAgICAgICogVGhlIG9mZnNldCBpbiBwaXhlbHMgZm9ybSB0aGUgdG9wIG9mIHRoZSBBZGFwdGVyVmlldyB0byB0aGUgdG9wCkBAIC01ODEsNyArNTg1LDEzIEBACiAgICAgLyoqCiAgICAgICogSGVscGVyIG9iamVjdCB0aGF0IHJlbmRlcnMgYW5kIGNvbnRyb2xzIHRoZSBmYXN0IHNjcm9sbCB0aHVtYi4KICAgICAgKi8KLSAgICBwcml2YXRlIEZhc3RTY3JvbGxlciBtRmFzdFNjcm9sbGVyOworICAgIHByaXZhdGUgRmFzdFNjcm9sbGVyIG1GYXN0U2Nyb2xsOworCisgICAgLyoqCisgICAgICogVGVtcG9yYXJ5IGhvbGRlciBmb3IgZmFzdCBzY3JvbGxlciBzdHlsZSB1bnRpbCBhIEZhc3RTY3JvbGxlciBvYmplY3QKKyAgICAgKiBpcyBjcmVhdGVkLgorICAgICAqLworICAgIHByaXZhdGUgaW50IG1GYXN0U2Nyb2xsU3R5bGU7CiAKICAgICBwcml2YXRlIGJvb2xlYW4gbUdsb2JhbExheW91dExpc3RlbmVyQWRkZWRGaWx0ZXI7CiAKQEAgLTc3MywxNCArNzgzLDE4IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5hYnNMaXN0Vmlld1N0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgQWJzTGlzdFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBBYnNMaXN0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBBYnNMaXN0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgaW5pdEFic0xpc3RWaWV3KCk7CiAKICAgICAgICAgbU93bmVyVGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQWJzTGlzdFZpZXcsIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BYnNMaXN0VmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgRHJhd2FibGUgZCA9IGEuZ2V0RHJhd2FibGUoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQWJzTGlzdFZpZXdfbGlzdFNlbGVjdG9yKTsKICAgICAgICAgaWYgKGQgIT0gbnVsbCkgewpAQCAtODA5LDYgKzgyMyw5IEBACiAgICAgICAgIGJvb2xlYW4gZW5hYmxlRmFzdFNjcm9sbCA9IGEuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5BYnNMaXN0Vmlld19mYXN0U2Nyb2xsRW5hYmxlZCwgZmFsc2UpOwogICAgICAgICBzZXRGYXN0U2Nyb2xsRW5hYmxlZChlbmFibGVGYXN0U2Nyb2xsKTsKIAorICAgICAgICBpbnQgZmFzdFNjcm9sbFN0eWxlID0gYS5nZXRSZXNvdXJjZUlkKFIuc3R5bGVhYmxlLkFic0xpc3RWaWV3X2Zhc3RTY3JvbGxTdHlsZSwgMCk7CisgICAgICAgIHNldEZhc3RTY3JvbGxTdHlsZShmYXN0U2Nyb2xsU3R5bGUpOworCiAgICAgICAgIGJvb2xlYW4gc21vb3RoU2Nyb2xsYmFyID0gYS5nZXRCb29sZWFuKFIuc3R5bGVhYmxlLkFic0xpc3RWaWV3X3Ntb290aFNjcm9sbGJhciwgdHJ1ZSk7CiAgICAgICAgIHNldFNtb290aFNjcm9sbGJhckVuYWJsZWQoc21vb3RoU2Nyb2xsYmFyKTsKIApAQCAtMTIzOCwxNyArMTI1NSwzMSBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzZXRGYXN0U2Nyb2xsZXJFbmFibGVkVWlUaHJlYWQoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgIGlmIChtRmFzdFNjcm9sbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1GYXN0U2Nyb2xsZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgaWYgKG1GYXN0U2Nyb2xsICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1GYXN0U2Nyb2xsLnNldEVuYWJsZWQoZW5hYmxlZCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZW5hYmxlZCkgewotICAgICAgICAgICAgbUZhc3RTY3JvbGxlciA9IG5ldyBGYXN0U2Nyb2xsZXIodGhpcyk7Ci0gICAgICAgICAgICBtRmFzdFNjcm9sbGVyLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICBtRmFzdFNjcm9sbCA9IG5ldyBGYXN0U2Nyb2xsZXIodGhpcywgbUZhc3RTY3JvbGxTdHlsZSk7CisgICAgICAgICAgICBtRmFzdFNjcm9sbC5zZXRFbmFibGVkKHRydWUpOwogICAgICAgICB9CiAKICAgICAgICAgcmVzb2x2ZVBhZGRpbmcoKTsKIAotICAgICAgICBpZiAobUZhc3RTY3JvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmFzdFNjcm9sbGVyLnVwZGF0ZUxheW91dCgpOworICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCkgeworICAgICAgICAgICAgbUZhc3RTY3JvbGwudXBkYXRlTGF5b3V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhlIHN0eWxlIG9mIHRoZSBmYXN0IHNjcm9sbGVyIGRlY29yYXRpb25zLgorICAgICAqCisgICAgICogQHBhcmFtIHN0eWxlUmVzSWQgc3R5bGUgcmVzb3VyY2UgY29udGFpbmluZyBmYXN0IHNjcm9sbGVyIHByb3BlcnRpZXMKKyAgICAgKiBAc2VlIGFuZHJvaWQuUi5zdHlsZWFibGUjRmFzdFNjcm9sbAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEZhc3RTY3JvbGxTdHlsZShpbnQgc3R5bGVSZXNJZCkgeworICAgICAgICBpZiAobUZhc3RTY3JvbGwgPT0gbnVsbCkgeworICAgICAgICAgICAgbUZhc3RTY3JvbGxTdHlsZSA9IHN0eWxlUmVzSWQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtRmFzdFNjcm9sbC5zZXRTdHlsZShzdHlsZVJlc0lkKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTI4OCw4ICsxMzE5LDggQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2V0RmFzdFNjcm9sbGVyQWx3YXlzVmlzaWJsZVVpVGhyZWFkKGJvb2xlYW4gYWx3YXlzU2hvdykgewotICAgICAgICBpZiAobUZhc3RTY3JvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmFzdFNjcm9sbGVyLnNldEFsd2F5c1Nob3coYWx3YXlzU2hvdyk7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCAhPSBudWxsKSB7CisgICAgICAgICAgICBtRmFzdFNjcm9sbC5zZXRBbHdheXNTaG93KGFsd2F5c1Nob3cpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzA3LDE3ICsxMzM4LDE3IEBACiAgICAgICogQHNlZSAjc2V0RmFzdFNjcm9sbEFsd2F5c1Zpc2libGUoYm9vbGVhbikKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Zhc3RTY3JvbGxBbHdheXNWaXNpYmxlKCkgewotICAgICAgICBpZiAobUZhc3RTY3JvbGxlciA9PSBudWxsKSB7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbUZhc3RTY3JvbGxFbmFibGVkICYmIG1GYXN0U2Nyb2xsQWx3YXlzVmlzaWJsZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBtRmFzdFNjcm9sbGVyLmlzRW5hYmxlZCgpICYmIG1GYXN0U2Nyb2xsZXIuaXNBbHdheXNTaG93RW5hYmxlZCgpOworICAgICAgICAgICAgcmV0dXJuIG1GYXN0U2Nyb2xsLmlzRW5hYmxlZCgpICYmIG1GYXN0U2Nyb2xsLmlzQWx3YXlzU2hvd0VuYWJsZWQoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0VmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIHsKLSAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgIT0gbnVsbCAmJiBtRmFzdFNjcm9sbGVyLmlzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoc3VwZXIuZ2V0VmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCBtRmFzdFNjcm9sbGVyLmdldFdpZHRoKCkpOworICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCAmJiBtRmFzdFNjcm9sbC5pc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHN1cGVyLmdldFZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgbUZhc3RTY3JvbGwuZ2V0V2lkdGgoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKICAgICB9CkBAIC0xMzMwLDI2ICsxMzYxLDI2IEBACiAgICAgICovCiAgICAgQFZpZXdEZWJ1Zy5FeHBvcnRlZFByb3BlcnR5CiAgICAgcHVibGljIGJvb2xlYW4gaXNGYXN0U2Nyb2xsRW5hYmxlZCgpIHsKLSAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgPT0gbnVsbCkgeworICAgICAgICBpZiAobUZhc3RTY3JvbGwgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG1GYXN0U2Nyb2xsRW5hYmxlZDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBtRmFzdFNjcm9sbGVyLmlzRW5hYmxlZCgpOworICAgICAgICAgICAgcmV0dXJuIG1GYXN0U2Nyb2xsLmlzRW5hYmxlZCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0VmVydGljYWxTY3JvbGxiYXJQb3NpdGlvbihpbnQgcG9zaXRpb24pIHsKICAgICAgICAgc3VwZXIuc2V0VmVydGljYWxTY3JvbGxiYXJQb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgIGlmIChtRmFzdFNjcm9sbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1GYXN0U2Nyb2xsZXIuc2V0U2Nyb2xsYmFyUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCkgeworICAgICAgICAgICAgbUZhc3RTY3JvbGwuc2V0U2Nyb2xsYmFyUG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0U2Nyb2xsQmFyU3R5bGUoaW50IHN0eWxlKSB7CiAgICAgICAgIHN1cGVyLnNldFNjcm9sbEJhclN0eWxlKHN0eWxlKTsKLSAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbUZhc3RTY3JvbGxlci5zZXRTY3JvbGxCYXJTdHlsZShzdHlsZSk7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCAhPSBudWxsKSB7CisgICAgICAgICAgICBtRmFzdFNjcm9sbC5zZXRTY3JvbGxCYXJTdHlsZShzdHlsZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE0MTAsOCArMTQ0MSw4IEBACiAgICAgICogTm90aWZ5IG91ciBzY3JvbGwgbGlzdGVuZXIgKGlmIHRoZXJlIGlzIG9uZSkgb2YgYSBjaGFuZ2UgaW4gc2Nyb2xsIHN0YXRlCiAgICAgICovCiAgICAgdm9pZCBpbnZva2VPbkl0ZW1TY3JvbGxMaXN0ZW5lcigpIHsKLSAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbUZhc3RTY3JvbGxlci5vblNjcm9sbChtRmlyc3RQb3NpdGlvbiwgZ2V0Q2hpbGRDb3VudCgpLCBtSXRlbUNvdW50KTsKKyAgICAgICAgaWYgKG1GYXN0U2Nyb2xsICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1GYXN0U2Nyb2xsLm9uU2Nyb2xsKG1GaXJzdFBvc2l0aW9uLCBnZXRDaGlsZENvdW50KCksIG1JdGVtQ291bnQpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtT25TY3JvbGxMaXN0ZW5lciAhPSBudWxsKSB7CiAgICAgICAgICAgICBtT25TY3JvbGxMaXN0ZW5lci5vblNjcm9sbCh0aGlzLCBtRmlyc3RQb3NpdGlvbiwgZ2V0Q2hpbGRDb3VudCgpLCBtSXRlbUNvdW50KTsKQEAgLTIwNzYsMTYgKzIxMDcsMTcgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFuIGNoYW5nZWQsIGludCBsLCBpbnQgdCwgaW50IHIsIGludCBiKSB7CiAgICAgICAgIHN1cGVyLm9uTGF5b3V0KGNoYW5nZWQsIGwsIHQsIHIsIGIpOwogICAgICAgICBtSW5MYXlvdXQgPSB0cnVlOworICAgICAgICBmaW5hbCBpbnQgY2hpbGRDb3VudCA9IGdldENoaWxkQ291bnQoKTsKICAgICAgICAgaWYgKGNoYW5nZWQpIHsKLSAgICAgICAgICAgIGludCBjaGlsZENvdW50ID0gZ2V0Q2hpbGRDb3VudCgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICBnZXRDaGlsZEF0KGkpLmZvcmNlTGF5b3V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtUmVjeWNsZXIubWFya0NoaWxkcmVuRGlydHkoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtRmFzdFNjcm9sbGVyICE9IG51bGwgJiYgKG1JdGVtQ291bnQgIT0gbU9sZEl0ZW1Db3VudCB8fCBtRGF0YUNoYW5nZWQpKSB7Ci0gICAgICAgICAgICBtRmFzdFNjcm9sbGVyLm9uSXRlbUNvdW50Q2hhbmdlZChtSXRlbUNvdW50KTsKKyAgICAgICAgLy8gVE9ETzogTW92ZSBzb21ld2hlcmUgc2FuZS4gVGhpcyBkb2Vzbid0IGJlbG9uZyBpbiBvbkxheW91dCgpLgorICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCkgeworICAgICAgICAgICAgbUZhc3RTY3JvbGwub25JdGVtQ291bnRDaGFuZ2VkKGNoaWxkQ291bnQsIG1JdGVtQ291bnQpOwogICAgICAgICB9CiAKICAgICAgICAgbGF5b3V0Q2hpbGRyZW4oKTsKQEAgLTIxMjAsNiArMjE1MiwzNCBAQAogICAgIHByb3RlY3RlZCB2b2lkIGxheW91dENoaWxkcmVuKCkgewogICAgIH0KIAorICAgIC8qKgorICAgICAqIEByZXR1cm4gdGhlIGRpcmVjdCBjaGlsZCB0aGF0IGNvbnRhaW5zIGFjY2Vzc2liaWxpdHkgZm9jdXMsIG9yIG51bGwgaWYgbm8KKyAgICAgKiAgICAgICAgIGNoaWxkIGNvbnRhaW5zIGFjY2Vzc2liaWxpdHkgZm9jdXMKKyAgICAgKi8KKyAgICBWaWV3IGdldEFjY2Vzc2liaWxpdHlGb2N1c2VkQ2hpbGQoKSB7CisgICAgICAgIGZpbmFsIFZpZXdSb290SW1wbCB2aWV3Um9vdEltcGwgPSBnZXRWaWV3Um9vdEltcGwoKTsKKyAgICAgICAgaWYgKHZpZXdSb290SW1wbCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIFZpZXcgZm9jdXNlZFZpZXcgPSB2aWV3Um9vdEltcGwuZ2V0QWNjZXNzaWJpbGl0eUZvY3VzZWRIb3N0KCk7CisgICAgICAgIGlmIChmb2N1c2VkVmlldyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIFZpZXdQYXJlbnQgdmlld1BhcmVudCA9IGZvY3VzZWRWaWV3LmdldFBhcmVudCgpOworICAgICAgICB3aGlsZSAoKHZpZXdQYXJlbnQgaW5zdGFuY2VvZiBWaWV3KSAmJiAodmlld1BhcmVudCAhPSB0aGlzKSkgeworICAgICAgICAgICAgZm9jdXNlZFZpZXcgPSAoVmlldykgdmlld1BhcmVudDsKKyAgICAgICAgICAgIHZpZXdQYXJlbnQgPSB2aWV3UGFyZW50LmdldFBhcmVudCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEodmlld1BhcmVudCBpbnN0YW5jZW9mIFZpZXcpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmb2N1c2VkVmlldzsKKyAgICB9CisKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZGljYXRvcnMoKSB7CiAgICAgICAgIGlmIChtU2Nyb2xsVXAgIT0gbnVsbCkgewogICAgICAgICAgICAgYm9vbGVhbiBjYW5TY3JvbGxVcDsKQEAgLTIyMjgsMjYgKzIyODgsMjggQEAKICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfVklFVywgIm9idGFpblZpZXciKTsKIAogICAgICAgICBpc1NjcmFwWzBdID0gZmFsc2U7Ci0gICAgICAgIFZpZXcgc2NyYXBWaWV3OwogCi0gICAgICAgIHNjcmFwVmlldyA9IG1SZWN5Y2xlci5nZXRUcmFuc2llbnRTdGF0ZVZpZXcocG9zaXRpb24pOwotICAgICAgICBpZiAoc2NyYXBWaWV3ID09IG51bGwpIHsKLSAgICAgICAgICAgIHNjcmFwVmlldyA9IG1SZWN5Y2xlci5nZXRTY3JhcFZpZXcocG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgVmlldyBjaGlsZDsKLSAgICAgICAgaWYgKHNjcmFwVmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjaGlsZCA9IG1BZGFwdGVyLmdldFZpZXcocG9zaXRpb24sIHNjcmFwVmlldywgdGhpcyk7Ci0KLSAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KCkgPT0gSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX0FVVE8pIHsKLSAgICAgICAgICAgICAgICBjaGlsZC5zZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KElNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9ZRVMpOworICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIGhhdmUgYSB0cmFuc2llbnQgc3RhdGUgdmlldy4gQXR0ZW1wdCB0byByZS1iaW5kIHRoZQorICAgICAgICAvLyBkYXRhIGFuZCBkaXNjYXJkIHRoZSB2aWV3IGlmIHdlIGZhaWwuCisgICAgICAgIGZpbmFsIFZpZXcgdHJhbnNpZW50VmlldyA9IG1SZWN5Y2xlci5nZXRUcmFuc2llbnRTdGF0ZVZpZXcocG9zaXRpb24pOworICAgICAgICBpZiAodHJhbnNpZW50VmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBWaWV3IHVwZGF0ZWRWaWV3ID0gbUFkYXB0ZXIuZ2V0Vmlldyhwb3NpdGlvbiwgdHJhbnNpZW50VmlldywgdGhpcyk7CisgICAgICAgICAgICBpZiAodXBkYXRlZFZpZXcgIT0gdHJhbnNpZW50VmlldykgeworICAgICAgICAgICAgICAgIC8vIEZhaWxlZCB0byByZS1iaW5kIHRoZSBkYXRhLCBzY3JhcCB0aGUgb2J0YWluZWQgdmlldy4KKyAgICAgICAgICAgICAgICBtUmVjeWNsZXIuYWRkU2NyYXBWaWV3KHVwZGF0ZWRWaWV3LCBwb3NpdGlvbik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIFNjcmFwIHZpZXcgaW1wbGllcyB0ZW1wb3JhcnkgZGV0YWNobWVudC4KKyAgICAgICAgICAgIGlzU2NyYXBbMF0gPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHRyYW5zaWVudFZpZXc7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBWaWV3IHNjcmFwVmlldyA9IG1SZWN5Y2xlci5nZXRTY3JhcFZpZXcocG9zaXRpb24pOworICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gbUFkYXB0ZXIuZ2V0Vmlldyhwb3NpdGlvbiwgc2NyYXBWaWV3LCB0aGlzKTsKKyAgICAgICAgaWYgKHNjcmFwVmlldyAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQgIT0gc2NyYXBWaWV3KSB7CisgICAgICAgICAgICAgICAgLy8gRmFpbGVkIHRvIHJlLWJpbmQgdGhlIGRhdGEsIHJldHVybiBzY3JhcCB0byB0aGUgaGVhcC4KICAgICAgICAgICAgICAgICBtUmVjeWNsZXIuYWRkU2NyYXBWaWV3KHNjcmFwVmlldywgcG9zaXRpb24pOwotICAgICAgICAgICAgICAgIGlmIChtQ2FjaGVDb2xvckhpbnQgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjaGlsZC5zZXREcmF3aW5nQ2FjaGVCYWNrZ3JvdW5kQ29sb3IobUNhY2hlQ29sb3JIaW50KTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlzU2NyYXBbMF0gPSB0cnVlOwogCkBAIC0yMjU5LDE2ICsyMzIxLDE0IEBACiAKICAgICAgICAgICAgICAgICBjaGlsZC5kaXNwYXRjaEZpbmlzaFRlbXBvcmFyeURldGFjaCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2hpbGQgPSBtQWRhcHRlci5nZXRWaWV3KHBvc2l0aW9uLCBudWxsLCB0aGlzKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSgpID09IElNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9BVVRPKSB7Ci0gICAgICAgICAgICAgICAgY2hpbGQuc2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eShJTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfWUVTKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKG1DYWNoZUNvbG9ySGludCAhPSAwKSB7CisgICAgICAgICAgICBjaGlsZC5zZXREcmF3aW5nQ2FjaGVCYWNrZ3JvdW5kQ29sb3IobUNhY2hlQ29sb3JIaW50KTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAobUNhY2hlQ29sb3JIaW50ICE9IDApIHsKLSAgICAgICAgICAgICAgICBjaGlsZC5zZXREcmF3aW5nQ2FjaGVCYWNrZ3JvdW5kQ29sb3IobUNhY2hlQ29sb3JIaW50KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGNoaWxkLmdldEltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoKSA9PSBJTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfQVVUTykgeworICAgICAgICAgICAgY2hpbGQuc2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eShJTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfWUVTKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtQWRhcHRlckhhc1N0YWJsZUlkcykgewpAQCAtMjQ5OSw4ICsyNTU5LDggQEAKICAgICAgICAgICAgIHJlbWVtYmVyU3luY1N0YXRlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobUZhc3RTY3JvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmFzdFNjcm9sbGVyLm9uU2l6ZUNoYW5nZWQodywgaCwgb2xkdywgb2xkaCk7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCAhPSBudWxsKSB7CisgICAgICAgICAgICBtRmFzdFNjcm9sbC5vblNpemVDaGFuZ2VkKHcsIGgsIG9sZHcsIG9sZGgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yODI5LDggKzI4ODksOCBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uUnRsUHJvcGVydGllc0NoYW5nZWQoaW50IGxheW91dERpcmVjdGlvbikgewogICAgICAgICBzdXBlci5vblJ0bFByb3BlcnRpZXNDaGFuZ2VkKGxheW91dERpcmVjdGlvbik7Ci0gICAgICAgIGlmIChtRmFzdFNjcm9sbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgbUZhc3RTY3JvbGxlci5zZXRTY3JvbGxiYXJQb3NpdGlvbihnZXRWZXJ0aWNhbFNjcm9sbGJhclBvc2l0aW9uKCkpOworICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCkgeworICAgICAgICAgICBtRmFzdFNjcm9sbC5zZXRTY3JvbGxiYXJQb3NpdGlvbihnZXRWZXJ0aWNhbFNjcm9sbGJhclBvc2l0aW9uKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNDAzLDggKzM0NjMsOCBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgYm9vbGVhbiBpbnRlcmNlcHRlZCA9IG1GYXN0U2Nyb2xsZXIub25Ub3VjaEV2ZW50KGV2KTsKKyAgICAgICAgaWYgKG1GYXN0U2Nyb2xsICE9IG51bGwpIHsKKyAgICAgICAgICAgIGJvb2xlYW4gaW50ZXJjZXB0ZWQgPSBtRmFzdFNjcm9sbC5vblRvdWNoRXZlbnQoZXYpOwogICAgICAgICAgICAgaWYgKGludGVyY2VwdGVkKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC0zODkzLDcgKzM5NTMsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gb25JbnRlcmNlcHRIb3ZlckV2ZW50KE1vdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGlmIChtRmFzdFNjcm9sbGVyICE9IG51bGwgJiYgbUZhc3RTY3JvbGxlci5vbkludGVyY2VwdEhvdmVyRXZlbnQoZXZlbnQpKSB7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCAhPSBudWxsICYmIG1GYXN0U2Nyb2xsLm9uSW50ZXJjZXB0SG92ZXJFdmVudChldmVudCkpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTM5MTcsNyArMzk3Nyw3IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobUZhc3RTY3JvbGxlciAhPSBudWxsICYmIG1GYXN0U2Nyb2xsZXIub25JbnRlcmNlcHRUb3VjaEV2ZW50KGV2KSkgeworICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCAmJiBtRmFzdFNjcm9sbC5vbkludGVyY2VwdFRvdWNoRXZlbnQoZXYpKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC00NzgzLDE0ICs0ODQzLDE0IEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc21vb3RoU2Nyb2xsVG9Qb3NpdGlvbihpbnQgcG9zaXRpb24pIHsKICAgICAgICAgaWYgKG1Qb3NpdGlvblNjcm9sbGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIG1Qb3NpdGlvblNjcm9sbGVyID0gbmV3IFBvc2l0aW9uU2Nyb2xsZXIoKTsKKyAgICAgICAgICAgIG1Qb3NpdGlvblNjcm9sbGVyID0gbmV3IFN1YlBvc2l0aW9uU2Nyb2xsZXIoKTsKICAgICAgICAgfQogICAgICAgICBtUG9zaXRpb25TY3JvbGxlci5zdGFydChwb3NpdGlvbik7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogU21vb3RobHkgc2Nyb2xsIHRvIHRoZSBzcGVjaWZpZWQgYWRhcHRlciBwb3NpdGlvbi4gVGhlIHZpZXcgd2lsbCBzY3JvbGwKLSAgICAgKiBzdWNoIHRoYXQgdGhlIGluZGljYXRlZCBwb3NpdGlvbiBpcyBkaXNwbGF5ZWQgPGNvZGU+b2Zmc2V0PC9jb2RlPiBwaXhlbHMgZnJvbQorICAgICAqIHN1Y2ggdGhhdCB0aGUgaW5kaWNhdGVkIHBvc2l0aW9uIGlzIGRpc3BsYXllZCA8Y29kZT5vZmZzZXQ8L2NvZGU+IHBpeGVscyBiZWxvdwogICAgICAqIHRoZSB0b3AgZWRnZSBvZiB0aGUgdmlldy4gSWYgdGhpcyBpcyBpbXBvc3NpYmxlLCAoZS5nLiB0aGUgb2Zmc2V0IHdvdWxkIHNjcm9sbAogICAgICAqIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0gYmV5b25kIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBsaXN0KSBpdCB3aWxsIGdldCBhcyBjbG9zZQogICAgICAqIGFzIHBvc3NpYmxlLiBUaGUgc2Nyb2xsIHdpbGwgdGFrZSA8Y29kZT5kdXJhdGlvbjwvY29kZT4gbWlsbGlzZWNvbmRzIHRvIGNvbXBsZXRlLgpAQCAtNDgwMiwxNCArNDg2MiwxNCBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNtb290aFNjcm9sbFRvUG9zaXRpb25Gcm9tVG9wKGludCBwb3NpdGlvbiwgaW50IG9mZnNldCwgaW50IGR1cmF0aW9uKSB7CiAgICAgICAgIGlmIChtUG9zaXRpb25TY3JvbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtUG9zaXRpb25TY3JvbGxlciA9IG5ldyBQb3NpdGlvblNjcm9sbGVyKCk7CisgICAgICAgICAgICBtUG9zaXRpb25TY3JvbGxlciA9IG5ldyBTdWJQb3NpdGlvblNjcm9sbGVyKCk7CiAgICAgICAgIH0KICAgICAgICAgbVBvc2l0aW9uU2Nyb2xsZXIuc3RhcnRXaXRoT2Zmc2V0KHBvc2l0aW9uLCBvZmZzZXQsIGR1cmF0aW9uKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBTbW9vdGhseSBzY3JvbGwgdG8gdGhlIHNwZWNpZmllZCBhZGFwdGVyIHBvc2l0aW9uLiBUaGUgdmlldyB3aWxsIHNjcm9sbAotICAgICAqIHN1Y2ggdGhhdCB0aGUgaW5kaWNhdGVkIHBvc2l0aW9uIGlzIGRpc3BsYXllZCA8Y29kZT5vZmZzZXQ8L2NvZGU+IHBpeGVscyBmcm9tCisgICAgICogc3VjaCB0aGF0IHRoZSBpbmRpY2F0ZWQgcG9zaXRpb24gaXMgZGlzcGxheWVkIDxjb2RlPm9mZnNldDwvY29kZT4gcGl4ZWxzIGJlbG93CiAgICAgICogdGhlIHRvcCBlZGdlIG9mIHRoZSB2aWV3LiBJZiB0aGlzIGlzIGltcG9zc2libGUsIChlLmcuIHRoZSBvZmZzZXQgd291bGQgc2Nyb2xsCiAgICAgICogdGhlIGZpcnN0IG9yIGxhc3QgaXRlbSBiZXlvbmQgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGxpc3QpIGl0IHdpbGwgZ2V0IGFzIGNsb3NlCiAgICAgICogYXMgcG9zc2libGUuCkBAIC00ODIwLDkgKzQ4ODAsOSBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNtb290aFNjcm9sbFRvUG9zaXRpb25Gcm9tVG9wKGludCBwb3NpdGlvbiwgaW50IG9mZnNldCkgewogICAgICAgICBpZiAobVBvc2l0aW9uU2Nyb2xsZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgbVBvc2l0aW9uU2Nyb2xsZXIgPSBuZXcgUG9zaXRpb25TY3JvbGxlcigpOworICAgICAgICAgICAgbVBvc2l0aW9uU2Nyb2xsZXIgPSBuZXcgU3ViUG9zaXRpb25TY3JvbGxlcigpOwogICAgICAgICB9Ci0gICAgICAgIG1Qb3NpdGlvblNjcm9sbGVyLnN0YXJ0V2l0aE9mZnNldChwb3NpdGlvbiwgb2Zmc2V0KTsKKyAgICAgICAgbVBvc2l0aW9uU2Nyb2xsZXIuc3RhcnRXaXRoT2Zmc2V0KHBvc2l0aW9uLCBvZmZzZXQsIG9mZnNldCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC00ODM2LDcgKzQ4OTYsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNtb290aFNjcm9sbFRvUG9zaXRpb24oaW50IHBvc2l0aW9uLCBpbnQgYm91bmRQb3NpdGlvbikgewogICAgICAgICBpZiAobVBvc2l0aW9uU2Nyb2xsZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgbVBvc2l0aW9uU2Nyb2xsZXIgPSBuZXcgUG9zaXRpb25TY3JvbGxlcigpOworICAgICAgICAgICAgbVBvc2l0aW9uU2Nyb2xsZXIgPSBuZXcgU3ViUG9zaXRpb25TY3JvbGxlcigpOwogICAgICAgICB9CiAgICAgICAgIG1Qb3NpdGlvblNjcm9sbGVyLnN0YXJ0KHBvc2l0aW9uLCBib3VuZFBvc2l0aW9uKTsKICAgICB9CkBAIC02Mjc4LDE2ICs2MzM4LDE2IEBACiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZWQoKSB7CiAgICAgICAgICAgICBzdXBlci5vbkNoYW5nZWQoKTsKLSAgICAgICAgICAgIGlmIChtRmFzdFNjcm9sbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtRmFzdFNjcm9sbGVyLm9uU2VjdGlvbnNDaGFuZ2VkKCk7CisgICAgICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1GYXN0U2Nyb2xsLm9uU2VjdGlvbnNDaGFuZ2VkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25JbnZhbGlkYXRlZCgpIHsKICAgICAgICAgICAgIHN1cGVyLm9uSW52YWxpZGF0ZWQoKTsKLSAgICAgICAgICAgIGlmIChtRmFzdFNjcm9sbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtRmFzdFNjcm9sbGVyLm9uU2VjdGlvbnNDaGFuZ2VkKCk7CisgICAgICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1GYXN0U2Nyb2xsLm9uU2VjdGlvbnNDaGFuZ2VkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02NTYyLDEyICs2NjIyLDggQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtVHJhbnNpZW50U3RhdGVWaWV3cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVRyYW5zaWVudFN0YXRlVmlld3MuY2xlYXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtVHJhbnNpZW50U3RhdGVWaWV3c0J5SWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1UcmFuc2llbnRTdGF0ZVZpZXdzQnlJZC5jbGVhcigpOwotICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjbGVhclRyYW5zaWVudFN0YXRlVmlld3MoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qKgpAQCAtNjYzNCwxNCArNjY5MCwyNiBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIER1bXAgYW55IGN1cnJlbnRseSBzYXZlZCB2aWV3cyB3aXRoIHRyYW5zaWVudCBzdGF0ZS4KKyAgICAgICAgICogRHVtcHMgYW5kIGZ1bGx5IGRldGFjaGVzIGFueSBjdXJyZW50bHkgc2F2ZWQgdmlld3Mgd2l0aCB0cmFuc2llbnQKKyAgICAgICAgICogc3RhdGUuCiAgICAgICAgICAqLwogICAgICAgICB2b2lkIGNsZWFyVHJhbnNpZW50U3RhdGVWaWV3cygpIHsKLSAgICAgICAgICAgIGlmIChtVHJhbnNpZW50U3RhdGVWaWV3cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVRyYW5zaWVudFN0YXRlVmlld3MuY2xlYXIoKTsKKyAgICAgICAgICAgIGZpbmFsIFNwYXJzZUFycmF5PFZpZXc+IHZpZXdzQnlQb3MgPSBtVHJhbnNpZW50U3RhdGVWaWV3czsKKyAgICAgICAgICAgIGlmICh2aWV3c0J5UG9zICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IHZpZXdzQnlQb3Muc2l6ZSgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZURldGFjaGVkVmlldyh2aWV3c0J5UG9zLnZhbHVlQXQoaSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmlld3NCeVBvcy5jbGVhcigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1UcmFuc2llbnRTdGF0ZVZpZXdzQnlJZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVRyYW5zaWVudFN0YXRlVmlld3NCeUlkLmNsZWFyKCk7CisKKyAgICAgICAgICAgIGZpbmFsIExvbmdTcGFyc2VBcnJheTxWaWV3PiB2aWV3c0J5SWQgPSBtVHJhbnNpZW50U3RhdGVWaWV3c0J5SWQ7CisgICAgICAgICAgICBpZiAodmlld3NCeUlkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IHZpZXdzQnlJZC5zaXplKCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRGV0YWNoZWRWaWV3KHZpZXdzQnlJZC52YWx1ZUF0KGkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZpZXdzQnlJZC5jbGVhcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTY3NjYsNDQgKzY4MzQsNDggQEAKICAgICAgICAgICAgICAgICBpZiAodmljdGltICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgQWJzTGlzdFZpZXcuTGF5b3V0UGFyYW1zIGxwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAoQWJzTGlzdFZpZXcuTGF5b3V0UGFyYW1zKSB2aWN0aW0uZ2V0TGF5b3V0UGFyYW1zKCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCB3aGljaFNjcmFwID0gbHAudmlld1R5cGU7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCB3aGljaFNjcmFwID0gbHAudmlld1R5cGU7CiAKICAgICAgICAgICAgICAgICAgICAgYWN0aXZlVmlld3NbaV0gPSBudWxsOwogCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc2NyYXBIYXNUcmFuc2llbnRTdGF0ZSA9IHZpY3RpbS5oYXNUcmFuc2llbnRTdGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFJlY3ljbGVWaWV3VHlwZSh3aGljaFNjcmFwKSB8fCBzY3JhcEhhc1RyYW5zaWVudFN0YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgbW92ZSB2aWV3cyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2hpY2hTY3JhcCAhPSBJVEVNX1ZJRVdfVFlQRV9IRUFERVJfT1JfRk9PVEVSICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmFwSGFzVHJhbnNpZW50U3RhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZpY3RpbS5oYXNUcmFuc2llbnRTdGF0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB2aWV3cyB3aXRoIHRyYW5zaWVudCBzdGF0ZSBmb3IgbGF0ZXIgdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgdmljdGltLmRpc3BhdGNoU3RhcnRUZW1wb3JhcnlEZXRhY2goKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1BZGFwdGVyICE9IG51bGwgJiYgbUFkYXB0ZXJIYXNTdGFibGVJZHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVRyYW5zaWVudFN0YXRlVmlld3NCeUlkID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5zaWVudFN0YXRlVmlld3NCeUlkID0gbmV3IExvbmdTcGFyc2VBcnJheTxWaWV3PigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlkID0gbUFkYXB0ZXIuZ2V0SXRlbUlkKG1GaXJzdEFjdGl2ZVBvc2l0aW9uICsgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5zaWVudFN0YXRlVmlld3NCeUlkLnB1dChpZCwgdmljdGltKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1EYXRhQ2hhbmdlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVHJhbnNpZW50U3RhdGVWaWV3cyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2llbnRTdGF0ZVZpZXdzID0gbmV3IFNwYXJzZUFycmF5PFZpZXc+KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2llbnRTdGF0ZVZpZXdzLnB1dChtRmlyc3RBY3RpdmVQb3NpdGlvbiArIGksIHZpY3RpbSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdoaWNoU2NyYXAgIT0gSVRFTV9WSUVXX1RZUEVfSEVBREVSX09SX0ZPT1RFUikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkYXRhIGhhcyBjaGFuZ2VkLCB3ZSBjYW4ndCBrZWVwIHRoaXMgdmlldy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVEZXRhY2hlZFZpZXcodmljdGltLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NyYXBIYXNUcmFuc2llbnRTdGF0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQWRhcHRlciAhPSBudWxsICYmIG1BZGFwdGVySGFzU3RhYmxlSWRzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVHJhbnNpZW50U3RhdGVWaWV3c0J5SWQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5zaWVudFN0YXRlVmlld3NCeUlkID0gbmV3IExvbmdTcGFyc2VBcnJheTxWaWV3PigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaWQgPSBtQWRhcHRlci5nZXRJdGVtSWQobUZpcnN0QWN0aXZlUG9zaXRpb24gKyBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5zaWVudFN0YXRlVmlld3NCeUlkLnB1dChpZCwgdmljdGltKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVRyYW5zaWVudFN0YXRlVmlld3MgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5zaWVudFN0YXRlVmlld3MgPSBuZXcgU3BhcnNlQXJyYXk8Vmlldz4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNpZW50U3RhdGVWaWV3cy5wdXQobUZpcnN0QWN0aXZlUG9zaXRpb24gKyBpLCB2aWN0aW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2hvdWxkUmVjeWNsZVZpZXdUeXBlKHdoaWNoU2NyYXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIG5vbi1yZWN5Y2xhYmxlIHZpZXdzIGV4Y2VwdCBoZWFkZXJzL2Zvb3RlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2hpY2hTY3JhcCAhPSBJVEVNX1ZJRVdfVFlQRV9IRUFERVJfT1JfRk9PVEVSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRGV0YWNoZWRWaWV3KHZpY3RpbSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIGV2ZXJ5dGhpbmcgZWxzZSBvbiB0aGUgYXBwcm9wcmlhdGUgc2NyYXAgaGVhcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtdWx0aXBsZVNjcmFwcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmFwVmlld3MgPSBtU2NyYXBWaWV3c1t3aGljaFNjcmFwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGlwbGVTY3JhcHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmFwVmlld3MgPSBtU2NyYXBWaWV3c1t3aGljaFNjcmFwXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB2aWN0aW0uZGlzcGF0Y2hTdGFydFRlbXBvcmFyeURldGFjaCgpOwotICAgICAgICAgICAgICAgICAgICBscC5zY3JhcHBlZEZyb21Qb3NpdGlvbiA9IG1GaXJzdEFjdGl2ZVBvc2l0aW9uICsgaTsKLSAgICAgICAgICAgICAgICAgICAgc2NyYXBWaWV3cy5hZGQodmljdGltKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpY3RpbS5kaXNwYXRjaFN0YXJ0VGVtcG9yYXJ5RGV0YWNoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBscC5zY3JhcHBlZEZyb21Qb3NpdGlvbiA9IG1GaXJzdEFjdGl2ZVBvc2l0aW9uICsgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmFwVmlld3MuYWRkKHZpY3RpbSk7CiAKLSAgICAgICAgICAgICAgICAgICAgdmljdGltLnNldEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZShudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0xpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUmVjeWNsZXJMaXN0ZW5lci5vbk1vdmVkVG9TY3JhcEhlYXAodmljdGltKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpY3RpbS5zZXRBY2Nlc3NpYmlsaXR5RGVsZWdhdGUobnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzTGlzdGVuZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVjeWNsZXJMaXN0ZW5lci5vbk1vdmVkVG9TY3JhcEhlYXAodmljdGltKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTY4MTIsOCArNjg4NCwxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIE1ha2VzIHN1cmUgdGhhdCB0aGUgc2l6ZSBvZiBtU2NyYXBWaWV3cyBkb2VzIG5vdCBleGNlZWQgdGhlIHNpemUgb2YgbUFjdGl2ZVZpZXdzLgotICAgICAgICAgKiAoVGhpcyBjYW4gaGFwcGVuIGlmIGFuIGFkYXB0ZXIgZG9lcyBub3QgcmVjeWNsZSBpdHMgdmlld3MpLgorICAgICAgICAgKiBNYWtlcyBzdXJlIHRoYXQgdGhlIHNpemUgb2YgbVNjcmFwVmlld3MgZG9lcyBub3QgZXhjZWVkIHRoZSBzaXplIG9mCisgICAgICAgICAqIG1BY3RpdmVWaWV3cywgd2hpY2ggY2FuIGhhcHBlbiBpZiBhbiBhZGFwdGVyIGRvZXMgbm90IHJlY3ljbGUgaXRzCisgICAgICAgICAqIHZpZXdzLiBSZW1vdmVzIGNhY2hlZCB0cmFuc2llbnQgc3RhdGUgdmlld3MgdGhhdCBubyBsb25nZXIgaGF2ZQorICAgICAgICAgKiB0cmFuc2llbnQgc3RhdGUuCiAgICAgICAgICAqLwogICAgICAgICBwcml2YXRlIHZvaWQgcHJ1bmVTY3JhcFZpZXdzKCkgewogICAgICAgICAgICAgZmluYWwgaW50IG1heFZpZXdzID0gbUFjdGl2ZVZpZXdzLmxlbmd0aDsKQEAgLTY4MjksMjAgKzY5MDMsMjUgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtVHJhbnNpZW50U3RhdGVWaWV3cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtVHJhbnNpZW50U3RhdGVWaWV3cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IHYgPSBtVHJhbnNpZW50U3RhdGVWaWV3cy52YWx1ZUF0KGkpOworICAgICAgICAgICAgZmluYWwgU3BhcnNlQXJyYXk8Vmlldz4gdHJhbnNWaWV3c0J5UG9zID0gbVRyYW5zaWVudFN0YXRlVmlld3M7CisgICAgICAgICAgICBpZiAodHJhbnNWaWV3c0J5UG9zICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRyYW5zVmlld3NCeVBvcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IHYgPSB0cmFuc1ZpZXdzQnlQb3MudmFsdWVBdChpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF2Lmhhc1RyYW5zaWVudFN0YXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2llbnRTdGF0ZVZpZXdzLnJlbW92ZUF0KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRGV0YWNoZWRWaWV3KHYsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zVmlld3NCeVBvcy5yZW1vdmVBdChpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGktLTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtVHJhbnNpZW50U3RhdGVWaWV3c0J5SWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVRyYW5zaWVudFN0YXRlVmlld3NCeUlkLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgdiA9IG1UcmFuc2llbnRTdGF0ZVZpZXdzQnlJZC52YWx1ZUF0KGkpOworCisgICAgICAgICAgICBmaW5hbCBMb25nU3BhcnNlQXJyYXk8Vmlldz4gdHJhbnNWaWV3c0J5SWQgPSBtVHJhbnNpZW50U3RhdGVWaWV3c0J5SWQ7CisgICAgICAgICAgICBpZiAodHJhbnNWaWV3c0J5SWQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNWaWV3c0J5SWQuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgVmlldyB2ID0gdHJhbnNWaWV3c0J5SWQudmFsdWVBdChpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF2Lmhhc1RyYW5zaWVudFN0YXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2llbnRTdGF0ZVZpZXdzQnlJZC5yZW1vdmVBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZURldGFjaGVkVmlldyh2LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc1ZpZXdzQnlJZC5yZW1vdmVBdChpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGktLTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTY5MTYsNCArNjk5NSwzMTEgQEAKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaGVpZ2h0IG9mIGEgcm93LCB3aGljaCBpcyBjb21wdXRlZCBhcyB0aGUgbWF4aW11bSBoZWlnaHQgb2YKKyAgICAgKiB0aGUgaXRlbXMgaW4gdGhlIHJvdy4KKyAgICAgKgorICAgICAqIEBwYXJhbSByb3cgdGhlIHJvdyBpbmRleAorICAgICAqIEByZXR1cm4gcm93IGhlaWdodCBpbiBwaXhlbHMKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBnZXRIZWlnaHRGb3JSb3coaW50IHJvdykgeworICAgICAgICBmaW5hbCBpbnQgZmlyc3RSb3dQb3NpdGlvbiA9IGdldEZpcnN0UG9zaXRpb25Gb3JSb3cocm93KTsKKyAgICAgICAgZmluYWwgaW50IGxhc3RSb3dQb3NpdGlvbiA9IGdldEZpcnN0UG9zaXRpb25Gb3JSb3cocm93ICsgMSk7CisgICAgICAgIGludCBtYXhIZWlnaHQgPSAwOworICAgICAgICBmb3IgKGludCBpID0gZmlyc3RSb3dQb3NpdGlvbjsgaSA8IGxhc3RSb3dQb3NpdGlvbjsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gZ2V0SGVpZ2h0Rm9yUG9zaXRpb24oaSk7CisgICAgICAgICAgICBpZiAoaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBtYXhIZWlnaHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3IGZvciB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHBvc2l0aW9uIHRoZSBpdGVtIHBvc2l0aW9uCisgICAgICogQHJldHVybiB2aWV3IGhlaWdodCBpbiBwaXhlbHMKKyAgICAgKi8KKyAgICBpbnQgZ2V0SGVpZ2h0Rm9yUG9zaXRpb24oaW50IHBvc2l0aW9uKSB7CisgICAgICAgIGZpbmFsIGludCBmaXJzdFZpc2libGVQb3NpdGlvbiA9IGdldEZpcnN0VmlzaWJsZVBvc2l0aW9uKCk7CisgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gZ2V0Q2hpbGRDb3VudCgpOworICAgICAgICBmaW5hbCBpbnQgaW5kZXggPSBwb3NpdGlvbiAtIGZpcnN0VmlzaWJsZVBvc2l0aW9uOworICAgICAgICBpZiAocG9zaXRpb24gPj0gMCAmJiBwb3NpdGlvbiA8IGNoaWxkQ291bnQpIHsKKyAgICAgICAgICAgIGZpbmFsIFZpZXcgdmlldyA9IGdldENoaWxkQXQoaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIHZpZXcuZ2V0SGVpZ2h0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmaW5hbCBWaWV3IHZpZXcgPSBvYnRhaW5WaWV3KHBvc2l0aW9uLCBtSXNTY3JhcCk7CisgICAgICAgICAgICB2aWV3Lm1lYXN1cmUobVdpZHRoTWVhc3VyZVNwZWMsIE1lYXN1cmVTcGVjLlVOU1BFQ0lGSUVEKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBoZWlnaHQgPSB2aWV3LmdldE1lYXN1cmVkSGVpZ2h0KCk7CisgICAgICAgICAgICBtUmVjeWNsZXIuYWRkU2NyYXBWaWV3KHZpZXcsIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSByb3cgZm9yIHRoZSBzcGVjaWZpZWQgaXRlbSBwb3NpdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgaXRlbSBwb3NpdGlvbgorICAgICAqIEByZXR1cm4gdGhlIHJvdyBpbmRleAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0Um93Rm9yUG9zaXRpb24oaW50IHBvc2l0aW9uKSB7CisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIHBvc2l0aW9uIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJvdy4KKyAgICAgKgorICAgICAqIEBwYXJhbSByb3cgdGhlIHJvdworICAgICAqIEByZXR1cm4gdGhlIGl0ZW0gcG9zaXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEZpcnN0UG9zaXRpb25Gb3JSb3coaW50IHJvdykgeworICAgICAgICByZXR1cm4gcm93OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHNlbGVjdGVkIGl0ZW0gYW5kIHBvc2l0aW9ucyB0aGUgc2VsZWN0aW9uIHkgcGl4ZWxzIGZyb20gdGhlIHRvcCBlZGdlCisgICAgICogb2YgdGhlIExpc3RWaWV3LiAoSWYgaW4gdG91Y2ggbW9kZSwgdGhlIGl0ZW0gd2lsbCBub3QgYmUgc2VsZWN0ZWQgYnV0IGl0IHdpbGwKKyAgICAgKiBzdGlsbCBiZSBwb3NpdGlvbmVkIGFwcHJvcHJpYXRlbHkuKQorICAgICAqCisgICAgICogQHBhcmFtIHBvc2l0aW9uIEluZGV4IChzdGFydGluZyBhdCAwKSBvZiB0aGUgZGF0YSBpdGVtIHRvIGJlIHNlbGVjdGVkLgorICAgICAqIEBwYXJhbSB5IFRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3AgZWRnZSBvZiB0aGUgTGlzdFZpZXcgKHBsdXMgcGFkZGluZykgdGhhdCB0aGUKKyAgICAgKiAgICAgICAgaXRlbSB3aWxsIGJlIHBvc2l0aW9uZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uRnJvbVRvcChpbnQgcG9zaXRpb24sIGludCB5KSB7CisgICAgICAgIGlmIChtQWRhcHRlciA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWlzSW5Ub3VjaE1vZGUoKSkgeworICAgICAgICAgICAgcG9zaXRpb24gPSBsb29rRm9yU2VsZWN0YWJsZVBvc2l0aW9uKHBvc2l0aW9uLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7CisgICAgICAgICAgICAgICAgc2V0TmV4dFNlbGVjdGVkUG9zaXRpb25JbnQocG9zaXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVJlc3VycmVjdFRvUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7CisgICAgICAgICAgICBtTGF5b3V0TW9kZSA9IExBWU9VVF9TUEVDSUZJQzsKKyAgICAgICAgICAgIG1TcGVjaWZpY1RvcCA9IG1MaXN0UGFkZGluZy50b3AgKyB5OworCisgICAgICAgICAgICBpZiAobU5lZWRTeW5jKSB7CisgICAgICAgICAgICAgICAgbVN5bmNQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICAgICAgICAgIG1TeW5jUm93SWQgPSBtQWRhcHRlci5nZXRJdGVtSWQocG9zaXRpb24pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVBvc2l0aW9uU2Nyb2xsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1Qb3NpdGlvblNjcm9sbGVyLnN0b3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcXVlc3RMYXlvdXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFN1YlBvc2l0aW9uU2Nyb2xsZXIgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9TQ1JPTExfRFVSQVRJT04gPSAyMDA7CisKKyAgICAgICAgcHJpdmF0ZSBTdWJTY3JvbGxlciBtU3ViU2Nyb2xsZXI7CisgICAgICAgIHByaXZhdGUgaW50IG1PZmZzZXQ7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNjcm9sbCB0aGUgbWluaW11bSBhbW91bnQgdG8gZ2V0IHRoZSB0YXJnZXQgdmlldyBlbnRpcmVseSBvbi1zY3JlZW4uCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgc2Nyb2xsVG9Qb3NpdGlvbihmaW5hbCBpbnQgdGFyZ2V0UG9zaXRpb24sIGZpbmFsIGJvb2xlYW4gdXNlT2Zmc2V0LAorICAgICAgICAgICAgICAgIGZpbmFsIGludCBvZmZzZXQsIGZpbmFsIGludCBib3VuZFBvc2l0aW9uLCBmaW5hbCBpbnQgZHVyYXRpb24pIHsKKyAgICAgICAgICAgIHN0b3AoKTsKKworICAgICAgICAgICAgaWYgKG1EYXRhQ2hhbmdlZCkgeworICAgICAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgd2UncmUgYmFjayBpbiBhIHN0YWJsZSBzdGF0ZSB0byB0cnkgdGhpcy4KKyAgICAgICAgICAgICAgICBtUG9zaXRpb25TY3JvbGxBZnRlckxheW91dCA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvUG9zaXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFBvc2l0aW9uLCB1c2VPZmZzZXQsIG9mZnNldCwgYm91bmRQb3NpdGlvbiwgZHVyYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmFsIGludCBmaXJzdFBvc2l0aW9uID0gZ2V0Rmlyc3RWaXNpYmxlUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBsYXN0UG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uICsgZ2V0Q2hpbGRDb3VudCgpOworICAgICAgICAgICAgZmluYWwgaW50IHRhcmdldFJvdyA9IGdldFJvd0ZvclBvc2l0aW9uKHRhcmdldFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBmaXJzdFJvdyA9IGdldFJvd0ZvclBvc2l0aW9uKGZpcnN0UG9zaXRpb24pOworICAgICAgICAgICAgZmluYWwgaW50IGxhc3RSb3cgPSBnZXRSb3dGb3JQb3NpdGlvbihsYXN0UG9zaXRpb24pOworICAgICAgICAgICAgaWYgKHVzZU9mZnNldCB8fCB0YXJnZXRSb3cgPD0gZmlyc3RSb3cpIHsKKyAgICAgICAgICAgICAgICBtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRSb3cgPj0gbGFzdFJvdyAtIDEpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbGlzdEhlaWdodCA9IGdldEhlaWdodCgpIC0gZ2V0UGFkZGluZ1RvcCgpIC0gZ2V0UGFkZGluZ0JvdHRvbSgpOworICAgICAgICAgICAgICAgIG1PZmZzZXQgPSBsaXN0SGVpZ2h0IC0gZ2V0SGVpZ2h0Rm9yUG9zaXRpb24odGFyZ2V0UG9zaXRpb24pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBzY3JvbGwsIHRhcmdldCBpcyBlbnRpcmVseSBvbi1zY3JlZW4uCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmbG9hdCBlbmRTdWJSb3cgPSB0YXJnZXRSb3c7CisgICAgICAgICAgICBpZiAoYm91bmRQb3NpdGlvbiAhPSBJTlZBTElEX1BPU0lUSU9OKSB7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGJvdW5kUm93ID0gZ2V0Um93Rm9yUG9zaXRpb24oYm91bmRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKGJvdW5kUm93ID49IGZpcnN0Um93ICYmIGJvdW5kUm93IDwgbGFzdFJvdykgeworICAgICAgICAgICAgICAgICAgICBlbmRTdWJSb3cgPSBjb21wdXRlQm91bmRTdWJSb3codGFyZ2V0Um93LCBib3VuZFJvdyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbCBWaWV3IGZpcnN0Q2hpbGQgPSBnZXRDaGlsZEF0KDApOworICAgICAgICAgICAgZmluYWwgZmxvYXQgc3RhcnRPZmZzZXRSYXRpbyA9IC1maXJzdENoaWxkLmdldFRvcCgpIC8gKGZsb2F0KSBmaXJzdENoaWxkLmdldEhlaWdodCgpOworICAgICAgICAgICAgZmluYWwgZmxvYXQgc3RhcnRTdWJSb3cgPSBmaXJzdFJvdyArIHN0YXJ0T2Zmc2V0UmF0aW87CisgICAgICAgICAgICBpZiAoc3RhcnRTdWJSb3cgPT0gZW5kU3ViUm93ICYmIG1PZmZzZXQgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIERvbid0IHNjcm9sbCwgdGFyZ2V0IGlzIGFscmVhZHkgaW4gcG9zaXRpb24uCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVN1YlNjcm9sbGVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtU3ViU2Nyb2xsZXIgPSBuZXcgU3ViU2Nyb2xsZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TdWJTY3JvbGxlci5zdGFydFNjcm9sbChzdGFydFN1YlJvdywgZW5kU3ViUm93LCBkdXJhdGlvbik7CisKKyAgICAgICAgICAgIHBvc3RPbkFuaW1hdGlvbihtQW5pbWF0aW9uRnJhbWUpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBmbG9hdCBjb21wdXRlQm91bmRTdWJSb3coaW50IHRhcmdldFJvdywgaW50IGJvdW5kUm93KSB7CisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSB0YXJnZXQgYW5kIG9mZnNldCBhcyBhIHN1Yi1wb3NpdGlvbi4KKyAgICAgICAgICAgIGludCByZW1haW5pbmdPZmZzZXQgPSBtT2Zmc2V0OworICAgICAgICAgICAgaW50IHRhcmdldEhlaWdodCA9IGdldEhlaWdodEZvclJvdyh0YXJnZXRSb3cgLSAxKTsKKyAgICAgICAgICAgIHdoaWxlIChyZW1haW5pbmdPZmZzZXQgPiAwKSB7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nT2Zmc2V0IC09IHRhcmdldEhlaWdodDsKKyAgICAgICAgICAgICAgICB0YXJnZXRSb3ctLTsKKyAgICAgICAgICAgICAgICB0YXJnZXRIZWlnaHQgPSBnZXRIZWlnaHRGb3JSb3codGFyZ2V0Um93IC0gMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBmbG9hdCB0YXJnZXRTdWJSb3cgPSB0YXJnZXRSb3cgLSByZW1haW5pbmdPZmZzZXQgLyB0YXJnZXRIZWlnaHQ7CisgICAgICAgICAgICBtT2Zmc2V0ID0gMDsKKworICAgICAgICAgICAgaWYgKHRhcmdldFN1YlJvdyA+PSBib3VuZFJvdykgeworICAgICAgICAgICAgICAgIC8vIEVuZCBwb3NpdGlvbiB3b3VsZCBwdXNoIHRoZSBib3VuZCBwb3NpdGlvbiBhYm92ZSB0aGUgbGlzdC4KKyAgICAgICAgICAgICAgICByZXR1cm4gYm91bmRSb3c7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGNsb3Nlc3QgcG9zc2libGUgc3ViLXBvc2l0aW9uIHRoYXQgd291bGRuJ3QgcHVzaCB0aGUKKyAgICAgICAgICAgIC8vIGJvdW5kIHBvc2l0aW9uJ3MgdmlldyBmdXJ0aGVyIGJlbG93IHRoZSBsaXN0LgorICAgICAgICAgICAgZmluYWwgaW50IGxpc3RIZWlnaHQgPSBnZXRIZWlnaHQoKSAtIGdldFBhZGRpbmdUb3AoKSAtIGdldFBhZGRpbmdCb3R0b20oKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBib3VuZEhlaWdodCA9IGdldEhlaWdodEZvclJvdyhib3VuZFJvdyk7CisgICAgICAgICAgICBpbnQgZW5kUm93ID0gYm91bmRSb3c7CisgICAgICAgICAgICBpbnQgdG90YWxIZWlnaHQgPSBib3VuZEhlaWdodDsKKyAgICAgICAgICAgIGludCBlbmRIZWlnaHQ7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgZW5kUm93LS07CisgICAgICAgICAgICAgICAgZW5kSGVpZ2h0ID0gZ2V0SGVpZ2h0Rm9yUm93KGVuZFJvdyk7CisgICAgICAgICAgICAgICAgdG90YWxIZWlnaHQgKz0gZW5kSGVpZ2h0OworICAgICAgICAgICAgfSB3aGlsZSAodG90YWxIZWlnaHQgPCBsaXN0SGVpZ2h0ICYmIGVuZFJvdyA+IDApOworCisgICAgICAgICAgICBmaW5hbCBmbG9hdCBlbmRPZmZzZXRSYXRpbyA9ICh0b3RhbEhlaWdodCAtIGxpc3RIZWlnaHQpIC8gKGZsb2F0KSBlbmRIZWlnaHQ7CisgICAgICAgICAgICBmaW5hbCBmbG9hdCBib3VuZFN1YlJvdyA9IGVuZFJvdyArIGVuZE9mZnNldFJhdGlvOworICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KGJvdW5kU3ViUm93LCB0YXJnZXRTdWJSb3cpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBwYXJhbSBwb3NpdGlvbgorICAgICAgICAgKiBAcGFyYW0gYm91bmRQb3NpdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgc3RhcnQoaW50IHBvc2l0aW9uLCBpbnQgYm91bmRQb3NpdGlvbikgeworICAgICAgICAgICAgc2Nyb2xsVG9Qb3NpdGlvbihwb3NpdGlvbiwgZmFsc2UsIDAsIGJvdW5kUG9zaXRpb24sIERFRkFVTFRfU0NST0xMX0RVUkFUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBAcGFyYW0gcG9zaXRpb24KKyAgICAgICAgICogQHBhcmFtIG9mZnNldAorICAgICAgICAgKiBAcGFyYW0gZHVyYXRpb24KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0V2l0aE9mZnNldChpbnQgcG9zaXRpb24sIGludCBvZmZzZXQsIGludCBkdXJhdGlvbikgeworICAgICAgICAgICAgc2Nyb2xsVG9Qb3NpdGlvbihwb3NpdGlvbiwgdHJ1ZSwgb2Zmc2V0LCBJTlZBTElEX1BPU0lUSU9OLCBkdXJhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQHBhcmFtIHBvc2l0aW9uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBzdGFydChpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgICAgIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24sIGZhbHNlLCAwLCBJTlZBTElEX1BPU0lUSU9OLCBERUZBVUxUX1NDUk9MTF9EVVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgeworICAgICAgICAgICAgcmVtb3ZlQ2FsbGJhY2tzKG1BbmltYXRpb25GcmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgb25BbmltYXRpb25GcmFtZSgpIHsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc2hvdWxkUG9zdCA9IG1TdWJTY3JvbGxlci5jb21wdXRlUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IHN1YlJvdyA9IG1TdWJTY3JvbGxlci5nZXRQb3NpdGlvbigpOworCisgICAgICAgICAgICBmaW5hbCBpbnQgcm93ID0gKGludCkgc3ViUm93OworICAgICAgICAgICAgZmluYWwgaW50IHBvc2l0aW9uID0gZ2V0Rmlyc3RQb3NpdGlvbkZvclJvdyhyb3cpOworICAgICAgICAgICAgZmluYWwgaW50IHJvd0hlaWdodCA9IGdldEhlaWdodEZvclJvdyhyb3cpOworICAgICAgICAgICAgZmluYWwgaW50IG9mZnNldCA9IChpbnQpIChyb3dIZWlnaHQgKiAoc3ViUm93IC0gcm93KSk7CisgICAgICAgICAgICBmaW5hbCBpbnQgYWRkT2Zmc2V0ID0gKGludCkgKG1PZmZzZXQgKiBtU3ViU2Nyb2xsZXIuZ2V0SW50ZXJwb2xhdGVkVmFsdWUoKSk7CisgICAgICAgICAgICBzZXRTZWxlY3Rpb25Gcm9tVG9wKHBvc2l0aW9uLCAtb2Zmc2V0ICsgYWRkT2Zmc2V0KTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFBvc3QpIHsKKyAgICAgICAgICAgICAgICBwb3N0T25BbmltYXRpb24obUFuaW1hdGlvbkZyYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgUnVubmFibGUgbUFuaW1hdGlvbkZyYW1lID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgb25BbmltYXRpb25GcmFtZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNjcm9sbGVyIGNhcGFibGUgb2YgcmV0dXJuaW5nIGZsb2F0aW5nIHBvaW50IHBvc2l0aW9ucy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTdWJTY3JvbGxlciB7CisgICAgICAgIHByaXZhdGUgZmluYWwgSW50ZXJwb2xhdG9yIG1JbnRlcnBvbGF0b3I7CisKKyAgICAgICAgcHJpdmF0ZSBmbG9hdCBtU3RhcnRQb3NpdGlvbjsKKyAgICAgICAgcHJpdmF0ZSBmbG9hdCBtRW5kUG9zaXRpb247CisgICAgICAgIHByaXZhdGUgbG9uZyBtU3RhcnRUaW1lOworICAgICAgICBwcml2YXRlIGxvbmcgbUR1cmF0aW9uOworCisgICAgICAgIHByaXZhdGUgZmxvYXQgbVBvc2l0aW9uOworICAgICAgICBwcml2YXRlIGZsb2F0IG1JbnRlcnBvbGF0ZWRWYWx1ZTsKKworICAgICAgICBwdWJsaWMgU3ViU2Nyb2xsZXIoKSB7CisgICAgICAgICAgICB0aGlzKG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN1YlNjcm9sbGVyKEludGVycG9sYXRvciBpbnRlcnBvbGF0b3IpIHsKKyAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0b3IgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1JbnRlcnBvbGF0b3IgPSBuZXcgQWNjZWxlcmF0ZURlY2VsZXJhdGVJbnRlcnBvbGF0b3IoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbUludGVycG9sYXRvciA9IGludGVycG9sYXRvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0U2Nyb2xsKGZsb2F0IHN0YXJ0UG9zaXRpb24sIGZsb2F0IGVuZFBvc2l0aW9uLCBpbnQgZHVyYXRpb24pIHsKKyAgICAgICAgICAgIG1TdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgICAgIG1FbmRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uOworICAgICAgICAgICAgbUR1cmF0aW9uID0gZHVyYXRpb247CisKKyAgICAgICAgICAgIG1TdGFydFRpbWUgPSBBbmltYXRpb25VdGlscy5jdXJyZW50QW5pbWF0aW9uVGltZU1pbGxpcygpOworICAgICAgICAgICAgbVBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgICAgIG1JbnRlcnBvbGF0ZWRWYWx1ZSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb21wdXRlUG9zaXRpb24oKSB7CisgICAgICAgICAgICBmaW5hbCBsb25nIGVsYXBzZWQgPSBBbmltYXRpb25VdGlscy5jdXJyZW50QW5pbWF0aW9uVGltZU1pbGxpcygpIC0gbVN0YXJ0VGltZTsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IHZhbHVlID0gTWF0aFV0aWxzLmNvbnN0cmFpbihlbGFwc2VkIC8gKGZsb2F0KSBtRHVyYXRpb24sIDAsIDEpOworCisgICAgICAgICAgICBtSW50ZXJwb2xhdGVkVmFsdWUgPSBtSW50ZXJwb2xhdG9yLmdldEludGVycG9sYXRpb24odmFsdWUpOworICAgICAgICAgICAgbVBvc2l0aW9uID0gKG1FbmRQb3NpdGlvbiAtIG1TdGFydFBvc2l0aW9uKSAqIG1JbnRlcnBvbGF0ZWRWYWx1ZSArIG1TdGFydFBvc2l0aW9uOworCisgICAgICAgICAgICByZXR1cm4gZWxhcHNlZCA8IG1EdXJhdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBmbG9hdCBnZXRQb3NpdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBtUG9zaXRpb247CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgZmxvYXQgZ2V0SW50ZXJwb2xhdGVkVmFsdWUoKSB7CisgICAgICAgICAgICByZXR1cm4gbUludGVycG9sYXRlZFZhbHVlOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic1NlZWtCYXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BYnNTZWVrQmFyLmphdmEKaW5kZXggNzY3NDgzNy4uOTQxY2RkMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic1NlZWtCYXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzU2Vla0Jhci5qYXZhCkBAIC02NSwxMSArNjUsMTUgQEAKICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwogICAgIH0KIAotICAgIHB1YmxpYyBBYnNTZWVrQmFyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgQWJzU2Vla0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU2Vla0JhciwgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBBYnNTZWVrQmFyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU2Vla0JhciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIERyYXdhYmxlIHRodW1iID0gYS5nZXREcmF3YWJsZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TZWVrQmFyX3RodW1iKTsKICAgICAgICAgc2V0VGh1bWIodGh1bWIpOyAvLyB3aWxsIGd1ZXNzIG1UaHVtYk9mZnNldCBpZiB0aHVtYiAhPSBudWxsLi4uCiAgICAgICAgIC8vIC4uLmJ1dCBhbGxvdyBsYXlvdXQgdG8gb3ZlcnJpZGUgdGhpcwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic1NwaW5uZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BYnNTcGlubmVyLmphdmEKaW5kZXggZjI2NTI3Zi4uNmE0YWQ3NSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic1NwaW5uZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzU3Bpbm5lci5qYXZhCkBAIC02NCwxMiArNjQsMTYgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogCi0gICAgcHVibGljIEFic1NwaW5uZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBBYnNTcGlubmVyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEFic1NwaW5uZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIGluaXRBYnNTcGlubmVyKCk7CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkFic1NwaW5uZXIsIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BYnNTcGlubmVyLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBDaGFyU2VxdWVuY2VbXSBlbnRyaWVzID0gYS5nZXRUZXh0QXJyYXkoUi5zdHlsZWFibGUuQWJzU3Bpbm5lcl9lbnRyaWVzKTsKICAgICAgICAgaWYgKGVudHJpZXMgIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic29sdXRlTGF5b3V0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzb2x1dGVMYXlvdXQuamF2YQppbmRleCA3ZGY2YWFiLi40Y2UwZDVkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzb2x1dGVMYXlvdXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzb2x1dGVMYXlvdXQuamF2YQpAQCAtNDAsMTYgKzQwLDE5IEBACiBAUmVtb3RlVmlldwogcHVibGljIGNsYXNzIEFic29sdXRlTGF5b3V0IGV4dGVuZHMgVmlld0dyb3VwIHsKICAgICBwdWJsaWMgQWJzb2x1dGVMYXlvdXQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KIAogICAgIHB1YmxpYyBBYnNvbHV0ZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KIAotICAgIHB1YmxpYyBBYnNvbHV0ZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywKLSAgICAgICAgICAgIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBBYnNvbHV0ZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBBYnNvbHV0ZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BY3Rpb25NZW51UHJlc2VudGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWN0aW9uTWVudVByZXNlbnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDA1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWN0aW9uTWVudVByZXNlbnRlci5qYXZhCkBAIC0wLDAgKzEsNzU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLndpZGdldDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUJvb2xlYW5BcnJheTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuQWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOworaW1wb3J0IGFuZHJvaWQudmlldy5Tb3VuZEVmZmVjdENvbnN0YW50czsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5NZWFzdXJlU3BlYzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0UG9wdXBXaW5kb3cuRm9yd2FyZGluZ0xpc3RlbmVyOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRyYW5zaXRpb24uQWN0aW9uQmFyVHJhbnNpdGlvbjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3LkFjdGlvbkJhclBvbGljeTsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuQWN0aW9uTWVudUl0ZW1WaWV3OworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5CYXNlTWVudVByZXNlbnRlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuTWVudUJ1aWxkZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5tZW51Lk1lbnVJdGVtSW1wbDsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuTWVudVBvcHVwSGVscGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5NZW51VmlldzsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuU3ViTWVudUJ1aWxkZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCisvKioKKyAqIE1lbnVQcmVzZW50ZXIgZm9yIGJ1aWxkaW5nIGFjdGlvbiBtZW51cyBhcyBzZWVuIGluIHRoZSBhY3Rpb24gYmFyIGFuZCBhY3Rpb24gbW9kZXMuCisgKgorICogQGhpZGUKKyAqLworcHVibGljIGNsYXNzIEFjdGlvbk1lbnVQcmVzZW50ZXIgZXh0ZW5kcyBCYXNlTWVudVByZXNlbnRlcgorICAgICAgICBpbXBsZW1lbnRzIEFjdGlvblByb3ZpZGVyLlN1YlVpVmlzaWJpbGl0eUxpc3RlbmVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkFjdGlvbk1lbnVQcmVzZW50ZXIiOworCisgICAgcHJpdmF0ZSBWaWV3IG1PdmVyZmxvd0J1dHRvbjsKKyAgICBwcml2YXRlIGJvb2xlYW4gbVJlc2VydmVPdmVyZmxvdzsKKyAgICBwcml2YXRlIGJvb2xlYW4gbVJlc2VydmVPdmVyZmxvd1NldDsKKyAgICBwcml2YXRlIGludCBtV2lkdGhMaW1pdDsKKyAgICBwcml2YXRlIGludCBtQWN0aW9uSXRlbVdpZHRoTGltaXQ7CisgICAgcHJpdmF0ZSBpbnQgbU1heEl0ZW1zOworICAgIHByaXZhdGUgYm9vbGVhbiBtTWF4SXRlbXNTZXQ7CisgICAgcHJpdmF0ZSBib29sZWFuIG1TdHJpY3RXaWR0aExpbWl0OworICAgIHByaXZhdGUgYm9vbGVhbiBtV2lkdGhMaW1pdFNldDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUV4cGFuZGVkQWN0aW9uVmlld3NFeGNsdXNpdmU7CisKKyAgICBwcml2YXRlIGludCBtTWluQ2VsbFNpemU7CisKKyAgICAvLyBHcm91cCBJRHMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgYXMgYWN0aW9ucyAtIHVzZWQgdGVtcG9yYXJpbHksIGFsbG9jYXRlZCBoZXJlIGZvciByZXVzZS4KKyAgICBwcml2YXRlIGZpbmFsIFNwYXJzZUJvb2xlYW5BcnJheSBtQWN0aW9uQnV0dG9uR3JvdXBzID0gbmV3IFNwYXJzZUJvb2xlYW5BcnJheSgpOworCisgICAgcHJpdmF0ZSBWaWV3IG1TY3JhcEFjdGlvbkJ1dHRvblZpZXc7CisKKyAgICBwcml2YXRlIE92ZXJmbG93UG9wdXAgbU92ZXJmbG93UG9wdXA7CisgICAgcHJpdmF0ZSBBY3Rpb25CdXR0b25TdWJtZW51IG1BY3Rpb25CdXR0b25Qb3B1cDsKKworICAgIHByaXZhdGUgT3Blbk92ZXJmbG93UnVubmFibGUgbVBvc3RlZE9wZW5SdW5uYWJsZTsKKyAgICBwcml2YXRlIEFjdGlvbk1lbnVQb3B1cENhbGxiYWNrIG1Qb3B1cENhbGxiYWNrOworCisgICAgZmluYWwgUG9wdXBQcmVzZW50ZXJDYWxsYmFjayBtUG9wdXBQcmVzZW50ZXJDYWxsYmFjayA9IG5ldyBQb3B1cFByZXNlbnRlckNhbGxiYWNrKCk7CisgICAgaW50IG1PcGVuU3ViTWVudUlkOworCisgICAgcHVibGljIEFjdGlvbk1lbnVQcmVzZW50ZXIoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGNvbS5hbmRyb2lkLmludGVybmFsLlIubGF5b3V0LmFjdGlvbl9tZW51X2xheW91dCwKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmxheW91dC5hY3Rpb25fbWVudV9pdGVtX2xheW91dCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgaW5pdEZvck1lbnUoQ29udGV4dCBjb250ZXh0LCBNZW51QnVpbGRlciBtZW51KSB7CisgICAgICAgIHN1cGVyLmluaXRGb3JNZW51KGNvbnRleHQsIG1lbnUpOworCisgICAgICAgIGZpbmFsIFJlc291cmNlcyByZXMgPSBjb250ZXh0LmdldFJlc291cmNlcygpOworCisgICAgICAgIGZpbmFsIEFjdGlvbkJhclBvbGljeSBhYnAgPSBBY3Rpb25CYXJQb2xpY3kuZ2V0KGNvbnRleHQpOworICAgICAgICBpZiAoIW1SZXNlcnZlT3ZlcmZsb3dTZXQpIHsKKyAgICAgICAgICAgIG1SZXNlcnZlT3ZlcmZsb3cgPSBhYnAuc2hvd3NPdmVyZmxvd01lbnVCdXR0b24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbVdpZHRoTGltaXRTZXQpIHsKKyAgICAgICAgICAgIG1XaWR0aExpbWl0ID0gYWJwLmdldEVtYmVkZGVkTWVudVdpZHRoTGltaXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1lYXN1cmUgZm9yIGluaXRpYWwgY29uZmlndXJhdGlvbgorICAgICAgICBpZiAoIW1NYXhJdGVtc1NldCkgeworICAgICAgICAgICAgbU1heEl0ZW1zID0gYWJwLmdldE1heEFjdGlvbkJ1dHRvbnMoKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCB3aWR0aCA9IG1XaWR0aExpbWl0OworICAgICAgICBpZiAobVJlc2VydmVPdmVyZmxvdykgeworICAgICAgICAgICAgaWYgKG1PdmVyZmxvd0J1dHRvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbU92ZXJmbG93QnV0dG9uID0gbmV3IE92ZXJmbG93TWVudUJ1dHRvbihtU3lzdGVtQ29udGV4dCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IHNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMCwgTWVhc3VyZVNwZWMuVU5TUEVDSUZJRUQpOworICAgICAgICAgICAgICAgIG1PdmVyZmxvd0J1dHRvbi5tZWFzdXJlKHNwZWMsIHNwZWMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2lkdGggLT0gbU92ZXJmbG93QnV0dG9uLmdldE1lYXN1cmVkV2lkdGgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1PdmVyZmxvd0J1dHRvbiA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBtQWN0aW9uSXRlbVdpZHRoTGltaXQgPSB3aWR0aDsKKworICAgICAgICBtTWluQ2VsbFNpemUgPSAoaW50KSAoQWN0aW9uTWVudVZpZXcuTUlOX0NFTExfU0laRSAqIHJlcy5nZXREaXNwbGF5TWV0cmljcygpLmRlbnNpdHkpOworCisgICAgICAgIC8vIERyb3AgYSBzY3JhcCB2aWV3IGFzIGl0IG1heSBubyBsb25nZXIgcmVmbGVjdCB0aGUgcHJvcGVyIGNvbnRleHQvY29uZmlnLgorICAgICAgICBtU2NyYXBBY3Rpb25CdXR0b25WaWV3ID0gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7CisgICAgICAgIGlmICghbU1heEl0ZW1zU2V0KSB7CisgICAgICAgICAgICBtTWF4SXRlbXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRJbnRlZ2VyKAorICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmludGVnZXIubWF4X2FjdGlvbl9idXR0b25zKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobU1lbnUgIT0gbnVsbCkgeworICAgICAgICAgICAgbU1lbnUub25JdGVtc0NoYW5nZWQodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRXaWR0aExpbWl0KGludCB3aWR0aCwgYm9vbGVhbiBzdHJpY3QpIHsKKyAgICAgICAgbVdpZHRoTGltaXQgPSB3aWR0aDsKKyAgICAgICAgbVN0cmljdFdpZHRoTGltaXQgPSBzdHJpY3Q7CisgICAgICAgIG1XaWR0aExpbWl0U2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRSZXNlcnZlT3ZlcmZsb3coYm9vbGVhbiByZXNlcnZlT3ZlcmZsb3cpIHsKKyAgICAgICAgbVJlc2VydmVPdmVyZmxvdyA9IHJlc2VydmVPdmVyZmxvdzsKKyAgICAgICAgbVJlc2VydmVPdmVyZmxvd1NldCA9IHRydWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SXRlbUxpbWl0KGludCBpdGVtQ291bnQpIHsKKyAgICAgICAgbU1heEl0ZW1zID0gaXRlbUNvdW50OworICAgICAgICBtTWF4SXRlbXNTZXQgPSB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEV4cGFuZGVkQWN0aW9uVmlld3NFeGNsdXNpdmUoYm9vbGVhbiBpc0V4Y2x1c2l2ZSkgeworICAgICAgICBtRXhwYW5kZWRBY3Rpb25WaWV3c0V4Y2x1c2l2ZSA9IGlzRXhjbHVzaXZlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBNZW51VmlldyBnZXRNZW51VmlldyhWaWV3R3JvdXAgcm9vdCkgeworICAgICAgICBNZW51VmlldyByZXN1bHQgPSBzdXBlci5nZXRNZW51Vmlldyhyb290KTsKKyAgICAgICAgKChBY3Rpb25NZW51VmlldykgcmVzdWx0KS5zZXRQcmVzZW50ZXIodGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFZpZXcgZ2V0SXRlbVZpZXcoZmluYWwgTWVudUl0ZW1JbXBsIGl0ZW0sIFZpZXcgY29udmVydFZpZXcsIFZpZXdHcm91cCBwYXJlbnQpIHsKKyAgICAgICAgVmlldyBhY3Rpb25WaWV3ID0gaXRlbS5nZXRBY3Rpb25WaWV3KCk7CisgICAgICAgIGlmIChhY3Rpb25WaWV3ID09IG51bGwgfHwgaXRlbS5oYXNDb2xsYXBzaWJsZUFjdGlvblZpZXcoKSkgeworICAgICAgICAgICAgYWN0aW9uVmlldyA9IHN1cGVyLmdldEl0ZW1WaWV3KGl0ZW0sIGNvbnZlcnRWaWV3LCBwYXJlbnQpOworICAgICAgICB9CisgICAgICAgIGFjdGlvblZpZXcuc2V0VmlzaWJpbGl0eShpdGVtLmlzQWN0aW9uVmlld0V4cGFuZGVkKCkgPyBWaWV3LkdPTkUgOiBWaWV3LlZJU0lCTEUpOworCisgICAgICAgIGZpbmFsIEFjdGlvbk1lbnVWaWV3IG1lbnVQYXJlbnQgPSAoQWN0aW9uTWVudVZpZXcpIHBhcmVudDsKKyAgICAgICAgZmluYWwgVmlld0dyb3VwLkxheW91dFBhcmFtcyBscCA9IGFjdGlvblZpZXcuZ2V0TGF5b3V0UGFyYW1zKCk7CisgICAgICAgIGlmICghbWVudVBhcmVudC5jaGVja0xheW91dFBhcmFtcyhscCkpIHsKKyAgICAgICAgICAgIGFjdGlvblZpZXcuc2V0TGF5b3V0UGFyYW1zKG1lbnVQYXJlbnQuZ2VuZXJhdGVMYXlvdXRQYXJhbXMobHApKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYWN0aW9uVmlldzsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBiaW5kSXRlbVZpZXcoTWVudUl0ZW1JbXBsIGl0ZW0sIE1lbnVWaWV3Lkl0ZW1WaWV3IGl0ZW1WaWV3KSB7CisgICAgICAgIGl0ZW1WaWV3LmluaXRpYWxpemUoaXRlbSwgMCk7CisKKyAgICAgICAgZmluYWwgQWN0aW9uTWVudVZpZXcgbWVudVZpZXcgPSAoQWN0aW9uTWVudVZpZXcpIG1NZW51VmlldzsKKyAgICAgICAgZmluYWwgQWN0aW9uTWVudUl0ZW1WaWV3IGFjdGlvbkl0ZW1WaWV3ID0gKEFjdGlvbk1lbnVJdGVtVmlldykgaXRlbVZpZXc7CisgICAgICAgIGFjdGlvbkl0ZW1WaWV3LnNldEl0ZW1JbnZva2VyKG1lbnVWaWV3KTsKKworICAgICAgICBpZiAobVBvcHVwQ2FsbGJhY2sgPT0gbnVsbCkgeworICAgICAgICAgICAgbVBvcHVwQ2FsbGJhY2sgPSBuZXcgQWN0aW9uTWVudVBvcHVwQ2FsbGJhY2soKTsKKyAgICAgICAgfQorICAgICAgICBhY3Rpb25JdGVtVmlldy5zZXRQb3B1cENhbGxiYWNrKG1Qb3B1cENhbGxiYWNrKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBzaG91bGRJbmNsdWRlSXRlbShpbnQgY2hpbGRJbmRleCwgTWVudUl0ZW1JbXBsIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGl0ZW0uaXNBY3Rpb25CdXR0b24oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB1cGRhdGVNZW51Vmlldyhib29sZWFuIGNsZWFyZWQpIHsKKyAgICAgICAgZmluYWwgVmlld0dyb3VwIG1lbnVWaWV3UGFyZW50ID0gKFZpZXdHcm91cCkgKChWaWV3KSBtTWVudVZpZXcpLmdldFBhcmVudCgpOworICAgICAgICBpZiAobWVudVZpZXdQYXJlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgQWN0aW9uQmFyVHJhbnNpdGlvbi5iZWdpbkRlbGF5ZWRUcmFuc2l0aW9uKG1lbnVWaWV3UGFyZW50KTsKKyAgICAgICAgfQorICAgICAgICBzdXBlci51cGRhdGVNZW51VmlldyhjbGVhcmVkKTsKKworICAgICAgICAoKFZpZXcpIG1NZW51VmlldykucmVxdWVzdExheW91dCgpOworCisgICAgICAgIGlmIChtTWVudSAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBBcnJheUxpc3Q8TWVudUl0ZW1JbXBsPiBhY3Rpb25JdGVtcyA9IG1NZW51LmdldEFjdGlvbkl0ZW1zKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBhY3Rpb25JdGVtcy5zaXplKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpb25Qcm92aWRlciBwcm92aWRlciA9IGFjdGlvbkl0ZW1zLmdldChpKS5nZXRBY3Rpb25Qcm92aWRlcigpOworICAgICAgICAgICAgICAgIGlmIChwcm92aWRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLnNldFN1YlVpVmlzaWJpbGl0eUxpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIEFycmF5TGlzdDxNZW51SXRlbUltcGw+IG5vbkFjdGlvbkl0ZW1zID0gbU1lbnUgIT0gbnVsbCA/CisgICAgICAgICAgICAgICAgbU1lbnUuZ2V0Tm9uQWN0aW9uSXRlbXMoKSA6IG51bGw7CisKKyAgICAgICAgYm9vbGVhbiBoYXNPdmVyZmxvdyA9IGZhbHNlOworICAgICAgICBpZiAobVJlc2VydmVPdmVyZmxvdyAmJiBub25BY3Rpb25JdGVtcyAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBub25BY3Rpb25JdGVtcy5zaXplKCk7CisgICAgICAgICAgICBpZiAoY291bnQgPT0gMSkgeworICAgICAgICAgICAgICAgIGhhc092ZXJmbG93ID0gIW5vbkFjdGlvbkl0ZW1zLmdldCgwKS5pc0FjdGlvblZpZXdFeHBhbmRlZCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBoYXNPdmVyZmxvdyA9IGNvdW50ID4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNPdmVyZmxvdykgeworICAgICAgICAgICAgaWYgKG1PdmVyZmxvd0J1dHRvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbU92ZXJmbG93QnV0dG9uID0gbmV3IE92ZXJmbG93TWVudUJ1dHRvbihtU3lzdGVtQ29udGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBWaWV3R3JvdXAgcGFyZW50ID0gKFZpZXdHcm91cCkgbU92ZXJmbG93QnV0dG9uLmdldFBhcmVudCgpOworICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBtTWVudVZpZXcpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZVZpZXcobU92ZXJmbG93QnV0dG9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQWN0aW9uTWVudVZpZXcgbWVudVZpZXcgPSAoQWN0aW9uTWVudVZpZXcpIG1NZW51VmlldzsKKyAgICAgICAgICAgICAgICBtZW51Vmlldy5hZGRWaWV3KG1PdmVyZmxvd0J1dHRvbiwgbWVudVZpZXcuZ2VuZXJhdGVPdmVyZmxvd0J1dHRvbkxheW91dFBhcmFtcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtT3ZlcmZsb3dCdXR0b24gIT0gbnVsbCAmJiBtT3ZlcmZsb3dCdXR0b24uZ2V0UGFyZW50KCkgPT0gbU1lbnVWaWV3KSB7CisgICAgICAgICAgICAoKFZpZXdHcm91cCkgbU1lbnVWaWV3KS5yZW1vdmVWaWV3KG1PdmVyZmxvd0J1dHRvbik7CisgICAgICAgIH0KKworICAgICAgICAoKEFjdGlvbk1lbnVWaWV3KSBtTWVudVZpZXcpLnNldE92ZXJmbG93UmVzZXJ2ZWQobVJlc2VydmVPdmVyZmxvdyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZmlsdGVyTGVmdG92ZXJWaWV3KFZpZXdHcm91cCBwYXJlbnQsIGludCBjaGlsZEluZGV4KSB7CisgICAgICAgIGlmIChwYXJlbnQuZ2V0Q2hpbGRBdChjaGlsZEluZGV4KSA9PSBtT3ZlcmZsb3dCdXR0b24pIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmZpbHRlckxlZnRvdmVyVmlldyhwYXJlbnQsIGNoaWxkSW5kZXgpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIG9uU3ViTWVudVNlbGVjdGVkKFN1Yk1lbnVCdWlsZGVyIHN1Yk1lbnUpIHsKKyAgICAgICAgaWYgKCFzdWJNZW51Lmhhc1Zpc2libGVJdGVtcygpKSByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU3ViTWVudUJ1aWxkZXIgdG9wU3ViTWVudSA9IHN1Yk1lbnU7CisgICAgICAgIHdoaWxlICh0b3BTdWJNZW51LmdldFBhcmVudE1lbnUoKSAhPSBtTWVudSkgeworICAgICAgICAgICAgdG9wU3ViTWVudSA9IChTdWJNZW51QnVpbGRlcikgdG9wU3ViTWVudS5nZXRQYXJlbnRNZW51KCk7CisgICAgICAgIH0KKyAgICAgICAgVmlldyBhbmNob3IgPSBmaW5kVmlld0Zvckl0ZW0odG9wU3ViTWVudS5nZXRJdGVtKCkpOworICAgICAgICBpZiAoYW5jaG9yID09IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChtT3ZlcmZsb3dCdXR0b24gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYW5jaG9yID0gbU92ZXJmbG93QnV0dG9uOworICAgICAgICB9CisKKyAgICAgICAgbU9wZW5TdWJNZW51SWQgPSBzdWJNZW51LmdldEl0ZW0oKS5nZXRJdGVtSWQoKTsKKyAgICAgICAgbUFjdGlvbkJ1dHRvblBvcHVwID0gbmV3IEFjdGlvbkJ1dHRvblN1Ym1lbnUobUNvbnRleHQsIHN1Yk1lbnUpOworICAgICAgICBtQWN0aW9uQnV0dG9uUG9wdXAuc2V0QW5jaG9yVmlldyhhbmNob3IpOworICAgICAgICBtQWN0aW9uQnV0dG9uUG9wdXAuc2hvdygpOworICAgICAgICBzdXBlci5vblN1Yk1lbnVTZWxlY3RlZChzdWJNZW51KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcHJpdmF0ZSBWaWV3IGZpbmRWaWV3Rm9ySXRlbShNZW51SXRlbSBpdGVtKSB7CisgICAgICAgIGZpbmFsIFZpZXdHcm91cCBwYXJlbnQgPSAoVmlld0dyb3VwKSBtTWVudVZpZXc7CisgICAgICAgIGlmIChwYXJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICAgICAgZmluYWwgaW50IGNvdW50ID0gcGFyZW50LmdldENoaWxkQ291bnQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gcGFyZW50LmdldENoaWxkQXQoaSk7CisgICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBNZW51Vmlldy5JdGVtVmlldyAmJgorICAgICAgICAgICAgICAgICAgICAoKE1lbnVWaWV3Lkl0ZW1WaWV3KSBjaGlsZCkuZ2V0SXRlbURhdGEoKSA9PSBpdGVtKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIERpc3BsYXkgdGhlIG92ZXJmbG93IG1lbnUgaWYgb25lIGlzIHByZXNlbnQuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBvdmVyZmxvdyBtZW51IHdhcyBzaG93biwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHNob3dPdmVyZmxvd01lbnUoKSB7CisgICAgICAgIGlmIChtUmVzZXJ2ZU92ZXJmbG93ICYmICFpc092ZXJmbG93TWVudVNob3dpbmcoKSAmJiBtTWVudSAhPSBudWxsICYmIG1NZW51VmlldyAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbVBvc3RlZE9wZW5SdW5uYWJsZSA9PSBudWxsICYmICFtTWVudS5nZXROb25BY3Rpb25JdGVtcygpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgT3ZlcmZsb3dQb3B1cCBwb3B1cCA9IG5ldyBPdmVyZmxvd1BvcHVwKG1Db250ZXh0LCBtTWVudSwgbU92ZXJmbG93QnV0dG9uLCB0cnVlKTsKKyAgICAgICAgICAgIG1Qb3N0ZWRPcGVuUnVubmFibGUgPSBuZXcgT3Blbk92ZXJmbG93UnVubmFibGUocG9wdXApOworICAgICAgICAgICAgLy8gUG9zdCB0aGlzIGZvciBsYXRlcjsgd2UgbWlnaHQgc3RpbGwgbmVlZCBhIGxheW91dCBmb3IgdGhlIGFuY2hvciB0byBiZSByaWdodC4KKyAgICAgICAgICAgICgoVmlldykgbU1lbnVWaWV3KS5wb3N0KG1Qb3N0ZWRPcGVuUnVubmFibGUpOworCisgICAgICAgICAgICAvLyBBY3Rpb25NZW51UHJlc2VudGVyIHVzZXMgbnVsbCBhcyBhIGNhbGxiYWNrIGFyZ3VtZW50IGhlcmUKKyAgICAgICAgICAgIC8vIHRvIGluZGljYXRlIG92ZXJmbG93IGlzIG9wZW5pbmcuCisgICAgICAgICAgICBzdXBlci5vblN1Yk1lbnVTZWxlY3RlZChudWxsKTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEhpZGUgdGhlIG92ZXJmbG93IG1lbnUgaWYgaXQgaXMgY3VycmVudGx5IHNob3dpbmcuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG92ZXJmbG93IG1lbnUgd2FzIGhpZGRlbiwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGhpZGVPdmVyZmxvd01lbnUoKSB7CisgICAgICAgIGlmIChtUG9zdGVkT3BlblJ1bm5hYmxlICE9IG51bGwgJiYgbU1lbnVWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgICgoVmlldykgbU1lbnVWaWV3KS5yZW1vdmVDYWxsYmFja3MobVBvc3RlZE9wZW5SdW5uYWJsZSk7CisgICAgICAgICAgICBtUG9zdGVkT3BlblJ1bm5hYmxlID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgTWVudVBvcHVwSGVscGVyIHBvcHVwID0gbU92ZXJmbG93UG9wdXA7CisgICAgICAgIGlmIChwb3B1cCAhPSBudWxsKSB7CisgICAgICAgICAgICBwb3B1cC5kaXNtaXNzKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGlzbWlzcyBhbGwgcG9wdXAgbWVudXMgLSBvdmVyZmxvdyBhbmQgc3VibWVudXMuCisgICAgICogQHJldHVybiB0cnVlIGlmIHBvcHVwcyB3ZXJlIGRpc21pc3NlZCwgZmFsc2Ugb3RoZXJ3aXNlLiAoVGhpcyBjYW4gYmUgYmVjYXVzZSBub25lIHdlcmUgb3Blbi4pCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZGlzbWlzc1BvcHVwTWVudXMoKSB7CisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gaGlkZU92ZXJmbG93TWVudSgpOworICAgICAgICByZXN1bHQgfD0gaGlkZVN1Yk1lbnVzKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGlzbWlzcyBhbGwgc3VibWVudSBwb3B1cHMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgcG9wdXBzIHdlcmUgZGlzbWlzc2VkLCBmYWxzZSBvdGhlcndpc2UuIChUaGlzIGNhbiBiZSBiZWNhdXNlIG5vbmUgd2VyZSBvcGVuLikKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBoaWRlU3ViTWVudXMoKSB7CisgICAgICAgIGlmIChtQWN0aW9uQnV0dG9uUG9wdXAgIT0gbnVsbCkgeworICAgICAgICAgICAgbUFjdGlvbkJ1dHRvblBvcHVwLmRpc21pc3MoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG92ZXJmbG93IG1lbnUgaXMgY3VycmVudGx5IHNob3dpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc092ZXJmbG93TWVudVNob3dpbmcoKSB7CisgICAgICAgIHJldHVybiBtT3ZlcmZsb3dQb3B1cCAhPSBudWxsICYmIG1PdmVyZmxvd1BvcHVwLmlzU2hvd2luZygpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzT3ZlcmZsb3dNZW51U2hvd1BlbmRpbmcoKSB7CisgICAgICAgIHJldHVybiBtUG9zdGVkT3BlblJ1bm5hYmxlICE9IG51bGwgfHwgaXNPdmVyZmxvd01lbnVTaG93aW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0cnVlIGlmIHNwYWNlIGhhcyBiZWVuIHJlc2VydmVkIGluIHRoZSBhY3Rpb24gbWVudSBmb3IgYW4gb3ZlcmZsb3cgaXRlbS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc092ZXJmbG93UmVzZXJ2ZWQoKSB7CisgICAgICAgIHJldHVybiBtUmVzZXJ2ZU92ZXJmbG93OworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGZsYWdBY3Rpb25JdGVtcygpIHsKKyAgICAgICAgZmluYWwgQXJyYXlMaXN0PE1lbnVJdGVtSW1wbD4gdmlzaWJsZUl0ZW1zID0gbU1lbnUuZ2V0VmlzaWJsZUl0ZW1zKCk7CisgICAgICAgIGZpbmFsIGludCBpdGVtc1NpemUgPSB2aXNpYmxlSXRlbXMuc2l6ZSgpOworICAgICAgICBpbnQgbWF4QWN0aW9ucyA9IG1NYXhJdGVtczsKKyAgICAgICAgaW50IHdpZHRoTGltaXQgPSBtQWN0aW9uSXRlbVdpZHRoTGltaXQ7CisgICAgICAgIGZpbmFsIGludCBxdWVyeVNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMCwgTWVhc3VyZVNwZWMuVU5TUEVDSUZJRUQpOworICAgICAgICBmaW5hbCBWaWV3R3JvdXAgcGFyZW50ID0gKFZpZXdHcm91cCkgbU1lbnVWaWV3OworCisgICAgICAgIGludCByZXF1aXJlZEl0ZW1zID0gMDsKKyAgICAgICAgaW50IHJlcXVlc3RlZEl0ZW1zID0gMDsKKyAgICAgICAgaW50IGZpcnN0QWN0aW9uV2lkdGggPSAwOworICAgICAgICBib29sZWFuIGhhc092ZXJmbG93ID0gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXNTaXplOyBpKyspIHsKKyAgICAgICAgICAgIE1lbnVJdGVtSW1wbCBpdGVtID0gdmlzaWJsZUl0ZW1zLmdldChpKTsKKyAgICAgICAgICAgIGlmIChpdGVtLnJlcXVpcmVzQWN0aW9uQnV0dG9uKCkpIHsKKyAgICAgICAgICAgICAgICByZXF1aXJlZEl0ZW1zKys7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucmVxdWVzdHNBY3Rpb25CdXR0b24oKSkgeworICAgICAgICAgICAgICAgIHJlcXVlc3RlZEl0ZW1zKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGhhc092ZXJmbG93ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtRXhwYW5kZWRBY3Rpb25WaWV3c0V4Y2x1c2l2ZSAmJiBpdGVtLmlzQWN0aW9uVmlld0V4cGFuZGVkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBPdmVyZmxvdyBldmVyeXRoaW5nIGlmIHdlIGhhdmUgYW4gZXhwYW5kZWQgYWN0aW9uIHZpZXcgYW5kIHdlJ3JlCisgICAgICAgICAgICAgICAgLy8gc3BhY2UgY29uc3RyYWluZWQuCisgICAgICAgICAgICAgICAgbWF4QWN0aW9ucyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXNlcnZlIGEgc3BvdCBmb3IgdGhlIG92ZXJmbG93IGl0ZW0gaWYgbmVlZGVkLgorICAgICAgICBpZiAobVJlc2VydmVPdmVyZmxvdyAmJgorICAgICAgICAgICAgICAgIChoYXNPdmVyZmxvdyB8fCByZXF1aXJlZEl0ZW1zICsgcmVxdWVzdGVkSXRlbXMgPiBtYXhBY3Rpb25zKSkgeworICAgICAgICAgICAgbWF4QWN0aW9ucy0tOworICAgICAgICB9CisgICAgICAgIG1heEFjdGlvbnMgLT0gcmVxdWlyZWRJdGVtczsKKworICAgICAgICBmaW5hbCBTcGFyc2VCb29sZWFuQXJyYXkgc2Vlbkdyb3VwcyA9IG1BY3Rpb25CdXR0b25Hcm91cHM7CisgICAgICAgIHNlZW5Hcm91cHMuY2xlYXIoKTsKKworICAgICAgICBpbnQgY2VsbFNpemUgPSAwOworICAgICAgICBpbnQgY2VsbHNSZW1haW5pbmcgPSAwOworICAgICAgICBpZiAobVN0cmljdFdpZHRoTGltaXQpIHsKKyAgICAgICAgICAgIGNlbGxzUmVtYWluaW5nID0gd2lkdGhMaW1pdCAvIG1NaW5DZWxsU2l6ZTsKKyAgICAgICAgICAgIGZpbmFsIGludCBjZWxsU2l6ZVJlbWFpbmluZyA9IHdpZHRoTGltaXQgJSBtTWluQ2VsbFNpemU7CisgICAgICAgICAgICBjZWxsU2l6ZSA9IG1NaW5DZWxsU2l6ZSArIGNlbGxTaXplUmVtYWluaW5nIC8gY2VsbHNSZW1haW5pbmc7CisgICAgICAgIH0KKworICAgICAgICAvLyBGbGFnIGFzIG1hbnkgbW9yZSByZXF1ZXN0ZWQgaXRlbXMgYXMgd2lsbCBmaXQuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXNTaXplOyBpKyspIHsKKyAgICAgICAgICAgIE1lbnVJdGVtSW1wbCBpdGVtID0gdmlzaWJsZUl0ZW1zLmdldChpKTsKKworICAgICAgICAgICAgaWYgKGl0ZW0ucmVxdWlyZXNBY3Rpb25CdXR0b24oKSkgeworICAgICAgICAgICAgICAgIFZpZXcgdiA9IGdldEl0ZW1WaWV3KGl0ZW0sIG1TY3JhcEFjdGlvbkJ1dHRvblZpZXcsIHBhcmVudCk7CisgICAgICAgICAgICAgICAgaWYgKG1TY3JhcEFjdGlvbkJ1dHRvblZpZXcgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBtU2NyYXBBY3Rpb25CdXR0b25WaWV3ID0gdjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1TdHJpY3RXaWR0aExpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIGNlbGxzUmVtYWluaW5nIC09IEFjdGlvbk1lbnVWaWV3Lm1lYXN1cmVDaGlsZEZvckNlbGxzKHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFNpemUsIGNlbGxzUmVtYWluaW5nLCBxdWVyeVNwZWMsIDApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHYubWVhc3VyZShxdWVyeVNwZWMsIHF1ZXJ5U3BlYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbmFsIGludCBtZWFzdXJlZFdpZHRoID0gdi5nZXRNZWFzdXJlZFdpZHRoKCk7CisgICAgICAgICAgICAgICAgd2lkdGhMaW1pdCAtPSBtZWFzdXJlZFdpZHRoOworICAgICAgICAgICAgICAgIGlmIChmaXJzdEFjdGlvbldpZHRoID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RBY3Rpb25XaWR0aCA9IG1lYXN1cmVkV2lkdGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbmFsIGludCBncm91cElkID0gaXRlbS5nZXRHcm91cElkKCk7CisgICAgICAgICAgICAgICAgaWYgKGdyb3VwSWQgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBzZWVuR3JvdXBzLnB1dChncm91cElkLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaXRlbS5zZXRJc0FjdGlvbkJ1dHRvbih0cnVlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5yZXF1ZXN0c0FjdGlvbkJ1dHRvbigpKSB7CisgICAgICAgICAgICAgICAgLy8gSXRlbXMgaW4gYSBncm91cCB3aXRoIG90aGVyIGl0ZW1zIHRoYXQgYWxyZWFkeSBoYXZlIGFuIGFjdGlvbiBzbG90CisgICAgICAgICAgICAgICAgLy8gY2FuIGJyZWFrIHRoZSBtYXggYWN0aW9ucyBydWxlLCBidXQgbm90IHRoZSB3aWR0aCBsaW1pdC4KKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZ3JvdXBJZCA9IGl0ZW0uZ2V0R3JvdXBJZCgpOworICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaW5Hcm91cCA9IHNlZW5Hcm91cHMuZ2V0KGdyb3VwSWQpOworICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNBY3Rpb24gPSAobWF4QWN0aW9ucyA+IDAgfHwgaW5Hcm91cCkgJiYgd2lkdGhMaW1pdCA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICghbVN0cmljdFdpZHRoTGltaXQgfHwgY2VsbHNSZW1haW5pbmcgPiAwKTsKKworICAgICAgICAgICAgICAgIGlmIChpc0FjdGlvbikgeworICAgICAgICAgICAgICAgICAgICBWaWV3IHYgPSBnZXRJdGVtVmlldyhpdGVtLCBtU2NyYXBBY3Rpb25CdXR0b25WaWV3LCBwYXJlbnQpOworICAgICAgICAgICAgICAgICAgICBpZiAobVNjcmFwQWN0aW9uQnV0dG9uVmlldyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtU2NyYXBBY3Rpb25CdXR0b25WaWV3ID0gdjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobVN0cmljdFdpZHRoTGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBjZWxscyA9IEFjdGlvbk1lbnVWaWV3Lm1lYXN1cmVDaGlsZEZvckNlbGxzKHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxTaXplLCBjZWxsc1JlbWFpbmluZywgcXVlcnlTcGVjLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxzUmVtYWluaW5nIC09IGNlbGxzOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxzID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGlvbiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdi5tZWFzdXJlKHF1ZXJ5U3BlYywgcXVlcnlTcGVjKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbWVhc3VyZWRXaWR0aCA9IHYuZ2V0TWVhc3VyZWRXaWR0aCgpOworICAgICAgICAgICAgICAgICAgICB3aWR0aExpbWl0IC09IG1lYXN1cmVkV2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEFjdGlvbldpZHRoID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0QWN0aW9uV2lkdGggPSBtZWFzdXJlZFdpZHRoOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1TdHJpY3RXaWR0aExpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGlvbiAmPSB3aWR0aExpbWl0ID49IDA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaWQgdGhpcyBwdXNoIHRoZSBlbnRpcmUgZmlyc3QgaXRlbSBwYXN0IHRoZSBsaW1pdD8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aW9uICY9IHdpZHRoTGltaXQgKyBmaXJzdEFjdGlvbldpZHRoID4gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpc0FjdGlvbiAmJiBncm91cElkICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vlbkdyb3Vwcy5wdXQoZ3JvdXBJZCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbkdyb3VwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGJyb2tlIHRoZSB3aWR0aCBsaW1pdC4gRGVtb3RlIHRoZSB3aG9sZSBncm91cCwgdGhleSBhbGwgb3ZlcmZsb3cgbm93LgorICAgICAgICAgICAgICAgICAgICBzZWVuR3JvdXBzLnB1dChncm91cElkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBNZW51SXRlbUltcGwgYXJlWW91TXlHcm91cGllID0gdmlzaWJsZUl0ZW1zLmdldChqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmVZb3VNeUdyb3VwaWUuZ2V0R3JvdXBJZCgpID09IGdyb3VwSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIGJhY2sgdGhlIGFjdGlvbiBzbG90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZVlvdU15R3JvdXBpZS5pc0FjdGlvbkJ1dHRvbigpKSBtYXhBY3Rpb25zKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlWW91TXlHcm91cGllLnNldElzQWN0aW9uQnV0dG9uKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpc0FjdGlvbikgbWF4QWN0aW9ucy0tOworCisgICAgICAgICAgICAgICAgaXRlbS5zZXRJc0FjdGlvbkJ1dHRvbihpc0FjdGlvbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIE5laXRoZXIgcmVxdWlyZXMgbm9yIHJlcXVlc3RzIGFuIGFjdGlvbiBidXR0b24uCisgICAgICAgICAgICAgICAgaXRlbS5zZXRJc0FjdGlvbkJ1dHRvbihmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DbG9zZU1lbnUoTWVudUJ1aWxkZXIgbWVudSwgYm9vbGVhbiBhbGxNZW51c0FyZUNsb3NpbmcpIHsKKyAgICAgICAgZGlzbWlzc1BvcHVwTWVudXMoKTsKKyAgICAgICAgc3VwZXIub25DbG9zZU1lbnUobWVudSwgYWxsTWVudXNBcmVDbG9zaW5nKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgUGFyY2VsYWJsZSBvblNhdmVJbnN0YW5jZVN0YXRlKCkgeworICAgICAgICBTYXZlZFN0YXRlIHN0YXRlID0gbmV3IFNhdmVkU3RhdGUoKTsKKyAgICAgICAgc3RhdGUub3BlblN1Yk1lbnVJZCA9IG1PcGVuU3ViTWVudUlkOworICAgICAgICByZXR1cm4gc3RhdGU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25SZXN0b3JlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN0YXRlKSB7CisgICAgICAgIFNhdmVkU3RhdGUgc2F2ZWQgPSAoU2F2ZWRTdGF0ZSkgc3RhdGU7CisgICAgICAgIGlmIChzYXZlZC5vcGVuU3ViTWVudUlkID4gMCkgeworICAgICAgICAgICAgTWVudUl0ZW0gaXRlbSA9IG1NZW51LmZpbmRJdGVtKHNhdmVkLm9wZW5TdWJNZW51SWQpOworICAgICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFN1Yk1lbnVCdWlsZGVyIHN1Yk1lbnUgPSAoU3ViTWVudUJ1aWxkZXIpIGl0ZW0uZ2V0U3ViTWVudSgpOworICAgICAgICAgICAgICAgIG9uU3ViTWVudVNlbGVjdGVkKHN1Yk1lbnUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25TdWJVaVZpc2liaWxpdHlDaGFuZ2VkKGJvb2xlYW4gaXNWaXNpYmxlKSB7CisgICAgICAgIGlmIChpc1Zpc2libGUpIHsKKyAgICAgICAgICAgIC8vIE5vdCBhIHN1Ym1lbnUsIGJ1dCB0cmVhdCBpdCBsaWtlIG9uZS4KKyAgICAgICAgICAgIHN1cGVyLm9uU3ViTWVudVNlbGVjdGVkKG51bGwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbU1lbnUuY2xvc2UoZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TWVudVZpZXcoQWN0aW9uTWVudVZpZXcgbWVudVZpZXcpIHsKKyAgICAgICAgbU1lbnVWaWV3ID0gbWVudVZpZXc7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2F2ZWRTdGF0ZSBpbXBsZW1lbnRzIFBhcmNlbGFibGUgeworICAgICAgICBwdWJsaWMgaW50IG9wZW5TdWJNZW51SWQ7CisKKyAgICAgICAgU2F2ZWRTdGF0ZSgpIHsKKyAgICAgICAgfQorCisgICAgICAgIFNhdmVkU3RhdGUoUGFyY2VsIGluKSB7CisgICAgICAgICAgICBvcGVuU3ViTWVudUlkID0gaW4ucmVhZEludCgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIGRlc3QsIGludCBmbGFncykgeworICAgICAgICAgICAgZGVzdC53cml0ZUludChvcGVuU3ViTWVudUlkKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFNhdmVkU3RhdGU+IENSRUFUT1IKKyAgICAgICAgICAgICAgICA9IG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8U2F2ZWRTdGF0ZT4oKSB7CisgICAgICAgICAgICBwdWJsaWMgU2F2ZWRTdGF0ZSBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBpbikgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2F2ZWRTdGF0ZShpbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBTYXZlZFN0YXRlW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNhdmVkU3RhdGVbc2l6ZV07CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBPdmVyZmxvd01lbnVCdXR0b24gZXh0ZW5kcyBJbWFnZUJ1dHRvbiBpbXBsZW1lbnRzIEFjdGlvbk1lbnVWaWV3LkFjdGlvbk1lbnVDaGlsZFZpZXcgeworICAgICAgICBwdWJsaWMgT3ZlcmZsb3dNZW51QnV0dG9uKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgbnVsbCwgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmFjdGlvbk92ZXJmbG93QnV0dG9uU3R5bGUpOworCisgICAgICAgICAgICBzZXRDbGlja2FibGUodHJ1ZSk7CisgICAgICAgICAgICBzZXRGb2N1c2FibGUodHJ1ZSk7CisgICAgICAgICAgICBzZXRWaXNpYmlsaXR5KFZJU0lCTEUpOworICAgICAgICAgICAgc2V0RW5hYmxlZCh0cnVlKTsKKworICAgICAgICAgICAgc2V0T25Ub3VjaExpc3RlbmVyKG5ldyBGb3J3YXJkaW5nTGlzdGVuZXIodGhpcykgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyBMaXN0UG9wdXBXaW5kb3cgZ2V0UG9wdXAoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtT3ZlcmZsb3dQb3B1cCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtT3ZlcmZsb3dQb3B1cC5nZXRQb3B1cCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uRm9yd2FyZGluZ1N0YXJ0ZWQoKSB7CisgICAgICAgICAgICAgICAgICAgIHNob3dPdmVyZmxvd01lbnUoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gb25Gb3J3YXJkaW5nU3RvcHBlZCgpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRGlzcGxheWluZyB0aGUgcG9wdXAgb2NjdXJzIGFzeW5jaHJvbm91c2x5LCBzbyB3YWl0IGZvcgorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcnVubmFibGUgdG8gZmluaXNoIGJlZm9yZSBkZWNpZGluZyB3aGV0aGVyIHRvIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yd2FyZGluZy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1Qb3N0ZWRPcGVuUnVubmFibGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaGlkZU92ZXJmbG93TWVudSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtQ2xpY2soKSB7CisgICAgICAgICAgICBpZiAoc3VwZXIucGVyZm9ybUNsaWNrKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGxheVNvdW5kRWZmZWN0KFNvdW5kRWZmZWN0Q29uc3RhbnRzLkNMSUNLKTsKKyAgICAgICAgICAgIHNob3dPdmVyZmxvd01lbnUoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIG5lZWRzRGl2aWRlckJlZm9yZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBuZWVkc0RpdmlkZXJBZnRlcigpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbk1lYXN1cmUoaW50IHdpZHRoTWVhc3VyZVNwZWMsIGludCBoZWlnaHRNZWFzdXJlU3BlYykgeworICAgICAgICAgICAgaWYgKE1lYXN1cmVTcGVjLmdldE1vZGUoaGVpZ2h0TWVhc3VyZVNwZWMpID09IE1lYXN1cmVTcGVjLkFUX01PU1QpIHsKKyAgICAgICAgICAgICAgICAvLyBGaWxsIGF2YWlsYWJsZSBoZWlnaHQKKyAgICAgICAgICAgICAgICBoZWlnaHRNZWFzdXJlU3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygKKyAgICAgICAgICAgICAgICAgICAgICAgIE1lYXN1cmVTcGVjLmdldFNpemUoaGVpZ2h0TWVhc3VyZVNwZWMpLCBNZWFzdXJlU3BlYy5FWEFDVExZKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1cGVyLm9uTWVhc3VyZSh3aWR0aE1lYXN1cmVTcGVjLCBoZWlnaHRNZWFzdXJlU3BlYyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBpbmZvKSB7CisgICAgICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oaW5mbyk7CisgICAgICAgICAgICBpbmZvLnNldENhbk9wZW5Qb3B1cCh0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgT3ZlcmZsb3dQb3B1cCBleHRlbmRzIE1lbnVQb3B1cEhlbHBlciB7CisgICAgICAgIHB1YmxpYyBPdmVyZmxvd1BvcHVwKENvbnRleHQgY29udGV4dCwgTWVudUJ1aWxkZXIgbWVudSwgVmlldyBhbmNob3JWaWV3LAorICAgICAgICAgICAgICAgIGJvb2xlYW4gb3ZlcmZsb3dPbmx5KSB7CisgICAgICAgICAgICBzdXBlcihjb250ZXh0LCBtZW51LCBhbmNob3JWaWV3LCBvdmVyZmxvd09ubHkpOworICAgICAgICAgICAgc2V0R3Jhdml0eShHcmF2aXR5LkVORCk7CisgICAgICAgICAgICBzZXRDYWxsYmFjayhtUG9wdXBQcmVzZW50ZXJDYWxsYmFjayk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25EaXNtaXNzKCkgeworICAgICAgICAgICAgc3VwZXIub25EaXNtaXNzKCk7CisgICAgICAgICAgICBtTWVudS5jbG9zZSgpOworICAgICAgICAgICAgbU92ZXJmbG93UG9wdXAgPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBBY3Rpb25CdXR0b25TdWJtZW51IGV4dGVuZHMgTWVudVBvcHVwSGVscGVyIHsKKyAgICAgICAgcHJpdmF0ZSBTdWJNZW51QnVpbGRlciBtU3ViTWVudTsKKworICAgICAgICBwdWJsaWMgQWN0aW9uQnV0dG9uU3VibWVudShDb250ZXh0IGNvbnRleHQsIFN1Yk1lbnVCdWlsZGVyIHN1Yk1lbnUpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIHN1Yk1lbnUpOworICAgICAgICAgICAgbVN1Yk1lbnUgPSBzdWJNZW51OworCisgICAgICAgICAgICBNZW51SXRlbUltcGwgaXRlbSA9IChNZW51SXRlbUltcGwpIHN1Yk1lbnUuZ2V0SXRlbSgpOworICAgICAgICAgICAgaWYgKCFpdGVtLmlzQWN0aW9uQnV0dG9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBHaXZlIGEgcmVhc29uYWJsZSBhbmNob3IgdG8gbmVzdGVkIHN1Ym1lbnVzLgorICAgICAgICAgICAgICAgIHNldEFuY2hvclZpZXcobU92ZXJmbG93QnV0dG9uID09IG51bGwgPyAoVmlldykgbU1lbnVWaWV3IDogbU92ZXJmbG93QnV0dG9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0Q2FsbGJhY2sobVBvcHVwUHJlc2VudGVyQ2FsbGJhY2spOworCisgICAgICAgICAgICBib29sZWFuIHByZXNlcnZlSWNvblNwYWNpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IHN1Yk1lbnUuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgTWVudUl0ZW0gY2hpbGRJdGVtID0gc3ViTWVudS5nZXRJdGVtKGkpOworICAgICAgICAgICAgICAgIGlmIChjaGlsZEl0ZW0uaXNWaXNpYmxlKCkgJiYgY2hpbGRJdGVtLmdldEljb24oKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlSWNvblNwYWNpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRGb3JjZVNob3dJY29uKHByZXNlcnZlSWNvblNwYWNpbmcpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uRGlzbWlzcygpIHsKKyAgICAgICAgICAgIHN1cGVyLm9uRGlzbWlzcygpOworICAgICAgICAgICAgbUFjdGlvbkJ1dHRvblBvcHVwID0gbnVsbDsKKyAgICAgICAgICAgIG1PcGVuU3ViTWVudUlkID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgUG9wdXBQcmVzZW50ZXJDYWxsYmFjayBpbXBsZW1lbnRzIENhbGxiYWNrIHsKKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gb25PcGVuU3ViTWVudShNZW51QnVpbGRlciBzdWJNZW51KSB7CisgICAgICAgICAgICBpZiAoc3ViTWVudSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIG1PcGVuU3ViTWVudUlkID0gKChTdWJNZW51QnVpbGRlcikgc3ViTWVudSkuZ2V0SXRlbSgpLmdldEl0ZW1JZCgpOworICAgICAgICAgICAgZmluYWwgQ2FsbGJhY2sgY2IgPSBnZXRDYWxsYmFjaygpOworICAgICAgICAgICAgcmV0dXJuIGNiICE9IG51bGwgPyBjYi5vbk9wZW5TdWJNZW51KHN1Yk1lbnUpIDogZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DbG9zZU1lbnUoTWVudUJ1aWxkZXIgbWVudSwgYm9vbGVhbiBhbGxNZW51c0FyZUNsb3NpbmcpIHsKKyAgICAgICAgICAgIGlmIChtZW51IGluc3RhbmNlb2YgU3ViTWVudUJ1aWxkZXIpIHsKKyAgICAgICAgICAgICAgICAoKFN1Yk1lbnVCdWlsZGVyKSBtZW51KS5nZXRSb290TWVudSgpLmNsb3NlKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIENhbGxiYWNrIGNiID0gZ2V0Q2FsbGJhY2soKTsKKyAgICAgICAgICAgIGlmIChjYiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY2Iub25DbG9zZU1lbnUobWVudSwgYWxsTWVudXNBcmVDbG9zaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgT3Blbk92ZXJmbG93UnVubmFibGUgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgICAgICAgIHByaXZhdGUgT3ZlcmZsb3dQb3B1cCBtUG9wdXA7CisKKyAgICAgICAgcHVibGljIE9wZW5PdmVyZmxvd1J1bm5hYmxlKE92ZXJmbG93UG9wdXAgcG9wdXApIHsKKyAgICAgICAgICAgIG1Qb3B1cCA9IHBvcHVwOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgbU1lbnUuY2hhbmdlTWVudU1vZGUoKTsKKyAgICAgICAgICAgIGZpbmFsIFZpZXcgbWVudVZpZXcgPSAoVmlldykgbU1lbnVWaWV3OworICAgICAgICAgICAgaWYgKG1lbnVWaWV3ICE9IG51bGwgJiYgbWVudVZpZXcuZ2V0V2luZG93VG9rZW4oKSAhPSBudWxsICYmIG1Qb3B1cC50cnlTaG93KCkpIHsKKyAgICAgICAgICAgICAgICBtT3ZlcmZsb3dQb3B1cCA9IG1Qb3B1cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1Qb3N0ZWRPcGVuUnVubmFibGUgPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBBY3Rpb25NZW51UG9wdXBDYWxsYmFjayBleHRlbmRzIEFjdGlvbk1lbnVJdGVtVmlldy5Qb3B1cENhbGxiYWNrIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBMaXN0UG9wdXBXaW5kb3cgZ2V0UG9wdXAoKSB7CisgICAgICAgICAgICByZXR1cm4gbUFjdGlvbkJ1dHRvblBvcHVwICE9IG51bGwgPyBtQWN0aW9uQnV0dG9uUG9wdXAuZ2V0UG9wdXAoKSA6IG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWN0aW9uTWVudVZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BY3Rpb25NZW51Vmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzcwODYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWN0aW9uTWVudVZpZXcuamF2YQpAQCAtMCwwICsxLDY0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGFuZHJvaWQud2lkZ2V0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOworaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdEZWJ1ZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuQWN0aW9uTWVudUl0ZW1WaWV3OworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5NZW51QnVpbGRlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuTWVudUl0ZW1JbXBsOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5NZW51VmlldzsKKworLyoqCisgKiBBY3Rpb25NZW51VmlldyBpcyBhIHByZXNlbnRhdGlvbiBvZiBhIHNlcmllcyBvZiBtZW51IG9wdGlvbnMgYXMgYSBWaWV3LiBJdCBwcm92aWRlcworICogc2V2ZXJhbCB0b3AgbGV2ZWwgb3B0aW9ucyBhcyBhY3Rpb24gYnV0dG9ucyB3aGlsZSBzcGlsbGluZyByZW1haW5pbmcgb3B0aW9ucyBvdmVyIGFzCisgKiBpdGVtcyBpbiBhbiBvdmVyZmxvdyBtZW51LiBUaGlzIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gcHJlc2VudCBwYWNrcyBvZiBhY3Rpb25zIGlubGluZSB3aXRoCisgKiBzcGVjaWZpYyBvciByZXBlYXRpbmcgY29udGVudC4KKyAqLworcHVibGljIGNsYXNzIEFjdGlvbk1lbnVWaWV3IGV4dGVuZHMgTGluZWFyTGF5b3V0IGltcGxlbWVudHMgTWVudUJ1aWxkZXIuSXRlbUludm9rZXIsIE1lbnVWaWV3IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkFjdGlvbk1lbnVWaWV3IjsKKyAgICAKKyAgICBzdGF0aWMgZmluYWwgaW50IE1JTl9DRUxMX1NJWkUgPSA1NjsgLy8gZGlwcworICAgIHN0YXRpYyBmaW5hbCBpbnQgR0VORVJBVEVEX0lURU1fUEFERElORyA9IDQ7IC8vIGRpcHMKKworICAgIHByaXZhdGUgTWVudUJ1aWxkZXIgbU1lbnU7CisKKyAgICBwcml2YXRlIGJvb2xlYW4gbVJlc2VydmVPdmVyZmxvdzsKKyAgICBwcml2YXRlIEFjdGlvbk1lbnVQcmVzZW50ZXIgbVByZXNlbnRlcjsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUZvcm1hdEl0ZW1zOworICAgIHByaXZhdGUgaW50IG1Gb3JtYXRJdGVtc1dpZHRoOworICAgIHByaXZhdGUgaW50IG1NaW5DZWxsU2l6ZTsKKyAgICBwcml2YXRlIGludCBtR2VuZXJhdGVkSXRlbVBhZGRpbmc7CisKKyAgICBwdWJsaWMgQWN0aW9uTWVudVZpZXcoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBBY3Rpb25NZW51VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7CisgICAgICAgIHNldEJhc2VsaW5lQWxpZ25lZChmYWxzZSk7CisgICAgICAgIGZpbmFsIGZsb2F0IGRlbnNpdHkgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eTsKKyAgICAgICAgbU1pbkNlbGxTaXplID0gKGludCkgKE1JTl9DRUxMX1NJWkUgKiBkZW5zaXR5KTsKKyAgICAgICAgbUdlbmVyYXRlZEl0ZW1QYWRkaW5nID0gKGludCkgKEdFTkVSQVRFRF9JVEVNX1BBRERJTkcgKiBkZW5zaXR5KTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQcmVzZW50ZXIoQWN0aW9uTWVudVByZXNlbnRlciBwcmVzZW50ZXIpIHsKKyAgICAgICAgbVByZXNlbnRlciA9IHByZXNlbnRlcjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7CisgICAgICAgIHN1cGVyLm9uQ29uZmlndXJhdGlvbkNoYW5nZWQobmV3Q29uZmlnKTsKKyAgICAgICAgbVByZXNlbnRlci51cGRhdGVNZW51VmlldyhmYWxzZSk7CisKKyAgICAgICAgaWYgKG1QcmVzZW50ZXIgIT0gbnVsbCAmJiBtUHJlc2VudGVyLmlzT3ZlcmZsb3dNZW51U2hvd2luZygpKSB7CisgICAgICAgICAgICBtUHJlc2VudGVyLmhpZGVPdmVyZmxvd01lbnUoKTsKKyAgICAgICAgICAgIG1QcmVzZW50ZXIuc2hvd092ZXJmbG93TWVudSgpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKKyAgICAgICAgLy8gSWYgd2UndmUgYmVlbiBnaXZlbiBhbiBleGFjdCBzaXplIHRvIG1hdGNoLCBhcHBseSBzcGVjaWFsIGZvcm1hdHRpbmcgZHVyaW5nIGxheW91dC4KKyAgICAgICAgZmluYWwgYm9vbGVhbiB3YXNGb3JtYXR0ZWQgPSBtRm9ybWF0SXRlbXM7CisgICAgICAgIG1Gb3JtYXRJdGVtcyA9IE1lYXN1cmVTcGVjLmdldE1vZGUod2lkdGhNZWFzdXJlU3BlYykgPT0gTWVhc3VyZVNwZWMuRVhBQ1RMWTsKKworICAgICAgICBpZiAod2FzRm9ybWF0dGVkICE9IG1Gb3JtYXRJdGVtcykgeworICAgICAgICAgICAgbUZvcm1hdEl0ZW1zV2lkdGggPSAwOyAvLyBSZXNldCB0aGlzIHdoZW4gc3dpdGNoaW5nIG1vZGVzCisgICAgICAgIH0KKworICAgICAgICAvLyBTcGVjaWFsIGZvcm1hdHRpbmcgY2FuIGNoYW5nZSB3aGV0aGVyIGl0ZW1zIGNhbiBmaXQgYXMgYWN0aW9uIGJ1dHRvbnMuCisgICAgICAgIC8vIEtpY2sgdGhlIG1lbnUgYW5kIHVwZGF0ZSBwcmVzZW50ZXJzIHdoZW4gdGhpcyBjaGFuZ2VzLgorICAgICAgICBmaW5hbCBpbnQgd2lkdGhTaXplID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZSh3aWR0aE1lYXN1cmVTcGVjKTsKKyAgICAgICAgaWYgKG1Gb3JtYXRJdGVtcyAmJiBtTWVudSAhPSBudWxsICYmIHdpZHRoU2l6ZSAhPSBtRm9ybWF0SXRlbXNXaWR0aCkgeworICAgICAgICAgICAgbUZvcm1hdEl0ZW1zV2lkdGggPSB3aWR0aFNpemU7CisgICAgICAgICAgICBtTWVudS5vbkl0ZW1zQ2hhbmdlZCh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtRm9ybWF0SXRlbXMpIHsKKyAgICAgICAgICAgIG9uTWVhc3VyZUV4YWN0Rm9ybWF0KHdpZHRoTWVhc3VyZVNwZWMsIGhlaWdodE1lYXN1cmVTcGVjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFByZXZpb3VzIG1lYXN1cmVtZW50IGF0IGV4YWN0IGZvcm1hdCBtYXkgaGF2ZSBzZXQgbWFyZ2lucyAtIHJlc2V0IHRoZW0uCisgICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRDb3VudCA9IGdldENoaWxkQ291bnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldENoaWxkQXQoaSk7CisgICAgICAgICAgICAgICAgZmluYWwgTGF5b3V0UGFyYW1zIGxwID0gKExheW91dFBhcmFtcykgY2hpbGQuZ2V0TGF5b3V0UGFyYW1zKCk7CisgICAgICAgICAgICAgICAgbHAubGVmdE1hcmdpbiA9IGxwLnJpZ2h0TWFyZ2luID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1cGVyLm9uTWVhc3VyZSh3aWR0aE1lYXN1cmVTcGVjLCBoZWlnaHRNZWFzdXJlU3BlYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgb25NZWFzdXJlRXhhY3RGb3JtYXQoaW50IHdpZHRoTWVhc3VyZVNwZWMsIGludCBoZWlnaHRNZWFzdXJlU3BlYykgeworICAgICAgICAvLyBXZSBhbHJlYWR5IGtub3cgdGhlIHdpZHRoIG1vZGUgaXMgRVhBQ1RMWSBpZiB3ZSdyZSBoZXJlLgorICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0TW9kZSA9IE1lYXN1cmVTcGVjLmdldE1vZGUoaGVpZ2h0TWVhc3VyZVNwZWMpOworICAgICAgICBpbnQgd2lkdGhTaXplID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZSh3aWR0aE1lYXN1cmVTcGVjKTsKKyAgICAgICAgaW50IGhlaWdodFNpemUgPSBNZWFzdXJlU3BlYy5nZXRTaXplKGhlaWdodE1lYXN1cmVTcGVjKTsKKworICAgICAgICBmaW5hbCBpbnQgd2lkdGhQYWRkaW5nID0gZ2V0UGFkZGluZ0xlZnQoKSArIGdldFBhZGRpbmdSaWdodCgpOworICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0UGFkZGluZyA9IGdldFBhZGRpbmdUb3AoKSArIGdldFBhZGRpbmdCb3R0b20oKTsKKworICAgICAgICBmaW5hbCBpbnQgaXRlbUhlaWdodFNwZWMgPSBnZXRDaGlsZE1lYXN1cmVTcGVjKGhlaWdodE1lYXN1cmVTcGVjLCBoZWlnaHRQYWRkaW5nLAorICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKTsKKworICAgICAgICB3aWR0aFNpemUgLT0gd2lkdGhQYWRkaW5nOworCisgICAgICAgIC8vIERpdmlkZSB0aGUgdmlldyBpbnRvIGNlbGxzLgorICAgICAgICBmaW5hbCBpbnQgY2VsbENvdW50ID0gd2lkdGhTaXplIC8gbU1pbkNlbGxTaXplOworICAgICAgICBmaW5hbCBpbnQgY2VsbFNpemVSZW1haW5pbmcgPSB3aWR0aFNpemUgJSBtTWluQ2VsbFNpemU7CisKKyAgICAgICAgaWYgKGNlbGxDb3VudCA9PSAwKSB7CisgICAgICAgICAgICAvLyBHaXZlIHVwLCBub3RoaW5nIGZpdHMuCisgICAgICAgICAgICBzZXRNZWFzdXJlZERpbWVuc2lvbih3aWR0aFNpemUsIDApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgaW50IGNlbGxTaXplID0gbU1pbkNlbGxTaXplICsgY2VsbFNpemVSZW1haW5pbmcgLyBjZWxsQ291bnQ7CisKKyAgICAgICAgaW50IGNlbGxzUmVtYWluaW5nID0gY2VsbENvdW50OworICAgICAgICBpbnQgbWF4Q2hpbGRIZWlnaHQgPSAwOworICAgICAgICBpbnQgbWF4Q2VsbHNVc2VkID0gMDsKKyAgICAgICAgaW50IGV4cGFuZGFibGVJdGVtQ291bnQgPSAwOworICAgICAgICBpbnQgdmlzaWJsZUl0ZW1Db3VudCA9IDA7CisgICAgICAgIGJvb2xlYW4gaGFzT3ZlcmZsb3cgPSBmYWxzZTsKKworICAgICAgICAvLyBUaGlzIGlzIHVzZWQgYXMgYSBiaXRmaWVsZCB0byBsb2NhdGUgdGhlIHNtYWxsZXN0IGl0ZW1zIHByZXNlbnQuIEFzc3VtZXMgY2hpbGRDb3VudCA8IDY0LgorICAgICAgICBsb25nIHNtYWxsZXN0SXRlbXNBdCA9IDA7CisKKyAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBnZXRDaGlsZENvdW50KCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgIGlmIChjaGlsZC5nZXRWaXNpYmlsaXR5KCkgPT0gR09ORSkgY29udGludWU7CisKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNHZW5lcmF0ZWRJdGVtID0gY2hpbGQgaW5zdGFuY2VvZiBBY3Rpb25NZW51SXRlbVZpZXc7CisgICAgICAgICAgICB2aXNpYmxlSXRlbUNvdW50Kys7CisKKyAgICAgICAgICAgIGlmIChpc0dlbmVyYXRlZEl0ZW0pIHsKKyAgICAgICAgICAgICAgICAvLyBSZXNldCBwYWRkaW5nIGZvciBnZW5lcmF0ZWQgbWVudSBpdGVtIHZpZXdzOyBpdCBtYXkgY2hhbmdlIGJlbG93CisgICAgICAgICAgICAgICAgLy8gYW5kIHZpZXdzIGFyZSByZWN5Y2xlZC4KKyAgICAgICAgICAgICAgICBjaGlsZC5zZXRQYWRkaW5nKG1HZW5lcmF0ZWRJdGVtUGFkZGluZywgMCwgbUdlbmVyYXRlZEl0ZW1QYWRkaW5nLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgTGF5b3V0UGFyYW1zIGxwID0gKExheW91dFBhcmFtcykgY2hpbGQuZ2V0TGF5b3V0UGFyYW1zKCk7CisgICAgICAgICAgICBscC5leHBhbmRlZCA9IGZhbHNlOworICAgICAgICAgICAgbHAuZXh0cmFQaXhlbHMgPSAwOworICAgICAgICAgICAgbHAuY2VsbHNVc2VkID0gMDsKKyAgICAgICAgICAgIGxwLmV4cGFuZGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGxwLmxlZnRNYXJnaW4gPSAwOworICAgICAgICAgICAgbHAucmlnaHRNYXJnaW4gPSAwOworICAgICAgICAgICAgbHAucHJldmVudEVkZ2VPZmZzZXQgPSBpc0dlbmVyYXRlZEl0ZW0gJiYgKChBY3Rpb25NZW51SXRlbVZpZXcpIGNoaWxkKS5oYXNUZXh0KCk7CisKKyAgICAgICAgICAgIC8vIE92ZXJmbG93IGFsd2F5cyBnZXRzIDEgY2VsbC4gTm8gbW9yZSwgbm8gbGVzcy4KKyAgICAgICAgICAgIGZpbmFsIGludCBjZWxsc0F2YWlsYWJsZSA9IGxwLmlzT3ZlcmZsb3dCdXR0b24gPyAxIDogY2VsbHNSZW1haW5pbmc7CisKKyAgICAgICAgICAgIGZpbmFsIGludCBjZWxsc1VzZWQgPSBtZWFzdXJlQ2hpbGRGb3JDZWxscyhjaGlsZCwgY2VsbFNpemUsIGNlbGxzQXZhaWxhYmxlLAorICAgICAgICAgICAgICAgICAgICBpdGVtSGVpZ2h0U3BlYywgaGVpZ2h0UGFkZGluZyk7CisKKyAgICAgICAgICAgIG1heENlbGxzVXNlZCA9IE1hdGgubWF4KG1heENlbGxzVXNlZCwgY2VsbHNVc2VkKTsKKyAgICAgICAgICAgIGlmIChscC5leHBhbmRhYmxlKSBleHBhbmRhYmxlSXRlbUNvdW50Kys7CisgICAgICAgICAgICBpZiAobHAuaXNPdmVyZmxvd0J1dHRvbikgaGFzT3ZlcmZsb3cgPSB0cnVlOworCisgICAgICAgICAgICBjZWxsc1JlbWFpbmluZyAtPSBjZWxsc1VzZWQ7CisgICAgICAgICAgICBtYXhDaGlsZEhlaWdodCA9IE1hdGgubWF4KG1heENoaWxkSGVpZ2h0LCBjaGlsZC5nZXRNZWFzdXJlZEhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChjZWxsc1VzZWQgPT0gMSkgc21hbGxlc3RJdGVtc0F0IHw9ICgxIDw8IGkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2hlbiB3ZSBoYXZlIG92ZXJmbG93IGFuZCBhIHNpbmdsZSBleHBhbmRlZCAodGV4dCkgaXRlbSwgd2Ugd2FudCB0byB0cnkgY2VudGVyaW5nIGl0CisgICAgICAgIC8vIHZpc3VhbGx5IGluIHRoZSBhdmFpbGFibGUgc3BhY2UgZXZlbiB0aG91Z2ggb3ZlcmZsb3cgY29uc3VtZXMgc29tZSBvZiBpdC4KKyAgICAgICAgZmluYWwgYm9vbGVhbiBjZW50ZXJTaW5nbGVFeHBhbmRlZEl0ZW0gPSBoYXNPdmVyZmxvdyAmJiB2aXNpYmxlSXRlbUNvdW50ID09IDI7CisKKyAgICAgICAgLy8gRGl2aWRlIHNwYWNlIGZvciByZW1haW5pbmcgY2VsbHMgaWYgd2UgaGF2ZSBpdGVtcyB0aGF0IGNhbiBleHBhbmQuCisgICAgICAgIC8vIFRyeSBkaXN0cmlidXRpbmcgd2hvbGUgbGVmdG92ZXIgY2VsbHMgdG8gc21hbGxlciBpdGVtcyBmaXJzdC4KKworICAgICAgICBib29sZWFuIG5lZWRzRXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgIHdoaWxlIChleHBhbmRhYmxlSXRlbUNvdW50ID4gMCAmJiBjZWxsc1JlbWFpbmluZyA+IDApIHsKKyAgICAgICAgICAgIGludCBtaW5DZWxscyA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgICAgICAgICAgbG9uZyBtaW5DZWxsc0F0ID0gMDsgLy8gQml0IGxvY2F0aW9ucyBhcmUgaW5kaWNlcyBvZiByZWxldmFudCBjaGlsZCB2aWV3cworICAgICAgICAgICAgaW50IG1pbkNlbGxzSXRlbUNvdW50ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldENoaWxkQXQoaSk7CisgICAgICAgICAgICAgICAgZmluYWwgTGF5b3V0UGFyYW1zIGxwID0gKExheW91dFBhcmFtcykgY2hpbGQuZ2V0TGF5b3V0UGFyYW1zKCk7CisKKyAgICAgICAgICAgICAgICAvLyBEb24ndCB0cnkgdG8gZXhwYW5kIGl0ZW1zIHRoYXQgc2hvdWxkbid0LgorICAgICAgICAgICAgICAgIGlmICghbHAuZXhwYW5kYWJsZSkgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAvLyBNYXJrIGluZGljZXMgb2YgY2hpbGRyZW4gdGhhdCBjYW4gcmVjZWl2ZSBhbiBleHRyYSBjZWxsLgorICAgICAgICAgICAgICAgIGlmIChscC5jZWxsc1VzZWQgPCBtaW5DZWxscykgeworICAgICAgICAgICAgICAgICAgICBtaW5DZWxscyA9IGxwLmNlbGxzVXNlZDsKKyAgICAgICAgICAgICAgICAgICAgbWluQ2VsbHNBdCA9IDEgPDwgaTsKKyAgICAgICAgICAgICAgICAgICAgbWluQ2VsbHNJdGVtQ291bnQgPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobHAuY2VsbHNVc2VkID09IG1pbkNlbGxzKSB7CisgICAgICAgICAgICAgICAgICAgIG1pbkNlbGxzQXQgfD0gMSA8PCBpOworICAgICAgICAgICAgICAgICAgICBtaW5DZWxsc0l0ZW1Db3VudCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSXRlbXMgdGhhdCBnZXQgZXhwYW5kZWQgd2lsbCBhbHdheXMgYmUgaW4gdGhlIHNldCBvZiBzbWFsbGVzdCBpdGVtcyB3aGVuIHdlJ3JlIGRvbmUuCisgICAgICAgICAgICBzbWFsbGVzdEl0ZW1zQXQgfD0gbWluQ2VsbHNBdDsKKworICAgICAgICAgICAgaWYgKG1pbkNlbGxzSXRlbUNvdW50ID4gY2VsbHNSZW1haW5pbmcpIGJyZWFrOyAvLyBDb3VsZG4ndCBleHBhbmQgYW55dGhpbmcgZXZlbmx5LiBTdG9wLgorCisgICAgICAgICAgICAvLyBXZSBoYXZlIGVub3VnaCBjZWxscywgYWxsIG1pbmltdW0gc2l6ZSBpdGVtcyB3aWxsIGJlIGluY3JlbWVudGVkLgorICAgICAgICAgICAgbWluQ2VsbHMrKzsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgbHAgPSAoTGF5b3V0UGFyYW1zKSBjaGlsZC5nZXRMYXlvdXRQYXJhbXMoKTsKKyAgICAgICAgICAgICAgICBpZiAoKG1pbkNlbGxzQXQgJiAoMSA8PCBpKSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGl0ZW0gaXMgYWxyZWFkeSBhdCBvdXIgc21hbGwgaXRlbSBjb3VudCwgbWFyayBpdCBmb3IgbGF0ZXIuCisgICAgICAgICAgICAgICAgICAgIGlmIChscC5jZWxsc1VzZWQgPT0gbWluQ2VsbHMpIHNtYWxsZXN0SXRlbXNBdCB8PSAxIDw8IGk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjZW50ZXJTaW5nbGVFeHBhbmRlZEl0ZW0gJiYgbHAucHJldmVudEVkZ2VPZmZzZXQgJiYgY2VsbHNSZW1haW5pbmcgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBZGQgcGFkZGluZyB0byB0aGlzIGl0ZW0gc3VjaCB0aGF0IGl0IGNlbnRlcnMuCisgICAgICAgICAgICAgICAgICAgIGNoaWxkLnNldFBhZGRpbmcobUdlbmVyYXRlZEl0ZW1QYWRkaW5nICsgY2VsbFNpemUsIDAsIG1HZW5lcmF0ZWRJdGVtUGFkZGluZywgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxwLmNlbGxzVXNlZCsrOworICAgICAgICAgICAgICAgIGxwLmV4cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjZWxsc1JlbWFpbmluZy0tOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZWVkc0V4cGFuc2lvbiA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBEaXZpZGUgYW55IHNwYWNlIGxlZnQgdGhhdCB3b3VsZG4ndCBkaXZpZGUgYWxvbmcgY2VsbCBib3VuZGFyaWVzCisgICAgICAgIC8vIGV2ZW5seSBhbW9uZyB0aGUgc21hbGxlc3QgaXRlbXMKKworICAgICAgICBmaW5hbCBib29sZWFuIHNpbmdsZUl0ZW0gPSAhaGFzT3ZlcmZsb3cgJiYgdmlzaWJsZUl0ZW1Db3VudCA9PSAxOworICAgICAgICBpZiAoY2VsbHNSZW1haW5pbmcgPiAwICYmIHNtYWxsZXN0SXRlbXNBdCAhPSAwICYmCisgICAgICAgICAgICAgICAgKGNlbGxzUmVtYWluaW5nIDwgdmlzaWJsZUl0ZW1Db3VudCAtIDEgfHwgc2luZ2xlSXRlbSB8fCBtYXhDZWxsc1VzZWQgPiAxKSkgeworICAgICAgICAgICAgZmxvYXQgZXhwYW5kQ291bnQgPSBMb25nLmJpdENvdW50KHNtYWxsZXN0SXRlbXNBdCk7CisKKyAgICAgICAgICAgIGlmICghc2luZ2xlSXRlbSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBpdGVtcyBhdCB0aGUgZmFyIGVkZ2VzIG1heSBvbmx5IGV4cGFuZCBieSBoYWxmIGluIG9yZGVyIHRvIHBpbiB0byBlaXRoZXIgc2lkZS4KKyAgICAgICAgICAgICAgICBpZiAoKHNtYWxsZXN0SXRlbXNBdCAmIDEpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zIGxwID0gKExheW91dFBhcmFtcykgZ2V0Q2hpbGRBdCgwKS5nZXRMYXlvdXRQYXJhbXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFscC5wcmV2ZW50RWRnZU9mZnNldCkgZXhwYW5kQ291bnQgLT0gMC41ZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKChzbWFsbGVzdEl0ZW1zQXQgJiAoMSA8PCAoY2hpbGRDb3VudCAtIDEpKSkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMgbHAgPSAoKExheW91dFBhcmFtcykgZ2V0Q2hpbGRBdChjaGlsZENvdW50IC0gMSkuZ2V0TGF5b3V0UGFyYW1zKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWxwLnByZXZlbnRFZGdlT2Zmc2V0KSBleHBhbmRDb3VudCAtPSAwLjVmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgaW50IGV4dHJhUGl4ZWxzID0gZXhwYW5kQ291bnQgPiAwID8KKyAgICAgICAgICAgICAgICAgICAgKGludCkgKGNlbGxzUmVtYWluaW5nICogY2VsbFNpemUgLyBleHBhbmRDb3VudCkgOiAwOworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICgoc21hbGxlc3RJdGVtc0F0ICYgKDEgPDwgaSkpID09IDApIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldENoaWxkQXQoaSk7CisgICAgICAgICAgICAgICAgZmluYWwgTGF5b3V0UGFyYW1zIGxwID0gKExheW91dFBhcmFtcykgY2hpbGQuZ2V0TGF5b3V0UGFyYW1zKCk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgQWN0aW9uTWVudUl0ZW1WaWV3KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgb25lIG9mIG91ciB2aWV3cywgZXhwYW5kIGFuZCBtZWFzdXJlIGF0IHRoZSBsYXJnZXIgc2l6ZS4KKyAgICAgICAgICAgICAgICAgICAgbHAuZXh0cmFQaXhlbHMgPSBleHRyYVBpeGVsczsKKyAgICAgICAgICAgICAgICAgICAgbHAuZXhwYW5kZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwICYmICFscC5wcmV2ZW50RWRnZU9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgaXRlbSBnZXRzIHBhcnQgb2YgaXRzIG5ldyBwYWRkaW5nIHB1c2hlZCBvdXQgb2Ygc2lnaHQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGFzdCBpdGVtIHdpbGwgZ2V0IHRoaXMgaW1wbGljaXRseSBmcm9tIGxheW91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxwLmxlZnRNYXJnaW4gPSAtZXh0cmFQaXhlbHMgLyAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5lZWRzRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxwLmlzT3ZlcmZsb3dCdXR0b24pIHsKKyAgICAgICAgICAgICAgICAgICAgbHAuZXh0cmFQaXhlbHMgPSBleHRyYVBpeGVsczsKKyAgICAgICAgICAgICAgICAgICAgbHAuZXhwYW5kZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBscC5yaWdodE1hcmdpbiA9IC1leHRyYVBpeGVscyAvIDI7CisgICAgICAgICAgICAgICAgICAgIG5lZWRzRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBrbm93IHdoYXQgaXQgaXMsIGdpdmUgaXQgc29tZSBtYXJnaW5zIGluc3RlYWQKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGxldCBpdCBjZW50ZXIgd2l0aGluIGl0cyBzcGFjZS4gV2Ugc3RpbGwgd2FudCB0byBwaW4KKyAgICAgICAgICAgICAgICAgICAgLy8gYWdhaW5zdCB0aGUgZWRnZXMuCisgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxwLmxlZnRNYXJnaW4gPSBleHRyYVBpeGVscyAvIDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gY2hpbGRDb3VudCAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxwLnJpZ2h0TWFyZ2luID0gZXh0cmFQaXhlbHMgLyAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjZWxsc1JlbWFpbmluZyA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1lYXN1cmUgYW55IGl0ZW1zIHRoYXQgaGF2ZSBoYWQgZXh0cmEgc3BhY2UgYWxsb2NhdGVkIHRvIHRoZW0uCisgICAgICAgIGlmIChuZWVkc0V4cGFuc2lvbikgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgbHAgPSAoTGF5b3V0UGFyYW1zKSBjaGlsZC5nZXRMYXlvdXRQYXJhbXMoKTsKKworICAgICAgICAgICAgICAgIGlmICghbHAuZXhwYW5kZWQpIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgZmluYWwgaW50IHdpZHRoID0gbHAuY2VsbHNVc2VkICogY2VsbFNpemUgKyBscC5leHRyYVBpeGVsczsKKyAgICAgICAgICAgICAgICBjaGlsZC5tZWFzdXJlKE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyh3aWR0aCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSksCisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtSGVpZ2h0U3BlYyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGVpZ2h0TW9kZSAhPSBNZWFzdXJlU3BlYy5FWEFDVExZKSB7CisgICAgICAgICAgICBoZWlnaHRTaXplID0gbWF4Q2hpbGRIZWlnaHQ7CisgICAgICAgIH0KKworICAgICAgICBzZXRNZWFzdXJlZERpbWVuc2lvbih3aWR0aFNpemUsIGhlaWdodFNpemUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1lYXN1cmUgYSBjaGlsZCB2aWV3IHRvIGZpdCB3aXRoaW4gY2VsbC1iYXNlZCBmb3JtYXR0aW5nLiBUaGUgY2hpbGQncyB3aWR0aAorICAgICAqIHdpbGwgYmUgbWVhc3VyZWQgdG8gYSB3aG9sZSBtdWx0aXBsZSBvZiBjZWxsU2l6ZS4KKyAgICAgKgorICAgICAqIDxwPlNldHMgdGhlIGV4cGFuZGFibGUgYW5kIGNlbGxzVXNlZCBmaWVsZHMgb2YgTGF5b3V0UGFyYW1zLgorICAgICAqCisgICAgICogQHBhcmFtIGNoaWxkIENoaWxkIHRvIG1lYXN1cmUKKyAgICAgKiBAcGFyYW0gY2VsbFNpemUgU2l6ZSBvZiBvbmUgY2VsbAorICAgICAqIEBwYXJhbSBjZWxsc1JlbWFpbmluZyBOdW1iZXIgb2YgY2VsbHMgcmVtYWluaW5nIHRoYXQgdGhpcyB2aWV3IGNhbiBleHBhbmQgdG8gZmlsbAorICAgICAqIEBwYXJhbSBwYXJlbnRIZWlnaHRNZWFzdXJlU3BlYyBNZWFzdXJlU3BlYyB1c2VkIGJ5IHRoZSBwYXJlbnQgdmlldworICAgICAqIEBwYXJhbSBwYXJlbnRIZWlnaHRQYWRkaW5nIFBhZGRpbmcgcHJlc2VudCBpbiB0aGUgcGFyZW50IHZpZXcKKyAgICAgKiBAcmV0dXJuIE51bWJlciBvZiBjZWxscyB0aGlzIGNoaWxkIHdhcyBtZWFzdXJlZCB0byBvY2N1cHkKKyAgICAgKi8KKyAgICBzdGF0aWMgaW50IG1lYXN1cmVDaGlsZEZvckNlbGxzKFZpZXcgY2hpbGQsIGludCBjZWxsU2l6ZSwgaW50IGNlbGxzUmVtYWluaW5nLAorICAgICAgICAgICAgaW50IHBhcmVudEhlaWdodE1lYXN1cmVTcGVjLCBpbnQgcGFyZW50SGVpZ2h0UGFkZGluZykgeworICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgbHAgPSAoTGF5b3V0UGFyYW1zKSBjaGlsZC5nZXRMYXlvdXRQYXJhbXMoKTsKKworICAgICAgICBmaW5hbCBpbnQgY2hpbGRIZWlnaHRTaXplID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZShwYXJlbnRIZWlnaHRNZWFzdXJlU3BlYykgLQorICAgICAgICAgICAgICAgIHBhcmVudEhlaWdodFBhZGRpbmc7CisgICAgICAgIGZpbmFsIGludCBjaGlsZEhlaWdodE1vZGUgPSBNZWFzdXJlU3BlYy5nZXRNb2RlKHBhcmVudEhlaWdodE1lYXN1cmVTcGVjKTsKKyAgICAgICAgZmluYWwgaW50IGNoaWxkSGVpZ2h0U3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhjaGlsZEhlaWdodFNpemUsIGNoaWxkSGVpZ2h0TW9kZSk7CisKKyAgICAgICAgZmluYWwgQWN0aW9uTWVudUl0ZW1WaWV3IGl0ZW1WaWV3ID0gY2hpbGQgaW5zdGFuY2VvZiBBY3Rpb25NZW51SXRlbVZpZXcgPworICAgICAgICAgICAgICAgIChBY3Rpb25NZW51SXRlbVZpZXcpIGNoaWxkIDogbnVsbDsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBoYXNUZXh0ID0gaXRlbVZpZXcgIT0gbnVsbCAmJiBpdGVtVmlldy5oYXNUZXh0KCk7CisKKyAgICAgICAgaW50IGNlbGxzVXNlZCA9IDA7CisgICAgICAgIGlmIChjZWxsc1JlbWFpbmluZyA+IDAgJiYgKCFoYXNUZXh0IHx8IGNlbGxzUmVtYWluaW5nID49IDIpKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRXaWR0aFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoCisgICAgICAgICAgICAgICAgICAgIGNlbGxTaXplICogY2VsbHNSZW1haW5pbmcsIE1lYXN1cmVTcGVjLkFUX01PU1QpOworICAgICAgICAgICAgY2hpbGQubWVhc3VyZShjaGlsZFdpZHRoU3BlYywgY2hpbGRIZWlnaHRTcGVjKTsKKworICAgICAgICAgICAgZmluYWwgaW50IG1lYXN1cmVkV2lkdGggPSBjaGlsZC5nZXRNZWFzdXJlZFdpZHRoKCk7CisgICAgICAgICAgICBjZWxsc1VzZWQgPSBtZWFzdXJlZFdpZHRoIC8gY2VsbFNpemU7CisgICAgICAgICAgICBpZiAobWVhc3VyZWRXaWR0aCAlIGNlbGxTaXplICE9IDApIGNlbGxzVXNlZCsrOworICAgICAgICAgICAgaWYgKGhhc1RleHQgJiYgY2VsbHNVc2VkIDwgMikgY2VsbHNVc2VkID0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGJvb2xlYW4gZXhwYW5kYWJsZSA9ICFscC5pc092ZXJmbG93QnV0dG9uICYmIGhhc1RleHQ7CisgICAgICAgIGxwLmV4cGFuZGFibGUgPSBleHBhbmRhYmxlOworCisgICAgICAgIGxwLmNlbGxzVXNlZCA9IGNlbGxzVXNlZDsKKyAgICAgICAgZmluYWwgaW50IHRhcmdldFdpZHRoID0gY2VsbHNVc2VkICogY2VsbFNpemU7CisgICAgICAgIGNoaWxkLm1lYXN1cmUoTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKHRhcmdldFdpZHRoLCBNZWFzdXJlU3BlYy5FWEFDVExZKSwKKyAgICAgICAgICAgICAgICBjaGlsZEhlaWdodFNwZWMpOworICAgICAgICByZXR1cm4gY2VsbHNVc2VkOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgeworICAgICAgICBpZiAoIW1Gb3JtYXRJdGVtcykgeworICAgICAgICAgICAgc3VwZXIub25MYXlvdXQoY2hhbmdlZCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gZ2V0Q2hpbGRDb3VudCgpOworICAgICAgICBmaW5hbCBpbnQgbWlkVmVydGljYWwgPSAodG9wICsgYm90dG9tKSAvIDI7CisgICAgICAgIGZpbmFsIGludCBkaXZpZGVyV2lkdGggPSBnZXREaXZpZGVyV2lkdGgoKTsKKyAgICAgICAgaW50IG92ZXJmbG93V2lkdGggPSAwOworICAgICAgICBpbnQgbm9uT3ZlcmZsb3dXaWR0aCA9IDA7CisgICAgICAgIGludCBub25PdmVyZmxvd0NvdW50ID0gMDsKKyAgICAgICAgaW50IHdpZHRoUmVtYWluaW5nID0gcmlnaHQgLSBsZWZ0IC0gZ2V0UGFkZGluZ1JpZ2h0KCkgLSBnZXRQYWRkaW5nTGVmdCgpOworICAgICAgICBib29sZWFuIGhhc092ZXJmbG93ID0gZmFsc2U7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMYXlvdXRSdGwgPSBpc0xheW91dFJ0bCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgeworICAgICAgICAgICAgZmluYWwgVmlldyB2ID0gZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgIGlmICh2LmdldFZpc2liaWxpdHkoKSA9PSBHT05FKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIExheW91dFBhcmFtcyBwID0gKExheW91dFBhcmFtcykgdi5nZXRMYXlvdXRQYXJhbXMoKTsKKyAgICAgICAgICAgIGlmIChwLmlzT3ZlcmZsb3dCdXR0b24pIHsKKyAgICAgICAgICAgICAgICBvdmVyZmxvd1dpZHRoID0gdi5nZXRNZWFzdXJlZFdpZHRoKCk7CisgICAgICAgICAgICAgICAgaWYgKGhhc0RpdmlkZXJCZWZvcmVDaGlsZEF0KGkpKSB7CisgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93V2lkdGggKz0gZGl2aWRlcldpZHRoOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGludCBoZWlnaHQgPSB2LmdldE1lYXN1cmVkSGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaW50IHI7CisgICAgICAgICAgICAgICAgaW50IGw7CisgICAgICAgICAgICAgICAgaWYgKGlzTGF5b3V0UnRsKSB7CisgICAgICAgICAgICAgICAgICAgIGwgPSBnZXRQYWRkaW5nTGVmdCgpICsgcC5sZWZ0TWFyZ2luOworICAgICAgICAgICAgICAgICAgICByID0gbCArIG92ZXJmbG93V2lkdGg7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgciA9IGdldFdpZHRoKCkgLSBnZXRQYWRkaW5nUmlnaHQoKSAtIHAucmlnaHRNYXJnaW47CisgICAgICAgICAgICAgICAgICAgIGwgPSByIC0gb3ZlcmZsb3dXaWR0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IHQgPSBtaWRWZXJ0aWNhbCAtIChoZWlnaHQgLyAyKTsKKyAgICAgICAgICAgICAgICBpbnQgYiA9IHQgKyBoZWlnaHQ7CisgICAgICAgICAgICAgICAgdi5sYXlvdXQobCwgdCwgciwgYik7CisKKyAgICAgICAgICAgICAgICB3aWR0aFJlbWFpbmluZyAtPSBvdmVyZmxvd1dpZHRoOworICAgICAgICAgICAgICAgIGhhc092ZXJmbG93ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IHNpemUgPSB2LmdldE1lYXN1cmVkV2lkdGgoKSArIHAubGVmdE1hcmdpbiArIHAucmlnaHRNYXJnaW47CisgICAgICAgICAgICAgICAgbm9uT3ZlcmZsb3dXaWR0aCArPSBzaXplOworICAgICAgICAgICAgICAgIHdpZHRoUmVtYWluaW5nIC09IHNpemU7CisgICAgICAgICAgICAgICAgaWYgKGhhc0RpdmlkZXJCZWZvcmVDaGlsZEF0KGkpKSB7CisgICAgICAgICAgICAgICAgICAgIG5vbk92ZXJmbG93V2lkdGggKz0gZGl2aWRlcldpZHRoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub25PdmVyZmxvd0NvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hpbGRDb3VudCA9PSAxICYmICFoYXNPdmVyZmxvdykgeworICAgICAgICAgICAgLy8gQ2VudGVyIGEgc2luZ2xlIGNoaWxkCisgICAgICAgICAgICBmaW5hbCBWaWV3IHYgPSBnZXRDaGlsZEF0KDApOworICAgICAgICAgICAgZmluYWwgaW50IHdpZHRoID0gdi5nZXRNZWFzdXJlZFdpZHRoKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gdi5nZXRNZWFzdXJlZEhlaWdodCgpOworICAgICAgICAgICAgZmluYWwgaW50IG1pZEhvcml6b250YWwgPSAocmlnaHQgLSBsZWZ0KSAvIDI7CisgICAgICAgICAgICBmaW5hbCBpbnQgbCA9IG1pZEhvcml6b250YWwgLSB3aWR0aCAvIDI7CisgICAgICAgICAgICBmaW5hbCBpbnQgdCA9IG1pZFZlcnRpY2FsIC0gaGVpZ2h0IC8gMjsKKyAgICAgICAgICAgIHYubGF5b3V0KGwsIHQsIGwgKyB3aWR0aCwgdCArIGhlaWdodCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgc3BhY2VyQ291bnQgPSBub25PdmVyZmxvd0NvdW50IC0gKGhhc092ZXJmbG93ID8gMCA6IDEpOworICAgICAgICBmaW5hbCBpbnQgc3BhY2VyU2l6ZSA9IE1hdGgubWF4KDAsIHNwYWNlckNvdW50ID4gMCA/IHdpZHRoUmVtYWluaW5nIC8gc3BhY2VyQ291bnQgOiAwKTsKKworICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKKyAgICAgICAgICAgIGludCBzdGFydFJpZ2h0ID0gZ2V0V2lkdGgoKSAtIGdldFBhZGRpbmdSaWdodCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IHYgPSBnZXRDaGlsZEF0KGkpOworICAgICAgICAgICAgICAgIGZpbmFsIExheW91dFBhcmFtcyBscCA9IChMYXlvdXRQYXJhbXMpIHYuZ2V0TGF5b3V0UGFyYW1zKCk7CisgICAgICAgICAgICAgICAgaWYgKHYuZ2V0VmlzaWJpbGl0eSgpID09IEdPTkUgfHwgbHAuaXNPdmVyZmxvd0J1dHRvbikgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdGFydFJpZ2h0IC09IGxwLnJpZ2h0TWFyZ2luOworICAgICAgICAgICAgICAgIGludCB3aWR0aCA9IHYuZ2V0TWVhc3VyZWRXaWR0aCgpOworICAgICAgICAgICAgICAgIGludCBoZWlnaHQgPSB2LmdldE1lYXN1cmVkSGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaW50IHQgPSBtaWRWZXJ0aWNhbCAtIGhlaWdodCAvIDI7CisgICAgICAgICAgICAgICAgdi5sYXlvdXQoc3RhcnRSaWdodCAtIHdpZHRoLCB0LCBzdGFydFJpZ2h0LCB0ICsgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBzdGFydFJpZ2h0IC09IHdpZHRoICsgbHAubGVmdE1hcmdpbiArIHNwYWNlclNpemU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgc3RhcnRMZWZ0ID0gZ2V0UGFkZGluZ0xlZnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmluYWwgVmlldyB2ID0gZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgbHAgPSAoTGF5b3V0UGFyYW1zKSB2LmdldExheW91dFBhcmFtcygpOworICAgICAgICAgICAgICAgIGlmICh2LmdldFZpc2liaWxpdHkoKSA9PSBHT05FIHx8IGxwLmlzT3ZlcmZsb3dCdXR0b24pIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3RhcnRMZWZ0ICs9IGxwLmxlZnRNYXJnaW47CisgICAgICAgICAgICAgICAgaW50IHdpZHRoID0gdi5nZXRNZWFzdXJlZFdpZHRoKCk7CisgICAgICAgICAgICAgICAgaW50IGhlaWdodCA9IHYuZ2V0TWVhc3VyZWRIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBpbnQgdCA9IG1pZFZlcnRpY2FsIC0gaGVpZ2h0IC8gMjsKKyAgICAgICAgICAgICAgICB2LmxheW91dChzdGFydExlZnQsIHQsIHN0YXJ0TGVmdCArIHdpZHRoLCB0ICsgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBzdGFydExlZnQgKz0gd2lkdGggKyBscC5yaWdodE1hcmdpbiArIHNwYWNlclNpemU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkRldGFjaGVkRnJvbVdpbmRvdygpIHsKKyAgICAgICAgc3VwZXIub25EZXRhY2hlZEZyb21XaW5kb3coKTsKKyAgICAgICAgbVByZXNlbnRlci5kaXNtaXNzUG9wdXBNZW51cygpOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBib29sZWFuIGlzT3ZlcmZsb3dSZXNlcnZlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1SZXNlcnZlT3ZlcmZsb3c7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHZvaWQgc2V0T3ZlcmZsb3dSZXNlcnZlZChib29sZWFuIHJlc2VydmVPdmVyZmxvdykgeworICAgICAgICBtUmVzZXJ2ZU92ZXJmbG93ID0gcmVzZXJ2ZU92ZXJmbG93OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBMYXlvdXRQYXJhbXMgZ2VuZXJhdGVEZWZhdWx0TGF5b3V0UGFyYW1zKCkgeworICAgICAgICBMYXlvdXRQYXJhbXMgcGFyYW1zID0gbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULAorICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpOworICAgICAgICBwYXJhbXMuZ3Jhdml0eSA9IEdyYXZpdHkuQ0VOVEVSX1ZFUlRJQ0FMOworICAgICAgICByZXR1cm4gcGFyYW1zOworICAgIH0KKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgTGF5b3V0UGFyYW1zIGdlbmVyYXRlTGF5b3V0UGFyYW1zKEF0dHJpYnV0ZVNldCBhdHRycykgeworICAgICAgICByZXR1cm4gbmV3IExheW91dFBhcmFtcyhnZXRDb250ZXh0KCksIGF0dHJzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgTGF5b3V0UGFyYW1zIGdlbmVyYXRlTGF5b3V0UGFyYW1zKFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgcCkgeworICAgICAgICBpZiAocCAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgcmVzdWx0ID0gcCBpbnN0YW5jZW9mIExheW91dFBhcmFtcworICAgICAgICAgICAgICAgICAgICA/IG5ldyBMYXlvdXRQYXJhbXMoKExheW91dFBhcmFtcykgcCkKKyAgICAgICAgICAgICAgICAgICAgOiBuZXcgTGF5b3V0UGFyYW1zKHApOworICAgICAgICAgICAgaWYgKHJlc3VsdC5ncmF2aXR5IDw9IEdyYXZpdHkuTk9fR1JBVklUWSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5ncmF2aXR5ID0gR3Jhdml0eS5DRU5URVJfVkVSVElDQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBnZW5lcmF0ZURlZmF1bHRMYXlvdXRQYXJhbXMoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja0xheW91dFBhcmFtcyhWaWV3R3JvdXAuTGF5b3V0UGFyYW1zIHApIHsKKyAgICAgICAgcmV0dXJuIHAgIT0gbnVsbCAmJiBwIGluc3RhbmNlb2YgTGF5b3V0UGFyYW1zOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBMYXlvdXRQYXJhbXMgZ2VuZXJhdGVPdmVyZmxvd0J1dHRvbkxheW91dFBhcmFtcygpIHsKKyAgICAgICAgTGF5b3V0UGFyYW1zIHJlc3VsdCA9IGdlbmVyYXRlRGVmYXVsdExheW91dFBhcmFtcygpOworICAgICAgICByZXN1bHQuaXNPdmVyZmxvd0J1dHRvbiA9IHRydWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIGJvb2xlYW4gaW52b2tlSXRlbShNZW51SXRlbUltcGwgaXRlbSkgeworICAgICAgICByZXR1cm4gbU1lbnUucGVyZm9ybUl0ZW1BY3Rpb24oaXRlbSwgMCk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIGludCBnZXRXaW5kb3dBbmltYXRpb25zKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKE1lbnVCdWlsZGVyIG1lbnUpIHsKKyAgICAgICAgbU1lbnUgPSBtZW51OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIE1lbnUgb2JqZWN0IHRoYXQgdGhpcyBBY3Rpb25NZW51VmlldyBpcyBjdXJyZW50bHkgcHJlc2VudGluZy4KKyAgICAgKgorICAgICAqIDxwPkFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoaXMgbWV0aG9kIHRvIG9idGFpbiB0aGUgQWN0aW9uTWVudVZpZXcncyBNZW51IG9iamVjdAorICAgICAqIGFuZCBpbmZsYXRlIG9yIGFkZCBjb250ZW50IHRvIGl0IGFzIG5lY2Vzc2FyeS48L3A+CisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBNZW51IHByZXNlbnRlZCBieSB0aGlzIHZpZXcKKyAgICAgKi8KKyAgICBwdWJsaWMgTWVudSBnZXRNZW51KCkgeworICAgICAgICBpZiAobU1lbnUgPT0gbnVsbCkgeworICAgICAgICAgICAgZmluYWwgQ29udGV4dCBjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgICAgICAgICAgbU1lbnUgPSBuZXcgTWVudUJ1aWxkZXIoY29udGV4dCk7CisgICAgICAgICAgICBtUHJlc2VudGVyID0gbmV3IEFjdGlvbk1lbnVQcmVzZW50ZXIoY29udGV4dCk7CisgICAgICAgICAgICBtUHJlc2VudGVyLmluaXRGb3JNZW51KGNvbnRleHQsIG1NZW51KTsKKyAgICAgICAgICAgIG1QcmVzZW50ZXIuc2V0TWVudVZpZXcodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbU1lbnU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUgUHJpdmF0ZSBMaW5lYXJMYXlvdXQgKHN1cGVyY2xhc3MpIEFQSS4gVW4taGlkZSBpZiBMaW5lYXJMYXlvdXQgQVBJIGlzIG1hZGUgcHVibGljLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBib29sZWFuIGhhc0RpdmlkZXJCZWZvcmVDaGlsZEF0KGludCBjaGlsZEluZGV4KSB7CisgICAgICAgIGlmIChjaGlsZEluZGV4ID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBWaWV3IGNoaWxkQmVmb3JlID0gZ2V0Q2hpbGRBdChjaGlsZEluZGV4IC0gMSk7CisgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRDaGlsZEF0KGNoaWxkSW5kZXgpOworICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBpZiAoY2hpbGRJbmRleCA8IGdldENoaWxkQ291bnQoKSAmJiBjaGlsZEJlZm9yZSBpbnN0YW5jZW9mIEFjdGlvbk1lbnVDaGlsZFZpZXcpIHsKKyAgICAgICAgICAgIHJlc3VsdCB8PSAoKEFjdGlvbk1lbnVDaGlsZFZpZXcpIGNoaWxkQmVmb3JlKS5uZWVkc0RpdmlkZXJBZnRlcigpOworICAgICAgICB9CisgICAgICAgIGlmIChjaGlsZEluZGV4ID4gMCAmJiBjaGlsZCBpbnN0YW5jZW9mIEFjdGlvbk1lbnVDaGlsZFZpZXcpIHsKKyAgICAgICAgICAgIHJlc3VsdCB8PSAoKEFjdGlvbk1lbnVDaGlsZFZpZXcpIGNoaWxkKS5uZWVkc0RpdmlkZXJCZWZvcmUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgaW50ZXJmYWNlIEFjdGlvbk1lbnVDaGlsZFZpZXcgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBuZWVkc0RpdmlkZXJCZWZvcmUoKTsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gbmVlZHNEaXZpZGVyQWZ0ZXIoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIExheW91dFBhcmFtcyBleHRlbmRzIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMgeworICAgICAgICAvKiogQGhpZGUgKi8KKyAgICAgICAgQFZpZXdEZWJ1Zy5FeHBvcnRlZFByb3BlcnR5KGNhdGVnb3J5ID0gImxheW91dCIpCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzT3ZlcmZsb3dCdXR0b247CisKKyAgICAgICAgLyoqIEBoaWRlICovCisgICAgICAgIEBWaWV3RGVidWcuRXhwb3J0ZWRQcm9wZXJ0eShjYXRlZ29yeSA9ICJsYXlvdXQiKQorICAgICAgICBwdWJsaWMgaW50IGNlbGxzVXNlZDsKKworICAgICAgICAvKiogQGhpZGUgKi8KKyAgICAgICAgQFZpZXdEZWJ1Zy5FeHBvcnRlZFByb3BlcnR5KGNhdGVnb3J5ID0gImxheW91dCIpCisgICAgICAgIHB1YmxpYyBpbnQgZXh0cmFQaXhlbHM7CisKKyAgICAgICAgLyoqIEBoaWRlICovCisgICAgICAgIEBWaWV3RGVidWcuRXhwb3J0ZWRQcm9wZXJ0eShjYXRlZ29yeSA9ICJsYXlvdXQiKQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBleHBhbmRhYmxlOworCisgICAgICAgIC8qKiBAaGlkZSAqLworICAgICAgICBAVmlld0RlYnVnLkV4cG9ydGVkUHJvcGVydHkoY2F0ZWdvcnkgPSAibGF5b3V0IikKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcHJldmVudEVkZ2VPZmZzZXQ7CisKKyAgICAgICAgLyoqIEBoaWRlICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIGV4cGFuZGVkOworCisgICAgICAgIHB1YmxpYyBMYXlvdXRQYXJhbXMoQ29udGV4dCBjLCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKKyAgICAgICAgICAgIHN1cGVyKGMsIGF0dHJzKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBMYXlvdXRQYXJhbXMoVmlld0dyb3VwLkxheW91dFBhcmFtcyBvdGhlcikgeworICAgICAgICAgICAgc3VwZXIob3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMgb3RoZXIpIHsKKyAgICAgICAgICAgIHN1cGVyKChMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKSBvdGhlcik7CisgICAgICAgICAgICBpc092ZXJmbG93QnV0dG9uID0gb3RoZXIuaXNPdmVyZmxvd0J1dHRvbjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBMYXlvdXRQYXJhbXMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgICAgICBzdXBlcih3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGlzT3ZlcmZsb3dCdXR0b24gPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBAaGlkZSAqLworICAgICAgICBwdWJsaWMgTGF5b3V0UGFyYW1zKGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbGVhbiBpc092ZXJmbG93QnV0dG9uKSB7CisgICAgICAgICAgICBzdXBlcih3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIHRoaXMuaXNPdmVyZmxvd0J1dHRvbiA9IGlzT3ZlcmZsb3dCdXR0b247CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWN0aXZpdHlDaG9vc2VyVmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FjdGl2aXR5Q2hvb3NlclZpZXcuamF2YQppbmRleCA4NjEyOTY0Li5mOWFmMmY5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWN0aXZpdHlDaG9vc2VyVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BY3Rpdml0eUNob29zZXJWaWV3LmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQWN0aXZpdHlOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKQEAgLTMxLDcgKzMwLDYgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5BY3Rpb25Qcm92aWRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdUcmVlT2JzZXJ2ZXI7CkBAIC0yMDQsMTMgKzIwMiwzMiBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIGFwcGxpY2F0aW9uIGVudmlyb25tZW50LgogICAgICAqIEBwYXJhbSBhdHRycyBBIGNvbGxlY3Rpb24gb2YgYXR0cmlidXRlcy4KLSAgICAgKiBAcGFyYW0gZGVmU3R5bGUgVGhlIGRlZmF1bHQgc3R5bGUgdG8gYXBwbHkgdG8gdGhpcyB2aWV3LgorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgQW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqLwotICAgIHB1YmxpYyBBY3Rpdml0eUNob29zZXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgQWN0aXZpdHlDaG9vc2VyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudC4KKyAgICAgKiBAcGFyYW0gYXR0cnMgQSBjb2xsZWN0aW9uIG9mIGF0dHJpYnV0ZXMuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICogQHBhcmFtIGRlZlN0eWxlUmVzIEEgcmVzb3VyY2UgaWRlbnRpZmllciBvZiBhIHN0eWxlIHJlc291cmNlIHRoYXQKKyAgICAgKiAgICAgICAgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB2aWV3LCB1c2VkIG9ubHkgaWYKKyAgICAgKiAgICAgICAgZGVmU3R5bGVBdHRyIGlzIDAgb3IgY2FuIG5vdCBiZSBmb3VuZCBpbiB0aGUgdGhlbWUuIENhbiBiZSAwCisgICAgICogICAgICAgIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgQWN0aXZpdHlDaG9vc2VyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBUeXBlZEFycmF5IGF0dHJpYnV0ZXNBcnJheSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5BY3Rpdml0eUNob29zZXJWaWV3LCBkZWZTdHlsZSwgMCk7CisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuQWN0aXZpdHlDaG9vc2VyVmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgbUluaXRpYWxBY3Rpdml0eUNvdW50ID0gYXR0cmlidXRlc0FycmF5LmdldEludCgKICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5BY3Rpdml0eUNob29zZXJWaWV3X2luaXRpYWxBY3Rpdml0eUNvdW50LApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXcuamF2YQppbmRleCBhNWZhZDYwLi45NjJmZmJhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXcuamF2YQpAQCAtMjIzLDE1ICsyMjMsMTkgQEAKICAgICBib29sZWFuIG1CbG9ja0xheW91dFJlcXVlc3RzID0gZmFsc2U7CiAKICAgICBwdWJsaWMgQWRhcHRlclZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KIAogICAgIHB1YmxpYyBBZGFwdGVyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KIAotICAgIHB1YmxpYyBBZGFwdGVyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEFkYXB0ZXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEFkYXB0ZXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCB0aGlzIHZpZXcgaXMgaW1wb3J0YW50IGZvciBhY2Nlc3NpYmlsaXR5LgogICAgICAgICBpZiAoZ2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSgpID09IElNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9BVVRPKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXdBbmltYXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3QW5pbWF0b3IuamF2YQppbmRleCA5MGU5NDlhLi4xYmMyZjRiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXdBbmltYXRvci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlld0FuaW1hdG9yLmphdmEKQEAgLTE3MywxMCArMTczLDE1IEBACiAgICAgfQogCiAgICAgcHVibGljIEFkYXB0ZXJWaWV3QW5pbWF0b3IoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0cik7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BZGFwdGVyVmlld0FuaW1hdG9yLCBkZWZTdHlsZUF0dHIsIDApOworICAgIHB1YmxpYyBBZGFwdGVyVmlld0FuaW1hdG9yKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkFkYXB0ZXJWaWV3QW5pbWF0b3IsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBpbnQgcmVzb3VyY2UgPSBhLmdldFJlc291cmNlSWQoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQWRhcHRlclZpZXdBbmltYXRvcl9pbkFuaW1hdGlvbiwgMCk7CiAgICAgICAgIGlmIChyZXNvdXJjZSA+IDApIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlld0ZsaXBwZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlld0ZsaXBwZXIuamF2YQppbmRleCBhZWEwMjliLi4zYjAyNmJkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXdGbGlwcGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3RmxpcHBlci5qYXZhCkBAIC01OSwxMCArNTksMTkgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQWRhcHRlclZpZXdGbGlwcGVyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BZGFwdGVyVmlld0ZsaXBwZXIpOworICAgIHB1YmxpYyBBZGFwdGVyVmlld0ZsaXBwZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQWRhcHRlclZpZXdGbGlwcGVyKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkFkYXB0ZXJWaWV3RmxpcHBlciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1GbGlwSW50ZXJ2YWwgPSBhLmdldEludCgKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BZGFwdGVyVmlld0ZsaXBwZXJfZmxpcEludGVydmFsLCBERUZBVUxUX0lOVEVSVkFMKTsKICAgICAgICAgbUF1dG9TdGFydCA9IGEuZ2V0Qm9vbGVhbigKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BbmFsb2dDbG9jay5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FuYWxvZ0Nsb2NrLmphdmEKaW5kZXggYzdkYTgxOC4uM2M4OGU5NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FuYWxvZ0Nsb2NrLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FuYWxvZ0Nsb2NrLmphdmEKQEAgLTY3LDEzICs2NywxNiBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgQW5hbG9nQ2xvY2soQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotICAgICAgICBSZXNvdXJjZXMgciA9IG1Db250ZXh0LmdldFJlc291cmNlcygpOwotICAgICAgICBUeXBlZEFycmF5IGEgPQotICAgICAgICAgICAgICAgIGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BbmFsb2dDbG9jaywgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBBbmFsb2dDbG9jayhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBBbmFsb2dDbG9jayhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBSZXNvdXJjZXMgciA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQW5hbG9nQ2xvY2ssIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIG1EaWFsID0gYS5nZXREcmF3YWJsZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BbmFsb2dDbG9ja19kaWFsKTsKICAgICAgICAgaWYgKG1EaWFsID09IG51bGwpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BdXRvQ29tcGxldGVUZXh0Vmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0F1dG9Db21wbGV0ZVRleHRWaWV3LmphdmEKaW5kZXggZjBlYjk0Zi4uMjU5YzY2YjkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BdXRvQ29tcGxldGVUZXh0Vmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BdXRvQ29tcGxldGVUZXh0Vmlldy5qYXZhCkBAIC0xMzMsMTcgKzEzMywyMSBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuYXV0b0NvbXBsZXRlVGV4dFZpZXdTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIEF1dG9Db21wbGV0ZVRleHRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgQXV0b0NvbXBsZXRlVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQXV0b0NvbXBsZXRlVGV4dFZpZXcoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtUG9wdXAgPSBuZXcgTGlzdFBvcHVwV2luZG93KGNvbnRleHQsIGF0dHJzLAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5hdXRvQ29tcGxldGVUZXh0Vmlld1N0eWxlKTsKICAgICAgICAgbVBvcHVwLnNldFNvZnRJbnB1dE1vZGUoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuU09GVF9JTlBVVF9BREpVU1RfUkVTSVpFKTsKICAgICAgICAgbVBvcHVwLnNldFByb21wdFBvc2l0aW9uKExpc3RQb3B1cFdpbmRvdy5QT1NJVElPTl9QUk9NUFRfQkVMT1cpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9Ci0gICAgICAgICAgICBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkF1dG9Db21wbGV0ZVRleHRWaWV3LCBkZWZTdHlsZSwgMCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BdXRvQ29tcGxldGVUZXh0VmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgbVRocmVzaG9sZCA9IGEuZ2V0SW50KAogICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkF1dG9Db21wbGV0ZVRleHRWaWV3X2NvbXBsZXRpb25UaHJlc2hvbGQsIDIpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0J1dHRvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0J1dHRvbi5qYXZhCmluZGV4IDJhYzU2YWMuLjE2NjM2MjAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9CdXR0b24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQnV0dG9uLmphdmEKQEAgLTEwMyw4ICsxMDMsMTIgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmJ1dHRvblN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9DYWxlbmRhclZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9DYWxlbmRhclZpZXcuamF2YQppbmRleCAwOTU3YWI0Li5hODdjN2QyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2FsZW5kYXJWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NhbGVuZGFyVmlldy5qYXZhCkBAIC04MCwyMzQgKzgwLDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HX1RBRyA9IENhbGVuZGFyVmlldy5jbGFzcy5nZXRTaW1wbGVOYW1lKCk7CiAKLSAgICAvKioKLSAgICAgKiBEZWZhdWx0IHZhbHVlIHdoZXRoZXIgdG8gc2hvdyB3ZWVrIG51bWJlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfU0hPV19XRUVLX05VTUJFUiA9IHRydWU7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIGRheS5lCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNSUxMSVNfSU5fREFZID0gODY0MDAwMDBMOwotCi0gICAgLyoqCi0gICAgICogVGhlIG51bWJlciBvZiBkYXkgaW4gYSB3ZWVrLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEQVlTX1BFUl9XRUVLID0gNzsKLQotICAgIC8qKgotICAgICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2Vlay4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIE1JTExJU19JTl9XRUVLID0gREFZU19QRVJfV0VFSyAqIE1JTExJU19JTl9EQVk7Ci0KLSAgICAvKioKLSAgICAgKiBBZmZlY3RzIHdoZW4gdGhlIG1vbnRoIHNlbGVjdGlvbiB3aWxsIGNoYW5nZSB3aGlsZSBzY3JvbGxpbmcgdXBlCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDUk9MTF9IWVNUX1dFRUtTID0gMjsKLQotICAgIC8qKgotICAgICAqIEhvdyBsb25nIHRoZSBHb1RvIGZsaW5nIGFuaW1hdGlvbiBzaG91bGQgbGFzdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgR09UT19TQ1JPTExfRFVSQVRJT04gPSAxMDAwOwotCi0gICAgLyoqCi0gICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBhZGp1c3RtZW50IHVwb24gYSB1c2VyIHNjcm9sbCBpbiBtaWxsaXNlY29uZHMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFESlVTVE1FTlRfU0NST0xMX0RVUkFUSU9OID0gNTAwOwotCi0gICAgLyoqCi0gICAgICogSG93IGxvbmcgdG8gd2FpdCBhZnRlciByZWNlaXZpbmcgYW4gb25TY3JvbGxTdGF0ZUNoYW5nZWQgbm90aWZpY2F0aW9uCi0gICAgICogYmVmb3JlIGFjdGluZyBvbiBpdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0NST0xMX0NIQU5HRV9ERUxBWSA9IDQwOwotCi0gICAgLyoqCi0gICAgICogU3RyaW5nIGZvciBwYXJzaW5nIGRhdGVzLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRFX0ZPUk1BVCA9ICJNTS9kZC95eXl5IjsKLQotICAgIC8qKgotICAgICAqIFRoZSBkZWZhdWx0IG1pbmltYWwgZGF0ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9NSU5fREFURSA9ICIwMS8wMS8xOTAwIjsKLQotICAgIC8qKgotICAgICAqIFRoZSBkZWZhdWx0IG1heGltYWwgZGF0ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9NQVhfREFURSA9ICIwMS8wMS8yMTAwIjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NIT1dOX1dFRUtfQ09VTlQgPSA2OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfREFURV9URVhUX1NJWkUgPSAxNDsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9TRUxFQ1RFRF9EQVRFX1ZFUlRJQ0FMX0JBUl9XSURUSCA9IDY7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5TQ0FMRURfV0VFS19NSU5fVklTSUJMRV9IRUlHSFQgPSAxMjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9MSVNUX1NDUk9MTF9UT1BfT0ZGU0VUID0gMjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9CT1RUT01fQlVGRkVSID0gMjA7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5TQ0FMRURfV0VFS19TRVBBUkFUT1JfTElORV9XSURUSCA9IDE7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9XRUVLX0RBWV9URVhUX0FQUEVBUkFOQ0VfUkVTX0lEID0gLTE7Ci0KLSAgICBwcml2YXRlIGZpbmFsIGludCBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aDsKLQotICAgIHByaXZhdGUgaW50IG1EYXRlVGV4dFNpemU7Ci0KLSAgICBwcml2YXRlIERyYXdhYmxlIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhcjsKLQotICAgIHByaXZhdGUgZmluYWwgaW50IG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhcldpZHRoOwotCi0gICAgcHJpdmF0ZSBpbnQgbVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcjsKLQotICAgIHByaXZhdGUgaW50IG1Gb2N1c2VkTW9udGhEYXRlQ29sb3I7Ci0KLSAgICBwcml2YXRlIGludCBtVW5mb2N1c2VkTW9udGhEYXRlQ29sb3I7Ci0KLSAgICBwcml2YXRlIGludCBtV2Vla1NlcGFyYXRvckxpbmVDb2xvcjsKLQotICAgIHByaXZhdGUgaW50IG1XZWVrTnVtYmVyQ29sb3I7Ci0KLSAgICBwcml2YXRlIGludCBtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQ7Ci0KLSAgICBwcml2YXRlIGludCBtRGF0ZVRleHRBcHBlYXJhbmNlUmVzSWQ7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgdG9wIG9mZnNldCBvZiB0aGUgd2Vla3MgbGlzdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGludCBtTGlzdFNjcm9sbFRvcE9mZnNldCA9IDI7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgdmlzaWJsZSBoZWlnaHQgb2YgYSB3ZWVrIHZpZXcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgbVdlZWtNaW5WaXNpYmxlSGVpZ2h0ID0gMTI7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgdmlzaWJsZSBoZWlnaHQgb2YgYSB3ZWVrIHZpZXcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgbUJvdHRvbUJ1ZmZlciA9IDIwOwotCi0gICAgLyoqCi0gICAgICogVGhlIG51bWJlciBvZiBzaG93biB3ZWVrcy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGludCBtU2hvd25XZWVrQ291bnQ7Ci0KLSAgICAvKioKLSAgICAgKiBGbGFnIHdoZXRoZXIgdG8gc2hvdyB0aGUgd2VlayBudW1iZXIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIG1TaG93V2Vla051bWJlcjsKLQotICAgIC8qKgotICAgICAqIFRoZSBudW1iZXIgb2YgZGF5IHBlciB3ZWVrIHRvIGJlIHNob3duLgotICAgICAqLwotICAgIHByaXZhdGUgaW50IG1EYXlzUGVyV2VlayA9IDc7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZnJpY3Rpb24gb2YgdGhlIHdlZWsgbGlzdCB3aGlsZSBmbGluZ2luZy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZsb2F0IG1GcmljdGlvbiA9IC4wNWY7Ci0KLSAgICAvKioKLSAgICAgKiBTY2FsZSBmb3IgYWRqdXN0aW5nIHZlbG9jaXR5IG9mIHRoZSB3ZWVrIGxpc3Qgd2hpbGUgZmxpbmdpbmcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmbG9hdCBtVmVsb2NpdHlTY2FsZSA9IDAuMzMzZjsKLQotICAgIC8qKgotICAgICAqIFRoZSBhZGFwdGVyIGZvciB0aGUgd2Vla3MgbGlzdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIFdlZWtzQWRhcHRlciBtQWRhcHRlcjsKLQotICAgIC8qKgotICAgICAqIFRoZSB3ZWVrcyBsaXN0LgotICAgICAqLwotICAgIHByaXZhdGUgTGlzdFZpZXcgbUxpc3RWaWV3OwotCi0gICAgLyoqCi0gICAgICogVGhlIG5hbWUgb2YgdGhlIG1vbnRoIHRvIGRpc3BsYXkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBUZXh0VmlldyBtTW9udGhOYW1lOwotCi0gICAgLyoqCi0gICAgICogVGhlIGhlYWRlciB3aXRoIHdlZWsgZGF5IG5hbWVzLgotICAgICAqLwotICAgIHByaXZhdGUgVmlld0dyb3VwIG1EYXlOYW1lc0hlYWRlcjsKLQotICAgIC8qKgotICAgICAqIENhY2hlZCBsYWJlbHMgZm9yIHRoZSB3ZWVrIG5hbWVzIGhlYWRlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIFN0cmluZ1tdIG1EYXlMYWJlbHM7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLgotICAgICAqLwotICAgIHByaXZhdGUgaW50IG1GaXJzdERheU9mV2VlazsKLQotICAgIC8qKgotICAgICAqIFdoaWNoIG1vbnRoIHNob3VsZCBiZSBkaXNwbGF5ZWQvaGlnaGxpZ2h0ZWQgWzAtMTFdLgotICAgICAqLwotICAgIHByaXZhdGUgaW50IG1DdXJyZW50TW9udGhEaXNwbGF5ZWQgPSAtMTsKLQotICAgIC8qKgotICAgICAqIFVzZWQgZm9yIHRyYWNraW5nIGR1cmluZyBhIHNjcm9sbC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGxvbmcgbVByZXZpb3VzU2Nyb2xsUG9zaXRpb247Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIGZvciB0cmFja2luZyB3aGljaCBkaXJlY3Rpb24gdGhlIHZpZXcgaXMgc2Nyb2xsaW5nLgotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNTY3JvbGxpbmdVcCA9IGZhbHNlOwotCi0gICAgLyoqCi0gICAgICogVGhlIHByZXZpb3VzIHNjcm9sbCBzdGF0ZSBvZiB0aGUgd2Vla3MgTGlzdFZpZXcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgbVByZXZpb3VzU2Nyb2xsU3RhdGUgPSBPblNjcm9sbExpc3RlbmVyLlNDUk9MTF9TVEFURV9JRExFOwotCi0gICAgLyoqCi0gICAgICogVGhlIGN1cnJlbnQgc2Nyb2xsIHN0YXRlIG9mIHRoZSB3ZWVrcyBMaXN0Vmlldy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGludCBtQ3VycmVudFNjcm9sbFN0YXRlID0gT25TY3JvbGxMaXN0ZW5lci5TQ1JPTExfU1RBVEVfSURMRTsKLQotICAgIC8qKgotICAgICAqIExpc3RlbmVyIGZvciBjaGFuZ2VzIGluIHRoZSBzZWxlY3RlZCBkYXkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBPbkRhdGVDaGFuZ2VMaXN0ZW5lciBtT25EYXRlQ2hhbmdlTGlzdGVuZXI7Ci0KLSAgICAvKioKLSAgICAgKiBDb21tYW5kIGZvciBhZGp1c3RpbmcgdGhlIHBvc2l0aW9uIGFmdGVyIGEgc2Nyb2xsL2ZsaW5nLgotICAgICAqLwotICAgIHByaXZhdGUgU2Nyb2xsU3RhdGVSdW5uYWJsZSBtU2Nyb2xsU3RhdGVDaGFuZ2VkUnVubmFibGUgPSBuZXcgU2Nyb2xsU3RhdGVSdW5uYWJsZSgpOwotCi0gICAgLyoqCi0gICAgICogVGVtcG9yYXJ5IGluc3RhbmNlIHRvIGF2b2lkIG11bHRpcGxlIGluc3RhbnRpYXRpb25zLgotICAgICAqLwotICAgIHByaXZhdGUgQ2FsZW5kYXIgbVRlbXBEYXRlOwotCi0gICAgLyoqCi0gICAgICogVGhlIGZpcnN0IGRheSBvZiB0aGUgZm9jdXNlZCBtb250aC4KLSAgICAgKi8KLSAgICBwcml2YXRlIENhbGVuZGFyIG1GaXJzdERheU9mTW9udGg7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgc3RhcnQgZGF0ZSBvZiB0aGUgcmFuZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgcGlja2VyLgotICAgICAqLwotICAgIHByaXZhdGUgQ2FsZW5kYXIgbU1pbkRhdGU7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZW5kIGRhdGUgb2YgdGhlIHJhbmdlIHN1cHBvcnRlZCBieSB0aGlzIHBpY2tlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIENhbGVuZGFyIG1NYXhEYXRlOwotCi0gICAgLyoqCi0gICAgICogRGF0ZSBmb3JtYXQgZm9yIHBhcnNpbmcgZGF0ZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBqYXZhLnRleHQuRGF0ZUZvcm1hdCBtRGF0ZUZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KERBVEVfRk9STUFUKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBjdXJyZW50IGxvY2FsZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIExvY2FsZSBtQ3VycmVudExvY2FsZTsKKyAgICBwcml2YXRlIENhbGVuZGFyVmlld0RlbGVnYXRlIG1EZWxlZ2F0ZTsKIAogICAgIC8qKgogICAgICAqIFRoZSBjYWxsYmFjayB1c2VkIHRvIGluZGljYXRlIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGRhdGUuCkBAIC0zMzAsOTEgKzEwMywxNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDYWxlbmRhclZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIFIuYXR0ci5jYWxlbmRhclZpZXdTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIENhbGVuZGFyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCAwKTsKKyAgICBwdWJsaWMgQ2FsZW5kYXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIC8vIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGxvY2FsZQotICAgICAgICBzZXRDdXJyZW50TG9jYWxlKExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIHB1YmxpYyBDYWxlbmRhclZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKLSAgICAgICAgVHlwZWRBcnJheSBhdHRyaWJ1dGVzQXJyYXkgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlldywKLSAgICAgICAgICAgICAgICBSLmF0dHIuY2FsZW5kYXJWaWV3U3R5bGUsIDApOwotICAgICAgICBtU2hvd1dlZWtOdW1iZXIgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfc2hvd1dlZWtOdW1iZXIsCi0gICAgICAgICAgICAgICAgREVGQVVMVF9TSE9XX1dFRUtfTlVNQkVSKTsKLSAgICAgICAgbUZpcnN0RGF5T2ZXZWVrID0gYXR0cmlidXRlc0FycmF5LmdldEludChSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfZmlyc3REYXlPZldlZWssCi0gICAgICAgICAgICAgICAgTG9jYWxlRGF0YS5nZXQoTG9jYWxlLmdldERlZmF1bHQoKSkuZmlyc3REYXlPZldlZWspOwotICAgICAgICBTdHJpbmcgbWluRGF0ZSA9IGF0dHJpYnV0ZXNBcnJheS5nZXRTdHJpbmcoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X21pbkRhdGUpOwotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobWluRGF0ZSkgfHwgIXBhcnNlRGF0ZShtaW5EYXRlLCBtTWluRGF0ZSkpIHsKLSAgICAgICAgICAgIHBhcnNlRGF0ZShERUZBVUxUX01JTl9EQVRFLCBtTWluRGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIG1heERhdGUgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld19tYXhEYXRlKTsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG1heERhdGUpIHx8ICFwYXJzZURhdGUobWF4RGF0ZSwgbU1heERhdGUpKSB7Ci0gICAgICAgICAgICBwYXJzZURhdGUoREVGQVVMVF9NQVhfREFURSwgbU1heERhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtTWF4RGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNYXggZGF0ZSBjYW5ub3QgYmUgYmVmb3JlIG1pbiBkYXRlLiIpOwotICAgICAgICB9Ci0gICAgICAgIG1TaG93bldlZWtDb3VudCA9IGF0dHJpYnV0ZXNBcnJheS5nZXRJbnQoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X3Nob3duV2Vla0NvdW50LAotICAgICAgICAgICAgICAgIERFRkFVTFRfU0hPV05fV0VFS19DT1VOVCk7Ci0gICAgICAgIG1TZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoCi0gICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X3NlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvciwgMCk7Ci0gICAgICAgIG1Gb2N1c2VkTW9udGhEYXRlQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoCi0gICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X2ZvY3VzZWRNb250aERhdGVDb2xvciwgMCk7Ci0gICAgICAgIG1VbmZvY3VzZWRNb250aERhdGVDb2xvciA9IGF0dHJpYnV0ZXNBcnJheS5nZXRDb2xvcigKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfdW5mb2N1c2VkTW9udGhEYXRlQ29sb3IsIDApOwotICAgICAgICBtV2Vla1NlcGFyYXRvckxpbmVDb2xvciA9IGF0dHJpYnV0ZXNBcnJheS5nZXRDb2xvcigKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfd2Vla1NlcGFyYXRvckxpbmVDb2xvciwgMCk7Ci0gICAgICAgIG1XZWVrTnVtYmVyQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X3dlZWtOdW1iZXJDb2xvciwgMCk7Ci0gICAgICAgIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhciA9IGF0dHJpYnV0ZXNBcnJheS5nZXREcmF3YWJsZSgKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfc2VsZWN0ZWREYXRlVmVydGljYWxCYXIpOwotCi0gICAgICAgIG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZCA9IGF0dHJpYnV0ZXNBcnJheS5nZXRSZXNvdXJjZUlkKAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld19kYXRlVGV4dEFwcGVhcmFuY2UsIFIuc3R5bGUuVGV4dEFwcGVhcmFuY2VfU21hbGwpOwotICAgICAgICB1cGRhdGVEYXRlVGV4dFNpemUoKTsKLQotICAgICAgICBtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0UmVzb3VyY2VJZCgKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfd2Vla0RheVRleHRBcHBlYXJhbmNlLAotICAgICAgICAgICAgICAgIERFRkFVTFRfV0VFS19EQVlfVEVYVF9BUFBFQVJBTkNFX1JFU19JRCk7Ci0gICAgICAgIGF0dHJpYnV0ZXNBcnJheS5yZWN5Y2xlKCk7Ci0KLSAgICAgICAgRGlzcGxheU1ldHJpY3MgZGlzcGxheU1ldHJpY3MgPSBnZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpOwotICAgICAgICBtV2Vla01pblZpc2libGVIZWlnaHQgPSAoaW50KSBUeXBlZFZhbHVlLmFwcGx5RGltZW5zaW9uKFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX0RJUCwKLSAgICAgICAgICAgICAgICBVTlNDQUxFRF9XRUVLX01JTl9WSVNJQkxFX0hFSUdIVCwgZGlzcGxheU1ldHJpY3MpOwotICAgICAgICBtTGlzdFNjcm9sbFRvcE9mZnNldCA9IChpbnQpIFR5cGVkVmFsdWUuYXBwbHlEaW1lbnNpb24oVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRElQLAotICAgICAgICAgICAgICAgIFVOU0NBTEVEX0xJU1RfU0NST0xMX1RPUF9PRkZTRVQsIGRpc3BsYXlNZXRyaWNzKTsKLSAgICAgICAgbUJvdHRvbUJ1ZmZlciA9IChpbnQpIFR5cGVkVmFsdWUuYXBwbHlEaW1lbnNpb24oVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRElQLAotICAgICAgICAgICAgICAgIFVOU0NBTEVEX0JPVFRPTV9CVUZGRVIsIGRpc3BsYXlNZXRyaWNzKTsKLSAgICAgICAgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyV2lkdGggPSAoaW50KSBUeXBlZFZhbHVlLmFwcGx5RGltZW5zaW9uKFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX0RJUCwKLSAgICAgICAgICAgICAgICBVTlNDQUxFRF9TRUxFQ1RFRF9EQVRFX1ZFUlRJQ0FMX0JBUl9XSURUSCwgZGlzcGxheU1ldHJpY3MpOwotICAgICAgICBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aCA9IChpbnQpIFR5cGVkVmFsdWUuYXBwbHlEaW1lbnNpb24oVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRElQLAotICAgICAgICAgICAgICAgIFVOU0NBTEVEX1dFRUtfU0VQQVJBVE9SX0xJTkVfV0lEVEgsIGRpc3BsYXlNZXRyaWNzKTsKLQotICAgICAgICBMYXlvdXRJbmZsYXRlciBsYXlvdXRJbmZsYXRlciA9IChMYXlvdXRJbmZsYXRlcikgY29udGV4dAotICAgICAgICAgICAgICAgIC5nZXRTeXN0ZW1TZXJ2aWNlKFNlcnZpY2UuTEFZT1VUX0lORkxBVEVSX1NFUlZJQ0UpOwotICAgICAgICBWaWV3IGNvbnRlbnQgPSBsYXlvdXRJbmZsYXRlci5pbmZsYXRlKFIubGF5b3V0LmNhbGVuZGFyX3ZpZXcsIG51bGwsIGZhbHNlKTsKLSAgICAgICAgYWRkVmlldyhjb250ZW50KTsKLQotICAgICAgICBtTGlzdFZpZXcgPSAoTGlzdFZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLmxpc3QpOwotICAgICAgICBtRGF5TmFtZXNIZWFkZXIgPSAoVmlld0dyb3VwKSBjb250ZW50LmZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmRheV9uYW1lcyk7Ci0gICAgICAgIG1Nb250aE5hbWUgPSAoVGV4dFZpZXcpIGNvbnRlbnQuZmluZFZpZXdCeUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQubW9udGhfbmFtZSk7Ci0KLSAgICAgICAgc2V0VXBIZWFkZXIoKTsKLSAgICAgICAgc2V0VXBMaXN0VmlldygpOwotICAgICAgICBzZXRVcEFkYXB0ZXIoKTsKLQotICAgICAgICAvLyBnbyB0byB0b2RheSBvciB3aGljaGV2ZXIgaXMgY2xvc2UgdG8gdG9kYXkgbWluIG9yIG1heCBkYXRlCi0gICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwotICAgICAgICBpZiAobVRlbXBEYXRlLmJlZm9yZShtTWluRGF0ZSkpIHsKLSAgICAgICAgICAgIGdvVG8obU1pbkRhdGUsIGZhbHNlLCB0cnVlLCB0cnVlKTsKLSAgICAgICAgfSBlbHNlIGlmIChtTWF4RGF0ZS5iZWZvcmUobVRlbXBEYXRlKSkgewotICAgICAgICAgICAgZ29UbyhtTWF4RGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ29UbyhtVGVtcERhdGUsIGZhbHNlLCB0cnVlLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgbURlbGVnYXRlID0gbmV3IExlZ2FjeUNhbGVuZGFyVmlld0RlbGVnYXRlKHRoaXMsIGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQyNSwxMCArMTI0LDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfc2hvd25XZWVrQ291bnQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTaG93bldlZWtDb3VudChpbnQgY291bnQpIHsKLSAgICAgICAgaWYgKG1TaG93bldlZWtDb3VudCAhPSBjb3VudCkgewotICAgICAgICAgICAgbVNob3duV2Vla0NvdW50ID0gY291bnQ7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldFNob3duV2Vla0NvdW50KGNvdW50KTsKICAgICB9CiAKICAgICAvKioKQEAgLTQzOSw3ICsxMzUsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld19zaG93bldlZWtDb3VudAogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0U2hvd25XZWVrQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtU2hvd25XZWVrQ291bnQ7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0U2hvd25XZWVrQ291bnQoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQ1MCwxNiArMTQ2LDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfc2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yKGludCBjb2xvcikgewotICAgICAgICBpZiAobVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvciAhPSBjb2xvcikgewotICAgICAgICAgICAgbVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvciA9IGNvbG9yOwotICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IChXZWVrVmlldykgbUxpc3RWaWV3LmdldENoaWxkQXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHdlZWtWaWV3Lm1IYXNTZWxlY3RlZERheSkgewotICAgICAgICAgICAgICAgICAgICB3ZWVrVmlldy5pbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRTZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDcwLDcgKzE1Nyw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X3NlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0U2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yKCkgewotICAgICAgICByZXR1cm4gbVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcjsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRTZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQ4MSwxNiArMTY4LDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfZm9jdXNlZE1vbnRoRGF0ZUNvbG9yCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Rm9jdXNlZE1vbnRoRGF0ZUNvbG9yKGludCBjb2xvcikgewotICAgICAgICBpZiAobUZvY3VzZWRNb250aERhdGVDb2xvciAhPSBjb2xvcikgewotICAgICAgICAgICAgbUZvY3VzZWRNb250aERhdGVDb2xvciA9IGNvbG9yOwotICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IChXZWVrVmlldykgbUxpc3RWaWV3LmdldENoaWxkQXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHdlZWtWaWV3Lm1IYXNGb2N1c2VkRGF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LmludmFsaWRhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldEZvY3VzZWRNb250aERhdGVDb2xvcihjb2xvcik7CiAgICAgfQogCiAgICAgLyoqCkBAIC01MDEsNyArMTc5LDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfZm9jdXNlZE1vbnRoRGF0ZUNvbG9yCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRGb2N1c2VkTW9udGhEYXRlQ29sb3IoKSB7Ci0gICAgICAgIHJldHVybiBtRm9jdXNlZE1vbnRoRGF0ZUNvbG9yOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldEZvY3VzZWRNb250aERhdGVDb2xvcigpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTEyLDE2ICsxOTAsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld191bmZvY3VzZWRNb250aERhdGVDb2xvcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKGludCBjb2xvcikgewotICAgICAgICBpZiAobVVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yICE9IGNvbG9yKSB7Ci0gICAgICAgICAgICBtVW5mb2N1c2VkTW9udGhEYXRlQ29sb3IgPSBjb2xvcjsKLSAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gbUxpc3RWaWV3LmdldENoaWxkQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgV2Vla1ZpZXcgd2Vla1ZpZXcgPSAoV2Vla1ZpZXcpIG1MaXN0Vmlldy5nZXRDaGlsZEF0KGkpOwotICAgICAgICAgICAgICAgIGlmICh3ZWVrVmlldy5tSGFzVW5mb2N1c2VkRGF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LmludmFsaWRhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKGNvbG9yKTsKICAgICB9CiAKICAgICAvKioKQEAgLTUzMiw3ICsyMDEsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld191bmZvY3VzZWRNb250aERhdGVDb2xvcgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VW5mb2N1c2VkTW9udGhEYXRlQ29sb3IoKSB7Ci0gICAgICAgIHJldHVybiBtRm9jdXNlZE1vbnRoRGF0ZUNvbG9yOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC01NDMsMTIgKzIxMiw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X3dlZWtOdW1iZXJDb2xvcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFdlZWtOdW1iZXJDb2xvcihpbnQgY29sb3IpIHsKLSAgICAgICAgaWYgKG1XZWVrTnVtYmVyQ29sb3IgIT0gY29sb3IpIHsKLSAgICAgICAgICAgIG1XZWVrTnVtYmVyQ29sb3IgPSBjb2xvcjsKLSAgICAgICAgICAgIGlmIChtU2hvd1dlZWtOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICBpbnZhbGlkYXRlQWxsV2Vla1ZpZXdzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldFdlZWtOdW1iZXJDb2xvcihjb2xvcik7CiAgICAgfQogCiAgICAgLyoqCkBAIC01NTksNyArMjIzLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfd2Vla051bWJlckNvbG9yCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRXZWVrTnVtYmVyQ29sb3IoKSB7Ci0gICAgICAgIHJldHVybiBtV2Vla051bWJlckNvbG9yOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldFdlZWtOdW1iZXJDb2xvcigpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTcwLDEwICsyMzQsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld193ZWVrU2VwYXJhdG9yTGluZUNvbG9yCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcihpbnQgY29sb3IpIHsKLSAgICAgICAgaWYgKG1XZWVrU2VwYXJhdG9yTGluZUNvbG9yICE9IGNvbG9yKSB7Ci0gICAgICAgICAgICBtV2Vla1NlcGFyYXRvckxpbmVDb2xvciA9IGNvbG9yOwotICAgICAgICAgICAgaW52YWxpZGF0ZUFsbFdlZWtWaWV3cygpOwotICAgICAgICB9CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRXZWVrU2VwYXJhdG9yTGluZUNvbG9yKGNvbG9yKTsKICAgICB9CiAKICAgICAvKioKQEAgLTU4NCw3ICsyNDUsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld193ZWVrU2VwYXJhdG9yTGluZUNvbG9yCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRXZWVrU2VwYXJhdG9yTGluZUNvbG9yKCkgewotICAgICAgICByZXR1cm4gbVdlZWtTZXBhcmF0b3JMaW5lQ29sb3I7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcigpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTk2LDggKzI1Nyw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X3NlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoaW50IHJlc291cmNlSWQpIHsKLSAgICAgICAgRHJhd2FibGUgZHJhd2FibGUgPSBnZXRSZXNvdXJjZXMoKS5nZXREcmF3YWJsZShyZXNvdXJjZUlkKTsKLSAgICAgICAgc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoZHJhd2FibGUpOworICAgICAgICBtRGVsZWdhdGUuc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIocmVzb3VyY2VJZCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02MDksMTYgKzI2OSw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X3NlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoRHJhd2FibGUgZHJhd2FibGUpIHsKLSAgICAgICAgaWYgKG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhciAhPSBkcmF3YWJsZSkgewotICAgICAgICAgICAgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyID0gZHJhd2FibGU7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRDb3VudCA9IG1MaXN0Vmlldy5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIFdlZWtWaWV3IHdlZWtWaWV3ID0gKFdlZWtWaWV3KSBtTGlzdFZpZXcuZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgICAgICBpZiAod2Vla1ZpZXcubUhhc1NlbGVjdGVkRGF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LmludmFsaWRhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldFNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyKGRyYXdhYmxlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTYyOCw3ICsyNzksNyBAQAogICAgICAqIEByZXR1cm4gVGhlIHZlcnRpY2FsIGJhciBkcmF3YWJsZS4KICAgICAgKi8KICAgICBwdWJsaWMgRHJhd2FibGUgZ2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoKSB7Ci0gICAgICAgIHJldHVybiBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXI7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTYzOSwxMCArMjkwLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfd2Vla0RheVRleHRBcHBlYXJhbmNlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0V2Vla0RheVRleHRBcHBlYXJhbmNlKGludCByZXNvdXJjZUlkKSB7Ci0gICAgICAgIGlmIChtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQgIT0gcmVzb3VyY2VJZCkgewotICAgICAgICAgICAgbVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkID0gcmVzb3VyY2VJZDsKLSAgICAgICAgICAgIHNldFVwSGVhZGVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldFdlZWtEYXlUZXh0QXBwZWFyYW5jZShyZXNvdXJjZUlkKTsKICAgICB9CiAKICAgICAvKioKQEAgLTY1Myw3ICszMDEsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld193ZWVrRGF5VGV4dEFwcGVhcmFuY2UKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFdlZWtEYXlUZXh0QXBwZWFyYW5jZSgpIHsKLSAgICAgICAgcmV0dXJuIG1XZWVrRGF5VGV4dEFwcGVhcmFuY2VSZXNJZDsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRXZWVrRGF5VGV4dEFwcGVhcmFuY2UoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTY2NCwxMSArMzEyLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfZGF0ZVRleHRBcHBlYXJhbmNlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGF0ZVRleHRBcHBlYXJhbmNlKGludCByZXNvdXJjZUlkKSB7Ci0gICAgICAgIGlmIChtRGF0ZVRleHRBcHBlYXJhbmNlUmVzSWQgIT0gcmVzb3VyY2VJZCkgewotICAgICAgICAgICAgbURhdGVUZXh0QXBwZWFyYW5jZVJlc0lkID0gcmVzb3VyY2VJZDsKLSAgICAgICAgICAgIHVwZGF0ZURhdGVUZXh0U2l6ZSgpOwotICAgICAgICAgICAgaW52YWxpZGF0ZUFsbFdlZWtWaWV3cygpOwotICAgICAgICB9CisgICAgICAgIG1EZWxlZ2F0ZS5zZXREYXRlVGV4dEFwcGVhcmFuY2UocmVzb3VyY2VJZCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02NzksMzUgKzMyMywxNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld19kYXRlVGV4dEFwcGVhcmFuY2UKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldERhdGVUZXh0QXBwZWFyYW5jZSgpIHsKLSAgICAgICAgcmV0dXJuIG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZDsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXREYXRlVGV4dEFwcGVhcmFuY2UoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICBtTGlzdFZpZXcuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgbURlbGVnYXRlLnNldEVuYWJsZWQoZW5hYmxlZCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gbUxpc3RWaWV3LmlzRW5hYmxlZCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQoQ29uZmlndXJhdGlvbiBuZXdDb25maWcpIHsKLSAgICAgICAgc3VwZXIub25Db25maWd1cmF0aW9uQ2hhbmdlZChuZXdDb25maWcpOwotICAgICAgICBzZXRDdXJyZW50TG9jYWxlKG5ld0NvbmZpZy5sb2NhbGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKLSAgICAgICAgZXZlbnQuc2V0Q2xhc3NOYW1lKENhbGVuZGFyVmlldy5jbGFzcy5nZXROYW1lKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gaW5mbykgewotICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oaW5mbyk7Ci0gICAgICAgIGluZm8uc2V0Q2xhc3NOYW1lKENhbGVuZGFyVmlldy5jbGFzcy5nZXROYW1lKCkpOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmlzRW5hYmxlZCgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNzIzLDcgKzM0OSw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X21pbkRhdGUKICAgICAgKi8KICAgICBwdWJsaWMgbG9uZyBnZXRNaW5EYXRlKCkgewotICAgICAgICByZXR1cm4gbU1pbkRhdGUuZ2V0VGltZUluTWlsbGlzKCk7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0TWluRGF0ZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNzM2LDMwICszNjIsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld19taW5EYXRlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWluRGF0ZShsb25nIG1pbkRhdGUpIHsKLSAgICAgICAgbVRlbXBEYXRlLnNldFRpbWVJbk1pbGxpcyhtaW5EYXRlKTsKLSAgICAgICAgaWYgKGlzU2FtZURhdGUobVRlbXBEYXRlLCBtTWluRGF0ZSkpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtTWluRGF0ZS5zZXRUaW1lSW5NaWxsaXMobWluRGF0ZSk7Ci0gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgY3VycmVudCBkYXRlIGlzIG5vdCBlYXJsaWVyIHRoYW4KLSAgICAgICAgLy8gdGhlIG5ldyBtaW4gZGF0ZSBzaW5jZSB0aGUgbGF0dGVyIGlzIHVzZWQgZm9yCi0gICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBpbmRpY2VzIGluIHRoZSBhZGFwdGVyIHRodXMKLSAgICAgICAgLy8gYXZvaWRpbmcgb3V0IG9mIGJvdW5kcyBlcnJvcgotICAgICAgICBDYWxlbmRhciBkYXRlID0gbUFkYXB0ZXIubVNlbGVjdGVkRGF0ZTsKLSAgICAgICAgaWYgKGRhdGUuYmVmb3JlKG1NaW5EYXRlKSkgewotICAgICAgICAgICAgbUFkYXB0ZXIuc2V0U2VsZWN0ZWREYXkobU1pbkRhdGUpOwotICAgICAgICB9Ci0gICAgICAgIC8vIHJlaW5pdGlhbGl6ZSB0aGUgYWRhcHRlciBzaW5jZSBpdHMgcmFuZ2UgZGVwZW5kcyBvbiBtaW4gZGF0ZQotICAgICAgICBtQWRhcHRlci5pbml0KCk7Ci0gICAgICAgIGlmIChkYXRlLmJlZm9yZShtTWluRGF0ZSkpIHsKLSAgICAgICAgICAgIHNldERhdGUobVRlbXBEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHdlIGdvIHRvIHRoZSBjdXJyZW50IGRhdGUgdG8gZm9yY2UgdGhlIExpc3RWaWV3IHRvIHF1ZXJ5IGl0cwotICAgICAgICAgICAgLy8gYWRhcHRlciBmb3IgdGhlIHNob3duIHZpZXdzIHNpbmNlIHdlIGhhdmUgY2hhbmdlZCB0aGUgYWRhcHRlcgotICAgICAgICAgICAgLy8gcmFuZ2UgYW5kIHRoZSBiYXNlIGZyb20gd2hpY2ggdGhlIGxhdGVyIGNhbGN1bGF0ZXMgaXRlbSBpbmRpY2VzCi0gICAgICAgICAgICAvLyBub3RlIHRoYXQgY2FsbGluZyBzZXREYXRlIHdpbGwgbm90IHdvcmsgc2luY2UgdGhlIGRhdGUgaXMgdGhlIHNhbWUKLSAgICAgICAgICAgIGdvVG8oZGF0ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICBtRGVsZWdhdGUuc2V0TWluRGF0ZShtaW5EYXRlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTc3NSw3ICszNzgsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld19tYXhEYXRlCiAgICAgICovCiAgICAgcHVibGljIGxvbmcgZ2V0TWF4RGF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1NYXhEYXRlLmdldFRpbWVJbk1pbGxpcygpOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldE1heERhdGUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTc4OCwyMyArMzkxLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfbWF4RGF0ZQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE1heERhdGUobG9uZyBtYXhEYXRlKSB7Ci0gICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMobWF4RGF0ZSk7Ci0gICAgICAgIGlmIChpc1NhbWVEYXRlKG1UZW1wRGF0ZSwgbU1heERhdGUpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbU1heERhdGUuc2V0VGltZUluTWlsbGlzKG1heERhdGUpOwotICAgICAgICAvLyByZWluaXRpYWxpemUgdGhlIGFkYXB0ZXIgc2luY2UgaXRzIHJhbmdlIGRlcGVuZHMgb24gbWF4IGRhdGUKLSAgICAgICAgbUFkYXB0ZXIuaW5pdCgpOwotICAgICAgICBDYWxlbmRhciBkYXRlID0gbUFkYXB0ZXIubVNlbGVjdGVkRGF0ZTsKLSAgICAgICAgaWYgKGRhdGUuYWZ0ZXIobU1heERhdGUpKSB7Ci0gICAgICAgICAgICBzZXREYXRlKG1NYXhEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHdlIGdvIHRvIHRoZSBjdXJyZW50IGRhdGUgdG8gZm9yY2UgdGhlIExpc3RWaWV3IHRvIHF1ZXJ5IGl0cwotICAgICAgICAgICAgLy8gYWRhcHRlciBmb3IgdGhlIHNob3duIHZpZXdzIHNpbmNlIHdlIGhhdmUgY2hhbmdlZCB0aGUgYWRhcHRlcgotICAgICAgICAgICAgLy8gcmFuZ2UgYW5kIHRoZSBiYXNlIGZyb20gd2hpY2ggdGhlIGxhdGVyIGNhbGN1bGF0ZXMgaXRlbSBpbmRpY2VzCi0gICAgICAgICAgICAvLyBub3RlIHRoYXQgY2FsbGluZyBzZXREYXRlIHdpbGwgbm90IHdvcmsgc2luY2UgdGhlIGRhdGUgaXMgdGhlIHNhbWUKLSAgICAgICAgICAgIGdvVG8oZGF0ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICBtRGVsZWdhdGUuc2V0TWF4RGF0ZShtYXhEYXRlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTgxNSwxMiArNDAyLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfc2hvd1dlZWtOdW1iZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTaG93V2Vla051bWJlcihib29sZWFuIHNob3dXZWVrTnVtYmVyKSB7Ci0gICAgICAgIGlmIChtU2hvd1dlZWtOdW1iZXIgPT0gc2hvd1dlZWtOdW1iZXIpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtU2hvd1dlZWtOdW1iZXIgPSBzaG93V2Vla051bWJlcjsKLSAgICAgICAgbUFkYXB0ZXIubm90aWZ5RGF0YVNldENoYW5nZWQoKTsKLSAgICAgICAgc2V0VXBIZWFkZXIoKTsKKyAgICAgICAgbURlbGVnYXRlLnNldFNob3dXZWVrTnVtYmVyKHNob3dXZWVrTnVtYmVyKTsKICAgICB9CiAKICAgICAvKioKQEAgLTgzMSw3ICs0MTMsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld19zaG93V2Vla051bWJlcgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGdldFNob3dXZWVrTnVtYmVyKCkgewotICAgICAgICByZXR1cm4gbVNob3dXZWVrTnVtYmVyOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldFNob3dXZWVrTnVtYmVyKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC04NTAsNyArNDMyLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfZmlyc3REYXlPZldlZWsKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEZpcnN0RGF5T2ZXZWVrKCkgewotICAgICAgICByZXR1cm4gbUZpcnN0RGF5T2ZXZWVrOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldEZpcnN0RGF5T2ZXZWVrKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC04NjksMTIgKzQ1MSw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X2ZpcnN0RGF5T2ZXZWVrCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Rmlyc3REYXlPZldlZWsoaW50IGZpcnN0RGF5T2ZXZWVrKSB7Ci0gICAgICAgIGlmIChtRmlyc3REYXlPZldlZWsgPT0gZmlyc3REYXlPZldlZWspIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtRmlyc3REYXlPZldlZWsgPSBmaXJzdERheU9mV2VlazsKLSAgICAgICAgbUFkYXB0ZXIuaW5pdCgpOwotICAgICAgICBzZXRVcEhlYWRlcigpOworICAgICAgICBtRGVsZWdhdGUuc2V0Rmlyc3REYXlPZldlZWsoZmlyc3REYXlPZldlZWspOwogICAgIH0KIAogICAgIC8qKgpAQCAtODgzLDcgKzQ2MCw3IEBACiAgICAgICogQHBhcmFtIGxpc3RlbmVyIFRoZSBsaXN0ZW5lciB0byBiZSBub3RpZmllZC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRPbkRhdGVDaGFuZ2VMaXN0ZW5lcihPbkRhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICBtT25EYXRlQ2hhbmdlTGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICAgICAgbURlbGVnYXRlLnNldE9uRGF0ZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyKTsKICAgICB9CiAKICAgICAvKioKQEAgLTg5Myw3ICs0NzAsNyBAQAogICAgICAqIEByZXR1cm4gVGhlIHNlbGVjdGVkIGRhdGUuCiAgICAgICovCiAgICAgcHVibGljIGxvbmcgZ2V0RGF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1BZGFwdGVyLm1TZWxlY3RlZERhdGUuZ2V0VGltZUluTWlsbGlzKCk7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0RGF0ZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtOTEwLDcgKzQ4Nyw3IEBACiAgICAgICogQHNlZSAjc2V0TWF4RGF0ZShsb25nKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGUobG9uZyBkYXRlKSB7Ci0gICAgICAgIHNldERhdGUoZGF0ZSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgbURlbGVnYXRlLnNldERhdGUoZGF0ZSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC05MjgsOTM0ICs1MDUsMTY0NSBAQAogICAgICAqIEBzZWUgI3NldE1heERhdGUobG9uZykKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRlKGxvbmcgZGF0ZSwgYm9vbGVhbiBhbmltYXRlLCBib29sZWFuIGNlbnRlcikgewotICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKGRhdGUpOwotICAgICAgICBpZiAoaXNTYW1lRGF0ZShtVGVtcERhdGUsIG1BZGFwdGVyLm1TZWxlY3RlZERhdGUpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZ29UbyhtVGVtcERhdGUsIGFuaW1hdGUsIHRydWUsIGNlbnRlcik7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXREYXRlKGRhdGUsIGFuaW1hdGUsIGNlbnRlcik7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZURhdGVUZXh0U2l6ZSgpIHsKLSAgICAgICAgVHlwZWRBcnJheSBkYXRlVGV4dEFwcGVhcmFuY2UgPSBtQ29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAotICAgICAgICAgICAgICAgIG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZCwgUi5zdHlsZWFibGUuVGV4dEFwcGVhcmFuY2UpOwotICAgICAgICBtRGF0ZVRleHRTaXplID0gZGF0ZVRleHRBcHBlYXJhbmNlLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5UZXh0QXBwZWFyYW5jZV90ZXh0U2l6ZSwgREVGQVVMVF9EQVRFX1RFWFRfU0laRSk7Ci0gICAgICAgIGRhdGVUZXh0QXBwZWFyYW5jZS5yZWN5Y2xlKCk7CisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZChDb25maWd1cmF0aW9uIG5ld0NvbmZpZykgeworICAgICAgICBzdXBlci5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKG5ld0NvbmZpZyk7CisgICAgICAgIG1EZWxlZ2F0ZS5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKG5ld0NvbmZpZyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOworICAgICAgICBtRGVsZWdhdGUub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pIHsKKyAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKGluZm8pOworICAgICAgICBtRGVsZWdhdGUub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKGluZm8pOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIEludmFsaWRhdGVzIGFsbCB3ZWVrIHZpZXdzLgorICAgICAqIEEgZGVsZWdhdGUgaW50ZXJmYWNlIHRoYXQgZGVmaW5lZCB0aGUgcHVibGljIEFQSSBvZiB0aGUgQ2FsZW5kYXJWaWV3LiBBbGxvd3MgZGlmZmVyZW50CisgICAgICogQ2FsZW5kYXJWaWV3IGltcGxlbWVudGF0aW9ucy4gVGhpcyB3b3VsZCBuZWVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBDYWxlbmRhclZpZXcgZGVsZWdhdGVzCisgICAgICogZm9yIHRoZSByZWFsIGJlaGF2aW9yLgogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsV2Vla1ZpZXdzKCkgewotICAgICAgICBmaW5hbCBpbnQgY2hpbGRDb3VudCA9IG1MaXN0Vmlldy5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBWaWV3IHZpZXcgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgIHZpZXcuaW52YWxpZGF0ZSgpOworICAgIHByaXZhdGUgaW50ZXJmYWNlIENhbGVuZGFyVmlld0RlbGVnYXRlIHsKKyAgICAgICAgdm9pZCBzZXRTaG93bldlZWtDb3VudChpbnQgY291bnQpOworICAgICAgICBpbnQgZ2V0U2hvd25XZWVrQ291bnQoKTsKKworICAgICAgICB2b2lkIHNldFNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcihpbnQgY29sb3IpOworICAgICAgICBpbnQgZ2V0U2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yKCk7CisKKyAgICAgICAgdm9pZCBzZXRGb2N1c2VkTW9udGhEYXRlQ29sb3IoaW50IGNvbG9yKTsKKyAgICAgICAgaW50IGdldEZvY3VzZWRNb250aERhdGVDb2xvcigpOworCisgICAgICAgIHZvaWQgc2V0VW5mb2N1c2VkTW9udGhEYXRlQ29sb3IoaW50IGNvbG9yKTsKKyAgICAgICAgaW50IGdldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKCk7CisKKyAgICAgICAgdm9pZCBzZXRXZWVrTnVtYmVyQ29sb3IoaW50IGNvbG9yKTsKKyAgICAgICAgaW50IGdldFdlZWtOdW1iZXJDb2xvcigpOworCisgICAgICAgIHZvaWQgc2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcihpbnQgY29sb3IpOworICAgICAgICBpbnQgZ2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcigpOworCisgICAgICAgIHZvaWQgc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoaW50IHJlc291cmNlSWQpOworICAgICAgICB2b2lkIHNldFNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyKERyYXdhYmxlIGRyYXdhYmxlKTsKKyAgICAgICAgRHJhd2FibGUgZ2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoKTsKKworICAgICAgICB2b2lkIHNldFdlZWtEYXlUZXh0QXBwZWFyYW5jZShpbnQgcmVzb3VyY2VJZCk7CisgICAgICAgIGludCBnZXRXZWVrRGF5VGV4dEFwcGVhcmFuY2UoKTsKKworICAgICAgICB2b2lkIHNldERhdGVUZXh0QXBwZWFyYW5jZShpbnQgcmVzb3VyY2VJZCk7CisgICAgICAgIGludCBnZXREYXRlVGV4dEFwcGVhcmFuY2UoKTsKKworICAgICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKTsKKyAgICAgICAgYm9vbGVhbiBpc0VuYWJsZWQoKTsKKworICAgICAgICB2b2lkIHNldE1pbkRhdGUobG9uZyBtaW5EYXRlKTsKKyAgICAgICAgbG9uZyBnZXRNaW5EYXRlKCk7CisKKyAgICAgICAgdm9pZCBzZXRNYXhEYXRlKGxvbmcgbWF4RGF0ZSk7CisgICAgICAgIGxvbmcgZ2V0TWF4RGF0ZSgpOworCisgICAgICAgIHZvaWQgc2V0U2hvd1dlZWtOdW1iZXIoYm9vbGVhbiBzaG93V2Vla051bWJlcik7CisgICAgICAgIGJvb2xlYW4gZ2V0U2hvd1dlZWtOdW1iZXIoKTsKKworICAgICAgICB2b2lkIHNldEZpcnN0RGF5T2ZXZWVrKGludCBmaXJzdERheU9mV2Vlayk7CisgICAgICAgIGludCBnZXRGaXJzdERheU9mV2VlaygpOworCisgICAgICAgIHZvaWQgc2V0RGF0ZShsb25nIGRhdGUpOworICAgICAgICB2b2lkIHNldERhdGUobG9uZyBkYXRlLCBib29sZWFuIGFuaW1hdGUsIGJvb2xlYW4gY2VudGVyKTsKKyAgICAgICAgbG9uZyBnZXREYXRlKCk7CisKKyAgICAgICAgdm9pZCBzZXRPbkRhdGVDaGFuZ2VMaXN0ZW5lcihPbkRhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcik7CisKKyAgICAgICAgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKTsKKyAgICAgICAgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KTsKKyAgICAgICAgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFuIGFic3RyYWN0IGNsYXNzIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGEgc3RhcnQgZm9yIENhbGVuZGFyVmlldyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgKi8KKyAgICBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgQWJzdHJhY3RDYWxlbmRhclZpZXdEZWxlZ2F0ZSBpbXBsZW1lbnRzIENhbGVuZGFyVmlld0RlbGVnYXRlIHsKKyAgICAgICAgLy8gVGhlIGRlbGVnYXRvcgorICAgICAgICBwcm90ZWN0ZWQgQ2FsZW5kYXJWaWV3IG1EZWxlZ2F0b3I7CisKKyAgICAgICAgLy8gVGhlIGNvbnRleHQKKyAgICAgICAgcHJvdGVjdGVkIENvbnRleHQgbUNvbnRleHQ7CisKKyAgICAgICAgLy8gVGhlIGN1cnJlbnQgbG9jYWxlCisgICAgICAgIHByb3RlY3RlZCBMb2NhbGUgbUN1cnJlbnRMb2NhbGU7CisKKyAgICAgICAgQWJzdHJhY3RDYWxlbmRhclZpZXdEZWxlZ2F0ZShDYWxlbmRhclZpZXcgZGVsZWdhdG9yLCBDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIG1EZWxlZ2F0b3IgPSBkZWxlZ2F0b3I7CisgICAgICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisKKyAgICAgICAgICAgIC8vIEluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGxvY2FsZQorICAgICAgICAgICAgc2V0Q3VycmVudExvY2FsZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAgICAgaWYgKGxvY2FsZS5lcXVhbHMobUN1cnJlbnRMb2NhbGUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUN1cnJlbnRMb2NhbGUgPSBsb2NhbGU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGN1cnJlbnQgbG9jYWxlLgorICAgICAqIEEgZGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBsZWdhY3kgQ2FsZW5kYXJWaWV3CiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlIGxvY2FsZSkgewotICAgICAgICBpZiAobG9jYWxlLmVxdWFscyhtQ3VycmVudExvY2FsZSkpIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBMZWdhY3lDYWxlbmRhclZpZXdEZWxlZ2F0ZSBleHRlbmRzIEFic3RyYWN0Q2FsZW5kYXJWaWV3RGVsZWdhdGUgeworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZhdWx0IHZhbHVlIHdoZXRoZXIgdG8gc2hvdyB3ZWVrIG51bWJlci4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9TSE9XX1dFRUtfTlVNQkVSID0gdHJ1ZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSBkYXkuZQorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNSUxMSVNfSU5fREFZID0gODY0MDAwMDBMOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIGRheSBpbiBhIHdlZWsuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREFZU19QRVJfV0VFSyA9IDc7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2Vlay4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgTUlMTElTX0lOX1dFRUsgPSBEQVlTX1BFUl9XRUVLICogTUlMTElTX0lOX0RBWTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQWZmZWN0cyB3aGVuIHRoZSBtb250aCBzZWxlY3Rpb24gd2lsbCBjaGFuZ2Ugd2hpbGUgc2Nyb2xsaW5nIHVwZQorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDUk9MTF9IWVNUX1dFRUtTID0gMjsKKworICAgICAgICAvKioKKyAgICAgICAgICogSG93IGxvbmcgdGhlIEdvVG8gZmxpbmcgYW5pbWF0aW9uIHNob3VsZCBsYXN0LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEdPVE9fU0NST0xMX0RVUkFUSU9OID0gMTAwMDsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBhZGp1c3RtZW50IHVwb24gYSB1c2VyIHNjcm9sbCBpbiBtaWxsaXNlY29uZHMuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQURKVVNUTUVOVF9TQ1JPTExfRFVSQVRJT04gPSA1MDA7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEhvdyBsb25nIHRvIHdhaXQgYWZ0ZXIgcmVjZWl2aW5nIGFuIG9uU2Nyb2xsU3RhdGVDaGFuZ2VkIG5vdGlmaWNhdGlvbgorICAgICAgICAgKiBiZWZvcmUgYWN0aW5nIG9uIGl0LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDUk9MTF9DSEFOR0VfREVMQVkgPSA0MDsKKworICAgICAgICAvKioKKyAgICAgICAgICogU3RyaW5nIGZvciBwYXJzaW5nIGRhdGVzLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEVfRk9STUFUID0gIk1NL2RkL3l5eXkiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZGVmYXVsdCBtaW5pbWFsIGRhdGUuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9NSU5fREFURSA9ICIwMS8wMS8xOTAwIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGRlZmF1bHQgbWF4aW1hbCBkYXRlLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTUFYX0RBVEUgPSAiMDEvMDEvMjEwMCI7CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfU0hPV05fV0VFS19DT1VOVCA9IDY7CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfREFURV9URVhUX1NJWkUgPSAxNDsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5TQ0FMRURfU0VMRUNURURfREFURV9WRVJUSUNBTF9CQVJfV0lEVEggPSA2OworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9XRUVLX01JTl9WSVNJQkxFX0hFSUdIVCA9IDEyOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9MSVNUX1NDUk9MTF9UT1BfT0ZGU0VUID0gMjsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5TQ0FMRURfQk9UVE9NX0JVRkZFUiA9IDIwOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9XRUVLX1NFUEFSQVRPUl9MSU5FX1dJRFRIID0gMTsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9XRUVLX0RBWV9URVhUX0FQUEVBUkFOQ0VfUkVTX0lEID0gLTE7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVdlZWtTZXBlcmF0b3JMaW5lV2lkdGg7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbURhdGVUZXh0U2l6ZTsKKworICAgICAgICBwcml2YXRlIERyYXdhYmxlIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhcjsKKworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aDsKKworICAgICAgICBwcml2YXRlIGludCBtU2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yOworCisgICAgICAgIHByaXZhdGUgaW50IG1Gb2N1c2VkTW9udGhEYXRlQ29sb3I7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yOworCisgICAgICAgIHByaXZhdGUgaW50IG1XZWVrU2VwYXJhdG9yTGluZUNvbG9yOworCisgICAgICAgIHByaXZhdGUgaW50IG1XZWVrTnVtYmVyQ29sb3I7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkOworCisgICAgICAgIHByaXZhdGUgaW50IG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZDsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHRvcCBvZmZzZXQgb2YgdGhlIHdlZWtzIGxpc3QuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtTGlzdFNjcm9sbFRvcE9mZnNldCA9IDI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB2aXNpYmxlIGhlaWdodCBvZiBhIHdlZWsgdmlldy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgaW50IG1XZWVrTWluVmlzaWJsZUhlaWdodCA9IDEyOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgdmlzaWJsZSBoZWlnaHQgb2YgYSB3ZWVrIHZpZXcuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtQm90dG9tQnVmZmVyID0gMjA7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBudW1iZXIgb2Ygc2hvd24gd2Vla3MuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtU2hvd25XZWVrQ291bnQ7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZsYWcgd2hldGhlciB0byBzaG93IHRoZSB3ZWVrIG51bWJlci4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtU2hvd1dlZWtOdW1iZXI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBudW1iZXIgb2YgZGF5IHBlciB3ZWVrIHRvIGJlIHNob3duLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBpbnQgbURheXNQZXJXZWVrID0gNzsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGZyaWN0aW9uIG9mIHRoZSB3ZWVrIGxpc3Qgd2hpbGUgZmxpbmdpbmcuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGZsb2F0IG1GcmljdGlvbiA9IC4wNWY7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNjYWxlIGZvciBhZGp1c3RpbmcgdmVsb2NpdHkgb2YgdGhlIHdlZWsgbGlzdCB3aGlsZSBmbGluZ2luZy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgZmxvYXQgbVZlbG9jaXR5U2NhbGUgPSAwLjMzM2Y7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBhZGFwdGVyIGZvciB0aGUgd2Vla3MgbGlzdC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgV2Vla3NBZGFwdGVyIG1BZGFwdGVyOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgd2Vla3MgbGlzdC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgTGlzdFZpZXcgbUxpc3RWaWV3OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgbW9udGggdG8gZGlzcGxheS4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgVGV4dFZpZXcgbU1vbnRoTmFtZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGhlYWRlciB3aXRoIHdlZWsgZGF5IG5hbWVzLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBWaWV3R3JvdXAgbURheU5hbWVzSGVhZGVyOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWNoZWQgbGFiZWxzIGZvciB0aGUgd2VlayBuYW1lcyBoZWFkZXIuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIFN0cmluZ1tdIG1EYXlMYWJlbHM7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtRmlyc3REYXlPZldlZWs7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFdoaWNoIG1vbnRoIHNob3VsZCBiZSBkaXNwbGF5ZWQvaGlnaGxpZ2h0ZWQgWzAtMTFdLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBpbnQgbUN1cnJlbnRNb250aERpc3BsYXllZCA9IC0xOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBVc2VkIGZvciB0cmFja2luZyBkdXJpbmcgYSBzY3JvbGwuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGxvbmcgbVByZXZpb3VzU2Nyb2xsUG9zaXRpb247CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZWQgZm9yIHRyYWNraW5nIHdoaWNoIGRpcmVjdGlvbiB0aGUgdmlldyBpcyBzY3JvbGxpbmcuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUlzU2Nyb2xsaW5nVXAgPSBmYWxzZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHByZXZpb3VzIHNjcm9sbCBzdGF0ZSBvZiB0aGUgd2Vla3MgTGlzdFZpZXcuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtUHJldmlvdXNTY3JvbGxTdGF0ZSA9IE9uU2Nyb2xsTGlzdGVuZXIuU0NST0xMX1NUQVRFX0lETEU7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjdXJyZW50IHNjcm9sbCBzdGF0ZSBvZiB0aGUgd2Vla3MgTGlzdFZpZXcuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtQ3VycmVudFNjcm9sbFN0YXRlID0gT25TY3JvbGxMaXN0ZW5lci5TQ1JPTExfU1RBVEVfSURMRTsKKworICAgICAgICAvKioKKyAgICAgICAgICogTGlzdGVuZXIgZm9yIGNoYW5nZXMgaW4gdGhlIHNlbGVjdGVkIGRheS4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgT25EYXRlQ2hhbmdlTGlzdGVuZXIgbU9uRGF0ZUNoYW5nZUxpc3RlbmVyOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb21tYW5kIGZvciBhZGp1c3RpbmcgdGhlIHBvc2l0aW9uIGFmdGVyIGEgc2Nyb2xsL2ZsaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBTY3JvbGxTdGF0ZVJ1bm5hYmxlIG1TY3JvbGxTdGF0ZUNoYW5nZWRSdW5uYWJsZSA9IG5ldyBTY3JvbGxTdGF0ZVJ1bm5hYmxlKCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRlbXBvcmFyeSBpbnN0YW5jZSB0byBhdm9pZCBtdWx0aXBsZSBpbnN0YW50aWF0aW9ucy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgQ2FsZW5kYXIgbVRlbXBEYXRlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZmlyc3QgZGF5IG9mIHRoZSBmb2N1c2VkIG1vbnRoLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBDYWxlbmRhciBtRmlyc3REYXlPZk1vbnRoOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc3RhcnQgZGF0ZSBvZiB0aGUgcmFuZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgcGlja2VyLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBDYWxlbmRhciBtTWluRGF0ZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGVuZCBkYXRlIG9mIHRoZSByYW5nZSBzdXBwb3J0ZWQgYnkgdGhpcyBwaWNrZXIuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIENhbGVuZGFyIG1NYXhEYXRlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEYXRlIGZvcm1hdCBmb3IgcGFyc2luZyBkYXRlcy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS50ZXh0LkRhdGVGb3JtYXQgbURhdGVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChEQVRFX0ZPUk1BVCk7CisKKyAgICAgICAgTGVnYWN5Q2FsZW5kYXJWaWV3RGVsZWdhdGUoQ2FsZW5kYXJWaWV3IGRlbGVnYXRvciwgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICAgICAgc3VwZXIoZGVsZWdhdG9yLCBjb250ZXh0KTsKKworICAgICAgICAgICAgLy8gaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gbG9jYWxlCisgICAgICAgICAgICBzZXRDdXJyZW50TG9jYWxlKExvY2FsZS5nZXREZWZhdWx0KCkpOworCisgICAgICAgICAgICBUeXBlZEFycmF5IGF0dHJpYnV0ZXNBcnJheSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKyAgICAgICAgICAgIG1TaG93V2Vla051bWJlciA9IGF0dHJpYnV0ZXNBcnJheS5nZXRCb29sZWFuKFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld19zaG93V2Vla051bWJlciwKKyAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9TSE9XX1dFRUtfTlVNQkVSKTsKKyAgICAgICAgICAgIG1GaXJzdERheU9mV2VlayA9IGF0dHJpYnV0ZXNBcnJheS5nZXRJbnQoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X2ZpcnN0RGF5T2ZXZWVrLAorICAgICAgICAgICAgICAgICAgICBMb2NhbGVEYXRhLmdldChMb2NhbGUuZ2V0RGVmYXVsdCgpKS5maXJzdERheU9mV2Vlayk7CisgICAgICAgICAgICBTdHJpbmcgbWluRGF0ZSA9IGF0dHJpYnV0ZXNBcnJheS5nZXRTdHJpbmcoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X21pbkRhdGUpOworICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG1pbkRhdGUpIHx8ICFwYXJzZURhdGUobWluRGF0ZSwgbU1pbkRhdGUpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VEYXRlKERFRkFVTFRfTUlOX0RBVEUsIG1NaW5EYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBtYXhEYXRlID0gYXR0cmlidXRlc0FycmF5LmdldFN0cmluZyhSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfbWF4RGF0ZSk7CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobWF4RGF0ZSkgfHwgIXBhcnNlRGF0ZShtYXhEYXRlLCBtTWF4RGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZURhdGUoREVGQVVMVF9NQVhfREFURSwgbU1heERhdGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1NYXhEYXRlLmJlZm9yZShtTWluRGF0ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNYXggZGF0ZSBjYW5ub3QgYmUgYmVmb3JlIG1pbiBkYXRlLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVNob3duV2Vla0NvdW50ID0gYXR0cmlidXRlc0FycmF5LmdldEludChSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfc2hvd25XZWVrQ291bnQsCisgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfU0hPV05fV0VFS19DT1VOVCk7CisgICAgICAgICAgICBtU2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yID0gYXR0cmlidXRlc0FycmF5LmdldENvbG9yKAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfc2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yLCAwKTsKKyAgICAgICAgICAgIG1Gb2N1c2VkTW9udGhEYXRlQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoCisgICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld19mb2N1c2VkTW9udGhEYXRlQ29sb3IsIDApOworICAgICAgICAgICAgbVVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yID0gYXR0cmlidXRlc0FycmF5LmdldENvbG9yKAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfdW5mb2N1c2VkTW9udGhEYXRlQ29sb3IsIDApOworICAgICAgICAgICAgbVdlZWtTZXBhcmF0b3JMaW5lQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoCisgICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld193ZWVrU2VwYXJhdG9yTGluZUNvbG9yLCAwKTsKKyAgICAgICAgICAgIG1XZWVrTnVtYmVyQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X3dlZWtOdW1iZXJDb2xvciwgMCk7CisgICAgICAgICAgICBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXIgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0RHJhd2FibGUoCisgICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld19zZWxlY3RlZERhdGVWZXJ0aWNhbEJhcik7CisKKyAgICAgICAgICAgIG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZCA9IGF0dHJpYnV0ZXNBcnJheS5nZXRSZXNvdXJjZUlkKAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfZGF0ZVRleHRBcHBlYXJhbmNlLCBSLnN0eWxlLlRleHRBcHBlYXJhbmNlX1NtYWxsKTsKKyAgICAgICAgICAgIHVwZGF0ZURhdGVUZXh0U2l6ZSgpOworCisgICAgICAgICAgICBtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0UmVzb3VyY2VJZCgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X3dlZWtEYXlUZXh0QXBwZWFyYW5jZSwKKyAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9XRUVLX0RBWV9URVhUX0FQUEVBUkFOQ0VfUkVTX0lEKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXNBcnJheS5yZWN5Y2xlKCk7CisKKyAgICAgICAgICAgIERpc3BsYXlNZXRyaWNzIGRpc3BsYXlNZXRyaWNzID0gbURlbGVnYXRvci5nZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpOworICAgICAgICAgICAgbVdlZWtNaW5WaXNpYmxlSGVpZ2h0ID0gKGludCkgVHlwZWRWYWx1ZS5hcHBseURpbWVuc2lvbihUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9ESVAsCisgICAgICAgICAgICAgICAgICAgIFVOU0NBTEVEX1dFRUtfTUlOX1ZJU0lCTEVfSEVJR0hULCBkaXNwbGF5TWV0cmljcyk7CisgICAgICAgICAgICBtTGlzdFNjcm9sbFRvcE9mZnNldCA9IChpbnQpIFR5cGVkVmFsdWUuYXBwbHlEaW1lbnNpb24oVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRElQLAorICAgICAgICAgICAgICAgICAgICBVTlNDQUxFRF9MSVNUX1NDUk9MTF9UT1BfT0ZGU0VULCBkaXNwbGF5TWV0cmljcyk7CisgICAgICAgICAgICBtQm90dG9tQnVmZmVyID0gKGludCkgVHlwZWRWYWx1ZS5hcHBseURpbWVuc2lvbihUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9ESVAsCisgICAgICAgICAgICAgICAgICAgIFVOU0NBTEVEX0JPVFRPTV9CVUZGRVIsIGRpc3BsYXlNZXRyaWNzKTsKKyAgICAgICAgICAgIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhcldpZHRoID0gKGludCkgVHlwZWRWYWx1ZS5hcHBseURpbWVuc2lvbihUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9ESVAsCisgICAgICAgICAgICAgICAgICAgIFVOU0NBTEVEX1NFTEVDVEVEX0RBVEVfVkVSVElDQUxfQkFSX1dJRFRILCBkaXNwbGF5TWV0cmljcyk7CisgICAgICAgICAgICBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aCA9IChpbnQpIFR5cGVkVmFsdWUuYXBwbHlEaW1lbnNpb24oVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRElQLAorICAgICAgICAgICAgICAgICAgICBVTlNDQUxFRF9XRUVLX1NFUEFSQVRPUl9MSU5FX1dJRFRILCBkaXNwbGF5TWV0cmljcyk7CisKKyAgICAgICAgICAgIExheW91dEluZmxhdGVyIGxheW91dEluZmxhdGVyID0gKExheW91dEluZmxhdGVyKSBtQ29udGV4dAorICAgICAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShTZXJ2aWNlLkxBWU9VVF9JTkZMQVRFUl9TRVJWSUNFKTsKKyAgICAgICAgICAgIFZpZXcgY29udGVudCA9IGxheW91dEluZmxhdGVyLmluZmxhdGUoUi5sYXlvdXQuY2FsZW5kYXJfdmlldywgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgbURlbGVnYXRvci5hZGRWaWV3KGNvbnRlbnQpOworCisgICAgICAgICAgICBtTGlzdFZpZXcgPSAoTGlzdFZpZXcpIG1EZWxlZ2F0b3IuZmluZFZpZXdCeUlkKFIuaWQubGlzdCk7CisgICAgICAgICAgICBtRGF5TmFtZXNIZWFkZXIgPSAoVmlld0dyb3VwKSBjb250ZW50LmZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmRheV9uYW1lcyk7CisgICAgICAgICAgICBtTW9udGhOYW1lID0gKFRleHRWaWV3KSBjb250ZW50LmZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLm1vbnRoX25hbWUpOworCisgICAgICAgICAgICBzZXRVcEhlYWRlcigpOworICAgICAgICAgICAgc2V0VXBMaXN0VmlldygpOworICAgICAgICAgICAgc2V0VXBBZGFwdGVyKCk7CisKKyAgICAgICAgICAgIC8vIGdvIHRvIHRvZGF5IG9yIHdoaWNoZXZlciBpcyBjbG9zZSB0byB0b2RheSBtaW4gb3IgbWF4IGRhdGUKKyAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOworICAgICAgICAgICAgaWYgKG1UZW1wRGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7CisgICAgICAgICAgICAgICAgZ29UbyhtTWluRGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtTWF4RGF0ZS5iZWZvcmUobVRlbXBEYXRlKSkgeworICAgICAgICAgICAgICAgIGdvVG8obU1heERhdGUsIGZhbHNlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZ29UbyhtVGVtcERhdGUsIGZhbHNlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbURlbGVnYXRvci5pbnZhbGlkYXRlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBtQ3VycmVudExvY2FsZSA9IGxvY2FsZTsKLQotICAgICAgICBtVGVtcERhdGUgPSBnZXRDYWxlbmRhckZvckxvY2FsZShtVGVtcERhdGUsIGxvY2FsZSk7Ci0gICAgICAgIG1GaXJzdERheU9mTW9udGggPSBnZXRDYWxlbmRhckZvckxvY2FsZShtRmlyc3REYXlPZk1vbnRoLCBsb2NhbGUpOwotICAgICAgICBtTWluRGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1NaW5EYXRlLCBsb2NhbGUpOwotICAgICAgICBtTWF4RGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1NYXhEYXRlLCBsb2NhbGUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgYSBjYWxlbmRhciBmb3IgbG9jYWxlIGJvb3RzdHJhcHBlZCB3aXRoIHRoZSB2YWx1ZSBvZiBhIGdpdmVuIGNhbGVuZGFyLgotICAgICAqCi0gICAgICogQHBhcmFtIG9sZENhbGVuZGFyIFRoZSBvbGQgY2FsZW5kYXIuCi0gICAgICogQHBhcmFtIGxvY2FsZSBUaGUgbG9jYWxlLgotICAgICAqLwotICAgIHByaXZhdGUgQ2FsZW5kYXIgZ2V0Q2FsZW5kYXJGb3JMb2NhbGUoQ2FsZW5kYXIgb2xkQ2FsZW5kYXIsIExvY2FsZSBsb2NhbGUpIHsKLSAgICAgICAgaWYgKG9sZENhbGVuZGFyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmluYWwgbG9uZyBjdXJyZW50VGltZU1pbGxpcyA9IG9sZENhbGVuZGFyLmdldFRpbWVJbk1pbGxpcygpOwotICAgICAgICAgICAgQ2FsZW5kYXIgbmV3Q2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOwotICAgICAgICAgICAgbmV3Q2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKGN1cnJlbnRUaW1lTWlsbGlzKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdDYWxlbmRhcjsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFNob3duV2Vla0NvdW50KGludCBjb3VudCkgeworICAgICAgICAgICAgaWYgKG1TaG93bldlZWtDb3VudCAhPSBjb3VudCkgeworICAgICAgICAgICAgICAgIG1TaG93bldlZWtDb3VudCA9IGNvdW50OworICAgICAgICAgICAgICAgIG1EZWxlZ2F0b3IuaW52YWxpZGF0ZSgpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSA8Y29kZT5maXJzdERhdGU8L2NvZGU+IGlzIHRoZSBzYW1lIGFzIHRoZSA8Y29kZT4KLSAgICAgKiBzZWNvbmREYXRlPC9jb2RlPi4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNTYW1lRGF0ZShDYWxlbmRhciBmaXJzdERhdGUsIENhbGVuZGFyIHNlY29uZERhdGUpIHsKLSAgICAgICAgcmV0dXJuIChmaXJzdERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSA9PSBzZWNvbmREYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikKLSAgICAgICAgICAgICAgICAmJiBmaXJzdERhdGUuZ2V0KENhbGVuZGFyLllFQVIpID09IHNlY29uZERhdGUuZ2V0KENhbGVuZGFyLllFQVIpKTsKLSAgICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldFNob3duV2Vla0NvdW50KCkgeworICAgICAgICAgICAgcmV0dXJuIG1TaG93bldlZWtDb3VudDsKKyAgICAgICAgfQogCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGlmIG5lY2Vzc2FyeSBhbmQgc2V0cyB1cCBpdHMgcGFyYW1ldGVycy4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0VXBBZGFwdGVyKCkgewotICAgICAgICBpZiAobUFkYXB0ZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgbUFkYXB0ZXIgPSBuZXcgV2Vla3NBZGFwdGVyKCk7Ci0gICAgICAgICAgICBtQWRhcHRlci5yZWdpc3RlckRhdGFTZXRPYnNlcnZlcihuZXcgRGF0YVNldE9ic2VydmVyKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlZCgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1PbkRhdGVDaGFuZ2VMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhciBzZWxlY3RlZERheSA9IG1BZGFwdGVyLmdldFNlbGVjdGVkRGF5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtT25EYXRlQ2hhbmdlTGlzdGVuZXIub25TZWxlY3RlZERheUNoYW5nZShDYWxlbmRhclZpZXcudGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWREYXkuZ2V0KENhbGVuZGFyLllFQVIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZERheS5nZXQoQ2FsZW5kYXIuTU9OVEgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZERheS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IoaW50IGNvbG9yKSB7CisgICAgICAgICAgICBpZiAobVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvciAhPSBjb2xvcikgeworICAgICAgICAgICAgICAgIG1TZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRDb3VudCA9IG1MaXN0Vmlldy5nZXRDaGlsZENvdW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgV2Vla1ZpZXcgd2Vla1ZpZXcgPSAoV2Vla1ZpZXcpIG1MaXN0Vmlldy5nZXRDaGlsZEF0KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAod2Vla1ZpZXcubUhhc1NlbGVjdGVkRGF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZWVrVmlldy5pbnZhbGlkYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIG1MaXN0Vmlldy5zZXRBZGFwdGVyKG1BZGFwdGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJlZnJlc2ggdGhlIHZpZXcgd2l0aCB0aGUgbmV3IHBhcmFtZXRlcnMKLSAgICAgICAgbUFkYXB0ZXIubm90aWZ5RGF0YVNldENoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHVwIHRoZSBzdHJpbmdzIHRvIGJlIHVzZWQgYnkgdGhlIGhlYWRlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0VXBIZWFkZXIoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZ1tdIHRpbnlXZWVrZGF5TmFtZXMgPSBMb2NhbGVEYXRhLmdldChMb2NhbGUuZ2V0RGVmYXVsdCgpKS50aW55V2Vla2RheU5hbWVzOwotICAgICAgICBtRGF5TGFiZWxzID0gbmV3IFN0cmluZ1ttRGF5c1BlcldlZWtdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1EYXlzUGVyV2VlazsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgaiA9IGkgKyBtRmlyc3REYXlPZldlZWs7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY2FsZW5kYXJEYXkgPSAoaiA+IENhbGVuZGFyLlNBVFVSREFZKSA/IGogLSBDYWxlbmRhci5TQVRVUkRBWSA6IGo7Ci0gICAgICAgICAgICBtRGF5TGFiZWxzW2ldID0gdGlueVdlZWtkYXlOYW1lc1tjYWxlbmRhckRheV07Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRGVhbCB3aXRoIHdlZWsgbnVtYmVyCi0gICAgICAgIFRleHRWaWV3IGxhYmVsID0gKFRleHRWaWV3KSBtRGF5TmFtZXNIZWFkZXIuZ2V0Q2hpbGRBdCgwKTsKLSAgICAgICAgaWYgKG1TaG93V2Vla051bWJlcikgewotICAgICAgICAgICAgbGFiZWwuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGFiZWwuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICB9Ci0gICAgICAgIC8vIERlYWwgd2l0aCBkYXkgbGFiZWxzCi0gICAgICAgIGZpbmFsIGludCBjb3VudCA9IG1EYXlOYW1lc0hlYWRlci5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgLSAxOyBpKyspIHsKLSAgICAgICAgICAgIGxhYmVsID0gKFRleHRWaWV3KSBtRGF5TmFtZXNIZWFkZXIuZ2V0Q2hpbGRBdChpICsgMSk7Ci0gICAgICAgICAgICBpZiAobVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkID4gLTEpIHsKLSAgICAgICAgICAgICAgICBsYWJlbC5zZXRUZXh0QXBwZWFyYW5jZShtQ29udGV4dCwgbVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpIDwgbURheXNQZXJXZWVrKSB7Ci0gICAgICAgICAgICAgICAgbGFiZWwuc2V0VGV4dChtRGF5TGFiZWxzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldFNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcigpIHsKKyAgICAgICAgICAgIHJldHVybiBtU2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEZvY3VzZWRNb250aERhdGVDb2xvcihpbnQgY29sb3IpIHsKKyAgICAgICAgICAgIGlmIChtRm9jdXNlZE1vbnRoRGF0ZUNvbG9yICE9IGNvbG9yKSB7CisgICAgICAgICAgICAgICAgbUZvY3VzZWRNb250aERhdGVDb2xvciA9IGNvbG9yOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gbUxpc3RWaWV3LmdldENoaWxkQ291bnQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IChXZWVrVmlldykgbUxpc3RWaWV3LmdldENoaWxkQXQoaSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh3ZWVrVmlldy5tSGFzRm9jdXNlZERheSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2Vla1ZpZXcuaW52YWxpZGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0Rm9jdXNlZE1vbnRoRGF0ZUNvbG9yKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Gb2N1c2VkTW9udGhEYXRlQ29sb3I7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0VW5mb2N1c2VkTW9udGhEYXRlQ29sb3IoaW50IGNvbG9yKSB7CisgICAgICAgICAgICBpZiAobVVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yICE9IGNvbG9yKSB7CisgICAgICAgICAgICAgICAgbVVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yID0gY29sb3I7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFdlZWtWaWV3IHdlZWtWaWV3ID0gKFdlZWtWaWV3KSBtTGlzdFZpZXcuZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdlZWtWaWV3Lm1IYXNVbmZvY3VzZWREYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Gb2N1c2VkTW9udGhEYXRlQ29sb3I7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0V2Vla051bWJlckNvbG9yKGludCBjb2xvcikgeworICAgICAgICAgICAgaWYgKG1XZWVrTnVtYmVyQ29sb3IgIT0gY29sb3IpIHsKKyAgICAgICAgICAgICAgICBtV2Vla051bWJlckNvbG9yID0gY29sb3I7CisgICAgICAgICAgICAgICAgaWYgKG1TaG93V2Vla051bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlQWxsV2Vla1ZpZXdzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0V2Vla051bWJlckNvbG9yKCkgeworICAgICAgICAgICAgcmV0dXJuIG1XZWVrTnVtYmVyQ29sb3I7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcihpbnQgY29sb3IpIHsKKyAgICAgICAgICAgIGlmIChtV2Vla1NlcGFyYXRvckxpbmVDb2xvciAhPSBjb2xvcikgeworICAgICAgICAgICAgICAgIG1XZWVrU2VwYXJhdG9yTGluZUNvbG9yID0gY29sb3I7CisgICAgICAgICAgICAgICAgaW52YWxpZGF0ZUFsbFdlZWtWaWV3cygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcigpIHsKKyAgICAgICAgICAgIHJldHVybiBtV2Vla1NlcGFyYXRvckxpbmVDb2xvcjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZERhdGVWZXJ0aWNhbEJhcihpbnQgcmVzb3VyY2VJZCkgeworICAgICAgICAgICAgRHJhd2FibGUgZHJhd2FibGUgPSBtRGVsZWdhdG9yLmdldFJlc291cmNlcygpLmdldERyYXdhYmxlKHJlc291cmNlSWQpOworICAgICAgICAgICAgc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoZHJhd2FibGUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyKERyYXdhYmxlIGRyYXdhYmxlKSB7CisgICAgICAgICAgICBpZiAobVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyICE9IGRyYXdhYmxlKSB7CisgICAgICAgICAgICAgICAgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyID0gZHJhd2FibGU7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFdlZWtWaWV3IHdlZWtWaWV3ID0gKFdlZWtWaWV3KSBtTGlzdFZpZXcuZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdlZWtWaWV3Lm1IYXNTZWxlY3RlZERheSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2Vla1ZpZXcuaW52YWxpZGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBEcmF3YWJsZSBnZXRTZWxlY3RlZERhdGVWZXJ0aWNhbEJhcigpIHsKKyAgICAgICAgICAgIHJldHVybiBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0V2Vla0RheVRleHRBcHBlYXJhbmNlKGludCByZXNvdXJjZUlkKSB7CisgICAgICAgICAgICBpZiAobVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkICE9IHJlc291cmNlSWQpIHsKKyAgICAgICAgICAgICAgICBtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQgPSByZXNvdXJjZUlkOworICAgICAgICAgICAgICAgIHNldFVwSGVhZGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBnZXRXZWVrRGF5VGV4dEFwcGVhcmFuY2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldERhdGVUZXh0QXBwZWFyYW5jZShpbnQgcmVzb3VyY2VJZCkgeworICAgICAgICAgICAgaWYgKG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZCAhPSByZXNvdXJjZUlkKSB7CisgICAgICAgICAgICAgICAgbURhdGVUZXh0QXBwZWFyYW5jZVJlc0lkID0gcmVzb3VyY2VJZDsKKyAgICAgICAgICAgICAgICB1cGRhdGVEYXRlVGV4dFNpemUoKTsKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlQWxsV2Vla1ZpZXdzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBnZXREYXRlVGV4dEFwcGVhcmFuY2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbURhdGVUZXh0QXBwZWFyYW5jZVJlc0lkOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgICAgICBtTGlzdFZpZXcuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisgICAgICAgICAgICByZXR1cm4gbUxpc3RWaWV3LmlzRW5hYmxlZCgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldE1pbkRhdGUobG9uZyBtaW5EYXRlKSB7CisgICAgICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKG1pbkRhdGUpOworICAgICAgICAgICAgaWYgKGlzU2FtZURhdGUobVRlbXBEYXRlLCBtTWluRGF0ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtTWluRGF0ZS5zZXRUaW1lSW5NaWxsaXMobWluRGF0ZSk7CisgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgZGF0ZSBpcyBub3QgZWFybGllciB0aGFuCisgICAgICAgICAgICAvLyB0aGUgbmV3IG1pbiBkYXRlIHNpbmNlIHRoZSBsYXR0ZXIgaXMgdXNlZCBmb3IKKyAgICAgICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBpbmRpY2VzIGluIHRoZSBhZGFwdGVyIHRodXMKKyAgICAgICAgICAgIC8vIGF2b2lkaW5nIG91dCBvZiBib3VuZHMgZXJyb3IKKyAgICAgICAgICAgIENhbGVuZGFyIGRhdGUgPSBtQWRhcHRlci5tU2VsZWN0ZWREYXRlOworICAgICAgICAgICAgaWYgKGRhdGUuYmVmb3JlKG1NaW5EYXRlKSkgeworICAgICAgICAgICAgICAgIG1BZGFwdGVyLnNldFNlbGVjdGVkRGF5KG1NaW5EYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHJlaW5pdGlhbGl6ZSB0aGUgYWRhcHRlciBzaW5jZSBpdHMgcmFuZ2UgZGVwZW5kcyBvbiBtaW4gZGF0ZQorICAgICAgICAgICAgbUFkYXB0ZXIuaW5pdCgpOworICAgICAgICAgICAgaWYgKGRhdGUuYmVmb3JlKG1NaW5EYXRlKSkgeworICAgICAgICAgICAgICAgIHNldERhdGUobVRlbXBEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gd2UgZ28gdG8gdGhlIGN1cnJlbnQgZGF0ZSB0byBmb3JjZSB0aGUgTGlzdFZpZXcgdG8gcXVlcnkgaXRzCisgICAgICAgICAgICAgICAgLy8gYWRhcHRlciBmb3IgdGhlIHNob3duIHZpZXdzIHNpbmNlIHdlIGhhdmUgY2hhbmdlZCB0aGUgYWRhcHRlcgorICAgICAgICAgICAgICAgIC8vIHJhbmdlIGFuZCB0aGUgYmFzZSBmcm9tIHdoaWNoIHRoZSBsYXRlciBjYWxjdWxhdGVzIGl0ZW0gaW5kaWNlcworICAgICAgICAgICAgICAgIC8vIG5vdGUgdGhhdCBjYWxsaW5nIHNldERhdGUgd2lsbCBub3Qgd29yayBzaW5jZSB0aGUgZGF0ZSBpcyB0aGUgc2FtZQorICAgICAgICAgICAgICAgIGdvVG8oZGF0ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgbG9uZyBnZXRNaW5EYXRlKCkgeworICAgICAgICAgICAgcmV0dXJuIG1NaW5EYXRlLmdldFRpbWVJbk1pbGxpcygpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldE1heERhdGUobG9uZyBtYXhEYXRlKSB7CisgICAgICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKG1heERhdGUpOworICAgICAgICAgICAgaWYgKGlzU2FtZURhdGUobVRlbXBEYXRlLCBtTWF4RGF0ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtTWF4RGF0ZS5zZXRUaW1lSW5NaWxsaXMobWF4RGF0ZSk7CisgICAgICAgICAgICAvLyByZWluaXRpYWxpemUgdGhlIGFkYXB0ZXIgc2luY2UgaXRzIHJhbmdlIGRlcGVuZHMgb24gbWF4IGRhdGUKKyAgICAgICAgICAgIG1BZGFwdGVyLmluaXQoKTsKKyAgICAgICAgICAgIENhbGVuZGFyIGRhdGUgPSBtQWRhcHRlci5tU2VsZWN0ZWREYXRlOworICAgICAgICAgICAgaWYgKGRhdGUuYWZ0ZXIobU1heERhdGUpKSB7CisgICAgICAgICAgICAgICAgc2V0RGF0ZShtTWF4RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIHdlIGdvIHRvIHRoZSBjdXJyZW50IGRhdGUgdG8gZm9yY2UgdGhlIExpc3RWaWV3IHRvIHF1ZXJ5IGl0cworICAgICAgICAgICAgICAgIC8vIGFkYXB0ZXIgZm9yIHRoZSBzaG93biB2aWV3cyBzaW5jZSB3ZSBoYXZlIGNoYW5nZWQgdGhlIGFkYXB0ZXIKKyAgICAgICAgICAgICAgICAvLyByYW5nZSBhbmQgdGhlIGJhc2UgZnJvbSB3aGljaCB0aGUgbGF0ZXIgY2FsY3VsYXRlcyBpdGVtIGluZGljZXMKKyAgICAgICAgICAgICAgICAvLyBub3RlIHRoYXQgY2FsbGluZyBzZXREYXRlIHdpbGwgbm90IHdvcmsgc2luY2UgdGhlIGRhdGUgaXMgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICBnb1RvKGRhdGUsIGZhbHNlLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0TWF4RGF0ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtTWF4RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRTaG93V2Vla051bWJlcihib29sZWFuIHNob3dXZWVrTnVtYmVyKSB7CisgICAgICAgICAgICBpZiAobVNob3dXZWVrTnVtYmVyID09IHNob3dXZWVrTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVNob3dXZWVrTnVtYmVyID0gc2hvd1dlZWtOdW1iZXI7CisgICAgICAgICAgICBtQWRhcHRlci5ub3RpZnlEYXRhU2V0Q2hhbmdlZCgpOworICAgICAgICAgICAgc2V0VXBIZWFkZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93V2Vla051bWJlcigpIHsKKyAgICAgICAgICAgIHJldHVybiBtU2hvd1dlZWtOdW1iZXI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0Rmlyc3REYXlPZldlZWsoaW50IGZpcnN0RGF5T2ZXZWVrKSB7CisgICAgICAgICAgICBpZiAobUZpcnN0RGF5T2ZXZWVrID09IGZpcnN0RGF5T2ZXZWVrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUZpcnN0RGF5T2ZXZWVrID0gZmlyc3REYXlPZldlZWs7CisgICAgICAgICAgICBtQWRhcHRlci5pbml0KCk7CisgICAgICAgICAgICBtQWRhcHRlci5ub3RpZnlEYXRhU2V0Q2hhbmdlZCgpOworICAgICAgICAgICAgc2V0VXBIZWFkZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldEZpcnN0RGF5T2ZXZWVrKCkgeworICAgICAgICAgICAgcmV0dXJuIG1GaXJzdERheU9mV2VlazsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXREYXRlKGxvbmcgZGF0ZSkgeworICAgICAgICAgICAgc2V0RGF0ZShkYXRlLCBmYWxzZSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldERhdGUobG9uZyBkYXRlLCBib29sZWFuIGFuaW1hdGUsIGJvb2xlYW4gY2VudGVyKSB7CisgICAgICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKGRhdGUpOworICAgICAgICAgICAgaWYgKGlzU2FtZURhdGUobVRlbXBEYXRlLCBtQWRhcHRlci5tU2VsZWN0ZWREYXRlKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvVG8obVRlbXBEYXRlLCBhbmltYXRlLCB0cnVlLCBjZW50ZXIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBsb25nIGdldERhdGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbUFkYXB0ZXIubVNlbGVjdGVkRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRPbkRhdGVDaGFuZ2VMaXN0ZW5lcihPbkRhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcikgeworICAgICAgICAgICAgbU9uRGF0ZUNoYW5nZUxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZChDb25maWd1cmF0aW9uIG5ld0NvbmZpZykgeworICAgICAgICAgICAgc2V0Q3VycmVudExvY2FsZShuZXdDb25maWcubG9jYWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgICAgICBldmVudC5zZXRDbGFzc05hbWUoQ2FsZW5kYXJWaWV3LmNsYXNzLmdldE5hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBpbmZvKSB7CisgICAgICAgICAgICBpbmZvLnNldENsYXNzTmFtZShDYWxlbmRhclZpZXcuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGxvY2FsZSBUaGUgY3VycmVudCBsb2NhbGUuCisgICAgICAgICAqLworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgc2V0Q3VycmVudExvY2FsZShMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgICAgICBzdXBlci5zZXRDdXJyZW50TG9jYWxlKGxvY2FsZSk7CisKKyAgICAgICAgICAgIG1UZW1wRGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1UZW1wRGF0ZSwgbG9jYWxlKTsKKyAgICAgICAgICAgIG1GaXJzdERheU9mTW9udGggPSBnZXRDYWxlbmRhckZvckxvY2FsZShtRmlyc3REYXlPZk1vbnRoLCBsb2NhbGUpOworICAgICAgICAgICAgbU1pbkRhdGUgPSBnZXRDYWxlbmRhckZvckxvY2FsZShtTWluRGF0ZSwgbG9jYWxlKTsKKyAgICAgICAgICAgIG1NYXhEYXRlID0gZ2V0Q2FsZW5kYXJGb3JMb2NhbGUobU1heERhdGUsIGxvY2FsZSk7CisgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZURhdGVUZXh0U2l6ZSgpIHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXkgZGF0ZVRleHRBcHBlYXJhbmNlID0gbURlbGVnYXRvci5nZXRDb250ZXh0KCkub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICAgICAgbURhdGVUZXh0QXBwZWFyYW5jZVJlc0lkLCBSLnN0eWxlYWJsZS5UZXh0QXBwZWFyYW5jZSk7CisgICAgICAgICAgICBtRGF0ZVRleHRTaXplID0gZGF0ZVRleHRBcHBlYXJhbmNlLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVGV4dEFwcGVhcmFuY2VfdGV4dFNpemUsIERFRkFVTFRfREFURV9URVhUX1NJWkUpOworICAgICAgICAgICAgZGF0ZVRleHRBcHBlYXJhbmNlLnJlY3ljbGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJbnZhbGlkYXRlcyBhbGwgd2VlayB2aWV3cy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsV2Vla1ZpZXdzKCkgeworICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBWaWV3IHZpZXcgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgICAgICB2aWV3LmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGEgY2FsZW5kYXIgZm9yIGxvY2FsZSBib290c3RyYXBwZWQgd2l0aCB0aGUgdmFsdWUgb2YgYSBnaXZlbiBjYWxlbmRhci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG9sZENhbGVuZGFyIFRoZSBvbGQgY2FsZW5kYXIuCisgICAgICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGxvY2FsZS4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgc3RhdGljIENhbGVuZGFyIGdldENhbGVuZGFyRm9yTG9jYWxlKENhbGVuZGFyIG9sZENhbGVuZGFyLCBMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgICAgICBpZiAob2xkQ2FsZW5kYXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lTWlsbGlzID0gb2xkQ2FsZW5kYXIuZ2V0VGltZUluTWlsbGlzKCk7CisgICAgICAgICAgICAgICAgQ2FsZW5kYXIgbmV3Q2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOworICAgICAgICAgICAgICAgIG5ld0NhbGVuZGFyLnNldFRpbWVJbk1pbGxpcyhjdXJyZW50VGltZU1pbGxpcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0NhbGVuZGFyOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgPGNvZGU+Zmlyc3REYXRlPC9jb2RlPiBpcyB0aGUgc2FtZSBhcyB0aGUgPGNvZGU+CisgICAgICAgICAqIHNlY29uZERhdGU8L2NvZGU+LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NhbWVEYXRlKENhbGVuZGFyIGZpcnN0RGF0ZSwgQ2FsZW5kYXIgc2Vjb25kRGF0ZSkgeworICAgICAgICAgICAgcmV0dXJuIChmaXJzdERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSA9PSBzZWNvbmREYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikKKyAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3REYXRlLmdldChDYWxlbmRhci5ZRUFSKSA9PSBzZWNvbmREYXRlLmdldChDYWxlbmRhci5ZRUFSKSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGlmIG5lY2Vzc2FyeSBhbmQgc2V0cyB1cCBpdHMgcGFyYW1ldGVycy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCBzZXRVcEFkYXB0ZXIoKSB7CisgICAgICAgICAgICBpZiAobUFkYXB0ZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1BZGFwdGVyID0gbmV3IFdlZWtzQWRhcHRlcihtQ29udGV4dCk7CisgICAgICAgICAgICAgICAgbUFkYXB0ZXIucmVnaXN0ZXJEYXRhU2V0T2JzZXJ2ZXIobmV3IERhdGFTZXRPYnNlcnZlcigpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlZCgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtT25EYXRlQ2hhbmdlTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyIHNlbGVjdGVkRGF5ID0gbUFkYXB0ZXIuZ2V0U2VsZWN0ZWREYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT25EYXRlQ2hhbmdlTGlzdGVuZXIub25TZWxlY3RlZERheUNoYW5nZShtRGVsZWdhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWREYXkuZ2V0KENhbGVuZGFyLllFQVIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWREYXkuZ2V0KENhbGVuZGFyLk1PTlRIKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRGF5LmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIG1MaXN0Vmlldy5zZXRBZGFwdGVyKG1BZGFwdGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gcmVmcmVzaCB0aGUgdmlldyB3aXRoIHRoZSBuZXcgcGFyYW1ldGVycworICAgICAgICAgICAgbUFkYXB0ZXIubm90aWZ5RGF0YVNldENoYW5nZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHVwIHRoZSBzdHJpbmdzIHRvIGJlIHVzZWQgYnkgdGhlIGhlYWRlci4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCBzZXRVcEhlYWRlcigpIHsKKyAgICAgICAgICAgIG1EYXlMYWJlbHMgPSBuZXcgU3RyaW5nW21EYXlzUGVyV2Vla107CisgICAgICAgICAgICBmb3IgKGludCBpID0gbUZpcnN0RGF5T2ZXZWVrLCBjb3VudCA9IG1GaXJzdERheU9mV2VlayArIG1EYXlzUGVyV2VlazsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgY2FsZW5kYXJEYXkgPSAoaSA+IENhbGVuZGFyLlNBVFVSREFZKSA/IGkgLSBDYWxlbmRhci5TQVRVUkRBWSA6IGk7CisgICAgICAgICAgICAgICAgbURheUxhYmVsc1tpIC0gbUZpcnN0RGF5T2ZXZWVrXSA9IERhdGVVdGlscy5nZXREYXlPZldlZWtTdHJpbmcoY2FsZW5kYXJEYXksCisgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVXRpbHMuTEVOR1RIX1NIT1JURVNUKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVGV4dFZpZXcgbGFiZWwgPSAoVGV4dFZpZXcpIG1EYXlOYW1lc0hlYWRlci5nZXRDaGlsZEF0KDApOworICAgICAgICAgICAgaWYgKG1TaG93V2Vla051bWJlcikgewogICAgICAgICAgICAgICAgIGxhYmVsLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbGFiZWwuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1EYXlOYW1lc0hlYWRlci5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBhbGwgdGhlIHJlcXVpcmVkIGZpZWxkcyBmb3IgdGhlIGxpc3Qgdmlldy4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0VXBMaXN0VmlldygpIHsKLSAgICAgICAgLy8gQ29uZmlndXJlIHRoZSBsaXN0dmlldwotICAgICAgICBtTGlzdFZpZXcuc2V0RGl2aWRlcihudWxsKTsKLSAgICAgICAgbUxpc3RWaWV3LnNldEl0ZW1zQ2FuRm9jdXModHJ1ZSk7Ci0gICAgICAgIG1MaXN0Vmlldy5zZXRWZXJ0aWNhbFNjcm9sbEJhckVuYWJsZWQoZmFsc2UpOwotICAgICAgICBtTGlzdFZpZXcuc2V0T25TY3JvbGxMaXN0ZW5lcihuZXcgT25TY3JvbGxMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2Nyb2xsU3RhdGVDaGFuZ2VkKEFic0xpc3RWaWV3IHZpZXcsIGludCBzY3JvbGxTdGF0ZSkgewotICAgICAgICAgICAgICAgIENhbGVuZGFyVmlldy50aGlzLm9uU2Nyb2xsU3RhdGVDaGFuZ2VkKHZpZXcsIHNjcm9sbFN0YXRlKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxLCBjb3VudCA9IG1EYXlOYW1lc0hlYWRlci5nZXRDaGlsZENvdW50KCk7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgbGFiZWwgPSAoVGV4dFZpZXcpIG1EYXlOYW1lc0hlYWRlci5nZXRDaGlsZEF0KGkpOworICAgICAgICAgICAgICAgIGlmIChtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQgPiAtMSkgeworICAgICAgICAgICAgICAgICAgICBsYWJlbC5zZXRUZXh0QXBwZWFyYW5jZShtQ29udGV4dCwgbVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGkgPCBtRGF5c1BlcldlZWsgKyAxKSB7CisgICAgICAgICAgICAgICAgICAgIGxhYmVsLnNldFRleHQobURheUxhYmVsc1tpIC0gMV0pOworICAgICAgICAgICAgICAgICAgICBsYWJlbC5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGFiZWwuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25TY3JvbGwoCi0gICAgICAgICAgICAgICAgICAgIEFic0xpc3RWaWV3IHZpZXcsIGludCBmaXJzdFZpc2libGVJdGVtLCBpbnQgdmlzaWJsZUl0ZW1Db3VudCwKLSAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFsSXRlbUNvdW50KSB7Ci0gICAgICAgICAgICAgICAgQ2FsZW5kYXJWaWV3LnRoaXMub25TY3JvbGwodmlldywgZmlyc3RWaXNpYmxlSXRlbSwgdmlzaWJsZUl0ZW1Db3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbUNvdW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIC8vIE1ha2UgdGhlIHNjcm9sbGluZyBiZWhhdmlvciBuaWNlcgotICAgICAgICBtTGlzdFZpZXcuc2V0RnJpY3Rpb24obUZyaWN0aW9uKTsKLSAgICAgICAgbUxpc3RWaWV3LnNldFZlbG9jaXR5U2NhbGUobVZlbG9jaXR5U2NhbGUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgbW92ZXMgdG8gdGhlIHNwZWNpZmllZCB0aW1lIGluIHRoZSB2aWV3LiBJZiB0aGUgdGltZSBpcyBub3QgYWxyZWFkeQotICAgICAqIGluIHJhbmdlIGl0IHdpbGwgbW92ZSB0aGUgbGlzdCBzbyB0aGF0IHRoZSBmaXJzdCBvZiB0aGUgbW9udGggY29udGFpbmluZwotICAgICAqIHRoZSB0aW1lIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcuIElmIHRoZSBuZXcgdGltZSBpcyBhbHJlYWR5IGluIHZpZXcKLSAgICAgKiB0aGUgbGlzdCB3aWxsIG5vdCBiZSBzY3JvbGxlZCB1bmxlc3MgZm9yY2VTY3JvbGwgaXMgdHJ1ZS4gVGhpcyB0aW1lIG1heQotICAgICAqIG9wdGlvbmFsbHkgYmUgaGlnaGxpZ2h0ZWQgYXMgc2VsZWN0ZWQgYXMgd2VsbC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkYXRlIFRoZSB0aW1lIHRvIG1vdmUgdG8uCi0gICAgICogQHBhcmFtIGFuaW1hdGUgV2hldGhlciB0byBzY3JvbGwgdG8gdGhlIGdpdmVuIHRpbWUgb3IganVzdCByZWRyYXcgYXQgdGhlCi0gICAgICogICAgICAgICAgICBuZXcgbG9jYXRpb24uCi0gICAgICogQHBhcmFtIHNldFNlbGVjdGVkIFdoZXRoZXIgdG8gc2V0IHRoZSBnaXZlbiB0aW1lIGFzIHNlbGVjdGVkLgotICAgICAqIEBwYXJhbSBmb3JjZVNjcm9sbCBXaGV0aGVyIHRvIHJlY2VudGVyIGV2ZW4gaWYgdGhlIHRpbWUgaXMgYWxyZWFkeQotICAgICAqICAgICAgICAgICAgdmlzaWJsZS4KLSAgICAgKgotICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIG9mIHRoZSBwcm92aWRlZCBkYXRlIGlzIGJlZm9yZSB0aGUKLSAgICAgKiAgICAgICAgcmFuZ2Ugc3RhcnQgb2YgYWZ0ZXIgdGhlIHJhbmdlIGVuZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgZ29UbyhDYWxlbmRhciBkYXRlLCBib29sZWFuIGFuaW1hdGUsIGJvb2xlYW4gc2V0U2VsZWN0ZWQsIGJvb2xlYW4gZm9yY2VTY3JvbGwpIHsKLSAgICAgICAgaWYgKGRhdGUuYmVmb3JlKG1NaW5EYXRlKSB8fCBkYXRlLmFmdGVyKG1NYXhEYXRlKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGltZSBub3QgYmV0d2VlbiAiICsgbU1pbkRhdGUuZ2V0VGltZSgpCi0gICAgICAgICAgICAgICAgICAgICsgIiBhbmQgIiArIG1NYXhEYXRlLmdldFRpbWUoKSk7CisgICAgICAgICAgICBtRGF5TmFtZXNIZWFkZXIuaW52YWxpZGF0ZSgpOwogICAgICAgICB9Ci0gICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IGFuZCBsYXN0IGVudGlyZWx5IHZpc2libGUgd2Vla3MKLSAgICAgICAgaW50IGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24gPSBtTGlzdFZpZXcuZ2V0Rmlyc3RWaXNpYmxlUG9zaXRpb24oKTsKLSAgICAgICAgVmlldyBmaXJzdENoaWxkID0gbUxpc3RWaWV3LmdldENoaWxkQXQoMCk7Ci0gICAgICAgIGlmIChmaXJzdENoaWxkICE9IG51bGwgJiYgZmlyc3RDaGlsZC5nZXRUb3AoKSA8IDApIHsKLSAgICAgICAgICAgIGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24rKzsKLSAgICAgICAgfQotICAgICAgICBpbnQgbGFzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uID0gZmlyc3RGdWxseVZpc2libGVQb3NpdGlvbiArIG1TaG93bldlZWtDb3VudCAtIDE7Ci0gICAgICAgIGlmIChmaXJzdENoaWxkICE9IG51bGwgJiYgZmlyc3RDaGlsZC5nZXRUb3AoKSA+IG1Cb3R0b21CdWZmZXIpIHsKLSAgICAgICAgICAgIGxhc3RGdWxseVZpc2libGVQb3NpdGlvbi0tOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzZXRTZWxlY3RlZCkgewotICAgICAgICAgICAgbUFkYXB0ZXIuc2V0U2VsZWN0ZWREYXkoZGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0IHRoZSB3ZWVrIHdlJ3JlIGdvaW5nIHRvCi0gICAgICAgIGludCBwb3NpdGlvbiA9IGdldFdlZWtzU2luY2VNaW5EYXRlKGRhdGUpOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBzZWxlY3RlZCBkYXkgaXMgbm93IG91dHNpZGUgb2Ygb3VyIHZpc2libGUgcmFuZ2UKLSAgICAgICAgLy8gYW5kIGlmIHNvIHNjcm9sbCB0byB0aGUgbW9udGggdGhhdCBjb250YWlucyBpdAotICAgICAgICBpZiAocG9zaXRpb24gPCBmaXJzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uIHx8IHBvc2l0aW9uID4gbGFzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uCi0gICAgICAgICAgICAgICAgfHwgZm9yY2VTY3JvbGwpIHsKLSAgICAgICAgICAgIG1GaXJzdERheU9mTW9udGguc2V0VGltZUluTWlsbGlzKGRhdGUuZ2V0VGltZUluTWlsbGlzKCkpOwotICAgICAgICAgICAgbUZpcnN0RGF5T2ZNb250aC5zZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAxKTsKLQotICAgICAgICAgICAgc2V0TW9udGhEaXNwbGF5ZWQobUZpcnN0RGF5T2ZNb250aCk7Ci0KLSAgICAgICAgICAgIC8vIHRoZSBlYXJsaWVzdCB0aW1lIHdlIGNhbiBzY3JvbGwgdG8gaXMgdGhlIG1pbiBkYXRlCi0gICAgICAgICAgICBpZiAobUZpcnN0RGF5T2ZNb250aC5iZWZvcmUobU1pbkRhdGUpKSB7Ci0gICAgICAgICAgICAgICAgcG9zaXRpb24gPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1GaXJzdERheU9mTW9udGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtUHJldmlvdXNTY3JvbGxTdGF0ZSA9IE9uU2Nyb2xsTGlzdGVuZXIuU0NST0xMX1NUQVRFX0ZMSU5HOwotICAgICAgICAgICAgaWYgKGFuaW1hdGUpIHsKLSAgICAgICAgICAgICAgICBtTGlzdFZpZXcuc21vb3RoU2Nyb2xsVG9Qb3NpdGlvbkZyb21Ub3AocG9zaXRpb24sIG1MaXN0U2Nyb2xsVG9wT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgR09UT19TQ1JPTExfRFVSQVRJT04pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtTGlzdFZpZXcuc2V0U2VsZWN0aW9uRnJvbVRvcChwb3NpdGlvbiwgbUxpc3RTY3JvbGxUb3BPZmZzZXQpOwotICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gYW55IGFmdGVyIHNjcm9sbCBvcGVyYXRpb25zIHRoYXQgYXJlIG5lZWRlZAotICAgICAgICAgICAgICAgIG9uU2Nyb2xsU3RhdGVDaGFuZ2VkKG1MaXN0VmlldywgT25TY3JvbGxMaXN0ZW5lci5TQ1JPTExfU1RBVEVfSURMRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc2V0U2VsZWN0ZWQpIHsKLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IHNldCB0aGUgc2VsZWN0aW9uCi0gICAgICAgICAgICBzZXRNb250aERpc3BsYXllZChkYXRlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBhcnNlcyB0aGUgZ2l2ZW4gPGNvZGU+ZGF0ZTwvY29kZT4gYW5kIGluIGNhc2Ugb2Ygc3VjY2VzcyBzZXRzCi0gICAgICogdGhlIHJlc3VsdCB0byB0aGUgPGNvZGU+b3V0RGF0ZTwvY29kZT4uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGRhdGUgd2FzIHBhcnNlZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gcGFyc2VEYXRlKFN0cmluZyBkYXRlLCBDYWxlbmRhciBvdXREYXRlKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvdXREYXRlLnNldFRpbWUobURhdGVGb3JtYXQucGFyc2UoZGF0ZSkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy53KExPR19UQUcsICJEYXRlOiAiICsgZGF0ZSArICIgbm90IGluIGZvcm1hdDogIiArIERBVEVfRk9STUFUKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIGEgPGNvZGU+dmlldzwvY29kZT4gdHJhbnNpdGlvbnMgdG8gYSBuZXcgPGNvZGU+c2Nyb2xsU3RhdGUKLSAgICAgKiA8L2NvZGU+LgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBvblNjcm9sbFN0YXRlQ2hhbmdlZChBYnNMaXN0VmlldyB2aWV3LCBpbnQgc2Nyb2xsU3RhdGUpIHsKLSAgICAgICAgbVNjcm9sbFN0YXRlQ2hhbmdlZFJ1bm5hYmxlLmRvU2Nyb2xsU3RhdGVDaGFuZ2Uodmlldywgc2Nyb2xsU3RhdGUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVwZGF0ZXMgdGhlIHRpdGxlIGFuZCBzZWxlY3RlZCBtb250aCBpZiB0aGUgPGNvZGU+dmlldzwvY29kZT4gaGFzIG1vdmVkIHRvIGEgbmV3Ci0gICAgICogbW9udGguCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIG9uU2Nyb2xsKEFic0xpc3RWaWV3IHZpZXcsIGludCBmaXJzdFZpc2libGVJdGVtLCBpbnQgdmlzaWJsZUl0ZW1Db3VudCwKLSAgICAgICAgICAgIGludCB0b3RhbEl0ZW1Db3VudCkgewotICAgICAgICBXZWVrVmlldyBjaGlsZCA9IChXZWVrVmlldykgdmlldy5nZXRDaGlsZEF0KDApOwotICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmlndXJlIG91dCB3aGVyZSB3ZSBhcmUKLSAgICAgICAgbG9uZyBjdXJyU2Nyb2xsID0gdmlldy5nZXRGaXJzdFZpc2libGVQb3NpdGlvbigpICogY2hpbGQuZ2V0SGVpZ2h0KCkgLSBjaGlsZC5nZXRCb3R0b20oKTsKLQotICAgICAgICAvLyBJZiB3ZSBoYXZlIG1vdmVkIHNpbmNlIG91ciBsYXN0IGNhbGwgdXBkYXRlIHRoZSBkaXJlY3Rpb24KLSAgICAgICAgaWYgKGN1cnJTY3JvbGwgPCBtUHJldmlvdXNTY3JvbGxQb3NpdGlvbikgewotICAgICAgICAgICAgbUlzU2Nyb2xsaW5nVXAgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGN1cnJTY3JvbGwgPiBtUHJldmlvdXNTY3JvbGxQb3NpdGlvbikgewotICAgICAgICAgICAgbUlzU2Nyb2xsaW5nVXAgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVzZSBzb21lIGh5c3RlcmVzaXMgZm9yIGNoZWNraW5nIHdoaWNoIG1vbnRoIHRvIGhpZ2hsaWdodC4gVGhpcwotICAgICAgICAvLyBjYXVzZXMgdGhlIG1vbnRoIHRvIHRyYW5zaXRpb24gd2hlbiB0d28gZnVsbCB3ZWVrcyBvZiBhIG1vbnRoIGFyZQotICAgICAgICAvLyB2aXNpYmxlIHdoZW4gc2Nyb2xsaW5nIHVwLCBhbmQgd2hlbiB0aGUgZmlyc3QgZGF5IGluIGEgbW9udGggcmVhY2hlcwotICAgICAgICAvLyB0aGUgdG9wIG9mIHRoZSBzY3JlZW4gd2hlbiBzY3JvbGxpbmcgZG93bi4KLSAgICAgICAgaW50IG9mZnNldCA9IGNoaWxkLmdldEJvdHRvbSgpIDwgbVdlZWtNaW5WaXNpYmxlSGVpZ2h0ID8gMSA6IDA7Ci0gICAgICAgIGlmIChtSXNTY3JvbGxpbmdVcCkgewotICAgICAgICAgICAgY2hpbGQgPSAoV2Vla1ZpZXcpIHZpZXcuZ2V0Q2hpbGRBdChTQ1JPTExfSFlTVF9XRUVLUyArIG9mZnNldCk7Ci0gICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ICE9IDApIHsKLSAgICAgICAgICAgIGNoaWxkID0gKFdlZWtWaWV3KSB2aWV3LmdldENoaWxkQXQob2Zmc2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZpbmQgb3V0IHdoaWNoIG1vbnRoIHdlJ3JlIG1vdmluZyBpbnRvCi0gICAgICAgIGludCBtb250aDsKLSAgICAgICAgaWYgKG1Jc1Njcm9sbGluZ1VwKSB7Ci0gICAgICAgICAgICBtb250aCA9IGNoaWxkLmdldE1vbnRoT2ZGaXJzdFdlZWtEYXkoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vbnRoID0gY2hpbGQuZ2V0TW9udGhPZkxhc3RXZWVrRGF5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3VyIGN1cnJlbnQgaGlnaGxpZ2h0ZWQgbW9udGgKLSAgICAgICAgaW50IG1vbnRoRGlmZjsKLSAgICAgICAgaWYgKG1DdXJyZW50TW9udGhEaXNwbGF5ZWQgPT0gMTEgJiYgbW9udGggPT0gMCkgewotICAgICAgICAgICAgbW9udGhEaWZmID0gMTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudE1vbnRoRGlzcGxheWVkID09IDAgJiYgbW9udGggPT0gMTEpIHsKLSAgICAgICAgICAgIG1vbnRoRGlmZiA9IC0xOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW9udGhEaWZmID0gbW9udGggLSBtQ3VycmVudE1vbnRoRGlzcGxheWVkOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT25seSBzd2l0Y2ggbW9udGhzIGlmIHdlJ3JlIHNjcm9sbGluZyBhd2F5IGZyb20gdGhlIGN1cnJlbnRseQotICAgICAgICAvLyBzZWxlY3RlZCBtb250aAotICAgICAgICBpZiAoKCFtSXNTY3JvbGxpbmdVcCAmJiBtb250aERpZmYgPiAwKSB8fCAobUlzU2Nyb2xsaW5nVXAgJiYgbW9udGhEaWZmIDwgMCkpIHsKLSAgICAgICAgICAgIENhbGVuZGFyIGZpcnN0RGF5ID0gY2hpbGQuZ2V0Rmlyc3REYXkoKTsKLSAgICAgICAgICAgIGlmIChtSXNTY3JvbGxpbmdVcCkgewotICAgICAgICAgICAgICAgIGZpcnN0RGF5LmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIC1EQVlTX1BFUl9XRUVLKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmlyc3REYXkuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgREFZU19QRVJfV0VFSyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRNb250aERpc3BsYXllZChmaXJzdERheSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVByZXZpb3VzU2Nyb2xsUG9zaXRpb24gPSBjdXJyU2Nyb2xsOwotICAgICAgICBtUHJldmlvdXNTY3JvbGxTdGF0ZSA9IG1DdXJyZW50U2Nyb2xsU3RhdGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbW9udGggZGlzcGxheWVkIGF0IHRoZSB0b3Agb2YgdGhpcyB2aWV3IGJhc2VkIG9uIHRpbWUuIE92ZXJyaWRlCi0gICAgICogdG8gYWRkIGN1c3RvbSBldmVudHMgd2hlbiB0aGUgdGl0bGUgaXMgY2hhbmdlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjYWxlbmRhciBBIGRheSBpbiB0aGUgbmV3IGZvY3VzIG1vbnRoLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXRNb250aERpc3BsYXllZChDYWxlbmRhciBjYWxlbmRhcikgewotICAgICAgICBtQ3VycmVudE1vbnRoRGlzcGxheWVkID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKTsKLSAgICAgICAgbUFkYXB0ZXIuc2V0Rm9jdXNNb250aChtQ3VycmVudE1vbnRoRGlzcGxheWVkKTsKLSAgICAgICAgZmluYWwgaW50IGZsYWdzID0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX0RBVEUgfCBEYXRlVXRpbHMuRk9STUFUX05PX01PTlRIX0RBWQotICAgICAgICAgICAgICAgIHwgRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX1lFQVI7Ci0gICAgICAgIGZpbmFsIGxvbmcgbWlsbGlzID0gY2FsZW5kYXIuZ2V0VGltZUluTWlsbGlzKCk7Ci0gICAgICAgIFN0cmluZyBuZXdNb250aE5hbWUgPSBEYXRlVXRpbHMuZm9ybWF0RGF0ZVJhbmdlKG1Db250ZXh0LCBtaWxsaXMsIG1pbGxpcywgZmxhZ3MpOwotICAgICAgICBtTW9udGhOYW1lLnNldFRleHQobmV3TW9udGhOYW1lKTsKLSAgICAgICAgbU1vbnRoTmFtZS5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2Vla3MgYmV0d2VlbiB0aGUgY3VycmVudCA8Y29kZT5kYXRlPC9jb2RlPgotICAgICAqICAgICAgICAgYW5kIHRoZSA8Y29kZT5tTWluRGF0ZTwvY29kZT4uCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgZ2V0V2Vla3NTaW5jZU1pbkRhdGUoQ2FsZW5kYXIgZGF0ZSkgewotICAgICAgICBpZiAoZGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJmcm9tRGF0ZTogIiArIG1NaW5EYXRlLmdldFRpbWUoKQotICAgICAgICAgICAgICAgICAgICArICIgZG9lcyBub3QgcHJlY2VkZSB0b0RhdGU6ICIgKyBkYXRlLmdldFRpbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbG9uZyBlbmRUaW1lTWlsbGlzID0gZGF0ZS5nZXRUaW1lSW5NaWxsaXMoKQotICAgICAgICAgICAgICAgICsgZGF0ZS5nZXRUaW1lWm9uZSgpLmdldE9mZnNldChkYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLSAgICAgICAgbG9uZyBzdGFydFRpbWVNaWxsaXMgPSBtTWluRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKQotICAgICAgICAgICAgICAgICsgbU1pbkRhdGUuZ2V0VGltZVpvbmUoKS5nZXRPZmZzZXQobU1pbkRhdGUuZ2V0VGltZUluTWlsbGlzKCkpOwotICAgICAgICBsb25nIGRheU9mZnNldE1pbGxpcyA9IChtTWluRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspIC0gbUZpcnN0RGF5T2ZXZWVrKQotICAgICAgICAgICAgICAgICogTUlMTElTX0lOX0RBWTsKLSAgICAgICAgcmV0dXJuIChpbnQpICgoZW5kVGltZU1pbGxpcyAtIHN0YXJ0VGltZU1pbGxpcyArIGRheU9mZnNldE1pbGxpcykgLyBNSUxMSVNfSU5fV0VFSyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tbWFuZCByZXNwb25zaWJsZSBmb3IgYWN0aW5nIHVwb24gc2Nyb2xsIHN0YXRlIGNoYW5nZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBjbGFzcyBTY3JvbGxTdGF0ZVJ1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgewotICAgICAgICBwcml2YXRlIEFic0xpc3RWaWV3IG1WaWV3OwotCi0gICAgICAgIHByaXZhdGUgaW50IG1OZXdTdGF0ZTsKIAogICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB1cCB0aGUgcnVubmFibGUgd2l0aCBhIHNob3J0IGRlbGF5IGluIGNhc2UgdGhlIHNjcm9sbCBzdGF0ZQotICAgICAgICAgKiBpbW1lZGlhdGVseSBjaGFuZ2VzIGFnYWluLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gdmlldyBUaGUgbGlzdCB2aWV3IHRoYXQgY2hhbmdlZCBzdGF0ZQotICAgICAgICAgKiBAcGFyYW0gc2Nyb2xsU3RhdGUgVGhlIG5ldyBzdGF0ZSBpdCBjaGFuZ2VkIHRvCisgICAgICAgICAqIFNldHMgYWxsIHRoZSByZXF1aXJlZCBmaWVsZHMgZm9yIHRoZSBsaXN0IHZpZXcuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBkb1Njcm9sbFN0YXRlQ2hhbmdlKEFic0xpc3RWaWV3IHZpZXcsIGludCBzY3JvbGxTdGF0ZSkgewotICAgICAgICAgICAgbVZpZXcgPSB2aWV3OwotICAgICAgICAgICAgbU5ld1N0YXRlID0gc2Nyb2xsU3RhdGU7Ci0gICAgICAgICAgICByZW1vdmVDYWxsYmFja3ModGhpcyk7Ci0gICAgICAgICAgICBwb3N0RGVsYXllZCh0aGlzLCBTQ1JPTExfQ0hBTkdFX0RFTEFZKTsKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHNldFVwTGlzdFZpZXcoKSB7CisgICAgICAgICAgICAvLyBDb25maWd1cmUgdGhlIGxpc3R2aWV3CisgICAgICAgICAgICBtTGlzdFZpZXcuc2V0RGl2aWRlcihudWxsKTsKKyAgICAgICAgICAgIG1MaXN0Vmlldy5zZXRJdGVtc0NhbkZvY3VzKHRydWUpOworICAgICAgICAgICAgbUxpc3RWaWV3LnNldFZlcnRpY2FsU2Nyb2xsQmFyRW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICBtTGlzdFZpZXcuc2V0T25TY3JvbGxMaXN0ZW5lcihuZXcgT25TY3JvbGxMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNjcm9sbFN0YXRlQ2hhbmdlZChBYnNMaXN0VmlldyB2aWV3LCBpbnQgc2Nyb2xsU3RhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgTGVnYWN5Q2FsZW5kYXJWaWV3RGVsZWdhdGUudGhpcy5vblNjcm9sbFN0YXRlQ2hhbmdlZCh2aWV3LCBzY3JvbGxTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TY3JvbGwoCisgICAgICAgICAgICAgICAgICAgICAgICBBYnNMaXN0VmlldyB2aWV3LCBpbnQgZmlyc3RWaXNpYmxlSXRlbSwgaW50IHZpc2libGVJdGVtQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxJdGVtQ291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgTGVnYWN5Q2FsZW5kYXJWaWV3RGVsZWdhdGUudGhpcy5vblNjcm9sbCh2aWV3LCBmaXJzdFZpc2libGVJdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVJdGVtQ291bnQsIHRvdGFsSXRlbUNvdW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIE1ha2UgdGhlIHNjcm9sbGluZyBiZWhhdmlvciBuaWNlcgorICAgICAgICAgICAgbUxpc3RWaWV3LnNldEZyaWN0aW9uKG1GcmljdGlvbik7CisgICAgICAgICAgICBtTGlzdFZpZXcuc2V0VmVsb2NpdHlTY2FsZShtVmVsb2NpdHlTY2FsZSk7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBtQ3VycmVudFNjcm9sbFN0YXRlID0gbU5ld1N0YXRlOwotICAgICAgICAgICAgLy8gRml4IHRoZSBwb3NpdGlvbiBhZnRlciBhIHNjcm9sbCBvciBhIGZsaW5nIGVuZHMKLSAgICAgICAgICAgIGlmIChtTmV3U3RhdGUgPT0gT25TY3JvbGxMaXN0ZW5lci5TQ1JPTExfU1RBVEVfSURMRQotICAgICAgICAgICAgICAgICAgICAmJiBtUHJldmlvdXNTY3JvbGxTdGF0ZSAhPSBPblNjcm9sbExpc3RlbmVyLlNDUk9MTF9TVEFURV9JRExFKSB7Ci0gICAgICAgICAgICAgICAgVmlldyBjaGlsZCA9IG1WaWV3LmdldENoaWxkQXQoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHZpZXcgaXMgbm8gbG9uZ2VyIHZpc2libGUsIGp1c3QgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbW92ZXMgdG8gdGhlIHNwZWNpZmllZCB0aW1lIGluIHRoZSB2aWV3LiBJZiB0aGUgdGltZSBpcyBub3QgYWxyZWFkeQorICAgICAgICAgKiBpbiByYW5nZSBpdCB3aWxsIG1vdmUgdGhlIGxpc3Qgc28gdGhhdCB0aGUgZmlyc3Qgb2YgdGhlIG1vbnRoIGNvbnRhaW5pbmcKKyAgICAgICAgICogdGhlIHRpbWUgaXMgYXQgdGhlIHRvcCBvZiB0aGUgdmlldy4gSWYgdGhlIG5ldyB0aW1lIGlzIGFscmVhZHkgaW4gdmlldworICAgICAgICAgKiB0aGUgbGlzdCB3aWxsIG5vdCBiZSBzY3JvbGxlZCB1bmxlc3MgZm9yY2VTY3JvbGwgaXMgdHJ1ZS4gVGhpcyB0aW1lIG1heQorICAgICAgICAgKiBvcHRpb25hbGx5IGJlIGhpZ2hsaWdodGVkIGFzIHNlbGVjdGVkIGFzIHdlbGwuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBkYXRlIFRoZSB0aW1lIHRvIG1vdmUgdG8uCisgICAgICAgICAqIEBwYXJhbSBhbmltYXRlIFdoZXRoZXIgdG8gc2Nyb2xsIHRvIHRoZSBnaXZlbiB0aW1lIG9yIGp1c3QgcmVkcmF3IGF0IHRoZQorICAgICAgICAgKiAgICAgICAgICAgIG5ldyBsb2NhdGlvbi4KKyAgICAgICAgICogQHBhcmFtIHNldFNlbGVjdGVkIFdoZXRoZXIgdG8gc2V0IHRoZSBnaXZlbiB0aW1lIGFzIHNlbGVjdGVkLgorICAgICAgICAgKiBAcGFyYW0gZm9yY2VTY3JvbGwgV2hldGhlciB0byByZWNlbnRlciBldmVuIGlmIHRoZSB0aW1lIGlzIGFscmVhZHkKKyAgICAgICAgICogICAgICAgICAgICB2aXNpYmxlLgorICAgICAgICAgKgorICAgICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBvZiB0aGUgcHJvdmlkZWQgZGF0ZSBpcyBiZWZvcmUgdGhlCisgICAgICAgICAqICAgICAgICByYW5nZSBzdGFydCBvZiBhZnRlciB0aGUgcmFuZ2UgZW5kLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkIGdvVG8oQ2FsZW5kYXIgZGF0ZSwgYm9vbGVhbiBhbmltYXRlLCBib29sZWFuIHNldFNlbGVjdGVkLAorICAgICAgICAgICAgICAgIGJvb2xlYW4gZm9yY2VTY3JvbGwpIHsKKyAgICAgICAgICAgIGlmIChkYXRlLmJlZm9yZShtTWluRGF0ZSkgfHwgZGF0ZS5hZnRlcihtTWF4RGF0ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaW1lIG5vdCBiZXR3ZWVuICIgKyBtTWluRGF0ZS5nZXRUaW1lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhbmQgIiArIG1NYXhEYXRlLmdldFRpbWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBhbmQgbGFzdCBlbnRpcmVseSB2aXNpYmxlIHdlZWtzCisgICAgICAgICAgICBpbnQgZmlyc3RGdWxseVZpc2libGVQb3NpdGlvbiA9IG1MaXN0Vmlldy5nZXRGaXJzdFZpc2libGVQb3NpdGlvbigpOworICAgICAgICAgICAgVmlldyBmaXJzdENoaWxkID0gbUxpc3RWaWV3LmdldENoaWxkQXQoMCk7CisgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAhPSBudWxsICYmIGZpcnN0Q2hpbGQuZ2V0VG9wKCkgPCAwKSB7CisgICAgICAgICAgICAgICAgZmlyc3RGdWxseVZpc2libGVQb3NpdGlvbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGxhc3RGdWxseVZpc2libGVQb3NpdGlvbiA9IGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24gKyBtU2hvd25XZWVrQ291bnQgLSAxOworICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgIT0gbnVsbCAmJiBmaXJzdENoaWxkLmdldFRvcCgpID4gbUJvdHRvbUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGxhc3RGdWxseVZpc2libGVQb3NpdGlvbi0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNldFNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgbUFkYXB0ZXIuc2V0U2VsZWN0ZWREYXkoZGF0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBHZXQgdGhlIHdlZWsgd2UncmUgZ29pbmcgdG8KKyAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGdldFdlZWtzU2luY2VNaW5EYXRlKGRhdGUpOworCisgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2VsZWN0ZWQgZGF5IGlzIG5vdyBvdXRzaWRlIG9mIG91ciB2aXNpYmxlIHJhbmdlCisgICAgICAgICAgICAvLyBhbmQgaWYgc28gc2Nyb2xsIHRvIHRoZSBtb250aCB0aGF0IGNvbnRhaW5zIGl0CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBmaXJzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uIHx8IHBvc2l0aW9uID4gbGFzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIHx8IGZvcmNlU2Nyb2xsKSB7CisgICAgICAgICAgICAgICAgbUZpcnN0RGF5T2ZNb250aC5zZXRUaW1lSW5NaWxsaXMoZGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICAgICAgbUZpcnN0RGF5T2ZNb250aC5zZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAxKTsKKworICAgICAgICAgICAgICAgIHNldE1vbnRoRGlzcGxheWVkKG1GaXJzdERheU9mTW9udGgpOworCisgICAgICAgICAgICAgICAgLy8gdGhlIGVhcmxpZXN0IHRpbWUgd2UgY2FuIHNjcm9sbCB0byBpcyB0aGUgbWluIGRhdGUKKyAgICAgICAgICAgICAgICBpZiAobUZpcnN0RGF5T2ZNb250aC5iZWZvcmUobU1pbkRhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1GaXJzdERheU9mTW9udGgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnQgZGlzdCA9IGNoaWxkLmdldEJvdHRvbSgpIC0gbUxpc3RTY3JvbGxUb3BPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaWYgKGRpc3QgPiBtTGlzdFNjcm9sbFRvcE9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobUlzU2Nyb2xsaW5nVXApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WaWV3LnNtb290aFNjcm9sbEJ5KGRpc3QgLSBjaGlsZC5nZXRIZWlnaHQoKSwgQURKVVNUTUVOVF9TQ1JPTExfRFVSQVRJT04pOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXcuc21vb3RoU2Nyb2xsQnkoZGlzdCwgQURKVVNUTUVOVF9TQ1JPTExfRFVSQVRJT04pOworCisgICAgICAgICAgICAgICAgbVByZXZpb3VzU2Nyb2xsU3RhdGUgPSBPblNjcm9sbExpc3RlbmVyLlNDUk9MTF9TVEFURV9GTElORzsKKyAgICAgICAgICAgICAgICBpZiAoYW5pbWF0ZSkgeworICAgICAgICAgICAgICAgICAgICBtTGlzdFZpZXcuc21vb3RoU2Nyb2xsVG9Qb3NpdGlvbkZyb21Ub3AocG9zaXRpb24sIG1MaXN0U2Nyb2xsVG9wT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPVE9fU0NST0xMX0RVUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtTGlzdFZpZXcuc2V0U2VsZWN0aW9uRnJvbVRvcChwb3NpdGlvbiwgbUxpc3RTY3JvbGxUb3BPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIGFueSBhZnRlciBzY3JvbGwgb3BlcmF0aW9ucyB0aGF0IGFyZSBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgb25TY3JvbGxTdGF0ZUNoYW5nZWQobUxpc3RWaWV3LCBPblNjcm9sbExpc3RlbmVyLlNDUk9MTF9TVEFURV9JRExFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNldFNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzZWxlY3Rpb24KKyAgICAgICAgICAgICAgICBzZXRNb250aERpc3BsYXllZChkYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBQYXJzZXMgdGhlIGdpdmVuIDxjb2RlPmRhdGU8L2NvZGU+IGFuZCBpbiBjYXNlIG9mIHN1Y2Nlc3Mgc2V0cworICAgICAgICAgKiB0aGUgcmVzdWx0IHRvIHRoZSA8Y29kZT5vdXREYXRlPC9jb2RlPi4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBkYXRlIHdhcyBwYXJzZWQuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGJvb2xlYW4gcGFyc2VEYXRlKFN0cmluZyBkYXRlLCBDYWxlbmRhciBvdXREYXRlKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG91dERhdGUuc2V0VGltZShtRGF0ZUZvcm1hdC5wYXJzZShkYXRlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkRhdGU6ICIgKyBkYXRlICsgIiBub3QgaW4gZm9ybWF0OiAiICsgREFURV9GT1JNQVQpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgd2hlbiBhIDxjb2RlPnZpZXc8L2NvZGU+IHRyYW5zaXRpb25zIHRvIGEgbmV3IDxjb2RlPnNjcm9sbFN0YXRlCisgICAgICAgICAqIDwvY29kZT4uCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgb25TY3JvbGxTdGF0ZUNoYW5nZWQoQWJzTGlzdFZpZXcgdmlldywgaW50IHNjcm9sbFN0YXRlKSB7CisgICAgICAgICAgICBtU2Nyb2xsU3RhdGVDaGFuZ2VkUnVubmFibGUuZG9TY3JvbGxTdGF0ZUNoYW5nZSh2aWV3LCBzY3JvbGxTdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVXBkYXRlcyB0aGUgdGl0bGUgYW5kIHNlbGVjdGVkIG1vbnRoIGlmIHRoZSA8Y29kZT52aWV3PC9jb2RlPiBoYXMgbW92ZWQgdG8gYSBuZXcKKyAgICAgICAgICogbW9udGguCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgb25TY3JvbGwoQWJzTGlzdFZpZXcgdmlldywgaW50IGZpcnN0VmlzaWJsZUl0ZW0sIGludCB2aXNpYmxlSXRlbUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFsSXRlbUNvdW50KSB7CisgICAgICAgICAgICBXZWVrVmlldyBjaGlsZCA9IChXZWVrVmlldykgdmlldy5nZXRDaGlsZEF0KDApOworICAgICAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hlcmUgd2UgYXJlCisgICAgICAgICAgICBsb25nIGN1cnJTY3JvbGwgPQorICAgICAgICAgICAgICAgICAgICB2aWV3LmdldEZpcnN0VmlzaWJsZVBvc2l0aW9uKCkgKiBjaGlsZC5nZXRIZWlnaHQoKSAtIGNoaWxkLmdldEJvdHRvbSgpOworCisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG1vdmVkIHNpbmNlIG91ciBsYXN0IGNhbGwgdXBkYXRlIHRoZSBkaXJlY3Rpb24KKyAgICAgICAgICAgIGlmIChjdXJyU2Nyb2xsIDwgbVByZXZpb3VzU2Nyb2xsUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBtSXNTY3JvbGxpbmdVcCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJTY3JvbGwgPiBtUHJldmlvdXNTY3JvbGxQb3NpdGlvbikgeworICAgICAgICAgICAgICAgIG1Jc1Njcm9sbGluZ1VwID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVXNlIHNvbWUgaHlzdGVyZXNpcyBmb3IgY2hlY2tpbmcgd2hpY2ggbW9udGggdG8gaGlnaGxpZ2h0LiBUaGlzCisgICAgICAgICAgICAvLyBjYXVzZXMgdGhlIG1vbnRoIHRvIHRyYW5zaXRpb24gd2hlbiB0d28gZnVsbCB3ZWVrcyBvZiBhIG1vbnRoIGFyZQorICAgICAgICAgICAgLy8gdmlzaWJsZSB3aGVuIHNjcm9sbGluZyB1cCwgYW5kIHdoZW4gdGhlIGZpcnN0IGRheSBpbiBhIG1vbnRoIHJlYWNoZXMKKyAgICAgICAgICAgIC8vIHRoZSB0b3Agb2YgdGhlIHNjcmVlbiB3aGVuIHNjcm9sbGluZyBkb3duLgorICAgICAgICAgICAgaW50IG9mZnNldCA9IGNoaWxkLmdldEJvdHRvbSgpIDwgbVdlZWtNaW5WaXNpYmxlSGVpZ2h0ID8gMSA6IDA7CisgICAgICAgICAgICBpZiAobUlzU2Nyb2xsaW5nVXApIHsKKyAgICAgICAgICAgICAgICBjaGlsZCA9IChXZWVrVmlldykgdmlldy5nZXRDaGlsZEF0KFNDUk9MTF9IWVNUX1dFRUtTICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ICE9IDApIHsKKyAgICAgICAgICAgICAgICBjaGlsZCA9IChXZWVrVmlldykgdmlldy5nZXRDaGlsZEF0KG9mZnNldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZpbmQgb3V0IHdoaWNoIG1vbnRoIHdlJ3JlIG1vdmluZyBpbnRvCisgICAgICAgICAgICBpbnQgbW9udGg7CisgICAgICAgICAgICBpZiAobUlzU2Nyb2xsaW5nVXApIHsKKyAgICAgICAgICAgICAgICBtb250aCA9IGNoaWxkLmdldE1vbnRoT2ZGaXJzdFdlZWtEYXkoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbW9udGggPSBjaGlsZC5nZXRNb250aE9mTGFzdFdlZWtEYXkoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQW5kIGhvdyBpdCByZWxhdGVzIHRvIG91ciBjdXJyZW50IGhpZ2hsaWdodGVkIG1vbnRoCisgICAgICAgICAgICBpbnQgbW9udGhEaWZmOworICAgICAgICAgICAgaWYgKG1DdXJyZW50TW9udGhEaXNwbGF5ZWQgPT0gMTEgJiYgbW9udGggPT0gMCkgeworICAgICAgICAgICAgICAgIG1vbnRoRGlmZiA9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1DdXJyZW50TW9udGhEaXNwbGF5ZWQgPT0gMCAmJiBtb250aCA9PSAxMSkgeworICAgICAgICAgICAgICAgIG1vbnRoRGlmZiA9IC0xOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb250aERpZmYgPSBtb250aCAtIG1DdXJyZW50TW9udGhEaXNwbGF5ZWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9ubHkgc3dpdGNoIG1vbnRocyBpZiB3ZSdyZSBzY3JvbGxpbmcgYXdheSBmcm9tIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgIC8vIHNlbGVjdGVkIG1vbnRoCisgICAgICAgICAgICBpZiAoKCFtSXNTY3JvbGxpbmdVcCAmJiBtb250aERpZmYgPiAwKSB8fCAobUlzU2Nyb2xsaW5nVXAgJiYgbW9udGhEaWZmIDwgMCkpIHsKKyAgICAgICAgICAgICAgICBDYWxlbmRhciBmaXJzdERheSA9IGNoaWxkLmdldEZpcnN0RGF5KCk7CisgICAgICAgICAgICAgICAgaWYgKG1Jc1Njcm9sbGluZ1VwKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0RGF5LmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIC1EQVlTX1BFUl9XRUVLKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmaXJzdERheS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCBEQVlTX1BFUl9XRUVLKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0TW9udGhEaXNwbGF5ZWQoZmlyc3REYXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVByZXZpb3VzU2Nyb2xsUG9zaXRpb24gPSBjdXJyU2Nyb2xsOworICAgICAgICAgICAgbVByZXZpb3VzU2Nyb2xsU3RhdGUgPSBtQ3VycmVudFNjcm9sbFN0YXRlOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIG1vbnRoIGRpc3BsYXllZCBhdCB0aGUgdG9wIG9mIHRoaXMgdmlldyBiYXNlZCBvbiB0aW1lLiBPdmVycmlkZQorICAgICAgICAgKiB0byBhZGQgY3VzdG9tIGV2ZW50cyB3aGVuIHRoZSB0aXRsZSBpcyBjaGFuZ2VkLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gY2FsZW5kYXIgQSBkYXkgaW4gdGhlIG5ldyBmb2N1cyBtb250aC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCBzZXRNb250aERpc3BsYXllZChDYWxlbmRhciBjYWxlbmRhcikgeworICAgICAgICAgICAgbUN1cnJlbnRNb250aERpc3BsYXllZCA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5NT05USCk7CisgICAgICAgICAgICBtQWRhcHRlci5zZXRGb2N1c01vbnRoKG1DdXJyZW50TW9udGhEaXNwbGF5ZWQpOworICAgICAgICAgICAgZmluYWwgaW50IGZsYWdzID0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX0RBVEUgfCBEYXRlVXRpbHMuRk9STUFUX05PX01PTlRIX0RBWQorICAgICAgICAgICAgICAgICAgICB8IERhdGVVdGlscy5GT1JNQVRfU0hPV19ZRUFSOworICAgICAgICAgICAgZmluYWwgbG9uZyBtaWxsaXMgPSBjYWxlbmRhci5nZXRUaW1lSW5NaWxsaXMoKTsKKyAgICAgICAgICAgIFN0cmluZyBuZXdNb250aE5hbWUgPSBEYXRlVXRpbHMuZm9ybWF0RGF0ZVJhbmdlKG1Db250ZXh0LCBtaWxsaXMsIG1pbGxpcywgZmxhZ3MpOworICAgICAgICAgICAgbU1vbnRoTmFtZS5zZXRUZXh0KG5ld01vbnRoTmFtZSk7CisgICAgICAgICAgICBtTW9udGhOYW1lLmludmFsaWRhdGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIG51bWJlciBvZiB3ZWVrcyBiZXR3ZWVuIHRoZSBjdXJyZW50IDxjb2RlPmRhdGU8L2NvZGU+CisgICAgICAgICAqICAgICAgICAgYW5kIHRoZSA8Y29kZT5tTWluRGF0ZTwvY29kZT4uCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBnZXRXZWVrc1NpbmNlTWluRGF0ZShDYWxlbmRhciBkYXRlKSB7CisgICAgICAgICAgICBpZiAoZGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZnJvbURhdGU6ICIgKyBtTWluRGF0ZS5nZXRUaW1lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBkb2VzIG5vdCBwcmVjZWRlIHRvRGF0ZTogIiArIGRhdGUuZ2V0VGltZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvbmcgZW5kVGltZU1pbGxpcyA9IGRhdGUuZ2V0VGltZUluTWlsbGlzKCkKKyAgICAgICAgICAgICAgICAgICAgKyBkYXRlLmdldFRpbWVab25lKCkuZ2V0T2Zmc2V0KGRhdGUuZ2V0VGltZUluTWlsbGlzKCkpOworICAgICAgICAgICAgbG9uZyBzdGFydFRpbWVNaWxsaXMgPSBtTWluRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKQorICAgICAgICAgICAgICAgICAgICArIG1NaW5EYXRlLmdldFRpbWVab25lKCkuZ2V0T2Zmc2V0KG1NaW5EYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKKyAgICAgICAgICAgIGxvbmcgZGF5T2Zmc2V0TWlsbGlzID0gKG1NaW5EYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfV0VFSykgLSBtRmlyc3REYXlPZldlZWspCisgICAgICAgICAgICAgICAgICAgICogTUlMTElTX0lOX0RBWTsKKyAgICAgICAgICAgIHJldHVybiAoaW50KSAoKGVuZFRpbWVNaWxsaXMgLSBzdGFydFRpbWVNaWxsaXMgKyBkYXlPZmZzZXRNaWxsaXMpIC8gTUlMTElTX0lOX1dFRUspOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbW1hbmQgcmVzcG9uc2libGUgZm9yIGFjdGluZyB1cG9uIHNjcm9sbCBzdGF0ZSBjaGFuZ2VzLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBjbGFzcyBTY3JvbGxTdGF0ZVJ1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgeworICAgICAgICAgICAgcHJpdmF0ZSBBYnNMaXN0VmlldyBtVmlldzsKKworICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbU5ld1N0YXRlOworCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFNldHMgdXAgdGhlIHJ1bm5hYmxlIHdpdGggYSBzaG9ydCBkZWxheSBpbiBjYXNlIHRoZSBzY3JvbGwgc3RhdGUKKyAgICAgICAgICAgICAqIGltbWVkaWF0ZWx5IGNoYW5nZXMgYWdhaW4uCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogQHBhcmFtIHZpZXcgVGhlIGxpc3QgdmlldyB0aGF0IGNoYW5nZWQgc3RhdGUKKyAgICAgICAgICAgICAqIEBwYXJhbSBzY3JvbGxTdGF0ZSBUaGUgbmV3IHN0YXRlIGl0IGNoYW5nZWQgdG8KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIHZvaWQgZG9TY3JvbGxTdGF0ZUNoYW5nZShBYnNMaXN0VmlldyB2aWV3LCBpbnQgc2Nyb2xsU3RhdGUpIHsKKyAgICAgICAgICAgICAgICBtVmlldyA9IHZpZXc7CisgICAgICAgICAgICAgICAgbU5ld1N0YXRlID0gc2Nyb2xsU3RhdGU7CisgICAgICAgICAgICAgICAgbURlbGVnYXRvci5yZW1vdmVDYWxsYmFja3ModGhpcyk7CisgICAgICAgICAgICAgICAgbURlbGVnYXRvci5wb3N0RGVsYXllZCh0aGlzLCBTQ1JPTExfQ0hBTkdFX0RFTEFZKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIG1DdXJyZW50U2Nyb2xsU3RhdGUgPSBtTmV3U3RhdGU7CisgICAgICAgICAgICAgICAgLy8gRml4IHRoZSBwb3NpdGlvbiBhZnRlciBhIHNjcm9sbCBvciBhIGZsaW5nIGVuZHMKKyAgICAgICAgICAgICAgICBpZiAobU5ld1N0YXRlID09IE9uU2Nyb2xsTGlzdGVuZXIuU0NST0xMX1NUQVRFX0lETEUKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1QcmV2aW91c1Njcm9sbFN0YXRlICE9IE9uU2Nyb2xsTGlzdGVuZXIuU0NST0xMX1NUQVRFX0lETEUpIHsKKyAgICAgICAgICAgICAgICAgICAgVmlldyBjaGlsZCA9IG1WaWV3LmdldENoaWxkQXQoMCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdmlldyBpcyBubyBsb25nZXIgdmlzaWJsZSwganVzdCByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpbnQgZGlzdCA9IGNoaWxkLmdldEJvdHRvbSgpIC0gbUxpc3RTY3JvbGxUb3BPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0ID4gbUxpc3RTY3JvbGxUb3BPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtSXNTY3JvbGxpbmdVcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WaWV3LnNtb290aFNjcm9sbEJ5KGRpc3QgLSBjaGlsZC5nZXRIZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVE1FTlRfU0NST0xMX0RVUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXcuc21vb3RoU2Nyb2xsQnkoZGlzdCwgQURKVVNUTUVOVF9TQ1JPTExfRFVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1QcmV2aW91c1Njcm9sbFN0YXRlID0gbU5ld1N0YXRlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbVByZXZpb3VzU2Nyb2xsU3RhdGUgPSBtTmV3U3RhdGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGlzIGEgc3BlY2lhbGl6ZWQgYWRhcHRlciBmb3IgY3JlYXRpbmcgYSBsaXN0IG9mIHdlZWtzIHdpdGgKLSAgICAgKiBzZWxlY3RhYmxlIGRheXMuIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGRpc3BsYXkgdGhlIHdlZWsgbnVtYmVyLCBzdGFydAotICAgICAqIHRoZSB3ZWVrIG9uIGEgZ2l2ZW4gZGF5LCBzaG93IGEgcmVkdWNlZCBudW1iZXIgb2YgZGF5cywgb3IgZGlzcGxheSBhbgotICAgICAqIGFyYml0cmFyeSBudW1iZXIgb2Ygd2Vla3MgYXQgYSB0aW1lLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwcml2YXRlIGNsYXNzIFdlZWtzQWRhcHRlciBleHRlbmRzIEJhc2VBZGFwdGVyIGltcGxlbWVudHMgT25Ub3VjaExpc3RlbmVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBDYWxlbmRhciBtU2VsZWN0ZWREYXRlID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBHZXN0dXJlRGV0ZWN0b3IgbUdlc3R1cmVEZXRlY3RvcjsKLQotICAgICAgICBwcml2YXRlIGludCBtU2VsZWN0ZWRXZWVrOwotCi0gICAgICAgIHByaXZhdGUgaW50IG1Gb2N1c2VkTW9udGg7Ci0KLSAgICAgICAgcHJpdmF0ZSBpbnQgbVRvdGFsV2Vla0NvdW50OwotCi0gICAgICAgIHB1YmxpYyBXZWVrc0FkYXB0ZXIoKSB7Ci0gICAgICAgICAgICBtR2VzdHVyZURldGVjdG9yID0gbmV3IEdlc3R1cmVEZXRlY3RvcihtQ29udGV4dCwgbmV3IENhbGVuZGFyR2VzdHVyZUxpc3RlbmVyKCkpOwotICAgICAgICAgICAgaW5pdCgpOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFNldCB1cCB0aGUgZ2VzdHVyZSBkZXRlY3RvciBhbmQgc2VsZWN0ZWQgdGltZQorICAgICAgICAgKiA8cD4KKyAgICAgICAgICogVGhpcyBpcyBhIHNwZWNpYWxpemVkIGFkYXB0ZXIgZm9yIGNyZWF0aW5nIGEgbGlzdCBvZiB3ZWVrcyB3aXRoCisgICAgICAgICAqIHNlbGVjdGFibGUgZGF5cy4gSXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZGlzcGxheSB0aGUgd2VlayBudW1iZXIsIHN0YXJ0CisgICAgICAgICAqIHRoZSB3ZWVrIG9uIGEgZ2l2ZW4gZGF5LCBzaG93IGEgcmVkdWNlZCBudW1iZXIgb2YgZGF5cywgb3IgZGlzcGxheSBhbgorICAgICAgICAgKiBhcmJpdHJhcnkgbnVtYmVyIG9mIHdlZWtzIGF0IGEgdGltZS4KKyAgICAgICAgICogPC9wPgogICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0gICAgICAgICAgICBtU2VsZWN0ZWRXZWVrID0gZ2V0V2Vla3NTaW5jZU1pbkRhdGUobVNlbGVjdGVkRGF0ZSk7Ci0gICAgICAgICAgICBtVG90YWxXZWVrQ291bnQgPSBnZXRXZWVrc1NpbmNlTWluRGF0ZShtTWF4RGF0ZSk7Ci0gICAgICAgICAgICBpZiAobU1pbkRhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKSAhPSBtRmlyc3REYXlPZldlZWsKLSAgICAgICAgICAgICAgICB8fCBtTWF4RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspICE9IG1GaXJzdERheU9mV2VlaykgewotICAgICAgICAgICAgICAgIG1Ub3RhbFdlZWtDb3VudCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbm90aWZ5RGF0YVNldENoYW5nZWQoKTsKLSAgICAgICAgfQorICAgICAgICBwcml2YXRlIGNsYXNzIFdlZWtzQWRhcHRlciBleHRlbmRzIEJhc2VBZGFwdGVyIGltcGxlbWVudHMgT25Ub3VjaExpc3RlbmVyIHsKIAotICAgICAgICAvKioKLSAgICAgICAgICogVXBkYXRlcyB0aGUgc2VsZWN0ZWQgZGF5IGFuZCByZWxhdGVkIHBhcmFtZXRlcnMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBzZWxlY3RlZERheSBUaGUgdGltZSB0byBoaWdobGlnaHQKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkRGF5KENhbGVuZGFyIHNlbGVjdGVkRGF5KSB7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXkuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSA9PSBtU2VsZWN0ZWREYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikKLSAgICAgICAgICAgICAgICAgICAgJiYgc2VsZWN0ZWREYXkuZ2V0KENhbGVuZGFyLllFQVIpID09IG1TZWxlY3RlZERhdGUuZ2V0KENhbGVuZGFyLllFQVIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVNlbGVjdGVkRGF0ZS5zZXRUaW1lSW5NaWxsaXMoc2VsZWN0ZWREYXkuZ2V0VGltZUluTWlsbGlzKCkpOwotICAgICAgICAgICAgbVNlbGVjdGVkV2VlayA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1TZWxlY3RlZERhdGUpOwotICAgICAgICAgICAgbUZvY3VzZWRNb250aCA9IG1TZWxlY3RlZERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKTsKLSAgICAgICAgICAgIG5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZFdlZWs7CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEByZXR1cm4gVGhlIHNlbGVjdGVkIGRheSBvZiBtb250aC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBDYWxlbmRhciBnZXRTZWxlY3RlZERheSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtU2VsZWN0ZWREYXRlOwotICAgICAgICB9CisgICAgICAgICAgICBwcml2YXRlIEdlc3R1cmVEZXRlY3RvciBtR2VzdHVyZURldGVjdG9yOwogCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGdldENvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIG1Ub3RhbFdlZWtDb3VudDsKLSAgICAgICAgfQorICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbUZvY3VzZWRNb250aDsKIAotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIE9iamVjdCBnZXRJdGVtKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHByaXZhdGUgZmluYWwgQ2FsZW5kYXIgbVNlbGVjdGVkRGF0ZSA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CiAKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBsb25nIGdldEl0ZW1JZChpbnQgcG9zaXRpb24pIHsKLSAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLSAgICAgICAgfQorICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbVRvdGFsV2Vla0NvdW50OwogCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVmlldyBnZXRWaWV3KGludCBwb3NpdGlvbiwgVmlldyBjb252ZXJ0VmlldywgVmlld0dyb3VwIHBhcmVudCkgewotICAgICAgICAgICAgV2Vla1ZpZXcgd2Vla1ZpZXcgPSBudWxsOwotICAgICAgICAgICAgaWYgKGNvbnZlcnRWaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB3ZWVrVmlldyA9IChXZWVrVmlldykgY29udmVydFZpZXc7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHdlZWtWaWV3ID0gbmV3IFdlZWtWaWV3KG1Db250ZXh0KTsKLSAgICAgICAgICAgICAgICBhbmRyb2lkLndpZGdldC5BYnNMaXN0Vmlldy5MYXlvdXRQYXJhbXMgcGFyYW1zID0KLSAgICAgICAgICAgICAgICAgICAgbmV3IGFuZHJvaWQud2lkZ2V0LkFic0xpc3RWaWV3LkxheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpOwotICAgICAgICAgICAgICAgIHdlZWtWaWV3LnNldExheW91dFBhcmFtcyhwYXJhbXMpOwotICAgICAgICAgICAgICAgIHdlZWtWaWV3LnNldENsaWNrYWJsZSh0cnVlKTsKLSAgICAgICAgICAgICAgICB3ZWVrVmlldy5zZXRPblRvdWNoTGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBwdWJsaWMgV2Vla3NBZGFwdGVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgICAgICAgICBtR2VzdHVyZURldGVjdG9yID0gbmV3IEdlc3R1cmVEZXRlY3RvcihtQ29udGV4dCwgbmV3IENhbGVuZGFyR2VzdHVyZUxpc3RlbmVyKCkpOworICAgICAgICAgICAgICAgIGluaXQoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaW50IHNlbGVjdGVkV2Vla0RheSA9IChtU2VsZWN0ZWRXZWVrID09IHBvc2l0aW9uKSA/IG1TZWxlY3RlZERhdGUuZ2V0KAotICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfV0VFSykgOiAtMTsKLSAgICAgICAgICAgIHdlZWtWaWV3LmluaXQocG9zaXRpb24sIHNlbGVjdGVkV2Vla0RheSwgbUZvY3VzZWRNb250aCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB3ZWVrVmlldzsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDaGFuZ2VzIHdoaWNoIG1vbnRoIGlzIGluIGZvY3VzIGFuZCB1cGRhdGVzIHRoZSB2aWV3LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gbW9udGggVGhlIG1vbnRoIHRvIHNob3cgYXMgaW4gZm9jdXMgWzAtMTFdCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBzZXRGb2N1c01vbnRoKGludCBtb250aCkgewotICAgICAgICAgICAgaWYgKG1Gb2N1c2VkTW9udGggPT0gbW9udGgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtRm9jdXNlZE1vbnRoID0gbW9udGg7Ci0gICAgICAgICAgICBub3RpZnlEYXRhU2V0Q2hhbmdlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG9uVG91Y2goVmlldyB2LCBNb3Rpb25FdmVudCBldmVudCkgewotICAgICAgICAgICAgaWYgKG1MaXN0Vmlldy5pc0VuYWJsZWQoKSAmJiBtR2VzdHVyZURldGVjdG9yLm9uVG91Y2hFdmVudChldmVudCkpIHsKLSAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IChXZWVrVmlldykgdjsKLSAgICAgICAgICAgICAgICAvLyBpZiB3ZSBjYW5ub3QgZmluZCBhIGRheSBmb3IgdGhlIGdpdmVuIGxvY2F0aW9uIHdlIGFyZSBkb25lCi0gICAgICAgICAgICAgICAgaWYgKCF3ZWVrVmlldy5nZXREYXlGcm9tTG9jYXRpb24oZXZlbnQuZ2V0WCgpLCBtVGVtcERhdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBTZXQgdXAgdGhlIGdlc3R1cmUgZGV0ZWN0b3IgYW5kIHNlbGVjdGVkIHRpbWUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7CisgICAgICAgICAgICAgICAgbVNlbGVjdGVkV2VlayA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1TZWxlY3RlZERhdGUpOworICAgICAgICAgICAgICAgIG1Ub3RhbFdlZWtDb3VudCA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1NYXhEYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAobU1pbkRhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKSAhPSBtRmlyc3REYXlPZldlZWsKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1NYXhEYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfV0VFSykgIT0gbUZpcnN0RGF5T2ZXZWVrKSB7CisgICAgICAgICAgICAgICAgICAgIG1Ub3RhbFdlZWtDb3VudCsrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSB0b3VjaGVkIGRheSBpcyBvdXRzaWRlIHRoZSB2YWxpZCByYW5nZQotICAgICAgICAgICAgICAgIC8vIHdlIGRyYXcgd2hvbGUgd2Vla3MgYnV0IHJhbmdlIGVuZCBjYW4gZmFsbCBub3Qgb24gdGhlIHdlZWsgZW5kCi0gICAgICAgICAgICAgICAgaWYgKG1UZW1wRGF0ZS5iZWZvcmUobU1pbkRhdGUpIHx8IG1UZW1wRGF0ZS5hZnRlcihtTWF4RGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9uRGF0ZVRhcHBlZChtVGVtcERhdGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIE1haW50YWlucyB0aGUgc2FtZSBob3VyL21pbi9zZWMgYnV0IG1vdmVzIHRoZSBkYXkgdG8gdGhlIHRhcHBlZCBkYXkuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBkYXkgVGhlIGRheSB0aGF0IHdhcyB0YXBwZWQKLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgdm9pZCBvbkRhdGVUYXBwZWQoQ2FsZW5kYXIgZGF5KSB7Ci0gICAgICAgICAgICBzZXRTZWxlY3RlZERheShkYXkpOwotICAgICAgICAgICAgc2V0TW9udGhEaXNwbGF5ZWQoZGF5KTsKLSAgICAgICAgfQorICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3RlZCBkYXkgYW5kIHJlbGF0ZWQgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBAcGFyYW0gc2VsZWN0ZWREYXkgVGhlIHRpbWUgdG8gaGlnaGxpZ2h0CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkRGF5KENhbGVuZGFyIHNlbGVjdGVkRGF5KSB7CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRGF5LmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikgPT0gbVNlbGVjdGVkRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWxlY3RlZERheS5nZXQoQ2FsZW5kYXIuWUVBUikgPT0gbVNlbGVjdGVkRGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtU2VsZWN0ZWREYXRlLnNldFRpbWVJbk1pbGxpcyhzZWxlY3RlZERheS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICAgICAgbVNlbGVjdGVkV2VlayA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1TZWxlY3RlZERhdGUpOworICAgICAgICAgICAgICAgIG1Gb2N1c2VkTW9udGggPSBtU2VsZWN0ZWREYXRlLmdldChDYWxlbmRhci5NT05USCk7CisgICAgICAgICAgICAgICAgbm90aWZ5RGF0YVNldENoYW5nZWQoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAvKioKLSAgICAgICAgICogVGhpcyBpcyBoZXJlIHNvIHdlIGNhbiBpZGVudGlmeSBzaW5nbGUgdGFwIGV2ZW50cyBhbmQgc2V0IHRoZQotICAgICAgICAgKiBzZWxlY3RlZCBkYXkgY29ycmVjdGx5Ci0gICAgICAgICAqLwotICAgICAgICBjbGFzcyBDYWxlbmRhckdlc3R1cmVMaXN0ZW5lciBleHRlbmRzIEdlc3R1cmVEZXRlY3Rvci5TaW1wbGVPbkdlc3R1cmVMaXN0ZW5lciB7CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEByZXR1cm4gVGhlIHNlbGVjdGVkIGRheSBvZiBtb250aC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIENhbGVuZGFyIGdldFNlbGVjdGVkRGF5KCkgeworICAgICAgICAgICAgICAgIHJldHVybiBtU2VsZWN0ZWREYXRlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uU2luZ2xlVGFwVXAoTW90aW9uRXZlbnQgZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhpcyBpcyBhIGR5bmFtaWMgdmlldyBmb3IgZHJhd2luZyBhIHNpbmdsZSB3ZWVrLiBJdCBjYW4gYmUgY29uZmlndXJlZCB0bwotICAgICAqIGRpc3BsYXkgdGhlIHdlZWsgbnVtYmVyLCBzdGFydCB0aGUgd2VlayBvbiBhIGdpdmVuIGRheSwgb3Igc2hvdyBhIHJlZHVjZWQKLSAgICAgKiBudW1iZXIgb2YgZGF5cy4gSXQgaXMgaW50ZW5kZWQgZm9yIHVzZSBhcyBhIHNpbmdsZSB2aWV3IHdpdGhpbiBhCi0gICAgICogTGlzdFZpZXcuIFNlZSB7QGxpbmsgV2Vla3NBZGFwdGVyfSBmb3IgdXNhZ2UuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHByaXZhdGUgY2xhc3MgV2Vla1ZpZXcgZXh0ZW5kcyBWaWV3IHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRlbXBSZWN0ID0gbmV3IFJlY3QoKTsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFBhaW50IG1EcmF3UGFpbnQgPSBuZXcgUGFpbnQoKTsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFBhaW50IG1Nb250aE51bURyYXdQYWludCA9IG5ldyBQYWludCgpOwotCi0gICAgICAgIC8vIENhY2hlIHRoZSBudW1iZXIgc3RyaW5ncyBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlY29tcHV0ZSB0aGVtIGVhY2ggdGltZQotICAgICAgICBwcml2YXRlIFN0cmluZ1tdIG1EYXlOdW1iZXJzOwotCi0gICAgICAgIC8vIFF1aWNrIGxvb2t1cCBmb3IgY2hlY2tpbmcgd2hpY2ggZGF5cyBhcmUgaW4gdGhlIGZvY3VzIG1vbnRoCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbltdIG1Gb2N1c0RheTsKLQotICAgICAgICAvLyBXaGV0aGVyIHRoaXMgdmlldyBoYXMgYSBmb2N1c2VkIGRheS4KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNGb2N1c2VkRGF5OwotCi0gICAgICAgIC8vIFdoZXRoZXIgdGhpcyB2aWV3IGhhcyBvbmx5IGZvY3VzZWQgZGF5cy4KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNVbmZvY3VzZWREYXk7Ci0KLSAgICAgICAgLy8gVGhlIGZpcnN0IGRheSBkaXNwbGF5ZWQgYnkgdGhpcyBpdGVtCi0gICAgICAgIHByaXZhdGUgQ2FsZW5kYXIgbUZpcnN0RGF5OwotCi0gICAgICAgIC8vIFRoZSBtb250aCBvZiB0aGUgZmlyc3QgZGF5IGluIHRoaXMgd2VlawotICAgICAgICBwcml2YXRlIGludCBtTW9udGhPZkZpcnN0V2Vla0RheSA9IC0xOwotCi0gICAgICAgIC8vIFRoZSBtb250aCBvZiB0aGUgbGFzdCBkYXkgaW4gdGhpcyB3ZWVrCi0gICAgICAgIHByaXZhdGUgaW50IG1MYXN0V2Vla0RheU1vbnRoID0gLTE7Ci0KLSAgICAgICAgLy8gVGhlIHBvc2l0aW9uIG9mIHRoaXMgd2VlaywgZXF1aXZhbGVudCB0byB3ZWVrcyBzaW5jZSB0aGUgd2VlayBvZiBKYW4KLSAgICAgICAgLy8gMXN0LCAxOTAwCi0gICAgICAgIHByaXZhdGUgaW50IG1XZWVrID0gLTE7Ci0KLSAgICAgICAgLy8gUXVpY2sgcmVmZXJlbmNlIHRvIHRoZSB3aWR0aCBvZiB0aGlzIHZpZXcsIG1hdGNoZXMgcGFyZW50Ci0gICAgICAgIHByaXZhdGUgaW50IG1XaWR0aDsKLQotICAgICAgICAvLyBUaGUgaGVpZ2h0IHRoaXMgdmlldyBzaG91bGQgZHJhdyBhdCBpbiBwaXhlbHMsIHNldCBieSBoZWlnaHQgcGFyYW0KLSAgICAgICAgcHJpdmF0ZSBpbnQgbUhlaWdodDsKLQotICAgICAgICAvLyBJZiB0aGlzIHZpZXcgY29udGFpbnMgdGhlIHNlbGVjdGVkIGRheQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUhhc1NlbGVjdGVkRGF5ID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gV2hpY2ggZGF5IGlzIHNlbGVjdGVkIFswLTZdIG9yIC0xIGlmIG5vIGRheSBpcyBzZWxlY3RlZAotICAgICAgICBwcml2YXRlIGludCBtU2VsZWN0ZWREYXkgPSAtMTsKLQotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGRheXMgKyBhIHNwb3QgZm9yIHdlZWsgbnVtYmVyIGlmIGl0IGlzIGRpc3BsYXllZAotICAgICAgICBwcml2YXRlIGludCBtTnVtQ2VsbHM7Ci0KLSAgICAgICAgLy8gVGhlIGxlZnQgZWRnZSBvZiB0aGUgc2VsZWN0ZWQgZGF5Ci0gICAgICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZExlZnQgPSAtMTsKLQotICAgICAgICAvLyBUaGUgcmlnaHQgZWRnZSBvZiB0aGUgc2VsZWN0ZWQgZGF5Ci0gICAgICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZFJpZ2h0ID0gLTE7Ci0KLSAgICAgICAgcHVibGljIFdlZWtWaWV3KENvbnRleHQgY29udGV4dCkgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0KLSAgICAgICAgICAgIC8vIFNldHMgdXAgYW55IHN0YW5kYXJkIHBhaW50cyB0aGF0IHdpbGwgYmUgdXNlZAotICAgICAgICAgICAgaW5pdGlsYWl6ZVBhaW50cygpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEluaXRpYWxpemVzIHRoaXMgd2VlayB2aWV3LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gd2Vla051bWJlciBUaGUgbnVtYmVyIG9mIHRoZSB3ZWVrIHRoaXMgdmlldyByZXByZXNlbnRzLiBUaGUKLSAgICAgICAgICogICAgICAgICAgICB3ZWVrIG51bWJlciBpcyBhIHplcm8gYmFzZWQgaW5kZXggb2YgdGhlIHdlZWtzIHNpbmNlCi0gICAgICAgICAqICAgICAgICAgICAge0BsaW5rIENhbGVuZGFyVmlldyNnZXRNaW5EYXRlKCl9LgotICAgICAgICAgKiBAcGFyYW0gc2VsZWN0ZWRXZWVrRGF5IFRoZSBzZWxlY3RlZCBkYXkgb2YgdGhlIHdlZWsgZnJvbSAwIHRvIDYsIC0xIGlmIG5vCi0gICAgICAgICAqICAgICAgICAgICAgc2VsZWN0ZWQgZGF5LgotICAgICAgICAgKiBAcGFyYW0gZm9jdXNlZE1vbnRoIFRoZSBtb250aCB0aGF0IGlzIGN1cnJlbnRseSBpbiBmb2N1cyBpLmUuCi0gICAgICAgICAqICAgICAgICAgICAgaGlnaGxpZ2h0ZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBpbml0KGludCB3ZWVrTnVtYmVyLCBpbnQgc2VsZWN0ZWRXZWVrRGF5LCBpbnQgZm9jdXNlZE1vbnRoKSB7Ci0gICAgICAgICAgICBtU2VsZWN0ZWREYXkgPSBzZWxlY3RlZFdlZWtEYXk7Ci0gICAgICAgICAgICBtSGFzU2VsZWN0ZWREYXkgPSBtU2VsZWN0ZWREYXkgIT0gLTE7Ci0gICAgICAgICAgICBtTnVtQ2VsbHMgPSBtU2hvd1dlZWtOdW1iZXIgPyBtRGF5c1BlcldlZWsgKyAxIDogbURheXNQZXJXZWVrOwotICAgICAgICAgICAgbVdlZWsgPSB3ZWVrTnVtYmVyOwotICAgICAgICAgICAgbVRlbXBEYXRlLnNldFRpbWVJbk1pbGxpcyhtTWluRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7Ci0KLSAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuV0VFS19PRl9ZRUFSLCBtV2Vlayk7Ci0gICAgICAgICAgICBtVGVtcERhdGUuc2V0Rmlyc3REYXlPZldlZWsobUZpcnN0RGF5T2ZXZWVrKTsKLQotICAgICAgICAgICAgLy8gQWxsb2NhdGUgc3BhY2UgZm9yIGNhY2hpbmcgdGhlIGRheSBudW1iZXJzIGFuZCBmb2N1cyB2YWx1ZXMKLSAgICAgICAgICAgIG1EYXlOdW1iZXJzID0gbmV3IFN0cmluZ1ttTnVtQ2VsbHNdOwotICAgICAgICAgICAgbUZvY3VzRGF5ID0gbmV3IGJvb2xlYW5bbU51bUNlbGxzXTsKLQotICAgICAgICAgICAgLy8gSWYgd2UncmUgc2hvd2luZyB0aGUgd2VlayBudW1iZXIgY2FsY3VsYXRlIGl0IGJhc2VkIG9uIE1vbmRheQotICAgICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgaWYgKG1TaG93V2Vla051bWJlcikgewotICAgICAgICAgICAgICAgIG1EYXlOdW1iZXJzWzBdID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuZ2V0RGVmYXVsdCgpLCAiJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLmdldChDYWxlbmRhci5XRUVLX09GX1lFQVIpKTsKLSAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICBwdWJsaWMgaW50IGdldENvdW50KCkgeworICAgICAgICAgICAgICAgIHJldHVybiBtVG90YWxXZWVrQ291bnQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIE5vdyBhZGp1c3Qgb3VyIHN0YXJ0aW5nIGRheSBiYXNlZCBvbiB0aGUgc3RhcnQgZGF5IG9mIHRoZSB3ZWVrCi0gICAgICAgICAgICBpbnQgZGlmZiA9IG1GaXJzdERheU9mV2VlayAtIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOwotICAgICAgICAgICAgbVRlbXBEYXRlLmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIGRpZmYpOworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IGdldEl0ZW0oaW50IHBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1GaXJzdERheSA9IChDYWxlbmRhcikgbVRlbXBEYXRlLmNsb25lKCk7Ci0gICAgICAgICAgICBtTW9udGhPZkZpcnN0V2Vla0RheSA9IG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpOworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRJdGVtSWQoaW50IHBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtSGFzVW5mb2N1c2VkRGF5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAoOyBpIDwgbU51bUNlbGxzOyBpKyspIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzRm9jdXNlZERheSA9IChtVGVtcERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSA9PSBmb2N1c2VkTW9udGgpOwotICAgICAgICAgICAgICAgIG1Gb2N1c0RheVtpXSA9IGlzRm9jdXNlZERheTsKLSAgICAgICAgICAgICAgICBtSGFzRm9jdXNlZERheSB8PSBpc0ZvY3VzZWREYXk7Ci0gICAgICAgICAgICAgICAgbUhhc1VuZm9jdXNlZERheSAmPSAhaXNGb2N1c2VkRGF5OwotICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBkcmF3IGRhdGVzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIHRvIGF2b2lkIHVzZXIgY29uZnVzaW9uCi0gICAgICAgICAgICAgICAgaWYgKG1UZW1wRGF0ZS5iZWZvcmUobU1pbkRhdGUpIHx8IG1UZW1wRGF0ZS5hZnRlcihtTWF4RGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbURheU51bWJlcnNbaV0gPSAiIjsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFZpZXcgZ2V0VmlldyhpbnQgcG9zaXRpb24sIFZpZXcgY29udmVydFZpZXcsIFZpZXdHcm91cCBwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgd2Vla1ZpZXcgPSAoV2Vla1ZpZXcpIGNvbnZlcnRWaWV3OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1EYXlOdW1iZXJzW2ldID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuZ2V0RGVmYXVsdCgpLCAiJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisgICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3ID0gbmV3IFdlZWtWaWV3KG1Db250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZC53aWRnZXQuQWJzTGlzdFZpZXcuTGF5b3V0UGFyYW1zIHBhcmFtcyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGFuZHJvaWQud2lkZ2V0LkFic0xpc3RWaWV3LkxheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCk7CisgICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LnNldExheW91dFBhcmFtcyhwYXJhbXMpOworICAgICAgICAgICAgICAgICAgICB3ZWVrVmlldy5zZXRDbGlja2FibGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LnNldE9uVG91Y2hMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbVRlbXBEYXRlLmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gV2UgZG8gb25lIGV4dHJhIGFkZCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wLCBpZiB0aGF0IHB1c2hlZCB1cyB0bwotICAgICAgICAgICAgLy8gbmV3IG1vbnRoIHVuZG8gaXQKLSAgICAgICAgICAgIGlmIChtVGVtcERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkgPT0gMSkgewotICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtTGFzdFdlZWtEYXlNb250aCA9IG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpOwogCi0gICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25Qb3NpdGlvbnMoKTsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIGludCBzZWxlY3RlZFdlZWtEYXkgPSAobVNlbGVjdGVkV2VlayA9PSBwb3NpdGlvbikgPyBtU2VsZWN0ZWREYXRlLmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyLkRBWV9PRl9XRUVLKSA6IC0xOworICAgICAgICAgICAgICAgIHdlZWtWaWV3LmluaXQocG9zaXRpb24sIHNlbGVjdGVkV2Vla0RheSwgbUZvY3VzZWRNb250aCk7CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEluaXRpYWxpemUgdGhlIHBhaW50IGluc3RhbmNlcy4KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgdm9pZCBpbml0aWxhaXplUGFpbnRzKCkgewotICAgICAgICAgICAgbURyYXdQYWludC5zZXRGYWtlQm9sZFRleHQoZmFsc2UpOwotICAgICAgICAgICAgbURyYXdQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgICAgICAgICBtRHJhd1BhaW50LnNldFN0eWxlKFN0eWxlLkZJTEwpOwotCi0gICAgICAgICAgICBtTW9udGhOdW1EcmF3UGFpbnQuc2V0RmFrZUJvbGRUZXh0KHRydWUpOwotICAgICAgICAgICAgbU1vbnRoTnVtRHJhd1BhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKLSAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRTdHlsZShTdHlsZS5GSUxMKTsKLSAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRUZXh0QWxpZ24oQWxpZ24uQ0VOVEVSKTsKLSAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRUZXh0U2l6ZShtRGF0ZVRleHRTaXplKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRoZSBtb250aCBvZiB0aGUgZmlyc3QgZGF5IGluIHRoaXMgd2Vlay4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBUaGUgbW9udGggdGhlIGZpcnN0IGRheSBvZiB0aGlzIHZpZXcgaXMgaW4uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldE1vbnRoT2ZGaXJzdFdlZWtEYXkoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU1vbnRoT2ZGaXJzdFdlZWtEYXk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgbW9udGggb2YgdGhlIGxhc3QgZGF5IGluIHRoaXMgd2VlawotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIFRoZSBtb250aCB0aGUgbGFzdCBkYXkgb2YgdGhpcyB2aWV3IGlzIGluCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldE1vbnRoT2ZMYXN0V2Vla0RheSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtTGFzdFdlZWtEYXlNb250aDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBkYXkgaW4gdGhpcyB2aWV3LgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIFRoZSBmaXJzdCBkYXkgaW4gdGhlIHZpZXcuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQ2FsZW5kYXIgZ2V0Rmlyc3REYXkoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUZpcnN0RGF5OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGN1bGF0ZXMgdGhlIGRheSB0aGF0IHRoZSBnaXZlbiB4IHBvc2l0aW9uIGlzIGluLCBhY2NvdW50aW5nIGZvcgotICAgICAgICAgKiB3ZWVrIG51bWJlci4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHggVGhlIHggcG9zaXRpb24gb2YgdGhlIHRvdWNoIGV2ZW50LgotICAgICAgICAgKiBAcmV0dXJuIFRydWUgaWYgYSBkYXkgd2FzIGZvdW5kIGZvciB0aGUgZ2l2ZW4gbG9jYXRpb24uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBnZXREYXlGcm9tTG9jYXRpb24oZmxvYXQgeCwgQ2FsZW5kYXIgb3V0Q2FsZW5kYXIpIHsKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMYXlvdXRSdGwgPSBpc0xheW91dFJ0bCgpOwotCi0gICAgICAgICAgICBpbnQgc3RhcnQ7Ci0gICAgICAgICAgICBpbnQgZW5kOwotCi0gICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKLSAgICAgICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgICAgICAgICAgZW5kID0gbVNob3dXZWVrTnVtYmVyID8gbVdpZHRoIC0gbVdpZHRoIC8gbU51bUNlbGxzIDogbVdpZHRoOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdGFydCA9IG1TaG93V2Vla051bWJlciA/IG1XaWR0aCAvIG1OdW1DZWxscyA6IDA7Ci0gICAgICAgICAgICAgICAgZW5kID0gbVdpZHRoOworICAgICAgICAgICAgICAgIHJldHVybiB3ZWVrVmlldzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHggPCBzdGFydCB8fCB4ID4gZW5kKSB7Ci0gICAgICAgICAgICAgICAgb3V0Q2FsZW5kYXIuY2xlYXIoKTsKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ2hhbmdlcyB3aGljaCBtb250aCBpcyBpbiBmb2N1cyBhbmQgdXBkYXRlcyB0aGUgdmlldy4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBAcGFyYW0gbW9udGggVGhlIG1vbnRoIHRvIHNob3cgYXMgaW4gZm9jdXMgWzAtMTFdCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldEZvY3VzTW9udGgoaW50IG1vbnRoKSB7CisgICAgICAgICAgICAgICAgaWYgKG1Gb2N1c2VkTW9udGggPT0gbW9udGgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtRm9jdXNlZE1vbnRoID0gbW9udGg7CisgICAgICAgICAgICAgICAgbm90aWZ5RGF0YVNldENoYW5nZWQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvblRvdWNoKFZpZXcgdiwgTW90aW9uRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAobUxpc3RWaWV3LmlzRW5hYmxlZCgpICYmIG1HZXN0dXJlRGV0ZWN0b3Iub25Ub3VjaEV2ZW50KGV2ZW50KSkgeworICAgICAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IChXZWVrVmlldykgdjsKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgY2Fubm90IGZpbmQgYSBkYXkgZm9yIHRoZSBnaXZlbiBsb2NhdGlvbiB3ZSBhcmUgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiAoIXdlZWtWaWV3LmdldERheUZyb21Mb2NhdGlvbihldmVudC5nZXRYKCksIG1UZW1wRGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHRvdWNoZWQgZGF5IGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRyYXcgd2hvbGUgd2Vla3MgYnV0IHJhbmdlIGVuZCBjYW4gZmFsbCBub3Qgb24gdGhlIHdlZWsgZW5kCisgICAgICAgICAgICAgICAgICAgIGlmIChtVGVtcERhdGUuYmVmb3JlKG1NaW5EYXRlKSB8fCBtVGVtcERhdGUuYWZ0ZXIobU1heERhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvbkRhdGVUYXBwZWQobVRlbXBEYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gU2VsZWN0aW9uIGlzICh4IC0gc3RhcnQpIC8gKHBpeGVscy9kYXkpIHdoaWNoIGlzICh4IC0gc3RhcnQpICogZGF5IC8gcGl4ZWxzCi0gICAgICAgICAgICBpbnQgZGF5UG9zaXRpb24gPSAoaW50KSAoKHggLSBzdGFydCkgKiBtRGF5c1BlcldlZWsgLyAoZW5kIC0gc3RhcnQpKTsKLQotICAgICAgICAgICAgaWYgKGlzTGF5b3V0UnRsKSB7Ci0gICAgICAgICAgICAgICAgZGF5UG9zaXRpb24gPSBtRGF5c1BlcldlZWsgLSAxIC0gZGF5UG9zaXRpb247CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIE1haW50YWlucyB0aGUgc2FtZSBob3VyL21pbi9zZWMgYnV0IG1vdmVzIHRoZSBkYXkgdG8gdGhlIHRhcHBlZCBkYXkuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogQHBhcmFtIGRheSBUaGUgZGF5IHRoYXQgd2FzIHRhcHBlZAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwcml2YXRlIHZvaWQgb25EYXRlVGFwcGVkKENhbGVuZGFyIGRheSkgeworICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRGF5KGRheSk7CisgICAgICAgICAgICAgICAgc2V0TW9udGhEaXNwbGF5ZWQoZGF5KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgb3V0Q2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKG1GaXJzdERheS5nZXRUaW1lSW5NaWxsaXMoKSk7Ci0gICAgICAgICAgICBvdXRDYWxlbmRhci5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCBkYXlQb3NpdGlvbik7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIG9uRHJhdyhDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgICAgICBkcmF3QmFja2dyb3VuZChjYW52YXMpOwotICAgICAgICAgICAgZHJhd1dlZWtOdW1iZXJzQW5kRGF0ZXMoY2FudmFzKTsKLSAgICAgICAgICAgIGRyYXdXZWVrU2VwYXJhdG9ycyhjYW52YXMpOwotICAgICAgICAgICAgZHJhd1NlbGVjdGVkRGF0ZVZlcnRpY2FsQmFycyhjYW52YXMpOworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBUaGlzIGlzIGhlcmUgc28gd2UgY2FuIGlkZW50aWZ5IHNpbmdsZSB0YXAgZXZlbnRzIGFuZCBzZXQgdGhlCisgICAgICAgICAgICAgKiBzZWxlY3RlZCBkYXkgY29ycmVjdGx5CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNsYXNzIENhbGVuZGFyR2VzdHVyZUxpc3RlbmVyIGV4dGVuZHMgR2VzdHVyZURldGVjdG9yLlNpbXBsZU9uR2VzdHVyZUxpc3RlbmVyIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvblNpbmdsZVRhcFVwKE1vdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFRoaXMgZHJhd3MgdGhlIHNlbGVjdGlvbiBoaWdobGlnaHQgaWYgYSBkYXkgaXMgc2VsZWN0ZWQgaW4gdGhpcyB3ZWVrLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gY2FudmFzIFRoZSBjYW52YXMgdG8gZHJhdyBvbgorICAgICAgICAgKiA8cD4KKyAgICAgICAgICogVGhpcyBpcyBhIGR5bmFtaWMgdmlldyBmb3IgZHJhd2luZyBhIHNpbmdsZSB3ZWVrLiBJdCBjYW4gYmUgY29uZmlndXJlZCB0bworICAgICAgICAgKiBkaXNwbGF5IHRoZSB3ZWVrIG51bWJlciwgc3RhcnQgdGhlIHdlZWsgb24gYSBnaXZlbiBkYXksIG9yIHNob3cgYSByZWR1Y2VkCisgICAgICAgICAqIG51bWJlciBvZiBkYXlzLiBJdCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgc2luZ2xlIHZpZXcgd2l0aGluIGEKKyAgICAgICAgICogTGlzdFZpZXcuIFNlZSB7QGxpbmsgV2Vla3NBZGFwdGVyfSBmb3IgdXNhZ2UuCisgICAgICAgICAqIDwvcD4KICAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgdm9pZCBkcmF3QmFja2dyb3VuZChDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgICAgICBpZiAoIW1IYXNTZWxlY3RlZERheSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJpdmF0ZSBjbGFzcyBXZWVrVmlldyBleHRlbmRzIFZpZXcgeworCisgICAgICAgICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRlbXBSZWN0ID0gbmV3IFJlY3QoKTsKKworICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtRHJhd1BhaW50ID0gbmV3IFBhaW50KCk7CisKKyAgICAgICAgICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbU1vbnRoTnVtRHJhd1BhaW50ID0gbmV3IFBhaW50KCk7CisKKyAgICAgICAgICAgIC8vIENhY2hlIHRoZSBudW1iZXIgc3RyaW5ncyBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlY29tcHV0ZSB0aGVtIGVhY2ggdGltZQorICAgICAgICAgICAgcHJpdmF0ZSBTdHJpbmdbXSBtRGF5TnVtYmVyczsKKworICAgICAgICAgICAgLy8gUXVpY2sgbG9va3VwIGZvciBjaGVja2luZyB3aGljaCBkYXlzIGFyZSBpbiB0aGUgZm9jdXMgbW9udGgKKyAgICAgICAgICAgIHByaXZhdGUgYm9vbGVhbltdIG1Gb2N1c0RheTsKKworICAgICAgICAgICAgLy8gV2hldGhlciB0aGlzIHZpZXcgaGFzIGEgZm9jdXNlZCBkYXkuCisgICAgICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUhhc0ZvY3VzZWREYXk7CisKKyAgICAgICAgICAgIC8vIFdoZXRoZXIgdGhpcyB2aWV3IGhhcyBvbmx5IGZvY3VzZWQgZGF5cy4KKyAgICAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzVW5mb2N1c2VkRGF5OworCisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgZGF5IGRpc3BsYXllZCBieSB0aGlzIGl0ZW0KKyAgICAgICAgICAgIHByaXZhdGUgQ2FsZW5kYXIgbUZpcnN0RGF5OworCisgICAgICAgICAgICAvLyBUaGUgbW9udGggb2YgdGhlIGZpcnN0IGRheSBpbiB0aGlzIHdlZWsKKyAgICAgICAgICAgIHByaXZhdGUgaW50IG1Nb250aE9mRmlyc3RXZWVrRGF5ID0gLTE7CisKKyAgICAgICAgICAgIC8vIFRoZSBtb250aCBvZiB0aGUgbGFzdCBkYXkgaW4gdGhpcyB3ZWVrCisgICAgICAgICAgICBwcml2YXRlIGludCBtTGFzdFdlZWtEYXlNb250aCA9IC0xOworCisgICAgICAgICAgICAvLyBUaGUgcG9zaXRpb24gb2YgdGhpcyB3ZWVrLCBlcXVpdmFsZW50IHRvIHdlZWtzIHNpbmNlIHRoZSB3ZWVrIG9mIEphbgorICAgICAgICAgICAgLy8gMXN0LCAxOTAwCisgICAgICAgICAgICBwcml2YXRlIGludCBtV2VlayA9IC0xOworCisgICAgICAgICAgICAvLyBRdWljayByZWZlcmVuY2UgdG8gdGhlIHdpZHRoIG9mIHRoaXMgdmlldywgbWF0Y2hlcyBwYXJlbnQKKyAgICAgICAgICAgIHByaXZhdGUgaW50IG1XaWR0aDsKKworICAgICAgICAgICAgLy8gVGhlIGhlaWdodCB0aGlzIHZpZXcgc2hvdWxkIGRyYXcgYXQgaW4gcGl4ZWxzLCBzZXQgYnkgaGVpZ2h0IHBhcmFtCisgICAgICAgICAgICBwcml2YXRlIGludCBtSGVpZ2h0OworCisgICAgICAgICAgICAvLyBJZiB0aGlzIHZpZXcgY29udGFpbnMgdGhlIHNlbGVjdGVkIGRheQorICAgICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNTZWxlY3RlZERheSA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBXaGljaCBkYXkgaXMgc2VsZWN0ZWQgWzAtNl0gb3IgLTEgaWYgbm8gZGF5IGlzIHNlbGVjdGVkCisgICAgICAgICAgICBwcml2YXRlIGludCBtU2VsZWN0ZWREYXkgPSAtMTsKKworICAgICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBkYXlzICsgYSBzcG90IGZvciB3ZWVrIG51bWJlciBpZiBpdCBpcyBkaXNwbGF5ZWQKKyAgICAgICAgICAgIHByaXZhdGUgaW50IG1OdW1DZWxsczsKKworICAgICAgICAgICAgLy8gVGhlIGxlZnQgZWRnZSBvZiB0aGUgc2VsZWN0ZWQgZGF5CisgICAgICAgICAgICBwcml2YXRlIGludCBtU2VsZWN0ZWRMZWZ0ID0gLTE7CisKKyAgICAgICAgICAgIC8vIFRoZSByaWdodCBlZGdlIG9mIHRoZSBzZWxlY3RlZCBkYXkKKyAgICAgICAgICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZFJpZ2h0ID0gLTE7CisKKyAgICAgICAgICAgIHB1YmxpYyBXZWVrVmlldyhDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBzdXBlcihjb250ZXh0KTsKKworICAgICAgICAgICAgICAgIC8vIFNldHMgdXAgYW55IHN0YW5kYXJkIHBhaW50cyB0aGF0IHdpbGwgYmUgdXNlZAorICAgICAgICAgICAgICAgIGluaXRpbGFpemVQYWludHMoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0Q29sb3IobVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcik7CiAKLSAgICAgICAgICAgIG1UZW1wUmVjdC50b3AgPSBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aDsKLSAgICAgICAgICAgIG1UZW1wUmVjdC5ib3R0b20gPSBtSGVpZ2h0OworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBJbml0aWFsaXplcyB0aGlzIHdlZWsgdmlldy4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBAcGFyYW0gd2Vla051bWJlciBUaGUgbnVtYmVyIG9mIHRoZSB3ZWVrIHRoaXMgdmlldyByZXByZXNlbnRzLiBUaGUKKyAgICAgICAgICAgICAqICAgICAgICAgICAgd2VlayBudW1iZXIgaXMgYSB6ZXJvIGJhc2VkIGluZGV4IG9mIHRoZSB3ZWVrcyBzaW5jZQorICAgICAgICAgICAgICogICAgICAgICAgICB7QGxpbmsgQ2FsZW5kYXJWaWV3I2dldE1pbkRhdGUoKX0uCisgICAgICAgICAgICAgKiBAcGFyYW0gc2VsZWN0ZWRXZWVrRGF5IFRoZSBzZWxlY3RlZCBkYXkgb2YgdGhlIHdlZWsgZnJvbSAwIHRvIDYsIC0xIGlmIG5vCisgICAgICAgICAgICAgKiAgICAgICAgICAgIHNlbGVjdGVkIGRheS4KKyAgICAgICAgICAgICAqIEBwYXJhbSBmb2N1c2VkTW9udGggVGhlIG1vbnRoIHRoYXQgaXMgY3VycmVudGx5IGluIGZvY3VzIGkuZS4KKyAgICAgICAgICAgICAqICAgICAgICAgICAgaGlnaGxpZ2h0ZWQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGluaXQoaW50IHdlZWtOdW1iZXIsIGludCBzZWxlY3RlZFdlZWtEYXksIGludCBmb2N1c2VkTW9udGgpIHsKKyAgICAgICAgICAgICAgICBtU2VsZWN0ZWREYXkgPSBzZWxlY3RlZFdlZWtEYXk7CisgICAgICAgICAgICAgICAgbUhhc1NlbGVjdGVkRGF5ID0gbVNlbGVjdGVkRGF5ICE9IC0xOworICAgICAgICAgICAgICAgIG1OdW1DZWxscyA9IG1TaG93V2Vla051bWJlciA/IG1EYXlzUGVyV2VlayArIDEgOiBtRGF5c1BlcldlZWs7CisgICAgICAgICAgICAgICAgbVdlZWsgPSB3ZWVrTnVtYmVyOworICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMobU1pbkRhdGUuZ2V0VGltZUluTWlsbGlzKCkpOwogCi0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzTGF5b3V0UnRsID0gaXNMYXlvdXRSdGwoKTsKKyAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLldFRUtfT0ZfWUVBUiwgbVdlZWspOworICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXRGaXJzdERheU9mV2VlayhtRmlyc3REYXlPZldlZWspOwogCi0gICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKLSAgICAgICAgICAgICAgICBtVGVtcFJlY3QubGVmdCA9IDA7Ci0gICAgICAgICAgICAgICAgbVRlbXBSZWN0LnJpZ2h0ID0gbVNlbGVjdGVkTGVmdCAtIDI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1UZW1wUmVjdC5sZWZ0ID0gbVNob3dXZWVrTnVtYmVyID8gbVdpZHRoIC8gbU51bUNlbGxzIDogMDsKLSAgICAgICAgICAgICAgICBtVGVtcFJlY3QucmlnaHQgPSBtU2VsZWN0ZWRMZWZ0IC0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhbnZhcy5kcmF3UmVjdChtVGVtcFJlY3QsIG1EcmF3UGFpbnQpOworICAgICAgICAgICAgICAgIC8vIEFsbG9jYXRlIHNwYWNlIGZvciBjYWNoaW5nIHRoZSBkYXkgbnVtYmVycyBhbmQgZm9jdXMgdmFsdWVzCisgICAgICAgICAgICAgICAgbURheU51bWJlcnMgPSBuZXcgU3RyaW5nW21OdW1DZWxsc107CisgICAgICAgICAgICAgICAgbUZvY3VzRGF5ID0gbmV3IGJvb2xlYW5bbU51bUNlbGxzXTsKIAotICAgICAgICAgICAgaWYgKGlzTGF5b3V0UnRsKSB7Ci0gICAgICAgICAgICAgICAgbVRlbXBSZWN0LmxlZnQgPSBtU2VsZWN0ZWRSaWdodCArIDM7Ci0gICAgICAgICAgICAgICAgbVRlbXBSZWN0LnJpZ2h0ID0gbVNob3dXZWVrTnVtYmVyID8gbVdpZHRoIC0gbVdpZHRoIC8gbU51bUNlbGxzIDogbVdpZHRoOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtVGVtcFJlY3QubGVmdCA9IG1TZWxlY3RlZFJpZ2h0ICsgMzsKLSAgICAgICAgICAgICAgICBtVGVtcFJlY3QucmlnaHQgPSBtV2lkdGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QobVRlbXBSZWN0LCBtRHJhd1BhaW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBEcmF3cyB0aGUgd2VlayBhbmQgbW9udGggZGF5IG51bWJlcnMgZm9yIHRoaXMgd2Vlay4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGNhbnZhcyBUaGUgY2FudmFzIHRvIGRyYXcgb24KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgdm9pZCBkcmF3V2Vla051bWJlcnNBbmREYXRlcyhDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgICAgICBmaW5hbCBmbG9hdCB0ZXh0SGVpZ2h0ID0gbURyYXdQYWludC5nZXRUZXh0U2l6ZSgpOwotICAgICAgICAgICAgZmluYWwgaW50IHkgPSAoaW50KSAoKG1IZWlnaHQgKyB0ZXh0SGVpZ2h0KSAvIDIpIC0gbVdlZWtTZXBlcmF0b3JMaW5lV2lkdGg7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbkRheXMgPSBtTnVtQ2VsbHM7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgZGl2aXNvciA9IDIgKiBuRGF5czsKLQotICAgICAgICAgICAgbURyYXdQYWludC5zZXRUZXh0QWxpZ24oQWxpZ24uQ0VOVEVSKTsKLSAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0VGV4dFNpemUobURhdGVUZXh0U2l6ZSk7Ci0KLSAgICAgICAgICAgIGludCBpID0gMDsKLQotICAgICAgICAgICAgaWYgKGlzTGF5b3V0UnRsKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IG5EYXlzIC0gMTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRDb2xvcihtRm9jdXNEYXlbaV0gPyBtRm9jdXNlZE1vbnRoRGF0ZUNvbG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtVW5mb2N1c2VkTW9udGhEYXRlQ29sb3IpOwotICAgICAgICAgICAgICAgICAgICBpbnQgeCA9ICgyICogaSArIDEpICogbVdpZHRoIC8gZGl2aXNvcjsKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KG1EYXlOdW1iZXJzW25EYXlzIC0gMSAtIGldLCB4LCB5LCBtTW9udGhOdW1EcmF3UGFpbnQpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBzaG93aW5nIHRoZSB3ZWVrIG51bWJlciBjYWxjdWxhdGUgaXQgYmFzZWQgb24gTW9uZGF5CisgICAgICAgICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICAgICAgICAgIGlmIChtU2hvd1dlZWtOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgbURyYXdQYWludC5zZXRDb2xvcihtV2Vla051bWJlckNvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHggPSBtV2lkdGggLSBtV2lkdGggLyBkaXZpc29yOwotICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQobURheU51bWJlcnNbMF0sIHgsIHksIG1EcmF3UGFpbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TaG93V2Vla051bWJlcikgewotICAgICAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldENvbG9yKG1XZWVrTnVtYmVyQ29sb3IpOwotICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IG1XaWR0aCAvIGRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dChtRGF5TnVtYmVyc1swXSwgeCwgeSwgbURyYXdQYWludCk7CisgICAgICAgICAgICAgICAgICAgIG1EYXlOdW1iZXJzWzBdID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuZ2V0RGVmYXVsdCgpLCAiJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuV0VFS19PRl9ZRUFSKSk7CiAgICAgICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yICg7IGkgPCBuRGF5czsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRDb2xvcihtRm9jdXNEYXlbaV0gPyBtRm9jdXNlZE1vbnRoRGF0ZUNvbG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtVW5mb2N1c2VkTW9udGhEYXRlQ29sb3IpOwotICAgICAgICAgICAgICAgICAgICBpbnQgeCA9ICgyICogaSArIDEpICogbVdpZHRoIC8gZGl2aXNvcjsKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KG1EYXlOdW1iZXJzW2ldLCB4LCB5LCBtTW9udGhOdW1EcmF3UGFpbnQpOworCisgICAgICAgICAgICAgICAgLy8gTm93IGFkanVzdCBvdXIgc3RhcnRpbmcgZGF5IGJhc2VkIG9uIHRoZSBzdGFydCBkYXkgb2YgdGhlIHdlZWsKKyAgICAgICAgICAgICAgICBpbnQgZGlmZiA9IG1GaXJzdERheU9mV2VlayAtIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOworICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCBkaWZmKTsKKworICAgICAgICAgICAgICAgIG1GaXJzdERheSA9IChDYWxlbmRhcikgbVRlbXBEYXRlLmNsb25lKCk7CisgICAgICAgICAgICAgICAgbU1vbnRoT2ZGaXJzdFdlZWtEYXkgPSBtVGVtcERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKTsKKworICAgICAgICAgICAgICAgIG1IYXNVbmZvY3VzZWREYXkgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgbU51bUNlbGxzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0ZvY3VzZWREYXkgPSAobVRlbXBEYXRlLmdldChDYWxlbmRhci5NT05USCkgPT0gZm9jdXNlZE1vbnRoKTsKKyAgICAgICAgICAgICAgICAgICAgbUZvY3VzRGF5W2ldID0gaXNGb2N1c2VkRGF5OworICAgICAgICAgICAgICAgICAgICBtSGFzRm9jdXNlZERheSB8PSBpc0ZvY3VzZWREYXk7CisgICAgICAgICAgICAgICAgICAgIG1IYXNVbmZvY3VzZWREYXkgJj0gIWlzRm9jdXNlZERheTsKKyAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90IGRyYXcgZGF0ZXMgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UgdG8gYXZvaWQgdXNlciBjb25mdXNpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1UZW1wRGF0ZS5iZWZvcmUobU1pbkRhdGUpIHx8IG1UZW1wRGF0ZS5hZnRlcihtTWF4RGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1EYXlOdW1iZXJzW2ldID0gIiI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtRGF5TnVtYmVyc1tpXSA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLmdldERlZmF1bHQoKSwgIiVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gV2UgZG8gb25lIGV4dHJhIGFkZCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wLCBpZiB0aGF0IHB1c2hlZCB1cyB0bworICAgICAgICAgICAgICAgIC8vIG5ldyBtb250aCB1bmRvIGl0CisgICAgICAgICAgICAgICAgaWYgKG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1MYXN0V2Vla0RheU1vbnRoID0gbVRlbXBEYXRlLmdldChDYWxlbmRhci5NT05USCk7CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIERyYXdzIGEgaG9yaXpvbnRhbCBsaW5lIGZvciBzZXBhcmF0aW5nIHRoZSB3ZWVrcy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGNhbnZhcyBUaGUgY2FudmFzIHRvIGRyYXcgb24uCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHZvaWQgZHJhd1dlZWtTZXBhcmF0b3JzKENhbnZhcyBjYW52YXMpIHsKLSAgICAgICAgICAgIC8vIElmIGl0IGlzIHRoZSB0b3Btb3N0IGZ1bGx5IHZpc2libGUgY2hpbGQgZG8gbm90IGRyYXcgc2VwYXJhdG9yIGxpbmUKLSAgICAgICAgICAgIGludCBmaXJzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uID0gbUxpc3RWaWV3LmdldEZpcnN0VmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAobUxpc3RWaWV3LmdldENoaWxkQXQoMCkuZ2V0VG9wKCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RGdWxseVZpc2libGVQb3NpdGlvbisrOworICAgICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvblBvc2l0aW9ucygpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24gPT0gbVdlZWspIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtRHJhd1BhaW50LnNldENvbG9yKG1XZWVrU2VwYXJhdG9yTGluZUNvbG9yKTsKLSAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0U3Ryb2tlV2lkdGgobVdlZWtTZXBlcmF0b3JMaW5lV2lkdGgpOwotICAgICAgICAgICAgZmxvYXQgc3RhcnRYOwotICAgICAgICAgICAgZmxvYXQgc3RvcFg7Ci0gICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwoKSkgewotICAgICAgICAgICAgICAgIHN0YXJ0WCA9IDA7Ci0gICAgICAgICAgICAgICAgc3RvcFggPSBtU2hvd1dlZWtOdW1iZXIgPyBtV2lkdGggLSBtV2lkdGggLyBtTnVtQ2VsbHMgOiBtV2lkdGg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0YXJ0WCA9IG1TaG93V2Vla051bWJlciA/IG1XaWR0aCAvIG1OdW1DZWxscyA6IDA7Ci0gICAgICAgICAgICAgICAgc3RvcFggPSBtV2lkdGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYW52YXMuZHJhd0xpbmUoc3RhcnRYLCAwLCBzdG9wWCwgMCwgbURyYXdQYWludCk7Ci0gICAgICAgIH0KIAotICAgICAgICAvKioKLSAgICAgICAgICogRHJhd3MgdGhlIHNlbGVjdGVkIGRhdGUgYmFycyBpZiB0aGlzIHdlZWsgaGFzIGEgc2VsZWN0ZWQgZGF5LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gY2FudmFzIFRoZSBjYW52YXMgdG8gZHJhdyBvbgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGRyYXdTZWxlY3RlZERhdGVWZXJ0aWNhbEJhcnMoQ2FudmFzIGNhbnZhcykgewotICAgICAgICAgICAgaWYgKCFtSGFzU2VsZWN0ZWREYXkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEluaXRpYWxpemUgdGhlIHBhaW50IGluc3RhbmNlcy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXRpbGFpemVQYWludHMoKSB7CisgICAgICAgICAgICAgICAgbURyYXdQYWludC5zZXRGYWtlQm9sZFRleHQoZmFsc2UpOworICAgICAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0U3R5bGUoU3R5bGUuRklMTCk7CisKKyAgICAgICAgICAgICAgICBtTW9udGhOdW1EcmF3UGFpbnQuc2V0RmFrZUJvbGRUZXh0KHRydWUpOworICAgICAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgICAgICAgICAgbU1vbnRoTnVtRHJhd1BhaW50LnNldFN0eWxlKFN0eWxlLkZJTEwpOworICAgICAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRUZXh0QWxpZ24oQWxpZ24uQ0VOVEVSKTsKKyAgICAgICAgICAgICAgICBtTW9udGhOdW1EcmF3UGFpbnQuc2V0VGV4dFNpemUobURhdGVUZXh0U2l6ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXIuc2V0Qm91bmRzKG1TZWxlY3RlZExlZnQgLSBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aCAvIDIsCi0gICAgICAgICAgICAgICAgICAgIG1XZWVrU2VwZXJhdG9yTGluZVdpZHRoLAotICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRMZWZ0ICsgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyV2lkdGggLyAyLCBtSGVpZ2h0KTsKLSAgICAgICAgICAgIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhci5kcmF3KGNhbnZhcyk7Ci0gICAgICAgICAgICBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXIuc2V0Qm91bmRzKG1TZWxlY3RlZFJpZ2h0IC0gbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyV2lkdGggLyAyLAotICAgICAgICAgICAgICAgICAgICBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkUmlnaHQgKyBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aCAvIDIsIG1IZWlnaHQpOwotICAgICAgICAgICAgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyLmRyYXcoY2FudmFzKTsKLSAgICAgICAgfQogCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblNpemVDaGFuZ2VkKGludCB3LCBpbnQgaCwgaW50IG9sZHcsIGludCBvbGRoKSB7Ci0gICAgICAgICAgICBtV2lkdGggPSB3OwotICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uUG9zaXRpb25zKCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogUmV0dXJucyB0aGUgbW9udGggb2YgdGhlIGZpcnN0IGRheSBpbiB0aGlzIHdlZWsuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogQHJldHVybiBUaGUgbW9udGggdGhlIGZpcnN0IGRheSBvZiB0aGlzIHZpZXcgaXMgaW4uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyBpbnQgZ2V0TW9udGhPZkZpcnN0V2Vla0RheSgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbU1vbnRoT2ZGaXJzdFdlZWtEYXk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRoaXMgY2FsY3VsYXRlcyB0aGUgcG9zaXRpb25zIGZvciB0aGUgc2VsZWN0ZWQgZGF5IGxpbmVzLgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVNlbGVjdGlvblBvc2l0aW9ucygpIHsKLSAgICAgICAgICAgIGlmIChtSGFzU2VsZWN0ZWREYXkpIHsKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogUmV0dXJucyB0aGUgbW9udGggb2YgdGhlIGxhc3QgZGF5IGluIHRoaXMgd2VlaworICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEByZXR1cm4gVGhlIG1vbnRoIHRoZSBsYXN0IGRheSBvZiB0aGlzIHZpZXcgaXMgaW4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIGludCBnZXRNb250aE9mTGFzdFdlZWtEYXkoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1MYXN0V2Vla0RheU1vbnRoOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGRheSBpbiB0aGlzIHZpZXcuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogQHJldHVybiBUaGUgZmlyc3QgZGF5IGluIHRoZSB2aWV3LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwdWJsaWMgQ2FsZW5kYXIgZ2V0Rmlyc3REYXkoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1GaXJzdERheTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDYWxjdWxhdGVzIHRoZSBkYXkgdGhhdCB0aGUgZ2l2ZW4geCBwb3NpdGlvbiBpcyBpbiwgYWNjb3VudGluZyBmb3IKKyAgICAgICAgICAgICAqIHdlZWsgbnVtYmVyLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBwYXJhbSB4IFRoZSB4IHBvc2l0aW9uIG9mIHRoZSB0b3VjaCBldmVudC4KKyAgICAgICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiBhIGRheSB3YXMgZm91bmQgZm9yIHRoZSBnaXZlbiBsb2NhdGlvbi4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZ2V0RGF5RnJvbUxvY2F0aW9uKGZsb2F0IHgsIENhbGVuZGFyIG91dENhbGVuZGFyKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0xheW91dFJ0bCA9IGlzTGF5b3V0UnRsKCk7Ci0gICAgICAgICAgICAgICAgaW50IHNlbGVjdGVkUG9zaXRpb24gPSBtU2VsZWN0ZWREYXkgLSBtRmlyc3REYXlPZldlZWs7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUG9zaXRpb24gPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUG9zaXRpb24gKz0gNzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1TaG93V2Vla051bWJlciAmJiAhaXNMYXlvdXRSdGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQb3NpdGlvbisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkTGVmdCA9IChtRGF5c1BlcldlZWsgLSAxIC0gc2VsZWN0ZWRQb3NpdGlvbikgKiBtV2lkdGggLyBtTnVtQ2VsbHM7CiAKKyAgICAgICAgICAgICAgICBpbnQgc3RhcnQ7CisgICAgICAgICAgICAgICAgaW50IGVuZDsKKworICAgICAgICAgICAgICAgIGlmIChpc0xheW91dFJ0bCkgeworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZCA9IG1TaG93V2Vla051bWJlciA/IG1XaWR0aCAtIG1XaWR0aCAvIG1OdW1DZWxscyA6IG1XaWR0aDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRMZWZ0ID0gc2VsZWN0ZWRQb3NpdGlvbiAqIG1XaWR0aCAvIG1OdW1DZWxsczsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtU2hvd1dlZWtOdW1iZXIgPyBtV2lkdGggLyBtTnVtQ2VsbHMgOiAwOworICAgICAgICAgICAgICAgICAgICBlbmQgPSBtV2lkdGg7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1TZWxlY3RlZFJpZ2h0ID0gbVNlbGVjdGVkTGVmdCArIG1XaWR0aCAvIG1OdW1DZWxsczsKKworICAgICAgICAgICAgICAgIGlmICh4IDwgc3RhcnQgfHwgeCA+IGVuZCkgeworICAgICAgICAgICAgICAgICAgICBvdXRDYWxlbmRhci5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gU2VsZWN0aW9uIGlzICh4IC0gc3RhcnQpIC8gKHBpeGVscy9kYXkpIHdoaWNoIGlzICh4IC0gc3RhcnQpICogZGF5IC8gcGl4ZWxzCisgICAgICAgICAgICAgICAgaW50IGRheVBvc2l0aW9uID0gKGludCkgKCh4IC0gc3RhcnQpICogbURheXNQZXJXZWVrIC8gKGVuZCAtIHN0YXJ0KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF5UG9zaXRpb24gPSBtRGF5c1BlcldlZWsgLSAxIC0gZGF5UG9zaXRpb247CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0Q2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKG1GaXJzdERheS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICAgICAgb3V0Q2FsZW5kYXIuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgZGF5UG9zaXRpb24pOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgICAgICAgICBkcmF3QmFja2dyb3VuZChjYW52YXMpOworICAgICAgICAgICAgICAgIGRyYXdXZWVrTnVtYmVyc0FuZERhdGVzKGNhbnZhcyk7CisgICAgICAgICAgICAgICAgZHJhd1dlZWtTZXBhcmF0b3JzKGNhbnZhcyk7CisgICAgICAgICAgICAgICAgZHJhd1NlbGVjdGVkRGF0ZVZlcnRpY2FsQmFycyhjYW52YXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFRoaXMgZHJhd3MgdGhlIHNlbGVjdGlvbiBoaWdobGlnaHQgaWYgYSBkYXkgaXMgc2VsZWN0ZWQgaW4gdGhpcyB3ZWVrLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBwYXJhbSBjYW52YXMgVGhlIGNhbnZhcyB0byBkcmF3IG9uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHByaXZhdGUgdm9pZCBkcmF3QmFja2dyb3VuZChDYW52YXMgY2FudmFzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtSGFzU2VsZWN0ZWREYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldENvbG9yKG1TZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IpOworCisgICAgICAgICAgICAgICAgbVRlbXBSZWN0LnRvcCA9IG1XZWVrU2VwZXJhdG9yTGluZVdpZHRoOworICAgICAgICAgICAgICAgIG1UZW1wUmVjdC5ib3R0b20gPSBtSGVpZ2h0OworCisgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0xheW91dFJ0bCA9IGlzTGF5b3V0UnRsKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbVRlbXBSZWN0LmxlZnQgPSAwOworICAgICAgICAgICAgICAgICAgICBtVGVtcFJlY3QucmlnaHQgPSBtU2VsZWN0ZWRMZWZ0IC0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtVGVtcFJlY3QubGVmdCA9IG1TaG93V2Vla051bWJlciA/IG1XaWR0aCAvIG1OdW1DZWxscyA6IDA7CisgICAgICAgICAgICAgICAgICAgIG1UZW1wUmVjdC5yaWdodCA9IG1TZWxlY3RlZExlZnQgLSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QobVRlbXBSZWN0LCBtRHJhd1BhaW50KTsKKworICAgICAgICAgICAgICAgIGlmIChpc0xheW91dFJ0bCkgeworICAgICAgICAgICAgICAgICAgICBtVGVtcFJlY3QubGVmdCA9IG1TZWxlY3RlZFJpZ2h0ICsgMzsKKyAgICAgICAgICAgICAgICAgICAgbVRlbXBSZWN0LnJpZ2h0ID0gbVNob3dXZWVrTnVtYmVyID8gbVdpZHRoIC0gbVdpZHRoIC8gbU51bUNlbGxzIDogbVdpZHRoOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1UZW1wUmVjdC5sZWZ0ID0gbVNlbGVjdGVkUmlnaHQgKyAzOworICAgICAgICAgICAgICAgICAgICBtVGVtcFJlY3QucmlnaHQgPSBtV2lkdGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3UmVjdChtVGVtcFJlY3QsIG1EcmF3UGFpbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIERyYXdzIHRoZSB3ZWVrIGFuZCBtb250aCBkYXkgbnVtYmVycyBmb3IgdGhpcyB3ZWVrLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBwYXJhbSBjYW52YXMgVGhlIGNhbnZhcyB0byBkcmF3IG9uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHByaXZhdGUgdm9pZCBkcmF3V2Vla051bWJlcnNBbmREYXRlcyhDYW52YXMgY2FudmFzKSB7CisgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgdGV4dEhlaWdodCA9IG1EcmF3UGFpbnQuZ2V0VGV4dFNpemUoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgeSA9IChpbnQpICgobUhlaWdodCArIHRleHRIZWlnaHQpIC8gMikgLSBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aDsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbkRheXMgPSBtTnVtQ2VsbHM7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGRpdmlzb3IgPSAyICogbkRheXM7CisKKyAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldFRleHRBbGlnbihBbGlnbi5DRU5URVIpOworICAgICAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0VGV4dFNpemUobURhdGVUZXh0U2l6ZSk7CisKKyAgICAgICAgICAgICAgICBpbnQgaSA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IG5EYXlzIC0gMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtTW9udGhOdW1EcmF3UGFpbnQuc2V0Q29sb3IobUZvY3VzRGF5W2ldID8gbUZvY3VzZWRNb250aERhdGVDb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1VbmZvY3VzZWRNb250aERhdGVDb2xvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCA9ICgyICogaSArIDEpICogbVdpZHRoIC8gZGl2aXNvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dChtRGF5TnVtYmVyc1tuRGF5cyAtIDEgLSBpXSwgeCwgeSwgbU1vbnRoTnVtRHJhd1BhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobVNob3dXZWVrTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldENvbG9yKG1XZWVrTnVtYmVyQ29sb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHggPSBtV2lkdGggLSBtV2lkdGggLyBkaXZpc29yOworICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KG1EYXlOdW1iZXJzWzBdLCB4LCB5LCBtRHJhd1BhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtU2hvd1dlZWtOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0Q29sb3IobVdlZWtOdW1iZXJDb2xvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IG1XaWR0aCAvIGRpdmlzb3I7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQobURheU51bWJlcnNbMF0sIHgsIHksIG1EcmF3UGFpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgbkRheXM7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgbU1vbnRoTnVtRHJhd1BhaW50LnNldENvbG9yKG1Gb2N1c0RheVtpXSA/IG1Gb2N1c2VkTW9udGhEYXRlQ29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtVW5mb2N1c2VkTW9udGhEYXRlQ29sb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHggPSAoMiAqIGkgKyAxKSAqIG1XaWR0aCAvIGRpdmlzb3I7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQobURheU51bWJlcnNbaV0sIHgsIHksIG1Nb250aE51bURyYXdQYWludCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogRHJhd3MgYSBob3Jpem9udGFsIGxpbmUgZm9yIHNlcGFyYXRpbmcgdGhlIHdlZWtzLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBwYXJhbSBjYW52YXMgVGhlIGNhbnZhcyB0byBkcmF3IG9uLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwcml2YXRlIHZvaWQgZHJhd1dlZWtTZXBhcmF0b3JzKENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBpdCBpcyB0aGUgdG9wbW9zdCBmdWxseSB2aXNpYmxlIGNoaWxkIGRvIG5vdCBkcmF3IHNlcGFyYXRvciBsaW5lCisgICAgICAgICAgICAgICAgaW50IGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24gPSBtTGlzdFZpZXcuZ2V0Rmlyc3RWaXNpYmxlUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBpZiAobUxpc3RWaWV3LmdldENoaWxkQXQoMCkuZ2V0VG9wKCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24gPT0gbVdlZWspIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldENvbG9yKG1XZWVrU2VwYXJhdG9yTGluZUNvbG9yKTsKKyAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldFN0cm9rZVdpZHRoKG1XZWVrU2VwZXJhdG9yTGluZVdpZHRoKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBzdGFydFg7CisgICAgICAgICAgICAgICAgZmxvYXQgc3RvcFg7CisgICAgICAgICAgICAgICAgaWYgKGlzTGF5b3V0UnRsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc3RvcFggPSBtU2hvd1dlZWtOdW1iZXIgPyBtV2lkdGggLSBtV2lkdGggLyBtTnVtQ2VsbHMgOiBtV2lkdGg7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0gbVNob3dXZWVrTnVtYmVyID8gbVdpZHRoIC8gbU51bUNlbGxzIDogMDsKKyAgICAgICAgICAgICAgICAgICAgc3RvcFggPSBtV2lkdGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3TGluZShzdGFydFgsIDAsIHN0b3BYLCAwLCBtRHJhd1BhaW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBEcmF3cyB0aGUgc2VsZWN0ZWQgZGF0ZSBiYXJzIGlmIHRoaXMgd2VlayBoYXMgYSBzZWxlY3RlZCBkYXkuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogQHBhcmFtIGNhbnZhcyBUaGUgY2FudmFzIHRvIGRyYXcgb24KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGRyYXdTZWxlY3RlZERhdGVWZXJ0aWNhbEJhcnMoQ2FudmFzIGNhbnZhcykgeworICAgICAgICAgICAgICAgIGlmICghbUhhc1NlbGVjdGVkRGF5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyLnNldEJvdW5kcygKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZExlZnQgLSBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aCAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZExlZnQgKyBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aCAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICBtSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXIuZHJhdyhjYW52YXMpOworICAgICAgICAgICAgICAgIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhci5zZXRCb3VuZHMoCisgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRSaWdodCAtIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhcldpZHRoIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XZWVrU2VwZXJhdG9yTGluZVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkUmlnaHQgKyBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aCAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICBtSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXIuZHJhdyhjYW52YXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uU2l6ZUNoYW5nZWQoaW50IHcsIGludCBoLCBpbnQgb2xkdywgaW50IG9sZGgpIHsKKyAgICAgICAgICAgICAgICBtV2lkdGggPSB3OworICAgICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvblBvc2l0aW9ucygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFRoaXMgY2FsY3VsYXRlcyB0aGUgcG9zaXRpb25zIGZvciB0aGUgc2VsZWN0ZWQgZGF5IGxpbmVzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlU2VsZWN0aW9uUG9zaXRpb25zKCkgeworICAgICAgICAgICAgICAgIGlmIChtSGFzU2VsZWN0ZWREYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0xheW91dFJ0bCA9IGlzTGF5b3V0UnRsKCk7CisgICAgICAgICAgICAgICAgICAgIGludCBzZWxlY3RlZFBvc2l0aW9uID0gbVNlbGVjdGVkRGF5IC0gbUZpcnN0RGF5T2ZXZWVrOworICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRQb3NpdGlvbiA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUG9zaXRpb24gKz0gNzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobVNob3dXZWVrTnVtYmVyICYmICFpc0xheW91dFJ0bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQb3NpdGlvbisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0xheW91dFJ0bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkTGVmdCA9IChtRGF5c1BlcldlZWsgLSAxIC0gc2VsZWN0ZWRQb3NpdGlvbikgKiBtV2lkdGggLyBtTnVtQ2VsbHM7CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZExlZnQgPSBzZWxlY3RlZFBvc2l0aW9uICogbVdpZHRoIC8gbU51bUNlbGxzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZFJpZ2h0ID0gbVNlbGVjdGVkTGVmdCArIG1XaWR0aCAvIG1OdW1DZWxsczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKKyAgICAgICAgICAgICAgICBtSGVpZ2h0ID0gKG1MaXN0Vmlldy5nZXRIZWlnaHQoKSAtIG1MaXN0Vmlldy5nZXRQYWRkaW5nVG9wKCkgLSBtTGlzdFZpZXcKKyAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRQYWRkaW5nQm90dG9tKCkpIC8gbVNob3duV2Vla0NvdW50OworICAgICAgICAgICAgICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKE1lYXN1cmVTcGVjLmdldFNpemUod2lkdGhNZWFzdXJlU3BlYyksIG1IZWlnaHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIG9uTWVhc3VyZShpbnQgd2lkdGhNZWFzdXJlU3BlYywgaW50IGhlaWdodE1lYXN1cmVTcGVjKSB7Ci0gICAgICAgICAgICBtSGVpZ2h0ID0gKG1MaXN0Vmlldy5nZXRIZWlnaHQoKSAtIG1MaXN0Vmlldy5nZXRQYWRkaW5nVG9wKCkgLSBtTGlzdFZpZXcKLSAgICAgICAgICAgICAgICAgICAgLmdldFBhZGRpbmdCb3R0b20oKSkgLyBtU2hvd25XZWVrQ291bnQ7Ci0gICAgICAgICAgICBzZXRNZWFzdXJlZERpbWVuc2lvbihNZWFzdXJlU3BlYy5nZXRTaXplKHdpZHRoTWVhc3VyZVNwZWMpLCBtSGVpZ2h0KTsKLSAgICAgICAgfQogICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NoZWNrQm94LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hlY2tCb3guamF2YQppbmRleCBmMTgwNGY4Li43MTQzOGM5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hlY2tCb3guamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hlY2tCb3guamF2YQpAQCAtNjQsOCArNjQsMTIgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmNoZWNrYm94U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBDaGVja0JveChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIENoZWNrQm94KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIENoZWNrQm94KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NoZWNrZWRUZXh0Vmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NoZWNrZWRUZXh0Vmlldy5qYXZhCmluZGV4IDVjMTBhNzcuLjc4YjFiNzUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9DaGVja2VkVGV4dFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hlY2tlZFRleHRWaWV3LmphdmEKQEAgLTU4LDExICs1OCwxNSBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBSLmF0dHIuY2hlY2tlZFRleHRWaWV3U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBDaGVja2VkVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBDaGVja2VkVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkNoZWNrZWRUZXh0VmlldywgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBDaGVja2VkVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5DaGVja2VkVGV4dFZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIERyYXdhYmxlIGQgPSBhLmdldERyYXdhYmxlKFIuc3R5bGVhYmxlLkNoZWNrZWRUZXh0Vmlld19jaGVja01hcmspOwogICAgICAgICBpZiAoZCAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hyb25vbWV0ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9DaHJvbm9tZXRlci5qYXZhCmluZGV4IGI3YTEyNmUuLmY5NDc4OWQwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hyb25vbWV0ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hyb25vbWV0ZXIuamF2YQpAQCAtMTgsMTQgKzE4LDEyIEBACiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlJlbW90ZVZpZXdzLlJlbW90ZVZpZXc7CkBAIC05NiwxMiArOTQsMTUgQEAKICAgICAgKiBJbml0aWFsaXplIHdpdGggc3RhbmRhcmQgdmlldyBsYXlvdXQgaW5mb3JtYXRpb24gYW5kIHN0eWxlLgogICAgICAqIFNldHMgdGhlIGJhc2UgdG8gdGhlIGN1cnJlbnQgdGltZS4KICAgICAgKi8KLSAgICBwdWJsaWMgQ2hyb25vbWV0ZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBDaHJvbm9tZXRlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQ2hyb25vbWV0ZXIsIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgQ2hyb25vbWV0ZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5DaHJvbm9tZXRlciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIHNldEZvcm1hdChhLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5DaHJvbm9tZXRlcl9mb3JtYXQpKTsKICAgICAgICAgYS5yZWN5Y2xlKCk7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Db21wb3VuZEJ1dHRvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NvbXBvdW5kQnV0dG9uLmphdmEKaW5kZXggYWJkZGM5MC4uYjIyMDg4YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NvbXBvdW5kQnV0dG9uLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NvbXBvdW5kQnV0dG9uLmphdmEKQEAgLTY0LDEyICs2NCwxNSBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgQ29tcG91bmRCdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBDb21wb3VuZEJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KIAotICAgICAgICBUeXBlZEFycmF5IGEgPQotICAgICAgICAgICAgICAgIGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Db21wb3VuZEJ1dHRvbiwgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBDb21wb3VuZEJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkNvbXBvdW5kQnV0dG9uLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBEcmF3YWJsZSBkID0gYS5nZXREcmF3YWJsZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Db21wb3VuZEJ1dHRvbl9idXR0b24pOwogICAgICAgICBpZiAoZCAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRGF0ZVBpY2tlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXIuamF2YQppbmRleCBkMDMxNjFlLi4yNjVkYmNkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRGF0ZVBpY2tlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9EYXRlUGlja2VyLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnRleHQuSW5wdXRUeXBlOwotaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CkBAIC03Niw1MyArNzUsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19UQUcgPSBEYXRlUGlja2VyLmNsYXNzLmdldFNpbXBsZU5hbWUoKTsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRFX0ZPUk1BVCA9ICJNTS9kZC95eXl5IjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NUQVJUX1lFQVIgPSAxOTAwOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfRU5EX1lFQVIgPSAyMTAwOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX0NBTEVOREFSX1ZJRVdfU0hPV04gPSB0cnVlOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX1NQSU5ORVJTX1NIT1dOID0gdHJ1ZTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9FTkFCTEVEX1NUQVRFID0gdHJ1ZTsKLQotICAgIHByaXZhdGUgZmluYWwgTGluZWFyTGF5b3V0IG1TcGlubmVyczsKLQotICAgIHByaXZhdGUgZmluYWwgTnVtYmVyUGlja2VyIG1EYXlTcGlubmVyOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBOdW1iZXJQaWNrZXIgbU1vbnRoU3Bpbm5lcjsKLQotICAgIHByaXZhdGUgZmluYWwgTnVtYmVyUGlja2VyIG1ZZWFyU3Bpbm5lcjsKLQotICAgIHByaXZhdGUgZmluYWwgRWRpdFRleHQgbURheVNwaW5uZXJJbnB1dDsKLQotICAgIHByaXZhdGUgZmluYWwgRWRpdFRleHQgbU1vbnRoU3Bpbm5lcklucHV0OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBFZGl0VGV4dCBtWWVhclNwaW5uZXJJbnB1dDsKLQotICAgIHByaXZhdGUgZmluYWwgQ2FsZW5kYXJWaWV3IG1DYWxlbmRhclZpZXc7Ci0KLSAgICBwcml2YXRlIExvY2FsZSBtQ3VycmVudExvY2FsZTsKLQotICAgIHByaXZhdGUgT25EYXRlQ2hhbmdlZExpc3RlbmVyIG1PbkRhdGVDaGFuZ2VkTGlzdGVuZXI7Ci0KLSAgICBwcml2YXRlIFN0cmluZ1tdIG1TaG9ydE1vbnRoczsKLQotICAgIHByaXZhdGUgZmluYWwgamF2YS50ZXh0LkRhdGVGb3JtYXQgbURhdGVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChEQVRFX0ZPUk1BVCk7Ci0KLSAgICBwcml2YXRlIGludCBtTnVtYmVyT2ZNb250aHM7Ci0KLSAgICBwcml2YXRlIENhbGVuZGFyIG1UZW1wRGF0ZTsKLQotICAgIHByaXZhdGUgQ2FsZW5kYXIgbU1pbkRhdGU7Ci0KLSAgICBwcml2YXRlIENhbGVuZGFyIG1NYXhEYXRlOwotCi0gICAgcHJpdmF0ZSBDYWxlbmRhciBtQ3VycmVudERhdGU7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbUlzRW5hYmxlZCA9IERFRkFVTFRfRU5BQkxFRF9TVEFURTsKKyAgICBwcml2YXRlIERhdGVQaWNrZXJEZWxlZ2F0ZSBtRGVsZWdhdGU7CiAKICAgICAvKioKICAgICAgKiBUaGUgY2FsbGJhY2sgdXNlZCB0byBpbmRpY2F0ZSB0aGUgdXNlciBjaGFuZ2VzXGQgdGhlIGRhdGUuCkBAIC0xNDksNDQzICsxMDIsMTQgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgUi5hdHRyLmRhdGVQaWNrZXJTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIERhdGVQaWNrZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotCi0gICAgICAgIC8vIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGxvY2FsZQotICAgICAgICBzZXRDdXJyZW50TG9jYWxlKExvY2FsZS5nZXREZWZhdWx0KCkpOwotCi0gICAgICAgIFR5cGVkQXJyYXkgYXR0cmlidXRlc0FycmF5ID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5EYXRlUGlja2VyLAotICAgICAgICAgICAgICAgIGRlZlN0eWxlLCAwKTsKLSAgICAgICAgYm9vbGVhbiBzcGlubmVyc1Nob3duID0gYXR0cmlidXRlc0FycmF5LmdldEJvb2xlYW4oUi5zdHlsZWFibGUuRGF0ZVBpY2tlcl9zcGlubmVyc1Nob3duLAotICAgICAgICAgICAgICAgIERFRkFVTFRfU1BJTk5FUlNfU0hPV04pOwotICAgICAgICBib29sZWFuIGNhbGVuZGFyVmlld1Nob3duID0gYXR0cmlidXRlc0FycmF5LmdldEJvb2xlYW4oCi0gICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuRGF0ZVBpY2tlcl9jYWxlbmRhclZpZXdTaG93biwgREVGQVVMVF9DQUxFTkRBUl9WSUVXX1NIT1dOKTsKLSAgICAgICAgaW50IHN0YXJ0WWVhciA9IGF0dHJpYnV0ZXNBcnJheS5nZXRJbnQoUi5zdHlsZWFibGUuRGF0ZVBpY2tlcl9zdGFydFllYXIsCi0gICAgICAgICAgICAgICAgREVGQVVMVF9TVEFSVF9ZRUFSKTsKLSAgICAgICAgaW50IGVuZFllYXIgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0SW50KFIuc3R5bGVhYmxlLkRhdGVQaWNrZXJfZW5kWWVhciwgREVGQVVMVF9FTkRfWUVBUik7Ci0gICAgICAgIFN0cmluZyBtaW5EYXRlID0gYXR0cmlidXRlc0FycmF5LmdldFN0cmluZyhSLnN0eWxlYWJsZS5EYXRlUGlja2VyX21pbkRhdGUpOwotICAgICAgICBTdHJpbmcgbWF4RGF0ZSA9IGF0dHJpYnV0ZXNBcnJheS5nZXRTdHJpbmcoUi5zdHlsZWFibGUuRGF0ZVBpY2tlcl9tYXhEYXRlKTsKLSAgICAgICAgaW50IGxheW91dFJlc291cmNlSWQgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0UmVzb3VyY2VJZChSLnN0eWxlYWJsZS5EYXRlUGlja2VyX2ludGVybmFsTGF5b3V0LAotICAgICAgICAgICAgICAgIFIubGF5b3V0LmRhdGVfcGlja2VyKTsKLSAgICAgICAgYXR0cmlidXRlc0FycmF5LnJlY3ljbGUoKTsKLQotICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IChMYXlvdXRJbmZsYXRlcikgY29udGV4dAotICAgICAgICAgICAgICAgIC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuTEFZT1VUX0lORkxBVEVSX1NFUlZJQ0UpOwotICAgICAgICBpbmZsYXRlci5pbmZsYXRlKGxheW91dFJlc291cmNlSWQsIHRoaXMsIHRydWUpOwotCi0gICAgICAgIE9uVmFsdWVDaGFuZ2VMaXN0ZW5lciBvbkNoYW5nZUxpc3RlbmVyID0gbmV3IE9uVmFsdWVDaGFuZ2VMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVmFsdWVDaGFuZ2UoTnVtYmVyUGlja2VyIHBpY2tlciwgaW50IG9sZFZhbCwgaW50IG5ld1ZhbCkgewotICAgICAgICAgICAgICAgIHVwZGF0ZUlucHV0U3RhdGUoKTsKLSAgICAgICAgICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKG1DdXJyZW50RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7Ci0gICAgICAgICAgICAgICAgLy8gdGFrZSBjYXJlIG9mIHdyYXBwaW5nIG9mIGRheXMgYW5kIG1vbnRocyB0byB1cGRhdGUgZ3JlYXRlciBmaWVsZHMKLSAgICAgICAgICAgICAgICBpZiAocGlja2VyID09IG1EYXlTcGlubmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBtYXhEYXlPZk1vbnRoID0gbVRlbXBEYXRlLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFZhbCA9PSBtYXhEYXlPZk1vbnRoICYmIG5ld1ZhbCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkVmFsID09IDEgJiYgbmV3VmFsID09IG1heERheU9mTW9udGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAtMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgbmV3VmFsIC0gb2xkVmFsKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGlja2VyID09IG1Nb250aFNwaW5uZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFZhbCA9PSAxMSAmJiBuZXdWYWwgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLmFkZChDYWxlbmRhci5NT05USCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkVmFsID09IDAgJiYgbmV3VmFsID09IDExKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLk1PTlRILCAtMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLk1PTlRILCBuZXdWYWwgLSBvbGRWYWwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwaWNrZXIgPT0gbVllYXJTcGlubmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXQoQ2FsZW5kYXIuWUVBUiwgbmV3VmFsKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIG5vdyBzZXQgdGhlIGRhdGUgdG8gdGhlIGFkanVzdGVkIG9uZQotICAgICAgICAgICAgICAgIHNldERhdGUobVRlbXBEYXRlLmdldChDYWxlbmRhci5ZRUFSKSwgbVRlbXBEYXRlLmdldChDYWxlbmRhci5NT05USCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkpOwotICAgICAgICAgICAgICAgIHVwZGF0ZVNwaW5uZXJzKCk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlQ2FsZW5kYXJWaWV3KCk7Ci0gICAgICAgICAgICAgICAgbm90aWZ5RGF0ZUNoYW5nZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBtU3Bpbm5lcnMgPSAoTGluZWFyTGF5b3V0KSBmaW5kVmlld0J5SWQoUi5pZC5waWNrZXJzKTsKLQotICAgICAgICAvLyBjYWxlbmRhciB2aWV3IGRheS1waWNrZXIKLSAgICAgICAgbUNhbGVuZGFyVmlldyA9IChDYWxlbmRhclZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLmNhbGVuZGFyX3ZpZXcpOwotICAgICAgICBtQ2FsZW5kYXJWaWV3LnNldE9uRGF0ZUNoYW5nZUxpc3RlbmVyKG5ldyBDYWxlbmRhclZpZXcuT25EYXRlQ2hhbmdlTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlbGVjdGVkRGF5Q2hhbmdlKENhbGVuZGFyVmlldyB2aWV3LCBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgbW9udGhEYXkpIHsKLSAgICAgICAgICAgICAgICBzZXREYXRlKHllYXIsIG1vbnRoLCBtb250aERheSk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlU3Bpbm5lcnMoKTsKLSAgICAgICAgICAgICAgICBub3RpZnlEYXRlQ2hhbmdlZCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICAvLyBkYXkKLSAgICAgICAgbURheVNwaW5uZXIgPSAoTnVtYmVyUGlja2VyKSBmaW5kVmlld0J5SWQoUi5pZC5kYXkpOwotICAgICAgICBtRGF5U3Bpbm5lci5zZXRGb3JtYXR0ZXIoTnVtYmVyUGlja2VyLmdldFR3b0RpZ2l0Rm9ybWF0dGVyKCkpOwotICAgICAgICBtRGF5U3Bpbm5lci5zZXRPbkxvbmdQcmVzc1VwZGF0ZUludGVydmFsKDEwMCk7Ci0gICAgICAgIG1EYXlTcGlubmVyLnNldE9uVmFsdWVDaGFuZ2VkTGlzdGVuZXIob25DaGFuZ2VMaXN0ZW5lcik7Ci0gICAgICAgIG1EYXlTcGlubmVySW5wdXQgPSAoRWRpdFRleHQpIG1EYXlTcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7Ci0KLSAgICAgICAgLy8gbW9udGgKLSAgICAgICAgbU1vbnRoU3Bpbm5lciA9IChOdW1iZXJQaWNrZXIpIGZpbmRWaWV3QnlJZChSLmlkLm1vbnRoKTsKLSAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRNaW5WYWx1ZSgwKTsKLSAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRNYXhWYWx1ZShtTnVtYmVyT2ZNb250aHMgLSAxKTsKLSAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXREaXNwbGF5ZWRWYWx1ZXMobVNob3J0TW9udGhzKTsKLSAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRPbkxvbmdQcmVzc1VwZGF0ZUludGVydmFsKDIwMCk7Ci0gICAgICAgIG1Nb250aFNwaW5uZXIuc2V0T25WYWx1ZUNoYW5nZWRMaXN0ZW5lcihvbkNoYW5nZUxpc3RlbmVyKTsKLSAgICAgICAgbU1vbnRoU3Bpbm5lcklucHV0ID0gKEVkaXRUZXh0KSBtTW9udGhTcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7Ci0KLSAgICAgICAgLy8geWVhcgotICAgICAgICBtWWVhclNwaW5uZXIgPSAoTnVtYmVyUGlja2VyKSBmaW5kVmlld0J5SWQoUi5pZC55ZWFyKTsKLSAgICAgICAgbVllYXJTcGlubmVyLnNldE9uTG9uZ1ByZXNzVXBkYXRlSW50ZXJ2YWwoMTAwKTsKLSAgICAgICAgbVllYXJTcGlubmVyLnNldE9uVmFsdWVDaGFuZ2VkTGlzdGVuZXIob25DaGFuZ2VMaXN0ZW5lcik7Ci0gICAgICAgIG1ZZWFyU3Bpbm5lcklucHV0ID0gKEVkaXRUZXh0KSBtWWVhclNwaW5uZXIuZmluZFZpZXdCeUlkKFIuaWQubnVtYmVycGlja2VyX2lucHV0KTsKLQotICAgICAgICAvLyBzaG93IG9ubHkgd2hhdCB0aGUgdXNlciByZXF1aXJlZCBidXQgbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIHNob3cgc29tZXRoaW5nIGFuZCB0aGUgc3Bpbm5lcnMgaGF2ZSBoaWdoZXIgcHJpb3JpdHkKLSAgICAgICAgaWYgKCFzcGlubmVyc1Nob3duICYmICFjYWxlbmRhclZpZXdTaG93bikgewotICAgICAgICAgICAgc2V0U3Bpbm5lcnNTaG93bih0cnVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldFNwaW5uZXJzU2hvd24oc3Bpbm5lcnNTaG93bik7Ci0gICAgICAgICAgICBzZXRDYWxlbmRhclZpZXdTaG93bihjYWxlbmRhclZpZXdTaG93bik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBzZXQgdGhlIG1pbiBkYXRlIGdpdmluZyBwcmlvcml0eSBvZiB0aGUgbWluRGF0ZSBvdmVyIHN0YXJ0WWVhcgotICAgICAgICBtVGVtcERhdGUuY2xlYXIoKTsKLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShtaW5EYXRlKSkgewotICAgICAgICAgICAgaWYgKCFwYXJzZURhdGUobWluRGF0ZSwgbVRlbXBEYXRlKSkgewotICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXQoc3RhcnRZZWFyLCAwLCAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXQoc3RhcnRZZWFyLCAwLCAxKTsKLSAgICAgICAgfQotICAgICAgICBzZXRNaW5EYXRlKG1UZW1wRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7Ci0KLSAgICAgICAgLy8gc2V0IHRoZSBtYXggZGF0ZSBnaXZpbmcgcHJpb3JpdHkgb2YgdGhlIG1heERhdGUgb3ZlciBlbmRZZWFyCi0gICAgICAgIG1UZW1wRGF0ZS5jbGVhcigpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KG1heERhdGUpKSB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlRGF0ZShtYXhEYXRlLCBtVGVtcERhdGUpKSB7Ci0gICAgICAgICAgICAgICAgbVRlbXBEYXRlLnNldChlbmRZZWFyLCAxMSwgMzEpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVRlbXBEYXRlLnNldChlbmRZZWFyLCAxMSwgMzEpOwotICAgICAgICB9Ci0gICAgICAgIHNldE1heERhdGUobVRlbXBEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLQotICAgICAgICAvLyBpbml0aWFsaXplIHRvIGN1cnJlbnQgZGF0ZQotICAgICAgICBtQ3VycmVudERhdGUuc2V0VGltZUluTWlsbGlzKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKLSAgICAgICAgaW5pdChtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLllFQVIpLCBtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSwgbUN1cnJlbnREYXRlCi0gICAgICAgICAgICAgICAgLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpLCBudWxsKTsKLQotICAgICAgICAvLyByZS1vcmRlciB0aGUgbnVtYmVyIHNwaW5uZXJzIHRvIG1hdGNoIHRoZSBjdXJyZW50IGRhdGUgZm9ybWF0Ci0gICAgICAgIHJlb3JkZXJTcGlubmVycygpOwotCi0gICAgICAgIC8vIGFjY2Vzc2liaWxpdHkKLSAgICAgICAgc2V0Q29udGVudERlc2NyaXB0aW9ucygpOwotCi0gICAgICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCB0aGlzIHZpZXcgaXMgaW1wb3J0YW50IGZvciBhY2Nlc3NpYmlsaXR5LgotICAgICAgICBpZiAoZ2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSgpID09IElNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9BVVRPKSB7Ci0gICAgICAgICAgICBzZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KElNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9ZRVMpOwotICAgICAgICB9CisgICAgcHVibGljIERhdGVQaWNrZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtaW5pbWFsIGRhdGUgc3VwcG9ydGVkIGJ5IHRoaXMge0BsaW5rIERhdGVQaWNrZXJ9IGluCi0gICAgICogbWlsbGlzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTk3MCAwMDowMDowMCBpbgotICAgICAqIHtAbGluayBUaW1lWm9uZSNnZXREZWZhdWx0KCl9IHRpbWUgem9uZS4KLSAgICAgKiA8cD4KLSAgICAgKiBOb3RlOiBUaGUgZGVmYXVsdCBtaW5pbWFsIGRhdGUgaXMgMDEvMDEvMTkwMC4KLSAgICAgKiA8cD4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG1pbmltYWwgc3VwcG9ydGVkIGRhdGUuCi0gICAgICovCi0gICAgcHVibGljIGxvbmcgZ2V0TWluRGF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1DYWxlbmRhclZpZXcuZ2V0TWluRGF0ZSgpOwotICAgIH0KKyAgICBwdWJsaWMgRGF0ZVBpY2tlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAotICAgIC8qKgotICAgICAqIFNldHMgdGhlIG1pbmltYWwgZGF0ZSBzdXBwb3J0ZWQgYnkgdGhpcyB7QGxpbmsgTnVtYmVyUGlja2VyfSBpbgotICAgICAqIG1pbGxpc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5NzAgMDA6MDA6MDAgaW4KLSAgICAgKiB7QGxpbmsgVGltZVpvbmUjZ2V0RGVmYXVsdCgpfSB0aW1lIHpvbmUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbWluRGF0ZSBUaGUgbWluaW1hbCBzdXBwb3J0ZWQgZGF0ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRNaW5EYXRlKGxvbmcgbWluRGF0ZSkgewotICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKG1pbkRhdGUpOwotICAgICAgICBpZiAobVRlbXBEYXRlLmdldChDYWxlbmRhci5ZRUFSKSA9PSBtTWluRGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikKLSAgICAgICAgICAgICAgICAmJiBtVGVtcERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSAhPSBtTWluRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbU1pbkRhdGUuc2V0VGltZUluTWlsbGlzKG1pbkRhdGUpOwotICAgICAgICBtQ2FsZW5kYXJWaWV3LnNldE1pbkRhdGUobWluRGF0ZSk7Ci0gICAgICAgIGlmIChtQ3VycmVudERhdGUuYmVmb3JlKG1NaW5EYXRlKSkgewotICAgICAgICAgICAgbUN1cnJlbnREYXRlLnNldFRpbWVJbk1pbGxpcyhtTWluRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7Ci0gICAgICAgICAgICB1cGRhdGVDYWxlbmRhclZpZXcoKTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVTcGlubmVycygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1heGltYWwgZGF0ZSBzdXBwb3J0ZWQgYnkgdGhpcyB7QGxpbmsgRGF0ZVBpY2tlcn0gaW4KLSAgICAgKiBtaWxsaXNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwIDAwOjAwOjAwIGluCi0gICAgICoge0BsaW5rIFRpbWVab25lI2dldERlZmF1bHQoKX0gdGltZSB6b25lLgotICAgICAqIDxwPgotICAgICAqIE5vdGU6IFRoZSBkZWZhdWx0IG1heGltYWwgZGF0ZSBpcyAxMi8zMS8yMTAwLgotICAgICAqIDxwPgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbWF4aW1hbCBzdXBwb3J0ZWQgZGF0ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBnZXRNYXhEYXRlKCkgewotICAgICAgICByZXR1cm4gbUNhbGVuZGFyVmlldy5nZXRNYXhEYXRlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbWF4aW1hbCBkYXRlIHN1cHBvcnRlZCBieSB0aGlzIHtAbGluayBEYXRlUGlja2VyfSBpbgotICAgICAqIG1pbGxpc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5NzAgMDA6MDA6MDAgaW4KLSAgICAgKiB7QGxpbmsgVGltZVpvbmUjZ2V0RGVmYXVsdCgpfSB0aW1lIHpvbmUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbWF4RGF0ZSBUaGUgbWF4aW1hbCBzdXBwb3J0ZWQgZGF0ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRNYXhEYXRlKGxvbmcgbWF4RGF0ZSkgewotICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKG1heERhdGUpOwotICAgICAgICBpZiAobVRlbXBEYXRlLmdldChDYWxlbmRhci5ZRUFSKSA9PSBtTWF4RGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikKLSAgICAgICAgICAgICAgICAmJiBtVGVtcERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSAhPSBtTWF4RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbU1heERhdGUuc2V0VGltZUluTWlsbGlzKG1heERhdGUpOwotICAgICAgICBtQ2FsZW5kYXJWaWV3LnNldE1heERhdGUobWF4RGF0ZSk7Ci0gICAgICAgIGlmIChtQ3VycmVudERhdGUuYWZ0ZXIobU1heERhdGUpKSB7Ci0gICAgICAgICAgICBtQ3VycmVudERhdGUuc2V0VGltZUluTWlsbGlzKG1NYXhEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLSAgICAgICAgICAgIHVwZGF0ZUNhbGVuZGFyVmlldygpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZVNwaW5uZXJzKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgaWYgKG1Jc0VuYWJsZWQgPT0gZW5hYmxlZCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHN1cGVyLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0gICAgICAgIG1EYXlTcGlubmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0gICAgICAgIG1Nb250aFNwaW5uZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgbVllYXJTcGlubmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0gICAgICAgIG1DYWxlbmRhclZpZXcuc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgbUlzRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gbUlzRW5hYmxlZDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgewotICAgICAgICBvblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Qb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgc3VwZXIub25Qb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7Ci0KLSAgICAgICAgZmluYWwgaW50IGZsYWdzID0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX0RBVEUgfCBEYXRlVXRpbHMuRk9STUFUX1NIT1dfWUVBUjsKLSAgICAgICAgU3RyaW5nIHNlbGVjdGVkRGF0ZVV0dGVyYW5jZSA9IERhdGVVdGlscy5mb3JtYXREYXRlVGltZShtQ29udGV4dCwKLSAgICAgICAgICAgICAgICBtQ3VycmVudERhdGUuZ2V0VGltZUluTWlsbGlzKCksIGZsYWdzKTsKLSAgICAgICAgZXZlbnQuZ2V0VGV4dCgpLmFkZChzZWxlY3RlZERhdGVVdHRlcmFuY2UpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKLSAgICAgICAgZXZlbnQuc2V0Q2xhc3NOYW1lKERhdGVQaWNrZXIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pIHsKLSAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKGluZm8pOwotICAgICAgICBpbmZvLnNldENsYXNzTmFtZShEYXRlUGlja2VyLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZChDb25maWd1cmF0aW9uIG5ld0NvbmZpZykgewotICAgICAgICBzdXBlci5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKG5ld0NvbmZpZyk7Ci0gICAgICAgIHNldEN1cnJlbnRMb2NhbGUobmV3Q29uZmlnLmxvY2FsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB3aGV0aGVyIHRoZSB7QGxpbmsgQ2FsZW5kYXJWaWV3fSBpcyBzaG93bi4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2FsZW5kYXIgdmlldyBpcyBzaG93bi4KLSAgICAgKiBAc2VlICNnZXRDYWxlbmRhclZpZXcoKQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGdldENhbGVuZGFyVmlld1Nob3duKCkgewotICAgICAgICByZXR1cm4gKG1DYWxlbmRhclZpZXcuZ2V0VmlzaWJpbGl0eSgpID09IFZpZXcuVklTSUJMRSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUge0BsaW5rIENhbGVuZGFyVmlld30uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBjYWxlbmRhciB2aWV3LgotICAgICAqIEBzZWUgI2dldENhbGVuZGFyVmlld1Nob3duKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsZW5kYXJWaWV3IGdldENhbGVuZGFyVmlldyAoKSB7Ci0gICAgICAgIHJldHVybiBtQ2FsZW5kYXJWaWV3OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgd2hldGhlciB0aGUge0BsaW5rIENhbGVuZGFyVmlld30gaXMgc2hvd24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2hvd24gVHJ1ZSBpZiB0aGUgY2FsZW5kYXIgdmlldyBpcyB0byBiZSBzaG93bi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRDYWxlbmRhclZpZXdTaG93bihib29sZWFuIHNob3duKSB7Ci0gICAgICAgIG1DYWxlbmRhclZpZXcuc2V0VmlzaWJpbGl0eShzaG93biA/IFZJU0lCTEUgOiBHT05FKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHNwaW5uZXJzIGFyZSBzaG93bi4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3Bpbm5lcnMgYXJlIHNob3duLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGdldFNwaW5uZXJzU2hvd24oKSB7Ci0gICAgICAgIHJldHVybiBtU3Bpbm5lcnMuaXNTaG93bigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgd2hldGhlciB0aGUgc3Bpbm5lcnMgYXJlIHNob3duLgotICAgICAqCi0gICAgICogQHBhcmFtIHNob3duIFRydWUgaWYgdGhlIHNwaW5uZXJzIGFyZSB0byBiZSBzaG93bi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRTcGlubmVyc1Nob3duKGJvb2xlYW4gc2hvd24pIHsKLSAgICAgICAgbVNwaW5uZXJzLnNldFZpc2liaWxpdHkoc2hvd24gPyBWSVNJQkxFIDogR09ORSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgY3VycmVudCBsb2NhbGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbG9jYWxlIFRoZSBjdXJyZW50IGxvY2FsZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0Q3VycmVudExvY2FsZShMb2NhbGUgbG9jYWxlKSB7Ci0gICAgICAgIGlmIChsb2NhbGUuZXF1YWxzKG1DdXJyZW50TG9jYWxlKSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1cnJlbnRMb2NhbGUgPSBsb2NhbGU7Ci0KLSAgICAgICAgbVRlbXBEYXRlID0gZ2V0Q2FsZW5kYXJGb3JMb2NhbGUobVRlbXBEYXRlLCBsb2NhbGUpOwotICAgICAgICBtTWluRGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1NaW5EYXRlLCBsb2NhbGUpOwotICAgICAgICBtTWF4RGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1NYXhEYXRlLCBsb2NhbGUpOwotICAgICAgICBtQ3VycmVudERhdGUgPSBnZXRDYWxlbmRhckZvckxvY2FsZShtQ3VycmVudERhdGUsIGxvY2FsZSk7Ci0KLSAgICAgICAgbU51bWJlck9mTW9udGhzID0gbVRlbXBEYXRlLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuTU9OVEgpICsgMTsKLSAgICAgICAgbVNob3J0TW9udGhzID0gbmV3IERhdGVGb3JtYXRTeW1ib2xzKCkuZ2V0U2hvcnRNb250aHMoKTsKLQotICAgICAgICBpZiAodXNpbmdOdW1lcmljTW9udGhzKCkpIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIGluIGEgbG9jYWxlIHdoZXJlIGEgZGF0ZSBzaG91bGQgZWl0aGVyIGJlIGFsbC1udW1lcmljLCBvciBhbGwtdGV4dC4KLSAgICAgICAgICAgIC8vIEFsbC10ZXh0IHdvdWxkIHJlcXVpcmUgY3VzdG9tIE51bWJlclBpY2tlciBmb3JtYXR0ZXJzIGZvciBkYXkgYW5kIHllYXIuCi0gICAgICAgICAgICBtU2hvcnRNb250aHMgPSBuZXcgU3RyaW5nW21OdW1iZXJPZk1vbnRoc107Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1OdW1iZXJPZk1vbnRoczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbVNob3J0TW9udGhzW2ldID0gU3RyaW5nLmZvcm1hdCgiJWQiLCBpICsgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUZXN0cyB3aGV0aGVyIHRoZSBjdXJyZW50IGxvY2FsZSBpcyBvbmUgd2hlcmUgdGhlcmUgYXJlIG5vIHJlYWwgbW9udGggbmFtZXMsCi0gICAgICogc3VjaCBhcyBDaGluZXNlLCBKYXBhbmVzZSwgb3IgS29yZWFuIGxvY2FsZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIHVzaW5nTnVtZXJpY01vbnRocygpIHsKLSAgICAgICAgcmV0dXJuIENoYXJhY3Rlci5pc0RpZ2l0KG1TaG9ydE1vbnRoc1tDYWxlbmRhci5KQU5VQVJZXS5jaGFyQXQoMCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgYSBjYWxlbmRhciBmb3IgbG9jYWxlIGJvb3RzdHJhcHBlZCB3aXRoIHRoZSB2YWx1ZSBvZiBhIGdpdmVuIGNhbGVuZGFyLgotICAgICAqCi0gICAgICogQHBhcmFtIG9sZENhbGVuZGFyIFRoZSBvbGQgY2FsZW5kYXIuCi0gICAgICogQHBhcmFtIGxvY2FsZSBUaGUgbG9jYWxlLgotICAgICAqLwotICAgIHByaXZhdGUgQ2FsZW5kYXIgZ2V0Q2FsZW5kYXJGb3JMb2NhbGUoQ2FsZW5kYXIgb2xkQ2FsZW5kYXIsIExvY2FsZSBsb2NhbGUpIHsKLSAgICAgICAgaWYgKG9sZENhbGVuZGFyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmluYWwgbG9uZyBjdXJyZW50VGltZU1pbGxpcyA9IG9sZENhbGVuZGFyLmdldFRpbWVJbk1pbGxpcygpOwotICAgICAgICAgICAgQ2FsZW5kYXIgbmV3Q2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOwotICAgICAgICAgICAgbmV3Q2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKGN1cnJlbnRUaW1lTWlsbGlzKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdDYWxlbmRhcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlb3JkZXJzIHRoZSBzcGlubmVycyBhY2NvcmRpbmcgdG8gdGhlIGRhdGUgZm9ybWF0IHRoYXQgaXMKLSAgICAgKiBleHBsaWNpdGx5IHNldCBieSB0aGUgdXNlciBhbmQgaWYgbm8gc3VjaCBpcyBzZXQgZmFsbCBiYWNrCi0gICAgICogdG8gdGhlIGN1cnJlbnQgbG9jYWxlJ3MgZGVmYXVsdCBmb3JtYXQuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJlb3JkZXJTcGlubmVycygpIHsKLSAgICAgICAgbVNwaW5uZXJzLnJlbW92ZUFsbFZpZXdzKCk7Ci0gICAgICAgIC8vIFdlIHVzZSBudW1lcmljIHNwaW5uZXJzIGZvciB5ZWFyIGFuZCBkYXksIGJ1dCB0ZXh0dWFsIG1vbnRocy4gQXNrIGljdTRjIHdoYXQKLSAgICAgICAgLy8gb3JkZXIgdGhlIHVzZXIncyBsb2NhbGUgdXNlcyBmb3IgdGhhdCBjb21iaW5hdGlvbi4gaHR0cDovL2IvNzIwNzEwMy4KLSAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSBJQ1UuZ2V0QmVzdERhdGVUaW1lUGF0dGVybigieXl5eU1NTWRkIiwgTG9jYWxlLmdldERlZmF1bHQoKS50b1N0cmluZygpKTsKLSAgICAgICAgY2hhcltdIG9yZGVyID0gSUNVLmdldERhdGVGb3JtYXRPcmRlcihwYXR0ZXJuKTsKLSAgICAgICAgZmluYWwgaW50IHNwaW5uZXJDb3VudCA9IG9yZGVyLmxlbmd0aDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcGlubmVyQ291bnQ7IGkrKykgewotICAgICAgICAgICAgc3dpdGNoIChvcmRlcltpXSkgewotICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgICAgICAgICBtU3Bpbm5lcnMuYWRkVmlldyhtRGF5U3Bpbm5lcik7Ci0gICAgICAgICAgICAgICAgICAgIHNldEltZU9wdGlvbnMobURheVNwaW5uZXIsIHNwaW5uZXJDb3VudCwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJ00nOgotICAgICAgICAgICAgICAgICAgICBtU3Bpbm5lcnMuYWRkVmlldyhtTW9udGhTcGlubmVyKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0SW1lT3B0aW9ucyhtTW9udGhTcGlubmVyLCBzcGlubmVyQ291bnQsIGkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICd5JzoKLSAgICAgICAgICAgICAgICAgICAgbVNwaW5uZXJzLmFkZFZpZXcobVllYXJTcGlubmVyKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0SW1lT3B0aW9ucyhtWWVhclNwaW5uZXIsIHNwaW5uZXJDb3VudCwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oQXJyYXlzLnRvU3RyaW5nKG9yZGVyKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50IGRhdGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0geWVhciBUaGUgeWVhci4KLSAgICAgKiBAcGFyYW0gbW9udGggVGhlIG1vbnRoIHdoaWNoIGlzIDxzdHJvbmc+c3RhcnRpbmcgZnJvbSB6ZXJvPC9zdHJvbmc+LgotICAgICAqIEBwYXJhbSBkYXlPZk1vbnRoIFRoZSBkYXkgb2YgdGhlIG1vbnRoLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZURhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheU9mTW9udGgpIHsKLSAgICAgICAgaWYgKCFpc05ld0RhdGUoeWVhciwgbW9udGgsIGRheU9mTW9udGgpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2V0RGF0ZSh5ZWFyLCBtb250aCwgZGF5T2ZNb250aCk7Ci0gICAgICAgIHVwZGF0ZVNwaW5uZXJzKCk7Ci0gICAgICAgIHVwZGF0ZUNhbGVuZGFyVmlldygpOwotICAgICAgICBub3RpZnlEYXRlQ2hhbmdlZCgpOwotICAgIH0KLQotICAgIC8vIE92ZXJyaWRlIHNvIHdlIGFyZSBpbiBjb21wbGV0ZSBjb250cm9sIG9mIHNhdmUgLyByZXN0b3JlIGZvciB0aGlzIHdpZGdldC4KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBkaXNwYXRjaFJlc3RvcmVJbnN0YW5jZVN0YXRlKFNwYXJzZUFycmF5PFBhcmNlbGFibGU+IGNvbnRhaW5lcikgewotICAgICAgICBkaXNwYXRjaFRoYXdTZWxmT25seShjb250YWluZXIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBQYXJjZWxhYmxlIG9uU2F2ZUluc3RhbmNlU3RhdGUoKSB7Ci0gICAgICAgIFBhcmNlbGFibGUgc3VwZXJTdGF0ZSA9IHN1cGVyLm9uU2F2ZUluc3RhbmNlU3RhdGUoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBTYXZlZFN0YXRlKHN1cGVyU3RhdGUsIGdldFllYXIoKSwgZ2V0TW9udGgoKSwgZ2V0RGF5T2ZNb250aCgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKFBhcmNlbGFibGUgc3RhdGUpIHsKLSAgICAgICAgU2F2ZWRTdGF0ZSBzcyA9IChTYXZlZFN0YXRlKSBzdGF0ZTsKLSAgICAgICAgc3VwZXIub25SZXN0b3JlSW5zdGFuY2VTdGF0ZShzcy5nZXRTdXBlclN0YXRlKCkpOwotICAgICAgICBzZXREYXRlKHNzLm1ZZWFyLCBzcy5tTW9udGgsIHNzLm1EYXkpOwotICAgICAgICB1cGRhdGVTcGlubmVycygpOwotICAgICAgICB1cGRhdGVDYWxlbmRhclZpZXcoKTsKKyAgICAgICAgbURlbGVnYXRlID0gbmV3IExlZ2FjeURhdGVQaWNrZXJEZWxlZ2F0ZSh0aGlzLCBjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgfQogCiAgICAgLyoqCkBAIC01OTksMTkxICsxMjMsODgxIEBACiAgICAgICogICAgICAgICAgICB1c2VyLCBjYW4gYmUgbnVsbC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbml0KGludCB5ZWFyLCBpbnQgbW9udGhPZlllYXIsIGludCBkYXlPZk1vbnRoLAotICAgICAgICAgICAgT25EYXRlQ2hhbmdlZExpc3RlbmVyIG9uRGF0ZUNoYW5nZWRMaXN0ZW5lcikgewotICAgICAgICBzZXREYXRlKHllYXIsIG1vbnRoT2ZZZWFyLCBkYXlPZk1vbnRoKTsKLSAgICAgICAgdXBkYXRlU3Bpbm5lcnMoKTsKLSAgICAgICAgdXBkYXRlQ2FsZW5kYXJWaWV3KCk7Ci0gICAgICAgIG1PbkRhdGVDaGFuZ2VkTGlzdGVuZXIgPSBvbkRhdGVDaGFuZ2VkTGlzdGVuZXI7CisgICAgICAgICAgICAgICAgICAgICBPbkRhdGVDaGFuZ2VkTGlzdGVuZXIgb25EYXRlQ2hhbmdlZExpc3RlbmVyKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5pbml0KHllYXIsIG1vbnRoT2ZZZWFyLCBkYXlPZk1vbnRoLCBvbkRhdGVDaGFuZ2VkTGlzdGVuZXIpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIFBhcnNlcyB0aGUgZ2l2ZW4gPGNvZGU+ZGF0ZTwvY29kZT4gYW5kIGluIGNhc2Ugb2Ygc3VjY2VzcyBzZXRzIHRoZSByZXN1bHQKLSAgICAgKiB0byB0aGUgPGNvZGU+b3V0RGF0ZTwvY29kZT4uCisgICAgICogVXBkYXRlcyB0aGUgY3VycmVudCBkYXRlLgogICAgICAqCi0gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBkYXRlIHdhcyBwYXJzZWQuCisgICAgICogQHBhcmFtIHllYXIgVGhlIHllYXIuCisgICAgICogQHBhcmFtIG1vbnRoIFRoZSBtb250aCB3aGljaCBpcyA8c3Ryb25nPnN0YXJ0aW5nIGZyb20gemVybzwvc3Ryb25nPi4KKyAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCBUaGUgZGF5IG9mIHRoZSBtb250aC4KICAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gcGFyc2VEYXRlKFN0cmluZyBkYXRlLCBDYWxlbmRhciBvdXREYXRlKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvdXREYXRlLnNldFRpbWUobURhdGVGb3JtYXQucGFyc2UoZGF0ZSkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy53KExPR19UQUcsICJEYXRlOiAiICsgZGF0ZSArICIgbm90IGluIGZvcm1hdDogIiArIERBVEVfRk9STUFUKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBpc05ld0RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheU9mTW9udGgpIHsKLSAgICAgICAgcmV0dXJuIChtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLllFQVIpICE9IHllYXIKLSAgICAgICAgICAgICAgICB8fCBtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSAhPSBkYXlPZk1vbnRoCi0gICAgICAgICAgICAgICAgfHwgbUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpICE9IG1vbnRoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0RGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCkgewotICAgICAgICBtQ3VycmVudERhdGUuc2V0KHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7Ci0gICAgICAgICAgICBtQ3VycmVudERhdGUuc2V0VGltZUluTWlsbGlzKG1NaW5EYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERhdGUuYWZ0ZXIobU1heERhdGUpKSB7Ci0gICAgICAgICAgICBtQ3VycmVudERhdGUuc2V0VGltZUluTWlsbGlzKG1NYXhEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVTcGlubmVycygpIHsKLSAgICAgICAgLy8gc2V0IHRoZSBzcGlubmVyIHJhbmdlcyByZXNwZWN0aW5nIHRoZSBtaW4gYW5kIG1heCBkYXRlcwotICAgICAgICBpZiAobUN1cnJlbnREYXRlLmVxdWFscyhtTWluRGF0ZSkpIHsKLSAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldE1pblZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7Ci0gICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRNYXhWYWx1ZShtQ3VycmVudERhdGUuZ2V0QWN0dWFsTWF4aW11bShDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKLSAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldFdyYXBTZWxlY3RvcldoZWVsKGZhbHNlKTsKLSAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0RGlzcGxheWVkVmFsdWVzKG51bGwpOwotICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRNaW5WYWx1ZShtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSk7Ci0gICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1heFZhbHVlKG1DdXJyZW50RGF0ZS5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLk1PTlRIKSk7Ci0gICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldFdyYXBTZWxlY3RvcldoZWVsKGZhbHNlKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERhdGUuZXF1YWxzKG1NYXhEYXRlKSkgewotICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0TWluVmFsdWUobUN1cnJlbnREYXRlLmdldEFjdHVhbE1pbmltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7Ci0gICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRNYXhWYWx1ZShtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkpOwotICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0V3JhcFNlbGVjdG9yV2hlZWwoZmFsc2UpOwotICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXREaXNwbGF5ZWRWYWx1ZXMobnVsbCk7Ci0gICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1pblZhbHVlKG1DdXJyZW50RGF0ZS5nZXRBY3R1YWxNaW5pbXVtKENhbGVuZGFyLk1PTlRIKSk7Ci0gICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1heFZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpKTsKLSAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0V3JhcFNlbGVjdG9yV2hlZWwoZmFsc2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0TWluVmFsdWUoMSk7Ci0gICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRNYXhWYWx1ZShtQ3VycmVudERhdGUuZ2V0QWN0dWFsTWF4aW11bShDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKLSAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldFdyYXBTZWxlY3RvcldoZWVsKHRydWUpOwotICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXREaXNwbGF5ZWRWYWx1ZXMobnVsbCk7Ci0gICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1pblZhbHVlKDApOwotICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRNYXhWYWx1ZSgxMSk7Ci0gICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldFdyYXBTZWxlY3RvcldoZWVsKHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBtb250aCBuYW1lcyBhcmUgYSB6ZXJvIGJhc2VkIGFycmF5Ci0gICAgICAgIC8vIHdpdGggdGhlIG1vbnRocyBpbiB0aGUgbW9udGggc3Bpbm5lcgotICAgICAgICBTdHJpbmdbXSBkaXNwbGF5ZWRWYWx1ZXMgPSBBcnJheXMuY29weU9mUmFuZ2UobVNob3J0TW9udGhzLAotICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuZ2V0TWluVmFsdWUoKSwgbU1vbnRoU3Bpbm5lci5nZXRNYXhWYWx1ZSgpICsgMSk7Ci0gICAgICAgIG1Nb250aFNwaW5uZXIuc2V0RGlzcGxheWVkVmFsdWVzKGRpc3BsYXllZFZhbHVlcyk7Ci0KLSAgICAgICAgLy8geWVhciBzcGlubmVyIHJhbmdlIGRvZXMgbm90IGNoYW5nZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkYXRlCi0gICAgICAgIG1ZZWFyU3Bpbm5lci5zZXRNaW5WYWx1ZShtTWluRGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikpOwotICAgICAgICBtWWVhclNwaW5uZXIuc2V0TWF4VmFsdWUobU1heERhdGUuZ2V0KENhbGVuZGFyLllFQVIpKTsKLSAgICAgICAgbVllYXJTcGlubmVyLnNldFdyYXBTZWxlY3RvcldoZWVsKGZhbHNlKTsKLQotICAgICAgICAvLyBzZXQgdGhlIHNwaW5uZXIgdmFsdWVzCi0gICAgICAgIG1ZZWFyU3Bpbm5lci5zZXRWYWx1ZShtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLllFQVIpKTsKLSAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRWYWx1ZShtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSk7Ci0gICAgICAgIG1EYXlTcGlubmVyLnNldFZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7Ci0KLSAgICAgICAgaWYgKHVzaW5nTnVtZXJpY01vbnRocygpKSB7Ci0gICAgICAgICAgICBtTW9udGhTcGlubmVySW5wdXQuc2V0UmF3SW5wdXRUeXBlKElucHV0VHlwZS5UWVBFX0NMQVNTX05VTUJFUik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVcGRhdGVzIHRoZSBjYWxlbmRhciB2aWV3IHdpdGggdGhlIGN1cnJlbnQgZGF0ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlQ2FsZW5kYXJWaWV3KCkgewotICAgICAgICAgbUNhbGVuZGFyVmlldy5zZXREYXRlKG1DdXJyZW50RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSwgZmFsc2UsIGZhbHNlKTsKKyAgICBwdWJsaWMgdm9pZCB1cGRhdGVEYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoKSB7CisgICAgICAgIG1EZWxlZ2F0ZS51cGRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBAcmV0dXJuIFRoZSBzZWxlY3RlZCB5ZWFyLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0WWVhcigpIHsKLSAgICAgICAgcmV0dXJuIG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUik7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0WWVhcigpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEByZXR1cm4gVGhlIHNlbGVjdGVkIG1vbnRoLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TW9udGgoKSB7Ci0gICAgICAgIHJldHVybiBtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKTsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRNb250aCgpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEByZXR1cm4gVGhlIHNlbGVjdGVkIGRheSBvZiBtb250aC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldERheU9mTW9udGgoKSB7Ci0gICAgICAgIHJldHVybiBtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0RGF5T2ZNb250aCgpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIE5vdGlmaWVzIHRoZSBsaXN0ZW5lciwgaWYgc3VjaCwgZm9yIGEgY2hhbmdlIGluIHRoZSBzZWxlY3RlZCBkYXRlLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBub3RpZnlEYXRlQ2hhbmdlZCgpIHsKLSAgICAgICAgc2VuZEFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX1NFTEVDVEVEKTsKLSAgICAgICAgaWYgKG1PbkRhdGVDaGFuZ2VkTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbU9uRGF0ZUNoYW5nZWRMaXN0ZW5lci5vbkRhdGVDaGFuZ2VkKHRoaXMsIGdldFllYXIoKSwgZ2V0TW9udGgoKSwgZ2V0RGF5T2ZNb250aCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIElNRSBvcHRpb25zIGZvciBhIHNwaW5uZXIgYmFzZWQgb24gaXRzIG9yZGVyaW5nLgorICAgICAqIEdldHMgdGhlIG1pbmltYWwgZGF0ZSBzdXBwb3J0ZWQgYnkgdGhpcyB7QGxpbmsgRGF0ZVBpY2tlcn0gaW4KKyAgICAgKiBtaWxsaXNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwIDAwOjAwOjAwIGluCisgICAgICoge0BsaW5rIFRpbWVab25lI2dldERlZmF1bHQoKX0gdGltZSB6b25lLgorICAgICAqIDxwPgorICAgICAqIE5vdGU6IFRoZSBkZWZhdWx0IG1pbmltYWwgZGF0ZSBpcyAwMS8wMS8xOTAwLgorICAgICAqIDxwPgogICAgICAqCi0gICAgICogQHBhcmFtIHNwaW5uZXIgVGhlIHNwaW5uZXIuCi0gICAgICogQHBhcmFtIHNwaW5uZXJDb3VudCBUaGUgdG90YWwgc3Bpbm5lciBjb3VudC4KLSAgICAgKiBAcGFyYW0gc3Bpbm5lckluZGV4IFRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gc3Bpbm5lci4KKyAgICAgKiBAcmV0dXJuIFRoZSBtaW5pbWFsIHN1cHBvcnRlZCBkYXRlLgogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXRJbWVPcHRpb25zKE51bWJlclBpY2tlciBzcGlubmVyLCBpbnQgc3Bpbm5lckNvdW50LCBpbnQgc3Bpbm5lckluZGV4KSB7Ci0gICAgICAgIGZpbmFsIGludCBpbWVPcHRpb25zOwotICAgICAgICBpZiAoc3Bpbm5lckluZGV4IDwgc3Bpbm5lckNvdW50IC0gMSkgewotICAgICAgICAgICAgaW1lT3B0aW9ucyA9IEVkaXRvckluZm8uSU1FX0FDVElPTl9ORVhUOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW1lT3B0aW9ucyA9IEVkaXRvckluZm8uSU1FX0FDVElPTl9ET05FOworICAgIHB1YmxpYyBsb25nIGdldE1pbkRhdGUoKSB7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0TWluRGF0ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIG1pbmltYWwgZGF0ZSBzdXBwb3J0ZWQgYnkgdGhpcyB7QGxpbmsgTnVtYmVyUGlja2VyfSBpbgorICAgICAqIG1pbGxpc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5NzAgMDA6MDA6MDAgaW4KKyAgICAgKiB7QGxpbmsgVGltZVpvbmUjZ2V0RGVmYXVsdCgpfSB0aW1lIHpvbmUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWluRGF0ZSBUaGUgbWluaW1hbCBzdXBwb3J0ZWQgZGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNaW5EYXRlKGxvbmcgbWluRGF0ZSkgeworICAgICAgICBtRGVsZWdhdGUuc2V0TWluRGF0ZShtaW5EYXRlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtYXhpbWFsIGRhdGUgc3VwcG9ydGVkIGJ5IHRoaXMge0BsaW5rIERhdGVQaWNrZXJ9IGluCisgICAgICogbWlsbGlzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTk3MCAwMDowMDowMCBpbgorICAgICAqIHtAbGluayBUaW1lWm9uZSNnZXREZWZhdWx0KCl9IHRpbWUgem9uZS4KKyAgICAgKiA8cD4KKyAgICAgKiBOb3RlOiBUaGUgZGVmYXVsdCBtYXhpbWFsIGRhdGUgaXMgMTIvMzEvMjEwMC4KKyAgICAgKiA8cD4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIG1heGltYWwgc3VwcG9ydGVkIGRhdGUuCisgICAgICovCisgICAgcHVibGljIGxvbmcgZ2V0TWF4RGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRNYXhEYXRlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgbWF4aW1hbCBkYXRlIHN1cHBvcnRlZCBieSB0aGlzIHtAbGluayBEYXRlUGlja2VyfSBpbgorICAgICAqIG1pbGxpc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5NzAgMDA6MDA6MDAgaW4KKyAgICAgKiB7QGxpbmsgVGltZVpvbmUjZ2V0RGVmYXVsdCgpfSB0aW1lIHpvbmUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWF4RGF0ZSBUaGUgbWF4aW1hbCBzdXBwb3J0ZWQgZGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNYXhEYXRlKGxvbmcgbWF4RGF0ZSkgeworICAgICAgICBtRGVsZWdhdGUuc2V0TWF4RGF0ZShtYXhEYXRlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBpZiAobURlbGVnYXRlLmlzRW5hYmxlZCgpID09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBUZXh0VmlldyBpbnB1dCA9IChUZXh0Vmlldykgc3Bpbm5lci5maW5kVmlld0J5SWQoUi5pZC5udW1iZXJwaWNrZXJfaW5wdXQpOwotICAgICAgICBpbnB1dC5zZXRJbWVPcHRpb25zKGltZU9wdGlvbnMpOworICAgICAgICBzdXBlci5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICBtRGVsZWdhdGUuc2V0RW5hYmxlZChlbmFibGVkKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgc2V0Q29udGVudERlc2NyaXB0aW9ucygpIHsKLSAgICAgICAgLy8gRGF5Ci0gICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtRGF5U3Bpbm5lciwgUi5pZC5pbmNyZW1lbnQsCi0gICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfaW5jcmVtZW50X2RheV9idXR0b24pOwotICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obURheVNwaW5uZXIsIFIuaWQuZGVjcmVtZW50LAotICAgICAgICAgICAgICAgIFIuc3RyaW5nLmRhdGVfcGlja2VyX2RlY3JlbWVudF9kYXlfYnV0dG9uKTsKLSAgICAgICAgLy8gTW9udGgKLSAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1Nb250aFNwaW5uZXIsIFIuaWQuaW5jcmVtZW50LAotICAgICAgICAgICAgICAgIFIuc3RyaW5nLmRhdGVfcGlja2VyX2luY3JlbWVudF9tb250aF9idXR0b24pOwotICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obU1vbnRoU3Bpbm5lciwgUi5pZC5kZWNyZW1lbnQsCi0gICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfZGVjcmVtZW50X21vbnRoX2J1dHRvbik7Ci0gICAgICAgIC8vIFllYXIKLSAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1ZZWFyU3Bpbm5lciwgUi5pZC5pbmNyZW1lbnQsCi0gICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfaW5jcmVtZW50X3llYXJfYnV0dG9uKTsKLSAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1ZZWFyU3Bpbm5lciwgUi5pZC5kZWNyZW1lbnQsCi0gICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfZGVjcmVtZW50X3llYXJfYnV0dG9uKTsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuaXNFbmFibGVkKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihWaWV3IHJvb3QsIGludCB2aWV3SWQsIGludCBjb250RGVzY1Jlc0lkKSB7Ci0gICAgICAgIFZpZXcgdGFyZ2V0ID0gcm9vdC5maW5kVmlld0J5SWQodmlld0lkKTsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0YXJnZXQuc2V0Q29udGVudERlc2NyaXB0aW9uKG1Db250ZXh0LmdldFN0cmluZyhjb250RGVzY1Jlc0lkKSk7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hQb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5kaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICBzdXBlci5vblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKKyAgICAgICAgbURlbGVnYXRlLm9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKKyAgICAgICAgbURlbGVnYXRlLm9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBpbmZvKSB7CisgICAgICAgIHN1cGVyLm9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhpbmZvKTsKKyAgICAgICAgbURlbGVnYXRlLm9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhpbmZvKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7CisgICAgICAgIHN1cGVyLm9uQ29uZmlndXJhdGlvbkNoYW5nZWQobmV3Q29uZmlnKTsKKyAgICAgICAgbURlbGVnYXRlLm9uQ29uZmlndXJhdGlvbkNoYW5nZWQobmV3Q29uZmlnKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHtAbGluayBDYWxlbmRhclZpZXd9IGlzIHNob3duLgorICAgICAqCisgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBjYWxlbmRhciB2aWV3IGlzIHNob3duLgorICAgICAqIEBzZWUgI2dldENhbGVuZGFyVmlldygpCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZ2V0Q2FsZW5kYXJWaWV3U2hvd24oKSB7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0Q2FsZW5kYXJWaWV3U2hvd24oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB7QGxpbmsgQ2FsZW5kYXJWaWV3fS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGNhbGVuZGFyIHZpZXcuCisgICAgICogQHNlZSAjZ2V0Q2FsZW5kYXJWaWV3U2hvd24oKQorICAgICAqLworICAgIHB1YmxpYyBDYWxlbmRhclZpZXcgZ2V0Q2FsZW5kYXJWaWV3ICgpIHsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRDYWxlbmRhclZpZXcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHtAbGluayBDYWxlbmRhclZpZXd9IGlzIHNob3duLgorICAgICAqCisgICAgICogQHBhcmFtIHNob3duIFRydWUgaWYgdGhlIGNhbGVuZGFyIHZpZXcgaXMgdG8gYmUgc2hvd24uCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q2FsZW5kYXJWaWV3U2hvd24oYm9vbGVhbiBzaG93bikgeworICAgICAgICBtRGVsZWdhdGUuc2V0Q2FsZW5kYXJWaWV3U2hvd24oc2hvd24pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgd2hldGhlciB0aGUgc3Bpbm5lcnMgYXJlIHNob3duLgorICAgICAqCisgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzcGlubmVycyBhcmUgc2hvd24uCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZ2V0U3Bpbm5lcnNTaG93bigpIHsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRTcGlubmVyc1Nob3duKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB3aGV0aGVyIHRoZSBzcGlubmVycyBhcmUgc2hvd24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gc2hvd24gVHJ1ZSBpZiB0aGUgc3Bpbm5lcnMgYXJlIHRvIGJlIHNob3duLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFNwaW5uZXJzU2hvd24oYm9vbGVhbiBzaG93bikgeworICAgICAgICBtRGVsZWdhdGUuc2V0U3Bpbm5lcnNTaG93bihzaG93bik7CisgICAgfQorCisgICAgLy8gT3ZlcnJpZGUgc28gd2UgYXJlIGluIGNvbXBsZXRlIGNvbnRyb2wgb2Ygc2F2ZSAvIHJlc3RvcmUgZm9yIHRoaXMgd2lkZ2V0LgorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGRpc3BhdGNoUmVzdG9yZUluc3RhbmNlU3RhdGUoU3BhcnNlQXJyYXk8UGFyY2VsYWJsZT4gY29udGFpbmVyKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5kaXNwYXRjaFJlc3RvcmVJbnN0YW5jZVN0YXRlKGNvbnRhaW5lcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIFBhcmNlbGFibGUgb25TYXZlSW5zdGFuY2VTdGF0ZSgpIHsKKyAgICAgICAgUGFyY2VsYWJsZSBzdXBlclN0YXRlID0gc3VwZXIub25TYXZlSW5zdGFuY2VTdGF0ZSgpOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLm9uU2F2ZUluc3RhbmNlU3RhdGUoc3VwZXJTdGF0ZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25SZXN0b3JlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN0YXRlKSB7CisgICAgICAgIFNhdmVkU3RhdGUgc3MgPSAoU2F2ZWRTdGF0ZSkgc3RhdGU7CisgICAgICAgIHN1cGVyLm9uUmVzdG9yZUluc3RhbmNlU3RhdGUoc3MuZ2V0U3VwZXJTdGF0ZSgpKTsKKyAgICAgICAgbURlbGVnYXRlLm9uUmVzdG9yZUluc3RhbmNlU3RhdGUoc3MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEEgZGVsZWdhdGUgaW50ZXJmYWNlIHRoYXQgZGVmaW5lZCB0aGUgcHVibGljIEFQSSBvZiB0aGUgRGF0ZVBpY2tlci4gQWxsb3dzIGRpZmZlcmVudAorICAgICAqIERhdGVQaWNrZXIgaW1wbGVtZW50YXRpb25zLiBUaGlzIHdvdWxkIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgdGhlIERhdGVQaWNrZXIgZGVsZWdhdGVzCisgICAgICogZm9yIHRoZSByZWFsIGJlaGF2aW9yLgorICAgICAqLworICAgIGludGVyZmFjZSBEYXRlUGlja2VyRGVsZWdhdGUgeworICAgICAgICB2b2lkIGluaXQoaW50IHllYXIsIGludCBtb250aE9mWWVhciwgaW50IGRheU9mTW9udGgsCisgICAgICAgICAgICAgICAgICBPbkRhdGVDaGFuZ2VkTGlzdGVuZXIgb25EYXRlQ2hhbmdlZExpc3RlbmVyKTsKKworICAgICAgICB2b2lkIHVwZGF0ZURhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheU9mTW9udGgpOworCisgICAgICAgIGludCBnZXRZZWFyKCk7CisgICAgICAgIGludCBnZXRNb250aCgpOworICAgICAgICBpbnQgZ2V0RGF5T2ZNb250aCgpOworCisgICAgICAgIHZvaWQgc2V0TWluRGF0ZShsb25nIG1pbkRhdGUpOworICAgICAgICBsb25nIGdldE1pbkRhdGUoKTsKKworICAgICAgICB2b2lkIHNldE1heERhdGUobG9uZyBtYXhEYXRlKTsKKyAgICAgICAgbG9uZyBnZXRNYXhEYXRlKCk7CisKKyAgICAgICAgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7CisgICAgICAgIGJvb2xlYW4gaXNFbmFibGVkKCk7CisKKyAgICAgICAgQ2FsZW5kYXJWaWV3IGdldENhbGVuZGFyVmlldyAoKTsKKworICAgICAgICB2b2lkIHNldENhbGVuZGFyVmlld1Nob3duKGJvb2xlYW4gc2hvd24pOworICAgICAgICBib29sZWFuIGdldENhbGVuZGFyVmlld1Nob3duKCk7CisKKyAgICAgICAgdm9pZCBzZXRTcGlubmVyc1Nob3duKGJvb2xlYW4gc2hvd24pOworICAgICAgICBib29sZWFuIGdldFNwaW5uZXJzU2hvd24oKTsKKworICAgICAgICB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQoQ29uZmlndXJhdGlvbiBuZXdDb25maWcpOworCisgICAgICAgIHZvaWQgZGlzcGF0Y2hSZXN0b3JlSW5zdGFuY2VTdGF0ZShTcGFyc2VBcnJheTxQYXJjZWxhYmxlPiBjb250YWluZXIpOworICAgICAgICBQYXJjZWxhYmxlIG9uU2F2ZUluc3RhbmNlU3RhdGUoUGFyY2VsYWJsZSBzdXBlclN0YXRlKTsKKyAgICAgICAgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKFBhcmNlbGFibGUgc3RhdGUpOworCisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hQb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpOworICAgICAgICB2b2lkIG9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KTsKKyAgICAgICAgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KTsKKyAgICAgICAgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFuIGFic3RyYWN0IGNsYXNzIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGEgc3RhcnQgZm9yIERhdGVQaWNrZXIgaW1wbGVtZW50YXRpb25zCisgICAgICovCisgICAgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIEFic3RyYWN0VGltZVBpY2tlckRlbGVnYXRlIGltcGxlbWVudHMgRGF0ZVBpY2tlckRlbGVnYXRlIHsKKyAgICAgICAgLy8gVGhlIGRlbGVnYXRvcgorICAgICAgICBwcm90ZWN0ZWQgRGF0ZVBpY2tlciBtRGVsZWdhdG9yOworCisgICAgICAgIC8vIFRoZSBjb250ZXh0CisgICAgICAgIHByb3RlY3RlZCBDb250ZXh0IG1Db250ZXh0OworCisgICAgICAgIC8vIFRoZSBjdXJyZW50IGxvY2FsZQorICAgICAgICBwcm90ZWN0ZWQgTG9jYWxlIG1DdXJyZW50TG9jYWxlOworCisgICAgICAgIC8vIENhbGxiYWNrcworICAgICAgICBwcm90ZWN0ZWQgIE9uRGF0ZUNoYW5nZWRMaXN0ZW5lciBtT25EYXRlQ2hhbmdlZExpc3RlbmVyOworCisgICAgICAgIHB1YmxpYyBBYnN0cmFjdFRpbWVQaWNrZXJEZWxlZ2F0ZShEYXRlUGlja2VyIGRlbGVnYXRvciwgQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgICAgICBtRGVsZWdhdG9yID0gZGVsZWdhdG9yOworICAgICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworCisgICAgICAgICAgICAvLyBpbml0aWFsaXphdGlvbiBiYXNlZCBvbiBsb2NhbGUKKyAgICAgICAgICAgIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBzZXRDdXJyZW50TG9jYWxlKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgICAgIGlmIChsb2NhbGUuZXF1YWxzKG1DdXJyZW50TG9jYWxlKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1DdXJyZW50TG9jYWxlID0gbG9jYWxlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUlucHV0U3RhdGUoKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHZhbHVlIGFuZCB0aGUgSU1FIGlzIGFjdGl2ZQotICAgICAgICAvLyBmb3Igb25lIG9mIHRoZSBpbnB1dHMgaWYgdGhpcyB3aWRnZXQsIHRoZSBJTUUgaXMgY2xvc2VkLiBJZiB0aGUgdXNlcgotICAgICAgICAvLyBjaGFuZ2VkIHRoZSB2YWx1ZSB2aWEgdGhlIElNRSBhbmQgdGhlcmUgaXMgYSBuZXh0IGlucHV0IHRoZSBJTUUgd2lsbAotICAgICAgICAvLyBiZSBzaG93biwgb3RoZXJ3aXNlIHRoZSB1c2VyIGNob3NlIGFub3RoZXIgbWVhbnMgb2YgY2hhbmdpbmcgdGhlCi0gICAgICAgIC8vIHZhbHVlIGFuZCBoYXZpbmcgdGhlIElNRSB1cCBtYWtlcyBubyBzZW5zZS4KLSAgICAgICAgSW5wdXRNZXRob2RNYW5hZ2VyIGlucHV0TWV0aG9kTWFuYWdlciA9IElucHV0TWV0aG9kTWFuYWdlci5wZWVrSW5zdGFuY2UoKTsKLSAgICAgICAgaWYgKGlucHV0TWV0aG9kTWFuYWdlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoaW5wdXRNZXRob2RNYW5hZ2VyLmlzQWN0aXZlKG1ZZWFyU3Bpbm5lcklucHV0KSkgewotICAgICAgICAgICAgICAgIG1ZZWFyU3Bpbm5lcklucHV0LmNsZWFyRm9jdXMoKTsKLSAgICAgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXIuaGlkZVNvZnRJbnB1dEZyb21XaW5kb3coZ2V0V2luZG93VG9rZW4oKSwgMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0TWV0aG9kTWFuYWdlci5pc0FjdGl2ZShtTW9udGhTcGlubmVySW5wdXQpKSB7Ci0gICAgICAgICAgICAgICAgbU1vbnRoU3Bpbm5lcklucHV0LmNsZWFyRm9jdXMoKTsKLSAgICAgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXIuaGlkZVNvZnRJbnB1dEZyb21XaW5kb3coZ2V0V2luZG93VG9rZW4oKSwgMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0TWV0aG9kTWFuYWdlci5pc0FjdGl2ZShtRGF5U3Bpbm5lcklucHV0KSkgewotICAgICAgICAgICAgICAgIG1EYXlTcGlubmVySW5wdXQuY2xlYXJGb2N1cygpOwotICAgICAgICAgICAgICAgIGlucHV0TWV0aG9kTWFuYWdlci5oaWRlU29mdElucHV0RnJvbVdpbmRvdyhnZXRXaW5kb3dUb2tlbigpLCAwKTsKKyAgICAvKioKKyAgICAgKiBBIGRlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgYmFzaWMgRGF0ZVBpY2tlcgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIExlZ2FjeURhdGVQaWNrZXJEZWxlZ2F0ZSBleHRlbmRzIEFic3RyYWN0VGltZVBpY2tlckRlbGVnYXRlIHsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFURV9GT1JNQVQgPSAiTU0vZGQveXl5eSI7CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfU1RBUlRfWUVBUiA9IDE5MDA7CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfRU5EX1lFQVIgPSAyMTAwOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9DQUxFTkRBUl9WSUVXX1NIT1dOID0gdHJ1ZTsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfU1BJTk5FUlNfU0hPV04gPSB0cnVlOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9FTkFCTEVEX1NUQVRFID0gdHJ1ZTsKKworICAgICAgICBwcml2YXRlIGZpbmFsIExpbmVhckxheW91dCBtU3Bpbm5lcnM7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBOdW1iZXJQaWNrZXIgbURheVNwaW5uZXI7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBOdW1iZXJQaWNrZXIgbU1vbnRoU3Bpbm5lcjsKKworICAgICAgICBwcml2YXRlIGZpbmFsIE51bWJlclBpY2tlciBtWWVhclNwaW5uZXI7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBFZGl0VGV4dCBtRGF5U3Bpbm5lcklucHV0OworCisgICAgICAgIHByaXZhdGUgZmluYWwgRWRpdFRleHQgbU1vbnRoU3Bpbm5lcklucHV0OworCisgICAgICAgIHByaXZhdGUgZmluYWwgRWRpdFRleHQgbVllYXJTcGlubmVySW5wdXQ7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBDYWxlbmRhclZpZXcgbUNhbGVuZGFyVmlldzsKKworICAgICAgICBwcml2YXRlIFN0cmluZ1tdIG1TaG9ydE1vbnRoczsKKworICAgICAgICBwcml2YXRlIGZpbmFsIGphdmEudGV4dC5EYXRlRm9ybWF0IG1EYXRlRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoREFURV9GT1JNQVQpOworCisgICAgICAgIHByaXZhdGUgaW50IG1OdW1iZXJPZk1vbnRoczsKKworICAgICAgICBwcml2YXRlIENhbGVuZGFyIG1UZW1wRGF0ZTsKKworICAgICAgICBwcml2YXRlIENhbGVuZGFyIG1NaW5EYXRlOworCisgICAgICAgIHByaXZhdGUgQ2FsZW5kYXIgbU1heERhdGU7CisKKyAgICAgICAgcHJpdmF0ZSBDYWxlbmRhciBtQ3VycmVudERhdGU7CisKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc0VuYWJsZWQgPSBERUZBVUxUX0VOQUJMRURfU1RBVEU7CisKKyAgICAgICAgTGVnYWN5RGF0ZVBpY2tlckRlbGVnYXRlKERhdGVQaWNrZXIgZGVsZWdhdG9yLCBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywKKyAgICAgICAgICAgICAgICBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgICAgIHN1cGVyKGRlbGVnYXRvciwgY29udGV4dCk7CisKKyAgICAgICAgICAgIG1EZWxlZ2F0b3IgPSBkZWxlZ2F0b3I7CisgICAgICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisKKyAgICAgICAgICAgIC8vIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGxvY2FsZQorICAgICAgICAgICAgc2V0Q3VycmVudExvY2FsZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKworICAgICAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhdHRyaWJ1dGVzQXJyYXkgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkRhdGVQaWNrZXIsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworICAgICAgICAgICAgYm9vbGVhbiBzcGlubmVyc1Nob3duID0gYXR0cmlidXRlc0FycmF5LmdldEJvb2xlYW4oUi5zdHlsZWFibGUuRGF0ZVBpY2tlcl9zcGlubmVyc1Nob3duLAorICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1NQSU5ORVJTX1NIT1dOKTsKKyAgICAgICAgICAgIGJvb2xlYW4gY2FsZW5kYXJWaWV3U2hvd24gPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Qm9vbGVhbigKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuRGF0ZVBpY2tlcl9jYWxlbmRhclZpZXdTaG93biwgREVGQVVMVF9DQUxFTkRBUl9WSUVXX1NIT1dOKTsKKyAgICAgICAgICAgIGludCBzdGFydFllYXIgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0SW50KFIuc3R5bGVhYmxlLkRhdGVQaWNrZXJfc3RhcnRZZWFyLAorICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1NUQVJUX1lFQVIpOworICAgICAgICAgICAgaW50IGVuZFllYXIgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0SW50KFIuc3R5bGVhYmxlLkRhdGVQaWNrZXJfZW5kWWVhciwgREVGQVVMVF9FTkRfWUVBUik7CisgICAgICAgICAgICBTdHJpbmcgbWluRGF0ZSA9IGF0dHJpYnV0ZXNBcnJheS5nZXRTdHJpbmcoUi5zdHlsZWFibGUuRGF0ZVBpY2tlcl9taW5EYXRlKTsKKyAgICAgICAgICAgIFN0cmluZyBtYXhEYXRlID0gYXR0cmlidXRlc0FycmF5LmdldFN0cmluZyhSLnN0eWxlYWJsZS5EYXRlUGlja2VyX21heERhdGUpOworICAgICAgICAgICAgaW50IGxheW91dFJlc291cmNlSWQgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0UmVzb3VyY2VJZCgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuRGF0ZVBpY2tlcl9pbnRlcm5hbExheW91dCwgUi5sYXlvdXQuZGF0ZV9waWNrZXIpOworICAgICAgICAgICAgYXR0cmlidXRlc0FycmF5LnJlY3ljbGUoKTsKKworICAgICAgICAgICAgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIgPSAoTGF5b3V0SW5mbGF0ZXIpIGNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5MQVlPVVRfSU5GTEFURVJfU0VSVklDRSk7CisgICAgICAgICAgICBpbmZsYXRlci5pbmZsYXRlKGxheW91dFJlc291cmNlSWQsIG1EZWxlZ2F0b3IsIHRydWUpOworCisgICAgICAgICAgICBPblZhbHVlQ2hhbmdlTGlzdGVuZXIgb25DaGFuZ2VMaXN0ZW5lciA9IG5ldyBPblZhbHVlQ2hhbmdlTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25WYWx1ZUNoYW5nZShOdW1iZXJQaWNrZXIgcGlja2VyLCBpbnQgb2xkVmFsLCBpbnQgbmV3VmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUlucHV0U3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLnNldFRpbWVJbk1pbGxpcyhtQ3VycmVudERhdGUuZ2V0VGltZUluTWlsbGlzKCkpOworICAgICAgICAgICAgICAgICAgICAvLyB0YWtlIGNhcmUgb2Ygd3JhcHBpbmcgb2YgZGF5cyBhbmQgbW9udGhzIHRvIHVwZGF0ZSBncmVhdGVyIGZpZWxkcworICAgICAgICAgICAgICAgICAgICBpZiAocGlja2VyID09IG1EYXlTcGlubmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4RGF5T2ZNb250aCA9IG1UZW1wRGF0ZS5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkVmFsID09IG1heERheU9mTW9udGggJiYgbmV3VmFsID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9sZFZhbCA9PSAxICYmIG5ld1ZhbCA9PSBtYXhEYXlPZk1vbnRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIC0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIG5ld1ZhbCAtIG9sZFZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGlja2VyID09IG1Nb250aFNwaW5uZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRWYWwgPT0gMTEgJiYgbmV3VmFsID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLk1PTlRILCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkVmFsID09IDAgJiYgbmV3VmFsID09IDExKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLmFkZChDYWxlbmRhci5NT05USCwgLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLk1PTlRILCBuZXdWYWwgLSBvbGRWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBpY2tlciA9PSBtWWVhclNwaW5uZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXQoQ2FsZW5kYXIuWUVBUiwgbmV3VmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBub3cgc2V0IHRoZSBkYXRlIHRvIHRoZSBhZGp1c3RlZCBvbmUKKyAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZShtVGVtcERhdGUuZ2V0KENhbGVuZGFyLllFQVIpLCBtVGVtcERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVTcGlubmVycygpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVDYWxlbmRhclZpZXcoKTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5RGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBtU3Bpbm5lcnMgPSAoTGluZWFyTGF5b3V0KSBtRGVsZWdhdG9yLmZpbmRWaWV3QnlJZChSLmlkLnBpY2tlcnMpOworCisgICAgICAgICAgICAvLyBjYWxlbmRhciB2aWV3IGRheS1waWNrZXIKKyAgICAgICAgICAgIG1DYWxlbmRhclZpZXcgPSAoQ2FsZW5kYXJWaWV3KSBtRGVsZWdhdG9yLmZpbmRWaWV3QnlJZChSLmlkLmNhbGVuZGFyX3ZpZXcpOworICAgICAgICAgICAgbUNhbGVuZGFyVmlldy5zZXRPbkRhdGVDaGFuZ2VMaXN0ZW5lcihuZXcgQ2FsZW5kYXJWaWV3Lk9uRGF0ZUNoYW5nZUxpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VsZWN0ZWREYXlDaGFuZ2UoQ2FsZW5kYXJWaWV3IHZpZXcsIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSkgeworICAgICAgICAgICAgICAgICAgICBzZXREYXRlKHllYXIsIG1vbnRoLCBtb250aERheSk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVNwaW5uZXJzKCk7CisgICAgICAgICAgICAgICAgICAgIG5vdGlmeURhdGVDaGFuZ2VkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIGRheQorICAgICAgICAgICAgbURheVNwaW5uZXIgPSAoTnVtYmVyUGlja2VyKSBtRGVsZWdhdG9yLmZpbmRWaWV3QnlJZChSLmlkLmRheSk7CisgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRGb3JtYXR0ZXIoTnVtYmVyUGlja2VyLmdldFR3b0RpZ2l0Rm9ybWF0dGVyKCkpOworICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0T25Mb25nUHJlc3NVcGRhdGVJbnRlcnZhbCgxMDApOworICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0T25WYWx1ZUNoYW5nZWRMaXN0ZW5lcihvbkNoYW5nZUxpc3RlbmVyKTsKKyAgICAgICAgICAgIG1EYXlTcGlubmVySW5wdXQgPSAoRWRpdFRleHQpIG1EYXlTcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7CisKKyAgICAgICAgICAgIC8vIG1vbnRoCisgICAgICAgICAgICBtTW9udGhTcGlubmVyID0gKE51bWJlclBpY2tlcikgbURlbGVnYXRvci5maW5kVmlld0J5SWQoUi5pZC5tb250aCk7CisgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1pblZhbHVlKDApOworICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRNYXhWYWx1ZShtTnVtYmVyT2ZNb250aHMgLSAxKTsKKyAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0RGlzcGxheWVkVmFsdWVzKG1TaG9ydE1vbnRocyk7CisgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE9uTG9uZ1ByZXNzVXBkYXRlSW50ZXJ2YWwoMjAwKTsKKyAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0T25WYWx1ZUNoYW5nZWRMaXN0ZW5lcihvbkNoYW5nZUxpc3RlbmVyKTsKKyAgICAgICAgICAgIG1Nb250aFNwaW5uZXJJbnB1dCA9IChFZGl0VGV4dCkgbU1vbnRoU3Bpbm5lci5maW5kVmlld0J5SWQoUi5pZC5udW1iZXJwaWNrZXJfaW5wdXQpOworCisgICAgICAgICAgICAvLyB5ZWFyCisgICAgICAgICAgICBtWWVhclNwaW5uZXIgPSAoTnVtYmVyUGlja2VyKSBtRGVsZWdhdG9yLmZpbmRWaWV3QnlJZChSLmlkLnllYXIpOworICAgICAgICAgICAgbVllYXJTcGlubmVyLnNldE9uTG9uZ1ByZXNzVXBkYXRlSW50ZXJ2YWwoMTAwKTsKKyAgICAgICAgICAgIG1ZZWFyU3Bpbm5lci5zZXRPblZhbHVlQ2hhbmdlZExpc3RlbmVyKG9uQ2hhbmdlTGlzdGVuZXIpOworICAgICAgICAgICAgbVllYXJTcGlubmVySW5wdXQgPSAoRWRpdFRleHQpIG1ZZWFyU3Bpbm5lci5maW5kVmlld0J5SWQoUi5pZC5udW1iZXJwaWNrZXJfaW5wdXQpOworCisgICAgICAgICAgICAvLyBzaG93IG9ubHkgd2hhdCB0aGUgdXNlciByZXF1aXJlZCBidXQgbWFrZSBzdXJlIHdlCisgICAgICAgICAgICAvLyBzaG93IHNvbWV0aGluZyBhbmQgdGhlIHNwaW5uZXJzIGhhdmUgaGlnaGVyIHByaW9yaXR5CisgICAgICAgICAgICBpZiAoIXNwaW5uZXJzU2hvd24gJiYgIWNhbGVuZGFyVmlld1Nob3duKSB7CisgICAgICAgICAgICAgICAgc2V0U3Bpbm5lcnNTaG93bih0cnVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2V0U3Bpbm5lcnNTaG93bihzcGlubmVyc1Nob3duKTsKKyAgICAgICAgICAgICAgICBzZXRDYWxlbmRhclZpZXdTaG93bihjYWxlbmRhclZpZXdTaG93bik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHNldCB0aGUgbWluIGRhdGUgZ2l2aW5nIHByaW9yaXR5IG9mIHRoZSBtaW5EYXRlIG92ZXIgc3RhcnRZZWFyCisgICAgICAgICAgICBtVGVtcERhdGUuY2xlYXIoKTsKKyAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkobWluRGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcnNlRGF0ZShtaW5EYXRlLCBtVGVtcERhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXQoc3RhcnRZZWFyLCAwLCAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXQoc3RhcnRZZWFyLCAwLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldE1pbkRhdGUobVRlbXBEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKKworICAgICAgICAgICAgLy8gc2V0IHRoZSBtYXggZGF0ZSBnaXZpbmcgcHJpb3JpdHkgb2YgdGhlIG1heERhdGUgb3ZlciBlbmRZZWFyCisgICAgICAgICAgICBtVGVtcERhdGUuY2xlYXIoKTsKKyAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkobWF4RGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcnNlRGF0ZShtYXhEYXRlLCBtVGVtcERhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXQoZW5kWWVhciwgMTEsIDMxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXQoZW5kWWVhciwgMTEsIDMxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldE1heERhdGUobVRlbXBEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKKworICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0byBjdXJyZW50IGRhdGUKKyAgICAgICAgICAgIG1DdXJyZW50RGF0ZS5zZXRUaW1lSW5NaWxsaXMoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOworICAgICAgICAgICAgaW5pdChtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLllFQVIpLCBtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSwgbUN1cnJlbnREYXRlCisgICAgICAgICAgICAgICAgICAgIC5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSwgbnVsbCk7CisKKyAgICAgICAgICAgIC8vIHJlLW9yZGVyIHRoZSBudW1iZXIgc3Bpbm5lcnMgdG8gbWF0Y2ggdGhlIGN1cnJlbnQgZGF0ZSBmb3JtYXQKKyAgICAgICAgICAgIHJlb3JkZXJTcGlubmVycygpOworCisgICAgICAgICAgICAvLyBhY2Nlc3NpYmlsaXR5CisgICAgICAgICAgICBzZXRDb250ZW50RGVzY3JpcHRpb25zKCk7CisKKyAgICAgICAgICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCB0aGlzIHZpZXcgaXMgaW1wb3J0YW50IGZvciBhY2Nlc3NpYmlsaXR5LgorICAgICAgICAgICAgaWYgKG1EZWxlZ2F0b3IuZ2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSgpID09IElNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9BVVRPKSB7CisgICAgICAgICAgICAgICAgbURlbGVnYXRvci5zZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KElNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9ZRVMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGluaXQoaW50IHllYXIsIGludCBtb250aE9mWWVhciwgaW50IGRheU9mTW9udGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgT25EYXRlQ2hhbmdlZExpc3RlbmVyIG9uRGF0ZUNoYW5nZWRMaXN0ZW5lcikgeworICAgICAgICAgICAgc2V0RGF0ZSh5ZWFyLCBtb250aE9mWWVhciwgZGF5T2ZNb250aCk7CisgICAgICAgICAgICB1cGRhdGVTcGlubmVycygpOworICAgICAgICAgICAgdXBkYXRlQ2FsZW5kYXJWaWV3KCk7CisgICAgICAgICAgICBtT25EYXRlQ2hhbmdlZExpc3RlbmVyID0gb25EYXRlQ2hhbmdlZExpc3RlbmVyOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZURhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheU9mTW9udGgpIHsKKyAgICAgICAgICAgIGlmICghaXNOZXdEYXRlKHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldERhdGUoeWVhciwgbW9udGgsIGRheU9mTW9udGgpOworICAgICAgICAgICAgdXBkYXRlU3Bpbm5lcnMoKTsKKyAgICAgICAgICAgIHVwZGF0ZUNhbGVuZGFyVmlldygpOworICAgICAgICAgICAgbm90aWZ5RGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldFllYXIoKSB7CisgICAgICAgICAgICByZXR1cm4gbUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5ZRUFSKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldE1vbnRoKCkgeworICAgICAgICAgICAgcmV0dXJuIG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0RGF5T2ZNb250aCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0TWluRGF0ZShsb25nIG1pbkRhdGUpIHsKKyAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMobWluRGF0ZSk7CisgICAgICAgICAgICBpZiAobVRlbXBEYXRlLmdldChDYWxlbmRhci5ZRUFSKSA9PSBtTWluRGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikKKyAgICAgICAgICAgICAgICAgICAgJiYgbVRlbXBEYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikgIT0gbU1pbkRhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1NaW5EYXRlLnNldFRpbWVJbk1pbGxpcyhtaW5EYXRlKTsKKyAgICAgICAgICAgIG1DYWxlbmRhclZpZXcuc2V0TWluRGF0ZShtaW5EYXRlKTsKKyAgICAgICAgICAgIGlmIChtQ3VycmVudERhdGUuYmVmb3JlKG1NaW5EYXRlKSkgeworICAgICAgICAgICAgICAgIG1DdXJyZW50RGF0ZS5zZXRUaW1lSW5NaWxsaXMobU1pbkRhdGUuZ2V0VGltZUluTWlsbGlzKCkpOworICAgICAgICAgICAgICAgIHVwZGF0ZUNhbGVuZGFyVmlldygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXBkYXRlU3Bpbm5lcnMoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgbG9uZyBnZXRNaW5EYXRlKCkgeworICAgICAgICAgICAgcmV0dXJuIG1DYWxlbmRhclZpZXcuZ2V0TWluRGF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldE1heERhdGUobG9uZyBtYXhEYXRlKSB7CisgICAgICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKG1heERhdGUpOworICAgICAgICAgICAgaWYgKG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikgPT0gbU1heERhdGUuZ2V0KENhbGVuZGFyLllFQVIpCisgICAgICAgICAgICAgICAgICAgICYmIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpICE9IG1NYXhEYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtTWF4RGF0ZS5zZXRUaW1lSW5NaWxsaXMobWF4RGF0ZSk7CisgICAgICAgICAgICBtQ2FsZW5kYXJWaWV3LnNldE1heERhdGUobWF4RGF0ZSk7CisgICAgICAgICAgICBpZiAobUN1cnJlbnREYXRlLmFmdGVyKG1NYXhEYXRlKSkgeworICAgICAgICAgICAgICAgIG1DdXJyZW50RGF0ZS5zZXRUaW1lSW5NaWxsaXMobU1heERhdGUuZ2V0VGltZUluTWlsbGlzKCkpOworICAgICAgICAgICAgICAgIHVwZGF0ZUNhbGVuZGFyVmlldygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXBkYXRlU3Bpbm5lcnMoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgbG9uZyBnZXRNYXhEYXRlKCkgeworICAgICAgICAgICAgcmV0dXJuIG1DYWxlbmRhclZpZXcuZ2V0TWF4RGF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICAgICAgbVllYXJTcGlubmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgICAgICBtQ2FsZW5kYXJWaWV3LnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgICAgICBtSXNFbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisgICAgICAgICAgICByZXR1cm4gbUlzRW5hYmxlZDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgQ2FsZW5kYXJWaWV3IGdldENhbGVuZGFyVmlldygpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ2FsZW5kYXJWaWV3OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldENhbGVuZGFyVmlld1Nob3duKGJvb2xlYW4gc2hvd24pIHsKKyAgICAgICAgICAgIG1DYWxlbmRhclZpZXcuc2V0VmlzaWJpbGl0eShzaG93biA/IFZJU0lCTEUgOiBHT05FKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBnZXRDYWxlbmRhclZpZXdTaG93bigpIHsKKyAgICAgICAgICAgIHJldHVybiAobUNhbGVuZGFyVmlldy5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5WSVNJQkxFKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRTcGlubmVyc1Nob3duKGJvb2xlYW4gc2hvd24pIHsKKyAgICAgICAgICAgIG1TcGlubmVycy5zZXRWaXNpYmlsaXR5KHNob3duID8gVklTSUJMRSA6IEdPTkUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGdldFNwaW5uZXJzU2hvd24oKSB7CisgICAgICAgICAgICByZXR1cm4gbVNwaW5uZXJzLmlzU2hvd24oKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7CisgICAgICAgICAgICBzZXRDdXJyZW50TG9jYWxlKG5ld0NvbmZpZy5sb2NhbGUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoUmVzdG9yZUluc3RhbmNlU3RhdGUoU3BhcnNlQXJyYXk8UGFyY2VsYWJsZT4gY29udGFpbmVyKSB7CisgICAgICAgICAgICBtRGVsZWdhdG9yLmRpc3BhdGNoVGhhd1NlbGZPbmx5KGNvbnRhaW5lcik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFBhcmNlbGFibGUgb25TYXZlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN1cGVyU3RhdGUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgU2F2ZWRTdGF0ZShzdXBlclN0YXRlLCBnZXRZZWFyKCksIGdldE1vbnRoKCksIGdldERheU9mTW9udGgoKSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25SZXN0b3JlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN0YXRlKSB7CisgICAgICAgICAgICBTYXZlZFN0YXRlIHNzID0gKFNhdmVkU3RhdGUpIHN0YXRlOworICAgICAgICAgICAgc2V0RGF0ZShzcy5tWWVhciwgc3MubU1vbnRoLCBzcy5tRGF5KTsKKyAgICAgICAgICAgIHVwZGF0ZVNwaW5uZXJzKCk7CisgICAgICAgICAgICB1cGRhdGVDYWxlbmRhclZpZXcoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICAgICAgb25Qb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICAgICAgZmluYWwgaW50IGZsYWdzID0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX0RBVEUgfCBEYXRlVXRpbHMuRk9STUFUX1NIT1dfWUVBUjsKKyAgICAgICAgICAgIFN0cmluZyBzZWxlY3RlZERhdGVVdHRlcmFuY2UgPSBEYXRlVXRpbHMuZm9ybWF0RGF0ZVRpbWUobUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSwgZmxhZ3MpOworICAgICAgICAgICAgZXZlbnQuZ2V0VGV4dCgpLmFkZChzZWxlY3RlZERhdGVVdHRlcmFuY2UpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgICAgIGV2ZW50LnNldENsYXNzTmFtZShEYXRlUGlja2VyLmNsYXNzLmdldE5hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBpbmZvKSB7CisgICAgICAgICAgICBpbmZvLnNldENsYXNzTmFtZShEYXRlUGlja2VyLmNsYXNzLmdldE5hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgY3VycmVudCBsb2NhbGUuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGN1cnJlbnQgbG9jYWxlLgorICAgICAgICAgKi8KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAgICAgc3VwZXIuc2V0Q3VycmVudExvY2FsZShsb2NhbGUpOworCisgICAgICAgICAgICBtVGVtcERhdGUgPSBnZXRDYWxlbmRhckZvckxvY2FsZShtVGVtcERhdGUsIGxvY2FsZSk7CisgICAgICAgICAgICBtTWluRGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1NaW5EYXRlLCBsb2NhbGUpOworICAgICAgICAgICAgbU1heERhdGUgPSBnZXRDYWxlbmRhckZvckxvY2FsZShtTWF4RGF0ZSwgbG9jYWxlKTsKKyAgICAgICAgICAgIG1DdXJyZW50RGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1DdXJyZW50RGF0ZSwgbG9jYWxlKTsKKworICAgICAgICAgICAgbU51bWJlck9mTW9udGhzID0gbVRlbXBEYXRlLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuTU9OVEgpICsgMTsKKyAgICAgICAgICAgIG1TaG9ydE1vbnRocyA9IG5ldyBEYXRlRm9ybWF0U3ltYm9scygpLmdldFNob3J0TW9udGhzKCk7CisKKyAgICAgICAgICAgIGlmICh1c2luZ051bWVyaWNNb250aHMoKSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGluIGEgbG9jYWxlIHdoZXJlIGEgZGF0ZSBzaG91bGQgZWl0aGVyIGJlIGFsbC1udW1lcmljLCBvciBhbGwtdGV4dC4KKyAgICAgICAgICAgICAgICAvLyBBbGwtdGV4dCB3b3VsZCByZXF1aXJlIGN1c3RvbSBOdW1iZXJQaWNrZXIgZm9ybWF0dGVycyBmb3IgZGF5IGFuZCB5ZWFyLgorICAgICAgICAgICAgICAgIG1TaG9ydE1vbnRocyA9IG5ldyBTdHJpbmdbbU51bWJlck9mTW9udGhzXTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1OdW1iZXJPZk1vbnRoczsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIG1TaG9ydE1vbnRoc1tpXSA9IFN0cmluZy5mb3JtYXQoIiVkIiwgaSArIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUZXN0cyB3aGV0aGVyIHRoZSBjdXJyZW50IGxvY2FsZSBpcyBvbmUgd2hlcmUgdGhlcmUgYXJlIG5vIHJlYWwgbW9udGggbmFtZXMsCisgICAgICAgICAqIHN1Y2ggYXMgQ2hpbmVzZSwgSmFwYW5lc2UsIG9yIEtvcmVhbiBsb2NhbGVzLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIHVzaW5nTnVtZXJpY01vbnRocygpIHsKKyAgICAgICAgICAgIHJldHVybiBDaGFyYWN0ZXIuaXNEaWdpdChtU2hvcnRNb250aHNbQ2FsZW5kYXIuSkFOVUFSWV0uY2hhckF0KDApKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGEgY2FsZW5kYXIgZm9yIGxvY2FsZSBib290c3RyYXBwZWQgd2l0aCB0aGUgdmFsdWUgb2YgYSBnaXZlbiBjYWxlbmRhci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG9sZENhbGVuZGFyIFRoZSBvbGQgY2FsZW5kYXIuCisgICAgICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGxvY2FsZS4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgQ2FsZW5kYXIgZ2V0Q2FsZW5kYXJGb3JMb2NhbGUoQ2FsZW5kYXIgb2xkQ2FsZW5kYXIsIExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgICAgIGlmIChvbGRDYWxlbmRhciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENhbGVuZGFyLmdldEluc3RhbmNlKGxvY2FsZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWVNaWxsaXMgPSBvbGRDYWxlbmRhci5nZXRUaW1lSW5NaWxsaXMoKTsKKyAgICAgICAgICAgICAgICBDYWxlbmRhciBuZXdDYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKGxvY2FsZSk7CisgICAgICAgICAgICAgICAgbmV3Q2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKGN1cnJlbnRUaW1lTWlsbGlzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3Q2FsZW5kYXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmVvcmRlcnMgdGhlIHNwaW5uZXJzIGFjY29yZGluZyB0byB0aGUgZGF0ZSBmb3JtYXQgdGhhdCBpcworICAgICAgICAgKiBleHBsaWNpdGx5IHNldCBieSB0aGUgdXNlciBhbmQgaWYgbm8gc3VjaCBpcyBzZXQgZmFsbCBiYWNrCisgICAgICAgICAqIHRvIHRoZSBjdXJyZW50IGxvY2FsZSdzIGRlZmF1bHQgZm9ybWF0LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkIHJlb3JkZXJTcGlubmVycygpIHsKKyAgICAgICAgICAgIG1TcGlubmVycy5yZW1vdmVBbGxWaWV3cygpOworICAgICAgICAgICAgLy8gV2UgdXNlIG51bWVyaWMgc3Bpbm5lcnMgZm9yIHllYXIgYW5kIGRheSwgYnV0IHRleHR1YWwgbW9udGhzLiBBc2sgaWN1NGMgd2hhdAorICAgICAgICAgICAgLy8gb3JkZXIgdGhlIHVzZXIncyBsb2NhbGUgdXNlcyBmb3IgdGhhdCBjb21iaW5hdGlvbi4gaHR0cDovL2IvNzIwNzEwMy4KKyAgICAgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gSUNVLmdldEJlc3REYXRlVGltZVBhdHRlcm4oInl5eXlNTU1kZCIsCisgICAgICAgICAgICAgICAgICAgIExvY2FsZS5nZXREZWZhdWx0KCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBjaGFyW10gb3JkZXIgPSBJQ1UuZ2V0RGF0ZUZvcm1hdE9yZGVyKHBhdHRlcm4pOworICAgICAgICAgICAgZmluYWwgaW50IHNwaW5uZXJDb3VudCA9IG9yZGVyLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Bpbm5lckNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG9yZGVyW2ldKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgICAgICAgICAgbVNwaW5uZXJzLmFkZFZpZXcobURheVNwaW5uZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW1lT3B0aW9ucyhtRGF5U3Bpbm5lciwgc3Bpbm5lckNvdW50LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICdNJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TcGlubmVycy5hZGRWaWV3KG1Nb250aFNwaW5uZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW1lT3B0aW9ucyhtTW9udGhTcGlubmVyLCBzcGlubmVyQ291bnQsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3knOgorICAgICAgICAgICAgICAgICAgICAgICAgbVNwaW5uZXJzLmFkZFZpZXcobVllYXJTcGlubmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldEltZU9wdGlvbnMobVllYXJTcGlubmVyLCBzcGlubmVyQ291bnQsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKEFycmF5cy50b1N0cmluZyhvcmRlcikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBQYXJzZXMgdGhlIGdpdmVuIDxjb2RlPmRhdGU8L2NvZGU+IGFuZCBpbiBjYXNlIG9mIHN1Y2Nlc3Mgc2V0cyB0aGUgcmVzdWx0CisgICAgICAgICAqIHRvIHRoZSA8Y29kZT5vdXREYXRlPC9jb2RlPi4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBkYXRlIHdhcyBwYXJzZWQuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGJvb2xlYW4gcGFyc2VEYXRlKFN0cmluZyBkYXRlLCBDYWxlbmRhciBvdXREYXRlKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG91dERhdGUuc2V0VGltZShtRGF0ZUZvcm1hdC5wYXJzZShkYXRlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkRhdGU6ICIgKyBkYXRlICsgIiBub3QgaW4gZm9ybWF0OiAiICsgREFURV9GT1JNQVQpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc05ld0RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheU9mTW9udGgpIHsKKyAgICAgICAgICAgIHJldHVybiAobUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5ZRUFSKSAhPSB5ZWFyCisgICAgICAgICAgICAgICAgICAgIHx8IG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpICE9IGRheU9mTW9udGgKKyAgICAgICAgICAgICAgICAgICAgfHwgbUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpICE9IG1vbnRoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBzZXREYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoKSB7CisgICAgICAgICAgICBtQ3VycmVudERhdGUuc2V0KHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoKTsKKyAgICAgICAgICAgIGlmIChtQ3VycmVudERhdGUuYmVmb3JlKG1NaW5EYXRlKSkgeworICAgICAgICAgICAgICAgIG1DdXJyZW50RGF0ZS5zZXRUaW1lSW5NaWxsaXMobU1pbkRhdGUuZ2V0VGltZUluTWlsbGlzKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERhdGUuYWZ0ZXIobU1heERhdGUpKSB7CisgICAgICAgICAgICAgICAgbUN1cnJlbnREYXRlLnNldFRpbWVJbk1pbGxpcyhtTWF4RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlU3Bpbm5lcnMoKSB7CisgICAgICAgICAgICAvLyBzZXQgdGhlIHNwaW5uZXIgcmFuZ2VzIHJlc3BlY3RpbmcgdGhlIG1pbiBhbmQgbWF4IGRhdGVzCisgICAgICAgICAgICBpZiAobUN1cnJlbnREYXRlLmVxdWFscyhtTWluRGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRNaW5WYWx1ZShtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkpOworICAgICAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldE1heFZhbHVlKG1DdXJyZW50RGF0ZS5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9NT05USCkpOworICAgICAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldFdyYXBTZWxlY3RvcldoZWVsKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldERpc3BsYXllZFZhbHVlcyhudWxsKTsKKyAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1pblZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpKTsKKyAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1heFZhbHVlKG1DdXJyZW50RGF0ZS5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLk1PTlRIKSk7CisgICAgICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRXcmFwU2VsZWN0b3JXaGVlbChmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1DdXJyZW50RGF0ZS5lcXVhbHMobU1heERhdGUpKSB7CisgICAgICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0TWluVmFsdWUobUN1cnJlbnREYXRlLmdldEFjdHVhbE1pbmltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisgICAgICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0TWF4VmFsdWUobUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAgICAgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRXcmFwU2VsZWN0b3JXaGVlbChmYWxzZSk7CisgICAgICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXREaXNwbGF5ZWRWYWx1ZXMobnVsbCk7CisgICAgICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRNaW5WYWx1ZShtQ3VycmVudERhdGUuZ2V0QWN0dWFsTWluaW11bShDYWxlbmRhci5NT05USCkpOworICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0TWF4VmFsdWUobUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5NT05USCkpOworICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0V3JhcFNlbGVjdG9yV2hlZWwoZmFsc2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRNaW5WYWx1ZSgxKTsKKyAgICAgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRNYXhWYWx1ZShtQ3VycmVudERhdGUuZ2V0QWN0dWFsTWF4aW11bShDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAgICAgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRXcmFwU2VsZWN0b3JXaGVlbCh0cnVlKTsKKyAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldERpc3BsYXllZFZhbHVlcyhudWxsKTsKKyAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1pblZhbHVlKDApOworICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0TWF4VmFsdWUoMTEpOworICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0V3JhcFNlbGVjdG9yV2hlZWwodHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbW9udGggbmFtZXMgYXJlIGEgemVybyBiYXNlZCBhcnJheQorICAgICAgICAgICAgLy8gd2l0aCB0aGUgbW9udGhzIGluIHRoZSBtb250aCBzcGlubmVyCisgICAgICAgICAgICBTdHJpbmdbXSBkaXNwbGF5ZWRWYWx1ZXMgPSBBcnJheXMuY29weU9mUmFuZ2UobVNob3J0TW9udGhzLAorICAgICAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVyLmdldE1pblZhbHVlKCksIG1Nb250aFNwaW5uZXIuZ2V0TWF4VmFsdWUoKSArIDEpOworICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXREaXNwbGF5ZWRWYWx1ZXMoZGlzcGxheWVkVmFsdWVzKTsKKworICAgICAgICAgICAgLy8geWVhciBzcGlubmVyIHJhbmdlIGRvZXMgbm90IGNoYW5nZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkYXRlCisgICAgICAgICAgICBtWWVhclNwaW5uZXIuc2V0TWluVmFsdWUobU1pbkRhdGUuZ2V0KENhbGVuZGFyLllFQVIpKTsKKyAgICAgICAgICAgIG1ZZWFyU3Bpbm5lci5zZXRNYXhWYWx1ZShtTWF4RGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikpOworICAgICAgICAgICAgbVllYXJTcGlubmVyLnNldFdyYXBTZWxlY3RvcldoZWVsKGZhbHNlKTsKKworICAgICAgICAgICAgLy8gc2V0IHRoZSBzcGlubmVyIHZhbHVlcworICAgICAgICAgICAgbVllYXJTcGlubmVyLnNldFZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikpOworICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRWYWx1ZShtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSk7CisgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRWYWx1ZShtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkpOworCisgICAgICAgICAgICBpZiAodXNpbmdOdW1lcmljTW9udGhzKCkpIHsKKyAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVySW5wdXQuc2V0UmF3SW5wdXRUeXBlKElucHV0VHlwZS5UWVBFX0NMQVNTX05VTUJFUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVXBkYXRlcyB0aGUgY2FsZW5kYXIgdmlldyB3aXRoIHRoZSBjdXJyZW50IGRhdGUuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlQ2FsZW5kYXJWaWV3KCkgeworICAgICAgICAgICAgbUNhbGVuZGFyVmlldy5zZXREYXRlKG1DdXJyZW50RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIE5vdGlmaWVzIHRoZSBsaXN0ZW5lciwgaWYgc3VjaCwgZm9yIGEgY2hhbmdlIGluIHRoZSBzZWxlY3RlZCBkYXRlLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeURhdGVDaGFuZ2VkKCkgeworICAgICAgICAgICAgbURlbGVnYXRvci5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfU0VMRUNURUQpOworICAgICAgICAgICAgaWYgKG1PbkRhdGVDaGFuZ2VkTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1PbkRhdGVDaGFuZ2VkTGlzdGVuZXIub25EYXRlQ2hhbmdlZChtRGVsZWdhdG9yLCBnZXRZZWFyKCksIGdldE1vbnRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICBnZXREYXlPZk1vbnRoKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIElNRSBvcHRpb25zIGZvciBhIHNwaW5uZXIgYmFzZWQgb24gaXRzIG9yZGVyaW5nLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gc3Bpbm5lciBUaGUgc3Bpbm5lci4KKyAgICAgICAgICogQHBhcmFtIHNwaW5uZXJDb3VudCBUaGUgdG90YWwgc3Bpbm5lciBjb3VudC4KKyAgICAgICAgICogQHBhcmFtIHNwaW5uZXJJbmRleCBUaGUgaW5kZXggb2YgdGhlIGdpdmVuIHNwaW5uZXIuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgc2V0SW1lT3B0aW9ucyhOdW1iZXJQaWNrZXIgc3Bpbm5lciwgaW50IHNwaW5uZXJDb3VudCwgaW50IHNwaW5uZXJJbmRleCkgeworICAgICAgICAgICAgZmluYWwgaW50IGltZU9wdGlvbnM7CisgICAgICAgICAgICBpZiAoc3Bpbm5lckluZGV4IDwgc3Bpbm5lckNvdW50IC0gMSkgeworICAgICAgICAgICAgICAgIGltZU9wdGlvbnMgPSBFZGl0b3JJbmZvLklNRV9BQ1RJT05fTkVYVDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW1lT3B0aW9ucyA9IEVkaXRvckluZm8uSU1FX0FDVElPTl9ET05FOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVGV4dFZpZXcgaW5wdXQgPSAoVGV4dFZpZXcpIHNwaW5uZXIuZmluZFZpZXdCeUlkKFIuaWQubnVtYmVycGlja2VyX2lucHV0KTsKKyAgICAgICAgICAgIGlucHV0LnNldEltZU9wdGlvbnMoaW1lT3B0aW9ucyk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgc2V0Q29udGVudERlc2NyaXB0aW9ucygpIHsKKyAgICAgICAgICAgIC8vIERheQorICAgICAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1EYXlTcGlubmVyLCBSLmlkLmluY3JlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfaW5jcmVtZW50X2RheV9idXR0b24pOworICAgICAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1EYXlTcGlubmVyLCBSLmlkLmRlY3JlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfZGVjcmVtZW50X2RheV9idXR0b24pOworICAgICAgICAgICAgLy8gTW9udGgKKyAgICAgICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtTW9udGhTcGlubmVyLCBSLmlkLmluY3JlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfaW5jcmVtZW50X21vbnRoX2J1dHRvbik7CisgICAgICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obU1vbnRoU3Bpbm5lciwgUi5pZC5kZWNyZW1lbnQsCisgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLmRhdGVfcGlja2VyX2RlY3JlbWVudF9tb250aF9idXR0b24pOworICAgICAgICAgICAgLy8gWWVhcgorICAgICAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1ZZWFyU3Bpbm5lciwgUi5pZC5pbmNyZW1lbnQsCisgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLmRhdGVfcGlja2VyX2luY3JlbWVudF95ZWFyX2J1dHRvbik7CisgICAgICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obVllYXJTcGlubmVyLCBSLmlkLmRlY3JlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfZGVjcmVtZW50X3llYXJfYnV0dG9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24oVmlldyByb290LCBpbnQgdmlld0lkLCBpbnQgY29udERlc2NSZXNJZCkgeworICAgICAgICAgICAgVmlldyB0YXJnZXQgPSByb290LmZpbmRWaWV3QnlJZCh2aWV3SWQpOworICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0LnNldENvbnRlbnREZXNjcmlwdGlvbihtQ29udGV4dC5nZXRTdHJpbmcoY29udERlc2NSZXNJZCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUlucHV0U3RhdGUoKSB7CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSBhbmQgdGhlIElNRSBpcyBhY3RpdmUKKyAgICAgICAgICAgIC8vIGZvciBvbmUgb2YgdGhlIGlucHV0cyBpZiB0aGlzIHdpZGdldCwgdGhlIElNRSBpcyBjbG9zZWQuIElmIHRoZSB1c2VyCisgICAgICAgICAgICAvLyBjaGFuZ2VkIHRoZSB2YWx1ZSB2aWEgdGhlIElNRSBhbmQgdGhlcmUgaXMgYSBuZXh0IGlucHV0IHRoZSBJTUUgd2lsbAorICAgICAgICAgICAgLy8gYmUgc2hvd24sIG90aGVyd2lzZSB0aGUgdXNlciBjaG9zZSBhbm90aGVyIG1lYW5zIG9mIGNoYW5naW5nIHRoZQorICAgICAgICAgICAgLy8gdmFsdWUgYW5kIGhhdmluZyB0aGUgSU1FIHVwIG1ha2VzIG5vIHNlbnNlLgorICAgICAgICAgICAgSW5wdXRNZXRob2RNYW5hZ2VyIGlucHV0TWV0aG9kTWFuYWdlciA9IElucHV0TWV0aG9kTWFuYWdlci5wZWVrSW5zdGFuY2UoKTsKKyAgICAgICAgICAgIGlmIChpbnB1dE1ldGhvZE1hbmFnZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChpbnB1dE1ldGhvZE1hbmFnZXIuaXNBY3RpdmUobVllYXJTcGlubmVySW5wdXQpKSB7CisgICAgICAgICAgICAgICAgICAgIG1ZZWFyU3Bpbm5lcklucHV0LmNsZWFyRm9jdXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRNZXRob2RNYW5hZ2VyLmhpZGVTb2Z0SW5wdXRGcm9tV2luZG93KG1EZWxlZ2F0b3IuZ2V0V2luZG93VG9rZW4oKSwgMCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dE1ldGhvZE1hbmFnZXIuaXNBY3RpdmUobU1vbnRoU3Bpbm5lcklucHV0KSkgeworICAgICAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVySW5wdXQuY2xlYXJGb2N1cygpOworICAgICAgICAgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXIuaGlkZVNvZnRJbnB1dEZyb21XaW5kb3cobURlbGVnYXRvci5nZXRXaW5kb3dUb2tlbigpLCAwKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0TWV0aG9kTWFuYWdlci5pc0FjdGl2ZShtRGF5U3Bpbm5lcklucHV0KSkgeworICAgICAgICAgICAgICAgICAgICBtRGF5U3Bpbm5lcklucHV0LmNsZWFyRm9jdXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRNZXRob2RNYW5hZ2VyLmhpZGVTb2Z0SW5wdXRGcm9tV2luZG93KG1EZWxlZ2F0b3IuZ2V0V2luZG93VG9rZW4oKSwgMCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0RhdGVUaW1lVmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0RhdGVUaW1lVmlldy5qYXZhCmluZGV4IGFmNmJiY2IuLjQ1ZDE0MDMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9EYXRlVGltZVZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRGF0ZVRpbWVWaWV3LmphdmEKQEAgLTI3LDEyICsyNyw5IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5TZXR0aW5nTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuUmVtb3RlVmlld3MuUmVtb3RlVmlldzsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7Ci0KIGltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKIGltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9EaWFsZXJGaWx0ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9EaWFsZXJGaWx0ZXIuamF2YQppbmRleCAyMGJjMTE0Li43ODc4NmUxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRGlhbGVyRmlsdGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0RpYWxlckZpbHRlci5qYXZhCkBAIC0yOCw4ICsyOCw2IEBACiBpbXBvcnQgYW5kcm9pZC50ZXh0Lm1ldGhvZC5LZXlMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnRleHQubWV0aG9kLlRleHRLZXlMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LktleUNoYXJhY3Rlck1hcDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9FZGl0VGV4dC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0VkaXRUZXh0LmphdmEKaW5kZXggNTdlNTFjMi4uM2E3Y2M4NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0VkaXRUZXh0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0VkaXRUZXh0LmphdmEKQEAgLTU2LDggKzU2LDEyIEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5lZGl0VGV4dFN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgRWRpdFRleHQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBFZGl0VGV4dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBFZGl0VGV4dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9FZGl0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9FZGl0b3IuamF2YQppbmRleCA3NDhhZjdiLi4xMWRiY2U4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRWRpdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0VkaXRvci5qYXZhCkBAIC00NSw4ICs0NSw2IEBACiBpbXBvcnQgYW5kcm9pZC5pbnB1dG1ldGhvZHNlcnZpY2UuRXh0cmFjdEVkaXRUZXh0OwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzZW5nZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudGV4dC5EeW5hbWljTGF5b3V0OwpAQCAtMTM0Niw3ICsxMzQ0LDcgQEAKICAgICAgICAgICAgICAgICBEaXNwbGF5TGlzdCBibG9ja0Rpc3BsYXlMaXN0ID0gbVRleHREaXNwbGF5TGlzdHNbYmxvY2tJbmRleF07CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrRGlzcGxheUxpc3QgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBibG9ja0Rpc3BsYXlMaXN0ID0gbVRleHREaXNwbGF5TGlzdHNbYmxvY2tJbmRleF0gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UZXh0Vmlldy5nZXRIYXJkd2FyZVJlbmRlcmVyKCkuY3JlYXRlRGlzcGxheUxpc3QoIlRleHQgIiArIGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXlMaXN0LmNyZWF0ZSgiVGV4dCAiICsgYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSXNJbnZhbGlkKSBibG9ja0Rpc3BsYXlMaXN0LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjMyMSw4ICsyMzE5LDggQEAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN1Z2dlc3Rpb25TcGFuLCBJbnRlZ2VyPiBtU3BhbnNMZW5ndGhzOwogCiAgICAgICAgIHByaXZhdGUgY2xhc3MgQ3VzdG9tUG9wdXBXaW5kb3cgZXh0ZW5kcyBQb3B1cFdpbmRvdyB7Ci0gICAgICAgICAgICBwdWJsaWMgQ3VzdG9tUG9wdXBXaW5kb3coQ29udGV4dCBjb250ZXh0LCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihjb250ZXh0LCBudWxsLCBkZWZTdHlsZSk7CisgICAgICAgICAgICBwdWJsaWMgQ3VzdG9tUG9wdXBXaW5kb3coQ29udGV4dCBjb250ZXh0LCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgbnVsbCwgZGVmU3R5bGVBdHRyKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRXhwYW5kYWJsZUxpc3RWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRXhwYW5kYWJsZUxpc3RWaWV3LmphdmEKaW5kZXggN2I4MWFhOC4uNzAwODllMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0Vmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9FeHBhbmRhYmxlTGlzdFZpZXcuamF2YQpAQCAtMjI3LDEyICsyMjcsMTYgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmV4cGFuZGFibGVMaXN0Vmlld1N0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgRXhwYW5kYWJsZUxpc3RWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgRXhwYW5kYWJsZUxpc3RWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9Ci0gICAgICAgICAgICBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkV4cGFuZGFibGVMaXN0VmlldywgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBFeHBhbmRhYmxlTGlzdFZpZXcoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRXhwYW5kYWJsZUxpc3RWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtR3JvdXBJbmRpY2F0b3IgPSBhLmdldERyYXdhYmxlKAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkV4cGFuZGFibGVMaXN0Vmlld19ncm91cEluZGljYXRvcik7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRmFzdFNjcm9sbGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRmFzdFNjcm9sbGVyLmphdmEKaW5kZXggMDFhYzhmZC4uYzA5NjFmZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Zhc3RTY3JvbGxlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9GYXN0U2Nyb2xsZXIuamF2YQpAQCAtMjQsMTEgKzI0LDExIEBACiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlscy5UcnVuY2F0ZUF0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5JbnRQcm9wZXJ0eTsKQEAgLTQzLDcgKzQzLDcgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLkxheW91dFBhcmFtczsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwT3ZlcmxheTsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5BYnNMaXN0Vmlldy5PblNjcm9sbExpc3RlbmVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3LlNjYWxlVHlwZTsKIAogLyoqCiAgKiBIZWxwZXIgY2xhc3MgZm9yIEFic0xpc3RWaWV3IHRvIGRyYXcgYW5kIGNvbnRyb2wgdGhlIEZhc3QgU2Nyb2xsIHRodW1iCkBAIC03NiwyNCArNzYsNiBAQAogICAgIC8qKiBTY3JvbGwgdGh1bWIgYW5kIHByZXZpZXcgYmVpbmcgZHJhZ2dlZCBieSB1c2VyLiAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9EUkFHR0lORyA9IDI7CiAKLSAgICAvKiogU3R5bGVhYmxlIGF0dHJpYnV0ZXMuICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gQVRUUlMgPSBuZXcgaW50W10gewotICAgICAgICBhbmRyb2lkLlIuYXR0ci5mYXN0U2Nyb2xsVGV4dENvbG9yLAotICAgICAgICBhbmRyb2lkLlIuYXR0ci5mYXN0U2Nyb2xsVGh1bWJEcmF3YWJsZSwKLSAgICAgICAgYW5kcm9pZC5SLmF0dHIuZmFzdFNjcm9sbFRyYWNrRHJhd2FibGUsCi0gICAgICAgIGFuZHJvaWQuUi5hdHRyLmZhc3RTY3JvbGxQcmV2aWV3QmFja2dyb3VuZExlZnQsCi0gICAgICAgIGFuZHJvaWQuUi5hdHRyLmZhc3RTY3JvbGxQcmV2aWV3QmFja2dyb3VuZFJpZ2h0LAotICAgICAgICBhbmRyb2lkLlIuYXR0ci5mYXN0U2Nyb2xsT3ZlcmxheVBvc2l0aW9uCi0gICAgfTsKLQotICAgIC8vIFN0eWxlYWJsZSBhdHRyaWJ1dGUgaW5kaWNlcy4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVYVF9DT0xPUiA9IDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRIVU1CX0RSQVdBQkxFID0gMTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBQ0tfRFJBV0FCTEUgPSAyOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUkVWSUVXX0JBQ0tHUk9VTkRfTEVGVCA9IDM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBSRVZJRVdfQkFDS0dST1VORF9SSUdIVCA9IDQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9WRVJMQVlfUE9TSVRJT04gPSA1OwotCiAgICAgLy8gUG9zaXRpb25zIGZvciBwcmV2aWV3IGltYWdlIGFuZCB0ZXh0LgogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPVkVSTEFZX0ZMT0FUSU5HID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT1ZFUkxBWV9BVF9USFVNQiA9IDE7CkBAIC0xMTUsNyArOTcsNyBAQAogICAgIHByaXZhdGUgZmluYWwgVGV4dFZpZXcgbVNlY29uZGFyeVRleHQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBJbWFnZVZpZXcgbVRodW1iSW1hZ2U7CiAgICAgcHJpdmF0ZSBmaW5hbCBJbWFnZVZpZXcgbVRyYWNrSW1hZ2U7Ci0gICAgcHJpdmF0ZSBmaW5hbCBJbWFnZVZpZXcgbVByZXZpZXdJbWFnZTsKKyAgICBwcml2YXRlIGZpbmFsIFZpZXcgbVByZXZpZXdJbWFnZTsKIAogICAgIC8qKgogICAgICAqIFByZXZpZXcgaW1hZ2UgcmVzb3VyY2UgSURzIGZvciBsZWZ0LSBhbmQgcmlnaHQtYWxpZ25lZCBsYXlvdXRzLiBTZWUKQEAgLTEyNywxMyArMTA5LDI1IEBACiAgICAgICogUGFkZGluZyBpbiBwaXhlbHMgYXJvdW5kIHRoZSBwcmV2aWV3IHRleHQuIEFwcGxpZWQgYXMgbGF5b3V0IG1hcmdpbnMgdG8KICAgICAgKiB0aGUgcHJldmlldyB0ZXh0IGFuZCBwYWRkaW5nIHRvIHRoZSBwcmV2aWV3IGltYWdlLgogICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgaW50IG1QcmV2aWV3UGFkZGluZzsKKyAgICBwcml2YXRlIGludCBtUHJldmlld1BhZGRpbmc7CiAKLSAgICAvKiogV2hldGhlciB0aGVyZSBpcyBhIHRyYWNrIGltYWdlIHRvIGRpc3BsYXkuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1IYXNUcmFja0ltYWdlOworICAgIHByaXZhdGUgaW50IG1QcmV2aWV3TWluV2lkdGg7CisgICAgcHJpdmF0ZSBpbnQgbVByZXZpZXdNaW5IZWlnaHQ7CisgICAgcHJpdmF0ZSBpbnQgbVRodW1iTWluV2lkdGg7CisgICAgcHJpdmF0ZSBpbnQgbVRodW1iTWluSGVpZ2h0OworCisgICAgLyoqIFRoZW1lLXNwZWNpZmllZCB0ZXh0IHNpemUuIFVzZWQgb25seSBpZiB0ZXh0IGFwcGVhcmFuY2UgaXMgbm90IHNldC4gKi8KKyAgICBwcml2YXRlIGZsb2F0IG1UZXh0U2l6ZTsKKworICAgIC8qKiBUaGVtZS1zcGVjaWZpZWQgdGV4dCBjb2xvci4gVXNlZCBvbmx5IGlmIHRleHQgYXBwZWFyYW5jZSBpcyBub3Qgc2V0LiAqLworICAgIHByaXZhdGUgQ29sb3JTdGF0ZUxpc3QgbVRleHRDb2xvcjsKKworICAgIHByaXZhdGUgRHJhd2FibGUgbVRodW1iRHJhd2FibGU7CisgICAgcHJpdmF0ZSBEcmF3YWJsZSBtVHJhY2tEcmF3YWJsZTsKKyAgICBwcml2YXRlIGludCBtVGV4dEFwcGVhcmFuY2U7CiAKICAgICAvKiogVG90YWwgd2lkdGggb2YgZGVjb3JhdGlvbnMuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVdpZHRoOworICAgIHByaXZhdGUgaW50IG1XaWR0aDsKIAogICAgIC8qKiBTZXQgY29udGFpbmluZyBkZWNvcmF0aW9uIHRyYW5zaXRpb24gYW5pbWF0aW9ucy4gKi8KICAgICBwcml2YXRlIEFuaW1hdG9yU2V0IG1EZWNvckFuaW1hdGlvbjsKQEAgLTE4MCw3ICsxNzQsNyBAQAogICAgIC8qKiBXaGV0aGVyIHRoZSBwcmV2aWV3IGltYWdlIGlzIHZpc2libGUuICovCiAgICAgcHJpdmF0ZSBib29sZWFuIG1TaG93aW5nUHJldmlldzsKIAotICAgIHByaXZhdGUgQmFzZUFkYXB0ZXIgbUxpc3RBZGFwdGVyOworICAgIHByaXZhdGUgQWRhcHRlciBtTGlzdEFkYXB0ZXI7CiAgICAgcHJpdmF0ZSBTZWN0aW9uSW5kZXhlciBtU2VjdGlvbkluZGV4ZXI7CiAKICAgICAvKiogV2hldGhlciBkZWNvcmF0aW9ucyBzaG91bGQgYmUgbGFpZCBvdXQgZnJvbSByaWdodCB0byBsZWZ0LiAqLwpAQCAtMjA4LDIyICsyMDIsMTEgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gbU1hdGNoRHJhZ1Bvc2l0aW9uOwogCiAgICAgcHJpdmF0ZSBmbG9hdCBtSW5pdGlhbFRvdWNoWTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbUhhc1BlbmRpbmdEcmFnOworICAgIHByaXZhdGUgbG9uZyBtUGVuZGluZ0RyYWcgPSAtMTsKICAgICBwcml2YXRlIGludCBtU2NhbGVkVG91Y2hTbG9wOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtRGVmZXJTdGFydERyYWcgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBpZiAobUxpc3QuaXNBdHRhY2hlZFRvV2luZG93KCkpIHsKLSAgICAgICAgICAgICAgICBiZWdpbkRyYWcoKTsKLQotICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IHBvcyA9IGdldFBvc0Zyb21Nb3Rpb25FdmVudChtSW5pdGlhbFRvdWNoWSk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsVG8ocG9zKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUhhc1BlbmRpbmdEcmFnID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9OworICAgIHByaXZhdGUgaW50IG1PbGRJdGVtQ291bnQ7CisgICAgcHJpdmF0ZSBpbnQgbU9sZENoaWxkQ291bnQ7CiAKICAgICAvKioKICAgICAgKiBVc2VkIHRvIGRlbGF5IGhpZGluZyBmYXN0IHNjcm9sbCBkZWNvcmF0aW9ucy4KQEAgLTI0NSw4OSArMjI4LDE0NSBAQAogICAgICAgICB9CiAgICAgfTsKIAotICAgIHB1YmxpYyBGYXN0U2Nyb2xsZXIoQWJzTGlzdFZpZXcgbGlzdFZpZXcpIHsKKyAgICBwdWJsaWMgRmFzdFNjcm9sbGVyKEFic0xpc3RWaWV3IGxpc3RWaWV3LCBpbnQgc3R5bGVSZXNJZCkgewogICAgICAgICBtTGlzdCA9IGxpc3RWaWV3OwotICAgICAgICBtT3ZlcmxheSA9IGxpc3RWaWV3LmdldE92ZXJsYXkoKTsKKyAgICAgICAgbU9sZEl0ZW1Db3VudCA9IGxpc3RWaWV3LmdldENvdW50KCk7CisgICAgICAgIG1PbGRDaGlsZENvdW50ID0gbGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpOwogCiAgICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IGxpc3RWaWV3LmdldENvbnRleHQoKTsKICAgICAgICAgbVNjYWxlZFRvdWNoU2xvcCA9IFZpZXdDb25maWd1cmF0aW9uLmdldChjb250ZXh0KS5nZXRTY2FsZWRUb3VjaFNsb3AoKTsKKyAgICAgICAgbVNjcm9sbEJhclN0eWxlID0gbGlzdFZpZXcuZ2V0U2Nyb2xsQmFyU3R5bGUoKTsKIAotICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgZmluYWwgVHlwZWRBcnJheSB0YSA9IGNvbnRleHQuZ2V0VGhlbWUoKS5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKEFUVFJTKTsKKyAgICAgICAgbVNjcm9sbENvbXBsZXRlZCA9IHRydWU7CisgICAgICAgIG1TdGF0ZSA9IFNUQVRFX1ZJU0lCTEU7CisgICAgICAgIG1NYXRjaERyYWdQb3NpdGlvbiA9CisgICAgICAgICAgICAgICAgY29udGV4dC5nZXRBcHBsaWNhdGlvbkluZm8oKS50YXJnZXRTZGtWZXJzaW9uID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuSE9ORVlDT01COwogCi0gICAgICAgIGZpbmFsIEltYWdlVmlldyB0cmFja0ltYWdlID0gbmV3IEltYWdlVmlldyhjb250ZXh0KTsKLSAgICAgICAgbVRyYWNrSW1hZ2UgPSB0cmFja0ltYWdlOworICAgICAgICBtVHJhY2tJbWFnZSA9IG5ldyBJbWFnZVZpZXcoY29udGV4dCk7CisgICAgICAgIG1UcmFja0ltYWdlLnNldFNjYWxlVHlwZShTY2FsZVR5cGUuRklUX1hZKTsKKyAgICAgICAgbVRodW1iSW1hZ2UgPSBuZXcgSW1hZ2VWaWV3KGNvbnRleHQpOworICAgICAgICBtVGh1bWJJbWFnZS5zZXRTY2FsZVR5cGUoU2NhbGVUeXBlLkZJVF9YWSk7CisgICAgICAgIG1QcmV2aWV3SW1hZ2UgPSBuZXcgVmlldyhjb250ZXh0KTsKKyAgICAgICAgbVByZXZpZXdJbWFnZS5zZXRBbHBoYSgwZik7CiAKKyAgICAgICAgbVByaW1hcnlUZXh0ID0gY3JlYXRlUHJldmlld1RleHRWaWV3KGNvbnRleHQpOworICAgICAgICBtU2Vjb25kYXJ5VGV4dCA9IGNyZWF0ZVByZXZpZXdUZXh0Vmlldyhjb250ZXh0KTsKKworICAgICAgICBzZXRTdHlsZShzdHlsZVJlc0lkKTsKKworICAgICAgICBmaW5hbCBWaWV3R3JvdXBPdmVybGF5IG92ZXJsYXkgPSBsaXN0Vmlldy5nZXRPdmVybGF5KCk7CisgICAgICAgIG1PdmVybGF5ID0gb3ZlcmxheTsKKyAgICAgICAgb3ZlcmxheS5hZGQobVRyYWNrSW1hZ2UpOworICAgICAgICBvdmVybGF5LmFkZChtVGh1bWJJbWFnZSk7CisgICAgICAgIG92ZXJsYXkuYWRkKG1QcmV2aWV3SW1hZ2UpOworICAgICAgICBvdmVybGF5LmFkZChtUHJpbWFyeVRleHQpOworICAgICAgICBvdmVybGF5LmFkZChtU2Vjb25kYXJ5VGV4dCk7CisKKyAgICAgICAgZ2V0U2VjdGlvbnNGcm9tSW5kZXhlcigpOworICAgICAgICB1cGRhdGVMb25nTGlzdChtT2xkQ2hpbGRDb3VudCwgbU9sZEl0ZW1Db3VudCk7CisgICAgICAgIHNldFNjcm9sbGJhclBvc2l0aW9uKGxpc3RWaWV3LmdldFZlcnRpY2FsU2Nyb2xsYmFyUG9zaXRpb24oKSk7CisgICAgICAgIHBvc3RBdXRvSGlkZSgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVBcHBlYXJhbmNlKCkgeworICAgICAgICBmaW5hbCBDb250ZXh0IGNvbnRleHQgPSBtTGlzdC5nZXRDb250ZXh0KCk7CiAgICAgICAgIGludCB3aWR0aCA9IDA7CiAKICAgICAgICAgLy8gQWRkIHRyYWNrIHRvIG92ZXJsYXkgaWYgaXQgaGFzIGFuIGltYWdlLgotICAgICAgICBmaW5hbCBEcmF3YWJsZSB0cmFja0RyYXdhYmxlID0gdGEuZ2V0RHJhd2FibGUoVFJBQ0tfRFJBV0FCTEUpOwotICAgICAgICBpZiAodHJhY2tEcmF3YWJsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtSGFzVHJhY2tJbWFnZSA9IHRydWU7Ci0gICAgICAgICAgICB0cmFja0ltYWdlLnNldEJhY2tncm91bmQodHJhY2tEcmF3YWJsZSk7Ci0gICAgICAgICAgICBtT3ZlcmxheS5hZGQodHJhY2tJbWFnZSk7Ci0gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCB0cmFja0RyYXdhYmxlLmdldEludHJpbnNpY1dpZHRoKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUhhc1RyYWNrSW1hZ2UgPSBmYWxzZTsKKyAgICAgICAgbVRyYWNrSW1hZ2Uuc2V0SW1hZ2VEcmF3YWJsZShtVHJhY2tEcmF3YWJsZSk7CisgICAgICAgIGlmIChtVHJhY2tEcmF3YWJsZSAhPSBudWxsKSB7CisgICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBtVHJhY2tEcmF3YWJsZS5nZXRJbnRyaW5zaWNXaWR0aCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGZpbmFsIEltYWdlVmlldyB0aHVtYkltYWdlID0gbmV3IEltYWdlVmlldyhjb250ZXh0KTsKLSAgICAgICAgbVRodW1iSW1hZ2UgPSB0aHVtYkltYWdlOwotCiAgICAgICAgIC8vIEFkZCB0aHVtYiB0byBvdmVybGF5IGlmIGl0IGhhcyBhbiBpbWFnZS4KLSAgICAgICAgZmluYWwgRHJhd2FibGUgdGh1bWJEcmF3YWJsZSA9IHRhLmdldERyYXdhYmxlKFRIVU1CX0RSQVdBQkxFKTsKLSAgICAgICAgaWYgKHRodW1iRHJhd2FibGUgIT0gbnVsbCkgewotICAgICAgICAgICAgdGh1bWJJbWFnZS5zZXRJbWFnZURyYXdhYmxlKHRodW1iRHJhd2FibGUpOwotICAgICAgICAgICAgbU92ZXJsYXkuYWRkKHRodW1iSW1hZ2UpOwotICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgdGh1bWJEcmF3YWJsZS5nZXRJbnRyaW5zaWNXaWR0aCgpKTsKKyAgICAgICAgbVRodW1iSW1hZ2Uuc2V0SW1hZ2VEcmF3YWJsZShtVGh1bWJEcmF3YWJsZSk7CisgICAgICAgIG1UaHVtYkltYWdlLnNldE1pbmltdW1XaWR0aChtVGh1bWJNaW5XaWR0aCk7CisgICAgICAgIG1UaHVtYkltYWdlLnNldE1pbmltdW1IZWlnaHQobVRodW1iTWluSGVpZ2h0KTsKKyAgICAgICAgaWYgKG1UaHVtYkRyYXdhYmxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIG1UaHVtYkRyYXdhYmxlLmdldEludHJpbnNpY1dpZHRoKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCBhcHBseSBtaW5pbXVtIHRodW1iIHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgICAgIGlmICh0aHVtYkRyYXdhYmxlLmdldEludHJpbnNpY1dpZHRoKCkgPD0gMCB8fCB0aHVtYkRyYXdhYmxlLmdldEludHJpbnNpY0hlaWdodCgpIDw9IDApIHsKLSAgICAgICAgICAgIGZpbmFsIGludCBtaW5XaWR0aCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5mYXN0c2Nyb2xsX3RodW1iX3dpZHRoKTsKLSAgICAgICAgICAgIHRodW1iSW1hZ2Uuc2V0TWluaW11bVdpZHRoKG1pbldpZHRoKTsKLSAgICAgICAgICAgIHRodW1iSW1hZ2Uuc2V0TWluaW11bUhlaWdodCgKLSAgICAgICAgICAgICAgICAgICAgcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmZhc3RzY3JvbGxfdGh1bWJfaGVpZ2h0KSk7Ci0gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBtaW5XaWR0aCk7CisgICAgICAgIC8vIEFjY291bnQgZm9yIG1pbmltdW0gdGh1bWIgd2lkdGguCisgICAgICAgIG1XaWR0aCA9IE1hdGgubWF4KHdpZHRoLCBtVGh1bWJNaW5XaWR0aCk7CisKKyAgICAgICAgbVByZXZpZXdJbWFnZS5zZXRNaW5pbXVtV2lkdGgobVByZXZpZXdNaW5XaWR0aCk7CisgICAgICAgIG1QcmV2aWV3SW1hZ2Uuc2V0TWluaW11bUhlaWdodChtUHJldmlld01pbkhlaWdodCk7CisKKyAgICAgICAgaWYgKG1UZXh0QXBwZWFyYW5jZSAhPSAwKSB7CisgICAgICAgICAgICBtUHJpbWFyeVRleHQuc2V0VGV4dEFwcGVhcmFuY2UoY29udGV4dCwgbVRleHRBcHBlYXJhbmNlKTsKKyAgICAgICAgICAgIG1TZWNvbmRhcnlUZXh0LnNldFRleHRBcHBlYXJhbmNlKGNvbnRleHQsIG1UZXh0QXBwZWFyYW5jZSk7CiAgICAgICAgIH0KIAotICAgICAgICBtV2lkdGggPSB3aWR0aDsKKyAgICAgICAgaWYgKG1UZXh0Q29sb3IgIT0gbnVsbCkgeworICAgICAgICAgICAgbVByaW1hcnlUZXh0LnNldFRleHRDb2xvcihtVGV4dENvbG9yKTsKKyAgICAgICAgICAgIG1TZWNvbmRhcnlUZXh0LnNldFRleHRDb2xvcihtVGV4dENvbG9yKTsKKyAgICAgICAgfQogCi0gICAgICAgIGZpbmFsIGludCBwcmV2aWV3U2l6ZSA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5mYXN0c2Nyb2xsX292ZXJsYXlfc2l6ZSk7Ci0gICAgICAgIG1QcmV2aWV3SW1hZ2UgPSBuZXcgSW1hZ2VWaWV3KGNvbnRleHQpOwotICAgICAgICBtUHJldmlld0ltYWdlLnNldE1pbmltdW1XaWR0aChwcmV2aWV3U2l6ZSk7Ci0gICAgICAgIG1QcmV2aWV3SW1hZ2Uuc2V0TWluaW11bUhlaWdodChwcmV2aWV3U2l6ZSk7Ci0gICAgICAgIG1QcmV2aWV3SW1hZ2Uuc2V0QWxwaGEoMGYpOwotICAgICAgICBtT3ZlcmxheS5hZGQobVByZXZpZXdJbWFnZSk7CisgICAgICAgIGlmIChtVGV4dFNpemUgPiAwKSB7CisgICAgICAgICAgICBtUHJpbWFyeVRleHQuc2V0VGV4dFNpemUoVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfUFgsIG1UZXh0U2l6ZSk7CisgICAgICAgICAgICBtU2Vjb25kYXJ5VGV4dC5zZXRUZXh0U2l6ZShUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9QWCwgbVRleHRTaXplKTsKKyAgICAgICAgfQogCi0gICAgICAgIG1QcmV2aWV3UGFkZGluZyA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5mYXN0c2Nyb2xsX292ZXJsYXlfcGFkZGluZyk7Ci0KLSAgICAgICAgZmluYWwgaW50IHRleHRNaW5TaXplID0gTWF0aC5tYXgoMCwgcHJldmlld1NpemUgLSBtUHJldmlld1BhZGRpbmcpOwotICAgICAgICBtUHJpbWFyeVRleHQgPSBjcmVhdGVQcmV2aWV3VGV4dFZpZXcoY29udGV4dCwgdGEpOworICAgICAgICBmaW5hbCBpbnQgdGV4dE1pblNpemUgPSBNYXRoLm1heCgwLCBtUHJldmlld01pbkhlaWdodCk7CiAgICAgICAgIG1QcmltYXJ5VGV4dC5zZXRNaW5pbXVtV2lkdGgodGV4dE1pblNpemUpOwogICAgICAgICBtUHJpbWFyeVRleHQuc2V0TWluaW11bUhlaWdodCh0ZXh0TWluU2l6ZSk7Ci0gICAgICAgIG1PdmVybGF5LmFkZChtUHJpbWFyeVRleHQpOwotICAgICAgICBtU2Vjb25kYXJ5VGV4dCA9IGNyZWF0ZVByZXZpZXdUZXh0Vmlldyhjb250ZXh0LCB0YSk7CiAgICAgICAgIG1TZWNvbmRhcnlUZXh0LnNldE1pbmltdW1XaWR0aCh0ZXh0TWluU2l6ZSk7CiAgICAgICAgIG1TZWNvbmRhcnlUZXh0LnNldE1pbmltdW1IZWlnaHQodGV4dE1pblNpemUpOwotICAgICAgICBtT3ZlcmxheS5hZGQobVNlY29uZGFyeVRleHQpOwogCi0gICAgICAgIG1QcmV2aWV3UmVzSWRbUFJFVklFV19MRUZUXSA9IHRhLmdldFJlc291cmNlSWQoUFJFVklFV19CQUNLR1JPVU5EX0xFRlQsIDApOwotICAgICAgICBtUHJldmlld1Jlc0lkW1BSRVZJRVdfUklHSFRdID0gdGEuZ2V0UmVzb3VyY2VJZChQUkVWSUVXX0JBQ0tHUk9VTkRfUklHSFQsIDApOwotICAgICAgICBtT3ZlcmxheVBvc2l0aW9uID0gdGEuZ2V0SW50KE9WRVJMQVlfUE9TSVRJT04sIE9WRVJMQVlfRkxPQVRJTkcpOwotICAgICAgICB0YS5yZWN5Y2xlKCk7Ci0KLSAgICAgICAgbVNjcm9sbEJhclN0eWxlID0gbGlzdFZpZXcuZ2V0U2Nyb2xsQmFyU3R5bGUoKTsKLSAgICAgICAgbVNjcm9sbENvbXBsZXRlZCA9IHRydWU7Ci0gICAgICAgIG1TdGF0ZSA9IFNUQVRFX1ZJU0lCTEU7Ci0gICAgICAgIG1NYXRjaERyYWdQb3NpdGlvbiA9IGNvbnRleHQuZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbgotICAgICAgICAgICAgICAgID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuSE9ORVlDT01COwotCi0gICAgICAgIGdldFNlY3Rpb25zRnJvbUluZGV4ZXIoKTsKICAgICAgICAgcmVmcmVzaERyYXdhYmxlUHJlc3NlZFN0YXRlKCk7Ci0gICAgICAgIHVwZGF0ZUxvbmdMaXN0KGxpc3RWaWV3LmdldENoaWxkQ291bnQoKSwgbGlzdFZpZXcuZ2V0Q291bnQoKSk7Ci0gICAgICAgIHNldFNjcm9sbGJhclBvc2l0aW9uKG1MaXN0LmdldFZlcnRpY2FsU2Nyb2xsYmFyUG9zaXRpb24oKSk7Ci0gICAgICAgIHBvc3RBdXRvSGlkZSgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFN0eWxlKGludCByZXNJZCkgeworICAgICAgICBmaW5hbCBDb250ZXh0IGNvbnRleHQgPSBtTGlzdC5nZXRDb250ZXh0KCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgdGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMobnVsbCwKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GYXN0U2Nyb2xsLCBhbmRyb2lkLlIuYXR0ci5mYXN0U2Nyb2xsU3R5bGUsIHJlc0lkKTsKKyAgICAgICAgZmluYWwgaW50IE4gPSB0YS5nZXRJbmRleENvdW50KCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgaW5kZXggPSB0YS5nZXRJbmRleChpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjYXNlIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZhc3RTY3JvbGxfcG9zaXRpb246CisgICAgICAgICAgICAgICAgICAgIG1PdmVybGF5UG9zaXRpb24gPSB0YS5nZXRJbnQoaW5kZXgsIE9WRVJMQVlfRkxPQVRJTkcpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZhc3RTY3JvbGxfYmFja2dyb3VuZExlZnQ6CisgICAgICAgICAgICAgICAgICAgIG1QcmV2aWV3UmVzSWRbUFJFVklFV19MRUZUXSA9IHRhLmdldFJlc291cmNlSWQoaW5kZXgsIDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZhc3RTY3JvbGxfYmFja2dyb3VuZFJpZ2h0OgorICAgICAgICAgICAgICAgICAgICBtUHJldmlld1Jlc0lkW1BSRVZJRVdfUklHSFRdID0gdGEuZ2V0UmVzb3VyY2VJZChpbmRleCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRmFzdFNjcm9sbF90aHVtYkRyYXdhYmxlOgorICAgICAgICAgICAgICAgICAgICBtVGh1bWJEcmF3YWJsZSA9IHRhLmdldERyYXdhYmxlKGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GYXN0U2Nyb2xsX3RyYWNrRHJhd2FibGU6CisgICAgICAgICAgICAgICAgICAgIG1UcmFja0RyYXdhYmxlID0gdGEuZ2V0RHJhd2FibGUoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZhc3RTY3JvbGxfdGV4dEFwcGVhcmFuY2U6CisgICAgICAgICAgICAgICAgICAgIG1UZXh0QXBwZWFyYW5jZSA9IHRhLmdldFJlc291cmNlSWQoaW5kZXgsIDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZhc3RTY3JvbGxfdGV4dENvbG9yOgorICAgICAgICAgICAgICAgICAgICBtVGV4dENvbG9yID0gdGEuZ2V0Q29sb3JTdGF0ZUxpc3QoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZhc3RTY3JvbGxfdGV4dFNpemU6CisgICAgICAgICAgICAgICAgICAgIG1UZXh0U2l6ZSA9IHRhLmdldERpbWVuc2lvblBpeGVsU2l6ZShpbmRleCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRmFzdFNjcm9sbF9taW5XaWR0aDoKKyAgICAgICAgICAgICAgICAgICAgbVByZXZpZXdNaW5XaWR0aCA9IHRhLmdldERpbWVuc2lvblBpeGVsU2l6ZShpbmRleCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRmFzdFNjcm9sbF9taW5IZWlnaHQ6CisgICAgICAgICAgICAgICAgICAgIG1QcmV2aWV3TWluSGVpZ2h0ID0gdGEuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKGluZGV4LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GYXN0U2Nyb2xsX3RodW1iTWluV2lkdGg6CisgICAgICAgICAgICAgICAgICAgIG1UaHVtYk1pbldpZHRoID0gdGEuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKGluZGV4LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GYXN0U2Nyb2xsX3RodW1iTWluSGVpZ2h0OgorICAgICAgICAgICAgICAgICAgICBtVGh1bWJNaW5IZWlnaHQgPSB0YS5nZXREaW1lbnNpb25QaXhlbFNpemUoaW5kZXgsIDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZhc3RTY3JvbGxfcGFkZGluZzoKKyAgICAgICAgICAgICAgICAgICAgbVByZXZpZXdQYWRkaW5nID0gdGEuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKGluZGV4LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zNDgsNyArMzg3LDcgQEAKICAgICAgICAgaWYgKG1FbmFibGVkICE9IGVuYWJsZWQpIHsKICAgICAgICAgICAgIG1FbmFibGVkID0gZW5hYmxlZDsKIAotICAgICAgICAgICAgb25TdGF0ZURlcGVuZGVuY3lDaGFuZ2VkKCk7CisgICAgICAgICAgICBvblN0YXRlRGVwZW5kZW5jeUNoYW5nZWQodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM2Niw3ICs0MDUsNyBAQAogICAgICAgICBpZiAobUFsd2F5c1Nob3cgIT0gYWx3YXlzU2hvdykgewogICAgICAgICAgICAgbUFsd2F5c1Nob3cgPSBhbHdheXNTaG93OwogCi0gICAgICAgICAgICBvblN0YXRlRGVwZW5kZW5jeUNoYW5nZWQoKTsKKyAgICAgICAgICAgIG9uU3RhdGVEZXBlbmRlbmN5Q2hhbmdlZChmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM4MCwxMyArNDE5LDE4IEBACiAKICAgICAvKioKICAgICAgKiBDYWxsZWQgd2hlbiBvbmUgb2YgdGhlIHZhcmlhYmxlcyBhZmZlY3RpbmcgZW5hYmxlZCBzdGF0ZSBjaGFuZ2VzLgorICAgICAqCisgICAgICogQHBhcmFtIHBlZWtJZkVuYWJsZWQgd2hldGhlciB0aGUgdGh1bWIgc2hvdWxkIHBlZWssIGlmIGVuYWJsZWQKICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgb25TdGF0ZURlcGVuZGVuY3lDaGFuZ2VkKCkgeworICAgIHByaXZhdGUgdm9pZCBvblN0YXRlRGVwZW5kZW5jeUNoYW5nZWQoYm9vbGVhbiBwZWVrSWZFbmFibGVkKSB7CiAgICAgICAgIGlmIChpc0VuYWJsZWQoKSkgewogICAgICAgICAgICAgaWYgKGlzQWx3YXlzU2hvd0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgIHNldFN0YXRlKFNUQVRFX1ZJU0lCTEUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtU3RhdGUgPT0gU1RBVEVfVklTSUJMRSkgewogICAgICAgICAgICAgICAgIHBvc3RBdXRvSGlkZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChwZWVrSWZFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgc2V0U3RhdGUoU1RBVEVfVklTSUJMRSk7CisgICAgICAgICAgICAgICAgcG9zdEF1dG9IaWRlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdG9wKCk7CkBAIC00NDUsNDEgKzQ4OSwzOCBAQAogICAgICAgICB1cGRhdGVMYXlvdXQoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBvbkl0ZW1Db3VudENoYW5nZWQoaW50IHRvdGFsSXRlbUNvdW50KSB7Ci0gICAgICAgIGZpbmFsIGludCB2aXNpYmxlSXRlbUNvdW50ID0gbUxpc3QuZ2V0Q2hpbGRDb3VudCgpOwotICAgICAgICBmaW5hbCBib29sZWFuIGhhc01vcmVJdGVtcyA9IHRvdGFsSXRlbUNvdW50IC0gdmlzaWJsZUl0ZW1Db3VudCA+IDA7Ci0gICAgICAgIGlmIChoYXNNb3JlSXRlbXMgJiYgbVN0YXRlICE9IFNUQVRFX0RSQUdHSU5HKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgZmlyc3RWaXNpYmxlSXRlbSA9IG1MaXN0LmdldEZpcnN0VmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBzZXRUaHVtYlBvcyhnZXRQb3NGcm9tSXRlbUNvdW50KGZpcnN0VmlzaWJsZUl0ZW0sIHZpc2libGVJdGVtQ291bnQsIHRvdGFsSXRlbUNvdW50KSk7Ci0gICAgICAgIH0KKyAgICBwdWJsaWMgdm9pZCBvbkl0ZW1Db3VudENoYW5nZWQoaW50IGNoaWxkQ291bnQsIGludCBpdGVtQ291bnQpIHsKKyAgICAgICAgaWYgKG1PbGRJdGVtQ291bnQgIT0gaXRlbUNvdW50IHx8IG1PbGRDaGlsZENvdW50ICE9IGNoaWxkQ291bnQpIHsKKyAgICAgICAgICAgIG1PbGRJdGVtQ291bnQgPSBpdGVtQ291bnQ7CisgICAgICAgICAgICBtT2xkQ2hpbGRDb3VudCA9IGNoaWxkQ291bnQ7CiAKLSAgICAgICAgdXBkYXRlTG9uZ0xpc3QodmlzaWJsZUl0ZW1Db3VudCwgdG90YWxJdGVtQ291bnQpOworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBoYXNNb3JlSXRlbXMgPSBpdGVtQ291bnQgLSBjaGlsZENvdW50ID4gMDsKKyAgICAgICAgICAgIGlmIChoYXNNb3JlSXRlbXMgJiYgbVN0YXRlICE9IFNUQVRFX0RSQUdHSU5HKSB7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGZpcnN0VmlzaWJsZUl0ZW0gPSBtTGlzdC5nZXRGaXJzdFZpc2libGVQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIHNldFRodW1iUG9zKGdldFBvc0Zyb21JdGVtQ291bnQoZmlyc3RWaXNpYmxlSXRlbSwgY2hpbGRDb3VudCwgaXRlbUNvdW50KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVwZGF0ZUxvbmdMaXN0KGNoaWxkQ291bnQsIGl0ZW1Db3VudCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlTG9uZ0xpc3QoaW50IHZpc2libGVJdGVtQ291bnQsIGludCB0b3RhbEl0ZW1Db3VudCkgewotICAgICAgICBmaW5hbCBib29sZWFuIGxvbmdMaXN0ID0gdmlzaWJsZUl0ZW1Db3VudCA+IDAKLSAgICAgICAgICAgICAgICAmJiB0b3RhbEl0ZW1Db3VudCAvIHZpc2libGVJdGVtQ291bnQgPj0gTUlOX1BBR0VTOworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVMb25nTGlzdChpbnQgY2hpbGRDb3VudCwgaW50IGl0ZW1Db3VudCkgeworICAgICAgICBmaW5hbCBib29sZWFuIGxvbmdMaXN0ID0gY2hpbGRDb3VudCA+IDAgJiYgaXRlbUNvdW50IC8gY2hpbGRDb3VudCA+PSBNSU5fUEFHRVM7CiAgICAgICAgIGlmIChtTG9uZ0xpc3QgIT0gbG9uZ0xpc3QpIHsKICAgICAgICAgICAgIG1Mb25nTGlzdCA9IGxvbmdMaXN0OwogCi0gICAgICAgICAgICBvblN0YXRlRGVwZW5kZW5jeUNoYW5nZWQoKTsKKyAgICAgICAgICAgIG9uU3RhdGVEZXBlbmRlbmN5Q2hhbmdlZChmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgdmlldyBpbnRvIHdoaWNoIHByZXZpZXcgdGV4dCBjYW4gYmUgcGxhY2VkLgogICAgICAqLwotICAgIHByaXZhdGUgVGV4dFZpZXcgY3JlYXRlUHJldmlld1RleHRWaWV3KENvbnRleHQgY29udGV4dCwgVHlwZWRBcnJheSB0YSkgeworICAgIHByaXZhdGUgVGV4dFZpZXcgY3JlYXRlUHJldmlld1RleHRWaWV3KENvbnRleHQgY29udGV4dCkgewogICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgcGFyYW1zID0gbmV3IExheW91dFBhcmFtcygKICAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULCBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKTsKLSAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgICAgIGZpbmFsIGludCBtaW5TaXplID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmZhc3RzY3JvbGxfb3ZlcmxheV9zaXplKTsKLSAgICAgICAgZmluYWwgQ29sb3JTdGF0ZUxpc3QgdGV4dENvbG9yID0gdGEuZ2V0Q29sb3JTdGF0ZUxpc3QoVEVYVF9DT0xPUik7Ci0gICAgICAgIGZpbmFsIGZsb2F0IHRleHRTaXplID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmZhc3RzY3JvbGxfb3ZlcmxheV90ZXh0X3NpemUpOwogICAgICAgICBmaW5hbCBUZXh0VmlldyB0ZXh0VmlldyA9IG5ldyBUZXh0Vmlldyhjb250ZXh0KTsKICAgICAgICAgdGV4dFZpZXcuc2V0TGF5b3V0UGFyYW1zKHBhcmFtcyk7Ci0gICAgICAgIHRleHRWaWV3LnNldFRleHRDb2xvcih0ZXh0Q29sb3IpOwotICAgICAgICB0ZXh0Vmlldy5zZXRUZXh0U2l6ZShUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9QWCwgdGV4dFNpemUpOwogICAgICAgICB0ZXh0Vmlldy5zZXRTaW5nbGVMaW5lKHRydWUpOwogICAgICAgICB0ZXh0Vmlldy5zZXRFbGxpcHNpemUoVHJ1bmNhdGVBdC5NSURETEUpOwogICAgICAgICB0ZXh0Vmlldy5zZXRHcmF2aXR5KEdyYXZpdHkuQ0VOVEVSKTsKQEAgLTYwMyw3ICs2NDQsNyBAQAogICAgICAgICB2aWV3Lm1lYXN1cmUod2lkdGhNZWFzdXJlU3BlYywgaGVpZ2h0TWVhc3VyZVNwZWMpOwogCiAgICAgICAgIC8vIEFsaWduIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0LgotICAgICAgICBmaW5hbCBpbnQgd2lkdGggPSB2aWV3LmdldE1lYXN1cmVkV2lkdGgoKTsKKyAgICAgICAgZmluYWwgaW50IHdpZHRoID0gTWF0aC5taW4oYWRqTWF4V2lkdGgsIHZpZXcuZ2V0TWVhc3VyZWRXaWR0aCgpKTsKICAgICAgICAgZmluYWwgaW50IGxlZnQ7CiAgICAgICAgIGZpbmFsIGludCByaWdodDsKICAgICAgICAgaWYgKG1MYXlvdXRGcm9tUmlnaHQpIHsKQEAgLTg2NCwxNSArOTA1LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIC5nZXRBZGFwdGVyKCk7CiAgICAgICAgICAgICBpZiAoZXhwQWRhcHRlciBpbnN0YW5jZW9mIFNlY3Rpb25JbmRleGVyKSB7CiAgICAgICAgICAgICAgICAgbVNlY3Rpb25JbmRleGVyID0gKFNlY3Rpb25JbmRleGVyKSBleHBBZGFwdGVyOwotICAgICAgICAgICAgICAgIG1MaXN0QWRhcHRlciA9IChCYXNlQWRhcHRlcikgYWRhcHRlcjsKKyAgICAgICAgICAgICAgICBtTGlzdEFkYXB0ZXIgPSBhZGFwdGVyOwogICAgICAgICAgICAgICAgIG1TZWN0aW9ucyA9IG1TZWN0aW9uSW5kZXhlci5nZXRTZWN0aW9ucygpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBTZWN0aW9uSW5kZXhlcikgewotICAgICAgICAgICAgbUxpc3RBZGFwdGVyID0gKEJhc2VBZGFwdGVyKSBhZGFwdGVyOworICAgICAgICAgICAgbUxpc3RBZGFwdGVyID0gYWRhcHRlcjsKICAgICAgICAgICAgIG1TZWN0aW9uSW5kZXhlciA9IChTZWN0aW9uSW5kZXhlcikgYWRhcHRlcjsKICAgICAgICAgICAgIG1TZWN0aW9ucyA9IG1TZWN0aW9uSW5kZXhlci5nZXRTZWN0aW9ucygpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUxpc3RBZGFwdGVyID0gKEJhc2VBZGFwdGVyKSBhZGFwdGVyOworICAgICAgICAgICAgbUxpc3RBZGFwdGVyID0gYWRhcHRlcjsKICAgICAgICAgICAgIG1TZWN0aW9ucyA9IG51bGw7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDIwLDcgKzEwNjEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgZmluYWwgUmVjdCBib3VuZHMgPSBtVGVtcEJvdW5kczsKLSAgICAgICAgZmluYWwgSW1hZ2VWaWV3IHByZXZpZXcgPSBtUHJldmlld0ltYWdlOworICAgICAgICBmaW5hbCBWaWV3IHByZXZpZXcgPSBtUHJldmlld0ltYWdlOwogICAgICAgICBmaW5hbCBUZXh0VmlldyBzaG93aW5nOwogICAgICAgICBmaW5hbCBUZXh0VmlldyB0YXJnZXQ7CiAgICAgICAgIGlmIChtU2hvd2luZ1ByaW1hcnkpIHsKQEAgLTEwNDYsMTAgKzEwODcsMTAgQEAKICAgICAgICAgaGlkZVNob3dpbmcuYWRkTGlzdGVuZXIobVN3aXRjaFByaW1hcnlMaXN0ZW5lcik7CiAKICAgICAgICAgLy8gQXBwbHkgcHJldmlldyBpbWFnZSBwYWRkaW5nIGFuZCBhbmltYXRlIGJvdW5kcywgaWYgbmVjZXNzYXJ5LgotICAgICAgICBib3VuZHMubGVmdCAtPSBtUHJldmlld0ltYWdlLmdldFBhZGRpbmdMZWZ0KCk7Ci0gICAgICAgIGJvdW5kcy50b3AgLT0gbVByZXZpZXdJbWFnZS5nZXRQYWRkaW5nVG9wKCk7Ci0gICAgICAgIGJvdW5kcy5yaWdodCArPSBtUHJldmlld0ltYWdlLmdldFBhZGRpbmdSaWdodCgpOwotICAgICAgICBib3VuZHMuYm90dG9tICs9IG1QcmV2aWV3SW1hZ2UuZ2V0UGFkZGluZ0JvdHRvbSgpOworICAgICAgICBib3VuZHMubGVmdCAtPSBwcmV2aWV3LmdldFBhZGRpbmdMZWZ0KCk7CisgICAgICAgIGJvdW5kcy50b3AgLT0gcHJldmlldy5nZXRQYWRkaW5nVG9wKCk7CisgICAgICAgIGJvdW5kcy5yaWdodCArPSBwcmV2aWV3LmdldFBhZGRpbmdSaWdodCgpOworICAgICAgICBib3VuZHMuYm90dG9tICs9IHByZXZpZXcuZ2V0UGFkZGluZ0JvdHRvbSgpOwogICAgICAgICBmaW5hbCBBbmltYXRvciByZXNpemVQcmV2aWV3ID0gYW5pbWF0ZUJvdW5kcyhwcmV2aWV3LCBib3VuZHMpOwogICAgICAgICByZXNpemVQcmV2aWV3LnNldER1cmF0aW9uKERVUkFUSU9OX1JFU0laRSk7CiAKQEAgLTEwOTcsOCArMTEzOCw4IEBACiAgICAgICAgIGZpbmFsIGludCB0b3AgPSBjb250YWluZXIudG9wOwogICAgICAgICBmaW5hbCBpbnQgYm90dG9tID0gY29udGFpbmVyLmJvdHRvbTsKIAotICAgICAgICBmaW5hbCBJbWFnZVZpZXcgdHJhY2tJbWFnZSA9IG1UcmFja0ltYWdlOwotICAgICAgICBmaW5hbCBJbWFnZVZpZXcgdGh1bWJJbWFnZSA9IG1UaHVtYkltYWdlOworICAgICAgICBmaW5hbCBWaWV3IHRyYWNrSW1hZ2UgPSBtVHJhY2tJbWFnZTsKKyAgICAgICAgZmluYWwgVmlldyB0aHVtYkltYWdlID0gbVRodW1iSW1hZ2U7CiAgICAgICAgIGZpbmFsIGZsb2F0IG1pbiA9IHRyYWNrSW1hZ2UuZ2V0VG9wKCk7CiAgICAgICAgIGZpbmFsIGZsb2F0IG1heCA9IHRyYWNrSW1hZ2UuZ2V0Qm90dG9tKCk7CiAgICAgICAgIGZpbmFsIGZsb2F0IG9mZnNldCA9IG1pbjsKQEAgLTExMDksNyArMTE1MCw3IEBACiAgICAgICAgIGZpbmFsIGZsb2F0IHByZXZpZXdQb3MgPSBtT3ZlcmxheVBvc2l0aW9uID09IE9WRVJMQVlfQVRfVEhVTUIgPyB0aHVtYk1pZGRsZSA6IDA7CiAKICAgICAgICAgLy8gQ2VudGVyIHRoZSBwcmV2aWV3IG9uIHRoZSB0aHVtYiwgY29uc3RyYWluZWQgdG8gdGhlIGxpc3QgYm91bmRzLgotICAgICAgICBmaW5hbCBJbWFnZVZpZXcgcHJldmlld0ltYWdlID0gbVByZXZpZXdJbWFnZTsKKyAgICAgICAgZmluYWwgVmlldyBwcmV2aWV3SW1hZ2UgPSBtUHJldmlld0ltYWdlOwogICAgICAgICBmaW5hbCBmbG9hdCBwcmV2aWV3SGFsZkhlaWdodCA9IHByZXZpZXdJbWFnZS5nZXRIZWlnaHQoKSAvIDJmOwogICAgICAgICBmaW5hbCBmbG9hdCBtaW5QID0gdG9wICsgcHJldmlld0hhbGZIZWlnaHQ7CiAgICAgICAgIGZpbmFsIGZsb2F0IG1heFAgPSBib3R0b20gLSBwcmV2aWV3SGFsZkhlaWdodDsKQEAgLTExMjIsMTEgKzExNjMsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgZmxvYXQgZ2V0UG9zRnJvbU1vdGlvbkV2ZW50KGZsb2F0IHkpIHsKLSAgICAgICAgZmluYWwgUmVjdCBjb250YWluZXIgPSBtQ29udGFpbmVyUmVjdDsKLSAgICAgICAgZmluYWwgaW50IHRvcCA9IGNvbnRhaW5lci50b3A7Ci0gICAgICAgIGZpbmFsIGludCBib3R0b20gPSBjb250YWluZXIuYm90dG9tOwotCi0gICAgICAgIGZpbmFsIEltYWdlVmlldyB0cmFja0ltYWdlID0gbVRyYWNrSW1hZ2U7CisgICAgICAgIGZpbmFsIFZpZXcgdHJhY2tJbWFnZSA9IG1UcmFja0ltYWdlOwogICAgICAgICBmaW5hbCBmbG9hdCBtaW4gPSB0cmFja0ltYWdlLmdldFRvcCgpOwogICAgICAgICBmaW5hbCBmbG9hdCBtYXggPSB0cmFja0ltYWdlLmdldEJvdHRvbSgpOwogICAgICAgICBmaW5hbCBmbG9hdCBvZmZzZXQgPSBtaW47CkBAIC0xMjI3LDggKzEyNjQsNyBAQAogICAgICAqIEBzZWUgI3N0YXJ0UGVuZGluZ0RyYWcoKQogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjYW5jZWxQZW5kaW5nRHJhZygpIHsKLSAgICAgICAgbUxpc3QucmVtb3ZlQ2FsbGJhY2tzKG1EZWZlclN0YXJ0RHJhZyk7Ci0gICAgICAgIG1IYXNQZW5kaW5nRHJhZyA9IGZhbHNlOworICAgICAgICBtUGVuZGluZ0RyYWcgPSAtMTsKICAgICB9CiAKICAgICAvKioKQEAgLTEyMzYsMTEgKzEyNzIsMTIgQEAKICAgICAgKiBzY3JvbGxpbmcsIHJhdGhlciB0aGFuIHRhcHBpbmcuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0UGVuZGluZ0RyYWcoKSB7Ci0gICAgICAgIG1IYXNQZW5kaW5nRHJhZyA9IHRydWU7Ci0gICAgICAgIG1MaXN0LnBvc3REZWxheWVkKG1EZWZlclN0YXJ0RHJhZywgVEFQX1RJTUVPVVQpOworICAgICAgICBtUGVuZGluZ0RyYWcgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSArIFRBUF9USU1FT1VUOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBiZWdpbkRyYWcoKSB7CisgICAgICAgIG1QZW5kaW5nRHJhZyA9IC0xOworCiAgICAgICAgIHNldFN0YXRlKFNUQVRFX0RSQUdHSU5HKTsKIAogICAgICAgICBpZiAobUxpc3RBZGFwdGVyID09IG51bGwgJiYgbUxpc3QgIT0gbnVsbCkgewpAQCAtMTI4MCw2ICsxMzE3LDEzIEBACiAgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9NT1ZFOgogICAgICAgICAgICAgICAgIGlmICghaXNQb2ludEluc2lkZShldi5nZXRYKCksIGV2LmdldFkoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FuY2VsUGVuZGluZ0RyYWcoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1QZW5kaW5nRHJhZyA+PSAwICYmIG1QZW5kaW5nRHJhZyA8PSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSkgeworICAgICAgICAgICAgICAgICAgICBiZWdpbkRyYWcoKTsKKworICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBwb3MgPSBnZXRQb3NGcm9tTW90aW9uRXZlbnQobUluaXRpYWxUb3VjaFkpOworICAgICAgICAgICAgICAgICAgICBzY3JvbGxUbyhwb3MpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvblRvdWNoRXZlbnQoZXYpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX1VQOgpAQCAtMTMxNCw3ICsxMzU4LDcgQEAKIAogICAgICAgICBzd2l0Y2ggKG1lLmdldEFjdGlvbk1hc2tlZCgpKSB7CiAgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDogewotICAgICAgICAgICAgICAgIGlmIChtSGFzUGVuZGluZ0RyYWcpIHsKKyAgICAgICAgICAgICAgICBpZiAobVBlbmRpbmdEcmFnID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgYSB0YXAgdG8gc2Nyb2xsLgogICAgICAgICAgICAgICAgICAgICBiZWdpbkRyYWcoKTsKIApAQCAtMTMyMiw3ICsxMzY2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgc2V0VGh1bWJQb3MocG9zKTsKICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG8ocG9zKTsKIAotICAgICAgICAgICAgICAgICAgICBjYW5jZWxQZW5kaW5nRHJhZygpOwogICAgICAgICAgICAgICAgICAgICAvLyBXaWxsIGhpdCB0aGUgU1RBVEVfRFJBR0dJTkcgY2hlY2sgYmVsb3cKICAgICAgICAgICAgICAgICB9CiAKQEAgLTEzNDMsMjAgKzEzODYsOSBAQAogICAgICAgICAgICAgfSBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRTogewotICAgICAgICAgICAgICAgIGlmIChtSGFzUGVuZGluZ0RyYWcgJiYgTWF0aC5hYnMobWUuZ2V0WSgpIC0gbUluaXRpYWxUb3VjaFkpID4gbVNjYWxlZFRvdWNoU2xvcCkgewotICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZShTVEFURV9EUkFHR0lORyk7CisgICAgICAgICAgICAgICAgaWYgKG1QZW5kaW5nRHJhZyA+PSAwICYmIE1hdGguYWJzKG1lLmdldFkoKSAtIG1Jbml0aWFsVG91Y2hZKSA+IG1TY2FsZWRUb3VjaFNsb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5EcmFnKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1MaXN0QWRhcHRlciA9PSBudWxsICYmIG1MaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFNlY3Rpb25zRnJvbUluZGV4ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtTGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTGlzdC5yZXF1ZXN0RGlzYWxsb3dJbnRlcmNlcHRUb3VjaEV2ZW50KHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbUxpc3QucmVwb3J0U2Nyb2xsU3RhdGVDaGFuZ2UoT25TY3JvbGxMaXN0ZW5lci5TQ1JPTExfU1RBVEVfVE9VQ0hfU0NST0xMKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNhbmNlbEZsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbmNlbFBlbmRpbmdEcmFnKCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdpbGwgaGl0IHRoZSBTVEFURV9EUkFHR0lORyBjaGVjayBiZWxvdwogICAgICAgICAgICAgICAgIH0KIApAQCAtMTM5Myw3ICsxNDI1LDcgQEAKICAgICAgKiBAcmV0dXJuIFdoZXRoZXIgdGhlIGNvb3JkaW5hdGUgaXMgaW5zaWRlIHRoZSBzY3JvbGxlcidzIGFjdGl2YXRpb24gYXJlYS4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNQb2ludEluc2lkZShmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIHJldHVybiBpc1BvaW50SW5zaWRlWCh4KSAmJiAobUhhc1RyYWNrSW1hZ2UgfHwgaXNQb2ludEluc2lkZVkoeSkpOworICAgICAgICByZXR1cm4gaXNQb2ludEluc2lkZVgoeCkgJiYgKG1UcmFja0RyYXdhYmxlICE9IG51bGwgfHwgaXNQb2ludEluc2lkZVkoeSkpOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc1BvaW50SW5zaWRlWChmbG9hdCB4KSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRnJhbWVMYXlvdXQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9GcmFtZUxheW91dC5qYXZhCmluZGV4IGQ5ZDRhZDcuLmIwMjkzMjggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9GcmFtZUxheW91dC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9GcmFtZUxheW91dC5qYXZhCkBAIC05NywxMSArOTcsMTUgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogCi0gICAgcHVibGljIEZyYW1lTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgRnJhbWVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GcmFtZUxheW91dCwKLSAgICAgICAgICAgICAgICAgICAgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBGcmFtZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZyYW1lTGF5b3V0LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtRm9yZWdyb3VuZEdyYXZpdHkgPSBhLmdldEludCgKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GcmFtZUxheW91dF9mb3JlZ3JvdW5kR3Jhdml0eSwgbUZvcmVncm91bmRHcmF2aXR5KTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9HYWxsZXJ5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR2FsbGVyeS5qYXZhCmluZGV4IDc4YmE2ZTAuLmY3YzgzOWYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9HYWxsZXJ5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0dhbGxlcnkuamF2YQpAQCAtMTk2LDE0ICsxOTYsMTggQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgUi5hdHRyLmdhbGxlcnlTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIEdhbGxlcnkoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBHYWxsZXJ5KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEdhbGxlcnkoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIAogICAgICAgICBtR2VzdHVyZURldGVjdG9yID0gbmV3IEdlc3R1cmVEZXRlY3Rvcihjb250ZXh0LCB0aGlzKTsKICAgICAgICAgbUdlc3R1cmVEZXRlY3Rvci5zZXRJc0xvbmdwcmVzc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdhbGxlcnksIGRlZlN0eWxlLCAwKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdhbGxlcnksIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIGludCBpbmRleCA9IGEuZ2V0SW50KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdhbGxlcnlfZ3Jhdml0eSwgLTEpOwogICAgICAgICBpZiAoaW5kZXggPj0gMCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0dyaWRMYXlvdXQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0LmphdmEKaW5kZXggNTRjYzNmNC4uODUxMTYwMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0dyaWRMYXlvdXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZExheW91dC5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKQEAgLTM1LDYgKzM2LDggQEAKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZW1vdGVWaWV3cy5SZW1vdGVWaWV3OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkFycmF5OwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKQEAgLTE2NSw2ICsxNjgsMTEgQEAKIAogICAgIC8vIFB1YmxpYyBjb25zdGFudHMKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoe0hPUklaT05UQUwsIFZFUlRJQ0FMfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgT3JpZW50YXRpb24ge30KKwogICAgIC8qKgogICAgICAqIFRoZSBob3Jpem9udGFsIG9yaWVudGF0aW9uLgogICAgICAqLwpAQCAtMTg2LDYgKzE5NCwxMSBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOREVGSU5FRCA9IEludGVnZXIuTUlOX1ZBTFVFOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7QUxJR05fQk9VTkRTLCBBTElHTl9NQVJHSU5TfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgQWxpZ25tZW50TW9kZSB7fQorCiAgICAgLyoqCiAgICAgICogVGhpcyBjb25zdGFudCBpcyBhbiB7QGxpbmsgI3NldEFsaWdubWVudE1vZGUoaW50KSBhbGlnbm1lbnRNb2RlfS4KICAgICAgKiBXaGVuIHRoZSB7QGNvZGUgYWxpZ25tZW50TW9kZX0gaXMgc2V0IHRvIHtAbGluayAjQUxJR05fQk9VTkRTfSwgYWxpZ25tZW50CkBAIC0yNjIsMTMgKzI3NSwyMyBAQAogCiAgICAgLy8gQ29uc3RydWN0b3JzCiAKLSAgICAvKioKLSAgICAgKiB7QGluaGVyaXREb2N9Ci0gICAgICovCi0gICAgcHVibGljIEdyaWRMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBHcmlkTGF5b3V0KENvbnRleHQgY29udGV4dCkgeworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOworICAgIH0KKworICAgIHB1YmxpYyBHcmlkTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOworICAgIH0KKworICAgIHB1YmxpYyBHcmlkTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEdyaWRMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1EZWZhdWx0R2FwID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbE9mZnNldChSLmRpbWVuLmRlZmF1bHRfZ2FwKTsKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5HcmlkTGF5b3V0KTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5HcmlkTGF5b3V0LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNldFJvd0NvdW50KGEuZ2V0SW50KFJPV19DT1VOVCwgREVGQVVMVF9DT1VOVCkpOwogICAgICAgICAgICAgc2V0Q29sdW1uQ291bnQoYS5nZXRJbnQoQ09MVU1OX0NPVU5ULCBERUZBVUxUX0NPVU5UKSk7CkBAIC0yODIsMjEgKzMwNSw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKioKLSAgICAgKiB7QGluaGVyaXREb2N9Ci0gICAgICovCi0gICAgcHVibGljIEdyaWRMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoge0Bpbmhlcml0RG9jfQotICAgICAqLwotICAgIHB1YmxpYyBHcmlkTGF5b3V0KENvbnRleHQgY29udGV4dCkgewotICAgICAgICAvL25vaW5zcGVjdGlvbiBOdWxsYWJsZVByb2JsZW1zCi0gICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7Ci0gICAgfQotCiAgICAgLy8gSW1wbGVtZW50YXRpb24KIAogICAgIC8qKgpAQCAtMzA4LDYgKzMxNiw3IEBACiAgICAgICoKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNHcmlkTGF5b3V0X29yaWVudGF0aW9uCiAgICAgICovCisgICAgQE9yaWVudGF0aW9uCiAgICAgcHVibGljIGludCBnZXRPcmllbnRhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1PcmllbnRhdGlvbjsKICAgICB9CkBAIC0zNDgsNyArMzU3LDcgQEAKICAgICAgKgogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0dyaWRMYXlvdXRfb3JpZW50YXRpb24KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRPcmllbnRhdGlvbihpbnQgb3JpZW50YXRpb24pIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRPcmllbnRhdGlvbihAT3JpZW50YXRpb24gaW50IG9yaWVudGF0aW9uKSB7CiAgICAgICAgIGlmICh0aGlzLm1PcmllbnRhdGlvbiAhPSBvcmllbnRhdGlvbikgewogICAgICAgICAgICAgdGhpcy5tT3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKICAgICAgICAgICAgIGludmFsaWRhdGVTdHJ1Y3R1cmUoKTsKQEAgLTQ3OSw2ICs0ODgsNyBAQAogICAgICAqCiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjR3JpZExheW91dF9hbGlnbm1lbnRNb2RlCiAgICAgICovCisgICAgQEFsaWdubWVudE1vZGUKICAgICBwdWJsaWMgaW50IGdldEFsaWdubWVudE1vZGUoKSB7CiAgICAgICAgIHJldHVybiBtQWxpZ25tZW50TW9kZTsKICAgICB9CkBAIC00OTgsNyArNTA4LDcgQEAKICAgICAgKgogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0dyaWRMYXlvdXRfYWxpZ25tZW50TW9kZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEFsaWdubWVudE1vZGUoaW50IGFsaWdubWVudE1vZGUpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRBbGlnbm1lbnRNb2RlKEBBbGlnbm1lbnRNb2RlIGludCBhbGlnbm1lbnRNb2RlKSB7CiAgICAgICAgIHRoaXMubUFsaWdubWVudE1vZGUgPSBhbGlnbm1lbnRNb2RlOwogICAgICAgICByZXF1ZXN0TGF5b3V0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0dyaWRWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZFZpZXcuamF2YQppbmRleCAxNWRhZjgzLi4wYjQyNGY3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZFZpZXcuamF2YQpAQCAtMTYsMTIgKzE2LDE0IEBACiAKIHBhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLm9zLlRyYWNlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLk1hdGhVdGlsczsKIGltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlNvdW5kRWZmZWN0Q29uc3RhbnRzOwpAQCAtMzMsOSArMzUsMTEgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQ29sbGVjdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkNvbGxlY3Rpb25JdGVtSW5mbzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkdyaWRMYXlvdXRBbmltYXRpb25Db250cm9sbGVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFic0xpc3RWaWV3LkxheW91dFBhcmFtczsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZW1vdGVWaWV3cy5SZW1vdGVWaWV3OwogCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKwogCiAvKioKICAqIEEgdmlldyB0aGF0IHNob3dzIGl0ZW1zIGluIHR3by1kaW1lbnNpb25hbCBzY3JvbGxpbmcgZ3JpZC4gVGhlIGl0ZW1zIGluIHRoZQpAQCAtNTMsNiArNTcsMTEgQEAKICAqLwogQFJlbW90ZVZpZXcKIHB1YmxpYyBjbGFzcyBHcmlkVmlldyBleHRlbmRzIEFic0xpc3RWaWV3IHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHtOT19TVFJFVENILCBTVFJFVENIX1NQQUNJTkcsIFNUUkVUQ0hfQ09MVU1OX1dJRFRILCBTVFJFVENIX1NQQUNJTkdfVU5JRk9STX0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFN0cmV0Y2hNb2RlIHt9CisKICAgICAvKioKICAgICAgKiBEaXNhYmxlcyBzdHJldGNoaW5nLgogICAgICAqIApAQCAtMTEwLDExICsxMTksMTUgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmdyaWRWaWV3U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBHcmlkVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEdyaWRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5HcmlkVmlldywgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBHcmlkVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdyaWRWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBpbnQgaFNwYWNpbmcgPSBhLmdldERpbWVuc2lvblBpeGVsT2Zmc2V0KAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdyaWRWaWV3X2hvcml6b250YWxTcGFjaW5nLCAwKTsKQEAgLTEwMTQsNiArMTAyNywxNiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0Um93Rm9yUG9zaXRpb24oaW50IHBvc2l0aW9uKSB7CisgICAgICAgIHJldHVybiBwb3NpdGlvbiAvIG1OdW1Db2x1bW5zOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0Rmlyc3RQb3NpdGlvbkZvclJvdyhpbnQgcm93KSB7CisgICAgICAgIHJldHVybiByb3cgKiBtTnVtQ29sdW1uczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBvbk1lYXN1cmUoaW50IHdpZHRoTWVhc3VyZVNwZWMsIGludCBoZWlnaHRNZWFzdXJlU3BlYykgewogICAgICAgICAvLyBTZXRzIHVwIG1MaXN0UGFkZGluZwogICAgICAgICBzdXBlci5vbk1lYXN1cmUod2lkdGhNZWFzdXJlU3BlYywgaGVpZ2h0TWVhc3VyZVNwZWMpOwpAQCAtMTIwMiw2ICsxMjI1LDI0IEBACiAKICAgICAgICAgICAgIHNldFNlbGVjdGVkUG9zaXRpb25JbnQobU5leHRTZWxlY3RlZFBvc2l0aW9uKTsKIAorICAgICAgICAgICAgLy8gUmVtZW1iZXIgd2hpY2ggY2hpbGQsIGlmIGFueSwgaGFkIGFjY2Vzc2liaWxpdHkgZm9jdXMuCisgICAgICAgICAgICBmaW5hbCBpbnQgYWNjZXNzaWJpbGl0eUZvY3VzUG9zaXRpb247CisgICAgICAgICAgICBmaW5hbCBWaWV3IGFjY2Vzc0ZvY3VzZWRDaGlsZCA9IGdldEFjY2Vzc2liaWxpdHlGb2N1c2VkQ2hpbGQoKTsKKyAgICAgICAgICAgIGlmIChhY2Nlc3NGb2N1c2VkQ2hpbGQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlGb2N1c1Bvc2l0aW9uID0gZ2V0UG9zaXRpb25Gb3JWaWV3KGFjY2Vzc0ZvY3VzZWRDaGlsZCk7CisgICAgICAgICAgICAgICAgYWNjZXNzRm9jdXNlZENoaWxkLnNldEhhc1RyYW5zaWVudFN0YXRlKHRydWUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Rm9jdXNQb3NpdGlvbiA9IElOVkFMSURfUE9TSVRJT047CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgY2hpbGQgY29udGFpbmluZyBmb2N1cywgaWYgYW55LCBoYXMgdHJhbnNpZW50IHN0YXRlLgorICAgICAgICAgICAgLy8gSWYgdGhlIGxpc3QgZGF0YSBoYXNuJ3QgY2hhbmdlZCwgb3IgaWYgdGhlIGFkYXB0ZXIgaGFzIHN0YWJsZQorICAgICAgICAgICAgLy8gSURzLCB0aGlzIHdpbGwgbWFpbnRhaW4gZm9jdXMuCisgICAgICAgICAgICBmaW5hbCBWaWV3IGZvY3VzZWRDaGlsZCA9IGdldEZvY3VzZWRDaGlsZCgpOworICAgICAgICAgICAgaWYgKGZvY3VzZWRDaGlsZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZm9jdXNlZENoaWxkLnNldEhhc1RyYW5zaWVudFN0YXRlKHRydWUpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBQdWxsIGFsbCBjaGlsZHJlbiBpbnRvIHRoZSBSZWN5Y2xlQmluLgogICAgICAgICAgICAgLy8gVGhlc2Ugdmlld3Mgd2lsbCBiZSByZXVzZWQgaWYgcG9zc2libGUKICAgICAgICAgICAgIGZpbmFsIGludCBmaXJzdFBvc2l0aW9uID0gbUZpcnN0UG9zaXRpb247CkBAIC0xMjE2LDcgKzEyNTcsNiBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBDbGVhciBvdXQgb2xkIHZpZXdzCi0gICAgICAgICAgICAvL3JlbW92ZUFsbFZpZXdzSW5MYXlvdXQoKTsKICAgICAgICAgICAgIGRldGFjaEFsbFZpZXdzRnJvbVBhcmVudCgpOwogICAgICAgICAgICAgcmVjeWNsZUJpbi5yZW1vdmVTa2lwcGVkU2NyYXAoKTsKIApAQCAtMTI4Nyw2ICsxMzI3LDI3IEBACiAgICAgICAgICAgICAgICAgbVNlbGVjdG9yUmVjdC5zZXRFbXB0eSgpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoYWNjZXNzRm9jdXNlZENoaWxkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhY2Nlc3NGb2N1c2VkQ2hpbGQuc2V0SGFzVHJhbnNpZW50U3RhdGUoZmFsc2UpOworCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIG1haW50YWluIGFjY2Vzc2liaWxpdHkgZm9jdXMgb24gdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgLy8gdmlldywgYXR0ZW1wdCB0byByZXN0b3JlIGl0IHRvIHRoZSBwcmV2aW91cyBwb3NpdGlvbi4KKyAgICAgICAgICAgICAgICBpZiAoIWFjY2Vzc0ZvY3VzZWRDaGlsZC5pc0FjY2Vzc2liaWxpdHlGb2N1c2VkKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgYWNjZXNzaWJpbGl0eUZvY3VzUG9zaXRpb24gIT0gSU5WQUxJRF9QT1NJVElPTikgeworICAgICAgICAgICAgICAgICAgICAvLyBCb3VuZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSB2aXNpYmxlIGNoaWxkcmVuLgorICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcG9zaXRpb24gPSBNYXRoVXRpbHMuY29uc3RyYWluKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlGb2N1c1Bvc2l0aW9uIC0gbUZpcnN0UG9zaXRpb24sIDAsIGdldENoaWxkQ291bnQoKSAtIDEpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IHJlc3RvcmVWaWV3ID0gZ2V0Q2hpbGRBdChwb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0b3JlVmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlVmlldy5yZXF1ZXN0QWNjZXNzaWJpbGl0eUZvY3VzKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmb2N1c2VkQ2hpbGQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZvY3VzZWRDaGlsZC5zZXRIYXNUcmFuc2llbnRTdGF0ZShmYWxzZSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG1MYXlvdXRNb2RlID0gTEFZT1VUX05PUk1BTDsKICAgICAgICAgICAgIG1EYXRhQ2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKG1Qb3NpdGlvblNjcm9sbEFmdGVyTGF5b3V0ICE9IG51bGwpIHsKQEAgLTIwNTYsMTMgKzIxMTcsMTQgQEAKICAgICAgKgogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0dyaWRWaWV3X3N0cmV0Y2hNb2RlCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0U3RyZXRjaE1vZGUoaW50IHN0cmV0Y2hNb2RlKSB7CisgICAgcHVibGljIHZvaWQgc2V0U3RyZXRjaE1vZGUoQFN0cmV0Y2hNb2RlIGludCBzdHJldGNoTW9kZSkgewogICAgICAgICBpZiAoc3RyZXRjaE1vZGUgIT0gbVN0cmV0Y2hNb2RlKSB7CiAgICAgICAgICAgICBtU3RyZXRjaE1vZGUgPSBzdHJldGNoTW9kZTsKICAgICAgICAgICAgIHJlcXVlc3RMYXlvdXRJZk5lY2Vzc2FyeSgpOwogICAgICAgICB9CiAgICAgfQogCisgICAgQFN0cmV0Y2hNb2RlCiAgICAgcHVibGljIGludCBnZXRTdHJldGNoTW9kZSgpIHsKICAgICAgICAgcmV0dXJuIG1TdHJldGNoTW9kZTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvSG9yaXpvbnRhbFNjcm9sbFZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Ib3Jpem9udGFsU2Nyb2xsVmlldy5qYXZhCmluZGV4IGRhYjA5NjIuLjI1ZDRmNDIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Ib3Jpem9udGFsU2Nyb2xsVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Ib3Jpem9udGFsU2Nyb2xsVmlldy5qYXZhCkBAIC0xNDYsMTIgKzE0NiwxNyBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuaG9yaXpvbnRhbFNjcm9sbFZpZXdTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIEhvcml6b250YWxTY3JvbGxWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgSG9yaXpvbnRhbFNjcm9sbFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgSG9yaXpvbnRhbFNjcm9sbFZpZXcoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgaW5pdFNjcm9sbFZpZXcoKTsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgYW5kcm9pZC5SLnN0eWxlYWJsZS5Ib3Jpem9udGFsU2Nyb2xsVmlldywgZGVmU3R5bGUsIDApOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGFuZHJvaWQuUi5zdHlsZWFibGUuSG9yaXpvbnRhbFNjcm9sbFZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIHNldEZpbGxWaWV3cG9ydChhLmdldEJvb2xlYW4oYW5kcm9pZC5SLnN0eWxlYWJsZS5Ib3Jpem9udGFsU2Nyb2xsVmlld19maWxsVmlld3BvcnQsIGZhbHNlKSk7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9JbWFnZUJ1dHRvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0ltYWdlQnV0dG9uLmphdmEKaW5kZXggMzc5MzU0Y2EuLjNhMjA2MjggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9JbWFnZUJ1dHRvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9JbWFnZUJ1dHRvbi5qYXZhCkBAIC0xNywxNiArMTcsMTEgQEAKIHBhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuUmVtb3RlVmlld3MuUmVtb3RlVmlldzsKIAotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KIC8qKgogICogPHA+CiAgKiBEaXNwbGF5cyBhIGJ1dHRvbiB3aXRoIGFuIGltYWdlIChpbnN0ZWFkIG9mIHRleHQpIHRoYXQgY2FuIGJlIHByZXNzZWQgCkBAIC04Myw4ICs3OCwxMiBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuaW1hZ2VCdXR0b25TdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIEltYWdlQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgSW1hZ2VCdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW1hZ2VCdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIHNldEZvY3VzYWJsZSh0cnVlKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9JbWFnZVZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9JbWFnZVZpZXcuamF2YQppbmRleCA3ZGFmNzk4Li4wZjUxZmFiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvSW1hZ2VWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0ltYWdlVmlldy5qYXZhCkBAIC0yNCw4ICsyNCwxMCBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXg7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QaXhlbEZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmY7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmQ29sb3JGaWx0ZXI7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5YZmVybW9kZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkJpdG1hcERyYXdhYmxlOwpAQCAtMTE5LDEyICsxMjEsMTcgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogCi0gICAgcHVibGljIEltYWdlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEltYWdlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBJbWFnZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKICAgICAgICAgaW5pdEltYWdlVmlldygpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5JbWFnZVZpZXcsIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5JbWFnZVZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIERyYXdhYmxlIGQgPSBhLmdldERyYXdhYmxlKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkltYWdlVmlld19zcmMpOwogICAgICAgICBpZiAoZCAhPSBudWxsKSB7CkBAIC0xMjIwLDYgKzEyMjcsMzcgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzT3BhcXVlKCkgeworICAgICAgICByZXR1cm4gc3VwZXIuaXNPcGFxdWUoKSB8fCBtRHJhd2FibGUgIT0gbnVsbCAmJiBtWGZlcm1vZGUgPT0gbnVsbAorICAgICAgICAgICAgICAgICYmIG1EcmF3YWJsZS5nZXRPcGFjaXR5KCkgPT0gUGl4ZWxGb3JtYXQuT1BBUVVFCisgICAgICAgICAgICAgICAgJiYgbUFscGhhICogbVZpZXdBbHBoYVNjYWxlID4+IDggPT0gMjU1CisgICAgICAgICAgICAgICAgJiYgaXNGaWxsZWRCeUltYWdlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGlzRmlsbGVkQnlJbWFnZSgpIHsKKyAgICAgICAgaWYgKG1EcmF3YWJsZSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBSZWN0IGJvdW5kcyA9IG1EcmF3YWJsZS5nZXRCb3VuZHMoKTsKKyAgICAgICAgZmluYWwgTWF0cml4IG1hdHJpeCA9IG1EcmF3TWF0cml4OworICAgICAgICBpZiAobWF0cml4ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBib3VuZHMubGVmdCA8PSAwICYmIGJvdW5kcy50b3AgPD0gMCAmJiBib3VuZHMucmlnaHQgPj0gZ2V0V2lkdGgoKQorICAgICAgICAgICAgICAgICAgICAmJiBib3VuZHMuYm90dG9tID49IGdldEhlaWdodCgpOworICAgICAgICB9IGVsc2UgaWYgKG1hdHJpeC5yZWN0U3RheXNSZWN0KCkpIHsKKyAgICAgICAgICAgIGZpbmFsIFJlY3RGIGJvdW5kc1NyYyA9IG1UZW1wU3JjOworICAgICAgICAgICAgZmluYWwgUmVjdEYgYm91bmRzRHN0ID0gbVRlbXBEc3Q7CisgICAgICAgICAgICBib3VuZHNTcmMuc2V0KGJvdW5kcyk7CisgICAgICAgICAgICBtYXRyaXgubWFwUmVjdChib3VuZHNEc3QsIGJvdW5kc1NyYyk7CisgICAgICAgICAgICByZXR1cm4gYm91bmRzRHN0LmxlZnQgPD0gMCAmJiBib3VuZHNEc3QudG9wIDw9IDAgJiYgYm91bmRzRHN0LnJpZ2h0ID49IGdldFdpZHRoKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgYm91bmRzRHN0LmJvdHRvbSA+PSBnZXRIZWlnaHQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBtYXRyaXggZG9lc24ndCBtYXAgdG8gYSByZWN0YW5nbGUsIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICBAUmVtb3RhYmxlVmlld01ldGhvZAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldFZpc2liaWxpdHkoaW50IHZpc2liaWxpdHkpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MZWdhY3lUaW1lUGlja2VyRGVsZWdhdGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MZWdhY3lUaW1lUGlja2VyRGVsZWdhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjM0ZDVmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xlZ2FjeVRpbWVQaWNrZXJEZWxlZ2F0ZS5qYXZhCkBAIC0wLDAgKzEsNjM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLndpZGdldDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOworaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZUZvcm1hdDsKK2ltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVVdGlsczsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CitpbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLkVkaXRvckluZm87CitpbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kTWFuYWdlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOworCitpbXBvcnQgamF2YS50ZXh0LkRhdGVGb3JtYXRTeW1ib2xzOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5WaWV3LklNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9BVVRPOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuVmlldy5JTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfWUVTOworCisvKioKKyAqIEEgZGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBiYXNpYyBUaW1lUGlja2VyCisgKi8KK2NsYXNzIExlZ2FjeVRpbWVQaWNrZXJEZWxlZ2F0ZSBleHRlbmRzIFRpbWVQaWNrZXIuQWJzdHJhY3RUaW1lUGlja2VyRGVsZWdhdGUgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX0VOQUJMRURfU1RBVEUgPSB0cnVlOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhPVVJTX0lOX0hBTEZfREFZID0gMTI7CisKKyAgICAvLyBzdGF0ZQorICAgIHByaXZhdGUgYm9vbGVhbiBtSXMyNEhvdXJWaWV3OworCisgICAgcHJpdmF0ZSBib29sZWFuIG1Jc0FtOworCisgICAgLy8gdWkgY29tcG9uZW50cworICAgIHByaXZhdGUgZmluYWwgTnVtYmVyUGlja2VyIG1Ib3VyU3Bpbm5lcjsKKworICAgIHByaXZhdGUgZmluYWwgTnVtYmVyUGlja2VyIG1NaW51dGVTcGlubmVyOworCisgICAgcHJpdmF0ZSBmaW5hbCBOdW1iZXJQaWNrZXIgbUFtUG1TcGlubmVyOworCisgICAgcHJpdmF0ZSBmaW5hbCBFZGl0VGV4dCBtSG91clNwaW5uZXJJbnB1dDsKKworICAgIHByaXZhdGUgZmluYWwgRWRpdFRleHQgbU1pbnV0ZVNwaW5uZXJJbnB1dDsKKworICAgIHByaXZhdGUgZmluYWwgRWRpdFRleHQgbUFtUG1TcGlubmVySW5wdXQ7CisKKyAgICBwcml2YXRlIGZpbmFsIFRleHRWaWV3IG1EaXZpZGVyOworCisgICAgLy8gTm90ZSB0aGF0IHRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gb2YgdGhlIFRpbWVQaWNrZXIgaXMKKyAgICAvLyB1c2luZyBhIGJ1dHRvbiBmb3IgdG9nZ2xpbmcgYmV0d2VlbiBBTS9QTSB3aGlsZSB0aGUgbmV3CisgICAgLy8gdmVyc2lvbiB1c2VzIGEgTnVtYmVyUGlja2VyIHNwaW5uZXIuIFRoZXJlZm9yZSB0aGUgY29kZQorICAgIC8vIGFjY29tbW9kYXRlcyB0aGVzZSB0d28gY2FzZXMgdG8gYmUgYmFja3dhcmRzIGNvbXBhdGlibGUuCisgICAgcHJpdmF0ZSBmaW5hbCBCdXR0b24gbUFtUG1CdXR0b247CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZ1tdIG1BbVBtU3RyaW5nczsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtSXNFbmFibGVkID0gREVGQVVMVF9FTkFCTEVEX1NUQVRFOworCisgICAgcHJpdmF0ZSBDYWxlbmRhciBtVGVtcENhbGVuZGFyOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1Ib3VyV2l0aFR3b0RpZ2l0OworICAgIHByaXZhdGUgY2hhciBtSG91ckZvcm1hdDsKKworICAgIC8qKgorICAgICAqIEEgbm8tb3AgY2FsbGJhY2sgdXNlZCBpbiB0aGUgY29uc3RydWN0b3IgdG8gYXZvaWQgbnVsbCBjaGVja3MgbGF0ZXIgaW4KKyAgICAgKiB0aGUgY29kZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUaW1lUGlja2VyLk9uVGltZUNoYW5nZWRMaXN0ZW5lciBOT19PUF9DSEFOR0VfTElTVEVORVIgPQorICAgICAgICAgICAgbmV3IFRpbWVQaWNrZXIuT25UaW1lQ2hhbmdlZExpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVGltZUNoYW5nZWQoVGltZVBpY2tlciB2aWV3LCBpbnQgaG91ck9mRGF5LCBpbnQgbWludXRlKSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgIHB1YmxpYyBMZWdhY3lUaW1lUGlja2VyRGVsZWdhdGUoVGltZVBpY2tlciBkZWxlZ2F0b3IsIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGRlbGVnYXRvciwgY29udGV4dCk7CisKKyAgICAgICAgLy8gcHJvY2VzcyBzdHlsZSBhdHRyaWJ1dGVzCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYXR0cmlidXRlc0FycmF5ID0gbUNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgUi5zdHlsZWFibGUuVGltZVBpY2tlciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisgICAgICAgIGZpbmFsIGludCBsYXlvdXRSZXNvdXJjZUlkID0gYXR0cmlidXRlc0FycmF5LmdldFJlc291cmNlSWQoCisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVGltZVBpY2tlcl9sZWdhY3lMYXlvdXQsIFIubGF5b3V0LnRpbWVfcGlja2VyX2xlZ2FjeSk7CisgICAgICAgIGF0dHJpYnV0ZXNBcnJheS5yZWN5Y2xlKCk7CisKKyAgICAgICAgZmluYWwgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIgPSAoTGF5b3V0SW5mbGF0ZXIpIG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCisgICAgICAgICAgICAgICAgQ29udGV4dC5MQVlPVVRfSU5GTEFURVJfU0VSVklDRSk7CisgICAgICAgIGluZmxhdGVyLmluZmxhdGUobGF5b3V0UmVzb3VyY2VJZCwgbURlbGVnYXRvciwgdHJ1ZSk7CisKKyAgICAgICAgLy8gaG91cgorICAgICAgICBtSG91clNwaW5uZXIgPSAoTnVtYmVyUGlja2VyKSBkZWxlZ2F0b3IuZmluZFZpZXdCeUlkKFIuaWQuaG91cik7CisgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRPblZhbHVlQ2hhbmdlZExpc3RlbmVyKG5ldyBOdW1iZXJQaWNrZXIuT25WYWx1ZUNoYW5nZUxpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25WYWx1ZUNoYW5nZShOdW1iZXJQaWNrZXIgc3Bpbm5lciwgaW50IG9sZFZhbCwgaW50IG5ld1ZhbCkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUlucHV0U3RhdGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzMjRIb3VyVmlldygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgob2xkVmFsID09IEhPVVJTX0lOX0hBTEZfREFZIC0gMSAmJiBuZXdWYWwgPT0gSE9VUlNfSU5fSEFMRl9EQVkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9sZFZhbCA9PSBIT1VSU19JTl9IQUxGX0RBWSAmJiBuZXdWYWwgPT0gSE9VUlNfSU5fSEFMRl9EQVkgLSAxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUlzQW0gPSAhbUlzQW07CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9uVGltZUNoYW5nZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1Ib3VyU3Bpbm5lcklucHV0ID0gKEVkaXRUZXh0KSBtSG91clNwaW5uZXIuZmluZFZpZXdCeUlkKFIuaWQubnVtYmVycGlja2VyX2lucHV0KTsKKyAgICAgICAgbUhvdXJTcGlubmVySW5wdXQuc2V0SW1lT3B0aW9ucyhFZGl0b3JJbmZvLklNRV9BQ1RJT05fTkVYVCk7CisKKyAgICAgICAgLy8gZGl2aWRlciAob25seSBmb3IgdGhlIG5ldyB3aWRnZXQgc3R5bGUpCisgICAgICAgIG1EaXZpZGVyID0gKFRleHRWaWV3KSBtRGVsZWdhdG9yLmZpbmRWaWV3QnlJZChSLmlkLmRpdmlkZXIpOworICAgICAgICBpZiAobURpdmlkZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgc2V0RGl2aWRlclRleHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG1pbnV0ZQorICAgICAgICBtTWludXRlU3Bpbm5lciA9IChOdW1iZXJQaWNrZXIpIG1EZWxlZ2F0b3IuZmluZFZpZXdCeUlkKFIuaWQubWludXRlKTsKKyAgICAgICAgbU1pbnV0ZVNwaW5uZXIuc2V0TWluVmFsdWUoMCk7CisgICAgICAgIG1NaW51dGVTcGlubmVyLnNldE1heFZhbHVlKDU5KTsKKyAgICAgICAgbU1pbnV0ZVNwaW5uZXIuc2V0T25Mb25nUHJlc3NVcGRhdGVJbnRlcnZhbCgxMDApOworICAgICAgICBtTWludXRlU3Bpbm5lci5zZXRGb3JtYXR0ZXIoTnVtYmVyUGlja2VyLmdldFR3b0RpZ2l0Rm9ybWF0dGVyKCkpOworICAgICAgICBtTWludXRlU3Bpbm5lci5zZXRPblZhbHVlQ2hhbmdlZExpc3RlbmVyKG5ldyBOdW1iZXJQaWNrZXIuT25WYWx1ZUNoYW5nZUxpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25WYWx1ZUNoYW5nZShOdW1iZXJQaWNrZXIgc3Bpbm5lciwgaW50IG9sZFZhbCwgaW50IG5ld1ZhbCkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUlucHV0U3RhdGUoKTsKKyAgICAgICAgICAgICAgICBpbnQgbWluVmFsdWUgPSBtTWludXRlU3Bpbm5lci5nZXRNaW5WYWx1ZSgpOworICAgICAgICAgICAgICAgIGludCBtYXhWYWx1ZSA9IG1NaW51dGVTcGlubmVyLmdldE1heFZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKG9sZFZhbCA9PSBtYXhWYWx1ZSAmJiBuZXdWYWwgPT0gbWluVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG5ld0hvdXIgPSBtSG91clNwaW5uZXIuZ2V0VmFsdWUoKSArIDE7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXMyNEhvdXJWaWV3KCkgJiYgbmV3SG91ciA9PSBIT1VSU19JTl9IQUxGX0RBWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUlzQW0gPSAhbUlzQW07CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRWYWx1ZShuZXdIb3VyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9sZFZhbCA9PSBtaW5WYWx1ZSAmJiBuZXdWYWwgPT0gbWF4VmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG5ld0hvdXIgPSBtSG91clNwaW5uZXIuZ2V0VmFsdWUoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXMyNEhvdXJWaWV3KCkgJiYgbmV3SG91ciA9PSBIT1VSU19JTl9IQUxGX0RBWSAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Jc0FtID0gIW1Jc0FtOworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQW1QbUNvbnRyb2woKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0VmFsdWUobmV3SG91cik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9uVGltZUNoYW5nZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1NaW51dGVTcGlubmVySW5wdXQgPSAoRWRpdFRleHQpIG1NaW51dGVTcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7CisgICAgICAgIG1NaW51dGVTcGlubmVySW5wdXQuc2V0SW1lT3B0aW9ucyhFZGl0b3JJbmZvLklNRV9BQ1RJT05fTkVYVCk7CisKKyAgICAgICAgICAgIC8qIEdldCB0aGUgbG9jYWxpemVkIGFtL3BtIHN0cmluZ3MgYW5kIHVzZSB0aGVtIGluIHRoZSBzcGlubmVyICovCisgICAgICAgIG1BbVBtU3RyaW5ncyA9IG5ldyBEYXRlRm9ybWF0U3ltYm9scygpLmdldEFtUG1TdHJpbmdzKCk7CisKKyAgICAgICAgLy8gYW0vcG0KKyAgICAgICAgVmlldyBhbVBtVmlldyA9IG1EZWxlZ2F0b3IuZmluZFZpZXdCeUlkKFIuaWQuYW1QbSk7CisgICAgICAgIGlmIChhbVBtVmlldyBpbnN0YW5jZW9mIEJ1dHRvbikgeworICAgICAgICAgICAgbUFtUG1TcGlubmVyID0gbnVsbDsKKyAgICAgICAgICAgIG1BbVBtU3Bpbm5lcklucHV0ID0gbnVsbDsKKyAgICAgICAgICAgIG1BbVBtQnV0dG9uID0gKEJ1dHRvbikgYW1QbVZpZXc7CisgICAgICAgICAgICBtQW1QbUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyBidXR0b24pIHsKKyAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnJlcXVlc3RGb2N1cygpOworICAgICAgICAgICAgICAgICAgICBtSXNBbSA9ICFtSXNBbTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlQW1QbUNvbnRyb2woKTsKKyAgICAgICAgICAgICAgICAgICAgb25UaW1lQ2hhbmdlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUFtUG1CdXR0b24gPSBudWxsOworICAgICAgICAgICAgbUFtUG1TcGlubmVyID0gKE51bWJlclBpY2tlcikgYW1QbVZpZXc7CisgICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0TWluVmFsdWUoMCk7CisgICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0TWF4VmFsdWUoMSk7CisgICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0RGlzcGxheWVkVmFsdWVzKG1BbVBtU3RyaW5ncyk7CisgICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0T25WYWx1ZUNoYW5nZWRMaXN0ZW5lcihuZXcgTnVtYmVyUGlja2VyLk9uVmFsdWVDaGFuZ2VMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblZhbHVlQ2hhbmdlKE51bWJlclBpY2tlciBwaWNrZXIsIGludCBvbGRWYWwsIGludCBuZXdWYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlSW5wdXRTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICBwaWNrZXIucmVxdWVzdEZvY3VzKCk7CisgICAgICAgICAgICAgICAgICAgIG1Jc0FtID0gIW1Jc0FtOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOworICAgICAgICAgICAgICAgICAgICBvblRpbWVDaGFuZ2VkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBtQW1QbVNwaW5uZXJJbnB1dCA9IChFZGl0VGV4dCkgbUFtUG1TcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7CisgICAgICAgICAgICBtQW1QbVNwaW5uZXJJbnB1dC5zZXRJbWVPcHRpb25zKEVkaXRvckluZm8uSU1FX0FDVElPTl9ET05FKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0FtUG1BdFN0YXJ0KCkpIHsKKyAgICAgICAgICAgIC8vIE1vdmUgdGhlIGFtL3BtIHZpZXcgdG8gdGhlIGJlZ2lubmluZworICAgICAgICAgICAgVmlld0dyb3VwIGFtUG1QYXJlbnQgPSAoVmlld0dyb3VwKSBkZWxlZ2F0b3IuZmluZFZpZXdCeUlkKFIuaWQudGltZVBpY2tlckxheW91dCk7CisgICAgICAgICAgICBhbVBtUGFyZW50LnJlbW92ZVZpZXcoYW1QbVZpZXcpOworICAgICAgICAgICAgYW1QbVBhcmVudC5hZGRWaWV3KGFtUG1WaWV3LCAwKTsKKyAgICAgICAgICAgIC8vIFN3YXAgbGF5b3V0IG1hcmdpbnMgaWYgbmVlZGVkLiBUaGV5IG1heSBiZSBub3Qgc3ltbWV0cmljYWwgKE9sZCBTdGFuZGFyZCBUaGVtZQorICAgICAgICAgICAgLy8gZm9yIGV4YW1wbGUgYW5kIG5vdCBmb3IgSG9sbyBUaGVtZSkKKyAgICAgICAgICAgIFZpZXdHcm91cC5NYXJnaW5MYXlvdXRQYXJhbXMgbHAgPQorICAgICAgICAgICAgICAgICAgICAoVmlld0dyb3VwLk1hcmdpbkxheW91dFBhcmFtcykgYW1QbVZpZXcuZ2V0TGF5b3V0UGFyYW1zKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgc3RhcnRNYXJnaW4gPSBscC5nZXRNYXJnaW5TdGFydCgpOworICAgICAgICAgICAgZmluYWwgaW50IGVuZE1hcmdpbiA9IGxwLmdldE1hcmdpbkVuZCgpOworICAgICAgICAgICAgaWYgKHN0YXJ0TWFyZ2luICE9IGVuZE1hcmdpbikgeworICAgICAgICAgICAgICAgIGxwLnNldE1hcmdpblN0YXJ0KGVuZE1hcmdpbik7CisgICAgICAgICAgICAgICAgbHAuc2V0TWFyZ2luRW5kKHN0YXJ0TWFyZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGdldEhvdXJGb3JtYXREYXRhKCk7CisKKyAgICAgICAgLy8gdXBkYXRlIGNvbnRyb2xzIHRvIGluaXRpYWwgc3RhdGUKKyAgICAgICAgdXBkYXRlSG91ckNvbnRyb2woKTsKKyAgICAgICAgdXBkYXRlTWludXRlQ29udHJvbCgpOworICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOworCisgICAgICAgIHNldE9uVGltZUNoYW5nZWRMaXN0ZW5lcihOT19PUF9DSEFOR0VfTElTVEVORVIpOworCisgICAgICAgIC8vIHNldCB0byBjdXJyZW50IHRpbWUKKyAgICAgICAgc2V0Q3VycmVudEhvdXIobVRlbXBDYWxlbmRhci5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpKTsKKyAgICAgICAgc2V0Q3VycmVudE1pbnV0ZShtVGVtcENhbGVuZGFyLmdldChDYWxlbmRhci5NSU5VVEUpKTsKKworICAgICAgICBpZiAoIWlzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBzZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHNldCB0aGUgY29udGVudCBkZXNjcmlwdGlvbnMKKyAgICAgICAgc2V0Q29udGVudERlc2NyaXB0aW9ucygpOworCisgICAgICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCB0aGlzIHZpZXcgaXMgaW1wb3J0YW50IGZvciBhY2Nlc3NpYmlsaXR5LgorICAgICAgICBpZiAobURlbGVnYXRvci5nZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KCkgPT0gSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX0FVVE8pIHsKKyAgICAgICAgICAgIG1EZWxlZ2F0b3Iuc2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eShJTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfWUVTKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBnZXRIb3VyRm9ybWF0RGF0YSgpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGJlc3REYXRlVGltZVBhdHRlcm4gPSBEYXRlRm9ybWF0LmdldEJlc3REYXRlVGltZVBhdHRlcm4obUN1cnJlbnRMb2NhbGUsCisgICAgICAgICAgICAgICAgKG1JczI0SG91clZpZXcpID8gIkhtIiA6ICJobSIpOworICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoUGF0dGVybiA9IGJlc3REYXRlVGltZVBhdHRlcm4ubGVuZ3RoKCk7CisgICAgICAgIG1Ib3VyV2l0aFR3b0RpZ2l0ID0gZmFsc2U7CisgICAgICAgIGNoYXIgaG91ckZvcm1hdCA9ICdcMCc7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXR1cm5lZCBwYXR0ZXJuIGlzIHNpbmdsZSBvciBkb3VibGUgJ0gnLCAnaCcsICdLJywgJ2snLiBXZSBhbHNvIHNhdmUKKyAgICAgICAgLy8gdGhlIGhvdXIgZm9ybWF0IHRoYXQgd2UgZm91bmQuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoUGF0dGVybjsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBjaGFyIGMgPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmIChjID09ICdIJyB8fCBjID09ICdoJyB8fCBjID09ICdLJyB8fCBjID09ICdrJykgeworICAgICAgICAgICAgICAgIG1Ib3VyRm9ybWF0ID0gYzsKKyAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBsZW5ndGhQYXR0ZXJuICYmIGMgPT0gYmVzdERhdGVUaW1lUGF0dGVybi5jaGFyQXQoaSArIDEpKSB7CisgICAgICAgICAgICAgICAgICAgIG1Ib3VyV2l0aFR3b0RpZ2l0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNBbVBtQXRTdGFydCgpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGJlc3REYXRlVGltZVBhdHRlcm4gPSBEYXRlRm9ybWF0LmdldEJlc3REYXRlVGltZVBhdHRlcm4obUN1cnJlbnRMb2NhbGUsCisgICAgICAgICAgICAgICAgImhtIiAvKiBza2VsZXRvbiAqLyk7CisKKyAgICAgICAgcmV0dXJuIGJlc3REYXRlVGltZVBhdHRlcm4uc3RhcnRzV2l0aCgiYSIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoZSB0aW1lIHNlcGFyYXRvciBpcyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIENMRFIgYW5kIGNhbm5vdCBiZSBzdXBwb3NlZCB0byBiZSAiOiIuCisgICAgICoKKyAgICAgKiBTZWUgaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvdHJhYy9icm93c2VyL3RydW5rL2NvbW1vbi9tYWluCisgICAgICoKKyAgICAgKiBXZSBwYXNzIHRoZSBjb3JyZWN0ICJza2VsZXRvbiIgZGVwZW5kaW5nIG9uIDEyIG9yIDI0IGhvdXJzIHZpZXcgYW5kIHRoZW4gZXh0cmFjdCB0aGUKKyAgICAgKiBzZXBhcmF0b3IgYXMgdGhlIGNoYXJhY3RlciB3aGljaCBpcyBqdXN0IGFmdGVyIHRoZSBob3VyIG1hcmtlciBpbiB0aGUgcmV0dXJuZWQgcGF0dGVybi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0RGl2aWRlclRleHQoKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBza2VsZXRvbiA9IChtSXMyNEhvdXJWaWV3KSA/ICJIbSIgOiAiaG0iOworICAgICAgICBmaW5hbCBTdHJpbmcgYmVzdERhdGVUaW1lUGF0dGVybiA9IERhdGVGb3JtYXQuZ2V0QmVzdERhdGVUaW1lUGF0dGVybihtQ3VycmVudExvY2FsZSwKKyAgICAgICAgICAgICAgICBza2VsZXRvbik7CisgICAgICAgIGZpbmFsIFN0cmluZyBzZXBhcmF0b3JUZXh0OworICAgICAgICBpbnQgaG91ckluZGV4ID0gYmVzdERhdGVUaW1lUGF0dGVybi5sYXN0SW5kZXhPZignSCcpOworICAgICAgICBpZiAoaG91ckluZGV4ID09IC0xKSB7CisgICAgICAgICAgICBob3VySW5kZXggPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLmxhc3RJbmRleE9mKCdoJyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhvdXJJbmRleCA9PSAtMSkgeworICAgICAgICAgICAgLy8gRGVmYXVsdCBjYXNlCisgICAgICAgICAgICBzZXBhcmF0b3JUZXh0ID0gIjoiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IG1pbnV0ZUluZGV4ID0gYmVzdERhdGVUaW1lUGF0dGVybi5pbmRleE9mKCdtJywgaG91ckluZGV4ICsgMSk7CisgICAgICAgICAgICBpZiAgKG1pbnV0ZUluZGV4ID09IC0xKSB7CisgICAgICAgICAgICAgICAgc2VwYXJhdG9yVGV4dCA9IENoYXJhY3Rlci50b1N0cmluZyhiZXN0RGF0ZVRpbWVQYXR0ZXJuLmNoYXJBdChob3VySW5kZXggKyAxKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlcGFyYXRvclRleHQgPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLnN1YnN0cmluZyhob3VySW5kZXggKyAxLCBtaW51dGVJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbURpdmlkZXIuc2V0VGV4dChzZXBhcmF0b3JUZXh0KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50SG91cihJbnRlZ2VyIGN1cnJlbnRIb3VyKSB7CisgICAgICAgIHNldEN1cnJlbnRIb3VyKGN1cnJlbnRIb3VyLCB0cnVlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0Q3VycmVudEhvdXIoSW50ZWdlciBjdXJyZW50SG91ciwgYm9vbGVhbiBub3RpZnlUaW1lQ2hhbmdlZCkgeworICAgICAgICAvLyB3aHkgd2FzIEludGVnZXIgdXNlZCBpbiB0aGUgZmlyc3QgcGxhY2U/CisgICAgICAgIGlmIChjdXJyZW50SG91ciA9PSBudWxsIHx8IGN1cnJlbnRIb3VyID09IGdldEN1cnJlbnRIb3VyKCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzMjRIb3VyVmlldygpKSB7CisgICAgICAgICAgICAvLyBjb252ZXJ0IFswLDIzXSBvcmRpbmFsIHRvIHdhbGwgY2xvY2sgZGlzcGxheQorICAgICAgICAgICAgaWYgKGN1cnJlbnRIb3VyID49IEhPVVJTX0lOX0hBTEZfREFZKSB7CisgICAgICAgICAgICAgICAgbUlzQW0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudEhvdXIgPiBIT1VSU19JTl9IQUxGX0RBWSkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50SG91ciA9IGN1cnJlbnRIb3VyIC0gSE9VUlNfSU5fSEFMRl9EQVk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtSXNBbSA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRIb3VyID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEhvdXIgPSBIT1VSU19JTl9IQUxGX0RBWTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOworICAgICAgICB9CisgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRWYWx1ZShjdXJyZW50SG91cik7CisgICAgICAgIGlmIChub3RpZnlUaW1lQ2hhbmdlZCkgeworICAgICAgICAgICAgb25UaW1lQ2hhbmdlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEludGVnZXIgZ2V0Q3VycmVudEhvdXIoKSB7CisgICAgICAgIGludCBjdXJyZW50SG91ciA9IG1Ib3VyU3Bpbm5lci5nZXRWYWx1ZSgpOworICAgICAgICBpZiAoaXMyNEhvdXJWaWV3KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50SG91cjsKKyAgICAgICAgfSBlbHNlIGlmIChtSXNBbSkgeworICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRIb3VyICUgSE9VUlNfSU5fSEFMRl9EQVk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gKGN1cnJlbnRIb3VyICUgSE9VUlNfSU5fSEFMRl9EQVkpICsgSE9VUlNfSU5fSEFMRl9EQVk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50TWludXRlKEludGVnZXIgY3VycmVudE1pbnV0ZSkgeworICAgICAgICBpZiAoY3VycmVudE1pbnV0ZSA9PSBnZXRDdXJyZW50TWludXRlKCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtTWludXRlU3Bpbm5lci5zZXRWYWx1ZShjdXJyZW50TWludXRlKTsKKyAgICAgICAgb25UaW1lQ2hhbmdlZCgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJbnRlZ2VyIGdldEN1cnJlbnRNaW51dGUoKSB7CisgICAgICAgIHJldHVybiBtTWludXRlU3Bpbm5lci5nZXRWYWx1ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldElzMjRIb3VyVmlldyhCb29sZWFuIGlzMjRIb3VyVmlldykgeworICAgICAgICBpZiAobUlzMjRIb3VyVmlldyA9PSBpczI0SG91clZpZXcpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBjYWNoZSB0aGUgY3VycmVudCBob3VyIHNpbmNlIHNwaW5uZXIgcmFuZ2UgY2hhbmdlcyBhbmQgQkVGT1JFIGNoYW5naW5nIG1JczI0SG91clZpZXchIQorICAgICAgICBpbnQgY3VycmVudEhvdXIgPSBnZXRDdXJyZW50SG91cigpOworICAgICAgICAvLyBPcmRlciBpcyBpbXBvcnRhbnQgaGVyZS4KKyAgICAgICAgbUlzMjRIb3VyVmlldyA9IGlzMjRIb3VyVmlldzsKKyAgICAgICAgZ2V0SG91ckZvcm1hdERhdGEoKTsKKyAgICAgICAgdXBkYXRlSG91ckNvbnRyb2woKTsKKyAgICAgICAgLy8gc2V0IHZhbHVlIGFmdGVyIHNwaW5uZXIgcmFuZ2UgaXMgdXBkYXRlZAorICAgICAgICBzZXRDdXJyZW50SG91cihjdXJyZW50SG91ciwgZmFsc2UpOworICAgICAgICB1cGRhdGVNaW51dGVDb250cm9sKCk7CisgICAgICAgIHVwZGF0ZUFtUG1Db250cm9sKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXMyNEhvdXJWaWV3KCkgeworICAgICAgICByZXR1cm4gbUlzMjRIb3VyVmlldzsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRPblRpbWVDaGFuZ2VkTGlzdGVuZXIoVGltZVBpY2tlci5PblRpbWVDaGFuZ2VkTGlzdGVuZXIgb25UaW1lQ2hhbmdlZExpc3RlbmVyKSB7CisgICAgICAgIG1PblRpbWVDaGFuZ2VkTGlzdGVuZXIgPSBvblRpbWVDaGFuZ2VkTGlzdGVuZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgbU1pbnV0ZVNwaW5uZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgaWYgKG1EaXZpZGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1EaXZpZGVyLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgIH0KKyAgICAgICAgbUhvdXJTcGlubmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgIGlmIChtQW1QbVNwaW5uZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQW1QbUJ1dHRvbi5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICB9CisgICAgICAgIG1Jc0VuYWJsZWQgPSBlbmFibGVkOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1Jc0VuYWJsZWQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0U2hvd0RvbmVCdXR0b24oYm9vbGVhbiBzaG93RG9uZUJ1dHRvbikgeworICAgICAgICAvLyBOb3RoaW5nIHRvIGRvCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0RGlzbWlzc0NhbGxiYWNrKFRpbWVQaWNrZXIuVGltZVBpY2tlckRpc21pc3NDYWxsYmFjayBjYWxsYmFjaykgeworICAgICAgICAvLyBOb3RoaW5nIHRvIGRvCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRCYXNlbGluZSgpIHsKKyAgICAgICAgcmV0dXJuIG1Ib3VyU3Bpbm5lci5nZXRCYXNlbGluZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQoQ29uZmlndXJhdGlvbiBuZXdDb25maWcpIHsKKyAgICAgICAgc2V0Q3VycmVudExvY2FsZShuZXdDb25maWcubG9jYWxlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgUGFyY2VsYWJsZSBvblNhdmVJbnN0YW5jZVN0YXRlKFBhcmNlbGFibGUgc3VwZXJTdGF0ZSkgeworICAgICAgICByZXR1cm4gbmV3IFNhdmVkU3RhdGUoc3VwZXJTdGF0ZSwgZ2V0Q3VycmVudEhvdXIoKSwgZ2V0Q3VycmVudE1pbnV0ZSgpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKFBhcmNlbGFibGUgc3RhdGUpIHsKKyAgICAgICAgU2F2ZWRTdGF0ZSBzcyA9IChTYXZlZFN0YXRlKSBzdGF0ZTsKKyAgICAgICAgc2V0Q3VycmVudEhvdXIoc3MuZ2V0SG91cigpKTsKKyAgICAgICAgc2V0Q3VycmVudE1pbnV0ZShzcy5nZXRNaW51dGUoKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hQb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgb25Qb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgIGludCBmbGFncyA9IERhdGVVdGlscy5GT1JNQVRfU0hPV19USU1FOworICAgICAgICBpZiAobUlzMjRIb3VyVmlldykgeworICAgICAgICAgICAgZmxhZ3MgfD0gRGF0ZVV0aWxzLkZPUk1BVF8yNEhPVVI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmbGFncyB8PSBEYXRlVXRpbHMuRk9STUFUXzEySE9VUjsKKyAgICAgICAgfQorICAgICAgICBtVGVtcENhbGVuZGFyLnNldChDYWxlbmRhci5IT1VSX09GX0RBWSwgZ2V0Q3VycmVudEhvdXIoKSk7CisgICAgICAgIG1UZW1wQ2FsZW5kYXIuc2V0KENhbGVuZGFyLk1JTlVURSwgZ2V0Q3VycmVudE1pbnV0ZSgpKTsKKyAgICAgICAgU3RyaW5nIHNlbGVjdGVkRGF0ZVV0dGVyYW5jZSA9IERhdGVVdGlscy5mb3JtYXREYXRlVGltZShtQ29udGV4dCwKKyAgICAgICAgICAgICAgICBtVGVtcENhbGVuZGFyLmdldFRpbWVJbk1pbGxpcygpLCBmbGFncyk7CisgICAgICAgIGV2ZW50LmdldFRleHQoKS5hZGQoc2VsZWN0ZWREYXRlVXR0ZXJhbmNlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgIGV2ZW50LnNldENsYXNzTmFtZShUaW1lUGlja2VyLmNsYXNzLmdldE5hbWUoKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBpbmZvKSB7CisgICAgICAgIGluZm8uc2V0Q2xhc3NOYW1lKFRpbWVQaWNrZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlSW5wdXRTdGF0ZSgpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgdmFsdWUgYW5kIHRoZSBJTUUgaXMgYWN0aXZlCisgICAgICAgIC8vIGZvciBvbmUgb2YgdGhlIGlucHV0cyBpZiB0aGlzIHdpZGdldCwgdGhlIElNRSBpcyBjbG9zZWQuIElmIHRoZSB1c2VyCisgICAgICAgIC8vIGNoYW5nZWQgdGhlIHZhbHVlIHZpYSB0aGUgSU1FIGFuZCB0aGVyZSBpcyBhIG5leHQgaW5wdXQgdGhlIElNRSB3aWxsCisgICAgICAgIC8vIGJlIHNob3duLCBvdGhlcndpc2UgdGhlIHVzZXIgY2hvc2UgYW5vdGhlciBtZWFucyBvZiBjaGFuZ2luZyB0aGUKKyAgICAgICAgLy8gdmFsdWUgYW5kIGhhdmluZyB0aGUgSU1FIHVwIG1ha2VzIG5vIHNlbnNlLgorICAgICAgICBJbnB1dE1ldGhvZE1hbmFnZXIgaW5wdXRNZXRob2RNYW5hZ2VyID0gSW5wdXRNZXRob2RNYW5hZ2VyLnBlZWtJbnN0YW5jZSgpOworICAgICAgICBpZiAoaW5wdXRNZXRob2RNYW5hZ2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChpbnB1dE1ldGhvZE1hbmFnZXIuaXNBY3RpdmUobUhvdXJTcGlubmVySW5wdXQpKSB7CisgICAgICAgICAgICAgICAgbUhvdXJTcGlubmVySW5wdXQuY2xlYXJGb2N1cygpOworICAgICAgICAgICAgICAgIGlucHV0TWV0aG9kTWFuYWdlci5oaWRlU29mdElucHV0RnJvbVdpbmRvdyhtRGVsZWdhdG9yLmdldFdpbmRvd1Rva2VuKCksIDApOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dE1ldGhvZE1hbmFnZXIuaXNBY3RpdmUobU1pbnV0ZVNwaW5uZXJJbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBtTWludXRlU3Bpbm5lcklucHV0LmNsZWFyRm9jdXMoKTsKKyAgICAgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXIuaGlkZVNvZnRJbnB1dEZyb21XaW5kb3cobURlbGVnYXRvci5nZXRXaW5kb3dUb2tlbigpLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRNZXRob2RNYW5hZ2VyLmlzQWN0aXZlKG1BbVBtU3Bpbm5lcklucHV0KSkgeworICAgICAgICAgICAgICAgIG1BbVBtU3Bpbm5lcklucHV0LmNsZWFyRm9jdXMoKTsKKyAgICAgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXIuaGlkZVNvZnRJbnB1dEZyb21XaW5kb3cobURlbGVnYXRvci5nZXRXaW5kb3dUb2tlbigpLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVBbVBtQ29udHJvbCgpIHsKKyAgICAgICAgaWYgKGlzMjRIb3VyVmlldygpKSB7CisgICAgICAgICAgICBpZiAobUFtUG1TcGlubmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtQW1QbUJ1dHRvbi5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBtSXNBbSA/IENhbGVuZGFyLkFNIDogQ2FsZW5kYXIuUE07CisgICAgICAgICAgICBpZiAobUFtUG1TcGlubmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0VmFsdWUoaW5kZXgpOworICAgICAgICAgICAgICAgIG1BbVBtU3Bpbm5lci5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1BbVBtQnV0dG9uLnNldFRleHQobUFtUG1TdHJpbmdzW2luZGV4XSk7CisgICAgICAgICAgICAgICAgbUFtUG1CdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1EZWxlZ2F0b3Iuc2VuZEFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX1NFTEVDVEVEKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGN1cnJlbnQgbG9jYWxlLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICBzdXBlci5zZXRDdXJyZW50TG9jYWxlKGxvY2FsZSk7CisgICAgICAgIG1UZW1wQ2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBvblRpbWVDaGFuZ2VkKCkgeworICAgICAgICBtRGVsZWdhdG9yLnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19TRUxFQ1RFRCk7CisgICAgICAgIGlmIChtT25UaW1lQ2hhbmdlZExpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1PblRpbWVDaGFuZ2VkTGlzdGVuZXIub25UaW1lQ2hhbmdlZChtRGVsZWdhdG9yLCBnZXRDdXJyZW50SG91cigpLAorICAgICAgICAgICAgICAgICAgICBnZXRDdXJyZW50TWludXRlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUhvdXJDb250cm9sKCkgeworICAgICAgICBpZiAoaXMyNEhvdXJWaWV3KCkpIHsKKyAgICAgICAgICAgIC8vICdrJyBtZWFucyAxLTI0IGhvdXIKKyAgICAgICAgICAgIGlmIChtSG91ckZvcm1hdCA9PSAnaycpIHsKKyAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0TWluVmFsdWUoMSk7CisgICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldE1heFZhbHVlKDI0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldE1pblZhbHVlKDApOworICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRNYXhWYWx1ZSgyMyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyAnSycgbWVhbnMgMC0xMSBob3VyCisgICAgICAgICAgICBpZiAobUhvdXJGb3JtYXQgPT0gJ0snKSB7CisgICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldE1pblZhbHVlKDApOworICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRNYXhWYWx1ZSgxMSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRNaW5WYWx1ZSgxKTsKKyAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0TWF4VmFsdWUoMTIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRGb3JtYXR0ZXIobUhvdXJXaXRoVHdvRGlnaXQgPyBOdW1iZXJQaWNrZXIuZ2V0VHdvRGlnaXRGb3JtYXR0ZXIoKSA6IG51bGwpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVNaW51dGVDb250cm9sKCkgeworICAgICAgICBpZiAoaXMyNEhvdXJWaWV3KCkpIHsKKyAgICAgICAgICAgIG1NaW51dGVTcGlubmVySW5wdXQuc2V0SW1lT3B0aW9ucyhFZGl0b3JJbmZvLklNRV9BQ1RJT05fRE9ORSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtTWludXRlU3Bpbm5lcklucHV0LnNldEltZU9wdGlvbnMoRWRpdG9ySW5mby5JTUVfQUNUSU9OX05FWFQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldENvbnRlbnREZXNjcmlwdGlvbnMoKSB7CisgICAgICAgIC8vIE1pbnV0ZQorICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obU1pbnV0ZVNwaW5uZXIsIFIuaWQuaW5jcmVtZW50LAorICAgICAgICAgICAgICAgIFIuc3RyaW5nLnRpbWVfcGlja2VyX2luY3JlbWVudF9taW51dGVfYnV0dG9uKTsKKyAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1NaW51dGVTcGlubmVyLCBSLmlkLmRlY3JlbWVudCwKKyAgICAgICAgICAgICAgICBSLnN0cmluZy50aW1lX3BpY2tlcl9kZWNyZW1lbnRfbWludXRlX2J1dHRvbik7CisgICAgICAgIC8vIEhvdXIKKyAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1Ib3VyU3Bpbm5lciwgUi5pZC5pbmNyZW1lbnQsCisgICAgICAgICAgICAgICAgUi5zdHJpbmcudGltZV9waWNrZXJfaW5jcmVtZW50X2hvdXJfYnV0dG9uKTsKKyAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1Ib3VyU3Bpbm5lciwgUi5pZC5kZWNyZW1lbnQsCisgICAgICAgICAgICAgICAgUi5zdHJpbmcudGltZV9waWNrZXJfZGVjcmVtZW50X2hvdXJfYnV0dG9uKTsKKyAgICAgICAgLy8gQU0vUE0KKyAgICAgICAgaWYgKG1BbVBtU3Bpbm5lciAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obUFtUG1TcGlubmVyLCBSLmlkLmluY3JlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcudGltZV9waWNrZXJfaW5jcmVtZW50X3NldF9wbV9idXR0b24pOworICAgICAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1BbVBtU3Bpbm5lciwgUi5pZC5kZWNyZW1lbnQsCisgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLnRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24oVmlldyByb290LCBpbnQgdmlld0lkLCBpbnQgY29udERlc2NSZXNJZCkgeworICAgICAgICBWaWV3IHRhcmdldCA9IHJvb3QuZmluZFZpZXdCeUlkKHZpZXdJZCk7CisgICAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkgeworICAgICAgICAgICAgdGFyZ2V0LnNldENvbnRlbnREZXNjcmlwdGlvbihtQ29udGV4dC5nZXRTdHJpbmcoY29udERlc2NSZXNJZCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVXNlZCB0byBzYXZlIC8gcmVzdG9yZSBzdGF0ZSBvZiB0aW1lIHBpY2tlcgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFNhdmVkU3RhdGUgZXh0ZW5kcyBWaWV3LkJhc2VTYXZlZFN0YXRlIHsKKworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtSG91cjsKKworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtTWludXRlOworCisgICAgICAgIHByaXZhdGUgU2F2ZWRTdGF0ZShQYXJjZWxhYmxlIHN1cGVyU3RhdGUsIGludCBob3VyLCBpbnQgbWludXRlKSB7CisgICAgICAgICAgICBzdXBlcihzdXBlclN0YXRlKTsKKyAgICAgICAgICAgIG1Ib3VyID0gaG91cjsKKyAgICAgICAgICAgIG1NaW51dGUgPSBtaW51dGU7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIFNhdmVkU3RhdGUoUGFyY2VsIGluKSB7CisgICAgICAgICAgICBzdXBlcihpbik7CisgICAgICAgICAgICBtSG91ciA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIG1NaW51dGUgPSBpbi5yZWFkSW50KCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldEhvdXIoKSB7CisgICAgICAgICAgICByZXR1cm4gbUhvdXI7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldE1pbnV0ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtTWludXRlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIGRlc3QsIGludCBmbGFncykgeworICAgICAgICAgICAgc3VwZXIud3JpdGVUb1BhcmNlbChkZXN0LCBmbGFncyk7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KG1Ib3VyKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobU1pbnV0ZSk7CisgICAgICAgIH0KKworICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncyh7InVudXNlZCIsICJoaWRpbmcifSkKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYXJjZWxhYmxlLkNyZWF0b3I8U2F2ZWRTdGF0ZT4gQ1JFQVRPUiA9IG5ldyBDcmVhdG9yPFNhdmVkU3RhdGU+KCkgeworICAgICAgICAgICAgcHVibGljIFNhdmVkU3RhdGUgY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNhdmVkU3RhdGUoaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgU2F2ZWRTdGF0ZVtdIG5ld0FycmF5KGludCBzaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTYXZlZFN0YXRlW3NpemVdOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dC5qYXZhCmluZGV4IGFkNjBhOTUuLjY1ZjFhYjcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGluZWFyTGF5b3V0LmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKQEAgLTMxLDYgKzMyLDkgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuUmVtb3RlVmlld3MuUmVtb3RlVmlldzsKIAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CisKIAogLyoqCiAgKiBBIExheW91dCB0aGF0IGFycmFuZ2VzIGl0cyBjaGlsZHJlbiBpbiBhIHNpbmdsZSBjb2x1bW4gb3IgYSBzaW5nbGUgcm93LiBUaGUgZGlyZWN0aW9uIG9mIApAQCAtNTcsOSArNjEsMjUgQEAKICAqLwogQFJlbW90ZVZpZXcKIHB1YmxpYyBjbGFzcyBMaW5lYXJMYXlvdXQgZXh0ZW5kcyBWaWV3R3JvdXAgeworICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoe0hPUklaT05UQUwsIFZFUlRJQ0FMfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgT3JpZW50YXRpb25Nb2RlIHt9CisKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIT1JJWk9OVEFMID0gMDsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWRVJUSUNBTCA9IDE7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLAorICAgICAgICAgICAgdmFsdWUgPSB7CisgICAgICAgICAgICAgICAgU0hPV19ESVZJREVSX05PTkUsCisgICAgICAgICAgICAgICAgU0hPV19ESVZJREVSX0JFR0lOTklORywKKyAgICAgICAgICAgICAgICBTSE9XX0RJVklERVJfTUlERExFLAorICAgICAgICAgICAgICAgIFNIT1dfRElWSURFUl9FTkQKKyAgICAgICAgICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIERpdmlkZXJNb2RlIHt9CisKICAgICAvKioKICAgICAgKiBEb24ndCBzaG93IGFueSBkaXZpZGVycy4KICAgICAgKi8KQEAgLTE2NSwxOCArMTg1LDIyIEBACiAgICAgcHJpdmF0ZSBpbnQgbURpdmlkZXJQYWRkaW5nOwogCiAgICAgcHVibGljIExpbmVhckxheW91dChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCk7CisgICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7CiAgICAgfQogCiAgICAgcHVibGljIExpbmVhckxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CiAgICAgCi0gICAgcHVibGljIExpbmVhckxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIExpbmVhckxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGluZWFyTGF5b3V0LCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIExpbmVhckxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkxpbmVhckxheW91dCwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgaW50IGluZGV4ID0gYS5nZXRJbnQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGluZWFyTGF5b3V0X29yaWVudGF0aW9uLCAtMSk7CiAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7CkBAIC0yMTQsNyArMjM4LDcgQEAKICAgICAgKiAgICAgICAgICAgICAgICAgICAgIHtAbGluayAjU0hPV19ESVZJREVSX01JRERMRX0sIG9yIHtAbGluayAjU0hPV19ESVZJREVSX0VORH0sCiAgICAgICogICAgICAgICAgICAgICAgICAgICBvciB7QGxpbmsgI1NIT1dfRElWSURFUl9OT05FfSB0byBzaG93IG5vIGRpdmlkZXJzLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFNob3dEaXZpZGVycyhpbnQgc2hvd0RpdmlkZXJzKSB7CisgICAgcHVibGljIHZvaWQgc2V0U2hvd0RpdmlkZXJzKEBEaXZpZGVyTW9kZSBpbnQgc2hvd0RpdmlkZXJzKSB7CiAgICAgICAgIGlmIChzaG93RGl2aWRlcnMgIT0gbVNob3dEaXZpZGVycykgewogICAgICAgICAgICAgcmVxdWVzdExheW91dCgpOwogICAgICAgICB9CkBAIC0yMzAsNiArMjU0LDcgQEAKICAgICAgKiBAcmV0dXJuIEEgZmxhZyBzZXQgaW5kaWNhdGluZyBob3cgZGl2aWRlcnMgc2hvdWxkIGJlIHNob3duIGFyb3VuZCBpdGVtcy4KICAgICAgKiBAc2VlICNzZXRTaG93RGl2aWRlcnMoaW50KQogICAgICAqLworICAgIEBEaXZpZGVyTW9kZQogICAgIHB1YmxpYyBpbnQgZ2V0U2hvd0RpdmlkZXJzKCkgewogICAgICAgICByZXR1cm4gbVNob3dEaXZpZGVyczsKICAgICB9CkBAIC0xNjczLDEyICsxNjk4LDEyIEBACiAgICAgCiAgICAgLyoqCiAgICAgICogU2hvdWxkIHRoZSBsYXlvdXQgYmUgYSBjb2x1bW4gb3IgYSByb3cuCi0gICAgICogQHBhcmFtIG9yaWVudGF0aW9uIFBhc3MgSE9SSVpPTlRBTCBvciBWRVJUSUNBTC4gRGVmYXVsdAotICAgICAqIHZhbHVlIGlzIEhPUklaT05UQUwuCisgICAgICogQHBhcmFtIG9yaWVudGF0aW9uIFBhc3Mge0BsaW5rICNIT1JJWk9OVEFMfSBvciB7QGxpbmsgI1ZFUlRJQ0FMfS4gRGVmYXVsdAorICAgICAqIHZhbHVlIGlzIHtAbGluayAjSE9SSVpPTlRBTH0uCiAgICAgICogCiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjTGluZWFyTGF5b3V0X29yaWVudGF0aW9uCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0T3JpZW50YXRpb24oaW50IG9yaWVudGF0aW9uKSB7CisgICAgcHVibGljIHZvaWQgc2V0T3JpZW50YXRpb24oQE9yaWVudGF0aW9uTW9kZSBpbnQgb3JpZW50YXRpb24pIHsKICAgICAgICAgaWYgKG1PcmllbnRhdGlvbiAhPSBvcmllbnRhdGlvbikgewogICAgICAgICAgICAgbU9yaWVudGF0aW9uID0gb3JpZW50YXRpb247CiAgICAgICAgICAgICByZXF1ZXN0TGF5b3V0KCk7CkBAIC0xNjkwLDYgKzE3MTUsNyBAQAogICAgICAqIAogICAgICAqIEByZXR1cm4gZWl0aGVyIHtAbGluayAjSE9SSVpPTlRBTH0gb3Ige0BsaW5rICNWRVJUSUNBTH0KICAgICAgKi8KKyAgICBAT3JpZW50YXRpb25Nb2RlCiAgICAgcHVibGljIGludCBnZXRPcmllbnRhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1PcmllbnRhdGlvbjsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGlzdFBvcHVwV2luZG93LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGlzdFBvcHVwV2luZG93LmphdmEKaW5kZXggNjZmZTQ2Zi4uNjQ5NTNmOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RQb3B1cFdpbmRvdy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaXN0UG9wdXBXaW5kb3cuamF2YQpAQCAtMzMsNyArMzMsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5NZWFzdXJlU3BlYzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkF0dGFjaFN0YXRlQ2hhbmdlTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25Ub3VjaExpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGlzdFZpZXcuamF2YQppbmRleCA3ODIzN2MzLi5mOTM3Y2Q2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGlzdFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGlzdFZpZXcuamF2YQpAQCAtMzksNyArMzksNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3RGVidWc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1BhcmVudDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1Jvb3RJbXBsOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkNvbGxlY3Rpb25JbmZvOwpAQCAtMTQyLDExICsxNDEsMTUgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmxpc3RWaWV3U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBMaXN0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIExpc3RWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5MaXN0VmlldywgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBMaXN0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkxpc3RWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBDaGFyU2VxdWVuY2VbXSBlbnRyaWVzID0gYS5nZXRUZXh0QXJyYXkoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGlzdFZpZXdfZW50cmllcyk7CkBAIC0yNjMsNiArMjY2LDcgQEAKICAgICAgICAgaW5mby5kYXRhID0gZGF0YTsKICAgICAgICAgaW5mby5pc1NlbGVjdGFibGUgPSBpc1NlbGVjdGFibGU7CiAgICAgICAgIG1IZWFkZXJWaWV3SW5mb3MuYWRkKGluZm8pOworICAgICAgICBtQXJlQWxsSXRlbXNTZWxlY3RhYmxlICY9IGlzU2VsZWN0YWJsZTsKIAogICAgICAgICAvLyBXcmFwIHRoZSBhZGFwdGVyIGlmIGl0IHdhc24ndCBhbHJlYWR5IHdyYXBwZWQuCiAgICAgICAgIGlmIChtQWRhcHRlciAhPSBudWxsKSB7CkBAIC0zNTYsNiArMzYwLDcgQEAKICAgICAgICAgaW5mby5kYXRhID0gZGF0YTsKICAgICAgICAgaW5mby5pc1NlbGVjdGFibGUgPSBpc1NlbGVjdGFibGU7CiAgICAgICAgIG1Gb290ZXJWaWV3SW5mb3MuYWRkKGluZm8pOworICAgICAgICBtQXJlQWxsSXRlbXNTZWxlY3RhYmxlICY9IGlzU2VsZWN0YWJsZTsKIAogICAgICAgICAvLyBXcmFwIHRoZSBhZGFwdGVyIGlmIGl0IHdhc24ndCBhbHJlYWR5IHdyYXBwZWQuCiAgICAgICAgIGlmIChtQWRhcHRlciAhPSBudWxsKSB7CkBAIC0xNzI5LDM0ICsxNzM0LDYgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBAcmV0dXJuIHRoZSBkaXJlY3QgY2hpbGQgdGhhdCBjb250YWlucyBhY2Nlc3NpYmlsaXR5IGZvY3VzLCBvciBudWxsIGlmIG5vCi0gICAgICogICAgICAgICBjaGlsZCBjb250YWlucyBhY2Nlc3NpYmlsaXR5IGZvY3VzCi0gICAgICovCi0gICAgcHJpdmF0ZSBWaWV3IGdldEFjY2Vzc2liaWxpdHlGb2N1c2VkQ2hpbGQoKSB7Ci0gICAgICAgIGZpbmFsIFZpZXdSb290SW1wbCB2aWV3Um9vdEltcGwgPSBnZXRWaWV3Um9vdEltcGwoKTsKLSAgICAgICAgaWYgKHZpZXdSb290SW1wbCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFZpZXcgZm9jdXNlZFZpZXcgPSB2aWV3Um9vdEltcGwuZ2V0QWNjZXNzaWJpbGl0eUZvY3VzZWRIb3N0KCk7Ci0gICAgICAgIGlmIChmb2N1c2VkVmlldyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFZpZXdQYXJlbnQgdmlld1BhcmVudCA9IGZvY3VzZWRWaWV3LmdldFBhcmVudCgpOwotICAgICAgICB3aGlsZSAoKHZpZXdQYXJlbnQgaW5zdGFuY2VvZiBWaWV3KSAmJiAodmlld1BhcmVudCAhPSB0aGlzKSkgewotICAgICAgICAgICAgZm9jdXNlZFZpZXcgPSAoVmlldykgdmlld1BhcmVudDsKLSAgICAgICAgICAgIHZpZXdQYXJlbnQgPSB2aWV3UGFyZW50LmdldFBhcmVudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCEodmlld1BhcmVudCBpbnN0YW5jZW9mIFZpZXcpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmb2N1c2VkVmlldzsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBPYnRhaW4gdGhlIHZpZXcgYW5kIGFkZCBpdCB0byBvdXIgbGlzdCBvZiBjaGlsZHJlbi4gVGhlIHZpZXcgY2FuIGJlIG1hZGUKICAgICAgKiBmcmVzaCwgY29udmVydGVkIGZyb20gYW4gdW51c2VkIHZpZXcsIG9yIHVzZWQgYXMgaXMgaWYgaXQgd2FzIGluIHRoZQogICAgICAqIHJlY3ljbGUgYmluLgpAQCAtMTkxNSw0NSArMTg5Miw2IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogU2V0cyB0aGUgc2VsZWN0ZWQgaXRlbSBhbmQgcG9zaXRpb25zIHRoZSBzZWxlY3Rpb24geSBwaXhlbHMgZnJvbSB0aGUgdG9wIGVkZ2UKLSAgICAgKiBvZiB0aGUgTGlzdFZpZXcuIChJZiBpbiB0b3VjaCBtb2RlLCB0aGUgaXRlbSB3aWxsIG5vdCBiZSBzZWxlY3RlZCBidXQgaXQgd2lsbAotICAgICAqIHN0aWxsIGJlIHBvc2l0aW9uZWQgYXBwcm9wcmlhdGVseS4pCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcG9zaXRpb24gSW5kZXggKHN0YXJ0aW5nIGF0IDApIG9mIHRoZSBkYXRhIGl0ZW0gdG8gYmUgc2VsZWN0ZWQuCi0gICAgICogQHBhcmFtIHkgVGhlIGRpc3RhbmNlIGZyb20gdGhlIHRvcCBlZGdlIG9mIHRoZSBMaXN0VmlldyAocGx1cyBwYWRkaW5nKSB0aGF0IHRoZQotICAgICAqICAgICAgICBpdGVtIHdpbGwgYmUgcG9zaXRpb25lZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Gcm9tVG9wKGludCBwb3NpdGlvbiwgaW50IHkpIHsKLSAgICAgICAgaWYgKG1BZGFwdGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNJblRvdWNoTW9kZSgpKSB7Ci0gICAgICAgICAgICBwb3NpdGlvbiA9IGxvb2tGb3JTZWxlY3RhYmxlUG9zaXRpb24ocG9zaXRpb24sIHRydWUpOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IDApIHsKLSAgICAgICAgICAgICAgICBzZXROZXh0U2VsZWN0ZWRQb3NpdGlvbkludChwb3NpdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtUmVzdXJyZWN0VG9Qb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBvc2l0aW9uID49IDApIHsKLSAgICAgICAgICAgIG1MYXlvdXRNb2RlID0gTEFZT1VUX1NQRUNJRklDOwotICAgICAgICAgICAgbVNwZWNpZmljVG9wID0gbUxpc3RQYWRkaW5nLnRvcCArIHk7Ci0KLSAgICAgICAgICAgIGlmIChtTmVlZFN5bmMpIHsKLSAgICAgICAgICAgICAgICBtU3luY1Bvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgICAgICAgICAgICAgbVN5bmNSb3dJZCA9IG1BZGFwdGVyLmdldEl0ZW1JZChwb3NpdGlvbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtUG9zaXRpb25TY3JvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVBvc2l0aW9uU2Nyb2xsZXIuc3RvcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVxdWVzdExheW91dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCiAgICAgICogTWFrZXMgdGhlIGl0ZW0gYXQgdGhlIHN1cHBsaWVkIHBvc2l0aW9uIHNlbGVjdGVkLgogICAgICAqIAogICAgICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGl0ZW0gdG8gc2VsZWN0CkBAIC0zMjY2LDE0ICszMjA0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHJhd0RpdmlkZXJzICYmIChib3R0b20gPCBsaXN0Qm90dG9tKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhKGRyYXdPdmVyc2Nyb2xsRm9vdGVyICYmIGlzTGFzdEl0ZW0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IG5leHRJbmRleCA9IChpdGVtSW5kZXggKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEcmF3IGRpdmlkZXJzIGJldHdlZW4gZW5hYmxlZCBpdGVtcywgaGVhZGVycyBhbmQvb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb290ZXJzIHdoZW4gZW5hYmxlZCwgYW5kIHRoZSBlbmQgb2YgdGhlIGxpc3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZUFsbEl0ZW1zU2VsZWN0YWJsZSB8fCAoKGFkYXB0ZXIuaXNFbmFibGVkKGl0ZW1JbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChoZWFkZXJEaXZpZGVycyAmJiBpc0hlYWRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChmb290ZXJEaXZpZGVycyAmJiBpc0Zvb3RlcikpICYmIChpc0xhc3RJdGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhZGFwdGVyLmlzRW5hYmxlZChuZXh0SW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaGVhZGVyRGl2aWRlcnMgJiYgKG5leHRJbmRleCA8IGhlYWRlckNvdW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChmb290ZXJEaXZpZGVycyAmJiAobmV4dEluZGV4ID49IGZvb3RlckxpbWl0KSkpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERyYXcgZGl2aWRlcnMgYmV0d2VlbiBlbmFibGVkIGl0ZW1zLCBoZWFkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kL29yIGZvb3RlcnMgd2hlbiBlbmFibGVkIGFuZCByZXF1ZXN0ZWQsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBsYXN0IGVuYWJsZWQgaXRlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRhcHRlci5pc0VuYWJsZWQoaXRlbUluZGV4KSAmJiAoaGVhZGVyRGl2aWRlcnMgfHwgIWlzSGVhZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobmV4dEluZGV4ID49IGhlYWRlckNvdW50KSkgJiYgKGlzTGFzdEl0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGFkYXB0ZXIuaXNFbmFibGVkKG5leHRJbmRleCkgJiYgKGZvb3RlckRpdmlkZXJzIHx8ICFpc0Zvb3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobmV4dEluZGV4IDwgZm9vdGVyTGltaXQpKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCA9IGJvdHRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmJvdHRvbSA9IGJvdHRvbSArIGRpdmlkZXJIZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdEaXZpZGVyKGNhbnZhcywgYm91bmRzLCBpKTsKQEAgLTMzMTUsMTQgKzMyNTIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcmF3RGl2aWRlcnMgJiYgKHRvcCA+IGVmZmVjdGl2ZVBhZGRpbmdUb3ApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0ZpcnN0SXRlbSA9IChpID09IHN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcHJldmlvdXNJbmRleCA9IChpdGVtSW5kZXggLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEcmF3IGRpdmlkZXJzIGJldHdlZW4gZW5hYmxlZCBpdGVtcywgaGVhZGVycyBhbmQvb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb290ZXJzIHdoZW4gZW5hYmxlZCwgYW5kIHRoZSBlbmQgb2YgdGhlIGxpc3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZUFsbEl0ZW1zU2VsZWN0YWJsZSB8fCAoKGFkYXB0ZXIuaXNFbmFibGVkKGl0ZW1JbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChoZWFkZXJEaXZpZGVycyAmJiBpc0hlYWRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChmb290ZXJEaXZpZGVycyAmJiBpc0Zvb3RlcikpICYmIChpc0ZpcnN0SXRlbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYWRhcHRlci5pc0VuYWJsZWQocHJldmlvdXNJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChoZWFkZXJEaXZpZGVycyAmJiAocHJldmlvdXNJbmRleCA8IGhlYWRlckNvdW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChmb290ZXJEaXZpZGVycyAmJiAocHJldmlvdXNJbmRleCA+PSBmb290ZXJMaW1pdCkpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEcmF3IGRpdmlkZXJzIGJldHdlZW4gZW5hYmxlZCBpdGVtcywgaGVhZGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZC9vciBmb290ZXJzIHdoZW4gZW5hYmxlZCBhbmQgcmVxdWVzdGVkLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgdGhlIGZpcnN0IGVuYWJsZWQgaXRlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRhcHRlci5pc0VuYWJsZWQoaXRlbUluZGV4KSAmJiAoaGVhZGVyRGl2aWRlcnMgfHwgIWlzSGVhZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocHJldmlvdXNJbmRleCA+PSBoZWFkZXJDb3VudCkpICYmIChpc0ZpcnN0SXRlbSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci5pc0VuYWJsZWQocHJldmlvdXNJbmRleCkgJiYgKGZvb3RlckRpdmlkZXJzIHx8ICFpc0Zvb3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocHJldmlvdXNJbmRleCA8IGZvb3RlckxpbWl0KSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy50b3AgPSB0b3AgLSBkaXZpZGVySGVpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMuYm90dG9tID0gdG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIHRoZSBtZXRob2QgdGhlIGNoaWxkIEFCT1ZFIHRoZSBkaXZpZGVyLApAQCAtMzc3MSw2ICszNzA3LDg0IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgaW50IGdldEhlaWdodEZvclBvc2l0aW9uKGludCBwb3NpdGlvbikgeworICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gc3VwZXIuZ2V0SGVpZ2h0Rm9yUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBpZiAoc2hvdWxkQWRqdXN0SGVpZ2h0Rm9yRGl2aWRlcihwb3NpdGlvbikpIHsKKyAgICAgICAgICAgIHJldHVybiBoZWlnaHQgKyBtRGl2aWRlckhlaWdodDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaGVpZ2h0OworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBzaG91bGRBZGp1c3RIZWlnaHRGb3JEaXZpZGVyKGludCBpdGVtSW5kZXgpIHsKKyAgICAgICAgZmluYWwgaW50IGRpdmlkZXJIZWlnaHQgPSBtRGl2aWRlckhlaWdodDsKKyAgICAgICAgZmluYWwgRHJhd2FibGUgb3ZlcnNjcm9sbEhlYWRlciA9IG1PdmVyU2Nyb2xsSGVhZGVyOworICAgICAgICBmaW5hbCBEcmF3YWJsZSBvdmVyc2Nyb2xsRm9vdGVyID0gbU92ZXJTY3JvbGxGb290ZXI7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gZHJhd092ZXJzY3JvbGxIZWFkZXIgPSBvdmVyc2Nyb2xsSGVhZGVyICE9IG51bGw7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gZHJhd092ZXJzY3JvbGxGb290ZXIgPSBvdmVyc2Nyb2xsRm9vdGVyICE9IG51bGw7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gZHJhd0RpdmlkZXJzID0gZGl2aWRlckhlaWdodCA+IDAgJiYgbURpdmlkZXIgIT0gbnVsbDsKKworICAgICAgICBpZiAoZHJhd0RpdmlkZXJzKSB7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIGZpbGxGb3JNaXNzaW5nRGl2aWRlcnMgPSBpc09wYXF1ZSgpICYmICFzdXBlci5pc09wYXF1ZSgpOworICAgICAgICAgICAgZmluYWwgaW50IGl0ZW1Db3VudCA9IG1JdGVtQ291bnQ7CisgICAgICAgICAgICBmaW5hbCBpbnQgaGVhZGVyQ291bnQgPSBtSGVhZGVyVmlld0luZm9zLnNpemUoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBmb290ZXJMaW1pdCA9IChpdGVtQ291bnQgLSBtRm9vdGVyVmlld0luZm9zLnNpemUoKSk7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzSGVhZGVyID0gKGl0ZW1JbmRleCA8IGhlYWRlckNvdW50KTsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNGb290ZXIgPSAoaXRlbUluZGV4ID49IGZvb3RlckxpbWl0KTsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaGVhZGVyRGl2aWRlcnMgPSBtSGVhZGVyRGl2aWRlcnNFbmFibGVkOworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBmb290ZXJEaXZpZGVycyA9IG1Gb290ZXJEaXZpZGVyc0VuYWJsZWQ7CisgICAgICAgICAgICBpZiAoKGhlYWRlckRpdmlkZXJzIHx8ICFpc0hlYWRlcikgJiYgKGZvb3RlckRpdmlkZXJzIHx8ICFpc0Zvb3RlcikpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBMaXN0QWRhcHRlciBhZGFwdGVyID0gbUFkYXB0ZXI7CisgICAgICAgICAgICAgICAgaWYgKCFtU3RhY2tGcm9tQm90dG9tKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMYXN0SXRlbSA9IChpdGVtSW5kZXggPT0gKGl0ZW1Db3VudCAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkcmF3T3ZlcnNjcm9sbEZvb3RlciB8fCAhaXNMYXN0SXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IG5leHRJbmRleCA9IGl0ZW1JbmRleCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEcmF3IGRpdmlkZXJzIGJldHdlZW4gZW5hYmxlZCBpdGVtcywgaGVhZGVycworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kL29yIGZvb3RlcnMgd2hlbiBlbmFibGVkIGFuZCByZXF1ZXN0ZWQsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIGxhc3QgZW5hYmxlZCBpdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkYXB0ZXIuaXNFbmFibGVkKGl0ZW1JbmRleCkgJiYgKGhlYWRlckRpdmlkZXJzIHx8ICFpc0hlYWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobmV4dEluZGV4ID49IGhlYWRlckNvdW50KSkgJiYgKGlzTGFzdEl0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYWRhcHRlci5pc0VuYWJsZWQobmV4dEluZGV4KSAmJiAoZm9vdGVyRGl2aWRlcnMgfHwgIWlzRm9vdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobmV4dEluZGV4IDwgZm9vdGVyTGltaXQpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsbEZvck1pc3NpbmdEaXZpZGVycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHN0YXJ0ID0gZHJhd092ZXJzY3JvbGxIZWFkZXIgPyAxIDogMDsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0ZpcnN0SXRlbSA9IChpdGVtSW5kZXggPT0gc3RhcnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3RJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcHJldmlvdXNJbmRleCA9IChpdGVtSW5kZXggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERyYXcgZGl2aWRlcnMgYmV0d2VlbiBlbmFibGVkIGl0ZW1zLCBoZWFkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQvb3IgZm9vdGVycyB3aGVuIGVuYWJsZWQgYW5kIHJlcXVlc3RlZCwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgdGhlIGZpcnN0IGVuYWJsZWQgaXRlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGFwdGVyLmlzRW5hYmxlZChpdGVtSW5kZXgpICYmIChoZWFkZXJEaXZpZGVycyB8fCAhaXNIZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHByZXZpb3VzSW5kZXggPj0gaGVhZGVyQ291bnQpKSAmJiAoaXNGaXJzdEl0ZW0gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci5pc0VuYWJsZWQocHJldmlvdXNJbmRleCkgJiYgKGZvb3RlckRpdmlkZXJzIHx8ICFpc0Zvb3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwcmV2aW91c0luZGV4IDwgZm9vdGVyTGltaXQpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsbEZvck1pc3NpbmdEaXZpZGVycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0Um93Rm9yUG9zaXRpb24oaW50IHBvc2l0aW9uKSB7CisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldEZpcnN0UG9zaXRpb25Gb3JSb3coaW50IHJvdykgeworICAgICAgICByZXR1cm4gcm93OworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKICAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKICAgICAgICAgZXZlbnQuc2V0Q2xhc3NOYW1lKExpc3RWaWV3LmNsYXNzLmdldE5hbWUoKSk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTWVkaWFDb250cm9sbGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTWVkaWFDb250cm9sbGVyLmphdmEKaW5kZXggOWM2MWZkNi4uNTQ2Y2M1ZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L01lZGlhQ29udHJvbGxlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9NZWRpYUNvbnRyb2xsZXIuamF2YQpAQCAtNDQyLDcgKzQ0MiwxOSBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaEV2ZW50KE1vdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIHNob3coc0RlZmF1bHRUaW1lb3V0KTsKKyAgICAgICAgc3dpdGNoIChldmVudC5nZXRBY3Rpb24oKSkgeworICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fRE9XTjoKKyAgICAgICAgICAgICAgICBzaG93KDApOyAvLyBzaG93IHVudGlsIGhpZGUgaXMgY2FsbGVkCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDoKKyAgICAgICAgICAgICAgICBzaG93KHNEZWZhdWx0VGltZW91dCk7IC8vIHN0YXJ0IHRpbWVvdXQKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX0NBTkNFTDoKKyAgICAgICAgICAgICAgICBoaWRlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L011bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9NdWx0aUF1dG9Db21wbGV0ZVRleHRWaWV3LmphdmEKaW5kZXggMGIzMGM4NC4uY2JkMDFiMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L011bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTXVsdGlBdXRvQ29tcGxldGVUZXh0Vmlldy5qYXZhCkBAIC02Nyw4ICs2NywxMyBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuYXV0b0NvbXBsZXRlVGV4dFZpZXdTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIE11bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBNdWx0aUF1dG9Db21wbGV0ZVRleHRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIE11bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICAvKiBwYWNrYWdlICovIHZvaWQgZmluaXNoSW5pdCgpIHsgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L051bWJlclBpY2tlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L051bWJlclBpY2tlci5qYXZhCmluZGV4IGMwZmRlMmUuLjQ0YzQ5ODcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9OdW1iZXJQaWNrZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTnVtYmVyUGlja2VyLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLndpZGdldDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLldpZGdldDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0OwpAQCAtNTMsNiArNTQsOCBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiBpbXBvcnQgbGliY29yZS5pY3UuTG9jYWxlRGF0YTsKIAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CkBAIC00OTMsNiArNDk2LDEwIEBACiAgICAgICogSW50ZXJmYWNlIHRvIGxpc3RlbiBmb3IgdGhlIHBpY2tlciBzY3JvbGwgc3RhdGUuCiAgICAgICovCiAgICAgcHVibGljIGludGVyZmFjZSBPblNjcm9sbExpc3RlbmVyIHsKKyAgICAgICAgLyoqIEBoaWRlICovCisgICAgICAgIEBJbnREZWYoe1NDUk9MTF9TVEFURV9JRExFLCBTQ1JPTExfU1RBVEVfVE9VQ0hfU0NST0xMLCBTQ1JPTExfU1RBVEVfRkxJTkd9KQorICAgICAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgICAgIHB1YmxpYyBAaW50ZXJmYWNlIFNjcm9sbFN0YXRlIHt9CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSB2aWV3IGlzIG5vdCBzY3JvbGxpbmcuCkBAIC01MTgsNyArNTI1LDcgQEAKICAgICAgICAgICogICAgICAgICAgICB7QGxpbmsgI1NDUk9MTF9TVEFURV9UT1VDSF9TQ1JPTEx9IG9yCiAgICAgICAgICAqICAgICAgICAgICAge0BsaW5rICNTQ1JPTExfU1RBVEVfSURMRX0uCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBvblNjcm9sbFN0YXRlQ2hhbmdlKE51bWJlclBpY2tlciB2aWV3LCBpbnQgc2Nyb2xsU3RhdGUpOworICAgICAgICBwdWJsaWMgdm9pZCBvblNjcm9sbFN0YXRlQ2hhbmdlKE51bWJlclBpY2tlciB2aWV3LCBAU2Nyb2xsU3RhdGUgaW50IHNjcm9sbFN0YXRlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTU1OSwxNCArNTY2LDMzIEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gY29udGV4dCB0aGUgYXBwbGljYXRpb24gZW52aXJvbm1lbnQuCiAgICAgICogQHBhcmFtIGF0dHJzIGEgY29sbGVjdGlvbiBvZiBhdHRyaWJ1dGVzLgotICAgICAqIEBwYXJhbSBkZWZTdHlsZSBUaGUgZGVmYXVsdCBzdHlsZSB0byBhcHBseSB0byB0aGlzIHZpZXcuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCiAgICAgICovCi0gICAgcHVibGljIE51bWJlclBpY2tlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIE51bWJlclBpY2tlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBudW1iZXIgcGlja2VyCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCB0aGUgYXBwbGljYXRpb24gZW52aXJvbm1lbnQuCisgICAgICogQHBhcmFtIGF0dHJzIGEgY29sbGVjdGlvbiBvZiBhdHRyaWJ1dGVzLgorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgQW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgorICAgICAqIEBwYXJhbSBkZWZTdHlsZVJlcyBBIHJlc291cmNlIGlkZW50aWZpZXIgb2YgYSBzdHlsZSByZXNvdXJjZSB0aGF0CisgICAgICogICAgICAgIHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgdmlldywgdXNlZCBvbmx5IGlmCisgICAgICogICAgICAgIGRlZlN0eWxlQXR0ciBpcyAwIG9yIGNhbiBub3QgYmUgZm91bmQgaW4gdGhlIHRoZW1lLiBDYW4gYmUgMAorICAgICAqICAgICAgICB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICovCisgICAgcHVibGljIE51bWJlclBpY2tlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICAvLyBwcm9jZXNzIHN0eWxlIGF0dHJpYnV0ZXMKLSAgICAgICAgVHlwZWRBcnJheSBhdHRyaWJ1dGVzQXJyYXkgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsIFIuc3R5bGVhYmxlLk51bWJlclBpY2tlciwgZGVmU3R5bGUsIDApOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGF0dHJpYnV0ZXNBcnJheSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgUi5zdHlsZWFibGUuTnVtYmVyUGlja2VyLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgZmluYWwgaW50IGxheW91dFJlc0lkID0gYXR0cmlidXRlc0FycmF5LmdldFJlc291cmNlSWQoCiAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuTnVtYmVyUGlja2VyX2ludGVybmFsTGF5b3V0LCBERUZBVUxUX0xBWU9VVF9SRVNPVVJDRV9JRCk7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9PdmVyU2Nyb2xsZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9PdmVyU2Nyb2xsZXIuamF2YQppbmRleCBmMjE4MTk5Li43YjNkZDMxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvT3ZlclNjcm9sbGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L092ZXJTY3JvbGxlci5qYXZhCkBAIC03MCw3ICs3MCwxMSBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIE92ZXJTY3JvbGxlcihDb250ZXh0IGNvbnRleHQsIEludGVycG9sYXRvciBpbnRlcnBvbGF0b3IsIGJvb2xlYW4gZmx5d2hlZWwpIHsKLSAgICAgICAgbUludGVycG9sYXRvciA9IGludGVycG9sYXRvcjsKKyAgICAgICAgaWYgKGludGVycG9sYXRvciA9PSBudWxsKSB7CisgICAgICAgICAgICBtSW50ZXJwb2xhdG9yID0gbmV3IFNjcm9sbGVyLlZpc2NvdXNGbHVpZEludGVycG9sYXRvcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUludGVycG9sYXRvciA9IGludGVycG9sYXRvcjsKKyAgICAgICAgfQogICAgICAgICBtRmx5d2hlZWwgPSBmbHl3aGVlbDsKICAgICAgICAgbVNjcm9sbGVyWCA9IG5ldyBTcGxpbmVPdmVyU2Nyb2xsZXIoY29udGV4dCk7CiAgICAgICAgIG1TY3JvbGxlclkgPSBuZXcgU3BsaW5lT3ZlclNjcm9sbGVyKGNvbnRleHQpOwpAQCAtMTEyLDcgKzExNiwxMSBAQAogICAgIH0KIAogICAgIHZvaWQgc2V0SW50ZXJwb2xhdG9yKEludGVycG9sYXRvciBpbnRlcnBvbGF0b3IpIHsKLSAgICAgICAgbUludGVycG9sYXRvciA9IGludGVycG9sYXRvcjsKKyAgICAgICAgaWYgKGludGVycG9sYXRvciA9PSBudWxsKSB7CisgICAgICAgICAgICBtSW50ZXJwb2xhdG9yID0gbmV3IFNjcm9sbGVyLlZpc2NvdXNGbHVpZEludGVycG9sYXRvcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUludGVycG9sYXRvciA9IGludGVycG9sYXRvcjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtMzAyLDE0ICszMTAsNyBAQAogCiAgICAgICAgICAgICAgICAgZmluYWwgaW50IGR1cmF0aW9uID0gbVNjcm9sbGVyWC5tRHVyYXRpb247CiAgICAgICAgICAgICAgICAgaWYgKGVsYXBzZWRUaW1lIDwgZHVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgcSA9IChmbG9hdCkgKGVsYXBzZWRUaW1lKSAvIGR1cmF0aW9uOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtSW50ZXJwb2xhdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBTY3JvbGxlci52aXNjb3VzRmx1aWQocSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxID0gbUludGVycG9sYXRvci5nZXRJbnRlcnBvbGF0aW9uKHEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgcSA9IG1JbnRlcnBvbGF0b3IuZ2V0SW50ZXJwb2xhdGlvbihlbGFwc2VkVGltZSAvIChmbG9hdCkgZHVyYXRpb24pOwogICAgICAgICAgICAgICAgICAgICBtU2Nyb2xsZXJYLnVwZGF0ZVNjcm9sbChxKTsKICAgICAgICAgICAgICAgICAgICAgbVNjcm9sbGVyWS51cGRhdGVTY3JvbGwocSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Qb3B1cFdpbmRvdy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1BvcHVwV2luZG93LmphdmEKaW5kZXggYmUyMGQyZC4uNmU3MWE1YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1BvcHVwV2luZG93LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1BvcHVwV2luZG93LmphdmEKQEAgLTE3MCw4ICsxNzAsOCBAQAogICAgICAqCiAgICAgICogPHA+VGhlIHBvcHVwIGRvZXMgcHJvdmlkZSBhIGJhY2tncm91bmQuPC9wPgogICAgICAqLwotICAgIHB1YmxpYyBQb3B1cFdpbmRvdyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgUG9wdXBXaW5kb3coQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKICAgICB9CiAgICAgCiAgICAgLyoqCkBAIC0xODMsOCArMTgzLDcgQEAKICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwogICAgICAgICBtV2luZG93TWFuYWdlciA9IChXaW5kb3dNYW5hZ2VyKWNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJTkRPV19TRVJWSUNFKTsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPQotICAgICAgICAgICAgY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCiAgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlBvcHVwV2luZG93LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtQmFja2dyb3VuZCA9IGEuZ2V0RHJhd2FibGUoUi5zdHlsZWFibGUuUG9wdXBXaW5kb3dfcG9wdXBCYWNrZ3JvdW5kKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Qcm9ncmVzc0Jhci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1Byb2dyZXNzQmFyLmphdmEKaW5kZXggNTM5MmE5Ni4uYWY5ZTJmMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1Byb2dyZXNzQmFyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1Byb2dyZXNzQmFyLmphdmEKQEAgLTI0MiwyOSArMjQyLDI2IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5wcm9ncmVzc0JhclN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgUHJvZ3Jlc3NCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIFByb2dyZXNzQmFyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJvZ3Jlc3NCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSwgaW50IHN0eWxlUmVzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFByb2dyZXNzQmFyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCiAgICAgICAgIG1VaVRocmVhZElkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgpOwogICAgICAgICBpbml0UHJvZ3Jlc3NCYXIoKTsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPQotICAgICAgICAgICAgY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5Qcm9ncmVzc0JhciwgZGVmU3R5bGUsIHN0eWxlUmVzKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5Qcm9ncmVzc0JhciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIAogICAgICAgICBtTm9JbnZhbGlkYXRlID0gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIERyYXdhYmxlIGRyYXdhYmxlID0gYS5nZXREcmF3YWJsZShSLnN0eWxlYWJsZS5Qcm9ncmVzc0Jhcl9wcm9ncmVzc0RyYXdhYmxlKTsKICAgICAgICAgaWYgKGRyYXdhYmxlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGRyYXdhYmxlID0gdGlsZWlmeShkcmF3YWJsZSwgZmFsc2UpOwogICAgICAgICAgICAgLy8gQ2FsbGluZyB0aGlzIG1ldGhvZCBjYW4gc2V0IG1NYXhIZWlnaHQsIG1ha2Ugc3VyZSB0aGUgY29ycmVzcG9uZGluZwogICAgICAgICAgICAgLy8gWE1MIGF0dHJpYnV0ZSBmb3IgbU1heEhlaWdodCBpcyByZWFkIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QKLSAgICAgICAgICAgIHNldFByb2dyZXNzRHJhd2FibGUoZHJhd2FibGUpOworICAgICAgICAgICAgc2V0UHJvZ3Jlc3NEcmF3YWJsZVRpbGVkKGRyYXdhYmxlKTsKICAgICAgICAgfQogCiAKQEAgLTI5Myw4ICsyOTAsNyBAQAogCiAgICAgICAgIGRyYXdhYmxlID0gYS5nZXREcmF3YWJsZShSLnN0eWxlYWJsZS5Qcm9ncmVzc0Jhcl9pbmRldGVybWluYXRlRHJhd2FibGUpOwogICAgICAgICBpZiAoZHJhd2FibGUgIT0gbnVsbCkgewotICAgICAgICAgICAgZHJhd2FibGUgPSB0aWxlaWZ5SW5kZXRlcm1pbmF0ZShkcmF3YWJsZSk7Ci0gICAgICAgICAgICBzZXRJbmRldGVybWluYXRlRHJhd2FibGUoZHJhd2FibGUpOworICAgICAgICAgICAgc2V0SW5kZXRlcm1pbmF0ZURyYXdhYmxlVGlsZWQoZHJhd2FibGUpOwogICAgICAgICB9CiAKICAgICAgICAgbU9ubHlJbmRldGVybWluYXRlID0gYS5nZXRCb29sZWFuKApAQCAtMzA4LDYgKzMwNCwxMSBAQAogICAgICAgICBtTWlycm9yRm9yUnRsID0gYS5nZXRCb29sZWFuKFIuc3R5bGVhYmxlLlByb2dyZXNzQmFyX21pcnJvckZvclJ0bCwgbU1pcnJvckZvclJ0bCk7CiAKICAgICAgICAgYS5yZWN5Y2xlKCk7CisKKyAgICAgICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIHRoaXMgdmlldyBpcyBpbXBvcnRhbnQgZm9yIGFjY2Vzc2liaWxpdHkuCisgICAgICAgIGlmIChnZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KCkgPT0gVmlldy5JTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfQVVUTykgeworICAgICAgICAgICAgc2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eShWaWV3LklNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9ZRVMpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC00NjcsMTEgKzQ2OCw5IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogPHA+RGVmaW5lIHRoZSBkcmF3YWJsZSB1c2VkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciBpbgotICAgICAqIGluZGV0ZXJtaW5hdGUgbW9kZS48L3A+CisgICAgICogRGVmaW5lIHRoZSBkcmF3YWJsZSB1c2VkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciBpbiBpbmRldGVybWluYXRlIG1vZGUuCiAgICAgICoKICAgICAgKiBAcGFyYW0gZCB0aGUgbmV3IGRyYXdhYmxlCi0gICAgICoKICAgICAgKiBAc2VlICNnZXRJbmRldGVybWluYXRlRHJhd2FibGUoKQogICAgICAqIEBzZWUgI3NldEluZGV0ZXJtaW5hdGUoYm9vbGVhbikKICAgICAgKi8KQEAgLTQ4OCw2ICs0ODcsMjUgQEAKICAgICAgICAgICAgIHBvc3RJbnZhbGlkYXRlKCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWZpbmUgdGhlIHRpbGVhYmxlIGRyYXdhYmxlIHVzZWQgdG8gZHJhdyB0aGUgcHJvZ3Jlc3MgYmFyIGluCisgICAgICogaW5kZXRlcm1pbmF0ZSBtb2RlLgorICAgICAqIDxwPgorICAgICAqIElmIHRoZSBkcmF3YWJsZSBpcyBhIEJpdG1hcERyYXdhYmxlIG9yIGNvbnRhaW5zIEJpdG1hcERyYXdhYmxlcywgYQorICAgICAqIHRpbGVkIGNvcHkgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGRpc3BsYXkgYXMgYSBwcm9ncmVzcyBiYXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZCB0aGUgbmV3IGRyYXdhYmxlCisgICAgICogQHNlZSAjZ2V0SW5kZXRlcm1pbmF0ZURyYXdhYmxlKCkKKyAgICAgKiBAc2VlICNzZXRJbmRldGVybWluYXRlKGJvb2xlYW4pCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SW5kZXRlcm1pbmF0ZURyYXdhYmxlVGlsZWQoRHJhd2FibGUgZCkgeworICAgICAgICBpZiAoZCAhPSBudWxsKSB7CisgICAgICAgICAgICBkID0gdGlsZWlmeUluZGV0ZXJtaW5hdGUoZCk7CisgICAgICAgIH0KKworICAgICAgICBzZXRJbmRldGVybWluYXRlRHJhd2FibGUoZCk7CisgICAgfQogICAgIAogICAgIC8qKgogICAgICAqIDxwPkdldCB0aGUgZHJhd2FibGUgdXNlZCB0byBkcmF3IHRoZSBwcm9ncmVzcyBiYXIgaW4KQEAgLTUwMywxMSArNTIxLDkgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiA8cD5EZWZpbmUgdGhlIGRyYXdhYmxlIHVzZWQgdG8gZHJhdyB0aGUgcHJvZ3Jlc3MgYmFyIGluCi0gICAgICogcHJvZ3Jlc3MgbW9kZS48L3A+CisgICAgICogRGVmaW5lIHRoZSBkcmF3YWJsZSB1c2VkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciBpbiBwcm9ncmVzcyBtb2RlLgogICAgICAqCiAgICAgICogQHBhcmFtIGQgdGhlIG5ldyBkcmF3YWJsZQotICAgICAqCiAgICAgICogQHNlZSAjZ2V0UHJvZ3Jlc3NEcmF3YWJsZSgpCiAgICAgICogQHNlZSAjc2V0SW5kZXRlcm1pbmF0ZShib29sZWFuKQogICAgICAqLwpAQCAtNTQ2LDYgKzU2MiwyNSBAQAogICAgICAgICAgICAgZG9SZWZyZXNoUHJvZ3Jlc3MoUi5pZC5zZWNvbmRhcnlQcm9ncmVzcywgbVNlY29uZGFyeVByb2dyZXNzLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQorCisgICAgLyoqCisgICAgICogRGVmaW5lIHRoZSB0aWxlYWJsZSBkcmF3YWJsZSB1c2VkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciBpbgorICAgICAqIHByb2dyZXNzIG1vZGUuCisgICAgICogPHA+CisgICAgICogSWYgdGhlIGRyYXdhYmxlIGlzIGEgQml0bWFwRHJhd2FibGUgb3IgY29udGFpbnMgQml0bWFwRHJhd2FibGVzLCBhCisgICAgICogdGlsZWQgY29weSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgZGlzcGxheSBhcyBhIHByb2dyZXNzIGJhci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkIHRoZSBuZXcgZHJhd2FibGUKKyAgICAgKiBAc2VlICNnZXRQcm9ncmVzc0RyYXdhYmxlKCkKKyAgICAgKiBAc2VlICNzZXRJbmRldGVybWluYXRlKGJvb2xlYW4pCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UHJvZ3Jlc3NEcmF3YWJsZVRpbGVkKERyYXdhYmxlIGQpIHsKKyAgICAgICAgaWYgKGQgIT0gbnVsbCkgeworICAgICAgICAgICAgZCA9IHRpbGVpZnkoZCwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgc2V0UHJvZ3Jlc3NEcmF3YWJsZShkKTsKKyAgICB9CiAgICAgCiAgICAgLyoqCiAgICAgICogQHJldHVybiBUaGUgZHJhd2FibGUgY3VycmVudGx5IHVzZWQgdG8gZHJhdyB0aGUgcHJvZ3Jlc3MgYmFyCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUXVpY2tDb250YWN0QmFkZ2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9RdWlja0NvbnRhY3RCYWRnZS5qYXZhCmluZGV4IGZkMmY3NTQuLmE0Zjc1OGMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9RdWlja0NvbnRhY3RCYWRnZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9RdWlja0NvbnRhY3RCYWRnZS5qYXZhCkBAIC04NCw4ICs4NCwxMyBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgUXVpY2tDb250YWN0QmFkZ2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBRdWlja0NvbnRhY3RCYWRnZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBRdWlja0NvbnRhY3RCYWRnZSgKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIFR5cGVkQXJyYXkgc3R5bGVkQXR0cmlidXRlcyA9IG1Db250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoUi5zdHlsZWFibGUuVGhlbWUpOwogICAgICAgICBtT3ZlcmxheSA9IHN0eWxlZEF0dHJpYnV0ZXMuZ2V0RHJhd2FibGUoCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmFkaWFsVGltZVBpY2tlclZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYWRpYWxUaW1lUGlja2VyVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjOWFiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmFkaWFsVGltZVBpY2tlclZpZXcuamF2YQpAQCAtMCwwICsxLDEzOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQud2lkZ2V0OworCitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3JTZXQ7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uS2V5ZnJhbWU7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXI7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uVmFsdWVBbmltYXRvcjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3VwcHJlc3NMaW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5UeXBlZmFjZTsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3RGOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzOworaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuVGltZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LkhhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzOworaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKKworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0U3ltYm9sczsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCisvKioKKyAqIFZpZXcgdG8gc2hvdyBhIGNsb2NrIGNpcmNsZSBwaWNrZXIgKHdpdGggb25lIG9yIHR3byBwaWNraW5nIGNpcmNsZXMpCisgKgorICogQGhpZGUKKyAqLworcHVibGljIGNsYXNzIFJhZGlhbFRpbWVQaWNrZXJWaWV3IGV4dGVuZHMgVmlldyBpbXBsZW1lbnRzIFZpZXcuT25Ub3VjaExpc3RlbmVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNsb2NrVmlldyI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVCVUdfQ09MT1IgPSAweDIwRkYwMDAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUJVR19URVhUX0NPTE9SID0gMHg2MEZGMDAwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVCVUdfU1RST0tFX1dJRFRIID0gMjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIT1VSUyA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTlVURVMgPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIT1VSU19JTk5FUiA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFNUE0gPSAzOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFTEVDVE9SX0NJUkNMRSA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFTEVDVE9SX0RPVCA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFTEVDVE9SX0xJTkUgPSAyOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFNID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUE0gPSAxOworCisgICAgLy8gT3BhcXVlIGFscGhhIGxldmVsCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFMUEhBX09QQVFVRSA9IDI1NTsKKworICAgIC8vIFRyYW5zcGFyZW50IGFscGhhIGxldmVsCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFMUEhBX1RSQU5TUEFSRU5UID0gMDsKKworICAgIC8vIEFscGhhIGxldmVsIG9mIGNvbG9yIGZvciBzZWxlY3Rvci4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUxQSEFfU0VMRUNUT1IgPSA1MTsKKworICAgIC8vIEFscGhhIGxldmVsIG9mIGNvbG9yIGZvciBzZWxlY3RlZCBjaXJjbGUuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFMUEhBX0FNUE1fU0VMRUNURUQgPSBBTFBIQV9TRUxFQ1RPUjsKKworICAgIC8vIEFscGhhIGxldmVsIG9mIGNvbG9yIGZvciBwcmVzc2VkIGNpcmNsZS4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUxQSEFfQU1QTV9QUkVTU0VEID0gMTc1OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgQ09TSU5FXzMwX0RFR1JFRVMgPSAoKGZsb2F0KSBNYXRoLnNxcnQoMykpICogMC41ZjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBTSU5FXzMwX0RFR1JFRVMgPSAwLjVmOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFR1JFRVNfRk9SX09ORV9IT1VSID0gMzA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFR1JFRVNfRk9SX09ORV9NSU5VVEUgPSA2OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gSE9VUlNfTlVNQkVSUyA9IHsxMiwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBIT1VSU19OVU1CRVJTXzI0ID0gezAsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyM307CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gTUlOVVRFU19OVU1CRVJTID0gezAsIDUsIDEwLCAxNSwgMjAsIDI1LCAzMCwgMzUsIDQwLCA0NSwgNTAsIDU1fTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDRU5URVJfUkFESVVTID0gMjsKKworICAgIHByaXZhdGUgc3RhdGljIGludFtdIHNTbmFwUHJlZmVyMzBzTWFwID0gbmV3IGludFszNjFdOworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtSG91cnMxMlRleHRzID0gbmV3IFN0cmluZ1sxMl07CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtT3V0ZXJIb3VyczI0VGV4dHMgPSBuZXcgU3RyaW5nWzEyXTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZ1tdIG1Jbm5lckhvdXJzMjRUZXh0cyA9IG5ldyBTdHJpbmdbMTJdOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nW10gbU1pbnV0ZXNUZXh0cyA9IG5ldyBTdHJpbmdbMTJdOworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtQW1QbVRleHQgPSBuZXcgU3RyaW5nWzJdOworCisgICAgcHJpdmF0ZSBmaW5hbCBQYWludFtdIG1QYWludCA9IG5ldyBQYWludFsyXTsKKyAgICBwcml2YXRlIGZpbmFsIFBhaW50IG1QYWludENlbnRlciA9IG5ldyBQYWludCgpOworICAgIHByaXZhdGUgZmluYWwgUGFpbnRbXVtdIG1QYWludFNlbGVjdG9yID0gbmV3IFBhaW50WzJdWzNdOworICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbVBhaW50QW1QbVRleHQgPSBuZXcgUGFpbnQoKTsKKyAgICBwcml2YXRlIGZpbmFsIFBhaW50W10gbVBhaW50QW1QbUNpcmNsZSA9IG5ldyBQYWludFsyXTsKKworICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbVBhaW50QmFja2dyb3VuZCA9IG5ldyBQYWludCgpOworICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbVBhaW50RGlzYWJsZWQgPSBuZXcgUGFpbnQoKTsKKyAgICBwcml2YXRlIGZpbmFsIFBhaW50IG1QYWludERlYnVnID0gbmV3IFBhaW50KCk7CisKKyAgICBwcml2YXRlIFR5cGVmYWNlIG1UeXBlZmFjZTsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtSXMyNEhvdXJNb2RlOworICAgIHByaXZhdGUgYm9vbGVhbiBtU2hvd0hvdXJzOworICAgIHByaXZhdGUgYm9vbGVhbiBtSXNPbklubmVyQ2lyY2xlOworCisgICAgcHJpdmF0ZSBpbnQgbVhDZW50ZXI7CisgICAgcHJpdmF0ZSBpbnQgbVlDZW50ZXI7CisKKyAgICBwcml2YXRlIGZsb2F0W10gbUNpcmNsZVJhZGl1cyA9IG5ldyBmbG9hdFszXTsKKworICAgIHByaXZhdGUgaW50IG1NaW5IeXBvdGVudXNlRm9ySW5uZXJOdW1iZXI7CisgICAgcHJpdmF0ZSBpbnQgbU1heEh5cG90ZW51c2VGb3JPdXRlck51bWJlcjsKKyAgICBwcml2YXRlIGludCBtSGFsZndheUh5cG90ZW51c2VQb2ludDsKKworICAgIHByaXZhdGUgZmxvYXRbXSBtVGV4dFNpemUgPSBuZXcgZmxvYXRbMl07CisgICAgcHJpdmF0ZSBmbG9hdCBtSW5uZXJUZXh0U2l6ZTsKKworICAgIHByaXZhdGUgZmxvYXRbXVtdIG1UZXh0R3JpZEhlaWdodHMgPSBuZXcgZmxvYXRbMl1bN107CisgICAgcHJpdmF0ZSBmbG9hdFtdW10gbVRleHRHcmlkV2lkdGhzID0gbmV3IGZsb2F0WzJdWzddOworCisgICAgcHJpdmF0ZSBmbG9hdFtdIG1Jbm5lclRleHRHcmlkSGVpZ2h0cyA9IG5ldyBmbG9hdFs3XTsKKyAgICBwcml2YXRlIGZsb2F0W10gbUlubmVyVGV4dEdyaWRXaWR0aHMgPSBuZXcgZmxvYXRbN107CisKKyAgICBwcml2YXRlIFN0cmluZ1tdIG1PdXRlclRleHRIb3VyczsKKyAgICBwcml2YXRlIFN0cmluZ1tdIG1Jbm5lclRleHRIb3VyczsKKyAgICBwcml2YXRlIFN0cmluZ1tdIG1PdXRlclRleHRNaW51dGVzOworCisgICAgcHJpdmF0ZSBmbG9hdFtdIG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyID0gbmV3IGZsb2F0WzJdOworICAgIHByaXZhdGUgZmxvYXRbXSBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXIgPSBuZXcgZmxvYXRbM107CisKKyAgICBwcml2YXRlIGZsb2F0W10gbVRleHRTaXplTXVsdGlwbGllciA9IG5ldyBmbG9hdFszXTsKKworICAgIHByaXZhdGUgZmxvYXRbXSBtQW5pbWF0aW9uUmFkaXVzTXVsdGlwbGllciA9IG5ldyBmbG9hdFszXTsKKworICAgIHByaXZhdGUgZmxvYXQgbVRyYW5zaXRpb25NaWRSYWRpdXNNdWx0aXBsaWVyOworICAgIHByaXZhdGUgZmxvYXQgbVRyYW5zaXRpb25FbmRSYWRpdXNNdWx0aXBsaWVyOworCisgICAgcHJpdmF0ZSBBbmltYXRvclNldCBtVHJhbnNpdGlvbjsKKyAgICBwcml2YXRlIEludmFsaWRhdGVVcGRhdGVMaXN0ZW5lciBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyID0gbmV3IEludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcigpOworCisgICAgcHJpdmF0ZSBpbnRbXSBtTGluZUxlbmd0aCA9IG5ldyBpbnRbM107CisgICAgcHJpdmF0ZSBpbnRbXSBtU2VsZWN0aW9uUmFkaXVzID0gbmV3IGludFszXTsKKyAgICBwcml2YXRlIGZsb2F0IG1TZWxlY3Rpb25SYWRpdXNNdWx0aXBsaWVyOworICAgIHByaXZhdGUgaW50W10gbVNlbGVjdGlvbkRlZ3JlZXMgPSBuZXcgaW50WzNdOworCisgICAgcHJpdmF0ZSBpbnQgbUFtUG1DaXJjbGVSYWRpdXM7CisgICAgcHJpdmF0ZSBmbG9hdCBtQW1QbVlDZW50ZXI7CisKKyAgICBwcml2YXRlIGZsb2F0IG1BbVBtQ2lyY2xlUmFkaXVzTXVsdGlwbGllcjsKKyAgICBwcml2YXRlIGludCBtQW1QbVRleHRDb2xvcjsKKworICAgIHByaXZhdGUgZmxvYXQgbUxlZnRJbmRpY2F0b3JYQ2VudGVyOworICAgIHByaXZhdGUgZmxvYXQgbVJpZ2h0SW5kaWNhdG9yWENlbnRlcjsKKworICAgIHByaXZhdGUgaW50IG1BbVBtVW5zZWxlY3RlZENvbG9yOworICAgIHByaXZhdGUgaW50IG1BbVBtU2VsZWN0ZWRDb2xvcjsKKworICAgIHByaXZhdGUgaW50IG1BbU9yUG07CisgICAgcHJpdmF0ZSBpbnQgbUFtT3JQbVByZXNzZWQ7CisKKyAgICBwcml2YXRlIFJlY3RGIG1SZWN0RiA9IG5ldyBSZWN0RigpOworICAgIHByaXZhdGUgYm9vbGVhbiBtSW5wdXRFbmFibGVkID0gdHJ1ZTsKKyAgICBwcml2YXRlIE9uVmFsdWVTZWxlY3RlZExpc3RlbmVyIG1MaXN0ZW5lcjsKKworICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PEFuaW1hdG9yPiBtSG91cnNUb01pbnV0ZXNBbmltcyA9IG5ldyBBcnJheUxpc3Q8QW5pbWF0b3I+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8QW5pbWF0b3I+IG1NaW51dGVUb0hvdXJzQW5pbXMgPSBuZXcgQXJyYXlMaXN0PEFuaW1hdG9yPigpOworCisgICAgcHVibGljIGludGVyZmFjZSBPblZhbHVlU2VsZWN0ZWRMaXN0ZW5lciB7CisgICAgICAgIHZvaWQgb25WYWx1ZVNlbGVjdGVkKGludCBwaWNrZXJJbmRleCwgaW50IG5ld1ZhbHVlLCBib29sZWFuIGF1dG9BZHZhbmNlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgeworICAgICAgICAvLyBQcmVwYXJlIG1hcHBpbmcgdG8gc25hcCB0b3VjaGFibGUgZGVncmVlcyB0byBzZWxlY3RhYmxlIGRlZ3JlZXMuCisgICAgICAgIHByZXBhcmVQcmVmZXIzMHNNYXAoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTcGxpdCB1cCB0aGUgMzYwIGRlZ3JlZXMgb2YgdGhlIGNpcmNsZSBhbW9uZyB0aGUgNjAgc2VsZWN0YWJsZSB2YWx1ZXMuIEFzc2lnbnMgYSBsYXJnZXIKKyAgICAgKiBzZWxlY3RhYmxlIGFyZWEgdG8gZWFjaCBvZiB0aGUgMTIgdmlzaWJsZSB2YWx1ZXMsIHN1Y2ggdGhhdCB0aGUgcmF0aW8gb2Ygc3BhY2UgYXBwb3J0aW9uZWQKKyAgICAgKiB0byBhIHZpc2libGUgdmFsdWUgOiBzcGFjZSBhcHBvcnRpb25lZCB0byBhIG5vbi12aXNpYmxlIHZhbHVlIHdpbGwgYmUgMTQgOiA0LgorICAgICAqIEUuZy4gdGhlIG91dHB1dCBvZiAzMCBkZWdyZWVzIHNob3VsZCBoYXZlIGEgaGlnaGVyIHJhbmdlIG9mIGlucHV0IGFzc29jaWF0ZWQgd2l0aCBpdCB0aGFuCisgICAgICogdGhlIG91dHB1dCBvZiAyNCBkZWdyZWVzLCBiZWNhdXNlIDMwIGRlZ3JlZXMgY29ycmVzcG9uZHMgdG8gYSB2aXNpYmxlIG51bWJlciBvbiB0aGUgY2xvY2sKKyAgICAgKiBjaXJjbGUgKDUgb24gdGhlIG1pbnV0ZXMsIDEgb3IgMTMgb24gdGhlIGhvdXJzKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHByZXBhcmVQcmVmZXIzMHNNYXAoKSB7CisgICAgICAgIC8vIFdlJ2xsIHNwbGl0IHVwIHRoZSB2aXNpYmxlIG91dHB1dCBhbmQgdGhlIG5vbi12aXNpYmxlIG91dHB1dCBzdWNoIHRoYXQgZWFjaCB2aXNpYmxlCisgICAgICAgIC8vIG91dHB1dCB3aWxsIGNvcnJlc3BvbmQgdG8gYSByYW5nZSBvZiAxNCBhc3NvY2lhdGVkIGlucHV0IGRlZ3JlZXMsIGFuZCBlYWNoIG5vbi12aXNpYmxlCisgICAgICAgIC8vIG91dHB1dCB3aWxsIGNvcnJlc3BvbmQgdG8gYSByYW5nZSBvZiA0IGFzc29jaWF0ZSBpbnB1dCBkZWdyZWVzLCBzbyB2aXNpYmxlIG51bWJlcnMKKyAgICAgICAgLy8gYXJlIG1vcmUgdGhhbiAzIHRpbWVzIGVhc2llciB0byBnZXQgdGhhbiBub24tdmlzaWJsZSBudW1iZXJzOgorICAgICAgICAvLyB7MzU0LTM1OSwwLTd9OjAsIHs4LTExfTo2LCB7MTItMTV9OjEyLCB7MTYtMTl9OjE4LCB7MjAtMjN9OjI0LCB7MjQtMzd9OjMwLCBldGMuCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIGFuIG91dHB1dCBvZiAzMCBkZWdyZWVzIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgcmFuZ2Ugb2YgMTQgYXNzb2NpYXRlZCBkZWdyZWVzLCB0aGVuCisgICAgICAgIC8vIHdlJ2xsIG5lZWQgYW55IGlucHV0IGJldHdlZW4gMjQgLSAzNyB0byBzbmFwIHRvIDMwLiBXb3JraW5nIG91dCBmcm9tIHRoZXJlLCAyMC0yMyBzaG91bGQKKyAgICAgICAgLy8gc25hcCB0byAyNCwgd2hpbGUgMzgtNDEgc2hvdWxkIHNuYXAgdG8gMzYuIFRoaXMgaXMgc29tZXdoYXQgY291bnRlci1pbnR1aXRpdmUsIHRoYXQgeW91CisgICAgICAgIC8vIGNhbiBiZSB0b3VjaGluZyAzNiBkZWdyZWVzIGJ1dCBoYXZlIHRoZSBzZWxlY3Rpb24gc25hcHBlZCB0byAzMCBkZWdyZWVzOyBob3dldmVyLCB0aGlzCisgICAgICAgIC8vIGluY29uc2lzdGVuY3kgaXNuJ3Qgbm90aWNlYWJsZSBhdCBzdWNoIGZpbmUtZ3JhaW5lZCBkZWdyZWVzLCBhbmQgaXQgYWZmb3JkcyB1cyB0aGUKKyAgICAgICAgLy8gYWJpbGl0eSB0byBhZ2dyZXNzaXZlbHkgcHJlZmVyIHRoZSB2aXNpYmxlIHZhbHVlcyBieSBhIGZhY3RvciBvZiBtb3JlIHRoYW4gMzoxLCB3aGljaAorICAgICAgICAvLyBncmVhdGx5IGNvbnRyaWJ1dGVzIHRvIHRoZSBzZWxlY3RhYmlsaXR5IG9mIHRoZXNlIHZhbHVlcy4KKworICAgICAgICAvLyBUaGUgZmlyc3Qgb3V0cHV0IGlzIDAsIGFuZCBlYWNoIGZvbGxvd2luZyBvdXRwdXQgd2lsbCBpbmNyZW1lbnQgYnkgNiB7MCwgNiwgMTIsIC4uLn0uCisgICAgICAgIGludCBzbmFwcGVkT3V0cHV0RGVncmVlcyA9IDA7CisgICAgICAgIC8vIENvdW50IG9mIGhvdyBtYW55IGlucHV0cyB3ZSd2ZSBkZXNpZ25hdGVkIHRvIHRoZSBzcGVjaWZpZWQgb3V0cHV0LgorICAgICAgICBpbnQgY291bnQgPSAxOworICAgICAgICAvLyBIb3cgbWFueSBpbnB1dCB3ZSBleHBlY3QgZm9yIGEgc3BlY2lmaWVkIG91dHB1dC4gVGhpcyB3aWxsIGJlIDE0IGZvciBvdXRwdXQgZGl2aXNpYmxlCisgICAgICAgIC8vIGJ5IDMwLCBhbmQgNCBmb3IgdGhlIHJlbWFpbmluZyBvdXRwdXQuIFdlJ2xsIHNwZWNpYWwgY2FzZSB0aGUgb3V0cHV0cyBvZiAwIGFuZCAzNjAsIHNvCisgICAgICAgIC8vIHRoZSBjYWxsZXIgY2FuIGRlY2lkZSB3aGljaCB0aGV5IG5lZWQuCisgICAgICAgIGludCBleHBlY3RlZENvdW50ID0gODsKKyAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBpbnB1dC4KKyAgICAgICAgZm9yIChpbnQgZGVncmVlcyA9IDA7IGRlZ3JlZXMgPCAzNjE7IGRlZ3JlZXMrKykgeworICAgICAgICAgICAgLy8gU2F2ZSB0aGUgaW5wdXQtb3V0cHV0IG1hcHBpbmcuCisgICAgICAgICAgICBzU25hcFByZWZlcjMwc01hcFtkZWdyZWVzXSA9IHNuYXBwZWRPdXRwdXREZWdyZWVzOworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgbGFzdCBpbnB1dCBmb3IgdGhlIHNwZWNpZmllZCBvdXRwdXQsIGNhbGN1bGF0ZSB0aGUgbmV4dCBvdXRwdXQgYW5kCisgICAgICAgICAgICAvLyB0aGUgbmV4dCBleHBlY3RlZCBjb3VudC4KKyAgICAgICAgICAgIGlmIChjb3VudCA9PSBleHBlY3RlZENvdW50KSB7CisgICAgICAgICAgICAgICAgc25hcHBlZE91dHB1dERlZ3JlZXMgKz0gNjsKKyAgICAgICAgICAgICAgICBpZiAoc25hcHBlZE91dHB1dERlZ3JlZXMgPT0gMzYwKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQ291bnQgPSA3OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc25hcHBlZE91dHB1dERlZ3JlZXMgJSAzMCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQ291bnQgPSAxNDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZENvdW50ID0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY291bnQgPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBtYXBwaW5nIG9mIGFueSBpbnB1dCBkZWdyZWVzICgwIHRvIDM2MCkgdG8gb25lIG9mIDYwIHNlbGVjdGFibGUgb3V0cHV0IGRlZ3JlZXMsCisgICAgICogd2hlcmUgdGhlIGRlZ3JlZXMgY29ycmVzcG9uZGluZyB0byB2aXNpYmxlIG51bWJlcnMgKGkuZS4gdGhvc2UgZGl2aXNpYmxlIGJ5IDMwKSB3aWxsIGJlCisgICAgICogd2VpZ2h0ZWQgaGVhdmllciB0aGFuIHRoZSBkZWdyZWVzIGNvcnJlc3BvbmRpbmcgdG8gbm9uLXZpc2libGUgbnVtYmVycy4KKyAgICAgKiBTZWUge0BsaW5rICNwcmVwYXJlUHJlZmVyMzBzTWFwKCl9IGRvY3VtZW50YXRpb24gZm9yIHRoZSByYXRpb25hbGUgYW5kIGdlbmVyYXRpb24gb2YgdGhlCisgICAgICogbWFwcGluZy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgc25hcFByZWZlcjMwcyhpbnQgZGVncmVlcykgeworICAgICAgICBpZiAoc1NuYXBQcmVmZXIzMHNNYXAgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzU25hcFByZWZlcjMwc01hcFtkZWdyZWVzXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIG1hcHBpbmcgb2YgYW55IGlucHV0IGRlZ3JlZXMgKDAgdG8gMzYwKSB0byBvbmUgb2YgMTIgdmlzaWJsZSBvdXRwdXQgZGVncmVlcyAoYWxsCisgICAgICogbXVsdGlwbGVzIG9mIDMwKSwgd2hlcmUgdGhlIGlucHV0IHdpbGwgYmUgInNuYXBwZWQiIHRvIHRoZSBjbG9zZXN0IHZpc2libGUgZGVncmVlcy4KKyAgICAgKiBAcGFyYW0gZGVncmVlcyBUaGUgaW5wdXQgZGVncmVlcworICAgICAqIEBwYXJhbSBmb3JjZUhpZ2hlck9yTG93ZXIgVGhlIG91dHB1dCBtYXkgYmUgZm9yY2VkIHRvIGVpdGhlciB0aGUgaGlnaGVyIG9yIGxvd2VyIHN0ZXAsIG9yIG1heQorICAgICAqIGJlIGFsbG93ZWQgdG8gc25hcCB0byB3aGljaGV2ZXIgaXMgY2xvc2VyLiBVc2UgMSB0byBmb3JjZSBzdHJpY3RseSBoaWdoZXIsIC0xIHRvIGZvcmNlCisgICAgICogc3RyaWN0bHkgbG93ZXIsIGFuZCAwIHRvIHNuYXAgdG8gdGhlIGNsb3NlciBvbmUuCisgICAgICogQHJldHVybiBvdXRwdXQgZGVncmVlcywgd2lsbCBiZSBhIG11bHRpcGxlIG9mIDMwCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHNuYXBPbmx5MzBzKGludCBkZWdyZWVzLCBpbnQgZm9yY2VIaWdoZXJPckxvd2VyKSB7CisgICAgICAgIGZpbmFsIGludCBzdGVwU2l6ZSA9IERFR1JFRVNfRk9SX09ORV9IT1VSOworICAgICAgICBpbnQgZmxvb3IgPSAoZGVncmVlcyAvIHN0ZXBTaXplKSAqIHN0ZXBTaXplOworICAgICAgICBmaW5hbCBpbnQgY2VpbGluZyA9IGZsb29yICsgc3RlcFNpemU7CisgICAgICAgIGlmIChmb3JjZUhpZ2hlck9yTG93ZXIgPT0gMSkgeworICAgICAgICAgICAgZGVncmVlcyA9IGNlaWxpbmc7CisgICAgICAgIH0gZWxzZSBpZiAoZm9yY2VIaWdoZXJPckxvd2VyID09IC0xKSB7CisgICAgICAgICAgICBpZiAoZGVncmVlcyA9PSBmbG9vcikgeworICAgICAgICAgICAgICAgIGZsb29yIC09IHN0ZXBTaXplOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVncmVlcyA9IGZsb29yOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKChkZWdyZWVzIC0gZmxvb3IpIDwgKGNlaWxpbmcgLSBkZWdyZWVzKSkgeworICAgICAgICAgICAgICAgIGRlZ3JlZXMgPSBmbG9vcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVncmVlcyA9IGNlaWxpbmc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlZ3JlZXM7CisgICAgfQorCisgICAgcHVibGljIFJhZGlhbFRpbWVQaWNrZXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSAgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBSLmF0dHIudGltZVBpY2tlclN0eWxlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgUmFkaWFsVGltZVBpY2tlclZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOworCisgICAgICAgIC8vIHByb2Nlc3Mgc3R5bGUgYXR0cmlidXRlcworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBtQ29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5UaW1lUGlja2VyLAorICAgICAgICAgICAgICAgIGRlZlN0eWxlLCAwKTsKKworICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gZ2V0UmVzb3VyY2VzKCk7CisKKyAgICAgICAgbUFtUG1VbnNlbGVjdGVkQ29sb3IgPSBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfYW1QbVVuc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3IsCisgICAgICAgICAgICAgICAgcmVzLmdldENvbG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgUi5jb2xvci50aW1lcGlja2VyX2RlZmF1bHRfYW1wbV91bnNlbGVjdGVkX2JhY2tncm91bmRfY29sb3JfaG9sb19saWdodCkpOworCisgICAgICAgIG1BbVBtU2VsZWN0ZWRDb2xvciA9IGEuZ2V0Q29sb3IoUi5zdHlsZWFibGUuVGltZVBpY2tlcl9hbVBtU2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3IsCisgICAgICAgICAgICAgICAgcmVzLmdldENvbG9yKFIuY29sb3IudGltZXBpY2tlcl9kZWZhdWx0X2FtcG1fc2VsZWN0ZWRfYmFja2dyb3VuZF9jb2xvcl9ob2xvX2xpZ2h0KSk7CisKKyAgICAgICAgbUFtUG1UZXh0Q29sb3IgPSBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfYW1QbVRleHRDb2xvciwKKyAgICAgICAgICAgICAgICByZXMuZ2V0Q29sb3IoUi5jb2xvci50aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0KSk7CisKKyAgICAgICAgZmluYWwgaW50IG51bWJlcnNUZXh0Q29sb3IgPSBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc1RleHRDb2xvciwKKyAgICAgICAgICAgICAgICByZXMuZ2V0Q29sb3IoUi5jb2xvci50aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0KSk7CisKKyAgICAgICAgbVR5cGVmYWNlID0gVHlwZWZhY2UuY3JlYXRlKCJzYW5zLXNlcmlmIiwgVHlwZWZhY2UuTk9STUFMKTsKKworICAgICAgICBtUGFpbnRbSE9VUlNdID0gbmV3IFBhaW50KCk7CisgICAgICAgIG1QYWludFtIT1VSU10uc2V0Q29sb3IobnVtYmVyc1RleHRDb2xvcik7CisgICAgICAgIG1QYWludFtIT1VSU10uc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICBtUGFpbnRbSE9VUlNdLnNldFRleHRBbGlnbihQYWludC5BbGlnbi5DRU5URVIpOworCisgICAgICAgIG1QYWludFtNSU5VVEVTXSA9IG5ldyBQYWludCgpOworICAgICAgICBtUGFpbnRbTUlOVVRFU10uc2V0Q29sb3IobnVtYmVyc1RleHRDb2xvcik7CisgICAgICAgIG1QYWludFtNSU5VVEVTXS5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgIG1QYWludFtNSU5VVEVTXS5zZXRUZXh0QWxpZ24oUGFpbnQuQWxpZ24uQ0VOVEVSKTsKKworICAgICAgICBtUGFpbnRDZW50ZXIuc2V0Q29sb3IobnVtYmVyc1RleHRDb2xvcik7CisgICAgICAgIG1QYWludENlbnRlci5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgIG1QYWludENlbnRlci5zZXRUZXh0QWxpZ24oUGFpbnQuQWxpZ24uQ0VOVEVSKTsKKworICAgICAgICBtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfQ0lSQ0xFXSA9IG5ldyBQYWludCgpOworICAgICAgICBtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfQ0lSQ0xFXS5zZXRDb2xvcigKKyAgICAgICAgICAgICAgICBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc1NlbGVjdG9yQ29sb3IsIFIuY29sb3IuaG9sb19ibHVlX2xpZ2h0KSk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9DSVJDTEVdLnNldEFudGlBbGlhcyh0cnVlKTsKKworICAgICAgICBtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfRE9UXSA9IG5ldyBQYWludCgpOworICAgICAgICBtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfRE9UXS5zZXRDb2xvcigKKyAgICAgICAgICAgICAgICBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc1NlbGVjdG9yQ29sb3IsIFIuY29sb3IuaG9sb19ibHVlX2xpZ2h0KSk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9ET1RdLnNldEFudGlBbGlhcyh0cnVlKTsKKworICAgICAgICBtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfTElORV0gPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0xJTkVdLnNldENvbG9yKAorICAgICAgICAgICAgICAgIGEuZ2V0Q29sb3IoUi5zdHlsZWFibGUuVGltZVBpY2tlcl9udW1iZXJzU2VsZWN0b3JDb2xvciwgUi5jb2xvci5ob2xvX2JsdWVfbGlnaHQpKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0xJTkVdLnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0xJTkVdLnNldFN0cm9rZVdpZHRoKDIpOworCisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0NJUkNMRV0gPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfQ0lSQ0xFXS5zZXRDb2xvcigKKyAgICAgICAgICAgICAgICBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc1NlbGVjdG9yQ29sb3IsIFIuY29sb3IuaG9sb19ibHVlX2xpZ2h0KSk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0NJUkNMRV0uc2V0QW50aUFsaWFzKHRydWUpOworCisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0RPVF0gPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfRE9UXS5zZXRDb2xvcigKKyAgICAgICAgICAgICAgICBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc1NlbGVjdG9yQ29sb3IsIFIuY29sb3IuaG9sb19ibHVlX2xpZ2h0KSk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0RPVF0uc2V0QW50aUFsaWFzKHRydWUpOworCisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0xJTkVdID0gbmV3IFBhaW50KCk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0xJTkVdLnNldENvbG9yKAorICAgICAgICAgICAgICAgIGEuZ2V0Q29sb3IoUi5zdHlsZWFibGUuVGltZVBpY2tlcl9udW1iZXJzU2VsZWN0b3JDb2xvciwgUi5jb2xvci5ob2xvX2JsdWVfbGlnaHQpKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfTElORV0uc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICBtUGFpbnRTZWxlY3RvcltNSU5VVEVTXVtTRUxFQ1RPUl9MSU5FXS5zZXRTdHJva2VXaWR0aCgyKTsKKworICAgICAgICBtUGFpbnRBbVBtVGV4dC5zZXRDb2xvcihtQW1QbVRleHRDb2xvcik7CisgICAgICAgIG1QYWludEFtUG1UZXh0LnNldFR5cGVmYWNlKG1UeXBlZmFjZSk7CisgICAgICAgIG1QYWludEFtUG1UZXh0LnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICAgICAgbVBhaW50QW1QbVRleHQuc2V0VGV4dEFsaWduKFBhaW50LkFsaWduLkNFTlRFUik7CisKKyAgICAgICAgbVBhaW50QW1QbUNpcmNsZVtBTV0gPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgbVBhaW50QW1QbUNpcmNsZVtBTV0uc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICBtUGFpbnRBbVBtQ2lyY2xlW1BNXSA9IG5ldyBQYWludCgpOworICAgICAgICBtUGFpbnRBbVBtQ2lyY2xlW1BNXS5zZXRBbnRpQWxpYXModHJ1ZSk7CisKKyAgICAgICAgbVBhaW50QmFja2dyb3VuZC5zZXRDb2xvcigKKyAgICAgICAgICAgICAgICBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc0JhY2tncm91bmRDb2xvciwgQ29sb3IuV0hJVEUpKTsKKyAgICAgICAgbVBhaW50QmFja2dyb3VuZC5zZXRBbnRpQWxpYXModHJ1ZSk7CisKKyAgICAgICAgZmluYWwgaW50IGRpc2FibGVkQ29sb3IgPSBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfZGlzYWJsZWRDb2xvciwKKyAgICAgICAgICAgICAgICByZXMuZ2V0Q29sb3IoUi5jb2xvci50aW1lcGlja2VyX2RlZmF1bHRfZGlzYWJsZWRfY29sb3JfaG9sb19saWdodCkpOworICAgICAgICBtUGFpbnREaXNhYmxlZC5zZXRDb2xvcihkaXNhYmxlZENvbG9yKTsKKyAgICAgICAgbVBhaW50RGlzYWJsZWQuc2V0QW50aUFsaWFzKHRydWUpOworCisgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgbVBhaW50RGVidWcuc2V0Q29sb3IoREVCVUdfQ09MT1IpOworICAgICAgICAgICAgbVBhaW50RGVidWcuc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICAgICAgbVBhaW50RGVidWcuc2V0U3Ryb2tlV2lkdGgoREVCVUdfU1RST0tFX1dJRFRIKTsKKyAgICAgICAgICAgIG1QYWludERlYnVnLnNldFN0eWxlKFBhaW50LlN0eWxlLlNUUk9LRSk7CisgICAgICAgICAgICBtUGFpbnREZWJ1Zy5zZXRUZXh0QWxpZ24oUGFpbnQuQWxpZ24uQ0VOVEVSKTsKKyAgICAgICAgfQorCisgICAgICAgIG1TaG93SG91cnMgPSB0cnVlOworICAgICAgICBtSXMyNEhvdXJNb2RlID0gZmFsc2U7CisgICAgICAgIG1BbU9yUG0gPSBBTTsKKyAgICAgICAgbUFtT3JQbVByZXNzZWQgPSAtMTsKKworICAgICAgICBpbml0SG91cnNBbmRNaW51dGVzVGV4dCgpOworICAgICAgICBpbml0RGF0YSgpOworCisgICAgICAgIG1UcmFuc2l0aW9uTWlkUmFkaXVzTXVsdGlwbGllciA9ICBGbG9hdC5wYXJzZUZsb2F0KAorICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl90cmFuc2l0aW9uX21pZF9yYWRpdXNfbXVsdGlwbGllcikpOworICAgICAgICBtVHJhbnNpdGlvbkVuZFJhZGl1c011bHRpcGxpZXIgPSBGbG9hdC5wYXJzZUZsb2F0KAorICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl90cmFuc2l0aW9uX2VuZF9yYWRpdXNfbXVsdGlwbGllcikpOworCisgICAgICAgIG1UZXh0R3JpZEhlaWdodHNbSE9VUlNdID0gbmV3IGZsb2F0WzddOworICAgICAgICBtVGV4dEdyaWRIZWlnaHRzW01JTlVURVNdID0gbmV3IGZsb2F0WzddOworCisgICAgICAgIG1TZWxlY3Rpb25SYWRpdXNNdWx0aXBsaWVyID0gRmxvYXQucGFyc2VGbG9hdCgKKyAgICAgICAgICAgICAgICByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnRpbWVwaWNrZXJfc2VsZWN0aW9uX3JhZGl1c19tdWx0aXBsaWVyKSk7CisKKyAgICAgICAgc2V0T25Ub3VjaExpc3RlbmVyKHRoaXMpOworCisgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzCisgICAgICAgIGZpbmFsIENhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgIGZpbmFsIGludCBjdXJyZW50SG91ciA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSk7CisgICAgICAgIGZpbmFsIGludCBjdXJyZW50TWludXRlID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTlVURSk7CisKKyAgICAgICAgc2V0Q3VycmVudEhvdXIoY3VycmVudEhvdXIpOworICAgICAgICBzZXRDdXJyZW50TWludXRlKGN1cnJlbnRNaW51dGUpOworCisgICAgICAgIHNldEhhcHRpY0ZlZWRiYWNrRW5hYmxlZCh0cnVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNZWFzdXJlIHRoZSB2aWV3IHRvIGVuZCB1cCBhcyBhIHNxdWFyZSwgYmFzZWQgb24gdGhlIG1pbmltdW0gb2YgdGhlIGhlaWdodCBhbmQgd2lkdGguCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKKyAgICAgICAgaW50IG1lYXN1cmVkV2lkdGggPSBNZWFzdXJlU3BlYy5nZXRTaXplKHdpZHRoTWVhc3VyZVNwZWMpOworICAgICAgICBpbnQgd2lkdGhNb2RlID0gTWVhc3VyZVNwZWMuZ2V0TW9kZSh3aWR0aE1lYXN1cmVTcGVjKTsKKyAgICAgICAgaW50IG1lYXN1cmVkSGVpZ2h0ID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZShoZWlnaHRNZWFzdXJlU3BlYyk7CisgICAgICAgIGludCBoZWlnaHRNb2RlID0gTWVhc3VyZVNwZWMuZ2V0TW9kZShoZWlnaHRNZWFzdXJlU3BlYyk7CisgICAgICAgIGludCBtaW5EaW1lbnNpb24gPSBNYXRoLm1pbihtZWFzdXJlZFdpZHRoLCBtZWFzdXJlZEhlaWdodCk7CisKKyAgICAgICAgc3VwZXIub25NZWFzdXJlKE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhtaW5EaW1lbnNpb24sIHdpZHRoTW9kZSksCisgICAgICAgICAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKG1pbkRpbWVuc2lvbiwgaGVpZ2h0TW9kZSkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoaW50IGhvdXIsIGludCBtaW51dGUsIGJvb2xlYW4gaXMyNEhvdXJNb2RlKSB7CisgICAgICAgIG1JczI0SG91ck1vZGUgPSBpczI0SG91ck1vZGU7CisgICAgICAgIHNldEN1cnJlbnRIb3VyKGhvdXIpOworICAgICAgICBzZXRDdXJyZW50TWludXRlKG1pbnV0ZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q3VycmVudEl0ZW1TaG93aW5nKGludCBpdGVtLCBib29sZWFuIGFuaW1hdGUpIHsKKyAgICAgICAgc3dpdGNoIChpdGVtKXsKKyAgICAgICAgICAgIGNhc2UgSE9VUlM6CisgICAgICAgICAgICAgICAgc2hvd0hvdXJzKGFuaW1hdGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNSU5VVEVTOgorICAgICAgICAgICAgICAgIHNob3dNaW51dGVzKGFuaW1hdGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJDbG9ja1ZpZXcgZG9lcyBub3Qgc3VwcG9ydCBzaG93aW5nIGl0ZW0gIiArIGl0ZW0pOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRDdXJyZW50SXRlbVNob3dpbmcoKSB7CisgICAgICAgIHJldHVybiBtU2hvd0hvdXJzID8gSE9VUlMgOiBNSU5VVEVTOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE9uVmFsdWVTZWxlY3RlZExpc3RlbmVyKE9uVmFsdWVTZWxlY3RlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIG1MaXN0ZW5lciA9IGxpc3RlbmVyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRIb3VyKGludCBob3VyKSB7CisgICAgICAgIGZpbmFsIGludCBkZWdyZWVzID0gKGhvdXIgJSAxMikgKiBERUdSRUVTX0ZPUl9PTkVfSE9VUjsKKyAgICAgICAgbVNlbGVjdGlvbkRlZ3JlZXNbSE9VUlNdID0gZGVncmVlczsKKyAgICAgICAgbVNlbGVjdGlvbkRlZ3JlZXNbSE9VUlNfSU5ORVJdID0gZGVncmVlczsKKyAgICAgICAgbUFtT3JQbSA9ICgoaG91ciAlIDI0KSA8IDEyKSA/IEFNIDogUE07CisgICAgICAgIGlmIChtSXMyNEhvdXJNb2RlKSB7CisgICAgICAgICAgICBtSXNPbklubmVyQ2lyY2xlID0gKG1BbU9yUG0gPT0gQU0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUlzT25Jbm5lckNpcmNsZSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGluaXREYXRhKCk7CisgICAgICAgIHVwZGF0ZUxheW91dERhdGEoKTsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIC8vIFJldHVybiBob3VycyBpbiAwLTIzIHJhbmdlCisgICAgcHVibGljIGludCBnZXRDdXJyZW50SG91cigpIHsKKyAgICAgICAgaW50IGhvdXJzID0KKyAgICAgICAgICAgICAgICBtU2VsZWN0aW9uRGVncmVlc1ttSXNPbklubmVyQ2lyY2xlID8gSE9VUlNfSU5ORVIgOiBIT1VSU10gLyBERUdSRUVTX0ZPUl9PTkVfSE9VUjsKKyAgICAgICAgaWYgKG1JczI0SG91ck1vZGUpIHsKKyAgICAgICAgICAgIGlmIChtSXNPbklubmVyQ2lyY2xlKSB7CisgICAgICAgICAgICAgICAgaG91cnMgPSBob3VycyAlIDEyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaG91cnMgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBob3VycyArPSAxMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBob3VycyA9IGhvdXJzICUgMTI7CisgICAgICAgICAgICBpZiAoaG91cnMgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChtQW1PclBtID09IFBNKSB7CisgICAgICAgICAgICAgICAgICAgIGhvdXJzID0gMTI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobUFtT3JQbSA9PSBQTSkgeworICAgICAgICAgICAgICAgICAgICBob3VycyArPSAxMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhvdXJzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRNaW51dGUoaW50IG1pbnV0ZSkgeworICAgICAgICBtU2VsZWN0aW9uRGVncmVlc1tNSU5VVEVTXSA9IChtaW51dGUgJSA2MCkgKiBERUdSRUVTX0ZPUl9PTkVfTUlOVVRFOworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBtaW51dGVzIGluIDAtNTkgcmFuZ2UKKyAgICBwdWJsaWMgaW50IGdldEN1cnJlbnRNaW51dGUoKSB7CisgICAgICAgIHJldHVybiAobVNlbGVjdGlvbkRlZ3JlZXNbTUlOVVRFU10gLyBERUdSRUVTX0ZPUl9PTkVfTUlOVVRFKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRBbU9yUG0oaW50IHZhbCkgeworICAgICAgICBtQW1PclBtID0gKHZhbCAlIDIpOworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRBbU9yUG0oKSB7CisgICAgICAgIHJldHVybiBtQW1PclBtOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHN3YXBBbVBtKCkgeworICAgICAgICBtQW1PclBtID0gKG1BbU9yUG0gPT0gQU0pID8gUE0gOiBBTTsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNob3dIb3Vycyhib29sZWFuIGFuaW1hdGUpIHsKKyAgICAgICAgaWYgKG1TaG93SG91cnMpIHJldHVybjsKKyAgICAgICAgbVNob3dIb3VycyA9IHRydWU7CisgICAgICAgIGlmIChhbmltYXRlKSB7CisgICAgICAgICAgICBzdGFydE1pbnV0ZXNUb0hvdXJzQW5pbWF0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgaW5pdERhdGEoKTsKKyAgICAgICAgdXBkYXRlTGF5b3V0RGF0YSgpOworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2hvd01pbnV0ZXMoYm9vbGVhbiBhbmltYXRlKSB7CisgICAgICAgIGlmICghbVNob3dIb3VycykgcmV0dXJuOworICAgICAgICBtU2hvd0hvdXJzID0gZmFsc2U7CisgICAgICAgIGlmIChhbmltYXRlKSB7CisgICAgICAgICAgICBzdGFydEhvdXJzVG9NaW51dGVzQW5pbWF0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgaW5pdERhdGEoKTsKKyAgICAgICAgdXBkYXRlTGF5b3V0RGF0YSgpOworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluaXRIb3Vyc0FuZE1pbnV0ZXNUZXh0KCkgeworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBob3VycyBhbmQgbWludXRlcyBudW1iZXJzLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEyOyBpKyspIHsKKyAgICAgICAgICAgIG1Ib3VyczEyVGV4dHNbaV0gPSBTdHJpbmcuZm9ybWF0KCIlZCIsIEhPVVJTX05VTUJFUlNbaV0pOworICAgICAgICAgICAgbU91dGVySG91cnMyNFRleHRzW2ldID0gU3RyaW5nLmZvcm1hdCgiJTAyZCIsIEhPVVJTX05VTUJFUlNfMjRbaV0pOworICAgICAgICAgICAgbUlubmVySG91cnMyNFRleHRzW2ldID0gU3RyaW5nLmZvcm1hdCgiJWQiLCBIT1VSU19OVU1CRVJTW2ldKTsKKyAgICAgICAgICAgIG1NaW51dGVzVGV4dHNbaV0gPSBTdHJpbmcuZm9ybWF0KCIlMDJkIiwgTUlOVVRFU19OVU1CRVJTW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZ1tdIGFtUG1UZXh0cyA9IG5ldyBEYXRlRm9ybWF0U3ltYm9scygpLmdldEFtUG1TdHJpbmdzKCk7CisgICAgICAgIG1BbVBtVGV4dFtBTV0gPSBhbVBtVGV4dHNbMF07CisgICAgICAgIG1BbVBtVGV4dFtQTV0gPSBhbVBtVGV4dHNbMV07CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluaXREYXRhKCkgeworICAgICAgICBpZiAobUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgbU91dGVyVGV4dEhvdXJzID0gbU91dGVySG91cnMyNFRleHRzOworICAgICAgICAgICAgbUlubmVyVGV4dEhvdXJzID0gbUlubmVySG91cnMyNFRleHRzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbU91dGVyVGV4dEhvdXJzID0gbUhvdXJzMTJUZXh0czsKKyAgICAgICAgICAgIG1Jbm5lclRleHRIb3VycyA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBtT3V0ZXJUZXh0TWludXRlcyA9IG1NaW51dGVzVGV4dHM7CisKKyAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IGdldFJlc291cmNlcygpOworCisgICAgICAgIGlmIChtU2hvd0hvdXJzKSB7CisgICAgICAgICAgICBpZiAobUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgICAgIG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyW0hPVVJTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnRpbWVwaWNrZXJfY2lyY2xlX3JhZGl1c19tdWx0aXBsaWVyXzI0SG91ck1vZGUpKTsKKyAgICAgICAgICAgICAgICBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbSE9VUlNdID0gRmxvYXQucGFyc2VGbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX291dGVyKSk7CisgICAgICAgICAgICAgICAgbVRleHRTaXplTXVsdGlwbGllcltIT1VSU10gPSBGbG9hdC5wYXJzZUZsb2F0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmdldFN0cmluZyhSLnN0cmluZy50aW1lcGlja2VyX3RleHRfc2l6ZV9tdWx0aXBsaWVyX291dGVyKSk7CisKKyAgICAgICAgICAgICAgICBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbSE9VUlNfSU5ORVJdID0gRmxvYXQucGFyc2VGbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX2lubmVyKSk7CisgICAgICAgICAgICAgICAgbVRleHRTaXplTXVsdGlwbGllcltIT1VSU19JTk5FUl0gPSBGbG9hdC5wYXJzZUZsb2F0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmdldFN0cmluZyhSLnN0cmluZy50aW1lcGlja2VyX3RleHRfc2l6ZV9tdWx0aXBsaWVyX2lubmVyKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyW0hPVVJTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnRpbWVwaWNrZXJfY2lyY2xlX3JhZGl1c19tdWx0aXBsaWVyKSk7CisgICAgICAgICAgICAgICAgbU51bWJlcnNSYWRpdXNNdWx0aXBsaWVyW0hPVVJTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnRpbWVwaWNrZXJfbnVtYmVyc19yYWRpdXNfbXVsdGlwbGllcl9ub3JtYWwpKTsKKyAgICAgICAgICAgICAgICBtVGV4dFNpemVNdWx0aXBsaWVyW0hPVVJTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnRpbWVwaWNrZXJfdGV4dF9zaXplX211bHRpcGxpZXJfbm9ybWFsKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQ2lyY2xlUmFkaXVzTXVsdGlwbGllcltNSU5VVEVTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl9jaXJjbGVfcmFkaXVzX211bHRpcGxpZXIpKTsKKyAgICAgICAgICAgIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltNSU5VVEVTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX25vcm1hbCkpOworICAgICAgICAgICAgbVRleHRTaXplTXVsdGlwbGllcltNSU5VVEVTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl90ZXh0X3NpemVfbXVsdGlwbGllcl9ub3JtYWwpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW0hPVVJTXSA9IDE7CisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW0hPVVJTX0lOTkVSXSA9IDE7CisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW01JTlVURVNdID0gMTsKKworICAgICAgICBtQW1QbUNpcmNsZVJhZGl1c011bHRpcGxpZXIgPSBGbG9hdC5wYXJzZUZsb2F0KAorICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl9hbXBtX2NpcmNsZV9yYWRpdXNfbXVsdGlwbGllcikpOworCisgICAgICAgIG1QYWludFtIT1VSU10uc2V0QWxwaGEobVNob3dIb3VycyA/IEFMUEhBX09QQVFVRSA6IEFMUEhBX1RSQU5TUEFSRU5UKTsKKyAgICAgICAgbVBhaW50W01JTlVURVNdLnNldEFscGhhKG1TaG93SG91cnMgPyBBTFBIQV9UUkFOU1BBUkVOVCA6IEFMUEhBX09QQVFVRSk7CisKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0NJUkNMRV0uc2V0QWxwaGEoCisgICAgICAgICAgICAgICAgbVNob3dIb3VycyA/QUxQSEFfU0VMRUNUT1IgOiBBTFBIQV9UUkFOU1BBUkVOVCk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9ET1RdLnNldEFscGhhKAorICAgICAgICAgICAgICAgIG1TaG93SG91cnMgPyBBTFBIQV9PUEFRVUUgOiBBTFBIQV9UUkFOU1BBUkVOVCk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9MSU5FXS5zZXRBbHBoYSgKKyAgICAgICAgICAgICAgICBtU2hvd0hvdXJzID8gQUxQSEFfU0VMRUNUT1IgOiBBTFBIQV9UUkFOU1BBUkVOVCk7CisKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfQ0lSQ0xFXS5zZXRBbHBoYSgKKyAgICAgICAgICAgICAgICBtU2hvd0hvdXJzID8gQUxQSEFfVFJBTlNQQVJFTlQgOiBBTFBIQV9TRUxFQ1RPUik7CisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0RPVF0uc2V0QWxwaGEoCisgICAgICAgICAgICAgICAgbVNob3dIb3VycyA/IEFMUEhBX1RSQU5TUEFSRU5UIDogQUxQSEFfT1BBUVVFKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfTElORV0uc2V0QWxwaGEoCisgICAgICAgICAgICAgICAgbVNob3dIb3VycyA/IEFMUEhBX1RSQU5TUEFSRU5UIDogQUxQSEFfU0VMRUNUT1IpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgeworICAgICAgICB1cGRhdGVMYXlvdXREYXRhKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxheW91dERhdGEoKSB7CisgICAgICAgIG1YQ2VudGVyID0gZ2V0V2lkdGgoKSAvIDI7CisgICAgICAgIG1ZQ2VudGVyID0gZ2V0SGVpZ2h0KCkgLyAyOworCisgICAgICAgIGZpbmFsIGludCBtaW4gPSBNYXRoLm1pbihtWENlbnRlciwgbVlDZW50ZXIpOworCisgICAgICAgIG1DaXJjbGVSYWRpdXNbSE9VUlNdID0gbWluICogbUNpcmNsZVJhZGl1c011bHRpcGxpZXJbSE9VUlNdOworICAgICAgICBtQ2lyY2xlUmFkaXVzW0hPVVJTX0lOTkVSXSA9IG1pbiAqIG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyW0hPVVJTXTsKKyAgICAgICAgbUNpcmNsZVJhZGl1c1tNSU5VVEVTXSA9IG1pbiAqIG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyW01JTlVURVNdOworCisgICAgICAgIGlmICghbUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgLy8gV2UnbGwgbmVlZCB0byBkcmF3IHRoZSBBTS9QTSBjaXJjbGVzLCBzbyB0aGUgbWFpbiBjaXJjbGUgd2lsbCBuZWVkIHRvIGhhdmUKKyAgICAgICAgICAgIC8vIGEgc2xpZ2h0bHkgaGlnaGVyIGNlbnRlci4gVG8ga2VlcCB0aGUgZW50aXJlIHZpZXcgY2VudGVyZWQgdmVydGljYWxseSwgd2UnbGwKKyAgICAgICAgICAgIC8vIGhhdmUgdG8gcHVzaCBpdCB1cCBieSBoYWxmIHRoZSByYWRpdXMgb2YgdGhlIEFNL1BNIGNpcmNsZXMuCisgICAgICAgICAgICBpbnQgYW1QbUNpcmNsZVJhZGl1cyA9IChpbnQpIChtQ2lyY2xlUmFkaXVzW0hPVVJTXSAqIG1BbVBtQ2lyY2xlUmFkaXVzTXVsdGlwbGllcik7CisgICAgICAgICAgICBtWUNlbnRlciAtPSBhbVBtQ2lyY2xlUmFkaXVzIC8gMjsKKyAgICAgICAgfQorCisgICAgICAgIG1NaW5IeXBvdGVudXNlRm9ySW5uZXJOdW1iZXIgPSAoaW50KSAobUNpcmNsZVJhZGl1c1tIT1VSU10KKyAgICAgICAgICAgICAgICAqIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltIT1VSU19JTk5FUl0pIC0gbVNlbGVjdGlvblJhZGl1c1tIT1VSU107CisgICAgICAgIG1NYXhIeXBvdGVudXNlRm9yT3V0ZXJOdW1iZXIgPSAoaW50KSAobUNpcmNsZVJhZGl1c1tIT1VSU10KKyAgICAgICAgICAgICAgICAqIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltIT1VSU10pICsgbVNlbGVjdGlvblJhZGl1c1tIT1VSU107CisgICAgICAgIG1IYWxmd2F5SHlwb3RlbnVzZVBvaW50ID0gKGludCkgKG1DaXJjbGVSYWRpdXNbSE9VUlNdCisgICAgICAgICAgICAgICAgKiAoKG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltIT1VSU10gKyBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbSE9VUlNfSU5ORVJdKSAvIDIpKTsKKworICAgICAgICBtVGV4dFNpemVbSE9VUlNdID0gbUNpcmNsZVJhZGl1c1tIT1VSU10gKiBtVGV4dFNpemVNdWx0aXBsaWVyW0hPVVJTXTsKKyAgICAgICAgbVRleHRTaXplW01JTlVURVNdID0gbUNpcmNsZVJhZGl1c1tNSU5VVEVTXSAqIG1UZXh0U2l6ZU11bHRpcGxpZXJbTUlOVVRFU107CisKKyAgICAgICAgaWYgKG1JczI0SG91ck1vZGUpIHsKKyAgICAgICAgICAgIG1Jbm5lclRleHRTaXplID0gbUNpcmNsZVJhZGl1c1tIT1VSU10gKiBtVGV4dFNpemVNdWx0aXBsaWVyW0hPVVJTX0lOTkVSXTsKKyAgICAgICAgfQorCisgICAgICAgIGNhbGN1bGF0ZUdyaWRTaXplc0hvdXJzKCk7CisgICAgICAgIGNhbGN1bGF0ZUdyaWRTaXplc01pbnV0ZXMoKTsKKworICAgICAgICBtU2VsZWN0aW9uUmFkaXVzW0hPVVJTXSA9IChpbnQpIChtQ2lyY2xlUmFkaXVzW0hPVVJTXSAqIG1TZWxlY3Rpb25SYWRpdXNNdWx0aXBsaWVyKTsKKyAgICAgICAgbVNlbGVjdGlvblJhZGl1c1tIT1VSU19JTk5FUl0gPSBtU2VsZWN0aW9uUmFkaXVzW0hPVVJTXTsKKyAgICAgICAgbVNlbGVjdGlvblJhZGl1c1tNSU5VVEVTXSA9IChpbnQpIChtQ2lyY2xlUmFkaXVzW01JTlVURVNdICogbVNlbGVjdGlvblJhZGl1c011bHRpcGxpZXIpOworCisgICAgICAgIG1BbVBtQ2lyY2xlUmFkaXVzID0gKGludCkgKG1DaXJjbGVSYWRpdXNbSE9VUlNdICogbUFtUG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyKTsKKyAgICAgICAgbVBhaW50QW1QbVRleHQuc2V0VGV4dFNpemUobUFtUG1DaXJjbGVSYWRpdXMgKiAzIC8gNCk7CisKKyAgICAgICAgLy8gTGluZSB1cCB0aGUgdmVydGljYWwgY2VudGVyIG9mIHRoZSBBTS9QTSBjaXJjbGVzIHdpdGggdGhlIGJvdHRvbSBvZiB0aGUgbWFpbiBjaXJjbGUuCisgICAgICAgIG1BbVBtWUNlbnRlciA9IG1ZQ2VudGVyICsgbUNpcmNsZVJhZGl1c1tIT1VSU107CisKKyAgICAgICAgLy8gTGluZSB1cCB0aGUgaG9yaXpvbnRhbCBlZGdlcyBvZiB0aGUgQU0vUE0gY2lyY2xlcyB3aXRoIHRoZSBob3Jpem9udGFsIGVkZ2VzCisgICAgICAgIC8vIG9mIHRoZSBtYWluIGNpcmNsZQorICAgICAgICBtTGVmdEluZGljYXRvclhDZW50ZXIgPSBtWENlbnRlciAtIG1DaXJjbGVSYWRpdXNbSE9VUlNdICsgbUFtUG1DaXJjbGVSYWRpdXM7CisgICAgICAgIG1SaWdodEluZGljYXRvclhDZW50ZXIgPSBtWENlbnRlciArIG1DaXJjbGVSYWRpdXNbSE9VUlNdIC0gbUFtUG1DaXJjbGVSYWRpdXM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgY2FudmFzLnNhdmUoKTsKKworICAgICAgICBjYWxjdWxhdGVHcmlkU2l6ZXNIb3VycygpOworICAgICAgICBjYWxjdWxhdGVHcmlkU2l6ZXNNaW51dGVzKCk7CisKKyAgICAgICAgZHJhd0NpcmNsZUJhY2tncm91bmQoY2FudmFzKTsKKworICAgICAgICBkcmF3VGV4dEVsZW1lbnRzKGNhbnZhcywgbVRleHRTaXplW0hPVVJTXSwgbVR5cGVmYWNlLCBtT3V0ZXJUZXh0SG91cnMsCisgICAgICAgICAgICAgICAgbVRleHRHcmlkV2lkdGhzW0hPVVJTXSwgbVRleHRHcmlkSGVpZ2h0c1tIT1VSU10sIG1QYWludFtIT1VSU10pOworCisgICAgICAgIGlmIChtSXMyNEhvdXJNb2RlICYmIG1Jbm5lclRleHRIb3VycyAhPSBudWxsKSB7CisgICAgICAgICAgICBkcmF3VGV4dEVsZW1lbnRzKGNhbnZhcywgbUlubmVyVGV4dFNpemUsIG1UeXBlZmFjZSwgbUlubmVyVGV4dEhvdXJzLAorICAgICAgICAgICAgICAgICAgICBtSW5uZXJUZXh0R3JpZFdpZHRocywgbUlubmVyVGV4dEdyaWRIZWlnaHRzLCBtUGFpbnRbSE9VUlNdKTsKKyAgICAgICAgfQorCisgICAgICAgIGRyYXdUZXh0RWxlbWVudHMoY2FudmFzLCBtVGV4dFNpemVbTUlOVVRFU10sIG1UeXBlZmFjZSwgbU91dGVyVGV4dE1pbnV0ZXMsCisgICAgICAgICAgICAgICAgbVRleHRHcmlkV2lkdGhzW01JTlVURVNdLCBtVGV4dEdyaWRIZWlnaHRzW01JTlVURVNdLCBtUGFpbnRbTUlOVVRFU10pOworCisgICAgICAgIGRyYXdDZW50ZXIoY2FudmFzKTsKKyAgICAgICAgZHJhd1NlbGVjdG9yKGNhbnZhcyk7CisgICAgICAgIGlmICghbUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgZHJhd0FtUG0oY2FudmFzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCFtSW5wdXRFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBEcmF3IG91dGVyIHZpZXcgcmVjdGFuZ2xlCisgICAgICAgICAgICBtUmVjdEYuc2V0KDAsIDAsIGdldFdpZHRoKCksIGdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIGNhbnZhcy5kcmF3UmVjdChtUmVjdEYsIG1QYWludERpc2FibGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgZHJhd0RlYnVnKGNhbnZhcyk7CisgICAgICAgIH0KKworICAgICAgICBjYW52YXMucmVzdG9yZSgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3Q2lyY2xlQmFja2dyb3VuZChDYW52YXMgY2FudmFzKSB7CisgICAgICAgIGNhbnZhcy5kcmF3Q2lyY2xlKG1YQ2VudGVyLCBtWUNlbnRlciwgbUNpcmNsZVJhZGl1c1tIT1VSU10sIG1QYWludEJhY2tncm91bmQpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3Q2VudGVyKENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgY2FudmFzLmRyYXdDaXJjbGUobVhDZW50ZXIsIG1ZQ2VudGVyLCBDRU5URVJfUkFESVVTLCBtUGFpbnRDZW50ZXIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3U2VsZWN0b3IoQ2FudmFzIGNhbnZhcykgeworICAgICAgICBkcmF3U2VsZWN0b3IoY2FudmFzLCBtSXNPbklubmVyQ2lyY2xlID8gSE9VUlNfSU5ORVIgOiBIT1VSUyk7CisgICAgICAgIGRyYXdTZWxlY3RvcihjYW52YXMsIE1JTlVURVMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3QW1QbShDYW52YXMgY2FudmFzKSB7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMYXlvdXRSdGwgPSBpc0xheW91dFJ0bCgpOworCisgICAgICAgIGludCBhbUNvbG9yID0gbUFtUG1VbnNlbGVjdGVkQ29sb3I7CisgICAgICAgIGludCBhbUFscGhhID0gQUxQSEFfT1BBUVVFOworICAgICAgICBpbnQgcG1Db2xvciA9IG1BbVBtVW5zZWxlY3RlZENvbG9yOworICAgICAgICBpbnQgcG1BbHBoYSA9IEFMUEhBX09QQVFVRTsKKyAgICAgICAgaWYgKG1BbU9yUG0gPT0gQU0pIHsKKyAgICAgICAgICAgIGFtQ29sb3IgPSBtQW1QbVNlbGVjdGVkQ29sb3I7CisgICAgICAgICAgICBhbUFscGhhID0gQUxQSEFfQU1QTV9TRUxFQ1RFRDsKKyAgICAgICAgfSBlbHNlIGlmIChtQW1PclBtID09IFBNKSB7CisgICAgICAgICAgICBwbUNvbG9yID0gbUFtUG1TZWxlY3RlZENvbG9yOworICAgICAgICAgICAgcG1BbHBoYSA9IEFMUEhBX0FNUE1fU0VMRUNURUQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1BbU9yUG1QcmVzc2VkID09IEFNKSB7CisgICAgICAgICAgICBhbUNvbG9yID0gbUFtUG1TZWxlY3RlZENvbG9yOworICAgICAgICAgICAgYW1BbHBoYSA9IEFMUEhBX0FNUE1fUFJFU1NFRDsKKyAgICAgICAgfSBlbHNlIGlmIChtQW1PclBtUHJlc3NlZCA9PSBQTSkgeworICAgICAgICAgICAgcG1Db2xvciA9IG1BbVBtU2VsZWN0ZWRDb2xvcjsKKyAgICAgICAgICAgIHBtQWxwaGEgPSBBTFBIQV9BTVBNX1BSRVNTRUQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBEcmF3IHRoZSB0d28gY2lyY2xlcworICAgICAgICBtUGFpbnRBbVBtQ2lyY2xlW0FNXS5zZXRDb2xvcihhbUNvbG9yKTsKKyAgICAgICAgbVBhaW50QW1QbUNpcmNsZVtBTV0uc2V0QWxwaGEoYW1BbHBoYSk7CisgICAgICAgIGNhbnZhcy5kcmF3Q2lyY2xlKGlzTGF5b3V0UnRsID8gbVJpZ2h0SW5kaWNhdG9yWENlbnRlciA6IG1MZWZ0SW5kaWNhdG9yWENlbnRlciwKKyAgICAgICAgICAgICAgICBtQW1QbVlDZW50ZXIsIG1BbVBtQ2lyY2xlUmFkaXVzLCBtUGFpbnRBbVBtQ2lyY2xlW0FNXSk7CisKKyAgICAgICAgbVBhaW50QW1QbUNpcmNsZVtQTV0uc2V0Q29sb3IocG1Db2xvcik7CisgICAgICAgIG1QYWludEFtUG1DaXJjbGVbUE1dLnNldEFscGhhKHBtQWxwaGEpOworICAgICAgICBjYW52YXMuZHJhd0NpcmNsZShpc0xheW91dFJ0bCA/IG1MZWZ0SW5kaWNhdG9yWENlbnRlciA6IG1SaWdodEluZGljYXRvclhDZW50ZXIsCisgICAgICAgICAgICAgICAgbUFtUG1ZQ2VudGVyLCBtQW1QbUNpcmNsZVJhZGl1cywgbVBhaW50QW1QbUNpcmNsZVtQTV0pOworCisgICAgICAgIC8vIERyYXcgdGhlIEFNL1BNIHRleHRzIG9uIHRvcAorICAgICAgICBtUGFpbnRBbVBtVGV4dC5zZXRDb2xvcihtQW1QbVRleHRDb2xvcik7CisgICAgICAgIGZsb2F0IHRleHRZQ2VudGVyID0gbUFtUG1ZQ2VudGVyIC0KKyAgICAgICAgICAgICAgICAoaW50KSAobVBhaW50QW1QbVRleHQuZGVzY2VudCgpICsgbVBhaW50QW1QbVRleHQuYXNjZW50KCkpIC8gMjsKKworICAgICAgICBjYW52YXMuZHJhd1RleHQoaXNMYXlvdXRSdGwgPyBtQW1QbVRleHRbUE1dIDogbUFtUG1UZXh0W0FNXSwgbUxlZnRJbmRpY2F0b3JYQ2VudGVyLAorICAgICAgICAgICAgICAgIHRleHRZQ2VudGVyLCBtUGFpbnRBbVBtVGV4dCk7CisgICAgICAgIGNhbnZhcy5kcmF3VGV4dChpc0xheW91dFJ0bCA/IG1BbVBtVGV4dFtBTV0gOiBtQW1QbVRleHRbUE1dLCBtUmlnaHRJbmRpY2F0b3JYQ2VudGVyLAorICAgICAgICAgICAgICAgIHRleHRZQ2VudGVyLCBtUGFpbnRBbVBtVGV4dCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRyYXdTZWxlY3RvcihDYW52YXMgY2FudmFzLCBpbnQgaW5kZXgpIHsKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHJhZGl1cyBhdCB3aGljaCB0byBwbGFjZSB0aGUgc2VsZWN0aW9uIGNpcmNsZS4KKyAgICAgICAgbUxpbmVMZW5ndGhbaW5kZXhdID0gKGludCkgKG1DaXJjbGVSYWRpdXNbaW5kZXhdCisgICAgICAgICAgICAgICAgKiBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbaW5kZXhdICogbUFuaW1hdGlvblJhZGl1c011bHRpcGxpZXJbaW5kZXhdKTsKKworICAgICAgICBkb3VibGUgc2VsZWN0aW9uUmFkaWFucyA9IE1hdGgudG9SYWRpYW5zKG1TZWxlY3Rpb25EZWdyZWVzW2luZGV4XSk7CisKKyAgICAgICAgaW50IHBvaW50WCA9IG1YQ2VudGVyICsgKGludCkgKG1MaW5lTGVuZ3RoW2luZGV4XSAqIE1hdGguc2luKHNlbGVjdGlvblJhZGlhbnMpKTsKKyAgICAgICAgaW50IHBvaW50WSA9IG1ZQ2VudGVyIC0gKGludCkgKG1MaW5lTGVuZ3RoW2luZGV4XSAqIE1hdGguY29zKHNlbGVjdGlvblJhZGlhbnMpKTsKKworICAgICAgICAvLyBEcmF3IHRoZSBzZWxlY3Rpb24gY2lyY2xlCisgICAgICAgIGNhbnZhcy5kcmF3Q2lyY2xlKHBvaW50WCwgcG9pbnRZLCBtU2VsZWN0aW9uUmFkaXVzW2luZGV4XSwKKyAgICAgICAgICAgICAgICBtUGFpbnRTZWxlY3RvcltpbmRleCAlIDJdW1NFTEVDVE9SX0NJUkNMRV0pOworCisgICAgICAgIC8vIERyYXcgdGhlIGRvdCBpZiBuZWVkZWQKKyAgICAgICAgaWYgKG1TZWxlY3Rpb25EZWdyZWVzW2luZGV4XSAlIDMwICE9IDApIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBvbiBhIGRpcmVjdCB0aWNrCisgICAgICAgICAgICBjYW52YXMuZHJhd0NpcmNsZShwb2ludFgsIHBvaW50WSwgKG1TZWxlY3Rpb25SYWRpdXNbaW5kZXhdICogMiAvIDcpLAorICAgICAgICAgICAgICAgICAgICBtUGFpbnRTZWxlY3RvcltpbmRleCAlIDJdW1NFTEVDVE9SX0RPVF0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UncmUgbm90IGRyYXdpbmcgdGhlIGRvdCwgc28gc2hvcnRlbiB0aGUgbGluZSB0byBvbmx5IGdvIGFzIGZhciBhcyB0aGUgZWRnZSBvZiB0aGUKKyAgICAgICAgICAgIC8vIHNlbGVjdGlvbiBjaXJjbGUKKyAgICAgICAgICAgIGludCBsaW5lTGVuZ3RoID0gbUxpbmVMZW5ndGhbaW5kZXhdIC0gbVNlbGVjdGlvblJhZGl1c1tpbmRleF07CisgICAgICAgICAgICBwb2ludFggPSBtWENlbnRlciArIChpbnQpIChsaW5lTGVuZ3RoICogTWF0aC5zaW4oc2VsZWN0aW9uUmFkaWFucykpOworICAgICAgICAgICAgcG9pbnRZID0gbVlDZW50ZXIgLSAoaW50KSAobGluZUxlbmd0aCAqIE1hdGguY29zKHNlbGVjdGlvblJhZGlhbnMpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERyYXcgdGhlIGxpbmUKKyAgICAgICAgY2FudmFzLmRyYXdMaW5lKG1YQ2VudGVyLCBtWUNlbnRlciwgcG9pbnRYLCBwb2ludFksCisgICAgICAgICAgICAgICAgbVBhaW50U2VsZWN0b3JbaW5kZXggJSAyXVtTRUxFQ1RPUl9MSU5FXSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRyYXdEZWJ1ZyhDYW52YXMgY2FudmFzKSB7CisgICAgICAgIC8vIERyYXcgb3V0ZXIgbnVtYmVycyBjaXJjbGUKKyAgICAgICAgZmluYWwgZmxvYXQgb3V0ZXJSYWRpdXMgPSBtQ2lyY2xlUmFkaXVzW0hPVVJTXSAqIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltIT1VSU107CisgICAgICAgIGNhbnZhcy5kcmF3Q2lyY2xlKG1YQ2VudGVyLCBtWUNlbnRlciwgb3V0ZXJSYWRpdXMsIG1QYWludERlYnVnKTsKKworICAgICAgICAvLyBEcmF3IGlubmVyIG51bWJlcnMgY2lyY2xlCisgICAgICAgIGZpbmFsIGZsb2F0IGlubmVyUmFkaXVzID0gbUNpcmNsZVJhZGl1c1tIT1VSU10gKiBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbSE9VUlNfSU5ORVJdOworICAgICAgICBjYW52YXMuZHJhd0NpcmNsZShtWENlbnRlciwgbVlDZW50ZXIsIGlubmVyUmFkaXVzLCBtUGFpbnREZWJ1Zyk7CisKKyAgICAgICAgLy8gRHJhdyBvdXRlciBiYWNrZ3JvdW5kIGNpcmNsZQorICAgICAgICBjYW52YXMuZHJhd0NpcmNsZShtWENlbnRlciwgbVlDZW50ZXIsIG1DaXJjbGVSYWRpdXNbSE9VUlNdLCBtUGFpbnREZWJ1Zyk7CisKKyAgICAgICAgLy8gRHJhdyBvdXRlciByZWN0YW5nbGUgZm9yIGNpcmNsZXMKKyAgICAgICAgZmxvYXQgbGVmdCA9IG1YQ2VudGVyIC0gb3V0ZXJSYWRpdXM7CisgICAgICAgIGZsb2F0IHRvcCA9IG1ZQ2VudGVyIC0gb3V0ZXJSYWRpdXM7CisgICAgICAgIGZsb2F0IHJpZ2h0ID0gbVhDZW50ZXIgKyBvdXRlclJhZGl1czsKKyAgICAgICAgZmxvYXQgYm90dG9tID0gbVlDZW50ZXIgKyBvdXRlclJhZGl1czsKKyAgICAgICAgbVJlY3RGID0gbmV3IFJlY3RGKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgIGNhbnZhcy5kcmF3UmVjdChtUmVjdEYsIG1QYWludERlYnVnKTsKKworICAgICAgICAvLyBEcmF3IG91dGVyIHJlY3RhbmdsZSBmb3IgYmFja2dyb3VuZAorICAgICAgICBsZWZ0ID0gbVhDZW50ZXIgLSBtQ2lyY2xlUmFkaXVzW0hPVVJTXTsKKyAgICAgICAgdG9wID0gbVlDZW50ZXIgLSBtQ2lyY2xlUmFkaXVzW0hPVVJTXTsKKyAgICAgICAgcmlnaHQgPSBtWENlbnRlciArIG1DaXJjbGVSYWRpdXNbSE9VUlNdOworICAgICAgICBib3R0b20gPSBtWUNlbnRlciArIG1DaXJjbGVSYWRpdXNbSE9VUlNdOworICAgICAgICBtUmVjdEYuc2V0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgIGNhbnZhcy5kcmF3UmVjdChtUmVjdEYsIG1QYWludERlYnVnKTsKKworICAgICAgICAvLyBEcmF3IG91dGVyIHZpZXcgcmVjdGFuZ2xlCisgICAgICAgIG1SZWN0Ri5zZXQoMCwgMCwgZ2V0V2lkdGgoKSwgZ2V0SGVpZ2h0KCkpOworICAgICAgICBjYW52YXMuZHJhd1JlY3QobVJlY3RGLCBtUGFpbnREZWJ1Zyk7CisKKyAgICAgICAgLy8gRHJhdyBzZWxlY3RlZCB0aW1lCisgICAgICAgIGZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IFN0cmluZy5mb3JtYXQoIiUwMmQ6JTAyZCIsIGdldEN1cnJlbnRIb3VyKCksIGdldEN1cnJlbnRNaW51dGUoKSk7CisKKyAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcyBscCA9IG5ldyBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zKFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULAorICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKTsKKyAgICAgICAgVGV4dFZpZXcgdHYgPSBuZXcgVGV4dFZpZXcoZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgdHYuc2V0TGF5b3V0UGFyYW1zKGxwKTsKKyAgICAgICAgdHYuc2V0VGV4dChzZWxlY3RlZCk7CisgICAgICAgIHR2Lm1lYXN1cmUoTWVhc3VyZVNwZWMuVU5TUEVDSUZJRUQsIE1lYXN1cmVTcGVjLlVOU1BFQ0lGSUVEKTsKKyAgICAgICAgUGFpbnQgcGFpbnQgPSB0di5nZXRQYWludCgpOworICAgICAgICBwYWludC5zZXRDb2xvcihERUJVR19URVhUX0NPTE9SKTsKKworICAgICAgICBmaW5hbCBpbnQgd2lkdGggPSB0di5nZXRNZWFzdXJlZFdpZHRoKCk7CisKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gcGFpbnQuZGVzY2VudCgpIC0gcGFpbnQuYXNjZW50KCk7CisgICAgICAgIGZsb2F0IHggPSBtWENlbnRlciAtIHdpZHRoIC8gMjsKKyAgICAgICAgZmxvYXQgeSA9IG1ZQ2VudGVyICsgMS41ZiAqIGhlaWdodDsKKworICAgICAgICBjYW52YXMuZHJhd1RleHQoc2VsZWN0ZWQudG9TdHJpbmcoKSwgeCwgeSwgcGFpbnQpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjYWxjdWxhdGVHcmlkU2l6ZXNIb3VycygpIHsKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0ZXh0IHBvc2l0aW9ucworICAgICAgICBmbG9hdCBudW1iZXJzUmFkaXVzID0gbUNpcmNsZVJhZGl1c1tIT1VSU10KKyAgICAgICAgICAgICAgICAqIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltIT1VSU10gKiBtQW5pbWF0aW9uUmFkaXVzTXVsdGlwbGllcltIT1VSU107CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBwb3NpdGlvbnMgZm9yIHRoZSAxMiBudW1iZXJzIGluIHRoZSBtYWluIGNpcmNsZS4KKyAgICAgICAgY2FsY3VsYXRlR3JpZFNpemVzKG1QYWludFtIT1VSU10sIG51bWJlcnNSYWRpdXMsIG1YQ2VudGVyLCBtWUNlbnRlciwKKyAgICAgICAgICAgICAgICBtVGV4dFNpemVbSE9VUlNdLCBtVGV4dEdyaWRIZWlnaHRzW0hPVVJTXSwgbVRleHRHcmlkV2lkdGhzW0hPVVJTXSk7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpbm5lciBjaXJjbGUsIGNhbGN1bGF0ZSB0aG9zZSBwb3NpdGlvbnMgdG9vLgorICAgICAgICBpZiAobUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgZmxvYXQgaW5uZXJOdW1iZXJzUmFkaXVzID0gbUNpcmNsZVJhZGl1c1tIT1VSU19JTk5FUl0KKyAgICAgICAgICAgICAgICAgICAgKiBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbSE9VUlNfSU5ORVJdCisgICAgICAgICAgICAgICAgICAgICogbUFuaW1hdGlvblJhZGl1c011bHRpcGxpZXJbSE9VUlNfSU5ORVJdOworCisgICAgICAgICAgICBjYWxjdWxhdGVHcmlkU2l6ZXMobVBhaW50W0hPVVJTXSwgaW5uZXJOdW1iZXJzUmFkaXVzLCBtWENlbnRlciwgbVlDZW50ZXIsCisgICAgICAgICAgICAgICAgICAgIG1Jbm5lclRleHRTaXplLCBtSW5uZXJUZXh0R3JpZEhlaWdodHMsIG1Jbm5lclRleHRHcmlkV2lkdGhzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjYWxjdWxhdGVHcmlkU2l6ZXNNaW51dGVzKCkgeworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHRleHQgcG9zaXRpb25zCisgICAgICAgIGZsb2F0IG51bWJlcnNSYWRpdXMgPSBtQ2lyY2xlUmFkaXVzW01JTlVURVNdCisgICAgICAgICAgICAgICAgKiBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbTUlOVVRFU10gKiBtQW5pbWF0aW9uUmFkaXVzTXVsdGlwbGllcltNSU5VVEVTXTsKKworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHBvc2l0aW9ucyBmb3IgdGhlIDEyIG51bWJlcnMgaW4gdGhlIG1haW4gY2lyY2xlLgorICAgICAgICBjYWxjdWxhdGVHcmlkU2l6ZXMobVBhaW50W01JTlVURVNdLCBudW1iZXJzUmFkaXVzLCBtWENlbnRlciwgbVlDZW50ZXIsCisgICAgICAgICAgICAgICAgbVRleHRTaXplW01JTlVURVNdLCBtVGV4dEdyaWRIZWlnaHRzW01JTlVURVNdLCBtVGV4dEdyaWRXaWR0aHNbTUlOVVRFU10pOworICAgIH0KKworCisgICAgLyoqCisgICAgICogVXNpbmcgdGhlIHRyaWdvbm9tZXRyaWMgVW5pdCBDaXJjbGUsIGNhbGN1bGF0ZSB0aGUgcG9zaXRpb25zIHRoYXQgdGhlIHRleHQgd2lsbCBuZWVkIHRvIGJlCisgICAgICogZHJhd24gYXQgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBjaXJjbGUgcmFkaXVzLiBQbGFjZSB0aGUgdmFsdWVzIGluIHRoZSB0ZXh0R3JpZEhlaWdodHMgYW5kCisgICAgICogdGV4dEdyaWRXaWR0aHMgcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUdyaWRTaXplcyhQYWludCBwYWludCwgZmxvYXQgbnVtYmVyc1JhZGl1cywgZmxvYXQgeENlbnRlciwKKyAgICAgICAgICAgIGZsb2F0IHlDZW50ZXIsIGZsb2F0IHRleHRTaXplLCBmbG9hdFtdIHRleHRHcmlkSGVpZ2h0cywgZmxvYXRbXSB0ZXh0R3JpZFdpZHRocykgeworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgbnVtYmVycyBuZWVkIHRvIGJlIGRyYXduIGluIGEgN3g3IGdyaWQsIHJlcHJlc2VudGluZyB0aGUgcG9pbnRzIG9uIHRoZSBVbml0IENpcmNsZS4KKyAgICAgICAgICovCisgICAgICAgIGZpbmFsIGZsb2F0IG9mZnNldDEgPSBudW1iZXJzUmFkaXVzOworICAgICAgICAvLyBjb3MoMzApID0gYSAvIHIgPT4gciAqIGNvcygzMCkKKyAgICAgICAgZmluYWwgZmxvYXQgb2Zmc2V0MiA9IG51bWJlcnNSYWRpdXMgKiBDT1NJTkVfMzBfREVHUkVFUzsKKyAgICAgICAgLy8gc2luKDMwKSA9IG8gLyByID0+IHIgKiBzaW4oMzApCisgICAgICAgIGZpbmFsIGZsb2F0IG9mZnNldDMgPSBudW1iZXJzUmFkaXVzICogU0lORV8zMF9ERUdSRUVTOworCisgICAgICAgIHBhaW50LnNldFRleHRTaXplKHRleHRTaXplKTsKKyAgICAgICAgLy8gV2UnbGwgbmVlZCB5VGV4dEJhc2UgdG8gYmUgc2xpZ2h0bHkgbG93ZXIgdG8gYWNjb3VudCBmb3IgdGhlIHRleHQncyBiYXNlbGluZS4KKyAgICAgICAgeUNlbnRlciAtPSAocGFpbnQuZGVzY2VudCgpICsgcGFpbnQuYXNjZW50KCkpIC8gMjsKKworICAgICAgICB0ZXh0R3JpZEhlaWdodHNbMF0gPSB5Q2VudGVyIC0gb2Zmc2V0MTsKKyAgICAgICAgdGV4dEdyaWRXaWR0aHNbMF0gPSB4Q2VudGVyIC0gb2Zmc2V0MTsKKyAgICAgICAgdGV4dEdyaWRIZWlnaHRzWzFdID0geUNlbnRlciAtIG9mZnNldDI7CisgICAgICAgIHRleHRHcmlkV2lkdGhzWzFdID0geENlbnRlciAtIG9mZnNldDI7CisgICAgICAgIHRleHRHcmlkSGVpZ2h0c1syXSA9IHlDZW50ZXIgLSBvZmZzZXQzOworICAgICAgICB0ZXh0R3JpZFdpZHRoc1syXSA9IHhDZW50ZXIgLSBvZmZzZXQzOworICAgICAgICB0ZXh0R3JpZEhlaWdodHNbM10gPSB5Q2VudGVyOworICAgICAgICB0ZXh0R3JpZFdpZHRoc1szXSA9IHhDZW50ZXI7CisgICAgICAgIHRleHRHcmlkSGVpZ2h0c1s0XSA9IHlDZW50ZXIgKyBvZmZzZXQzOworICAgICAgICB0ZXh0R3JpZFdpZHRoc1s0XSA9IHhDZW50ZXIgKyBvZmZzZXQzOworICAgICAgICB0ZXh0R3JpZEhlaWdodHNbNV0gPSB5Q2VudGVyICsgb2Zmc2V0MjsKKyAgICAgICAgdGV4dEdyaWRXaWR0aHNbNV0gPSB4Q2VudGVyICsgb2Zmc2V0MjsKKyAgICAgICAgdGV4dEdyaWRIZWlnaHRzWzZdID0geUNlbnRlciArIG9mZnNldDE7CisgICAgICAgIHRleHRHcmlkV2lkdGhzWzZdID0geENlbnRlciArIG9mZnNldDE7CisgICAgfQorCisgICAgLyoqCisgICAgICogRHJhdyB0aGUgMTIgdGV4dCB2YWx1ZXMgYXQgdGhlIHBvc2l0aW9ucyBzcGVjaWZpZWQgYnkgdGhlIHRleHRHcmlkIHBhcmFtZXRlcnMuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGRyYXdUZXh0RWxlbWVudHMoQ2FudmFzIGNhbnZhcywgZmxvYXQgdGV4dFNpemUsIFR5cGVmYWNlIHR5cGVmYWNlLCBTdHJpbmdbXSB0ZXh0cywKKyAgICAgICAgICAgIGZsb2F0W10gdGV4dEdyaWRXaWR0aHMsIGZsb2F0W10gdGV4dEdyaWRIZWlnaHRzLCBQYWludCBwYWludCkgeworICAgICAgICBwYWludC5zZXRUZXh0U2l6ZSh0ZXh0U2l6ZSk7CisgICAgICAgIHBhaW50LnNldFR5cGVmYWNlKHR5cGVmYWNlKTsKKyAgICAgICAgY2FudmFzLmRyYXdUZXh0KHRleHRzWzBdLCB0ZXh0R3JpZFdpZHRoc1szXSwgdGV4dEdyaWRIZWlnaHRzWzBdLCBwYWludCk7CisgICAgICAgIGNhbnZhcy5kcmF3VGV4dCh0ZXh0c1sxXSwgdGV4dEdyaWRXaWR0aHNbNF0sIHRleHRHcmlkSGVpZ2h0c1sxXSwgcGFpbnQpOworICAgICAgICBjYW52YXMuZHJhd1RleHQodGV4dHNbMl0sIHRleHRHcmlkV2lkdGhzWzVdLCB0ZXh0R3JpZEhlaWdodHNbMl0sIHBhaW50KTsKKyAgICAgICAgY2FudmFzLmRyYXdUZXh0KHRleHRzWzNdLCB0ZXh0R3JpZFdpZHRoc1s2XSwgdGV4dEdyaWRIZWlnaHRzWzNdLCBwYWludCk7CisgICAgICAgIGNhbnZhcy5kcmF3VGV4dCh0ZXh0c1s0XSwgdGV4dEdyaWRXaWR0aHNbNV0sIHRleHRHcmlkSGVpZ2h0c1s0XSwgcGFpbnQpOworICAgICAgICBjYW52YXMuZHJhd1RleHQodGV4dHNbNV0sIHRleHRHcmlkV2lkdGhzWzRdLCB0ZXh0R3JpZEhlaWdodHNbNV0sIHBhaW50KTsKKyAgICAgICAgY2FudmFzLmRyYXdUZXh0KHRleHRzWzZdLCB0ZXh0R3JpZFdpZHRoc1szXSwgdGV4dEdyaWRIZWlnaHRzWzZdLCBwYWludCk7CisgICAgICAgIGNhbnZhcy5kcmF3VGV4dCh0ZXh0c1s3XSwgdGV4dEdyaWRXaWR0aHNbMl0sIHRleHRHcmlkSGVpZ2h0c1s1XSwgcGFpbnQpOworICAgICAgICBjYW52YXMuZHJhd1RleHQodGV4dHNbOF0sIHRleHRHcmlkV2lkdGhzWzFdLCB0ZXh0R3JpZEhlaWdodHNbNF0sIHBhaW50KTsKKyAgICAgICAgY2FudmFzLmRyYXdUZXh0KHRleHRzWzldLCB0ZXh0R3JpZFdpZHRoc1swXSwgdGV4dEdyaWRIZWlnaHRzWzNdLCBwYWludCk7CisgICAgICAgIGNhbnZhcy5kcmF3VGV4dCh0ZXh0c1sxMF0sIHRleHRHcmlkV2lkdGhzWzFdLCB0ZXh0R3JpZEhlaWdodHNbMl0sIHBhaW50KTsKKyAgICAgICAgY2FudmFzLmRyYXdUZXh0KHRleHRzWzExXSwgdGV4dEdyaWRXaWR0aHNbMl0sIHRleHRHcmlkSGVpZ2h0c1sxXSwgcGFpbnQpOworICAgIH0KKworICAgIC8vIFVzZWQgZm9yIGFuaW1hdGluZyB0aGUgaG91cnMgYnkgY2hhbmdpbmcgdGhlaXIgcmFkaXVzCisgICAgcHJpdmF0ZSB2b2lkIHNldEFuaW1hdGlvblJhZGl1c011bHRpcGxpZXJIb3VycyhmbG9hdCBhbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyKSB7CisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW0hPVVJTXSA9IGFuaW1hdGlvblJhZGl1c011bHRpcGxpZXI7CisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW0hPVVJTX0lOTkVSXSA9IGFuaW1hdGlvblJhZGl1c011bHRpcGxpZXI7CisgICAgfQorCisgICAgLy8gVXNlZCBmb3IgYW5pbWF0aW5nIHRoZSBtaW51dGVzIGJ5IGNoYW5naW5nIHRoZWlyIHJhZGl1cworICAgIHByaXZhdGUgdm9pZCBzZXRBbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyTWludXRlcyhmbG9hdCBhbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyKSB7CisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW01JTlVURVNdID0gYW5pbWF0aW9uUmFkaXVzTXVsdGlwbGllcjsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RBbmltYXRvciBnZXRSYWRpdXNEaXNhcHBlYXJBbmltYXRvcihPYmplY3QgdGFyZ2V0LAorICAgICAgICAgICAgU3RyaW5nIHJhZGl1c1Byb3BlcnR5TmFtZSwgSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyIHVwZGF0ZUxpc3RlbmVyLAorICAgICAgICAgICAgZmxvYXQgbWlkUmFkaXVzTXVsdGlwbGllciwgZmxvYXQgZW5kUmFkaXVzTXVsdGlwbGllcikgeworICAgICAgICBLZXlmcmFtZSBrZjAsIGtmMSwga2YyOworICAgICAgICBmbG9hdCBtaWR3YXlQb2ludCA9IDAuMmY7CisgICAgICAgIGludCBkdXJhdGlvbiA9IDUwMDsKKworICAgICAgICBrZjAgPSBLZXlmcmFtZS5vZkZsb2F0KDBmLCAxKTsKKyAgICAgICAga2YxID0gS2V5ZnJhbWUub2ZGbG9hdChtaWR3YXlQb2ludCwgbWlkUmFkaXVzTXVsdGlwbGllcik7CisgICAgICAgIGtmMiA9IEtleWZyYW1lLm9mRmxvYXQoMWYsIGVuZFJhZGl1c011bHRpcGxpZXIpOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciByYWRpdXNEaXNhcHBlYXIgPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZktleWZyYW1lKAorICAgICAgICAgICAgICAgIHJhZGl1c1Byb3BlcnR5TmFtZSwga2YwLCBrZjEsIGtmMik7CisKKyAgICAgICAgT2JqZWN0QW5pbWF0b3IgYW5pbWF0b3IgPSBPYmplY3RBbmltYXRvci5vZlByb3BlcnR5VmFsdWVzSG9sZGVyKAorICAgICAgICAgICAgICAgIHRhcmdldCwgcmFkaXVzRGlzYXBwZWFyKS5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgICAgIGFuaW1hdG9yLmFkZFVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUxpc3RlbmVyKTsKKyAgICAgICAgcmV0dXJuIGFuaW1hdG9yOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIE9iamVjdEFuaW1hdG9yIGdldFJhZGl1c1JlYXBwZWFyQW5pbWF0b3IoT2JqZWN0IHRhcmdldCwKKyAgICAgICAgICAgIFN0cmluZyByYWRpdXNQcm9wZXJ0eU5hbWUsIEludmFsaWRhdGVVcGRhdGVMaXN0ZW5lciB1cGRhdGVMaXN0ZW5lciwKKyAgICAgICAgICAgIGZsb2F0IG1pZFJhZGl1c011bHRpcGxpZXIsIGZsb2F0IGVuZFJhZGl1c011bHRpcGxpZXIpIHsKKyAgICAgICAgS2V5ZnJhbWUga2YwLCBrZjEsIGtmMiwga2YzOworICAgICAgICBmbG9hdCBtaWR3YXlQb2ludCA9IDAuMmY7CisgICAgICAgIGludCBkdXJhdGlvbiA9IDUwMDsKKworICAgICAgICAvLyBTZXQgdXAgYW5pbWF0b3IgZm9yIHJlYXBwZWFyaW5nLgorICAgICAgICBmbG9hdCBkZWxheU11bHRpcGxpZXIgPSAwLjI1ZjsKKyAgICAgICAgZmxvYXQgdHJhbnNpdGlvbkR1cmF0aW9uTXVsdGlwbGllciA9IDFmOworICAgICAgICBmbG9hdCB0b3RhbER1cmF0aW9uTXVsdGlwbGllciA9IHRyYW5zaXRpb25EdXJhdGlvbk11bHRpcGxpZXIgKyBkZWxheU11bHRpcGxpZXI7CisgICAgICAgIGludCB0b3RhbER1cmF0aW9uID0gKGludCkgKGR1cmF0aW9uICogdG90YWxEdXJhdGlvbk11bHRpcGxpZXIpOworICAgICAgICBmbG9hdCBkZWxheVBvaW50ID0gKGRlbGF5TXVsdGlwbGllciAqIGR1cmF0aW9uKSAvIHRvdGFsRHVyYXRpb247CisgICAgICAgIG1pZHdheVBvaW50ID0gMSAtIChtaWR3YXlQb2ludCAqICgxIC0gZGVsYXlQb2ludCkpOworCisgICAgICAgIGtmMCA9IEtleWZyYW1lLm9mRmxvYXQoMGYsIGVuZFJhZGl1c011bHRpcGxpZXIpOworICAgICAgICBrZjEgPSBLZXlmcmFtZS5vZkZsb2F0KGRlbGF5UG9pbnQsIGVuZFJhZGl1c011bHRpcGxpZXIpOworICAgICAgICBrZjIgPSBLZXlmcmFtZS5vZkZsb2F0KG1pZHdheVBvaW50LCBtaWRSYWRpdXNNdWx0aXBsaWVyKTsKKyAgICAgICAga2YzID0gS2V5ZnJhbWUub2ZGbG9hdCgxZiwgMSk7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHJhZGl1c1JlYXBwZWFyID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZLZXlmcmFtZSgKKyAgICAgICAgICAgICAgICByYWRpdXNQcm9wZXJ0eU5hbWUsIGtmMCwga2YxLCBrZjIsIGtmMyk7CisKKyAgICAgICAgT2JqZWN0QW5pbWF0b3IgYW5pbWF0b3IgPSBPYmplY3RBbmltYXRvci5vZlByb3BlcnR5VmFsdWVzSG9sZGVyKAorICAgICAgICAgICAgICAgIHRhcmdldCwgcmFkaXVzUmVhcHBlYXIpLnNldER1cmF0aW9uKHRvdGFsRHVyYXRpb24pOworICAgICAgICBhbmltYXRvci5hZGRVcGRhdGVMaXN0ZW5lcih1cGRhdGVMaXN0ZW5lcik7CisgICAgICAgIHJldHVybiBhbmltYXRvcjsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RBbmltYXRvciBnZXRGYWRlT3V0QW5pbWF0b3IoT2JqZWN0IHRhcmdldCwgaW50IHN0YXJ0QWxwaGEsIGludCBlbmRBbHBoYSwKKyAgICAgICAgICAgICAgICBJbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIgdXBkYXRlTGlzdGVuZXIpIHsKKyAgICAgICAgaW50IGR1cmF0aW9uID0gNTAwOworICAgICAgICBPYmplY3RBbmltYXRvciBhbmltYXRvciA9IE9iamVjdEFuaW1hdG9yLm9mSW50KHRhcmdldCwgImFscGhhIiwgc3RhcnRBbHBoYSwgZW5kQWxwaGEpOworICAgICAgICBhbmltYXRvci5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgICAgIGFuaW1hdG9yLmFkZFVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUxpc3RlbmVyKTsKKworICAgICAgICByZXR1cm4gYW5pbWF0b3I7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0QW5pbWF0b3IgZ2V0RmFkZUluQW5pbWF0b3IoT2JqZWN0IHRhcmdldCwgaW50IHN0YXJ0QWxwaGEsIGludCBlbmRBbHBoYSwKKyAgICAgICAgICAgICAgICBJbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIgdXBkYXRlTGlzdGVuZXIpIHsKKyAgICAgICAgS2V5ZnJhbWUga2YwLCBrZjEsIGtmMjsKKyAgICAgICAgaW50IGR1cmF0aW9uID0gNTAwOworCisgICAgICAgIC8vIFNldCB1cCBhbmltYXRvciBmb3IgcmVhcHBlYXJpbmcuCisgICAgICAgIGZsb2F0IGRlbGF5TXVsdGlwbGllciA9IDAuMjVmOworICAgICAgICBmbG9hdCB0cmFuc2l0aW9uRHVyYXRpb25NdWx0aXBsaWVyID0gMWY7CisgICAgICAgIGZsb2F0IHRvdGFsRHVyYXRpb25NdWx0aXBsaWVyID0gdHJhbnNpdGlvbkR1cmF0aW9uTXVsdGlwbGllciArIGRlbGF5TXVsdGlwbGllcjsKKyAgICAgICAgaW50IHRvdGFsRHVyYXRpb24gPSAoaW50KSAoZHVyYXRpb24gKiB0b3RhbER1cmF0aW9uTXVsdGlwbGllcik7CisgICAgICAgIGZsb2F0IGRlbGF5UG9pbnQgPSAoZGVsYXlNdWx0aXBsaWVyICogZHVyYXRpb24pIC8gdG90YWxEdXJhdGlvbjsKKworICAgICAgICBrZjAgPSBLZXlmcmFtZS5vZkludCgwZiwgc3RhcnRBbHBoYSk7CisgICAgICAgIGtmMSA9IEtleWZyYW1lLm9mSW50KGRlbGF5UG9pbnQsIHN0YXJ0QWxwaGEpOworICAgICAgICBrZjIgPSBLZXlmcmFtZS5vZkludCgxZiwgZW5kQWxwaGEpOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBmYWRlSW4gPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZktleWZyYW1lKCJhbHBoYSIsIGtmMCwga2YxLCBrZjIpOworCisgICAgICAgIE9iamVjdEFuaW1hdG9yIGFuaW1hdG9yID0gT2JqZWN0QW5pbWF0b3Iub2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcigKKyAgICAgICAgICAgICAgICB0YXJnZXQsIGZhZGVJbikuc2V0RHVyYXRpb24odG90YWxEdXJhdGlvbik7CisgICAgICAgIGFuaW1hdG9yLmFkZFVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUxpc3RlbmVyKTsKKyAgICAgICAgcmV0dXJuIGFuaW1hdG9yOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyIGltcGxlbWVudHMgVmFsdWVBbmltYXRvci5BbmltYXRvclVwZGF0ZUxpc3RlbmVyIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uVXBkYXRlKFZhbHVlQW5pbWF0b3IgYW5pbWF0aW9uKSB7CisgICAgICAgICAgICBSYWRpYWxUaW1lUGlja2VyVmlldy50aGlzLmludmFsaWRhdGUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzdGFydEhvdXJzVG9NaW51dGVzQW5pbWF0aW9uKCkgeworICAgICAgICBpZiAobUhvdXJzVG9NaW51dGVzQW5pbXMuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIG1Ib3Vyc1RvTWludXRlc0FuaW1zLmFkZChnZXRSYWRpdXNEaXNhcHBlYXJBbmltYXRvcih0aGlzLAorICAgICAgICAgICAgICAgICAgICAiYW5pbWF0aW9uUmFkaXVzTXVsdGlwbGllckhvdXJzIiwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25NaWRSYWRpdXNNdWx0aXBsaWVyLCBtVHJhbnNpdGlvbkVuZFJhZGl1c011bHRpcGxpZXIpKTsKKyAgICAgICAgICAgIG1Ib3Vyc1RvTWludXRlc0FuaW1zLmFkZChnZXRGYWRlT3V0QW5pbWF0b3IobVBhaW50W0hPVVJTXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfT1BBUVVFLCBBTFBIQV9UUkFOU1BBUkVOVCwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcikpOworICAgICAgICAgICAgbUhvdXJzVG9NaW51dGVzQW5pbXMuYWRkKGdldEZhZGVPdXRBbmltYXRvcihtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfQ0lSQ0xFXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfU0VMRUNUT1IsIEFMUEhBX1RSQU5TUEFSRU5ULCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgICAgICBtSG91cnNUb01pbnV0ZXNBbmltcy5hZGQoZ2V0RmFkZU91dEFuaW1hdG9yKG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9ET1RdLAorICAgICAgICAgICAgICAgICAgICBBTFBIQV9PUEFRVUUsIEFMUEhBX1RSQU5TUEFSRU5ULCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgICAgICBtSG91cnNUb01pbnV0ZXNBbmltcy5hZGQoZ2V0RmFkZU91dEFuaW1hdG9yKG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9MSU5FXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfU0VMRUNUT1IsIEFMUEhBX1RSQU5TUEFSRU5ULCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisKKyAgICAgICAgICAgIG1Ib3Vyc1RvTWludXRlc0FuaW1zLmFkZChnZXRSYWRpdXNSZWFwcGVhckFuaW1hdG9yKHRoaXMsCisgICAgICAgICAgICAgICAgICAgICJhbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyTWludXRlcyIsIG1JbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2l0aW9uTWlkUmFkaXVzTXVsdGlwbGllciwgbVRyYW5zaXRpb25FbmRSYWRpdXNNdWx0aXBsaWVyKSk7CisgICAgICAgICAgICBtSG91cnNUb01pbnV0ZXNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50W01JTlVURVNdLAorICAgICAgICAgICAgICAgICAgICBBTFBIQV9UUkFOU1BBUkVOVCwgQUxQSEFfT1BBUVVFLCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgICAgICBtSG91cnNUb01pbnV0ZXNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfQ0lSQ0xFXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfVFJBTlNQQVJFTlQsIEFMUEhBX1NFTEVDVE9SLCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgICAgICBtSG91cnNUb01pbnV0ZXNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfRE9UXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfVFJBTlNQQVJFTlQsIEFMUEhBX09QQVFVRSwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcikpOworICAgICAgICAgICAgbUhvdXJzVG9NaW51dGVzQW5pbXMuYWRkKGdldEZhZGVJbkFuaW1hdG9yKG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0xJTkVdLAorICAgICAgICAgICAgICAgICAgICBBTFBIQV9UUkFOU1BBUkVOVCwgQUxQSEFfU0VMRUNUT1IsIG1JbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVHJhbnNpdGlvbiAhPSBudWxsICYmIG1UcmFuc2l0aW9uLmlzUnVubmluZygpKSB7CisgICAgICAgICAgICBtVHJhbnNpdGlvbi5lbmQoKTsKKyAgICAgICAgfQorICAgICAgICBtVHJhbnNpdGlvbiA9IG5ldyBBbmltYXRvclNldCgpOworICAgICAgICBtVHJhbnNpdGlvbi5wbGF5VG9nZXRoZXIobUhvdXJzVG9NaW51dGVzQW5pbXMpOworICAgICAgICBtVHJhbnNpdGlvbi5zdGFydCgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzdGFydE1pbnV0ZXNUb0hvdXJzQW5pbWF0aW9uKCkgeworICAgICAgICBpZiAobU1pbnV0ZVRvSG91cnNBbmltcy5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgbU1pbnV0ZVRvSG91cnNBbmltcy5hZGQoZ2V0UmFkaXVzRGlzYXBwZWFyQW5pbWF0b3IodGhpcywKKyAgICAgICAgICAgICAgICAgICAgImFuaW1hdGlvblJhZGl1c011bHRpcGxpZXJNaW51dGVzIiwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25NaWRSYWRpdXNNdWx0aXBsaWVyLCBtVHJhbnNpdGlvbkVuZFJhZGl1c011bHRpcGxpZXIpKTsKKyAgICAgICAgICAgIG1NaW51dGVUb0hvdXJzQW5pbXMuYWRkKGdldEZhZGVPdXRBbmltYXRvcihtUGFpbnRbTUlOVVRFU10sCisgICAgICAgICAgICAgICAgICAgIEFMUEhBX09QQVFVRSwgQUxQSEFfVFJBTlNQQVJFTlQsIG1JbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIpKTsKKyAgICAgICAgICAgIG1NaW51dGVUb0hvdXJzQW5pbXMuYWRkKGdldEZhZGVPdXRBbmltYXRvcihtUGFpbnRTZWxlY3RvcltNSU5VVEVTXVtTRUxFQ1RPUl9DSVJDTEVdLAorICAgICAgICAgICAgICAgICAgICBBTFBIQV9TRUxFQ1RPUiwgQUxQSEFfVFJBTlNQQVJFTlQsIG1JbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIpKTsKKyAgICAgICAgICAgIG1NaW51dGVUb0hvdXJzQW5pbXMuYWRkKGdldEZhZGVPdXRBbmltYXRvcihtUGFpbnRTZWxlY3RvcltNSU5VVEVTXVtTRUxFQ1RPUl9ET1RdLAorICAgICAgICAgICAgICAgICAgICBBTFBIQV9PUEFRVUUsIEFMUEhBX1RSQU5TUEFSRU5ULCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgICAgICBtTWludXRlVG9Ib3Vyc0FuaW1zLmFkZChnZXRGYWRlT3V0QW5pbWF0b3IobVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfTElORV0sCisgICAgICAgICAgICAgICAgICAgIEFMUEhBX1NFTEVDVE9SLCBBTFBIQV9UUkFOU1BBUkVOVCwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcikpOworCisgICAgICAgICAgICBtTWludXRlVG9Ib3Vyc0FuaW1zLmFkZChnZXRSYWRpdXNSZWFwcGVhckFuaW1hdG9yKHRoaXMsCisgICAgICAgICAgICAgICAgICAgICJhbmltYXRpb25SYWRpdXNNdWx0aXBsaWVySG91cnMiLCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICBtVHJhbnNpdGlvbk1pZFJhZGl1c011bHRpcGxpZXIsIG1UcmFuc2l0aW9uRW5kUmFkaXVzTXVsdGlwbGllcikpOworICAgICAgICAgICAgbU1pbnV0ZVRvSG91cnNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50W0hPVVJTXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfVFJBTlNQQVJFTlQsIEFMUEhBX09QQVFVRSwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcikpOworICAgICAgICAgICAgbU1pbnV0ZVRvSG91cnNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0NJUkNMRV0sCisgICAgICAgICAgICAgICAgICAgIEFMUEhBX1RSQU5TUEFSRU5ULCBBTFBIQV9TRUxFQ1RPUiwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcikpOworICAgICAgICAgICAgbU1pbnV0ZVRvSG91cnNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0RPVF0sCisgICAgICAgICAgICAgICAgICAgIEFMUEhBX1RSQU5TUEFSRU5ULCBBTFBIQV9PUEFRVUUsIG1JbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIpKTsKKyAgICAgICAgICAgIG1NaW51dGVUb0hvdXJzQW5pbXMuYWRkKGdldEZhZGVJbkFuaW1hdG9yKG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9MSU5FXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfVFJBTlNQQVJFTlQsIEFMUEhBX1NFTEVDVE9SLCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVRyYW5zaXRpb24gIT0gbnVsbCAmJiBtVHJhbnNpdGlvbi5pc1J1bm5pbmcoKSkgeworICAgICAgICAgICAgbVRyYW5zaXRpb24uZW5kKCk7CisgICAgICAgIH0KKyAgICAgICAgbVRyYW5zaXRpb24gPSBuZXcgQW5pbWF0b3JTZXQoKTsKKyAgICAgICAgbVRyYW5zaXRpb24ucGxheVRvZ2V0aGVyKG1NaW51dGVUb0hvdXJzQW5pbXMpOworICAgICAgICBtVHJhbnNpdGlvbi5zdGFydCgpOworICAgIH0KKworICAgIHByaXZhdGUgaW50IGdldERlZ3JlZXNGcm9tWFkoZmxvYXQgeCwgZmxvYXQgeSkgeworICAgICAgICBmaW5hbCBkb3VibGUgaHlwb3RlbnVzZSA9IE1hdGguc3FydCgKKyAgICAgICAgICAgICAgICAoeSAtIG1ZQ2VudGVyKSAqICh5IC0gbVlDZW50ZXIpICsgKHggLSBtWENlbnRlcikgKiAoeCAtIG1YQ2VudGVyKSk7CisKKyAgICAgICAgLy8gQmFzaWMgY2hlY2sgaWYgd2UncmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIGRpc2sKKyAgICAgICAgaWYgKGh5cG90ZW51c2UgPiBtQ2lyY2xlUmFkaXVzW0hPVVJTXSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8vIENoZWNrCisgICAgICAgIGlmIChtSXMyNEhvdXJNb2RlICYmIG1TaG93SG91cnMpIHsKKyAgICAgICAgICAgIGlmIChoeXBvdGVudXNlID49IG1NaW5IeXBvdGVudXNlRm9ySW5uZXJOdW1iZXIKKyAgICAgICAgICAgICAgICAgICAgJiYgaHlwb3RlbnVzZSA8PSBtSGFsZndheUh5cG90ZW51c2VQb2ludCkgeworICAgICAgICAgICAgICAgIG1Jc09uSW5uZXJDaXJjbGUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChoeXBvdGVudXNlIDw9IG1NYXhIeXBvdGVudXNlRm9yT3V0ZXJOdW1iZXIKKyAgICAgICAgICAgICAgICAgICAgJiYgaHlwb3RlbnVzZSA+PSBtSGFsZndheUh5cG90ZW51c2VQb2ludCkgeworICAgICAgICAgICAgICAgIG1Jc09uSW5uZXJDaXJjbGUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmluYWwgaW50IGluZGV4ID0gIChtU2hvd0hvdXJzKSA/IEhPVVJTIDogTUlOVVRFUzsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IGxlbmd0aCA9IChtQ2lyY2xlUmFkaXVzW2luZGV4XSAqIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltpbmRleF0pOworICAgICAgICAgICAgZmluYWwgaW50IGRpc3RhbmNlVG9OdW1iZXIgPSAoaW50KSBNYXRoLmFicyhoeXBvdGVudXNlIC0gbGVuZ3RoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBtYXhBbGxvd2VkRGlzdGFuY2UgPQorICAgICAgICAgICAgICAgICAgICAoaW50KSAobUNpcmNsZVJhZGl1c1tpbmRleF0gKiAoMSAtIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltpbmRleF0pKTsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZVRvTnVtYmVyID4gbWF4QWxsb3dlZERpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgZmxvYXQgb3Bwb3NpdGUgPSBNYXRoLmFicyh5IC0gbVlDZW50ZXIpOworICAgICAgICBkb3VibGUgZGVncmVlcyA9IE1hdGgudG9EZWdyZWVzKE1hdGguYXNpbihvcHBvc2l0ZSAvIGh5cG90ZW51c2UpKTsKKworICAgICAgICAvLyBOb3cgd2UgaGF2ZSB0byB0cmFuc2xhdGUgdG8gdGhlIGNvcnJlY3QgcXVhZHJhbnQuCisgICAgICAgIGJvb2xlYW4gcmlnaHRTaWRlID0gKHggPiBtWENlbnRlcik7CisgICAgICAgIGJvb2xlYW4gdG9wU2lkZSA9ICh5IDwgbVlDZW50ZXIpOworICAgICAgICBpZiAocmlnaHRTaWRlICYmIHRvcFNpZGUpIHsKKyAgICAgICAgICAgIGRlZ3JlZXMgPSA5MCAtIGRlZ3JlZXM7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHRTaWRlICYmICF0b3BTaWRlKSB7CisgICAgICAgICAgICBkZWdyZWVzID0gOTAgKyBkZWdyZWVzOworICAgICAgICB9IGVsc2UgaWYgKCFyaWdodFNpZGUgJiYgIXRvcFNpZGUpIHsKKyAgICAgICAgICAgIGRlZ3JlZXMgPSAyNzAgLSBkZWdyZWVzOworICAgICAgICB9IGVsc2UgaWYgKCFyaWdodFNpZGUgJiYgdG9wU2lkZSkgeworICAgICAgICAgICAgZGVncmVlcyA9IDI3MCArIGRlZ3JlZXM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChpbnQpIGRlZ3JlZXM7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgZ2V0SXNUb3VjaGluZ0FtT3JQbShmbG9hdCB4LCBmbG9hdCB5KSB7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMYXlvdXRSdGwgPSBpc0xheW91dFJ0bCgpOworICAgICAgICBpbnQgc3F1YXJlZFlEaXN0YW5jZSA9IChpbnQpICgoeSAtIG1BbVBtWUNlbnRlcikgKiAoeSAtIG1BbVBtWUNlbnRlcikpOworCisgICAgICAgIGludCBkaXN0YW5jZVRvQW1DZW50ZXIgPSAoaW50KSBNYXRoLnNxcnQoCisgICAgICAgICAgICAgICAgKHggLSBtTGVmdEluZGljYXRvclhDZW50ZXIpICogKHggLSBtTGVmdEluZGljYXRvclhDZW50ZXIpICsgc3F1YXJlZFlEaXN0YW5jZSk7CisgICAgICAgIGlmIChkaXN0YW5jZVRvQW1DZW50ZXIgPD0gbUFtUG1DaXJjbGVSYWRpdXMpIHsKKyAgICAgICAgICAgIHJldHVybiAoaXNMYXlvdXRSdGwgPyBQTSA6IEFNKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBkaXN0YW5jZVRvUG1DZW50ZXIgPSAoaW50KSBNYXRoLnNxcnQoCisgICAgICAgICAgICAgICAgKHggLSBtUmlnaHRJbmRpY2F0b3JYQ2VudGVyKSAqICh4IC0gbVJpZ2h0SW5kaWNhdG9yWENlbnRlcikgKyBzcXVhcmVkWURpc3RhbmNlKTsKKyAgICAgICAgaWYgKGRpc3RhbmNlVG9QbUNlbnRlciA8PSBtQW1QbUNpcmNsZVJhZGl1cykgeworICAgICAgICAgICAgcmV0dXJuIChpc0xheW91dFJ0bCA/IEFNIDogUE0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gTmVpdGhlciB3YXMgY2xvc2UgZW5vdWdoLgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaChWaWV3IHYsIE1vdGlvbkV2ZW50IGV2ZW50KSB7CisgICAgICAgIGlmKCFtSW5wdXRFbmFibGVkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGZsb2F0IGV2ZW50WCA9IGV2ZW50LmdldFgoKTsKKyAgICAgICAgZmluYWwgZmxvYXQgZXZlbnRZID0gZXZlbnQuZ2V0WSgpOworCisgICAgICAgIGludCBkZWdyZWVzOworICAgICAgICBpbnQgc25hcERlZ3JlZXM7CisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisKKyAgICAgICAgc3dpdGNoKGV2ZW50LmdldEFjdGlvbigpKSB7CisgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9ET1dOOgorICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRToKKyAgICAgICAgICAgICAgICBtQW1PclBtUHJlc3NlZCA9IGdldElzVG91Y2hpbmdBbU9yUG0oZXZlbnRYLCBldmVudFkpOworICAgICAgICAgICAgICAgIGlmIChtQW1PclBtUHJlc3NlZCAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZ3JlZXMgPSBnZXREZWdyZWVzRnJvbVhZKGV2ZW50WCwgZXZlbnRZKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlZ3JlZXMgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBEZWdyZWVzID0gKG1TaG93SG91cnMgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwT25seTMwcyhkZWdyZWVzLCAwKSA6IHNuYXBQcmVmZXIzMHMoZGVncmVlcykpICUgMzYwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1TaG93SG91cnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0aW9uRGVncmVlc1tIT1VSU10gPSBzbmFwRGVncmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0aW9uRGVncmVlc1tIT1VSU19JTk5FUl0gPSBzbmFwRGVncmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGlvbkRlZ3JlZXNbTUlOVVRFU10gPSBzbmFwRGVncmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1IYXB0aWNGZWVkYmFjayhIYXB0aWNGZWVkYmFja0NvbnN0YW50cy5DTE9DS19USUNLKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU2hvd0hvdXJzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MaXN0ZW5lci5vblZhbHVlU2VsZWN0ZWQoSE9VUlMsIGdldEN1cnJlbnRIb3VyKCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxpc3RlbmVyLm9uVmFsdWVTZWxlY3RlZChNSU5VVEVTLCBnZXRDdXJyZW50TWludXRlKCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDoKKyAgICAgICAgICAgICAgICBtQW1PclBtUHJlc3NlZCA9IGdldElzVG91Y2hpbmdBbU9yUG0oZXZlbnRYLCBldmVudFkpOworICAgICAgICAgICAgICAgIGlmIChtQW1PclBtUHJlc3NlZCAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobUFtT3JQbSAhPSBtQW1PclBtUHJlc3NlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dhcEFtUG0oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtQW1PclBtUHJlc3NlZCA9IC0xOworICAgICAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1MaXN0ZW5lci5vblZhbHVlU2VsZWN0ZWQoQU1QTSwgZ2V0Q3VycmVudEhvdXIoKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWdyZWVzID0gZ2V0RGVncmVlc0Zyb21YWShldmVudFgsIGV2ZW50WSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWdyZWVzICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzbmFwRGVncmVlcyA9IChtU2hvd0hvdXJzID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcE9ubHkzMHMoZGVncmVlcywgMCkgOiBzbmFwUHJlZmVyMzBzKGRlZ3JlZXMpKSAlIDM2MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU2hvd0hvdXJzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGlvbkRlZ3JlZXNbSE9VUlNdID0gc25hcERlZ3JlZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGlvbkRlZ3JlZXNbSE9VUlNfSU5ORVJdID0gc25hcERlZ3JlZXM7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3Rpb25EZWdyZWVzW01JTlVURVNdID0gc25hcERlZ3JlZXM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVNob3dIb3VycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGlzdGVuZXIub25WYWx1ZVNlbGVjdGVkKEhPVVJTLCBnZXRDdXJyZW50SG91cigpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxpc3RlbmVyLm9uVmFsdWVTZWxlY3RlZChNSU5VVEVTLCBnZXRDdXJyZW50TWludXRlKCksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIE5lY2Vzc2FyeSBmb3IgYWNjZXNzaWJpbGl0eSwgdG8gZW5zdXJlIHdlIHN1cHBvcnQgInNjcm9sbGluZyIgZm9yd2FyZCBhbmQgYmFja3dhcmQKKyAgICAgKiBpbiB0aGUgY2lyY2xlLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gaW5mbykgeworICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oaW5mbyk7CisgICAgICAgIGluZm8uYWRkQWN0aW9uKEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fU0NST0xMX0ZPUldBUkQpOworICAgICAgICBpbmZvLmFkZEFjdGlvbihBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX1NDUk9MTF9CQUNLV0FSRCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQW5ub3VuY2UgdGhlIGN1cnJlbnRseS1zZWxlY3RlZCB0aW1lIHdoZW4gbGF1bmNoZWQuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hQb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgaWYgKGV2ZW50LmdldEV2ZW50VHlwZSgpID09IEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1dJTkRPV19TVEFURV9DSEFOR0VEKSB7CisgICAgICAgICAgICAvLyBDbGVhciB0aGUgZXZlbnQncyBjdXJyZW50IHRleHQgc28gdGhhdCBvbmx5IHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSBzcG9rZW4uCisgICAgICAgICAgICBldmVudC5nZXRUZXh0KCkuY2xlYXIoKTsKKyAgICAgICAgICAgIFRpbWUgdGltZSA9IG5ldyBUaW1lKCk7CisgICAgICAgICAgICB0aW1lLmhvdXIgPSBnZXRDdXJyZW50SG91cigpOworICAgICAgICAgICAgdGltZS5taW51dGUgPSBnZXRDdXJyZW50TWludXRlKCk7CisgICAgICAgICAgICBsb25nIG1pbGxpcyA9IHRpbWUubm9ybWFsaXplKHRydWUpOworICAgICAgICAgICAgaW50IGZsYWdzID0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX1RJTUU7CisgICAgICAgICAgICBpZiAobUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgICAgIGZsYWdzIHw9IERhdGVVdGlscy5GT1JNQVRfMjRIT1VSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIHRpbWVTdHJpbmcgPSBEYXRlVXRpbHMuZm9ybWF0RGF0ZVRpbWUoZ2V0Q29udGV4dCgpLCBtaWxsaXMsIGZsYWdzKTsKKyAgICAgICAgICAgIGV2ZW50LmdldFRleHQoKS5hZGQodGltZVN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VwZXIuZGlzcGF0Y2hQb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogV2hlbiBzY3JvbGwgZm9yd2FyZC9iYWNrd2FyZCBldmVudHMgYXJlIHJlY2VpdmVkLCBqdW1wIHRoZSB0aW1lIHRvIHRoZSBoaWdoZXIvbG93ZXIKKyAgICAgKiBkaXNjcmV0ZSwgdmlzaWJsZSB2YWx1ZSBvbiB0aGUgY2lyY2xlLgorICAgICAqLworICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUFjY2Vzc2liaWxpdHlBY3Rpb24oaW50IGFjdGlvbiwgQnVuZGxlIGFyZ3VtZW50cykgeworICAgICAgICBpZiAoc3VwZXIucGVyZm9ybUFjY2Vzc2liaWxpdHlBY3Rpb24oYWN0aW9uLCBhcmd1bWVudHMpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBjaGFuZ2VNdWx0aXBsaWVyID0gMDsKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX1NDUk9MTF9GT1JXQVJEKSB7CisgICAgICAgICAgICBjaGFuZ2VNdWx0aXBsaWVyID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9TQ1JPTExfQkFDS1dBUkQpIHsKKyAgICAgICAgICAgIGNoYW5nZU11bHRpcGxpZXIgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hhbmdlTXVsdGlwbGllciAhPSAwKSB7CisgICAgICAgICAgICBpbnQgdmFsdWUgPSAwOworICAgICAgICAgICAgaW50IHN0ZXBTaXplID0gMDsKKyAgICAgICAgICAgIGlmIChtU2hvd0hvdXJzKSB7CisgICAgICAgICAgICAgICAgc3RlcFNpemUgPSBERUdSRUVTX0ZPUl9PTkVfSE9VUjsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldEN1cnJlbnRIb3VyKCkgJSAxMjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RlcFNpemUgPSBERUdSRUVTX0ZPUl9PTkVfTUlOVVRFOworICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0Q3VycmVudE1pbnV0ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgZGVncmVlcyA9IHZhbHVlICogc3RlcFNpemU7CisgICAgICAgICAgICBkZWdyZWVzID0gc25hcE9ubHkzMHMoZGVncmVlcywgY2hhbmdlTXVsdGlwbGllcik7CisgICAgICAgICAgICB2YWx1ZSA9IGRlZ3JlZXMgLyBzdGVwU2l6ZTsKKyAgICAgICAgICAgIGludCBtYXhWYWx1ZSA9IDA7CisgICAgICAgICAgICBpbnQgbWluVmFsdWUgPSAwOworICAgICAgICAgICAgaWYgKG1TaG93SG91cnMpIHsKKyAgICAgICAgICAgICAgICBpZiAobUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9IDIzOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1heFZhbHVlID0gMTI7CisgICAgICAgICAgICAgICAgICAgIG1pblZhbHVlID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1heFZhbHVlID0gNTU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUgPiBtYXhWYWx1ZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHdlIHNjcm9sbGVkIGZvcndhcmQgcGFzdCB0aGUgaGlnaGVzdCBudW1iZXIsIHdyYXAgYXJvdW5kIHRvIHRoZSBsb3dlc3QuCisgICAgICAgICAgICAgICAgdmFsdWUgPSBtaW5WYWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCBtaW5WYWx1ZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHdlIHNjcm9sbGVkIGJhY2t3YXJkIHBhc3QgdGhlIGxvd2VzdCBudW1iZXIsIHdyYXAgYXJvdW5kIHRvIHRoZSBoaWdoZXN0LgorICAgICAgICAgICAgICAgIHZhbHVlID0gbWF4VmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVNob3dIb3VycykgeworICAgICAgICAgICAgICAgIHNldEN1cnJlbnRIb3VyKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbUxpc3RlbmVyLm9uVmFsdWVTZWxlY3RlZChIT1VSUywgdmFsdWUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNldEN1cnJlbnRNaW51dGUodmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChtTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBtTGlzdGVuZXIub25WYWx1ZVNlbGVjdGVkKE1JTlVURVMsIHZhbHVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SW5wdXRFbmFibGVkKGJvb2xlYW4gaW5wdXRFbmFibGVkKSB7CisgICAgICAgIG1JbnB1dEVuYWJsZWQgPSBpbnB1dEVuYWJsZWQ7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmFkaW9CdXR0b24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYWRpb0J1dHRvbi5qYXZhCmluZGV4IGEwZmVmN2QuLmFmYzQ4MzAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYWRpb0J1dHRvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYWRpb0J1dHRvbi5qYXZhCkBAIC0yMSw4ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7Ci0KIAogLyoqCiAgKiA8cD4KQEAgLTU5LDggKzU3LDEyIEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5yYWRpb0J1dHRvblN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgUmFkaW9CdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBSYWRpb0J1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBSYWRpb0J1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYXRpbmdCYXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYXRpbmdCYXIuamF2YQppbmRleCA0ZDNjNTZjLi44MmI0OTBlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmF0aW5nQmFyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1JhdGluZ0Jhci5qYXZhCkBAIC04MiwxMSArODIsMTUgQEAKICAgICAKICAgICBwcml2YXRlIE9uUmF0aW5nQmFyQ2hhbmdlTGlzdGVuZXIgbU9uUmF0aW5nQmFyQ2hhbmdlTGlzdGVuZXI7CiAgICAgCi0gICAgcHVibGljIFJhdGluZ0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLlJhdGluZ0JhciwKLSAgICAgICAgICAgICAgICBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIFJhdGluZ0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBSYXRpbmdCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5SYXRpbmdCYXIsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBmaW5hbCBpbnQgbnVtU3RhcnMgPSBhLmdldEludChSLnN0eWxlYWJsZS5SYXRpbmdCYXJfbnVtU3RhcnMsIG1OdW1TdGFycyk7CiAgICAgICAgIHNldElzSW5kaWNhdG9yKGEuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5SYXRpbmdCYXJfaXNJbmRpY2F0b3IsICFtSXNVc2VyU2Vla2FibGUpKTsKICAgICAgICAgZmluYWwgZmxvYXQgcmF0aW5nID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5SYXRpbmdCYXJfcmF0aW5nLCAtMSk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmVsYXRpdmVMYXlvdXQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SZWxhdGl2ZUxheW91dC5qYXZhCmluZGV4IGUwM2U4M2QuLmJlYmU2N2YgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SZWxhdGl2ZUxheW91dC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SZWxhdGl2ZUxheW91dC5qYXZhCkBAIC0yMjgsMjQgKzIyOCwyNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1dJRFRIID0gMHgwMDAxMDAwMDsKIAogICAgIHB1YmxpYyBSZWxhdGl2ZUxheW91dChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0gICAgICAgIHF1ZXJ5Q29tcGF0aWJpbGl0eU1vZGVzKGNvbnRleHQpOworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KIAogICAgIHB1YmxpYyBSZWxhdGl2ZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgIGluaXRGcm9tQXR0cmlidXRlcyhjb250ZXh0LCBhdHRycyk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOworICAgIH0KKworICAgIHB1YmxpYyBSZWxhdGl2ZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBSZWxhdGl2ZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKyAgICAgICAgaW5pdEZyb21BdHRyaWJ1dGVzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgcXVlcnlDb21wYXRpYmlsaXR5TW9kZXMoY29udGV4dCk7CiAgICAgfQogCi0gICAgcHVibGljIFJlbGF0aXZlTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKLSAgICAgICAgaW5pdEZyb21BdHRyaWJ1dGVzKGNvbnRleHQsIGF0dHJzKTsKLSAgICAgICAgcXVlcnlDb21wYXRpYmlsaXR5TW9kZXMoY29udGV4dCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRGcm9tQXR0cmlidXRlcyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLlJlbGF0aXZlTGF5b3V0KTsKKyAgICBwcml2YXRlIHZvaWQgaW5pdEZyb21BdHRyaWJ1dGVzKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIFIuc3R5bGVhYmxlLlJlbGF0aXZlTGF5b3V0LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgbUlnbm9yZUdyYXZpdHkgPSBhLmdldFJlc291cmNlSWQoUi5zdHlsZWFibGUuUmVsYXRpdmVMYXlvdXRfaWdub3JlR3Jhdml0eSwgVmlldy5OT19JRCk7CiAgICAgICAgIG1HcmF2aXR5ID0gYS5nZXRJbnQoUi5zdHlsZWFibGUuUmVsYXRpdmVMYXlvdXRfZ3Jhdml0eSwgbUdyYXZpdHkpOwogICAgICAgICBhLnJlY3ljbGUoKTsKQEAgLTczOCwxOSArNzQxLDMwIEBACiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q2hpbGRNZWFzdXJlU3BlYyhpbnQgY2hpbGRTdGFydCwgaW50IGNoaWxkRW5kLAogICAgICAgICAgICAgaW50IGNoaWxkU2l6ZSwgaW50IHN0YXJ0TWFyZ2luLCBpbnQgZW5kTWFyZ2luLCBpbnQgc3RhcnRQYWRkaW5nLAogICAgICAgICAgICAgaW50IGVuZFBhZGRpbmcsIGludCBteVNpemUpIHsKLSAgICAgICAgaWYgKG15U2l6ZSA8IDAgJiYgIW1BbGxvd0Jyb2tlbk1lYXN1cmVTcGVjcykgewotICAgICAgICAgICAgaWYgKGNoaWxkU2l6ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhjaGlsZFNpemUsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gTmVnYXRpdmUgdmFsdWVzIGluIGEgbXlTaXplL215V2lkdGgvbXlXaWR0aCB2YWx1ZSBpbiBSZWxhdGl2ZUxheW91dCBtZWFzdXJlbWVudAotICAgICAgICAgICAgLy8gaXMgY29kZSBmb3IsICJ3ZSBnb3QgYW4gdW5zcGVjaWZpZWQgbW9kZSBpbiB0aGUgUmVsYXRpdmVMYXlvdXQncyBtZWFzdXJlc3BlYy4iCi0gICAgICAgICAgICAvLyBDYXJyeSBpdCBmb3J3YXJkLgotICAgICAgICAgICAgcmV0dXJuIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygwLCBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRCk7Ci0gICAgICAgIH0KLQogICAgICAgICBpbnQgY2hpbGRTcGVjTW9kZSA9IDA7CiAgICAgICAgIGludCBjaGlsZFNwZWNTaXplID0gMDsKIAorICAgICAgICAvLyBOZWdhdGl2ZSB2YWx1ZXMgaW4gYSBteVNpemUvbXlXaWR0aC9teVdpZHRoIHZhbHVlIGluIFJlbGF0aXZlTGF5b3V0CisgICAgICAgIC8vIG1lYXN1cmVtZW50IGlzIGNvZGUgZm9yLCAid2UgZ290IGFuIHVuc3BlY2lmaWVkIG1vZGUgaW4gdGhlCisgICAgICAgIC8vIFJlbGF0aXZlTGF5b3V0J3MgbWVhc3VyZSBzcGVjLiIKKyAgICAgICAgaWYgKG15U2l6ZSA8IDAgJiYgIW1BbGxvd0Jyb2tlbk1lYXN1cmVTcGVjcykgeworICAgICAgICAgICAgaWYgKGNoaWxkU2l6ZSA+PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGNoaWxkIHNwZWNpZmllZCBhbiBleGFjdCBzaXplLgorICAgICAgICAgICAgICAgIGNoaWxkU3BlY1NpemUgPSBjaGlsZFNpemU7CisgICAgICAgICAgICAgICAgY2hpbGRTcGVjTW9kZSA9IE1lYXN1cmVTcGVjLkVYQUNUTFk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkU3RhcnQgPj0gMCAmJiBjaGlsZEVuZCA+PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gQ29uc3RyYWludHMgZml4ZWQgYm90aCBlZGdlcywgc28gY2hpbGQgaGFzIGFuIGV4YWN0IHNpemUuCisgICAgICAgICAgICAgICAgY2hpbGRTcGVjU2l6ZSA9IE1hdGgubWF4KDAsIGNoaWxkRW5kIC0gY2hpbGRTdGFydCk7CisgICAgICAgICAgICAgICAgY2hpbGRTcGVjTW9kZSA9IE1lYXN1cmVTcGVjLkVYQUNUTFk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEFsbG93IHRoZSBjaGlsZCB0byBiZSB3aGF0ZXZlciBzaXplIGl0IHdhbnRzLgorICAgICAgICAgICAgICAgIGNoaWxkU3BlY1NpemUgPSAwOworICAgICAgICAgICAgICAgIGNoaWxkU3BlY01vZGUgPSBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhjaGlsZFNwZWNTaXplLCBjaGlsZFNwZWNNb2RlKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgc3RhcnQgYW5kIGVuZCBib3VuZHMuCiAgICAgICAgIGludCB0ZW1wU3RhcnQgPSBjaGlsZFN0YXJ0OwogICAgICAgICBpbnQgdGVtcEVuZCA9IGNoaWxkRW5kOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzQWRhcHRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzQWRhcHRlci5qYXZhCmluZGV4IDNmZjBjZWUuLmJiZTZmOWUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3c0FkYXB0ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3NBZGFwdGVyLmphdmEKQEAgLTMyLDcgKzMyLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKQEAgLTQ1LDcgKzQ0LDYgQEAKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5JUmVtb3RlVmlld3NBZGFwdGVyQ29ubmVjdGlvbjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuSVJlbW90ZVZpZXdzRmFjdG9yeTsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuTG9ja1BhdHRlcm5VdGlsczsKIAogLyoqCiAgKiBBbiBhZGFwdGVyIHRvIGEgUmVtb3RlVmlld3NTZXJ2aWNlIHdoaWNoIGZldGNoZXMgYW5kIGNhY2hlcyBSZW1vdGVWaWV3cwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1Njcm9sbFZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TY3JvbGxWaWV3LmphdmEKaW5kZXggNjY4MDM5My4uMDgyZDcyOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1Njcm9sbFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2Nyb2xsVmlldy5qYXZhCkBAIC0xNjIsMTIgKzE2MiwxNiBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuc2Nyb2xsVmlld1N0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgU2Nyb2xsVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFNjcm9sbFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2Nyb2xsVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgaW5pdFNjcm9sbFZpZXcoKTsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPQotICAgICAgICAgICAgY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TY3JvbGxWaWV3LCBkZWZTdHlsZSwgMCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU2Nyb2xsVmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgc2V0RmlsbFZpZXdwb3J0KGEuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5TY3JvbGxWaWV3X2ZpbGxWaWV3cG9ydCwgZmFsc2UpKTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1Njcm9sbGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2Nyb2xsZXIuamF2YQppbmRleCAzYmZkMzlkLi4xYTBjZTljIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2Nyb2xsZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2Nyb2xsZXIuamF2YQpAQCAtNjEsNiArNjEsOCBAQAogICogfTwvcHJlPgogICovCiBwdWJsaWMgY2xhc3MgU2Nyb2xsZXIgIHsKKyAgICBwcml2YXRlIGZpbmFsIEludGVycG9sYXRvciBtSW50ZXJwb2xhdG9yOworCiAgICAgcHJpdmF0ZSBpbnQgbU1vZGU7CiAKICAgICBwcml2YXRlIGludCBtU3RhcnRYOwpAQCAtODEsNyArODMsNiBAQAogICAgIHByaXZhdGUgZmxvYXQgbURlbHRhWDsKICAgICBwcml2YXRlIGZsb2F0IG1EZWx0YVk7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1GaW5pc2hlZDsKLSAgICBwcml2YXRlIEludGVycG9sYXRvciBtSW50ZXJwb2xhdG9yOwogICAgIHByaXZhdGUgYm9vbGVhbiBtRmx5d2hlZWw7CiAKICAgICBwcml2YXRlIGZsb2F0IG1WZWxvY2l0eTsKQEAgLTE0MiwxOCArMTQzLDggQEAKICAgICAgICAgICAgIFNQTElORV9USU1FW2ldID0gY29lZiAqICgoMS4wZiAtIHkpICogUDEgKyB5ICogUDIpICsgeSAqIHkgKiB5OwogICAgICAgICB9CiAgICAgICAgIFNQTElORV9QT1NJVElPTltOQl9TQU1QTEVTXSA9IFNQTElORV9USU1FW05CX1NBTVBMRVNdID0gMS4wZjsKLQotICAgICAgICAvLyBUaGlzIGNvbnRyb2xzIHRoZSB2aXNjb3VzIGZsdWlkIGVmZmVjdCAoaG93IG11Y2ggb2YgaXQpCi0gICAgICAgIHNWaXNjb3VzRmx1aWRTY2FsZSA9IDguMGY7Ci0gICAgICAgIC8vIG11c3QgYmUgc2V0IHRvIDEuMCAodXNlZCBpbiB2aXNjb3VzRmx1aWQoKSkKLSAgICAgICAgc1Zpc2NvdXNGbHVpZE5vcm1hbGl6ZSA9IDEuMGY7Ci0gICAgICAgIHNWaXNjb3VzRmx1aWROb3JtYWxpemUgPSAxLjBmIC8gdmlzY291c0ZsdWlkKDEuMGYpOwotCiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgc1Zpc2NvdXNGbHVpZFNjYWxlOwotICAgIHByaXZhdGUgc3RhdGljIGZsb2F0IHNWaXNjb3VzRmx1aWROb3JtYWxpemU7Ci0KICAgICAvKioKICAgICAgKiBDcmVhdGUgYSBTY3JvbGxlciB3aXRoIHRoZSBkZWZhdWx0IGR1cmF0aW9uIGFuZCBpbnRlcnBvbGF0b3IuCiAgICAgICovCkBAIC0xNzgsNyArMTY5LDExIEBACiAgICAgICovCiAgICAgcHVibGljIFNjcm9sbGVyKENvbnRleHQgY29udGV4dCwgSW50ZXJwb2xhdG9yIGludGVycG9sYXRvciwgYm9vbGVhbiBmbHl3aGVlbCkgewogICAgICAgICBtRmluaXNoZWQgPSB0cnVlOwotICAgICAgICBtSW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdG9yOworICAgICAgICBpZiAoaW50ZXJwb2xhdG9yID09IG51bGwpIHsKKyAgICAgICAgICAgIG1JbnRlcnBvbGF0b3IgPSBuZXcgVmlzY291c0ZsdWlkSW50ZXJwb2xhdG9yKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtSW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdG9yOworICAgICAgICB9CiAgICAgICAgIG1QcGkgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eSAqIDE2MC4wZjsKICAgICAgICAgbURlY2VsZXJhdGlvbiA9IGNvbXB1dGVEZWNlbGVyYXRpb24oVmlld0NvbmZpZ3VyYXRpb24uZ2V0U2Nyb2xsRnJpY3Rpb24oKSk7CiAgICAgICAgIG1GbHl3aGVlbCA9IGZseXdoZWVsOwpAQCAtMzEyLDEzICszMDcsNyBAQAogICAgICAgICBpZiAodGltZVBhc3NlZCA8IG1EdXJhdGlvbikgewogICAgICAgICAgICAgc3dpdGNoIChtTW9kZSkgewogICAgICAgICAgICAgY2FzZSBTQ1JPTExfTU9ERToKLSAgICAgICAgICAgICAgICBmbG9hdCB4ID0gdGltZVBhc3NlZCAqIG1EdXJhdGlvblJlY2lwcm9jYWw7Ci0gICAgCi0gICAgICAgICAgICAgICAgaWYgKG1JbnRlcnBvbGF0b3IgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgeCA9IHZpc2NvdXNGbHVpZCh4KTsgCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB4ID0gbUludGVycG9sYXRvci5nZXRJbnRlcnBvbGF0aW9uKHgpOwotICAgIAorICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IHggPSBtSW50ZXJwb2xhdG9yLmdldEludGVycG9sYXRpb24odGltZVBhc3NlZCAqIG1EdXJhdGlvblJlY2lwcm9jYWwpOwogICAgICAgICAgICAgICAgIG1DdXJyWCA9IG1TdGFydFggKyBNYXRoLnJvdW5kKHggKiBtRGVsdGFYKTsKICAgICAgICAgICAgICAgICBtQ3VyclkgPSBtU3RhcnRZICsgTWF0aC5yb3VuZCh4ICogbURlbHRhWSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00OTksMjAgKzQ4OCw2IEBACiAgICAgICAgIHJldHVybiBtRmxpbmdGcmljdGlvbiAqIG1QaHlzaWNhbENvZWZmICogTWF0aC5leHAoREVDRUxFUkFUSU9OX1JBVEUgLyBkZWNlbE1pbnVzT25lICogbCk7CiAgICAgfQogCi0gICAgc3RhdGljIGZsb2F0IHZpc2NvdXNGbHVpZChmbG9hdCB4KQotICAgIHsKLSAgICAgICAgeCAqPSBzVmlzY291c0ZsdWlkU2NhbGU7Ci0gICAgICAgIGlmICh4IDwgMS4wZikgewotICAgICAgICAgICAgeCAtPSAoMS4wZiAtIChmbG9hdClNYXRoLmV4cCgteCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmxvYXQgc3RhcnQgPSAwLjM2Nzg3OTQ0MTE3ZjsgICAvLyAxL2UgPT0gZXhwKC0xKQotICAgICAgICAgICAgeCA9IDEuMGYgLSAoZmxvYXQpTWF0aC5leHAoMS4wZiAtIHgpOwotICAgICAgICAgICAgeCA9IHN0YXJ0ICsgeCAqICgxLjBmIC0gc3RhcnQpOwotICAgICAgICB9Ci0gICAgICAgIHggKj0gc1Zpc2NvdXNGbHVpZE5vcm1hbGl6ZTsKLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgfQotICAgIAogICAgIC8qKgogICAgICAqIFN0b3BzIHRoZSBhbmltYXRpb24uIENvbnRyYXJ5IHRvIHtAbGluayAjZm9yY2VGaW5pc2hlZChib29sZWFuKX0sCiAgICAgICogYWJvcnRpbmcgdGhlIGFuaW1hdGluZyBjYXVzZSB0aGUgc2Nyb2xsZXIgdG8gbW92ZSB0byB0aGUgZmluYWwgeCBhbmQgeQpAQCAtNTgzLDQgKzU1OCw0MSBAQAogICAgICAgICByZXR1cm4gIW1GaW5pc2hlZCAmJiBNYXRoLnNpZ251bSh4dmVsKSA9PSBNYXRoLnNpZ251bShtRmluYWxYIC0gbVN0YXJ0WCkgJiYKICAgICAgICAgICAgICAgICBNYXRoLnNpZ251bSh5dmVsKSA9PSBNYXRoLnNpZ251bShtRmluYWxZIC0gbVN0YXJ0WSk7CiAgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFZpc2NvdXNGbHVpZEludGVycG9sYXRvciBpbXBsZW1lbnRzIEludGVycG9sYXRvciB7CisgICAgICAgIC8qKiBDb250cm9scyB0aGUgdmlzY291cyBmbHVpZCBlZmZlY3QgKGhvdyBtdWNoIG9mIGl0KS4gKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgVklTQ09VU19GTFVJRF9TQ0FMRSA9IDguMGY7CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgVklTQ09VU19GTFVJRF9OT1JNQUxJWkU7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0IFZJU0NPVVNfRkxVSURfT0ZGU0VUOworCisgICAgICAgIHN0YXRpYyB7CisKKyAgICAgICAgICAgIC8vIG11c3QgYmUgc2V0IHRvIDEuMCAodXNlZCBpbiB2aXNjb3VzRmx1aWQoKSkKKyAgICAgICAgICAgIFZJU0NPVVNfRkxVSURfTk9STUFMSVpFID0gMS4wZiAvIHZpc2NvdXNGbHVpZCgxLjBmKTsKKyAgICAgICAgICAgIC8vIGFjY291bnQgZm9yIHZlcnkgc21hbGwgZmxvYXRpbmctcG9pbnQgZXJyb3IKKyAgICAgICAgICAgIFZJU0NPVVNfRkxVSURfT0ZGU0VUID0gMS4wZiAtIFZJU0NPVVNfRkxVSURfTk9STUFMSVpFICogdmlzY291c0ZsdWlkKDEuMGYpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgdmlzY291c0ZsdWlkKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHggKj0gVklTQ09VU19GTFVJRF9TQ0FMRTsKKyAgICAgICAgICAgIGlmICh4IDwgMS4wZikgeworICAgICAgICAgICAgICAgIHggLT0gKDEuMGYgLSAoZmxvYXQpTWF0aC5leHAoLXgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmxvYXQgc3RhcnQgPSAwLjM2Nzg3OTQ0MTE3ZjsgICAvLyAxL2UgPT0gZXhwKC0xKQorICAgICAgICAgICAgICAgIHggPSAxLjBmIC0gKGZsb2F0KU1hdGguZXhwKDEuMGYgLSB4KTsKKyAgICAgICAgICAgICAgICB4ID0gc3RhcnQgKyB4ICogKDEuMGYgLSBzdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgZmxvYXQgZ2V0SW50ZXJwb2xhdGlvbihmbG9hdCBpbnB1dCkgeworICAgICAgICAgICAgZmluYWwgZmxvYXQgaW50ZXJwb2xhdGVkID0gVklTQ09VU19GTFVJRF9OT1JNQUxJWkUgKiB2aXNjb3VzRmx1aWQoaW5wdXQpOworICAgICAgICAgICAgaWYgKGlucHV0ID4gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCArIFZJU0NPVVNfRkxVSURfT0ZGU0VUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGlucHV0OworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NlYXJjaFZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TZWFyY2hWaWV3LmphdmEKaW5kZXggMDI4MTYwMi4uMzc5MTI1OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NlYXJjaFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2VhcmNoVmlldy5qYXZhCkBAIC0yNDIsNyArMjQyLDE1IEBACiAgICAgfQogCiAgICAgcHVibGljIFNlYXJjaFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2VhcmNoVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBTZWFyY2hWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIExheW91dEluZmxhdGVyIGluZmxhdGVyID0gKExheW91dEluZmxhdGVyKSBjb250ZXh0CiAgICAgICAgICAgICAgICAgLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5MQVlPVVRfSU5GTEFURVJfU0VSVklDRSk7CkBAIC0yODEsNyArMjg5LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5TZWFyY2hWaWV3LCAwLCAwKTsKKyAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5TZWFyY2hWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgc2V0SWNvbmlmaWVkQnlEZWZhdWx0KGEuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5TZWFyY2hWaWV3X2ljb25pZmllZEJ5RGVmYXVsdCwgdHJ1ZSkpOwogICAgICAgICBpbnQgbWF4V2lkdGggPSBhLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLnN0eWxlYWJsZS5TZWFyY2hWaWV3X21heFdpZHRoLCAtMSk7CiAgICAgICAgIGlmIChtYXhXaWR0aCAhPSAtMSkgewpAQCAtMzA0LDcgKzMxMyw3IEBACiAKICAgICAgICAgYm9vbGVhbiBmb2N1c2FibGUgPSB0cnVlOwogCi0gICAgICAgIGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLlZpZXcsIDAsIDApOworICAgICAgICBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5WaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgZm9jdXNhYmxlID0gYS5nZXRCb29sZWFuKFIuc3R5bGVhYmxlLlZpZXdfZm9jdXNhYmxlLCBmb2N1c2FibGUpOwogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICAgICAgc2V0Rm9jdXNhYmxlKGZvY3VzYWJsZSk7CkBAIC0xNjYxLDggKzE2NzAsMTQgQEAKICAgICAgICAgICAgIG1UaHJlc2hvbGQgPSBnZXRUaHJlc2hvbGQoKTsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBTZWFyY2hBdXRvQ29tcGxldGUoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICAgICAgcHVibGljIFNlYXJjaEF1dG9Db21wbGV0ZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cnMpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHJzKTsKKyAgICAgICAgICAgIG1UaHJlc2hvbGQgPSBnZXRUaHJlc2hvbGQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTZWFyY2hBdXRvQ29tcGxldGUoCisgICAgICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHJzLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHJzLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgICAgICBtVGhyZXNob2xkID0gZ2V0VGhyZXNob2xkKCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NlZWtCYXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TZWVrQmFyLmphdmEKaW5kZXggMjczN2Y5NC4uZGM3YzA0YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NlZWtCYXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2Vla0Jhci5qYXZhCkBAIC03OSw4ICs3OSwxMiBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuc2Vla0JhclN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgU2Vla0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFNlZWtCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2Vla0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TbGlkaW5nRHJhd2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2xpZGluZ0RyYXdlci5qYXZhCmluZGV4IDUxNzI0NmIuLmVjMDZjMDIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TbGlkaW5nRHJhd2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NsaWRpbmdEcmF3ZXIuamF2YQpAQCAtMTkyLDExICsxOTIsMzIgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBhcHBsaWNhdGlvbidzIGVudmlyb25tZW50LgogICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIFhNTC4KLSAgICAgKiBAcGFyYW0gZGVmU3R5bGUgVGhlIHN0eWxlIHRvIGFwcGx5IHRvIHRoaXMgd2lkZ2V0LgorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgQW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqLwotICAgIHB1YmxpYyBTbGlkaW5nRHJhd2VyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5TbGlkaW5nRHJhd2VyLCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIFNsaWRpbmdEcmF3ZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFNsaWRpbmdEcmF3ZXIgZnJvbSBhIHNwZWNpZmllZCBzZXQgb2YgYXR0cmlidXRlcyBkZWZpbmVkIGluIFhNTC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBhcHBsaWNhdGlvbidzIGVudmlyb25tZW50LgorICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIFhNTC4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIEFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVSZXMgQSByZXNvdXJjZSBpZGVudGlmaWVyIG9mIGEgc3R5bGUgcmVzb3VyY2UgdGhhdAorICAgICAqICAgICAgICBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHZpZXcsIHVzZWQgb25seSBpZgorICAgICAqICAgICAgICBkZWZTdHlsZUF0dHIgaXMgMCBvciBjYW4gbm90IGJlIGZvdW5kIGluIHRoZSB0aGVtZS4gQ2FuIGJlIDAKKyAgICAgKiAgICAgICAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgorICAgICAqLworICAgIHB1YmxpYyBTbGlkaW5nRHJhd2VyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgUi5zdHlsZWFibGUuU2xpZGluZ0RyYXdlciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgaW50IG9yaWVudGF0aW9uID0gYS5nZXRJbnQoUi5zdHlsZWFibGUuU2xpZGluZ0RyYXdlcl9vcmllbnRhdGlvbiwgT1JJRU5UQVRJT05fVkVSVElDQUwpOwogICAgICAgICBtVmVydGljYWwgPSBvcmllbnRhdGlvbiA9PSBPUklFTlRBVElPTl9WRVJUSUNBTDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TcGFjZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NwYWNlLmphdmEKaW5kZXggYmI1M2E3Ny4uYzRlYWViNyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NwYWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NwYWNlLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiAKIC8qKgogICogU3BhY2UgaXMgYSBsaWdodHdlaWdodCBWaWV3IHN1YmNsYXNzIHRoYXQgbWF5IGJlIHVzZWQgdG8gY3JlYXRlIGdhcHMgYmV0d2VlbiBjb21wb25lbnRzCkBAIC0zMCw4ICsyOSw4IEBACiAgICAgLyoqCiAgICAgICoge0Bpbmhlcml0RG9jfQogICAgICAqLwotICAgIHB1YmxpYyBTcGFjZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFNwYWNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBpZiAoZ2V0VmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAgICAgICAgIHNldFZpc2liaWxpdHkoSU5WSVNJQkxFKTsKICAgICAgICAgfQpAQCAtNDAsNiArMzksMTMgQEAKICAgICAvKioKICAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgICovCisgICAgcHVibGljIFNwYWNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqLwogICAgIHB1YmxpYyBTcGFjZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU3Bpbm5lci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NwaW5uZXIuamF2YQppbmRleCBiNzVkMzZmLi5hZmU1ODA0ZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NwaW5uZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU3Bpbm5lci5qYXZhCkBAIC0xMzAsMTggKzEzMCwxNyBAQAogCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IGEgbmV3IHNwaW5uZXIgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCdzIHRoZW1lLCB0aGUgc3VwcGxpZWQgYXR0cmlidXRlIHNldCwKLSAgICAgKiBhbmQgZGVmYXVsdCBzdHlsZS4KKyAgICAgKiBhbmQgZGVmYXVsdCBzdHlsZSBhdHRyaWJ1dGUuCiAgICAgICoKICAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dCB0aGUgdmlldyBpcyBydW5uaW5nIGluLCB0aHJvdWdoIHdoaWNoIGl0IGNhbgogICAgICAqICAgICAgICBhY2Nlc3MgdGhlIGN1cnJlbnQgdGhlbWUsIHJlc291cmNlcywgZXRjLgogICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgWE1MIHRhZyB0aGF0IGlzIGluZmxhdGluZyB0aGUgdmlldy4KLSAgICAgKiBAcGFyYW0gZGVmU3R5bGUgVGhlIGRlZmF1bHQgc3R5bGUgdG8gYXBwbHkgdG8gdGhpcyB2aWV3LiBJZiAwLCBubyBzdHlsZQotICAgICAqICAgICAgICB3aWxsIGJlIGFwcGxpZWQgKGJleW9uZCB3aGF0IGlzIGluY2x1ZGVkIGluIHRoZSB0aGVtZSkuIFRoaXMgbWF5Ci0gICAgICogICAgICAgIGVpdGhlciBiZSBhbiBhdHRyaWJ1dGUgcmVzb3VyY2UsIHdob3NlIHZhbHVlIHdpbGwgYmUgcmV0cmlldmVkCi0gICAgICogICAgICAgIGZyb20gdGhlIGN1cnJlbnQgdGhlbWUsIG9yIGFuIGV4cGxpY2l0IHN0eWxlIHJlc291cmNlLgorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgQW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqLwotICAgIHB1YmxpYyBTcGlubmVyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGUsIE1PREVfVEhFTUUpOworICAgIHB1YmxpYyBTcGlubmVyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCwgTU9ERV9USEVNRSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNTIsMjAgKzE1MSw0NCBAQAogICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0IHRoZSB2aWV3IGlzIHJ1bm5pbmcgaW4sIHRocm91Z2ggd2hpY2ggaXQgY2FuCiAgICAgICogICAgICAgIGFjY2VzcyB0aGUgY3VycmVudCB0aGVtZSwgcmVzb3VyY2VzLCBldGMuCiAgICAgICogQHBhcmFtIGF0dHJzIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBYTUwgdGFnIHRoYXQgaXMgaW5mbGF0aW5nIHRoZSB2aWV3LgotICAgICAqIEBwYXJhbSBkZWZTdHlsZSBUaGUgZGVmYXVsdCBzdHlsZSB0byBhcHBseSB0byB0aGlzIHZpZXcuIElmIDAsIG5vIHN0eWxlCi0gICAgICogICAgICAgIHdpbGwgYmUgYXBwbGllZCAoYmV5b25kIHdoYXQgaXMgaW5jbHVkZWQgaW4gdGhlIHRoZW1lKS4gVGhpcyBtYXkKLSAgICAgKiAgICAgICAgZWl0aGVyIGJlIGFuIGF0dHJpYnV0ZSByZXNvdXJjZSwgd2hvc2UgdmFsdWUgd2lsbCBiZSByZXRyaWV2ZWQKLSAgICAgKiAgICAgICAgZnJvbSB0aGUgY3VycmVudCB0aGVtZSwgb3IgYW4gZXhwbGljaXQgc3R5bGUgcmVzb3VyY2UuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCiAgICAgICogQHBhcmFtIG1vZGUgQ29uc3RhbnQgZGVzY3JpYmluZyBob3cgdGhlIHVzZXIgd2lsbCBzZWxlY3QgY2hvaWNlcyBmcm9tIHRoZSBzcGlubmVyLgotICAgICAqIAorICAgICAqCiAgICAgICogQHNlZSAjTU9ERV9ESUFMT0cKICAgICAgKiBAc2VlICNNT0RFX0RST1BET1dOCiAgICAgICovCi0gICAgcHVibGljIFNwaW5uZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSwgaW50IG1vZGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgU3Bpbm5lcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IG1vZGUpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwLCBtb2RlKTsKKyAgICB9CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlNwaW5uZXIsIGRlZlN0eWxlLCAwKTsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgc3Bpbm5lciB3aXRoIHRoZSBnaXZlbiBjb250ZXh0J3MgdGhlbWUsIHRoZSBzdXBwbGllZCBhdHRyaWJ1dGUgc2V0LAorICAgICAqIGFuZCBkZWZhdWx0IHN0eWxlLiA8Y29kZT5tb2RlPC9jb2RlPiBtYXkgYmUgb25lIG9mIHtAbGluayAjTU9ERV9ESUFMT0d9IG9yCisgICAgICoge0BsaW5rICNNT0RFX0RST1BET1dOfSBhbmQgZGV0ZXJtaW5lcyBob3cgdGhlIHVzZXIgd2lsbCBzZWxlY3QgY2hvaWNlcyBmcm9tIHRoZSBzcGlubmVyLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdGhlIHZpZXcgaXMgcnVubmluZyBpbiwgdGhyb3VnaCB3aGljaCBpdCBjYW4KKyAgICAgKiAgICAgICAgYWNjZXNzIHRoZSBjdXJyZW50IHRoZW1lLCByZXNvdXJjZXMsIGV0Yy4KKyAgICAgKiBAcGFyYW0gYXR0cnMgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIFhNTCB0YWcgdGhhdCBpcyBpbmZsYXRpbmcgdGhlIHZpZXcuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICogQHBhcmFtIGRlZlN0eWxlUmVzIEEgcmVzb3VyY2UgaWRlbnRpZmllciBvZiBhIHN0eWxlIHJlc291cmNlIHRoYXQKKyAgICAgKiAgICAgICAgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB2aWV3LCB1c2VkIG9ubHkgaWYKKyAgICAgKiAgICAgICAgZGVmU3R5bGVBdHRyIGlzIDAgb3IgY2FuIG5vdCBiZSBmb3VuZCBpbiB0aGUgdGhlbWUuIENhbiBiZSAwCisgICAgICogICAgICAgIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAcGFyYW0gbW9kZSBDb25zdGFudCBkZXNjcmliaW5nIGhvdyB0aGUgdXNlciB3aWxsIHNlbGVjdCBjaG9pY2VzIGZyb20gdGhlIHNwaW5uZXIuCisgICAgICoKKyAgICAgKiBAc2VlICNNT0RFX0RJQUxPRworICAgICAqIEBzZWUgI01PREVfRFJPUERPV04KKyAgICAgKi8KKyAgICBwdWJsaWMgU3Bpbm5lcigKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMsIGludCBtb2RlKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlNwaW5uZXIsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIGlmIChtb2RlID09IE1PREVfVEhFTUUpIHsKICAgICAgICAgICAgIG1vZGUgPSBhLmdldEludChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TcGlubmVyX3NwaW5uZXJNb2RlLCBNT0RFX0RJQUxPRyk7CkBAIC0xNzgsNyArMjAxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTU9ERV9EUk9QRE9XTjogewotICAgICAgICAgICAgZmluYWwgRHJvcGRvd25Qb3B1cCBwb3B1cCA9IG5ldyBEcm9wZG93blBvcHVwKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgICAgICAgICBmaW5hbCBEcm9wZG93blBvcHVwIHBvcHVwID0gbmV3IERyb3Bkb3duUG9wdXAoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgICAgICBtRHJvcERvd25XaWR0aCA9IGEuZ2V0TGF5b3V0RGltZW5zaW9uKAogICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TcGlubmVyX2Ryb3BEb3duV2lkdGgsCkBAIC0xMDMxLDggKzEwNTQsOSBAQAogICAgICAgICBwcml2YXRlIENoYXJTZXF1ZW5jZSBtSGludFRleHQ7CiAgICAgICAgIHByaXZhdGUgTGlzdEFkYXB0ZXIgbUFkYXB0ZXI7CiAKLSAgICAgICAgcHVibGljIERyb3Bkb3duUG9wdXAoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZVJlcykgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIDAsIGRlZlN0eWxlUmVzKTsKKyAgICAgICAgcHVibGljIERyb3Bkb3duUG9wdXAoCisgICAgICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgICAgICBzZXRBbmNob3JWaWV3KFNwaW5uZXIudGhpcyk7CiAgICAgICAgICAgICBzZXRNb2RhbCh0cnVlKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TdGFja1ZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TdGFja1ZpZXcuamF2YQppbmRleCA2ODUzNjYwLi5kMmU3MThjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU3RhY2tWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1N0YWNrVmlldy5qYXZhCkBAIC0xNjgsOSArMTY4LDE2IEBACiAgICAgICoge0Bpbmhlcml0RG9jfQogICAgICAqLwogICAgIHB1YmxpYyBTdGFja1ZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0cik7Ci0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdGFja1ZpZXcsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqLworICAgIHB1YmxpYyBTdGFja1ZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3RhY2tWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtUmVzT3V0Q29sb3IgPSBhLmdldENvbG9yKAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN0YWNrVmlld19yZXNPdXRDb2xvciwgMCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU3dpdGNoLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU3dpdGNoLmphdmEKaW5kZXggZTc1NGMxNy4uYzlhMWNhNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1N3aXRjaC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Td2l0Y2guamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQud2lkZ2V0OwogCitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKQEAgLTMyLDYgKzMzLDggQEAKIGltcG9ydCBhbmRyb2lkLnRleHQubWV0aG9kLkFsbENhcHNUcmFuc2Zvcm1hdGlvbk1ldGhvZDsKIGltcG9ydCBhbmRyb2lkLnRleHQubWV0aG9kLlRyYW5zZm9ybWF0aW9uTWV0aG9kMjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudXRpbC5GbG9hdFByb3BlcnR5OworaW1wb3J0IGFuZHJvaWQudXRpbC5NYXRoVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WZWxvY2l0eVRyYWNrZXI7CkBAIC02Niw2ICs2OSw4IEBACiAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNTd2l0Y2hfdHJhY2sKICAqLwogcHVibGljIGNsYXNzIFN3aXRjaCBleHRlbmRzIENvbXBvdW5kQnV0dG9uIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEhVTUJfQU5JTUFUSU9OX0RVUkFUSU9OID0gMjUwOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRPVUNIX01PREVfSURMRSA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRPVUNIX01PREVfRE9XTiA9IDE7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRPVUNIX01PREVfRFJBR0dJTkcgPSAyOwpAQCAtMTA1LDYgKzExMCw3IEBACiAgICAgcHJpdmF0ZSBMYXlvdXQgbU9uTGF5b3V0OwogICAgIHByaXZhdGUgTGF5b3V0IG1PZmZMYXlvdXQ7CiAgICAgcHJpdmF0ZSBUcmFuc2Zvcm1hdGlvbk1ldGhvZDIgbVN3aXRjaFRyYW5zZm9ybWF0aW9uTWV0aG9kOworICAgIHByaXZhdGUgT2JqZWN0QW5pbWF0b3IgbVBvc2l0aW9uQW5pbWF0b3I7CiAKICAgICBAU3VwcHJlc3NXYXJuaW5ncygiaGlkaW5nIikKICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRlbXBSZWN0ID0gbmV3IFJlY3QoKTsKQEAgLTEzOSwxOSArMTQ1LDQxIEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dCB0aGF0IHdpbGwgZGV0ZXJtaW5lIHRoaXMgd2lkZ2V0J3MgdGhlbWluZy4KICAgICAgKiBAcGFyYW0gYXR0cnMgU3BlY2lmaWNhdGlvbiBvZiBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGRldmlhdGUgZnJvbSB0aGUgZGVmYXVsdCBzdHlsaW5nLgotICAgICAqIEBwYXJhbSBkZWZTdHlsZSBBbiBhdHRyaWJ1dGUgSUQgd2l0aGluIHRoZSBhY3RpdmUgdGhlbWUgY29udGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUKLSAgICAgKiAgICAgICAgICAgICAgICAgZGVmYXVsdCBzdHlsZSBmb3IgdGhpcyB3aWRnZXQuIGUuZy4gYW5kcm9pZC5SLmF0dHIuc3dpdGNoU3R5bGUuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCiAgICAgICovCi0gICAgcHVibGljIFN3aXRjaChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFN3aXRjaChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgbmV3IFN3aXRjaCB3aXRoIGEgZGVmYXVsdCBzdHlsZSBkZXRlcm1pbmVkIGJ5IHRoZSBnaXZlbiB0aGVtZQorICAgICAqIGF0dHJpYnV0ZSBvciBzdHlsZSByZXNvdXJjZSwgb3ZlcnJpZGluZyBzcGVjaWZpYyBzdHlsZSBhdHRyaWJ1dGVzIGFzCisgICAgICogcmVxdWVzdGVkLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdGhhdCB3aWxsIGRldGVybWluZSB0aGlzIHdpZGdldCdzIHRoZW1pbmcuCisgICAgICogQHBhcmFtIGF0dHJzIFNwZWNpZmljYXRpb24gb2YgYXR0cmlidXRlcyB0aGF0IHNob3VsZCBkZXZpYXRlIGZyb20gdGhlCisgICAgICogICAgICAgIGRlZmF1bHQgc3R5bGluZy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIEFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVSZXMgQSByZXNvdXJjZSBpZGVudGlmaWVyIG9mIGEgc3R5bGUgcmVzb3VyY2UgdGhhdAorICAgICAqICAgICAgICBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHZpZXcsIHVzZWQgb25seSBpZgorICAgICAqICAgICAgICBkZWZTdHlsZUF0dHIgaXMgMCBvciBjYW4gbm90IGJlIGZvdW5kIGluIHRoZSB0aGVtZS4gQ2FuIGJlIDAKKyAgICAgKiAgICAgICAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgorICAgICAqLworICAgIHB1YmxpYyBTd2l0Y2goQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgbVRleHRQYWludCA9IG5ldyBUZXh0UGFpbnQoUGFpbnQuQU5USV9BTElBU19GTEFHKTsKICAgICAgICAgUmVzb3VyY2VzIHJlcyA9IGdldFJlc291cmNlcygpOwogICAgICAgICBtVGV4dFBhaW50LmRlbnNpdHkgPSByZXMuZ2V0RGlzcGxheU1ldHJpY3MoKS5kZW5zaXR5OwogICAgICAgICBtVGV4dFBhaW50LnNldENvbXBhdGliaWxpdHlTY2FsaW5nKHJlcy5nZXRDb21wYXRpYmlsaXR5SW5mbygpLmFwcGxpY2F0aW9uU2NhbGUpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Td2l0Y2gsIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Td2l0Y2gsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIG1UaHVtYkRyYXdhYmxlID0gYS5nZXREcmF3YWJsZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Td2l0Y2hfdGh1bWIpOwogICAgICAgICBtVHJhY2tEcmF3YWJsZSA9IGEuZ2V0RHJhd2FibGUoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3dpdGNoX3RyYWNrKTsKQEAgLTUyOCw5ICs1NTYsMTIgQEAKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgKHgsIHkpIGlzIHdpdGhpbiB0aGUgdGFyZ2V0IGFyZWEgb2YgdGhlIHN3aXRjaCB0aHVtYgogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBoaXRUaHVtYihmbG9hdCB4LCBmbG9hdCB5KSB7CisgICAgICAgIC8vIFJlbGllcyBvbiBtVGVtcFJlY3QsIE1VU1QgYmUgY2FsbGVkIGZpcnN0IQorICAgICAgICBmaW5hbCBpbnQgdGh1bWJPZmZzZXQgPSBnZXRUaHVtYk9mZnNldCgpOworCiAgICAgICAgIG1UaHVtYkRyYXdhYmxlLmdldFBhZGRpbmcobVRlbXBSZWN0KTsKICAgICAgICAgZmluYWwgaW50IHRodW1iVG9wID0gbVN3aXRjaFRvcCAtIG1Ub3VjaFNsb3A7Ci0gICAgICAgIGZpbmFsIGludCB0aHVtYkxlZnQgPSBtU3dpdGNoTGVmdCArIChpbnQpIChtVGh1bWJQb3NpdGlvbiArIDAuNWYpIC0gbVRvdWNoU2xvcDsKKyAgICAgICAgZmluYWwgaW50IHRodW1iTGVmdCA9IG1Td2l0Y2hMZWZ0ICsgdGh1bWJPZmZzZXQgLSBtVG91Y2hTbG9wOwogICAgICAgICBmaW5hbCBpbnQgdGh1bWJSaWdodCA9IHRodW1iTGVmdCArIG1UaHVtYldpZHRoICsKICAgICAgICAgICAgICAgICBtVGVtcFJlY3QubGVmdCArIG1UZW1wUmVjdC5yaWdodCArIG1Ub3VjaFNsb3A7CiAgICAgICAgIGZpbmFsIGludCB0aHVtYkJvdHRvbSA9IG1Td2l0Y2hCb3R0b20gKyBtVG91Y2hTbG9wOwpAQCAtNTc1LDEzICs2MDYsMjMgQEAKIAogICAgICAgICAgICAgICAgICAgICBjYXNlIFRPVUNIX01PREVfRFJBR0dJTkc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IHggPSBldi5nZXRYKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBkeCA9IHggLSBtVG91Y2hYOwotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbmV3UG9zID0gTWF0aC5tYXgoMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4obVRodW1iUG9zaXRpb24gKyBkeCwgZ2V0VGh1bWJTY3JvbGxSYW5nZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdGh1bWJTY3JvbGxSYW5nZSA9IGdldFRodW1iU2Nyb2xsUmFuZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IHRodW1iU2Nyb2xsT2Zmc2V0ID0geCAtIG1Ub3VjaFg7CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkUG9zOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRodW1iU2Nyb2xsUmFuZ2UgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRQb3MgPSB0aHVtYlNjcm9sbE9mZnNldCAvIHRodW1iU2Nyb2xsUmFuZ2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB0aHVtYiBzY3JvbGwgcmFuZ2UgaXMgZW1wdHksIGp1c3QgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vdmVtZW50IGRpcmVjdGlvbiB0byBzbmFwIG9uIG9yIG9mZi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUG9zID0gdGh1bWJTY3JvbGxPZmZzZXQgPiAwID8gMSA6IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTGF5b3V0UnRsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUG9zID0gLWRQb3M7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBuZXdQb3MgPSBNYXRoVXRpbHMuY29uc3RyYWluKG1UaHVtYlBvc2l0aW9uICsgZFBvcywgMCwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3UG9zICE9IG1UaHVtYlBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRodW1iUG9zaXRpb24gPSBuZXdQb3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRvdWNoWCA9IHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRodW1iUG9zaXRpb24obmV3UG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC02MTgsNjIgKzY1OSw3NyBAQAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBzdG9wRHJhZyhNb3Rpb25FdmVudCBldikgewogICAgICAgICBtVG91Y2hNb2RlID0gVE9VQ0hfTU9ERV9JRExFOwotICAgICAgICAvLyBVcCBhbmQgbm90IGNhbmNlbGVkLCBhbHNvIGNoZWNrcyB0aGUgc3dpdGNoIGhhcyBub3QgYmVlbiBkaXNhYmxlZCBkdXJpbmcgdGhlIGRyYWcKLSAgICAgICAgYm9vbGVhbiBjb21taXRDaGFuZ2UgPSBldi5nZXRBY3Rpb24oKSA9PSBNb3Rpb25FdmVudC5BQ1RJT05fVVAgJiYgaXNFbmFibGVkKCk7CiAKLSAgICAgICAgY2FuY2VsU3VwZXJUb3VjaChldik7Ci0KKyAgICAgICAgLy8gQ29tbWl0IHRoZSBjaGFuZ2UgaWYgdGhlIGV2ZW50IGlzIHVwIGFuZCBub3QgY2FuY2VsZWQgYW5kIHRoZSBzd2l0Y2gKKyAgICAgICAgLy8gaGFzIG5vdCBiZWVuIGRpc2FibGVkIGR1cmluZyB0aGUgZHJhZy4KKyAgICAgICAgZmluYWwgYm9vbGVhbiBjb21taXRDaGFuZ2UgPSBldi5nZXRBY3Rpb24oKSA9PSBNb3Rpb25FdmVudC5BQ1RJT05fVVAgJiYgaXNFbmFibGVkKCk7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gbmV3U3RhdGU7CiAgICAgICAgIGlmIChjb21taXRDaGFuZ2UpIHsKLSAgICAgICAgICAgIGJvb2xlYW4gbmV3U3RhdGU7CiAgICAgICAgICAgICBtVmVsb2NpdHlUcmFja2VyLmNvbXB1dGVDdXJyZW50VmVsb2NpdHkoMTAwMCk7Ci0gICAgICAgICAgICBmbG9hdCB4dmVsID0gbVZlbG9jaXR5VHJhY2tlci5nZXRYVmVsb2NpdHkoKTsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IHh2ZWwgPSBtVmVsb2NpdHlUcmFja2VyLmdldFhWZWxvY2l0eSgpOwogICAgICAgICAgICAgaWYgKE1hdGguYWJzKHh2ZWwpID4gbU1pbkZsaW5nVmVsb2NpdHkpIHsKICAgICAgICAgICAgICAgICBuZXdTdGF0ZSA9IGlzTGF5b3V0UnRsKCkgPyAoeHZlbCA8IDApIDogKHh2ZWwgPiAwKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbmV3U3RhdGUgPSBnZXRUYXJnZXRDaGVja2VkU3RhdGUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFuaW1hdGVUaHVtYlRvQ2hlY2tlZFN0YXRlKG5ld1N0YXRlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFuaW1hdGVUaHVtYlRvQ2hlY2tlZFN0YXRlKGlzQ2hlY2tlZCgpKTsKKyAgICAgICAgICAgIG5ld1N0YXRlID0gaXNDaGVja2VkKCk7CiAgICAgICAgIH0KKworICAgICAgICBzZXRDaGVja2VkKG5ld1N0YXRlKTsKKyAgICAgICAgY2FuY2VsU3VwZXJUb3VjaChldik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFuaW1hdGVUaHVtYlRvQ2hlY2tlZFN0YXRlKGJvb2xlYW4gbmV3Q2hlY2tlZFN0YXRlKSB7Ci0gICAgICAgIC8vIFRPRE8gYW5pbWF0ZSEKLSAgICAgICAgLy9mbG9hdCB0YXJnZXRQb3MgPSBuZXdDaGVja2VkU3RhdGUgPyAwIDogZ2V0VGh1bWJTY3JvbGxSYW5nZSgpOwotICAgICAgICAvL21UaHVtYlBvc2l0aW9uID0gdGFyZ2V0UG9zOwotICAgICAgICBzZXRDaGVja2VkKG5ld0NoZWNrZWRTdGF0ZSk7CisgICAgICAgIGZpbmFsIGZsb2F0IHRhcmdldFBvc2l0aW9uID0gbmV3Q2hlY2tlZFN0YXRlID8gMSA6IDA7CisgICAgICAgIG1Qb3NpdGlvbkFuaW1hdG9yID0gT2JqZWN0QW5pbWF0b3Iub2ZGbG9hdCh0aGlzLCBUSFVNQl9QT1MsIHRhcmdldFBvc2l0aW9uKTsKKyAgICAgICAgbVBvc2l0aW9uQW5pbWF0b3Iuc2V0RHVyYXRpb24oVEhVTUJfQU5JTUFUSU9OX0RVUkFUSU9OKTsKKyAgICAgICAgbVBvc2l0aW9uQW5pbWF0b3Iuc2V0QXV0b0NhbmNlbCh0cnVlKTsKKyAgICAgICAgbVBvc2l0aW9uQW5pbWF0b3Iuc3RhcnQoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2FuY2VsUG9zaXRpb25BbmltYXRvcigpIHsKKyAgICAgICAgaWYgKG1Qb3NpdGlvbkFuaW1hdG9yICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1Qb3NpdGlvbkFuaW1hdG9yLmNhbmNlbCgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGdldFRhcmdldENoZWNrZWRTdGF0ZSgpIHsKLSAgICAgICAgaWYgKGlzTGF5b3V0UnRsKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBtVGh1bWJQb3NpdGlvbiA8PSBnZXRUaHVtYlNjcm9sbFJhbmdlKCkgLyAyOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG1UaHVtYlBvc2l0aW9uID49IGdldFRodW1iU2Nyb2xsUmFuZ2UoKSAvIDI7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1UaHVtYlBvc2l0aW9uID4gMC41ZjsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgc2V0VGh1bWJQb3NpdGlvbihib29sZWFuIGNoZWNrZWQpIHsKLSAgICAgICAgaWYgKGlzTGF5b3V0UnRsKCkpIHsKLSAgICAgICAgICAgIG1UaHVtYlBvc2l0aW9uID0gY2hlY2tlZCA/IDAgOiBnZXRUaHVtYlNjcm9sbFJhbmdlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtVGh1bWJQb3NpdGlvbiA9IGNoZWNrZWQgPyBnZXRUaHVtYlNjcm9sbFJhbmdlKCkgOiAwOwotICAgICAgICB9CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgdGh1bWIgcG9zaXRpb24gYXMgYSBkZWNpbWFsIHZhbHVlIGJldHdlZW4gMCAob2ZmKSBhbmQgMSAob24pLgorICAgICAqCisgICAgICogQHBhcmFtIHBvc2l0aW9uIG5ldyBwb3NpdGlvbiBiZXR3ZWVuIFswLDFdCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNldFRodW1iUG9zaXRpb24oZmxvYXQgcG9zaXRpb24pIHsKKyAgICAgICAgbVRodW1iUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHRvZ2dsZSgpIHsKKyAgICAgICAgc2V0Q2hlY2tlZCghaXNDaGVja2VkKCkpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldENoZWNrZWQoYm9vbGVhbiBjaGVja2VkKSB7CiAgICAgICAgIHN1cGVyLnNldENoZWNrZWQoY2hlY2tlZCk7Ci0gICAgICAgIHNldFRodW1iUG9zaXRpb24oaXNDaGVja2VkKCkpOwotICAgICAgICBpbnZhbGlkYXRlKCk7CisKKyAgICAgICAgaWYgKGlzQXR0YWNoZWRUb1dpbmRvdygpICYmIGlzTGFpZE91dCgpKSB7CisgICAgICAgICAgICBhbmltYXRlVGh1bWJUb0NoZWNrZWRTdGF0ZShjaGVja2VkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEltbWVkaWF0ZWx5IG1vdmUgdGhlIHRodW1iIHRvIHRoZSBuZXcgcG9zaXRpb24uCisgICAgICAgICAgICBjYW5jZWxQb3NpdGlvbkFuaW1hdG9yKCk7CisgICAgICAgICAgICBzZXRUaHVtYlBvc2l0aW9uKGNoZWNrZWQgPyAxIDogMCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFuIGNoYW5nZWQsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pIHsKICAgICAgICAgc3VwZXIub25MYXlvdXQoY2hhbmdlZCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKIAotICAgICAgICBzZXRUaHVtYlBvc2l0aW9uKGlzQ2hlY2tlZCgpKTsKLQogICAgICAgICBpbnQgc3dpdGNoUmlnaHQ7CiAgICAgICAgIGludCBzd2l0Y2hMZWZ0OwogCkBAIC03MzQsMTEgKzc5MCwxMiBAQAogICAgICAgICBpbnQgc3dpdGNoSW5uZXJCb3R0b20gPSBzd2l0Y2hCb3R0b20gLSBtVGVtcFJlY3QuYm90dG9tOwogICAgICAgICBjYW52YXMuY2xpcFJlY3Qoc3dpdGNoSW5uZXJMZWZ0LCBzd2l0Y2hUb3AsIHN3aXRjaElubmVyUmlnaHQsIHN3aXRjaEJvdHRvbSk7CiAKKyAgICAgICAgLy8gUmVsaWVzIG9uIG1UZW1wUmVjdCwgTVVTVCBiZSBjYWxsZWQgZmlyc3QhCisgICAgICAgIGZpbmFsIGludCB0aHVtYlBvcyA9IGdldFRodW1iT2Zmc2V0KCk7CisKICAgICAgICAgbVRodW1iRHJhd2FibGUuZ2V0UGFkZGluZyhtVGVtcFJlY3QpOwotICAgICAgICBmaW5hbCBpbnQgdGh1bWJQb3MgPSAoaW50KSAobVRodW1iUG9zaXRpb24gKyAwLjVmKTsKICAgICAgICAgaW50IHRodW1iTGVmdCA9IHN3aXRjaElubmVyTGVmdCAtIG1UZW1wUmVjdC5sZWZ0ICsgdGh1bWJQb3M7CiAgICAgICAgIGludCB0aHVtYlJpZ2h0ID0gc3dpdGNoSW5uZXJMZWZ0ICsgdGh1bWJQb3MgKyBtVGh1bWJXaWR0aCArIG1UZW1wUmVjdC5yaWdodDsKLQogICAgICAgICBtVGh1bWJEcmF3YWJsZS5zZXRCb3VuZHModGh1bWJMZWZ0LCBzd2l0Y2hUb3AsIHRodW1iUmlnaHQsIHN3aXRjaEJvdHRvbSk7CiAgICAgICAgIG1UaHVtYkRyYXdhYmxlLmRyYXcoY2FudmFzKTsKIApAQCAtNzgzLDYgKzg0MCwyMiBAQAogICAgICAgICByZXR1cm4gcGFkZGluZzsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBUcmFuc2xhdGVzIHRodW1iIHBvc2l0aW9uIHRvIG9mZnNldCBhY2NvcmRpbmcgdG8gY3VycmVudCBSVEwgc2V0dGluZyBhbmQKKyAgICAgKiB0aHVtYiBzY3JvbGwgcmFuZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRodW1iIG9mZnNldAorICAgICAqLworICAgIHByaXZhdGUgaW50IGdldFRodW1iT2Zmc2V0KCkgeworICAgICAgICBmaW5hbCBmbG9hdCB0aHVtYlBvc2l0aW9uOworICAgICAgICBpZiAoaXNMYXlvdXRSdGwoKSkgeworICAgICAgICAgICAgdGh1bWJQb3NpdGlvbiA9IDEgLSBtVGh1bWJQb3NpdGlvbjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRodW1iUG9zaXRpb24gPSBtVGh1bWJQb3NpdGlvbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKGludCkgKHRodW1iUG9zaXRpb24gKiBnZXRUaHVtYlNjcm9sbFJhbmdlKCkgKyAwLjVmKTsKKyAgICB9CisKICAgICBwcml2YXRlIGludCBnZXRUaHVtYlNjcm9sbFJhbmdlKCkgewogICAgICAgICBpZiAobVRyYWNrRHJhd2FibGUgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC04NDgsNCArOTIxLDE2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGbG9hdFByb3BlcnR5PFN3aXRjaD4gVEhVTUJfUE9TID0gbmV3IEZsb2F0UHJvcGVydHk8U3dpdGNoPigidGh1bWJQb3MiKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgRmxvYXQgZ2V0KFN3aXRjaCBvYmplY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QubVRodW1iUG9zaXRpb247CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0VmFsdWUoU3dpdGNoIG9iamVjdCwgZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgICAgIG9iamVjdC5zZXRUaHVtYlBvc2l0aW9uKHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGFiSG9zdC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RhYkhvc3QuamF2YQppbmRleCAyMzhkYzU1Li44OWRmNTFhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGFiSG9zdC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UYWJIb3N0LmphdmEKQEAgLTc3LDExICs3NywxOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBUYWJIb3N0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci50YWJXaWRnZXRTdHlsZSk7CisgICAgfQorCisgICAgcHVibGljIFRhYkhvc3QoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgVGFiSG9zdChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CiAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVGFiV2lkZ2V0LAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci50YWJXaWRnZXRTdHlsZSwgMCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVGFiV2lkZ2V0LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtVGFiTGF5b3V0SWQgPSBhLmdldFJlc291cmNlSWQoUi5zdHlsZWFibGUuVGFiV2lkZ2V0X3RhYkxheW91dCwgMCk7CiAgICAgICAgIGEucmVjeWNsZSgpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RhYldpZGdldC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RhYldpZGdldC5qYXZhCmluZGV4IDZiY2VkMWMuLjU2OGIzZTZhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGFiV2lkZ2V0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RhYldpZGdldC5qYXZhCkBAIC03NCwxMSArNzQsMTUgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLnRhYldpZGdldFN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgVGFiV2lkZ2V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgVGFiV2lkZ2V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFRhYldpZGdldChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRhYldpZGdldCwgZGVmU3R5bGUsIDApOworICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5UYWJXaWRnZXQsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIHNldFN0cmlwRW5hYmxlZChhLmdldEJvb2xlYW4oUi5zdHlsZWFibGUuVGFiV2lkZ2V0X3RhYlN0cmlwRW5hYmxlZCwgdHJ1ZSkpOwogICAgICAgICBzZXRMZWZ0U3RyaXBEcmF3YWJsZShhLmdldERyYXdhYmxlKFIuc3R5bGVhYmxlLlRhYldpZGdldF90YWJTdHJpcExlZnQpKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UZXh0Q2xvY2suamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UZXh0Q2xvY2suamF2YQppbmRleCBiM2I5NWQ5Li40YzVjNzFkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGV4dENsb2NrLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RleHRDbG9jay5qYXZhCkBAIC0xOTgsMTUgKzE5OCwxOSBAQAogICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0IHRoZSB2aWV3IGlzIHJ1bm5pbmcgaW4sIHRocm91Z2ggd2hpY2ggaXQgY2FuCiAgICAgICogICAgICAgIGFjY2VzcyB0aGUgY3VycmVudCB0aGVtZSwgcmVzb3VyY2VzLCBldGMuCiAgICAgICogQHBhcmFtIGF0dHJzIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBYTUwgdGFnIHRoYXQgaXMgaW5mbGF0aW5nIHRoZSB2aWV3Ci0gICAgICogQHBhcmFtIGRlZlN0eWxlIFRoZSBkZWZhdWx0IHN0eWxlIHRvIGFwcGx5IHRvIHRoaXMgdmlldy4gSWYgMCwgbm8gc3R5bGUKLSAgICAgKiAgICAgICAgd2lsbCBiZSBhcHBsaWVkIChiZXlvbmQgd2hhdCBpcyBpbmNsdWRlZCBpbiB0aGUgdGhlbWUpLiBUaGlzIG1heQotICAgICAqICAgICAgICBlaXRoZXIgYmUgYW4gYXR0cmlidXRlIHJlc291cmNlLCB3aG9zZSB2YWx1ZSB3aWxsIGJlIHJldHJpZXZlZAotICAgICAqICAgICAgICBmcm9tIHRoZSBjdXJyZW50IHRoZW1lLCBvciBhbiBleHBsaWNpdCBzdHlsZSByZXNvdXJjZQorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgQW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqLwotICAgIHB1YmxpYyBUZXh0Q2xvY2soQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBUZXh0Q2xvY2soQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5UZXh0Q2xvY2ssIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgVGV4dENsb2NrKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgUi5zdHlsZWFibGUuVGV4dENsb2NrLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1Gb3JtYXQxMiA9IGEuZ2V0VGV4dChSLnN0eWxlYWJsZS5UZXh0Q2xvY2tfZm9ybWF0MTJIb3VyKTsKICAgICAgICAgICAgIG1Gb3JtYXQyNCA9IGEuZ2V0VGV4dChSLnN0eWxlYWJsZS5UZXh0Q2xvY2tfZm9ybWF0MjRIb3VyKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UZXh0Vmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RleHRWaWV3LmphdmEKaW5kZXggN2E5ODA5Zi4uYWE4YmJiMiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RleHRWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RleHRWaWV3LmphdmEKQEAgLTEzNiw3ICsxMzYsNiBAQAogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50TG9jazsKIAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTl9NUjE7CiAKQEAgLTYxOCw5ICs2MTcsMTQgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLnRleHRWaWV3U3R5bGUpOwogICAgIH0KIAorICAgIHB1YmxpYyBUZXh0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgcHVibGljIFRleHRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKICAgICAgICAgbVRleHQgPSAiIjsKIAogICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gZ2V0UmVzb3VyY2VzKCk7CkBAIC02NTcsOCArNjYxLDggQEAKICAgICAgICAgICogdG8gYmUgYWJsZSB0byBwYXJzZSB0aGUgYXBwZWFyYW5jZSBmaXJzdCBhbmQgdGhlbiBsZXQgc3BlY2lmaWMgdGFncwogICAgICAgICAgKiBmb3IgdGhpcyBWaWV3IG92ZXJyaWRlIGl0LgogICAgICAgICAgKi8KLSAgICAgICAgVHlwZWRBcnJheSBhID0gdGhlbWUub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRleHRWaWV3QXBwZWFyYW5jZSwgZGVmU3R5bGUsIDApOworICAgICAgICBUeXBlZEFycmF5IGEgPSB0aGVtZS5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRleHRWaWV3QXBwZWFyYW5jZSwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIFR5cGVkQXJyYXkgYXBwZWFyYW5jZSA9IG51bGw7CiAgICAgICAgIGludCBhcCA9IGEuZ2V0UmVzb3VyY2VJZCgKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5UZXh0Vmlld0FwcGVhcmFuY2VfdGV4dEFwcGVhcmFuY2UsIC0xKTsKQEAgLTc1MSw3ICs3NTUsNyBAQAogICAgICAgICBpbnQgaW5wdXRUeXBlID0gRWRpdG9ySW5mby5UWVBFX05VTEw7CiAKICAgICAgICAgYSA9IHRoZW1lLm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5UZXh0VmlldywgZGVmU3R5bGUsIDApOworICAgICAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVGV4dFZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIGludCBuID0gYS5nZXRJbmRleENvdW50KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0xMjc1LDkgKzEyNzksOCBAQAogICAgICAgICAgKiBIb3dldmVyLCBUZXh0Vmlld3MgdGhhdCBoYXZlIGlucHV0IG9yIG1vdmVtZW50IG1ldGhvZHMgKmFyZSoKICAgICAgICAgICogZm9jdXNhYmxlIGJ5IGRlZmF1bHQuCiAgICAgICAgICAqLwotICAgICAgICBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmU3R5bGUsIDApOworICAgICAgICBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5WaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBib29sZWFuIGZvY3VzYWJsZSA9IG1Nb3ZlbWVudCAhPSBudWxsIHx8IGdldEtleUxpc3RlbmVyKCkgIT0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBjbGlja2FibGUgPSBmb2N1c2FibGU7CkBAIC04NDc4LDcgKzg0ODEsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1UZXh0Lmxlbmd0aCgpID4gMCAmJiBoYXNTZWxlY3Rpb24oKSkgeworICAgICAgICBpZiAobVRleHQubGVuZ3RoKCkgPiAwICYmIGhhc1NlbGVjdGlvbigpICYmIG1FZGl0b3IgIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RpbWVQaWNrZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UaW1lUGlja2VyLmphdmEKaW5kZXggYzI2Y2IyNC4uOGU0YmEwZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RpbWVQaWNrZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGltZVBpY2tlci5qYXZhCkBAIC0yMCwyNiArMjAsMTcgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5EYXRlVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvOwotaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5FZGl0b3JJbmZvOwotaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZE1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTnVtYmVyUGlja2VyLk9uVmFsdWVDaGFuZ2VMaXN0ZW5lcjsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiAKLWltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdFN5bWJvbHM7Ci1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVDsKKwogLyoqCiAgKiBBIHZpZXcgZm9yIHNlbGVjdGluZyB0aGUgdGltZSBvZiBkYXksIGluIGVpdGhlciAyNCBob3VyIG9yIEFNL1BNIG1vZGUuIFRoZQogICogaG91ciwgZWFjaCBtaW51dGUgZGlnaXQsIGFuZCBBTS9QTSAoaWYgYXBwbGljYWJsZSkgY2FuIGJlIGNvbnJvbGxlZCBieQpAQCAtNTcsNTggKzQ4LDEyIEBACiBAV2lkZ2V0CiBwdWJsaWMgY2xhc3MgVGltZVBpY2tlciBleHRlbmRzIEZyYW1lTGF5b3V0IHsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9FTkFCTEVEX1NUQVRFID0gdHJ1ZTsKKyAgICBwcml2YXRlIFRpbWVQaWNrZXJEZWxlZ2F0ZSBtRGVsZWdhdGU7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSE9VUlNfSU5fSEFMRl9EQVkgPSAxMjsKLQotICAgIC8qKgotICAgICAqIEEgbm8tb3AgY2FsbGJhY2sgdXNlZCBpbiB0aGUgY29uc3RydWN0b3IgdG8gYXZvaWQgbnVsbCBjaGVja3MgbGF0ZXIgaW4KLSAgICAgKiB0aGUgY29kZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPblRpbWVDaGFuZ2VkTGlzdGVuZXIgTk9fT1BfQ0hBTkdFX0xJU1RFTkVSID0gbmV3IE9uVGltZUNoYW5nZWRMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25UaW1lQ2hhbmdlZChUaW1lUGlja2VyIHZpZXcsIGludCBob3VyT2ZEYXksIGludCBtaW51dGUpIHsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBzdGF0ZQotICAgIHByaXZhdGUgYm9vbGVhbiBtSXMyNEhvdXJWaWV3OwotCi0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc0FtOwotCi0gICAgLy8gdWkgY29tcG9uZW50cwotICAgIHByaXZhdGUgZmluYWwgTnVtYmVyUGlja2VyIG1Ib3VyU3Bpbm5lcjsKLQotICAgIHByaXZhdGUgZmluYWwgTnVtYmVyUGlja2VyIG1NaW51dGVTcGlubmVyOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBOdW1iZXJQaWNrZXIgbUFtUG1TcGlubmVyOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBFZGl0VGV4dCBtSG91clNwaW5uZXJJbnB1dDsKLQotICAgIHByaXZhdGUgZmluYWwgRWRpdFRleHQgbU1pbnV0ZVNwaW5uZXJJbnB1dDsKLQotICAgIHByaXZhdGUgZmluYWwgRWRpdFRleHQgbUFtUG1TcGlubmVySW5wdXQ7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFRleHRWaWV3IG1EaXZpZGVyOwotCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gb2YgdGhlIFRpbWVQaWNrZXIgaXMKLSAgICAvLyB1c2luZyBhIGJ1dHRvbiBmb3IgdG9nZ2xpbmcgYmV0d2VlbiBBTS9QTSB3aGlsZSB0aGUgbmV3Ci0gICAgLy8gdmVyc2lvbiB1c2VzIGEgTnVtYmVyUGlja2VyIHNwaW5uZXIuIFRoZXJlZm9yZSB0aGUgY29kZQotICAgIC8vIGFjY29tbW9kYXRlcyB0aGVzZSB0d28gY2FzZXMgdG8gYmUgYmFja3dhcmRzIGNvbXBhdGlibGUuCi0gICAgcHJpdmF0ZSBmaW5hbCBCdXR0b24gbUFtUG1CdXR0b247Ci0KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZ1tdIG1BbVBtU3RyaW5nczsKLQotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNFbmFibGVkID0gREVGQVVMVF9FTkFCTEVEX1NUQVRFOwotCi0gICAgLy8gY2FsbGJhY2tzCi0gICAgcHJpdmF0ZSBPblRpbWVDaGFuZ2VkTGlzdGVuZXIgbU9uVGltZUNoYW5nZWRMaXN0ZW5lcjsKLQotICAgIHByaXZhdGUgQ2FsZW5kYXIgbVRlbXBDYWxlbmRhcjsKLQotICAgIHByaXZhdGUgTG9jYWxlIG1DdXJyZW50TG9jYWxlOwotCi0gICAgcHJpdmF0ZSBib29sZWFuIG1Ib3VyV2l0aFR3b0RpZ2l0OwotICAgIHByaXZhdGUgY2hhciBtSG91ckZvcm1hdDsKKyAgICBwcml2YXRlIEF0dHJpYnV0ZVNldCBtQXR0cnM7CisgICAgcHJpdmF0ZSBpbnQgbURlZlN0eWxlQXR0cjsKKyAgICBwcml2YXRlIGludCBtRGVmU3R5bGVSZXM7CisgICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OwogCiAgICAgLyoqCiAgICAgICogVGhlIGNhbGxiYWNrIGludGVyZmFjZSB1c2VkIHRvIGluZGljYXRlIHRoZSB0aW1lIGhhcyBiZWVuIGFkanVzdGVkLgpAQCAtMTMxLDM0NSArNzYsNzkgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgUi5hdHRyLnRpbWVQaWNrZXJTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVQaWNrZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotCi0gICAgICAgIC8vIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGxvY2FsZQotICAgICAgICBzZXRDdXJyZW50TG9jYWxlKExvY2FsZS5nZXREZWZhdWx0KCkpOwotCi0gICAgICAgIC8vIHByb2Nlc3Mgc3R5bGUgYXR0cmlidXRlcwotICAgICAgICBUeXBlZEFycmF5IGF0dHJpYnV0ZXNBcnJheSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICBhdHRycywgUi5zdHlsZWFibGUuVGltZVBpY2tlciwgZGVmU3R5bGUsIDApOwotICAgICAgICBpbnQgbGF5b3V0UmVzb3VyY2VJZCA9IGF0dHJpYnV0ZXNBcnJheS5nZXRSZXNvdXJjZUlkKAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfaW50ZXJuYWxMYXlvdXQsIFIubGF5b3V0LnRpbWVfcGlja2VyKTsKLSAgICAgICAgYXR0cmlidXRlc0FycmF5LnJlY3ljbGUoKTsKLQotICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IChMYXlvdXRJbmZsYXRlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAotICAgICAgICAgICAgICAgIENvbnRleHQuTEFZT1VUX0lORkxBVEVSX1NFUlZJQ0UpOwotICAgICAgICBpbmZsYXRlci5pbmZsYXRlKGxheW91dFJlc291cmNlSWQsIHRoaXMsIHRydWUpOwotCi0gICAgICAgIC8vIGhvdXIKLSAgICAgICAgbUhvdXJTcGlubmVyID0gKE51bWJlclBpY2tlcikgZmluZFZpZXdCeUlkKFIuaWQuaG91cik7Ci0gICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRPblZhbHVlQ2hhbmdlZExpc3RlbmVyKG5ldyBOdW1iZXJQaWNrZXIuT25WYWx1ZUNoYW5nZUxpc3RlbmVyKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQgb25WYWx1ZUNoYW5nZShOdW1iZXJQaWNrZXIgc3Bpbm5lciwgaW50IG9sZFZhbCwgaW50IG5ld1ZhbCkgewotICAgICAgICAgICAgICAgIHVwZGF0ZUlucHV0U3RhdGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzMjRIb3VyVmlldygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgob2xkVmFsID09IEhPVVJTX0lOX0hBTEZfREFZIC0gMSAmJiBuZXdWYWwgPT0gSE9VUlNfSU5fSEFMRl9EQVkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG9sZFZhbCA9PSBIT1VSU19JTl9IQUxGX0RBWSAmJiBuZXdWYWwgPT0gSE9VUlNfSU5fSEFMRl9EQVkgLSAxKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbUlzQW0gPSAhbUlzQW07Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9uVGltZUNoYW5nZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIG1Ib3VyU3Bpbm5lcklucHV0ID0gKEVkaXRUZXh0KSBtSG91clNwaW5uZXIuZmluZFZpZXdCeUlkKFIuaWQubnVtYmVycGlja2VyX2lucHV0KTsKLSAgICAgICAgbUhvdXJTcGlubmVySW5wdXQuc2V0SW1lT3B0aW9ucyhFZGl0b3JJbmZvLklNRV9BQ1RJT05fTkVYVCk7Ci0KLSAgICAgICAgLy8gZGl2aWRlciAob25seSBmb3IgdGhlIG5ldyB3aWRnZXQgc3R5bGUpCi0gICAgICAgIG1EaXZpZGVyID0gKFRleHRWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC5kaXZpZGVyKTsKLSAgICAgICAgaWYgKG1EaXZpZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHNldERpdmlkZXJUZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtaW51dGUKLSAgICAgICAgbU1pbnV0ZVNwaW5uZXIgPSAoTnVtYmVyUGlja2VyKSBmaW5kVmlld0J5SWQoUi5pZC5taW51dGUpOwotICAgICAgICBtTWludXRlU3Bpbm5lci5zZXRNaW5WYWx1ZSgwKTsKLSAgICAgICAgbU1pbnV0ZVNwaW5uZXIuc2V0TWF4VmFsdWUoNTkpOwotICAgICAgICBtTWludXRlU3Bpbm5lci5zZXRPbkxvbmdQcmVzc1VwZGF0ZUludGVydmFsKDEwMCk7Ci0gICAgICAgIG1NaW51dGVTcGlubmVyLnNldEZvcm1hdHRlcihOdW1iZXJQaWNrZXIuZ2V0VHdvRGlnaXRGb3JtYXR0ZXIoKSk7Ci0gICAgICAgIG1NaW51dGVTcGlubmVyLnNldE9uVmFsdWVDaGFuZ2VkTGlzdGVuZXIobmV3IE51bWJlclBpY2tlci5PblZhbHVlQ2hhbmdlTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblZhbHVlQ2hhbmdlKE51bWJlclBpY2tlciBzcGlubmVyLCBpbnQgb2xkVmFsLCBpbnQgbmV3VmFsKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlSW5wdXRTdGF0ZSgpOwotICAgICAgICAgICAgICAgIGludCBtaW5WYWx1ZSA9IG1NaW51dGVTcGlubmVyLmdldE1pblZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaW50IG1heFZhbHVlID0gbU1pbnV0ZVNwaW5uZXIuZ2V0TWF4VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAob2xkVmFsID09IG1heFZhbHVlICYmIG5ld1ZhbCA9PSBtaW5WYWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgbmV3SG91ciA9IG1Ib3VyU3Bpbm5lci5nZXRWYWx1ZSgpICsgMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpczI0SG91clZpZXcoKSAmJiBuZXdIb3VyID09IEhPVVJTX0lOX0hBTEZfREFZKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtSXNBbSA9ICFtSXNBbTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFtUG1Db250cm9sKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldFZhbHVlKG5ld0hvdXIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkVmFsID09IG1pblZhbHVlICYmIG5ld1ZhbCA9PSBtYXhWYWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgbmV3SG91ciA9IG1Ib3VyU3Bpbm5lci5nZXRWYWx1ZSgpIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpczI0SG91clZpZXcoKSAmJiBuZXdIb3VyID09IEhPVVJTX0lOX0hBTEZfREFZIC0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbUlzQW0gPSAhbUlzQW07Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRWYWx1ZShuZXdIb3VyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb25UaW1lQ2hhbmdlZCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgbU1pbnV0ZVNwaW5uZXJJbnB1dCA9IChFZGl0VGV4dCkgbU1pbnV0ZVNwaW5uZXIuZmluZFZpZXdCeUlkKFIuaWQubnVtYmVycGlja2VyX2lucHV0KTsKLSAgICAgICAgbU1pbnV0ZVNwaW5uZXJJbnB1dC5zZXRJbWVPcHRpb25zKEVkaXRvckluZm8uSU1FX0FDVElPTl9ORVhUKTsKLQotICAgICAgICAvKiBHZXQgdGhlIGxvY2FsaXplZCBhbS9wbSBzdHJpbmdzIGFuZCB1c2UgdGhlbSBpbiB0aGUgc3Bpbm5lciAqLwotICAgICAgICBtQW1QbVN0cmluZ3MgPSBuZXcgRGF0ZUZvcm1hdFN5bWJvbHMoKS5nZXRBbVBtU3RyaW5ncygpOwotCi0gICAgICAgIC8vIGFtL3BtCi0gICAgICAgIFZpZXcgYW1QbVZpZXcgPSBmaW5kVmlld0J5SWQoUi5pZC5hbVBtKTsKLSAgICAgICAgaWYgKGFtUG1WaWV3IGluc3RhbmNlb2YgQnV0dG9uKSB7Ci0gICAgICAgICAgICBtQW1QbVNwaW5uZXIgPSBudWxsOwotICAgICAgICAgICAgbUFtUG1TcGlubmVySW5wdXQgPSBudWxsOwotICAgICAgICAgICAgbUFtUG1CdXR0b24gPSAoQnV0dG9uKSBhbVBtVmlldzsKLSAgICAgICAgICAgIG1BbVBtQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyBidXR0b24pIHsKLSAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnJlcXVlc3RGb2N1cygpOwotICAgICAgICAgICAgICAgICAgICBtSXNBbSA9ICFtSXNBbTsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlQW1QbUNvbnRyb2woKTsKLSAgICAgICAgICAgICAgICAgICAgb25UaW1lQ2hhbmdlZCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUFtUG1CdXR0b24gPSBudWxsOwotICAgICAgICAgICAgbUFtUG1TcGlubmVyID0gKE51bWJlclBpY2tlcikgYW1QbVZpZXc7Ci0gICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0TWluVmFsdWUoMCk7Ci0gICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0TWF4VmFsdWUoMSk7Ci0gICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0RGlzcGxheWVkVmFsdWVzKG1BbVBtU3RyaW5ncyk7Ci0gICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0T25WYWx1ZUNoYW5nZWRMaXN0ZW5lcihuZXcgT25WYWx1ZUNoYW5nZUxpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVmFsdWVDaGFuZ2UoTnVtYmVyUGlja2VyIHBpY2tlciwgaW50IG9sZFZhbCwgaW50IG5ld1ZhbCkgewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVJbnB1dFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tlci5yZXF1ZXN0Rm9jdXMoKTsKLSAgICAgICAgICAgICAgICAgICAgbUlzQW0gPSAhbUlzQW07Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFtUG1Db250cm9sKCk7Ci0gICAgICAgICAgICAgICAgICAgIG9uVGltZUNoYW5nZWQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIG1BbVBtU3Bpbm5lcklucHV0ID0gKEVkaXRUZXh0KSBtQW1QbVNwaW5uZXIuZmluZFZpZXdCeUlkKFIuaWQubnVtYmVycGlja2VyX2lucHV0KTsKLSAgICAgICAgICAgIG1BbVBtU3Bpbm5lcklucHV0LnNldEltZU9wdGlvbnMoRWRpdG9ySW5mby5JTUVfQUNUSU9OX0RPTkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzQW1QbUF0U3RhcnQoKSkgewotICAgICAgICAgICAgLy8gTW92ZSB0aGUgYW0vcG0gdmlldyB0byB0aGUgYmVnaW5uaW5nCi0gICAgICAgICAgICBWaWV3R3JvdXAgYW1QbVBhcmVudCA9IChWaWV3R3JvdXApIGZpbmRWaWV3QnlJZChSLmlkLnRpbWVQaWNrZXJMYXlvdXQpOwotICAgICAgICAgICAgYW1QbVBhcmVudC5yZW1vdmVWaWV3KGFtUG1WaWV3KTsKLSAgICAgICAgICAgIGFtUG1QYXJlbnQuYWRkVmlldyhhbVBtVmlldywgMCk7Ci0gICAgICAgICAgICAvLyBTd2FwIGxheW91dCBtYXJnaW5zIGlmIG5lZWRlZC4gVGhleSBtYXkgYmUgbm90IHN5bW1ldHJpY2FsIChPbGQgU3RhbmRhcmQgVGhlbWUgZm9yCi0gICAgICAgICAgICAvLyBleGFtcGxlIGFuZCBub3QgZm9yIEhvbG8gVGhlbWUpCi0gICAgICAgICAgICBWaWV3R3JvdXAuTWFyZ2luTGF5b3V0UGFyYW1zIGxwID0gKFZpZXdHcm91cC5NYXJnaW5MYXlvdXRQYXJhbXMpIGFtUG1WaWV3LmdldExheW91dFBhcmFtcygpOwotICAgICAgICAgICAgZmluYWwgaW50IHN0YXJ0TWFyZ2luID0gbHAuZ2V0TWFyZ2luU3RhcnQoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBlbmRNYXJnaW4gPSBscC5nZXRNYXJnaW5FbmQoKTsKLSAgICAgICAgICAgIGlmIChzdGFydE1hcmdpbiAhPSBlbmRNYXJnaW4pIHsKLSAgICAgICAgICAgICAgICBscC5zZXRNYXJnaW5TdGFydChlbmRNYXJnaW4pOwotICAgICAgICAgICAgICAgIGxwLnNldE1hcmdpbkVuZChzdGFydE1hcmdpbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBnZXRIb3VyRm9ybWF0RGF0YSgpOwotCi0gICAgICAgIC8vIHVwZGF0ZSBjb250cm9scyB0byBpbml0aWFsIHN0YXRlCi0gICAgICAgIHVwZGF0ZUhvdXJDb250cm9sKCk7Ci0gICAgICAgIHVwZGF0ZU1pbnV0ZUNvbnRyb2woKTsKLSAgICAgICAgdXBkYXRlQW1QbUNvbnRyb2woKTsKLQotICAgICAgICBzZXRPblRpbWVDaGFuZ2VkTGlzdGVuZXIoTk9fT1BfQ0hBTkdFX0xJU1RFTkVSKTsKLQotICAgICAgICAvLyBzZXQgdG8gY3VycmVudCB0aW1lCi0gICAgICAgIHNldEN1cnJlbnRIb3VyKG1UZW1wQ2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSk7Ci0gICAgICAgIHNldEN1cnJlbnRNaW51dGUobVRlbXBDYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlOVVRFKSk7Ci0KLSAgICAgICAgaWYgKCFpc0VuYWJsZWQoKSkgewotICAgICAgICAgICAgc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBzZXQgdGhlIGNvbnRlbnQgZGVzY3JpcHRpb25zCi0gICAgICAgIHNldENvbnRlbnREZXNjcmlwdGlvbnMoKTsKLQotICAgICAgICAvLyBJZiBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgdGhpcyB2aWV3IGlzIGltcG9ydGFudCBmb3IgYWNjZXNzaWJpbGl0eS4KLSAgICAgICAgaWYgKGdldEltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoKSA9PSBJTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfQVVUTykgewotICAgICAgICAgICAgc2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eShJTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfWUVTKTsKLSAgICAgICAgfQorICAgIHB1YmxpYyBUaW1lUGlja2VyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGdldEhvdXJGb3JtYXREYXRhKCkgewotICAgICAgICBmaW5hbCBMb2NhbGUgZGVmYXVsdExvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBiZXN0RGF0ZVRpbWVQYXR0ZXJuID0gRGF0ZUZvcm1hdC5nZXRCZXN0RGF0ZVRpbWVQYXR0ZXJuKGRlZmF1bHRMb2NhbGUsCi0gICAgICAgICAgICAgICAgKG1JczI0SG91clZpZXcpID8gIkhtIiA6ICJobSIpOwotICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoUGF0dGVybiA9IGJlc3REYXRlVGltZVBhdHRlcm4ubGVuZ3RoKCk7Ci0gICAgICAgIG1Ib3VyV2l0aFR3b0RpZ2l0ID0gZmFsc2U7Ci0gICAgICAgIGNoYXIgaG91ckZvcm1hdCA9ICdcMCc7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXR1cm5lZCBwYXR0ZXJuIGlzIHNpbmdsZSBvciBkb3VibGUgJ0gnLCAnaCcsICdLJywgJ2snLiBXZSBhbHNvIHNhdmUKLSAgICAgICAgLy8gdGhlIGhvdXIgZm9ybWF0IHRoYXQgd2UgZm91bmQuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoUGF0dGVybjsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBjaGFyIGMgPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLmNoYXJBdChpKTsKLSAgICAgICAgICAgIGlmIChjID09ICdIJyB8fCBjID09ICdoJyB8fCBjID09ICdLJyB8fCBjID09ICdrJykgewotICAgICAgICAgICAgICAgIG1Ib3VyRm9ybWF0ID0gYzsKLSAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBsZW5ndGhQYXR0ZXJuICYmIGMgPT0gYmVzdERhdGVUaW1lUGF0dGVybi5jaGFyQXQoaSArIDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Ib3VyV2l0aFR3b0RpZ2l0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBwdWJsaWMgVGltZVBpY2tlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIG1BdHRycyA9IGF0dHJzOworICAgICAgICBtRGVmU3R5bGVBdHRyID0gZGVmU3R5bGVBdHRyOworICAgICAgICBtRGVmU3R5bGVSZXMgPSBkZWZTdHlsZVJlczsKKworICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLlRpbWVQaWNrZXIsCisgICAgICAgICAgICAgICAgbURlZlN0eWxlQXR0ciwgbURlZlN0eWxlUmVzKTsKKworICAgICAgICAvLyBDcmVhdGUgdGhlIGNvcnJlY3QgVUkgZGVsZWdhdGUuIERlZmF1bHQgaXMgdGhlIGxlZ2FjeSBvbmUuCisgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMZWdhY3lNb2RlID0gc2hvdWxkRm9yY2VMZWdhY3lNb2RlKCkgPworICAgICAgICAgICAgICAgIHRydWUgOiBhLmdldEJvb2xlYW4oUi5zdHlsZWFibGUuVGltZVBpY2tlcl9sZWdhY3lNb2RlLCB0cnVlKTsKKyAgICAgICAgc2V0TGVnYWN5TW9kZShpc0xlZ2FjeU1vZGUpOwogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiBpc0FtUG1BdFN0YXJ0KCkgewotICAgICAgICBmaW5hbCBMb2NhbGUgZGVmYXVsdExvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBiZXN0RGF0ZVRpbWVQYXR0ZXJuID0gRGF0ZUZvcm1hdC5nZXRCZXN0RGF0ZVRpbWVQYXR0ZXJuKGRlZmF1bHRMb2NhbGUsCi0gICAgICAgICAgICAgICAgImhtIiAvKiBza2VsZXRvbiAqLyk7Ci0KLSAgICAgICAgcmV0dXJuIGJlc3REYXRlVGltZVBhdHRlcm4uc3RhcnRzV2l0aCgiYSIpOworICAgIHByaXZhdGUgYm9vbGVhbiBzaG91bGRGb3JjZUxlZ2FjeU1vZGUoKSB7CisgICAgICAgIGZpbmFsIGludCB0YXJnZXRTZGtWZXJzaW9uID0gZ2V0Q29udGV4dCgpLmdldEFwcGxpY2F0aW9uSW5mbygpLnRhcmdldFNka1ZlcnNpb247CisgICAgICAgIHJldHVybiB0YXJnZXRTZGtWZXJzaW9uIDwgS0lUS0FUOwogICAgIH0KIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgIGlmIChtSXNFbmFibGVkID09IGVuYWJsZWQpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzdXBlci5zZXRFbmFibGVkKGVuYWJsZWQpOwotICAgICAgICBtTWludXRlU3Bpbm5lci5zZXRFbmFibGVkKGVuYWJsZWQpOwotICAgICAgICBpZiAobURpdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbURpdmlkZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgfQotICAgICAgICBtSG91clNwaW5uZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgaWYgKG1BbVBtU3Bpbm5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1BbVBtQnV0dG9uLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgbUlzRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgcHJpdmF0ZSBUaW1lUGlja2VyRGVsZWdhdGUgY3JlYXRlTGVnYWN5VUlEZWxlZ2F0ZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywKKyAgICAgICAgICAgIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICByZXR1cm4gbmV3IExlZ2FjeVRpbWVQaWNrZXJEZWxlZ2F0ZSh0aGlzLCBjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gbUlzRW5hYmxlZDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7Ci0gICAgICAgIHN1cGVyLm9uQ29uZmlndXJhdGlvbkNoYW5nZWQobmV3Q29uZmlnKTsKLSAgICAgICAgc2V0Q3VycmVudExvY2FsZShuZXdDb25maWcubG9jYWxlKTsKKyAgICBwcml2YXRlIFRpbWVQaWNrZXJEZWxlZ2F0ZSBjcmVhdGVOZXdVSURlbGVnYXRlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLAorICAgICAgICAgICAgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHJldHVybiBuZXcgYW5kcm9pZC53aWRnZXQuVGltZVBpY2tlckRlbGVnYXRlKHRoaXMsIGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsCisgICAgICAgICAgICAgICAgZGVmU3R5bGVSZXMpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIFNldHMgdGhlIGN1cnJlbnQgbG9jYWxlLgotICAgICAqCi0gICAgICogQHBhcmFtIGxvY2FsZSBUaGUgY3VycmVudCBsb2NhbGUuCisgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0Q3VycmVudExvY2FsZShMb2NhbGUgbG9jYWxlKSB7Ci0gICAgICAgIGlmIChsb2NhbGUuZXF1YWxzKG1DdXJyZW50TG9jYWxlKSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1DdXJyZW50TG9jYWxlID0gbG9jYWxlOwotICAgICAgICBtVGVtcENhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UobG9jYWxlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIHNhdmUgLyByZXN0b3JlIHN0YXRlIG9mIHRpbWUgcGlja2VyCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2F2ZWRTdGF0ZSBleHRlbmRzIEJhc2VTYXZlZFN0YXRlIHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtSG91cjsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtTWludXRlOwotCi0gICAgICAgIHByaXZhdGUgU2F2ZWRTdGF0ZShQYXJjZWxhYmxlIHN1cGVyU3RhdGUsIGludCBob3VyLCBpbnQgbWludXRlKSB7Ci0gICAgICAgICAgICBzdXBlcihzdXBlclN0YXRlKTsKLSAgICAgICAgICAgIG1Ib3VyID0gaG91cjsKLSAgICAgICAgICAgIG1NaW51dGUgPSBtaW51dGU7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFNhdmVkU3RhdGUoUGFyY2VsIGluKSB7Ci0gICAgICAgICAgICBzdXBlcihpbik7Ci0gICAgICAgICAgICBtSG91ciA9IGluLnJlYWRJbnQoKTsKLSAgICAgICAgICAgIG1NaW51dGUgPSBpbi5yZWFkSW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgaW50IGdldEhvdXIoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUhvdXI7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgaW50IGdldE1pbnV0ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtTWludXRlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIGRlc3QsIGludCBmbGFncykgewotICAgICAgICAgICAgc3VwZXIud3JpdGVUb1BhcmNlbChkZXN0LCBmbGFncyk7Ci0gICAgICAgICAgICBkZXN0LndyaXRlSW50KG1Ib3VyKTsKLSAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobU1pbnV0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncyh7InVudXNlZCIsICJoaWRpbmcifSkKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYXJjZWxhYmxlLkNyZWF0b3I8U2F2ZWRTdGF0ZT4gQ1JFQVRPUiA9IG5ldyBDcmVhdG9yPFNhdmVkU3RhdGU+KCkgewotICAgICAgICAgICAgcHVibGljIFNhdmVkU3RhdGUgY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNhdmVkU3RhdGUoaW4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgU2F2ZWRTdGF0ZVtdIG5ld0FycmF5KGludCBzaXplKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTYXZlZFN0YXRlW3NpemVdOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBQYXJjZWxhYmxlIG9uU2F2ZUluc3RhbmNlU3RhdGUoKSB7Ci0gICAgICAgIFBhcmNlbGFibGUgc3VwZXJTdGF0ZSA9IHN1cGVyLm9uU2F2ZUluc3RhbmNlU3RhdGUoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBTYXZlZFN0YXRlKHN1cGVyU3RhdGUsIGdldEN1cnJlbnRIb3VyKCksIGdldEN1cnJlbnRNaW51dGUoKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25SZXN0b3JlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN0YXRlKSB7Ci0gICAgICAgIFNhdmVkU3RhdGUgc3MgPSAoU2F2ZWRTdGF0ZSkgc3RhdGU7Ci0gICAgICAgIHN1cGVyLm9uUmVzdG9yZUluc3RhbmNlU3RhdGUoc3MuZ2V0U3VwZXJTdGF0ZSgpKTsKLSAgICAgICAgc2V0Q3VycmVudEhvdXIoc3MuZ2V0SG91cigpKTsKLSAgICAgICAgc2V0Q3VycmVudE1pbnV0ZShzcy5nZXRNaW51dGUoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBjYWxsYmFjayB0aGF0IGluZGljYXRlcyB0aGUgdGltZSBoYXMgYmVlbiBhZGp1c3RlZCBieSB0aGUgdXNlci4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvblRpbWVDaGFuZ2VkTGlzdGVuZXIgdGhlIGNhbGxiYWNrLCBzaG91bGQgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0T25UaW1lQ2hhbmdlZExpc3RlbmVyKE9uVGltZUNoYW5nZWRMaXN0ZW5lciBvblRpbWVDaGFuZ2VkTGlzdGVuZXIpIHsKLSAgICAgICAgbU9uVGltZUNoYW5nZWRMaXN0ZW5lciA9IG9uVGltZUNoYW5nZWRMaXN0ZW5lcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGhvdXIgaW4gdGhlIHJhbmdlICgwLTIzKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRDdXJyZW50SG91cigpIHsKLSAgICAgICAgaW50IGN1cnJlbnRIb3VyID0gbUhvdXJTcGlubmVyLmdldFZhbHVlKCk7Ci0gICAgICAgIGlmIChpczI0SG91clZpZXcoKSkgewotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRIb3VyOwotICAgICAgICB9IGVsc2UgaWYgKG1Jc0FtKSB7Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudEhvdXIgJSBIT1VSU19JTl9IQUxGX0RBWTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiAoY3VycmVudEhvdXIgJSBIT1VSU19JTl9IQUxGX0RBWSkgKyBIT1VSU19JTl9IQUxGX0RBWTsKLSAgICAgICAgfQorICAgIHB1YmxpYyB2b2lkIHNldExlZ2FjeU1vZGUoYm9vbGVhbiBpc0xlZ2FjeU1vZGUpIHsKKyAgICAgICAgcmVtb3ZlQWxsVmlld3NJbkxheW91dCgpOworICAgICAgICBtRGVsZWdhdGUgPSBpc0xlZ2FjeU1vZGUgPworICAgICAgICAgICAgICAgIGNyZWF0ZUxlZ2FjeVVJRGVsZWdhdGUobUNvbnRleHQsIG1BdHRycywgbURlZlN0eWxlQXR0ciwgbURlZlN0eWxlUmVzKSA6CisgICAgICAgICAgICAgICAgY3JlYXRlTmV3VUlEZWxlZ2F0ZShtQ29udGV4dCwgbUF0dHJzLCBtRGVmU3R5bGVBdHRyLCBtRGVmU3R5bGVSZXMpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCBob3VyLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRIb3VyKEludGVnZXIgY3VycmVudEhvdXIpIHsKLSAgICAgICAgc2V0Q3VycmVudEhvdXIoY3VycmVudEhvdXIsIHRydWUpOworICAgICAgICBtRGVsZWdhdGUuc2V0Q3VycmVudEhvdXIoY3VycmVudEhvdXIpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBzZXRDdXJyZW50SG91cihJbnRlZ2VyIGN1cnJlbnRIb3VyLCBib29sZWFuIG5vdGlmeVRpbWVDaGFuZ2VkKSB7Ci0gICAgICAgIC8vIHdoeSB3YXMgSW50ZWdlciB1c2VkIGluIHRoZSBmaXJzdCBwbGFjZT8KLSAgICAgICAgaWYgKGN1cnJlbnRIb3VyID09IG51bGwgfHwgY3VycmVudEhvdXIgPT0gZ2V0Q3VycmVudEhvdXIoKSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghaXMyNEhvdXJWaWV3KCkpIHsKLSAgICAgICAgICAgIC8vIGNvbnZlcnQgWzAsMjNdIG9yZGluYWwgdG8gd2FsbCBjbG9jayBkaXNwbGF5Ci0gICAgICAgICAgICBpZiAoY3VycmVudEhvdXIgPj0gSE9VUlNfSU5fSEFMRl9EQVkpIHsKLSAgICAgICAgICAgICAgICBtSXNBbSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SG91ciA+IEhPVVJTX0lOX0hBTEZfREFZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRIb3VyID0gY3VycmVudEhvdXIgLSBIT1VSU19JTl9IQUxGX0RBWTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1Jc0FtID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudEhvdXIgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50SG91ciA9IEhPVVJTX0lOX0hBTEZfREFZOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVwZGF0ZUFtUG1Db250cm9sKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbUhvdXJTcGlubmVyLnNldFZhbHVlKGN1cnJlbnRIb3VyKTsKLSAgICAgICAgaWYgKG5vdGlmeVRpbWVDaGFuZ2VkKSB7Ci0gICAgICAgICAgICBvblRpbWVDaGFuZ2VkKCk7Ci0gICAgICAgIH0KKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGhvdXIgaW4gdGhlIHJhbmdlICgwLTIzKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgSW50ZWdlciBnZXRDdXJyZW50SG91cigpIHsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRDdXJyZW50SG91cigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgY3VycmVudCBtaW51dGUgKDAtNTkpLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRNaW51dGUoSW50ZWdlciBjdXJyZW50TWludXRlKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRDdXJyZW50TWludXRlKGN1cnJlbnRNaW51dGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgbWludXRlLgorICAgICAqLworICAgIHB1YmxpYyBJbnRlZ2VyIGdldEN1cnJlbnRNaW51dGUoKSB7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0Q3VycmVudE1pbnV0ZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDc4LDIyMyArMTU3LDE3NCBAQAogICAgICAqIEBwYXJhbSBpczI0SG91clZpZXcgVHJ1ZSA9IDI0IGhvdXIgbW9kZS4gRmFsc2UgPSBBTS9QTS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRJczI0SG91clZpZXcoQm9vbGVhbiBpczI0SG91clZpZXcpIHsKLSAgICAgICAgaWYgKG1JczI0SG91clZpZXcgPT0gaXMyNEhvdXJWaWV3KSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gY2FjaGUgdGhlIGN1cnJlbnQgaG91ciBzaW5jZSBzcGlubmVyIHJhbmdlIGNoYW5nZXMgYW5kIEJFRk9SRSBjaGFuZ2luZyBtSXMyNEhvdXJWaWV3ISEKLSAgICAgICAgaW50IGN1cnJlbnRIb3VyID0gZ2V0Q3VycmVudEhvdXIoKTsKLSAgICAgICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50IGhlcmUuCi0gICAgICAgIG1JczI0SG91clZpZXcgPSBpczI0SG91clZpZXc7Ci0gICAgICAgIGdldEhvdXJGb3JtYXREYXRhKCk7Ci0gICAgICAgIHVwZGF0ZUhvdXJDb250cm9sKCk7Ci0gICAgICAgIC8vIHNldCB2YWx1ZSBhZnRlciBzcGlubmVyIHJhbmdlIGlzIHVwZGF0ZWQgLSBiZSBhd2FyZSB0aGF0IGJlY2F1c2UgbUlzMjRIb3VyVmlldyBoYXMKLSAgICAgICAgLy8gY2hhbmdlZCB0aGVuIGdldEN1cnJlbnRIb3VyKCkgaXMgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50SG91ciB3ZSBjYWNoZWQgYmVmb3JlIHNvCi0gICAgICAgIC8vIGV4cGxpY2l0bHkgYXNrIGZvciAqbm90KiBwcm9wYWdhdGluZyBhbnkgb25UaW1lQ2hhbmdlZCgpCi0gICAgICAgIHNldEN1cnJlbnRIb3VyKGN1cnJlbnRIb3VyLCBmYWxzZSAvKiBubyBvblRpbWVDaGFuZ2VkKCkgKi8pOwotICAgICAgICB1cGRhdGVNaW51dGVDb250cm9sKCk7Ci0gICAgICAgIHVwZGF0ZUFtUG1Db250cm9sKCk7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRJczI0SG91clZpZXcoaXMyNEhvdXJWaWV3KTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpcyBpbiAyNCBob3VyIHZpZXcgZWxzZSBmYWxzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpczI0SG91clZpZXcoKSB7Ci0gICAgICAgIHJldHVybiBtSXMyNEhvdXJWaWV3OworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmlzMjRIb3VyVmlldygpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgbWludXRlLgorICAgICAqIFNldCB0aGUgY2FsbGJhY2sgdGhhdCBpbmRpY2F0ZXMgdGhlIHRpbWUgaGFzIGJlZW4gYWRqdXN0ZWQgYnkgdGhlIHVzZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb25UaW1lQ2hhbmdlZExpc3RlbmVyIHRoZSBjYWxsYmFjaywgc2hvdWxkIG5vdCBiZSBudWxsLgogICAgICAqLwotICAgIHB1YmxpYyBJbnRlZ2VyIGdldEN1cnJlbnRNaW51dGUoKSB7Ci0gICAgICAgIHJldHVybiBtTWludXRlU3Bpbm5lci5nZXRWYWx1ZSgpOworICAgIHB1YmxpYyB2b2lkIHNldE9uVGltZUNoYW5nZWRMaXN0ZW5lcihPblRpbWVDaGFuZ2VkTGlzdGVuZXIgb25UaW1lQ2hhbmdlZExpc3RlbmVyKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRPblRpbWVDaGFuZ2VkTGlzdGVuZXIob25UaW1lQ2hhbmdlZExpc3RlbmVyKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIGN1cnJlbnQgbWludXRlICgwLTU5KS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50TWludXRlKEludGVnZXIgY3VycmVudE1pbnV0ZSkgewotICAgICAgICBpZiAoY3VycmVudE1pbnV0ZSA9PSBnZXRDdXJyZW50TWludXRlKCkpIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBpZiAobURlbGVnYXRlLmlzRW5hYmxlZCgpID09IGVuYWJsZWQpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtTWludXRlU3Bpbm5lci5zZXRWYWx1ZShjdXJyZW50TWludXRlKTsKLSAgICAgICAgb25UaW1lQ2hhbmdlZCgpOworICAgICAgICBzdXBlci5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICBtRGVsZWdhdGUuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuaXNFbmFibGVkKCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVGhlIHRpbWUgc2VwYXJhdG9yIGlzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgQ0xEUiBhbmQgY2Fubm90IGJlIHN1cHBvc2VkIHRvIGJlICI6Ii4KLSAgICAgKgotICAgICAqIFNlZSBodHRwOi8vdW5pY29kZS5vcmcvY2xkci90cmFjL2Jyb3dzZXIvdHJ1bmsvY29tbW9uL21haW4KLSAgICAgKgotICAgICAqIFdlIHBhc3MgdGhlIGNvcnJlY3QgInNrZWxldG9uIiBkZXBlbmRpbmcgb24gMTIgb3IgMjQgaG91cnMgdmlldyBhbmQgdGhlbiBleHRyYWN0IHRoZQotICAgICAqIHNlcGFyYXRvciBhcyB0aGUgY2hhcmFjdGVyIHdoaWNoIGlzIGp1c3QgYWZ0ZXIgdGhlIGhvdXIgbWFya2VyIGluIHRoZSByZXR1cm5lZCBwYXR0ZXJuLgorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldERpdmlkZXJUZXh0KCkgewotICAgICAgICBmaW5hbCBMb2NhbGUgZGVmYXVsdExvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBza2VsZXRvbiA9IChtSXMyNEhvdXJWaWV3KSA/ICJIbSIgOiAiaG0iOwotICAgICAgICBmaW5hbCBTdHJpbmcgYmVzdERhdGVUaW1lUGF0dGVybiA9IERhdGVGb3JtYXQuZ2V0QmVzdERhdGVUaW1lUGF0dGVybihkZWZhdWx0TG9jYWxlLAotICAgICAgICAgICAgICAgIHNrZWxldG9uKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNlcGFyYXRvclRleHQ7Ci0gICAgICAgIGludCBob3VySW5kZXggPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLmxhc3RJbmRleE9mKCdIJyk7Ci0gICAgICAgIGlmIChob3VySW5kZXggPT0gLTEpIHsKLSAgICAgICAgICAgIGhvdXJJbmRleCA9IGJlc3REYXRlVGltZVBhdHRlcm4ubGFzdEluZGV4T2YoJ2gnKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaG91ckluZGV4ID09IC0xKSB7Ci0gICAgICAgICAgICAvLyBEZWZhdWx0IGNhc2UKLSAgICAgICAgICAgIHNlcGFyYXRvclRleHQgPSAiOiI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgbWludXRlSW5kZXggPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLmluZGV4T2YoJ20nLCBob3VySW5kZXggKyAxKTsKLSAgICAgICAgICAgIGlmICAobWludXRlSW5kZXggPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBzZXBhcmF0b3JUZXh0ID0gQ2hhcmFjdGVyLnRvU3RyaW5nKGJlc3REYXRlVGltZVBhdHRlcm4uY2hhckF0KGhvdXJJbmRleCArIDEpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2VwYXJhdG9yVGV4dCA9IGJlc3REYXRlVGltZVBhdHRlcm4uc3Vic3RyaW5nKGhvdXJJbmRleCArIDEsIG1pbnV0ZUluZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtRGl2aWRlci5zZXRUZXh0KHNlcGFyYXRvclRleHQpOworICAgIHB1YmxpYyB2b2lkIHNldFNob3dEb25lQnV0dG9uKGJvb2xlYW4gc2hvd0RvbmVCdXR0b24pIHsKKyAgICAgICAgbURlbGVnYXRlLnNldFNob3dEb25lQnV0dG9uKHNob3dEb25lQnV0dG9uKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldERpc21pc3NDYWxsYmFjayhUaW1lUGlja2VyRGlzbWlzc0NhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXREaXNtaXNzQ2FsbGJhY2soY2FsbGJhY2spOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0QmFzZWxpbmUoKSB7Ci0gICAgICAgIHJldHVybiBtSG91clNwaW5uZXIuZ2V0QmFzZWxpbmUoKTsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRCYXNlbGluZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQoQ29uZmlndXJhdGlvbiBuZXdDb25maWcpIHsKKyAgICAgICAgc3VwZXIub25Db25maWd1cmF0aW9uQ2hhbmdlZChuZXdDb25maWcpOworICAgICAgICBtRGVsZWdhdGUub25Db25maWd1cmF0aW9uQ2hhbmdlZChuZXdDb25maWcpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBQYXJjZWxhYmxlIG9uU2F2ZUluc3RhbmNlU3RhdGUoKSB7CisgICAgICAgIFBhcmNlbGFibGUgc3VwZXJTdGF0ZSA9IHN1cGVyLm9uU2F2ZUluc3RhbmNlU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5vblNhdmVJbnN0YW5jZVN0YXRlKHN1cGVyU3RhdGUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdG9yZUluc3RhbmNlU3RhdGUoUGFyY2VsYWJsZSBzdGF0ZSkgeworICAgICAgICBCYXNlU2F2ZWRTdGF0ZSBzcyA9IChCYXNlU2F2ZWRTdGF0ZSkgc3RhdGU7CisgICAgICAgIHN1cGVyLm9uUmVzdG9yZUluc3RhbmNlU3RhdGUoc3MuZ2V0U3VwZXJTdGF0ZSgpKTsKKyAgICAgICAgbURlbGVnYXRlLm9uUmVzdG9yZUluc3RhbmNlU3RhdGUoc3MpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIG9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5kaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgewogICAgICAgICBzdXBlci5vblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKLQotICAgICAgICBpbnQgZmxhZ3MgPSBEYXRlVXRpbHMuRk9STUFUX1NIT1dfVElNRTsKLSAgICAgICAgaWYgKG1JczI0SG91clZpZXcpIHsKLSAgICAgICAgICAgIGZsYWdzIHw9IERhdGVVdGlscy5GT1JNQVRfMjRIT1VSOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmxhZ3MgfD0gRGF0ZVV0aWxzLkZPUk1BVF8xMkhPVVI7Ci0gICAgICAgIH0KLSAgICAgICAgbVRlbXBDYWxlbmRhci5zZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIGdldEN1cnJlbnRIb3VyKCkpOwotICAgICAgICBtVGVtcENhbGVuZGFyLnNldChDYWxlbmRhci5NSU5VVEUsIGdldEN1cnJlbnRNaW51dGUoKSk7Ci0gICAgICAgIFN0cmluZyBzZWxlY3RlZERhdGVVdHRlcmFuY2UgPSBEYXRlVXRpbHMuZm9ybWF0RGF0ZVRpbWUobUNvbnRleHQsCi0gICAgICAgICAgICAgICAgbVRlbXBDYWxlbmRhci5nZXRUaW1lSW5NaWxsaXMoKSwgZmxhZ3MpOwotICAgICAgICBldmVudC5nZXRUZXh0KCkuYWRkKHNlbGVjdGVkRGF0ZVV0dGVyYW5jZSk7CisgICAgICAgIG1EZWxlZ2F0ZS5vblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CiAgICAgICAgIHN1cGVyLm9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7Ci0gICAgICAgIGV2ZW50LnNldENsYXNzTmFtZShUaW1lUGlja2VyLmNsYXNzLmdldE5hbWUoKSk7CisgICAgICAgIG1EZWxlZ2F0ZS5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gaW5mbykgewogICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oaW5mbyk7Ci0gICAgICAgIGluZm8uc2V0Q2xhc3NOYW1lKFRpbWVQaWNrZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICAgICAgbURlbGVnYXRlLm9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhpbmZvKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlSG91ckNvbnRyb2woKSB7Ci0gICAgICAgIGlmIChpczI0SG91clZpZXcoKSkgewotICAgICAgICAgICAgLy8gJ2snIG1lYW5zIDEtMjQgaG91cgotICAgICAgICAgICAgaWYgKG1Ib3VyRm9ybWF0ID09ICdrJykgewotICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRNaW5WYWx1ZSgxKTsKLSAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0TWF4VmFsdWUoMjQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0TWluVmFsdWUoMCk7Ci0gICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldE1heFZhbHVlKDIzKTsKKyAgICAvKioKKyAgICAgKiBBIGRlbGVnYXRlIGludGVyZmFjZSB0aGF0IGRlZmluZWQgdGhlIHB1YmxpYyBBUEkgb2YgdGhlIFRpbWVQaWNrZXIuIEFsbG93cyBkaWZmZXJlbnQKKyAgICAgKiBUaW1lUGlja2VyIGltcGxlbWVudGF0aW9ucy4gVGhpcyB3b3VsZCBuZWVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBUaW1lUGlja2VyIGRlbGVnYXRlcworICAgICAqIGZvciB0aGUgcmVhbCBiZWhhdmlvci4KKyAgICAgKi8KKyAgICBpbnRlcmZhY2UgVGltZVBpY2tlckRlbGVnYXRlIHsKKyAgICAgICAgdm9pZCBzZXRDdXJyZW50SG91cihJbnRlZ2VyIGN1cnJlbnRIb3VyKTsKKyAgICAgICAgSW50ZWdlciBnZXRDdXJyZW50SG91cigpOworCisgICAgICAgIHZvaWQgc2V0Q3VycmVudE1pbnV0ZShJbnRlZ2VyIGN1cnJlbnRNaW51dGUpOworICAgICAgICBJbnRlZ2VyIGdldEN1cnJlbnRNaW51dGUoKTsKKworICAgICAgICB2b2lkIHNldElzMjRIb3VyVmlldyhCb29sZWFuIGlzMjRIb3VyVmlldyk7CisgICAgICAgIGJvb2xlYW4gaXMyNEhvdXJWaWV3KCk7CisKKyAgICAgICAgdm9pZCBzZXRPblRpbWVDaGFuZ2VkTGlzdGVuZXIoT25UaW1lQ2hhbmdlZExpc3RlbmVyIG9uVGltZUNoYW5nZWRMaXN0ZW5lcik7CisKKyAgICAgICAgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7CisgICAgICAgIGJvb2xlYW4gaXNFbmFibGVkKCk7CisKKyAgICAgICAgdm9pZCBzZXRTaG93RG9uZUJ1dHRvbihib29sZWFuIHNob3dEb25lQnV0dG9uKTsKKyAgICAgICAgdm9pZCBzZXREaXNtaXNzQ2FsbGJhY2soVGltZVBpY2tlckRpc21pc3NDYWxsYmFjayBjYWxsYmFjayk7CisKKyAgICAgICAgaW50IGdldEJhc2VsaW5lKCk7CisKKyAgICAgICAgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKTsKKworICAgICAgICBQYXJjZWxhYmxlIG9uU2F2ZUluc3RhbmNlU3RhdGUoUGFyY2VsYWJsZSBzdXBlclN0YXRlKTsKKyAgICAgICAgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKFBhcmNlbGFibGUgc3RhdGUpOworCisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hQb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpOworICAgICAgICB2b2lkIG9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KTsKKyAgICAgICAgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KTsKKyAgICAgICAgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEEgY2FsbGJhY2sgaW50ZXJmYWNlIGZvciBkaXNtaXNzaW5nIHRoZSBUaW1lUGlja2VyIHdoZW4gaW5jbHVkZWQgaW50byBhIERpYWxvZworICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBUaW1lUGlja2VyRGlzbWlzc0NhbGxiYWNrIHsKKyAgICAgICAgdm9pZCBkaXNtaXNzKFRpbWVQaWNrZXIgdmlldywgYm9vbGVhbiBpc0NhbmNlbCwgaW50IGhvdXJPZkRheSwgaW50IG1pbnV0ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQW4gYWJzdHJhY3QgY2xhc3Mgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYSBzdGFydCBmb3IgVGltZVBpY2tlciBpbXBsZW1lbnRhdGlvbnMKKyAgICAgKi8KKyAgICBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgQWJzdHJhY3RUaW1lUGlja2VyRGVsZWdhdGUgaW1wbGVtZW50cyBUaW1lUGlja2VyRGVsZWdhdGUgeworICAgICAgICAvLyBUaGUgZGVsZWdhdG9yCisgICAgICAgIHByb3RlY3RlZCBUaW1lUGlja2VyIG1EZWxlZ2F0b3I7CisKKyAgICAgICAgLy8gVGhlIGNvbnRleHQKKyAgICAgICAgcHJvdGVjdGVkIENvbnRleHQgbUNvbnRleHQ7CisKKyAgICAgICAgLy8gVGhlIGN1cnJlbnQgbG9jYWxlCisgICAgICAgIHByb3RlY3RlZCBMb2NhbGUgbUN1cnJlbnRMb2NhbGU7CisKKyAgICAgICAgLy8gQ2FsbGJhY2tzCisgICAgICAgIHByb3RlY3RlZCAgT25UaW1lQ2hhbmdlZExpc3RlbmVyIG1PblRpbWVDaGFuZ2VkTGlzdGVuZXI7CisKKyAgICAgICAgcHVibGljIEFic3RyYWN0VGltZVBpY2tlckRlbGVnYXRlKFRpbWVQaWNrZXIgZGVsZWdhdG9yLCBDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIG1EZWxlZ2F0b3IgPSBkZWxlZ2F0b3I7CisgICAgICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisKKyAgICAgICAgICAgIC8vIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGxvY2FsZQorICAgICAgICAgICAgc2V0Q3VycmVudExvY2FsZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAgICAgaWYgKGxvY2FsZS5lcXVhbHMobUN1cnJlbnRMb2NhbGUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gJ0snIG1lYW5zIDAtMTEgaG91cgotICAgICAgICAgICAgaWYgKG1Ib3VyRm9ybWF0ID09ICdLJykgewotICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRNaW5WYWx1ZSgwKTsKLSAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0TWF4VmFsdWUoMTEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0TWluVmFsdWUoMSk7Ci0gICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldE1heFZhbHVlKDEyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtSG91clNwaW5uZXIuc2V0Rm9ybWF0dGVyKG1Ib3VyV2l0aFR3b0RpZ2l0ID8gTnVtYmVyUGlja2VyLmdldFR3b0RpZ2l0Rm9ybWF0dGVyKCkgOiBudWxsKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlTWludXRlQ29udHJvbCgpIHsKLSAgICAgICAgaWYgKGlzMjRIb3VyVmlldygpKSB7Ci0gICAgICAgICAgICBtTWludXRlU3Bpbm5lcklucHV0LnNldEltZU9wdGlvbnMoRWRpdG9ySW5mby5JTUVfQUNUSU9OX0RPTkUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbU1pbnV0ZVNwaW5uZXJJbnB1dC5zZXRJbWVPcHRpb25zKEVkaXRvckluZm8uSU1FX0FDVElPTl9ORVhUKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVBbVBtQ29udHJvbCgpIHsKLSAgICAgICAgaWYgKGlzMjRIb3VyVmlldygpKSB7Ci0gICAgICAgICAgICBpZiAobUFtUG1TcGlubmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtQW1QbUJ1dHRvbi5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBtSXNBbSA/IENhbGVuZGFyLkFNIDogQ2FsZW5kYXIuUE07Ci0gICAgICAgICAgICBpZiAobUFtUG1TcGlubmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0VmFsdWUoaW5kZXgpOwotICAgICAgICAgICAgICAgIG1BbVBtU3Bpbm5lci5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1BbVBtQnV0dG9uLnNldFRleHQobUFtUG1TdHJpbmdzW2luZGV4XSk7Ci0gICAgICAgICAgICAgICAgbUFtUG1CdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19TRUxFQ1RFRCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG9uVGltZUNoYW5nZWQoKSB7Ci0gICAgICAgIHNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19TRUxFQ1RFRCk7Ci0gICAgICAgIGlmIChtT25UaW1lQ2hhbmdlZExpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1PblRpbWVDaGFuZ2VkTGlzdGVuZXIub25UaW1lQ2hhbmdlZCh0aGlzLCBnZXRDdXJyZW50SG91cigpLCBnZXRDdXJyZW50TWludXRlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldENvbnRlbnREZXNjcmlwdGlvbnMoKSB7Ci0gICAgICAgIC8vIE1pbnV0ZQotICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obU1pbnV0ZVNwaW5uZXIsIFIuaWQuaW5jcmVtZW50LAotICAgICAgICAgICAgICAgIFIuc3RyaW5nLnRpbWVfcGlja2VyX2luY3JlbWVudF9taW51dGVfYnV0dG9uKTsKLSAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1NaW51dGVTcGlubmVyLCBSLmlkLmRlY3JlbWVudCwKLSAgICAgICAgICAgICAgICBSLnN0cmluZy50aW1lX3BpY2tlcl9kZWNyZW1lbnRfbWludXRlX2J1dHRvbik7Ci0gICAgICAgIC8vIEhvdXIKLSAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1Ib3VyU3Bpbm5lciwgUi5pZC5pbmNyZW1lbnQsCi0gICAgICAgICAgICAgICAgUi5zdHJpbmcudGltZV9waWNrZXJfaW5jcmVtZW50X2hvdXJfYnV0dG9uKTsKLSAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1Ib3VyU3Bpbm5lciwgUi5pZC5kZWNyZW1lbnQsCi0gICAgICAgICAgICAgICAgUi5zdHJpbmcudGltZV9waWNrZXJfZGVjcmVtZW50X2hvdXJfYnV0dG9uKTsKLSAgICAgICAgLy8gQU0vUE0KLSAgICAgICAgaWYgKG1BbVBtU3Bpbm5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obUFtUG1TcGlubmVyLCBSLmlkLmluY3JlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcudGltZV9waWNrZXJfaW5jcmVtZW50X3NldF9wbV9idXR0b24pOwotICAgICAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1BbVBtU3Bpbm5lciwgUi5pZC5kZWNyZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLnRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24oVmlldyByb290LCBpbnQgdmlld0lkLCBpbnQgY29udERlc2NSZXNJZCkgewotICAgICAgICBWaWV3IHRhcmdldCA9IHJvb3QuZmluZFZpZXdCeUlkKHZpZXdJZCk7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkgewotICAgICAgICAgICAgdGFyZ2V0LnNldENvbnRlbnREZXNjcmlwdGlvbihtQ29udGV4dC5nZXRTdHJpbmcoY29udERlc2NSZXNJZCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUlucHV0U3RhdGUoKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHZhbHVlIGFuZCB0aGUgSU1FIGlzIGFjdGl2ZQotICAgICAgICAvLyBmb3Igb25lIG9mIHRoZSBpbnB1dHMgaWYgdGhpcyB3aWRnZXQsIHRoZSBJTUUgaXMgY2xvc2VkLiBJZiB0aGUgdXNlcgotICAgICAgICAvLyBjaGFuZ2VkIHRoZSB2YWx1ZSB2aWEgdGhlIElNRSBhbmQgdGhlcmUgaXMgYSBuZXh0IGlucHV0IHRoZSBJTUUgd2lsbAotICAgICAgICAvLyBiZSBzaG93biwgb3RoZXJ3aXNlIHRoZSB1c2VyIGNob3NlIGFub3RoZXIgbWVhbnMgb2YgY2hhbmdpbmcgdGhlCi0gICAgICAgIC8vIHZhbHVlIGFuZCBoYXZpbmcgdGhlIElNRSB1cCBtYWtlcyBubyBzZW5zZS4KLSAgICAgICAgSW5wdXRNZXRob2RNYW5hZ2VyIGlucHV0TWV0aG9kTWFuYWdlciA9IElucHV0TWV0aG9kTWFuYWdlci5wZWVrSW5zdGFuY2UoKTsKLSAgICAgICAgaWYgKGlucHV0TWV0aG9kTWFuYWdlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoaW5wdXRNZXRob2RNYW5hZ2VyLmlzQWN0aXZlKG1Ib3VyU3Bpbm5lcklucHV0KSkgewotICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lcklucHV0LmNsZWFyRm9jdXMoKTsKLSAgICAgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXIuaGlkZVNvZnRJbnB1dEZyb21XaW5kb3coZ2V0V2luZG93VG9rZW4oKSwgMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0TWV0aG9kTWFuYWdlci5pc0FjdGl2ZShtTWludXRlU3Bpbm5lcklucHV0KSkgewotICAgICAgICAgICAgICAgIG1NaW51dGVTcGlubmVySW5wdXQuY2xlYXJGb2N1cygpOwotICAgICAgICAgICAgICAgIGlucHV0TWV0aG9kTWFuYWdlci5oaWRlU29mdElucHV0RnJvbVdpbmRvdyhnZXRXaW5kb3dUb2tlbigpLCAwKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRNZXRob2RNYW5hZ2VyLmlzQWN0aXZlKG1BbVBtU3Bpbm5lcklucHV0KSkgewotICAgICAgICAgICAgICAgIG1BbVBtU3Bpbm5lcklucHV0LmNsZWFyRm9jdXMoKTsKLSAgICAgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXIuaGlkZVNvZnRJbnB1dEZyb21XaW5kb3coZ2V0V2luZG93VG9rZW4oKSwgMCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBtQ3VycmVudExvY2FsZSA9IGxvY2FsZTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UaW1lUGlja2VyRGVsZWdhdGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UaW1lUGlja2VyRGVsZWdhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODJkMzcwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RpbWVQaWNrZXJEZWxlZ2F0ZS5qYXZhCkBAIC0wLDAgKzEsMTM4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CisKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5LZXlmcmFtZTsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvcjsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOworaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZUZvcm1hdDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CitpbXBvcnQgYW5kcm9pZC52aWV3LkhhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzOworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlDaGFyYWN0ZXJNYXA7CitpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOworCitpbXBvcnQgamF2YS50ZXh0LkRhdGVGb3JtYXRTeW1ib2xzOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworCisvKioKKyAqIEEgdmlldyBmb3Igc2VsZWN0aW5nIHRoZSB0aW1lIG9mIGRheSwgaW4gZWl0aGVyIDI0IGhvdXIgb3IgQU0vUE0gbW9kZS4KKyAqLworY2xhc3MgVGltZVBpY2tlckRlbGVnYXRlIGV4dGVuZHMgVGltZVBpY2tlci5BYnN0cmFjdFRpbWVQaWNrZXJEZWxlZ2F0ZSBpbXBsZW1lbnRzCisgICAgICAgIFJhZGlhbFRpbWVQaWNrZXJWaWV3Lk9uVmFsdWVTZWxlY3RlZExpc3RlbmVyIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiVGltZVBpY2tlckRlbGVnYXRlIjsKKworICAgIC8vIEluZGV4IHVzZWQgYnkgUmFkaWFsUGlja2VyTGF5b3V0CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhPVVJfSU5ERVggPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5VVEVfSU5ERVggPSAxOworCisgICAgLy8gTk9UIGEgcmVhbCBpbmRleCBmb3IgdGhlIHB1cnBvc2Ugb2Ygd2hhdCdzIHNob3dpbmcuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFNUE1fSU5ERVggPSAyOworCisgICAgLy8gQWxzbyBOT1QgYSByZWFsIGluZGV4LCBqdXN0IHVzZWQgZm9yIGtleWJvYXJkIG1vZGUuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVOQUJMRV9QSUNLRVJfSU5ERVggPSAzOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFNID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUE0gPSAxOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX0VOQUJMRURfU1RBVEUgPSB0cnVlOworICAgIHByaXZhdGUgYm9vbGVhbiBtSXNFbmFibGVkID0gREVGQVVMVF9FTkFCTEVEX1NUQVRFOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhPVVJTX0lOX0hBTEZfREFZID0gMTI7CisKKyAgICAvLyBEZWxheSBpbiBtcyBiZWZvcmUgc3RhcnRpbmcgdGhlIHB1bHNlIGFuaW1hdGlvbgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQVUxTRV9BTklNQVRPUl9ERUxBWSA9IDMwMDsKKworICAgIC8vIER1cmF0aW9uIGluIG1zIG9mIHRoZSBwdWxzZSBhbmltYXRpb24KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFVMU0VfQU5JTUFUT1JfRFVSQVRJT04gPSA1NDQ7CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnRbXSBURVhUX0FQUEVBUkFOQ0VfVElNRV9MQUJFTF9BVFRSID0KKyAgICAgICAgICAgIG5ldyBpbnRbXSB7IFIuYXR0ci50aW1lUGlja2VySGVhZGVyVGltZUxhYmVsVGV4dEFwcGVhcmFuY2UgfTsKKworICAgIHByaXZhdGUgZmluYWwgVmlldyBtTWFpblZpZXc7CisgICAgcHJpdmF0ZSBUZXh0VmlldyBtSG91clZpZXc7CisgICAgcHJpdmF0ZSBUZXh0VmlldyBtTWludXRlVmlldzsKKyAgICBwcml2YXRlIFRleHRWaWV3IG1BbVBtVGV4dFZpZXc7CisgICAgcHJpdmF0ZSBSYWRpYWxUaW1lUGlja2VyVmlldyBtUmFkaWFsVGltZVBpY2tlclZpZXc7CisgICAgcHJpdmF0ZSBUZXh0VmlldyBtU2VwYXJhdG9yVmlldzsKKworICAgIHByaXZhdGUgVmlld0dyb3VwIG1MYXlvdXRCdXR0b25zOworCisgICAgcHJpdmF0ZSBpbnQgbUhlYWRlclNlbGVjdGVkQ29sb3I7CisgICAgcHJpdmF0ZSBpbnQgbUhlYWRlclVuU2VsZWN0ZWRDb2xvcjsKKyAgICBwcml2YXRlIFN0cmluZyBtQW1UZXh0OworICAgIHByaXZhdGUgU3RyaW5nIG1QbVRleHQ7CisKKyAgICBwcml2YXRlIGJvb2xlYW4gbUFsbG93QXV0b0FkdmFuY2U7CisgICAgcHJpdmF0ZSBpbnQgbUluaXRpYWxIb3VyT2ZEYXk7CisgICAgcHJpdmF0ZSBpbnQgbUluaXRpYWxNaW51dGU7CisgICAgcHJpdmF0ZSBib29sZWFuIG1JczI0SG91clZpZXc7CisKKyAgICAvLyBGb3IgaGFyZHdhcmUgSU1FIGlucHV0LgorICAgIHByaXZhdGUgY2hhciBtUGxhY2Vob2xkZXJUZXh0OworICAgIHByaXZhdGUgU3RyaW5nIG1Eb3VibGVQbGFjZWhvbGRlclRleHQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgbURlbGV0ZWRLZXlGb3JtYXQ7CisgICAgcHJpdmF0ZSBib29sZWFuIG1JbktiTW9kZTsKKyAgICBwcml2YXRlIEFycmF5TGlzdDxJbnRlZ2VyPiBtVHlwZWRUaW1lcyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKyAgICBwcml2YXRlIE5vZGUgbUxlZ2FsVGltZXNUcmVlOworICAgIHByaXZhdGUgaW50IG1BbUtleUNvZGU7CisgICAgcHJpdmF0ZSBpbnQgbVBtS2V5Q29kZTsKKworICAgIC8vIEZvciBzaG93aW5nIHRoZSBkb25lIGJ1dHRvbiB3aGVuIGluIGEgRGlhbG9nCisgICAgcHJpdmF0ZSBCdXR0b24gbURvbmVCdXR0b247CisgICAgcHJpdmF0ZSBib29sZWFuIG1TaG93RG9uZUJ1dHRvbjsKKyAgICBwcml2YXRlIFRpbWVQaWNrZXIuVGltZVBpY2tlckRpc21pc3NDYWxsYmFjayBtRGlzbWlzc0NhbGxiYWNrOworCisgICAgLy8gQWNjZXNzaWJpbGl0eSBzdHJpbmdzLgorICAgIHByaXZhdGUgU3RyaW5nIG1Ib3VyUGlja2VyRGVzY3JpcHRpb247CisgICAgcHJpdmF0ZSBTdHJpbmcgbVNlbGVjdEhvdXJzOworICAgIHByaXZhdGUgU3RyaW5nIG1NaW51dGVQaWNrZXJEZXNjcmlwdGlvbjsKKyAgICBwcml2YXRlIFN0cmluZyBtU2VsZWN0TWludXRlczsKKworICAgIHB1YmxpYyBUaW1lUGlja2VyRGVsZWdhdGUoVGltZVBpY2tlciBkZWxlZ2F0b3IsIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGRlbGVnYXRvciwgY29udGV4dCk7CisKKyAgICAgICAgLy8gcHJvY2VzcyBzdHlsZSBhdHRyaWJ1dGVzCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IG1Db250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVGltZVBpY2tlciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpOworCisgICAgICAgIG1Ib3VyUGlja2VyRGVzY3JpcHRpb24gPSByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLmhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uKTsKKyAgICAgICAgbVNlbGVjdEhvdXJzID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy5zZWxlY3RfaG91cnMpOworICAgICAgICBtTWludXRlUGlja2VyRGVzY3JpcHRpb24gPSByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLm1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24pOworICAgICAgICBtU2VsZWN0TWludXRlcyA9IHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcuc2VsZWN0X21pbnV0ZXMpOworCisgICAgICAgIG1IZWFkZXJTZWxlY3RlZENvbG9yID0gYS5nZXRDb2xvcihSLnN0eWxlYWJsZS5UaW1lUGlja2VyX2hlYWRlclNlbGVjdGVkVGV4dENvbG9yLAorICAgICAgICAgICAgICAgIGFuZHJvaWQuUi5jb2xvci5ob2xvX2JsdWVfbGlnaHQpOworCisgICAgICAgIG1IZWFkZXJVblNlbGVjdGVkQ29sb3IgPSBnZXRVbnNlbGVjdGVkQ29sb3IoCisgICAgICAgICAgICAgICAgUi5jb2xvci50aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0KTsKKyAgICAgICAgaWYgKG1IZWFkZXJVblNlbGVjdGVkQ29sb3IgPT0gLTEpIHsKKyAgICAgICAgICAgIG1IZWFkZXJVblNlbGVjdGVkQ29sb3IgPSBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfaGVhZGVyVW5zZWxlY3RlZFRleHRDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgUi5jb2xvci50aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0KTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGludCBoZWFkZXJCYWNrZ3JvdW5kQ29sb3IgPSBhLmdldENvbG9yKAorICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfaGVhZGVyQmFja2dyb3VuZENvbG9yLCAwKTsKKworICAgICAgICBhLnJlY3ljbGUoKTsKKworICAgICAgICBmaW5hbCBpbnQgbGF5b3V0UmVzb3VyY2VJZCA9IGEuZ2V0UmVzb3VyY2VJZCgKKyAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5UaW1lUGlja2VyX2ludGVybmFsTGF5b3V0LCBSLmxheW91dC50aW1lX3BpY2tlcl9ob2xvKTsKKworICAgICAgICBmaW5hbCBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IChMYXlvdXRJbmZsYXRlcikgbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZSgKKyAgICAgICAgICAgICAgICBDb250ZXh0LkxBWU9VVF9JTkZMQVRFUl9TRVJWSUNFKTsKKworICAgICAgICBtTWFpblZpZXcgPSBpbmZsYXRlci5pbmZsYXRlKGxheW91dFJlc291cmNlSWQsIG51bGwpOworICAgICAgICBtRGVsZWdhdG9yLmFkZFZpZXcobU1haW5WaWV3KTsKKworICAgICAgICBpZiAoaGVhZGVyQmFja2dyb3VuZENvbG9yICE9IDApIHsKKyAgICAgICAgICAgIFJlbGF0aXZlTGF5b3V0IGhlYWRlciA9IChSZWxhdGl2ZUxheW91dCkgbU1haW5WaWV3LmZpbmRWaWV3QnlJZChSLmlkLnRpbWVfaGVhZGVyKTsKKyAgICAgICAgICAgIGhlYWRlci5zZXRCYWNrZ3JvdW5kQ29sb3IoaGVhZGVyQmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAgfQorCisgICAgICAgIG1Ib3VyVmlldyA9IChUZXh0VmlldykgbU1haW5WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmhvdXJzKTsKKyAgICAgICAgbU1pbnV0ZVZpZXcgPSAoVGV4dFZpZXcpIG1NYWluVmlldy5maW5kVmlld0J5SWQoUi5pZC5taW51dGVzKTsKKyAgICAgICAgbUFtUG1UZXh0VmlldyA9IChUZXh0VmlldykgbU1haW5WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmFtcG1fbGFiZWwpOworICAgICAgICBtU2VwYXJhdG9yVmlldyA9IChUZXh0VmlldykgbU1haW5WaWV3LmZpbmRWaWV3QnlJZChSLmlkLnNlcGFyYXRvcik7CisgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldyA9IChSYWRpYWxUaW1lUGlja2VyVmlldykgbU1haW5WaWV3LmZpbmRWaWV3QnlJZChSLmlkLnJhZGlhbF9waWNrZXIpOworCisgICAgICAgIG1MYXlvdXRCdXR0b25zID0gKFZpZXdHcm91cCkgbU1haW5WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmxheW91dF9idXR0b25zKTsKKyAgICAgICAgbURvbmVCdXR0b24gPSAoQnV0dG9uKSBtTWFpblZpZXcuZmluZFZpZXdCeUlkKFIuaWQuZG9uZV9idXR0b24pOworCisgICAgICAgIFN0cmluZ1tdIGFtUG1UZXh0cyA9IG5ldyBEYXRlRm9ybWF0U3ltYm9scygpLmdldEFtUG1TdHJpbmdzKCk7CisgICAgICAgIG1BbVRleHQgPSBhbVBtVGV4dHNbMF07CisgICAgICAgIG1QbVRleHQgPSBhbVBtVGV4dHNbMV07CisKKyAgICAgICAgc2V0dXBMaXN0ZW5lcnMoKTsKKworICAgICAgICBtQWxsb3dBdXRvQWR2YW5jZSA9IHRydWU7CisKKyAgICAgICAgLy8gU2V0IHVwIGZvciBrZXlib2FyZCBtb2RlLgorICAgICAgICBtRG91YmxlUGxhY2Vob2xkZXJUZXh0ID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy50aW1lX3BsYWNlaG9sZGVyKTsKKyAgICAgICAgbURlbGV0ZWRLZXlGb3JtYXQgPSByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLmRlbGV0ZWRfa2V5KTsKKyAgICAgICAgbVBsYWNlaG9sZGVyVGV4dCA9IG1Eb3VibGVQbGFjZWhvbGRlclRleHQuY2hhckF0KDApOworICAgICAgICBtQW1LZXlDb2RlID0gbVBtS2V5Q29kZSA9IC0xOworICAgICAgICBnZW5lcmF0ZUxlZ2FsVGltZXNUcmVlKCk7CisKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB3aXRoIGN1cnJlbnQgdGltZQorICAgICAgICBmaW5hbCBDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKG1DdXJyZW50TG9jYWxlKTsKKyAgICAgICAgZmluYWwgaW50IGN1cnJlbnRIb3VyID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKTsKKyAgICAgICAgZmluYWwgaW50IGN1cnJlbnRNaW51dGUgPSBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlOVVRFKTsKKyAgICAgICAgaW5pdGlhbGl6ZShjdXJyZW50SG91ciwgY3VycmVudE1pbnV0ZSwgZmFsc2UgLyogMTJoICovLCBIT1VSX0lOREVYLCBmYWxzZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgZ2V0VW5zZWxlY3RlZENvbG9yKGludCBkZWZDb2xvcikgeworICAgICAgICBpbnQgcmVzdWx0ID0gLTE7CisgICAgICAgIGZpbmFsIFJlc291cmNlcy5UaGVtZSB0aGVtZSA9IG1Db250ZXh0LmdldFRoZW1lKCk7CisgICAgICAgIGZpbmFsIFR5cGVkVmFsdWUgb3V0VmFsdWUgPSBuZXcgVHlwZWRWYWx1ZSgpOworICAgICAgICB0aGVtZS5yZXNvbHZlQXR0cmlidXRlKFIuYXR0ci50aW1lUGlja2VySGVhZGVyVGltZUxhYmVsVGV4dEFwcGVhcmFuY2UsIG91dFZhbHVlLCB0cnVlKTsKKyAgICAgICAgZmluYWwgaW50IGFwcGVhcmFuY2VSZXNJZCA9IG91dFZhbHVlLnJlc291cmNlSWQ7CisgICAgICAgIFR5cGVkQXJyYXkgYXBwZWFyYW5jZSA9IG51bGw7CisgICAgICAgIGlmIChhcHBlYXJhbmNlUmVzSWQgIT0gLTEpIHsKKyAgICAgICAgICAgIGFwcGVhcmFuY2UgPSB0aGVtZS5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGFwcGVhcmFuY2VSZXNJZCwKKyAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVGV4dEFwcGVhcmFuY2UpOworICAgICAgICB9CisgICAgICAgIGlmIChhcHBlYXJhbmNlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGFwcGVhcmFuY2UuZ2V0Q29sb3IoCisgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRleHRBcHBlYXJhbmNlX3RleHRDb2xvciwgZGVmQ29sb3IpOworICAgICAgICAgICAgYXBwZWFyYW5jZS5yZWN5Y2xlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZShpbnQgaG91ck9mRGF5LCBpbnQgbWludXRlLCBib29sZWFuIGlzMjRIb3VyVmlldywgaW50IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2hvd0RvbmVCdXR0b24pIHsKKyAgICAgICAgbUluaXRpYWxIb3VyT2ZEYXkgPSBob3VyT2ZEYXk7CisgICAgICAgIG1Jbml0aWFsTWludXRlID0gbWludXRlOworICAgICAgICBtSXMyNEhvdXJWaWV3ID0gaXMyNEhvdXJWaWV3OworICAgICAgICBtSW5LYk1vZGUgPSBmYWxzZTsKKyAgICAgICAgbVNob3dEb25lQnV0dG9uID0gc2hvd0RvbmVCdXR0b247CisgICAgICAgIHVwZGF0ZVVJKGluZGV4KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0dXBMaXN0ZW5lcnMoKSB7CisgICAgICAgIEtleWJvYXJkTGlzdGVuZXIga2V5Ym9hcmRMaXN0ZW5lciA9IG5ldyBLZXlib2FyZExpc3RlbmVyKCk7CisgICAgICAgIG1EZWxlZ2F0b3Iuc2V0T25LZXlMaXN0ZW5lcihrZXlib2FyZExpc3RlbmVyKTsKKworICAgICAgICBtSG91clZpZXcuc2V0T25LZXlMaXN0ZW5lcihrZXlib2FyZExpc3RlbmVyKTsKKyAgICAgICAgbU1pbnV0ZVZpZXcuc2V0T25LZXlMaXN0ZW5lcihrZXlib2FyZExpc3RlbmVyKTsKKyAgICAgICAgbUFtUG1UZXh0Vmlldy5zZXRPbktleUxpc3RlbmVyKGtleWJvYXJkTGlzdGVuZXIpOworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuc2V0T25WYWx1ZVNlbGVjdGVkTGlzdGVuZXIodGhpcyk7CisgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRPbktleUxpc3RlbmVyKGtleWJvYXJkTGlzdGVuZXIpOworCisgICAgICAgIG1Ib3VyVmlldy5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIHNldEN1cnJlbnRJdGVtU2hvd2luZyhIT1VSX0lOREVYLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgdHJ5VmlicmF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbU1pbnV0ZVZpZXcuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBzZXRDdXJyZW50SXRlbVNob3dpbmcoTUlOVVRFX0lOREVYLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgdHJ5VmlicmF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbURvbmVCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBpZiAobUluS2JNb2RlICYmIGlzVHlwZWRUaW1lRnVsbHlMZWdhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmlzaEtiTW9kZShmYWxzZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5VmlicmF0ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobURpc21pc3NDYWxsYmFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1EaXNtaXNzQ2FsbGJhY2suZGlzbWlzcyhtRGVsZWdhdG9yLCBmYWxzZSwgZ2V0Q3VycmVudEhvdXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDdXJyZW50TWludXRlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1Eb25lQnV0dG9uLnNldE9uS2V5TGlzdGVuZXIoa2V5Ym9hcmRMaXN0ZW5lcik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVVJKGludCBpbmRleCkgeworICAgICAgICAvLyBVcGRhdGUgUmFkaWFsUGlja2VyIHZhbHVlcworICAgICAgICB1cGRhdGVSYWRpYWxQaWNrZXIoaW5kZXgpOworICAgICAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSB0aGUgQU0vUE0gdmlldy4KKyAgICAgICAgdXBkYXRlSGVhZGVyQW1QbSgpOworICAgICAgICAvLyBTaG93IG9yIGhpZGUgRG9uZSBidXR0b24KKyAgICAgICAgdXBkYXRlRG9uZUJ1dHRvbigpOworICAgICAgICAvLyBVcGRhdGUgSG91ciBhbmQgTWludXRlcworICAgICAgICB1cGRhdGVIZWFkZXJIb3VyKG1Jbml0aWFsSG91ck9mRGF5LCB0cnVlKTsKKyAgICAgICAgLy8gVXBkYXRlIHRpbWUgc2VwYXJhdG9yCisgICAgICAgIHVwZGF0ZUhlYWRlclNlcGFyYXRvcigpOworICAgICAgICAvLyBVcGRhdGUgTWludXRlcworICAgICAgICB1cGRhdGVIZWFkZXJNaW51dGUobUluaXRpYWxNaW51dGUpOworICAgICAgICAvLyBJbnZhbGlkYXRlIGV2ZXJ5dGhpbmcKKyAgICAgICAgbURlbGVnYXRvci5pbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVJhZGlhbFBpY2tlcihpbnQgaW5kZXgpIHsKKyAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmluaXRpYWxpemUobUluaXRpYWxIb3VyT2ZEYXksIG1Jbml0aWFsTWludXRlLCBtSXMyNEhvdXJWaWV3KTsKKyAgICAgICAgc2V0Q3VycmVudEl0ZW1TaG93aW5nKGluZGV4LCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgY29tcHV0ZU1heFdpZHRoT2ZOdW1iZXJzKGludCBtYXgpIHsKKyAgICAgICAgVGV4dFZpZXcgdGVtcFZpZXcgPSBuZXcgVGV4dFZpZXcobUNvbnRleHQpOworICAgICAgICBUeXBlZEFycmF5IGEgPSBtQ29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKFRFWFRfQVBQRUFSQU5DRV9USU1FX0xBQkVMX0FUVFIpOworICAgICAgICBmaW5hbCBpbnQgdGV4dEFwcGVhcmFuY2VSZXNJZCA9IGEuZ2V0UmVzb3VyY2VJZCgwLCAwKTsKKyAgICAgICAgdGVtcFZpZXcuc2V0VGV4dEFwcGVhcmFuY2UobUNvbnRleHQsICh0ZXh0QXBwZWFyYW5jZVJlc0lkICE9IDApID8KKyAgICAgICAgICAgICAgICB0ZXh0QXBwZWFyYW5jZVJlc0lkIDogUi5zdHlsZS5UZXh0QXBwZWFyYW5jZV9Ib2xvX1RpbWVQaWNrZXJfVGltZUxhYmVsKTsKKyAgICAgICAgYS5yZWN5Y2xlKCk7CisgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgbHAgPSBuZXcgVmlld0dyb3VwLkxheW91dFBhcmFtcyhWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCwKKyAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCk7CisgICAgICAgIHRlbXBWaWV3LnNldExheW91dFBhcmFtcyhscCk7CisgICAgICAgIGludCBtYXhXaWR0aCA9IDA7CisgICAgICAgIGZvciAoaW50IG1pbnV0ZXMgPSAwOyBtaW51dGVzIDwgbWF4OyBtaW51dGVzKyspIHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gU3RyaW5nLmZvcm1hdCgiJTAyZCIsIG1pbnV0ZXMpOworICAgICAgICAgICAgdGVtcFZpZXcuc2V0VGV4dCh0ZXh0KTsKKyAgICAgICAgICAgIHRlbXBWaWV3Lm1lYXN1cmUoVmlldy5NZWFzdXJlU3BlYy5VTlNQRUNJRklFRCwgVmlldy5NZWFzdXJlU3BlYy5VTlNQRUNJRklFRCk7CisgICAgICAgICAgICBtYXhXaWR0aCA9IE1hdGgubWF4KG1heFdpZHRoLCB0ZW1wVmlldy5nZXRNZWFzdXJlZFdpZHRoKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYXhXaWR0aDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlSGVhZGVyQW1QbSgpIHsKKyAgICAgICAgaWYgKG1JczI0SG91clZpZXcpIHsKKyAgICAgICAgICAgIG1BbVBtVGV4dFZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUFtUG1UZXh0Vmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYmVzdERhdGVUaW1lUGF0dGVybiA9IERhdGVGb3JtYXQuZ2V0QmVzdERhdGVUaW1lUGF0dGVybihtQ3VycmVudExvY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgImhtIik7CisKKyAgICAgICAgICAgIGJvb2xlYW4gYW1QbU9uTGVmdCA9IGJlc3REYXRlVGltZVBhdHRlcm4uc3RhcnRzV2l0aCgiYSIpOworICAgICAgICAgICAgaWYgKFRleHRVdGlscy5nZXRMYXlvdXREaXJlY3Rpb25Gcm9tTG9jYWxlKG1DdXJyZW50TG9jYWxlKSA9PQorICAgICAgICAgICAgICAgICAgICBWaWV3LkxBWU9VVF9ESVJFQ1RJT05fUlRMKSB7CisgICAgICAgICAgICAgICAgYW1QbU9uTGVmdCA9ICFhbVBtT25MZWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWxhdGl2ZUxheW91dC5MYXlvdXRQYXJhbXMgbGF5b3V0UGFyYW1zID0gKFJlbGF0aXZlTGF5b3V0LkxheW91dFBhcmFtcykKKyAgICAgICAgICAgICAgICAgICAgbUFtUG1UZXh0Vmlldy5nZXRMYXlvdXRQYXJhbXMoKTsKKworICAgICAgICAgICAgaWYgKGFtUG1PbkxlZnQpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRQYXJhbXMucmlnaHRNYXJnaW4gPSBjb21wdXRlTWF4V2lkdGhPZk51bWJlcnMoMTIgLyogZm9yIGhvdXJzICovKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRQYXJhbXMucmVtb3ZlUnVsZShSZWxhdGl2ZUxheW91dC5SSUdIVF9PRik7CisgICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLmFkZFJ1bGUoUmVsYXRpdmVMYXlvdXQuTEVGVF9PRiwgUi5pZC5zZXBhcmF0b3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRQYXJhbXMubGVmdE1hcmdpbiA9IGNvbXB1dGVNYXhXaWR0aE9mTnVtYmVycyg2MCAvKiBmb3IgbWludXRlcyAqLyk7CisgICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLnJlbW92ZVJ1bGUoUmVsYXRpdmVMYXlvdXQuTEVGVF9PRik7CisgICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLmFkZFJ1bGUoUmVsYXRpdmVMYXlvdXQuUklHSFRfT0YsIFIuaWQuc2VwYXJhdG9yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdXBkYXRlQW1QbURpc3BsYXkobUluaXRpYWxIb3VyT2ZEYXkgPCAxMiA/IEFNIDogUE0pOworICAgICAgICAgICAgbUFtUG1UZXh0Vmlldy5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgICAgIHRyeVZpYnJhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGFtT3JQbSA9IG1SYWRpYWxUaW1lUGlja2VyVmlldy5nZXRBbU9yUG0oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFtT3JQbSA9PSBBTSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYW1PclBtID0gUE07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW1PclBtID09IFBNKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFtT3JQbSA9IEFNOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFtUG1EaXNwbGF5KGFtT3JQbSk7CisgICAgICAgICAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRBbU9yUG0oYW1PclBtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVEb25lQnV0dG9uKCkgeworICAgICAgICBtTGF5b3V0QnV0dG9ucy5zZXRWaXNpYmlsaXR5KG1TaG93RG9uZUJ1dHRvbiA/IFZpZXcuVklTSUJMRSA6IFZpZXcuR09ORSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjdXJyZW50IGhvdXIuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0Q3VycmVudEhvdXIoSW50ZWdlciBjdXJyZW50SG91cikgeworICAgICAgICBpZiAobUluaXRpYWxIb3VyT2ZEYXkgPT0gY3VycmVudEhvdXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtSW5pdGlhbEhvdXJPZkRheSA9IGN1cnJlbnRIb3VyOworICAgICAgICB1cGRhdGVIZWFkZXJIb3VyKGN1cnJlbnRIb3VyLCB0cnVlIC8qIGFjY2Vzc2liaWxpdHkgYW5ub3VuY2UgKi8pOworICAgICAgICB1cGRhdGVIZWFkZXJBbVBtKCk7CisgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRDdXJyZW50SG91cihjdXJyZW50SG91cik7CisgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRBbU9yUG0obUluaXRpYWxIb3VyT2ZEYXkgPCAxMiA/IEFNIDogUE0pOworICAgICAgICBtRGVsZWdhdG9yLmludmFsaWRhdGUoKTsKKyAgICAgICAgb25UaW1lQ2hhbmdlZCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgaG91ciBpbiB0aGUgcmFuZ2UgKDAtMjMpLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJbnRlZ2VyIGdldEN1cnJlbnRIb3VyKCkgeworICAgICAgICBpbnQgY3VycmVudEhvdXIgPSBtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0Q3VycmVudEhvdXIoKTsKKyAgICAgICAgaWYgKG1JczI0SG91clZpZXcpIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50SG91cjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaChtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0QW1PclBtKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBNOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGN1cnJlbnRIb3VyICUgSE9VUlNfSU5fSEFMRl9EQVkpICsgSE9VUlNfSU5fSEFMRl9EQVk7CisgICAgICAgICAgICAgICAgY2FzZSBBTToKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudEhvdXIgJSBIT1VSU19JTl9IQUxGX0RBWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgY3VycmVudCBtaW51dGUgKDAtNTkpLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRNaW51dGUoSW50ZWdlciBjdXJyZW50TWludXRlKSB7CisgICAgICAgIGlmIChtSW5pdGlhbE1pbnV0ZSA9PSBjdXJyZW50TWludXRlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbUluaXRpYWxNaW51dGUgPSBjdXJyZW50TWludXRlOworICAgICAgICB1cGRhdGVIZWFkZXJNaW51dGUoY3VycmVudE1pbnV0ZSk7CisgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRDdXJyZW50TWludXRlKGN1cnJlbnRNaW51dGUpOworICAgICAgICBtRGVsZWdhdG9yLmludmFsaWRhdGUoKTsKKyAgICAgICAgb25UaW1lQ2hhbmdlZCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgbWludXRlLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJbnRlZ2VyIGdldEN1cnJlbnRNaW51dGUoKSB7CisgICAgICAgIHJldHVybiBtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0Q3VycmVudE1pbnV0ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB3aGV0aGVyIGluIDI0IGhvdXIgb3IgQU0vUE0gbW9kZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpczI0SG91clZpZXcgVHJ1ZSA9IDI0IGhvdXIgbW9kZS4gRmFsc2UgPSBBTS9QTS4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRJczI0SG91clZpZXcoQm9vbGVhbiBpczI0SG91clZpZXcpIHsKKyAgICAgICAgaWYgKGlzMjRIb3VyVmlldyA9PSBtSXMyNEhvdXJWaWV3KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbUlzMjRIb3VyVmlldyA9IGlzMjRIb3VyVmlldzsKKyAgICAgICAgZ2VuZXJhdGVMZWdhbFRpbWVzVHJlZSgpOworICAgICAgICBpbnQgaG91ciA9IG1SYWRpYWxUaW1lUGlja2VyVmlldy5nZXRDdXJyZW50SG91cigpOworICAgICAgICBtSW5pdGlhbEhvdXJPZkRheSA9IGhvdXI7CisgICAgICAgIHVwZGF0ZUhlYWRlckhvdXIoaG91ciwgZmFsc2UgLyogbm8gYWNjZXNzaWJpbGl0eSBhbm5vdW5jZSAqLyk7CisgICAgICAgIHVwZGF0ZUhlYWRlckFtUG0oKTsKKyAgICAgICAgdXBkYXRlUmFkaWFsUGlja2VyKG1SYWRpYWxUaW1lUGlja2VyVmlldy5nZXRDdXJyZW50SXRlbVNob3dpbmcoKSk7CisgICAgICAgIG1EZWxlZ2F0b3IuaW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGluIDI0IGhvdXIgdmlldyBlbHNlIGZhbHNlLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzMjRIb3VyVmlldygpIHsKKyAgICAgICAgcmV0dXJuIG1JczI0SG91clZpZXc7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0T25UaW1lQ2hhbmdlZExpc3RlbmVyKFRpbWVQaWNrZXIuT25UaW1lQ2hhbmdlZExpc3RlbmVyIGNhbGxiYWNrKSB7CisgICAgICAgIG1PblRpbWVDaGFuZ2VkTGlzdGVuZXIgPSBjYWxsYmFjazsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBtSG91clZpZXcuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgbU1pbnV0ZVZpZXcuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgbUFtUG1UZXh0Vmlldy5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgbUlzRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworICAgICAgICByZXR1cm4gbUlzRW5hYmxlZDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRTaG93RG9uZUJ1dHRvbihib29sZWFuIHNob3dEb25lQnV0dG9uKSB7CisgICAgICAgIG1TaG93RG9uZUJ1dHRvbiA9IHNob3dEb25lQnV0dG9uOworICAgICAgICB1cGRhdGVEb25lQnV0dG9uKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0RGlzbWlzc0NhbGxiYWNrKFRpbWVQaWNrZXIuVGltZVBpY2tlckRpc21pc3NDYWxsYmFjayBjYWxsYmFjaykgeworICAgICAgICBtRGlzbWlzc0NhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRCYXNlbGluZSgpIHsKKyAgICAgICAgLy8gZG9lcyBub3Qgc3VwcG9ydCBiYXNlbGluZSBhbGlnbm1lbnQKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQoQ29uZmlndXJhdGlvbiBuZXdDb25maWcpIHsKKyAgICAgICAgdXBkYXRlVUkobVJhZGlhbFRpbWVQaWNrZXJWaWV3LmdldEN1cnJlbnRJdGVtU2hvd2luZygpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgUGFyY2VsYWJsZSBvblNhdmVJbnN0YW5jZVN0YXRlKFBhcmNlbGFibGUgc3VwZXJTdGF0ZSkgeworICAgICAgICByZXR1cm4gbmV3IFNhdmVkU3RhdGUoc3VwZXJTdGF0ZSwgZ2V0Q3VycmVudEhvdXIoKSwgZ2V0Q3VycmVudE1pbnV0ZSgpLAorICAgICAgICAgICAgICAgIGlzMjRIb3VyVmlldygpLCBpbktiTW9kZSgpLCBnZXRUeXBlZFRpbWVzKCksIGdldEN1cnJlbnRJdGVtU2hvd2luZygpLAorICAgICAgICAgICAgICAgIGlzU2hvd0RvbmVCdXR0b24oKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25SZXN0b3JlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN0YXRlKSB7CisgICAgICAgIFNhdmVkU3RhdGUgc3MgPSAoU2F2ZWRTdGF0ZSkgc3RhdGU7CisgICAgICAgIHNldEluS2JNb2RlKHNzLmluS2JNb2RlKCkpOworICAgICAgICBzZXRUeXBlZFRpbWVzKHNzLmdldFR5cGVzVGltZXMoKSk7CisgICAgICAgIGluaXRpYWxpemUoc3MuZ2V0SG91cigpLCBzcy5nZXRNaW51dGUoKSwgc3MuaXMyNEhvdXJNb2RlKCksIHNzLmdldEN1cnJlbnRJdGVtU2hvd2luZygpLAorICAgICAgICAgICAgICAgIHNzLmlzU2hvd0RvbmVCdXR0b24oKSk7CisgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5pbnZhbGlkYXRlKCk7CisgICAgICAgIGlmIChtSW5LYk1vZGUpIHsKKyAgICAgICAgICAgIHRyeVN0YXJ0aW5nS2JNb2RlKC0xKTsKKyAgICAgICAgICAgIG1Ib3VyVmlldy5pbnZhbGlkYXRlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICByZXR1cm4gbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmRpc3BhdGNoUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5vblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gaW5mbykgeworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKGluZm8pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB3aGV0aGVyIGluIGtleWJvYXJkIG1vZGUgb3Igbm90LgorICAgICAqCisgICAgICogQHBhcmFtIGluS2JNb2RlIFRydWUgbWVhbnMgaW4ga2V5Ym9hcmQgbW9kZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0SW5LYk1vZGUoYm9vbGVhbiBpbktiTW9kZSkgeworICAgICAgICBtSW5LYk1vZGUgPSBpbktiTW9kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgaW4ga2V5Ym9hcmQgbW9kZQorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpbktiTW9kZSgpIHsKKyAgICAgICAgcmV0dXJuIG1JbktiTW9kZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0VHlwZWRUaW1lcyhBcnJheUxpc3Q8SW50ZWdlcj4gdHlwZVRpbWVzKSB7CisgICAgICAgIG1UeXBlZFRpbWVzID0gdHlwZVRpbWVzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgdHlwZWQgdGltZXMKKyAgICAgKi8KKyAgICBwcml2YXRlIEFycmF5TGlzdDxJbnRlZ2VyPiBnZXRUeXBlZFRpbWVzKCkgeworICAgICAgICByZXR1cm4gbVR5cGVkVGltZXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgaXRlbSBzaG93aW5nCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0Q3VycmVudEl0ZW1TaG93aW5nKCkgeworICAgICAgICByZXR1cm4gbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmdldEN1cnJlbnRJdGVtU2hvd2luZygpOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBpc1Nob3dEb25lQnV0dG9uKCkgeworICAgICAgICByZXR1cm4gbVNob3dEb25lQnV0dG9uOworICAgIH0KKworICAgIC8qKgorICAgICAqIFByb3BhZ2F0ZSB0aGUgdGltZSBjaGFuZ2UKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgb25UaW1lQ2hhbmdlZCgpIHsKKyAgICAgICAgbURlbGVnYXRvci5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfU0VMRUNURUQpOworICAgICAgICBpZiAobU9uVGltZUNoYW5nZWRMaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICBtT25UaW1lQ2hhbmdlZExpc3RlbmVyLm9uVGltZUNoYW5nZWQobURlbGVnYXRvciwKKyAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudEhvdXIoKSwgZ2V0Q3VycmVudE1pbnV0ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFVzZWQgdG8gc2F2ZSAvIHJlc3RvcmUgc3RhdGUgb2YgdGltZSBwaWNrZXIKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTYXZlZFN0YXRlIGV4dGVuZHMgVmlldy5CYXNlU2F2ZWRTdGF0ZSB7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUhvdXI7CisgICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1NaW51dGU7CisgICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtSXMyNEhvdXJNb2RlOworICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUluS2JNb2RlOworICAgICAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxJbnRlZ2VyPiBtVHlwZWRUaW1lczsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUN1cnJlbnRJdGVtU2hvd2luZzsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1TaG93RG9uZUJ1dHRvbjsKKworICAgICAgICBwcml2YXRlIFNhdmVkU3RhdGUoUGFyY2VsYWJsZSBzdXBlclN0YXRlLCBpbnQgaG91ciwgaW50IG1pbnV0ZSwgYm9vbGVhbiBpczI0SG91ck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzS2JNb2RlLCBBcnJheUxpc3Q8SW50ZWdlcj4gdHlwZWRUaW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJyZW50SXRlbVNob3dpbmcsIGJvb2xlYW4gc2hvd0RvbmVCdXR0b24pIHsKKyAgICAgICAgICAgIHN1cGVyKHN1cGVyU3RhdGUpOworICAgICAgICAgICAgbUhvdXIgPSBob3VyOworICAgICAgICAgICAgbU1pbnV0ZSA9IG1pbnV0ZTsKKyAgICAgICAgICAgIG1JczI0SG91ck1vZGUgPSBpczI0SG91ck1vZGU7CisgICAgICAgICAgICBtSW5LYk1vZGUgPSBpc0tiTW9kZTsKKyAgICAgICAgICAgIG1UeXBlZFRpbWVzID0gdHlwZWRUaW1lczsKKyAgICAgICAgICAgIG1DdXJyZW50SXRlbVNob3dpbmcgPSBjdXJyZW50SXRlbVNob3dpbmc7CisgICAgICAgICAgICBtU2hvd0RvbmVCdXR0b24gPSBzaG93RG9uZUJ1dHRvbjsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgU2F2ZWRTdGF0ZShQYXJjZWwgaW4pIHsKKyAgICAgICAgICAgIHN1cGVyKGluKTsKKyAgICAgICAgICAgIG1Ib3VyID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgbU1pbnV0ZSA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIG1JczI0SG91ck1vZGUgPSAoaW4ucmVhZEludCgpID09IDEpOworICAgICAgICAgICAgbUluS2JNb2RlID0gKGluLnJlYWRJbnQoKSA9PSAxKTsKKyAgICAgICAgICAgIG1UeXBlZFRpbWVzID0gaW4ucmVhZEFycmF5TGlzdChnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOworICAgICAgICAgICAgbUN1cnJlbnRJdGVtU2hvd2luZyA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIG1TaG93RG9uZUJ1dHRvbiA9IChpbi5yZWFkSW50KCkgPT0gMSk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldEhvdXIoKSB7CisgICAgICAgICAgICByZXR1cm4gbUhvdXI7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldE1pbnV0ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtTWludXRlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXMyNEhvdXJNb2RlKCkgeworICAgICAgICAgICAgcmV0dXJuIG1JczI0SG91ck1vZGU7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpbktiTW9kZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtSW5LYk1vZGU7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQXJyYXlMaXN0PEludGVnZXI+IGdldFR5cGVzVGltZXMoKSB7CisgICAgICAgICAgICByZXR1cm4gbVR5cGVkVGltZXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldEN1cnJlbnRJdGVtU2hvd2luZygpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ3VycmVudEl0ZW1TaG93aW5nOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNTaG93RG9uZUJ1dHRvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBtU2hvd0RvbmVCdXR0b247CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgZGVzdCwgaW50IGZsYWdzKSB7CisgICAgICAgICAgICBzdXBlci53cml0ZVRvUGFyY2VsKGRlc3QsIGZsYWdzKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobUhvdXIpOworICAgICAgICAgICAgZGVzdC53cml0ZUludChtTWludXRlKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobUlzMjRIb3VyTW9kZSA/IDEgOiAwKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobUluS2JNb2RlID8gMSA6IDApOworICAgICAgICAgICAgZGVzdC53cml0ZUxpc3QobVR5cGVkVGltZXMpOworICAgICAgICAgICAgZGVzdC53cml0ZUludChtQ3VycmVudEl0ZW1TaG93aW5nKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobVNob3dEb25lQnV0dG9uID8gMSA6IDApOworICAgICAgICB9CisKKyAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoeyJ1bnVzZWQiLCAiaGlkaW5nIn0pCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFNhdmVkU3RhdGU+IENSRUFUT1IgPSBuZXcgQ3JlYXRvcjxTYXZlZFN0YXRlPigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBTYXZlZFN0YXRlIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIGluKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTYXZlZFN0YXRlKGluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIFNhdmVkU3RhdGVbXSBuZXdBcnJheShpbnQgc2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2F2ZWRTdGF0ZVtzaXplXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdHJ5VmlicmF0ZSgpIHsKKyAgICAgICAgbURlbGVnYXRvci5wZXJmb3JtSGFwdGljRmVlZGJhY2soSGFwdGljRmVlZGJhY2tDb25zdGFudHMuQ0xPQ0tfVElDSyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUFtUG1EaXNwbGF5KGludCBhbU9yUG0pIHsKKyAgICAgICAgaWYgKGFtT3JQbSA9PSBBTSkgeworICAgICAgICAgICAgbUFtUG1UZXh0Vmlldy5zZXRUZXh0KG1BbVRleHQpOworICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eShtQW1UZXh0KTsKKyAgICAgICAgfSBlbHNlIGlmIChhbU9yUG0gPT0gUE0peworICAgICAgICAgICAgbUFtUG1UZXh0Vmlldy5zZXRUZXh0KG1QbVRleHQpOworICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eShtUG1UZXh0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1BbVBtVGV4dFZpZXcuc2V0VGV4dChtRG91YmxlUGxhY2Vob2xkZXJUZXh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgcGlja2VyIGZvciB1cGRhdGluZyB0aGUgaGVhZGVyIGRpc3BsYXkuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25WYWx1ZVNlbGVjdGVkKGludCBwaWNrZXJJbmRleCwgaW50IG5ld1ZhbHVlLCBib29sZWFuIGF1dG9BZHZhbmNlKSB7CisgICAgICAgIGlmIChwaWNrZXJJbmRleCA9PSBIT1VSX0lOREVYKSB7CisgICAgICAgICAgICB1cGRhdGVIZWFkZXJIb3VyKG5ld1ZhbHVlLCBmYWxzZSk7CisgICAgICAgICAgICBTdHJpbmcgYW5ub3VuY2VtZW50ID0gU3RyaW5nLmZvcm1hdCgiJWQiLCBuZXdWYWx1ZSk7CisgICAgICAgICAgICBpZiAobUFsbG93QXV0b0FkdmFuY2UgJiYgYXV0b0FkdmFuY2UpIHsKKyAgICAgICAgICAgICAgICBzZXRDdXJyZW50SXRlbVNob3dpbmcoTUlOVVRFX0lOREVYLCB0cnVlLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYW5ub3VuY2VtZW50ICs9ICIuICIgKyBtU2VsZWN0TWludXRlczsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldENvbnRlbnREZXNjcmlwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Ib3VyUGlja2VyRGVzY3JpcHRpb24gKyAiOiAiICsgbmV3VmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5KGFubm91bmNlbWVudCk7CisgICAgICAgIH0gZWxzZSBpZiAocGlja2VySW5kZXggPT0gTUlOVVRFX0lOREVYKXsKKyAgICAgICAgICAgIHVwZGF0ZUhlYWRlck1pbnV0ZShuZXdWYWx1ZSk7CisgICAgICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuc2V0Q29udGVudERlc2NyaXB0aW9uKG1NaW51dGVQaWNrZXJEZXNjcmlwdGlvbiArICI6ICIgKyBuZXdWYWx1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAocGlja2VySW5kZXggPT0gQU1QTV9JTkRFWCkgeworICAgICAgICAgICAgdXBkYXRlQW1QbURpc3BsYXkobmV3VmFsdWUpOworICAgICAgICB9IGVsc2UgaWYgKHBpY2tlckluZGV4ID09IEVOQUJMRV9QSUNLRVJfSU5ERVgpIHsKKyAgICAgICAgICAgIGlmICghaXNUeXBlZFRpbWVGdWxseUxlZ2FsKCkpIHsKKyAgICAgICAgICAgICAgICBtVHlwZWRUaW1lcy5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluaXNoS2JNb2RlKHRydWUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUhlYWRlckhvdXIoaW50IHZhbHVlLCBib29sZWFuIGFubm91bmNlKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBiZXN0RGF0ZVRpbWVQYXR0ZXJuID0gRGF0ZUZvcm1hdC5nZXRCZXN0RGF0ZVRpbWVQYXR0ZXJuKG1DdXJyZW50TG9jYWxlLAorICAgICAgICAgICAgICAgIChtSXMyNEhvdXJWaWV3KSA/ICJIbSIgOiAiaG0iKTsKKyAgICAgICAgZmluYWwgaW50IGxlbmd0aFBhdHRlcm4gPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLmxlbmd0aCgpOworICAgICAgICBib29sZWFuIGhvdXJXaXRoVHdvRGlnaXQgPSBmYWxzZTsKKyAgICAgICAgY2hhciBob3VyRm9ybWF0ID0gJ1wwJzsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJldHVybmVkIHBhdHRlcm4gaXMgc2luZ2xlIG9yIGRvdWJsZSAnSCcsICdoJywgJ0snLCAnaycuIFdlIGFsc28gc2F2ZQorICAgICAgICAvLyB0aGUgaG91ciBmb3JtYXQgdGhhdCB3ZSBmb3VuZC4KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGhQYXR0ZXJuOyBpKyspIHsKKyAgICAgICAgICAgIGZpbmFsIGNoYXIgYyA9IGJlc3REYXRlVGltZVBhdHRlcm4uY2hhckF0KGkpOworICAgICAgICAgICAgaWYgKGMgPT0gJ0gnIHx8IGMgPT0gJ2gnIHx8IGMgPT0gJ0snIHx8IGMgPT0gJ2snKSB7CisgICAgICAgICAgICAgICAgaG91ckZvcm1hdCA9IGM7CisgICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgbGVuZ3RoUGF0dGVybiAmJiBjID09IGJlc3REYXRlVGltZVBhdHRlcm4uY2hhckF0KGkgKyAxKSkgeworICAgICAgICAgICAgICAgICAgICBob3VyV2l0aFR3b0RpZ2l0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgU3RyaW5nIGZvcm1hdDsKKyAgICAgICAgaWYgKGhvdXJXaXRoVHdvRGlnaXQpIHsKKyAgICAgICAgICAgIGZvcm1hdCA9ICIlMDJkIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvcm1hdCA9ICIlZCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1JczI0SG91clZpZXcpIHsKKyAgICAgICAgICAgIC8vICdrJyBtZWFucyAxLTI0IGhvdXIKKyAgICAgICAgICAgIGlmIChob3VyRm9ybWF0ID09ICdrJyAmJiB2YWx1ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSAyNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vICdLJyBtZWFucyAwLTExIGhvdXIKKyAgICAgICAgICAgIHZhbHVlID0gbW9kdWxvMTIodmFsdWUsIGhvdXJGb3JtYXQgPT0gJ0snKTsKKyAgICAgICAgfQorICAgICAgICBDaGFyU2VxdWVuY2UgdGV4dCA9IFN0cmluZy5mb3JtYXQoZm9ybWF0LCB2YWx1ZSk7CisgICAgICAgIG1Ib3VyVmlldy5zZXRUZXh0KHRleHQpOworICAgICAgICBpZiAoYW5ub3VuY2UpIHsKKyAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5hbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkodGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgbW9kdWxvMTIoaW50IG4sIGJvb2xlYW4gc3RhcnRXaXRoWmVybykgeworICAgICAgICBpbnQgdmFsdWUgPSBuICUgMTI7CisgICAgICAgIGlmICh2YWx1ZSA9PSAwICYmICFzdGFydFdpdGhaZXJvKSB7CisgICAgICAgICAgICB2YWx1ZSA9IDEyOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgdGltZSBzZXBhcmF0b3IgaXMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBDTERSIGFuZCBjYW5ub3QgYmUgc3VwcG9zZWQgdG8gYmUgIjoiLgorICAgICAqCisgICAgICogU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9jbGRyL3RyYWMvYnJvd3Nlci90cnVuay9jb21tb24vbWFpbgorICAgICAqCisgICAgICogV2UgcGFzcyB0aGUgY29ycmVjdCAic2tlbGV0b24iIGRlcGVuZGluZyBvbiAxMiBvciAyNCBob3VycyB2aWV3IGFuZCB0aGVuIGV4dHJhY3QgdGhlCisgICAgICogc2VwYXJhdG9yIGFzIHRoZSBjaGFyYWN0ZXIgd2hpY2ggaXMganVzdCBhZnRlciB0aGUgaG91ciBtYXJrZXIgaW4gdGhlIHJldHVybmVkIHBhdHRlcm4uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUhlYWRlclNlcGFyYXRvcigpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGJlc3REYXRlVGltZVBhdHRlcm4gPSBEYXRlRm9ybWF0LmdldEJlc3REYXRlVGltZVBhdHRlcm4obUN1cnJlbnRMb2NhbGUsCisgICAgICAgICAgICAgICAgKG1JczI0SG91clZpZXcpID8gIkhtIiA6ICJobSIpOworICAgICAgICBmaW5hbCBTdHJpbmcgc2VwYXJhdG9yVGV4dDsKKyAgICAgICAgLy8gU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCBmb3IgaG91ciBmb3JtYXRzCisgICAgICAgIGZpbmFsIGNoYXJbXSBob3VyRm9ybWF0cyA9IHsnSCcsICdoJywgJ0snLCAnayd9OworICAgICAgICBpbnQgaEluZGV4ID0gbGFzdEluZGV4T2ZBbnkoYmVzdERhdGVUaW1lUGF0dGVybiwgaG91ckZvcm1hdHMpOworICAgICAgICBpZiAoaEluZGV4ID09IC0xKSB7CisgICAgICAgICAgICAvLyBEZWZhdWx0IGNhc2UKKyAgICAgICAgICAgIHNlcGFyYXRvclRleHQgPSAiOiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXBhcmF0b3JUZXh0ID0gQ2hhcmFjdGVyLnRvU3RyaW5nKGJlc3REYXRlVGltZVBhdHRlcm4uY2hhckF0KGhJbmRleCArIDEpKTsKKyAgICAgICAgfQorICAgICAgICBtU2VwYXJhdG9yVmlldy5zZXRUZXh0KHNlcGFyYXRvclRleHQpOworICAgIH0KKworICAgIHN0YXRpYyBwcml2YXRlIGludCBsYXN0SW5kZXhPZkFueShTdHJpbmcgc3RyLCBjaGFyW10gYW55KSB7CisgICAgICAgIGZpbmFsIGludCBsZW5ndGhBbnkgPSBhbnkubGVuZ3RoOworICAgICAgICBpZiAobGVuZ3RoQW55ID4gMCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IHN0ci5sZW5ndGgoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgY2hhciBjID0gc3RyLmNoYXJBdChpKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGxlbmd0aEFueTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjID09IGFueVtqXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVIZWFkZXJNaW51dGUoaW50IHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSA2MCkgeworICAgICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICB9CisgICAgICAgIENoYXJTZXF1ZW5jZSB0ZXh0ID0gU3RyaW5nLmZvcm1hdChtQ3VycmVudExvY2FsZSwgIiUwMmQiLCB2YWx1ZSk7CisgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5hbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkodGV4dCk7CisgICAgICAgIG1NaW51dGVWaWV3LnNldFRleHQodGV4dCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2hvdyBlaXRoZXIgSG91cnMgb3IgTWludXRlcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0Q3VycmVudEl0ZW1TaG93aW5nKGludCBpbmRleCwgYm9vbGVhbiBhbmltYXRlQ2lyY2xlLCBib29sZWFuIGRlbGF5TGFiZWxBbmltYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBhbm5vdW5jZSkgeworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuc2V0Q3VycmVudEl0ZW1TaG93aW5nKGluZGV4LCBhbmltYXRlQ2lyY2xlKTsKKworICAgICAgICBUZXh0VmlldyBsYWJlbFRvQW5pbWF0ZTsKKyAgICAgICAgaWYgKGluZGV4ID09IEhPVVJfSU5ERVgpIHsKKyAgICAgICAgICAgIGludCBob3VycyA9IG1SYWRpYWxUaW1lUGlja2VyVmlldy5nZXRDdXJyZW50SG91cigpOworICAgICAgICAgICAgaWYgKCFtSXMyNEhvdXJWaWV3KSB7CisgICAgICAgICAgICAgICAgaG91cnMgPSBob3VycyAlIDEyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldENvbnRlbnREZXNjcmlwdGlvbihtSG91clBpY2tlckRlc2NyaXB0aW9uICsgIjogIiArIGhvdXJzKTsKKyAgICAgICAgICAgIGlmIChhbm5vdW5jZSkgeworICAgICAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5hbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkobVNlbGVjdEhvdXJzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhYmVsVG9BbmltYXRlID0gbUhvdXJWaWV3OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IG1pbnV0ZXMgPSBtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0Q3VycmVudE1pbnV0ZSgpOworICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldENvbnRlbnREZXNjcmlwdGlvbihtTWludXRlUGlja2VyRGVzY3JpcHRpb24gKyAiOiAiICsgbWludXRlcyk7CisgICAgICAgICAgICBpZiAoYW5ub3VuY2UpIHsKKyAgICAgICAgICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5KG1TZWxlY3RNaW51dGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhYmVsVG9BbmltYXRlID0gbU1pbnV0ZVZpZXc7CisgICAgICAgIH0KKworICAgICAgICBpbnQgaG91ckNvbG9yID0gKGluZGV4ID09IEhPVVJfSU5ERVgpID8gbUhlYWRlclNlbGVjdGVkQ29sb3IgOiBtSGVhZGVyVW5TZWxlY3RlZENvbG9yOworICAgICAgICBpbnQgbWludXRlQ29sb3IgPSAoaW5kZXggPT0gTUlOVVRFX0lOREVYKSA/IG1IZWFkZXJTZWxlY3RlZENvbG9yIDogbUhlYWRlclVuU2VsZWN0ZWRDb2xvcjsKKyAgICAgICAgbUhvdXJWaWV3LnNldFRleHRDb2xvcihob3VyQ29sb3IpOworICAgICAgICBtTWludXRlVmlldy5zZXRUZXh0Q29sb3IobWludXRlQ29sb3IpOworCisgICAgICAgIE9iamVjdEFuaW1hdG9yIHB1bHNlQW5pbWF0b3IgPSBnZXRQdWxzZUFuaW1hdG9yKGxhYmVsVG9BbmltYXRlLCAwLjg1ZiwgMS4xZik7CisgICAgICAgIGlmIChkZWxheUxhYmVsQW5pbWF0ZSkgeworICAgICAgICAgICAgcHVsc2VBbmltYXRvci5zZXRTdGFydERlbGF5KFBVTFNFX0FOSU1BVE9SX0RFTEFZKTsKKyAgICAgICAgfQorICAgICAgICBwdWxzZUFuaW1hdG9yLnN0YXJ0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRm9yIGtleWJvYXJkIG1vZGUsIHByb2Nlc3NlcyBrZXkgZXZlbnRzLgorICAgICAqCisgICAgICogQHBhcmFtIGtleUNvZGUgdGhlIHByZXNzZWQga2V5LgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBrZXkgd2FzIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gcHJvY2Vzc0tleVVwKGludCBrZXlDb2RlKSB7CisgICAgICAgIGlmIChrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfRVNDQVBFIHx8IGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9CQUNLKSB7CisgICAgICAgICAgICBpZiAobURpc21pc3NDYWxsYmFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbURpc21pc3NDYWxsYmFjay5kaXNtaXNzKG1EZWxlZ2F0b3IsIHRydWUsIGdldEN1cnJlbnRIb3VyKCksIGdldEN1cnJlbnRNaW51dGUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfVEFCKSB7CisgICAgICAgICAgICBpZihtSW5LYk1vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNUeXBlZFRpbWVGdWxseUxlZ2FsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluaXNoS2JNb2RlKHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfRU5URVIpIHsKKyAgICAgICAgICAgIGlmIChtSW5LYk1vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVHlwZWRUaW1lRnVsbHlMZWdhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaW5pc2hLYk1vZGUoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1PblRpbWVDaGFuZ2VkTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1PblRpbWVDaGFuZ2VkTGlzdGVuZXIub25UaW1lQ2hhbmdlZChtRGVsZWdhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmdldEN1cnJlbnRIb3VyKCksCisgICAgICAgICAgICAgICAgICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0Q3VycmVudE1pbnV0ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtRGlzbWlzc0NhbGxiYWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtRGlzbWlzc0NhbGxiYWNrLmRpc21pc3MobURlbGVnYXRvciwgZmFsc2UsIGdldEN1cnJlbnRIb3VyKCksIGdldEN1cnJlbnRNaW51dGUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfREVMKSB7CisgICAgICAgICAgICBpZiAobUluS2JNb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtVHlwZWRUaW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGRlbGV0ZWQgPSBkZWxldGVMYXN0VHlwZWRLZXkoKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlbGV0ZWRLZXlTdHI7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWxldGVkID09IGdldEFtT3JQbUtleUNvZGUoQU0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkS2V5U3RyID0gbUFtVGV4dDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZWxldGVkID09IGdldEFtT3JQbUtleUNvZGUoUE0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkS2V5U3RyID0gbVBtVGV4dDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRLZXlTdHIgPSBTdHJpbmcuZm9ybWF0KCIlZCIsIGdldFZhbEZyb21LZXlDb2RlKGRlbGV0ZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQobURlbGV0ZWRLZXlGb3JtYXQsIGRlbGV0ZWRLZXlTdHIpKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlRGlzcGxheSh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFXzAgfHwga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFXzEKKyAgICAgICAgICAgICAgICB8fCBrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfMiB8fCBrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfMworICAgICAgICAgICAgICAgIHx8IGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV80IHx8IGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV81CisgICAgICAgICAgICAgICAgfHwga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFXzYgfHwga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFXzcKKyAgICAgICAgICAgICAgICB8fCBrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfOCB8fCBrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfOQorICAgICAgICAgICAgICAgIHx8ICghbUlzMjRIb3VyVmlldyAmJgorICAgICAgICAgICAgICAgIChrZXlDb2RlID09IGdldEFtT3JQbUtleUNvZGUoQU0pIHx8IGtleUNvZGUgPT0gZ2V0QW1PclBtS2V5Q29kZShQTSkpKSkgeworICAgICAgICAgICAgaWYgKCFtSW5LYk1vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobVJhZGlhbFRpbWVQaWNrZXJWaWV3ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU29tZXRoaW5nJ3Mgd3JvbmcsIGJlY2F1c2UgdGltZSBwaWNrZXIgc2hvdWxkIGRlZmluaXRlbHkgbm90IGJlIG51bGwuCisgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVuYWJsZSB0byBpbml0aWF0ZSBrZXlib2FyZCBtb2RlLCBUaW1lUGlja2VyIHdhcyBudWxsLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbVR5cGVkVGltZXMuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICB0cnlTdGFydGluZ0tiTW9kZShrZXlDb2RlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgaW4ga2V5Ym9hcmQgbW9kZS4KKyAgICAgICAgICAgIGlmIChhZGRLZXlJZkxlZ2FsKGtleUNvZGUpKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlRGlzcGxheShmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogVHJ5IHRvIHN0YXJ0IGtleWJvYXJkIG1vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBrZXlDb2RlIFRoZSBrZXkgdG8gdXNlIGFzIHRoZSBmaXJzdCBwcmVzcy4gS2V5Ym9hcmQgbW9kZSB3aWxsIG5vdCBiZSBzdGFydGVkIGlmIHRoZQorICAgICAqIGtleSBpcyBub3QgbGVnYWwgdG8gc3RhcnQgd2l0aC4gT3IsIHBhc3MgaW4gLTEgdG8gZ2V0IGludG8ga2V5Ym9hcmQgbW9kZSB3aXRob3V0IGEgc3RhcnRpbmcKKyAgICAgKiBrZXkuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHRyeVN0YXJ0aW5nS2JNb2RlKGludCBrZXlDb2RlKSB7CisgICAgICAgIGlmIChrZXlDb2RlID09IC0xIHx8IGFkZEtleUlmTGVnYWwoa2V5Q29kZSkpIHsKKyAgICAgICAgICAgIG1JbktiTW9kZSA9IHRydWU7CisgICAgICAgICAgICBtRG9uZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgIHVwZGF0ZURpc3BsYXkoZmFsc2UpOworICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldElucHV0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gYWRkS2V5SWZMZWdhbChpbnQga2V5Q29kZSkgeworICAgICAgICAvLyBJZiB3ZSdyZSBpbiAyNGhvdXIgbW9kZSwgd2UnbGwgbmVlZCB0byBjaGVjayBpZiB0aGUgaW5wdXQgaXMgZnVsbC4gSWYgaW4gQU0vUE0gbW9kZSwKKyAgICAgICAgLy8gd2UnbGwgbmVlZCB0byBzZWUgaWYgQU0vUE0gaGF2ZSBiZWVuIHR5cGVkLgorICAgICAgICBpZiAoKG1JczI0SG91clZpZXcgJiYgbVR5cGVkVGltZXMuc2l6ZSgpID09IDQpIHx8CisgICAgICAgICAgICAgICAgKCFtSXMyNEhvdXJWaWV3ICYmIGlzVHlwZWRUaW1lRnVsbHlMZWdhbCgpKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbVR5cGVkVGltZXMuYWRkKGtleUNvZGUpOworICAgICAgICBpZiAoIWlzVHlwZWRUaW1lTGVnYWxTb0ZhcigpKSB7CisgICAgICAgICAgICBkZWxldGVMYXN0VHlwZWRLZXkoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCB2YWwgPSBnZXRWYWxGcm9tS2V5Q29kZShrZXlDb2RlKTsKKyAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eShTdHJpbmcuZm9ybWF0KCIlZCIsIHZhbCkpOworICAgICAgICAvLyBBdXRvbWF0aWNhbGx5IGZpbGwgaW4gMCdzIGlmIEFNIG9yIFBNIHdhcyBsZWdhbGx5IGVudGVyZWQuCisgICAgICAgIGlmIChpc1R5cGVkVGltZUZ1bGx5TGVnYWwoKSkgeworICAgICAgICAgICAgaWYgKCFtSXMyNEhvdXJWaWV3ICYmIG1UeXBlZFRpbWVzLnNpemUoKSA8PSAzKSB7CisgICAgICAgICAgICAgICAgbVR5cGVkVGltZXMuYWRkKG1UeXBlZFRpbWVzLnNpemUoKSAtIDEsIEtleUV2ZW50LktFWUNPREVfMCk7CisgICAgICAgICAgICAgICAgbVR5cGVkVGltZXMuYWRkKG1UeXBlZFRpbWVzLnNpemUoKSAtIDEsIEtleUV2ZW50LktFWUNPREVfMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtRG9uZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogVHJhdmVyc2UgdGhlIHRyZWUgdG8gc2VlIGlmIHRoZSBrZXlzIHRoYXQgaGF2ZSBiZWVuIHR5cGVkIHNvIGZhciBhcmUgbGVnYWwgYXMgaXMsCisgICAgICogb3IgbWF5IGJlY29tZSBsZWdhbCBhcyBtb3JlIGtleXMgYXJlIHR5cGVkIChleGNsdWRpbmcgYmFja3NwYWNlKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNUeXBlZFRpbWVMZWdhbFNvRmFyKCkgeworICAgICAgICBOb2RlIG5vZGUgPSBtTGVnYWxUaW1lc1RyZWU7CisgICAgICAgIGZvciAoaW50IGtleUNvZGUgOiBtVHlwZWRUaW1lcykgeworICAgICAgICAgICAgbm9kZSA9IG5vZGUuY2FuUmVhY2goa2V5Q29kZSk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSB0aW1lIHRoYXQgaGFzIGJlZW4gdHlwZWQgc28gZmFyIGlzIGNvbXBsZXRlbHkgbGVnYWwsIGFzIGlzLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc1R5cGVkVGltZUZ1bGx5TGVnYWwoKSB7CisgICAgICAgIGlmIChtSXMyNEhvdXJWaWV3KSB7CisgICAgICAgICAgICAvLyBGb3IgMjQtaG91ciBtb2RlLCB0aGUgdGltZSBpcyBsZWdhbCBpZiB0aGUgaG91cnMgYW5kIG1pbnV0ZXMgYXJlIGVhY2ggbGVnYWwuIE5vdGU6CisgICAgICAgICAgICAvLyBnZXRFbnRlcmVkVGltZSgpIHdpbGwgT05MWSBjYWxsIGlzVHlwZWRUaW1lRnVsbHlMZWdhbCgpIHdoZW4gTk9UIGluIDI0aG91ciBtb2RlLgorICAgICAgICAgICAgaW50W10gdmFsdWVzID0gZ2V0RW50ZXJlZFRpbWUobnVsbCk7CisgICAgICAgICAgICByZXR1cm4gKHZhbHVlc1swXSA+PSAwICYmIHZhbHVlc1sxXSA+PSAwICYmIHZhbHVlc1sxXSA8IDYwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZvciBBTS9QTSBtb2RlLCB0aGUgdGltZSBpcyBsZWdhbCBpZiBpdCBjb250YWlucyBhbiBBTSBvciBQTSwgYXMgdGhvc2UgY2FuIG9ubHkgYmUKKyAgICAgICAgICAgIC8vIGxlZ2FsbHkgYWRkZWQgYXQgc3BlY2lmaWMgdGltZXMgYmFzZWQgb24gdGhlIHRyZWUncyBhbGdvcml0aG0uCisgICAgICAgICAgICByZXR1cm4gKG1UeXBlZFRpbWVzLmNvbnRhaW5zKGdldEFtT3JQbUtleUNvZGUoQU0pKSB8fAorICAgICAgICAgICAgICAgICAgICBtVHlwZWRUaW1lcy5jb250YWlucyhnZXRBbU9yUG1LZXlDb2RlKFBNKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgZGVsZXRlTGFzdFR5cGVkS2V5KCkgeworICAgICAgICBpbnQgZGVsZXRlZCA9IG1UeXBlZFRpbWVzLnJlbW92ZShtVHlwZWRUaW1lcy5zaXplKCkgLSAxKTsKKyAgICAgICAgaWYgKCFpc1R5cGVkVGltZUZ1bGx5TGVnYWwoKSkgeworICAgICAgICAgICAgbURvbmVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlbGV0ZWQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IG91dCBvZiBrZXlib2FyZCBtb2RlLiBJZiB0aGVyZSBpcyBub3RoaW5nIGluIHR5cGVkVGltZXMsIHJldmVydCB0byBUaW1lUGlja2VyJ3MgdGltZS4KKyAgICAgKiBAcGFyYW0gdXBkYXRlRGlzcGxheXMgSWYgdHJ1ZSwgdXBkYXRlIHRoZSBkaXNwbGF5cyB3aXRoIHRoZSByZWxldmFudCB0aW1lLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBmaW5pc2hLYk1vZGUoYm9vbGVhbiB1cGRhdGVEaXNwbGF5cykgeworICAgICAgICBtSW5LYk1vZGUgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFtVHlwZWRUaW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGludCB2YWx1ZXNbXSA9IGdldEVudGVyZWRUaW1lKG51bGwpOworICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldEN1cnJlbnRIb3VyKHZhbHVlc1swXSk7CisgICAgICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuc2V0Q3VycmVudE1pbnV0ZSh2YWx1ZXNbMV0pOworICAgICAgICAgICAgaWYgKCFtSXMyNEhvdXJWaWV3KSB7CisgICAgICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldEFtT3JQbSh2YWx1ZXNbMl0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVR5cGVkVGltZXMuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXBkYXRlRGlzcGxheXMpIHsKKyAgICAgICAgICAgIHVwZGF0ZURpc3BsYXkoZmFsc2UpOworICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldElucHV0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgaG91cnMsIG1pbnV0ZXMsIGFuZCBBTS9QTSBkaXNwbGF5cyB3aXRoIHRoZSB0eXBlZCB0aW1lcy4gSWYgdGhlIHR5cGVkVGltZXMgaXMKKyAgICAgKiBlbXB0eSwgZWl0aGVyIHNob3cgYW4gZW1wdHkgZGlzcGxheSAoZmlsbGVkIHdpdGggdGhlIHBsYWNlaG9sZGVyIHRleHQpLCBvciB1cGRhdGUgZnJvbSB0aGUKKyAgICAgKiB0aW1lcGlja2VyJ3MgdmFsdWVzLgorICAgICAqCisgICAgICogQHBhcmFtIGFsbG93RW1wdHlEaXNwbGF5IGlmIHRydWUsIHRoZW4gaWYgdGhlIHR5cGVkVGltZXMgaXMgZW1wdHksIHVzZSB0aGUgcGxhY2Vob2xkZXIgdGV4dC4KKyAgICAgKiBPdGhlcndpc2UsIHJldmVydCB0byB0aGUgdGltZXBpY2tlcidzIHZhbHVlcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlRGlzcGxheShib29sZWFuIGFsbG93RW1wdHlEaXNwbGF5KSB7CisgICAgICAgIGlmICghYWxsb3dFbXB0eURpc3BsYXkgJiYgbVR5cGVkVGltZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpbnQgaG91ciA9IG1SYWRpYWxUaW1lUGlja2VyVmlldy5nZXRDdXJyZW50SG91cigpOworICAgICAgICAgICAgaW50IG1pbnV0ZSA9IG1SYWRpYWxUaW1lUGlja2VyVmlldy5nZXRDdXJyZW50TWludXRlKCk7CisgICAgICAgICAgICB1cGRhdGVIZWFkZXJIb3VyKGhvdXIsIHRydWUpOworICAgICAgICAgICAgdXBkYXRlSGVhZGVyTWludXRlKG1pbnV0ZSk7CisgICAgICAgICAgICBpZiAoIW1JczI0SG91clZpZXcpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVBbVBtRGlzcGxheShob3VyIDwgMTIgPyBBTSA6IFBNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldEN1cnJlbnRJdGVtU2hvd2luZyhtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0Q3VycmVudEl0ZW1TaG93aW5nKCksIHRydWUsIHRydWUsIHRydWUpOworICAgICAgICAgICAgbURvbmVCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJvb2xlYW5bXSBlbnRlcmVkWmVyb3MgPSB7ZmFsc2UsIGZhbHNlfTsKKyAgICAgICAgICAgIGludFtdIHZhbHVlcyA9IGdldEVudGVyZWRUaW1lKGVudGVyZWRaZXJvcyk7CisgICAgICAgICAgICBTdHJpbmcgaG91ckZvcm1hdCA9IGVudGVyZWRaZXJvc1swXSA/ICIlMDJkIiA6ICIlMmQiOworICAgICAgICAgICAgU3RyaW5nIG1pbnV0ZUZvcm1hdCA9IChlbnRlcmVkWmVyb3NbMV0pID8gIiUwMmQiIDogIiUyZCI7CisgICAgICAgICAgICBTdHJpbmcgaG91clN0ciA9ICh2YWx1ZXNbMF0gPT0gLTEpID8gbURvdWJsZVBsYWNlaG9sZGVyVGV4dCA6CisgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoaG91ckZvcm1hdCwgdmFsdWVzWzBdKS5yZXBsYWNlKCcgJywgbVBsYWNlaG9sZGVyVGV4dCk7CisgICAgICAgICAgICBTdHJpbmcgbWludXRlU3RyID0gKHZhbHVlc1sxXSA9PSAtMSkgPyBtRG91YmxlUGxhY2Vob2xkZXJUZXh0IDoKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdChtaW51dGVGb3JtYXQsIHZhbHVlc1sxXSkucmVwbGFjZSgnICcsIG1QbGFjZWhvbGRlclRleHQpOworICAgICAgICAgICAgbUhvdXJWaWV3LnNldFRleHQoaG91clN0cik7CisgICAgICAgICAgICBtSG91clZpZXcuc2V0VGV4dENvbG9yKG1IZWFkZXJVblNlbGVjdGVkQ29sb3IpOworICAgICAgICAgICAgbU1pbnV0ZVZpZXcuc2V0VGV4dChtaW51dGVTdHIpOworICAgICAgICAgICAgbU1pbnV0ZVZpZXcuc2V0VGV4dENvbG9yKG1IZWFkZXJVblNlbGVjdGVkQ29sb3IpOworICAgICAgICAgICAgaWYgKCFtSXMyNEhvdXJWaWV3KSB7CisgICAgICAgICAgICAgICAgdXBkYXRlQW1QbURpc3BsYXkodmFsdWVzWzJdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgaW50IGdldFZhbEZyb21LZXlDb2RlKGludCBrZXlDb2RlKSB7CisgICAgICAgIHN3aXRjaCAoa2V5Q29kZSkgeworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFXzA6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfMToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV8yOgorICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFXzM6CisgICAgICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV81OgorICAgICAgICAgICAgICAgIHJldHVybiA1OworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFXzY6CisgICAgICAgICAgICAgICAgcmV0dXJuIDY7CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfNzoKKyAgICAgICAgICAgICAgICByZXR1cm4gNzsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV84OgorICAgICAgICAgICAgICAgIHJldHVybiA4OworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFXzk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VycmVudGx5LWVudGVyZWQgdGltZSwgYXMgaW50ZWdlciB2YWx1ZXMgb2YgdGhlIGhvdXJzIGFuZCBtaW51dGVzIHR5cGVkLgorICAgICAqCisgICAgICogQHBhcmFtIGVudGVyZWRaZXJvcyBBIHNpemUtMiBib29sZWFuIGFycmF5LCB3aGljaCB0aGUgY2FsbGVyIHNob3VsZCBpbml0aWFsaXplLCBhbmQgd2hpY2gKKyAgICAgKiBtYXkgdGhlbiBiZSB1c2VkIGZvciB0aGUgY2FsbGVyIHRvIGtub3cgd2hldGhlciB6ZXJvcyBoYWQgYmVlbiBleHBsaWNpdGx5IGVudGVyZWQgYXMgZWl0aGVyCisgICAgICogaG91cnMgb2YgbWludXRlcy4gVGhpcyBpcyBoZWxwZnVsIGZvciBkZWNpZGluZyB3aGV0aGVyIHRvIHNob3cgdGhlIGRhc2hlcywgb3IgYWN0dWFsIDAncy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gQSBzaXplLTMgaW50IGFycmF5LiBUaGUgZmlyc3QgdmFsdWUgd2lsbCBiZSB0aGUgaG91cnMsIHRoZSBzZWNvbmQgdmFsdWUgd2lsbCBiZSB0aGUKKyAgICAgKiBtaW51dGVzLCBhbmQgdGhlIHRoaXJkIHdpbGwgYmUgZWl0aGVyIEFNIG9yIFBNLgorICAgICAqLworICAgIHByaXZhdGUgaW50W10gZ2V0RW50ZXJlZFRpbWUoYm9vbGVhbltdIGVudGVyZWRaZXJvcykgeworICAgICAgICBpbnQgYW1PclBtID0gLTE7CisgICAgICAgIGludCBzdGFydEluZGV4ID0gMTsKKyAgICAgICAgaWYgKCFtSXMyNEhvdXJWaWV3ICYmIGlzVHlwZWRUaW1lRnVsbHlMZWdhbCgpKSB7CisgICAgICAgICAgICBpbnQga2V5Q29kZSA9IG1UeXBlZFRpbWVzLmdldChtVHlwZWRUaW1lcy5zaXplKCkgLSAxKTsKKyAgICAgICAgICAgIGlmIChrZXlDb2RlID09IGdldEFtT3JQbUtleUNvZGUoQU0pKSB7CisgICAgICAgICAgICAgICAgYW1PclBtID0gQU07CisgICAgICAgICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT0gZ2V0QW1PclBtS2V5Q29kZShQTSkpeworICAgICAgICAgICAgICAgIGFtT3JQbSA9IFBNOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhcnRJbmRleCA9IDI7CisgICAgICAgIH0KKyAgICAgICAgaW50IG1pbnV0ZSA9IC0xOworICAgICAgICBpbnQgaG91ciA9IC0xOworICAgICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBtVHlwZWRUaW1lcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaW50IHZhbCA9IGdldFZhbEZyb21LZXlDb2RlKG1UeXBlZFRpbWVzLmdldChtVHlwZWRUaW1lcy5zaXplKCkgLSBpKSk7CisgICAgICAgICAgICBpZiAoaSA9PSBzdGFydEluZGV4KSB7CisgICAgICAgICAgICAgICAgbWludXRlID0gdmFsOworICAgICAgICAgICAgfSBlbHNlIGlmIChpID09IHN0YXJ0SW5kZXgrMSkgeworICAgICAgICAgICAgICAgIG1pbnV0ZSArPSAxMCAqIHZhbDsKKyAgICAgICAgICAgICAgICBpZiAoZW50ZXJlZFplcm9zICE9IG51bGwgJiYgdmFsID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZW50ZXJlZFplcm9zWzFdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT0gc3RhcnRJbmRleCsyKSB7CisgICAgICAgICAgICAgICAgaG91ciA9IHZhbDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PSBzdGFydEluZGV4KzMpIHsKKyAgICAgICAgICAgICAgICBob3VyICs9IDEwICogdmFsOworICAgICAgICAgICAgICAgIGlmIChlbnRlcmVkWmVyb3MgIT0gbnVsbCAmJiB2YWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBlbnRlcmVkWmVyb3NbMF0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGludFtdIHJldCA9IHtob3VyLCBtaW51dGUsIGFtT3JQbX07CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBrZXljb2RlIHZhbHVlIGZvciBBTSBhbmQgUE0gaW4gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0QW1PclBtS2V5Q29kZShpbnQgYW1PclBtKSB7CisgICAgICAgIC8vIENhY2hlIHRoZSBjb2Rlcy4KKyAgICAgICAgaWYgKG1BbUtleUNvZGUgPT0gLTEgfHwgbVBtS2V5Q29kZSA9PSAtMSkgeworICAgICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBBTS9QTSB0ZXh0IHRoYXQgaXMgdW5pcXVlLgorICAgICAgICAgICAgS2V5Q2hhcmFjdGVyTWFwIGtjbSA9IEtleUNoYXJhY3Rlck1hcC5sb2FkKEtleUNoYXJhY3Rlck1hcC5WSVJUVUFMX0tFWUJPQVJEKTsKKyAgICAgICAgICAgIGNoYXIgYW1DaGFyOworICAgICAgICAgICAgY2hhciBwbUNoYXI7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1hdGgubWF4KG1BbVRleHQubGVuZ3RoKCksIG1QbVRleHQubGVuZ3RoKCkpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhbUNoYXIgPSBtQW1UZXh0LnRvTG93ZXJDYXNlKG1DdXJyZW50TG9jYWxlKS5jaGFyQXQoaSk7CisgICAgICAgICAgICAgICAgcG1DaGFyID0gbVBtVGV4dC50b0xvd2VyQ2FzZShtQ3VycmVudExvY2FsZSkuY2hhckF0KGkpOworICAgICAgICAgICAgICAgIGlmIChhbUNoYXIgIT0gcG1DaGFyKSB7CisgICAgICAgICAgICAgICAgICAgIEtleUV2ZW50W10gZXZlbnRzID0ga2NtLmdldEV2ZW50cyhuZXcgY2hhcltde2FtQ2hhciwgcG1DaGFyfSk7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIHNob3VsZCBiZSA0IGV2ZW50czogYSBkb3duIGFuZCB1cCBmb3IgYm90aCBBTSBhbmQgUE0uCisgICAgICAgICAgICAgICAgICAgIGlmIChldmVudHMgIT0gbnVsbCAmJiBldmVudHMubGVuZ3RoID09IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1BbUtleUNvZGUgPSBldmVudHNbMF0uZ2V0S2V5Q29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbVBtS2V5Q29kZSA9IGV2ZW50c1syXS5nZXRLZXlDb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJVbmFibGUgdG8gZmluZCBrZXljb2RlcyBmb3IgQU0gYW5kIFBNLiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoYW1PclBtID09IEFNKSB7CisgICAgICAgICAgICByZXR1cm4gbUFtS2V5Q29kZTsKKyAgICAgICAgfSBlbHNlIGlmIChhbU9yUG0gPT0gUE0pIHsKKyAgICAgICAgICAgIHJldHVybiBtUG1LZXlDb2RlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIHRyZWUgZm9yIGRlY2lkaW5nIHdoYXQga2V5cyBjYW4gbGVnYWxseSBiZSB0eXBlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZ2VuZXJhdGVMZWdhbFRpbWVzVHJlZSgpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcXVpY2sgY2FjaGUgb2YgbnVtYmVycyB0byB0aGVpciBrZXljb2Rlcy4KKyAgICAgICAgZmluYWwgaW50IGswID0gS2V5RXZlbnQuS0VZQ09ERV8wOworICAgICAgICBmaW5hbCBpbnQgazEgPSBLZXlFdmVudC5LRVlDT0RFXzE7CisgICAgICAgIGZpbmFsIGludCBrMiA9IEtleUV2ZW50LktFWUNPREVfMjsKKyAgICAgICAgZmluYWwgaW50IGszID0gS2V5RXZlbnQuS0VZQ09ERV8zOworICAgICAgICBmaW5hbCBpbnQgazQgPSBLZXlFdmVudC5LRVlDT0RFXzQ7CisgICAgICAgIGZpbmFsIGludCBrNSA9IEtleUV2ZW50LktFWUNPREVfNTsKKyAgICAgICAgZmluYWwgaW50IGs2ID0gS2V5RXZlbnQuS0VZQ09ERV82OworICAgICAgICBmaW5hbCBpbnQgazcgPSBLZXlFdmVudC5LRVlDT0RFXzc7CisgICAgICAgIGZpbmFsIGludCBrOCA9IEtleUV2ZW50LktFWUNPREVfODsKKyAgICAgICAgZmluYWwgaW50IGs5ID0gS2V5RXZlbnQuS0VZQ09ERV85OworCisgICAgICAgIC8vIFRoZSByb290IG9mIHRoZSB0cmVlIGRvZXNuJ3QgY29udGFpbiBhbnkgbnVtYmVycy4KKyAgICAgICAgbUxlZ2FsVGltZXNUcmVlID0gbmV3IE5vZGUoKTsKKyAgICAgICAgaWYgKG1JczI0SG91clZpZXcpIHsKKyAgICAgICAgICAgIC8vIFdlJ2xsIGJlIHJlLXVzaW5nIHRoZXNlIG5vZGVzLCBzbyB3ZSdsbCBzYXZlIHRoZW0uCisgICAgICAgICAgICBOb2RlIG1pbnV0ZUZpcnN0RGlnaXQgPSBuZXcgTm9kZShrMCwgazEsIGsyLCBrMywgazQsIGs1KTsKKyAgICAgICAgICAgIE5vZGUgbWludXRlU2Vjb25kRGlnaXQgPSBuZXcgTm9kZShrMCwgazEsIGsyLCBrMywgazQsIGs1LCBrNiwgazcsIGs4LCBrOSk7CisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgZGlnaXQgbXVzdCBiZSBmb2xsb3dlZCBieSB0aGUgc2Vjb25kIGRpZ2l0LgorICAgICAgICAgICAgbWludXRlRmlyc3REaWdpdC5hZGRDaGlsZChtaW51dGVTZWNvbmREaWdpdCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBkaWdpdCBtYXkgYmUgMC0xLgorICAgICAgICAgICAgTm9kZSBmaXJzdERpZ2l0ID0gbmV3IE5vZGUoazAsIGsxKTsKKyAgICAgICAgICAgIG1MZWdhbFRpbWVzVHJlZS5hZGRDaGlsZChmaXJzdERpZ2l0KTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgZGlnaXQgaXMgMC0xLCB0aGUgc2Vjb25kIGRpZ2l0IG1heSBiZSAwLTUuCisgICAgICAgICAgICBOb2RlIHNlY29uZERpZ2l0ID0gbmV3IE5vZGUoazAsIGsxLCBrMiwgazMsIGs0LCBrNSk7CisgICAgICAgICAgICBmaXJzdERpZ2l0LmFkZENoaWxkKHNlY29uZERpZ2l0KTsKKyAgICAgICAgICAgIC8vIFdlIG1heSBub3cgYmUgZm9sbG93ZWQgYnkgdGhlIGZpcnN0IG1pbnV0ZSBkaWdpdC4gRS5nLiAwMDowOSwgMTU6NTguCisgICAgICAgICAgICBzZWNvbmREaWdpdC5hZGRDaGlsZChtaW51dGVGaXJzdERpZ2l0KTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgZGlnaXQgaXMgMC0xLCBhbmQgdGhlIHNlY29uZCBkaWdpdCBpcyAwLTUsIHRoZSB0aGlyZCBkaWdpdCBtYXkgYmUgNi05LgorICAgICAgICAgICAgTm9kZSB0aGlyZERpZ2l0ID0gbmV3IE5vZGUoazYsIGs3LCBrOCwgazkpOworICAgICAgICAgICAgLy8gVGhlIHRpbWUgbXVzdCBub3cgYmUgZmluaXNoZWQuIEUuZy4gMDo1NSwgMTowOC4KKyAgICAgICAgICAgIHNlY29uZERpZ2l0LmFkZENoaWxkKHRoaXJkRGlnaXQpOworCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBmaXJzdCBkaWdpdCBpcyAwLTEsIHRoZSBzZWNvbmQgZGlnaXQgbWF5IGJlIDYtOS4KKyAgICAgICAgICAgIHNlY29uZERpZ2l0ID0gbmV3IE5vZGUoazYsIGs3LCBrOCwgazkpOworICAgICAgICAgICAgZmlyc3REaWdpdC5hZGRDaGlsZChzZWNvbmREaWdpdCk7CisgICAgICAgICAgICAvLyBXZSBtdXN0IG5vdyBiZSBmb2xsb3dlZCBieSB0aGUgZmlyc3QgbWludXRlIGRpZ2l0LiBFLmcuIDA2OjUwLCAxODoyMC4KKyAgICAgICAgICAgIHNlY29uZERpZ2l0LmFkZENoaWxkKG1pbnV0ZUZpcnN0RGlnaXQpOworCisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgZGlnaXQgbWF5IGJlIDIuCisgICAgICAgICAgICBmaXJzdERpZ2l0ID0gbmV3IE5vZGUoazIpOworICAgICAgICAgICAgbUxlZ2FsVGltZXNUcmVlLmFkZENoaWxkKGZpcnN0RGlnaXQpOworCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBmaXJzdCBkaWdpdCBpcyAyLCB0aGUgc2Vjb25kIGRpZ2l0IG1heSBiZSAwLTMuCisgICAgICAgICAgICBzZWNvbmREaWdpdCA9IG5ldyBOb2RlKGswLCBrMSwgazIsIGszKTsKKyAgICAgICAgICAgIGZpcnN0RGlnaXQuYWRkQ2hpbGQoc2Vjb25kRGlnaXQpOworICAgICAgICAgICAgLy8gV2UgbXVzdCBub3cgYmUgZm9sbG93ZWQgYnkgdGhlIGZpcnN0IG1pbnV0ZSBkaWdpdC4gRS5nLiAyMDo1MCwgMjM6MDkuCisgICAgICAgICAgICBzZWNvbmREaWdpdC5hZGRDaGlsZChtaW51dGVGaXJzdERpZ2l0KTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgZGlnaXQgaXMgMiwgdGhlIHNlY29uZCBkaWdpdCBtYXkgYmUgNC01LgorICAgICAgICAgICAgc2Vjb25kRGlnaXQgPSBuZXcgTm9kZShrNCwgazUpOworICAgICAgICAgICAgZmlyc3REaWdpdC5hZGRDaGlsZChzZWNvbmREaWdpdCk7CisgICAgICAgICAgICAvLyBXZSBtdXN0IG5vdyBiZSBmb2xsb3dkIGJ5IHRoZSBsYXN0IG1pbnV0ZSBkaWdpdC4gRS5nLiAyOjQwLCAyOjUzLgorICAgICAgICAgICAgc2Vjb25kRGlnaXQuYWRkQ2hpbGQobWludXRlU2Vjb25kRGlnaXQpOworCisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgZGlnaXQgbWF5IGJlIDMtOS4KKyAgICAgICAgICAgIGZpcnN0RGlnaXQgPSBuZXcgTm9kZShrMywgazQsIGs1LCBrNiwgazcsIGs4LCBrOSk7CisgICAgICAgICAgICBtTGVnYWxUaW1lc1RyZWUuYWRkQ2hpbGQoZmlyc3REaWdpdCk7CisgICAgICAgICAgICAvLyBXZSBtdXN0IG5vdyBiZSBmb2xsb3dlZCBieSB0aGUgZmlyc3QgbWludXRlIGRpZ2l0LiBFLmcuIDM6NTcsIDg6MTIuCisgICAgICAgICAgICBmaXJzdERpZ2l0LmFkZENoaWxkKG1pbnV0ZUZpcnN0RGlnaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UnbGwgbmVlZCB0byB1c2UgdGhlIEFNL1BNIG5vZGUgYSBsb3QuCisgICAgICAgICAgICAvLyBTZXQgdXAgQU0gYW5kIFBNIHRvIHJlc3BvbmQgdG8gImEiIGFuZCAicCIuCisgICAgICAgICAgICBOb2RlIGFtcG0gPSBuZXcgTm9kZShnZXRBbU9yUG1LZXlDb2RlKEFNKSwgZ2V0QW1PclBtS2V5Q29kZShQTSkpOworCisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgaG91ciBkaWdpdCBtYXkgYmUgMS4KKyAgICAgICAgICAgIE5vZGUgZmlyc3REaWdpdCA9IG5ldyBOb2RlKGsxKTsKKyAgICAgICAgICAgIG1MZWdhbFRpbWVzVHJlZS5hZGRDaGlsZChmaXJzdERpZ2l0KTsKKyAgICAgICAgICAgIC8vIFdlJ2xsIGFsbG93IHF1aWNrIGlucHV0IG9mIG9uLXRoZS1ob3VyIHRpbWVzLiBFLmcuIDFwbS4KKyAgICAgICAgICAgIGZpcnN0RGlnaXQuYWRkQ2hpbGQoYW1wbSk7CisKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IGRpZ2l0IGlzIDEsIHRoZSBzZWNvbmQgZGlnaXQgbWF5IGJlIDAtMi4KKyAgICAgICAgICAgIE5vZGUgc2Vjb25kRGlnaXQgPSBuZXcgTm9kZShrMCwgazEsIGsyKTsKKyAgICAgICAgICAgIGZpcnN0RGlnaXQuYWRkQ2hpbGQoc2Vjb25kRGlnaXQpOworICAgICAgICAgICAgLy8gQWxzbyBmb3IgcXVpY2sgaW5wdXQgb2Ygb24tdGhlLWhvdXIgdGltZXMuIEUuZy4gMTBwbSwgMTJhbS4KKyAgICAgICAgICAgIHNlY29uZERpZ2l0LmFkZENoaWxkKGFtcG0pOworCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBmaXJzdCBkaWdpdCBpcyAxLCBhbmQgdGhlIHNlY29uZCBkaWdpdCBpcyAwLTIsIHRoZSB0aGlyZCBkaWdpdCBtYXkgYmUgMC01LgorICAgICAgICAgICAgTm9kZSB0aGlyZERpZ2l0ID0gbmV3IE5vZGUoazAsIGsxLCBrMiwgazMsIGs0LCBrNSk7CisgICAgICAgICAgICBzZWNvbmREaWdpdC5hZGRDaGlsZCh0aGlyZERpZ2l0KTsKKyAgICAgICAgICAgIC8vIFRoZSB0aW1lIG1heSBiZSBmaW5pc2hlZCBub3cuIEUuZy4gMTowMnBtLCAxOjI1YW0uCisgICAgICAgICAgICB0aGlyZERpZ2l0LmFkZENoaWxkKGFtcG0pOworCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBmaXJzdCBkaWdpdCBpcyAxLCB0aGUgc2Vjb25kIGRpZ2l0IGlzIDAtMiwgYW5kIHRoZSB0aGlyZCBkaWdpdCBpcyAwLTUsCisgICAgICAgICAgICAvLyB0aGUgZm91cnRoIGRpZ2l0IG1heSBiZSAwLTkuCisgICAgICAgICAgICBOb2RlIGZvdXJ0aERpZ2l0ID0gbmV3IE5vZGUoazAsIGsxLCBrMiwgazMsIGs0LCBrNSwgazYsIGs3LCBrOCwgazkpOworICAgICAgICAgICAgdGhpcmREaWdpdC5hZGRDaGlsZChmb3VydGhEaWdpdCk7CisgICAgICAgICAgICAvLyBUaGUgdGltZSBtdXN0IGJlIGZpbmlzaGVkIG5vdy4gRS5nLiAxMDo0OWFtLCAxMjo0MHBtLgorICAgICAgICAgICAgZm91cnRoRGlnaXQuYWRkQ2hpbGQoYW1wbSk7CisKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IGRpZ2l0IGlzIDEsIGFuZCB0aGUgc2Vjb25kIGRpZ2l0IGlzIDAtMiwgdGhlIHRoaXJkIGRpZ2l0IG1heSBiZSA2LTkuCisgICAgICAgICAgICB0aGlyZERpZ2l0ID0gbmV3IE5vZGUoazYsIGs3LCBrOCwgazkpOworICAgICAgICAgICAgc2Vjb25kRGlnaXQuYWRkQ2hpbGQodGhpcmREaWdpdCk7CisgICAgICAgICAgICAvLyBUaGUgdGltZSBtdXN0IGJlIGZpbmlzaGVkIG5vdy4gRS5nLiAxOjA4YW0sIDE6MjZwbS4KKyAgICAgICAgICAgIHRoaXJkRGlnaXQuYWRkQ2hpbGQoYW1wbSk7CisKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IGRpZ2l0IGlzIDEsIHRoZSBzZWNvbmQgZGlnaXQgbWF5IGJlIDMtNS4KKyAgICAgICAgICAgIHNlY29uZERpZ2l0ID0gbmV3IE5vZGUoazMsIGs0LCBrNSk7CisgICAgICAgICAgICBmaXJzdERpZ2l0LmFkZENoaWxkKHNlY29uZERpZ2l0KTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgZGlnaXQgaXMgMSwgYW5kIHRoZSBzZWNvbmQgZGlnaXQgaXMgMy01LCB0aGUgdGhpcmQgZGlnaXQgbWF5IGJlIDAtOS4KKyAgICAgICAgICAgIHRoaXJkRGlnaXQgPSBuZXcgTm9kZShrMCwgazEsIGsyLCBrMywgazQsIGs1LCBrNiwgazcsIGs4LCBrOSk7CisgICAgICAgICAgICBzZWNvbmREaWdpdC5hZGRDaGlsZCh0aGlyZERpZ2l0KTsKKyAgICAgICAgICAgIC8vIFRoZSB0aW1lIG11c3QgYmUgZmluaXNoZWQgbm93LiBFLmcuIDE6MzlhbSwgMTo1MHBtLgorICAgICAgICAgICAgdGhpcmREaWdpdC5hZGRDaGlsZChhbXBtKTsKKworICAgICAgICAgICAgLy8gVGhlIGhvdXIgZGlnaXQgbWF5IGJlIDItOS4KKyAgICAgICAgICAgIGZpcnN0RGlnaXQgPSBuZXcgTm9kZShrMiwgazMsIGs0LCBrNSwgazYsIGs3LCBrOCwgazkpOworICAgICAgICAgICAgbUxlZ2FsVGltZXNUcmVlLmFkZENoaWxkKGZpcnN0RGlnaXQpOworICAgICAgICAgICAgLy8gV2UnbGwgYWxsb3cgcXVpY2sgaW5wdXQgb2Ygb24tdGhlLWhvdXItdGltZXMuIEUuZy4gMmFtLCA1cG0uCisgICAgICAgICAgICBmaXJzdERpZ2l0LmFkZENoaWxkKGFtcG0pOworCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBmaXJzdCBkaWdpdCBpcyAyLTksIHRoZSBzZWNvbmQgZGlnaXQgbWF5IGJlIDAtNS4KKyAgICAgICAgICAgIHNlY29uZERpZ2l0ID0gbmV3IE5vZGUoazAsIGsxLCBrMiwgazMsIGs0LCBrNSk7CisgICAgICAgICAgICBmaXJzdERpZ2l0LmFkZENoaWxkKHNlY29uZERpZ2l0KTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgZGlnaXQgaXMgMi05LCBhbmQgdGhlIHNlY29uZCBkaWdpdCBpcyAwLTUsIHRoZSB0aGlyZCBkaWdpdCBtYXkgYmUgMC05LgorICAgICAgICAgICAgdGhpcmREaWdpdCA9IG5ldyBOb2RlKGswLCBrMSwgazIsIGszLCBrNCwgazUsIGs2LCBrNywgazgsIGs5KTsKKyAgICAgICAgICAgIHNlY29uZERpZ2l0LmFkZENoaWxkKHRoaXJkRGlnaXQpOworICAgICAgICAgICAgLy8gVGhlIHRpbWUgbXVzdCBiZSBmaW5pc2hlZCBub3cuIEUuZy4gMjo1N2FtLCA5OjMwcG0uCisgICAgICAgICAgICB0aGlyZERpZ2l0LmFkZENoaWxkKGFtcG0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2ltcGxlIG5vZGUgY2xhc3MgdG8gYmUgdXNlZCBmb3IgdHJhdmVyc2FsIHRvIGNoZWNrIGZvciBsZWdhbCB0aW1lcy4KKyAgICAgKiBtTGVnYWxLZXlzIHJlcHJlc2VudHMgdGhlIGtleXMgdGhhdCBjYW4gYmUgdHlwZWQgdG8gZ2V0IHRvIHRoZSBub2RlLgorICAgICAqIG1DaGlsZHJlbiBhcmUgdGhlIGNoaWxkcmVuIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB0aGlzIG5vZGUuCisgICAgICovCisgICAgcHJpdmF0ZSBjbGFzcyBOb2RlIHsKKyAgICAgICAgcHJpdmF0ZSBpbnRbXSBtTGVnYWxLZXlzOworICAgICAgICBwcml2YXRlIEFycmF5TGlzdDxOb2RlPiBtQ2hpbGRyZW47CisKKyAgICAgICAgcHVibGljIE5vZGUoaW50Li4uIGxlZ2FsS2V5cykgeworICAgICAgICAgICAgbUxlZ2FsS2V5cyA9IGxlZ2FsS2V5czsKKyAgICAgICAgICAgIG1DaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8Tm9kZT4oKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGFkZENoaWxkKE5vZGUgY2hpbGQpIHsKKyAgICAgICAgICAgIG1DaGlsZHJlbi5hZGQoY2hpbGQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNLZXkoaW50IGtleSkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTGVnYWxLZXlzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1MZWdhbEtleXNbaV0gPT0ga2V5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBOb2RlIGNhblJlYWNoKGludCBrZXkpIHsKKyAgICAgICAgICAgIGlmIChtQ2hpbGRyZW4gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChOb2RlIGNoaWxkIDogbUNoaWxkcmVuKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNvbnRhaW5zS2V5KGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBLZXlib2FyZExpc3RlbmVyIGltcGxlbWVudHMgVmlldy5PbktleUxpc3RlbmVyIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIG9uS2V5KFZpZXcgdiwgaW50IGtleUNvZGUsIEtleUV2ZW50IGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0QWN0aW9uKCkgPT0gS2V5RXZlbnQuQUNUSU9OX1VQKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NLZXlVcChrZXlDb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbmRlciBhbiBhbmltYXRvciB0byBwdWxzYXRlIGEgdmlldyBpbiBwbGFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsYWJlbFRvQW5pbWF0ZSB0aGUgdmlldyB0byBwdWxzYXRlLgorICAgICAqIEByZXR1cm4gVGhlIGFuaW1hdG9yIG9iamVjdC4gVXNlIC5zdGFydCgpIHRvIGJlZ2luLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIE9iamVjdEFuaW1hdG9yIGdldFB1bHNlQW5pbWF0b3IoVmlldyBsYWJlbFRvQW5pbWF0ZSwgZmxvYXQgZGVjcmVhc2VSYXRpbywKKyAgICAgICAgICAgIGZsb2F0IGluY3JlYXNlUmF0aW8pIHsKKyAgICAgICAgZmluYWwgS2V5ZnJhbWUgazAgPSBLZXlmcmFtZS5vZkZsb2F0KDBmLCAxZik7CisgICAgICAgIGZpbmFsIEtleWZyYW1lIGsxID0gS2V5ZnJhbWUub2ZGbG9hdCgwLjI3NWYsIGRlY3JlYXNlUmF0aW8pOworICAgICAgICBmaW5hbCBLZXlmcmFtZSBrMiA9IEtleWZyYW1lLm9mRmxvYXQoMC42OWYsIGluY3JlYXNlUmF0aW8pOworICAgICAgICBmaW5hbCBLZXlmcmFtZSBrMyA9IEtleWZyYW1lLm9mRmxvYXQoMWYsIDFmKTsKKworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBzY2FsZVggPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZktleWZyYW1lKCJzY2FsZVgiLCBrMCwgazEsIGsyLCBrMyk7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHNjYWxlWSA9IFByb3BlcnR5VmFsdWVzSG9sZGVyLm9mS2V5ZnJhbWUoInNjYWxlWSIsIGswLCBrMSwgazIsIGszKTsKKyAgICAgICAgT2JqZWN0QW5pbWF0b3IgcHVsc2VBbmltYXRvciA9CisgICAgICAgICAgICAgICAgT2JqZWN0QW5pbWF0b3Iub2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcihsYWJlbFRvQW5pbWF0ZSwgc2NhbGVYLCBzY2FsZVkpOworICAgICAgICBwdWxzZUFuaW1hdG9yLnNldER1cmF0aW9uKFBVTFNFX0FOSU1BVE9SX0RVUkFUSU9OKTsKKworICAgICAgICByZXR1cm4gcHVsc2VBbmltYXRvcjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVG9hc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Ub2FzdC5qYXZhCmluZGV4IGUzOGRmYTcuLmJmNWU0OWI5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVG9hc3QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVG9hc3QuamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQud2lkZ2V0OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKIGltcG9ydCBhbmRyb2lkLmFwcC5JTm90aWZpY2F0aW9uTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5JVHJhbnNpZW50Tm90aWZpY2F0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwpAQCAtMjksMTEgKzMwLDEzIEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXI7CiAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OworCiAvKioKICAqIEEgdG9hc3QgaXMgYSB2aWV3IGNvbnRhaW5pbmcgYSBxdWljayBsaXR0bGUgbWVzc2FnZSBmb3IgdGhlIHVzZXIuICBUaGUgdG9hc3QgY2xhc3MKICAqIGhlbHBzIHlvdSBjcmVhdGUgYW5kIHNob3cgdGhvc2UuCkBAIC02MSw2ICs2NCwxMSBAQAogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlRvYXN0IjsKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBsb2NhbExPR1YgPSBmYWxzZTsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoe0xFTkdUSF9TSE9SVCwgTEVOR1RIX0xPTkd9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBEdXJhdGlvbiB7fQorCiAgICAgLyoqCiAgICAgICogU2hvdyB0aGUgdmlldyBvciB0ZXh0IG5vdGlmaWNhdGlvbiBmb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZS4gIFRoaXMgdGltZQogICAgICAqIGNvdWxkIGJlIHVzZXItZGVmaW5hYmxlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KQEAgLTE1Miw3ICsxNjAsNyBAQAogICAgICAqIEBzZWUgI0xFTkdUSF9TSE9SVAogICAgICAqIEBzZWUgI0xFTkdUSF9MT05HCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RHVyYXRpb24oaW50IGR1cmF0aW9uKSB7CisgICAgcHVibGljIHZvaWQgc2V0RHVyYXRpb24oQER1cmF0aW9uIGludCBkdXJhdGlvbikgewogICAgICAgICBtRHVyYXRpb24gPSBkdXJhdGlvbjsKICAgICB9CiAKQEAgLTE2MCw2ICsxNjgsNyBAQAogICAgICAqIFJldHVybiB0aGUgZHVyYXRpb24uCiAgICAgICogQHNlZSAjc2V0RHVyYXRpb24KICAgICAgKi8KKyAgICBARHVyYXRpb24KICAgICBwdWJsaWMgaW50IGdldER1cmF0aW9uKCkgewogICAgICAgICByZXR1cm4gbUR1cmF0aW9uOwogICAgIH0KQEAgLTIzNyw3ICsyNDYsNyBAQAogICAgICAqICAgICAgICAgICAgICAgICB7QGxpbmsgI0xFTkdUSF9MT05HfQogICAgICAqCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBUb2FzdCBtYWtlVGV4dChDb250ZXh0IGNvbnRleHQsIENoYXJTZXF1ZW5jZSB0ZXh0LCBpbnQgZHVyYXRpb24pIHsKKyAgICBwdWJsaWMgc3RhdGljIFRvYXN0IG1ha2VUZXh0KENvbnRleHQgY29udGV4dCwgQ2hhclNlcXVlbmNlIHRleHQsIEBEdXJhdGlvbiBpbnQgZHVyYXRpb24pIHsKICAgICAgICAgVG9hc3QgcmVzdWx0ID0gbmV3IFRvYXN0KGNvbnRleHQpOwogCiAgICAgICAgIExheW91dEluZmxhdGVyIGluZmxhdGUgPSAoTGF5b3V0SW5mbGF0ZXIpCkBAIC0yNjMsNyArMjcyLDcgQEAKICAgICAgKgogICAgICAqIEB0aHJvd3MgUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uIGlmIHRoZSByZXNvdXJjZSBjYW4ndCBiZSBmb3VuZC4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFRvYXN0IG1ha2VUZXh0KENvbnRleHQgY29udGV4dCwgaW50IHJlc0lkLCBpbnQgZHVyYXRpb24pCisgICAgcHVibGljIHN0YXRpYyBUb2FzdCBtYWtlVGV4dChDb250ZXh0IGNvbnRleHQsIGludCByZXNJZCwgQER1cmF0aW9uIGludCBkdXJhdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBtYWtlVGV4dChjb250ZXh0LCBjb250ZXh0LmdldFJlc291cmNlcygpLmdldFRleHQocmVzSWQpLCBkdXJhdGlvbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RvZ2dsZUJ1dHRvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RvZ2dsZUJ1dHRvbi5qYXZhCmluZGV4IGNlZGM3NzcuLjI4NTE5ZDEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Ub2dnbGVCdXR0b24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVG9nZ2xlQnV0dG9uLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLndpZGdldDsKIAotCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CkBAIC0yNSw4ICsyNCw2IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7Ci0KIC8qKgogICogRGlzcGxheXMgY2hlY2tlZC91bmNoZWNrZWQgc3RhdGVzIGFzIGEgYnV0dG9uCiAgKiB3aXRoIGEgImxpZ2h0IiBpbmRpY2F0b3IgYW5kIGJ5IGRlZmF1bHQgYWNjb21wYW5pZWQgd2l0aCB0aGUgdGV4dCAiT04iIG9yICJPRkYiLgpAQCAtNDYsMTMgKzQzLDEyIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9fQUxQSEEgPSAweEZGOwogICAgIHByaXZhdGUgZmxvYXQgbURpc2FibGVkQWxwaGE7Ci0gICAgCi0gICAgcHVibGljIFRvZ2dsZUJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPQotICAgICAgICAgICAgY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAotICAgICAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVG9nZ2xlQnV0dG9uLCBkZWZTdHlsZSwgMCk7CisKKyAgICBwdWJsaWMgVG9nZ2xlQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVG9nZ2xlQnV0dG9uLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgbVRleHRPbiA9IGEuZ2V0VGV4dChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Ub2dnbGVCdXR0b25fdGV4dE9uKTsKICAgICAgICAgbVRleHRPZmYgPSBhLmdldFRleHQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVG9nZ2xlQnV0dG9uX3RleHRPZmYpOwogICAgICAgICBtRGlzYWJsZWRBbHBoYSA9IGEuZ2V0RmxvYXQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVG9nZ2xlQnV0dG9uX2Rpc2FibGVkQWxwaGEsIDAuNWYpOwpAQCAtNjAsNiArNTYsMTAgQEAKICAgICAgICAgYS5yZWN5Y2xlKCk7CiAgICAgfQogCisgICAgcHVibGljIFRvZ2dsZUJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKwogICAgIHB1YmxpYyBUb2dnbGVCdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmJ1dHRvblN0eWxlVG9nZ2xlKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVHdvTGluZUxpc3RJdGVtLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVHdvTGluZUxpc3RJdGVtLmphdmEKaW5kZXggZjdlNTI2Ni4uNTYwNmM2MCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1R3b0xpbmVMaXN0SXRlbS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Ud29MaW5lTGlzdEl0ZW0uamF2YQpAQCAtNTYsMTEgKzU2LDE1IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOyAKICAgICB9CiAKLSAgICBwdWJsaWMgVHdvTGluZUxpc3RJdGVtKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgVHdvTGluZUxpc3RJdGVtKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Ud29MaW5lTGlzdEl0ZW0sIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgVHdvTGluZUxpc3RJdGVtKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVHdvTGluZUxpc3RJdGVtLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVmlkZW9WaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVmlkZW9WaWV3LmphdmEKaW5kZXggZDU3YjczOS4uZjIzYzY0ZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1ZpZGVvVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9WaWRlb1ZpZXcuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKQEAgLTEyNyw4ICsxMjYsMTIgQEAKICAgICAgICAgaW5pdFZpZGVvVmlldygpOwogICAgIH0KIAotICAgIHB1YmxpYyBWaWRlb1ZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBWaWRlb1ZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgVmlkZW9WaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBpbml0VmlkZW9WaWV3KCk7CiAgICAgfQogCkBAIC0yOTcsMTEgKzMwMCw4IEBACiAgICAgICAgICAgICAvLyBub3QgcmVhZHkgZm9yIHBsYXliYWNrIGp1c3QgeWV0LCB3aWxsIHRyeSBhZ2FpbiBsYXRlcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIC8vIFRlbGwgdGhlIG11c2ljIHBsYXliYWNrIHNlcnZpY2UgdG8gcGF1c2UKLSAgICAgICAgLy8gVE9ETzogdGhlc2UgY29uc3RhbnRzIG5lZWQgdG8gYmUgcHVibGlzaGVkIHNvbWV3aGVyZSBpbiB0aGUgZnJhbWV3b3JrLgotICAgICAgICBJbnRlbnQgaSA9IG5ldyBJbnRlbnQoImNvbS5hbmRyb2lkLm11c2ljLm11c2ljc2VydmljZWNvbW1hbmQiKTsKLSAgICAgICAgaS5wdXRFeHRyYSgiY29tbWFuZCIsICJwYXVzZSIpOwotICAgICAgICBtQ29udGV4dC5zZW5kQnJvYWRjYXN0KGkpOworICAgICAgICBBdWRpb01hbmFnZXIgYW0gPSAoQXVkaW9NYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQVVESU9fU0VSVklDRSk7CisgICAgICAgIGFtLnJlcXVlc3RBdWRpb0ZvY3VzKG51bGwsIEF1ZGlvTWFuYWdlci5TVFJFQU1fTVVTSUMsIEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0dBSU4pOwogCiAgICAgICAgIC8vIHdlIHNob3VsZG4ndCBjbGVhciB0aGUgdGFyZ2V0IHN0YXRlLCBiZWNhdXNlIHNvbWVib2R5IG1pZ2h0IGhhdmUKICAgICAgICAgLy8gY2FsbGVkIHN0YXJ0KCkgcHJldmlvdXNseQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1pvb21CdXR0b24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9ab29tQnV0dG9uLmphdmEKaW5kZXggYWYxN2M5NC4uNzE1ZTg2OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1pvb21CdXR0b24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvWm9vbUJ1dHRvbi5qYXZhCkBAIC00OSw4ICs0OSwxMiBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CiAgICAgCi0gICAgcHVibGljIFpvb21CdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBab29tQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFpvb21CdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1IYW5kbGVyID0gbmV3IEhhbmRsZXIoKTsKICAgICAgICAgc2V0T25Mb25nQ2xpY2tMaXN0ZW5lcih0aGlzKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvWm9vbUJ1dHRvbnNDb250cm9sbGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvWm9vbUJ1dHRvbnNDb250cm9sbGVyLmphdmEKaW5kZXggNTBjODAzYi4uZjdlOTY0OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1pvb21CdXR0b25zQ29udHJvbGxlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9ab29tQnV0dG9uc0NvbnRyb2xsZXIuamF2YQpAQCAtMzIsNyArMzIsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3UGFyZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Um9vdEltcGw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9BY3Rpb25CYXJJbXBsLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0FjdGlvbkJhckltcGwuamF2YQppbmRleCAwNjZkNmMzLi4zNDdmOTU3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0FjdGlvbkJhckltcGwuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0FjdGlvbkJhckltcGwuamF2YQpAQCAtNDIsNyArNDIsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkFjdGlvbk1vZGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRUaGVtZVdyYXBwZXI7CkBAIC01MSw3ICs1MCw2IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvblV0aWxzOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9BbGVydENvbnRyb2xsZXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvQWxlcnRDb250cm9sbGVyLmphdmEKaW5kZXggZmU1MzJiMC4uYTdhN2U3ZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9BbGVydENvbnRyb2xsZXIuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0FsZXJ0Q29udHJvbGxlci5qYXZhCkBAIC03MCw2ICs3MCw4IEBACiAgICAgCiAgICAgcHJpdmF0ZSBWaWV3IG1WaWV3OwogCisgICAgcHJpdmF0ZSBpbnQgbVZpZXdMYXlvdXRSZXNJZDsKKwogICAgIHByaXZhdGUgaW50IG1WaWV3U3BhY2luZ0xlZnQ7CiAgICAgCiAgICAgcHJpdmF0ZSBpbnQgbVZpZXdTcGFjaW5nVG9wOwpAQCAtMjMyLDExICsyMzQsNiBAQAogICAgIHB1YmxpYyB2b2lkIGluc3RhbGxDb250ZW50KCkgewogICAgICAgICAvKiBXZSB1c2UgYSBjdXN0b20gdGl0bGUgc28gbmV2ZXIgcmVxdWVzdCBhIHdpbmRvdyB0aXRsZSAqLwogICAgICAgICBtV2luZG93LnJlcXVlc3RGZWF0dXJlKFdpbmRvdy5GRUFUVVJFX05PX1RJVExFKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtVmlldyA9PSBudWxsIHx8ICFjYW5UZXh0SW5wdXQobVZpZXcpKSB7Ci0gICAgICAgICAgICBtV2luZG93LnNldEZsYWdzKFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfQUxUX0ZPQ1VTQUJMRV9JTSwKLSAgICAgICAgICAgICAgICAgICAgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19BTFRfRk9DVVNBQkxFX0lNKTsKLSAgICAgICAgfQogICAgICAgICBtV2luZG93LnNldENvbnRlbnRWaWV3KG1BbGVydERpYWxvZ0xheW91dCk7CiAgICAgICAgIHNldHVwVmlldygpOwogICAgIH0KQEAgLTI2MywxMCArMjYwLDIwIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogU2V0IHRoZSB2aWV3IHJlc291cmNlIHRvIGRpc3BsYXkgaW4gdGhlIGRpYWxvZy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRWaWV3KGludCBsYXlvdXRSZXNJZCkgeworICAgICAgICBtVmlldyA9IG51bGw7CisgICAgICAgIG1WaWV3TGF5b3V0UmVzSWQgPSBsYXlvdXRSZXNJZDsKKyAgICAgICAgbVZpZXdTcGFjaW5nU3BlY2lmaWVkID0gZmFsc2U7CisgICAgfQorCisgICAgLyoqCiAgICAgICogU2V0IHRoZSB2aWV3IHRvIGRpc3BsYXkgaW4gdGhlIGRpYWxvZy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWaWV3KFZpZXcgdmlldykgewogICAgICAgICBtVmlldyA9IHZpZXc7CisgICAgICAgIG1WaWV3TGF5b3V0UmVzSWQgPSAwOwogICAgICAgICBtVmlld1NwYWNpbmdTcGVjaWZpZWQgPSBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0yNzYsNiArMjgzLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRWaWV3KFZpZXcgdmlldywgaW50IHZpZXdTcGFjaW5nTGVmdCwgaW50IHZpZXdTcGFjaW5nVG9wLCBpbnQgdmlld1NwYWNpbmdSaWdodCwKICAgICAgICAgICAgIGludCB2aWV3U3BhY2luZ0JvdHRvbSkgewogICAgICAgICBtVmlldyA9IHZpZXc7CisgICAgICAgIG1WaWV3TGF5b3V0UmVzSWQgPSAwOwogICAgICAgICBtVmlld1NwYWNpbmdTcGVjaWZpZWQgPSB0cnVlOwogICAgICAgICBtVmlld1NwYWNpbmdMZWZ0ID0gdmlld1NwYWNpbmdMZWZ0OwogICAgICAgICBtVmlld1NwYWNpbmdUb3AgPSB2aWV3U3BhY2luZ1RvcDsKQEAgLTQwNiwyMCArNDE0LDM2IEBACiAgICAgICAgICAgICBtV2luZG93LnNldENsb3NlT25Ub3VjaE91dHNpZGVJZk5vdFNldCh0cnVlKTsKICAgICAgICAgfQogCi0gICAgICAgIEZyYW1lTGF5b3V0IGN1c3RvbVBhbmVsID0gbnVsbDsKKyAgICAgICAgZmluYWwgRnJhbWVMYXlvdXQgY3VzdG9tUGFuZWwgPSAoRnJhbWVMYXlvdXQpIG1XaW5kb3cuZmluZFZpZXdCeUlkKFIuaWQuY3VzdG9tUGFuZWwpOworICAgICAgICBmaW5hbCBWaWV3IGN1c3RvbVZpZXc7CiAgICAgICAgIGlmIChtVmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjdXN0b21QYW5lbCA9IChGcmFtZUxheW91dCkgbVdpbmRvdy5maW5kVmlld0J5SWQoUi5pZC5jdXN0b21QYW5lbCk7Ci0gICAgICAgICAgICBGcmFtZUxheW91dCBjdXN0b20gPSAoRnJhbWVMYXlvdXQpIG1XaW5kb3cuZmluZFZpZXdCeUlkKFIuaWQuY3VzdG9tKTsKLSAgICAgICAgICAgIGN1c3RvbS5hZGRWaWV3KG1WaWV3LCBuZXcgTGF5b3V0UGFyYW1zKE1BVENIX1BBUkVOVCwgTUFUQ0hfUEFSRU5UKSk7CisgICAgICAgICAgICBjdXN0b21WaWV3ID0gbVZpZXc7CisgICAgICAgIH0gZWxzZSBpZiAobVZpZXdMYXlvdXRSZXNJZCAhPSAwKSB7CisgICAgICAgICAgICBmaW5hbCBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IExheW91dEluZmxhdGVyLmZyb20obUNvbnRleHQpOworICAgICAgICAgICAgY3VzdG9tVmlldyA9IGluZmxhdGVyLmluZmxhdGUobVZpZXdMYXlvdXRSZXNJZCwgY3VzdG9tUGFuZWwsIGZhbHNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGN1c3RvbVZpZXcgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1c3RvbVZpZXcgPT0gbnVsbCB8fCAhY2FuVGV4dElucHV0KGN1c3RvbVZpZXcpKSB7CisgICAgICAgICAgICBtV2luZG93LnNldEZsYWdzKFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfQUxUX0ZPQ1VTQUJMRV9JTSwKKyAgICAgICAgICAgICAgICAgICAgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19BTFRfRk9DVVNBQkxFX0lNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXN0b21WaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIEZyYW1lTGF5b3V0IGN1c3RvbSA9IChGcmFtZUxheW91dCkgbVdpbmRvdy5maW5kVmlld0J5SWQoUi5pZC5jdXN0b20pOworICAgICAgICAgICAgY3VzdG9tLmFkZFZpZXcoY3VzdG9tVmlldywgbmV3IExheW91dFBhcmFtcyhNQVRDSF9QQVJFTlQsIE1BVENIX1BBUkVOVCkpOworCiAgICAgICAgICAgICBpZiAobVZpZXdTcGFjaW5nU3BlY2lmaWVkKSB7Ci0gICAgICAgICAgICAgICAgY3VzdG9tLnNldFBhZGRpbmcobVZpZXdTcGFjaW5nTGVmdCwgbVZpZXdTcGFjaW5nVG9wLCBtVmlld1NwYWNpbmdSaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WaWV3U3BhY2luZ0JvdHRvbSk7CisgICAgICAgICAgICAgICAgY3VzdG9tLnNldFBhZGRpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICBtVmlld1NwYWNpbmdMZWZ0LCBtVmlld1NwYWNpbmdUb3AsIG1WaWV3U3BhY2luZ1JpZ2h0LCBtVmlld1NwYWNpbmdCb3R0b20pOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAobUxpc3RWaWV3ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAoKExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMpIGN1c3RvbVBhbmVsLmdldExheW91dFBhcmFtcygpKS53ZWlnaHQgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVdpbmRvdy5maW5kVmlld0J5SWQoUi5pZC5jdXN0b21QYW5lbCkuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOworICAgICAgICAgICAgY3VzdG9tUGFuZWwuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvKiBPbmx5IGRpc3BsYXkgdGhlIGRpdmlkZXIgaWYgd2UgaGF2ZSBhIHRpdGxlIGFuZCBhIApAQCAtNDI3LDcgKzQ1MSw3IEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoaGFzVGl0bGUpIHsKICAgICAgICAgICAgIFZpZXcgZGl2aWRlciA9IG51bGw7Ci0gICAgICAgICAgICBpZiAobU1lc3NhZ2UgIT0gbnVsbCB8fCBtVmlldyAhPSBudWxsIHx8IG1MaXN0VmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAobU1lc3NhZ2UgIT0gbnVsbCB8fCBjdXN0b21WaWV3ICE9IG51bGwgfHwgbUxpc3RWaWV3ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBkaXZpZGVyID0gbVdpbmRvdy5maW5kVmlld0J5SWQoUi5pZC50aXRsZURpdmlkZXIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkaXZpZGVyID0gbVdpbmRvdy5maW5kVmlld0J5SWQoUi5pZC50aXRsZURpdmlkZXJUb3ApOwpAQCAtNzM2LDggKzc2MCwxMyBAQAogICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIFJlY3ljbGVMaXN0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgICAgICBwdWJsaWMgUmVjeWNsZUxpc3RWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBSZWN5Y2xlTGlzdFZpZXcoCisgICAgICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC03NjksNiArNzk4LDcgQEAKICAgICAgICAgcHVibGljIENoYXJTZXF1ZW5jZVtdIG1JdGVtczsKICAgICAgICAgcHVibGljIExpc3RBZGFwdGVyIG1BZGFwdGVyOwogICAgICAgICBwdWJsaWMgRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lciBtT25DbGlja0xpc3RlbmVyOworICAgICAgICBwdWJsaWMgaW50IG1WaWV3TGF5b3V0UmVzSWQ7CiAgICAgICAgIHB1YmxpYyBWaWV3IG1WaWV3OwogICAgICAgICBwdWJsaWMgaW50IG1WaWV3U3BhY2luZ0xlZnQ7CiAgICAgICAgIHB1YmxpYyBpbnQgbVZpZXdTcGFjaW5nVG9wOwpAQCAtODU0LDggKzg4NCwxMCBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGRpYWxvZy5zZXRWaWV3KG1WaWV3KTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1WaWV3TGF5b3V0UmVzSWQgIT0gMCkgeworICAgICAgICAgICAgICAgIGRpYWxvZy5zZXRWaWV3KG1WaWV3TGF5b3V0UmVzSWQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICBkaWFsb2cuc2V0Q2FuY2VsYWJsZShtQ2FuY2VsYWJsZSk7CiAgICAgICAgICAgICBkaWFsb2cuc2V0T25DYW5jZWxMaXN0ZW5lcihtT25DYW5jZWxMaXN0ZW5lcik7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0hlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eS5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9IZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuamF2YQppbmRleCAzZDQ2Y2RkLi44M2FkOWRjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0hlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eS5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvSGVhdnlXZWlnaHRTd2l0Y2hlckFjdGl2aXR5LmphdmEKQEAgLTMyLDcgKzMyLDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0lCYXR0ZXJ5U3RhdHMuYWlkbCBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvSUJhdHRlcnlTdGF0cy5haWRsCmluZGV4IDQzYzRiNDkuLjA3NzEzMjkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvSUJhdHRlcnlTdGF0cy5haWRsCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvSUJhdHRlcnlTdGF0cy5haWRsCkBAIC0yMiwxNyArMjIsMTUgQEAKIGltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5TaWduYWxTdHJlbmd0aDsKIAogaW50ZXJmYWNlIElCYXR0ZXJ5U3RhdHMgeworICAgIC8vIFRoZXNlIGZpcnN0IG1ldGhvZHMgYXJlIGFsc28gY2FsbGVkIGJ5IG5hdGl2ZSBjb2RlLCBzbyBtdXN0CisgICAgLy8gYmUga2VwdCBpbiBzeW5jIHdpdGggZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9iaW5kZXIvSUJhdHRlcnlTdGF0cy5oCisgICAgdm9pZCBub3RlU3RhcnRTZW5zb3IoaW50IHVpZCwgaW50IHNlbnNvcik7CisgICAgdm9pZCBub3RlU3RvcFNlbnNvcihpbnQgdWlkLCBpbnQgc2Vuc29yKTsKKworICAgIC8vIFJlbWFpbmluZyBtZXRob2RzIGFyZSBvbmx5IHVzZWQgaW4gSmF2YS4KICAgICBieXRlW10gZ2V0U3RhdGlzdGljcygpOwogICAgIHZvaWQgbm90ZVN0YXJ0V2FrZWxvY2soaW50IHVpZCwgaW50IHBpZCwgU3RyaW5nIG5hbWUsIGludCB0eXBlKTsKICAgICB2b2lkIG5vdGVTdG9wV2FrZWxvY2soaW50IHVpZCwgaW50IHBpZCwgU3RyaW5nIG5hbWUsIGludCB0eXBlKTsKLSAgICAKLSAgICAvKiBETyBOT1QgQ0hBTkdFIHRoZSBwb3NpdGlvbiBvZiBub3RlU3RhcnRTZW5zb3Igd2l0aG91dCB1cGRhdGluZwotICAgICAgIFNlbnNvclNlcnZpY2UuY3BwICovCi0gICAgdm9pZCBub3RlU3RhcnRTZW5zb3IoaW50IHVpZCwgaW50IHNlbnNvcik7Ci0KLSAgICAvKiBETyBOT1QgQ0hBTkdFIHRoZSBwb3NpdGlvbiBvZiBub3RlU3RvcFNlbnNvciB3aXRob3V0IHVwZGF0aW5nCi0gICAgICAgU2Vuc29yU2VydmljZS5jcHAgKi8KLSAgICB2b2lkIG5vdGVTdG9wU2Vuc29yKGludCB1aWQsIGludCBzZW5zb3IpOwogCiAgICAgdm9pZCBub3RlU3RhcnRXYWtlbG9ja0Zyb21Tb3VyY2UoaW4gV29ya1NvdXJjZSB3cywgaW50IHBpZCwgU3RyaW5nIG5hbWUsIGludCB0eXBlKTsKICAgICB2b2lkIG5vdGVTdG9wV2FrZWxvY2tGcm9tU291cmNlKGluIFdvcmtTb3VyY2Ugd3MsIGludCBwaWQsIFN0cmluZyBuYW1lLCBpbnQgdHlwZSk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL01lZGlhUm91dGVDaG9vc2VyRGlhbG9nRnJhZ21lbnQuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvTWVkaWFSb3V0ZUNob29zZXJEaWFsb2dGcmFnbWVudC5qYXZhCmluZGV4IGFlMzYyYWYuLjIzN2ZlZWQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvTWVkaWFSb3V0ZUNob29zZXJEaWFsb2dGcmFnbWVudC5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvTWVkaWFSb3V0ZUNob29zZXJEaWFsb2dGcmFnbWVudC5qYXZhCkBAIC0yMSw3ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOwogCiAvKioKICAqIE1lZGlhIHJvdXRlIGNob29zZXIgZGlhbG9nIGZyYWdtZW50LgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9QbGF0TG9nb0FjdGl2aXR5LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL1BsYXRMb2dvQWN0aXZpdHkuamF2YQppbmRleCA0MGE3MDVjLi44Y2RhZjkxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL1BsYXRMb2dvQWN0aXZpdHkuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL1BsYXRMb2dvQWN0aXZpdHkuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkFjdGl2aXR5Tm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlR5cGVmYWNlOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CkBAIC0yNiwxOSArMjUsMTUgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXh0Lm1ldGhvZC5BbGxDYXBzVHJhbnNmb3JtYXRpb25NZXRob2Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0Lm1ldGhvZC5UcmFuc2Zvcm1hdGlvbk1ldGhvZDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFjY2VsZXJhdGVJbnRlcnBvbGF0b3I7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbnRpY2lwYXRlT3ZlcnNob290SW50ZXJwb2xhdG9yOwogaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uRGVjZWxlcmF0ZUludGVycG9sYXRvcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvYXN0OwogCiBwdWJsaWMgY2xhc3MgUGxhdExvZ29BY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKICAgICBGcmFtZUxheW91dCBtQ29udGVudDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9iYWNrdXAvTG9jYWxUcmFuc3BvcnQuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9iYWNrdXAvTG9jYWxUcmFuc3BvcnQuamF2YQppbmRleCA0OTRiYzc4Li5hMzMyM2U5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYmFja3VwL0xvY2FsVHJhbnNwb3J0LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2JhY2t1cC9Mb2NhbFRyYW5zcG9ydC5qYXZhCkBAIC0yMywyMiArMjMsMTcgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5TRUxpbnV4OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5vcmcuYm91bmN5Y2FzdGxlLnV0aWwuZW5jb2RlcnMuQmFzZTY0OwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUZpbHRlcjsKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogCiAvKioKICAqIEJhY2t1cCB0cmFuc3BvcnQgZm9yIHN0YXNoaW5nIHN0dWZmIGludG8gYSBrbm93biBsb2NhdGlvbiBvbiBkaXNrLCBhbmQKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9jb250ZW50L1BhY2thZ2VNb25pdG9yLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvY29udGVudC9QYWNrYWdlTW9uaXRvci5qYXZhCmluZGV4IGFiODcxZmIuLjM3OThkNjIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9jb250ZW50L1BhY2thZ2VNb25pdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2NvbnRlbnQvUGFja2FnZU1vbml0b3IuamF2YQpAQCAtMjIsNyArMjIsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLkJhY2tncm91bmRUaHJlYWQ7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlU3dpdGNoaW5nQ29udHJvbGxlci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZVN3aXRjaGluZ0NvbnRyb2xsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2MwYTRjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZVN3aXRjaGluZ0NvbnRyb2xsZXIuamF2YQpAQCAtMCwwICsxLDI5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuaW5wdXRtZXRob2Q7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZFV0aWxzLklucHV0TWV0aG9kU2V0dGluZ3M7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RJbmZvOworaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZFN1YnR5cGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlEZXF1ZTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOworCisvKioKKyAqIElucHV0TWV0aG9kU3VidHlwZVN3aXRjaGluZ0NvbnRyb2xsZXIgY29udHJvbHMgdGhlIHN3aXRjaGluZyBiZWhhdmlvciBvZiB0aGUgc3VidHlwZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBJbnB1dE1ldGhvZFN1YnR5cGVTd2l0Y2hpbmdDb250cm9sbGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gSW5wdXRNZXRob2RTdWJ0eXBlU3dpdGNoaW5nQ29udHJvbGxlci5jbGFzcy5nZXRTaW1wbGVOYW1lKCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworICAgIC8vIFRPRE86IFR1cm4gb24gdGhpcyBmbGFnIGFuZCBhZGQgQ1RTIHdoZW4gdGhlIHBsYXRmb3JtIHN0YXJ0cyBleHBlY3RpbmcgdGhhdCBhbGwgSU1FcyByZXR1cm4KKyAgICAvLyB0cnVlIGZvciBzdXBwb3J0c1N3aXRjaGluZ1RvTmV4dElucHV0TWV0aG9kKCkuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBSRVFVSVJFX1NXSVRDSElOR19TVVBQT1JUID0gZmFsc2U7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9ISVNUT1JZX1NJWkUgPSA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOT1RfQV9TVUJUWVBFX0lEID0gSW5wdXRNZXRob2RVdGlscy5OT1RfQV9TVUJUWVBFX0lEOworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU3VidHlwZVBhcmFtcyB7CisgICAgICAgIHB1YmxpYyBmaW5hbCBJbnB1dE1ldGhvZEluZm8gbUltaTsKKyAgICAgICAgcHVibGljIGZpbmFsIElucHV0TWV0aG9kU3VidHlwZSBtU3VidHlwZTsKKyAgICAgICAgcHVibGljIGZpbmFsIGxvbmcgbVRpbWU7CisKKyAgICAgICAgcHVibGljIFN1YnR5cGVQYXJhbXMoSW5wdXRNZXRob2RJbmZvIGltaSwgSW5wdXRNZXRob2RTdWJ0eXBlIHN1YnR5cGUpIHsKKyAgICAgICAgICAgIG1JbWkgPSBpbWk7CisgICAgICAgICAgICBtU3VidHlwZSA9IHN1YnR5cGU7CisgICAgICAgICAgICBtVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBJbWVTdWJ0eXBlTGlzdEl0ZW0gaW1wbGVtZW50cyBDb21wYXJhYmxlPEltZVN1YnR5cGVMaXN0SXRlbT4geworICAgICAgICBwdWJsaWMgZmluYWwgQ2hhclNlcXVlbmNlIG1JbWVOYW1lOworICAgICAgICBwdWJsaWMgZmluYWwgQ2hhclNlcXVlbmNlIG1TdWJ0eXBlTmFtZTsKKyAgICAgICAgcHVibGljIGZpbmFsIElucHV0TWV0aG9kSW5mbyBtSW1pOworICAgICAgICBwdWJsaWMgZmluYWwgaW50IG1TdWJ0eXBlSWQ7CisgICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtSXNTeXN0ZW1Mb2NhbGU7CisgICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtSXNTeXN0ZW1MYW5ndWFnZTsKKworICAgICAgICBwdWJsaWMgSW1lU3VidHlwZUxpc3RJdGVtKENoYXJTZXF1ZW5jZSBpbWVOYW1lLCBDaGFyU2VxdWVuY2Ugc3VidHlwZU5hbWUsCisgICAgICAgICAgICAgICAgSW5wdXRNZXRob2RJbmZvIGltaSwgaW50IHN1YnR5cGVJZCwgU3RyaW5nIHN1YnR5cGVMb2NhbGUsIFN0cmluZyBzeXN0ZW1Mb2NhbGUpIHsKKyAgICAgICAgICAgIG1JbWVOYW1lID0gaW1lTmFtZTsKKyAgICAgICAgICAgIG1TdWJ0eXBlTmFtZSA9IHN1YnR5cGVOYW1lOworICAgICAgICAgICAgbUltaSA9IGltaTsKKyAgICAgICAgICAgIG1TdWJ0eXBlSWQgPSBzdWJ0eXBlSWQ7CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoc3VidHlwZUxvY2FsZSkpIHsKKyAgICAgICAgICAgICAgICBtSXNTeXN0ZW1Mb2NhbGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtSXNTeXN0ZW1MYW5ndWFnZSA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtSXNTeXN0ZW1Mb2NhbGUgPSBzdWJ0eXBlTG9jYWxlLmVxdWFscyhzeXN0ZW1Mb2NhbGUpOworICAgICAgICAgICAgICAgIG1Jc1N5c3RlbUxhbmd1YWdlID0gbUlzU3lzdGVtTG9jYWxlCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBzdWJ0eXBlTG9jYWxlLnN0YXJ0c1dpdGgoc3lzdGVtTG9jYWxlLnN1YnN0cmluZygwLCAyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBjb21wYXJlVG8oSW1lU3VidHlwZUxpc3RJdGVtIG90aGVyKSB7CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobUltZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkob3RoZXIubUltZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuZXF1YWxzKG1JbWVOYW1lLCBvdGhlci5tSW1lTmFtZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbUltZU5hbWUudG9TdHJpbmcoKS5jb21wYXJlVG8ob3RoZXIubUltZU5hbWUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmVxdWFscyhtU3VidHlwZU5hbWUsIG90aGVyLm1TdWJ0eXBlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtSXNTeXN0ZW1Mb2NhbGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3RoZXIubUlzU3lzdGVtTG9jYWxlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobUlzU3lzdGVtTGFuZ3VhZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3RoZXIubUlzU3lzdGVtTGFuZ3VhZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShtU3VidHlwZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkob3RoZXIubVN1YnR5cGVOYW1lKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtU3VidHlwZU5hbWUudG9TdHJpbmcoKS5jb21wYXJlVG8ob3RoZXIubVN1YnR5cGVOYW1lLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSW5wdXRNZXRob2RBbmRTdWJ0eXBlQ2lyY3VsYXJMaXN0IHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OworICAgICAgICAvLyBVc2VkIHRvIGxvYWQgbGFiZWwKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWNrYWdlTWFuYWdlciBtUG07CisgICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1TeXN0ZW1Mb2NhbGVTdHI7CisgICAgICAgIHByaXZhdGUgZmluYWwgSW5wdXRNZXRob2RTZXR0aW5ncyBtU2V0dGluZ3M7CisKKyAgICAgICAgcHVibGljIElucHV0TWV0aG9kQW5kU3VidHlwZUNpcmN1bGFyTGlzdChDb250ZXh0IGNvbnRleHQsIElucHV0TWV0aG9kU2V0dGluZ3Mgc2V0dGluZ3MpIHsKKyAgICAgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgICAgIG1TZXR0aW5ncyA9IHNldHRpbmdzOworICAgICAgICAgICAgbVBtID0gY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpOworICAgICAgICAgICAgZmluYWwgTG9jYWxlIGxvY2FsZSA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0Q29uZmlndXJhdGlvbigpLmxvY2FsZTsKKyAgICAgICAgICAgIG1TeXN0ZW1Mb2NhbGVTdHIgPSBsb2NhbGUgIT0gbnVsbCA/IGxvY2FsZS50b1N0cmluZygpIDogIiI7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGZpbmFsIFRyZWVNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+IG1Tb3J0ZWRJbW1pcyA9CisgICAgICAgICAgICAgICAgbmV3IFRyZWVNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+KAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENvbXBhcmF0b3I8SW5wdXRNZXRob2RJbmZvPigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoSW5wdXRNZXRob2RJbmZvIGltaTEsIElucHV0TWV0aG9kSW5mbyBpbWkyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWkyID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltaTEgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVBtID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWkxLmdldElkKCkuY29tcGFyZVRvKGltaTIuZ2V0SWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhclNlcXVlbmNlIGltaUlkMSA9IGltaTEubG9hZExhYmVsKG1QbSkgKyAiLyIgKyBpbWkxLmdldElkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBpbWlJZDIgPSBpbWkyLmxvYWRMYWJlbChtUG0pICsgIi8iICsgaW1pMi5nZXRJZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1pSWQxLnRvU3RyaW5nKCkuY29tcGFyZVRvKGltaUlkMi50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICBwdWJsaWMgSW1lU3VidHlwZUxpc3RJdGVtIGdldE5leHRJbnB1dE1ldGhvZCgKKyAgICAgICAgICAgICAgICBib29sZWFuIG9ubHlDdXJyZW50SW1lLCBJbnB1dE1ldGhvZEluZm8gaW1pLCBJbnB1dE1ldGhvZFN1YnR5cGUgc3VidHlwZSkgeworICAgICAgICAgICAgaWYgKGltaSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4gaW1MaXN0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCgpOworICAgICAgICAgICAgaWYgKGltTGlzdC5zaXplKCkgPD0gMSkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgaW50IE4gPSBpbUxpc3Quc2l6ZSgpOworICAgICAgICAgICAgZmluYWwgaW50IGN1cnJlbnRTdWJ0eXBlSWQgPQorICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlICE9IG51bGwgPyBJbnB1dE1ldGhvZFV0aWxzLmdldFN1YnR5cGVJZEZyb21IYXNoQ29kZShpbWksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS5oYXNoQ29kZSgpKSA6IE5PVF9BX1NVQlRZUEVfSUQ7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47ICsraSkgeworICAgICAgICAgICAgICAgIGZpbmFsIEltZVN1YnR5cGVMaXN0SXRlbSBpc2xpID0gaW1MaXN0LmdldChpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNsaS5tSW1pLmVxdWFscyhpbWkpICYmIGlzbGkubVN1YnR5cGVJZCA9PSBjdXJyZW50U3VidHlwZUlkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghb25seUN1cnJlbnRJbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbUxpc3QuZ2V0KChpICsgMSkgJSBOKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IE4gLSAxOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEltZVN1YnR5cGVMaXN0SXRlbSBjYW5kaWRhdGUgPSBpbUxpc3QuZ2V0KChpICsgaiArIDEpICUgTik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLm1JbWkuZXF1YWxzKGltaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIExpc3Q8SW1lU3VidHlwZUxpc3RJdGVtPiBnZXRTb3J0ZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0KCkgeworICAgICAgICAgICAgcmV0dXJuIGdldFNvcnRlZElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3QodHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4gZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCgKKyAgICAgICAgICAgICAgICBib29sZWFuIHNob3dTdWJ0eXBlcywgYm9vbGVhbiBpbnB1dFNob3duLCBib29sZWFuIGlzU2NyZWVuTG9ja2VkKSB7CisgICAgICAgICAgICBmaW5hbCBBcnJheUxpc3Q8SW1lU3VidHlwZUxpc3RJdGVtPiBpbUxpc3QgPQorICAgICAgICAgICAgICAgICAgICBuZXcgQXJyYXlMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4oKTsKKyAgICAgICAgICAgIGZpbmFsIEhhc2hNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+IGltbWlzID0KKyAgICAgICAgICAgICAgICAgICAgbVNldHRpbmdzLmdldEV4cGxpY2l0bHlPckltcGxpY2l0bHlFbmFibGVkSW5wdXRNZXRob2RzQW5kU3VidHlwZUxpc3RMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQpOworICAgICAgICAgICAgaWYgKGltbWlzID09IG51bGwgfHwgaW1taXMuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtU29ydGVkSW1taXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1Tb3J0ZWRJbW1pcy5wdXRBbGwoaW1taXMpOworICAgICAgICAgICAgZm9yIChJbnB1dE1ldGhvZEluZm8gaW1pIDogbVNvcnRlZEltbWlzLmtleVNldCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGltaSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4gZXhwbGljaXRseU9ySW1wbGljaXRseUVuYWJsZWRTdWJ0eXBlTGlzdCA9IGltbWlzLmdldChpbWkpOworICAgICAgICAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBlbmFibGVkU3VidHlwZVNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgICAgICAgICBmb3IgKElucHV0TWV0aG9kU3VidHlwZSBzdWJ0eXBlIDogZXhwbGljaXRseU9ySW1wbGljaXRseUVuYWJsZWRTdWJ0eXBlTGlzdCkgeworICAgICAgICAgICAgICAgICAgICBlbmFibGVkU3VidHlwZVNldC5hZGQoU3RyaW5nLnZhbHVlT2Yoc3VidHlwZS5oYXNoQ29kZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbmFsIENoYXJTZXF1ZW5jZSBpbWVMYWJlbCA9IGltaS5sb2FkTGFiZWwobVBtKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvd1N1YnR5cGVzICYmIGVuYWJsZWRTdWJ0eXBlU2V0LnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHN1YnR5cGVDb3VudCA9IGltaS5nZXRTdWJ0eXBlQ291bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLnYoVEFHLCAiQWRkIHN1YnR5cGVzOiAiICsgc3VidHlwZUNvdW50ICsgIiwgIiArIGltaS5nZXRJZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN1YnR5cGVDb3VudDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBJbnB1dE1ldGhvZFN1YnR5cGUgc3VidHlwZSA9IGltaS5nZXRTdWJ0eXBlQXQoaik7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgc3VidHlwZUhhc2hDb2RlID0gU3RyaW5nLnZhbHVlT2Yoc3VidHlwZS5oYXNoQ29kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNob3cgYWxsIGVuYWJsZWQgSU1FcyBhbmQgc3VidHlwZXMgd2hlbiBhbiBJTUUgaXMgc2hvd24uCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZFN1YnR5cGVTZXQuY29udGFpbnMoc3VidHlwZUhhc2hDb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGlucHV0U2hvd24gJiYgIWlzU2NyZWVuTG9ja2VkKSB8fCAhc3VidHlwZS5pc0F1eGlsaWFyeSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENoYXJTZXF1ZW5jZSBzdWJ0eXBlTGFiZWwgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS5vdmVycmlkZXNJbXBsaWNpdGx5RW5hYmxlZFN1YnR5cGUoKSA/IG51bGwgOiBzdWJ0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXREaXNwbGF5TmFtZShtQ29udGV4dCwgaW1pLmdldFBhY2thZ2VOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1pLmdldFNlcnZpY2VJbmZvKCkuYXBwbGljYXRpb25JbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbUxpc3QuYWRkKG5ldyBJbWVTdWJ0eXBlTGlzdEl0ZW0oaW1lTGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlTGFiZWwsIGltaSwgaiwgc3VidHlwZS5nZXRMb2NhbGUoKSwgbVN5c3RlbUxvY2FsZVN0cikpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZpbmcgdGhpcyBzdWJ0eXBlIGZyb20gZW5hYmxlZFN1YnR5cGVTZXQgYmVjYXVzZSB3ZSBubworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvbmdlciBuZWVkIHRvIGFkZCBhbiBlbnRyeSBvZiB0aGlzIHN1YnR5cGUgdG8gaW1MaXN0IHRvIGF2b2lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHVwbGljYXRlZCBlbnRyaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWRTdWJ0eXBlU2V0LnJlbW92ZShzdWJ0eXBlSGFzaENvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW1MaXN0LmFkZChuZXcgSW1lU3VidHlwZUxpc3RJdGVtKGltZUxhYmVsLCBudWxsLCBpbWksIE5PVF9BX1NVQlRZUEVfSUQsIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN5c3RlbUxvY2FsZVN0cikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoaW1MaXN0KTsKKyAgICAgICAgICAgIHJldHVybiBpbUxpc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIEFycmF5RGVxdWU8U3VidHlwZVBhcmFtcz4gbVR5cGVkU3VidHlwZUhpc3RvcnkgPSBuZXcgQXJyYXlEZXF1ZTxTdWJ0eXBlUGFyYW1zPigpOworICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1Mb2NrID0gbmV3IE9iamVjdCgpOworICAgIHByaXZhdGUgZmluYWwgSW5wdXRNZXRob2RTZXR0aW5ncyBtU2V0dGluZ3M7CisgICAgcHJpdmF0ZSBJbnB1dE1ldGhvZEFuZFN1YnR5cGVDaXJjdWxhckxpc3QgbVN1YnR5cGVMaXN0OworCisgICAgcHVibGljIElucHV0TWV0aG9kU3VidHlwZVN3aXRjaGluZ0NvbnRyb2xsZXIoSW5wdXRNZXRob2RTZXR0aW5ncyBzZXR0aW5ncykgeworICAgICAgICBtU2V0dGluZ3MgPSBzZXR0aW5nczsKKyAgICB9CisKKyAgICAvLyBUT0RPOiB3cml0ZSB1bml0IHRlc3RzIGZvciB0aGlzIG1ldGhvZCBhbmQgdGhlIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbmV4dCBzdWJ0eXBlCisgICAgcHVibGljIHZvaWQgb25Db21taXRUZXh0KElucHV0TWV0aG9kSW5mbyBpbWksIElucHV0TWV0aG9kU3VidHlwZSBzdWJ0eXBlKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVR5cGVkU3VidHlwZUhpc3RvcnkpIHsKKyAgICAgICAgICAgIGlmIChzdWJ0eXBlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiSW52YWxpZCBJbnB1dE1ldGhvZFN1YnR5cGU6ICIgKyBpbWkuZ2V0SWQoKSArICIsICIgKyBzdWJ0eXBlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAib25Db21taXRUZXh0OiAiICsgaW1pLmdldElkKCkgKyAiLCAiICsgc3VidHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoUkVRVUlSRV9TV0lUQ0hJTkdfU1VQUE9SVCkgeworICAgICAgICAgICAgICAgIGlmICghaW1pLnN1cHBvcnRzU3dpdGNoaW5nVG9OZXh0SW5wdXRNZXRob2QoKSkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCBpbWkuZ2V0SWQoKSArICIgZG9lc24ndCBzdXBwb3J0IHN3aXRjaGluZyB0byBuZXh0IGlucHV0IG1ldGhvZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtVHlwZWRTdWJ0eXBlSGlzdG9yeS5zaXplKCkgPj0gTUFYX0hJU1RPUllfU0laRSkgeworICAgICAgICAgICAgICAgIG1UeXBlZFN1YnR5cGVIaXN0b3J5LnBvbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1UeXBlZFN1YnR5cGVIaXN0b3J5LmFkZEZpcnN0KG5ldyBTdWJ0eXBlUGFyYW1zKGltaSwgc3VidHlwZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcmVzZXRDaXJjdWxhckxpc3RMb2NrZWQoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHN5bmNocm9uaXplZChtTG9jaykgeworICAgICAgICAgICAgbVN1YnR5cGVMaXN0ID0gbmV3IElucHV0TWV0aG9kQW5kU3VidHlwZUNpcmN1bGFyTGlzdChjb250ZXh0LCBtU2V0dGluZ3MpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIEltZVN1YnR5cGVMaXN0SXRlbSBnZXROZXh0SW5wdXRNZXRob2QoCisgICAgICAgICAgICBib29sZWFuIG9ubHlDdXJyZW50SW1lLCBJbnB1dE1ldGhvZEluZm8gaW1pLCBJbnB1dE1ldGhvZFN1YnR5cGUgc3VidHlwZSkgeworICAgICAgICBzeW5jaHJvbml6ZWQobUxvY2spIHsKKyAgICAgICAgICAgIHJldHVybiBtU3VidHlwZUxpc3QuZ2V0TmV4dElucHV0TWV0aG9kKG9ubHlDdXJyZW50SW1lLCBpbWksIHN1YnR5cGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIExpc3Q8SW1lU3VidHlwZUxpc3RJdGVtPiBnZXRTb3J0ZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0KGJvb2xlYW4gc2hvd1N1YnR5cGVzLAorICAgICAgICAgICAgYm9vbGVhbiBpbnB1dFNob3duLCBib29sZWFuIGlzU2NyZWVuTG9ja2VkKSB7CisgICAgICAgIHN5bmNocm9uaXplZChtTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1TdWJ0eXBlTGlzdC5nZXRTb3J0ZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0KAorICAgICAgICAgICAgICAgICAgICBzaG93U3VidHlwZXMsIGlucHV0U2hvd24sIGlzU2NyZWVuTG9ja2VkKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFV0aWxzLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RVdGlscy5qYXZhCmluZGV4IDYzZDAxOGYuLmJjMDUxY2UgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFV0aWxzLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2lucHV0bWV0aG9kL0lucHV0TWV0aG9kVXRpbHMuamF2YQpAQCAtOTU5LDUgKzk1OSwxNiBAQAogICAgICAgICAgICAgICAgIGFkZFN1YnR5cGVUb0hpc3RvcnkoY3VyTWV0aG9kSWQsIHN1YnR5cGVJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSGFzaE1hcDxJbnB1dE1ldGhvZEluZm8sIExpc3Q8SW5wdXRNZXRob2RTdWJ0eXBlPj4KKyAgICAgICAgICAgICAgICBnZXRFeHBsaWNpdGx5T3JJbXBsaWNpdGx5RW5hYmxlZElucHV0TWV0aG9kc0FuZFN1YnR5cGVMaXN0TG9ja2VkKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgSGFzaE1hcDxJbnB1dE1ldGhvZEluZm8sIExpc3Q8SW5wdXRNZXRob2RTdWJ0eXBlPj4gZW5hYmxlZElucHV0TWV0aG9kQW5kU3VidHlwZXMgPQorICAgICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxJbnB1dE1ldGhvZEluZm8sIExpc3Q8SW5wdXRNZXRob2RTdWJ0eXBlPj4oKTsKKyAgICAgICAgICAgIGZvciAoSW5wdXRNZXRob2RJbmZvIGltaTogZ2V0RW5hYmxlZElucHV0TWV0aG9kTGlzdExvY2tlZCgpKSB7CisgICAgICAgICAgICAgICAgZW5hYmxlZElucHV0TWV0aG9kQW5kU3VidHlwZXMucHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgaW1pLCBnZXRFbmFibGVkSW5wdXRNZXRob2RTdWJ0eXBlTGlzdExvY2tlZChjb250ZXh0LCBpbWksIHRydWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlbmFibGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlczsKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9uZXQvVnBuQ29uZmlnLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvbmV0L1ZwbkNvbmZpZy5qYXZhCmluZGV4IDk4NTk5ZDAuLjBkMDBmNDEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9uZXQvVnBuQ29uZmlnLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL25ldC9WcG5Db25maWcuamF2YQpAQCAtMjUsOCArMjUsNiBAQAogaW1wb3J0IGFuZHJvaWQubmV0LlJvdXRlSW5mbzsKIGltcG9ydCBhbmRyb2lkLm5ldC5MaW5rQWRkcmVzczsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9uczsKLQogaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvQmF0dGVyeVNpcHBlci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL0JhdHRlcnlTaXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWZmNWFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL0JhdHRlcnlTaXBwZXIuamF2YQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwub3M7CisKK2ltcG9ydCBhbmRyb2lkLm9zLkJhdHRlcnlTdGF0cy5VaWQ7CisKKy8qKgorICogQ29udGFpbnMgcG93ZXIgdXNhZ2Ugb2YgYW4gYXBwbGljYXRpb24sIHN5c3RlbSBzZXJ2aWNlLCBvciBoYXJkd2FyZSB0eXBlLgorICovCitwdWJsaWMgY2xhc3MgQmF0dGVyeVNpcHBlciBpbXBsZW1lbnRzIENvbXBhcmFibGU8QmF0dGVyeVNpcHBlcj4geworICAgIHB1YmxpYyBpbnQgdXNlcklkOworICAgIHB1YmxpYyBVaWQgdWlkT2JqOworICAgIHB1YmxpYyBkb3VibGUgdmFsdWU7CisgICAgcHVibGljIGRvdWJsZVtdIHZhbHVlczsKKyAgICBwdWJsaWMgRHJhaW5UeXBlIGRyYWluVHlwZTsKKyAgICBwdWJsaWMgbG9uZyB1c2FnZVRpbWU7CisgICAgcHVibGljIGxvbmcgY3B1VGltZTsKKyAgICBwdWJsaWMgbG9uZyBncHNUaW1lOworICAgIHB1YmxpYyBsb25nIHdpZmlSdW5uaW5nVGltZTsKKyAgICBwdWJsaWMgbG9uZyBjcHVGZ1RpbWU7CisgICAgcHVibGljIGxvbmcgd2FrZUxvY2tUaW1lOworICAgIHB1YmxpYyBsb25nIG1vYmlsZVJ4UGFja2V0czsKKyAgICBwdWJsaWMgbG9uZyBtb2JpbGVUeFBhY2tldHM7CisgICAgcHVibGljIGxvbmcgd2lmaVJ4UGFja2V0czsKKyAgICBwdWJsaWMgbG9uZyB3aWZpVHhQYWNrZXRzOworICAgIHB1YmxpYyBsb25nIG1vYmlsZVJ4Qnl0ZXM7CisgICAgcHVibGljIGxvbmcgbW9iaWxlVHhCeXRlczsKKyAgICBwdWJsaWMgbG9uZyB3aWZpUnhCeXRlczsKKyAgICBwdWJsaWMgbG9uZyB3aWZpVHhCeXRlczsKKyAgICBwdWJsaWMgZG91YmxlIHBlcmNlbnQ7CisgICAgcHVibGljIGRvdWJsZSBub0NvdmVyYWdlUGVyY2VudDsKKyAgICBwdWJsaWMgU3RyaW5nW10gbVBhY2thZ2VzOworICAgIHB1YmxpYyBTdHJpbmcgcGFja2FnZVdpdGhIaWdoZXN0RHJhaW47CisKKyAgICBwdWJsaWMgZW51bSBEcmFpblR5cGUgeworICAgICAgICBJRExFLAorICAgICAgICBDRUxMLAorICAgICAgICBQSE9ORSwKKyAgICAgICAgV0lGSSwKKyAgICAgICAgQkxVRVRPT1RILAorICAgICAgICBTQ1JFRU4sCisgICAgICAgIEFQUCwKKyAgICAgICAgVVNFUiwKKyAgICAgICAgVU5BQ0NPVU5URUQsCisgICAgICAgIE9WRVJDT1VOVEVECisgICAgfQorCisgICAgcHVibGljIEJhdHRlcnlTaXBwZXIoRHJhaW5UeXBlIGRyYWluVHlwZSwgVWlkIHVpZCwgZG91YmxlW10gdmFsdWVzKSB7CisgICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzOworICAgICAgICBpZiAodmFsdWVzICE9IG51bGwpIHZhbHVlID0gdmFsdWVzWzBdOworICAgICAgICB0aGlzLmRyYWluVHlwZSA9IGRyYWluVHlwZTsKKyAgICAgICAgdWlkT2JqID0gdWlkOworICAgIH0KKworICAgIHB1YmxpYyBkb3VibGVbXSBnZXRWYWx1ZXMoKSB7CisgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBjb21wYXJlVG8oQmF0dGVyeVNpcHBlciBvdGhlcikgeworICAgICAgICAvLyBSZXR1cm4gdGhlIGZsaXBwZWQgdmFsdWUgYmVjYXVzZSB3ZSB3YW50IHRoZSBpdGVtcyBpbiBkZXNjZW5kaW5nIG9yZGVyCisgICAgICAgIHJldHVybiBEb3VibGUuY29tcGFyZShvdGhlci52YWx1ZSwgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgYSBsaXN0IG9mIHBhY2thZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCB1c2VyCisgICAgICovCisgICAgcHVibGljIFN0cmluZ1tdIGdldFBhY2thZ2VzKCkgeworICAgICAgICByZXR1cm4gbVBhY2thZ2VzOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0VWlkKCkgeworICAgICAgICAvLyBCYWlsIG91dCBpZiB0aGUgY3VycmVudCBzaXBwZXIgaXMgbm90IGFuIEFwcCBzaXBwZXIuCisgICAgICAgIGlmICh1aWRPYmogPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVpZE9iai5nZXRVaWQoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvQmF0dGVyeVN0YXRzSGVscGVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvQmF0dGVyeVN0YXRzSGVscGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzMWY2OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9CYXR0ZXJ5U3RhdHNIZWxwZXIuamF2YQpAQCAtMCwwICsxLDcxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwub3M7CisKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5CYXR0ZXJ5U3RhdHMuTkVUV09SS19NT0JJTEVfUlhfREFUQTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5CYXR0ZXJ5U3RhdHMuTkVUV09SS19NT0JJTEVfVFhfREFUQTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5CYXR0ZXJ5U3RhdHMuTkVUV09SS19XSUZJX1JYX0RBVEE7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuQmF0dGVyeVN0YXRzLk5FVFdPUktfV0lGSV9UWF9EQVRBOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5TZW5zb3I7CitpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5TZW5zb3JNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5CYXR0ZXJ5U3RhdHM7CitpbXBvcnQgYW5kcm9pZC5vcy5CYXR0ZXJ5U3RhdHMuVWlkOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOworaW1wb3J0IGFuZHJvaWQudGVsZXBob255LlNpZ25hbFN0cmVuZ3RoOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OworCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLklCYXR0ZXJ5U3RhdHM7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuQmF0dGVyeVNpcHBlci5EcmFpblR5cGU7CisKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKKy8qKgorICogQSBoZWxwZXIgY2xhc3MgZm9yIHJldHJpZXZpbmcgdGhlIHBvd2VyIHVzYWdlIGluZm9ybWF0aW9uIGZvciBhbGwgYXBwbGljYXRpb25zIGFuZCBzZXJ2aWNlcy4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaW5pdGlhbGl6ZSB0aGlzIGNsYXNzIGFzIHNvb24gYXMgYWN0aXZpdHkgb2JqZWN0IGlzIHJlYWR5IHRvIHVzZSAoZm9yIGV4YW1wbGUsIGluCisgKiBvbkF0dGFjaCgpIGZvciBGcmFnbWVudCksIGNhbGwgY3JlYXRlKCkgaW4gb25DcmVhdGUoKSBhbmQgY2FsbCBkZXN0cm95KCkgaW4gb25EZXN0cm95KCkuCisgKi8KK3B1YmxpYyBjbGFzcyBCYXR0ZXJ5U3RhdHNIZWxwZXIgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IHRydWU7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gQmF0dGVyeVN0YXRzSGVscGVyLmNsYXNzLmdldFNpbXBsZU5hbWUoKTsKKworICAgIHByaXZhdGUgc3RhdGljIEJhdHRlcnlTdGF0cyBzU3RhdHNYZmVyOworCisgICAgZmluYWwgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OworCisgICAgcHJpdmF0ZSBJQmF0dGVyeVN0YXRzIG1CYXR0ZXJ5SW5mbzsKKyAgICBwcml2YXRlIEJhdHRlcnlTdGF0cyBtU3RhdHM7CisgICAgcHJpdmF0ZSBQb3dlclByb2ZpbGUgbVBvd2VyUHJvZmlsZTsKKworICAgIHByaXZhdGUgZmluYWwgTGlzdDxCYXR0ZXJ5U2lwcGVyPiBtVXNhZ2VMaXN0ID0gbmV3IEFycmF5TGlzdDxCYXR0ZXJ5U2lwcGVyPigpOworICAgIHByaXZhdGUgZmluYWwgTGlzdDxCYXR0ZXJ5U2lwcGVyPiBtV2lmaVNpcHBlcnMgPSBuZXcgQXJyYXlMaXN0PEJhdHRlcnlTaXBwZXI+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEJhdHRlcnlTaXBwZXI+IG1CbHVldG9vdGhTaXBwZXJzID0gbmV3IEFycmF5TGlzdDxCYXR0ZXJ5U2lwcGVyPigpOworICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8TGlzdDxCYXR0ZXJ5U2lwcGVyPj4gbVVzZXJTaXBwZXJzCisgICAgICAgICAgICA9IG5ldyBTcGFyc2VBcnJheTxMaXN0PEJhdHRlcnlTaXBwZXI+PigpOworICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8RG91YmxlPiBtVXNlclBvd2VyID0gbmV3IFNwYXJzZUFycmF5PERvdWJsZT4oKTsKKworICAgIHByaXZhdGUgaW50IG1TdGF0c1R5cGUgPSBCYXR0ZXJ5U3RhdHMuU1RBVFNfU0lOQ0VfQ0hBUkdFRDsKKyAgICBwcml2YXRlIGludCBtQXNVc2VyID0gMDsKKworICAgIGxvbmcgbUJhdHRlcnlSZWFsdGltZTsKKyAgICBsb25nIG1CYXR0ZXJ5VXB0aW1lOworICAgIGxvbmcgbVR5cGVCYXR0ZXJ5UmVhbHRpbWU7CisgICAgbG9uZyBtVHlwZUJhdHRlcnlVcHRpbWU7CisKKyAgICBwcml2YXRlIGxvbmcgbVN0YXRzUGVyaW9kID0gMDsKKyAgICBwcml2YXRlIGRvdWJsZSBtTWF4UG93ZXIgPSAxOworICAgIHByaXZhdGUgZG91YmxlIG1Ub3RhbFBvd2VyOworICAgIHByaXZhdGUgZG91YmxlIG1XaWZpUG93ZXI7CisgICAgcHJpdmF0ZSBkb3VibGUgbUJsdWV0b290aFBvd2VyOworICAgIHByaXZhdGUgZG91YmxlIG1NaW5EcmFpbmVkUG93ZXI7CisgICAgcHJpdmF0ZSBkb3VibGUgbU1heERyYWluZWRQb3dlcjsKKworICAgIC8vIEhvdyBtdWNoIHRoZSBhcHBzIHRvZ2V0aGVyIGhhdmUgbGVmdCBXSUZJIHJ1bm5pbmcuCisgICAgcHJpdmF0ZSBsb25nIG1BcHBXaWZpUnVubmluZzsKKworICAgIHB1YmxpYyBCYXR0ZXJ5U3RhdHNIZWxwZXIoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICB9CisKKyAgICAvKiogQ2xlYXJzIHRoZSBjdXJyZW50IHN0YXRzIGFuZCBmb3JjZXMgcmVjcmVhdGluZyBmb3IgZnV0dXJlIHVzZS4gKi8KKyAgICBwdWJsaWMgdm9pZCBjbGVhclN0YXRzKCkgeworICAgICAgICBtU3RhdHMgPSBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBCYXR0ZXJ5U3RhdHMgZ2V0U3RhdHMoKSB7CisgICAgICAgIGlmIChtU3RhdHMgPT0gbnVsbCkgeworICAgICAgICAgICAgbG9hZCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtU3RhdHM7CisgICAgfQorCisgICAgcHVibGljIFBvd2VyUHJvZmlsZSBnZXRQb3dlclByb2ZpbGUoKSB7CisgICAgICAgIHJldHVybiBtUG93ZXJQcm9maWxlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNyZWF0ZShCYXR0ZXJ5U3RhdHMgc3RhdHMpIHsKKyAgICAgICAgbVBvd2VyUHJvZmlsZSA9IG5ldyBQb3dlclByb2ZpbGUobUNvbnRleHQpOworICAgICAgICBtU3RhdHMgPSBzdGF0czsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGUoQnVuZGxlIGljaWNsZSkgeworICAgICAgICBpZiAoaWNpY2xlICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1TdGF0cyA9IHNTdGF0c1hmZXI7CisgICAgICAgIH0KKyAgICAgICAgbUJhdHRlcnlJbmZvID0gSUJhdHRlcnlTdGF0cy5TdHViLmFzSW50ZXJmYWNlKAorICAgICAgICAgICAgICAgIFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoQmF0dGVyeVN0YXRzLlNFUlZJQ0VfTkFNRSkpOworICAgICAgICBtUG93ZXJQcm9maWxlID0gbmV3IFBvd2VyUHJvZmlsZShtQ29udGV4dCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RvcmVTdGF0ZSgpIHsKKyAgICAgICAgc1N0YXRzWGZlciA9IG1TdGF0czsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBtYWtlbUFoKGRvdWJsZSBwb3dlcikgeworICAgICAgICBpZiAocG93ZXIgPCAuMDAwMSkgcmV0dXJuIFN0cmluZy5mb3JtYXQoIiUuOGYiLCBwb3dlcik7CisgICAgICAgIGVsc2UgaWYgKHBvd2VyIDwgLjAwMDEpIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlLjdmIiwgcG93ZXIpOworICAgICAgICBlbHNlIGlmIChwb3dlciA8IC4wMDEpIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlLjZmIiwgcG93ZXIpOworICAgICAgICBlbHNlIGlmIChwb3dlciA8IC4wMSkgcmV0dXJuIFN0cmluZy5mb3JtYXQoIiUuNWYiLCBwb3dlcik7CisgICAgICAgIGVsc2UgaWYgKHBvd2VyIDwgLjEpIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlLjRmIiwgcG93ZXIpOworICAgICAgICBlbHNlIGlmIChwb3dlciA8IDEpIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlLjNmIiwgcG93ZXIpOworICAgICAgICBlbHNlIGlmIChwb3dlciA8IDEwKSByZXR1cm4gU3RyaW5nLmZvcm1hdCgiJS4yZiIsIHBvd2VyKTsKKyAgICAgICAgZWxzZSBpZiAocG93ZXIgPCAxMDApIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlLjFmIiwgcG93ZXIpOworICAgICAgICBlbHNlIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlLjBmIiwgcG93ZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlZnJlc2hlcyB0aGUgcG93ZXIgdXNhZ2UgbGlzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZWZyZXNoU3RhdHMoaW50IHN0YXRzVHlwZSwgaW50IGFzVXNlcikgeworICAgICAgICByZWZyZXNoU3RhdHMoc3RhdHNUeXBlLCBhc1VzZXIsIFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpICogMTAwMCwKKyAgICAgICAgICAgICAgICBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSAqIDEwMDApOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlZnJlc2hTdGF0cyhpbnQgc3RhdHNUeXBlLCBpbnQgYXNVc2VyLCBsb25nIHJhd1JlYWx0aW1lTmFubywgbG9uZyByYXdVcHRpbWVOYW5vKSB7CisgICAgICAgIC8vIEluaXRpYWxpemUgbVN0YXRzIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgZ2V0U3RhdHMoKTsKKworICAgICAgICBtTWF4UG93ZXIgPSAwOworICAgICAgICBtVG90YWxQb3dlciA9IDA7CisgICAgICAgIG1XaWZpUG93ZXIgPSAwOworICAgICAgICBtQmx1ZXRvb3RoUG93ZXIgPSAwOworICAgICAgICBtQXBwV2lmaVJ1bm5pbmcgPSAwOworCisgICAgICAgIG1Vc2FnZUxpc3QuY2xlYXIoKTsKKyAgICAgICAgbVdpZmlTaXBwZXJzLmNsZWFyKCk7CisgICAgICAgIG1CbHVldG9vdGhTaXBwZXJzLmNsZWFyKCk7CisgICAgICAgIG1Vc2VyU2lwcGVycy5jbGVhcigpOworICAgICAgICBtVXNlclBvd2VyLmNsZWFyKCk7CisKKyAgICAgICAgaWYgKG1TdGF0cyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtU3RhdHNUeXBlID0gc3RhdHNUeXBlOworICAgICAgICBtQXNVc2VyID0gYXNVc2VyOworICAgICAgICBtQmF0dGVyeVVwdGltZSA9IG1TdGF0cy5nZXRCYXR0ZXJ5VXB0aW1lKHJhd1VwdGltZU5hbm8pOworICAgICAgICBtQmF0dGVyeVJlYWx0aW1lID0gbVN0YXRzLmdldEJhdHRlcnlSZWFsdGltZShyYXdSZWFsdGltZU5hbm8pOworICAgICAgICBtVHlwZUJhdHRlcnlVcHRpbWUgPSBtU3RhdHMuY29tcHV0ZUJhdHRlcnlVcHRpbWUocmF3VXB0aW1lTmFubywgbVN0YXRzVHlwZSk7CisgICAgICAgIG1UeXBlQmF0dGVyeVJlYWx0aW1lID0gbVN0YXRzLmNvbXB1dGVCYXR0ZXJ5UmVhbHRpbWUocmF3UmVhbHRpbWVOYW5vLCBtU3RhdHNUeXBlKTsKKworICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIlJhdyB0aW1lOiByZWFsdGltZT0iICsgKHJhd1JlYWx0aW1lTmFuby8xMDAwKSArICIgdXB0aW1lPSIKKyAgICAgICAgICAgICAgICAgICAgKyAocmF3VXB0aW1lTmFuby8xMDAwKSk7CisgICAgICAgICAgICBMb2cuZChUQUcsICJCYXR0ZXJ5IHRpbWU6IHJlYWx0aW1lPSIgKyAobUJhdHRlcnlSZWFsdGltZS8xMDAwKSArICIgdXB0aW1lPSIKKyAgICAgICAgICAgICAgICAgICAgKyAobUJhdHRlcnlVcHRpbWUvMTAwMCkpOworICAgICAgICAgICAgTG9nLmQoVEFHLCAiQmF0dGVyeSB0eXBlIHRpbWU6IHJlYWx0aW1lPSIgKyAobVR5cGVCYXR0ZXJ5UmVhbHRpbWUvMTAwMCkgKyAiIHVwdGltZT0iCisgICAgICAgICAgICAgICAgICAgICsgKG1UeXBlQmF0dGVyeVVwdGltZS8xMDAwKSk7CisgICAgICAgIH0KKyAgICAgICAgbU1pbkRyYWluZWRQb3dlciA9IChtU3RhdHMuZ2V0TG93RGlzY2hhcmdlQW1vdW50U2luY2VDaGFyZ2UoKQorICAgICAgICAgICAgICAgICogbVBvd2VyUHJvZmlsZS5nZXRCYXR0ZXJ5Q2FwYWNpdHkoKSkgLyAxMDA7CisgICAgICAgIG1NYXhEcmFpbmVkUG93ZXIgPSAobVN0YXRzLmdldEhpZ2hEaXNjaGFyZ2VBbW91bnRTaW5jZUNoYXJnZSgpCisgICAgICAgICAgICAgICAgKiBtUG93ZXJQcm9maWxlLmdldEJhdHRlcnlDYXBhY2l0eSgpKSAvIDEwMDsKKworICAgICAgICBwcm9jZXNzQXBwVXNhZ2UoKTsKKyAgICAgICAgcHJvY2Vzc01pc2NVc2FnZSgpOworCisgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgTG9nLmQoVEFHLCAiQWNjdXJhY3k6IHRvdGFsIGNvbXB1dGVkPSIgKyBtYWtlbUFoKG1Ub3RhbFBvd2VyKSArICIsIG1pbiBkaXNjaGFyZ2U9IgorICAgICAgICAgICAgICAgICAgICArIG1ha2VtQWgobU1pbkRyYWluZWRQb3dlcikgKyAiLCBtYXggZGlzY2hhcmdlPSIgKyBtYWtlbUFoKG1NYXhEcmFpbmVkUG93ZXIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHJ1ZSB8fCBtU3RhdHMuZ2V0TG93RGlzY2hhcmdlQW1vdW50U2luY2VDaGFyZ2UoKSA+IDEwKSB7CisgICAgICAgICAgICBpZiAobU1pbkRyYWluZWRQb3dlciA+IG1Ub3RhbFBvd2VyKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IG1NaW5EcmFpbmVkUG93ZXIgLSBtVG90YWxQb3dlcjsKKyAgICAgICAgICAgICAgICBpZiAobU1heFBvd2VyIDwgYW1vdW50KSB7CisgICAgICAgICAgICAgICAgICAgIG1NYXhQb3dlciA9IGFtb3VudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkRW50cnlOb1RvdGFsKEJhdHRlcnlTaXBwZXIuRHJhaW5UeXBlLlVOQUNDT1VOVEVELCAwLCBhbW91bnQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtTWF4RHJhaW5lZFBvd2VyIDwgbVRvdGFsUG93ZXIpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gbVRvdGFsUG93ZXIgLSBtTWF4RHJhaW5lZFBvd2VyOworICAgICAgICAgICAgICAgIGlmIChtTWF4UG93ZXIgPCBhbW91bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbU1heFBvd2VyID0gYW1vdW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRFbnRyeU5vVG90YWwoQmF0dGVyeVNpcHBlci5EcmFpblR5cGUuT1ZFUkNPVU5URUQsIDAsIGFtb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KG1Vc2FnZUxpc3QpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBwcm9jZXNzQXBwVXNhZ2UoKSB7CisgICAgICAgIFNlbnNvck1hbmFnZXIgc2Vuc29yTWFuYWdlciA9IChTZW5zb3JNYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAorICAgICAgICAgICAgICAgIENvbnRleHQuU0VOU09SX1NFUlZJQ0UpOworICAgICAgICBmaW5hbCBpbnQgd2hpY2ggPSBtU3RhdHNUeXBlOworICAgICAgICBmaW5hbCBpbnQgc3BlZWRTdGVwcyA9IG1Qb3dlclByb2ZpbGUuZ2V0TnVtU3BlZWRTdGVwcygpOworICAgICAgICBmaW5hbCBkb3VibGVbXSBwb3dlckNwdU5vcm1hbCA9IG5ldyBkb3VibGVbc3BlZWRTdGVwc107CisgICAgICAgIGZpbmFsIGxvbmdbXSBjcHVTcGVlZFN0ZXBUaW1lcyA9IG5ldyBsb25nW3NwZWVkU3RlcHNdOworICAgICAgICBmb3IgKGludCBwID0gMDsgcCA8IHNwZWVkU3RlcHM7IHArKykgeworICAgICAgICAgICAgcG93ZXJDcHVOb3JtYWxbcF0gPSBtUG93ZXJQcm9maWxlLmdldEF2ZXJhZ2VQb3dlcihQb3dlclByb2ZpbGUuUE9XRVJfQ1BVX0FDVElWRSwgcCk7CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgZG91YmxlIG1vYmlsZVBvd2VyUGVyUGFja2V0ID0gZ2V0TW9iaWxlUG93ZXJQZXJQYWNrZXQoKTsKKyAgICAgICAgZmluYWwgZG91YmxlIHdpZmlQb3dlclBlclBhY2tldCA9IGdldFdpZmlQb3dlclBlclBhY2tldCgpOworICAgICAgICBsb25nIGFwcFdha2Vsb2NrVGltZSA9IDA7CisgICAgICAgIEJhdHRlcnlTaXBwZXIgb3NBcHAgPSBudWxsOworICAgICAgICBtU3RhdHNQZXJpb2QgPSBtVHlwZUJhdHRlcnlSZWFsdGltZTsKKyAgICAgICAgU3BhcnNlQXJyYXk8PyBleHRlbmRzIFVpZD4gdWlkU3RhdHMgPSBtU3RhdHMuZ2V0VWlkU3RhdHMoKTsKKyAgICAgICAgZmluYWwgaW50IE5VID0gdWlkU3RhdHMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpdSA9IDA7IGl1IDwgTlU7IGl1KyspIHsKKyAgICAgICAgICAgIFVpZCB1ID0gdWlkU3RhdHMudmFsdWVBdChpdSk7CisgICAgICAgICAgICBkb3VibGUgcDsgLy8gaW4gbUFzCisgICAgICAgICAgICBkb3VibGUgcG93ZXIgPSAwOyAvLyBpbiBtQXMKKyAgICAgICAgICAgIGRvdWJsZSBoaWdoZXN0RHJhaW4gPSAwOworICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VXaXRoSGlnaGVzdERyYWluID0gbnVsbDsKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsID8gZXh0ZW5kcyBCYXR0ZXJ5U3RhdHMuVWlkLlByb2M+IHByb2Nlc3NTdGF0cyA9IHUuZ2V0UHJvY2Vzc1N0YXRzKCk7CisgICAgICAgICAgICBsb25nIGNwdVRpbWUgPSAwOworICAgICAgICAgICAgbG9uZyBjcHVGZ1RpbWUgPSAwOworICAgICAgICAgICAgbG9uZyB3YWtlbG9ja1RpbWUgPSAwOworICAgICAgICAgICAgbG9uZyBncHNUaW1lID0gMDsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzU3RhdHMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgQ1BVIHRpbWUKKyAgICAgICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsID8gZXh0ZW5kcyBCYXR0ZXJ5U3RhdHMuVWlkLlByb2M+IGVudAorICAgICAgICAgICAgICAgICAgICAgICAgOiBwcm9jZXNzU3RhdHMuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBVaWQuUHJvYyBwcyA9IGVudC5nZXRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHVzZXJUaW1lID0gcHMuZ2V0VXNlclRpbWUod2hpY2gpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHN5c3RlbVRpbWUgPSBwcy5nZXRTeXN0ZW1UaW1lKHdoaWNoKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBmb3JlZ3JvdW5kVGltZSA9IHBzLmdldEZvcmVncm91bmRUaW1lKHdoaWNoKTsKKyAgICAgICAgICAgICAgICAgICAgY3B1RmdUaW1lICs9IGZvcmVncm91bmRUaW1lICogMTA7IC8vIGNvbnZlcnQgdG8gbWlsbGlzCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgdG1wQ3B1VGltZSA9ICh1c2VyVGltZSArIHN5c3RlbVRpbWUpICogMTA7IC8vIGNvbnZlcnQgdG8gbWlsbGlzCisgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbFRpbWVBdFNwZWVkcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgdG90YWwgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgc3RlcCA9IDA7IHN0ZXAgPCBzcGVlZFN0ZXBzOyBzdGVwKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwdVNwZWVkU3RlcFRpbWVzW3N0ZXBdID0gcHMuZ2V0VGltZUF0Q3B1U3BlZWRTdGVwKHN0ZXAsIHdoaWNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsVGltZUF0U3BlZWRzICs9IGNwdVNwZWVkU3RlcFRpbWVzW3N0ZXBdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0b3RhbFRpbWVBdFNwZWVkcyA9PSAwKSB0b3RhbFRpbWVBdFNwZWVkcyA9IDE7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZW4gY29tcHV0ZSB0aGUgcmF0aW8gb2YgdGltZSBzcGVudCBhdCBlYWNoIHNwZWVkCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBwcm9jZXNzUG93ZXIgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBzdGVwID0gMDsgc3RlcCA8IHNwZWVkU3RlcHM7IHN0ZXArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHJhdGlvID0gKGRvdWJsZSkgY3B1U3BlZWRTdGVwVGltZXNbc3RlcF0gLyB0b3RhbFRpbWVBdFNwZWVkczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRyAmJiByYXRpbyAhPSAwKSBMb2cuZChUQUcsICJVSUQgIiArIHUuZ2V0VWlkKCkgKyAiOiBDUFUgc3RlcCAjIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0ZXAgKyAiIHJhdGlvPSIgKyBtYWtlbUFoKHJhdGlvKSArICIgcG93ZXI9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1ha2VtQWgocmF0aW8qdG1wQ3B1VGltZSpwb3dlckNwdU5vcm1hbFtzdGVwXSAvICg2MCo2MCoxMDAwKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Bvd2VyICs9IHJhdGlvICogdG1wQ3B1VGltZSAqIHBvd2VyQ3B1Tm9ybWFsW3N0ZXBdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNwdVRpbWUgKz0gdG1wQ3B1VGltZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHICYmIHByb2Nlc3NQb3dlciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsIFN0cmluZy5mb3JtYXQoInByb2Nlc3MgJXMsIGNwdSBwb3dlcj0lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudC5nZXRLZXkoKSwgbWFrZW1BaChwcm9jZXNzUG93ZXIgLyAoNjAqNjAqMTAwMCkpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcG93ZXIgKz0gcHJvY2Vzc1Bvd2VyOworICAgICAgICAgICAgICAgICAgICBpZiAocGFja2FnZVdpdGhIaWdoZXN0RHJhaW4gPT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBhY2thZ2VXaXRoSGlnaGVzdERyYWluLnN0YXJ0c1dpdGgoIioiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdERyYWluID0gcHJvY2Vzc1Bvd2VyOworICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZVdpdGhIaWdoZXN0RHJhaW4gPSBlbnQuZ2V0S2V5KCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGlnaGVzdERyYWluIDwgcHJvY2Vzc1Bvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWVudC5nZXRLZXkoKS5zdGFydHNXaXRoKCIqIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3REcmFpbiA9IHByb2Nlc3NQb3dlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VXaXRoSGlnaGVzdERyYWluID0gZW50LmdldEtleSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNwdUZnVGltZSA+IGNwdVRpbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcgJiYgY3B1RmdUaW1lID4gY3B1VGltZSArIDEwMDAwKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIldBUk5JTkchIENwdXRpbWUgaXMgbW9yZSB0aGFuIDEwIHNlY29uZHMgYmVoaW5kIEZvcmVncm91bmQgdGltZSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjcHVUaW1lID0gY3B1RmdUaW1lOyAvLyBTdGF0aXN0aWNzIG1heSBub3QgaGF2ZSBiZWVuIGdhdGhlcmVkIHlldC4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvd2VyIC89ICg2MCo2MCoxMDAwKTsKKworICAgICAgICAgICAgLy8gUHJvY2VzcyB3YWtlIGxvY2sgdXNhZ2UKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsID8gZXh0ZW5kcyBCYXR0ZXJ5U3RhdHMuVWlkLldha2Vsb2NrPiB3YWtlbG9ja1N0YXRzID0gdS5nZXRXYWtlbG9ja1N0YXRzKCk7CisgICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsID8gZXh0ZW5kcyBCYXR0ZXJ5U3RhdHMuVWlkLldha2Vsb2NrPiB3YWtlbG9ja0VudHJ5CisgICAgICAgICAgICAgICAgICAgIDogd2FrZWxvY2tTdGF0cy5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICAgICAgVWlkLldha2Vsb2NrIHdha2Vsb2NrID0gd2FrZWxvY2tFbnRyeS5nZXRWYWx1ZSgpOworICAgICAgICAgICAgICAgIC8vIE9ubHkgY2FyZSBhYm91dCBwYXJ0aWFsIHdha2UgbG9ja3Mgc2luY2UgZnVsbCB3YWtlIGxvY2tzCisgICAgICAgICAgICAgICAgLy8gYXJlIGNhbmNlbGVkIHdoZW4gdGhlIHVzZXIgdHVybnMgdGhlIHNjcmVlbiBvZmYuCisgICAgICAgICAgICAgICAgQmF0dGVyeVN0YXRzLlRpbWVyIHRpbWVyID0gd2FrZWxvY2suZ2V0V2FrZVRpbWUoQmF0dGVyeVN0YXRzLldBS0VfVFlQRV9QQVJUSUFMKTsKKyAgICAgICAgICAgICAgICBpZiAodGltZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB3YWtlbG9ja1RpbWUgKz0gdGltZXIuZ2V0VG90YWxUaW1lTG9ja2VkKG1CYXR0ZXJ5UmVhbHRpbWUsIHdoaWNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3YWtlbG9ja1RpbWUgLz0gMTAwMDsgLy8gY29udmVydCB0byBtaWxsaXMKKyAgICAgICAgICAgIGFwcFdha2Vsb2NrVGltZSArPSB3YWtlbG9ja1RpbWU7CisKKyAgICAgICAgICAgIC8vIEFkZCBjb3N0IG9mIGhvbGRpbmcgYSB3YWtlIGxvY2sKKyAgICAgICAgICAgIHAgPSAod2FrZWxvY2tUaW1lCisgICAgICAgICAgICAgICAgICAgICogbVBvd2VyUHJvZmlsZS5nZXRBdmVyYWdlUG93ZXIoUG93ZXJQcm9maWxlLlBPV0VSX0NQVV9BV0FLRSkpIC8gKDYwKjYwKjEwMDApOworICAgICAgICAgICAgaWYgKERFQlVHICYmIHAgIT0gMCkgTG9nLmQoVEFHLCAiVUlEICIgKyB1LmdldFVpZCgpICsgIjogd2FrZSAiCisgICAgICAgICAgICAgICAgICAgICsgd2FrZWxvY2tUaW1lICsgIiBwb3dlcj0iICsgbWFrZW1BaChwKSk7CisgICAgICAgICAgICBwb3dlciArPSBwOworCisgICAgICAgICAgICAvLyBBZGQgY29zdCBvZiBtb2JpbGUgdHJhZmZpYworICAgICAgICAgICAgZmluYWwgbG9uZyBtb2JpbGVSeCA9IHUuZ2V0TmV0d29ya0FjdGl2aXR5UGFja2V0cyhORVRXT1JLX01PQklMRV9SWF9EQVRBLCBtU3RhdHNUeXBlKTsKKyAgICAgICAgICAgIGZpbmFsIGxvbmcgbW9iaWxlVHggPSB1LmdldE5ldHdvcmtBY3Rpdml0eVBhY2tldHMoTkVUV09SS19NT0JJTEVfVFhfREFUQSwgbVN0YXRzVHlwZSk7CisgICAgICAgICAgICBmaW5hbCBsb25nIG1vYmlsZVJ4QiA9IHUuZ2V0TmV0d29ya0FjdGl2aXR5Qnl0ZXMoTkVUV09SS19NT0JJTEVfUlhfREFUQSwgbVN0YXRzVHlwZSk7CisgICAgICAgICAgICBmaW5hbCBsb25nIG1vYmlsZVR4QiA9IHUuZ2V0TmV0d29ya0FjdGl2aXR5Qnl0ZXMoTkVUV09SS19NT0JJTEVfVFhfREFUQSwgbVN0YXRzVHlwZSk7CisgICAgICAgICAgICBwID0gKG1vYmlsZVJ4ICsgbW9iaWxlVHgpICogbW9iaWxlUG93ZXJQZXJQYWNrZXQ7CisgICAgICAgICAgICBpZiAoREVCVUcgJiYgcCAhPSAwKSBMb2cuZChUQUcsICJVSUQgIiArIHUuZ2V0VWlkKCkgKyAiOiBtb2JpbGUgcGFja2V0cyAiCisgICAgICAgICAgICAgICAgICAgICsgKG1vYmlsZVJ4K21vYmlsZVR4KSArICIgcG93ZXI9IiArIG1ha2VtQWgocCkpOworICAgICAgICAgICAgcG93ZXIgKz0gcDsKKworICAgICAgICAgICAgLy8gQWRkIGNvc3Qgb2Ygd2lmaSB0cmFmZmljCisgICAgICAgICAgICBmaW5hbCBsb25nIHdpZmlSeCA9IHUuZ2V0TmV0d29ya0FjdGl2aXR5UGFja2V0cyhORVRXT1JLX1dJRklfUlhfREFUQSwgbVN0YXRzVHlwZSk7CisgICAgICAgICAgICBmaW5hbCBsb25nIHdpZmlUeCA9IHUuZ2V0TmV0d29ya0FjdGl2aXR5UGFja2V0cyhORVRXT1JLX1dJRklfVFhfREFUQSwgbVN0YXRzVHlwZSk7CisgICAgICAgICAgICBmaW5hbCBsb25nIHdpZmlSeEIgPSB1LmdldE5ldHdvcmtBY3Rpdml0eUJ5dGVzKE5FVFdPUktfV0lGSV9SWF9EQVRBLCBtU3RhdHNUeXBlKTsKKyAgICAgICAgICAgIGZpbmFsIGxvbmcgd2lmaVR4QiA9IHUuZ2V0TmV0d29ya0FjdGl2aXR5Qnl0ZXMoTkVUV09SS19XSUZJX1RYX0RBVEEsIG1TdGF0c1R5cGUpOworICAgICAgICAgICAgcCA9ICh3aWZpUnggKyB3aWZpVHgpICogd2lmaVBvd2VyUGVyUGFja2V0OworICAgICAgICAgICAgaWYgKERFQlVHICYmIHAgIT0gMCkgTG9nLmQoVEFHLCAiVUlEICIgKyB1LmdldFVpZCgpICsgIjogd2lmaSBwYWNrZXRzICIKKyAgICAgICAgICAgICAgICAgICAgKyAobW9iaWxlUngrbW9iaWxlVHgpICsgIiBwb3dlcj0iICsgbWFrZW1BaChwKSk7CisgICAgICAgICAgICBwb3dlciArPSBwOworCisgICAgICAgICAgICAvLyBBZGQgY29zdCBvZiBrZWVwaW5nIFdJRkkgcnVubmluZy4KKyAgICAgICAgICAgIGxvbmcgd2lmaVJ1bm5pbmdUaW1lTXMgPSB1LmdldFdpZmlSdW5uaW5nVGltZShtQmF0dGVyeVJlYWx0aW1lLCB3aGljaCkgLyAxMDAwOworICAgICAgICAgICAgbUFwcFdpZmlSdW5uaW5nICs9IHdpZmlSdW5uaW5nVGltZU1zOworICAgICAgICAgICAgcCA9ICh3aWZpUnVubmluZ1RpbWVNcworICAgICAgICAgICAgICAgICAgICAqIG1Qb3dlclByb2ZpbGUuZ2V0QXZlcmFnZVBvd2VyKFBvd2VyUHJvZmlsZS5QT1dFUl9XSUZJX09OKSkgLyAoNjAqNjAqMTAwMCk7CisgICAgICAgICAgICBpZiAoREVCVUcgJiYgcCAhPSAwKSBMb2cuZChUQUcsICJVSUQgIiArIHUuZ2V0VWlkKCkgKyAiOiB3aWZpIHJ1bm5pbmcgIgorICAgICAgICAgICAgICAgICAgICArIHdpZmlSdW5uaW5nVGltZU1zICsgIiBwb3dlcj0iICsgbWFrZW1BaChwKSk7CisgICAgICAgICAgICBwb3dlciArPSBwOworCisgICAgICAgICAgICAvLyBBZGQgY29zdCBvZiBXSUZJIHNjYW5zCisgICAgICAgICAgICBsb25nIHdpZmlTY2FuVGltZU1zID0gdS5nZXRXaWZpU2NhblRpbWUobUJhdHRlcnlSZWFsdGltZSwgd2hpY2gpIC8gMTAwMDsKKyAgICAgICAgICAgIHAgPSAod2lmaVNjYW5UaW1lTXMKKyAgICAgICAgICAgICAgICAgICAgKiBtUG93ZXJQcm9maWxlLmdldEF2ZXJhZ2VQb3dlcihQb3dlclByb2ZpbGUuUE9XRVJfV0lGSV9TQ0FOKSkgLyAoNjAqNjAqMTAwMCk7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIlVJRCAiICsgdS5nZXRVaWQoKSArICI6IHdpZmkgc2NhbiAiICsgd2lmaVNjYW5UaW1lTXMKKyAgICAgICAgICAgICAgICAgICAgKyAiIHBvd2VyPSIgKyBtYWtlbUFoKHApKTsKKyAgICAgICAgICAgIHBvd2VyICs9IHA7CisgICAgICAgICAgICBmb3IgKGludCBiaW4gPSAwOyBiaW4gPCBCYXR0ZXJ5U3RhdHMuVWlkLk5VTV9XSUZJX0JBVENIRURfU0NBTl9CSU5TOyBiaW4rKykgeworICAgICAgICAgICAgICAgIGxvbmcgYmF0Y2hTY2FuVGltZU1zID0gdS5nZXRXaWZpQmF0Y2hlZFNjYW5UaW1lKGJpbiwgbUJhdHRlcnlSZWFsdGltZSwgd2hpY2gpIC8gMTAwMDsKKyAgICAgICAgICAgICAgICBwID0gKChiYXRjaFNjYW5UaW1lTXMKKyAgICAgICAgICAgICAgICAgICAgICAgICogbVBvd2VyUHJvZmlsZS5nZXRBdmVyYWdlUG93ZXIoUG93ZXJQcm9maWxlLlBPV0VSX1dJRklfQkFUQ0hFRF9TQ0FOLCBiaW4pKQorICAgICAgICAgICAgICAgICAgICApIC8gKDYwKjYwKjEwMDApOworICAgICAgICAgICAgICAgIGlmIChERUJVRyAmJiBwICE9IDApIExvZy5kKFRBRywgIlVJRCAiICsgdS5nZXRVaWQoKSArICI6IHdpZmkgYmF0Y2hlZCBzY2FuICMgIiArIGJpbgorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRpbWU9IiArIGJhdGNoU2NhblRpbWVNcyArICIgcG93ZXI9IiArIG1ha2VtQWgocCkpOworICAgICAgICAgICAgICAgIHBvd2VyICs9IHA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgU2Vuc29yIHVzYWdlCisgICAgICAgICAgICBNYXA8SW50ZWdlciwgPyBleHRlbmRzIEJhdHRlcnlTdGF0cy5VaWQuU2Vuc29yPiBzZW5zb3JTdGF0cyA9IHUuZ2V0U2Vuc29yU3RhdHMoKTsKKyAgICAgICAgICAgIGZvciAoTWFwLkVudHJ5PEludGVnZXIsID8gZXh0ZW5kcyBCYXR0ZXJ5U3RhdHMuVWlkLlNlbnNvcj4gc2Vuc29yRW50cnkKKyAgICAgICAgICAgICAgICAgICAgOiBzZW5zb3JTdGF0cy5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICAgICAgVWlkLlNlbnNvciBzZW5zb3IgPSBzZW5zb3JFbnRyeS5nZXRWYWx1ZSgpOworICAgICAgICAgICAgICAgIGludCBzZW5zb3JIYW5kbGUgPSBzZW5zb3IuZ2V0SGFuZGxlKCk7CisgICAgICAgICAgICAgICAgQmF0dGVyeVN0YXRzLlRpbWVyIHRpbWVyID0gc2Vuc29yLmdldFNlbnNvclRpbWUoKTsKKyAgICAgICAgICAgICAgICBsb25nIHNlbnNvclRpbWUgPSB0aW1lci5nZXRUb3RhbFRpbWVMb2NrZWQobUJhdHRlcnlSZWFsdGltZSwgd2hpY2gpIC8gMTAwMDsKKyAgICAgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IDA7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzZW5zb3JIYW5kbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVaWQuU2Vuc29yLkdQUzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgPSBtUG93ZXJQcm9maWxlLmdldEF2ZXJhZ2VQb3dlcihQb3dlclByb2ZpbGUuUE9XRVJfR1BTX09OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdwc1RpbWUgPSBzZW5zb3JUaW1lOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFNlbnNvcj4gc2Vuc29yTGlzdCA9IHNlbnNvck1hbmFnZXIuZ2V0U2Vuc29yTGlzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZC5oYXJkd2FyZS5TZW5zb3IuVFlQRV9BTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChhbmRyb2lkLmhhcmR3YXJlLlNlbnNvciBzIDogc2Vuc29yTGlzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLmdldEhhbmRsZSgpID09IHNlbnNvckhhbmRsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyID0gcy5nZXRQb3dlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHAgPSAobXVsdGlwbGllciAqIHNlbnNvclRpbWUpIC8gKDYwKjYwKjEwMDApOworICAgICAgICAgICAgICAgIGlmIChERUJVRyAmJiBwICE9IDApIExvZy5kKFRBRywgIlVJRCAiICsgdS5nZXRVaWQoKSArICI6IHNlbnNvciAjIiArIHNlbnNvckhhbmRsZQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRpbWU9IiArIHNlbnNvclRpbWUgKyAiIHBvd2VyPSIgKyBtYWtlbUFoKHApKTsKKyAgICAgICAgICAgICAgICBwb3dlciArPSBwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoREVCVUcgJiYgcG93ZXIgIT0gMCkgTG9nLmQoVEFHLCBTdHJpbmcuZm9ybWF0KCJVSUQgJWQ6IHRvdGFsIHBvd2VyPSVzIiwKKyAgICAgICAgICAgICAgICAgICAgdS5nZXRVaWQoKSwgbWFrZW1BaChwb3dlcikpKTsKKworICAgICAgICAgICAgLy8gQWRkIHRoZSBhcHAgdG8gdGhlIGxpc3QgaWYgaXQgaXMgY29uc3VtaW5nIHBvd2VyCisgICAgICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRVc2VySWQodS5nZXRVaWQoKSk7CisgICAgICAgICAgICBpZiAocG93ZXIgIT0gMCB8fCB1LmdldFVpZCgpID09IDApIHsKKyAgICAgICAgICAgICAgICBCYXR0ZXJ5U2lwcGVyIGFwcCA9IG5ldyBCYXR0ZXJ5U2lwcGVyKEJhdHRlcnlTaXBwZXIuRHJhaW5UeXBlLkFQUCwgdSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBkb3VibGVbXSB7cG93ZXJ9KTsKKyAgICAgICAgICAgICAgICBhcHAuY3B1VGltZSA9IGNwdVRpbWU7CisgICAgICAgICAgICAgICAgYXBwLmdwc1RpbWUgPSBncHNUaW1lOworICAgICAgICAgICAgICAgIGFwcC53aWZpUnVubmluZ1RpbWUgPSB3aWZpUnVubmluZ1RpbWVNczsKKyAgICAgICAgICAgICAgICBhcHAuY3B1RmdUaW1lID0gY3B1RmdUaW1lOworICAgICAgICAgICAgICAgIGFwcC53YWtlTG9ja1RpbWUgPSB3YWtlbG9ja1RpbWU7CisgICAgICAgICAgICAgICAgYXBwLm1vYmlsZVJ4UGFja2V0cyA9IG1vYmlsZVJ4OworICAgICAgICAgICAgICAgIGFwcC5tb2JpbGVUeFBhY2tldHMgPSBtb2JpbGVUeDsKKyAgICAgICAgICAgICAgICBhcHAud2lmaVJ4UGFja2V0cyA9IHdpZmlSeDsKKyAgICAgICAgICAgICAgICBhcHAud2lmaVR4UGFja2V0cyA9IHdpZmlUeDsKKyAgICAgICAgICAgICAgICBhcHAubW9iaWxlUnhCeXRlcyA9IG1vYmlsZVJ4QjsKKyAgICAgICAgICAgICAgICBhcHAubW9iaWxlVHhCeXRlcyA9IG1vYmlsZVR4QjsKKyAgICAgICAgICAgICAgICBhcHAud2lmaVJ4Qnl0ZXMgPSB3aWZpUnhCOworICAgICAgICAgICAgICAgIGFwcC53aWZpVHhCeXRlcyA9IHdpZmlUeEI7CisgICAgICAgICAgICAgICAgYXBwLnBhY2thZ2VXaXRoSGlnaGVzdERyYWluID0gcGFja2FnZVdpdGhIaWdoZXN0RHJhaW47CisgICAgICAgICAgICAgICAgaWYgKHUuZ2V0VWlkKCkgPT0gUHJvY2Vzcy5XSUZJX1VJRCkgeworICAgICAgICAgICAgICAgICAgICBtV2lmaVNpcHBlcnMuYWRkKGFwcCk7CisgICAgICAgICAgICAgICAgICAgIG1XaWZpUG93ZXIgKz0gcG93ZXI7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1LmdldFVpZCgpID09IFByb2Nlc3MuQkxVRVRPT1RIX1VJRCkgeworICAgICAgICAgICAgICAgICAgICBtQmx1ZXRvb3RoU2lwcGVycy5hZGQoYXBwKTsKKyAgICAgICAgICAgICAgICAgICAgbUJsdWV0b290aFBvd2VyICs9IHBvd2VyOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobUFzVXNlciAhPSBVc2VySGFuZGxlLlVTRVJfQUxMICYmIHVzZXJJZCAhPSBtQXNVc2VyCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBVc2VySGFuZGxlLmdldEFwcElkKHUuZ2V0VWlkKCkpID49IFByb2Nlc3MuRklSU1RfQVBQTElDQVRJT05fVUlEKSB7CisgICAgICAgICAgICAgICAgICAgIExpc3Q8QmF0dGVyeVNpcHBlcj4gbGlzdCA9IG1Vc2VyU2lwcGVycy5nZXQodXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IG5ldyBBcnJheUxpc3Q8QmF0dGVyeVNpcHBlcj4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VyU2lwcGVycy5wdXQodXNlcklkLCBsaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsaXN0LmFkZChhcHApOworICAgICAgICAgICAgICAgICAgICBpZiAocG93ZXIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgRG91YmxlIHVzZXJQb3dlciA9IG1Vc2VyUG93ZXIuZ2V0KHVzZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBvd2VyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyUG93ZXIgPSBwb3dlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclBvd2VyICs9IHBvd2VyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXJQb3dlci5wdXQodXNlcklkLCB1c2VyUG93ZXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbVVzYWdlTGlzdC5hZGQoYXBwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvd2VyID4gbU1heFBvd2VyKSBtTWF4UG93ZXIgPSBwb3dlcjsKKyAgICAgICAgICAgICAgICAgICAgbVRvdGFsUG93ZXIgKz0gcG93ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh1LmdldFVpZCgpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgb3NBcHAgPSBhcHA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGRldmljZSBoYXMgcHJvYmFibHkgYmVlbiBhd2FrZSBmb3IgbG9uZ2VyIHRoYW4gdGhlIHNjcmVlbiBvbgorICAgICAgICAvLyB0aW1lIGFuZCBhcHBsaWNhdGlvbiB3YWtlIGxvY2sgdGltZSB3b3VsZCBhY2NvdW50IGZvci4gIEFzc2lnbgorICAgICAgICAvLyB0aGlzIHJlbWFpbmRlciB0byB0aGUgT1MsIGlmIHBvc3NpYmxlLgorICAgICAgICBpZiAob3NBcHAgIT0gbnVsbCkgeworICAgICAgICAgICAgbG9uZyB3YWtlVGltZU1pbGxpcyA9IG1CYXR0ZXJ5VXB0aW1lIC8gMTAwMDsKKyAgICAgICAgICAgIHdha2VUaW1lTWlsbGlzIC09IGFwcFdha2Vsb2NrVGltZQorICAgICAgICAgICAgICAgICAgICArIChtU3RhdHMuZ2V0U2NyZWVuT25UaW1lKG1CYXR0ZXJ5UmVhbHRpbWUsIHdoaWNoKSAvIDEwMDApOworICAgICAgICAgICAgaWYgKHdha2VUaW1lTWlsbGlzID4gMCkgeworICAgICAgICAgICAgICAgIGRvdWJsZSBwb3dlciA9ICh3YWtlVGltZU1pbGxpcworICAgICAgICAgICAgICAgICAgICAgICAgKiBtUG93ZXJQcm9maWxlLmdldEF2ZXJhZ2VQb3dlcihQb3dlclByb2ZpbGUuUE9XRVJfQ1BVX0FXQUtFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8gICg2MCo2MCoxMDAwKTsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIk9TIHdha2VMb2NrVGltZSAiICsgd2FrZVRpbWVNaWxsaXMgKyAiIHBvd2VyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgbWFrZW1BaChwb3dlcikpOworICAgICAgICAgICAgICAgIG9zQXBwLndha2VMb2NrVGltZSArPSB3YWtlVGltZU1pbGxpczsKKyAgICAgICAgICAgICAgICBvc0FwcC52YWx1ZSArPSBwb3dlcjsKKyAgICAgICAgICAgICAgICBvc0FwcC52YWx1ZXNbMF0gKz0gcG93ZXI7CisgICAgICAgICAgICAgICAgaWYgKG9zQXBwLnZhbHVlID4gbU1heFBvd2VyKSBtTWF4UG93ZXIgPSBvc0FwcC52YWx1ZTsKKyAgICAgICAgICAgICAgICBtVG90YWxQb3dlciArPSBwb3dlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhZGRQaG9uZVVzYWdlKCkgeworICAgICAgICBsb25nIHBob25lT25UaW1lTXMgPSBtU3RhdHMuZ2V0UGhvbmVPblRpbWUobUJhdHRlcnlSZWFsdGltZSwgbVN0YXRzVHlwZSkgLyAxMDAwOworICAgICAgICBkb3VibGUgcGhvbmVPblBvd2VyID0gbVBvd2VyUHJvZmlsZS5nZXRBdmVyYWdlUG93ZXIoUG93ZXJQcm9maWxlLlBPV0VSX1JBRElPX0FDVElWRSkKKyAgICAgICAgICAgICAgICAqIHBob25lT25UaW1lTXMgLyAoNjAqNjAqMTAwMCk7CisgICAgICAgIGFkZEVudHJ5KEJhdHRlcnlTaXBwZXIuRHJhaW5UeXBlLlBIT05FLCBwaG9uZU9uVGltZU1zLCBwaG9uZU9uUG93ZXIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhZGRTY3JlZW5Vc2FnZSgpIHsKKyAgICAgICAgZG91YmxlIHBvd2VyID0gMDsKKyAgICAgICAgbG9uZyBzY3JlZW5PblRpbWVNcyA9IG1TdGF0cy5nZXRTY3JlZW5PblRpbWUobUJhdHRlcnlSZWFsdGltZSwgbVN0YXRzVHlwZSkgLyAxMDAwOworICAgICAgICBwb3dlciArPSBzY3JlZW5PblRpbWVNcyAqIG1Qb3dlclByb2ZpbGUuZ2V0QXZlcmFnZVBvd2VyKFBvd2VyUHJvZmlsZS5QT1dFUl9TQ1JFRU5fT04pOworICAgICAgICBmaW5hbCBkb3VibGUgc2NyZWVuRnVsbFBvd2VyID0KKyAgICAgICAgICAgICAgICBtUG93ZXJQcm9maWxlLmdldEF2ZXJhZ2VQb3dlcihQb3dlclByb2ZpbGUuUE9XRVJfU0NSRUVOX0ZVTEwpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEJhdHRlcnlTdGF0cy5OVU1fU0NSRUVOX0JSSUdIVE5FU1NfQklOUzsgaSsrKSB7CisgICAgICAgICAgICBkb3VibGUgc2NyZWVuQmluUG93ZXIgPSBzY3JlZW5GdWxsUG93ZXIgKiAoaSArIDAuNWYpCisgICAgICAgICAgICAgICAgICAgIC8gQmF0dGVyeVN0YXRzLk5VTV9TQ1JFRU5fQlJJR0hUTkVTU19CSU5TOworICAgICAgICAgICAgbG9uZyBicmlnaHRuZXNzVGltZSA9IG1TdGF0cy5nZXRTY3JlZW5CcmlnaHRuZXNzVGltZShpLCBtQmF0dGVyeVJlYWx0aW1lLCBtU3RhdHNUeXBlKQorICAgICAgICAgICAgICAgICAgICAvIDEwMDA7CisgICAgICAgICAgICBkb3VibGUgcCA9IHNjcmVlbkJpblBvd2VyKmJyaWdodG5lc3NUaW1lOworICAgICAgICAgICAgaWYgKERFQlVHICYmIHAgIT0gMCkgeworICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIlNjcmVlbiBiaW4gIyIgKyBpICsgIjogdGltZT0iICsgYnJpZ2h0bmVzc1RpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBwb3dlcj0iICsgbWFrZW1BaChwLyg2MCo2MCoxMDAwKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG93ZXIgKz0gcDsKKyAgICAgICAgfQorICAgICAgICBwb3dlciAvPSAoNjAqNjAqMTAwMCk7IC8vIFRvIGhvdXJzCisgICAgICAgIGFkZEVudHJ5KEJhdHRlcnlTaXBwZXIuRHJhaW5UeXBlLlNDUkVFTiwgc2NyZWVuT25UaW1lTXMsIHBvd2VyKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWRkUmFkaW9Vc2FnZSgpIHsKKyAgICAgICAgZG91YmxlIHBvd2VyID0gMDsKKyAgICAgICAgZmluYWwgaW50IEJJTlMgPSBTaWduYWxTdHJlbmd0aC5OVU1fU0lHTkFMX1NUUkVOR1RIX0JJTlM7CisgICAgICAgIGxvbmcgc2lnbmFsVGltZU1zID0gMDsKKyAgICAgICAgbG9uZyBub0NvdmVyYWdlVGltZU1zID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBCSU5TOyBpKyspIHsKKyAgICAgICAgICAgIGxvbmcgc3RyZW5ndGhUaW1lTXMgPSBtU3RhdHMuZ2V0UGhvbmVTaWduYWxTdHJlbmd0aFRpbWUoaSwgbUJhdHRlcnlSZWFsdGltZSwgbVN0YXRzVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgLyAxMDAwOworICAgICAgICAgICAgZG91YmxlIHAgPSAoc3RyZW5ndGhUaW1lTXMgKiBtUG93ZXJQcm9maWxlLmdldEF2ZXJhZ2VQb3dlcihQb3dlclByb2ZpbGUuUE9XRVJfUkFESU9fT04sIGkpKQorICAgICAgICAgICAgICAgICAgICAgICAgLyAoNjAqNjAqMTAwMCk7CisgICAgICAgICAgICBpZiAoREVCVUcgJiYgcCAhPSAwKSB7CisgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ2VsbCBzdHJlbmd0aCAjIiArIGkgKyAiOiB0aW1lPSIgKyBzdHJlbmd0aFRpbWVNcyArICIgcG93ZXI9IgorICAgICAgICAgICAgICAgICAgICAgICAgKyBtYWtlbUFoKHApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvd2VyICs9IHA7CisgICAgICAgICAgICBzaWduYWxUaW1lTXMgKz0gc3RyZW5ndGhUaW1lTXM7CisgICAgICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbm9Db3ZlcmFnZVRpbWVNcyA9IHN0cmVuZ3RoVGltZU1zOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxvbmcgc2Nhbm5pbmdUaW1lTXMgPSBtU3RhdHMuZ2V0UGhvbmVTaWduYWxTY2FubmluZ1RpbWUobUJhdHRlcnlSZWFsdGltZSwgbVN0YXRzVHlwZSkKKyAgICAgICAgICAgICAgICAvIDEwMDA7CisgICAgICAgIGRvdWJsZSBwID0gKHNjYW5uaW5nVGltZU1zICogbVBvd2VyUHJvZmlsZS5nZXRBdmVyYWdlUG93ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBQb3dlclByb2ZpbGUuUE9XRVJfUkFESU9fU0NBTk5JTkcpKQorICAgICAgICAgICAgICAgICAgICAgICAgLyAoNjAqNjAqMTAwMCk7CisgICAgICAgIGlmIChERUJVRyAmJiBwICE9IDApIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIkNlbGwgcmFkaW8gc2Nhbm5pbmc6IHRpbWU9IiArIHNjYW5uaW5nVGltZU1zICsgIiBwb3dlcj0iICsgbWFrZW1BaChwKSk7CisgICAgICAgIH0KKyAgICAgICAgcG93ZXIgKz0gcDsKKyAgICAgICAgQmF0dGVyeVNpcHBlciBicyA9CisgICAgICAgICAgICAgICAgYWRkRW50cnkoQmF0dGVyeVNpcHBlci5EcmFpblR5cGUuQ0VMTCwgc2lnbmFsVGltZU1zLCBwb3dlcik7CisgICAgICAgIGlmIChzaWduYWxUaW1lTXMgIT0gMCkgeworICAgICAgICAgICAgYnMubm9Db3ZlcmFnZVBlcmNlbnQgPSBub0NvdmVyYWdlVGltZU1zICogMTAwLjAgLyBzaWduYWxUaW1lTXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWdncmVnYXRlU2lwcGVycyhCYXR0ZXJ5U2lwcGVyIGJzLCBMaXN0PEJhdHRlcnlTaXBwZXI+IGZyb20sIFN0cmluZyB0YWcpIHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPGZyb20uc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJhdHRlcnlTaXBwZXIgd2JzID0gZnJvbS5nZXQoaSk7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgdGFnICsgIiBhZGRpbmcgc2lwcGVyICIgKyB3YnMgKyAiOiBjcHU9IiArIHdicy5jcHVUaW1lKTsKKyAgICAgICAgICAgIGJzLmNwdVRpbWUgKz0gd2JzLmNwdVRpbWU7CisgICAgICAgICAgICBicy5ncHNUaW1lICs9IHdicy5ncHNUaW1lOworICAgICAgICAgICAgYnMud2lmaVJ1bm5pbmdUaW1lICs9IHdicy53aWZpUnVubmluZ1RpbWU7CisgICAgICAgICAgICBicy5jcHVGZ1RpbWUgKz0gd2JzLmNwdUZnVGltZTsKKyAgICAgICAgICAgIGJzLndha2VMb2NrVGltZSArPSB3YnMud2FrZUxvY2tUaW1lOworICAgICAgICAgICAgYnMubW9iaWxlUnhQYWNrZXRzICs9IHdicy5tb2JpbGVSeFBhY2tldHM7CisgICAgICAgICAgICBicy5tb2JpbGVUeFBhY2tldHMgKz0gd2JzLm1vYmlsZVR4UGFja2V0czsKKyAgICAgICAgICAgIGJzLndpZmlSeFBhY2tldHMgKz0gd2JzLndpZmlSeFBhY2tldHM7CisgICAgICAgICAgICBicy53aWZpVHhQYWNrZXRzICs9IHdicy53aWZpVHhQYWNrZXRzOworICAgICAgICAgICAgYnMubW9iaWxlUnhCeXRlcyArPSB3YnMubW9iaWxlUnhCeXRlczsKKyAgICAgICAgICAgIGJzLm1vYmlsZVR4Qnl0ZXMgKz0gd2JzLm1vYmlsZVR4Qnl0ZXM7CisgICAgICAgICAgICBicy53aWZpUnhCeXRlcyArPSB3YnMud2lmaVJ4Qnl0ZXM7CisgICAgICAgICAgICBicy53aWZpVHhCeXRlcyArPSB3YnMud2lmaVR4Qnl0ZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWRkV2lGaVVzYWdlKCkgeworICAgICAgICBsb25nIG9uVGltZU1zID0gbVN0YXRzLmdldFdpZmlPblRpbWUobUJhdHRlcnlSZWFsdGltZSwgbVN0YXRzVHlwZSkgLyAxMDAwOworICAgICAgICBsb25nIHJ1bm5pbmdUaW1lTXMgPSBtU3RhdHMuZ2V0R2xvYmFsV2lmaVJ1bm5pbmdUaW1lKG1CYXR0ZXJ5UmVhbHRpbWUsIG1TdGF0c1R5cGUpIC8gMTAwMDsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJXSUZJIHJ1bm5pbmdUaW1lPSIgKyBydW5uaW5nVGltZU1zCisgICAgICAgICAgICAgICAgKyAiIGFwcCBydW5uaW5nVGltZT0iICsgbUFwcFdpZmlSdW5uaW5nKTsKKyAgICAgICAgcnVubmluZ1RpbWVNcyAtPSBtQXBwV2lmaVJ1bm5pbmc7CisgICAgICAgIGlmIChydW5uaW5nVGltZU1zIDwgMCkgcnVubmluZ1RpbWVNcyA9IDA7CisgICAgICAgIGRvdWJsZSB3aWZpUG93ZXIgPSAob25UaW1lTXMgKiAwIC8qIFRPRE8gKi8KKyAgICAgICAgICAgICAgICAgICAgKiBtUG93ZXJQcm9maWxlLmdldEF2ZXJhZ2VQb3dlcihQb3dlclByb2ZpbGUuUE9XRVJfV0lGSV9PTikKKyAgICAgICAgICAgICAgICArIHJ1bm5pbmdUaW1lTXMgKiBtUG93ZXJQcm9maWxlLmdldEF2ZXJhZ2VQb3dlcihQb3dlclByb2ZpbGUuUE9XRVJfV0lGSV9PTikpCisgICAgICAgICAgICAgICAgLyAoNjAqNjAqMTAwMCk7CisgICAgICAgIGlmIChERUJVRyAmJiB3aWZpUG93ZXIgIT0gMCkgeworICAgICAgICAgICAgTG9nLmQoVEFHLCAiV2lmaTogdGltZT0iICsgcnVubmluZ1RpbWVNcyArICIgcG93ZXI9IiArIG1ha2VtQWgod2lmaVBvd2VyKSk7CisgICAgICAgIH0KKyAgICAgICAgQmF0dGVyeVNpcHBlciBicyA9IGFkZEVudHJ5KEJhdHRlcnlTaXBwZXIuRHJhaW5UeXBlLldJRkksIHJ1bm5pbmdUaW1lTXMsCisgICAgICAgICAgICAgICAgd2lmaVBvd2VyICsgbVdpZmlQb3dlcik7CisgICAgICAgIGFnZ3JlZ2F0ZVNpcHBlcnMoYnMsIG1XaWZpU2lwcGVycywgIldJRkkiKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWRkSWRsZVVzYWdlKCkgeworICAgICAgICBsb25nIGlkbGVUaW1lTXMgPSAobVR5cGVCYXR0ZXJ5UmVhbHRpbWUKKyAgICAgICAgICAgICAgICAtIG1TdGF0cy5nZXRTY3JlZW5PblRpbWUobUJhdHRlcnlSZWFsdGltZSwgbVN0YXRzVHlwZSkpIC8gMTAwMDsKKyAgICAgICAgZG91YmxlIGlkbGVQb3dlciA9IChpZGxlVGltZU1zICogbVBvd2VyUHJvZmlsZS5nZXRBdmVyYWdlUG93ZXIoUG93ZXJQcm9maWxlLlBPV0VSX0NQVV9JRExFKSkKKyAgICAgICAgICAgICAgICAvICg2MCo2MCoxMDAwKTsKKyAgICAgICAgaWYgKERFQlVHICYmIGlkbGVQb3dlciAhPSAwKSB7CisgICAgICAgICAgICBMb2cuZChUQUcsICJJZGxlOiB0aW1lPSIgKyBpZGxlVGltZU1zICsgIiBwb3dlcj0iICsgbWFrZW1BaChpZGxlUG93ZXIpKTsKKyAgICAgICAgfQorICAgICAgICBhZGRFbnRyeShCYXR0ZXJ5U2lwcGVyLkRyYWluVHlwZS5JRExFLCBpZGxlVGltZU1zLCBpZGxlUG93ZXIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhZGRCbHVldG9vdGhVc2FnZSgpIHsKKyAgICAgICAgbG9uZyBidE9uVGltZU1zID0gbVN0YXRzLmdldEJsdWV0b290aE9uVGltZShtQmF0dGVyeVJlYWx0aW1lLCBtU3RhdHNUeXBlKSAvIDEwMDA7CisgICAgICAgIGRvdWJsZSBidFBvd2VyID0gYnRPblRpbWVNcyAqIG1Qb3dlclByb2ZpbGUuZ2V0QXZlcmFnZVBvd2VyKFBvd2VyUHJvZmlsZS5QT1dFUl9CTFVFVE9PVEhfT04pCisgICAgICAgICAgICAgICAgLyAoNjAqNjAqMTAwMCk7CisgICAgICAgIGlmIChERUJVRyAmJiBidFBvd2VyICE9IDApIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIkJsdWV0b290aDogdGltZT0iICsgYnRPblRpbWVNcyArICIgcG93ZXI9IiArIG1ha2VtQWgoYnRQb3dlcikpOworICAgICAgICB9CisgICAgICAgIGludCBidFBpbmdDb3VudCA9IG1TdGF0cy5nZXRCbHVldG9vdGhQaW5nQ291bnQoKTsKKyAgICAgICAgZG91YmxlIHBpbmdQb3dlciA9IChidFBpbmdDb3VudAorICAgICAgICAgICAgICAgICogbVBvd2VyUHJvZmlsZS5nZXRBdmVyYWdlUG93ZXIoUG93ZXJQcm9maWxlLlBPV0VSX0JMVUVUT09USF9BVF9DTUQpKQorICAgICAgICAgICAgICAgIC8gKDYwKjYwKjEwMDApOworICAgICAgICBpZiAoREVCVUcgJiYgcGluZ1Bvd2VyICE9IDApIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIkJsdWV0b290aCBwaW5nOiBjb3VudD0iICsgYnRQaW5nQ291bnQgKyAiIHBvd2VyPSIgKyBtYWtlbUFoKHBpbmdQb3dlcikpOworICAgICAgICB9CisgICAgICAgIGJ0UG93ZXIgKz0gcGluZ1Bvd2VyOworICAgICAgICBCYXR0ZXJ5U2lwcGVyIGJzID0gYWRkRW50cnkoQmF0dGVyeVNpcHBlci5EcmFpblR5cGUuQkxVRVRPT1RILCBidE9uVGltZU1zLAorICAgICAgICAgICAgICAgIGJ0UG93ZXIgKyBtQmx1ZXRvb3RoUG93ZXIpOworICAgICAgICBhZ2dyZWdhdGVTaXBwZXJzKGJzLCBtQmx1ZXRvb3RoU2lwcGVycywgIkJsdWV0b290aCIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhZGRVc2VyVXNhZ2UoKSB7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxtVXNlclNpcHBlcnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBtVXNlclNpcHBlcnMua2V5QXQoaSk7CisgICAgICAgICAgICBmaW5hbCBMaXN0PEJhdHRlcnlTaXBwZXI+IHNpcHBlcnMgPSBtVXNlclNpcHBlcnMudmFsdWVBdChpKTsKKyAgICAgICAgICAgIERvdWJsZSB1c2VyUG93ZXIgPSBtVXNlclBvd2VyLmdldCh1c2VySWQpOworICAgICAgICAgICAgZG91YmxlIHBvd2VyID0gKHVzZXJQb3dlciAhPSBudWxsKSA/IHVzZXJQb3dlciA6IDAuMDsKKyAgICAgICAgICAgIEJhdHRlcnlTaXBwZXIgYnMgPSBhZGRFbnRyeShCYXR0ZXJ5U2lwcGVyLkRyYWluVHlwZS5VU0VSLCAwLCBwb3dlcik7CisgICAgICAgICAgICBicy51c2VySWQgPSB1c2VySWQ7CisgICAgICAgICAgICBhZ2dyZWdhdGVTaXBwZXJzKGJzLCBzaXBwZXJzLCAiVXNlciIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGVzdGltYXRlZCBwb3dlciAoaW4gbUFzKSBvZiBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIHBhY2tldCB3aXRoIHRoZSBtb2JpbGUgcmFkaW8uCisgICAgICovCisgICAgcHJpdmF0ZSBkb3VibGUgZ2V0TW9iaWxlUG93ZXJQZXJQYWNrZXQoKSB7CisgICAgICAgIGZpbmFsIGxvbmcgTU9CSUxFX0JQUyA9IDIwMDAwMDsgLy8gVE9ETzogRXh0cmFjdCBhdmVyYWdlIGJpdCByYXRlcyBmcm9tIHN5c3RlbQorICAgICAgICBmaW5hbCBkb3VibGUgTU9CSUxFX1BPV0VSID0gbVBvd2VyUHJvZmlsZS5nZXRBdmVyYWdlUG93ZXIoUG93ZXJQcm9maWxlLlBPV0VSX1JBRElPX0FDVElWRSkKKyAgICAgICAgICAgICAgICAvIDM2MDA7CisKKyAgICAgICAgZmluYWwgbG9uZyBtb2JpbGVSeCA9IG1TdGF0cy5nZXROZXR3b3JrQWN0aXZpdHlQYWNrZXRzKE5FVFdPUktfTU9CSUxFX1JYX0RBVEEsIG1TdGF0c1R5cGUpOworICAgICAgICBmaW5hbCBsb25nIG1vYmlsZVR4ID0gbVN0YXRzLmdldE5ldHdvcmtBY3Rpdml0eVBhY2tldHMoTkVUV09SS19NT0JJTEVfVFhfREFUQSwgbVN0YXRzVHlwZSk7CisgICAgICAgIGZpbmFsIGxvbmcgbW9iaWxlRGF0YSA9IG1vYmlsZVJ4ICsgbW9iaWxlVHg7CisKKyAgICAgICAgZmluYWwgbG9uZyByYWRpb0RhdGFVcHRpbWVNcyA9IG1TdGF0cy5nZXRSYWRpb0RhdGFVcHRpbWUoKSAvIDEwMDA7CisgICAgICAgIGZpbmFsIGRvdWJsZSBtb2JpbGVQcHMgPSByYWRpb0RhdGFVcHRpbWVNcyAhPSAwCisgICAgICAgICAgICAgICAgPyBtb2JpbGVEYXRhIC8gKGRvdWJsZSlyYWRpb0RhdGFVcHRpbWVNcworICAgICAgICAgICAgICAgIDogKCgoZG91YmxlKU1PQklMRV9CUFMpIC8gOCAvIDIwNDgpOworCisgICAgICAgIHJldHVybiAoTU9CSUxFX1BPV0VSIC8gbW9iaWxlUHBzKSAvICg2MCo2MCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGVzdGltYXRlZCBwb3dlciAoaW4gbUFzKSBvZiBzZW5kaW5nIGEgYnl0ZSB3aXRoIHRoZSBXaS1GaSByYWRpby4KKyAgICAgKi8KKyAgICBwcml2YXRlIGRvdWJsZSBnZXRXaWZpUG93ZXJQZXJQYWNrZXQoKSB7CisgICAgICAgIGZpbmFsIGxvbmcgV0lGSV9CUFMgPSAxMDAwMDAwOyAvLyBUT0RPOiBFeHRyYWN0IGF2ZXJhZ2UgYml0IHJhdGVzIGZyb20gc3lzdGVtCisgICAgICAgIGZpbmFsIGRvdWJsZSBXSUZJX1BPV0VSID0gbVBvd2VyUHJvZmlsZS5nZXRBdmVyYWdlUG93ZXIoUG93ZXJQcm9maWxlLlBPV0VSX1dJRklfQUNUSVZFKQorICAgICAgICAgICAgICAgIC8gMzYwMDsKKyAgICAgICAgcmV0dXJuIChXSUZJX1BPV0VSIC8gKCgoZG91YmxlKVdJRklfQlBTKSAvIDggLyAyMDQ4KSkgLyAoNjAqNjApOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBwcm9jZXNzTWlzY1VzYWdlKCkgeworICAgICAgICBhZGRVc2VyVXNhZ2UoKTsKKyAgICAgICAgYWRkUGhvbmVVc2FnZSgpOworICAgICAgICBhZGRTY3JlZW5Vc2FnZSgpOworICAgICAgICBhZGRXaUZpVXNhZ2UoKTsKKyAgICAgICAgYWRkQmx1ZXRvb3RoVXNhZ2UoKTsKKyAgICAgICAgYWRkSWRsZVVzYWdlKCk7IC8vIE5vdCBpbmNsdWRpbmcgY2VsbHVsYXIgaWRsZSBwb3dlcgorICAgICAgICAvLyBEb24ndCBjb21wdXRlIHJhZGlvIHVzYWdlIGlmIGl0J3MgYSB3aWZpLW9ubHkgZGV2aWNlCisgICAgICAgIENvbm5lY3Rpdml0eU1hbmFnZXIgY20gPSAoQ29ubmVjdGl2aXR5TWFuYWdlciltQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAorICAgICAgICAgICAgICAgIENvbnRleHQuQ09OTkVDVElWSVRZX1NFUlZJQ0UpOworICAgICAgICBpZiAoY20uaXNOZXR3b3JrU3VwcG9ydGVkKENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9NT0JJTEUpKSB7CisgICAgICAgICAgICBhZGRSYWRpb1VzYWdlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIEJhdHRlcnlTaXBwZXIgYWRkRW50cnkoRHJhaW5UeXBlIGRyYWluVHlwZSwgbG9uZyB0aW1lLCBkb3VibGUgcG93ZXIpIHsKKyAgICAgICAgbVRvdGFsUG93ZXIgKz0gcG93ZXI7CisgICAgICAgIHJldHVybiBhZGRFbnRyeU5vVG90YWwoZHJhaW5UeXBlLCB0aW1lLCBwb3dlcik7CisgICAgfQorCisgICAgcHJpdmF0ZSBCYXR0ZXJ5U2lwcGVyIGFkZEVudHJ5Tm9Ub3RhbChEcmFpblR5cGUgZHJhaW5UeXBlLCBsb25nIHRpbWUsIGRvdWJsZSBwb3dlcikgeworICAgICAgICBpZiAocG93ZXIgPiBtTWF4UG93ZXIpIG1NYXhQb3dlciA9IHBvd2VyOworICAgICAgICBCYXR0ZXJ5U2lwcGVyIGJzID0gbmV3IEJhdHRlcnlTaXBwZXIoZHJhaW5UeXBlLCBudWxsLCBuZXcgZG91YmxlW10ge3Bvd2VyfSk7CisgICAgICAgIGJzLnVzYWdlVGltZSA9IHRpbWU7CisgICAgICAgIG1Vc2FnZUxpc3QuYWRkKGJzKTsKKyAgICAgICAgcmV0dXJuIGJzOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PEJhdHRlcnlTaXBwZXI+IGdldFVzYWdlTGlzdCgpIHsKKyAgICAgICAgcmV0dXJuIG1Vc2FnZUxpc3Q7CisgICAgfQorCisgICAgcHVibGljIGxvbmcgZ2V0U3RhdHNQZXJpb2QoKSB7IHJldHVybiBtU3RhdHNQZXJpb2Q7IH0KKworICAgIHB1YmxpYyBpbnQgZ2V0U3RhdHNUeXBlKCkgeyByZXR1cm4gbVN0YXRzVHlwZTsgfTsKKworICAgIHB1YmxpYyBkb3VibGUgZ2V0TWF4UG93ZXIoKSB7IHJldHVybiBtTWF4UG93ZXI7IH0KKworICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxQb3dlcigpIHsgcmV0dXJuIG1Ub3RhbFBvd2VyOyB9CisKKyAgICBwdWJsaWMgZG91YmxlIGdldE1pbkRyYWluZWRQb3dlcigpIHsKKyAgICAgICAgcmV0dXJuIG1NaW5EcmFpbmVkUG93ZXI7CisgICAgfQorCisgICAgcHVibGljIGRvdWJsZSBnZXRNYXhEcmFpbmVkUG93ZXIoKSB7CisgICAgICAgIHJldHVybiBtTWF4RHJhaW5lZFBvd2VyOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBsb2FkKCkgeworICAgICAgICBpZiAobUJhdHRlcnlJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgYnl0ZVtdIGRhdGEgPSBtQmF0dGVyeUluZm8uZ2V0U3RhdGlzdGljcygpOworICAgICAgICAgICAgUGFyY2VsIHBhcmNlbCA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgICAgIHBhcmNlbC51bm1hcnNoYWxsKGRhdGEsIDAsIGRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIHBhcmNlbC5zZXREYXRhUG9zaXRpb24oMCk7CisgICAgICAgICAgICBCYXR0ZXJ5U3RhdHNJbXBsIHN0YXRzID0gY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuQmF0dGVyeVN0YXRzSW1wbC5DUkVBVE9SCisgICAgICAgICAgICAgICAgICAgIC5jcmVhdGVGcm9tUGFyY2VsKHBhcmNlbCk7CisgICAgICAgICAgICBzdGF0cy5kaXN0cmlidXRlV29ya0xvY2tlZChCYXR0ZXJ5U3RhdHMuU1RBVFNfU0lOQ0VfQ0hBUkdFRCk7CisgICAgICAgICAgICBtU3RhdHMgPSBzdGF0czsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIlJlbW90ZUV4Y2VwdGlvbjoiLCBlKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9CYXR0ZXJ5U3RhdHNJbXBsLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvQmF0dGVyeVN0YXRzSW1wbC5qYXZhCmluZGV4IDg3Mjg2MTAuLmY2OTI5NDggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9CYXR0ZXJ5U3RhdHNJbXBsLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL0JhdHRlcnlTdGF0c0ltcGwuamF2YQpAQCAtMjAsNiArMjAsNyBAQAogCiBpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoRGV2aWNlOwogaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLkJsdWV0b290aEhlYWRzZXQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrU3RhdHM7CiBpbXBvcnQgYW5kcm9pZC5vcy5CYXR0ZXJ5TWFuYWdlcjsKQEAgLTg1LDcgKzg2LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFHSUMgPSAweEJBNzU3NDc1OyAvLyAnQkFUU1RBVFMnCiAKICAgICAvLyBDdXJyZW50IG9uLWRpc2sgUGFyY2VsIHZlcnNpb24KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVkVSU0lPTiA9IDY3ICsgKFVTRV9PTERfSElTVE9SWSA/IDEwMDAgOiAwKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVkVSU0lPTiA9IDY5ICsgKFVTRV9PTERfSElTVE9SWSA/IDEwMDAgOiAwKTsKIAogICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHdlIHdpbGwgcmVjb3JkIGluIHRoZSBoaXN0b3J5LgogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfSElTVE9SWV9JVEVNUyA9IDIwMDA7CkBAIC0yMzksNyArMjQwLDkgQEAKICAgICBmaW5hbCBTdG9wd2F0Y2hUaW1lcltdIG1QaG9uZURhdGFDb25uZWN0aW9uc1RpbWVyID0KICAgICAgICAgICAgIG5ldyBTdG9wd2F0Y2hUaW1lcltOVU1fREFUQV9DT05ORUNUSU9OX1RZUEVTXTsKIAotICAgIGZpbmFsIExvbmdTYW1wbGluZ0NvdW50ZXJbXSBtTmV0d29ya0FjdGl2aXR5Q291bnRlcnMgPQorICAgIGZpbmFsIExvbmdTYW1wbGluZ0NvdW50ZXJbXSBtTmV0d29ya0J5dGVBY3Rpdml0eUNvdW50ZXJzID0KKyAgICAgICAgICAgIG5ldyBMb25nU2FtcGxpbmdDb3VudGVyW05VTV9ORVRXT1JLX0FDVElWSVRZX1RZUEVTXTsKKyAgICBmaW5hbCBMb25nU2FtcGxpbmdDb3VudGVyW10gbU5ldHdvcmtQYWNrZXRBY3Rpdml0eUNvdW50ZXJzID0KICAgICAgICAgICAgIG5ldyBMb25nU2FtcGxpbmdDb3VudGVyW05VTV9ORVRXT1JLX0FDVElWSVRZX1RZUEVTXTsKIAogICAgIGJvb2xlYW4gbVdpZmlPbjsKQEAgLTE0NzQsNiArMTQ3NywxNjIgQEAKICAgICAgICAgbUJ0SGVhZHNldCA9IGhlYWRzZXQ7CiAgICAgfQogCisgICAgLy8gUGFydCBvZiBpbml0aWFsIGRlbHRhIGludCB0aGF0IHNwZWNpZmllcyB0aGUgdGltZSBkZWx0YS4KKyAgICBzdGF0aWMgZmluYWwgaW50IERFTFRBX1RJTUVfTUFTSyA9IDB4M2ZmZmY7CisgICAgc3RhdGljIGZpbmFsIGludCBERUxUQV9USU1FX0FCUyA9IDB4M2ZmZmQ7ICAgIC8vIEZvbGxvd2luZyBpcyBhbiBlbnRpcmUgYWJzIHVwZGF0ZS4KKyAgICBzdGF0aWMgZmluYWwgaW50IERFTFRBX1RJTUVfSU5UID0gMHgzZmZmZTsgICAgLy8gVGhlIGRlbHRhIGlzIGEgZm9sbG93aW5nIGludAorICAgIHN0YXRpYyBmaW5hbCBpbnQgREVMVEFfVElNRV9MT05HID0gMHgzZmZmZjsgICAvLyBUaGUgZGVsdGEgaXMgYSBmb2xsb3dpbmcgbG9uZworICAgIC8vIFBhcnQgb2YgaW5pdGlhbCBkZWx0YSBpbnQgaG9sZGluZyB0aGUgY29tbWFuZCBjb2RlLgorICAgIHN0YXRpYyBmaW5hbCBpbnQgREVMVEFfQ01EX01BU0sgPSAweDM7CisgICAgc3RhdGljIGZpbmFsIGludCBERUxUQV9DTURfU0hJRlQgPSAxODsKKyAgICAvLyBGbGFnIGluIGRlbHRhIGludDogYSBuZXcgYmF0dGVyeSBsZXZlbCBpbnQgZm9sbG93cy4KKyAgICBzdGF0aWMgZmluYWwgaW50IERFTFRBX0JBVFRFUllfTEVWRUxfRkxBRyA9IDE8PDIwOworICAgIC8vIEZsYWcgaW4gZGVsdGEgaW50OiBhIG5ldyBmdWxsIHN0YXRlIGFuZCBiYXR0ZXJ5IHN0YXR1cyBpbnQgZm9sbG93cy4KKyAgICBzdGF0aWMgZmluYWwgaW50IERFTFRBX1NUQVRFX0ZMQUcgPSAxPDwyMTsKKyAgICBzdGF0aWMgZmluYWwgaW50IERFTFRBX1NUQVRFX01BU0sgPSAweGZmYzAwMDAwOworCisgICAgcHVibGljIHZvaWQgd3JpdGVIaXN0b3J5RGVsdGEoUGFyY2VsIGRlc3QsIEhpc3RvcnlJdGVtIGN1ciwgSGlzdG9yeUl0ZW0gbGFzdCkgeworICAgICAgICBpZiAobGFzdCA9PSBudWxsIHx8ICFsYXN0LmlzRGVsdGFEYXRhKCkgfHwgIWN1ci5pc0RlbHRhRGF0YSgpKSB7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KERFTFRBX1RJTUVfQUJTKTsKKyAgICAgICAgICAgIGN1ci53cml0ZVRvUGFyY2VsKGRlc3QsIDApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgbG9uZyBkZWx0YVRpbWUgPSBjdXIudGltZSAtIGxhc3QudGltZTsKKyAgICAgICAgZmluYWwgaW50IGxhc3RCYXR0ZXJ5TGV2ZWxJbnQgPSBidWlsZEJhdHRlcnlMZXZlbEludChsYXN0KTsKKyAgICAgICAgZmluYWwgaW50IGxhc3RTdGF0ZUludCA9IGJ1aWxkU3RhdGVJbnQobGFzdCk7CisKKyAgICAgICAgaW50IGRlbHRhVGltZVRva2VuOworICAgICAgICBpZiAoZGVsdGFUaW1lIDwgMCB8fCBkZWx0YVRpbWUgPiBJbnRlZ2VyLk1BWF9WQUxVRSkgeworICAgICAgICAgICAgZGVsdGFUaW1lVG9rZW4gPSBERUxUQV9USU1FX0xPTkc7CisgICAgICAgIH0gZWxzZSBpZiAoZGVsdGFUaW1lID49IERFTFRBX1RJTUVfQUJTKSB7CisgICAgICAgICAgICBkZWx0YVRpbWVUb2tlbiA9IERFTFRBX1RJTUVfSU5UOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVsdGFUaW1lVG9rZW4gPSAoaW50KWRlbHRhVGltZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZmlyc3RUb2tlbiA9IGRlbHRhVGltZVRva2VuCisgICAgICAgICAgICAgICAgfCAoY3VyLmNtZDw8REVMVEFfQ01EX1NISUZUKQorICAgICAgICAgICAgICAgIHwgKGN1ci5zdGF0ZXMmREVMVEFfU1RBVEVfTUFTSyk7CisgICAgICAgIGZpbmFsIGludCBiYXR0ZXJ5TGV2ZWxJbnQgPSBidWlsZEJhdHRlcnlMZXZlbEludChjdXIpOworICAgICAgICBmaW5hbCBib29sZWFuIGJhdHRlcnlMZXZlbEludENoYW5nZWQgPSBiYXR0ZXJ5TGV2ZWxJbnQgIT0gbGFzdEJhdHRlcnlMZXZlbEludDsKKyAgICAgICAgaWYgKGJhdHRlcnlMZXZlbEludENoYW5nZWQpIHsKKyAgICAgICAgICAgIGZpcnN0VG9rZW4gfD0gREVMVEFfQkFUVEVSWV9MRVZFTF9GTEFHOworICAgICAgICB9CisgICAgICAgIGZpbmFsIGludCBzdGF0ZUludCA9IGJ1aWxkU3RhdGVJbnQoY3VyKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBzdGF0ZUludENoYW5nZWQgPSBzdGF0ZUludCAhPSBsYXN0U3RhdGVJbnQ7CisgICAgICAgIGlmIChzdGF0ZUludENoYW5nZWQpIHsKKyAgICAgICAgICAgIGZpcnN0VG9rZW4gfD0gREVMVEFfU1RBVEVfRkxBRzsKKyAgICAgICAgfQorICAgICAgICBkZXN0LndyaXRlSW50KGZpcnN0VG9rZW4pOworICAgICAgICBpZiAoREVCVUcpIFNsb2cuaShUQUcsICJXUklURSBERUxUQTogZmlyc3RUb2tlbj0weCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGZpcnN0VG9rZW4pCisgICAgICAgICAgICAgICAgKyAiIGRlbHRhVGltZT0iICsgZGVsdGFUaW1lKTsKKworICAgICAgICBpZiAoZGVsdGFUaW1lVG9rZW4gPj0gREVMVEFfVElNRV9JTlQpIHsKKyAgICAgICAgICAgIGlmIChkZWx0YVRpbWVUb2tlbiA9PSBERUxUQV9USU1FX0lOVCkgeworICAgICAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy5pKFRBRywgIldSSVRFIERFTFRBOiBpbnQgZGVsdGFUaW1lPSIgKyAoaW50KWRlbHRhVGltZSk7CisgICAgICAgICAgICAgICAgZGVzdC53cml0ZUludCgoaW50KWRlbHRhVGltZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy5pKFRBRywgIldSSVRFIERFTFRBOiBsb25nIGRlbHRhVGltZT0iICsgZGVsdGFUaW1lKTsKKyAgICAgICAgICAgICAgICBkZXN0LndyaXRlTG9uZyhkZWx0YVRpbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChiYXR0ZXJ5TGV2ZWxJbnRDaGFuZ2VkKSB7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KGJhdHRlcnlMZXZlbEludCk7CisgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cuaShUQUcsICJXUklURSBERUxUQTogYmF0dGVyeVRva2VuPTB4IgorICAgICAgICAgICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcoYmF0dGVyeUxldmVsSW50KQorICAgICAgICAgICAgICAgICAgICArICIgYmF0dGVyeUxldmVsPSIgKyBjdXIuYmF0dGVyeUxldmVsCisgICAgICAgICAgICAgICAgICAgICsgIiBiYXR0ZXJ5VGVtcD0iICsgY3VyLmJhdHRlcnlUZW1wZXJhdHVyZQorICAgICAgICAgICAgICAgICAgICArICIgYmF0dGVyeVZvbHQ9IiArIChpbnQpY3VyLmJhdHRlcnlWb2x0YWdlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhdGVJbnRDaGFuZ2VkKSB7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KHN0YXRlSW50KTsKKyAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy5pKFRBRywgIldSSVRFIERFTFRBOiBzdGF0ZVRva2VuPTB4IgorICAgICAgICAgICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcoc3RhdGVJbnQpCisgICAgICAgICAgICAgICAgICAgICsgIiBiYXR0ZXJ5U3RhdHVzPSIgKyBjdXIuYmF0dGVyeVN0YXR1cworICAgICAgICAgICAgICAgICAgICArICIgYmF0dGVyeUhlYWx0aD0iICsgY3VyLmJhdHRlcnlIZWFsdGgKKyAgICAgICAgICAgICAgICAgICAgKyAiIGJhdHRlcnlQbHVnVHlwZT0iICsgY3VyLmJhdHRlcnlQbHVnVHlwZQorICAgICAgICAgICAgICAgICAgICArICIgc3RhdGVzPTB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoY3VyLnN0YXRlcykpOworICAgICAgICB9CisgICAgICAgIGlmIChjdXIuY21kID09IEhpc3RvcnlJdGVtLkNNRF9FVkVOVCkgeworICAgICAgICAgICAgZGVzdC53cml0ZUludChjdXIuZXZlbnRDb2RlKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQoY3VyLmV2ZW50VWlkKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVTdHJpbmcoY3VyLmV2ZW50TmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGludCBidWlsZEJhdHRlcnlMZXZlbEludChIaXN0b3J5SXRlbSBoKSB7CisgICAgICAgIHJldHVybiAoKCgoaW50KWguYmF0dGVyeUxldmVsKTw8MjUpJjB4ZmUwMDAwMDApCisgICAgICAgICAgICAgICAgfCAoKCgoaW50KWguYmF0dGVyeVRlbXBlcmF0dXJlKTw8MTQpJjB4MDFmZmMwMDApCisgICAgICAgICAgICAgICAgfCAoKChpbnQpaC5iYXR0ZXJ5Vm9sdGFnZSkmMHgwMDAwM2ZmZik7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgYnVpbGRTdGF0ZUludChIaXN0b3J5SXRlbSBoKSB7CisgICAgICAgIHJldHVybiAoKCgoaW50KWguYmF0dGVyeVN0YXR1cyk8PDI4KSYweGYwMDAwMDAwKQorICAgICAgICAgICAgICAgIHwgKCgoKGludCloLmJhdHRlcnlIZWFsdGgpPDwyNCkmMHgwZjAwMDAwMCkKKyAgICAgICAgICAgICAgICB8ICgoKChpbnQpaC5iYXR0ZXJ5UGx1Z1R5cGUpPDwyMikmMHgwMGMwMDAwMCkKKyAgICAgICAgICAgICAgICB8IChoLnN0YXRlcyYofkRFTFRBX1NUQVRFX01BU0spKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZWFkSGlzdG9yeURlbHRhKFBhcmNlbCBzcmMsIEhpc3RvcnlJdGVtIGN1cikgeworICAgICAgICBpbnQgZmlyc3RUb2tlbiA9IHNyYy5yZWFkSW50KCk7CisgICAgICAgIGludCBkZWx0YVRpbWVUb2tlbiA9IGZpcnN0VG9rZW4mREVMVEFfVElNRV9NQVNLOworICAgICAgICBjdXIuY21kID0gKGJ5dGUpKChmaXJzdFRva2VuPj5ERUxUQV9DTURfU0hJRlQpJkRFTFRBX0NNRF9NQVNLKTsKKyAgICAgICAgaWYgKERFQlVHKSBTbG9nLmkoVEFHLCAiUkVBRCBERUxUQTogZmlyc3RUb2tlbj0weCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGZpcnN0VG9rZW4pCisgICAgICAgICAgICAgICAgKyAiIGRlbHRhVGltZVRva2VuPSIgKyBkZWx0YVRpbWVUb2tlbik7CisKKyAgICAgICAgaWYgKGRlbHRhVGltZVRva2VuIDwgREVMVEFfVElNRV9BQlMpIHsKKyAgICAgICAgICAgIGN1ci50aW1lICs9IGRlbHRhVGltZVRva2VuOworICAgICAgICB9IGVsc2UgaWYgKGRlbHRhVGltZVRva2VuID09IERFTFRBX1RJTUVfQUJTKSB7CisgICAgICAgICAgICBjdXIudGltZSA9IHNyYy5yZWFkTG9uZygpOworICAgICAgICAgICAgY3VyLnJlYWRGcm9tUGFyY2VsKHNyYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZGVsdGFUaW1lVG9rZW4gPT0gREVMVEFfVElNRV9JTlQpIHsKKyAgICAgICAgICAgIGludCBkZWx0YSA9IHNyYy5yZWFkSW50KCk7CisgICAgICAgICAgICBjdXIudGltZSArPSBkZWx0YTsKKyAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy5pKFRBRywgIlJFQUQgREVMVEE6IHRpbWUgZGVsdGE9IiArIGRlbHRhICsgIiBuZXcgdGltZT0iICsgY3VyLnRpbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9uZyBkZWx0YSA9IHNyYy5yZWFkTG9uZygpOworICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLmkoVEFHLCAiUkVBRCBERUxUQTogdGltZSBkZWx0YT0iICsgZGVsdGEgKyAiIG5ldyB0aW1lPSIgKyBjdXIudGltZSk7CisgICAgICAgICAgICBjdXIudGltZSArPSBkZWx0YTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoZmlyc3RUb2tlbiZERUxUQV9CQVRURVJZX0xFVkVMX0ZMQUcpICE9IDApIHsKKyAgICAgICAgICAgIGludCBiYXR0ZXJ5TGV2ZWxJbnQgPSBzcmMucmVhZEludCgpOworICAgICAgICAgICAgY3VyLmJhdHRlcnlMZXZlbCA9IChieXRlKSgoYmF0dGVyeUxldmVsSW50Pj4yNSkmMHg3Zik7CisgICAgICAgICAgICBjdXIuYmF0dGVyeVRlbXBlcmF0dXJlID0gKHNob3J0KSgoYmF0dGVyeUxldmVsSW50PDw3KT4+MjEpOworICAgICAgICAgICAgY3VyLmJhdHRlcnlWb2x0YWdlID0gKGNoYXIpKGJhdHRlcnlMZXZlbEludCYweDNmZmYpOworICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLmkoVEFHLCAiUkVBRCBERUxUQTogYmF0dGVyeVRva2VuPTB4IgorICAgICAgICAgICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcoYmF0dGVyeUxldmVsSW50KQorICAgICAgICAgICAgICAgICAgICArICIgYmF0dGVyeUxldmVsPSIgKyBjdXIuYmF0dGVyeUxldmVsCisgICAgICAgICAgICAgICAgICAgICsgIiBiYXR0ZXJ5VGVtcD0iICsgY3VyLmJhdHRlcnlUZW1wZXJhdHVyZQorICAgICAgICAgICAgICAgICAgICArICIgYmF0dGVyeVZvbHQ9IiArIChpbnQpY3VyLmJhdHRlcnlWb2x0YWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoZmlyc3RUb2tlbiZERUxUQV9TVEFURV9GTEFHKSAhPSAwKSB7CisgICAgICAgICAgICBpbnQgc3RhdGVJbnQgPSBzcmMucmVhZEludCgpOworICAgICAgICAgICAgY3VyLnN0YXRlcyA9IChmaXJzdFRva2VuJkRFTFRBX1NUQVRFX01BU0spIHwgKHN0YXRlSW50Jih+REVMVEFfU1RBVEVfTUFTSykpOworICAgICAgICAgICAgY3VyLmJhdHRlcnlTdGF0dXMgPSAoYnl0ZSkoKHN0YXRlSW50Pj4yOCkmMHhmKTsKKyAgICAgICAgICAgIGN1ci5iYXR0ZXJ5SGVhbHRoID0gKGJ5dGUpKChzdGF0ZUludD4+MjQpJjB4Zik7CisgICAgICAgICAgICBjdXIuYmF0dGVyeVBsdWdUeXBlID0gKGJ5dGUpKChzdGF0ZUludD4+MjIpJjB4Myk7CisgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cuaShUQUcsICJSRUFEIERFTFRBOiBzdGF0ZVRva2VuPTB4IgorICAgICAgICAgICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcoc3RhdGVJbnQpCisgICAgICAgICAgICAgICAgICAgICsgIiBiYXR0ZXJ5U3RhdHVzPSIgKyBjdXIuYmF0dGVyeVN0YXR1cworICAgICAgICAgICAgICAgICAgICArICIgYmF0dGVyeUhlYWx0aD0iICsgY3VyLmJhdHRlcnlIZWFsdGgKKyAgICAgICAgICAgICAgICAgICAgKyAiIGJhdHRlcnlQbHVnVHlwZT0iICsgY3VyLmJhdHRlcnlQbHVnVHlwZQorICAgICAgICAgICAgICAgICAgICArICIgc3RhdGVzPTB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoY3VyLnN0YXRlcykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3VyLnN0YXRlcyA9IChmaXJzdFRva2VuJkRFTFRBX1NUQVRFX01BU0spIHwgKGN1ci5zdGF0ZXMmKH5ERUxUQV9TVEFURV9NQVNLKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VyLmNtZCA9PSBIaXN0b3J5SXRlbS5DTURfRVZFTlQpIHsKKyAgICAgICAgICAgIGN1ci5ldmVudENvZGUgPSBzcmMucmVhZEludCgpOworICAgICAgICAgICAgY3VyLmV2ZW50VWlkID0gc3JjLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGN1ci5ldmVudE5hbWUgPSBzcmMucmVhZFN0cmluZygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3VyLmV2ZW50Q29kZSA9IEhpc3RvcnlJdGVtLkVWRU5UX05PTkU7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpbnQgbUNoYW5nZWRCdWZmZXJTdGF0ZXMgPSAwOwogCiAgICAgdm9pZCBhZGRIaXN0b3J5QnVmZmVyTG9ja2VkKGxvbmcgY3VyVGltZSkgewpAQCAtMTQ5MSw3ICsxNjUwLDcgQEAKICAgICAgICAgICAgIG1IaXN0b3J5QnVmZmVyLnNldERhdGFQb3NpdGlvbihtSGlzdG9yeUJ1ZmZlckxhc3RQb3MpOwogICAgICAgICAgICAgbUhpc3RvcnlCdWZmZXJMYXN0UG9zID0gLTE7CiAgICAgICAgICAgICBpZiAobUhpc3RvcnlMYXN0TGFzdFdyaXR0ZW4uY21kID09IEhpc3RvcnlJdGVtLkNNRF9VUERBVEUKLSAgICAgICAgICAgICAgICAgICAgJiYgdGltZURpZmYgPCA1MDAgJiYgbUhpc3RvcnlMYXN0TGFzdFdyaXR0ZW4uc2FtZShtSGlzdG9yeUN1cikpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgdGltZURpZmYgPCA1MDAgJiYgbUhpc3RvcnlMYXN0TGFzdFdyaXR0ZW4uc2FtZU5vbkV2ZW50KG1IaXN0b3J5Q3VyKSkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgcmVzdWx0cyBpbiB1cyByZXR1cm5pbmcgdG8gdGhlIHN0YXRlIHdyaXR0ZW4KICAgICAgICAgICAgICAgICAvLyBwcmlvciB0byB0aGUgbGFzdCBvbmUsIHRoZW4gd2UgY2FuIGp1c3QgZGVsZXRlIHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgLy8gd3JpdHRlbiBvbmUgYW5kIGRyb3AgdGhlIG5ldyBvbmUuICBOb3RoaW5nIG1vcmUgdG8gZG8uCkBAIC0xNTI5LDYgKzE2ODgsMTUgQEAKICAgICB9CiAKICAgICB2b2lkIGFkZEhpc3RvcnlCdWZmZXJMb2NrZWQobG9uZyBjdXJUaW1lLCBieXRlIGNtZCkgeworICAgICAgICBhZGRIaXN0b3J5QnVmZmVyTG9ja2VkKGN1clRpbWUsIGNtZCwgSGlzdG9yeUl0ZW0uRVZFTlRfTk9ORSwgMCwgbnVsbCk7CisgICAgfQorCisgICAgdm9pZCBhZGRIaXN0b3J5QnVmZmVyRXZlbnRMb2NrZWQobG9uZyBjdXJUaW1lLCBpbnQgZXZlbnRDb2RlLCBpbnQgZXZlbnRVaWQsIFN0cmluZyBldmVudE5hbWUpIHsKKyAgICAgICAgYWRkSGlzdG9yeUJ1ZmZlckxvY2tlZChjdXJUaW1lLCBIaXN0b3J5SXRlbS5DTURfRVZFTlQsIGV2ZW50Q29kZSwgZXZlbnRVaWQsIGV2ZW50TmFtZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFkZEhpc3RvcnlCdWZmZXJMb2NrZWQobG9uZyBjdXJUaW1lLCBieXRlIGNtZCwKKyAgICAgICAgICAgIGludCBldmVudENvZGUsIGludCBldmVudFVpZCwgU3RyaW5nIGV2ZW50TmFtZSkgewogICAgICAgICBpbnQgb3JpZ1BvcyA9IDA7CiAgICAgICAgIGlmIChtSXRlcmF0aW5nSGlzdG9yeSkgewogICAgICAgICAgICAgb3JpZ1BvcyA9IG1IaXN0b3J5QnVmZmVyLmRhdGFQb3NpdGlvbigpOwpAQCAtMTUzNiw4ICsxNzA0LDkgQEAKICAgICAgICAgfQogICAgICAgICBtSGlzdG9yeUJ1ZmZlckxhc3RQb3MgPSBtSGlzdG9yeUJ1ZmZlci5kYXRhUG9zaXRpb24oKTsKICAgICAgICAgbUhpc3RvcnlMYXN0TGFzdFdyaXR0ZW4uc2V0VG8obUhpc3RvcnlMYXN0V3JpdHRlbik7Ci0gICAgICAgIG1IaXN0b3J5TGFzdFdyaXR0ZW4uc2V0VG8obUhpc3RvcnlCYXNlVGltZSArIGN1clRpbWUsIGNtZCwgbUhpc3RvcnlDdXIpOwotICAgICAgICBtSGlzdG9yeUxhc3RXcml0dGVuLndyaXRlRGVsdGEobUhpc3RvcnlCdWZmZXIsIG1IaXN0b3J5TGFzdExhc3RXcml0dGVuKTsKKyAgICAgICAgbUhpc3RvcnlMYXN0V3JpdHRlbi5zZXRUbyhtSGlzdG9yeUJhc2VUaW1lICsgY3VyVGltZSwgY21kLAorICAgICAgICAgICAgICAgIGV2ZW50Q29kZSwgZXZlbnRVaWQsIGV2ZW50TmFtZSwgbUhpc3RvcnlDdXIpOworICAgICAgICB3cml0ZUhpc3RvcnlEZWx0YShtSGlzdG9yeUJ1ZmZlciwgbUhpc3RvcnlMYXN0V3JpdHRlbiwgbUhpc3RvcnlMYXN0TGFzdFdyaXR0ZW4pOwogICAgICAgICBtTGFzdEhpc3RvcnlUaW1lID0gY3VyVGltZTsKICAgICAgICAgaWYgKERFQlVHX0hJU1RPUlkpIFNsb2cuaShUQUcsICJXcml0aW5nIGhpc3RvcnkgYnVmZmVyOiB3YXMgIiArIG1IaXN0b3J5QnVmZmVyTGFzdFBvcwogICAgICAgICAgICAgICAgICsgIiBub3cgIiArIG1IaXN0b3J5QnVmZmVyLmRhdGFQb3NpdGlvbigpCkBAIC0xNTcxLDcgKzE3NDAsNyBAQAogICAgICAgICAgICAgLy8gbG9uZ2VyIG5lZWQgdGhlIGVudHJ5LgogICAgICAgICAgICAgaWYgKG1IaXN0b3J5TGFzdEVuZCAhPSBudWxsICYmIG1IaXN0b3J5TGFzdEVuZC5jbWQgPT0gSGlzdG9yeUl0ZW0uQ01EX1VQREFURQogICAgICAgICAgICAgICAgICAgICAmJiAobUhpc3RvcnlCYXNlVGltZStjdXJUaW1lKSA8IChtSGlzdG9yeUVuZC50aW1lKzUwMCkKLSAgICAgICAgICAgICAgICAgICAgJiYgbUhpc3RvcnlMYXN0RW5kLnNhbWUobUhpc3RvcnlDdXIpKSB7CisgICAgICAgICAgICAgICAgICAgICYmIG1IaXN0b3J5TGFzdEVuZC5zYW1lTm9uRXZlbnQobUhpc3RvcnlDdXIpKSB7CiAgICAgICAgICAgICAgICAgbUhpc3RvcnlMYXN0RW5kLm5leHQgPSBudWxsOwogICAgICAgICAgICAgICAgIG1IaXN0b3J5RW5kLm5leHQgPSBtSGlzdG9yeUNhY2hlOwogICAgICAgICAgICAgICAgIG1IaXN0b3J5Q2FjaGUgPSBtSGlzdG9yeUVuZDsKQEAgLTE1NzksNyArMTc0OCw4IEBACiAgICAgICAgICAgICAgICAgbUhpc3RvcnlMYXN0RW5kID0gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbUNoYW5nZWRTdGF0ZXMgfD0gbUhpc3RvcnlFbmQuc3RhdGVzXm1IaXN0b3J5Q3VyLnN0YXRlczsKLSAgICAgICAgICAgICAgICBtSGlzdG9yeUVuZC5zZXRUbyhtSGlzdG9yeUVuZC50aW1lLCBIaXN0b3J5SXRlbS5DTURfVVBEQVRFLCBtSGlzdG9yeUN1cik7CisgICAgICAgICAgICAgICAgbUhpc3RvcnlFbmQuc2V0VG8obUhpc3RvcnlFbmQudGltZSwgSGlzdG9yeUl0ZW0uQ01EX1VQREFURSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEhpc3RvcnlJdGVtLkVWRU5UX05PTkUsIDAsIG51bGwsIG1IaXN0b3J5Q3VyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTYxNSw3ICsxNzg1LDggQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJlYyA9IG5ldyBIaXN0b3J5SXRlbSgpOwogICAgICAgICB9Ci0gICAgICAgIHJlYy5zZXRUbyhtSGlzdG9yeUJhc2VUaW1lICsgY3VyVGltZSwgY21kLCBtSGlzdG9yeUN1cik7CisgICAgICAgIHJlYy5zZXRUbyhtSGlzdG9yeUJhc2VUaW1lICsgY3VyVGltZSwgY21kLAorICAgICAgICAgICAgICAgIEhpc3RvcnlJdGVtLkVWRU5UX05PTkUsIDAsIG51bGwsIG1IaXN0b3J5Q3VyKTsKIAogICAgICAgICBhZGRIaXN0b3J5UmVjb3JkTG9ja2VkKHJlYyk7CiAgICAgfQpAQCAtMjU3Niw5ICsyNzQ3LDE4IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGxvbmcgZ2V0TmV0d29ya0FjdGl2aXR5Q291bnQoaW50IHR5cGUsIGludCB3aGljaCkgewotICAgICAgICBpZiAodHlwZSA+PSAwICYmIHR5cGUgPCBtTmV0d29ya0FjdGl2aXR5Q291bnRlcnMubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzW3R5cGVdLmdldENvdW50TG9ja2VkKHdoaWNoKTsKKyAgICBwdWJsaWMgbG9uZyBnZXROZXR3b3JrQWN0aXZpdHlCeXRlcyhpbnQgdHlwZSwgaW50IHdoaWNoKSB7CisgICAgICAgIGlmICh0eXBlID49IDAgJiYgdHlwZSA8IG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gbU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVyc1t0eXBlXS5nZXRDb3VudExvY2tlZCh3aGljaCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBsb25nIGdldE5ldHdvcmtBY3Rpdml0eVBhY2tldHMoaW50IHR5cGUsIGludCB3aGljaCkgeworICAgICAgICBpZiAodHlwZSA+PSAwICYmIHR5cGUgPCBtTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gbU5ldHdvcmtQYWNrZXRBY3Rpdml0eUNvdW50ZXJzW3R5cGVdLmdldENvdW50TG9ja2VkKHdoaWNoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0yNjI3LDcgKzI4MDcsOCBAQAogCiAgICAgICAgIENvdW50ZXJbXSBtVXNlckFjdGl2aXR5Q291bnRlcnM7CiAKLSAgICAgICAgTG9uZ1NhbXBsaW5nQ291bnRlcltdIG1OZXR3b3JrQWN0aXZpdHlDb3VudGVyczsKKyAgICAgICAgTG9uZ1NhbXBsaW5nQ291bnRlcltdIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnM7CisgICAgICAgIExvbmdTYW1wbGluZ0NvdW50ZXJbXSBtTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnM7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBzdGF0aXN0aWNzIHdlIGhhdmUgY29sbGVjdGVkIGZvciB0aGlzIHVpZCdzIHdha2UgbG9ja3MuCkBAIC0zMDEyLDEyICszMTkzLDEzIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIG5vdGVOZXR3b3JrQWN0aXZpdHlMb2NrZWQoaW50IHR5cGUsIGxvbmcgZGVsdGEpIHsKLSAgICAgICAgICAgIGlmIChtTmV0d29ya0FjdGl2aXR5Q291bnRlcnMgPT0gbnVsbCkgeworICAgICAgICB2b2lkIG5vdGVOZXR3b3JrQWN0aXZpdHlMb2NrZWQoaW50IHR5cGUsIGxvbmcgZGVsdGFCeXRlcywgbG9uZyBkZWx0YVBhY2tldHMpIHsKKyAgICAgICAgICAgIGlmIChtTmV0d29ya0J5dGVBY3Rpdml0eUNvdW50ZXJzID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBpbml0TmV0d29ya0FjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodHlwZSA+PSAwICYmIHR5cGUgPCBOVU1fTkVUV09SS19BQ1RJVklUWV9UWVBFUykgewotICAgICAgICAgICAgICAgIG1OZXR3b3JrQWN0aXZpdHlDb3VudGVyc1t0eXBlXS5hZGRDb3VudExvY2tlZChkZWx0YSk7CisgICAgICAgICAgICAgICAgbU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVyc1t0eXBlXS5hZGRDb3VudExvY2tlZChkZWx0YUJ5dGVzKTsKKyAgICAgICAgICAgICAgICBtTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnNbdHlwZV0uYWRkQ291bnRMb2NrZWQoZGVsdGFQYWNrZXRzKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIlVua25vd24gbmV0d29yayBhY3Rpdml0eSB0eXBlICIgKyB0eXBlICsgIiB3YXMgc3BlY2lmaWVkLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGhyb3dhYmxlKCkpOwpAQCAtMzAyNiwyMyArMzIwOCwzNSBAQAogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXR3b3JrQWN0aXZpdHkoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzICE9IG51bGw7CisgICAgICAgICAgICByZXR1cm4gbU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVycyAhPSBudWxsOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBsb25nIGdldE5ldHdvcmtBY3Rpdml0eUNvdW50KGludCB0eXBlLCBpbnQgd2hpY2gpIHsKLSAgICAgICAgICAgIGlmIChtTmV0d29ya0FjdGl2aXR5Q291bnRlcnMgIT0gbnVsbCAmJiB0eXBlID49IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgdHlwZSA8IG1OZXR3b3JrQWN0aXZpdHlDb3VudGVycy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzW3R5cGVdLmdldENvdW50TG9ja2VkKHdoaWNoKTsKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0TmV0d29ya0FjdGl2aXR5Qnl0ZXMoaW50IHR5cGUsIGludCB3aGljaCkgeworICAgICAgICAgICAgaWYgKG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnMgIT0gbnVsbCAmJiB0eXBlID49IDAKKyAgICAgICAgICAgICAgICAgICAgJiYgdHlwZSA8IG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnNbdHlwZV0uZ2V0Q291bnRMb2NrZWQod2hpY2gpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgbG9uZyBnZXROZXR3b3JrQWN0aXZpdHlQYWNrZXRzKGludCB0eXBlLCBpbnQgd2hpY2gpIHsKKyAgICAgICAgICAgIGlmIChtTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnMgIT0gbnVsbCAmJiB0eXBlID49IDAKKyAgICAgICAgICAgICAgICAgICAgJiYgdHlwZSA8IG1OZXR3b3JrUGFja2V0QWN0aXZpdHlDb3VudGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbU5ldHdvcmtQYWNrZXRBY3Rpdml0eUNvdW50ZXJzW3R5cGVdLmdldENvdW50TG9ja2VkKHdoaWNoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGluaXROZXR3b3JrQWN0aXZpdHlMb2NrZWQoKSB7Ci0gICAgICAgICAgICBtTmV0d29ya0FjdGl2aXR5Q291bnRlcnMgPSBuZXcgTG9uZ1NhbXBsaW5nQ291bnRlcltOVU1fTkVUV09SS19BQ1RJVklUWV9UWVBFU107CisgICAgICAgICAgICBtTmV0d29ya0J5dGVBY3Rpdml0eUNvdW50ZXJzID0gbmV3IExvbmdTYW1wbGluZ0NvdW50ZXJbTlVNX05FVFdPUktfQUNUSVZJVFlfVFlQRVNdOworICAgICAgICAgICAgbU5ldHdvcmtQYWNrZXRBY3Rpdml0eUNvdW50ZXJzID0gbmV3IExvbmdTYW1wbGluZ0NvdW50ZXJbTlVNX05FVFdPUktfQUNUSVZJVFlfVFlQRVNdOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTkVUV09SS19BQ1RJVklUWV9UWVBFUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzW2ldID0gbmV3IExvbmdTYW1wbGluZ0NvdW50ZXIobVVucGx1Z2dhYmxlcyk7CisgICAgICAgICAgICAgICAgbU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVyc1tpXSA9IG5ldyBMb25nU2FtcGxpbmdDb3VudGVyKG1VbnBsdWdnYWJsZXMpOworICAgICAgICAgICAgICAgIG1OZXR3b3JrUGFja2V0QWN0aXZpdHlDb3VudGVyc1tpXSA9IG5ldyBMb25nU2FtcGxpbmdDb3VudGVyKG1VbnBsdWdnYWJsZXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTMxMDMsOSArMzI5NywxMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG1OZXR3b3JrQWN0aXZpdHlDb3VudGVycyAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAobU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVycyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTkVUV09SS19BQ1RJVklUWV9UWVBFUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrQWN0aXZpdHlDb3VudGVyc1tpXS5yZXNldChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnNbaV0ucmVzZXQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBtTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnNbaV0ucmVzZXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMzIwNCw5ICszMzk5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlckFjdGl2aXR5Q291bnRlcnNbaV0uZGV0YWNoKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1OZXR3b3JrQWN0aXZpdHlDb3VudGVycyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9ORVRXT1JLX0FDVElWSVRZX1RZUEVTOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrQWN0aXZpdHlDb3VudGVyc1tpXS5kZXRhY2goKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnNbaV0uZGV0YWNoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnNbaV0uZGV0YWNoKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMzA3LDEwICszNTAzLDExIEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG91dC53cml0ZUludCgwKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtTmV0d29ya0FjdGl2aXR5Q291bnRlcnMgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG91dC53cml0ZUludCgxKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9ORVRXT1JLX0FDVElWSVRZX1RZUEVTOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgbU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzW2ldLndyaXRlVG9QYXJjZWwob3V0KTsKKyAgICAgICAgICAgICAgICAgICAgbU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVyc1tpXS53cml0ZVRvUGFyY2VsKG91dCk7CisgICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrUGFja2V0QWN0aXZpdHlDb3VudGVyc1tpXS53cml0ZVRvUGFyY2VsKG91dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoMCk7CkBAIC0zNDI4LDEyICszNjI1LDE2IEBACiAgICAgICAgICAgICAgICAgbVVzZXJBY3Rpdml0eUNvdW50ZXJzID0gbnVsbDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpbi5yZWFkSW50KCkgIT0gMCkgewotICAgICAgICAgICAgICAgIG1OZXR3b3JrQWN0aXZpdHlDb3VudGVycyA9IG5ldyBMb25nU2FtcGxpbmdDb3VudGVyW05VTV9ORVRXT1JLX0FDVElWSVRZX1RZUEVTXTsKKyAgICAgICAgICAgICAgICBtTmV0d29ya0J5dGVBY3Rpdml0eUNvdW50ZXJzID0gbmV3IExvbmdTYW1wbGluZ0NvdW50ZXJbTlVNX05FVFdPUktfQUNUSVZJVFlfVFlQRVNdOworICAgICAgICAgICAgICAgIG1OZXR3b3JrUGFja2V0QWN0aXZpdHlDb3VudGVycworICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgTG9uZ1NhbXBsaW5nQ291bnRlcltOVU1fTkVUV09SS19BQ1RJVklUWV9UWVBFU107CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTkVUV09SS19BQ1RJVklUWV9UWVBFUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrQWN0aXZpdHlDb3VudGVyc1tpXSA9IG5ldyBMb25nU2FtcGxpbmdDb3VudGVyKG1VbnBsdWdnYWJsZXMsIGluKTsKKyAgICAgICAgICAgICAgICAgICAgbU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVyc1tpXSA9IG5ldyBMb25nU2FtcGxpbmdDb3VudGVyKG1VbnBsdWdnYWJsZXMsIGluKTsKKyAgICAgICAgICAgICAgICAgICAgbU5ldHdvcmtQYWNrZXRBY3Rpdml0eUNvdW50ZXJzW2ldID0gbmV3IExvbmdTYW1wbGluZ0NvdW50ZXIobVVucGx1Z2dhYmxlcywgaW4pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtTmV0d29ya0J5dGVBY3Rpdml0eUNvdW50ZXJzID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnMgPSBudWxsOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTQ1MTAsNyArNDcxMSw4IEBACiAgICAgICAgICAgICBtUGhvbmVEYXRhQ29ubmVjdGlvbnNUaW1lcltpXSA9IG5ldyBTdG9wd2F0Y2hUaW1lcihudWxsLCAtMzAwLWksIG51bGwsIG1VbnBsdWdnYWJsZXMpOwogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX05FVFdPUktfQUNUSVZJVFlfVFlQRVM7IGkrKykgewotICAgICAgICAgICAgbU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzW2ldID0gbmV3IExvbmdTYW1wbGluZ0NvdW50ZXIobVVucGx1Z2dhYmxlcyk7CisgICAgICAgICAgICBtTmV0d29ya0J5dGVBY3Rpdml0eUNvdW50ZXJzW2ldID0gbmV3IExvbmdTYW1wbGluZ0NvdW50ZXIobVVucGx1Z2dhYmxlcyk7CisgICAgICAgICAgICBtTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnNbaV0gPSBuZXcgTG9uZ1NhbXBsaW5nQ291bnRlcihtVW5wbHVnZ2FibGVzKTsKICAgICAgICAgfQogICAgICAgICBtV2lmaU9uVGltZXIgPSBuZXcgU3RvcHdhdGNoVGltZXIobnVsbCwgLTMsIG51bGwsIG1VbnBsdWdnYWJsZXMpOwogICAgICAgICBtR2xvYmFsV2lmaVJ1bm5pbmdUaW1lciA9IG5ldyBTdG9wd2F0Y2hUaW1lcihudWxsLCAtNCwgbnVsbCwgbVVucGx1Z2dhYmxlcyk7CkBAIC00NTY4LDcgKzQ3NzAsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIGdldE5leHRPbGRIaXN0b3J5TG9ja2VkKEhpc3RvcnlJdGVtIG91dCkgewogICAgICAgICBib29sZWFuIGVuZCA9IG1IaXN0b3J5QnVmZmVyLmRhdGFQb3NpdGlvbigpID49IG1IaXN0b3J5QnVmZmVyLmRhdGFTaXplKCk7CiAgICAgICAgIGlmICghZW5kKSB7Ci0gICAgICAgICAgICBtSGlzdG9yeVJlYWRUbXAucmVhZERlbHRhKG1IaXN0b3J5QnVmZmVyKTsKKyAgICAgICAgICAgIHJlYWRIaXN0b3J5RGVsdGEobUhpc3RvcnlCdWZmZXIsIG1IaXN0b3J5UmVhZFRtcCk7CiAgICAgICAgICAgICBtUmVhZE92ZXJmbG93IHw9IG1IaXN0b3J5UmVhZFRtcC5jbWQgPT0gSGlzdG9yeUl0ZW0uQ01EX09WRVJGTE9XOwogICAgICAgICB9CiAgICAgICAgIEhpc3RvcnlJdGVtIGN1ciA9IG1IaXN0b3J5SXRlcmF0b3I7CkBAIC00NTg4LDkgKzQ3OTAsOSBAQAogICAgICAgICAgICAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IEZhc3RQcmludFdyaXRlcihuZXcgTG9nV3JpdGVyKGFuZHJvaWQudXRpbC5Mb2cuV0FSTiwgVEFHKSk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiSGlzdG9yaWVzIGRpZmZlciEiKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCJPbGQgaGlzdG9yeToiKTsKLSAgICAgICAgICAgICAgICAobmV3IEhpc3RvcnlQcmludGVyKCkpLnByaW50TmV4dEl0ZW0ocHcsIG91dCwgbm93KTsKKyAgICAgICAgICAgICAgICAobmV3IEhpc3RvcnlQcmludGVyKCkpLnByaW50TmV4dEl0ZW0ocHcsIG91dCwgbm93LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiTmV3IGhpc3Rvcnk6Iik7Ci0gICAgICAgICAgICAgICAgKG5ldyBIaXN0b3J5UHJpbnRlcigpKS5wcmludE5leHRJdGVtKHB3LCBtSGlzdG9yeVJlYWRUbXAsIG5vdyk7CisgICAgICAgICAgICAgICAgKG5ldyBIaXN0b3J5UHJpbnRlcigpKS5wcmludE5leHRJdGVtKHB3LCBtSGlzdG9yeVJlYWRUbXAsIG5vdywgZmFsc2UpOwogICAgICAgICAgICAgICAgIHB3LmZsdXNoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ2MjQsNyArNDgyNiw3IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBvdXQucmVhZERlbHRhKG1IaXN0b3J5QnVmZmVyKTsKKyAgICAgICAgcmVhZEhpc3RvcnlEZWx0YShtSGlzdG9yeUJ1ZmZlciwgb3V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00Njg5LDcgKzQ4OTEsOCBAQAogICAgICAgICAgICAgbVBob25lRGF0YUNvbm5lY3Rpb25zVGltZXJbaV0ucmVzZXQodGhpcywgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX05FVFdPUktfQUNUSVZJVFlfVFlQRVM7IGkrKykgewotICAgICAgICAgICAgbU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzW2ldLnJlc2V0KGZhbHNlKTsKKyAgICAgICAgICAgIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnNbaV0ucmVzZXQoZmFsc2UpOworICAgICAgICAgICAgbU5ldHdvcmtQYWNrZXRBY3Rpdml0eUNvdW50ZXJzW2ldLnJlc2V0KGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBtV2lmaU9uVGltZXIucmVzZXQodGhpcywgZmFsc2UpOwogICAgICAgICBtR2xvYmFsV2lmaVJ1bm5pbmdUaW1lci5yZXNldCh0aGlzLCBmYWxzZSk7CkBAIC00NzQzLDYgKzQ5NDYsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHB1bGxQZW5kaW5nU3RhdGVVcGRhdGVzTG9ja2VkKCkgeworICAgICAgICB1cGRhdGVLZXJuZWxXYWtlbG9ja3NMb2NrZWQoKTsKKyAgICAgICAgdXBkYXRlTmV0d29ya0FjdGl2aXR5TG9ja2VkKCk7CisgICAgfQorCiAgICAgdm9pZCBzZXRPbkJhdHRlcnlMb2NrZWQoYm9vbGVhbiBvbkJhdHRlcnksIGludCBvbGRTdGF0dXMsIGludCBsZXZlbCkgewogICAgICAgICBib29sZWFuIGRvV3JpdGUgPSBmYWxzZTsKICAgICAgICAgTWVzc2FnZSBtID0gbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfUkVQT1JUX1BPV0VSX0NIQU5HRSk7CkBAIC00NzY1LDggKzQ5NzMsNyBAQAogICAgICAgICAgICAgICAgIHJlc2V0QWxsU3RhdHNMb2NrZWQoKTsKICAgICAgICAgICAgICAgICBtRGlzY2hhcmdlU3RhcnRMZXZlbCA9IGxldmVsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdXBkYXRlS2VybmVsV2FrZWxvY2tzTG9ja2VkKCk7Ci0gICAgICAgICAgICB1cGRhdGVOZXR3b3JrQWN0aXZpdHlMb2NrZWQoKTsKKyAgICAgICAgICAgIHB1bGxQZW5kaW5nU3RhdGVVcGRhdGVzTG9ja2VkKCk7CiAgICAgICAgICAgICBtSGlzdG9yeUN1ci5iYXR0ZXJ5TGV2ZWwgPSAoYnl0ZSlsZXZlbDsKICAgICAgICAgICAgIG1IaXN0b3J5Q3VyLnN0YXRlcyAmPSB+SGlzdG9yeUl0ZW0uU1RBVEVfQkFUVEVSWV9QTFVHR0VEX0ZMQUc7CiAgICAgICAgICAgICBpZiAoREVCVUdfSElTVE9SWSkgU2xvZy52KFRBRywgIkJhdHRlcnkgdW5wbHVnZ2VkIHRvOiAiCkBAIC00Nzg4LDggKzQ5OTUsNyBAQAogICAgICAgICAgICAgbURpc2NoYXJnZUFtb3VudFNjcmVlbk9mZiA9IDA7CiAgICAgICAgICAgICBkb1VucGx1Z0xvY2tlZChyZWFsdGltZSwgbVVucGx1Z2dlZEJhdHRlcnlVcHRpbWUsIG1VbnBsdWdnZWRCYXR0ZXJ5UmVhbHRpbWUpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXBkYXRlS2VybmVsV2FrZWxvY2tzTG9ja2VkKCk7Ci0gICAgICAgICAgICB1cGRhdGVOZXR3b3JrQWN0aXZpdHlMb2NrZWQoKTsKKyAgICAgICAgICAgIHB1bGxQZW5kaW5nU3RhdGVVcGRhdGVzTG9ja2VkKCk7CiAgICAgICAgICAgICBtSGlzdG9yeUN1ci5iYXR0ZXJ5TGV2ZWwgPSAoYnl0ZSlsZXZlbDsKICAgICAgICAgICAgIG1IaXN0b3J5Q3VyLnN0YXRlcyB8PSBIaXN0b3J5SXRlbS5TVEFURV9CQVRURVJZX1BMVUdHRURfRkxBRzsKICAgICAgICAgICAgIGlmIChERUJVR19ISVNUT1JZKSBTbG9nLnYoVEFHLCAiQmF0dGVyeSBwbHVnZ2VkIHRvOiAiCkBAIC00OTUyLDE4ICs1MTU4LDI4IEBACiAgICAgICAgICAgICBmaW5hbCBVaWQgdSA9IGdldFVpZFN0YXRzTG9ja2VkKGVudHJ5LnVpZCk7CiAKICAgICAgICAgICAgIGlmIChtTW9iaWxlSWZhY2VzLmNvbnRhaW5zKGVudHJ5LmlmYWNlKSkgewotICAgICAgICAgICAgICAgIHUubm90ZU5ldHdvcmtBY3Rpdml0eUxvY2tlZChORVRXT1JLX01PQklMRV9SWF9CWVRFUywgZW50cnkucnhCeXRlcyk7Ci0gICAgICAgICAgICAgICAgdS5ub3RlTmV0d29ya0FjdGl2aXR5TG9ja2VkKE5FVFdPUktfTU9CSUxFX1RYX0JZVEVTLCBlbnRyeS50eEJ5dGVzKTsKKyAgICAgICAgICAgICAgICB1Lm5vdGVOZXR3b3JrQWN0aXZpdHlMb2NrZWQoTkVUV09SS19NT0JJTEVfUlhfREFUQSwgZW50cnkucnhCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJ4UGFja2V0cyk7CisgICAgICAgICAgICAgICAgdS5ub3RlTmV0d29ya0FjdGl2aXR5TG9ja2VkKE5FVFdPUktfTU9CSUxFX1RYX0RBVEEsIGVudHJ5LnR4Qnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS50eFBhY2tldHMpOwogCi0gICAgICAgICAgICAgICAgbU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzW05FVFdPUktfTU9CSUxFX1JYX0JZVEVTXS5hZGRDb3VudExvY2tlZChlbnRyeS5yeEJ5dGVzKTsKLSAgICAgICAgICAgICAgICBtTmV0d29ya0FjdGl2aXR5Q291bnRlcnNbTkVUV09SS19NT0JJTEVfVFhfQllURVNdLmFkZENvdW50TG9ja2VkKGVudHJ5LnR4Qnl0ZXMpOworICAgICAgICAgICAgICAgIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnNbTkVUV09SS19NT0JJTEVfUlhfREFUQV0uYWRkQ291bnRMb2NrZWQoZW50cnkucnhCeXRlcyk7CisgICAgICAgICAgICAgICAgbU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVyc1tORVRXT1JLX01PQklMRV9UWF9EQVRBXS5hZGRDb3VudExvY2tlZChlbnRyeS50eEJ5dGVzKTsKKyAgICAgICAgICAgICAgICBtTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnNbTkVUV09SS19NT0JJTEVfUlhfREFUQV0uYWRkQ291bnRMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5yeFBhY2tldHMpOworICAgICAgICAgICAgICAgIG1OZXR3b3JrUGFja2V0QWN0aXZpdHlDb3VudGVyc1tORVRXT1JLX01PQklMRV9UWF9EQVRBXS5hZGRDb3VudExvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnR4UGFja2V0cyk7CiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAobVdpZmlJZmFjZXMuY29udGFpbnMoZW50cnkuaWZhY2UpKSB7Ci0gICAgICAgICAgICAgICAgdS5ub3RlTmV0d29ya0FjdGl2aXR5TG9ja2VkKE5FVFdPUktfV0lGSV9SWF9CWVRFUywgZW50cnkucnhCeXRlcyk7Ci0gICAgICAgICAgICAgICAgdS5ub3RlTmV0d29ya0FjdGl2aXR5TG9ja2VkKE5FVFdPUktfV0lGSV9UWF9CWVRFUywgZW50cnkudHhCeXRlcyk7CisgICAgICAgICAgICAgICAgdS5ub3RlTmV0d29ya0FjdGl2aXR5TG9ja2VkKE5FVFdPUktfV0lGSV9SWF9EQVRBLCBlbnRyeS5yeEJ5dGVzLCBlbnRyeS5yeFBhY2tldHMpOworICAgICAgICAgICAgICAgIHUubm90ZU5ldHdvcmtBY3Rpdml0eUxvY2tlZChORVRXT1JLX1dJRklfVFhfREFUQSwgZW50cnkudHhCeXRlcywgZW50cnkudHhQYWNrZXRzKTsKIAotICAgICAgICAgICAgICAgIG1OZXR3b3JrQWN0aXZpdHlDb3VudGVyc1tORVRXT1JLX1dJRklfUlhfQllURVNdLmFkZENvdW50TG9ja2VkKGVudHJ5LnJ4Qnl0ZXMpOwotICAgICAgICAgICAgICAgIG1OZXR3b3JrQWN0aXZpdHlDb3VudGVyc1tORVRXT1JLX1dJRklfVFhfQllURVNdLmFkZENvdW50TG9ja2VkKGVudHJ5LnR4Qnl0ZXMpOworICAgICAgICAgICAgICAgIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnNbTkVUV09SS19XSUZJX1JYX0RBVEFdLmFkZENvdW50TG9ja2VkKGVudHJ5LnJ4Qnl0ZXMpOworICAgICAgICAgICAgICAgIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnNbTkVUV09SS19XSUZJX1RYX0RBVEFdLmFkZENvdW50TG9ja2VkKGVudHJ5LnR4Qnl0ZXMpOworICAgICAgICAgICAgICAgIG1OZXR3b3JrUGFja2V0QWN0aXZpdHlDb3VudGVyc1tORVRXT1JLX1dJRklfUlhfREFUQV0uYWRkQ291bnRMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5yeFBhY2tldHMpOworICAgICAgICAgICAgICAgIG1OZXR3b3JrUGFja2V0QWN0aXZpdHlDb3VudGVyc1tORVRXT1JLX1dJRklfVFhfREFUQV0uYWRkQ291bnRMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS50eFBhY2tldHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNTUzOCw3ICs1NzU0LDggQEAKICAgICAgICAgICAgIG1QaG9uZURhdGFDb25uZWN0aW9uc1RpbWVyW2ldLnJlYWRTdW1tYXJ5RnJvbVBhcmNlbExvY2tlZChpbik7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTkVUV09SS19BQ1RJVklUWV9UWVBFUzsgaSsrKSB7Ci0gICAgICAgICAgICBtTmV0d29ya0FjdGl2aXR5Q291bnRlcnNbaV0ucmVhZFN1bW1hcnlGcm9tUGFyY2VsTG9ja2VkKGluKTsKKyAgICAgICAgICAgIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnNbaV0ucmVhZFN1bW1hcnlGcm9tUGFyY2VsTG9ja2VkKGluKTsKKyAgICAgICAgICAgIG1OZXR3b3JrUGFja2V0QWN0aXZpdHlDb3VudGVyc1tpXS5yZWFkU3VtbWFyeUZyb21QYXJjZWxMb2NrZWQoaW4pOwogICAgICAgICB9CiAgICAgICAgIG1XaWZpT24gPSBmYWxzZTsKICAgICAgICAgbVdpZmlPblRpbWVyLnJlYWRTdW1tYXJ5RnJvbVBhcmNlbExvY2tlZChpbik7CkBAIC01NjE5LDExICs1ODM2LDEyIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpbi5yZWFkSW50KCkgIT0gMCkgewotICAgICAgICAgICAgICAgIGlmICh1Lm1OZXR3b3JrQWN0aXZpdHlDb3VudGVycyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKHUubU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVycyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHUuaW5pdE5ldHdvcmtBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9ORVRXT1JLX0FDVElWSVRZX1RZUEVTOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdS5tTmV0d29ya0FjdGl2aXR5Q291bnRlcnNbaV0ucmVhZFN1bW1hcnlGcm9tUGFyY2VsTG9ja2VkKGluKTsKKyAgICAgICAgICAgICAgICAgICAgdS5tTmV0d29ya0J5dGVBY3Rpdml0eUNvdW50ZXJzW2ldLnJlYWRTdW1tYXJ5RnJvbVBhcmNlbExvY2tlZChpbik7CisgICAgICAgICAgICAgICAgICAgIHUubU5ldHdvcmtQYWNrZXRBY3Rpdml0eUNvdW50ZXJzW2ldLnJlYWRTdW1tYXJ5RnJvbVBhcmNlbExvY2tlZChpbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC01NzU4LDcgKzU5NzYsOCBAQAogICAgICAgICAgICAgbVBob25lRGF0YUNvbm5lY3Rpb25zVGltZXJbaV0ud3JpdGVTdW1tYXJ5RnJvbVBhcmNlbExvY2tlZChvdXQsIE5PV1JFQUwpOwogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX05FVFdPUktfQUNUSVZJVFlfVFlQRVM7IGkrKykgewotICAgICAgICAgICAgbU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzW2ldLndyaXRlU3VtbWFyeUZyb21QYXJjZWxMb2NrZWQob3V0KTsKKyAgICAgICAgICAgIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnNbaV0ud3JpdGVTdW1tYXJ5RnJvbVBhcmNlbExvY2tlZChvdXQpOworICAgICAgICAgICAgbU5ldHdvcmtQYWNrZXRBY3Rpdml0eUNvdW50ZXJzW2ldLndyaXRlU3VtbWFyeUZyb21QYXJjZWxMb2NrZWQob3V0KTsKICAgICAgICAgfQogICAgICAgICBtV2lmaU9uVGltZXIud3JpdGVTdW1tYXJ5RnJvbVBhcmNlbExvY2tlZChvdXQsIE5PV1JFQUwpOwogICAgICAgICBtR2xvYmFsV2lmaVJ1bm5pbmdUaW1lci53cml0ZVN1bW1hcnlGcm9tUGFyY2VsTG9ja2VkKG91dCwgTk9XUkVBTCk7CkBAIC01ODQ5LDEyICs2MDY4LDEzIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodS5tTmV0d29ya0FjdGl2aXR5Q291bnRlcnMgPT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKHUubU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVycyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KDApOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoMSk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTkVUV09SS19BQ1RJVklUWV9UWVBFUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHUubU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzW2ldLndyaXRlU3VtbWFyeUZyb21QYXJjZWxMb2NrZWQob3V0KTsKKyAgICAgICAgICAgICAgICAgICAgdS5tTmV0d29ya0J5dGVBY3Rpdml0eUNvdW50ZXJzW2ldLndyaXRlU3VtbWFyeUZyb21QYXJjZWxMb2NrZWQob3V0KTsKKyAgICAgICAgICAgICAgICAgICAgdS5tTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnNbaV0ud3JpdGVTdW1tYXJ5RnJvbVBhcmNlbExvY2tlZChvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtNTk4OSw3ICs2MjA5LDggQEAKICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbVVucGx1Z2dhYmxlcywgaW4pOwogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX05FVFdPUktfQUNUSVZJVFlfVFlQRVM7IGkrKykgewotICAgICAgICAgICAgbU5ldHdvcmtBY3Rpdml0eUNvdW50ZXJzW2ldID0gbmV3IExvbmdTYW1wbGluZ0NvdW50ZXIobVVucGx1Z2dhYmxlcywgaW4pOworICAgICAgICAgICAgbU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVyc1tpXSA9IG5ldyBMb25nU2FtcGxpbmdDb3VudGVyKG1VbnBsdWdnYWJsZXMsIGluKTsKKyAgICAgICAgICAgIG1OZXR3b3JrUGFja2V0QWN0aXZpdHlDb3VudGVyc1tpXSA9IG5ldyBMb25nU2FtcGxpbmdDb3VudGVyKG1VbnBsdWdnYWJsZXMsIGluKTsKICAgICAgICAgfQogICAgICAgICBtV2lmaU9uID0gZmFsc2U7CiAgICAgICAgIG1XaWZpT25UaW1lciA9IG5ldyBTdG9wd2F0Y2hUaW1lcihudWxsLCAtMiwgbnVsbCwgbVVucGx1Z2dhYmxlcywgaW4pOwpAQCAtNjA3MCw4ICs2MjkxLDcgQEAKICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICB2b2lkIHdyaXRlVG9QYXJjZWxMb2NrZWQoUGFyY2VsIG91dCwgYm9vbGVhbiBpbmNsVWlkcywgaW50IGZsYWdzKSB7CiAgICAgICAgIC8vIE5lZWQgdG8gdXBkYXRlIHdpdGggY3VycmVudCBrZXJuZWwgd2FrZSBsb2NrIGNvdW50cy4KLSAgICAgICAgdXBkYXRlS2VybmVsV2FrZWxvY2tzTG9ja2VkKCk7Ci0gICAgICAgIHVwZGF0ZU5ldHdvcmtBY3Rpdml0eUxvY2tlZCgpOworICAgICAgICBwdWxsUGVuZGluZ1N0YXRlVXBkYXRlc0xvY2tlZCgpOwogCiAgICAgICAgIGZpbmFsIGxvbmcgdVNlY1VwdGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpICogMTAwMDsKICAgICAgICAgZmluYWwgbG9uZyB1U2VjUmVhbHRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAqIDEwMDA7CkBAIC02MDk5LDcgKzYzMTksOCBAQAogICAgICAgICAgICAgbVBob25lRGF0YUNvbm5lY3Rpb25zVGltZXJbaV0ud3JpdGVUb1BhcmNlbChvdXQsIGJhdHRlcnlSZWFsdGltZSk7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTkVUV09SS19BQ1RJVklUWV9UWVBFUzsgaSsrKSB7Ci0gICAgICAgICAgICBtTmV0d29ya0FjdGl2aXR5Q291bnRlcnNbaV0ud3JpdGVUb1BhcmNlbChvdXQpOworICAgICAgICAgICAgbU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVyc1tpXS53cml0ZVRvUGFyY2VsKG91dCk7CisgICAgICAgICAgICBtTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnNbaV0ud3JpdGVUb1BhcmNlbChvdXQpOwogICAgICAgICB9CiAgICAgICAgIG1XaWZpT25UaW1lci53cml0ZVRvUGFyY2VsKG91dCwgYmF0dGVyeVJlYWx0aW1lKTsKICAgICAgICAgbUdsb2JhbFdpZmlSdW5uaW5nVGltZXIud3JpdGVUb1BhcmNlbChvdXQsIGJhdHRlcnlSZWFsdGltZSk7CkBAIC02MTc1LDExICs2Mzk2LDEwIEBACiAKICAgICBwdWJsaWMgdm9pZCBwcmVwYXJlRm9yRHVtcExvY2tlZCgpIHsKICAgICAgICAgLy8gTmVlZCB0byByZXRyaWV2ZSBjdXJyZW50IGtlcm5lbCB3YWtlIGxvY2sgc3RhdHMgYmVmb3JlIHByaW50aW5nLgotICAgICAgICB1cGRhdGVLZXJuZWxXYWtlbG9ja3NMb2NrZWQoKTsKLSAgICAgICAgdXBkYXRlTmV0d29ya0FjdGl2aXR5TG9ja2VkKCk7CisgICAgICAgIHB1bGxQZW5kaW5nU3RhdGVVcGRhdGVzTG9ja2VkKCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZHVtcExvY2tlZChQcmludFdyaXRlciBwdywgYm9vbGVhbiBpc1VucGx1Z2dlZE9ubHksIGludCByZXFVaWQpIHsKKyAgICBwdWJsaWMgdm9pZCBkdW1wTG9ja2VkKENvbnRleHQgY29udGV4dCwgUHJpbnRXcml0ZXIgcHcsIGJvb2xlYW4gaXNVbnBsdWdnZWRPbmx5LCBpbnQgcmVxVWlkKSB7CiAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgUHJpbnRlciBwciA9IG5ldyBQcmludFdyaXRlclByaW50ZXIocHcpOwogICAgICAgICAgICAgcHIucHJpbnRsbigiKioqIFNjcmVlbiB0aW1lcjoiKTsKQEAgLTYyMDksNiArNjQyOSw2IEBACiAgICAgICAgICAgICBwci5wcmludGxuKCIqKiogQmx1ZXRvb3RoIHRpbWVyOiIpOwogICAgICAgICAgICAgbUJsdWV0b290aE9uVGltZXIubG9nU3RhdGUocHIsICIgICIpOwogICAgICAgICB9Ci0gICAgICAgIHN1cGVyLmR1bXBMb2NrZWQocHcsIGlzVW5wbHVnZ2VkT25seSwgcmVxVWlkKTsKKyAgICAgICAgc3VwZXIuZHVtcExvY2tlZChjb250ZXh0LCBwdywgaXNVbnBsdWdnZWRPbmx5LCByZXFVaWQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9XcmFwcGVySW5pdC5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL1dyYXBwZXJJbml0LmphdmEKaW5kZXggYzZiM2U3Yy4uMTc2NmY3YiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL1dyYXBwZXJJbml0LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL1dyYXBwZXJJbml0LmphdmEKQEAgLTI1LDcgKzI1LDYgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogCiBpbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOwotaW1wb3J0IGxpYmNvcmUuaW8uTGliY29yZTsKIAogaW1wb3J0IGRhbHZpay5zeXN0ZW0uWnlnb3RlOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvWnlnb3RlSW5pdC5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL1p5Z290ZUluaXQuamF2YQppbmRleCA1NWQ1NTEzLi45ZGM5MTE2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvWnlnb3RlSW5pdC5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9aeWdvdGVJbml0LmphdmEKQEAgLTQ5NSw2ICs0OTUsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc3RhcnRTeXN0ZW1TZXJ2ZXIoKQogICAgICAgICAgICAgdGhyb3dzIE1ldGhvZEFuZEFyZ3NDYWxsZXIsIFJ1bnRpbWVFeGNlcHRpb24gewogICAgICAgICBsb25nIGNhcGFiaWxpdGllcyA9IHBvc2l4Q2FwYWJpbGl0aWVzQXNCaXRzKAorICAgICAgICAgICAgT3NDb25zdGFudHMuQ0FQX0JMT0NLX1NVU1BFTkQsCiAgICAgICAgICAgICBPc0NvbnN0YW50cy5DQVBfS0lMTCwKICAgICAgICAgICAgIE9zQ29uc3RhbnRzLkNBUF9ORVRfQURNSU4sCiAgICAgICAgICAgICBPc0NvbnN0YW50cy5DQVBfTkVUX0JJTkRfU0VSVklDRSwKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9wcmVmZXJlbmNlL1llc05vUHJlZmVyZW5jZS5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ByZWZlcmVuY2UvWWVzTm9QcmVmZXJlbmNlLmphdmEKaW5kZXggY2Y2OGE1OC4uN2FiZjQxNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ByZWZlcmVuY2UvWWVzTm9QcmVmZXJlbmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ByZWZlcmVuY2UvWWVzTm9QcmVmZXJlbmNlLmphdmEKQEAgLTMxLDE1ICszMSwxOSBAQAogICovCiBwdWJsaWMgY2xhc3MgWWVzTm9QcmVmZXJlbmNlIGV4dGVuZHMgRGlhbG9nUHJlZmVyZW5jZSB7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1XYXNQb3NpdGl2ZVJlc3VsdDsKLSAgICAKLSAgICBwdWJsaWMgWWVzTm9QcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKworICAgIHB1YmxpYyBZZXNOb1ByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisgICAgfQorCisgICAgcHVibGljIFllc05vUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOwogICAgIH0KIAogICAgIHB1YmxpYyBZZXNOb1ByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLnllc05vUHJlZmVyZW5jZVN0eWxlKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWWVzTm9QcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCkgewogICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0FjdGlvbkJhclBvbGljeS5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvQWN0aW9uQmFyUG9saWN5LmphdmEKaW5kZXggMjUwODZjNS4uYmVlNTlkYyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvQWN0aW9uQmFyUG9saWN5LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvQWN0aW9uQmFyUG9saWN5LmphdmEKQEAgLTE5LDExICsxOSw5IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0NvbmZpZ3VyYXRpb247CiAKIC8qKgogICogQWxsb3dzIGNvbXBvbmVudHMgdG8gcXVlcnkgZm9yIHZhcmlvdXMgY29uZmlndXJhdGlvbiBwb2xpY3kgZGVjaXNpb25zCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9JSW5wdXRNZXRob2RNYW5hZ2VyLmFpZGwgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9JSW5wdXRNZXRob2RNYW5hZ2VyLmFpZGwKaW5kZXggMTJjZWQ2OC4uMzI1YTI3ZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvSUlucHV0TWV0aG9kTWFuYWdlci5haWRsCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0lJbnB1dE1ldGhvZE1hbmFnZXIuYWlkbApAQCAtNzQsNCArNzQsNiBAQAogICAgIGJvb2xlYW4gc2hvdWxkT2ZmZXJTd2l0Y2hpbmdUb05leHRJbnB1dE1ldGhvZChpbiBJQmluZGVyIHRva2VuKTsKICAgICBib29sZWFuIHNldElucHV0TWV0aG9kRW5hYmxlZChTdHJpbmcgaWQsIGJvb2xlYW4gZW5hYmxlZCk7CiAgICAgb25ld2F5IHZvaWQgc2V0QWRkaXRpb25hbElucHV0TWV0aG9kU3VidHlwZXMoU3RyaW5nIGlkLCBpbiBJbnB1dE1ldGhvZFN1YnR5cGVbXSBzdWJ0eXBlcyk7CisgICAgaW50IGdldElucHV0TWV0aG9kV2luZG93VmlzaWJsZUhlaWdodCgpOworICAgIG9uZXdheSB2b2lkIG5vdGlmeVRleHRDb21taXR0ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L1JvdGF0aW9uUG9saWN5LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9Sb3RhdGlvblBvbGljeS5qYXZhCmluZGV4IDcwZTJiZmMuLjlmZWZkMDAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L1JvdGF0aW9uUG9saWN5LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvUm90YXRpb25Qb2xpY3kuamF2YQpAQCAtMTgsMjQgKzE4LDMwIEBACiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyR2xvYmFsOwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKKwogLyoqCiAgKiBQcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIGZvciBjb25maWd1cmluZyB0aGUgZGlzcGxheSByb3RhdGlvbiBwb2xpY3kuCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBSb3RhdGlvblBvbGljeSB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJSb3RhdGlvblBvbGljeSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENVUlJFTlRfUk9UQVRJT04gPSAtMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTkFUVVJBTF9ST1RBVElPTiA9IFN1cmZhY2UuUk9UQVRJT05fMDsKIAogICAgIHByaXZhdGUgUm90YXRpb25Qb2xpY3koKSB7CiAgICAgfQpAQCAtNTYsMjMgKzYyLDMzIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIHJvdGF0aW9uLWxvY2sgdG9nZ2xlIGZlYXR1cmUKLSAgICAgKiBpbiB0aGUgc3lzdGVtIFVJIG9yIHN5c3RlbSBiYXIuCisgICAgICogUmV0dXJucyB0aGUgb3JpZW50YXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiBsb2NraW5nIHRoZSBvcmllbnRhdGlvbiBmcm9tIHN5c3RlbSBVSQorICAgICAqIHdpdGgge0BsaW5rICNzZXRSb3RhdGlvbkxvY2t9LgogICAgICAqCi0gICAgICogV2hlbiB0aGUgcm90YXRpb24tbG9jayB0b2dnbGUgaXMgc3VwcG9ydGVkLCB0aGUgImF1dG8tcm90YXRlIHNjcmVlbiIgb3B0aW9uIGluCi0gICAgICogRGlzcGxheSBzZXR0aW5ncyBzaG91bGQgYmUgaGlkZGVuLCBidXQgaXQgc2hvdWxkIHJlbWFpbiBhdmFpbGFibGUgaW4gQWNjZXNzaWJpbGl0eQotICAgICAqIHNldHRpbmdzLgorICAgICAqIElmIHRoZSBkZXZpY2Ugb25seSBzdXBwb3J0cyBsb2NraW5nIHRvIGl0cyBuYXR1cmFsIG9yaWVudGF0aW9uLCB0aGlzIHdpbGwgYmUgZWl0aGVyCisgICAgICogQ29uZmlndXJhdGlvbi5PUklFTlRBVElPTl9QT1JUUkFJVCBvciBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX0xBTkRTQ0FQRSwKKyAgICAgKiBvdGhlcndpc2UgQ29uZmlndXJhdGlvbi5PUklFTlRBVElPTl9VTkRFRklORUQgaWYgYW55IG9yaWVudGF0aW9uIGlzIGxvY2thYmxlLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1JvdGF0aW9uTG9ja1RvZ2dsZVN1cHBvcnRlZChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIGlzUm90YXRpb25TdXBwb3J0ZWQoY29udGV4dCkKLSAgICAgICAgICAgICAgICAmJiBjb250ZXh0LmdldFJlc291cmNlcygpLmdldENvbmZpZ3VyYXRpb24oKS5zbWFsbGVzdFNjcmVlbldpZHRoRHAgPj0gNjAwOworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFJvdGF0aW9uTG9ja09yaWVudGF0aW9uKENvbnRleHQgY29udGV4dCkgeworICAgICAgICBpZiAoIWFyZUFsbFJvdGF0aW9uc0FsbG93ZWQoY29udGV4dCkpIHsKKyAgICAgICAgICAgIGZpbmFsIFBvaW50IHNpemUgPSBuZXcgUG9pbnQoKTsKKyAgICAgICAgICAgIGZpbmFsIElXaW5kb3dNYW5hZ2VyIHdtID0gV2luZG93TWFuYWdlckdsb2JhbC5nZXRXaW5kb3dNYW5hZ2VyU2VydmljZSgpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB3bS5nZXRJbml0aWFsRGlzcGxheVNpemUoRGlzcGxheS5ERUZBVUxUX0RJU1BMQVksIHNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiBzaXplLnggPCBzaXplLnkgPworICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbi5PUklFTlRBVElPTl9QT1JUUkFJVCA6IENvbmZpZ3VyYXRpb24uT1JJRU5UQVRJT05fTEFORFNDQVBFOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJVbmFibGUgdG8gZ2V0IHRoZSBkaXNwbGF5IHNpemUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5PUklFTlRBVElPTl9VTkRFRklORUQ7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSByb3RhdGlvbi1sb2NrIHRvZ2dsZSBzaG91bGQgYmUgc2hvd24gaW4gdGhlIFVJLgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm90YXRpb24tbG9jayB0b2dnbGUgc2hvdWxkIGJlIHNob3duIGluIHN5c3RlbSBVSS4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSb3RhdGlvbkxvY2tUb2dnbGVWaXNpYmxlKENvbnRleHQgY29udGV4dCkgewotICAgICAgICByZXR1cm4gaXNSb3RhdGlvbkxvY2tUb2dnbGVTdXBwb3J0ZWQoY29udGV4dCkgJiYKKyAgICAgICAgcmV0dXJuIGlzUm90YXRpb25TdXBwb3J0ZWQoY29udGV4dCkgJiYKICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TeXN0ZW0uZ2V0SW50Rm9yVXNlcihjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU3lzdGVtLkhJREVfUk9UQVRJT05fTE9DS19UT0dHTEVfRk9SX0FDQ0VTU0lCSUxJVFksIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLlVTRVJfQ1VSUkVOVCkgPT0gMDsKQEAgLTg3LDUwICsxMDMsNDIgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHJvdGF0aW9uIGxvY2suCi0gICAgICoKLSAgICAgKiBTaG91bGQgYmUgdXNlZCBieSB0aGUgcm90YXRpb24gbG9jayB0b2dnbGUuCisgICAgICogRW5hYmxlcyBvciBkaXNhYmxlcyByb3RhdGlvbiBsb2NrIGZyb20gdGhlIHN5c3RlbSBVSSB0b2dnbGUuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFJvdGF0aW9uTG9jayhDb250ZXh0IGNvbnRleHQsIGZpbmFsIGJvb2xlYW4gZW5hYmxlZCkgewogICAgICAgICBTZXR0aW5ncy5TeXN0ZW0ucHV0SW50Rm9yVXNlcihjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAogICAgICAgICAgICAgICAgIFNldHRpbmdzLlN5c3RlbS5ISURFX1JPVEFUSU9OX0xPQ0tfVE9HR0xFX0ZPUl9BQ0NFU1NJQklMSVRZLCAwLAogICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUuVVNFUl9DVVJSRU5UKTsKIAotICAgICAgICBBc3luY1Rhc2suZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBJV2luZG93TWFuYWdlciB3bSA9IFdpbmRvd01hbmFnZXJHbG9iYWwuZ2V0V2luZG93TWFuYWdlclNlcnZpY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdtLmZyZWV6ZVJvdGF0aW9uKC0xKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdtLnRoYXdSb3RhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4YykgewotICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJVbmFibGUgdG8gc2F2ZSBhdXRvLXJvdGF0ZSBzZXR0aW5nIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKKyAgICAgICAgZmluYWwgaW50IHJvdGF0aW9uID0gYXJlQWxsUm90YXRpb25zQWxsb3dlZChjb250ZXh0KSA/IENVUlJFTlRfUk9UQVRJT04gOiBOQVRVUkFMX1JPVEFUSU9OOworICAgICAgICBzZXRSb3RhdGlvbkxvY2soZW5hYmxlZCwgcm90YXRpb24pOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgcm90YXRpb24gbG9jayBhbmQgYWRqdXN0cyB3aGV0aGVyIHRoZSByb3RhdGlvbiBsb2NrIHRvZ2dsZQotICAgICAqIHNob3VsZCBiZSBoaWRkZW4gZm9yIGFjY2Vzc2liaWxpdHkgcHVycG9zZXMuCisgICAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBuYXR1cmFsIHJvdGF0aW9uIGxvY2sgZnJvbSBBY2Nlc3NpYmlsaXR5IHNldHRpbmdzLgogICAgICAqCi0gICAgICogU2hvdWxkIGJlIHVzZWQgYnkgRGlzcGxheSBzZXR0aW5ncyBhbmQgQWNjZXNzaWJpbGl0eSBzZXR0aW5ncy4KKyAgICAgKiBJZiByb3RhdGlvbiBpcyBsb2NrZWQgZm9yIGFjY2Vzc2liaWxpdHksIHRoZSBzeXN0ZW0gVUkgdG9nZ2xlIGlzIGhpZGRlbiB0byBhdm9pZCBjb25mdXNpb24uCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFJvdGF0aW9uTG9ja0ZvckFjY2Vzc2liaWxpdHkoQ29udGV4dCBjb250ZXh0LCBmaW5hbCBib29sZWFuIGVuYWJsZWQpIHsKICAgICAgICAgU2V0dGluZ3MuU3lzdGVtLnB1dEludEZvclVzZXIoY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TeXN0ZW0uSElERV9ST1RBVElPTl9MT0NLX1RPR0dMRV9GT1JfQUNDRVNTSUJJTElUWSwgZW5hYmxlZCA/IDEgOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5VU0VSX0NVUlJFTlQpOwogCisgICAgICAgIHNldFJvdGF0aW9uTG9jayhlbmFibGVkLCBOQVRVUkFMX1JPVEFUSU9OKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGFyZUFsbFJvdGF0aW9uc0FsbG93ZWQoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHJldHVybiBjb250ZXh0LmdldFJlc291cmNlcygpLmdldEJvb2xlYW4oUi5ib29sLmNvbmZpZ19hbGxvd0FsbFJvdGF0aW9ucyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRSb3RhdGlvbkxvY2soZmluYWwgYm9vbGVhbiBlbmFibGVkLCBmaW5hbCBpbnQgcm90YXRpb24pIHsKICAgICAgICAgQXN5bmNUYXNrLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgSVdpbmRvd01hbmFnZXIgd20gPSBXaW5kb3dNYW5hZ2VyR2xvYmFsLmdldFdpbmRvd01hbmFnZXJTZXJ2aWNlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3bS5mcmVlemVSb3RhdGlvbihTdXJmYWNlLlJPVEFUSU9OXzApOworICAgICAgICAgICAgICAgICAgICAgICAgd20uZnJlZXplUm90YXRpb24ocm90YXRpb24pOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgd20udGhhd1JvdGF0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQWN0aW9uTWVudUl0ZW1WaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0FjdGlvbk1lbnVJdGVtVmlldy5qYXZhCmluZGV4IDIzOGE5YzAzLi4zY2NlZWJlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0FjdGlvbk1lbnVJdGVtVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQWN0aW9uTWVudUl0ZW1WaWV3LmphdmEKQEAgLTI4LDggKzI4LDExIEBACiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BY3Rpb25NZW51VmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0UG9wdXBXaW5kb3c7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFBvcHVwV2luZG93LkZvcndhcmRpbmdMaXN0ZW5lcjsKIAogLyoqCiAgKiBAaGlkZQpAQCAtNDMsNiArNDYsOCBAQAogICAgIHByaXZhdGUgQ2hhclNlcXVlbmNlIG1UaXRsZTsKICAgICBwcml2YXRlIERyYXdhYmxlIG1JY29uOwogICAgIHByaXZhdGUgTWVudUJ1aWxkZXIuSXRlbUludm9rZXIgbUl0ZW1JbnZva2VyOworICAgIHByaXZhdGUgRm9yd2FyZGluZ0xpc3RlbmVyIG1Gb3J3YXJkaW5nTGlzdGVuZXI7CisgICAgcHJpdmF0ZSBQb3B1cENhbGxiYWNrIG1Qb3B1cENhbGxiYWNrOwogCiAgICAgcHJpdmF0ZSBib29sZWFuIG1BbGxvd1RleHRXaXRoSWNvbjsKICAgICBwcml2YXRlIGJvb2xlYW4gbUV4cGFuZGVkRm9ybWF0OwpAQCAtNjAsMTMgKzY1LDE3IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KIAotICAgIHB1YmxpYyBBY3Rpb25NZW51SXRlbVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBBY3Rpb25NZW51SXRlbVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQWN0aW9uTWVudUl0ZW1WaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKICAgICAgICAgbUFsbG93VGV4dFdpdGhJY29uID0gcmVzLmdldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5ib29sLmNvbmZpZ19hbGxvd0FjdGlvbk1lbnVJdGVtVGV4dFdpdGhJY29uKTsKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkFjdGlvbk1lbnVJdGVtVmlldywgMCwgMCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BY3Rpb25NZW51SXRlbVZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBtTWluV2lkdGggPSBhLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BY3Rpb25NZW51SXRlbVZpZXdfbWluV2lkdGgsIDApOwogICAgICAgICBhLnJlY3ljbGUoKTsKQEAgLTk5LDYgKzEwOCw3IEBACiAgICAgICAgIHJldHVybiBtSXRlbURhdGE7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShNZW51SXRlbUltcGwgaXRlbURhdGEsIGludCBtZW51VHlwZSkgewogICAgICAgICBtSXRlbURhdGEgPSBpdGVtRGF0YTsKIApAQCAtMTA4LDggKzExOCwyNCBAQAogCiAgICAgICAgIHNldFZpc2liaWxpdHkoaXRlbURhdGEuaXNWaXNpYmxlKCkgPyBWaWV3LlZJU0lCTEUgOiBWaWV3LkdPTkUpOwogICAgICAgICBzZXRFbmFibGVkKGl0ZW1EYXRhLmlzRW5hYmxlZCgpKTsKKworICAgICAgICBpZiAoaXRlbURhdGEuaGFzU3ViTWVudSgpKSB7CisgICAgICAgICAgICBpZiAobUZvcndhcmRpbmdMaXN0ZW5lciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUZvcndhcmRpbmdMaXN0ZW5lciA9IG5ldyBBY3Rpb25NZW51SXRlbUZvcndhcmRpbmdMaXN0ZW5lcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaEV2ZW50KE1vdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgaWYgKG1JdGVtRGF0YS5oYXNTdWJNZW51KCkgJiYgbUZvcndhcmRpbmdMaXN0ZW5lciAhPSBudWxsCisgICAgICAgICAgICAgICAgJiYgbUZvcndhcmRpbmdMaXN0ZW5lci5vblRvdWNoKHRoaXMsIGUpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VwZXIub25Ub3VjaEV2ZW50KGUpOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CiAgICAgICAgIGlmIChtSXRlbUludm9rZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbUl0ZW1JbnZva2VyLmludm9rZUl0ZW0obUl0ZW1EYXRhKTsKQEAgLTEyMCw2ICsxNDYsMTAgQEAKICAgICAgICAgbUl0ZW1JbnZva2VyID0gaW52b2tlcjsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCBzZXRQb3B1cENhbGxiYWNrKFBvcHVwQ2FsbGJhY2sgcG9wdXBDYWxsYmFjaykgeworICAgICAgICBtUG9wdXBDYWxsYmFjayA9IHBvcHVwQ2FsbGJhY2s7CisgICAgfQorCiAgICAgcHVibGljIGJvb2xlYW4gcHJlZmVyc0NvbmRlbnNlZFRpdGxlKCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yODUsNCArMzE1LDQyIEBACiAgICAgICAgICAgICBzdXBlci5zZXRQYWRkaW5nKCh3IC0gZHcpIC8gMiwgZ2V0UGFkZGluZ1RvcCgpLCBnZXRQYWRkaW5nUmlnaHQoKSwgZ2V0UGFkZGluZ0JvdHRvbSgpKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgQWN0aW9uTWVudUl0ZW1Gb3J3YXJkaW5nTGlzdGVuZXIgZXh0ZW5kcyBGb3J3YXJkaW5nTGlzdGVuZXIgeworICAgICAgICBwdWJsaWMgQWN0aW9uTWVudUl0ZW1Gb3J3YXJkaW5nTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBzdXBlcihBY3Rpb25NZW51SXRlbVZpZXcudGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIExpc3RQb3B1cFdpbmRvdyBnZXRQb3B1cCgpIHsKKyAgICAgICAgICAgIGlmIChtUG9wdXBDYWxsYmFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1Qb3B1cENhbGxiYWNrLmdldFBvcHVwKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBvbkZvcndhcmRpbmdTdGFydGVkKCkgeworICAgICAgICAgICAgLy8gQ2FsbCB0aGUgaW52b2tlciwgdGhlbiBjaGVjayBpZiB0aGUgZXhwZWN0ZWQgcG9wdXAgaXMgc2hvd2luZy4KKyAgICAgICAgICAgIGlmIChtSXRlbUludm9rZXIgIT0gbnVsbCAmJiBtSXRlbUludm9rZXIuaW52b2tlSXRlbShtSXRlbURhdGEpKSB7CisgICAgICAgICAgICAgICAgZmluYWwgTGlzdFBvcHVwV2luZG93IHBvcHVwID0gZ2V0UG9wdXAoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9wdXAgIT0gbnVsbCAmJiBwb3B1cC5pc1Nob3dpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBvbkZvcndhcmRpbmdTdG9wcGVkKCkgeworICAgICAgICAgICAgZmluYWwgTGlzdFBvcHVwV2luZG93IHBvcHVwID0gZ2V0UG9wdXAoKTsKKyAgICAgICAgICAgIGlmIChwb3B1cCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcG9wdXAuZGlzbWlzcygpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBQb3B1cENhbGxiYWNrIHsKKyAgICAgICAgcHVibGljIGFic3RyYWN0IExpc3RQb3B1cFdpbmRvdyBnZXRQb3B1cCgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQWN0aW9uTWVudVByZXNlbnRlci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9BY3Rpb25NZW51UHJlc2VudGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlMWNmNzIuLjAwMDAwMDAKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9BY3Rpb25NZW51UHJlc2VudGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5tZW51OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbjsKLWltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbk1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUJvb2xlYW5BcnJheTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuQWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwotaW1wb3J0IGFuZHJvaWQudmlldy5Tb3VuZEVmZmVjdENvbnN0YW50czsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5NZWFzdXJlU3BlYzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZUJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0UG9wdXBXaW5kb3c7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFBvcHVwV2luZG93LkZvcndhcmRpbmdMaXN0ZW5lcjsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50cmFuc2l0aW9uLkFjdGlvbkJhclRyYW5zaXRpb247Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5BY3Rpb25CYXJQb2xpY3k7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5tZW51LkFjdGlvbk1lbnVWaWV3LkFjdGlvbk1lbnVDaGlsZFZpZXc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi0vKioKLSAqIE1lbnVQcmVzZW50ZXIgZm9yIGJ1aWxkaW5nIGFjdGlvbiBtZW51cyBhcyBzZWVuIGluIHRoZSBhY3Rpb24gYmFyIGFuZCBhY3Rpb24gbW9kZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBY3Rpb25NZW51UHJlc2VudGVyIGV4dGVuZHMgQmFzZU1lbnVQcmVzZW50ZXIKLSAgICAgICAgaW1wbGVtZW50cyBBY3Rpb25Qcm92aWRlci5TdWJVaVZpc2liaWxpdHlMaXN0ZW5lciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJBY3Rpb25NZW51UHJlc2VudGVyIjsKLQotICAgIHByaXZhdGUgVmlldyBtT3ZlcmZsb3dCdXR0b247Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1SZXNlcnZlT3ZlcmZsb3c7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1SZXNlcnZlT3ZlcmZsb3dTZXQ7Ci0gICAgcHJpdmF0ZSBpbnQgbVdpZHRoTGltaXQ7Ci0gICAgcHJpdmF0ZSBpbnQgbUFjdGlvbkl0ZW1XaWR0aExpbWl0OwotICAgIHByaXZhdGUgaW50IG1NYXhJdGVtczsKLSAgICBwcml2YXRlIGJvb2xlYW4gbU1heEl0ZW1zU2V0OwotICAgIHByaXZhdGUgYm9vbGVhbiBtU3RyaWN0V2lkdGhMaW1pdDsKLSAgICBwcml2YXRlIGJvb2xlYW4gbVdpZHRoTGltaXRTZXQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1FeHBhbmRlZEFjdGlvblZpZXdzRXhjbHVzaXZlOwotCi0gICAgcHJpdmF0ZSBpbnQgbU1pbkNlbGxTaXplOwotCi0gICAgLy8gR3JvdXAgSURzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIGFzIGFjdGlvbnMgLSB1c2VkIHRlbXBvcmFyaWx5LCBhbGxvY2F0ZWQgaGVyZSBmb3IgcmV1c2UuCi0gICAgcHJpdmF0ZSBmaW5hbCBTcGFyc2VCb29sZWFuQXJyYXkgbUFjdGlvbkJ1dHRvbkdyb3VwcyA9IG5ldyBTcGFyc2VCb29sZWFuQXJyYXkoKTsKLQotICAgIHByaXZhdGUgVmlldyBtU2NyYXBBY3Rpb25CdXR0b25WaWV3OwotCi0gICAgcHJpdmF0ZSBPdmVyZmxvd1BvcHVwIG1PdmVyZmxvd1BvcHVwOwotICAgIHByaXZhdGUgQWN0aW9uQnV0dG9uU3VibWVudSBtQWN0aW9uQnV0dG9uUG9wdXA7Ci0KLSAgICBwcml2YXRlIE9wZW5PdmVyZmxvd1J1bm5hYmxlIG1Qb3N0ZWRPcGVuUnVubmFibGU7Ci0KLSAgICBmaW5hbCBQb3B1cFByZXNlbnRlckNhbGxiYWNrIG1Qb3B1cFByZXNlbnRlckNhbGxiYWNrID0gbmV3IFBvcHVwUHJlc2VudGVyQ2FsbGJhY2soKTsKLSAgICBpbnQgbU9wZW5TdWJNZW51SWQ7Ci0KLSAgICBwdWJsaWMgQWN0aW9uTWVudVByZXNlbnRlcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5sYXlvdXQuYWN0aW9uX21lbnVfbGF5b3V0LAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIubGF5b3V0LmFjdGlvbl9tZW51X2l0ZW1fbGF5b3V0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBpbml0Rm9yTWVudShDb250ZXh0IGNvbnRleHQsIE1lbnVCdWlsZGVyIG1lbnUpIHsKLSAgICAgICAgc3VwZXIuaW5pdEZvck1lbnUoY29udGV4dCwgbWVudSk7Ci0KLSAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7Ci0KLSAgICAgICAgZmluYWwgQWN0aW9uQmFyUG9saWN5IGFicCA9IEFjdGlvbkJhclBvbGljeS5nZXQoY29udGV4dCk7Ci0gICAgICAgIGlmICghbVJlc2VydmVPdmVyZmxvd1NldCkgewotICAgICAgICAgICAgbVJlc2VydmVPdmVyZmxvdyA9IGFicC5zaG93c092ZXJmbG93TWVudUJ1dHRvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtV2lkdGhMaW1pdFNldCkgewotICAgICAgICAgICAgbVdpZHRoTGltaXQgPSBhYnAuZ2V0RW1iZWRkZWRNZW51V2lkdGhMaW1pdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTWVhc3VyZSBmb3IgaW5pdGlhbCBjb25maWd1cmF0aW9uCi0gICAgICAgIGlmICghbU1heEl0ZW1zU2V0KSB7Ci0gICAgICAgICAgICBtTWF4SXRlbXMgPSBhYnAuZ2V0TWF4QWN0aW9uQnV0dG9ucygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHdpZHRoID0gbVdpZHRoTGltaXQ7Ci0gICAgICAgIGlmIChtUmVzZXJ2ZU92ZXJmbG93KSB7Ci0gICAgICAgICAgICBpZiAobU92ZXJmbG93QnV0dG9uID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtT3ZlcmZsb3dCdXR0b24gPSBuZXcgT3ZlcmZsb3dNZW51QnV0dG9uKG1TeXN0ZW1Db250ZXh0KTsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygwLCBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRCk7Ci0gICAgICAgICAgICAgICAgbU92ZXJmbG93QnV0dG9uLm1lYXN1cmUoc3BlYywgc3BlYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aWR0aCAtPSBtT3ZlcmZsb3dCdXR0b24uZ2V0TWVhc3VyZWRXaWR0aCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbU92ZXJmbG93QnV0dG9uID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIG1BY3Rpb25JdGVtV2lkdGhMaW1pdCA9IHdpZHRoOwotCi0gICAgICAgIG1NaW5DZWxsU2l6ZSA9IChpbnQpIChBY3Rpb25NZW51Vmlldy5NSU5fQ0VMTF9TSVpFICogcmVzLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eSk7Ci0KLSAgICAgICAgLy8gRHJvcCBhIHNjcmFwIHZpZXcgYXMgaXQgbWF5IG5vIGxvbmdlciByZWZsZWN0IHRoZSBwcm9wZXIgY29udGV4dC9jb25maWcuCi0gICAgICAgIG1TY3JhcEFjdGlvbkJ1dHRvblZpZXcgPSBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQoQ29uZmlndXJhdGlvbiBuZXdDb25maWcpIHsKLSAgICAgICAgaWYgKCFtTWF4SXRlbXNTZXQpIHsKLSAgICAgICAgICAgIG1NYXhJdGVtcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldEludGVnZXIoCi0gICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaW50ZWdlci5tYXhfYWN0aW9uX2J1dHRvbnMpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtTWVudSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtTWVudS5vbkl0ZW1zQ2hhbmdlZCh0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFdpZHRoTGltaXQoaW50IHdpZHRoLCBib29sZWFuIHN0cmljdCkgewotICAgICAgICBtV2lkdGhMaW1pdCA9IHdpZHRoOwotICAgICAgICBtU3RyaWN0V2lkdGhMaW1pdCA9IHN0cmljdDsKLSAgICAgICAgbVdpZHRoTGltaXRTZXQgPSB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJlc2VydmVPdmVyZmxvdyhib29sZWFuIHJlc2VydmVPdmVyZmxvdykgewotICAgICAgICBtUmVzZXJ2ZU92ZXJmbG93ID0gcmVzZXJ2ZU92ZXJmbG93OwotICAgICAgICBtUmVzZXJ2ZU92ZXJmbG93U2V0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJdGVtTGltaXQoaW50IGl0ZW1Db3VudCkgewotICAgICAgICBtTWF4SXRlbXMgPSBpdGVtQ291bnQ7Ci0gICAgICAgIG1NYXhJdGVtc1NldCA9IHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RXhwYW5kZWRBY3Rpb25WaWV3c0V4Y2x1c2l2ZShib29sZWFuIGlzRXhjbHVzaXZlKSB7Ci0gICAgICAgIG1FeHBhbmRlZEFjdGlvblZpZXdzRXhjbHVzaXZlID0gaXNFeGNsdXNpdmU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lbnVWaWV3IGdldE1lbnVWaWV3KFZpZXdHcm91cCByb290KSB7Ci0gICAgICAgIE1lbnVWaWV3IHJlc3VsdCA9IHN1cGVyLmdldE1lbnVWaWV3KHJvb3QpOwotICAgICAgICAoKEFjdGlvbk1lbnVWaWV3KSByZXN1bHQpLnNldFByZXNlbnRlcih0aGlzKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVmlldyBnZXRJdGVtVmlldyhmaW5hbCBNZW51SXRlbUltcGwgaXRlbSwgVmlldyBjb252ZXJ0VmlldywgVmlld0dyb3VwIHBhcmVudCkgewotICAgICAgICBWaWV3IGFjdGlvblZpZXcgPSBpdGVtLmdldEFjdGlvblZpZXcoKTsKLSAgICAgICAgaWYgKGFjdGlvblZpZXcgPT0gbnVsbCB8fCBpdGVtLmhhc0NvbGxhcHNpYmxlQWN0aW9uVmlldygpKSB7Ci0gICAgICAgICAgICBhY3Rpb25WaWV3ID0gc3VwZXIuZ2V0SXRlbVZpZXcoaXRlbSwgY29udmVydFZpZXcsIHBhcmVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgYWN0aW9uVmlldy5zZXRWaXNpYmlsaXR5KGl0ZW0uaXNBY3Rpb25WaWV3RXhwYW5kZWQoKSA/IFZpZXcuR09ORSA6IFZpZXcuVklTSUJMRSk7Ci0KLSAgICAgICAgZmluYWwgQWN0aW9uTWVudVZpZXcgbWVudVBhcmVudCA9IChBY3Rpb25NZW51VmlldykgcGFyZW50OwotICAgICAgICBmaW5hbCBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zIGxwID0gYWN0aW9uVmlldy5nZXRMYXlvdXRQYXJhbXMoKTsKLSAgICAgICAgaWYgKCFtZW51UGFyZW50LmNoZWNrTGF5b3V0UGFyYW1zKGxwKSkgewotICAgICAgICAgICAgYWN0aW9uVmlldy5zZXRMYXlvdXRQYXJhbXMobWVudVBhcmVudC5nZW5lcmF0ZUxheW91dFBhcmFtcyhscCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhY3Rpb25WaWV3OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGJpbmRJdGVtVmlldyhmaW5hbCBNZW51SXRlbUltcGwgaXRlbSwgTWVudVZpZXcuSXRlbVZpZXcgaXRlbVZpZXcpIHsKLSAgICAgICAgaXRlbVZpZXcuaW5pdGlhbGl6ZShpdGVtLCAwKTsKLQotICAgICAgICBmaW5hbCBBY3Rpb25NZW51VmlldyBtZW51VmlldyA9IChBY3Rpb25NZW51VmlldykgbU1lbnVWaWV3OwotICAgICAgICBmaW5hbCBBY3Rpb25NZW51SXRlbVZpZXcgYWN0aW9uSXRlbVZpZXcgPSAoQWN0aW9uTWVudUl0ZW1WaWV3KSBpdGVtVmlldzsKLSAgICAgICAgYWN0aW9uSXRlbVZpZXcuc2V0SXRlbUludm9rZXIobWVudVZpZXcpOwotCi0gICAgICAgIGlmIChpdGVtLmhhc1N1Yk1lbnUoKSkgewotICAgICAgICAgICAgYWN0aW9uSXRlbVZpZXcuc2V0T25Ub3VjaExpc3RlbmVyKG5ldyBGb3J3YXJkaW5nTGlzdGVuZXIoYWN0aW9uSXRlbVZpZXcpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgTGlzdFBvcHVwV2luZG93IGdldFBvcHVwKCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbUFjdGlvbkJ1dHRvblBvcHVwICE9IG51bGwgPyBtQWN0aW9uQnV0dG9uUG9wdXAuZ2V0UG9wdXAoKSA6IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gb25Gb3J3YXJkaW5nU3RhcnRlZCgpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uU3ViTWVudVNlbGVjdGVkKChTdWJNZW51QnVpbGRlcikgaXRlbS5nZXRTdWJNZW51KCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHByb3RlY3RlZCBib29sZWFuIG9uRm9yd2FyZGluZ1N0b3BwZWQoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXNtaXNzUG9wdXBNZW51cygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWN0aW9uSXRlbVZpZXcuc2V0T25Ub3VjaExpc3RlbmVyKG51bGwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc2hvdWxkSW5jbHVkZUl0ZW0oaW50IGNoaWxkSW5kZXgsIE1lbnVJdGVtSW1wbCBpdGVtKSB7Ci0gICAgICAgIHJldHVybiBpdGVtLmlzQWN0aW9uQnV0dG9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdXBkYXRlTWVudVZpZXcoYm9vbGVhbiBjbGVhcmVkKSB7Ci0gICAgICAgIGZpbmFsIFZpZXdHcm91cCBtZW51Vmlld1BhcmVudCA9IChWaWV3R3JvdXApICgoVmlldykgbU1lbnVWaWV3KS5nZXRQYXJlbnQoKTsKLSAgICAgICAgaWYgKG1lbnVWaWV3UGFyZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgIEFjdGlvbkJhclRyYW5zaXRpb24uYmVnaW5EZWxheWVkVHJhbnNpdGlvbihtZW51Vmlld1BhcmVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3VwZXIudXBkYXRlTWVudVZpZXcoY2xlYXJlZCk7Ci0KLSAgICAgICAgKChWaWV3KSBtTWVudVZpZXcpLnJlcXVlc3RMYXlvdXQoKTsKLQotICAgICAgICBpZiAobU1lbnUgIT0gbnVsbCkgewotICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PE1lbnVJdGVtSW1wbD4gYWN0aW9uSXRlbXMgPSBtTWVudS5nZXRBY3Rpb25JdGVtcygpOwotICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gYWN0aW9uSXRlbXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgQWN0aW9uUHJvdmlkZXIgcHJvdmlkZXIgPSBhY3Rpb25JdGVtcy5nZXQoaSkuZ2V0QWN0aW9uUHJvdmlkZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAocHJvdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5zZXRTdWJVaVZpc2liaWxpdHlMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBBcnJheUxpc3Q8TWVudUl0ZW1JbXBsPiBub25BY3Rpb25JdGVtcyA9IG1NZW51ICE9IG51bGwgPwotICAgICAgICAgICAgICAgIG1NZW51LmdldE5vbkFjdGlvbkl0ZW1zKCkgOiBudWxsOwotCi0gICAgICAgIGJvb2xlYW4gaGFzT3ZlcmZsb3cgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1SZXNlcnZlT3ZlcmZsb3cgJiYgbm9uQWN0aW9uSXRlbXMgIT0gbnVsbCkgewotICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbm9uQWN0aW9uSXRlbXMuc2l6ZSgpOwotICAgICAgICAgICAgaWYgKGNvdW50ID09IDEpIHsKLSAgICAgICAgICAgICAgICBoYXNPdmVyZmxvdyA9ICFub25BY3Rpb25JdGVtcy5nZXQoMCkuaXNBY3Rpb25WaWV3RXhwYW5kZWQoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGFzT3ZlcmZsb3cgPSBjb3VudCA+IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGFzT3ZlcmZsb3cpIHsKLSAgICAgICAgICAgIGlmIChtT3ZlcmZsb3dCdXR0b24gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1PdmVyZmxvd0J1dHRvbiA9IG5ldyBPdmVyZmxvd01lbnVCdXR0b24obVN5c3RlbUNvbnRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVmlld0dyb3VwIHBhcmVudCA9IChWaWV3R3JvdXApIG1PdmVyZmxvd0J1dHRvbi5nZXRQYXJlbnQoKTsKLSAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbU1lbnVWaWV3KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmVWaWV3KG1PdmVyZmxvd0J1dHRvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFjdGlvbk1lbnVWaWV3IG1lbnVWaWV3ID0gKEFjdGlvbk1lbnVWaWV3KSBtTWVudVZpZXc7Ci0gICAgICAgICAgICAgICAgbWVudVZpZXcuYWRkVmlldyhtT3ZlcmZsb3dCdXR0b24sIG1lbnVWaWV3LmdlbmVyYXRlT3ZlcmZsb3dCdXR0b25MYXlvdXRQYXJhbXMoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobU92ZXJmbG93QnV0dG9uICE9IG51bGwgJiYgbU92ZXJmbG93QnV0dG9uLmdldFBhcmVudCgpID09IG1NZW51VmlldykgewotICAgICAgICAgICAgKChWaWV3R3JvdXApIG1NZW51VmlldykucmVtb3ZlVmlldyhtT3ZlcmZsb3dCdXR0b24pOwotICAgICAgICB9Ci0KLSAgICAgICAgKChBY3Rpb25NZW51VmlldykgbU1lbnVWaWV3KS5zZXRPdmVyZmxvd1Jlc2VydmVkKG1SZXNlcnZlT3ZlcmZsb3cpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGZpbHRlckxlZnRvdmVyVmlldyhWaWV3R3JvdXAgcGFyZW50LCBpbnQgY2hpbGRJbmRleCkgewotICAgICAgICBpZiAocGFyZW50LmdldENoaWxkQXQoY2hpbGRJbmRleCkgPT0gbU92ZXJmbG93QnV0dG9uKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBzdXBlci5maWx0ZXJMZWZ0b3ZlclZpZXcocGFyZW50LCBjaGlsZEluZGV4KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBvblN1Yk1lbnVTZWxlY3RlZChTdWJNZW51QnVpbGRlciBzdWJNZW51KSB7Ci0gICAgICAgIGlmICghc3ViTWVudS5oYXNWaXNpYmxlSXRlbXMoKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFN1Yk1lbnVCdWlsZGVyIHRvcFN1Yk1lbnUgPSBzdWJNZW51OwotICAgICAgICB3aGlsZSAodG9wU3ViTWVudS5nZXRQYXJlbnRNZW51KCkgIT0gbU1lbnUpIHsKLSAgICAgICAgICAgIHRvcFN1Yk1lbnUgPSAoU3ViTWVudUJ1aWxkZXIpIHRvcFN1Yk1lbnUuZ2V0UGFyZW50TWVudSgpOwotICAgICAgICB9Ci0gICAgICAgIFZpZXcgYW5jaG9yID0gZmluZFZpZXdGb3JJdGVtKHRvcFN1Yk1lbnUuZ2V0SXRlbSgpKTsKLSAgICAgICAgaWYgKGFuY2hvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAobU92ZXJmbG93QnV0dG9uID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGFuY2hvciA9IG1PdmVyZmxvd0J1dHRvbjsKLSAgICAgICAgfQotCi0gICAgICAgIG1PcGVuU3ViTWVudUlkID0gc3ViTWVudS5nZXRJdGVtKCkuZ2V0SXRlbUlkKCk7Ci0gICAgICAgIG1BY3Rpb25CdXR0b25Qb3B1cCA9IG5ldyBBY3Rpb25CdXR0b25TdWJtZW51KG1Db250ZXh0LCBzdWJNZW51KTsKLSAgICAgICAgbUFjdGlvbkJ1dHRvblBvcHVwLnNldEFuY2hvclZpZXcoYW5jaG9yKTsKLSAgICAgICAgbUFjdGlvbkJ1dHRvblBvcHVwLnNob3coKTsKLSAgICAgICAgc3VwZXIub25TdWJNZW51U2VsZWN0ZWQoc3ViTWVudSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByaXZhdGUgVmlldyBmaW5kVmlld0Zvckl0ZW0oTWVudUl0ZW0gaXRlbSkgewotICAgICAgICBmaW5hbCBWaWV3R3JvdXAgcGFyZW50ID0gKFZpZXdHcm91cCkgbU1lbnVWaWV3OwotICAgICAgICBpZiAocGFyZW50ID09IG51bGwpIHJldHVybiBudWxsOwotCi0gICAgICAgIGZpbmFsIGludCBjb3VudCA9IHBhcmVudC5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgZmluYWwgVmlldyBjaGlsZCA9IHBhcmVudC5nZXRDaGlsZEF0KGkpOwotICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTWVudVZpZXcuSXRlbVZpZXcgJiYKLSAgICAgICAgICAgICAgICAgICAgKChNZW51Vmlldy5JdGVtVmlldykgY2hpbGQpLmdldEl0ZW1EYXRhKCkgPT0gaXRlbSkgewotICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEaXNwbGF5IHRoZSBvdmVyZmxvdyBtZW51IGlmIG9uZSBpcyBwcmVzZW50LgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgb3ZlcmZsb3cgbWVudSB3YXMgc2hvd24sIGZhbHNlIG90aGVyd2lzZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzaG93T3ZlcmZsb3dNZW51KCkgewotICAgICAgICBpZiAobVJlc2VydmVPdmVyZmxvdyAmJiAhaXNPdmVyZmxvd01lbnVTaG93aW5nKCkgJiYgbU1lbnUgIT0gbnVsbCAmJiBtTWVudVZpZXcgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgIG1Qb3N0ZWRPcGVuUnVubmFibGUgPT0gbnVsbCAmJiAhbU1lbnUuZ2V0Tm9uQWN0aW9uSXRlbXMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIE92ZXJmbG93UG9wdXAgcG9wdXAgPSBuZXcgT3ZlcmZsb3dQb3B1cChtQ29udGV4dCwgbU1lbnUsIG1PdmVyZmxvd0J1dHRvbiwgdHJ1ZSk7Ci0gICAgICAgICAgICBtUG9zdGVkT3BlblJ1bm5hYmxlID0gbmV3IE9wZW5PdmVyZmxvd1J1bm5hYmxlKHBvcHVwKTsKLSAgICAgICAgICAgIC8vIFBvc3QgdGhpcyBmb3IgbGF0ZXI7IHdlIG1pZ2h0IHN0aWxsIG5lZWQgYSBsYXlvdXQgZm9yIHRoZSBhbmNob3IgdG8gYmUgcmlnaHQuCi0gICAgICAgICAgICAoKFZpZXcpIG1NZW51VmlldykucG9zdChtUG9zdGVkT3BlblJ1bm5hYmxlKTsKLQotICAgICAgICAgICAgLy8gQWN0aW9uTWVudVByZXNlbnRlciB1c2VzIG51bGwgYXMgYSBjYWxsYmFjayBhcmd1bWVudCBoZXJlCi0gICAgICAgICAgICAvLyB0byBpbmRpY2F0ZSBvdmVyZmxvdyBpcyBvcGVuaW5nLgotICAgICAgICAgICAgc3VwZXIub25TdWJNZW51U2VsZWN0ZWQobnVsbCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBIaWRlIHRoZSBvdmVyZmxvdyBtZW51IGlmIGl0IGlzIGN1cnJlbnRseSBzaG93aW5nLgotICAgICAqCi0gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBvdmVyZmxvdyBtZW51IHdhcyBoaWRkZW4sIGZhbHNlIG90aGVyd2lzZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBoaWRlT3ZlcmZsb3dNZW51KCkgewotICAgICAgICBpZiAobVBvc3RlZE9wZW5SdW5uYWJsZSAhPSBudWxsICYmIG1NZW51VmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAoKFZpZXcpIG1NZW51VmlldykucmVtb3ZlQ2FsbGJhY2tzKG1Qb3N0ZWRPcGVuUnVubmFibGUpOwotICAgICAgICAgICAgbVBvc3RlZE9wZW5SdW5uYWJsZSA9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIE1lbnVQb3B1cEhlbHBlciBwb3B1cCA9IG1PdmVyZmxvd1BvcHVwOwotICAgICAgICBpZiAocG9wdXAgIT0gbnVsbCkgewotICAgICAgICAgICAgcG9wdXAuZGlzbWlzcygpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERpc21pc3MgYWxsIHBvcHVwIG1lbnVzIC0gb3ZlcmZsb3cgYW5kIHN1Ym1lbnVzLgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBwb3B1cHMgd2VyZSBkaXNtaXNzZWQsIGZhbHNlIG90aGVyd2lzZS4gKFRoaXMgY2FuIGJlIGJlY2F1c2Ugbm9uZSB3ZXJlIG9wZW4uKQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGRpc21pc3NQb3B1cE1lbnVzKCkgewotICAgICAgICBib29sZWFuIHJlc3VsdCA9IGhpZGVPdmVyZmxvd01lbnUoKTsKLSAgICAgICAgcmVzdWx0IHw9IGhpZGVTdWJNZW51cygpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERpc21pc3MgYWxsIHN1Ym1lbnUgcG9wdXBzLgotICAgICAqCi0gICAgICogQHJldHVybiB0cnVlIGlmIHBvcHVwcyB3ZXJlIGRpc21pc3NlZCwgZmFsc2Ugb3RoZXJ3aXNlLiAoVGhpcyBjYW4gYmUgYmVjYXVzZSBub25lIHdlcmUgb3Blbi4pCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaGlkZVN1Yk1lbnVzKCkgewotICAgICAgICBpZiAobUFjdGlvbkJ1dHRvblBvcHVwICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1BY3Rpb25CdXR0b25Qb3B1cC5kaXNtaXNzKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBvdmVyZmxvdyBtZW51IGlzIGN1cnJlbnRseSBzaG93aW5nCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNPdmVyZmxvd01lbnVTaG93aW5nKCkgewotICAgICAgICByZXR1cm4gbU92ZXJmbG93UG9wdXAgIT0gbnVsbCAmJiBtT3ZlcmZsb3dQb3B1cC5pc1Nob3dpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc092ZXJmbG93TWVudVNob3dQZW5kaW5nKCkgewotICAgICAgICByZXR1cm4gbVBvc3RlZE9wZW5SdW5uYWJsZSAhPSBudWxsIHx8IGlzT3ZlcmZsb3dNZW51U2hvd2luZygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBzcGFjZSBoYXMgYmVlbiByZXNlcnZlZCBpbiB0aGUgYWN0aW9uIG1lbnUgZm9yIGFuIG92ZXJmbG93IGl0ZW0uCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNPdmVyZmxvd1Jlc2VydmVkKCkgewotICAgICAgICByZXR1cm4gbVJlc2VydmVPdmVyZmxvdzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBmbGFnQWN0aW9uSXRlbXMoKSB7Ci0gICAgICAgIGZpbmFsIEFycmF5TGlzdDxNZW51SXRlbUltcGw+IHZpc2libGVJdGVtcyA9IG1NZW51LmdldFZpc2libGVJdGVtcygpOwotICAgICAgICBmaW5hbCBpbnQgaXRlbXNTaXplID0gdmlzaWJsZUl0ZW1zLnNpemUoKTsKLSAgICAgICAgaW50IG1heEFjdGlvbnMgPSBtTWF4SXRlbXM7Ci0gICAgICAgIGludCB3aWR0aExpbWl0ID0gbUFjdGlvbkl0ZW1XaWR0aExpbWl0OwotICAgICAgICBmaW5hbCBpbnQgcXVlcnlTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDAsIE1lYXN1cmVTcGVjLlVOU1BFQ0lGSUVEKTsKLSAgICAgICAgZmluYWwgVmlld0dyb3VwIHBhcmVudCA9IChWaWV3R3JvdXApIG1NZW51VmlldzsKLQotICAgICAgICBpbnQgcmVxdWlyZWRJdGVtcyA9IDA7Ci0gICAgICAgIGludCByZXF1ZXN0ZWRJdGVtcyA9IDA7Ci0gICAgICAgIGludCBmaXJzdEFjdGlvbldpZHRoID0gMDsKLSAgICAgICAgYm9vbGVhbiBoYXNPdmVyZmxvdyA9IGZhbHNlOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBNZW51SXRlbUltcGwgaXRlbSA9IHZpc2libGVJdGVtcy5nZXQoaSk7Ci0gICAgICAgICAgICBpZiAoaXRlbS5yZXF1aXJlc0FjdGlvbkJ1dHRvbigpKSB7Ci0gICAgICAgICAgICAgICAgcmVxdWlyZWRJdGVtcysrOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnJlcXVlc3RzQWN0aW9uQnV0dG9uKCkpIHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0ZWRJdGVtcysrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBoYXNPdmVyZmxvdyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobUV4cGFuZGVkQWN0aW9uVmlld3NFeGNsdXNpdmUgJiYgaXRlbS5pc0FjdGlvblZpZXdFeHBhbmRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gT3ZlcmZsb3cgZXZlcnl0aGluZyBpZiB3ZSBoYXZlIGFuIGV4cGFuZGVkIGFjdGlvbiB2aWV3IGFuZCB3ZSdyZQotICAgICAgICAgICAgICAgIC8vIHNwYWNlIGNvbnN0cmFpbmVkLgotICAgICAgICAgICAgICAgIG1heEFjdGlvbnMgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVzZXJ2ZSBhIHNwb3QgZm9yIHRoZSBvdmVyZmxvdyBpdGVtIGlmIG5lZWRlZC4KLSAgICAgICAgaWYgKG1SZXNlcnZlT3ZlcmZsb3cgJiYKLSAgICAgICAgICAgICAgICAoaGFzT3ZlcmZsb3cgfHwgcmVxdWlyZWRJdGVtcyArIHJlcXVlc3RlZEl0ZW1zID4gbWF4QWN0aW9ucykpIHsKLSAgICAgICAgICAgIG1heEFjdGlvbnMtLTsKLSAgICAgICAgfQotICAgICAgICBtYXhBY3Rpb25zIC09IHJlcXVpcmVkSXRlbXM7Ci0KLSAgICAgICAgZmluYWwgU3BhcnNlQm9vbGVhbkFycmF5IHNlZW5Hcm91cHMgPSBtQWN0aW9uQnV0dG9uR3JvdXBzOwotICAgICAgICBzZWVuR3JvdXBzLmNsZWFyKCk7Ci0KLSAgICAgICAgaW50IGNlbGxTaXplID0gMDsKLSAgICAgICAgaW50IGNlbGxzUmVtYWluaW5nID0gMDsKLSAgICAgICAgaWYgKG1TdHJpY3RXaWR0aExpbWl0KSB7Ci0gICAgICAgICAgICBjZWxsc1JlbWFpbmluZyA9IHdpZHRoTGltaXQgLyBtTWluQ2VsbFNpemU7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY2VsbFNpemVSZW1haW5pbmcgPSB3aWR0aExpbWl0ICUgbU1pbkNlbGxTaXplOwotICAgICAgICAgICAgY2VsbFNpemUgPSBtTWluQ2VsbFNpemUgKyBjZWxsU2l6ZVJlbWFpbmluZyAvIGNlbGxzUmVtYWluaW5nOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmxhZyBhcyBtYW55IG1vcmUgcmVxdWVzdGVkIGl0ZW1zIGFzIHdpbGwgZml0LgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBNZW51SXRlbUltcGwgaXRlbSA9IHZpc2libGVJdGVtcy5nZXQoaSk7Ci0KLSAgICAgICAgICAgIGlmIChpdGVtLnJlcXVpcmVzQWN0aW9uQnV0dG9uKCkpIHsKLSAgICAgICAgICAgICAgICBWaWV3IHYgPSBnZXRJdGVtVmlldyhpdGVtLCBtU2NyYXBBY3Rpb25CdXR0b25WaWV3LCBwYXJlbnQpOwotICAgICAgICAgICAgICAgIGlmIChtU2NyYXBBY3Rpb25CdXR0b25WaWV3ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVNjcmFwQWN0aW9uQnV0dG9uVmlldyA9IHY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtU3RyaWN0V2lkdGhMaW1pdCkgewotICAgICAgICAgICAgICAgICAgICBjZWxsc1JlbWFpbmluZyAtPSBBY3Rpb25NZW51Vmlldy5tZWFzdXJlQ2hpbGRGb3JDZWxscyh2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxTaXplLCBjZWxsc1JlbWFpbmluZywgcXVlcnlTcGVjLCAwKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2Lm1lYXN1cmUocXVlcnlTcGVjLCBxdWVyeVNwZWMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbWVhc3VyZWRXaWR0aCA9IHYuZ2V0TWVhc3VyZWRXaWR0aCgpOwotICAgICAgICAgICAgICAgIHdpZHRoTGltaXQgLT0gbWVhc3VyZWRXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RBY3Rpb25XaWR0aCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0QWN0aW9uV2lkdGggPSBtZWFzdXJlZFdpZHRoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZ3JvdXBJZCA9IGl0ZW0uZ2V0R3JvdXBJZCgpOwotICAgICAgICAgICAgICAgIGlmIChncm91cElkICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc2Vlbkdyb3Vwcy5wdXQoZ3JvdXBJZCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0SXNBY3Rpb25CdXR0b24odHJ1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucmVxdWVzdHNBY3Rpb25CdXR0b24oKSkgewotICAgICAgICAgICAgICAgIC8vIEl0ZW1zIGluIGEgZ3JvdXAgd2l0aCBvdGhlciBpdGVtcyB0aGF0IGFscmVhZHkgaGF2ZSBhbiBhY3Rpb24gc2xvdAotICAgICAgICAgICAgICAgIC8vIGNhbiBicmVhayB0aGUgbWF4IGFjdGlvbnMgcnVsZSwgYnV0IG5vdCB0aGUgd2lkdGggbGltaXQuCi0gICAgICAgICAgICAgICAgZmluYWwgaW50IGdyb3VwSWQgPSBpdGVtLmdldEdyb3VwSWQoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGluR3JvdXAgPSBzZWVuR3JvdXBzLmdldChncm91cElkKTsKLSAgICAgICAgICAgICAgICBib29sZWFuIGlzQWN0aW9uID0gKG1heEFjdGlvbnMgPiAwIHx8IGluR3JvdXApICYmIHdpZHRoTGltaXQgPiAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAoIW1TdHJpY3RXaWR0aExpbWl0IHx8IGNlbGxzUmVtYWluaW5nID4gMCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNBY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgVmlldyB2ID0gZ2V0SXRlbVZpZXcoaXRlbSwgbVNjcmFwQWN0aW9uQnV0dG9uVmlldywgcGFyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TY3JhcEFjdGlvbkJ1dHRvblZpZXcgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVNjcmFwQWN0aW9uQnV0dG9uVmlldyA9IHY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TdHJpY3RXaWR0aExpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY2VsbHMgPSBBY3Rpb25NZW51Vmlldy5tZWFzdXJlQ2hpbGRGb3JDZWxscyh2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsU2l6ZSwgY2VsbHNSZW1haW5pbmcsIHF1ZXJ5U3BlYywgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjZWxsc1JlbWFpbmluZyAtPSBjZWxsczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxscyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubWVhc3VyZShxdWVyeVNwZWMsIHF1ZXJ5U3BlYyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IG1lYXN1cmVkV2lkdGggPSB2LmdldE1lYXN1cmVkV2lkdGgoKTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGhMaW1pdCAtPSBtZWFzdXJlZFdpZHRoOwotICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RBY3Rpb25XaWR0aCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEFjdGlvbldpZHRoID0gbWVhc3VyZWRXaWR0aDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtU3RyaWN0V2lkdGhMaW1pdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3Rpb24gJj0gd2lkdGhMaW1pdCA+PSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHRoaXMgcHVzaCB0aGUgZW50aXJlIGZpcnN0IGl0ZW0gcGFzdCB0aGUgbGltaXQ/Ci0gICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGlvbiAmPSB3aWR0aExpbWl0ICsgZmlyc3RBY3Rpb25XaWR0aCA+IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNBY3Rpb24gJiYgZ3JvdXBJZCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlZW5Hcm91cHMucHV0KGdyb3VwSWQsIHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5Hcm91cCkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBicm9rZSB0aGUgd2lkdGggbGltaXQuIERlbW90ZSB0aGUgd2hvbGUgZ3JvdXAsIHRoZXkgYWxsIG92ZXJmbG93IG5vdy4KLSAgICAgICAgICAgICAgICAgICAgc2Vlbkdyb3Vwcy5wdXQoZ3JvdXBJZCwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgTWVudUl0ZW1JbXBsIGFyZVlvdU15R3JvdXBpZSA9IHZpc2libGVJdGVtcy5nZXQoaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJlWW91TXlHcm91cGllLmdldEdyb3VwSWQoKSA9PSBncm91cElkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2l2ZSBiYWNrIHRoZSBhY3Rpb24gc2xvdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmVZb3VNeUdyb3VwaWUuaXNBY3Rpb25CdXR0b24oKSkgbWF4QWN0aW9ucysrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZVlvdU15R3JvdXBpZS5zZXRJc0FjdGlvbkJ1dHRvbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNBY3Rpb24pIG1heEFjdGlvbnMtLTsKLQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0SXNBY3Rpb25CdXR0b24oaXNBY3Rpb24pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBOZWl0aGVyIHJlcXVpcmVzIG5vciByZXF1ZXN0cyBhbiBhY3Rpb24gYnV0dG9uLgotICAgICAgICAgICAgICAgIGl0ZW0uc2V0SXNBY3Rpb25CdXR0b24oZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2xvc2VNZW51KE1lbnVCdWlsZGVyIG1lbnUsIGJvb2xlYW4gYWxsTWVudXNBcmVDbG9zaW5nKSB7Ci0gICAgICAgIGRpc21pc3NQb3B1cE1lbnVzKCk7Ci0gICAgICAgIHN1cGVyLm9uQ2xvc2VNZW51KG1lbnUsIGFsbE1lbnVzQXJlQ2xvc2luZyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFBhcmNlbGFibGUgb25TYXZlSW5zdGFuY2VTdGF0ZSgpIHsKLSAgICAgICAgU2F2ZWRTdGF0ZSBzdGF0ZSA9IG5ldyBTYXZlZFN0YXRlKCk7Ci0gICAgICAgIHN0YXRlLm9wZW5TdWJNZW51SWQgPSBtT3BlblN1Yk1lbnVJZDsKLSAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUmVzdG9yZUluc3RhbmNlU3RhdGUoUGFyY2VsYWJsZSBzdGF0ZSkgewotICAgICAgICBTYXZlZFN0YXRlIHNhdmVkID0gKFNhdmVkU3RhdGUpIHN0YXRlOwotICAgICAgICBpZiAoc2F2ZWQub3BlblN1Yk1lbnVJZCA+IDApIHsKLSAgICAgICAgICAgIE1lbnVJdGVtIGl0ZW0gPSBtTWVudS5maW5kSXRlbShzYXZlZC5vcGVuU3ViTWVudUlkKTsKLSAgICAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTdWJNZW51QnVpbGRlciBzdWJNZW51ID0gKFN1Yk1lbnVCdWlsZGVyKSBpdGVtLmdldFN1Yk1lbnUoKTsKLSAgICAgICAgICAgICAgICBvblN1Yk1lbnVTZWxlY3RlZChzdWJNZW51KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU3ViVWlWaXNpYmlsaXR5Q2hhbmdlZChib29sZWFuIGlzVmlzaWJsZSkgewotICAgICAgICBpZiAoaXNWaXNpYmxlKSB7Ci0gICAgICAgICAgICAvLyBOb3QgYSBzdWJtZW51LCBidXQgdHJlYXQgaXQgbGlrZSBvbmUuCi0gICAgICAgICAgICBzdXBlci5vblN1Yk1lbnVTZWxlY3RlZChudWxsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1NZW51LmNsb3NlKGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFNhdmVkU3RhdGUgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKLSAgICAgICAgcHVibGljIGludCBvcGVuU3ViTWVudUlkOwotCi0gICAgICAgIFNhdmVkU3RhdGUoKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBTYXZlZFN0YXRlKFBhcmNlbCBpbikgewotICAgICAgICAgICAgb3BlblN1Yk1lbnVJZCA9IGluLnJlYWRJbnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQob3BlblN1Yk1lbnVJZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxTYXZlZFN0YXRlPiBDUkVBVE9SCi0gICAgICAgICAgICAgICAgPSBuZXcgUGFyY2VsYWJsZS5DcmVhdG9yPFNhdmVkU3RhdGU+KCkgewotICAgICAgICAgICAgcHVibGljIFNhdmVkU3RhdGUgY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNhdmVkU3RhdGUoaW4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgU2F2ZWRTdGF0ZVtdIG5ld0FycmF5KGludCBzaXplKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTYXZlZFN0YXRlW3NpemVdOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgT3ZlcmZsb3dNZW51QnV0dG9uIGV4dGVuZHMgSW1hZ2VCdXR0b24gaW1wbGVtZW50cyBBY3Rpb25NZW51Q2hpbGRWaWV3IHsKLSAgICAgICAgcHVibGljIE92ZXJmbG93TWVudUJ1dHRvbihDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIG51bGwsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5hY3Rpb25PdmVyZmxvd0J1dHRvblN0eWxlKTsKLQotICAgICAgICAgICAgc2V0Q2xpY2thYmxlKHRydWUpOwotICAgICAgICAgICAgc2V0Rm9jdXNhYmxlKHRydWUpOwotICAgICAgICAgICAgc2V0VmlzaWJpbGl0eShWSVNJQkxFKTsKLSAgICAgICAgICAgIHNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICAgICAgICAgIHNldE9uVG91Y2hMaXN0ZW5lcihuZXcgRm9yd2FyZGluZ0xpc3RlbmVyKHRoaXMpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgTGlzdFBvcHVwV2luZG93IGdldFBvcHVwKCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobU92ZXJmbG93UG9wdXAgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbU92ZXJmbG93UG9wdXAuZ2V0UG9wdXAoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbkZvcndhcmRpbmdTdGFydGVkKCkgewotICAgICAgICAgICAgICAgICAgICBzaG93T3ZlcmZsb3dNZW51KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uRm9yd2FyZGluZ1N0b3BwZWQoKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIERpc3BsYXlpbmcgdGhlIHBvcHVwIG9jY3VycyBhc3luY2hyb25vdXNseSwgc28gd2FpdCBmb3IKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHJ1bm5hYmxlIHRvIGZpbmlzaCBiZWZvcmUgZGVjaWRpbmcgd2hldGhlciB0byBzdG9wCi0gICAgICAgICAgICAgICAgICAgIC8vIGZvcndhcmRpbmcuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtUG9zdGVkT3BlblJ1bm5hYmxlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGhpZGVPdmVyZmxvd01lbnUoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUNsaWNrKCkgewotICAgICAgICAgICAgaWYgKHN1cGVyLnBlcmZvcm1DbGljaygpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBsYXlTb3VuZEVmZmVjdChTb3VuZEVmZmVjdENvbnN0YW50cy5DTElDSyk7Ci0gICAgICAgICAgICBzaG93T3ZlcmZsb3dNZW51KCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBuZWVkc0RpdmlkZXJCZWZvcmUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gbmVlZHNEaXZpZGVyQWZ0ZXIoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKLSAgICAgICAgICAgIGlmIChNZWFzdXJlU3BlYy5nZXRNb2RlKGhlaWdodE1lYXN1cmVTcGVjKSA9PSBNZWFzdXJlU3BlYy5BVF9NT1NUKSB7Ci0gICAgICAgICAgICAgICAgLy8gRmlsbCBhdmFpbGFibGUgaGVpZ2h0Ci0gICAgICAgICAgICAgICAgaGVpZ2h0TWVhc3VyZVNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoCi0gICAgICAgICAgICAgICAgICAgICAgICBNZWFzdXJlU3BlYy5nZXRTaXplKGhlaWdodE1lYXN1cmVTcGVjKSwgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdXBlci5vbk1lYXN1cmUod2lkdGhNZWFzdXJlU3BlYywgaGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gaW5mbykgewotICAgICAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKGluZm8pOwotICAgICAgICAgICAgaW5mby5zZXRDYW5PcGVuUG9wdXAodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIE92ZXJmbG93UG9wdXAgZXh0ZW5kcyBNZW51UG9wdXBIZWxwZXIgewotICAgICAgICBwdWJsaWMgT3ZlcmZsb3dQb3B1cChDb250ZXh0IGNvbnRleHQsIE1lbnVCdWlsZGVyIG1lbnUsIFZpZXcgYW5jaG9yVmlldywKLSAgICAgICAgICAgICAgICBib29sZWFuIG92ZXJmbG93T25seSkgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgbWVudSwgYW5jaG9yVmlldywgb3ZlcmZsb3dPbmx5KTsKLSAgICAgICAgICAgIHNldEdyYXZpdHkoR3Jhdml0eS5FTkQpOwotICAgICAgICAgICAgc2V0Q2FsbGJhY2sobVBvcHVwUHJlc2VudGVyQ2FsbGJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRGlzbWlzcygpIHsKLSAgICAgICAgICAgIHN1cGVyLm9uRGlzbWlzcygpOwotICAgICAgICAgICAgbU1lbnUuY2xvc2UoKTsKLSAgICAgICAgICAgIG1PdmVyZmxvd1BvcHVwID0gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgQWN0aW9uQnV0dG9uU3VibWVudSBleHRlbmRzIE1lbnVQb3B1cEhlbHBlciB7Ci0gICAgICAgIHByaXZhdGUgU3ViTWVudUJ1aWxkZXIgbVN1Yk1lbnU7Ci0KLSAgICAgICAgcHVibGljIEFjdGlvbkJ1dHRvblN1Ym1lbnUoQ29udGV4dCBjb250ZXh0LCBTdWJNZW51QnVpbGRlciBzdWJNZW51KSB7Ci0gICAgICAgICAgICBzdXBlcihjb250ZXh0LCBzdWJNZW51KTsKLSAgICAgICAgICAgIG1TdWJNZW51ID0gc3ViTWVudTsKLQotICAgICAgICAgICAgTWVudUl0ZW1JbXBsIGl0ZW0gPSAoTWVudUl0ZW1JbXBsKSBzdWJNZW51LmdldEl0ZW0oKTsKLSAgICAgICAgICAgIGlmICghaXRlbS5pc0FjdGlvbkJ1dHRvbigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gR2l2ZSBhIHJlYXNvbmFibGUgYW5jaG9yIHRvIG5lc3RlZCBzdWJtZW51cy4KLSAgICAgICAgICAgICAgICBzZXRBbmNob3JWaWV3KG1PdmVyZmxvd0J1dHRvbiA9PSBudWxsID8gKFZpZXcpIG1NZW51VmlldyA6IG1PdmVyZmxvd0J1dHRvbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldENhbGxiYWNrKG1Qb3B1cFByZXNlbnRlckNhbGxiYWNrKTsKLQotICAgICAgICAgICAgYm9vbGVhbiBwcmVzZXJ2ZUljb25TcGFjaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBzdWJNZW51LnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIE1lbnVJdGVtIGNoaWxkSXRlbSA9IHN1Yk1lbnUuZ2V0SXRlbShpKTsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGRJdGVtLmlzVmlzaWJsZSgpICYmIGNoaWxkSXRlbS5nZXRJY29uKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUljb25TcGFjaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0Rm9yY2VTaG93SWNvbihwcmVzZXJ2ZUljb25TcGFjaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkRpc21pc3MoKSB7Ci0gICAgICAgICAgICBzdXBlci5vbkRpc21pc3MoKTsKLSAgICAgICAgICAgIG1BY3Rpb25CdXR0b25Qb3B1cCA9IG51bGw7Ci0gICAgICAgICAgICBtT3BlblN1Yk1lbnVJZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIFBvcHVwUHJlc2VudGVyQ2FsbGJhY2sgaW1wbGVtZW50cyBNZW51UHJlc2VudGVyLkNhbGxiYWNrIHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gb25PcGVuU3ViTWVudShNZW51QnVpbGRlciBzdWJNZW51KSB7Ci0gICAgICAgICAgICBpZiAoc3ViTWVudSA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIG1PcGVuU3ViTWVudUlkID0gKChTdWJNZW51QnVpbGRlcikgc3ViTWVudSkuZ2V0SXRlbSgpLmdldEl0ZW1JZCgpOwotICAgICAgICAgICAgZmluYWwgTWVudVByZXNlbnRlci5DYWxsYmFjayBjYiA9IGdldENhbGxiYWNrKCk7Ci0gICAgICAgICAgICByZXR1cm4gY2IgIT0gbnVsbCA/IGNiLm9uT3BlblN1Yk1lbnUoc3ViTWVudSkgOiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsb3NlTWVudShNZW51QnVpbGRlciBtZW51LCBib29sZWFuIGFsbE1lbnVzQXJlQ2xvc2luZykgewotICAgICAgICAgICAgaWYgKG1lbnUgaW5zdGFuY2VvZiBTdWJNZW51QnVpbGRlcikgewotICAgICAgICAgICAgICAgICgoU3ViTWVudUJ1aWxkZXIpIG1lbnUpLmdldFJvb3RNZW51KCkuY2xvc2UoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWwgTWVudVByZXNlbnRlci5DYWxsYmFjayBjYiA9IGdldENhbGxiYWNrKCk7Ci0gICAgICAgICAgICBpZiAoY2IgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGNiLm9uQ2xvc2VNZW51KG1lbnUsIGFsbE1lbnVzQXJlQ2xvc2luZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIE9wZW5PdmVyZmxvd1J1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgewotICAgICAgICBwcml2YXRlIE92ZXJmbG93UG9wdXAgbVBvcHVwOwotCi0gICAgICAgIHB1YmxpYyBPcGVuT3ZlcmZsb3dSdW5uYWJsZShPdmVyZmxvd1BvcHVwIHBvcHVwKSB7Ci0gICAgICAgICAgICBtUG9wdXAgPSBwb3B1cDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIG1NZW51LmNoYW5nZU1lbnVNb2RlKCk7Ci0gICAgICAgICAgICBmaW5hbCBWaWV3IG1lbnVWaWV3ID0gKFZpZXcpIG1NZW51VmlldzsKLSAgICAgICAgICAgIGlmIChtZW51VmlldyAhPSBudWxsICYmIG1lbnVWaWV3LmdldFdpbmRvd1Rva2VuKCkgIT0gbnVsbCAmJiBtUG9wdXAudHJ5U2hvdygpKSB7Ci0gICAgICAgICAgICAgICAgbU92ZXJmbG93UG9wdXAgPSBtUG9wdXA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtUG9zdGVkT3BlblJ1bm5hYmxlID0gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQWN0aW9uTWVudVZpZXcuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQWN0aW9uTWVudVZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhMjAzMS4uMDAwMDAwMAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0FjdGlvbk1lbnVWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0RlYnVnOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwotCi0vKioKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBjbGFzcyBBY3Rpb25NZW51VmlldyBleHRlbmRzIExpbmVhckxheW91dCBpbXBsZW1lbnRzIE1lbnVCdWlsZGVyLkl0ZW1JbnZva2VyLCBNZW51VmlldyB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJBY3Rpb25NZW51VmlldyI7Ci0gICAgCi0gICAgc3RhdGljIGZpbmFsIGludCBNSU5fQ0VMTF9TSVpFID0gNTY7IC8vIGRpcHMKLSAgICBzdGF0aWMgZmluYWwgaW50IEdFTkVSQVRFRF9JVEVNX1BBRERJTkcgPSA0OyAvLyBkaXBzCi0KLSAgICBwcml2YXRlIE1lbnVCdWlsZGVyIG1NZW51OwotCi0gICAgcHJpdmF0ZSBib29sZWFuIG1SZXNlcnZlT3ZlcmZsb3c7Ci0gICAgcHJpdmF0ZSBBY3Rpb25NZW51UHJlc2VudGVyIG1QcmVzZW50ZXI7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Gb3JtYXRJdGVtczsKLSAgICBwcml2YXRlIGludCBtRm9ybWF0SXRlbXNXaWR0aDsKLSAgICBwcml2YXRlIGludCBtTWluQ2VsbFNpemU7Ci0gICAgcHJpdmF0ZSBpbnQgbUdlbmVyYXRlZEl0ZW1QYWRkaW5nOwotICAgIHByaXZhdGUgaW50IG1NZWFzdXJlZEV4dHJhV2lkdGg7Ci0gICAgcHJpdmF0ZSBpbnQgbU1heEl0ZW1IZWlnaHQ7Ci0KLSAgICBwdWJsaWMgQWN0aW9uTWVudVZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBBY3Rpb25NZW51VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgIHNldEJhc2VsaW5lQWxpZ25lZChmYWxzZSk7Ci0gICAgICAgIGZpbmFsIGZsb2F0IGRlbnNpdHkgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eTsKLSAgICAgICAgbU1pbkNlbGxTaXplID0gKGludCkgKE1JTl9DRUxMX1NJWkUgKiBkZW5zaXR5KTsKLSAgICAgICAgbUdlbmVyYXRlZEl0ZW1QYWRkaW5nID0gKGludCkgKEdFTkVSQVRFRF9JVEVNX1BBRERJTkcgKiBkZW5zaXR5KTsKLQotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLkFjdGlvbkJhciwKLSAgICAgICAgICAgICAgICBSLmF0dHIuYWN0aW9uQmFyU3R5bGUsIDApOwotICAgICAgICBtTWF4SXRlbUhlaWdodCA9IGEuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuc3R5bGVhYmxlLkFjdGlvbkJhcl9oZWlnaHQsIDApOwotICAgICAgICBhLnJlY3ljbGUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQcmVzZW50ZXIoQWN0aW9uTWVudVByZXNlbnRlciBwcmVzZW50ZXIpIHsKLSAgICAgICAgbVByZXNlbnRlciA9IHByZXNlbnRlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0V4cGFuZGVkRm9ybWF0KCkgewotICAgICAgICByZXR1cm4gbUZvcm1hdEl0ZW1zOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE1heEl0ZW1IZWlnaHQoaW50IG1heEl0ZW1IZWlnaHQpIHsKLSAgICAgICAgbU1heEl0ZW1IZWlnaHQgPSBtYXhJdGVtSGVpZ2h0OwotICAgICAgICByZXF1ZXN0TGF5b3V0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZChDb25maWd1cmF0aW9uIG5ld0NvbmZpZykgewotICAgICAgICBzdXBlci5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKG5ld0NvbmZpZyk7Ci0gICAgICAgIG1QcmVzZW50ZXIudXBkYXRlTWVudVZpZXcoZmFsc2UpOwotCi0gICAgICAgIGlmIChtUHJlc2VudGVyICE9IG51bGwgJiYgbVByZXNlbnRlci5pc092ZXJmbG93TWVudVNob3dpbmcoKSkgewotICAgICAgICAgICAgbVByZXNlbnRlci5oaWRlT3ZlcmZsb3dNZW51KCk7Ci0gICAgICAgICAgICBtUHJlc2VudGVyLnNob3dPdmVyZmxvd01lbnUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uTWVhc3VyZShpbnQgd2lkdGhNZWFzdXJlU3BlYywgaW50IGhlaWdodE1lYXN1cmVTcGVjKSB7Ci0gICAgICAgIC8vIElmIHdlJ3ZlIGJlZW4gZ2l2ZW4gYW4gZXhhY3Qgc2l6ZSB0byBtYXRjaCwgYXBwbHkgc3BlY2lhbCBmb3JtYXR0aW5nIGR1cmluZyBsYXlvdXQuCi0gICAgICAgIGZpbmFsIGJvb2xlYW4gd2FzRm9ybWF0dGVkID0gbUZvcm1hdEl0ZW1zOwotICAgICAgICBtRm9ybWF0SXRlbXMgPSBNZWFzdXJlU3BlYy5nZXRNb2RlKHdpZHRoTWVhc3VyZVNwZWMpID09IE1lYXN1cmVTcGVjLkVYQUNUTFk7Ci0KLSAgICAgICAgaWYgKHdhc0Zvcm1hdHRlZCAhPSBtRm9ybWF0SXRlbXMpIHsKLSAgICAgICAgICAgIG1Gb3JtYXRJdGVtc1dpZHRoID0gMDsgLy8gUmVzZXQgdGhpcyB3aGVuIHN3aXRjaGluZyBtb2RlcwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3BlY2lhbCBmb3JtYXR0aW5nIGNhbiBjaGFuZ2Ugd2hldGhlciBpdGVtcyBjYW4gZml0IGFzIGFjdGlvbiBidXR0b25zLgotICAgICAgICAvLyBLaWNrIHRoZSBtZW51IGFuZCB1cGRhdGUgcHJlc2VudGVycyB3aGVuIHRoaXMgY2hhbmdlcy4KLSAgICAgICAgZmluYWwgaW50IHdpZHRoU2l6ZSA9IE1lYXN1cmVTcGVjLmdldFNpemUod2lkdGhNZWFzdXJlU3BlYyk7Ci0gICAgICAgIGlmIChtRm9ybWF0SXRlbXMgJiYgbU1lbnUgIT0gbnVsbCAmJiB3aWR0aFNpemUgIT0gbUZvcm1hdEl0ZW1zV2lkdGgpIHsKLSAgICAgICAgICAgIG1Gb3JtYXRJdGVtc1dpZHRoID0gd2lkdGhTaXplOwotICAgICAgICAgICAgbU1lbnUub25JdGVtc0NoYW5nZWQodHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUZvcm1hdEl0ZW1zKSB7Ci0gICAgICAgICAgICBvbk1lYXN1cmVFeGFjdEZvcm1hdCh3aWR0aE1lYXN1cmVTcGVjLCBoZWlnaHRNZWFzdXJlU3BlYyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBQcmV2aW91cyBtZWFzdXJlbWVudCBhdCBleGFjdCBmb3JtYXQgbWF5IGhhdmUgc2V0IG1hcmdpbnMgLSByZXNldCB0aGVtLgotICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBnZXRDaGlsZENvdW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRDaGlsZEF0KGkpOwotICAgICAgICAgICAgICAgIGZpbmFsIExheW91dFBhcmFtcyBscCA9IChMYXlvdXRQYXJhbXMpIGNoaWxkLmdldExheW91dFBhcmFtcygpOwotICAgICAgICAgICAgICAgIGxwLmxlZnRNYXJnaW4gPSBscC5yaWdodE1hcmdpbiA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdXBlci5vbk1lYXN1cmUod2lkdGhNZWFzdXJlU3BlYywgaGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG9uTWVhc3VyZUV4YWN0Rm9ybWF0KGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKLSAgICAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoZSB3aWR0aCBtb2RlIGlzIEVYQUNUTFkgaWYgd2UncmUgaGVyZS4KLSAgICAgICAgZmluYWwgaW50IGhlaWdodE1vZGUgPSBNZWFzdXJlU3BlYy5nZXRNb2RlKGhlaWdodE1lYXN1cmVTcGVjKTsKLSAgICAgICAgaW50IHdpZHRoU2l6ZSA9IE1lYXN1cmVTcGVjLmdldFNpemUod2lkdGhNZWFzdXJlU3BlYyk7Ci0gICAgICAgIGludCBoZWlnaHRTaXplID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZShoZWlnaHRNZWFzdXJlU3BlYyk7Ci0KLSAgICAgICAgZmluYWwgaW50IHdpZHRoUGFkZGluZyA9IGdldFBhZGRpbmdMZWZ0KCkgKyBnZXRQYWRkaW5nUmlnaHQoKTsKLSAgICAgICAgZmluYWwgaW50IGhlaWdodFBhZGRpbmcgPSBnZXRQYWRkaW5nVG9wKCkgKyBnZXRQYWRkaW5nQm90dG9tKCk7Ci0KLSAgICAgICAgZmluYWwgaW50IGl0ZW1IZWlnaHRTcGVjID0gaGVpZ2h0TW9kZSA9PSBNZWFzdXJlU3BlYy5FWEFDVExZCi0gICAgICAgICAgICAgICAgPyBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoaGVpZ2h0U2l6ZSAtIGhlaWdodFBhZGRpbmcsIE1lYXN1cmVTcGVjLkVYQUNUTFkpCi0gICAgICAgICAgICAgICAgOiBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoCi0gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG1NYXhJdGVtSGVpZ2h0LCBoZWlnaHRTaXplIC0gaGVpZ2h0UGFkZGluZyksIE1lYXN1cmVTcGVjLkFUX01PU1QpOwotCi0gICAgICAgIHdpZHRoU2l6ZSAtPSB3aWR0aFBhZGRpbmc7Ci0KLSAgICAgICAgLy8gRGl2aWRlIHRoZSB2aWV3IGludG8gY2VsbHMuCi0gICAgICAgIGZpbmFsIGludCBjZWxsQ291bnQgPSB3aWR0aFNpemUgLyBtTWluQ2VsbFNpemU7Ci0gICAgICAgIGZpbmFsIGludCBjZWxsU2l6ZVJlbWFpbmluZyA9IHdpZHRoU2l6ZSAlIG1NaW5DZWxsU2l6ZTsKLQotICAgICAgICBpZiAoY2VsbENvdW50ID09IDApIHsKLSAgICAgICAgICAgIC8vIEdpdmUgdXAsIG5vdGhpbmcgZml0cy4KLSAgICAgICAgICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKHdpZHRoU2l6ZSwgMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBpbnQgY2VsbFNpemUgPSBtTWluQ2VsbFNpemUgKyBjZWxsU2l6ZVJlbWFpbmluZyAvIGNlbGxDb3VudDsKLQotICAgICAgICBpbnQgY2VsbHNSZW1haW5pbmcgPSBjZWxsQ291bnQ7Ci0gICAgICAgIGludCBtYXhDaGlsZEhlaWdodCA9IDA7Ci0gICAgICAgIGludCBtYXhDZWxsc1VzZWQgPSAwOwotICAgICAgICBpbnQgZXhwYW5kYWJsZUl0ZW1Db3VudCA9IDA7Ci0gICAgICAgIGludCB2aXNpYmxlSXRlbUNvdW50ID0gMDsKLSAgICAgICAgYm9vbGVhbiBoYXNPdmVyZmxvdyA9IGZhbHNlOwotCi0gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBhcyBhIGJpdGZpZWxkIHRvIGxvY2F0ZSB0aGUgc21hbGxlc3QgaXRlbXMgcHJlc2VudC4gQXNzdW1lcyBjaGlsZENvdW50IDwgNjQuCi0gICAgICAgIGxvbmcgc21hbGxlc3RJdGVtc0F0ID0gMDsKLQotICAgICAgICBmaW5hbCBpbnQgY2hpbGRDb3VudCA9IGdldENoaWxkQ291bnQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRDaGlsZEF0KGkpOwotICAgICAgICAgICAgaWYgKGNoaWxkLmdldFZpc2liaWxpdHkoKSA9PSBHT05FKSBjb250aW51ZTsKLQotICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0dlbmVyYXRlZEl0ZW0gPSBjaGlsZCBpbnN0YW5jZW9mIEFjdGlvbk1lbnVJdGVtVmlldzsKLSAgICAgICAgICAgIHZpc2libGVJdGVtQ291bnQrKzsKLQotICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGVkSXRlbSkgewotICAgICAgICAgICAgICAgIC8vIFJlc2V0IHBhZGRpbmcgZm9yIGdlbmVyYXRlZCBtZW51IGl0ZW0gdmlld3M7IGl0IG1heSBjaGFuZ2UgYmVsb3cKLSAgICAgICAgICAgICAgICAvLyBhbmQgdmlld3MgYXJlIHJlY3ljbGVkLgotICAgICAgICAgICAgICAgIGNoaWxkLnNldFBhZGRpbmcobUdlbmVyYXRlZEl0ZW1QYWRkaW5nLCAwLCBtR2VuZXJhdGVkSXRlbVBhZGRpbmcsIDApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgbHAgPSAoTGF5b3V0UGFyYW1zKSBjaGlsZC5nZXRMYXlvdXRQYXJhbXMoKTsKLSAgICAgICAgICAgIGxwLmV4cGFuZGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBscC5leHRyYVBpeGVscyA9IDA7Ci0gICAgICAgICAgICBscC5jZWxsc1VzZWQgPSAwOwotICAgICAgICAgICAgbHAuZXhwYW5kYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgbHAubGVmdE1hcmdpbiA9IDA7Ci0gICAgICAgICAgICBscC5yaWdodE1hcmdpbiA9IDA7Ci0gICAgICAgICAgICBscC5wcmV2ZW50RWRnZU9mZnNldCA9IGlzR2VuZXJhdGVkSXRlbSAmJiAoKEFjdGlvbk1lbnVJdGVtVmlldykgY2hpbGQpLmhhc1RleHQoKTsKLQotICAgICAgICAgICAgLy8gT3ZlcmZsb3cgYWx3YXlzIGdldHMgMSBjZWxsLiBObyBtb3JlLCBubyBsZXNzLgotICAgICAgICAgICAgZmluYWwgaW50IGNlbGxzQXZhaWxhYmxlID0gbHAuaXNPdmVyZmxvd0J1dHRvbiA/IDEgOiBjZWxsc1JlbWFpbmluZzsKLQotICAgICAgICAgICAgZmluYWwgaW50IGNlbGxzVXNlZCA9IG1lYXN1cmVDaGlsZEZvckNlbGxzKGNoaWxkLCBjZWxsU2l6ZSwgY2VsbHNBdmFpbGFibGUsCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1IZWlnaHRTcGVjLCBoZWlnaHRQYWRkaW5nKTsKLQotICAgICAgICAgICAgbWF4Q2VsbHNVc2VkID0gTWF0aC5tYXgobWF4Q2VsbHNVc2VkLCBjZWxsc1VzZWQpOwotICAgICAgICAgICAgaWYgKGxwLmV4cGFuZGFibGUpIGV4cGFuZGFibGVJdGVtQ291bnQrKzsKLSAgICAgICAgICAgIGlmIChscC5pc092ZXJmbG93QnV0dG9uKSBoYXNPdmVyZmxvdyA9IHRydWU7Ci0KLSAgICAgICAgICAgIGNlbGxzUmVtYWluaW5nIC09IGNlbGxzVXNlZDsKLSAgICAgICAgICAgIG1heENoaWxkSGVpZ2h0ID0gTWF0aC5tYXgobWF4Q2hpbGRIZWlnaHQsIGNoaWxkLmdldE1lYXN1cmVkSGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYgKGNlbGxzVXNlZCA9PSAxKSBzbWFsbGVzdEl0ZW1zQXQgfD0gKDEgPDwgaSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXaGVuIHdlIGhhdmUgb3ZlcmZsb3cgYW5kIGEgc2luZ2xlIGV4cGFuZGVkICh0ZXh0KSBpdGVtLCB3ZSB3YW50IHRvIHRyeSBjZW50ZXJpbmcgaXQKLSAgICAgICAgLy8gdmlzdWFsbHkgaW4gdGhlIGF2YWlsYWJsZSBzcGFjZSBldmVuIHRob3VnaCBvdmVyZmxvdyBjb25zdW1lcyBzb21lIG9mIGl0LgotICAgICAgICBmaW5hbCBib29sZWFuIGNlbnRlclNpbmdsZUV4cGFuZGVkSXRlbSA9IGhhc092ZXJmbG93ICYmIHZpc2libGVJdGVtQ291bnQgPT0gMjsKLQotICAgICAgICAvLyBEaXZpZGUgc3BhY2UgZm9yIHJlbWFpbmluZyBjZWxscyBpZiB3ZSBoYXZlIGl0ZW1zIHRoYXQgY2FuIGV4cGFuZC4KLSAgICAgICAgLy8gVHJ5IGRpc3RyaWJ1dGluZyB3aG9sZSBsZWZ0b3ZlciBjZWxscyB0byBzbWFsbGVyIGl0ZW1zIGZpcnN0LgotCi0gICAgICAgIGJvb2xlYW4gbmVlZHNFeHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKGV4cGFuZGFibGVJdGVtQ291bnQgPiAwICYmIGNlbGxzUmVtYWluaW5nID4gMCkgewotICAgICAgICAgICAgaW50IG1pbkNlbGxzID0gSW50ZWdlci5NQVhfVkFMVUU7Ci0gICAgICAgICAgICBsb25nIG1pbkNlbGxzQXQgPSAwOyAvLyBCaXQgbG9jYXRpb25zIGFyZSBpbmRpY2VzIG9mIHJlbGV2YW50IGNoaWxkIHZpZXdzCi0gICAgICAgICAgICBpbnQgbWluQ2VsbHNJdGVtQ291bnQgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgbHAgPSAoTGF5b3V0UGFyYW1zKSBjaGlsZC5nZXRMYXlvdXRQYXJhbXMoKTsKLQotICAgICAgICAgICAgICAgIC8vIERvbid0IHRyeSB0byBleHBhbmQgaXRlbXMgdGhhdCBzaG91bGRuJ3QuCi0gICAgICAgICAgICAgICAgaWYgKCFscC5leHBhbmRhYmxlKSBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIC8vIE1hcmsgaW5kaWNlcyBvZiBjaGlsZHJlbiB0aGF0IGNhbiByZWNlaXZlIGFuIGV4dHJhIGNlbGwuCi0gICAgICAgICAgICAgICAgaWYgKGxwLmNlbGxzVXNlZCA8IG1pbkNlbGxzKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1pbkNlbGxzID0gbHAuY2VsbHNVc2VkOwotICAgICAgICAgICAgICAgICAgICBtaW5DZWxsc0F0ID0gMSA8PCBpOwotICAgICAgICAgICAgICAgICAgICBtaW5DZWxsc0l0ZW1Db3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChscC5jZWxsc1VzZWQgPT0gbWluQ2VsbHMpIHsKLSAgICAgICAgICAgICAgICAgICAgbWluQ2VsbHNBdCB8PSAxIDw8IGk7Ci0gICAgICAgICAgICAgICAgICAgIG1pbkNlbGxzSXRlbUNvdW50Kys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJdGVtcyB0aGF0IGdldCBleHBhbmRlZCB3aWxsIGFsd2F5cyBiZSBpbiB0aGUgc2V0IG9mIHNtYWxsZXN0IGl0ZW1zIHdoZW4gd2UncmUgZG9uZS4KLSAgICAgICAgICAgIHNtYWxsZXN0SXRlbXNBdCB8PSBtaW5DZWxsc0F0OwotCi0gICAgICAgICAgICBpZiAobWluQ2VsbHNJdGVtQ291bnQgPiBjZWxsc1JlbWFpbmluZykgYnJlYWs7IC8vIENvdWxkbid0IGV4cGFuZCBhbnl0aGluZyBldmVubHkuIFN0b3AuCi0KLSAgICAgICAgICAgIC8vIFdlIGhhdmUgZW5vdWdoIGNlbGxzLCBhbGwgbWluaW11bSBzaXplIGl0ZW1zIHdpbGwgYmUgaW5jcmVtZW50ZWQuCi0gICAgICAgICAgICBtaW5DZWxscysrOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRDaGlsZEF0KGkpOwotICAgICAgICAgICAgICAgIGZpbmFsIExheW91dFBhcmFtcyBscCA9IChMYXlvdXRQYXJhbXMpIGNoaWxkLmdldExheW91dFBhcmFtcygpOwotICAgICAgICAgICAgICAgIGlmICgobWluQ2VsbHNBdCAmICgxIDw8IGkpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXRlbSBpcyBhbHJlYWR5IGF0IG91ciBzbWFsbCBpdGVtIGNvdW50LCBtYXJrIGl0IGZvciBsYXRlci4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxwLmNlbGxzVXNlZCA9PSBtaW5DZWxscykgc21hbGxlc3RJdGVtc0F0IHw9IDEgPDwgaTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGNlbnRlclNpbmdsZUV4cGFuZGVkSXRlbSAmJiBscC5wcmV2ZW50RWRnZU9mZnNldCAmJiBjZWxsc1JlbWFpbmluZyA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nIHRvIHRoaXMgaXRlbSBzdWNoIHRoYXQgaXQgY2VudGVycy4KLSAgICAgICAgICAgICAgICAgICAgY2hpbGQuc2V0UGFkZGluZyhtR2VuZXJhdGVkSXRlbVBhZGRpbmcgKyBjZWxsU2l6ZSwgMCwgbUdlbmVyYXRlZEl0ZW1QYWRkaW5nLCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbHAuY2VsbHNVc2VkKys7Ci0gICAgICAgICAgICAgICAgbHAuZXhwYW5kZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNlbGxzUmVtYWluaW5nLS07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5lZWRzRXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERpdmlkZSBhbnkgc3BhY2UgbGVmdCB0aGF0IHdvdWxkbid0IGRpdmlkZSBhbG9uZyBjZWxsIGJvdW5kYXJpZXMKLSAgICAgICAgLy8gZXZlbmx5IGFtb25nIHRoZSBzbWFsbGVzdCBpdGVtcwotCi0gICAgICAgIGZpbmFsIGJvb2xlYW4gc2luZ2xlSXRlbSA9ICFoYXNPdmVyZmxvdyAmJiB2aXNpYmxlSXRlbUNvdW50ID09IDE7Ci0gICAgICAgIGlmIChjZWxsc1JlbWFpbmluZyA+IDAgJiYgc21hbGxlc3RJdGVtc0F0ICE9IDAgJiYKLSAgICAgICAgICAgICAgICAoY2VsbHNSZW1haW5pbmcgPCB2aXNpYmxlSXRlbUNvdW50IC0gMSB8fCBzaW5nbGVJdGVtIHx8IG1heENlbGxzVXNlZCA+IDEpKSB7Ci0gICAgICAgICAgICBmbG9hdCBleHBhbmRDb3VudCA9IExvbmcuYml0Q291bnQoc21hbGxlc3RJdGVtc0F0KTsKLQotICAgICAgICAgICAgaWYgKCFzaW5nbGVJdGVtKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGl0ZW1zIGF0IHRoZSBmYXIgZWRnZXMgbWF5IG9ubHkgZXhwYW5kIGJ5IGhhbGYgaW4gb3JkZXIgdG8gcGluIHRvIGVpdGhlciBzaWRlLgotICAgICAgICAgICAgICAgIGlmICgoc21hbGxlc3RJdGVtc0F0ICYgMSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMgbHAgPSAoTGF5b3V0UGFyYW1zKSBnZXRDaGlsZEF0KDApLmdldExheW91dFBhcmFtcygpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWxwLnByZXZlbnRFZGdlT2Zmc2V0KSBleHBhbmRDb3VudCAtPSAwLjVmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKHNtYWxsZXN0SXRlbXNBdCAmICgxIDw8IChjaGlsZENvdW50IC0gMSkpKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFBhcmFtcyBscCA9ICgoTGF5b3V0UGFyYW1zKSBnZXRDaGlsZEF0KGNoaWxkQ291bnQgLSAxKS5nZXRMYXlvdXRQYXJhbXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbHAucHJldmVudEVkZ2VPZmZzZXQpIGV4cGFuZENvdW50IC09IDAuNWY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBpbnQgZXh0cmFQaXhlbHMgPSBleHBhbmRDb3VudCA+IDAgPwotICAgICAgICAgICAgICAgICAgICAoaW50KSAoY2VsbHNSZW1haW5pbmcgKiBjZWxsU2l6ZSAvIGV4cGFuZENvdW50KSA6IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChzbWFsbGVzdEl0ZW1zQXQgJiAoMSA8PCBpKSkgPT0gMCkgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgbHAgPSAoTGF5b3V0UGFyYW1zKSBjaGlsZC5nZXRMYXlvdXRQYXJhbXMoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBBY3Rpb25NZW51SXRlbVZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBvbmUgb2Ygb3VyIHZpZXdzLCBleHBhbmQgYW5kIG1lYXN1cmUgYXQgdGhlIGxhcmdlciBzaXplLgotICAgICAgICAgICAgICAgICAgICBscC5leHRyYVBpeGVscyA9IGV4dHJhUGl4ZWxzOwotICAgICAgICAgICAgICAgICAgICBscC5leHBhbmRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID09IDAgJiYgIWxwLnByZXZlbnRFZGdlT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBpdGVtIGdldHMgcGFydCBvZiBpdHMgbmV3IHBhZGRpbmcgcHVzaGVkIG91dCBvZiBzaWdodC4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXN0IGl0ZW0gd2lsbCBnZXQgdGhpcyBpbXBsaWNpdGx5IGZyb20gbGF5b3V0LgotICAgICAgICAgICAgICAgICAgICAgICAgbHAubGVmdE1hcmdpbiA9IC1leHRyYVBpeGVscyAvIDI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbmVlZHNFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobHAuaXNPdmVyZmxvd0J1dHRvbikgewotICAgICAgICAgICAgICAgICAgICBscC5leHRyYVBpeGVscyA9IGV4dHJhUGl4ZWxzOwotICAgICAgICAgICAgICAgICAgICBscC5leHBhbmRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGxwLnJpZ2h0TWFyZ2luID0gLWV4dHJhUGl4ZWxzIC8gMjsKLSAgICAgICAgICAgICAgICAgICAgbmVlZHNFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGtub3cgd2hhdCBpdCBpcywgZ2l2ZSBpdCBzb21lIG1hcmdpbnMgaW5zdGVhZAotICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbGV0IGl0IGNlbnRlciB3aXRoaW4gaXRzIHNwYWNlLiBXZSBzdGlsbCB3YW50IHRvIHBpbgotICAgICAgICAgICAgICAgICAgICAvLyBhZ2FpbnN0IHRoZSBlZGdlcy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbHAubGVmdE1hcmdpbiA9IGV4dHJhUGl4ZWxzIC8gMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBjaGlsZENvdW50IC0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbHAucmlnaHRNYXJnaW4gPSBleHRyYVBpeGVscyAvIDI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNlbGxzUmVtYWluaW5nID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlbWVhc3VyZSBhbnkgaXRlbXMgdGhhdCBoYXZlIGhhZCBleHRyYSBzcGFjZSBhbGxvY2F0ZWQgdG8gdGhlbS4KLSAgICAgICAgaWYgKG5lZWRzRXhwYW5zaW9uKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRDaGlsZEF0KGkpOwotICAgICAgICAgICAgICAgIGZpbmFsIExheW91dFBhcmFtcyBscCA9IChMYXlvdXRQYXJhbXMpIGNoaWxkLmdldExheW91dFBhcmFtcygpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFscC5leHBhbmRlZCkgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgd2lkdGggPSBscC5jZWxsc1VzZWQgKiBjZWxsU2l6ZSArIGxwLmV4dHJhUGl4ZWxzOwotICAgICAgICAgICAgICAgIGNoaWxkLm1lYXN1cmUoTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKHdpZHRoLCBNZWFzdXJlU3BlYy5FWEFDVExZKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1IZWlnaHRTcGVjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoZWlnaHRNb2RlICE9IE1lYXN1cmVTcGVjLkVYQUNUTFkpIHsKLSAgICAgICAgICAgIGhlaWdodFNpemUgPSBtYXhDaGlsZEhlaWdodDsKLSAgICAgICAgfQotCi0gICAgICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKHdpZHRoU2l6ZSwgaGVpZ2h0U2l6ZSk7Ci0gICAgICAgIG1NZWFzdXJlZEV4dHJhV2lkdGggPSBjZWxsc1JlbWFpbmluZyAqIGNlbGxTaXplOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE1lYXN1cmUgYSBjaGlsZCB2aWV3IHRvIGZpdCB3aXRoaW4gY2VsbC1iYXNlZCBmb3JtYXR0aW5nLiBUaGUgY2hpbGQncyB3aWR0aAotICAgICAqIHdpbGwgYmUgbWVhc3VyZWQgdG8gYSB3aG9sZSBtdWx0aXBsZSBvZiBjZWxsU2l6ZS4KLSAgICAgKgotICAgICAqIDxwPlNldHMgdGhlIGV4cGFuZGFibGUgYW5kIGNlbGxzVXNlZCBmaWVsZHMgb2YgTGF5b3V0UGFyYW1zLgotICAgICAqCi0gICAgICogQHBhcmFtIGNoaWxkIENoaWxkIHRvIG1lYXN1cmUKLSAgICAgKiBAcGFyYW0gY2VsbFNpemUgU2l6ZSBvZiBvbmUgY2VsbAotICAgICAqIEBwYXJhbSBjZWxsc1JlbWFpbmluZyBOdW1iZXIgb2YgY2VsbHMgcmVtYWluaW5nIHRoYXQgdGhpcyB2aWV3IGNhbiBleHBhbmQgdG8gZmlsbAotICAgICAqIEBwYXJhbSBwYXJlbnRIZWlnaHRNZWFzdXJlU3BlYyBNZWFzdXJlU3BlYyB1c2VkIGJ5IHRoZSBwYXJlbnQgdmlldwotICAgICAqIEBwYXJhbSBwYXJlbnRIZWlnaHRQYWRkaW5nIFBhZGRpbmcgcHJlc2VudCBpbiB0aGUgcGFyZW50IHZpZXcKLSAgICAgKiBAcmV0dXJuIE51bWJlciBvZiBjZWxscyB0aGlzIGNoaWxkIHdhcyBtZWFzdXJlZCB0byBvY2N1cHkKLSAgICAgKi8KLSAgICBzdGF0aWMgaW50IG1lYXN1cmVDaGlsZEZvckNlbGxzKFZpZXcgY2hpbGQsIGludCBjZWxsU2l6ZSwgaW50IGNlbGxzUmVtYWluaW5nLAotICAgICAgICAgICAgaW50IHBhcmVudEhlaWdodE1lYXN1cmVTcGVjLCBpbnQgcGFyZW50SGVpZ2h0UGFkZGluZykgewotICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgbHAgPSAoTGF5b3V0UGFyYW1zKSBjaGlsZC5nZXRMYXlvdXRQYXJhbXMoKTsKLQotICAgICAgICBmaW5hbCBpbnQgY2hpbGRIZWlnaHRTaXplID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZShwYXJlbnRIZWlnaHRNZWFzdXJlU3BlYykgLQotICAgICAgICAgICAgICAgIHBhcmVudEhlaWdodFBhZGRpbmc7Ci0gICAgICAgIGZpbmFsIGludCBjaGlsZEhlaWdodE1vZGUgPSBNZWFzdXJlU3BlYy5nZXRNb2RlKHBhcmVudEhlaWdodE1lYXN1cmVTcGVjKTsKLSAgICAgICAgZmluYWwgaW50IGNoaWxkSGVpZ2h0U3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhjaGlsZEhlaWdodFNpemUsIGNoaWxkSGVpZ2h0TW9kZSk7Ci0KLSAgICAgICAgZmluYWwgQWN0aW9uTWVudUl0ZW1WaWV3IGl0ZW1WaWV3ID0gY2hpbGQgaW5zdGFuY2VvZiBBY3Rpb25NZW51SXRlbVZpZXcgPwotICAgICAgICAgICAgICAgIChBY3Rpb25NZW51SXRlbVZpZXcpIGNoaWxkIDogbnVsbDsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBoYXNUZXh0ID0gaXRlbVZpZXcgIT0gbnVsbCAmJiBpdGVtVmlldy5oYXNUZXh0KCk7Ci0KLSAgICAgICAgaW50IGNlbGxzVXNlZCA9IDA7Ci0gICAgICAgIGlmIChjZWxsc1JlbWFpbmluZyA+IDAgJiYgKCFoYXNUZXh0IHx8IGNlbGxzUmVtYWluaW5nID49IDIpKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRXaWR0aFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoCi0gICAgICAgICAgICAgICAgICAgIGNlbGxTaXplICogY2VsbHNSZW1haW5pbmcsIE1lYXN1cmVTcGVjLkFUX01PU1QpOwotICAgICAgICAgICAgY2hpbGQubWVhc3VyZShjaGlsZFdpZHRoU3BlYywgY2hpbGRIZWlnaHRTcGVjKTsKLQotICAgICAgICAgICAgZmluYWwgaW50IG1lYXN1cmVkV2lkdGggPSBjaGlsZC5nZXRNZWFzdXJlZFdpZHRoKCk7Ci0gICAgICAgICAgICBjZWxsc1VzZWQgPSBtZWFzdXJlZFdpZHRoIC8gY2VsbFNpemU7Ci0gICAgICAgICAgICBpZiAobWVhc3VyZWRXaWR0aCAlIGNlbGxTaXplICE9IDApIGNlbGxzVXNlZCsrOwotICAgICAgICAgICAgaWYgKGhhc1RleHQgJiYgY2VsbHNVc2VkIDwgMikgY2VsbHNVc2VkID0gMjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGJvb2xlYW4gZXhwYW5kYWJsZSA9ICFscC5pc092ZXJmbG93QnV0dG9uICYmIGhhc1RleHQ7Ci0gICAgICAgIGxwLmV4cGFuZGFibGUgPSBleHBhbmRhYmxlOwotCi0gICAgICAgIGxwLmNlbGxzVXNlZCA9IGNlbGxzVXNlZDsKLSAgICAgICAgZmluYWwgaW50IHRhcmdldFdpZHRoID0gY2VsbHNVc2VkICogY2VsbFNpemU7Ci0gICAgICAgIGNoaWxkLm1lYXN1cmUoTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKHRhcmdldFdpZHRoLCBNZWFzdXJlU3BlYy5FWEFDVExZKSwKLSAgICAgICAgICAgICAgICBjaGlsZEhlaWdodFNwZWMpOwotICAgICAgICByZXR1cm4gY2VsbHNVc2VkOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgewotICAgICAgICBpZiAoIW1Gb3JtYXRJdGVtcykgewotICAgICAgICAgICAgc3VwZXIub25MYXlvdXQoY2hhbmdlZCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gZ2V0Q2hpbGRDb3VudCgpOwotICAgICAgICBmaW5hbCBpbnQgbWlkVmVydGljYWwgPSAodG9wICsgYm90dG9tKSAvIDI7Ci0gICAgICAgIGZpbmFsIGludCBkaXZpZGVyV2lkdGggPSBnZXREaXZpZGVyV2lkdGgoKTsKLSAgICAgICAgaW50IG92ZXJmbG93V2lkdGggPSAwOwotICAgICAgICBpbnQgbm9uT3ZlcmZsb3dXaWR0aCA9IDA7Ci0gICAgICAgIGludCBub25PdmVyZmxvd0NvdW50ID0gMDsKLSAgICAgICAgaW50IHdpZHRoUmVtYWluaW5nID0gcmlnaHQgLSBsZWZ0IC0gZ2V0UGFkZGluZ1JpZ2h0KCkgLSBnZXRQYWRkaW5nTGVmdCgpOwotICAgICAgICBib29sZWFuIGhhc092ZXJmbG93ID0gZmFsc2U7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMYXlvdXRSdGwgPSBpc0xheW91dFJ0bCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgZmluYWwgVmlldyB2ID0gZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgIGlmICh2LmdldFZpc2liaWxpdHkoKSA9PSBHT05FKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExheW91dFBhcmFtcyBwID0gKExheW91dFBhcmFtcykgdi5nZXRMYXlvdXRQYXJhbXMoKTsKLSAgICAgICAgICAgIGlmIChwLmlzT3ZlcmZsb3dCdXR0b24pIHsKLSAgICAgICAgICAgICAgICBvdmVyZmxvd1dpZHRoID0gdi5nZXRNZWFzdXJlZFdpZHRoKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc0RpdmlkZXJCZWZvcmVDaGlsZEF0KGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93V2lkdGggKz0gZGl2aWRlcldpZHRoOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGludCBoZWlnaHQgPSB2LmdldE1lYXN1cmVkSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgaW50IHI7Ci0gICAgICAgICAgICAgICAgaW50IGw7Ci0gICAgICAgICAgICAgICAgaWYgKGlzTGF5b3V0UnRsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGwgPSBnZXRQYWRkaW5nTGVmdCgpICsgcC5sZWZ0TWFyZ2luOwotICAgICAgICAgICAgICAgICAgICByID0gbCArIG92ZXJmbG93V2lkdGg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgciA9IGdldFdpZHRoKCkgLSBnZXRQYWRkaW5nUmlnaHQoKSAtIHAucmlnaHRNYXJnaW47Ci0gICAgICAgICAgICAgICAgICAgIGwgPSByIC0gb3ZlcmZsb3dXaWR0aDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW50IHQgPSBtaWRWZXJ0aWNhbCAtIChoZWlnaHQgLyAyKTsKLSAgICAgICAgICAgICAgICBpbnQgYiA9IHQgKyBoZWlnaHQ7Ci0gICAgICAgICAgICAgICAgdi5sYXlvdXQobCwgdCwgciwgYik7Ci0KLSAgICAgICAgICAgICAgICB3aWR0aFJlbWFpbmluZyAtPSBvdmVyZmxvd1dpZHRoOwotICAgICAgICAgICAgICAgIGhhc092ZXJmbG93ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHNpemUgPSB2LmdldE1lYXN1cmVkV2lkdGgoKSArIHAubGVmdE1hcmdpbiArIHAucmlnaHRNYXJnaW47Ci0gICAgICAgICAgICAgICAgbm9uT3ZlcmZsb3dXaWR0aCArPSBzaXplOwotICAgICAgICAgICAgICAgIHdpZHRoUmVtYWluaW5nIC09IHNpemU7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc0RpdmlkZXJCZWZvcmVDaGlsZEF0KGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vbk92ZXJmbG93V2lkdGggKz0gZGl2aWRlcldpZHRoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBub25PdmVyZmxvd0NvdW50Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2hpbGRDb3VudCA9PSAxICYmICFoYXNPdmVyZmxvdykgewotICAgICAgICAgICAgLy8gQ2VudGVyIGEgc2luZ2xlIGNoaWxkCi0gICAgICAgICAgICBmaW5hbCBWaWV3IHYgPSBnZXRDaGlsZEF0KDApOwotICAgICAgICAgICAgZmluYWwgaW50IHdpZHRoID0gdi5nZXRNZWFzdXJlZFdpZHRoKCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gdi5nZXRNZWFzdXJlZEhlaWdodCgpOwotICAgICAgICAgICAgZmluYWwgaW50IG1pZEhvcml6b250YWwgPSAocmlnaHQgLSBsZWZ0KSAvIDI7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbCA9IG1pZEhvcml6b250YWwgLSB3aWR0aCAvIDI7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgdCA9IG1pZFZlcnRpY2FsIC0gaGVpZ2h0IC8gMjsKLSAgICAgICAgICAgIHYubGF5b3V0KGwsIHQsIGwgKyB3aWR0aCwgdCArIGhlaWdodCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBpbnQgc3BhY2VyQ291bnQgPSBub25PdmVyZmxvd0NvdW50IC0gKGhhc092ZXJmbG93ID8gMCA6IDEpOwotICAgICAgICBmaW5hbCBpbnQgc3BhY2VyU2l6ZSA9IE1hdGgubWF4KDAsIHNwYWNlckNvdW50ID4gMCA/IHdpZHRoUmVtYWluaW5nIC8gc3BhY2VyQ291bnQgOiAwKTsKLQotICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKLSAgICAgICAgICAgIGludCBzdGFydFJpZ2h0ID0gZ2V0V2lkdGgoKSAtIGdldFBhZGRpbmdSaWdodCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IHYgPSBnZXRDaGlsZEF0KGkpOwotICAgICAgICAgICAgICAgIGZpbmFsIExheW91dFBhcmFtcyBscCA9IChMYXlvdXRQYXJhbXMpIHYuZ2V0TGF5b3V0UGFyYW1zKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHYuZ2V0VmlzaWJpbGl0eSgpID09IEdPTkUgfHwgbHAuaXNPdmVyZmxvd0J1dHRvbikgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzdGFydFJpZ2h0IC09IGxwLnJpZ2h0TWFyZ2luOwotICAgICAgICAgICAgICAgIGludCB3aWR0aCA9IHYuZ2V0TWVhc3VyZWRXaWR0aCgpOwotICAgICAgICAgICAgICAgIGludCBoZWlnaHQgPSB2LmdldE1lYXN1cmVkSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgaW50IHQgPSBtaWRWZXJ0aWNhbCAtIGhlaWdodCAvIDI7Ci0gICAgICAgICAgICAgICAgdi5sYXlvdXQoc3RhcnRSaWdodCAtIHdpZHRoLCB0LCBzdGFydFJpZ2h0LCB0ICsgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBzdGFydFJpZ2h0IC09IHdpZHRoICsgbHAubGVmdE1hcmdpbiArIHNwYWNlclNpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc3RhcnRMZWZ0ID0gZ2V0UGFkZGluZ0xlZnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgVmlldyB2ID0gZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgbHAgPSAoTGF5b3V0UGFyYW1zKSB2LmdldExheW91dFBhcmFtcygpOwotICAgICAgICAgICAgICAgIGlmICh2LmdldFZpc2liaWxpdHkoKSA9PSBHT05FIHx8IGxwLmlzT3ZlcmZsb3dCdXR0b24pIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3RhcnRMZWZ0ICs9IGxwLmxlZnRNYXJnaW47Ci0gICAgICAgICAgICAgICAgaW50IHdpZHRoID0gdi5nZXRNZWFzdXJlZFdpZHRoKCk7Ci0gICAgICAgICAgICAgICAgaW50IGhlaWdodCA9IHYuZ2V0TWVhc3VyZWRIZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBpbnQgdCA9IG1pZFZlcnRpY2FsIC0gaGVpZ2h0IC8gMjsKLSAgICAgICAgICAgICAgICB2LmxheW91dChzdGFydExlZnQsIHQsIHN0YXJ0TGVmdCArIHdpZHRoLCB0ICsgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBzdGFydExlZnQgKz0gd2lkdGggKyBscC5yaWdodE1hcmdpbiArIHNwYWNlclNpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkRldGFjaGVkRnJvbVdpbmRvdygpIHsKLSAgICAgICAgc3VwZXIub25EZXRhY2hlZEZyb21XaW5kb3coKTsKLSAgICAgICAgbVByZXNlbnRlci5kaXNtaXNzUG9wdXBNZW51cygpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzT3ZlcmZsb3dSZXNlcnZlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1SZXNlcnZlT3ZlcmZsb3c7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldE92ZXJmbG93UmVzZXJ2ZWQoYm9vbGVhbiByZXNlcnZlT3ZlcmZsb3cpIHsKLSAgICAgICAgbVJlc2VydmVPdmVyZmxvdyA9IHJlc2VydmVPdmVyZmxvdzsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgTGF5b3V0UGFyYW1zIGdlbmVyYXRlRGVmYXVsdExheW91dFBhcmFtcygpIHsKLSAgICAgICAgTGF5b3V0UGFyYW1zIHBhcmFtcyA9IG5ldyBMYXlvdXRQYXJhbXMoTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCwKLSAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKTsKLSAgICAgICAgcGFyYW1zLmdyYXZpdHkgPSBHcmF2aXR5LkNFTlRFUl9WRVJUSUNBTDsKLSAgICAgICAgcmV0dXJuIHBhcmFtczsKLSAgICB9Ci0gICAgCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExheW91dFBhcmFtcyBnZW5lcmF0ZUxheW91dFBhcmFtcyhBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBMYXlvdXRQYXJhbXMoZ2V0Q29udGV4dCgpLCBhdHRycyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIExheW91dFBhcmFtcyBnZW5lcmF0ZUxheW91dFBhcmFtcyhWaWV3R3JvdXAuTGF5b3V0UGFyYW1zIHApIHsKLSAgICAgICAgaWYgKHAgIT0gbnVsbCkgewotICAgICAgICAgICAgZmluYWwgTGF5b3V0UGFyYW1zIHJlc3VsdCA9IHAgaW5zdGFuY2VvZiBMYXlvdXRQYXJhbXMKLSAgICAgICAgICAgICAgICAgICAgPyBuZXcgTGF5b3V0UGFyYW1zKChMYXlvdXRQYXJhbXMpIHApCi0gICAgICAgICAgICAgICAgICAgIDogbmV3IExheW91dFBhcmFtcyhwKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuZ3Jhdml0eSA8PSBHcmF2aXR5Lk5PX0dSQVZJVFkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuZ3Jhdml0eSA9IEdyYXZpdHkuQ0VOVEVSX1ZFUlRJQ0FMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZ2VuZXJhdGVEZWZhdWx0TGF5b3V0UGFyYW1zKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tMYXlvdXRQYXJhbXMoVmlld0dyb3VwLkxheW91dFBhcmFtcyBwKSB7Ci0gICAgICAgIHJldHVybiBwICE9IG51bGwgJiYgcCBpbnN0YW5jZW9mIExheW91dFBhcmFtczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGF5b3V0UGFyYW1zIGdlbmVyYXRlT3ZlcmZsb3dCdXR0b25MYXlvdXRQYXJhbXMoKSB7Ci0gICAgICAgIExheW91dFBhcmFtcyByZXN1bHQgPSBnZW5lcmF0ZURlZmF1bHRMYXlvdXRQYXJhbXMoKTsKLSAgICAgICAgcmVzdWx0LmlzT3ZlcmZsb3dCdXR0b24gPSB0cnVlOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGludm9rZUl0ZW0oTWVudUl0ZW1JbXBsIGl0ZW0pIHsKLSAgICAgICAgcmV0dXJuIG1NZW51LnBlcmZvcm1JdGVtQWN0aW9uKGl0ZW0sIDApOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0V2luZG93QW5pbWF0aW9ucygpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShNZW51QnVpbGRlciBtZW51KSB7Ci0gICAgICAgIG1NZW51ID0gbWVudTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBoYXNEaXZpZGVyQmVmb3JlQ2hpbGRBdChpbnQgY2hpbGRJbmRleCkgewotICAgICAgICBpZiAoY2hpbGRJbmRleCA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgVmlldyBjaGlsZEJlZm9yZSA9IGdldENoaWxkQXQoY2hpbGRJbmRleCAtIDEpOwotICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0Q2hpbGRBdChjaGlsZEluZGV4KTsKLSAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGNoaWxkSW5kZXggPCBnZXRDaGlsZENvdW50KCkgJiYgY2hpbGRCZWZvcmUgaW5zdGFuY2VvZiBBY3Rpb25NZW51Q2hpbGRWaWV3KSB7Ci0gICAgICAgICAgICByZXN1bHQgfD0gKChBY3Rpb25NZW51Q2hpbGRWaWV3KSBjaGlsZEJlZm9yZSkubmVlZHNEaXZpZGVyQWZ0ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2hpbGRJbmRleCA+IDAgJiYgY2hpbGQgaW5zdGFuY2VvZiBBY3Rpb25NZW51Q2hpbGRWaWV3KSB7Ci0gICAgICAgICAgICByZXN1bHQgfD0gKChBY3Rpb25NZW51Q2hpbGRWaWV3KSBjaGlsZCkubmVlZHNEaXZpZGVyQmVmb3JlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIGludGVyZmFjZSBBY3Rpb25NZW51Q2hpbGRWaWV3IHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gbmVlZHNEaXZpZGVyQmVmb3JlKCk7Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIG5lZWRzRGl2aWRlckFmdGVyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBMYXlvdXRQYXJhbXMgZXh0ZW5kcyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zIHsKLSAgICAgICAgQFZpZXdEZWJ1Zy5FeHBvcnRlZFByb3BlcnR5KGNhdGVnb3J5ID0gImxheW91dCIpCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzT3ZlcmZsb3dCdXR0b247Ci0gICAgICAgIEBWaWV3RGVidWcuRXhwb3J0ZWRQcm9wZXJ0eShjYXRlZ29yeSA9ICJsYXlvdXQiKQotICAgICAgICBwdWJsaWMgaW50IGNlbGxzVXNlZDsKLSAgICAgICAgQFZpZXdEZWJ1Zy5FeHBvcnRlZFByb3BlcnR5KGNhdGVnb3J5ID0gImxheW91dCIpCi0gICAgICAgIHB1YmxpYyBpbnQgZXh0cmFQaXhlbHM7Ci0gICAgICAgIEBWaWV3RGVidWcuRXhwb3J0ZWRQcm9wZXJ0eShjYXRlZ29yeSA9ICJsYXlvdXQiKQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBleHBhbmRhYmxlOwotICAgICAgICBAVmlld0RlYnVnLkV4cG9ydGVkUHJvcGVydHkoY2F0ZWdvcnkgPSAibGF5b3V0IikKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJldmVudEVkZ2VPZmZzZXQ7Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gZXhwYW5kZWQ7Ci0KLSAgICAgICAgcHVibGljIExheW91dFBhcmFtcyhDb250ZXh0IGMsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICAgICAgc3VwZXIoYywgYXR0cnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIExheW91dFBhcmFtcyhWaWV3R3JvdXAuTGF5b3V0UGFyYW1zIG90aGVyKSB7Ci0gICAgICAgICAgICBzdXBlcihvdGhlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcyBvdGhlcikgewotICAgICAgICAgICAgc3VwZXIoKExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMpIG90aGVyKTsKLSAgICAgICAgICAgIGlzT3ZlcmZsb3dCdXR0b24gPSBvdGhlci5pc092ZXJmbG93QnV0dG9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIExheW91dFBhcmFtcyhpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgICAgIHN1cGVyKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgaXNPdmVyZmxvd0J1dHRvbiA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIExheW91dFBhcmFtcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2xlYW4gaXNPdmVyZmxvd0J1dHRvbikgewotICAgICAgICAgICAgc3VwZXIod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICB0aGlzLmlzT3ZlcmZsb3dCdXR0b24gPSBpc092ZXJmbG93QnV0dG9uOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9JY29uTWVudUl0ZW1WaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0ljb25NZW51SXRlbVZpZXcuamF2YQppbmRleCA1ZDBiMjVmLi5kZTVlMjc5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0ljb25NZW51SXRlbVZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0ljb25NZW51SXRlbVZpZXcuamF2YQpAQCAtNTcsOCArNTcsOCBAQAogICAgIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzUHJlcGVuZFNob3J0Y3V0TGFiZWw7CiAKLSAgICBwdWJsaWMgSWNvbk1lbnVJdGVtVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICBwdWJsaWMgSWNvbk1lbnVJdGVtVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBpZiAoc1ByZXBlbmRTaG9ydGN1dExhYmVsID09IG51bGwpIHsKICAgICAgICAgICAgIC8qCkBAIC02OCwxMCArNjgsOSBAQAogICAgICAgICAgICAgc1ByZXBlbmRTaG9ydGN1dExhYmVsID0gZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKAogICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5wcmVwZW5kX3Nob3J0Y3V0X2xhYmVsKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVHlwZWRBcnJheSBhID0KLSAgICAgICAgICAgIGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTWVudVZpZXcsIGRlZlN0eWxlLCAwKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk1lbnVWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtRGlzYWJsZWRBbHBoYSA9IGEuZ2V0RmxvYXQoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTWVudVZpZXdfaXRlbUljb25EaXNhYmxlZEFscGhhLCAwLjhmKTsKQEAgLTgxLDcgKzgwLDExIEBACiAgICAgICAgIAogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICB9Ci0gICAgCisKKyAgICBwdWJsaWMgSWNvbk1lbnVJdGVtVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKwogICAgIHB1YmxpYyBJY29uTWVudUl0ZW1WaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTGlzdE1lbnVJdGVtVmlldy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9MaXN0TWVudUl0ZW1WaWV3LmphdmEKaW5kZXggYTJhNGFjYy4uNjkyYmRhYyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9MaXN0TWVudUl0ZW1WaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9MaXN0TWVudUl0ZW1WaWV3LmphdmEKQEAgLTU1LDEzICs1NSwxMyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIG1Gb3JjZVNob3dJY29uOwogCi0gICAgcHVibGljIExpc3RNZW51SXRlbVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9Ci0gICAgICAgICAgICBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk1lbnVWaWV3LCBkZWZTdHlsZSwgMCk7Ci0gICAgICAgIAorICAgIHB1YmxpYyBMaXN0TWVudUl0ZW1WaWV3KAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5NZW51VmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKICAgICAgICAgbUJhY2tncm91bmQgPSBhLmdldERyYXdhYmxlKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk1lbnVWaWV3X2l0ZW1CYWNrZ3JvdW5kKTsKICAgICAgICAgbVRleHRBcHBlYXJhbmNlID0gYS5nZXRSZXNvdXJjZUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVudVZpZXdfaXRlbVRleHRBcHBlYXJhbmNlLCAtMSk7CkBAIC03Miw2ICs3MiwxMCBAQAogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgTGlzdE1lbnVJdGVtVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKwogICAgIHB1YmxpYyBMaXN0TWVudUl0ZW1WaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTGlzdE1lbnVQcmVzZW50ZXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTGlzdE1lbnVQcmVzZW50ZXIuamF2YQppbmRleCA0ODgyYWRjLi5jNDc2MzU0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0xpc3RNZW51UHJlc2VudGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9MaXN0TWVudVByZXNlbnRlci5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudTsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuRGF0YVNldE9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CkBAIC0xNjMsNyArMTYyLDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uSXRlbUNsaWNrKEFkYXB0ZXJWaWV3PD8+IHBhcmVudCwgVmlldyB2aWV3LCBpbnQgcG9zaXRpb24sIGxvbmcgaWQpIHsKLSAgICAgICAgbU1lbnUucGVyZm9ybUl0ZW1BY3Rpb24obUFkYXB0ZXIuZ2V0SXRlbShwb3NpdGlvbiksIDApOworICAgICAgICBtTWVudS5wZXJmb3JtSXRlbUFjdGlvbihtQWRhcHRlci5nZXRJdGVtKHBvc2l0aW9uKSwgdGhpcywgMCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVCdWlsZGVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVCdWlsZGVyLmphdmEKaW5kZXggYWZmNjk3YS4uYjdjYjBkZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9NZW51QnVpbGRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTWVudUJ1aWxkZXIuamF2YQpAQCAtMjQ3LDExICsyNDcsMTcgQEAKICAgICAgICAgc3RhcnREaXNwYXRjaGluZ0l0ZW1zQ2hhbmdlZCgpOwogICAgIH0KICAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gZGlzcGF0Y2hTdWJNZW51U2VsZWN0ZWQoU3ViTWVudUJ1aWxkZXIgc3ViTWVudSkgeworICAgIHByaXZhdGUgYm9vbGVhbiBkaXNwYXRjaFN1Yk1lbnVTZWxlY3RlZChTdWJNZW51QnVpbGRlciBzdWJNZW51LAorICAgICAgICAgICAgTWVudVByZXNlbnRlciBwcmVmZXJyZWRQcmVzZW50ZXIpIHsKICAgICAgICAgaWYgKG1QcmVzZW50ZXJzLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAKKyAgICAgICAgLy8gVHJ5IHRoZSBwcmVmZXJyZWQgcHJlc2VudGVyIGZpcnN0LgorICAgICAgICBpZiAocHJlZmVycmVkUHJlc2VudGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZWZlcnJlZFByZXNlbnRlci5vblN1Yk1lbnVTZWxlY3RlZChzdWJNZW51KTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZTxNZW51UHJlc2VudGVyPiByZWYgOiBtUHJlc2VudGVycykgewogICAgICAgICAgICAgZmluYWwgTWVudVByZXNlbnRlciBwcmVzZW50ZXIgPSByZWYuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocHJlc2VudGVyID09IG51bGwpIHsKQEAgLTg2NSw2ICs4NzEsMTAgQEAKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtSXRlbUFjdGlvbihNZW51SXRlbSBpdGVtLCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgcmV0dXJuIHBlcmZvcm1JdGVtQWN0aW9uKGl0ZW0sIG51bGwsIGZsYWdzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtSXRlbUFjdGlvbihNZW51SXRlbSBpdGVtLCBNZW51UHJlc2VudGVyIHByZWZlcnJlZFByZXNlbnRlciwgaW50IGZsYWdzKSB7CiAgICAgICAgIE1lbnVJdGVtSW1wbCBpdGVtSW1wbCA9IChNZW51SXRlbUltcGwpIGl0ZW07CiAgICAgICAgIAogICAgICAgICBpZiAoaXRlbUltcGwgPT0gbnVsbCB8fCAhaXRlbUltcGwuaXNFbmFibGVkKCkpIHsKQEAgLTg4OSw3ICs4OTksNyBAQAogICAgICAgICAgICAgaWYgKHByb3ZpZGVySGFzU3ViTWVudSkgewogICAgICAgICAgICAgICAgIHByb3ZpZGVyLm9uUHJlcGFyZVN1Yk1lbnUoc3ViTWVudSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnZva2VkIHw9IGRpc3BhdGNoU3ViTWVudVNlbGVjdGVkKHN1Yk1lbnUpOworICAgICAgICAgICAgaW52b2tlZCB8PSBkaXNwYXRjaFN1Yk1lbnVTZWxlY3RlZChzdWJNZW51LCBwcmVmZXJyZWRQcmVzZW50ZXIpOwogICAgICAgICAgICAgaWYgKCFpbnZva2VkKSBjbG9zZSh0cnVlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX1BFUkZPUk1fTk9fQ0xPU0UpID09IDApIHsKQEAgLTkwOSw3ICs5MTksNyBAQAogICAgICAqICAgICAgICAgICAgc3ViIG1lbnUgaXMgYWJvdXQgdG8gYmUgc2hvd24sIDx2YXI+YWxsTWVudXNBcmVDbG9zaW5nPC92YXI+CiAgICAgICogICAgICAgICAgICBpcyBmYWxzZS4KICAgICAgKi8KLSAgICBmaW5hbCB2b2lkIGNsb3NlKGJvb2xlYW4gYWxsTWVudXNBcmVDbG9zaW5nKSB7CisgICAgcHVibGljIGZpbmFsIHZvaWQgY2xvc2UoYm9vbGVhbiBhbGxNZW51c0FyZUNsb3NpbmcpIHsKICAgICAgICAgaWYgKG1Jc0Nsb3NpbmcpIHJldHVybjsKIAogICAgICAgICBtSXNDbG9zaW5nID0gdHJ1ZTsKQEAgLTkzNiw3ICs5NDYsNyBAQAogICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIGlmIG9ubHkgaXRlbSBwcm9wZXJ0aWVzIGNoYW5nZWQuCiAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgKFZpc2liaWxpdHkgaXMgYSBzdHJ1Y3R1cmFsIHByb3BlcnR5IHNpbmNlIGl0IGFmZmVjdHMgbGF5b3V0LikKICAgICAgKi8KLSAgICB2b2lkIG9uSXRlbXNDaGFuZ2VkKGJvb2xlYW4gc3RydWN0dXJlQ2hhbmdlZCkgeworICAgIHB1YmxpYyB2b2lkIG9uSXRlbXNDaGFuZ2VkKGJvb2xlYW4gc3RydWN0dXJlQ2hhbmdlZCkgewogICAgICAgICBpZiAoIW1QcmV2ZW50RGlzcGF0Y2hpbmdJdGVtc0NoYW5nZWQpIHsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVDaGFuZ2VkKSB7CiAgICAgICAgICAgICAgICAgbUlzVmlzaWJsZUl0ZW1zU3RhbGUgPSB0cnVlOwpAQCAtOTkwLDcgKzEwMDAsNyBAQAogICAgICAgICBvbkl0ZW1zQ2hhbmdlZCh0cnVlKTsKICAgICB9CiAgICAgCi0gICAgQXJyYXlMaXN0PE1lbnVJdGVtSW1wbD4gZ2V0VmlzaWJsZUl0ZW1zKCkgeworICAgIHB1YmxpYyBBcnJheUxpc3Q8TWVudUl0ZW1JbXBsPiBnZXRWaXNpYmxlSXRlbXMoKSB7CiAgICAgICAgIGlmICghbUlzVmlzaWJsZUl0ZW1zU3RhbGUpIHJldHVybiBtVmlzaWJsZUl0ZW1zOwogICAgICAgICAKICAgICAgICAgLy8gUmVmcmVzaCB0aGUgdmlzaWJsZSBpdGVtcwpAQCAtMTA3NSwxMiArMTA4NSwxMiBAQAogICAgICAgICBtSXNBY3Rpb25JdGVtc1N0YWxlID0gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEFycmF5TGlzdDxNZW51SXRlbUltcGw+IGdldEFjdGlvbkl0ZW1zKCkgeworICAgIHB1YmxpYyBBcnJheUxpc3Q8TWVudUl0ZW1JbXBsPiBnZXRBY3Rpb25JdGVtcygpIHsKICAgICAgICAgZmxhZ0FjdGlvbkl0ZW1zKCk7CiAgICAgICAgIHJldHVybiBtQWN0aW9uSXRlbXM7CiAgICAgfQogICAgIAotICAgIEFycmF5TGlzdDxNZW51SXRlbUltcGw+IGdldE5vbkFjdGlvbkl0ZW1zKCkgeworICAgIHB1YmxpYyBBcnJheUxpc3Q8TWVudUl0ZW1JbXBsPiBnZXROb25BY3Rpb25JdGVtcygpIHsKICAgICAgICAgZmxhZ0FjdGlvbkl0ZW1zKCk7CiAgICAgICAgIHJldHVybiBtTm9uQWN0aW9uSXRlbXM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9NZW51UG9wdXBIZWxwZXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTWVudVBvcHVwSGVscGVyLmphdmEKaW5kZXggMDVlOWE2Ni4uZDY2NDA1OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9NZW51UG9wdXBIZWxwZXIuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVQb3B1cEhlbHBlci5qYXZhCkBAIC0yMyw3ICsyMyw2IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk1lYXN1cmVTcGVjOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0Fic0FjdGlvbkJhclZpZXcuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWJzQWN0aW9uQmFyVmlldy5qYXZhCmluZGV4IGYzODkxYzcuLjE4MzQ3OGYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWJzQWN0aW9uQmFyVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWJzQWN0aW9uQmFyVmlldy5qYXZhCkBAIC0xNiw4ICsxNiw4IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldDsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5tZW51LkFjdGlvbk1lbnVQcmVzZW50ZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5tZW51LkFjdGlvbk1lbnVWaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFjdGlvbk1lbnVQcmVzZW50ZXI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWN0aW9uTWVudVZpZXc7CiAKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvcjsKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvclNldDsKQEAgLTQ3LDE1ICs0NywyMCBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGQURFX0RVUkFUSU9OID0gMjAwOwogCiAgICAgcHVibGljIEFic0FjdGlvbkJhclZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KIAogICAgIHB1YmxpYyBBYnNBY3Rpb25CYXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogCi0gICAgcHVibGljIEFic0FjdGlvbkJhclZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBBYnNBY3Rpb25CYXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEFic0FjdGlvbkJhclZpZXcoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTk1LDkgKzEwMCw2IEBACiAKICAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50SGVpZ2h0KGludCBoZWlnaHQpIHsKICAgICAgICAgbUNvbnRlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIGlmIChtTWVudVZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgbU1lbnVWaWV3LnNldE1heEl0ZW1IZWlnaHQobUNvbnRlbnRIZWlnaHQpOwotICAgICAgICB9CiAgICAgICAgIHJlcXVlc3RMYXlvdXQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWN0aW9uQmFyQ29udGFpbmVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0FjdGlvbkJhckNvbnRhaW5lci5qYXZhCmluZGV4IDhhNDk4OTkuLjAzZmE5YjQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWN0aW9uQmFyQ29udGFpbmVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9BY3Rpb25CYXJDb250YWluZXIuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldDsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGlvbkJhcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0FjdGlvbkJhckNvbnRleHRWaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0FjdGlvbkJhckNvbnRleHRWaWV3LmphdmEKaW5kZXggOGJjMTA4MS4uZTEwMDcwZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9BY3Rpb25CYXJDb250ZXh0Vmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWN0aW9uQmFyQ29udGV4dFZpZXcuamF2YQpAQCAtMTYsOCArMTYsOCBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQ7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5BY3Rpb25NZW51UHJlc2VudGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5BY3Rpb25NZW51VmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BY3Rpb25NZW51UHJlc2VudGVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFjdGlvbk1lbnVWaWV3OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5NZW51QnVpbGRlcjsKIAogaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yOwpAQCAtMjUsNyArMjUsNiBAQAogaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yU2V0OwogaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwpAQCAtNzQsMTAgKzczLDE2IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5hY3Rpb25Nb2RlU3R5bGUpOwogICAgIH0KICAgICAKLSAgICBwdWJsaWMgQWN0aW9uQmFyQ29udGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotICAgICAgICAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5BY3Rpb25Nb2RlLCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIEFjdGlvbkJhckNvbnRleHRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEFjdGlvbkJhckNvbnRleHRWaWV3KAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5BY3Rpb25Nb2RlLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgc2V0QmFja2dyb3VuZERyYXdhYmxlKGEuZ2V0RHJhd2FibGUoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQWN0aW9uTW9kZV9iYWNrZ3JvdW5kKSk7CiAgICAgICAgIG1UaXRsZVN0eWxlUmVzID0gYS5nZXRSZXNvdXJjZUlkKApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9BY3Rpb25CYXJWaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0FjdGlvbkJhclZpZXcuamF2YQppbmRleCA3ODZmNWNmLi5mZjJjNjI1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0FjdGlvbkJhclZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0FjdGlvbkJhclZpZXcuamF2YQpAQCAtNDEsNiArNDEsOCBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3UGFyZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFjdGlvbk1lbnVQcmVzZW50ZXI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWN0aW9uTWVudVZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuRnJhbWVMYXlvdXQ7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OwpAQCAtNTIsOCArNTQsNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudHJhbnNpdGlvbi5BY3Rpb25CYXJUcmFuc2l0aW9uOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5BY3Rpb25NZW51SXRlbTsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuQWN0aW9uTWVudVByZXNlbnRlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuQWN0aW9uTWVudVZpZXc7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5tZW51Lk1lbnVCdWlsZGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5NZW51SXRlbUltcGw7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5tZW51Lk1lbnVQcmVzZW50ZXI7CkBAIC00MzAsNiArNDMwLDcgQEAKICAgICAgICAgICAgIG1BY3Rpb25NZW51UHJlc2VudGVyLnNldEl0ZW1MaW1pdChJbnRlZ2VyLk1BWF9WQUxVRSk7CiAgICAgICAgICAgICAvLyBTcGFuIHRoZSB3aG9sZSB3aWR0aAogICAgICAgICAgICAgbGF5b3V0UGFyYW1zLndpZHRoID0gTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVDsKKyAgICAgICAgICAgIGxheW91dFBhcmFtcy5oZWlnaHQgPSBtQ29udGVudEhlaWdodDsKICAgICAgICAgICAgIGNvbmZpZ1ByZXNlbnRlcnMoYnVpbGRlcik7CiAgICAgICAgICAgICBtZW51VmlldyA9IChBY3Rpb25NZW51VmlldykgbUFjdGlvbk1lbnVQcmVzZW50ZXIuZ2V0TWVudVZpZXcodGhpcyk7CiAgICAgICAgICAgICBpZiAobVNwbGl0VmlldyAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0RpYWxvZ1RpdGxlLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0RpYWxvZ1RpdGxlLmphdmEKaW5kZXggYjg2YzQzOC4uN2VhM2Q2YiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9EaWFsb2dUaXRsZS5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvRGlhbG9nVGl0bGUuamF2YQpAQCAtMjgsMTAgKzI4LDEzIEBACiAgKiB0aGUgdGV4dCB0byB0aGUgYXZhaWxhYmxlIHNwYWNlLgogICovCiBwdWJsaWMgY2xhc3MgRGlhbG9nVGl0bGUgZXh0ZW5kcyBUZXh0VmlldyB7Ci0gICAgCi0gICAgcHVibGljIERpYWxvZ1RpdGxlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLAotICAgICAgICAgICAgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisKKyAgICBwdWJsaWMgRGlhbG9nVGl0bGUoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisgICAgfQorCisgICAgcHVibGljIERpYWxvZ1RpdGxlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIpOwogICAgIH0KIAogICAgIHB1YmxpYyBEaWFsb2dUaXRsZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9GYWNlVW5sb2NrVmlldy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9GYWNlVW5sb2NrVmlldy5qYXZhCmluZGV4IGUzYzEyNDcuLjEyMWU2MDEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvRmFjZVVubG9ja1ZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0ZhY2VVbmxvY2tWaWV3LmphdmEKQEAgLTE4LDggKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZWxhdGl2ZUxheW91dDsKIAogcHVibGljIGNsYXNzIEZhY2VVbmxvY2tWaWV3IGV4dGVuZHMgUmVsYXRpdmVMYXlvdXQgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Mb2NrUGF0dGVyblV0aWxzLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0xvY2tQYXR0ZXJuVXRpbHMuamF2YQppbmRleCA4NjAyMjYwLi4zNDE5ZjE1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0xvY2tQYXR0ZXJuVXRpbHMuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0xvY2tQYXR0ZXJuVXRpbHMuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwpAQCAtMTIwMSw3ICsxMjAwLDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBzZXRMb25nKFN0cmluZyBzZWN1cmVTZXR0aW5nS2V5LCBsb25nIHZhbHVlLCBpbnQgdXNlckhhbmRsZSkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgZ2V0TG9ja1NldHRpbmdzKCkuc2V0TG9uZyhzZWN1cmVTZXR0aW5nS2V5LCB2YWx1ZSwgZ2V0Q3VycmVudE9yQ2FsbGluZ1VzZXJJZCgpKTsKKyAgICAgICAgICAgIGdldExvY2tTZXR0aW5ncygpLnNldExvbmcoc2VjdXJlU2V0dGluZ0tleSwgdmFsdWUsIHVzZXJIYW5kbGUpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKICAgICAgICAgICAgIC8vIFdoYXQgY2FuIHdlIGRvPwogICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ291bGRuJ3Qgd3JpdGUgbG9uZyAiICsgc2VjdXJlU2V0dGluZ0tleSArIHJlKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvTG9ja1BhdHRlcm5WaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0xvY2tQYXR0ZXJuVmlldy5qYXZhCmluZGV4IGIwNjZkNzAzLi4yNmNiNGU1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0xvY2tQYXR0ZXJuVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvTG9ja1BhdHRlcm5WaWV3LmphdmEKQEAgLTg2OCwxMiArODY4LDEwIEBACiAKICAgICAgICAgLy8gVE9ETzogdGhlIHBhdGggc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIGNhY2hlZCBldmVyeSB0aW1lIHdlIGhpdC1kZXRlY3QgYSBjZWxsCiAgICAgICAgIC8vIG9ubHkgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgcGF0aCBzaG91bGQgYmUgY29tcHV0ZWQgaGVyZQotICAgICAgICAvLyBkcmF3IHRoZSBwYXRoIG9mIHRoZSBwYXR0ZXJuICh1bmxlc3MgdGhlIHVzZXIgaXMgaW4gcHJvZ3Jlc3MsIGFuZAotICAgICAgICAvLyB3ZSBhcmUgaW4gc3RlYWx0aCBtb2RlKQotICAgICAgICBmaW5hbCBib29sZWFuIGRyYXdQYXRoID0gKCFtSW5TdGVhbHRoTW9kZSB8fCBtUGF0dGVybkRpc3BsYXlNb2RlID09IERpc3BsYXlNb2RlLldyb25nKTsKKyAgICAgICAgLy8gZHJhdyB0aGUgcGF0aCBvZiB0aGUgcGF0dGVybiAodW5sZXNzIHdlIGFyZSBpbiBzdGVhbHRoIG1vZGUpCisgICAgICAgIGZpbmFsIGJvb2xlYW4gZHJhd1BhdGggPSAhbUluU3RlYWx0aE1vZGU7CiAKLSAgICAgICAgLy8gZHJhdyB0aGUgYXJyb3dzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGF0aCAodW5sZXNzIHRoZSB1c2VyIGlzIGluIHByb2dyZXNzLCBhbmQKLSAgICAgICAgLy8gd2UgYXJlIGluIHN0ZWFsdGggbW9kZSkKKyAgICAgICAgLy8gZHJhdyB0aGUgYXJyb3dzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGF0aCAodW5sZXNzIHdlIGFyZSBpbiBzdGVhbHRoIG1vZGUpCiAgICAgICAgIGJvb2xlYW4gb2xkRmxhZyA9IChtUGFpbnQuZ2V0RmxhZ3MoKSAmIFBhaW50LkZJTFRFUl9CSVRNQVBfRkxBRykgIT0gMDsKICAgICAgICAgbVBhaW50LnNldEZpbHRlckJpdG1hcCh0cnVlKTsgLy8gZHJhdyB3aXRoIGhpZ2hlciBxdWFsaXR5IHNpbmNlIHdlIHJlbmRlciB3aXRoIHRyYW5zZm9ybXMKICAgICAgICAgaWYgKGRyYXdQYXRoKSB7CkBAIC05NzQsNyArOTcyLDcgQEAKICAgICAgICAgQml0bWFwIG91dGVyQ2lyY2xlOwogICAgICAgICBCaXRtYXAgaW5uZXJDaXJjbGU7CiAKLSAgICAgICAgaWYgKCFwYXJ0T2ZQYXR0ZXJuIHx8IChtSW5TdGVhbHRoTW9kZSAmJiBtUGF0dGVybkRpc3BsYXlNb2RlICE9IERpc3BsYXlNb2RlLldyb25nKSkgeworICAgICAgICBpZiAoIXBhcnRPZlBhdHRlcm4gfHwgbUluU3RlYWx0aE1vZGUpIHsKICAgICAgICAgICAgIC8vIHVuc2VsZWN0ZWQgY2lyY2xlCiAgICAgICAgICAgICBvdXRlckNpcmNsZSA9IG1CaXRtYXBDaXJjbGVEZWZhdWx0OwogICAgICAgICAgICAgaW5uZXJDaXJjbGUgPSBtQml0bWFwQnRuRGVmYXVsdDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUGFzc3dvcmRFbnRyeUtleWJvYXJkLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1Bhc3N3b3JkRW50cnlLZXlib2FyZC5qYXZhCmluZGV4IDNjMDFjNjkuLjgzNjgxMzYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUGFzc3dvcmRFbnRyeUtleWJvYXJkLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9QYXNzd29yZEVudHJ5S2V5Ym9hcmQuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldDsKIAotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlcjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUGFzc3dvcmRFbnRyeUtleWJvYXJkSGVscGVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1Bhc3N3b3JkRW50cnlLZXlib2FyZEhlbHBlci5qYXZhCmluZGV4IGEzZGYyOTEuLmIyYzlkYzUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUGFzc3dvcmRFbnRyeUtleWJvYXJkSGVscGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9QYXNzd29yZEVudHJ5S2V5Ym9hcmRIZWxwZXIuamF2YQpAQCAtMjEsOSArMjEsNyBAQAogaW1wb3J0IGFuZHJvaWQuaW5wdXRtZXRob2RzZXJ2aWNlLktleWJvYXJkOwogaW1wb3J0IGFuZHJvaWQuaW5wdXRtZXRob2RzZXJ2aWNlLktleWJvYXJkVmlldzsKIGltcG9ydCBhbmRyb2lkLmlucHV0bWV0aG9kc2VydmljZS5LZXlib2FyZFZpZXcuT25LZXlib2FyZEFjdGlvbkxpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQub3MuVmlicmF0b3I7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5IYXB0aWNGZWVkYmFja0NvbnN0YW50czsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUGFzc3dvcmRFbnRyeUtleWJvYXJkVmlldy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9QYXNzd29yZEVudHJ5S2V5Ym9hcmRWaWV3LmphdmEKaW5kZXggYjM3YWRmZi4uZDI3MzQ2YiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9QYXNzd29yZEVudHJ5S2V5Ym9hcmRWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9QYXNzd29yZEVudHJ5S2V5Ym9hcmRWaWV3LmphdmEKQEAgLTI5LDExICsyOSwxNiBAQAogICAgIHN0YXRpYyBmaW5hbCBpbnQgS0VZQ09ERV9ORVhUX0xBTkdVQUdFID0gLTEwNDsKIAogICAgIHB1YmxpYyBQYXNzd29yZEVudHJ5S2V5Ym9hcmRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogCi0gICAgcHVibGljIFBhc3N3b3JkRW50cnlLZXlib2FyZFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBQYXNzd29yZEVudHJ5S2V5Ym9hcmRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFBhc3N3b3JkRW50cnlLZXlib2FyZFZpZXcoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUG9pbnRlckxvY2F0aW9uVmlldy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Qb2ludGVyTG9jYXRpb25WaWV3LmphdmEKaW5kZXggZDgyODMxZi4uZTMzOWM0NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Qb2ludGVyTG9jYXRpb25WaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Qb2ludGVyTG9jYXRpb25WaWV3LmphdmEKQEAgLTMxLDExICszMSwxMyBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WZWxvY2l0eVRyYWNrZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdDb25maWd1cmF0aW9uOworaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5LlBvaW50ZXJFdmVudExpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudC5Qb2ludGVyQ29vcmRzOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAotcHVibGljIGNsYXNzIFBvaW50ZXJMb2NhdGlvblZpZXcgZXh0ZW5kcyBWaWV3IGltcGxlbWVudHMgSW5wdXREZXZpY2VMaXN0ZW5lciB7CitwdWJsaWMgY2xhc3MgUG9pbnRlckxvY2F0aW9uVmlldyBleHRlbmRzIFZpZXcgaW1wbGVtZW50cyBJbnB1dERldmljZUxpc3RlbmVyLAorICAgICAgICBQb2ludGVyRXZlbnRMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJQb2ludGVyIjsKIAogICAgIC8vIFRoZSBzeXN0ZW0gcHJvcGVydHkga2V5IHVzZWQgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGUgdmVsb2NpdHkgdHJhY2tlciBzdHJhdGVneQpAQCAtNTIwLDcgKzUyMiw4IEBACiAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCkpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGFkZFBvaW50ZXJFdmVudChNb3Rpb25FdmVudCBldmVudCkgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUG9pbnRlckV2ZW50KE1vdGlvbkV2ZW50IGV2ZW50KSB7CiAgICAgICAgIGZpbmFsIGludCBhY3Rpb24gPSBldmVudC5nZXRBY3Rpb24oKTsKICAgICAgICAgaW50IE5QID0gbVBvaW50ZXJzLnNpemUoKTsKIApAQCAtNjQ4LDcgKzY1MSw3IEBACiAgICAgCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaEV2ZW50KE1vdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGFkZFBvaW50ZXJFdmVudChldmVudCk7CisgICAgICAgIG9uUG9pbnRlckV2ZW50KGV2ZW50KTsKIAogICAgICAgICBpZiAoZXZlbnQuZ2V0QWN0aW9uKCkgPT0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV04gJiYgIWlzRm9jdXNlZCgpKSB7CiAgICAgICAgICAgICByZXF1ZXN0Rm9jdXMoKTsKQEAgLTY2MCw3ICs2NjMsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIG9uR2VuZXJpY01vdGlvbkV2ZW50KE1vdGlvbkV2ZW50IGV2ZW50KSB7CiAgICAgICAgIGZpbmFsIGludCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTsKICAgICAgICAgaWYgKChzb3VyY2UgJiBJbnB1dERldmljZS5TT1VSQ0VfQ0xBU1NfUE9JTlRFUikgIT0gMCkgewotICAgICAgICAgICAgYWRkUG9pbnRlckV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIG9uUG9pbnRlckV2ZW50KGV2ZW50KTsKICAgICAgICAgfSBlbHNlIGlmICgoc291cmNlICYgSW5wdXREZXZpY2UuU09VUkNFX0NMQVNTX0pPWVNUSUNLKSAhPSAwKSB7CiAgICAgICAgICAgICBsb2dNb3Rpb25FdmVudCgiSm95c3RpY2siLCBldmVudCk7CiAgICAgICAgIH0gZWxzZSBpZiAoKHNvdXJjZSAmIElucHV0RGV2aWNlLlNPVVJDRV9DTEFTU19QT1NJVElPTikgIT0gMCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Sb3RhcnlTZWxlY3Rvci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Sb3RhcnlTZWxlY3Rvci5qYXZhCmluZGV4IDRlNDA1ZjQuLmY4NTYwMjcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUm90YXJ5U2VsZWN0b3IuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1JvdGFyeVNlbGVjdG9yLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXg7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5WaWJyYXRvcjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9TY3JvbGxpbmdUYWJDb250YWluZXJWaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1Njcm9sbGluZ1RhYkNvbnRhaW5lclZpZXcuamF2YQppbmRleCBmYTI5ZTZlMS4uZDZiZDFkNmYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU2Nyb2xsaW5nVGFiQ29udGFpbmVyVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU2Nyb2xsaW5nVGFiQ29udGFpbmVyVmlldy5qYXZhCkBAIC0yMyw3ICsyMyw2IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aW9uQmFyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHMuVHJ1bmNhdGVBdDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU2l6ZUFkYXB0aXZlTGF5b3V0LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1NpemVBZGFwdGl2ZUxheW91dC5qYXZhCmluZGV4IGJhMTEzYTMuLjcyNjA2NTY1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1NpemVBZGFwdGl2ZUxheW91dC5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU2l6ZUFkYXB0aXZlTGF5b3V0LmphdmEKQEAgLTc5LDE3ICs3OSwyMCBAQAogICAgIHByaXZhdGUgaW50IG1Nb2Rlc3R5UGFuZWxUb3A7CiAKICAgICBwdWJsaWMgU2l6ZUFkYXB0aXZlTGF5b3V0KENvbnRleHQgY29udGV4dCkgewotICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICAgICAgaW5pdGlhbGl6ZSgpOworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KIAogICAgIHB1YmxpYyBTaXplQWRhcHRpdmVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwotICAgICAgICBpbml0aWFsaXplKCk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KIAotICAgIHB1YmxpYyBTaXplQWRhcHRpdmVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBTaXplQWRhcHRpdmVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2l6ZUFkYXB0aXZlTGF5b3V0KAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIGluaXRpYWxpemUoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU3VidGl0bGVWaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1N1YnRpdGxlVmlldy5qYXZhCmluZGV4IDA3MTE5M2MuLjExNzQ2M2EgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU3VidGl0bGVWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9TdWJ0aXRsZVZpZXcuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5UaGVtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CkBAIC0zMyw3ICszMiw2IEBACiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRQYWludDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5DYXB0aW9uaW5nTWFuYWdlci5DYXB0aW9uU3R5bGU7CiAKQEAgLTQxLDYgKzM5LDEyIEBACiAgICAgLy8gUmF0aW8gb2YgaW5uZXIgcGFkZGluZyB0byBmb250IHNpemUuCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgSU5ORVJfUEFERElOR19SQVRJTyA9IDAuMTI1ZjsKIAorICAgIC8qKiBDb2xvciB1c2VkIGZvciB0aGUgc2hhZG93ZWQgZWRnZSBvZiBhIGJldmVsLiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT0xPUl9CRVZFTF9EQVJLID0gMHg4MDAwMDAwMDsKKworICAgIC8qKiBDb2xvciB1c2VkIGZvciB0aGUgaWxsdW1pbmF0ZWQgZWRnZSBvZiBhIGJldmVsLiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT0xPUl9CRVZFTF9MSUdIVCA9IDB4ODBGRkZGRkY7CisKICAgICAvLyBTdHlsZWQgZGltZW5zaW9ucy4KICAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1Db3JuZXJSYWRpdXM7CiAgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBtT3V0bGluZVdpZHRoOwpAQCAtNzksMTIgKzgzLDE1IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KIAotICAgIHB1YmxpYyBTdWJ0aXRsZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgeworICAgIHB1YmxpYyBTdWJ0aXRsZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3VidGl0bGVWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwogCi0gICAgICAgIGZpbmFsIFRoZW1lIHRoZW1lID0gY29udGV4dC5nZXRUaGVtZSgpOwotICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSB0aGVtZS5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAotICAgICAgICAgICAgICAgICAgICBhdHRycywgYW5kcm9pZC5SLnN0eWxlYWJsZS5UZXh0VmlldywgZGVmU3R5bGUsIDApOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgICAgIGF0dHJzLCBhbmRyb2lkLlIuc3R5bGVhYmxlLlRleHRWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBDaGFyU2VxdWVuY2UgdGV4dCA9ICIiOwogICAgICAgICBpbnQgdGV4dFNpemUgPSAxNTsKQEAgLTExMiw3ICsxMTksNiBAQAogICAgICAgICAvLyBTZXQgdXAgZGVuc2l0eS1kZXBlbmRlbnQgcHJvcGVydGllcy4KICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIGRlZmF1bHQgc3R5bGUuCiAgICAgICAgIGZpbmFsIFJlc291cmNlcyByZXMgPSBnZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgICAgIGZpbmFsIERpc3BsYXlNZXRyaWNzIG0gPSByZXMuZ2V0RGlzcGxheU1ldHJpY3MoKTsKICAgICAgICAgbUNvcm5lclJhZGl1cyA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi5zdWJ0aXRsZV9jb3JuZXJfcmFkaXVzKTsKICAgICAgICAgbU91dGxpbmVXaWR0aCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi5zdWJ0aXRsZV9vdXRsaW5lX3dpZHRoKTsKICAgICAgICAgbVNoYWRvd1JhZGl1cyA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi5zdWJ0aXRsZV9zaGFkb3dfcmFkaXVzKTsKQEAgLTMxMSw3ICszMTcsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1FZGdlVHlwZSA9PSBDYXB0aW9uU3R5bGUuRURHRV9UWVBFX09VVExJTkUpIHsKKyAgICAgICAgZmluYWwgaW50IGVkZ2VUeXBlID0gbUVkZ2VUeXBlOworICAgICAgICBpZiAoZWRnZVR5cGUgPT0gQ2FwdGlvblN0eWxlLkVER0VfVFlQRV9PVVRMSU5FKSB7CiAgICAgICAgICAgICB0ZXh0UGFpbnQuc2V0U3Ryb2tlSm9pbihKb2luLlJPVU5EKTsKICAgICAgICAgICAgIHRleHRQYWludC5zZXRTdHJva2VXaWR0aChtT3V0bGluZVdpZHRoKTsKICAgICAgICAgICAgIHRleHRQYWludC5zZXRDb2xvcihtRWRnZUNvbG9yKTsKQEAgLTMyMCw4ICszMjcsMjQgQEAKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGluZUNvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICBsYXlvdXQuZHJhd1RleHQoYywgaSwgaSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobUVkZ2VUeXBlID09IENhcHRpb25TdHlsZS5FREdFX1RZUEVfRFJPUF9TSEFET1cpIHsKKyAgICAgICAgfSBlbHNlIGlmIChlZGdlVHlwZSA9PSBDYXB0aW9uU3R5bGUuRURHRV9UWVBFX0RST1BfU0hBRE9XKSB7CiAgICAgICAgICAgICB0ZXh0UGFpbnQuc2V0U2hhZG93TGF5ZXIobVNoYWRvd1JhZGl1cywgbVNoYWRvd09mZnNldFgsIG1TaGFkb3dPZmZzZXRZLCBtRWRnZUNvbG9yKTsKKyAgICAgICAgfSBlbHNlIGlmIChlZGdlVHlwZSA9PSBDYXB0aW9uU3R5bGUuRURHRV9UWVBFX1JBSVNFRAorICAgICAgICAgICAgICAgIHx8IGVkZ2VUeXBlID09IENhcHRpb25TdHlsZS5FREdFX1RZUEVfREVQUkVTU0VEKSB7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIHJhaXNlZCA9IGVkZ2VUeXBlID09IENhcHRpb25TdHlsZS5FREdFX1RZUEVfUkFJU0VEOworICAgICAgICAgICAgZmluYWwgaW50IGNvbG9yVXAgPSByYWlzZWQgPyBDb2xvci5XSElURSA6IG1FZGdlQ29sb3I7CisgICAgICAgICAgICBmaW5hbCBpbnQgY29sb3JEb3duID0gcmFpc2VkID8gbUVkZ2VDb2xvciA6IENvbG9yLldISVRFOworICAgICAgICAgICAgZmluYWwgZmxvYXQgb2Zmc2V0ID0gbVNoYWRvd1JhZGl1cyAvIDJmOworCisgICAgICAgICAgICB0ZXh0UGFpbnQuc2V0Q29sb3IobUZvcmVncm91bmRDb2xvcik7CisgICAgICAgICAgICB0ZXh0UGFpbnQuc2V0U3R5bGUoU3R5bGUuRklMTCk7CisgICAgICAgICAgICB0ZXh0UGFpbnQuc2V0U2hhZG93TGF5ZXIobVNoYWRvd1JhZGl1cywgLW9mZnNldCwgLW9mZnNldCwgY29sb3JVcCk7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGluZUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBsYXlvdXQuZHJhd1RleHQoYywgaSwgaSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRleHRQYWludC5zZXRTaGFkb3dMYXllcihtU2hhZG93UmFkaXVzLCBvZmZzZXQsIG9mZnNldCwgY29sb3JEb3duKTsKICAgICAgICAgfQogCiAgICAgICAgIHRleHRQYWludC5zZXRDb2xvcihtRm9yZWdyb3VuZENvbG9yKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvVGV4dFByb2dyZXNzQmFyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1RleHRQcm9ncmVzc0Jhci5qYXZhCmluZGV4IGU4OThhYTQuLjdjYTA3ZDQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvVGV4dFByb2dyZXNzQmFyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9UZXh0UHJvZ3Jlc3NCYXIuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CkBAIC01OSw5ICs1OCwxMyBAQAogCiAgICAgYm9vbGVhbiBtQ2hyb25vbWV0ZXJGb2xsb3cgPSBmYWxzZTsKICAgICBpbnQgbUNocm9ub21ldGVyR3Jhdml0eSA9IEdyYXZpdHkuTk9fR1JBVklUWTsKKworICAgIHB1YmxpYyBUZXh0UHJvZ3Jlc3NCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisgICAgfQogICAgIAotICAgIHB1YmxpYyBUZXh0UHJvZ3Jlc3NCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBUZXh0UHJvZ3Jlc3NCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0cik7CiAgICAgfQogCiAgICAgcHVibGljIFRleHRQcm9ncmVzc0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9XYXZlVmlldy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9XYXZlVmlldy5qYXZhCmluZGV4IGQzM2Q1MGMuLjBjNTk5M2IgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvV2F2ZVZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1dhdmVWaWV3LmphdmEKQEAgLTI4LDcgKzI4LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5WaWJyYXRvcjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvbXVsdGl3YXZldmlldy9UYXJnZXREcmF3YWJsZS5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9tdWx0aXdhdmV2aWV3L1RhcmdldERyYXdhYmxlLmphdmEKaW5kZXggMTZiZWMxNi4uNWE0YzQ0MSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9tdWx0aXdhdmV2aWV3L1RhcmdldERyYXdhYmxlLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9tdWx0aXdhdmV2aWV3L1RhcmdldERyYXdhYmxlLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLlN0YXRlTGlzdERyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CmRpZmYgLS1naXQgYS9jb3JlL2puaS9BbmRyb2lkLm1rIGIvY29yZS9qbmkvQW5kcm9pZC5tawppbmRleCAyZTBhY2IxLi5kNzJiMDU0IDEwMDY0NAotLS0gYS9jb3JlL2puaS9BbmRyb2lkLm1rCisrKyBiL2NvcmUvam5pL0FuZHJvaWQubWsKQEAgLTQyLDYgKzQyLDcgQEAKIAlhbmRyb2lkX2RhdGFiYXNlX1NRTGl0ZURlYnVnLmNwcCBcCiAJYW5kcm9pZF9lbW9qaV9FbW9qaUZhY3RvcnkuY3BwIFwKIAlhbmRyb2lkX3ZpZXdfRGlzcGxheUV2ZW50UmVjZWl2ZXIuY3BwIFwKKwlhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3QuY3BwIFwKIAlhbmRyb2lkX3ZpZXdfU3VyZmFjZS5jcHAgXAogCWFuZHJvaWRfdmlld19TdXJmYWNlQ29udHJvbC5jcHAgXAogCWFuZHJvaWRfdmlld19TdXJmYWNlU2Vzc2lvbi5jcHAgXApAQCAtNTMsMTAgKzU0LDExIEBACiAJYW5kcm9pZF92aWV3X0lucHV0UXVldWUuY3BwIFwKIAlhbmRyb2lkX3ZpZXdfS2V5RXZlbnQuY3BwIFwKIAlhbmRyb2lkX3ZpZXdfS2V5Q2hhcmFjdGVyTWFwLmNwcCBcCi0JYW5kcm9pZF92aWV3X0hhcmR3YXJlUmVuZGVyZXIuY3BwIFwKIAlhbmRyb2lkX3ZpZXdfR3JhcGhpY0J1ZmZlci5jcHAgXAotCWFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdC5jcHAgXAorCWFuZHJvaWRfdmlld19HTFJlbmRlcmVyLmNwcCBcCiAJYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhcy5jcHAgXAorCWFuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyLmNwcCBcCisJYW5kcm9pZF92aWV3X1JlbW90ZUdMUmVuZGVyZXIuY3BwIFwKIAlhbmRyb2lkX3ZpZXdfTW90aW9uRXZlbnQuY3BwIFwKIAlhbmRyb2lkX3ZpZXdfUG9pbnRlckljb24uY3BwIFwKIAlhbmRyb2lkX3ZpZXdfVmVsb2NpdHlUcmFja2VyLmNwcCBcCkBAIC03NCw3ICs3Niw2IEBACiAJYW5kcm9pZF9uZXRfTG9jYWxTb2NrZXRJbXBsLmNwcCBcCiAJYW5kcm9pZF9uZXRfTmV0VXRpbHMuY3BwIFwKIAlhbmRyb2lkX25ldF9UcmFmZmljU3RhdHMuY3BwIFwKLQlhbmRyb2lkX25ldF93aWZpX1dpZmlOYXRpdmUuY3BwIFwKIAlhbmRyb2lkX25pb191dGlscy5jcHAgXAogCWFuZHJvaWRfdGV4dF9mb3JtYXRfVGltZS5jcHAgXAogCWFuZHJvaWRfdXRpbF9Bc3NldE1hbmFnZXIuY3BwIFwKQEAgLTExNyw2ICsxMTgsNyBAQAogCWFuZHJvaWQvZ3JhcGhpY3MvVGV4dExheW91dC5jcHAgXAogCWFuZHJvaWQvZ3JhcGhpY3MvVGV4dExheW91dENhY2hlLmNwcCBcCiAJYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZS5jcHAgXAorCWFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VJbXBsLmNwcCBcCiAJYW5kcm9pZC9ncmFwaGljcy9VdGlscy5jcHAgXAogCWFuZHJvaWQvZ3JhcGhpY3MvWGZlcm1vZGUuY3BwIFwKIAlhbmRyb2lkL2dyYXBoaWNzL1l1dlRvSnBlZ0VuY29kZXIuY3BwIFwKQEAgLTIxOCw2ICsyMjAsMTYgQEAKIAlMT0NBTF9TSEFSRURfTElCUkFSSUVTICs9IGxpYmh3dWkKIGVuZGlmCiAKK2lmZXEgKCQoVVNFX01JTklLSU4pLCB0cnVlKQorCUxPQ0FMX0NGTEFHUyArPSAtRFVTRV9NSU5JS0lOCisJTE9DQUxfQ19JTkNMVURFUyArPSBmcmFtZXdvcmtzL21pbmlraW4vaW5jbHVkZSBcCisJCWV4dGVybmFsL2ZyZWV0eXBlL2luY2x1ZGUKKwlMT0NBTF9TUkNfRklMRVMgKz0gCWFuZHJvaWQvZ3JhcGhpY3MvTWluaWtpblNraWEuY3BwCisjIG5vdGU6IHRoZSBmcmVldHlwZSBpbmNsdWRlIGlzIHNwdXJpb3VzOyBtaW5pa2luIGl0c2VsZiBwcm9iYWJseQorIyBzaG91bGRuJ3QgZGVwZW5kIG9uIGl0CisJTE9DQUxfU0hBUkVEX0xJQlJBUklFUyArPSBsaWJtaW5pa2luIGxpYnN0bHBvcnQKK2VuZGlmCisKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgKz0gXAogCWxpYmRsCiAjIHdlIG5lZWQgdG8gYWNjZXNzIHRoZSBwcml2YXRlIEJpb25pYyBoZWFkZXIKZGlmZiAtLWdpdCBhL2NvcmUvam5pL0FuZHJvaWRSdW50aW1lLmNwcCBiL2NvcmUvam5pL0FuZHJvaWRSdW50aW1lLmNwcAppbmRleCA5N2VhNWU2Li4wNzRkN2FjIDEwMDY0NAotLS0gYS9jb3JlL2puaS9BbmRyb2lkUnVudGltZS5jcHAKKysrIGIvY29yZS9qbmkvQW5kcm9pZFJ1bnRpbWUuY3BwCkBAIC0xMTksMTAgKzExOSwxMiBAQAogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX1hmZXJtb2RlKEpOSUVudiogZW52KTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19wZGZfUGRmRG9jdW1lbnQoSk5JRW52KiBlbnYpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfRGlzcGxheUV2ZW50UmVjZWl2ZXIoSk5JRW52KiBlbnYpOworZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3QoSk5JRW52KiBlbnYpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfR3JhcGhpY0J1ZmZlcihKTklFbnYqIGVudik7Ci1leHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdChKTklFbnYqIGVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19HTEVTMjBDYW52YXMoSk5JRW52KiBlbnYpOwotZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlcihKTklFbnYqIGVudik7CitleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19HTFJlbmRlcmVyKEpOSUVudiogZW52KTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF92aWV3X1RocmVhZGVkUmVuZGVyZXIoSk5JRW52KiBlbnYpOworZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfUmVtb3RlR0xSZW5kZXJlcihKTklFbnYqIGVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19TdXJmYWNlKEpOSUVudiogZW52KTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF92aWV3X1N1cmZhY2VDb250cm9sKEpOSUVudiogZW52KTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF92aWV3X1N1cmZhY2VTZXNzaW9uKEpOSUVudiogZW52KTsKQEAgLTE0Nyw3ICsxNDksNiBAQAogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX25ldF9Mb2NhbFNvY2tldEltcGwoSk5JRW52KiBlbnYpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX25ldF9OZXR3b3JrVXRpbHMoSk5JRW52KiBlbnYpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX25ldF9UcmFmZmljU3RhdHMoSk5JRW52KiBlbnYpOwotZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX25ldF93aWZpX1dpZmlOYXRpdmUoSk5JRW52KiBlbnYpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX3RleHRfQW5kcm9pZENoYXJhY3RlcihKTklFbnYgKmVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfdGV4dF9BbmRyb2lkQmlkaShKTklFbnYgKmVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfb3BlbmdsX2NsYXNzZXMoSk5JRW52ICplbnYpOwpAQCAtMTAzMCw3ICsxMDMxLDggQEAKICAgICB2b2lkKiogYXJncyA9ICh2b2lkKiopIG1hbGxvYygzICogc2l6ZW9mKHZvaWQqKSk7ICAgLy8gamF2YVRocmVhZFNoZWxsIG11c3QgZnJlZQogICAgIGludCByZXN1bHQ7CiAKLSAgICBhc3NlcnQodGhyZWFkTmFtZSAhPSBOVUxMKTsKKyAgICBpZiAoIXRocmVhZE5hbWUpCisgICAgICAgIHRocmVhZE5hbWUgPSAidW5uYW1lZCB0aHJlYWQiOwogCiAgICAgYXJnc1swXSA9ICh2b2lkKikgZW50cnlGdW5jdGlvbjsKICAgICBhcmdzWzFdID0gdXNlckRhdGE7CkBAIC0xMTE5LDEzICsxMTIxLDE1IEBACiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX29zX1N5c3RlbVByb3BlcnRpZXMpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9vc19CaW5kZXIpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9vc19QYXJjZWwpLAotICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF92aWV3X0Rpc3BsYXlFdmVudFJlY2VpdmVyKSwKICAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfbmlvX3V0aWxzKSwKICAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfR3JhcGhpY3MpLAorICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF92aWV3X0Rpc3BsYXlFdmVudFJlY2VpdmVyKSwKKyAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfdmlld19EaXNwbGF5TGlzdCksCiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfR3JhcGhpY0J1ZmZlciksCi0gICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3QpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhcyksCi0gICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlciksCisgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfR0xSZW5kZXJlciksCisgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfVGhyZWFkZWRSZW5kZXJlciksCisgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfUmVtb3RlR0xSZW5kZXJlciksCiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfU3VyZmFjZSksCiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfU3VyZmFjZUNvbnRyb2wpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF92aWV3X1N1cmZhY2VTZXNzaW9uKSwKQEAgLTExODMsNyArMTE4Nyw2IEBACiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX25ldF9Mb2NhbFNvY2tldEltcGwpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9uZXRfTmV0d29ya1V0aWxzKSwKICAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfbmV0X1RyYWZmaWNTdGF0cyksCi0gICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX25ldF93aWZpX1dpZmlOYXRpdmUpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9vc19NZW1vcnlGaWxlKSwKICAgICBSRUdfSk5JKHJlZ2lzdGVyX2NvbV9hbmRyb2lkX2ludGVybmFsX29zX1p5Z290ZUluaXQpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9oYXJkd2FyZV9DYW1lcmEpLApkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAuY3BwCmluZGV4IGVlYTllZTEuLjIxMjU3NjMgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcC5jcHAKQEAgLTIyNyw3ICsyMjcsNyBAQAogICAgIGRvIHsNCiAgICAgICAgICpkc3QrKyA9IFNrVW5QcmVNdWx0aXBseTo6UE1Db2xvclRvQ29sb3IoY29sb3JzWypzKytdKTsNCiAgICAgfSB3aGlsZSAoLS13aWR0aCAhPSAwKTsNCi0gICAgY3RhYmxlLT51bmxvY2tDb2xvcnMoZmFsc2UpOw0KKyAgICBjdGFibGUtPnVubG9ja0NvbG9ycygpOw0KIH0NCiANCiBzdGF0aWMgdm9pZCBUb0NvbG9yX1NJOF9SYXcoU2tDb2xvciBkc3RbXSwgY29uc3Qgdm9pZCogc3JjLCBpbnQgd2lkdGgsDQpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICAgICpkc3QrKyA9IFNrQ29sb3JTZXRBUkdCKFNrR2V0UGFja2VkQTMyKGMpLCBTa0dldFBhY2tlZFIzMihjKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrR2V0UGFja2VkRzMyKGMpLCBTa0dldFBhY2tlZEIzMihjKSk7DQogICAgIH0gd2hpbGUgKC0td2lkdGggIT0gMCk7DQotICAgIGN0YWJsZS0+dW5sb2NrQ29sb3JzKGZhbHNlKTsNCisgICAgY3RhYmxlLT51bmxvY2tDb2xvcnMoKTsNCiB9DQogDQogc3RhdGljIHZvaWQgVG9Db2xvcl9TSThfT3BhcXVlKFNrQ29sb3IgZHN0W10sIGNvbnN0IHZvaWQqIHNyYywgaW50IHdpZHRoLA0KQEAgLTI1Myw3ICsyNTMsNyBAQAogICAgICAgICAqZHN0KysgPSBTa0NvbG9yU2V0UkdCKFNrR2V0UGFja2VkUjMyKGMpLCBTa0dldFBhY2tlZEczMihjKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tHZXRQYWNrZWRCMzIoYykpOw0KICAgICB9IHdoaWxlICgtLXdpZHRoICE9IDApOw0KLSAgICBjdGFibGUtPnVubG9ja0NvbG9ycyhmYWxzZSk7DQorICAgIGN0YWJsZS0+dW5sb2NrQ29sb3JzKCk7DQogfQ0KIA0KIC8vIGNhbiByZXR1cm4gTlVMTA0KQEAgLTQ0Miw5ICs0NDIsMTUgQEAKICAgICByZXR1cm4gIWJpdG1hcC0+aXNPcGFxdWUoKTsNCiB9DQogDQotc3RhdGljIHZvaWQgQml0bWFwX3NldEhhc0FscGhhKEpOSUVudiogZW52LCBqb2JqZWN0LCBTa0JpdG1hcCogYml0bWFwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBoYXNBbHBoYSkgew0KLSAgICBiaXRtYXAtPnNldElzT3BhcXVlKCFoYXNBbHBoYSk7DQorc3RhdGljIHZvaWQgQml0bWFwX3NldEFscGhhQW5kUHJlbXVsdGlwbGllZChKTklFbnYqIGVudiwgam9iamVjdCwgU2tCaXRtYXAqIGJpdG1hcCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGhhc0FscGhhLCBqYm9vbGVhbiBpc1ByZW11bCkgew0KKyAgICBpZiAoIWhhc0FscGhhKSB7DQorICAgICAgICBiaXRtYXAtPnNldEFscGhhVHlwZShrT3BhcXVlX1NrQWxwaGFUeXBlKTsNCisgICAgfSBlbHNlIGlmIChpc1ByZW11bCkgew0KKyAgICAgICAgYml0bWFwLT5zZXRBbHBoYVR5cGUoa1ByZW11bF9Ta0FscGhhVHlwZSk7DQorICAgIH0gZWxzZSB7DQorICAgICAgICBiaXRtYXAtPnNldEFscGhhVHlwZShrVW5wcmVtdWxfU2tBbHBoYVR5cGUpOw0KKyAgICB9DQogfQ0KIA0KIHN0YXRpYyBqYm9vbGVhbiBCaXRtYXBfaGFzTWlwTWFwKEpOSUVudiogZW52LCBqb2JqZWN0LCBTa0JpdG1hcCogYml0bWFwKSB7DQpAQCAtNTQzLDE0ICs1NDksMTQgQEAKICAgICBwLT53cml0ZUludDMyKGJpdG1hcC0+cm93Qnl0ZXMoKSk7DQogICAgIHAtPndyaXRlSW50MzIoZGVuc2l0eSk7DQogDQotICAgIGlmIChiaXRtYXAtPmdldENvbmZpZygpID09IFNrQml0bWFwOjprSW5kZXg4X0NvbmZpZykgew0KKyAgICBpZiAoYml0bWFwLT5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0luZGV4OF9Db25maWcpIHsNCiAgICAgICAgIFNrQ29sb3JUYWJsZSogY3RhYmxlID0gYml0bWFwLT5nZXRDb2xvclRhYmxlKCk7DQogICAgICAgICBpZiAoY3RhYmxlICE9IE5VTEwpIHsNCiAgICAgICAgICAgICBpbnQgY291bnQgPSBjdGFibGUtPmNvdW50KCk7DQogICAgICAgICAgICAgcC0+d3JpdGVJbnQzMihjb3VudCk7DQogICAgICAgICAgICAgbWVtY3B5KHAtPndyaXRlSW5wbGFjZShjb3VudCAqIHNpemVvZihTa1BNQ29sb3IpKSwNCiAgICAgICAgICAgICAgICAgICAgY3RhYmxlLT5sb2NrQ29sb3JzKCksIGNvdW50ICogc2l6ZW9mKFNrUE1Db2xvcikpOw0KLSAgICAgICAgICAgIGN0YWJsZS0+dW5sb2NrQ29sb3JzKGZhbHNlKTsNCisgICAgICAgICAgICBjdGFibGUtPnVubG9ja0NvbG9ycygpOw0KICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICBwLT53cml0ZUludDMyKDApOyAgIC8vIGluZGljYXRlIG5vIGN0YWJsZQ0KICAgICAgICAgfQ0KQEAgLTc3MCw3ICs3NzYsNyBAQAogICAgIHsgICAibmF0aXZlUm93Qnl0ZXMiLCAgICAgICAgICAgIihJKUkiLCAodm9pZCopQml0bWFwX3Jvd0J5dGVzIH0sDQogICAgIHsgICAibmF0aXZlQ29uZmlnIiwgICAgICAgICAgICAgIihJKUkiLCAodm9pZCopQml0bWFwX2NvbmZpZyB9LA0KICAgICB7ICAgIm5hdGl2ZUhhc0FscGhhIiwgICAgICAgICAgICIoSSlaIiwgKHZvaWQqKUJpdG1hcF9oYXNBbHBoYSB9LA0KLSAgICB7ICAgIm5hdGl2ZVNldEhhc0FscGhhIiwgICAgICAgICIoSVopViIsICh2b2lkKilCaXRtYXBfc2V0SGFzQWxwaGEgfSwNCisgICAgeyAgICJuYXRpdmVTZXRBbHBoYUFuZFByZW11bHRpcGxpZWQiLCAiKElaWilWIiwgKHZvaWQqKUJpdG1hcF9zZXRBbHBoYUFuZFByZW11bHRpcGxpZWR9LA0KICAgICB7ICAgIm5hdGl2ZUhhc01pcE1hcCIsICAgICAgICAgICIoSSlaIiwgKHZvaWQqKUJpdG1hcF9oYXNNaXBNYXAgfSwNCiAgICAgeyAgICJuYXRpdmVTZXRIYXNNaXBNYXAiLCAgICAgICAiKElaKVYiLCAodm9pZCopQml0bWFwX3NldEhhc01pcE1hcCB9LA0KICAgICB7ICAgIm5hdGl2ZUNyZWF0ZUZyb21QYXJjZWwiLA0KZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5jcHAgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkuY3BwCmluZGV4IGRhNjIxOWYuLmQwNDJjZTkgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFuZHJvaWRmdy9Bc3NldC5oPgogI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogCkBAIC0xNTcsNyArMTU4LDcgQEAKICAgICB2aXJ0dWFsIGJvb2wgYWxsb2NQaXhlbFJlZihTa0JpdG1hcCogYml0bWFwLCBTa0NvbG9yVGFibGUqIGN0YWJsZSkgewogICAgICAgICAvLyBhY2NvdW50cyBmb3Igc2NhbGUgaW4gZmluYWwgYWxsb2NhdGlvbiwgdXNpbmcgZXZlbnR1YWwgc2l6ZSBhbmQgY29uZmlnCiAgICAgICAgIGNvbnN0IGludCBieXRlc1BlclBpeGVsID0gU2tCaXRtYXA6OkNvbXB1dGVCeXRlc1BlclBpeGVsKAotICAgICAgICAgICAgICAgIGNvbmZpZ0ZvclNjYWxlZE91dHB1dChiaXRtYXAtPmdldENvbmZpZygpKSk7CisgICAgICAgICAgICAgICAgY29uZmlnRm9yU2NhbGVkT3V0cHV0KGJpdG1hcC0+Y29uZmlnKCkpKTsKICAgICAgICAgY29uc3QgaW50IHJlcXVlc3RlZFNpemUgPSBieXRlc1BlclBpeGVsICoKICAgICAgICAgICAgICAgICBpbnQoYml0bWFwLT53aWR0aCgpICogbVNjYWxlICsgMC41ZikgKgogICAgICAgICAgICAgICAgIGludChiaXRtYXAtPmhlaWdodCgpICogbVNjYWxlICsgMC41Zik7CkBAIC00MDEsOCArNDAyLDExIEBACiAKICAgICAgICAgLy8gVE9ETzogYXZvaWQgY29weWluZyB3aGVuIHNjYWxlZCBzaXplIGVxdWFscyBkZWNvZGluZ0JpdG1hcCBzaXplCiAgICAgICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gY29uZmlnRm9yU2NhbGVkT3V0cHV0KGRlY29kaW5nQml0bWFwLmNvbmZpZygpKTsKLSAgICAgICAgb3V0cHV0Qml0bWFwLT5zZXRDb25maWcoY29uZmlnLCBzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICAgICAgb3V0cHV0Qml0bWFwLT5zZXRJc09wYXF1ZShkZWNvZGluZ0JpdG1hcC5pc09wYXF1ZSgpKTsKKyAgICAgICAgLy8gRklYTUU6IElmIHRoZSBhbHBoYVR5cGUgaXMga1VucHJlbXVsIGFuZCB0aGUgaW1hZ2UgaGFzIGFscGhhLCB0aGUKKyAgICAgICAgLy8gY29sb3JzIG1heSBub3QgYmUgY29ycmVjdCwgc2luY2UgU2tpYSBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBkcmF3aW5nCisgICAgICAgIC8vIHRvL2Zyb20gdW5wcmVtdWx0aXBsaWVkIGJpdG1hcHMuCisgICAgICAgIG91dHB1dEJpdG1hcC0+c2V0Q29uZmlnKGNvbmZpZywgc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RpbmdCaXRtYXAuYWxwaGFUeXBlKCkpOwogICAgICAgICBpZiAoIW91dHB1dEJpdG1hcC0+YWxsb2NQaXhlbHMob3V0cHV0QWxsb2NhdG9yLCBOVUxMKSkgewogICAgICAgICAgICAgcmV0dXJuIG51bGxPYmplY3RSZXR1cm4oImFsbG9jYXRpb24gZmFpbGVkIGZvciBzY2FsZWQgYml0bWFwIik7CiAgICAgICAgIH0KQEAgLTUxMywxMSArNTE3LDE0IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBTa0F1dG9UVW5yZWY8U2tEYXRhPiBkYXRhKFNrRGF0YTo6TmV3RnJvbUZEKGRlc2NyaXB0b3IpKTsKLSAgICBpZiAoZGF0YS5nZXQoKSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBudWxsT2JqZWN0UmV0dXJuKCJOZXdGcm9tRkQgZmFpbGVkIGluIG5hdGl2ZURlY29kZUZpbGVEZXNjcmlwdG9yIik7CisgICAgRklMRSogZmlsZSA9IGZkb3BlbihkZXNjcmlwdG9yLCAiciIpOworICAgIGlmIChmaWxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIG51bGxPYmplY3RSZXR1cm4oIkNvdWxkIG5vdCBvcGVuIGZpbGUiKTsKICAgICB9Ci0gICAgU2tBdXRvVFVucmVmPFNrTWVtb3J5U3RyZWFtPiBzdHJlYW0obmV3IFNrTWVtb3J5U3RyZWFtKGRhdGEpKTsKKworICAgIFNrQXV0b1RVbnJlZjxTa0ZJTEVTdHJlYW0+IHN0cmVhbShuZXcgU2tGSUxFU3RyZWFtKGZpbGUsCisgICAgICAgICAgICB3ZU93blRoZUZEID8gU2tGSUxFU3RyZWFtOjprQ2FsbGVyUGFzc2VzX093bmVyc2hpcCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgU2tGSUxFU3RyZWFtOjprQ2FsbGVyUmV0YWluc19Pd25lcnNoaXApKTsKIAogICAgIC8qIEFsbG93IHB1cmdlYWJsZSBpZmYgd2Ugb3duIHRoZSBGRCwgaS5lLiwgaW4gdGhlIHB1cmVnZWFibGUgYW5kCiAgICAgICAgc2hhcmVhYmxlIGNhc2UuCkBAIC01NDEsNyArNTQ4LDkgQEAKICAgICB9IGVsc2UgewogICAgICAgICAvLyBzaW5jZSB3ZSBrbm93IHdlJ2xsIGJlIGRvbmUgd2l0aCB0aGUgYXNzZXQgd2hlbiB3ZSByZXR1cm4sIHdlIGNhbgogICAgICAgICAvLyBqdXN0IHVzZSBhIHNpbXBsZSB3cmFwcGVyCi0gICAgICAgIHN0cmVhbSA9IG5ldyBBc3NldFN0cmVhbUFkYXB0b3IoYXNzZXQpOworICAgICAgICBzdHJlYW0gPSBuZXcgQXNzZXRTdHJlYW1BZGFwdG9yKGFzc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2V0U3RyZWFtQWRhcHRvcjo6a05vX093bkFzc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2V0U3RyZWFtQWRhcHRvcjo6a05vX0hhc01lbW9yeUJhc2UpOwogICAgIH0KICAgICBTa0F1dG9VbnJlZiBhdXIoc3RyZWFtKTsKICAgICByZXR1cm4gZG9EZWNvZGUoZW52LCBzdHJlYW0sIHBhZGRpbmcsIG9wdGlvbnMsIGZvcmNlUHVyZ2VhYmxlLCBmb3JjZVB1cmdlYWJsZSk7CmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcFJlZ2lvbkRlY29kZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBSZWdpb25EZWNvZGVyLmNwcAppbmRleCBlN2QyNDIyLi4wOTg2NDNiIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcFJlZ2lvbkRlY29kZXIuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwUmVnaW9uRGVjb2Rlci5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJDcmVhdGVKYXZhT3V0cHV0U3RyZWFtQWRhcHRvci5oIgogI2luY2x1ZGUgIlV0aWxzLmgiCiAjaW5jbHVkZSAiSk5JSGVscC5oIgotI2luY2x1ZGUgIlNrVFNjb3BlZFB0ci5oIgogCiAjaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL0FuZHJvaWRSdW50aW1lLmg+CiAjaW5jbHVkZSAiYW5kcm9pZF91dGlsX0JpbmRlci5oIgpAQCAtNzYsNyArNzUsNyBAQAogICAgIGludCBmSGVpZ2h0OwogfTsKIAotc3RhdGljIGpvYmplY3QgY3JlYXRlQml0bWFwUmVnaW9uRGVjb2RlcihKTklFbnYqIGVudiwgU2tTdHJlYW0qIHN0cmVhbSkgeworc3RhdGljIGpvYmplY3QgY3JlYXRlQml0bWFwUmVnaW9uRGVjb2RlcihKTklFbnYqIGVudiwgU2tTdHJlYW1SZXdpbmRhYmxlKiBzdHJlYW0pIHsKICAgICBTa0ltYWdlRGVjb2RlciogZGVjb2RlciA9IFNrSW1hZ2VEZWNvZGVyOjpGYWN0b3J5KHN0cmVhbSk7CiAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgaWYgKE5VTEwgPT0gZGVjb2RlcikgewpAQCAtMTA4LDcgKzEwNyw3IEBACiAgICAgICAgIEZvciBub3cgd2UganVzdCBhbHdheXMgY29weSB0aGUgYXJyYXkncyBkYXRhIGlmIGlzU2hhcmVhYmxlLgogICAgICAqLwogICAgIEF1dG9KYXZhQnl0ZUFycmF5IGFyKGVudiwgYnl0ZUFycmF5KTsKLSAgICBTa1N0cmVhbSogc3RyZWFtID0gbmV3IFNrTWVtb3J5U3RyZWFtKGFyLnB0cigpICsgb2Zmc2V0LCBsZW5ndGgsIHRydWUpOworICAgIFNrTWVtb3J5U3RyZWFtKiBzdHJlYW0gPSBuZXcgU2tNZW1vcnlTdHJlYW0oYXIucHRyKCkgKyBvZmZzZXQsIGxlbmd0aCwgdHJ1ZSk7CiAKICAgICBqb2JqZWN0IGJyZCA9IGNyZWF0ZUJpdG1hcFJlZ2lvbkRlY29kZXIoZW52LCBzdHJlYW0pOwogICAgIFNrU2FmZVVucmVmKHN0cmVhbSk7IC8vIHRoZSBkZWNvZGVyIG5vdyBob2xkcyBhIHJlZmVyZW5jZQpAQCAtMjE2LDcgKzIxNSw3IEBACiAgICAgcmVnaW9uLmZSaWdodCA9IHN0YXJ0X3ggKyB3aWR0aDsKICAgICByZWdpb24uZkJvdHRvbSA9IHN0YXJ0X3kgKyBoZWlnaHQ7CiAgICAgU2tCaXRtYXAqIGJpdG1hcCA9IE5VTEw7Ci0gICAgU2tUU2NvcGVkUHRyPFNrQml0bWFwPiBhZGI7CisgICAgU2tBdXRvVERlbGV0ZTxTa0JpdG1hcD4gYWRiOwogCiAgICAgaWYgKHRpbGVCaXRtYXAgIT0gTlVMTCkgewogICAgICAgICAvLyBSZS11c2UgYml0bWFwLgpAQCAtMjQ3LDcgKzI0Niw3IEBACiAgICAgfQogCiAgICAgLy8gZGV0YWNoIGJpdG1hcCBmcm9tIGl0cyBhdXRvZGVsZXRlciwgc2luY2Ugd2Ugd2FudCB0byBvd24gaXQgbm93Ci0gICAgYWRiLnJlbGVhc2UoKTsKKyAgICBhZGIuZGV0YWNoKCk7CiAKICAgICBKYXZhUGl4ZWxBbGxvY2F0b3IqIGFsbG9jYXRvciA9IChKYXZhUGl4ZWxBbGxvY2F0b3IqKSBkZWNvZGVyLT5nZXRBbGxvY2F0b3IoKTsKICAgICBqYnl0ZUFycmF5IGJ1ZmYgPSBhbGxvY2F0b3ItPmdldFN0b3JhZ2VPYmpBbmRSZXNldCgpOwpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuY3BwCmluZGV4IDgxM2RkNWEuLjlhMDBkNTM4IDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhcy5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuY3BwCkBAIC0yNyw4ICsyNywxNCBAQAogI2luY2x1ZGUgIlNrU2hhZGVyLmgiCiAjaW5jbHVkZSAiU2tUZW1wbGF0ZXMuaCIKIAorI2lmZGVmIFVTRV9NSU5JS0lOCisjaW5jbHVkZSA8bWluaWtpbi9MYXlvdXQuaD4KKyNpbmNsdWRlICJNaW5pa2luU2tpYS5oIgorI2VuZGlmCisKICNpbmNsdWRlICJUZXh0TGF5b3V0LmgiCiAjaW5jbHVkZSAiVGV4dExheW91dENhY2hlLmgiCisjaW5jbHVkZSAiVHlwZWZhY2VJbXBsLmgiCiAKICNpbmNsdWRlICJ1bmljb2RlL3ViaWRpLmgiCiAjaW5jbHVkZSAidW5pY29kZS91c2hhcGUuaCIKQEAgLTc0MiwzNSArNzQ4LDgzIEBACiAgICAgfQogCiAKLSAgICBzdGF0aWMgdm9pZCBkcmF3VGV4dF9fX0NJSUZGSVBhaW50KEpOSUVudiogZW52LCBqb2JqZWN0LCBTa0NhbnZhcyogY2FudmFzLAorICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0X19fQ0lJRkZJUGFpbnRUeXBlZmFjZShKTklFbnYqIGVudiwgam9iamVjdCwgU2tDYW52YXMqIGNhbnZhcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamNoYXJBcnJheSB0ZXh0LCBpbnQgaW5kZXgsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZsb2F0IHgsIGpmbG9hdCB5LCBpbnQgZmxhZ3MsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgaW50IGZsYWdzLCBTa1BhaW50KiBwYWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZWZhY2VJbXBsICp0eXBlZmFjZSkgewogICAgICAgICBqY2hhciogdGV4dEFycmF5ID0gZW52LT5HZXRDaGFyQXJyYXlFbGVtZW50cyh0ZXh0LCBOVUxMKTsKLSAgICAgICAgZHJhd1RleHRXaXRoR2x5cGhzKGNhbnZhcywgdGV4dEFycmF5ICsgaW5kZXgsIDAsIGNvdW50LCB4LCB5LCBmbGFncywgcGFpbnQpOworICAgICAgICBkcmF3VGV4dFdpdGhHbHlwaHMoY2FudmFzLCB0ZXh0QXJyYXkgKyBpbmRleCwgMCwgY291bnQsIHgsIHksIGZsYWdzLCBwYWludCwgdHlwZWZhY2UpOwogICAgICAgICBlbnYtPlJlbGVhc2VDaGFyQXJyYXlFbGVtZW50cyh0ZXh0LCB0ZXh0QXJyYXksIEpOSV9BQk9SVCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZHJhd1RleHRfX1N0cmluZ0lJRkZJUGFpbnQoSk5JRW52KiBlbnYsIGpvYmplY3QsCisgICAgc3RhdGljIHZvaWQgZHJhd1RleHRfX1N0cmluZ0lJRkZJUGFpbnRUeXBlZmFjZShKTklFbnYqIGVudiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrQ2FudmFzKiBjYW52YXMsIGpzdHJpbmcgdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgaW50IGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgaW50IGZsYWdzLCBTa1BhaW50KiBwYWludCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZsb2F0IHgsIGpmbG9hdCB5LCBpbnQgZmxhZ3MsIFNrUGFpbnQqIHBhaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZWZhY2VJbXBsICp0eXBlZmFjZSkgewogICAgICAgICBjb25zdCBqY2hhciogdGV4dEFycmF5ID0gZW52LT5HZXRTdHJpbmdDaGFycyh0ZXh0LCBOVUxMKTsKLSAgICAgICAgZHJhd1RleHRXaXRoR2x5cGhzKGNhbnZhcywgdGV4dEFycmF5LCBzdGFydCwgZW5kLCB4LCB5LCBmbGFncywgcGFpbnQpOworICAgICAgICBkcmF3VGV4dFdpdGhHbHlwaHMoY2FudmFzLCB0ZXh0QXJyYXksIHN0YXJ0LCBlbmQsIHgsIHksIGZsYWdzLCBwYWludCwgdHlwZWZhY2UpOwogICAgICAgICBlbnYtPlJlbGVhc2VTdHJpbmdDaGFycyh0ZXh0LCB0ZXh0QXJyYXkpOwogICAgIH0KIAorI2lmZGVmIFVTRV9NSU5JS0lOCisgICAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1RvU2tpYShTa0NhbnZhcyAqY2FudmFzLCBTa1BhaW50ICpwYWludCwgTGF5b3V0ICpsYXlvdXQsIGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgc2l6ZV90IG5HbHlwaHMgPSBsYXlvdXQtPm5HbHlwaHMoKTsKKyAgICAgICAgdWludDE2X3QgKmdseXBocyA9IG5ldyB1aW50MTZfdFtuR2x5cGhzXTsKKyAgICAgICAgU2tQb2ludCAqcG9zID0gbmV3IFNrUG9pbnRbbkdseXBoc107CisgICAgICAgIFNrVHlwZWZhY2UgKmxhc3RGYWNlID0gTlVMTDsKKyAgICAgICAgU2tUeXBlZmFjZSAqc2tGYWNlID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKworICAgICAgICBwYWludC0+c2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbkdseXBoczsgaSsrKSB7CisgICAgICAgICAgICBNaW5pa2luRm9udFNraWEgKm1mcyA9IHN0YXRpY19jYXN0PE1pbmlraW5Gb250U2tpYSAqPihsYXlvdXQtPmdldEZvbnQoaSkpOworICAgICAgICAgICAgc2tGYWNlID0gbWZzLT5HZXRTa1R5cGVmYWNlKCk7CisgICAgICAgICAgICBnbHlwaHNbaV0gPSBsYXlvdXQtPmdldEdseXBoSWQoaSk7CisgICAgICAgICAgICBwb3NbaV0uZlggPSBTa0Zsb2F0VG9TY2FsYXIoeCArIGxheW91dC0+Z2V0WChpKSk7CisgICAgICAgICAgICBwb3NbaV0uZlkgPSBTa0Zsb2F0VG9TY2FsYXIoeSArIGxheW91dC0+Z2V0WShpKSk7CisgICAgICAgICAgICBpZiAoaSA+IDAgJiYgc2tGYWNlICE9IGxhc3RGYWNlKSB7CisgICAgICAgICAgICAgICAgcGFpbnQtPnNldFR5cGVmYWNlKGxhc3RGYWNlKTsKKyAgICAgICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGdseXBocyArIHN0YXJ0LCAoaSAtIHN0YXJ0KSA8PCAxLCBwb3MgKyBzdGFydCwgKnBhaW50KTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0RmFjZSA9IHNrRmFjZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2tGYWNlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHBhaW50LT5zZXRUeXBlZmFjZShza0ZhY2UpOworICAgICAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChnbHlwaHMgKyBzdGFydCwgKG5HbHlwaHMgLSBzdGFydCkgPDwgMSwgcG9zICsgc3RhcnQsICpwYWludCk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlW10gZ2x5cGhzOworICAgICAgICBkZWxldGVbXSBwb3M7CisgICAgfQorI2VuZGlmCisKICAgICBzdGF0aWMgdm9pZCBkcmF3VGV4dFdpdGhHbHlwaHMoU2tDYW52YXMqIGNhbnZhcywgY29uc3QgamNoYXIqIHRleHRBcnJheSwKICAgICAgICAgICAgIGludCBzdGFydCwgaW50IGVuZCwKLSAgICAgICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgaW50IGZsYWdzLCBTa1BhaW50KiBwYWludCkgeworICAgICAgICAgICAgamZsb2F0IHgsIGpmbG9hdCB5LCBpbnQgZmxhZ3MsIFNrUGFpbnQqIHBhaW50LCBUeXBlZmFjZUltcGwqIHR5cGVmYWNlKSB7CiAKICAgICAgICAgamludCBjb3VudCA9IGVuZCAtIHN0YXJ0OwotICAgICAgICBkcmF3VGV4dFdpdGhHbHlwaHMoY2FudmFzLCB0ZXh0QXJyYXkgKyBzdGFydCwgMCwgY291bnQsIGNvdW50LCB4LCB5LCBmbGFncywgcGFpbnQpOworICAgICAgICBkcmF3VGV4dFdpdGhHbHlwaHMoY2FudmFzLCB0ZXh0QXJyYXkgKyBzdGFydCwgMCwgY291bnQsIGNvdW50LCB4LCB5LCBmbGFncywgcGFpbnQsIHR5cGVmYWNlKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBkcmF3VGV4dFdpdGhHbHlwaHMoU2tDYW52YXMqIGNhbnZhcywgY29uc3QgamNoYXIqIHRleHRBcnJheSwKICAgICAgICAgICAgIGludCBzdGFydCwgaW50IGNvdW50LCBpbnQgY29udGV4dENvdW50LAotICAgICAgICAgICAgamZsb2F0IHgsIGpmbG9hdCB5LCBpbnQgZmxhZ3MsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgICAgICBqZmxvYXQgeCwgamZsb2F0IHksIGludCBmbGFncywgU2tQYWludCogcGFpbnQsIFR5cGVmYWNlSW1wbCogdHlwZWZhY2UpIHsKIAorI2lmZGVmIFVTRV9NSU5JS0lOCisgICAgICAgIExheW91dCBsYXlvdXQ7CisgICAgICAgIFR5cGVmYWNlSW1wbCogcmVzb2x2ZWRGYWNlID0gVHlwZWZhY2VJbXBsX3Jlc29sdmVEZWZhdWx0KHR5cGVmYWNlKTsKKyAgICAgICAgbGF5b3V0LnNldEZvbnRDb2xsZWN0aW9uKHJlc29sdmVkRmFjZS0+ZkZvbnRDb2xsZWN0aW9uKTsKKyAgICAgICAgRm9udFN0eWxlIHN0eWxlID0gcmVzb2x2ZWRGYWNlLT5mU3R5bGU7CisgICAgICAgIGNoYXIgY3NzWzI1Nl07CisgICAgICAgIHNwcmludGYoY3NzLCAiZm9udC1zaXplOiAlZDsgZm9udC13ZWlnaHQ6ICVkOyBmb250LXN0eWxlOiAlcyIsCisgICAgICAgICAgICAoaW50KXBhaW50LT5nZXRUZXh0U2l6ZSgpLAorICAgICAgICAgICAgc3R5bGUuZ2V0V2VpZ2h0KCkgKiAxMDAsCisgICAgICAgICAgICBzdHlsZS5nZXRJdGFsaWMoKSA/ICJpdGFsaWMiIDogIm5vcm1hbCIpOworICAgICAgICBsYXlvdXQuc2V0UHJvcGVydGllcyhjc3MpOworICAgICAgICBsYXlvdXQuZG9MYXlvdXQodGV4dEFycmF5ICsgc3RhcnQsIGNvdW50KTsKKyAgICAgICAgZHJhd0dseXBoc1RvU2tpYShjYW52YXMsIHBhaW50LCAmbGF5b3V0LCB4LCB5KTsKKyNlbHNlCiAgICAgICAgIHNwPFRleHRMYXlvdXRWYWx1ZT4gdmFsdWUgPSBUZXh0TGF5b3V0RW5naW5lOjpnZXRJbnN0YW5jZSgpLmdldFZhbHVlKHBhaW50LAogICAgICAgICAgICAgICAgIHRleHRBcnJheSwgc3RhcnQsIGNvdW50LCBjb250ZXh0Q291bnQsIGZsYWdzKTsKICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKQEAgLTc4Niw2ICs4NDAsNyBAQAogICAgICAgICBkb0RyYXdHbHlwaHNQb3MoY2FudmFzLCB2YWx1ZS0+Z2V0R2x5cGhzKCksIHZhbHVlLT5nZXRQb3MoKSwgMCwgdmFsdWUtPmdldEdseXBoc0NvdW50KCksIHgsIHksIGZsYWdzLCBwYWludCk7CiAgICAgICAgIGRvRHJhd1RleHREZWNvcmF0aW9ucyhjYW52YXMsIHgsIHksIHZhbHVlLT5nZXRUb3RhbEFkdmFuY2UoKSwgcGFpbnQpOwogICAgICAgICBwYWludC0+c2V0VGV4dEFsaWduKGFsaWduKTsKKyNlbmRpZgogICAgIH0KIAogLy8gU2FtZSB2YWx1ZXMgdXNlZCBieSBTa2lhCkBAIC04NDIsMjcgKzg5NywyOSBAQAogICAgICAgICBkZWxldGVbXSBwb3NQdHI7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZHJhd1RleHRSdW5fX19DSUlJSUZGSVBhaW50KAorICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0UnVuX19fQ0lJSUlGRklQYWludFR5cGVmYWNlKAogICAgICAgICBKTklFbnYqIGVudiwgam9iamVjdCwgU2tDYW52YXMqIGNhbnZhcywgamNoYXJBcnJheSB0ZXh0LCBpbnQgaW5kZXgsCiAgICAgICAgIGludCBjb3VudCwgaW50IGNvbnRleHRJbmRleCwgaW50IGNvbnRleHRDb3VudCwKLSAgICAgICAgamZsb2F0IHgsIGpmbG9hdCB5LCBpbnQgZGlyRmxhZ3MsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgaW50IGRpckZsYWdzLCBTa1BhaW50KiBwYWludCwKKyAgICAgICAgVHlwZWZhY2VJbXBsKiB0eXBlZmFjZSkgewogCiAgICAgICAgIGpjaGFyKiBjaGFycyA9IGVudi0+R2V0Q2hhckFycmF5RWxlbWVudHModGV4dCwgTlVMTCk7CiAgICAgICAgIGRyYXdUZXh0V2l0aEdseXBocyhjYW52YXMsIGNoYXJzICsgY29udGV4dEluZGV4LCBpbmRleCAtIGNvbnRleHRJbmRleCwKLSAgICAgICAgICAgICAgICBjb3VudCwgY29udGV4dENvdW50LCB4LCB5LCBkaXJGbGFncywgcGFpbnQpOworICAgICAgICAgICAgICAgIGNvdW50LCBjb250ZXh0Q291bnQsIHgsIHksIGRpckZsYWdzLCBwYWludCwgdHlwZWZhY2UpOwogICAgICAgICBlbnYtPlJlbGVhc2VDaGFyQXJyYXlFbGVtZW50cyh0ZXh0LCBjaGFycywgSk5JX0FCT1JUKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBkcmF3VGV4dFJ1bl9fU3RyaW5nSUlJSUZGSVBhaW50KAorICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0UnVuX19TdHJpbmdJSUlJRkZJUGFpbnRUeXBlZmFjZSgKICAgICAgICAgSk5JRW52KiBlbnYsIGpvYmplY3Qgb2JqLCBTa0NhbnZhcyogY2FudmFzLCBqc3RyaW5nIHRleHQsIGppbnQgc3RhcnQsCiAgICAgICAgIGppbnQgZW5kLCBqaW50IGNvbnRleHRTdGFydCwgamludCBjb250ZXh0RW5kLAotICAgICAgICBqZmxvYXQgeCwgamZsb2F0IHksIGppbnQgZGlyRmxhZ3MsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgamludCBkaXJGbGFncywgU2tQYWludCogcGFpbnQsCisgICAgICAgIFR5cGVmYWNlSW1wbCogdHlwZWZhY2UpIHsKIAogICAgICAgICBqaW50IGNvdW50ID0gZW5kIC0gc3RhcnQ7CiAgICAgICAgIGppbnQgY29udGV4dENvdW50ID0gY29udGV4dEVuZCAtIGNvbnRleHRTdGFydDsKICAgICAgICAgY29uc3QgamNoYXIqIGNoYXJzID0gZW52LT5HZXRTdHJpbmdDaGFycyh0ZXh0LCBOVUxMKTsKICAgICAgICAgZHJhd1RleHRXaXRoR2x5cGhzKGNhbnZhcywgY2hhcnMgKyBjb250ZXh0U3RhcnQsIHN0YXJ0IC0gY29udGV4dFN0YXJ0LAotICAgICAgICAgICAgICAgIGNvdW50LCBjb250ZXh0Q291bnQsIHgsIHksIGRpckZsYWdzLCBwYWludCk7CisgICAgICAgICAgICAgICAgY291bnQsIGNvbnRleHRDb3VudCwgeCwgeSwgZGlyRmxhZ3MsIHBhaW50LCB0eXBlZmFjZSk7CiAgICAgICAgIGVudi0+UmVsZWFzZVN0cmluZ0NoYXJzKHRleHQsIGNoYXJzKTsKICAgICB9CiAKQEAgLTEwNzAsMTQgKzExMjcsMTQgQEAKICAgICAgICAgKHZvaWQqKVNrQ2FudmFzR2x1ZTo6ZHJhd0JpdG1hcE1lc2h9LAogICAgIHsibmF0aXZlRHJhd1ZlcnRpY2VzIiwgIihJSUlbRklbRklbSUlbU0lJSSlWIiwKICAgICAgICAgKHZvaWQqKVNrQ2FudmFzR2x1ZTo6ZHJhd1ZlcnRpY2VzfSwKLSAgICB7Im5hdGl2ZV9kcmF3VGV4dCIsIihJW0NJSUZGSUkpViIsCi0gICAgICAgICh2b2lkKikgU2tDYW52YXNHbHVlOjpkcmF3VGV4dF9fX0NJSUZGSVBhaW50fSwKLSAgICB7Im5hdGl2ZV9kcmF3VGV4dCIsIihJTGphdmEvbGFuZy9TdHJpbmc7SUlGRklJKVYiLAotICAgICAgICAodm9pZCopIFNrQ2FudmFzR2x1ZTo6ZHJhd1RleHRfX1N0cmluZ0lJRkZJUGFpbnR9LAotICAgIHsibmF0aXZlX2RyYXdUZXh0UnVuIiwiKElbQ0lJSUlGRklJKVYiLAotICAgICAgICAodm9pZCopIFNrQ2FudmFzR2x1ZTo6ZHJhd1RleHRSdW5fX19DSUlJSUZGSVBhaW50fSwKLSAgICB7Im5hdGl2ZV9kcmF3VGV4dFJ1biIsIihJTGphdmEvbGFuZy9TdHJpbmc7SUlJSUZGSUkpViIsCi0gICAgICAgICh2b2lkKikgU2tDYW52YXNHbHVlOjpkcmF3VGV4dFJ1bl9fU3RyaW5nSUlJSUZGSVBhaW50fSwKKyAgICB7Im5hdGl2ZV9kcmF3VGV4dCIsIihJW0NJSUZGSUlJKVYiLAorICAgICAgICAodm9pZCopIFNrQ2FudmFzR2x1ZTo6ZHJhd1RleHRfX19DSUlGRklQYWludFR5cGVmYWNlfSwKKyAgICB7Im5hdGl2ZV9kcmF3VGV4dCIsIihJTGphdmEvbGFuZy9TdHJpbmc7SUlGRklJSSlWIiwKKyAgICAgICAgKHZvaWQqKSBTa0NhbnZhc0dsdWU6OmRyYXdUZXh0X19TdHJpbmdJSUZGSVBhaW50VHlwZWZhY2V9LAorICAgIHsibmF0aXZlX2RyYXdUZXh0UnVuIiwiKElbQ0lJSUlGRklJSSlWIiwKKyAgICAgICAgKHZvaWQqKSBTa0NhbnZhc0dsdWU6OmRyYXdUZXh0UnVuX19fQ0lJSUlGRklQYWludFR5cGVmYWNlfSwKKyAgICB7Im5hdGl2ZV9kcmF3VGV4dFJ1biIsIihJTGphdmEvbGFuZy9TdHJpbmc7SUlJSUZGSUlJKVYiLAorICAgICAgICAodm9pZCopIFNrQ2FudmFzR2x1ZTo6ZHJhd1RleHRSdW5fX1N0cmluZ0lJSUlGRklQYWludFR5cGVmYWNlfSwKICAgICB7Im5hdGl2ZV9kcmF3UG9zVGV4dCIsIihJW0NJSVtGSSlWIiwKICAgICAgICAgKHZvaWQqKSBTa0NhbnZhc0dsdWU6OmRyYXdQb3NUZXh0X19fQ0lJX0ZQYWludH0sCiAgICAgeyJuYXRpdmVfZHJhd1Bvc1RleHQiLCIoSUxqYXZhL2xhbmcvU3RyaW5nO1tGSSlWIiwKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JGaWx0ZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlci5jcHAKaW5kZXggZGQxMTc3Yi4uMjYxNjllNyAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlci5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlci5jcHAKQEAgLTMzLDEwICszMywxMCBAQAogY2xhc3MgU2tDb2xvckZpbHRlckdsdWUgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwgU2tDb2xvckZpbHRlciogb2JqLCBTa2lhQ29sb3JGaWx0ZXIqIGYpIHsKLSAgICAgICAgU2tTYWZlVW5yZWYob2JqKTsKKyAgICAgICAgaWYgKG9iaikgU2tTYWZlVW5yZWYob2JqKTsKICAgICAgICAgLy8gZiA9PSBOVUxMIHdoZW4gbm90ICFVU0VfT1BFTkdMX1JFTkRFUkVSLCBzbyBubyBuZWVkIHRvIGRlbGV0ZSBvdXRzaWRlIHRoZSBpZmRlZgogI2lmZGVmIFVTRV9PUEVOR0xfUkVOREVSRVIKLSAgICAgICAgaWYgKGFuZHJvaWQ6OnVpcmVuZGVyZXI6OkNhY2hlczo6aGFzSW5zdGFuY2UoKSkgeworICAgICAgICBpZiAoZiAmJiBhbmRyb2lkOjp1aXJlbmRlcmVyOjpDYWNoZXM6Omhhc0luc3RhbmNlKCkpIHsKICAgICAgICAgICAgIGFuZHJvaWQ6OnVpcmVuZGVyZXI6OkNhY2hlczo6Z2V0SW5zdGFuY2UoKS5yZXNvdXJjZUNhY2hlLmRlc3RydWN0b3IoZik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBkZWxldGUgZjsKQEAgLTExMiw3ICsxMTIsNyBAQAogfTsKIAogc3RhdGljIEpOSU5hdGl2ZU1ldGhvZCBjb2xvcmZpbHRlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJmaW5hbGl6ZXIiLCAiKElJKVYiLCAodm9pZCopIFNrQ29sb3JGaWx0ZXJHbHVlOjpmaW5hbGl6ZXJ9CisgICAgeyJkZXN0cm95RmlsdGVyIiwgIihJSSlWIiwgKHZvaWQqKSBTa0NvbG9yRmlsdGVyR2x1ZTo6ZmluYWxpemVyfQogfTsKIAogc3RhdGljIEpOSU5hdGl2ZU1ldGhvZCBwb3J0ZXJkdWZmX21ldGhvZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvR3JhcGhpY3MuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9HcmFwaGljcy5jcHAKaW5kZXggYTEwZTE1ODYuLjJhMmRiNTcgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvR3JhcGhpY3MuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvR3JhcGhpY3MuY3BwCkBAIC0zNTIsNiArMzUyLDE4IEBACiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAorLy8gQXNzZXJ0IHRoYXQgYml0bWFwJ3MgU2tBbHBoYVR5cGUgaXMgY29uc2lzdGVudCB3aXRoIGlzUHJlbXVsdGlwbGllZC4KK3N0YXRpYyB2b2lkIGFzc2VydF9wcmVtdWx0aXBsaWVkKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGJvb2wgaXNQcmVtdWx0aXBsaWVkKSB7CisgICAgLy8ga09wYXF1ZV9Ta0FscGhhVHlwZSBhbmQga0lnbm9yZV9Ta0FscGhhVHlwZSBtZWFuIHRoYXQgaXNQcmVtdWx0aXBsaWVkIGlzCisgICAgLy8gaXJyZWxldmFudC4gVGhpcyBqdXN0IHRlc3RzIHRvIGVuc3VyZSB0aGF0IHRoZSBTa0FscGhhVHlwZSBpcyBub3QKKyAgICAvLyBvcHBvc2l0ZSBvZiBpc1ByZW11bHRpcGxpZWQuCisgICAgaWYgKGlzUHJlbXVsdGlwbGllZCkgeworICAgICAgICBTa0FTU0VSVChiaXRtYXAuYWxwaGFUeXBlKCkgIT0ga1VucHJlbXVsX1NrQWxwaGFUeXBlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTa0FTU0VSVChiaXRtYXAuYWxwaGFUeXBlKCkgIT0ga1ByZW11bF9Ta0FscGhhVHlwZSk7CisgICAgfQorfQorCiBqb2JqZWN0IEdyYXBoaWNzSk5JOjpjcmVhdGVCaXRtYXAoSk5JRW52KiBlbnYsIFNrQml0bWFwKiBiaXRtYXAsIGpieXRlQXJyYXkgYnVmZmVyLAogICAgICAgICBpbnQgYml0bWFwQ3JlYXRlRmxhZ3MsIGpieXRlQXJyYXkgbmluZXBhdGNoLCBqaW50QXJyYXkgbGF5b3V0Ym91bmRzLCBpbnQgZGVuc2l0eSkKIHsKQEAgLTM2MCw2ICszNzIsMTAgQEAKICAgICBib29sIGlzTXV0YWJsZSA9IGJpdG1hcENyZWF0ZUZsYWdzICYga0JpdG1hcENyZWF0ZUZsYWdfTXV0YWJsZTsKICAgICBib29sIGlzUHJlbXVsdGlwbGllZCA9IGJpdG1hcENyZWF0ZUZsYWdzICYga0JpdG1hcENyZWF0ZUZsYWdfUHJlbXVsdGlwbGllZDsKIAorICAgIC8vIFRoZSBjYWxsZXIgbmVlZHMgdG8gaGF2ZSBhbHJlYWR5IHNldCB0aGUgYWxwaGEgdHlwZSBwcm9wZXJseSwgc28gdGhlCisgICAgLy8gbmF0aXZlIFNrQml0bWFwIHN0YXlzIGluIHN5bmMgd2l0aCB0aGUgSmF2YSBCaXRtYXAuCisgICAgYXNzZXJ0X3ByZW11bHRpcGxpZWQoKmJpdG1hcCwgaXNQcmVtdWx0aXBsaWVkKTsKKwogICAgIGpvYmplY3Qgb2JqID0gZW52LT5OZXdPYmplY3QoZ0JpdG1hcF9jbGFzcywgZ0JpdG1hcF9jb25zdHJ1Y3Rvck1ldGhvZElELAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8amludD4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJpdG1hcCkpLCBidWZmZXIsCiAgICAgICAgICAgICBiaXRtYXAtPndpZHRoKCksIGJpdG1hcC0+aGVpZ2h0KCksIGRlbnNpdHksIGlzTXV0YWJsZSwgaXNQcmVtdWx0aXBsaWVkLApAQCAtMzc3LDYgKzM5MywxMCBAQAogdm9pZCBHcmFwaGljc0pOSTo6cmVpbml0Qml0bWFwKEpOSUVudiogZW52LCBqb2JqZWN0IGphdmFCaXRtYXAsIFNrQml0bWFwKiBiaXRtYXAsCiAgICAgICAgIGJvb2wgaXNQcmVtdWx0aXBsaWVkKQogeworICAgIC8vIFRoZSBjYWxsZXIgbmVlZHMgdG8gaGF2ZSBhbHJlYWR5IHNldCB0aGUgYWxwaGEgdHlwZSBwcm9wZXJseSwgc28gdGhlCisgICAgLy8gbmF0aXZlIFNrQml0bWFwIHN0YXlzIGluIHN5bmMgd2l0aCB0aGUgSmF2YSBCaXRtYXAuCisgICAgYXNzZXJ0X3ByZW11bHRpcGxpZWQoKmJpdG1hcCwgaXNQcmVtdWx0aXBsaWVkKTsKKwogICAgIGVudi0+Q2FsbFZvaWRNZXRob2QoamF2YUJpdG1hcCwgZ0JpdG1hcF9yZWluaXRNZXRob2RJRCwKICAgICAgICAgICAgIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSwgaXNQcmVtdWx0aXBsaWVkKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvR3JhcGhpY3NKTkkuaCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvR3JhcGhpY3NKTkkuaAppbmRleCBmNDU5MGI5Li41ZjI5NjA0IDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0dyYXBoaWNzSk5JLmgKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9HcmFwaGljc0pOSS5oCkBAIC01Nyw2ICs1Nyw3IEBACiAKICAgICAvKiogQ3JlYXRlIGEgamF2YSBCaXRtYXAgb2JqZWN0IGdpdmVuIHRoZSBuYXRpdmUgYml0bWFwIChyZXF1aXJlZCkgYW5kIG9wdGlvbmFsCiAgICAgICAgIHN0b3JhZ2UgYXJyYXkgKG1heSBiZSBudWxsKS4KKyAgICAgICAgYml0bWFwJ3MgU2tBbHBoYVR5cGUgbXVzdCBhbHJlYWR5IGJlIGluIHN5bmMgd2l0aCBiaXRtYXBDcmVhdGVGbGFncy4KICAgICAqLwogICAgIHN0YXRpYyBqb2JqZWN0IGNyZWF0ZUJpdG1hcChKTklFbnYqIGVudiwgU2tCaXRtYXAqIGJpdG1hcCwgamJ5dGVBcnJheSBidWZmZXIsCiAgICAgICAgICAgICBpbnQgYml0bWFwQ3JlYXRlRmxhZ3MsIGpieXRlQXJyYXkgbmluZXBhdGNoLCBqaW50QXJyYXkgbGF5b3V0Ym91bmRzLCBpbnQgZGVuc2l0eSA9IC0xKTsKQEAgLTY0LDYgKzY1LDkgQEAKICAgICBzdGF0aWMgam9iamVjdCBjcmVhdGVCaXRtYXAoSk5JRW52KiBlbnYsIFNrQml0bWFwKiBiaXRtYXAsIGludCBiaXRtYXBDcmVhdGVGbGFncywKICAgICAgICAgICAgIGpieXRlQXJyYXkgbmluZXBhdGNoLCBpbnQgZGVuc2l0eSA9IC0xKTsKIAorICAgIC8qKiBSZWluaXRpYWxpemUgYSBiaXRtYXAuIGJpdG1hcCBtdXN0IGFscmVhZHkgaGF2ZSBpdHMgU2tBbHBoYVR5cGUgc2V0IGluCisgICAgICAgIHN5bmMgd2l0aCBpc1ByZW11bHRpcGxpZWQKKyAgICAqLwogICAgIHN0YXRpYyB2b2lkIHJlaW5pdEJpdG1hcChKTklFbnYqIGVudiwgam9iamVjdCBqYXZhQml0bWFwLCBTa0JpdG1hcCogYml0bWFwLAogICAgICAgICAgICAgYm9vbCBpc1ByZW11bHRpcGxpZWQpOwogCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL01pbmlraW5Ta2lhLmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTWluaWtpblNraWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMmM5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL01pbmlraW5Ta2lhLmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPFNrVHlwZWZhY2UuaD4KKyNpbmNsdWRlIDxTa1BhaW50Lmg+CisjaW5jbHVkZSA8U2tGUC5oPgorCisjZGVmaW5lIExPR19UQUcgIk1pbmlraW4iCisjaW5jbHVkZSA8Y3V0aWxzL2xvZy5oPgorCisjaW5jbHVkZSA8bWluaWtpbi9NaW5pa2luRm9udC5oPgorI2luY2x1ZGUgIk1pbmlraW5Ta2lhLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworTWluaWtpbkZvbnRTa2lhOjpNaW5pa2luRm9udFNraWEoU2tUeXBlZmFjZSAqdHlwZWZhY2UpIDoKKyAgICBtVHlwZWZhY2UodHlwZWZhY2UpIHsKK30KKworTWluaWtpbkZvbnRTa2lhOjp+TWluaWtpbkZvbnRTa2lhKCkgeworICAgIFNrU2FmZVVucmVmKG1UeXBlZmFjZSk7Cit9CisKK2Jvb2wgTWluaWtpbkZvbnRTa2lhOjpHZXRHbHlwaCh1aW50MzJfdCBjb2RlcG9pbnQsIHVpbnQzMl90ICpnbHlwaCkgY29uc3QgeworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgcGFpbnQuc2V0VHlwZWZhY2UobVR5cGVmYWNlKTsKKyAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjMyX1RleHRFbmNvZGluZyk7CisgICAgdWludDE2X3QgZ2x5cGgxNjsKKyAgICBwYWludC50ZXh0VG9HbHlwaHMoJmNvZGVwb2ludCwgc2l6ZW9mKGNvZGVwb2ludCksICZnbHlwaDE2KTsKKyAgICAqZ2x5cGggID0gZ2x5cGgxNjsKKyAgICByZXR1cm4gISFnbHlwaDsKK30KKworZmxvYXQgTWluaWtpbkZvbnRTa2lhOjpHZXRIb3Jpem9udGFsQWR2YW5jZSh1aW50MzJfdCBnbHlwaF9pZCwKKyAgICBjb25zdCBNaW5pa2luUGFpbnQgJnBhaW50KSBjb25zdCB7CisgICAgU2tQYWludCBza3BhaW50OworICAgIHNrcGFpbnQuc2V0VHlwZWZhY2UobVR5cGVmYWNlKTsKKyAgICBza3BhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOworICAgIC8vIFRPRE86IHNldCBtb3JlIHBhaW50IHBhcmFtZXRlcnMgZnJvbSBNaW5pa2luCisgICAgc2twYWludC5zZXRUZXh0U2l6ZShwYWludC5zaXplKTsKKyAgICB1aW50MTZfdCBnbHlwaDE2ID0gZ2x5cGhfaWQ7CisgICAgU2tTY2FsYXIgc2tXaWR0aDsKKyAgICBTa1JlY3Qgc2tCb3VuZHM7CisgICAgc2twYWludC5nZXRUZXh0V2lkdGhzKCZnbHlwaDE2LCBzaXplb2YoZ2x5cGgxNiksICZza1dpZHRoLCAmc2tCb3VuZHMpOworICAgIC8vIFRPRE86IGdldCBib3VuZHMgaW5mb3JtYXRpb24KKyAgICByZXR1cm4gU2tTY2FsYXJUb0ZQKHNrV2lkdGgpOworfQorCitib29sIE1pbmlraW5Gb250U2tpYTo6R2V0VGFibGUodWludDMyX3QgdGFnLCB1aW50OF90ICpidWYsIHNpemVfdCAqc2l6ZSkgeworICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICBjb25zdCBzaXplX3QgdGFibGVTaXplID0gbVR5cGVmYWNlLT5nZXRUYWJsZVNpemUodGFnKTsKKyAgICAgICAgKnNpemUgPSB0YWJsZVNpemU7CisgICAgICAgIHJldHVybiB0YWJsZVNpemUgIT0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBzaXplX3QgYWN0dWFsU2l6ZSA9IG1UeXBlZmFjZS0+Z2V0VGFibGVEYXRhKHRhZywgMCwgKnNpemUsIGJ1Zik7CisgICAgICAgICpzaXplID0gYWN0dWFsU2l6ZTsKKyAgICAgICAgcmV0dXJuIGFjdHVhbFNpemUgIT0gMDsKKyAgICB9Cit9CisKK1NrVHlwZWZhY2UgKk1pbmlraW5Gb250U2tpYTo6R2V0U2tUeXBlZmFjZSgpIHsKKyAgICByZXR1cm4gbVR5cGVmYWNlOworfQorCitpbnQzMl90IE1pbmlraW5Gb250U2tpYTo6R2V0VW5pcXVlSWQoKSBjb25zdCB7CisgICAgcmV0dXJuIG1UeXBlZmFjZS0+dW5pcXVlSUQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9NaW5pa2luU2tpYS5oIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9NaW5pa2luU2tpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZGI1NTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL01pbmlraW5Ta2lhLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgTWluaWtpbkZvbnRTa2lhIDogcHVibGljIE1pbmlraW5Gb250IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBNaW5pa2luRm9udFNraWEoU2tUeXBlZmFjZSAqdHlwZWZhY2UpOworCisgICAgfk1pbmlraW5Gb250U2tpYSgpOworCisgICAgYm9vbCBHZXRHbHlwaCh1aW50MzJfdCBjb2RlcG9pbnQsIHVpbnQzMl90ICpnbHlwaCkgY29uc3Q7CisKKyAgICBmbG9hdCBHZXRIb3Jpem9udGFsQWR2YW5jZSh1aW50MzJfdCBnbHlwaF9pZCwKKyAgICAgICAgY29uc3QgTWluaWtpblBhaW50ICZwYWludCkgY29uc3Q7CisKKyAgICAvLyBJZiBidWYgaXMgTlVMTCwganVzdCB1cGRhdGUgc2l6ZQorICAgIGJvb2wgR2V0VGFibGUodWludDMyX3QgdGFnLCB1aW50OF90ICpidWYsIHNpemVfdCAqc2l6ZSk7CisKKyAgICBpbnQzMl90IEdldFVuaXF1ZUlkKCkgY29uc3Q7CisKKyAgICBTa1R5cGVmYWNlICpHZXRTa1R5cGVmYWNlKCk7CisKK3ByaXZhdGU6CisgICAgU2tUeXBlZmFjZSAqbVR5cGVmYWNlOworCit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTW92aWUuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Nb3ZpZS5jcHAKaW5kZXggMDA0MGI2Zi4uNDYxZjcyMyAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Nb3ZpZS5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Nb3ZpZS5jcHAKQEAgLTg1LDcgKzg1LDkgQEAKIHN0YXRpYyBqb2JqZWN0IG1vdmllX2RlY29kZUFzc2V0KEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LCBqbG9uZyBuYXRpdmVfYXNzZXQpIHsKICAgICBhbmRyb2lkOjpBc3NldCogYXNzZXQgPSByZWludGVycHJldF9jYXN0PGFuZHJvaWQ6OkFzc2V0Kj4obmF0aXZlX2Fzc2V0KTsKICAgICBpZiAoYXNzZXQgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0gICAgU2tBdXRvVFVucmVmPFNrU3RyZWFtUmV3aW5kYWJsZT4gc3RyZWFtIChuZXcgYW5kcm9pZDo6QXNzZXRTdHJlYW1BZGFwdG9yKGFzc2V0KSk7CisgICAgU2tBdXRvVFVucmVmPFNrU3RyZWFtUmV3aW5kYWJsZT4gc3RyZWFtIChuZXcgYW5kcm9pZDo6QXNzZXRTdHJlYW1BZGFwdG9yKGFzc2V0LAorICAgICAgICAgICAgYW5kcm9pZDo6QXNzZXRTdHJlYW1BZGFwdG9yOjprTm9fT3duQXNzZXQsCisgICAgICAgICAgICBhbmRyb2lkOjpBc3NldFN0cmVhbUFkYXB0b3I6OmtOb19IYXNNZW1vcnlCYXNlKSk7CiAgICAgU2tNb3ZpZSogbW9vdiA9IFNrTW92aWU6OkRlY29kZVN0cmVhbShzdHJlYW0uZ2V0KCkpOwogICAgIHJldHVybiBjcmVhdGVfam1vdmllKGVudiwgbW9vdik7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaEltcGwuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9OaW5lUGF0Y2hJbXBsLmNwcAppbmRleCAwMWU3ZTNlLi5kNDNjMWJlIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaEltcGwuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTmluZVBhdGNoSW1wbC5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KIAogc3RhdGljIGJvb2wgZ2V0Q29sb3IoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgaW50IHgsIGludCB5LCBTa0NvbG9yKiBjKSB7Ci0gICAgc3dpdGNoIChiaXRtYXAuZ2V0Q29uZmlnKCkpIHsKKyAgICBzd2l0Y2ggKGJpdG1hcC5jb25maWcoKSkgewogICAgICAgICBjYXNlIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZzoKICAgICAgICAgICAgICpjID0gU2tVblByZU11bHRpcGx5OjpQTUNvbG9yVG9Db2xvcigqYml0bWFwLmdldEFkZHIzMih4LCB5KSk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTmluZVBhdGNoUGVla2VyLmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTmluZVBhdGNoUGVla2VyLmNwcAppbmRleCBkZjk5NmFmLi5kMzQ4MmRhIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaFBlZWtlci5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9OaW5lUGF0Y2hQZWVrZXIuY3BwCkBAIC00MCwxNSArNDAsMTQgQEAKICAgICAgICAgLy8gbm93IHVwZGF0ZSBvdXIgaG9zdCB0byBmb3JjZSBpbmRleCBvciAzMmJpdCBjb25maWcKICAgICAgICAgLy8gJ2NhdXNlIHdlIGRvbid0IHdhbnQgNTY1IHByZWRpdGhlcmVkLCBzaW5jZSBhcyBhIDlwYXRjaCwgd2Uga25vdwogICAgICAgICAvLyB3ZSB3aWxsIGJlIHN0cmV0Y2hlZCwgYW5kIHRoZXJlZm9yZSB3ZSB3YW50IHRvIGRpdGhlciBhZnRlcndhcmRzLgotICAgICAgICBzdGF0aWMgY29uc3QgU2tCaXRtYXA6OkNvbmZpZyBnTm81NjVQcmVmW10gPSB7Ci0gICAgICAgICAgICBTa0JpdG1hcDo6a0luZGV4OF9Db25maWcsCi0gICAgICAgICAgICBTa0JpdG1hcDo6a0luZGV4OF9Db25maWcsCi0gICAgICAgICAgICBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsCi0gICAgICAgICAgICBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsCi0gICAgICAgICAgICBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsCi0gICAgICAgICAgICBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsCi0gICAgICAgIH07Ci0gICAgICAgIGZIb3N0LT5zZXRQcmVmQ29uZmlnVGFibGUoZ05vNTY1UHJlZik7CisgICAgICAgIFNrSW1hZ2VEZWNvZGVyOjpQcmVmQ29uZmlnVGFibGUgdGFibGU7CisgICAgICAgIHRhYmxlLmZQcmVmRm9yXzhJbmRleF9Ob0FscGhhX3NyYyAgID0gU2tCaXRtYXA6OmtJbmRleDhfQ29uZmlnOworICAgICAgICB0YWJsZS5mUHJlZkZvcl84SW5kZXhfWWVzQWxwaGFfc3JjICA9IFNrQml0bWFwOjprSW5kZXg4X0NvbmZpZzsKKyAgICAgICAgdGFibGUuZlByZWZGb3JfOEdyYXlfc3JjICAgICAgICAgICAgPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWc7CisgICAgICAgIHRhYmxlLmZQcmVmRm9yXzhicGNfTm9BbHBoYV9zcmMgICAgID0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnOworICAgICAgICB0YWJsZS5mUHJlZkZvcl84YnBjX1llc0FscGhhX3NyYyAgICA9IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZzsKKworICAgICAgICBmSG9zdC0+c2V0UHJlZkNvbmZpZ1RhYmxlKHRhYmxlKTsKICAgICB9IGVsc2UgaWYgKHN0cmNtcCgibnBMYiIsIHRhZykgPT0gMCAmJiBsZW5ndGggPT0gc2l6ZW9mKGludCkgKiA0KSB7CiAgICAgICAgIGZMYXlvdXRCb3VuZHMgPSBuZXcgaW50WzRdOwogICAgICAgICBtZW1jcHkoZkxheW91dEJvdW5kcywgZGF0YSwgc2l6ZW9mKGludCkgKiA0KTsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvUGFpbnQuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYWludC5jcHAKaW5kZXggNDBlMDczMS4uMWNhM2YzYSAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYWludC5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYWludC5jcHAKQEAgLTI0NSw3ICsyNDUsMTIgQEAKICAgICB9CiAKICAgICBzdGF0aWMgU2tUeXBlZmFjZSogc2V0VHlwZWZhY2UoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosIFNrUGFpbnQqIG9iaiwgU2tUeXBlZmFjZSogdHlwZWZhY2UpIHsKKyNpZm5kZWYgVVNFX01JTklLSU4KICAgICAgICAgcmV0dXJuIG9iai0+c2V0VHlwZWZhY2UodHlwZWZhY2UpOworI2Vsc2UKKyAgICAgICAgLy8gVE9ETyhyYXBoKTogbm90IHlldCBpbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgogICAgIH0KIAogICAgIHN0YXRpYyBTa1Jhc3Rlcml6ZXIqIHNldFJhc3Rlcml6ZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosIFNrUGFpbnQqIG9iaiwgU2tSYXN0ZXJpemVyKiByYXN0ZXJpemVyKSB7CmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1BhdGguY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYXRoLmNwcAppbmRleCBhYjdmMWRjLi4yMTI2ZWQ0IDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1BhdGguY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aC5jcHAKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJwYXRob3BzL1NrUGF0aE9wcy5oIgogCiAjaW5jbHVkZSA8Q2FjaGVzLmg+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPG1hcD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCkBAIC0yNjUsNiArMjY3LDI0MiBAQAogICAgIHN0YXRpYyBqYm9vbGVhbiBvcChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwgU2tQYXRoKiBwMSwgU2tQYXRoKiBwMiwgU2tQYXRoT3Agb3AsIFNrUGF0aCogcikgewogICAgICAgICAgcmV0dXJuIE9wKCpwMSwgKnAyLCBvcCwgcik7CiAgICAgIH0KKworICAgIHR5cGVkZWYgU2tQb2ludCAoKmJlemllckNhbGN1bGF0aW9uKShmbG9hdCB0LCBjb25zdCBTa1BvaW50KiBwb2ludHMpOworCisgICAgc3RhdGljIHZvaWQgYWRkTW92ZShzdGQ6OnZlY3RvcjxTa1BvaW50PiYgc2VnbWVudFBvaW50cywgc3RkOjp2ZWN0b3I8ZmxvYXQ+JiBsZW5ndGhzLAorICAgICAgICAgICAgY29uc3QgU2tQb2ludCYgcG9pbnQpIHsKKyAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKCFsZW5ndGhzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGxlbmd0aHMuYmFjaygpOworICAgICAgICB9CisgICAgICAgIHNlZ21lbnRQb2ludHMucHVzaF9iYWNrKHBvaW50KTsKKyAgICAgICAgbGVuZ3Rocy5wdXNoX2JhY2sobGVuZ3RoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhZGRMaW5lKHN0ZDo6dmVjdG9yPFNrUG9pbnQ+JiBzZWdtZW50UG9pbnRzLCBzdGQ6OnZlY3RvcjxmbG9hdD4mIGxlbmd0aHMsCisgICAgICAgICAgICBjb25zdCBTa1BvaW50JiB0b1BvaW50KSB7CisgICAgICAgIGlmIChzZWdtZW50UG9pbnRzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHNlZ21lbnRQb2ludHMucHVzaF9iYWNrKFNrUG9pbnQ6Ok1ha2UoMCwgMCkpOworICAgICAgICAgICAgbGVuZ3Rocy5wdXNoX2JhY2soMCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2VnbWVudFBvaW50cy5iYWNrKCkgPT0gdG9Qb2ludCkgeworICAgICAgICAgICAgcmV0dXJuOyAvLyBFbXB0eSBsaW5lCisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgbGVuZ3RoID0gbGVuZ3Rocy5iYWNrKCkgKyBTa1BvaW50OjpEaXN0YW5jZShzZWdtZW50UG9pbnRzLmJhY2soKSwgdG9Qb2ludCk7CisgICAgICAgIHNlZ21lbnRQb2ludHMucHVzaF9iYWNrKHRvUG9pbnQpOworICAgICAgICBsZW5ndGhzLnB1c2hfYmFjayhsZW5ndGgpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjdWJpY0Nvb3JkaW5hdGVDYWxjdWxhdGlvbihmbG9hdCB0LCBmbG9hdCBwMCwgZmxvYXQgcDEsIGZsb2F0IHAyLCBmbG9hdCBwMykgeworICAgICAgICBmbG9hdCBvbmVNaW51c1QgPSAxIC0gdDsKKyAgICAgICAgZmxvYXQgb25lTWludXNUU3F1YXJlZCA9IG9uZU1pbnVzVCAqIG9uZU1pbnVzVDsKKyAgICAgICAgZmxvYXQgb25lTWludXNUQ3ViZWQgPSBvbmVNaW51c1RTcXVhcmVkICogb25lTWludXNUOworICAgICAgICBmbG9hdCB0U3F1YXJlZCA9IHQgKiB0OworICAgICAgICBmbG9hdCB0Q3ViZWQgPSB0U3F1YXJlZCAqIHQ7CisgICAgICAgIHJldHVybiAob25lTWludXNUQ3ViZWQgKiBwMCkgKyAoMyAqIG9uZU1pbnVzVFNxdWFyZWQgKiB0ICogcDEpCisgICAgICAgICAgICAgICAgKyAoMyAqIG9uZU1pbnVzVCAqIHRTcXVhcmVkICogcDIpICsgKHRDdWJlZCAqIHAzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU2tQb2ludCBjdWJpY0JlemllckNhbGN1bGF0aW9uKGZsb2F0IHQsIGNvbnN0IFNrUG9pbnQqIHBvaW50cykgeworICAgICAgICBmbG9hdCB4ID0gY3ViaWNDb29yZGluYXRlQ2FsY3VsYXRpb24odCwgcG9pbnRzWzBdLngoKSwgcG9pbnRzWzFdLngoKSwKKyAgICAgICAgICAgIHBvaW50c1syXS54KCksIHBvaW50c1szXS54KCkpOworICAgICAgICBmbG9hdCB5ID0gY3ViaWNDb29yZGluYXRlQ2FsY3VsYXRpb24odCwgcG9pbnRzWzBdLnkoKSwgcG9pbnRzWzFdLnkoKSwKKyAgICAgICAgICAgIHBvaW50c1syXS55KCksIHBvaW50c1szXS55KCkpOworICAgICAgICByZXR1cm4gU2tQb2ludDo6TWFrZSh4LCB5KTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgcXVhZHJhdGljQ29vcmRpbmF0ZUNhbGN1bGF0aW9uKGZsb2F0IHQsIGZsb2F0IHAwLCBmbG9hdCBwMSwgZmxvYXQgcDIpIHsKKyAgICAgICAgZmxvYXQgb25lTWludXNUID0gMSAtIHQ7CisgICAgICAgIHJldHVybiBvbmVNaW51c1QgKiAoKG9uZU1pbnVzVCAqIHAwKSArICh0ICogcDEpKSArIHQgKiAoKG9uZU1pbnVzVCAqIHAxKSArICh0ICogcDIpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU2tQb2ludCBxdWFkcmF0aWNCZXppZXJDYWxjdWxhdGlvbihmbG9hdCB0LCBjb25zdCBTa1BvaW50KiBwb2ludHMpIHsKKyAgICAgICAgZmxvYXQgeCA9IHF1YWRyYXRpY0Nvb3JkaW5hdGVDYWxjdWxhdGlvbih0LCBwb2ludHNbMF0ueCgpLCBwb2ludHNbMV0ueCgpLCBwb2ludHNbMl0ueCgpKTsKKyAgICAgICAgZmxvYXQgeSA9IHF1YWRyYXRpY0Nvb3JkaW5hdGVDYWxjdWxhdGlvbih0LCBwb2ludHNbMF0ueSgpLCBwb2ludHNbMV0ueSgpLCBwb2ludHNbMl0ueSgpKTsKKyAgICAgICAgcmV0dXJuIFNrUG9pbnQ6Ok1ha2UoeCwgeSk7CisgICAgfQorCisgICAgLy8gU3ViZGl2aWRlIGEgc2VjdGlvbiBvZiB0aGUgQmV6aWVyIGN1cnZlLCBzZXQgdGhlIG1pZC1wb2ludCBhbmQgdGhlIG1pZC10IHZhbHVlLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBmdXJ0aGVyIHN1YmRpdmlzaW9uIGlzIG5lY2Vzc2FyeSBhcyBkZWZpbmVkIGJ5IGVycm9yU3F1YXJlZC4KKyAgICBzdGF0aWMgYm9vbCBzdWJkaXZpZGVQb2ludHMoY29uc3QgU2tQb2ludCogcG9pbnRzLCBiZXppZXJDYWxjdWxhdGlvbiBiZXppZXJGdW5jdGlvbiwKKyAgICAgICAgICAgIGZsb2F0IHQwLCBjb25zdCBTa1BvaW50ICZwMCwgZmxvYXQgdDEsIGNvbnN0IFNrUG9pbnQgJnAxLAorICAgICAgICAgICAgZmxvYXQmIG1pZFQsIFNrUG9pbnQgJm1pZFBvaW50LCBmbG9hdCBlcnJvclNxdWFyZWQpIHsKKyAgICAgICAgbWlkVCA9ICh0MSArIHQwKSAvIDI7CisgICAgICAgIGZsb2F0IG1pZFggPSAocDEueCgpICsgcDAueCgpKSAvIDI7CisgICAgICAgIGZsb2F0IG1pZFkgPSAocDEueSgpICsgcDAueSgpKSAvIDI7CisKKyAgICAgICAgbWlkUG9pbnQgPSAoKmJlemllckZ1bmN0aW9uKShtaWRULCBwb2ludHMpOworICAgICAgICBmbG9hdCB4RXJyb3IgPSBtaWRQb2ludC54KCkgLSBtaWRYOworICAgICAgICBmbG9hdCB5RXJyb3IgPSBtaWRQb2ludC55KCkgLSBtaWRZOworICAgICAgICBmbG9hdCBtaWRFcnJvclNxdWFyZWQgPSAoeEVycm9yICogeEVycm9yKSArICh5RXJyb3IgKiB5RXJyb3IpOworICAgICAgICByZXR1cm4gbWlkRXJyb3JTcXVhcmVkID4gZXJyb3JTcXVhcmVkOworICAgIH0KKworICAgIC8vIERpdmlkZXMgQmV6aWVyIGN1cnZlcyB1bnRpbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBpcyB2ZXJ5IGNsb3NlIHRvIGFjY3VyYXRlLCB1c2luZworICAgIC8vIGVycm9yU3F1YXJlZCBhcyBhIG1ldHJpYy4gQ3ViaWMgQmV6aWVyIGN1cnZlcyBjYW4gaGF2ZSBhbiBpbmZsZWN0aW9uIHBvaW50IHRoYXQgaW1wcm9wZXJseQorICAgIC8vIHNob3J0LWNpcmN1aXQgc3ViZGl2aXNpb24uIElmIHlvdSBpbWFnaW5lIGFuIFMgc2hhcGUsIHRoZSB0b3AgYW5kIGJvdHRvbSBwb2ludHMgYmVpbmcgdGhlCisgICAgLy8gc3RhcnRpbmcgYW5kIGVuZCBwb2ludHMsIGxpbmVhciBpbnRlcnBvbGF0aW9uIHdvdWxkIG1hcmsgdGhlIGNlbnRlciB3aGVyZSB0aGUgY3VydmUgcGxhY2VzCisgICAgLy8gdGhlIHBvaW50LiBJdCBpcyBjbGVhcmx5IG5vdCB0aGUgY2FzZSB0aGF0IHdlIGNhbiBsaW5lYXJseSBpbnRlcnBvbGF0ZSBhdCB0aGF0IHBvaW50LgorICAgIC8vIGRvdWJsZUNoZWNrRGl2aXNpb24gZm9yY2VzIGEgc2Vjb25kIGV4YW1pbmF0aW9uIGJldHdlZW4gc3ViZGl2aXNpb25zIHRvIGVuc3VyZSB0aGF0IGxpbmVhcgorICAgIC8vIGludGVycG9sYXRpb24gd29ya3MuCisgICAgc3RhdGljIHZvaWQgYWRkQmV6aWVyKGNvbnN0IFNrUG9pbnQqIHBvaW50cywKKyAgICAgICAgICAgIGJlemllckNhbGN1bGF0aW9uIGJlemllckZ1bmN0aW9uLCBzdGQ6OnZlY3RvcjxTa1BvaW50PiYgc2VnbWVudFBvaW50cywKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiYgbGVuZ3RocywgZmxvYXQgZXJyb3JTcXVhcmVkLCBib29sIGRvdWJsZUNoZWNrRGl2aXNpb24pIHsKKyAgICAgICAgdHlwZWRlZiBzdGQ6Om1hcDxmbG9hdCwgU2tQb2ludD4gUG9pbnRNYXA7CisgICAgICAgIFBvaW50TWFwIHRUb1BvaW50OworCisgICAgICAgIHRUb1BvaW50WzBdID0gKCpiZXppZXJGdW5jdGlvbikoMCwgcG9pbnRzKTsKKyAgICAgICAgdFRvUG9pbnRbMV0gPSAoKmJlemllckZ1bmN0aW9uKSgxLCBwb2ludHMpOworCisgICAgICAgIFBvaW50TWFwOjppdGVyYXRvciBpdGVyID0gdFRvUG9pbnQuYmVnaW4oKTsKKyAgICAgICAgUG9pbnRNYXA6Oml0ZXJhdG9yIG5leHQgPSBpdGVyOworICAgICAgICArK25leHQ7CisgICAgICAgIHdoaWxlIChuZXh0ICE9IHRUb1BvaW50LmVuZCgpKSB7CisgICAgICAgICAgICBib29sIG5lZWRzU3ViZGl2aXNpb24gPSB0cnVlOworICAgICAgICAgICAgU2tQb2ludCBtaWRQb2ludDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBtaWRUOworICAgICAgICAgICAgICAgIG5lZWRzU3ViZGl2aXNpb24gPSBzdWJkaXZpZGVQb2ludHMocG9pbnRzLCBiZXppZXJGdW5jdGlvbiwgaXRlci0+Zmlyc3QsCisgICAgICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCwgbmV4dC0+Zmlyc3QsIG5leHQtPnNlY29uZCwgbWlkVCwgbWlkUG9pbnQsIGVycm9yU3F1YXJlZCk7CisgICAgICAgICAgICAgICAgaWYgKCFuZWVkc1N1YmRpdmlzaW9uICYmIGRvdWJsZUNoZWNrRGl2aXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgU2tQb2ludCBxdWFydGVyUG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHF1YXJ0ZXJUOworICAgICAgICAgICAgICAgICAgICBuZWVkc1N1YmRpdmlzaW9uID0gc3ViZGl2aWRlUG9pbnRzKHBvaW50cywgYmV6aWVyRnVuY3Rpb24sIGl0ZXItPmZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kLCBtaWRULCBtaWRQb2ludCwgcXVhcnRlclQsIHF1YXJ0ZXJQb2ludCwgZXJyb3JTcXVhcmVkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRzU3ViZGl2aXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGFuIGluZmxlY3Rpb24gcG9pbnQuIE5vIG5lZWQgdG8gZG91YmxlLWNoZWNrLgorICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlQ2hlY2tEaXZpc2lvbiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuZWVkc1N1YmRpdmlzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgIG5leHQgPSB0VG9Qb2ludC5pbnNlcnQoaXRlciwgUG9pbnRNYXA6OnZhbHVlX3R5cGUobWlkVCwgbWlkUG9pbnQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlIChuZWVkc1N1YmRpdmlzaW9uKTsKKyAgICAgICAgICAgIGl0ZXIgPSBuZXh0OworICAgICAgICAgICAgbmV4dCsrOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IHRoYXQgZWFjaCBkaXZpc2lvbiBjYW4gdXNlIGxpbmVhciBpbnRlcnBvbGF0aW9uIHdpdGggbGVzcyB0aGFuIHRoZSBhbGxvd2VkIGVycm9yCisgICAgICAgIGZvciAoaXRlciA9IHRUb1BvaW50LmJlZ2luKCk7IGl0ZXIgIT0gdFRvUG9pbnQuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgYWRkTGluZShzZWdtZW50UG9pbnRzLCBsZW5ndGhzLCBpdGVyLT5zZWNvbmQpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY3JlYXRlVmVyYlNlZ21lbnRzKFNrUGF0aDo6VmVyYiB2ZXJiLCBjb25zdCBTa1BvaW50KiBwb2ludHMsCisgICAgICAgIHN0ZDo6dmVjdG9yPFNrUG9pbnQ+JiBzZWdtZW50UG9pbnRzLCBzdGQ6OnZlY3RvcjxmbG9hdD4mIGxlbmd0aHMsIGZsb2F0IGVycm9yU3F1YXJlZCkgeworICAgICAgICBzd2l0Y2ggKHZlcmIpIHsKKyAgICAgICAgICAgIGNhc2UgU2tQYXRoOjprTW92ZV9WZXJiOgorICAgICAgICAgICAgICAgIGFkZE1vdmUoc2VnbWVudFBvaW50cywgbGVuZ3RocywgcG9pbnRzWzBdKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU2tQYXRoOjprQ2xvc2VfVmVyYjoKKyAgICAgICAgICAgICAgICBhZGRMaW5lKHNlZ21lbnRQb2ludHMsIGxlbmd0aHMsIHBvaW50c1swXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNrUGF0aDo6a0xpbmVfVmVyYjoKKyAgICAgICAgICAgICAgICBhZGRMaW5lKHNlZ21lbnRQb2ludHMsIGxlbmd0aHMsIHBvaW50c1sxXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNrUGF0aDo6a1F1YWRfVmVyYjoKKyAgICAgICAgICAgICAgICBhZGRCZXppZXIocG9pbnRzLCBxdWFkcmF0aWNCZXppZXJDYWxjdWxhdGlvbiwgc2VnbWVudFBvaW50cywgbGVuZ3RocywKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JTcXVhcmVkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNrUGF0aDo6a0N1YmljX1ZlcmI6CisgICAgICAgICAgICAgICAgYWRkQmV6aWVyKHBvaW50cywgY3ViaWNCZXppZXJDYWxjdWxhdGlvbiwgc2VnbWVudFBvaW50cywgbGVuZ3RocywKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JTcXVhcmVkLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gTGVhdmUgZWxlbWVudCBhcyBOVUxMLCBDb25pYyBzZWN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybnMgYSBmbG9hdFtdIHdpdGggZWFjaCBwb2ludCBhbG9uZyB0aGUgcGF0aCByZXByZXNlbnRlZCBieSAzIGZsb2F0cworICAgIC8vICogZnJhY3Rpb25hbCBsZW5ndGggYWxvbmcgdGhlIHBhdGggdGhhdCB0aGUgcG9pbnQgcmVzaWRlcworICAgIC8vICogeCBjb29yZGluYXRlCisgICAgLy8gKiB5IGNvb3JkaW5hdGUKKyAgICAvLyBOb3RlIHRoYXQgbW9yZSB0aGFuIG9uZSBwb2ludCBtYXkgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYWxvbmcgdGhlIHBhdGggaW4KKyAgICAvLyB0aGUgY2FzZSBvZiBhIG1vdmUuCisgICAgLy8gTlVMTCBjYW4gYmUgcmV0dXJuZWQgaWYgdGhlIFBhdGggaXMgZW1wdHkuCisgICAgc3RhdGljIGpmbG9hdEFycmF5IGFwcHJveGltYXRlKEpOSUVudiogZW52LCBqY2xhc3MsIFNrUGF0aCogcGF0aCwgZmxvYXQgYWNjZXB0YWJsZUVycm9yKQorICAgIHsKKyAgICAgICAgU2tBU1NFUlQocGF0aCk7CisgICAgICAgIFNrUGF0aDo6SXRlciBwYXRoSXRlcigqcGF0aCwgZmFsc2UpOworICAgICAgICBTa1BhdGg6OlZlcmIgdmVyYjsKKyAgICAgICAgU2tQb2ludCBwb2ludHNbNF07CisgICAgICAgIHN0ZDo6dmVjdG9yPFNrUG9pbnQ+IHNlZ21lbnRQb2ludHM7CisgICAgICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiBsZW5ndGhzOworICAgICAgICBmbG9hdCBlcnJvclNxdWFyZWQgPSBhY2NlcHRhYmxlRXJyb3IgKiBhY2NlcHRhYmxlRXJyb3I7CisKKyAgICAgICAgd2hpbGUgKCh2ZXJiID0gcGF0aEl0ZXIubmV4dChwb2ludHMpKSAhPSBTa1BhdGg6OmtEb25lX1ZlcmIpIHsKKyAgICAgICAgICAgIGNyZWF0ZVZlcmJTZWdtZW50cyh2ZXJiLCBwb2ludHMsIHNlZ21lbnRQb2ludHMsIGxlbmd0aHMsIGVycm9yU3F1YXJlZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2VnbWVudFBvaW50cy5lbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBudW1Qb2ludHMgPSBzZWdtZW50UG9pbnRzLnNpemUoKTsKKyAgICAgICAgc2l6ZV90IGFwcHJveGltYXRpb25BcnJheVNpemUgPSBudW1Qb2ludHMgKiAzOworCisgICAgICAgIGZsb2F0KiBhcHByb3hpbWF0aW9uID0gbmV3IGZsb2F0W2FwcHJveGltYXRpb25BcnJheVNpemVdOworICAgICAgICBmbG9hdCB0b3RhbExlbmd0aCA9IGxlbmd0aHMuYmFjaygpOworCisgICAgICAgIGludCBhcHByb3hpbWF0aW9uSW5kZXggPSAwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVBvaW50czsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBTa1BvaW50JiBwb2ludCA9IHNlZ21lbnRQb2ludHNbaV07CisgICAgICAgICAgICBhcHByb3hpbWF0aW9uW2FwcHJveGltYXRpb25JbmRleCsrXSA9IGxlbmd0aHNbaV0gLyB0b3RhbExlbmd0aDsKKyAgICAgICAgICAgIGFwcHJveGltYXRpb25bYXBwcm94aW1hdGlvbkluZGV4KytdID0gcG9pbnQueCgpOworICAgICAgICAgICAgYXBwcm94aW1hdGlvblthcHByb3hpbWF0aW9uSW5kZXgrK10gPSBwb2ludC55KCk7CisgICAgICAgIH0KKworICAgICAgICBqZmxvYXRBcnJheSByZXN1bHQgPSBlbnYtPk5ld0Zsb2F0QXJyYXkoYXBwcm94aW1hdGlvbkFycmF5U2l6ZSk7CisgICAgICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbihyZXN1bHQsIDAsIGFwcHJveGltYXRpb25BcnJheVNpemUsIGFwcHJveGltYXRpb24pOworICAgICAgICBkZWxldGVbXSBhcHByb3hpbWF0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBTa1BhdGhNZWFzdXJlKiB0cmltKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LCBTa1BhdGgqIGluUGF0aCwgU2tQYXRoKiBvdXRQYXRoLAorICAgICAgICAgICAgU2tQYXRoTWVhc3VyZSogcGF0aE1lYXN1cmUsIGpmbG9hdCB0cmltU3RhcnQsIGpmbG9hdCB0cmltRW5kLCBqZmxvYXQgdHJpbU9mZnNldCkgeworICAgICAgICBpZiAodHJpbVN0YXJ0ID09IDAgJiYgdHJpbUVuZCA9PSAxKSB7CisgICAgICAgICAgICBpZiAob3V0UGF0aCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgKm91dFBhdGggPSAqaW5QYXRoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBhdGhNZWFzdXJlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBtb2RpZnlQYXRoID0gKG91dFBhdGggPT0gTlVMTCk7CisgICAgICAgIGlmIChtb2RpZnlQYXRoKSB7CisgICAgICAgICAgICBvdXRQYXRoID0gbmV3IFNrUGF0aCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3V0UGF0aC0+cmVzZXQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGF0aE1lYXN1cmUgPT0gTlVMTCkgeworICAgICAgICAgICAgcGF0aE1lYXN1cmUgPSBuZXcgU2tQYXRoTWVhc3VyZSgqaW5QYXRoLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgbGVuZ3RoID0gcGF0aE1lYXN1cmUtPmdldExlbmd0aCgpOworICAgICAgICBmbG9hdCBzdGFydCA9ICh0cmltU3RhcnQgKyB0cmltT2Zmc2V0KSAqIGxlbmd0aDsKKyAgICAgICAgZmxvYXQgZW5kID0gKHRyaW1FbmQgKyB0cmltT2Zmc2V0KSAqIGxlbmd0aDsKKworICAgICAgICBpZiAoZW5kID4gbGVuZ3RoICYmIHN0YXJ0IDw9IGxlbmd0aCkgeworICAgICAgICAgICAgcGF0aE1lYXN1cmUtPmdldFNlZ21lbnQoc3RhcnQsIGxlbmd0aCwgb3V0UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICBwYXRoTWVhc3VyZS0+Z2V0U2VnbWVudCgwLCBlbmQgLSBsZW5ndGgsIG91dFBhdGgsIHRydWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHN0YXJ0ID4gbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgc3RhcnQgLT0gbGVuZ3RoOworICAgICAgICAgICAgICAgIGVuZCAtPSBsZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXRoTWVhc3VyZS0+Z2V0U2VnbWVudChzdGFydCwgZW5kLCBvdXRQYXRoLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobW9kaWZ5UGF0aCkgeworICAgICAgICAgICAgZGVsZXRlIHBhdGhNZWFzdXJlOworICAgICAgICAgICAgcGF0aE1lYXN1cmUgPSBOVUxMOworICAgICAgICAgICAgKmluUGF0aCA9ICpvdXRQYXRoOworICAgICAgICAgICAgZGVsZXRlIG91dFBhdGg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhdGhNZWFzdXJlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lNZWFzdXJlKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LCBTa1BhdGhNZWFzdXJlKiBtZWFzdXJlKSB7CisgICAgICAgIGRlbGV0ZSBtZWFzdXJlOworICAgIH0KIH07CiAKIHN0YXRpYyBKTklOYXRpdmVNZXRob2QgbWV0aG9kc1tdID0gewpAQCAtMzA1LDcgKzU0MywxMCBAQAogICAgIHsibmF0aXZlX3NldExhc3RQb2ludCIsIihJRkYpViIsICh2b2lkKikgU2tQYXRoR2x1ZTo6c2V0TGFzdFBvaW50fSwKICAgICB7Im5hdGl2ZV90cmFuc2Zvcm0iLCIoSUlJKVYiLCAodm9pZCopIFNrUGF0aEdsdWU6OnRyYW5zZm9ybV9fTWF0cml4UGF0aH0sCiAgICAgeyJuYXRpdmVfdHJhbnNmb3JtIiwiKElJKVYiLCAodm9pZCopIFNrUGF0aEdsdWU6OnRyYW5zZm9ybV9fTWF0cml4fSwKLSAgICB7Im5hdGl2ZV9vcCIsIihJSUlJKVoiLCAodm9pZCopIFNrUGF0aEdsdWU6Om9wfQorICAgIHsibmF0aXZlX29wIiwiKElJSUkpWiIsICh2b2lkKikgU2tQYXRoR2x1ZTo6b3B9LAorICAgIHsibmF0aXZlX2FwcHJveGltYXRlIiwgIihJRilbRiIsICh2b2lkKikgU2tQYXRoR2x1ZTo6YXBwcm94aW1hdGV9LAorICAgIHsibmF0aXZlX2Rlc3Ryb3lNZWFzdXJlIiwiKEkpViIsICh2b2lkKikgU2tQYXRoR2x1ZTo6ZGVzdHJveU1lYXN1cmV9LAorICAgIHsibmF0aXZlX3RyaW0iLCIoSUlJRkZGKUkiLCAodm9pZCopIFNrUGF0aEdsdWU6OnRyaW19LAogfTsKIAogaW50IHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfUGF0aChKTklFbnYqIGVudikgewpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9UZXh0TGF5b3V0Q2FjaGUuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9UZXh0TGF5b3V0Q2FjaGUuY3BwCmluZGV4IDkyZDI1M2YuLjE0NGFjMzkgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVGV4dExheW91dENhY2hlLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1RleHRMYXlvdXRDYWNoZS5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgIlRleHRMYXlvdXRDYWNoZS5oIgogI2luY2x1ZGUgIlRleHRMYXlvdXQuaCIKKyNpbmNsdWRlICJTa0dseXBoQ2FjaGUuaCIKICNpbmNsdWRlICJTa1R5cGVmYWNlX2FuZHJvaWQuaCIKICNpbmNsdWRlICJIYXJmQnV6ek5HRmFjZVNraWEuaCIKICNpbmNsdWRlIDx1bmljb2RlL3VuaXN0ci5oPgpAQCAtNzU3LDggKzc1OCw4IEBACiAgICAgICAgICAgICBvdXRQb3MtPmFkZCh5cG9zKTsKICAgICAgICAgICAgIHRvdGFsQWR2YW5jZSArPSB4QWR2YW5jZTsKIAotICAgICAgICAgICAgLy8gVE9ETzogY29uc2lkZXIgdXNpbmcgZ2x5cGggY2FjaGUKLSAgICAgICAgICAgIGNvbnN0IFNrR2x5cGgmIG1ldHJpY3MgPSBtU2hhcGluZ1BhaW50LmdldEdseXBoTWV0cmljcyhnbHlwaElkLCBOVUxMKTsKKyAgICAgICAgICAgIFNrQXV0b0dseXBoQ2FjaGUgYXV0b0NhY2hlKG1TaGFwaW5nUGFpbnQsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgY29uc3QgU2tHbHlwaCYgbWV0cmljcyA9IGF1dG9DYWNoZS5nZXRDYWNoZSgpLT5nZXRHbHlwaElETWV0cmljcyhnbHlwaElkKTsKICAgICAgICAgICAgIG91dEJvdW5kcy0+am9pbih4cG9zICsgbWV0cmljcy5mTGVmdCwgeXBvcyArIG1ldHJpY3MuZlRvcCwKICAgICAgICAgICAgICAgICAgICAgeHBvcyArIG1ldHJpY3MuZkxlZnQgKyBtZXRyaWNzLmZXaWR0aCwgeXBvcyArIG1ldHJpY3MuZlRvcCArIG1ldHJpY3MuZkhlaWdodCk7CiAKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2UuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZS5jcHAKaW5kZXggY2NkNzVkNS4uMDRmOWZlMSAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZS5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZS5jcHAKQEAgLTEsOSArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKICNpbmNsdWRlICJqbmkuaCIKICNpbmNsdWRlIDxhbmRyb2lkX3J1bnRpbWUvQW5kcm9pZFJ1bnRpbWUuaD4KIAogI2luY2x1ZGUgIkdyYXBoaWNzSk5JLmgiCiAjaW5jbHVkZSAiU2tTdHJlYW0uaCIKICNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCisjaW5jbHVkZSAiVHlwZWZhY2VJbXBsLmgiCiAjaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL2FuZHJvaWRfdXRpbF9Bc3NldE1hbmFnZXIuaD4KICNpbmNsdWRlIDxhbmRyb2lkZncvQXNzZXRNYW5hZ2VyLmg+CiAKQEAgLTI3LDExMiArNDQsNDYgQEAKICAgICBjb25zdCBjaGFyKiBmQ1N0cjsKIH07CiAKLXN0YXRpYyBTa1R5cGVmYWNlKiBUeXBlZmFjZV9jcmVhdGUoSk5JRW52KiBlbnYsIGpvYmplY3QsIGpzdHJpbmcgbmFtZSwKK3N0YXRpYyBUeXBlZmFjZUltcGwqIFR5cGVmYWNlX2NyZWF0ZShKTklFbnYqIGVudiwgam9iamVjdCwganN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1R5cGVmYWNlOjpTdHlsZSBzdHlsZSkgewotICAgIFNrVHlwZWZhY2UqIGZhY2UgPSBOVUxMOworICAgIFR5cGVmYWNlSW1wbCogZmFjZSA9IE5VTEw7CiAKICAgICBpZiAoTlVMTCAhPSBuYW1lKSB7CiAgICAgICAgIEF1dG9KYXZhU3RyaW5nVG9VVEY4ICAgIHN0cihlbnYsIG5hbWUpOwotICAgICAgICBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbU5hbWUoc3RyLmNfc3RyKCksIHN0eWxlKTsKLSAgICAgICAgLy8gVHJ5IHRvIGZpbmQgdGhlIGNsb3Nlc3QgbWF0Y2hpbmcgZm9udCwgdXNpbmcgdGhlIHN0YW5kYXJkIGhldXJpc3RpYwotICAgICAgICBpZiAoTlVMTCA9PSBmYWNlKSB7Ci0gICAgICAgICAgICBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbU5hbWUoc3RyLmNfc3RyKCksIChTa1R5cGVmYWNlOjpTdHlsZSkoc3R5bGUgXiBTa1R5cGVmYWNlOjprSXRhbGljKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IE5VTEwgPT0gZmFjZSAmJiBpIDwgNDsgaSsrKSB7Ci0gICAgICAgICAgICBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbU5hbWUoc3RyLmNfc3RyKCksIChTa1R5cGVmYWNlOjpTdHlsZSlpKTsKLSAgICAgICAgfQorICAgICAgICBmYWNlID0gVHlwZWZhY2VJbXBsX2NyZWF0ZUZyb21OYW1lKHN0ci5jX3N0cigpLCBzdHlsZSk7CiAgICAgfQogCiAgICAgLy8gcmV0dXJuIHRoZSBkZWZhdWx0IGZvbnQgYXQgdGhlIGJlc3Qgc3R5bGUgaWYgbm8gZXhhY3QgbWF0Y2ggZXhpc3RzCiAgICAgaWYgKE5VTEwgPT0gZmFjZSkgewotICAgICAgICBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbU5hbWUoTlVMTCwgc3R5bGUpOworICAgICAgICBmYWNlID0gVHlwZWZhY2VJbXBsX2NyZWF0ZUZyb21OYW1lKE5VTEwsIHN0eWxlKTsKICAgICB9CiAgICAgcmV0dXJuIGZhY2U7CiB9CiAKLXN0YXRpYyBTa1R5cGVmYWNlKiBUeXBlZmFjZV9jcmVhdGVGcm9tVHlwZWZhY2UoSk5JRW52KiBlbnYsIGpvYmplY3QsIFNrVHlwZWZhY2UqIGZhbWlseSwgaW50IHN0eWxlKSB7Ci0gICAgU2tUeXBlZmFjZSogZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21UeXBlZmFjZShmYW1pbHksIChTa1R5cGVmYWNlOjpTdHlsZSlzdHlsZSk7CitzdGF0aWMgVHlwZWZhY2VJbXBsKiBUeXBlZmFjZV9jcmVhdGVGcm9tVHlwZWZhY2UoSk5JRW52KiBlbnYsIGpvYmplY3QsIFR5cGVmYWNlSW1wbCogZmFtaWx5LCBpbnQgc3R5bGUpIHsKKyAgICBUeXBlZmFjZUltcGwqIGZhY2UgPSBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbVR5cGVmYWNlKGZhbWlseSwgKFNrVHlwZWZhY2U6OlN0eWxlKXN0eWxlKTsKICAgICAvLyBUcnkgdG8gZmluZCB0aGUgY2xvc2VzdCBtYXRjaGluZyBmb250LCB1c2luZyB0aGUgc3RhbmRhcmQgaGV1cmlzdGljCiAgICAgaWYgKE5VTEwgPT0gZmFjZSkgewotICAgICAgICBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbVR5cGVmYWNlKGZhbWlseSwgKFNrVHlwZWZhY2U6OlN0eWxlKShzdHlsZSBeIFNrVHlwZWZhY2U6OmtJdGFsaWMpKTsKKyAgICAgICAgZmFjZSA9IFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tVHlwZWZhY2UoZmFtaWx5LCAoU2tUeXBlZmFjZTo6U3R5bGUpKHN0eWxlIF4gU2tUeXBlZmFjZTo6a0l0YWxpYykpOwogICAgIH0KICAgICBmb3IgKGludCBpID0gMDsgTlVMTCA9PSBmYWNlICYmIGkgPCA0OyBpKyspIHsKLSAgICAgICAgZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21UeXBlZmFjZShmYW1pbHksIChTa1R5cGVmYWNlOjpTdHlsZSlpKTsKKyAgICAgICAgZmFjZSA9IFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tVHlwZWZhY2UoZmFtaWx5LCAoU2tUeXBlZmFjZTo6U3R5bGUpaSk7CiAgICAgfQogICAgIGlmIChOVUxMID09IGZhY2UpIHsKLSAgICAgICAgZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21OYW1lKE5VTEwsIChTa1R5cGVmYWNlOjpTdHlsZSlzdHlsZSk7CisgICAgICAgIGZhY2UgPSBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbU5hbWUoTlVMTCwgKFNrVHlwZWZhY2U6OlN0eWxlKXN0eWxlKTsKICAgICB9CiAgICAgcmV0dXJuIGZhY2U7CiB9CiAKLXN0YXRpYyB2b2lkIFR5cGVmYWNlX3VucmVmKEpOSUVudiogZW52LCBqb2JqZWN0IG9iaiwgU2tUeXBlZmFjZSogZmFjZSkgewotICAgIFNrU2FmZVVucmVmKGZhY2UpOworc3RhdGljIHZvaWQgVHlwZWZhY2VfdW5yZWYoSk5JRW52KiBlbnYsIGpvYmplY3Qgb2JqLCBUeXBlZmFjZUltcGwqIGZhY2UpIHsKKyAgICBUeXBlZmFjZUltcGxfdW5yZWYoZmFjZSk7CiB9CiAKLXN0YXRpYyBpbnQgVHlwZWZhY2VfZ2V0U3R5bGUoSk5JRW52KiBlbnYsIGpvYmplY3Qgb2JqLCBTa1R5cGVmYWNlKiBmYWNlKSB7Ci0gICAgcmV0dXJuIGZhY2UtPnN0eWxlKCk7CitzdGF0aWMgaW50IFR5cGVmYWNlX2dldFN0eWxlKEpOSUVudiogZW52LCBqb2JqZWN0IG9iaiwgVHlwZWZhY2VJbXBsKiBmYWNlKSB7CisgICAgcmV0dXJuIFR5cGVmYWNlSW1wbF9nZXRTdHlsZShmYWNlKTsKIH0KIAotY2xhc3MgQXNzZXRTdHJlYW0gOiBwdWJsaWMgU2tTdHJlYW0gewotcHVibGljOgotICAgIEFzc2V0U3RyZWFtKEFzc2V0KiBhc3NldCwgYm9vbCBoYXNNZW1vcnlCYXNlKSA6IGZBc3NldChhc3NldCkKLSAgICB7Ci0gICAgICAgIGZNZW1vcnlCYXNlID0gaGFzTWVtb3J5QmFzZSA/IGZBc3NldC0+Z2V0QnVmZmVyKGZhbHNlKSA6IE5VTEw7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+QXNzZXRTdHJlYW0oKQotICAgIHsKLSAgICAgICAgZGVsZXRlIGZBc3NldDsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGdldE1lbW9yeUJhc2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZNZW1vcnlCYXNlOwotICAgIH0KLQotCXZpcnR1YWwgYm9vbCByZXdpbmQoKQotICAgIHsKLSAgICAgICAgb2ZmNjRfdCBwb3MgPSBmQXNzZXQtPnNlZWsoMCwgU0VFS19TRVQpOwotICAgICAgICByZXR1cm4gcG9zICE9IChvZmY2NF90KS0xOwotICAgIH0KLQotCXZpcnR1YWwgc2l6ZV90IHJlYWQodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIHNzaXplX3QgYW1vdW50OwotCi0gICAgICAgIGlmIChOVUxMID09IGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKDAgPT0gc2l6ZSkgIC8vIGNhbGxlciBpcyBhc2tpbmcgdXMgZm9yIG91ciB0b3RhbCBsZW5ndGgKLSAgICAgICAgICAgICAgICByZXR1cm4gZkFzc2V0LT5nZXRMZW5ndGgoKTsKLQotICAgICAgICAgICAgLy8gYXNzZXQtPnNlZWsgcmV0dXJucyBuZXcgdG90YWwgb2Zmc2V0Ci0gICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHJldHVybiBhbW91bnQgdGhhdCB3YXMgc2tpcHBlZAotCi0gICAgICAgICAgICBvZmY2NF90IG9sZE9mZnNldCA9IGZBc3NldC0+c2VlaygwLCBTRUVLX0NVUik7Ci0gICAgICAgICAgICBpZiAoLTEgPT0gb2xkT2Zmc2V0KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgb2ZmNjRfdCBuZXdPZmZzZXQgPSBmQXNzZXQtPnNlZWsoc2l6ZSwgU0VFS19DVVIpOwotICAgICAgICAgICAgaWYgKC0xID09IG5ld09mZnNldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgYW1vdW50ID0gbmV3T2Zmc2V0IC0gb2xkT2Zmc2V0OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgYW1vdW50ID0gZkFzc2V0LT5yZWFkKGJ1ZmZlciwgc2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYW1vdW50IDwgMCkKLSAgICAgICAgICAgIGFtb3VudCA9IDA7Ci0gICAgICAgIHJldHVybiBhbW91bnQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFzc2V0KiAgICAgIGZBc3NldDsKLSAgICBjb25zdCB2b2lkKiBmTWVtb3J5QmFzZTsKLX07Ci0KLXN0YXRpYyBTa1R5cGVmYWNlKiBUeXBlZmFjZV9jcmVhdGVGcm9tQXNzZXQoSk5JRW52KiBlbnYsIGpvYmplY3QsCitzdGF0aWMgVHlwZWZhY2VJbXBsKiBUeXBlZmFjZV9jcmVhdGVGcm9tQXNzZXQoSk5JRW52KiBlbnYsIGpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3QgamFzc2V0TWdyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3RyaW5nIGpwYXRoKSB7CiAKQEAgLTE1MCwyMSArMTAxLDE1IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFNrU3RyZWFtKiBzdHJlYW0gPSBuZXcgQXNzZXRTdHJlYW0oYXNzZXQsIHRydWUpOwotICAgIFNrVHlwZWZhY2UqIGZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tU3RyZWFtKHN0cmVhbSk7Ci0gICAgLy8gU2tUeXBlRmFjZTo6Q3JlYXRlRnJvbVN0cmVhbSBjYWxscyByZWYoKSBvbiB0aGUgc3RyZWFtLCBzbyB3ZQotICAgIC8vIG5lZWQgdG8gdW5yZWYgaXQgaGVyZSBvciBpdCB3b24ndCBiZSBmcmVlZCBsYXRlciBvbgotICAgIHN0cmVhbS0+dW5yZWYoKTsKLQotICAgIHJldHVybiBmYWNlOworICAgIHJldHVybiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbUFzc2V0KGFzc2V0KTsKIH0KIAotc3RhdGljIFNrVHlwZWZhY2UqIFR5cGVmYWNlX2NyZWF0ZUZyb21GaWxlKEpOSUVudiogZW52LCBqb2JqZWN0LCBqc3RyaW5nIGpwYXRoKSB7CitzdGF0aWMgVHlwZWZhY2VJbXBsKiBUeXBlZmFjZV9jcmVhdGVGcm9tRmlsZShKTklFbnYqIGVudiwgam9iamVjdCwganN0cmluZyBqcGF0aCkgewogICAgIE5QRV9DSEVDS19SRVRVUk5fWkVSTyhlbnYsIGpwYXRoKTsKIAogICAgIEF1dG9KYXZhU3RyaW5nVG9VVEY4IHN0cihlbnYsIGpwYXRoKTsKIAotICAgIHJldHVybiBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tRmlsZShzdHIuY19zdHIoKSk7CisgICAgcmV0dXJuIFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tRmlsZShzdHIuY19zdHIoKSk7CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VJbXBsLmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmQzYTZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZUltcGwuY3BwCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVHlwZWZhY2Ugb2JqZWN0LiBIaXN0b3JpY2FsbHksIGl0IGhhcworICoganVzdCBiZWVuIFNrVHlwZWZhY2UsIGJ1dCB3ZSBhcmUgbWlncmF0aW5nIHRvIE1pbmlraW4uIEZvciB0aGUgdGltZQorICogYmVpbmcsIHRoYXQgY2hvaWNlIGlzIGhpZGRlbiB1bmRlciB0aGUgVVNFX01JTklLSU4gY29tcGlsZS10aW1lIGZsYWcuCisgKi8KKworI2luY2x1ZGUgIlNrU3RyZWFtLmgiCisjaW5jbHVkZSAiU2tUeXBlZmFjZS5oIgorCisjaWZkZWYgVVNFX01JTklLSU4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8bWluaWtpbi9Gb250Q29sbGVjdGlvbi5oPgorI2luY2x1ZGUgPG1pbmlraW4vRm9udEZhbWlseS5oPgorI2luY2x1ZGUgPG1pbmlraW4vTGF5b3V0Lmg+CisjaW5jbHVkZSAiTWluaWtpblNraWEuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiVHlwZWZhY2VJbXBsLmgiCisjaW5jbHVkZSAiVXRpbHMuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisjaWZkZWYgVVNFX01JTklLSU4KKworLy8gQW55IHdlaWdodCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhpcyBpcyBjb25zaWRlcmVkICJib2xkIiBmb3IKKy8vIGxlZ2FjeSBBUEkuCitzdGF0aWMgY29uc3QgaW50IGtCb2xkVGhyZXNob2xkID0gNjsKKworc3RhdGljIEZvbnRTdHlsZSBzdHlsZUZyb21Ta2lhU3R5bGUoU2tUeXBlZmFjZTo6U3R5bGUgc2tpYVN0eWxlKSB7CisgICAgaW50IHdlaWdodCA9IChza2lhU3R5bGUgJiBTa1R5cGVmYWNlOjprQm9sZCkgIT0gMCA/IDcgOiA0OworICAgIGJvb2wgaXRhbGljID0gKHNraWFTdHlsZSAmIFNrVHlwZWZhY2U6OmtJdGFsaWMpICE9IDA7CisgICAgcmV0dXJuIEZvbnRTdHlsZSh3ZWlnaHQsIGl0YWxpYyk7Cit9CisKK1R5cGVmYWNlSW1wbCogZ0RlZmF1bHRUeXBlZmFjZTsKK3B0aHJlYWRfb25jZV90IGdEZWZhdWx0VHlwZWZhY2VPbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CisKKy8vIFRPRE86IHRoaXMgY3VycmVudGx5IGJ1aWxkcyBhIGZvbnQgY29sbGVjdGlvbiBmcm9tIGhhcmRjb2RlZCBwYXRocy4KKy8vIEl0IHdpbGwgZ2V0IHJlcGxhY2VkIGJ5IGFuIGltcGxlbWVudGF0aW9uIHRoYXQgcGFyc2VzIHRoZSBYTUwgZmlsZXMuCitzdGF0aWMgRm9udENvbGxlY3Rpb24gKm1ha2VGb250Q29sbGVjdGlvbigpIHsKKyAgICBzdGQ6OnZlY3RvcjxGb250RmFtaWx5ICo+dHlwZWZhY2VzOworICAgIGNvbnN0IGNoYXIgKmZuc1tdID0geworICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tUmVndWxhci50dGYiLAorICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tSXRhbGljLnR0ZiIsCisgICAgICAgICIvc3lzdGVtL2ZvbnRzL1JvYm90by1Cb2xkSXRhbGljLnR0ZiIsCisgICAgICAgICIvc3lzdGVtL2ZvbnRzL1JvYm90by1MaWdodC50dGYiLAorICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tVGhpbi50dGYiLAorICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tQm9sZC50dGYiLAorICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tVGhpbkl0YWxpYy50dGYiLAorICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tTGlnaHRJdGFsaWMudHRmIgorICAgIH07CisKKyAgICBGb250RmFtaWx5ICpmYW1pbHkgPSBuZXcgRm9udEZhbWlseSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGZucykvc2l6ZW9mKGZuc1swXSk7IGkrKykgeworICAgICAgICBjb25zdCBjaGFyICpmbiA9IGZuc1tpXTsKKyAgICAgICAgU2tUeXBlZmFjZSAqc2tGYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbUZpbGUoZm4pOworICAgICAgICBNaW5pa2luRm9udCAqZm9udCA9IG5ldyBNaW5pa2luRm9udFNraWEoc2tGYWNlKTsKKyAgICAgICAgZmFtaWx5LT5hZGRGb250KGZvbnQpOworICAgIH0KKyAgICB0eXBlZmFjZXMucHVzaF9iYWNrKGZhbWlseSk7CisKKyAgICBmYW1pbHkgPSBuZXcgRm9udEZhbWlseSgpOworICAgIGNvbnN0IGNoYXIgKmZuID0gIi9zeXN0ZW0vZm9udHMvTm90b1NhbnNEZXZhbmFnYXJpLVJlZ3VsYXIudHRmIjsKKyAgICBTa1R5cGVmYWNlICpza0ZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tRmlsZShmbik7CisgICAgTWluaWtpbkZvbnQgKmZvbnQgPSBuZXcgTWluaWtpbkZvbnRTa2lhKHNrRmFjZSk7CisgICAgZmFtaWx5LT5hZGRGb250KGZvbnQpOworICAgIHR5cGVmYWNlcy5wdXNoX2JhY2soZmFtaWx5KTsKKworICAgIHJldHVybiBuZXcgRm9udENvbGxlY3Rpb24odHlwZWZhY2VzKTsKK30KKworc3RhdGljIHZvaWQgZ2V0RGVmYXVsdFR5cGVmYWNlT25jZSgpIHsKKyAgICBMYXlvdXQ6OmluaXQoKTsKKyAgICBnRGVmYXVsdFR5cGVmYWNlID0gbmV3IFR5cGVmYWNlSW1wbDsKKyAgICBnRGVmYXVsdFR5cGVmYWNlLT5mRm9udENvbGxlY3Rpb24gPSBtYWtlRm9udENvbGxlY3Rpb24oKTsKKyAgICBnRGVmYXVsdFR5cGVmYWNlLT5mU3R5bGUgPSBGb250U3R5bGUoKTsKK30KKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfcmVzb2x2ZURlZmF1bHQoVHlwZWZhY2VJbXBsKiBzcmMpIHsKKyAgICBpZiAoc3JjID09IE5VTEwpIHsKKyAgICAgICAgcHRocmVhZF9vbmNlKCZnRGVmYXVsdFR5cGVmYWNlT25jZSwgZ2V0RGVmYXVsdFR5cGVmYWNlT25jZSk7CisgICAgICAgIHJldHVybiBnRGVmYXVsdFR5cGVmYWNlOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBzcmM7CisgICAgfQorfQorCitUeXBlZmFjZUltcGwqIFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tVHlwZWZhY2UoVHlwZWZhY2VJbXBsKiBzcmMsIFNrVHlwZWZhY2U6OlN0eWxlIHN0eWxlKSB7CisgICAgVHlwZWZhY2VJbXBsKiByZXNvbHZlZEZhY2UgPSBUeXBlZmFjZUltcGxfcmVzb2x2ZURlZmF1bHQoc3JjKTsKKyAgICBUeXBlZmFjZUltcGwqIHJlc3VsdCA9IG5ldyBUeXBlZmFjZUltcGw7CisgICAgaWYgKHJlc3VsdCAhPSAwKSB7CisgICAgICAgIHJlc3VsdC0+ZkZvbnRDb2xsZWN0aW9uID0gcmVzb2x2ZWRGYWNlLT5mRm9udENvbGxlY3Rpb247CisgICAgICAgIHJlc3VsdC0+ZlN0eWxlID0gc3R5bGVGcm9tU2tpYVN0eWxlKHN0eWxlKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFR5cGVmYWNlSW1wbCogY3JlYXRlRnJvbVNrVHlwZWZhY2UoU2tUeXBlZmFjZSogdHlwZWZhY2UpIHsKKyAgICBNaW5pa2luRm9udCogbWluaWtpbkZvbnQgPSBuZXcgTWluaWtpbkZvbnRTa2lhKHR5cGVmYWNlKTsKKyAgICBzdGQ6OnZlY3RvcjxGb250RmFtaWx5ICo+IHR5cGVmYWNlczsKKyAgICBGb250RmFtaWx5KiBmYW1pbHkgPSBuZXcgRm9udEZhbWlseSgpOworICAgIGZhbWlseS0+YWRkRm9udChtaW5pa2luRm9udCk7CisgICAgdHlwZWZhY2VzLnB1c2hfYmFjayhmYW1pbHkpOworICAgIFR5cGVmYWNlSW1wbCogcmVzdWx0ID0gbmV3IFR5cGVmYWNlSW1wbDsKKyAgICByZXN1bHQtPmZGb250Q29sbGVjdGlvbiA9IG5ldyBGb250Q29sbGVjdGlvbih0eXBlZmFjZXMpOworICAgIHJlc3VsdC0+ZlN0eWxlID0gRm9udFN0eWxlKCk7ICAvLyBUT0RPOiBpbXByb3ZlCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbU5hbWUoY29uc3QgY2hhciogbmFtZSwgU2tUeXBlZmFjZTo6U3R5bGUgc3R5bGUpIHsKKyAgICAvLyBUT0RPOiBzaG91bGQgY3JlYXRlIGEgZm9udCBjb2xsZWN0aW9uIHdpdGggYWxsIHN0eWxlcyBjb3JyZXNwb25kaW5nIHRvCisgICAgLy8gdGhlIG5hbWUKKyAgICBTa1R5cGVmYWNlKiBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbU5hbWUobmFtZSwgc3R5bGUpOworICAgIHJldHVybiBjcmVhdGVGcm9tU2tUeXBlZmFjZShmYWNlKTsKK30KKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbUZpbGUoY29uc3QgY2hhciogZmlsZW5hbWUpIHsKKyAgICBTa1R5cGVmYWNlKiBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbUZpbGUoZmlsZW5hbWUpOworICAgIHJldHVybiBjcmVhdGVGcm9tU2tUeXBlZmFjZShmYWNlKTsKK30KKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbUFzc2V0KEFzc2V0KiBhc3NldCkgeworICAgIFNrU3RyZWFtKiBzdHJlYW0gPSBuZXcgQXNzZXRTdHJlYW1BZGFwdG9yKGFzc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2V0U3RyZWFtQWRhcHRvcjo6a1llc19Pd25Bc3NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NldFN0cmVhbUFkYXB0b3I6OmtZZXNfSGFzTWVtb3J5QmFzZSk7CisgICAgU2tUeXBlZmFjZSogZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21TdHJlYW0oc3RyZWFtKTsKKyAgICAvLyBTa1R5cGVGYWNlOjpDcmVhdGVGcm9tU3RyZWFtIGNhbGxzIHJlZigpIG9uIHRoZSBzdHJlYW0sIHNvIHdlCisgICAgLy8gbmVlZCB0byB1bnJlZiBpdCBoZXJlIG9yIGl0IHdvbid0IGJlIGZyZWVkIGxhdGVyIG9uCisgICAgc3RyZWFtLT51bnJlZigpOworICAgIHJldHVybiBjcmVhdGVGcm9tU2tUeXBlZmFjZShmYWNlKTsKK30KKwordm9pZCBUeXBlZmFjZUltcGxfdW5yZWYoVHlwZWZhY2VJbXBsKiBmYWNlKSB7CisgICAgZGVsZXRlIGZhY2U7Cit9CisKK2ludCBUeXBlZmFjZUltcGxfZ2V0U3R5bGUoVHlwZWZhY2VJbXBsKiBmYWNlKSB7CisgICAgRm9udFN0eWxlIHN0eWxlID0gZmFjZS0+ZlN0eWxlOworICAgIGludCByZXN1bHQgPSBzdHlsZS5nZXRJdGFsaWMoKSA/IFNrVHlwZWZhY2U6OmtJdGFsaWMgOiAwOworICAgIGlmIChzdHlsZS5nZXRXZWlnaHQoKSA+PSBrQm9sZFRocmVzaG9sZCkgeworICAgICAgICByZXN1bHQgfD0gU2tUeXBlZmFjZTo6a0JvbGQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbHNlICAvLyBVU0VfTUlOSUtJTgorCisvKiBKdXN0IHVzZSBTa1R5cGVmYWNlIGluc3RlYWQuICovCisKK3R5cGVkZWYgU2tUeXBlZmFjZSBUeXBlZmFjZUltcGw7CisKK1R5cGVmYWNlSW1wbCogVHlwZWZhY2VJbXBsX2NyZWF0ZUZyb21UeXBlZmFjZShUeXBlZmFjZUltcGwqIHNyYywgU2tUeXBlZmFjZTo6U3R5bGUgc3R5bGUpIHsKKyAgICByZXR1cm4gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbVR5cGVmYWNlKHNyYywgc3R5bGUpOworfQorCitUeXBlZmFjZUltcGwqIFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tTmFtZShjb25zdCBjaGFyKiBuYW1lLCBTa1R5cGVmYWNlOjpTdHlsZSBzdHlsZSkgeworICAgIHJldHVybiBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tTmFtZShuYW1lLCBzdHlsZSk7Cit9CisKK1R5cGVmYWNlSW1wbCogVHlwZWZhY2VJbXBsX2NyZWF0ZUZyb21GaWxlKGNvbnN0IGNoYXIqIGZpbGVuYW1lKSB7CisgICAgcmV0dXJuIFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21GaWxlKGZpbGVuYW1lKTsKK30KKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbUFzc2V0KEFzc2V0KiBhc3NldCkgeworICAgIFNrU3RyZWFtKiBzdHJlYW0gPSBuZXcgQXNzZXRTdHJlYW1BZGFwdG9yKGFzc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2V0U3RyZWFtQWRhcHRvcjo6a1llc19Pd25Bc3NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NldFN0cmVhbUFkYXB0b3I6OmtZZXNfSGFzTWVtb3J5QmFzZSk7CisgICAgU2tUeXBlZmFjZSogZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21TdHJlYW0oc3RyZWFtKTsKKyAgICAvLyBTa1R5cGVGYWNlOjpDcmVhdGVGcm9tU3RyZWFtIGNhbGxzIHJlZigpIG9uIHRoZSBzdHJlYW0sIHNvIHdlCisgICAgLy8gbmVlZCB0byB1bnJlZiBpdCBoZXJlIG9yIGl0IHdvbid0IGJlIGZyZWVkIGxhdGVyIG9uCisgICAgc3RyZWFtLT51bnJlZigpOworCisgICAgcmV0dXJuIGZhY2U7Cit9CisKK3ZvaWQgVHlwZWZhY2VJbXBsX3VucmVmKFR5cGVmYWNlSW1wbCogZmFjZSkgeworICAgIFNrU2FmZVVucmVmKGZhY2UpOworfQorCitpbnQgVHlwZWZhY2VJbXBsX2dldFN0eWxlKFR5cGVmYWNlSW1wbCogZmFjZSkgeworICAgIHJldHVybiBmYWNlLT5zdHlsZSgpOworfQorCisjZW5kaWYgIC8vIFVTRV9NSU5JS0lOCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VJbXBsLmggYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTFiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlSW1wbC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisKKyNpZm5kZWYgQU5EUk9JRF9UWVBFRkFDRV9JTVBMX0gKKyNkZWZpbmUgQU5EUk9JRF9UWVBFRkFDRV9JTVBMX0gKKworI2luY2x1ZGUgPGFuZHJvaWRmdy9Bc3NldE1hbmFnZXIuaD4KKworI2lmZGVmIFVTRV9NSU5JS0lOCisjaW5jbHVkZSA8bWluaWtpbi9Gb250Q29sbGVjdGlvbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworI2lmZGVmIFVTRV9NSU5JS0lOCitzdHJ1Y3QgVHlwZWZhY2VJbXBsIHsKKyAgICBGb250Q29sbGVjdGlvbiAqZkZvbnRDb2xsZWN0aW9uOworICAgIEZvbnRTdHlsZSBmU3R5bGU7Cit9OworCisvLyBOb3RlOiBpdCB3b3VsZCBiZSBjbGVhbmVyIGlmIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHdlcmUgbWVtYmVyCisvLyBmdW5jdGlvbnMgKHN0YXRpYyBvciBvdGhlcndpc2UpIG9mIHRoZSBUeXBlZmFjZUltcGwgY2xhc3MuIEhvd2V2ZXIsCisvLyB0aGF0IGNhbid0IGJlIGVhc2lseSBhY2NvbW1vZGF0ZWQgaW4gdGhlIGNhc2Ugd2hlcmUgVHlwZWZhY2VJbXBsCisvLyBpcyBqdXN0IGEgcG9pbnRlciB0byBTa1R5cGVmYWNlLCBpbiB0aGUgbm9uLVVTRV9NSU5JS0lOIGNhc2UuCisvLyBUT0RPOiB3aGVuICNpZmRlZiBVU0VfTUlOSUtJTiBpcyByZW1vdmVkLCBtb3ZlIHRvIG1lbWJlciBmdW5jdGlvbnMuCisKK1R5cGVmYWNlSW1wbCogVHlwZWZhY2VJbXBsX3Jlc29sdmVEZWZhdWx0KFR5cGVmYWNlSW1wbCogc3JjKTsKKyNlbHNlCit0eXBlZGVmIFNrVHlwZWZhY2UgVHlwZWZhY2VJbXBsOworI2VuZGlmCisKK1R5cGVmYWNlSW1wbCogVHlwZWZhY2VJbXBsX2NyZWF0ZUZyb21UeXBlZmFjZShUeXBlZmFjZUltcGwqIHNyYywgU2tUeXBlZmFjZTo6U3R5bGUgc3R5bGUpOworCitUeXBlZmFjZUltcGwqIFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tTmFtZShjb25zdCBjaGFyKiBuYW1lLCBTa1R5cGVmYWNlOjpTdHlsZSBzdHlsZSk7CisKK1R5cGVmYWNlSW1wbCogVHlwZWZhY2VJbXBsX2NyZWF0ZUZyb21GaWxlKGNvbnN0IGNoYXIqIGZpbGVuYW1lKTsKKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbUFzc2V0KEFzc2V0KiBhc3NldCk7CisKK3ZvaWQgVHlwZWZhY2VJbXBsX3VucmVmKFR5cGVmYWNlSW1wbCogZmFjZSk7CisKK2ludCBUeXBlZmFjZUltcGxfZ2V0U3R5bGUoVHlwZWZhY2VJbXBsKiBmYWNlKTsKKworfQorCisjZW5kaWYgIC8vIEFORFJPSURfVFlQRUZBQ0VfSU1QTF9IClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9VdGlscy5jcHAgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1V0aWxzLmNwcAppbmRleCBiN2QxZjNhLi5lYjQxNmNiIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1V0aWxzLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1V0aWxzLmNwcApAQCAtMTksNiArMTksMjEgQEAKIAogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CiAKK0Fzc2V0U3RyZWFtQWRhcHRvcjo6QXNzZXRTdHJlYW1BZGFwdG9yKEFzc2V0KiBhc3NldCwgT3duQXNzZXQgb3duQXNzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNNZW1vcnlCYXNlIGhhc01lbW9yeUJhc2UpCisgICAgOiBmQXNzZXQoYXNzZXQpCisgICAgLCBmTWVtb3J5QmFzZShrWWVzX0hhc01lbW9yeUJhc2UgPT0gaGFzTWVtb3J5QmFzZSA/CisgICAgICAgICAgICAgICAgICBhc3NldC0+Z2V0QnVmZmVyKGZhbHNlKSA6IE5VTEwpCisgICAgLCBmT3duQXNzZXQob3duQXNzZXQpCit7Cit9CisKK0Fzc2V0U3RyZWFtQWRhcHRvcjo6fkFzc2V0U3RyZWFtQWRhcHRvcigpIHsKKyAgICBpZiAoa1llc19Pd25Bc3NldCA9PSBmT3duQXNzZXQpIHsKKyAgICAgICAgZGVsZXRlIGZBc3NldDsKKyAgICB9Cit9CisKIGJvb2wgQXNzZXRTdHJlYW1BZGFwdG9yOjpyZXdpbmQoKSB7CiAgICAgb2ZmNjRfdCBwb3MgPSBmQXNzZXQtPnNlZWsoMCwgU0VFS19TRVQpOwogICAgIGlmIChwb3MgPT0gKG9mZjY0X3QpLTEpIHsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVXRpbHMuaCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVXRpbHMuaAppbmRleCBhMWFjNzJhLi5iOTA1OTNjIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1V0aWxzLmgKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9VdGlscy5oCkBAIC0yOCwxNiArMjgsMzYgQEAKIAogY2xhc3MgQXNzZXRTdHJlYW1BZGFwdG9yIDogcHVibGljIFNrU3RyZWFtUmV3aW5kYWJsZSB7CiBwdWJsaWM6Ci0gICAgQXNzZXRTdHJlYW1BZGFwdG9yKEFzc2V0KiBhKSA6IGZBc3NldChhKSB7fQorICAgIC8vIEVudW0gcGFzc2VkIHRvIGNvbnN0cnVjdG9yLiBJZiBzZXQgdG8ga1llc19Pd25Bc3NldCwKKyAgICAvLyB0aGUgcGFzc2VkIGluIEFzc2V0IHdpbGwgYmUgZGVsZXRlZCB1cG9uIGRlc3RydWN0aW9uLgorICAgIGVudW0gT3duQXNzZXQgeworICAgICAgICBrWWVzX093bkFzc2V0LAorICAgICAgICBrTm9fT3duQXNzZXQsCisgICAgfTsKKworICAgIC8vIEVudW0gcGFzc2VkIHRvIGNvbnN0cnVjdG9yLiBJZiBzZXQgdG8ga1llc19IYXNNZW1vcnlCYXNlLAorICAgIC8vIGdldE1lbW9yeUJhc2Ugd2lsbCByZXR1cm4gdGhlIEFzc2V0J3MgYnVmZmVyLgorICAgIGVudW0gSGFzTWVtb3J5QmFzZSB7CisgICAgICAgIGtZZXNfSGFzTWVtb3J5QmFzZSwKKyAgICAgICAga05vX0hhc01lbW9yeUJhc2UsCisgICAgfTsKKworICAgIEFzc2V0U3RyZWFtQWRhcHRvcihBc3NldCosIE93bkFzc2V0LCBIYXNNZW1vcnlCYXNlKTsKKyAgICB+QXNzZXRTdHJlYW1BZGFwdG9yKCk7CisKICAgICB2aXJ0dWFsIGJvb2wgcmV3aW5kKCk7CiAgICAgdmlydHVhbCBzaXplX3QgcmVhZCh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgc2l6ZV90IGdldExlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0F0RW5kKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGdldE1lbW9yeUJhc2UoKSB7IHJldHVybiBmTWVtb3J5QmFzZTsgfQorCiAgICAgdmlydHVhbCBTa1N0cmVhbVJld2luZGFibGUqIGR1cGxpY2F0ZSgpIGNvbnN0OwogcHJpdmF0ZToKLSAgICBBc3NldCogIGZBc3NldDsKKyAgICBBc3NldCogICAgICAgICAgICAgIGZBc3NldDsKKyAgICBjb25zdCB2b2lkKiBjb25zdCAgIGZNZW1vcnlCYXNlOworICAgIGNvbnN0IE93bkFzc2V0ICAgICAgZk93bkFzc2V0OwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL29wZW5nbC91dGlsLmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvb3BlbmdsL3V0aWwuY3BwCmluZGV4IDQ0YWYxOTkuLjRiYjA5MWQgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvb3BlbmdsL3V0aWwuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvb3BlbmdsL3V0aWwuY3BwCkBAIC02MzIsNyArNjMyLDcgQEAKICAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9CiAgICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKillbnYtPkdldEludEZpZWxkKGpiaXRtYXAsIG5hdGl2ZUJpdG1hcElEKTsKICAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCpuYXRpdmVCaXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmdldENvbmZpZygpOworICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmNvbmZpZygpOwogICAgIHJldHVybiBnZXRJbnRlcm5hbEZvcm1hdChjb25maWcpOwogfQogCkBAIC02NDIsNyArNjQyLDcgQEAKICAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9CiAgICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKillbnYtPkdldEludEZpZWxkKGpiaXRtYXAsIG5hdGl2ZUJpdG1hcElEKTsKICAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCpuYXRpdmVCaXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmdldENvbmZpZygpOworICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmNvbmZpZygpOwogICAgIHJldHVybiBnZXRUeXBlKGNvbmZpZyk7CiB9CiAKQEAgLTY1Myw3ICs2NTMsNyBAQAogICAgIFNrQml0bWFwIGNvbnN0ICogbmF0aXZlQml0bWFwID0KICAgICAgICAgICAgIChTa0JpdG1hcCBjb25zdCAqKWVudi0+R2V0SW50RmllbGQoamJpdG1hcCwgbmF0aXZlQml0bWFwSUQpOwogICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKm5hdGl2ZUJpdG1hcCk7Ci0gICAgU2tCaXRtYXA6OkNvbmZpZyBjb25maWcgPSBiaXRtYXAuZ2V0Q29uZmlnKCk7CisgICAgU2tCaXRtYXA6OkNvbmZpZyBjb25maWcgPSBiaXRtYXAuY29uZmlnKCk7CiAgICAgaWYgKGludGVybmFsZm9ybWF0IDwgMCkgewogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KGNvbmZpZyk7CiAgICAgfQpAQCAtNjgxLDcgKzY4MSw3IEBACiAgICAgICAgICAgICBTa0NvbG9yVGFibGUqIGN0YWJsZSA9IGJpdG1hcC5nZXRDb2xvclRhYmxlKCk7CiAgICAgICAgICAgICBtZW1jcHkoZGF0YSwgY3RhYmxlLT5sb2NrQ29sb3JzKCksIGN0YWJsZS0+Y291bnQoKSAqIHNpemVvZihTa1BNQ29sb3IpKTsKICAgICAgICAgICAgIG1lbWNweShwaXhlbHMsIHAsIHNpemUpOwotICAgICAgICAgICAgY3RhYmxlLT51bmxvY2tDb2xvcnMoZmFsc2UpOworICAgICAgICAgICAgY3RhYmxlLT51bmxvY2tDb2xvcnMoKTsKICAgICAgICAgICAgIGdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHcsIGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgIGZyZWUoZGF0YSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC03MDIsNyArNzAyLDcgQEAKICAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9CiAgICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKillbnYtPkdldEludEZpZWxkKGpiaXRtYXAsIG5hdGl2ZUJpdG1hcElEKTsKICAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCpuYXRpdmVCaXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmdldENvbmZpZygpOworICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmNvbmZpZygpOwogICAgIGlmIChmb3JtYXQgPCAwKSB7CiAgICAgICAgIGZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KGNvbmZpZyk7CiAgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfUEFMRVRURThfUkdCQThfT0VTKQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXIuY3BwCmluZGV4IDU5OTE4MDUuLjczMzQ3ZWEgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlci5jcHAKQEAgLTQ3LDYgKzQ3LDMyIEBACiAgICAgcmV0dXJuIG1pZDsKIH0KIAorc3RhdGljIGptZXRob2RJRCBnZXRNdWx0aXBhcmFtZXRlck1ldGhvZChKTklFbnYqIGVudiwgamNsYXNzIHRhcmdldENsYXNzLCBqc3RyaW5nIG1ldGhvZE5hbWUsCisgICAgamludCBwYXJhbWV0ZXJDb3VudCwgY2hhciBwYXJhbWV0ZXJUeXBlKQoreworICAgIGNvbnN0IGNoYXIgKm5hdGl2ZVN0cmluZyA9IGVudi0+R2V0U3RyaW5nVVRGQ2hhcnMobWV0aG9kTmFtZSwgMCk7CisgICAgY2hhciAqc2lnbmF0dXJlID0gbmV3IGNoYXJbcGFyYW1ldGVyQ291bnQgKyA0XTsKKyAgICBzaWduYXR1cmVbMF0gPSAnKCc7CisgICAgbWVtc2V0KCYoc2lnbmF0dXJlWzFdKSwgcGFyYW1ldGVyVHlwZSwgcGFyYW1ldGVyQ291bnQpOworICAgIHN0cmNweSgmKHNpZ25hdHVyZVtwYXJhbWV0ZXJDb3VudCArIDFdKSwgIilWIik7CisgICAgam1ldGhvZElEIG1pZCA9IGVudi0+R2V0TWV0aG9kSUQodGFyZ2V0Q2xhc3MsIG5hdGl2ZVN0cmluZywgc2lnbmF0dXJlKTsKKyAgICBkZWxldGVbXSBzaWduYXR1cmU7CisgICAgZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMobWV0aG9kTmFtZSwgbmF0aXZlU3RyaW5nKTsKKyAgICByZXR1cm4gbWlkOworfQorCitzdGF0aWMgam1ldGhvZElEIGFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2dldE11bHRpcGxlRmxvYXRNZXRob2QoCisgICAgICAgIEpOSUVudiogZW52LCBqY2xhc3MgcHZoQ2xhc3MsIGpjbGFzcyB0YXJnZXRDbGFzcywganN0cmluZyBtZXRob2ROYW1lLCBqaW50IHBhcmFtZXRlckNvdW50KQoreworICAgIHJldHVybiBnZXRNdWx0aXBhcmFtZXRlck1ldGhvZChlbnYsIHRhcmdldENsYXNzLCBtZXRob2ROYW1lLCBwYXJhbWV0ZXJDb3VudCwgJ0YnKTsKK30KKworc3RhdGljIGptZXRob2RJRCBhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9nZXRNdWx0aXBsZUludE1ldGhvZCgKKyAgICAgICAgSk5JRW52KiBlbnYsIGpjbGFzcyBwdmhDbGFzcywgamNsYXNzIHRhcmdldENsYXNzLCBqc3RyaW5nIG1ldGhvZE5hbWUsIGppbnQgcGFyYW1ldGVyQ291bnQpCit7CisgICAgcmV0dXJuIGdldE11bHRpcGFyYW1ldGVyTWV0aG9kKGVudiwgdGFyZ2V0Q2xhc3MsIG1ldGhvZE5hbWUsIHBhcmFtZXRlckNvdW50LCAnSScpOworfQorCiBzdGF0aWMgdm9pZCBhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9jYWxsSW50TWV0aG9kKAogICAgICAgICBKTklFbnYqIGVudiwgamNsYXNzIHB2aE9iamVjdCwgam9iamVjdCB0YXJnZXQsIGptZXRob2RJRCBtZXRob2RJRCwgaW50IGFyZykKIHsKQEAgLTU5LDE1ICs4NSw4NSBAQAogICAgIGVudi0+Q2FsbFZvaWRNZXRob2QodGFyZ2V0LCBtZXRob2RJRCwgYXJnKTsKIH0KIAorc3RhdGljIHZvaWQgYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbFR3b0Zsb2F0TWV0aG9kKAorICAgICAgICBKTklFbnYqIGVudiwgamNsYXNzIHB2aE9iamVjdCwgam9iamVjdCB0YXJnZXQsIGptZXRob2RJRCBtZXRob2RJRCwgZmxvYXQgYXJnMSwgZmxvYXQgYXJnMikKK3sKKyAgICBlbnYtPkNhbGxWb2lkTWV0aG9kKHRhcmdldCwgbWV0aG9kSUQsIGFyZzEsIGFyZzIpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9jYWxsRm91ckZsb2F0TWV0aG9kKAorICAgICAgICBKTklFbnYqIGVudiwgamNsYXNzIHB2aE9iamVjdCwgam9iamVjdCB0YXJnZXQsIGptZXRob2RJRCBtZXRob2RJRCwgZmxvYXQgYXJnMSwgZmxvYXQgYXJnMiwKKyAgICAgICAgZmxvYXQgYXJnMywgZmxvYXQgYXJnNCkKK3sKKyAgICBlbnYtPkNhbGxWb2lkTWV0aG9kKHRhcmdldCwgbWV0aG9kSUQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9jYWxsTXVsdGlwbGVGbG9hdE1ldGhvZCgKKyAgICAgICAgSk5JRW52KiBlbnYsIGpjbGFzcyBwdmhPYmplY3QsIGpvYmplY3QgdGFyZ2V0LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGpmbG9hdEFycmF5IGFyZykKK3sKKyAgICBqc2l6ZSBwYXJhbWV0ZXJDb3VudCA9IGVudi0+R2V0QXJyYXlMZW5ndGgoYXJnKTsKKyAgICBqZmxvYXQgKmZsb2F0VmFsdWVzID0gZW52LT5HZXRGbG9hdEFycmF5RWxlbWVudHMoYXJnLCBOVUxMKTsKKyAgICBqdmFsdWUqIHZhbHVlcyA9IG5ldyBqdmFsdWVbcGFyYW1ldGVyQ291bnRdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7IGkrKykgeworICAgICAgICB2YWx1ZXNbaV0uZiA9IGZsb2F0VmFsdWVzW2ldOworICAgIH0KKyAgICBlbnYtPkNhbGxWb2lkTWV0aG9kQSh0YXJnZXQsIG1ldGhvZElELCB2YWx1ZXMpOworICAgIGRlbGV0ZVtdIHZhbHVlczsKKyAgICBlbnYtPlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMoYXJnLCBmbG9hdFZhbHVlcywgSk5JX0FCT1JUKTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbFR3b0ludE1ldGhvZCgKKyAgICAgICAgSk5JRW52KiBlbnYsIGpjbGFzcyBwdmhPYmplY3QsIGpvYmplY3QgdGFyZ2V0LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGludCBhcmcxLCBpbnQgYXJnMikKK3sKKyAgICBlbnYtPkNhbGxWb2lkTWV0aG9kKHRhcmdldCwgbWV0aG9kSUQsIGFyZzEsIGFyZzIpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9jYWxsRm91ckludE1ldGhvZCgKKyAgICAgICAgSk5JRW52KiBlbnYsIGpjbGFzcyBwdmhPYmplY3QsIGpvYmplY3QgdGFyZ2V0LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGludCBhcmcxLCBpbnQgYXJnMiwKKyAgICAgICAgaW50IGFyZzMsIGludCBhcmc0KQoreworICAgIGVudi0+Q2FsbFZvaWRNZXRob2QodGFyZ2V0LCBtZXRob2RJRCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2NhbGxNdWx0aXBsZUludE1ldGhvZCgKKyAgICAgICAgSk5JRW52KiBlbnYsIGpjbGFzcyBwdmhPYmplY3QsIGpvYmplY3QgdGFyZ2V0LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGppbnRBcnJheSBhcmcpCit7CisgICAganNpemUgcGFyYW1ldGVyQ291bnQgPSBlbnYtPkdldEFycmF5TGVuZ3RoKGFyZyk7CisgICAgamludCAqaW50VmFsdWVzID0gZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGFyZywgTlVMTCk7CisgICAganZhbHVlKiB2YWx1ZXMgPSBuZXcganZhbHVlW3BhcmFtZXRlckNvdW50XTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50OyBpKyspIHsKKyAgICAgICAgdmFsdWVzW2ldLmkgPSBpbnRWYWx1ZXNbaV07CisgICAgfQorICAgIGVudi0+Q2FsbFZvaWRNZXRob2RBKHRhcmdldCwgbWV0aG9kSUQsIHZhbHVlcyk7CisgICAgZGVsZXRlW10gdmFsdWVzOworICAgIGVudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoYXJnLCBpbnRWYWx1ZXMsIEpOSV9BQk9SVCk7Cit9CisKIHN0YXRpYyBKTklOYXRpdmVNZXRob2QgZ01ldGhvZHNbXSA9IHsKICAgICB7ICAgIm5HZXRJbnRNZXRob2QiLCAiKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7KUkiLAogICAgICAgICAgICAgKHZvaWQqKWFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2dldEludE1ldGhvZCB9LAogICAgIHsgICAibkdldEZsb2F0TWV0aG9kIiwgIihMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvU3RyaW5nOylJIiwKICAgICAgICAgICAgICh2b2lkKilhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9nZXRGbG9hdE1ldGhvZCB9LAorICAgIHsgICAibkdldE11bHRpcGxlRmxvYXRNZXRob2QiLCAiKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7SSlJIiwKKyAgICAgICAgICAgICh2b2lkKilhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9nZXRNdWx0aXBsZUZsb2F0TWV0aG9kIH0sCisgICAgeyAgICJuR2V0TXVsdGlwbGVJbnRNZXRob2QiLCAiKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7SSlJIiwKKyAgICAgICAgICAgICh2b2lkKilhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9nZXRNdWx0aXBsZUludE1ldGhvZCB9LAogICAgIHsgICAibkNhbGxJbnRNZXRob2QiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0lJKVYiLAogICAgICAgICAgICAgKHZvaWQqKWFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2NhbGxJbnRNZXRob2QgfSwKICAgICB7ICAgIm5DYWxsRmxvYXRNZXRob2QiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0lGKVYiLAotICAgICAgICAgICAgKHZvaWQqKWFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2NhbGxGbG9hdE1ldGhvZCB9CisgICAgICAgICAgICAodm9pZCopYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbEZsb2F0TWV0aG9kIH0sCisgICAgeyAgICJuQ2FsbFR3b0Zsb2F0TWV0aG9kIiwgIihMamF2YS9sYW5nL09iamVjdDtJRkYpViIsCisgICAgICAgICAgICAodm9pZCopYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbFR3b0Zsb2F0TWV0aG9kIH0sCisgICAgeyAgICJuQ2FsbEZvdXJGbG9hdE1ldGhvZCIsICIoTGphdmEvbGFuZy9PYmplY3Q7SUZGRkYpViIsCisgICAgICAgICAgICAodm9pZCopYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbEZvdXJGbG9hdE1ldGhvZCB9LAorICAgIHsgICAibkNhbGxNdWx0aXBsZUZsb2F0TWV0aG9kIiwgIihMamF2YS9sYW5nL09iamVjdDtJW0YpViIsCisgICAgICAgICAgICAodm9pZCopYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbE11bHRpcGxlRmxvYXRNZXRob2QgfSwKKyAgICB7ICAgIm5DYWxsVHdvSW50TWV0aG9kIiwgIihMamF2YS9sYW5nL09iamVjdDtJSUkpViIsCisgICAgICAgICAgICAodm9pZCopYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbFR3b0ludE1ldGhvZCB9LAorICAgIHsgICAibkNhbGxGb3VySW50TWV0aG9kIiwgIihMamF2YS9sYW5nL09iamVjdDtJSUlJSSlWIiwKKyAgICAgICAgICAgICh2b2lkKilhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9jYWxsRm91ckludE1ldGhvZCB9LAorICAgIHsgICAibkNhbGxNdWx0aXBsZUludE1ldGhvZCIsICIoTGphdmEvbGFuZy9PYmplY3Q7SVtJKVYiLAorICAgICAgICAgICAgKHZvaWQqKWFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2NhbGxNdWx0aXBsZUludE1ldGhvZCB9LAogfTsKIAogaW50IHJlZ2lzdGVyX2FuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyKEpOSUVudiogZW52KQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9tZWRpYV9BdWRpb0Zvcm1hdC5oIGIvY29yZS9qbmkvYW5kcm9pZF9tZWRpYV9BdWRpb0Zvcm1hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YmFiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvRm9ybWF0LmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9NRURJQV9BVURJT0ZPUk1BVF9ICisjZGVmaW5lIEFORFJPSURfTUVESUFfQVVESU9GT1JNQVRfSAorCisjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+CisKKy8vIGtlZXAgdGhlc2UgdmFsdWVzIGluIHN5bmMgd2l0aCBBdWRpb0Zvcm1hdC5qYXZhCisjZGVmaW5lIEVOQ09ESU5HX1BDTV8xNkJJVCAyCisjZGVmaW5lIEVOQ09ESU5HX1BDTV84QklUICAzCisKK3N0YXRpYyBpbmxpbmUgYXVkaW9fZm9ybWF0X3QgYXVkaW9Gb3JtYXRUb05hdGl2ZShpbnQgYXVkaW9Gb3JtYXQpCit7CisgICAgc3dpdGNoIChhdWRpb0Zvcm1hdCkgeworICAgIGNhc2UgRU5DT0RJTkdfUENNXzE2QklUOgorICAgICAgICByZXR1cm4gQVVESU9fRk9STUFUX1BDTV8xNl9CSVQ7CisgICAgY2FzZSBFTkNPRElOR19QQ01fOEJJVDoKKyAgICAgICAgcmV0dXJuIEFVRElPX0ZPUk1BVF9QQ01fOF9CSVQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFVRElPX0ZPUk1BVF9JTlZBTElEOworICAgIH0KK30KKworI2VuZGlmIC8vIEFORFJPSURfTUVESUFfQVVESU9GT1JNQVRfSApkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9tZWRpYV9BdWRpb1JlY29yZC5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvUmVjb3JkLmNwcAppbmRleCBiMjI2NjhiLi45YzM1N2RlIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvUmVjb3JkLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvUmVjb3JkLmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgogI2luY2x1ZGUgPG1lZGlhL0F1ZGlvUmVjb3JkLmg+CiAKLSNpbmNsdWRlIDxzeXN0ZW0vYXVkaW8uaD4KKyNpbmNsdWRlICJhbmRyb2lkX21lZGlhX0F1ZGlvRm9ybWF0LmgiCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDksMTAgKzQ5LDYgQEAKICAgICBDb25kaXRpb24gICBjb25kOwogfTsKIAotLy8ga2VlcCB0aGVzZSB2YWx1ZXMgaW4gc3luYyB3aXRoIEF1ZGlvRm9ybWF0LmphdmEKLSNkZWZpbmUgRU5DT0RJTkdfUENNXzE2QklUIDIKLSNkZWZpbmUgRU5DT0RJTkdfUENNXzhCSVQgIDMKLQogc3RhdGljIE11dGV4IHNMb2NrOwogc3RhdGljIFNvcnRlZFZlY3RvciA8YXVkaW9yZWNvcmRfY2FsbGJhY2tfY29va2llICo+IHNBdWRpb1JlY29yZENhbGxCYWNrQ29va2llczsKIApAQCAtODEsNyArNzcsNiBAQAogICAgIH0KIH0KIAotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzdGF0aWMgdm9pZCByZWNvcmRlckNhbGxiYWNrKGludCBldmVudCwgdm9pZCogdXNlciwgdm9pZCAqaW5mbykgewogCkBAIC0xNzMsMjUgKzE2OCwyMyBAQAogICAgIHVpbnQzMl90IG5iQ2hhbm5lbHMgPSBwb3Bjb3VudChjaGFubmVsTWFzayk7CiAKICAgICAvLyBjb21wYXJlIHRoZSBmb3JtYXQgYWdhaW5zdCB0aGUgSmF2YSBjb25zdGFudHMKLSAgICBpZiAoKGF1ZGlvRm9ybWF0ICE9IEVOQ09ESU5HX1BDTV8xNkJJVCkKLSAgICAgICAgJiYgKGF1ZGlvRm9ybWF0ICE9IEVOQ09ESU5HX1BDTV84QklUKSkgewotICAgICAgICBBTE9HRSgiRXJyb3IgY3JlYXRpbmcgQXVkaW9SZWNvcmQ6IHVuc3VwcG9ydGVkIGF1ZGlvIGZvcm1hdC4iKTsKKyAgICBhdWRpb19mb3JtYXRfdCBmb3JtYXQgPSBhdWRpb0Zvcm1hdFRvTmF0aXZlKGF1ZGlvRm9ybWF0KTsKKyAgICBpZiAoZm9ybWF0ID09IEFVRElPX0ZPUk1BVF9JTlZBTElEKSB7CisgICAgICAgIEFMT0dFKCJFcnJvciBjcmVhdGluZyBBdWRpb1JlY29yZDogdW5zdXBwb3J0ZWQgYXVkaW8gZm9ybWF0ICVkLiIsIGF1ZGlvRm9ybWF0KTsKICAgICAgICAgcmV0dXJuIChqaW50KSBBVURJT1JFQ09SRF9FUlJPUl9TRVRVUF9JTlZBTElERk9STUFUOwogICAgIH0KIAotICAgIGludCBieXRlc1BlclNhbXBsZSA9IGF1ZGlvRm9ybWF0ID09IEVOQ09ESU5HX1BDTV8xNkJJVCA/IDIgOiAxOwotICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCA9IGF1ZGlvRm9ybWF0ID09IEVOQ09ESU5HX1BDTV8xNkJJVCA/Ci0gICAgICAgICAgICBBVURJT19GT1JNQVRfUENNXzE2X0JJVCA6IEFVRElPX0ZPUk1BVF9QQ01fOF9CSVQ7CisgICAgc2l6ZV90IGJ5dGVzUGVyU2FtcGxlID0gYXVkaW9fYnl0ZXNfcGVyX3NhbXBsZShmb3JtYXQpOwogCiAgICAgaWYgKGJ1ZmZTaXplSW5CeXRlcyA9PSAwKSB7CiAgICAgICAgICBBTE9HRSgiRXJyb3IgY3JlYXRpbmcgQXVkaW9SZWNvcmQ6IGZyYW1lQ291bnQgaXMgMC4iKTsKICAgICAgICAgcmV0dXJuIChqaW50KSBBVURJT1JFQ09SRF9FUlJPUl9TRVRVUF9aRVJPRlJBTUVDT1VOVDsKICAgICB9Ci0gICAgaW50IGZyYW1lU2l6ZSA9IG5iQ2hhbm5lbHMgKiBieXRlc1BlclNhbXBsZTsKKyAgICBzaXplX3QgZnJhbWVTaXplID0gbmJDaGFubmVscyAqIGJ5dGVzUGVyU2FtcGxlOwogICAgIHNpemVfdCBmcmFtZUNvdW50ID0gYnVmZlNpemVJbkJ5dGVzIC8gZnJhbWVTaXplOwogCiAgICAgaWYgKCh1aW50MzJfdChzb3VyY2UpID49IEFVRElPX1NPVVJDRV9DTlQpICYmICh1aW50MzJfdChzb3VyY2UpICE9IEFVRElPX1NPVVJDRV9IT1RXT1JEKSkgewotICAgICAgICBBTE9HRSgiRXJyb3IgY3JlYXRpbmcgQXVkaW9SZWNvcmQ6IHVua25vd24gc291cmNlLiIpOworICAgICAgICBBTE9HRSgiRXJyb3IgY3JlYXRpbmcgQXVkaW9SZWNvcmQ6IHVua25vd24gc291cmNlICVkLiIsIHNvdXJjZSk7CiAgICAgICAgIHJldHVybiAoamludCkgQVVESU9SRUNPUkRfRVJST1JfU0VUVVBfSU5WQUxJRFNPVVJDRTsKICAgICB9CiAKQEAgLTIzNyw4ICsyMzAsMTAgQEAKICAgICAgICAgdHJ1ZSwgICAgICAgICAgLy8gdGhyZWFkQ2FuQ2FsbEphdmEKICAgICAgICAgc2Vzc2lvbklkKTsKIAotICAgIGlmIChscFJlY29yZGVyLT5pbml0Q2hlY2soKSAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HRSgiRXJyb3IgY3JlYXRpbmcgQXVkaW9SZWNvcmQgaW5zdGFuY2U6IGluaXRpYWxpemF0aW9uIGNoZWNrIGZhaWxlZC4iKTsKKyAgICBjb25zdCBzdGF0dXNfdCBzdGF0dXMgPSBscFJlY29yZGVyLT5pbml0Q2hlY2soKTsKKyAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgIEFMT0dFKCJFcnJvciBjcmVhdGluZyBBdWRpb1JlY29yZCBpbnN0YW5jZTogaW5pdGlhbGl6YXRpb24gY2hlY2sgZmFpbGVkIHdpdGggc3RhdHVzICVkLiIsCisgICAgICAgICAgICAgICAgc3RhdHVzKTsKICAgICAgICAgZ290byBuYXRpdmVfaW5pdF9mYWlsdXJlOwogICAgIH0KIApAQCAtNTExLDEwICs1MDYsMTAgQEAKICAgICAgICAgICBzYW1wbGVSYXRlSW5IZXJ0eiwgbmJDaGFubmVscywgYXVkaW9Gb3JtYXQpOwogCiAgICAgc2l6ZV90IGZyYW1lQ291bnQgPSAwOworICAgIGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCA9IGF1ZGlvRm9ybWF0VG9OYXRpdmUoYXVkaW9Gb3JtYXQpOwogICAgIHN0YXR1c190IHJlc3VsdCA9IEF1ZGlvUmVjb3JkOjpnZXRNaW5GcmFtZUNvdW50KCZmcmFtZUNvdW50LAogICAgICAgICAgICAgc2FtcGxlUmF0ZUluSGVydHosCi0gICAgICAgICAgICAoYXVkaW9Gb3JtYXQgPT0gRU5DT0RJTkdfUENNXzE2QklUID8KLSAgICAgICAgICAgICAgICBBVURJT19GT1JNQVRfUENNXzE2X0JJVCA6IEFVRElPX0ZPUk1BVF9QQ01fOF9CSVQpLAorICAgICAgICAgICAgZm9ybWF0LAogICAgICAgICAgICAgYXVkaW9fY2hhbm5lbF9pbl9tYXNrX2Zyb21fY291bnQobmJDaGFubmVscykpOwogCiAgICAgaWYgKHJlc3VsdCA9PSBCQURfVkFMVUUpIHsKQEAgLTUyMyw3ICs1MTgsNyBAQAogICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICByZXR1cm4gZnJhbWVDb3VudCAqIG5iQ2hhbm5lbHMgKiAoYXVkaW9Gb3JtYXQgPT0gRU5DT0RJTkdfUENNXzE2QklUID8gMiA6IDEpOworICAgIHJldHVybiBmcmFtZUNvdW50ICogbmJDaGFubmVscyAqIGF1ZGlvX2J5dGVzX3Blcl9zYW1wbGUoZm9ybWF0KTsKIH0KIAogCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvU3lzdGVtLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfbWVkaWFfQXVkaW9TeXN0ZW0uY3BwCmluZGV4IGExOWQxMTEuLmE5YTYyZjggMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfbWVkaWFfQXVkaW9TeXN0ZW0uY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfbWVkaWFfQXVkaW9TeXN0ZW0uY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgY19rZXlWYWx1ZVBhaXJzOCA9IFN0cmluZzgoY19rZXlWYWx1ZVBhaXJzLCBlbnYtPkdldFN0cmluZ0xlbmd0aChrZXlWYWx1ZVBhaXJzKSk7CiAgICAgICAgIGVudi0+UmVsZWFzZVN0cmluZ0NyaXRpY2FsKGtleVZhbHVlUGFpcnMsIGNfa2V5VmFsdWVQYWlycyk7CiAgICAgfQotICAgIGludCBzdGF0dXMgPSBjaGVja19BdWRpb1N5c3RlbV9Db21tYW5kKEF1ZGlvU3lzdGVtOjpzZXRQYXJhbWV0ZXJzKDAsIGNfa2V5VmFsdWVQYWlyczgpKTsKKyAgICBpbnQgc3RhdHVzID0gY2hlY2tfQXVkaW9TeXN0ZW1fQ29tbWFuZChBdWRpb1N5c3RlbTo6c2V0UGFyYW1ldGVycyhjX2tleVZhbHVlUGFpcnM4KSk7CiAgICAgcmV0dXJuIChqaW50KSBzdGF0dXM7CiB9CiAKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgICAgICBjX2tleXM4ID0gU3RyaW5nOChjX2tleXMsIGVudi0+R2V0U3RyaW5nTGVuZ3RoKGtleXMpKTsKICAgICAgICAgZW52LT5SZWxlYXNlU3RyaW5nQ3JpdGljYWwoa2V5cywgY19rZXlzKTsKICAgICB9Ci0gICAgcmV0dXJuIGVudi0+TmV3U3RyaW5nVVRGKEF1ZGlvU3lzdGVtOjpnZXRQYXJhbWV0ZXJzKDAsIGNfa2V5czgpLnN0cmluZygpKTsKKyAgICByZXR1cm4gZW52LT5OZXdTdHJpbmdVVEYoQXVkaW9TeXN0ZW06OmdldFBhcmFtZXRlcnMoY19rZXlzOCkuc3RyaW5nKCkpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9tZWRpYV9BdWRpb1RyYWNrLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfbWVkaWFfQXVkaW9UcmFjay5jcHAKaW5kZXggZGM4ZDlkOC4uMjdmMDVkZiAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZF9tZWRpYV9BdWRpb1RyYWNrLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvVHJhY2suY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8YmluZGVyL01lbW9yeUhlYXBCYXNlLmg+CiAjaW5jbHVkZSA8YmluZGVyL01lbW9yeUJhc2UuaD4KIAotI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgorI2luY2x1ZGUgImFuZHJvaWRfbWVkaWFfQXVkaW9Gb3JtYXQuaCIKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01NSw5ICs1NSw2IEBACiAvLyBrZWVwIHRoZXNlIHZhbHVlcyBpbiBzeW5jIHdpdGggQXVkaW9UcmFjay5qYXZhCiAjZGVmaW5lIE1PREVfU1RBVElDIDAKICNkZWZpbmUgTU9ERV9TVFJFQU0gMQotLy8ga2VlcCB0aGVzZSB2YWx1ZXMgaW4gc3luYyB3aXRoIEF1ZGlvRm9ybWF0LmphdmEKLSNkZWZpbmUgRU5DT0RJTkdfUENNXzE2QklUIDIKLSNkZWZpbmUgRU5DT0RJTkdfUENNXzhCSVQgIDMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogY2xhc3MgQXVkaW9UcmFja0puaVN0b3JhZ2UgewpAQCAtMjQ0LDcgKzI0MSw4IEBACiAKICAgICAvLyBjaGVjayB0aGUgZm9ybWF0LgogICAgIC8vIFRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCBmcm9tIEphdmEsIHNvIHdlIGNvbXBhcmUgdGhlIGZvcm1hdCBhZ2FpbnN0IHRoZSBKYXZhIGNvbnN0YW50cwotICAgIGlmICgoYXVkaW9Gb3JtYXQgIT0gRU5DT0RJTkdfUENNXzE2QklUKSAmJiAoYXVkaW9Gb3JtYXQgIT0gRU5DT0RJTkdfUENNXzhCSVQpKSB7CisgICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0ID0gYXVkaW9Gb3JtYXRUb05hdGl2ZShhdWRpb0Zvcm1hdCk7CisgICAgaWYgKGZvcm1hdCA9PSBBVURJT19GT1JNQVRfSU5WQUxJRCkgewogCiAgICAgICAgIEFMT0dFKCJFcnJvciBjcmVhdGluZyBBdWRpb1RyYWNrOiB1bnN1cHBvcnRlZCBhdWRpbyBmb3JtYXQuIik7CiAgICAgICAgIHJldHVybiAoamludCkgQVVESU9UUkFDS19FUlJPUl9TRVRVUF9JTlZBTElERk9STUFUOwpAQCAtMjUzLDIwICsyNTEsMTggQEAKICAgICAvLyBmb3IgdGhlIG1vbWVudCA4Yml0UENNIGluIE1PREVfU1RBVElDIGlzIG5vdCBzdXBwb3J0ZWQgbmF0aXZlbHkgaW4gdGhlIEF1ZGlvVHJhY2sgQysrIGNsYXNzCiAgICAgLy8gc28gd2UgZGVjbGFyZSBldmVyeXRoaW5nIGFzIDE2Yml0UENNLCB0aGUgOC0+MTZiaXQgY29udmVyc2lvbiBmb3IgTU9ERV9TVEFUSUMgd2lsbCBiZSBoYW5kbGVkCiAgICAgLy8gaW4gYW5kcm9pZF9tZWRpYV9BdWRpb1RyYWNrX25hdGl2ZV93cml0ZV9ieXRlKCkKLSAgICBpZiAoKGF1ZGlvRm9ybWF0ID09IEVOQ09ESU5HX1BDTV84QklUKQorICAgIGlmICgoZm9ybWF0ID09IEFVRElPX0ZPUk1BVF9QQ01fOF9CSVQpCiAgICAgICAgICYmIChtZW1vcnlNb2RlID09IE1PREVfU1RBVElDKSkgewogICAgICAgICBBTE9HVigiYW5kcm9pZF9tZWRpYV9BdWRpb1RyYWNrX25hdGl2ZV9zZXR1cCgpOiByZXF1ZXN0aW5nIE1PREVfU1RBVElDIGZvciA4Yml0IFwKICAgICAgICAgICAgIGJ1ZmYgc2l6ZSBvZiAlZGJ5dGVzLCBzd2l0Y2hpbmcgdG8gMTZiaXQsIGJ1ZmYgc2l6ZSBvZiAlZGJ5dGVzIiwKICAgICAgICAgICAgIGJ1ZmZTaXplSW5CeXRlcywgMipidWZmU2l6ZUluQnl0ZXMpOwotICAgICAgICBhdWRpb0Zvcm1hdCA9IEVOQ09ESU5HX1BDTV8xNkJJVDsKKyAgICAgICAgZm9ybWF0ID0gQVVESU9fRk9STUFUX1BDTV8xNl9CSVQ7CiAgICAgICAgIC8vIHdlIHdpbGwgbmVlZCB0d2ljZSB0aGUgbWVtb3J5IHRvIHN0b3JlIHRoZSBkYXRhCiAgICAgICAgIGJ1ZmZTaXplSW5CeXRlcyAqPSAyOwogICAgIH0KIAogICAgIC8vIGNvbXB1dGUgdGhlIGZyYW1lIGNvdW50Ci0gICAgaW50IGJ5dGVzUGVyU2FtcGxlID0gYXVkaW9Gb3JtYXQgPT0gRU5DT0RJTkdfUENNXzE2QklUID8gMiA6IDE7Ci0gICAgYXVkaW9fZm9ybWF0X3QgZm9ybWF0ID0gYXVkaW9Gb3JtYXQgPT0gRU5DT0RJTkdfUENNXzE2QklUID8KLSAgICAgICAgICAgIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklUIDogQVVESU9fRk9STUFUX1BDTV84X0JJVDsKKyAgICBjb25zdCBzaXplX3QgYnl0ZXNQZXJTYW1wbGUgPSBhdWRpb19ieXRlc19wZXJfc2FtcGxlKGZvcm1hdCk7CiAgICAgaW50IGZyYW1lQ291bnQgPSBidWZmU2l6ZUluQnl0ZXMgLyAobmJDaGFubmVscyAqIGJ5dGVzUGVyU2FtcGxlKTsKIAogICAgIGpjbGFzcyBjbGF6eiA9IGVudi0+R2V0T2JqZWN0Q2xhc3ModGhpeik7CkBAIC01MTksMTQgKzUxNSwyNiBAQAogICAgICAgICAgICAgd3JpdHRlbiA9IDA7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXVkaW9Gb3JtYXQgPT0gRU5DT0RJTkdfUENNXzE2QklUKSB7CisgICAgICAgIGNvbnN0IGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCA9IGF1ZGlvRm9ybWF0VG9OYXRpdmUoYXVkaW9Gb3JtYXQpOworICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBUT0RPIEN1cnJlbnRseSB0aGUgb25seSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGZvcm1hdCBhcmUgQVVESU9fRk9STUFUX1BDTV8xNl9CSVQKKyAgICAgICAgICAgIC8vIGFuZCBBVURJT19GT1JNQVRfUENNXzhfQklULCBkdWUgdG8gdGhlIGxpbWl0ZWQgc2V0IG9mIHZhbHVlcyBmb3IgYXVkaW9Gb3JtYXQuCisgICAgICAgICAgICAvLyBUaGUgbmV4dCBzZWN0aW9uIG9mIHRoZSBzd2l0Y2ggd2lsbCBwcm9iYWJseSB3b3JrIGZvciBtb3JlIGZvcm1hdHMsIGJ1dCBpdCBoYXMgb25seQorICAgICAgICAgICAgLy8gYmVlbiB0ZXN0ZWQgZm9yIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklULCBzbyB0aGF0J3Mgd2h5IHRoZSAiZGVmYXVsdCIgY2FzZSBmYWlscy4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVVESU9fRk9STUFUX1BDTV8xNl9CSVQ6IHsKICAgICAgICAgICAgIC8vIHdyaXRpbmcgdG8gc2hhcmVkIG1lbW9yeSwgY2hlY2sgZm9yIGNhcGFjaXR5CiAgICAgICAgICAgICBpZiAoKHNpemVfdClzaXplSW5CeXRlcyA+IHRyYWNrLT5zaGFyZWRCdWZmZXIoKS0+c2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgc2l6ZUluQnl0ZXMgPSB0cmFjay0+c2hhcmVkQnVmZmVyKCktPnNpemUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lbWNweSh0cmFjay0+c2hhcmVkQnVmZmVyKCktPnBvaW50ZXIoKSwgZGF0YSArIG9mZnNldEluQnl0ZXMsIHNpemVJbkJ5dGVzKTsKICAgICAgICAgICAgIHdyaXR0ZW4gPSBzaXplSW5CeXRlczsKLSAgICAgICAgfSBlbHNlIGlmIChhdWRpb0Zvcm1hdCA9PSBFTkNPRElOR19QQ01fOEJJVCkgeworICAgICAgICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIEFVRElPX0ZPUk1BVF9QQ01fOF9CSVQ6IHsKICAgICAgICAgICAgIC8vIGRhdGEgY29udGFpbnMgOGJpdCBkYXRhIHdlIG5lZWQgdG8gZXhwYW5kIHRvIDE2Yml0IGJlZm9yZSBjb3B5aW5nCiAgICAgICAgICAgICAvLyB0byB0aGUgc2hhcmVkIG1lbW9yeQogICAgICAgICAgICAgLy8gd3JpdGluZyB0byBzaGFyZWQgbWVtb3J5LCBjaGVjayBmb3IgY2FwYWNpdHksCkBAIC01NDMsNiArNTUxLDggQEAKICAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHdlIHdyb3RlIDIqc2l6ZUluQnl0ZXMsIHdlIG9ubHkgcmVwb3J0IHNpemVJbkJ5dGVzIGFzIHdyaXR0ZW4gdG8gaGlkZQogICAgICAgICAgICAgLy8gdGhlIDhiaXQgbWl4ZXIgcmVzdHJpY3Rpb24gZnJvbSB0aGUgdXNlciBvZiB0aGlzIGZ1bmN0aW9uCiAgICAgICAgICAgICB3cml0dGVuID0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICB9IGJyZWFrOworCiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHdyaXR0ZW47CkBAIC04MjksMTIgKzgzOSwxNyBAQAogc3RhdGljIGppbnQgYW5kcm9pZF9tZWRpYV9BdWRpb1RyYWNrX2dldF9taW5fYnVmZl9zaXplKEpOSUVudiAqZW52LCAgam9iamVjdCB0aGl6LAogICAgIGppbnQgc2FtcGxlUmF0ZUluSGVydHosIGppbnQgbmJDaGFubmVscywgamludCBhdWRpb0Zvcm1hdCkgewogCi0gICAgc2l6ZV90IGZyYW1lQ291bnQgPSAwOwotICAgIGlmIChBdWRpb1RyYWNrOjpnZXRNaW5GcmFtZUNvdW50KCZmcmFtZUNvdW50LCBBVURJT19TVFJFQU1fREVGQVVMVCwKLSAgICAgICAgICAgIHNhbXBsZVJhdGVJbkhlcnR6KSAhPSBOT19FUlJPUikgeworICAgIHNpemVfdCBmcmFtZUNvdW50OworICAgIGNvbnN0IHN0YXR1c190IHN0YXR1cyA9IEF1ZGlvVHJhY2s6OmdldE1pbkZyYW1lQ291bnQoJmZyYW1lQ291bnQsIEFVRElPX1NUUkVBTV9ERUZBVUxULAorICAgICAgICAgICAgc2FtcGxlUmF0ZUluSGVydHopOworICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgQUxPR0UoIkF1ZGlvVHJhY2s6OmdldE1pbkZyYW1lQ291bnQoKSBmb3Igc2FtcGxlIHJhdGUgJWQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwKKyAgICAgICAgICAgICAgICBzYW1wbGVSYXRlSW5IZXJ0eiwgc3RhdHVzKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICByZXR1cm4gZnJhbWVDb3VudCAqIG5iQ2hhbm5lbHMgKiAoYXVkaW9Gb3JtYXQgPT0gRU5DT0RJTkdfUENNXzE2QklUID8gMiA6IDEpOworICAgIGNvbnN0IGF1ZGlvX2Zvcm1hdF90IGZvcm1hdCA9IGF1ZGlvRm9ybWF0VG9OYXRpdmUoYXVkaW9Gb3JtYXQpOworICAgIGNvbnN0IHNpemVfdCBieXRlc1BlclNhbXBsZSA9IGF1ZGlvX2J5dGVzX3Blcl9zYW1wbGUoZm9ybWF0KTsKKyAgICByZXR1cm4gZnJhbWVDb3VudCAqIG5iQ2hhbm5lbHMgKiBieXRlc1BlclNhbXBsZTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9uZXRfd2lmaV9XaWZpTmF0aXZlLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfbmV0X3dpZmlfV2lmaU5hdGl2ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMTExOTIuLjAwMDAwMDAKLS0tIGEvY29yZS9qbmkvYW5kcm9pZF9uZXRfd2lmaV9XaWZpTmF0aXZlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIndpZmkiCi0KLSNpbmNsdWRlICJqbmkuaCIKLSNpbmNsdWRlIDxTY29wZWRVdGZDaGFycy5oPgotI2luY2x1ZGUgPHV0aWxzL21pc2MuaD4KLSNpbmNsdWRlIDxhbmRyb2lkX3J1bnRpbWUvQW5kcm9pZFJ1bnRpbWUuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmcxNi5oPgotCi0jaW5jbHVkZSAid2lmaS5oIgotCi0jZGVmaW5lIFJFUExZX0JVRl9TSVpFIDQwOTYgLy8gd3BhX3N1cHBsaWNhbnQncyBtYXhpbXVtIHNpemUuCi0jZGVmaW5lIEVWRU5UX0JVRl9TSVpFIDIwNDgKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1zdGF0aWMgamludCBEQkcgPSBmYWxzZTsKLQotc3RhdGljIGJvb2wgZG9Db21tYW5kKEpOSUVudiogZW52LCBqc3RyaW5nIGphdmFDb21tYW5kLAotICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHJlcGx5LCBzaXplX3QgcmVwbHlfbGVuKSB7Ci0gICAgU2NvcGVkVXRmQ2hhcnMgY29tbWFuZChlbnYsIGphdmFDb21tYW5kKTsKLSAgICBpZiAoY29tbWFuZC5jX3N0cigpID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBTY29wZWRVdGZDaGFycyBhbHJlYWR5IHRocmV3IG9uIGVycm9yLgotICAgIH0KLQotICAgIGlmIChEQkcpIHsKLSAgICAgICAgQUxPR0QoImRvQ29tbWFuZDogJXMiLCBjb21tYW5kLmNfc3RyKCkpOwotICAgIH0KLQotICAgIC0tcmVwbHlfbGVuOyAvLyBFbnN1cmUgd2UgaGF2ZSByb29tIHRvIGFkZCBOVUwgdGVybWluYXRpb24uCi0gICAgaWYgKDo6d2lmaV9jb21tYW5kKGNvbW1hbmQuY19zdHIoKSwgcmVwbHksICZyZXBseV9sZW4pICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFN0cmlwIG9mZiB0cmFpbGluZyBuZXdsaW5lLgotICAgIGlmIChyZXBseV9sZW4gPiAwICYmIHJlcGx5W3JlcGx5X2xlbi0xXSA9PSAnXG4nKSB7Ci0gICAgICAgIHJlcGx5W3JlcGx5X2xlbi0xXSA9ICdcMCc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVwbHlbcmVwbHlfbGVuXSA9ICdcMCc7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgamludCBkb0ludENvbW1hbmQoSk5JRW52KiBlbnYsIGpzdHJpbmcgamF2YUNvbW1hbmQpIHsKLSAgICBjaGFyIHJlcGx5W1JFUExZX0JVRl9TSVpFXTsKLSAgICBpZiAoIWRvQ29tbWFuZChlbnYsIGphdmFDb21tYW5kLCByZXBseSwgc2l6ZW9mKHJlcGx5KSkpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8amludD4oYXRvaShyZXBseSkpOwotfQotCi1zdGF0aWMgamJvb2xlYW4gZG9Cb29sZWFuQ29tbWFuZChKTklFbnYqIGVudiwganN0cmluZyBqYXZhQ29tbWFuZCkgewotICAgIGNoYXIgcmVwbHlbUkVQTFlfQlVGX1NJWkVdOwotICAgIGlmICghZG9Db21tYW5kKGVudiwgamF2YUNvbW1hbmQsIHJlcGx5LCBzaXplb2YocmVwbHkpKSkgewotICAgICAgICByZXR1cm4gSk5JX0ZBTFNFOwotICAgIH0KLSAgICByZXR1cm4gKHN0cmNtcChyZXBseSwgIk9LIikgPT0gMCk7Ci19Ci0KLS8vIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBzdXBwbGljYW50LCBhbmQgcmV0dXJuIHRoZSByZXBseSBhcyBhIFN0cmluZy4KLXN0YXRpYyBqc3RyaW5nIGRvU3RyaW5nQ29tbWFuZChKTklFbnYqIGVudiwganN0cmluZyBqYXZhQ29tbWFuZCkgewotICAgIGNoYXIgcmVwbHlbUkVQTFlfQlVGX1NJWkVdOwotICAgIGlmICghZG9Db21tYW5kKGVudiwgamF2YUNvbW1hbmQsIHJlcGx5LCBzaXplb2YocmVwbHkpKSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIGVudi0+TmV3U3RyaW5nVVRGKHJlcGx5KTsKLX0KLQotc3RhdGljIGpib29sZWFuIGFuZHJvaWRfbmV0X3dpZmlfaXNEcml2ZXJMb2FkZWQoSk5JRW52KiBlbnYsIGpvYmplY3QpCi17Ci0gICAgcmV0dXJuICg6OmlzX3dpZmlfZHJpdmVyX2xvYWRlZCgpID09IDEpOwotfQotCi1zdGF0aWMgamJvb2xlYW4gYW5kcm9pZF9uZXRfd2lmaV9sb2FkRHJpdmVyKEpOSUVudiogZW52LCBqb2JqZWN0KQotewotICAgIHJldHVybiAoOjp3aWZpX2xvYWRfZHJpdmVyKCkgPT0gMCk7Ci19Ci0KLXN0YXRpYyBqYm9vbGVhbiBhbmRyb2lkX25ldF93aWZpX3VubG9hZERyaXZlcihKTklFbnYqIGVudiwgam9iamVjdCkKLXsKLSAgICByZXR1cm4gKDo6d2lmaV91bmxvYWRfZHJpdmVyKCkgPT0gMCk7Ci19Ci0KLXN0YXRpYyBqYm9vbGVhbiBhbmRyb2lkX25ldF93aWZpX3N0YXJ0U3VwcGxpY2FudChKTklFbnYqIGVudiwgam9iamVjdCwgamJvb2xlYW4gcDJwU3VwcG9ydGVkKQotewotICAgIHJldHVybiAoOjp3aWZpX3N0YXJ0X3N1cHBsaWNhbnQocDJwU3VwcG9ydGVkKSA9PSAwKTsKLX0KLQotc3RhdGljIGpib29sZWFuIGFuZHJvaWRfbmV0X3dpZmlfa2lsbFN1cHBsaWNhbnQoSk5JRW52KiBlbnYsIGpvYmplY3QsIGpib29sZWFuIHAycFN1cHBvcnRlZCkKLXsKLSAgICByZXR1cm4gKDo6d2lmaV9zdG9wX3N1cHBsaWNhbnQocDJwU3VwcG9ydGVkKSA9PSAwKTsKLX0KLQotc3RhdGljIGpib29sZWFuIGFuZHJvaWRfbmV0X3dpZmlfY29ubmVjdFRvU3VwcGxpY2FudChKTklFbnYqIGVudiwgam9iamVjdCkKLXsKLSAgICByZXR1cm4gKDo6d2lmaV9jb25uZWN0X3RvX3N1cHBsaWNhbnQoKSA9PSAwKTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF9uZXRfd2lmaV9jbG9zZVN1cHBsaWNhbnRDb25uZWN0aW9uKEpOSUVudiogZW52LCBqb2JqZWN0KQotewotICAgIDo6d2lmaV9jbG9zZV9zdXBwbGljYW50X2Nvbm5lY3Rpb24oKTsKLX0KLQotc3RhdGljIGpzdHJpbmcgYW5kcm9pZF9uZXRfd2lmaV93YWl0Rm9yRXZlbnQoSk5JRW52KiBlbnYsIGpvYmplY3QpCi17Ci0gICAgY2hhciBidWZbRVZFTlRfQlVGX1NJWkVdOwotICAgIGludCBucmVhZCA9IDo6d2lmaV93YWl0X2Zvcl9ldmVudChidWYsIHNpemVvZiBidWYpOwotICAgIGlmIChucmVhZCA+IDApIHsKLSAgICAgICAgcmV0dXJuIGVudi0+TmV3U3RyaW5nVVRGKGJ1Zik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi1zdGF0aWMgamJvb2xlYW4gYW5kcm9pZF9uZXRfd2lmaV9kb0Jvb2xlYW5Db21tYW5kKEpOSUVudiogZW52LCBqb2JqZWN0LCBqc3RyaW5nIGphdmFDb21tYW5kKSB7Ci0gICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoZW52LCBqYXZhQ29tbWFuZCk7Ci19Ci0KLXN0YXRpYyBqaW50IGFuZHJvaWRfbmV0X3dpZmlfZG9JbnRDb21tYW5kKEpOSUVudiogZW52LCBqb2JqZWN0LCBqc3RyaW5nIGphdmFDb21tYW5kKSB7Ci0gICAgcmV0dXJuIGRvSW50Q29tbWFuZChlbnYsIGphdmFDb21tYW5kKTsKLX0KLQotc3RhdGljIGpzdHJpbmcgYW5kcm9pZF9uZXRfd2lmaV9kb1N0cmluZ0NvbW1hbmQoSk5JRW52KiBlbnYsIGpvYmplY3QsIGpzdHJpbmcgamF2YUNvbW1hbmQpIHsKLSAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKGVudixqYXZhQ29tbWFuZCk7Ci19Ci0KLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8qCi0gKiBKTkkgcmVnaXN0cmF0aW9uLgotICovCi1zdGF0aWMgSk5JTmF0aXZlTWV0aG9kIGdXaWZpTWV0aG9kc1tdID0gewotICAgIC8qIG5hbWUsIHNpZ25hdHVyZSwgZnVuY1B0ciAqLwotCi0gICAgeyAibG9hZERyaXZlciIsICIoKVoiLCAgKHZvaWQgKilhbmRyb2lkX25ldF93aWZpX2xvYWREcml2ZXIgfSwKLSAgICB7ICJpc0RyaXZlckxvYWRlZCIsICIoKVoiLCAgKHZvaWQgKilhbmRyb2lkX25ldF93aWZpX2lzRHJpdmVyTG9hZGVkIH0sCi0gICAgeyAidW5sb2FkRHJpdmVyIiwgIigpWiIsICAodm9pZCAqKWFuZHJvaWRfbmV0X3dpZmlfdW5sb2FkRHJpdmVyIH0sCi0gICAgeyAic3RhcnRTdXBwbGljYW50IiwgIihaKVoiLCAgKHZvaWQgKilhbmRyb2lkX25ldF93aWZpX3N0YXJ0U3VwcGxpY2FudCB9LAotICAgIHsgImtpbGxTdXBwbGljYW50IiwgIihaKVoiLCAgKHZvaWQgKilhbmRyb2lkX25ldF93aWZpX2tpbGxTdXBwbGljYW50IH0sCi0gICAgeyAiY29ubmVjdFRvU3VwcGxpY2FudE5hdGl2ZSIsICIoKVoiLCAodm9pZCAqKWFuZHJvaWRfbmV0X3dpZmlfY29ubmVjdFRvU3VwcGxpY2FudCB9LAotICAgIHsgImNsb3NlU3VwcGxpY2FudENvbm5lY3Rpb25OYXRpdmUiLCAiKClWIiwKLSAgICAgICAgICAgICh2b2lkICopYW5kcm9pZF9uZXRfd2lmaV9jbG9zZVN1cHBsaWNhbnRDb25uZWN0aW9uIH0sCi0gICAgeyAid2FpdEZvckV2ZW50TmF0aXZlIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IiwgKHZvaWQqKWFuZHJvaWRfbmV0X3dpZmlfd2FpdEZvckV2ZW50IH0sCi0gICAgeyAiZG9Cb29sZWFuQ29tbWFuZE5hdGl2ZSIsICIoTGphdmEvbGFuZy9TdHJpbmc7KVoiLCAodm9pZCopYW5kcm9pZF9uZXRfd2lmaV9kb0Jvb2xlYW5Db21tYW5kIH0sCi0gICAgeyAiZG9JbnRDb21tYW5kTmF0aXZlIiwgIihMamF2YS9sYW5nL1N0cmluZzspSSIsICh2b2lkKilhbmRyb2lkX25ldF93aWZpX2RvSW50Q29tbWFuZCB9LAotICAgIHsgImRvU3RyaW5nQ29tbWFuZE5hdGl2ZSIsICIoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIsCi0gICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfbmV0X3dpZmlfZG9TdHJpbmdDb21tYW5kIH0sCi19OwotCi1pbnQgcmVnaXN0ZXJfYW5kcm9pZF9uZXRfd2lmaV9XaWZpTmF0aXZlKEpOSUVudiogZW52KSB7Ci0gICAgcmV0dXJuIEFuZHJvaWRSdW50aW1lOjpyZWdpc3Rlck5hdGl2ZU1ldGhvZHMoZW52LAotICAgICAgICAgICAgImFuZHJvaWQvbmV0L3dpZmkvV2lmaU5hdGl2ZSIsIGdXaWZpTWV0aG9kcywgTkVMRU0oZ1dpZmlNZXRob2RzKSk7Ci19Ci0KLX07IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX3V0aWxfRXZlbnRMb2cuY3BwIGIvY29yZS9qbmkvYW5kcm9pZF91dGlsX0V2ZW50TG9nLmNwcAppbmRleCA4M2Q4YWEyLi4yNTkzNDIwIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkX3V0aWxfRXZlbnRMb2cuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9FdmVudExvZy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJqbmkuaCIKICNpbmNsdWRlICJsb2cvbG9nZ2VyLmgiCiAKKyNkZWZpbmUgVU5VU0VEICBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKKwogLy8gVGhlIHNpemUgb2YgdGhlIHRhZyBudW1iZXIgY29tZXMgb3V0IG9mIHRoZSBwYXlsb2FkIHNpemUuCiAjZGVmaW5lIE1BWF9FVkVOVF9QQVlMT0FEIChMT0dHRVJfRU5UUllfTUFYX1BBWUxPQUQgLSBzaXplb2YoaW50MzJfdCkpCiAKQEAgLTQ0LDcgKzQ2LDggQEAKICAqIEluIGNsYXNzIGFuZHJvaWQudXRpbC5FdmVudExvZzoKICAqICBzdGF0aWMgbmF0aXZlIGludCB3cml0ZUV2ZW50KGludCB0YWcsIGludCB2YWx1ZSkKICAqLwotc3RhdGljIGppbnQgYW5kcm9pZF91dGlsX0V2ZW50TG9nX3dyaXRlRXZlbnRfSW50ZWdlcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKK3N0YXRpYyBqaW50IGFuZHJvaWRfdXRpbF9FdmVudExvZ193cml0ZUV2ZW50X0ludGVnZXIoSk5JRW52KiBlbnYgVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGNsYXp6IFVOVVNFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCB0YWcsIGppbnQgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGFuZHJvaWRfYnRXcml0ZUxvZyh0YWcsIEVWRU5UX1RZUEVfSU5ULCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwpAQCAtNTQsNyArNTcsOCBAQAogICogSW4gY2xhc3MgYW5kcm9pZC51dGlsLkV2ZW50TG9nOgogICogIHN0YXRpYyBuYXRpdmUgaW50IHdyaXRlRXZlbnQobG9uZyB0YWcsIGxvbmcgdmFsdWUpCiAgKi8KLXN0YXRpYyBqaW50IGFuZHJvaWRfdXRpbF9FdmVudExvZ193cml0ZUV2ZW50X0xvbmcoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCitzdGF0aWMgamludCBhbmRyb2lkX3V0aWxfRXZlbnRMb2dfd3JpdGVFdmVudF9Mb25nKEpOSUVudiogZW52IFVOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBjbGF6eiBVTlVTRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgdGFnLCBqbG9uZyB2YWx1ZSkKIHsKICAgICByZXR1cm4gYW5kcm9pZF9idFdyaXRlTG9nKHRhZywgRVZFTlRfVFlQRV9MT05HLCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwpAQCAtNjQsNyArNjgsOCBAQAogICogSW4gY2xhc3MgYW5kcm9pZC51dGlsLkV2ZW50TG9nOgogICogIHN0YXRpYyBuYXRpdmUgaW50IHdyaXRlRXZlbnQoaW50IHRhZywgU3RyaW5nIHZhbHVlKQogICovCi1zdGF0aWMgamludCBhbmRyb2lkX3V0aWxfRXZlbnRMb2dfd3JpdGVFdmVudF9TdHJpbmcoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCitzdGF0aWMgamludCBhbmRyb2lkX3V0aWxfRXZlbnRMb2dfd3JpdGVFdmVudF9TdHJpbmcoSk5JRW52KiBlbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBjbGF6eiBVTlVTRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCB0YWcsIGpzdHJpbmcgdmFsdWUpIHsKICAgICB1aW50OF90IGJ1ZltNQVhfRVZFTlRfUEFZTE9BRF07CiAKQEAgLTE0MiwxOCArMTQ3LDIxIEBACiAgKiBJbiBjbGFzcyBhbmRyb2lkLnV0aWwuRXZlbnRMb2c6CiAgKiAgc3RhdGljIG5hdGl2ZSB2b2lkIHJlYWRFdmVudHMoaW50W10gdGFncywgQ29sbGVjdGlvbjxFdmVudD4gb3V0cHV0KQogICoKLSAqICBSZWFkcyBldmVudHMgZnJvbSB0aGUgZXZlbnQgbG9nLCB0eXBpY2FsbHkgL2Rldi9sb2cvZXZlbnRzCisgKiAgUmVhZHMgZXZlbnRzIGZyb20gdGhlIGV2ZW50IGxvZwogICovCi1zdGF0aWMgdm9pZCBhbmRyb2lkX3V0aWxfRXZlbnRMb2dfcmVhZEV2ZW50cyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdXRpbF9FdmVudExvZ19yZWFkRXZlbnRzKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6IFVOVVNFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnRBcnJheSB0YWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBvdXQpIHsKKwogICAgIGlmICh0YWdzID09IE5VTEwgfHwgb3V0ID09IE5VTEwpIHsKICAgICAgICAgam5pVGhyb3dOdWxsUG9pbnRlckV4Y2VwdGlvbihlbnYsIE5VTEwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW50IGZkID0gb3BlbigiL2Rldi8iIExPR0dFUl9MT0dfRVZFTlRTLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOwotICAgIGlmIChmZCA8IDApIHsKKyAgICBzdHJ1Y3QgbG9nZ2VyX2xpc3QgKmxvZ2dlcl9saXN0ID0gYW5kcm9pZF9sb2dnZXJfbGlzdF9vcGVuKAorICAgICAgICBMT0dfSURfRVZFTlRTLCBPX1JET05MWSB8IE9fTk9OQkxPQ0ssIDAsIDApOworCisgICAgaWYgKCFsb2dnZXJfbGlzdCkgewogICAgICAgICBqbmlUaHJvd0lPRXhjZXB0aW9uKGVudiwgZXJybm8pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTYxLDQxICsxNjksMjYgQEAKICAgICBqc2l6ZSB0YWdMZW5ndGggPSBlbnYtPkdldEFycmF5TGVuZ3RoKHRhZ3MpOwogICAgIGppbnQgKnRhZ1ZhbHVlcyA9IGVudi0+R2V0SW50QXJyYXlFbGVtZW50cyh0YWdzLCBOVUxMKTsKIAotICAgIHVpbnQ4X3QgYnVmW0xPR0dFUl9FTlRSWV9NQVhfTEVOXTsKLSAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0ID0gezAsIDB9OwotICAgIGZkX3NldCByZWFkc2V0OwotICAgIEZEX1pFUk8oJnJlYWRzZXQpOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGxvZ19tc2cgbG9nX21zZzsKKyAgICAgICAgaW50IHJldCA9IGFuZHJvaWRfbG9nZ2VyX2xpc3RfcmVhZChsb2dnZXJfbGlzdCwgJmxvZ19tc2cpOwogCi0gICAgZm9yICg7OykgewotICAgICAgICAvLyBVc2UgYSBzaG9ydCBzZWxlY3QoKSB0byB0cnkgdG8gYXZvaWQgcHJvYmxlbXMgaGFuZ2luZyBvbiByZWFkKCkuCi0gICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgYmxvY2sgZm9yIDVtcyBhdCB0aGUgZW5kIG9mIHRoZSBsb2cgLS0gb2ggd2VsbC4KLSAgICAgICAgdGltZW91dC50dl91c2VjID0gNTAwMDsKLSAgICAgICAgRkRfU0VUKGZkLCAmcmVhZHNldCk7Ci0gICAgICAgIGludCByID0gc2VsZWN0KGZkICsgMSwgJnJlYWRzZXQsIE5VTEwsIE5VTEwsICZ0aW1lb3V0KTsKLSAgICAgICAgaWYgKHIgPT0gMCkgewotICAgICAgICAgICAgYnJlYWs7ICAvLyBubyBtb3JlIGV2ZW50cwotICAgICAgICB9IGVsc2UgaWYgKHIgPCAwICYmIGVycm5vID09IEVJTlRSKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsgIC8vIGludGVycnVwdGVkIGJ5IHNpZ25hbCwgdHJ5IGFnYWluCi0gICAgICAgIH0gZWxzZSBpZiAociA8IDApIHsKLSAgICAgICAgICAgIGpuaVRocm93SU9FeGNlcHRpb24oZW52LCBlcnJubyk7ICAvLyBXaWxsIHRocm93IG9uIHJldHVybgorICAgICAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihlbnYsICJqYXZhL2lvL0lPRXhjZXB0aW9uIiwgIkV2ZW50IHRvbyBzaG9ydCIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJubyAhPSBFQUdBSU4pIHsKKyAgICAgICAgICAgICAgICBqbmlUaHJvd0lPRXhjZXB0aW9uKGVudiwgZXJybm8pOyAgLy8gV2lsbCB0aHJvdyBvbiByZXR1cm4KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IGxlbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICBpZiAobGVuID09IDAgfHwgKGxlbiA8IDAgJiYgZXJybm8gPT0gRUFHQUlOKSkgewotICAgICAgICAgICAgYnJlYWs7ICAvLyBubyBtb3JlIGV2ZW50cwotICAgICAgICB9IGVsc2UgaWYgKGxlbiA8IDAgJiYgZXJybm8gPT0gRUlOVFIpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOyAgLy8gaW50ZXJydXB0ZWQgYnkgc2lnbmFsLCB0cnkgYWdhaW4KLSAgICAgICAgfSBlbHNlIGlmIChsZW4gPCAwKSB7Ci0gICAgICAgICAgICBqbmlUaHJvd0lPRXhjZXB0aW9uKGVudiwgZXJybm8pOyAgLy8gV2lsbCB0aHJvdyBvbiByZXR1cm4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKChzaXplX3QpIGxlbiA8IHNpemVvZihsb2dnZXJfZW50cnkpICsgc2l6ZW9mKGludDMyX3QpKSB7Ci0gICAgICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihlbnYsICJqYXZhL2lvL0lPRXhjZXB0aW9uIiwgIkV2ZW50IHRvbyBzaG9ydCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBsb2dnZXJfZW50cnkqIGVudHJ5ID0gKGxvZ2dlcl9lbnRyeSopIGJ1ZjsKLSAgICAgICAgaW50MzJfdCB0YWcgPSAqIChpbnQzMl90KikgKGJ1ZiArIHNpemVvZigqZW50cnkpKTsKKyAgICAgICAgaW50MzJfdCB0YWcgPSAqIChpbnQzMl90ICopIGxvZ19tc2cubXNnKCk7CiAKICAgICAgICAgaW50IGZvdW5kID0gMDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7ICFmb3VuZCAmJiBpIDwgdGFnTGVuZ3RoOyArK2kpIHsKQEAgLTIwMywxNiArMTk2LDIwIEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAgICAgIGpzaXplIGxlbiA9IHNpemVvZigqZW50cnkpICsgZW50cnktPmxlbjsKKyAgICAgICAgICAgIGpzaXplIGxlbiA9IHJldDsKICAgICAgICAgICAgIGpieXRlQXJyYXkgYXJyYXkgPSBlbnYtPk5ld0J5dGVBcnJheShsZW4pOwotICAgICAgICAgICAgaWYgKGFycmF5ID09IE5VTEwpIGJyZWFrOworICAgICAgICAgICAgaWYgKGFycmF5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgamJ5dGUgKmJ5dGVzID0gZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhhcnJheSwgTlVMTCk7Ci0gICAgICAgICAgICBtZW1jcHkoYnl0ZXMsIGJ1ZiwgbGVuKTsKKyAgICAgICAgICAgIG1lbWNweShieXRlcywgbG9nX21zZy5idWYsIGxlbik7CiAgICAgICAgICAgICBlbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhhcnJheSwgYnl0ZXMsIDApOwogCiAgICAgICAgICAgICBqb2JqZWN0IGV2ZW50ID0gZW52LT5OZXdPYmplY3QoZ0V2ZW50Q2xhc3MsIGdFdmVudEluaXRJRCwgYXJyYXkpOwotICAgICAgICAgICAgaWYgKGV2ZW50ID09IE5VTEwpIGJyZWFrOworICAgICAgICAgICAgaWYgKGV2ZW50ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZW52LT5DYWxsQm9vbGVhbk1ldGhvZChvdXQsIGdDb2xsZWN0aW9uQWRkSUQsIGV2ZW50KTsKICAgICAgICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoZXZlbnQpOwpAQCAtMjIwLDcgKzIxNyw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjbG9zZShmZCk7CisgICAgYW5kcm9pZF9sb2dnZXJfbGlzdF9jbG9zZShsb2dnZXJfbGlzdCk7CisKICAgICBlbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKHRhZ3MsIHRhZ1ZhbHVlcywgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19EaXNwbGF5TGlzdC5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjlhMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3QuY3BwCkBAIC0wLDAgKzEsNDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJPcGVuR0xSZW5kZXJlciIKKworI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKworI2luY2x1ZGUgImpuaS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzSk5JLmgiCisjaW5jbHVkZSA8bmF0aXZlaGVscGVyL0pOSUhlbHAuaD4KKyNpbmNsdWRlIDxhbmRyb2lkX3J1bnRpbWUvQW5kcm9pZFJ1bnRpbWUuaD4KKworI2luY2x1ZGUgPERpc3BsYXlMaXN0Lmg+CisjaW5jbHVkZSA8RGlzcGxheUxpc3RSZW5kZXJlci5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK3VzaW5nIG5hbWVzcGFjZSB1aXJlbmRlcmVyOworCisvKioKKyAqIE5vdGU6IE9wZW5HTFJlbmRlcmVyIEpOSSBsYXllciBpcyBnZW5lcmF0ZWQgYW5kIGNvbXBpbGVkIG9ubHkgb24gc3VwcG9ydGVkCisgKiAgICAgICBkZXZpY2VzLiBUaGlzIG1lYW5zIGFsbCB0aGUgbG9naWMgbXVzdCBiZSBjb21waWxlZCBvbmx5IHdoZW4gdGhlCisgKiAgICAgICBwcmVwcm9jZXNzb3IgdmFyaWFibGUgVVNFX09QRU5HTF9SRU5ERVJFUiBpcyBkZWZpbmVkLgorICovCisjaWZkZWYgVVNFX09QRU5HTF9SRU5ERVJFUgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEaXNwbGF5TGlzdCB2aWV3IHByb3BlcnRpZXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3Jlc2V0KEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+cmVzZXQoKTsKK30KKworc3RhdGljIGppbnQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldERpc3BsYXlMaXN0U2l6ZShKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0cikgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5nZXRTaXplKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXREaXNwbGF5TGlzdE5hbWUoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGpzdHJpbmcgbmFtZSkgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgaWYgKG5hbWUgIT0gTlVMTCkgeworICAgICAgICBjb25zdCBjaGFyKiB0ZXh0QXJyYXkgPSBlbnYtPkdldFN0cmluZ1VURkNoYXJzKG5hbWUsIE5VTEwpOworICAgICAgICBkaXNwbGF5TGlzdC0+c2V0TmFtZSh0ZXh0QXJyYXkpOworICAgICAgICBlbnYtPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhuYW1lLCB0ZXh0QXJyYXkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X291dHB1dChKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0cikgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgZGlzcGxheUxpc3QtPm91dHB1dCgpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZGVzdHJveURpc3BsYXlMaXN0KEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBEaXNwbGF5TGlzdDo6ZGVzdHJveURpc3BsYXlMaXN0RGVmZXJyZWQoZGlzcGxheUxpc3QpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEaXNwbGF5TGlzdCB2aWV3IHByb3BlcnRpZXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3NldENhY2hpbmcoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGpib29sZWFuIGNhY2hpbmcpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIGRpc3BsYXlMaXN0LT5zZXRDYWNoaW5nKGNhY2hpbmcpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0U3RhdGljTWF0cml4KEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyLCBqaW50IG1hdHJpeFB0cikgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgU2tNYXRyaXgqIG1hdHJpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tNYXRyaXgqPihtYXRyaXhQdHIpOworICAgIGRpc3BsYXlMaXN0LT5zZXRTdGF0aWNNYXRyaXgobWF0cml4KTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3NldEFuaW1hdGlvbk1hdHJpeChKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0ciwgamludCBtYXRyaXhQdHIpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIFNrTWF0cml4KiBtYXRyaXggPSByZWludGVycHJldF9jYXN0PFNrTWF0cml4Kj4obWF0cml4UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0QW5pbWF0aW9uTWF0cml4KG1hdHJpeCk7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRDbGlwVG9Cb3VuZHMoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGpib29sZWFuIGNsaXBUb0JvdW5kcykgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgZGlzcGxheUxpc3QtPnNldENsaXBUb0JvdW5kcyhjbGlwVG9Cb3VuZHMpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0SXNDb250YWluZWRWb2x1bWUoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGpib29sZWFuIGlzQ29udGFpbmVkVm9sdW1lKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0SXNDb250YWluZWRWb2x1bWUoaXNDb250YWluZWRWb2x1bWUpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0UHJvamVjdFRvQ29udGFpbmVkVm9sdW1lKEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyLCBqYm9vbGVhbiBzaG91bGRQcm9qZWN0KSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0UHJvamVjdFRvQ29udGFpbmVkVm9sdW1lKHNob3VsZFByb2plY3QpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0QWxwaGEoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGZsb2F0IGFscGhhKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0QWxwaGEoYWxwaGEpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0SGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGJvb2wgaGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIGRpc3BsYXlMaXN0LT5zZXRIYXNPdmVybGFwcGluZ1JlbmRlcmluZyhoYXNPdmVybGFwcGluZ1JlbmRlcmluZyk7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRUcmFuc2xhdGlvblgoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGZsb2F0IHR4KSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0VHJhbnNsYXRpb25YKHR4KTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3NldFRyYW5zbGF0aW9uWShKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0ciwgZmxvYXQgdHkpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIGRpc3BsYXlMaXN0LT5zZXRUcmFuc2xhdGlvblkodHkpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0VHJhbnNsYXRpb25aKEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyLCBmbG9hdCB0eikgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgZGlzcGxheUxpc3QtPnNldFRyYW5zbGF0aW9uWih0eik7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRSb3RhdGlvbihKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0ciwgZmxvYXQgcm90YXRpb24pIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIGRpc3BsYXlMaXN0LT5zZXRSb3RhdGlvbihyb3RhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRSb3RhdGlvblgoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGZsb2F0IHJ4KSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0Um90YXRpb25YKHJ4KTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3NldFJvdGF0aW9uWShKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0ciwgZmxvYXQgcnkpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIGRpc3BsYXlMaXN0LT5zZXRSb3RhdGlvblkocnkpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0U2NhbGVYKEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyLCBmbG9hdCBzeCkgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgZGlzcGxheUxpc3QtPnNldFNjYWxlWChzeCk7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRTY2FsZVkoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGZsb2F0IHN5KSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0U2NhbGVZKHN5KTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3NldFRyYW5zZm9ybWF0aW9uSW5mbyhKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0ciwgZmxvYXQgYWxwaGEsCisgICAgICAgIGZsb2F0IHRyYW5zbGF0aW9uWCwgZmxvYXQgdHJhbnNsYXRpb25ZLCBmbG9hdCB0cmFuc2xhdGlvblosCisgICAgICAgIGZsb2F0IHJvdGF0aW9uLCBmbG9hdCByb3RhdGlvblgsIGZsb2F0IHJvdGF0aW9uWSwgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVkpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIGRpc3BsYXlMaXN0LT5zZXRBbHBoYShhbHBoYSk7CisgICAgZGlzcGxheUxpc3QtPnNldFRyYW5zbGF0aW9uWCh0cmFuc2xhdGlvblgpOworICAgIGRpc3BsYXlMaXN0LT5zZXRUcmFuc2xhdGlvblkodHJhbnNsYXRpb25ZKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0VHJhbnNsYXRpb25aKHRyYW5zbGF0aW9uWik7CisgICAgZGlzcGxheUxpc3QtPnNldFJvdGF0aW9uKHJvdGF0aW9uKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0Um90YXRpb25YKHJvdGF0aW9uWCk7CisgICAgZGlzcGxheUxpc3QtPnNldFJvdGF0aW9uWShyb3RhdGlvblkpOworICAgIGRpc3BsYXlMaXN0LT5zZXRTY2FsZVgoc2NhbGVYKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0U2NhbGVZKHNjYWxlWSk7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRQaXZvdFgoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGZsb2F0IHB4KSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0UGl2b3RYKHB4KTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3NldFBpdm90WShKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0ciwgZmxvYXQgcHkpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIGRpc3BsYXlMaXN0LT5zZXRQaXZvdFkocHkpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0Q2FtZXJhRGlzdGFuY2UoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGZsb2F0IGRpc3RhbmNlKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0Q2FtZXJhRGlzdGFuY2UoZGlzdGFuY2UpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0TGVmdChKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0ciwgaW50IGxlZnQpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIGRpc3BsYXlMaXN0LT5zZXRMZWZ0KGxlZnQpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0VG9wKEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyLCBpbnQgdG9wKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0VG9wKHRvcCk7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRSaWdodChKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0ciwgaW50IHJpZ2h0KSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0UmlnaHQocmlnaHQpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0Qm90dG9tKEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyLCBpbnQgYm90dG9tKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+c2V0Qm90dG9tKGJvdHRvbSk7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRMZWZ0VG9wUmlnaHRCb3R0b20oSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGludCBsZWZ0LCBpbnQgdG9wLAorICAgICAgICBpbnQgcmlnaHQsIGludCBib3R0b20pIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIGRpc3BsYXlMaXN0LT5zZXRMZWZ0VG9wUmlnaHRCb3R0b20obGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X29mZnNldExlZnRBbmRSaWdodChKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0ciwgZmxvYXQgb2Zmc2V0KSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICBkaXNwbGF5TGlzdC0+b2Zmc2V0TGVmdFJpZ2h0KG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9vZmZzZXRUb3BBbmRCb3R0b20oSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIsIGZsb2F0IG9mZnNldCkgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgZGlzcGxheUxpc3QtPm9mZnNldFRvcEJvdHRvbShvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0TWF0cml4KEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyLCBqaW50IG1hdHJpeFB0cikgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgU2tNYXRyaXgqIG1hdHJpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tNYXRyaXgqPihtYXRyaXhQdHIpOworICAgIFNrTWF0cml4KiBzb3VyY2UgPSBkaXNwbGF5TGlzdC0+Z2V0U3RhdGljTWF0cml4KCk7CisgICAgaWYgKHNvdXJjZSkgeworICAgICAgICBtYXRyaXgtPnNldENvbmNhdChTa01hdHJpeDo6SSgpLCAqc291cmNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtYXRyaXgtPnNldElkZW50aXR5KCk7CisgICAgfQorfQorCitzdGF0aWMgamJvb2xlYW4gYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2hhc092ZXJsYXBwaW5nUmVuZGVyaW5nKEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICByZXR1cm4gZGlzcGxheUxpc3QtPmhhc092ZXJsYXBwaW5nUmVuZGVyaW5nKCk7Cit9CisKK3N0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldEFscGhhKEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICByZXR1cm4gZGlzcGxheUxpc3QtPmdldEFscGhhKCk7Cit9CisKK3N0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldExlZnQoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0TGVmdCgpOworfQorCitzdGF0aWMgamZsb2F0IGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9nZXRUb3AoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0VG9wKCk7Cit9CisKK3N0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldFJpZ2h0KEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICByZXR1cm4gZGlzcGxheUxpc3QtPmdldFJpZ2h0KCk7Cit9CisKK3N0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldEJvdHRvbShKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0cikgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5nZXRCb3R0b20oKTsKK30KKworc3RhdGljIGpmbG9hdCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0Q2FtZXJhRGlzdGFuY2UoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0Q2FtZXJhRGlzdGFuY2UoKTsKK30KKworc3RhdGljIGpmbG9hdCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0U2NhbGVYKEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICByZXR1cm4gZGlzcGxheUxpc3QtPmdldFNjYWxlWCgpOworfQorCitzdGF0aWMgamZsb2F0IGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9nZXRTY2FsZVkoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0U2NhbGVZKCk7Cit9CisKK3N0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldFRyYW5zbGF0aW9uWChKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0cikgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5nZXRUcmFuc2xhdGlvblgoKTsKK30KKworc3RhdGljIGpmbG9hdCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0VHJhbnNsYXRpb25ZKEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICByZXR1cm4gZGlzcGxheUxpc3QtPmdldFRyYW5zbGF0aW9uWSgpOworfQorCitzdGF0aWMgamZsb2F0IGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9nZXRSb3RhdGlvbihKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0cikgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5nZXRSb3RhdGlvbigpOworfQorCitzdGF0aWMgamZsb2F0IGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9nZXRSb3RhdGlvblgoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0Um90YXRpb25YKCk7Cit9CisKK3N0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldFJvdGF0aW9uWShKTklFbnYqIGVudiwKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCBkaXNwbGF5TGlzdFB0cikgeworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CisgICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5nZXRSb3RhdGlvblkoKTsKK30KKworc3RhdGljIGpmbG9hdCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0UGl2b3RYKEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGRpc3BsYXlMaXN0UHRyKSB7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICByZXR1cm4gZGlzcGxheUxpc3QtPmdldFBpdm90WCgpOworfQorCitzdGF0aWMgamZsb2F0IGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9nZXRQaXZvdFkoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgZGlzcGxheUxpc3RQdHIpIHsKKyAgICBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Kj4oZGlzcGxheUxpc3RQdHIpOworICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0UGl2b3RZKCk7Cit9CisKKyNlbmRpZiAvLyBVU0VfT1BFTkdMX1JFTkRFUkVSCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEpOSSBHbHVlCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NvbnN0IGNoYXIqIGNvbnN0IGtDbGFzc1BhdGhOYW1lID0gImFuZHJvaWQvdmlldy9EaXNwbGF5TGlzdCI7CisKK3N0YXRpYyBKTklOYXRpdmVNZXRob2QgZ01ldGhvZHNbXSA9IHsKKyNpZmRlZiBVU0VfT1BFTkdMX1JFTkRFUkVSCisgICAgeyAibkRlc3Ryb3lEaXNwbGF5TGlzdCIsICAgIihJKVYiLCAgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2Rlc3Ryb3lEaXNwbGF5TGlzdCB9LAorICAgIHsgIm5HZXREaXNwbGF5TGlzdFNpemUiLCAgICIoSSlJIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9nZXREaXNwbGF5TGlzdFNpemUgfSwKKyAgICB7ICJuU2V0RGlzcGxheUxpc3ROYW1lIiwgICAiKElMamF2YS9sYW5nL1N0cmluZzspViIsCisgICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXREaXNwbGF5TGlzdE5hbWUgfSwKKyAgICB7ICJuT3V0cHV0IiwgICAgICAgICAgICAgICAiKEkpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9vdXRwdXQgfSwKKworICAgIHsgIm5SZXNldCIsICAgICAgICAgICAgICAgICIoSSlWIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9yZXNldCB9LAorICAgIHsgIm5TZXRDYWNoaW5nIiwgICAgICAgICAgICIoSVopViIsICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRDYWNoaW5nIH0sCisgICAgeyAiblNldFN0YXRpY01hdHJpeCIsICAgICAgIihJSSlWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3NldFN0YXRpY01hdHJpeCB9LAorICAgIHsgIm5TZXRBbmltYXRpb25NYXRyaXgiLCAgICIoSUkpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRBbmltYXRpb25NYXRyaXggfSwKKyAgICB7ICJuU2V0Q2xpcFRvQm91bmRzIiwgICAgICAiKElaKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0Q2xpcFRvQm91bmRzIH0sCisgICAgeyAiblNldElzQ29udGFpbmVkVm9sdW1lIiwgIihJWilWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3NldElzQ29udGFpbmVkVm9sdW1lIH0sCisgICAgeyAiblNldFByb2plY3RUb0NvbnRhaW5lZFZvbHVtZSIsICIoSVopViIsCisgICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRQcm9qZWN0VG9Db250YWluZWRWb2x1bWUgfSwKKyAgICB7ICJuU2V0QWxwaGEiLCAgICAgICAgICAgICAiKElGKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0QWxwaGEgfSwKKyAgICB7ICJuU2V0SGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmciLCAiKElaKVYiLAorICAgICAgICAgICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0SGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcgfSwKKyAgICB7ICJuU2V0VHJhbnNsYXRpb25YIiwgICAgICAiKElGKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0VHJhbnNsYXRpb25YIH0sCisgICAgeyAiblNldFRyYW5zbGF0aW9uWSIsICAgICAgIihJRilWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3NldFRyYW5zbGF0aW9uWSB9LAorICAgIHsgIm5TZXRUcmFuc2xhdGlvbloiLCAgICAgICIoSUYpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRUcmFuc2xhdGlvblogfSwKKyAgICB7ICJuU2V0Um90YXRpb24iLCAgICAgICAgICAiKElGKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0Um90YXRpb24gfSwKKyAgICB7ICJuU2V0Um90YXRpb25YIiwgICAgICAgICAiKElGKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0Um90YXRpb25YIH0sCisgICAgeyAiblNldFJvdGF0aW9uWSIsICAgICAgICAgIihJRilWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3NldFJvdGF0aW9uWSB9LAorICAgIHsgIm5TZXRTY2FsZVgiLCAgICAgICAgICAgICIoSUYpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRTY2FsZVggfSwKKyAgICB7ICJuU2V0U2NhbGVZIiwgICAgICAgICAgICAiKElGKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0U2NhbGVZIH0sCisgICAgeyAiblNldFRyYW5zZm9ybWF0aW9uSW5mbyIsIihJRkZGRkZGRkZGKVYiLAorICAgICAgICAgICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0VHJhbnNmb3JtYXRpb25JbmZvIH0sCisgICAgeyAiblNldFBpdm90WCIsICAgICAgICAgICAgIihJRilWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X3NldFBpdm90WCB9LAorICAgIHsgIm5TZXRQaXZvdFkiLCAgICAgICAgICAgICIoSUYpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRQaXZvdFkgfSwKKyAgICB7ICJuU2V0Q2FtZXJhRGlzdGFuY2UiLCAgICAiKElGKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0Q2FtZXJhRGlzdGFuY2UgfSwKKyAgICB7ICJuU2V0TGVmdCIsICAgICAgICAgICAgICAiKElJKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0TGVmdCB9LAorICAgIHsgIm5TZXRUb3AiLCAgICAgICAgICAgICAgICIoSUkpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9zZXRUb3AgfSwKKyAgICB7ICJuU2V0UmlnaHQiLCAgICAgICAgICAgICAiKElJKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0UmlnaHQgfSwKKyAgICB7ICJuU2V0Qm90dG9tIiwgICAgICAgICAgICAiKElJKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0Qm90dG9tIH0sCisgICAgeyAiblNldExlZnRUb3BSaWdodEJvdHRvbSIsIihJSUlJSSlWIiwgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3Rfc2V0TGVmdFRvcFJpZ2h0Qm90dG9tIH0sCisgICAgeyAibk9mZnNldExlZnRBbmRSaWdodCIsICAgIihJRilWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X29mZnNldExlZnRBbmRSaWdodCB9LAorICAgIHsgIm5PZmZzZXRUb3BBbmRCb3R0b20iLCAgICIoSUYpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9vZmZzZXRUb3BBbmRCb3R0b20gfSwKKworICAgIHsgIm5HZXRNYXRyaXgiLCAgICAgICAgICAgICAgICIoSUkpViIsICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldE1hdHJpeCB9LAorICAgIHsgIm5IYXNPdmVybGFwcGluZ1JlbmRlcmluZyIsICIoSSlaIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2hhc092ZXJsYXBwaW5nUmVuZGVyaW5nIH0sCisgICAgeyAibkdldEFscGhhIiwgICAgICAgICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0QWxwaGEgfSwKKyAgICB7ICJuR2V0TGVmdCIsICAgICAgICAgICAgICAgICAiKEkpRiIsICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9nZXRMZWZ0IH0sCisgICAgeyAibkdldFRvcCIsICAgICAgICAgICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0VG9wIH0sCisgICAgeyAibkdldFJpZ2h0IiwgICAgICAgICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0UmlnaHQgfSwKKyAgICB7ICJuR2V0Qm90dG9tIiwgICAgICAgICAgICAgICAiKEkpRiIsICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9nZXRCb3R0b20gfSwKKyAgICB7ICJuR2V0Q2FtZXJhRGlzdGFuY2UiLCAgICAgICAiKEkpRiIsICAodm9pZCopIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdF9nZXRDYW1lcmFEaXN0YW5jZSB9LAorICAgIHsgIm5HZXRTY2FsZVgiLCAgICAgICAgICAgICAgICIoSSlGIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldFNjYWxlWCB9LAorICAgIHsgIm5HZXRTY2FsZVkiLCAgICAgICAgICAgICAgICIoSSlGIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldFNjYWxlWSB9LAorICAgIHsgIm5HZXRUcmFuc2xhdGlvblgiLCAgICAgICAgICIoSSlGIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldFRyYW5zbGF0aW9uWCB9LAorICAgIHsgIm5HZXRUcmFuc2xhdGlvblkiLCAgICAgICAgICIoSSlGIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldFRyYW5zbGF0aW9uWSB9LAorICAgIHsgIm5HZXRSb3RhdGlvbiIsICAgICAgICAgICAgICIoSSlGIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0X2dldFJvdGF0aW9uIH0sCisgICAgeyAibkdldFJvdGF0aW9uWCIsICAgICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0Um90YXRpb25YIH0sCisgICAgeyAibkdldFJvdGF0aW9uWSIsICAgICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0Um90YXRpb25ZIH0sCisgICAgeyAibkdldFBpdm90WCIsICAgICAgICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0UGl2b3RYIH0sCisgICAgeyAibkdldFBpdm90WSIsICAgICAgICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RfZ2V0UGl2b3RZIH0sCisjZW5kaWYKK307CisKKyNpZmRlZiBVU0VfT1BFTkdMX1JFTkRFUkVSCisgICAgI2RlZmluZSBGSU5EX0NMQVNTKHZhciwgY2xhc3NOYW1lKSBcCisgICAgICAgICAgICB2YXIgPSBlbnYtPkZpbmRDbGFzcyhjbGFzc05hbWUpOyBcCisgICAgICAgICAgICBMT0dfRkFUQUxfSUYoISB2YXIsICJVbmFibGUgdG8gZmluZCBjbGFzcyAiIGNsYXNzTmFtZSk7CisKKyAgICAjZGVmaW5lIEdFVF9NRVRIT0RfSUQodmFyLCBjbGF6eiwgbWV0aG9kTmFtZSwgbWV0aG9kRGVzY3JpcHRvcikgXAorICAgICAgICAgICAgdmFyID0gZW52LT5HZXRNZXRob2RJRChjbGF6eiwgbWV0aG9kTmFtZSwgbWV0aG9kRGVzY3JpcHRvcik7IFwKKyAgICAgICAgICAgIExPR19GQVRBTF9JRighIHZhciwgIlVuYWJsZSB0byBmaW5kIG1ldGhvZCAiIG1ldGhvZE5hbWUpOworI2Vsc2UKKyAgICAjZGVmaW5lIEZJTkRfQ0xBU1ModmFyLCBjbGFzc05hbWUpCisgICAgI2RlZmluZSBHRVRfTUVUSE9EX0lEKHZhciwgY2xhenosIG1ldGhvZE5hbWUsIG1ldGhvZERlc2NyaXB0b3IpCisjZW5kaWYKKworaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19EaXNwbGF5TGlzdChKTklFbnYqIGVudikgeworICAgIHJldHVybiBBbmRyb2lkUnVudGltZTo6cmVnaXN0ZXJOYXRpdmVNZXRob2RzKGVudiwga0NsYXNzUGF0aE5hbWUsIGdNZXRob2RzLCBORUxFTShnTWV0aG9kcykpOworfQorCit9OworCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTEVTMjBDYW52YXMuY3BwCmluZGV4IGI3MjBlNzMuLjMyZTBmM2IgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTEVTMjBDYW52YXMuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTEVTMjBDYW52YXMuY3BwCkBAIC0xMzIsMTUgKzEzMiwxNiBAQAogLy8gQ29uc3RydWN0b3JzCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBPcGVuR0xSZW5kZXJlciogYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19jcmVhdGVSZW5kZXJlcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eikgeworc3RhdGljIGppbnQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19jcmVhdGVSZW5kZXJlcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eikgewogICAgIFJFTkRFUkVSX0xPR0QoIkNyZWF0ZSBPcGVuR0xSZW5kZXJlciIpOwogICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IG5ldyBPcGVuR0xSZW5kZXJlcigpOwogICAgIHJlbmRlcmVyLT5pbml0UHJvcGVydGllcygpOwotICAgIHJldHVybiByZW5kZXJlcjsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqaW50PihyZW5kZXJlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZGVzdHJveVJlbmRlcmVyKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgUkVOREVSRVJfTE9HRCgiRGVzdHJveSBPcGVuR0xSZW5kZXJlciIpOwogICAgIGRlbGV0ZSByZW5kZXJlcjsKIH0KQEAgLTE1MCwyMyArMTUxLDI3IEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfc2V0Vmlld3BvcnQoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamludCB3aWR0aCwgamludCBoZWlnaHQpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCB3aWR0aCwgamludCBoZWlnaHQpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJlbmRlcmVyLT5zZXRWaWV3cG9ydCh3aWR0aCwgaGVpZ2h0KTsKIH0KIAogc3RhdGljIGludCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX3ByZXBhcmUoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamJvb2xlYW4gb3BhcXVlKSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGpib29sZWFuIG9wYXF1ZSkgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5wcmVwYXJlKG9wYXF1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19wcmVwYXJlRGlydHkoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamludCBsZWZ0LCBqaW50IHRvcCwgamludCByaWdodCwgamludCBib3R0b20sCisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGppbnQgbGVmdCwgamludCB0b3AsIGppbnQgcmlnaHQsIGppbnQgYm90dG9tLAogICAgICAgICBqYm9vbGVhbiBvcGFxdWUpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJldHVybiByZW5kZXJlci0+cHJlcGFyZURpcnR5KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgb3BhcXVlKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19maW5pc2goSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlcikgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKICAgICByZW5kZXJlci0+ZmluaXNoKCk7CiB9CiAKQEAgLTE3NCwyNCArMTc5LDMzIEBACiAgICAgcmV0dXJuIFN0ZW5jaWw6OmdldFN0ZW5jaWxTaXplKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfc2V0TmFtZShKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqc3RyaW5nIG5hbWUpIHsKLSAgICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHRleHRBcnJheSA9IGVudi0+R2V0U3RyaW5nVVRGQ2hhcnMobmFtZSwgTlVMTCk7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROYW1lKHRleHRBcnJheSk7Ci0gICAgICAgIGVudi0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKG5hbWUsIHRleHRBcnJheSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5hbWUoTlVMTCk7CitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX3NldFByb3BlcnR5KEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqc3RyaW5nIG5hbWUsIGpzdHJpbmcgdmFsdWUpIHsKKyAgICBpZiAoIUNhY2hlczo6aGFzSW5zdGFuY2UoKSkgeworICAgICAgICBBTE9HVygiY2FuJ3Qgc2V0IHByb3BlcnR5LCBubyBDYWNoZXMgaW5zdGFuY2UiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChuYW1lID09IE5VTEwgfHwgdmFsdWUgPT0gTlVMTCkgeworICAgICAgICBBTE9HVygiY2FuJ3Qgc2V0IHByb3AsIG51bGwgcGFzc2VkIik7CisgICAgfQorCisgICAgY29uc3QgY2hhciogbmFtZUNoYXJBcnJheSA9IGVudi0+R2V0U3RyaW5nVVRGQ2hhcnMobmFtZSwgTlVMTCk7CisgICAgY29uc3QgY2hhciogdmFsdWVDaGFyQXJyYXkgPSBlbnYtPkdldFN0cmluZ1VURkNoYXJzKHZhbHVlLCBOVUxMKTsKKyAgICBDYWNoZXM6OmdldEluc3RhbmNlKCkuc2V0VGVtcFByb3BlcnR5KG5hbWVDaGFyQXJyYXksIHZhbHVlQ2hhckFycmF5KTsKKyAgICBlbnYtPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhuYW1lLCBuYW1lQ2hhckFycmF5KTsKKyAgICBlbnYtPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhuYW1lLCB2YWx1ZUNoYXJBcnJheSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfc2V0Q291bnRPdmVyZHJhd0VuYWJsZWQoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqYm9vbGVhbiBlbmFibGVkKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKICAgICByZW5kZXJlci0+c2V0Q291bnRPdmVyZHJhd0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIHN0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19nZXRPdmVyZHJhdyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyKSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJldHVybiByZW5kZXJlci0+Z2V0T3ZlcmRyYXcoKTsKIH0KIApAQCAtMjAwLDIzICsyMTQsMzAgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIGppbnQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19jYWxsRHJhd0dMRnVuY3Rpb24oSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgRnVuY3RvciogZnVuY3RvcikgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqaW50IGZ1bmN0b3JQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOworICAgIEZ1bmN0b3IqIGZ1bmN0b3IgPSByZWludGVycHJldF9jYXN0PEZ1bmN0b3IqPihmdW5jdG9yUHRyKTsKICAgICBhbmRyb2lkOjp1aXJlbmRlcmVyOjpSZWN0IGRpcnR5OwogICAgIHJldHVybiByZW5kZXJlci0+Y2FsbERyYXdHTEZ1bmN0aW9uKGZ1bmN0b3IsIGRpcnR5KTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kZXRhY2hGdW5jdG9yKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIEZ1bmN0b3IqIGZ1bmN0b3IpIHsKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCByZW5kZXJlclB0ciwgamludCBmdW5jdG9yUHRyKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKKyAgICBGdW5jdG9yKiBmdW5jdG9yID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdG9yKj4oZnVuY3RvclB0cik7CiAgICAgcmVuZGVyZXItPmRldGFjaEZ1bmN0b3IoZnVuY3Rvcik7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfYXR0YWNoRnVuY3RvcihKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBGdW5jdG9yKiBmdW5jdG9yKSB7CisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgcmVuZGVyZXJQdHIsIGppbnQgZnVuY3RvclB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CisgICAgRnVuY3RvciogZnVuY3RvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rvcio+KGZ1bmN0b3JQdHIpOwogICAgIHJlbmRlcmVyLT5hdHRhY2hGdW5jdG9yKGZ1bmN0b3IpOwogfQogCiBzdGF0aWMgamludCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2ludm9rZUZ1bmN0b3JzKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIGpvYmplY3QgZGlydHkpIHsKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCByZW5kZXJlclB0ciwgam9iamVjdCBkaXJ0eSkgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgYW5kcm9pZDo6dWlyZW5kZXJlcjo6UmVjdCBib3VuZHM7CiAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcmVuZGVyZXItPmludm9rZUZ1bmN0b3JzKGJvdW5kcyk7CiAgICAgaWYgKHN0YXR1cyAhPSBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZSAmJiBkaXJ0eSAhPSBOVUxMKSB7CkBAIC0yNDIsMjMgKzI2MywyNyBAQAogLy8gU3RhdGUKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIGppbnQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19zYXZlKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LCBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsCitzdGF0aWMgamludCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX3NhdmUoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosIGppbnQgcmVuZGVyZXJQdHIsCiAgICAgICAgIGppbnQgZmxhZ3MpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJldHVybiByZW5kZXJlci0+c2F2ZShmbGFncyk7CiB9CiAKIHN0YXRpYyBqaW50IGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZ2V0U2F2ZUNvdW50KEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5nZXRTYXZlQ291bnQoKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19yZXN0b3JlKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgcmVuZGVyZXItPnJlc3RvcmUoKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19yZXN0b3JlVG9Db3VudChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqaW50IHNhdmVDb3VudCkgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqaW50IHNhdmVDb3VudCkgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgcmVuZGVyZXItPnJlc3RvcmVUb0NvdW50KHNhdmVDb3VudCk7CiB9CiAKQEAgLTI2NywyNiArMjkyLDMyIEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBqaW50IGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfc2F2ZUxheWVyKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIGpmbG9hdCBsZWZ0LCBqZmxvYXQgdG9wLCBqZmxvYXQgcmlnaHQsIGpmbG9hdCBib3R0b20sCi0gICAgICAgIFNrUGFpbnQqIHBhaW50LCBqaW50IHNhdmVGbGFncykgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqZmxvYXQgbGVmdCwgamZsb2F0IHRvcCwgamZsb2F0IHJpZ2h0LCBqZmxvYXQgYm90dG9tLAorICAgICAgICBqaW50IHBhaW50UHRyLCBqaW50IHNhdmVGbGFncykgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5zYXZlTGF5ZXIobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBwYWludCwgc2F2ZUZsYWdzKTsKIH0KIAogc3RhdGljIGppbnQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19zYXZlTGF5ZXJDbGlwKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIFNrUGFpbnQqIHBhaW50LCBqaW50IHNhdmVGbGFncykgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqaW50IHBhaW50UHRyLCBqaW50IHNhdmVGbGFncykgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CiAgICAgY29uc3QgYW5kcm9pZDo6dWlyZW5kZXJlcjo6UmVjdCYgYm91bmRzKHJlbmRlcmVyLT5nZXRDbGlwQm91bmRzKCkpOwogICAgIHJldHVybiByZW5kZXJlci0+c2F2ZUxheWVyKGJvdW5kcy5sZWZ0LCBib3VuZHMudG9wLCBib3VuZHMucmlnaHQsIGJvdW5kcy5ib3R0b20sCiAgICAgICAgICAgICBwYWludCwgc2F2ZUZsYWdzKTsKIH0KIAogc3RhdGljIGppbnQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19zYXZlTGF5ZXJBbHBoYShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqZmxvYXQgbGVmdCwgamZsb2F0IHRvcCwgamZsb2F0IHJpZ2h0LCBqZmxvYXQgYm90dG9tLAorICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqZmxvYXQgbGVmdCwgamZsb2F0IHRvcCwgamZsb2F0IHJpZ2h0LCBqZmxvYXQgYm90dG9tLAogICAgICAgICBqaW50IGFscGhhLCBqaW50IHNhdmVGbGFncykgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5zYXZlTGF5ZXJBbHBoYShsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGFscGhhLCBzYXZlRmxhZ3MpOwogfQogCiBzdGF0aWMgamludCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX3NhdmVMYXllckFscGhhQ2xpcChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqaW50IGFscGhhLCBqaW50IHNhdmVGbGFncykgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqaW50IGFscGhhLCBqaW50IHNhdmVGbGFncykgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgY29uc3QgYW5kcm9pZDo6dWlyZW5kZXJlcjo6UmVjdCYgYm91bmRzKHJlbmRlcmVyLT5nZXRDbGlwQm91bmRzKCkpOwogICAgIHJldHVybiByZW5kZXJlci0+c2F2ZUxheWVyQWxwaGEoYm91bmRzLmxlZnQsIGJvdW5kcy50b3AsIGJvdW5kcy5yaWdodCwgYm91bmRzLmJvdHRvbSwKICAgICAgICAgICAgIGFscGhhLCBzYXZlRmxhZ3MpOwpAQCAtMjk3LDM0ICszMjgsNDIgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIGJvb2wgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19xdWlja1JlamVjdChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqZmxvYXQgbGVmdCwgamZsb2F0IHRvcCwgamZsb2F0IHJpZ2h0LCBqZmxvYXQgYm90dG9tKSB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5xdWlja1JlamVjdE5vU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqZmxvYXQgbGVmdCwgamZsb2F0IHRvcCwgamZsb2F0IHJpZ2h0LCBqZmxvYXQgYm90dG9tKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKKyAgICByZXR1cm4gcmVuZGVyZXItPnF1aWNrUmVqZWN0Q29uc2VydmF0aXZlKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiB9CiAKIHN0YXRpYyBib29sIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfY2xpcFJlY3RGKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIGpmbG9hdCBsZWZ0LCBqZmxvYXQgdG9wLCBqZmxvYXQgcmlnaHQsIGpmbG9hdCBib3R0b20sCisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGpmbG9hdCBsZWZ0LCBqZmxvYXQgdG9wLCBqZmxvYXQgcmlnaHQsIGpmbG9hdCBib3R0b20sCiAgICAgICAgIFNrUmVnaW9uOjpPcCBvcCkgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5jbGlwUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIG9wKTsKIH0KIAogc3RhdGljIGJvb2wgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19jbGlwUmVjdChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqaW50IGxlZnQsIGppbnQgdG9wLCBqaW50IHJpZ2h0LCBqaW50IGJvdHRvbSwKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCBsZWZ0LCBqaW50IHRvcCwgamludCByaWdodCwgamludCBib3R0b20sCiAgICAgICAgIFNrUmVnaW9uOjpPcCBvcCkgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5jbGlwUmVjdChmbG9hdChsZWZ0KSwgZmxvYXQodG9wKSwgZmxvYXQocmlnaHQpLCBmbG9hdChib3R0b20pLCBvcCk7CiB9CiAKIHN0YXRpYyBib29sIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfY2xpcFBhdGgoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgU2tQYXRoKiBwYXRoLCBTa1JlZ2lvbjo6T3Agb3ApIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCBwYXRoUHRyLCBTa1JlZ2lvbjo6T3Agb3ApIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOworICAgIFNrUGF0aCogcGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYXRoKj4ocGF0aFB0cik7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5jbGlwUGF0aChwYXRoLCBvcCk7CiB9CiAKIHN0YXRpYyBib29sIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfY2xpcFJlZ2lvbihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBTa1JlZ2lvbiogcmVnaW9uLCBTa1JlZ2lvbjo6T3Agb3ApIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCByZWdpb25QdHIsIFNrUmVnaW9uOjpPcCBvcCkgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CisgICAgU2tSZWdpb24qIHJlZ2lvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tSZWdpb24qPihyZWdpb25QdHIpOwogICAgIHJldHVybiByZW5kZXJlci0+Y2xpcFJlZ2lvbihyZWdpb24sIG9wKTsKIH0KIAogc3RhdGljIGJvb2wgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19nZXRDbGlwQm91bmRzKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIGpvYmplY3QgcmVjdCkgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqb2JqZWN0IHJlY3QpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIGNvbnN0IGFuZHJvaWQ6OnVpcmVuZGVyZXI6OlJlY3QmIGJvdW5kcyhyZW5kZXJlci0+Z2V0Q2xpcEJvdW5kcygpKTsKIAogICAgIGVudi0+Q2FsbFZvaWRNZXRob2QocmVjdCwgZ1JlY3RDbGFzc0luZm8uc2V0LApAQCAtMzM4LDM3ICszNzcsNDcgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc190cmFuc2xhdGUoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamZsb2F0IGR4LCBqZmxvYXQgZHkpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamZsb2F0IGR4LCBqZmxvYXQgZHkpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJlbmRlcmVyLT50cmFuc2xhdGUoZHgsIGR5KTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19yb3RhdGUoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamZsb2F0IGRlZ3JlZXMpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamZsb2F0IGRlZ3JlZXMpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJlbmRlcmVyLT5yb3RhdGUoZGVncmVlcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfc2NhbGUoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamZsb2F0IHN4LCBqZmxvYXQgc3kpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamZsb2F0IHN4LCBqZmxvYXQgc3kpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJlbmRlcmVyLT5zY2FsZShzeCwgc3kpOwogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX3NrZXcoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamZsb2F0IHN4LCBqZmxvYXQgc3kpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamZsb2F0IHN4LCBqZmxvYXQgc3kpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJlbmRlcmVyLT5za2V3KHN4LCBzeSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfc2V0TWF0cml4KEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIFNrTWF0cml4KiBtYXRyaXgpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCBtYXRyaXhQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOworICAgIFNrTWF0cml4KiBtYXRyaXggPSByZWludGVycHJldF9jYXN0PFNrTWF0cml4Kj4obWF0cml4UHRyKTsKICAgICByZW5kZXJlci0+c2V0TWF0cml4KG1hdHJpeCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZ2V0TWF0cml4KEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIFNrTWF0cml4KiBtYXRyaXgpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCBtYXRyaXhQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOworICAgIFNrTWF0cml4KiBtYXRyaXggPSByZWludGVycHJldF9jYXN0PFNrTWF0cml4Kj4obWF0cml4UHRyKTsKICAgICByZW5kZXJlci0+Z2V0TWF0cml4KG1hdHJpeCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfY29uY2F0TWF0cml4KEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIFNrTWF0cml4KiBtYXRyaXgpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCBtYXRyaXhQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOworICAgIFNrTWF0cml4KiBtYXRyaXggPSByZWludGVycHJldF9jYXN0PFNrTWF0cml4Kj4obWF0cml4UHRyKTsKICAgICByZW5kZXJlci0+Y29uY2F0TWF0cml4KG1hdHJpeCk7CiB9CiAKQEAgLTM3NywzNyArNDI2LDQ3IEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd0JpdG1hcChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBTa0JpdG1hcCogYml0bWFwLCBqYnl0ZUFycmF5IGJ1ZmZlciwKLSAgICAgICAgamZsb2F0IGxlZnQsIGpmbG9hdCB0b3AsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGppbnQgYml0bWFwUHRyLCBqYnl0ZUFycmF5IGJ1ZmZlciwKKyAgICAgICAgamZsb2F0IGxlZnQsIGpmbG9hdCB0b3AsIGppbnQgcGFpbnRQdHIpIHsKKyAgICBTa0JpdG1hcCogYml0bWFwID0gcmVpbnRlcnByZXRfY2FzdDxTa0JpdG1hcCo+KGJpdG1hcFB0cik7CiAgICAgLy8gVGhpcyBvYmplY3QgYWxsb3dzIHRoZSByZW5kZXJlciB0byBhbGxvY2F0ZSBhIGdsb2JhbCBKTkkgcmVmIHRvIHRoZSBidWZmZXIgb2JqZWN0LgogICAgIEphdmFIZWFwQml0bWFwUmVmIGJpdG1hcFJlZihlbnYsIGJpdG1hcCwgYnVmZmVyKTsKIAorICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CiAgICAgcmVuZGVyZXItPmRyYXdCaXRtYXAoYml0bWFwLCBsZWZ0LCB0b3AsIHBhaW50KTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kcmF3Qml0bWFwUmVjdChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBTa0JpdG1hcCogYml0bWFwLCBqYnl0ZUFycmF5IGJ1ZmZlciwKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCBiaXRtYXBQdHIsIGpieXRlQXJyYXkgYnVmZmVyLAogICAgICAgICBmbG9hdCBzcmNMZWZ0LCBmbG9hdCBzcmNUb3AsIGZsb2F0IHNyY1JpZ2h0LCBmbG9hdCBzcmNCb3R0b20sCi0gICAgICAgIGZsb2F0IGRzdExlZnQsIGZsb2F0IGRzdFRvcCwgZmxvYXQgZHN0UmlnaHQsIGZsb2F0IGRzdEJvdHRvbSwgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgZmxvYXQgZHN0TGVmdCwgZmxvYXQgZHN0VG9wLCBmbG9hdCBkc3RSaWdodCwgZmxvYXQgZHN0Qm90dG9tLCBqaW50IHBhaW50UHRyKSB7CisgICAgU2tCaXRtYXAqIGJpdG1hcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tCaXRtYXAqPihiaXRtYXBQdHIpOwogICAgIC8vIFRoaXMgb2JqZWN0IGFsbG93cyB0aGUgcmVuZGVyZXIgdG8gYWxsb2NhdGUgYSBnbG9iYWwgSk5JIHJlZiB0byB0aGUgYnVmZmVyIG9iamVjdC4KICAgICBKYXZhSGVhcEJpdG1hcFJlZiBiaXRtYXBSZWYoZW52LCBiaXRtYXAsIGJ1ZmZlcik7CiAKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOworICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4ocGFpbnRQdHIpOwogICAgIHJlbmRlcmVyLT5kcmF3Qml0bWFwKGJpdG1hcCwgc3JjTGVmdCwgc3JjVG9wLCBzcmNSaWdodCwgc3JjQm90dG9tLAogICAgICAgICAgICAgZHN0TGVmdCwgZHN0VG9wLCBkc3RSaWdodCwgZHN0Qm90dG9tLCBwYWludCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd0JpdG1hcE1hdHJpeChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBTa0JpdG1hcCogYml0bWFwLCBqYnl0ZUFycmF5IGJ1ZmZlciwKLSAgICAgICAgU2tNYXRyaXgqIG1hdHJpeCwgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCBiaXRtYXBQdHIsIGpieXRlQXJyYXkgYnVmZmVyLAorICAgICAgICBqaW50IG1hdHJpeFB0ciwgamludCBwYWludFB0cikgeworICAgIFNrQml0bWFwKiBiaXRtYXAgPSByZWludGVycHJldF9jYXN0PFNrQml0bWFwKj4oYml0bWFwUHRyKTsKICAgICAvLyBUaGlzIG9iamVjdCBhbGxvd3MgdGhlIHJlbmRlcmVyIHRvIGFsbG9jYXRlIGEgZ2xvYmFsIEpOSSByZWYgdG8gdGhlIGJ1ZmZlciBvYmplY3QuCiAgICAgSmF2YUhlYXBCaXRtYXBSZWYgYml0bWFwUmVmKGVudiwgYml0bWFwLCBidWZmZXIpOwogCisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKKyAgICBTa01hdHJpeCogbWF0cml4ID0gcmVpbnRlcnByZXRfY2FzdDxTa01hdHJpeCo+KG1hdHJpeFB0cik7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CiAgICAgcmVuZGVyZXItPmRyYXdCaXRtYXAoYml0bWFwLCBtYXRyaXgsIHBhaW50KTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kcmF3Qml0bWFwRGF0YShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqaW50QXJyYXkgY29sb3JzLCBqaW50IG9mZnNldCwgamludCBzdHJpZGUsCi0gICAgICAgIGpmbG9hdCBsZWZ0LCBqZmxvYXQgdG9wLCBqaW50IHdpZHRoLCBqaW50IGhlaWdodCwgamJvb2xlYW4gaGFzQWxwaGEsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGppbnRBcnJheSBjb2xvcnMsIGppbnQgb2Zmc2V0LCBqaW50IHN0cmlkZSwKKyAgICAgICAgamZsb2F0IGxlZnQsIGpmbG9hdCB0b3AsIGppbnQgd2lkdGgsIGppbnQgaGVpZ2h0LCBqYm9vbGVhbiBoYXNBbHBoYSwgamludCBwYWludFB0cikgewogICAgIFNrQml0bWFwKiBiaXRtYXAgPSBuZXcgU2tCaXRtYXA7CiAgICAgYml0bWFwLT5zZXRDb25maWcoaGFzQWxwaGEgPyBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcgOiBTa0JpdG1hcDo6a1JHQl81NjVfQ29uZmlnLAogICAgICAgICAgICAgd2lkdGgsIGhlaWdodCk7CkBAIC00MjIsMjQgKzQ4MSwyOSBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKKyAgICBTa1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KHBhaW50UHRyKTsKICAgICByZW5kZXJlci0+ZHJhd0JpdG1hcERhdGEoYml0bWFwLCBsZWZ0LCB0b3AsIHBhaW50KTsKIAogICAgIC8vIElmIHRoZSByZW5kZXJlciBpcyBhIGRlZmVycmVkIHJlbmRlcmVyIGl0IHdpbGwgb3duIHRoZSBiaXRtYXAKLSAgICBpZiAoIXJlbmRlcmVyLT5pc0RlZmVycmVkKCkpIHsKKyAgICBpZiAoIXJlbmRlcmVyLT5pc1JlY29yZGluZygpKSB7CiAgICAgICAgIGRlbGV0ZSBiaXRtYXA7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2RyYXdCaXRtYXBNZXNoKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIFNrQml0bWFwKiBiaXRtYXAsIGpieXRlQXJyYXkgYnVmZmVyLAorICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqaW50IGJpdG1hcFB0ciwgamJ5dGVBcnJheSBidWZmZXIsCiAgICAgICAgIGppbnQgbWVzaFdpZHRoLCBqaW50IG1lc2hIZWlnaHQsIGpmbG9hdEFycmF5IHZlcnRpY2VzLCBqaW50IG9mZnNldCwgamludEFycmF5IGNvbG9ycywKLSAgICAgICAgamludCBjb2xvck9mZnNldCwgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgamludCBjb2xvck9mZnNldCwgamludCBwYWludFB0cikgeworICAgIFNrQml0bWFwKiBiaXRtYXAgPSByZWludGVycHJldF9jYXN0PFNrQml0bWFwKj4oYml0bWFwUHRyKTsKICAgICAvLyBUaGlzIG9iamVjdCBhbGxvd3MgdGhlIHJlbmRlcmVyIHRvIGFsbG9jYXRlIGEgZ2xvYmFsIEpOSSByZWYgdG8gdGhlIGJ1ZmZlciBvYmplY3QuCiAgICAgSmF2YUhlYXBCaXRtYXBSZWYgYml0bWFwUmVmKGVudiwgYml0bWFwLCBidWZmZXIpOwogCiAgICAgamZsb2F0KiB2ZXJ0aWNlc0FycmF5ID0gdmVydGljZXMgPyBlbnYtPkdldEZsb2F0QXJyYXlFbGVtZW50cyh2ZXJ0aWNlcywgTlVMTCkgKyBvZmZzZXQgOiBOVUxMOwogICAgIGppbnQqIGNvbG9yc0FycmF5ID0gY29sb3JzID8gZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGNvbG9ycywgTlVMTCkgKyBjb2xvck9mZnNldCA6IE5VTEw7CiAKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOworICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4ocGFpbnRQdHIpOwogICAgIHJlbmRlcmVyLT5kcmF3Qml0bWFwTWVzaChiaXRtYXAsIG1lc2hXaWR0aCwgbWVzaEhlaWdodCwgdmVydGljZXNBcnJheSwgY29sb3JzQXJyYXksIHBhaW50KTsKIAogICAgIGlmICh2ZXJ0aWNlcykgZW52LT5SZWxlYXNlRmxvYXRBcnJheUVsZW1lbnRzKHZlcnRpY2VzLCB2ZXJ0aWNlc0FycmF5LCAwKTsKQEAgLTQ0Nyw1MCArNTExLDY4IEBACiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd1BhdGNoKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIFNrQml0bWFwKiBiaXRtYXAsIGpieXRlQXJyYXkgYnVmZmVyLCBSZXNfcG5nXzlwYXRjaCogcGF0Y2gsCi0gICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCBiaXRtYXBQdHIsIGpieXRlQXJyYXkgYnVmZmVyLCBqaW50IHBhdGNoUHRyLAorICAgICAgICBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGppbnQgcGFpbnRQdHIpIHsKKyAgICBTa0JpdG1hcCogYml0bWFwID0gcmVpbnRlcnByZXRfY2FzdDxTa0JpdG1hcCo+KGJpdG1hcFB0cik7CiAgICAgLy8gVGhpcyBvYmplY3QgYWxsb3dzIHRoZSByZW5kZXJlciB0byBhbGxvY2F0ZSBhIGdsb2JhbCBKTkkgcmVmIHRvIHRoZSBidWZmZXIgb2JqZWN0LgogICAgIEphdmFIZWFwQml0bWFwUmVmIGJpdG1hcFJlZihlbnYsIGJpdG1hcCwgYnVmZmVyKTsKIAorICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CisgICAgUmVzX3BuZ185cGF0Y2gqIHBhdGNoID0gcmVpbnRlcnByZXRfY2FzdDxSZXNfcG5nXzlwYXRjaCo+KHBhdGNoUHRyKTsKKyAgICBTa1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KHBhaW50UHRyKTsKICAgICByZW5kZXJlci0+ZHJhd1BhdGNoKGJpdG1hcCwgcGF0Y2gsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcGFpbnQpOwogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2RyYXdDb2xvcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqaW50IGNvbG9yLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCBjb2xvciwgU2tYZmVybW9kZTo6TW9kZSBtb2RlKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKICAgICByZW5kZXJlci0+ZHJhd0NvbG9yKGNvbG9yLCBtb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kcmF3UmVjdChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqZmxvYXQgbGVmdCwgamZsb2F0IHRvcCwgamZsb2F0IHJpZ2h0LCBqZmxvYXQgYm90dG9tLAotICAgICAgICBTa1BhaW50KiBwYWludCkgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqZmxvYXQgbGVmdCwgamZsb2F0IHRvcCwgamZsb2F0IHJpZ2h0LCBqZmxvYXQgYm90dG9tLAorICAgICAgICBqaW50IHBhaW50UHRyKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKKyAgICBTa1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KHBhaW50UHRyKTsKICAgICByZW5kZXJlci0+ZHJhd1JlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBwYWludCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd1JvdW5kUmVjdChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqZmxvYXQgbGVmdCwgamZsb2F0IHRvcCwgamZsb2F0IHJpZ2h0LCBqZmxvYXQgYm90dG9tLAotICAgICAgICBqZmxvYXQgcngsIGpmbG9hdCByeSwgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamZsb2F0IGxlZnQsIGpmbG9hdCB0b3AsIGpmbG9hdCByaWdodCwgamZsb2F0IGJvdHRvbSwKKyAgICAgICAgamZsb2F0IHJ4LCBqZmxvYXQgcnksIGppbnQgcGFpbnRQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOworICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4ocGFpbnRQdHIpOwogICAgIHJlbmRlcmVyLT5kcmF3Um91bmRSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcngsIHJ5LCBwYWludCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd0NpcmNsZShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqZmxvYXQgeCwgamZsb2F0IHksIGpmbG9hdCByYWRpdXMsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGpmbG9hdCB4LCBqZmxvYXQgeSwgamZsb2F0IHJhZGl1cywgamludCBwYWludFB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CiAgICAgcmVuZGVyZXItPmRyYXdDaXJjbGUoeCwgeSwgcmFkaXVzLCBwYWludCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd092YWwoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamZsb2F0IGxlZnQsIGpmbG9hdCB0b3AsIGpmbG9hdCByaWdodCwgamZsb2F0IGJvdHRvbSwKLSAgICAgICAgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamZsb2F0IGxlZnQsIGpmbG9hdCB0b3AsIGpmbG9hdCByaWdodCwgamZsb2F0IGJvdHRvbSwKKyAgICAgICAgamludCBwYWludFB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CiAgICAgcmVuZGVyZXItPmRyYXdPdmFsKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcGFpbnQpOwogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2RyYXdBcmMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamZsb2F0IGxlZnQsIGpmbG9hdCB0b3AsIGpmbG9hdCByaWdodCwgamZsb2F0IGJvdHRvbSwKLSAgICAgICAgamZsb2F0IHN0YXJ0QW5nbGUsIGpmbG9hdCBzd2VlcEFuZ2xlLCBqYm9vbGVhbiB1c2VDZW50ZXIsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGpmbG9hdCBsZWZ0LCBqZmxvYXQgdG9wLCBqZmxvYXQgcmlnaHQsIGpmbG9hdCBib3R0b20sCisgICAgICAgIGpmbG9hdCBzdGFydEFuZ2xlLCBqZmxvYXQgc3dlZXBBbmdsZSwgamJvb2xlYW4gdXNlQ2VudGVyLCBqaW50IHBhaW50UHRyKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKKyAgICBTa1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KHBhaW50UHRyKTsKICAgICByZW5kZXJlci0+ZHJhd0FyYyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHN0YXJ0QW5nbGUsIHN3ZWVwQW5nbGUsIHVzZUNlbnRlciwgcGFpbnQpOwogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2RyYXdSZWdpb25Bc1JlY3RzKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIFNrUmVnaW9uKiByZWdpb24sIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGppbnQgcmVnaW9uUHRyLCBqaW50IHBhaW50UHRyKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKKyAgICBTa1JlZ2lvbiogcmVnaW9uID0gcmVpbnRlcnByZXRfY2FzdDxTa1JlZ2lvbio+KHJlZ2lvblB0cik7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CiAgICAgaWYgKHBhaW50LT5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxlIHx8CiAgICAgICAgICAgICAocGFpbnQtPmlzQW50aUFsaWFzKCkgJiYgIXJlbmRlcmVyLT5pc0N1cnJlbnRUcmFuc2Zvcm1TaW1wbGUoKSkpIHsKICAgICAgICAgU2tSZWdpb246Okl0ZXJhdG9yIGl0KCpyZWdpb24pOwpAQCAtNTE3LDI3ICs1OTksMzYgQEAKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kcmF3UmVjdHMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamZsb2F0QXJyYXkgcmVjdHMsIGppbnQgY291bnQsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGpmbG9hdEFycmF5IHJlY3RzLCBqaW50IGNvdW50LCBqaW50IHBhaW50UHRyKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKICAgICBqZmxvYXQqIHN0b3JhZ2UgPSBlbnYtPkdldEZsb2F0QXJyYXlFbGVtZW50cyhyZWN0cywgTlVMTCk7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CiAgICAgcmVuZGVyZXItPmRyYXdSZWN0cyhzdG9yYWdlLCBjb3VudCwgcGFpbnQpOwogICAgIGVudi0+UmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cyhyZWN0cywgc3RvcmFnZSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd1BvaW50cyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqZmxvYXRBcnJheSBwb2ludHMsIGppbnQgb2Zmc2V0LCBqaW50IGNvdW50LCBTa1BhaW50KiBwYWludCkgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqZmxvYXRBcnJheSBwb2ludHMsIGppbnQgb2Zmc2V0LCBqaW50IGNvdW50LCBqaW50IHBhaW50UHRyKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKICAgICBqZmxvYXQqIHN0b3JhZ2UgPSBlbnYtPkdldEZsb2F0QXJyYXlFbGVtZW50cyhwb2ludHMsIE5VTEwpOworICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4ocGFpbnRQdHIpOwogICAgIHJlbmRlcmVyLT5kcmF3UG9pbnRzKHN0b3JhZ2UgKyBvZmZzZXQsIGNvdW50LCBwYWludCk7CiAgICAgZW52LT5SZWxlYXNlRmxvYXRBcnJheUVsZW1lbnRzKHBvaW50cywgc3RvcmFnZSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd1BhdGgoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgU2tQYXRoKiBwYXRoLCBTa1BhaW50KiBwYWludCkgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqaW50IHBhdGhQdHIsIGppbnQgcGFpbnRQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOworICAgIFNrUGF0aCogcGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYXRoKj4ocGF0aFB0cik7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CiAgICAgcmVuZGVyZXItPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kcmF3TGluZXMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamZsb2F0QXJyYXkgcG9pbnRzLCBqaW50IG9mZnNldCwgamludCBjb3VudCwgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamZsb2F0QXJyYXkgcG9pbnRzLCBqaW50IG9mZnNldCwgamludCBjb3VudCwgamludCBwYWludFB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgamZsb2F0KiBzdG9yYWdlID0gZW52LT5HZXRGbG9hdEFycmF5RWxlbWVudHMocG9pbnRzLCBOVUxMKTsKKyAgICBTa1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KHBhaW50UHRyKTsKICAgICByZW5kZXJlci0+ZHJhd0xpbmVzKHN0b3JhZ2UgKyBvZmZzZXQsIGNvdW50LCBwYWludCk7CiAgICAgZW52LT5SZWxlYXNlRmxvYXRBcnJheUVsZW1lbnRzKHBvaW50cywgc3RvcmFnZSwgMCk7CiB9CkBAIC01NDcsMjQgKzYzOCwzMCBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX3Jlc2V0TW9kaWZpZXJzKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIGppbnQgbW9kaWZpZXJzKSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGppbnQgbW9kaWZpZXJzKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKICAgICBpZiAobW9kaWZpZXJzICYgTU9ESUZJRVJfU0hBRE9XKSByZW5kZXJlci0+cmVzZXRTaGFkb3coKTsKICAgICBpZiAobW9kaWZpZXJzICYgTU9ESUZJRVJfU0hBREVSKSByZW5kZXJlci0+cmVzZXRTaGFkZXIoKTsKICAgICBpZiAobW9kaWZpZXJzICYgTU9ESUZJRVJfQ09MT1JfRklMVEVSKSByZW5kZXJlci0+cmVzZXRDb2xvckZpbHRlcigpOwogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX3NldHVwU2hhZGVyKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIFNraWFTaGFkZXIqIHNoYWRlcikgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqaW50IHNoYWRlclB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CisgICAgU2tpYVNoYWRlciogc2hhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxTa2lhU2hhZGVyKj4oc2hhZGVyUHRyKTsKICAgICByZW5kZXJlci0+c2V0dXBTaGFkZXIoc2hhZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19zZXR1cENvbG9yRmlsdGVyKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIFNraWFDb2xvckZpbHRlciogZmlsdGVyKSB7Ci0gICAgcmVuZGVyZXItPnNldHVwQ29sb3JGaWx0ZXIoZmlsdGVyKTsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCBjb2xvckZpbHRlclB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CisgICAgU2tpYUNvbG9yRmlsdGVyKiBjb2xvckZpbHRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tpYUNvbG9yRmlsdGVyKj4oY29sb3JGaWx0ZXJQdHIpOworICAgIHJlbmRlcmVyLT5zZXR1cENvbG9yRmlsdGVyKGNvbG9yRmlsdGVyKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19zZXR1cFNoYWRvdyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqZmxvYXQgcmFkaXVzLCBqZmxvYXQgZHgsIGpmbG9hdCBkeSwgamludCBjb2xvcikgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqZmxvYXQgcmFkaXVzLCBqZmxvYXQgZHgsIGpmbG9hdCBkeSwgamludCBjb2xvcikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgcmVuZGVyZXItPnNldHVwU2hhZG93KHJhZGl1cywgZHgsIGR5LCBjb2xvcik7CiB9CiAKQEAgLTU3MywxMiArNjcwLDE0IEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfc2V0dXBQYWludEZpbHRlcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqaW50IGNsZWFyQml0cywgamludCBzZXRCaXRzKSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGppbnQgY2xlYXJCaXRzLCBqaW50IHNldEJpdHMpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJlbmRlcmVyLT5zZXR1cFBhaW50RmlsdGVyKGNsZWFyQml0cywgc2V0Qml0cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfcmVzZXRQYWludEZpbHRlcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyKSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJlbmRlcmVyLT5yZXNldFBhaW50RmlsdGVyKCk7CiB9CiAKQEAgLTY1OCw1NiArNzU3LDc2IEBACiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd1RleHRBcnJheShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqY2hhckFycmF5IHRleHQsIGppbnQgaW5kZXgsIGppbnQgY291bnQsCi0gICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgamludCBmbGFncywgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamNoYXJBcnJheSB0ZXh0LCBqaW50IGluZGV4LCBqaW50IGNvdW50LAorICAgICAgICBqZmxvYXQgeCwgamZsb2F0IHksIGppbnQgZmxhZ3MsIGppbnQgcGFpbnRQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIGpjaGFyKiB0ZXh0QXJyYXkgPSBlbnYtPkdldENoYXJBcnJheUVsZW1lbnRzKHRleHQsIE5VTEwpOworICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4ocGFpbnRQdHIpOworCiAgICAgcmVuZGVyVGV4dChyZW5kZXJlciwgdGV4dEFycmF5ICsgaW5kZXgsIGNvdW50LCB4LCB5LCBmbGFncywgcGFpbnQpOwogICAgIGVudi0+UmVsZWFzZUNoYXJBcnJheUVsZW1lbnRzKHRleHQsIHRleHRBcnJheSwgSk5JX0FCT1JUKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kcmF3VGV4dChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqc3RyaW5nIHRleHQsIGppbnQgc3RhcnQsIGppbnQgZW5kLAotICAgICAgICBqZmxvYXQgeCwgamZsb2F0IHksIGppbnQgZmxhZ3MsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGpzdHJpbmcgdGV4dCwgamludCBzdGFydCwgamludCBlbmQsCisgICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgamludCBmbGFncywgamludCBwYWludFB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgY29uc3QgamNoYXIqIHRleHRBcnJheSA9IGVudi0+R2V0U3RyaW5nQ2hhcnModGV4dCwgTlVMTCk7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CisKICAgICByZW5kZXJUZXh0KHJlbmRlcmVyLCB0ZXh0QXJyYXkgKyBzdGFydCwgZW5kIC0gc3RhcnQsIHgsIHksIGZsYWdzLCBwYWludCk7CiAgICAgZW52LT5SZWxlYXNlU3RyaW5nQ2hhcnModGV4dCwgdGV4dEFycmF5KTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kcmF3VGV4dEFycmF5T25QYXRoKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIGpjaGFyQXJyYXkgdGV4dCwgamludCBpbmRleCwgamludCBjb3VudCwKLSAgICAgICAgU2tQYXRoKiBwYXRoLCBqZmxvYXQgaE9mZnNldCwgamZsb2F0IHZPZmZzZXQsIGppbnQgZmxhZ3MsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGpjaGFyQXJyYXkgdGV4dCwgamludCBpbmRleCwgamludCBjb3VudCwKKyAgICAgICAgamludCBwYXRoUHRyLCBqZmxvYXQgaE9mZnNldCwgamZsb2F0IHZPZmZzZXQsIGppbnQgZmxhZ3MsIGppbnQgcGFpbnRQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIGpjaGFyKiB0ZXh0QXJyYXkgPSBlbnYtPkdldENoYXJBcnJheUVsZW1lbnRzKHRleHQsIE5VTEwpOworICAgIFNrUGF0aCogcGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYXRoKj4ocGF0aFB0cik7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CisKICAgICByZW5kZXJUZXh0T25QYXRoKHJlbmRlcmVyLCB0ZXh0QXJyYXkgKyBpbmRleCwgY291bnQsIHBhdGgsCiAgICAgICAgICAgICBoT2Zmc2V0LCB2T2Zmc2V0LCBmbGFncywgcGFpbnQpOwogICAgIGVudi0+UmVsZWFzZUNoYXJBcnJheUVsZW1lbnRzKHRleHQsIHRleHRBcnJheSwgSk5JX0FCT1JUKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kcmF3VGV4dE9uUGF0aChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqc3RyaW5nIHRleHQsIGppbnQgc3RhcnQsIGppbnQgZW5kLAotICAgICAgICBTa1BhdGgqIHBhdGgsIGpmbG9hdCBoT2Zmc2V0LCBqZmxvYXQgdk9mZnNldCwgamludCBmbGFncywgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwganN0cmluZyB0ZXh0LCBqaW50IHN0YXJ0LCBqaW50IGVuZCwKKyAgICAgICAgamludCBwYXRoUHRyLCBqZmxvYXQgaE9mZnNldCwgamZsb2F0IHZPZmZzZXQsIGppbnQgZmxhZ3MsIGppbnQgcGFpbnRQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIGNvbnN0IGpjaGFyKiB0ZXh0QXJyYXkgPSBlbnYtPkdldFN0cmluZ0NoYXJzKHRleHQsIE5VTEwpOworICAgIFNrUGF0aCogcGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYXRoKj4ocGF0aFB0cik7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CisKICAgICByZW5kZXJUZXh0T25QYXRoKHJlbmRlcmVyLCB0ZXh0QXJyYXkgKyBzdGFydCwgZW5kIC0gc3RhcnQsIHBhdGgsCiAgICAgICAgICAgICBoT2Zmc2V0LCB2T2Zmc2V0LCBmbGFncywgcGFpbnQpOwogICAgIGVudi0+UmVsZWFzZVN0cmluZ0NoYXJzKHRleHQsIHRleHRBcnJheSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd1RleHRSdW5BcnJheShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqY2hhckFycmF5IHRleHQsIGppbnQgaW5kZXgsIGppbnQgY291bnQsCisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGpjaGFyQXJyYXkgdGV4dCwgamludCBpbmRleCwgamludCBjb3VudCwKICAgICAgICAgamludCBjb250ZXh0SW5kZXgsIGppbnQgY29udGV4dENvdW50LCBqZmxvYXQgeCwgamZsb2F0IHksIGppbnQgZGlyRmxhZ3MsCi0gICAgICAgIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGppbnQgcGFpbnRQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIGpjaGFyKiB0ZXh0QXJyYXkgPSBlbnYtPkdldENoYXJBcnJheUVsZW1lbnRzKHRleHQsIE5VTEwpOworICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4ocGFpbnRQdHIpOworCiAgICAgcmVuZGVyVGV4dFJ1bihyZW5kZXJlciwgdGV4dEFycmF5ICsgY29udGV4dEluZGV4LCBpbmRleCAtIGNvbnRleHRJbmRleCwKICAgICAgICAgICAgIGNvdW50LCBjb250ZXh0Q291bnQsIHgsIHksIGRpckZsYWdzLCBwYWludCk7CiAgICAgZW52LT5SZWxlYXNlQ2hhckFycmF5RWxlbWVudHModGV4dCwgdGV4dEFycmF5LCBKTklfQUJPUlQpOwogIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kcmF3VGV4dFJ1bihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqc3RyaW5nIHRleHQsIGppbnQgc3RhcnQsIGppbnQgZW5kLAorICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqc3RyaW5nIHRleHQsIGppbnQgc3RhcnQsIGppbnQgZW5kLAogICAgICAgICBqaW50IGNvbnRleHRTdGFydCwgaW50IGNvbnRleHRFbmQsIGpmbG9hdCB4LCBqZmxvYXQgeSwgamludCBkaXJGbGFncywKLSAgICAgICAgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgamludCBwYWludFB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgY29uc3QgamNoYXIqIHRleHRBcnJheSA9IGVudi0+R2V0U3RyaW5nQ2hhcnModGV4dCwgTlVMTCk7CiAgICAgamludCBjb3VudCA9IGVuZCAtIHN0YXJ0OwogICAgIGppbnQgY29udGV4dENvdW50ID0gY29udGV4dEVuZCAtIGNvbnRleHRTdGFydDsKKyAgICBTa1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KHBhaW50UHRyKTsKKwogICAgIHJlbmRlclRleHRSdW4ocmVuZGVyZXIsIHRleHRBcnJheSArIGNvbnRleHRTdGFydCwgc3RhcnQgLSBjb250ZXh0U3RhcnQsCiAgICAgICAgICAgICBjb3VudCwgY29udGV4dENvdW50LCB4LCB5LCBkaXJGbGFncywgcGFpbnQpOwogICAgIGVudi0+UmVsZWFzZVN0cmluZ0NoYXJzKHRleHQsIHRleHRBcnJheSk7CkBAIC03MjksMTAgKzg0OCwxMiBAQAogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2RyYXdQb3NUZXh0QXJyYXkoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgamNoYXJBcnJheSB0ZXh0LCBqaW50IGluZGV4LCBqaW50IGNvdW50LAotICAgICAgICBqZmxvYXRBcnJheSBwb3MsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIsIGpjaGFyQXJyYXkgdGV4dCwgamludCBpbmRleCwgamludCBjb3VudCwKKyAgICAgICAgamZsb2F0QXJyYXkgcG9zLCBqaW50IHBhaW50UHRyKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKICAgICBqY2hhciogdGV4dEFycmF5ID0gZW52LT5HZXRDaGFyQXJyYXlFbGVtZW50cyh0ZXh0LCBOVUxMKTsKICAgICBqZmxvYXQqIHBvc2l0aW9ucyA9IGVudi0+R2V0RmxvYXRBcnJheUVsZW1lbnRzKHBvcywgTlVMTCk7CisgICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihwYWludFB0cik7CiAKICAgICByZW5kZXJQb3NUZXh0KHJlbmRlcmVyLCB0ZXh0QXJyYXkgKyBpbmRleCwgY291bnQsIHBvc2l0aW9ucywga0JpZGlfTFRSLCBwYWludCk7CiAKQEAgLTc0MSwxMCArODYyLDEyIEBACiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd1Bvc1RleHQoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwganN0cmluZyB0ZXh0LCBqaW50IHN0YXJ0LCBqaW50IGVuZCwKLSAgICAgICAgamZsb2F0QXJyYXkgcG9zLCBTa1BhaW50KiBwYWludCkgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqc3RyaW5nIHRleHQsIGppbnQgc3RhcnQsIGppbnQgZW5kLAorICAgICAgICBqZmxvYXRBcnJheSBwb3MsIGppbnQgcGFpbnRQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIGNvbnN0IGpjaGFyKiB0ZXh0QXJyYXkgPSBlbnYtPkdldFN0cmluZ0NoYXJzKHRleHQsIE5VTEwpOwogICAgIGpmbG9hdCogcG9zaXRpb25zID0gZW52LT5HZXRGbG9hdEFycmF5RWxlbWVudHMocG9zLCBOVUxMKTsKKyAgICBTa1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KHBhaW50UHRyKTsKIAogICAgIHJlbmRlclBvc1RleHQocmVuZGVyZXIsIHRleHRBcnJheSArIHN0YXJ0LCBlbmQgLSBzdGFydCwgcG9zaXRpb25zLCBrQmlkaV9MVFIsIHBhaW50KTsKIApAQCAtNzU2LDI0ICs4NzksMjkgQEAKIC8vIERpc3BsYXkgbGlzdHMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIERpc3BsYXlMaXN0KiBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2dldERpc3BsYXlMaXN0KEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdFJlbmRlcmVyKiByZW5kZXJlciwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0KSB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5nZXREaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7CitzdGF0aWMgamludCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2dldERpc3BsYXlMaXN0KEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IHJlbmRlcmVyUHRyLCBqaW50IGRpc3BsYXlMaXN0UHRyKSB7CisgICAgRGlzcGxheUxpc3RSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0UmVuZGVyZXIqPihyZW5kZXJlclB0cik7CisgICAgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdCo+KGRpc3BsYXlMaXN0UHRyKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqaW50PihyZW5kZXJlci0+Z2V0RGlzcGxheUxpc3QoZGlzcGxheUxpc3QpKTsKIH0KIAotc3RhdGljIE9wZW5HTFJlbmRlcmVyKiBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2NyZWF0ZURpc3BsYXlMaXN0UmVuZGVyZXIoSk5JRW52KiBlbnYsCitzdGF0aWMgamludCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2NyZWF0ZURpc3BsYXlMaXN0UmVuZGVyZXIoSk5JRW52KiBlbnYsCiAgICAgICAgIGpvYmplY3QgY2xhenopIHsKLSAgICByZXR1cm4gbmV3IERpc3BsYXlMaXN0UmVuZGVyZXI7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8amludD4obmV3IERpc3BsYXlMaXN0UmVuZGVyZXIpOwogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX3Jlc2V0RGlzcGxheUxpc3RSZW5kZXJlcihKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3RSZW5kZXJlciogcmVuZGVyZXIpIHsKKyAgICAgICAgam9iamVjdCBjbGF6eiwgamludCByZW5kZXJlclB0cikgeworICAgIERpc3BsYXlMaXN0UmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJlbmRlcmVyLT5yZXNldCgpOwogfQogCiBzdGF0aWMgamludCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2RyYXdEaXNwbGF5TGlzdChKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsCisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgcmVuZGVyZXJQdHIsIGppbnQgZGlzcGxheUxpc3RQdHIsCiAgICAgICAgIGpvYmplY3QgZGlydHksIGppbnQgZmxhZ3MpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CiAgICAgYW5kcm9pZDo6dWlyZW5kZXJlcjo6UmVjdCBib3VuZHM7CiAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcmVuZGVyZXItPmRyYXdEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCwgYm91bmRzLCBmbGFncyk7CiAgICAgaWYgKHN0YXR1cyAhPSBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZSAmJiBkaXJ0eSAhPSBOVUxMKSB7CkBAIC03ODMsMzYgKzkxMSwzNCBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfb3V0cHV0RGlzcGxheUxpc3QoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0KSB7Ci0gICAgcmVuZGVyZXItPm91dHB1dERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTGF5ZXJzCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfaW50ZXJydXB0KEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0cikgeworICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8T3BlbkdMUmVuZGVyZXIqPihyZW5kZXJlclB0cik7CiAgICAgcmVuZGVyZXItPmludGVycnVwdCgpOwogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX3Jlc3VtZShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyKSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJlbmRlcmVyLT5yZXN1bWUoKTsKIH0KIAotc3RhdGljIE9wZW5HTFJlbmRlcmVyKiBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2NyZWF0ZUxheWVyUmVuZGVyZXIoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIExheWVyKiBsYXllcikgeworc3RhdGljIGppbnQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19jcmVhdGVMYXllclJlbmRlcmVyKEpOSUVudiogZW52LAorICAgICAgICBqb2JqZWN0IGNsYXp6LCBqaW50IGxheWVyUHRyKSB7CisgICAgTGF5ZXIqIGxheWVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXllcio+KGxheWVyUHRyKTsKICAgICBpZiAobGF5ZXIpIHsKICAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gbmV3IExheWVyUmVuZGVyZXIobGF5ZXIpOwogICAgICAgICByZW5kZXJlci0+aW5pdFByb3BlcnRpZXMoKTsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqaW50PihyZW5kZXJlcik7CiAgICAgfQogICAgIHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgTGF5ZXIqIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfY3JlYXRlVGV4dHVyZUxheWVyKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAorc3RhdGljIGppbnQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19jcmVhdGVUZXh0dXJlTGF5ZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGpib29sZWFuIGlzT3BhcXVlLCBqaW50QXJyYXkgbGF5ZXJJbmZvKSB7CiAgICAgTGF5ZXIqIGxheWVyID0gTGF5ZXJSZW5kZXJlcjo6Y3JlYXRlVGV4dHVyZUxheWVyKGlzT3BhcXVlKTsKIApAQCAtODIyLDEwICs5NDgsMTAgQEAKICAgICAgICAgZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhsYXllckluZm8sIHN0b3JhZ2UsIDApOwogICAgIH0KIAotICAgIHJldHVybiBsYXllcjsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqaW50PihsYXllcik7CiB9CiAKLXN0YXRpYyBMYXllciogYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19jcmVhdGVMYXllcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKK3N0YXRpYyBqaW50IGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfY3JlYXRlTGF5ZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGppbnQgd2lkdGgsIGppbnQgaGVpZ2h0LCBqYm9vbGVhbiBpc09wYXF1ZSwgamludEFycmF5IGxheWVySW5mbykgewogICAgIExheWVyKiBsYXllciA9IExheWVyUmVuZGVyZXI6OmNyZWF0ZUxheWVyKHdpZHRoLCBoZWlnaHQsIGlzT3BhcXVlKTsKIApAQCAtODM2LDExICs5NjIsMTIgQEAKICAgICAgICAgZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhsYXllckluZm8sIHN0b3JhZ2UsIDApOwogICAgIH0KIAotICAgIHJldHVybiBsYXllcjsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqaW50PihsYXllcik7CiB9CiAKIHN0YXRpYyBib29sIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfcmVzaXplTGF5ZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIExheWVyKiBsYXllciwgamludCB3aWR0aCwgamludCBoZWlnaHQsIGppbnRBcnJheSBsYXllckluZm8pIHsKKyAgICAgICAgamludCBsYXllclB0ciwgamludCB3aWR0aCwgamludCBoZWlnaHQsIGppbnRBcnJheSBsYXllckluZm8pIHsKKyAgICBMYXllciogbGF5ZXIgPSByZWludGVycHJldF9jYXN0PExheWVyKj4obGF5ZXJQdHIpOwogICAgIGlmIChMYXllclJlbmRlcmVyOjpyZXNpemVMYXllcihsYXllciwgd2lkdGgsIGhlaWdodCkpIHsKICAgICAgICAgamludCogc3RvcmFnZSA9IGVudi0+R2V0SW50QXJyYXlFbGVtZW50cyhsYXllckluZm8sIE5VTEwpOwogICAgICAgICBzdG9yYWdlWzBdID0gbGF5ZXItPmdldFdpZHRoKCk7CkBAIC04NTIsMjggKzk3OSwzMyBAQAogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX3NldExheWVyUGFpbnQoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIExheWVyKiBsYXllciwgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgamludCBsYXllclB0ciwgamludCBwYWludFB0cikgeworICAgIExheWVyKiBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5ZXIqPihsYXllclB0cik7CiAgICAgaWYgKGxheWVyKSB7CisgICAgICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4ocGFpbnRQdHIpOwogICAgICAgICBsYXllci0+c2V0UGFpbnQocGFpbnQpOwogICAgIH0KIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19zZXRMYXllckNvbG9yRmlsdGVyKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBMYXllciogbGF5ZXIsIFNraWFDb2xvckZpbHRlciogY29sb3JGaWx0ZXIpIHsKKyAgICAgICAgamludCBsYXllclB0ciwgamludCBjb2xvckZpbHRlclB0cikgeworICAgIExheWVyKiBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5ZXIqPihsYXllclB0cik7CiAgICAgaWYgKGxheWVyKSB7CisgICAgICAgIFNraWFDb2xvckZpbHRlciogY29sb3JGaWx0ZXIgPSByZWludGVycHJldF9jYXN0PFNraWFDb2xvckZpbHRlcio+KGNvbG9yRmlsdGVyUHRyKTsKICAgICAgICAgbGF5ZXItPnNldENvbG9yRmlsdGVyKGNvbG9yRmlsdGVyKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfc2V0T3BhcXVlTGF5ZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIExheWVyKiBsYXllciwgamJvb2xlYW4gaXNPcGFxdWUpIHsKKyAgICAgICAgamludCBsYXllclB0ciwgamJvb2xlYW4gaXNPcGFxdWUpIHsKKyAgICBMYXllciogbGF5ZXIgPSByZWludGVycHJldF9jYXN0PExheWVyKj4obGF5ZXJQdHIpOwogICAgIGlmIChsYXllcikgewogICAgICAgICBsYXllci0+c2V0QmxlbmQoIWlzT3BhcXVlKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfdXBkYXRlVGV4dHVyZUxheWVyKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBMYXllciogbGF5ZXIsIGppbnQgd2lkdGgsIGppbnQgaGVpZ2h0LCBqYm9vbGVhbiBpc09wYXF1ZSwgam9iamVjdCBzdXJmYWNlKSB7CisgICAgICAgIGppbnQgbGF5ZXJQdHIsIGppbnQgd2lkdGgsIGppbnQgaGVpZ2h0LCBqYm9vbGVhbiBpc09wYXF1ZSwgam9iamVjdCBzdXJmYWNlKSB7CiAgICAgZmxvYXQgdHJhbnNmb3JtWzE2XTsKICAgICBzcDxHTENvbnN1bWVyPiBzdXJmYWNlVGV4dHVyZShTdXJmYWNlVGV4dHVyZV9nZXRTdXJmYWNlVGV4dHVyZShlbnYsIHN1cmZhY2UpKTsKIApAQCAtODk4LDYyICsxMDMwLDgxIEBACiAgICAgICAgIHN1cmZhY2VUZXh0dXJlLT5nZXRUcmFuc2Zvcm1NYXRyaXgodHJhbnNmb3JtKTsKICAgICAgICAgR0xlbnVtIHJlbmRlclRhcmdldCA9IHN1cmZhY2VUZXh0dXJlLT5nZXRDdXJyZW50VGV4dHVyZVRhcmdldCgpOwogCisgICAgICAgIExheWVyKiBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5ZXIqPihsYXllclB0cik7CiAgICAgICAgIExheWVyUmVuZGVyZXI6OnVwZGF0ZVRleHR1cmVMYXllcihsYXllciwgd2lkdGgsIGhlaWdodCwgaXNPcGFxdWUsIHJlbmRlclRhcmdldCwgdHJhbnNmb3JtKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfdXBkYXRlUmVuZGVyTGF5ZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIExheWVyKiBsYXllciwgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsCisgICAgICAgIGppbnQgbGF5ZXJQdHIsIGppbnQgcmVuZGVyZXJQdHIsIGppbnQgZGlzcGxheUxpc3RQdHIsCiAgICAgICAgIGppbnQgbGVmdCwgamludCB0b3AsIGppbnQgcmlnaHQsIGppbnQgYm90dG9tKSB7CisgICAgTGF5ZXIqIGxheWVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXllcio+KGxheWVyUHRyKTsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOworICAgIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUxpc3QqPihkaXNwbGF5TGlzdFB0cik7CiAgICAgbGF5ZXItPnVwZGF0ZURlZmVycmVkKHJlbmRlcmVyLCBkaXNwbGF5TGlzdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19jbGVhckxheWVyVGV4dHVyZShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgTGF5ZXIqIGxheWVyKSB7CisgICAgICAgIGppbnQgbGF5ZXJQdHIpIHsKKyAgICBMYXllciogbGF5ZXIgPSByZWludGVycHJldF9jYXN0PExheWVyKj4obGF5ZXJQdHIpOwogICAgIGxheWVyLT5jbGVhclRleHR1cmUoKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19zZXRUZXh0dXJlTGF5ZXJUcmFuc2Zvcm0oSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIExheWVyKiBsYXllciwgU2tNYXRyaXgqIG1hdHJpeCkgeworICAgICAgICBqaW50IGxheWVyUHRyLCBqaW50IG1hdHJpeFB0cikgeworICAgIExheWVyKiBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5ZXIqPihsYXllclB0cik7CisgICAgU2tNYXRyaXgqIG1hdHJpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tNYXRyaXgqPihtYXRyaXhQdHIpOwogICAgIGxheWVyLT5nZXRUcmFuc2Zvcm0oKS5sb2FkKCptYXRyaXgpOwogfQogCi1zdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2Rlc3Ryb3lMYXllcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwgTGF5ZXIqIGxheWVyKSB7CitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2Rlc3Ryb3lMYXllcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwgamludCBsYXllclB0cikgeworICAgIExheWVyKiBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5ZXIqPihsYXllclB0cik7CiAgICAgTGF5ZXJSZW5kZXJlcjo6ZGVzdHJveUxheWVyKGxheWVyKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kZXN0cm95TGF5ZXJEZWZlcnJlZChKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgTGF5ZXIqIGxheWVyKSB7CisgICAgICAgIGpvYmplY3QgY2xhenosIGppbnQgbGF5ZXJQdHIpIHsKKyAgICBMYXllciogbGF5ZXIgPSByZWludGVycHJldF9jYXN0PExheWVyKj4obGF5ZXJQdHIpOwogICAgIExheWVyUmVuZGVyZXI6OmRlc3Ryb3lMYXllckRlZmVycmVkKGxheWVyKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19kcmF3TGF5ZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgTGF5ZXIqIGxheWVyLCBqZmxvYXQgeCwgamZsb2F0IHkpIHsKKyAgICAgICAgamludCByZW5kZXJlclB0ciwgamludCBsYXllclB0ciwgamZsb2F0IHgsIGpmbG9hdCB5KSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKKyAgICBMYXllciogbGF5ZXIgPSByZWludGVycHJldF9jYXN0PExheWVyKj4obGF5ZXJQdHIpOwogICAgIHJlbmRlcmVyLT5kcmF3TGF5ZXIobGF5ZXIsIHgsIHkpOwogfQogCiBzdGF0aWMgamJvb2xlYW4gYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19jb3B5TGF5ZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIExheWVyKiBsYXllciwgU2tCaXRtYXAqIGJpdG1hcCkgeworICAgICAgICBqaW50IGxheWVyUHRyLCBqaW50IGJpdG1hcFB0cikgeworICAgIExheWVyKiBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5ZXIqPihsYXllclB0cik7CisgICAgU2tCaXRtYXAqIGJpdG1hcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tCaXRtYXAqPihiaXRtYXBQdHIpOwogICAgIHJldHVybiBMYXllclJlbmRlcmVyOjpjb3B5TGF5ZXIobGF5ZXIsIGJpdG1hcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfcHVzaExheWVyVXBkYXRlKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIExheWVyKiBsYXllcikgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqaW50IGxheWVyUHRyKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKKyAgICBMYXllciogbGF5ZXIgPSByZWludGVycHJldF9jYXN0PExheWVyKj4obGF5ZXJQdHIpOwogICAgIHJlbmRlcmVyLT5wdXNoTGF5ZXJVcGRhdGUobGF5ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzX2NhbmNlbExheWVyVXBkYXRlKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsIExheWVyKiBsYXllcikgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyLCBqaW50IGxheWVyUHRyKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKKyAgICBMYXllciogbGF5ZXIgPSByZWludGVycHJldF9jYXN0PExheWVyKj4obGF5ZXJQdHIpOwogICAgIHJlbmRlcmVyLT5jYW5jZWxMYXllclVwZGF0ZShsYXllcik7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfY2xlYXJMYXllclVwZGF0ZXMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlcikgeworICAgICAgICBqaW50IHJlbmRlcmVyUHRyKSB7CisgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyID0gcmVpbnRlcnByZXRfY2FzdDxPcGVuR0xSZW5kZXJlcio+KHJlbmRlcmVyUHRyKTsKICAgICByZW5kZXJlci0+Y2xlYXJMYXllclVwZGF0ZXMoKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19mbHVzaExheWVyVXBkYXRlcyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyKSB7CisgICAgICAgIGppbnQgcmVuZGVyZXJQdHIpIHsKKyAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIgPSByZWludGVycHJldF9jYXN0PE9wZW5HTFJlbmRlcmVyKj4ocmVuZGVyZXJQdHIpOwogICAgIHJlbmRlcmVyLT5mbHVzaExheWVyVXBkYXRlcygpOwogfQogCkBAIC0xMDE0LDggKzExNjUsOCBAQAogICAgIHsgIm5QcmVwYXJlIiwgICAgICAgICAgICIoSVopSSIsICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfcHJlcGFyZSB9LAogICAgIHsgIm5QcmVwYXJlRGlydHkiLCAgICAgICIoSUlJSUlaKUkiLCAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfcHJlcGFyZURpcnR5IH0sCiAgICAgeyAibkZpbmlzaCIsICAgICAgICAgICAgIihJKVYiLCAgICAgICAgICAgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19maW5pc2ggfSwKLSAgICB7ICJuU2V0TmFtZSIsICAgICAgICAgICAiKElMamF2YS9sYW5nL1N0cmluZzspViIsCi0gICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfc2V0TmFtZSB9LAorICAgIHsgIm5TZXRQcm9wZXJ0eSIsICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiwKKyAgICAgICAgICAgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19zZXRQcm9wZXJ0eSB9LAogCiAgICAgeyAiblNldENvdW50T3ZlcmRyYXdFbmFibGVkIiwgIihJWilWIiwgICAgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19zZXRDb3VudE92ZXJkcmF3RW5hYmxlZCB9LAogICAgIHsgIm5HZXRPdmVyZHJhdyIsICAgICAgICAgICAgICIoSSlGIiwgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZ2V0T3ZlcmRyYXcgfSwKQEAgLTExMDMsNyArMTI1NCw2IEBACiAgICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZ2V0Q2xpcEJvdW5kcyB9LAogCiAgICAgeyAibkdldERpc3BsYXlMaXN0IiwgICAgICAgICAiKElJKUkiLCAgICAgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19nZXREaXNwbGF5TGlzdCB9LAotICAgIHsgIm5PdXRwdXREaXNwbGF5TGlzdCIsICAgICAgIihJSSlWIiwgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfb3V0cHV0RGlzcGxheUxpc3QgfSwKICAgICB7ICJuRHJhd0Rpc3BsYXlMaXN0IiwgICAgICAgICIoSUlMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0kpSSIsCiAgICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd0Rpc3BsYXlMaXN0IH0sCiAKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdC5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2UyZTI0Li4wMDAwMDAwCi0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNkZWZpbmUgTE9HX1RBRyAiT3BlbkdMUmVuZGVyZXIiCi0KLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0KLSNpbmNsdWRlICJqbmkuaCIKLSNpbmNsdWRlICJHcmFwaGljc0pOSS5oIgotI2luY2x1ZGUgPG5hdGl2ZWhlbHBlci9KTklIZWxwLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL0FuZHJvaWRSdW50aW1lLmg+Ci0KLSNpbmNsdWRlIDxEaXNwbGF5TGlzdC5oPgotI2luY2x1ZGUgPERpc3BsYXlMaXN0UmVuZGVyZXIuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi11c2luZyBuYW1lc3BhY2UgdWlyZW5kZXJlcjsKLQotLyoqCi0gKiBOb3RlOiBPcGVuR0xSZW5kZXJlciBKTkkgbGF5ZXIgaXMgZ2VuZXJhdGVkIGFuZCBjb21waWxlZCBvbmx5IG9uIHN1cHBvcnRlZAotICogICAgICAgZGV2aWNlcy4gVGhpcyBtZWFucyBhbGwgdGhlIGxvZ2ljIG11c3QgYmUgY29tcGlsZWQgb25seSB3aGVuIHRoZQotICogICAgICAgcHJlcHJvY2Vzc29yIHZhcmlhYmxlIFVTRV9PUEVOR0xfUkVOREVSRVIgaXMgZGVmaW5lZC4KLSAqLwotI2lmZGVmIFVTRV9PUEVOR0xfUkVOREVSRVIKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGlzcGxheUxpc3QgdmlldyBwcm9wZXJ0aWVzCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9yZXNldChKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0KSB7Ci0gICAgZGlzcGxheUxpc3QtPnJlc2V0KCk7Ci19Ci0KLXN0YXRpYyBqaW50IGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXREaXNwbGF5TGlzdFNpemUoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCkgewotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0U2l6ZSgpOwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0RGlzcGxheUxpc3ROYW1lKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGpzdHJpbmcgbmFtZSkgewotICAgIGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3QgY2hhciogdGV4dEFycmF5ID0gZW52LT5HZXRTdHJpbmdVVEZDaGFycyhuYW1lLCBOVUxMKTsKLSAgICAgICAgZGlzcGxheUxpc3QtPnNldE5hbWUodGV4dEFycmF5KTsKLSAgICAgICAgZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMobmFtZSwgdGV4dEFycmF5KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9kZXN0cm95RGlzcGxheUxpc3QoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCkgewotICAgIERpc3BsYXlMaXN0OjpkZXN0cm95RGlzcGxheUxpc3REZWZlcnJlZChkaXNwbGF5TGlzdCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERpc3BsYXlMaXN0IHZpZXcgcHJvcGVydGllcwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0Q2FjaGluZyhKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0LCBqYm9vbGVhbiBjYWNoaW5nKSB7Ci0gICAgZGlzcGxheUxpc3QtPnNldENhY2hpbmcoY2FjaGluZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRTdGF0aWNNYXRyaXgoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCwgU2tNYXRyaXgqIG1hdHJpeCkgewotICAgIGRpc3BsYXlMaXN0LT5zZXRTdGF0aWNNYXRyaXgobWF0cml4KTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldEFuaW1hdGlvbk1hdHJpeChKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0LCBTa01hdHJpeCogbWF0cml4KSB7Ci0gICAgZGlzcGxheUxpc3QtPnNldEFuaW1hdGlvbk1hdHJpeChtYXRyaXgpOwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0Q2xpcFRvQm91bmRzKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGpib29sZWFuIGNsaXBUb0JvdW5kcykgewotICAgIGRpc3BsYXlMaXN0LT5zZXRDbGlwVG9Cb3VuZHMoY2xpcFRvQm91bmRzKTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldEFscGhhKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGZsb2F0IGFscGhhKSB7Ci0gICAgZGlzcGxheUxpc3QtPnNldEFscGhhKGFscGhhKTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldEhhc092ZXJsYXBwaW5nUmVuZGVyaW5nKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGJvb2wgaGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcpIHsKLSAgICBkaXNwbGF5TGlzdC0+c2V0SGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoaGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcpOwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0VHJhbnNsYXRpb25YKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGZsb2F0IHR4KSB7Ci0gICAgZGlzcGxheUxpc3QtPnNldFRyYW5zbGF0aW9uWCh0eCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRUcmFuc2xhdGlvblkoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCwgZmxvYXQgdHkpIHsKLSAgICBkaXNwbGF5TGlzdC0+c2V0VHJhbnNsYXRpb25ZKHR5KTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldFJvdGF0aW9uKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGZsb2F0IHJvdGF0aW9uKSB7Ci0gICAgZGlzcGxheUxpc3QtPnNldFJvdGF0aW9uKHJvdGF0aW9uKTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldFJvdGF0aW9uWChKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0LCBmbG9hdCByeCkgewotICAgIGRpc3BsYXlMaXN0LT5zZXRSb3RhdGlvblgocngpOwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0Um90YXRpb25ZKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGZsb2F0IHJ5KSB7Ci0gICAgZGlzcGxheUxpc3QtPnNldFJvdGF0aW9uWShyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRTY2FsZVgoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCwgZmxvYXQgc3gpIHsKLSAgICBkaXNwbGF5TGlzdC0+c2V0U2NhbGVYKHN4KTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldFNjYWxlWShKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0LCBmbG9hdCBzeSkgewotICAgIGRpc3BsYXlMaXN0LT5zZXRTY2FsZVkoc3kpOwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0VHJhbnNmb3JtYXRpb25JbmZvKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGZsb2F0IGFscGhhLAotICAgICAgICBmbG9hdCB0cmFuc2xhdGlvblgsIGZsb2F0IHRyYW5zbGF0aW9uWSwgZmxvYXQgcm90YXRpb24sIGZsb2F0IHJvdGF0aW9uWCwgZmxvYXQgcm90YXRpb25ZLAotICAgICAgICBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSkgewotICAgIGRpc3BsYXlMaXN0LT5zZXRBbHBoYShhbHBoYSk7Ci0gICAgZGlzcGxheUxpc3QtPnNldFRyYW5zbGF0aW9uWCh0cmFuc2xhdGlvblgpOwotICAgIGRpc3BsYXlMaXN0LT5zZXRUcmFuc2xhdGlvblkodHJhbnNsYXRpb25ZKTsKLSAgICBkaXNwbGF5TGlzdC0+c2V0Um90YXRpb24ocm90YXRpb24pOwotICAgIGRpc3BsYXlMaXN0LT5zZXRSb3RhdGlvblgocm90YXRpb25YKTsKLSAgICBkaXNwbGF5TGlzdC0+c2V0Um90YXRpb25ZKHJvdGF0aW9uWSk7Ci0gICAgZGlzcGxheUxpc3QtPnNldFNjYWxlWChzY2FsZVgpOwotICAgIGRpc3BsYXlMaXN0LT5zZXRTY2FsZVkoc2NhbGVZKTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldFBpdm90WChKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0LCBmbG9hdCBweCkgewotICAgIGRpc3BsYXlMaXN0LT5zZXRQaXZvdFgocHgpOwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0UGl2b3RZKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGZsb2F0IHB5KSB7Ci0gICAgZGlzcGxheUxpc3QtPnNldFBpdm90WShweSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRDYW1lcmFEaXN0YW5jZShKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0LCBmbG9hdCBkaXN0YW5jZSkgewotICAgIGRpc3BsYXlMaXN0LT5zZXRDYW1lcmFEaXN0YW5jZShkaXN0YW5jZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRMZWZ0KEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGludCBsZWZ0KSB7Ci0gICAgZGlzcGxheUxpc3QtPnNldExlZnQobGVmdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRUb3AoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCwgaW50IHRvcCkgewotICAgIGRpc3BsYXlMaXN0LT5zZXRUb3AodG9wKTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldFJpZ2h0KEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGludCByaWdodCkgewotICAgIGRpc3BsYXlMaXN0LT5zZXRSaWdodChyaWdodCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRCb3R0b20oSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCwgaW50IGJvdHRvbSkgewotICAgIGRpc3BsYXlMaXN0LT5zZXRCb3R0b20oYm90dG9tKTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldExlZnRUb3BSaWdodEJvdHRvbShKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0LCBpbnQgbGVmdCwgaW50IHRvcCwKLSAgICAgICAgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7Ci0gICAgZGlzcGxheUxpc3QtPnNldExlZnRUb3BSaWdodEJvdHRvbShsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfb2Zmc2V0TGVmdEFuZFJpZ2h0KEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIGZsb2F0IG9mZnNldCkgewotICAgIGRpc3BsYXlMaXN0LT5vZmZzZXRMZWZ0UmlnaHQob2Zmc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X29mZnNldFRvcEFuZEJvdHRvbShKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0LCBmbG9hdCBvZmZzZXQpIHsKLSAgICBkaXNwbGF5TGlzdC0+b2Zmc2V0VG9wQm90dG9tKG9mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRNYXRyaXgoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCwgU2tNYXRyaXgqIG1hdHJpeCkgewotICAgIFNrTWF0cml4KiBzb3VyY2UgPSBkaXNwbGF5TGlzdC0+Z2V0U3RhdGljTWF0cml4KCk7Ci0gICAgaWYgKHNvdXJjZSkgewotICAgICAgICBtYXRyaXgtPnNldENvbmNhdChTa01hdHJpeDo6SSgpLCAqc291cmNlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtYXRyaXgtPnNldElkZW50aXR5KCk7Ci0gICAgfQotfQotCi1zdGF0aWMgamJvb2xlYW4gYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2hhc092ZXJsYXBwaW5nUmVuZGVyaW5nKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QpIHsKLSAgICByZXR1cm4gZGlzcGxheUxpc3QtPmhhc092ZXJsYXBwaW5nUmVuZGVyaW5nKCk7Ci19Ci0KLXN0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2dldEFscGhhKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QpIHsKLSAgICByZXR1cm4gZGlzcGxheUxpc3QtPmdldEFscGhhKCk7Ci19Ci0KLXN0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2dldExlZnQoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCkgewotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0TGVmdCgpOwotfQotCi1zdGF0aWMgamZsb2F0IGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRUb3AoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCkgewotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0VG9wKCk7Ci19Ci0KLXN0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2dldFJpZ2h0KEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QpIHsKLSAgICByZXR1cm4gZGlzcGxheUxpc3QtPmdldFJpZ2h0KCk7Ci19Ci0KLXN0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2dldEJvdHRvbShKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0KSB7Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5nZXRCb3R0b20oKTsKLX0KLQotc3RhdGljIGpmbG9hdCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3RfZ2V0Q2FtZXJhRGlzdGFuY2UoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCkgewotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0Q2FtZXJhRGlzdGFuY2UoKTsKLX0KLQotc3RhdGljIGpmbG9hdCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3RfZ2V0U2NhbGVYKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QpIHsKLSAgICByZXR1cm4gZGlzcGxheUxpc3QtPmdldFNjYWxlWCgpOwotfQotCi1zdGF0aWMgamZsb2F0IGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRTY2FsZVkoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCkgewotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0U2NhbGVZKCk7Ci19Ci0KLXN0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2dldFRyYW5zbGF0aW9uWChKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0KSB7Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5nZXRUcmFuc2xhdGlvblgoKTsKLX0KLQotc3RhdGljIGpmbG9hdCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3RfZ2V0VHJhbnNsYXRpb25ZKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QpIHsKLSAgICByZXR1cm4gZGlzcGxheUxpc3QtPmdldFRyYW5zbGF0aW9uWSgpOwotfQotCi1zdGF0aWMgamZsb2F0IGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRSb3RhdGlvbihKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0KSB7Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5nZXRSb3RhdGlvbigpOwotfQotCi1zdGF0aWMgamZsb2F0IGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRSb3RhdGlvblgoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCkgewotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0Um90YXRpb25YKCk7Ci19Ci0KLXN0YXRpYyBqZmxvYXQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2dldFJvdGF0aW9uWShKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0KSB7Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5nZXRSb3RhdGlvblkoKTsKLX0KLQotc3RhdGljIGpmbG9hdCBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3RfZ2V0UGl2b3RYKEpOSUVudiogZW52LAotICAgICAgICBqb2JqZWN0IGNsYXp6LCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QpIHsKLSAgICByZXR1cm4gZGlzcGxheUxpc3QtPmdldFBpdm90WCgpOwotfQotCi1zdGF0aWMgamZsb2F0IGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRQaXZvdFkoSk5JRW52KiBlbnYsCi0gICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCkgewotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+Z2V0UGl2b3RZKCk7Ci19Ci0KLSNlbmRpZiAvLyBVU0VfT1BFTkdMX1JFTkRFUkVSCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEpOSSBHbHVlCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNvbnN0IGNoYXIqIGNvbnN0IGtDbGFzc1BhdGhOYW1lID0gImFuZHJvaWQvdmlldy9HTEVTMjBEaXNwbGF5TGlzdCI7Ci0KLXN0YXRpYyBKTklOYXRpdmVNZXRob2QgZ01ldGhvZHNbXSA9IHsKLSNpZmRlZiBVU0VfT1BFTkdMX1JFTkRFUkVSCi0gICAgeyAibkRlc3Ryb3lEaXNwbGF5TGlzdCIsICAgIihJKVYiLCAgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2Rlc3Ryb3lEaXNwbGF5TGlzdCB9LAotICAgIHsgIm5HZXREaXNwbGF5TGlzdFNpemUiLCAgICIoSSlJIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXREaXNwbGF5TGlzdFNpemUgfSwKLSAgICB7ICJuU2V0RGlzcGxheUxpc3ROYW1lIiwgICAiKElMamF2YS9sYW5nL1N0cmluZzspViIsCi0gICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXREaXNwbGF5TGlzdE5hbWUgfSwKLQotICAgIHsgIm5SZXNldCIsICAgICAgICAgICAgICAgICIoSSlWIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9yZXNldCB9LAotICAgIHsgIm5TZXRDYWNoaW5nIiwgICAgICAgICAgICIoSVopViIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRDYWNoaW5nIH0sCi0gICAgeyAiblNldFN0YXRpY01hdHJpeCIsICAgICAgIihJSSlWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldFN0YXRpY01hdHJpeCB9LAotICAgIHsgIm5TZXRBbmltYXRpb25NYXRyaXgiLCAgICIoSUkpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRBbmltYXRpb25NYXRyaXggfSwKLSAgICB7ICJuU2V0Q2xpcFRvQm91bmRzIiwgICAgICAiKElaKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0Q2xpcFRvQm91bmRzIH0sCi0gICAgeyAiblNldEFscGhhIiwgICAgICAgICAgICAgIihJRilWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldEFscGhhIH0sCi0gICAgeyAiblNldEhhc092ZXJsYXBwaW5nUmVuZGVyaW5nIiwgIihJWilWIiwKLSAgICAgICAgICAgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldEhhc092ZXJsYXBwaW5nUmVuZGVyaW5nIH0sCi0gICAgeyAiblNldFRyYW5zbGF0aW9uWCIsICAgICAgIihJRilWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldFRyYW5zbGF0aW9uWCB9LAotICAgIHsgIm5TZXRUcmFuc2xhdGlvblkiLCAgICAgICIoSUYpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRUcmFuc2xhdGlvblkgfSwKLSAgICB7ICJuU2V0Um90YXRpb24iLCAgICAgICAgICAiKElGKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0Um90YXRpb24gfSwKLSAgICB7ICJuU2V0Um90YXRpb25YIiwgICAgICAgICAiKElGKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0Um90YXRpb25YIH0sCi0gICAgeyAiblNldFJvdGF0aW9uWSIsICAgICAgICAgIihJRilWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldFJvdGF0aW9uWSB9LAotICAgIHsgIm5TZXRTY2FsZVgiLCAgICAgICAgICAgICIoSUYpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRTY2FsZVggfSwKLSAgICB7ICJuU2V0U2NhbGVZIiwgICAgICAgICAgICAiKElGKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0U2NhbGVZIH0sCi0gICAgeyAiblNldFRyYW5zZm9ybWF0aW9uSW5mbyIsIihJRkZGRkZGRkYpViIsCi0gICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRUcmFuc2Zvcm1hdGlvbkluZm8gfSwKLSAgICB7ICJuU2V0UGl2b3RYIiwgICAgICAgICAgICAiKElGKVYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0UGl2b3RYIH0sCi0gICAgeyAiblNldFBpdm90WSIsICAgICAgICAgICAgIihJRilWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldFBpdm90WSB9LAotICAgIHsgIm5TZXRDYW1lcmFEaXN0YW5jZSIsICAgICIoSUYpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRDYW1lcmFEaXN0YW5jZSB9LAotICAgIHsgIm5TZXRMZWZ0IiwgICAgICAgICAgICAgICIoSUkpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRMZWZ0IH0sCi0gICAgeyAiblNldFRvcCIsICAgICAgICAgICAgICAgIihJSSlWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X3NldFRvcCB9LAotICAgIHsgIm5TZXRSaWdodCIsICAgICAgICAgICAgICIoSUkpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRSaWdodCB9LAotICAgIHsgIm5TZXRCb3R0b20iLCAgICAgICAgICAgICIoSUkpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRCb3R0b20gfSwKLSAgICB7ICJuU2V0TGVmdFRvcFJpZ2h0Qm90dG9tIiwiKElJSUlJKVYiLAotICAgICAgICAgICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3Rfc2V0TGVmdFRvcFJpZ2h0Qm90dG9tIH0sCi0gICAgeyAibk9mZnNldExlZnRBbmRSaWdodCIsICAgIihJRilWIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X29mZnNldExlZnRBbmRSaWdodCB9LAotICAgIHsgIm5PZmZzZXRUb3BBbmRCb3R0b20iLCAgICIoSUYpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9vZmZzZXRUb3BBbmRCb3R0b20gfSwKLQotCi0gICAgeyAibkdldE1hdHJpeCIsICAgICAgICAgICAgICAgIihJSSlWIiwgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3RfZ2V0TWF0cml4IH0sCi0gICAgeyAibkhhc092ZXJsYXBwaW5nUmVuZGVyaW5nIiwgIihJKVoiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3RfaGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcgfSwKLSAgICB7ICJuR2V0QWxwaGEiLCAgICAgICAgICAgICAgICAiKEkpRiIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRBbHBoYSB9LAotICAgIHsgIm5HZXRMZWZ0IiwgICAgICAgICAgICAgICAgICIoSSlGIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2dldExlZnQgfSwKLSAgICB7ICJuR2V0VG9wIiwgICAgICAgICAgICAgICAgICAiKEkpRiIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRUb3AgfSwKLSAgICB7ICJuR2V0UmlnaHQiLCAgICAgICAgICAgICAgICAiKEkpRiIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRSaWdodCB9LAotICAgIHsgIm5HZXRCb3R0b20iLCAgICAgICAgICAgICAgICIoSSlGIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2dldEJvdHRvbSB9LAotICAgIHsgIm5HZXRDYW1lcmFEaXN0YW5jZSIsICAgICAgICIoSSlGIiwgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2dldENhbWVyYURpc3RhbmNlIH0sCi0gICAgeyAibkdldFNjYWxlWCIsICAgICAgICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3RfZ2V0U2NhbGVYIH0sCi0gICAgeyAibkdldFNjYWxlWSIsICAgICAgICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3RfZ2V0U2NhbGVZIH0sCi0gICAgeyAibkdldFRyYW5zbGF0aW9uWCIsICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3RfZ2V0VHJhbnNsYXRpb25YIH0sCi0gICAgeyAibkdldFRyYW5zbGF0aW9uWSIsICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3RfZ2V0VHJhbnNsYXRpb25ZIH0sCi0gICAgeyAibkdldFJvdGF0aW9uIiwgICAgICAgICAgICAgIihJKUYiLCAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3RfZ2V0Um90YXRpb24gfSwKLSAgICB7ICJuR2V0Um90YXRpb25YIiwgICAgICAgICAgICAiKEkpRiIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRSb3RhdGlvblggfSwKLSAgICB7ICJuR2V0Um90YXRpb25ZIiwgICAgICAgICAgICAiKEkpRiIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRSb3RhdGlvblkgfSwKLSAgICB7ICJuR2V0UGl2b3RYIiwgICAgICAgICAgICAgICAiKEkpRiIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRQaXZvdFggfSwKLSAgICB7ICJuR2V0UGl2b3RZIiwgICAgICAgICAgICAgICAiKEkpRiIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXRQaXZvdFkgfSwKLSNlbmRpZgotfTsKLQotI2lmZGVmIFVTRV9PUEVOR0xfUkVOREVSRVIKLSAgICAjZGVmaW5lIEZJTkRfQ0xBU1ModmFyLCBjbGFzc05hbWUpIFwKLSAgICAgICAgICAgIHZhciA9IGVudi0+RmluZENsYXNzKGNsYXNzTmFtZSk7IFwKLSAgICAgICAgICAgIExPR19GQVRBTF9JRighIHZhciwgIlVuYWJsZSB0byBmaW5kIGNsYXNzICIgY2xhc3NOYW1lKTsKLQotICAgICNkZWZpbmUgR0VUX01FVEhPRF9JRCh2YXIsIGNsYXp6LCBtZXRob2ROYW1lLCBtZXRob2REZXNjcmlwdG9yKSBcCi0gICAgICAgICAgICB2YXIgPSBlbnYtPkdldE1ldGhvZElEKGNsYXp6LCBtZXRob2ROYW1lLCBtZXRob2REZXNjcmlwdG9yKTsgXAotICAgICAgICAgICAgTE9HX0ZBVEFMX0lGKCEgdmFyLCAiVW5hYmxlIHRvIGZpbmQgbWV0aG9kICIgbWV0aG9kTmFtZSk7Ci0jZWxzZQotICAgICNkZWZpbmUgRklORF9DTEFTUyh2YXIsIGNsYXNzTmFtZSkKLSAgICAjZGVmaW5lIEdFVF9NRVRIT0RfSUQodmFyLCBjbGF6eiwgbWV0aG9kTmFtZSwgbWV0aG9kRGVzY3JpcHRvcikKLSNlbmRpZgotCi1pbnQgcmVnaXN0ZXJfYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0KEpOSUVudiogZW52KSB7Ci0gICAgcmV0dXJuIEFuZHJvaWRSdW50aW1lOjpyZWdpc3Rlck5hdGl2ZU1ldGhvZHMoZW52LCBrQ2xhc3NQYXRoTmFtZSwgZ01ldGhvZHMsIE5FTEVNKGdNZXRob2RzKSk7Ci19Ci0KLX07Ci0KZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTFJlbmRlcmVyLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTFJlbmRlcmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Y5M2QwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qbmkvYW5kcm9pZF92aWV3X0dMUmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJHTFJlbmRlcmVyIgorCisjaW5jbHVkZSAiam5pLmgiCisjaW5jbHVkZSA8bmF0aXZlaGVscGVyL0pOSUhlbHAuaD4KKyNpbmNsdWRlIDxhbmRyb2lkX3J1bnRpbWUvQW5kcm9pZFJ1bnRpbWUuaD4KKworI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+CisjaW5jbHVkZSA8RUdML2VnbF9jYWNoZS5oPgorCisjaW5jbHVkZSA8dXRpbHMvVGltZXJzLmg+CisKKyNpbmNsdWRlIDxDYWNoZXMuaD4KKyNpbmNsdWRlIDxFeHRlbnNpb25zLmg+CisKKyNpZmRlZiBVU0VfT1BFTkdMX1JFTkRFUkVSCisgICAgRUdMQVBJIHZvaWQgRUdMQVBJRU5UUlkgZWdsQmVnaW5GcmFtZShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKTsKKyNlbmRpZgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKy8qKgorICogTm90ZTogT3BlbkdMUmVuZGVyZXIgSk5JIGxheWVyIGlzIGdlbmVyYXRlZCBhbmQgY29tcGlsZWQgb25seSBvbiBzdXBwb3J0ZWQKKyAqICAgICAgIGRldmljZXMuIFRoaXMgbWVhbnMgYWxsIHRoZSBsb2dpYyBtdXN0IGJlIGNvbXBpbGVkIG9ubHkgd2hlbiB0aGUKKyAqICAgICAgIHByZXByb2Nlc3NvciB2YXJpYWJsZSBVU0VfT1BFTkdMX1JFTkRFUkVSIGlzIGRlZmluZWQuCisgKi8KKyNpZmRlZiBVU0VfT1BFTkdMX1JFTkRFUkVSCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERlZmluZXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gRGVidWcKKyNkZWZpbmUgREVCVUdfUkVOREVSRVIgMAorCisvLyBEZWJ1ZworI2lmIERFQlVHX1JFTkRFUkVSCisgICAgI2RlZmluZSBSRU5ERVJFUl9MT0dEKC4uLikgQUxPR0QoX19WQV9BUkdTX18pCisjZWxzZQorICAgICNkZWZpbmUgUkVOREVSRVJfTE9HRCguLi4pCisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU3VyZmFjZSBhbmQgZGlzcGxheSBtYW5hZ2VtZW50CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBqYm9vbGVhbiBhbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcl9wcmVzZXJ2ZUJhY2tCdWZmZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenopIHsKKyAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBlZ2xHZXRDdXJyZW50RGlzcGxheSgpOworICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKTsKKworICAgIGVnbEdldEVycm9yKCk7CisgICAgZWdsU3VyZmFjZUF0dHJpYihkaXNwbGF5LCBzdXJmYWNlLCBFR0xfU1dBUF9CRUhBVklPUiwgRUdMX0JVRkZFUl9QUkVTRVJWRUQpOworCisgICAgRUdMaW50IGVycm9yID0gZWdsR2V0RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0gRUdMX1NVQ0NFU1MpIHsKKyAgICAgICAgUkVOREVSRVJfTE9HRCgiQ291bGQgbm90IGVuYWJsZSBidWZmZXIgcHJlc2VydmVkIHN3YXAgYmVoYXZpb3IgKCV4KSIsIGVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3IgPT0gRUdMX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBqYm9vbGVhbiBhbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcl9pc0JhY2tCdWZmZXJQcmVzZXJ2ZWQoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenopIHsKKyAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBlZ2xHZXRDdXJyZW50RGlzcGxheSgpOworICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKTsKKyAgICBFR0xpbnQgdmFsdWU7CisKKyAgICBlZ2xHZXRFcnJvcigpOworICAgIGVnbFF1ZXJ5U3VyZmFjZShkaXNwbGF5LCBzdXJmYWNlLCBFR0xfU1dBUF9CRUhBVklPUiwgJnZhbHVlKTsKKworICAgIEVHTGludCBlcnJvciA9IGVnbEdldEVycm9yKCk7CisgICAgaWYgKGVycm9yICE9IEVHTF9TVUNDRVNTKSB7CisgICAgICAgIFJFTkRFUkVSX0xPR0QoIkNvdWxkIG5vdCBxdWVyeSBidWZmZXIgcHJlc2VydmVkIHN3YXAgYmVoYXZpb3IgKCV4KSIsIGVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3IgPT0gRUdMX1NVQ0NFU1MgJiYgdmFsdWUgPT0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRyYWNpbmcgYW5kIGRlYnVnZ2luZworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgYm9vbCBhbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcl9sb2FkUHJvcGVydGllcyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eikgeworICAgIGlmICh1aXJlbmRlcmVyOjpDYWNoZXM6Omhhc0luc3RhbmNlKCkpIHsKKyAgICAgICAgcmV0dXJuIHVpcmVuZGVyZXI6OkNhY2hlczo6Z2V0SW5zdGFuY2UoKS5pbml0UHJvcGVydGllcygpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTFJlbmRlcmVyX2JlZ2luRnJhbWUoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCisgICAgICAgIGppbnRBcnJheSBzaXplKSB7CisKKyAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBlZ2xHZXRDdXJyZW50RGlzcGxheSgpOworICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKTsKKworICAgIGlmIChzaXplKSB7CisgICAgICAgIEVHTGludCB2YWx1ZTsKKyAgICAgICAgamludCogc3RvcmFnZSA9IGVudi0+R2V0SW50QXJyYXlFbGVtZW50cyhzaXplLCBOVUxMKTsKKworICAgICAgICBlZ2xRdWVyeVN1cmZhY2UoZGlzcGxheSwgc3VyZmFjZSwgRUdMX1dJRFRILCAmdmFsdWUpOworICAgICAgICBzdG9yYWdlWzBdID0gdmFsdWU7CisKKyAgICAgICAgZWdsUXVlcnlTdXJmYWNlKGRpc3BsYXksIHN1cmZhY2UsIEVHTF9IRUlHSFQsICZ2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2VbMV0gPSB2YWx1ZTsKKworICAgICAgICBlbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKHNpemUsIHN0b3JhZ2UsIDApOworICAgIH0KKworICAgIGVnbEJlZ2luRnJhbWUoZGlzcGxheSwgc3VyZmFjZSk7Cit9CisKK3N0YXRpYyBqbG9uZyBhbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcl9nZXRTeXN0ZW1UaW1lKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6KSB7CisgICAgaWYgKHVpcmVuZGVyZXI6OkV4dGVuc2lvbnM6OmdldEluc3RhbmNlKCkuaGFzTnZTeXN0ZW1UaW1lKCkpIHsKKyAgICAgICAgcmV0dXJuIGVnbEdldFN5c3RlbVRpbWVOVigpOworICAgIH0KKyAgICByZXR1cm4gc3lzdGVtVGltZShTWVNURU1fVElNRV9NT05PVE9OSUMpOworfQorCisjZW5kaWYgLy8gVVNFX09QRU5HTF9SRU5ERVJFUgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTaGFkZXJzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTFJlbmRlcmVyX3NldHVwU2hhZGVyc0Rpc2tDYWNoZShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKKyAgICAgICAganN0cmluZyBkaXNrQ2FjaGVQYXRoKSB7CisKKyAgICBjb25zdCBjaGFyKiBjYWNoZUFycmF5ID0gZW52LT5HZXRTdHJpbmdVVEZDaGFycyhkaXNrQ2FjaGVQYXRoLCBOVUxMKTsKKyAgICBlZ2xfY2FjaGVfdDo6Z2V0KCktPnNldENhY2hlRmlsZW5hbWUoY2FjaGVBcnJheSk7CisgICAgZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZGlza0NhY2hlUGF0aCwgY2FjaGVBcnJheSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEpOSSBHbHVlCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NvbnN0IGNoYXIqIGNvbnN0IGtDbGFzc1BhdGhOYW1lID0gImFuZHJvaWQvdmlldy9HTFJlbmRlcmVyIjsKKworc3RhdGljIEpOSU5hdGl2ZU1ldGhvZCBnTWV0aG9kc1tdID0geworI2lmZGVmIFVTRV9PUEVOR0xfUkVOREVSRVIKKyAgICB7ICJpc0JhY2tCdWZmZXJQcmVzZXJ2ZWQiLCAiKClaIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19HTFJlbmRlcmVyX2lzQmFja0J1ZmZlclByZXNlcnZlZCB9LAorICAgIHsgInByZXNlcnZlQmFja0J1ZmZlciIsICAgICIoKVoiLCAgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMUmVuZGVyZXJfcHJlc2VydmVCYWNrQnVmZmVyIH0sCisgICAgeyAibG9hZFByb3BlcnRpZXMiLCAgICAgICAgIigpWiIsICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcl9sb2FkUHJvcGVydGllcyB9LAorCisgICAgeyAiYmVnaW5GcmFtZSIsICAgICAgICAgICAgIihbSSlWIiwgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcl9iZWdpbkZyYW1lIH0sCisKKyAgICB7ICJnZXRTeXN0ZW1UaW1lIiwgICAgICAgICAiKClKIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19HTFJlbmRlcmVyX2dldFN5c3RlbVRpbWUgfSwKKyNlbmRpZgorCisgICAgeyAic2V0dXBTaGFkZXJzRGlza0NhY2hlIiwgIihMamF2YS9sYW5nL1N0cmluZzspViIsCisgICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTFJlbmRlcmVyX3NldHVwU2hhZGVyc0Rpc2tDYWNoZSB9LAorfTsKKworaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19HTFJlbmRlcmVyKEpOSUVudiogZW52KSB7CisgICAgcmV0dXJuIEFuZHJvaWRSdW50aW1lOjpyZWdpc3Rlck5hdGl2ZU1ldGhvZHMoZW52LCBrQ2xhc3NQYXRoTmFtZSwgZ01ldGhvZHMsIE5FTEVNKGdNZXRob2RzKSk7Cit9CisKK307CmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlci5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3OWZiZTIuLjAwMDAwMDAKLS0tIGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X0hhcmR3YXJlUmVuZGVyZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIkhhcmR3YXJlUmVuZGVyZXIiCi0KLSNpbmNsdWRlICJqbmkuaCIKLSNpbmNsdWRlIDxuYXRpdmVoZWxwZXIvSk5JSGVscC5oPgotI2luY2x1ZGUgPGFuZHJvaWRfcnVudGltZS9BbmRyb2lkUnVudGltZS5oPgotCi0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KLSNpbmNsdWRlIDxFR0wvZWdsX2NhY2hlLmg+Ci0KLSNpbmNsdWRlIDx1dGlscy9UaW1lcnMuaD4KLQotI2luY2x1ZGUgPENhY2hlcy5oPgotI2luY2x1ZGUgPEV4dGVuc2lvbnMuaD4KLQotI2lmZGVmIFVTRV9PUEVOR0xfUkVOREVSRVIKLSAgICBFR0xBUEkgdm9pZCBFR0xBUElFTlRSWSBlZ2xCZWdpbkZyYW1lKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UpOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyoqCi0gKiBOb3RlOiBPcGVuR0xSZW5kZXJlciBKTkkgbGF5ZXIgaXMgZ2VuZXJhdGVkIGFuZCBjb21waWxlZCBvbmx5IG9uIHN1cHBvcnRlZAotICogICAgICAgZGV2aWNlcy4gVGhpcyBtZWFucyBhbGwgdGhlIGxvZ2ljIG11c3QgYmUgY29tcGlsZWQgb25seSB3aGVuIHRoZQotICogICAgICAgcHJlcHJvY2Vzc29yIHZhcmlhYmxlIFVTRV9PUEVOR0xfUkVOREVSRVIgaXMgZGVmaW5lZC4KLSAqLwotI2lmZGVmIFVTRV9PUEVOR0xfUkVOREVSRVIKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVmaW5lcwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBEZWJ1ZwotI2RlZmluZSBERUJVR19SRU5ERVJFUiAwCi0KLS8vIERlYnVnCi0jaWYgREVCVUdfUkVOREVSRVIKLSAgICAjZGVmaW5lIFJFTkRFUkVSX0xPR0QoLi4uKSBBTE9HRChfX1ZBX0FSR1NfXykKLSNlbHNlCi0gICAgI2RlZmluZSBSRU5ERVJFUl9MT0dEKC4uLikKLSNlbmRpZgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTdXJmYWNlIGFuZCBkaXNwbGF5IG1hbmFnZW1lbnQKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGpib29sZWFuIGFuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyX3ByZXNlcnZlQmFja0J1ZmZlcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eikgewotICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IGVnbEdldEN1cnJlbnREaXNwbGF5KCk7Ci0gICAgRUdMU3VyZmFjZSBzdXJmYWNlID0gZWdsR2V0Q3VycmVudFN1cmZhY2UoRUdMX0RSQVcpOwotCi0gICAgZWdsR2V0RXJyb3IoKTsKLSAgICBlZ2xTdXJmYWNlQXR0cmliKGRpc3BsYXksIHN1cmZhY2UsIEVHTF9TV0FQX0JFSEFWSU9SLCBFR0xfQlVGRkVSX1BSRVNFUlZFRCk7Ci0KLSAgICBFR0xpbnQgZXJyb3IgPSBlZ2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJvciAhPSBFR0xfU1VDQ0VTUykgewotICAgICAgICBSRU5ERVJFUl9MT0dEKCJDb3VsZCBub3QgZW5hYmxlIGJ1ZmZlciBwcmVzZXJ2ZWQgc3dhcCBiZWhhdmlvciAoJXgpIiwgZXJyb3IpOwotICAgIH0KLQotICAgIHJldHVybiBlcnJvciA9PSBFR0xfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGpib29sZWFuIGFuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyX2lzQmFja0J1ZmZlclByZXNlcnZlZChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eikgewotICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IGVnbEdldEN1cnJlbnREaXNwbGF5KCk7Ci0gICAgRUdMU3VyZmFjZSBzdXJmYWNlID0gZWdsR2V0Q3VycmVudFN1cmZhY2UoRUdMX0RSQVcpOwotICAgIEVHTGludCB2YWx1ZTsKLQotICAgIGVnbEdldEVycm9yKCk7Ci0gICAgZWdsUXVlcnlTdXJmYWNlKGRpc3BsYXksIHN1cmZhY2UsIEVHTF9TV0FQX0JFSEFWSU9SLCAmdmFsdWUpOwotCi0gICAgRUdMaW50IGVycm9yID0gZWdsR2V0RXJyb3IoKTsKLSAgICBpZiAoZXJyb3IgIT0gRUdMX1NVQ0NFU1MpIHsKLSAgICAgICAgUkVOREVSRVJfTE9HRCgiQ291bGQgbm90IHF1ZXJ5IGJ1ZmZlciBwcmVzZXJ2ZWQgc3dhcCBiZWhhdmlvciAoJXgpIiwgZXJyb3IpOwotICAgIH0KLQotICAgIHJldHVybiBlcnJvciA9PSBFR0xfU1VDQ0VTUyAmJiB2YWx1ZSA9PSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVHJhY2luZyBhbmQgZGVidWdnaW5nCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBib29sIGFuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyX2xvYWRQcm9wZXJ0aWVzKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6KSB7Ci0gICAgaWYgKHVpcmVuZGVyZXI6OkNhY2hlczo6aGFzSW5zdGFuY2UoKSkgewotICAgICAgICByZXR1cm4gdWlyZW5kZXJlcjo6Q2FjaGVzOjpnZXRJbnN0YW5jZSgpLmluaXRQcm9wZXJ0aWVzKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0hhcmR3YXJlUmVuZGVyZXJfYmVnaW5GcmFtZShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAgamludEFycmF5IHNpemUpIHsKLQotICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IGVnbEdldEN1cnJlbnREaXNwbGF5KCk7Ci0gICAgRUdMU3VyZmFjZSBzdXJmYWNlID0gZWdsR2V0Q3VycmVudFN1cmZhY2UoRUdMX0RSQVcpOwotCi0gICAgaWYgKHNpemUpIHsKLSAgICAgICAgRUdMaW50IHZhbHVlOwotICAgICAgICBqaW50KiBzdG9yYWdlID0gZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKHNpemUsIE5VTEwpOwotCi0gICAgICAgIGVnbFF1ZXJ5U3VyZmFjZShkaXNwbGF5LCBzdXJmYWNlLCBFR0xfV0lEVEgsICZ2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2VbMF0gPSB2YWx1ZTsKLQotICAgICAgICBlZ2xRdWVyeVN1cmZhY2UoZGlzcGxheSwgc3VyZmFjZSwgRUdMX0hFSUdIVCwgJnZhbHVlKTsKLSAgICAgICAgc3RvcmFnZVsxXSA9IHZhbHVlOwotCi0gICAgICAgIGVudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoc2l6ZSwgc3RvcmFnZSwgMCk7Ci0gICAgfQotCi0gICAgZWdsQmVnaW5GcmFtZShkaXNwbGF5LCBzdXJmYWNlKTsKLX0KLQotc3RhdGljIGpsb25nIGFuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyX2dldFN5c3RlbVRpbWUoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenopIHsKLSAgICBpZiAodWlyZW5kZXJlcjo6RXh0ZW5zaW9uczo6Z2V0SW5zdGFuY2UoKS5oYXNOdlN5c3RlbVRpbWUoKSkgewotICAgICAgICByZXR1cm4gZWdsR2V0U3lzdGVtVGltZU5WKCk7Ci0gICAgfQotICAgIHJldHVybiBzeXN0ZW1UaW1lKFNZU1RFTV9USU1FX01PTk9UT05JQyk7Ci19Ci0KLSNlbmRpZiAvLyBVU0VfT1BFTkdMX1JFTkRFUkVSCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNoYWRlcnMKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0hhcmR3YXJlUmVuZGVyZXJfc2V0dXBTaGFkZXJzRGlza0NhY2hlKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICBqc3RyaW5nIGRpc2tDYWNoZVBhdGgpIHsKLQotICAgIGNvbnN0IGNoYXIqIGNhY2hlQXJyYXkgPSBlbnYtPkdldFN0cmluZ1VURkNoYXJzKGRpc2tDYWNoZVBhdGgsIE5VTEwpOwotICAgIGVnbF9jYWNoZV90OjpnZXQoKS0+c2V0Q2FjaGVGaWxlbmFtZShjYWNoZUFycmF5KTsKLSAgICBlbnYtPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhkaXNrQ2FjaGVQYXRoLCBjYWNoZUFycmF5KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSk5JIEdsdWUKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY29uc3QgY2hhciogY29uc3Qga0NsYXNzUGF0aE5hbWUgPSAiYW5kcm9pZC92aWV3L0hhcmR3YXJlUmVuZGVyZXIiOwotCi1zdGF0aWMgSk5JTmF0aXZlTWV0aG9kIGdNZXRob2RzW10gPSB7Ci0jaWZkZWYgVVNFX09QRU5HTF9SRU5ERVJFUgotICAgIHsgIm5Jc0JhY2tCdWZmZXJQcmVzZXJ2ZWQiLCAiKClaIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyX2lzQmFja0J1ZmZlclByZXNlcnZlZCB9LAotICAgIHsgIm5QcmVzZXJ2ZUJhY2tCdWZmZXIiLCAgICAiKClaIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyX3ByZXNlcnZlQmFja0J1ZmZlciB9LAotICAgIHsgIm5Mb2FkUHJvcGVydGllcyIsICAgICAgICAiKClaIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyX2xvYWRQcm9wZXJ0aWVzIH0sCi0KLSAgICB7ICJuQmVnaW5GcmFtZSIsICAgICAgICAgICAgIihbSSlWIiwgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlcl9iZWdpbkZyYW1lIH0sCi0KLSAgICB7ICJuR2V0U3lzdGVtVGltZSIsICAgICAgICAgIigpSiIsICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlcl9nZXRTeXN0ZW1UaW1lIH0sCi0jZW5kaWYKLQotICAgIHsgIm5TZXR1cFNoYWRlcnNEaXNrQ2FjaGUiLCAiKExqYXZhL2xhbmcvU3RyaW5nOylWIiwKLSAgICAgICAgICAgICh2b2lkKikgYW5kcm9pZF92aWV3X0hhcmR3YXJlUmVuZGVyZXJfc2V0dXBTaGFkZXJzRGlza0NhY2hlIH0sCi19OwotCi1pbnQgcmVnaXN0ZXJfYW5kcm9pZF92aWV3X0hhcmR3YXJlUmVuZGVyZXIoSk5JRW52KiBlbnYpIHsKLSAgICByZXR1cm4gQW5kcm9pZFJ1bnRpbWU6OnJlZ2lzdGVyTmF0aXZlTWV0aG9kcyhlbnYsIGtDbGFzc1BhdGhOYW1lLCBnTWV0aG9kcywgTkVMRU0oZ01ldGhvZHMpKTsKLX0KLQotfTsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19SZW1vdGVHTFJlbmRlcmVyLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19SZW1vdGVHTFJlbmRlcmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmEyMDNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qbmkvYW5kcm9pZF92aWV3X1JlbW90ZUdMUmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgIlJlbW90ZUdMUmVuZGVyZXIiCisKKyNpbmNsdWRlICJqbmkuaCIKKyNpbmNsdWRlIDxuYXRpdmVoZWxwZXIvSk5JSGVscC5oPgorCisjaW5jbHVkZSA8dXRpbHMvU3Ryb25nUG9pbnRlci5oPgorI2luY2x1ZGUgPGFuZHJvaWRfcnVudGltZS9hbmRyb2lkX3ZpZXdfU3VyZmFjZS5oPgorI2luY2x1ZGUgPGFuZHJvaWRfcnVudGltZS9BbmRyb2lkUnVudGltZS5oPgorI2luY2x1ZGUgPHJlbmRlcnRocmVhZC9DYW52YXNDb250ZXh0Lmg+CisjaW5jbHVkZSA8c3lzdGVtL3dpbmRvdy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKyNpZmRlZiBVU0VfT1BFTkdMX1JFTkRFUkVSCisKKyNkZWZpbmUgQ0hFQ0tfQ09OVEVYVChjKSBpZiAoIWMpIEFMT0dFKCJOdWxsIGNvbnRleHQgcGFzc2VkIHRvICVzISIsIF9fZnVuY19fICkKKworbmFtZXNwYWNlIFJUID0gYW5kcm9pZDo6dWlyZW5kZXJlcjo6cmVuZGVydGhyZWFkOworCitzdGF0aWMgamxvbmcgYW5kcm9pZF92aWV3X1JlbW90ZUdMUmVuZGVyZXJfY3JlYXRlQ29udGV4dChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eikgeworICAgIFJUOjpDYW52YXNDb250ZXh0KiBjb250ZXh0ID0gbmV3IFJUOjpDYW52YXNDb250ZXh0KCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8amxvbmc+KGNvbnRleHQpOworfQorCitzdGF0aWMgamJvb2xlYW4gYW5kcm9pZF92aWV3X1JlbW90ZUdMUmVuZGVyZXJfdXNlUEJ1ZmZlclN1cmZhY2UoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenopIHsKKyAgICByZXR1cm4gUlQ6OkNhbnZhc0NvbnRleHQ6OnVzZUdsb2JhbFBCdWZmZXJTdXJmYWNlKCk7Cit9CisKK3N0YXRpYyBqYm9vbGVhbiBhbmRyb2lkX3ZpZXdfUmVtb3RlR0xSZW5kZXJlcl9zZXRTdXJmYWNlKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAorICAgICAgICBqbG9uZyBqY29udGV4dHB0ciwgam9iamVjdCBqc3VyZmFjZSkgeworICAgIFJUOjpDYW52YXNDb250ZXh0KiBjb250ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxSVDo6Q2FudmFzQ29udGV4dCo+KGpjb250ZXh0cHRyKTsKKyAgICBDSEVDS19DT05URVhUKGNvbnRleHQpOworICAgIHNwPEFOYXRpdmVXaW5kb3c+IHdpbmRvdzsKKyAgICBpZiAoanN1cmZhY2UpIHsKKyAgICAgICAgd2luZG93ID0gYW5kcm9pZF92aWV3X1N1cmZhY2VfZ2V0TmF0aXZlV2luZG93KGVudiwganN1cmZhY2UpOworICAgIH0KKyAgICByZXR1cm4gY29udGV4dC0+c2V0U3VyZmFjZSh3aW5kb3cuZ2V0KCkpOworfQorCitzdGF0aWMgamJvb2xlYW4gYW5kcm9pZF92aWV3X1JlbW90ZUdMUmVuZGVyZXJfc3dhcEJ1ZmZlcnMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCisgICAgICAgIGpsb25nIGpjb250ZXh0cHRyKSB7CisgICAgUlQ6OkNhbnZhc0NvbnRleHQqIGNvbnRleHQgPSByZWludGVycHJldF9jYXN0PFJUOjpDYW52YXNDb250ZXh0Kj4oamNvbnRleHRwdHIpOworICAgIENIRUNLX0NPTlRFWFQoY29udGV4dCk7CisgICAgcmV0dXJuIGNvbnRleHQtPnN3YXBCdWZmZXJzKCk7Cit9CisKK3N0YXRpYyBqYm9vbGVhbiBhbmRyb2lkX3ZpZXdfUmVtb3RlR0xSZW5kZXJlcl9tYWtlQ3VycmVudChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKKyAgICAgICAgamxvbmcgamNvbnRleHRwdHIpIHsKKyAgICBSVDo6Q2FudmFzQ29udGV4dCogY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UlQ6OkNhbnZhc0NvbnRleHQqPihqY29udGV4dHB0cik7CisgICAgQ0hFQ0tfQ09OVEVYVChjb250ZXh0KTsKKyAgICByZXR1cm4gY29udGV4dC0+bWFrZUN1cnJlbnQoKTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X1JlbW90ZUdMUmVuZGVyZXJfZGVzdHJveUNvbnRleHQoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCisgICAgICAgIGpsb25nIGpjb250ZXh0cHRyKSB7CisgICAgUlQ6OkNhbnZhc0NvbnRleHQqIGNvbnRleHQgPSByZWludGVycHJldF9jYXN0PFJUOjpDYW52YXNDb250ZXh0Kj4oamNvbnRleHRwdHIpOworICAgIENIRUNLX0NPTlRFWFQoY29udGV4dCk7CisgICAgZGVsZXRlIGNvbnRleHQ7Cit9CisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSk5JIEdsdWUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY29uc3QgY2hhciogY29uc3Qga0NsYXNzUGF0aE5hbWUgPSAiYW5kcm9pZC92aWV3L1JlbW90ZUdMUmVuZGVyZXIiOworCitzdGF0aWMgSk5JTmF0aXZlTWV0aG9kIGdNZXRob2RzW10gPSB7CisjaWZkZWYgVVNFX09QRU5HTF9SRU5ERVJFUgorICAgIHsgImNyZWF0ZUNvbnRleHQiLCAiKClKIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19SZW1vdGVHTFJlbmRlcmVyX2NyZWF0ZUNvbnRleHQgfSwKKyAgICB7ICJ1c2VQQnVmZmVyU3VyZmFjZSIsICIoKVoiLCAgICh2b2lkKikgYW5kcm9pZF92aWV3X1JlbW90ZUdMUmVuZGVyZXJfdXNlUEJ1ZmZlclN1cmZhY2UgfSwKKyAgICB7ICJzZXRTdXJmYWNlIiwgIihKTGFuZHJvaWQvdmlldy9TdXJmYWNlOylaIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19SZW1vdGVHTFJlbmRlcmVyX3NldFN1cmZhY2UgfSwKKyAgICB7ICJzd2FwQnVmZmVycyIsICIoSilaIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19SZW1vdGVHTFJlbmRlcmVyX3N3YXBCdWZmZXJzIH0sCisgICAgeyAibWFrZUN1cnJlbnQiLCAiKEopWiIsICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfUmVtb3RlR0xSZW5kZXJlcl9tYWtlQ3VycmVudCB9LAorICAgIHsgImRlc3Ryb3lDb250ZXh0IiwgIihKKVYiLCAgICh2b2lkKikgYW5kcm9pZF92aWV3X1JlbW90ZUdMUmVuZGVyZXJfZGVzdHJveUNvbnRleHQgfSwKKyNlbmRpZgorfTsKKworaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19SZW1vdGVHTFJlbmRlcmVyKEpOSUVudiogZW52KSB7CisgICAgcmV0dXJuIEFuZHJvaWRSdW50aW1lOjpyZWdpc3Rlck5hdGl2ZU1ldGhvZHMoZW52LCBrQ2xhc3NQYXRoTmFtZSwgZ01ldGhvZHMsIE5FTEVNKGdNZXRob2RzKSk7Cit9CisKK307IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfU3VyZmFjZS5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfU3VyZmFjZS5jcHAKaW5kZXggMTg2ODQ2OS4uZGQxNzhkOCAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X1N1cmZhY2UuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19TdXJmYWNlLmNwcApAQCAtMzksNiArMzksNyBAQAogCiAjaW5jbHVkZSA8U2tDYW52YXMuaD4KICNpbmNsdWRlIDxTa0JpdG1hcC5oPgorI2luY2x1ZGUgPFNrSW1hZ2UuaD4KICNpbmNsdWRlIDxTa1JlZ2lvbi5oPgogCiAjaW5jbHVkZSA8dXRpbHMvbWlzYy5oPgpAQCAtMTc4LDcgKzE3OSw4IEBACiBzdGF0aWMgaW5saW5lIFNrQml0bWFwOjpDb25maWcgY29udmVydFBpeGVsRm9ybWF0KFBpeGVsRm9ybWF0IGZvcm1hdCkgewogICAgIC8qIG5vdGU6IGlmIFBJWEVMX0ZPUk1BVF9SR0JYXzg4ODggbWVhbnMgdGhhdCBhbGwgYWxwaGEgYnl0ZXMgYXJlIDB4RkYsIHRoZW4KICAgICAgICAgd2UgY2FuIG1hcCB0byBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIGFuZCBvcHRpb25hbGx5IGNhbGwKLSAgICAgICAgYml0bWFwLnNldElzT3BhcXVlKHRydWUpIG9uIHRoZSByZXN1bHRpbmcgU2tCaXRtYXAgKGFzIGFuIGFjY2VsZXJhdG9yKQorICAgICAgICBiaXRtYXAuc2V0QWxwaGFUeXBlKGtPcGFxdWVfU2tBbHBoYVR5cGUpIG9uIHRoZSByZXN1bHRpbmcgU2tCaXRtYXAKKyAgICAgICAgKGFzIGFuIGFjY2VsZXJhdG9yKQogICAgICovCiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIFBJWEVMX0ZPUk1BVF9SR0JYXzg4ODg6ICAgIHJldHVybiBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWc7CkBAIC0yMzQsNyArMjM2LDcgQEAKICAgICBzc2l6ZV90IGJwciA9IG91dEJ1ZmZlci5zdHJpZGUgKiBieXRlc1BlclBpeGVsKG91dEJ1ZmZlci5mb3JtYXQpOwogICAgIGJpdG1hcC5zZXRDb25maWcoY29udmVydFBpeGVsRm9ybWF0KG91dEJ1ZmZlci5mb3JtYXQpLCBvdXRCdWZmZXIud2lkdGgsIG91dEJ1ZmZlci5oZWlnaHQsIGJwcik7CiAgICAgaWYgKG91dEJ1ZmZlci5mb3JtYXQgPT0gUElYRUxfRk9STUFUX1JHQlhfODg4OCkgewotICAgICAgICBiaXRtYXAuc2V0SXNPcGFxdWUodHJ1ZSk7CisgICAgICAgIGJpdG1hcC5zZXRBbHBoYVR5cGUoa09wYXF1ZV9Ta0FscGhhVHlwZSk7CiAgICAgfQogICAgIGlmIChvdXRCdWZmZXIud2lkdGggPiAwICYmIG91dEJ1ZmZlci5oZWlnaHQgPiAwKSB7CiAgICAgICAgIGJpdG1hcC5zZXRQaXhlbHMob3V0QnVmZmVyLmJpdHMpOwpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X1N1cmZhY2VDb250cm9sLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19TdXJmYWNlQ29udHJvbC5jcHAKaW5kZXggNjdlYWRlOC4uMTJhY2ZlMSAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X1N1cmZhY2VDb250cm9sLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfU3VyZmFjZUNvbnRyb2wuY3BwCkBAIC0xNTAsNyArMTUwLDggQEAKIHN0YXRpYyBpbmxpbmUgU2tCaXRtYXA6OkNvbmZpZyBjb252ZXJ0UGl4ZWxGb3JtYXQoUGl4ZWxGb3JtYXQgZm9ybWF0KSB7CiAgICAgLyogbm90ZTogaWYgUElYRUxfRk9STUFUX1JHQlhfODg4OCBtZWFucyB0aGF0IGFsbCBhbHBoYSBieXRlcyBhcmUgMHhGRiwgdGhlbgogICAgICAgICB3ZSBjYW4gbWFwIHRvIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgYW5kIG9wdGlvbmFsbHkgY2FsbAotICAgICAgICBiaXRtYXAuc2V0SXNPcGFxdWUodHJ1ZSkgb24gdGhlIHJlc3VsdGluZyBTa0JpdG1hcCAoYXMgYW4gYWNjZWxlcmF0b3IpCisgICAgICAgIGJpdG1hcC5zZXRBbHBoYVR5cGUoa09wYXF1ZV9Ta0FscGhhVHlwZSkgb24gdGhlIHJlc3VsdGluZyBTa0JpdG1hcAorICAgICAgICAoYXMgYW4gYWNjZWxlcmF0b3IpCiAgICAgKi8KICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgUElYRUxfRk9STUFUX1JHQlhfODg4ODogICAgcmV0dXJuIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZzsKQEAgLTE4Myw3ICsxODQsNyBAQAogICAgIFNrQml0bWFwKiBiaXRtYXAgPSBuZXcgU2tCaXRtYXAoKTsKICAgICBiaXRtYXAtPnNldENvbmZpZyhjb252ZXJ0UGl4ZWxGb3JtYXQoZiksIHcsIGgsIGJwcik7CiAgICAgaWYgKGYgPT0gUElYRUxfRk9STUFUX1JHQlhfODg4OCkgewotICAgICAgICBiaXRtYXAtPnNldElzT3BhcXVlKHRydWUpOworICAgICAgICBiaXRtYXAtPnNldEFscGhhVHlwZShrT3BhcXVlX1NrQWxwaGFUeXBlKTsKICAgICB9CiAKICAgICBpZiAodyA+IDAgJiYgaCA+IDApIHsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19UZXh0dXJlVmlldy5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfVGV4dHVyZVZpZXcuY3BwCmluZGV4IDBmNDI5MDA1Li43YTRhMjBhIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfVGV4dHVyZVZpZXcuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19UZXh0dXJlVmlldy5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPFNrQml0bWFwLmg+CiAjaW5jbHVkZSA8U2tDYW52YXMuaD4KKyNpbmNsdWRlIDxTa0ltYWdlLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIApAQCAtMTU2LDcgKzE1Nyw3IEBACiAgICAgYml0bWFwLnNldENvbmZpZyhjb252ZXJ0UGl4ZWxGb3JtYXQoYnVmZmVyLmZvcm1hdCksIGJ1ZmZlci53aWR0aCwgYnVmZmVyLmhlaWdodCwgYnl0ZXNDb3VudCk7CiAKICAgICBpZiAoYnVmZmVyLmZvcm1hdCA9PSBXSU5ET1dfRk9STUFUX1JHQlhfODg4OCkgewotICAgICAgICBiaXRtYXAuc2V0SXNPcGFxdWUodHJ1ZSk7CisgICAgICAgIGJpdG1hcC5zZXRBbHBoYVR5cGUoa09wYXF1ZV9Ta0FscGhhVHlwZSk7CiAgICAgfQogCiAgICAgaWYgKGJ1ZmZlci53aWR0aCA+IDAgJiYgYnVmZmVyLmhlaWdodCA+IDApIHsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDc3ZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qbmkvYW5kcm9pZF92aWV3X1RocmVhZGVkUmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgIlRocmVhZGVkUmVuZGVyZXIiCisKKyNpbmNsdWRlICJqbmkuaCIKKyNpbmNsdWRlIDxuYXRpdmVoZWxwZXIvSk5JSGVscC5oPgorI2luY2x1ZGUgPGFuZHJvaWRfcnVudGltZS9BbmRyb2lkUnVudGltZS5oPgorCisjaW5jbHVkZSA8cmVuZGVydGhyZWFkL1JlbmRlclRhc2suaD4KKyNpbmNsdWRlIDxyZW5kZXJ0aHJlYWQvUmVuZGVyVGhyZWFkLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworI2lmZGVmIFVTRV9PUEVOR0xfUkVOREVSRVIKKworbmFtZXNwYWNlIFJUID0gYW5kcm9pZDo6dWlyZW5kZXJlcjo6cmVuZGVydGhyZWFkOworCitzdGF0aWMgam1ldGhvZElEIGdSdW5uYWJsZU1ldGhvZDsKKworY2xhc3MgSmF2YVRhc2sgOiBwdWJsaWMgUlQ6OlJlbmRlclRhc2sgeworcHVibGljOgorICAgIEphdmFUYXNrKEpOSUVudiogZW52LCBqb2JqZWN0IGpydW5uYWJsZSkgeworICAgICAgICBlbnYtPkdldEphdmFWTSgmbVZtKTsKKyAgICAgICAgbVJ1bm5hYmxlID0gZW52LT5OZXdHbG9iYWxSZWYoanJ1bm5hYmxlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5KYXZhVGFzaygpIHsKKyAgICAgICAgZW52KCktPkRlbGV0ZUdsb2JhbFJlZihtUnVubmFibGUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBydW4oKSB7CisgICAgICAgIGVudigpLT5DYWxsVm9pZE1ldGhvZChtUnVubmFibGUsIGdSdW5uYWJsZU1ldGhvZCk7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICBKTklFbnYqIGVudigpIHsKKyAgICAgICAgSk5JRW52KiBlbnY7CisgICAgICAgIGlmIChtVm0tPkdldEVudihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmVudiksIEpOSV9WRVJTSU9OXzFfNikgIT0gSk5JX09LKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZW52OworICAgIH0KKworICAgIEphdmFWTSogbVZtOworICAgIGpvYmplY3QgbVJ1bm5hYmxlOworfTsKKworc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X1RocmVhZGVkUmVuZGVyZXJfcG9zdFRvUmVuZGVyVGhyZWFkKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAorICAgICAgICBqb2JqZWN0IGpydW5uYWJsZSkgeworICAgIFJUOjpSZW5kZXJUYXNrKiB0YXNrID0gbmV3IEphdmFUYXNrKGVudiwganJ1bm5hYmxlKTsKKyAgICBSVDo6UmVuZGVyVGhyZWFkOjpnZXRJbnN0YW5jZSgpLnF1ZXVlKHRhc2spOworfQorCisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSk5JIEdsdWUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY29uc3QgY2hhciogY29uc3Qga0NsYXNzUGF0aE5hbWUgPSAiYW5kcm9pZC92aWV3L1RocmVhZGVkUmVuZGVyZXIiOworCitzdGF0aWMgSk5JTmF0aXZlTWV0aG9kIGdNZXRob2RzW10gPSB7CisjaWZkZWYgVVNFX09QRU5HTF9SRU5ERVJFUgorICAgIHsgInBvc3RUb1JlbmRlclRocmVhZCIsICIoTGphdmEvbGFuZy9SdW5uYWJsZTspViIsICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfVGhyZWFkZWRSZW5kZXJlcl9wb3N0VG9SZW5kZXJUaHJlYWQgfSwKKyNlbmRpZgorfTsKKworaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyKEpOSUVudiogZW52KSB7CisjaWZkZWYgVVNFX09QRU5HTF9SRU5ERVJFUgorICAgIGpjbGFzcyBjbHMgPSBlbnYtPkZpbmRDbGFzcygiamF2YS9sYW5nL1J1bm5hYmxlIik7CisgICAgZ1J1bm5hYmxlTWV0aG9kID0gZW52LT5HZXRNZXRob2RJRChjbHMsICJydW4iLCAiKClWIik7CisgICAgZW52LT5EZWxldGVMb2NhbFJlZihjbHMpOworI2VuZGlmCisgICAgcmV0dXJuIEFuZHJvaWRSdW50aW1lOjpyZWdpc3Rlck5hdGl2ZU1ldGhvZHMoZW52LCBrQ2xhc3NQYXRoTmFtZSwgZ01ldGhvZHMsIE5FTEVNKGdNZXRob2RzKSk7Cit9CisKK307IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9BbmRyb2lkTWFuaWZlc3QueG1sIGIvY29yZS9yZXMvQW5kcm9pZE1hbmlmZXN0LnhtbAppbmRleCBlNTQ2MTE3Li4xM2Y1ZTFjIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL2NvcmUvcmVzL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTgwOSw4ICs4MDksMTUgQEAKICAgICA8IS0tIEFsbG93cyBhY2Nlc3MgdG8gdGhlIGxvb3AgcmFkaW8gKEFuZHJvaWRASG9tZSBtZXNoIG5ldHdvcmspIGRldmljZS4KIAlAaGlkZSAtLT4KICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5MT09QX1JBRElPIgotCWFuZHJvaWQ6cGVybWlzc2lvbkdyb3VwPSJhbmRyb2lkLnBlcm1pc3Npb24tZ3JvdXAuTkVUV09SSyIKLQlhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlfHN5c3RlbSIgLz4KKwkgICAgYW5kcm9pZDpwZXJtaXNzaW9uR3JvdXA9ImFuZHJvaWQucGVybWlzc2lvbi1ncm91cC5ORVRXT1JLIgorCSAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlfHN5c3RlbSIgLz4KKworICAgIDwhLS0gQWxsb3dzIGZvciB0aGUgTkZDIHByb2Nlc3MgdG8gdW5sb2NrIHRoZSBkZXZpY2UKKyAgICAgICAgIEBoaWRlIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSB0aGUgTmZjIGFwaworICAgIC0tPgorICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLk5GQ19VTkxPQ0siCisgICAgICAgIGFuZHJvaWQ6cGVybWlzc2lvbkdyb3VwPSJhbmRyb2lkLnBlcm1pc3Npb24tZ3JvdXAuU1lTVEVNX1RPT0xTIgorICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlIiAvPgogCiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDwhLS0gUGVybWlzc2lvbnMgZm9yIGFjY2Vzc2luZyBhY2NvdW50cyAtLT4KQEAgLTk4Miw2ICs5ODksMTQgQEAKICAgICAgICAgYW5kcm9pZDpwZXJtaXNzaW9uR3JvdXA9ImFuZHJvaWQucGVybWlzc2lvbi1ncm91cC5TWVNURU1fVE9PTFMiCiAgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzaWduYXR1cmUiIC8+CiAKKyAgICA8IS0tIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBjb21tdW5pY2F0ZSB3aXRoIGEgU0lNIGNhcmQgdXNpbmcgbG9naWNhbAorICAgICAgICAgY2hhbm5lbHMuIC0tPgorICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlNJTV9DT01NVU5JQ0FUSU9OIgorICAgICAgICBhbmRyb2lkOnBlcm1pc3Npb25Hcm91cD0iYW5kcm9pZC5wZXJtaXNzaW9uLWdyb3VwLlNZU1RFTV9UT09MUyIKKyAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9wZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIgorICAgICAgICBhbmRyb2lkOmRlc2NyaXB0aW9uPSJAc3RyaW5nL3Blcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIgorICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0iZGFuZ2Vyb3VzIiAvPgorCiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDwhLS0gUGVybWlzc2lvbnMgYXNzb2NpYXRlZCB3aXRoIGF1ZGlvIGNhcHR1cmUgLS0+CiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgpAQCAtMTcwNCw2ICsxNzE5LDE0IEBACiAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvcGVybWxhYl9tYW5hZ2VDYUNlcnRpZmljYXRlcyIKICAgICAgICAgYW5kcm9pZDpkZXNjcmlwdGlvbj0iQHN0cmluZy9wZXJtZGVzY19tYW5hZ2VDYUNlcnRpZmljYXRlcyIgLz4KIAorICAgIDwhLS0gQWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIGRvIGNlcnRhaW4gb3BlcmF0aW9ucyBuZWVkZWQgZm9yCisgICAgICAgICBpbnRlcmFjdGluZyB3aXRoIHRoZSByZWNvdmVyeSAoc3lzdGVtIHVwZGF0ZSkgc3lzdGVtLiAtLT4KKyAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRUNPVkVSWSIKKyAgICAgICAgYW5kcm9pZDpwZXJtaXNzaW9uR3JvdXA9ImFuZHJvaWQucGVybWlzc2lvbi1ncm91cC5TWVNURU1fVE9PTFMiCisgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzaWduYXR1cmV8c3lzdGVtIgorICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL3Blcm1sYWJfcmVjb3ZlcnkiCisgICAgICAgIGFuZHJvaWQ6ZGVzY3JpcHRpb249IkBzdHJpbmcvcGVybWRlc2NfcmVjb3ZlcnkiIC8+CisKICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDwhLS0gUGVybWlzc2lvbnMgZm9yIHNwZWNpYWwgZGV2ZWxvcG1lbnQgdG9vbHMgLS0+CiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTIxMDIsNiArMjEyNSwxMyBAQAogICAgICAgICBhbmRyb2lkOmRlc2NyaXB0aW9uPSJAc3RyaW5nL3Blcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIKICAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InNpZ25hdHVyZXxzeXN0ZW0iIC8+CiAKKyAgICA8IS0tIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byB1c2UgSW5wdXRGbGluZ2VyJ3MgbG93IGxldmVsIGZlYXR1cmVzLgorICAgIDxwPk5vdCBmb3IgdXNlIGJ5IHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucy4gLS0+CisgICAgPHBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX0lOUFVUX0ZMSU5HRVIiCisgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvcGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiCisgICAgICAgIGFuZHJvaWQ6ZGVzY3JpcHRpb249IkBzdHJpbmcvcGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIgorICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlIiAvPgorCiAgICAgPCEtLSBBbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gY29uZmlndXJlIGFuZCBjb25uZWN0IHRvIFdpZmkgZGlzcGxheXMKICAgICAgICAgIEBoaWRlIC0tPgogICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkNPTkZJR1VSRV9XSUZJX0RJU1BMQVkiCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtaGRwaS9ub3RpZnlfcGFuZWxfbm90aWZpY2F0aW9uX2ljb25fYmcucG5nIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlLWhkcGkvbm90aWZ5X3BhbmVsX25vdGlmaWNhdGlvbl9pY29uX2JnLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzN2EyMi4uMDAwMDAwMAotLS0gYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtaGRwaS9ub3RpZnlfcGFuZWxfbm90aWZpY2F0aW9uX2ljb25fYmcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLWhkcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1oZHBpL3Njcm9sbGJhcl9oYW5kbGVfYWNjZWxlcmF0ZWRfYW5pbTIuOS5wbmcKaW5kZXggNmVkZGMzZi4uZmI5ZTdhYSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLWhkcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZworKysgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtaGRwaS9zY3JvbGxiYXJfaGFuZGxlX2FjY2VsZXJhdGVkX2FuaW0yLjkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1sZHBpL3Njcm9sbGJhcl9oYW5kbGVfYWNjZWxlcmF0ZWRfYW5pbTIuOS5wbmcgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtbGRwaS9zY3JvbGxiYXJfaGFuZGxlX2FjY2VsZXJhdGVkX2FuaW0yLjkucG5nCmluZGV4IDA1NjJjMDMuLmE0Y2EzZTAgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1sZHBpL3Njcm9sbGJhcl9oYW5kbGVfYWNjZWxlcmF0ZWRfYW5pbTIuOS5wbmcKKysrIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlLWxkcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtbWRwaS9ub3RpZnlfcGFuZWxfbm90aWZpY2F0aW9uX2ljb25fYmcucG5nIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlLW1kcGkvbm90aWZ5X3BhbmVsX25vdGlmaWNhdGlvbl9pY29uX2JnLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4Njg3NS4uMDAwMDAwMAotLS0gYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtbWRwaS9ub3RpZnlfcGFuZWxfbm90aWZpY2F0aW9uX2ljb25fYmcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLW1kcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1tZHBpL3Njcm9sbGJhcl9oYW5kbGVfYWNjZWxlcmF0ZWRfYW5pbTIuOS5wbmcKaW5kZXggNzY2ZTRjMC4uNmQ4M2JiNCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLW1kcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZworKysgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtbWRwaS9zY3JvbGxiYXJfaGFuZGxlX2FjY2VsZXJhdGVkX2FuaW0yLjkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS14aGRwaS9ub3RpZnlfcGFuZWxfbm90aWZpY2F0aW9uX2ljb25fYmcucG5nIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlLXhoZHBpL25vdGlmeV9wYW5lbF9ub3RpZmljYXRpb25faWNvbl9iZy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMjhlNjIuLjAwMDAwMDAKLS0tIGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLXhoZHBpL25vdGlmeV9wYW5lbF9ub3RpZmljYXRpb25faWNvbl9iZy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUteGhkcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS14aGRwaS9zY3JvbGxiYXJfaGFuZGxlX2FjY2VsZXJhdGVkX2FuaW0yLjkucG5nCmluZGV4IDNjZjg0YTUuLjcwODU2YzAgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS14aGRwaS9zY3JvbGxiYXJfaGFuZGxlX2FjY2VsZXJhdGVkX2FuaW0yLjkucG5nCisrKyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS14aGRwaS9zY3JvbGxiYXJfaGFuZGxlX2FjY2VsZXJhdGVkX2FuaW0yLjkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9idG5fZGVmYXVsdF9xdWFudHVtLnhtbCBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9idG5fZGVmYXVsdF9xdWFudHVtLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWZmZTNhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2J0bl9kZWZhdWx0X3F1YW50dW0ueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxyZXZlYWwgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KKyAgICA8aXRlbT4KKyAgICAgICAgPHNlbGVjdG9yPgorICAgICAgICAgICAgPGl0ZW0gYW5kcm9pZDpzdGF0ZV93aW5kb3dfZm9jdXNlZD0iZmFsc2UiIGFuZHJvaWQ6c3RhdGVfZW5hYmxlZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvYnRuX2RlZmF1bHRfbm9ybWFsX2hvbG9fbGlnaHQiIC8+CisgICAgICAgICAgICA8aXRlbSBhbmRyb2lkOnN0YXRlX3dpbmRvd19mb2N1c2VkPSJmYWxzZSIgYW5kcm9pZDpzdGF0ZV9lbmFibGVkPSJmYWxzZSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvYnRuX2RlZmF1bHRfZGlzYWJsZWRfaG9sb19saWdodCIgLz4KKyAgICAgICAgICAgIDxpdGVtIGFuZHJvaWQ6c3RhdGVfZm9jdXNlZD0idHJ1ZSIgYW5kcm9pZDpzdGF0ZV9lbmFibGVkPSJ0cnVlIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9idG5fZGVmYXVsdF9mb2N1c2VkX2hvbG9fbGlnaHQiIC8+CisgICAgICAgICAgICA8aXRlbSBhbmRyb2lkOnN0YXRlX2VuYWJsZWQ9InRydWUiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2J0bl9kZWZhdWx0X25vcm1hbF9ob2xvX2xpZ2h0IiAvPgorICAgICAgICAgICAgPGl0ZW0gYW5kcm9pZDpzdGF0ZV9mb2N1c2VkPSJ0cnVlIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9idG5fZGVmYXVsdF9kaXNhYmxlZF9mb2N1c2VkX2hvbG9fbGlnaHQiIC8+CisgICAgICAgICAgICA8aXRlbQorICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9idG5fZGVmYXVsdF9kaXNhYmxlZF9ob2xvX2xpZ2h0IiAvPgorICAgICAgICA8L3NlbGVjdG9yPgorICAgIDwvaXRlbT4KKzwvcmV2ZWFsPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2l0ZW1fYmFja2dyb3VuZF9xdWFudHVtLnhtbCBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pdGVtX2JhY2tncm91bmRfcXVhbnR1bS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0NGM4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pdGVtX2JhY2tncm91bmRfcXVhbnR1bS54bWwKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPHJldmVhbCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiPgorICAgIDxpdGVtPgorICAgICAgICA8c2VsZWN0b3I+CisgICAgICAgICAgICA8aXRlbSBhbmRyb2lkOnN0YXRlX2ZvY3VzZWQ9InRydWUiIGFuZHJvaWQ6c3RhdGVfZW5hYmxlZD0iZmFsc2UiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2xpc3Rfc2VsZWN0b3JfZGlzYWJsZWRfaG9sb19saWdodCIgLz4KKyAgICAgICAgICAgIDxpdGVtIGFuZHJvaWQ6c3RhdGVfZm9jdXNlZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvbGlzdF9mb2N1c2VkX2hvbG8iIC8+CisgICAgICAgICAgICA8aXRlbQorICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGU9IkBjb2xvci90cmFuc3BhcmVudCIgLz4KKyAgICAgICAgPC9zZWxlY3Rvcj4KKyAgICA8L2l0ZW0+CisgICAgPGl0ZW0gYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2xpc3Rfc2VsZWN0b3JfYmFja2dyb3VuZF90cmFuc2l0aW9uX2hvbG9fbGlnaHQiIC8+Cis8L3JldmVhbD4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9saXN0X3NlbGVjdG9yX3F1YW50dW0ueG1sIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2xpc3Rfc2VsZWN0b3JfcXVhbnR1bS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxMjQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9saXN0X3NlbGVjdG9yX3F1YW50dW0ueG1sCkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxyZXZlYWwgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KKyAgICA8aXRlbT4KKyAgICAgICAgPHNlbGVjdG9yPgorICAgICAgICAgICAgPGl0ZW0gYW5kcm9pZDpzdGF0ZV93aW5kb3dfZm9jdXNlZD0iZmFsc2UiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpkcmF3YWJsZT0iQGNvbG9yL3RyYW5zcGFyZW50IiAvPgorICAgICAgICAgICAgPGl0ZW0gYW5kcm9pZDpzdGF0ZV9mb2N1c2VkPSJ0cnVlIiBhbmRyb2lkOnN0YXRlX2VuYWJsZWQ9ImZhbHNlIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9saXN0X3NlbGVjdG9yX2Rpc2FibGVkX2hvbG9fbGlnaHQiIC8+CisgICAgICAgICAgICA8aXRlbSBhbmRyb2lkOnN0YXRlX2ZvY3VzZWQ9InRydWUiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL2xpc3RfZm9jdXNlZF9ob2xvIiAvPgorICAgICAgICA8L3NlbGVjdG9yPgorICAgIDwvaXRlbT4KKyAgICA8aXRlbSBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvbGlzdF9zZWxlY3Rvcl9iYWNrZ3JvdW5kX3RyYW5zaXRpb25faG9sb19saWdodCIgLz4KKzwvcmV2ZWFsPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlL25vdGlmeV9wYW5lbF9ub3RpZmljYXRpb25faWNvbl9iZ190aWxlLnhtbCBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9ub3RpZnlfcGFuZWxfbm90aWZpY2F0aW9uX2ljb25fYmdfdGlsZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhM2MzOTguLjAwMDAwMDAKLS0tIGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlL25vdGlmeV9wYW5lbF9ub3RpZmljYXRpb25faWNvbl9iZ190aWxlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gIAotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAKLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08Yml0bWFwCi0gICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6dGlsZU1vZGU9InJlcGVhdCIKLSAgICBhbmRyb2lkOnNyYz0iQGFuZHJvaWQ6ZHJhd2FibGUvbm90aWZ5X3BhbmVsX25vdGlmaWNhdGlvbl9pY29uX2JnIgotICAgIC8+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvbGF5b3V0LWxhbmQvdGltZV9waWNrZXJfaG9sby54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0LWxhbmQvdGltZV9waWNrZXJfaG9sby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjZTFlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQtbGFuZC90aW1lX3BpY2tlcl9ob2xvLnhtbApAQCAtMCwwICsxLDcwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorKioKKyoqIENvcHlyaWdodCAyMDEzLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworLS0+CisKKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKyAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9InRydWUiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkxlZnQ9IkBkaW1lbi90aW1lcGlja2VyX21pbmltdW1fbWFyZ2luX3NpZGVzIgorICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5SaWdodD0iQGRpbWVuL3RpbWVwaWNrZXJfbWluaW11bV9tYXJnaW5fc2lkZXMiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iQGRpbWVuL3RpbWVwaWNrZXJfbWluaW11bV9tYXJnaW5fdG9wX2JvdHRvbSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSJAZGltZW4vdGltZXBpY2tlcl9taW5pbXVtX21hcmdpbl90b3BfYm90dG9tIj4KKyAgICA8TGluZWFyTGF5b3V0CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGRpbWVuL3RpbWVwaWNrZXJfbGVmdF9zaWRlX3dpZHRoIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CisgICAgICAgIDxGcmFtZUxheW91dAorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9Ij9hbmRyb2lkOmF0dHIvdGltZVBpY2tlckhlYWRlckJhY2tncm91bmRDb2xvciI+CisgICAgICAgICAgICA8aW5jbHVkZQorICAgICAgICAgICAgICAgICAgICBsYXlvdXQ9IkBsYXlvdXQvdGltZV9oZWFkZXJfbGFiZWwiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL3RpbWVwaWNrZXJfaGVhZGVyX2hlaWdodCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIiAvPgorICAgICAgICA8L0ZyYW1lTGF5b3V0PgorICAgICAgICA8TGluZWFyTGF5b3V0CisgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9sYXlvdXRfYnV0dG9ucyIKKyAgICAgICAgICAgICAgICBzdHlsZT0iP2FuZHJvaWQ6YXR0ci9idXR0b25CYXJTdHlsZSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iP2FuZHJvaWQ6YXR0ci90aW1lUGlja2VySGVhZGVyQmFja2dyb3VuZENvbG9yIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZGl2aWRlcj0iP2FuZHJvaWQ6YXR0ci9kaXZpZGVySG9yaXpvbnRhbCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnNob3dEaXZpZGVycz0iYmVnaW5uaW5nIj4KKyAgICAgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9kb25lX2J1dHRvbiIKKyAgICAgICAgICAgICAgICAgICAgc3R5bGU9Ij9hbmRyb2lkOmF0dHIvYnV0dG9uQmFyQnV0dG9uU3R5bGUiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOm1pbkhlaWdodD0iNDhkcCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2RvbmVfbGFiZWwiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IkBkaW1lbi90aW1lcGlja2VyX2RvbmVfbGFiZWxfc2l6ZSIgLz4KKyAgICAgICAgPC9MaW5lYXJMYXlvdXQ+CisgICAgPC9MaW5lYXJMYXlvdXQ+CisgICAgPGFuZHJvaWQud2lkZ2V0LlJhZGlhbFRpbWVQaWNrZXJWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3JhZGlhbF9waWNrZXIiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGRpbWVuL3RpbWVwaWNrZXJfcmFkaWFsX3BpY2tlcl9kaW1lbiIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIgorICAgICAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9InRydWUiCisgICAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZUluVG91Y2hNb2RlPSJ0cnVlIiAvPgorPC9MaW5lYXJMYXlvdXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9hY3Rpb25fbWVudV9sYXlvdXQueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC9hY3Rpb25fbWVudV9sYXlvdXQueG1sCmluZGV4IGM0MDFmZWMuLmFiZjMzMDBjIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L2FjdGlvbl9tZW51X2xheW91dC54bWwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC9hY3Rpb25fbWVudV9sYXlvdXQueG1sCkBAIC0xNCw3ICsxNCw3IEBACiAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogLS0+CiAKLTxjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuQWN0aW9uTWVudVZpZXcKKzxBY3Rpb25NZW51VmlldwogICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCiAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC90aW1lX2hlYWRlcl9sYWJlbC54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L3RpbWVfaGVhZGVyX2xhYmVsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGNiODFiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC90aW1lX2hlYWRlcl9sYWJlbC54bWwKQEAgLTAsMCArMSw2MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgfiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICB+CisgIH4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICAtLT4KKzxSZWxhdGl2ZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90aW1lX2hlYWRlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlciIgPgorCisgICAgPFRleHRWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2hvdXJzIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9MZWZ0T2Y9IkAraWQvc2VwYXJhdG9yIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25CYXNlbGluZT0iQCtpZC9zZXBhcmF0b3IiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RpbWVQaWNrZXJIZWFkZXJUaW1lTGFiZWxUZXh0QXBwZWFyYW5jZSIvPgorCisgICAgPFRleHRWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3NlcGFyYXRvciIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IkBkaW1lbi90aW1lcGlja2VyX3NlcGFyYXRvcl9wYWRkaW5nIgorICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nUmlnaHQ9IkBkaW1lbi90aW1lcGlja2VyX3NlcGFyYXRvcl9wYWRkaW5nIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfY2VudGVySW5QYXJlbnQ9InRydWUiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RpbWVQaWNrZXJIZWFkZXJUaW1lTGFiZWxUZXh0QXBwZWFyYW5jZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6aW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eT0ibm8iIC8+CisKKyAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbWludXRlcyIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvUmlnaHRPZj0iQCtpZC9zZXBhcmF0b3IiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnbkJhc2VsaW5lPSJAK2lkL3NlcGFyYXRvciIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGltZVBpY2tlckhlYWRlclRpbWVMYWJlbFRleHRBcHBlYXJhbmNlIiAvPgorCisgICAgPFRleHRWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FtcG1fbGFiZWwiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSJAZGltZW4vdGltZXBpY2tlcl9hbXBtX2xlZnRfcGFkZGluZyIKKyAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSJAZGltZW4vdGltZXBpY2tlcl9hbXBtX2xlZnRfcGFkZGluZyIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvUmlnaHRPZj0iQCtpZC9zZXBhcmF0b3IiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnbkJhc2VsaW5lPSJAK2lkL3NlcGFyYXRvciIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGltZVBpY2tlckhlYWRlckFtUG1MYWJlbFRleHRBcHBlYXJhbmNlIgorICAgICAgICAgICAgYW5kcm9pZDppbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5PSJubyIgLz4KKworPC9SZWxhdGl2ZUxheW91dD4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvdGltZV9waWNrZXJfaG9sby54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L3RpbWVfcGlja2VyX2hvbG8ueG1sCmluZGV4IGM2YjdkM2EuLjA4OTBmZTUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvdGltZV9waWNrZXJfaG9sby54bWwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC90aW1lX3BpY2tlcl9ob2xvLnhtbApAQCAtMSw3ICsxLDcgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8IS0tCiAqKgotKiogQ29weXJpZ2h0IDIwMTEsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqIENvcHlyaWdodCAyMDEzLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAqKgogKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNyw3MCArMTcsMzggQEAKICovCiAtLT4KIAotPCEtLSBMYXlvdXQgb2YgdGltZSBwaWNrZXIgLS0+Ci0KIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGltZVBpY2tlckxheW91dCIKLSAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgYW5kcm9pZDpwYWRkaW5nU3RhcnQ9IjhkaXAiCi0gICAgYW5kcm9pZDpwYWRkaW5nRW5kPSI4ZGlwIj4KLQotICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6cGFkZGluZ1N0YXJ0PSI4ZGlwIgotICAgICAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IjhkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0RGlyZWN0aW9uPSJsdHIiPgotCi0gICAgICAgIDwhLS0gaG91ciAtLT4KLSAgICAgICAgPE51bWJlclBpY2tlcgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ob3VyIgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCisgICAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9InRydWUiID4KKyAgICA8aW5jbHVkZQorICAgICAgICAgICAgbGF5b3V0PSJAbGF5b3V0L3RpbWVfaGVhZGVyX2xhYmVsIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL3RpbWVwaWNrZXJfaGVhZGVyX2hlaWdodCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlciIgLz4KKyAgICA8YW5kcm9pZC53aWRnZXQuUmFkaWFsVGltZVBpY2tlclZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcmFkaWFsX3BpY2tlciIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iMTZkaXAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjE2ZGlwIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vdGltZXBpY2tlcl9yYWRpYWxfcGlja2VyX2RpbWVuIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIgogICAgICAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9InRydWUiCi0gICAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZUluVG91Y2hNb2RlPSJ0cnVlIgotICAgICAgICAgICAgLz4KLQotICAgICAgICA8IS0tIGRpdmlkZXIgLS0+Ci0gICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9kaXZpZGVyIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlSW5Ub3VjaE1vZGU9InRydWUiIC8+CisgICAgPExpbmVhckxheW91dAorICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9sYXlvdXRfYnV0dG9ucyIKKyAgICAgICAgICAgIHN0eWxlPSI/YW5kcm9pZDphdHRyL2J1dHRvbkJhclN0eWxlIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9IjZkaXAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjZkaXAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCi0gICAgICAgICAgICBhbmRyb2lkOmltcG9ydGFudEZvckFjY2Vzc2liaWxpdHk9Im5vIgotICAgICAgICAgICAgLz4KLQotICAgICAgICA8IS0tIG1pbnV0ZSAtLT4KLSAgICAgICAgPE51bWJlclBpY2tlcgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9taW51dGUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjE2ZGlwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxNmRpcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJ0cnVlIgotICAgICAgICAgICAgYW5kcm9pZDpmb2N1c2FibGVJblRvdWNoTW9kZT0idHJ1ZSIKLSAgICAgICAgICAgIC8+Ci0KKyAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgorICAgICAgICAgICAgYW5kcm9pZDpkaXZpZGVyPSI/YW5kcm9pZDphdHRyL2RpdmlkZXJIb3Jpem9udGFsIgorICAgICAgICAgICAgYW5kcm9pZDpzaG93RGl2aWRlcnM9ImJlZ2lubmluZyI+CisgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RvbmVfYnV0dG9uIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDptaW5IZWlnaHQ9IjQ4ZHAiCisgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2RvbmVfbGFiZWwiCisgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iQGRpbWVuL3RpbWVwaWNrZXJfZG9uZV9sYWJlbF9zaXplIgorICAgICAgICAgICAgICAgIHN0eWxlPSI/YW5kcm9pZDphdHRyL2J1dHRvbkJhckJ1dHRvblN0eWxlIiAvPgogICAgIDwvTGluZWFyTGF5b3V0PgotCi0gICAgPCEtLSBBTSAvIFBNIC0tPgotICAgIDxOdW1iZXJQaWNrZXIKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hbVBtIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIxNmRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxNmRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9IjhkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iOGRpcCIKLSAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9InRydWUiCi0gICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlSW5Ub3VjaE1vZGU9InRydWUiCi0gICAgICAgIC8+Ci0KIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC90aW1lX3BpY2tlci54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L3RpbWVfcGlja2VyX2xlZ2FjeS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvcmUvcmVzL3Jlcy9sYXlvdXQvdGltZV9waWNrZXIueG1sCnJlbmFtZSB0byBjb3JlL3Jlcy9yZXMvbGF5b3V0L3RpbWVfcGlja2VyX2xlZ2FjeS54bWwKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvdGltZV9waWNrZXJfbGVnYWN5X2hvbG8ueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC90aW1lX3BpY2tlcl9sZWdhY3lfaG9sby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiN2QzYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvdGltZV9waWNrZXJfbGVnYWN5X2hvbG8ueG1sCkBAIC0wLDAgKzEsODYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisqKgorKiogQ29weXJpZ2h0IDIwMTEsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCistLT4KKworPCEtLSBMYXlvdXQgb2YgdGltZSBwaWNrZXIgLS0+CisKKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGltZVBpY2tlckxheW91dCIKKyAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgYW5kcm9pZDpwYWRkaW5nU3RhcnQ9IjhkaXAiCisgICAgYW5kcm9pZDpwYWRkaW5nRW5kPSI4ZGlwIj4KKworICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1N0YXJ0PSI4ZGlwIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IjhkaXAiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0RGlyZWN0aW9uPSJsdHIiPgorCisgICAgICAgIDwhLS0gaG91ciAtLT4KKyAgICAgICAgPE51bWJlclBpY2tlcgorICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ob3VyIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIxNmRpcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iMTZkaXAiCisgICAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlSW5Ub3VjaE1vZGU9InRydWUiCisgICAgICAgICAgICAvPgorCisgICAgICAgIDwhLS0gZGl2aWRlciAtLT4KKyAgICAgICAgPFRleHRWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RpdmlkZXIiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iNmRpcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iNmRpcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIKKyAgICAgICAgICAgIGFuZHJvaWQ6aW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eT0ibm8iCisgICAgICAgICAgICAvPgorCisgICAgICAgIDwhLS0gbWludXRlIC0tPgorICAgICAgICA8TnVtYmVyUGlja2VyCisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21pbnV0ZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iMTZkaXAiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjE2ZGlwIgorICAgICAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9InRydWUiCisgICAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZUluVG91Y2hNb2RlPSJ0cnVlIgorICAgICAgICAgICAgLz4KKworICAgIDwvTGluZWFyTGF5b3V0PgorCisgICAgPCEtLSBBTSAvIFBNIC0tPgorICAgIDxOdW1iZXJQaWNrZXIKKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hbVBtIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIxNmRpcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxNmRpcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9IjhkaXAiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iOGRpcCIKKyAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9InRydWUiCisgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlSW5Ub3VjaE1vZGU9InRydWUiCisgICAgICAgIC8+CisKKzwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKaW5kZXggMWE5YWNkMy4uZWJjNTIxOSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJWb2VyIFwnbiBQVUsgdmFuIDggc3lmZXJzIG9mIGxhbmdlciBpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iSm91IFNJTS1rYWFydCBpcyBQVUstZ2VzbHVpdC4gVm9lciBkaWUgUFVLLWtvZGUgaW4gb20gZGl0IHRlIG9udHNsdWl0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNsZXV0ZWwgUFVLMiBpbiBvbSBTSU0ta2FhcnQgb29wIHRlIHNsdWl0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+Ik9uc3Vrc2Vzdm9sLCBha3RpdmVlciBTSU0tL1JVSU0tc2xvdC4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJKeSBoZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IG9vcmJseXdlbmRlIHBvZ2luZyB2b29yZGF0IFNJTSBnZXNsdWl0IHdvcmQuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iSnkgaGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBvb3JibHl3ZW5kZSBwb2dpbmdzIHZvb3JkYXQgU0lNIGdlc2x1aXQgd29yZC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+Iklua29tZW5kZXIgYmVsbGVyLUlEIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJEaXQgbGFhdCBkaWUgaG91ZXIgdG9lIG9tIGFhbiBkaWUgdG9wdmxhay1rb3BwZWx2bGFrIHZhbiBcJ24gVlBOLWRpZW5zIHRlIGJpbmQuIERpdCBtb2V0IG5vb2l0IHZpciBub3JtYWxlIHByb2dyYW1tZSBub2RpZyB3ZWVzIG5pZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iYmluZCBhYW4gXCduIG11dXJwYXBpZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkRpdCBsYWF0IGRpZSBob3VlciB0b2Ugb20gYWFuIGRpZSB0b3B2bGFrLWtvcHBlbHZsYWsgdmFuIFwnbiBtdXVycGFwaWVyIHRlIGJpbmQuIERpdCBtb2V0IG5vb2l0IHZpciBub3JtYWxlIHByb2dyYW1tZSBub2RpZyB3ZWVzIG5pZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+ImtvcHBlbCBhYW4gXCduIGFmc3RhbmRza2VybSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IkRpdCBsYWF0IGRpZSBob3VlciB0b2Ugb20gYWFuIGRpZSB0b3Ata29wcGVsdmxhayB2YW4gXCduIGFmc3RhbmRza2VybSB0ZSBrb3BwZWwuIEJlaG9vcnQgbm9vaXQgdmlyIGdld29uZSBwcm9ncmFtbWUgbm9kaWcgdGUgd2VlcyBuaWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4iYmluZCBhYW4gXCduIGxlZ3N0dWtkaWVucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJEaXQgbGFhdCBkaWUgaG91ZXIgdG9lIG9tIGFhbiBkaWUgdG9wdmxhay1rb3BwZWx2bGFrIHZhbiBcJ24gbGVnc3R1ay1kaWVucyB0ZSBiaW5kLiBEaXQgbW9ldCBub29pdCB2aXIgbm9ybWFsZSBwcm9ncmFtbWUgbm9kaWcgd2VlcyBuaWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4ic2tha2VsIG1ldCBcJ24gdG9lc3RlbC1hZG1pbiI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iTGFhdCBkaWUgcHJvZ3JhbSB0b2Ugb20gU3VyZmFjZUZsaW5nZXIgc2UgbGFldmxhay1rZW5tZXJrZSB0ZSBnZWJydWlrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImxlZXMgcmFhbWJ1ZmZlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJMYWF0IGRpZSBwcm9ncmFtIHRvZSBvbSBkaWUgaW5ob3VkIHZhbiBkaWUgcmFhbWJ1ZmZlciB0ZSBsZWVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImtyeSB0b2VnYW5nIHRvdCBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iTGFhdCBkaWUgcHJvZ3JhbSB0b2Ugb20gSW5wdXRGbGluZ2VyIHNlIGxhZXZsYWsta2VubWVya2UgdGUgZ2VicnVpay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+InN0ZWwgV2ktRmktc2tlcm1zIG9wIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iTGFhdCBkaWUgcHJvZ3JhbSB0b2Ugb20gV2ktRmktc2tlcm1zIG9wIHRlIHN0ZWwgZW4gZGFhcmFhbiB0ZSBrb3BwZWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJiZWhlZXIgV2ktRmktc2tlcm1zIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IkxhYXQgZGllIHByb2dyYW0gdG9lIG9tIGdsb2JhbGUga2xhbmtpbnN0ZWxsaW5ncyBzb29zIHZvbHVtZSBlbiB3YXR0ZXIgbHVpZHNwcmVrZXIgdmlyIHVpdHZvZXIgZ2VicnVpayB3b3JkLCB0ZSB2ZXJhbmRlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+Im5lZW0ga2xhbmsgb3AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiJMYWF0IGRpZSBwcm9ncmFtIHRvZSBvbSBrbGFuayBtZXQgZGllIG1pa3JvZm9vbiBvcCB0ZSBuZWVtLiBIaWVyZGllIHRvZXN0ZW1taW5nIGxhYXQgZGllIHByb2dyYW0gdG9lIG9tIGtsYW5rIHRlIGVuaWdlciB0eWQsIHNvbmRlciBqb3UgYmV2ZXN0aWdpbmcsIG9wIHRlIG5lZW0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJzaW0ta29tbXVuaWthc2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4iTGFhdCBkaWUgcHJvZ3JhbSB0b2Ugb20gYmV2ZWxlIG5hIGRpZSBTSU0gdGUgc3R1dXIuIERpdCBpcyBiYWllIGdldmFhcmxpay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJuZWVtIGZvdG9cJ3MgZW4gdmlkZW9cJ3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iTGFhdCBkaWUgcHJvZ3JhbSB0b2Ugb20gZm90b1wncyBlbiB2aWRlb1wncyBtZXQgZGllIGthbWVyYSB0ZSBuZWVtLiBIaWVyZGllIHRvZXN0ZW1taW5nIGxhYXQgZGllIHByb2dyYW0gdG9lIG9tIGRpZSBrYW1lcmEgdGUgZW5pZ2VyIHR5ZCBzb25kZXIgam91IGJldmVzdGlnaW5nIHRlIGdlYnJ1aWsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4iZGVha3RpdmVlciBMRUQgd2F0IG9vcmRyYWcgYWFuZHVpIHdhbm5lZXIga2FtZXJhIGdlYnJ1aWsgd29yZCI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IlR1aXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iV2VyayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iQW5kZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4iR2VlbiBwcm9ncmFtIGdla3J5IG9tIGhpZXJkaWUga29udGFrIHRlIGJla3lrIG5pZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJWb2VyIFBJTi1rb2RlIGluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iVm9lciBQVUsgZW4gbnV3ZSBQSU4ta29kZSBpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLWtvZGUiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+Ikludm9lcnNsZXV0ZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJLaWVzIFwnbiBwcm9ncmFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iS29uIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4gbmllIGJlZ2luIG5pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkRlZWwgbWV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkRlZWwgbWV0IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iU2t5ZmlldmF0c2VsLiBSYWFrIGVuIGhvdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iR2x5IG9wIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iR2x5IGFmIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iR2x5IGxpbmtzIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkdseSByZWdzIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJPbnRzbHVpdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU3RpbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJLbGFuayBhYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlNvZWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJTbGVlcCBvbSB0ZSBvbnRzbHVpdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUHJvcCBcJ24ga29wZm9vbiBpbiBvbSB0ZSBob29yIGhvZSB3YWd3b29yZHNsZXV0ZWxzIGhhcmRvcCBnZXPDqiB3b3JkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlB1bnQuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3RlbHNlbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoLW91ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJEcmFhZGxvc2Ugc2tlcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iS2xhYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNZWRpYS11aXR2b2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJLb3BwZWwgYWFuIHRvZXN0ZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJTYWFpIHNrZXJtIHVpdCBuYSB0b2VzdGVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iU29layB0YW5zIHZpciB0b2VzdGVsbGXigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJJbnN0ZWxsaW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJPbnRrb3BwZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iU2thbmRlZXIgdGFucy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IktvcHBlbCB0YW5zLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJCZXNraWtiYWFyIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iT29ybGVnZ2VyICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IiwgdmVpbGlnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJEcmFhZGxvc2Ugc2tlcm0gaXMgZ2Vrb3BwZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iSGllcmRpZSBza2VybSB3b3JkIG9wIFwnbiBhbmRlciB0b2VzdGVsIGdld3lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IlNrZXJtIHdvcmQgdGFucyB1aXRnZXNhYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJLb3BwZWwgdGFucyBhYW4gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iU2tlcm0gd29yZCB0YW5zIHVpdGdlc2FhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iR2Vrb3BwZWwgYWFuIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJPbnRrb3BwZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Ik5vb2RvcHJvZXAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJIZXQgankgZGllIHBhdHJvb24gdmVyZ2VldD8iPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTksMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iUHJvYmVlciB3ZWVyIG9vciA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzZWtvbmRlcyI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJQcm9iZWVyIGxhdGVyIHdlZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iU2xlZXAgdmFuIGJvIGFmIG5hIG9uZGVyIG9tIHZvbHNrZXJtIHRlIHZlcmxhYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlN3aWVwIHZhbiBibyBhZiBuYSBvbmRlciBvbSB2b2xza2VybSB0ZSB2ZXJsYWF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iS2xhYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJVcmUgc2Ugc2lya2VsZ2x5ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+Ik1pbnV0ZSBzZSBzaXJrZWxnbHllciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJLaWVzIHVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IktpZXMgbWludXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJNYWFuZHJvb3N0ZXIgdmFuIGRhZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IkphYXJseXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IktpZXMgbWFhbmQgZW4gZGFnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iS2llcyBqYWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBnZWtpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiB1aXRnZXZlZSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKaW5kZXggZTY0YjZmNS4uYjdkY2ZlOCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiI4IOGLiOGLreGInSDhiqjhi5sg4Ymg4YiL4YutIOGLqOGIhuGKkSDhiYHhjKXhiK7hib3hipVQVUsg4Ymw4Yut4Yml4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlNJTSDhiqvhiK3hi7Xhi44gUFVLLeGLqOGJsOGJhuGIiOGNiCDhipDhi43hjaLhi6hQVUsg4Yqu4Yux4YqVIOGJoOGImOGJsOGLqOGJpSDhi63hiq3hjYjhibHhibXhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiIgU0lNIOGIiOGImOGKreGNiOGJtSBQVUsyIOGJsOGLreGJpeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuGKoOGIjeGJsOGIs+GKq+GIneGNoyDhi6jhiLLhiJ0vUlVJTSDhiYHhiI3hjY3hipUg4Yqg4YqV4YmD4Y2iIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i4Yiy4Yid4YuOIOGKqOGImOGJhuGIiOGNiSDhiaDhjYrhibUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGImeGKqOGIqyDhi63hiYDhiK3hi47hibPhiI3hjaIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLhiLLhiJ3hi44g4Yqo4YiY4YmG4YiI4Y2JIOGJoOGNiuGJtSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YiZ4Yqo4Yir4YuO4Ym9IOGLreGJgOGIqeGLjuGJs+GIjeGNoiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i4Yuo4YyI4YmiIOGLsOGLi+GLrUlEIjwvc3RyaW5nPgpAQCAtMTc1LDcgKzE4MCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21lc3NhZ2VzIiBtc2dpZD0iNzgyMTk5OTA3MTAwMzY5OTIzNiI+IuGKpOGItSDhiqThiJ0g4Yqk4Yi14YiF4YqV4Y2jIOGKouGInOGLreGIjeGIheGKlSDhiqXhipMg4YiM4YiLIOGImOGIjeGLleGKreGJtuGJveGIheGKlSDhiqDhipXhiaXhiaXhipMg4Y2D4Y2N4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3BlcnNvbmFsSW5mbyIgbXNnaWQ9IjM1MTkxNjMxNDEwNzA1MzM0NzQiPiLhi6jhjI3hiI0g4YiY4Yio4YyD4YuOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19wZXJzb25hbEluZm8iIG1zZ2lkPSI4NDI2NDUzMTI5Nzg4ODYxMzM4Ij4i4Ymg4Yql4YuN4YmC4YurIOGKq+GIreGLteGIhSDhiIvhi60g4YuI4Yuw4Ymw4Yqo4Yib4Ym4IOGLqOGKoOGKleGJsCDhiJjhiKjhjIMg4YmA4Yyl4Ymw4YqbIOGImOGLs+GIqOGIu+GNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zb2NpYWxJbmZvIiBtc2dpZD0iNTc5OTA5NjYyMzQxMjA0Mzc5MSI+IuGIm+GIheGJoOGIq+GLiiDhiJjhiKjhjIPhiIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc29jaWFsSW5mbyIgbXNnaWQ9IjU3OTkwOTY2MjM0MTIwNDM3OTEiPiLhiJvhiIXhiaDhiKvhi4og4YiY4Yio4YyD4YuOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zb2NpYWxJbmZvIiBtc2dpZD0iNzEyOTg0MjQ1NzYxMTY0MzQ5MyI+IuGLiOGLsCDhi6jhiqXhi43hiYLhi6vhi47hib3hiIXhipMg4Yuo4Yib4YiF4Ymg4Yir4YuKIOGMjeGKleGKmeGKkOGJtuGJveGIhSDhiJjhiKjhjIMg4YmA4Yyl4Ymw4YqbIOGImOGLs+GIqOGIu+GNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9sb2NhdGlvbiIgbXNnaWQ9IjYzNTE0OTc0MjQzNjY5MjA0OSI+IuGIteGNjeGIq+GLjiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbG9jYXRpb24iIG1zZ2lkPSI1NzA0Njc5NzYzMTI0MTcwMTAwIj4i4Yur4YiI4YiF4Ymg4Ym14YqVIOGKoOGKq+GJo+GJoiDhibDhiYbhjKPhjKDhiK3hjaIiPC9zdHJpbmc+CkBAIC0yMDUsNyArMjEwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+IuGIiOGKq+GInOGIqyDhiJ3hiLXhiI0g4YuI4Yut4YidIOGJquGLsuGLriDhiIjhiJjhiYXhiKjhjL0g4YmA4Yyl4Ymw4YqbIOGImOGLs+GIqOGIu+GNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zY3JlZW5sb2NrIiBtc2dpZD0iODI3NTUwMDE3MzMzMDcxODE2OCI+IuGIm+GLqyDhjIjhjL0g4YmG4YiN4Y2NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zY3JlZW5sb2NrIiBtc2dpZD0iNzA2NzQ5NzEyODkyNTQ5OTQwMSI+IuGJoOGImOGIo+GIquGLq+GLjiDhiIvhi60g4Yur4YiI4YuN4YqVIOGLqOGImOGJhuGIiOGNiuGLqyDhiJvhi6sg4YyI4Yy9IOGJo+GIheGIquGLq+GJtSDhiIvhi60g4Ymw4Yy94YuV4YqWIOGLqOGImOGNjeGMoOGIrSDhib3hiI7hibPhjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXBwSW5mbyIgbXNnaWQ9IjgwMjg3ODk3NjI2MzQxNDc3MjUiPiLhi6jhiJjhibDhjI3hiaDhiKrhi6vhi47hib3hiIUg4YiY4Yio4YyDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FwcEluZm8iIG1zZ2lkPSI4MDI4Nzg5NzYyNjM0MTQ3NzI1Ij4i4Yuo4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym94YuOIOGImOGIqOGMgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXBwSW5mbyIgbXNnaWQ9IjM5NTAzNzg1MzgwNDk2MjU5MDciPiLhiaDhiJjhiKPhiKrhi6vhiIUg4YiL4YutIOGLq+GIiSDhi6jhiIzhiI7hib0g4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGJo+GIheGIquGLjuGJvSDhiIvhi60g4Ymw4Y2F4YuV4YqWIOGLqOGIm+GIs+GIqOGNjSDhib3hiI7hibPhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd2FsbHBhcGVyIiBtc2dpZD0iMzg1MDI4MDE1ODA0MTE3NTk5OCI+IuGIjeGMo+GNjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd2FsbHBhcGVyIiBtc2dpZD0iNTYzMDQxNzg1NDc1MDU0MDE1NCI+IuGLqOGImOGIo+GIquGLq+GLjeGKlSDhiI3hjKPhjY0g4YmF4YqV4Yml4Yiu4Ym9IOGJgOGLreGIreGNoiI8L3N0cmluZz4KQEAgLTI2NCwxNSArMjY5LDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhiqThiLUu4Yqk4YidLuGKpOGItS4g4YiY4YiN4YuV4Yqt4Ym24Ym94YqVIOGKpeGKleGLsuGIjeGKrSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGLq+GIjeGJsOGMoOGJoOGJgSDhi4jhjKrhi47hib3hipUg4YiK4Yur4Yi14Yqo4Ym14YiNIOGLreGJveGIi+GIjeGNoiDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6vhiIvhipXhibAg4Yib4Yio4YyL4YyI4YyrIOGImOGIjeGLleGKreGJtuGJveGKlSDhiaDhiJjhiIvhiq0g4YyI4YqV4YuY4YmlIOGIiuGLq+GIteGLiOGMoeGIhSDhi63hib3hiIvhiInhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4i4Yuo4Ymg4YiY4YiN4YuV4Yqt4Ym1LeGJoOGKqeGIjS3hiJ3hiIvhiL0t4Yi14YylIOGKreGIteGJsOGJtuGJveGKlSDhi63hiIvhiqkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiIzhiI7hib0g4Yuo4YiY4YiN4YuV4Yqt4Ym1IOGImOGIi+GKquGLqyDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4YiI4YiY4YyqIOGMpeGIquGLjuGJvSDhiaDhiJjhiI3hi5Xhiq3hibUt4Ymg4Yqp4YiNLeGIneGIi+GIvS3hiJjhiLXhjKDhibUg4Yi14Yir4YqVIOGKpeGKleGLsuGLreGLmSDhjKXhi6vhiYThi47hib0g4Yql4YqV4Yuy4YiN4Yqt4YiL4Ym44YuNIOGLq+GIteGJveGIiOGLi+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNtcyIgbXNnaWQ9Ijg3NDUwODY1NzIyMTMyNzA0ODAiPiLhi6jhjL3hiJHhjY0g4YiY4YiN4YuV4Yqt4Ym24Ym94YiF4YqVIOGKoOGKleGJpeGJpSAo4Yqk4Yi1LuGKpOGInS7hiqThiLUuIOGLiOGLreGInSDhiqThiJ0u4Yqk4YidLuGKpOGItS4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+IuGLqOGMveGIkeGNjSDhiJjhiI3hi5Xhiq3hibbhib3hi47hipUg4Yur4YqV4Yml4YmhICjhiqThiLUu4Yqk4YidLuGKpOGItS4g4YuI4Yut4YidIOGKpOGInS7hiqThiJ0u4Yqk4Yi1LikiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i4YiY4YyI4YiI4Yyr4YuNIOGJoOGMoeGJo+GLiiDhibHhiq7hiIUg4YuI4Yut4YidIOGJoFNJTSDhiqvhiK3hi7XhiIUg4Yuo4Ymw4Yqo4Yib4Ym5IOGLqOGKpOGItS7hiqThiJ0u4Yqk4Yi1LiDhiJjhiI3hiqXhiq3hibbhib3hipUg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLreGLmOGJtSDhi4jhi63hiJ0g4Yia4Yi14Yyl4Yir4YuK4YqQ4Ym14YqVIOGKqOGMjeGIneGJtSDhiLPhi6vhiLXhjIjhiaMg4YiB4YiJ4YqV4YidIOGLqOGKpOGItS7hiqThiJ0u4Yqk4Yi1LiDhiJjhiI3hiqXhiq3hibbhib0g4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjk1OTY3NTMzNDU3MjQwNTUwIj4i4YiY4YyI4YiI4Yyr4YuNIOGJoOGIteGIjeGKreGIhSDhi4jhi63hiJ0g4YmgU0lNIOGKq+GIreGLteGIhSDhi6jhibDhiqjhiJvhibkg4Yuo4Yqk4Yi1LuGKpOGInS7hiqThiLUuIOGImOGIjeGKpeGKreGJtuGJveGKlSDhiqXhipXhi7Lhi6vhipDhiaUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4YuY4Ym1IOGLiOGLreGInSDhiJrhiLXhjKXhiKvhi4rhipDhibXhipUg4Yqo4YyN4Yid4Ym1IOGIs+GLq+GIteGMiOGJoyDhiIHhiInhipXhiJ0g4Yuo4Yqk4Yi1LuGKpOGInS7hiqThiLUuIOGImOGIjeGKpeGKreGJtuGJvSDhiqXhipXhi7Lhi6vhipDhiaUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiLhiJjhjIjhiIjhjKvhi40g4Ymg4Yi14YiN4Yqt4YuOIOGLiOGLreGInSDhiaBTSU0g4Yqr4Yit4Yu14YuOIOGLqOGJsOGKqOGIm+GJuSDhi6jhiqThiLUu4Yqk4YidLuGKpOGItS4g4YiY4YiN4YuV4Yqt4Ym24Ym94YqVIOGKpeGKleGLsuGLq+GKkOGJpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi63hi5jhibUg4YuI4Yut4YidIOGImuGIteGMpeGIq+GLiuGKkOGJteGKlSDhiqjhjI3hiJ3hibUg4Yiz4Yur4Yi14YyI4YmjIOGIgeGIieGKleGInSDhi6jhiqThiLUu4Yqk4YidLuGKpOGItS4g4YiY4YiN4YuV4Yqt4Ym24Ym9IOGKpeGKleGLsuGLq+GKkOGJpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+IuGLqOGMveGIkeGNjSDhiJjhiI3hi5Xhiq3hibbhib3hiIXhipUg4Yqg4Yit4Ym14YuVICjhiqThiLUu4Yqk4YidLuGKpOGItS4g4YuI4Yut4YidIOGKpOGInS7hiqThiJ0u4Yqk4Yi1LikiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTE2MDQxMzk0Nzc5NDUwMTUzOCI+IuGJoOGMoeGJo+GLiiDhibDhiq7hiIUg4YuI4Yut4YidIOGIsuGInSDhiqvhiK3hi7XhiIUg4YiL4YutIOGKpOGItSDhiqThiJ0g4Yqk4Yi1IOGImOGIjeGLleGKreGJtuGJveGKlSDhiIjhiJjhjYPhjY0g4YiI4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLreGNiOGJheGLs+GIieGNoeGNoeGImOGIjeGLleGKreGJtuGJveGIheGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhiIrhiLDhiK3hi5kg4Yut4Ym94YiL4YiJ4Y2h4Y2hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4i4Ymg4Yi14YiN4Yqt4YiFIOGLiOGLreGInSDhiLLhiJ0g4Yqr4Yit4Yu14YiFIOGIi+GLrSDhiqThiLUg4Yqk4YidIOGKpOGItSDhiJjhiI3hi5Xhiq3hibbhib3hipUg4YiI4YiY4Y2D4Y2NIOGIiOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi63hjYjhiYXhi7PhiInhjaHhjaHhiJjhiI3hi5Xhiq3hibbhib3hiIXhipUg4Ymw4YqV4Yqu4YiNIOGKoOGLmOGIjSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4YiK4Yiw4Yit4YuZIOGLreGJveGIi+GIieGNoeGNoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+IuGJoOGIteGIjeGKreGLjiDhi4jhi63hiJ0g4Yiy4YidIOGKq+GIreGLteGLjiDhiIvhi60g4Yqk4Yi1IOGKpOGInSDhiqThiLUg4YiY4YiN4YuV4Yqt4Ym24Ym94YqVIOGIiOGImOGNg+GNjSDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiJ4Y2iIOGImOGIjeGLleGKreGJtuGJveGLjuGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhiIrhiLDhiK3hi5kg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9IjU5OTEzOTg3MTE5MzY1OTA0MTAiPiLhi6jhjYXhiIHhjY0g4YiY4YiN4YuV4Yqt4Ym24Ym94YqVIOGJsOGJgOGJoOGIjSAoV0FQKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqFdBUCDhiJjhiI3hiqXhiq3hibbhib3hipUg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGKpeGKkyDhiqXhipXhi7Lhi6vhiqvhiILhi7Ug4Yut4Y2I4YmF4Yuz4YiN4Y2iIOGLreGIhSDhjYjhiYPhi7Ug4Yuo4Ymw4YiL4Yqp4YiN4YiF4YqVIOGImOGIjeGKpeGKreGJtuGJvSDhiIvhipXhibAg4Yiz4Yur4Yiz4Yut4YiFIOGLqOGImOGJhuGMo+GMoOGIrSDhi4jhi63hiJ0g4Yuo4YiY4Yiw4Yio4YudIOGJpeGJg+GJteGKlSDhi6vhjKDhiYPhiI3hiIvhiI3hjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+IuGKoOGIguGLtSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib3hipUg4Yiw4Yit4Yi14Yio4YiFIOGKoOGLjeGMoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4i4Yqg4YiC4Yu1IOGImOGJsOGMjeGJoOGIquGLq+GLjuGJveGKlSDhiLDhiK3hiLXhiKjhi40g4Yur4YuN4YyhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VGFza3MiIG1zZ2lkPSI3NDU0MjE1OTk1ODQ3NjU4MTAyIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGKoOGIgeGKkSDhjIrhi5zhipMg4Ymg4YmF4Yit4YmhIOGKpeGLqOGJsOGKq+GIhOGLsSDhiLXhiIvhiIkg4Ymw4YyN4Ymj4Yiu4Ym94YqVIOGImOGIqOGMgyDhiLDhiK3hiLXhiK4g4Yql4YqV4Yuy4Yur4YuI4YyjIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGImOGIs+GIquGLq+GLjSDhiIvhi60g4Yuo4Ym14Yqb4YuO4Ym5IOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhjKXhiYXhiJ0g4YiL4YutIOGIteGIiOGImOGLi+GIi+GJuOGLjSDhiJjhiKjhjIMg4Yql4YqV4Yuy4Yur4YyI4YqdIOGIiuGNiOGJheGLteGIiOGJtSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSI3MTE0MjU1MjgxOTQ0MjExNjgyIj4i4Ymg4Ymw4YiI4Yur4YupIOGJsOGMoOGJg+GImuGLjuGJvSDhiJjhiqvhiqjhiI0g4YiY4Yi14Ymw4YyL4Yml4YitIOGImOGNjeGMoOGIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSIzNjQ2NzA5NjM2MjMzODU3ODYiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Ymg4YiY4Yij4Yiq4Yur4YuNIOGIi+GLrSDhiaDhibDhiIjhi6vhi6kg4Ymw4Yyg4YmD4Yia4YuO4Ym9IOGIi+GLrSDhiqXhiK3hiJ3hjIPhi47hib3hipUg4Yql4YqV4Yuy4Y2I4Yy94YidIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhibDhipXhiq7hiI0t4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi63hiIXhipXhipUg4Ymw4Yyg4YmF4YiY4YuNIOGJoOGJsOGMoOGJg+GImuGLjuGJvSDhiJjhiqvhiqjhiI0g4Yur4YiI4YuN4YqVIOGMpeGJoOGJgyDhiIrhjKXhiLEg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLhi6hWUE4g4YyN4YiN4YyL4YiO4Ym14YqVIOGLiOGLsCDhiqjhjY3hibDhipst4Yuw4Yio4YyDIOGJoOGLqOGKkCDhjIjhjL0g4YiI4Yib4Yiz4YitIOGIiOGImOGLq+GLo+GLjSDhi63hjYjhiYXhi7PhiInhjaHhjaHhiIjhibDhiIjhiJjhi7Eg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGKoOGLq+GIteGNiOGIjeGMjeGIneGNoeGNoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLhiaDhiI3hjKPhjY0g4Yyg4Yit4YudIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLhi6vhi6Eg4YyN4Ymk4Ym1IOGIteGIjeGJseGKlSDhi4jhi7Ag4Yqo4Y2N4Ymw4YqbLeGLsOGIqOGMgyDhiI3hjKPhjY0g4YiI4YiY4Yyg4Yio4YudIOGLreGNiOGJheGLs+GIieGNoiDhiIjhiJjhi7DhiaDhipsg4Ym14YyN4Ymg4Yir4YuO4Ym9IOGJoOGNjeGNgeGInSDhiqDhi6vhiLXhjYjhiI3hjI3hiJ3hjaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuGKqOGKoOGKleGLtSDhi6jhiK3hiYDhibUg4Yib4Yiz4YurIOGMi+GIrSDhi63hjKDhiK3hi5vhiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLhi6vhi6Lhi40g4Yqo4Yqg4YqV4Yu1IOGLqOGIreGJgOGJtSDhiJvhiLPhi6sg4Yqo4Y2N4Ymw4YqbLeGLsOGIqOGMgyDhiaDhi63hipDhjIjhjL0g4YyL4YitIOGKpeGKleGLsuGMoOGIreGLnSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4YiI4YiY4Yuw4Ymg4YqbIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhiaDhjK3hiKvhiL0g4Yqg4Yur4Yi14Y2I4YiN4YyN4Yid4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i4YuI4YuwIOGNjeGIreGMjeGInSDhiqDhjIjhiI3hjI3hiI7hibUg4Yqg4Yur4Yut4YudIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IuGLq+GLoSDhjI3hiaThibUg4Yi14YiN4Ymx4YqVIOGLiOGLsCDhiqjhjY3hibDhipst4Yuw4Yio4YyDIOGNjeGIreGMjeGInSDhiqDhjIjhiI3hjI3hiI7hibUg4YiI4YiY4Yyg4Yio4YudICDhi63hjYjhiYXhi7PhiInhjaIg4YiI4YiY4Yuw4Ymg4YqbIOGJteGMjeGJoOGIq+GLjuGJvSDhiaDhjY3hjYHhiJ0g4Yqg4Yur4Yi14Y2I4YiN4YyN4Yid4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4Yqo4YiY4Yij4Yiq4YurIOGKoOGIteGJsOGLs+GLsOGIrSDhjIvhiK0g4Ymw4YyI4YqT4YqdIjwvc3RyaW5nPgpAQCAtNDM3LDEyICs0NDQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U3RpY2t5IiBtc2dpZD0iNzkxOTEyNjM3MjYwNjg4MTYxNCI+IuGIjeGMpeGNjSDhi53hiK3hi53hiK0g4YiL4YqtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3NzQ5NzYwNDk0Mzk5OTE1NjUxIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGIteGIreGMreGJsSDhiqjhibDhjKDhipPhiYDhiYAg4Ymg4YqL4YiLIOGLqOGImuGJgOGIqSDhiqDhjKPhiaPhiYIg4Yi14Yit4Yyt4Ym24Ym94YqVIOGKpeGKleGLsuGIjeGKrSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yqo4YiN4YqtIOGJoOGIi+GLrSDhiJjhjKDhiYDhiJ0g4Yyh4Ymj4YuKIOGJsOGKruGLjSDhiaXhi5kg4Yib4YiF4Yuw4YioIOGJteGLjeGIteGJs+GKlSDhiqXhipXhi7LhjKDhiYDhiJ0g4Ymg4Yib4Yu14Yio4YyNIOGJgOGIreGNi+GNiyDhi4jhi63hiJ0g4Yur4YiN4Ymw4Yio4YyL4YyLIOGIiuGLq+GLsOGIreGMiOGLjSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGIteGIreGMreGJsSDhiqjhibDhjKDhipPhiYDhiYAg4Ymg4YqL4YiLIOGLqOGImuGJgOGIqSDhiqDhjKPhiaPhiYIg4Yi14Yit4Yyt4Ym24Ym94YqVIOGKpeGKleGLsuGIjeGKrSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yqo4YiN4YqtIOGJoOGIi+GLrSDhiJjhjKDhiYDhiJ0g4Yi14YiN4YqpIOGJpeGLmSDhiJvhiIXhi7DhiKgg4Ym14YuN4Yi14Ymz4YqVIOGKpeGKleGLsuGMoOGJgOGInSDhiaDhiJvhi7XhiKjhjI0g4YmA4Yit4Y2L4Y2LIOGLiOGLreGInSDhi6vhiI3hibDhiKjhjIvhjIsg4YiK4Yur4Yuw4Yit4YyI4YuNIOGLreGJveGIi+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENvbnRhY3RzIiBtc2dpZD0iODM0ODQ4MTEzMTg5OTg4NjEzMSI+IuGKpeGLjeGJguGLq+GLjuGJveGIheGKlSDhiqDhipXhiaXhiaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDb250YWN0cyIgbXNnaWQ9IjgzNDg0ODExMzE4OTk4ODYxMzEiPiLhiqXhi43hiYLhi6vhi47hib3hi47hipUg4Yur4YqV4Yml4YmhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1Mjk0ODY2ODU2OTQxMTQ5NjM5Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGMoeGJo+GLiiDhibDhiq7hiIUg4Yi14YiI4Ymw4Yqo4Yib4Ym5IOGLleGLjeGJguGLq+GLjuGJvSDhi6vhiInhibXhipUg4YuN4YiC4Ymm4Ym9IOGJoOGImeGIieGNpCDhjKXhiKog4Yur4Yuw4Yio4YyN4Yqt4Ymg4Ym14YqV4Y2jIOGKouGInOGLreGIjSDhi6jhiIvhiq3hiaDhibXhipUg4YuI4Yut4YidIOGKqOGJsOGLiOGIsOGKkSDhjI3hiIjhiLDhiabhib0g4YyL4YitIOGJoOGIjOGIiyDhiJjhipXhjIjhi7Ug4Yuo4Ymw4YyI4YqT4YqY4YiF4Ymg4Ym14YqVIOGLteGMjeGIneGMjeGInuGIvSDhjKjhiJ3hiK7hjaMg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4Y2I4YmD4Yu1IOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhiqXhi43hiYLhi6sg4YuN4YiC4Yml4YiF4YqVIOGKpeGKleGLsuGLq+GIteGJgOGIneGMoSDhi6jhiJrhjYjhiYXhi7XhiIvhibjhi40g4Yiy4YiG4YqVIOGJsOGKleGKruGIjSDhiqDhi5jhiI0g4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGLqOGKpeGLjeGJguGLq+GIheGKlSDhi43hiILhiaUg4Yiz4Ymz4YuN4YmA4YuNIOGIiuGLq+GMi+GIqeGJtSDhi63hib3hiIvhiInhjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDQwNjU0MTUyNDU3MzAwNjYyIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGIteGIjeGKreGIhSDhiLXhiIjhibDhiqjhiJvhibkg4YuV4YuN4YmC4Yur4YuO4Ym9IOGLq+GIieGJteGKlSDhi43hiILhiabhib0g4Ymg4YiZ4YiJ4Y2kIOGMpeGIqiDhi6vhi7DhiKjhjI3hiq3hiaDhibXhipXhjaMg4Yqi4Yic4Yut4YiNIOGLqOGIi+GKreGJoOGJteGKlSDhi4jhi63hiJ0g4Yqo4Ymw4YuI4Yiw4YqRIOGMjeGIiOGIsOGJpuGJvSDhjIvhiK0g4Ymg4YiM4YiLIOGImOGKleGMiOGLtSDhi6jhibDhjIjhipPhipjhiIXhiaDhibXhipUg4Yu14YyN4Yid4YyN4Yie4Yi9IOGMqOGIneGIruGNoyDhiqXhipXhi7Lhi6vhipDhiaUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhjYjhiYPhi7Ug4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGLqOGKpeGLjeGJguGLqyDhi43hiILhiaXhiIXhipUg4Yql4YqV4Yuy4Yur4Yi14YmA4Yid4YyhIOGLqOGImuGNiOGJheGLteGIi+GJuOGLjSDhiLLhiIbhipUg4Ymw4YqV4Yqu4YiNIOGKoOGLmOGIjSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4Yuo4Yql4YuN4YmC4Yur4YiF4YqVIOGLjeGIguGJpSDhiLPhibPhi43hiYDhi40g4YiK4Yur4YyL4Yip4Ym1IOGLreGJveGIi+GIieGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Ymg4Yi14YiN4Yqt4YuOIOGIteGIiOGJsOGKqOGIm+GJuSDhi5Xhi43hiYLhi6vhi47hib0g4Yur4YiJ4Ym14YqVIOGLjeGIguGJpuGJvSDhiaDhiJnhiInhjaQg4Yyl4YiqIOGLq+GLsOGIqOGMieGJoOGJteGKleGNoyDhiqLhiJzhi63hiI0g4Yuo4YiL4Yqp4Ymg4Ym14YqVIOGLiOGLreGInSDhiqjhibDhi4jhiLDhipEg4YyN4YiI4Yiw4Ymm4Ym9IOGMi+GIrSDhiaDhiIzhiIsg4YiY4YqV4YyI4Yu1IOGLqOGJsOGMiOGKk+GKmeGJoOGJteGKlSDhi7XhjI3hiJ3hjI3hiJ7hiL0g4Yyo4Yid4Yiu4Y2jIOGKpeGKleGLsuGLq+GKkOGJpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGNiOGJg+GLtSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4Yuo4Yql4YuN4YmC4YurIOGLjeGIguGJpeGLjuGKlSDhiqXhipXhi7Lhi6vhiLXhiYDhiJ3hjKEg4Yuo4Yia4Y2I4YmF4Yu14YiL4Ym44YuNIOGIsuGIhuGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhiqXhi43hiYLhi6vhi47hipUg4YuN4YiC4YmlIOGIs+GLq+GLjeGJgeGJtSDhiIrhi6vhjIvhiKnhibUg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNvbnRhY3RzIiBtc2dpZD0iNTEwNzQ5MjA4NjQxNjc5MzU0NCI+IuGLleGLjeGJguGLq+GLjuGJveGLjuGKlSDhi6vhiLXhibDhiqvhiq3hiIkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Ymg4Yyh4Ymj4YuKIOGJseGKruGIhSDhiLXhiIjhibDhiqjhiJvhibkg4Yuo4YuV4YuN4YmC4Yur4YuO4Ym94YiFIOGLjeGIguGJpSDhiaDhiJnhiInhjaQg4Yyl4YiqIOGLq+GLsOGIqOGMjeGKreGJoOGJteGKleGNoyDhiqLhiJzhi63hiI0g4Yuo4YiL4Yqt4Ymg4Ym14YqVIOGLiOGLreGInSDhiqjhibDhi4jhiLDhipEg4Yql4YuN4YmC4Yur4YuO4Ym9IOGMi+GIrSDhiaDhiIzhiIsg4YiY4YqV4YyI4Yu1IOGLqOGJsOGMiOGKk+GKmOGIheGJoOGJteGKlSDhi7XhjI3hiJ3hjI3hiJ7hiL0g4Yyo4Yid4Yiu4Y2jIOGKpeGKleGLsuGLq+GIteGJsOGKq+GKreGIjSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGNiOGJg+GLtSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4Yuo4Yql4YuN4YmC4YurIOGLjeGIguGJpSDhiqXhipXhi7LhiLDhiK3hi5kg4Yut4Y2I4YmF4Yu14YiL4Ym44YuL4YiN4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU4OTg2OTIyNDYyNTE2MzU1OCI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiaDhiLXhiI3hiq3hiIUg4Yi14YiI4Ymw4Yqo4Yib4Ym5IOGLqOGLleGLjeGJguGLq+GLjuGJveGIhSDhi43hiILhiaUg4Ymg4YiZ4YiJ4Y2kIOGMpeGIqiDhi6vhi7DhiKjhjI3hiq3hiaDhibXhipXhjaMg4Yqi4Yic4Yut4YiNIOGLqOGIi+GKreGJoOGJteGKlSDhi4jhi63hiJ0g4Yqo4Ymw4YuI4Yiw4YqRIOGKpeGLjeGJguGLq+GLjuGJvSDhjIvhiK0g4Ymg4YiM4YiLIOGImOGKleGMiOGLtSDhi6jhibDhjIjhipPhipjhiIXhiaDhibXhipUg4Yu14YyN4Yid4YyN4Yie4Yi9IOGMqOGIneGIruGNoyDhiqXhipXhi7Lhi6vhiLXhibDhiqvhiq3hiI0g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhjYjhiYPhi7Ug4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGLqOGKpeGLjeGJguGLqyDhi43hiILhiaUg4Yql4YqV4Yuy4Yiw4Yit4YuZIOGLreGNiOGJheGLteGIi+GJuOGLi+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1ODk4NjkyMjQ2MjUxNjM1NTgiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Ymg4Yi14YiN4Yqt4YuOIOGIteGIiOGJsOGKqOGIm+GJuSDhi6jhi5Xhi43hiYLhi6vhi47hib3hi44g4YuN4YiC4YmlIOGJoOGImeGIieGNpCDhjKXhiKog4Yur4Yuw4Yio4YyJ4Ymg4Ym14YqV4Y2jIOGKouGInOGLreGIjSDhi6jhiIvhiqnhiaDhibXhipUg4YuI4Yut4YidIOGKqOGJsOGLiOGIsOGKkSDhiqXhi43hiYLhi6vhi47hib0g4YyL4YitIOGJoOGIjOGIiyDhiJjhipXhjIjhi7Ug4Yuo4Ymw4YyI4YqT4YqZ4Ymg4Ym14YqVIOGLteGMjeGIneGMjeGInuGIvSDhjKjhiJ3hiK7hjaMg4Yql4YqV4Yuy4Yur4Yi14Ymw4Yqr4Yqt4YiNIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4Y2I4YmD4Yu1IOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhiqXhi43hiYLhi6sg4YuN4YiC4YmlIOGKpeGKleGLsuGIsOGIreGLmSDhi63hjYjhiYXhi7XhiIvhibjhi4vhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxsTG9nIiBtc2dpZD0iMzQ3ODEzMzE4NDYyNDEwMjczOSI+IuGLqOGMpeGIqiDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi74YqVIOGKoOGKleGJpeGJpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNzAwNjQ1MTg0ODcwNzYwMjg1Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGIteGIiOGMiOGJouGKkyDhi4jhjKog4Yyl4Yiq4YuO4Ym9IOGLq+GIiCDhi43hiILhiaXhipUg4Yyo4Yid4YiuIOGLqOGMoeGJo+GLiiDhibDhiq7hiIXhipUg4Yuo4Yyl4YiqIOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4Y2I4YmD4Yu1IOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhjKXhiKog4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhi43hiILhiaXhiIXhipUg4Yql4YqV4Yuy4Yur4Yi14YmA4Yid4YylIOGLqOGImuGNiOGJheGLteGIiOGJtSDhiLLhiIbhipUg4Ymw4YqV4Yqu4YiNIOGKoOGLmOGIjSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4Yiz4Ymz4YuN4YmA4YuNIOGLqOGMpeGIqiDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGLjeGIguGJpeGIheGKlSDhiIrhi6vhjIvhiKnhibUg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGIteGIiOGMiOGJouGKkyDhi4jhjKog4Yyl4Yiq4YuO4Ym9IOGLq+GIiCDhi43hiILhiaXhipUg4Yyo4Yid4YiuIOGLqOGIteGIjeGKreGIheGKlSDhi6jhjKXhiKog4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiqXhipXhi7Lhi6vhipDhiaUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhjYjhiYPhi7Ug4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGMpeGIqiDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGLjeGIguGJpeGIheGKlSDhiqXhipXhi7Lhi6vhiLXhiYDhiJ3hjKUg4Yuo4Yia4Y2I4YmF4Yu14YiI4Ym1IOGIsuGIhuGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhiLPhibPhi43hiYDhi40g4Yuo4Yyl4YiqIOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YuN4YiC4Yml4YiF4YqVIOGIiuGLq+GMi+GIqeGJtSDhi63hib3hiIvhiInhjaIiPC9zdHJpbmc+CkBAIC00NTAsMTkgKzQ1NywxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4i4Yi14YiIIOGMiOGJoiDhiqXhipMg4YuI4YyqIOGMpeGIquGLjuGJveGKlSDhi43hiILhiaUg4Yyo4Yid4Yiu4Y2jIOGLqOGMoeGJo+GLiuGJsOGKruGIheGKlSDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGIiOGImOGJgOGLqOGIrSDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiN4Y2iIOGLreGIhOGKleGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhiLXhiI3hiq3hiIXhipUg4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiIjhiJjhiLDhiKjhi50g4YuI4Yut4YidIOGIiOGImOGIiOGLiOGMpSDhiIrhjKDhiYDhiJnhiaDhibUg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4i4Yi14YiIIOGMiOGJoiDhiqXhipMg4YuI4YyqIOGMpeGIquGLjuGJveGKlSDhi43hiILhiaUg4Yyo4Yid4Yiu4Y2jIOGLqOGIteGIjeGKreGIheGKlSDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGIiOGImOGJgOGLqOGIrSDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiN4Y2iIOGLreGIhOGKleGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhiLXhiI3hiq3hiIXhipUg4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiIjhiJjhiLDhiKjhi50g4YuI4Yut4YidIOGIiOGImOGIiOGLiOGMpSDhiIrhjKDhiYDhiJnhiaDhibUg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUHJvZmlsZSIgbXNnaWQ9IjQ3MDE4ODk4NTI2MTI3MTY2NzgiPiLhi6jhiKvhiLXhiIXhipUg4Yuo4Yql4YuN4YmC4YurIOGKq+GIreGLtSDhiqDhipXhiaXhiaUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NjI0NzUxNTE4NDk4ODg4NDgiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4YiN4YqtIOGKpeGKleGLsCDhiLXhiJ3hiIUg4Yql4YqTIOGLqOGKpeGLjeGJguGLqyDhiJjhiKjhjIPhiIUg4Yur4YiJIOGJoOGImOGIs+GIquGLq+GIhSDhiIvhi60g4Yuo4Ymw4Yqo4Yib4Ym5IOGLqOGMjeGIjSDhiJjhjIjhiIjhjKsg4YiY4Yio4YyD4YuO4Ym94YqVIOGKpeGKleGLsuGLq+GKkOGJpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiF4YidIOGIm+GIiOGJtSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4YiI4Yut4Ym2IOGIiuGLq+GLjeGJheGIhSDhiqXhipMg4Yuo4YiY4YyI4YiI4YyrIOGImOGIqOGMg+GIheGKlSDhiIjhiIzhiI7hib0g4YiK4YiN4YqtIOGLreGJveGIi+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiI3hiq0g4Yql4YqV4YuwIOGIteGIneGLjiDhiqXhipMg4Yuo4Yql4YuN4YmC4YurIOGImOGIqOGMg+GLjiDhi6vhiIkg4Ymg4YiY4Yiz4Yiq4Yur4YuOIOGIi+GLrSDhi6jhibDhiqjhiJvhibkg4Yuo4YyN4YiNIOGImOGMiOGIiOGMqyDhiJjhiKjhjIPhi47hib3hipUg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIXhiJ0g4Yib4YiI4Ym1IOGImOGJsOGMjeGJoOGIquGLq+GLjSDhiIjhi63hibYg4YiK4Yur4YuN4YmB4YuOIOGKpeGKkyDhi6jhiJjhjIjhiIjhjKsg4YiY4Yio4YyD4YuO4YqVIOGIiOGIjOGIjuGJvSDhiIrhiI3hiq0g4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiLhi6jhiKvhiLXhiIXhipUg4Yuo4YuV4YuN4YmC4YurIOGKq+GIreGLtSDhiqDhiLXhibDhiqvhiq3hiI0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NTUyMDg0Mjk0NTk4NDY1ODk5Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGIjeGKrSDhiqXhipXhi7Ag4Yi14Yid4YiFIOGKpeGKkyDhi6jhiqXhi43hiYLhi6sg4YiY4Yio4YyD4YiFIOGLq+GIiSDhiaDhiJjhiLPhiKrhi6vhiIUg4YiL4YutIOGLqOGJsOGKqOGIm+GJuSDhi6jhjI3hiI0g4YiY4YyI4YiI4YyrIOGImOGIqOGMg+GLjuGJveGKlSDhiqXhipXhi7LhiYDhi63hiK0g4YuI4Yut4YidIOGKpeGKleGLsuGLq+GKreGIjeGJo+GJuOGLjSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiF4YidIOGIm+GIiOGJtSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4YiI4Yut4Ym2IOGIiuGLq+GLjeGJheGIhSDhiqXhipMg4Yuo4YiY4YyI4YiI4YyrIOGImOGIqOGMg+GIheGKlSDhiIjhiIzhiI7hib0g4YiK4YiN4YqtIOGLreGJveGIi+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4YiN4YqtIOGKpeGKleGLsCDhiLXhiJ3hi44g4Yql4YqTIOGLqOGKpeGLjeGJguGLqyDhiJjhiKjhjIPhi44g4Yur4YiJIOGJoOGImOGIs+GIquGLq+GLjiDhiIvhi60g4Yuo4Ymw4Yqo4Yib4Ym5IOGLqOGMjeGIjSDhiJjhjIjhiIjhjKsg4YiY4Yio4YyD4YuO4Ym94YqVIOGKpeGKleGLsuGJgOGLreGIrSDhi4jhi63hiJ0g4Yql4YqV4Yuy4Yur4Yqt4YiN4Ymj4Ym44YuNIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIXhiJ0g4Yib4YiI4Ym1IOGImOGJsOGMjeGJoOGIquGLq+GLjSDhiIjhi63hibYg4YiK4Yur4YuN4YmF4YuOIOGKpeGKkyDhi6jhiJjhjIjhiIjhjKsg4YiY4Yio4YyD4YuO4YqVIOGIiOGIjOGIjuGJvSDhiIrhiI3hiq0g4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTI2ODkyMDk1NjE1MjQxOTE3MCI+IuGLqOGKoOGKleGJsOGKlSDhiJvhiIXhiaDhiKvhi4og4Yuo4YuN4Yut4Yut4Ym1IOGKreGNjeGIjuGJvSDhiqDhipXhiaXhiaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDI1NTcwNjAyNzE3MjA1MDg3MiI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhiqDhipXhibDhipXhipMg4Yuo4YyT4Yqe4Ym94YiF4YqVIOGIm+GIheGJoOGIq+GLiiDhi53hiJvhipThi47hib3hipUg4Yql4YqV4Yuy4Yuw4Yit4Yi14Ymj4Ym44YuNIOGKpeGKkyDhiqXhipXhi7Lhi6vhiJjhiLPhiLXhiIvhibjhi40g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGImOGIqOGMgyDhiLXhibPhjIvhiKsg4Ymw4Yyg4YqV4YmA4YmFIC0tIOGLreGIhSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yia4Yi14Yyl4Yir4YuK4YqQ4Ym14YqVIOGKqOGMjeGIneGJtSDhiLPhi6vhiLXhjIjhiaMg4Ymg4Yib4YiF4Ymg4Yir4YuKIOGKoOGLjeGJs+GIqCDhiJjhiKjhiabhib0g4Ymg4Yqg4YqV4YmwIOGKpeGKkyDhiaDhjJPhi7Dhip7hib3hiIUg4YiY4Yqr4Yqo4YiNIOGLqOGImuGLsOGIqOGMiSDhjI3hipXhipnhipDhibbhib3hipUg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhiJvhiLXhibPhi4jhiLvhjaYg4Yut4YiFIOGNiOGJg+GLtSDhiIjhiIHhiInhiJ0g4Yib4YiF4Ymg4Yir4YuKIOGKoOGLjeGJs+GIrSDhiJjhiKjhiabhib0g4YiL4YutIOGIi+GLreGNiOGMuOGInSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzUwNDE3OTIyMjQ5MzIzNTY0NSI+IuGLiOGLsCDhi6jhiqDhipXhibAgIOGIm+GIheGJoOGIq+GLiiDhi6jhi43hi63hi63hibUg4Yqt4Y2N4YiO4Ym9IOGMu+GNjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzA4NjU1NzU1MjIwNDExNDg0OSI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiqjhjJPhip7hib3hiIXhipUg4Yib4YiF4Ymg4Yir4YuKIOGLneGIm+GKlOGLjuGJveGKlSDhiqXhipXhi7Lhi6vhiLPhi60g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGImOGIqOGMgyDhiLXhibPhjIvhiKsg4Ymw4Yyg4YqV4YmA4YmFIC0tIOGLreGIhSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yqo4YyT4Yuw4YqbIOGLqOGImOGMoSDhi6jhiJrhiJjhiLXhiIkg4YiY4YiN4Yql4Yqt4Ym24Ym94YqVIOGKpeGKleGLsuGLq+GLmOGMi+GMhSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yib4Yi14Ymz4YuI4Yi74Y2mIOGLreGIhSDhjYjhiYPhi7Ug4Ymg4YiB4YiJ4YidIOGIm+GIheGJoOGIq+GLiiDhiqDhi43hibPhiKgg4YiY4Yio4Ymm4Ym9IOGIi+GLrSDhiIvhi63hjYjhjLjhiJ0g4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsZW5kYXIiIG1zZ2lkPSI1OTcyNzI3NTYwMjU3NjEyMzk4Ij4i4Yuo4YmA4YqVIOGImOGJgeGMoOGIquGLqyDhiq3hiLXhibDhibbhib0g4Ymw4Yyo4Yib4YiqIOGImuGIteGMpeGIq+GLiiDhiJjhiKjhjIMg4Yqg4YqV4Yml4YmlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MjE2NDYyMDQ5MDU3NjU4NzIzIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGMk+GLsOGKnuGJveGKlSDhi4jhi63hiJ0g4Yuo4Yi14YirIOGJo+GIjeGLsOGIqOGJpuGJveGKlSDhjKjhiJ3hiK4g4YiB4YiJ4YqV4YidIOGJoOGMoeGJo+GLiiDhibHhiq7hiIUg4YiL4YutIOGLqOGJsOGKqOGIm+GJuSDhi6jhiYDhipUg4YiY4YmB4Yyg4Yiq4YurIOGKreGIteGJsOGJtuGJvSDhiqXhipXhi7Lhi6vhipDhiaUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yuo4YmA4YqVIOGImOGJgeGMoOGIquGLqyDhi43hiILhiaXhiIXhipUg4Yia4Yi14Yyl4Yir4YuK4Ymx4YqVIOGKqOGMjeGIneGJtSDhiLPhi6vhiLXhjIjhiaMg4Yql4YqV4Yuy4Yur4YyL4YirIOGLiOGLreGInSDhiqXhipXhi7Lhi6vhiLXhiYDhiJ3hjKUg4YiK4Y2I4YmF4Yu14YiI4Ym1IOGLreGJveGIi+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc0MzQ1NDg2ODI0NzA4NTE1ODMiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yuo4YyT4Yuw4Yqe4Ym94YqVIOGLiOGLreGInSDhi6jhiLXhiKsg4Ymj4YiN4Yuw4Yio4Ymm4Ym94YqVIOGMqOGIneGIriDhiIHhiInhipXhiJ0g4Ymg4Yi14YiN4Yqt4YiFIOGIi+GLrSDhi6jhibDhiqjhiJvhibkg4Yuo4YmA4YqVIOGImOGJgeGMoOGIquGLqyDhiq3hiLXhibDhibbhib0g4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGJgOGKlSDhiJjhiYHhjKDhiKrhi6sg4YuN4YiC4Yml4YiF4YqVIOGImuGIteGMpeGIq+GLiuGJseGKlSDhiqjhjI3hiJ3hibUg4Yiz4Yur4Yi14YyI4YmjIOGKpeGKleGLsuGLq+GMi+GIqyDhi4jhi63hiJ0g4Yql4YqV4Yuy4Yur4Yi14YmA4Yid4YylIOGIiuGNiOGJheGLteGIiOGJtSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NDM0NTQ4NjgyNDcwODUxNTgzIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGMk+GLsOGKnuGJveGKlSDhi4jhi63hiJ0g4Yuo4Yi14YirIOGJo+GIjeGLsOGIqOGJpuGJveGKlSDhjKjhiJ3hiK4g4YiB4YiJ4YqV4YidIOGJoOGIteGIjeGKreGLjiDhiIvhi60g4Yuo4Ymw4Yqo4Yib4Ym5IOGLqOGJgOGKlSDhiJjhiYHhjKDhiKrhi6sg4Yqt4Yi14Ymw4Ym24Ym9IOGKpeGKleGLsuGLq+GKkOGJpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhiYDhipUg4YiY4YmB4Yyg4Yiq4YurIOGLjeGIguGJpeGLjuGKlSDhiJrhiLXhjKXhiKvhi4rhipDhibHhipUg4Yqo4YyN4Yid4Ym1IOGIs+GLq+GIteGMiOGJoyDhiqXhipXhi7Lhi6vhjIvhiKsg4YuI4Yut4YidIOGKpeGKleGLsuGLq+GIteGJgOGIneGMpSDhiIrhjYjhiYXhi7XhiIjhibUg4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+IuGLqOGJgOGKlSDhiJjhiYHhjKDhiKrhi6sg4Yqt4Yi14Ymw4Ym24Ym94YqVIOGJgOGLreGIrSDhi4jhi63hiJ0g4Yqg4Yqt4YiNIOGKpeGKkyDhiIjhiqXhipXhjI3hi7bhib0g4Yqo4Ymj4YiI4Ymk4YmxIOGLleGLjeGJheGKkyDhi43hjKog4YiL4Yqt4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhjJPhi7Dhip7hib3hiIXhipUg4Yql4YqTIOGLqOGIteGIqyDhiaPhiI3hi7DhiKjhiabhib3hiIXhipUg4Yyo4Yid4YiuIOGJoOGMoeGJo+GLiiDhibDhiq7hiIUg4YiL4YutIOGIjeGJs+GIteGJsOGKq+GKreGIi+GJuOGLjSDhi6jhiJ3hibXhib3hiIvhibjhi43hipUg4Yqt4Yi14Ymw4Ym24Ym9IOGKpeGKleGLsuGLq+GKreGIjeGNoyDhiqXhipXhi7Lhi6vhiLXhi4jhjI3hi7XhjaMg4Yql4YqV4Yuy4YiI4YuN4YylIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGKqOGJgOGKlSDhiJjhiYHhjKDhiKrhi6sg4Ymj4YiI4Ymk4Ym24Ym9IOGLqOGImOGMoSDhi6jhiJrhiJjhiLXhiIkg4YiY4YiN4Yql4Yqt4Ym24Ym94YqVIOGKpeGKleGLsuGIjeGKrSDhi4jhi63hiJ0g4Yur4YiI4Ymj4YiI4Ymk4YmxIOGKpeGLjeGJgOGJtSDhiq3hiLXhibDhibbhib3hipUg4Yql4YqV4Yuy4Yur4Yi14Ymw4Yqr4Yqt4YiNIOGIiuGNiOGJheGLteGIiOGJtSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhjJPhi7Dhip7hib3hiIXhipUg4Yql4YqTIOGLqOGIteGIqyDhiaPhiI3hi7DhiKjhiabhib3hiIXhipUg4Yyo4Yid4YiuIOGJoOGIteGIjeGKreGIhSDhiIvhi60g4YiN4Ymz4Yi14Ymw4Yqr4Yqt4YiL4Ym44YuNIOGLqOGIneGJteGJveGIi+GJuOGLjeGKlSDhiq3hiLXhibDhibbhib0g4Yql4YqV4Yuy4Yur4Yqt4YiN4Y2jIOGKpeGKleGLsuGLq+GIteGLiOGMjeGLteGNoyDhiqXhipXhi7LhiIjhi43hjKUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yqo4YmA4YqVIOGImOGJgeGMoOGIquGLqyDhiaPhiIjhiaThibbhib0g4Yuo4YiY4YyhIOGLqOGImuGImOGIteGIiSDhiJjhiI3hiqXhiq3hibbhib3hipUg4Yql4YqV4Yuy4YiN4YqtIOGLiOGLreGInSDhi6vhiIjhiaPhiIjhiaThibEg4Yql4YuN4YmA4Ym1IOGKreGIteGJsOGJtuGJveGKlSDhiqXhipXhi7Lhi6vhiLXhibDhiqvhiq3hiI0g4YiK4Y2I4YmF4Yu14YiI4Ym1IOGLreGJveGIi+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMzI0NDY5NDk2MzI3MjQ5Mzc2Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGMk+GLsOGKnuGJveGLjuGKlSDhiqXhipMg4Yuo4Yi14YirIOGJo+GIjeGLsOGIqOGJpuGJveGLjuGKlSDhjKjhiJ3hiK4g4Ymg4Yi14YiN4Yqt4YuOIOGIi+GLrSDhiIrhi6vhiLXhibDhiqvhiq3hiI/hibjhi40g4Yuo4Yia4Ym94YiP4Ym44YuN4YqVIOGKreGIteGJsOGJtuGJvSDhiqXhipXhi7Lhi6vhiq3hiI3hjaMg4Yql4YqV4Yuy4Yur4Yi14YuI4YyN4Yu14Y2jIOGKpeGKleGLsuGIiOGLjeGMpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGImOGJsOGMjeGJoOGIquGLq+GLjSDhiqjhiYDhipUg4YiY4YmB4Yyg4Yiq4YurIOGJo+GIiOGJpOGJtuGJvSDhi6jhiJjhjKEg4Yuo4Yia4YiY4Yi14YiJIOGImOGIjeGLleGKreGJtuGJveGKlSDhiqXhipXhi7LhiI3hiq0g4YuI4Yut4YidIOGLq+GIiOGJo+GIiOGJpOGJsSDhiqXhi43hiYDhibUg4Yqt4Yi14Ymw4Ym24Ym94YqVIOGKpeGKleGLsuGLq+GIteGJsOGKq+GKreGIjSDhiIrhjYjhiYXhi7XhiIjhibUg4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI4Njg4MzM0OTc0MDM2ODIzMzMwIj4i4YiI4YiZ4Yqo4YirIOGMiuGLnOGLq+GLiiDhiKXhjY3hiKsg4Y2N4Yyg4Yit4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuGIiOGImeGKqOGIqyDhi6jhiJvhiLXhiJjhiLDhiI0g4Yuo4YiY4YqQ4Yi7IOGIneGKleGMruGJveGKlSDhjY3hjKDhiK0g4YuI4Yut4YidIOGKoOGLsuGItSDhi6jhiqDhiqvhiaPhiaIg4Yqg4YmF4Yir4YmiIOGMq+GKleGNoiDhi63hiIUg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGKoOGKq+GJo+GJouGLjeGKlSDhiqXhipMv4YuI4Yut4YidIOGKpeGKleGLsCBHUFMg4YuI4Yut4YidIOGLqOGKoOGKq+GJo+GJoiDhiqDhiYXhiKvhiaLhi47hib0g4Ymj4YiJIOGIjOGIiyDhi6jhiJjhipDhiLsg4Yid4YqV4Yyu4Ym9IOGLqOGJsOGImOGIiOGIsSDhiIHhipThibPhi47hib3hipUg4Ym94YiLIOGKpeGKleGLsuGIjSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLhibDhjKjhiJvhiKog4Yil4Y2N4YirIOGKoOGJheGIq+GJoiDhibXhi5Xhi5vhi57hib3hipUg4Yu14Yio4Yi14Y2iIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLhiJjhibDhjI3hiaDhiKrhi6vhi43hipUg4YuoU3VyZmFjZUZsaW5nZXIg4Yud4YmF4Ymw4YqbIOGLsOGIqOGMgyDhiaPhiIXhiKrhi6vhibXhipUg4YiI4YiY4Yyg4YmA4YidIOGLreGNiOGJheGLs+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuGLqOGKleGLkeGItSDhiq3hjYjhjY0g4YmL4Ym1IOGKoOGKleGJpeGJpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLhi6jhiq3hjYjhjY0g4YmL4Ym1IOGLreGLmOGJtSDhiIjhiJvhipXhiaDhiaUg4YiI4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLreGNiOGJheGLs+GIieGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IklucHV0RmxpbmdlciDhipUg4YiY4Yu14Yio4Yi1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiaPhiIjhiqDhipDhiLXhibDhipsg4YuoSW5wdXRGbGluZ2VyIOGJo+GIheGIquGLq+GJtSDhiqXhipXhi7LhjKDhiYDhiJ0g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLhi6hXaWZpIOGIm+GIs+GLq+GLjuGJveGKlSDhiqDhi4vhiYXhiK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4YuoV2lmaSDhiJvhiLPhi6vhi47hib3hipUg4Yql4YqV4Yuy4Yur4YuL4YmF4Yit4YqTIOGKqOGKpeGKkOGIsSDhjIvhiK0g4Yql4YqV4Yuy4YyI4YqT4YqdIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i4YuoV2lmaSDhiJvhiLPhi6vhi47hib3hipUg4Ymw4YmG4Yyj4Yyg4YitIjwvc3RyaW5nPgpAQCAtNDkzLDkgKzUwMiwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWVkaWFDb250ZW50Q29udHJvbCIgbXNnaWQ9IjE2Mzc0NzgyMDAyNzIwNjIiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yuo4Yia4Yuy4YurIOGImOGIjeGIsOGIhSDhiqDhjKvhi43hibXhipUg4Yql4YqV4Yuy4YmG4Yyj4Yyg4YitIOGKpeGKkyDhi6jhiJrhi7Lhi6sg4YiY4Yio4YyD4YuN4YqVICjhiK3hiqXhiLXhjaMg4Yuw4Yir4YiyLi4uKSDhiqXhipXhi7Lhi7DhiK3hiLUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iNjA5NTg1OTkzNzA2OTE0NjA4NiI+IuGLqOGLteGIneGNhSDhiYXhipXhiaXhiK7hib3hipUg4YiI4YuN4YylIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yqg4YqV4YuwIOGLqOGLteGIneGMvSDhiJjhjKDhipUg4Yql4YqTIOGIiOGLjeGMveGKoOGJtSDhi6jhibXhipvhi43hipUg4Yuo4Yu14Yid4Yy9IOGIm+GMieGLqyDhjKXhiYXhiJ0g4YiL4YutIOGKpeGKleGLsOGLi+GIiCDhi6jhiJjhiLPhiLDhiIkg4YiB4YiI4YqV4Ymw4YqT4YuKIOGLqOGLteGIneGMvSDhiYXhipXhiaXhiK7hib3hipUg4Yql4YqV4Yuy4Yur4Yi14Ymw4Yqr4Yqt4YiNIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4i4Yqm4Yuy4YuuIOGJheGLsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4i4Yqm4Yuy4YuuIOGLreGJheGLsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi7XhiJ3hjL3hipUg4Ymg4Yib4Yut4Yqt4Yiu4Y2O4YqVIOGKpeGKleGLsuGJgOGLsyDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGNiOGJg+GLtSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yur4YiL4YqV4YmwIOGIm+GIqOGMi+GMiOGMqyDhiaDhiJvhipXhipvhi43hiJ0g4YyK4YucIOGLteGIneGMvSDhiqXhipXhi7LhiYDhi7Mg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i4Y2O4Ym24YuO4Ym9IOGKpeGKkyDhiarhi7Lhi67hi47hib0g4Yqg4YqV4YizIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiLhi6jhiLLhiJ0g4YyN4YqV4YqZ4YqQ4Ym1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJteGLleGLm+GLnuGJveGKlSDhi4jhi7Ag4Yiy4YiZIOGKpeGKleGLsuGIjeGKrSDhi6vhiLXhib3hiIjhi4vhiI3hjaIg4Yut4YiEIOGJoOGMo+GImyDhiqDhi7DhjIjhipsg4YqQ4YuN4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i4Y2O4Ym24YuO4Ym9IOGKpeGKkyDhiarhi7Lhi67hi47hib0g4Yur4YqV4YixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiaDhiqvhiJzhiKvhi40g4Y2O4Ym24YuO4Ym94YqV4YqTIOGJquGLsuGLruGLjuGJveGKlSDhiqXhipXhi7Lhi6vhipDhiLMg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhjYjhiYPhi7Ug4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGKq+GInOGIq+GLjeGKlSDhiaDhiJvhipXhipvhi43hiJ0g4YyK4YucIOGLq+GIi+GKleGJsCDhiJvhiKjhjIvhjIjhjKsg4Yql4YqV4Yuy4Yyg4YmA4YidIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IuGKq+GInOGIq+GLjSDhiLXhiKsg4YiL4YutIOGIsuGIhuGKlSDhi6jhiJvhiLXhibDhiIvhiIjhjY0g4Yqg4YiY4YiN4Yqr4Ym9IOGKpOGIjSDhiqIg4Yuy4YqVIOGLq+GIsOGKk+GKreGIiSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjQ3NjQ1ODU0NjU0ODAyOTUzNDEiPiLhiYDhi7XhiJ4g4Yuo4Ymw4Yyr4YqQIOGLqOGIteGIreGLk+GJtSDhiJjhibDhjI3hiaDhiKrhi6sg4Yqr4Yic4Yir4YuN4YqVIOGKoOGImOGIi+GKq+GJvSDhiqThiI0g4YqiIOGLsiDhiqXhipXhi7Phi63hjKDhiYDhiJ0g4Yql4YqV4Yuy4Yur4Yiw4YqT4Yqt4YiNIOGLq+GIteGJveGIiOGLi+GIjeGNoiI8L3N0cmluZz4KQEAgLTU3OCwxNiArNTg5LDE2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0OTk5NDM0ODg0MzY2MzMzOTgiPiIg4Yuo4Yi14YiN4Yqp4YqVIOGIsOGLk+GJtSDhiJjhiIjhi4jhjKUg4YiI4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLreGNiOGJheGLs+GIieGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+IuGKpeGKleGLsCDhiqDhi43hiK3hi7XhiqDhi7jhiKvhjIXhiqDhjIjhiI3hjI3hiI7hibUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSIxOTQ4NDU1NTUyMzMzNjE1OTU0Ij4iIOGLiOGLsCDhiJjhiIjhi6sg4Yqg4Yio4YyL4YyL4Yyu4Ym9IOGMpeGIqiDhiIjhiJvhi7XhiKjhjI0g4YiI4YiY4Ymw4YyN4Ymg4Yiq4YurIOGLreGNiOGJheGLs+GIieGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QWNjb3VudHMiIG1zZ2lkPSIxMDg2Nzk1NDY3NzYwMTIyMTE0Ij4i4YiY4Yij4Yiq4Yur4YuNIOGIi+GLrSDhi6vhiIkg4YiY4YiI4Yur4YuO4Ym94YqVIOGKoOGMjeGKnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QWNjb3VudHMiIG1zZ2lkPSIxMDg2Nzk1NDY3NzYwMTIyMTE0Ij4i4YiY4Yij4Yiq4Yur4YuNIOGIi+GLrSDhi6vhiIkg4YiY4YiI4Yur4YuO4Ym94YqVIOGLq+GMjeGKmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzQxNDk2NTM0NzY5NjYwMDI3Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGMoeGJo+GLiiDhibDhiq7hi40g4Yuo4Yia4Ymz4YuI4YmB4Ym14YqVIOGImOGIiOGLq+GLjuGJvSDhi53hiK3hi53hiK0g4Yql4YqV4Yuy4Yur4YyI4YqdIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4Ymg4Yyr4YqV4YuL4Ym44YuNIOGIm+GKk+GJuOGLjeGInSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4Yuo4Ymw4Y2I4Yyg4YipIOGImOGIiOGLq+GLjuGJveGKlSDhiIrhi6vhjKDhiYPhiI3hiI0g4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDQ4MzE2ODIyNDUxODA3MzgyIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGIteGIjeGKqSDhi6jhiJrhibPhi4jhiYHhibXhipUg4YiY4YiI4Yur4YuO4Ym9IOGLneGIreGLneGIrSDhiqXhipXhi7Lhi6vhjIjhip0g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhiaDhjKvhipXhi4vhibjhi40g4Yib4YqT4Ym44YuN4YidIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhibDhjYjhjKDhiKkg4YiY4YiI4Yur4YuO4Ym94YqVIOGIiuGLq+GMoOGJg+GIjeGIjSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTI2NTkwODQ4MTE3MjczNjkzMyI+IuGImOGIiOGLq+GLjuGJveGKlSDhjY3hjKDhiK3hipMg4Yuo4Yut4YiI4Y2NIOGJg+GIi+GJteGKlSDhiqDhiLXhiYDhiJ3hjKUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjU0NzIxMjQyOTY5MDg5NzcyNjAiPiLhi6jhiJjhiIjhi6sg4Yqg4Yio4YyL4YyL4YytIOGImOGIiOGLqyDhiJjhipPhjIUg4Ym94YiO4Ymz4YqVIOGIiOGImOGMoOGJgOGIneGNoyDhiJjhiIjhi6sg4YiY4Y2N4Yyg4YitIOGKpeGKkyDhi6jhi63hiIjhjY0g4YmD4YiO4Ym94YqVIOGIiOGIm+GMjeGKmOGJtSDhiqXhipMg4YiI4Yib4YmA4YqT4YyA4Ym1IOGKoOGKreGIjiDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiJIOGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4i4YiY4YiI4Yur4YuO4Ym94YqVIOGKoOGKreGIjSDhi4jhi63hiJ0g4Yqg4Yi14YuI4YyN4Yu1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9IjQ5ODMxMjYzMDQ3NTcxNzczMDUiPiLhiJjhiIjhi6vhi47hib3hipUg4Yur4Yqt4YiJIOGLiOGLreGInSDhi6vhiLXhi4jhjI3hi7EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiLhiJjhiIjhi6vhi47hib3hipUg4Yql4YqV4YuwIOGIm+GKqOGIjSDhiqXhipMg4Yib4Yi14YuI4YyI4Yu1IOGKreGLiOGKk+GLjuGJveGKlSDhiqXhipMg4Yuo4Yut4YiI4Y2NIOGJg+GIjeGKlSDhiJjhiLDhiKjhi50g4YiI4Yib4Yqo4YqT4YuI4YqVIOGIiOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi63hjYjhiYXhi7PhiInhjaHhjaEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iMjM1NDgxMzk2MTYzODc3NjQyIj4i4Ymg4YiY4Yij4Yiq4Yur4YuNIOGIi+GLrSDhi6vhiIkg4YiY4YiI4Yur4YuO4Ym94YqVIOGJsOGMoOGJgOGInSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSIyMzU0ODEzOTYxNjM4Nzc2NDIiPiLhiaDhiJjhiKPhiKrhi6vhi40g4YiL4YutIOGLq+GIiSDhiJjhiIjhi6vhi47hib3hipUg4Yut4Yyg4YmA4YiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSI3OTg0MjI3MTQ3NDAzMzQ2NDIyIj4i4Yuo4Yib4Yio4YyL4YyI4YyrIOGLqOGIneGIteGMi+GKkyDhi6jhiJ3hiLXhiq3hiK0g4YuI4Yio4YmA4Ym14YqVIOGIiOGImOGMoOGLqOGJhSDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiJ4Y2h4Y2hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4i4Yuo4Yqg4YuN4Ymz4YioIOGImOGIqOGJpSDhjI3hipHhip3hipDhibbhib3hipUg4Yql4YutIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4i4Yuo4Yqg4YuN4Ymz4YioIOGImOGIqOGJpSDhjI3hipXhipnhipDhibbhib3hipUg4Yut4YiY4YiN4Yqo4YmxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iODMxODk2NDQyNDY3NTk2MDk3NSI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiqXhipXhi7Ag4Yuo4Ym14Yqb4YuO4Ym5IOGKoOGLjeGJs+GIqCDhiJjhiKjhiabhib0g4Yql4YqV4Yuz4YiJIOGKpeGKkyDhiqXhipXhi7DhibDhjIjhipPhipkg4Yur4YiJIOGLqOGKoOGLjeGJs+GIqCDhiJjhiKjhiaUg4YyN4YqV4YqZ4YqQ4Ym24Ym9IOGImOGIqOGMg+GLjuGJveGKlSDhiqXhipXhi7Lhi6vhi60g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiLhiJnhiIkg4Yuo4Yqg4YuN4Ymz4YioIOGImOGIqOGJpSDhiJjhi7PhiKjhiLsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjM0MDMwNjIxODc3Nzk3MjQxODUiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yuo4Yqg4YuN4Ymz4YioIOGImOGIqOGJpSDhiJjhiLDhiqrhi6vhi47hib3hipUg4Yql4YqV4Yuy4Y2I4Yyl4YitIOGKpeGKkyDhiaXhjIEg4Yuo4Yqg4YuN4Ymz4YioIOGImOGIqOGJpSDhjZXhiK7hibbhiq7hiI7hib3hipUg4Yql4YqV4Yuy4Yyg4YmA4YidIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhiqDhiLPhiLkg4Yql4YqTIOGIjOGIjuGJvSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4YuN4YiC4YmlIOGLiOGLsCDhiaDhi63hipDhiJjhiKjhiaUg4Yuo4YiY4YiL4Yqq4YurIOGImOGKleGMiOGLtuGJveGKlSDhiLXhiIjhiJrhi6vhiYDhiK3hiaHhi43hiILhiaUg4YuI4YuwIOGJoOGLreGKkOGImOGIqOGJpSDhiIjhiJjhiIvhiq0g4Yut4YiFIOGNjeGJg+GLtSDhiqDhi6vhiLXhjYjhiI3hjI3hiJ3hjaIiPC9zdHJpbmc+CkBAIC02MzgsNyArNjQ5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNjU5NjE0NjAwMzM4OTA0MjQzIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJsOGMoOGJg+GImuGLjSDhiaDhibDhjKDhiYPhiJrhi40g4YiY4Yud4YyI4YmgLeGJg+GIi+GJtSDhiqDhiqjhiJvhib3hibfhibjhi40g4YiK4YiG4YqRIOGLqOGImuGJveGIiSDhiIHhiInhipXhiJ0g4YmD4YiL4Ym14Y2jIOGIteGInuGJveGKkyDhiJDhiKjhjIvhibUg4Yql4YqV4Yuy4Yur4YqQ4Ymj4Ym44YuNIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjE4MzExMDQwMjMxNDQ0MTEwNiI+IuGJoOGJsOGMoOGJg+GImiDhiaDhibDhjIjhiIjhjLgg4YiY4Yud4YyI4YmgIOGJg+GIi+GJtSDhiIvhi60g4YmD4YiL4Ym14YqVIOGLq+GKreGIi+GIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiLhiaDhibDhjKDhiYPhiJog4YiY4Yud4YyI4YmgIOGJg+GIi+GJtSDhi43hiLXhjKUg4Yqg4Yuy4Yi1IOGJg+GIjSDhiqXhipXhi7LhjL3hjY0g4YiI4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLreGNiOGJheGLs+GIieGNoeGNoSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjcyNzUwOTUxNTk0MDU0NjgiPiLhi6hVU0Ig4Yib4Yqo4Yib4Ym74YiF4YqVIOGLreGLmOGJtuGJvSDhiqDhipXhiaXhiaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY3Mjc1MDk1MTU5NDA1NDY4Ij4i4YuoVVNCIOGIm+GKqOGIm+GJu+GLjuGKlSDhi63hi5jhibbhib0g4Yur4YqV4Yml4YmhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4ODE1NjQ2MjkzNDk3Nzk0MCI+IuGLqFNEIOGKq+GIreGLteGIheGKlSDhi63hi5jhibbhib0g4Yqg4YqV4Yml4YmlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ2OTg4NzEyNTk4Mzg2MDc5Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGKpeGIreGIteGLjiBVU0Ig4Yib4Yqo4Yib4Ym7IOGLreGLmOGJtuGJveGKlSDhiqXhipXhi7Lhi6vhipDhiaUg4Yur4Yi14Ym94YiI4YuL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MDczNjI0NzM2NTQ5NzU0MTEiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yuo4Yql4Yit4Yi14YuOIFNEIOGKq+GIreGLtSDhi63hi5jhibbhib3hipUg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLq+GIteGJveGIiOGLi+GIjeGNoiI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IuGImOGKkOGIuyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLhiLXhiKsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IuGIjOGIiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiLhiJ3hipXhiJ0g4YiY4Ymw4YyN4Ymg4Yiq4YurIOGLreGIheGKleGKlSDhiqXhi43hiYLhi6sg4YiI4YiY4YiY4YiN4Yqo4Ym1IOGKoOGIjeGJsOGMiOGKmOGIneGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IuGNkuGKlSDhiq7hi7Ug4Ymw4Yut4YmlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIOGKpeGKkyDhiqDhi7LhiLUg4Y2S4YqVIOGJsOGLreGJpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4i4YuoUFVLIOGKruGLtSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IuGJgOGLreGIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IuGKoOGIteGMiOGJoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IuGImOGJsOGMjeGJoOGIquGLqyDhiJ3hiKjhjKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+4YqVIOGIm+GIteGMgOGImOGIrSDhiqDhiI3hibDhibvhiIjhiJ0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLhibDhjIvhiKsg4YqoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IuGKqCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IOGMi+GIrSDhibDhjIvhiKsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i4Ymj4YiI4Yi14YiL4Yut4Yu1IOGImOGLq+GLo+GNoeGNoSDhi7PhiLUmYW1wO+GLq+GLneGNoeGNoSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLhiIg8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4YuI4YuwIOGIi+GLrSDhiqDhipXhiLjhiKvhibXhibXhjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLhiIg8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4YuI4YuwIOGJs+GJvSDhiqDhipXhiLjhiKvhibXhibXhjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLhiIg8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4YuI4YuwIOGMjeGIqyDhiqDhipXhiLjhiKvhibXhibXhjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4i4YiIPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOGLiOGLsCDhiYDhip0g4Yqg4YqV4Yi44Yir4Ym14Ym14Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLhiq3hjYjhibUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4Yqr4Yic4YirIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuGNgOGMpeGJsyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLhi7XhiJ3hjYUg4Yqg4Yml4YirIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLhjY3hiIjhjIsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLhiIvhiIjhiJjhiYbhiIjhjY0g4Yqg4YqV4Yi44Yir4Ym14Y2h4Y2hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IuGLqOGLreGIiOGNjSDhiYPhiI0g4YmB4YiN4Y2O4Ym9ICDhiLLhipDhjIjhiKkg4YiI4YiY4Yi14Yib4Ym1IOGLqOGMhuGIriDhiJvhi7PhiJjhjKsg4Yiw4Yqr4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i4YqQ4Yyl4YmlLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IuGIteGIreGLk+GJtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i4Yuo4Yml4YiJ4Ymx4YudIOGLteGIneGMvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i4YyI4YiY4Yu1IOGKoOGIjeGJoyDhiJvhiLPhi6siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i4Ymw4Yqo4YqT4YuN4YqX4YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i4Yuo4Yia4Yuy4YurIOGLjeGMveGLk+GJtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i4Yqo4YiY4Yiz4Yiq4YurIOGMi+GIrSDhi6vhjIjhipPhipkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLhiJvhi6sg4YyI4Yy94YqVIOGLiOGLsCDhiJjhiKPhiKrhi6sg4Yut4YuN4Yiw4YuxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i4YiY4Yiz4Yiq4Yur4YuO4Ym94YqVIOGJoOGImOGNiOGIiOGMjSDhiIvhi63igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLhiYXhipXhiaXhiK7hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i4YyN4YqV4YqZ4YqQ4Ym1IOGKoOGJi+GIreGMpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLhiaDhiJjhiYPhipjhibUg4YiL4YutLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i4Ymg4Yib4YyI4YqT4YqY4Ym1IOGIi+GLrS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i4Yuo4Yia4YyI4YqZIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i4Ymw4Yuw4Yir4YmiICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuGNpiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+4Y2jIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiLhjaMg4Yuo4Ymw4Yyg4Ymg4YmAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLhjIjhiJjhi7Ug4Yqg4YiN4YmjIOGIm+GIs+GLqyDhibDhjIjhipPhip3hibfhiI0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i4Yut4YiFIOGIm+GLqyDhjIjhjL0g4Ymg4YiM4YiLIOGImOGIo+GIquGLqyDhiIvhi60g4Yql4Yur4Yiz4YuoIOGKkOGLjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiLhiJvhi6sg4YyI4Yy94YqVIOGJoOGImOGLjeGIsOGLtSDhiIvhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLhiqg8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4g4YyL4YitIOGJoOGImOGMiOGKk+GKmOGJtSDhiIvhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLhiJvhi6sg4YyI4Yy94YqVIOGJoOGImOGLjeGIsOGLtSDhiIvhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IuGKqDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiDhjIvhiK0g4Ymw4YyI4YqT4Yqd4Ym34YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IuGMjeGKleGKmeGKkOGJtSDhiqDhiYvhiK3hjKUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuGLqOGKoOGLsOGMiyDhjIrhi5wg4Yyl4YiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4Yi14Yit4YuT4YmwIOGMpeGIiOGJseGKlSDhiqXhiK3hiLMiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IuGJhuGLreGJsOGLjSDhiqXhipXhi7DhjIjhipMg4Yut4Yie4Yqt4YipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IuGKqOGImeGIiSDhjIjhjL0g4Yib4YurIOGIiOGImOGLjeGMo+GJtSDhjKPhibXhi47hipUg4Yqo4YiL4YutIOGLiOGLsOGJs+GJvSDhi6vhipXhiLjhiKvhibXhibHhjaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IuGJsOGKqOGKk+GLjeGKl+GIjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IuGLqOGIsOGLk+GJs+GJtSDhiq3hiaUg4Ymw4YqV4Yi44Yir4Ymz4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLhi6jhi7DhiYLhiYPhi47hib0g4Yqt4YmlIOGJsOGKleGIuOGIq+GJs+GJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLhiLDhi5PhibPhibXhipUg4Yut4Yid4Yio4YyhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4i4Yuw4YmC4YmD4YuO4Ym94YqVIOGLreGIneGIqOGMoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i4Yuo4YmA4YqT4Ym1IOGLqOGLiOGIrSDhjY3hiK3hjI3hiK3hjI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLhi6jhi5PhiJjhibUg4Yud4Yit4Yud4YitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLhi4jhiK0g4Yql4YqTIOGJgOGKlSDhi63hiJ3hiKjhjKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLhi5PhiJjhibUg4Yut4Yid4Yio4YyhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiDhibDhiJjhiK3hjKfhiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDhibDhiLDhiK3hi5/hiI0iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCmluZGV4IDJkOTFlMjguLjk1ODI3OWUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApAQCAtMjcsMTQgKzI3LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJ0ZXJhYnl0ZVNob3J0IiBtc2dpZD0iMjMxNjEzMDE4MTU5MTg2OTYyIj4i2KrZitix2KfYqNin2YrYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBldGFieXRlU2hvcnQiIG1zZ2lkPSI1NjM3ODE2NjgwMTQ0OTkwMjE5Ij4i2KjZitiq2KfYqNin2YrYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZpbGVTaXplU3VmZml4IiBtc2dpZD0iOTE2NDI5Mjc5MTUwMDUzMTk0OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJHM8L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDvYqNmE2Kcg2LnZhtmI2KfZhiZndDsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bnRpdGxlZCIgbXNnaWQ9IjQ2Mzg5NTY5NTQ4NTI3ODI1NzYiPiLigI8mbHQ72KjZhNinINi52YbZiNin2YYmZ3Q7Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXMiIG1zZ2lkPSI3ODk5ODI5NTE2MDQ4ODEzMjM3Ij4i4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXNfdHdvX2RvdHMiIG1zZ2lkPSIxMjI4MDc4OTk0ODY2MDMwNzM2Ij4i4oClIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIgbXNnaWQ9Ijc2OTQwNjMwNDIwNzk2NzY1MTciPiIo2YTZitizINmH2YbYp9mDINix2YLZhSDZh9in2KrZgSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIo2LrZitixINmF2LnYsdmI2YEpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdFZvaWNlTWFpbEFscGhhVGFnIiBtc2dpZD0iMjY2MDAyMDk5MDA5NzczMzA3NyI+Itin2YTYqNix2YrYryDYp9mE2LXZiNiq2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0TXNpc2RuQWxwaGFUYWciIG1zZ2lkPSIyODUwODg5NzU0OTE5NTg0Njc0Ij4iTVNJU0ROMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+Itit2K/Yq9iqINmF2LTZg9mE2Kkg2YHZiiDYp9mE2KfYqti12KfZhCDYo9mIINij2YYg2YPZiNivIE1NSSDYutmK2LEg2LXYrdmK2K0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pRXJyb3IiIG1zZ2lkPSI1MTU0NDk5NDU3NzM5MDUyOTA3Ij4i4oCP2K3Yr9ir2Kog2YXYtNmD2YTYqSDZgdmKINin2YTYp9iq2LXYp9mEINij2Ygg2KPZhiDZg9mI2K8gTU1JINi62YrYsSDYtdit2YrYrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtbWlGZG5FcnJvciIgbXNnaWQ9IjUyMjQzOTgyMTYzODUzMTY0NzEiPiLYqtmFINiq2YLZitmK2K8g2KfZhNiq2LTYutmK2YQg2YTYo9ix2YLYp9mFINin2YTYp9iq2LXYp9mEINin2YTYq9in2KjYqiDZgdmC2LcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWQiIG1zZ2lkPSI4MTQ3Mjc4MzQ2NDE0NzE0MzE1Ij4i2KrZhSDYqtmF2YPZitmGINin2YTYrtiv2YXYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZEZvciIgbXNnaWQ9IjY4NTYyMjgxNDA0NTM0NzEwNDEiPiLYqtmFINiq2YXZg9mK2YYg2KfZhNiu2K/ZhdipINmE2YA6Ijwvc3RyaW5nPgpAQCAtNDIsMjMgKzQyLDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlUmVnaXN0ZXJlZCIgbXNnaWQ9IjYyNzUwMTkwODI1OTgxMDI0OTMiPiLYqtmFINin2YTYqtiz2KzZitmEINio2YbYrNin2K0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiLZhNmFINmK2KrZhSDYp9mE2YXYs9itINio2YbYrNin2K0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRJbmNvcnJlY3QiIG1zZ2lkPSI3NjEyMjA4ODM5NDUwMTI4NzE1Ij4i2YPZhNmF2Kkg2YXYsdmI2LEg2LrZitixINi12K3Zitit2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4i2KfZg9iq2YXZhCBNTUkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFkUGluIiBtc2dpZD0iOTAxNTI3NzY0NTU0NjcxMDAxNCI+Itix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KfZhNmC2K/ZitmFINin2YTYsNmKINmD2KrYqNiq2Ycg2LrZitixINi12K3ZititLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhZFB1ayIgbXNnaWQ9IjU0ODcyNTc2NDcwODExMzIyMDEiPiLYsdmF2LIgUFVLINin2YTYsNmKINmD2KrYqNiq2Ycg2LrZitixINi12K3ZititLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUNvbXBsZXRlIiBtc2dpZD0iODIzMjUyNzQ5NTQxMTY5ODM1OSI+IuKAj9in2YPYqtmF2YQgTU1JLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhZFBpbiIgbXNnaWQ9IjkwMTUyNzc2NDU1NDY3MTAwMTQiPiLigI/YsdmF2LIgUElOINin2YTZgtiv2YrZhSDYp9mE2LDZiiDZg9iq2KjYqtmHINi62YrYsSDYtdit2YrYrS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4i4oCP2LHZhdiyIFBVSyDYp9mE2LDZiiDZg9iq2KjYqtmHINi62YrYsSDYtdit2YrYrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+Itij2LHZgtin2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmK2Kkg2KfZhNiq2Yog2YPYqtio2KrZh9inINi62YrYsSDZhdi32KfYqNmC2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFBpbiIgbXNnaWQ9IjM4NTAwMTg0NDUxODc0NzUzNzciPiLYp9mD2KrYqCDYsdmC2YUg2KrYudix2YrZgSDYtNiu2LXZitmL2Kcg2YXZg9mI2YbZi9inINmF2YYgNCDYpdmE2Ykg2KvZhdin2YbZitipINij2LnYr9in2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLYp9mD2KrYqCDYsdmF2LIgUFVLINmF2YPZiNmG2YvYpyDZhdmGIDgg2KPYsdmC2KfZhSDYo9mIINij2YPYq9ixLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLYqNi32KfZgtipIFNJTSDZhdik2YXZkdmG2Kkg2KjZg9mI2K8gUFVLLiDYp9mD2KrYqCDZg9mI2K8gUFVLINmE2KXZhNi62KfYoSDYqtij2YXZitmG2YfYpy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLYp9mD2KrYqCBQVUsyINmE2KXZhNi62KfYoSDYqtij2YXZitmGINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4i4oCP2KfZg9iq2Kgg2LHZhdiyIFBVSyDZhdmD2YjZhtmL2Kcg2YXZhiA4INij2LHZgtin2YUg2KPZiCDYo9mD2KvYsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i4oCP2KjYt9in2YLYqSBTSU0g2YXYpNmF2ZHZhtipINio2YPZiNivIFBVSy4g2KfZg9iq2Kgg2YPZiNivIFBVSyDZhNil2YTYutin2KEg2KrYo9mF2YrZhtmH2KcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i4oCP2KfZg9iq2KggUFVLMiDZhNil2YTYutin2KEg2KrYo9mF2YrZhiDYqNi32KfZgtipIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiLigI/Zhdit2KfZiNmE2Kkg2LrZitixINmG2KfYrNit2KnYjCDZhdmD2ZHZhiDZgtmB2YQgU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i4oCP2YrYqtio2YLZiSDZhNiv2YrZgyDZhdit2KfZiNmE2Kkg2YjYp9it2K/YqSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+KSDZitiq2YUg2KjYudiv2YfYpyDZgtmB2YQg2KjYt9in2YLYqSBTSU0uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4i4oCP2YrYqtio2YLZiSDZhNiv2YrZgyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYrdin2YjZhNin2Kog2YrYqtmFINio2LnYr9mH2Kcg2YLZgdmEINio2LfYp9mC2KkgU0lNLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i2YXYudix2YEg2KfZhNmF2KrYtdmEINin2YTZiNin2LHYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXJNbWkiIG1zZ2lkPSI3Nzg0NjczNjczNDQ2ODMzMDkxIj4i2YXYudix2YEg2KfZhNmF2KrYtdmEINin2YTYtdin2K/YsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNmTW1pIiBtc2dpZD0iNTEyMzIxODk4OTE0MTU3MzUxNSI+Itil2LnYp9iv2Kkg2KrZiNis2YrZhyDYp9mE2KfYqti12KfZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNmTW1pIiBtc2dpZD0iNTEyMzIxODk4OTE0MTU3MzUxNSI+Itin2LnYp9iv2Kkg2KrZiNis2YrZhyDYp9mE2YXZg9in2YTZhdipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ3dNbWkiIG1zZ2lkPSI5MTI5Njc4MDU2Nzk1MDE2ODY3Ij4i2KfZhtiq2LjYp9ixINin2YTZhdmD2KfZhNmF2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJCYU1taSIgbXNnaWQ9IjQ1NTE5MzA2NzkyNjc3MDU4MSI+Itit2LjYsSDYp9mE2KfYqti12KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlB3ZE1taSIgbXNnaWQ9IjcwNDM3MTU2ODc5MDUyNTQxOTkiPiLYqti62YrZitixINmD2YTZhdipINin2YTZhdix2YjYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlBpbk1taSIgbXNnaWQ9IjMxMTMxMTc3ODAzNjExOTAzMDQiPiLYqti62YrZitixINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQaW5NbWkiIG1zZ2lkPSIzMTEzMTE3NzgwMzYxMTkwMzA0Ij4i4oCP2KrYutmK2YrYsSDYsdmF2LIgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ25pcE1taSIgbXNnaWQ9IjMxMTA1MzQ2ODA1NTc4NTcxNjIiPiLYsdmC2YUg2KfZhNin2KrYtdin2YQg2YXZiNis2YjYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNuaXJNbWkiIG1zZ2lkPSIzMDYyMTAyMTIxNDMwNTQ4NzMxIj4i2LHZgtmFINin2YTYp9iq2LXYp9mEINmF2YLZitmR2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJUaHJlZVdDTW1pIiBtc2dpZD0iOTA1MTA0NzE3MDMyMTE5MDM2OCI+Itin2KrYtdin2YQg2KvZhNin2KvZiiI8L3N0cmluZz4KQEAgLTc2LDE0ICs4MSwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRW1lcmdlbmN5IiBtc2dpZD0iNjU4MTE2Mzc3OTA3MjgzMzY2NSI+Itiu2K/ZhdipINin2YTYt9mI2KfYsdimINmF2K3YuNmI2LHYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Ob3JtYWwiIG1zZ2lkPSI0OTUzODY3MDExMzg5NzUwNjczIj4i2KfZhNiu2K/ZhdipINin2YTYtdmI2KrZitipINmF2K3YuNmI2LHYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGxWb2ljZSIgbXNnaWQ9IjMzOTY5NjM2NTIxMDgxNTEyNjAiPiLYrNmF2YrYuSDYp9mE2K7Yr9mF2KfYqiDYp9mE2LXZiNiq2YrYqSDZhdit2LjZiNix2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+Itiu2K/ZhdipINin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDZhdit2LjZiNix2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+IuKAj9iu2K/ZhdipINin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDZhdit2LjZiNix2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VEYXRhIiBtc2dpZD0iOTk2NjM2NDg3MTA2MTcxMzIwIj4i2K7Yr9mF2KfYqiDYp9mE2LXZiNiqL9in2YTYqNmK2KfZhtin2Kog2YXYrdi42YjYsdipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+Itiu2K/Zhdin2Kog2KfZhNi12YjYqi/Yp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2YXYrdi42YjYsdipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbCIgbXNnaWQ9IjU2NDMwMjgyNjQ0NjYwOTI4MjEiPiLYrNmF2YrYuSDYrtiv2YXYp9iqINin2YTYtdmI2Kov2KfZhNio2YrYp9mG2KfYqi/Yp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2YXYrdi42YjYsdipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IuKAj9iu2K/Zhdin2Kog2KfZhNi12YjYqi/Yp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2YXYrdi42YjYsdipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbCIgbXNnaWQ9IjU2NDMwMjgyNjQ0NjYwOTI4MjEiPiLigI/YrNmF2YrYuSDYrtiv2YXYp9iqINin2YTYtdmI2Kov2KfZhNio2YrYp9mG2KfYqi/Yp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2YXYrdi42YjYsdipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1ZvaWNlIiBtc2dpZD0iMTI1ODM5MzgxMjMzNTI1ODAxOSI+Itin2YTYtdmI2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhIiBtc2dpZD0iODcyNDU2NzgyMDc3OTM3ODkzIj4i2KfZhNio2YrYp9mG2KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0ZBWCIgbXNnaWQ9IjU1NjY2MjQ5OTg4NDA0ODY0NzUiPiLYp9mE2YHYp9mD2LMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NTTVMiIG1zZ2lkPSIyMDE1NDYwMzczNzAxNTI3NDg5Ij4i2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzU01TIiBtc2dpZD0iMjAxNTQ2MDM3MzcwMTUyNzQ4OSI+IuKAj9in2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFBc3luYyIgbXNnaWQ9IjQ1MjM0NTQ3ODM0OTg1NTE0NjgiPiLYutmK2LEg2YXYqtiy2KfZhdmG2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhU3luYyIgbXNnaWQ9Ijc1MzAwMDA1MTk2NDYwNTQ3NzYiPiLZhdiy2KfZhdmG2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQYWNrZXQiIG1zZ2lkPSI2OTkxMDA2NTU3OTkzNDIzNDUzIj4i2KfZhNit2LLZhdipIjwvc3RyaW5nPgpAQCAtMTExLDcgKzExNiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJmY0Vycm9yIiBtc2dpZD0iMzMyNzU2MDEyNjU4ODUwMDc3NyI+Itit2K/Yq9iqINmF2LTZg9mE2Kkg2KjYp9mE2KfYqti12KfZhCDYo9mIINij2YYg2YPZiNivINin2YTZhdmK2LLYqSDYutmK2LEg2LXYrdmK2K0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yT2siIG1zZ2lkPSIxMTkxOTE5Mzc4MDgzNDcyMjA0Ij4i2YXZiNin2YHZgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvciIgbXNnaWQ9Ijc5NTYzOTI1MTExNDY2OTg1MjIiPiLYrdiv2Ksg2K7Yt9ijINmB2Yog2KfZhNi02KjZg9ipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiLYqti52LDYsSDYp9mE2LnYq9mI2LEg2LnZhNmJINi52YbZiNin2YYgVVJMLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiLigI/Yqti52LDYsSDYp9mE2LnYq9mI2LEg2LnZhNmJINi52YbZiNin2YYgVVJMLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiLZhti42KfZhSDZhdi12KfYr9mC2Kkg2KfZhNmF2YjZgti5INi62YrYsSDZhdi52KrZhdivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckF1dGgiIG1zZ2lkPSIxNDM1MDY1NjI5NDM4MDQ0NTM0Ij4i2KrYudiw2LHYqiDYp9mE2YXYtdin2K/ZgtipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclByb3h5QXV0aCIgbXNnaWQ9IjE3ODgyMDcwMTA1NTkwODEzMzEiPiLZhNmFINiq2KrZhSDYp9mE2YXYtdin2K/ZgtipINi52KjYsSDYp9mE2K7Yp9iv2YUg2KfZhNmI2YPZitmEINio2YbYrNin2K0uIjwvc3RyaW5nPgpAQCAtMTIxLDcgKzEyNiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JSZWRpcmVjdExvb3AiIG1zZ2lkPSI4Njc5NTk2MDkwMzkyNzc5NTE2Ij4i2KrYrdiq2YjZiiDZh9iw2Ycg2KfZhNi12YHYrdipINi52YTZiSDYudmF2YTZitin2Kog2KXYudin2K/YqSDYqtmI2KzZitmHINiu2KfYr9mFINmD2KvZitix2Kkg2YTZhNi62KfZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkU2NoZW1lIiBtc2dpZD0iNTAxNTczMDgxMjkwNjE5MjIwOCI+Itin2YTYqNix2YjYqtmI2YPZiNmEINi62YrYsSDZhdi52KrZhdivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZhaWxlZFNzbEhhbmRzaGFrZSIgbXNnaWQ9Ijk2NTQ5NjA2MDAwNjU4NjQxIj4i2KrYudiw2LEg2KXZhti02KfYoSDYp9iq2LXYp9mEINii2YXZhi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4i2KrYudiw2LEg2YHYqtitINin2YTYtdmB2K3YqSDZhNij2YYg2LnZhtmI2KfZhiBVUkwg2LrZitixINi12KfZhNitLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckJhZFVybCIgbXNnaWQ9IjM2MzY5Mjk3MjI3Mjg4ODE5NzIiPiLigI/Yqti52LDYsSDZgdiq2K0g2KfZhNi12YHYrdipINmE2KPZhiDYudmG2YjYp9mGIFVSTCDYutmK2LEg2LXYp9mE2K0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiLYqti52LDYsSDYp9mE2K/YrtmI2YQg2KXZhNmJINin2YTZhdmE2YEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZU5vdEZvdW5kIiBtc2dpZD0iNjIwMzg1NjYxMjA0MjY1NTA4NCI+Itiq2LnYsNixINin2YTYudir2YjYsSDYudmE2Ykg2KfZhNmF2YTZgSDYp9mE2YXYt9mE2YjYqC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUb29NYW55UmVxdWVzdHMiIG1zZ2lkPSIxMjM1Mzk2OTI3MDg3MTg4MjUzIj4i2KrYqtmFINin2YTYotmGINmF2LnYp9mE2KzYqSDYt9mE2KjYp9iqINmD2KvZitix2Kkg2YTZhNi62KfZitipLiDYrdin2YjZhCDZhdix2Kkg2KPYrtix2Ykg2YHZiiDZiNmC2Kog2YTYp9it2YIuIjwvc3RyaW5nPgpAQCAtMTY4LDExICsxNzMsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjUwNzUwNzA0NDI4NTQ0OTAyOTYiPiLZiNi22Lkg2KfZhNi32KfYptix2Kkg2YXYqtmI2YLZgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Itin2YTZiNi22Lkg2KfZhNii2YXZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+ItmG2LjYp9mFIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLigI/Zhti42KfZhSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Nvc3RNb25leSIgbXNnaWQ9IjU0Mjk4MDgyMTc4NjE0NjA0MDEiPiLYp9mE2K7Yr9mF2KfYqiDYp9mE2KrZiiDYqtmD2YTZgdmDINin2YTZhdin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Nvc3RNb25leSIgbXNnaWQ9IjMyOTMzMDE5MDM0MDk4Njk0OTUiPiLZitmF2YPZhtmDINiq2YbZgdmK2LAg2KXYrNix2KfYodin2Kog2YrZhdmD2YYg2KPZhiDYqtmD2YTZgdmDINmF2KfZhNin2YsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21lc3NhZ2VzIiBtc2dpZD0iNzUyMTI0OTE0ODQ0NTQ1NjY2MiI+Itix2LPYp9im2YTZgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWVzc2FnZXMiIG1zZ2lkPSI3ODIxOTk5MDcxMDAzNjk5MjM2Ij4i2YLYsdin2KHYqSDZiNmD2KrYp9io2Kkg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINmI2KfZhNix2LPYp9im2YQg2KfZhNil2YTZg9iq2LHZiNmG2YrYqSDZiNin2YTYsdiz2KfYptmEINin2YTYo9iu2LHZiS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21lc3NhZ2VzIiBtc2dpZD0iNzgyMTk5OTA3MTAwMzY5OTIzNiI+IuKAj9mC2LHYp9ih2Kkg2YjZg9iq2KfYqNipINin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDZiNin2YTYsdiz2KfYptmEINin2YTYpdmE2YPYqtix2YjZhtmK2Kkg2YjYp9mE2LHYs9in2KbZhCDYp9mE2KPYrtix2YkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3BlcnNvbmFsSW5mbyIgbXNnaWQ9IjM1MTkxNjMxNDEwNzA1MzM0NzQiPiLZhdi52YTZiNmF2KfYqtmDINin2YTYtNiu2LXZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19wZXJzb25hbEluZm8iIG1zZ2lkPSI4NDI2NDUzMTI5Nzg4ODYxMzM4Ij4i2KfZhNiv2K7ZiNmEINin2YTZhdio2KfYtNixINil2YTZiSDZhdi52YTZiNmF2KfYqiDYudmG2YPYjCDYqtmFINiq2K7YstmK2YbZh9inINmB2Yog2KjYt9in2YLYqSDYp9mE2KfYqti12KfZhC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc29jaWFsSW5mbyIgbXNnaWQ9IjU3OTkwOTY2MjM0MTIwNDM3OTEiPiLYp9mE2YXYudmE2YjZhdin2Kog2KfZhNin2KzYqtmF2KfYudmK2KkiPC9zdHJpbmc+CkBAIC0yMjgsOCArMjMzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+ItmI2KfYrNmH2Kkg2YXYs9iq2K7Yr9mFINiq2LfYqNmK2YLYp9iqINij2K7YsdmJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaXNwbGF5IiBtc2dpZD0iNjA1MTAwMjAzMTkzMzAxMzcxNCI+Itin2YTYqtij2KvZitixINi52YTZiSDZiNin2KzZh9ipINin2YTZhdiz2KrYrtiv2YUg2KjYp9mE2KrYt9io2YrZgtin2Kog2KfZhNij2K7YsdmJLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdG9yYWdlIiBtc2dpZD0iMTk3MTExODc3MDU0NjMzNjk2NiI+Itin2YTYqtiu2LLZitmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiLYp9mE2K/YrtmI2YQg2KXZhNmJINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiLYp9mE2K/YrtmI2YQg2KXZhNmJINio2LfYp9mC2KkgU0QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiLigI/Yp9mE2K/YrtmI2YQg2KXZhNmJINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiLigI/Yp9mE2K/YrtmI2YQg2KXZhNmJINio2LfYp9mC2KkgU0QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiLZhdmK2LLYp9iqINil2YXZg9in2YbZitipINin2YTZiNi12YjZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNDIwNTE5Njg4MTY3ODE0NDMzNSI+Itin2YTZhdmK2LLYp9iqINin2YTYqtmKINmK2YXZg9mGINmE2YTYqtmC2YbZitipINin2YTZhdiz2KfYudiv2Kkg2LfZhNio2YfYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzkwMTcxNzkzNjkzMDE3MDMyMCI+Itin2LPYqtix2K/Yp9ivINmF2K3YqtmI2Ykg2KfZhNmG2KfZgdiw2KkiPC9zdHJpbmc+CkBAIC0yNTIsMjYgKzI1NywyNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdW5pbnN0YWxsX3Nob3J0Y3V0IiBtc2dpZD0iNjc0NTc0MzQ3NDI2NTA1Nzk3NSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNil2LLYp9mE2Kkg2KfYrtiq2LXYp9ix2KfYqiDZhdmGINin2YTYtNin2LTYqSDYp9mE2LHYptmK2LPZitipINio2K/ZiNmGINiq2K/YrtmEINin2YTZhdiz2KrYrtiv2YUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiLYpdi52KfYr9ipINiq2YjYrNmK2Ycg2KfZhNmF2YPYp9mE2YXYp9iqINin2YTYtdin2K/YsdipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSI1MzMxMzE4OTMxOTM3NDAyMDQwIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YXYudin2YTYrNipINin2YTZhdmD2KfZhNmF2KfYqiDYp9mE2LXYp9iv2LHYqSDZiNiq2LrZitmK2LEg2KfZhNix2YLZhSDYp9mE2YXYt9mE2YjYqC4g2YrYqtmK2K0g2YfYsNinINin2YTYpdiw2YYg2YTZhNiq2LfYqNmK2YIg2YXYsdin2YLYqNipINin2YTZhdmD2KfZhNmF2KfYqiDYp9mE2LXYp9iv2LHYqSDYo9mIINil2LnYp9iv2Kkg2KrZiNis2YrZh9mH2Kcg2KPZiCDZhdmG2LnZh9inLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVNtcyIgbXNnaWQ9Ijg2NzM0NzE3Njg5NDc4OTUwODIiPiLYqtmE2YLZiiDYsdiz2KfYptmEINmG2LXZitipICjYsdiz2KfYptmEINmC2LXZitix2KkgU01TKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVTbXMiIG1zZ2lkPSI2NDI0Mzg3NzU0MjI4NzY2OTM5Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZhNmC2Yog2YjZhdi52KfZhNis2Kkg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TLiDZiNmH2LDYpyDZiti52YbZiiDYo9mG2Ycg2YrZhdmD2YYg2YTZhNiq2LfYqNmK2YIg2YXYsdin2YLYqNipINin2YTYsdiz2KfYptmEINin2YTYqtmKINmK2KrZhSDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KzZh9in2LLZgyDYo9mIINit2LDZgdmH2Kcg2KjYr9mI2YYg2LnYsdi22YfYpyDZhNmDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVNtcyIgbXNnaWQ9Ijg2NzM0NzE3Njg5NDc4OTUwODIiPiLigI/YqtmE2YLZiiDYsdiz2KfYptmEINmG2LXZitipICjYsdiz2KfYptmEINmC2LXZitix2KkgU01TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVTbXMiIG1zZ2lkPSI2NDI0Mzg3NzU0MjI4NzY2OTM5Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZhNmC2Yog2YjZhdi52KfZhNis2Kkg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TLiDZiNmH2LDYpyDZiti52YbZiiDYo9mG2Ycg2YrZhdmD2YYg2YTZhNiq2LfYqNmK2YIg2YXYsdin2YLYqNipINin2YTYsdiz2KfYptmEINin2YTYqtmKINmK2KrZhSDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KzZh9in2LLZgyDYo9mIINit2LDZgdmH2Kcg2KjYr9mI2YYg2LnYsdi22YfYpyDZhNmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZU1tcyIgbXNnaWQ9IjE4MjEzMTczNDQ2NjgyNTcwOTgiPiLYqtmE2YLZiiDYsdiz2KfYptmEINmG2LXZitipICjYsdiz2KfYptmEINmI2LPYp9im2Lcg2YXYqti52K/Yr9ipKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVNbXMiIG1zZ2lkPSI1MzMwMTk0MzcyNjMyMTIyNjAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmE2YLZiiDZiNmF2LnYp9mE2KzYqSDYsdiz2KfYptmEINin2YTZiNiz2KfYpti3INin2YTZhdiq2LnYr9iv2KkuINmI2YfYsNinINmK2LnZhtmKINij2YbZhyDZitmF2YPZhiDZhNmE2KrYt9io2YrZgiDZhdix2KfZgtio2Kkg2KfZhNix2LPYp9im2YQg2KfZhNiq2Yog2YrYqtmFINil2LHYs9in2YTZh9inINmE2KzZh9in2LLZgyDYo9mIINit2LDZgdmH2Kcg2KjYr9mI2YYg2LnYsdi22YfYpyDZhNmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9IjE4MDM0Nzc2NjA4NDYyODgwODkiPiLYqtmE2YLZiiDYqNirINin2YTYt9mI2KfYsdimIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9Ijg0ODUyNDA3MDI2MjQzMTk3NCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YTZgtmKINix2LPYp9im2YQg2KjYqyDYp9mE2LfZiNin2LHYpiDZiNmF2LnYp9mE2KzYqtmH2KcuINmE2Kcg2YrYqtmI2YHYsSDZh9iw2Kcg2KfZhNil2LDZhiDYs9mI2Ykg2YTYqti32KjZitmC2KfYqiDYp9mE2YbYuNin2YUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSIxNTk4MzI4ODQzNjE5NjQ2MTY2Ij4i2YLYsdin2KHYqSDYsdiz2KfYptmEINio2Ksg2KfZhNiu2YTZitipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iNjM2MTk3Mjc3NjA4MDQ1ODk3OSI+Itin2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmC2LHYp9ih2Kkg2LHYs9in2KbZhCDYqNirINin2YTYrtmE2YrYqSDYp9mE2KrZiiDZitiq2YTZgtin2YfYpyDZh9iw2Kcg2KfZhNis2YfYp9iyLiDZitiq2YUg2KrYs9mE2YrZhSDYqtmG2KjZitmH2KfYqiDYqNirINin2YTYrtmE2YrYqSDZgdmKINio2LnYtiDYp9mE2YXZiNin2YLYuSDZhNiq2K3YsNmK2LHZgyDZhdmGINit2KfZhNin2Kog2LfYp9ix2KbYqS4g2YrZhdmD2YYg2KPZhiDYqtiq2K/Yp9iu2YQg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDZhdi5INij2K/Yp9ihINij2Ygg2KrYtNi62YrZhCDYp9mE2KzZh9in2LIg2LnZhtiv2YXYpyDZitiq2YUg2KrZhNmC2Yog2KjYqyDYrtmE2YrYqSDYt9in2LHYpi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRTbXMiIG1zZ2lkPSI1NjAwODMwNjEyMTQ3NjcxNTI5Ij4i2KXYsdiz2KfZhCDYsdiz2KfYptmEINmC2LXZitix2KkgU01TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYpdix2LPYp9mEINix2LPYp9im2YQg2YLYtdmK2LHYqSBTTVMuINmI2YLYryDZitik2K/ZiiDZh9iw2Kcg2KXZhNmJINiq2K3ZhdmEINix2LPZiNmFINi62YrYsSDZhdiq2YjZgti52KkuINmI2YLYryDYqtmD2YTZgdmDINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2KPZhdmI2KfZhNin2Ysg2YXZhiDYrtmE2KfZhCDYpdix2LPYp9mEINix2LPYp9im2YQg2KjYr9mI2YYg2YXZiNin2YHZgtipINmF2YbZgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4i2KfZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YLYsdin2KHYqSDYsdiz2KfYptmEINio2Ksg2KfZhNiu2YTZitipINin2YTYqtmKINmK2KrZhNmC2KfZh9inINmH2LDYpyDYp9mE2KzZh9in2LIuINmK2KrZhSDYqtiz2YTZitmFINin2LTYudin2LHYp9iqINio2Ksg2KfZhNiu2YTZitipINmB2Yog2KjYudi2INin2YTZhdmI2KfZgti5INmE2KrYrdiw2YrYsdmDINmF2YYg2K3Yp9mE2KfYqiDYt9in2LHYptipLiDZitmF2YPZhiDYo9mGINiq2KrYr9in2K7ZhCDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINmF2Lkg2KPYr9in2KEg2KPZiCDYqti02LrZitmEINin2YTYrNmH2KfYsiDYudmG2K/ZhdinINmK2KrZhSDYqtmE2YLZiiDYqNirINiu2YTZitipINi32KfYsdimLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiLigI/Ypdix2LPYp9mEINix2LPYp9im2YQg2YLYtdmK2LHYqSBTTVMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNil2LHYs9in2YQg2LHYs9in2KbZhCDZgti12YrYsdipIFNNUy4g2YjZgtivINmK2KTYr9mKINmH2LDYpyDYpdmE2Ykg2KrYrdmF2YQg2LHYs9mI2YUg2LrZitixINmF2KrZiNmC2LnYqS4g2YjZgtivINiq2YPZhNmB2YMg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYo9mF2YjYp9mE2KfZiyDZhdmGINiu2YTYp9mEINil2LHYs9in2YQg2LHYs9in2KbZhCDYqNiv2YjZhiDZhdmI2KfZgdmC2Kkg2YXZhtmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9Ijg3MTM4ODkxMDUzMDU5NDMyMDAiPiLYpdix2LPYp9mEINij2K3Yr9in2Ksg2YrYqtmFINin2YTYsdivINi52YTZitmH2Kcg2LnYqNixINix2LPYp9mE2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+Itin2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNil2LHYs9in2YQg2LfZhNio2KfYqiDYpdmE2Ykg2KrYt9io2YrZgtin2Kog2KfZhNmF2LHYp9iz2YTYqSDYp9mE2KPYrtix2Ykg2YTZhNiq2LnYp9mF2YQg2YXYuSDYp9mE2KPYrdiv2KfYqyDYp9mE2KrZiiDZitiq2YUg2KfZhNix2K8g2LnZhNmK2YfYpyDYudio2LEg2KfZhNix2LPYp9im2YQg2YHZiiDYp9mE2YXZg9in2YTZhdin2Kog2KfZhNmI2KfYsdiv2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+ItmC2LHYp9ih2Kkg2KfZhNix2LPYp9im2YQg2KfZhNmG2LXZitipICjYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2KPZiCDYsdiz2KfYptmEINin2YTZiNiz2KfYpti3INin2YTZhdiq2LnYr9iv2KkpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmC2LHYp9ih2Kkg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINin2YTZhdiu2LLZhtipINi52YTZiSDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINij2Ygg2LnZhNmJINio2LfYp9mC2KkgU0lNLiDZiNmK2KrZititINmH2LDYpyDZhNmE2KrYt9io2YrZgiDZgtix2KfYodipINis2YXZiti5INin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNU9iMINio2LrYtiDYp9mE2YbYuNixINi52YYg2KfZhNmF2K3YqtmI2Ykg2KPZiCDZhdiv2Ykg2KfZhNiz2LHZitipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjk1OTY3NTMzNDU3MjQwNTUwIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YLYsdin2KHYqSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2KfZhNmF2K7YstmG2Kkg2LnZhNmJINmH2KfYqtmB2YMg2KPZiCDYudmE2Ykg2KjYt9in2YLYqSBTSU0uINmI2YrYqtmK2K0g2YfYsNinINmE2YTYqti32KjZitmCINmC2LHYp9ih2Kkg2KzZhdmK2Lkg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01T2Iwg2KjYuti2INin2YTZhti42LEg2LnZhiDYp9mE2YXYrdiq2YjZiSDYo9mIINmF2K/ZiSDYp9mE2LPYsdmK2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNtcyIgbXNnaWQ9IjMyMTY5NTA0NzI2MzYyMTQ3NzQiPiLYqti52K/ZitmEINin2YTYsdiz2KfYptmEINin2YTZhti12YrYqSAo2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINij2Ygg2LHYs9in2KbZhCDYp9mE2YjYs9in2KbYtyDYp9mE2YXYqti52K/Yr9ipKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfZhNmD2KrYp9io2Kkg2KXZhNmJINin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDYp9mE2YXYrtiy2ZHZhtipINi52YTZiSDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINij2Ygg2KjYt9in2YLYqSBTSU0uINmC2K8g2KrYrdiw2YEg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYsdiz2KfYptmE2YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfZhNmD2KrYp9io2Kkg2KXZhNmJINin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDYp9mE2YXYrtiy2ZHZhtipINi52YTZiSDYp9mE2YfYp9iq2YEg2KPZiCDYqNi32KfZgtipIFNJTS4g2YLYryDYqtit2LDZgSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINix2LPYp9im2YTZgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+Itiq2YTZgtmKINix2LPYp9im2YQg2YbYtdmK2KkgKFdBUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9Ijc0ODIzMjE5MDIyMDU4MzM4NSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YTZgtmKINix2LPYp9im2YQgV0FQINmI2YXYudin2YTYrNiq2YfYpy4g2YjZitiq2LbZhdmGINmH2LDYpyDYp9mE2KXYsNmGINil2YXZg9in2YbZitipINmF2LHYp9mC2KjYqSDYp9mE2LHYs9in2KbZhCDYp9mE2KrZiiDZitiq2YUg2KXYsdiz2KfZhNmH2Kcg2KXZhNmK2YMg2KPZiCDYrdiw2YHZh9inINio2K/ZiNmGINi52LHYttmH2Kcg2YTZgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTbXMiIG1zZ2lkPSI4NzQ1MDg2NTcyMjEzMjcwNDgwIj4i4oCP2YLYsdin2KHYqSDYp9mE2LHYs9in2KbZhCDYp9mE2YbYtdmK2KkgKNin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDYo9mIINix2LPYp9im2YQg2KfZhNmI2LPYp9im2Lcg2KfZhNmF2KrYudiv2K/YqSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YLYsdin2KHYqSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2KfZhNmF2K7YstmG2Kkg2LnZhNmJINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2KPZiCDYudmE2Ykg2KjYt9in2YLYqSBTSU0uINmI2YrYqtmK2K0g2YfYsNinINmE2YTYqti32KjZitmCINmC2LHYp9ih2Kkg2KzZhdmK2Lkg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01T2Iwg2KjYuti2INin2YTZhti42LEg2LnZhiDYp9mE2YXYrdiq2YjZiSDYo9mIINmF2K/ZiSDYp9mE2LPYsdmK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDYp9mE2YXYrtiy2YbYqSDYudmE2Ykg2YfYp9iq2YHZgyDYo9mIINi52YTZiSDYqNi32KfZgtipIFNJTS4g2YjZitiq2YrYrSDZh9iw2Kcg2YTZhNiq2LfYqNmK2YIg2YLYsdin2KHYqSDYrNmF2YrYuSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVPYjCDYqNi62LYg2KfZhNmG2LjYsSDYudmGINin2YTZhdit2KrZiNmJINij2Ygg2YXYr9mJINin2YTYs9ix2YrYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+IuKAj9iq2LnYr9mK2YQg2KfZhNix2LPYp9im2YQg2KfZhNmG2LXZitipICjYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2KPZiCDYsdiz2KfYptmEINin2YTZiNiz2KfYpti3INin2YTZhdiq2LnYr9iv2KkpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2YPYqtin2KjYqSDYpdmE2Ykg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINin2YTZhdiu2LLZkdmG2Kkg2LnZhNmJINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2KPZiCDYqNi32KfZgtipIFNJTS4g2YLYryDYqtit2LDZgSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINix2LPYp9im2YTZgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2YPYqtin2KjYqSDYpdmE2Ykg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINin2YTZhdiu2LLZkdmG2Kkg2LnZhNmJINin2YTZh9in2KrZgSDYo9mIINio2LfYp9mC2KkgU0lNLiDZgtivINiq2K3YsNmBINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2LHYs9in2KbZhNmDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI1OTkxMzk4NzExOTM2NTkwNDEwIj4i4oCP2KrZhNmC2Yog2LHYs9in2KbZhCDZhti12YrYqSAoV0FQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZhNmC2Yog2LHYs9in2KbZhCBXQVAg2YjZhdi52KfZhNis2KrZh9inLiDZiNmK2KrYttmF2YYg2YfYsNinINin2YTYpdiw2YYg2KXZhdmD2KfZhtmK2Kkg2YXYsdin2YLYqNipINin2YTYsdiz2KfYptmEINin2YTYqtmKINmK2KrZhSDYpdix2LPYp9mE2YfYpyDYpdmE2YrZgyDYo9mIINit2LDZgdmH2Kcg2KjYr9mI2YYg2LnYsdi22YfYpyDZhNmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4i2KfYs9iq2LHYr9in2K8g2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYqtmKINmC2YrYryDYp9mE2KrYtNi62YrZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2LPYqtix2K/Yp9ivINmF2LnZhNmI2YXYp9iqINit2YjZhCDYp9mE2YXZh9in2YUg2KfZhNiq2Yog2YrYrNix2Yog2KrYtNi62YrZhNmH2Kcg2K3Yp9mE2YrZi9inINmI2KfZhNiq2Yog2KrZhSDYqti02LrZitmE2YfYpyDZhdik2K7YsdmL2KcuINmI2YLYryDZitiz2YXYrSDZh9iw2Kcg2YTZhNiq2LfYqNmK2YIg2KjYp9mD2KrYtNin2YEg2YXYudmE2YjZhdin2Kog2K3ZiNmEINin2YTYqti32KjZitmC2KfYqiDYp9mE2YXYs9iq2K7Yr9mF2Kkg2LnZhNmJINin2YTYrNmH2KfYsi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSI3MTE0MjU1MjgxOTQ0MjExNjgyIj4i2KfZhNiq2LnYp9mF2YQg2KjZitmGINin2YTZhdiz2KrYrtiv2YXZitmGIjwvc3RyaW5nPgpAQCAtMzI2LDEwICszMzEsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZhdix2KfZgtio2Kkg2YPZitmB2YrYqSDYqNiv2KEg2KfZhNmG2LjYp9mFINmE2YTYo9mG2LTYt9ipINmI2KfZhNiq2K3Zg9mFINmB2YrZh9inLiDZgtivINiq2Y/Yudix2ZDZkdi2INin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2KfZhNmG2LjYp9mFINmE2YTYttix2LEg2KjYtNmD2YQg2YPYp9mF2YQuINmE2YYg2KrZg9mI2YYg2YfZhtin2YMg2K3Yp9is2Kkg2YTZh9iw2Kcg2KfZhNil2LDZhiDYs9mI2Ykg2YTZhNiq2LfZiNmK2LEg2YHZgti32Iwg2YjZhNmK2LMg2YTZhNin2LPYqtiu2K/Yp9mFINin2YTYudin2K/ZiiDYudmE2Ykg2KfZhNil2LfZhNin2YIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjI1NzYzMzM0MzQ4OTM1MzI0NzUiPiLYpdix2LPYp9mEINio2Ksg2KfZhNit2LLZhdipINin2YTYsNmKINiq2YXYqiDYpdiy2KfZhNiq2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjY2MjE5MDEyMTYyMDc5MzEwODkiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqNirINiq2YbYqNmK2Ycg2YrZgdmK2K8g2KjYpdiy2KfZhNipINit2LLZhdipINij2K3YryDYp9mE2KrYt9io2YrZgtin2KouINmC2K8g2KrYs9iq2K7Yr9mFINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2YfYsNinINmE2KXZhtmH2KfYoSDYo9mK2Kkg2KrYt9io2YrZgtin2Kog2KPYrtix2Ykg2YLZitivINin2YTYqti02LrZitmELiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI1Njg5MDk1MDA5MDMwMzM2NTkzIj4i2KXYsdiz2KfZhCDYqNirIFNNUyDZhdiz2KrZhNmFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI0MTUyMDM3NzIwMDM0MzY1NDkyIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KjYqyDYpdi02LnYp9ixINio2KfYs9iq2YTYp9mFINix2LPYp9mE2Kkg2YLYtdmK2LHYqSBTTVMuINmC2K8g2KrYs9iq2K7Yr9mFINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2YfYsNinINmE2KrYstmK2YrZgSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2KfZhNmI2KfYsdiv2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+Itil2LHYs9in2YQg2KjYqyBXQVAtUFVTSCDYp9mE2YXYs9iq2YTZhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KjYqyDYpdi02LnYp9ixINio2KfYs9iq2YTYp9mFINix2LPYp9mE2KkgV0FQIFBVU0guINmK2YXZg9mGINij2YYg2KrYs9iq2K7Yr9mFINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2YfYsNinINmE2KrYstmK2YEg2KfYs9iq2YTYp9mFINix2LPYp9mE2Kkg2YjYs9in2KbYtyDZhdiq2LnYr9iv2Kkg2KPZiCDZhNin2LPYqtio2K/Yp9mEINmF2K3YqtmI2Ykg2KPZiiDYtdmB2K3YqSDZiNmK2Kgg2KjZhdiq2LrZitix2KfYqiDYttin2LHYqSDYqNi02YPZhCDYutmK2LEg2YXZhNit2YjYuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNTY4OTA5NTAwOTAzMDMzNjU5MyI+IuKAj9il2LHYs9in2YQg2KjYqyBTTVMg2YXYs9iq2YTZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNio2Ksg2KXYtNi52KfYsSDYqNin2LPYqtmE2KfZhSDYsdiz2KfZhNipINmC2LXZitix2KkgU01TLiDZgtivINiq2LPYqtiu2K/ZhSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINmH2LDYpyDZhNiq2LLZitmK2YEg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINin2YTZiNin2LHYr9ipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjMxNDUzNDc0MTMwMjg1ODIzNzEiPiLigI/Ypdix2LPYp9mEINio2KsgV0FQLVBVU0gg2KfZhNmF2LPYqtmE2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iNDc4MzQwMjUyNTAzOTQ0MjcyOSI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNio2Ksg2KXYtNi52KfYsSDYqNin2LPYqtmE2KfZhSDYsdiz2KfZhNipIFdBUCBQVVNILiDZitmF2YPZhiDYo9mGINiq2LPYqtiu2K/ZhSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINmH2LDYpyDZhNiq2LLZitmBINin2LPYqtmE2KfZhSDYsdiz2KfZhNipINmI2LPYp9im2Lcg2YXYqti52K/Yr9ipINij2Ygg2YTYp9iz2KrYqNiv2KfZhCDZhdit2KrZiNmJINij2Yog2LXZgdit2Kkg2YjZitioINio2YXYqti62YrYsdin2Kog2LbYp9ix2Kkg2KjYtNmD2YQg2LrZitixINmF2YTYrdmI2LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSIyNDUxODczNjY0MzYzNjYyNjY2Ij4i2KrYrdiv2YrYryDYudiv2K8g2KfZhNi52YXZhNmK2KfYqiDZgtmK2K8g2KfZhNiq2LTYutmK2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfZhNiq2K3Zg9mFINmB2Yog2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYudmF2YTZitin2Kog2KfZhNiq2Yog2LPZitiq2YUg2KrYtNi62YrZhNmH2KcuINi62YrYsSDZhdi32YTZiNioINi52YTZiSDYp9mE2KXYt9mE2KfZgiDZhNmE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiLZgdix2LYg2KXYutmE2KfZgiDYqti32KjZitmC2KfYqiDYp9mE2K7ZhNmB2YrYqSI8L3N0cmluZz4KQEAgLTM1Myw3ICszNTgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiLYqti52K/ZitmEINiz2LHYudipINin2YTYsdiz2YjZhSDYp9mE2YXYqtit2LHZg9ipINin2YTYudmF2YjZhdmK2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9Ijc2OTAwNjM0Mjg5MjQzNDM1NzEiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti62YrZitixINiz2LHYudipINin2YTYsdiz2YjZhSDYp9mE2YXYqtit2LHZg9ipINin2YTYudmF2YjZhdmK2KkgKNix2LPZiNmFINmF2KrYrdix2YPYqSDYo9iz2LHYuSDYo9mIINij2KjYt9ijKSDZgdmKINij2Yog2YjZgtiqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+Itil2K/Yp9ix2Kkg2KfZhNix2YXZiNiyINin2YTZhdmF2YrYstipINmE2YTYqti32KjZitmC2KfYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYpdmG2LTYp9ihINmI2KXYr9in2LHYqSDYsdmF2YjYstmHINin2YTYrtin2LXYqdiMINmI2KrYrNin2YjYsiDYqtix2KrZitioIFog2KfZhNi52KfYr9mKLiDZhNmGINiq2YPZiNmGINmH2YbYp9mDINit2KfYrNipINil2YTZitmHINmF2LfZhNmC2YvYpyDZhdi5INin2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSI4MDQzNDMxNzEzMDE0Mzk1NjcxIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KXZhti02KfYoSDZiNil2K/Yp9ix2Kkg2LHZhdmI2LLZhyDYp9mE2K7Yp9i12KnYjCDZiNiq2KzYp9mI2LIg2KrYsdiq2YrYqCBaINin2YTYudin2K/Zii4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mcmVlemVTY3JlZW4iIG1zZ2lkPSI0NzA4MTgxMTg0NDQxODgwMTc1Ij4i2KrYrNmF2YrYryDYp9mE2LTYp9i02KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mcmVlemVTY3JlZW4iIG1zZ2lkPSI4NTU4OTIzNzg5MjIyNjcwMDY0Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYrNmF2YrYryDYp9mE2LTYp9i02Kkg2YXYpNmC2KrZi9inINmE2KXYrNix2KfYoSDYp9mG2KrZgtin2YQg2KjZhdmE2KEg2KfZhNi02KfYtNipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5qZWN0RXZlbnRzIiBtc2dpZD0iMTM3ODc0NjU4NDAyMzU4NjYwMCI+ItmF2YHYp9iq2YrYrSDYp9mE2LbYuti3INmI2KPYstix2KfYsSDYp9mE2KrYrdmD2YUiPC9zdHJpbmc+CkBAIC0zNjksMTQgKzM3NCwxNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFByaW50U2VydmljZSIgbXNnaWQ9Ijc5NjAwNjc2MjMyMDkxMTExMzUiPiLZhNmE2LPZhdin2K0g2YTZhNmF2KfZhNmDINio2KfZhNin2YTYqtiy2KfZhSDYqNmI2KfYrNmH2Kkg2KfZhNmF2LPYqtmI2Ykg2KfZhNi52YTZiNmKINmE2K7Yr9mF2Kkg2KfZhNi32KjYp9i52KkuINmE2YYg2KrZg9mI2YYg2YfZhtin2YMg2K3Yp9is2Kkg2KXZhNmK2Ycg2YXYt9mE2YLZi9inINmF2Lkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSI2ODA3NzYyNzgzNzQ0MTI1OTU0Ij4i2KfZhNin2YTYqtiy2KfZhSDYqNiu2K/ZhdipINin2YTYqtiu2LLZitmGINin2YTZhdik2YLYqiDZhNmE2LfYqNin2LnYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iMzY4MDU1MjI4NTkzMzMxODM3MiI+ItmE2YTYs9mF2KfYrSDZhNmE2YXYp9mE2YMg2KjYp9mE2KfZhNiq2LLYp9mFINio2YjYp9is2YfYqSDYp9mE2YXYs9iq2YjZiSDYp9mE2LnZhNmI2Yog2YTYrtiv2YXYqSDYp9mE2KrYrtiy2YrZhiDYp9mE2YXYpNmC2Kog2YTZhNi32KjYp9i52KkuINmE2YYg2KrZg9mI2YYg2YfZhtin2YMg2K3Yp9is2Kkg2KXZhNmK2Ycg2YXYt9mE2YLZi9inINmF2Lkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSIyNzUyNzMxMzAwNDE5NDEwNzI0Ij4i2KfZhNix2KjYtyDYqNiu2K/ZhdipIE5GQyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iNjEyMDY0NzYyOTE3NDA2Njg2MiI+ItmE2YTYs9mF2KfYrSDZhNit2KfZhdmEINin2YTYqNi32KfZgtipINio2KfZhNix2KjYtyDYqNin2YTYqti32KjZitmC2KfYqiDYp9mE2KrZiiDYqtit2KfZg9mKINio2LfYp9mC2KfYqiBORkMuINmE2Kcg2YrYqtmI2KzYqCDYp9iz2KrYrtiv2KfZhdmHINi52YTZiSDYp9mE2KXYt9mE2KfZgiDZhNmE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjI3NTI3MzEzMDA0MTk0MTA3MjQiPiLigI/Yp9mE2LHYqNi3INio2K7Yr9mF2KkgTkZDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4i4oCP2YTZhNiz2YXYp9itINmE2K3Yp9mF2YQg2KfZhNio2LfYp9mC2Kkg2KjYp9mE2LHYqNi3INio2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYqtmKINiq2K3Yp9mD2Yog2KjYt9in2YLYp9iqIE5GQy4g2YTYpyDZitiq2YjYrNioINin2LPYqtiu2K/Yp9mF2Ycg2LnZhNmJINin2YTYpdi32YTYp9mCINmE2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjczNTgzNzg0MDE5MTUyODc5MzgiPiLYp9mE2KfZhNiq2LLYp9mFINio2K7Yr9mF2Kkg2KXYr9iu2KfZhCDYp9mE2YbYtdmI2LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI4MTUxOTY4OTEwOTczOTk4NjcwIj4i2YTZhNiz2YXYp9itINmE2YTZhdin2YTZgyDYqNin2YTYp9mE2KrYstin2YUg2KjZiNin2KzZh9ipINin2YTZhdiz2KrZiNmJINin2YTYudmE2YjZiiDZhNiu2K/ZhdipINil2K/Yrtin2YQg2KfZhNmG2LXZiNi1ICjYudmE2Ykg2LPYqNmK2YQg2KfZhNmF2KvYp9mE2IwgU3BlbGxDaGVja2VyU2VydmljZSkuINmE2YYg2KrZg9mI2YYg2YfZhtin2YMg2K3Yp9is2Kkg2KXZhNmK2Ycg2YXYt9mE2YLZi9inINmF2Lkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4i2KfZhNin2YTYqtiy2KfZhSDYqNiu2K/ZhdipIFZQTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+ItmE2YTYs9mF2KfYrSDZhNmE2YXYp9mE2YMg2KjYp9mE2KfZhNiq2LLYp9mFINio2YjYp9is2YfYqSDYp9mE2YXYs9iq2YjZiSDYp9mE2LnZhNmI2Yog2YTYrtiv2YXYqSDYp9mE2LTYqNmD2Kkg2KfZhNi42KfZh9ix2YrYqSDYp9mE2K7Yp9i12KkgKFZQTikuINmE2YYg2KrZg9mI2YYg2YfZhtin2YMg2K3Yp9is2Kkg2KXZhNmK2Ycg2YXYt9mE2YLZi9inINmF2Lkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNmF2KfZhNmDINio2KfZhNin2YTYqtiy2KfZhSDYqNmI2KfYrNmH2Kkg2KfZhNmF2LPYqtmI2Ykg2KfZhNi52YTZiNmKINmE2K7Yr9mF2Kkg2KXYr9iu2KfZhCDYp9mE2YbYtdmI2LUgKNi52YTZiSDYs9io2YrZhCDYp9mE2YXYq9in2YTYjCBTcGVsbENoZWNrZXJTZXJ2aWNlKS4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjQ3MDg1OTYwMjExNjE0NzMyNTUiPiLigI/Yp9mE2KfZhNiq2LLYp9mFINio2K7Yr9mF2KkgVlBOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTZhdin2YTZgyDYqNin2YTYp9mE2KrYstin2YUg2KjZiNin2KzZh9ipINin2YTZhdiz2KrZiNmJINin2YTYudmE2YjZiiDZhNiu2K/ZhdipINin2YTYtNio2YPYqSDYp9mE2LjYp9mH2LHZitipINin2YTYrtin2LXYqSAoVlBOKS4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+Itin2YTYp9mE2KrYstin2YUg2KjYrtmE2YHZitipINmF2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+ItmE2YTYs9mF2KfYrSDZhNmE2YXYp9mE2YMg2KjYp9mE2KfZhNiq2LLYp9mFINio2YjYp9is2YfYqSDYp9mE2YXYs9iq2YjZiSDYp9mE2LnZhNmI2Yog2YTZhNiu2YTZgdmK2KkuINmE2YYg2KrZg9mI2YYg2YfZhtin2YMg2K3Yp9is2Kkg2KXZhNmK2Ycg2YXYt9mE2YLZi9inINmF2Lkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4i2KfZhNix2KjYtyDYqNin2YTYtNin2LTYqSDYudmGINio2Y/YudivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i2YTZhNiz2YXYp9itINmE2YTZhdin2YTZgyDYqNin2YTYp9mE2KrYstin2YUg2KjZiNin2KzZh9ipINin2YTZhdiz2KrZiNmJINin2YTYudmE2YjZiiDZhNmE2LnYsdi2INi52YYg2KjZj9i52K8uINmE2YYg2KrZg9mI2YYg2YfZhtin2YMg2K3Yp9is2Kkg2KXZhNmK2Ycg2YXYt9mE2YLZi9inINmF2Lkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+Itin2YTYp9mE2KrYstin2YUg2KjYrtiv2YXYqSDYo9iv2KfYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLZhNmE2LPZhdin2K0g2YTZhNmF2KfZhNmDINio2KfZhNin2YTYqtiy2KfZhSDYqNmI2KfYrNmH2Kkg2KfZhNmF2LPYqtmI2Ykg2KfZhNi52YTZiNmKINmE2K7Yr9mF2Kkg2KfZhNij2K/Yp9ipLiDZhNmGINiq2YPZiNmGINmH2YbYp9mDINit2KfYrNipINil2YTZitmHINmF2LfZhNmC2YvYpyDZhdi5INin2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLYp9mE2KrZgdin2LnZhCDZhdi5INmF2LTYsdmBINin2YTYrNmH2KfYsiI8L3N0cmluZz4KQEAgLTM4OSwxMyArMzk2LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI2ODY2NTYzMjM0Mjc0MTA0MjMzIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYutmK2YrYsSDYs9ix2LnYqSDZhdik2LTYsSDYp9mE2YXYp9mI2LMg2KPZiCDZhNmI2K3YqSDYp9mE2KrYqtio2Lkg2YHZiiDYo9mKINmI2YLYqi4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9IjQ3Nzg3MzE3MDM2MDA5MDkzNDAiPiLYqti62YrZitixINiq2YbYs9mK2YIg2YTZiNit2Kkg2YXZgdin2KrZititIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI4NDgwMDE2NzcxMTM0MTc1ODc5Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYutmK2YrYsSDYqtmG2LPZitmCINmE2YjYrdipINin2YTZhdmB2KfYqtmK2K0uINmE2YYg2KrZg9mI2YYg2YfZhtin2YMg2K3Yp9is2Kkg2KXZhNmK2Ycg2YXYt9mE2YLZi9inINmF2Lkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ1MzkwMDI5OTE5NDczNzY2NTkiPiLYpdix2LPYp9mEINil2LTYp9ix2KfYqiBMaW51eCDZhNmE2KrYt9io2YrZgtin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0NTM5MDAyOTkxOTQ3Mzc2NjU5Ij4i4oCP2KXYsdiz2KfZhCDYpdi02KfYsdin2KogTGludXgg2YTZhNiq2LfYqNmK2YLYp9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYt9mE2Kgg2KXYsdiz2KfZhCDYp9mE2KXYtNin2LHYqSDYp9mE2YXYstmI2ZHYr9ipINmE2KzZhdmK2Lkg2KfZhNi52YXZhNmK2KfYqiDYp9mE2YXYs9iq2YXYsdipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyc2lzdGVudEFjdGl2aXR5IiBtc2dpZD0iODg0MTExMzYyNzk1NTU2MzkzOCI+Itiq2LTYutmK2YQg2KfZhNiq2LfYqNmK2YIg2K/Yp9im2YXZi9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTI1MTg5MjcyMzI5MDg2MTM3Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KzYudmEINij2KzYstin2KEg2YXZhtmHINir2KfYqNiq2Kkg2YHZiiDYp9mE2LDYp9mD2LHYqS4g2YjZgtivINmK2KTYr9mKINmH2LDYpyDYpdmE2Ykg2KrZgtmK2YrYryDYp9mE2LDYp9mD2LHYqSDYp9mE2YXYqtin2K3YqSDZhNmE2KrYt9io2YrZgtin2Kog2KfZhNij2K7YsdmJINmF2YXYpyDZitik2K/ZiiDYpdmE2Ykg2K3Yr9mI2Ksg2KjYt9ihINmB2Yog2KfZhNis2YfYp9iyINin2YTZhNmI2K3Zii4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0Mzg0NzYwMDQ3NTA4Mjc4MjcyIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KzYudmEINij2KzYstin2KEg2YXZhtmHINir2KfYqNiq2Kkg2YHZiiDYp9mE2LDYp9mD2LHYqS4g2YjZgtivINmK2KTYr9mKINmH2LDYpyDYpdmE2Ykg2KrZgtmK2YrYryDYp9mE2LDYp9mD2LHYqSDYp9mE2YXYqtin2K3YqSDZhNmE2KrYt9io2YrZgtin2Kog2KfZhNij2K7YsdmJINmF2YXYpyDZitik2K/ZiiDYpdmE2Ykg2K3Yr9mI2Ksg2KjYt9ihINmB2Yog2KfZhNmH2KfYqtmBLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSIxODQzODUxMjk1Mzc3MDU5MzgiPiLYrdiw2YEg2KfZhNiq2LfYqNmK2YLYp9iqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSI3NDExNDgwMjc1MTY3MjA1MDgxIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2K3YsNmBINit2LLZhSBBbmRyb2lkLiDZitmF2YPZhiDYo9mGINiq2LPYqtiu2K/ZhSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINiw2YTZgyDZhNit2LDZgSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNmF2YfZhdipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNit2LDZgSDYrdiy2YUgQW5kcm9pZC4g2YrZhdmD2YYg2KPZhiDYqtiz2KrYrtiv2YUg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYsNmE2YMg2YTYrdiw2YEg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTZhdmH2YXYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiLYrdiw2YEg2KjZitin2YbYp9iqINin2YTYqti32KjZitmC2KfYqiDYp9mE2KPYrtix2YkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iNDYyNTMyMzY4NDEyNTQ1OTQ4OCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmF2K3ZiCDYqNmK2KfZhtin2Kog2KfZhNmF2LPYqtiu2K/ZhS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i2K3YsNmBINiw2KfZg9ix2KfYqiDYp9mE2KrYrtiy2YrZhiDYp9mE2YXYpNmC2Kog2YTZhNiq2LfYqNmK2YLYp9iqINin2YTYo9iu2LHZiSI8L3N0cmluZz4KQEAgLTQwMyw3ICs0MTAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9Ijc0NzI5MjE3NjgzNTc5ODE5ODYiPiLZgtmK2KfYsyDZhdiz2KfYrdipINiq2K7YstmK2YYg2KfZhNiq2LfYqNmK2YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9IjM5MjEwNjgxNTQ0MjA3MzgyOTYiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9iz2KrYsdiv2KfYryDYtNmB2LHYqtmHINmI2KjZitin2YbYp9iq2Ycg2YjYo9it2KzYp9mFINiw2KfZg9ix2KfYqiDYp9mE2KrYrtiy2YrZhiDYp9mE2YXYpNmC2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjIxOTkxMjg0ODI4MjAzMDY5MjQiPiLYqtir2KjZitiqINin2YTYqti32KjZitmC2KfYqiDZhdio2KfYtNix2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSI1NjI4NTMwOTcyNTQ4MDcxMjg0Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYq9io2YrYqiDYrdiy2YUgQW5kcm9pZCDYp9mE2KzYr9mK2K/YqSDYo9mIINin2YTZhdit2K/Zkdir2KkuINmK2YXZg9mGINij2YYg2KrYs9iq2K7Yr9mFINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2LDZhNmDINmE2KXYttin2YHYqSDYqti32KjZitmC2KfYqiDYrNiv2YrYr9ipINiw2KfYqiDYo9iw2YjZhtin2Kog2YLZiNmK2Kkg2LnZhNmJINmG2K3ZiCDYudi02YjYp9im2YouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iNTYyODUzMDk3MjU0ODA3MTI4NCI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2KvYqNmK2Kog2K3YstmFIEFuZHJvaWQg2KfZhNis2K/Zitiv2Kkg2KPZiCDYp9mE2YXYrdiv2ZHYq9ipLiDZitmF2YPZhiDYo9mGINiq2LPYqtiu2K/ZhSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINiw2YTZgyDZhNil2LbYp9mB2Kkg2KrYt9io2YrZgtin2Kog2KzYr9mK2K/YqSDYsNin2Kog2KPYsNmI2YbYp9iqINmC2YjZitipINi52YTZiSDZhtit2Ygg2LnYtNmI2KfYptmKLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiLYrdiw2YEg2KzZhdmK2Lkg2KjZitin2YbYp9iqINiw2KfZg9ix2Kkg2KfZhNiq2K7YstmK2YYg2KfZhNmF2KTZgtiqINmE2YTYqti32KjZitmCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3NDY0MDg3MTk0NTQzNDU2NSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YHYsdmK2Log2LPYudipINiq2K7YstmK2YYg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDZhdmGINiu2YTYp9mEINit2LDZgSDYp9mE2YXZhNmB2KfYqiDZhdmGINij2K/ZhNipINiw2KfZg9ix2Kkg2KfZhNiq2K7YstmK2YYg2KfZhNmF2KTZgtiqINmE2YTYqti32KjZitmC2KfYqiDYp9mE2KPYrtix2YkuINmC2K8g2YrYqtiz2KjYqCDZh9iw2Kcg2YHZiiDYqti02LrZitmEINin2YTYqti32KjZitmC2KfYqiDYp9mE2KPYrtix2Ykg2KjYtNmD2YQg2KPZg9ir2LEg2KjYt9im2YvYpyDYrdmK2Ksg2YrZhNiy2YXZh9inINil2LnYp9iv2Kkg2KfYs9iq2LHYr9in2K8g2KjZitin2YbYp9iq2YfYpy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjQ1OTQ0MTAyMTk1NjQzNjc3OSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YHYsdmK2Log2YXYs9in2K3YqSDYqtiu2LLZitmGINin2YTZh9in2KrZgSDZhdmGINiu2YTYp9mEINit2LDZgSDYp9mE2YXZhNmB2KfYqiDZhdmGINij2K/ZhNipINiw2KfZg9ix2Kkg2KfZhNiq2K7YstmK2YYg2KfZhNmF2KTZgtiqINmE2YTYqti32KjZitmC2KfYqiDYp9mE2KPYrtix2YkuINmC2K8g2YrYqtiz2KjYqCDZh9iw2Kcg2YHZiiDYqti02LrZitmEINin2YTYqti32KjZitmC2KfYqiDYp9mE2KPYrtix2Ykg2KjYtNmD2YQg2KPZg9ir2LEg2KjYt9im2YvYpyDYrdmK2Ksg2YrZhNiy2YXZh9inINil2LnYp9iv2Kkg2KfYs9iq2LHYr9in2K8g2KjZitin2YbYp9iq2YfYpy4iPC9zdHJpbmc+CkBAIC00MTUsOSArNDIyLDkgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjcxNTgwNTU1NTgyMzg4MTgxOCI+Itin2LPYqtiu2K/Yp9mFINij2Yog2KjYsdmG2KfZhdisINmB2YMg2KrYtNmB2YrYsSDZiNiz2KfYpti3INmF2YYg2KPYrNmEINin2YTYqti02LrZitmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiLYp9mE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9iz2KrYrtiv2KfZhSDYo9mKINio2LHZhtin2YXYrCDZgdmDINiq2LTZgdmK2LEg2YjYs9in2KbYtyDZhdir2KjYqiDZhNmB2YMg2KfZhNiq2LTZgdmK2LEg2YXZhiDYo9is2YQg2KfZhNiq2LTYutmK2YQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjE2NzgzOTE4OTY3ODY4ODIwMTQiPiLYpdiv2KfYsdipINio2YrYp9mG2KfYqiDYp9mE2KfYudiq2YXYp9ivINin2YTZhdmI2KvZiNmC2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjQwMTU2NDQwNDcxOTY5MzcwMTQiPiLYp9mE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtir2KjZitiqINi02YfYp9iv2KfYqiBDQSDZiNil2YTYutin2KEg2KrYq9io2YrYqtmH2Kcg2KjYp9i52KrYqNin2LHZh9inINio2YrYp9mG2KfYqiDYp9i52KrZhdin2K8g2YXYrdmEINir2YLYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjQwMTU2NDQwNDcxOTY5MzcwMTQiPiLigI/Yp9mE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtir2KjZitiqINi02YfYp9iv2KfYqiBDQSDZiNil2YTYutin2KEg2KrYq9io2YrYqtmH2Kcg2KjYp9i52KrYqNin2LHZh9inINio2YrYp9mG2KfYqiDYp9i52KrZhdin2K8g2YXYrdmEINir2YLYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RpYWdub3N0aWMiIG1zZ2lkPSI4MDc2NzQzOTUzOTA4MDAwMzQyIj4i2YLYsdin2KHYqS/Zg9iq2KfYqNipINil2YTZiSDYp9mE2YXZiNin2LHYryDYp9mE2YXZhdmE2YjZg9ipINio2YjYp9iz2LfYqSDYp9mE2KrYtNiu2YrYtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RpYWdub3N0aWMiIG1zZ2lkPSI2NjA4Mjk1NjkyMDAyNDUyMjgzIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfZhNmC2LHYp9ih2Kkg2YjYp9mE2YPYqtin2KjYqSDYpdmE2Ykg2KPZiiDZhdmI2LHYryDZhdmF2YTZiNmDINio2YjYp9iz2LfYqSDZhdis2YXZiNi52Kkg2KfZhNiq2LTYrtmK2LXYp9iq2Jsg2LnZhNmJINiz2KjZitmEINin2YTZhdir2KfZhNiMINin2YTZhdmE2YHYp9iqINmB2YogL2Rldi4g2YXZhiDYp9mE2YXYrdiq2YXZhCDYo9mGINmK2KTYq9ixINiw2YTZgyDZgdmKINin2LPYqtmC2LHYp9ixINin2YTZhti42KfZhSDZiNij2YXYp9mG2YcuINmK2KzYqCDYo9mE2Kcg2YrYs9iq2K7Yr9mFINiw2YTZgyDYs9mI2Ykg2YTZhNiq2LTYrtmK2LXYp9iqINin2YTYrtin2LXYqSDYqNin2YTZhti42KfZhSDZhdmGINmC2ZDYqNmEINin2YTZhdi12YbZkNmR2Lkg2KPZiCDYp9mE2YXYtNi62ZDZkdmELiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RpYWdub3N0aWMiIG1zZ2lkPSI2NjA4Mjk1NjkyMDAyNDUyMjgzIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfZhNmC2LHYp9ih2Kkg2YjYp9mE2YPYqtin2KjYqSDYpdmE2Ykg2KPZiiDZhdmI2LHYryDZhdmF2YTZiNmDINio2YjYp9iz2LfYqSDZhdis2YXZiNi52Kkg2KfZhNiq2LTYrtmK2LXYp9iq2Jsg2LnZhNmJINiz2KjZitmEINin2YTZhdir2KfZhNiMINin2YTZhdmE2YHYp9iqINmB2YogL2Rldi4g2YXZhiDYp9mE2YXYrdiq2YXZhCDYo9mGINmK2KTYq9ixINiw2YTZgyDZgdmKINin2LPYqtmC2LHYp9ixINin2YTZhti42KfZhSDZiNij2YXYp9mG2YcuINmK2KzYqCDYo9mE2Kcg2YrYs9iq2K7Yr9mFINiw2YTZgyDYs9mI2Ykg2YTZhNiq2LTYrtmK2LXYp9iqINin2YTYrtin2LXYqSDYqNin2YTZhti42KfZhSDZhdmGINmC2ZDYqNmEINin2YTZhdi12YbZkNmR2Lkg2KPZiCDYp9mE2YXYtNi62ZDZkdmELiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29tcG9uZW50U3RhdGUiIG1zZ2lkPSI2MzM1NTc2Nzc1NzExMDk1OTMxIj4i2KrZhdmD2YrZhiDZhdmD2YjZhtin2Kog2KfZhNiq2LfYqNmK2YIg2KPZiCDYqti52LfZitmE2YfYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4ODg3NDM1NzQwOTgyMjM3Mjk0Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYutmK2YrYsSDZhdinINil2LDYpyDZg9in2YYg2LPZitiq2YUg2KrZhdmD2YrZhiDZhdmD2YjZhiDZhNiq2LfYqNmK2YIg2KLYrtixINij2YUg2YTYpy4g2YrZhdmD2YYg2KPZhiDYqtiz2KrYrtiv2YUg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYsNmE2YMg2YTYqti52LfZitmEINmC2K/Ysdin2Kog2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDYp9mE2YXZh9mF2KkuINmK2KzYqCDYqtmI2K7ZiiDYp9mE2K3YsNixINi52YbYryDYp9iz2KrYrtiv2KfZhSDZh9iw2Kcg2KfZhNil2LDZhtiMINmI2LDZhNmDINmE2KPZhtmHINmF2YYg2KfZhNmF2YXZg9mGINij2YYg2YrYpNiv2Yog2LDZhNmDINil2YTZiSDYrNi52YQg2K3Yp9mE2Kkg2YXZg9mI2YbYp9iqINin2YTYqti32KjZitmCINi62YrYsSDZgtin2KjZhNipINmE2YTYp9iz2KrYrtiv2KfZhSDYo9mIINi62YrYsSDZhdiq2YbYp9iz2YLYqSDYo9mIINi62YrYsSDZhdiz2KrZgtix2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODI3MjMyNDg0NDE2NTA1NjE1Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYutmK2YrYsSDZhdinINil2LDYpyDZg9in2YYg2LPZitiq2YUg2KrZhdmD2YrZhiDZhdmD2YjZhiDZhNiq2LfYqNmK2YIg2KLYrtixINij2YUg2YTYpy4g2YrZhdmD2YYg2KPZhiDYqtiz2KrYrtiv2YUg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYsNmE2YMg2YTYqti52LfZitmEINmC2K/Ysdin2Kog2KfZhNmH2KfYqtmBINin2YTZhdmH2YXYqS4g2YrYrNioINiq2YjYrtmKINin2YTYrdiw2LEg2LnZhtivINin2LPYqtiu2K/Yp9mFINmH2LDYpyDYp9mE2KXYsNmG2Iwg2YjYsNmE2YMg2YTYo9mG2Ycg2YXZhiDYp9mE2YXZhdmD2YYg2KPZhiDZitik2K/ZiiDYsNmE2YMg2KXZhNmJINis2LnZhCDYrdin2YTYqSDZhdmD2YjZhtin2Kog2KfZhNiq2LfYqNmK2YIg2LrZitixINmC2KfYqNmE2Kkg2YTZhNin2LPYqtiu2K/Yp9mFINij2Ygg2LrZitixINmF2KrZhtin2LPZgtipINij2Ygg2LrZitixINmF2LPYqtmC2LHYqS4iPC9zdHJpbmc+CkBAIC00MjksOCArNDM2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudiv2YrZhCDYqNmK2KfZhtin2Kog2KXYudiv2KfYr9in2Kog2KfZhNmG2LjYp9mFLiDZitmF2YPZhiDYo9mGINiq2KrZhNmBINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2KrZh9mK2KbYqSDZhti42KfZhdmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjIwNDY3NjI1MTg3NjcxODI4OCI+Itiq2LnYr9mK2YQg2KXYudiv2KfYr9in2Kog2KfZhNmG2LjYp9mFINin2YTYotmF2YbYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudiv2YrZhCDYqNmK2KfZhtin2Kog2KfZhNil2LnYr9in2K/Yp9iqINin2YTYotmF2YbYqSDZhNmE2YbYuNin2YUuINmE2YYg2KrZg9mI2YYg2YfZhtin2YMg2K3Yp9is2Kkg2KXZhNmK2Ycg2YXYt9mE2YLZi9inINmF2Lkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIyMTQ5NDI2NjY0MjI2MTUyMTg1Ij4i2KrYudiv2YrZhCDYrtix2YrYt9ipINiu2K/Zhdin2KogR29vZ2xlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudiv2YrZhCDYrtix2YrYt9ipINiu2K/Zhdin2KogR29vZ2xlLiDZhNmK2LMg2YTZhNin2LPYqtiu2K/Yp9mFINio2YjYp9iz2LfYqSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiLigI/Yqti52K/ZitmEINiu2LHZiti32Kkg2K7Yr9mF2KfYqiBHb29nbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti52K/ZitmEINiu2LHZiti32Kkg2K7Yr9mF2KfYqiBHb29nbGUuINmE2YrYsyDZhNmE2KfYs9iq2K7Yr9in2YUg2KjZiNin2LPYt9ipINin2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVCb290Q29tcGxldGVkIiBtc2dpZD0iNTMxMjk2NTU2NTk4NzgwMDAyNSI+Itin2YTYudmF2YQg2LnZhtivINio2K/YoSDYp9mE2KrYtNi62YrZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KjYr9ihINiq2LTYutmK2YQg2YbZgdiz2Ycg2LnZgtioINin2YbYqtmH2KfYoSDYp9mE2YbYuNin2YUg2YXZhiDYp9mE2KrYtNi62YrZhC4g2YLYryDZitik2K/ZiiDYsNmE2YMg2KXZhNmJINin2LPYqti62LHYp9mCINin2YTZhdiy2YrYryDZhdmGINin2YTZiNmC2Kog2LnZhtivINio2K/YoSDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINmI2KfZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KXYqNi32KfYoSDYp9mE2KPYr9in2KEg2KfZhNil2KzZhdin2YTZiiDZhNmE2KzZh9in2LIg2KfZhNmE2YjYrdmKINmF2YYg2K7ZhNin2YQg2KrYtNi62YrZhNmHINiv2KfYptmF2YvYpy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUxMzk1MDU4OTEwMjYxNzUwNCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNio2K/YoSDYqti02LrZitmEINmG2YHYs9mHINi52YLYqCDYp9mG2KrZh9in2KEg2KfZhNmG2LjYp9mFINmF2YYg2KfZhNiq2LTYutmK2YQuINmC2K8g2YrYpNiv2Yog2LDZhNmDINil2YTZiSDYp9iz2KrYutix2KfZgiDYp9mE2YXYstmK2K8g2YXZhiDYp9mE2YjZgtiqINi52YYg2KjYr9ihINin2YTZh9in2KrZgSDZiNin2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNil2KjYt9in2KEg2KfZhNij2K/Yp9ihINin2YTYpdis2YXYp9mE2Yog2YTZhNmH2KfYqtmBINit2YrYqyDZitiq2YUg2KrYtNi62YrZhNmHINiv2KfYptmF2YvYpy4iPC9zdHJpbmc+CkBAIC00NjQsMjMgKzQ3MSwyNSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNil2LbYp9mB2Kkg2KPZiCDYpdiy2KfZhNipINij2Ygg2KrYutmK2YrYsSDYp9mE2KPYrdiv2KfYqyDYp9mE2KrZiiDZitmF2YPZhtmDINiq2LnYr9mK2YTZh9inINi52YTZiSDYrNmH2KfYstmDINin2YTZhNmI2K3ZitiMINio2YXYpyDZgdmKINiw2YTZgyDYo9it2K/Yp9irINin2YTYo9i12K/Zgtin2KEg2KPZiCDYstmF2YTYp9ihINin2YTYudmF2YQuINmI2YLYryDZitiq2YrYrSDZh9iw2Kcg2YTZhNiq2LfYqNmK2YIg2KXYsdiz2KfZhCDYsdiz2KfYptmEINmK2KjYr9mIINij2YbZh9inINmI2KfYsdiv2Kkg2YXZhiDYo9i12K3Yp9ioINin2YTYqtmC2YjZitmFINij2Ygg2KrYudiv2YrZhCDYp9mE2KPYrdiv2KfYqyDYqNiv2YjZhiDZhdi52LHZgdipINin2YTZhdin2YTZg9mK2YYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIzMjQ0Njk0OTYzMjcyNDkzNzYiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYpdi22KfZgdipINij2Ygg2KXYstin2YTYqSDYo9mIINiq2LrZitmK2LEg2KfZhNij2K3Yr9in2Ksg2KfZhNiq2Yog2YrZhdmD2YbZgyDYqti52K/ZitmE2YfYpyDYudmE2Ykg2YfYp9iq2YHZg9iMINio2YXYpyDZgdmKINiw2YTZgyDYo9it2K/Yp9irINin2YTYo9i12K/Zgtin2KEg2KPZiCDYstmF2YTYp9ihINin2YTYudmF2YQuINmI2YLYryDZitiq2YrYrSDZh9iw2Kcg2YTZhNiq2LfYqNmK2YIg2KXYsdiz2KfZhCDYsdiz2KfYptmEINmK2KjYr9mIINij2YbZh9inINmI2KfYsdiv2Kkg2YXZhiDYo9i12K3Yp9ioINin2YTYqtmC2YjZitmFINij2Ygg2KrYudiv2YrZhCDYp9mE2KPYrdiv2KfYqyDYqNiv2YjZhiDZhdi52LHZgdipINin2YTZhdin2YTZg9mK2YYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI4Njg4MzM0OTc0MDM2ODIzMzMwIj4i2YXYtdin2K/YsSDZhdmI2KfZgti5INmI2YfZhdmK2Kkg2YTZhNin2K7Yqtio2KfYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiLZhNil2YbYtNin2KEg2YXYtdin2K/YsSDZhdmI2KfZgti5INiy2KfYptmB2Kkg2YTZhNin2K7Yqtio2KfYsSDYo9mIINiq2KvYqNmK2Kog2YXZiNmB2LEg2YXZiNin2YLYuSDYrNiv2YrYry4g2YrYqtmK2K0g2YfYsNinINmE2YTYqti32KjZitmCINil2YTYutin2KEg2KfZhNmF2YjZgti5INmIL9ij2Ygg2KfZhNit2KfZhNipINin2YTYqtmKINiq2LnYsdi22YfYpyDZhdi12KfYr9ixINin2YTZhdmI2KfZgti5INin2YTYo9iu2LHZiSDZhdir2YQgR1BTINij2Ygg2YXZiNmB2LHZiiDYp9mE2YXZiNin2YLYuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI1ODA4NzExMDM5NDgyMDUxODI0Ij4i4oCP2YTYpdmG2LTYp9ihINmF2LXYp9iv2LEg2YXZiNin2YLYuSDYstin2KbZgdipINmE2YTYp9iu2KrYqNin2LEg2KPZiCDYqtir2KjZitiqINmF2YjZgdixINmF2YjYp9mC2Lkg2KzYr9mK2K8uINmK2KrZititINmH2LDYpyDZhNmE2KrYt9io2YrZgiDYpdmE2LrYp9ihINin2YTZhdmI2YLYuSDZiC/Yo9mIINin2YTYrdin2YTYqSDYp9mE2KrZiiDYqti52LHYttmH2Kcg2YXYtdin2K/YsSDYp9mE2YXZiNin2YLYuSDYp9mE2KPYrtix2Ykg2YXYq9mEIEdQUyDYo9mIINmF2YjZgdix2Yog2KfZhNmF2YjYp9mC2LkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSIyODM2MzA4MDc2NzIwNTUzODM3Ij4i2KfZhNiv2K7ZiNmEINil2YTZiSDYp9mE2YXYstmK2K8g2YXZhiDYo9mI2KfZhdixINmF2YjZgdixINin2YTZhdmI2YLYuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2K/YrtmI2YQg2KXZhNmJINin2YTZhdiy2YrYryDZhdmGINij2YjYp9mF2LEg2YXZiNmB2LEg2K7Yr9mF2Kkg2KfZhNmF2YjZgti5LiDZiNmC2K8g2YrYqtmK2K0g2YfYsNinINmE2YTYqti32KjZitmCINin2YTYqtiv2K7ZhCDZgdmKINi52YXZhCBHUFMg2KPZiCDZhdi12KfYr9ixINin2YTZhdmI2KfZgti5INin2YTYo9iu2LHZiS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSI1OTQ1MTY2NjQyMzM1ODAwNzYzIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfZhNiv2K7ZiNmEINil2YTZiSDYp9mE2YXYstmK2K8g2YXZhiDYo9mI2KfZhdixINmF2YjZgdixINiu2K/ZhdipINin2YTZhdmI2YLYuS4g2YjZgtivINmK2KrZititINmH2LDYpyDZhNmE2KrYt9io2YrZgiDYp9mE2KrYr9iu2YQg2YHZiiDYudmF2YQgR1BTINij2Ygg2YXYtdin2K/YsSDYp9mE2YXZiNin2YLYuSDYp9mE2KPYrtix2YkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjY1NzgxMDExOTk4MjUxOTM4NzMiPiLYpdiw2YYg2YTYqtir2KjZitiqINmF2YjZgdixINiu2K/ZhdipINmF2YjZgti5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI5MDY2MTQ2MTIwNDcwNTkxNTA5Ij4i2YTYpdmG2LTYp9ihINmF2LXYp9iv2LEg2YXZiNin2YLYuSDYstin2KbZgdipINmE2YTYp9iu2KrYqNin2LEg2KPZiCDYqtir2KjZitiqINmF2YjZgdixINmF2YjYp9mC2Lkg2KzYr9mK2K8uINmK2KrZititINmH2LDYpyDZhNmE2KrYt9io2YrZgiDYpdmE2LrYp9ihINin2YTZhdmI2YLYuSDZiC/Yo9mIINin2YTYrdin2YTYqSDYp9mE2KrZiiDYqti52LHYttmH2Kcg2YXYtdin2K/YsSDYp9mE2YXZiNin2YLYuSDYp9mE2KPYrtix2Ykg2YXYq9mEIEdQUyDYo9mIINmF2YjZgdix2Yog2KfZhNmF2YjYp9mC2LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI5MDY2MTQ2MTIwNDcwNTkxNTA5Ij4i4oCP2YTYpdmG2LTYp9ihINmF2LXYp9iv2LEg2YXZiNin2YLYuSDYstin2KbZgdipINmE2YTYp9iu2KrYqNin2LEg2KPZiCDYqtir2KjZitiqINmF2YjZgdixINmF2YjYp9mC2Lkg2KzYr9mK2K8uINmK2KrZititINmH2LDYpyDZhNmE2KrYt9io2YrZgiDYpdmE2LrYp9ihINin2YTZhdmI2YLYuSDZiC/Yo9mIINin2YTYrdin2YTYqSDYp9mE2KrZiiDYqti52LHYttmH2Kcg2YXYtdin2K/YsSDYp9mE2YXZiNin2YLYuSDYp9mE2KPYrtix2Ykg2YXYq9mEIEdQUyDYo9mIINmF2YjZgdix2Yog2KfZhNmF2YjYp9mC2LkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSIxMTkxODk4MDYxOTY1MjczMzcyIj4i2KfZhNmF2YjZgti5INin2YTYr9mC2YrZgiAo2YXYs9iq2YbYryDYpdmE2Ykg2YbYuNin2YUg2KrYrdiv2YrYryDYp9mE2YXZiNin2YLYuSDYp9mE2LnYp9mE2YXZiiDZiNin2YTYtNio2YPYqSkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYrdiv2YrYryDZhdmI2YLYudmDINio2K/ZgtipINmI2YfYsNinINio2KfYs9iq2K7Yr9in2YUg2YbYuNin2YUg2KrYrdiv2YrYryDYp9mE2YXZiNin2YLYuSDYp9mE2LnYp9mE2YXZiiAoR1BTKSDYo9mIINmF2LXYp9iv2LEg2KfZhNmF2YjYp9mC2Lkg2KfZhNiq2Yog2KrYs9iq2K7Yr9mFINin2YTYtNio2YPYp9iqINmF2KvZhCDYo9io2LHYp9isINin2YTYrNmI2KfZhCDYo9mIINiq2YLZhtmK2KkgV2ktRmkuINmK2KrYudmK2YYg2KrZiNmB2LEg2K7Yr9mF2KfYqiDYp9mE2YXZiNin2YLYuSDZh9iw2Ycg2YjYqti02LrZitmE2YfYpyDYudmE2Ykg2KzZh9in2LLZgyDZhNmE2KrYt9io2YrZgiDZg9mKINmK2LPYqtiu2K/ZhdmH2KcuINmI2YLYryDYqtiz2KrYrtiv2YUg2KfZhNiq2LfYqNmK2YLYp9iqINmH2LDYpyDZhNiq2K3Yr9mK2K8g2YXZiNmC2LnZgyDZiNmC2K8g2KrYs9iq2YfZhNmDINmF2LLZitiv2YvYpyDZhdmGINi32KfZgtipINin2YTYqNi32KfYsdmK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2K3Yr9mK2K8g2YXZiNmC2LnZgyDYqNiv2YLYqSDZiNmH2LDYpyDYqNin2LPYqtiu2K/Yp9mFINmG2LjYp9mFINiq2K3Yr9mK2K8g2KfZhNmF2YjYp9mC2Lkg2KfZhNi52KfZhNmF2YogKEdQUykg2KPZiCDZhdi12KfYr9ixINin2YTZhdmI2KfZgti5INin2YTYqtmKINiq2LPYqtiu2K/ZhSDYp9mE2LTYqNmD2KfYqiDZhdir2YQg2KPYqNix2KfYrCDYp9mE2KzZiNin2YQg2KPZiCDYqtmC2YbZitipIFdpLUZpLiDZitiq2LnZitmGINiq2YjZgdixINiu2K/Zhdin2Kog2KfZhNmF2YjYp9mC2Lkg2YfYsNmHINmI2KrYtNi62YrZhNmH2Kcg2LnZhNmJINis2YfYp9iy2YMg2YTZhNiq2LfYqNmK2YIg2YPZiiDZitiz2KrYrtiv2YXZh9inLiDZiNmC2K8g2KrYs9iq2K7Yr9mFINin2YTYqti32KjZitmC2KfYqiDZh9iw2Kcg2YTYqtit2K/ZitivINmF2YjZgti52YMg2YjZgtivINiq2LPYqtmH2YTZgyDZhdiy2YrYr9mL2Kcg2YXZhiDYt9in2YLYqSDYp9mE2KjYt9in2LHZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSI0ODg3ODk1MzYyMzU0MjM5NjI4Ij4i2KfZhNmF2YjZgti5INin2YTYqtmC2LHZitio2YogKNmF2LPYqtmG2K8g2KXZhNmJINin2YTYtNio2YPYqSkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjI1MzgyMDAxODQzNzMzMDIyOTUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtit2K/ZitivINmF2YjZgti52YMg2KfZhNiq2YLYsdmK2KjZiiDYp9mE2LDZiiDZitiz2KrZhdivINmF2YYg2K7Yr9mF2KfYqiDYp9mE2YXZiNmC2Lkg2KjYp9iz2KrYrtiv2KfZhSDZhdi12KfYr9ixINin2YTZhdmI2KfZgti5INin2YTYqtmKINiq2LPYqtiu2K/ZhSDYp9mE2LTYqNmD2KfYqiDZhdir2YQg2KPYqNix2KfYrCDYp9mE2KzZiNin2YQg2YjYqtmC2YbZitipIFdpLUZpLiDZitiq2LnZitmGINiq2YjZgdixINiu2K/Zhdin2Kog2KfZhNmF2YjYp9mC2Lkg2YfYsNmHINmI2KrYtNi62YrZhNmH2Kcg2LnZhNmJINis2YfYp9iy2YMg2YTZhNiq2LfYqNmK2YIg2YPZiiDZitiz2KrYrtiv2YXZh9inLiDZiNmC2K8g2KrYs9iq2K7Yr9mFINin2YTYqti32KjZitmC2KfYqiDZh9iw2Kcg2YTYqtit2K/ZitivINmF2YjZgti52YMg2KfZhNiq2YLYsdmK2KjZii4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMjM2Mzk2OTY0MTc5MjM4ODk0NyI+Itin2YTYr9iu2YjZhCDYpdmE2YkgU3VyZmFjZUZsaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9iz2KrYrtiv2KfZhSDZhdmK2LLYp9iqIFN1cmZhY2VGbGluZ2VyINiw2KfYqiDYp9mE2YXYs9iq2YjZiSDYp9mE2YXZhtiu2YHYti4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjI1MzgyMDAxODQzNzMzMDIyOTUiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtit2K/ZitivINmF2YjZgti52YMg2KfZhNiq2YLYsdmK2KjZiiDYp9mE2LDZiiDZitiz2KrZhdivINmF2YYg2K7Yr9mF2KfYqiDYp9mE2YXZiNmC2Lkg2KjYp9iz2KrYrtiv2KfZhSDZhdi12KfYr9ixINin2YTZhdmI2KfZgti5INin2YTYqtmKINiq2LPYqtiu2K/ZhSDYp9mE2LTYqNmD2KfYqiDZhdir2YQg2KPYqNix2KfYrCDYp9mE2KzZiNin2YQg2YjYqtmC2YbZitipIFdpLUZpLiDZitiq2LnZitmGINiq2YjZgdixINiu2K/Zhdin2Kog2KfZhNmF2YjYp9mC2Lkg2YfYsNmHINmI2KrYtNi62YrZhNmH2Kcg2LnZhNmJINis2YfYp9iy2YMg2YTZhNiq2LfYqNmK2YIg2YPZiiDZitiz2KrYrtiv2YXZh9inLiDZiNmC2K8g2KrYs9iq2K7Yr9mFINin2YTYqti32KjZitmC2KfYqiDZh9iw2Kcg2YTYqtit2K/ZitivINmF2YjZgti52YMg2KfZhNiq2YLYsdmK2KjZii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMjM2Mzk2OTY0MTc5MjM4ODk0NyI+IuKAj9in2YTYr9iu2YjZhCDYpdmE2YkgU3VyZmFjZUZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9iz2KrYrtiv2KfZhSDZhdmK2LLYp9iqIFN1cmZhY2VGbGluZ2VyINiw2KfYqiDYp9mE2YXYs9iq2YjZiSDYp9mE2YXZhtiu2YHYti4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLZgtix2KfYodipINin2YTZhdiu2LLZhiDYp9mE2YXYpNmC2Kog2YTZhNil2LfYp9ix2KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINmF2K3YqtmI2Ykg2KfZhNmF2K7YstmGINin2YTZhdik2YLYqiDZhNmE2KXYt9in2LHYp9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i2KrZh9mK2KbYqSDYtNin2LTYp9iqIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZh9mK2KbYqSDYtNin2LTYp9iqIFdpLUZpINmI2KfZhNin2KrYtdin2YQg2KjZh9inLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i2KfZhNiq2K3Zg9mFINmB2Yog2LTYp9i02KfYqiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjQ1NDM5MTIyOTI2ODE4MjY5ODYiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KrYrdmD2YUg2YHZiiDYp9mE2YXZitiy2KfYqiDYsNin2Kog2KfZhNmF2LPYqtmI2Ykg2KfZhNmF2YbYrtmB2LYg2YHZiiDYtNin2LTYp9iqIFdpLUZpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IuKAj9in2YTYr9iu2YjZhCDYpdmE2YnCoElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9iz2KrYrtiv2KfZhSDZhdmK2LLYp9iqIElucHV0RmxpbmdlciDYsNin2Kog2KfZhNmF2LPYqtmI2Ykg2KfZhNmF2YbYrtmB2LYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLigI/YqtmH2YrYptipINi02KfYtNin2KogV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmH2YrYptipINi02KfYtNin2KogV2ktRmkg2YjYp9mE2KfYqti12KfZhCDYqNmH2KcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiLigI/Yp9mE2KrYrdmD2YUg2YHZiiDYtNin2LTYp9iqIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYqtit2YPZhSDZgdmKINin2YTZhdmK2LLYp9iqINiw2KfYqiDYp9mE2YXYs9iq2YjZiSDYp9mE2YXZhtiu2YHYtiDZgdmKINi02KfYtNin2KogV2ktRmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2ODU3MTM0NDk4NDAyMzQ2NzA4Ij4i2KfZhNiq2YLYp9i3INil2K7Ysdin2Kwg2KfZhNi12YjYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiLYp9mE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KrZgtin2Lcg2KXYrtix2KfYrCDYp9mE2LXZiNiqINmI2KXYudin2K/YqSDYqtmI2KzZitmH2YcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9Ib3R3b3JkIiBtc2dpZD0iMTg5MDU1MzkzNTY1MDM0OTgwOCI+Itin2YPYqti02KfZgSDYp9mE2YPZhNmF2Kkg2KfZhNmF2YfZhdipIjwvc3RyaW5nPgpAQCAtNDk1LDEwICs1MDQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudiv2YrZhCDYpdi52K/Yp9iv2KfYqiDYp9mE2LXZiNiqINin2YTYudin2YXYqSDZhdir2YQg2YXYs9iq2YjZiSDYp9mE2LXZiNiqINmI2KPZiiDYp9mE2LPZhdin2LnYp9iqINmK2KrZhSDYp9iz2KrYrtiv2KfZhdmH2Kcg2YTZhNin2LPYqtmF2KfYuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+Itiq2LPYrNmK2YQg2KfZhNi12YjYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2LPYrNmK2YQg2KfZhNi12YjYqiDYqNin2LPYqtiu2K/Yp9mFINin2YTZhdmK2YPYsdmI2YHZiNmGLiDZiNmK2KrZititINmH2LDYpyDYp9mE2KXYsNmGINmE2YTYqti32KjZitmCINiq2LPYrNmK2YQg2KfZhNi12YjYqiDZgdmKINij2Yog2YjZgtiqINmI2KjYr9mI2YYg2YXZiNin2YHZgtipINmF2YbZgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+IuKAj9in2KrYtdin2YTYp9iqIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IuKAj9in2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNil2LHYs9in2YQg2KPZiNin2YXYsSDYpdmE2Ykg2KjYt9in2YLYqSBTSU0uINmI2YfYsNinINij2YXYsSDYqNin2YTYuiDYp9mE2K7Yt9mI2LHYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLYp9mE2KrZgtin2Lcg2LXZiNixINmI2YXZgtin2LfYuSDZgdmK2K/ZitmIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYqtmC2KfYtyDYtdmI2LEg2YjZhdmC2KfYt9i5INmB2YrYr9mK2Ygg2YXZhiDYrtmE2KfZhCDYp9mE2YPYp9mF2YrYsdinLiDZiNmK2KrZititINmH2LDYpyDYp9mE2KXYsNmGINmE2YTYqti32KjZitmCINin2LPYqtiu2K/Yp9mFINin2YTZg9in2YXZitix2Kcg2YHZiiDYo9mKINmI2YLYqiDZiNio2K/ZiNmGINmF2YjYp9mB2YLYqSDZhdmG2YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i2KrYudi32YrZhCDZhdik2LTYsSBMRUQg2YTZhNil2LHYs9in2YQg2LnZhtiv2YXYpyDYqtmD2YjZhiDYp9mE2YPYp9mF2YrYsdinINmC2YrYryDYp9mE2KfYs9iq2K7Yr9in2YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4i2YTZhNiz2YXYp9itINmE2KrYt9io2YrZgiDZhti42KfZhSDZhdir2KjYqiDZhdiz2KjZgtmL2Kcg2YTYqti52LfZitmEINmF2KTYtNixIExFRCDZhNin2LPYqtiu2K/Yp9mFINin2YTZg9in2YXZitix2KcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i4oCP2KrYudi32YrZhCDZhdik2LTYsSBMRUQg2YTZhNil2LHYs9in2YQg2LnZhtiv2YXYpyDYqtmD2YjZhiDYp9mE2YPYp9mF2YrYsdinINmC2YrYryDYp9mE2KfYs9iq2K7Yr9in2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4i4oCP2YTZhNiz2YXYp9itINmE2KrYt9io2YrZgiDZhti42KfZhSDZhdir2KjYqiDZhdiz2KjZgtmL2Kcg2YTYqti52LfZitmEINmF2KTYtNixIExFRCDZhNin2LPYqtiu2K/Yp9mFINin2YTZg9in2YXZitix2KcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjk2MTI5MjIwNTc2NDQ4ODMwNCI+Itiq2LnYt9mK2YQg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDZhtmH2KfYptmK2YvYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4i2KrYudi32YrZhCDYp9mE2YfYp9iq2YEg2LnZhNmJINin2YTYr9mI2KfZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudi32YrZhCDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINio2KfZhNmD2KfZhdmEINio2LTZg9mEINiv2KfYptmFLiDZh9iw2Kcg2K7Yt9mK2LEg2YTZhNi62KfZitipLiI8L3N0cmluZz4KQEAgLTUwNywxMSArNTE4LDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4OTg1NjA4NzI0NjI2MzgyNDIiPiLZgdix2LYg2KXYudin2K/YqSDYqti02LrZitmEINin2YTZh9in2KrZgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmB2LHYtiDYpdi52KfYr9ipINiq2LTYutmK2YQg2KfZhNis2YfYp9iyINin2YTZhNmI2K3Zii4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MzI2MDA4MTI0Mjg5OTg5OTY5Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YHYsdi2INil2LnYp9iv2Kkg2KrYtNi62YrZhCDYp9mE2YfYp9iq2YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiLYp9mE2K/YrtmI2YQg2KXZhNmJINmG2LjYp9mFINmF2YTZgdin2Kog2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDAyMzA1MDQ5ODkwOTUzODEwIj4i2KfZhNiv2K7ZiNmEINil2YTZiSDZhti42KfZhSDZhdmE2YHYp9iqINio2LfYp9mC2KkgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+IuKAj9in2YTYr9iu2YjZhCDYpdmE2Ykg2YbYuNin2YUg2YXZhNmB2KfYqiDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiLigI/Yp9mE2K/YrtmI2YQg2KXZhNmJINmG2LjYp9mFINmF2YTZgdin2Kog2KjYt9in2YLYqSBTRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIG1zZ2lkPSIxODI5MjkwNzAxNjU4OTkyMzQ3Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYrdmF2YrZhCDYo9mG2LjZhdipINin2YTZhdmE2YHYp9iqINmI2KXZhNi62KfYoSDYqtit2YXZitmE2YfYpyDYpdmE2Ykg2YjYrdiv2Kkg2KfZhNiq2K7YstmK2YYg2KfZhNmC2KfYqNmE2Kkg2YTZhNil2LLYp9mE2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+ItmF2K3ZiCDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYyNTgyNjk4NjM5Mjc0MDU2Ij4i2YXYrdmIINio2LfYp9mC2KkgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4i4oCP2YXYrdmIINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiLigI/Zhdit2Ygg2KjYt9in2YLYqSBTRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgbXNnaWQ9Ijg3ODQyNjgyNDY3NzkxOTg2MjciPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmG2LPZitmCINmI2K3Yr9ipINin2YTYqtiu2LLZitmGINin2YTZgtin2KjZhNipINmE2YTYpdiy2KfZhNipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzNDExMzM4NjMyMDAyMTkzODQ2Ij4i2KfZhNit2LXZiNmEINi52YTZiSDZhdi52YTZiNmF2KfYqiDYrdmI2YQg2YjYrdiv2Kkg2KfZhNiq2K7YstmK2YYg2KfZhNiv2KfYrtmE2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYrdi12YjZhCDYudmE2Ykg2YXYudmE2YjZhdin2Kog2K3ZiNmEINiz2LnYqSDYp9mE2KrYrtiy2YrZhiDYp9mE2K/Yp9iu2YTZitipLiI8L3N0cmluZz4KQEAgLTUyNywxOSArNTM4LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYqtit2YPZhSDZgdmKINin2YTZh9iy2ZHYp9iyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLYp9mE2KrYrdmD2YUg2YHZiiDYp9mE2LbZiNihINin2YTZiNin2YXYtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfZhNiq2K3Zg9mFINmB2Yog2KfZhNi22YjYoSDYp9mE2YjYp9mF2LYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4i2KXYr9in2LHYqSDYp9mE2KrZgdi22YrZhNin2Kog2YjYp9mE2KPYsNmI2YbYp9iqINmE2KPYrNmH2LLYqSBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2IiIG1zZ2lkPSI3Nzc2MTU1NDMwMjE4MjM5ODMzIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KXYr9in2LHYqSDYp9mE2KrZgdi22YrZhNin2Kog2YjYp9mE2KPYsNmI2YbYp9iqINmE2KPYrNmH2LLYqSBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4i2KrZhtmB2YrYsCDYqNix2YjYqtmI2YPZiNmEIE1UUCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc010cCIgbXNnaWQ9IjY1MzI5NjEyMDA0ODY3OTE1NzAiPiLZhNil2KrYp9it2Kkg2KfZhNiv2K7ZiNmEINil2YTZiSDYqNix2YbYp9mF2Kwg2KrYtNi62YrZhCBrZXJuZWwgTVRQINmE2KrZhtmB2YrYsCDYqNix2YjYqtmI2YPZiNmEIE1UUCBVU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4i4oCP2KXYr9in2LHYqSDYp9mE2KrZgdi22YrZhNin2Kog2YjYp9mE2KPYsNmI2YbYp9iqINmE2KPYrNmH2LLYqSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2IiIG1zZ2lkPSI3Nzc2MTU1NDMwMjE4MjM5ODMzIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KXYr9in2LHYqSDYp9mE2KrZgdi22YrZhNin2Kog2YjYp9mE2KPYsNmI2YbYp9iqINmE2KPYrNmH2LLYqSBVU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4i4oCP2KrZhtmB2YrYsCDYqNix2YjYqtmI2YPZiNmEIE1UUCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc010cCIgbXNnaWQ9IjY1MzI5NjEyMDA0ODY3OTE1NzAiPiLigI/ZhNil2KrYp9it2Kkg2KfZhNiv2K7ZiNmEINil2YTZiSDYqNix2YbYp9mF2Kwg2KrYtNi62YrZhCBrZXJuZWwgTVRQINmE2KrZhtmB2YrYsCDYqNix2YjYqtmI2YPZiNmEIE1UUCBVU0IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNDE0ODI5MDg2MDQwMDY1OTE0NiI+Itin2K7Yqtio2KfYsSDYp9mE2KPYrNmH2LLYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI2NTk3OTY0MTkxMjA4MDE2NjA1Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfZhNiq2K3Zg9mFINmB2Yog2KfZhNij2KzZh9iy2Kkg2KfZhNi32LHZgdmK2Kkg2KfZhNmF2KrZhtmI2LnYqSDYqNi62LHYtiDYp9iu2KrYqNin2LEg2KfZhNij2KzZh9iy2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i2KfYqti12KfZhCDZhdio2KfYtNixINio2KPYsdmC2KfZhSDYp9mE2YfZiNin2KrZgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYt9mE2Kgg2KPYsdmC2KfZhSDZh9in2KrZgdmK2Kkg2KjYr9mI2YYg2KrYr9iu2YQg2YXZhtmDLiDZiNmC2K8g2YrYpNiv2Yog2LDZhNmDINil2YTZiSDYqtit2YXZhCDYsdiz2YjZhSDYutmK2LEg2YXYqtmI2YLYudipINij2Ygg2KXYrNix2KfYoSDZhdmD2KfZhNmF2KfYqiDYutmK2LEg2YXYqtmI2YLYudipLiDZiNmF2YYg2KfZhNis2K/ZitixINio2KfZhNiw2YPYsSDYo9mGINiw2YTZgyDZhNinINmK2KrZititINmE2YTYqti32KjZitmCINin2YTYp9iq2LXYp9mEINio2KPYsdmC2KfZhSDYp9mE2LfZiNin2LHYpi4g2YjZgtivINiq2KTYr9mKINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2KXZhNmJINiq2K3ZhdmE2YMg2KrZg9in2YTZitmBINmF2KfZhNmK2Kkg2YXZhiDYrtmE2KfZhCDYpdis2LHYp9ihINmF2YPYp9mE2YXYp9iqINio2K/ZiNmGINmF2YjYp9mB2YLYqSDZhdmG2YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjQxOTgzNDkyMTExMDg0OTc4NzkiPiLYp9iq2LXYp9mEINmF2KjYp9i02LEg2KjYo9mKINix2YLZhSDZhdmGINij2LHZgtin2YUg2KfZhNmH2YjYp9iq2YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KfYqti12KfZhCDYqNij2Yog2LHZgtmFINmH2KfYqtmB2Iwg2KjZhdinINmB2Yog2LDZhNmDINij2LHZgtin2YUg2KfZhNi32YjYp9ix2KbYjCDYqNiv2YjZhiDYqtiv2K7ZhCDZhdmG2YMuINmC2K8g2KrYrNix2Yog2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYp9iq2LXYp9mE2KfYqiDYutmK2LEg2LbYsdmI2LHZitipINmI2LrZitixINmC2KfZhtmI2YbZitipINio2K7Yr9mF2KfYqiDYp9mE2LfZiNin2LHYpi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4i2KjYr9ihINil2LnYr9in2K8g2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiBDRE1BINmF2KjYp9i02LHYqdmLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiLYqNiv2KEg2KXYudiv2KfYryDZh9in2KrZgSBDRE1BINmF2KjYp9i02LHYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNio2K/YoSDYqtmI2YHZitixIENETUEuINmC2K8g2KrYqNiv2KMg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYqtmI2YHZitixIENETUEg2KjYr9mI2YYg2KfZhNit2KfYrNipINil2YTZiSDYsNmE2YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+IuKAj9io2K/YoSDYpdi52K/Yp9ivINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2YogQ0RNQSDZhdio2KfYtNix2KnZiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NjA0ODQ4MDk1MzE1NDIxNDI1Ij4i4oCP2KjYr9ihINil2LnYr9in2K8g2YfYp9iq2YEgQ0RNQSDZhdio2KfYtNix2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgbXNnaWQ9IjE5OTQxOTM1Mzg4MDIzMTQxODYiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqNiv2KEg2KrZiNmB2YrYsSBDRE1BLiDZgtivINiq2KjYr9ijINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2KrZiNmB2YrYsSBDRE1BINio2K/ZiNmGINin2YTYrdin2KzYqSDYpdmE2Ykg2LDZhNmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+Itin2YTYqtit2YPZhSDZgdmKINin2LTYudin2LHYp9iqINiq2K3Yr9mK2Ksg2KfZhNmF2YjZgti5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iMTEyMDc0MTU1Nzg5MTQzODg3NiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YXZg9mK2YYv2KrYudi32YrZhCDYpdi02LnYp9ix2KfYqiDYqtit2K/ZitirINin2YTZhdmI2YLYuSDZhdmGINin2YTZhNin2LPZhNmD2YouINmE2YrYsyDZhNmE2KfYs9iq2K7Yr9in2YUg2KjZiNin2LPYt9ipINin2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+Itin2YTYr9iu2YjZhCDYpdmE2Ykg2K7Ytdin2KbYtSDYp9mE2KXZitiv2KfYuSI8L3N0cmluZz4KQEAgLTU4Miw3ICs1OTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2K3YtdmI2YQg2LnZhNmJINmC2KfYptmF2Kkg2KjYp9mE2K3Ys9in2KjYp9iqINin2YTYqtmKINmK2LnYsdmB2YfYpyDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKLiDZiNmC2K8g2YrYqti22YXZhiDYsNmE2YMg2KPZitipINit2LPYp9io2KfYqiDYqtmFINil2YbYtNin2KTZh9inINio2YjYp9iz2LfYqSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNiq2Yog2KvYqNiq2YfYpy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2K3YtdmI2YQg2LnZhNmJINmC2KfYptmF2Kkg2KjYp9mE2K3Ys9in2KjYp9iqINin2YTYqtmKINmK2LnYsdmB2YfYpyDYp9mE2YfYp9iq2YEuINmI2YLYryDZitiq2LbZhdmGINiw2YTZgyDYo9mK2Kkg2K3Ys9in2KjYp9iqINiq2YUg2KXZhti02KfYpNmH2Kcg2KjZiNin2LPYt9ipINin2YTYqti32KjZitmC2KfYqiDYp9mE2KrZiiDYq9io2KrZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4i2KXZhti02KfYoSDYrdiz2KfYqNin2Kog2YjYqti52YrZitmGINmD2YTZhdin2Kog2YXYsdmI2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjU0NzIxMjQyOTY5MDg5NzcyNjAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9iz2KrYrtiv2KfZhSDYpdmF2YPYp9mG2YrYp9iqINmF2LXYr9mQ2ZHZgiDYp9mE2K3Ys9in2Kgg2YTZgCBBY2NvdW50TWFuYWdlctiMINio2YXYpyDZgdmKINiw2YTZgyDYpdmG2LTYp9ihINit2LPYp9io2KfYqiDZiNin2YTYrdi12YjZhCDYudmE2Ykg2YPZhNmF2KfYqiDZhdix2YjYsdmH2Kcg2YjYqti52YrZhtmH2KcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1NDcyMTI0Mjk2OTA4OTc3MjYwIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfYs9iq2K7Yr9in2YUg2KXZhdmD2KfZhtmK2KfYqiDZhdi12K/ZkNmR2YIg2KfZhNit2LPYp9ioINmE2YAgQWNjb3VudE1hbmFnZXLYjCDYqNmF2Kcg2YHZiiDYsNmE2YMg2KXZhti02KfYoSDYrdiz2KfYqNin2Kog2YjYp9mE2K3YtdmI2YQg2LnZhNmJINmD2YTZhdin2Kog2YXYsdmI2LHZh9inINmI2KrYudmK2YbZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4i2KXYttin2YHYqSDYrdiz2KfYqNin2Kog2KPZiCDYpdiy2KfZhNiq2YfYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjY291bnRzIiBtc2dpZD0iODY5ODI5NTYyNTQ4ODI5MjUwNiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNil2KzYsdin2KEg2LnZhdmE2YrYp9iqINmF2KvZhCDYpdi22KfZgdipINit2LPYp9io2KfYqiDZiNil2LLYp9mE2KrZh9inINmI2K3YsNmBINmD2YTZhdin2Kog2YXYsdmI2LHZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSIyMzU0ODEzOTYxNjM4Nzc2NDIiPiLYp9iz2KrYrtiv2KfZhSDYp9mE2K3Ys9in2KjYp9iqINi52YTZiSDYp9mE2KzZh9in2LIiPC9zdHJpbmc+CkBAIC01OTIsMzYgKzYwMywzNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiLYpdmF2YPYp9mG2YrYqSDYr9iu2YjZhCDZg9in2YXZhNipINil2YTZiSDYp9mE2LTYqNmD2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjM0MDMwNjIxODc3Nzk3MjQxODUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYpdmG2LTYp9ihINmF2YLYp9io2LMg2LTYqNmD2KfYqiDZiNin2LPYqtiu2K/Yp9mFINio2LHZiNiq2YjZg9mI2YTYp9iqINi02KjZg9in2Kog2YXYrti12LXYqS4g2YjZitmI2YHYsSDYp9mE2YXYqti12YHYrSDZiNiq2LfYqNmK2YLYp9iqINij2K7YsdmJINi32LHZgtmL2Kcg2YTYpdix2LPYp9mEINin2YTYqNmK2KfZhtin2Kog2KXZhNmJINin2YTYpdmG2KrYsdmG2KrYjCDZiNmE2LDZhNmDINmE2Kcg2YrYudivINmH2LDYpyDYp9mE2KXYsNmGINmF2LfZhNmI2KjZi9inINmE2KXYsdiz2KfZhCDYp9mE2KjZitin2YbYp9iqINil2YTZiSDYp9mE2KXZhtiq2LHZhtiqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUwNTY2MDE1OTY3NTc1MTg5NiI+Itiq2LrZitmK2LEv2KfYudiq2LHYp9i2INil2LnYr9in2K/Yp9iqINin2YTYtNio2YPYqSDZiNit2LHZg9ipINin2YTZhdix2YjYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MzMzNzk4ODg2NDEyNzE0MTkzIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYutmK2YrYsSDYpdi52K/Yp9iv2KfYqiDYp9mE2LTYqNmD2Kkg2YjZhdmC2KfYt9i52Kkg2YjZgdit2LUg2KzZhdmK2Lkg2K3YsdmD2Kkg2KfZhNmF2LHZiNixINmB2Yog2KfZhNi02KjZg9ip2Iwg2LnZhNmJINiz2KjZitmEINin2YTZhdir2KfZhNiMINiq2LrZitmK2LEg2KfZhNiu2KfYr9mFINin2YTZiNmD2YrZhCDZiNmF2YbZgdiwINij2YogQVBOLiDZgtivINiq2LHYp9mC2Kgg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYrdiy2YUg2KfZhNi02KjZg9ipINij2Ygg2KrYudmK2K8g2KrZiNis2YrZh9mH2Kcg2KPZiCDYqti52K/ZhNmH2Kcg2KjYr9mI2YYg2YXYudix2YHYqtmDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MzMzNzk4ODg2NDEyNzE0MTkzIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYutmK2YrYsSDYpdi52K/Yp9iv2KfYqiDYp9mE2LTYqNmD2Kkg2YjZhdmC2KfYt9i52Kkg2YjZgdit2LUg2KzZhdmK2Lkg2K3YsdmD2Kkg2KfZhNmF2LHZiNixINmB2Yog2KfZhNi02KjZg9ip2Iwg2LnZhNmJINiz2KjZitmEINin2YTZhdir2KfZhNiMINiq2LrZitmK2LEg2KfZhNiu2KfYr9mFINin2YTZiNmD2YrZhCDZiNmF2YbZgdiwINij2YogQVBOLiDZgtivINiq2LHYp9mC2Kgg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYrdiy2YUg2KfZhNi02KjZg9ipINij2Ygg2KrYudmK2K8g2KrZiNis2YrZh9mH2Kcg2KPZiCDYqti52K/ZhNmH2Kcg2KjYr9mI2YYg2YXYudix2YHYqtmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iOTU4ODg0MjkxNDU0MzI3MzA5Ij4i2KrYutmK2YrYsSDYp9iq2LXYp9mEINin2YTYtNio2YPYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9IjY3ODkxMjM5MTI0NzY0MTYyMTQiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti62YrZitixINit2KfZhNipINin2KrYtdin2YQg2KfZhNi02KjZg9ipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSI1OTUyNTg0OTY0MzczMDE3OTYwIj4i2KrYutmK2YrYsSDYp9mE2KfYqti12KfZhCDYp9mE2YXYsdio2YjYtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2LrZitmK2LEg2K3Yp9mE2Kkg2KfYqti12KfZhCDYp9mE2LTYqNmD2Kkg2KfZhNmF2LHYqNmI2LfYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiLYqti62YrZitixINil2LnYr9in2K8g2KfYs9iq2K7Yr9in2YUg2KjZitin2YbYp9iqINin2YTYrtmE2YHZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iNTM0NzcyOTU3ODQ2ODc0NDM3OSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2LrZitmK2LEg2KXYudiv2KfYryDYp9iz2KrYrtiv2KfZhSDYqNmK2KfZhtin2Kog2KfZhNiu2YTZgdmK2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MjAyMDEyOTQ5MjQ3MDQwMDExIj4i2LnYsdi2INin2KrYtdin2YTYp9iqIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTAwMjc5ODA3NzM4NzgwMzcyNiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNi52LHYtiDZhdi52YTZiNmF2KfYqiDYrdmI2YQg2LTYqNmD2KfYqiBXaS1GadiMINmD2LnYsdi2INmF2LnZhNmI2YXYp9iqINit2YjZhCDZhdinINil2LDYpyDYqtmFINiq2YXZg9mK2YYgV2ktRmkg2YjYp9iz2YUg2KPYrNmH2LLYqSBXaS1GaSDYp9mE2YXYqti12YTYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiLYp9mE2KrZiNi12YrZhCDZiNin2YTZgdi12YQg2YXZhiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KfYqti12KfZhCDYqNmG2YLYp9i3INin2YTZiNi12YjZhCDYpdmE2YkgV2ktRmkg2YjZgti32Lkg2KfZhNin2KrYtdin2YQg2KjZh9in2Iwg2YjYpdis2LHYp9ihINiq2LrZitmK2LHYp9iqINi52YTZiSDYqtmH2YrYptipINin2YTYrNmH2KfYsiDZhNi02KjZg9in2KogV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4i2KfZhNiz2YXYp9itINio2KfYs9iq2YLYqNin2YQg2KjYqyBXaS1GaSDZhdiq2LnYr9ivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3OTY5Nzc0MDIxMjU2MzM2NTQ4Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZhNmC2Yog2KfZhNit2LLZhSDYp9mE2KrZiiDZitiq2YUg2KXYsdiz2KfZhNmH2Kcg2KXZhNmJINis2YXZiti5INin2YTYo9is2YfYstipINi52YTZiSDYtNio2YPYqSBXaS1GaSDYqNin2LPYqtiu2K/Yp9mFINi52YbYp9mI2YrZhiDYqNirINmF2KrYudiv2K/YjCDZiNmE2YrYsyDYqNin2LPYqtiu2K/Yp9mFINis2YfYp9iy2YMg2KfZhNmE2YjYrdmKINmB2YLYty4g2YjZitik2K/ZiiDYsNmE2YMg2KXZhNmJINin2LPYqtiu2K/Yp9mFINmC2K/YsSDYo9mD2KjYsSDZhdmGINin2YTYt9in2YLYqSDZitmB2YjZgiDZiNi22Lkg2KfZhNio2Ksg2LrZitixINin2YTZhdiq2LnYr9ivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmE2YLZiiDYp9mE2K3YstmFINin2YTYqtmKINmK2KrZhSDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KzZhdmK2Lkg2KfZhNij2KzZh9iy2Kkg2LnZhNmJINi02KjZg9ipIFdpLUZpINio2KfYs9iq2K7Yr9in2YUg2LnZhtin2YjZitmGINio2Ksg2YXYqti52K/Yr9iMINmI2YTZitizINio2KfYs9iq2K7Yr9in2YUg2YfYp9iq2YHZgyDZgdmC2LcuINmI2YrYpNiv2Yog2LDZhNmDINil2YTZiSDYp9iz2KrYrtiv2KfZhSDZgtiv2LEg2KPZg9io2LEg2YXZhiDYp9mE2LfYp9mC2Kkg2YrZgdmI2YIg2YjYtti5INin2YTYqNirINi62YrYsSDYp9mE2YXYqti52K/Yry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiLigI/Yudix2LYg2KfYqti12KfZhNin2KogV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2LnYsdi2INmF2LnZhNmI2YXYp9iqINit2YjZhCDYtNio2YPYp9iqIFdpLUZp2Iwg2YPYudix2LYg2YXYudmE2YjZhdin2Kog2K3ZiNmEINmF2Kcg2KXYsNinINiq2YUg2KrZhdmD2YrZhiBXaS1GaSDZiNin2LPZhSDYo9is2YfYstipIFdpLUZpINin2YTZhdiq2LXZhNipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNjU1MDY0MTE4ODc0OTEyODAzNSI+IuKAj9in2YTYqtmI2LXZitmEINmI2KfZhNmB2LXZhCDZhdmGIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYp9iq2LXYp9mEINio2YbZgtin2Lcg2KfZhNmI2LXZiNmEINil2YTZiSBXaS1GaSDZiNmC2LfYuSDYp9mE2KfYqti12KfZhCDYqNmH2KfYjCDZiNil2KzYsdin2KEg2KrYutmK2YrYsdin2Kog2LnZhNmJINiq2YfZitim2Kkg2KfZhNis2YfYp9iyINmE2LTYqNmD2KfYqiBXaS1GaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgbXNnaWQ9IjEzNjgyNTM4NzE0ODMyNTQ3ODQiPiLigI/Yp9mE2LPZhdin2K0g2KjYp9iz2KrZgtio2KfZhCDYqNirIFdpLUZpINmF2KrYudiv2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmE2YLZiiDYp9mE2K3YstmFINin2YTYqtmKINmK2KrZhSDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KzZhdmK2Lkg2KfZhNij2KzZh9iy2Kkg2LnZhNmJINi02KjZg9ipIFdpLUZpINio2KfYs9iq2K7Yr9in2YUg2LnZhtin2YjZitmGINio2Ksg2YXYqti52K/Yr9iMINmI2YTZitizINio2KfYs9iq2K7Yr9in2YUg2KzZh9in2LLZgyDYp9mE2YTZiNit2Yog2YHZgti3LiDZiNmK2KTYr9mKINiw2YTZgyDYpdmE2Ykg2KfYs9iq2K7Yr9in2YUg2YLYr9ixINij2YPYqNixINmF2YYg2KfZhNi32KfZgtipINmK2YHZiNmCINmI2LbYuSDYp9mE2KjYqyDYutmK2LEg2KfZhNmF2KrYudiv2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YTZgtmKINin2YTYrdiy2YUg2KfZhNiq2Yog2YrYqtmFINil2LHYs9in2YTZh9inINil2YTZiSDYrNmF2YrYuSDYp9mE2KPYrNmH2LLYqSDYudmE2Ykg2LTYqNmD2KkgV2ktRmkg2KjYp9iz2KrYrtiv2KfZhSDYudmG2KfZiNmK2YYg2KjYqyDZhdiq2LnYr9iv2Iwg2YjZhNmK2LMg2KjYp9iz2KrYrtiv2KfZhSDZh9in2KrZgdmDINmB2YLYty4g2YjZitik2K/ZiiDYsNmE2YMg2KXZhNmJINin2LPYqtiu2K/Yp9mFINmC2K/YsSDYo9mD2KjYsSDZhdmGINin2YTYt9in2YLYqSDZitmB2YjZgiDZiNi22Lkg2KfZhNio2Ksg2LrZitixINin2YTZhdiq2LnYr9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4i2KfZhNiv2K7ZiNmEINil2YTZiSDYpdi52K/Yp9iv2KfYqiDYqNmE2YjYqtmI2KsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjkyMTE3NzQ3MTc0ODg4MjEzNyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YfZitim2Kkg2YTZiNit2Kkg2KfZhNio2YTZiNiq2YjYqyDYp9mE2YXYrdmE2YrYjCDZiNin2YPYqti02KfZgSDYo9is2YfYstipINin2YTYqtit2YPZhSDYudmGINio2LnYryDZiNin2YTYp9mC2KrYsdin2YYg2KjZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YfZitim2Kkg2YfYp9iq2YEg2KfZhNio2YTZiNiq2YjYqyDYp9mE2YXYrdmE2YrYjCDZiNin2YPYqti02KfZgSDYo9is2YfYstipINin2YTYqtit2YPZhSDYudmGINio2LnYryDZiNin2YTYp9mC2KrYsdin2YYg2KjZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoUHJpdiIgbXNnaWQ9IjQwMDk0OTQyNDYwMDk1MTM4MjgiPiLYp9mE2LPZhdin2K0g2KjYpdmC2LHYp9mGINin2YTYqNmE2YjYqtmI2Ksg2YXYuSDYp9mE2KrYt9io2YrZgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aFByaXYiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgwNDU3MzUxOTM0MTc0Njg4NTciPiLZhNmE2LPZhdin2K0g2KjYpdmC2LHYp9mGINmE2KrYt9io2YrZgiDZhdi5INin2YTYo9is2YfYstipINin2YTYqNi52YrYr9ipINio2K/ZiNmGINiq2K/YrtmEINin2YTZhdiz2KrYrtiv2YUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoUHJpdiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNDU3MzUxOTM0MTc0Njg4NTciPiLZhNmE2LPZhdin2K0g2KjYpdmC2LHYp9mGINmE2KrYt9io2YrZgiDZhdi5INin2YTYo9is2YfYstipINin2YTYqNi52YrYr9ipINio2K/ZiNmGINiq2K/YrtmEINin2YTZhdiz2KrYrtiv2YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+Itin2YTYp9iq2LXYp9mEINio2YDYtNio2YPYqSBXaU1BWCDZiNmC2LfYuSDYp9mE2KfYqti12KfZhCDYqNmH2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2K3Yr9mK2K8g2YXYpyDYpdiw2Kcg2KrZhSDYqtmF2YPZitmGIFdpTUFYINmI2KrYrdiv2YrYryDZhdi52YTZiNmF2KfYqiDYrdmI2YQg2KPZitipINi02KjZg9in2KogV2lNQVgg2YXYqti12YTYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpbWF4U3RhdGUiIG1zZ2lkPSIyNDA1MDQyMjY3MTMxNDk2NTc5Ij4i2KrYutmK2YrYsSDYrdin2YTYqSBXaU1BWCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmI2LXZitmEINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2KjYtNio2YPYp9iqIFdpTUFYINmI2YLYt9i5INin2KrYtdin2YTZhyDYqNmH2KcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NzAyNTA0MzAwNDkyMzc5OCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YjYtdmK2YQg2KfZhNmH2KfYqtmBINio2LTYqNmD2KfYqiBXaU1BWCDZiNmC2LfYuSDYp9iq2LXYp9mE2Ycg2KjZh9inLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjQxOTU5MDcwMTA2MTAyMDU3MDMiPiLigI/Yp9mE2KfYqti12KfZhCDYqNmA2LTYqNmD2KkgV2lNQVgg2YjZgti32Lkg2KfZhNin2KrYtdin2YQg2KjZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtit2K/ZitivINmF2Kcg2KXYsNinINiq2YUg2KrZhdmD2YrZhiBXaU1BWCDZiNiq2K3Yr9mK2K8g2YXYudmE2YjZhdin2Kog2K3ZiNmEINij2YrYqSDYtNio2YPYp9iqIFdpTUFYINmF2KrYtdmE2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+IuKAj9iq2LrZitmK2LEg2K3Yp9mE2KkgV2lNQVgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMTU2NDU2NTA0MDg0MjAxODA1Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZiNi12YrZhCDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINio2LTYqNmD2KfYqiBXaU1BWCDZiNmC2LfYuSDYp9iq2LXYp9mE2Ycg2KjZh9inLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmI2LXZitmEINin2YTZh9in2KrZgSDYqNi02KjZg9in2KogV2lNQVgg2YjZgti32Lkg2KfYqti12KfZhNmHINio2YfYpy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aCIgbXNnaWQ9IjYxMjc3NjkzMzYzMzkyNzY4MjgiPiLYp9mE2KfYqti12KfZhCDYqNij2KzZh9iy2Kkg2KjZhNmI2KrZiNirIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2LnYsdi2INiq2YfZitim2Kkg2KfZhNio2YTZiNiq2YjYqyDYudmE2Ykg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDZiNil2KzYsdin2KEg2KfYqti12KfZhNin2Kog2YjZgtio2YjZhNmH2Kcg2YXYuSDYp9mE2KPYrNmH2LLYqSDYp9mE2YXZgtiq2LHZhtipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYudix2LYg2KrZh9mK2KbYqSDYp9mE2KjZhNmI2KrZiNirINi52YTZiSDYp9mE2YfYp9iq2YEg2YjYpdis2LHYp9ihINin2KrYtdin2YTYp9iqINmI2YLYqNmI2YTZh9inINmF2Lkg2KfZhNij2KzZh9iy2Kkg2KfZhNmF2YLYqtix2YbYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX25mYyIgbXNnaWQ9IjQ0MjMzNTEyNzQ3NTc4NzY5NTMiPiLYp9mE2KrYrdmD2YUg2YHZiiDYp9iq2LXYp9mEINin2YTYrdmC2YQg2KfZhNmC2LHZitioIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYp9iq2LXYp9mEINio2LnZhNin2YXYp9iqINin2YTYp9iq2LXYp9mEINmC2LHZitioINin2YTZhdiv2YkgKE5GQynYjCDZiNin2YTYqNi32KfZgtin2Kog2YjYqNix2KfZhdisINin2YTZgtix2KfYodipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KfYqti12KfZhCDYqNi52YTYp9mF2KfYqiDYp9mE2KfYqti12KfZhCDZgtix2YrYqCDYp9mE2YXYr9mJIChORkMp2Iwg2YjYp9mE2KjYt9in2YLYp9iqINmI2KjYsdin2YXYrCDYp9mE2YLYsdin2KHYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjM1OTg0OTYzMDE0ODY0MzkyNTgiPiLYqti52LfZitmEINmC2YHZhCDYp9mE2LTYp9i02KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSI2MDM0MjAzMDY1MDc3MTIyOTkyIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudi32YrZhCDYqtij2YXZitmGINin2YTZhdmB2KfYqtmK2K0g2YjYo9mKINij2YXYp9mGINmE2YPZhNmF2Kkg2YXYsdmI2LEg2YXYsdiq2KjYt9ipLiDYudmE2Ykg2LPYqNmK2YQg2KfZhNmF2KvYp9mE2Iwg2YrYudi32YQg2KfZhNmH2KfYqtmBINiq2KPZhdmK2YYg2KfZhNmF2YHYp9iq2YrYrSDYudmG2K8g2KfYs9iq2YLYqNin2YQg2YXZg9in2YTZhdipINmH2KfYqtmB2YrYqSDZiNin2LHYr9ip2Iwg2KvZhSDZiti52YrYryDYqtmF2YPZitmGINiq2KPZhdmK2YYg2KfZhNmF2YHYp9iq2YrYrSDYudmG2K8g2KfZhtiq2YfYp9ihINin2YTZhdmD2KfZhNmF2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iNjIwMTgxMDAwODIzMDUwMzA1MiI+ItmC2LHYp9ih2Kkg2KXYudiv2KfYr9in2Kog2KfZhNmF2LLYp9mF2YbYqSI8L3N0cmluZz4KQEAgLTYzOCwxNCArNjQ5LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmC2LHYp9ih2Kkg2KzZhdmK2Lkg2KfZhNmD2YTZhdin2Kog2YjYp9mE2KPYs9mF2KfYoSDZiNin2YTYudio2KfYsdin2Kog2KfZhNiq2Yog2LHYqNmF2Kcg2YrZg9mI2YYg2KfZhNmF2LPYqtiu2K/ZhSDZgtivINiu2LLZhtmH2Kcg2YHZiiDZgtin2YXZiNizINin2YTZhdiz2KrYrtiv2YUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4i2KXYttin2YHYqSDZg9mE2YXYp9iqINil2YTZiSDYp9mE2YLYp9mF2YjYsyDYp9mE2YXYudix2ZHZgSDYqNmI2KfYs9i32Kkg2KfZhNmF2LPYqtiu2K/ZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZg9iq2KfYqNipINmD2YTZhdin2Kog2KzYr9mK2K/YqSDZgdmKINmC2KfZhdmI2LMg2KfZhNmF2LPYqtiu2K/ZhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY3Mjc1MDk1MTU5NDA1NDY4Ij4i2YLYsdin2KHYqSDZhdit2KrZiNmK2KfYqiDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODgxNTY0NjI5MzQ5Nzc5NDAiPiLZgtix2KfYodipINmF2K3YqtmI2YrYp9iqINio2LfYp9mC2KkgU0QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDY5ODg3MTI1OTgzODYwNzkiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINmF2K3YqtmI2YrYp9iqINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjA3MzYyNDczNjU0OTc1NDExIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YLYsdin2KHYqSDZhdit2KrZiNmK2KfYqiDYqNi32KfZgtipIFNELiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+Itiq2LnYr9mK2YQg2YXYrdiq2YjZitin2Kog2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2KPZiCDYrdiw2YHZh9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiLYqti52K/ZitmEINmF2K3YqtmI2YrYp9iqINio2LfYp9mC2KkgU0Qg2KPZiCDYrdiw2YHZh9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTZg9iq2KfYqNipINil2YTZiSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2YPYqtin2KjYqSDYpdmE2Ykg2KjYt9in2YLYqSBTRC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY3Mjc1MDk1MTU5NDA1NDY4Ij4i4oCP2YLYsdin2KHYqSDZhdit2KrZiNmK2KfYqiDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODgxNTY0NjI5MzQ5Nzc5NDAiPiLigI/Zgtix2KfYodipINmF2K3YqtmI2YrYp9iqINio2LfYp9mC2KkgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDY5ODg3MTI1OTgzODYwNzkiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINmF2K3YqtmI2YrYp9iqINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjA3MzYyNDczNjU0OTc1NDExIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YLYsdin2KHYqSDZhdit2KrZiNmK2KfYqiDYqNi32KfZgtipIFNELiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+IuKAj9iq2LnYr9mK2YQg2YXYrdiq2YjZitin2Kog2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2KPZiCDYrdiw2YHZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiLigI/Yqti52K/ZitmEINmF2K3YqtmI2YrYp9iqINio2LfYp9mC2KkgU0Qg2KPZiCDYrdiw2YHZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTZg9iq2KfYqNipINil2YTZiSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2YPYqtin2KjYqSDYpdmE2Ykg2KjYt9in2YLYqSBTRC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+Itiq2LnYr9mK2YQv2K3YsNmBINmF2K3YqtmI2YrYp9iqINmI2K3Yr9ipINiq2K7YstmK2YYg2KfZhNmI2LPYp9im2Lcg2KfZhNiv2KfYrtmE2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODE4OTE2MDU5NzY5ODUyOTE4NSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2LnYr9mK2YQg2YXYrdiq2YjZitin2Kog2YjYrdiv2Kkg2KrYrtiy2YrZhiDYp9mE2YjYs9in2KbYtyDYp9mE2K/Yp9iu2YTZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3NzgzMTg1OTg0NDg4NDk4MjkiPiLYpdiv2KfYsdipINin2YTYs9i52Kkg2KfZhNiq2K7YstmK2YbZitipINmE2YTZhdiz2KrZhtivIjwvc3RyaW5nPgpAQCAtNjU1LDcgKzY2Niw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NjU2NDg3MjY0ODE5NjY5ODI0Ij4i2KfZhNiv2K7ZiNmEINil2YTZiSDZhti42KfZhSDZhdmE2YHYp9iqINiw2KfZg9ix2Kkg2KfZhNiq2K7YstmK2YYg2KfZhNmF2KTZgtiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINmG2LjYp9mFINmF2YTZgdin2Kog2LDYp9mD2LHYqSDYp9mE2KrYrtiy2YrZhiDYp9mE2YXYpNmC2Kog2YjYp9mE2YPYqtin2KjYqSDYqNmHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiLYpdis2LHYp9ihL9iq2YTZgtmKINmF2YPYp9mE2YXYp9iqINi52KjYsSDYp9mE2KXZhtiq2LHZhtiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlX3NpcCIgbXNnaWQ9IjQ3MTc2MzIwMDAwNjI2NzQyOTQiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9iz2KrYrtiv2KfZhSDYrtiv2YXYqSBTSVAg2YTYpdis2LHYp9ihL9iq2YTZgtmKINmF2YPYp9mE2YXYp9iqINi52KjYsSDYp9mE2KXZhtiq2LHZhtiqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZV9zaXAiIG1zZ2lkPSI0NzE3NjMyMDAwMDYyNjc0Mjk0Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfYs9iq2K7Yr9in2YUg2K7Yr9mF2KkgU0lQINmE2KXYrNix2KfYoS/YqtmE2YLZiiDZhdmD2KfZhNmF2KfYqiDYudio2LEg2KfZhNil2YbYqtix2YbYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRfY2FsbF9zZXJ2aWNlIiBtc2dpZD0iNjcyNDAwOTcyNjY3MTI0NjU1MSI+Itin2YTYqtmB2KfYudmEINmF2Lkg2KfZhNi02KfYtNipINij2KvZhtin2KEg2KfZhNin2KrYtdin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kX2NhbGxfc2VydmljZSIgbXNnaWQ9Ijg3MzI1NDc2NjI0NDI1NzI0MzUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KrYrdmD2YUg2YHZiiDZiNmC2Kog2YjZg9mK2YHZitipINmF2LTYp9mH2K/YqSDYp9mE2YXYs9iq2K7Yr9mFINmE2YTYtNin2LTYqSDYo9ir2YbYp9ihINin2YTYp9iq2LXYp9mELiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4i2YLYsdin2KHYqSDYqNmK2KfZhtin2Kog2KfZhNin2LPYqtiu2K/Yp9mFINin2YTYs9in2KjZgtipINmE2YTYtNio2YPYqSI8L3N0cmluZz4KQEAgLTgwOSwxNCArODIwLDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4i2KfZhNmF2YbYstmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+Itin2YTYudmF2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+Iti62YrYsSDYsNmE2YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLYp9mD2KrYqCDYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+Itin2YPYqtioINix2YXYsiBQVUsg2YjYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2KzYr9mK2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+Itix2YXYsiBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Itix2YXYsiDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINin2YTYrNiv2YrYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiLZhNmFINmK2KrZhSDYp9mE2LnYq9mI2LEg2LnZhNmJINiq2LfYqNmK2YIg2YTYudix2LYg2KzZh9ipINin2YTYp9iq2LXYp9mEINmH2LDZhy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLigI/Yp9mD2KrYqCDYsdmF2LIg2LHZhdiyIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IuKAj9in2YPYqtioINix2YXYsiBQVUsg2YjYsdmF2LIg2LHZhdiyIFBJTiDYp9mE2KzYr9mK2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IuKAj9ix2YXYsiBQVUsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IuKAj9ix2YXYsiDYsdmF2LIgUElOINin2YTYrNiv2YrYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+Itin2YTZhdizINmE2YPYqtin2KjYqSDZg9mE2YXYqSDYp9mE2YXYsdmI2LEiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLYp9mD2KrYqCDZg9mE2YXYqSDYp9mE2YXYsdmI2LEg2YTYpdmE2LrYp9ihINin2YTYqtij2YXZitmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i2KfZg9iq2Kgg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDZhNil2YTYutin2KEg2KfZhNiq2KPZhdmK2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINi62YrYsSDYtdit2YrYrS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLigI/Yp9mD2KrYqCDYsdmF2LIgUElOINmE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IuKAj9ix2YXYsiBQSU4g2LrZitixINi12K3ZititLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiLZhNil2YTYutin2KEg2KfZhNiq2KPZhdmK2YbYjCDYp9i22LrYtyDYudmE2YkgXCLYp9mE2YLYp9im2YXYqVwiINir2YUg2LnZhNmJIDAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxfZGlhbG9nX251bWJlcl9mb3JfZGlzcGxheSIgbXNnaWQ9IjY5NjE5MjEwMzE5NTA5MDk3MCI+Itix2YLZhSDYp9mE2LfZiNin2LHYpiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODk2MzgzOTI0MjU2NTY1MzE5MiI+ItmE2Kcg2KrYqtmI2YHYsSDYrtiv2YXYqSI8L3N0cmluZz4KQEAgLTgzNCwxMyArODQ2LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiLYqtmFINin2YTYtNit2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2JhdHRlcnlfc2hvcnQiIG1zZ2lkPSI0NDc3MjY0ODQ5Mzg2ODUwMjY2Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbG93X2JhdHRlcnkiIG1zZ2lkPSIxNDgyODczOTgxOTE5MjQ5NzQwIj4i2KrZiNi12YrZhCDYrNmH2KfYsiDYp9mE2LTYrdmGLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTk0MzkyNzc4MTkyMTUzOTkiPiLZhNmK2LPYqiDZh9mG2KfZgyDYqNi32KfZgtipIFNJTSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUxNjU5MTk2MDk1NzkxNDc0Ij4i2YTZitizINmH2YbYp9mDINio2LfYp9mC2KkgU0lNINmB2Yog2KfZhNis2YfYp9iyINin2YTZhNmI2K3Zii4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4i2YTZitizINmH2YbYp9mDINio2LfYp9mC2KkgU0lNINmB2Yog2KfZhNmH2KfYqtmBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTM3Mjc4NzEzODAyMzI3MjYxNSI+Itij2K/YrtmEINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSIzNTI2NTczMDk5MDE5MzE5NDcyIj4i2KjYt9in2YLYqSBTSU0g2YXZgdmC2YjYr9ipINij2Ygg2LrZitixINmC2KfYqNmE2Kkg2YTZhNmC2LHYp9ih2KkuINij2K/YrtmEINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5NjE0OTY2NTEzODkxNjE4NCI+Itio2LfYp9mC2KkgU0lNINi62YrYsSDZgtin2KjZhNipINmE2YTYp9iz2KrYrtiv2KfZhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iOTEwOTA0NjQzNDMzMTUxMzcxIj4i2KrZhSDYqti52LfZitmEINio2LfYp9mC2KkgU0lNINio2LTZg9mEINiv2KfYptmFLlxuINin2KrYtdmEINio2YXZgtiv2YUg2K7Yr9mF2Kkg2KfZhNmE2KfYs9mE2YPZiiDZhNmE2K3YtdmI2YQg2LnZhNmJINio2LfYp9mC2KkgU0lNINij2K7YsdmJLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTk0MzkyNzc4MTkyMTUzOTkiPiLigI/ZhNmK2LPYqiDZh9mG2KfZgyDYqNi32KfZgtipIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUxNjU5MTk2MDk1NzkxNDc0Ij4i4oCP2YTZitizINmH2YbYp9mDINio2LfYp9mC2KkgU0lNINmB2Yog2KfZhNis2YfYp9iyINin2YTZhNmI2K3Zii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4i4oCP2YTZitizINmH2YbYp9mDINio2LfYp9mC2KkgU0lNINmB2Yog2KfZhNmH2KfYqtmBLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTM3Mjc4NzEzODAyMzI3MjYxNSI+IuKAj9ij2K/YrtmEINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSIzNTI2NTczMDk5MDE5MzE5NDcyIj4i4oCP2KjYt9in2YLYqSBTSU0g2YXZgdmC2YjYr9ipINij2Ygg2LrZitixINmC2KfYqNmE2Kkg2YTZhNmC2LHYp9ih2KkuINij2K/YrtmEINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5NjE0OTY2NTEzODkxNjE4NCI+IuKAj9io2LfYp9mC2KkgU0lNINi62YrYsSDZgtin2KjZhNipINmE2YTYp9iz2KrYrtiv2KfZhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iOTEwOTA0NjQzNDMzMTUxMzcxIj4i4oCP2KrZhSDYqti52LfZitmEINio2LfYp9mC2KkgU0lNINio2LTZg9mEINiv2KfYptmFLlxuINin2KrYtdmEINio2YXZgtiv2YUg2K7Yr9mF2Kkg2KfZhNmE2KfYs9mE2YPZiiDZhNmE2K3YtdmI2YQg2LnZhNmJINio2LfYp9mC2KkgU0lNINij2K7YsdmJLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDE1OTQ5MDUxNTI3NDY4ODYiPiLYstixINin2YTZhdmC2LfYuSDYp9mE2LXZiNiq2Yog2KfZhNiz2KfYqNmCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYwODkyOTc2NTA0ODEyOTIzNjMiPiLYstixINin2YTZhdmC2LfYuSDYp9mE2LXZiNiq2Yog2KfZhNiq2KfZhNmKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU5MDg4Nzg2NzgwMTI4MDAxIj4i2LLYsSDYp9mE2KXZitmC2KfZgSDYp9mE2YXYpNmC2KoiPC9zdHJpbmc+CkBAIC04NDgsMTUgKzg2MCwxNSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1NjIzMTgzNzg3NjY5ODc2MDEiPiLYstixINin2YTYpdmK2YLYp9mBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxzX29ubHkiIG1zZ2lkPSI2NzMzOTc4MzA0Mzg2MzY1NDA3Ij4i2YXZg9in2YTZhdin2Kog2LfZiNin2LHYpiDZgdmC2LciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIxNDMzODkyMjQ5ODYwMjg1MDEiPiLYp9mE2LTYqNmD2Kkg2YXYpNmF2ZHZhtipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNzQ0MTc5NzMzOTk3NjIzMCI+Itio2LfYp9mC2KkgU0lNINmF2KTZhdmR2YbYqSDYqNmD2YjYryBQVUsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNzQ0MTc5NzMzOTk3NjIzMCI+IuKAj9io2LfYp9mC2KkgU0lNINmF2KTZhdmR2YbYqSDYqNmD2YjYryBQVUsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI4MTI3OTE2MjU1MjQ1MTgxMDYzIj4i2LHYp9is2Lkg2K/ZhNmK2YQg2KfZhNmF2LPYqtiu2K/ZhSDYo9mIINin2KrYtdmEINio2K7Yr9mF2Kkg2KfZhNi52YXZhNin2KEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI4MDY2NjYwMTI5MjA2MDAxMDM5Ij4i2KjYt9in2YLYqSBTSU0g2YXYpNmF2ZHZhtipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjU5NTMyMzIxNDA1Mjg4MTI2NCI+Itis2KfYsdmNINil2YTYutin2KEg2KrYo9mF2YrZhiDYqNi32KfZgtipIFNJTeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+IuKAj9io2LfYp9mC2KkgU0lNINmF2KTZhdmR2YbYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiLigI/YrNin2LHZjSDYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KjYt9in2YLYqSBTSU3igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjY0ODE2MjM4MzAzNDQxMDcyMjIiPiLZhNmC2K8g2LHYs9mF2Kog2YbZgti0INil2YTYutin2KEg2KfZhNiq2KPZhdmK2YYg2KjYt9ix2YrZgtipINi62YrYsSDYtdit2YrYrdipIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INmF2LHYqS5cblxu2KfZhNix2KzYp9ihINil2LnYp9iv2Kkg2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+ItmE2YLYryDZg9iq2KjYqiDZg9mE2YXYqSDYp9mE2YXYsdmI2LEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipINio2LTZg9mEINi62YrYsSDYtdit2YrYrS4gXG5cbtij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+ItmE2YLYryDZg9iq2KjYqiDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INmF2LHYqSDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0uIFxuXG7Yo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjkxOTE2MTE5ODQ2MjU0NjA4MjAiPiLZhNmC2K8g2LHYs9mF2Kog2YbZgti0INil2YTYutin2KEg2KfZhNiq2KPZhdmK2YYg2KjYtNmD2YQg2LrZitixINi12K3ZititIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INmF2LHYqS4g2KjYudivIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqSDYp9mE2KPYrtix2YnYjCDYs9iq2Y/Yt9in2YTYqCDYqNil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINio2KfYs9iq2K7Yr9in2YUg2YXYudmE2YjZhdin2Kog2KrYs9is2YrZhCDYp9mE2K/YrtmI2YQg2KXZhNmJIEdvb2dsZS5cblxuINij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiLZhNmC2K8g2LHYs9mF2Kog2YbZgti0INil2YTYutin2KEg2KfZhNiq2KPZhdmK2YYg2KjYtNmD2YQg2LrZitixINi12K3ZititIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INmF2LHYqS4g2KjYudivIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqSDYp9mE2KPYrtix2YnYjCDYs9iq2Y/Yt9in2YTYqCDYqNil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2YfYp9iq2YEg2KjYp9iz2KrYrtiv2KfZhSDZhdi52YTZiNmF2KfYqiDYqtiz2KzZitmEINin2YTYr9iu2YjZhCDYpdmE2YkgR29vZ2xlLlxuXG4g2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2MjE2NjcyNzA2NTQ1Njk2OTU1Ij4i4oCP2YTZgtivINmD2KrYqNiqINix2YXYsiBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipINio2LTZg9mEINi62YrYsSDYtdit2YrYrS4gXG5cbtij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IuKAj9mE2YLYryDYsdiz2YXYqiDZhtmC2LQg2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiDYqNi52K8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYrdin2YjZhNin2Kog2LrZitixINin2YTZhtin2KzYrdipINin2YTYo9iu2LHZidiMINiz2KrZj9i32KfZhNioINio2KXZhNi62KfYoSDYqtij2YXZitmGINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2KjYp9iz2KrYrtiv2KfZhSDZhdi52YTZiNmF2KfYqiDYqtiz2KzZitmEINin2YTYr9iu2YjZhCDYpdmE2YkgR29vZ2xlLlxuXG4g2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+IuKAj9mE2YLYryDYsdiz2YXYqiDZhtmC2LQg2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiDYqNi52K8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYrdin2YjZhNin2Kog2LrZitixINin2YTZhtin2KzYrdipINin2YTYo9iu2LHZidiMINiz2KrZj9i32KfZhNioINio2KXZhNi62KfYoSDYqtij2YXZitmGINin2YTZh9in2KrZgSDYqNin2LPYqtiu2K/Yp9mFINmF2LnZhNmI2YXYp9iqINiq2LPYrNmK2YQg2KfZhNiv2K7ZiNmEINil2YTZiSBHb29nbGUuXG5cbiDYo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTI4MTA2Mzk5NzQ1NzU1NjA0Ij4i2YTZgtivINit2KfZiNmE2Kog2KXZhNi62KfYoSDYqtij2YXZitmGINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2YogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYsdin2KouINio2LnYryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2KnYjCDYs9iq2KrZhSDYpdi52KfYr9ipINiq2LnZitmK2YYg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDYpdmE2Ykg2KfZhNil2LnYr9in2K/Yp9iqINin2YTYp9mB2KrYsdin2LbZitipINmE2YTZhdi12YbYuSDZiNiz2YrYqtmFINmB2YLYryDYrNmF2YrYuSDYqNmK2KfZhtin2Kog2KfZhNmF2LPYqtiu2K/ZhS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiLZhNmC2K8g2K3Yp9mI2YTYqiDYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KfZhNmH2KfYqtmBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2LHYp9iqLiDYqNi52K8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYrdin2YjZhNin2Kog2LrZitixINin2YTZhtin2KzYrdip2Iwg2LPYqtiq2YUg2KXYudin2K/YqSDYqti52YrZitmGINin2YTZh9in2KrZgSDYpdmE2Ykg2KfZhNil2LnYr9in2K/Yp9iqINin2YTYp9mB2KrYsdin2LbZitipINmE2YTZhdi12YbYuSDZiNiz2YrYqtmFINmB2YLYryDYrNmF2YrYuSDYqNmK2KfZhtin2Kog2KfZhNmF2LPYqtiu2K/ZhS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyODA4NzM1MTY0OTM5MzQzNjUiPiLZhNmC2K8g2K3Yp9mI2YTYqiDYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYsdin2Kog2KjYtNmD2YQg2LrZitixINi12K3ZititLiDYs9mK2KrZhSDYp9mE2KLZhiDYpdi52KfYr9ipINiq2LnZitmK2YYg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDYpdmE2Ykg2KfZhNil2LnYr9in2K/Yp9iqINin2YTYp9mB2KrYsdin2LbZitipINmE2YTZhdi12YbYuS4iPC9zdHJpbmc+CkBAIC04NjUsMTIgKzg3NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiLZh9mEINmG2LPZitiqINin2YTZhtmF2LfYnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+Itil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2K3Ys9in2KgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiLZhdit2KfZiNmE2KfYqiDYp9mE2YbZgti0INmD2KvZitix2Kkg2KzYr9mL2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4i2YTYpdmE2LrYp9ihINin2YTYqtij2YXZitmG2Iwg2LPYrNmR2YQg2KfZhNiv2K7ZiNmEINio2K3Ys9in2KjZgyDZgdmKIEdvb2dsZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4i4oCP2YTYpdmE2LrYp9ihINin2YTYqtij2YXZitmG2Iwg2LPYrNmR2YQg2KfZhNiv2K7ZiNmEINio2K3Ys9in2KjZgyDZgdmKIEdvb2dsZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iODg0Njg4MTQyNDEwNjQ4NDQ0NyI+Itin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFICjYp9mE2KjYsdmK2K8g2KXZhNmD2KrYsdmI2YbZiikiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iNTk1ODAyODM4Mzk1NDczODUyOCI+ItmD2YTZhdipINin2YTZhdix2YjYsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4i2KrYs9is2YrZhCDYp9mE2K/YrtmI2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iMTM2NDA1MTQ3MzM0NzQ4NTkwOCI+Itin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINi62YrYsSDYtdit2YrYrSDYo9mIINmD2YTZhdipINin2YTZhdix2YjYsSDYutmK2LEg2LXYrdmK2K3YqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSIxNjk2OTI0NzYzNjkwMzc5MDczIj4i2YfZhCDZhtiz2YrYqiDYp9iz2YUg2KfZhNmF2LPYqtiu2K/ZhSDYo9mIINmD2YTZhdipINin2YTZhdix2YjYsdifXG7Yp9mG2KrZgtmEINil2YTZiSAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iMTY5NjkyNDc2MzY5MDM3OTA3MyI+IuKAj9mH2YQg2YbYs9mK2Kog2KfYs9mFINin2YTZhdiz2KrYrtiv2YUg2KPZiCDZg9mE2YXYqSDYp9mE2YXYsdmI2LHYn1xu2KfZhtiq2YLZhCDYpdmE2YkgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iNzExNDYyNzM1MTI4NjkzMzg2NyI+Itis2KfYsdmNINin2YTYqtit2YLZgi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdW5sb2NrX2xhYmVsIiBtc2dpZD0iNzM3NDQwNDgzMjIwNjY3MDU0Ij4i2KXZhNi62KfYoSDYqtij2YXZitmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zb3VuZF9vbl9sYWJlbCIgbXNnaWQ9IjkwNjg4Nzc1NzY1MTM0MjU5NzAiPiLYqti02LrZitmEINin2YTYtdmI2KoiPC9zdHJpbmc+CkBAIC04NzksNyArODkxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2xlYXJlZCIgbXNnaWQ9IjU1ODM0Nzk3MjEwMDE2Mzk1NzkiPiLYqtmFINmF2K3ZiCDYp9mE2YbZhdi3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jZWxsX2FkZGVkIiBtc2dpZD0iNjc1NjAzMTIwODM1OTI5MjQ4NyI+Itiq2YXYqiDYpdi22KfZgdipINin2YTYrtmE2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fZGV0ZWN0ZWQiIG1zZ2lkPSI0OTg4NzMwODk1NTU0MDU3MDU4Ij4i2KfZg9iq2YXZhCDYp9mE2YbZhdi3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDYp9mE2KPYr9in2KkgJTIkZCDZhdmGICUzJGQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiLigI8lMSRzLiDYp9mE2KPYr9in2KkgJTIkZCDZhdmGICUzJGQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+Itil2LbYp9mB2Kkg2KPYr9in2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLZgdin2LHYutipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLYqtmFINiq2YjYs9mK2Lkg2YXZhti32YLYqSDYpdmE2LrYp9ihINin2YTZgtmB2YQuIjwvc3RyaW5nPgpAQCAtODk2LDcgKzkwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiLYpdmE2LrYp9ihINin2YTZgtmB2YQg2KjYp9iz2KrYrtiv2KfZhSDYp9mE2KrZhdix2YrYsS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+Itil2YTYutin2KEg2KfZhNmC2YHZhCDYqNin2LPYqtiu2K/Yp9mFINin2YTZhtmC2LQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiLYqtij2YXZitmGINin2YTYrNmH2KfYsiDYqNin2YTZiNis2YcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+Itil2YTYutin2KEg2KfZhNmC2YHZhCDYqNin2LPYqtiu2K/Yp9mFINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IuKAj9il2YTYutin2KEg2KfZhNmC2YHZhCDYqNin2LPYqtiu2K/Yp9mFINix2YXYsiBQSU4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i2KXZhNi62KfYoSDYp9mE2YLZgdmEINio2KfYs9iq2K7Yr9in2YUg2YPZhNmF2Kkg2KfZhNmF2LHZiNixLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+ItmF2YbYt9mC2Kkg2KfZhNmG2YLYtC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i2YXZhti32YLYqSDYp9mE2KrZhdix2YrYsS4iPC9zdHJpbmc+CkBAIC05MTAsOCArOTIyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImhvdXJfYW1wbSIgbXNnaWQ9IjQ1ODQzMzgwODM1MjkzNTU5ODIiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lUDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJob3VyX2NhcF9hbXBtIiBtc2dpZD0iMjA4MzQ2NTk5Mjk0MDQ0NDM2NiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IkFNUE0iPiVwPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X2ZhaWxlZCIgbXNnaWQ9IjU0MTAyNzAzMjkxMTQyMTIwNDEiPiLYo9iu2YHZgiDYp9iu2KrYqNin2LEg2KfZhNmF2LXZhti5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiLYpdis2LHYp9ihIEZBQ1RPUllfVEVTVCDYutmK2LEg2YXYqtin2K0g2LPZiNmJINmE2YTYrdiy2YUg2KfZhNmF2KvYqNiq2Kkg2YHZiiAvc3lzdGVtL2FwcC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub19hY3Rpb24iIG1zZ2lkPSI4NzI5OTE4NzQ3OTk5OTg1NjEiPiLZhNmFINmK2KrZhSDYp9mE2LnYq9mI2LEg2LnZhNmJINij2YrYqSDYrdiy2YXYqSDYqtmI2YHYsSDYpdis2LHYp9ihIEZBQ1RPUllfVEVTVC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub3Rfc3lzdGVtIiBtc2dpZD0iNDQzNTIwMTY1Njc2NzI3NjcyMyI+IuKAj9il2KzYsdin2KEgRkFDVE9SWV9URVNUINi62YrYsSDZhdiq2KfYrSDYs9mI2Ykg2YTZhNit2LLZhSDYp9mE2YXYq9io2KrYqSDZgdmKIC9zeXN0ZW0vYXBwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+IuKAj9mE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KPZitipINit2LLZhdipINiq2YjZgdixINil2KzYsdin2KEgRkFDVE9SWV9URVNULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiLYpdi52KfYr9ipINiq2LTYutmK2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIxOTg3NDgzOTc3ODM0NjAzODcyIj4i2KrYudix2LYg2KfZhNi12YHYrdipINmB2YogXCI8eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPlwiOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+Itis2KfZgdinINiz2YPYsdmK2KjYqiI8L3N0cmluZz4KQEAgLTk0MCw3ICs5NTIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYXJlYSIgbXNnaWQ9IjM1NDc0MDkwNTA4ODk5NTI0MjMiPiLYp9mE2YXZhti32YLYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2VtaXJhdGUiIG1zZ2lkPSIyODkzODgwOTc4ODM1Njk4ODE4Ij4i2KfZhNil2YXYp9ix2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzc3NTI2NTc3NTQwNTEwNjk4MyI+ItmC2LHYp9ih2Kkg2KXYtNin2LHYp9iqINmI2YrYqCDZiNin2YTYs9is2YQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9Ijg0NjIzNzgyMjY2MDA0Mzk2NTgiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINiz2KzZhCDYrNmF2YrYuSDYudmG2KfZiNmK2YYgVVJMINin2YTYqtmKINiy2KfYsdmH2Kcg2KfZhNmF2KrYtdmB2K3YjCDZiNis2YXZiti5INin2YTYpdi02KfYsdin2Kog2KfZhNmF2LHYrNi52YrYqSDZgdmKINin2YTZhdiq2LXZgditLiDZhdmE2KfYrdi42Kk6INmE2Kcg2YrYrNmI2LIg2YHYsdi2INmH2LDYpyDYp9mE2KXYsNmGINmF2YYg2YLZkNio2YQg2YXYqti12YHYrdin2Kog2KzZh9ipINiu2KfYsdis2YrYqSDYo9mIINiq2LfYqNmK2YLYp9iqINij2K7YsdmJINiq2KrZiNmB2LEg2KjZh9inINil2YXZg9in2YbZitin2Kog2KrYtdmB2K0g2KfZhNmI2YrYqC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9Ijg0NjIzNzgyMjY2MDA0Mzk2NTgiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINiz2KzZhCDYrNmF2YrYuSDYudmG2KfZiNmK2YYgVVJMINin2YTYqtmKINiy2KfYsdmH2Kcg2KfZhNmF2KrYtdmB2K3YjCDZiNis2YXZiti5INin2YTYpdi02KfYsdin2Kog2KfZhNmF2LHYrNi52YrYqSDZgdmKINin2YTZhdiq2LXZgditLiDZhdmE2KfYrdi42Kk6INmE2Kcg2YrYrNmI2LIg2YHYsdi2INmH2LDYpyDYp9mE2KXYsNmGINmF2YYg2YLZkNio2YQg2YXYqti12YHYrdin2Kog2KzZh9ipINiu2KfYsdis2YrYqSDYo9mIINiq2LfYqNmK2YLYp9iqINij2K7YsdmJINiq2KrZiNmB2LEg2KjZh9inINil2YXZg9in2YbZitin2Kog2KrYtdmB2K0g2KfZhNmI2YrYqC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3MTQ3ODUxNjUyNzMzMTQ0OTAiPiLZg9iq2KfYqNipINil2LTYp9ix2KfYqiDZiNmK2Kgg2YjYp9mE2LPYrNmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2ODI1NTI3NDY5MTQ1NzYwOTIyIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudiv2YrZhCDYs9is2YQg2KfZhNmF2KrYtdmB2K0g2KPZiCDYp9mE2KXYtNin2LHYp9iqINin2YTZhdix2KzYudmK2Kkg2KfZhNmF2K7YstmG2Kkg2LnZhNmJINis2YfYp9iy2YMg2KfZhNmE2YjYrdmKLiDZiNmC2K8g2YrYqtmK2K0g2YfYsNinINmE2YTYqti32KjZitmCINmF2K3ZiCDYqNmK2KfZhtin2Kog2KfZhNmF2KrYtdmB2K0g2KPZiCDYqti52K/ZitmE2YfYpy4g2YXZhNin2K3YuNipOiDZhNinINmK2KzZiNiyINmB2LHYtiDZh9iw2Kcg2KfZhNil2LDZhiDZhdmGINmC2ZDYqNmEINmF2KrYtdmB2K3Yp9iqINis2YfYp9iqINiu2KfYsdis2YrYqSDYo9mIINiq2LfYqNmK2YLYp9iqINij2K7YsdmJINio2YfYpyDYpdmF2YPYp9mG2YrYp9iqINiq2LXZgditINin2YTZiNmK2KguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ5NzM4OTUzMTAxNDE4NTUwOSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2LnYr9mK2YQg2LPYrNmEINin2YTZhdiq2LXZgditINij2Ygg2KfZhNil2LTYp9ix2KfYqiDYp9mE2YXYsdis2LnZitipINin2YTZhdiu2LLZhtipINi52YTZiSDZh9in2KrZgdmDLiDZiNmC2K8g2YrYqtmK2K0g2YfYsNinINmE2YTYqti32KjZitmCINmF2K3ZiCDYqNmK2KfZhtin2Kog2KfZhNmF2KrYtdmB2K0g2KPZiCDYqti52K/ZitmE2YfYpy4g2YXZhNin2K3YuNipOiDZhNinINmK2KzZiNiyINmB2LHYtiDZh9iw2Kcg2KfZhNil2LDZhiDZhdmGINmC2ZDYqNmEINmF2KrYtdmB2K3Yp9iqINis2YfYp9iqINiu2KfYsdis2YrYqSDYo9mIINiq2LfYqNmK2YLYp9iqINij2K7YsdmJINio2YfYpyDYpdmF2YPYp9mG2YrYp9iqINiq2LXZgditINin2YTZiNmK2KguIjwvc3RyaW5nPgpAQCAtOTc3LDkgKzk4OSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX2NsZWFyIiBtc2dpZD0iMTMzMDI4MTk5MDk1MTgzMzAzMyI+ItmF2K3ZiCDYt9mE2Kgg2KfZhNio2K3YqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc3VibWl0IiBtc2dpZD0iMjY4ODQ1MDEzMzI5Nzk4MzU0MiI+Itil2LHYs9in2YQg2LfZhNioINin2YTYqNit2KsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3ZvaWNlIiBtc2dpZD0iMjQ1MzIwMzY5NTY3NDk5NDQ0MCI+Itin2YTYqNit2Ksg2KfZhNi12YjYqtmKIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ190aXRsZSIgbXNnaWQ9Ijc0NjA2OTQwNzAzMDk3MzAxNDkiPiLZh9mEINiq2LHZitivINiq2YXZg9mK2YYg2YXZitiy2KkgRXhwbG9yZSBieSBUb3VjaNifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4i2YrYsdmK2K8gPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDYqtmF2YPZitmGINmF2YrYstipIEV4cGxvcmUgYnkgVG91Y2guINi52YbYryDYqti02LrZitmEINmF2YrYstipIEV4cGxvcmUgYnkgVG91Y2jYjCDYs9mK2YPZiNmGINio2KXZhdmD2KfZhtmDINiz2YXYp9i5INij2Ygg2YXYtNin2YfYr9ipINij2YjYtdin2YEg2YTZhdinINiq2K3YqiDYpdi12KjYudmDINij2Ygg2KXYrNix2KfYoSDYpdmK2YXYp9ih2KfYqiDZhNmE2KrZgdin2LnZhCDZhdi5INin2YTYrNmH2KfYsiDYp9mE2YTZiNit2YouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjcwODE5OTY3Mjg1MjM3MzE5NSI+ItmK2LHZitivIDx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4g2KrZhdmD2YrZhiDZhdmK2LLYqSBFeHBsb3JlIGJ5IFRvdWNoLiDYudmG2K8g2KrYtNi62YrZhCDZhdmK2LLYqSBFeHBsb3JlIGJ5IFRvdWNo2Iwg2LPZitmD2YjZhiDYqNil2YXZg9in2YbZgyDYs9mF2KfYuSDYo9mIINmF2LTYp9mH2K/YqSDYo9mI2LXYp9mBINmE2YXYpyDYqtit2Kog2KXYtdio2LnZgyDYo9mIINil2KzYsdin2KEg2KXZitmF2KfYodin2Kog2YTZhNiq2YHYp9i52YQg2YXYuSDYp9mE2YfYp9iq2YEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ190aXRsZSIgbXNnaWQ9Ijc0NjA2OTQwNzAzMDk3MzAxNDkiPiLigI/Zh9mEINiq2LHZitivINiq2YXZg9mK2YYg2YXZitiy2KkgRXhwbG9yZSBieSBUb3VjaNifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4i4oCP2YrYsdmK2K8gPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDYqtmF2YPZitmGINmF2YrYstipIEV4cGxvcmUgYnkgVG91Y2guINi52YbYryDYqti02LrZitmEINmF2YrYstipIEV4cGxvcmUgYnkgVG91Y2jYjCDYs9mK2YPZiNmGINio2KXZhdmD2KfZhtmDINiz2YXYp9i5INij2Ygg2YXYtNin2YfYr9ipINij2YjYtdin2YEg2YTZhdinINiq2K3YqiDYpdi12KjYudmDINij2Ygg2KXYrNix2KfYoSDYpdmK2YXYp9ih2KfYqiDZhNmE2KrZgdin2LnZhCDZhdi5INin2YTYrNmH2KfYsiDYp9mE2YTZiNit2YouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjcwODE5OTY3Mjg1MjM3MzE5NSI+IuKAj9mK2LHZitivIDx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4g2KrZhdmD2YrZhiDZhdmK2LLYqSBFeHBsb3JlIGJ5IFRvdWNoLiDYudmG2K8g2KrYtNi62YrZhCDZhdmK2LLYqSBFeHBsb3JlIGJ5IFRvdWNo2Iwg2LPZitmD2YjZhiDYqNil2YXZg9in2YbZgyDYs9mF2KfYuSDYo9mIINmF2LTYp9mH2K/YqSDYo9mI2LXYp9mBINmE2YXYpyDYqtit2Kog2KXYtdio2LnZgyDYo9mIINil2KzYsdin2KEg2KXZitmF2KfYodin2Kog2YTZhNiq2YHYp9i52YQg2YXYuSDYp9mE2YfYp9iq2YEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4i2YLYqNmEINi02YfYsSDZiNin2K3YryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJlZm9yZU9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iOTA5MTM0NTQ2ODM2NDk5ODI2Ij4i2YLYqNmEINi02YfYsSDZiNin2K3YryI8L3N0cmluZz4KICAgPHBsdXJhbHMgbmFtZT0ibnVtX3NlY29uZHNfYWdvIj4KQEAgLTEwOTUsNyArMTEwNyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLZhNi12YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Itin2LPYqtio2K/Yp9mELi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+Itit2LDZgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4i2YbYs9iuINi52YbZiNin2YYgVVJMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLigI/Zhtiz2K4g2LnZhtmI2KfZhiBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLYqtit2K/ZitivINmG2LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i2KrYrdiv2YrYryDYp9mE2YbYtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLYpdi22KfZgdipINil2YTZiSDYp9mE2YLYp9mF2YjYsyI8L3N0cmluZz4KQEAgLTExMTcsOSArMTEyOSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+Itil2YPZhdin2YQg2KfZhNil2KzYsdin2KEg2KjYp9iz2KrYrtiv2KfZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndoaWNoSG9tZUFwcGxpY2F0aW9uIiBtc2dpZD0iNDYxNjQyMDE3MjcyNzMyNjc4MiI+Itiq2K3Yr9mK2K8g2KrYt9io2YrZgiDYp9mE2LTYp9i02Kkg2KfZhNix2KbZitiz2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c1VzZSIgbXNnaWQ9IjQ1ODMwMTgzNjgwMDA2MTA0MzgiPiLYp9mE2KfYs9iq2K7Yr9in2YUg2KjYtNmD2YQg2KfZgdiq2LHYp9i22Yog2YTZh9iw2Kcg2KfZhNil2KzYsdin2KEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLZitmF2YPZhtmDINmF2K3ZiCDYp9mE2KXYudiv2KfYr9in2Kog2KfZhNin2YHYqtix2KfYttmK2Kkg2YHZiiDYpdi52K/Yp9iv2KfYqiDYp9mE2YbYuNin2YUgJmd0OyDYp9mE2KrYt9io2YrZgtin2KogJmd0OyDZhdinINiq2YUg2KrZhtiy2YrZhNmHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4i4oCP2YrZhdmD2YbZgyDZhdit2Ygg2KfZhNil2LnYr9in2K/Yp9iqINin2YTYp9mB2KrYsdin2LbZitipINmB2Yog2KXYudiv2KfYr9in2Kog2KfZhNmG2LjYp9mFICZndDsg2KfZhNiq2LfYqNmK2YLYp9iqICZndDsg2YXYpyDYqtmFINiq2YbYstmK2YTZhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiLYp9iu2KrZitin2LEg2KXYrNix2KfYoSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZVVzYkFjdGl2aXR5IiBtc2dpZD0iNjg5NDc0ODQxNjA3MzU4MzUwOSI+Itin2K7YqtmK2KfYsSDYo9it2K8g2KfZhNiq2LfYqNmK2YLYp9iqINmE2KzZh9in2LIgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4i4oCP2KfYrtiq2YrYp9ixINij2K3YryDYp9mE2KrYt9io2YrZgtin2Kog2YTYrNmH2KfYsiBVU0IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub0FwcGxpY2F0aW9ucyIgbXNnaWQ9IjI5OTE4MTQyNzM5MzY1MDQ2ODkiPiLZhNmK2LPYqiDZh9mG2KfZgyDYqti32KjZitmC2KfYqiDZitmF2YPZhtmH2Kcg2KrZhtmB2YrYsCDZh9iw2Kcg2KfZhNil2KzYsdin2KEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWVycl90aXRsZSIgbXNnaWQ9IjE5MDU4MDA1NjAzMTcxMzc3NTIiPjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWVycl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjkzMjYyODQ4ODAxMzA5Mjc3NiI+ItmE2YTYo9iz2YHYjCDYqtmI2YLZgSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KQEAgLTExMzgsMTAgKzExNTAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4i2KrZhSDYqti02LrZitmEIDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g2YXZhiDYp9mE2KPYtdmELiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zY2FsZSIgbXNnaWQ9IjMyMDI5NTU2Njc2NzU5NDQ0OTkiPiLYqtiv2LHYrCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zaG93IiBtc2dpZD0iNDAxMzg3ODg3NjQ4NjY1NTg5MiI+Itin2YTYpdi42YfYp9ixINiv2KfYptmF2YvYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+ItmK2YXZg9mG2YMg2KXYudin2K/YqSDYqtmF2YPZitmGINmH2LDYpyDZgdmKINil2LnYr9in2K/Yp9iqINin2YTZhti42KfZhSAmZ3Q7INin2YTYqti32KjZitmC2KfYqiAmZ3Q7INmF2Kcg2KrZhSDYqtmG2LLZitmE2YcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+Itin2YbYqtmH2YMg2KfZhNiq2LfYqNmK2YIgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiAo2KfZhNi52YXZhNmK2KkgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSDYs9mK2KfYs9ipIFN0cmljdE1vZGUg2KfZhNmF2YHYsdmI2LbYqSDYsNin2KrZitmL2KcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic212X3Byb2Nlc3MiIG1zZ2lkPSI1MTIwMzk3MDEyMDQ3NDYyNDQ2Ij4i2KfZhtiq2YfZg9iqINin2YTYudmF2YTZitipIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDYs9mK2KfYs9ipIFN0cmljdE1vZGUg2KfZhNmF2YHYsdmI2LbYqSDYsNin2KrZitmL2KcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4i2KzYp9ix2Y0g2KrYsdmC2YrYqSBBbmRyb2lkLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4i4oCP2YrZhdmD2YbZgyDYpdi52KfYr9ipINiq2YXZg9mK2YYg2YfYsNinINmB2Yog2KXYudiv2KfYr9in2Kog2KfZhNmG2LjYp9mFICZndDsg2KfZhNiq2LfYqNmK2YLYp9iqICZndDsg2YXYpyDYqtmFINiq2YbYstmK2YTZhy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4i4oCP2KfZhtiq2YfZgyDYp9mE2KrYt9io2YrZgiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+ICjYp9mE2LnZhdmE2YrYqSA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTIkczwveGxpZmY6Zz4pINiz2YrYp9iz2KkgU3RyaWN0TW9kZSDYp9mE2YXZgdix2YjYttipINiw2KfYqtmK2YvYpy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLigI/Yp9mG2KrZh9mD2Kog2KfZhNi52YXZhNmK2KkgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+INiz2YrYp9iz2KkgU3RyaWN0TW9kZSDYp9mE2YXZgdix2YjYttipINiw2KfYqtmK2YvYpy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ190aXRsZSIgbXNnaWQ9IjE1ODQxOTIyODU0NDE0MDU3NDYiPiLigI/YrNin2LHZjSDYqtix2YLZitipIEFuZHJvaWQuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19hcGsiIG1zZ2lkPSI3OTA0MDQyNjgyMTExNTI2MTY5Ij4i2KzYp9ix2Y0g2KrYrdiz2YrZhiDYp9mE2KrYt9io2YrZgiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INmF2YYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19zdGFydGluZ19hcHBzIiBtc2dpZD0iNDUxNDY0NTE2MzQ2OTI2NzEzIj4i2KjYr9ihINin2YTYqti32KjZitmC2KfYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19jb21wbGV0ZSIgbXNnaWQ9IjE0MDU5NTQ3NTQxMTI5OTkyMjkiPiLYrNin2LHZjSDYpdi52KfYr9ipINin2YTYqti02LrZitmELiI8L3N0cmluZz4KQEAgLTExNzQsMjMgKzExODYsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3BpY2tlcl90aXRsZSIgbXNnaWQ9IjM1MTUxNDM5MzkxNzUxMTkwOTQiPiLZhti62YXYp9iqINin2YTYsdmG2YrZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4i2YbYutmF2Kkg2LHZhtmK2YYg2LrZitixINmF2LnYsdmI2YHYqSI8L3N0cmluZz4KICAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGUiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NjU0MTIzOTg3NDE4MTY4NjkzIj4i2LTYqNmD2KkgV2ktRmkg2YXYqtin2K3YqSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+Iti02KjZg9in2KogV2ktRmkg2YXYqtin2K3YqSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY2NTQxMjM5ODc0MTgxNjg2OTMiPiLigI/YtNio2YPYqSBXaS1GaSDZhdiq2KfYrdipIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MTkyNDI0NDg5MTY4Mzk3Mzg2Ij4i4oCP2LTYqNmD2KfYqiBXaS1GaSDZhdiq2KfYrdipIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9kZXRhaWxlZCI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE2MzQxMDE0NTAzNDMyNzczNDUiPiLZh9mG2KfZgyDYtNio2YPYqSBXaS1GaSDZhdmB2KrZiNit2Kkg2YXYqtin2K3YqSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzkxNTg5NTMyMzY0NDI5Mjc2OCI+ItmH2YbYp9mDINi02KjZg9in2KogV2ktRmkg2YXZgdiq2YjYrdipINmF2KrYp9it2KkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4i4oCP2YfZhtin2YMg2LTYqNmD2KkgV2ktRmkg2YXZgdiq2YjYrdipINmF2KrYp9it2KkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc5MTU4OTUzMjM2NDQyOTI3NjgiPiLigI/Zh9mG2KfZgyDYtNio2YPYp9iqIFdpLUZpINmF2YHYqtmI2K3YqSDZhdiq2KfYrdipIjwvaXRlbT4KICAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9IjQwMjk0ODk3MTY2MDUyNTUzODYiPiLYqtiz2KzZitmEINin2YTYr9iu2YjZhCDYpdmE2Ykg2LTYqNmD2KkgV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iNDAyOTQ4OTcxNjYwNTI1NTM4NiI+IuKAj9iq2LPYrNmK2YQg2KfZhNiv2K7ZiNmEINil2YTZiSDYtNio2YPYqSBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4i2KrYs9is2YrZhCDYp9mE2K/YrtmI2YQg2KXZhNmJINin2YTYtNio2YPYqSI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+Itiq2LnYsNixINin2YTYp9iq2LXYp9mEINio2YAgV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3dhdGNoZG9nX25ldHdvcmtfZGlzYWJsZWQiIG1zZ2lkPSI3OTA0MjE0MjMxNjUxNTQ2MzQ3Ij4i4oCP2KrYudiw2LEg2KfZhNin2KrYtdin2YQg2KjZgCBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZF9kZXRhaWxlZCIgbXNnaWQ9IjU1NDg3ODA3NzY0MTgzMzI2NzUiPiIg2YTYr9mK2YfYpyDYp9iq2LXYp9mEINil2YbYqtix2YbYqiDYsdiv2YrYoS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+Itin2KrYtdin2YQgV2ktRmkg2YXYqNin2LTYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3R1cm5vbl9tZXNzYWdlIiBtc2dpZD0iMjkwOTI1MDk0MjI5OTYyNzI0NCI+Itin2KjYr9ijIFdpLUZpIERpcmVjdC4g2YrYpNiv2Yog2YfYsNinINil2YTZiSDYpdmK2YLYp9mBINi52YXZitmEL9mG2YLYt9ipINin2KrYtdin2YQgV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4i2KrYudiw2LEg2KjYr9ihIFdpLUZpIERpcmVjdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiLYqtmFINiq2LTYutmK2YQg2KfYqti12KfZhCBXaS1GaSDYp9mE2YXYqNin2LTYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijk3NjExNzgyNjU5MzI0NTE3Ij4i4oCP2KfYqti12KfZhCBXaS1GaSDZhdio2KfYtNixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4i4oCP2KfYqNiv2KMgV2ktRmkgRGlyZWN0LiDZitik2K/ZiiDZh9iw2Kcg2KXZhNmJINil2YrZgtin2YEg2LnZhdmK2YQv2YbZgti32Kkg2KfYqti12KfZhCBXaS1GaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiLigI/Yqti52LDYsSDYqNiv2KEgV2ktRmkgRGlyZWN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+IuKAj9iq2YUg2KrYtNi62YrZhCDYp9iq2LXYp9mEIFdpLUZpINin2YTZhdio2KfYtNixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiLYp9mE2YXYsyDZhNmE2K3YtdmI2YQg2LnZhNmJINin2YTYpdi52K/Yp9iv2KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiLZgtio2YjZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlY2xpbmUiIG1zZ2lkPSIyMTEyMjI1NDUxNzA2MTM3ODk0Ij4i2LHZgdi2Ijwvc3RyaW5nPgpAQCAtMTE5OCwyOCArMTIxMCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl90b19jb25uZWN0X3RpdGxlIiBtc2dpZD0iNDk1ODgwMzk0ODY1ODUzMzYzNyI+Itiv2LnZiNipINmE2YTYp9iq2LXYp9mEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJvbV9tZXNzYWdlIiBtc2dpZD0iNTcwMzg5MTc0NzMxOTUxNzY5Ij4i2YXZhjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4i2KXZhNmJOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VudGVyX3Bpbl9tZXNzYWdlIiBtc2dpZD0iNTkyMDkyOTU1MDM2NzgyODk3MCI+Itin2YPYqtioINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KfZhNmF2LfZhNmI2Kg6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfc2hvd19waW5fbWVzc2FnZSIgbXNnaWQ9Ijg1MzA1NjMzMjM4ODA5MjEwOTQiPiLYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4i2LPZitiq2YUg2YLYt9i5INin2KrYtdin2YQg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDZhdik2YLYqtmL2Kcg2KjYtNio2YPYqSBXaS1GaSDZgdmKINin2YTZiNmC2Kog2KfZhNiw2Yog2YrZg9mI2YYg2YHZitmHINmF2KrYtdmE2KfZiyDYqNmAIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczNjM5MDcyMTM3ODc0NjkxNTEiPiLYs9mK2KrZhSDZgti32Lkg2KfYqti12KfZhCDYp9mE2YfYp9iq2YEg2YXYpNmC2KrZi9inINio2LTYqNmD2KkgV2ktRmkg2YHZiiDYp9mE2YjZgtiqINin2YTYsNmKINmK2YPZiNmGINmB2YrZhyDZhdiq2LXZhNin2Ysg2KjZgCA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4i4oCP2KfZg9iq2Kgg2LHZhdiyIFBJTiDYp9mE2YXYt9mE2YjYqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9zaG93X3Bpbl9tZXNzYWdlIiBtc2dpZD0iODUzMDU2MzMyMzg4MDkyMTA5NCI+IuKAj9ix2YXYsiBQSU46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgwMTI5ODEyNTc3NDIyMzI0NzUiPiLigI/Ys9mK2KrZhSDZgti32Lkg2KfYqti12KfZhCDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINmF2KTZgtiq2YvYpyDYqNi02KjZg9ipIFdpLUZpINmB2Yog2KfZhNmI2YLYqiDYp9mE2LDZiiDZitmD2YjZhiDZgdmK2Ycg2YXYqti12YTYp9mLINio2YAgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+IuKAj9iz2YrYqtmFINmC2LfYuSDYp9iq2LXYp9mEINin2YTZh9in2KrZgSDZhdik2YLYqtmL2Kcg2KjYtNio2YPYqSBXaS1GaSDZgdmKINin2YTZiNmC2Kog2KfZhNiw2Yog2YrZg9mI2YYg2YHZitmHINmF2KrYtdmE2KfZiyDYqNmAIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfY2hhcmFjdGVyIiBtc2dpZD0iMzM2NTU1MDEyMDYxNzcwMTc0NSI+Itil2K/Ysdin2Kwg2K3YsdmBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfdGl0bGUiIG1zZ2lkPSI3Mjk2NjEyNzgxMTI4OTE3NzE5Ij4i2KXYsdiz2KfZhCDYsdiz2KfYptmEINmC2LXZitix2KkgU01TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDZitix2LPZhCDYudiv2K/Zi9inINmD2KjZitix2YvYpyDZhdmGINin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUy4g2YfZhCDYqtix2YrYryDYp9mE2LPZhdin2K0g2YTZh9iw2Kcg2KfZhNiq2LfYqNmK2YIg2KjYp9mE2KfYs9iq2YXYsdin2LEg2YHZiiDYpdix2LPYp9mEINin2YTYsdiz2KfYptmE2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiLigI/Ypdix2LPYp9mEINix2LPYp9im2YQg2YLYtdmK2LHYqSBTTVMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9tZXNzYWdlIiBtc2dpZD0iMzg2Nzg5OTE2OTY1MTQ5NjQzMyI+IuKAjyZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7INmK2LHYs9mEINi52K/Yr9mL2Kcg2YPYqNmK2LHZi9inINmF2YYg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TLiDZh9mEINiq2LHZitivINin2YTYs9mF2KfYrSDZhNmH2LDYpyDYp9mE2KrYt9io2YrZgiDYqNin2YTYp9iz2KrZhdix2KfYsSDZgdmKINil2LHYs9in2YQg2KfZhNix2LPYp9im2YTYnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3llcyIgbXNnaWQ9IjM2NjM3MjU5OTM4NTU4MTY4MDciPiLYp9mE2LPZhdin2K0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9ubyIgbXNnaWQ9IjYyNTQzODU2MTM5NTUzNDk4MiI+Itix2YHYtiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiLZh9mG2KfZgyDYsdi62KjYqSDZhdmGICZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7INmB2Yog2KXYsdiz2KfZhCDYsdiz2KfZhNipINil2YTZiSAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IuKAj9mH2YbYp9mDINix2LrYqNipINmF2YYgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsg2YHZiiDYpdix2LPYp9mEINix2LPYp9mE2Kkg2KXZhNmJICZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJERVNUX0FERFJFU1MiPiUyJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0Oy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iMzQ5MjAyNTcxOTg2ODA3ODQ1NyI+ItmH2LDYpyAiPGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4i2YLYryDZitik2K/ZiiDYpdmE2Ykg2YHYsdi2INix2LPZiNmFIjwvZm9udD4iINi52YTZiSDYrdiz2KfYqNmDINi52YTZiSDYp9mE2KzZiNin2YQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNTUyMzgyNjM0OTEwNTEyMzY4NyI+PGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4i2LPZitik2K/ZiiDZh9iw2Kcg2KXZhNmJINmB2LHYtiDYsdiz2YjZhSDYudmE2Ykg2K3Ys9in2KjZgyDYudmE2Ykg2KfZhNis2YjYp9mELiI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2FsbG93IiBtc2dpZD0iNDQ1ODg3ODYzNzExMTAyMzQxMyI+Itil2LHYs9in2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2RlbnkiIG1zZ2lkPSIyOTI3Mzg5ODQwMjA5MTcwNzA2Ij4i2KXZhNi62KfYoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX2Nob2ljZSIgbXNnaWQ9IjUyODk1Mzg1OTIyNzIyMTgxMzYiPiLYqtiw2YPYsSDYp9iu2KrZitin2LHZiiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4i2YrZhdmD2YbZgyDYqti62YrZitixINiw2YTZgyDZhNin2K3ZgtmL2Kcg2YXZhiDYpdi52K/Yp9iv2KfYqsKgJmd0O8Kg2KrYt9io2YrZgtin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl91bmRvX2luc3RydWN0aW9uIiBtc2dpZD0iNDk2MDk0NDEzMzA1MjI4NzQ4NCI+IuKAj9mK2YXZg9mG2YMg2KrYutmK2YrYsSDYsNmE2YMg2YTYp9it2YLZi9inINmF2YYg2KXYudiv2KfYr9in2KrCoCZndDvCoNiq2LfYqNmK2YLYp9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbHdheXNfYWxsb3ciIG1zZ2lkPSIzMjQxMTgxMTU0ODY5NDkzMzY4Ij4i2KfZhNiz2YXYp9itINiv2YjZhdmL2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4i2LnYr9mFINin2YTYs9mF2KfYrSDZhdi32YTZgtmL2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiLYqtmF2Kog2KXYstin2YTYqSDYqNi32KfZgtipIFNJTSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4i2YTZhiDYqtmD2YjZhiDYtNio2YPYqSDYp9mE2KzZiNin2YQg2YXYqtin2K3YqSDYrdiq2Ykg2KrYqtmFINil2LnYp9iv2Kkg2KfZhNiq2LTYutmK2YQg2YjYpdiv2K7Yp9mEINio2LfYp9mC2KkgU0lNINi12KfZhNit2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4i4oCP2KrZhdiqINil2LLYp9mE2Kkg2KjYt9in2YLYqSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF9tZXNzYWdlIiBtc2dpZD0iMjMzMzE2NDU1OTk3MDk1ODY0NSI+IuKAj9mE2YYg2KrZg9mI2YYg2LTYqNmD2Kkg2KfZhNis2YjYp9mEINmF2KrYp9it2Kkg2K3YqtmJINiq2KrZhSDYpdi52KfYr9ipINin2YTYqti02LrZitmEINmI2KXYr9iu2KfZhCDYqNi32KfZgtipIFNJTSDYtdin2YTYrdipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9kb25lX2J1dHRvbiIgbXNnaWQ9IjgyNzk0OTk4OTM2OTk2Mzc3NSI+Itiq2YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4i2KrZhdiqINil2LbYp9mB2Kkg2KjYt9in2YLYqSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4i4oCP2KrZhdiqINil2LbYp9mB2Kkg2KjYt9in2YLYqSBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiLYo9i52K8g2KrYtNi62YrZhCDYrNmH2KfYstmDINmE2YTYr9iu2YjZhCDYpdmE2Ykg2LTYqNmD2Kkg2KfZhNis2YjYp9mELiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiLYpdi52KfYr9ipINin2YTYqti02LrZitmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODM0OTM2MjYyMzA2ODgxOTI5NSI+Itiq2LnZitmK2YYg2KfZhNmI2YLYqiI8L3N0cmluZz4KQEAgLTEyMzAsMzggKzEyNDIsMzggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1zX2Rlc2NyaXB0aW9uX2FwcCIgbXNnaWQ9IjUxMzk4MzYxNDMyOTMyOTk0MTciPiLZitmC2K/ZhdmHIDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fcGVybWlzc2lvbnMiIG1zZ2lkPSI3MjgzMzU3NzI4MjE5MzM4MTEyIj4i2YTYpyDYo9iw2YjZhtin2Kog2YXYt9mE2YjYqNipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiLZgtivINmK2YPZhNmB2YMg2YfYsNinINmF2KfZhNin2YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4i2KrYrtiy2YrZhiBVU0Ig2YPYqNmK2LEg2KfZhNiz2LnYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+IlVTQiDZhdiq2LXZhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+ItmE2YLYryDYp9iq2LXZhNiqINio2KzZh9in2LIg2KfZhNmD2YXYqNmK2YjYqtixINmF2YYg2K7ZhNin2YQgVVNCLiDYp9mE2YXYsyDYp9mE2LLYsSDYo9iv2YbYp9mHINil2LDYpyDZg9mG2Kog2KrYsdmK2K8g2YbYs9iuINin2YTZhdmE2YHYp9iqINio2YrZhiDYrNmH2KfYsiDYp9mE2YPZhdio2YrZiNiq2LEg2YjZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDZgdmKIEFuZHJvaWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNTM1MTAwMDQ0NjAzNzgxMSI+ItmE2YLYryDYp9iq2LXZhNiqINio2KzZh9in2LIg2KfZhNmD2YXYqNmK2YjYqtixINmF2YYg2K7ZhNin2YQgVVNCLiDYp9mE2YXYsyDYp9mE2LLYsSDYo9iv2YbYp9mHINil2LDYpyDZg9mG2Kog2KrYsdmK2K8g2YbYs9iuINin2YTZhdmE2YHYp9iqINio2YrZhiDYrNmH2KfYsiDYp9mE2YPZhdio2YrZiNiq2LEg2YjYqNi32KfZgtipIFNEINmE2YAgQW5kcm9pZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9idXR0b25fbW91bnQiIG1zZ2lkPSIxMDUyMjU5OTMwMzY5NTA4MjM1Ij4i2KrYtNi62YrZhCDYs9i52Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiLYrdiv2KvYqiDZhdi02YPZhNipINij2KvZhtin2KEg2KfYs9iq2K7Yr9in2YUg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2YTYqtiu2LLZitmGINmD2KjZitixINin2YTYs9i52Kkg2LnYqNixIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg3NjAxODUxMjcxNjk3MDMxMyI+Itit2K/Yq9iqINmF2LTZg9mE2Kkg2KPYq9mG2KfYoSDYp9iz2KrYrtiv2KfZhSDYqNi32KfZgtipIFNEINmE2KrYrtiy2YrZhiDZg9io2YrYsSDYp9mE2LPYudipINi52KjYsSBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODE3NTg5MjU1NDc1NzIxNjUyNSI+IlVTQiDZhdiq2LXZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2FjdGl2aXR5X3RpdGxlIiBtc2dpZD0iNDQ2NTA1NTE1NzIwOTY0ODY0MSI+IuKAj9iq2K7YstmK2YYgVVNCINmD2KjZitixINin2YTYs9i52KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiLigI9VU0Ig2YXYqti12YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMzMDg1MzgwOTQzMTY0Nzc4MzkiPiLigI/ZhNmC2K8g2KfYqti12YTYqiDYqNis2YfYp9iyINin2YTZg9mF2KjZitmI2KrYsSDZhdmGINiu2YTYp9mEIFVTQi4g2KfZhNmF2LMg2KfZhNiy2LEg2KPYr9mG2KfZhyDYpdiw2Kcg2YPZhtiqINiq2LHZitivINmG2LPYriDYp9mE2YXZhNmB2KfYqiDYqNmK2YYg2KzZh9in2LIg2KfZhNmD2YXYqNmK2YjYqtixINmI2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2YHZiiBBbmRyb2lkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiLigI/ZhNmC2K8g2KfYqti12YTYqiDYqNis2YfYp9iyINin2YTZg9mF2KjZitmI2KrYsSDZhdmGINiu2YTYp9mEIFVTQi4g2KfZhNmF2LMg2KfZhNiy2LEg2KPYr9mG2KfZhyDYpdiw2Kcg2YPZhtiqINiq2LHZitivINmG2LPYriDYp9mE2YXZhNmB2KfYqiDYqNmK2YYg2KzZh9in2LIg2KfZhNmD2YXYqNmK2YjYqtixINmI2KjYt9in2YLYqSBTRCDZhNmAIEFuZHJvaWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYnV0dG9uX21vdW50IiBtc2dpZD0iMTA1MjI1OTkzMDM2OTUwODIzNSI+IuKAj9iq2LTYutmK2YQg2LPYudipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMDE3MDQ1MjE3MzY1NTQwNjU4Ij4i4oCP2K3Yr9ir2Kog2YXYtNmD2YTYqSDYo9ir2YbYp9ihINin2LPYqtiu2K/Yp9mFINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCINmE2KrYrtiy2YrZhiDZg9io2YrYsSDYp9mE2LPYudipINi52KjYsSBVU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4NzYwMTg1MTI3MTY5NzAzMTMiPiLigI/Yrdiv2KvYqiDZhdi02YPZhNipINij2KvZhtin2KEg2KfYs9iq2K7Yr9in2YUg2KjYt9in2YLYqSBTRCDZhNiq2K7YstmK2YYg2YPYqNmK2LEg2KfZhNiz2LnYqSDYudio2LEgVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiLigI9VU0Ig2YXYqti12YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkzOTgyMjc4MzgyODE4Mzc2MyI+Itin2YTZhdizINmE2YbYs9iuINin2YTZhdmE2YHYp9iqINil2YTZiS/ZhdmGINis2YfYp9iyINin2YTZg9mF2KjZitmI2KrYsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzMzYwNTgzOTY2NjM1MTYwMTciPiLYpdmK2YLYp9mBINiq2LTYutmK2YQg2LPYudipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2NTY4NTIwOTg1NTU2MjM4MjIiPiLYp9mE2YXYsyDZhNil2YrZgtin2YEg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF90aXRsZSIgbXNnaWQ9IjY2MDEyOTg1MTcwODc3NTg1MyI+Itiz2LnYqSBVU0Ig2KfZhNiq2K7YstmK2YbZitipINin2YTZhdiz2KrYrtiv2YXYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MjY0MDI1MjgwNzc3MjE5NTIxIj4i2YLYqNmEINil2YrZgtin2YEg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0LYjCDYp9mE2Log2KrYrdmF2YrZhCAoXCLYo9iu2LHYrFwiKSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDZhNmAIEFuZHJvaWQg2YXZhiDYp9mE2YPZhdio2YrZiNiq2LEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+ItmC2KjZhCDYpdmK2YLYp9mBINmI2K3Yr9ipINiq2K7YstmK2YYgVVNC2Iwg2KfZhNi6INiq2K3ZhdmK2YQgKFwi2KPYrtix2KxcIikg2KjYt9in2YLYqSBTRCDZhNmAIEFuZHJvaWQg2YXZhiDYp9mE2YPZhdio2YrZiNiq2LEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9idXR0b25fbW91bnQiIG1zZ2lkPSI3MDYwMjE4MDM0OTAwNjk2MDI5Ij4i2KXZitmC2KfZgSDYqti02LrZitmEINiz2LnYqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiLYrdiv2KvYqiDZhdi02YPZhNipINij2KvZhtin2KEg2KXZitmC2KfZgSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4g2KrYrdmC2YIg2YXZhiDYpdmE2LrYp9ihINiq2K3ZhdmK2YQg2YXYttmK2YEgVVNC2Iwg2KvZhSDYo9i52K8g2KfZhNmF2K3Yp9mI2YTYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiLYqti02LrZitmEINiz2LnYqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+Itil2LDYpyDYqtmFINiq2LTYutmK2YQg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0LYjCDZgdiz2KrYqtmI2YLZgSDYqNi52LYg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYqtmKINiq2LPYqtiu2K/ZhdmH2Kcg2YjYsdio2YXYpyDYqti12KjYrSDYutmK2LEg2YXYqtin2K3YqSDYpdmE2Ykg2KPZhiDZitiq2YUg2KXZitmC2KfZgSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfZXJyb3JfdGl0bGUiIG1zZ2lkPSI3MzIzNjU4NDY5NjI2NTE0MjA3Ij4i2YTZhSDYqtiq2YUg2LnZhdmE2YrYqSBVU0Ig2KjZhtis2KfYrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+IuKAj9il2YrZgtin2YEg2KrYtNi62YrZhCDYs9i52Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+IuKAj9in2YTZhdizINmE2KXZitmC2KfZgSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX3RpdGxlIiBtc2dpZD0iNjYwMTI5ODUxNzA4Nzc1ODUzIj4i4oCP2LPYudipIFVTQiDYp9mE2KrYrtiy2YrZhtmK2Kkg2KfZhNmF2LPYqtiu2K/ZhdipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiLigI/Zgtio2YQg2KXZitmC2KfZgSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQtiMINin2YTYuiDYqtit2YXZitmEIChcItij2K7YsdisXCIpINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCINmE2YAgQW5kcm9pZCDZhdmGINin2YTZg9mF2KjZitmI2KrYsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4i4oCP2YLYqNmEINil2YrZgtin2YEg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0LYjCDYp9mE2Log2KrYrdmF2YrZhCAoXCLYo9iu2LHYrFwiKSDYqNi32KfZgtipIFNEINmE2YAgQW5kcm9pZCDZhdmGINin2YTZg9mF2KjZitmI2KrYsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiLigI/YpdmK2YLYp9mBINiq2LTYutmK2YQg2LPYudipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+IuKAj9it2K/Yq9iqINmF2LTZg9mE2Kkg2KPYq9mG2KfYoSDYpdmK2YLYp9mBINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiDYqtit2YLZgiDZhdmGINil2YTYutin2KEg2KrYrdmF2YrZhCDZhdi22YrZgSBVU0LYjCDYq9mFINij2LnYryDYp9mE2YXYrdin2YjZhNipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+IuKAj9iq2LTYutmK2YQg2LPYudipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4i4oCP2KXYsNinINiq2YUg2KrYtNi62YrZhCDZiNit2K/YqSDYqtiu2LLZitmGIFVTQtiMINmB2LPYqtiq2YjZgtmBINio2LnYtiDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNiq2Yog2KrYs9iq2K7Yr9mF2YfYpyDZiNix2KjZhdinINiq2LXYqNitINi62YrYsSDZhdiq2KfYrdipINil2YTZiSDYo9mGINmK2KrZhSDYpdmK2YLYp9mBINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiLigI/ZhNmFINiq2KrZhSDYudmF2YTZitipIFVTQiDYqNmG2KzYp9itIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGxnX29rIiBtc2dpZD0iNzM3Njk1MzE2NzAzOTg2NTcwMSI+ItmF2YjYp9mB2YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLYp9mE2KrZiNi12YrZhCDZg9is2YfYp9iyINmI2LPYp9im2LciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiLYp9mE2KrZiNi12YrZhCDZg9mD2KfZhdmK2LHYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9jZF9pbnN0YWxsZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjc3NDcxMjgyNzg5MjA5MDc1NCI+Itin2YTYqtmI2LXZitmEINmD2KPYr9in2Kkg2KrYq9io2YrYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3Nvcnlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNzg0ODIzNjk3NDA4NzY1MzY2NiI+Itin2YTYp9iq2LXYp9mEINio2KzZh9in2LIgVVNCINmF2YTYrdmCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+Itin2YTZhdizINmE2YTYp9i32YTYp9i5INi52YTZiSDYrtmK2KfYsdin2KogVVNCINin2YTYo9iu2LHZiS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iOTAyMDA5MjE5NjA2MTAwNzI2MiI+Itiq2YfZitim2Kkg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0LYnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2NDg0MTU5MjE1MjY1MjYwNjkiPiLZh9mEINiq2LHZitivINiq2YbYs9mK2YIg2KjYt9in2YLYqSBTRNifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkzNDAxNjg1MzQyNTc2MTA3OCI+Itiz2YrYqtmFINmF2LPYrSDYrNmF2YrYuSDYp9mE2YXZhNmB2KfYqiDYp9mE2YXYrtiy2YbYqSDYudmE2Ykg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuINmE2Kcg2YrZhdmD2YYg2LnZg9izINmH2LDYpyDYp9mE2KXYrNix2KfYoSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiLigI/Yp9mE2KfYqti12KfZhCDYqNis2YfYp9iyIFVTQiDZhdmE2K3ZgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjIyOTA4NTkzOTk5ODM3MjAyNzEiPiLigI/Yp9mE2YXYsyDZhNmE2KfYt9mE2KfYuSDYudmE2Ykg2K7Zitin2LHYp9iqIFVTQiDYp9mE2KPYrtix2YkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiLigI/YqtmH2YrYptipINmI2K3Yr9ipINiq2K7YstmK2YYgVVNC2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjQ4NDE1OTIxNTI2NTI2MDY5Ij4i4oCP2YfZhCDYqtix2YrYryDYqtmG2LPZitmCINio2LfYp9mC2KkgU0TYnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiLigI/Ys9mK2KrZhSDZhdiz2K0g2KzZhdmK2Lkg2KfZhNmF2YTZgdin2Kog2KfZhNmF2K7YstmG2Kkg2LnZhNmJINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiDZhNinINmK2YXZg9mGINi52YPYsyDZh9iw2Kcg2KfZhNil2KzYsdin2KEhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDEzMTg5NTAyNzU0MzgzMCI+Itiz2KrZgdmC2K8g2KzZhdmK2Lkg2KfZhNio2YrYp9mG2KfYqiDYudmE2Ykg2KjYt9in2YLYqtmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9idXR0b25fZm9ybWF0IiBtc2dpZD0iNDEzMTA2NDU2MDEyNzQ3ODY5NSI+Itiq2YbYs9mK2YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3MjkwNDQ3Nzg5NDkxODk5MTgiPiLYqtmFINiq2YjYtdmK2YQg2KrYtdit2YrYrSDYo9iu2LfYp9ihIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxMDE2NjU0NjI3NjI2NDc2MTQyIj4i2KfZhNmF2LMg2YTYqti52LfZitmEINiq2LXYrdmK2K0g2KPYrti32KfYoSBVU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NzI5MDQ0Nzc4OTQ5MTg5OTE4Ij4i4oCP2KrZhSDYqtmI2LXZitmEINiq2LXYrdmK2K0g2KPYrti32KfYoSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+IuKAj9in2YTZhdizINmE2KrYudi32YrZhCDYqti12K3ZititINij2K7Yt9in2KEgVVNCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9pbnB1dF9tZXRob2QiIG1zZ2lkPSI0NjUzMzg3MzM2NzkxMjIyOTc4Ij4i2KfYrtiq2YrYp9ixINij2LPZhNmI2Kgg2KfZhNil2K/Yrtin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjkwOTE2NTIxNTc3MjI0OTUxMTYiPiLYpdi52K/Yp9ivINij2LPZhNmI2Kgg2KfZhNil2K/Yrtin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI2MjAzMTEyNDc4MDk1MTE3NjI1Ij4i2YTZiNit2Kkg2YXZgdin2KrZititINmB2LnZhNmK2KkiPC9zdHJpbmc+CkBAIC0xMjcxLDI5ICsxMjgzLDI5IEBACiAgICAgPHN0cmluZyBuYW1lPSJmYXN0X3Njcm9sbF9hbHBoYWJldCIgbXNnaWQ9IjU0MzMyNzU0ODU0OTkwMzkxOTkiPiIg2KMg2Kgg2Kog2Ksg2Kwg2K0g2K4g2K8g2LAg2LEg2LIg2LMg2LQg2LUg2LYg2Lcg2Lgg2Lkg2Log2YEg2YIg2YMg2YQg2YUg2YYg2Ycg2Ygg2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYXN0X3Njcm9sbF9udW1lcmljX2FscGhhYmV0IiBtc2dpZD0iNDAzMDE3MDUyNDU5NTEyMzYxMCI+IiAwMTIzNDU2Nzg5INijINioINiqINirINisINitINiuINivINiwINixINiyINizINi0INi1INi2INi3INi4INi5INi6INmBINmCINmDINmEINmFINmGINmHINmIINmKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuZGlkYXRlc19zdHlsZSIgbXNnaWQ9IjQzMzM5MTMwODk2MzcwNjIyNTciPjx1PiLYp9mE2LnZhtin2LXYsSDYp9mE2YXYsdi02K3YqSI8L3U+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDk4MTYwMDUzNTE0Njg1NjAiPiLYqtit2LbZitixINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NTc2MDM0MTg5NzA5OTQwNTAiPiLYqtit2LbZitixINio2LfYp9mC2KkgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDk4MTYwMDUzNTE0Njg1NjAiPiLigI/Yqtit2LbZitixINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NTc2MDM0MTg5NzA5OTQwNTAiPiLigI/Yqtit2LbZitixINio2LfYp9mC2KkgU0QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4i2KfZhNiq2K3ZgtmCINmF2YYg2KfZhNij2K7Yt9in2KEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDZgdin2LHYutipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzgwNDc3ODM4MjQxMjEyOTk3Ij4i2KjYt9in2YLYqSBTRCDZgdin2LHYutipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzg0MDEyMTA2NzQyNzI2OTUwMCI+ItmI2K3Yr9ipINiq2K7YstmK2YYgVVNCINmB2KfYsdi62Kkg2KPZiCDYqti02KrZhdmEINi52YTZiSDZhti42KfZhSDZhdmE2YHYp9iqINi62YrYsSDZhdi52KrZhdivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+Itio2LfYp9mC2KkgU0Qg2YHYp9ix2LrYqSDYo9mIINiq2LTYqtmF2YQg2LnZhNmJINmG2LjYp9mFINmF2YTZgdin2Kog2LrZitixINmF2LnYqtmF2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2KrYp9mE2YHYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDEwNzIzOTA2MDE5MTAwMTg5Ij4i2KjYt9in2YLYqSBTRCDYqtin2YTZgdipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE3OTU5MTc1NzgzOTUzMzMyODAiPiLYqti52LfZhNiqINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiDYrNix2ZHYqCDYpdi52KfYr9ipINiq2YbYs9mK2YLZh9inLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE3NTM4OTg1Njc1MjU1NjgyNTMiPiLYqti52LfZhNiqINio2LfYp9mC2KkgU0QuINis2LHZkdioINil2LnYp9iv2Kkg2KrZhtiz2YrZgtmH2KcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE2NjE2ODMwMzEzMzA5NTEwNzMiPiLYqtmF2Kog2KXYstin2YTYqSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDYudmE2Ykg2LrZitixINin2YTZhdiq2YjZgti5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+Itiq2YXYqiDYpdiy2KfZhNipINio2LfYp9mC2KkgU0Qg2LnZhNmJINmG2K3ZiCDYutmK2LEg2YXYqtmI2YLYuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiLYpdmE2LrYp9ihINiq2LHZg9mK2Kgg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2YLYqNmEINin2YTYpdiy2KfZhNipINmE2KrYrNmG2Kgg2YHZgtivINin2YTYqNmK2KfZhtin2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjYwMTgzMjkzNzQ3NDQ4MjQxIj4i2KPZhNi6INiq2K3ZhdmK2YQg2KjYt9in2YLYqSBTRCDZgtio2YQg2KfZhNil2LLYp9mE2Kkg2YTYqtis2YbYqCDZgdmC2K/Yp9mGINin2YTYqNmK2KfZhtin2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+ItmK2YXZg9mG2YMg2KXYstin2YTYqSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDYqNi02YPZhCDYotmF2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY3Mjk4MDExMzA3OTA2MTYyMDAiPiLZitmF2YPZhiDYpdiy2KfZhNipINio2LfYp9mC2KkgU0Qg2KjYo9mF2KfZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE0MjE5NTM2MTYwNjQ5MzUzMCI+ItmK2YXZg9mG2YMg2KXYstin2YTYqSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDYqNi02YPZhCDYotmF2YYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2ODg0MTI3ODEzODM3NzYwNCI+ItmK2YXZg9mG2YMg2KXYstin2YTYqSDYqNi32KfZgtipIFNEINio2KPZhdin2YYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiLYqtmF2Kog2KXYstin2YTYqSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiLYqtmF2Kog2KXYstin2YTYqSDYqNi32KfZgtipIFNEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjkyMTEyNjE2MjU4MDU3NDE0MyI+Itiq2YXYqiDYpdiy2KfZhNipINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiDYo9iv2LHYrCDZiNiz2KfYpti3INis2K/Zitiv2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzODcwMTIwNjUyOTgzNjU5NjQxIj4i2KrZhdiqINil2LLYp9mE2Kkg2KjYt9in2YLYqSBTRC4g2KPYr9iu2YQg2KjYt9in2YLYqSDYrNiv2YrYr9ipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3Nzg4MDQwNzQ1Njg2MjI5MzA3Ij4i4oCP2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2YHYp9ix2LrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IuKAj9io2LfYp9mC2KkgU0Qg2YHYp9ix2LrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc4NDAxMjEwNjc0MjcyNjk1MDAiPiLigI/ZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDZgdin2LHYutipINij2Ygg2KrYtNiq2YXZhCDYudmE2Ykg2YbYuNin2YUg2YXZhNmB2KfYqiDYutmK2LEg2YXYudiq2YXYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2NDEwNjU2NDE3ODY5MjM2MDQiPiLigI/YqNi32KfZgtipIFNEINmB2KfYsdi62Kkg2KPZiCDYqti02KrZhdmEINi52YTZiSDZhti42KfZhSDZhdmE2YHYp9iqINi62YrYsSDZhdi52KrZhdivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjA5MDA0Njc2OTUzMjcxMzU2MyI+IuKAj9mI2K3Yr9ipINiq2K7YstmK2YYgVVNCINiq2KfZhNmB2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+IuKAj9io2LfYp9mC2KkgU0Qg2KrYp9mE2YHYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNzk1OTE3NTc4Mzk1MzMzMjgwIj4i4oCP2KrYudi32YTYqiDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4g2KzYsdmR2Kgg2KXYudin2K/YqSDYqtmG2LPZitmC2YfYpy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNzUzODk4NTY3NTI1NTY4MjUzIj4i4oCP2KrYudi32YTYqiDYqNi32KfZgtipIFNELiDYrNix2ZHYqCDYpdi52KfYr9ipINiq2YbYs9mK2YLZh9inLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNjYxNjgzMDMxMzMwOTUxMDczIj4i4oCP2KrZhdiqINil2LLYp9mE2Kkg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2LnZhNmJINi62YrYsSDYp9mE2YXYqtmI2YLYuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NzIxNTI4ODI2MDQ0MDc4MzciPiLigI/YqtmF2Kog2KXYstin2YTYqSDYqNi32KfZgtipIFNEINi52YTZiSDZhtit2Ygg2LrZitixINmF2KrZiNmC2LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MzI5ODQ4ODE5ODY1NTk0MjQxIj4i4oCP2KXZhNi62KfYoSDYqtix2YPZitioINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCINmC2KjZhCDYp9mE2KXYstin2YTYqSDZhNiq2KzZhtioINmB2YLYryDYp9mE2KjZitin2YbYp9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IuKAj9ij2YTYuiDYqtit2YXZitmEINio2LfYp9mC2KkgU0Qg2YLYqNmEINin2YTYpdiy2KfZhNipINmE2KrYrNmG2Kgg2YHZgtiv2KfZhiDYp9mE2KjZitin2YbYp9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5Njc5NzM4OTMyNzAzNjAyMzAiPiLigI/ZitmF2YPZhtmDINil2LLYp9mE2Kkg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2KjYtNmD2YQg2KLZhdmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4i4oCP2YrZhdmD2YYg2KXYstin2YTYqSDYqNi32KfZgtipIFNEINio2KPZhdin2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNDIxOTUzNjE2MDY0OTM1MzAiPiLigI/ZitmF2YPZhtmDINil2LLYp9mE2Kkg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2KjYtNmD2YQg2KLZhdmGLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiLigI/ZitmF2YPZhtmDINil2LLYp9mE2Kkg2KjYt9in2YLYqSBTRCDYqNij2YXYp9mGLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NDg2Mzc3MjMwMTQwMjI3NjUxIj4i4oCP2KrZhdiqINil2LLYp9mE2Kkg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTAyNTE4MDMwNDA0MzgxMzE4Ij4i4oCP2KrZhdiqINil2LLYp9mE2Kkg2KjYt9in2YLYqSBTRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjY5MjExMjYxNjI1ODA1NzQxNDMiPiLigI/YqtmF2Kog2KXYstin2YTYqSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4g2KPYr9ix2Kwg2YjYs9in2KbYtyDYrNiv2YrYr9ipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzg3MDEyMDY1Mjk4MzY1OTY0MSI+IuKAj9iq2YXYqiDYpdiy2KfZhNipINio2LfYp9mC2KkgU0QuINij2K/YrtmEINio2LfYp9mC2Kkg2KzYr9mK2K/YqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9saXN0X2VtcHR5IiBtc2dpZD0iMTY3NTM4ODMzMDc4Njg0MTA2NiI+ItmE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KPZiiDYo9mG2LTYt9ipINmF2KrYt9in2KjZgtipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9Ijg3ODczNTIwNzQzMjY3NDg4OTIiPiLYqtit2K/ZitirINil2K3Ytdin2KHYp9iqINin2LPYqtiu2K/Yp9mFINin2YTZhdmD2YjZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSIxMTA2NjEyNDI0MjU0Mjc3NjMwIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudiv2YrZhCDYpdit2LXYp9ih2KfYqiDYp9iz2KrYrtiv2KfZhSDYp9mE2YXZg9mI2YYg2KfZhNmF2KzZhdmR2LnYqS4g2YTZitizINmE2YTYp9iz2KrYrtiv2KfZhSDYqNmI2KfYs9i32Kkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KQEAgLTEzMjksMTMgKzEzNDEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9IndhbGxwYXBlcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTI0MDA4Nzg0NDMwNDY4NzY2MiI+Itin2YTYrtmE2YHZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i2KrYutmK2YrYsSDYp9mE2K7ZhNmB2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Itio2LHZhtin2YXYrCDYqtmE2YLZkdmKINin2YTYpdi02LnYp9ix2KfYqiDYp9mE2LXZiNiq2YrYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4i2KrZhSDYqtmG2LTZiti3INin2YTYtNio2YPYqSDYp9mE2LjYp9mH2LHZitipINin2YTYrtin2LXYqSAoVlBOKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+Itiq2YUg2KrZhti02YrYtyBWUE4g2KjZiNin2LPYt9ipIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4i4oCP2KrZhSDYqtmG2LTZiti3INin2YTYtNio2YPYqSDYp9mE2LjYp9mH2LHZitipINin2YTYrtin2LXYqSAoVlBOKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IuKAj9iq2YUg2KrZhti02YrYtyBWUE4g2KjZiNin2LPYt9ipIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+Itin2YTZhdizINmE2KXYr9in2LHYqSDYp9mE2LTYqNmD2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHRfbG9uZyIgbXNnaWQ9IjY0MDczNTEwMDYyNDkxNzQ0NzMiPiLYqtmFINin2YTYp9iq2LXYp9mEINio2YAgPHhsaWZmOmcgaWQ9IlNFU1NJT04iPiVzPC94bGlmZjpnPi4g2KfZhNmF2LMg2YTYpdiv2KfYsdipINin2YTYtNio2YPYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiLYrNin2LHZjSDYp9mE2KfYqti12KfZhCDYqNi02KjZg9ipINi42KfZh9ix2YrYqSDYrtin2LXYqSAoVlBOKSDYr9in2KbZhdipINin2YTYqti02LrZitmELi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLYqtmFINin2YTYp9iq2LXYp9mEINio2LTYqNmD2Kkg2LjYp9mH2LHZitipINiu2KfYtdipIChWUE4pINiv2KfYptmF2Kkg2KfZhNiq2LTYutmK2YQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fZXJyb3IiIG1zZ2lkPSI2MDA5MjQ5ODE0MDM0NzA4MTc1Ij4i2K7Yt9ijINio2LTYqNmD2Kkg2LjYp9mH2LHZitipINiu2KfYtdipIChWUE4pINiv2KfYptmF2Kkg2KfZhNiq2LTYutmK2YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiLigI/YrNin2LHZjSDYp9mE2KfYqti12KfZhCDYqNi02KjZg9ipINi42KfZh9ix2YrYqSDYrtin2LXYqSAoVlBOKSDYr9in2KbZhdipINin2YTYqti02LrZitmELi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLigI/YqtmFINin2YTYp9iq2LXYp9mEINio2LTYqNmD2Kkg2LjYp9mH2LHZitipINiu2KfYtdipIChWUE4pINiv2KfYptmF2Kkg2KfZhNiq2LTYutmK2YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fZXJyb3IiIG1zZ2lkPSI2MDA5MjQ5ODE0MDM0NzA4MTc1Ij4i4oCP2K7Yt9ijINio2LTYqNmD2Kkg2LjYp9mH2LHZitipINiu2KfYtdipIChWUE4pINiv2KfYptmF2Kkg2KfZhNiq2LTYutmK2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29uZmlnIiBtc2dpZD0iNjQxNTg5OTE1MDY3MTUzNzk3MCI+Itin2YTZhdizINmE2YTYqtmH2YrYptipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXBsb2FkX2ZpbGUiIG1zZ2lkPSIyODk3OTU3MTcyMzY2NzMwNDE2Ij4i2KfYrtiq2YrYp9ixINmF2YTZgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2ZpbGVfY2hvc2VuIiBtc2dpZD0iNjM2MzY0ODU2MjE3MDc1OTQ2NSI+ItmE2YUg2YrYqtmFINin2K7YqtmK2KfYsSDYo9mKINmF2YTZgSI8L3N0cmluZz4KQEAgLTEzNTksMTggKzEzNzEsMTggQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NjQxODcyNzk3MDY3NjA5MTc3Ij4iPHhsaWZmOmcgaWQ9IklOREVYIj4lZDwveGxpZmY6Zz4g2YXZhiA8eGxpZmY6ZyBpZD0iVE9UQUwiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tb2RlX2RvbmUiIG1zZ2lkPSI3MjE3NTgxNjQwNDYxOTIyMjg5Ij4i2KrZhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkyMzgxMDQ0ODUwNzYxMjc0NiI+Itis2KfYsdmNINil2YTYutin2KEg2KrYrdmF2YrZhCDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4i2KzYp9ix2Y0g2KXZhNi62KfYoSDYqtit2YXZitmEINio2LfYp9mC2KkgU0QuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiLYrNin2LHZjSDZhdit2Ygg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjU5Njk4ODg3NTUwNzA0MzA0MiI+Itis2KfYsdmNINmF2K3ZiCDYqNi32KfZgtipIFNELi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiLYqti52LDYsSDZhdiz2K0g2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+Itiq2LnYsNixINmF2LPYrSDYqNi32KfZgtipIFNELiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2JhZF9yZW1vdmFsIiBtc2dpZD0iNzk2MDg2NDA2MTAxNjYwMzI4MSI+Itiq2YXYqiDYpdiy2KfZhNipINio2LfYp9mC2KkgU0Qg2YLYqNmEINij2YYg2YrYqtmFINil2YTYutin2KEg2KrYsdmD2YrYqNmH2KcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDE4MTg4NzIwMDA5NTY5NjkzIj4i2YrYqtmFINit2KfZhNmK2YvYpyDYp9mE2KrYrdmC2YIg2YXZhiDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMzQ3NjI1MDM5MDQ4Mjc0ODEiPiLZitiq2YUg2KfZhNii2YYg2KfZhNiq2K3ZgtmCINmF2YYg2KjYt9in2YLYqSBTRC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yZW1vdmVkIiBtc2dpZD0iNzAwMTUyNjkwNTA1Nzk1MjA5NyI+Itiq2YXYqiDYpdiy2KfZhNipINio2LfYp9mC2KkgU0QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjU4MzA4MTQzNDkyNTA4MzQyMjUiPiLZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDZgtmK2K8g2KfZhNin2LPYqtiu2K/Yp9mFINio2YjYp9iz2LfYqSDZg9mF2KjZitmI2KrYsSDYrdin2YTZitmL2KcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcwNjEzMDU2ODEzMzU0MDQzNSI+Itio2LfYp9mC2KkgU0Qg2YLZitivINin2YTYp9iz2KrYrtiv2KfZhSDYrdin2YTZitmL2Kcg2KjZiNin2LPYt9ipINmD2YXYqNmK2YjYqtixLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkyMzgxMDQ0ODUwNzYxMjc0NiI+IuKAj9is2KfYsdmNINil2YTYutin2KEg2KrYrdmF2YrZhCDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4i4oCP2KzYp9ix2Y0g2KXZhNi62KfYoSDYqtit2YXZitmEINio2LfYp9mC2KkgU0QuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiLigI/YrNin2LHZjSDZhdit2Ygg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjU5Njk4ODg3NTUwNzA0MzA0MiI+IuKAj9is2KfYsdmNINmF2K3ZiCDYqNi32KfZgtipIFNELi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiLigI/Yqti52LDYsSDZhdiz2K0g2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IuKAj9iq2LnYsNixINmF2LPYrSDYqNi32KfZgtipIFNELiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2JhZF9yZW1vdmFsIiBtc2dpZD0iNzk2MDg2NDA2MTAxNjYwMzI4MSI+IuKAj9iq2YXYqiDYpdiy2KfZhNipINio2LfYp9mC2KkgU0Qg2YLYqNmEINij2YYg2YrYqtmFINil2YTYutin2KEg2KrYsdmD2YrYqNmH2KcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDE4MTg4NzIwMDA5NTY5NjkzIj4i4oCP2YrYqtmFINit2KfZhNmK2YvYpyDYp9mE2KrYrdmC2YIg2YXZhiDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMzQ3NjI1MDM5MDQ4Mjc0ODEiPiLigI/Zitiq2YUg2KfZhNii2YYg2KfZhNiq2K3ZgtmCINmF2YYg2KjYt9in2YLYqSBTRC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yZW1vdmVkIiBtc2dpZD0iNzAwMTUyNjkwNTA1Nzk1MjA5NyI+IuKAj9iq2YXYqiDYpdiy2KfZhNipINio2LfYp9mC2KkgU0QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjU4MzA4MTQzNDkyNTA4MzQyMjUiPiLigI/ZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDZgtmK2K8g2KfZhNin2LPYqtiu2K/Yp9mFINio2YjYp9iz2LfYqSDZg9mF2KjZitmI2KrYsSDYrdin2YTZitmL2KcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcwNjEzMDU2ODEzMzU0MDQzNSI+IuKAj9io2LfYp9mC2KkgU0Qg2YLZitivINin2YTYp9iz2KrYrtiv2KfZhSDYrdin2YTZitmL2Kcg2KjZiNin2LPYt9ipINmD2YXYqNmK2YjYqtixLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Vua25vd25fc3RhdGUiIG1zZ2lkPSI3MjkxOTI3ODIxOTcyOTAzODUiPiLZiNiz2KfYpti3INiu2KfYsdis2YrYqSDZgdmKINit2KfZhNipINi62YrYsSDZhdi52LHZiNmB2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmUiIG1zZ2lkPSIxNzc4Njg2NjE4MjMwMDExOTY0Ij4i2YXYtNin2LHZg9ipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmluZCIgbXNnaWQ9IjQ4MDgyNzA5MDAzMjI5ODU5NjAiPiLYqNit2KsiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiLYp9mE2LnYp9mE2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+Itin2K7YqtmK2KfYsSDYqti32KjZitmCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4i2KrYudiw2LEg2KrYtNi62YrZhCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i2YXYtNin2LHZg9ipINmF2LkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i2YXYtNin2LHZg9ipINmF2LkgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLZhdmC2KjYtiDYp9mE2KrZhdix2YrYsS4g2KfZhNmF2LMg2YXYuSDYp9mE2KfYs9iq2YXYsdin2LEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Itiq2YXYsdmK2LEg2YTYo9i52YTZiSDZhNmAIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLYqtmF2LHZitixINmE2KPYs9mB2YQg2YTZgCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i2KrZhdix2YrYsSDZhNmE2YrYs9in2LEg2YTZgCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Itiq2YXYsdmK2LEg2YTZhNmK2YXZitmGINmE2YAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i2KXZhNi62KfYoSDYqtij2YXZitmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+Itin2YTZg9in2YXZitix2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i2LXYp9mF2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i2KrYtNi62YrZhCDYp9mE2LXZiNiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLYqNit2KsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLZhdix2LEg2KjYs9ix2LnYqSDZhNil2YTYutin2KEg2KfZhNiq2KPZhdmK2YYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+ItmK2YXZg9mG2YMg2KrZiNi12YrZhCDYs9mF2KfYudipINix2KPYsyDZhNiz2YXYp9i5INmF2YHYp9iq2YrYrSDZg9mE2YXYqSDYp9mE2YXYsdmI2LEg2LnZhtiv2YXYpyDZitiq2YUg2YbYt9mC2YfYpy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLZhtmC2LfYqSI8L3N0cmluZz4KQEAgLTE0MzUsMjAgKzE0MzksMjAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI3OTY1OTg0MzYwOTAzNjkzOTAzIj4iJTEkc9iMICUyJHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfc3VidGl0bGVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNjk4NTU0NjUzMDQ3MTc4MDcyNyI+IiUxJHPYjCAlMiRz2IwgJTMkcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfaW50ZXJuYWwiIG1zZ2lkPSI0ODkxOTE2ODMzNjU3OTI5MjYzIj4i2YjYrdiv2Kkg2KrYrtiy2YrZhiDYr9in2K7ZhNmK2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4i2KjYt9in2YLYqSBTRCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+ItmI2K3Yr9ipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9zZF9jYXJkIiBtc2dpZD0iMzI4Mjk0ODg2MTM3ODI4Njc0NSI+IuKAj9io2LfYp9mC2KkgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3VzYiIgbXNnaWQ9IjMwMTc5NTQwNTk1Mzg1MTcyNzgiPiLigI/ZiNit2K/YqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV4dHJhY3RfZWRpdF9tZW51X2J1dHRvbiIgbXNnaWQ9Ijg5NDA0Nzg3MzA0OTY2MTAxMzciPiLYqti52K/ZitmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTk1NTYzODg2MjEyMjIzMjM0MiI+Itiq2K3YsNmK2LEg2KfYs9iq2K7Yr9in2YUg2KfZhNio2YrYp9mG2KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ19ib2R5IiBtc2dpZD0iMjgxNDY3MzU1MTQ3MTk2OTk1NCI+Itin2YTZhdizINmE2LnYsdi2INin2YTYp9iz2KrYrtiv2KfZhSDZiNin2YTYpdi52K/Yp9iv2KfYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+Itiq2YUg2KrYudi32YrZhCDYqNmK2KfZhtin2Kog2LTYqNmD2KfYqiDYp9mE2KzZitmEINin2YTYq9in2YbZiiDZiNin2YTYrNmK2YQg2KfZhNir2KfZhNirIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF90aXRsZSIgbXNnaWQ9Ijc2MzY0ODk0MzY4MTk0NzA3NjEiPiLYqtmFINiq2LnYt9mK2YQg2KjZitin2YbYp9iqINi02KjZg9ipINin2YTYrNmK2YQg2KfZhNix2KfYqNi5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfdGl0bGUiIG1zZ2lkPSI3ODY5NDAyNTE5MzkxNjMxODg0Ij4i2KrZhSDYqti52LfZitmEINio2YrYp9mG2KfYqiDYp9mE2KzZiNin2YQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfdGl0bGUiIG1zZ2lkPSI4OTkyMTU0NzM2NDQxMjg0ODY1Ij4i2KrZhSDYqti52LfZitmEINio2YrYp9mG2KfYqiBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiLigI/YqtmFINiq2LnYt9mK2YQg2KjZitin2YbYp9iqIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+Itin2YTZhdizINmE2YTYqtmF2YPZitmGLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiLYqtmFINiq2KzYp9mI2LIg2K3YryDYqNmK2KfZhtin2Kog2LTYqNmD2KfYqiAyRy0zRyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiLYqtmFINiq2KzYp9mI2LIg2K3YryDYqNmK2KfZhtin2KogNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI3MDI2NzM5MTIxMTM4MDA1MjMxIj4i4oCP2KrZhSDYqtis2KfZiNiyINit2K8g2KjZitin2YbYp9iqINi02KjZg9in2KogMkctM0ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIxMTA2NTYyNzc5MzExMjA5MDM5Ij4i4oCP2KrZhSDYqtis2KfZiNiyINit2K8g2KjZitin2YbYp9iqIDRHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjI3OTI0MDU3MjE2NTQxMjE2OCI+Itiq2YUg2KrYrNin2YjYsiDYrdivINio2YrYp9mG2KfYqiDYp9mE2KzZiNin2YQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9Ijg3NDM4NTYwMDYzODQ4MjU5NzQiPiLYqtmFINiq2KzYp9mI2LIg2K3YryDYqNmK2KfZhtin2Kog2LTYqNmD2KkgV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9Ijg3NDM4NTYwMDYzODQ4MjU5NzQiPiLigI/YqtmFINiq2KzYp9mI2LIg2K3YryDYqNmK2KfZhtin2Kog2LTYqNmD2KkgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X3Nub296ZWRfYm9keSIgbXNnaWQ9IjcwMzU0OTAyNzgyOTg0NDE3NjciPiI8eGxpZmY6ZyBpZD0iU0laRSI+JXM8L3hsaWZmOmc+INmB2YjZgiDYp9mE2K3YryDYp9mE2YXYudmK2YYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX3RpdGxlIiBtc2dpZD0iNTk2NTE1NzM2MTAzNjMyMTkxNCI+Itiq2YUg2KrZgtmK2YrYryDYqNmK2KfZhtin2Kog2KfZhNiu2YTZgdmK2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfYm9keSIgbXNnaWQ9IjY3NDE1MjEzMzA5OTc0NTI5OTAiPiLYp9mE2YXYsyDZhNil2LLYp9mE2Kkg2KfZhNiq2YLZitmK2K8uIjwvc3RyaW5nPgpAQCAtMTQ2NCw4ICsxNDY4LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImV4cGlyZXNfb24iIG1zZ2lkPSIzNjc2MjQyOTQ5OTE1OTU5ODIxIj4i2KrZhtiq2YfZiiDYp9mE2LXZhNin2K3ZitipINmB2Yo6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VyaWFsX251bWJlciIgbXNnaWQ9Ijc1ODgxNDA2NzY2MDg2MjQ5MyI+Itin2YTYsdmC2YUg2KfZhNmF2LPZhNiz2YQ6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmluZ2VycHJpbnRzIiBtc2dpZD0iNDUxNjAxOTYxOTg1MDc2MzA0OSI+Itio2LXZhdin2Kog2KfZhNij2LXYp9io2Lk6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhMjU2X2ZpbmdlcnByaW50IiBtc2dpZD0iNDM5MTI3MTI4NjQ3NzI3OTI2MyI+Itio2LXZhdipINij2LXYqNi5IFNIQS0yNTY6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhMV9maW5nZXJwcmludCIgbXNnaWQ9Ijc5MzAzMzAyMzUyNjk0MDQ1ODEiPiLYqNi12YXYqSDYo9i12KjYuSBTSEEtMToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGEyNTZfZmluZ2VycHJpbnQiIG1zZ2lkPSI0MzkxMjcxMjg2NDc3Mjc5MjYzIj4i4oCP2KjYtdmF2Kkg2KPYtdio2LkgU0hBLTI1NjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IuKAj9io2LXZhdipINij2LXYqNi5IFNIQS0xOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19zZWVfYWxsIiBtc2dpZD0iNDI5MjU2OTM4Mzk3NjYzNjIwMCI+Iti52LHYtiDYp9mE2YPZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjQ3MTAwMTM4NjQ5NzQwNDA2MTUiPiLYp9iu2KrZitin2LEg2YbYtNin2LciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiLZhdi02KfYsdmD2Kkg2YXYuSI8L3N0cmluZz4KQEAgLTE0ODMsMjAgKzE0ODcsMjYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLYp9mE2YbYuNin2YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+Iti12YjYqiDYqNmE2YjYqtmI2KsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+Iti52LHYtiDYtNin2LTYqSDZhNin2LPZhNmD2YoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i2KrZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Itin2YTZhdmG2YHYsCDYp9mE2KXYudmE2KfZhdmKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLYp9mE2KfYqti12KfZhCDYqNis2YfYp9iyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4i2KjYqyDYp9mE2LTYp9i02Kkg2LnZhNmJINin2YTYrNmH2KfYsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Itis2KfYsdmNINin2YTYqNit2Ksg2LnZhiDYp9mE2KPYrNmH2LLYqeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+Itin2YTYpdi52K/Yp9iv2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLZgti32Lkg2KfZhNin2KrYtdin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i2KzYp9ix2Y0g2KfZhNmB2K3YtS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+Itis2KfYsdmNINin2YTYp9iq2LXYp9mELi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLZhdiq2KfYrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNjczOTg5OTk2MjY4MTg4NjQwMSI+Iti62YrYsSDZhdiq2KfYrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19pbl91c2UiIG1zZ2lkPSI0NTMzNzg2MDMxMDkwMTk4MDYzIj4i2YLZitivINin2YTYp9iz2KrYrtiv2KfZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9idWlsdF9pbl9kaXNwbGF5X25hbWUiIG1zZ2lkPSIyNTgzMTM0Mjk0MjkyNTYzOTQxIj4i2LTYp9i02Kkg2YXYr9mF2KzYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9oZG1pX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjE1NTUyNjQ1NTkyMjc0NzAxMDkiPiLYtNin2LTYqSBIRE1JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+IuKAj9i02KfYtNipIEhETUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i2KfZhNmF2LHZg9ioICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPtiMIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+INmG2YLYt9ipINmE2YPZhCDYqNmI2LXYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiLigI88eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz7YjCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiDZhtmC2LfYqSDZhNmD2YQg2KjZiNi12KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4i2KLZhdmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLYqtmFINin2YTYqtmI2LXZitmEINio2LTYp9i02Kkg2YTYp9iz2YTZg9mK2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i2YrYqtmFINi52LHYtiDZh9iw2Ycg2KfZhNi02KfYtNipINi52YTZiSDYrNmH2KfYsiDYotiu2LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4i2KzYp9ix2Y0g2KjYqyDYp9mE2LTYp9i02KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLYrNin2LHZjSDYp9mE2KfYqti12KfZhCDYqNmAIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+Itis2KfYsdmNINio2Ksg2KfZhNi02KfYtNipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiLZhdiq2LXZhCDYqNmAIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLZgti32Lkg2KfZhNin2KrYtdin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Itin2YTYp9iq2LXYp9mEINio2KfZhNi32YjYp9ix2KYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLZhtiz2YrYqiDYp9mE2YbZgti0Ijwvc3RyaW5nPgpAQCAtMTUwNSwyNyArMTUxNSwyNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+Itix2YLZhSDYqti52LHZitmBINi02K7YtdmKINiu2KfYt9imIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiLYrdin2YjZhCDZhdix2Kkg2KPYrtix2Ykg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+Itin2LHYs9mFINmG2YLYtNmDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4i2KPYr9iu2YQg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDZhNio2LfYp9mC2KkgU0lNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiLYo9iv2K7ZhCDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4i4oCP2KPYr9iu2YQg2LHZhdiyIFBJTiDZhNio2LfYp9mC2KkgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiLigI/Yo9iv2K7ZhCDYsdmF2LIgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+Itij2K/YrtmEINmD2YTZhdipINin2YTZhdix2YjYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+Itio2LfYp9mC2KkgU0lNINmF2LnYt9mE2Kkg2KfZhNii2YYuINij2K/YrtmEINix2YXYsiBQVUsg2YTZhNmF2KrYp9io2LnYqS4g2KfYqti12YQg2KjZhdi02LrZhCDYtNio2YPYqSDYp9mE2KzZiNin2YQg2YTZhNin2LfZhNin2Lkg2LnZhNmJINin2YTYqtmB2KfYtdmK2YQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+Itil2K/Yrtin2YQg2LHZhdiyINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KfZhNmF2LHYp9ivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+Itiq2KPZg9mK2K8g2LHZhdiyINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KfZhNmF2LHYp9ivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLYrNin2LHZjSDYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KjYt9in2YLYqSBTSU3igKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiLYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINi62YrYsSDYtdit2YrYrS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLYp9mD2KrYqCDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINin2YTZhdmD2YjZhiDZhdmGIDQg2KXZhNmJIDgg2KPYsdmC2KfZhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiLZitis2Kgg2KPZhiDZitiq2LbZhdmGINix2YXYsiBQVUvigI8gOCDYo9ix2YLYp9mFINij2Ygg2KPZg9ir2LEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i2KPYudivINil2K/Yrtin2YQg2LHZhdiyIFBVSyDYp9mE2LXYrdmK2K0uINmI2LPYqtik2K/ZiiDYp9mE2YXYrdin2YjZhNin2Kog2KfZhNmF2KrZg9ix2LHYqSDYpdmE2Ykg2KrYudi32YrZhCDYqNi32KfZgtipIFNJTSDZhtmH2KfYptmK2YvYpy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i2YTYpyDZitiq2LfYp9io2YIg2LHZhdiy2Kcg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IuKAj9io2LfYp9mC2KkgU0lNINmF2LnYt9mE2Kkg2KfZhNii2YYuINij2K/YrtmEINix2YXYsiBQVUsg2YTZhNmF2KrYp9io2LnYqS4g2KfYqti12YQg2KjZhdi02LrZhCDYtNio2YPYqSDYp9mE2KzZiNin2YQg2YTZhNin2LfZhNin2Lkg2LnZhNmJINin2YTYqtmB2KfYtdmK2YQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuKAj9il2K/Yrtin2YQg2LHZhdiyINix2YXYsiBQSU4g2KfZhNmF2LHYp9ivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuKAj9iq2KPZg9mK2K8g2LHZhdiyINix2YXYsiBQSU4g2KfZhNmF2LHYp9ivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLigI/YrNin2LHZjSDYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KjYt9in2YLYqSBTSU3igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiLigI/YsdmF2LIgUElOINi62YrYsSDYtdit2YrYrS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLigI/Yp9mD2KrYqCDYsdmF2LIgUElOINin2YTZhdmD2YjZhiDZhdmGIDQg2KXZhNmJIDgg2KPYsdmC2KfZhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiLigI/Zitis2Kgg2KPZhiDZitiq2LbZhdmGINix2YXYsiBQVUvigI8gOCDYo9ix2YLYp9mFINij2Ygg2KPZg9ir2LEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4oCP2KPYudivINil2K/Yrtin2YQg2LHZhdiyIFBVSyDYp9mE2LXYrdmK2K0uINmI2LPYqtik2K/ZiiDYp9mE2YXYrdin2YjZhNin2Kog2KfZhNmF2KrZg9ix2LHYqSDYpdmE2Ykg2KrYudi32YrZhCDYqNi32KfZgtipIFNJTSDZhtmH2KfYptmK2YvYpy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i4oCP2YTYpyDZitiq2LfYp9io2YIg2LHZhdiy2Kcg2LHZhdiyIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+ItmF2K3Yp9mI2YTYp9iqINin2YTZhtmC2LQg2YPYq9mK2LHYqSDYrNiv2YvYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLZhNil2YTYutin2KEg2KfZhNiq2KPZhdmK2YbYjCDYs9is2ZHZhCDYp9mE2K/YrtmI2YQg2KjYrdiz2KfYqNmDINmB2YogR29vZ2xlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLigI/ZhNil2YTYutin2KEg2KfZhNiq2KPZhdmK2YbYjCDYs9is2ZHZhCDYp9mE2K/YrtmI2YQg2KjYrdiz2KfYqNmDINmB2YogR29vZ2xlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i2KfYs9mFINin2YTZhdiz2KrYrtiv2YUgKNin2YTYqNix2YrYryDYpdmE2YPYqtix2YjZhtmKKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i2YPZhNmF2Kkg2KfZhNmF2LHZiNixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLYqtiz2KzZitmEINin2YTYr9iu2YjZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i2KfYs9mFINmF2LPYqtiu2K/ZhSDYutmK2LEg2LXYrdmK2K0g2KPZiCDZg9mE2YXYqSDZhdix2YjYsSDYutmK2LEg2LXYp9mE2K3YqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i2YfZhCDZhtiz2YrYqiDYp9iz2YUg2KfZhNmF2LPYqtiu2K/ZhSDYo9mIINmD2YTZhdipINin2YTZhdix2YjYsdifXG7Yp9mG2KrZgtmEINil2YTZiSAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuKAj9mH2YQg2YbYs9mK2Kog2KfYs9mFINin2YTZhdiz2KrYrtiv2YUg2KPZiCDZg9mE2YXYqSDYp9mE2YXYsdmI2LHYn1xu2KfZhtiq2YLZhCDYpdmE2YkgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+Itis2KfYsdmNINmB2K3YtSDYp9mE2K3Ys9in2KjigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItmE2YLYryDZg9iq2KjYqiDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINio2LTZg9mEINi62YrYsSDYtdit2YrYrSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2KkuIFxuXG7Yo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4oCP2YTZgtivINmD2KrYqNiqINix2YXYsiBQSU4g2KjYtNmD2YQg2LrZitixINi12K3ZititIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INmF2LHYqS4gXG5cbtij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItmE2YLYryDZg9iq2KjYqiDZg9mE2YXYqSDYp9mE2YXYsdmI2LEg2KjYtNmD2YQg2LrZitixINi12K3ZititIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INmF2LHYqS4gXG5cbtij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+ItmE2YLYryDYsdiz2YXYqiDZhtmC2LQg2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiDYqNi32LHZitmC2Kkg2LrZitixINi12K3Zitit2KkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLZhNmC2K8g2K3Yp9mI2YTYqiDYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiDYqNi52K8g2KXYrNix2KfYoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqtiq2YUg2KXYudin2K/YqSDYqti52YrZitmGINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2LnZhNmJINin2YTYpdi52K/Yp9iv2KfYqiDYp9mE2KfZgdiq2LHYp9i22YrYqSDZhNmE2YXYtdmG2Lkg2YjYs9mK2KrZhSDZgdmC2K8g2KzZhdmK2Lkg2KjZitin2YbYp9iqINin2YTZhdiz2KrYrtiv2YUuIjwvc3RyaW5nPgpAQCAtMTYzNSwxOSArMTY0NSwzMCBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3NlcnZpY2VfdW5hdmFpbGFibGUiIG1zZ2lkPSI3ODI0MDA4NzMyMjQzOTAzMjY4Ij4i2K7Yr9mF2Kkg2KfZhNi32KjYp9i52Kkg2YTZitiz2Kog2YXZhdmD2ZHZhtipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZV9pbnN0YWxsZWRfdGl0bGUiIG1zZ2lkPSIyMjQ2MzE3MTY5NDQ0MDgxNjI4Ij4i2KrZhSDYqtir2KjZitiqINiu2K/ZhdipIDx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlX2luc3RhbGxlZF9tZXNzYWdlIiBtc2dpZD0iNTg5NzM2MjkzMTA3MDQ1OTE1MiI+Itin2YbZgtixINmE2YTYqtmF2YPZitmGLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9hZG1pbl9waW4iIG1zZ2lkPSI3ODM2NDM3MzE4OTUxNDM5NzAiPiLYo9iv2K7ZhCDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINmE2YTZhdi02LHZgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9waW4iIG1zZ2lkPSIzMzk1OTUzNDIxMzY4NDc2MTAzIj4i2KXYr9iu2KfZhMKg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9hZG1pbl9waW4iIG1zZ2lkPSI3ODM2NDM3MzE4OTUxNDM5NzAiPiLigI/Yo9iv2K7ZhCDYsdmF2LIgUElOINmE2YTZhdi02LHZgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9waW4iIG1zZ2lkPSIzMzk1OTUzNDIxMzY4NDc2MTAzIj4i4oCP2KXYr9iu2KfZhMKg2LHZhdiyIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9pbmNvcnJlY3QiIG1zZ2lkPSI4NTcxNTEyMDAzOTU1MDc3OTI0Ij4i2LrZitixINi12K3ZititIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX29sZF9waW4iIG1zZ2lkPSIxNDYyMjA2MjI1NTEyOTEwNzU3Ij4i2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2K3Yp9mE2YoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfbmV3X3BpbiIgbXNnaWQ9IjU5NTk2MDY2OTE2MTk5NTkxODQiPiLYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINin2YTYrNiv2YrYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jb25maXJtX3BpbiIgbXNnaWQ9Ijg1MDE1MjM4Mjk2MzMxNDYyMzkiPiLYqtij2YPZitivINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KfZhNis2K/ZitivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX29sZF9waW4iIG1zZ2lkPSIxNDYyMjA2MjI1NTEyOTEwNzU3Ij4i4oCP2LHZhdiyIFBJTiDYp9mE2K3Yp9mE2YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfbmV3X3BpbiIgbXNnaWQ9IjU5NTk2MDY2OTE2MTk5NTkxODQiPiLigI/YsdmF2LIgUElOINin2YTYrNiv2YrYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jb25maXJtX3BpbiIgbXNnaWQ9Ijg1MDE1MjM4Mjk2MzMxNDYyMzkiPiLigI/Yqtij2YPZitivINix2YXYsiBQSU4g2KfZhNis2K/ZitivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4i2KXZhti02KfYoSDYsdmC2YUg2KrYudix2YrZgSDYtNiu2LXZiiDZhNiq2LnYr9mK2YQg2KfZhNmC2YrZiNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiLYo9ix2YLYp9mFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZitipINmE2Kcg2KrYqti32KfYqNmC2Iwg2KPYudivINin2YTZhdit2KfZiNmE2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX3Rvb19zaG9ydCIgbXNnaWQ9IjgxNzM5ODI3NTYyNjU3Nzc3OTIiPiLYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINij2YLYtdixINmF2YXYpyDZitmE2LLZhdiMINmK2KzYqCDYo9mE2Kcg2YrZgtmEINi52YYgNCDYo9ix2YLYp9mFLsKgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX3Rvb19zaG9ydCIgbXNnaWQ9IjgxNzM5ODI3NTYyNjU3Nzc3OTIiPiLigI/YsdmF2LIgUElOINij2YLYtdixINmF2YXYpyDZitmE2LLZhdiMINmK2KzYqCDYo9mE2Kcg2YrZgtmEINi52YYgNCDYo9ix2YLYp9mFLsKgIjwvc3RyaW5nPgogICA8cGx1cmFscyBuYW1lPSJyZXN0cl9waW5fY291bnRkb3duIj4KICAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzExMDUwOTk1MTk4NTQ4Njc1Ij4i2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQg2KvYp9mG2YrYqSDZiNin2K3Yr9ipLiI8L2l0ZW0+CiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+Itij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i2KPYudivINin2YTZhdit2KfZiNmE2Kkg2YTYp9it2YLZi9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+ItmF2LHYsSDYqNiz2LHYudipINmF2YYg2KPYudmE2Ykg2YTYo9iz2YHZhCDZhNmE2K7YsdmI2Kwg2YXZhiDZiNi22Lkg2YXZhNihINin2YTYtNin2LTYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+Itiq2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLYtNix2YrYtyDYp9mE2KrZhdix2YrYsSDYp9mE2K/Yp9im2LHZiiDZhNmE2LPYp9i52KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4i2LTYsdmK2Lcg2KfZhNiq2YXYsdmK2LEg2KfZhNiv2KfYptix2Yog2YTZhNiv2YLYp9im2YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i2KrYrdiv2YrYryDYp9mE2LPYp9i52KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+Itiq2K3Yr9mK2K8g2KfZhNiv2YLYp9im2YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+Iti02KjZg9ipINin2YTYtNmH2LEg2YXZg9mI2YbYqSDZhdmGINin2YTYo9mK2KfZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+ItmC2KfYptmF2Kkg2KfZhNij2LnZiNin2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+Itiq2K3Yr9mK2K8g2KfZhNi02YfYsSDZiNin2YTZitmI2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLYqtit2K/ZitivINin2YTYudin2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4i2KrZhSDYqtit2K/ZitivIDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Itiq2YUg2K3YsNmBIDx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OWNmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1OTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYnl0ZVNob3J0IiBtc2dpZD0iODM0MDk3Mzg5Mjc0MjAxOTEwMSI+IkIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJraWxvYnl0ZVNob3J0IiBtc2dpZD0iNTk3Mzc4OTc4MzUwNDc3MTg3OCI+IktCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVnYWJ5dGVTaG9ydCIgbXNnaWQ9IjYzNTU4NTE1NzY3NzA0Mjg5MjIiPiJNQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdpZ2FieXRlU2hvcnQiIG1zZ2lkPSIzMjU5ODgyNDU1MjEyMTkzMjE0Ij4iR0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXJhYnl0ZVNob3J0IiBtc2dpZD0iMjMxNjEzMDE4MTU5MTg2OTYyIj4iVEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXRhYnl0ZVNob3J0IiBtc2dpZD0iNTYzNzgxNjY4MDE0NDk5MDIxOSI+IlBCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmlsZVNpemVTdWZmaXgiIG1zZ2lkPSI5MTY0MjkyNzkxNTAwNTMxOTQ5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkczwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iVU5JVCI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bnRpdGxlZCIgbXNnaWQ9IjQ2Mzg5NTY5NTQ4NTI3ODI1NzYiPiJCYcWfbMSxcXPEsXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpcyIgbXNnaWQ9Ijc4OTk4Mjk1MTYwNDg4MTMyMzciPiIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpc190d29fZG90cyIgbXNnaWQ9IjEyMjgwNzg5OTQ4NjYwMzA3MzYiPiLigKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eVBob25lTnVtYmVyIiBtc2dpZD0iNzY5NDA2MzA0MjA3OTY3NjUxNyI+IihUZWxlZm9uIG7Dtm1yyZlzaSB5b3hkdXIpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5rbm93bk5hbWUiIG1zZ2lkPSIyMjc3NTU2NTQ2NzQyNzQ2NTIyIj4iKE5hbcmZbHVtKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiJTyZlzbGkgcG/Dp3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0TXNpc2RuQWxwaGFUYWciIG1zZ2lkPSIyODUwODg5NzU0OTE5NTg0Njc0Ij4iTVNJU0ROMSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+IkJhxJ9sYW50xLEgcHJvYmxlbWkgdsmZIHlhIHlhbG7EscWfIE1NIGtvZHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pRmRuRXJyb3IiIG1zZ2lkPSI1MjI0Mzk4MjE2Mzg1MzE2NDcxIj4ixo9tyZlsaXl5YXQgeWFsbsSxeiBzYWJpdCBuw7ZtcsmZbMmZcsmZIHnEscSfxLFtbGEgbcmZaGR1ZGxhxZ/EsWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWQiIG1zZ2lkPSI4MTQ3Mjc4MzQ2NDE0NzE0MzE1Ij4iU2VydmlzIGnFn8mZIHNhbMSxbmTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZEZvciIgbXNnaWQ9IjY4NTYyMjgxNDA0NTM0NzEwNDEiPiJYaWRtyZl0IGFrdGl2IGVkaWxtacWfZGlyOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VEaXNhYmxlZCIgbXNnaWQ9IjE5Mzc1NTMyMjY1OTI1MTY0MTEiPiJYaWRtyZl0IGRlYWt0aXYgZWRpbGliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VSZWdpc3RlcmVkIiBtc2dpZD0iNjI3NTAxOTA4MjU5ODEwMjQ5MyI+IlFleWRpeXlhdCB1xJ91cmx1IG9sZHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiJTaWxpbm3JmSB1xJ91cmx1IG9sbXXFn2R1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZEluY29ycmVjdCIgbXNnaWQ9Ijc2MTIyMDg4Mzk0NTAxMjg3MTUiPiJZYW5sxLHFnyBwYXJvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUNvbXBsZXRlIiBtc2dpZD0iODIzMjUyNzQ5NTQxMTY5ODM1OSI+Ik1NSSB0YW1hbWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUGluIiBtc2dpZD0iOTAxNTI3NzY0NTU0NjcxMDAxNCI+IkRheGlsIGV0ZGl5aW5peiBrw7ZobsmZIFDEsE4gZMO8emfDvG4gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUHVrIiBtc2dpZD0iNTQ4NzI1NzY0NzA4MTEzMjIwMSI+IkRheGlsIGV0ZGl5aW5peiBQVUsgZMO8emfDvG4gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWlzbWF0Y2hQaW4iIG1zZ2lkPSI2MDkzNzkwNTQ0OTY4NjM0MTkiPiJEYXhpbCBldGRpeWluaXogUMSwTiBrb2RsYXIgdXnEn3VuIGfJmWxtaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFBpbiIgbXNnaWQ9IjM4NTAwMTg0NDUxODc0NzUzNzciPiI0LWTJmW4gOC3JmSBxyZlkyZlyIHLJmXHJmW1pIG9sYW4gUElOIHlhesSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IjggdsmZIGRhaGEgw6dveCByyZlxyZltaSBvbGFuIFBVSyB5YXrEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlNpemluIFPEsE0ga2FydCBQVUsgaWzJmSBraWxpZGzJmW5pYi4gT251IGHDp21hcSDDvMOnw7xuIFBVSyBrb2R1IHlhesSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJTSU0ga2FydMSxbiBraWxpZGluaSBhw6dtYXEgw7zDp8O8biBQVUsyIHlhesSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iRGF4aWwgb2xhbiB6yZluZyBlZMmZbmluIElEXCdzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNsaXJNbWkiIG1zZ2lkPSI3Nzg0NjczNjczNDQ2ODMzMDkxIj4iR2VkyZluIFrJmW5nIElEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ2ZNbWkiIG1zZ2lkPSI1MTIzMjE4OTg5MTQxNTczNTE1Ij4iWsmZbmcgecO2bmzJmW5kaXJtyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDd01taSIgbXNnaWQ9IjkxMjk2NzgwNTY3OTUwMTY4NjciPiJayZluZyBnw7Z6bMmZeWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQmFNbWkiIG1zZ2lkPSI0NTUxOTMwNjc5MjY3NzA1ODEiPiJayZluZyBxYWRhxJ9hc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUHdkTW1pIiBtc2dpZD0iNzA0MzcxNTY4NzkwNTI1NDE5OSI+IlBhcm9sdSBkyZl5acWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+IlDEsE4gZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmlwTW1pIiBtc2dpZD0iMzExMDUzNDY4MDU1Nzg1NzE2MiI+IkhhesSxcmRha8SxIG7Dtm1yyZl5yZkgesmZbmcgZWRpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ25pck1taSIgbXNnaWQ9IjMwNjIxMDIxMjE0MzA1NDg3MzEiPiJayZluZ2zJmXJpbiBzYXnEsSBtyZloZHVkbGHFn2TEsXLEsWzEsWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJUaHJlZVdDTW1pIiBtc2dpZD0iOTA1MTA0NzE3MDMyMTE5MDM2OCI+IsOcw6cgeW9sbHUgesmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSdWFjTW1pIiBtc2dpZD0iNzgyNzg4NzQ1OTEzODMwODg4NiI+IlhvxZ9hZ8mZbG3JmXogesmZbmdsyZlyZMmZbiBpbXRpbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmRNbWkiIG1zZ2lkPSIzMTE2NDQ2MjM3MDgxNTc1ODA4Ij4iw4dhdGTEsXLEsWxtYSB6yZluZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJEbmRNbWkiIG1zZ2lkPSIxMjY1NDc4OTMyNDE4MzM0MzMxIj4iTmFyYWhhdCBldG3JmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T25OZXh0Q2FsbE9uIiBtc2dpZD0iNDI5NDE1NDA5MTQ1NzgxOTIzIj4iQWTJmXTJmW4gesmZbmcgZWTJmW5pbiBJRFwnc2kgbcmZaGR1ZGxhxZ9kxLFyxLFsxLFyLiBOw7Z2YsmZdGkgesmZbmc6IE3JmWhkdWRsYcWfZMSxcsSxbMSxYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T25OZXh0Q2FsbE9mZiIgbXNnaWQ9IjMwOTI5MTgwMDYwNzc4NjQ2MjQiPiJBZMmZdMmZbiB6yZluZyBlZMmZbmluIElEXCdzaSBtyZloZHVkbGHFn2TEsXLEsWzEsXIuIE7DtnZiyZl0aSB6yZluZzogTcmZaGR1ZGxhxZ9kxLFyxLFsbWF5xLFiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9uIiBtc2dpZD0iNjE3OTQyNTE4Mjg1NjQxODQ2NSI+IkFkyZl0yZluIHrJmW5nIGVkyZluaW4gSURcJ3NpIG3JmWhkdWRsYcWfZMSxcsSxbG3EsXIuIE7DtnZiyZl0aSB6yZluZzogTcmZaGR1ZGxhxZ9kxLFyxLFsxLFiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9mZiIgbXNnaWQ9IjI1Njc5OTg2MzMxMjQ0MDg1NTIiPiJBZMmZdMmZbiB6yZluZyBlZMmZbmluIElEXCdzaSBtyZloZHVkbGHFn2TEsXLEsWxtxLFyLiBOw7Z2YsmZdGkgesmZbmc6IE3JmWhkdWRsYcWfZMSxcsSxbG1hecSxYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VOb3RQcm92aXNpb25lZCIgbXNnaWQ9Ijg2MTQ4MzAxODA1MDg2ODY2NjYiPiJYaWRtyZl0IHTJmW1pbiBlZGlsbcmZeWliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJQZXJtYW5lbnQiIG1zZ2lkPSIzMzc3MzcxMTQ1OTI2ODM1NjcxIj4iU2l6IHrJmW5nIGVkyZluaW4gSUQgbml6YW1sYXLEsW7EsSBkyZl5acWfyZkgYmlsbcmZenNpei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkQ2hhbmdlZFRpdGxlIiBtc2dpZD0iNTU5MjE4OTM5ODk1NjE4NzQ5OCI+Ik3JmWhkdWRsYcWfZMSxcsSxbG3EscWfIGtlw6dpZCBkyZl5acWfZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25EYXRhIiBtc2dpZD0iODY1Mzc5NDc4NDY5MDA2NTU0MCI+IkRhdGEgeGlkbcmZdCBiYcSfbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25FbWVyZ2VuY3kiIG1zZ2lkPSI2NTgxMTYzNzc5MDcyODMzNjY1Ij4iVMmZY2lsaSB4aWRtyZl0IGJhxJ9sxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbk5vcm1hbCIgbXNnaWQ9IjQ5NTM4NjcwMTEzODk3NTA2NzMiPiJTyZlzIHhpZG3JmXRpIGJhxJ9sxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbFZvaWNlIiBtc2dpZD0iMzM5Njk2MzY1MjEwODE1MTI2MCI+IkLDvHTDvG4gU8mZcyB4aWRtyZl0bMmZcmkgYmHEn2zEsWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25TbXMiIG1zZ2lkPSI4MzE0MzUyMzI3NDYxNjM4ODk3Ij4iU01TIHhpZG3JmXRpIGJsb2tsYW7EsWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VEYXRhIiBtc2dpZD0iOTk2NjM2NDg3MTA2MTcxMzIwIj4iU8mZcy9kYXRhIHhpZG3JmXRsyZlyaSBibG9rbGFuxLFiLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IlPJmXMvU01TIHhpZG3JmXRsyZlyaSBibG9rbGFuxLFiLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbCIgbXNnaWQ9IjU2NDMwMjgyNjQ0NjYwOTI4MjEiPiJCw7x0w7xuIHPJmXMvZGF0YS9TTVMgeGlkbcmZdGzJmXJpIGJhxJ9sxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1ZvaWNlIiBtc2dpZD0iMTI1ODM5MzgxMjMzNTI1ODAxOSI+IlPJmXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhIiBtc2dpZD0iODcyNDU2NzgyMDc3OTM3ODkzIj4iTcmZbHVtYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NGQVgiIG1zZ2lkPSI1NTY2NjI0OTk4ODQwNDg2NDc1Ij4iRkFLUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1NNUyIgbXNnaWQ9IjIwMTU0NjAzNzM3MDE1Mjc0ODkiPiJTTVMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhQXN5bmMiIG1zZ2lkPSI0NTIzNDU0NzgzNDk4NTUxNDY4Ij4iQXN5bmMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhU3luYyIgbXNnaWQ9Ijc1MzAwMDA1MTk2NDYwNTQ3NzYiPiJTaW54Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUGFja2V0IiBtc2dpZD0iNjk5MTAwNjU1Nzk5MzQyMzQ1MyI+IlBha2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUEFEIiBtc2dpZD0iMzIzNTI1OTA4NTY0ODI3MTAzNyI+IlBBRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MCIgbXNnaWQ9IjcxNzAzMzU0NzIxOTg2OTQ5NDUiPiJSb21pbnEgZ8O2c3TJmXJpY2lzaSBpxZ9syZlrZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxIiBtc2dpZD0iNTMxNDg2MTUxOTc1MjUzODkyMiI+IlJvbWlucSBnw7ZzdMmZcmljaXNpIGnFn2zJmWsgZGV5aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDIiIG1zZ2lkPSI4OTY5OTI5MDQ5MDgxMjY4MTE1Ij4iUm9taW5xIGfDtnN0yZlyaWNpc2kgeWFuxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQzIiBtc2dpZD0iNTE0ODI1NTAyNzA0Mzk0MzMxNyI+IlFvbsWfdWx1cWRhbiBLyZluYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDQiIG1zZ2lkPSI4ODA4NDU2NjgyNTUwNzk2NTMwIj4iQmluYWRhbiBryZluYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDUiIG1zZ2lkPSI3NjA0MDYzMjUyODUwMzU0MzUwIj4iUm9taW5xIC0gQXJ6dW9sdW5hbiBzaXN0ZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDYiIG1zZ2lkPSIyMDU5NDQwODI1NzgyODcxNTEzIj4iUm9taW5xIC0gTcO8bWvDvG4gc2lzdGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ3IiBtc2dpZD0iNzExMjA3ODcyNDA5NzIzMzYwNSI+IlJvbWlucSAtIEFseWFucyBwYXJ0bnlvcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDgiIG1zZ2lkPSI1OTg5NTY5Nzc4NjA0MDg5MjkxIj4iUm9taW5xIC0gUHJlbWl1bSBwYXJ0bnlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OSIgbXNnaWQ9Ijc5NjkyOTY4MTEzNTUxNTI0OTEiPiJSb3VtaW5xIC0gVGFtIFhpZG3JmXQgRnVua3Npb25hbGzEscSfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEwIiBtc2dpZD0iMzk5MjkwNjk5OTgxNTMxNjQxNyI+IlJvdW1pbnEgLSBRaXNtyZluIFhpZG3JmXQgRnVua3Npb25hbGzEscSfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDExIiBtc2dpZD0iNDE1NDQ3Njg1NDQyNjkyMDk3MCI+IlJvdW1pbnEgQmFubmVyaSBBw6fEsXFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMiIgbXNnaWQ9IjExODkwNzExMTk5OTI3MjYzMjAiPiJSb2FtaW5nIEJhbm5lciBPZmYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dFNlYXJjaGluZyIgbXNnaWQ9IjgzNjAxNDE4ODU5NzIyNzk5NjMiPiJYaWRtyZl0IGF4dGFyxLFsxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZU5vdEZvcndhcmRlZCIgbXNnaWQ9IjE2ODM2ODU4ODM4NDEyNzI1NjAiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogWcO2bmzJmW5kaXJpbG3JmWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZCIgbXNnaWQ9IjEzMDI5MjIxMTc0OTg1OTA1MjEiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZFRpbWUiIG1zZ2lkPSI5MjA2MjUxNzM2NTI3MDg1MjU2Ij4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiA8eGxpZmY6ZyBpZD0iVElNRV9ERUxBWSI+ezJ9PC94bGlmZjpnPiBzYW5pecmZIHNvbnJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWQiIG1zZ2lkPSI1MDczMjM3ODI3NjIwMTY2Mjg1Ij4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IFnDtm5syZluZGlyaWxtyZlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkVGltZSIgbXNnaWQ9IjY3ODE2MjE5NjQzMjA2MzUxNzIiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogWcO2bmzJmW5kaXJpbG3JmWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmNDb21wbGV0ZSIgbXNnaWQ9IjMxMTg4NDgyMzA5NjY4ODY1NzUiPiLDlnrJmWxsaWsga29kdSB0YW1hbWxhbmTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmY0Vycm9yIiBtc2dpZD0iMzMyNzU2MDEyNjU4ODUwMDc3NyI+IsaPbGFxyZkgcHJvYmxlbWkgdsmZIHlhIHlhbmzEscWfIGZ1bmtzaXlhIGtvZHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yT2siIG1zZ2lkPSIxMTkxOTE5Mzc4MDgzNDcyMjA0Ij4iT0siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3IiIG1zZ2lkPSI3OTU2MzkyNTExMTQ2Njk4NTIyIj4ixZ7JmWLJmWvJmSB4yZl0YXPEsSB2YXIgaWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiJVUkwgdGFwxLFsYSBiaWxtyZlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JVbnN1cHBvcnRlZEF1dGhTY2hlbWUiIG1zZ2lkPSI2Mjk5OTgwMjgwNDQyMDc2Nzk5Ij4iU2F5dCBhdXRlbnRpZmlrYXNpeWEgc3hlbWkgZMmZc3TJmWtsyZlubWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckF1dGgiIG1zZ2lkPSIxNDM1MDY1NjI5NDM4MDQ0NTM0Ij4iVMmZc2RpcSBlZGlsyZkgYmlsbcmZZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUHJveHlBdXRoIiBtc2dpZD0iMTc4ODIwNzAxMDU1OTA4MTMzMSI+IlByb2tzaSBzZXJ2ZXIgdmFzaXTJmXNpbMmZIHTJmXNkaXFsyZlubcmZIHXEn3Vyc3V6IG9sZHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQ29ubmVjdCIgbXNnaWQ9Ijg3MTQyNzMyMzYzNjQ2NDA1NDkiPiJTZXJ2ZXLJmSBxb8WfdWxhIGJpbG3JmWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvcklPIiBtc2dpZD0iMjM0MDU1ODE5NzQ4OTMwMjE4OCI+IlNlcnZlcmzJmSDJmWxhccmZIGFsxLFubWFkxLEuIFNvbnJhIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVGltZW91dCIgbXNnaWQ9IjQ3NDM0MDM3MDM3NjI4ODM5NTQiPiJTZXJ2ZXIgaWzJmSBvbGFuIMmZbGFxyZkgemFtYW4gYcWfxLFtxLFuYSBtyZlydXogcWFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclJlZGlyZWN0TG9vcCIgbXNnaWQ9Ijg2Nzk1OTYwOTAzOTI3Nzk1MTYiPiJCdSBzyZloaWbJmWTJmSBoyZlkZGluZMmZbiDDp294IHNlcnZlciB5w7ZubMmZbmRpcmlsbcmZbMmZcmkgdmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkU2NoZW1lIiBtc2dpZD0iNTAxNTczMDgxMjkwNjE5MjIwOCI+IlByb3Rva29sIGTJmXN0yZlrbMmZbm1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGYWlsZWRTc2xIYW5kc2hha2UiIG1zZ2lkPSI5NjU0OTYwNjAwMDY1ODY0MSI+IkfDvHbJmW5saSBiYcSfbGFudMSxIHlhcmFkxLFsYSBiaWxtyZlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4iVVJMIHlhbmzEscWfIG9sZHXEn3Ugw7zDp8O8biBzyZloaWbJmW5pIGHDp21hcSBtw7xta8O8biBvbG1hZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZpbGUiIG1zZ2lkPSIyMTcwNzg4NTE1MDUyNTU4Njc2Ij4iRmF5bGEgZ2lyacWfIGJhxZ8gdHV0bWFkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZU5vdEZvdW5kIiBtc2dpZD0iNjIwMzg1NjYxMjA0MjY1NTA4NCI+IlTJmWzJmWIgb2x1bmFuIGZheWwgdGFwxLFsbWFkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVG9vTWFueVJlcXVlc3RzIiBtc2dpZD0iMTIzNTM5NjkyNzA4NzE4ODI1MyI+IkjJmWRkaW5kyZluIMOnb3ggc29yxJ91IGnFn2zJmW5pbGlyLiBEYWhhIHNvbnJhIHlveGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4OTY3NzEwMDI1MDM2MTYzODIyIj4iPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiUxJHM8L3hsaWZmOmc+IMO8w6fDvG4gZ2lyacWfIHjJmXRhc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jIiBtc2dpZD0iODM1MzUyMzA2MDI2OTMzNTY2NyI+IlNpbnhyb25sYcWfZMSxcm1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIG1zZ2lkPSIzOTc3NDMzNDkxOTE5MDE0NTgiPiJTaW54cm9ubGHFn2TEsXJtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlVG9vTWFueURlbGV0ZXNOb3RpZmljYXRpb25EZXNjIiBtc2dpZD0iODEwMDk4MTQzNTA4MDY5NjQzMSI+IkjJmWRkaW5kyZluIMOnb3ggPHhsaWZmOmcgaWQ9IkNPTlRFTlRfVFlQRSI+JXM8L3hsaWZmOmc+IHNpbGlubcmZbMmZcmkgdmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY0OTQwMTkyMzQxMDIxNTQ4OTYiPiJQbGFuxZ9ldGluIHlhZGRhxZ/EsSBkb2x1ZHVyLiBCb8WfIHllciDDvMOnw7xuIGLJmXppIGZheWxsYXLEsSBzaWxpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ3NTk5OTI4NjY4MDAwMDU0MSI+IlRlbGVmb251biB5YWRkYcWfxLEgZG9sdWR1ci4gQm/FnyB5ZXIgw7zDp8O8biBiyZl6aSBmYXlsbGFyxLEgc2lsaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWUiIG1zZ2lkPSI2NTQ1Njk2MDA3NjMxNDA0MjkyIj4iTcmZbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODU0NTM1MTQyMDg2NTIwMjg1MyI+IlBsYW7Fn2V0IHNlw6dpbWzJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMxOTkxOTA3NTQ2Mzk4ODYzOCI+IlRlbGVmb24gc2XDp2ltbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZSIgbXNnaWQ9IjcxNjc3MDMzODk4MDI2MTg2NjMiPiJTyZlzc2l6IHJlamltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHVybl9vbl9yYWRpbyIgbXNnaWQ9IjM5MTI3OTMwOTIzMzk5NjIzNzEiPiJTaW1zaXppIGnFn8mZIHNhbMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1cm5fb2ZmX3JhZGlvIiBtc2dpZD0iODE5ODc4NDk0OTk4NzA2MjM0NiI+IlNpbXNpeiByYWJpdMmZbmkgc8O2bmTDvHLDvG4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fbG9jayIgbXNnaWQ9Ijc5OTA5NDY1NTQ5NjA5ODE1MyI+IkVrcmFuIGtpbGlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX29mZiIgbXNnaWQ9IjQyNjY2MTQxMDc0MTI4NjUwNDgiPiJTw7ZuZMO8ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3NpbGVudCIgbXNnaWQ9IjMxOTI5ODE2MzAxODQ3MzA3OCI+IlrJmW5nIGRlYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV92aWJyYXRlIiBtc2dpZD0iNzA3MjA0MzM4ODU4MTU1MTM5NSI+IlrJmW5nIHZpYnJhc2l5YWRhZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3JpbmciIG1zZ2lkPSI4NTkyMjQxODE2MTk0MDc0MzUzIj4iWsmZbmd2dXJhbiBhw6fEsXFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fcHJvZ3Jlc3MiIG1zZ2lkPSIyMjgxMDc5MjU3MzI5OTgxMjAzIj4iU8O2bmTDvHLDvGzDvHIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMzg1NzQ1MTc5NTU1NzMxNDcwIj4iUGxhbsWfZXRpbml6IHPDtm7JmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0OTc5MjE3NTI0MjgyMTM1MyI+IlRlbGVmb251bnV6IHPDtm7JmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybV9xdWVzdGlvbiIgbXNnaWQ9IjI5MDY1NDQ3Njg4ODExMzYxODMiPiJTw7ZuZMO8cm3JmWsgaXN0yZl5aXJzaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX3RpdGxlIiBtc2dpZD0iNzA1NDUwOTkxNDUwMDE0MDM2MSI+IlTJmWhsw7xryZlzaXogcmVqaW1kyZkgeWVuaWTJmW4gYmHFn2xhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV9jb25maXJtIiBtc2dpZD0iNTUyOTM5NDQ1MDI3ODQ2NjgiPiJUyZlobMO8a8mZc2l6IHJlamltZMmZIHllbmlkyZluIGJhxZ9sYW1hcSBpc3TJmXlpcnNpbml6IG1pPyBCdSwgcXVyYcWfZMSxcmTEscSfxLFuxLF6IGLDvHTDvG4gw7zDp8O8bmPDvCB0yZlyyZlmIHTJmXRiaXFsyZlyaW5pIGRlYWt0aXYgZWTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50X3Rhc2tzX3RpdGxlIiBtc2dpZD0iMzY5MTc2NDYyMzYzODEyNzg4OCI+IlNvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX3JlY2VudF90YXNrcyIgbXNnaWQ9Ijg3OTQ5MDY2NTg3MzIxOTM0NzMiPiJIZcOnIGJpciBzb24gdMmZdGJpcSB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQwODQ3NzE0MDA4ODA1MzY2NSI+IlBsYW7Fn2V0IHNlw6dpbWzJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNDA2NDE2ODMxNTQxNjE1MjU4Ij4iVGVsZWZvbiBzZcOnaW1syZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9jayIgbXNnaWQ9IjI4NDQ5NDUxOTE3OTIxMTk3MTIiPiJFa3JhbiBraWxpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3Bvd2VyX29mZiIgbXNnaWQ9IjQ0NzE4Nzk0NDA4Mzk4Nzk3MjIiPiJTw7ZuZMO8ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fYnVnX3JlcG9ydCIgbXNnaWQ9Ijc5MzQwMTA1Nzg5MjIzMDQ3OTkiPiJCYXEgaGVzYWJhdMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3RpdGxlIiBtc2dpZD0iMjY2NzQ5NDgwMzc0MjU0ODUzMyI+IkJhccSxIHjJmWLJmXIgdmVyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSIgbXNnaWQ9IjM5ODQ0NzA0ODc1MDM1MDQ1NiI+IkJ1LCBzaXppbiBoYXrEsXJrxLEgY2loYXogZHVydW11IGhhcXHEsW5kYSBtyZlsdW1hdCB0b3BsYXlhY2FxIGtpLCBlbGVrdHJvbiBtyZlrdHViIMWfyZlrbGluZMmZIGfDtm5kyZlyc2luLiBCYXEgcmFwb3J0dW5hIGJhxZ9sYW1hcSDDvMOnw7xuIGJpciBheiB2YXh0IGxhesSxbSBvbGEgYmlsyZlyLCBiaXIgYXogc8mZYnIgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3RvZ2dsZV9zaWxlbnRfbW9kZSIgbXNnaWQ9IjgyMTk1MjUzNDQyNDY4MTA5MjUiPiJTyZlzc2l6IHJlamltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIzMjg5ODQxOTM3MDAzNzU4ODA2Ij4iU8mZcyBxYXBhbMSxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjE1MDYwNDY1NzkxNzcwNjY0MTkiPiJTyZlzIEFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfdG9nZ2xlX2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI1ODg0MzMwMzA2OTI2MzA3NDU2Ij4iVMmZeXlhcsmZIHJlamltaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMjcxOTU1Nzk4MjYwODkxOTc1MCI+IlXDp3XFnyByZWppbWkgYcOnxLFxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjUwNzUwNzA0NDI4NTQ0OTAyOTYiPiJUyZl5eWFyyZkgcmVqaW1pIHFhcGFsxLFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iVMmZaGzDvGvJmXNpeiByZWppbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQgc2lzdGVtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jb3N0TW9uZXkiIG1zZ2lkPSI1NDI5ODA4MjE3ODYxNDYwNDAxIj4iw5ZkyZluacWfbGkgeGlkbcmZdGzJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Nvc3RNb25leSIgbXNnaWQ9IjMyOTMzMDE5MDM0MDk4Njk0OTUiPiJYyZlyYyB0dXR1bGFjYXEgyZltyZlsaXl5YXRsYXIgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9tZXNzYWdlcyIgbXNnaWQ9Ijc1MjEyNDkxNDg0NDU0NTY2NjIiPiJTaXppbiBtZXNhamxhcsSxbsSxeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWVzc2FnZXMiIG1zZ2lkPSI3ODIxOTk5MDcxMDAzNjk5MjM2Ij4iU01TLCBlbGVrdHJvbiBwb8OndCB2yZkgZGlnyZlyIG1lc2FqbGFyxLEgb3h1eXVyIHbJmSB5YXrEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3BlcnNvbmFsSW5mbyIgbXNnaWQ9IjM1MTkxNjMxNDEwNzA1MzM0NzQiPiLFnsmZeHNpIG3JmWx1bWF0xLFuxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19wZXJzb25hbEluZm8iIG1zZ2lkPSI4NDI2NDUzMTI5Nzg4ODYxMzM4Ij4iS29udGFrdCBrYXJ0xLFuxLF6ZGEgc2F4bGFuxLFsYW4gbcmZbHVtYXRsYXLEsW7EsXphIGJpcmJhxZ9hIGdpcmnFny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc29jaWFsSW5mbyIgbXNnaWQ9IjU3OTkwOTY2MjM0MTIwNDM3OTEiPiJTb3NpYWwgbcmZbHVtYXTEsW7EsXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NvY2lhbEluZm8iIG1zZ2lkPSI3MTI5ODQyNDU3NjExNjQzNDkzIj4iS29udGFrdGxhcsSxbsSxeiB2yZkgc29zaWFsIMmZbGFxyZlsyZlyaW5peiBoYXFxxLFuZGEgbcmZbHVtYXRhIGJpcmJhxZ9hIGdpcmnFny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbG9jYXRpb24iIG1zZ2lkPSI2MzUxNDk3NDI0MzY2OTIwNDkiPiJZZXJsyZnFn23JmW5peiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbG9jYXRpb24iIG1zZ2lkPSI1NzA0Njc5NzYzMTI0MTcwMTAwIj4iRml6aWtpIGFkcmVzaW5pemkgbW9uaXRvcmlucSBlZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9uZXR3b3JrIiBtc2dpZD0iNTgwODk4MzM3NzcyNzEwOTgzMSI+IsWeyZliyZlryZkga29tbXVuaWthc2l5YXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbmV0d29yayIgbXNnaWQ9IjQ0NzgyOTk0MTMyNDE4NjE5ODciPiJNw7x4dMmZbGlmIMWfyZliyZlryZkgeMO8c3VzaXl5yZl0bMmZcmluyZkgZGF4aWwgb2wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSIxNTg1NDAzNTQ0MTYyMTI4MTA5Ij4iQmx1ZXRvb3RoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iNTYyNTI4ODU3NzE2NDI4MjM5MSI+IkJsdWV0b290aCDDvHrJmXJpbmTJmW4gY2loYXpsYXJhIHbJmSDFn8mZYsmZa8mZbMmZcsmZIGRheGlsIG9sLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hdWRpb1NldHRpbmdzIiBtc2dpZD0iODMyOTI2MTY3MDE1MTg3MTIzNSI+IkF1ZGlvIEF5YXJsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIyNjQxNTE1NDAzMzQ3NTY4MTMwIj4iQXVkaW8gYXlhcmxhcsSxIGTJmXlpxZ9pbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWZmZWN0c0JhdHRlcnkiIG1zZ2lkPSI2MjA5MjQ2NjUzNDI0Nzk4MDMzIj4iQmF0YXJleWF5YSB0yZlzaXIgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWZmZWN0c0JhdHRlcnkiIG1zZ2lkPSI2NDQxMjc1MzIwNjM4OTE2OTQ3Ij4iQmF0YXJleWFuxLF6xLFuIHRleiBxdXJ0YXJtYXPEsW5hIHPJmWLJmWIgb2xhbiBmdW5rc2l5YWxhciBpc3RpZmFkyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jYWxlbmRhciIgbXNnaWQ9IjU4NjM1MDg0Mzc3ODM2ODM5MDIiPiJUyZlxdmltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jYWxlbmRhciIgbXNnaWQ9IjU3Nzc1MzQzMTY5ODIxODQ0MTYiPiJUyZlxdmltyZkgdsmZIHTJmWRiaXJsyZlyyZkgYmlyYmHFn2EgZ2lyacWfLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaWN0aW9uYXJ5IiBtc2dpZD0iNDE0ODU5NzEyODg0MzY0MTM3OSI+IsSwc3RpZmFkyZnDp2kgTMO8xJ/JmXRpbmkgT3h1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaWN0aW9uYXJ5IiBtc2dpZD0iNzkyMTE2NjM1NTk2NDc2NDQ5MCI+IsSwc3RpZmFkyZnDp2kgbMO8xJ/JmXRpbmTJmWtpIHPDtnpsyZlyaSBveHV5dXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgwOTAyMzc3MDI0MzI1NzY3ODgiPiLEsHN0aWZhZMmZw6dpIEzDvMSfyZl0aW5pIFlheiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjcxMTU2MTk5NDQ5NzM2MTY0NiI+IsSwc3RpZmFkyZnDp2kgbMO8xJ/JmXRpbsmZIHPDtnpsyZlyIMmZbGF2yZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYm9va21hcmtzIiBtc2dpZD0iMTk0OTUxOTY3MzEwMzk2ODIyOSI+IsaPbGbJmWNpbmzJmXIgdsmZIFRhcml4w6fJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYm9va21hcmtzIiBtc2dpZD0iNDE2OTc3MTYwNjI1Nzk2MzAyOCI+IsaPbGbJmWNpbmzJmXLJmSB2yZkgYnJhdXplciB0YXJpeGluyZkgYmlyYmHFn2EgaWNhesmZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kZXZpY2VBbGFybXMiIG1zZ2lkPSI2MTE3NzA0NjI5NzI4ODI0MTAxIj4iWsmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmljZUFsYXJtcyIgbXNnaWQ9IjQ3NjkzNTYzNjIyNTE2NDExNzUiPiJBbGFybSBxdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3ZvaWNlbWFpbCIgbXNnaWQ9IjQxNjIyMzcxNDUwMjc1OTIxMzMiPiJTyZlzbGkgcG/Dp3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3ZvaWNlbWFpbCIgbXNnaWQ9IjI0OTg0MDM5Njk4NjI5NTEzOTMiPiJTyZlzIHBvw6d0dW5hIGJpcmJhxZ9hIMOnxLF4xLHFny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWljcm9waG9uZSIgbXNnaWQ9IjE3MTUzOTkwMDI1MDA0MzQ2NCI+Ik1pa3JvZm9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19taWNyb3Bob25lIiBtc2dpZD0iNzEwNjYxODI4NjkwNTczODQwOCI+IkF1ZGlvIHlhem1hcSDDvMOnw7xuIG1pa3JvZm9uYSBiaXJiYcWfYSBnaXJpxZ8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbWVyYSIgbXNnaWQ9IjQ4MjAzNzI0OTU4OTQ1ODY2MTUiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbWVyYSIgbXNnaWQ9IjI5MzM2NjczNzIyODk1Njc3MTQiPiLFnsmZa2lsIHbJmSB5YSB2aWRlbyDDp8mZa23JmWsgw7zDp8O8biBrYW1lcmF5YSBiaXJiYcWfYSDDp8SxeMSxxZ8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NjcmVlbmxvY2siIG1zZ2lkPSI4Mjc1NTAwMTczMzMwNzE4MTY4Ij4iRWtyYW4ga2lsaWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zY3JlZW5sb2NrIiBtc2dpZD0iNzA2NzQ5NzEyODkyNTQ5OTQwMSI+IkNpaGF6xLFuxLF6ZGFrxLEga2lsaWQgZWtyYW7EsW7EsW4gaMmZcsmZa8mZdGluyZkgdMmZc2lyIGV0bcmZIGJhY2FyxLHEn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FwcEluZm8iIG1zZ2lkPSI4MDI4Nzg5NzYyNjM0MTQ3NzI1Ij4iVMmZdGJpcSBtyZlsdW1hdGxhcsSxbsSxeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXBwSW5mbyIgbXNnaWQ9IjM5NTAzNzg1MzgwNDk2MjU5MDciPiJDaWhhesSxbsSxemRha8SxIGRpZ8mZciB0yZl0YmlxbMmZcmluIGRhdnJhbsSxxZ/EsW5hIHTJmXNpciBldG3JmWsgYmFjYXLEscSfxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dhbGxwYXBlciIgbXNnaWQ9IjM4NTAyODAxNTgwNDExNzU5OTgiPiJEaXZhciBrYcSfxLF6xLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dhbGxwYXBlciIgbXNnaWQ9IjU2MzA0MTc4NTQ3NTA1NDAxNTQiPiJDaWhhesSxbiBkaXZhciBrYcSfxLF6xLEgYXlhcmxhcsSxbsSxIGTJmXlpxZ9pbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3lzdGVtQ2xvY2siIG1zZ2lkPSI0MDY1MzU3NTkyMzY2MTI5OTIiPiJTYWF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1DbG9jayIgbXNnaWQ9IjM5NDQzNTk4MzM2MjQwOTQ5OTIiPiJDaWhhesSxbiB2YXh0IHbJmSB6YW1hbiB6b2xhxJ/EsW7EsSBkyZl5acWfaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0YXR1c0JhciIgbXNnaWQ9IjIwOTU4NjI1NjgxMTM5NDUzOTgiPiJTdGF0dXMgcGFuZWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI2MjQyNTkzNDMyMjI2ODA3MTcxIj4iQ2loYXrEsW4gc3RhdHVzIHBhbmVsaSBheWFybGFyxLFuxLF6xLEgZMmZeWnFn2lyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeW5jU2V0dGluZ3MiIG1zZ2lkPSIzMzQxOTkwOTg2MTQ3ODI2NTQxIj4iU2lueCBBeWFybGFyxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5bmNTZXR0aW5ncyIgbXNnaWQ9Ijc2MDMxOTUyNjUxMjkwMzE3OTciPiJTaW54cm9uaXphc2l5YSBuaXphbWxhcsSxbmEgw6fEsXjEscWfLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2NvdW50cyIgbXNnaWQ9IjMzNTk2NDYyOTExMjUzMjU1MTkiPiJIZXNhYmxhcsSxbsSxeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjb3VudHMiIG1zZ2lkPSI0OTQ4NzMyNjQxODI3MDkxMzEyIj4ixo9sw6dhdMSxbWzEsSBoZXNhYmxhcmEgZGF4aWwgb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9Ijc5OTgyMTQ5Njg3OTE1OTkzMjYiPiJIYXJkd2FyZSBrb250cm9sbGFyxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2hhcmR3YXJlQ29udHJvbHMiIG1zZ2lkPSI0MzU3MDU3ODYxMjI1NDYyNzAyIj4iRMmZc3TJmWtkyZlraSBhdmFkYW5sxLHEn2EgYmlyYmHFn2EgZ2lyacWfLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9waG9uZUNhbGxzIiBtc2dpZD0iOTA2NzE3Mzk4ODMyNTg2NTkyMyI+IlRlbGVmb24gesmZbmdsyZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGhvbmVDYWxscyIgbXNnaWQ9Ijc0ODk3MDE2MjA0NDYxODM3NzAiPiJUZWxlZm9uIHrJmW5nbMmZcmluyZkgbsmZemFyyZl0IGVkaW4sIHFleWTJmSBhbMSxbiB2yZkgaWRhcsmZIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbVRvb2xzIiBtc2dpZD0iNDY1MjE5MTY0NDA4MjcxNDA0OCI+IlNpc3RlbSBhbMmZdGzJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1Ub29scyIgbXNnaWQ9IjgxNjIxMDI2MDIxOTA3MzQzMDUiPiJBxZ9hxJ/EsSBzyZl2aXl5yZlsaSDDp8SxeMSxxZ8gdsmZIHNpc3RlbSBpZGFyyZlldG3JmXNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iMzQ0NjE2NDU4NDcxMDU5NjUxMyI+IsSwbmtpxZ9hZiBhbMmZdGzJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iNzA1ODgyODAzMjM1ODE0MjAxOCI+IsOWesmZbGxpa2zJmXIgeWFsbsSxeiB0yZl0YmlxIGRldmVsb3BlcmzJmXJpIMO8w6fDvG4gbGF6xLFtZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiJEaWfJmXIgdMmZdGJpcSDEsHN0aWZhZMmZw6dpIMSwbnRlcmZleXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaXNwbGF5IiBtc2dpZD0iNjA1MTAwMjAzMTkzMzAxMzcxNCI+IkRpZ8mZciB0yZl0YmlxbMmZcmluIMSwc3RpZmFkyZnDp2kgxLBudGVyZmV5c2luyZkgdMmZc2lyIGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0b3JhZ2UiIG1zZ2lkPSIxOTcxMTE4NzcwNTQ2MzM2OTY2Ij4iWWFkZGHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4iVVNCIHlhZGRhxZ9hIGRheGlsIG9sLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiJTRCBrYXJ0YSBkYXhpbCBvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNzkxOTAyNTYwMjI4MzU5MzkwNyI+IsaPbMOnYXTEsW1sxLFsxLFxIGZ1bmtzaXlhbGFyxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9IjQyMDUxOTY4ODE2NzgxNDQzMzUiPiJZYXJkxLFtw6fEsSB0ZXhub2xvZ2l5YSB0yZlsyZliIGVkyZkgYmlsyZljyZl5aSBmdW5rc2l5YWxhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM5MDE3MTc5MzY5MzAxNzAzMjAiPiJQyZluY8mZcsmZbmluIG3JmXptdW51bnUgyZlsZMmZIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzc3MjIyNTAwODYwNTMxMDY3MiI+IsaPbGFxyZlkyZkgb2xkdcSfdW51eiBwyZluY8mZcsmZbmluIG3JmXptdW51bnUgbsmZesmZcmTJmW4ga2XDp2lyaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjMxMDg3MjMzNjQ2NzY2NjczMjAiPiJUb3h1bmFyYXEgS8mZxZ9mIGV0IGZ1bmtzaXlhc8SxbsSxIHlhbmTEsXLEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdFRvdWNoRXhwbG9yYXRpb24iIG1zZ2lkPSI1ODAwNTUyNTE2Nzc5MjQ5MzU2Ij4iVG94dW51bGFuIGhpc3PJmWzJmXIgc8mZc2zJmW5kaXJpbMmZY8mZayB2yZkgZWtyYW4gamVzdGzJmXJsyZkgaWRhcsmZIG9sdW5hIGJpbMmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNzM5ODgxNzY2NTIyNTk0MDczIj4ixLBua2nFn2FmIGV0bWnFnyB2ZWIgyZlsw6dhdMSxbWzEsWzEscSfxLEgeWFuZMSxcsSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iNzg4MTA2Mzk2MTUwNzUxMTc2NSI+IlNrcmlwdGzJmXIgdMmZdGJpcSBtyZl6bXVudW51biBkYWhhIMmZbMOnYXTEsW1sxLEgb2xtYXPEsSDDvMOnw7xuIHF1cmHFn2TEsXLEsWxhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSIyMTAzNDQwMzkxOTAyNDEyMTc0Ij4iWWF6ZMSxxJ/EsW7EsXogbcmZdG5pIGl6bMmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iS3JlZGl0IGthcnTEsSBuw7ZtcsmZbMmZcmkgdsmZIHBhcm9sbGFyIGtpbWkgxZ/JmXhzaSBtyZlsdW1hdGxhciBkYXhpbGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJzdGF0dXMgcGFuZWxpbmkgZGVha3RpdmzJmcWfZGlyIHbJmSB5YSBkyZl5acWfZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IlTJmXRiaXHJmSBzdGF0dXMgcGFuZWxpbmkgZGVha3RpdiBldG3JmXnJmSB2yZkgeWEgc2lzdGVtIGlrb25hbGFyxLFuxLEgyZlsYXbJmSBldG3JmWsgdsmZIHlhIHNpbG3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MjQ3MjgxOTExMzg3OTMxNDg1Ij4ic3RhdHVzIHBhbmVsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MTYxMTM2NjA3OTU5NzYwNjAiPiJUyZl0YmlxyZkgc3RhdHVzIHBhbmVsaSBvbG1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iMTE0ODE5ODc4NTkzNzQ4OTI2NCI+InN0YXR1cyBwYW5lbGluaSBnZW5pxZ9syZl0bcmZayB2yZkgeWEgecSxxJ9tYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSI2OTE3NTQ5NDM3MTI5NDAxMTMyIj4iVMmZdGJpccmZIHN0YXR1cyBwYW5lbGluaSBnZW5pxZ9syZluZGlybcmZecmZIHbJmSB5YSB5b3ggZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiJnZWTJmW4gesmZbmdsyZlyaW4gbWFyxZ9ydXR1bnUgZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjUzMzEzMTg5MzE5Mzc0MDIwNDAiPiJUyZl0YmlxyZkgesmZbmcgZXRtyZl5yZkgdsmZIHrJmW5nIGVkaWzJmW4gbsO2bXLJmW5pIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIGdlZMmZbiB6yZluZ2zJmXJpIGl6bMmZecmZLCB5w7ZubMmZbmRpcsmZIHbJmSB5YSBxYXLFn8Sxc8SxbsSxIGFsYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+IlNNUyBxyZlidWwgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiJUyZl0YmlxyZkgTU1TIG1lc2FqbGFyxLFuxLEgYWxtYXEgdsmZIGVtYWwgZXRtyZlrIGljYXrJmXNpIHZlcmlyLiBCdSBvIGRlbcmZa2RpciBraSwgdMmZdGJpcSBzaXppbiBtZXNhamxhcsSxbsSxesSxIHNpesmZIGfDtnN0yZlybcmZZMmZbiBtb25pdG9yaW5xIGVkyZkgdsmZIHlhIHNpbMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4ibcmZdG4gbWVzYWpsYXLEsW7EsSBxyZlidWwgZWRpciAoTU1TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVNbXMiIG1zZ2lkPSI1MzMwMTk0MzcyNjMyMTIyNjAiPiJUyZl0YmlxyZkgTU1TIG1lc2FqbGFyxLFuxLEgccmZYnVsIHbJmSBlbWFsIMO8w6fDvG4gaW1rYW4gdmVyaXIuIEJ1IG8gZGVtyZlrZGlyIGtpLCBidSB0yZl0YmlxIHNpesmZIGfDtnN0yZlybcmZZMmZbiBjaWhhesSxbsSxemEgZ8O2bmTJmXJpbMmZbiBtZXNhamxhcsSxwqBzaWzJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iMTgwMzQ3NzY2MDg0NjI4ODA4OSI+InTJmWNpbGkgeWF5xLFtbGFyxLEgccmZYnVsIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iODQ4NTI0MDcwMjYyNDMxOTc0Ij4iVMmZdGJpccmZIHTJmWNpbGkgeWF5xLFtIG1lc2FqbGFyxLFuxLEgccmZYnVsIHbJmSBlbWFsIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4gQnUgaWNhesmZIGFuY2FxIHNpc3RlbSB0yZl0YmlxbMmZcmkgw7zDp8O8biBtw7xta8O8bmTDvHIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSIxNTk4MzI4ODQzNjE5NjQ2MTY2Ij4ibW9iaWwgeWF5xLFtIG1lc2FqbGFyxLFuxLEgb3h1eXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iNjM2MTk3Mjc3NjA4MDQ1ODk3OSI+IlTJmXRiaXHJmSBzaXppbiB0ZWxlZm9udW51eiB0yZlyyZlmaW5kyZluIGFsxLFubcSxxZ8geWF5xLFtIG1lc2FqbGFyxLFuxLEgb3h1bWEgaWNhesmZc2kgdmVyaXIuIFRlbGVmb24geWF5xLFtxLEgYsmZemkgbcmZa2FubGFyZGEgb2xhbiBmw7Z2ccmZbGFkyZkgaGFkaXPJmWzJmXJsyZkgYmHEn2zEsSBzaXppIHjJmWLJmXJkYXIgZXRtyZlrIMO8w6fDvG4gccmZYnVsIGVkaWxpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGbDtnZxyZlsYWTJmSBtb2JpbCB5YXnEsW0gccmZYnVsIGVkaWxkaXlpIHphbWFuIHRlbGVmb251bnVuIHBlcmZvcm1hbnPEsW5hIHbJmSDJmW3JmWxpeXlhdMSxbmEgbcO8ZGF4aWzJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRTbXMiIG1zZ2lkPSI1NjAwODMwNjEyMTQ3NjcxNTI5Ij4iU01TIG1lc2FqbGFyxLFuxLEgZ8O2bmTJmXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRTbXMiIG1zZ2lkPSI3MDk0NzI5Mjk4MjA0OTM3NjY3Ij4iVMmZdGJpccmZIFNNUyBtZXNhasSxIGfDtm5kyZlybcmZIGljYXrJmXNpIHZlcmlyLiBCdSBnw7Z6bMmZbmlsbcmZecmZbiDDtmTJmW5pxZ9syZlyyZkgc8mZYsmZYiBvbGEgYmlsyZlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgc2l6aW4gdMmZc2RpcWluaXogb2xtYWRhbiBtZXNhaiBnw7ZuZMmZcm3JmWtsyZkgc2l6yZkgw7ZkyZluacWfyZkgc8mZYsmZYiBvbGEgYmlsyZlybMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4ibWVzYWpsYSBjYXZhYiB2ZXJpbG3JmWxpIHTJmWRiaXJsyZlyIGfDtm5kyZlybcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4iVMmZdGJpccmZIHrJmW5nbMmZciDDvMOnw7xuIFwibWVzYWpsYSBjYXZhYmxhXCIgaGFkaXPJmWzJmXJpbmkgaWRhcsmZIGV0bcmZayDDvMOnw7xuIGRpZ8mZciBtZXNhamxhxZ9tYSB0yZl0YmlxbMmZcmluyZkgc29yxJ91bGFyxLFuIGfDtm5kyZlyaWxtyZlzaSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTbXMiIG1zZ2lkPSI4NzQ1MDg2NTcyMjEzMjcwNDgwIj4idGVrc3QgbWVzYWpsYXLEsW7EsXrEsSBveHV5dXIgKFNNUyB2yZkgeWEgTU1TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI0Njc5ODE1NDg2ODQ3MzU1MjIiPiJUyZl0YmlxyZkgcGxhbsWfZXRpbml6ZMmZIHbJmSB5YSBTSU0ga2FydMSxbsSxemRhIHNheGxhbmFuIFNNUyBtZXNhamxhcsSxIG94dW1hxJ9hIGlta2FuIHZlcmlyLiBCdSBiw7x0w7xuIFNNUyBtZXNhamxhcsSxbiwgb25sYXLEsW4gbcmZem11bnVuZGFuIHbJmSBrb25maWRlbnNpYWxsxLHEn8SxbmRhbiBhc8SxbMSxIG9sbWFkYW4gb3h1bm1hc8SxIGlta2FuxLEgZGVtyZlrZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjk1OTY3NTMzNDU3MjQwNTUwIj4iVMmZdGJpccmZIHRlbGVmb251bnV6ZGEgdsmZIHlhIFNJTSBrYXJ0xLFuxLF6ZGEgc2F4bGFuYW4gU01TIG1lc2FqbGFyxLEgb3h1bWHEn2EgaW1rYW4gdmVyaXIuIEJ1IGLDvHTDvG4gU01TIG1lc2FqbGFyxLFuLCBvbmxhcsSxbiBtyZl6bXVudW5kYW4gdsmZIGtvbmZpZGVuc2lhbGzEscSfxLFuZGFuIGFzxLFsxLEgb2xtYWRhbiBveHVubWFzxLEgaW1rYW7EsSBkZW3JmWtkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNtcyIgbXNnaWQ9IjMyMTY5NTA0NzI2MzYyMTQ3NzQiPiJtyZl0biBtZXNhamxhcsSxbsSxesSxIHJlZGFrdMmZIGVkaXIgKFNNUyB2yZkgeWEgTU1TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4iVMmZdGJpccmZIHRlbGVmb251bnV6ZGEgdsmZIHlhIFPEsE0ga2FydMSxbsSxemRhIHllcmzJmcWfyZluIFNNUyBtZXNhamxhcmEgeWF6bWEgaWNhesmZc2kgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBzaXppbiBtZXNhamxhcsSxbsSxesSxIHNpbMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiJUyZl0YmlxyZkgdGVsZWZvbnVudXpkYSB2yZkgeWEgU8SwTSBrYXJ0xLFuxLF6ZGEgeWVybMmZxZ/JmW4gU01TIG1lc2FqbGFyYSB5YXptYSBpY2F6yZlzaSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIHNpemluIG1lc2FqbGFyxLFuxLF6xLEgc2lsyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI1OTkxMzk4NzExOTM2NTkwNDEwIj4ibcmZdG4gbWVzYWpsYXLEsSBxyZlidWwgZXRtyZlrIChXQVApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiJUyZl0YmlxyZkgV0FQIG1lc2FqbGFyIGfDtm5kyZlybcmZayB2yZkgeWEgccmZYnVsIGV0bcmZayBpbWthbsSxIHZlcmlyLiBCdW5hIG1lc2FqbGFyxLEgaXpsyZltyZlrIHbJmSBTaXrJmSB4yZliyZlyIHZlcm3JmWTJmW4gc2lsbcmZayBpbWthbmxhcsSxIGRhIGRheGlsZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4iacWfbMmZbsmZbiB0yZl0YmlxbMmZciDJmWxkyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VGFza3MiIG1zZ2lkPSI3NDU0MjE1OTk1ODQ3NjU4MTAyIj4iVMmZdGJpccmZIGhhesSxcmRhIHbJmSBheiDDtm5jyZkgacWfbMmZecmZbiB0YXDFn8SxcsSxcWxhciBoYXFxxLFuZGEgyZl0cmFmbMSxIG3JmWx1bWF0IMmZbGTJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4gQnUgZGEgY2loYXpkYSBoYW5zxLEgdMmZdGJpcWzJmXJpbiBpc3RpZmFkyZkgb2x1bm1hc8SxIGhhcXHEsW5kYSBtyZlsdW1hdGxhcsSxbiDJmWxkyZkgZWRpbG3JmXNpbsmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJhY3RBY3Jvc3NVc2VycyIgbXNnaWQ9IjcxMTQyNTUyODE5NDQyMTE2ODIiPiJpc3RpZmFkyZnDp2lsyZlyIGFyYXPEsW5kYSDJmWxhccmZIHF1cnVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJhY3RBY3Jvc3NVc2VycyIgbXNnaWQ9IjM2NDY3MDk2MzYyMzM4NTc4NiI+IlTJmXRiaXHJmSBidSBjaWhhemRha8SxIGRpZ8mZciBpc3RpZmFkyZnDp2lsyZlybMmZIG3DvHh0yZlsaWYgacWfbMmZcmkgZ8O2cm3JmXnJmSBpY2F6yZkgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZw6dpbMmZciBhcmFzxLFuZGFrxLEgcW9ydW5tYW7EsSBwb3ptYXEgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjI1Njc3MzQyODU1NDUwNzQxMDUiPiJiw7x0w7xuIGlzdGlmYWTJmcOnaWzJmXIgaWzJmSDJmWxhccmZIHNheGxhbWFxIMO8w6fDvG4gdGFtIGjDvHF1cSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMzc2ODQxMzY4Mzk1NTAyMzY2Ij4ixLBzdGlmYWTJmcOnaWzJmXIgYXJhc8SxbmRhIGLDvHTDvG4gbcO8bWvDvG4gyZlsYXHJmWzJmXLJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVVzZXJzIiBtc2dpZD0iMTY3NjE1MDkxMTY3MjI4MjQyOCI+ImlzdGlmYWTJmcOnaWzJmXJpIGlkYXLJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNlcnMiIG1zZ2lkPSI4NDA5MzA2NjY3NjQ1MzU1NjM4Ij4iVMmZdGJpcWzJmXLJmSBjaWhhemRhIG9sYW4gaXN0aWZhZMmZw6dpbMmZcmksIGhhYmVsyZkgc29yxJ91IGfDtm5kyZlybcmZLCB5YXJhdG1hIHbJmSBzaWxtyZkgaXpuaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4iacWfbMmZbsmZbiB0yZl0YmlxbMmZcmluIGRldGFsbGFyxLFuxLEgyZlsZMmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSIxNTM4MjQ3NDE0NDA3MTc1OTkiPiJUyZl0YmlxyZkgaGF6xLFyZGEgdsmZIGF6IMO2bmPJmSBpxZ9syZl5yZluIHRhcMWfxLFyxLFxbGFyIGhhcXHEsW5kYSDJmXRyYWZsxLEgbcmZbHVtYXQgyZlsZMmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZayDFn8mZeHNpIG3JmWx1bWF0bGFyxLEgb8SfdXJsYXlhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9IjIwMTg1NzU1MjY5MzQ0MjI3NzkiPiJpxZ9syZluyZluIHTJmXRiaXFsyZlyaW4gc8SxcmFzxLFuxLEgZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW9yZGVyVGFza3MiIG1zZ2lkPSI3NzM0MjE3NzU0ODc3NDM5MzUxIj4iVMmZdGJpccmZIHRhcMWfxLFyxLFxbGFyxLEgw7ZuIHBsYW5kYW4gYXJ4YSBwbGFuYSBrZcOnaXJtyZl5yZkgaW1rYW4gdmVyaXIuIFTJmXRiaXEgYnVudSBTaXppbiBkYXhpbGV0bcmZbml6IG9sbWFkYW4gZGEgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW1vdmVUYXNrcyIgbXNnaWQ9IjY4MjE1MTM0MDE4NzAzNzc0MDMiPiJpxZ9syZlrIHTJmXRiaXFsyZlyaSBkYXlhbmTEsXLEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW1vdmVUYXNrcyIgbXNnaWQ9IjEzOTQ3MTQzNTIwNjI2MzU0OTMiPiJUyZl0YmlxyZkgdGFwxZ/EsXLEsXFsYXLEsSBzaWxtyZl5yZkgdsmZIG9ubGFyxLFuIHTJmXRiaXFsyZlyaW5pIG3JmWh2IGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZayBkaWfJmXIgdMmZdGJpcWzJmXJpbiBpxZ9syZlyaW5pIGRheWFuZMSxcmEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSI3MzkxMTkxMzg0MDI3MzAzMDY1Ij4iZsmZYWxpeXnJmXQgdG9wbHVsYXLEsW7EsSBpZGFyyZkgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iMTYxNTg4MTkzMzAzNDA4NDQ0MCI+IlTJmXRiaXHJmSBkaWfJmXIgdMmZdGJpcWzJmXJpbiBmyZlhbGl5ecmZdGkgZGF4aWxpbmTJmSBmyZlhbGl5ecmZdCB0b3BsdWxhcsSxbsSxIMmZbGF2yZkgZXRtyZlrLCBzaWxtyZlrIHbJmSBkyZl5acWfbcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9IjI5MTg3NjgyMzgwNDUyMDY0NTYiPiJoyZlyIGhhbnPEsSBiaXIgZsmZYWxpeXnJmXQgYmHFn2xhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSI5OTc4MjM2OTUzNDM1ODQwMDEiPiLEsGNhesmZIHFvcnVubWFzxLEgdsmZIHlhIGVrc3BvcnQgZWRpbG1pxZ8gc3RhdHVzZGFuIGFzxLFsxLEgb2xtYXlhcmFxLCB0yZl0YmlxyZkgaMmZciBoYW5zxLEgZsmZYWxpeXnJmXRpIGJhxZ9sYXRtYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTc1Mzg3MTE4ODYxODQyMDYxIj4iZWtyYW4gdXnEn3VubHXEn3VudSB5ZXJsyZnFn2RpcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5MjA0MzYxODY5MzkxNzM3NCI+IlTJmXRiaXHJmSBkaWfJmXIgdMmZdGJpcWzJmXJpbiBla3JhbiB1ecSfdW5sdcSfdW51IHlveGxhbWFxIGlta2FuxLEgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBkaWfJmXIgdMmZdGJpcWzJmXJpbiBmyZlhbGl5ecmZdGluaSBwb3phIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldERlYnVnQXBwIiBtc2dpZD0iMzAyMjEwNzE5ODY4NjU4NDA1MiI+InTJmXRiaXEgc2F6bGFubWFzxLFuxLEgYWt0aXYgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldERlYnVnQXBwIiBtc2dpZD0iNDQ3NDUxMjQxNjI5OTAxMzI1NiI+IlTJmXRiaXHJmSBkaWfJmXIgYmlyIHTJmXRiaXEgw7zDp8O8biBzYXpsYW1hbsSxIGHDp21hcSDDvMOnw7xuIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVudSBkaWfJmXIgdMmZdGJpcWzJmXJpIHlveCBldG3JmWsgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb25maWd1cmF0aW9uIiBtc2dpZD0iNDE2MjA5MjE4NTEyNDIzNDQ4MCI+InNpc3RlbSBla3JhbiBuaXphbWxhcsSxbsSxIGTJmXlpxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb25maWd1cmF0aW9uIiBtc2dpZD0iNDM3MjIyMzg3MzE1NDI5NjA3NiI+IlTJmXRiaXHJmSB5ZXJsaSBwYXJhbWV0cmzJmXIgdsmZIHlhIMWfcmlmdGluIMO2bMOnw7xzw7wga2ltaSBjYXJpIGtvbmZpcXVyYXNpeWFuxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI1Njg0NTA0MDU4MTkyOTIxMDk4Ij4iYXZ0b21vYmlsIHJlamltaW5pIGFrdGl2bMmZxZ9kaXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI0ODUzMTg3NDI1NzUxNDE5NDY3Ij4iVMmZdGJpccmZIGF2dG9tb2JpbCByZWppbWluaSBha3RpdmzJmcWfZGlybcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSIzOTE0MDI2Njg3NDIwMTc3MjAyIj4iZGlnyZlyIHTJmXRiaXFsyZlyaSBxYXBhdG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iNDU5MzM1MzIzNTk1OTczMzExOSI+IlTJmXRiaXHJmSBiYcWfcWEgdMmZdGJpcWzJmXJpbiBhcnhhZm9uIHByb3Nlc2zJmXJpbmkgZGF5YW5kxLFybWFxIGljYXrJmXNpIHZlcmlyLiBCdSBkaWfJmXIgdMmZdGJpcWzJmXJpbiBkYXlhbm1hc8SxbmEgc8mZYsmZYiBvbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSIyMzI5NjI3NDI4ODMyMDY3NzAwIj4iRGlnyZlyIHTJmXRiaXFsyZlyaSBkYXlhbm1hxJ9hIG3JmWNidXIgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjUyNTMxNTcyOTYxODM5NDA4MTIiPiJUyZl0YmlxyZkgZGlnyZlyIHTJmXRiaXFsyZlyaSBtyZljYnVyaSDFn8mZa2lsZMmZIGRheWFuZMSxcm1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VCYWNrIiBtc2dpZD0iNjUyOTM1MjA0MDcyNTg0NjE2Ij4idMmZdGJpcWkgcWFwYW5tYcSfYSBtyZljYnVyIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlQmFjayIgbXNnaWQ9IjM4OTIyOTU4MzA0MTk1MTM2MjMiPiJUyZl0YmlxyZkgw7ZuIHBsYW5kYSBvbGFuIGlzdMmZbmlsyZluIHTJmXRiaXFpIGJhxJ9sYXlhcmFxIGdlcml5yZkgZMO2bm3JmXnJmSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaGXDpyB2YXh0IGlzdGlmYWTJmSBvbHVubWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kdW1wIiBtc2dpZD0iMTY4MTc5OTg2MjQzODk1NDc1MiI+InNpc3RlbWluIGRheGlsaSBkdXJ1bXVudSBiyZlycGEgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+IlTJmXRiaXHJmSBzaXN0ZW1pbiBkYXhpbGkgc3RhdHVzdW51IGLJmXJwYSBldG3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGxhesSxbSBvbG1hZMSxxJ/EsSBoYWxkYSBtw7x4dMmZbGlmIMWfyZl4c2kgdsmZIGfDvHbJmW5saSBtyZlsdW1hdGxhcsSxIGLJmXJwYSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iODAyMjU4ODYwODk5NDU4OTkzOCI+ImVrcmFuIGtvbnRlbnRpbmkgYsmZcnBhIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjMxOTMyNjkwNjk0Njk3MDAyNjUiPiJUyZl0YmlxyZkgYWt0aXYgcMmZbmPJmXLJmW5pbiBtyZl6bXVudW51IMmZbGTJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgcMmZbmPJmXLJmSBtyZl6bXVudW51IMmZbMmZIGtlw6dpcmliIHBhcm9sbGxhcsSxIG94dXlhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjIzMTI2MTIxMzUxMjczMTAyNTQiPiJnaXJpxZ8gaW1rYW7EsW7EsSBtw7x2yZlxccmZdGkgYcOnbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iODA3OTQ1NjI5MzE4Mjk3NTQ2NCI+IlTJmXRiaXHJmSBjaWhhemEgZ2lyacWfaSBtw7x2yZlxccmZdGkgb2xhcmFxIGFrdGl2bMmZxZ9kaXJtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBpc3RpZmFkyZnDp2kgcmF6xLFsxLHEn8SxIG9sbWFkYW4gZ2lyacWfaSBha3RpdmzJmcWfZGlyyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI4NTMyMjk1MTk5MTEyNTE5Mzc4Ij4icMmZbmPJmXLJmSBpbmZvc3VudSBiyZlycGEgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iNDk5ODgzNjM3MDQyNDE4Njg0OSI+IlTJmXRiaXHJmSBwyZluY8mZcsmZIGlkYXLJmcOnaXNpbmTJmW4gZ8mZbMmZbiB3aW5kb3dzIGhhcXHEsW5kYSBvbGFuIG3JmWx1bWF0xLEgYsmZcnBhIGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgZGF4aWxpIHNpc3RlbSBpc3RpZmFkyZlzaSDDvMOnw7xuIG7JmXrJmXJkyZkgdHV0dWxhbiBtyZlsdW1hdMSxIGLJmXJwYSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4Njc1NTM1NjQ4ODA3NDI3Mzg5Ij4idMmZZGJpcmzJmXJpIGZpbHRyIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODAwNjIzNjMxNTg4ODM0NzY4MCI+IlTJmXRiaXHJmSBkYXhpbGV0bcmZIGZpbHRyaW5pIHFleWRpeXlhdCBldGRpcm3JmXnJmSBpbWthbiB2ZXJpciwgYnUgZmlsdHIgYsO8dMO8biBpc3RpZmFkyZnDp2kgdMmZZGJpcmzJmXJpbmkgZ8O2bmTJmXJpbG3JmW1pxZ9kyZluIMmZdnbJmWwgZmlsdHJkyZluIGtlw6dpcmlyLiBayZlyyZlybGkgdMmZdGJpcSBpc3RpZmFkyZnDp2kgbcO8ZGF4aWzJmXNpIG9sbWFkYW4gxLBzdGlmYWTJmcOnaSDEsG50ZXJmZXlzaSBzaXN0ZW1pbsmZIG7JmXphcsmZdCBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjU5NzM2MjY3MzgxNzA2MTg3NzUiPiJla3JhbsSxIGLDtnnDvGTDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI3MTIxMjM1Njg0NTE1MDAzNzkyIj4iVMmZdGJpccmZIGVrcmFuIGtvbnRlbnRpbmkgYsO2ecO8dG3JmWsgaWNhesmZc2kgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIGVrcmFuZGEga29udGVudGkgYsO2ecO8ZMmZcsmZayBjaWhhesSxbiBxZXlyaS1zdGFiaWxsaXlpbsmZIHPJmWLJmWIgb2xhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NodXRkb3duIiBtc2dpZD0iNzE4NTc0NzgyNDAzODkwOTAxNiI+InFpc23JmW4gc8O2bmTDvHLDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaHV0ZG93biIgbXNnaWQ9IjcwNDY1MDA4Mzg3NDYyOTE3NzUiPiJBa3RpdmxpayBpZGFyyZnDp2lsaXlpbmkgcWFwYW5txLHFnyBoYWxhIGfJmXRpcmlyLiBUYW0gcWFwYW5tYW7EsSBoyZl5YXRhIGtlw6dpcm1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjQxMzg2MDg2MTA3MTc0MjU1NzMiPiJ0yZl0YmlxZMmZbiB0yZl0YmlxyZkga2XDp2lkaW4gcWFyxZ/EsXPEsW7EsSBhbG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjgyNjIxOTU4MDI1ODIyNTUwMjEiPiLEsHN0aWZhZMmZw6dpbmluIGJhxZ9xYSB0yZl0YmlxyZkga2XDp23JmXNpbmluIHFhcsWfxLFzxLFuxLEgYWzEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSIyNTM3OTIyMzExNDExNTQ2MDE2Ij4iY2FyaSB0yZl0YmlxIGluZm9ybWFzaXlhc8SxIMmZbGTJmSBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSI4MTUzNjUxNDM0MTQ1MTMyNTA1Ij4iU2FoaWLJmSBla3JhbiDDtm7DvG5kyZkgY2FyaSB0yZl0YmlxIHbJmSB4aWRtyZl0bMmZciBoYXFxxLFuZGEgxZ/JmXhzaSBtyZlsdW1hdCDJmWxkyZkgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ydW5TZXRBY3Rpdml0eVdhdGNoZXIiIG1zZ2lkPSI4OTIyMzkwOTQ4NjcxODI2NTYiPiJpxZ/JmSBzYWzEsW5hbiBiw7x0w7xuIHTJmXRiaXFsyZlyaSBpemzJmXlpciB2yZkgaWRhcsmZIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ydW5TZXRBY3Rpdml0eVdhdGNoZXIiIG1zZ2lkPSI2MDAzNjAzMTYyNTc4NTc3NDA2Ij4iVMmZdGJpccmZIHNpc3RlbWluIGbJmWFsaXl5yZl0bMmZcmkgbmVjyZkgYmHFn2xhdGTEscSfxLFuxLEgbsmZemFyyZl0IHbJmSBrb250cm9sIGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgc2lzdGVtaSB0YW1hbWlsyZkga29tcHJvbWlzIGVkyZkgYmlsyZlyLiBCdSBpY2F6yZkgeWFsbsSxeiBpbmtpxZ9hZiDDvMOnw7xuZMO8ciwgaGXDpyB2YXh0IG5vcm1hbCBpc3RpZmFkyZkgw7zDp8O8biBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iMjU3NjMzMzQzNDg5MzUzMjQ3NSI+InFhbGTEsXLEsWxtxLHFnyB5YXnEsW0gcGFrZXRpbmkgZ8O2bmTJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjY2MjE5MDEyMTYyMDc5MzEwODkiPiJUyZl0YmlxyZkgdMmZdGJpcSBwYWtldGluaW4gc2lsaW5tyZlzaSBoYXFxxLFuZGEgYmlsZGlyacWfIHRyYW5zbGFzaXlhIGV0bcmZIGljYXrJmXNpIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGRpZ8mZciBpxZ9syZlrIHTJmXRiaXFsyZlyaSBkYXlhbmTEsXJtYXEgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiJTTVMgdMmZcsmZZmluZMmZbiBxyZlidWwgZWRpbMmZbiB5YXnEsW0gZ8O2bmTJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiJUyZl0YmlxyZkgbWVzYWogZ8mZbG3JmXNpIGhhcXHEsW5kYSBiaWxkaXJpxZ9pIHlhecSxbWxhbWFxIGlta2FuxLEgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gZ8mZbMmZbiBTTVMgbWVzYWpsYXLEsW7EsSBzYXh0YWxhxZ9kxLFybWFxIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjMxNDUzNDc0MTMwMjg1ODIzNzEiPiJXQVAtUFVTSCB0yZlyyZlmaW5kyZluIHHJmWJ1bCBlZGlsyZluIHlhecSxbSBnw7ZuZMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4iVMmZdGJpccmZIFdBUCBQVVNIIG1lc2FqxLFuIGFsxLFuZMSxxJ/EsSBoYXFkYSBiaWxkaXJpxZ8gdHJhbnNsYXNpeWEgZXRtyZl5yZkgaWNhesmZIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZayBzYXh0YSBNTVMgbWVzYWogYWzEscWfxLEgdsmZIHlhIHPJmXNzaXpjyZkgaXN0yZluaWzJmW4gdmViIHPJmWhpZsmZbmkgesmZcsmZcnZlcmljaSB2YXJpYW50bGFybGEgZMmZeWnFn23JmWsgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSIyNDUxODczNjY0MzYzNjYyNjY2Ij4iw6dhbMSxxZ9hbiBwcm9zZXNsyZlyaW4gc2F5xLFuxLEgbcmZaGR1ZGxhxZ9kxLFyxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iNzMxODA2MTMxNDA0MDg3OTU0MiI+IlTJmXRiaXHJmSBpxZ9syZlkaWzJmWPJmWsgbWFrc2ltdW0gcHJvc2VzIHNhecSxbsSxIGlkYXLJmSBldG3JmSBpem5pIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB0yZlsyZliIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiJhcnhhZm9uIHTJmXRiaXFsyZlyaW5pIGRheWFubWHEn2EgbcmZY2J1ciBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNzQ3MTMxMDY1Mjg2ODg0MTQ5OSI+IlTJmXRiaXHJmSBha3Rpdml0aWzJmXJpbiBhcnhhIGZvbmEgZ2V0ZGl5aSB6YW1hbiBiaXRtyZlzaW5pIHlveGxhecSxci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gdMmZbMmZbiBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmF0dGVyeVN0YXRzIiBtc2dpZD0iMjc4OTYxMDY3MzUxNDEwMzM2NCI+ImJhdGFyZXlhIHN0YXRpc3Rpa2FsYXLEsW7EsSBveHVtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI1ODk3MzQ2NTgyODgyOTE1MTE0Ij4iVMmZdGJpccmZIGNhcmkgYcWfYcSfxLEgc8mZdml5ecmZbGkgZGF0YSBzaXRpZmFkyZlzaW5pIG94dW1hcSBpbWthbsSxIHZlcmlyLiBUyZl0YmlxyZkgaGFuc8SxIHTJmXRiaXFpIGlzdGlmYWTJmSBldGRpeWluaXogaGFxccSxbmRhIMmZdHJhZmzEsSBtyZlsdW1hdCB0YXBtYcSfYSBpbWthbiB2ZXLJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIzNzE5Njg5NzY0NTM2Mzc5NTU3Ij4iYmF0YXJleWEgc3RhdGlzdGlrYWxhcsSxbsSxIGTJmXlpxZ9tyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQmF0dGVyeVN0YXRzIiBtc2dpZD0iNjg2MjgxNzg1NzE3ODAyNTAwMiI+IlTJmXRiaXHJmSB5xLHEn8SxbG3EscWfIGJhdGFyZXlhIHN0YXRpc3Rpa2FzxLFuxLEgcmVkYWt0yZkgZXRtyZkgaWNhesmZc2kgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsbWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSIxNTA4Nzc5Njg3NDM2NTg1NzQ0Ij4idMmZdGJpcSDJmW3JmWxpeXlhdCBzdGF0aXN0aWthbGFyxLFuxLEgyZlsZMmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iNjI0Mzg4NzA0MTU3NzkxMjg3NyI+IlRvcGxhbm3EscWfIHTJmXRiaXEgyZltyZlsaXl5YXQgc3RhdGlzdGlrYWxhcsSxbsSxbiBiyZlycGEgZWRpbG3JmXNpbsmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgw7zDp8O8biBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUFwcE9wc1N0YXRzIiBtc2dpZD0iODgyOTA5NzM3Mzg1MTUyMTUwNSI+InTJmXRiaXEgyZltyZlsaXl5YXQgc3RhdGlzdGlrYXPEsW7EsSBkyZl5acWfbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUFwcE9wc1N0YXRzIiBtc2dpZD0iNTA3ODQ1OTY1OTQ0MDM0ODMiPiJUyZl0YmlxyZkgdG9wbGFubcSxxZ8gdMmZdGJpcSDJmW3JmWxpeXlhdCBzdGF0aXN0aWthc8SxbsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmFja3VwIiBtc2dpZD0iNDcwMDEzMDIyODY1NDUzOTIwIj4ic2lzdGVtIHllZMmZa2zJmW3JmXNpIHbJmSBiyZlycGFzxLFuxLEgaWRhcsmZIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYWNrdXAiIG1zZ2lkPSI2OTEyMjMwNTI1MTQwNTg5ODkxIj4iVMmZdGJpccmZIHNpc3RlbWkgcmV6ZXJ2IGV0bcmZecmZIHbJmSBtZXhhbml6bWkgYsmZcnBhIGV0bcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbG3JmWsgw7zDp8O8biBuyZl6yZlyZMmZIHR1dHVsbWF5xLFiLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSI1NTU3MDcxMzI1ODA0NDY5MTAyIj4idGFtIHJlemVydmkgdMmZc2RpcSBldG3JmWsgdsmZIHlhIMmZbcmZbGl5eWF0xLEgYsmZcnBhIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4iVMmZdGJpccmZIMSwc3RpZmFkyZnDp2kgxLBudGVyZmV5c2kgdGFtIHJlemVydiB0yZlzZGlxaW5pIGnFn8mZIHNhbG1hxJ9hIGlta2FuIHZlcmlyLiBIZcOnIGJpciB0yZl0YmlxIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIG9sdW5tYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iMjE0ODU2MzYyODE0MDE5MzIzMSI+ImljYXrJmXNpeiBwyZluY8mZcsmZbMmZcmkgZ8O2csO8bnTDvGzJmXlpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iNzQ1ODM4Nzc1OTQ2MTQ2NjM5NyI+IlTJmXRiaXHJmSBkYXhpbGkgc2lzdGVtIGludGVyZmV5c2kgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbG3JmXNpIMO8w6fDvG4gbsmZesmZcmTJmSB0dXR1bG11xZ8gcMmZbmPJmXLJmWzJmXJpIHlhcmF0bWHEn2EgaWNhesmZIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbG1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iMzU0MzM0Nzk4MDgzOTUxODYxMyI+ImRpZ8mZciB0yZl0YmlxbMmZciDDvHrJmXJpbmTJmSDDp8mZa23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9Ijg1ODQ2NzgzODE5NzI4MjAxMTgiPiJUyZl0YmlxyZkgZGlnyZlyIHTJmXRiaXFsyZlyaW4gdsmZIHlhIG9ubGFyxLFuIGhpc3PJmWzJmXJpbmluIHl1eGFyxLFzxLFuZGEgxZ/JmWtpbCDDp8mZa23JmXnJmSBpbWthbiB2ZXJpci4gT25sYXIgaXN0yZluaWzJmW4gdMmZdGJpcWluIGludGVyZmV5c2luaW4gaXN0aWZhZMmZc2luyZkgbcO8ZGF4aWzJmSBlZMmZIHbJmSB5YSBkaWfJmXIgdMmZdGJpcWzJmXJkyZkgYXh0YXJkxLFxbGFyxLFuxLF6xLEgZMmZeWnFn8mZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iMjgwNTEwMzI0MTE1MzkwNzE3NCI+InFsb2JhbCBhbmltYXNpeWEgc8O8csmZdGluaSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9Ijc2OTAwNjM0Mjg5MjQzNDM1NzEiPiJUyZl0YmlxyZkgaXN0yZluaWzJmW4gdmF4dCBxbG9iYWwgYW5pbWFzaXlhIHPDvHLJmXRpbmkgKHPDvHLJmXRsaSB2yZkgeWEgeWF2YcWfIGFuaW1hc2l5YWxhcikgZMmZeWnFn2Rpcm3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjEyODY1MDU3MTcwNTAxMjEzNzAiPiJ0yZl0YmlxIG5pxZ9hbmxhcsSxbsSxIGlkYXLJmSBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSI4MDQzNDMxNzEzMDE0Mzk1NjcxIj4iVMmZdGJpcWzJmXLJmSBvbmxhcsSxbiBub3JtYWwgWi1vcmRlcmlucWkga2XDp8mZcsmZayBtYXJrZXJsyZlyaW5pIHlhcmF0bWEgdsmZIGlkYXLJmWV0bcmZIGljYXrJmXNpIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9IjQ3MDgxODExODQ0NDE4ODAxNzUiPiJla3JhbsSxIGRvbmR1cnVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZnJlZXplU2NyZWVuIiBtc2dpZD0iODU1ODkyMzc4OTIyMjY3MDA2NCI+IlTJmXRiaXHJmSB0YW0gZWtyYW5sxLEgeWF5xLFtIMO8w6fDvG4gZWtyYW7EsSBtw7x2yZlxccmZdGkgb2xhcmFxIGRvbmR1cm1hIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5qZWN0RXZlbnRzIiBtc2dpZD0iMTM3ODc0NjU4NDAyMzU4NjYwMCI+ImTDvHltyZlsyZlyaSB2yZkgaWRhcsmZZXRtyZkgZMO8eW3JmWzJmXJpbmkgYmFzxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5qZWN0RXZlbnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDYzNTI1NjU1OTk5Njg2MzIiPiJUyZl0YmlxyZkgw7Z6w7xuw7xuIGRheGlsZXRtyZkgdMmZZGJpcmzJmXJpbmkgZGlnyZlyIHTJmXRiaXFsyZlyyZkgw6dhdGTEsXJtYcSfYSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIHBsYW7Fn2V0aSDJmWzJmSBrZcOnaXJtyZlrIMO8w6fDvG4gYnVuZGFuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTMxMjgwNTc1NzIzMjYyNTMiPiJUyZl0YmlxyZkgw7Z6w7xuw7xuIGRheGlsZXRtyZkgdMmZZGJpcmzJmXJpbmkgZGlnyZlyIHTJmXRiaXFsyZlyyZkgw6dhdGTEsXJtYcSfYSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIHRlbGVmb251IMmZbMmZIGtlw6dpcm3JmWsgw7zDp8O8biBidW5kYW4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI0Njk0Mjg5MDAwNDEyNDkyMzQiPiJ5YXpkxLFxbGFyxLFuxLF6xLEgdsmZIGV0ZGlrbMmZcmluaXppIGl6bMmZeWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI4Mzg3NzU0OTAxNjg4NzI4MDQzIj4iVMmZdGJpccmZIGJhc2TEscSfxLFuxLF6IGTDvHltyZlsyZlyaSBpemzJmW3JmWsgaW1rYW7EsSB2ZXJpbGlyLiBCdW5hIHBhcm9sbGFyxLFuIHbJmSBrcmVkaXQga2FydMSxIG7Dtm1yyZlsyZlyaW5pbiB5YXrEsWxtYXPEsSBkYSBhaWRkaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzM2MDA2NDYyMDIzMDUxNTc3NiI+ImRheGlsZXRtyZkgbWV0b2R1bmEgYmHEn2xhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMyNTA0NDAzMjI4MDcyODYzMzEiPiJTYWhpYmluyZkgZGF4aWxldG3JmSBtZXRvZHVudW4gyZluIMO8c3Qgc8mZdml5ecmZIGludGVyZmV5c2luyZkgYmHEn2xhbWFxIGlta2FuxLEgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjUzNTc3MzM5NDI1NTYwMzE1OTMiPiJnaXJpxZ8geGlkbcmZdGluyZkgYmHEn2zEsSBxYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI3MDM0NjE1OTI4NjA5MzMxMzY4Ij4iU2FoaWLJmSBnaXJpxZ8geGlkbcmZdGluIMmZbiDDvHN0IHPJmXZpeXnJmSBpbnRlcmZleXNpIGJhxJ9sYW1hxJ9hIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBoZcOnIHZheHQgbGF6xLFtIG9sbWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iODQ2MjgxNTE3OTU3Mjc0ODc2MSI+IsOnYXAgc2VydmlzaW5pIHFvxZ9tYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI3OTYwMDY3NjIzMjA5MTExMTM1Ij4iU2FoaWJpbsmZIGJpciDDp2FwIHhpZG3JmXRpbmluIMmZbiDDvHN0IHPJmXZpecmZIGFyYcO8esO8bsO8IGJhxJ9sYW1hxJ9hIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBoZcOnIHZheHQgbGF6xLFtIG9sbWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTcG9vbGVyU2VydmljZSIgbXNnaWQ9IjY4MDc3NjI3ODM3NDQxMjU5NTQiPiLDp2FwIHNwdWxlciBzZXJ2aXNpbsmZIHFvxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTcG9vbGVyU2VydmljZSIgbXNnaWQ9IjM2ODA1NTIyODU5MzMzMTgzNzIiPiJTYWhpYmluyZkgw6dhcCBzcHVsZXIgeGlkbcmZdGluaW4gyZluIMO8c3Qgc8mZdml5ecmZIGludGVyZmV5c2luyZkgYmHEn2xhbWHEn2EgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iMjc1MjczMTMwMDQxOTQxMDcyNCI+Ik5GQyB4aWRtyZl0bMmZcmluyZkgcW/Fn3VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4iU2FoaWJpbsmZIE5GQyBrYXJ0bGFyxLFuxLEgZW11bHlhc2l5YSBlZMmZbiB0yZl0YmlxbMmZcmkgYmlyLWJpcmluyZkgcW/Fn21hxJ9hIGljYXrJmSB2ZXJpbi4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gbGF6xLFtIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iNzM1ODM3ODQwMTkxNTI4NzkzOCI+Im3JmXRuIHNlcnZpc2luaSBxb8WfbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI4MTUxOTY4OTEwOTczOTk4NjcwIj4iU2FoaWJpbsmZIGJpciBtyZl0biB4aWRtyZl0aW5pbiDJmW4gw7xzdCBzyZl2aXl5yZkgYXJhw7x6w7xuw7wgYmHEn2xhbWHEn2EgaW1rYW4gdmVyaXIobcmZc8mZbMmZbiwgU3BlbGxDaGVja2VyU2VydmljZSkuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iNDcwODU5NjAyMTE2MTQ3MzI1NSI+IlZQTiB4aWRtyZl0yZkgyZlsYXHJmWzJmW5kaXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iU2FoaWJpbsmZIGJpciBWcG4geGlkbcmZdGluaW4gyZluIMO8c3Qgc8mZdml5ecmZIGFyYcO8esO8bsO8IGJhxJ9sYW1hxJ9hIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBoZcOnIHZheHQgbGF6xLFtIG9sbWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ImRpdmFyIGthxJ/EsXrEsW5hIGJhxJ9sYW7EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkNpaGF6IHNhaGliaW7JmSB5dXhhcsSxIHPJmXZpeXnJmWxpIGRpdmFyIGthxJ/EsXrEsSBpbnRlcmZleXNpbmkgY2lsZGzJmW3JmXnJmSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIG9sdW5tYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJ3aWRnZXQgc2VydmlzaW5pIHFvxZ9tYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJTYWhpYmluyZkgdmlkY2V0IHNlcnZpc2luIHnDvGtzyZlrIHPJmXZpeXnJmWxpIGludGVyZmV5c2kgaWzJmSDJmWxhccmZIHNheGxhbWFxIGljYXrJmXNpIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBoZcOnIHZheHQgaXN0yZluaWxtyZltyZlsaWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJjaWhheiBhZG1pbmkgaWzJmSDDvG5zaXl5yZl0IHF1cm1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9IjU2OTcxNTQxOTU0MzkwNzkzMCI+IlNhaGliaW7JmSBiaXIgY2loYXogaWRhcsmZw6dpc2luyZkgcGxhbmxhciBnw7ZuZMmZcm3JmWsgw7zDp8O8biBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gaGXDpyB2YXh0IGxhesSxbSBvbG1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNDI0ODgyODkwMDA0NTgwODcyMiI+ImNpaGF6IGFkbWluaSDJmWxhdsmZIGVkaW4gdsmZIHlhIHNpbGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+IlNhaGliaW7JmSBha3RpdiBjaWhheiBhZG1pbmlzdHJhdG9ybGFyxLFuxLEgyZlsYXbJmSBldG3JmXnJmSB2yZkgeWEgc2lsbcmZecmZIGljYXrJmSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gdMmZbMmZYiBvbHVubWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMzNjU5NDc3MTcxNjM4NjY4NDQiPiJla3JhbiBvcml5ZW50YXNpeWFzxLFuxLEgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMDQ2MTI2NjE5MzE2NjcxNDc2Ij4iVMmZdGJpccmZIGlzdMmZbmlsyZluIHphbWFuIGVrcmFuxLFuIHbJmXppeXnJmXRpbmkgZMmZeWnFn23JmSBpY2F6yZlzaSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gdMmZbMmZYiBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iOTE3NTM3MTYxMzMyMjU2MjkzNCI+Imt1cnNvciBzw7xyyZl0aW5pIGTJmXlpxZ9tyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iNjg2NjU2MzIzNDI3NDEwNDIzMyI+IlTJmXRiaXHJmSBtYXVzdW4gdsmZIHlhIHRyZWtwZWRpbiBrdXJzb3Igc8O8csmZdGluaSBpc3TJmW5pbMmZbiB6YW1hbiBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI0Nzc4NzMxNzAzNjAwOTA5MzQwIj4ia2xhdmlhdHVyYSBzeGVtaW5pIGTJmXlpxZ9pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iODQ4MDAxNjc3MTEzNDE3NTg3OSI+IlTJmXRiaXHJmSBrbGF2aWF0dXJhIHN4ZW1pbmkgZMmZeWnFn23JmWsgaW1rYW7EsSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gdMmZbMmZYiBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ1MzkwMDI5OTE5NDczNzY2NTkiPiJ0yZl0YmlxbMmZcsmZIExpbnV4IHNpcW5hbGxhcsSxIGfDtm5kyZlyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDg5Njk5MjA3OTE4MjY0OTE0MSI+IlTJmXRiaXHJmSBiw7x0w7xuIGRhdmFtbMSxIHByb3Nlc2zJmXLJmSBzaXFuYWwgc2/En3J1c3UgZ8O2bmTJmXJtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4idMmZYmlxaSBoyZltacWfyZkgw6dhbMSxxZ9kxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTI1MTg5MjcyMzI5MDg2MTM3Ij4iVMmZdGJpccmZIMO2eiBrb21wb25lbnRsyZlyaW5pIHlhZGRhxZ9kYSBzYXhsYW1hIGljYXrJmXNpIHZlcmlyLiBCdSBwbGFuxZ9ldGluIHPDvHLJmXRpbmkgesmZaWZsyZl0bcmZa2zJmSwgZGlnyZlyIHTJmXRiaXFsyZlyIMO8w6fDvG4gbcO2dmN1ZCBvbGFuIHlhZGRhxZ/EsSBsaW1pdGzJmXnJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IlTJmXRiaXHJmSDDtnoga29tcG9uZW50bMmZcmluaSB5YWRkYcWfZGEgc2F4bGFtYSBpY2F6yZlzaSB2ZXJpci4gQnUgZGlnyZlyIHTJmXRiaXFsyZlyIMO8w6fDvG4gbcO2dmN1ZCBvbGFuIHlhZGRhxZ/EsSBsaW1pdGzJmXnJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVQYWNrYWdlcyIgbXNnaWQ9IjE4NDM4NTEyOTUzNzcwNTkzOCI+InTJmXRiaXFsyZlyaSBzaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiJUyZl0YmlxyZkgQW5kcm9pZCBwYWtldGzJmXJpIHNpbG3JmSBpY2F6yZlzaSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBkaWfJmXIgdmFjaWIgdMmZdGJpcWzJmXJpIHNpbG3JmWsgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iMjc0MTA5MTkxODQ1ODQyNzU2Ij4iZGlnyZlyIHTJmXRiaXFsyZlyaW4gbcmZbHVtYXTEsW7EsSBzaWxpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4iVMmZdGJpccmZIGlzdGlmYWTJmcOnaSBkYXRhc8SxbsSxIHTJmW1pemzJmW3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4iZGlnyZlyIHTJmXRiaXFsyZlyaW4ga2XFn2luaSBzaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzgxMjk5ODU5OTAwNjczMDE5NiI+IlTJmXRiaXHJmSBrZcWfIGZheWxsYXLEsSBzaWxtyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9Ijc0NzI5MjE3NjgzNTc5ODE5ODYiPiJ0yZl0YmlxIHNheGxhbWEgeWFkZGHFn8SxbsSxIMO2bMOnbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+IlTJmXRiaXHJmSDDtnrDvG7DvG4ga29kdW51LCBtyZlsdW1hdMSxbsSxIHbJmSBrZcWfIMO2bMOnw7xzw7xuw7wgYWxtYSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjIxOTkxMjg0ODI4MjAzMDY5MjQiPiJiaXJiYcWfYSB0yZl0YmlxbMmZciBxdXJhxZ9kxLFybWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iNTYyODUzMDk3MjU0ODA3MTI4NCI+IlTJmXRiaXHJmSB5ZW5pIHbJmSB5YSBnw7xuY8mZbGzJmW5tacWfIEFuZHJvaWQgcGFrZXRsyZlyaW5pIHF1cmHFn2TEsXJtYcSfYSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgZ8O8Y2zDvCBzyZlsYWhpeXnJmXRsyZlyyZkgbWFsaWsgdMmZdGJpcWzJmXJpIGVuZGlyyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiJiw7x0w7xuIHTJmXRiaXEga2XFnyBkYXRhc8SxbsSxIHNpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3NDY0MDg3MTk0NTQzNDU2NSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluIHlhZGRhxZ/EsW7EsSBib8WfYWx0bWFxIMO8w6fDvG4gZGlnyZlyIHTJmXRiaXFsyZlyaW4ga2XFnyBmYXlsbGFyxLFuxLEgc2lsbcmZayBpbWthbsSxIHZlcmlyLiBCdSBkYSBkaWfJmXIgdMmZdGJpcWzJmXJpbiBkYXRhbGFyxLEgeWVuaWTJmW4gyZlsZMmZIGV0bcmZbMmZcmkgc8mZYsmZYmluZMmZbiBkYWhhIHlhdmHFnyBpxZ9syZltyZlsyZlyaW7JmSBzyZliyZliIG9sYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiJUyZl0YmlxyZkgZGlnyZlyIHTJmXRiaXFsyZlyaW4ga2XFnyBxb3ZsdcSfdW51IHTJmW1pemzJmXnJmXLJmWsgdGVsZWZvbnVuIHlhZGRhxZ/EsW7EsSBib8WfYWx0bWFxIGljYXrJmXNpIHZlcmlyLiBCdSBkaWfJmXIgdMmZdGJpcWzJmXJpbiBtyZlsdW1hdGxhcsSxbsSxIHllbmlkyZluIMmZbGTJmSBldG3JmWxpIG9sZHVxbGFyxLFuYSBnw7ZyyZkgZGFoYSB5YXZhxZ8gYmHFn2xhbWFzxLFuYSBzyZliyZliIG9sdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3ZlUGFja2FnZSIgbXNnaWQ9IjMyODk4OTAyNzE2NDU5MjE0MTEiPiJ0yZl0YmlxIHJlc3Vyc2xhcsSxbsSxbiB5ZXJpbmkgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMTk1NjIyMTc3NzgyNDQ1MjQiPiJUyZl0YmlxyZkgdMmZdGJpcSByZXN1cnNsYXLEsW7EsSBkYXhpbGkgbWVkaWFkYW4geGFyaWNpIG1lZGlheWEgdsmZIMmZa3NpbsmZIGRhxZ/EsW1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZExvZ3MiIG1zZ2lkPSI2NjE1Nzc4NTQzMTk4OTY3NjE0Ij4ibcmZeGZpIGxvcSBkYXRhc8SxbsSxIG94dXl1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MjA2MTMxMzI5MzQ1NTE1MSI+IlTJmXRiaXHJmSBzaXN0ZW1pbiBtw7x4dMmZbGlmIGp1cm5hbCBmYXlsbGFyxLFuxLEgb3h1bWHEn2EgaW1rYW4gdmVyaXIuIEJ1IGRhIFNpemluIHBsYW7Fn2V0ZMmZIGV0ZGlrbMmZcmluaXogaGFxccSxbmRhIG3JmWx1bWF0bGFyLCBoyZltw6dpbmluIMWfyZl4c2kgdsmZIGtvbmZpZGVuc2lhbCBtyZlsdW1hdGxhciBvbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjA2MzQzODE0MDI0MTU2MDQ0MyI+IlTJmXRiaXHJmSBzaXN0ZW1pbiBtw7x4dMmZbGlmIGp1cm5hbCBmYXlsbGFyxLFuxLEgb3h1bWHEn2EgaW1rYW4gdmVyaXIuIEJ1IGRhIFNpemluIHBsYW7Fn2V0ZMmZIGV0ZGlrbMmZcmluaXogaGFxccSxbmRhIG3JmWx1bWF0bGFyLCBoyZltw6dpbmluIMWfyZl4c2kgdsmZIGtvbmZpZGVuc2lhbCBtyZlsdW1hdGxhciBvbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjcxNTgwNTU1NTgyMzg4MTgxOCI+Im94dXRtYXEgw7zDp8O8biBpc3TJmW5pbMmZbiBtZWRpYSBkZWtvZGVyaSBpc3RpZmFkyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI4MjgzOTEyNDg4NDMzMTg5MDEwIj4iVMmZdGJpccmZIHBsYXliYWNrXCdpIGRlxZ9pZnLJmSBldG3JmWsgw7zDp8O8biBoyZlyIGhhbnPEsSBiaXIgcXVyYcWfZMSxcsSxbG3EscWfIG1lZGlhIGRlxZ9pZnLJmWzJmXlpY2lzaW5pIGlzdGlmYWTJmSBldG3EsWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iMTY3ODM5MTg5Njc4Njg4MjAxNCI+ImV0aWJhcmzEsSBldGltYWRuYW3JmWzJmXJpIGlkYXLJmSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iNDAxNTY0NDA0NzE5NjkzNzAxNCI+IlTJmXRiaXHJmSBldGliYXJsxLEgZXRpbWFkbmFtyZlsyZlyIGtpbWkgQ0Egc2VydGlmaWthdGxhcsSxbsSxIHF1cmHFn2TEsXJtYXEgdsmZIHNpc3RlbWTJmW4gc2lsbcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RpYWdub3N0aWMiIG1zZ2lkPSI4MDc2NzQzOTUzOTA4MDAwMzQyIj4iZGlhZ2EgbcmZeHN1cyBvbGFuIG3JmW5iyZlsyZlyaSB5YXovb3h1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlhZ25vc3RpYyIgbXNnaWQ9IjY2MDgyOTU2OTIwMDI0NTIyODMiPiJUyZl0YmlxyZkgZGlhZyBxcnVwYSBtyZlzdXMgb2xhbiByZXN1cnNsYXLEsSB5YXptYXEgdsmZIG94dW1hcSBpY2F6yZlzaSB2ZXJpcjsgbcmZc8mZbMmZbiAgL2RldiBxb3ZsdcSfdW5kYWvEsSBmYXlsbGFyLiBCdSBzaXN0ZW1pbiBzdGFiaWxsaXlpbsmZIHbJmSB0yZlobMO8a8mZc2l6bGl5aW7JmSB0yZlzaXIgZWTJmSBiaWzJmXIuIEJ1IGFuY2FxIGlzdGVoc2Fsw6fEsSB2yZkgeWEgb3BlcmF0b3IgdMmZcsmZZmluZMmZbiBhdmFkYW5sxLHEn2EgeGFzIGRpYXFub3N0aWthIMO8w6fDvG4gb2xtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiJ0yZl0YmlxIGtvbXBvbmVudGzJmXJpbmkgYWt0aXZsyZnFn2Rpcm3JmSB2yZkgeWEgZGVha3RpdmzJmcWfZGlybcmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiJUyZl0YmlxyZkgZGlnyZlyIHTJmXRiaXEga29tcG9uZW50aW5pbiBha3RpdiBvbHViLW9sbWFkxLHEn8SxbsSxIGTJmXlpxZ9tyZlrIGlta2FuxLEgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gyZloyZltaXl5yZl0bGkgcGxhbsWfZXQgaW1rYW5sYXLEsW7EsSBkZWFrdGl2IGV0bcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4gQnUgaWNhesmZIGlsyZkgZWh0aXlhdGzEsSBvbG1hcSBsYXrEsW1kxLFyLCDDp8O8bmtpIHTJmXRiaXEga29tcG9uZW50bMmZcmkgeWFyYXJzxLF6LCB6aWRkaXl5yZl0bGksIHbJmSB5YSBxZXlyaS1zYWJpdCBzdGF0dXNhIMOnZXZyaWzJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODI3MjMyNDg0NDE2NTA1NjE1Ij4iVMmZdGJpccmZIGRpZ8mZciB0yZl0YmlxIGtvbXBvbmVudGluaW4gYWt0aXYgb2x1Yi1vbG1hZMSxxJ/EsW7EsSBkyZl5acWfbcmZayBpbWthbsSxIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIMmZaMmZbWl5ecmZdGxpIHRlbGVmb24gaW1rYW5sYXLEsW7EsSBkZWFrdGl2IGV0bcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4gQnUgaWNhesmZIGlsyZkgZWh0aXlhdGzEsSBvbG1hcSBsYXrEsW1kxLFyLCDDp8O8bmtpIHTJmXRiaXEga29tcG9uZW50bMmZcmkgeWFyYXJzxLF6LCB6aWRkaXl5yZl0bGksIHbJmSB5YSBxZXlyaS1zYWJpdCBzdGF0dXNhIMOnZXZyaWzJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDYyNzMxNTM1MTA5MzUwODc5NSI+ImljYXrJmWzJmXIgdmVybcmZayB2yZkgeWEgbMmZxJ92IGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0MDg4NjQyNjU0MDg1ODUwNjYyIj4iVMmZdGJpccmZIGJ1IHbJmSB5YSBkaWfJmXIgdMmZdGJpcWzJmXLJmSB4w7xzdXNpIGl6bmzJmXIgdmVybcmZecmZIGljYXrJmSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyICBidW5kYW4gaXppbiB2ZXJtyZlkaXlpbml6IMO2esmZbGxpa2zJmXJpIMO2emzJmXJpbsmZIHZlcm3JmWsgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI4NDYzMTgxNjI4Njk1Mzk2MzkxIj4idMmZcmNpaCBlZGlsyZluIHTJmXRiaXFsyZlyIHF1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9IjQ5NzM5ODY3NjIyNDE3ODM3MTIiPiJUyZl0YmlxyZkgdMmZcmNpaCBldGRpeWluaXogdMmZdGJpcWzJmXJpIGTJmXlpxZ9tyZlrIGlta2FuxLEgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciDFn8mZeHNpIG3JmWx1bWF0bGFyxLFuxLF6xLEgdG9wbGFtYXEgw7zDp8O8biBjYXJpIHTJmXRiaXFsyZlyaW5pemkgYWxkYWRhcmFxIGnFn2zJmXnJmW4gdMmZdGJpcWzJmXJpIHjJmWLJmXJzaXogZMmZeWnFn8mZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSIyMjI2MTk1MjkwOTU1MjI0NzMwIj4ic2lzdGVtIGF5YXJsYXLEsW5kYSBkyZl5acWfaWtsaWsgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9Ijc3NzU3MjM0NDE1NTg5MDcxODEiPiJUyZl0YmlxyZkgc2lzdGVtIGF5YXJsYXLEsSBkYXRhc8SxbsSxIHJlZGFrdMmZIGV0bcmZIGljYXrJmXNpIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgc2lzdGVtIGF5YXJsYXLEsW7EsSBrb3JsYXlhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiJ0yZlobMO8a8mZc2l6IHNpc3RlbSBuaXphbWxhcsSxbsSxIGTJmXlpxZ9pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4iVMmZdGJpccmZIHNpc3RlbWluIHTJmWhsw7xryZlzaXogYXlhcmxhciBkYXRhc8SxbsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSDDvMOnw7xuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIyMTQ5NDI2NjY0MjI2MTUyMTg1Ij4iR29vZ2xlIHhpZG3JmXRsyZlyIHjJmXJpdMmZc2luaSBkyZl5acWfZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4iVMmZdGJpccmZIEdvb2dsZSB4aWRtyZl0bMmZciB4yZlyaXTJmXNpbmkgZMmZeWnFn2Rpcm3JmWsgaW1rYW7EsSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyaW4gaXN0aWZhZMmZc2kgw7zDp8O8biBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVCb290Q29tcGxldGVkIiBtc2dpZD0iNTMxMjk2NTU2NTk4NzgwMDAyNSI+ImJhxZ9sYW7En8SxY2RhIGnFn2zJmXlpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4iVMmZdGJpccmZIHNpc3RlbSB5w7xrbMmZbcmZbmkgYml0aXJkaXlpIHphbWFuIGTJmXJoYWwgw7Z6w7xuw7wgYmHFn2xhdG1hxJ9hIGlta2FuIHZlcmlyLiBCdSBwbGFuxZ9ldGkgYmHFn2xhdG1hxJ/EsW4gdXp1biDDp8mZa23JmXNpbsmZIHPJmWLJmWIgb2xhIGJpbMmZciB2yZkgdMmZdGJpccmZIGjJmW1pxZ/JmSDDp2FsxLHFn2TEsXJhcmFxIGLDvHTDvG4gcGxhbsWfZXRpIHlhdmHFn2xhdG1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4iVMmZdGJpccmZIHNpc3RlbSBib290aW5xaSBiaXRpcmRpa2TJmW4gZMmZcmhhbCBzb25yYSDDtnrDvG7DvCBiYcWfbGF0bWFxIGljYXrJmXNpIHZlcmlyLiBCdSB0ZWxlZm9udW4gYcOnxLFsbWFzxLFuxLEgbMmZbmdpZMmZIHbJmSBkYWltYSBpxZ9syZlrIHFhbGFyYXEgdGVsZWZvbnVuIHPDvHLJmXRpbmkgYcWfYcSfxLEgc2FsYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTdGlja3kiIG1zZ2lkPSI3OTE5MTI2MzcyNjA2ODgxNjE0Ij4iZGFpbWkgc2lxbmFsIGfDtm5kyZlybcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IlTJmXRiaXHJmSB5YXnEsW0gYml0ZGlrZMmZbiBzb25yYSBkYSBxYWxhbiDDp8mZdGluIHlhecSxbWxhciBnw7ZuZMmZcm3JmXnJmSBpbWthbiB2ZXJpci4gSMmZZHNpeiBpc3RpZmFkyZkgw6dveCB5YWRkYcWfIGlzdGlmYWTJmXNpbsmZIHPJmWLJmWIgb2xtYXFsYSBwbGFuxZ9ldGkgeWF2YcWfIHbJmSBxZXlyaS1zdGFiaWwgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjgyNTgwMzc2NDIzMjQ0NTA5MSI+IlTJmXRiaXHJmSB5YXnEsW0gYml0ZGlrZMmZbiBzb25yYSBkYSBxYWxhbiDDp8mZdGluIHlhecSxbWxhciBnw7ZuZMmZcm3JmXnJmSBpbWthbiB2ZXJpci4gSMmZZHNpeiBpc3RpZmFkyZkgw6dveCB5YWRkYcWfIGlzdGlmYWTJmXNpbsmZIHPJmWLJmWIgb2xtYXFsYSB0ZWxlZm9udSB5YXZhxZ8gdsmZIHFleXJpLXN0YWJpbCBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDb250YWN0cyIgbXNnaWQ9IjgzNDg0ODExMzE4OTk4ODYxMzEiPiJrb250YWtybGF0xLFuxLF6xLEgb3h1bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1Mjk0ODY2ODU2OTQxMTQ5NjM5Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW5pemTJmSB5ZXJsyZnFn8mZbiBrb250YWt0bGFyxLEgb3h1bWFxIGljYXrJmXNpIHZlcmlyLCB0ZXotdGV6IHrJmW5nIGVsyZlkaXlpbml6LCBlbWFpbGzJmcWfZGl5aW5peiB2yZkgeWEgyZlsYXHJmSBzYXhsYWTEscSfxLFuxLF6IHjDvHN1c2kgaW5kaXZpZHVhbGxhciBkYXhpbCBvbG1hcWxhLiBCdSBpY2F6yZkgdMmZdGJpcWzJmXLJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLF6xLEgc2F4bGFtYcSfYSB2yZkgesmZcsmZcmxpIHTJmXRiaXFsyZlyyZkga29udGFrdCBtyZlsdW1hdGxhcsSxbsSxIHNpemluIGJpbGdpbml6IG9sbWFkYSBwYXlsYcWfbWEgaW1rYW7EsSB5YXJhZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDQwNjU0MTUyNDU3MzAwNjYyIj4iVMmZdGJpccmZwqB0ZXotdGV6IHrJmW5nIGVsyZlkaXlpbml6LCBlLW3JmWt0dWIgZ8O2bmTJmXJkaXlpbml6IHbJmSB5YSDJmWxhccmZIHNheGxhZMSxxJ/EsW7EsXogeMO8c3VzaSBpbmRpdmlkdWFsbGFyIGRheGlsIG9sbWFxbGEgdGVsZWZvbnVudXpkYSB5ZXJsyZnFn8mZbiBrb250YWt0bGFyxLEgb3h1bWFxIGljYXrJmXNpIHZlcmlyLiBCdSBpY2F6yZkgdMmZdGJpcWzJmXLJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLF6xLEgc2F4bGFtYcSfYSB2yZkgesmZcsmZcmxpIHTJmXRiaXFsyZlyyZkga29udGFrdCBtyZlsdW1hdGxhcsSxbsSxIHNpemluIHjJmWLJmXJpbml6IG9sbWFkYSBwYXlsYcWfbWEgaW1rYW7EsSB5YXJhZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ29udGFjdHMiIG1zZ2lkPSI1MTA3NDkyMDg2NDE2NzkzNTQ0Ij4ia29udGFrdGxhcsSxbsSxesSxIGTJmXlpxZ9kaXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzI0MzkzMjUyMTk1MzYwMiI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluaXpkyZlraSB6yZluZyBldG3JmWsgdGV6bGl5aW5peiwgZWxla3Ryb24gcG/Dp3RsYXLEsW7EsXosIMO8bnNpeXnJmXRsyZlyaW5peiBoYXFxxLFuZGEgbcmZbHVtYXRsYXLEsSBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiBCdSBpY2F6yZkga29udGFrdCBtyZlsdW1hdGxhcsSxbsSxbiBzaWxpbm3JmXNpbsmZIGTJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTg5ODY5MjI0NjI1MTYzNTU4Ij4iVMmZdGJpccmZIFNpemluIHrJmW5nIGV0bcmZayB0ZXpsaXlpbml6LCBlbGVrdHJvbiBwb8OndGxhcsSxbsSxeiwgw7xuc2l5ecmZdGzJmXJpbml6IGhhcXHEsW5kYSBtyZlsdW1hdGxhcsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIEJ1bmEga29udGFrdGxhcsSxbiBzaWxpbm3JmXNpIGlta2FuxLEgZMmZIGRheGlsZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGxMb2ciIG1zZ2lkPSIzNDc4MTMzMTg0NjI0MTAyNzM5Ij4iesmZbmcgcWV5ZGl5eWF0xLFuxLEgb3h1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM3MDA2NDUxODQ4NzA3NjAyODUiPiJUyZl0YmlxyZkgZ8mZbMmZbiB2yZkgZ2VkyZluIHrJmW5nbMmZciBoYXFxxLFuZGEgb2xhbiBkYXRhIGRheGlsIG9sbWFxbGEgYsmZcmFiyZlyIHBsYW7Fn2V0aW5pemluIHrJmW5nIHFleWRpeXlhdMSxbsSxIG94dW1hxJ9hIGlta2FuIHZlcmlyLiBCdSBpY2F6yZkgdMmZdGJpcWzJmXLJmSB6yZluZyBxZXlkaXl5YXTEsW7EsXrEsSBzYXhsYW1hxJ9hIGlta2FuIHZlcmlyIHbJmSB6yZlyyZlybGkgdMmZdGJpcWzJmXIgesmZbmcgcWV5ZGl5eWF0IGRhdGFzxLFuxLEgc2l6ZMmZbiB4yZliyZlyc2l6IHBheWxhxZ9hIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3Nzc3MjU3OTY4MTMyMTcyNDQiPiJUyZl0YmlxyZkgdGVsZWZvbiBqdXJuYWzEsW7EsXrEsSBveHVtYcSfYSBpbWthbiB2ZXJpciwgYnVuYSBnyZlsyZluIHbJmSBnZWTJmW4gesmZbmdsyZlyIGhhcXHEsW5kYSBtyZlsdW1hdGxhciBkYSBkYXhpbGRpci4gQnUgaWNhesmZIHTJmXRiaXHJmSB6yZluZyBqdXJuYWzEsSBkYXRhc8SxbsSxIHNheGxhbWHEn2EgaW1rYW4gdmVyaXIga2ksIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIFNpemTJmW4geMmZYsmZcnNpeiBiw7x0w7xuIG3JmWx1bWF0bGFybsSxesSxIHBheWxhxZ9hIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsbExvZyIgbXNnaWQ9Ijg1NTIwNDU2NjQ3NDM0OTkzNTQiPiJ6yZluZyBsb3F1IHlhesSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY2MTgwNjA2MjI3NDExOTI0NSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluaXpkyZlraSB6yZluZyBqdXJuYWzEsW7EsSwgaMmZbcOnaW5pbiBnZWTJmW4gdsmZIGfJmWzJmW4gesmZbmdsyZlyaW4gc2l5YWjEsXPEsW7EsSBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZaywgesmZbmcganVybmFsxLFuxLF6YSBkyZl5acWfaWtsaWsgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4iVMmZdGJpccmZIHNpemluIGRheGlsIG9sYW4gdsmZIGdlZMmZbiB6yZluZ2zJmXIgZGF4aWwgb2xtYXFsYSB0ZWxlZm9uIHrJmW5naSBsb3FsYXLEsW7EsXrEsSByZWRha3TJmSBldG3JmWsgaWNhesmZc2kgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gdGVsZWZvbiBsb3FsYXLEsW7EsXrEsSBzaWxtyZlrIHbJmSB5YSByZWRha3TJmSBldG3JmWsgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUHJvZmlsZSIgbXNnaWQ9IjQ3MDE4ODk4NTI2MTI3MTY2NzgiPiLDtnoga29udGFrdCBrYXJ0xLFuxLF6xLEgb3h1eXVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDYyNDc1MTUxODQ5ODg4ODQ4Ij4iVMmZdGJpccmZIGNpaGF6xLFuxLF6ZGEgeWVybMmZxZ/JmW4gYWTEsW7EsXogdsmZIGtvbnRha3QgbcmZbHVtYXRsYXLEsW7EsXoga2ltaSDFn8mZeHNpIHByb2ZpbCBtyZlsdW1hdGxhcsSxbsSxIG94dW1hIGljYXrJmXNpIHZlcmlyLiBCdSBvIGRlbcmZa2RpciBraSwgdMmZdGJpcSBzaXppIHRhbsSxeWEgdsmZIHNpemluIHByb2ZpbCBtyZlsdW1hdGxhcsSxbsSxesSxIGJhxZ9xYWxhcsSxbmEgZ8O2bmTJmXLJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiJzaXppbiBrb250YWt0IGthcnTEsW7EsXpkYSBkyZl5acWfaWtsaWsgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTU1MjA4NDI5NDU5ODQ2NTg5OSI+IlTJmXRiaXHJmSBjaWhhesSxbsSxemRhIHllcmzJmcWfyZluIGFkxLFuxLF6IHbJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLF6IGtpbWkgxZ/JmXhzaSBwcm9maWwgbcmZbHVtYXRsYXLEsW7EsSBkyZl5acWfbcmZayB2yZkgeWEgyZlsYXbJmSBldG3JmWsgaWNhesmZc2kgdmVyaXIuIEJ1IG8gZGVtyZlrZGlyIGtpLCB0yZl0YmlxIHNpemkgdGFuxLF5YSB2yZkgc2l6aW4gcHJvZmlsIG3JmWx1bWF0bGFyxLFuxLF6xLEgYmHFn3FhbGFyxLFuYSBnw7ZuZMmZcsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMjY4OTIwOTU2MTUyNDE5MTcwIj4ic29zaWFsIGxlbnRpbml6aSBveHV5dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDI1NTcwNjAyNzE3MjA1MDg3MiI+IlTJmXRiaXHJmSBTaXppbiB2yZkgZG9zdGxhcsSxbsSxesSxbiBzb3NpYWwgZ8O8bmPJmWxsyZlyaW5pIMmZbGTJmSBldG3JmWsgdsmZIHNpbnhyb25pesmZIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4gTcmZbHVtYXQgcGF5bGHFn2Fya8mZbiBkaXFxyZl0bGkgb2x1biAtIGtvbmZpZGVuc2lhbGzEsXFkYW4gYXPEsWzEsSBvbG1heWFyYXEgYnUsIFNpeiB2yZkgZG9zdGxhcsSxbsSxeiBhcmFzxLFuZGEgc29zaWFsIMWfyZliyZlryZlsyZlyZMmZa2kgZGFuxLHFn8SxxJ/EsSBveHVtYXEgaW1rYW7EsSB2ZXJpci4gUWV5ZDogYnUgaWNhesmZIGLDvHTDvG4gc29zaWFsIMWfyZliyZlryZlsyZlyZMmZIGljcmEgZWRpbMmZIGJpbG3JmXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM1MDQxNzkyMjI0OTMyMzU2NDUiPiJzb3NpYWwgYXjEsW7EsW7EsXphIHlhesSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzA4NjU1NzU1MjIwNDExNDg0OSI+IlTJmXRiaXHJmSBkb3N0bGFyxLFuxLF6ZGFuIHNvc2lhbCB5ZW5pbMmZbm3JmWzJmXJpIGfDtnN0yZlybcmZIGljYXrJmXNpIHZlcmlyLiBNyZlsdW1hdCBwYXlsYcWfYXJryZluIGRpcXHJmXRsaSBvbHVuIC0gYnUgZG9zdGxhcsSxbsSxemRhbiBnyZlsyZluIG1lc2FqxLEgZW1hbCBldG3JmXnJmSBpem4gdmVyaXIuIFFleWQ6IGJ1IGljYXrJmSBiw7x0w7xuIHNvc2lhbCDFn8mZYsmZa8mZbMmZcsmZIMWfYW1pbCBvbHVubWF5YSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsZW5kYXIiIG1zZ2lkPSI1OTcyNzI3NTYwMjU3NjEyMzk4Ij4idMmZcXZpbSB0yZlkYmlybMmZcmluaSB2yZkga29uZmlkZW5zaWFsIG3JmWx1bWF0bGFyxLEgb3h1eXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MjE2NDYyMDQ5MDU3NjU4NzIzIj4iVMmZdGJpccmZIGRvc3RsYXLEsW7EsXrEsW4gdsmZIMmZbcmZa2RhxZ9sYXLEsW7EsXrEsW4gcGxhbsWfZXRpbml6ZMmZIHllcmzJmcWfyZluIGthbGVuZGFyIHTJmWRiaXJsyZlyaW5pIG94dW1hxJ9hIGljYXrJmSB2ZXJpci4gQnUgdMmZdGJpccmZIGtvbmZpZGVuc2lhbGzEsXEgdsmZIHlhIGjJmXNzYXNsxLFxZGFuIGFzxLFsxLEgb2xtYXlhcmFxIHNpemluIGthbGVuZGFyIG3JmWx1bWF0bGFyxLFuxLF6xLEgcGF5bGHFn21hcSB2yZkgeWEgc2F4bGFtYcSfYSBpbWthbiB5YXJhZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NDM0NTQ4NjgyNDcwODUxNTgzIj4iVMmZdGJpccmZIGRvc3QgdsmZIMmZbcmZa2RhxZ9sYXJhIG3JmXhzdXMgb2xhbmxhciBkYXhpbCBvbG1hcWxhIHBsYW7Fn2V0ZMmZIHllcmzJmcWfyZluIGLDvHTDvG4ga2FsZW5kYXIgdMmZdGJpcWzJmXJpbmkgb3h1bWFxIGljYXrJmXNpIHZlcmlyLiBCdSB0yZl0YmlxyZkga29uZmlkZW5zaWFsbMSxcSB2yZkgeWEgaMmZc3Nhc2zEsXFkYW4gYXPEsWzEsSBvbG1heWFyYXEsIFNpemluIGthbGVuZGFyIG3JmWx1bWF0bGFyxLFuxLF6xLEgcGF5bGHFn21hcSB2yZkgeWEgc2F4bGFtYXEgaW1rYW7EsSB5YXJhZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsZW5kYXIiIG1zZ2lkPSI4NDM4ODc0NzU1MTkzODI1NjQ3Ij4iY2loYXogc2FoaWJpbmluIGljYXrJmXNpIG9sbWFkYW4gdMmZcXZpbSB0yZlkYmlybMmZcmkgyZlsYXbJmSBldG3JmWsgdsmZIHlhIGTJmXlpxZ9tyZlrLCBidW51biBoYXFxxLFuZGEgYmlsZGlyacWfbMmZciBnw7ZuZMmZcm3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njc5MDM1NTIwMTEzNjY4NTI4Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW5pemTJmWtpIHTJmWRiaXJsyZlyaSBkyZl5acWfbcmZecmZLCB0yZlkYmlyIMmZbGF2yZkgZXRtyZl5yZkgdsmZIHlhIHNpbG3JmXnJmSBpbWthbiB2ZXJpci4gQnVuYSBTaXppbiBkb3N0bGFyxLFuxLF6bGEgdsmZIGjJmW1rYXJsYXLEsW7EsXpsYSBiaXJsaWtkyZkgaGF6xLFybGFkxLHEn8SxbsSxeiB0yZlkYmlybMmZciBkyZkgZGF4aWxkaXIuIEJ1LCB0yZlkYmlyyZkgU2l6aW4gYWTEsW7EsXpkYW4gdsmZIFNpemTJmW4geMmZYsmZcnNpeiwgdMmZcXZpbSBzYWhpYmkga2ltaSBtZXNhaiBnw7ZuZMmZcm3JmWsgaW1rYW7EsW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+IkRvc3RsYXLEsW7EsXogdsmZIGjJmW1rYXJsYXLEsW7EsXphIG3JmXhzdXMgb2xhbmxhciBkYSBkYXhpbCBvbG1hcWxhLCB0yZl0YmlxyZkgdGVsZWZvbnVudXpkYWvEsSB0yZlkYmlybMmZcmkgZMmZeWnFn23JmXnJmSwgdMmZZGJpciDJmWxhdsmZIGV0bcmZecmZIHbJmSB5YSBzaWxtyZl5yZkgaW1rYW4gdmVyaXIuIEJ1LCB0yZlkYmlyyZkgU2l6aW4gYWTEsW7EsXpkYW4gdsmZIFNpemTJmW4geMmZYsmZcnNpeiwgdMmZcXZpbSBzYWhpYmkga2ltaSBtZXNhaiBnw7ZuZMmZcm3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9Ijg2ODgzMzQ5NzQwMzY4MjMzMzAiPiJ0ZXN0IMO8w6fDvG4gc2F4dGEgbcmZa2FuIG3JmW5iyZlsyZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiJUZXN0IMO8w6fDvG4gc2F4dGEgbcmZa2FuIG3JmW5iyZlsyZlyaSB5YXJhZMSxbiB2yZkgeWEgeWVuaSBtyZlrYW4gcHJvdmF5ZGVyaSBxdXJhxZ9kxLFyxLFuLiBCdSB0yZl0YmlxbMmZcsmZIEdQUyB2yZkgbcmZa2FuIHByb3ZheWRlcmzJmXJpIGtpbWkgbcmZa2FuIG3JmW5iyZlsyZlyaW5kyZluIGFsxLFuYW4gbcmZa2FuIHbJmS95YSBzdGF0dXNsYXLEsSB5ZW5pZMmZbiB5YXptYcSfYSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSIyODM2MzA4MDc2NzIwNTUzODM3Ij4iyZlsYXbJmSBtyZlrYW4gcHJvdmF5ZGVyaSDJmW1ybMmZcmluyZkgw6fEsXjEscWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iNTk0NTE2NjY0MjMzNTgwMDc2MyI+IlTJmXRiaXHJmSDJmWxhdsmZIG3JmWthbiBwcm92YXlkZXJpIMmZbXJsyZlyaW7JmSBkYXhpbCBvbG1hcSBpbWthbsSxIHZlcmlyLiBCdSB0yZl0YmlxyZkgR1BTIMmZbcmZbGl5eWF0xLFuYSB2yZkgeWEgZGlnyZlyIG3JmWthbiBtyZluYsmZbMmZcmluyZkgbWFuZSBvbG1hcSBpbWthbsSxIHZlcsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+Ik3JmWthbiBwcm92YXlkZXJpbmkgcXVyYcWfZMSxcm1hcSBpY2F6yZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IlllbmkgeWVybMmZxZ9tyZkgdMmZY2hpemF0w6fEsXPEsW7EsSB0ZXN0IGV0bcmZayB2yZkgeWEgcXVyYcWfZMSxcm1hcSDDvMOnw7xuIG1vY2sgeWVybMmZxZ9tyZkgbcmZbmLJmWzJmXJpIHlhcmF0LiBCdSB0yZl0YmlxyZkgeWVybMmZxZ9tyZluaW4gdsmZL3lhIGRpZ8mZciB5ZXJsyZnFn23JmSBtyZluYsmZbMmZcmluZMmZbiBHUFMgdsmZIHlhIHllcmzJmcWfbcmZIHTJmWNoaXphdMOnxLFsYXLEsSBxYXnEsXRtxLHFnyBzdGF0dXNsYXLEsW4gbMmZxJ92IGV0bcmZc2luyZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSIxMTkxODk4MDYxOTY1MjczMzcyIj4iZMmZcWlxIHllcmkgKEdQUyB2yZkgxZ/JmWLJmWvJmS3JmXNhc2zEsSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4iUWxvYmFsIFBvemlzaXlhIFNpc3RlbWluaSB2yZkgeWEgxZ/JmWLJmWvJmSBxw7xsbMmZbMmZcmkgdsmZIFdpLUZpIGtpbWkgxZ/JmWLJmWvJmSBtyZlrYW7EsW7EsSBpc3RpZmFkyZkgZWTJmXLJmWsgdMmZdGJpccmZIFNpemluIGTJmXFpcSB5ZXJpbml6aSB0yZl5aW4gZXRtyZl5yZkgaW1rYW4gdmVyaXIuIEJ1IG3JmWthbiB4aWRtyZl0bMmZcmkgYWt0aXZsyZnFn2RpcmlsbcmZbGlkaXJsyZlyIGtpLCBTaXogdMmZdGJpcWkgaXN0aWZhZMmZIGVkyZluIHphbWFuIHTJmXRiaXEgb25sYXLEsSBpc3RpZmFkyZkgZWTJmSBiaWxzaW4uIFTJmXRiaXFsyZlyIFNpemluIGhhcmFkYSBvbG1hxJ/EsW7EsXrEsSBidW51biB2YXNpdMmZc2lsyZkgdMmZeWluIGVkyZljyZlrLCBleW5pIHphbWFuZGEsIGJ1IHhpZG3JmXQgyZlsYXbJmSBiYXRhcmV5YSBlbmVyamlzaSBhcGFyYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjQ4ODc4OTUzNjIzNTQyMzk2MjgiPiJ0yZl4bWluaSBtyZlrYW4gKMWfyZliyZlryZkgyZlzYXNsxLEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSIyNTM4MjAwMTg0MzczMzAyMjk1Ij4iVMmZdGJpccmZIHTJmXhtaW5pIHllcmluaXppIGFsbWFxIMO8w6fDvG4gaW1rYW4gdmVyaXIuIEJ1IHllciwgeWVybMmZxZ9tyZkgeGlkbcmZdGzJmXJpIHTJmXLJmWZpbmTJmW4gbW9iaWwgccO8bGzJmWzJmXIgdsmZIFdpLUZpIGtpbWkgxZ/JmWLJmWvJmSB5ZXJsyZnFn23JmSBtyZluYsmZbMmZcmTJmW4gaXN0aWZhZMmZIGV0bcmZa2zJmSDJmWxkyZkgZWRpbGlyLiBCdSB5ZXJsyZnFn23JmSB4aWRtyZl0bMmZcmkgdMmZdGJpcWluIG9ubGFyZGFuIGlzdGlmYWTJmXNpIMO8w6fDvG4gYcOnxLFxIHbJmSBjaWhhesSxbsSxesSxbiBvbmxhcsSxIGlzdGlmYWTJmXNpIMO8w6fDvG4gbcO2dmN1ZCBvbG1hbMSxZMSxci4gVMmZdGJpcWzJmXIgYnVuZGFuIHNpemluIHTJmXhtaW7JmW4gaGFyYWRhIG9sZHXEn3VudXp1IG3DvMmZeXnJmW5syZnFn2Rpcm3JmWsgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjIzNjM5Njk2NDE3OTIzODg5NDciPiJTdXJmYWNlRmxpbmdlclwnyZkgZGF4aWwgb2xtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJUyZl0YmlxyZkgYcWfYcSfxLEgc8mZdml5ecmZbGkgU3VyZmFjZUZuZ2VyIMO2esmZbGxpa2zJmXJpbmkgaXN0aWZhZMmZIGV0bcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJmcmV5bSBidWZlcmkgb3h1eXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IlTJmXRiaXHJmSBmcmV5bSBidWZlcmluaW4ga29udGVudGluaSBveHVtYXEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iSW5wdXRGbGluZ2VyIGtlw6dpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iVMmZdGJpccmZIGHFn2HEn8SxIHPJmXZpeXnJmWxpIElucHV0RmxpbmdlciBmdW5rc2l5YWxhcsSxbsSxIGlzdGlmYWTJmSBldG3JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJXaWZpIGfDtnLDvG50w7xsyZlyaW5pIHF1cmHFn2TEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJUyZl0YmlxyZkgV2lmaSBnw7Zyw7xudMO8bMmZcmluaSBxdXJhxZ9kxLFybWHEn2EgdsmZIG9ubGFyYSBxb8WfdWxtYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IldpRmkgZ8O2csO8bnTDvGzJmXJpbmkgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+IlTJmXRiaXHJmSBXaWZpIGRpc3BsZXlsyZlyaW5pbiBhxZ9hxJ/EsSBzyZl2aXl5yZlsaSBmdW5rc2l5YWxhcsSxbsSxIGlkYXLJmSBldG3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjY4NTcxMzQ0OTg0MDIzNDY3MDgiPiJhdWRpbyDDp8SxeMSxxZ/EsSBhbMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiJUyZl0YmlxyZkgYXVkaW8gw6fEsXjEscWfxLEgYWxtYXEgdsmZIHllbmlkyZluIHnDtm5syZluZGlybcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjI0NjgyODc3MzU4OTA5NDAyMyI+InZpZGVvIMOnxLF4xLHFn8SxIGFsxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMzU5NDgxNjU4MDM0MTQ5ODYwIj4iVMmZdGJpccmZIHZpZGVvIMOnxLF4xLHFn8SxIGFsbWFxIHbJmSB5ZW5pZMmZbiB5w7ZubMmZbmRpcm3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9Ijc4MTUzOTg5NjkzMDMzODIwMTYiPiJ0yZlobMO8a8mZc2l6IHZpZGVvIMOnxLF4xLHFn8SxIGFsxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjc3OTc5MzA2NDcwOTM1MDI4OSI+IlTJmXRiaXHJmSBnw7x2yZlubGkgdmlkZW8gw6fEsXjEscWfxLEgYWxtYXEgdsmZIHllbmlkyZluIHnDtm5syZluZGlybcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjYwOTU4NTk5MzcwNjkxNDYwODYiPiJhdWRpbyBheWFybGFyxLFuxLF6xLEgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiJUyZl0YmlxyZkgc8mZcyB2yZkgaGFuc8SxIHNwaWtlcmluIMOnxLF4xLHFnyDDvMOnw7xuIGlzdGlmYWTJmSBvbHVuZHXEn3Uga2ltaSBxbG9iYWwgc8mZcyBheWFybGFyxLFuxLEgZMmZeWnFn2Rpcm3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+InPJmXMgeWF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iVMmZdGJpccmZIG1pa3JvZm9ubGEgYXVkaW8geWF6bWFxIGljYXrJmXNpIHZlcmlyLiDEsGNhesmZIHTJmXRiaXHJmSBzaXppbiB0yZlzZGlxaW5peiBvbG1hZGFuIGlzdMmZbmlsyZluIHphbWFuIHPJmXMgeWF6bWEgaXpuaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLFn8mZa2lsIHbJmSB2aWRlbyDDp8mZa23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iVMmZdGJpccmZIGthbWVyYSBpbMmZIMWfyZlraWwgdsmZIHZpZGVvIMOnyZlrbcmZecmZIGlta2FuIHlhcmFkxLFyLiBCdSBpY2F6yZkgdMmZdGJpccmZIHNpemluIHTJmXNkaXFpbml6IG9sbWFkYW4ga2FtZXJhZGFuIGlzdGlmYWTJmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiJrYW1lcmEgaXN0aWZhZMmZIGVkaWxkaWtkyZkgTEVEIGfDtnN0yZlyaWNpIMO2dMO8csO8bG3JmXNpbmkgZGVha3RpdiBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iNDc2NDU4NTQ2NTQ4MDI5NTM0MSI+IsOWbmPJmWTJmW4gcXVyYcWfZMSxcsSxbG3EscWfIHNpc3RlbSB0yZl0YmlxaW7JmSBrYW1lcmEgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbMmZbiBMRUQgaW5kaWthdG9ydW51IHPDtm5kw7xybcmZayBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyOTYxMjkyMjA1NzY0NDg4MzA0Ij4icGxhbsWfZXRpIGRhaW1pIG9sYXJhcSBhcmFkYW4gcWFsZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4idGVsZWZvbnUgaMmZbWnFn8mZbGlrIGRlYWt0aXYgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMzQ4MTg4MDgwMDE2OTk1MzAiPiJUyZl0YmlxyZkgcGxhbsWfZXRpIGJpcmTJmWbJmWxpayBkZWFrdGl2IGV0bcmZecmZIGlta2FuIHZlcmlyLiBCdSBkYSDDp294IHTJmWhsw7xryZlsaWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3ODg5MDMyOTc2MjcyODMwOTkiPiJUyZl0YmlxyZkgYsO8dMO8biB0ZWxlZm9udSBiaXJkyZlmyZlsaWsgZGVha3RpdmzJmcWfZGlybcmZecmZIGlta2FuIHZlcmlyLiBCdSDDp294IHTJmWhsw7xryZlsaWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQzNjYzNDk3MjU2MTc5NTAwMiI+InBsYW7Fn2V0aSB5ZW5pZMmZbiB5w7xrbMmZbm3JmXnJmSBtyZljYnVyIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4OTg1NjA4NzI0NjI2MzgyNDIiPiJ0ZWxlZm9udSB5ZW5pZMmZbiB5w7xrbMmZbm3JmXnJmSBtyZljYnVyIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgxNzIwNTYxODAwNjM3MDA3NDEiPiJUyZl0YmlxyZkgcGxhbsWfZXRpIHllbmlkyZluIHnDvGtsyZltyZl5yZkgbcmZY2J1ciBldG3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MzI2MDA4MTI0Mjg5OTg5OTY5Ij4iVMmZdGJpccmZIHRlbGVmb251IHllbmlkyZluIHnDvGtsyZltyZl5yZkgbcmZY2J1ciBldG3JmWsgw7zDp8O8biBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+IlVTQiB5YWRkYcWfIGZheWwgc2lzdGVtaW7JmSBkYXhpbCBvbG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiJTRCBLYXJ0IGZheWwgc2lzdGVtaW7JmSBkYXhpbCBvbG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIG1zZ2lkPSIxODI5MjkwNzAxNjU4OTkyMzQ3Ij4iVMmZdGJpccmZIHNpbGluyZliaWzJmW4geWFkZGHFn2xhcsSxIHbJmSB5YSBmYXlsIHNpc3RlbWluaSBxdXJhxZ9kxLFybWEgdsmZIGF5xLFybWEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+IlVTQiB5YWRkYcWfxLEgc2lsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+IlNEIGthcnTEsSBzaWxpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgbXNnaWQ9Ijg3ODQyNjgyNDY3NzkxOTg2MjciPiJUyZl0YmlxyZkgw6fEsXhhcsSxbGEgYmlsyZluIHlhZGRhxZ/EsSBmb3JtYXQgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2FjY2VzcyIgbXNnaWQ9IjM0MTEzMzg2MzIwMDIxOTM4NDYiPiJkYXhpbGkgeWFkZGHFn8SxbsSxeiBoYXFxxLFuZGEgbcmZbHVtYXQgyZlsZMmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+IlTJmXRiaXHJmSBkYXhpbGkgeWFkZGHFnyBoYXFxxLFuZGEgbcmZbHVtYXQgYWxtYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfY3JlYXRlIiBtc2dpZD0iNjQxNDc1NzIzNDc4OTMzNjMyNyI+ImRheGlsaSB5YWRkYcWfIHlhcmF0bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19jcmVhdGUiIG1zZ2lkPSI0NTU4ODY5MjczNTg1ODU2ODc2Ij4iVMmZdGJpccmZIGRheGlsaSB5YWRkYcWfIHlhcmF0bWFxIMO8w6fDvG4gaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI1MjY5MjgzMjgzMDE2MTgwMjIiPiJkYXhpbGkgeWFkZGHFn8SxIG3JmWh2IGV0bcmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19kZXN0cm95IiBtc2dpZD0iNzIxODc0OTI4NjE0NTUyNjUzNyI+IlTJmXRiaXHJmSBkYXhpbGkgeWFkZGHFn8SxIG3JmWh2IGV0bcmZIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iODg3Nzk5ODEwMTk0NDk5OTM4NiI+ImRheGlsaSB5YWRkYcWfxLEgbW9udGFqIHbJmSB5YSBkZW1vbnRhaiBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSIzNDUxMzYwMTE0OTAyNDkwOTI5Ij4iVMmZdGJpccmZIGRheGlsaSB5YWRkYcWfxLEgcXVyYcWfZMSxcm1hL2F5xLFybWEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX3JlbmFtZSIgbXNnaWQ9Ijc0OTY2MzM5NTQwODA0NzI0MTciPiJkYXhpbGkgeWFkZGHFn8SxbiBhZMSxbsSxIGTJmXlpxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX3JlbmFtZSIgbXNnaWQ9IjE3OTQ3NTc1ODg0NzIxMjc2NzUiPiJUyZl0YmlxyZkgZGF4aWxpIHlhZGRhxZ/EsW4gYWTEsW7EsSBkyZl5acWfbcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJ2aWJyYXNpeWF5YSBuyZl6YXLJmXQgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iVMmZdGJpccmZIHZpYnJhdG9ydSBpZGFyyZkgZXRtyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IkZsYXNoIGnFn8SxxJ/EsW7EsSBpZGFyyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iVMmZdGJpccmZIHNpcW5hbCBpxZ/EscSfxLEgbmEgbsmZemFyyZl0IGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNiIiBtc2dpZD0iMTExMzQ1MzQzMDY0NTQwMjcyMyI+IlVTQiBjaWhhemxhciDDvMOnw7xuIHTJmXJjaWhsyZlyaSB2yZkgaWNhesmZbMmZcmkgaWRhcsmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiJUyZl0YmlxyZkgVVNCIGNpaGF6bGFyIMO8w6fDvG4gb2xhbiB0yZlyY2lobMmZcmkgdsmZIGljYXrJmWzJmXJpIGlkYXLJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc010cCIgbXNnaWQ9IjQ5NTM0Njg2NzY3OTU5MTcwNDIiPiJNVFAgcHJvdG9rb2wgaMmZeWF0YSBrZcOnaXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTXRwIiBtc2dpZD0iNjUzMjk2MTIwMDQ4Njc5MTU3MCI+Iktlcm5lbCBNVFAgZHJheXZlcsmZIGdpcmnFn8mZIGlta2FuIHZlcmlyIGtpLCBNVFAgVVNCIHByb3Rva29sdW51IGjJmXlhdGEga2XDp2lyc2luLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjQxNDgyOTA4NjA0MDA2NTkxNDYiPiJhdmFkYW5sxLHEn8SxIHPEsW5hcSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjY1OTc5NjQxOTEyMDgwMTY2MDUiPiJUyZl0YmlxyZkgYXZhZGFubMSxxJ/EsSB5b3hsYW1hcSDDvMOnw7xuIG3DvHh0yZlsaWYgcGVyaWZlcml5YWxhcsSxIGtvbnRyb2wgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4idGVsZWZvbiBuw7ZtcsmZbMmZcmluyZkgYmlyYmHFn2EgesmZbmcgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJUyZl0YmlxyZkgU2l6aW4gbcO8ZGF4aWzJmW5peiBvbG1hZGFuIHRlbGVmb24gesmZbmdsyZlyaSBldG3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIFNpemTJmW4geMmZYsmZcnNpeiDFn8mZa2lsZMmZIG3DvHh0yZlsaWYgesmZbmdsyZlyIGVkyZlyyZlrLCBTaXrJmSBtYWRkaSB6aXlhbiB2dXJhIGJpbMmZci4gUWV5ZDogQnUsIHTJmXRiaXFsyZlyyZkgdMmZY2lsaSBuw7ZtcsmZbMmZcsmZIHrJmW5nIGV0bcmZecmZIGljYXrJmSB2ZXJtaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjQxOTgzNDkyMTExMDg0OTc4NzkiPiJpc3TJmW5pbMmZbiBuw7ZtcsmZecmZIGJpcmJhxZ9hIHrJmW5nIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiJUyZl0YmlxyZkgU2l6aW4gbcO8ZGF4aWzJmW5peiBvbG1hZGFuLCB0yZljaWxpIHrJmW5nbMmZciBkyZkgZGF4aWwgb2xtYXFsYSwgaXN0yZluaWzJmW4gdGVsZWZvbiB6yZluZ2luaSBldG3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWssIHTJmWNpbGkgbsO2bXLJmWzJmXLJmSBxYW51bnN1eiB6yZluZyB2dXJtYXFsYSBTaXppbiDDvMOnw7xuIGjDvHF1cWkgcHJvYmxlbWzJmXIgeWFyYWRhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4iQ0RNQSBwbGFuxZ9ldCBheWFybGFyxLFuYSBiaXJiYcWfYSBiYcWfbGFtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTYwNDg0ODA5NTMxNTQyMTQyNSI+IkNETUEgdGVsZWZvbiBxdXJhxZ9kxLFybWFsYXLEsW5hIGJpcmJhxZ9hIGJhxZ9sYW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+IlTJmXRiaXHJmSBDRE1BIGhhesSxcmzEscSfxLFuxLEgYmHFn2xhdG1hIGljYXrJmXNpIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgZWh0aXlhYyBvbG1hZMSxcWRhIENETUEgaGF6xLFybMSxxJ/EsW7EsSBiYcWfbGFkYSBiaWzJmXJsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+Im3JmWthbiBnw7xuY8mZbGzJmW3JmSBiaWxkaXJpxZ9syZlyaW5pIGlkYXLJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iMTEyMDc0MTU1Nzg5MTQzODg3NiI+IlTJmXRiaXHJmSByYWRpb2RhbiBnyZlsyZluIG3JmWthbiBnw7xuY8mZbGzJmW5tyZlsyZlyaW5pIGFrdGl2IHbJmSB5YSBkZWFrdGl2IGV0bcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+InFleWRpeXlhdCB4w7xzdXNpeXnJmXRsyZlyaW5pIMmZbGTJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI0MDI0NTI2OTY4NjMwMTk0MTI4Ij4iVMmZdGJpccmZIGdpcmnFnyBxZXlkaSBzZXJ2aXNpIHTJmXLJmWZpbmTJmW4gecO8a2zJmW5tacWfIG3DvGxraXl5yZl0yZkgZ2lyacWfaSBveHVtYXEveWF6bWFxIGlta2FubCB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gbsmZesmZcmTJmSB0dXR1bG1hecSxYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiJ2aWRjZXRsyZlyIHNlw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kR2FkZ2V0IiBtc2dpZD0iODI2MTMyNjkzODU5OTA0OTI5MCI+IlTJmXRiaXHJmSBzaXN0ZW3JmSBoYW5zxLEgdmlkY2V0aW4gaGFuc8SxIHTJmXRiaXEgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbMmZIGJpbG3JmXNpbmkgZGVtyZl5yZkgaWNhesmZIHZlcmlyLiBCdSBpY2F6yZlsaSB0yZl0YmlxbMmZciDFn8mZeHNpIG3JmWx1bWF0bGFyYSB2yZkgZGlnyZlyIHTJmXRiaXFsyZlyyZkgw6fEsXjEscWfIHZlcsmZIGJpbMmZci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIMO8w6fDvG4gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iODQyMzkyMzc3NzY1OTI5MjIyOCI+InRlbGVmb24gc3RhdHVzdW51IGTJmXlpxZ9tyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9IjEwMjk4Nzc1MjkwMDc2ODY3MzIiPiJUyZl0YmlxyZkgY2loYXrEsW4gdGVsZWZvbiBmdW5rc2l5YWxhcsSxbsSxIGlkYXLJmSBldG3JmWsgaW1rYW7EsSB2ZXJpci4gQmVsyZkgaWNhesmZbGkgdMmZdGJpcSBTaXppIHjJmWLJmXJkYXIgZXRtyZlkyZluIMWfyZliyZlryZlsyZlyaSBxb8WfYSwgdGVsZWZvbiByYWRpb3N1bnUgeWFuZMSxcsSxYi1zw7ZuZMO8csmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iOTE3ODIyODUyNDUwNzYxMDQ4NiI+InRlbGVmb24gc3RhdHVzdW51IHbJmSBpZGVudGlmaWthc2l5YW7EsSBveHV5dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjE2MzkyMTI3NzE4MjYxMjU1MjgiPiJUyZl0YmlxyZkgY2loYXrEsW4gdGVsZWZvbiBmdW5rc2l5YWxhcsSxbmEgZ2lyacWfIGljYXrJmXNpIHZlcmlyLiBCZWzJmSBpY2F6yZlsaSB0yZl0YmlxIGJ1IHRlbGVmb251biBuw7ZtcsmZc2luaSB2yZkgY2loYXogxLBEXCduaSwgesmZbmdpbiBha3RpdiBvbHViLW9sbWFkxLHEn8SxbsSxIHbJmSB6yZluZyBlZGlsyZluIG7Dtm1yyZluaSBtw7zJmXl5yZluIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiJwbGFuxZ9ldGluIHl1eHUgcmVqaW1pbmluIHFhcsWfxLFzxLFuxLEgYWxtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTczNDgwMTg3OTQxNDk2MTMwIj4idGVsZWZvbnVuIHl1eHUgcmVqaW1pbsmZIGtlw6dtyZlzaW5pIMmZbmfJmWxsyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluIHl1eHUgcmVqaW1pbmkgcWFkYcSfYW4gZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NTU5MTAwNjc3MzcyOTI4NzU0Ij4iVMmZdGJpccmZIHRlbGVmb251biB5dXh1IHJlamltaW5pIHFhZGHEn2FuIGV0bcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3ODcwMzQ3MjI2MTYzNTA0MTciPiJwbGFuxZ9ldGkgeWFuZMSxcm1hIHbJmSB5YSBzw7ZuZMO8cm3JmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTI4NjIyNDcwOTgwOTQzMjA2Ij4idGVsZWZvbnUgeWFuZMSxcm1hcSB2yZkgeWEgc8O2bmTDvHJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiJUyZl0YmlxyZkgcGxhbsWfZXRpIHlhbmTEsXJtYcSfYSB2yZkgc8O2bmTDvHJtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2MDM3MDU3MzQ4NDYzMTMxMDMyIj4iVMmZdGJpccmZIHRlbGVmb251IHlhbmTEsXLEsWIgc8O2bmTDvHJtyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mYWN0b3J5VGVzdCIgbXNnaWQ9IjM3MTUyMjU0OTI2OTY0MTYxODciPiJ6YXZvZCB0ZXN0IHJlamltaW5kyZkgacWfbMmZeWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NTIwNTkzMTgzNTk2NTMwOTEiPiJQbGFuxZ9ldCBhdmFkYW5sxLHEn8SxbmEgdGFtIGdpcmnFn8mZIGlta2FuIHZlcm3JmWtsyZkgYcWfYcSfxLEgc8mZdml5ecmZbGkgaXN0ZWhzYWzDp8SxIHPEsW5hxJ/EsSBraW1pIGnFn2zJmXlpci4gWWFsbsSxeiBwbGFuxZ9ldCBpc3RlaHNhbMOnxLEgc8SxbmFxIHJlamltaW5kyZkgb2xkdXFkYSBpxZ9syZl5aXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTM2NjQ0OTkwMzE5MjQ0ODAyIj4iQmlyIGHFn2HEn8SxIHPJmXZpeXnJmWxpIGlzdGVoc2Fsw6fEsSB0ZXN0aSBraW1pIMOnYWzEscWfZMSxcsSxbiwgdGVsZWZvbiBoYXJkd2FyZSDDvMOnw7xuIHRhbSBnaXJpxZ8gaW1rYW7EsSB2ZXJpci4gQW5jYXEgdGVsZWZvbiwgaXN0ZWhzYWzDp8SxIHRlc3QgcmVqaW1pbmTJmSDDp2FsxLHFn2TEscSfxLEgemFtYW4gYWt0aXZkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXIiIG1zZ2lkPSI2NjI3MTkyMzMzMzczNDY1MTQzIj4iZGl2YXIga2HEn8SxesSxIHllcmzJmcWfZGlyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4iVMmZdGJpccmZIHNpc3RlbcmZIGRpdmFyIGthxJ/EsXrEsSB5ZXJsyZnFn2Rpcm3JmWsgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjMyNzg2MDgxNjU5Nzc3MzY1MzgiPiJkaXZhciBrYcSfxLF6xLEgw7Zsw6fDvHPDvG7DvCB2ZXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iODIzNTc4NDM4NDIyMzczMDA5MSI+IlTJmXRiaXHJmSBzaXN0ZW0gZGl2YXIga2HEn8SxesSxIMO2bMOnw7xzw7wgZ8O2c3TJmXJpxZ9syZlyaW5pIG3DvMmZeXnJmW4gZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXN0ZXJDbGVhciIgbXNnaWQ9IjIzMTU3NTA0MjMxMzk2OTczOTciPiJmYWJyaWsgZGVmb2x0dW5hIHPEsWbEsXJsYW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hc3RlckNsZWFyIiBtc2dpZD0iMzY2NTM4MDQ5MjYzMzkxMDIyNiI+IlTJmXRiaXHJmSBiw7x0w7xuIG3JmWx1bWF0bGFyxLEsIG5pemFtbGFyxLEgdsmZIHF1cmHFn2TEsXLEsWxtxLHFnyB0yZl0YmlxbMmZcmkgc2lsyZlyyZlrIHNpc3RlbWkgZmFicmlrIG5pemFtbGFyxLFuYSBxYXl0YXJtYXEgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWUiIG1zZ2lkPSIyMDIxNjE0ODI5NTkxNzc1NjQ2Ij4idmF4dMSxIHTJmXlpbiBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTg5NjM0MTQzODE1MTE1Mjg4MSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluIHNhYXQgdmF4dMSxbsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NTU3MDI3MzA3MzgwMjAiPiJUyZl0YmlxyZkgdGVsZWZvbnVuIHNhYXQgdmF4dMSxbsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lWm9uZSIgbXNnaWQ9IjI5NDUwNzk4MDEwMTMwNzczNDAiPiJ2YXh0IHpvbmFzxLFuxLEgcXVyYcWfZMSxcsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW4gdmF4dCB6b25hc8SxbsSxIGTJmXlpxZ9tyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDk5OTQzNDg4NDM2NjMzMzk4Ij4iVMmZdGJpccmZIHRlbGVmb24gc2FhdCB6b2xhxJ/EsW7EsSBkyZl5acWfbcmZayDDvMOnw7xuIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+IkFjY291bnRNYW5hZ2VyU2VydmljZSBraW1pIGRhdnJhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiJUyZl0YmlxyZkgQWNjb3VudEF1dGhlbnRpY2F0b3JzXCfJmSB6yZluZyBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFjY291bnRzIiBtc2dpZD0iMTA4Njc5NTQ2Nzc2MDEyMjExNCI+ImNpaGF6ZGEgaGVzYWJsYXLEsSB0YXDEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc0MTQ5NjUzNDc2OTY2MDAyNyI+IlTJmXRiaXHJmSBwbGFuxZ9ldCB0yZlyyZlmaW5kyZluIGJpbGluyZluIGhlc2FibGFyxLFuIHNpeWFoxLFzxLFuxLEgYWxtYSBpY2F6yZlzaSB2ZXJpci4gQnUgcXVyYcWfZMSxcmTEscSfxLFuxLF6IHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4geWFyYWTEsWxtxLHFnyBpc3TJmW5pbMmZbiBoZXNhYiBvbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ0ODMxNjgyMjQ1MTgwNzM4MiI+IlTJmXRiaXHJmSB0ZWxlZm9uZGEgb2xhbiBoZXNhYmxhcsSxbiBzaXlhaMSxc8SxbsSxIMmZbGTJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4gQnVuYSBxdXJhxZ9kxLFyZMSxxJ/EsW7EsXogaXN0yZluaWzJmW4gdMmZdGJpcSB0yZlyyZlmaW5kyZluIHlhcmFkxLFsYW4gaGVzYWJsYXIgZGEgYWlkZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4iaGVzYWJsYXIgeWFyYWTEsXIgdsmZIHBhcm9sbGFyIHTJmXlpbiBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1NDcyMTI0Mjk2OTA4OTc3MjYwIj4iVMmZdGJpccmZIEFjY291bnRNYW5hZ2VyXCdpbiBoZXNhYiB5YXJhdG1hcSB2yZkgcGFyb2wgYWxtYXEgdsmZIGHDp21hcSBkYXhpbCBvbG1hcWxhIGLJmXJhYsmZciwgaGVzYWIgdMmZc2RpcWzJmXlpY2kgaW1rYW5sYXLEsW7EsSBpc3RpZmFkyZkgZXRtyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4iaGVzYWJsYXLEsSDJmWxhdsmZIGVkaXIgdsmZIHlhIHNpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI4Njk4Mjk1NjI1NDg4MjkyNTA2Ij4iVMmZdGJpccmZIGhlc2FibGFyxLFuIMmZbGF2yZkgb2x1bm1hc8SxIHbJmSB5YSBzaWxpbm3JmXNpLCBoyZltw6dpbmluIG9ubGFyxLFuIHBhcm9sbGFyxLFuxLFuIHNpbGlubcmZc2kga2ltaSDJmW3JmWxpeXlhdGxhcsSxIGljcmEgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2VDcmVkZW50aWFscyIgbXNnaWQ9IjIzNTQ4MTM5NjE2Mzg3NzY0MiI+ImNpaGF6ZGEgaGVzYWJsYXIgaXN0aWZhZMmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+IlTJmXRiaXHJmSBhdXRlbnRpZmlrYXNpeWEgdG9rZW5syZlyaSBzb3LEn3VsYXLEsW7EsSBnw7ZuZMmZcm3JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4ixZ/JmWLJmWvJmSBiYcSfbGFudMSxbGFyxLFuYSBiYXhtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI4MzE4OTY0NDI0Njc1OTYwOTc1Ij4iVMmZdGJpccmZIG3DtnZjdWQgb2xhbiB2yZkgcW/Fn3VsYW4gxZ/JmWLJmWvJmWzJmXIga2ltaSBxb8WfdWxtYWxhciBoYXFxxLFuZGEgbcmZbHVtYXTEsSBnw7ZybcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iODAxODc1ODEzNjQwNDMyMzY1OCI+InRhbSDFn8mZYsmZa8mZIGdpcmnFn2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjM0MDMwNjIxODc3Nzk3MjQxODUiPiJUyZl0YmlxyZkgxZ/JmWLJmWvJmSBzb2tldGzJmXJpbmkgeWFyYXRtYcSfYSB2yZkgZsmZcmRpIMWfyZliyZlryZkgcHJvdG9rb2xsYXLEsW7EsSBpc3RpZmFkyZkgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIEJyYXV6ZXIgdsmZIGRpZ8mZciB0yZl0YmlxbMmZciBkYXRhbsSxbiBpbnRlcm5ldMmZIMO2dMO8csO8bG3JmXNpbmkgdMmZbWluIGVkyZluIHbJmXNhaXRsyZlyIHZlcmlyLCBvbmEgZ8O2csmZIGTJmSBkYXRhbsSxbiBpbnRlcm5ldMmZIGfDtm5yyZlkaWxtyZlzaSDDvMOnw7xuIGJ1IGljYXrJmSB0yZlsyZliIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTA1NjYwMTU5Njc1NzUxODk2Ij4ixZ/JmWLJmWvJmSBuaXphbWxhcsSxbsSxIHbJmSB0cmFmaWtpIGTJmXlpxZ9kaXJpci9xYXLFn8Sxc8SxbsSxIGFsxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUzMzM3OTg4ODY0MTI3MTQxOTMiPiJUyZl0YmlxyZkgxZ/JmWLJmWvJmSB0cmFmaWtpbmluIHFhcsWfxLFzxLFuxLEgYWxtYXEgw7zDp8O8biDFn8mZYsmZa8mZIG5pemFtbGFyxLFuxLEgZMmZeWnFn23JmSBpY2F6yZlzaSB2ZXJpciwgbcmZc8mZbMmZbiBwcm9rc2luaSB2yZkgeWEgaXN0yZluaWzJmW4gQVBOLWluIHBvcnR1bnUuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciDFn8mZYsmZa8mZIHBha2V0bMmZcmluaSBzaXppbiBiaWxnaW5peiBvbG1hZGFuIG1vbml0b3JpbnEgZWTJmSwgecO2bmzJmW5kaXLJmSB2yZkgeWEgcmVkYWt0yZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI5NTg4ODQyOTE0NTQzMjczMDkiPiLFn8mZYsmZa8mZIGJhxJ9sYW50xLFzxLFuxLEgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+IlTJmXRiaXHJmSDFn8mZYsmZa8mZIHbJmXppeXnJmXRpbmkgZMmZeWnFn23JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjU5NTI1ODQ5NjQzNzMwMTc5NjAiPiJTyZlyaMmZZGxpIGJhxJ9sYW50xLFuxLEgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSIxNTI0NDQxMzQ0NDEyMzE5NzgwIj4iVMmZdGJpccmZIGJpcmzJmcWfaWxtacWfIMWfyZliyZlryZkgYmHEn2xhbnTEsXPEsW7EsW4gc3RhdHVzdW51IGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSIxNDAwNjY2MDEyNjcxNjQ4NzQxIj4iYXJ4YWZvbiBkYXRhIGlzdGlmYWTJmXNpIGF5YXLEsW7EsSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSI1MzQ3NzI5NTc4NDY4NzQ0Mzc5Ij4iVMmZdGJpccmZIGZvbiByZWppbWkgbml6YW1sYXLEsW7EsSBkyZl5acWfbcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiJXaS1GaSBiYcSfbGFudMSxbGFyxLFuYSBiYXhtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4iVMmZdGJpccmZIFdpLUZpIMWfyZliyZlryZlsyZlyaSBoYXFxxLFuZGEgbcmZbHVtYXTEsSBnw7ZybcmZecmZIGljYXrJmSB2ZXJpciwgbcmZc8mZbMmZbiwgV2ktRmkgbcO2dmN1ZGx1xJ91IHbJmSBxb8WfdWxtdcWfIFdpLUZpIGNpaGF6bGFyxLFuxLFuIGFkbGFyxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4iV2ktRmkgxZ/JmWLJmWvJmXNpbsmZIHFvxZ91bG1hcSB2yZkgeWEgYXlyxLFsbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+IlTJmXRiaXHJmSBXaS1GaSDDp8SxeMSxxZ8gbsO2cXTJmXNpbsmZIHFvxZ91bG1hcSB2yZkgb25kYW4gYXlyxLFsbWFxIHbJmSBjaWhhesSxbiBXaS1GaSDFn8mZYsmZa8mZIG5pemFtbGFyxLFuxLEgZMmZeWnFn23JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4iV2ktRmkgTXVsdGljYXN0IHHJmWJ1bHVuYSBpY2F6yZkgdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3OTY5Nzc0MDIxMjU2MzM2NTQ4Ij4iVMmZdGJpccmZIFdpLUZpIMWfyZliyZlryZlkyZkgc2l6aW4gcGxhbsWfZXRkyZluIGJhxZ9xYSBkaWfJmXIgbXVsdGlrYXN0IGFkcmVzbMmZcsmZIHnDtm5syZluZGlyaWxtacWfIHBha2V0bMmZcmkgYWxtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IHFleXJpLcOnb3hhZHJlc2xpIHJlamltZMmZbiBmyZlxbGkgb2xhcmFxIGRhaGEgw6dveCBlbmVyamkgacWfbMmZZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiJUyZl0YmlxyZkgcXJ1cCDDvG52YW5sYXIgaXN0aWZhZMmZIGV0bcmZa2zJmSwgV2ktRmkgxZ/JmWLJmWvJmXNpbmTJmSBvbGFuIGLDvHTDvG4gY2loYXpsYXJhIGfDtm5kyZlyaWxtacWfIHBha2V0bMmZcmkgccmZYnVsIGV0bcmZecmZIGlta2FuIHZlcmlyLiBCdW5hIGRhaGEgw6dveCBlbmVyamkgc8mZcmYgb2x1bnVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4iQmx1ZXRvb3RoIGF5YXJsYXLEsW7EsSDJmWxkyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4iVMmZdGJpccmZIHllcmxpIEJsdWV0b290aCBwbGFuxZ9ldGluaW4ga29uZmlxdXJhc2l5YXPEsW7EsSBnw7ZybcmZecmZIHbJmSBtyZlzYWbJmWTJmW4gY2loYXpsYXLEsSB0YXBtYcSfYSB2yZkgY8O8dGzJmW3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MzE2ODIxNTkzMzE1NDIxMzciPiJUyZl0YmlxyZkgbG9rYWwgQmx1ZXRvb3RoIHRlbGVmb251bnUga29uZmlxdXLJmSBldG3JmXnJmSB2yZkgdXphcSBjaWhhemxhcsSxIGvJmcWfZiBldG3JmWsgdsmZIG9ubGFyYSBxb8WfdWxtYXEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+IldpTUFYXCdhIHFvxZ91bCB2yZkgYmHEn2xhbnTEsW7EsSBryZlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiJUyZl0YmlxyZkgV2lNQVggbcO2dmN1ZGx1xJ91IHbJmSBxb8WfdWxtdcWfIFdpTUFYIMWfyZliyZlryZlsyZlyaW5pIHTJmXlpbiBldG3JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+IldpTUFYIHbJmXppeXnJmXRpbmkgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzE1NjQ1NjUwNDA4NDIwMTgwNSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGkgV2lNQVggxZ/JmWLJmWvJmWzJmXJpbsmZIHFvxZ9tYXEgdsmZIG9ubGFyZGFuIGF5xLFybWFxIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiJUyZl0YmlxyZkgdGVsZWZvbnUgV2lNQVggxZ/JmWLJmWvJmXNpbsmZIHFvxZ9tYcSfYSB2yZkgeWEgV2lNQVggxZ/JmWLJmWvJmXNpbmTJmW4gYXnEsXJtYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aCIgbXNnaWQ9IjYxMjc3NjkzMzYzMzkyNzY4MjgiPiJCbHVldG9vdGggY2loYXpsYXLEsSBpbMmZIGPDvHRsyZluZGlybcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IlTJmXRiaXHJmSB5ZXJsaSBCbHVldG9vdGggcGxhbsWfZXRpbmluIGtvbmZpcXVyYXNpeWFzxLFuxLEgZ8O2cm3JmXnJmSB2yZkgY8O8dGzJmW5tacWfIGNpaGF6bGFybGEgYmHEn2xhbnTEsWxhciBldG3JmXnJmSB2yZkgccmZYnVsIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiJUyZl0YmlxyZkgQmx1ZXRvb3RoIHbJmSB5YSB0ZWxlZm9uIGtvbmZpcXVyYXNpeWFsYXLEsW7EsSBnw7ZybcmZecmZIHbJmSBxb8WfdWxtdcWfIGNpaGF6bGFybGEgyZlsYXHJmSBxdXJtYcSfYSB2yZkgccmZYnVsIGV0bcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX25mYyIgbXNnaWQ9IjQ0MjMzNTEyNzQ3NTc4NzY5NTMiPiJOZWFyIEZpZWxkIENvbW11bmljYXRpb25cJ8SxIGtvbnRyb2wgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19uZmMiIG1zZ2lkPSI3MTIwNjExODE5NDAxNzg5OTA3Ij4iVMmZdGJpccmZIFlheMSxbiBNyZlzYWbJmSBLb21tdW5pa2FzaXlhc8SxIChORkMpIHRlcWzJmXJpLCBrYXJ0bGFyxLEgdsmZIG94dXl1Y3VsYXLEsSBpbMmZIMmZbGFxyZkgcXVybWHEn2EgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+IkVrcmFuIGtpbGlkaW5pIGRlYWt0aXYgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjYwMzQyMDMwNjUwNzcxMjI5OTIiPiJUyZl0YmlxyZkga2lsaWQgYcOnYXLEsW7EsSB2yZkgdMmZaGzDvGvJmXNpemxpayBwYXJvbHVudSBkZWFrdGl2IGV0bcmZecmZIGlta2FuIHZlcmlyLiBRYW51bmkgbWlzYWwgYnVkdXIga2ksIHRlbGVmb24gesmZbmcgccmZYnVsIGVkyZluIHphbWFuIGtpbGlkaSBhw6fEsXIgdsmZIHrJmW5nIHF1cnRhcmFuZGFuIHNvbnJhIGtpbGlkaSBiYcSfbGF5xLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjYyMDE4MTAwMDgyMzA1MDMwNTIiPiJzaW54IGF5YXJsYXLEsW7EsSBveHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iMjcwNjc0NTY3NDU2OTY3ODY0NCI+IlTJmXRiaXHJmSBoZXNhYmxhciDDvMOnw7xuIHNpbnhyb25pemFzaXlhIG5pemFtbGFyxLFuxLEgb3h1bWEgaWNhesmZc2kgdmVyaXIuIE3JmXPJmWzJmW4sIGJ1IMWeyZl4c2zJmXIgdMmZdGJpcWluaW4gc2lueHJvbml6yZkgb2x1bnViLW9sdW5tYWTEscSfxLFuxLEgdMmZeWluIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI1NDA4Njk0ODc1NzkzOTQ1MzE0Ij4ic2lueHJvbml6YXNpeWF5YSBkYXZhbSBlZGlyIHbJmSBvbnUgc8O2bmTDvHLDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9Ijg5NTYyNjI1OTEzMDYzNjk4NjgiPiJUyZl0YmlxyZkgaGVzYWIgw7zDp8O8biBzaW54cm9uaXphc2l5YSBuaXphbWxhcsSxbsSxIGTJmXlpxZ9tyZl5yZkgaWNhesmZIHZlcmlyLiBNyZlzyZlsyZluLCBidSBpc3RpZmFkyZnDp2kgaGVzYWJsxLEgxZ7JmXhzbMmZciB0yZl0YmlxaW5pbiBzaW54cm9uaXphc2l5YXPEsW7EsSBiYcWfbGFtYXEgw7zDp8O8biBpc3RpZmFkyZkgZWRpbMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSI3Mzk2NTc3NDUxMzYwMjAyNDQ4Ij4ic2lueHJvbml6YXNpeWEgc3RhdGlzdGlrYXPEsW7EsSBveHVtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1N0YXRzIiBtc2dpZD0iMTUxMDE0Mzc2MTc1NzYwNjE1NiI+IlTJmXRiaXHJmSBzeW5jIHTJmWRiaXJsyZlyaW5pbiB0YXJpeMOnyZlzaSB2yZkgbsmZIHHJmWTJmXIgZGF0YW7EsW4gc2lueCBvbGR1xJ91IGRhIGRheGlsIG9sbWFxbGEgYsmZcmFiyZlyLCBoyZlyIGhhbnPEsSBiaXIgaGVzYWIgw7zDp8O8biBvbGFuIHNpbnggc3RhdGxhcsSxbsSxIG94dW1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjQ3NTY2MDk2MzcwNTMzNTMzMTgiPiJhYnVuyZkgb2x1bm11xZ8geMmZYsmZcmzJmXJpIG94dXl1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI1NTU3MDU4OTA3OTA2MTQ0NTA1Ij4iVMmZdGJpccmZIGhhesSxcmRhIHNpbnhyb24gbGVudGzJmXIgaGFxccSxbmRhIMmZdHJhZmzEsSBtyZlsdW1hdCBhbG1hcSDDvMOnw7xuIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI5MDE1MjQ2MzI1NDA4MjA5Mjk2Ij4iYWJ1bsmZIG9sdW5tdcWfIHjJmWLJmXJsyZlyaSB5YXrEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjY5Mjg5MzAxODg4MjYwODk0MTMiPiJUyZl0YmlxyZkgY2FyaSBzaW54cm9ubGHFn23EscWfIGxlbnRsyZlyaW5pesmZIGTJmXlpxZ9pa2xpayBldG3JmWsgaW1rYW7EsSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIHNpeHJvbmxhxZ9txLHFnyBsZW50bMmZcmluaXppIGTJmXlpxZ/JmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjQxMDcxMDE1MjU3NDYwMzU3MTgiPiJsw7zEn8mZdMmZIMmZbGF2yZkgZXRkaXlpbml6IMWfyZlydGzJmXJpIG94dW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNjU5NjE0NjAwMzM4OTA0MjQzIj4iVMmZdGJpccmZIGlzdGlmYWTJmcOnaW5pbiBsw7zEn8mZdGTJmSBzYXhsYWTEscSfxLEgYsO8dMO8biBzw7Z6bMmZcmksIGFkbGFyxLEgdsmZIGZyYXphbGFyxLEgb3h1bWFxIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjE4MzExMDQwMjMxNDQ0MTEwNiI+ImlzdGlmYWTJmcOnaSBsw7zEn8mZdGluyZkgc8O2emzJmXIgyZlsYXbJmSBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MTg1Mzg1NzE2MjU1MDY1MjkxIj4iVMmZdGJpccmZIGlzdGlmYWTJmcOnaSBsw7zEn8mZdGluyZkgeWVuaSBzw7Z6bMmZciB5YXptYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+InFvcnVubXXFnyB5YWRkYcWfYSBkYXhpbCBvbG1hxJ9hIGPJmWhkIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgyMzUzNDE1MTU2MDU1NTk2NzciPiJxb3J1bm11xZ8geWFkZGHFn2EgZGF4aWwgb2xtYcSfYSBjyZloZCBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM2NDI0NzMyOTIzNDgxMzIwNzIiPiJUyZl0YmlxyZkgZ8mZbMmZY8mZayBjaWhhemxhcmRhIMmZbMOnYXTEsW1sxLEgb2xhY2FxIFVTQiB5YWRkYcWfIMO8w6fDvG4gaWNhesmZIHRlc3RpIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1OTE0NDAyNjg0Njg1ODQ4ODI4Ij4iVMmZdGJpccmZIGfJmWzJmWPJmWsgY2loYXpsYXJkYSBtw7Z2Y3VkIG9sYWNhcSBTRCBrYXJ0IMO8w6fDvG4gaWNhesmZbmkgdGVzdCBldG3JmWsgw7zDp8O8biBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijg0ODU5NzkwNjIyNTQ2NjY3NDgiPiJVU0IgeWFkZGHFn8SxbsSxesSxbiBtyZl6bXVudW51IGTJmXlpxZ9tyZlrIHbJmSB5YSBzaWxtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiJTRCBrYXJ0IGtvbnRlbnRsyZlyaW5pIGTJmXlpxZ9pciB2yZkgeWEgc2lsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTc1NDA2Mjk5NDQ1NzEwODg4Ij4iVMmZdGJpccmZIFVTQiB5YWRkYcWfYSB5YXptYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiJUyZl0YmlxyZkgU0Qga2FydGEgeWF6bWEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTk4MzkxOTk3MDY4NzkwMTUiPiJkYXhpbGkgbWVkaWEgeWFkZGHFn8SxIGtvbnRlbnRpbmkgZMmZeWnFn2lyL3NpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTg5MTYwNTk3Njk4NTI5MTg1Ij4iVMmZdGJpccmZIGRheGlsaSBtZWRpYSB5YWRkYcWfZGFrxLEga29udGVudGkgcmVkYWt0yZkgZXRtyZlrIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3NzgzMTg1OTg0NDg4NDk4MjkiPiJzyZluyZlkIHlhZGRhxZ/EsW7EsSBuaXphbWxhecSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NzA0MzIzMTc2OTE0MTIxNDg0Ij4iVMmZdGJpccmZIHPJmW7JmWQgeWFkZGHFn8SxbsSxIGlkYXLJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjgxNTA2MTM4MjM5MDA0NjA1NzYiPiJiw7x0w7xuIGlzdGlmYWTJmcOnaWzJmXJpbiB4YXJpY2kgeWFkZGHFn8SxbmEgZGF4aWwgb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSIzMjE1MjA4MzU3NDE1ODkxMzIwIj4iVMmZdGJpccmZIGLDvHTDvG4gaXN0aWZhZMmZw6dpbMmZciDDvMOnw7xuIG9sYW4geGFyaWNpIHlhZGRhxZ9hIGdpcmnFnyBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU2NTY0ODcyNjQ4MTk2Njk4MjQiPiJrZcWfIGZheWwgc2lzdGVtaW7JmSBnaXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiJUyZl0YmlxyZkga2XFnyBmYXlsIHNpc3RlbWluaSBveHVtYcSfYSB2yZkgeWF6bWHEn2EgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiLEsG50ZXJuZXQgesmZbmdsyZlyaSBldG3JmWsgdsmZIHlhIHHJmWJ1bCBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+IlTJmXRiaXHJmSBpbnRlcm5ldCB6yZluZ2zJmXJpbmluIGfDtm5kyZlyaWxtyZlzaSB2yZkgccmZYnVsIGVkaWxtyZlzaSDDvMOnw7xuIFNJUCBzZXJ2aXNpbmTJmW4gaXN0aWZhZMmZIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4idGFyaXhpIMWfyZliyZlryZkgaXN0aWZhZMmZc2luaSBveHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiJUyZl0YmlxyZkgeMO8c3VzaSDFn8mZYsmZa8mZbMmZciB2yZkgdMmZdGJpcWzJmXIgw7zDp8O8biB0YXJpeGkgxZ/JmWLJmWvJmSBpc3RpZmFkyZlzaW5pIG94dW1hxJ9hIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSIyNTYyMDUzNTkyMzM5ODU5OTkwIj4ixZ/JmWLJmWvJmSBzaXlhc8mZdGluaSBpZGFyyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiJUyZl0YmlxyZkgxZ/JmWLJmWvJmSBxYW51bmxhcsSxbsSxIHbJmSB0yZl0YmlxaW4geMO8c3VzaSBxYXlkYWxhcsSxbsSxIGlkYXLJmSBldG3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTA4ODIxNzMwOTA4ODcyOTY1MCI+IsWfyZliyZlryZkgaXN0aWZhZMmZIGhlc2FixLFuxLEgZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiJUyZl0YmlxyZkgxZ/JmWLJmWvJmSBpc3RpZmFkyZlzaW5pbiB0yZl0YmlxbMmZcsmZIHFhcsWfxLEgbml6YW1sYXLEsW7EsSByZWRha3TJmSBldG3JmXnJmSBpY2F6yZkgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsbWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4ic29rZXQgacWfYXLJmWzJmXJpbmkgZMmZeWnFn2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSI3NjU1NTY4NDMzNjk2MzU2NTc4Ij4iVMmZdGJpccmZIGFyYcWfZMSxcm1hIMO8w6fDvG4gc29rZXQgacWfYXLJmWzJmXJpbmkgZMmZeWnFn23JmWsgaW1rYW7EsSB2ZXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9Ijc2NzM0MTY0ODc4NzM0MzIyNjgiPiJiaWxkaXJpxZ9syZlyyZkgZGF4aWwgb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNDU4NDU3NzQyNjgzNDMxMzg3Ij4iVMmZdGJpccmZIGJpbGRpcmnFn2zJmXJpIMmZbGTJmSBldG3JmXnJmSwgc8SxbmFtYcSfYSB2yZkgdMmZbWl6bMmZbcmZecmZIGlta2FuIHZlcmlyLCBidW5hIGRpZ8mZciB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIHZlcmlsbWnFnyBiaWxkaXJpxZ9syZlyIGTJmSBkYXhpbGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI3MDU3NzY0NzQyMjExNjU2NjU0Ij4iYmlsZGlyacWfIGRpbmzJmW3JmSB4aWRtyZl0aW7JmSBiYcSfbGFuxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9Ijk4NTY5NzkxODU3NjkwMjk4NiI+IlNhaGliaW7JmSB5w7xrc8mZayBzyZl2aXl5yZlsaSBiaWxkaXJpxZ8gZGlubMmZbcmZIHNlcnZpc2kgaWzJmSDJmWxhccmZIHNheGxhbWHEn2EgaWNhesmZIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBoZcOnIHZheHQgaXN0yZluaWxtyZltyZlsaWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjM2OTk2MDA4MzM5NzUxMTc0NzgiPiJvcGVyYXRvciB4aWRtyZl0bGkga29uZml1cmFzaXlhIHTJmXRiaXFpbsmZIG3DvHJhY2nJmXQgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjQxNTk1NDkxNTI1MjkxMTE5MjAiPiJTYWhpYmluyZkgb3BlcmF0b3IgeGlkbcmZdGxpIHTJmXRiaXEga29uZmlxdXJhc2l5YXPEsW5hICBtw7xyYWNpyZl0IGlta2FuxLEgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIHTJmWzJmWIgb2x1bm1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI4MjA2MDc3NDQ3ODM4OTA5NTE2Ij4ixZ/JmWLJmWvJmSDFn8mZcmFpdGkgaGFxccSxbmRhIG3DvMWfYWhpZMmZbMmZciDDvMOnw7xuIHF1bGFxIGFzbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI2ODk5MTAyMDc1ODI1MjcyMjExIj4iVMmZdGJpccmZIMWfyZliyZlryZkgxZ/JmXJhaXRpIMO8enLJmSBtw7zFn2FoaWTJmWzJmXIgw7zDp8O8biBxdWxhcSBhc21hcSBpbWthbsSxIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBoZcOnIHZheHQgbGF6xLFtIG9sbWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ob3R3b3JkUmVjb2duaXRpb24iIG1zZ2lkPSIzMjI1MDgwNDA4NzQ2MzYxMzEzIj4iaXN0aSBzw7Z6IHRhbsSxbm1hc8SxIHTJmWzJmWIgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ob3R3b3JkUmVjb2duaXRpb24iIG1zZ2lkPSIzNzE2NzQxMjYwMTk1MzY0MjUyIj4iVMmZdGJpccmZIGlzdGkgc8O2eiB0YW7EsW5tYXPEsSB0yZlsyZliIGV0bcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcSDDvMOnw7xuIGxhesSxbSBvbGEgYmlsbcmZei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiJQYXJvbCBxYXlkYWxhcsSxbsSxIHTJmXlpbiBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19saW1pdFBhc3N3b3JkIiBtc2dpZD0iMzI1MjExNDIwMzkxOTUxMDM5NCI+IkVrcmFuIGtpbGlkaW5pIGHDp2FuIMWfaWZyyZlsyZlyaW4gdXp1bmx1xJ91bnUgdsmZIG9ubGFyZGFrxLEgaWNhesmZIHZlcmlsyZluIGnFn2FyyZlsyZlyyZkgbsmZemFyyZl0IGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dhdGNoTG9naW4iIG1zZ2lkPSI5MTQxMzA2NDY5NDIxOTk1MDMiPiJFa3JhbiBraWxpZGkgY8mZaGRsyZlyaW5pIG1vbml0b3JpbnEgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyMTU3MjkyOTQyMTUwNzAwNzIiPiJFa2FuIGtpbGlkaW5pIGHDp2Fya8mZbiBkYXhpbCBlZGlsbWnFnyB5YW5sxLHFnyBwYXJvbGxhcmEgYmF4xLFuIHbJmSDJmWfJmXIgaMmZZGRpbmTJmW4gw6dveCB5YW5sxLHFnyBwYXJvbGxhciBkYXhpbCBlZGlsaWJzyZksIHBsYW7Fn2V0aSBraWxpZGzJmXlpbiB2yZkgeWEgYsO8dMO8biBwbGFuxZ9ldCBkYXRhc8SxbsSxIHNpbGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiJFa2FuIGtpbGlkaW5pIGHDp2Fya8mZbiBkYXhpbCBlZGlsbWnFnyB5YW5sxLHFnyBwYXJvbGxhcmEgYmF4xLFuIHbJmSDJmWfJmXIgaMmZZGRpbmTJmW4gw6dveCB5YW5sxLHFnyBwYXJvbGxhciBkYXhpbCBlZGlsaWJzyZksIHRlbGVmb251IGtpbGlkbMmZeWluIHbJmSB5YSBiw7x0w7xuIHRlbGVmb24gZGF0YXPEsW7EsSBzaWxpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjI2MjAwNzcxOTEyNDI2ODg5NTUiPiJFa3JhbiBraWxpZCBwYXJvbHVudSBkyZl5acWfaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiJFa3JhbiBraWxpZGluaSBhw6dhbiDFn2lmcsmZbmkgZMmZeWnFn2RpcmluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9mb3JjZUxvY2siIG1zZ2lkPSIyMjc0MDg1Mzg0NzA0MjQ4NDMxIj4iRWtyYW7EsSBraWxpZGzJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZm9yY2VMb2NrIiBtc2dpZD0iMTE0MTc5NzU4ODQwMzgyNzEzOCI+IkVrcmFuxLFuIG7JmSB2YXh0IHbJmSBuZWPJmSBraWxpZGzJmW5tyZlzaW7JmSBuyZl6YXLJmXQgZWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2lwZURhdGEiIG1zZ2lkPSIzOTEwNTQ1NDQ2NzU4NjM5NzEzIj4iQsO8dMO8biBtyZlsdW1hdGxhcsSxIHNpbGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMwNjE4NDA5NjA2Nzc1Njg3NiI+IlBsYW7Fn2V0aW4gZGF0YXPEsW7EsSB4yZliyZlyZGFybMSxcSBvbG1hZGFuLCB6YXZvZCBkYXRhIHPEsWbEsXJsYW1hc8SxIGlsyZkgc2lsaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUwOTY4OTU2MDQ1NzQxODgzOTEiPiJUZWxlZm9udW4gZGF0YXPEsW7EsSB4yZliyZlyZGFybMSxcSBvbG1hZGFuLCB6YXZvZCBkYXRhIHPEsWbEsXJsYW1hc8SxIGlsyZkgc2lsaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSIyNzg0ODI4MjkzNzQ3NzkxNDQ2Ij4iQ2loYXrEsW4gcWxvYmFsIHByb2tzaXNpbmkgYXlhcmxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSI2Mzg3NDk3NDY2NjYwMTU0OTMxIj4iU2l5YXPJmXQgYWt0aXYgb2xhcmvJmW4gY2loYXrEsW4gcWxvYmFsIHByb2tzaXNpbmkgaXN0aWZhZMmZIMO8w6fDvG4gcXVydW4uIFlhbG7EsXogaWxrIGNpaGF6IGFkbWluaSBlZmZla3RpdiBxbG9iYWwgcHJva3NpbmkgdMmZeWluIGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iODg1Mjc5MTUxODQ3MjU0MDU2Ij4iRWtyYW4ga2lsaWRpIMWfaWZyyZlzaW7JmSBzb24gemFtYW4gc2XDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSIxNzI5NzI1MjI2MzE0NjkxNTkxIj4iRWtyYW4ga2lsaWRpIHBhcm9sdW51biBuyZkgccmZZMmZciB0ZXotdGV6IGTJmXlpxZ9tyZlzaW5pIGtvbnRyb2wgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9Ijg5MDEzMjYxOTk5MDkxMzI5MTUiPiJZYWRkYcWfIMWfaWZyyZlsyZlubcmZc2luaSBheWFybGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+IlTJmXRiaXEgbcmZbHVtYXRsYXLEsW7EsW4gxZ9pZnLJmWzJmW5tyZlzaW5pIHTJmWzJmWIgZWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUNhbWVyYSIgbXNnaWQ9IjYzOTUzMDEwMjMxNTIyOTc4MjYiPiJLYW1lcmFsYXLEsSBkZWthdGl2IGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4iQsO8dMO8biBjaWhheiBrYW1lcmFsYXLEsW7EsW4gaXN0aWZhZMmZc2luaSDJmW5nyZlsbMmZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjI2NjMyOTEwNDU0MjYzODgwMiI+IktsYXZpYXR1cmEga2lsaWRpbmTJmSBmdW5rc2l5YWxhcsSxIGRlYWt0aXYgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIzNDY3MDgyMjcyMTg2NTM0NjE0Ij4iS2xhdmlhdHVyYSBraWxpZGluZMmZIGLJmXppIGZ1bmtzaXlhbGFyxLFuIHFhcsWfxLFzxLFuxLEgYWzEsW4uIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBob25lVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI4OTAxMDk4MzM2NjU4NzEwMzU5Ij4ixo9zYXMgc8mZaGlmyZkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4Njk5MjM2NTA1MjcxMzY2MTUiPiJNb2JpbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4OTc1NDQ2NTQyNDI4NzQ1NDMiPiLEsMWfIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTEwMzYwMTQzMzM4MjE1ODE1NSI+IsSwxZ8gRmFrc8SxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTczNTE3NzE0NDk0ODMyOTM3MCI+IkV2IEZha3PEsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwMzg3ODY3NDQ3NzIwNzM5NCI+IlBleWNlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE2NTA4MjQyNzUxNzc5MzE2MzciPiJEaWfJmXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI5MTkyNTE0ODA2OTc1ODk4OTYxIj4ixZ7JmXhzaSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImVtYWlsQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iODA3Mzk5NDM1Mjk1NjEyOTEyNyI+IkFuYSBzyZloaWbJmSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjcwODQyMzczNTY2MDI2MjU2MDQiPiLEsMWfIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+IkRpZ8mZciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIzNzQ5MTM5NTI4NzAxMTA2MTgiPiJGyZlyZGkiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwb3N0YWxBZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI2ODgwMjU3NjI2NzQwMDQ3Mjg2Ij4ixo9zYXMgc8mZaGlmyZkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NjI5MTUzOTU2MDQ1MTA5MjUxIj4ixLDFnyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiJEaWfJmXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0OTMyNjgyODQ3NTk1Mjk5MzY5Ij4iRMO8esmZbmzJmXlpbiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImltQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iMTczODU4NTE5NDYwMTQ3NjY5NCI+IsaPc2FzIHPJmWhpZsmZIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM1OTY0NDU2NTY0NzM4MzcwOCI+IsSwxZ8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3ODY4NTQ5NDAxMDUzNjE1Njc3Ij4iRGlnyZlyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE0NTExODk0NDYzOTg2OTgwOSI+IkbJmXJkaSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yZ2FuaXphdGlvblR5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzU0NjMzNTYxMjE4OTExNTYxNSI+IsSwxZ8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0Mzc4MDc0MTI5MDQ5NTIwMzczIj4iRGlnyZlyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzQ1NTA0NzQ2ODU4Mzk2NTEwNCI+IkbJmXJkaSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImltUHJvdG9jb2xzIj4KKyAgICA8aXRlbSBtc2dpZD0iODU5NTI2MTM2MzUxODQ1OTU2NSI+IkFJTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjczOTA0NzM2MjgyNzU0OTA3MDAiPiJXaW5kb3dzIExpdmUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3ODgyODc3MTM0OTMxNDU4MjE3Ij4iWWFob28iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1MDM1Mzc2MzEzMjAwNTg1MjQyIj4iU2t5cGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3NTMyMzYzMTc4NDU5NDQ0OTQzIj4iUVEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNzEzNDQxMDM0Mjk5NjYwNzQ5Ij4iR29vZ2xlIFPDtmhiyZl0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjUwNjg1NzMxMjcxODYzMDgyMyI+IklDUSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE2NDg3OTc5MDM3ODUyNzkzNTMiPiJKYWJiZXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUN1c3RvbSIgbXNnaWQ9IjE2NDQ3MzgwNTkwNTMzNTU4MjAiPiLFnsmZeHNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlSG9tZSIgbXNnaWQ9IjI1NzA5MjM0NjMwMzM5ODU4ODciPiJFdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1vYmlsZSIgbXNnaWQ9IjY1MDE0NjM1NTc3NTQ3NTEwMzciPiJNb2JpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmsiIG1zZ2lkPSI4ODYzOTM5NjY3MDU5OTExNjMzIj4ixLDFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUZheFdvcmsiIG1zZ2lkPSIzNTE3NzkyMTYwMDA4ODkwOTEyIj4ixLDFnyBGYWtzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhIb21lIiBtc2dpZD0iMjA2NzI2NTk3MjMyMjk3MTQ2NyI+IkV2IEZha3PEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVBhZ2VyIiBtc2dpZD0iNzU4MjM1OTk1NTM5NDkyMTczMiI+IlBleWNlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU90aGVyIiBtc2dpZD0iMTU0NDQyNTg0Nzg2ODc2NTk5MCI+IkRpZ8mZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNhbGxiYWNrIiBtc2dpZD0iMjcxMjE3NTIwMzA2NTY3ODIwNiI+Ikdlcml5yZkgesmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDYXIiIG1zZ2lkPSI4NzM4MzYwNjg5NjE2NzE2OTgyIj4iQXZ0b21vYmlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ29tcGFueU1haW4iIG1zZ2lkPSI1NDA0MzQzNTY0NjE0Nzg5MTYiPiLFnmlya8mZdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4ixo9zYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVPdGhlckZheCIgbXNnaWQ9Ijg1ODc2NTcxNDUwNzI0NDY1NjUiPiJEaWfJmXIgZmFrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+IlJhZGlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlVGVsZXgiIG1zZ2lkPSIzMzY3ODc5OTUyNDc2MjUwNTEyIj4iVGVsZWtzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlVHR5VGRkIiBtc2dpZD0iODYwNjUxNDM3ODU4NTAwMDA0NCI+IlRUWSBUREQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrTW9iaWxlIiBtc2dpZD0iMTMxMTQyNjk4OTE4NDA2NTcwOSI+Ik1vYmlsIGnFnyB0ZWxlZm9udSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmtQYWdlciIgbXNnaWQ9IjY0OTkzODczMTIzMTE1NzA1NiI+IsSwxZ8gUGV5Y2VyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjU1OTY3NzI2MzYxMjg1NjI4ODQiPiJLw7ZtyZlrw6dpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW1zIiBtc2dpZD0iNzI1NDQ5MjI3NTUwMjc2ODk5MiI+Ik1NUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUN1c3RvbSIgbXNnaWQ9Ijc4Mzc1ODYxOTg0NTgwNzM0MDQiPiJGyZlyZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVCaXJ0aGRheSIgbXNnaWQ9IjI4MTMzNzk4NDQyMTEzOTA3NDAiPiJEb8SfdW0gZ8O8bsO8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQW5uaXZlcnNhcnkiIG1zZ2lkPSIzODc2Nzc5NzQ0NTE4Mjg0MDAwIj4ixLBsZMO2bsO8bcO8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlT3RoZXIiIG1zZ2lkPSI3Mzg4MTc4OTM5MDEwMTQzMDc3Ij4iRGlnyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlQ3VzdG9tIiBtc2dpZD0iODUyNTk2MDI1NzgwNDIxMzg0NiI+IkbJmXJkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUhvbWUiIG1zZ2lkPSI0NDkyMjcyMzYxNDA0MzM5MTkiPiLGj3NhcyBzyZloaWbJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4ixLDFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZU90aGVyIiBtc2dpZD0iMjkyMzAwODY5NTI3MjYzOTU0OSI+IkRpZ8mZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZU1vYmlsZSIgbXNnaWQ9IjExOTkxOTAwNTMyMTE2NjIwNSI+Ik1vYmlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiJGyZlyZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlSG9tZSIgbXNnaWQ9IjgxNjU3NTY5NzcxODQ0ODMwOTciPiLGj3NhcyBzyZloaWbJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVXb3JrIiBtc2dpZD0iNTI2ODE3Mjc3MjM4NzY5NDQ5NSI+IsSwxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4iRGlnyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlQ3VzdG9tIiBtc2dpZD0iMjA3NDAyODc1NTUyNzgyNjA0NiI+IkbJmXJkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUhvbWUiIG1zZ2lkPSI2MjQxMTgxMDMyOTU0MjYzODkyIj4iQW5hIHPJmWhpZsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlV29yayIgbXNnaWQ9IjEzNzE0ODkyOTAyNDI0MzMwOTAiPiLEsMWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlT3RoZXIiIG1zZ2lkPSI1Mzc3MDA3NDk1NzM1OTE1NDc4Ij4iRGlnyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEN1c3RvbSIgbXNnaWQ9IjY5MTk0NTM4MzY2MTg3NDk5OTIiPiLFnsmZeHNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEFpbSIgbXNnaWQ9IjcwNTAzNjA2MTIzNjgzODM0MTciPiJBSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTXNuIiBtc2dpZD0iMTQ0NTU2NTQ1NDIwNzY5NDQyIj4iV2luZG93cyBMaXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFlhaG9vIiBtc2dpZD0iODI3MTQzOTQwODQ2OTAyMTI3MyI+IllhaG9vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFNreXBlIiBtc2dpZD0iOTAxOTI5Njc0NDYyMjgzMjk1MSI+IlNreXBlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFFxIiBtc2dpZD0iODg4NzQ4NDM3OTQ5NDExMTg4NCI+IlFRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiJHw7Zyw7zFn2zJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSWNxIiBtc2dpZD0iMTU3NDg3MDQzMzYwNjUxNzMxNSI+IklDUSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xKYWJiZXIiIG1zZ2lkPSIyMjc5OTE3NjMwODc1NzcxNzIyIj4iSmFiYmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE5ldE1lZXRpbmciIG1zZ2lkPSI4Mjg3NjI1NjU1OTg2ODI3OTcxIj4iTmV0TWVldGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVXb3JrIiBtc2dpZD0iMjkyNjg4NzA1MDUzNjM4NzIiPiLEsMWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZU90aGVyIiBtc2dpZD0iMzk1MTc4MTEzMTU3MDEyNDA4MiI+IkRpZ8mZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVDdXN0b20iIG1zZ2lkPSIyMjU1MjM0MTUzNzIwODgzMjIiPiJGyZlyZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVDdXN0b20iIG1zZ2lkPSIzNTQyNDAzNjc5ODI3Mjk3MzAwIj4ixZ7JmXhzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjYyNzQzMzQ4MjUxOTUzNzkwNzYiPiJLw7ZtyZlrw6dpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQnJvdGhlciIgbXNnaWQ9Ijg3NTc5MTM1MDY3ODQwNjc3MTMiPiJRYXJkYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ2hpbGQiIG1zZ2lkPSIxODkwNzQ2Mjc3Mjc2ODgxNjI2Ij4iVcWfYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVEb21lc3RpY1BhcnRuZXIiIG1zZ2lkPSI2OTA0ODA3MTEyMTIxMTIyMTMzIj4iRXYgeW9sZGHFn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRmF0aGVyIiBtc2dpZD0iNTIyODAzNDY4NzA4MjA1MDcyNSI+IkF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZyaWVuZCIgbXNnaWQ9IjczMTMxMDY3NjI0ODMzOTEyNjIiPiJEb3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTWFuYWdlciIgbXNnaWQ9IjYzNjU2Nzc4NjE2MTAxMzc4OTUiPiJNw7xkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNb3RoZXIiIG1zZ2lkPSI0NTc4NTcxMzUyOTYyNzU4MzA0Ij4iQW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFyZW50IiBtc2dpZD0iNDc1NTYzNTU2NzU2MjkyNTIyNiI+IlZhbGlkZXluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFydG5lciIgbXNnaWQ9IjcyNjY0OTAyODUxMjAyNjI3ODEiPiJPcnRhcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlZmVycmVkQnkiIG1zZ2lkPSIxMDE1NzMwNTk4NDQxMzU1MjQiPiJEyZl2yZl0IGVkyZluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVsYXRpdmUiIG1zZ2lkPSIxNzk5ODE5OTMwMDg1NjEwMjcxIj4iUW9odW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTaXN0ZXIiIG1zZ2lkPSIxNzM1OTgzNTU0NDc5MDc2NDgxIj4iQmFjxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTcG91c2UiIG1zZ2lkPSIzOTQxMzY5Mzk0Mjg2OTgxMTciPiJIyZl5YXQgeW9sZGHFn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVDdXN0b20iIG1zZ2lkPSIyNDczNTgwNTkzMTExNTkwOTQ1Ij4iRsmZcmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IsaPc2FzIHPJmWhpZsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IsSwxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IkRpZ8mZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlDEsE4ga29kdSBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIHbJmSB5ZW5pIFDEsE4ga29kIGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyBrb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IlllbmkgUElOIGtvZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLFnmlmcsmZIGRheGlsIGV0bcmZayDDvMOnw7xuIHRveHVudW4iPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gcGFyb2wgeWF6xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIFBJTiBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iWWFubMSxxZ8gUElOIGtvZHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBNZW55dSwgc29ucmEgMCBiYXPEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxfZGlhbG9nX251bWJlcl9mb3JfZGlzcGxheSIgbXNnaWQ9IjY5NjE5MjEwMzE5NTA5MDk3MCI+IlTJmWNpbGkgbsO2bXLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODk2MzgzOTI0MjU2NTY1MzE5MiI+IlhpZG3JmXQgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2NyZWVuX2xvY2tlZCIgbXNnaWQ9IjcyODg0NDMwNzQ4MDY4MzI5MDQiPiJFa3JhbiBraWxpZGzJmW5pYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZW5hYmxlZCIgbXNnaWQ9IjQ2MTU0MDUxNjE0MTI2MDQ5Ij4iVMmZY2lsaSB6yZluZyBraWxpZGluaSBhw6dtYXEgdsmZIHlhIHllcmzJmcWfZGlybcmZayDDvMOnw7xuIE1lbnl1IGTDvHltyZlzaW7JmSBiYXPEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iNjg2MjYwMDI4Nzk3MTU4MzY0Ij4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIE1lbnl1IGTDvHltyZlzaW7JmSBiYXPEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9Ijc0Nzg3MDMyNTQ5NjQ4MTAzMDIiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gbW9kZWwgw6fJmWtpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZW1lcmdlbmN5X2NhbGwiIG1zZ2lkPSI1MzQ3NjMzNzg0NDAxMjg1MjI1Ij4iVMmZY2lsaSB6yZluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4iWsmZbmfJmSBxYXnEsXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fY29ycmVjdCIgbXNnaWQ9IjkwMzkwMDg2NTAzNjIyNjEyMzciPiJEw7x6ZMO8ciEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fd3JvbmciIG1zZ2lkPSI0MzE3OTU1MDE0OTQ4MTA4Nzk0Ij4iQmlyIGTJmSBjyZloZCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXNzd29yZF93cm9uZyIgbXNnaWQ9IjU3Mzc4MTUzOTMyNTMxNjUzMDEiPiJCaXIgZGFoYSBjyZloZCBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiJTaWbJmXQga2lsaWRpIGPJmWhkbMmZcmluaXogYml0ZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MDU3NzYyODI4MzU1NTcyMzE1Ij4iQmF0YXJleWEgecSxxJ/EsWzEsXIsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiJEb2x1YiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYmF0dGVyeV9zaG9ydCIgbXNnaWQ9IjQ0NzcyNjQ4NDkzODY4NTAyNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9sb3dfYmF0dGVyeSIgbXNnaWQ9IjE0ODI4NzM5ODE5MTkyNDk3NDAiPiJFbGVrdHJpa8mZIHFvxZ91bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk5NDM5Mjc3ODE5MjE1Mzk5Ij4iU0lNIGthcnQgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUxNjU5MTk2MDk1NzkxNDc0Ij4iUGxhbsWfZXRkyZkgU0lNIGthcnQgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODY5MjA1ODU2OTUxNjkwNzgiPiJUZWxlZm9uZGEgU8SwTSBrYXJ0IHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUzNzI3ODcxMzgwMjMyNzI2MTUiPiJTxLBNIGthcnQgZGF4aWwgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IlPEsE0ga2FydCB5b3hkdXIgdsmZIHlhIG94dW5hIGJpbGlubWlyLiBTxLBNIGthcnQgZGF4aWwgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiJZYXJhcnPEsXogU0lNIGthcnQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjkxMDkwNDY0MzQzMzE1MTM3MSI+IlNpemluIFPEsE0ga2FydMSxbsSxeiBkYWltaSBvbGFyYXEgZGVha3RpdmzJmcWfaWIuXG4gQmHFn3FhIFPEsE0ga2FydCDDvMOnw7xuIHNpbXNpeiB4aWRtyZl0IHByb3ZheWRlcmluaXrJmSBtw7xyYWNpyZl0IGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwMTU5NDkwNTE1Mjc0Njg4NiI+IsaPdnbJmWxraSB0cmVrIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI2MDg5Mjk3NjUwNDgxMjkyMzYzIj4iTsO2dmLJmXRpIHRyZWsgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU5MDg4Nzg2NzgwMTI4MDAxIj4iUGF1emEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU4ODg0MjI5MzgzNTEwMTk0MjYiPiJPeHV0bWEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1NjIzMTgzNzg3NjY5ODc2MDEiPiJEYXlhbmTEsXJtYSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbHNfb25seSIgbXNnaWQ9IjY3MzM5NzgzMDQzODYzNjU0MDciPiJZYWxuxLF6IHTJmWNpbGkgesmZbmdsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMTQzMzg5MjI0OTg2MDI4NTAxIj4ixZ7JmWLJmWvJmSBraWxpZGxpZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNzQ0MTc5NzMzOTk3NjIzMCI+IlNJTSBrYXJ0IFBVSyBpbMmZIGtpbGlkbMmZbmliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iODEyNzkxNjI1NTI0NTE4MTA2MyI+IsSwc3RpZmFkyZnDp2kgVMmZbGltYXRsYXLEsW5hIGJheMSxbiB2yZkgeWEgTcO8xZ90yZlyaSBYaWRtyZl0bMmZcmluyZkgbcO8cmFjacmZdCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+IlNJTSBrYXJ0IGtpbGlkbMmZbmliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjU5NTMyMzIxNDA1Mjg4MTI2NCI+IlPEsE0ga2FydMSxbiBraWxpZGkgYcOnxLFsxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2NDgxNjIzODMwMzQ0MTA3MjIyIj4iU2l6IGtpbGlkIG1vZGVsaW5pIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyDDp8mZa2Rpbml6LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgacOnaW5kyZkgeWVuaWTJmW4gc8SxbmF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+IsWeaWZyyZluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IlNpeiBQSU4gbsO2bXLJmW5pemkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0ZGluaXouIFxuIFxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgacOnaW5kyZkgdMmZa3JhciBzxLFuYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IlNpeiBraWxpZGkgYcOnbWFxIMO8w6fDvG4gxZ9hYmxvbnUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHPJmWh2IMOnyZlrZGluaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGRhaGEgdcSfdXJzdXogY8mZaGRkyZluIHNvbnJhIHBsYW7Fn2V0aW4ga2lsaWRpbmkgR29vZ2xlIGhlc2FixLFuxLF6YSBkYXhpbCBvbG1hcWxhIGHDp21hxJ/EsW7EsXogaXN0yZluaWzJmWPJmWsuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSBiaXIgZGFoYSB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiJTaXoga2lsaWRpIGHDp21hcSDDvMOnw7xuIMWfYWJsb251IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBzyZlodiDDp8mZa2Rpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkYWhhIHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBwbGFuxZ9ldGluIGtpbGlkaW5pIEdvb2dsZSBoZXNhYsSxbsSxemEgZGF4aWwgb2xtYXFsYSBhw6dtYcSfxLFuxLF6IHTJmWzJmWIgb2x1bmFjYXEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSBiaXIgZGFoYSB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxMjgxMDYzOTk3NDU3NTU2MDQiPiJTaXogcGxhbsWfZXQga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHXEn3Vyc3V6IGPJmWhkIGV0bWlzaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZMmZZsmZIGTJmSB1xJ91cnN1eiBjyZloZCBldHPJmW5peiwgcGxhbsWfZXQgZmFicmlrIGF5YXJsYXLEsW5hIHPEsWbEsXJsYW5hY2FxIHbJmSBiw7x0w7xuIG3JmWx1bWF0bGFyxLFuxLF6IGl0yZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODYwMzU2NTE0MjE1NjgyNjU2NSI+IlNpeiB0ZWxlZm9uIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgdcSfdXJzdXogY8mZaGQgZXRzyZluaXosIHRlbGVmb24gemF2b2QgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEgdsmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsW7EsXogaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjgwODczNTE2NDkzOTM0MzY1Ij4iU2l6IHBsYW7Fn2V0aW4ga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHlhbmzEscWfIGPJmWhkIGV0bWlzaW5pei4gUGxhbsWfZXQgYXJ0xLFxIGRlZm9sdCB6YXZvZCBoYWzEsW5hIHPEsWbEsXJsYW5hY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDI1NTA0NzIxNzY0OTIyMjQ2Ij4iU2l6IHRlbGVmb251biBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHPJmWh2IGPJmWhkIGV0ZGluaXouIFRlbGVmb251bnV6IGluZGkgemF2b2Qgbml6YW1sYXLEsW5hIHllbmlsyZluyZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYyNTE0ODAzNDMzOTQzODk2NjUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgYmlyIGRhaGEgY8mZaGQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+IsWeYWJsb251IHVudXRkdW51ej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9mb3Jnb3RfcGF0dGVybiIgbXNnaWQ9IjI1ODg1MjE1MDExNjYwMzI3NDciPiJIZXNhYiBraWxpZCBhw6dtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iMjc1MTM2ODYwNTI4NzI4ODgwOCI+IkjJmWRkaW5kyZluIMOnb3ggY8mZaGQgZWRpbGRpISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gR29vZ2xlIGhlc2FixLFuxLF6IGlsyZkgZGF4aWwgb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iODg0Njg4MTQyNDEwNjQ4NDQ0NyI+IsSwc3RpZmFkyZnDp2kgYWTEsSAoZS1wb8OndCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iNTk1ODAyODM4Mzk1NDczODUyOCI+IsWeaWZyyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNzEzMDg5MzY5NDc5NTc4NjMwMCI+IkRheGlsIG9sdW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iMTM2NDA1MTQ3MzM0NzQ4NTkwOCI+IllhbmzEscWfIGlzdGlmYWTJmcOnaSBhZMSxIHbJmSBwYXJvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSIxNjk2OTI0NzYzNjkwMzc5MDczIj4ixLBzdGlmYWTJmcOnaSBhZMSxbsSxesSxIHbJmSB5YSBwYXJvbHVudXp1IHVudXRtdXN1bnV6P1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiBsaW5raW7JmSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iNzExNDYyNzM1MTI4NjkzMzg2NyI+IllveGxhbsSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdW5sb2NrX2xhYmVsIiBtc2dpZD0iNzM3NDQwNDgzMjIwNjY3MDU0Ij4iS2lsaWRpIGHDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4iU8mZcyBhw6fEsXFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zb3VuZF9vZmZfbGFiZWwiIG1zZ2lkPSI5OTY4MjI4MjUxNTQzMTkwMjYiPiJTyZlzIHPDtm7DvGzDvGTDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX3N0YXJ0IiBtc2dpZD0iMzk0MTA0NTUwMjkzMzE0Mjg0NyI+Ik1vZGVsIGJhxZ9sYW5kxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NsZWFyZWQiIG1zZ2lkPSI1NTgzNDc5NzIxMDAxNjM5NTc5Ij4iTW9kZWwgdMmZbWl6bMmZbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jZWxsX2FkZGVkIiBtc2dpZD0iNjc1NjAzMTIwODM1OTI5MjQ4NyI+IlhhbmEgyZlsYXbJmSBlZGlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2RldGVjdGVkIiBtc2dpZD0iNDk4ODczMDg5NTU1NDA1NzA1OCI+Ik1vZGVsIHRhbWFtbGFuZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBXaWRnZXQgJTIkZCBvZiAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiJXaWRnZXQgyZlsYXbJmSBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4iQm/FnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4iS2lsaWRpIGHDp21hIHNhaMmZc2kgZ2VuacWfbMmZbmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IktpbGlkaSBhw6dtYSBzYWjJmXNpIMOnw7ZrZMO8LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHZpZGNldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4ixLBzdGlmYWTJmcOnaSBzZWxla3RvcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJTdGF0dXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4iTWVkaWEga29udHJvbGxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJZZW5pZMmZbiBzxLFyYWxhbWEgdmlkY2V0aSBiYcWfbGFkxLFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlZpZGNldGluIHTJmWtyYXIgc2lmYXJpxZ9pIHNvbmEgw6dhdGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IlZpZGNldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBzaWxpbmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IktpbGlkaSBhw6dtYSBzYWjJmXNpbmkgZ2VuacWfbMmZbmRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiJTw7xyw7zFn2TDvHJtyZkga2lsaWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4iS2lsZCBhw6dtYSBtb2RlbGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJTaWbJmXQgS2lsaWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IlBpbiBraWxpZCBhw6dtYXPEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLFnmlmcsmZIGtpbGlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJNb2RlbCBzYWjJmXNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiJTw7xyw7zFn2TDvHJtyZkgc2FoyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2NoYXJhY3RlciIgbXNnaWQ9IjczMzY0NzA1MzUzODUwMDk1MjMiPiJzaW12b2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF93b3JkIiBtc2dpZD0iNzA3NTU3MDMyODM3NDkxODY2MCI+InPDtnoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9saW5rIiBtc2dpZD0iNTgxNTUwODg4MDc4MjQ4ODI2NyI+ImxpbmsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9saW5lIiBtc2dpZD0iNTc2NDI2NzIzNTAyNjEyMDg4OCI+InjJmXR0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9hbXBtIiBtc2dpZD0iNDU4NDMzODA4MzUyOTM1NTk4MiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IkFNUE0iPiVQPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfY2FwX2FtcG0iIG1zZ2lkPSIyMDgzNDY1OTkyOTQwNDQ0MzY2Ij4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JXA8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfZmFpbGVkIiBtc2dpZD0iNTQxMDI3MDMyOTExNDIxMjA0MSI+Ilphdm9kIHRlc3RpIGFsxLFubWFkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub3Rfc3lzdGVtIiBtc2dpZD0iNDQzNTIwMTY1Njc2NzI3NjcyMyI+IkJ1IEZBQ1RPUllfVEVTVCBmyZlhbGl5ecmZdGkgeWFsbsSxemNhL3Npc3RlbWTJmS90yZl0YmlxZMmZIHF1cmHFn2TEsXLEsWxtxLHFnyBwYWtldGzJmXIgw7zDp8O8biBkyZlzdMmZa2zJmW5pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub19hY3Rpb24iIG1zZ2lkPSI4NzI5OTE4NzQ3OTk5OTg1NjEiPiJGQUNUT1JZX1RFU1QgyZltyZlsaXl5YXTEsW7EsSB0yZlzZGlxbMmZecmZbiBoZcOnIGJpciBwYWtldCB0YXDEsWxtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9yZWJvb3QiIG1zZ2lkPSI2MzIwMTY4MjAzMDUwNzkxNjQzIj4iWWVuaWTJmW4gecO8a2zJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjE5ODc0ODM5Nzc4MzQ2MDM4NzIiPiJcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+XCJkYWvEsSBzyZloaWbJmWTJmSBkZXlpbGlyOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+IkphdmFTY3JpcHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF90aXRsZSIgbXNnaWQ9IjI2MTkzNzY1NTU1MjUxMTY1OTMiPiJOYXZpcWFzaXlhbsSxIFTJmXNkaXEgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3Bvc2l0aXZlX2J1dHRvbiIgbXNnaWQ9IjMxMTI3NTIwMTA2MDA0ODQxMzAiPiJCdSBTyZloaWbJmW5pIFTJmXJrIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF9uZWdhdGl2ZV9idXR0b24iIG1zZ2lkPSI1NjE0ODYxMjkzMDI2MDk5NzE1Ij4iQnUgc8mZaGlmyZlkyZkgcWFsxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWQiIG1zZ2lkPSIzNDY4ODE2MzU3MDk1Mzc4NTkwIj4iPHhsaWZmOmcgaWQ9Ik1FU1NBR0UiPiVzPC94bGlmZjpnPlxuXG5CdSBzyZloaWbJmWTJmW4ga8mZbmFyYSBuYXZpcWFzaXlhIGV0bcmZayBpc3TJmWRpeWluaXrJmSDJmW1pbnNpbml6IG1pPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbGFiZWwiIG1zZ2lkPSI2ODYwMjYxNzU4NjY1ODI1MDY5Ij4iVMmZc2RpcWzJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvdWJsZV90YXBfdG9hc3QiIG1zZ2lkPSI0NTk1MDQ2NTE1NDAwMjY4ODgxIj4iTcmZc2zJmWjJmXQ6IELDtnnDvHRtyZlrIHbJmSBracOnaWx0bcmZayDDvMOnw7xuIGlraSBkyZlmyZkgdMSxa2xhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF90aGlzX2Zvcm0iIG1zZ2lkPSI0NjE2NzU4ODQxMTU3ODE2Njc2Ij4iQXZ0b2RvbGR1cm1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2V0dXBfYXV0b2ZpbGwiIG1zZ2lkPSI3MTAzNDk1MDcwMTgwNTkwODE0Ij4iQXZ0b0RvbGR1cm1hbsSxIGF5YXJsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3NfbmFtZV9zZXBhcmF0b3IiIG1zZ2lkPSI2MzUwMTQ1MTU0Nzc5NzA2NzcyIj4iICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9uYW1lX2Zvcm1hdCIgbXNnaWQ9IjMyNjgwNDEwNTQ4OTkyMTQ5NDUiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfc2VwYXJhdG9yIiBtc2dpZD0iNzQ4MzMwNzg5MzE3MDMyNDEyOSI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X2Zvcm1hdCIgbXNnaWQ9IjQ4NzQ0NTk0NTU3ODY4MjczNDQiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcm92aW5jZSIgbXNnaWQ9IjIyMzE4MDY1NTM4NjM0MjIzMDAiPiJWaWxhecmZdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3Bvc3RhbF9jb2RlIiBtc2dpZD0iNDY5NjQzMDQwNzY4OTM3NzEwOCI+IlBvw6d0IGtvZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9zdGF0ZSIgbXNnaWQ9IjY5ODg4OTQxOTU1MjAwNDQ2MTMiPiJEw7Z2bMmZdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ppcF9jb2RlIiBtc2dpZD0iODY5NzU0NDU5MjYyNzMyMjk0NiI+IlBvw6d0IGluZGVrc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9jb3VudHkiIG1zZ2lkPSIyMzcwNzM3NzEwMjAzNjI4OTEiPiLDlmxryZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9pc2xhbmQiIG1zZ2lkPSI0MDIwMTAwODc1OTg0NjY3MDI1Ij4iQWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZGlzdHJpY3QiIG1zZ2lkPSI4NDAwNzM1MDczMzkyMjY3NjcyIj4iU2FoyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kZXBhcnRtZW50IiBtc2dpZD0iNTM0MzI3OTQ2MjU2NDQ1MzMwOSI+IkRlcGFydGFtZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcHJlZmVjdHVyZSIgbXNnaWQ9IjIwMjg0OTk0ODUwNjU4MDA0MTkiPiJQcmVmZWt0dXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcGFyaXNoIiBtc2dpZD0iODIwMjIwNjEwNTQ2ODgyMDA1NyI+IlBhcmnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FyZWEiIG1zZ2lkPSIzNTQ3NDA5MDUwODg5OTUyNDIzIj4iU2FoyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9lbWlyYXRlIiBtc2dpZD0iMjg5Mzg4MDk3ODgzNTY5ODgxOCI+IsaPbWlybGlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3NzUyNjU3NzU0MDUxMDY5ODMiPiJWZWIgyZlsZsmZY2lubMmZcmluaXppIHbJmSB0YXJpeMOnyZlsyZlyaW5pemkgb3h1bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4iVMmZdGJpccmZIEJyYXV6ZXJpbiBkYXhpbCBvbGR1xJ91IGLDvHTDvG4gbGlua2zJmXJpIHbJmSBiw7x0w7xuIEJyYXV6ZXIgyZlsZsmZY2lubMmZcmluaSBveHVtYXEgaW1rYW7EsSB2ZXJpci4gUWV5ZDogYnUgaWNhesmZIHZlYiBicmF1emVyIGlta2FubGFyxLEgb2xhbiDDvMOnw7xuY8O8IHTJmXLJmWYgYnJhenVlcmzJmXJpIHbJmSBkaWfJmXIgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB5ZXJpbsmZIHlldGlyaWzJmSBiaWxtyZl6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzcxNDc4NTE2NTI3MzMxNDQ5MCI+InZlYiDJmWxmyZljaW5syZlyaSB2yZkgdGFyaXjDp8mZc2kgeWF6bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2ODI1NTI3NDY5MTQ1NzYwOTIyIj4iVMmZdGJpccmZIHBsYW7Fn2V0aW5pemTJmWtpIGJyYXV6ZXIgdGFyaXhpbmkgdsmZIMmZbGbJmWNpbmzJmXJpIHJlZGFrdMmZIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4gQnUgdMmZdGJpesmZIGJyYXV6ZXIgbcmZbHVtYXRsYXLEsW7EsSBzaWxtyZlrIHbJmSB5YSByZWRha3TJmSBldG3JmWsgaW1rYW7EsSB2ZXLJmSBiaWzJmXIuIFFleWQ6IEJ1IGljYXrJmSAzLWPDvCBwYXJ0aXlhIGJyYXV6ZXJsyZlyyZkgdsmZIHlhIHZlYiBicmF1emluZyB4w7xzdXNpeXnJmXRsaSBkaWfJmXIgdMmZdGJpcWzJmXLJmSDFn2FtaWwgb2x1bm1heWEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0OTczODk1MzEwMTQxODU1MDkiPiJUyZl0YmlxyZkgQnJhdXplciB0YXJpeMOnyZlzaSB2yZkgdGVsZWZvbnVudXpkYSBzYXhsYW7EsWxhbiDJmWxmyZljaW5syZlyyZkgZMmZeWnFn2lrbGlrIGV0bcmZayBpbWthbsSxIHZlcmlyLiBCdW51bmxhIHTJmXRiaXFsyZkgQnJhdXplciBkYXRhbsSxesSxIHNpbMmZIHbJmSB5YSBkyZl5acWfZGlyyZkgYmlsyZlyLiBRZXlkOiBidSBpY2F6yZkgdmViIGJyYXV6ZXIgaW1rYW5sYXLEsSBvbGFuIMO8w6fDvG5jw7wgdMmZcsmZZiBicmF6dWVybMmZcmkgdsmZIGRpZ8mZciB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIHllcmluyZkgeWV0aXJpbMmZIGJpbG3JmXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiJzaXFuYWwgcXVydXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+IlTJmXRiaXHJmSBxdXJhxZ9kxLFybG3EscWfIHrJmW5nbGkgc2FhdGEgYWxhcm0gYXlhcmxhbWHEn2EgaW1rYW4gdmVyaXIuIELJmXppIHrJmW5nbGkgc2FhdCB0yZl0YmlxbMmZcmkgYnUgw7Z6yZlsbGl5aSBkyZlzdMmZa2zJmW3JmXnJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hZGRWb2ljZW1haWwiIG1zZ2lkPSI1NTI1NjYwMDI2MDkwOTU5MDQ0Ij4iU8mZc2xpIHBvw6d0IMmZbGF2yZkgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hZGRWb2ljZW1haWwiIG1zZ2lkPSI2NjA0NTA4NjUxNDI4MjUyNDM3Ij4iVMmZdGJpccmZIHPJmXNsaSBwb8OndCBxdXR1bnV6YSBtZXNhaiDJmWxhdsmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iNTk2MjIyNDE1ODk1NTI3MzkzMiI+IkJyYXV6ZXJpbiBnZW9sb2thc2l5YSBpY2F6yZlsyZlyaW5pIGTJmXlpxZ9pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjEwODM3NDMyMzQ1MjI2Mzg3NDciPiJUyZl0YmlxyZkgQnJhdXplcmluIGdlb2xva2FzaXlhIGljYXrJmWzJmXJpbmkgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgbcmZa2FuIG3JmWx1bWF0bGFyxLFuxLEgdMmZc2Fkw7xmaSBzYXl0bGFyYSBnw7ZuZMmZcsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9IjU1NjgxMzkxMDA2NDU4MjkxMTciPiJwYWtldGzJmXJpIHTJmXNkaXFsyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wYWNrYWdlVmVyaWZpY2F0aW9uQWdlbnQiIG1zZ2lkPSI4NDM3NTkwMTkwOTkwODQzMzgxIj4iVMmZdGJpccmZIHBha2V0aW4gcXVyYcWfZMSxcsSxbGFiaWzJmW4gb2xtYXPEsW7EsSB5b3hsYW1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjQxODc3ODY3OTMzNjAzMjY2NTQiPiJwYWtldCBkb8SfcnVsYXnEsWPEsXlhIGJhxJ9sYW7EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iMzE4MDc0MTc3MzIzMzg2MjEyNiI+IlNhaGliaW7JmSBwYWtldCB5b3hsYXnEsWPEsWxhcsSxbmEgc29yxJ91IGfDtm5kyZlybcmZayBpY2F6yZlzaSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaGXDpyB2YXh0IGlzdMmZbmlsbcmZbcmZbGlkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXJpYWxQb3J0IiBtc2dpZD0iNTQ2MDgzMzI3NjU0NjMxMDc2Ij4ic2VyaWFsIHBvcnRhIMOnxLF4xLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiJTYWhpYmluyZkgU2VyaWFsTWFuYWdlciBBUEkgdmFzaXTJmXNpbMmZIHNlcmlhbCBwb3J0bGFyYSBpY2F6yZkgaXpuaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNTA3Nzc3NDI5Nzk0MzQwOTI4NSI+InhhcmljaSBrb250ZW50IHByb3ZheWRlcmzJmXJpbsmZIGdpcmnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNDU0NDM0NjQ4NjY5Nzg1MzY4NSI+Ik3JmXptdW4gcHJvdmF5ZGVybMmZcmluyZkgw7ZydMO8a2TJmW4gZGF4aWwgb2xtYXEgw7zDp8O8biBjaWhheiBzYWhpYmluyZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGxhesSxbSBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4iYXZ0b21hdGlrIGNpaGF6IHllbmlsyZlubcmZbMmZcmluaSBwb3p1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUxvY2siIG1zZ2lkPSIxNjU1NjI1ODMyMTY2Nzc4NDkyIj4iU2FoaWJpbsmZIHllbmkgdmVyc2l5YXlhIHllbmlsyZlubcmZayDDvMOnw7xuIG7JmSB2YXh0IHFleXJpLWludGVyYWt0aXYgcmVib290IG3JmWx1bWF0xLFuxLEgc2lzdGVtyZkgdMmZa2xpZiBldG3JmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX21lc3NhZ2UiIG1zZ2lkPSI3NjczNDQ2ODcxMzkxOTU3OTAiPiJCcmF1emVyaW4gYnUgxZ9pZnLJmW5pIHlhZGRhIHNheGxhbWFzxLFuxLEgaXN0yZl5aXJzaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9ub3Rub3ciIG1zZ2lkPSI2Mzg5Njc1MzE2NzA2Njk5NzU4Ij4ixLBuZGkgeW94Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiJZYWRkYSBzYXhsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbmV2ZXIiIG1zZ2lkPSI4Mjc0MzMwMjk2Nzg1ODU1MTA1Ij4iSGXDpyB2YXh0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4iQnUgc8mZaGlmyZluaSBhw6dtYXEgw7zDp8O8biBpY2F6yZluaXogeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRleHRfY29waWVkIiBtc2dpZD0iNDk4NTcyOTUyNDY3MDEzMTM4NSI+Ik3JmXRuIHBhbm95YSBrb3B5YWxhbmTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb3JlX2l0ZW1fbGFiZWwiIG1zZ2lkPSI0NjUwOTE4OTIzMDgzMzIwNDk1Ij4iRGFoYSDDp294Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcGVuZF9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI1NzIyMTQ0NjE2NzYwMTU2NDIiPiJNZW55dSsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NwYWNlX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjQxMDMyODYzOTI3MjE2MjUzNyI+ImJvxZ9sdXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2VudGVyX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjc0MzM2Mjc4NTExMTMwOTY2OCI+ImRheGlsIG9sdW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiJzaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2hfZ28iIG1zZ2lkPSI4Mjk4MDE2NjY5ODIyMTQxNzE5Ij4iQXh0YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3NlYXJjaCIgbXNnaWQ9IjY3NDk4MjY2MzkwOTg1MTIxMjAiPiJBeHRhcsSxxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3F1ZXJ5IiBtc2dpZD0iNTkxMTc3ODU5MzEyNTM1NTEyNCI+IkF4dGFyxLHFnyBzb3LEn3VzdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4iU29yxJ91bnUgdMmZbWl6bMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zdWJtaXQiIG1zZ2lkPSIyNjg4NDUwMTMzMjk3OTgzNTQyIj4iU29yxJ91bnUgZ8O2bmTJmXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fdm9pY2UiIG1zZ2lkPSIyNDUzMjAzNjk1Njc0OTk0NDQwIj4iU8mZc2xpIGF4dGFyxLHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSI3NDYwNjk0MDcwMzA5NzMwMTQ5Ij4iVG94dW5hcmFxIEvJmcWfZiBldCBmdW5rc2l5YXPEsSBha3RpdiBlZGlsc2luPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODY1NTg4NzUzOTA4OTkxMDU3NyI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gVG94dW5hcmFxIEvJmcWfZiBFdCByZWppbWluaSBha3RpdmzJmcWfZGlybcmZayBpc3TJmXlpci4gVG94dW5hcmFxIEvJmcWfZiBFdCBhw6fEsWxkxLHEn8SxIHphbWFuLCBiYXJtYcSfxLFuxLF6xLFuIGFsdMSxbmRhIG7JmSBvbGR1xJ91IGhhcWRhIG9sYW4gdMmZc3ZpcmzJmXJpIGXFn2lkyZkgdsmZIHlhIGfDtnLJmSBiaWzJmXJzaW5peiB2yZkgeWFwbGFuxZ9ldGTJmSBpbnNhbmxhcmxhIMmZbGFxyZl5yZkga2XDp23JmWsgw7zDp8O8biBqZXN0bMmZciBoyZl5YXRhIGtlw6dpcsmZIGJpbMmZcnNpbml6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI3MDgxOTk2NzI4NTIzNzMxOTUiPiI8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IFRveHVuYXJhcSBLyZnFn2YgRXQgcmVqaW1pbmkgYWt0aXZsyZnFn2Rpcm3JmWsgaXN0yZl5aXIuIFRveHVuYXJhcSBLyZnFn2YgRXQgYcOnxLFsZMSxxJ/EsSB6YW1hbiwgYmFybWHEn8SxbsSxesSxbiBhbHTEsW5kYSBuyZkgb2xkdcSfdSBoYXFkYSBvbGFuIHTJmXN2aXJsyZlyaSBlxZ9pZMmZIHbJmSB5YSBnw7ZyyZkgYmlsyZlyc2luaXogdsmZIHlhIHRlbGVmb25kYSBpbnNhbmxhcmxhIMmZbGFxyZl5yZkga2XDp23JmWsgw7zDp8O8biBqZXN0bMmZciBoyZl5YXRhIGtlw6dpcsmZIGJpbMmZcnNpbml6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4iMSBheSDDtm5jyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IjEgYXkgyZl2dsmZbCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX3NlY29uZHNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDg2OTg3MDA1NjU0Nzg5NjAxMSI+IjEgc2FuaXnJmSDJmXZ2yZlsIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzOTAzNzA2ODA0MzQ5NTU2Mzc5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXZ2yZlsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJudW1fbWludXRlc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMzA2Nzg3NDMzMDg4ODEwMTkxIj4iMSBkyZlxaXHJmSDJmXZ2yZlsIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMTc2OTQyMDA4OTE1NDU1MTE2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZMmZcWlxyZkgyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX2hvdXJzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjkxNTA3OTc5NDQ2MTA4MjE4NDkiPiIxIHNhYXQgyZl2dsmZbCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ2NzI3MzIzOTU4NzU4NzU2OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhYXQgyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibGFzdF9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzA2OTk5MjgwODE2NDMxODI2OCI+IlNvbiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBnw7xuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ibGFzdF9tb250aCIgbXNnaWQ9IjM5NTkzNDY3Mzk5NzkwNTU0MzIiPiJLZcOnyZluIGF5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkZXIiIG1zZ2lkPSI1MjExOTc1MDIyODE1NTU0ODQwIj4iS8O2aG7JmSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX2RheXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODYxMzU4NTM0Mzk4MTE1ODIwIj4iZMO8bsmZbiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ3OTU4NjQ2NjE1MzMxNDYzMyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGfDvG4gyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX3NlY29uZHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIyNzI5NzQ1NTYwOTU0OTA1MTAyIj4iMSBzYW5pecmZIMmZcnppbmTJmSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTI0MTkyNjExNjQ0Mzk3NDY4NyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgacOnaW5kyZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+IjEgZMmZcWlxyZkgacOnaW5kyZkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMzMzA3MTM5MzYzOTk0NDg3NDkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBkyZlxaXHJmSDJmXJ6aW5kyZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9ob3VycyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjcxNjQzNTMzNDI0Nzc3Njk5OTkiPiIxIHNhYXRhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDcyOTA2NzczNTM3MjczODkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0YSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NDEzMDg4NzQzMDA5ODM5NTE4Ij4ic2FiYWgiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjUxMDk0NDkzNzUxMDA5NTMyNDciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBnw7xuIMmZcnppbmTJmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9zZWNvbmRzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE4NDkwMzY4NDAyMDAwNjkxMTgiPiIxIHNhbml5yZkgyZl2dsmZbCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzY5OTE2OTM2NjY1MDkzMDQxNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhbiDJmXZ2yZlsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX21pbnV0ZXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjM2MTQ5MDE0NzExMzg3MTU0NSI+IjEgZMmZcWlxyZkgyZl2dsmZbCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODUxMTY0OTY4NTk3MTUwNzEwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZMmZcWlxyZkgyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9ob3Vyc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0Nzk2MjEyMDM5NzI0NzIyMTE2Ij4iMSBzYWF0IMmZdnbJmWwiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY4ODk5NzA3NDU3NDg1Mzg5MDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0IMmZdnbJmWwiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1fZGF5c19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NDYzMTYxNzExNDkyNjgwMzA5Ij4iZMO8bsmZbiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzQ1MzM0MjYzOTYxNjQ4MTE5MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGfDvG4gyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9zZWNvbmRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg0MjIyNTM3MDc5NTA2NjI5OSI+IjEgc2FuIMmZcnppbmTJmSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ5NTg4MDEwODgyNTgwNTEwOCI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhbiDJmXJ6aW5kyZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fbWludXRlcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU2Mjc4NjE0OTkyODI4NDg3OCI+IjEgZMmZcSDJmXJ6aW5kyZkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQyMTYxMTMyOTI3MDY1Njg3MjYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBkyZlxaXHJmXnJmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9ob3VycyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNzQ3MDgxMTgxMjQwNDUyNDYiPiIxIHNhYXQgyZlyemluZMmZIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNzA1MzczNzY2Nzk4MDEzNDA2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FhdGEiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjIxNzg1NzYyNTQzODU3Mzk4NTUiPiJzYWJhaCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjk3MzA2Mjk2ODAzODM1NTk5MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGfDvG7JmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl9kYXRlIiBtc2dpZD0iOTA5Mzk0OTc1Nzc1NzQ0NTExNyI+Ijx4bGlmZjpnIGlkPSJEQVRFIj4lczwveGxpZmY6Zz4gdGFyaXhpbmTJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl90aW1lIiBtc2dpZD0iNTUwNjgzMTI0NDI2MzA4Mzc5MyI+InNhYXQgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl95ZWFyIiBtc2dpZD0iNTA0MDM5NTY0MDcxMTg2NzE3NyI+Ijx4bGlmZjpnIGlkPSJZRUFSIj4lczwveGxpZmY6Zz4gaWxpbmTJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheSIgbXNnaWQ9IjgxNDQxOTU3NzYwNTgxMTk0MjQiPiJnw7xuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5cyIgbXNnaWQ9IjQ3NzQ1NDc2NjEwMjEzNDQ2MDIiPiJnw7xubMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXIiIG1zZ2lkPSIyMTI2NzcxOTE2NDI2MTg5NDgxIj4ic2FhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJzIiBtc2dpZD0iODk0NDI0MDA1MjY2ODUyOTkzIj4ic2FhdGxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZSIgbXNnaWQ9IjkxNDg4Nzg2NTc3MDM3Njk4NjgiPiJkyZlxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZXMiIG1zZ2lkPSI1NjQ2MDAxMDA1ODI3MDM0NTA5Ij4iZMmZcWlxyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWNvbmQiIG1zZ2lkPSIzMTg0MjM1ODA4MDIxNDc4Ij4ic24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWNvbmRzIiBtc2dpZD0iMzE2MTUxNTM0NzIxNjU4OTIzNSI+InNhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlZWsiIG1zZ2lkPSI1NjE3OTYxNTM3MTczMDYxNTgzIj4iaMmZZnTJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlZWtzIiBtc2dpZD0iNjUwOTYyMzgzNDU4Mzk0NDUxOCI+ImjJmWZ0yZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyIiBtc2dpZD0iNDAwMTExODIyMTAxMzg5MjA3NiI+ImlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcnMiIG1zZ2lkPSI2ODgxNTc3NzE3OTkzMjEzNTIyIj4iaWwiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX3NlY29uZHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2OTYyMDE1NTI4MzcyOTY5NDgxIj4iMSBzYW5pecmZIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxODg2MTA3NzY2NTc3MTY2Nzg2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fbWludXRlcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ5MTU0MTQwMDI1NDYwODU2MTciPiIxIGTJmXFpccmZIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMTY1MTg3MTY5MjI0OTA4Nzc1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZMmZcWlxyZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODkxNzQ2NzQ5MTI0ODgwOTk3MiI+IjEgc2FhdCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzg2Mzk2Mjg1NDI0Njc3MzkzMCI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhYXQiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGl0bGUiIG1zZ2lkPSIzNTM0NTA5MTM1NDM4MzUzMDc3Ij4iVmlkZW8gcHJvYmxlbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF9pbnZhbGlkX3Byb2dyZXNzaXZlX3BsYXliYWNrIiBtc2dpZD0iMzE4NjY3MDMzNTkzODY3MDQ0NCI+IkJ1IHZpZGVvIGJ1IGNpaGF6YSBzdHJpbSBvbHVubWFxIMO8w6fDvG4gdXnEn3VuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X3Vua25vd24iIG1zZ2lkPSIzNDUwNDM5MTU1MTg3ODEwMDg1Ij4iQnUgdmlkZW8gb3h1bXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX2J1dHRvbiIgbXNnaWQ9IjI4MjIyMzgyMTUxMDA2Nzk1OTIiPiJPSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aXZlX3RpbWUiIG1zZ2lkPSIxODE4NTU3MTc3ODI5NDExNDE3Ij4iPHhsaWZmOmcgaWQ9IkRBVEUiPiUxJHM8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub29uIiBtc2dpZD0iNzI0NTM1MzUyODgxODU4NzkwOCI+ImfDvG5vcnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTm9vbiIgbXNnaWQ9IjMzNDIxMjc3NDUyMzAwMTMxMjciPiJHw7xub3J0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pZG5pZ2h0IiBtc2dpZD0iNzE2NjI1OTUwODg1MDQ1NzU5NSI+ImdlY8mZeWFyxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJNaWRuaWdodCIgbXNnaWQ9IjU2MzA4MDY5MDY4OTc4OTIyMDEiPiJHZWPJmXlhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9tbV9zcyIgbXNnaWQ9IjQ0MzE1NTU5NDM4Mjg3MTE0NzMiPiI8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTEkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTIkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfaF9tbV9zcyIgbXNnaWQ9IjE4NDYwNzE5OTc2MTY2NTQxMjQiPiI8eGxpZmY6ZyBpZD0iSE9VUlMiPiUxJGQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMiQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMyQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0QWxsIiBtc2dpZD0iNjg3NjUxODkyNTg0NDEyOTMzMSI+IkhhbcSxc8SxbsSxIHNlw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iS8mZcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29weWFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlllcmzJmcWfZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLGj3bJmXogZXQuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iU2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwga29weWFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+Ik3JmXRuIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJNyZl0biBzZcOnaW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkzDvMSfyZl0yZkgyZlsYXbJmSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iU2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRNZXRob2QiIG1zZ2lkPSIxNjUzNjMwMDYyMzA0NTY3ODc5Ij4iRGF4aWxldG3JmSBtZXRvZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlZGl0VGV4dE1lbnVUaXRsZSIgbXNnaWQ9IjQ5MDkxMzU1NjQ5NDE4MTU0OTQiPiJNyZl0biDJmW3JmWxpeXlhdGxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190aXRsZSIgbXNnaWQ9IjU1NzYyNzI0OTYzNjU2ODQ4MzQiPiJZYWRkYcWfIHllcmkgYml0aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RleHQiIG1zZ2lkPSI2NjQwNTA1ODE3NjE3NDE0MzcxIj4iQsmZemkgc2lzdGVtIGZ1bmtzaXlhbGFyxLEgacWfbMmZbcmZecmZIGJpbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg3MTgzMzUxMjEwNjA3ODc5MTQiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGnFn2zJmW5pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iNDY1MzU4Njk0Nzc0NzMzMDA1OCI+IkRhaGEgw6dveCBtyZlsdW1hdCDDvMOnw7xuIHbJmSB5YSB0yZl0YmlxaSBkYXlhbmTEsXJtYXEgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9rIiBtc2dpZD0iNTk3MDA2MDQzMDU2MjUyNDkxMCI+Ik9LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNjQ0MjU2MDU3MTI1OTkzNTEzMCI+IkzJmcSfdiBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllcyIgbXNnaWQ9IjUzNjI5ODIzMDMzMzc5NjkzMTIiPiJPSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vIiBtc2dpZD0iNTE0MTUzMTA0NDkzNTU0MTQ5NyI+IkzJmcSfdiBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxvZ19hbGVydF90aXRsZSIgbXNnaWQ9IjIwNDk2NTg3MDg2MDkwNDMxMDMiPiJEaXFxyZl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9hZGluZyIgbXNnaWQ9Ijc5MzM2ODEyNjAyOTYwMjExODAiPiJZw7xrbMmZbmly4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vbiIgbXNnaWQ9IjE1NDQ2ODI3NTU1MTQ0OTQyOTgiPiJBw4dJUSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb2ZmIiBtc2dpZD0iNjgxNTg3MDM4Njk3MjgwNTgzMiI+IlFBUEFMSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4ixo9tyZlsaXl5YXTEsSB0YW1hbWxhecSxbjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4iQnUgZsmZYWxpeXnJmXQgw7zDp8O8biBkZWZvbHQgaXN0aWZhZMmZIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjbGVhckRlZmF1bHRIaW50TXNnIiBtc2dpZD0iMzI1MjU4NDY4OTUxMjA3NzI1NyI+IlNpc3RlbSBheWFybGFyxLFuZGEsIFTJmXRiaXFsyZlyZMmZIHbJmSBFbmRpcmlsbWnFn2zJmXJkyZkgZGVmb2x0dSB0yZltaXpsyZl5aW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlQWN0aXZpdHkiIG1zZ2lkPSI3NDg2ODc2MTQ3NzUxODAzMzMzIj4iRsmZYWxpeXnJmXQgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4iVVNCIGNpaGF6IMO8w6fDvG4gdMmZdGJpcSBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub0FwcGxpY2F0aW9ucyIgbXNnaWQ9IjI5OTE4MTQyNzM5MzY1MDQ2ODkiPiJIZcOnIGJpciB0yZl0YmlxIGJ1IMmZbcmZbGl5eWF0xLEgYXBhcmEgYmlsbWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiJUyZnJmXNzw7xmIGtpLCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IGRheWFuZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiJUyZnJmXNzw7xmIGtpLCA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4gcHJvc2VzaSBkYXlhbmTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfdGl0bGUiIG1zZ2lkPSI0MzUxOTQ4NDgxNDU5MTM1NzA5Ij48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjE5MDQ0NzcxODkwNTcxOTkwNjYiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+IGNhdmFiIHZlcm1pci5cblxuT251IGJhxJ9sYW1hcSBpc3TJmXlpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+Ijx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4gYWt0aXZpdGlzaSBjYXZhYiB2ZXJtaXIuIFxuXG5PbnUgYmHEn2xhbWFxIGlzdMmZeWlyc2luaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBjYXZhYiB2ZXJtaXIuIE9udSBiYcSfbGFtYXEgaXN0yZl5aXJzaW5pej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfcHJvY2VzcyIgbXNnaWQ9IjY1MTMyMDk4NzQ4ODA1MTcxMjUiPiJQcm9zZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IGNhdmFiIHZlcm1pci4gXG4gXG4gT251IGJhxJ9sYW1hcSBpc3TJmXlpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2Nsb3NlIiBtc2dpZD0iODM0NjA3MjA5NDUyMTI2NTYwNSI+Ik9LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVwb3J0IiBtc2dpZD0iNDA2MDIxODI2MDk4NDc5NTcwNiI+IsWeaWthecmZdCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FpdCIgbXNnaWQ9IjcxNDcxMTgyMTcyMjYzMTc3MzIiPiJHw7Z6bMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4iQnUgc8mZaGlmyZkgeWFyYXJzxLF6bGHFn8SxYi5cblxuQmHEn2xhbWFxIGlzdMmZeWlyc2l6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTU0Nzk5Nzc4MDUwNjcxMzU4MSI+IlTJmXRiaXEgecO2bmzJmW5kaXJpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfcmVwbGFjZSIgbXNnaWQ9IjYyMDI0OTg5NDk5NzAyODE0MTIiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGluZGkgw6dhbMSxxZ/EsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfb3JpZ2luYWwiIG1zZ2lkPSIxODgxMDIwMjMwMjE2Njg2ODMiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGlsayBiYcWfbGFkxLFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zY2FsZSIgbXNnaWQ9IjMyMDI5NTU2Njc2NzU5NDQ0OTkiPiJNaXF5YXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2hvdyIgbXNnaWQ9IjQwMTM4Nzg4NzY0ODY2NTU4OTIiPiJIyZltacWfyZkgZ8O2c3TJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfaGludCIgbXNnaWQ9IjEwNjQ1MjQwODQ1NDMzMDQ0NTkiPiJCdW5sYXLEsSBTaXN0ZW0gYXlhcmxhcsSxbmRhIHllbmlkyZluIGFrdGl2bMmZxZ9kaXIgWcO8a2zJmW5tacWfICZndDsgVMmZdGJpcWzJmXIgJmd0Oy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4iVMmZdGJpcSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IChwcm9zZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSBTdHJpY3RNb2RlIHNpeWFzyZl0aW5pIHBvemR1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9wcm9jZXNzIiBtc2dpZD0iNTEyMDM5NzAxMjA0NzQ2MjQ0NiI+Ijx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiBwcm9zZXNpIFN0cmljdE1vZGUgc2l5YXPJmXRpbmkgcG96ZHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4iQW5kcm9pZCB0yZlrbWlsbMmZxZ9kaXJpbGlyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfYXBrIiBtc2dpZD0iNzkwNDA0MjY4MjExMTUyNjE2OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gyZlkZMmZZMmZbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHTJmXRiaXEgb3B0aW1hbGxhxZ/EsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IlTJmXRiaXFsyZlyIGJhxZ9sYWTEsWzEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfY29tcGxldGUiIG1zZ2lkPSIxNDA1OTU0NzU0MTEyOTk5MjI5Ij4iWcO8a2zJmW3JmSBiYcWfYSDDp2F0xLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb24iIG1zZ2lkPSI5MDg3MDYzOTg1Nzc2NjI2MTY2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz4gw6dhbMSxxZ/EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uX2RldGFpbCIgbXNnaWQ9IjE3MjE2ODE3NDE2MTc4OTg4NjUiPiJUyZl0YmlxyZkga2XDp23JmWsgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RpdGxlIiBtc2dpZD0iNzE1MzE2NzA4NTQwMzI5ODE2OSI+IlTJmXRiaXFsyZlyyZkga2XDp2lsc2luPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90ZXh0IiBtc2dpZD0iNzAyMjYzMTkyNDUzNDQwNjQwMyI+IkJpciB0yZl0YmlxIGFydMSxcSBpxZ9syZl5aXIuIERpZ8mZcmluaSBiYcWfbGF0bWFxIMO8w6fDvG4gb251IGRheWFuZMSxcm1hbMSxc8SxbsSxei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2FjdGlvbiIgbXNnaWQ9IjQ5MzEyOTE3MjIzODU2NjI4MiI+Ijx4bGlmZjpnIGlkPSJPTERfQVBQIj4lMSRzPC94bGlmZjpnPiBiw7ZsbcmZc2luyZkgcWF5xLFkxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwODIwOTQyNzU1ODAzNTgwNDkiPiJZZW5pIHTJmXRiaXFpIGJhxZ9sYXRtYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9hY3Rpb24iIG1zZ2lkPSI1NDcyNzU2OTI2OTQ1NDQwNzA2Ij4iPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+IHTJmXRiaXFpbmkgYmHFn2xhZMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ld19hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTMyMTQzNTk4MzcxNTM3MzQwIj4iS8O2aG7JmSB0yZl0YmlxaSB5YWRkYSBzYXhsYW1hZGFuIGRheWFuZMSxcsSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZW5kVGV4dCIgbXNnaWQ9IjUyMDk4NzQ1NzE5NTk0NjkxNDIiPiJNyZl0biDDvMOnw7xuIMmZbcmZbGl5eWF0IHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9yaW5ndG9uZSIgbXNnaWQ9IjY4ODU0MjE0MDY4NDU3MzQ2NTAiPiJayZluZ2luIHPJmXMgZ8O8Y8O8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljIiBtc2dpZD0iNTQyMTY1MTE1NzEzODYyODE3MSI+Ik1lZGlhIGjJmWNtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4iQmx1ZXRvb3RoIHZhc2l0yZlzaWzJmSBveW5hZMSxbMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3NpbGVudF9yaW5ndG9uZV9zZWxlY3RlZCIgbXNnaWQ9IjgzMTA3Mzk5NjA5NzMxNTYyNzIiPiJTyZlzc2l6IHrJmW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2NhbGwiIG1zZ2lkPSIzOTQxNjgwMDQxMjgyNzg4NzExIj4iRGF4aWxpIHrJmW5nIHPJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2JsdWV0b290aF9jYWxsIiBtc2dpZD0iMjAwMjg5MTkyNjM1MTE1MTUzNCI+IkJsdWV0b290aCB6yZluZyBoyZljbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYWxhcm0iIG1zZ2lkPSIxOTg1MTkxNjE2MDQyNjg5MTAwIj4iU2lxbmFsIHPJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjI0MjIyNjU2NTY3NDQyNzY3MTUiPiJCaWxkaXJpxZ8gc8mZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfdW5rbm93biIgbXNnaWQ9IjE0MDAyMTk2Njk3NzA0NDU5MDIiPiJIyZljbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2JsdWV0b290aCIgbXNnaWQ9IjY1Mzg4OTQxNzcyNTU5NjQzNDAiPiJCbHVldG9vdGggaMmZY21pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fcmluZ2VyIiBtc2dpZD0iMzMyNjAwMzg0NzAwNjE2MjQ5NiI+IlrJmW5nIHPJmXNpIGfDvGPDvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiJayZluZyBoyZljbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9tZWRpYSIgbXNnaWQ9IjQyMTczMTE3MTk2NjUxOTQyMTUiPiJNZWRpYSBoyZljbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ub3RpZmljYXRpb24iIG1zZ2lkPSI3MDQ0OTg2NTQ2NDc3MjgyMjc0Ij4iQmlsZGlyacWfIHPJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdCIgbXNnaWQ9IjM3ODk3NTg5ODAzNTc2OTY5MzYiPiJEZWZvbHQgcmlucXRvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX2RlZmF1bHRfd2l0aF9hY3R1YWwiIG1zZ2lkPSI4MTI5NTYzNDgwODk1OTkwMzcyIj4iRGVmb2x0IHJpbnF0b24gKDx4bGlmZjpnIGlkPSJBQ1RVQUxfUklOR1RPTkUiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3NpbGVudCIgbXNnaWQ9Ijc5Mzc2MzQzOTI0MDg5NzcwNjIiPiJIZcOnIGJpcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4iWsmZbmcgc8mZc2zJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfdW5rbm93biIgbXNnaWQ9IjU0Nzc5MTk5ODg3MDE3ODQ3ODgiPiJOYW3JmWx1bSByaW5xdG9uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY2NTQxMjM5ODc0MTgxNjg2OTMiPiJXaS1GaSDFn8mZYsmZa8mZc2kgbcO2dmN1ZGR1ciI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IldpLUZpIMWfyZliyZlryZlsyZlyaSBtw7Z2Y3VkZHVyIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9kZXRhaWxlZCI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE2MzQxMDE0NTAzNDMyNzczNDUiPiJXaS1GaSDFn8mZYsmZa8mZbmkgYcOnxLFuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3OTE1ODk1MzIzNjQ0MjkyNzY4Ij4iQcOnxLFxIFdpLUZpIMWfyZliyZlryZlsyZlyaSBtw7Z2Y3VkZHVyIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9IjQwMjk0ODk3MTY2MDUyNTUzODYiPiJXaS1GaSDFn8mZYsmZa8mZc2luyZkgZGF4aWwgb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iODQ5NTE1NTU5MzM1ODA1NDY3NiI+IsWeyZliyZlryZl5yZkgZGF4aWwgb2x1biI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+IldpLUZpXCdhIHFvxZ91bG1hcSBhbMSxbm1hZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiBpbnRlcm5ldCBiYcSfbGFudMSxc8SxIGtleWZpeXnJmXRzaXpkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZGlhbG9nX3RpdGxlIiBtc2dpZD0iOTc2MTE3ODI2NTkzMjQ1MTciPiJXaS1GaSBEaXJlY3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90dXJub25fbWVzc2FnZSIgbXNnaWQ9IjI5MDkyNTA5NDIyOTk2MjcyNDQiPiJXaS1GaSBEaXJlY3QgyZltyZlsaXl5YXTEsW7EsSBiYcWfbGF0LiBCdSBXaS1GaSBtw7zFn3TJmXJpL2hvdHNwb3R1IGJhxJ9sYXlhY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZhaWxlZF9tZXNzYWdlIiBtc2dpZD0iMzc2MzY2OTY3NzkzNTYyMzA4NCI+IldpLUZpIERpcmVjdCBiYcWfbGFkxLFsYSBiaWxtyZlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiJXaS1GaSBEaXJlY3QgYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTYzODk0OTk1Mzk5Mzg5NDMzNSI+IkF5YXJsYXIgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMTY0NTI2NzI1OTI3MjgyOTU1OSI+IlHJmWJ1bCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVjbGluZSIgbXNnaWQ9IjIxMTIyMjU0NTE3MDYxMzc4OTQiPiLEsG10aW5hIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUiIG1zZ2lkPSIxMzE4OTc1MTg1MTEyMDcwNzM0Ij4iRMmZdsmZdG5hbcmZIGfDtm5kyZlyaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ludml0YXRpb25fdG9fY29ubmVjdF90aXRsZSIgbXNnaWQ9IjQ5NTg4MDM5NDg2NTg1MzM2MzciPiJRb8WfdWxtYXEgw7zDp8O8biBkyZl2yZl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJvbV9tZXNzYWdlIiBtc2dpZD0iNTcwMzg5MTc0NzMxOTUxNzY5Ij4iS2ltZMmZbjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4iS2ltyZk6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4iVMmZbMmZYiBvbHVuYW4gUMSwTiBrb2R1IGRheGlsIGVkaW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfc2hvd19waW5fbWVzc2FnZSIgbXNnaWQ9Ijg1MzA1NjMzMjM4ODA5MjEwOTQiPiJQxLBOOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4iQnUgcGxhbsWfZXQgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBjaWhhesSxbmEgcW/Fn3VsYW4gemFtYW4gV2ktRmkgxZ/JmWLJmWvJmXNpbmTJmW4gbcO8dsmZcXHJmXRpIGF5csSxbG3EscWfIG9sYWNhcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+IkJ1IHRlbGVmb24gPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBjaWhhesSxbmEgcW/Fn3VsYW4gemFtYW4gV2ktRmkgxZ/JmWLJmWvJmXNpbmTJmW4gbcO8dsmZcXHJmXRpIGF5csSxbG3EscWfIG9sYWNhcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9jaGFyYWN0ZXIiIG1zZ2lkPSIzMzY1NTUwMTIwNjE3NzAxNzQ1Ij4iU2ltdm9sIGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiJTTVMgbWVzYWogZ8O2bmTJmXJpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDDp294IHNheWRhIFNNUyBtZXNhaiBnw7ZuZMmZcmlyLiBCdSB0yZl0YmlxaW4gbWVzYWogZ8O2bmTJmXJtyZl5yZkgZGF2YW0gZXRtyZlzaW7JmSBpY2F6yZkgdmVyaXJzaW5pej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4ixLBjYXrJmSB2ZXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4iUsmZZGQgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0O8KgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IMO8bnZhbsSxbmEgbWVzYWogZ8O2bmTJmXJtyZlrIGlzdMmZeWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSIzNDkyMDI1NzE5ODY4MDc4NDU3Ij4iQnUsIG1vYmlsIGhlc2FixLFuxLF6YSAiPGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4iyZlsYXbJmSB0YXJpZmzJmXJpbiB0yZl0YmlxIG9sdW5tYXPEsSI8L2ZvbnQ+IiBpbMmZIG7JmXRpY8mZbMmZbsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfcHJlbWl1bV9zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSI1NTIzODI2MzQ5MTA1MTIzNjg3Ij48Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiJCdSBtb2JpbCBoZXNhYsSxbsSxemRhIMO2ZMmZbmnFn2zJmXLJmSBzyZliyZliIG9sYWNhcS4iPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbGxvdyIgbXNnaWQ9IjQ0NTg4Nzg2MzcxMTEwMjM0MTMiPiJHw7ZuZMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiJMyZnEn3YgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl9jaG9pY2UiIG1zZ2lkPSI1Mjg5NTM4NTkyMjcyMjE4MTM2Ij4iTcmZbmltIHNlw6dpbWltaSB5YWRkYSBzYXhsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4iQnVudSBzb25yYSBBeWFybGFyZGEgZMmZeWnFn8mZIGJpbMmZcnNpbml6wqAmZ3Q7wqBUyZl0YmlxbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWx3YXlzX2FsbG93IiBtc2dpZD0iMzI0MTE4MTE1NDg2OTQ5MzM2OCI+IkjJmW1pxZ/JmSBpY2F6yZkgdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9uZXZlcl9hbGxvdyIgbXNnaWQ9IjQ0Njk5Mjc2NTc3NDI2OTY3MyI+Ikhlw6cgdmF4dCBpY2F6yZkgdmVybcmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4iU0lNIGthcnQgw6fEsXhhcsSxbGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4iQ2loYXrEsW7EsXrEsSBldGliYXJsxLEgU0lNIGthcnQgaWzJmSBiYcWfbGFkYW5hIGtpbWkgbW9iaWwgxZ/JmWLJmWvJmSDJmWzDp2F0bWF6IG9sYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiJCaXRkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiJTxLBNIGthcnQgyZlsYXbJmSBlZGlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiJNb2JpbCDFn8mZYsmZa8mZecmZIHFvxZ91bG1hcSDDvMOnw7xuIGNpaGF6xLFuxLF6xLEgeWVuaWTJmW4gYmHFn2xhZMSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVzdGFydF9idXR0b24iIG1zZ2lkPSI0NzIyNDA3ODQyODE1MjMyMzQ3Ij4iWWVuaWTJmW4gYmHFn2xhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjgzNDkzNjI2MjMwNjg4MTkyOTUiPiJWYXh0IGF5YXJsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI1ODc5NDUwNjU5NDUzNzgyMjc4Ij4iVGFyaXhpIHF1cmHFn2TEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfc2V0IiBtc2dpZD0iNTc3NzA3NTYxNDMyMTA4Nzc1OCI+IkF5YXJsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfZG9uZSIgbXNnaWQ9IjI1MDc2ODM3NTE3NTkzMDg4MjgiPiJIYXrEsXJkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybXNfbmV3X3Blcm1fcHJlZml4IiBtc2dpZD0iODI1Nzc0MDcxMDc1NDMwMTQwNyI+PGZvbnQgc2l6ZT0iMTIiIGZnY29sb3I9IiNmZjMzYjVlNSI+IllFTsSwOiAiPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybXNfZGVzY3JpcHRpb25fYXBwIiBtc2dpZD0iNTEzOTgzNjE0MzI5MzI5OTQxNyI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gdMmZcsmZZmluZMmZbiB0yZltaW4gZWRpbGliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX3Blcm1pc3Npb25zIiBtc2dpZD0iNzI4MzM1NzcyODIxOTMzODExMiI+Ikhlw6cgYmlyIGljYXrJmSB0yZlsyZliIG9sdW5tdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtX2Nvc3RzX21vbmV5IiBtc2dpZD0iNDkwMjQ3MDMyNDE0MjE1MTExNiI+ImJ1bnVubGEgc2l6ZMmZbiB4yZlyYyB0dXR1bGEgYmlsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4iVVNCIHRvcGx1IHlhZGRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiJVU0IgcW/Fn3VsdWR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IlNpeiBVU0IgdmFzaXTJmXNpbMmZIGtvbXDDvHRlcmUgYmHEn2xhbmTEsW7EsXouIEtvbXDDvHRlciB2yZkgQW5kcm9pZGluaXppbiBVU0IgeWFkZGHFn8SxIGFyYXPEsW5kYSBmYXlsbGFyxLEga29weWFsYW1hcSBpc3TJmXlpcnNpbml6c8mZLCBhxZ9hxJ/EsWRha8SxIGTDvHltyZl5yZkgdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA1MzUxMDAwNDQ2MDM3ODExIj4iS29tcMO8dGVyaW5pesmZIFVTQiBpbMmZIHFvxZ91bG11c3VudXouIEZheWxsYXLEsSBBbmRyb2lkaW5pemluIFNEIGthcnTEsSBpbMmZIGtvbXDDvHRlcmluaXogYXJhc8SxbmRhIGtvcHlhbGFtYXEgaXN0yZl5aXJzaW5penPJmSBhxZ9hxJ/EsWRha8SxIGTDvHltyZl5yZkgdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9idXR0b25fbW91bnQiIG1zZ2lkPSIxMDUyMjU5OTMwMzY5NTA4MjM1Ij4iVVNCIHlhZGRhxZ/EsSBha3RpdmzJmcWfZGlyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiJVU0IgeWFkZGHFn8SxbsSxesSxIFVTQiBrw7x0bMmZdmkgeWFkZGHFn8SxIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZluIHphbWFuIHByb2JsZW0geWFyYW5kxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4NzYwMTg1MTI3MTY5NzAzMTMiPiJTRCBrYXJ0xLFuxLF6xLEgVVNCIGvDvHRsyZl2aSB5YWRkYcWfxLEgw7zDp8O8biBpc3RpZmFkyZkgZWTJmW4gemFtYW4gcHJvYmxlbSB5YXJhbmTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4MTc1ODkyNTU0NzU3MjE2NTI1Ij4iVVNCIHFvxZ91bHVkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkzOTgyMjc4MzgyODE4Mzc2MyI+IkZheWxsYXLEsSBrb21ww7x0ZXJpbml6yZkga29weWFsYW1hcSB2yZkgeWEga29tcMO8dGVyaW5pemTJmW4ga29weWFsYW1hcSDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzM2MDU4Mzk2NjYzNTE2MDE3Ij4iVVNCIHlhZGRhxZ/EsSBzw7ZuZMO8csO8biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4iVVNCIHlhZGRhxZ/EsSBzw7ZuZMO8cm3JmWsgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiJVU0IgeWFkZGHFnyBpc3RpZmFkyZkgb2x1bnVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiJVU0IgeWFkZGHFn8SxIHPDtm5kw7xybcmZZMmZbiDDtm5jyZkgQW5kcm9pZFwnaW4gVVNCIHlhZGRhxZ/EsW7EsSBrb21ww7x0ZXJkyZluIGRlbW9udGFqIGV0ZGl5aW5pesmZICjDp8SxeGFyZMSxxJ/EsW7EsXphKSDJmW1pbiBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNDM5Njk3ODI0NjA2MTMxMTQiPiJVU0IgeWFkZGHFn8SxIHPDtm5kw7xybcmZZMmZbiDDtm5jyZkgQW5kcm9pZFwnaW4gVVNCIHlhZGRhxZ/EsW7EsSBrb21ww7x0ZXJkyZluIGRlbW9udGFqIGV0ZGl5aW5pesmZICjDp8SxeGFyZMSxxJ/EsW7EsXphKSDJmW1pbiBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfYnV0dG9uX21vdW50IiBtc2dpZD0iNzA2MDIxODAzNDkwMDY5NjAyOSI+IlVTQiB5YWRkYcWfxLFuxLEgc8O2bmTDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxOTcwMzc0ODk4MjYzMDYzODM2Ij4iVVNCIHlhZGRhxZ/EsSBzw7ZuZMO8csmZbiB6YW1hbiBwcm9ibGVtIG9sZHUuIFVTQiBob3N0dSBkZW1vbnRhaiBldG3JmW5pemkgeW94bGF5xLFuIHbJmSB5ZW5pZMmZbiBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+IlVTQiB5YWRkYcWfxLEgYWt0aXZsyZnFn2RpcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4iVVNCIHlhZGRhxZ/EsSBha3RpdmzJmcWfZGlyc8mZbml6LCBpc3RpZmFkyZkgZXRkaXlpbml6IGLJmXppIHTJmXRiaXFsyZlyIGRheWFuYSBiaWzJmXIgdsmZIFVTQiB5YWRkYcWfIGRlYWt0aXYgZWRpbMmZbsmZIHHJmWTJmXIgacWfbMmZbcmZecmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfZXJyb3JfdGl0bGUiIG1zZ2lkPSI3MzIzNjU4NDY5NjI2NTE0MjA3Ij4iVVNCIMmZbcmZbGl5eWF0xLEgdcSfdXJzdXpkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4iT0siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiJNZWRpYSBjaWhhesSxIGtpbWkgcW/Fn3VsZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiJLYW1lcmEga2ltaSBiYcSfbGFuxLFsZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2NkX2luc3RhbGxlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2Nzc0NzEyODI3ODkyMDkwNzU0Ij4iUXVyYcWfZMSxcsSxY8SxIGtpbWkgcW/Fn3VsdWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiJVU0IgYWtzZXN1YXJhIHFvxZ91bGR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IkRpZ8mZciBVU0Igc2XDp2ltbMmZcmkgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI5MDIwMDkyMTk2MDYxMDA3MjYyIj4iVVNCIHlhZGRhxZ/EsW5hIGZvcm1hdCBhdMSxbHPEsW4/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IlNEIGthcnQgZm9ybWF0IGVkaWxzaW4/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkzNDAxNjg1MzQyNTc2MTA3OCI+IlVTQiB5YWRkYcWfxLFuxLF6ZGEgeWVybMmZxZ9kaXJpbG1pxZ8gYsO8dMO8biBmYXlsbGFyIHNpbGluyZljyZlrLiBCdSBhZGTEsW0gZ2VyaSBkw7Zuw7xsbcmZemRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4iS2FydMSxbsSxemRha8SxIGLDvHTDvG4gbcmZbHVtYXRsYXIgaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X2J1dHRvbl9mb3JtYXQiIG1zZ2lkPSI0MTMxMDY0NTYwMTI3NDc4Njk1Ij4iRm9ybWF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NzI5MDQ0Nzc4OTQ5MTg5OTE4Ij4iVVNCIHNhemxhbWEgcW/Fn3VsdWR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxMDE2NjU0NjI3NjI2NDc2MTQyIj4iVVNCIGRlYmFxxLEgZGVha3RpdmFzaXlhIGV0bcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2lucHV0X21ldGhvZCIgbXNnaWQ9IjQ2NTMzODczMzY3OTEyMjI5NzgiPiJEYXhpbGV0bcmZIG1ldG9kdW51IHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iOTA5MTY1MjE1NzcyMjQ5NTExNiI+IkRheGlsZXRtyZkgw7xzdWxsYXLEsW7EsSBheWFybGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNjIwMzExMjQ3ODA5NTExNzYyNSI+IkZpemlraSBrbGF2aWF0dXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGFyZHdhcmUiIG1zZ2lkPSI3NTE3ODIxMDg2ODg4OTkwMjc4Ij4iSGFyZHdhcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfa2V5Ym9hcmRfbGF5b3V0X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE0MDczNjcwMTcyNjMwMzA3NzMiPiJLbGF2aWF0dXJhIHN4ZW1pIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9rZXlib2FyZF9sYXlvdXRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDY1OTA3NzAwNDQ5MjU3MDYzIj4iS2xhdmlhdHVyYSB0yZlydGliYXTEsSBzZcOnbcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfYWxwaGFiZXQiIG1zZ2lkPSI1NDMzMjc1NDg1NDk5MDM5MTk5Ij4iIEFCQ8OHREXGj0ZHxJ5IWEnEsEpLUUxNTk/DllBSU8WeVFXDnFZZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODlBQkPDh0RFxo9GR8SeSMSwSUpLTE1OT8OWUFFSU8WeVFXDnFZXWFlaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuZGlkYXRlc19zdHlsZSIgbXNnaWQ9IjQzMzM5MTMwODk2MzcwNjIyNTciPjx1PiJuYW1pesmZZGzJmXIiPC91Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ5ODE2MDA1MzUxNDY4NTYwIj4iVVNCIHlhZGRhxZ8gaGF6xLFybGFuxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NTc2MDM0MTg5NzA5OTQwNTAiPiJTRCBrYXJ0IGhhesSxcmxhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgyODczMTk4ODI5MjY3MzcwNTMiPiJTyZlodmzJmXIgeW94bGFuxLFsxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3Nzg4MDQwNzQ1Njg2MjI5MzA3Ij4iQm/FnyBVU0IgeWFkZGHFn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzgwNDc3ODM4MjQxMjEyOTk3Ij4iQm/FnyBTRCBrYXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzg0MDEyMTA2NzQyNzI2OTUwMCI+IlVTQiB5YWRkYcWfIGJvxZ9kdXIgdsmZIHlhIHNpc3RlbSB0yZlyyZlmaW5kyZluIGTJmXN0yZlrbMmZbm3JmXnJmW4gZmF5bCBzaXN0ZW1pbsmZIG1hbGlrZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+IlNEIGthcnQgYm/Fn2R1ciB2yZkgeWEgc2lzdGVtIHTJmXLJmWZpbmTJmW4gZMmZc3TJmWtsyZlubcmZecmZbiBmYXlsIHNpc3RlbWluyZkgbWFsaWtkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4iWsmZZMmZbGkgVVNCIHlhZGRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+IlrJmWTJmWxpIFNEIGthcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+IlNEIHlhZGRhxZ8gesmZZMmZbMmZbmliLiBPbnUgZm9ybWF0IGV0bcmZecmZIMOnYWzEscWfxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE3NTM4OTg1Njc1MjU1NjgyNTMiPiJTRCBrYXJ0IHrJmWTJmWzJmW5pYi4gT251IGZvcm1hdCBldG3JmXnJmSDDp2FsxLHFn8Sxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+IlVTQiB5YWRkYcWfxLEgZ8O2emzJmW5pbG3JmWTJmW4gw6fEsXhhcsSxbGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NzIxNTI4ODI2MDQ0MDc4MzciPiJTRCBrYXJ0IGfDtnpsyZluaWxtyZlkyZluIMOnxLF4YXLEsWxkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MzI5ODQ4ODE5ODY1NTk0MjQxIj4iTcmZbHVtYXQgaXRraXNpbmluIHFhcsWfxLFzxLFuxLEgYWxtYXEgw7zDp8O8biBVU0IgeWFkZGHFn8SxIMOnxLF4YXJtYXpkYW4gyZl2dsmZbCBvbnUgZGVtb250YWogZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjAxODMyOTM3NDc0NDgyNDEiPiJEYXRhIGl0a2lzaW5pbiBxYXLFn8Sxc8SxbsSxIGFsbWFxIMO8w6fDvG4gU0Qga2FydMSxIMOnxLF4YXJtYWRhbiDDtm5jyZkgZGVtb250YWogZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTY3OTczODkzMjcwMzYwMjMwIj4iVVNCIHlhZGRhxZ8gw6fEsXhhcm1hcSDDvMOnw7xuIHTJmWhsw7xryZlzaXpkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY3Mjk4MDExMzA3OTA2MTYyMDAiPiJTRCBrYXJ0IHTJmWhsw7xryZlzaXogw6fEsXhhcsSxbGEgYmlsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4iU2l6IFVTQiB5YWRkYcWfxLEgdMmZaGzDvGvJmXNpeiDDp8SxeGFyYSBiaWzJmXJzaW5pei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTY4ODQxMjc4MTM4Mzc3NjA0Ij4iU2l6IFNEIGthcnTEsSB0yZlobMO8a8mZc2l6IMOnxLF4YXJhIGJpbMmZcnNpbml6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NDg2Mzc3MjMwMTQwMjI3NjUxIj4iU2lsaW5tacWfIFVTQiB5YWRkYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+IlNEIGthcnQgw6fEsXhhcsSxbGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjY5MjExMjYxNjI1ODA1NzQxNDMiPiJVU0IgeWFkZGHFnyDDp8SxeGFyxLFsZMSxLiBZZW5pIG1lZGlhIMmZbGF2yZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJTRCBrYXJ0IMOnxLF4YXLEsWxkxLEuIFllbmlzaW5pIGRheGlsIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiJVecSfdW4gZ8mZbMmZbiBmyZlhbGl5ecmZdCB0YXDEsWxtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSI4Nzg3MzUyMDc0MzI2NzQ4ODkyIj4ia29tcG9uZW50IGlzdGlmYWTJmXNpIHN0YXRpc3Rpa2FzxLFuxLEgZ8O8bmPJmWxsyZl5aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+IlTJmXRiaXHJmSB0b3BsYW5txLHFnyBpc3RpZmFkyZkgc3RhdGlzdGlrYXPEsW7EsSBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+Im3JmXptdW51IGtvcHlhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzOTA2OTcxMjQyODgzMTc4MzEiPiJUyZl0YmlxyZkga29udGVudGkga29weWFsYW1hcSDDvMOnw7xuIGRlZm9sdCBrb250ZXluZXIgc2VydmlzaW5pIMOnYcSfxLFybWFxIGljYXrJmXNpIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbG1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JvdXRlX21lZGlhX291dHB1dCIgbXNnaWQ9IjE2NDIwMjQ0NTU3NTA0MTQ2OTQiPiJNZWRpYSDDp8SxeMSxxZ/EsW7EsSB5w7ZubMmZbmRpcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNDkzMjgxODc0OTU0NzI0NDM0NiI+IlTJmXRiaXHJmSBtZWRpYSDDp8SxeMSxxZ/EsW7EsSBkaWfJmXIgeGFyaWNpIGNpaGF6bGFyYSB5w7ZubMmZbmRpcm3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9Ijc1NjU1NTIyMzc5Nzc4MTUwNDciPiJLZXlndWFyZCB0yZlobMO8a8mZc2l6IHlhZGRhxZ9hIMOnxLF4xLHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9IjU4NjYyNDU0ODQzMDMyODU3NjIiPiJUyZl0YmlxyZkga2VndWFyZCB0yZlobMO8a8mZc2l6IHlhZGRhxZ9hIMOnYXRtYcSfYSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sX2tleWd1YXJkIiBtc2dpZD0iMTcyMTk1MTg0MjA3ODI4Mzg3Ij4iS2xhdmlhdHVyYSBraWxpZGluaW4gZ8O2csO8bG3JmXNpbmkgdsmZIGdpemzJmWRpbG3JmXNpbmkgaWRhcsmZIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sX2tleWd1YXJkIiBtc2dpZD0iMzA0MzczMjI5MDUxODYyOTA2MSI+IlTJmXRiaXHJmSBrZWd1YXJkxLEgaWRhcsmZIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiJab29tIG7JmXphcsmZdGkgw7zDp8O8biBpa2kgZMmZZsmZIHRveHVudW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnYWRnZXRfaG9zdF9lcnJvcl9pbmZsYXRpbmciIG1zZ2lkPSI0ODgyMDA0MzE0OTA2NDY2MTYyIj4iV2lkZ2V0IMmZbGF2yZkgZWRpbMmZIGJpbG3JmWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZ28iIG1zZ2lkPSI4MzIwODQ1NjUxNzM3MzY5MDI3Ij4iR2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9zZWFyY2giIG1zZ2lkPSI2NTgxMTAyNzE4MjI4MDc4MTEiPiJBeHRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VuZCIgbXNnaWQ9IjIzMTYxNjY1NTYzNDkzMTQ0MjQiPiJHw7ZuZMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fbmV4dCIgbXNnaWQ9IjMxMzg4NDM5MDQwMDk4MTM4MzQiPiJOw7Z2YsmZdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2RvbmUiIG1zZ2lkPSI4OTcxNTE2MTE3OTEwOTM0NjA1Ij4iVGFtYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3ByZXZpb3VzIiBtc2dpZD0iMTQ0MzU1MDAzOTI1MDEwNTk0OCI+IsaPdnbJmWxraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZGVmYXVsdCIgbXNnaWQ9IjI4NDA5MjE4ODU1NTgwNDU3MjEiPiLEsGNyYSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlhbF9udW1iZXJfdXNpbmciIG1zZ2lkPSI1Nzg5MTc2NDI1MTY3NTczNTg2Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+IGlzdGlmYWTJmSBldG3JmWtsyZlcbm7Dtm1yyZkgecSxxJ/EsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz5pc3RpZmFkyZkgZWTJmXLJmWsga29udGFrdCB5YXJhZMSxblxuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiJBxZ9hxJ/EsWRha8SxIGJpciB2yZkgeWEgZGFoYSDDp294IHTJmXRiaXFsyZlywqBpbmRpIHbJmSBnyZlsyZljyZlrZMmZIGhlc2FixLFuxLF6YSBkYXhpbCBvbG1hcSDDvMOnw7xuIGljYXrJmSBpc3TJmXlpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9jcmVkZW50aWFsc19wZXJtaXNzaW9uX21lc3NhZ2VfZm9vdGVyIiBtc2dpZD0iMzEyNTIxMTM0MzM3OTM3NjU2MSI+IkJ1IGlzdMmZecmZIGl6biB2ZXJtyZlrIGlzdMmZeWlyc2luaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfcGVybWlzc2lvbnNfaGVhZGVyX3RleHQiIG1zZ2lkPSI2ODc0NDk3NDA4MjAxODI2NzA4Ij4iR2lyacWfIHNvcsSfdXN1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4ixLBjYXrJmSB2ZXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4iUsmZZGQgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjQ4Njc1OTc5NTkyNjIzNzkwNyI+IsSwY2F6yZkgdMmZbMmZYiBvbHVudXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij5cbiIgaGVzYWLEsSDDvMOnw7xuPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiVzPC94bGlmZjpnPiBpY2F6yZkgc29yxJ91c3UgZ8O2bmTJmXJpbGRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImlucHV0X21ldGhvZF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTI4MzU1NzE3OTk0NDk5MjY0OSI+IkRheGlsZXRtyZkgbWV0b2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IlNpbnhyb25pemFzaXlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iNDE0ODEyMDc0MjA5NjQ3NDY0MSI+IsaPbMOnYXTEsW1sxLFsxLFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4iRGl2YXIga2HEn8SxesSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iRGl2YXIga2HEn8SxesSxbsSxIGTJmXlpxZ9pbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkJpbGRpcmnFnyBkaW5syZl5yZluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gYWt0aXZsyZnFn2RpcmlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IHTJmXLJmWZpbmTJmW4gYWt0aXZsyZnFn2RpcmlsaWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLFnsmZYsmZa8mZbmkgaWRhcsmZIGV0bcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHRfbG9uZyIgbXNnaWQ9IjY0MDczNTEwMDYyNDkxNzQ0NzMiPiI8eGxpZmY6ZyBpZD0iU0VTU0lPTiI+JXM8L3hsaWZmOmc+IHNlc3NpeWF5YSBxb8WfdWx1ZHVyLiDFnsmZYsmZa8mZbmkgaWRhcsmZIGV0bcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDQzNDM4OTY0NDQwOTYwNzQ1Ij4iSMmZbWnFn8mZIGFrdGl2IFZQTiBiYcSfbGFuxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiJWUE4gYmHEn2xhbnTEsXPEsSBoyZltacWfyZkgYWt0aXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fZXJyb3IiIG1zZ2lkPSI2MDA5MjQ5ODE0MDM0NzA4MTc1Ij4iSMmZbWnFn8mZIGFrdGl2IFZQTiB4yZl0YXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25maWciIG1zZ2lkPSI2NDE1ODk5MTUwNjcxNTM3OTcwIj4iS29uZmlxdXLJmSBldG3JmWsgw7zDp8O8biB0b3h1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVwbG9hZF9maWxlIiBtc2dpZD0iMjg5Nzk1NzE3MjM2NjczMDQxNiI+IkZheWwgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fZmlsZV9jaG9zZW4iIG1zZ2lkPSI2MzYzNjQ4NTYyMTcwNzU5NDY1Ij4iSGXDpyBiaXIgZmF5bCBzZcOnaWxtyZl5aWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXNldCIgbXNnaWQ9IjI0NDgxNjgwODA5NjQyMDk5MDgiPiJTxLFmxLFybGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3VibWl0IiBtc2dpZD0iMTYwMjMzNTU3MjA4OTkxMTk0MSI+IkfDtm5kyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzMTY0NzY4MjEyMDAzODY0MzE2Ij4iQXZ0b21vYmlsIHJlamltaSBha3RpdmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4MDM1MjMwNTM3NTYzNTAzMjYyIj4iQXZ0b21vYmlsIHJlamltaW5kyZluIMOnxLF4bWFxIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzMTQ2Njk0MjM0Mzk4MjAyNjAxIj4iVGV6ZXJpbnEgdsmZIHlhIGhvdHNwb3QgYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjY4NTcwMzE3NjAxMDMwNjI5ODIiPiJRdXJhxZ9kxLFybWFxIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiJHZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV4dF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMDgwNTU1MTA0Njc3OTkyNDA4Ij4iTsO2dmLJmXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2tpcF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMjc1MzYyMjk5NDcxNjMxODE5Ij4iS2XDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlX3dhcm5pbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDg5MDg5NDI2NzQ1NDg2NzI3NiI+IlnDvGtzyZlrIG1vYmlsIGRhdGEgaXN0aWZhZMmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMzM0MDgyMjIyODU5OTMzNzc0MyI+Ik1vYmlsIGRhdGEgaXN0aWZhZMmZc2kgaGFxccSxbmRhIGRhaGEgw6dveCDDtnlyyZlubcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjYyNjk1NDE4OTc3Mjk3ODEzMzIiPiJNb2JpbCBkYXRhIGxpbWl0aSBrZcOnaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjU0NDM0NTczMjEzNTQ5MDcxODEiPiJNb2JpbCBkYXRhIGlzdGlmYWTJmXNpIGhhcXHEsW5kYSBkYWhhIMOnb3ggw7Z5csmZbm3JmWsgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX21hdGNoZXMiIG1zZ2lkPSI4MTI5NDIxOTA4OTE1ODQwNzM3Ij4iVXnEn3VubHVxIHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfb25fcGFnZSIgbXNnaWQ9IjE5NDY3OTkyMzM4MjI4MjAzODQiPiJTyZloaWbJmWTJmSB0YXAiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTY3MTQ3MDgxMTM2NTc5NDM5Ij4iMSB1ecSfdW5sdXEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ2NDE4NzI3OTcwNjc2MDkxNzciPiI8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiDJmWTJmWRkyZluIDx4bGlmZjpnIGlkPSJUT1RBTCI+JWQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21vZGVfZG9uZSIgbXNnaWQ9IjcyMTc1ODE2NDA0NjE5MjIyODkiPiJIYXrEsXJkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4iVVNCIHlhZGRhxZ/EsSBxYWxkxLFyxLFsxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMjc4OTQ5OTg0MDk1MzcxOTAiPiJTRCBrYXJ0IGRlbW9udGFqIGVkaWxpci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDUyMTU3MzMyMTUyNDM0MDA1OCI+IlVTQiB5YWRkYcWfIHNpbGluaXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjU5Njk4ODg3NTUwNzA0MzA0MiI+IlNEIGthcnQgc2lsaW5pci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4iVVNCIHlhZGRhxZ/EsSBzaWxpbsmZIGJpbG3JmWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMTUyNDg2OTY2NDQ1MTA5MzUiPiJTRCBrYXJ0xLEgc2lsbcmZayBtw7xta8O8biBvbG1hZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2JhZF9yZW1vdmFsIiBtc2dpZD0iNzk2MDg2NDA2MTAxNjYwMzI4MSI+IlNEIGthcnQgZGVtb250YWogZWRpbG3JmWTJmW4gw7ZuY8mZIMOnxLF4YXLEsWxkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDE4MTg4NzIwMDA5NTY5NjkzIj4iVVNCIHlhZGRhxZ8gaGF6xLFyZGEgeW94bGFuxLFsxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMzNDc2MjUwMzkwNDgyNzQ4MSI+IlNEIGthcnQgaGF6xLFyZGEgeW94bGFuxLFsxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4iU0Qga2FydCDDp8SxeGFyxLFsxLFiLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4iU0Qga2FydCBoYXrEsXJkYSBrb21ww7x0ZXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MDYxMzA1NjgxMzM1NDA0MzUiPiJTRCBrYXJ0IGhhbC1oYXrEsXJkYSBrb21ww7x0ZXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Vua25vd25fc3RhdGUiIG1zZ2lkPSI3MjkxOTI3ODIxOTcyOTAzODUiPiJOYW3JmWx1bSB2yZl6aXl5yZl0ZMmZIHhhcmljaSBtZWRpYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZSIgbXNnaWQ9IjE3Nzg2ODY2MTgyMzAwMTE5NjQiPiJQYXlsYcWfxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZCIgbXNnaWQ9IjQ4MDgyNzA5MDAzMjI5ODU5NjAiPiJUYXDEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWJzZWFyY2giIG1zZ2lkPSI0MzM3MTU3OTc3NDAwMjExNTg5Ij4iVmViIEF4dGFyxLHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfbmV4dCIgbXNnaWQ9IjU3NDIxMjQ2MTg5NDIxOTM5NzgiPiJTb25yYWvEsW7EsSB0YXAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX3ByZXZpb3VzIiBtc2dpZD0iMjE5NjcyMzY2OTM4ODM2MDUwNiI+IsaPdnbJmWxraW5pIHRhcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGlja2VyIiBtc2dpZD0iNTYyMjY4MzkxMjYxNjQ5NjE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4gdMmZcsmZZmluZMmZbiBtyZlrYW4gc29yxJ91c3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZlRpdGxlIiBtc2dpZD0iNTQ0Njg1ODcxNzE1NzQxNjgzOSI+Ik3JmWthbiBzb3LEn3VzdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmTWVzc2FnZSIgbXNnaWQ9IjEzNzQ3MTgwMjMyMjQwMDA3MDIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4gKDx4bGlmZjpnIGlkPSJTRVJWSUNFIj4lMiRzPC94bGlmZjpnPikgdMmZcsmZZmluZMmZbiB0yZlsyZliIGVkaWxpYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc1ZlcmlmWWVzIiBtc2dpZD0iMjM0NjU2NjA3Mjg2NzIxMzU2MyI+IkLJmWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiJYZXlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY190b29fbWFueV9kZWxldGVzIiBtc2dpZD0iNTI5NjMyMTg1MDY2Mjc0Njg5MCI+IkxpbWl0aSBrZcOnyZluaSBzaWxpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlc19kZXNjIiBtc2dpZD0iNDk2NTUxNjcxMDA4Njk0MjQ1Ij4iPHhsaWZmOmcgaWQ9IlRZUEVfT0ZfU1lOQyI+JTIkczwveGxpZmY6Zz4gw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSX09GX0RFTEVURURfSVRFTVMiPiUxJGQ8L3hsaWZmOmc+IHNpbGlubWnFnyBmYXlsIHZhciwgPHhsaWZmOmcgaWQ9IkFDQ09VTlRfTkFNRSI+JTMkczwveGxpZmY6Zz4gaGVzYWLEsS4gTsmZIGV0bcmZayBpc3TJmXlpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfcmVhbGx5X2RlbGV0ZSIgbXNnaWQ9IjI1NzI2MDAxMDMxMjI1OTYyNDMiPiJFbGVtZW50bMmZcmkgc2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY191bmRvX2RlbGV0ZXMiIG1zZ2lkPSIyOTQxMzE3MzYwNjAwMzM4NjAyIj4iU2lsaW7JmW5syZlyaSBnZXJpIHFheXRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfZG9fbm90aGluZyIgbXNnaWQ9IjM3NDM3NjQ3NDA0MzA4MjE4NDUiPiLEsG5kaWxpayBoZcOnIG7JmSBldG3JmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9hY2NvdW50X2xhYmVsIiBtc2dpZD0iNTY1NTIwMzA4OTc0NjQyMzkyNyI+Ikhlc2FiIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+Ikhlc2FiIMmZbGF2yZkgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfYWNjb3VudF9idXR0b25fbGFiZWwiIG1zZ2lkPSIzNjExOTgyODk0ODUzNDM1ODc0Ij4iSGVzYWIgyZlsYXbJmSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iMjQxMjA3MjI3MjgzMjI4NDMxMyI+IkFydMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfZGVjcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjQ3NjA1MDc3ODM4Njc3OTA2NyI+IkF6YWxkxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfc2Nyb2xsX21vZGUiIG1zZ2lkPSIzMDczMTAxMDY3NDQxNjM4NDI4Ij4iPHhsaWZmOmcgaWQ9IlZBTFVFIj4lczwveGxpZmY6Zz4gdG94dW51biB2yZkgYmFzYXJhcSBzYXhsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfc2Nyb2xsX2FjdGlvbiIgbXNnaWQ9IjkxMDE0NzMwNDU4OTE4MzU0OTAiPiJBcnTEsXJtYXEgw7zDp8O8biB5dXhhcsSxLCBhemFsdG1hcSDDvMOnw7xuIGHFn2HEn8SxIHPDvHLDvMWfZMO8csO8bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9Ijg4NjU4ODUxMTQwMjg2MTQzMjEiPiJEyZlxaXHJmSBhcnTEsXLEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9IjYyNDY4MzQ5MzcwODA2ODQ3OTEiPiJEyZlxaXHJmW5pIGF6YWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X2hvdXJfYnV0dG9uIiBtc2dpZD0iMzY1MjA1NjA1NTgxMDIyMzEzOSI+IlNhYXTEsSBhcnTEsXLEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIxMzc3NDc5ODYzNDI5MjE0NzkyIj4iU2FhdMSxIGF6YWxkxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X3NldF9wbV9idXR0b24iIG1zZ2lkPSI0MTQ3NTkwNjk2MTUxMjMwODYzIj4iUE0gcXVydW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfc2V0X2FtX2J1dHRvbiIgbXNnaWQ9IjgzMDIxNDAzNTM1Mzk0ODY3NTIiPiJBTSBxdXJ1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9tb250aF9idXR0b24iIG1zZ2lkPSI1MzY5OTk4NDc5MDY3OTM0MTEwIj4iQXJ0bWEgYXnEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF9tb250aF9idXR0b24iIG1zZ2lkPSIxODMyNjk4OTk1NTQxNzI2MDE5Ij4iQXnEsSBhemFsZMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNzEzMDQ2NTQxMjMwODE3MzkwMyI+IkFydG1hIGfDvG7DvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNDEzMTg4MTUyMTgxODc1MDAzMSI+IkF6YWxtYSBnw7xuw7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI2MzE4Njk3Mzg0MzEwODA4ODk5Ij4iQXJ0xLFtIGlsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjQ0ODIwMjE4MTM0OTExMjE3MTciPiJBemFsbWEgaWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJMyZnEn3YgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4iU2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiJIYXrEsXJkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4iUmVqaW0gZMmZeWnFn2lrbGl5aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRGF4aWwgb2x1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlTJmXRiaXEgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iQnVudW5sYSBwYXlsYcWfxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4gaWzJmSBwYXlsYcWfxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IlPDvHLDvMWfyZluIHF1bHAuIFRveHVuYXJhcSBiYXPEsWzEsSB0dXR1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IMO8w6fDvG4geXV4YXLEsSBzw7xyw7zFn2TDvHLDvG4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IMO8w6fDvG4gYcWfYcSfxLEgc8O8csO8xZ9kw7xyw7xuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDDvMOnw7xuIHNvbGEgc8O8csO8xZ9kw7xyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gw7zDp8O8biBzYcSfYSBzw7xyw7zFn2TDvHIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJLaWxpZGkgYcOnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTyZlzc2l6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlPJmXMgYcOnxLFxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iQXh0YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gdnVydW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlBhcm9sbGFyxLFuIHPJmXNsyZluZGlyaWxtyZlzaSDDvMOnw7xuIHF1bGFxbMSxcWxhcsSxIHRheMSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJOw7ZxdMmZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUyOTM2MDA0OTY2MDE0OTAyMTYiPiJFdsmZIGdlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl91cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyMzc0OTY1NjI5NTIxNTI1ODkiPiJZdXhhcsSxIGdlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21lbnVfb3ZlcmZsb3dfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjk1NjU5MDM3NTA5MDA4NDUzIj4ixo9sYXbJmSBzZcOnaW1syZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9Ijc5NjU5ODQzNjA5MDM2OTM5MDMiPiIlMSRzLCAlMiRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX3N1YnRpdGxlX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9IjY5ODU1NDY1MzA0NzE3ODA3MjciPiIlMSRzLCAlMiRzLCAlMyRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9pbnRlcm5hbCIgbXNnaWQ9IjQ4OTE5MTY4MzM2NTc5MjkyNjMiPiJEYXhpbGkgeWFkZGHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2Vfc2RfY2FyZCIgbXNnaWQ9IjMyODI5NDg4NjEzNzgyODY3NDUiPiJTRCBrYXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2IiIG1zZ2lkPSIzMDE3OTU0MDU5NTM4NTE3Mjc4Ij4iVVNCIHlhZGRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRyYWN0X2VkaXRfbWVudV9idXR0b24iIG1zZ2lkPSI4OTQwNDc4NzMwNDk2NjEwMTM3Ij4iUmVkYWt0yZkgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIxOTU1NjM4ODYyMTIyMjMyMzQyIj4iRGF0YSBpc3RpZmFkyZkgeMmZYsmZcmRhcmzEscSfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfYm9keSIgbXNnaWQ9IjI4MTQ2NzM1NTE0NzE5Njk5NTQiPiLEsHN0aWZhZMmZIHbJmSBheWFybGFyxLEgZ8O2cm3JmWsgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF90aXRsZSIgbXNnaWQ9IjcwOTMzMzQ0MTk1MTg3MDY2ODYiPiIyRy0zRyBkYXRhIGRlYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzYzNjQ4OTQzNjgxOTQ3MDc2MSI+IjRHIGRhdGEgZGVha3RpdiBlZGlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF90aXRsZSIgbXNnaWQ9Ijc4Njk0MDI1MTkzOTE2MzE4ODQiPiJNb2JpbCBkYXRhIGRlYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfdGl0bGUiIG1zZ2lkPSI4OTkyMTU0NzM2NDQxMjg0ODY1Ij4iV2ktRmkgZGF0YSBkZWFrdGl2IGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfYm9keSIgbXNnaWQ9IjMzMTc5NjQ3MDY5NzM2MDEzODYiPiJBa3RpdmzJmcWfZGlybcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iNzAyNjczOTEyMTEzODAwNTIzMSI+IjJHLTNHIGRhdGEgbGltaXRpIGHFn8SxbMSxYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiI0RyBkYXRhIGxpbWl0aSBrZcOnaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIyNzkyNDA1NzIxNjU0MTIxNjgiPiJNb2JpbCBkYXRhIGxpbWl0aSBrZcOnaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IldpLUZpIGRhdGEgbGltaXRpIGtlw6dpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9zbm9vemVkX2JvZHkiIG1zZ2lkPSI3MDM1NDkwMjc4Mjk4NDQxNzY3Ij4iPHhsaWZmOmcgaWQ9IlNJWkUiPiVzPC94bGlmZjpnPiBtw7zJmXl5yZluIGVkaWxtacWfIGxpbWl0IGHFn8Sxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4iQXJ4YXBsYW4gZGF0YXPEsSBtyZloZHVkbGHFn2TEsXLEsWxkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfYm9keSIgbXNnaWQ9IjY3NDE1MjEzMzA5OTc0NTI5OTAiPiJNyZloZHVkaXl5yZl0aSBhcmFkYW4gcWFsZMSxcm1hcSDDvMOnw7xuIHRveHVudW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGUiIG1zZ2lkPSI2NTEwMDQwNDg2MDQ5MjM3NjM5Ij4iVMmZaGzDvGvJmXNpemxpayBzZXJ0aWZpa2F0xLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGVfaXNfdmFsaWQiIG1zZ2lkPSI2ODI1MjYzMjUwNzc0NTY5MzczIj4iQnUgc2VydGlmaWthdCBldGliYXJsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF90byIgbXNnaWQ9IjQ1NDIzOTQ4MDI3NDkyMTAzMiI+IlZlcmlsaWI6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tbW9uX25hbWUiIG1zZ2lkPSIyMjMzMjA5Mjk5NDM0MTcyNjQ2Ij4iw5xtdW1pIGFkOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ19uYW1lIiBtc2dpZD0iNjk3MzU2MTE5MDc2MjA4NTIzNiI+IlTJmcWfa2lsYXQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnX3VuaXQiIG1zZ2lkPSI3MjY1OTgxODkwNDIyMDcwMzgzIj4iVMmZxZ9raWxhdGkgdmFoaWQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX2J5IiBtc2dpZD0iMjY0NzU4NDk4ODA1NzQ4MTU2NiI+IlTJmXLJmWZpbmTJmW4gdmVyaWxpYjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2YWxpZGl0eV9wZXJpb2QiIG1zZ2lkPSI4ODE4ODg2MTM3NTQ1OTgzMTEwIj4iS2XDp8mZcmxpbGlrOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9vbiIgbXNnaWQ9IjU4OTUwMTc0MDQzNjEzOTcyMzIiPiJEyZlyYyBvbHVudWI6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXhwaXJlc19vbiIgbXNnaWQ9IjM2NzYyNDI5NDk5MTU5NTk4MjEiPiJCaXRtyZkgdmF4dMSxOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcmlhbF9udW1iZXIiIG1zZ2lkPSI3NTg4MTQwNjc2NjA4NjI0OTMiPiJTZXJpeWEgbsO2bXLJmXNpOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50cyIgbXNnaWQ9IjQ1MTYwMTk2MTk4NTA3NjMwNDkiPiJCYXJtYXEgaXpsyZlyaToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGEyNTZfZmluZ2VycHJpbnQiIG1zZ2lkPSI0MzkxMjcxMjg2NDc3Mjc5MjYzIj4iU0hBLTI1NiBiYXJtYXEgaXppOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4iU0hBLTEgYmFybWFxIGl6aToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfc2VlX2FsbCIgbXNnaWQ9IjQyOTI1NjkzODM5NzY2MzYyMDAiPiJIYW3EsXPEsW7EsSBzZcOnxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNDcxMDAxMzg2NDk3NDA0MDYxNSI+IkbJmWFsaXl5yZl0aSBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiJCdW51bmxhIHBheWxhxZ/EsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsaXN0X2RlbGltZXRlciIgbXNnaWQ9IjM5NzUxMTc1NzIxODU0OTQxNTIiPiIsICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbmRpbmciIG1zZ2lkPSIzMjQ1NjUzNjgxMDA4MjE4MDMwIj4iR8O2bmTJmXJpbGlyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoQnJvd3NlckRlZmF1bHQiIG1zZ2lkPSIyMDU3OTUxOTQ3Mjk3NjE0NzI1Ij4iQnJhdXplciBpxZ/JmSBzYWzEsW5zxLFuPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlNldHVwQ2FsbERlZmF1bHQiIG1zZ2lkPSI1ODM0OTQ4NDY5MjUzNzU4NTc1Ij4iWsmZbmdpIHHJmWJ1bCBlZMmZaz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2VfYWx3YXlzIiBtc2dpZD0iODAxNzc3MDc0NzgwMTQ5NDkzMyI+IkjJmW1pxZ/JmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9vbmNlIiBtc2dpZD0iMjQwNDY0NDc5NzE0OTE3Mzc1OCI+IlNhZMmZY8mZIGJpciBkyZlmyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MTcwNTM4OTgxNjcxMjc0NzEiPiJQbGFuxZ9ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQyMzkyOTEyNzM0MjAxNDAxMjMiPiJUZWxlZm9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2hlYWRwaG9uZXMiIG1zZ2lkPSI4MTE5OTcxODQzODAzNDM5MTEwIj4iUXVsYXFsxLFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2RvY2tfc3BlYWtlcnMiIG1zZ2lkPSI2MjQwNjAyOTgyMjc2NTkxODY0Ij4iRG9rIHNwaWtlcmzJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X21lZGlhX3JvdXRlX25hbWVfaGRtaSIgbXNnaWQ9IjI0NTA5NzAzOTkwMjM0NzgwNTUiPiJIRE1JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlNpc3RlbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoIGF1ZGlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJTaW1zaXogZWtyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iSGF6xLFyZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik1lZGlhIMOnxLF4xLHFn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNrYW4gZWRpbGlyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iUW/Fn3VsdXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IsaPbMOnYXTEsW1sxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9IjY3Mzk4OTk5NjI2ODE4ODY0MDEiPiLGj2zDp2F0xLFtbMSxIGRleWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiLEsHN0aWZhZMmZIG9sdW51ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9idWlsdF9pbl9kaXNwbGF5X25hbWUiIG1zZ2lkPSIyNTgzMTM0Mjk0MjkyNTYzOTQxIj4iRGF4aWxpIGVrcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+IkhETUkgRWtyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iw5ZydMO8ayAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHTJmWhsw7xryZlzaXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IlNpbXNpeiBla3JhbiBxb8WfdWx1YiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJCdSBla3JhbiBkaWfJmXIgY2loYXpkYSBnw7ZzdMmZcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkJhxJ9sYW50xLFuxLEga8mZc2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJUyZljaWxpIHrJmW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4ixZ5hYmxvbnUgdW51dG11xZ9hbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4iWWFubMSxxZ8gTW9kZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiJZYW5sxLHFnyDFnmlmcsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IlBJTiBzyZlodmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkZDwveGxpZmY6Zz4gc2FuaXnJmSBzb25yYSB5ZW5pZMmZbiBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4ixZ5hYmxvbnVudXp1IMOnyZlraW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJTSU0gUElOIGtvZHUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUMSwTiBrb2R1IGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4iUGFyb2wgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTSBpbmRpIGRlYWt0aXZkaXIuIERhdmFtIGV0bcmZayDDvMOnw7xuIFBVSyBrb2R1IGRheGlsIGVkaW4uIMaPbGF2yZkgbcmZbHVtYXQgw7zDp8O8biBvcGVyYXRvcmEgbcO8cmFjacmZdCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLEsHN0yZlkaXlpbml6IFDEsE4ga29kdSBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IsSwc3TJmWRpeWluaXogUElOIGtvZHUgdMmZc2RpcWzJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU8SwTSBrYXJ0xLFuIGtpbGlkaSBhw6fEsWzEsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJZYW5sxLHFnyBQxLBOIGtvZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiI0LWTJmW4gOC3JmSBxyZlkyZlyIHLJmXHJmW1pIG9sYW4gUElOIHlhesSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsga29kIDggcsmZccmZbSB2yZkgeWEgZGFoYSDDp294IG9sbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkTDvHpnw7xuIFBVSyBrb2R1IHllbmlkyZluIGRheGlsIGVkaW4uIFTJmWtyYXJsYW5hbiBjyZloZGzJmXIgU0lNXCdpIGJpcmTJmWbJmWxpayBzxLFyYWRhbiDDp8SxeGFyYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIGtvZGxhcsSxIHV5xJ91biBkZXlpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IkjJmWRkaW5kyZluIMOnb3ggY8mZaGQgZWRpbGRpISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gR29vZ2xlIGhlc2FixLFuxLF6IGlsyZkgZGF4aWwgb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+IsSwc3RpZmFkyZnDp2kgYWTEsSAoZS1wb8OndCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IsWeaWZyyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IkRheGlsIG9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiJZYW5sxLHFnyBpc3RpZmFkyZnDp2kgYWTEsSB2yZkgeWEgcGFyb2wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IsSwc3RpZmFkyZnDp2kgYWTEsW7EsXrEsSB2yZkgeWEgcGFyb2x1bnV6dSB1bnV0bXVzdW51ej9cbiAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIgbGlua2luyZkgZGF4aWwgb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiJIZXNhYiB5b3hsYW7EsWzEsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlBJTiBrb2R1bnV6dSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRkaW5pei5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLFnmlmcsmZbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRkaW5pei4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ik1vZGVsaW5pemkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIMOnyZlrbWlzaW5pei5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IlNpeiBwbGFuxZ9ldCBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgdcSfdXJzdXogY8mZaGQgZXRtaXNpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkyZlmyZkgZMmZIHXEn3Vyc3V6IGPJmWhkIGV0c8mZbml6LCBwbGFuxZ9ldCBmYWJyaWsgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEgdsmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsW7EsXogaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IlNpeiB0ZWxlZm9uIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgdcSfdXJzdXogY8mZaGQgZXRzyZluaXosIHRlbGVmb24gZmFicmlrIGF5YXJsYXLEsW5hIHPEsWbEsXJsYW5hY2FxIHbJmSBiw7x0w7xuIG3JmWx1bWF0bGFyxLFuxLF6IGl0yZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4iU2l6IHBsYW7Fn2V0IGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBkyZlmyZkgdcSfdXJzdXogY8mZaGQgZXRtaXNpbml6LiBQbGFuxZ9ldCBmYWJyaWsgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4iU2l6IHRlbGVmb251biBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4geWFubMSxxZ8gY8mZaGQgZXRtaXNpbml6LiBUZWxlZm9uIGFydMSxcSBkZWZvbHQgemF2b2QgaGFsxLFuYSBzxLFmxLFybGFuYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iU2l6IGtpbGlkaSBhw6dtYXEgw7zDp8O8biDFn2FibG9udSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgc8mZaHYgw6fJmWtkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZGFoYSB1xJ91cnN1eiBjyZloZGTJmW4gc29ucmEgcGxhbsWfZXRpbml6aW4ga2lsaWRpbmkgZS1wb8OndCBoZXNhYsSxbsSxemxhIGHDp21hcSB0yZlsyZliIG9sdW5hY2FxLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgYmlyIGRhaGEgeW94bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iU2l6IGFydMSxcSBtb2RlbGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0bWlzaW5pei48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkyZlmyZkgZMmZIHlhbmzEscWfIGRheGlsIGV0c8mZbml6LCB0ZWxlZm9udW4ga2lsaWRpbmluIGHDp8SxbG1hc8SxIMO8w6fDvG4gZWxla3Ryb24gcG/Dp3Qgw7xudmFuxLFuxLF6IHTJmWzJmWIgb2x1bmFjYXEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIC0gIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJZxLHEn8SxxZ9kxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2FmZV9tZWRpYV92b2x1bWVfd2FybmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMjQxNjE5Mzk0NzU0NzgwNjYiPiJTyZlzIGfDvGPDvCB0w7Z2c2l5yZkgZWRpbMmZbiBzyZl2aXl5yZlkyZluIGFydMSxcsSxbHPEsW4/XG5VenVuIG3DvGRkyZl0IHnDvGtzyZlrIHPJmXMgZ8O8Y8O8IGlsyZkgZGlubMmZbcmZIFNpemluIGXFn2l0bcmZIHFhYmlsaXl5yZl0aW5pesmZIG3JmW5maSB0yZlzaXIgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGludWVfdG9fZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNjI2NDI3MzcyMzE2MDcwMjU4Ij4ixo9sw6dhdMSxbWzEscSfxLEgYWt0aXZsyZnFn2Rpcm3JmWsgw7zDp8O8biBpa2kgYmFybWHEn8SxbsSxesSxIGJhc8SxbMSxIHNheGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2VuYWJsZWQiIG1zZ2lkPSIxMzgxOTcyMDQ4NTY0NTQ3Njg1Ij4ixo9sw6dhdMSxbWzEsWzEsXEgYWt0aXZsyZnFn2RpcmlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYWNjZXNzaWJpbGl0eV9jYW5jZWxlZCIgbXNnaWQ9IjM4MzM5MjMyNTc5NjY2MzU2NzMiPiJHaXJpxZ8gaW1rYW7EsSBsyZnEn3YgZWRpbGliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4iQ2FyaSBpc3RpZmFkyZnDp2kgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im93bmVyX25hbWUiIG1zZ2lkPSIyNzE2NzU1NDYwMzc2MDI4MTU0Ij4iU2FoaWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IljJmXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX25vX3Jlc3RyaWN0ZWRfYWNjb3VudHMiIG1zZ2lkPSI1NzM5NDYzMjQ5NjczNzI3NzM2Ij4iQnUgdMmZdGJpcSBtyZloZHVkIHByb2ZpbGzJmXIgw7zDp8O8biBoZXNhYmxhcsSxIGTJmXN0yZlrbMmZbWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub3RfZm91bmQiIG1zZ2lkPSIzNDI5MTQxODUzNDk4OTI3Mzc5Ij4iQnUgyZltyZlsaXl5YXTEsSBpZGFyyZkgZXRtyZlrIMO8w6fDvG4gaGXDpyBiaXIgdMmZdGJpcSB0YXDEsWxtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXZva2UiIG1zZ2lkPSI1NDA0NDc5MTg1MjI4MjcxNTg2Ij4iTMmZxJ92IGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EwIiBtc2dpZD0iNzg3NTQyNzQ4OTQyMDgyMTc5MyI+IklTTyBBMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEiIG1zZ2lkPSIzNzYwNzM0NDk5MDUwODc1MzU2Ij4iSVNPIEExIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMiIgbXNnaWQ9IjU5NzMyNjYzNzgwMjAxNDQzODIiPiJJU08gQTIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EzIiBtc2dpZD0iMTM3MzQwNzEwNTY4NzMwMDg4NCI+IklTTyBBMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTQiIG1zZ2lkPSI2Njg5NzcyODA3OTgyNTk3MjU0Ij4iSVNPIEE0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNSIgbXNnaWQ9IjUzNTM1NDk2NTIwMTU3NDEwNDAiPiJJU08gQTUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E2IiBtc2dpZD0iODU4NTAzODA0ODY3NDkxMTkwNyI+IklTTyBBNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTciIG1zZ2lkPSI2NjQxODM2NzE2OTYzODM5MTE5Ij4iSVNPIEE3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOCIgbXNnaWQ9Ijc1NzExMzk0Mzc0NjU2OTMzNTUiPiJJU08gQTgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E5IiBtc2dpZD0iMTM3ODQ1NTg5MTk1NzExNTA3OSI+IklTTyBBOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEwIiBtc2dpZD0iMjQ4MDc0NzQ1NzQyOTQ3NTM0NCI+IklTTyBBMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IwIiBtc2dpZD0iMzk2NTkzNTA5NzY2MTEwODAzOSI+IklTTyBCMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEiIG1zZ2lkPSIyNTA1NzUzMjg1MDEwMTE1NDM3Ij4iSVNPIEIxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMiIgbXNnaWQ9Ijg3NjM4NzQ3MDk4NTk0NTg0NTMiPiJJU08gQjIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IzIiBtc2dpZD0iNDIxMDUwNjY4ODE5MTc2NDA3NiI+IklTTyBCMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjQiIG1zZ2lkPSI1NzQ5NDA0MTY1ODg4NTI2MDM0Ij4iQjQgSVNPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNSIgbXNnaWQ9Ijc2NDA2Mjc0MTQ2MjE5MDQ3MzMiPiJJU08gQjUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I2IiBtc2dpZD0iNzM0Mjk4ODg2NDcxMjc0ODU0NCI+IklTTyBCNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjciIG1zZ2lkPSI1MDY5ODQ0MDY1MjM1MzgyNDI5Ij4iSVNPIEI3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOCIgbXNnaWQ9IjczMTY4MTg5MjIyNzg3Nzk3NzQiPiJJU08gQjgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I5IiBtc2dpZD0iNTQxNDcyNzA5NDAyNjUzMjM0MSI+IklTTyBCOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEwIiBtc2dpZD0iNTI1MTI1MzczMTgzMjA0ODE4NSI+IklTTyBCMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MwIiBtc2dpZD0iNDAwMzEzODM0MjY3MTk2NDIxNyI+IklTTyBDMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEiIG1zZ2lkPSIxOTM1MTg4MDYzMzkzNTUzMDA4Ij4iSVNPIEMxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMiIgbXNnaWQ9IjMxOTczMDc5Njk3MTIwNjk5MDQiPiJJU08gQzIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MzIiBtc2dpZD0iNDMzNTgyNjA4NzMyMTkxMzUwOCI+IklTTyBDMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzQiIG1zZ2lkPSIzNzQ1NjM5NTk4MjgxMDE1MDA1Ij4iSVNPIEM0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNSIgbXNnaWQ9IjgyNjk0NTc3NjU4MjI3OTEwMTMiPiJJU08gQzUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M2IiBtc2dpZD0iNTY2NjY2MTA1MjYwMzQ2OTMwIj4iSVNPIEM2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNyIgbXNnaWQ9Ijg2Nzg0MTMxODA3ODI2MDg0OTgiPiJJU08gQzciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M4IiBtc2dpZD0iODM5MjM3NjIwNjYyNzA0MTczMCI+IklTTyBDOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzkiIG1zZ2lkPSI5MTkxNjEzMzcyMzI0ODQ1NDA1Ij4iSVNPIEM5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMTAiIG1zZ2lkPSI3MzI3NzA5Njk5MTg0OTIwODIyIj4iSVNPIEMxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZXR0ZXIiIG1zZ2lkPSI0MTkxODA1NjE1ODI5NDcyOTUzIj4iTcmZa3R1YiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9ndnJubXRfbGV0dGVyIiBtc2dpZD0iNzg1MzM4MjE5MjY0OTQwNTUwNyI+IkjDtmt1bcmZdCBNyZlrdHVidSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWdhbCIgbXNnaWQ9IjY2OTc5ODI5ODgyODM4MjMxNTAiPiJIw7xxdXFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2p1bmlvcl9sZWdhbCIgbXNnaWQ9IjM3Mjc3NDM5Njk5MDI3NTg5NDgiPiJLacOnaWsgSMO8cXVxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2xlZGdlciIgbXNnaWQ9IjI4MTg3MTQ2NDg5NjYwMTIzNiI+IlFvdmx1cSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV90YWJsb2lkIiBtc2dpZD0iNTc3NTk2NjQxNjMzMzU3ODEyNyI+IlHEsXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id3JpdGVfZmFpbF9yZWFzb25fY2FuY2VsbGVkIiBtc2dpZD0iNzA5MTI1ODM3ODEyMTYyNzYyNCI+IkzJmcSfdiBlZGlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5ub3Rfd3JpdGUiIG1zZ2lkPSI4MTMyNTA1NDE3OTM1MzM3NzI0Ij4iS29udGVudCB5YXptbmEgeMmZdGFzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjYwNDg5MTM4ODAxODQ2MjgxMTkiPiJuYW3JmWx1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9hZG1pbl9waW4iIG1zZ2lkPSI3ODM2NDM3MzE4OTUxNDM5NzAiPiJBZG1pbmlzdHJhdG9yIFBJTiBrb2R1bnUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9waW4iIG1zZ2lkPSIzMzk1OTUzNDIxMzY4NDc2MTAzIj4iUElOIGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5faW5jb3JyZWN0IiBtc2dpZD0iODU3MTUxMjAwMzk1NTA3NzkyNCI+IlPJmWh2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX29sZF9waW4iIG1zZ2lkPSIxNDYyMjA2MjI1NTEyOTEwNzU3Ij4iQ2FyaSBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfbmV3X3BpbiIgbXNnaWQ9IjU5NTk2MDY2OTE2MTk5NTkxODQiPiJZZW5pIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jb25maXJtX3BpbiIgbXNnaWQ9Ijg1MDE1MjM4Mjk2MzMxNDYyMzkiPiJZZW5pIFBJTlwnaSB0yZlzZGlxIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY3JlYXRlX3BpbiIgbXNnaWQ9IjgwMTc2MDAwMDAyNjM0NTAzMzciPiJEyZl5acWfbcmZIG3JmWhkdWRpeXnJmXRsyZlyaSDDvMOnw7xuIFDEsE4geWFyYWTEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfZG9lc250X21hdGNoIiBtc2dpZD0iMjIyNDIxNDE5MDkwNjk5NDU0OCI+IlDEsE4gdXnEn3VuIGfJmWxtaXIuIFllbmlkyZluIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX3Rvb19zaG9ydCIgbXNnaWQ9IjgxNzM5ODI3NTYyNjU3Nzc3OTIiPiJQxLBOIMOnb3ggccSxc2FkxLFyLiDGj24gYXrEsSA0IHLJmXHJmW0gb2xtYWzEsWTEsXIuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJyZXN0cl9waW5fY291bnRkb3duIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzExMDUwOTk1MTk4NTQ4Njc1Ij4iMSBzYW5pecmZIHNvbnJhIHTJmWtyYXIgeW94bGF5xLFuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSBzb25yYSB0yZlrcmFyIHlveGxhecSxbiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJEYWhhIHNvbnJhIHllbmlkyZluIHlveGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0cmFuc2llbnRfbmF2aWdhdGlvbl9jb25maXJtYXRpb24iIG1zZ2lkPSI0OTA3ODQ0MDQzNjExMTIzNDI2Ij4iUGFuZWxpIGfDtnN0yZlybcmZayDDvMOnw7xuIGVrcmFuxLFuIGvDvG5jw7xuw7wgc8O8csO8xZ9kw7xyw7xuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHJhbnNpZW50X25hdmlnYXRpb25fY29uZmlybWF0aW9uX2xvbmciIG1zZ2lkPSI4MDYxNjg1OTIwNTA4MDg2Njk3Ij4iU2lzdGVtIHBhbmVsaW5pIGfDtnN0yZlybcmZayDDvMOnw7xuIGVrcmFuxLFuIGvDvG5jw7xuZMmZbiBzw7xyw7zFn2TDvHLDvG4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTc5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTU4NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJieXRlU2hvcnQiIG1zZ2lkPSI4MzQwOTczODkyNzQyMDE5MTAxIj4iQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtpbG9ieXRlU2hvcnQiIG1zZ2lkPSI1OTczNzg5NzgzNTA0NzcxODc4Ij4iS0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWdhYnl0ZVNob3J0IiBtc2dpZD0iNjM1NTg1MTU3Njc3MDQyODkyMiI+Ik1CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2lnYWJ5dGVTaG9ydCIgbXNnaWQ9IjMyNTk4ODI0NTUyMTIxOTMyMTQiPiJHQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRlcmFieXRlU2hvcnQiIG1zZ2lkPSIyMzE2MTMwMTgxNTkxODY5NjIiPiJUQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBldGFieXRlU2hvcnQiIG1zZ2lkPSI1NjM3ODE2NjgwMTQ0OTkwMjE5Ij4iUEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaWxlU2l6ZVN1ZmZpeCIgbXNnaWQ9IjkxNjQyOTI3OTE1MDA1MzE5NDkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRzPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IkJhxZ9sxLFxc8SxeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzIiBtc2dpZD0iNzg5OTgyOTUxNjA0ODgxMzIzNyI+Ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzX3R3b19kb3RzIiBtc2dpZD0iMTIyODA3ODk5NDg2NjAzMDczNiI+IuKApSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5UGhvbmVOdW1iZXIiIG1zZ2lkPSI3Njk0MDYzMDQyMDc5Njc2NTE3Ij4iKFRlbGVmb24gbsO2bXLJmXNpIHlveGR1cikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIoTmFtyZlsdW0pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdFZvaWNlTWFpbEFscGhhVGFnIiBtc2dpZD0iMjY2MDAyMDk5MDA5NzczMzA3NyI+IlPJmXNsaSBwb8OndCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRNc2lzZG5BbHBoYVRhZyIgbXNnaWQ9IjI4NTA4ODk3NTQ5MTk1ODQ2NzQiPiJNU0lTRE4xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pRXJyb3IiIG1zZ2lkPSI1MTU0NDk5NDU3NzM5MDUyOTA3Ij4iQmHEn2xhbnTEsSBwcm9ibGVtaSB2yZkgeWEgeWFsbsSxxZ8gTU0ga29kdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlGZG5FcnJvciIgbXNnaWQ9IjUyMjQzOTgyMTYzODUzMTY0NzEiPiLGj23JmWxpeXlhdCB5YWxuxLF6IHNhYml0IG7Dtm1yyZlsyZlyyZkgecSxxJ/EsW1sYSBtyZloZHVkbGHFn8SxYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZCIgbXNnaWQ9IjgxNDcyNzgzNDY0MTQ3MTQzMTUiPiJTZXJ2aXMgacWfyZkgc2FsxLFuZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkRm9yIiBtc2dpZD0iNjg1NjIyODE0MDQ1MzQ3MTA0MSI+IlhpZG3JmXQgYWt0aXYgZWRpbG1pxZ9kaXI6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZURpc2FibGVkIiBtc2dpZD0iMTkzNzU1MzIyNjU5MjUxNjQxMSI+IlhpZG3JmXQgZGVha3RpdiBlZGlsaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZVJlZ2lzdGVyZWQiIG1zZ2lkPSI2Mjc1MDE5MDgyNTk4MTAyNDkzIj4iUWV5ZGl5eWF0IHXEn3VybHUgb2xkdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRXJhc2VkIiBtc2dpZD0iMTI4ODU4NDY5NTI5NzIwMDk3MiI+IlNpbGlubcmZIHXEn3VybHUgb2xtdcWfZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkSW5jb3JyZWN0IiBtc2dpZD0iNzYxMjIwODgzOTQ1MDEyODcxNSI+IllhbmzEscWfIHBhcm9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4iTU1JIHRhbWFtZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4iRGF4aWwgZXRkaXlpbml6IGvDtmhuyZkgUMSwTiBkw7x6Z8O8biBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4iRGF4aWwgZXRkaXlpbml6IFBVSyBkw7x6Z8O8biBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IkRheGlsIGV0ZGl5aW5peiBQxLBOIGtvZGxhciB1ecSfdW4gZ8mZbG1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUGluIiBtc2dpZD0iMzg1MDAxODQ0NTE4NzQ3NTM3NyI+IjQtZMmZbiA4LcmZIHHJmWTJmXIgcsmZccmZbWkgb2xhbiBQSU4geWF6xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iOCB2yZkgZGFoYSDDp294IHLJmXHJmW1pIG9sYW4gUFVLIHlhesSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iU2l6aW4gU8SwTSBrYXJ0IFBVSyBpbMmZIGtpbGlkbMmZbmliLiBPbnUgYcOnbWFxIMO8w6fDvG4gUFVLIGtvZHUgeWF6xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNJTSBrYXJ0xLFuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIFBVSzIgeWF6xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJEYXhpbCBvbGFuIHrJmW5nIGVkyZluaW4gSURcJ3NpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ2xpck1taSIgbXNnaWQ9Ijc3ODQ2NzM2NzM0NDY4MzMwOTEiPiJHZWTJmW4gWsmZbmcgSUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDZk1taSIgbXNnaWQ9IjUxMjMyMTg5ODkxNDE1NzM1MTUiPiJayZluZyB5w7ZubMmZbmRpcm3JmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+IlrJmW5nIGfDtnpsyZl5aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJCYU1taSIgbXNnaWQ9IjQ1NTE5MzA2NzkyNjc3MDU4MSI+IlrJmW5nIHFhZGHEn2FzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQd2RNbWkiIG1zZ2lkPSI3MDQzNzE1Njg3OTA1MjU0MTk5Ij4iUGFyb2x1IGTJmXlpxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQaW5NbWkiIG1zZ2lkPSIzMTEzMTE3NzgwMzYxMTkwMzA0Ij4iUMSwTiBkyZl5acWfbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuaXBNbWkiIG1zZ2lkPSIzMTEwNTM0NjgwNTU3ODU3MTYyIj4iSGF6xLFyZGFrxLEgbsO2bXLJmXnJmSB6yZluZyBlZGlsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+IlrJmW5nbMmZcmluIHNhecSxIG3JmWhkdWRsYcWfZMSxcsSxbMSxYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlRocmVlV0NNbWkiIG1zZ2lkPSI5MDUxMDQ3MTcwMzIxMTkwMzY4Ij4iw5zDpyB5b2xsdSB6yZluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJ1YWNNbWkiIG1zZ2lkPSI3ODI3ODg3NDU5MTM4MzA4ODg2Ij4iWG/Fn2FnyZlsbcmZeiB6yZluZ2zJmXJkyZluIGltdGluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuZE1taSIgbXNnaWQ9IjMxMTY0NDYyMzcwODE1NzU4MDgiPiLDh2F0ZMSxcsSxbG1hIHrJmW5naSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkRuZE1taSIgbXNnaWQ9IjEyNjU0Nzg5MzI0MTgzMzQzMzEiPiJOYXJhaGF0IGV0bcmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT24iIG1zZ2lkPSI0Mjk0MTU0MDkxNDU3ODE5MjMiPiJBZMmZdMmZbiB6yZluZyBlZMmZbmluIElEXCdzaSBtyZloZHVkbGHFn2TEsXLEsWzEsXIuIE7DtnZiyZl0aSB6yZluZzogTcmZaGR1ZGxhxZ9kxLFyxLFsxLFiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT2ZmIiBtc2dpZD0iMzA5MjkxODAwNjA3Nzg2NDYyNCI+IkFkyZl0yZluIHrJmW5nIGVkyZluaW4gSURcJ3NpIG3JmWhkdWRsYcWfZMSxcsSxbMSxci4gTsO2dmLJmXRpIHrJmW5nOiBNyZloZHVkbGHFn2TEsXLEsWxtYXnEsWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT24iIG1zZ2lkPSI2MTc5NDI1MTgyODU2NDE4NDY1Ij4iQWTJmXTJmW4gesmZbmcgZWTJmW5pbiBJRFwnc2kgbcmZaGR1ZGxhxZ9kxLFyxLFsbcSxci4gTsO2dmLJmXRpIHrJmW5nOiBNyZloZHVkbGHFn2TEsXLEsWzEsWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT2ZmIiBtc2dpZD0iMjU2Nzk5ODYzMzEyNDQwODU1MiI+IkFkyZl0yZluIHrJmW5nIGVkyZluaW4gSURcJ3NpIG3JmWhkdWRsYcWfZMSxcsSxbG3EsXIuIE7DtnZiyZl0aSB6yZluZzogTcmZaGR1ZGxhxZ9kxLFyxLFsbWF5xLFiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZU5vdFByb3Zpc2lvbmVkIiBtc2dpZD0iODYxNDgzMDE4MDUwODY4NjY2NiI+IlhpZG3JmXQgdMmZbWluIGVkaWxtyZl5aWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUlBlcm1hbmVudCIgbXNnaWQ9IjMzNzczNzExNDU5MjY4MzU2NzEiPiJTaXogesmZbmcgZWTJmW5pbiBJRCBuaXphbWxhcsSxbsSxIGTJmXlpxZ/JmSBiaWxtyZl6c2l6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRDaGFuZ2VkVGl0bGUiIG1zZ2lkPSI1NTkyMTg5Mzk4OTU2MTg3NDk4Ij4iTcmZaGR1ZGxhxZ9kxLFyxLFsbcSxxZ8ga2XDp2lkIGTJmXlpxZ9kaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkRhdGEiIG1zZ2lkPSI4NjUzNzk0Nzg0NjkwMDY1NTQwIj4iRGF0YSB4aWRtyZl0IGJhxJ9sxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkVtZXJnZW5jeSIgbXNnaWQ9IjY1ODExNjM3NzkwNzI4MzM2NjUiPiJUyZljaWxpIHhpZG3JmXQgYmHEn2zEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uTm9ybWFsIiBtc2dpZD0iNDk1Mzg2NzAxMTM4OTc1MDY3MyI+IlPJmXMgeGlkbcmZdGkgYmHEn2zEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsVm9pY2UiIG1zZ2lkPSIzMzk2OTYzNjUyMTA4MTUxMjYwIj4iQsO8dMO8biBTyZlzIHhpZG3JmXRsyZlyaSBiYcSfbMSxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblNtcyIgbXNnaWQ9IjgzMTQzNTIzMjc0NjE2Mzg4OTciPiJTTVMgeGlkbcmZdGkgYmxva2xhbsSxYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZURhdGEiIG1zZ2lkPSI5OTY2MzY0ODcxMDYxNzEzMjAiPiJTyZlzL2RhdGEgeGlkbcmZdGzJmXJpIGJsb2tsYW7EsWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VTbXMiIG1zZ2lkPSIxODg4NTg4MTUyNzkyMDIzODczIj4iU8mZcy9TTVMgeGlkbcmZdGzJmXJpIGJsb2tsYW7EsWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsIiBtc2dpZD0iNTY0MzAyODI2NDQ2NjA5MjgyMSI+IkLDvHTDvG4gc8mZcy9kYXRhL1NNUyB4aWRtyZl0bMmZcmkgYmHEn2zEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4iU8mZcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGEiIG1zZ2lkPSI4NzI0NTY3ODIwNzc5Mzc4OTMiPiJNyZlsdW1hdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0ZBWCIgbXNnaWQ9IjU1NjY2MjQ5OTg4NDA0ODY0NzUiPiJGQUtTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzU01TIiBtc2dpZD0iMjAxNTQ2MDM3MzcwMTUyNzQ4OSI+IlNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFBc3luYyIgbXNnaWQ9IjQ1MjM0NTQ3ODM0OTg1NTE0NjgiPiJBc3luYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFTeW5jIiBtc2dpZD0iNzUzMDAwMDUxOTY0NjA1NDc3NiI+IlNpbngiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQYWNrZXQiIG1zZ2lkPSI2OTkxMDA2NTU3OTkzNDIzNDUzIj4iUGFrZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQQUQiIG1zZ2lkPSIzMjM1MjU5MDg1NjQ4MjcxMDM3Ij4iUEFEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQwIiBtc2dpZD0iNzE3MDMzNTQ3MjE5ODY5NDk0NSI+IlJvbWlucSBnw7ZzdMmZcmljaXNpIGnFn2zJmWtkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEiIG1zZ2lkPSI1MzE0ODYxNTE5NzUyNTM4OTIyIj4iUm9taW5xIGfDtnN0yZlyaWNpc2kgacWfbMmZayBkZXlpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MiIgbXNnaWQ9Ijg5Njk5MjkwNDkwODEyNjgxMTUiPiJSb21pbnEgZ8O2c3TJmXJpY2lzaSB5YW7EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDMiIG1zZ2lkPSI1MTQ4MjU1MDI3MDQzOTQzMzE3Ij4iUW9uxZ91bHVxZGFuIEvJmW5hciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NCIgbXNnaWQ9Ijg4MDg0NTY2ODI1NTA3OTY1MzAiPiJCaW5hZGFuIGvJmW5hciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NSIgbXNnaWQ9Ijc2MDQwNjMyNTI4NTAzNTQzNTAiPiJSb21pbnEgLSBBcnp1b2x1bmFuIHNpc3RlbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NiIgbXNnaWQ9IjIwNTk0NDA4MjU3ODI4NzE1MTMiPiJSb21pbnEgLSBNw7xta8O8biBzaXN0ZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDciIG1zZ2lkPSI3MTEyMDc4NzI0MDk3MjMzNjA1Ij4iUm9taW5xIC0gQWx5YW5zIHBhcnRueW9ydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OCIgbXNnaWQ9IjU5ODk1Njk3Nzg2MDQwODkyOTEiPiJSb21pbnEgLSBQcmVtaXVtIHBhcnRueW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ5IiBtc2dpZD0iNzk2OTI5NjgxMTM1NTE1MjQ5MSI+IlJvdW1pbnEgLSBUYW0gWGlkbcmZdCBGdW5rc2lvbmFsbMSxxJ/EsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTAiIG1zZ2lkPSIzOTkyOTA2OTk5ODE1MzE2NDE3Ij4iUm91bWlucSAtIFFpc23JmW4gWGlkbcmZdCBGdW5rc2lvbmFsbMSxxJ/EsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTEiIG1zZ2lkPSI0MTU0NDc2ODU0NDI2OTIwOTcwIj4iUm91bWlucSBCYW5uZXJpIEHDp8SxcWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEyIiBtc2dpZD0iMTE4OTA3MTExOTk5MjcyNjMyMCI+IlJvYW1pbmcgQmFubmVyIE9mZiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0U2VhcmNoaW5nIiBtc2dpZD0iODM2MDE0MTg4NTk3MjI3OTk2MyI+IlhpZG3JmXQgYXh0YXLEsWzEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlTm90Rm9yd2FyZGVkIiBtc2dpZD0iMTY4MzY4NTg4Mzg0MTI3MjU2MCI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBZw7ZubMmZbmRpcmlsbcmZZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkIiBtc2dpZD0iMTMwMjkyMjExNzQ5ODU5MDUyMSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkVGltZSIgbXNnaWQ9IjkyMDYyNTE3MzY1MjcwODUyNTYiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJUSU1FX0RFTEFZIj57Mn08L3hsaWZmOmc+IHNhbml5yZkgc29ucmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlUmVnaXN0ZXJlZCIgbXNnaWQ9IjUwNzMyMzc4Mjc2MjAxNjYyODUiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogWcO2bmzJmW5kaXJpbG3JmWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWRUaW1lIiBtc2dpZD0iNjc4MTYyMTk2NDMyMDYzNTE3MiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBZw7ZubMmZbmRpcmlsbcmZZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmY0NvbXBsZXRlIiBtc2dpZD0iMzExODg0ODIzMDk2Njg4NjU3NSI+IsOWesmZbGxpayBrb2R1IHRhbWFtbGFuZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZjRXJyb3IiIG1zZ2lkPSIzMzI3NTYwMTI2NTg4NTAwNzc3Ij4ixo9sYXHJmSBwcm9ibGVtaSB2yZkgeWEgeWFubMSxxZ8gZnVua3NpeWEga29kdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JPayIgbXNnaWQ9IjExOTE5MTkzNzgwODM0NzIyMDQiPiJPSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvciIgbXNnaWQ9Ijc5NTYzOTI1MTExNDY2OTg1MjIiPiLFnsmZYsmZa8mZIHjJmXRhc8SxIHZhciBpZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yTG9va3VwIiBtc2dpZD0iNDcxMTY4NzQ1NjExMTk2MzE2MyI+IlVSTCB0YXDEsWxhIGJpbG3JmWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiJTYXl0IGF1dGVudGlmaWthc2l5YSBzeGVtaSBkyZlzdMmZa2zJmW5taXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQXV0aCIgbXNnaWQ9IjE0MzUwNjU2Mjk0MzgwNDQ1MzQiPiJUyZlzZGlxIGVkaWzJmSBiaWxtyZlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JQcm94eUF1dGgiIG1zZ2lkPSIxNzg4MjA3MDEwNTU5MDgxMzMxIj4iUHJva3NpIHNlcnZlciB2YXNpdMmZc2lsyZkgdMmZc2RpcWzJmW5tyZkgdcSfdXJzdXogb2xkdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JDb25uZWN0IiBtc2dpZD0iODcxNDI3MzIzNjM2NDY0MDU0OSI+IlNlcnZlcsmZIHFvxZ91bGEgYmlsbcmZZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9ySU8iIG1zZ2lkPSIyMzQwNTU4MTk3NDg5MzAyMTg4Ij4iU2VydmVybMmZIMmZbGFxyZkgYWzEsW5tYWTEsS4gU29ucmEgY8mZaGQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUaW1lb3V0IiBtc2dpZD0iNDc0MzQwMzcwMzc2Mjg4Mzk1NCI+IlNlcnZlciBpbMmZIG9sYW4gyZlsYXHJmSB6YW1hbiBhxZ/EsW3EsW5hIG3JmXJ1eiBxYWxkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUmVkaXJlY3RMb29wIiBtc2dpZD0iODY3OTU5NjA5MDM5Mjc3OTUxNiI+IkJ1IHPJmWhpZsmZZMmZIGjJmWRkaW5kyZluIMOnb3ggc2VydmVyIHnDtm5syZluZGlyaWxtyZlsyZlyaSB2YXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRTY2hlbWUiIG1zZ2lkPSI1MDE1NzMwODEyOTA2MTkyMjA4Ij4iUHJvdG9rb2wgZMmZc3TJmWtsyZlubWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZhaWxlZFNzbEhhbmRzaGFrZSIgbXNnaWQ9Ijk2NTQ5NjA2MDAwNjU4NjQxIj4iR8O8dsmZbmxpIGJhxJ9sYW50xLEgeWFyYWTEsWxhIGJpbG3JmWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckJhZFVybCIgbXNnaWQ9IjM2MzY5Mjk3MjI3Mjg4ODE5NzIiPiJVUkwgeWFubMSxxZ8gb2xkdcSfdSDDvMOnw7xuIHPJmWhpZsmZbmkgYcOnbWFxIG3DvG1rw7xuIG9sbWFkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiJGYXlsYSBnaXJpxZ8gYmHFnyB0dXRtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlTm90Rm91bmQiIG1zZ2lkPSI2MjAzODU2NjEyMDQyNjU1MDg0Ij4iVMmZbMmZYiBvbHVuYW4gZmF5bCB0YXDEsWxtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUb29NYW55UmVxdWVzdHMiIG1zZ2lkPSIxMjM1Mzk2OTI3MDg3MTg4MjUzIj4iSMmZZGRpbmTJmW4gw6dveCBzb3LEn3UgacWfbMmZbmlsaXIuIERhaGEgc29ucmEgeW94bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg5Njc3MTAwMjUwMzYxNjM4MjIiPiI8eGxpZmY6ZyBpZD0iQUNDT1VOVCI+JTEkczwveGxpZmY6Zz4gw7zDp8O8biBnaXJpxZ8geMmZdGFzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVN5bmMiIG1zZ2lkPSI4MzUzNTIzMDYwMjY5MzM1NjY3Ij4iU2lueHJvbmxhxZ9kxLFybWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVN5bmNOb3RpZmljYXRpb25UaXRsZSIgbXNnaWQ9IjM5Nzc0MzM0OTE5MTkwMTQ1OCI+IlNpbnhyb25sYcWfZMSxcm1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VUb29NYW55RGVsZXRlc05vdGlmaWNhdGlvbkRlc2MiIG1zZ2lkPSI4MTAwOTgxNDM1MDgwNjk2NDMxIj4iSMmZZGRpbmTJmW4gw6dveCA8eGxpZmY6ZyBpZD0iQ09OVEVOVF9UWVBFIj4lczwveGxpZmY6Zz4gc2lsaW5tyZlsyZlyaSB2YXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjQ5NDAxOTIzNDEwMjE1NDg5NiI+IlBsYW7Fn2V0aW4geWFkZGHFn8SxIGRvbHVkdXIuIEJvxZ8geWVyIMO8w6fDvG4gYsmZemkgZmF5bGxhcsSxIHNpbGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDc1OTk5Mjg2NjgwMDAwNTQxIj4iVGVsZWZvbnVuIHlhZGRhxZ/EsSBkb2x1ZHVyLiBCb8WfIHllciDDvMOnw7xuIGLJmXppIGZheWxsYXLEsSBzaWxpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZSIgbXNnaWQ9IjY1NDU2OTYwMDc2MzE0MDQyOTIiPiJNyZluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTQ1MzUxNDIwODY1MjAyODUzIj4iUGxhbsWfZXQgc2XDp2ltbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzE5OTE5MDc1NDYzOTg4NjM4Ij4iVGVsZWZvbiBzZcOnaW1syZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlIiBtc2dpZD0iNzE2NzcwMzM4OTgwMjYxODY2MyI+IlPJmXNzaXogcmVqaW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXJuX29uX3JhZGlvIiBtc2dpZD0iMzkxMjc5MzA5MjMzOTk2MjM3MSI+IlNpbXNpemkgacWfyZkgc2FsxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHVybl9vZmZfcmFkaW8iIG1zZ2lkPSI4MTk4Nzg0OTQ5OTg3MDYyMzQ2Ij4iU2ltc2l6IHJhYml0yZluaSBzw7ZuZMO8csO8biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9sb2NrIiBtc2dpZD0iNzk5MDk0NjU1NDk2MDk4MTUzIj4iRWtyYW4ga2lsaWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfb2ZmIiBtc2dpZD0iNDI2NjYxNDEwNzQxMjg2NTA0OCI+IlPDtm5kw7xyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfc2lsZW50IiBtc2dpZD0iMzE5Mjk4MTYzMDE4NDczMDc4Ij4iWsmZbmcgZGVha3RpdmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3ZpYnJhdGUiIG1zZ2lkPSI3MDcyMDQzMzg4NTgxNTUxMzk1Ij4iWsmZbmcgdmlicmFzaXlhZGFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfcmluZyIgbXNnaWQ9Ijg1OTIyNDE4MTYxOTQwNzQzNTMiPiJayZluZ3Z1cmFuIGHDp8SxcWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9wcm9ncmVzcyIgbXNnaWQ9IjIyODEwNzkyNTczMjk5ODEyMDMiPiJTw7ZuZMO8csO8bMO8ci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMzODU3NDUxNzk1NTU3MzE0NzAiPiJQbGFuxZ9ldGluaXogc8O2bsmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQ5NzkyMTc1MjQyODIxMzUzIj4iVGVsZWZvbnVudXogc8O2bsmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+IlPDtm5kw7xybcmZayBpc3TJmXlpcnNpej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfdGl0bGUiIG1zZ2lkPSI3MDU0NTA5OTE0NTAwMTQwMzYxIj4iVMmZaGzDvGvJmXNpeiByZWppbWTJmSB5ZW5pZMmZbiBiYcWfbGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX2NvbmZpcm0iIG1zZ2lkPSI1NTI5Mzk0NDUwMjc4NDY2OCI+IlTJmWhsw7xryZlzaXogcmVqaW1kyZkgeWVuaWTJmW4gYmHFn2xhbWFxIGlzdMmZeWlyc2luaXogbWk/IEJ1LCBxdXJhxZ9kxLFyZMSxxJ/EsW7EsXogYsO8dMO8biDDvMOnw7xuY8O8IHTJmXLJmWYgdMmZdGJpcWzJmXJpbmkgZGVha3RpdiBlZMmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRfdGFza3NfdGl0bGUiIG1zZ2lkPSIzNjkxNzY0NjIzNjM4MTI3ODg4Ij4iU29uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+Ikhlw6cgYmlyIHNvbiB0yZl0YmlxIHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDA4NDc3MTQwMDg4MDUzNjY1Ij4iUGxhbsWfZXQgc2XDp2ltbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiJUZWxlZm9uIHNlw6dpbWzJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+IkVrcmFuIGtpbGlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fcG93ZXJfb2ZmIiBtc2dpZD0iNDQ3MTg3OTQ0MDgzOTg3OTcyMiI+IlPDtm5kw7xyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9idWdfcmVwb3J0IiBtc2dpZD0iNzkzNDAxMDU3ODkyMjMwNDc5OSI+IkJhcSBoZXNhYmF0xLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdGl0bGUiIG1zZ2lkPSIyNjY3NDk0ODAzNzQyNTQ4NTMzIj4iQmFxxLEgeMmZYsmZciB2ZXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9tZXNzYWdlIiBtc2dpZD0iMzk4NDQ3MDQ4NzUwMzUwNDU2Ij4iQnUsIHNpemluIGhhesSxcmvEsSBjaWhheiBkdXJ1bXUgaGFxccSxbmRhIG3JmWx1bWF0IHRvcGxheWFjYXEga2ksIGVsZWt0cm9uIG3JmWt0dWIgxZ/JmWtsaW5kyZkgZ8O2bmTJmXJzaW4uIEJhcSByYXBvcnR1bmEgYmHFn2xhbWFxIMO8w6fDvG4gYmlyIGF6IHZheHQgbGF6xLFtIG9sYSBiaWzJmXIsIGJpciBheiBzyZliciBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fdG9nZ2xlX3NpbGVudF9tb2RlIiBtc2dpZD0iODIxOTUyNTM0NDI0NjgxMDkyNSI+IlPJmXNzaXogcmVqaW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjMyODk4NDE5MzcwMDM3NTg4MDYiPiJTyZlzIHFhcGFsxLFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iMTUwNjA0NjU3OTE3NzA2NjQxOSI+IlPJmXMgQWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc190b2dnbGVfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjU4ODQzMzAzMDY5MjYzMDc0NTYiPiJUyZl5eWFyyZkgcmVqaW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIyNzE5NTU3OTgyNjA4OTE5NzUwIj4iVcOndcWfIHJlamltaSBhw6fEsXFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iNTA3NTA3MDQ0Mjg1NDQ5MDI5NiI+IlTJmXl5YXLJmSByZWppbWkgcWFwYWzEsWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJUyZlobMO8a8mZc2l6IHJlamltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCBzaXN0ZW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Nvc3RNb25leSIgbXNnaWQ9IjU0Mjk4MDgyMTc4NjE0NjA0MDEiPiLDlmTJmW5pxZ9saSB4aWRtyZl0bMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+IljJmXJjIHR1dHVsYWNhcSDJmW3JmWxpeXlhdGxhciBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21lc3NhZ2VzIiBtc2dpZD0iNzUyMTI0OTE0ODQ0NTQ1NjY2MiI+IlNpemluIG1lc2FqbGFyxLFuxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19tZXNzYWdlcyIgbXNnaWQ9Ijc4MjE5OTkwNzEwMDM2OTkyMzYiPiJTTVMsIGVsZWt0cm9uIHBvw6d0IHbJmSBkaWfJmXIgbWVzYWpsYXLEsSBveHV5dXIgdsmZIHlhesSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfcGVyc29uYWxJbmZvIiBtc2dpZD0iMzUxOTE2MzE0MTA3MDUzMzQ3NCI+IsWeyZl4c2kgbcmZbHVtYXTEsW7EsXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3BlcnNvbmFsSW5mbyIgbXNnaWQ9Ijg0MjY0NTMxMjk3ODg4NjEzMzgiPiJLb250YWt0IGthcnTEsW7EsXpkYSBzYXhsYW7EsWxhbiBtyZlsdW1hdGxhcsSxbsSxemEgYmlyYmHFn2EgZ2lyacWfLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zb2NpYWxJbmZvIiBtc2dpZD0iNTc5OTA5NjYyMzQxMjA0Mzc5MSI+IlNvc2lhbCBtyZlsdW1hdMSxbsSxeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc29jaWFsSW5mbyIgbXNnaWQ9IjcxMjk4NDI0NTc2MTE2NDM0OTMiPiJLb250YWt0bGFyxLFuxLF6IHbJmSBzb3NpYWwgyZlsYXHJmWzJmXJpbml6IGhhcXHEsW5kYSBtyZlsdW1hdGEgYmlyYmHFn2EgZ2lyacWfLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9sb2NhdGlvbiIgbXNnaWQ9IjYzNTE0OTc0MjQzNjY5MjA0OSI+IlllcmzJmcWfbcmZbml6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19sb2NhdGlvbiIgbXNnaWQ9IjU3MDQ2Nzk3NjMxMjQxNzAxMDAiPiJGaXppa2kgYWRyZXNpbml6aSBtb25pdG9yaW5xIGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX25ldHdvcmsiIG1zZ2lkPSI1ODA4OTgzMzc3NzI3MTA5ODMxIj4ixZ7JmWLJmWvJmSBrb21tdW5pa2FzaXlhc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+Ik3DvHh0yZlsaWYgxZ/JmWLJmWvJmSB4w7xzdXNpeXnJmXRsyZlyaW7JmSBkYXhpbCBvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjE1ODU0MDM1NDQxNjIxMjgxMDkiPiJCbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSI1NjI1Mjg4NTc3MTY0MjgyMzkxIj4iQmx1ZXRvb3RoIMO8esmZcmluZMmZbiBjaWhhemxhcmEgdsmZIMWfyZliyZlryZlsyZlyyZkgZGF4aWwgb2wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI4MzI5MjYxNjcwMTUxODcxMjM1Ij4iQXVkaW8gQXlhcmxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjI2NDE1MTU0MDMzNDc1NjgxMzAiPiJBdWRpbyBheWFybGFyxLEgZMmZeWnFn2luLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjYyMDkyNDY2NTM0MjQ3OTgwMzMiPiJCYXRhcmV5YXlhIHTJmXNpciBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjY0NDEyNzUzMjA2Mzg5MTY5NDciPiJCYXRhcmV5YW7EsXrEsW4gdGV6IHF1cnRhcm1hc8SxbmEgc8mZYsmZYiBvbGFuIGZ1bmtzaXlhbGFyIGlzdGlmYWTJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbGVuZGFyIiBtc2dpZD0iNTg2MzUwODQzNzc4MzY4MzkwMiI+IlTJmXF2aW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbGVuZGFyIiBtc2dpZD0iNTc3NzUzNDMxNjk4MjE4NDQxNiI+IlTJmXF2aW3JmSB2yZkgdMmZZGJpcmzJmXLJmSBiaXJiYcWfYSBnaXJpxZ8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RpY3Rpb25hcnkiIG1zZ2lkPSI0MTQ4NTk3MTI4ODQzNjQxMzc5Ij4ixLBzdGlmYWTJmcOnaSBMw7zEn8mZdGluaSBPeHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RpY3Rpb25hcnkiIG1zZ2lkPSI3OTIxMTY2MzU1OTY0NzY0NDkwIj4ixLBzdGlmYWTJmcOnaSBsw7zEn8mZdGluZMmZa2kgc8O2emzJmXJpIG94dXl1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODA5MDIzNzcwMjQzMjU3Njc4OCI+IsSwc3RpZmFkyZnDp2kgTMO8xJ/JmXRpbmkgWWF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyNzExNTYxOTk0NDk3MzYxNjQ2Ij4ixLBzdGlmYWTJmcOnaSBsw7zEn8mZdGluyZkgc8O2emzJmXIgyZlsYXbJmSBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ib29rbWFya3MiIG1zZ2lkPSIxOTQ5NTE5NjczMTAzOTY4MjI5Ij4ixo9sZsmZY2lubMmZciB2yZkgVGFyaXjDp8mZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ib29rbWFya3MiIG1zZ2lkPSI0MTY5NzcxNjA2MjU3OTYzMDI4Ij4ixo9sZsmZY2lubMmZcsmZIHbJmSBicmF1emVyIHRhcml4aW7JmSBiaXJiYcWfYSBpY2F6yZkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmljZUFsYXJtcyIgbXNnaWQ9IjYxMTc3MDQ2Mjk3Mjg4MjQxMDEiPiJayZluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNDc2OTM1NjM2MjI1MTY0MTE3NSI+IkFsYXJtIHF1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfdm9pY2VtYWlsIiBtc2dpZD0iNDE2MjIzNzE0NTAyNzU5MjEzMyI+IlPJmXNsaSBwb8OndCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfdm9pY2VtYWlsIiBtc2dpZD0iMjQ5ODQwMzk2OTg2Mjk1MTM5MyI+IlPJmXMgcG/Dp3R1bmEgYmlyYmHFn2Egw6fEsXjEscWfLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9taWNyb3Bob25lIiBtc2dpZD0iMTcxNTM5OTAwMjUwMDQzNDY0Ij4iTWlrcm9mb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21pY3JvcGhvbmUiIG1zZ2lkPSI3MTA2NjE4Mjg2OTA1NzM4NDA4Ij4iQXVkaW8geWF6bWFxIMO8w6fDvG4gbWlrcm9mb25hIGJpcmJhxZ9hIGdpcmnFny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FtZXJhIiBtc2dpZD0iNDgyMDM3MjQ5NTg5NDU4NjYxNSI+IkthbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+IsWeyZlraWwgdsmZIHlhIHZpZGVvIMOnyZlrbcmZayDDvMOnw7xuIGthbWVyYXlhIGJpcmJhxZ9hIMOnxLF4xLHFny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc2NyZWVubG9jayIgbXNnaWQ9IjgyNzU1MDAxNzMzMzA3MTgxNjgiPiJFa3JhbiBraWxpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NjcmVlbmxvY2siIG1zZ2lkPSI3MDY3NDk3MTI4OTI1NDk5NDAxIj4iQ2loYXrEsW7EsXpkYWvEsSBraWxpZCBla3JhbsSxbsSxbiBoyZlyyZlryZl0aW7JmSB0yZlzaXIgZXRtyZkgYmFjYXLEscSfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXBwSW5mbyIgbXNnaWQ9IjgwMjg3ODk3NjI2MzQxNDc3MjUiPiJUyZl0YmlxIG3JmWx1bWF0bGFyxLFuxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hcHBJbmZvIiBtc2dpZD0iMzk1MDM3ODUzODA0OTYyNTkwNyI+IkNpaGF6xLFuxLF6ZGFrxLEgZGlnyZlyIHTJmXRiaXFsyZlyaW4gZGF2cmFuxLHFn8SxbmEgdMmZc2lyIGV0bcmZayBiYWNhcsSxxJ/EsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd2FsbHBhcGVyIiBtc2dpZD0iMzg1MDI4MDE1ODA0MTE3NTk5OCI+IkRpdmFyIGthxJ/EsXrEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd2FsbHBhcGVyIiBtc2dpZD0iNTYzMDQxNzg1NDc1MDU0MDE1NCI+IkNpaGF6xLFuIGRpdmFyIGthxJ/EsXrEsSBheWFybGFyxLFuxLEgZMmZeWnFn2luLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1DbG9jayIgbXNnaWQ9IjQwNjUzNTc1OTIzNjYxMjk5MiI+IlNhYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbUNsb2NrIiBtc2dpZD0iMzk0NDM1OTgzMzYyNDA5NDk5MiI+IkNpaGF6xLFuIHZheHQgdsmZIHphbWFuIHpvbGHEn8SxbsSxIGTJmXlpxZ9pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RhdHVzQmFyIiBtc2dpZD0iMjA5NTg2MjU2ODExMzk0NTM5OCI+IlN0YXR1cyBwYW5lbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0YXR1c0JhciIgbXNnaWQ9IjYyNDI1OTM0MzIyMjY4MDcxNzEiPiJDaWhhesSxbiBzdGF0dXMgcGFuZWxpIGF5YXJsYXLEsW7EsXrEsSBkyZl5acWfaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5bmNTZXR0aW5ncyIgbXNnaWQ9IjMzNDE5OTA5ODYxNDc4MjY1NDEiPiJTaW54IEF5YXJsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3luY1NldHRpbmdzIiBtc2dpZD0iNzYwMzE5NTI2NTEyOTAzMTc5NyI+IlNpbnhyb25pemFzaXlhIG5pemFtbGFyxLFuYSDDp8SxeMSxxZ8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY291bnRzIiBtc2dpZD0iMzM1OTY0NjI5MTEyNTMyNTUxOSI+Ikhlc2FibGFyxLFuxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2NvdW50cyIgbXNnaWQ9IjQ5NDg3MzI2NDE4MjcwOTEzMTIiPiLGj2zDp2F0xLFtbMSxIGhlc2FibGFyYSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNzk5ODIxNDk2ODc5MTU5OTMyNiI+IkhhcmR3YXJlIGtvbnRyb2xsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9IjQzNTcwNTc4NjEyMjU0NjI3MDIiPiJEyZlzdMmZa2TJmWtpIGF2YWRhbmzEscSfYSBiaXJiYcWfYSBnaXJpxZ8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3Bob25lQ2FsbHMiIG1zZ2lkPSI5MDY3MTczOTg4MzI1ODY1OTIzIj4iVGVsZWZvbiB6yZluZ2zJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19waG9uZUNhbGxzIiBtc2dpZD0iNzQ4OTcwMTYyMDQ0NjE4Mzc3MCI+IlRlbGVmb24gesmZbmdsyZlyaW7JmSBuyZl6YXLJmXQgZWRpbiwgcWV5ZMmZIGFsxLFuIHbJmSBpZGFyyZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3lzdGVtVG9vbHMiIG1zZ2lkPSI0NjUyMTkxNjQ0MDgyNzE0MDQ4Ij4iU2lzdGVtIGFsyZl0bMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbVRvb2xzIiBtc2dpZD0iODE2MjEwMjYwMjE5MDczNDMwNSI+IkHFn2HEn8SxIHPJmXZpeXnJmWxpIMOnxLF4xLHFnyB2yZkgc2lzdGVtIGlkYXLJmWV0bcmZc2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSIzNDQ2MTY0NTg0NzEwNTk2NTEzIj4ixLBua2nFn2FmIGFsyZl0bMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSI3MDU4ODI4MDMyMzU4MTQyMDE4Ij4iw5Z6yZlsbGlrbMmZciB5YWxuxLF6IHTJmXRiaXEgZGV2ZWxvcGVybMmZcmkgw7zDp8O8biBsYXrEsW1kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+IkRpZ8mZciB0yZl0YmlxIMSwc3RpZmFkyZnDp2kgxLBudGVyZmV5c2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4iRGlnyZlyIHTJmXRiaXFsyZlyaW4gxLBzdGlmYWTJmcOnaSDEsG50ZXJmZXlzaW7JmSB0yZlzaXIgZWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RvcmFnZSIgbXNnaWQ9IjE5NzExMTg3NzA1NDYzMzY5NjYiPiJZYWRkYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiJVU0IgeWFkZGHFn2EgZGF4aWwgb2wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iOTIwMzMwMjIxNDkxNTM1NTc3NCI+IlNEIGthcnRhIGRheGlsIG9sLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI3OTE5MDI1NjAyMjgzNTkzOTA3Ij4ixo9sw6dhdMSxbWzEsWzEsXEgZnVua3NpeWFsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNDIwNTE5Njg4MTY3ODE0NDMzNSI+IllhcmTEsW3Dp8SxIHRleG5vbG9naXlhIHTJmWzJmWIgZWTJmSBiaWzJmWPJmXlpIGZ1bmtzaXlhbGFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzkwMTcxNzkzNjkzMDE3MDMyMCI+IlDJmW5jyZlyyZluaW4gbcmZem11bnVudSDJmWxkyZkgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzNzcyMjI1MDA4NjA1MzEwNjcyIj4ixo9sYXHJmWTJmSBvbGR1xJ91bnV6IHDJmW5jyZlyyZluaW4gbcmZem11bnVudSBuyZl6yZlyZMmZbiBrZcOnaXJpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+IlRveHVuYXJhcSBLyZnFn2YgZXQgZnVua3NpeWFzxLFuxLEgeWFuZMSxcsSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiJUb3h1bnVsYW4gaGlzc8mZbMmZciBzyZlzbMmZbmRpcmlsyZljyZlrIHbJmSBla3JhbiBqZXN0bMmZcmzJmSBpZGFyyZkgb2x1bmEgYmlsyZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE3Mzk4ODE3NjY1MjI1OTQwNzMiPiLEsG5racWfYWYgZXRtacWfIHZlYiDJmWzDp2F0xLFtbMSxbMSxxJ/EsSB5YW5kxLFyxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSI3ODgxMDYzOTYxNTA3NTExNzY1Ij4iU2tyaXB0bMmZciB0yZl0YmlxIG3JmXptdW51bnVuIGRhaGEgyZlsw6dhdMSxbWzEsSBvbG1hc8SxIMO8w6fDvG4gcXVyYcWfZMSxcsSxbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9IjIxMDM0NDAzOTE5MDI0MTIxNzQiPiJZYXpkxLHEn8SxbsSxeiBtyZl0bmkgaXpsyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJLcmVkaXQga2FydMSxIG7Dtm1yyZlsyZlyaSB2yZkgcGFyb2xsYXIga2ltaSDFn8mZeHNpIG3JmWx1bWF0bGFyIGRheGlsZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+InN0YXR1cyBwYW5lbGluaSBkZWFrdGl2bMmZxZ9kaXIgdsmZIHlhIGTJmXlpxZ9kaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iVMmZdGJpccmZIHN0YXR1cyBwYW5lbGluaSBkZWFrdGl2IGV0bcmZecmZIHbJmSB5YSBzaXN0ZW0gaWtvbmFsYXLEsW7EsSDJmWxhdsmZIGV0bcmZayB2yZkgeWEgc2lsbcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcyNDcyODE5MTEzODc5MzE0ODUiPiJzdGF0dXMgcGFuZWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcxNjExMzY2MDc5NTk3NjA2MCI+IlTJmXRiaXHJmSBzdGF0dXMgcGFuZWxpIG9sbWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSIxMTQ4MTk4Nzg1OTM3NDg5MjY0Ij4ic3RhdHVzIHBhbmVsaW5pIGdlbmnFn2zJmXRtyZlrIHbJmSB5YSB5xLHEn21hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjY5MTc1NDk0MzcxMjk0MDExMzIiPiJUyZl0YmlxyZkgc3RhdHVzIHBhbmVsaW5pIGdlbmnFn2zJmW5kaXJtyZl5yZkgdsmZIHlhIHlveCBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+ImdlZMmZbiB6yZluZ2zJmXJpbiBtYXLFn3J1dHVudSBkyZl5acWfbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iNTMzMTMxODkzMTkzNzQwMjA0MCI+IlTJmXRiaXHJmSB6yZluZyBldG3JmXnJmSB2yZkgesmZbmcgZWRpbMmZbiBuw7ZtcsmZbmkgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgZ2VkyZluIHrJmW5nbMmZcmkgaXpsyZl5yZksIHnDtm5syZluZGlyyZkgdsmZIHlhIHFhcsWfxLFzxLFuxLEgYWxhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVTbXMiIG1zZ2lkPSI4NjczNDcxNzY4OTQ3ODk1MDgyIj4iU01TIHHJmWJ1bCBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlU21zIiBtc2dpZD0iNjQyNDM4Nzc1NDIyODc2NjkzOSI+IlTJmXRiaXHJmSBNTVMgbWVzYWpsYXLEsW7EsSBhbG1hcSB2yZkgZW1hbCBldG3JmWsgaWNhesmZc2kgdmVyaXIuIEJ1IG8gZGVtyZlrZGlyIGtpLCB0yZl0YmlxIHNpemluIG1lc2FqbGFyxLFuxLF6xLEgc2l6yZkgZ8O2c3TJmXJtyZlkyZluIG1vbml0b3JpbnEgZWTJmSB2yZkgeWEgc2lsyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZU1tcyIgbXNnaWQ9IjE4MjEzMTczNDQ2NjgyNTcwOTgiPiJtyZl0biBtZXNhamxhcsSxbsSxIHHJmWJ1bCBlZGlyIChNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+IlTJmXRiaXHJmSBNTVMgbWVzYWpsYXLEsW7EsSBxyZlidWwgdsmZIGVtYWwgw7zDp8O8biBpbWthbiB2ZXJpci4gQnUgbyBkZW3JmWtkaXIga2ksIGJ1IHTJmXRiaXEgc2l6yZkgZ8O2c3TJmXJtyZlkyZluIGNpaGF6xLFuxLF6YSBnw7ZuZMmZcmlsyZluIG1lc2FqbGFyxLHCoHNpbMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4idMmZY2lsaSB5YXnEsW1sYXLEsSBxyZlidWwgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiJUyZl0YmlxyZkgdMmZY2lsaSB5YXnEsW0gbWVzYWpsYXLEsW7EsSBxyZlidWwgdsmZIGVtYWwgZXRtyZlrIGljYXrJmXNpIHZlcmlyLiBCdSBpY2F6yZkgYW5jYXEgc2lzdGVtIHTJmXRiaXFsyZlyaSDDvMOnw7xuIG3DvG1rw7xuZMO8ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjE1OTgzMjg4NDM2MTk2NDYxNjYiPiJtb2JpbCB5YXnEsW0gbWVzYWpsYXLEsW7EsSBveHV5dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4iVMmZdGJpccmZIHNpemluIHRlbGVmb251bnV6IHTJmXLJmWZpbmTJmW4gYWzEsW5txLHFnyB5YXnEsW0gbWVzYWpsYXLEsW7EsSBveHVtYSBpY2F6yZlzaSB2ZXJpci4gVGVsZWZvbiB5YXnEsW3EsSBiyZl6aSBtyZlrYW5sYXJkYSBvbGFuIGbDtnZxyZlsYWTJmSBoYWRpc8mZbMmZcmzJmSBiYcSfbMSxIHNpemkgeMmZYsmZcmRhciBldG3JmWsgw7zDp8O8biBxyZlidWwgZWRpbGlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgZsO2dnHJmWxhZMmZIG1vYmlsIHlhecSxbSBxyZlidWwgZWRpbGRpeWkgemFtYW4gdGVsZWZvbnVudW4gcGVyZm9ybWFuc8SxbmEgdsmZIMmZbcmZbGl5eWF0xLFuYSBtw7xkYXhpbMmZIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiJTTVMgbWVzYWpsYXLEsW7EsSBnw7ZuZMmZcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiJUyZl0YmlxyZkgU01TIG1lc2FqxLEgZ8O2bmTJmXJtyZkgaWNhesmZc2kgdmVyaXIuIEJ1IGfDtnpsyZluaWxtyZl5yZluIMO2ZMmZbmnFn2zJmXLJmSBzyZliyZliIG9sYSBiaWzJmXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBzaXppbiB0yZlzZGlxaW5peiBvbG1hZGFuIG1lc2FqIGfDtm5kyZlybcmZa2zJmSBzaXrJmSDDtmTJmW5pxZ/JmSBzyZliyZliIG9sYSBiaWzJmXJsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9Ijg3MTM4ODkxMDUzMDU5NDMyMDAiPiJtZXNhamxhIGNhdmFiIHZlcmlsbcmZbGkgdMmZZGJpcmzJmXIgZ8O2bmTJmXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9IjcxMDc2NDg1NDg0Njg3Nzg3MzQiPiJUyZl0YmlxyZkgesmZbmdsyZlyIMO8w6fDvG4gXCJtZXNhamxhIGNhdmFibGFcIiBoYWRpc8mZbMmZcmluaSBpZGFyyZkgZXRtyZlrIMO8w6fDvG4gZGlnyZlyIG1lc2FqbGHFn21hIHTJmXRiaXFsyZlyaW7JmSBzb3LEn3VsYXLEsW4gZ8O2bmTJmXJpbG3JmXNpIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNtcyIgbXNnaWQ9Ijg3NDUwODY1NzIyMTMyNzA0ODAiPiJ0ZWtzdCBtZXNhamxhcsSxbsSxesSxIG94dXl1ciAoU01TIHbJmSB5YSBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluaXpkyZkgdsmZIHlhIFNJTSBrYXJ0xLFuxLF6ZGEgc2F4bGFuYW4gU01TIG1lc2FqbGFyxLEgb3h1bWHEn2EgaW1rYW4gdmVyaXIuIEJ1IGLDvHTDvG4gU01TIG1lc2FqbGFyxLFuLCBvbmxhcsSxbiBtyZl6bXVudW5kYW4gdsmZIGtvbmZpZGVuc2lhbGzEscSfxLFuZGFuIGFzxLFsxLEgb2xtYWRhbiBveHVubWFzxLEgaW1rYW7EsSBkZW3JmWtkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiJUyZl0YmlxyZkgdGVsZWZvbnVudXpkYSB2yZkgeWEgU0lNIGthcnTEsW7EsXpkYSBzYXhsYW5hbiBTTVMgbWVzYWpsYXLEsSBveHVtYcSfYSBpbWthbiB2ZXJpci4gQnUgYsO8dMO8biBTTVMgbWVzYWpsYXLEsW4sIG9ubGFyxLFuIG3JmXptdW51bmRhbiB2yZkga29uZmlkZW5zaWFsbMSxxJ/EsW5kYW4gYXPEsWzEsSBvbG1hZGFuIG94dW5tYXPEsSBpbWthbsSxIGRlbcmZa2Rpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+Im3JmXRuIG1lc2FqbGFyxLFuxLF6xLEgcmVkYWt0yZkgZWRpciAoU01TIHbJmSB5YSBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiJUyZl0YmlxyZkgdGVsZWZvbnVudXpkYSB2yZkgeWEgU8SwTSBrYXJ0xLFuxLF6ZGEgeWVybMmZxZ/JmW4gU01TIG1lc2FqbGFyYSB5YXptYSBpY2F6yZlzaSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIHNpemluIG1lc2FqbGFyxLFuxLF6xLEgc2lsyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+IlTJmXRiaXHJmSB0ZWxlZm9udW51emRhIHbJmSB5YSBTxLBNIGthcnTEsW7EsXpkYSB5ZXJsyZnFn8mZbiBTTVMgbWVzYWpsYXJhIHlhem1hIGljYXrJmXNpIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgc2l6aW4gbWVzYWpsYXLEsW7EsXrEsSBzaWzJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9IjU5OTEzOTg3MTE5MzY1OTA0MTAiPiJtyZl0biBtZXNhamxhcsSxIHHJmWJ1bCBldG3JmWsgKFdBUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9Ijc0ODIzMjE5MDIyMDU4MzM4NSI+IlTJmXRiaXHJmSBXQVAgbWVzYWpsYXIgZ8O2bmTJmXJtyZlrIHbJmSB5YSBxyZlidWwgZXRtyZlrIGlta2FuxLEgdmVyaXIuIEJ1bmEgbWVzYWpsYXLEsSBpemzJmW3JmWsgdsmZIFNpesmZIHjJmWLJmXIgdmVybcmZZMmZbiBzaWxtyZlrIGlta2FubGFyxLEgZGEgZGF4aWxkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUYXNrcyIgbXNnaWQ9IjY0NjYwOTUzOTY2MjM5MzM5MDYiPiJpxZ9syZluyZluIHTJmXRiaXFsyZlyIMmZbGTJmSBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUYXNrcyIgbXNnaWQ9Ijc0NTQyMTU5OTU4NDc2NTgxMDIiPiJUyZl0YmlxyZkgaGF6xLFyZGEgdsmZIGF6IMO2bmPJmSBpxZ9syZl5yZluIHRhcMWfxLFyxLFxbGFyIGhhcXHEsW5kYSDJmXRyYWZsxLEgbcmZbHVtYXQgyZlsZMmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiBCdSBkYSBjaWhhemRhIGhhbnPEsSB0yZl0YmlxbMmZcmluIGlzdGlmYWTJmSBvbHVubWFzxLEgaGFxccSxbmRhIG3JmWx1bWF0bGFyxLFuIMmZbGTJmSBlZGlsbcmZc2luyZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+ImlzdGlmYWTJmcOnaWzJmXIgYXJhc8SxbmRhIMmZbGFxyZkgcXVydXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iMzY0NjcwOTYzNjIzMzg1Nzg2Ij4iVMmZdGJpccmZIGJ1IGNpaGF6ZGFrxLEgZGlnyZlyIGlzdGlmYWTJmcOnaWzJmXJsyZkgbcO8eHTJmWxpZiBpxZ9syZlyaSBnw7ZybcmZecmZIGljYXrJmSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZnDp2lsyZlyIGFyYXPEsW5kYWvEsSBxb3J1bm1hbsSxIHBvem1hcSDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMjU2NzczNDI4NTU0NTA3NDEwNSI+ImLDvHTDvG4gaXN0aWZhZMmZw6dpbMmZciBpbMmZIMmZbGFxyZkgc2F4bGFtYXEgw7zDp8O8biB0YW0gaMO8cXVxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJhY3RBY3Jvc3NVc2Vyc0Z1bGwiIG1zZ2lkPSIzNzY4NDEzNjgzOTU1MDIzNjYiPiLEsHN0aWZhZMmZw6dpbMmZciBhcmFzxLFuZGEgYsO8dMO8biBtw7xta8O8biDJmWxhccmZbMmZcsmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNlcnMiIG1zZ2lkPSIxNjc2MTUwOTExNjcyMjgyNDI4Ij4iaXN0aWZhZMmZw6dpbMmZcmkgaWRhcsmZIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2VycyIgbXNnaWQ9Ijg0MDkzMDY2Njc2NDUzNTU2MzgiPiJUyZl0YmlxbMmZcsmZIGNpaGF6ZGEgb2xhbiBpc3RpZmFkyZnDp2lsyZlyaSwgaGFiZWzJmSBzb3LEn3UgZ8O2bmTJmXJtyZksIHlhcmF0bWEgdsmZIHNpbG3JmSBpem5pIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjYyMjk0Njg2NzQ3NTM1Mjk1MDEiPiJpxZ9syZluyZluIHTJmXRiaXFsyZlyaW4gZGV0YWxsYXLEsW7EsSDJmWxkyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjE1MzgyNDc0MTQ0MDcxNzU5OSI+IlTJmXRiaXHJmSBoYXrEsXJkYSB2yZkgYXogw7ZuY8mZIGnFn2zJmXnJmW4gdGFwxZ/EsXLEsXFsYXIgaGFxccSxbmRhIMmZdHJhZmzEsSBtyZlsdW1hdCDJmWxkyZkgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIMWfyZl4c2kgbcmZbHVtYXRsYXLEsSBvxJ91cmxheWEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVvcmRlclRhc2tzIiBtc2dpZD0iMjAxODU3NTUyNjkzNDQyMjc3OSI+ImnFn2zJmW7JmW4gdMmZdGJpcWzJmXJpbiBzxLFyYXPEsW7EsSBkyZl5acWfbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiJUyZl0YmlxyZkgdGFwxZ/EsXLEsXFsYXLEsSDDtm4gcGxhbmRhbiBhcnhhIHBsYW5hIGtlw6dpcm3JmXnJmSBpbWthbiB2ZXJpci4gVMmZdGJpcSBidW51IFNpemluIGRheGlsZXRtyZluaXogb2xtYWRhbiBkYSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZVRhc2tzIiBtc2dpZD0iNjgyMTUxMzQwMTg3MDM3NzQwMyI+ImnFn2zJmWsgdMmZdGJpcWzJmXJpIGRheWFuZMSxcsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlbW92ZVRhc2tzIiBtc2dpZD0iMTM5NDcxNDM1MjA2MjYzNTQ5MyI+IlTJmXRiaXHJmSB0YXDFn8SxcsSxcWxhcsSxIHNpbG3JmXnJmSB2yZkgb25sYXLEsW4gdMmZdGJpcWzJmXJpbmkgbcmZaHYgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIGRpZ8mZciB0yZl0YmlxbMmZcmluIGnFn2zJmXJpbmkgZGF5YW5kxLFyYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY3Rpdml0eVN0YWNrcyIgbXNnaWQ9IjczOTExOTEzODQwMjczMDMwNjUiPiJmyZlhbGl5ecmZdCB0b3BsdWxhcsSxbsSxIGlkYXLJmSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSIxNjE1ODgxOTMzMDM0MDg0NDQwIj4iVMmZdGJpccmZIGRpZ8mZciB0yZl0YmlxbMmZcmluIGbJmWFsaXl5yZl0aSBkYXhpbGluZMmZIGbJmWFsaXl5yZl0IHRvcGx1bGFyxLFuxLEgyZlsYXbJmSBldG3JmWssIHNpbG3JmWsgdsmZIGTJmXlpxZ9tyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iMjkxODc2ODIzODA0NTIwNjQ1NiI+ImjJmXIgaGFuc8SxIGJpciBmyZlhbGl5ecmZdCBiYcWfbGF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9Ijk5NzgyMzY5NTM0MzU4NDAwMSI+IsSwY2F6yZkgcW9ydW5tYXPEsSB2yZkgeWEgZWtzcG9ydCBlZGlsbWnFnyBzdGF0dXNkYW4gYXPEsWzEsSBvbG1heWFyYXEsIHTJmXRiaXHJmSBoyZlyIGhhbnPEsSBmyZlhbGl5ecmZdGkgYmHFn2xhdG1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiJla3JhbiB1ecSfdW5sdcSfdW51IHllcmzJmcWfZGlyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRTY3JlZW5Db21wYXRpYmlsaXR5IiBtc2dpZD0iNjkyMDQzNjE4NjkzOTE3Mzc0Ij4iVMmZdGJpccmZIGRpZ8mZciB0yZl0YmlxbMmZcmluIGVrcmFuIHV5xJ91bmx1xJ91bnUgeW94bGFtYXEgaW1rYW7EsSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGRpZ8mZciB0yZl0YmlxbMmZcmluIGbJmWFsaXl5yZl0aW5pIHBvemEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0RGVidWdBcHAiIG1zZ2lkPSIzMDIyMTA3MTk4Njg2NTg0MDUyIj4idMmZdGJpcSBzYXpsYW5tYXPEsW7EsSBha3RpdiBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0RGVidWdBcHAiIG1zZ2lkPSI0NDc0NTEyNDE2Mjk5MDEzMjU2Ij4iVMmZdGJpccmZIGRpZ8mZciBiaXIgdMmZdGJpcSDDvMOnw7xuIHNhemxhbWFuxLEgYcOnbWFxIMO8w6fDvG4gaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW51IGRpZ8mZciB0yZl0YmlxbMmZcmkgeW94IGV0bcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MTYyMDkyMTg1MTI0MjM0NDgwIj4ic2lzdGVtIGVrcmFuIG5pemFtbGFyxLFuxLEgZMmZeWnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4iVMmZdGJpccmZIHllcmxpIHBhcmFtZXRybMmZciB2yZkgeWEgxZ9yaWZ0aW4gw7Zsw6fDvHPDvCBraW1pIGNhcmkga29uZmlxdXJhc2l5YW7EsSBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjU2ODQ1MDQwNTgxOTI5MjEwOTgiPiJhdnRvbW9iaWwgcmVqaW1pbmkgYWt0aXZsyZnFn2RpcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiJUyZl0YmlxyZkgYXZ0b21vYmlsIHJlamltaW5pIGFrdGl2bMmZxZ9kaXJtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjM5MTQwMjY2ODc0MjAxNzcyMDIiPiJkaWfJmXIgdMmZdGJpcWzJmXJpIHFhcGF0bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSI0NTkzMzUzMjM1OTU5NzMzMTE5Ij4iVMmZdGJpccmZIGJhxZ9xYSB0yZl0YmlxbMmZcmluIGFyeGFmb24gcHJvc2VzbMmZcmluaSBkYXlhbmTEsXJtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IGRpZ8mZciB0yZl0YmlxbMmZcmluIGRheWFubWFzxLFuYSBzyZliyZliIG9sYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjIzMjk2Mjc0Mjg4MzIwNjc3MDAiPiJEaWfJmXIgdMmZdGJpcWzJmXJpIGRheWFubWHEn2EgbcmZY2J1ciBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+IlTJmXRiaXHJmSBkaWfJmXIgdMmZdGJpcWzJmXJpIG3JmWNidXJpIMWfyZlraWxkyZkgZGF5YW5kxLFybWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZUJhY2siIG1zZ2lkPSI2NTI5MzUyMDQwNzI1ODQ2MTYiPiJ0yZl0YmlxaSBxYXBhbm1hxJ9hIG3JmWNidXIgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZm9yY2VCYWNrIiBtc2dpZD0iMzg5MjI5NTgzMDQxOTUxMzYyMyI+IlTJmXRiaXHJmSDDtm4gcGxhbmRhIG9sYW4gaXN0yZluaWzJmW4gdMmZdGJpcWkgYmHEn2xheWFyYXEgZ2VyaXnJmSBkw7ZubcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBoZcOnIHZheHQgaXN0aWZhZMmZIG9sdW5tYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2R1bXAiIG1zZ2lkPSIxNjgxNzk5ODYyNDM4OTU0NzUyIj4ic2lzdGVtaW4gZGF4aWxpIGR1cnVtdW51IGLJmXJwYSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2R1bXAiIG1zZ2lkPSIxNzc4Mjk5MDg4NjkyMjkwMzI5Ij4iVMmZdGJpccmZIHNpc3RlbWluIGRheGlsaSBzdGF0dXN1bnUgYsmZcnBhIGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgbGF6xLFtIG9sbWFkxLHEn8SxIGhhbGRhIG3DvHh0yZlsaWYgxZ/JmXhzaSB2yZkgZ8O8dsmZbmxpIG3JmWx1bWF0bGFyxLEgYsmZcnBhIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSI4MDIyNTg4NjA4OTk0NTg5OTM4Ij4iZWtyYW4ga29udGVudGluaSBiyZlycGEgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iMzE5MzI2OTA2OTQ2OTcwMDI2NSI+IlTJmXRiaXHJmSBha3RpdiBwyZluY8mZcsmZbmluIG3JmXptdW51bnUgyZlsZMmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZayBwyZluY8mZcsmZIG3JmXptdW51bnUgyZlsyZkga2XDp2lyaWIgcGFyb2xsbGFyxLEgb3h1eWEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMjMxMjYxMjEzNTEyNzMxMDI1NCI+ImdpcmnFnyBpbWthbsSxbsSxIG3DvHbJmXFxyZl0aSBhw6dtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4iVMmZdGJpccmZIGNpaGF6YSBnaXJpxZ9pIG3DvHbJmXFxyZl0aSBvbGFyYXEgYWt0aXZsyZnFn2Rpcm3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGlzdGlmYWTJmcOnaSByYXrEsWzEscSfxLEgb2xtYWRhbiBnaXJpxZ9pIGFrdGl2bMmZxZ9kaXLJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9Ijg1MzIyOTUxOTkxMTI1MTkzNzgiPiJwyZluY8mZcsmZIGluZm9zdW51IGLJmXJwYSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI0OTk4ODM2MzcwNDI0MTg2ODQ5Ij4iVMmZdGJpccmZIHDJmW5jyZlyyZkgaWRhcsmZw6dpc2luZMmZbiBnyZlsyZluIHdpbmRvd3MgaGFxccSxbmRhIG9sYW4gbcmZbHVtYXTEsSBiyZlycGEgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBkYXhpbGkgc2lzdGVtIGlzdGlmYWTJmXNpIMO8w6fDvG4gbsmZesmZcmTJmSB0dXR1bGFuIG3JmWx1bWF0xLEgYsmZcnBhIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9Ijg2NzU1MzU2NDg4MDc0MjczODkiPiJ0yZlkYmlybMmZcmkgZmlsdHIgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4MDA2MjM2MzE1ODg4MzQ3NjgwIj4iVMmZdGJpccmZIGRheGlsZXRtyZkgZmlsdHJpbmkgcWV5ZGl5eWF0IGV0ZGlybcmZecmZIGlta2FuIHZlcmlyLCBidSBmaWx0ciBiw7x0w7xuIGlzdGlmYWTJmcOnaSB0yZlkYmlybMmZcmluaSBnw7ZuZMmZcmlsbcmZbWnFn2TJmW4gyZl2dsmZbCBmaWx0cmTJmW4ga2XDp2lyaXIuIFrJmXLJmXJsaSB0yZl0YmlxIGlzdGlmYWTJmcOnaSBtw7xkYXhpbMmZc2kgb2xtYWRhbiDEsHN0aWZhZMmZw6dpIMSwbnRlcmZleXNpIHNpc3RlbWluyZkgbsmZemFyyZl0IGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNTk3MzYyNjczODE3MDYxODc3NSI+ImVrcmFuxLEgYsO2ecO8ZMO8ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjcxMjEyMzU2ODQ1MTUwMDM3OTIiPiJUyZl0YmlxyZkgZWtyYW4ga29udGVudGluaSBiw7Z5w7x0bcmZayBpY2F6yZlzaSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgZWtyYW5kYSBrb250ZW50aSBiw7Z5w7xkyZlyyZlrIGNpaGF6xLFuIHFleXJpLXN0YWJpbGxpeWluyZkgc8mZYsmZYiBvbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2h1dGRvd24iIG1zZ2lkPSI3MTg1NzQ3ODI0MDM4OTA5MDE2Ij4icWlzbcmZbiBzw7ZuZMO8csO8ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NodXRkb3duIiBtc2dpZD0iNzA0NjUwMDgzODc0NjI5MTc3NSI+IkFrdGl2bGlrIGlkYXLJmcOnaWxpeWluaSBxYXBhbm3EscWfIGhhbGEgZ8mZdGlyaXIuIFRhbSBxYXBhbm1hbsSxIGjJmXlhdGEga2XDp2lybWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iNDEzODYwODYxMDcxNzQyNTU3MyI+InTJmXRiaXFkyZluIHTJmXRiaXHJmSBrZcOnaWRpbiBxYXLFn8Sxc8SxbsSxIGFsbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iODI2MjE5NTgwMjU4MjI1NTAyMSI+IsSwc3RpZmFkyZnDp2luaW4gYmHFn3FhIHTJmXRiaXHJmSBrZcOnbcmZc2luaW4gcWFyxZ/EsXPEsW7EsSBhbMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1Mzc5MjIzMTE0MTE1NDYwMTYiPiJjYXJpIHTJmXRiaXEgaW5mb3JtYXNpeWFzxLEgyZlsZMmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjgxNTM2NTE0MzQxNDUxMzI1MDUiPiJTYWhpYsmZIGVrcmFuIMO2bsO8bmTJmSBjYXJpIHTJmXRiaXEgdsmZIHhpZG3JmXRsyZlyIGhhcXHEsW5kYSDFn8mZeHNpIG3JmWx1bWF0IMmZbGTJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9Ijg5MjIzOTA5NDg2NzE4MjY1NiI+ImnFn8mZIHNhbMSxbmFuIGLDvHTDvG4gdMmZdGJpcWzJmXJpIGl6bMmZeWlyIHbJmSBpZGFyyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiJUyZl0YmlxyZkgc2lzdGVtaW4gZsmZYWxpeXnJmXRsyZlyaSBuZWPJmSBiYcWfbGF0ZMSxxJ/EsW7EsSBuyZl6YXLJmXQgdsmZIGtvbnRyb2wgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBzaXN0ZW1pIHRhbWFtaWzJmSBrb21wcm9taXMgZWTJmSBiaWzJmXIuIEJ1IGljYXrJmSB5YWxuxLF6IGlua2nFn2FmIMO8w6fDvG5kw7xyLCBoZcOnIHZheHQgbm9ybWFsIGlzdGlmYWTJmSDDvMOnw7xuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSIyNTc2MzMzNDM0ODkzNTMyNDc1Ij4icWFsZMSxcsSxbG3EscWfIHlhecSxbSBwYWtldGluaSBnw7ZuZMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+IlTJmXRiaXHJmSB0yZl0YmlxIHBha2V0aW5pbiBzaWxpbm3JmXNpIGhhcXHEsW5kYSBiaWxkaXJpxZ8gdHJhbnNsYXNpeWEgZXRtyZkgaWNhesmZc2kgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gZGlnyZlyIGnFn2zJmWsgdMmZdGJpcWzJmXJpIGRheWFuZMSxcm1hcSDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNTY4OTA5NTAwOTAzMDMzNjU5MyI+IlNNUyB0yZlyyZlmaW5kyZluIHHJmWJ1bCBlZGlsyZluIHlhecSxbSBnw7ZuZMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IlTJmXRiaXHJmSBtZXNhaiBnyZlsbcmZc2kgaGFxccSxbmRhIGJpbGRpcmnFn2kgeWF5xLFtbGFtYXEgaW1rYW7EsSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBnyZlsyZluIFNNUyBtZXNhamxhcsSxbsSxIHNheHRhbGHFn2TEsXJtYXEgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+IldBUC1QVVNIIHTJmXLJmWZpbmTJmW4gccmZYnVsIGVkaWzJmW4geWF5xLFtIGfDtm5kyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiJUyZl0YmlxyZkgV0FQIFBVU0ggbWVzYWrEsW4gYWzEsW5kxLHEn8SxIGhhcWRhIGJpbGRpcmnFnyB0cmFuc2xhc2l5YSBldG3JmXnJmSBpY2F6yZkgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIHNheHRhIE1NUyBtZXNhaiBhbMSxxZ/EsSB2yZkgeWEgc8mZc3NpemPJmSBpc3TJmW5pbMmZbiB2ZWIgc8mZaGlmyZluaSB6yZlyyZlydmVyaWNpIHZhcmlhbnRsYXJsYSBkyZl5acWfbcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjI0NTE4NzM2NjQzNjM2NjI2NjYiPiLDp2FsxLHFn2FuIHByb3Nlc2zJmXJpbiBzYXnEsW7EsSBtyZloZHVkbGHFn2TEsXLEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4iVMmZdGJpccmZIGnFn2zJmWRpbMmZY8mZayBtYWtzaW11bSBwcm9zZXMgc2F5xLFuxLEgaWRhcsmZIGV0bcmZIGl6bmkgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIHTJmWzJmWIgb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9IjU1MDk1ODUwNzc5ODc5Njk2NSI+ImFyeGFmb24gdMmZdGJpcWzJmXJpbmkgZGF5YW5tYcSfYSBtyZljYnVyIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI3NDcxMzEwNjUyODY4ODQxNDk5Ij4iVMmZdGJpccmZIGFrdGl2aXRpbMmZcmluIGFyeGEgZm9uYSBnZXRkaXlpIHphbWFuIGJpdG3JmXNpbmkgeW94bGF5xLFyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB0yZlsyZluIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIyNzg5NjEwNjczNTE0MTAzMzY0Ij4iYmF0YXJleWEgc3RhdGlzdGlrYWxhcsSxbsSxIG94dW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjU4OTczNDY1ODI4ODI5MTUxMTQiPiJUyZl0YmlxyZkgY2FyaSBhxZ9hxJ/EsSBzyZl2aXl5yZlsaSBkYXRhIHNpdGlmYWTJmXNpbmkgb3h1bWFxIGlta2FuxLEgdmVyaXIuIFTJmXRiaXHJmSBoYW5zxLEgdMmZdGJpcWkgaXN0aWZhZMmZIGV0ZGl5aW5peiBoYXFxxLFuZGEgyZl0cmFmbMSxIG3JmWx1bWF0IHRhcG1hxJ9hIGlta2FuIHZlcsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjM3MTk2ODk3NjQ1MzYzNzk1NTciPiJiYXRhcmV5YSBzdGF0aXN0aWthbGFyxLFuxLEgZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4iVMmZdGJpccmZIHnEscSfxLFsbcSxxZ8gYmF0YXJleWEgc3RhdGlzdGlrYXPEsW7EsSByZWRha3TJmSBldG3JmSBpY2F6yZlzaSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIGVkaWxtaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjE1MDg3Nzk2ODc0MzY1ODU3NDQiPiJ0yZl0YmlxIMmZbcmZbGl5eWF0IHN0YXRpc3Rpa2FsYXLEsW7EsSDJmWxkyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4iVG9wbGFubcSxxZ8gdMmZdGJpcSDJmW3JmWxpeXlhdCBzdGF0aXN0aWthbGFyxLFuxLFuIGLJmXJwYSBlZGlsbcmZc2luyZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSDDvMOnw7xuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI4ODI5MDk3MzczODUxNTIxNTA1Ij4idMmZdGJpcSDJmW3JmWxpeXlhdCBzdGF0aXN0aWthc8SxbsSxIGTJmXlpxZ9tyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI1MDc4NDU5NjU5NDQwMzQ4MyI+IlTJmXRiaXHJmSB0b3BsYW5txLHFnyB0yZl0YmlxIMmZbcmZbGl5eWF0IHN0YXRpc3Rpa2FzxLFuxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYWNrdXAiIG1zZ2lkPSI0NzAwMTMwMjI4NjU0NTM5MjAiPiJzaXN0ZW0geWVkyZlrbMmZbcmZc2kgdsmZIGLJmXJwYXPEsW7EsSBpZGFyyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhY2t1cCIgbXNnaWQ9IjY5MTIyMzA1MjUxNDA1ODk4OTEiPiJUyZl0YmlxyZkgc2lzdGVtaSByZXplcnYgZXRtyZl5yZkgdsmZIG1leGFuaXptaSBiyZlycGEgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsbcmZayDDvMOnw7xuIG7JmXrJmXJkyZkgdHV0dWxtYXnEsWIuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiJ0YW0gcmV6ZXJ2aSB0yZlzZGlxIGV0bcmZayB2yZkgeWEgyZltyZlsaXl5YXTEsSBiyZlycGEgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjE3NDg3NjIxNzE2Mzc2OTk1NjIiPiJUyZl0YmlxyZkgxLBzdGlmYWTJmcOnaSDEsG50ZXJmZXlzaSB0YW0gcmV6ZXJ2IHTJmXNkaXFpbmkgacWfyZkgc2FsbWHEn2EgaW1rYW4gdmVyaXIuIEhlw6cgYmlyIHTJmXRiaXEgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSIyMTQ4NTYzNjI4MTQwMTkzMjMxIj4iaWNhesmZc2l6IHDJmW5jyZlyyZlsyZlyaSBnw7Zyw7xudMO8bMmZeWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4iVMmZdGJpccmZIGRheGlsaSBzaXN0ZW0gaW50ZXJmZXlzaSB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsbcmZc2kgw7zDp8O8biBuyZl6yZlyZMmZIHR1dHVsbXXFnyBwyZluY8mZcsmZbMmZcmkgeWFyYXRtYcSfYSBpY2F6yZkgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsbWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4iZGlnyZlyIHTJmXRiaXFsyZlyIMO8esmZcmluZMmZIMOnyZlrbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iODU4NDY3ODM4MTk3MjgyMDExOCI+IlTJmXRiaXHJmSBkaWfJmXIgdMmZdGJpcWzJmXJpbiB2yZkgeWEgb25sYXLEsW4gaGlzc8mZbMmZcmluaW4geXV4YXLEsXPEsW5kYSDFn8mZa2lsIMOnyZlrbcmZecmZIGlta2FuIHZlcmlyLiBPbmxhciBpc3TJmW5pbMmZbiB0yZl0YmlxaW4gaW50ZXJmZXlzaW5pbiBpc3RpZmFkyZlzaW7JmSBtw7xkYXhpbMmZIGVkyZkgdsmZIHlhIGRpZ8mZciB0yZl0YmlxbMmZcmTJmSBheHRhcmTEsXFsYXLEsW7EsXrEsSBkyZl5acWfyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSIyODA1MTAzMjQxMTUzOTA3MTc0Ij4icWxvYmFsIGFuaW1hc2l5YSBzw7xyyZl0aW5pIGTJmXlpxZ9pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iNzY5MDA2MzQyODkyNDM0MzU3MSI+IlTJmXRiaXHJmSBpc3TJmW5pbMmZbiB2YXh0IHFsb2JhbCBhbmltYXNpeWEgc8O8csmZdGluaSAoc8O8csmZdGxpIHbJmSB5YSB5YXZhxZ8gYW5pbWFzaXlhbGFyKSBkyZl5acWfZGlybcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+InTJmXRiaXEgbmnFn2FubGFyxLFuxLEgaWRhcsmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiJUyZl0YmlxbMmZcsmZIG9ubGFyxLFuIG5vcm1hbCBaLW9yZGVyaW5xaSBrZcOnyZlyyZlrIG1hcmtlcmzJmXJpbmkgeWFyYXRtYSB2yZkgaWRhcsmZZXRtyZkgaWNhesmZc2kgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZnJlZXplU2NyZWVuIiBtc2dpZD0iNDcwODE4MTE4NDQ0MTg4MDE3NSI+ImVrcmFuxLEgZG9uZHVydXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mcmVlemVTY3JlZW4iIG1zZ2lkPSI4NTU4OTIzNzg5MjIyNjcwMDY0Ij4iVMmZdGJpccmZIHRhbSBla3JhbmzEsSB5YXnEsW0gw7zDp8O8biBla3JhbsSxIG3DvHbJmXFxyZl0aSBvbGFyYXEgZG9uZHVybWEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbmplY3RFdmVudHMiIG1zZ2lkPSIxMzc4NzQ2NTg0MDIzNTg2NjAwIj4iZMO8eW3JmWzJmXJpIHbJmSBpZGFyyZlldG3JmSBkw7x5bcmZbMmZcmluaSBiYXPEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNjM1MjU2NTU5OTk2ODYzMiI+IlTJmXRiaXHJmSDDtnrDvG7DvG4gZGF4aWxldG3JmSB0yZlkYmlybMmZcmluaSBkaWfJmXIgdMmZdGJpcWzJmXLJmSDDp2F0ZMSxcm1hxJ9hIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgcGxhbsWfZXRpIMmZbMmZIGtlw6dpcm3JmWsgw7zDp8O8biBidW5kYW4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+IlTJmXRiaXHJmSDDtnrDvG7DvG4gZGF4aWxldG3JmSB0yZlkYmlybMmZcmluaSBkaWfJmXIgdMmZdGJpcWzJmXLJmSDDp2F0ZMSxcm1hxJ9hIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgdGVsZWZvbnUgyZlsyZkga2XDp2lybcmZayDDvMOnw7xuIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjQ2OTQyODkwMDA0MTI0OTIzNCI+InlhemTEsXFsYXLEsW7EsXrEsSB2yZkgZXRkaWtsyZlyaW5pemkgaXpsyZl5aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjgzODc3NTQ5MDE2ODg3MjgwNDMiPiJUyZl0YmlxyZkgYmFzZMSxxJ/EsW7EsXogZMO8eW3JmWzJmXJpIGl6bMmZbcmZayBpbWthbsSxIHZlcmlsaXIuIEJ1bmEgcGFyb2xsYXLEsW4gdsmZIGtyZWRpdCBrYXJ0xLEgbsO2bXLJmWzJmXJpbmluIHlhesSxbG1hc8SxIGRhIGFpZGRpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMzYwMDY0NjIwMjMwNTE1Nzc2Ij4iZGF4aWxldG3JmSBtZXRvZHVuYSBiYcSfbGFuxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzI1MDQ0MDMyMjgwNzI4NjMzMSI+IlNhaGliaW7JmSBkYXhpbGV0bcmZIG1ldG9kdW51biDJmW4gw7xzdCBzyZl2aXl5yZkgaW50ZXJmZXlzaW7JmSBiYcSfbGFtYXEgaW1rYW7EsSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gaGXDpyB2YXh0IGxhesSxbSBvbG1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNTM1NzczMzk0MjU1NjAzMTU5MyI+ImdpcmnFnyB4aWRtyZl0aW7JmSBiYcSfbMSxIHFhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjcwMzQ2MTU5Mjg2MDkzMzEzNjgiPiJTYWhpYsmZIGdpcmnFnyB4aWRtyZl0aW4gyZluIMO8c3Qgc8mZdml5ecmZIGludGVyZmV5c2kgYmHEn2xhbWHEn2EgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI4NDYyODE1MTc5NTcyNzQ4NzYxIj4iw6dhcCBzZXJ2aXNpbmkgcW/Fn21hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFByaW50U2VydmljZSIgbXNnaWQ9Ijc5NjAwNjc2MjMyMDkxMTExMzUiPiJTYWhpYmluyZkgYmlyIMOnYXAgeGlkbcmZdGluaW4gyZluIMO8c3Qgc8mZdml5yZkgYXJhw7x6w7xuw7wgYmHEn2xhbWHEn2EgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0FsbFByaW50Sm9icyIgbXNnaWQ9IjExMjA3OTI0Njg0NjU3MTExNTkiPiJiw7x0w7xuIMOnYXAgacWfbMmZcmluyZkgZ2lyacWfIMmZbGTJmSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0FsbFByaW50Sm9icyIgbXNnaWQ9IjI5NzgxODUzMTEwNDE4NjQ3NjIiPiJTYWhpYmluyZkgZGlnyZlyIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4geWFyYWTEsWxhbiDDp2FwIGnFn2zJmXJpbsmZIGdpcmnFnyBow7xxdXF1IHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biB0yZlsyZliIG9sdW5tYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iMjc1MjczMTMwMDQxOTQxMDcyNCI+Ik5GQyB4aWRtyZl0bMmZcmluyZkgcW/Fn3VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4iU2FoaWJpbsmZIE5GQyBrYXJ0bGFyxLFuxLEgZW11bHlhc2l5YSBlZMmZbiB0yZl0YmlxbMmZcmkgYmlyLWJpcmluyZkgcW/Fn21hxJ9hIGljYXrJmSB2ZXJpbi4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gbGF6xLFtIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iNzM1ODM3ODQwMTkxNTI4NzkzOCI+Im3JmXRuIHNlcnZpc2luaSBxb8WfbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI4MTUxOTY4OTEwOTczOTk4NjcwIj4iU2FoaWJpbsmZIGJpciBtyZl0biB4aWRtyZl0aW5pbiDJmW4gw7xzdCBzyZl2aXl5yZkgYXJhw7x6w7xuw7wgYmHEn2xhbWHEn2EgaW1rYW4gdmVyaXIobcmZc8mZbMmZbiwgU3BlbGxDaGVja2VyU2VydmljZSkuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iNDcwODU5NjAyMTE2MTQ3MzI1NSI+IlZQTiB4aWRtyZl0yZkgyZlsYXHJmWzJmW5kaXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iU2FoaWJpbsmZIGJpciBWcG4geGlkbcmZdGluaW4gyZluIMO8c3Qgc8mZdml5ecmZIGFyYcO8esO8bsO8IGJhxJ9sYW1hxJ9hIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBoZcOnIHZheHQgbGF6xLFtIG9sbWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ImRpdmFyIGthxJ/EsXrEsW5hIGJhxJ9sYW7EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkNpaGF6IHNhaGliaW7JmSB5dXhhcsSxIHPJmXZpeXnJmWxpIGRpdmFyIGthxJ/EsXrEsSBpbnRlcmZleXNpbmkgY2lsZGzJmW3JmXnJmSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIG9sdW5tYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJ3aWRnZXQgc2VydmlzaW5pIHFvxZ9tYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJTYWhpYmluyZkgdmlkY2V0IHNlcnZpc2luIHnDvGtzyZlrIHPJmXZpeXnJmWxpIGludGVyZmV5c2kgaWzJmSDJmWxhccmZIHNheGxhbWFxIGljYXrJmXNpIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBoZcOnIHZheHQgaXN0yZluaWxtyZltyZlsaWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJjaWhheiBhZG1pbmkgaWzJmSDDvG5zaXl5yZl0IHF1cm1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9IjU2OTcxNTQxOTU0MzkwNzkzMCI+IlNhaGliaW7JmSBiaXIgY2loYXogaWRhcsmZw6dpc2luyZkgcGxhbmxhciBnw7ZuZMmZcm3JmWsgw7zDp8O8biBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gaGXDpyB2YXh0IGxhesSxbSBvbG1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNDI0ODgyODkwMDA0NTgwODcyMiI+ImNpaGF6IGFkbWluaSDJmWxhdsmZIGVkaW4gdsmZIHlhIHNpbGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+IlNhaGliaW7JmSBha3RpdiBjaWhheiBhZG1pbmlzdHJhdG9ybGFyxLFuxLEgyZlsYXbJmSBldG3JmXnJmSB2yZkgeWEgc2lsbcmZecmZIGljYXrJmSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gdMmZbMmZYiBvbHVubWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMzNjU5NDc3MTcxNjM4NjY4NDQiPiJla3JhbiBvcml5ZW50YXNpeWFzxLFuxLEgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMDQ2MTI2NjE5MzE2NjcxNDc2Ij4iVMmZdGJpccmZIGlzdMmZbmlsyZluIHphbWFuIGVrcmFuxLFuIHbJmXppeXnJmXRpbmkgZMmZeWnFn23JmSBpY2F6yZlzaSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gdMmZbMmZYiBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iOTE3NTM3MTYxMzMyMjU2MjkzNCI+Imt1cnNvciBzw7xyyZl0aW5pIGTJmXlpxZ9tyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iNjg2NjU2MzIzNDI3NDEwNDIzMyI+IlTJmXRiaXHJmSBtYXVzdW4gdsmZIHlhIHRyZWtwZWRpbiBrdXJzb3Igc8O8csmZdGluaSBpc3TJmW5pbMmZbiB6YW1hbiBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI0Nzc4NzMxNzAzNjAwOTA5MzQwIj4ia2xhdmlhdHVyYSBzeGVtaW5pIGTJmXlpxZ9pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iODQ4MDAxNjc3MTEzNDE3NTg3OSI+IlTJmXRiaXHJmSBrbGF2aWF0dXJhIHN4ZW1pbmkgZMmZeWnFn23JmWsgaW1rYW7EsSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gdMmZbMmZYiBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ1MzkwMDI5OTE5NDczNzY2NTkiPiJ0yZl0YmlxbMmZcsmZIExpbnV4IHNpcW5hbGxhcsSxIGfDtm5kyZlyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDg5Njk5MjA3OTE4MjY0OTE0MSI+IlTJmXRiaXHJmSBiw7x0w7xuIGRhdmFtbMSxIHByb3Nlc2zJmXLJmSBzaXFuYWwgc2/En3J1c3UgZ8O2bmTJmXJtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4idMmZYmlxaSBoyZltacWfyZkgw6dhbMSxxZ9kxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTI1MTg5MjcyMzI5MDg2MTM3Ij4iVMmZdGJpccmZIMO2eiBrb21wb25lbnRsyZlyaW5pIHlhZGRhxZ9kYSBzYXhsYW1hIGljYXrJmXNpIHZlcmlyLiBCdSBwbGFuxZ9ldGluIHPDvHLJmXRpbmkgesmZaWZsyZl0bcmZa2zJmSwgZGlnyZlyIHTJmXRiaXFsyZlyIMO8w6fDvG4gbcO2dmN1ZCBvbGFuIHlhZGRhxZ/EsSBsaW1pdGzJmXnJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IlTJmXRiaXHJmSDDtnoga29tcG9uZW50bMmZcmluaSB5YWRkYcWfZGEgc2F4bGFtYSBpY2F6yZlzaSB2ZXJpci4gQnUgZGlnyZlyIHTJmXRiaXFsyZlyIMO8w6fDvG4gbcO2dmN1ZCBvbGFuIHlhZGRhxZ/EsSBsaW1pdGzJmXnJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVQYWNrYWdlcyIgbXNnaWQ9IjE4NDM4NTEyOTUzNzcwNTkzOCI+InTJmXRiaXFsyZlyaSBzaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiJUyZl0YmlxyZkgQW5kcm9pZCBwYWtldGzJmXJpIHNpbG3JmSBpY2F6yZlzaSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBkaWfJmXIgdmFjaWIgdMmZdGJpcWzJmXJpIHNpbG3JmWsgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iMjc0MTA5MTkxODQ1ODQyNzU2Ij4iZGlnyZlyIHTJmXRiaXFsyZlyaW4gbcmZbHVtYXTEsW7EsSBzaWxpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4iVMmZdGJpccmZIGlzdGlmYWTJmcOnaSBkYXRhc8SxbsSxIHTJmW1pemzJmW3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4iZGlnyZlyIHTJmXRiaXFsyZlyaW4ga2XFn2luaSBzaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzgxMjk5ODU5OTAwNjczMDE5NiI+IlTJmXRiaXHJmSBrZcWfIGZheWxsYXLEsSBzaWxtyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9Ijc0NzI5MjE3NjgzNTc5ODE5ODYiPiJ0yZl0YmlxIHNheGxhbWEgeWFkZGHFn8SxbsSxIMO2bMOnbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+IlTJmXRiaXHJmSDDtnrDvG7DvG4ga29kdW51LCBtyZlsdW1hdMSxbsSxIHbJmSBrZcWfIMO2bMOnw7xzw7xuw7wgYWxtYSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjIxOTkxMjg0ODI4MjAzMDY5MjQiPiJiaXJiYcWfYSB0yZl0YmlxbMmZciBxdXJhxZ9kxLFybWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iNTYyODUzMDk3MjU0ODA3MTI4NCI+IlTJmXRiaXHJmSB5ZW5pIHbJmSB5YSBnw7xuY8mZbGzJmW5tacWfIEFuZHJvaWQgcGFrZXRsyZlyaW5pIHF1cmHFn2TEsXJtYcSfYSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgZ8O8Y2zDvCBzyZlsYWhpeXnJmXRsyZlyyZkgbWFsaWsgdMmZdGJpcWzJmXJpIGVuZGlyyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiJiw7x0w7xuIHTJmXRiaXEga2XFnyBkYXRhc8SxbsSxIHNpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3NDY0MDg3MTk0NTQzNDU2NSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluIHlhZGRhxZ/EsW7EsSBib8WfYWx0bWFxIMO8w6fDvG4gZGlnyZlyIHTJmXRiaXFsyZlyaW4ga2XFnyBmYXlsbGFyxLFuxLEgc2lsbcmZayBpbWthbsSxIHZlcmlyLiBCdSBkYSBkaWfJmXIgdMmZdGJpcWzJmXJpbiBkYXRhbGFyxLEgeWVuaWTJmW4gyZlsZMmZIGV0bcmZbMmZcmkgc8mZYsmZYmluZMmZbiBkYWhhIHlhdmHFnyBpxZ9syZltyZlsyZlyaW7JmSBzyZliyZliIG9sYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiJUyZl0YmlxyZkgZGlnyZlyIHTJmXRiaXFsyZlyaW4ga2XFnyBxb3ZsdcSfdW51IHTJmW1pemzJmXnJmXLJmWsgdGVsZWZvbnVuIHlhZGRhxZ/EsW7EsSBib8WfYWx0bWFxIGljYXrJmXNpIHZlcmlyLiBCdSBkaWfJmXIgdMmZdGJpcWzJmXJpbiBtyZlsdW1hdGxhcsSxbsSxIHllbmlkyZluIMmZbGTJmSBldG3JmWxpIG9sZHVxbGFyxLFuYSBnw7ZyyZkgZGFoYSB5YXZhxZ8gYmHFn2xhbWFzxLFuYSBzyZliyZliIG9sdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3ZlUGFja2FnZSIgbXNnaWQ9IjMyODk4OTAyNzE2NDU5MjE0MTEiPiJ0yZl0YmlxIHJlc3Vyc2xhcsSxbsSxbiB5ZXJpbmkgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMTk1NjIyMTc3NzgyNDQ1MjQiPiJUyZl0YmlxyZkgdMmZdGJpcSByZXN1cnNsYXLEsW7EsSBkYXhpbGkgbWVkaWFkYW4geGFyaWNpIG1lZGlheWEgdsmZIMmZa3NpbsmZIGRhxZ/EsW1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZExvZ3MiIG1zZ2lkPSI2NjE1Nzc4NTQzMTk4OTY3NjE0Ij4ibcmZeGZpIGxvcSBkYXRhc8SxbsSxIG94dXl1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MjA2MTMxMzI5MzQ1NTE1MSI+IlTJmXRiaXHJmSBzaXN0ZW1pbiBtw7x4dMmZbGlmIGp1cm5hbCBmYXlsbGFyxLFuxLEgb3h1bWHEn2EgaW1rYW4gdmVyaXIuIEJ1IGRhIFNpemluIHBsYW7Fn2V0ZMmZIGV0ZGlrbMmZcmluaXogaGFxccSxbmRhIG3JmWx1bWF0bGFyLCBoyZltw6dpbmluIMWfyZl4c2kgdsmZIGtvbmZpZGVuc2lhbCBtyZlsdW1hdGxhciBvbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjA2MzQzODE0MDI0MTU2MDQ0MyI+IlTJmXRiaXHJmSBzaXN0ZW1pbiBtw7x4dMmZbGlmIGp1cm5hbCBmYXlsbGFyxLFuxLEgb3h1bWHEn2EgaW1rYW4gdmVyaXIuIEJ1IGRhIFNpemluIHBsYW7Fn2V0ZMmZIGV0ZGlrbMmZcmluaXogaGFxccSxbmRhIG3JmWx1bWF0bGFyLCBoyZltw6dpbmluIMWfyZl4c2kgdsmZIGtvbmZpZGVuc2lhbCBtyZlsdW1hdGxhciBvbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjcxNTgwNTU1NTgyMzg4MTgxOCI+Im94dXRtYXEgw7zDp8O8biBpc3TJmW5pbMmZbiBtZWRpYSBkZWtvZGVyaSBpc3RpZmFkyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI4MjgzOTEyNDg4NDMzMTg5MDEwIj4iVMmZdGJpccmZIHBsYXliYWNrXCdpIGRlxZ9pZnLJmSBldG3JmWsgw7zDp8O8biBoyZlyIGhhbnPEsSBiaXIgcXVyYcWfZMSxcsSxbG3EscWfIG1lZGlhIGRlxZ9pZnLJmWzJmXlpY2lzaW5pIGlzdGlmYWTJmSBldG3EsWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iMTY3ODM5MTg5Njc4Njg4MjAxNCI+ImV0aWJhcmzEsSBldGltYWRuYW3JmWzJmXJpIGlkYXLJmSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iNDAxNTY0NDA0NzE5NjkzNzAxNCI+IlTJmXRiaXHJmSBldGliYXJsxLEgZXRpbWFkbmFtyZlsyZlyIGtpbWkgQ0Egc2VydGlmaWthdGxhcsSxbsSxIHF1cmHFn2TEsXJtYXEgdsmZIHNpc3RlbWTJmW4gc2lsbcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RpYWdub3N0aWMiIG1zZ2lkPSI4MDc2NzQzOTUzOTA4MDAwMzQyIj4iZGlhZ2EgbcmZeHN1cyBvbGFuIG3JmW5iyZlsyZlyaSB5YXovb3h1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlhZ25vc3RpYyIgbXNnaWQ9IjY2MDgyOTU2OTIwMDI0NTIyODMiPiJUyZl0YmlxyZkgZGlhZyBxcnVwYSBtyZlzdXMgb2xhbiByZXN1cnNsYXLEsSB5YXptYXEgdsmZIG94dW1hcSBpY2F6yZlzaSB2ZXJpcjsgbcmZc8mZbMmZbiAgL2RldiBxb3ZsdcSfdW5kYWvEsSBmYXlsbGFyLiBCdSBzaXN0ZW1pbiBzdGFiaWxsaXlpbsmZIHbJmSB0yZlobMO8a8mZc2l6bGl5aW7JmSB0yZlzaXIgZWTJmSBiaWzJmXIuIEJ1IGFuY2FxIGlzdGVoc2Fsw6fEsSB2yZkgeWEgb3BlcmF0b3IgdMmZcsmZZmluZMmZbiBhdmFkYW5sxLHEn2EgeGFzIGRpYXFub3N0aWthIMO8w6fDvG4gb2xtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiJ0yZl0YmlxIGtvbXBvbmVudGzJmXJpbmkgYWt0aXZsyZnFn2Rpcm3JmSB2yZkgeWEgZGVha3RpdmzJmcWfZGlybcmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiJUyZl0YmlxyZkgZGlnyZlyIHTJmXRiaXEga29tcG9uZW50aW5pbiBha3RpdiBvbHViLW9sbWFkxLHEn8SxbsSxIGTJmXlpxZ9tyZlrIGlta2FuxLEgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gyZloyZltaXl5yZl0bGkgcGxhbsWfZXQgaW1rYW5sYXLEsW7EsSBkZWFrdGl2IGV0bcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4gQnUgaWNhesmZIGlsyZkgZWh0aXlhdGzEsSBvbG1hcSBsYXrEsW1kxLFyLCDDp8O8bmtpIHTJmXRiaXEga29tcG9uZW50bMmZcmkgeWFyYXJzxLF6LCB6aWRkaXl5yZl0bGksIHbJmSB5YSBxZXlyaS1zYWJpdCBzdGF0dXNhIMOnZXZyaWzJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODI3MjMyNDg0NDE2NTA1NjE1Ij4iVMmZdGJpccmZIGRpZ8mZciB0yZl0YmlxIGtvbXBvbmVudGluaW4gYWt0aXYgb2x1Yi1vbG1hZMSxxJ/EsW7EsSBkyZl5acWfbcmZayBpbWthbsSxIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIMmZaMmZbWl5ecmZdGxpIHRlbGVmb24gaW1rYW5sYXLEsW7EsSBkZWFrdGl2IGV0bcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4gQnUgaWNhesmZIGlsyZkgZWh0aXlhdGzEsSBvbG1hcSBsYXrEsW1kxLFyLCDDp8O8bmtpIHTJmXRiaXEga29tcG9uZW50bMmZcmkgeWFyYXJzxLF6LCB6aWRkaXl5yZl0bGksIHbJmSB5YSBxZXlyaS1zYWJpdCBzdGF0dXNhIMOnZXZyaWzJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDYyNzMxNTM1MTA5MzUwODc5NSI+ImljYXrJmWzJmXIgdmVybcmZayB2yZkgeWEgbMmZxJ92IGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0MDg4NjQyNjU0MDg1ODUwNjYyIj4iVMmZdGJpccmZIGJ1IHbJmSB5YSBkaWfJmXIgdMmZdGJpcWzJmXLJmSB4w7xzdXNpIGl6bmzJmXIgdmVybcmZecmZIGljYXrJmSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyICBidW5kYW4gaXppbiB2ZXJtyZlkaXlpbml6IMO2esmZbGxpa2zJmXJpIMO2emzJmXJpbsmZIHZlcm3JmWsgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI4NDYzMTgxNjI4Njk1Mzk2MzkxIj4idMmZcmNpaCBlZGlsyZluIHTJmXRiaXFsyZlyIHF1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9IjQ5NzM5ODY3NjIyNDE3ODM3MTIiPiJUyZl0YmlxyZkgdMmZcmNpaCBldGRpeWluaXogdMmZdGJpcWzJmXJpIGTJmXlpxZ9tyZlrIGlta2FuxLEgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciDFn8mZeHNpIG3JmWx1bWF0bGFyxLFuxLF6xLEgdG9wbGFtYXEgw7zDp8O8biBjYXJpIHTJmXRiaXFsyZlyaW5pemkgYWxkYWRhcmFxIGnFn2zJmXnJmW4gdMmZdGJpcWzJmXJpIHjJmWLJmXJzaXogZMmZeWnFn8mZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSIyMjI2MTk1MjkwOTU1MjI0NzMwIj4ic2lzdGVtIGF5YXJsYXLEsW5kYSBkyZl5acWfaWtsaWsgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9Ijc3NzU3MjM0NDE1NTg5MDcxODEiPiJUyZl0YmlxyZkgc2lzdGVtIGF5YXJsYXLEsSBkYXRhc8SxbsSxIHJlZGFrdMmZIGV0bcmZIGljYXrJmXNpIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgc2lzdGVtIGF5YXJsYXLEsW7EsSBrb3JsYXlhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiJ0yZlobMO8a8mZc2l6IHNpc3RlbSBuaXphbWxhcsSxbsSxIGTJmXlpxZ9pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4iVMmZdGJpccmZIHNpc3RlbWluIHTJmWhsw7xryZlzaXogYXlhcmxhciBkYXRhc8SxbsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSDDvMOnw7xuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIyMTQ5NDI2NjY0MjI2MTUyMTg1Ij4iR29vZ2xlIHhpZG3JmXRsyZlyIHjJmXJpdMmZc2luaSBkyZl5acWfZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4iVMmZdGJpccmZIEdvb2dsZSB4aWRtyZl0bMmZciB4yZlyaXTJmXNpbmkgZMmZeWnFn2Rpcm3JmWsgaW1rYW7EsSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyaW4gaXN0aWZhZMmZc2kgw7zDp8O8biBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVCb290Q29tcGxldGVkIiBtc2dpZD0iNTMxMjk2NTU2NTk4NzgwMDAyNSI+ImJhxZ9sYW7En8SxY2RhIGnFn2zJmXlpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4iVMmZdGJpccmZIHNpc3RlbSB5w7xrbMmZbcmZbmkgYml0aXJkaXlpIHphbWFuIGTJmXJoYWwgw7Z6w7xuw7wgYmHFn2xhdG1hxJ9hIGlta2FuIHZlcmlyLiBCdSBwbGFuxZ9ldGkgYmHFn2xhdG1hxJ/EsW4gdXp1biDDp8mZa23JmXNpbsmZIHPJmWLJmWIgb2xhIGJpbMmZciB2yZkgdMmZdGJpccmZIGjJmW1pxZ/JmSDDp2FsxLHFn2TEsXJhcmFxIGLDvHTDvG4gcGxhbsWfZXRpIHlhdmHFn2xhdG1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4iVMmZdGJpccmZIHNpc3RlbSBib290aW5xaSBiaXRpcmRpa2TJmW4gZMmZcmhhbCBzb25yYSDDtnrDvG7DvCBiYcWfbGF0bWFxIGljYXrJmXNpIHZlcmlyLiBCdSB0ZWxlZm9udW4gYcOnxLFsbWFzxLFuxLEgbMmZbmdpZMmZIHbJmSBkYWltYSBpxZ9syZlrIHFhbGFyYXEgdGVsZWZvbnVuIHPDvHLJmXRpbmkgYcWfYcSfxLEgc2FsYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTdGlja3kiIG1zZ2lkPSI3OTE5MTI2MzcyNjA2ODgxNjE0Ij4iZGFpbWkgc2lxbmFsIGfDtm5kyZlybcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IlTJmXRiaXHJmSB5YXnEsW0gYml0ZGlrZMmZbiBzb25yYSBkYSBxYWxhbiDDp8mZdGluIHlhecSxbWxhciBnw7ZuZMmZcm3JmXnJmSBpbWthbiB2ZXJpci4gSMmZZHNpeiBpc3RpZmFkyZkgw6dveCB5YWRkYcWfIGlzdGlmYWTJmXNpbsmZIHPJmWLJmWIgb2xtYXFsYSBwbGFuxZ9ldGkgeWF2YcWfIHbJmSBxZXlyaS1zdGFiaWwgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjgyNTgwMzc2NDIzMjQ0NTA5MSI+IlTJmXRiaXHJmSB5YXnEsW0gYml0ZGlrZMmZbiBzb25yYSBkYSBxYWxhbiDDp8mZdGluIHlhecSxbWxhciBnw7ZuZMmZcm3JmXnJmSBpbWthbiB2ZXJpci4gSMmZZHNpeiBpc3RpZmFkyZkgw6dveCB5YWRkYcWfIGlzdGlmYWTJmXNpbsmZIHPJmWLJmWIgb2xtYXFsYSB0ZWxlZm9udSB5YXZhxZ8gdsmZIHFleXJpLXN0YWJpbCBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDb250YWN0cyIgbXNnaWQ9IjgzNDg0ODExMzE4OTk4ODYxMzEiPiJrb250YWtybGF0xLFuxLF6xLEgb3h1bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1Mjk0ODY2ODU2OTQxMTQ5NjM5Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW5pemTJmSB5ZXJsyZnFn8mZbiBrb250YWt0bGFyxLEgb3h1bWFxIGljYXrJmXNpIHZlcmlyLCB0ZXotdGV6IHrJmW5nIGVsyZlkaXlpbml6LCBlbWFpbGzJmcWfZGl5aW5peiB2yZkgeWEgyZlsYXHJmSBzYXhsYWTEscSfxLFuxLF6IHjDvHN1c2kgaW5kaXZpZHVhbGxhciBkYXhpbCBvbG1hcWxhLiBCdSBpY2F6yZkgdMmZdGJpcWzJmXLJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLF6xLEgc2F4bGFtYcSfYSB2yZkgesmZcsmZcmxpIHTJmXRiaXFsyZlyyZkga29udGFrdCBtyZlsdW1hdGxhcsSxbsSxIHNpemluIGJpbGdpbml6IG9sbWFkYSBwYXlsYcWfbWEgaW1rYW7EsSB5YXJhZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDQwNjU0MTUyNDU3MzAwNjYyIj4iVMmZdGJpccmZwqB0ZXotdGV6IHrJmW5nIGVsyZlkaXlpbml6LCBlLW3JmWt0dWIgZ8O2bmTJmXJkaXlpbml6IHbJmSB5YSDJmWxhccmZIHNheGxhZMSxxJ/EsW7EsXogeMO8c3VzaSBpbmRpdmlkdWFsbGFyIGRheGlsIG9sbWFxbGEgdGVsZWZvbnVudXpkYSB5ZXJsyZnFn8mZbiBrb250YWt0bGFyxLEgb3h1bWFxIGljYXrJmXNpIHZlcmlyLiBCdSBpY2F6yZkgdMmZdGJpcWzJmXLJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLF6xLEgc2F4bGFtYcSfYSB2yZkgesmZcsmZcmxpIHTJmXRiaXFsyZlyyZkga29udGFrdCBtyZlsdW1hdGxhcsSxbsSxIHNpemluIHjJmWLJmXJpbml6IG9sbWFkYSBwYXlsYcWfbWEgaW1rYW7EsSB5YXJhZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ29udGFjdHMiIG1zZ2lkPSI1MTA3NDkyMDg2NDE2NzkzNTQ0Ij4ia29udGFrdGxhcsSxbsSxesSxIGTJmXlpxZ9kaXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzI0MzkzMjUyMTk1MzYwMiI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluaXpkyZlraSB6yZluZyBldG3JmWsgdGV6bGl5aW5peiwgZWxla3Ryb24gcG/Dp3RsYXLEsW7EsXosIMO8bnNpeXnJmXRsyZlyaW5peiBoYXFxxLFuZGEgbcmZbHVtYXRsYXLEsSBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiBCdSBpY2F6yZkga29udGFrdCBtyZlsdW1hdGxhcsSxbsSxbiBzaWxpbm3JmXNpbsmZIGTJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTg5ODY5MjI0NjI1MTYzNTU4Ij4iVMmZdGJpccmZIFNpemluIHrJmW5nIGV0bcmZayB0ZXpsaXlpbml6LCBlbGVrdHJvbiBwb8OndGxhcsSxbsSxeiwgw7xuc2l5ecmZdGzJmXJpbml6IGhhcXHEsW5kYSBtyZlsdW1hdGxhcsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIEJ1bmEga29udGFrdGxhcsSxbiBzaWxpbm3JmXNpIGlta2FuxLEgZMmZIGRheGlsZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGxMb2ciIG1zZ2lkPSIzNDc4MTMzMTg0NjI0MTAyNzM5Ij4iesmZbmcgcWV5ZGl5eWF0xLFuxLEgb3h1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM3MDA2NDUxODQ4NzA3NjAyODUiPiJUyZl0YmlxyZkgZ8mZbMmZbiB2yZkgZ2VkyZluIHrJmW5nbMmZciBoYXFxxLFuZGEgb2xhbiBkYXRhIGRheGlsIG9sbWFxbGEgYsmZcmFiyZlyIHBsYW7Fn2V0aW5pemluIHrJmW5nIHFleWRpeXlhdMSxbsSxIG94dW1hxJ9hIGlta2FuIHZlcmlyLiBCdSBpY2F6yZkgdMmZdGJpcWzJmXLJmSB6yZluZyBxZXlkaXl5YXTEsW7EsXrEsSBzYXhsYW1hxJ9hIGlta2FuIHZlcmlyIHbJmSB6yZlyyZlybGkgdMmZdGJpcWzJmXIgesmZbmcgcWV5ZGl5eWF0IGRhdGFzxLFuxLEgc2l6ZMmZbiB4yZliyZlyc2l6IHBheWxhxZ9hIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3Nzc3MjU3OTY4MTMyMTcyNDQiPiJUyZl0YmlxyZkgdGVsZWZvbiBqdXJuYWzEsW7EsXrEsSBveHVtYcSfYSBpbWthbiB2ZXJpciwgYnVuYSBnyZlsyZluIHbJmSBnZWTJmW4gesmZbmdsyZlyIGhhcXHEsW5kYSBtyZlsdW1hdGxhciBkYSBkYXhpbGRpci4gQnUgaWNhesmZIHTJmXRiaXHJmSB6yZluZyBqdXJuYWzEsSBkYXRhc8SxbsSxIHNheGxhbWHEn2EgaW1rYW4gdmVyaXIga2ksIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIFNpemTJmW4geMmZYsmZcnNpeiBiw7x0w7xuIG3JmWx1bWF0bGFybsSxesSxIHBheWxhxZ9hIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsbExvZyIgbXNnaWQ9Ijg1NTIwNDU2NjQ3NDM0OTkzNTQiPiJ6yZluZyBsb3F1IHlhesSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY2MTgwNjA2MjI3NDExOTI0NSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluaXpkyZlraSB6yZluZyBqdXJuYWzEsW7EsSwgaMmZbcOnaW5pbiBnZWTJmW4gdsmZIGfJmWzJmW4gesmZbmdsyZlyaW4gc2l5YWjEsXPEsW7EsSBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZaywgesmZbmcganVybmFsxLFuxLF6YSBkyZl5acWfaWtsaWsgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4iVMmZdGJpccmZIHNpemluIGRheGlsIG9sYW4gdsmZIGdlZMmZbiB6yZluZ2zJmXIgZGF4aWwgb2xtYXFsYSB0ZWxlZm9uIHrJmW5naSBsb3FsYXLEsW7EsXrEsSByZWRha3TJmSBldG3JmWsgaWNhesmZc2kgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gdGVsZWZvbiBsb3FsYXLEsW7EsXrEsSBzaWxtyZlrIHbJmSB5YSByZWRha3TJmSBldG3JmWsgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUHJvZmlsZSIgbXNnaWQ9IjQ3MDE4ODk4NTI2MTI3MTY2NzgiPiLDtnoga29udGFrdCBrYXJ0xLFuxLF6xLEgb3h1eXVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDYyNDc1MTUxODQ5ODg4ODQ4Ij4iVMmZdGJpccmZIGNpaGF6xLFuxLF6ZGEgeWVybMmZxZ/JmW4gYWTEsW7EsXogdsmZIGtvbnRha3QgbcmZbHVtYXRsYXLEsW7EsXoga2ltaSDFn8mZeHNpIHByb2ZpbCBtyZlsdW1hdGxhcsSxbsSxIG94dW1hIGljYXrJmXNpIHZlcmlyLiBCdSBvIGRlbcmZa2RpciBraSwgdMmZdGJpcSBzaXppIHRhbsSxeWEgdsmZIHNpemluIHByb2ZpbCBtyZlsdW1hdGxhcsSxbsSxesSxIGJhxZ9xYWxhcsSxbmEgZ8O2bmTJmXLJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiJzaXppbiBrb250YWt0IGthcnTEsW7EsXpkYSBkyZl5acWfaWtsaWsgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTU1MjA4NDI5NDU5ODQ2NTg5OSI+IlTJmXRiaXHJmSBjaWhhesSxbsSxemRhIHllcmzJmcWfyZluIGFkxLFuxLF6IHbJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLF6IGtpbWkgxZ/JmXhzaSBwcm9maWwgbcmZbHVtYXRsYXLEsW7EsSBkyZl5acWfbcmZayB2yZkgeWEgyZlsYXbJmSBldG3JmWsgaWNhesmZc2kgdmVyaXIuIEJ1IG8gZGVtyZlrZGlyIGtpLCB0yZl0YmlxIHNpemkgdGFuxLF5YSB2yZkgc2l6aW4gcHJvZmlsIG3JmWx1bWF0bGFyxLFuxLF6xLEgYmHFn3FhbGFyxLFuYSBnw7ZuZMmZcsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMjY4OTIwOTU2MTUyNDE5MTcwIj4ic29zaWFsIGxlbnRpbml6aSBveHV5dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDI1NTcwNjAyNzE3MjA1MDg3MiI+IlTJmXRiaXHJmSBTaXppbiB2yZkgZG9zdGxhcsSxbsSxesSxbiBzb3NpYWwgZ8O8bmPJmWxsyZlyaW5pIMmZbGTJmSBldG3JmWsgdsmZIHNpbnhyb25pesmZIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4gTcmZbHVtYXQgcGF5bGHFn2Fya8mZbiBkaXFxyZl0bGkgb2x1biAtIGtvbmZpZGVuc2lhbGzEsXFkYW4gYXPEsWzEsSBvbG1heWFyYXEgYnUsIFNpeiB2yZkgZG9zdGxhcsSxbsSxeiBhcmFzxLFuZGEgc29zaWFsIMWfyZliyZlryZlsyZlyZMmZa2kgZGFuxLHFn8SxxJ/EsSBveHVtYXEgaW1rYW7EsSB2ZXJpci4gUWV5ZDogYnUgaWNhesmZIGLDvHTDvG4gc29zaWFsIMWfyZliyZlryZlsyZlyZMmZIGljcmEgZWRpbMmZIGJpbG3JmXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM1MDQxNzkyMjI0OTMyMzU2NDUiPiJzb3NpYWwgYXjEsW7EsW7EsXphIHlhesSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzA4NjU1NzU1MjIwNDExNDg0OSI+IlTJmXRiaXHJmSBkb3N0bGFyxLFuxLF6ZGFuIHNvc2lhbCB5ZW5pbMmZbm3JmWzJmXJpIGfDtnN0yZlybcmZIGljYXrJmXNpIHZlcmlyLiBNyZlsdW1hdCBwYXlsYcWfYXJryZluIGRpcXHJmXRsaSBvbHVuIC0gYnUgZG9zdGxhcsSxbsSxemRhbiBnyZlsyZluIG1lc2FqxLEgZW1hbCBldG3JmXnJmSBpem4gdmVyaXIuIFFleWQ6IGJ1IGljYXrJmSBiw7x0w7xuIHNvc2lhbCDFn8mZYsmZa8mZbMmZcsmZIMWfYW1pbCBvbHVubWF5YSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsZW5kYXIiIG1zZ2lkPSI1OTcyNzI3NTYwMjU3NjEyMzk4Ij4idMmZcXZpbSB0yZlkYmlybMmZcmluaSB2yZkga29uZmlkZW5zaWFsIG3JmWx1bWF0bGFyxLEgb3h1eXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MjE2NDYyMDQ5MDU3NjU4NzIzIj4iVMmZdGJpccmZIGRvc3RsYXLEsW7EsXrEsW4gdsmZIMmZbcmZa2RhxZ9sYXLEsW7EsXrEsW4gcGxhbsWfZXRpbml6ZMmZIHllcmzJmcWfyZluIGthbGVuZGFyIHTJmWRiaXJsyZlyaW5pIG94dW1hxJ9hIGljYXrJmSB2ZXJpci4gQnUgdMmZdGJpccmZIGtvbmZpZGVuc2lhbGzEsXEgdsmZIHlhIGjJmXNzYXNsxLFxZGFuIGFzxLFsxLEgb2xtYXlhcmFxIHNpemluIGthbGVuZGFyIG3JmWx1bWF0bGFyxLFuxLF6xLEgcGF5bGHFn21hcSB2yZkgeWEgc2F4bGFtYcSfYSBpbWthbiB5YXJhZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NDM0NTQ4NjgyNDcwODUxNTgzIj4iVMmZdGJpccmZIGRvc3QgdsmZIMmZbcmZa2RhxZ9sYXJhIG3JmXhzdXMgb2xhbmxhciBkYXhpbCBvbG1hcWxhIHBsYW7Fn2V0ZMmZIHllcmzJmcWfyZluIGLDvHTDvG4ga2FsZW5kYXIgdMmZdGJpcWzJmXJpbmkgb3h1bWFxIGljYXrJmXNpIHZlcmlyLiBCdSB0yZl0YmlxyZkga29uZmlkZW5zaWFsbMSxcSB2yZkgeWEgaMmZc3Nhc2zEsXFkYW4gYXPEsWzEsSBvbG1heWFyYXEsIFNpemluIGthbGVuZGFyIG3JmWx1bWF0bGFyxLFuxLF6xLEgcGF5bGHFn21hcSB2yZkgeWEgc2F4bGFtYXEgaW1rYW7EsSB5YXJhZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsZW5kYXIiIG1zZ2lkPSI4NDM4ODc0NzU1MTkzODI1NjQ3Ij4iY2loYXogc2FoaWJpbmluIGljYXrJmXNpIG9sbWFkYW4gdMmZcXZpbSB0yZlkYmlybMmZcmkgyZlsYXbJmSBldG3JmWsgdsmZIHlhIGTJmXlpxZ9tyZlrLCBidW51biBoYXFxxLFuZGEgYmlsZGlyacWfbMmZciBnw7ZuZMmZcm3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njc5MDM1NTIwMTEzNjY4NTI4Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW5pemTJmWtpIHTJmWRiaXJsyZlyaSBkyZl5acWfbcmZecmZLCB0yZlkYmlyIMmZbGF2yZkgZXRtyZl5yZkgdsmZIHlhIHNpbG3JmXnJmSBpbWthbiB2ZXJpci4gQnVuYSBTaXppbiBkb3N0bGFyxLFuxLF6bGEgdsmZIGjJmW1rYXJsYXLEsW7EsXpsYSBiaXJsaWtkyZkgaGF6xLFybGFkxLHEn8SxbsSxeiB0yZlkYmlybMmZciBkyZkgZGF4aWxkaXIuIEJ1LCB0yZlkYmlyyZkgU2l6aW4gYWTEsW7EsXpkYW4gdsmZIFNpemTJmW4geMmZYsmZcnNpeiwgdMmZcXZpbSBzYWhpYmkga2ltaSBtZXNhaiBnw7ZuZMmZcm3JmWsgaW1rYW7EsW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+IkRvc3RsYXLEsW7EsXogdsmZIGjJmW1rYXJsYXLEsW7EsXphIG3JmXhzdXMgb2xhbmxhciBkYSBkYXhpbCBvbG1hcWxhLCB0yZl0YmlxyZkgdGVsZWZvbnVudXpkYWvEsSB0yZlkYmlybMmZcmkgZMmZeWnFn23JmXnJmSwgdMmZZGJpciDJmWxhdsmZIGV0bcmZecmZIHbJmSB5YSBzaWxtyZl5yZkgaW1rYW4gdmVyaXIuIEJ1LCB0yZlkYmlyyZkgU2l6aW4gYWTEsW7EsXpkYW4gdsmZIFNpemTJmW4geMmZYsmZcnNpeiwgdMmZcXZpbSBzYWhpYmkga2ltaSBtZXNhaiBnw7ZuZMmZcm3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9Ijg2ODgzMzQ5NzQwMzY4MjMzMzAiPiJ0ZXN0IMO8w6fDvG4gc2F4dGEgbcmZa2FuIG3JmW5iyZlsyZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiJUZXN0IMO8w6fDvG4gc2F4dGEgbcmZa2FuIG3JmW5iyZlsyZlyaSB5YXJhZMSxbiB2yZkgeWEgeWVuaSBtyZlrYW4gcHJvdmF5ZGVyaSBxdXJhxZ9kxLFyxLFuLiBCdSB0yZl0YmlxbMmZcsmZIEdQUyB2yZkgbcmZa2FuIHByb3ZheWRlcmzJmXJpIGtpbWkgbcmZa2FuIG3JmW5iyZlsyZlyaW5kyZluIGFsxLFuYW4gbcmZa2FuIHbJmS95YSBzdGF0dXNsYXLEsSB5ZW5pZMmZbiB5YXptYcSfYSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSIyODM2MzA4MDc2NzIwNTUzODM3Ij4iyZlsYXbJmSBtyZlrYW4gcHJvdmF5ZGVyaSDJmW1ybMmZcmluyZkgw6fEsXjEscWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iNTk0NTE2NjY0MjMzNTgwMDc2MyI+IlTJmXRiaXHJmSDJmWxhdsmZIG3JmWthbiBwcm92YXlkZXJpIMmZbXJsyZlyaW7JmSBkYXhpbCBvbG1hcSBpbWthbsSxIHZlcmlyLiBCdSB0yZl0YmlxyZkgR1BTIMmZbcmZbGl5eWF0xLFuYSB2yZkgeWEgZGlnyZlyIG3JmWthbiBtyZluYsmZbMmZcmluyZkgbWFuZSBvbG1hcSBpbWthbsSxIHZlcsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+Ik3JmWthbiBwcm92YXlkZXJpbmkgcXVyYcWfZMSxcm1hcSBpY2F6yZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IlllbmkgeWVybMmZxZ9tyZkgdMmZY2hpemF0w6fEsXPEsW7EsSB0ZXN0IGV0bcmZayB2yZkgeWEgcXVyYcWfZMSxcm1hcSDDvMOnw7xuIG1vY2sgeWVybMmZxZ9tyZkgbcmZbmLJmWzJmXJpIHlhcmF0LiBCdSB0yZl0YmlxyZkgeWVybMmZxZ9tyZluaW4gdsmZL3lhIGRpZ8mZciB5ZXJsyZnFn23JmSBtyZluYsmZbMmZcmluZMmZbiBHUFMgdsmZIHlhIHllcmzJmcWfbcmZIHTJmWNoaXphdMOnxLFsYXLEsSBxYXnEsXRtxLHFnyBzdGF0dXNsYXLEsW4gbMmZxJ92IGV0bcmZc2luyZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSIxMTkxODk4MDYxOTY1MjczMzcyIj4iZMmZcWlxIHllcmkgKEdQUyB2yZkgxZ/JmWLJmWvJmS3JmXNhc2zEsSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4iUWxvYmFsIFBvemlzaXlhIFNpc3RlbWluaSB2yZkgeWEgxZ/JmWLJmWvJmSBxw7xsbMmZbMmZcmkgdsmZIFdpLUZpIGtpbWkgxZ/JmWLJmWvJmSBtyZlrYW7EsW7EsSBpc3RpZmFkyZkgZWTJmXLJmWsgdMmZdGJpccmZIFNpemluIGTJmXFpcSB5ZXJpbml6aSB0yZl5aW4gZXRtyZl5yZkgaW1rYW4gdmVyaXIuIEJ1IG3JmWthbiB4aWRtyZl0bMmZcmkgYWt0aXZsyZnFn2RpcmlsbcmZbGlkaXJsyZlyIGtpLCBTaXogdMmZdGJpcWkgaXN0aWZhZMmZIGVkyZluIHphbWFuIHTJmXRiaXEgb25sYXLEsSBpc3RpZmFkyZkgZWTJmSBiaWxzaW4uIFTJmXRiaXFsyZlyIFNpemluIGhhcmFkYSBvbG1hxJ/EsW7EsXrEsSBidW51biB2YXNpdMmZc2lsyZkgdMmZeWluIGVkyZljyZlrLCBleW5pIHphbWFuZGEsIGJ1IHhpZG3JmXQgyZlsYXbJmSBiYXRhcmV5YSBlbmVyamlzaSBhcGFyYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjQ4ODc4OTUzNjIzNTQyMzk2MjgiPiJ0yZl4bWluaSBtyZlrYW4gKMWfyZliyZlryZkgyZlzYXNsxLEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSIyNTM4MjAwMTg0MzczMzAyMjk1Ij4iVMmZdGJpccmZIHTJmXhtaW5pIHllcmluaXppIGFsbWFxIMO8w6fDvG4gaW1rYW4gdmVyaXIuIEJ1IHllciwgeWVybMmZxZ9tyZkgeGlkbcmZdGzJmXJpIHTJmXLJmWZpbmTJmW4gbW9iaWwgccO8bGzJmWzJmXIgdsmZIFdpLUZpIGtpbWkgxZ/JmWLJmWvJmSB5ZXJsyZnFn23JmSBtyZluYsmZbMmZcmTJmW4gaXN0aWZhZMmZIGV0bcmZa2zJmSDJmWxkyZkgZWRpbGlyLiBCdSB5ZXJsyZnFn23JmSB4aWRtyZl0bMmZcmkgdMmZdGJpcWluIG9ubGFyZGFuIGlzdGlmYWTJmXNpIMO8w6fDvG4gYcOnxLFxIHbJmSBjaWhhesSxbsSxesSxbiBvbmxhcsSxIGlzdGlmYWTJmXNpIMO8w6fDvG4gbcO2dmN1ZCBvbG1hbMSxZMSxci4gVMmZdGJpcWzJmXIgYnVuZGFuIHNpemluIHTJmXhtaW7JmW4gaGFyYWRhIG9sZHXEn3VudXp1IG3DvMmZeXnJmW5syZnFn2Rpcm3JmWsgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjIzNjM5Njk2NDE3OTIzODg5NDciPiJTdXJmYWNlRmxpbmdlclwnyZkgZGF4aWwgb2xtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJUyZl0YmlxyZkgYcWfYcSfxLEgc8mZdml5ecmZbGkgU3VyZmFjZUZuZ2VyIMO2esmZbGxpa2zJmXJpbmkgaXN0aWZhZMmZIGV0bcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJmcmV5bSBidWZlcmkgb3h1eXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IlTJmXRiaXHJmSBmcmV5bSBidWZlcmluaW4ga29udGVudGluaSBveHVtYXEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iSW5wdXRGbGluZ2VyIGtlw6dpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iVMmZdGJpccmZIGHFn2HEn8SxIHPJmXZpeXnJmWxpIElucHV0RmxpbmdlciBmdW5rc2l5YWxhcsSxbsSxIGlzdGlmYWTJmSBldG3JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJXaWZpIGfDtnLDvG50w7xsyZlyaW5pIHF1cmHFn2TEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJUyZl0YmlxyZkgV2lmaSBnw7Zyw7xudMO8bMmZcmluaSBxdXJhxZ9kxLFybWHEn2EgdsmZIG9ubGFyYSBxb8WfdWxtYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IldpRmkgZ8O2csO8bnTDvGzJmXJpbmkgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+IlTJmXRiaXHJmSBXaWZpIGRpc3BsZXlsyZlyaW5pbiBhxZ9hxJ/EsSBzyZl2aXl5yZlsaSBmdW5rc2l5YWxhcsSxbsSxIGlkYXLJmSBldG3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjY4NTcxMzQ0OTg0MDIzNDY3MDgiPiJhdWRpbyDDp8SxeMSxxZ/EsSBhbMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiJUyZl0YmlxyZkgYXVkaW8gw6fEsXjEscWfxLEgYWxtYXEgdsmZIHllbmlkyZluIHnDtm5syZluZGlybcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjI0NjgyODc3MzU4OTA5NDAyMyI+InZpZGVvIMOnxLF4xLHFn8SxIGFsxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMzU5NDgxNjU4MDM0MTQ5ODYwIj4iVMmZdGJpccmZIHZpZGVvIMOnxLF4xLHFn8SxIGFsbWFxIHbJmSB5ZW5pZMmZbiB5w7ZubMmZbmRpcm3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9Ijc4MTUzOTg5NjkzMDMzODIwMTYiPiJ0yZlobMO8a8mZc2l6IHZpZGVvIMOnxLF4xLHFn8SxIGFsxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjc3OTc5MzA2NDcwOTM1MDI4OSI+IlTJmXRiaXHJmSBnw7x2yZlubGkgdmlkZW8gw6fEsXjEscWfxLEgYWxtYXEgdsmZIHllbmlkyZluIHnDtm5syZluZGlybcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjYwOTU4NTk5MzcwNjkxNDYwODYiPiJhdWRpbyBheWFybGFyxLFuxLF6xLEgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiJUyZl0YmlxyZkgc8mZcyB2yZkgaGFuc8SxIHNwaWtlcmluIMOnxLF4xLHFnyDDvMOnw7xuIGlzdGlmYWTJmSBvbHVuZHXEn3Uga2ltaSBxbG9iYWwgc8mZcyBheWFybGFyxLFuxLEgZMmZeWnFn2Rpcm3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+InPJmXMgeWF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iVMmZdGJpccmZIG1pa3JvZm9ubGEgYXVkaW8geWF6bWFxIGljYXrJmXNpIHZlcmlyLiDEsGNhesmZIHTJmXRiaXHJmSBzaXppbiB0yZlzZGlxaW5peiBvbG1hZGFuIGlzdMmZbmlsyZluIHphbWFuIHPJmXMgeWF6bWEgaXpuaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLFn8mZa2lsIHbJmSB2aWRlbyDDp8mZa23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iVMmZdGJpccmZIGthbWVyYSBpbMmZIMWfyZlraWwgdsmZIHZpZGVvIMOnyZlrbcmZecmZIGlta2FuIHlhcmFkxLFyLiBCdSBpY2F6yZkgdMmZdGJpccmZIHNpemluIHTJmXNkaXFpbml6IG9sbWFkYW4ga2FtZXJhZGFuIGlzdGlmYWTJmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiJrYW1lcmEgaXN0aWZhZMmZIGVkaWxkaWtkyZkgTEVEIGfDtnN0yZlyaWNpIMO2dMO8csO8bG3JmXNpbmkgZGVha3RpdiBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iNDc2NDU4NTQ2NTQ4MDI5NTM0MSI+IsOWbmPJmWTJmW4gcXVyYcWfZMSxcsSxbG3EscWfIHNpc3RlbSB0yZl0YmlxaW7JmSBrYW1lcmEgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbMmZbiBMRUQgaW5kaWthdG9ydW51IHPDtm5kw7xybcmZayBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyOTYxMjkyMjA1NzY0NDg4MzA0Ij4icGxhbsWfZXRpIGRhaW1pIG9sYXJhcSBhcmFkYW4gcWFsZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4idGVsZWZvbnUgaMmZbWnFn8mZbGlrIGRlYWt0aXYgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMzQ4MTg4MDgwMDE2OTk1MzAiPiJUyZl0YmlxyZkgcGxhbsWfZXRpIGJpcmTJmWbJmWxpayBkZWFrdGl2IGV0bcmZecmZIGlta2FuIHZlcmlyLiBCdSBkYSDDp294IHTJmWhsw7xryZlsaWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3ODg5MDMyOTc2MjcyODMwOTkiPiJUyZl0YmlxyZkgYsO8dMO8biB0ZWxlZm9udSBiaXJkyZlmyZlsaWsgZGVha3RpdmzJmcWfZGlybcmZecmZIGlta2FuIHZlcmlyLiBCdSDDp294IHTJmWhsw7xryZlsaWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQzNjYzNDk3MjU2MTc5NTAwMiI+InBsYW7Fn2V0aSB5ZW5pZMmZbiB5w7xrbMmZbm3JmXnJmSBtyZljYnVyIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4OTg1NjA4NzI0NjI2MzgyNDIiPiJ0ZWxlZm9udSB5ZW5pZMmZbiB5w7xrbMmZbm3JmXnJmSBtyZljYnVyIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgxNzIwNTYxODAwNjM3MDA3NDEiPiJUyZl0YmlxyZkgcGxhbsWfZXRpIHllbmlkyZluIHnDvGtsyZltyZl5yZkgbcmZY2J1ciBldG3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MzI2MDA4MTI0Mjg5OTg5OTY5Ij4iVMmZdGJpccmZIHRlbGVmb251IHllbmlkyZluIHnDvGtsyZltyZl5yZkgbcmZY2J1ciBldG3JmWsgw7zDp8O8biBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+IlVTQiB5YWRkYcWfIGZheWwgc2lzdGVtaW7JmSBkYXhpbCBvbG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiJTRCBLYXJ0IGZheWwgc2lzdGVtaW7JmSBkYXhpbCBvbG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIG1zZ2lkPSIxODI5MjkwNzAxNjU4OTkyMzQ3Ij4iVMmZdGJpccmZIHNpbGluyZliaWzJmW4geWFkZGHFn2xhcsSxIHbJmSB5YSBmYXlsIHNpc3RlbWluaSBxdXJhxZ9kxLFybWEgdsmZIGF5xLFybWEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+IlVTQiB5YWRkYcWfxLEgc2lsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+IlNEIGthcnTEsSBzaWxpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgbXNnaWQ9Ijg3ODQyNjgyNDY3NzkxOTg2MjciPiJUyZl0YmlxyZkgw6fEsXhhcsSxbGEgYmlsyZluIHlhZGRhxZ/EsSBmb3JtYXQgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2FjY2VzcyIgbXNnaWQ9IjM0MTEzMzg2MzIwMDIxOTM4NDYiPiJkYXhpbGkgeWFkZGHFn8SxbsSxeiBoYXFxxLFuZGEgbcmZbHVtYXQgyZlsZMmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+IlTJmXRiaXHJmSBkYXhpbGkgeWFkZGHFnyBoYXFxxLFuZGEgbcmZbHVtYXQgYWxtYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfY3JlYXRlIiBtc2dpZD0iNjQxNDc1NzIzNDc4OTMzNjMyNyI+ImRheGlsaSB5YWRkYcWfIHlhcmF0bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19jcmVhdGUiIG1zZ2lkPSI0NTU4ODY5MjczNTg1ODU2ODc2Ij4iVMmZdGJpccmZIGRheGlsaSB5YWRkYcWfIHlhcmF0bWFxIMO8w6fDvG4gaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI1MjY5MjgzMjgzMDE2MTgwMjIiPiJkYXhpbGkgeWFkZGHFn8SxIG3JmWh2IGV0bcmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19kZXN0cm95IiBtc2dpZD0iNzIxODc0OTI4NjE0NTUyNjUzNyI+IlTJmXRiaXHJmSBkYXhpbGkgeWFkZGHFn8SxIG3JmWh2IGV0bcmZIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iODg3Nzk5ODEwMTk0NDk5OTM4NiI+ImRheGlsaSB5YWRkYcWfxLEgbW9udGFqIHbJmSB5YSBkZW1vbnRhaiBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSIzNDUxMzYwMTE0OTAyNDkwOTI5Ij4iVMmZdGJpccmZIGRheGlsaSB5YWRkYcWfxLEgcXVyYcWfZMSxcm1hL2F5xLFybWEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX3JlbmFtZSIgbXNnaWQ9Ijc0OTY2MzM5NTQwODA0NzI0MTciPiJkYXhpbGkgeWFkZGHFn8SxbiBhZMSxbsSxIGTJmXlpxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX3JlbmFtZSIgbXNnaWQ9IjE3OTQ3NTc1ODg0NzIxMjc2NzUiPiJUyZl0YmlxyZkgZGF4aWxpIHlhZGRhxZ/EsW4gYWTEsW7EsSBkyZl5acWfbcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJ2aWJyYXNpeWF5YSBuyZl6YXLJmXQgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iVMmZdGJpccmZIHZpYnJhdG9ydSBpZGFyyZkgZXRtyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IkZsYXNoIGnFn8SxxJ/EsW7EsSBpZGFyyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iVMmZdGJpccmZIHNpcW5hbCBpxZ/EscSfxLEgbmEgbsmZemFyyZl0IGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNiIiBtc2dpZD0iMTExMzQ1MzQzMDY0NTQwMjcyMyI+IlVTQiBjaWhhemxhciDDvMOnw7xuIHTJmXJjaWhsyZlyaSB2yZkgaWNhesmZbMmZcmkgaWRhcsmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiJUyZl0YmlxyZkgVVNCIGNpaGF6bGFyIMO8w6fDvG4gb2xhbiB0yZlyY2lobMmZcmkgdsmZIGljYXrJmWzJmXJpIGlkYXLJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc010cCIgbXNnaWQ9IjQ5NTM0Njg2NzY3OTU5MTcwNDIiPiJNVFAgcHJvdG9rb2wgaMmZeWF0YSBrZcOnaXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTXRwIiBtc2dpZD0iNjUzMjk2MTIwMDQ4Njc5MTU3MCI+Iktlcm5lbCBNVFAgZHJheXZlcsmZIGdpcmnFn8mZIGlta2FuIHZlcmlyIGtpLCBNVFAgVVNCIHByb3Rva29sdW51IGjJmXlhdGEga2XDp2lyc2luLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjQxNDgyOTA4NjA0MDA2NTkxNDYiPiJhdmFkYW5sxLHEn8SxIHPEsW5hcSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjY1OTc5NjQxOTEyMDgwMTY2MDUiPiJUyZl0YmlxyZkgYXZhZGFubMSxxJ/EsSB5b3hsYW1hcSDDvMOnw7xuIG3DvHh0yZlsaWYgcGVyaWZlcml5YWxhcsSxIGtvbnRyb2wgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4idGVsZWZvbiBuw7ZtcsmZbMmZcmluyZkgYmlyYmHFn2EgesmZbmcgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJUyZl0YmlxyZkgU2l6aW4gbcO8ZGF4aWzJmW5peiBvbG1hZGFuIHRlbGVmb24gesmZbmdsyZlyaSBldG3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIFNpemTJmW4geMmZYsmZcnNpeiDFn8mZa2lsZMmZIG3DvHh0yZlsaWYgesmZbmdsyZlyIGVkyZlyyZlrLCBTaXrJmSBtYWRkaSB6aXlhbiB2dXJhIGJpbMmZci4gUWV5ZDogQnUsIHTJmXRiaXFsyZlyyZkgdMmZY2lsaSBuw7ZtcsmZbMmZcsmZIHrJmW5nIGV0bcmZecmZIGljYXrJmSB2ZXJtaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjQxOTgzNDkyMTExMDg0OTc4NzkiPiJpc3TJmW5pbMmZbiBuw7ZtcsmZecmZIGJpcmJhxZ9hIHrJmW5nIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiJUyZl0YmlxyZkgU2l6aW4gbcO8ZGF4aWzJmW5peiBvbG1hZGFuLCB0yZljaWxpIHrJmW5nbMmZciBkyZkgZGF4aWwgb2xtYXFsYSwgaXN0yZluaWzJmW4gdGVsZWZvbiB6yZluZ2luaSBldG3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWssIHTJmWNpbGkgbsO2bXLJmWzJmXLJmSBxYW51bnN1eiB6yZluZyB2dXJtYXFsYSBTaXppbiDDvMOnw7xuIGjDvHF1cWkgcHJvYmxlbWzJmXIgeWFyYWRhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4iQ0RNQSBwbGFuxZ9ldCBheWFybGFyxLFuYSBiaXJiYcWfYSBiYcWfbGFtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTYwNDg0ODA5NTMxNTQyMTQyNSI+IkNETUEgdGVsZWZvbiBxdXJhxZ9kxLFybWFsYXLEsW5hIGJpcmJhxZ9hIGJhxZ9sYW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+IlTJmXRiaXHJmSBDRE1BIGhhesSxcmzEscSfxLFuxLEgYmHFn2xhdG1hIGljYXrJmXNpIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgZWh0aXlhYyBvbG1hZMSxcWRhIENETUEgaGF6xLFybMSxxJ/EsW7EsSBiYcWfbGFkYSBiaWzJmXJsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+Im3JmWthbiBnw7xuY8mZbGzJmW3JmSBiaWxkaXJpxZ9syZlyaW5pIGlkYXLJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iMTEyMDc0MTU1Nzg5MTQzODg3NiI+IlTJmXRiaXHJmSByYWRpb2RhbiBnyZlsyZluIG3JmWthbiBnw7xuY8mZbGzJmW5tyZlsyZlyaW5pIGFrdGl2IHbJmSB5YSBkZWFrdGl2IGV0bcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+InFleWRpeXlhdCB4w7xzdXNpeXnJmXRsyZlyaW5pIMmZbGTJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI0MDI0NTI2OTY4NjMwMTk0MTI4Ij4iVMmZdGJpccmZIGdpcmnFnyBxZXlkaSBzZXJ2aXNpIHTJmXLJmWZpbmTJmW4gecO8a2zJmW5tacWfIG3DvGxraXl5yZl0yZkgZ2lyacWfaSBveHVtYXEveWF6bWFxIGlta2FubCB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gbsmZesmZcmTJmSB0dXR1bG1hecSxYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiJ2aWRjZXRsyZlyIHNlw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kR2FkZ2V0IiBtc2dpZD0iODI2MTMyNjkzODU5OTA0OTI5MCI+IlTJmXRiaXHJmSBzaXN0ZW3JmSBoYW5zxLEgdmlkY2V0aW4gaGFuc8SxIHTJmXRiaXEgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbMmZIGJpbG3JmXNpbmkgZGVtyZl5yZkgaWNhesmZIHZlcmlyLiBCdSBpY2F6yZlsaSB0yZl0YmlxbMmZciDFn8mZeHNpIG3JmWx1bWF0bGFyYSB2yZkgZGlnyZlyIHTJmXRiaXFsyZlyyZkgw6fEsXjEscWfIHZlcsmZIGJpbMmZci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIMO8w6fDvG4gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iODQyMzkyMzc3NzY1OTI5MjIyOCI+InRlbGVmb24gc3RhdHVzdW51IGTJmXlpxZ9tyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9IjEwMjk4Nzc1MjkwMDc2ODY3MzIiPiJUyZl0YmlxyZkgY2loYXrEsW4gdGVsZWZvbiBmdW5rc2l5YWxhcsSxbsSxIGlkYXLJmSBldG3JmWsgaW1rYW7EsSB2ZXJpci4gQmVsyZkgaWNhesmZbGkgdMmZdGJpcSBTaXppIHjJmWLJmXJkYXIgZXRtyZlkyZluIMWfyZliyZlryZlsyZlyaSBxb8WfYSwgdGVsZWZvbiByYWRpb3N1bnUgeWFuZMSxcsSxYi1zw7ZuZMO8csmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iOTE3ODIyODUyNDUwNzYxMDQ4NiI+InRlbGVmb24gc3RhdHVzdW51IHbJmSBpZGVudGlmaWthc2l5YW7EsSBveHV5dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjE2MzkyMTI3NzE4MjYxMjU1MjgiPiJUyZl0YmlxyZkgY2loYXrEsW4gdGVsZWZvbiBmdW5rc2l5YWxhcsSxbmEgZ2lyacWfIGljYXrJmXNpIHZlcmlyLiBCZWzJmSBpY2F6yZlsaSB0yZl0YmlxIGJ1IHRlbGVmb251biBuw7ZtcsmZc2luaSB2yZkgY2loYXogxLBEXCduaSwgesmZbmdpbiBha3RpdiBvbHViLW9sbWFkxLHEn8SxbsSxIHbJmSB6yZluZyBlZGlsyZluIG7Dtm1yyZluaSBtw7zJmXl5yZluIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiJwbGFuxZ9ldGluIHl1eHUgcmVqaW1pbmluIHFhcsWfxLFzxLFuxLEgYWxtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTczNDgwMTg3OTQxNDk2MTMwIj4idGVsZWZvbnVuIHl1eHUgcmVqaW1pbsmZIGtlw6dtyZlzaW5pIMmZbmfJmWxsyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluIHl1eHUgcmVqaW1pbmkgcWFkYcSfYW4gZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NTU5MTAwNjc3MzcyOTI4NzU0Ij4iVMmZdGJpccmZIHRlbGVmb251biB5dXh1IHJlamltaW5pIHFhZGHEn2FuIGV0bcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3ODcwMzQ3MjI2MTYzNTA0MTciPiJwbGFuxZ9ldGkgeWFuZMSxcm1hIHbJmSB5YSBzw7ZuZMO8cm3JmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTI4NjIyNDcwOTgwOTQzMjA2Ij4idGVsZWZvbnUgeWFuZMSxcm1hcSB2yZkgeWEgc8O2bmTDvHJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiJUyZl0YmlxyZkgcGxhbsWfZXRpIHlhbmTEsXJtYcSfYSB2yZkgc8O2bmTDvHJtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2MDM3MDU3MzQ4NDYzMTMxMDMyIj4iVMmZdGJpccmZIHRlbGVmb251IHlhbmTEsXLEsWIgc8O2bmTDvHJtyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mYWN0b3J5VGVzdCIgbXNnaWQ9IjM3MTUyMjU0OTI2OTY0MTYxODciPiJ6YXZvZCB0ZXN0IHJlamltaW5kyZkgacWfbMmZeWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NTIwNTkzMTgzNTk2NTMwOTEiPiJQbGFuxZ9ldCBhdmFkYW5sxLHEn8SxbmEgdGFtIGdpcmnFn8mZIGlta2FuIHZlcm3JmWtsyZkgYcWfYcSfxLEgc8mZdml5ecmZbGkgaXN0ZWhzYWzDp8SxIHPEsW5hxJ/EsSBraW1pIGnFn2zJmXlpci4gWWFsbsSxeiBwbGFuxZ9ldCBpc3RlaHNhbMOnxLEgc8SxbmFxIHJlamltaW5kyZkgb2xkdXFkYSBpxZ9syZl5aXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTM2NjQ0OTkwMzE5MjQ0ODAyIj4iQmlyIGHFn2HEn8SxIHPJmXZpeXnJmWxpIGlzdGVoc2Fsw6fEsSB0ZXN0aSBraW1pIMOnYWzEscWfZMSxcsSxbiwgdGVsZWZvbiBoYXJkd2FyZSDDvMOnw7xuIHRhbSBnaXJpxZ8gaW1rYW7EsSB2ZXJpci4gQW5jYXEgdGVsZWZvbiwgaXN0ZWhzYWzDp8SxIHRlc3QgcmVqaW1pbmTJmSDDp2FsxLHFn2TEscSfxLEgemFtYW4gYWt0aXZkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXIiIG1zZ2lkPSI2NjI3MTkyMzMzMzczNDY1MTQzIj4iZGl2YXIga2HEn8SxesSxIHllcmzJmcWfZGlyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4iVMmZdGJpccmZIHNpc3RlbcmZIGRpdmFyIGthxJ/EsXrEsSB5ZXJsyZnFn2Rpcm3JmWsgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjMyNzg2MDgxNjU5Nzc3MzY1MzgiPiJkaXZhciBrYcSfxLF6xLEgw7Zsw6fDvHPDvG7DvCB2ZXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iODIzNTc4NDM4NDIyMzczMDA5MSI+IlTJmXRiaXHJmSBzaXN0ZW0gZGl2YXIga2HEn8SxesSxIMO2bMOnw7xzw7wgZ8O2c3TJmXJpxZ9syZlyaW5pIG3DvMmZeXnJmW4gZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXN0ZXJDbGVhciIgbXNnaWQ9IjIzMTU3NTA0MjMxMzk2OTczOTciPiJmYWJyaWsgZGVmb2x0dW5hIHPEsWbEsXJsYW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hc3RlckNsZWFyIiBtc2dpZD0iMzY2NTM4MDQ5MjYzMzkxMDIyNiI+IlTJmXRiaXHJmSBiw7x0w7xuIG3JmWx1bWF0bGFyxLEsIG5pemFtbGFyxLEgdsmZIHF1cmHFn2TEsXLEsWxtxLHFnyB0yZl0YmlxbMmZcmkgc2lsyZlyyZlrIHNpc3RlbWkgZmFicmlrIG5pemFtbGFyxLFuYSBxYXl0YXJtYXEgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWUiIG1zZ2lkPSIyMDIxNjE0ODI5NTkxNzc1NjQ2Ij4idmF4dMSxIHTJmXlpbiBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTg5NjM0MTQzODE1MTE1Mjg4MSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluIHNhYXQgdmF4dMSxbsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NTU3MDI3MzA3MzgwMjAiPiJUyZl0YmlxyZkgdGVsZWZvbnVuIHNhYXQgdmF4dMSxbsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lWm9uZSIgbXNnaWQ9IjI5NDUwNzk4MDEwMTMwNzczNDAiPiJ2YXh0IHpvbmFzxLFuxLEgcXVyYcWfZMSxcsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW4gdmF4dCB6b25hc8SxbsSxIGTJmXlpxZ9tyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDk5OTQzNDg4NDM2NjMzMzk4Ij4iVMmZdGJpccmZIHRlbGVmb24gc2FhdCB6b2xhxJ/EsW7EsSBkyZl5acWfbcmZayDDvMOnw7xuIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+IkFjY291bnRNYW5hZ2VyU2VydmljZSBraW1pIGRhdnJhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiJUyZl0YmlxyZkgQWNjb3VudEF1dGhlbnRpY2F0b3JzXCfJmSB6yZluZyBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFjY291bnRzIiBtc2dpZD0iMTA4Njc5NTQ2Nzc2MDEyMjExNCI+ImNpaGF6ZGEgaGVzYWJsYXLEsSB0YXDEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc0MTQ5NjUzNDc2OTY2MDAyNyI+IlTJmXRiaXHJmSBwbGFuxZ9ldCB0yZlyyZlmaW5kyZluIGJpbGluyZluIGhlc2FibGFyxLFuIHNpeWFoxLFzxLFuxLEgYWxtYSBpY2F6yZlzaSB2ZXJpci4gQnUgcXVyYcWfZMSxcmTEscSfxLFuxLF6IHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4geWFyYWTEsWxtxLHFnyBpc3TJmW5pbMmZbiBoZXNhYiBvbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ0ODMxNjgyMjQ1MTgwNzM4MiI+IlTJmXRiaXHJmSB0ZWxlZm9uZGEgb2xhbiBoZXNhYmxhcsSxbiBzaXlhaMSxc8SxbsSxIMmZbGTJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4gQnVuYSBxdXJhxZ9kxLFyZMSxxJ/EsW7EsXogaXN0yZluaWzJmW4gdMmZdGJpcSB0yZlyyZlmaW5kyZluIHlhcmFkxLFsYW4gaGVzYWJsYXIgZGEgYWlkZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4iaGVzYWJsYXIgeWFyYWTEsXIgdsmZIHBhcm9sbGFyIHTJmXlpbiBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1NDcyMTI0Mjk2OTA4OTc3MjYwIj4iVMmZdGJpccmZIEFjY291bnRNYW5hZ2VyXCdpbiBoZXNhYiB5YXJhdG1hcSB2yZkgcGFyb2wgYWxtYXEgdsmZIGHDp21hcSBkYXhpbCBvbG1hcWxhIGLJmXJhYsmZciwgaGVzYWIgdMmZc2RpcWzJmXlpY2kgaW1rYW5sYXLEsW7EsSBpc3RpZmFkyZkgZXRtyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4iaGVzYWJsYXLEsSDJmWxhdsmZIGVkaXIgdsmZIHlhIHNpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI4Njk4Mjk1NjI1NDg4MjkyNTA2Ij4iVMmZdGJpccmZIGhlc2FibGFyxLFuIMmZbGF2yZkgb2x1bm1hc8SxIHbJmSB5YSBzaWxpbm3JmXNpLCBoyZltw6dpbmluIG9ubGFyxLFuIHBhcm9sbGFyxLFuxLFuIHNpbGlubcmZc2kga2ltaSDJmW3JmWxpeXlhdGxhcsSxIGljcmEgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2VDcmVkZW50aWFscyIgbXNnaWQ9IjIzNTQ4MTM5NjE2Mzg3NzY0MiI+ImNpaGF6ZGEgaGVzYWJsYXIgaXN0aWZhZMmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+IlTJmXRiaXHJmSBhdXRlbnRpZmlrYXNpeWEgdG9rZW5syZlyaSBzb3LEn3VsYXLEsW7EsSBnw7ZuZMmZcm3JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4ixZ/JmWLJmWvJmSBiYcSfbGFudMSxbGFyxLFuYSBiYXhtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI4MzE4OTY0NDI0Njc1OTYwOTc1Ij4iVMmZdGJpccmZIG3DtnZjdWQgb2xhbiB2yZkgcW/Fn3VsYW4gxZ/JmWLJmWvJmWzJmXIga2ltaSBxb8WfdWxtYWxhciBoYXFxxLFuZGEgbcmZbHVtYXTEsSBnw7ZybcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iODAxODc1ODEzNjQwNDMyMzY1OCI+InRhbSDFn8mZYsmZa8mZIGdpcmnFn2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjM0MDMwNjIxODc3Nzk3MjQxODUiPiJUyZl0YmlxyZkgxZ/JmWLJmWvJmSBzb2tldGzJmXJpbmkgeWFyYXRtYcSfYSB2yZkgZsmZcmRpIMWfyZliyZlryZkgcHJvdG9rb2xsYXLEsW7EsSBpc3RpZmFkyZkgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIEJyYXV6ZXIgdsmZIGRpZ8mZciB0yZl0YmlxbMmZciBkYXRhbsSxbiBpbnRlcm5ldMmZIMO2dMO8csO8bG3JmXNpbmkgdMmZbWluIGVkyZluIHbJmXNhaXRsyZlyIHZlcmlyLCBvbmEgZ8O2csmZIGTJmSBkYXRhbsSxbiBpbnRlcm5ldMmZIGfDtm5yyZlkaWxtyZlzaSDDvMOnw7xuIGJ1IGljYXrJmSB0yZlsyZliIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTA1NjYwMTU5Njc1NzUxODk2Ij4ixZ/JmWLJmWvJmSBuaXphbWxhcsSxbsSxIHbJmSB0cmFmaWtpIGTJmXlpxZ9kaXJpci9xYXLFn8Sxc8SxbsSxIGFsxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUzMzM3OTg4ODY0MTI3MTQxOTMiPiJUyZl0YmlxyZkgxZ/JmWLJmWvJmSB0cmFmaWtpbmluIHFhcsWfxLFzxLFuxLEgYWxtYXEgw7zDp8O8biDFn8mZYsmZa8mZIG5pemFtbGFyxLFuxLEgZMmZeWnFn23JmSBpY2F6yZlzaSB2ZXJpciwgbcmZc8mZbMmZbiBwcm9rc2luaSB2yZkgeWEgaXN0yZluaWzJmW4gQVBOLWluIHBvcnR1bnUuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciDFn8mZYsmZa8mZIHBha2V0bMmZcmluaSBzaXppbiBiaWxnaW5peiBvbG1hZGFuIG1vbml0b3JpbnEgZWTJmSwgecO2bmzJmW5kaXLJmSB2yZkgeWEgcmVkYWt0yZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI5NTg4ODQyOTE0NTQzMjczMDkiPiLFn8mZYsmZa8mZIGJhxJ9sYW50xLFzxLFuxLEgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+IlTJmXRiaXHJmSDFn8mZYsmZa8mZIHbJmXppeXnJmXRpbmkgZMmZeWnFn23JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjU5NTI1ODQ5NjQzNzMwMTc5NjAiPiJTyZlyaMmZZGxpIGJhxJ9sYW50xLFuxLEgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSIxNTI0NDQxMzQ0NDEyMzE5NzgwIj4iVMmZdGJpccmZIGJpcmzJmcWfaWxtacWfIMWfyZliyZlryZkgYmHEn2xhbnTEsXPEsW7EsW4gc3RhdHVzdW51IGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSIxNDAwNjY2MDEyNjcxNjQ4NzQxIj4iYXJ4YWZvbiBkYXRhIGlzdGlmYWTJmXNpIGF5YXLEsW7EsSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSI1MzQ3NzI5NTc4NDY4NzQ0Mzc5Ij4iVMmZdGJpccmZIGZvbiByZWppbWkgbml6YW1sYXLEsW7EsSBkyZl5acWfbcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiJXaS1GaSBiYcSfbGFudMSxbGFyxLFuYSBiYXhtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4iVMmZdGJpccmZIFdpLUZpIMWfyZliyZlryZlsyZlyaSBoYXFxxLFuZGEgbcmZbHVtYXTEsSBnw7ZybcmZecmZIGljYXrJmSB2ZXJpciwgbcmZc8mZbMmZbiwgV2ktRmkgbcO2dmN1ZGx1xJ91IHbJmSBxb8WfdWxtdcWfIFdpLUZpIGNpaGF6bGFyxLFuxLFuIGFkbGFyxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4iV2ktRmkgxZ/JmWLJmWvJmXNpbsmZIHFvxZ91bG1hcSB2yZkgeWEgYXlyxLFsbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+IlTJmXRiaXHJmSBXaS1GaSDDp8SxeMSxxZ8gbsO2cXTJmXNpbsmZIHFvxZ91bG1hcSB2yZkgb25kYW4gYXlyxLFsbWFxIHbJmSBjaWhhesSxbiBXaS1GaSDFn8mZYsmZa8mZIG5pemFtbGFyxLFuxLEgZMmZeWnFn23JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4iV2ktRmkgTXVsdGljYXN0IHHJmWJ1bHVuYSBpY2F6yZkgdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3OTY5Nzc0MDIxMjU2MzM2NTQ4Ij4iVMmZdGJpccmZIFdpLUZpIMWfyZliyZlryZlkyZkgc2l6aW4gcGxhbsWfZXRkyZluIGJhxZ9xYSBkaWfJmXIgbXVsdGlrYXN0IGFkcmVzbMmZcsmZIHnDtm5syZluZGlyaWxtacWfIHBha2V0bMmZcmkgYWxtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IHFleXJpLcOnb3hhZHJlc2xpIHJlamltZMmZbiBmyZlxbGkgb2xhcmFxIGRhaGEgw6dveCBlbmVyamkgacWfbMmZZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiJUyZl0YmlxyZkgcXJ1cCDDvG52YW5sYXIgaXN0aWZhZMmZIGV0bcmZa2zJmSwgV2ktRmkgxZ/JmWLJmWvJmXNpbmTJmSBvbGFuIGLDvHTDvG4gY2loYXpsYXJhIGfDtm5kyZlyaWxtacWfIHBha2V0bMmZcmkgccmZYnVsIGV0bcmZecmZIGlta2FuIHZlcmlyLiBCdW5hIGRhaGEgw6dveCBlbmVyamkgc8mZcmYgb2x1bnVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4iQmx1ZXRvb3RoIGF5YXJsYXLEsW7EsSDJmWxkyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4iVMmZdGJpccmZIHllcmxpIEJsdWV0b290aCBwbGFuxZ9ldGluaW4ga29uZmlxdXJhc2l5YXPEsW7EsSBnw7ZybcmZecmZIHbJmSBtyZlzYWbJmWTJmW4gY2loYXpsYXLEsSB0YXBtYcSfYSB2yZkgY8O8dGzJmW3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MzE2ODIxNTkzMzE1NDIxMzciPiJUyZl0YmlxyZkgbG9rYWwgQmx1ZXRvb3RoIHRlbGVmb251bnUga29uZmlxdXLJmSBldG3JmXnJmSB2yZkgdXphcSBjaWhhemxhcsSxIGvJmcWfZiBldG3JmWsgdsmZIG9ubGFyYSBxb8WfdWxtYXEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+IldpTUFYXCdhIHFvxZ91bCB2yZkgYmHEn2xhbnTEsW7EsSBryZlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiJUyZl0YmlxyZkgV2lNQVggbcO2dmN1ZGx1xJ91IHbJmSBxb8WfdWxtdcWfIFdpTUFYIMWfyZliyZlryZlsyZlyaW5pIHTJmXlpbiBldG3JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+IldpTUFYIHbJmXppeXnJmXRpbmkgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzE1NjQ1NjUwNDA4NDIwMTgwNSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGkgV2lNQVggxZ/JmWLJmWvJmWzJmXJpbsmZIHFvxZ9tYXEgdsmZIG9ubGFyZGFuIGF5xLFybWFxIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiJUyZl0YmlxyZkgdGVsZWZvbnUgV2lNQVggxZ/JmWLJmWvJmXNpbsmZIHFvxZ9tYcSfYSB2yZkgeWEgV2lNQVggxZ/JmWLJmWvJmXNpbmTJmW4gYXnEsXJtYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aCIgbXNnaWQ9IjYxMjc3NjkzMzYzMzkyNzY4MjgiPiJCbHVldG9vdGggY2loYXpsYXLEsSBpbMmZIGPDvHRsyZluZGlybcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IlTJmXRiaXHJmSB5ZXJsaSBCbHVldG9vdGggcGxhbsWfZXRpbmluIGtvbmZpcXVyYXNpeWFzxLFuxLEgZ8O2cm3JmXnJmSB2yZkgY8O8dGzJmW5tacWfIGNpaGF6bGFybGEgYmHEn2xhbnTEsWxhciBldG3JmXnJmSB2yZkgccmZYnVsIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiJUyZl0YmlxyZkgQmx1ZXRvb3RoIHbJmSB5YSB0ZWxlZm9uIGtvbmZpcXVyYXNpeWFsYXLEsW7EsSBnw7ZybcmZecmZIHbJmSBxb8WfdWxtdcWfIGNpaGF6bGFybGEgyZlsYXHJmSBxdXJtYcSfYSB2yZkgccmZYnVsIGV0bcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX25mYyIgbXNnaWQ9IjQ0MjMzNTEyNzQ3NTc4NzY5NTMiPiJOZWFyIEZpZWxkIENvbW11bmljYXRpb25cJ8SxIGtvbnRyb2wgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19uZmMiIG1zZ2lkPSI3MTIwNjExODE5NDAxNzg5OTA3Ij4iVMmZdGJpccmZIFlheMSxbiBNyZlzYWbJmSBLb21tdW5pa2FzaXlhc8SxIChORkMpIHRlcWzJmXJpLCBrYXJ0bGFyxLEgdsmZIG94dXl1Y3VsYXLEsSBpbMmZIMmZbGFxyZkgcXVybWHEn2EgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+IkVrcmFuIGtpbGlkaW5pIGRlYWt0aXYgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjYwMzQyMDMwNjUwNzcxMjI5OTIiPiJUyZl0YmlxyZkga2lsaWQgYcOnYXLEsW7EsSB2yZkgdMmZaGzDvGvJmXNpemxpayBwYXJvbHVudSBkZWFrdGl2IGV0bcmZecmZIGlta2FuIHZlcmlyLiBRYW51bmkgbWlzYWwgYnVkdXIga2ksIHRlbGVmb24gesmZbmcgccmZYnVsIGVkyZluIHphbWFuIGtpbGlkaSBhw6fEsXIgdsmZIHrJmW5nIHF1cnRhcmFuZGFuIHNvbnJhIGtpbGlkaSBiYcSfbGF5xLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjYyMDE4MTAwMDgyMzA1MDMwNTIiPiJzaW54IGF5YXJsYXLEsW7EsSBveHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iMjcwNjc0NTY3NDU2OTY3ODY0NCI+IlTJmXRiaXHJmSBoZXNhYmxhciDDvMOnw7xuIHNpbnhyb25pemFzaXlhIG5pemFtbGFyxLFuxLEgb3h1bWEgaWNhesmZc2kgdmVyaXIuIE3JmXPJmWzJmW4sIGJ1IMWeyZl4c2zJmXIgdMmZdGJpcWluaW4gc2lueHJvbml6yZkgb2x1bnViLW9sdW5tYWTEscSfxLFuxLEgdMmZeWluIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI1NDA4Njk0ODc1NzkzOTQ1MzE0Ij4ic2lueHJvbml6YXNpeWF5YSBkYXZhbSBlZGlyIHbJmSBvbnUgc8O2bmTDvHLDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9Ijg5NTYyNjI1OTEzMDYzNjk4NjgiPiJUyZl0YmlxyZkgaGVzYWIgw7zDp8O8biBzaW54cm9uaXphc2l5YSBuaXphbWxhcsSxbsSxIGTJmXlpxZ9tyZl5yZkgaWNhesmZIHZlcmlyLiBNyZlzyZlsyZluLCBidSBpc3RpZmFkyZnDp2kgaGVzYWJsxLEgxZ7JmXhzbMmZciB0yZl0YmlxaW5pbiBzaW54cm9uaXphc2l5YXPEsW7EsSBiYcWfbGFtYXEgw7zDp8O8biBpc3RpZmFkyZkgZWRpbMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSI3Mzk2NTc3NDUxMzYwMjAyNDQ4Ij4ic2lueHJvbml6YXNpeWEgc3RhdGlzdGlrYXPEsW7EsSBveHVtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1N0YXRzIiBtc2dpZD0iMTUxMDE0Mzc2MTc1NzYwNjE1NiI+IlTJmXRiaXHJmSBzeW5jIHTJmWRiaXJsyZlyaW5pbiB0YXJpeMOnyZlzaSB2yZkgbsmZIHHJmWTJmXIgZGF0YW7EsW4gc2lueCBvbGR1xJ91IGRhIGRheGlsIG9sbWFxbGEgYsmZcmFiyZlyLCBoyZlyIGhhbnPEsSBiaXIgaGVzYWIgw7zDp8O8biBvbGFuIHNpbnggc3RhdGxhcsSxbsSxIG94dW1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjQ3NTY2MDk2MzcwNTMzNTMzMTgiPiJhYnVuyZkgb2x1bm11xZ8geMmZYsmZcmzJmXJpIG94dXl1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI1NTU3MDU4OTA3OTA2MTQ0NTA1Ij4iVMmZdGJpccmZIGhhesSxcmRhIHNpbnhyb24gbGVudGzJmXIgaGFxccSxbmRhIMmZdHJhZmzEsSBtyZlsdW1hdCBhbG1hcSDDvMOnw7xuIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI5MDE1MjQ2MzI1NDA4MjA5Mjk2Ij4iYWJ1bsmZIG9sdW5tdcWfIHjJmWLJmXJsyZlyaSB5YXrEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjY5Mjg5MzAxODg4MjYwODk0MTMiPiJUyZl0YmlxyZkgY2FyaSBzaW54cm9ubGHFn23EscWfIGxlbnRsyZlyaW5pesmZIGTJmXlpxZ9pa2xpayBldG3JmWsgaW1rYW7EsSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIHNpeHJvbmxhxZ9txLHFnyBsZW50bMmZcmluaXppIGTJmXlpxZ/JmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjQxMDcxMDE1MjU3NDYwMzU3MTgiPiJsw7zEn8mZdMmZIMmZbGF2yZkgZXRkaXlpbml6IMWfyZlydGzJmXJpIG94dW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNjU5NjE0NjAwMzM4OTA0MjQzIj4iVMmZdGJpccmZIGlzdGlmYWTJmcOnaW5pbiBsw7zEn8mZdGTJmSBzYXhsYWTEscSfxLEgYsO8dMO8biBzw7Z6bMmZcmksIGFkbGFyxLEgdsmZIGZyYXphbGFyxLEgb3h1bWFxIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjE4MzExMDQwMjMxNDQ0MTEwNiI+ImlzdGlmYWTJmcOnaSBsw7zEn8mZdGluyZkgc8O2emzJmXIgyZlsYXbJmSBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MTg1Mzg1NzE2MjU1MDY1MjkxIj4iVMmZdGJpccmZIGlzdGlmYWTJmcOnaSBsw7zEn8mZdGluyZkgeWVuaSBzw7Z6bMmZciB5YXptYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+InFvcnVubXXFnyB5YWRkYcWfYSBkYXhpbCBvbG1hxJ9hIGPJmWhkIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgyMzUzNDE1MTU2MDU1NTk2NzciPiJxb3J1bm11xZ8geWFkZGHFn2EgZGF4aWwgb2xtYcSfYSBjyZloZCBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM2NDI0NzMyOTIzNDgxMzIwNzIiPiJUyZl0YmlxyZkgZ8mZbMmZY8mZayBjaWhhemxhcmRhIMmZbMOnYXTEsW1sxLEgb2xhY2FxIFVTQiB5YWRkYcWfIMO8w6fDvG4gaWNhesmZIHRlc3RpIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1OTE0NDAyNjg0Njg1ODQ4ODI4Ij4iVMmZdGJpccmZIGfJmWzJmWPJmWsgY2loYXpsYXJkYSBtw7Z2Y3VkIG9sYWNhcSBTRCBrYXJ0IMO8w6fDvG4gaWNhesmZbmkgdGVzdCBldG3JmWsgw7zDp8O8biBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijg0ODU5NzkwNjIyNTQ2NjY3NDgiPiJVU0IgeWFkZGHFn8SxbsSxesSxbiBtyZl6bXVudW51IGTJmXlpxZ9tyZlrIHbJmSB5YSBzaWxtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiJTRCBrYXJ0IGtvbnRlbnRsyZlyaW5pIGTJmXlpxZ9pciB2yZkgeWEgc2lsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTc1NDA2Mjk5NDQ1NzEwODg4Ij4iVMmZdGJpccmZIFVTQiB5YWRkYcWfYSB5YXptYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiJUyZl0YmlxyZkgU0Qga2FydGEgeWF6bWEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTk4MzkxOTk3MDY4NzkwMTUiPiJkYXhpbGkgbWVkaWEgeWFkZGHFn8SxIGtvbnRlbnRpbmkgZMmZeWnFn2lyL3NpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTg5MTYwNTk3Njk4NTI5MTg1Ij4iVMmZdGJpccmZIGRheGlsaSBtZWRpYSB5YWRkYcWfZGFrxLEga29udGVudGkgcmVkYWt0yZkgZXRtyZlrIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3NzgzMTg1OTg0NDg4NDk4MjkiPiJzyZluyZlkIHlhZGRhxZ/EsW7EsSBuaXphbWxhecSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NzA0MzIzMTc2OTE0MTIxNDg0Ij4iVMmZdGJpccmZIHPJmW7JmWQgeWFkZGHFn8SxbsSxIGlkYXLJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjgxNTA2MTM4MjM5MDA0NjA1NzYiPiJiw7x0w7xuIGlzdGlmYWTJmcOnaWzJmXJpbiB4YXJpY2kgeWFkZGHFn8SxbmEgZGF4aWwgb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSIzMjE1MjA4MzU3NDE1ODkxMzIwIj4iVMmZdGJpccmZIGLDvHTDvG4gaXN0aWZhZMmZw6dpbMmZciDDvMOnw7xuIG9sYW4geGFyaWNpIHlhZGRhxZ9hIGdpcmnFnyBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU2NTY0ODcyNjQ4MTk2Njk4MjQiPiJrZcWfIGZheWwgc2lzdGVtaW7JmSBnaXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiJUyZl0YmlxyZkga2XFnyBmYXlsIHNpc3RlbWluaSBveHVtYcSfYSB2yZkgeWF6bWHEn2EgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiLEsG50ZXJuZXQgesmZbmdsyZlyaSBldG3JmWsgdsmZIHlhIHHJmWJ1bCBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+IlTJmXRiaXHJmSBpbnRlcm5ldCB6yZluZ2zJmXJpbmluIGfDtm5kyZlyaWxtyZlzaSB2yZkgccmZYnVsIGVkaWxtyZlzaSDDvMOnw7xuIFNJUCBzZXJ2aXNpbmTJmW4gaXN0aWZhZMmZIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4idGFyaXhpIMWfyZliyZlryZkgaXN0aWZhZMmZc2luaSBveHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiJUyZl0YmlxyZkgeMO8c3VzaSDFn8mZYsmZa8mZbMmZciB2yZkgdMmZdGJpcWzJmXIgw7zDp8O8biB0YXJpeGkgxZ/JmWLJmWvJmSBpc3RpZmFkyZlzaW5pIG94dW1hxJ9hIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSIyNTYyMDUzNTkyMzM5ODU5OTkwIj4ixZ/JmWLJmWvJmSBzaXlhc8mZdGluaSBpZGFyyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiJUyZl0YmlxyZkgxZ/JmWLJmWvJmSBxYW51bmxhcsSxbsSxIHbJmSB0yZl0YmlxaW4geMO8c3VzaSBxYXlkYWxhcsSxbsSxIGlkYXLJmSBldG3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTA4ODIxNzMwOTA4ODcyOTY1MCI+IsWfyZliyZlryZkgaXN0aWZhZMmZIGhlc2FixLFuxLEgZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiJUyZl0YmlxyZkgxZ/JmWLJmWvJmSBpc3RpZmFkyZlzaW5pbiB0yZl0YmlxbMmZcsmZIHFhcsWfxLEgbml6YW1sYXLEsW7EsSByZWRha3TJmSBldG3JmXnJmSBpY2F6yZkgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsbWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4ic29rZXQgacWfYXLJmWzJmXJpbmkgZMmZeWnFn2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSI3NjU1NTY4NDMzNjk2MzU2NTc4Ij4iVMmZdGJpccmZIGFyYcWfZMSxcm1hIMO8w6fDvG4gc29rZXQgacWfYXLJmWzJmXJpbmkgZMmZeWnFn23JmWsgaW1rYW7EsSB2ZXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9Ijc2NzM0MTY0ODc4NzM0MzIyNjgiPiJiaWxkaXJpxZ9syZlyyZkgZGF4aWwgb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNDU4NDU3NzQyNjgzNDMxMzg3Ij4iVMmZdGJpccmZIGJpbGRpcmnFn2zJmXJpIMmZbGTJmSBldG3JmXnJmSwgc8SxbmFtYcSfYSB2yZkgdMmZbWl6bMmZbcmZecmZIGlta2FuIHZlcmlyLCBidW5hIGRpZ8mZciB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIHZlcmlsbWnFnyBiaWxkaXJpxZ9syZlyIGTJmSBkYXhpbGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI3MDU3NzY0NzQyMjExNjU2NjU0Ij4iYmlsZGlyacWfIGRpbmzJmW3JmSB4aWRtyZl0aW7JmSBiYcSfbGFuxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9Ijk4NTY5NzkxODU3NjkwMjk4NiI+IlNhaGliaW7JmSB5w7xrc8mZayBzyZl2aXl5yZlsaSBiaWxkaXJpxZ8gZGlubMmZbcmZIHNlcnZpc2kgaWzJmSDJmWxhccmZIHNheGxhbWHEn2EgaWNhesmZIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBoZcOnIHZheHQgaXN0yZluaWxtyZltyZlsaWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjM2OTk2MDA4MzM5NzUxMTc0NzgiPiJvcGVyYXRvciB4aWRtyZl0bGkga29uZml1cmFzaXlhIHTJmXRiaXFpbsmZIG3DvHJhY2nJmXQgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjQxNTk1NDkxNTI1MjkxMTE5MjAiPiJTYWhpYmluyZkgb3BlcmF0b3IgeGlkbcmZdGxpIHTJmXRiaXEga29uZmlxdXJhc2l5YXPEsW5hICBtw7xyYWNpyZl0IGlta2FuxLEgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIHTJmWzJmWIgb2x1bm1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI4MjA2MDc3NDQ3ODM4OTA5NTE2Ij4ixZ/JmWLJmWvJmSDFn8mZcmFpdGkgaGFxccSxbmRhIG3DvMWfYWhpZMmZbMmZciDDvMOnw7xuIHF1bGFxIGFzbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI2ODk5MTAyMDc1ODI1MjcyMjExIj4iVMmZdGJpccmZIMWfyZliyZlryZkgxZ/JmXJhaXRpIMO8enLJmSBtw7zFn2FoaWTJmWzJmXIgw7zDp8O8biBxdWxhcSBhc21hcSBpbWthbsSxIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBoZcOnIHZheHQgbGF6xLFtIG9sbWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSI0NDk3NDIwNzI4ODU3NTg1NzkxIj4iUGFyb2wgcWF5ZGFsYXLEsW7EsSB0yZl5aW4gZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjMyNTIxMTQyMDM5MTk1MTAzOTQiPiJFa3JhbiBraWxpZGluaSBhw6dhbiDFn2lmcsmZbMmZcmluIHV6dW5sdcSfdW51IHbJmSBvbmxhcmRha8SxIGljYXrJmSB2ZXJpbMmZbiBpxZ9hcsmZbMmZcsmZIG7JmXphcsmZdCBlZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93YXRjaExvZ2luIiBtc2dpZD0iOTE0MTMwNjQ2OTQyMTk5NTAzIj4iRWtyYW4ga2lsaWRpIGPJmWhkbMmZcmluaSBtb25pdG9yaW5xIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjE1NzI5Mjk0MjE1MDcwMDcyIj4iRWthbiBraWxpZGluaSBhw6dhcmvJmW4gZGF4aWwgZWRpbG1pxZ8geWFubMSxxZ8gcGFyb2xsYXJhIGJheMSxbiB2yZkgyZlnyZlyIGjJmWRkaW5kyZluIMOnb3ggeWFubMSxxZ8gcGFyb2xsYXIgZGF4aWwgZWRpbGlic8mZLCBwbGFuxZ9ldGkga2lsaWRsyZl5aW4gdsmZIHlhIGLDvHTDvG4gcGxhbsWfZXQgZGF0YXPEsW7EsSBzaWxpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzEyMzIzMDkxODQ2NzYxMDczIj4iRWthbiBraWxpZGluaSBhw6dhcmvJmW4gZGF4aWwgZWRpbG1pxZ8geWFubMSxxZ8gcGFyb2xsYXJhIGJheMSxbiB2yZkgyZlnyZlyIGjJmWRkaW5kyZluIMOnb3ggeWFubMSxxZ8gcGFyb2xsYXIgZGF4aWwgZWRpbGlic8mZLCB0ZWxlZm9udSBraWxpZGzJmXlpbiB2yZkgeWEgYsO8dMO8biB0ZWxlZm9uIGRhdGFzxLFuxLEgc2lsaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSIyNjIwMDc3MTkxMjQyNjg4OTU1Ij4iRWtyYW4ga2lsaWQgcGFyb2x1bnUgZMmZeWnFn2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19yZXNldFBhc3N3b3JkIiBtc2dpZD0iNjA1OTYzOTYyMzAxOTA0NDU4Ij4iRWtyYW4ga2lsaWRpbmkgYcOnYW4gxZ9pZnLJmW5pIGTJmXlpxZ9kaXJpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZm9yY2VMb2NrIiBtc2dpZD0iMjI3NDA4NTM4NDcwNDI0ODQzMSI+IkVrcmFuxLEga2lsaWRsyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2ZvcmNlTG9jayIgbXNnaWQ9IjExNDE3OTc1ODg0MDM4MjcxMzgiPiJFa3JhbsSxbiBuyZkgdmF4dCB2yZkgbmVjyZkga2lsaWRsyZlubcmZc2luyZkgbsmZemFyyZl0IGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dpcGVEYXRhIiBtc2dpZD0iMzkxMDU0NTQ0Njc1ODYzOTcxMyI+IkLDvHTDvG4gbcmZbHVtYXRsYXLEsSBzaWxpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGEiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMDYxODQwOTYwNjc3NTY4NzYiPiJQbGFuxZ9ldGluIGRhdGFzxLFuxLEgeMmZYsmZcmRhcmzEsXEgb2xtYWRhbiwgemF2b2QgZGF0YSBzxLFmxLFybGFtYXPEsSBpbMmZIHNpbGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGEiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MDk2ODk1NjA0NTc0MTg4MzkxIj4iVGVsZWZvbnVuIGRhdGFzxLFuxLEgeMmZYsmZcmRhcmzEsXEgb2xtYWRhbiwgemF2b2QgZGF0YSBzxLFmxLFybGFtYXPEsSBpbMmZIHNpbGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iMjc4NDgyODI5Mzc0Nzc5MTQ0NiI+IkNpaGF6xLFuIHFsb2JhbCBwcm9rc2lzaW5pIGF5YXJsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+IlNpeWFzyZl0IGFrdGl2IG9sYXJryZluIGNpaGF6xLFuIHFsb2JhbCBwcm9rc2lzaW5pIGlzdGlmYWTJmSDDvMOnw7xuIHF1cnVuLiBZYWxuxLF6IGlsayBjaWhheiBhZG1pbmkgZWZmZWt0aXYgcWxvYmFsIHByb2tzaW5pIHTJmXlpbiBlZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9leHBpcmVQYXNzd29yZCIgbXNnaWQ9Ijg4NTI3OTE1MTg0NzI1NDA1NiI+IkVrcmFuIGtpbGlkaSDFn2lmcsmZc2luyZkgc29uIHphbWFuIHNlw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iMTcyOTcyNTIyNjMxNDY5MTU5MSI+IkVrcmFuIGtpbGlkaSBwYXJvbHVudW4gbsmZIHHJmWTJmXIgdGV6LXRleiBkyZl5acWfbcmZc2luaSBrb250cm9sIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSI4OTAxMzI2MTk5OTA5MTMyOTE1Ij4iWWFkZGHFnyDFn2lmcsmZbMmZbm3JmXNpbmkgYXlhcmxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9IjI2Mzc3MzIxMTUzMjUzMTY5OTIiPiJUyZl0YmlxIG3JmWx1bWF0bGFyxLFuxLFuIMWfaWZyyZlsyZlubcmZc2luaSB0yZlsyZliIGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSI2Mzk1MzAxMDIzMTUyMjk3ODI2Ij4iS2FtZXJhbGFyxLEgZGVrYXRpdiBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+IkLDvHTDvG4gY2loYXoga2FtZXJhbGFyxLFuxLFuIGlzdGlmYWTJmXNpbmkgyZluZ8mZbGzJmS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiJLbGF2aWF0dXJhIGtpbGlkaW5kyZkgZnVua3NpeWFsYXLEsSBkZWFrdGl2IGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVLZXlndWFyZEZlYXR1cmVzIiBtc2dpZD0iMzQ2NzA4MjI3MjE4NjUzNDYxNCI+IktsYXZpYXR1cmEga2lsaWRpbmTJmSBiyZl6aSBmdW5rc2l5YWxhcsSxbiBxYXLFn8Sxc8SxbsSxIGFsxLFuLiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwaG9uZVR5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iODkwMTA5ODMzNjY1ODcxMDM1OSI+IsaPc2FzIHPJmWhpZsmZIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY5OTIzNjUwNTI3MTM2NjE1Ij4iTW9iaWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3ODk3NTQ0NjU0MjQyODc0NTQzIj4ixLDFnyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjExMDM2MDE0MzMzODIxNTgxNTUiPiLEsMWfIEZha3PEsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MzUxNzcxNDQ5NDgzMjkzNzAiPiJFdiBGYWtzxLEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDM4Nzg2NzQ0NzcyMDczOTQiPiJQZXljZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNjUwODI0Mjc1MTc3OTMxNjM3Ij4iRGlnyZlyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iOTE5MjUxNDgwNjk3NTg5ODk2MSI+IsWeyZl4c2kiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJlbWFpbEFkZHJlc3NUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjgwNzM5OTQzNTI5NTYxMjkxMjciPiJBbmEgc8mZaGlmyZkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3MDg0MjM3MzU2NjAyNjI1NjA0Ij4ixLDFnyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjExMTIwNDQ0MTA2NTkwMTEwMjMiPiJEaWfJmXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMzc0OTEzOTUyODcwMTEwNjE4Ij4iRsmZcmRpIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icG9zdGFsQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iNjg4MDI1NzYyNjc0MDA0NzI4NiI+IsaPc2FzIHPJmWhpZsmZIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTYyOTE1Mzk1NjA0NTEwOTI1MSI+IsSwxZ8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0OTY2NjA0MjY0NTAwMzQzNDY5Ij4iRGlnyZlyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDkzMjY4Mjg0NzU5NTI5OTM2OSI+IkTDvHrJmW5syZl5aW4iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJpbUFkZHJlc3NUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjE3Mzg1ODUxOTQ2MDE0NzY2OTQiPiLGj3NhcyBzyZloaWbJmSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNTk2NDQ1NjU2NDczODM3MDgiPiLEsMWfIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg2ODU0OTQwMTA1MzYxNTY3NyI+IkRpZ8mZciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxNDUxMTg5NDQ2Mzk4Njk4MDkiPiJGyZlyZGkiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmdhbml6YXRpb25UeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc1NDYzMzU2MTIxODkxMTU2MTUiPiLEsMWfIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDM3ODA3NDEyOTA0OTUyMDM3MyI+IkRpZ8mZciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM0NTUwNDc0Njg1ODM5NjUxMDQiPiJGyZlyZGkiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJpbVByb3RvY29scyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijg1OTUyNjEzNjM1MTg0NTk1NjUiPiJBSU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3MzkwNDczNjI4Mjc1NDkwNzAwIj4iV2luZG93cyBMaXZlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg4Mjg3NzEzNDkzMTQ1ODIxNyI+IllhaG9vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTAzNTM3NjMxMzIwMDU4NTI0MiI+IlNreXBlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzUzMjM2MzE3ODQ1OTQ0NDk0MyI+IlFRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzcxMzQ0MTAzNDI5OTY2MDc0OSI+Ikdvb2dsZSBTw7ZoYsmZdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI1MDY4NTczMTI3MTg2MzA4MjMiPiJJQ1EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNjQ4Nzk3OTAzNzg1Mjc5MzUzIj4iSmFiYmVyIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDdXN0b20iIG1zZ2lkPSIxNjQ0NzM4MDU5MDUzMzU1ODIwIj4ixZ7JmXhzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUhvbWUiIG1zZ2lkPSIyNTcwOTIzNDYzMDMzOTg1ODg3Ij4iRXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNb2JpbGUiIG1zZ2lkPSI2NTAxNDYzNTU3NzU0NzUxMDM3Ij4iTW9iaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrIiBtc2dpZD0iODg2MzkzOTY2NzA1OTkxMTYzMyI+IsSwxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhXb3JrIiBtc2dpZD0iMzUxNzc5MjE2MDAwODg5MDkxMiI+IsSwxZ8gRmFrc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4SG9tZSIgbXNnaWQ9IjIwNjcyNjU5NzIzMjI5NzE0NjciPiJFdiBGYWtzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVQYWdlciIgbXNnaWQ9Ijc1ODIzNTk5NTUzOTQ5MjE3MzIiPiJQZXljZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVPdGhlciIgbXNnaWQ9IjE1NDQ0MjU4NDc4Njg3NjU5OTAiPiJEaWfJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDYWxsYmFjayIgbXNnaWQ9IjI3MTIxNzUyMDMwNjU2NzgyMDYiPiJHZXJpecmZIHrJmW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FyIiBtc2dpZD0iODczODM2MDY4OTYxNjcxNjk4MiI+IkF2dG9tb2JpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNvbXBhbnlNYWluIiBtc2dpZD0iNTQwNDM0MzU2NDYxNDc4OTE2Ij4ixZ5pcmvJmXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVJc2RuIiBtc2dpZD0iODAyMjQ1MzE5MzE3MTM3MDMzNyI+IklTRE4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNYWluIiBtc2dpZD0iNjc2NjEzNzAxMDYyODMyNjkxNiI+IsaPc2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXJGYXgiIG1zZ2lkPSI4NTg3NjU3MTQ1MDcyNDQ2NTY1Ij4iRGlnyZlyIGZha3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVSYWRpbyIgbXNnaWQ9IjQwOTM3MzgwNzk5MDg2Njc1MTMiPiJSYWRpbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVRlbGV4IiBtc2dpZD0iMzM2Nzg3OTk1MjQ3NjI1MDUxMiI+IlRlbGVrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVR0eVRkZCIgbXNnaWQ9Ijg2MDY1MTQzNzg1ODUwMDAwNDQiPiJUVFkgVEREIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya01vYmlsZSIgbXNnaWQ9IjEzMTE0MjY5ODkxODQwNjU3MDkiPiJNb2JpbCBpxZ8gdGVsZWZvbnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrUGFnZXIiIG1zZ2lkPSI2NDk5Mzg3MzEyMzExNTcwNTYiPiLEsMWfIFBleWNlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI1NTk2NzcyNjM2MTI4NTYyODg0Ij4iS8O2bcmZa8OnaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1tcyIgbXNnaWQ9IjcyNTQ0OTIyNzU1MDI3Njg5OTIiPiJNTVMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVDdXN0b20iIG1zZ2lkPSI3ODM3NTg2MTk4NDU4MDczNDA0Ij4iRsmZcmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQmlydGhkYXkiIG1zZ2lkPSIyODEzMzc5ODQ0MjExMzkwNzQwIj4iRG/En3VtIGfDvG7DvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUFubml2ZXJzYXJ5IiBtc2dpZD0iMzg3Njc3OTc0NDUxODI4NDAwMCI+IsSwbGTDtm7DvG3DvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZU90aGVyIiBtc2dpZD0iNzM4ODE3ODkzOTAxMDE0MzA3NyI+IkRpZ8mZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg1MjU5NjAyNTc4MDQyMTM4NDYiPiJGyZlyZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVIb21lIiBtc2dpZD0iNDQ5MjI3MjM2MTQwNDMzOTE5Ij4ixo9zYXMgc8mZaGlmyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVXb3JrIiBtc2dpZD0iMzU0ODA1ODA1OTYwMTE0OTk3MyI+IsSwxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVPdGhlciIgbXNnaWQ9IjI5MjMwMDg2OTUyNzI2Mzk1NDkiPiJEaWfJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVNb2JpbGUiIG1zZ2lkPSIxMTk5MTkwMDUzMjExNjYyMDUiPiJNb2JpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVDdXN0b20iIG1zZ2lkPSI4OTAzMjA2OTAzMDYwNDc5OTAyIj4iRsmZcmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUhvbWUiIG1zZ2lkPSI4MTY1NzU2OTc3MTg0NDgzMDk3Ij4ixo9zYXMgc8mZaGlmyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlV29yayIgbXNnaWQ9IjUyNjgxNzI3NzIzODc2OTQ0OTUiPiLEsMWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZU90aGVyIiBtc2dpZD0iMjcyNjExMTk2NjYyMzU4NDM0MSI+IkRpZ8mZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUN1c3RvbSIgbXNnaWQ9IjIwNzQwMjg3NTU1Mjc4MjYwNDYiPiJGyZlyZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVIb21lIiBtc2dpZD0iNjI0MTE4MTAzMjk1NDI2Mzg5MiI+IkFuYSBzyZloaWbJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZVdvcmsiIG1zZ2lkPSIxMzcxNDg5MjkwMjQyNDMzMDkwIj4ixLDFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZU90aGVyIiBtc2dpZD0iNTM3NzAwNzQ5NTczNTkxNTQ3OCI+IkRpZ8mZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xDdXN0b20iIG1zZ2lkPSI2OTE5NDUzODM2NjE4NzQ5OTkyIj4ixZ7JmXhzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xBaW0iIG1zZ2lkPSI3MDUwMzYwNjEyMzY4MzgzNDE3Ij4iQUlNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE1zbiIgbXNnaWQ9IjE0NDU1NjU0NTQyMDc2OTQ0MiI+IldpbmRvd3MgTGl2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xZYWhvbyIgbXNnaWQ9IjgyNzE0Mzk0MDg0NjkwMjEyNzMiPiJZYWhvbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xTa3lwZSIgbXNnaWQ9IjkwMTkyOTY3NDQ2MjI4MzI5NTEiPiJTa3lwZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xRcSIgbXNnaWQ9Ijg4ODc0ODQzNzk0OTQxMTE4ODQiPiJRUSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xHb29nbGVUYWxrIiBtc2dpZD0iNDkzOTAyMzIxMTQwMjc3MzA0Ij4iR8O2csO8xZ9syZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEljcSIgbXNnaWQ9IjE1NzQ4NzA0MzM2MDY1MTczMTUiPiJJQ1EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSmFiYmVyIiBtc2dpZD0iMjI3OTkxNzYzMDg3NTc3MTcyMiI+IkphYmJlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xOZXRNZWV0aW5nIiBtc2dpZD0iODI4NzYyNTY1NTk4NjgyNzk3MSI+Ik5ldE1lZXRpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlV29yayIgbXNnaWQ9IjI5MjY4ODcwNTA1MzYzODcyIj4ixLDFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVPdGhlciIgbXNnaWQ9IjM5NTE3ODExMzE1NzAxMjQwODIiPiJEaWfJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlQ3VzdG9tIiBtc2dpZD0iMjI1NTIzNDE1MzcyMDg4MzIyIj4iRsmZcmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ3VzdG9tIiBtc2dpZD0iMzU0MjQwMzY3OTgyNzI5NzMwMCI+IsWeyZl4c2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI2Mjc0MzM0ODI1MTk1Mzc5MDc2Ij4iS8O2bcmZa8OnaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUJyb3RoZXIiIG1zZ2lkPSI4NzU3OTEzNTA2Nzg0MDY3NzEzIj4iUWFyZGHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUNoaWxkIiBtc2dpZD0iMTg5MDc0NjI3NzI3Njg4MTYyNiI+IlXFn2FxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRG9tZXN0aWNQYXJ0bmVyIiBtc2dpZD0iNjkwNDgwNzExMjEyMTEyMjEzMyI+IkV2IHlvbGRhxZ/EsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZhdGhlciIgbXNnaWQ9IjUyMjgwMzQ2ODcwODIwNTA3MjUiPiJBdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGcmllbmQiIG1zZ2lkPSI3MzEzMTA2NzYyNDgzMzkxMjYyIj4iRG9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZU1hbmFnZXIiIG1zZ2lkPSI2MzY1Njc3ODYxNjEwMTM3ODk1Ij4iTcO8ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTW90aGVyIiBtc2dpZD0iNDU3ODU3MTM1Mjk2Mjc1ODMwNCI+IkFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcmVudCIgbXNnaWQ9IjQ3NTU2MzU1Njc1NjI5MjUyMjYiPiJWYWxpZGV5biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcnRuZXIiIG1zZ2lkPSI3MjY2NDkwMjg1MTIwMjYyNzgxIj4iT3J0YXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWZlcnJlZEJ5IiBtc2dpZD0iMTAxNTczMDU5ODQ0MTM1NTI0Ij4iRMmZdsmZdCBlZMmZbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlbGF0aXZlIiBtc2dpZD0iMTc5OTgxOTkzMDA4NTYxMDI3MSI+IlFvaHVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlU2lzdGVyIiBtc2dpZD0iMTczNTk4MzU1NDQ3OTA3NjQ4MSI+IkJhY8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlU3BvdXNlIiBtc2dpZD0iMzk0MTM2OTM5NDI4Njk4MTE3Ij4iSMmZeWF0IHlvbGRhxZ/EsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlQ3VzdG9tIiBtc2dpZD0iMjQ3MzU4MDU5MzExMTU5MDk0NSI+IkbJmXJkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiLGj3NhcyBzyZloaWbJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLEsMWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJEaWfJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQxLBOIGtvZHUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyB2yZkgeWVuaSBQxLBOIGtvZCBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsga29kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJZZW5pIFBJTiBrb2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4ixZ5pZnLJmSBkYXhpbCBldG3JmWsgw7zDp8O8biB0b3h1bnVuIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIHBhcm9sIHlhesSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBQSU4gZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IllhbmzEscWfIFBJTiBrb2R1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gTWVueXUsIHNvbnJhIDAgYmFzxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsX2RpYWxvZ19udW1iZXJfZm9yX2Rpc3BsYXkiIG1zZ2lkPSI2OTYxOTIxMDMxOTUwOTA5NzAiPiJUyZljaWxpIG7Dtm1yyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg5NjM4MzkyNDI1NjU2NTMxOTIiPiJYaWRtyZl0IHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NjcmVlbl9sb2NrZWQiIG1zZ2lkPSI3Mjg4NDQzMDc0ODA2ODMyOTA0Ij4iRWtyYW4ga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2VuYWJsZWQiIG1zZ2lkPSI0NjE1NDA1MTYxNDEyNjA0OSI+IlTJmWNpbGkgesmZbmcga2lsaWRpbmkgYcOnbWFxIHbJmSB5YSB5ZXJsyZnFn2Rpcm3JmWsgw7zDp8O8biBNZW55dSBkw7x5bcmZc2luyZkgYmFzxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5faW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjY4NjI2MDAyODc5NzE1ODM2NCI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBNZW55dSBkw7x5bcmZc2luyZkgYmFzxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI3NDc4NzAzMjU0OTY0ODEwMzAyIj4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIG1vZGVsIMOnyZlraW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2VtZXJnZW5jeV9jYWxsIiBtc2dpZD0iNTM0NzYzMzc4NDQwMTI4NTIyNSI+IlTJmWNpbGkgesmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3JldHVybl90b19jYWxsIiBtc2dpZD0iNTI0NDI1OTc4NTUwMDA0MDAyMSI+IlrJmW5nyZkgcWF5xLF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX2NvcnJlY3QiIG1zZ2lkPSI5MDM5MDA4NjUwMzYyMjYxMjM3Ij4iRMO8emTDvHIhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX3dyb25nIiBtc2dpZD0iNDMxNzk1NTAxNDk0ODEwODc5NCI+IkJpciBkyZkgY8mZaGQgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGFzc3dvcmRfd3JvbmciIG1zZ2lkPSI1NzM3ODE1MzkzMjUzMTY1MzAxIj4iQmlyIGRhaGEgY8mZaGQgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iU2lmyZl0IGtpbGlkaSBjyZloZGzJmXJpbml6IGJpdGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wbHVnZ2VkX2luIiBtc2dpZD0iODA1Nzc2MjgyODM1NTU3MjMxNSI+IkJhdGFyZXlhIHnEscSfxLFsxLFyLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jaGFyZ2VkIiBtc2dpZD0iMzIxNjM1NzQ1Njg0MDYwNjI0Ij4iRG9sdWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2JhdHRlcnlfc2hvcnQiIG1zZ2lkPSI0NDc3MjY0ODQ5Mzg2ODUwMjY2Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbG93X2JhdHRlcnkiIG1zZ2lkPSIxNDgyODczOTgxOTE5MjQ5NzQwIj4iRWxla3RyaWvJmSBxb8WfdW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+IlNJTSBrYXJ0IHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MTY1OTE5NjA5NTc5MTQ3NCI+IlBsYW7Fn2V0ZMmZIFNJTSBrYXJ0IHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4iVGVsZWZvbmRhIFPEsE0ga2FydCB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4iU8SwTSBrYXJ0IGRheGlsIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjM1MjY1NzMwOTkwMTkzMTk0NzIiPiJTxLBNIGthcnQgeW94ZHVyIHbJmSB5YSBveHVuYSBiaWxpbm1pci4gU8SwTSBrYXJ0IGRheGlsIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4iWWFyYXJzxLF6IFNJTSBrYXJ0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiJTaXppbiBTxLBNIGthcnTEsW7EsXogZGFpbWkgb2xhcmFxIGRlYWt0aXZsyZnFn2liLlxuIEJhxZ9xYSBTxLBNIGthcnQgw7zDp8O8biBzaW1zaXogeGlkbcmZdCBwcm92YXlkZXJpbml6yZkgbcO8cmFjacmZdCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDE1OTQ5MDUxNTI3NDY4ODYiPiLGj3Z2yZlsa2kgdHJlayBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjA4OTI5NzY1MDQ4MTI5MjM2MyI+Ik7DtnZiyZl0aSB0cmVrIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1OTA4ODc4Njc4MDEyODAwMSI+IlBhdXphIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI1ODg4NDIyOTM4MzUxMDE5NDI2Ij4iT3h1dG1hIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTYyMzE4Mzc4NzY2OTg3NjAxIj4iRGF5YW5kxLFybWEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxzX29ubHkiIG1zZ2lkPSI2NzMzOTc4MzA0Mzg2MzY1NDA3Ij4iWWFsbsSxeiB0yZljaWxpIHrJmW5nbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjE0MzM4OTIyNDk4NjAyODUwMSI+IsWeyZliyZlryZkga2lsaWRsaWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9Ijc0NDE3OTczMzk5NzYyMzAiPiJTSU0ga2FydCBQVUsgaWzJmSBraWxpZGzJmW5pYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiLEsHN0aWZhZMmZw6dpIFTJmWxpbWF0bGFyxLFuYSBiYXjEsW4gdsmZIHlhIE3DvMWfdMmZcmkgWGlkbcmZdGzJmXJpbsmZIG3DvHJhY2nJmXQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiJTSU0ga2FydCBraWxpZGzJmW5pYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiJTxLBNIGthcnTEsW4ga2lsaWRpIGHDp8SxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjQ4MTYyMzgzMDM0NDEwNzIyMiI+IlNpeiBraWxpZCBtb2RlbGluaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gw6fJmWtkaW5pei4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYW5pecmZIGnDp2luZMmZIHllbmlkyZluIHPEsW5hecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjI3MjU5NzMyODYyMzkzNDQ1NTUiPiLFnmlmcsmZbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRkaW5pei5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjYyMTY2NzI3MDY1NDU2OTY5NTUiPiJTaXogUElOIG7Dtm1yyZluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LiBcbiBcbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYW5pecmZIGnDp2luZMmZIHTJmWtyYXIgc8SxbmF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjkxOTE2MTE5ODQ2MjU0NjA4MjAiPiJTaXoga2lsaWRpIGHDp21hcSDDvMOnw7xuIMWfYWJsb251IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBzyZlodiDDp8mZa2Rpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkYWhhIHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBwbGFuxZ9ldGluIGtpbGlkaW5pIEdvb2dsZSBoZXNhYsSxbsSxemEgZGF4aWwgb2xtYXFsYSBhw6dtYcSfxLFuxLF6IGlzdMmZbmlsyZljyZlrLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgYmlyIGRhaGEgeW94bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNTkwMjI3NTU5NzYzNzYyNzUxIj4iU2l6IGtpbGlkaSBhw6dtYXEgw7zDp8O8biDFn2FibG9udSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgc8mZaHYgw6fJmWtkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZGFoYSB1xJ91cnN1eiBjyZloZGTJmW4gc29ucmEgcGxhbsWfZXRpbiBraWxpZGluaSBHb29nbGUgaGVzYWLEsW7EsXphIGRheGlsIG9sbWFxbGEgYcOnbWHEn8SxbsSxeiB0yZlsyZliIG9sdW5hY2FxLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgYmlyIGRhaGEgeW94bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTI4MTA2Mzk5NzQ1NzU1NjA0Ij4iU2l6IHBsYW7Fn2V0IGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgdcSfdXJzdXogY8mZaGQgZXRzyZluaXosIHBsYW7Fn2V0IGZhYnJpayBheWFybGFyxLFuYSBzxLFmxLFybGFuYWNhcSB2yZkgYsO8dMO8biBtyZlsdW1hdGxhcsSxbsSxeiBpdMmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiJTaXogdGVsZWZvbiBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgdcSfdXJzdXogY8mZaGQgZXRtaXNpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkyZlmyZkgZMmZIHXEn3Vyc3V6IGPJmWhkIGV0c8mZbml6LCB0ZWxlZm9uIHphdm9kIGF5YXJsYXLEsW5hIHPEsWbEsXJsYW5hY2FxIHbJmSBiw7x0w7xuIG3JmWx1bWF0bGFyxLFuxLF6IGl0yZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI4MDg3MzUxNjQ5MzkzNDM2NSI+IlNpeiBwbGFuxZ9ldGluIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB5YW5sxLHFnyBjyZloZCBldG1pc2luaXouIFBsYW7Fn2V0IGFydMSxcSBkZWZvbHQgemF2b2QgaGFsxLFuYSBzxLFmxLFybGFuYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzAyNTUwNDcyMTc2NDkyMjI0NiI+IlNpeiB0ZWxlZm9udW4ga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBzyZlodiBjyZloZCBldGRpbml6LiBUZWxlZm9udW51eiBpbmRpIHphdm9kIG5pemFtbGFyxLFuYSB5ZW5pbMmZbsmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MjUxNDgwMzQzMzk0Mzg5NjY1Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIGJpciBkYWhhIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiLFnmFibG9udSB1bnV0ZHVudXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fZm9yZ290X3BhdHRlcm4iIG1zZ2lkPSIyNTg4NTIxNTAxMTY2MDMyNzQ3Ij4iSGVzYWIga2lsaWQgYcOnbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiJIyZlkZGluZMmZbiDDp294IGPJmWhkIGVkaWxkaSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIEdvb2dsZSBoZXNhYsSxbsSxeiBpbMmZIGRheGlsIG9sdW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9Ijg4NDY4ODE0MjQxMDY0ODQ0NDciPiLEsHN0aWZhZMmZw6dpIGFkxLEgKGUtcG/Dp3QpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjU5NTgwMjgzODM5NTQ3Mzg1MjgiPiLFnmlmcsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjcxMzA4OTM2OTQ3OTU3ODYzMDAiPiJEYXhpbCBvbHVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjEzNjQwNTE0NzMzNDc0ODU5MDgiPiJZYW5sxLHFnyBpc3RpZmFkyZnDp2kgYWTEsSB2yZkgcGFyb2wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iMTY5NjkyNDc2MzY5MDM3OTA3MyI+IsSwc3RpZmFkyZnDp2kgYWTEsW7EsXrEsSB2yZkgeWEgcGFyb2x1bnV6dSB1bnV0bXVzdW51ej9cbiAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIgbGlua2luyZkgZGF4aWwgb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjcxMTQ2MjczNTEyODY5MzM4NjciPiJZb3hsYW7EsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+IktpbGlkaSBhw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29uX2xhYmVsIiBtc2dpZD0iOTA2ODg3NzU3NjUxMzQyNTk3MCI+IlPJmXMgYcOnxLFxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb2ZmX2xhYmVsIiBtc2dpZD0iOTk2ODIyODI1MTU0MzE5MDI2Ij4iU8mZcyBzw7Zuw7xsw7xkw7xyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9zdGFydCIgbXNnaWQ9IjM5NDEwNDU1MDI5MzMxNDI4NDciPiJNb2RlbCBiYcWfbGFuZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+Ik1vZGVsIHTJmW1pemzJmW5kaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2VsbF9hZGRlZCIgbXNnaWQ9IjY3NTYwMzEyMDgzNTkyOTI0ODciPiJYYW5hIMmZbGF2yZkgZWRpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9kZXRlY3RlZCIgbXNnaWQ9IjQ5ODg3MzA4OTU1NTQwNTcwNTgiPiJNb2RlbCB0YW1hbWxhbmTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4gV2lkZ2V0ICUyJGQgb2YgJTMkZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4iV2lkZ2V0IMmZbGF2yZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IkJvxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IktpbGlkaSBhw6dtYSBzYWjJmXNpIGdlbmnFn2zJmW5kaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJLaWxpZGkgYcOnbWEgc2FoyZlzaSDDp8O2a2TDvC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB2aWRjZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IsSwc3RpZmFkyZnDp2kgc2VsZWt0b3J1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4iU3RhdHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4iS2FtZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+Ik1lZGlhIGtvbnRyb2xsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4iWWVuaWTJmW4gc8SxcmFsYW1hIHZpZGNldGkgYmHFn2xhZMSxbGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiJWaWRjZXRpbiB0yZlrcmFyIHNpZmFyacWfaSBzb25hIMOnYXRkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiJWaWRjZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gc2lsaW5kaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiJLaWxpZGkgYcOnbWEgc2FoyZlzaW5pIGdlbmnFn2zJmW5kaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4iU8O8csO8xZ9kw7xybcmZIGtpbGlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IktpbGQgYcOnbWEgbW9kZWxpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4iU2lmyZl0IEtpbGlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQaW4ga2lsaWQgYcOnbWFzxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4ixZ5pZnLJmSBraWxpZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4iTW9kZWwgc2FoyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4iU8O8csO8xZ9kw7xybcmZIHNhaMmZc2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9jaGFyYWN0ZXIiIG1zZ2lkPSI3MzM2NDcwNTM1Mzg1MDA5NTIzIj4ic2ltdm9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfd29yZCIgbXNnaWQ9IjcwNzU1NzAzMjgzNzQ5MTg2NjAiPiJzw7Z6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluayIgbXNnaWQ9IjU4MTU1MDg4ODA3ODI0ODgyNjciPiJsaW5rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluZSIgbXNnaWQ9IjU3NjQyNjcyMzUwMjYxMjA4ODgiPiJ4yZl0dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfYW1wbSIgbXNnaWQ9IjQ1ODQzMzgwODM1MjkzNTU5ODIiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lUDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX2NhcF9hbXBtIiBtc2dpZD0iMjA4MzQ2NTk5Mjk0MDQ0NDM2NiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IkFNUE0iPiVwPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X2ZhaWxlZCIgbXNnaWQ9IjU0MTAyNzAzMjkxMTQyMTIwNDEiPiJaYXZvZCB0ZXN0aSBhbMSxbm1hZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiJCdSBGQUNUT1JZX1RFU1QgZsmZYWxpeXnJmXRpIHlhbG7EsXpjYS9zaXN0ZW1kyZkvdMmZdGJpcWTJmSBxdXJhxZ9kxLFyxLFsbcSxxZ8gcGFrZXRsyZlyIMO8w6fDvG4gZMmZc3TJmWtsyZluaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm9fYWN0aW9uIiBtc2dpZD0iODcyOTkxODc0Nzk5OTk4NTYxIj4iRkFDVE9SWV9URVNUIMmZbcmZbGl5eWF0xLFuxLEgdMmZc2RpcWzJmXnJmW4gaGXDpyBiaXIgcGFrZXQgdGFwxLFsbWFkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfcmVib290IiBtc2dpZD0iNjMyMDE2ODIwMzA1MDc5MTY0MyI+IlllbmlkyZluIHnDvGtsyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIxOTg3NDgzOTc3ODM0NjAzODcyIj4iXCI8eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPlwiZGFrxLEgc8mZaGlmyZlkyZkgZGV5aWxpcjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjY5NjE5MDMyMTM3Mjk2Njc1NzMiPiJKYXZhU2NyaXB0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfdGl0bGUiIG1zZ2lkPSIyNjE5Mzc2NTU1NTI1MTE2NTkzIj4iTmF2aXFhc2l5YW7EsSBUyZlzZGlxIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF9wb3NpdGl2ZV9idXR0b24iIG1zZ2lkPSIzMTEyNzUyMDEwNjAwNDg0MTMwIj4iQnUgU8mZaGlmyZluaSBUyZlyayBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfbmVnYXRpdmVfYnV0dG9uIiBtc2dpZD0iNTYxNDg2MTI5MzAyNjA5OTcxNSI+IkJ1IHPJmWhpZsmZZMmZIHFhbMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkIiBtc2dpZD0iMzQ2ODgxNjM1NzA5NTM3ODU5MCI+Ijx4bGlmZjpnIGlkPSJNRVNTQUdFIj4lczwveGxpZmY6Zz5cblxuQnUgc8mZaGlmyZlkyZluIGvJmW5hcmEgbmF2aXFhc2l5YSBldG3JmWsgaXN0yZlkaXlpbml6yZkgyZltaW5zaW5peiBtaT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX2xhYmVsIiBtc2dpZD0iNjg2MDI2MTc1ODY2NTgyNTA2OSI+IlTJmXNkaXFsyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb3VibGVfdGFwX3RvYXN0IiBtc2dpZD0iNDU5NTA0NjUxNTQwMDI2ODg4MSI+Ik3JmXNsyZloyZl0OiBCw7Z5w7x0bcmZayB2yZkga2nDp2lsdG3JmWsgw7zDp8O8biBpa2kgZMmZZsmZIHTEsWtsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+IkF2dG9kb2xkdXJtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNldHVwX2F1dG9maWxsIiBtc2dpZD0iNzEwMzQ5NTA3MDE4MDU5MDgxNCI+IkF2dG9Eb2xkdXJtYW7EsSBheWFybGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX25hbWVfc2VwYXJhdG9yIiBtc2dpZD0iNjM1MDE0NTE1NDc3OTcwNjc3MiI+IiAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfbmFtZV9mb3JtYXQiIG1zZ2lkPSIzMjY4MDQxMDU0ODk5MjE0OTQ1Ij4iJDEkMiQzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X3NlcGFyYXRvciIgbXNnaWQ9Ijc0ODMzMDc4OTMxNzAzMjQxMjkiPiIsICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9mb3JtYXQiIG1zZ2lkPSI0ODc0NDU5NDU1Nzg2ODI3MzQ0Ij4iJDEkMiQzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcHJvdmluY2UiIG1zZ2lkPSIyMjMxODA2NTUzODYzNDIyMzAwIj4iVmlsYXnJmXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wb3N0YWxfY29kZSIgbXNnaWQ9IjQ2OTY0MzA0MDc2ODkzNzcxMDgiPiJQb8OndCBrb2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfc3RhdGUiIG1zZ2lkPSI2OTg4ODk0MTk1NTIwMDQ0NjEzIj4iRMO2dmzJmXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF96aXBfY29kZSIgbXNnaWQ9Ijg2OTc1NDQ1OTI2MjczMjI5NDYiPiJQb8OndCBpbmRla3NpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfY291bnR5IiBtc2dpZD0iMjM3MDczNzcxMDIwMzYyODkxIj4iw5Zsa8mZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfaXNsYW5kIiBtc2dpZD0iNDAyMDEwMDg3NTk4NDY2NzAyNSI+IkFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2Rpc3RyaWN0IiBtc2dpZD0iODQwMDczNTA3MzM5MjI2NzY3MiI+IlNhaMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZGVwYXJ0bWVudCIgbXNnaWQ9IjUzNDMyNzk0NjI1NjQ0NTMzMDkiPiJEZXBhcnRhbWVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ByZWZlY3R1cmUiIG1zZ2lkPSIyMDI4NDk5NDg1MDY1ODAwNDE5Ij4iUHJlZmVrdHVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3BhcmlzaCIgbXNnaWQ9IjgyMDIyMDYxMDU0Njg4MjAwNTciPiJQYXJpxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+IlNhaMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZW1pcmF0ZSIgbXNnaWQ9IjI4OTM4ODA5Nzg4MzU2OTg4MTgiPiLGj21pcmxpayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzc1MjY1Nzc1NDA1MTA2OTgzIj4iVmViIMmZbGbJmWNpbmzJmXJpbml6aSB2yZkgdGFyaXjDp8mZbMmZcmluaXppIG94dW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iODQ2MjM3ODIyNjYwMDQzOTY1OCI+IlTJmXRiaXHJmSBCcmF1emVyaW4gZGF4aWwgb2xkdcSfdSBiw7x0w7xuIGxpbmtsyZlyaSB2yZkgYsO8dMO8biBCcmF1emVyIMmZbGbJmWNpbmzJmXJpbmkgb3h1bWFxIGlta2FuxLEgdmVyaXIuIFFleWQ6IGJ1IGljYXrJmSB2ZWIgYnJhdXplciBpbWthbmxhcsSxIG9sYW4gw7zDp8O8bmPDvCB0yZlyyZlmIGJyYXp1ZXJsyZlyaSB2yZkgZGlnyZlyIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4geWVyaW7JmSB5ZXRpcmlsyZkgYmlsbcmZei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3MTQ3ODUxNjUyNzMzMTQ0OTAiPiJ2ZWIgyZlsZsmZY2lubMmZcmkgdsmZIHRhcml4w6fJmXNpIHlhem1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluaXpkyZlraSBicmF1emVyIHRhcml4aW5pIHbJmSDJmWxmyZljaW5syZlyaSByZWRha3TJmSBldG3JmWsgaWNhesmZc2kgdmVyaXIuIEJ1IHTJmXRiaXrJmSBicmF1emVyIG3JmWx1bWF0bGFyxLFuxLEgc2lsbcmZayB2yZkgeWEgcmVkYWt0yZkgZXRtyZlrIGlta2FuxLEgdmVyyZkgYmlsyZlyLiBRZXlkOiBCdSBpY2F6yZkgMy1jw7wgcGFydGl5YSBicmF1emVybMmZcsmZIHbJmSB5YSB2ZWIgYnJhdXppbmcgeMO8c3VzaXl5yZl0bGkgZGlnyZlyIHTJmXRiaXFsyZlyyZkgxZ9hbWlsIG9sdW5tYXlhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4iVMmZdGJpccmZIEJyYXV6ZXIgdGFyaXjDp8mZc2kgdsmZIHRlbGVmb251bnV6ZGEgc2F4bGFuxLFsYW4gyZlsZsmZY2lubMmZcsmZIGTJmXlpxZ9pa2xpayBldG3JmWsgaW1rYW7EsSB2ZXJpci4gQnVudW5sYSB0yZl0YmlxbMmZIEJyYXV6ZXIgZGF0YW7EsXrEsSBzaWzJmSB2yZkgeWEgZMmZeWnFn2RpcsmZIGJpbMmZci4gUWV5ZDogYnUgaWNhesmZIHZlYiBicmF1emVyIGlta2FubGFyxLEgb2xhbiDDvMOnw7xuY8O8IHTJmXLJmWYgYnJhenVlcmzJmXJpIHbJmSBkaWfJmXIgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB5ZXJpbsmZIHlldGlyaWzJmSBiaWxtyZl6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWxhcm0iIG1zZ2lkPSIxMzc5Mjk0NTU2MzYyMDkxODE0Ij4ic2lxbmFsIHF1cnVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWxhcm0iIG1zZ2lkPSIzMTYzOTIwMzkxNTc0NzM4NDgiPiJUyZl0YmlxyZkgcXVyYcWfZMSxcmxtxLHFnyB6yZluZ2xpIHNhYXRhIGFsYXJtIGF5YXJsYW1hxJ9hIGlta2FuIHZlcmlyLiBCyZl6aSB6yZluZ2xpIHNhYXQgdMmZdGJpcWzJmXJpIGJ1IMO2esmZbGxpeWkgZMmZc3TJmWtsyZltyZl5yZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWRkVm9pY2VtYWlsIiBtc2dpZD0iNTUyNTY2MDAyNjA5MDk1OTA0NCI+IlPJmXNsaSBwb8OndCDJmWxhdsmZIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWRkVm9pY2VtYWlsIiBtc2dpZD0iNjYwNDUwODY1MTQyODI1MjQzNyI+IlTJmXRiaXHJmSBzyZlzbGkgcG/Dp3QgcXV0dW51emEgbWVzYWogyZlsYXbJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjU5NjIyMjQxNTg5NTUyNzM5MzIiPiJCcmF1emVyaW4gZ2VvbG9rYXNpeWEgaWNhesmZbMmZcmluaSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSIxMDgzNzQzMjM0NTIyNjM4NzQ3Ij4iVMmZdGJpccmZIEJyYXV6ZXJpbiBnZW9sb2thc2l5YSBpY2F6yZlsyZlyaW5pIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIG3JmWthbiBtyZlsdW1hdGxhcsSxbsSxIHTJmXNhZMO8Zmkgc2F5dGxhcmEgZ8O2bmTJmXLJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wYWNrYWdlVmVyaWZpY2F0aW9uQWdlbnQiIG1zZ2lkPSI1NTY4MTM5MTAwNjQ1ODI5MTE3Ij4icGFrZXRsyZlyaSB0yZlzZGlxbMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iODQzNzU5MDE5MDk5MDg0MzM4MSI+IlTJmXRiaXHJmSBwYWtldGluIHF1cmHFn2TEsXLEsWxhYmlsyZluIG9sbWFzxLFuxLEgeW94bGFtYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSI0MTg3Nzg2NzkzMzYwMzI2NjU0Ij4icGFrZXQgZG/En3J1bGF5xLFjxLF5YSBiYcSfbGFuxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjMxODA3NDE3NzMyMzM4NjIxMjYiPiJTYWhpYmluyZkgcGFrZXQgeW94bGF5xLFjxLFsYXLEsW5hIHNvcsSfdSBnw7ZuZMmZcm3JmWsgaWNhesmZc2kgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGhlw6cgdmF4dCBpc3TJmW5pbG3JmW3JmWxpZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VyaWFsUG9ydCIgbXNnaWQ9IjU0NjA4MzMyNzY1NDYzMTA3NiI+InNlcmlhbCBwb3J0YSDDp8SxeMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlcmlhbFBvcnQiIG1zZ2lkPSIyOTkxNjM5OTg1MjI0NTk4MTkzIj4iU2FoaWJpbsmZIFNlcmlhbE1hbmFnZXIgQVBJIHZhc2l0yZlzaWzJmSBzZXJpYWwgcG9ydGxhcmEgaWNhesmZIGl6bmkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjUwNzc3NzQyOTc5NDM0MDkyODUiPiJ4YXJpY2kga29udGVudCBwcm92YXlkZXJsyZlyaW7JmSBnaXJpxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiJNyZl6bXVuIHByb3ZheWRlcmzJmXJpbsmZIMO2cnTDvGtkyZluIGRheGlsIG9sbWFxIMO8w6fDvG4gY2loYXogc2FoaWJpbsmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBsYXrEsW0gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVMb2NrIiBtc2dpZD0iMzUyNzU1ODM2NjYxNjY4MDg4OSI+ImF2dG9tYXRpayBjaWhheiB5ZW5pbMmZbm3JmWzJmXJpbmkgcG96dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVMb2NrIiBtc2dpZD0iMTY1NTYyNTgzMjE2Njc3ODQ5MiI+IlNhaGliaW7JmSB5ZW5pIHZlcnNpeWF5YSB5ZW5pbMmZbm3JmWsgw7zDp8O8biBuyZkgdmF4dCBxZXlyaS1pbnRlcmFrdGl2IHJlYm9vdCBtyZlsdW1hdMSxbsSxIHNpc3RlbcmZIHTJmWtsaWYgZXRtyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9tZXNzYWdlIiBtc2dpZD0iNzY3MzQ0Njg3MTM5MTk1NzkwIj4iQnJhdXplcmluIGJ1IMWfaWZyyZluaSB5YWRkYSBzYXhsYW1hc8SxbsSxIGlzdMmZeWlyc2l6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbm90bm93IiBtc2dpZD0iNjM4OTY3NTMxNjcwNjY5OTc1OCI+IsSwbmRpIHlveCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfcmVtZW1iZXIiIG1zZ2lkPSI2NDkxODc5Njc4OTk2NzQ5NDY2Ij4iWWFkZGEgc2F4bGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25ldmVyIiBtc2dpZD0iODI3NDMzMDI5Njc4NTg1NTEwNSI+Ikhlw6cgdmF4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9wZW5fcGVybWlzc2lvbl9kZW55IiBtc2dpZD0iNzM3NDAzNjcwODMxNjYyOTgwMCI+IkJ1IHPJmWhpZsmZbmkgYcOnbWFxIMO8w6fDvG4gaWNhesmZbml6IHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0X2NvcGllZCIgbXNnaWQ9IjQ5ODU3Mjk1MjQ2NzAxMzEzODUiPiJNyZl0biBwYW5veWEga29weWFsYW5kxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9yZV9pdGVtX2xhYmVsIiBtc2dpZD0iNDY1MDkxODkyMzA4MzMyMDQ5NSI+IkRhaGEgw6dveCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBlbmRfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNTcyMjE0NDYxNjc2MDE1NjQyIj4iTWVueXUrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiJib8WfbHVxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9lbnRlcl9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI3NDMzNjI3ODUxMTEzMDk2NjgiPiJkYXhpbCBvbHVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGVfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIzNjU4MTc4MDA3MjAyNzQ4MTY0Ij4ic2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoX2dvIiBtc2dpZD0iODI5ODAxNjY2OTgyMjE0MTcxOSI+IkF4dGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zZWFyY2giIG1zZ2lkPSI2NzQ5ODI2NjM5MDk4NTEyMTIwIj4iQXh0YXLEscWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9xdWVyeSIgbXNnaWQ9IjU5MTE3Nzg1OTMxMjUzNTUxMjQiPiJBeHRhcsSxxZ8gc29yxJ91c3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX2NsZWFyIiBtc2dpZD0iMTMzMDI4MTk5MDk1MTgzMzAzMyI+IlNvcsSfdW51IHTJmW1pemzJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc3VibWl0IiBtc2dpZD0iMjY4ODQ1MDEzMzI5Nzk4MzU0MiI+IlNvcsSfdW51IGfDtm5kyZlyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3ZvaWNlIiBtc2dpZD0iMjQ1MzIwMzY5NTY3NDk5NDQ0MCI+IlPJmXNsaSBheHRhcsSxxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iNzQ2MDY5NDA3MDMwOTczMDE0OSI+IlRveHVuYXJhcSBLyZnFn2YgZXQgZnVua3NpeWFzxLEgYWt0aXYgZWRpbHNpbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg2NTU4ODc1MzkwODk5MTA1NzciPiI8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IFRveHVuYXJhcSBLyZnFn2YgRXQgcmVqaW1pbmkgYWt0aXZsyZnFn2Rpcm3JmWsgaXN0yZl5aXIuIFRveHVuYXJhcSBLyZnFn2YgRXQgYcOnxLFsZMSxxJ/EsSB6YW1hbiwgYmFybWHEn8SxbsSxesSxbiBhbHTEsW5kYSBuyZkgb2xkdcSfdSBoYXFkYSBvbGFuIHTJmXN2aXJsyZlyaSBlxZ9pZMmZIHbJmSB5YSBnw7ZyyZkgYmlsyZlyc2luaXogdsmZIHlhcGxhbsWfZXRkyZkgaW5zYW5sYXJsYSDJmWxhccmZecmZIGtlw6dtyZlrIMO8w6fDvG4gamVzdGzJmXIgaMmZeWF0YSBrZcOnaXLJmSBiaWzJmXJzaW5pei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNzA4MTk5NjcyODUyMzczMTk1Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBUb3h1bmFyYXEgS8mZxZ9mIEV0IHJlamltaW5pIGFrdGl2bMmZxZ9kaXJtyZlrIGlzdMmZeWlyLiBUb3h1bmFyYXEgS8mZxZ9mIEV0IGHDp8SxbGTEscSfxLEgemFtYW4sIGJhcm1hxJ/EsW7EsXrEsW4gYWx0xLFuZGEgbsmZIG9sZHXEn3UgaGFxZGEgb2xhbiB0yZlzdmlybMmZcmkgZcWfaWTJmSB2yZkgeWEgZ8O2csmZIGJpbMmZcnNpbml6IHbJmSB5YSB0ZWxlZm9uZGEgaW5zYW5sYXJsYSDJmWxhccmZecmZIGtlw6dtyZlrIMO8w6fDvG4gamVzdGzJmXIgaMmZeWF0YSBrZcOnaXLJmSBiaWzJmXJzaW5peiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iNzM5NjM4NDUwODk1Mzc3OTkyNSI+IjEgYXkgw7ZuY8mZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmVmb3JlT25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI5MDkxMzQ1NDY4MzY0OTk4MjYiPiIxIGF5IMmZdnbJmWwiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9zZWNvbmRzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4Njk4NzAwNTY1NDc4OTYwMTEiPiIxIHNhbml5yZkgyZl2dsmZbCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzkwMzcwNjgwNDM0OTU1NjM3OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX21pbnV0ZXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzMwNjc4NzQzMzA4ODgxMDE5MSI+IjEgZMmZcWlxyZkgyZl2dsmZbCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjE3Njk0MjAwODkxNTQ1NTExNiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGTJmXFpccmZIMmZdnbJmWwiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9ob3Vyc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI5MTUwNzk3OTQ0NjEwODIxODQ5Ij4iMSBzYWF0IMmZdnbJmWwiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI0NjcyNzMyMzk1ODc1ODc1NjkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0IMmZdnbJmWwiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9Imxhc3RfbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMwNjk5OTI4MDgxNjQzMTgyNjgiPiJTb24gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZ8O8biI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9Imxhc3RfbW9udGgiIG1zZ2lkPSIzOTU5MzQ2NzM5OTc5MDU1NDMyIj4iS2XDp8mZbiBheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZGVyIiBtc2dpZD0iNTIxMTk3NTAyMjgxNTU1NDg0MCI+IkvDtmhuyZkiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9kYXlzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg2MTM1ODUzNDM5ODExNTgyMCI+ImTDvG7JmW4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI0Nzk1ODY0NjYxNTMzMTQ2MzMiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBnw7xuIMmZdnbJmWwiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9zZWNvbmRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjcyOTc0NTU2MDk1NDkwNTEwMiI+IjEgc2FuaXnJmSDJmXJ6aW5kyZkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEyNDE5MjYxMTY0NDM5NzQ2ODciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYW5pecmZIGnDp2luZMmZIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJpbl9udW1fbWludXRlcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg3OTMwOTUyNTEzMjUyMDAzOTUiPiIxIGTJmXFpccmZIGnDp2luZMmZIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMzMwNzEzOTM2Mzk5NDQ4NzQ5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZMmZcWlxyZkgyZlyemluZMmZIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJpbl9udW1faG91cnMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI3MTY0MzUzMzQyNDc3NzY5OTk5Ij4iMSBzYWF0YSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3MjkwNjc3MzUzNzI3Mzg5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FhdGEiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9kYXlzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTQxMzA4ODc0MzAwOTgzOTUxOCI+InNhYmFoIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1MTA5NDQ5Mzc1MTAwOTUzMjQ3Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZ8O8biDJmXJ6aW5kyZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1fc2Vjb25kc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxODQ5MDM2ODQwMjAwMDY5MTE4Ij4iMSBzYW5pecmZIMmZdnbJmWwiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM2OTkxNjkzNjY2NTA5MzA0MTUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYW4gyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9taW51dGVzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjYzNjE0OTAxNDcxMTM4NzE1NDUiPiIxIGTJmXFpccmZIMmZdnbJmWwiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg1MTE2NDk2ODU5NzE1MDcxMCI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGTJmXFpccmZIMmZdnbJmWwiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1faG91cnNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDc5NjIxMjAzOTcyNDcyMjExNiI+IjEgc2FhdCDJmXZ2yZlsIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2ODg5OTcwNzQ1NzQ4NTM4OTAxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FhdCDJmXZ2yZlsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2RheXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODQ2MzE2MTcxMTQ5MjY4MDMwOSI+ImTDvG7JmW4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM0NTMzNDI2Mzk2MTY0ODExOTEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBnw7xuIMmZdnbJmWwiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NDIyMjUzNzA3OTUwNjYyOTkiPiIxIHNhbiDJmXJ6aW5kyZkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0OTU4ODAxMDg4MjU4MDUxMDgiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYW4gyZlyemluZMmZIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NjI3ODYxNDk5MjgyODQ4NzgiPiIxIGTJmXEgyZlyemluZMmZIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MjE2MTEzMjkyNzA2NTY4NzI2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZMmZcWlxyZl5yZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1faG91cnMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjc0NzA4MTE4MTI0MDQ1MjQ2Ij4iMSBzYWF0IMmZcnppbmTJmSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzcwNTM3Mzc2Njc5ODAxMzQwNiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhYXRhIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIyMTc4NTc2MjU0Mzg1NzM5ODU1Ij4ic2FiYWgiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI5NzMwNjI5NjgwMzgzNTU5OTEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBnw7xuyZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfZGF0ZSIgbXNnaWQ9IjkwOTM5NDk3NTc3NTc0NDUxMTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JXM8L3hsaWZmOmc+IHRhcml4aW5kyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfdGltZSIgbXNnaWQ9IjU1MDY4MzEyNDQyNjMwODM3OTMiPiJzYWF0IDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfeWVhciIgbXNnaWQ9IjUwNDAzOTU2NDA3MTE4NjcxNzciPiI8eGxpZmY6ZyBpZD0iWUVBUiI+JXM8L3hsaWZmOmc+IGlsaW5kyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXkiIG1zZ2lkPSI4MTQ0MTk1Nzc2MDU4MTE5NDI0Ij4iZ8O8biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheXMiIG1zZ2lkPSI0Nzc0NTQ3NjYxMDIxMzQ0NjAyIj4iZ8O8bmzJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyIiBtc2dpZD0iMjEyNjc3MTkxNjQyNjE4OTQ4MSI+InNhYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VycyIgbXNnaWQ9Ijg5NDQyNDAwNTI2Njg1Mjk5MyI+InNhYXRsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGUiIG1zZ2lkPSI5MTQ4ODc4NjU3NzAzNzY5ODY4Ij4iZMmZcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVzIiBtc2dpZD0iNTY0NjAwMTAwNTgyNzAzNDUwOSI+ImTJmXFpccmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kIiBtc2dpZD0iMzE4NDIzNTgwODAyMTQ3OCI+InNuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kcyIgbXNnaWQ9IjMxNjE1MTUzNDcyMTY1ODkyMzUiPiJzYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWVrIiBtc2dpZD0iNTYxNzk2MTUzNzE3MzA2MTU4MyI+ImjJmWZ0yZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiJoyZlmdMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhciIgbXNnaWQ9IjQwMDExMTgyMjEwMTM4OTIwNzYiPiJpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJzIiBtc2dpZD0iNjg4MTU3NzcxNzk5MzIxMzUyMiI+ImlsIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJkdXJhdGlvbl9zZWNvbmRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjk2MjAxNTUyODM3Mjk2OTQ4MSI+IjEgc2FuaXnJmSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTg4NjEwNzc2NjU3NzE2Njc4NiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhbml5yZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0OTE1NDE0MDAyNTQ2MDg1NjE3Ij4iMSBkyZlxaXHJmSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzE2NTE4NzE2OTIyNDkwODc3NSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGTJmXFpccmZIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJkdXJhdGlvbl9ob3VycyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg5MTc0Njc0OTEyNDg4MDk5NzIiPiIxIHNhYXQiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM4NjM5NjI4NTQyNDY3NzM5MzAiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RpdGxlIiBtc2dpZD0iMzUzNDUwOTEzNTQzODM1MzA3NyI+IlZpZGVvIHByb2JsZW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RleHRfaW52YWxpZF9wcm9ncmVzc2l2ZV9wbGF5YmFjayIgbXNnaWQ9IjMxODY2NzAzMzU5Mzg2NzA0NDQiPiJCdSB2aWRlbyBidSBjaWhhemEgc3RyaW0gb2x1bm1hcSDDvMOnw7xuIHV5xJ91biBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF91bmtub3duIiBtc2dpZD0iMzQ1MDQzOTE1NTE4NzgxMDA4NSI+IkJ1IHZpZGVvIG94dW11ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iIG1zZ2lkPSIyODIyMjM4MjE1MTAwNjc5NTkyIj4iT0siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGl2ZV90aW1lIiBtc2dpZD0iMTgxODU1NzE3NzgyOTQxMTQxNyI+Ijx4bGlmZjpnIGlkPSJEQVRFIj4lMSRzPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9vbiIgbXNnaWQ9IjcyNDUzNTM1Mjg4MTg1ODc5MDgiPiJnw7xub3J0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Ik5vb24iIG1zZ2lkPSIzMzQyMTI3NzQ1MjMwMDEzMTI3Ij4iR8O8bm9ydGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaWRuaWdodCIgbXNnaWQ9IjcxNjYyNTk1MDg4NTA0NTc1OTUiPiJnZWPJmXlhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTWlkbmlnaHQiIG1zZ2lkPSI1NjMwODA2OTA2ODk3ODkyMjAxIj4iR2VjyZl5YXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfbW1fc3MiIG1zZ2lkPSI0NDMxNTU1OTQzODI4NzExNDczIj4iPHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUxJDAyZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUyJDAyZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGFwc2VkX3RpbWVfc2hvcnRfZm9ybWF0X2hfbW1fc3MiIG1zZ2lkPSIxODQ2MDcxOTk3NjE2NjU0MTI0Ij4iPHhsaWZmOmcgaWQ9IkhPVVJTIj4lMSRkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTIkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTMkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdEFsbCIgbXNnaWQ9IjY4NzY1MTg5MjU4NDQxMjkzMzEiPiJIYW3EsXPEsW7EsSBzZcOnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkvJmXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcHlhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJZZXJsyZnFn2RpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4ixo92yZl6IGV0Li4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIGtvcHlhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJNyZl0biBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iTcmZdG4gc2XDp2ltaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJMw7zEn8mZdMmZIMmZbGF2yZkgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IlNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImlucHV0TWV0aG9kIiBtc2dpZD0iMTY1MzYzMDA2MjMwNDU2Nzg3OSI+IkRheGlsZXRtyZkgbWV0b2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWRpdFRleHRNZW51VGl0bGUiIG1zZ2lkPSI0OTA5MTM1NTY0OTQxODE1NDk0Ij4iTcmZdG4gyZltyZlsaXl5YXRsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGl0bGUiIG1zZ2lkPSI1NTc2MjcyNDk2MzY1Njg0ODM0Ij4iWWFkZGHFnyB5ZXJpIGJpdGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190ZXh0IiBtc2dpZD0iNjY0MDUwNTgxNzYxNzQxNDM3MSI+IkLJmXppIHNpc3RlbSBmdW5rc2l5YWxhcsSxIGnFn2zJmW3JmXnJmSBiaWzJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4NzE4MzM1MTIxMDYwNzg3OTE0Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBpxZ9syZluaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiJEYWhhIMOnb3ggbcmZbHVtYXQgw7zDp8O8biB2yZkgeWEgdMmZdGJpcWkgZGF5YW5kxLFybWFxIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvayIgbXNnaWQ9IjU5NzAwNjA0MzA1NjI1MjQ5MTAiPiJPSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiJMyZnEn3YgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZXMiIG1zZ2lkPSI1MzYyOTgyMzAzMzM3OTY5MzEyIj4iT0siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJubyIgbXNnaWQ9IjUxNDE1MzEwNDQ5MzU1NDE0OTciPiJMyZnEn3YgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaWFsb2dfYWxlcnRfdGl0bGUiIG1zZ2lkPSIyMDQ5NjU4NzA4NjA5MDQzMTAzIj4iRGlxccmZdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvYWRpbmciIG1zZ2lkPSI3OTMzNjgxMjYwMjk2MDIxMTgwIj4iWcO8a2zJmW5pcuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb24iIG1zZ2lkPSIxNTQ0NjgyNzU1NTE0NDk0Mjk4Ij4iQcOHSVEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29mZiIgbXNnaWQ9IjY4MTU4NzAzODY5NzI4MDU4MzIiPiJRQVBBTEkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+IsaPbcmZbGl5eWF0xLEgdGFtYW1sYXnEsW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IkJ1IGbJmWFsaXl5yZl0IMO8w6fDvG4gZGVmb2x0IGlzdGlmYWTJmSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiJTaXN0ZW0gYXlhcmxhcsSxbmRhLCBUyZl0YmlxbMmZcmTJmSB2yZkgRW5kaXJpbG1pxZ9syZlyZMmZIGRlZm9sdHUgdMmZbWl6bMmZeWluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZUFjdGl2aXR5IiBtc2dpZD0iNzQ4Njg3NjE0Nzc1MTgwMzMzMyI+IkbJmWFsaXl5yZl0IHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZVVzYkFjdGl2aXR5IiBtc2dpZD0iNjg5NDc0ODQxNjA3MzU4MzUwOSI+IlVTQiBjaWhheiDDvMOnw7xuIHTJmXRiaXEgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9BcHBsaWNhdGlvbnMiIG1zZ2lkPSIyOTkxODE0MjczOTM2NTA0Njg5Ij4iSGXDpyBiaXIgdMmZdGJpcSBidSDJmW3JmWxpeXlhdMSxIGFwYXJhIGJpbG1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZXJyX3RpdGxlIiBtc2dpZD0iMTkwNTgwMDU2MDMxNzEzNzc1MiI+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZXJyX2FwcGxpY2F0aW9uIiBtc2dpZD0iOTMyNjI4NDg4MDEzMDkyNzc2Ij4iVMmZyZlzc8O8ZiBraSwgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBkYXlhbmTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZXJyX3Byb2Nlc3MiIG1zZ2lkPSI0NTA3MDU4OTk3MDM1Njk3NTc5Ij4iVMmZyZlzc8O8ZiBraSwgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IHByb3Nlc2kgZGF5YW5kxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX3RpdGxlIiBtc2dpZD0iNDM1MTk0ODQ4MTQ1OTEzNTcwOSI+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfYWN0aXZpdHlfYXBwbGljYXRpb24iIG1zZ2lkPSIxOTA0NDc3MTg5MDU3MTk5MDY2Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMiRzPC94bGlmZjpnPiBjYXZhYiB2ZXJtaXIuXG5cbk9udSBiYcSfbGFtYXEgaXN0yZl5aXJzaW5pej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfYWN0aXZpdHlfcHJvY2VzcyIgbXNnaWQ9IjU3NzYyMDk4ODMyOTkwODk3NjciPiI8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IGFrdGl2aXRpc2kgY2F2YWIgdmVybWlyLiBcblxuT251IGJhxJ9sYW1hcSBpc3TJmXlpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hcHBsaWNhdGlvbl9wcm9jZXNzIiBtc2dpZD0iODk0MTc1NzYwNzM0MDQ4MTA1NyI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gY2F2YWIgdmVybWlyLiBPbnUgYmHEn2xhbWFxIGlzdMmZeWlyc2luaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX3Byb2Nlc3MiIG1zZ2lkPSI2NTEzMjA5ODc0ODgwNTE3MTI1Ij4iUHJvc2VzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiBjYXZhYiB2ZXJtaXIuIFxuIFxuIE9udSBiYcSfbGFtYXEgaXN0yZl5aXJzaW5pej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9jbG9zZSIgbXNnaWQ9IjgzNDYwNzIwOTQ1MjEyNjU2MDUiPiJPSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcG9ydCIgbXNnaWQ9IjQwNjAyMTgyNjA5ODQ3OTU3MDYiPiLFnmlrYXnJmXQgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndhaXQiIG1zZ2lkPSI3MTQ3MTE4MjE3MjI2MzE3NzMyIj4iR8O2emzJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlYnBhZ2VfdW5yZXNwb25zaXZlIiBtc2dpZD0iMzI3Mjc1ODM1MTEzODEyMjUwMyI+IkJ1IHPJmWhpZsmZIHlhcmFyc8SxemxhxZ/EsWIuXG5cbkJhxJ9sYW1hcSBpc3TJmXlpcnNpej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE1NDc5OTc3ODA1MDY3MTM1ODEiPiJUyZl0YmlxIHnDtm5syZluZGlyaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3JlcGxhY2UiIG1zZ2lkPSI2MjAyNDk4OTQ5OTcwMjgxNDEyIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBpbmRpIMOnYWzEscWfxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBpbGsgYmHFn2xhZMSxbGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2NhbGUiIG1zZ2lkPSIzMjAyOTU1NjY3Njc1OTQ0NDk5Ij4iTWlxeWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4iSMmZbWnFn8mZIGfDtnN0yZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4iQnVubGFyxLEgU2lzdGVtIGF5YXJsYXLEsW5kYSB5ZW5pZMmZbiBha3RpdmzJmcWfZGlyIFnDvGtsyZlubWnFnyAmZ3Q7IFTJmXRiaXFsyZlyICZndDsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IlTJmXRiaXEgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiAocHJvc2VzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMiRzPC94bGlmZjpnPikgU3RyaWN0TW9kZSBzaXlhc8mZdGluaSBwb3pkdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiI8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4gcHJvc2VzaSBTdHJpY3RNb2RlIHNpeWFzyZl0aW5pIHBvemR1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+IkFuZHJvaWQgdMmZa21pbGzJmcWfZGlyaWxpci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IMmZZGTJmWTJmW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0yZl0YmlxIG9wdGltYWxsYcWfxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3N0YXJ0aW5nX2FwcHMiIG1zZ2lkPSI0NTE0NjQ1MTYzNDY5MjY3MTMiPiJUyZl0YmlxbMmZciBiYcWfbGFkxLFsxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2NvbXBsZXRlIiBtc2dpZD0iMTQwNTk1NDc1NDExMjk5OTIyOSI+IlnDvGtsyZltyZkgYmHFn2Egw6dhdMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uIiBtc2dpZD0iOTA4NzA2Mzk4NTc3NjYyNjE2NiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiUxJHM8L3hsaWZmOmc+IMOnYWzEscWfxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbl9kZXRhaWwiIG1zZ2lkPSIxNzIxNjgxNzQxNjE3ODk4ODY1Ij4iVMmZdGJpccmZIGtlw6dtyZlrIMO8w6fDvG4gdG94dW51biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90aXRsZSIgbXNnaWQ9IjcxNTMxNjcwODU0MDMyOTgxNjkiPiJUyZl0YmlxbMmZcsmZIGtlw6dpbHNpbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGV4dCIgbXNnaWQ9IjcwMjI2MzE5MjQ1MzQ0MDY0MDMiPiJCaXIgdMmZdGJpcSBhcnTEsXEgacWfbMmZeWlyLiBEaWfJmXJpbmkgYmHFn2xhdG1hcSDDvMOnw7xuIG9udSBkYXlhbmTEsXJtYWzEsXPEsW7EsXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9hY3Rpb24iIG1zZ2lkPSI0OTMxMjkxNzIyMzg1NjYyODIiPiI8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4gYsO2bG3JmXNpbsmZIHFhecSxZMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDgyMDk0Mjc1NTgwMzU4MDQ5Ij4iWWVuaSB0yZl0YmlxaSBiYcWfbGF0bWF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ld19hcHBfYWN0aW9uIiBtc2dpZD0iNTQ3Mjc1NjkyNjk0NTQ0MDcwNiI+Ijx4bGlmZjpnIGlkPSJPTERfQVBQIj4lMSRzPC94bGlmZjpnPiB0yZl0YmlxaW5pIGJhxZ9sYWTEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IkvDtmhuyZkgdMmZdGJpcWkgeWFkZGEgc2F4bGFtYWRhbiBkYXlhbmTEsXLEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VuZFRleHQiIG1zZ2lkPSI1MjA5ODc0NTcxOTU5NDY5MTQyIj4iTcmZdG4gw7zDp8O8biDJmW3JmWxpeXlhdCBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfcmluZ3RvbmUiIG1zZ2lkPSI2ODg1NDIxNDA2ODQ1NzM0NjUwIj4iWsmZbmdpbiBzyZlzIGfDvGPDvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpYyIgbXNnaWQ9IjU0MjE2NTExNTcxMzg2MjgxNzEiPiJNZWRpYSBoyZljbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWNfaGludF9wbGF5aW5nX3Rocm91Z2hfYmx1ZXRvb3RoIiBtc2dpZD0iOTE2NTk4NDM3OTM5NDYwMTUzMyI+IkJsdWV0b290aCB2YXNpdMmZc2lsyZkgb3luYWTEsWzEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWNfaGludF9zaWxlbnRfcmluZ3RvbmVfc2VsZWN0ZWQiIG1zZ2lkPSI4MzEwNzM5OTYwOTczMTU2MjcyIj4iU8mZc3NpeiB6yZluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9jYWxsIiBtc2dpZD0iMzk0MTY4MDA0MTI4Mjc4ODcxMSI+IkRheGlsaSB6yZluZyBzyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ibHVldG9vdGhfY2FsbCIgbXNnaWQ9IjIwMDI4OTE5MjYzNTExNTE1MzQiPiJCbHVldG9vdGggesmZbmcgaMmZY21pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IlNpcW5hbCBzyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIyNDIyMjY1NjU2NzQ0Mjc2NzE1Ij4iQmlsZGlyacWfIHPJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Vua25vd24iIG1zZ2lkPSIxNDAwMjE5NjY5NzcwNDQ1OTAyIj4iSMmZY20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4iQmx1ZXRvb3RoIGjJmWNtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX3JpbmdlciIgbXNnaWQ9IjMzMjYwMDM4NDcwMDYxNjI0OTYiPiJayZluZyBzyZlzaSBnw7xjw7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9pbmNhbGwiIG1zZ2lkPSI4ODkwMDczMjE4MTU0NTQzMzk3Ij4iWsmZbmcgaMmZY21pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbWVkaWEiIG1zZ2lkPSI0MjE3MzExNzE5NjY1MTk0MjE1Ij4iTWVkaWEgaMmZY21pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbm90aWZpY2F0aW9uIiBtc2dpZD0iNzA0NDk4NjU0NjQ3NzI4MjI3NCI+IkJpbGRpcmnFnyBzyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX2RlZmF1bHQiIG1zZ2lkPSIzNzg5NzU4OTgwMzU3Njk2OTM2Ij4iRGVmb2x0IHJpbnF0b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9kZWZhdWx0X3dpdGhfYWN0dWFsIiBtc2dpZD0iODEyOTU2MzQ4MDg5NTk5MDM3MiI+IkRlZm9sdCByaW5xdG9uICg8eGxpZmY6ZyBpZD0iQUNUVUFMX1JJTkdUT05FIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9zaWxlbnQiIG1zZ2lkPSI3OTM3NjM0MzkyNDA4OTc3MDYyIj4iSGXDpyBiaXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfcGlja2VyX3RpdGxlIiBtc2dpZD0iMzUxNTE0MzkzOTE3NTExOTA5NCI+IlrJmW5nIHPJmXNsyZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4iTmFtyZlsdW0gcmlucXRvbiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NjU0MTIzOTg3NDE4MTY4NjkzIj4iV2ktRmkgxZ/JmWLJmWvJmXNpIG3DtnZjdWRkdXIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQxOTI0MjQ0ODkxNjgzOTczODYiPiJXaS1GaSDFn8mZYsmZa8mZbMmZcmkgbcO2dmN1ZGR1ciI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGVfZGV0YWlsZWQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4iV2ktRmkgxZ/JmWLJmWvJmW5pIGHDp8SxbiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzkxNTg5NTMyMzY0NDI5Mjc2OCI+IkHDp8SxcSBXaS1GaSDFn8mZYsmZa8mZbMmZcmkgbcO2dmN1ZGR1ciI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4iV2ktRmkgxZ/JmWLJmWvJmXNpbsmZIGRheGlsIG9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV0d29ya19hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9Ijg0OTUxNTU1OTMzNTgwNTQ2NzYiPiLFnsmZYsmZa8mZecmZIGRheGlsIG9sdW4iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbmV0d29ya19hdmFpbGFibGVfc2lnbl9pbl9kZXRhaWxlZCAoODAwMDA4MTk0MTQ0Nzk3NjExOCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiJXaS1GaVwnYSBxb8WfdWxtYXEgYWzEsW5tYWTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZF9kZXRhaWxlZCIgbXNnaWQ9IjU1NDg3ODA3NzY0MTgzMzI2NzUiPiIgaW50ZXJuZXQgYmHEn2xhbnTEsXPEsSBrZXlmaXl5yZl0c2l6ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijk3NjExNzgyNjU5MzI0NTE3Ij4iV2ktRmkgRGlyZWN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4iV2ktRmkgRGlyZWN0IMmZbcmZbGl5eWF0xLFuxLEgYmHFn2xhdC4gQnUgV2ktRmkgbcO8xZ90yZlyaS9ob3RzcG90dSBiYcSfbGF5YWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiJXaS1GaSBEaXJlY3QgYmHFn2xhZMSxbGEgYmlsbcmZZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMDY4MzIxODgxNjczNzM0ODg2Ij4iV2ktRmkgRGlyZWN0IGFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiJBeWFybGFyIMO8w6fDvG4gdG94dW51biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiJRyZlidWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlY2xpbmUiIG1zZ2lkPSIyMTEyMjI1NDUxNzA2MTM3ODk0Ij4ixLBtdGluYSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl9zZW50X3RpdGxlIiBtc2dpZD0iMTMxODk3NTE4NTExMjA3MDczNCI+IkTJmXbJmXRuYW3JmSBnw7ZuZMmZcmlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3RvX2Nvbm5lY3RfdGl0bGUiIG1zZ2lkPSI0OTU4ODAzOTQ4NjU4NTMzNjM3Ij4iUW/Fn3VsbWFxIMO8w6fDvG4gZMmZdsmZdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2Zyb21fbWVzc2FnZSIgbXNnaWQ9IjU3MDM4OTE3NDczMTk1MTc2OSI+IktpbWTJmW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdG9fbWVzc2FnZSIgbXNnaWQ9IjI0ODk2ODk3NDUyMjA0NDA5OSI+IktpbcmZOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VudGVyX3Bpbl9tZXNzYWdlIiBtc2dpZD0iNTkyMDkyOTU1MDM2NzgyODk3MCI+IlTJmWzJmWIgb2x1bmFuIFDEsE4ga29kdSBkYXhpbCBlZGluOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4iUMSwTjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODAxMjk4MTI1Nzc0MjIzMjQ3NSI+IkJ1IHBsYW7Fn2V0IDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gY2loYXrEsW5hIHFvxZ91bGFuIHphbWFuIFdpLUZpIMWfyZliyZlryZlzaW5kyZluIG3DvHbJmXFxyZl0aSBheXLEsWxtxLHFnyBvbGFjYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczNjM5MDcyMTM3ODc0NjkxNTEiPiJCdSB0ZWxlZm9uIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gY2loYXrEsW5hIHFvxZ91bGFuIHphbWFuIFdpLUZpIMWfyZliyZlryZlzaW5kyZluIG3DvHbJmXFxyZl0aSBheXLEsWxtxLHFnyBvbGFjYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfY2hhcmFjdGVyIiBtc2dpZD0iMzM2NTU1MDEyMDYxNzcwMTc0NSI+IlNpbXZvbCBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfdGl0bGUiIG1zZ2lkPSI3Mjk2NjEyNzgxMTI4OTE3NzE5Ij4iU01TIG1lc2FqIGfDtm5kyZlyaWxpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsgw6dveCBzYXlkYSBTTVMgbWVzYWogZ8O2bmTJmXJpci4gQnUgdMmZdGJpcWluIG1lc2FqIGfDtm5kyZlybcmZecmZIGRhdmFtIGV0bcmZc2luyZkgaWNhesmZIHZlcmlyc2luaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfeWVzIiBtc2dpZD0iMzY2MzcyNTk5Mzg1NTgxNjgwNyI+IsSwY2F6yZkgdmVyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9ubyIgbXNnaWQ9IjYyNTQzODU2MTM5NTUzNDk4MiI+IlLJmWRkIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX21lc3NhZ2UiIG1zZ2lkPSIxNjQ1NDM2NDY2Mjg1MzEwODU1Ij4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDvCoCZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJERVNUX0FERFJFU1MiPiUyJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDDvG52YW7EsW5hIG1lc2FqIGfDtm5kyZlybcmZayBpc3TJmXlpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iMzQ5MjAyNTcxOTg2ODA3ODQ1NyI+IkJ1LCBtb2JpbCBoZXNhYsSxbsSxemEgIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IsmZbGF2yZkgdGFyaWZsyZlyaW4gdMmZdGJpcSBvbHVubWFzxLEiPC9mb250PiIgaWzJmSBuyZl0aWPJmWzJmW7JmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNTUyMzgyNjM0OTEwNTEyMzY4NyI+PGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4iQnUgbW9iaWwgaGVzYWLEsW7EsXpkYSDDtmTJmW5pxZ9syZlyyZkgc8mZYsmZYiBvbGFjYXEuIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWxsb3ciIG1zZ2lkPSI0NDU4ODc4NjM3MTExMDIzNDEzIj4iR8O2bmTJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2RlbnkiIG1zZ2lkPSIyOTI3Mzg5ODQwMjA5MTcwNzA2Ij4iTMmZxJ92IGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+Ik3JmW5pbSBzZcOnaW1pbWkgeWFkZGEgc2F4bGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl91bmRvX2luc3RydWN0aW9uIiBtc2dpZD0iNDk2MDk0NDEzMzA1MjI4NzQ4NCI+IkJ1bnUgc29ucmEgQXlhcmxhcmRhIGTJmXlpxZ/JmSBiaWzJmXJzaW5pesKgJmd0O8KgVMmZdGJpcWzJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2Fsd2F5c19hbGxvdyIgbXNnaWQ9IjMyNDExODExNTQ4Njk0OTMzNjgiPiJIyZltacWfyZkgaWNhesmZIHZlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbmV2ZXJfYWxsb3ciIG1zZ2lkPSI0NDY5OTI3NjU3NzQyNjk2NzMiPiJIZcOnIHZheHQgaWNhesmZIHZlcm3JmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX3RpdGxlIiBtc2dpZD0iNjIyNzcxMjMxOTIyMzIyNjE4NSI+IlNJTSBrYXJ0IMOnxLF4YXLEsWxkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF9tZXNzYWdlIiBtc2dpZD0iMjMzMzE2NDU1OTk3MDk1ODY0NSI+IkNpaGF6xLFuxLF6xLEgZXRpYmFybMSxIFNJTSBrYXJ0IGlsyZkgYmHFn2xhZGFuYSBraW1pIG1vYmlsIMWfyZliyZlryZkgyZlsw6dhdG1heiBvbGFjYXEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2RvbmVfYnV0dG9uIiBtc2dpZD0iODI3OTQ5OTg5MzY5OTYzNzc1Ij4iQml0ZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4iU8SwTSBrYXJ0IMmZbGF2yZkgZWRpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX21lc3NhZ2UiIG1zZ2lkPSI2NTk5OTQ1MzAxMTQxMDUwMjE2Ij4iTW9iaWwgxZ/JmWLJmWvJmXnJmSBxb8WfdWxtYXEgw7zDp8O8biBjaWhhesSxbsSxesSxIHllbmlkyZluIGJhxZ9sYWTEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX3Jlc3RhcnRfYnV0dG9uIiBtc2dpZD0iNDcyMjQwNzg0MjgxNTIzMjM0NyI+IlllbmlkyZluIGJhxZ9sYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4MzQ5MzYyNjIzMDY4ODE5Mjk1Ij4iVmF4dCBheWFybGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNTg3OTQ1MDY1OTQ1Mzc4MjI3OCI+IlRhcml4aSBxdXJhxZ9kxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV90aW1lX3NldCIgbXNnaWQ9IjU3NzcwNzU2MTQzMjEwODc3NTgiPiJBeWFybGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV90aW1lX2RvbmUiIG1zZ2lkPSIyNTA3NjgzNzUxNzU5MzA4ODI4Ij4iSGF6xLFyZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1zX25ld19wZXJtX3ByZWZpeCIgbXNnaWQ9IjgyNTc3NDA3MTA3NTQzMDE0MDciPjxmb250IHNpemU9IjEyIiBmZ2NvbG9yPSIjZmYzM2I1ZTUiPiJZRU7EsDogIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1zX2Rlc2NyaXB0aW9uX2FwcCIgbXNnaWQ9IjUxMzk4MzYxNDMyOTMyOTk0MTciPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IHTJmXLJmWZpbmTJmW4gdMmZbWluIGVkaWxpYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19wZXJtaXNzaW9ucyIgbXNnaWQ9IjcyODMzNTc3MjgyMTkzMzgxMTIiPiJIZcOnIGJpciBpY2F6yZkgdMmZbMmZYiBvbHVubXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiJidW51bmxhIHNpemTJmW4geMmZcmMgdHV0dWxhIGJpbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2FjdGl2aXR5X3RpdGxlIiBtc2dpZD0iNDQ2NTA1NTE1NzIwOTY0ODY0MSI+IlVTQiB0b3BsdSB5YWRkYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1OTAxNDU5MDQxMzk4NzUxNDk1Ij4iVVNCIHFvxZ91bHVkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMzMDg1MzgwOTQzMTY0Nzc4MzkiPiJTaXogVVNCIHZhc2l0yZlzaWzJmSBrb21ww7x0ZXJlIGJhxJ9sYW5kxLFuxLF6LiBLb21ww7x0ZXIgdsmZIEFuZHJvaWRpbml6aW4gVVNCIHlhZGRhxZ/EsSBhcmFzxLFuZGEgZmF5bGxhcsSxIGtvcHlhbGFtYXEgaXN0yZl5aXJzaW5penPJmSwgYcWfYcSfxLFkYWvEsSBkw7x5bcmZecmZIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNTM1MTAwMDQ0NjAzNzgxMSI+IktvbXDDvHRlcmluaXrJmSBVU0IgaWzJmSBxb8WfdWxtdXN1bnV6LiBGYXlsbGFyxLEgQW5kcm9pZGluaXppbiBTRCBrYXJ0xLEgaWzJmSBrb21ww7x0ZXJpbml6IGFyYXPEsW5kYSBrb3B5YWxhbWFxIGlzdMmZeWlyc2luaXpzyZkgYcWfYcSfxLFkYWvEsSBkw7x5bcmZecmZIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYnV0dG9uX21vdW50IiBtc2dpZD0iMTA1MjI1OTkzMDM2OTUwODIzNSI+IlVTQiB5YWRkYcWfxLEgYWt0aXZsyZnFn2RpcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMDE3MDQ1MjE3MzY1NTQwNjU4Ij4iVVNCIHlhZGRhxZ/EsW7EsXrEsSBVU0Iga8O8dGzJmXZpIHlhZGRhxZ/EsSDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZbiB6YW1hbiBwcm9ibGVtIHlhcmFuZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4iU0Qga2FydMSxbsSxesSxIFVTQiBrw7x0bMmZdmkgeWFkZGHFn8SxIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZluIHphbWFuIHByb2JsZW0geWFyYW5kxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODE3NTg5MjU1NDc1NzIxNjUyNSI+IlVTQiBxb8WfdWx1ZHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5Mzk4MjI3ODM4MjgxODM3NjMiPiJGYXlsbGFyxLEga29tcMO8dGVyaW5pesmZIGtvcHlhbGFtYXEgdsmZIHlhIGtvbXDDvHRlcmluaXpkyZluIGtvcHlhbGFtYXEgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+IlVTQiB5YWRkYcWfxLEgc8O2bmTDvHLDvG4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+IlVTQiB5YWRkYcWfxLEgc8O2bmTDvHJtyZlrIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX3RpdGxlIiBtc2dpZD0iNjYwMTI5ODUxNzA4Nzc1ODUzIj4iVVNCIHlhZGRhxZ8gaXN0aWZhZMmZIG9sdW51ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MjY0MDI1MjgwNzc3MjE5NTIxIj4iVVNCIHlhZGRhxZ/EsSBzw7ZuZMO8cm3JmWTJmW4gw7ZuY8mZIEFuZHJvaWRcJ2luIFVTQiB5YWRkYcWfxLFuxLEga29tcMO8dGVyZMmZbiBkZW1vbnRhaiBldGRpeWluaXrJmSAow6fEsXhhcmTEscSfxLFuxLF6YSkgyZltaW4gb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4iVVNCIHlhZGRhxZ/EsSBzw7ZuZMO8cm3JmWTJmW4gw7ZuY8mZIEFuZHJvaWRcJ2luIFVTQiB5YWRkYcWfxLFuxLEga29tcMO8dGVyZMmZbiBkZW1vbnRhaiBldGRpeWluaXrJmSAow6fEsXhhcmTEscSfxLFuxLF6YSkgyZltaW4gb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiJVU0IgeWFkZGHFn8SxbsSxIHPDtm5kw7xyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+IlVTQiB5YWRkYcWfxLEgc8O2bmTDvHLJmW4gemFtYW4gcHJvYmxlbSBvbGR1LiBVU0IgaG9zdHUgZGVtb250YWogZXRtyZluaXppIHlveGxhecSxbiB2yZkgeWVuaWTJmW4gY8mZaGQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiJVU0IgeWFkZGHFn8SxIGFrdGl2bMmZxZ9kaXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+IlVTQiB5YWRkYcWfxLEgYWt0aXZsyZnFn2RpcnPJmW5peiwgaXN0aWZhZMmZIGV0ZGl5aW5peiBiyZl6aSB0yZl0YmlxbMmZciBkYXlhbmEgYmlsyZlyIHbJmSBVU0IgeWFkZGHFnyBkZWFrdGl2IGVkaWzJmW7JmSBxyZlkyZlyIGnFn2zJmW3JmXnJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+IlVTQiDJmW3JmWxpeXlhdMSxIHXEn3Vyc3V6ZHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX29rIiBtc2dpZD0iNzM3Njk1MzE2NzAzOTg2NTcwMSI+Ik9LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX210cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzNjk5OTEzMDk3MzkxNTUwMzk0Ij4iTWVkaWEgY2loYXrEsSBraW1pIHFvxZ91bGR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3B0cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxOTYwODE3MTkyMjE2MDY0ODMzIj4iS2FtZXJhIGtpbWkgYmHEn2xhbsSxbGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9jZF9pbnN0YWxsZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjc3NDcxMjgyNzg5MjA5MDc1NCI+IlF1cmHFn2TEsXLEsWPEsSBraW1pIHFvxZ91bHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4iVVNCIGFrc2VzdWFyYSBxb8WfdWxkdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjIyOTA4NTkzOTk5ODM3MjAyNzEiPiJEaWfJmXIgVVNCIHNlw6dpbWzJmXJpIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iOTAyMDA5MjE5NjA2MTAwNzI2MiI+IlVTQiB5YWRkYcWfxLFuYSBmb3JtYXQgYXTEsWxzxLFuPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2NDg0MTU5MjE1MjY1MjYwNjkiPiJTRCBrYXJ0IGZvcm1hdCBlZGlsc2luPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiJVU0IgeWFkZGHFn8SxbsSxemRhIHllcmzJmcWfZGlyaWxtacWfIGLDvHTDvG4gZmF5bGxhciBzaWxpbsmZY8mZay4gQnUgYWRkxLFtIGdlcmkgZMO2bsO8bG3JmXpkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDEzMTg5NTAyNzU0MzgzMCI+IkthcnTEsW7EsXpkYWvEsSBiw7x0w7xuIG3JmWx1bWF0bGFyIGl0yZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9idXR0b25fZm9ybWF0IiBtc2dpZD0iNDEzMTA2NDU2MDEyNzQ3ODY5NSI+IkZvcm1hdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IlVTQiBzYXpsYW1hIHFvxZ91bHVkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+IlVTQiBkZWJhccSxIGRlYWt0aXZhc2l5YSBldG3JmWsgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9pbnB1dF9tZXRob2QiIG1zZ2lkPSI0NjUzMzg3MzM2NzkxMjIyOTc4Ij4iRGF4aWxldG3JmSBtZXRvZHVudSBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjkwOTE2NTIxNTc3MjI0OTUxMTYiPiJEYXhpbGV0bcmZIMO8c3VsbGFyxLFuxLEgYXlhcmxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiJGaXppa2kga2xhdmlhdHVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhhcmR3YXJlIiBtc2dpZD0iNzUxNzgyMTA4Njg4ODk5MDI3OCI+IkhhcmR3YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxNDA3MzY3MDE3MjYzMDMwNzczIj4iS2xhdmlhdHVyYSBzeGVtaSBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfa2V5Ym9hcmRfbGF5b3V0X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ2NTkwNzcwMDQ0OTI1NzA2MyI+IktsYXZpYXR1cmEgdMmZcnRpYmF0xLEgc2XDp23JmWsgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX2FscGhhYmV0IiBtc2dpZD0iNTQzMzI3NTQ4NTQ5OTAzOTE5OSI+IiBBQkPDh0RFxo9GR8SeSFhJxLBKS1FMTU5Pw5ZQUlPFnlRVw5xWWVoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYXN0X3Njcm9sbF9udW1lcmljX2FscGhhYmV0IiBtc2dpZD0iNDAzMDE3MDUyNDU5NTEyMzYxMCI+IiAwMTIzNDU2Nzg5QUJDw4dERcaPRkfEnkjEsElKS0xNTk/DllBRUlPFnlRVw5xWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmRpZGF0ZXNfc3R5bGUiIG1zZ2lkPSI0MzMzOTEzMDg5NjM3MDYyMjU3Ij48dT4ibmFtaXrJmWRsyZlyIjwvdT48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+IlVTQiB5YWRkYcWfIGhhesSxcmxhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDU3NjAzNDE4OTcwOTk0MDUwIj4iU0Qga2FydCBoYXrEsXJsYW7EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4iU8mZaHZsyZlyIHlveGxhbsSxbMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzc4ODA0MDc0NTY4NjIyOTMwNyI+IkJvxZ8gVVNCIHlhZGRhxZ/EsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IkJvxZ8gU0Qga2FydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc4NDAxMjEwNjc0MjcyNjk1MDAiPiJVU0IgeWFkZGHFnyBib8WfZHVyIHbJmSB5YSBzaXN0ZW0gdMmZcsmZZmluZMmZbiBkyZlzdMmZa2zJmW5tyZl5yZluIGZheWwgc2lzdGVtaW7JmSBtYWxpa2Rpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2NDEwNjU2NDE3ODY5MjM2MDQiPiJTRCBrYXJ0IGJvxZ9kdXIgdsmZIHlhIHNpc3RlbSB0yZlyyZlmaW5kyZluIGTJmXN0yZlrbMmZbm3JmXnJmW4gZmF5bCBzaXN0ZW1pbsmZIG1hbGlrZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjA5MDA0Njc2OTUzMjcxMzU2MyI+IlrJmWTJmWxpIFVTQiB5YWRkYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0MTA3MjM5MDYwMTkxMDAxODkiPiJayZlkyZlsaSBTRCBrYXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE3OTU5MTc1NzgzOTUzMzMyODAiPiJTRCB5YWRkYcWfIHrJmWTJmWzJmW5pYi4gT251IGZvcm1hdCBldG3JmXnJmSDDp2FsxLHFn8Sxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNzUzODk4NTY3NTI1NTY4MjUzIj4iU0Qga2FydCB6yZlkyZlsyZluaWIuIE9udSBmb3JtYXQgZXRtyZl5yZkgw6dhbMSxxZ/EsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE2NjE2ODMwMzEzMzA5NTEwNzMiPiJVU0IgeWFkZGHFn8SxIGfDtnpsyZluaWxtyZlkyZluIMOnxLF4YXLEsWxkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODcyMTUyODgyNjA0NDA3ODM3Ij4iU0Qga2FydCBnw7Z6bMmZbmlsbcmZZMmZbiDDp8SxeGFyxLFsZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDMyOTg0ODgxOTg2NTU5NDI0MSI+Ik3JmWx1bWF0IGl0a2lzaW5pbiBxYXLFn8Sxc8SxbsSxIGFsbWFxIMO8w6fDvG4gVVNCIHlhZGRhxZ/EsSDDp8SxeGFybWF6ZGFuIMmZdnbJmWwgb251IGRlbW9udGFqIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjYwMTgzMjkzNzQ3NDQ4MjQxIj4iRGF0YSBpdGtpc2luaW4gcWFyxZ/EsXPEsW7EsSBhbG1hcSDDvMOnw7xuIFNEIGthcnTEsSDDp8SxeGFybWFkYW4gw7ZuY8mZIGRlbW9udGFqIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+IlVTQiB5YWRkYcWfIMOnxLF4YXJtYXEgw7zDp8O8biB0yZlobMO8a8mZc2l6ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4iU0Qga2FydCB0yZlobMO8a8mZc2l6IMOnxLF4YXLEsWxhIGJpbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE0MjE5NTM2MTYwNjQ5MzUzMCI+IlNpeiBVU0IgeWFkZGHFn8SxIHTJmWhsw7xryZlzaXogw6fEsXhhcmEgYmlsyZlyc2luaXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2ODg0MTI3ODEzODM3NzYwNCI+IlNpeiBTRCBrYXJ0xLEgdMmZaGzDvGvJmXNpeiDDp8SxeGFyYSBiaWzJmXJzaW5pei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDQ4NjM3NzIzMDE0MDIyNzY1MSI+IlNpbGlubWnFnyBVU0IgeWFkZGHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiJTRCBrYXJ0IMOnxLF4YXLEsWxkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iVVNCIHlhZGRhxZ8gw6fEsXhhcsSxbGTEsS4gWWVuaSBtZWRpYSDJmWxhdsmZIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzODcwMTIwNjUyOTgzNjU5NjQxIj4iU0Qga2FydCDDp8SxeGFyxLFsZMSxLiBZZW5pc2luaSBkYXhpbCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2xpc3RfZW1wdHkiIG1zZ2lkPSIxNjc1Mzg4MzMwNzg2ODQxMDY2Ij4iVXnEn3VuIGfJmWzJmW4gZsmZYWxpeXnJmXQgdGFwxLFsbWFkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wa2dVc2FnZVN0YXRzIiBtc2dpZD0iODc4NzM1MjA3NDMyNjc0ODg5MiI+ImtvbXBvbmVudCBpc3RpZmFkyZlzaSBzdGF0aXN0aWthc8SxbsSxIGfDvG5jyZlsbMmZeWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9IjExMDY2MTI0MjQyNTQyNzc2MzAiPiJUyZl0YmlxyZkgdG9wbGFubcSxxZ8gaXN0aWZhZMmZIHN0YXRpc3Rpa2FzxLFuxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzNDEwMzYzMTEyMTE0MDY2OTIiPiJtyZl6bXVudSBrb3B5YWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4iVMmZdGJpccmZIGtvbnRlbnRpIGtvcHlhbGFtYXEgw7zDp8O8biBkZWZvbHQga29udGV5bmVyIHNlcnZpc2luaSDDp2HEn8Sxcm1hcSBpY2F6yZlzaSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIGVkaWxtaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSIxNjQyMDI0NDU1NzUwNDE0Njk0Ij4iTWVkaWEgw6fEsXjEscWfxLFuxLEgecO2bmzJmW5kaXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JvdXRlX21lZGlhX291dHB1dCIgbXNnaWQ9IjQ5MzI4MTg3NDk1NDcyNDQzNDYiPiJUyZl0YmlxyZkgbWVkaWEgw6fEsXjEscWfxLFuxLEgZGlnyZlyIHhhcmljaSBjaWhhemxhcmEgecO2bmzJmW5kaXJtyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI3NTY1NTUyMjM3OTc3ODE1MDQ3Ij4iS2V5Z3VhcmQgdMmZaGzDvGvJmXNpeiB5YWRkYcWfYSDDp8SxeMSxxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI1ODY2MjQ1NDg0MzAzMjg1NzYyIj4iVMmZdGJpccmZIGtlZ3VhcmQgdMmZaGzDvGvJmXNpeiB5YWRkYcWfYSDDp2F0bWHEn2EgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjE3MjE5NTE4NDIwNzgyODM4NyI+IktsYXZpYXR1cmEga2lsaWRpbmluIGfDtnLDvGxtyZlzaW5pIHbJmSBnaXpsyZlkaWxtyZlzaW5pIGlkYXLJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjMwNDM3MzIyOTA1MTg2MjkwNjEiPiJUyZl0YmlxyZkga2VndWFyZMSxIGlkYXLJmSBldG3JmWsgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHV0b3JpYWxfZG91YmxlX3RhcF90b196b29tX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0MDcwNDMzMjA4MTYwMDYzNTM4Ij4iWm9vbSBuyZl6YXLJmXRpIMO8w6fDvG4gaWtpIGTJmWbJmSB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2FkZ2V0X2hvc3RfZXJyb3JfaW5mbGF0aW5nIiBtc2dpZD0iNDg4MjAwNDMxNDkwNjQ2NjE2MiI+IldpZGdldCDJmWxhdsmZIGVkaWzJmSBiaWxtyZlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2dvIiBtc2dpZD0iODMyMDg0NTY1MTczNzM2OTAyNyI+IkdldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VhcmNoIiBtc2dpZD0iNjU4MTEwMjcxODIyODA3ODExIj4iQXh0YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlbmQiIG1zZ2lkPSIyMzE2MTY2NTU2MzQ5MzE0NDI0Ij4iR8O2bmTJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX25leHQiIG1zZ2lkPSIzMTM4ODQzOTA0MDA5ODEzODM0Ij4iTsO2dmLJmXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kb25lIiBtc2dpZD0iODk3MTUxNjExNzkxMDkzNDYwNSI+IlRhbWFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9wcmV2aW91cyIgbXNnaWQ9IjE0NDM1NTAwMzkyNTAxMDU5NDgiPiLGj3Z2yZlsa2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2RlZmF1bHQiIG1zZ2lkPSIyODQwOTIxODg1NTU4MDQ1NzIxIj4ixLBjcmEgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxfbnVtYmVyX3VzaW5nIiBtc2dpZD0iNTc4OTE3NjQyNTE2NzU3MzU4NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiBpc3RpZmFkyZkgZXRtyZlrbMmZXG5uw7ZtcsmZIHnEscSfxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2NvbnRhY3RfdXNpbmciIG1zZ2lkPSI0OTQ3NDA1MjI2Nzg4MTA0NTM4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+aXN0aWZhZMmZIGVkyZlyyZlrIGtvbnRha3QgeWFyYWTEsW5cbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9oZWFkZXIiIG1zZ2lkPSIyMTA2MTAzODE3OTM3ODU5NjYyIj4iQcWfYcSfxLFkYWvEsSBiaXIgdsmZIHlhIGRhaGEgw6dveCB0yZl0YmlxbMmZcsKgaW5kaSB2yZkgZ8mZbMmZY8mZa2TJmSBoZXNhYsSxbsSxemEgZGF4aWwgb2xtYXEgw7zDp8O8biBpY2F6yZkgaXN0yZl5aXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2Zvb3RlciIgbXNnaWQ9IjMxMjUyMTEzNDMzNzkzNzY1NjEiPiJCdSBpc3TJmXnJmSBpem4gdmVybcmZayBpc3TJmXlpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X3Blcm1pc3Npb25zX2hlYWRlcl90ZXh0IiBtc2dpZD0iNjg3NDQ5NzQwODIwMTgyNjcwOCI+IkdpcmnFnyBzb3LEn3VzdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93IiBtc2dpZD0iNzIyNTk0ODgxMTI5NjM4NjU1MSI+IsSwY2F6yZkgdmVyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55IiBtc2dpZD0iMjA4MTg3OTg4NTc1NTQzNDUwNiI+IlLJmWRkIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWlzc2lvbl9yZXF1ZXN0X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY0ODY3NTk3OTU5MjYyMzc5MDciPiLEsGNhesmZIHTJmWzJmWIgb2x1bnVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWlzc2lvbl9yZXF1ZXN0X25vdGlmaWNhdGlvbl93aXRoX3N1YnRpdGxlIiBtc2dpZD0iODUzMDM5MzEzOTYzOTU2MDE4OSI+XG4iIGhlc2FixLEgw7zDp8O8bjx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lczwveGxpZmY6Zz4gaWNhesmZIHNvcsSfdXN1IGfDtm5kyZlyaWxkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnB1dF9tZXRob2RfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyODM1NTcxNzk5NDQ5OTI2NDkiPiJEYXhpbGV0bcmZIG1ldG9kdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjM2ODc5NjkxMzgzNzUwOTI0MjMiPiJTaW54cm9uaXphc2l5YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjQxNDgxMjA3NDIwOTY0NzQ2NDEiPiLGj2zDp2F0xLFtbMSxbMSxcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndhbGxwYXBlcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTI0MDA4Nzg0NDMwNDY4NzY2MiI+IkRpdmFyIGthxJ/EsXrEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkRpdmFyIGthxJ/EsXrEsW7EsSBkyZl5acWfaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJCaWxkaXJpxZ8gZGlubMmZecmZbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFrdGl2bMmZxZ9kaXJpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiB0yZlyyZlmaW5kyZluIGFrdGl2bMmZxZ9kaXJpbGliIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4ixZ7JmWLJmWvJmW5pIGlkYXLJmSBldG3JmWsgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0X2xvbmciIG1zZ2lkPSI2NDA3MzUxMDA2MjQ5MTc0NDczIj4iPHhsaWZmOmcgaWQ9IlNFU1NJT04iPiVzPC94bGlmZjpnPiBzZXNzaXlheWEgcW/Fn3VsdWR1ci4gxZ7JmWLJmWvJmW5pIGlkYXLJmSBldG3JmWsgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0aW5nIiBtc2dpZD0iNjQ0MzQzODk2NDQ0MDk2MDc0NSI+IkjJmW1pxZ/JmSBha3RpdiBWUE4gYmHEn2xhbsSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0ZWQiIG1zZ2lkPSI4MjAyNjc5Njc0ODE5MjEzOTMxIj4iVlBOIGJhxJ9sYW50xLFzxLEgaMmZbWnFn8mZIGFrdGl2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Vycm9yIiBtc2dpZD0iNjAwOTI0OTgxNDAzNDcwODE3NSI+IkjJmW1pxZ/JmSBha3RpdiBWUE4geMmZdGFzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29uZmlnIiBtc2dpZD0iNjQxNTg5OTE1MDY3MTUzNzk3MCI+IktvbmZpcXVyyZkgZXRtyZlrIMO8w6fDvG4gdG94dW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1cGxvYWRfZmlsZSIgbXNnaWQ9IjI4OTc5NTcxNzIzNjY3MzA0MTYiPiJGYXlsIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2ZpbGVfY2hvc2VuIiBtc2dpZD0iNjM2MzY0ODU2MjE3MDc1OTQ2NSI+Ikhlw6cgYmlyIGZheWwgc2XDp2lsbcmZeWliIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzZXQiIG1zZ2lkPSIyNDQ4MTY4MDgwOTY0MjA5OTA4Ij4iU8SxZsSxcmxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN1Ym1pdCIgbXNnaWQ9IjE2MDIzMzU1NzIwODk5MTE5NDEiPiJHw7ZuZMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+IkF2dG9tb2JpbCByZWppbWkgYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXJfbW9kZV9kaXNhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iODAzNTIzMDUzNzU2MzUwMzI2MiI+IkF2dG9tb2JpbCByZWppbWluZMmZbiDDp8SxeG1hcSDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE0NjY5NDIzNDM5ODIwMjYwMSI+IlRlemVyaW5xIHbJmSB5YSBob3RzcG90IGFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI2ODU3MDMxNzYwMTAzMDYyOTgyIj4iUXVyYcWfZMSxcm1hcSDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja19idXR0b25fbGFiZWwiIG1zZ2lkPSIyMzAwNDcwMDA0NTAzMzQzNDM5Ij4iR2VyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5leHRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTA4MDU1NTEwNDY3Nzk5MjQwOCI+Ik7DtnZiyZl0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNraXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTI3NTM2MjI5OTQ3MTYzMTgxOSI+Iktlw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ4OTA4OTQyNjc0NTQ4NjcyNzYiPiJZw7xrc8mZayBtb2JpbCBkYXRhIGlzdGlmYWTJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjMzNDA4MjIyMjg1OTkzMzc3NDMiPiJNb2JpbCBkYXRhIGlzdGlmYWTJmXNpIGhhcXHEsW5kYSBkYWhhIMOnb3ggw7Z5csmZbm3JmWsgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2MjY5NTQxODk3NzI5NzgxMzMyIj4iTW9iaWwgZGF0YSBsaW1pdGkga2XDp2lsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI1NDQzNDU3MzIxMzU0OTA3MTgxIj4iTW9iaWwgZGF0YSBpc3RpZmFkyZlzaSBoYXFxxLFuZGEgZGFoYSDDp294IMO2eXLJmW5tyZlrIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19tYXRjaGVzIiBtc2dpZD0iODEyOTQyMTkwODkxNTg0MDczNyI+IlV5xJ91bmx1cSB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX29uX3BhZ2UiIG1zZ2lkPSIxOTQ2Nzk5MjMzODIyODIwMzg0Ij4iU8mZaGlmyZlkyZkgdGFwIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJtYXRjaGVzX2ZvdW5kIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODE2NzE0NzA4MTEzNjU3OTQzOSI+IjEgdXnEn3VubHVxIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NjQxODcyNzk3MDY3NjA5MTc3Ij4iPHhsaWZmOmcgaWQ9IklOREVYIj4lZDwveGxpZmY6Zz4gyZlkyZlkZMmZbiA8eGxpZmY6ZyBpZD0iVE9UQUwiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tb2RlX2RvbmUiIG1zZ2lkPSI3MjE3NTgxNjQwNDYxOTIyMjg5Ij4iSGF6xLFyZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkyMzgxMDQ0ODUwNzYxMjc0NiI+IlVTQiB5YWRkYcWfxLEgcWFsZMSxcsSxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4iU0Qga2FydCBkZW1vbnRhaiBlZGlsaXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJVU0IgeWFkZGHFnyBzaWxpbmlyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1OTY5ODg4NzU1MDcwNDMwNDIiPiJTRCBrYXJ0IHNpbGluaXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjI5OTc2OTU2MzYyNDc3Njk0OCI+IlVTQiB5YWRkYcWfxLEgc2lsaW7JmSBiaWxtyZlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzE1MjQ4Njk2NjQ0NTEwOTM1Ij4iU0Qga2FydMSxIHNpbG3JmWsgbcO8bWvDvG4gb2xtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9iYWRfcmVtb3ZhbCIgbXNnaWQ9Ijc5NjA4NjQwNjEwMTY2MDMyODEiPiJTRCBrYXJ0IGRlbW9udGFqIGVkaWxtyZlkyZluIMO2bmPJmSDDp8SxeGFyxLFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IlVTQiB5YWRkYcWfIGhhesSxcmRhIHlveGxhbsSxbMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMzQ3NjI1MDM5MDQ4Mjc0ODEiPiJTRCBrYXJ0IGhhesSxcmRhIHlveGxhbsSxbMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yZW1vdmVkIiBtc2dpZD0iNzAwMTUyNjkwNTA1Nzk1MjA5NyI+IlNEIGthcnQgw6fEsXhhcsSxbMSxYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNTgzMDgxNDM0OTI1MDgzNDIyNSI+IlNEIGthcnQgaGF6xLFyZGEga29tcMO8dGVyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIGVkaWxpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzA2MTMwNTY4MTMzNTQwNDM1Ij4iU0Qga2FydCBoYWwtaGF6xLFyZGEga29tcMO8dGVyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIGVkaWxpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV91bmtub3duX3N0YXRlIiBtc2dpZD0iNzI5MTkyNzgyMTk3MjkwMzg1Ij4iTmFtyZlsdW0gdsmZeml5ecmZdGTJmSB4YXJpY2kgbWVkaWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmUiIG1zZ2lkPSIxNzc4Njg2NjE4MjMwMDExOTY0Ij4iUGF5bGHFn8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmQiIG1zZ2lkPSI0ODA4MjcwOTAwMzIyOTg1OTYwIj4iVGFwxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2Vic2VhcmNoIiBtc2dpZD0iNDMzNzE1Nzk3NzQwMDIxMTU4OSI+IlZlYiBBeHRhcsSxxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX25leHQiIG1zZ2lkPSI1NzQyMTI0NjE4OTQyMTkzOTc4Ij4iU29ucmFrxLFuxLEgdGFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZF9wcmV2aW91cyIgbXNnaWQ9IjIxOTY3MjM2NjkzODgzNjA1MDYiPiLGj3Z2yZlsa2luaSB0YXAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZlRpY2tlciIgbXNnaWQ9IjU2MjI2ODM5MTI2MTY0OTYxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JXM8L3hsaWZmOmc+IHTJmXLJmWZpbmTJmW4gbcmZa2FuIHNvcsSfdXN1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaXRsZSIgbXNnaWQ9IjU0NDY4NTg3MTcxNTc0MTY4MzkiPiJNyZlrYW4gc29yxJ91c3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZk1lc3NhZ2UiIG1zZ2lkPSIxMzc0NzE4MDIzMjI0MDAwNzAyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+ICg8eGxpZmY6ZyBpZD0iU0VSVklDRSI+JTIkczwveGxpZmY6Zz4pIHTJmXLJmWZpbmTJmW4gdMmZbMmZYiBlZGlsaWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNWZXJpZlllcyIgbXNnaWQ9IjIzNDY1NjYwNzI4NjcyMTM1NjMiPiJCyZlsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc1ZlcmlmTm8iIG1zZ2lkPSIxMTQ2NTY0OTM3MzQ2NDU0ODY1Ij4iWGV5ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlcyIgbXNnaWQ9IjUyOTYzMjE4NTA2NjI3NDY4OTAiPiJMaW1pdGkga2XDp8mZbmkgc2lsaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+Ijx4bGlmZjpnIGlkPSJUWVBFX09GX1NZTkMiPiUyJHM8L3hsaWZmOmc+IMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl9PRl9ERUxFVEVEX0lURU1TIj4lMSRkPC94bGlmZjpnPiBzaWxpbm1pxZ8gZmF5bCB2YXIsIDx4bGlmZjpnIGlkPSJBQ0NPVU5UX05BTUUiPiUzJHM8L3hsaWZmOmc+IGhlc2FixLEuIE7JmSBldG3JmWsgaXN0yZl5aXJzaW5pej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3JlYWxseV9kZWxldGUiIG1zZ2lkPSIyNTcyNjAwMTAzMTIyNTk2MjQzIj4iRWxlbWVudGzJmXJpIHNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdW5kb19kZWxldGVzIiBtc2dpZD0iMjk0MTMxNzM2MDYwMDMzODYwMiI+IlNpbGluyZlubMmZcmkgZ2VyaSBxYXl0YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX2RvX25vdGhpbmciIG1zZ2lkPSIzNzQzNzY0NzQwNDMwODIxODQ1Ij4ixLBuZGlsaWsgaGXDpyBuyZkgZXRtyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfYWNjb3VudF9sYWJlbCIgbXNnaWQ9IjU2NTUyMDMwODk3NDY0MjM5MjciPiJIZXNhYiBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfYWNjb3VudF9sYWJlbCIgbXNnaWQ9IjI5MzUyNjczNDQ4NDk5OTM1NTMiPiJIZXNhYiDJmWxhdsmZIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzYxMTk4Mjg5NDg1MzQzNTg3NCI+Ikhlc2FiIMmZbGF2yZkgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjI0MTIwNzIyNzI4MzIyODQzMTMiPiJBcnTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2RlY3JlbWVudF9idXR0b24iIG1zZ2lkPSI0NzYwNTA3NzgzODY3NzkwNjciPiJBemFsZMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9tb2RlIiBtc2dpZD0iMzA3MzEwMTA2NzQ0MTYzODQyOCI+Ijx4bGlmZjpnIGlkPSJWQUxVRSI+JXM8L3hsaWZmOmc+IHRveHVudW4gdsmZIGJhc2FyYXEgc2F4bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9hY3Rpb24iIG1zZ2lkPSI5MTAxNDczMDQ1ODkxODM1NDkwIj4iQXJ0xLFybWFxIMO8w6fDvG4geXV4YXLEsSwgYXphbHRtYXEgw7zDp8O8biBhxZ9hxJ/EsSBzw7xyw7zFn2TDvHLDvG4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X21pbnV0ZV9idXR0b24iIG1zZ2lkPSI4ODY1ODg1MTE0MDI4NjE0MzIxIj4iRMmZcWlxyZkgYXJ0xLFyxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X21pbnV0ZV9idXR0b24iIG1zZ2lkPSI2MjQ2ODM0OTM3MDgwNjg0NzkxIj4iRMmZcWlxyZluaSBhemFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjM2NTIwNTYwNTU4MTAyMjMxMzkiPiJTYWF0xLEgYXJ0xLFyxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X2hvdXJfYnV0dG9uIiBtc2dpZD0iMTM3NzQ3OTg2MzQyOTIxNDc5MiI+IlNhYXTEsSBhemFsZMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uIiBtc2dpZD0iNDE0NzU5MDY5NjE1MTIzMDg2MyI+IlBNIHF1cnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X3NldF9hbV9idXR0b24iIG1zZ2lkPSI4MzAyMTQwMzUzNTM5NDg2NzUyIj4iQU0gcXVydW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+IkFydG1hIGF5xLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iMTgzMjY5ODk5NTU0MTcyNjAxOSI+IkF5xLEgYXphbGTEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfZGF5X2J1dHRvbiIgbXNnaWQ9IjcxMzA0NjU0MTIzMDgxNzM5MDMiPiJBcnRtYSBnw7xuw7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfZGF5X2J1dHRvbiIgbXNnaWQ9IjQxMzE4ODE1MjE4MTg3NTAwMzEiPiJBemFsbWEgZ8O8bsO8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNjMxODY5NzM4NDMxMDgwODg5OSI+IkFydMSxbSBpbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI0NDgyMDIxODEzNDkxMTIxNzE3Ij4iQXphbG1hIGlsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4iTMmZxJ92IGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+IlNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4iSGF6xLFyZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IlJlamltIGTJmXlpxZ9pa2xpeWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkRheGlsIG9sdW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJUyZl0YmlxIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkJ1bnVubGEgcGF5bGHFn8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IGlsyZkgcGF5bGHFn8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJTw7xyw7zFn8mZbiBxdWxwLiBUb3h1bmFyYXEgYmFzxLFsxLEgdHV0dW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDDvMOnw7xuIHl1eGFyxLEgc8O8csO8xZ9kw7xyw7xuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDDvMOnw7xuIGHFn2HEn8SxIHPDvHLDvMWfZMO8csO8bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gw7zDp8O8biBzb2xhIHPDvHLDvMWfZMO8ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IMO8w6fDvG4gc2HEn2Egc8O8csO8xZ9kw7xyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iS2lsaWRpIGHDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU8mZc3NpeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJTyZlzIGHDp8SxcWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkF4dGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIHZ1cnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJQYXJvbGxhcsSxbiBzyZlzbMmZbmRpcmlsbcmZc2kgw7zDp8O8biBxdWxhcWzEsXFsYXLEsSB0YXjEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iTsO2cXTJmS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MjkzNjAwNDk2NjAxNDkwMjE2Ij4iRXbJmSBnZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjM3NDk2NTYyOTUyMTUyNTg5Ij4iWXV4YXLEsSBnZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tZW51X292ZXJmbG93X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjI5NTY1OTAzNzUwOTAwODQ1MyI+IsaPbGF2yZkgc2XDp2ltbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI3OTY1OTg0MzYwOTAzNjkzOTAzIj4iJTEkcywgJTIkcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9zdWJ0aXRsZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI2OTg1NTQ2NTMwNDcxNzgwNzI3Ij4iJTEkcywgJTIkcywgJTMkcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfaW50ZXJuYWwiIG1zZ2lkPSI0ODkxOTE2ODMzNjU3OTI5MjYzIj4iRGF4aWxpIHlhZGRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4iU0Qga2FydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IlVTQiB5YWRkYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0cmFjdF9lZGl0X21lbnVfYnV0dG9uIiBtc2dpZD0iODk0MDQ3ODczMDQ5NjYxMDEzNyI+IlJlZGFrdMmZIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTk1NTYzODg2MjEyMjIzMjM0MiI+IkRhdGEgaXN0aWZhZMmZIHjJmWLJmXJkYXJsxLHEn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX2JvZHkiIG1zZ2lkPSIyODE0NjczNTUxNDcxOTY5OTU0Ij4ixLBzdGlmYWTJmSB2yZkgYXlhcmxhcsSxIGfDtnJtyZlrIMO8w6fDvG4gdG94dW51biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfdGl0bGUiIG1zZ2lkPSI3MDkzMzM0NDE5NTE4NzA2Njg2Ij4iMkctM0cgZGF0YSBkZWFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF90aXRsZSIgbXNnaWQ9Ijc2MzY0ODk0MzY4MTk0NzA3NjEiPiI0RyBkYXRhIGRlYWt0aXYgZWRpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfdGl0bGUiIG1zZ2lkPSI3ODY5NDAyNTE5MzkxNjMxODg0Ij4iTW9iaWwgZGF0YSBkZWFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3RpdGxlIiBtc2dpZD0iODk5MjE1NDczNjQ0MTI4NDg2NSI+IldpLUZpIGRhdGEgZGVha3RpdiBlZGlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X2JvZHkiIG1zZ2lkPSIzMzE3OTY0NzA2OTczNjAxMzg2Ij4iQWt0aXZsyZnFn2Rpcm3JmWsgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiIyRy0zRyBkYXRhIGxpbWl0aSBhxZ/EsWzEsWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIxMTA2NTYyNzc5MzExMjA5MDM5Ij4iNEcgZGF0YSBsaW1pdGkga2XDp2lsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMjc5MjQwNTcyMTY1NDEyMTY4Ij4iTW9iaWwgZGF0YSBsaW1pdGkga2XDp2lsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9Ijg3NDM4NTYwMDYzODQ4MjU5NzQiPiJXaS1GaSBkYXRhIGxpbWl0aSBrZcOnaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfc25vb3plZF9ib2R5IiBtc2dpZD0iNzAzNTQ5MDI3ODI5ODQ0MTc2NyI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lczwveGxpZmY6Zz4gbcO8yZl5ecmZbiBlZGlsbWnFnyBsaW1pdCBhxZ/EsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX3RpdGxlIiBtc2dpZD0iNTk2NTE1NzM2MTAzNjMyMTkxNCI+IkFyeGFwbGFuIGRhdGFzxLEgbcmZaGR1ZGxhxZ9kxLFyxLFsZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX2JvZHkiIG1zZ2lkPSI2NzQxNTIxMzMwOTk3NDUyOTkwIj4iTcmZaGR1ZGl5ecmZdGkgYXJhZGFuIHFhbGTEsXJtYXEgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlIiBtc2dpZD0iNjUxMDA0MDQ4NjA0OTIzNzYzOSI+IlTJmWhsw7xryZlzaXpsaWsgc2VydGlmaWthdMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlX2lzX3ZhbGlkIiBtc2dpZD0iNjgyNTI2MzI1MDc3NDU2OTM3MyI+IkJ1IHNlcnRpZmlrYXQgZXRpYmFybMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfdG8iIG1zZ2lkPSI0NTQyMzk0ODAyNzQ5MjEwMzIiPiJWZXJpbGliOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbW1vbl9uYW1lIiBtc2dpZD0iMjIzMzIwOTI5OTQzNDE3MjY0NiI+IsOcbXVtaSBhZDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdfbmFtZSIgbXNnaWQ9IjY5NzM1NjExOTA3NjIwODUyMzYiPiJUyZnFn2tpbGF0OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ191bml0IiBtc2dpZD0iNzI2NTk4MTg5MDQyMjA3MDM4MyI+IlTJmcWfa2lsYXRpIHZhaGlkOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9ieSIgbXNnaWQ9IjI2NDc1ODQ5ODgwNTc0ODE1NjYiPiJUyZlyyZlmaW5kyZluIHZlcmlsaWI6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idmFsaWRpdHlfcGVyaW9kIiBtc2dpZD0iODgxODg4NjEzNzU0NTk4MzExMCI+Iktlw6fJmXJsaWxpazoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfb24iIG1zZ2lkPSI1ODk1MDE3NDA0MzYxMzk3MjMyIj4iRMmZcmMgb2x1bnViOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4cGlyZXNfb24iIG1zZ2lkPSIzNjc2MjQyOTQ5OTE1OTU5ODIxIj4iQml0bcmZIHZheHTEsToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4iU2VyaXlhIG7Dtm1yyZlzaToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludHMiIG1zZ2lkPSI0NTE2MDE5NjE5ODUwNzYzMDQ5Ij4iQmFybWFxIGl6bMmZcmk6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhMjU2X2ZpbmdlcnByaW50IiBtc2dpZD0iNDM5MTI3MTI4NjQ3NzI3OTI2MyI+IlNIQS0yNTYgYmFybWFxIGl6aToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IlNIQS0xIGJhcm1hcSBpemk6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X3NlZV9hbGwiIG1zZ2lkPSI0MjkyNTY5MzgzOTc2NjM2MjAwIj4iSGFtxLFzxLFuxLEgc2XDp8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjQ3MTAwMTM4NjQ5NzQwNDA2MTUiPiJGyZlhbGl5ecmZdGkgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfYWN0aW9uX3Byb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI1MjQ3Njg0NDM1OTc5MTQ5MjE2Ij4iQnVudW5sYSBwYXlsYcWfxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9kZXZpY2VfbG9ja2VkIiBtc2dpZD0iMzA5MjcwMzQ0ODY5MDY2OTc2OCI+IkNpaGF6IGtpbGlkbMmZbmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxpc3RfZGVsaW1ldGVyIiBtc2dpZD0iMzk3NTExNzU3MjE4NTQ5NDE1MiI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VuZGluZyIgbXNnaWQ9IjMyNDU2NTM2ODEwMDgyMTgwMzAiPiJHw7ZuZMmZcmlsaXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hCcm93c2VyRGVmYXVsdCIgbXNnaWQ9IjIwNTc5NTE5NDcyOTc2MTQ3MjUiPiJCcmF1emVyIGnFn8mZIHNhbMSxbnPEsW4/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iU2V0dXBDYWxsRGVmYXVsdCIgbXNnaWQ9IjU4MzQ5NDg0NjkyNTM3NTg1NzUiPiJayZluZ2kgccmZYnVsIGVkyZlrPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9hbHdheXMiIG1zZ2lkPSI4MDE3NzcwNzQ3ODAxNDk0OTMzIj4iSMmZbWnFn8mZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX29uY2UiIG1zZ2lkPSIyNDA0NjQ0Nzk3MTQ5MTczNzU4Ij4iU2FkyZljyZkgYmlyIGTJmWbJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYxNzA1Mzg5ODE2NzEyNzQ3MSI+IlBsYW7Fn2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDIzOTI5MTI3MzQyMDE0MDEyMyI+IlRlbGVmb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWVfaGVhZHBob25lcyIgbXNnaWQ9IjgxMTk5NzE4NDM4MDM0MzkxMTAiPiJRdWxhcWzEsXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWVfZG9ja19zcGVha2VycyIgbXNnaWQ9IjYyNDA2MDI5ODIyNzY1OTE4NjQiPiJEb2sgc3Bpa2VybMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGggYXVkaW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlNpbXNpeiBla3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJIYXrEsXJkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iTWVkaWEgw6fEsXjEscWfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iU2thbiBlZGlsaXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJRb8WfdWx1ci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4ixo9sw6dhdMSxbWzEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNjczOTg5OTk2MjY4MTg4NjQwMSI+IsaPbMOnYXTEsW1sxLEgZGV5aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfaW5fdXNlIiBtc2dpZD0iNDUzMzc4NjAzMTA5MDE5ODA2MyI+IsSwc3RpZmFkyZkgb2x1bnVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2J1aWx0X2luX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjI1ODMxMzQyOTQyOTI1NjM5NDEiPiJEYXhpbGkgZWtyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfaGRtaV9kaXNwbGF5X25hbWUiIG1zZ2lkPSIxNTU1MjY0NTU5MjI3NDcwMTA5Ij4iSERNSSBFa3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLDlnJ0w7xrICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IiwgdMmZaGzDvGvJmXNpeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iU2ltc2l6IGVrcmFuIHFvxZ91bHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkJ1IGVrcmFuIGRpZ8mZciBjaWhhemRhIGfDtnN0yZlyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iQmHEn2xhbnTEsW7EsSBryZlzaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IlTJmWNpbGkgesmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLFnmFibG9udSB1bnV0bXXFn2FtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiJZYW5sxLHFnyBNb2RlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IllhbmzEscWfIMWeaWZyyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIHPJmWh2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRkPC94bGlmZjpnPiBzYW5pecmZIHNvbnJhIHllbmlkyZluIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLFnmFibG9udW51enUgw6fJmWtpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4ga29kdSBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJQxLBOIGtvZHUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiJQYXJvbCBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNIGluZGkgZGVha3RpdmRpci4gRGF2YW0gZXRtyZlrIMO8w6fDvG4gUFVLIGtvZHUgZGF4aWwgZWRpbi4gxo9sYXbJmSBtyZlsdW1hdCDDvMOnw7xuIG9wZXJhdG9yYSBtw7xyYWNpyZl0IGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IsSwc3TJmWRpeWluaXogUMSwTiBrb2R1IGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4ixLBzdMmZZGl5aW5peiBQSU4ga29kdSB0yZlzZGlxbMmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTxLBNIGthcnTEsW4ga2lsaWRpIGHDp8SxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IllhbmzEscWfIFDEsE4ga29kLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IjQtZMmZbiA4LcmZIHHJmWTJmXIgcsmZccmZbWkgb2xhbiBQSU4geWF6xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyBrb2QgOCByyZlxyZltIHbJmSB5YSBkYWhhIMOnb3ggb2xtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iRMO8emfDvG4gUFVLIGtvZHUgeWVuaWTJmW4gZGF4aWwgZWRpbi4gVMmZa3JhcmxhbmFuIGPJmWhkbMmZciBTSU1cJ2kgYmlyZMmZZsmZbGlrIHPEsXJhZGFuIMOnxLF4YXJhY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ga29kbGFyxLEgdXnEn3VuIGRleWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iSMmZZGRpbmTJmW4gw6dveCBjyZloZCBlZGlsZGkhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBHb29nbGUgaGVzYWLEsW7EsXogaWzJmSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4ixLBzdGlmYWTJmcOnaSBhZMSxIChlLXBvw6d0KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4ixZ5pZnLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4iRGF4aWwgb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IllhbmzEscWfIGlzdGlmYWTJmcOnaSBhZMSxIHbJmSB5YSBwYXJvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4ixLBzdGlmYWTJmcOnaSBhZMSxbsSxesSxIHbJmSB5YSBwYXJvbHVudXp1IHVudXRtdXN1bnV6P1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiBsaW5raW7JmSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+Ikhlc2FiIHlveGxhbsSxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iUElOIGtvZHVudXp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IsWeaWZyyZluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iTW9kZWxpbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gw6fJmWttaXNpbml6LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4iU2l6IHBsYW7Fn2V0IGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgdcSfdXJzdXogY8mZaGQgZXRzyZluaXosIHBsYW7Fn2V0IGZhYnJpayBheWFybGFyxLFuYSBzxLFmxLFybGFuYWNhcSB2yZkgYsO8dMO8biBtyZlsdW1hdGxhcsSxbsSxeiBpdMmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4iU2l6IHRlbGVmb24ga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHXEn3Vyc3V6IGPJmWhkIGV0bWlzaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZMmZZsmZIGTJmSB1xJ91cnN1eiBjyZloZCBldHPJmW5peiwgdGVsZWZvbiBmYWJyaWsgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEgdsmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsW7EsXogaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiJTaXogcGxhbsWfZXQga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIFBsYW7Fn2V0IGZhYnJpayBheWFybGFyxLFuYSBzxLFmxLFybGFuYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiJTaXogdGVsZWZvbnVuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB5YW5sxLHFnyBjyZloZCBldG1pc2luaXouIFRlbGVmb24gYXJ0xLFxIGRlZm9sdCB6YXZvZCBoYWzEsW5hIHPEsWbEsXJsYW5hY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJTaXoga2lsaWRpIGHDp21hcSDDvMOnw7xuIMWfYWJsb251IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBzyZlodiDDp8mZa2Rpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkYWhhIHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBwbGFuxZ9ldGluaXppbiBraWxpZGluaSBlLXBvw6d0IGhlc2FixLFuxLF6bGEgYcOnbWFxIHTJmWzJmWIgb2x1bmFjYXEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSBiaXIgZGFoYSB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJTaXogYXJ0xLFxIG1vZGVsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRtaXNpbml6Ljx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgeWFubMSxxZ8gZGF4aWwgZXRzyZluaXosIHRlbGVmb251biBraWxpZGluaW4gYcOnxLFsbWFzxLEgw7zDp8O8biBlbGVrdHJvbiBwb8OndCDDvG52YW7EsW7EsXogdMmZbMmZYiBvbHVuYWNhcS5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIgLSAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlnEscSfxLHFn2TEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlX21lZGlhX3ZvbHVtZV93YXJuaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMyNDE2MTkzOTQ3NTQ3ODA2NiI+IlPJmXMgZ8O8Y8O8IHTDtnZzaXnJmSBlZGlsyZluIHPJmXZpeXnJmWTJmW4gYXJ0xLFyxLFsc8Sxbj9cblV6dW4gbcO8ZGTJmXQgecO8a3PJmWsgc8mZcyBnw7xjw7wgaWzJmSBkaW5syZltyZkgU2l6aW4gZcWfaXRtyZkgcWFiaWxpeXnJmXRpbml6yZkgbcmZbmZpIHTJmXNpciBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250aW51ZV90b19lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE2MjY0MjczNzIzMTYwNzAyNTgiPiLGj2zDp2F0xLFtbMSxxJ/EsSBha3RpdmzJmcWfZGlybcmZayDDvMOnw7xuIGlraSBiYXJtYcSfxLFuxLF6xLEgYmFzxLFsxLEgc2F4bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZW5hYmxlZCIgbXNnaWQ9IjEzODE5NzIwNDg1NjQ1NDc2ODUiPiLGj2zDp2F0xLFtbMSxbMSxcSBha3RpdmzJmcWfZGlyaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hY2Nlc3NpYmlsaXR5X2NhbmNlbGVkIiBtc2dpZD0iMzgzMzkyMzI1Nzk2NjYzNTY3MyI+IkdpcmnFnyBpbWthbsSxIGzJmcSfdiBlZGlsaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJDYXJpIGlzdGlmYWTJmcOnaSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiJTYWhpYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVycm9yX21lc3NhZ2VfdGl0bGUiIG1zZ2lkPSI0NTEwMzczMDgzMDgyNTAwMTk1Ij4iWMmZdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm9fcmVzdHJpY3RlZF9hY2NvdW50cyIgbXNnaWQ9IjU3Mzk0NjMyNDk2NzM3Mjc3MzYiPiJCdSB0yZl0YmlxIG3JmWhkdWQgcHJvZmlsbMmZciDDvMOnw7xuIGhlc2FibGFyxLEgZMmZc3TJmWtsyZltaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX25vdF9mb3VuZCIgbXNnaWQ9IjM0MjkxNDE4NTM0OTg5MjczNzkiPiJCdSDJmW3JmWxpeXlhdMSxIGlkYXLJmSBldG3JmWsgw7zDp8O8biBoZcOnIGJpciB0yZl0YmlxIHRhcMSxbG1hZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJldm9rZSIgbXNnaWQ9IjU0MDQ0NzkxODUyMjgyNzE1ODYiPiJMyZnEn3YgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTAiIG1zZ2lkPSI3ODc1NDI3NDg5NDIwODIxNzkzIj4iSVNPIEEwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMSIgbXNnaWQ9IjM3NjA3MzQ0OTkwNTA4NzUzNTYiPiJJU08gQTEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EyIiBtc2dpZD0iNTk3MzI2NjM3ODAyMDE0NDM4MiI+IklTTyBBMiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTMiIG1zZ2lkPSIxMzczNDA3MTA1Njg3MzAwODg0Ij4iSVNPIEEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNCIgbXNnaWQ9IjY2ODk3NzI4MDc5ODI1OTcyNTQiPiJJU08gQTQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E1IiBtc2dpZD0iNTM1MzU0OTY1MjAxNTc0MTA0MCI+IklTTyBBNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTYiIG1zZ2lkPSI4NTg1MDM4MDQ4Njc0OTExOTA3Ij4iSVNPIEE2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNyIgbXNnaWQ9IjY2NDE4MzY3MTY5NjM4MzkxMTkiPiJJU08gQTciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E4IiBtc2dpZD0iNzU3MTEzOTQzNzQ2NTY5MzM1NSI+IklTTyBBOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTkiIG1zZ2lkPSIxMzc4NDU1ODkxOTU3MTE1MDc5Ij4iSVNPIEE5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMTAiIG1zZ2lkPSIyNDgwNzQ3NDU3NDI5NDc1MzQ0Ij4iSVNPIEExMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjAiIG1zZ2lkPSIzOTY1OTM1MDk3NjYxMTA4MDM5Ij4iSVNPIEIwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMSIgbXNnaWQ9IjI1MDU3NTMyODUwMTAxMTU0MzciPiJJU08gQjEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IyIiBtc2dpZD0iODc2Mzg3NDcwOTg1OTQ1ODQ1MyI+IklTTyBCMiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjMiIG1zZ2lkPSI0MjEwNTA2Njg4MTkxNzY0MDc2Ij4iSVNPIEIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNCIgbXNnaWQ9IjU3NDk0MDQxNjU4ODg1MjYwMzQiPiJCNCBJU08iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I1IiBtc2dpZD0iNzY0MDYyNzQxNDYyMTkwNDczMyI+IklTTyBCNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjYiIG1zZ2lkPSI3MzQyOTg4ODY0NzEyNzQ4NTQ0Ij4iSVNPIEI2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNyIgbXNnaWQ9IjUwNjk4NDQwNjUyMzUzODI0MjkiPiJJU08gQjciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I4IiBtc2dpZD0iNzMxNjgxODkyMjI3ODc3OTc3NCI+IklTTyBCOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjkiIG1zZ2lkPSI1NDE0NzI3MDk0MDI2NTMyMzQxIj4iSVNPIEI5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMTAiIG1zZ2lkPSI1MjUxMjUzNzMxODMyMDQ4MTg1Ij4iSVNPIEIxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzAiIG1zZ2lkPSI0MDAzMTM4MzQyNjcxOTY0MjE3Ij4iSVNPIEMwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMSIgbXNnaWQ9IjE5MzUxODgwNjMzOTM1NTMwMDgiPiJJU08gQzEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MyIiBtc2dpZD0iMzE5NzMwNzk2OTcxMjA2OTkwNCI+IklTTyBDMiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzMiIG1zZ2lkPSI0MzM1ODI2MDg3MzIxOTEzNTA4Ij4iSVNPIEMzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNCIgbXNnaWQ9IjM3NDU2Mzk1OTgyODEwMTUwMDUiPiJJU08gQzQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M1IiBtc2dpZD0iODI2OTQ1Nzc2NTgyMjc5MTAxMyI+IklTTyBDNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzYiIG1zZ2lkPSI1NjY2NjYxMDUyNjAzNDY5MzAiPiJJU08gQzYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M3IiBtc2dpZD0iODY3ODQxMzE4MDc4MjYwODQ5OCI+IklTTyBDNyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzgiIG1zZ2lkPSI4MzkyMzc2MjA2NjI3MDQxNzMwIj4iSVNPIEM4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jOSIgbXNnaWQ9IjkxOTE2MTMzNzIzMjQ4NDU0MDUiPiJJU08gQzkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MxMCIgbXNnaWQ9IjczMjc3MDk2OTkxODQ5MjA4MjIiPiJJU08gQzEwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2xldHRlciIgbXNnaWQ9IjQxOTE4MDU2MTU4Mjk0NzI5NTMiPiJNyZlrdHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2d2cm5tdF9sZXR0ZXIiIG1zZ2lkPSI3ODUzMzgyMTkyNjQ5NDA1NTA3Ij4iSMO2a3VtyZl0IE3JmWt0dWJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2xlZ2FsIiBtc2dpZD0iNjY5Nzk4Mjk4ODI4MzgyMzE1MCI+IkjDvHF1cWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfanVuaW9yX2xlZ2FsIiBtc2dpZD0iMzcyNzc0Mzk2OTkwMjc1ODk0OCI+Iktpw6dpayBIw7xxdXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVkZ2VyIiBtc2dpZD0iMjgxODcxNDY0ODk2NjAxMjM2Ij4iUW92bHVxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX3RhYmxvaWQiIG1zZ2lkPSI1Nzc1OTY2NDE2MzMzNTc4MTI3Ij4iUcSxc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5jZWxsZWQiIG1zZ2lkPSI3MDkxMjU4Mzc4MTIxNjI3NjI0Ij4iTMmZxJ92IGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndyaXRlX2ZhaWxfcmVhc29uX2Nhbm5vdF93cml0ZSIgbXNnaWQ9IjgxMzI1MDU0MTc5MzUzMzc3MjQiPiJLb250ZW50IHlhem1uYSB4yZl0YXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9waW4iIG1zZ2lkPSIzMzk1OTUzNDIxMzY4NDc2MTAzIj4iUElOIGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfb2xkX3BpbiIgbXNnaWQ9IjE0NjIyMDYyMjU1MTI5MTA3NTciPiJDYXJpIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+IlllbmkgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NvbmZpcm1fcGluIiBtc2dpZD0iODUwMTUyMzgyOTYzMzE0NjIzOSI+IlllbmkgUElOXCdpIHTJmXNkaXEgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jcmVhdGVfcGluIiBtc2dpZD0iODAxNzYwMDAwMDI2MzQ1MDMzNyI+IkTJmXlpxZ9tyZkgbcmZaGR1ZGl5ecmZdGzJmXJpIMO8w6fDvG4gUMSwTiB5YXJhZMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lcnJvcl9kb2VzbnRfbWF0Y2giIG1zZ2lkPSIyMjI0MjE0MTkwOTA2OTk0NTQ4Ij4iUMSwTiB1ecSfdW4gZ8mZbG1pci4gWWVuaWTJmW4gY8mZaGQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0IiBtc2dpZD0iODE3Mzk4Mjc1NjI2NTc3Nzc5MiI+IlDEsE4gw6dveCBxxLFzYWTEsXIuIMaPbiBhesSxIDQgcsmZccmZbSBvbG1hbMSxZMSxci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InJlc3RyX3Bpbl9jb3VudGRvd24iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0ODM1NjM5OTY5NTAzNzI5ODc0Ij4iWWFubMSxxZ8gUMSwTi4gMSBzYW5pecmZIHNvbnJhIHTJmWtyYXIgc8SxbmF5xLFuLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODAzMDYwNzM0MzIyMzI4NzY1NCI+IllhbmzEscWfIFDEsE4uIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgc29ucmEgdMmZa3JhciBzxLFuYXnEsW4uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0idHJhbnNpZW50X25hdmlnYXRpb25fY29uZmlybWF0aW9uIiBtc2dpZD0iNDkwNzg0NDA0MzYxMTEyMzQyNiI+IlBhbmVsaSBnw7ZzdMmZcm3JmWsgw7zDp8O8biBla3JhbsSxbiBrw7xuY8O8bsO8IHPDvHLDvMWfZMO8csO8biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRyYW5zaWVudF9uYXZpZ2F0aW9uX2NvbmZpcm1hdGlvbl9sb25nIiBtc2dpZD0iODA2MTY4NTkyMDUwODA4NjY5NyI+IlNpc3RlbSBwYW5lbGluaSBnw7ZzdMmZcm3JmWsgw7zDp8O8biBla3JhbsSxbiBrw7xuY8O8bmTJmW4gc8O8csO8xZ9kw7xyw7xuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWJlL2Rvbm90dHJhbnNsYXRlLWNsZHIueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1iZS9kb25vdHRyYW5zbGF0ZS1jbGRyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggY2I3NDk0Mi4uMDAwMDAwMAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWJlL2Rvbm90dHJhbnNsYXRlLWNsZHIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ibnVtZXJpY19kYXRlX3RlbXBsYXRlIj4iJXMuJXMuJXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtb250aF9kYXlfeWVhciI+JS1lICVCICVZPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX29mX2RheSI+JUguJU0uJVM8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfYW5kX3RpbWUiPiVILiVNLiVTICUtZS4lLW0uJVk8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZSI+JTIkcyAlMSRzPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2MyOTg2Li4wMDAwMDAwCi0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODAxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKLSoqCi0qKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotKioKLSoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0qKgotKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotKioKLSoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0qKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0iYnl0ZVNob3J0IiBtc2dpZD0iODM0MDk3Mzg5Mjc0MjAxOTEwMSI+IkIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJraWxvYnl0ZVNob3J0IiBtc2dpZD0iNTk3Mzc4OTc4MzUwNDc3MTg3OCI+ItCa0LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWdhYnl0ZVNob3J0IiBtc2dpZD0iNjM1NTg1MTU3Njc3MDQyODkyMiI+ItCc0LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnaWdhYnl0ZVNob3J0IiBtc2dpZD0iMzI1OTg4MjQ1NTIxMjE5MzIxNCI+ItCT0LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXJhYnl0ZVNob3J0IiBtc2dpZD0iMjMxNjEzMDE4MTU5MTg2OTYyIj4i0KLQsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBldGFieXRlU2hvcnQiIG1zZ2lkPSI1NjM3ODE2NjgwMTQ0OTkwMjE5Ij4i0J/QsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbGVTaXplU3VmZml4IiBtc2dpZD0iOTE2NDI5Mjc5MTUwMDUzMTk0OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJHM8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlVOSVQiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idW50aXRsZWQiIG1zZ2lkPSI0NjM4OTU2OTU0ODUyNzgyNTc2Ij4iJmx0O9CR0LXQtyDQvdCw0LfQstGLJmd0OyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzIiBtc2dpZD0iNzg5OTgyOTUxNjA0ODgxMzIzNyI+Ii4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzX3R3b19kb3RzIiBtc2dpZD0iMTIyODA3ODk5NDg2NjAzMDczNiI+Ii4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIgbXNnaWQ9Ijc2OTQwNjMwNDIwNzk2NzY1MTciPiIo0J3Rj9C80LAg0L3Rg9C80LDRgNCwINGC0Y3Qu9C10YTQvtC90LApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idW5rbm93bk5hbWUiIG1zZ2lkPSIyMjc3NTU2NTQ2NzQyNzQ2NTIyIj4iKNCd0LXQstGP0LTQvtC80YspIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdFZvaWNlTWFpbEFscGhhVGFnIiBtc2dpZD0iMjY2MDAyMDk5MDA5NzczMzA3NyI+ItCT0LDQu9Cw0YHQsNCy0LDRjyDQv9C+0YjRgtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdE1zaXNkbkFscGhhVGFnIiBtc2dpZD0iMjg1MDg4OTc1NDkxOTU4NDY3NCI+Ik1TSVNETjEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtbWlFcnJvciIgbXNnaWQ9IjUxNTQ0OTk0NTc3MzkwNTI5MDciPiLQn9GA0LDQsdC70LXQvNCwINC/0LDQtNC70YPRh9GN0L3QvdGPINGG0ZYg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyDQutC+0LQgTU1JLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUZkbkVycm9yIiBtc2dpZD0iNTIyNDM5ODIxNjM4NTMxNjQ3MSI+ItCS0YvQutCw0YDRi9GB0YLQsNC90L3QtSDQsNCx0LzQtdC20LDQstCw0L3QsNC1INGC0L7Qu9GM0LrRliDQtNCw0LfQstC+0LvQtdC90YvQvNGWINC90YPQvNCw0YDQsNC80ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWQiIG1zZ2lkPSI4MTQ3Mjc4MzQ2NDE0NzE0MzE1Ij4i0KHQu9GD0LbQsdCwINCx0YvQu9CwINGe0LrQu9GO0YfQsNC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWRGb3IiIG1zZ2lkPSI2ODU2MjI4MTQwNDUzNDcxMDQxIj4i0KHQu9GD0LbQsdCwINCx0YvQu9CwINGe0LrQu9GO0YfQsNC90LAg0LTQu9GPOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VEaXNhYmxlZCIgbXNnaWQ9IjE5Mzc1NTMyMjY1OTI1MTY0MTEiPiLQodC70YPQttCx0LAg0LHRi9C70LAg0LDQtNC60LvRjtGH0LDQvdCw0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZVJlZ2lzdGVyZWQiIG1zZ2lkPSI2Mjc1MDE5MDgyNTk4MTAyNDkzIj4i0KDRjdCz0ZbRgdGC0YDQsNGG0YvRjyDQv9GA0LDQudGI0LvQsCDQv9Cw0YHQv9GP0YXQvtCy0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiLQn9Cw0YHQv9GP0YXQvtCy0LAg0LLRi9C00LDQu9C10L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZEluY29ycmVjdCIgbXNnaWQ9Ijc2MTIyMDg4Mzk0NTAxMjg3MTUiPiLQndGP0L/RgNCw0LLRltC70YzQvdGLINC/0LDRgNC+0LvRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtbWlDb21wbGV0ZSIgbXNnaWQ9IjgyMzI1Mjc0OTU0MTE2OTgzNTkiPiJNTUkg0LfQsNCy0LXRgNGI0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhZFBpbiIgbXNnaWQ9IjkwMTUyNzc2NDU1NDY3MTAwMTQiPiLQodGC0LDRgNGLIFBJTi3QutC+0LQg0YPQstC10LTQt9C10L3RiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhZFB1ayIgbXNnaWQ9IjU0ODcyNTc2NDcwODExMzIyMDEiPiLQndGP0L/RgNCw0LLRltC70YzQvdGLIFBVSy3QutC+0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWlzbWF0Y2hQaW4iIG1zZ2lkPSI2MDkzNzkwNTQ0OTY4NjM0MTkiPiLQo9Cy0LXQtNC30LXQvdGL0Y8gUElOLdC60L7QtNGLINC90LUg0YHRg9C/0LDQtNCw0Y7RhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4i0KPQstGP0LTQt9GW0YbQtSBQSU4t0LrQvtC0LCDRj9C60ZYg0LfQvNGP0YjRh9Cw0LUg0LDQtCA0INC00LAgOCDQu9GW0YfQsdCw0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLQo9Cy0Y/QtNC30ZbRhtC1IFBVSyDQtyA4INC70ZbRh9Cx0LDRniDRhtGWINCx0L7Qu9GM0YguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+ItCS0LDRiNCwIFNJTS3QutCw0YDRgtCwINC30LDQsdC70LDQutCw0LLQsNC90LAgUFVLLdC60L7QtNCw0LwuINCj0LLRj9C00LfRltGG0LUgUFVLLCDQutCw0LEg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMINC60LDRgNGC0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i0KPQstGP0LTQt9GW0YbQtSBQVUsyINC00LvRjyDRgNCw0LfQsdC70LDQutCw0LLQsNC90L3RjyBTSU0t0LrQsNGA0YLRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+ItCG0LTRjdC90YLRi9GE0ZbQutCw0YLQsNGAINCQ0JLQnSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNsaXJNbWkiIG1zZ2lkPSI3Nzg0NjczNjczNDQ2ODMzMDkxIj4i0IbQtNGN0L3RgtGL0YTRltC60LDRgtCw0YAg0JDQktCdIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ2ZNbWkiIG1zZ2lkPSI1MTIzMjE4OTg5MTQxNTczNTE1Ij4i0J/QtdGA0LDQsNC00YDQsNGB0LDRhtGL0Y8g0LLRi9C60LvRltC60YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDd01taSIgbXNnaWQ9IjkxMjk2NzgwNTY3OTUwMTY4NjciPiLQp9Cw0LrQsNC90L3QtSDQstGL0LrQu9GW0LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkJhTW1pIiBtc2dpZD0iNDU1MTkzMDY3OTI2NzcwNTgxIj4i0JfQsNCx0LDRgNC+0L3QsCDQstGL0LrQu9GW0LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlB3ZE1taSIgbXNnaWQ9IjcwNDM3MTU2ODc5MDUyNTQxOTkiPiLQl9C80LXQvdCwINC/0LDRgNC+0LvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlBpbk1taSIgbXNnaWQ9IjMxMTMxMTc3ODAzNjExOTAzMDQiPiLQl9C80LXQvdCwIFBJTi3QutC+0LTRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNuaXBNbWkiIG1zZ2lkPSIzMTEwNTM0NjgwNTU3ODU3MTYyIj4i0KbRj9C/0LXRgNCw0YjQvdGWINC90YPQvNCw0YAg0LLRi9C60LvRltC60YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+ItCd0YPQvNCw0YAg0LLRi9C60LvRltC60YMg0LDQsdC80LXQttCw0LLQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJUaHJlZVdDTW1pIiBtc2dpZD0iOTA1MTA0NzE3MDMyMTE5MDM2OCI+ItCi0YDQvtGF0LHQsNC60L7QstGLINCy0YvQutC70ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJ1YWNNbWkiIG1zZ2lkPSI3ODI3ODg3NDU5MTM4MzA4ODg2Ij4i0JDQtNC80L7QstCwINCw0LQg0L3QtdC/0LDQttCw0LTQsNC90YvRhSDRgNCw0LfQtNGA0LDQttC90Y/RjtGH0YvRhSDQstGL0LrQu9GW0LrQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ25kTW1pIiBtc2dpZD0iMzExNjQ0NjIzNzA4MTU3NTgwOCI+ItCU0LDRgdGC0LDRntC60LAg0L3Rg9C80LDRgNGDINCy0YvQutC70ZbQutGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iRG5kTW1pIiBtc2dpZD0iMTI2NTQ3ODkzMjQxODMzNDMzMSI+ItCd0LUg0YLRg9GA0LHQsNCy0LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT24iIG1zZ2lkPSI0Mjk0MTU0MDkxNDU3ODE5MjMiPiLQndCw0LvQsNC00Ysg0ZbQtNGN0L3RgtGL0YTRltC60LDRgtCw0YDRgyDQkNCS0J0g0L/QsCDQt9C80LDRntGH0LDQvdC90ZYg0LDQsdC80LXQttCw0LLQsNC90YvRjy4g0J3QsNGB0YLRg9C/0L3RiyDQstGL0LrQu9GW0Lo6INCw0LHQvNC10LbQsNCy0LDQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT2ZmIiBtc2dpZD0iMzA5MjkxODAwNjA3Nzg2NDYyNCI+ItCG0LTRjdC90YLRi9GE0ZbQutCw0YLQsNGAINCQ0JLQnSDQv9CwINC30LzQsNGe0YfQsNC90L3RliDQsNCx0LzQtdC20LDQstCw0L3Riy4g0J3QsNGB0YLRg9C/0L3RiyDQstGL0LrQu9GW0Lo6INC90LUg0LDQsdC80LXQttCw0LLQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT24iIG1zZ2lkPSI2MTc5NDI1MTgyODU2NDE4NDY1Ij4i0J/QsCDQt9C80LDRntGH0LDQvdC90ZYg0ZbQtNGN0L3RgtGL0YTRltC60LDRgtCw0YAg0JDQktCdINC90LUg0LDQsdC80LXQttCw0LLQsNC90YsuINCd0LDRgdGC0YPQv9C90Ysg0LLRi9C60LvRltC6OiDQsNCx0LzQtdC20LDQstCw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPZmYiIG1zZ2lkPSIyNTY3OTk4NjMzMTI0NDA4NTUyIj4i0J3QsNC70LDQtNGLINGW0LTRjdC90YLRi9GE0ZbQutCw0YLQsNGA0YMg0JDQktCdINC/0LAg0LfQvNCw0Z7Rh9Cw0L3QvdGWOiDQvdC1INCw0LHQvNGP0LbQsNCy0LDQvdCwLiDQndCw0YHRgtGD0L/QvdGLINCy0YvQutC70ZbQujog0L3QtSDQsNCx0LzQtdC20LDQstCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VOb3RQcm92aXNpb25lZCIgbXNnaWQ9Ijg2MTQ4MzAxODA1MDg2ODY2NjYiPiLQodC70YPQttCx0LAg0L3QtSDQv9GA0LDQtNCw0YHRgtCw0Z7Qu9GP0LXRhtGG0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ0xJUlBlcm1hbmVudCIgbXNnaWQ9IjMzNzczNzExNDU5MjY4MzU2NzEiPiLQktGLINC90LUg0LzQvtC20LDRhtC1INC30LzRj9C90ZbRhtGMINC90LDQu9Cw0LTRiyDRltC00Y3QvdGC0YvRhNGW0LrQsNGC0LDRgNCwINCw0LHQsNC90LXQvdGC0LAsINGP0LppINGC0Y3Qu9C10YTQsNC90YPQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkQ2hhbmdlZFRpdGxlIiBtc2dpZD0iNTU5MjE4OTM5ODk1NjE4NzQ5OCI+ItCQ0LHQvNC10LbQsNCy0LDQvdGLINC00L7RgdGC0YPQvyDQt9C80Y/QvdGW0Z7RgdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRGF0YSIgbXNnaWQ9Ijg2NTM3OTQ3ODQ2OTAwNjU1NDAiPiLQodC70YPQttCx0LAg0LTQsNC00LfQtdC90YvRhSDQsdC70LDQutGD0LXRhtGG0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRW1lcmdlbmN5IiBtc2dpZD0iNjU4MTE2Mzc3OTA3MjgzMzY2NSI+ItCQ0LLQsNGA0YvQudC90LDRjyDRgdC70YPQttCx0LAg0LHQu9Cw0LrRg9C10YbRhtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbk5vcm1hbCIgbXNnaWQ9IjQ5NTM4NjcwMTEzODk3NTA2NzMiPiLQk9Cw0LvQsNGB0LDQstCw0Y8g0YHQu9GD0LbQsdCwINC30LDQsdC70LDQutCw0LLQsNC90LDRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGxWb2ljZSIgbXNnaWQ9IjMzOTY5NjM2NTIxMDgxNTEyNjAiPiLQo9GB0LUg0LPQsNC70LDRgdCw0LLRi9GPINGB0LvRg9C20LHRiyDQt9Cw0LHQu9Cw0LrQsNCy0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblNtcyIgbXNnaWQ9IjgzMTQzNTIzMjc0NjE2Mzg4OTciPiLQodC70YPQttCx0LAgU01TINC30LDQsdC70LDQutCw0LLQsNC90LDRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZURhdGEiIG1zZ2lkPSI5OTY2MzY0ODcxMDYxNzEzMjAiPiLQodC70YPQttCx0Ysg0L/QtdGA0LDQtNCw0YfRiyDQs9C+0LvQsNGB0LAv0LTQsNC00LfQtdC90YvRhSDQt9Cw0LHQu9Cw0LrQsNCy0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+ItCh0LvRg9C20LHRiyDQv9C10YDQsNC00LDRh9GLINCz0L7Qu9Cw0YHQsCDRliBTTVMg0LfQsNCx0LvQsNC60LDQstCw0L3Ri9GPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbCIgbXNnaWQ9IjU2NDMwMjgyNjQ0NjYwOTI4MjEiPiLQo9GB0LUg0YHQu9GD0LbQsdGLINC/0LXRgNCw0LTQsNGH0Ysg0LTQsNC00LfQtdC90YvRhSwg0LPQsNC70LDRgdCw0LLRi9GPINGWIFNNUy3RgdC70YPQttCx0Ysg0LfQsNCx0LvQsNC60LDQstCw0L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NWb2ljZSIgbXNnaWQ9IjEyNTgzOTM4MTIzMzUyNTgwMTkiPiLQk9C+0LvQsNGBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YSIgbXNnaWQ9Ijg3MjQ1Njc4MjA3NzkzNzg5MyI+ItCU0LDQtNC30LXQvdGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NGQVgiIG1zZ2lkPSI1NTY2NjI0OTk4ODQwNDg2NDc1Ij4i0KTQsNC60YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NTTVMiIG1zZ2lkPSIyMDE1NDYwMzczNzAxNTI3NDg5Ij4iU01TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YUFzeW5jIiBtc2dpZD0iNDUyMzQ1NDc4MzQ5ODU1MTQ2OCI+ItCQ0YHRltC90YXRgNC+0L3QvdGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhU3luYyIgbXNnaWQ9Ijc1MzAwMDA1MTk2NDYwNTQ3NzYiPiLQodGW0L3RhdGA0L7QvdC90YvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BhY2tldCIgbXNnaWQ9IjY5OTEwMDY1NTc5OTM0MjM0NTMiPiLQn9Cw0LrQtdGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUEFEIiBtc2dpZD0iMzIzNTI1OTA4NTY0ODI3MTAzNyI+IlBBRCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MCIgbXNnaWQ9IjcxNzAzMzU0NzIxOTg2OTQ5NDUiPiLQhtC90LTRi9C60LDRgtCw0YAg0YDQvtGe0LzRltC90LPRgyDRntC60LvRjtGH0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxIiBtc2dpZD0iNTMxNDg2MTUxOTc1MjUzODkyMiI+ItCG0L3QtNGL0LrQsNGC0LDRgCDRgNC+0Z7QvNGW0L3Qs9GDINCw0LTQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MiIgbXNnaWQ9Ijg5Njk5MjkwNDkwODEyNjgxMTUiPiLQhtC90LTRi9C60LDRgtCw0YAg0YDQvtGe0LzRltC90LPRgyDQvNGW0YDQs9Cw0LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDMiIG1zZ2lkPSI1MTQ4MjU1MDI3MDQzOTQzMzE3Ij4i0Jcg0YDQsNGR0L3RgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NCIgbXNnaWQ9Ijg4MDg0NTY2ODI1NTA3OTY1MzAiPiLQlyDQsdGD0LTRi9C90LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NSIgbXNnaWQ9Ijc2MDQwNjMyNTI4NTAzNTQzNTAiPiLQoNC+0Z7QvNGW0L3Qszog0L/QtdGA0LDQstCw0LbQvdCw0Y8g0YHRltGB0YLRjdC80LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDYiIG1zZ2lkPSIyMDU5NDQwODI1NzgyODcxNTEzIj4i0KDQvtGe0LzRltC90LM6INC00LDRgdGC0YPQv9C90LDRjyDRgdGW0YHRgtGN0LzQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NyIgbXNnaWQ9IjcxMTIwNzg3MjQwOTcyMzM2MDUiPiLQoNC+0Z7QvNGW0L3Qszog0LDRgdCw0YbRi9GP0YLRi9Ge0L3RiyDQv9Cw0YDRgtC90ZHRgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OCIgbXNnaWQ9IjU5ODk1Njk3Nzg2MDQwODkyOTEiPiLQoNC+0Z7QvNGW0L3Qszog0L/RgNGN0Lxp0YPQvC3Qv9Cw0YDRgtC90ZHRgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OSIgbXNnaWQ9Ijc5NjkyOTY4MTEzNTUxNTI0OTEiPiLQoNC+0Z7QvNGW0L3Qszog0L/QvtGe0L3QsNGPINGE0YPQvdC60YbRi9GP0L3QsNC70YzQvdCw0YHRhtGMINGB0LvRg9C20LHRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTAiIG1zZ2lkPSIzOTkyOTA2OTk5ODE1MzE2NDE3Ij4i0KDQvtGe0LzRltC90LPCoOKAk8Kg0YfQsNGB0YLQutC+0LLQsNGPINGE0YPQvdC60YbRi9GP0L3QsNC70YzQvdCw0YHRhtGMINGB0LvRg9C20LHRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTEiIG1zZ2lkPSI0MTU0NDc2ODU0NDI2OTIwOTcwIj4i0JHQsNC90Y3RgCDRgNC+0Z7QvNGW0L3Qs9GDINGe0LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEyIiBtc2dpZD0iMTE4OTA3MTExOTk5MjcyNjMyMCI+ItCR0LDQvdGN0YAg0YDQvtGe0LzRltC90LPRgyDQsNC00LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dFNlYXJjaGluZyIgbXNnaWQ9IjgzNjAxNDE4ODU5NzIyNzk5NjMiPiLQn9C+0YjRg9C6INGB0LvRg9C20LHRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVOb3RGb3J3YXJkZWQiIG1zZ2lkPSIxNjgzNjg1ODgzODQxMjcyNTYwIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46INC90LUg0L/QtdGA0LDQsNC00YDQsNGB0L7RntCy0LDQtdGG0YbQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWQiIG1zZ2lkPSIxMzAyOTIyMTE3NDk4NTkwNTIxIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWRUaW1lIiBtc2dpZD0iOTIwNjI1MTczNjUyNzA4NTI1NiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4g0L/RgNCw0LcgPHhsaWZmOmcgaWQ9IlRJTUVfREVMQVkiPnsyfTwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWQiIG1zZ2lkPSI1MDczMjM3ODI3NjIwMTY2Mjg1Ij4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46INC90LUg0L/QtdGA0LDQsNC00YDQsNGB0L7RntCy0LDQtdGG0YbQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkVGltZSIgbXNnaWQ9IjY3ODE2MjE5NjQzMjA2MzUxNzIiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjog0L3QtSDQv9C10YDQsNCw0LTRgNCw0YHQvtGe0LLQsNC10YbRhtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmNDb21wbGV0ZSIgbXNnaWQ9IjMxMTg4NDgyMzA5NjY4ODY1NzUiPiLQmtC+0LQg0LDQsVwn0LXQutGC0LAg0LfQsNCy0LXRgNGI0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZjRXJyb3IiIG1zZ2lkPSIzMzI3NTYwMTI2NTg4NTAwNzc3Ij4i0J/RgNCw0LHQu9C10LzQsCDQv9Cw0LTQu9GD0YfRjdC90L3RjyDRhtGWINC90Y/Qv9GA0LDQstGW0LvRjNC90Ysg0LrQvtC0INGE0YPQvdC60YbRi9GWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvck9rIiBtc2dpZD0iMTE5MTkxOTM3ODA4MzQ3MjIwNCI+ItCe0JoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3IiIG1zZ2lkPSI3OTU2MzkyNTExMTQ2Njk4NTIyIj4i0JDQtNCx0YvQu9Cw0YHRjyDQv9Cw0LzRi9C70LrQsCDRgdC10YLQutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiLQndC1INCw0YLRgNGL0LzQsNC70LDRgdGPINC30L3QsNC50YHRhtGWIFVSTC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JVbnN1cHBvcnRlZEF1dGhTY2hlbWUiIG1zZ2lkPSI2Mjk5OTgwMjgwNDQyMDc2Nzk5Ij4i0KHRhdC10LzQsCDQsNGe0YLRjdC90YLRi9GE0ZbQutCw0YbRi9GWINGB0LDQudGC0LAg0L3QtSDQv9Cw0LTRgtGA0YvQvNC70ZbQstCw0LXRhtGG0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQXV0aCIgbXNnaWQ9IjE0MzUwNjU2Mjk0MzgwNDQ1MzQiPiLQn9Cw0LzRi9C70LrQsCDQsNGe0YLRjdC90YLRi9GE0ZbQutCw0YbRi9GWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclByb3h5QXV0aCIgbXNnaWQ9IjE3ODgyMDcwMTA1NTkwODEzMzEiPiLQn9GA0LDQstC10YDQutCwINGB0LDQv9GA0LDRntC00L3QsNGB0YbRliDQv9GA0LDQtyDQv9GA0L7QutGB0ZYt0YHQtdGA0LLQtdGAINGB0LrQvtC90YfRi9C70LDRgdGPINC90Y/RntC00LDQu9CwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckNvbm5lY3QiIG1zZ2lkPSI4NzE0MjczMjM2MzY0NjQwNTQ5Ij4i0J3QtdC80LDQs9GH0YvQvNCwINC/0LDQtNC70YPRh9GL0YbRhtCwINC00LAg0YHQtdGA0LLQtdGA0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9ySU8iIG1zZ2lkPSIyMzQwNTU4MTk3NDg5MzAyMTg4Ij4i0J3QtdC80LDQs9GH0YvQvNCwINC30LLRj9C30LDRhtGG0LAg0Lcg0YHQtdGA0LLQtdGA0LDQvC4g0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9Cw0LfQvdC10LkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVGltZW91dCIgbXNnaWQ9IjQ3NDM0MDM3MDM3NjI4ODM5NTQiPiLQp9Cw0YEg0YfQsNC60LDQvdC90Y8g0LfQu9GD0YfRjdC90L3RjyDQtyDRgdC10YDQstC10YDQsNC8INGB0LrQvtC90YfRi9Ge0YHRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JSZWRpcmVjdExvb3AiIG1zZ2lkPSI4Njc5NTk2MDkwMzkyNzc5NTE2Ij4i0KHRgtCw0YDQvtC90LrQsCDQt9C80Y/RiNGH0LDQtSDQt9Cw0YjQvNCw0YIg0L/QtdGA0LDQvdCw0LrRltGA0LDQstCw0L3QvdGP0Z4g0YHQtdGA0LLQtdGA0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRTY2hlbWUiIG1zZ2lkPSI1MDE1NzMwODEyOTA2MTkyMjA4Ij4i0J/RgNCw0YLQsNC60L7QuyDQvdC1INC/0LDQtNGC0YDRi9C80LvRltCy0LDQtdGG0YbQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGYWlsZWRTc2xIYW5kc2hha2UiIG1zZ2lkPSI5NjU0OTYwNjAwMDY1ODY0MSI+ItCd0LXQvNCw0LPRh9GL0LzQsCDRntGB0YLQsNC70Y/QstCw0YbRjCDQsdGP0YHQv9C10YfQvdCw0LUg0LfQu9GD0YfRjdC90L3QtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4i0J3QtdC80LDQs9GH0YvQvNCwINCw0LTQutGA0YvRhtGMINGB0YLQsNGA0L7QvdC60YMsINGC0LDQvNGDINGI0YLQviBVUkwg0L3QtdGB0LDQv9GA0LDRntC00L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlIiBtc2dpZD0iMjE3MDc4ODUxNTA1MjU1ODY3NiI+ItCd0LXQvNCw0LPRh9GL0LzQsCDQsNGC0YDRi9C80LDRhtGMINC00L7RgdGC0YPQvyDQtNCwINGE0LDQudC70LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZU5vdEZvdW5kIiBtc2dpZD0iNjIwMzg1NjYxMjA0MjY1NTA4NCI+ItCd0LXQvNCw0LPRh9GL0LzQsCDQt9C90LDQudGB0YbRliDQv9Cw0YLRgNCw0LHQsNCy0LDQvdGLINGE0LDQudC7LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRvb01hbnlSZXF1ZXN0cyIgbXNnaWQ9IjEyMzUzOTY5MjcwODcxODgyNTMiPiLQkNC/0YDQsNGG0L7RntCy0LDQtdGG0YbQsCDQt9Cw0L3QsNC00YLQsCDRiNC80LDRgiDQt9Cw0L/Ri9GC0LDRni4g0J/QsNGB0L/RgNCw0LHRg9C50YbQtSDRj9GI0YfRjSDRgNCw0Lcg0L/QsNC30L3QtdC5LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg5Njc3MTAwMjUwMzYxNjM4MjIiPiLQn9Cw0LzRi9C70LrQsCDRntCy0LDRhdC+0LTRgyDQstCwINGe0Ltp0LrQvtCy0Ysg0LfQsNC/adGBIDx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luYyIgbXNnaWQ9IjgzNTM1MjMwNjAyNjkzMzU2NjciPiLQodGW0L3RhdGA0LDQvdGW0LfQsNGG0YvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luY05vdGlmaWNhdGlvblRpdGxlIiBtc2dpZD0iMzk3NzQzMzQ5MTkxOTAxNDU4Ij4i0KHRltC90YXRgNCw0L3RltC30LDRhtGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVRvb01hbnlEZWxldGVzTm90aWZpY2F0aW9uRGVzYyIgbXNnaWQ9IjgxMDA5ODE0MzUwODA2OTY0MzEiPiLQl9Cw0L3QsNC00YLQsCDRiNC80LDRgiDQstGL0LTQsNC70LXQvdC90Y/RniA8eGxpZmY6ZyBpZD0iQ09OVEVOVF9UWVBFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjQ5NDAxOTIzNDEwMjE1NDg5NiI+ItCf0LDQvNGP0YbRjCDQv9C70LDQvdGI0Y3RgtCwINC/0L7RntC90LDRjy4g0JLRi9C00LDQu9GW0YbQtSDQvdC10LrQsNGC0L7RgNGL0Y8g0YTQsNC50LvRiywg0LrQsNCxINCy0YvQt9Cy0LDQu9GW0YbRjCDQvNC10YHRhtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDc1OTk5Mjg2NjgwMDAwNTQxIj4i0J/QsNC80Y/RhtGMINGC0Y3Qu9C10YTQvtC90LAg0L/QvtGe0L3QsNGPLiDQktGL0LTQsNC70ZbRhtC1IOKAi+KAi9C90LXQutCw0YLQvtGA0YvRjyDRhNCw0LnQu9GLLCDQutCw0LEg0LLRi9C30LLQsNC70ZbRhtGMINC80LXRgdGG0LAuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNzbF9jYV9jZXJ0X3dhcm5pbmcgKDU4NDg0MDIxMjc0NTUwMjE3MTQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc3NsX2NhX2NlcnRfbm90aV9ieV91bmtub3duICg0NDc1NDM3ODYyMTg5ODUwNjAyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNzbF9jYV9jZXJ0X25vdGlfbWFuYWdlZCAoNDAzMDI2MzQ5NzY4Njg2NzE0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lIiBtc2dpZD0iNjU0NTY5NjAwNzYzMTQwNDI5MiI+ItCvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTQ1MzUxNDIwODY1MjAyODUzIj4i0J/QsNGA0LDQvNC10YLRgNGLINC/0LvQsNC90YjRjdGC0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzE5OTE5MDc1NDYzOTg4NjM4Ij4i0J/QsNGA0LDQvNC10YLRgNGLINGC0Y3Qu9C10YTQvtC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZSIgbXNnaWQ9IjcxNjc3MDMzODk4MDI2MTg2NjMiPiLQkdGP0LfQs9GD0YfQvdGLINGA0Y3QttGL0LwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0dXJuX29uX3JhZGlvIiBtc2dpZD0iMzkxMjc5MzA5MjMzOTk2MjM3MSI+ItCj0LrQu9GO0YfRi9GG0Ywg0LHQtdGB0L/RgNCw0LLQsNC00L3Rg9GOINGB0LXRgtC60YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0dXJuX29mZl9yYWRpbyIgbXNnaWQ9IjgxOTg3ODQ5NDk5ODcwNjIzNDYiPiLQkNC00LrQu9GO0YfRi9GG0Ywg0LHQtdGB0L/RgNCw0LLQsNC00L3Rg9GOINGB0LXRgtC60YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fbG9jayIgbXNnaWQ9Ijc5OTA5NDY1NTQ5NjA5ODE1MyI+ItCR0LvQsNC60ZbRgNC+0Z7QutCwINGN0LrRgNCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvd2VyX29mZiIgbXNnaWQ9IjQyNjY2MTQxMDc0MTI4NjUwNDgiPiLQktGL0LrQu9GO0YfRi9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9zaWxlbnQiIG1zZ2lkPSIzMTkyOTgxNjMwMTg0NzMwNzgiPiLQl9Cy0LDQvdC+0Log0LLRi9C60LsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfdmlicmF0ZSIgbXNnaWQ9IjcwNzIwNDMzODg1ODE1NTEzOTUiPiLQl9Cy0LDQvdC+0Log0Lcg0LLRltCx0YDQsNGG0YvRj9C5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfcmluZyIgbXNnaWQ9Ijg1OTIyNDE4MTYxOTQwNzQzNTMiPiLQl9Cy0LDQvdC+0Log0YPQutC7LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX3Byb2dyZXNzIiBtc2dpZD0iMjI4MTA3OTI1NzMyOTk4MTIwMyI+ItCS0YvQutC70Y7Rh9GN0L3QvdC1Li4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzM4NTc0NTE3OTU1NTczMTQ3MCI+ItCf0LvQsNC90YjRjdGCINCx0YPQtNC30LUg0LDQtNC60LvRjtGH0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDk3OTIxNzUyNDI4MjEzNTMiPiLQktCw0Ygg0YLRjdC70LXRhNC+0L0g0LHRg9C00LfQtSDQstGL0LrQu9GO0YfQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybV9xdWVzdGlvbiIgbXNnaWQ9IjI5MDY1NDQ3Njg4ODExMzYxODMiPiLQl9Cw0LrRgNGL0YbRjD8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfdGl0bGUiIG1zZ2lkPSI3MDU0NTA5OTE0NTAwMTQwMzYxIj4i0J/QtdGA0LDQt9Cw0LPRgNGD0LfQutCwINGeINCx0Y/RgdC/0LXRh9C90YvQvCDRgNGN0LbRi9C80LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfY29uZmlybSIgbXNnaWQ9IjU1MjkzOTQ0NTAyNzg0NjY4Ij4i0KXQvtGH0LDRhtC1INC/0LXRgNCw0LfQsNCz0YDRg9C30ZbRhtGG0LAg0Z4g0LHRj9GB0L/QtdGH0L3Ri9C8INGA0Y3QttGL0LzQtT8g0JPRjdGC0LAg0LTQsNC30LLQvtC70ZbRhtGMINCw0LTQutC70Y7Rh9GL0YbRjCDRg9GB0LUg0ZbQvdGI0YvRjyDRntGB0YLQsNC70Y/QstCw0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYuINCf0LDRgdC70Y8g0L/QtdGA0LDQt9Cw0LPRgNGD0LfQumkgadGFINC/0YDQsNGG0LAg0LHRg9C00LfQtSDQsNC00L3QvtGe0LvQtdC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50X3Rhc2tzX3RpdGxlIiBtc2dpZD0iMzY5MTc2NDYyMzYzODEyNzg4OCI+ItCQ0L/QvtGI0L3RltGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+ItCd0Y/QvNCwINCw0L/QvtGI0L3RltGFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDA4NDc3MTQwMDg4MDUzNjY1Ij4i0J/QsNGA0LDQvNC10YLRgNGLINC/0LvQsNC90YjRjdGC0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiLQn9Cw0YDQsNC80LXRgtGA0Ysg0YLRjdC70LXRhNC+0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9jayIgbXNnaWQ9IjI4NDQ5NDUxOTE3OTIxMTk3MTIiPiLQkdC70LDQutGW0YDQvtGe0LrQsCDRjdC60YDQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3Bvd2VyX29mZiIgbXNnaWQ9IjQ0NzE4Nzk0NDA4Mzk4Nzk3MjIiPiLQktGL0LrQu9GO0YfRi9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2J1Z19yZXBvcnQiIG1zZ2lkPSI3OTM0MDEwNTc4OTIyMzA0Nzk5Ij4i0KHQv9GA0LDQstCw0LfQtNCw0YfQsCDQv9GA0LAg0L/QsNC80YvQu9C60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdGl0bGUiIG1zZ2lkPSIyNjY3NDk0ODAzNzQyNTQ4NTMzIj4i0KHQv9GA0LDQstCw0LfQtNCw0YfQsCDQv9GA0LAg0L/QsNC80YvQu9C60YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSIgbXNnaWQ9IjM5ODQ0NzA0ODc1MDM1MDQ1NiI+ItCR0YPQtNC30LUg0LfQsWnRgNCw0YbRhtCwIGnQvdGE0LDRgNC80LDRhtGL0Y8g0L/RgNCwINCx0Y/Qs9GD0YfRiyDRgdGC0LDQvSDQv9GA0YvQu9Cw0LTRiywg0Y/QutCw0Y8g0LHRg9C00LfQtSDQsNC00L/RgNCw0Z7Qu9GP0YbRhtCwINC90LAg0Y3Qu9C10LrRgtGA0L7QvdC90YPRjiDQv9C+0YjRgtGDLiDQodGC0LLQsNGA0Y3QvdC90LUg0YHQv9GA0LDQstCw0LfQtNCw0YfRiyDQv9GA0LAg0L/QsNC80YvQu9C6aSDQt9C+0LnQvNC1INC90LXQutCw0YLQvtGA0Ysg0YfQsNGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fdG9nZ2xlX3NpbGVudF9tb2RlIiBtc2dpZD0iODIxOTUyNTM0NDI0NjgxMDkyNSI+ItCR0Y/Qt9Cz0YPRh9C90Ysg0YDRjdC20YvQvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMzI4OTg0MTkzNzAwMzc1ODgwNiI+ItCT0YPQuiDQstGL0LrQuy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSIxNTA2MDQ2NTc5MTc3MDY2NDE5Ij4i0JPRg9C6INGD0LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc190b2dnbGVfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjU4ODQzMzAzMDY5MjYzMDc0NTYiPiLQoNGN0LbRi9C8IFwi0KMg0YHQsNC80LDQu9GR0YbQtVwiIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIyNzE5NTU3OTgyNjA4OTE5NzUwIj4i0KPQutC70Y7Rh9Cw0L3RiyDRgNGN0LbRi9C8IFwi0KMg0YHQsNC80LDQu9GR0YbQtVwiIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iNTA3NTA3MDQ0Mjg1NDQ5MDI5NiI+ItCg0Y3QttGL0LwgXCLQoyDRgdCw0LzQsNC70ZHRhtC1XCIg0LDQtNC60LvRjtGH0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i0JHRj9GB0L/QtdGH0L3RiyDRgNGN0LbRi9C8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4i0KHRltGB0YLRjdC80LAgQW5kcm9pZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jb3N0TW9uZXkiIG1zZ2lkPSI1NDI5ODA4MjE3ODYxNDYwNDAxIj4i0J/Qu9Cw0YLQvdGL0Y8g0L/QsNGB0LvRg9Cz0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Nvc3RNb25leSIgbXNnaWQ9IjMyOTMzMDE5MDM0MDk4Njk0OTUiPiLQoNCw0LHRltGG0Ywg0YHQv9GA0LDQstGLLCDRj9C60ZbRjyDQvNC+0LPRg9GG0Ywg0LrQsNGI0YLQsNCy0LDRhtGMINCy0LDQvCDQs9GA0L7RiNCw0LkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21lc3NhZ2VzIiBtc2dpZD0iNzUyMTI0OTE0ODQ0NTQ1NjY2MiI+ItCS0LDRiNGL0Y8g0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19tZXNzYWdlcyIgbXNnaWQ9Ijc4MjE5OTkwNzEwMDM2OTkyMzYiPiLQodGH0YvRgtCy0LDRhtGMINGWINC30LDQv9GW0YHQstCw0YbRjCDQstCw0YjRiyBTTVMt0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWLCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYg0Y3Qu9C10LrRgtGA0L7QvdC90LDQuSDQv9C+0YjRgtGLINGWINGW0L3RiNGL0Y8g0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9wZXJzb25hbEluZm8iIG1zZ2lkPSIzNTE5MTYzMTQxMDcwNTMzNDc0Ij4i0JLQsNGI0LDRjyDQv9C10YDRgdCw0L3QsNC70YzQvdCw0Y8g0ZbQvdGE0LDRgNC80LDRhtGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3BlcnNvbmFsSW5mbyIgbXNnaWQ9Ijg0MjY0NTMxMjk3ODg4NjEzMzgiPiLQn9GA0LDQvNGLINC00L7RgdGC0YPQvyDQtNCwINGW0L3RhNCw0YDQvNCw0YbRi9GWINC/0YDQsCDQstCw0YEsINGP0LrQsNGPINC30LDRhdC+0Z7QstCw0LXRhtGG0LAg0L3QsCDQstCw0YjQsNC5INC60LDQvdGC0LDQutGC0L3QsNC5INC60LDRgNGG0LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NvY2lhbEluZm8iIG1zZ2lkPSI1Nzk5MDk2NjIzNDEyMDQzNzkxIj4i0JLQsNGI0LAg0YHQsNGG0YvRj9C70YzQvdCw0Y8g0ZbQvdGE0LDRgNC80LDRhtGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NvY2lhbEluZm8iIG1zZ2lkPSI3MTI5ODQyNDU3NjExNjQzNDkzIj4i0J/RgNCw0LzRiyDQtNC+0YHRgtGD0L8g0LTQsCDRltC90YTQsNGA0LzQsNGG0YvRliDQsNCxINCy0LDRiNGL0YUg0LrQsNC90YLQsNC60YLQsNGFINGWINGB0LDRhtGL0Y/Qu9GM0L3Ri9GFINGB0YPQstGP0LfRj9GFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9sb2NhdGlvbiIgbXNnaWQ9IjYzNTE0OTc0MjQzNjY5MjA0OSI+ItCS0LDRiNCwINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19sb2NhdGlvbiIgbXNnaWQ9IjU3MDQ2Nzk3NjMxMjQxNzAxMDAiPiLQmtCw0L3RgtGA0LDQu9GP0LLQsNGG0Ywg0YHQstCw0ZEg0YTRltC30ZbRh9C90LDQtSDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3QtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbmV0d29yayIgbXNnaWQ9IjU4MDg5ODMzNzc3MjcxMDk4MzEiPiLQodC10YLQutCw0LLQsNGPINGB0YPQstGP0LfRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbmV0d29yayIgbXNnaWQ9IjQ0NzgyOTk0MTMyNDE4NjE5ODciPiLQlNC+0YHRgtGD0L8g0LTQsCDRgNC+0LfQvdGL0YUg0YTRg9C90LrRhtGL0Lkg0YHQtdGC0LrRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjE1ODU0MDM1NDQxNjIxMjgxMDkiPiJCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSI1NjI1Mjg4NTc3MTY0MjgyMzkxIj4i0JTQvtGB0YLRg9C/INC00LAg0L/RgNGL0LvQsNC0INGWINGB0LXRgtCw0Log0L/RgNCw0LcgQmx1ZXRvb3RoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hdWRpb1NldHRpbmdzIiBtc2dpZD0iODMyOTI2MTY3MDE1MTg3MTIzNSI+ItCd0LDQu9Cw0LTRiyDQs9GD0LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjI2NDE1MTU0MDMzNDc1NjgxMzAiPiLQl9C80LXQvdCwINC90LDQu9Cw0LQg0LPRg9C60YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjIwOTI0NjY1MzQyNDc5ODAzMyI+ItCj0L/Qu9GL0LLQsNC1INC90LAg0LHQsNGC0LDRgNGN0Y4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjQ0MTI3NTMyMDYzODkxNjk0NyI+ItCS0YvQutCw0YDRi9GB0YLQvtGe0LLQsNC50YbRjCDQvNCw0LPRh9GL0LzQsNGB0YbRliwg0Y/QutGW0Y8g0LzQvtCz0YPRhtGMINGF0YPRgtC60LAg0YDQsNC30YDQsNC00LfRltGG0Ywg0LHQsNGC0LDRgNGN0Y4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbGVuZGFyIiBtc2dpZD0iNTg2MzUwODQzNzc4MzY4MzkwMiI+ItCa0LDQu9GP0L3QtNCw0YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbGVuZGFyIiBtc2dpZD0iNTc3NzUzNDMxNjk4MjE4NDQxNiI+ItCf0YDQsNC80Ysg0LTQvtGB0YLRg9C/INC00LAg0LrQsNC70LXQvdC00LDRgNCwINGWINC80LXRgNCw0L/RgNGL0LXQvNGB0YLQstCw0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RpY3Rpb25hcnkiIG1zZ2lkPSI0MTQ4NTk3MTI4ODQzNjQxMzc5Ij4i0KfRi9GC0LDRhtGMINC60LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYg0YHQu9C+0Z7QvdGW0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RpY3Rpb25hcnkiIG1zZ2lkPSI3OTIxMTY2MzU1OTY0NzY0NDkwIj4i0KfRi9GC0LDRhtGMINGB0LvQvtCy0Ysg0Z4g0LrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRltC8INGB0LvQvtGe0L3RltC60YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgwOTAyMzc3MDI0MzI1NzY3ODgiPiLQl9Cw0L/RltGB0LDRhtGMINC60LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYg0YHQu9C+0Z7QvdGW0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjI3MTE1NjE5OTQ0OTczNjE2NDYiPiLQlNCw0LTQsNGG0Ywg0YHQu9C+0LLRiyDRniDQutCw0YDRi9GB0YLQsNC70YzQvdGW0YbQutGWINGB0LvQvtGe0L3RltC6LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ib29rbWFya3MiIG1zZ2lkPSIxOTQ5NTE5NjczMTAzOTY4MjI5Ij4i0JfQsNC60LvQsNC00LrRliDRliDQs9GW0YHRgtC+0YDRi9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ib29rbWFya3MiIG1zZ2lkPSI0MTY5NzcxNjA2MjU3OTYzMDI4Ij4i0J/RgNCw0LzRiyDQtNC+0YHRgtGD0L8g0LTQsCDQt9Cw0LrQu9Cw0LTQsNC6INGWINCz0ZbRgdGC0L7RgNGL0ZYg0LHRgNCw0Z7Qt9C10YDQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNjExNzcwNDYyOTcyODgyNDEwMSI+ItCR0YPQtNC30ZbQu9GM0L3RltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZpY2VBbGFybXMiIG1zZ2lkPSI0NzY5MzU2MzYyMjUxNjQxMTc1Ij4i0KPRgdGC0LDQu9GP0LLQsNGG0Ywg0LHRg9C00LfRltC70YzQvdGW0LouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3ZvaWNlbWFpbCIgbXNnaWQ9IjQxNjIyMzcxNDUwMjc1OTIxMzMiPiLQk9Cw0LvQsNGB0LDQstCw0Y8g0L/QvtGI0YLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfdm9pY2VtYWlsIiBtc2dpZD0iMjQ5ODQwMzk2OTg2Mjk1MTM5MyI+ItCf0YDQsNC80Ysg0LTQvtGB0YLRg9C/INC00LAg0LPQsNC70LDRgdCw0LLQvtC5INC/0L7RiNGC0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21pY3JvcGhvbmUiIG1zZ2lkPSIxNzE1Mzk5MDAyNTAwNDM0NjQiPiLQnNGW0LrRgNCw0YTQvtC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19taWNyb3Bob25lIiBtc2dpZD0iNzEwNjYxODI4NjkwNTczODQwOCI+ItCf0YDQsNC80Ysg0LTQvtGB0YLRg9C/INC00LAg0LzRltC60YDQsNGE0L7QvdGDINC00LvRjyDQt9Cw0L/RltGB0YMg0LPRg9C60YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbWVyYSIgbXNnaWQ9IjQ4MjAzNzI0OTU4OTQ1ODY2MTUiPiLQmtCw0LzQtdGA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbWVyYSIgbXNnaWQ9IjI5MzM2NjczNzIyODk1Njc3MTQiPiLQn9GA0LDQvNGLINC00L7RgdGC0YPQvyDQtNCwINC60LDQvNC10YDRiywg0LrQsNCxINC30YDQsNCx0ZbRhtGMINC30LTRi9C80LDQuiDRhtGWINC30L3Rj9GG0Ywg0LLRltC00Y3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc2NyZWVubG9jayIgbXNnaWQ9IjgyNzU1MDAxNzMzMzA3MTgxNjgiPiLQrdC60YDQsNC9INCx0LvQsNC60ZbRgNC+0Z7QutGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zY3JlZW5sb2NrIiBtc2dpZD0iNzA2NzQ5NzEyODkyNTQ5OTQwMSI+ItCc0LDQs9GH0YvQvNCw0YHRhtGMINGD0L/Qu9GL0LLQsNGG0Ywg0L3QsCDQv9Cw0LLQvtC00LfRltC90Ysg0Y3QutGA0LDQvdCwINCx0LvQsNC60ZbRgNC+0Z7Qumkg0L3QsCDQstCw0YjQsNC5INC/0YDRi9C70LDQtNC30LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FwcEluZm8iIG1zZ2lkPSI4MDI4Nzg5NzYyNjM0MTQ3NzI1Ij4i0IbQvdGE0LDRgNC80LDRhtGL0Y8g0LDQsSDQstCw0YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/RhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXBwSW5mbyIgbXNnaWQ9IjM5NTAzNzg1MzgwNDk2MjU5MDciPiLQnNCw0LPRh9GL0LzQsNGB0YbRjCDRg9C/0LvRi9Cy0LDRhtGMINC90LAg0L/QsNCy0L7QtNC30ZbQvdGLINGW0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeINC90LAg0LLQsNGI0LDQuSDQv9GA0YvQu9Cw0LTQt9C1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl93YWxscGFwZXIiIG1zZ2lkPSIzODUwMjgwMTU4MDQxMTc1OTk4Ij4i0KjQv9Cw0LvQtdGA0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dhbGxwYXBlciIgbXNnaWQ9IjU2MzA0MTc4NTQ3NTA1NDAxNTQiPiLQl9C80Y/QvdGW0YbRjCDQvdCw0LvQsNC00Ysg0YjQv9Cw0LvQtdGAINC/0YDRi9C70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1DbG9jayIgbXNnaWQ9IjQwNjUzNTc1OTIzNjYxMjk5MiI+ItCT0LDQtNC30ZbQvdC90ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3lzdGVtQ2xvY2siIG1zZ2lkPSIzOTQ0MzU5ODMzNjI0MDk0OTkyIj4i0JfQvNGP0L3RltGG0Ywg0YfQsNGBINCw0LHQviDRh9Cw0YHQsNCy0Ysg0L/QvtGP0YEg0L/RgNGL0LvQsNC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0YXR1c0JhciIgbXNnaWQ9IjIwOTU4NjI1NjgxMTM5NDUzOTgiPiLQoNCw0LTQvtC6INGB0YLQsNC90YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0YXR1c0JhciIgbXNnaWQ9IjYyNDI1OTM0MzIyMjY4MDcxNzEiPiLQl9C80Y/QvdGW0YbRjCDQvdCw0LvQsNC00Ysg0L/RgNGL0LvQsNC00Ysg0Z4g0YDQsNC00LrRgyDRgdGC0LDQvdGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeW5jU2V0dGluZ3MiIG1zZ2lkPSIzMzQxOTkwOTg2MTQ3ODI2NTQxIj4i0J3QsNC70LDQtNGLINGB0ZbQvdGF0YDQsNC90ZbQt9Cw0YbRi9GWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeW5jU2V0dGluZ3MiIG1zZ2lkPSI3NjAzMTk1MjY1MTI5MDMxNzk3Ij4i0JTQvtGB0YLRg9C/INC00LAg0L3QsNC70LDQtCDRgdGW0L3RhdGA0LDQvdGW0LfQsNGG0YvRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjb3VudHMiIG1zZ2lkPSIzMzU5NjQ2MjkxMTI1MzI1NTE5Ij4i0JLQsNGI0YvRjyDRntC70ZbQutC+0LLRi9GPINC30LDQv9GW0YHRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjb3VudHMiIG1zZ2lkPSI0OTQ4NzMyNjQxODI3MDkxMzEyIj4i0JTQvtGB0YLRg9C/INC00LAg0LTQt9C10Y7Rh9GL0YUg0YPQu9GW0LrQvtCy0YvRhSDQt9Cw0L/RltGB0LDRni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9Ijc5OTgyMTQ5Njg3OTE1OTkzMjYiPiLQmtGW0YDQsNCy0LDQvdC90LUg0LDQv9Cw0YDQsNGC0L3Ri9C8INC30LDQsdC10YHQv9GP0YfRjdC90L3QtdC8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNDM1NzA1Nzg2MTIyNTQ2MjcwMiI+ItCf0YDQsNC80Ysg0LTQvtGB0YLRg9C/INC00LAg0LDQv9Cw0YDQsNGC0L3QsNCz0LAg0LfQsNCx0LXRgdC/0Y/Rh9GN0L3QvdGPINC3INGC0Y3Qu9C10YTQvtC90L3QsNC5INGC0YDRg9Cx0LrRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfcGhvbmVDYWxscyIgbXNnaWQ9IjkwNjcxNzM5ODgzMjU4NjU5MjMiPiLQotGN0LvQtdGE0L7QvdC90YvRjyDQstGL0LrQu9GW0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGhvbmVDYWxscyIgbXNnaWQ9Ijc0ODk3MDE2MjA0NDYxODM3NzAiPiLQkNC00YHQvtGH0LLQsNGG0YwsINC30LDQv9GW0YHQstCw0YbRjCDRliDQsNC/0YDQsNGG0L7RntCy0LDRhtGMINCy0YvQutC70ZbQutGWINGC0Y3Qu9C10YTQvtC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbVRvb2xzIiBtc2dpZD0iNDY1MjE5MTY0NDA4MjcxNDA0OCI+ItCh0ZbRgdGC0Y3QvNC90YvRjyDRltC90YHRgtGA0YPQvNC10L3RgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1Ub29scyIgbXNnaWQ9IjgxNjIxMDI2MDIxOTA3MzQzMDUiPiLQndGW0LbQvdGWINGe0LfRgNC+0LLQtdC90Ywg0LTQvtGB0YLRg9C/0YMg0ZYg0LrRltGA0LDQstCw0L3QvdGPINGB0ZbRgdGC0Y3QvNCw0LkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSIzNDQ2MTY0NTg0NzEwNTk2NTEzIj4i0KHRgNC+0LTQutGWINGA0LDRgdC/0YDQsNGG0L7RntC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSI3MDU4ODI4MDMyMzU4MTQyMDE4Ij4i0KTRg9C90LrRhtGLaSwg0L/QsNGC0YDRjdCx0L3Ri9GPINGC0L7Qu9GM0LrRliDQtNC70Y8g0YDQsNGB0L/RgNCw0YbQvtGe0YjRh9GL0LrQsNGeINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiLQmtCw0YDRi9GB0YLQsNC70YzQvdGW0YbQutGWINGW0L3RgtGN0YDRhNC10LnRgSDRltC90YjQsNCz0LAg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGlzcGxheSIgbXNnaWQ9IjYwNTEwMDIwMzE5MzMwMTM3MTQiPiLQo9C/0LvRi9GeINC60LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZbRhSDRltC90YLRjdGA0YTQtdC50YHQsNGeINGW0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdG9yYWdlIiBtc2dpZD0iMTk3MTExODc3MDU0NjMzNjk2NiI+ItCh0YXQvtCy0ZbRiNGH0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzQ0MjMxODUwMjQ0Njg3NDk5OSI+ItCQ0YLRgNGL0LzQsNGG0Ywg0LTQvtGB0YLRg9C/INC00LAgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQutCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiLQlNC+0YHRgtGD0L8g0LTQsCBTRC3QutCw0YDRgtGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI3OTE5MDI1NjAyMjgzNTkzOTA3Ij4i0KHQv9C10YbRi9GP0LvRjNC90YvRjyDQvNCw0LPRh9GL0LzQsNGB0YbRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNDIwNTE5Njg4MTY3ODE0NDMzNSI+ItCk0YPQvdC60YbRi9GWLCDRj9C60ZbRjyDQvNC+0LPRg9GG0Ywg0LfQsNC/0YvRgtCw0YbRjCDQtNCw0LTQsNGC0LrQvtCy0YvRjyDRgtGN0YXQvdCw0LvQvtCzaWkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzOTAxNzE3OTM2OTMwMTcwMzIwIj4i0JDRgtGA0YvQvNCw0LnRhtC1INC30LzQtdGB0YZp0LLQsCDQsNC60L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzNzcyMjI1MDA4NjA1MzEwNjcyIj4i0JLRi9Cy0YPRh9GL0YbQtSDQt9C80LXRgdGGadCy0LAg0LDQutC90LAsINC3INGP0Lpp0Lwg0LLRiyDQv9GA0LDRhtGD0LXRhtC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdFRvdWNoRXhwbG9yYXRpb24iIG1zZ2lkPSIzMTA4NzIzMzY0Njc2NjY3MzIwIj4i0KPQutC70Y7Rh9GL0YbQtSBFeHBsb3JlIGJ5IFRvdWNoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iNTgwMDU1MjUxNjc3OTI0OTM1NiI+ItCt0LvQtdC80LXQvdGCLCDQtNCwINGP0Lpp0YUg0LTQsNC60YDQsNC90LDQu2nRgdGPLCDQvNC+0LPRg9GG0Ywg0LHRi9GG0Ywg0LDQs9GD0YfQsNC90YssINCwINGN0LrRgNCw0L0g0LHRg9C00LfQtSDQv9GA0LDRhtCw0LLQsNGG0Ywg0Lcg0LbRjdGB0YLQsNC8aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNzM5ODgxNzY2NTIyNTk0MDczIj4i0KPQutC70Y7Rh9GL0YbQtSDQv9Cw0LvRj9C/0YjRjdC90L3QtSDQstGN0LEt0LTQsNGB0YLRg9C/0L3QsNGB0YbRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iNzg4MTA2Mzk2MTUwNzUxMTc2NSI+ItCh0YbRjdC90LDRgNGLaSDQvNC+0LPRg9GG0Ywg0LHRi9GG0Ywg0YPRgdGC0LDQu9GP0LLQsNC90YssINC60LDQsSDQt9GA0LDQsdGW0YbRjCDQt9C80LXRgdGGadCy0LAg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyDQsdC+0LvRjNGIINC00LDRgdGC0YPQv9C90YvQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSIyMTAzNDQwMzkxOTAyNDEyMTc0Ij4i0JPQu9GP0LTQt2nRhtC1LCDRiNGC0L4g0L3QsNCxadGA0LDQtdGG0LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLQo9C60LvRjtGH0LDQtSDRniDRgdGP0LHQtSDQsNGB0LDQsdGW0YHRgtGL0Y8g0LTQsNC00LfQtdC90YvRjywg0YLQsNC60ZbRjyDRj9C6INC90YPQvNCw0YDRiyDQutGA0Y3QtNGL0YLQvdGL0YUg0LrQsNGA0YIg0ZYg0L/QsNGA0L7Qu9GWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+ItCw0LTQutC70Y7Rh9Cw0YbRjCDRhtGWINC30LzRj9C90Y/RhtGMINGA0LDQtNC+0Log0YHRgtCw0L3RgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNC00LrQu9GO0YfQsNGG0Ywg0YDQsNC00L7QuiDRgdGC0LDQvdGDINCw0LHQviDQtNCw0LTQsNCy0LDRhtGMINGWINCy0YvQtNCw0LvRj9GG0Ywg0YHRltGB0YLRjdC80L3Ri9GPINC30L3QsNGH0LrRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MjQ3MjgxOTExMzg3OTMxNDg1Ij4i0YDQsNC00L7QuiDRgdGC0LDQvdGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcxNjExMzY2MDc5NTk3NjA2MCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCx0YvRhtGMINGA0LDQtNC60L7QvCDRgdGC0LDQvdGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iMTE0ODE5ODc4NTkzNzQ4OTI2NCI+ItGA0LDQt9Cz0LDRgNC90YPRhtGML9C30LPQsNGA0L3Rg9GG0Ywg0YDQsNC00L7QuiDRgdGC0LDQvdGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iNjkxNzU0OTQzNzEyOTQwMTEzMiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRgNCw0LfQs9C+0YDRgtCy0LDRhtGMINGG0ZYg0LfQs9C+0YDRgtCy0LDRhtGMINGA0LDQtNC+0Log0YHRgtCw0L3Rgy4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9pbnN0YWxsX3Nob3J0Y3V0ICg0Mjc5MDcwMjE2MzcxNTY0MjM0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2luc3RhbGxfc2hvcnRjdXQgKDgzNDEyOTU5MTYyODY3MzY5OTYpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl91bmluc3RhbGxfc2hvcnRjdXQgKDQ3Mjk2MzQ1MjQwNDQwMDM2OTkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfdW5pbnN0YWxsX3Nob3J0Y3V0ICg2NzQ1NzQzNDc0MjY1MDU3OTc1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiLQv9C10YDQsNC90LDQutGW0YDQsNCy0LDQvdC90LUg0LfRi9GF0L7QtNC30Y/Rh9GL0YUg0LLRi9C60LvRltC60ZbQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSI1MzMxMzE4OTMxOTM3NDAyMDQwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDQv9GA0LDRhtC+0Z7QstCw0YbRjCDQstGL0YXQvtC00L3Ri9GPINCy0YvQutC70ZbQutGWINGWINC30LzRj9C90Y/RhtGMINC90LDQsdGW0YDQsNC90Ysg0L3Rg9C80LDRgC4g0JTQt9GP0LrRg9GO0YfRiyDQs9GN0YLQsNC80YMg0LTQsNC30LLQvtC70YMg0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQsNC00YHQvtGH0LLQsNGG0YwsINC/0LXRgNCw0L3QsNC60ZbRgNC+0Z7QstCw0YbRjCDRhtGWINC/0YDQsNC00YPRhdGW0LvRj9GG0Ywg0LLRi9GF0L7QtNC90YvRjyDQstGL0LrQu9GW0LrRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVTbXMiIG1zZ2lkPSI4NjczNDcxNzY4OTQ3ODk1MDgyIj4i0LDRgtGA0YvQvNCw0L3QvdC1INGC0Y3QutGB0YLQsNCy0YvRhSDQv9Cw0LLQtdC00LDQvNC70LXQvdC90Y/RniAoU01TKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVTbXMiIG1zZ2lkPSI2NDI0Mzg3NzU0MjI4NzY2OTM5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDRliDQsNC/0YDQsNGG0L7RntCy0LDRhtGMIFNNUy3Qv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYuINCT0Y3RgtCwINC30L3QsNGH0YvRhtGMLCDRiNGC0L4g0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQvNC+0LbQsCDQutCw0L3RgtGA0LDQu9GP0LLQsNGG0Ywg0LDQsdC+INCy0YvQtNCw0LvRj9GG0Ywg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWLCDQsNC00L/RgNCw0Z7Qu9C10L3Ri9GPINC90LAg0L/RgNGL0LvQsNC00YMsINC90LUg0L/QsNC60LDQt9Cy0LDRjtGH0Ysg0ZbRhSDQstCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlTW1zIiBtc2dpZD0iMTgyMTMxNzM0NDY2ODI1NzA5OCI+ItCw0YLRgNGL0LzQsNC90L3QtSDRgtGN0LrRgdGC0LDQstGL0YUg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGP0Z4gKE1NUykiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlTW1zIiBtc2dpZD0iNTMzMDE5NDM3MjYzMjEyMjYwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDRliDQsNC/0YDQsNGG0L7RntCy0LDRhtGMIE1NUy3Qv9Cw0LLQtdC00LDQvNC70LXQvdC9aS4g0JPRjdGC0LAg0LfQvdCw0YfRi9GG0YwsINGI0YLQviDQv9GA0YvQutC70LDQtNCw0L3QvdC1INC80L7QttCwINC60LDQvdGC0YDQsNC70Y/QstCw0YbRjCDQsNCx0L4g0LLRi9C00LDQu9GP0YbRjCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYsINCw0LTQv9GA0LDRntC70LXQvdGL0Y8g0L3QsCDQv9GA0YvQu9Cw0LTRgywg0L3QtSDQv9Cw0LrQsNC30LLQsNGO0YfRiyDRltGFINCy0LDQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4i0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDRjdC60YHRgtGA0LDQvdGL0Y8g0YLRgNCw0L3RgdC70Y/RhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iODQ4NTI0MDcwMjYyNDMxOTc0Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDRliDQsNC/0YDQsNGG0L7RntCy0LDRhtGMINGN0LrRgdGC0YDQsNC90YvRjyDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYuINCT0Y3RgtGLINC00LDQt9Cy0L7QuyDQtNCw0YHRgtGD0L/QvdGLINGC0L7Qu9GM0LrRliDQtNC70Y8g0YHRltGB0YLRjdC80L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjE1OTgzMjg4NDM2MTk2NDYxNjYiPiLRh9GL0YLQsNGG0Ywg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWINCx0LDQt9Cw0LLQsNC5INGB0YLQsNC90YbRi9GWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iNjM2MTk3Mjc3NjA4MDQ1ODk3OSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRh9GL0YLQsNGG0Ywg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWINCx0LDQt9Cw0LLQsNC5INGB0YLQsNC90YbRi9GWLCDQsNGC0YDRi9C80LDQvdGL0Y8g0L/RgNGL0LvQsNC00LDQuS4g0J/QsNC/0Y/RgNGN0LTQttCw0L3QvdGWINCx0LDQt9Cw0LLQsNC5INGB0YLQsNC90YbRi9GWINC00LDRgdGL0LvQsNGO0YbRhtCwINGeINC90LXQutCw0YLQvtGA0YvRjyDQvNC10YHRhtGLLCDQutCw0LEg0L/QsNC/0Y/RgNGN0LTQt9GW0YbRjCDQstCw0YEg0LDQsSDQvdCw0LTQt9Cy0YvRh9Cw0LnQvdGL0YUg0YHRltGC0YPQsNGG0YvRj9GFLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDRg9C/0LvRi9Cy0LDRhtGMINC90LAg0L/RgNCw0LTRg9C60YbRi9C50L3QsNGB0YbRjCDRhtGWINC/0YDQsNGG0YMg0L/RgNGL0LvQsNC00Ysg0L/RgNGLINCw0YLRgNGL0LzQsNC90L3RliDQv9Cw0LLQtdC00LDQvNC70LXQvdC90Y8g0LHQsNC30LDQstCw0Lkg0YHRgtCw0L3RhtGL0ZYg0LDQsSDQvdCw0LTQt9Cy0YvRh9Cw0LnQvdCw0Lkg0YHRltGC0YPQsNGG0YvRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRTbXMiIG1zZ2lkPSI1NjAwODMwNjEyMTQ3NjcxNTI5Ij4i0LDQtNC/0YDQsNGe0LvRj9GG0YwgU01TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90LUg0LTQu9GPINCw0LTQv9GA0LDRntC60ZYgU01TINC/0LDQstC10LTQsNC80LvQtdC90L3Rj9GeLiDQk9GN0YLQsCDQvNC+0LbQsCDQv9GA0YvQstC10YHRhtGWINC00LAg0L3QtdGH0LDQutCw0L3Ri9GFINCw0LHQstGW0L3QsNCy0LDRh9Cy0LDQvdC90Y/Rni4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNCw0LPRgNCw0LzRiyDQvNC+0LPRg9GG0Ywg0LrQsNGI0YLQsNCy0LDRhtGMINCy0LDQvCDQs9GA0L7RiNCw0Lkg0L3QsCDQsNC00L/RgNCw0Z7QutGDINC/0LDQstC10LTQsNC80LvQtdC90L3Rj9GeINCx0LXQtyDQstCw0YjQsNCz0LAg0L/QsNGG0LLRj9GA0LTQttGN0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9Ijg3MTM4ODkxMDUzMDU5NDMyMDAiPiLQsNC00L/RgNCw0LJp0YbRjCDQvNC10YDQsNC/0YDRi9C10LzRgdGC0LLQsCBcItCw0LTQutCw0Lcg0L/RgNCw0Lcg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdC1XCIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+ItCf0YDRi9C60LvQsNC00LDQvdC90LUg0LfQvNC+0LbQsCDQsNC00L/RgNCw0Z7Qu9GP0YbRjCDQt9Cw0L/Ri9GC0Ysg0Z4g0ZbQvdGI0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC00LvRjyDQsNC/0YDQsNGG0L7RntC60ZYg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGP0Z4g0L/RgNCwINC80LXRgNCw0L/RgNGL0LXQvNGB0YLQstGLINGC0YPRiyBcItGA0Y3QsNCz0LDQstCw0YbRjC3Qv9GA0LDQty3Qv9Cw0LLQtdC00LDQvNC70LXQvdC90LVcIiDQtNC70Y8g0Z7QstCw0YXQvtC00L3Ri9GFINCy0YvQutC70ZbQutCw0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+ItGH0YvRgtCw0L3QvdC1INGB0LLQsGnRhSDRgtGN0LrRgdGC0LDQstGL0YUg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGP0Z4gKFNNUyDRhtGWIE1NUykiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGH0YvRgtCw0YbRjCBTTVMt0L/QsNCy0LXQtNCw0LzQu9C10L3QvWksINGP0LrRltGPINC30LDRhdC+0Z7QstCw0Y7RhtGG0LAg0L3QsCDQv9C70LDQvdGI0Y3RhtC1INGG0ZYgU0lNLdC60LDRgNGG0LUuINCT0Y3RgtCwINC00LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGH0YvRgtCw0YbRjCDRntGB0LUgU01TLdC/0LDQstC10LTQsNC80LvQtdC90L3Rliwg0L3QtdC30LDQu9C10LbQvdCwINCw0LQg0LfQvNC10YHRhmnQstCwINCw0LHQviDQv9GA0YvQstCw0YLQvdCw0YHRhtGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjk1OTY3NTMzNDU3MjQwNTUwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGH0YvRgtCw0YbRjCBTTVMt0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWLCDRj9C60ZbRjyDQt9Cw0YXQvtGe0LLQsNGO0YbRhtCwINGeINGC0Y3Qu9C10YTQvtC90LUg0LDQsdC+INC90LAgU0lNLdC60LDRgNGG0LUuINCT0Y3RgtCwINC00LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGH0YvRgtCw0YbRjCDRntGB0LUgU01TLdC/0LDQstC10LTQsNC80LvQtdC90L3Rliwg0L3QtdC30LDQu9C10LbQvdCwINCw0LQg0LfQvNC10YHRhmnQstCwINCw0LHQviDQv9GA0YvQstCw0YLQvdCw0YHRhtGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTbXMiIG1zZ2lkPSIzMjE2OTUwNDcyNjM2MjE0Nzc0Ij4i0YDRjdC00LDQs9Cw0LLQsNC90L3QtSDRgtGN0LrRgdGC0LDQstGL0YUg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGP0Z4gKFNNUyDRhtGWIE1NUykiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTE2MDQxMzk0Nzc5NDUwMTUzOCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQt9Cw0L/RltGB0LLQsNGG0Ywg0LTQsNC00LfQtdC90YvRjyDRniBTTVMt0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWLCDRj9C60ZbRjyDQt9Cw0YXQvtGe0LLQsNGO0YbRhtCwINC90LAg0L/Qu9Cw0L3RiNGN0YbQtSDQsNCx0L4g0L3QsCBTSU0t0LrQsNGA0YbQtS4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0LLRi9C00LDQu9GP0YbRjCDQstCw0YjRiyDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQsNC/0ZbRgdCy0LDRhtGMINC00LDQtNC30LXQvdGL0Y8g0Z4gU01TLdC/0LDQstC10LTQsNC80LvQtdC90L3Rliwg0Y/QutGW0Y8g0LfQsNGF0L7RntCy0LDRjtGG0YbQsCDRniDRgtGN0LvQtdGE0L7QvdC1INCw0LHQviDQvdCwIFNJTS3QutCw0YDRhtC1LiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQstGL0LTQsNC70Y/RhtGMINCy0LDRiNGLINC/0LDQstC10LTQsNC80LvQtdC90L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+ItCw0YLRgNGL0LzQsNC90L3QtSDRgtGN0LrRgdGC0LDQstGL0YUg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGP0Z4gKFdBUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9Ijc0ODIzMjE5MDIyMDU4MzM4NSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0ZYg0LDQv9GA0LDRhtC+0Z7QstCw0YbRjCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYgV0FQLiDQlNC30Y/QutGD0Y7Rh9GLINCz0Y3RgtCw0LzRgyDQtNCw0LfQstC+0LvRgyDQvNC+0LbQvdCwINC60LDQvdGC0YDQsNC70Y/QstCw0YbRjCDQsNCx0L4g0LLRi9C00LDQu9GP0YbRjCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYsINC/0LDRgdC70LDQvdGL0Y8g0LLQsNC8LCDQvdC1INC/0LDQutCw0LfQstCw0Y7Rh9GLINGW0YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUYXNrcyIgbXNnaWQ9IjY0NjYwOTUzOTY2MjM5MzM5MDYiPiLQsNGC0YDRi9C80LDRhtGMINC30LDQv9GD0YjRh9Cw0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUYXNrcyIgbXNnaWQ9Ijc0NTQyMTU5OTU4NDc2NTgxMDIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDRgtGA0YvQvNC7adCy0LDRhtGMINC30LLQtdGB0YLQumkg0L/RgNCwINC/0YDRi9C60LvQsNC00LDQvdC9aSwg0LfQsNC/0YPRiNGH0LDQvdGL0Y8g0LfQsNGA0LDQtyBpINC90Y/QtNCw0Z7QvdCwLiDQn9GA0YvQutC70LDQtNCw0L3QvdC1INC80L7QttCwINC30L3QsNC50YHRhmkgadC90YTQsNGA0LzQsNGG0YvRjiDQv9GA0LAg0YLQvtC1LCDRj9C6adGPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRjtGG0YbQsCDQvdCwINC/0YDRi9C70LDQtNC30LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+ItGD0LfQsNC10LzQsNC00LfQtdGP0L3QvdC1INC/0LDQvNGW0LYg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LDQvNGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJhY3RBY3Jvc3NVc2VycyIgbXNnaWQ9IjM2NDY3MDk2MzYyMzM4NTc4NiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQstGL0LrQvtC90LLQsNGG0Ywg0LTQt9C10Y/QvdC9aSDRgdGP0YDQvtC0INGA0L7Qt9C90YvRhSDQutCw0YDRi9GB0YLQsNC70YzQvWnQutCw0Z4g0L/RgNGL0LvQsNC00YsuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINC/0LDRgNGD0YjRi9GG0Ywg0LDQsdCw0YDQvtC90YMg0L/QsNC8adC2INC60LDRgNGL0YHRgtCw0LvRjNC9adC60LDQvGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjI1Njc3MzQyODU1NDUwNzQxMDUiPiLQv9C+0Z7QvdCw0Y8g0LvRltGG0Y3QvdC30ZbRjyDQtNC70Y8g0Z7Qt9Cw0LXQvNCw0LTQt9C10Y/QvdC90Y8g0L/QsNC80ZbQtiDQutCw0YDRi9GB0YLQsNC70YzQvWnQutCw0LxpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJhY3RBY3Jvc3NVc2Vyc0Z1bGwiIG1zZ2lkPSIzNzY4NDEzNjgzOTU1MDIzNjYiPiLQlNCw0LfQstCw0LvRj9C1INGe0YHQtSDQvNCw0LPRh9GL0LzRi9GPINGe0LfQsNC10LzQsNC00LfQtdGP0L3QvWkg0L/QsNC80ZbQtiDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsNC80ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2VycyIgbXNnaWQ9IjE2NzYxNTA5MTE2NzIyODI0MjgiPiLQutGW0YDQsNCy0LDQvdC90LUg0LTQsNC00LfQtdC90YvQvGkg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LDRniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC60ZbRgNCw0LLQsNGG0Ywg0LfQstC10YHRgtC60LDQvGkg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LDRniDQvdCwINC/0YDRi9C70LDQtNC30LUsINGDINGC0YvQvCDQu9GW0LrRgyDQt9Cw0L/Ri9GC0LDQvGksINC/0YDQsNGG0Y3RgdCw0LxpINGB0YLQstCw0YDRjdC90L3RjyDRliDQstGL0LTQsNC70LXQvdC90Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXREZXRhaWxlZFRhc2tzIiBtc2dpZD0iNjIyOTQ2ODY3NDc1MzUyOTUwMSI+ItCw0YLRgNGL0LzQsNGG0Ywg0L/QsNC00YDQsNCx0Y/Qt9C90YvRjyDQtNCw0LTQt9C10L3Ri9GPINC/0YDQsCDQt9Cw0L/Rg9GI0YfQsNC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXREZXRhaWxlZFRhc2tzIiBtc2dpZD0iMTUzODI0NzQxNDQwNzE3NTk5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0L/QsNC00YDQsNCx0Y/Qt9C90YPRjiDRltC90YTQsNGA0LzQsNGG0YvRjiDQv9GA0LAg0LHRj9Cz0YPRh9GL0Y8g0ZYg0L3Rj9C00LDRntC90LAg0LfQsNC/0YPRiNGH0LDQvdGL0Y8g0LfQsNC00LDRh9GLLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQsNGC0YDRi9C80LvRltCy0LDRhtGMINCw0YHQsNCx0ZbRgdGC0YPRjiDRltC90YTQsNGA0LzQsNGG0YvRjiDQv9GA0LAg0ZbQvdGI0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4i0LfQvNGP0L3RltGG0Ywg0L/QsNGA0LDQtNCw0Log0LfQsNC/0YPRiNGH0LDQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVvcmRlclRhc2tzIiBtc2dpZD0iNzczNDIxNzc1NDg3NzQzOTM1MSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQv9C10YDQsNC80Y/RiNGH0LDRhtGMINC30LDQtNCw0L3QvdGWINC90LAg4oCL4oCL0L/Rj9GA0Y3QtNC90ZYg0L/Qu9Cw0L0g0ZYg0Z4g0YTQvtC9LiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQv9GA0YvQvNGD0YHQvtCy0LAg0YDQsNCx0ZbRhtGMINGB0Y/QsdC1INCw0YHQvdC+0Z7QvdGL0LzRliDQsdC10Lcg0LLQsNGI0LDQs9CwINCy0LXQtNCw0LzQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZVRhc2tzIiBtc2dpZD0iNjgyMTUxMzQwMTg3MDM3NzQwMyI+ItGB0L/Ri9C90ZbRhtGMINC30LDQv9GD0YjRh9Cw0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW1vdmVUYXNrcyIgbXNnaWQ9IjEzOTQ3MTQzNTIwNjI2MzU0OTMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQstGL0LTQsNC70Y/RhtGMINC30LDQtNCw0L3QvdGWINGWINGB0L/Ri9C90Y/RhtGMINC/0YDRi9C60LvQsNC00LDQvdC90ZYsINGP0LrRltGPINGW0YUg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0Y7RhtGMLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LzQvtCz0YPRhtGMINC/0LXRgNCw0YjQutC+0LTQt2nRhtGMINC/0YDQsNGG0Ysg0ZbQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfbWFuYWdlQWN0aXZpdHlTdGFja3MgKDczOTExOTEzODQwMjczMDMwNjUpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfbWFuYWdlQWN0aXZpdHlTdGFja3MgKDE2MTU4ODE5MzMwMzQwODQ0NDApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSIyOTE4NzY4MjM4MDQ1MjA2NDU2Ij4i0L/QsNGH0YvQvdCw0YbRjCDQu9GO0LHRiyDQv9GA0LDRhtGN0YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iOTk3ODIzNjk1MzQzNTg0MDAxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC/0LDRh9GL0L3QsNGG0Ywg0LvRjtCx0Ysg0L/RgNCw0YbRjdGBLCDQvdC10LfQsNC70LXQttC90LAg0LDQtCDQsNCx0LDRgNC+0L3RiyDQtNCw0LfQstC+0LvQsNC8INGG0ZYg0YHRgtCw0L3RgyDRjdC60YHQv9Cw0YDRgtGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiLRg9GB0YLQsNC70Y/QstCw0YbRjCDRgdGD0LzRj9GI0YfQsNC70YzQvdCw0YHRhtGMINGN0LrRgNCw0L3QsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5MjA0MzYxODY5MzkxNzM3NCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQutGW0YDQsNCy0LDRhtGMINGA0Y3QttGL0LzQsNC8INGB0YPQvNGP0YjRh9Cw0LvRjNC90LDRgdGG0ZYg0Y3QutGA0LDQvdCw0Z4g0ZbQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uINCo0LrQvtC00L3QsNGB0L3QsNC1INCf0Jcg0LzQvtC20LAg0L/QtdGA0LDRiNC60L7QtNC3adGG0Ywg0L/RgNCw0YbRiyDRltC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldERlYnVnQXBwIiBtc2dpZD0iMzAyMjEwNzE5ODY4NjU4NDA1MiI+ItGD0LrQu9GO0YfRi9GG0Ywg0LDQtNC70LDQtNC60YMg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldERlYnVnQXBwIiBtc2dpZD0iNDQ3NDUxMjQxNjI5OTAxMzI1NiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGD0LrQu9GO0YfQsNGG0Ywg0LDQtNC70LDQtNC60YMg0LTQu9GPINGW0L3RiNCw0LPQsCDQv9GA0YvQutC70LDQtNCw0L3QvdGPLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwLCDQutCw0LEg0YHQv9GL0L3Rj9GG0Ywg0ZbQvdGI0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQxNjIwOTIxODUxMjQyMzQ0ODAiPiLQt9C80LXQvdCwINC90LDQu9Cw0LQg0LDQtNC70Y7RgdGC0YDQsNCy0LDQvdC90Y8g0Z4g0YHRltGB0YLRjdC80LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb25maWd1cmF0aW9uIiBtc2dpZD0iNDM3MjIyMzg3MzE1NDI5NjA3NiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINCx0Y/Qs9GD0YfRg9GOINC60LDQvdGE0ZbQs9GD0YDQsNGG0YvRjiwg0L3QsNC/0YDRi9C60LvQsNC0INC80L7QstGDINGGaSDQsNCz0YPQu9GM0L3RiyDQv9Cw0LzQtdGAINGI0YDRi9GE0YLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI1Njg0NTA0MDU4MTkyOTIxMDk4Ij4i0LTQsNC30LLQsNC70Y/RhtGMINGA0Y3QttGL0LwgXCLQoyDQsNGe0YLQsNC80LDQsdGW0LvRllwiIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0Z7QutC70Y7Rh9Cw0YbRjCDRgNGN0LbRi9C8INCz0YPRh9C90LDQuSDRgdGD0LLRj9C3aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+ItC30LDQutGA0YvRhtGG0ZEg0ZbQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjQ1OTMzNTMyMzU5NTk3MzMxMTkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LfQsNCy0Y/RgNGI0LDRhtGMINGE0L7QvdCw0LLRi9GPINC/0YDQsNGG0Y3RgdGLINGW0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiDQk9GN0YLQsCDQvNC+0LbQsCDRgdC/0YvQvWnRhtGMINC/0YDQsNGG0YMgadC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+ItC/0YDRi9C80YPRgdC+0LLQsCDRgdC/0YvQvdGW0YbRjCDRltC90YjRi9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjUyNTMxNTcyOTYxODM5NDA4MTIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9GA0YvQvNGD0YHQvtCy0LAg0YHQv9GL0L3Rj9GG0Ywg0ZbQvdGI0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VCYWNrIiBtc2dpZD0iNjUyOTM1MjA0MDcyNTg0NjE2Ij4i0L/RgNGL0LzRg9GB0L7QstCwINC30LDQutGA0YvRhtGMINC/0YDRi9C60LvQsNC00LDQvdC90LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZUJhY2siIG1zZ2lkPSIzODkyMjk1ODMwNDE5NTEzNjIzIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0L/RgNGL0LzRg9GB0L7QstCwINC30LDQutGA0YvQstCw0YbRjCDQu9GO0LHRiyDQsNGB0L3QvtGe0L3RiyDQv9GA0LDRhtGN0YEuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2R1bXAiIG1zZ2lkPSIxNjgxNzk5ODYyNDM4OTU0NzUyIj4i0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDRg9C90YPRgtGA0LDQvdGLINGB0YLQsNC9INGB0ZbRgdGC0Y3QvNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZHVtcCIgbXNnaWQ9IjE3NzgyOTkwODg2OTIyOTAzMjkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNGC0YDRi9C80LvRltCy0LDRhtGMINGW0L3RhNCw0YDQvNCw0YbRi9GOINCw0LEg0YPQvdGD0YLRgNCw0L3Ri9C8INGB0YLQsNC90LUg0YHRltGB0YLRjdC80YsuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0YjRi9GA0L7QutGWINGB0L/QtdC60YLRgCDQv9GA0YvQstCw0YLQvdGL0YUg0LTQsNC00LfQtdC90YvRhSDRliDQtNCw0LTQt9C10L3Ri9GFLCDQv9GA0YvQt9C90LDRh9Cw0L3Ri9GFINC00LvRjyDQt9Cw0LHQtdGB0L/Rj9GH0Y3QvdC90Y8g0LHRj9GB0L/QtdC60ZYg0ZbQvdGE0LDRgNC80LDRhtGL0ZYsINGP0LrRltGPINC30LLRi9GH0LDQudC90LAg0ZbQvCDQvdC1INC/0LDRgtGA0Y3QsdC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjgwMjI1ODg2MDg5OTQ1ODk5MzgiPiLQsNGC0YDRi9C80LDQvdC90LUg0LfQvNC10YHRgtGDINGN0LrRgNCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iMzE5MzI2OTA2OTQ2OTcwMDI2NSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0LfQvNC10YHRhtGW0LLQsCDQsNC60YLRi9Ge0L3QsNCz0LAg0LDQutC90LAuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0YPRgdGRINC30LzQtdGB0YbRltCy0LAg0LDQutC90LAg0ZYg0YDQsNC30LPQu9GP0LTQsNGG0Ywg0YPQstC10YHRjCDRj9Cz0L4g0YLRjdC60YHRgiwg0LDQutGA0LDQvNGPINC/0LDRgNC+0LvRj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMjMxMjYxMjEzNTEyNzMxMDI1NCI+ItGH0LDRgdC+0LLQsCDRntC60LvRjtGH0YvRhtGMINC00LDRgdGC0YPQv9C90LDRgdGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGH0LDRgdC+0LLQsCDRntC60LvRjtGH0LDRhtGMINC00LDRgdGC0YPQv9C90LDRgdGG0Ywg0L/RgNGL0LvQsNC00YsuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0YPQutC70Y7Rh9GL0YbRjCDQtNCw0YHRgtGD0L/QvdCw0YHRhtGMINCx0LXQtyDQt9Cz0L7QtNGLINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI4NTMyMjk1MTk5MTEyNTE5Mzc4Ij4i0LDRgtGA0YvQvNCw0YbRjCDQt9Cy0LXRgdGC0LppINC/0YDQsCDQsNC60L3QviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iNDk5ODgzNjM3MDQyNDE4Njg0OSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCy0YvQvNCw0YbRjCBp0L3RhNCw0YDQvNCw0YbRi9GOINC/0YDQsCDQstC+0LrQvdGLINC3IGnQvdGB0YLRgNGD0LzQtdC90YLQsCDQumnRgNCw0LLQsNC90L3RjyDQstC+0LrQvdCw0LxpLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LzQvtCz0YPRhtGMINCy0YvQvNCw0YbRjCBp0L3RhNCw0YDQvNCw0YbRi9GOLCDRj9C60LDRjyDQv9GA0YvQt9C90LDRh9Cw0L3QsCDQtNC70Y8g0Z7QvdGD0YLRgNCw0L3QsNCz0LAg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINGeINGBadGB0YLRjdC80LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODY3NTUzNTY0ODgwNzQyNzM4OSI+ItGE0ZbQu9GM0YLRgCDQv9Cw0LTQt9C10LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODAwNjIzNjMxNTg4ODM0NzY4MCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRgNGN0LNp0YHRgtGA0LDQstCw0YbRjCDRhGnQu9GM0YLRgCDRg9Cy0L7QtNGDLCDRj9C6aSDQv9C10YDQsNC00LDQtSDQv9Cw0YLQvtC6INGD0YFp0YUg0LTQt9C10Y/QvdC90Y/RniDQutCw0YDRi9GB0YLQsNC70YzQvWnQutCwLCDQv9C10YDRiCDRh9GL0Lwg0LHRg9C00YPRhtGMINCw0LTQv9GA0LDRntC70LXQvdGL0Y8g0LfQstC10YHRgtC6aSDQv9GA0LAgadGFLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LzQvtCz0YPRhtGMINC60LDQvdGC0YDQsNC70Y/QstCw0YbRjCBp0L3RgtGN0YDRhNC10LnRgSDQsdC10Lcg0YPQvNGP0YjQsNC70YzQvWnRhtGC0LLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjU5NzM2MjY3MzgxNzA2MTg3NzUiPiLQv9Cw0LLRj9C70ZbRh9GL0YbRjCDQsNC00LvRjtGB0YLRgNCw0LLQsNC90L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjcxMjEyMzU2ODQ1MTUwMDM3OTIiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1INC30LzQvtC20LAg0L/QsNCy0Y/Qu9GW0YfRi9GG0Ywg0Z7RgtGA0YvQvNCw0L3QvdC1INC00YvRgdC/0LvQtdGPLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0LDQs9GA0LDQvNGLINC80L7Qs9GD0YbRjCDQv9C10YDQsNGe0YLQstCw0YDRi9GG0Ywg0LfQvNC10YHRhtGW0LLQsCDQtNGL0YHQv9C70LXRjyDRgtCw0LrRltC8INGH0YvQvdCw0LwsINGI0YLQviDRj9C90L4g0LfRgNC+0LHRltGG0Ywg0L/RgNGL0LvQsNC00YMg0L3QtdC/0YDRi9C00LDRgtC90LDQuSDQtNC70Y8g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2h1dGRvd24iIG1zZ2lkPSI3MTg1NzQ3ODI0MDM4OTA5MDE2Ij4i0YfQsNGB0YLQutC+0LLQsNC1INCw0LTQutC70Y7Rh9GN0L3QvdC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2h1dGRvd24iIG1zZ2lkPSI3MDQ2NTAwODM4NzQ2MjkxNzc1Ij4i0KHQv9GL0L3Rj9C1INC00LfQtdC50L3QsNGB0YbRjCDQvNC10L3QtdC00LbRjdGA0LAuINCd0LUg0LLRi9C60L7QvdCy0LDQtSDQv9C+0Z7QvdCw0LUg0LDQtNC60LvRjtGH0Y3QvdC90LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI0MTM4NjA4NjEwNzE3NDI1NTczIj4i0L/RgNCw0LTRg9GF0ZbQu9GP0YbRjCDQv9C10YDQsNC60LvRjtGH0Y3QvdC90LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iODI2MjE5NTgwMjU4MjI1NTAyMSI+ItCd0LUg0LTQsNC30LLQsNC70Y/QtSDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrRgyDQv9C10YDQsNGF0L7QtNC30ZbRhtGMINC00LAg0ZbQvdGI0LDQs9CwINC/0YDRi9C60LvQsNC00LDQvdC90Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSIyNTM3OTIyMzExNDExNTQ2MDE2Ij4i0LDRgtGA0YvQvNCw0YbRjCDQsdGP0LPRg9GH0YPRjiDRltC90YTQsNGA0LzQsNGG0YvRjiDQv9GA0YvQutC70LDQtNCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUxMjQ0ODg1NTQ5NjA2NzEzMSI+ItCU0LDQt9Cy0LDQu9GP0LUg0Z7Qu9Cw0LTQsNC70YzQvdGW0LrRgyDQsNGC0YDRi9C80Ltp0LLQsNGG0Ywg0LDRgdCw0LHRltGB0YLRg9GOINGW0L3RhNCw0YDQvNCw0YbRi9GOINCw0LEg0LHRj9Cz0YPRh9GL0Lwg0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC90LAg0L/Rj9GA0Y3QtNC90ZbQvCDQv9C70LDQvdC1INGN0LrRgNCw0L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9Ijg5MjIzOTA5NDg2NzE4MjY1NiI+ItCw0LTRgdC+0YfQstCw0YbRjCDRliDQutCw0L3RgtGA0LDQu9GP0LLQsNGG0Ywg0LfQsNC/0YPRgdC6INGD0YHRltGFINC/0YDRi9C60LvQsNC00LDQvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YHQsNGH0YvRhtGMINGWINC60LDQvdGC0YDQsNC70Y/QstCw0YbRjCwg0Y/QuiDRgdGW0YHRgtGN0LzQsCDQt9Cw0L/Rg9GB0LrQsNC1INC/0YDQsNGG0Y3RgdGLLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDRhtCw0LvQutCw0Lwg0L/QsNGA0YPRiNGL0YbRjCDQv9GA0LDRhtGDINGB0ZbRgdGC0Y3QvNGLLiDQk9GN0YLRiyDQtNCw0LfQstC+0Lsg0L/QsNGC0YDRjdCx0L3RiyDRgtC+0LvRjNC60ZYg0LTQu9GPINGA0LDRgdC/0YDQsNGG0L7RntC60ZYsINC90ZbQutC+0LvRliDQtNC70Y8g0LfQstGL0YfQsNC50L3QsNCz0LAg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSIyNTc2MzMzNDM0ODkzNTMyNDc1Ij4i0YLRgNCw0L3RgdC70Y/QstCw0YbRjCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYg0LDQsSDQstGL0LTQsNC70LXQvdC90ZYg0L/QsNC60LXRgtCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjY2MjE5MDEyMTYyMDc5MzEwODkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9C10YDQsNC00LDQstCw0YbRjCDQsNC/0LDQstGP0YjRh9GN0L3QvdC1LCDRiNGC0L4g0L/QsNC60LXRgiDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4g0LHRi9GeINCy0YvQtNCw0LvQtdC90YsuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LPRjdGC0LAsINC60LDQsSDRgdC/0YvQvdGP0YbRjCDQu9GO0LHRi9GPINGW0L3RiNGL0Y8g0LfQsNC/0YPRiNGH0LDQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNTY4OTA5NTAwOTAzMDMzNjU5MyI+ItC/0LXRgNCw0YHRi9C70LDRhtGMINGC0YDQsNC90YHQu9GP0YbRi9GWLCDQsNGC0YDRi9C80LDQvdGL0Y8g0L/QsCBTTVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9C10YDQsNC00LDQstCw0YbRjCDQsNC/0LDQstGP0YjRh9GN0L3QvdC1INC/0YDQsCDQsNGC0YDRi9C80LDQvdC90LUgU01TLdC/0LDQstC10LTQsNC80LvQtdC90L3Rjy4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINC/0LDQtNGA0LDQsdC70Y/RhtGMINGD0LLQsNGF0L7QtNC90YvRjyBTTVMt0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjMxNDUzNDc0MTMwMjg1ODIzNzEiPiLQv9Cw0YHRi9C70LDRhtGMINGB0ZbQs9C90LDQuyBXQVAtUFVTSC1yZWNlaXZlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0L/QtdGA0LDQtNCw0LLQsNGG0Ywg0LDQv9Cw0LLRj9GI0YfRjdC90L3QtSwg0YjRgtC+INC/0LDQstC10LTQsNC80LvQtdC90L3QtSBXQVAgUFVTSCDQvdC1INCx0YvQu9C+INCw0YLRgNGL0LzQsNC90LAuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LPRjdGC0LAsINC60LDQsSDQv9Cw0LTRgNCw0LHQu9GP0YbRjCDQsNGC0YDRi9C80LDQvdC90LUgTU1TLdC/0LDQstC10LTQsNC80LvQtdC90L3RjyDQsNCx0L4g0L3QtdC/0YDRi9C60LzQtdGC0L3QsCDQt9Cw0LzRj9C90Y/RhtGMINC30LzQtdGB0YbRltCy0LAg0LvRjtCx0L7QuSDQstGN0LEt0YHRgtCw0YDQvtC90LrRliDQvdCwINGI0LrQvtC00L3QsNGB0L3Rg9GOINCy0LXRgNGBadGOLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iMjQ1MTg3MzY2NDM2MzY2MjY2NiI+ItCw0LHQvNGP0LbQvtGe0LLQsNGG0Ywg0LrQvtC70YzQutCw0YHRhtGMINC30LDQv9GD0YjRh9Cw0L3Ri9GFINC/0YDQsNGG0Y3RgdCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LrQsNC90YLRgNCw0LvRj9Cy0LDRhtGMINC80LDQutGB0ZbQvNCw0LvRjNC90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0LfQsNC/0YPRiNGH0LDQvdGL0YUg0L/RgNCw0YbRjdGB0LDRni4g0J3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNTUwOTU4NTA3Nzk4Nzk2OTY1Ij4i0L/RgNGL0LzRg9GB0L7QstCw0LUg0LfQsNC60YDRi9GG0YbRkSDRhNC+0L3QsNCy0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI3NDcxMzEwNjUyODY4ODQxNDk5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LrQsNC90YLRgNCw0LvRj9Cy0LDRhtGMLCDRhtGWINCx0YPQtNGD0YbRjCDQv9GA0LDRhtGN0YHRiyDQt9Cw0Z7RgdGR0LTRiyDQt9Cw0LLRj9GA0YjQsNGG0YbQsCwg0Y/QuiDRgtC+0LvRjNC60ZYg0Y/QvdGLINC/0LXRgNCw0YXQvtC00LfRj9GG0Ywg0YMg0YTQvtC90LDQstGLINGA0Y3QttGL0LwuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiLRh9GL0YLQsNGG0Ywg0YHRgtCw0YLRi9GB0YLRi9C60YMg0LHQsNGC0LDRgNGN0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI1ODk3MzQ2NTgyODgyOTE1MTE0Ij4i0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQvNC+0LbQsCDRgdGH0YvRgtCy0LDRhtGMINCx0Y/Qs9GD0YfRi9GPINC30LLQtdGB0YLQumkg0L/RgNGLINC9adC30LppINC30LDRgNCw0LQg0LDQutGD0LzRg9C70Y/RgtCw0YDQsC4g0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQvNC+0LbQsCDQt9C90LDQudGB0YZpINC/0LDQtNGA0LDQsdGP0LfQvdGD0Y4gadC90YTQsNGA0LzQsNGG0YsuINC/0YDQsCDQv9GA0YvQutC70LDQtNCw0L3QvWksINGP0Lpp0Y8g0LLRiyDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDQtdGG0LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIzNzE5Njg5NzY0NTM2Mzc5NTU3Ij4i0LfQvNGP0L3Rj9GG0Ywg0YHRgtCw0YLRi9GB0YLRi9C60YMg0LHQsNGC0LDRgNGN0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0YHQsNCx0YDQsNC90YPRjiDRgdGC0LDRgtGL0YHRgtGL0LrRgyDQsdCw0YLQsNGA0Y1pLiDQndC1INC/0LDRgtGA0LDQsdGD0LXRhtGG0LAg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjE1MDg3Nzk2ODc0MzY1ODU3NDQiPiLQsNGC0YDRi9C80Ltp0LLQsNGG0Ywg0YHRgtCw0YLRi9GB0YLRi9C60YMg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC/0YDRi9C60LvQsNC00LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjYyNDM4ODcwNDE1Nzc5MTI4NzciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDRgtGA0YvQvNC7adCy0LDRhtGMINGB0LDQsdGA0LDQvdGD0Y4g0YHRgtCw0YLRi9GB0YLRi9C60YMg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC/0YDRi9C60LvQsNC00LDQvdC90Y8uINCd0LUg0LTQu9GPINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQt9Cy0YvRh9Cw0LnQvdGL0LzRliDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUFwcE9wc1N0YXRzIiBtc2dpZD0iODgyOTA5NzM3Mzg1MTUyMTUwNSI+ItC30LzRj9C90Y/RhtGMINGB0YLQsNGC0YvRgdGC0YvQutGDINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQv9GA0YvQutC70LDQtNCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI1MDc4NDU5NjU5NDQwMzQ4MyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQt9C80Y/QvdGP0YbRjCDRgdCw0LHRgNCw0L3Rg9GOINGB0YLQsNGC0YvRgdGC0YvQutGDINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQv9GA0YvQutC70LDQtNCw0L3QvdGPLiDQndC1INC00LvRjyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0LfQstGL0YfQsNC50L3Ri9C80ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C80ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYWNrdXAiIG1zZ2lkPSI0NzAwMTMwMjI4NjU0NTM5MjAiPiLQutCw0L3RgtGA0LDQu9GP0LLQsNGG0Ywg0YDRjdC30LXRgNCy0L7QstCw0LUg0LrQsNC/0ZbRj9Cy0LDQvdC90LUg0ZYg0LDQtNC90LDRntC70LXQvdC90LUg0YHRltGB0YLRjdC80YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYWNrdXAiIG1zZ2lkPSI2OTEyMjMwNTI1MTQwNTg5ODkxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LrQsNC90YLRgNCw0LvRj9Cy0LDRhtGMINGA0Y3Qt9C10YDQstC+0LLQsNC1INC60LDQv9GW0Y/QstCw0L3QvdC1INGB0ZbRgdGC0Y3QvNGLINGWINC80LXRhdCw0L3RltC30Lwg0LDQtNC90LDRntC70LXQvdC90Y8uINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSI1NTU3MDcxMzI1ODA0NDY5MTAyIj4i0L/QsNGG0LLQtdGA0LTQttCw0L3QvdC1INC/0L7RntC90LDQs9CwINGA0Y3Qt9C10YDQstC+0LLQsNCz0LAg0LrQsNC/0ZbRj9Cy0LDQvdC90Y8g0LDQsdC+INCw0LTQvdCw0Z7Qu9C10L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjE3NDg3NjIxNzE2Mzc2OTk1NjIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9Cw0L/Rg9GB0LrQsNGG0Ywg0L/QvtGe0L3RiyDRltC90YLRjdGA0YTQtdC50YEg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAg0L/QsNGG0LLRj9GA0LTQttGN0L3QvdGPINGA0Y3Qt9C10YDQstCw0LLQsNC90L3Rjy4g0J3QtSDQtNC70Y8g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC30LLRi9GH0LDQudC90YvQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSIyMTQ4NTYzNjI4MTQwMTkzMjMxIj4i0L/QsNC60LDQt9Cy0LDRhtGMINC90LXRgdCw0L3QutGG0YvRj9C90LDQstCw0L3Ri9GPINCy0L7QutC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9Ijc0NTgzODc3NTk0NjE0NjYzOTciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgdGC0LLQsNGA0LDRhtGMINCy0L7QutC90YssINC/0YDRi9C30L3QsNGH0LDQvdGL0Y8g0LTQu9GPINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDRntC90YPRgtGA0LDQvdGL0Lwg0ZbQvdGC0Y3RgNGE0LXQudGB0LDQvCDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCDRgdGW0YHRgtGN0LzRiy4g0J3QtSDQtNC70Y8g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC30LLRi9GH0LDQudC90YvQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4i0L/RgNGL0LDRgNGL0YLRjdGCINC/0LXRgNCw0LQg0ZbQvdGI0YvQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSI4NTg0Njc4MzgxOTcyODIwMTE4Ij4i0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQvNC+0LbQsCDQt1wn0Y/RntC70Y/RhtGG0LAg0L/QsNCy0LXRgNGFIGnQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uINCv0L3RiyDQvNC+0LPRg9GG0Ywg0YjQutC+0LTQt2nRhtGMINCw0LTQvdC+INCw0LTQvdCw0LzRgyDQv9Cw0LTRh9Cw0YEg0L/RgNCw0YbRiyBp0L3RgtGN0YDRhNC10LnRgdCw0Z4g0LDQsdC+INC30LzRj9C90Y/RhtGMINGC0L7QtSwg0YjRgtC+INCy0Ysg0LHQsNGH0YvRhtC1INGeIGnQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiLQt9C80LXQvdGP0YbRjCDQsNCz0YPQu9GM0L3Rg9GOINGF0YPRgtC60LDRgdGG0Ywg0LDQvdGW0LzQsNGG0YvRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iNzY5MDA2MzQyODkyNDM0MzU3MSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGDINC70Y7QsdGLINGH0LDRgSDQt9C80Y/QvdGP0YbRjCDQsNCz0YPQu9GM0L3Rg9GOINGF0YPRgtC60LDRgdGG0Ywg0LDQvdGW0LzQsNGG0YvRliAo0YXRg9GC0YfRjdC5INGG0ZYg0L/QsNCy0L7Qu9GM0L3QtdC5KS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjEyODY1MDU3MTcwNTAxMjEzNzAiPiLQutGW0YDQsNCy0LDRhtGMINC60LvRjtGH0LDQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSI4MDQzNDMxNzEzMDE0Mzk1NjcxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YHRgtCy0LDRgNCw0YbRjCAg0YHQstCw0ZbQvNGWINGe0LvQsNGB0L3Ri9C80ZYg0LrQu9GO0YfQsNC80ZYsINCw0LHRi9GF0L7QtNC30Y/Rh9GLINGW0YUg0LfQstGL0YfQsNC50L3RiyBaLdC/0LDRgNCw0LTQsNC6LiDQndC1INC/0LDRgtGA0LDQsdGD0LXRhtGG0LAg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mcmVlemVTY3JlZW4iIG1zZ2lkPSI0NzA4MTgxMTg0NDQxODgwMTc1Ij4i0LfQsNC80LDRgNC+0LfRltGG0Ywg0Y3QutGA0LDQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9Ijg1NTg5MjM3ODkyMjI2NzAwNjQiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1INC30LzQvtC20LAg0YfQsNGB0L7QstCwINC30LDQvNCw0YDQvtC30ZbRhtGMINGN0LrRgNCw0L0g0LTQu9GPINC/0LXRgNCw0YXQvtC00YMg0Z4g0L/QvtGe0L3QsNGN0LrRgNCw0L3QvdGLINGA0Y3QttGL0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbmplY3RFdmVudHMiIG1zZ2lkPSIxMzc4NzQ2NTg0MDIzNTg2NjAwIj4i0L3QsNGG0ZbRgdC60LDRhtGMINC60LvQsNCy0ZbRiNGLINGWINC60L3QvtC/0LrRliDQutGW0YDQsNCy0LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNjM1MjU2NTU5OTk2ODYzMiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCw0LbRi9GG0YbRj9Ge0LvRj9GG0Ywg0YHQstCw0LUg0Z7Qu9Cw0YHQvdGL0Y8g0L/QsNC00LfQtdGWINGe0LLQvtC00YMgKNC90LDRhtGW0YHQutGDINC60LvQsNCy0ZbRiCDRliDQsy7QtC4pINC00LvRjyDRltC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINC30LDRhdCw0L/RltGG0Ywg0LrRltGA0LDQstCw0L3QvdC1INC/0LvQsNC90YjRjdGC0LDQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTMxMjgwNTc1NzIzMjYyNTMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDQttGL0YbRhtGP0Z7Qu9GP0YbRjCDRgdCy0LDQtSDRntC70LDRgdC90YvRjyDQv9Cw0LTQt9C10ZYg0Z7QstC+0LTRgyAo0L3QsNGG0ZbRgdC60YMg0LrQu9Cw0LLRltGIINGWINCzLsKg0LQuKSDQtNC70Y8g0ZbQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LPRjdGC0LAsINC60LDQsSDQt9Cw0YXQsNC/0ZbRhtGMINC60ZbRgNCw0LLQsNC90L3QtSDRgtGN0LvQtdGE0L7QvdCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjQ2OTQyODkwMDA0MTI0OTIzNCI+ItC30LDQv9GW0YHQstCw0YbRjCwg0YjRgtC+INCy0Ysg0LTRgNGD0LrRg9C10YbQtSwg0ZYg0LTQt9C10Y/QvdC90ZYsINGP0LrRltGPINCy0Ysg0L/RgNCw0LTQv9GA0YvQvNCw0LXRhtC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI4Mzg3NzU0OTAxNjg4NzI4MDQzIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDQtNGB0L7Rh9Cy0LDRhtGMINC60LvQsNCy0ZbRiNGLLCDRj9C60ZbRjyDQstGLINC90LDRhtGW0YHQutCw0LXRhtC1LCDQvdCw0LLQsNGCINC/0LDQtNGH0LDRgSDRg9C30LDQtdC80LDQtNC30LXRj9C90L3RjyDQtyDRltC90YjRi9C8INC/0YDRi9C60LvQsNC00LDQvdC90LXQvCAo0L3QsNC/0YDRi9C60LvQsNC0LCDQv9GA0Ysg0Z7QstC+0LTQt9C1INC/0LDRgNC+0LvRjykuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMzNjAwNjQ2MjAyMzA1MTU3NzYiPiLQt9Cy0Y/Qt9Cw0YbRhtCwINC3INC80LXRgtCw0LTQsNC8INGD0LLQvtC00YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMjUwNDQwMzIyODA3Mjg2MzMxIj4i0JTQsNC30LLQsNC70Y/QtSDRntC70LDQtNCw0LvRjNC90ZbQutGDINC/0YDRi9Cy0Y/Qt9Cy0LDRhtGG0LAg0LTQsCDRltC90YLRjdGA0YTQtdC50YHRgyDQstC10YDRhdC90Y/Qs9CwINGe0LfRgNC+0Z7QvdGOINC80LXRgtCw0LTQsCDRntCy0L7QtNGDLiDQndC1INC/0LDRgtGA0LDQsdGD0LXRhtGG0LAg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI1MzU3NzMzOTQyNTU2MDMxNTkzIj4i0L/RgNGL0LLRj9C30LDRhtGG0LAg0LTQsCDRgdC70YPQttCx0Ysg0LTQvtGB0YLRg9C/0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI3MDM0NjE1OTI4NjA5MzMxMzY4Ij4i0JTQsNC30LLQsNC70Y/QtSDRntC70LDQtNCw0LvRjNC90ZbQutGDINC/0YDRi9Cy0Y/Qt9Cy0LDRhtGG0LAg0LTQsCDRltC90YLRjdGA0YTQtdC50YHRgyDQstC10YDRhdC90Y/Qs9CwINGe0LfRgNC+0Z7QvdGOINGB0LvRg9C20LHRiyDQtNC+0YHRgtGD0L/Rgy4g0J3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2JpbmRQcmludFNlcnZpY2UgKDg0NjI4MTUxNzk1NzI3NDg3NjEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfYmluZFByaW50U2VydmljZSAoNzk2MDA2NzYyMzIwOTExMTEzNSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlICg2ODA3NzYyNzgzNzQ0MTI1OTU0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlICgzNjgwNTUyMjg1OTMzMzE4MzcyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfYmluZE5mY1NlcnZpY2UgKDI3NTI3MzEzMDA0MTk0MTA3MjQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfYmluZE5mY1NlcnZpY2UgKDYxMjA2NDc2MjkxNzQwNjY4NjIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjczNTgzNzg0MDE5MTUyODc5MzgiPiLQt9Cy0Y/Qt9Cw0YbRjCDQtyDRgtGN0LrRgdGC0LDQstCw0Lkg0YHQu9GD0LbQsdCw0LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI4MTUxOTY4OTEwOTczOTk4NjcwIj4i0JTQsNC30LLQsNC70Y/QtSDRntC70LDQtNCw0LvRjNC90ZbQutGDINC/0YDRi9Cy0Y/Qt9Cy0LDRhtGG0LAg0LTQsCDRltC90YLRjdGA0YTQtdC50YHRgyDQstC10YDRhdC90Y/Qs9CwINGe0LfRgNC+0Z7QvdGOINGC0Y3QutGB0YLQsNCy0LDQuSDQv9Cw0YHQu9GD0LPRliAo0L3QsNC/0YDRi9C60LvQsNC0LCBTcGVsbENoZWNrZXJTZXJ2aWNlKS4g0J3RltC60L7Qu9GWINC90LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iNDcwODU5NjAyMTE2MTQ3MzI1NSI+ItC30LLRj9C30LLQsNGG0YbQsCDQtyBWUE4g0YHRjdGA0LLRltGB0LDQvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+ItCU0LDQt9Cy0LDQu9GP0LUg0Z7Qu9Cw0LTQsNC70YzQvdGW0LrRgyDQt9Cy0Y/Qt9Cy0LDRhtGG0LAg0Lcg0ZbQvdGC0Y3RgNGE0LXQudGB0LDQvCDRgdC70YPQttCx0YsgVlBOINCy0YvRiNGN0LnRiNCw0LPQsCDRntC30YDQvtGe0L3Rji4g0J3QtSDQv9Cw0YLRgNGN0LHQvdCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLQv9GA0YvQstGP0LfQsNGG0Ywg0LTQsCDRiNC/0LDQu9C10YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+ItCU0LDQt9Cy0LDQu9GP0LUg0Z7Qu9Cw0LTQsNC70YzQvdGW0LrRgyDRntGB0YLQsNC70ZHRntCy0LDRhtGMINC/0YDRi9Cy0Y/Qt9C60YMg0LTQsCDRltC90YLRjdGA0YTQtdC50YHRgyDRiNC/0LDQu9C10YAg0LLQtdGA0YXQvdGP0LPQsCDRntC30YDQvtGe0L3Rji4g0J3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ItC/0YDRi9Cy0Y/Qt9Cw0YbRjCDQtNCwINGB0LvRg9C20LHRiyDQstGW0LTQttGN0YLRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLQlNCw0LfQstCw0LvRj9C1INGe0LvQsNC00LDQu9GM0L3RltC60YMg0L/RgNGL0LLRj9C30LLQsNGG0YbQsCDQtNCwINGW0L3RgtGN0YDRhNC10LnRgdGDINCy0LXRgNGF0L3Rj9Cz0LAg0Z7Qt9GA0L7RntC90Y4g0YHQu9GD0LbQsdGLINCy0ZbQtNC20Y3RgtCwLiDQndC1INC/0LDRgtGA0LDQsdGD0LXRhtGG0LAg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i0YPQt9Cw0LXQvNCw0LTQt9C10LnQvdGW0YfQsNGG0Ywg0Lcg0LDQtNC80ZbQvdGW0YHRgtGA0LDRgtCw0YDQsNC8INC/0YDRi9C70LDQtNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i0JTQsNC30LLQsNC70Y/QtSDRntC70LDQtNCw0LvRjNC90ZbQutGDINCw0LTQv9GA0LDRntC70Y/RhtGMINC90LDQvNC10YDRiyDQtNCwINCw0LTQvNGW0L3RltGB0YLRgNCw0YLQsNGA0LAg0L/RgNGL0LvQsNC00YsuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMgKDQyNDg4Mjg5MDAwNDU4MDg3MjIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zICg1MDI1NjA4MTY3NzA5OTQyNDg1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMzNjU5NDc3MTcxNjM4NjY4NDQiPiLQt9C80Y/QvdGP0YbRjCDQsNGA0YvQtdC90YLQsNGG0YvRjiDRjdC60YDQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQv9Cw0LLQsNGA0L7RgiDRjdC60YDQsNC90LAg0Z4g0LvRjtCx0Ysg0YfQsNGBLiDQndC1INC/0LDRgtGA0LDQsdGD0LXRhtGG0LAg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI5MTc1MzcxNjEzMzIyNTYyOTM0Ij4i0LfQvNC10L3QsCDRhdGD0YLQui4g0L/QtdGA0LDQvNGP0YjRhy4g0Z7QutCw0LcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iNjg2NjU2MzIzNDI3NDEwNDIzMyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINGF0YPRgtC60LDRgdGG0Ywg0LrRg9GA0YHQvtGA0YMg0LzRi9GI0Ysg0LDQsdC+INGC0YDRjdC60L/QsNC00LAg0Z4g0LvRjtCx0Ysg0YfQsNGBLiDQndC1INC/0LDRgtGA0LDQsdGD0LXRhtGG0LAg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9IjQ3Nzg3MzE3MDM2MDA5MDkzNDAiPiLQt9C80Y/QvdGW0YbRjCDRgNCw0YHQutC70LDQtNC60YMg0LrQu9Cw0LLRltGP0YLRg9GA0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9Ijg0ODAwMTY3NzExMzQxNzU4NzkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LfQvNGP0L3Rj9GG0Ywg0YDQsNGB0LrQu9Cw0LTQutGDINC60LvQsNCy0ZbRj9GC0YPRgNGLLiDQndC1INC/0LDRgtGA0LDQsdGD0LXRhtGG0LAg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+ItCw0LTQv9GA0LDQstGW0YbRjCDRgdGW0LPQvdCw0LvRiyBMaW51eCDQtNCwINC/0YDRi9C60LvQsNC00LDQvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0ODk2OTkyMDc5MTgyNjQ5MTQxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQsNC/0YvRgtCy0LDRhtGMINCw0LTQv9GA0LDRntC60YMg0L/QsNC00LDQstCw0LXQvNCw0LPQsCDRgdGW0LPQvdCw0LvQsCDQtNC70Y8g0Z7RgWnRhSDQv9Cw0YHRgtCw0Y/QvdC90YvRhSDQv9GA0LDRhtGN0YHQsNGeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyc2lzdGVudEFjdGl2aXR5IiBtc2dpZD0iODg0MTExMzYyNzk1NTU2MzkzOCI+ItC/0YDRi9C80YPRgdGW0YbRjCDQv9GA0YvQutC70LDQtNCw0L3QvdC1INC/0YDQsNGG0LDQstCw0YbRjCDQt9Cw0Z7RgdGR0LTRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQt9Cw0YXQvtGe0LLQsNGG0Ywg0L3QtdC60LDRgtC+0YDRi9GPINC/0LDRgdGC0LDRj9C90L3Ri9GPINGH0LDRgdGC0LppINGeINC/0LDQvNGP0YZpLiDQk9GN0YLQsCDQvNC+0LbQsCDQsNCx0LzQtdC20LDQstCw0YbRjCDQsNCxXCfRkdC8INC/0LDQvNGP0YbRliwg0LTQsNGB0YLRg9C/0L3QsNC5INC00LvRjyDRltC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/RniwgaSDQt9Cw0L/QsNCy0L7Qu2nRhtGMINC/0YDQsNGG0YMg0L/Qu9Cw0L3RiNGN0YLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0Mzg0NzYwMDQ3NTA4Mjc4MjcyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC30LDRhdC+0Z7QstCw0YbRjCDQvdC10LrQsNGC0L7RgNGL0Y8g0L/QsNGB0YLQsNGP0L3QvdGL0Y8g0YfQsNGB0YLQumkg0Z4g0L/QsNC80Y/RhmkuINCT0Y3RgtCwINC80L7QttCwINCw0LHQvNC10LbQsNCy0LDRhtGMINCw0LFcJ9GR0Lwg0L/QsNC80Y/RhtGWLCDQtNCw0YHRgtGD0L/QvdCw0Lkg0LTQu9GPINGW0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLCBpINC30LDQv9Cw0LLQvtC7adGG0Ywg0L/RgNCw0YbRgyDRgtGN0LvQtdGE0L7QvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSIxODQzODUxMjk1Mzc3MDU5MzgiPiLQstGL0LTQsNC70ZbRhtGMINC/0YDRi9C60LvQsNC00LDQvdC90ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LLRi9C00LDQu9GP0YbRjCDQv9Cw0LrQtdGC0YsgQW5kcm9pZC4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINCy0YvQtNCw0LvRj9GG0Ywg0LLQsNC20L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iMjc0MTA5MTkxODQ1ODQyNzU2Ij4i0LLRi9C00LDQu9GW0YbRjCDQtNCw0LTQt9C10L3Ri9GPINGW0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjQ2MjUzMjM2ODQxMjU0NTk0ODgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQstGL0LTQsNC70Y/RhtGMINC00LDQtNC30LXQvdGL0Y8g0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzEyODY2NTU3MTgzNzQwODY3NSI+ItCy0YvQtNCw0LvRltGG0Ywg0LrRjdGILdC/0LDQvNGP0YbRjCDRltC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzODEyOTk4NTk5MDA2NzMwMTk2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINCy0YvQtNCw0LvRj9GG0Ywg0YTQsNC50LvRiyDQutGN0Ygt0L/QsNC80Y/RhtGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4i0LLRi9C80LXRgNGL0YbRjCDQv9GA0LDRgdGC0L7RgNGDINC00LvRjyDQt9Cw0YXQvtGe0LLQsNC90L3RjyDQv9GA0YvQutC70LDQtNCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDRj9Cz0L4g0LrQvtC0LCDQtNCw0LTQt9C10L3Ri9GPINGWINCw0LFcJ9GR0Lwg0LrRjdGILdC/0LDQvNGP0YbRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+ItGD0YHRgtCw0LvRj9Cy0LDRhtGMINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0L3QtdC/0LDRgdGA0Y3QtNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSI1NjI4NTMwOTcyNTQ4MDcxMjg0Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LrRgdGC0LDQu9GR0Z7QstCw0YbRjCDQvdC+0LLRi9GPINCw0LHQviDQsNCx0L3QvtGe0LvQtdC90YvRjyDQv9Cw0LrQtdGC0YsgQW5kcm9pZC4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINC00LDQtNCw0LLQsNGG0Ywg0L3QvtCy0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0Lcg0LTQsNC30LLQvtC70LDQvNGWINCw0LTQstC+0LvRjNC90LDQuSDRgdGC0YPQv9C10L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwQ2FjaGUiIG1zZ2lkPSI3NDg3Mjc5MzkxNzIzNTI2ODE1Ij4i0LLRi9C00LDQu9GW0YbRjCDRg9GB0LUg0LTQsNC00LfQtdC90YvRjyDQtyDQutGN0Ygt0L/QsNC80Y/RhtGWINC/0YDRi9C60LvQsNC00LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTc0NjQwODcxOTQ1NDM0NTY1Ij4i0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQtNCw0LfQstCw0LvRj9C1INCy0YvQt9Cy0LDQu9GP0YbRjCDRgdGF0L7QsmnRiNGH0LAg0L/Qu9Cw0L3RiNGN0YLQsCwg0LLRi9C00LDQu9GP0Y7Rh9GLINGE0LDQudC70Ysg0Lcg0LTRi9GA0Y3QutGC0L7RgNGL0Lkg0LrRjdGI0LAgadC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4g0JPRjdGC0LAg0LzQvtC20LAg0L/RgNGL0LLQtdGB0YZpINC00LAg0YLQsNCz0L4sINGI0YLQviBp0L3RiNGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC/0LDRh9C90YPRhtGMINC/0YDQsNGG0LDQstCw0YbRjCDQv9Cw0LLQvtC70YzQvdC10LksINGC0LDQvNGDINGI0YLQviBp0Lwg0YLRgNGN0LHQsCDQsdGD0LTQt9C1INC/0LDRntGC0L7RgNC90LAg0LDRgtGA0YvQvNC7adCy0LDRhtGMINGB0LLQsNC1INC00LDQtNC30LXQvdGL0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1INC00LDQt9Cy0LDQu9GP0LUg0LLRi9C30LLQsNC70Y/RhtGMINGB0YXQvtCyadGI0YfQsCDRgtGN0LvQtdGE0L7QvdCwLCDQstGL0LTQsNC70Y/RjtGH0Ysg0YTQsNC50LvRiyDQtyDQtNGL0YDRjdC60YLQvtGA0YvQuSDQutGN0YjQsCBp0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiDQk9GN0YLQsCDQvNC+0LbQsCDQv9GA0YvQstC10YHRhmkg0LTQsCDRgtCw0LPQviwg0YjRgtC+IGnQvdGI0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0L/QsNGH0L3Rg9GG0Ywg0L/RgNCw0YbQsNCy0LDRhtGMINC/0LDQstC+0LvRjNC90LXQuSwg0YLQsNC80YMg0YjRgtC+IGnQvCDRgtGA0Y3QsdCwINCx0YPQtNC30LUg0L/QsNGe0YLQvtGA0L3QsCDQsNGC0YDRi9C80Ltp0LLQsNGG0Ywg0YHQstCw0LUg0LTQsNC00LfQtdC90YvRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdmVQYWNrYWdlIiBtc2dpZD0iMzI4OTg5MDI3MTY0NTkyMTQxMSI+ItC/0LXRgNCw0LzRj9GB0YbRltGG0Ywg0YDRjdGB0YPRgNGB0Ysg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdmVQYWNrYWdlIiBtc2dpZD0iMzE5NTYyMjE3Nzc4MjQ0NTI0Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0L/QtdGA0LDQvNGP0YjRh9Cw0YbRjCDRgNGN0YHRg9GA0YHRiyDQv9GA0YvQutC70LDQtNCw0L3QvdGPINC3INGD0L3Rg9GC0YDQsNC90YvRhSDQvdCwINC30L3QtdGI0L3RltGPINC90L7RgdGM0LHRltGC0Ysg0ZYg0L3QsNCw0LTQstCw0YDQvtGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZExvZ3MiIG1zZ2lkPSI2NjE1Nzc4NTQzMTk4OTY3NjE0Ij4i0YfRi9GC0LDRhtGMINC60LDQvdGE0ZbQtNGN0L3RhtGL0LnQvdGL0Y8g0LTQsNC00LfQtdC90YvRjyDQtNC30ZHQvdC9adC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODIwNjEzMTMyOTM0NTUxNTEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgdGH0YvRgtCy0LDRhtGMINGA0L7Qt9C90YvRjyDRhNCw0LnQu9GLINGBadGB0YLRjdC80L3QsNC5INCzadGB0YLQvtGA0YtpLiDQotCw0Lpp0Lwg0YfRi9C90LDQvCwg0LzQvtC20L3QsCDQstGL0Y/QsmnRhtGMINCw0LPRg9C70YzQvdGD0Y4g0ZbQvdGE0LDRgNC80LDRhtGL0Y4g0L/RgNCwINGC0L7QtSwg0YjRgtC+INCy0Ysg0YDQvtCx0ZbRhtC1INC3INC/0LvQsNC90YjRjdGC0LDQvCwg0YMg0YLRi9C8INC70ZbQutGDLCDQvNCw0LPRh9GL0LzQsCwg0LDRgdCw0LHRltGB0YLRi9GPINCw0LHQviDQutCw0L3RhGnQtNGN0L3RhtGL0LnQvdGL0Y8g0LfQstC10YHRgtC6aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIwNjM0MzgxNDAyNDE1NjA0NDMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YHRh9GL0YLQstCw0YbRjCDRgNC+0LfQvdGL0Y8g0YHRltGB0YLRjdC80L3Ri9GPINGE0LDQudC70Ysg0LNp0YHRgtC+0YDRi9C5LiDQk9GN0YLQsCDQtNCw0LfQstCw0LvRj9C1INCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0LDQs9GD0LvRjNC90YPRjiDRltC90YTQsNGA0LzQsNGG0YvRjiDQsNCxINGC0YvQvCwg0Y/QuiDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDQtdGG0YbQsCDRgtGN0LvQtdGE0L7QvSwg0YMg0YLRi9C8INC70ZbQutGDLCDQvNCw0LPRh9GL0LzQsCwg0LDRgdCw0LHRltGB0YLRg9GOINCw0LHQviDQv9GA0YvQstCw0YLQvdGD0Y4g0ZbQvdGE0LDRgNC80LDRhtGL0Y4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i0LTQu9GPINC/0YDQsNC50LPRgNCw0LLQsNC90L3RjyDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINC70Y7QsdGLINC80YPQu9GM0YLRi9C80LXQtNGL0LnQvdGLINC00Y3QutC+0LTRjdGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINC70Y7QsdGLINGe0YHRgtCw0LvRj9Cy0LDQvdGLIGnQvdGB0YLRgNGD0LzQtdC90YIg0LTQu9GPINC80YPQu9GM0YLRi9C80LXQtNGL0LnQvdCw0LPQsCDQtNGN0LrQsNC00LDQstCw0L3QvdGPLCDQutCw0LEg0L/RgNCw0LnQs9GA0LDRhtGMLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX21hbmFnZUNhQ2VydGlmaWNhdGVzICgxNjc4MzkxODk2Nzg2ODgyMDE0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzICg0MDE1NjQ0MDQ3MTk2OTM3MDE0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaWFnbm9zdGljIiBtc2dpZD0iODA3Njc0Mzk1MzkwODAwMDM0MiI+ItGH0YvRgtCw0YbRjC/Qt9Cw0L/RltGB0LLQsNGG0Ywg0L3QsCDQtNGL0Y/Qs9C90LDRgdGC0YvRh9C90YvRjyDRgNGN0YHRg9GA0YHRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RpYWdub3N0aWMiIG1zZ2lkPSI2NjA4Mjk1NjkyMDAyNDUyMjgzIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YHRh9GL0YLQstCw0YbRjCDRliDQt9Cw0L/RltGB0LLQsNGG0Ywg0LvRjtCx0Ysg0YDRjdGB0YPRgNGBLCDRj9C60ZYg0L3QsNC70LXQttGL0YbRjCDQtNGL0Y/Qs9C90LDRgdGC0YvRh9C90LDQuSDQs9GA0YPQv9C1LCDQvdCw0L/RgNGL0LrQu9Cw0LQg0YTQsNC50LvRiyDRgNCw0YHQv9GA0LDRhtC+0Z7RiNGH0YvQutCwINGeINGC0Y3Rh9GG0YsgL2Rldi4g0J/QsNGC0Y3QvdGG0YvQudC90LAg0LPRjdGC0LAg0LzQvtC20LAg0L/QsNGe0L/Qu9GL0LLQsNGG0Ywg0L3QsCDRgdGC0LDQsdGW0LvRjNC90LDRgdGG0Ywg0ZYg0LHRj9GB0L/QtdC60YMg0YHRltGB0YLRjdC80YsuINCT0Y3RgtCwINC/0LDQstGW0L3QvdCwINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0YbQsCDQotCe0JvQrNCa0IYg0LTQu9GPINCw0L/QsNGA0LDRgtC90LDQuSDQtNGL0Y/Qs9C90L7RgdGC0YvQutGWINCy0YvRgtCy0L7RgNGG0LDQvCDQsNCx0L4g0LDQv9C10YDQsNGC0LDRgNCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiLRg9C60LvRjtGH0YvRhtGMINCw0LHQviDQsNC00LrQu9GO0YfRi9GG0Ywg0LrQsNC80L/QsNC90LXQvdGC0Ysg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4ODg3NDM1NzQwOTgyMjM3Mjk0Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0LLRi9C30L3QsNGH0Y3QvdC90LUg0YLQsNCz0L4sINCx0YPQtNC30LUg0Z7QutC70Y7Rh9Cw0L3RiyDQutCw0LzQv9Cw0L3QtdC90YIg0ZbQvdGI0LDQs9CwINC/0YDRi9C60LvQsNC00LDQvdC90Y8g0YbRliDQvdC1LiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwINC00LvRjyDQsNC00LrQu9GO0YfRjdC90L3RjyDQstCw0LbQvdGL0YUg0LzQsNCz0YfRi9C80LDRgdGG0Y/RniDQv9C70LDQvdGI0Y3RgtCwLiDQlyDQs9GN0YLRi9C8INC00LDQt9Cy0L7Qu9Cw0Lwg0YLRgNGN0LHQsCDQsdGL0YbRjCDRg9Cy0LDQttC70ZbQstGL0LwsINCx0L4g0LzQvtC20L3QsCDQv9GA0YvQstC10YHRhtGWINC60LDQvNC/0LDQvdC10L3RgtGLINC/0YDRi9C60LvQsNC00LDQvdC90Y8g0Z4g0L3QtdC/0YDRi9C00LDRgtC90YssINGB0YPQv9GP0YDRjdGH0LvRltCy0Ysg0LDQsdC+INC90Y/RntGB0YLQvtC50LvRltCy0Ysg0YHRgtCw0L0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODI3MjMyNDg0NDE2NTA1NjE1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0LLRi9C30L3QsNGH0Y3QvdC90LUg0YLQsNCz0L4sINCx0YPQtNC30LUg0Z7QutC70Y7Rh9Cw0L3RiyDQutCw0LzQv9Cw0L3QtdC90YIg0ZbQvdGI0LDQs9CwINC/0YDRi9C60LvQsNC00LDQvdC90Y8g0YbRliDQvdC1LiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwINC00LvRjyDQsNC00LrQu9GO0YfRjdC90L3RjyDQstCw0LbQvdGL0YUg0LzQsNCz0YfRi9C80LDRgdGG0Y/RniDRgtGN0LvQtdGE0L7QvdCwLiDQlyDQs9GN0YLRi9C8INC00LDQt9Cy0L7Qu9Cw0Lwg0YLRgNGN0LHQsCDQsdGL0YbRjCDRg9Cy0LDQttC70ZbQstGL0LwsINCx0L4g0LzQvtC20L3QsCDQv9GA0YvQstC10YHRhtGWINC60LDQvNC/0LDQvdC10L3RgtGLINC/0YDRi9C60LvQsNC00LDQvdC90Y8g0Z4g0L3QtdC/0YDRi9C00LDRgtC90YssINGB0YPQv9GP0YDRjdGH0LvRltCy0Ysg0LDQsdC+INC90Y/RntGB0YLQvtC50LvRltCy0Ysg0YHRgtCw0L0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDYyNzMxNTM1MTA5MzUwODc5NSI+ItC/0YDQsNC00LDRgdGC0LDQsmnRhtGMINCw0LHQviDQsNC00LzRj9C90ZbRhtGMINC00LDQt9Cy0L7QuyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0MDg4NjQyNjU0MDg1ODUwNjYyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC/0YDQsNC00LDRgdGC0LDRntC70Y/RhtGMINCw0LHQviDQsNC00LzRj9C90Y/RhtGMINC/0Y3RntC90YvRjyDQtNCw0LfQstC+0LvRiyDQtNC70Y8g0LPRjdGC0LDQs9CwINCw0LHQviDRltC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwLCDQutCw0LEg0LDRgtGA0YvQvNCw0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCDRhNGD0L3QutGG0YvQuSwg0Y/QumnRjyDQstGLIGnQvCDQvdC1INC/0YDQsNC00LDRgdGC0LDQsmnQu2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI4NDYzMTgxNjI4Njk1Mzk2MzkxIj4i0YPRgdGC0LDQu9GP0LLQsNGG0Ywg0L/QsNC20LDQtNCw0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI0OTczOTg2NzYyMjQxNzgzNzEyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0LLQsNGI0Ysg0L/QsNC20LDQtNCw0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINC90LXQv9GA0YvQutC80LXRgtC90LAg0LfQvNGP0L3Rj9GG0Ywg0LfQsNC/0YPRiNGH0LDQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3Rliwg0L/QsNC00LzRj9C90Y/RjtGH0Ysg0ZbRgdC90YPRjtGH0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWLCDQutCw0LEg0LfQsWnRgNCw0YbRjCDQstCw0YjRiyDQsNGB0LDQsdGW0YHRgtGL0Y8g0LTQsNC00LfQtdC90YvRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSIyMjI2MTk1MjkwOTU1MjI0NzMwIj4i0LfQvNC10L3QsCDRgdGW0YHRgtGN0LzQvdGL0YUg0L3QsNC70LDQtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdC10Lwg0LfQvNGP0L3Rj9GG0Ywg0LTQsNC00LfQtdC90YvRjyDQvdCw0LvQsNC0INGB0ZbRgdGC0Y3QvNGLLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQv9Cw0YjQutC+0LTQt9GW0YbRjCDQutCw0L3RhNGW0LPRg9GA0LDRhtGL0Y4g0LLQsNGI0LDQuSDRgdGW0YHRgtGN0LzRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiLQt9C80Y/QvdGP0YbRjCDQv9Cw0YDQsNC80LXRgtGA0Ysg0LHRj9GB0L/QtdC60ZYg0YHRltGB0YLRjdC80YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iODE1OTUzNTYxMzAyMDEzNzM5MSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINC00LDQtNC30LXQvdGL0Y8g0L/QsNGA0LDQvNC10YLRgNCw0Z4g0LHRj9GB0L/QtdC60ZYg0YHRltGB0YLRjdC80YsuINCd0LUg0LTQu9GPINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQt9Cy0YvRh9Cw0LnQvdGL0LzRliDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMjE0OTQyNjY2NDIyNjE1MjE4NSI+ItC30LzRj9C90Y/RhtGMINC60LDRgNGC0YMg0YHQu9GD0LbQsdCw0Z4gR29vZ2xlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0LrQsNGA0YLRgyDRgdC70YPQttCx0LDRniBHb29nbGUuINCd0LUg0LTQu9GPINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQt9Cy0YvRh9Cw0LnQvdGL0LzRliDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVCb290Q29tcGxldGVkIiBtc2dpZD0iNTMxMjk2NTU2NTk4NzgwMDAyNSI+ItC30LDQv9GD0YHQuiDQv9GA0Ysg0LfQsNCz0YDRg9C30YbRiyDRgdGW0YHRgtGN0LzRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGB0LDQvNCw0YHRgtC+0LnQvdCwINC30LDQv9GD0YHQutCw0YbRhtCwLCDRj9C6INGC0L7Qu9GM0LrRliDRgdGW0YHRgtGN0LzQsCDQsdGD0LTQt9C1INGG0LDQu9C60LDQvCDQt9Cw0LPRgNGD0LbQsNC90LAuINCT0Y3RgtCwINC80L7QttCwINC/0LDQstGP0LvRltGH0YvRhtGMINGH0LDRgSDQt9Cw0L/Rg9GB0LrRgyDQv9C70LDQvdGI0Y3RgtGDINGWINC00LDQt9Cy0L7Qu9GW0YbRjCDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC30LDQv9Cw0LLQvtC70ZbRhtGMINGD0LLQtdGB0Ywg0L/Qu9Cw0L3RiNGN0YIsINC/0YDRi9C80YPRiNCw0Y7Rh9GLINGP0LPQviDQv9GA0LDRhtCw0LLQsNGG0Ywg0LfQsNGe0YHRkdC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgdCw0LzQsNGB0YLQvtC50L3QsCDQt9Cw0L/Rg9GB0LrQsNGG0YbQsCwg0Y/QuiDRgtC+0LvRjNC60ZYg0YHRltGB0YLRjdC80LAg0LHRg9C00LfQtSDRhtCw0LvQutCw0Lwg0LfQsNC/0YPRiNGH0LDQvdCwLiDQk9GN0YLQsCDQvNC+0LbQsCDQv9Cw0LLRj9C70ZbRh9GL0YbRjCDRh9Cw0YEg0LfQsNC/0YPRgdC60YMg0YLRjdC70LXRhNC+0L3RgyDRliDQtNCw0LfQstC+0LvRltGG0Ywg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQt9Cw0L/QsNCy0L7Qu9GW0YbRjCDRg9Cy0LXRgdGMINGC0Y3Qu9C10YTQvtC9LCDQv9GA0YvQvNGD0YjQsNGO0YfRiyDRj9Cz0L4g0L/RgNCw0YbQsNCy0LDRhtGMINC30LDRntGB0ZHQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U3RpY2t5IiBtc2dpZD0iNzkxOTEyNjM3MjYwNjg4MTYxNCI+ItCw0LTQv9GA0LDRntC70Y/RhtGMINC90LXRgtGN0YDQvGnQvdC+0LLRg9GOINGA0LDRgdGB0YvQu9C60YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc3NDk3NjA0OTQzOTk5MTU2NTEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNC00L/RgNCw0Z7Qu9GP0YbRjCDQtNCw0LvQtdC50YjRi9GPINC30LLRj9C30LDQvdGL0Y8g0L/QtdGA0LDQtNCw0YfRiywg0Y/QutGW0Y8g0LfQsNGB0YLQsNGO0YbRhtCwINC/0LDRgdC70Y8g0LfQsNC60LDQvdGH0Y3QvdC90Y8g0LDRgdC90L7RntC90LDQuSDQv9C10YDQsNC00LDRh9GLLiDQl9C70L7RntC20YvQstCw0L3QvdC1INC80L7QttCwINC30YDQsNCx0ZbRhtGMINC/0YDQsNGG0YMg0L/Qu9Cw0L3RiNGN0YLQsCDQv9Cw0LLQvtC70YzQvdCw0Lkg0LDQsdC+INC90Y/RntGB0YLQvtC50LvRltCy0LDQuSwg0L/RgNGL0LzRg9GI0LDRjtGH0Ysg0Y/Qs9C+INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LfQsNC90LDQtNGC0LAg0YjQvNCw0YIg0L/QsNC80Y/RhtGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4MjU4MDM3NjQyMzI0NDUwOTEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0LTQsNC70LXQudGI0YvRjyDQt9Cy0Y/Qt9Cw0L3Ri9GPINC/0LXRgNCw0LTQsNGH0YssINGP0LrRltGPINC30LDRgdGC0LDRjtGG0YbQsCDQv9Cw0YHQu9GPINC30LDQutCw0L3Rh9GN0L3QvdGPINCw0YHQvdC+0Z7QvdCw0Lkg0L/QtdGA0LDQtNCw0YfRiy4g0JfQu9C+0Z7QttGL0LLQsNC90L3QtSDQvNC+0LbQsCDQt9GA0LDQsdGW0YbRjCDQv9GA0LDRhtGDINGC0Y3Qu9C10YTQvtC90LAg0L/QsNCy0L7Qu9GM0L3QsNC5INCw0LHQviDQvdGP0Z7RgdGC0L7QudC70ZbQstCw0LksINC/0YDRi9C80YPRiNCw0Y7Rh9GLINGP0LPQviDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINC30LDQvdCw0LTRgtCwINGI0LzQsNGCINC/0LDQvNGP0YbRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDb250YWN0cyIgbXNnaWQ9IjgzNDg0ODExMzE4OTk4ODYxMzEiPiLRh9GL0YLQsNC90L3QtSDQutCw0L3RgtCw0LrRgtCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgdGH0YvRgtCy0LDRhtGMINC00LDQtNC30LXQvdGL0Y8g0LDQsSDQutCw0L3RgtCw0LrRgtCw0YUsINGP0LrRltGPINC30LDRhdC+0Z7QstCw0Y7RhtGG0LAg0L3QsCDQv9C70LDQvdGI0Y3RhtC1LCDRgyDRgtGL0Lwg0LvRltC60YMg0LfQstC10YHRgtC6aSDQv9GA0LAg0YLQvtC1LCDRj9C6INGH0LDRgdGC0LAg0LLRiyDQstGL0LrQu2nQutCw0LtpINC60LDQvdC60YDRjdGC0L3Ri9GFINCw0LHQsNC90LXQvdGC0LDRniwg0L9p0YHQsNC7aSBp0Lwg0L/QsCDRjdC70LXQutGC0YDQvtC90L3QsNC5INC/0L7RiNGG0LUg0LDQsdC+INC60LDQvdGC0LDQutGC0LDQstCw0LtpINGW0L3RiNGL0LxpINGB0L/QvtGB0LDQsdCw0LzRli4g0JTQt9GP0LrRg9GO0YfRiyDQs9GN0YLQsNC80YMg0LTQsNC30LLQvtC70YMg0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQt9Cw0YXQvtGe0LLQsNGG0Ywg0LTQsNC00LfQtdC90YvRjyDQs2nRgdGC0L7RgNGLaSDQstGL0LrQu2nQutCw0Z4sINCwINGI0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0LrQsNC90YLQsNC60YLQvdGL0Y8g0LTQsNC00LfQtdC90YvRjyDQsdC10Lcg0LLQsNGI0LDQs9CwINCy0LXQtNCw0LzQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDQwNjU0MTUyNDU3MzAwNjYyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YHRh9GL0YLQstCw0YbRjCDQtNCw0LTQt9C10L3Ri9GPINCw0LEg0LrQsNC90YLQsNC60YLQsNGFLCDRj9C60ZbRjyDQt9Cw0YXQvtGe0LLQsNGO0YbRhtCwINC90LAg0YLRjdC70LXRhNC+0L3QtSwg0YMg0YLRi9C8INC70ZbQutGDINC30LLQtdGB0YLQumkg0L/RgNCwINGH0LDRgdGC0LDRgtGDLCDQtyDRj9C60L7QuSDQstGLINCy0YvQutC7adC60LDQu2kgadGFLCDQv2nRgdCw0LtpIGnQvCDQv9CwINGN0LvQtdC60YLRgNC+0L3QvdCw0Lkg0L/QvtGI0YbQtSDRhtGWINC60LDQvdGC0LDQutGC0LDQstCw0LtpINGW0L3RiNGL0Lwg0YHQv9C+0YHQsNCx0LDQvC4g0JTQt9GP0LrRg9GO0YfRiyDQs9GN0YLQsNC80YMg0LTQsNC30LLQvtC70YMg0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQt9Cw0YXQvtGe0LLQsNGG0Ywg0LTQsNC00LfQtdC90YvRjyDQs2nRgdGC0L7RgNGLaSDQstGL0LrQu2nQutCw0Z4sINCwINGI0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0LrQsNC90YLQsNC60YLQvdGL0Y8g0LTQsNC00LfQtdC90YvRjyDQsdC10Lcg0LLQsNGI0LDQs9CwINCy0LXQtNCw0LzQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ29udGFjdHMiIG1zZ2lkPSI1MTA3NDkyMDg2NDE2NzkzNTQ0Ij4i0LfQvNC10L3QsCDQutCw0L3RgtCw0LrRgtCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQtNCw0LTQt9C10L3Ri9GPINCw0LEg0LrQsNC90YLQsNC60YLQsNGFLCDRj9C60ZbRjyDQt9Cw0YXQvtGe0LLQsNGO0YbRhtCwINC90LAg0L/Qu9Cw0L3RiNGN0YbQtSwg0YMg0YLRi9C8INC70ZbQutGDINGH0LDRgdGC0LDRgtCwLCDQtyDRj9C60L7QuSDQstGLINCy0YvQutC7adC60LDQu2kg0LDRgdC+0LEsINC/adGB0LDQu2kg0L/QsCDRjdC70LXQutGC0YDQvtC90L3QsNC5INC/0L7RiNGG0LUg0YbRliDRltC90YjRi9C8INGB0L/QvtGB0LDQsdCw0Lwg0LrQsNC90YLQsNC60YLQsNCy0LDQu2kg0LcgadC80ZYuINCXINCz0Y3RgtGL0Lwg0LTQsNC30LLQvtC70LDQvCDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LfQvNC+0LPRg9GG0Ywg0LLRi9C00LDQu9GP0YbRjCDQutCw0L3RgtCw0LrRgtC90YvRjyDQtNCw0LTQt9C10L3Ri9GPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1ODk4NjkyMjQ2MjUxNjM1NTgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQtNCw0LTQt9C10L3Ri9GPINCw0LEg0LrQsNC90YLQsNC60YLQsNGFLCDRj9C60ZbRjyDQt9Cw0YXQvtGe0LLQsNGO0YbRhtCwINC90LAg0YLRjdC70LXRhNC+0L3QtSwg0YMg0YLRi9C8INC70ZbQutGDINGH0LDRgdGC0LDRgtCwLCDQtyDRj9C60L7QuSDQstGLINCy0YvQutC7adC60LDQu2kg0LDRgdC+0LEsINC/adGB0LDQu2kg0L/QsCDRjdC70LXQutGC0YDQvtC90L3QsNC5INC/0L7RiNGG0LUg0YbRliDRltC90YjRi9C8INGB0L/QvtGB0LDQsdCw0Lwg0LrQsNC90YLQsNC60YLQsNCy0LDQu2kg0LcgadC80ZYuINCXINCz0Y3RgtGL0Lwg0LTQsNC30LLQvtC70LDQvCDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LfQvNC+0LPRg9GG0Ywg0LLRi9C00LDQu9GP0YbRjCDQutCw0L3RgtCw0LrRgtC90YvRjyDQtNCw0LTQt9C10L3Ri9GPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGxMb2ciIG1zZ2lkPSIzNDc4MTMzMTg0NjI0MTAyNzM5Ij4i0YfRi9GC0LDQvdC90LUg0LNp0YHRgtC+0YDRi2kg0LLRi9C60LvRltC60LDRniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNzAwNjQ1MTg0ODcwNzYwMjg1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YfRi9GC0LDRhtGMINCzadGB0YLQvtGA0YvRjiDQstGL0LrQu2nQutCw0Z4g0L/Qu9Cw0L3RiNGN0YLQsCwg0YMg0YLRi9C8INC7adC60YMg0LTQsNC00LfQtdC90YvRjyDQv9GA0LAg0Z7QstCw0YXQvtC00L3Ri9GPIGkg0LLRi9GF0L7QtNC90YvRjyDQstGL0LrQu2nQumkuINCU0LfRj9C60YPRjtGH0Ysg0LPRjdGC0LDQvNGDINC00LDQt9Cy0L7Qu9GDINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LfQsNGF0L7RntCy0LDRhtGMINC00LDQtNC30LXQvdGL0Y8g0LNp0YHRgtC+0YDRi2kg0LLRi9C60Ltp0LrQsNGeLCDQsCDRiNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LzQvtCz0YPRhtGMINCw0LTQv9GA0LDRntC70Y/RhtGMINCzadGB0YLQvtGA0YvRjiDQstGL0LrQu2nQutCw0Z4g0LHQtdC3INCy0LDRiNCw0LPQsCDQstC10LTQsNC80LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YfRi9GC0LDRhtGMINCzadGB0YLQvtGA0YvRjiDQstGL0LrQu2nQutCw0Z4g0YLRjdC70LXRhNC+0L3QsCwg0YMg0YLRi9C8INC7adC60YMg0LTQsNC00LfQtdC90YvRjyDQv9GA0LAg0Z7QstCw0YXQvtC00L3Ri9GPIGkg0LLRi9GF0L7QtNC90YvRjyDQstGL0LrQu2nQumkuINCU0LfRj9C60YPRjtGH0Ysg0LPRjdGC0LDQvNGDINC00LDQt9Cy0L7Qu9GDINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LfQsNGF0L7RntCy0LDRhtGMINC00LDQtNC30LXQvdGL0Y8g0LNp0YHRgtC+0YDRi2kg0LLRi9C60Ltp0LrQsNGeLCDQsCDRiNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LzQvtCz0YPRhtGMINCw0LTQv9GA0LDRntC70Y/RhtGMINCzadGB0YLQvtGA0YvRjiDQstGL0LrQu2nQutCw0Z4g0LHQtdC3INCy0LDRiNCw0LPQsCDQstC10LTQsNC80LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4i0LfQsNC/0ZbRgSDQs2nRgdGC0L7RgNGLaSDQstGL0LrQu9GW0LrQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC30LzRj9C90Y/RhtGMINCzadGB0YLQvtGA0YvRjiDQstGL0LrQu2nQutCw0Z4g0L/Qu9Cw0L3RiNGN0YLQsCwg0YMg0YLRi9C8INC7adC60YMg0LTQsNC00LfQtdC90YvRjyDQv9GA0LAg0Z7QstCw0YXQvtC00L3Ri9GPIGkg0LfRi9GF0L7QtNC90YvRjyDQstGL0LrQu2nQumkuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINCy0YvQtNCw0LvRj9GG0Ywg0LDQsdC+INC30LzRj9C90Y/RhtGMINCzadGB0YLQvtGA0YvRjiDQstGL0LrQu9GW0LrQsNGeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4Mzk0MTczNjM1Mjc4Nzg0MiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINCzadGB0YLQvtGA0YvRjiDQstGL0LrQu2nQutCw0Z4g0YLRjdC70LXRhNC+0L3Rgywg0YMg0YLRi9C8INC7adC60YMg0LTQsNC00LfQtdC90YvRjyDQv9GA0LAg0Z7QstCw0YXQvtC00L3Ri9GPINGWINC30YvRhdC+0LTQvdGL0Y8g0LLRi9C60Ltp0LppLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LzQvtCz0YPRhtGMINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LPRjdGC0LAsINC60LDQsSDQstGL0LTQsNC70Y/RhtGMINCw0LHQviDQt9C80Y/QvdGP0YbRjCDQs2nRgdGC0L7RgNGL0Y4g0LLRi9C60LvRltC60LDRni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+ItGH0YvRgtCw0L3QvdC1INGB0LLQsNGR0Lkg0LrQsNC90YLQsNC60YLQvdCw0Lkg0LrQsNGA0YLRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGB0YfRi9GC0LLQsNGG0Ywg0LDRgdCw0LHRltGB0YLRg9GOINGW0L3RhNCw0YDQvNCw0YbRi9GOINGeINC/0YDQvtGE0ZbQu9GP0YUsINGP0LrQsNGPINC30LDRhdC+0Z7QstCw0LXRhtGG0LAg0L3QsCDQstCw0YjQsNC5INC/0YDRi9C70LDQtNC30LUsINC90LDQv9GA0YvQutC70LDQtCDQstCw0YjQsCDRltC80Y8g0ZYg0LrQsNC90YLQsNC60YLQvdGD0Y4g0ZbQvdGE0LDRgNC80LDRhtGL0Y4uINCT0Y3RgtCwINC30L3QsNGH0YvRhtGMLCDRiNGC0L4g0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQvNC+0LbQsCDRltC00Y3QvdGC0YvRhNGW0LrQsNCy0LDRhtGMINCy0LDRgSDRliDQsNC00L/RgNCw0Z7Qu9GP0YbRjCDRltC90YTQsNGA0LzQsNGG0YvRjiDQstCw0YjQsNCz0LAg0L/RgNC+0YTRltC70Y4g0YLRgNGN0YbRltC8INCw0YHQvtCx0LDQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlUHJvZmlsZSIgbXNnaWQ9IjkwNzc5MzYyODc3NzM5NzY0MyI+ItC30LzQtdC90LAg0YHQstCw0ZHQuSDQutCw0L3RgtCw0LrRgtC90LDQuSDQutCw0YDRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTU1MjA4NDI5NDU5ODQ2NTg5OSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINGG0ZYg0LTQsNC00LDQstCw0YbRjCDQsNGB0LDQsdGW0YHRgtGD0Y4g0ZbQvdGE0LDRgNC80LDRhtGL0Y4g0L/RgNC+0YTRltC70Y/Rniwg0LfQsNGF0LDQstCw0L3Ri9GFINC90LAg0L/RgNGL0LvQsNC00LfQtSwg0L3QsNC/0YDRi9C60LvQsNC0INCy0LDRiNCwINGW0LzRjyDRliDQutCw0L3RgtCw0LrRgtC90YPRjiDRltC90YTQsNGA0LzQsNGG0YvRji4g0KLQsNC60ZbQvCDRh9GL0L3QsNC8LCDQv9GA0YvQutC70LDQtNCw0L3QvdC1INC80L7QttCwINGW0LTRjdC90YLRi9GE0ZbQutCw0LLQsNGG0Ywg0LLQsNGBINGWINCw0LTQv9GA0LDRntC70Y/RhtGMINGW0L3RhNCw0YDQvNCw0YbRi9GOINCy0LDRiNCw0LPQsCDQv9GA0L7RhNGW0LvRjyDRgtGA0Y3RhtGW0Lwg0LDRgdC+0LHQsNC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiLRh9GL0YLQsNGG0Ywg0LzQvtC5INC/0LDRgtC+0Log0LDQsdC90LDRntC70LXQvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINCw0YLRgNGL0LzQu2nQstCw0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCDQsNCx0L3QsNGe0LvQtdC90L3Rj9GeINGDINGB0LDRhtGL0Y/Qu9GM0L3Ri9GFINGB0LvRg9C20LHQsNGFINCw0LQg0LLQsNGBINGWINCy0LDRiNGL0YUg0YHRj9Cx0YDQvtGeLiDQkdGD0LTQt9GM0YbQtSDQsNGB0YbRj9GA0L7QttC90Ysg0L/QsNC00YfQsNGBINCw0LTQv9GA0LDRntC6aSBp0L3RhNCw0YDQvNCw0YbRi2nCoOKAkyDQs9GN0YLQsCDQtNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YfRi9GC0LDRhtGMINGB0YPQstGP0LfRliDQv9Cw0LzRltC2INCy0LDQvNGWINGWINCy0LDRiNGL0LzRliDRgdGP0LHRgNCw0LzRliDRniDRgdCw0YbRi9GP0LvRjNC90YvRhSDRgdC10YLQutCw0YUsINC90LXQt9Cw0LvQtdC20L3QsCDQsNC0INC/0YDRi9Cy0LDRgtC90LDRgdGG0ZYuINCj0LLQsNCz0LA6INCz0Y3RgtGLINC00LDQt9Cy0L7QuyDQvdC1INGA0LDRgdC/0LDRntGB0Y7QtNC20LLQsNC10YbRhtCwINC90LAg0Z7RgdC1INGB0LDRhtGL0Y/Qu9GM0L3Ri9GPINGB0LXRgtC6aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzUwNDE3OTIyMjQ5MzIzNTY0NSI+ItC30LDQv9GW0YHQsNGG0Ywg0YMg0LzQvtC5INC/0LDRgtC+0Log0LDQsdC90LDRntC70LXQvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzA4NjU1NzU1MjIwNDExNDg0OSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNC00LvRjtGB0YLRgNC+0Z7QstCw0YbRjCDQsNCx0L3QsNGe0LvQtdC90L1pICDQsNC0INCy0LDRiNGL0YUg0YHRj9Cx0YDQvtGeINGDINGB0LDRhtGL0Y/Qu9GM0L3Ri9GFINGB0LvRg9C20LHQsNGFLiDQkdGD0LTQt9GM0YbQtSDQsNGB0YbRj9GA0L7QttC90Ysg0L/QsNC00YfQsNGBINCw0LHQvNC10L3RgyBp0L3RhNCw0YDQvNCw0YbRi9GP0Lk6INCz0Y3RgtCwINC/0YDRi9C60LvQsNC00LDQvdC90LUg0LDQtNC/0YDQsNGe0LvRj9C1INC/0LDQstC10LTQsNC80LvQtdC90L1pLCDRj9C6adGPINC/0LDQtNC+0LHQvdGLINC90LAg0YLQvtC1LCDRiNGC0L4gadGFINC00LDRgdC70LDQu2kg0YHRj9Cx0YDRiy4g0KPQstCw0LPQsDog0LPRjdGC0Ysg0LTQsNC30LLQvtC7INC90LUg0YDQsNGB0L/QsNGe0YHRjtC00LbQstCw0LXQtdGG0LAg0L3QsCDRntGB0LUg0YHQsNGG0YvRj9C70YzQvdGL0Y8g0YHQtdGC0LppLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGVuZGFyIiBtc2dpZD0iNTk3MjcyNzU2MDI1NzYxMjM5OCI+ItGH0YvRgtCw0YbRjCDQv9Cw0LTQt9C10ZYg0LrQsNC70LXQvdC00LDRgNCwLCDQsCDRgtCw0LrRgdCw0LzQsCDQv9GA0YvQstCw0YLQvdGD0Y4g0ZbQvdGE0LDRgNC80LDRhtGL0Y4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQyMTY0NjIwNDkwNTc2NTg3MjMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YfRi9GC0LDRhtGMINGD0YHQtSDQvNC10YDQsNC/0YDRi9C10LzRgdGC0LLRiyDQtyDQutCw0LvQtdC90LTQsNGA0LAsINC30LDRhdCw0LLQsNC90YvRjyDQvdCwINCy0LDRiNGL0Lwg0L/Qu9Cw0L3RiNGN0YbQtSwg0YMg0YLRi9C8INC70ZbQutGDINC3INGB0Y/QsdGA0LDQvGkg0LDQsdC+INC60LDQu9C10LPQsNC8aS4g0JPRjdGC0LAg0LTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINCw0LTQv9GA0LDRntC70Y/RhtGMINC00LDQtNC30LXQvdGL0Y8g0LrQsNC70LXQvdC00LDRgNCwLCDQvdGP0LPQu9C10LTQt9GP0YfRiyDQvdCwINC/0YDRi9Cy0LDRgtC90LDRgdGG0YwgaSDQsNC00YfRg9Cy0LDQu9GM0L3QsNGB0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NDM0NTQ4NjgyNDcwODUxNTgzIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGH0YvRgtCw0YbRjCDRg9GB0LUg0LzQtdGA0LDQv9GA0YvQtdC80YHRgtCy0Ysg0Lcg0LrQsNC70LXQvdC00LDRgNCwLCDQt9Cw0YXQsNCy0LDQvdGL0Y8g0L3QsCDQstCw0YjRi9C8INGC0Y3Qu9C10YTQvtC90LUsINGDINGC0YvQvCDQu9GW0LrRgyDQtyDRgdGP0LHRgNCw0LxpINCw0LHQviDQutCw0LvQtdCz0LDQvGkuINCT0Y3RgtCwINC00LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNC00L/RgNCw0Z7Qu9GP0YbRjCDQtNCw0LTQt9C10L3Ri9GPINC60LDQu9C10L3QtNCw0YDQsCwg0L3Rj9Cz0LvQtdC00LfRj9GH0Ysg0L3QsCDQv9GA0YvQstCw0YLQvdCw0YHRhtGMIGkg0LDQtNGH0YPQstCw0LvRjNC90LDRgdGG0YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+ItC00LDQtNCw0LLQsNGG0Ywg0YbRliDQt9C80Y/QvdGP0YbRjCDQv9Cw0LTQt9C10ZYg0LrQsNC70LXQvdC00LDRgNCwINGWINCw0LTQv9GA0LDRntC70Y/RhtGMINGN0LvQtdC60YLRgNC+0L3QvdGD0Y4g0L/QvtGI0YLRgyDQtNCwINCz0LDRgdGG0LXQuSDQsdC10Lcg0LLQtdC00LDQvNCwINGe0LvQsNC00LDQu9GM0L3RltC60LDRniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NzkwMzU1MjAxMTM2Njg1MjgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LTQsNC00LDQstCw0YbRjCwg0LLRi9C00LDQu9GP0YbRjCwg0LfQvNGP0L3Rj9GG0Ywg0LzQtdGA0LDQv9GA0YvQtdC80YHRgtCy0YssINGP0LrRltGPINC80L7QttC90LAg0YDRjdC00LDQs9Cw0LLQsNGG0Ywg0L3QsCDQv9C70LDQvdGI0Y3RhtC1LCDRgyDRgtGL0Lwg0LvRltC60YMg0YHRg9GB0YLRgNGN0YfRiyDRgSDRgdGP0LHRgNCw0LxpIGkg0LrQsNC70LXQs9Cw0LxpLiDQk9GN0YLQsCDQtNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWINCw0LQg0YPQu9Cw0LTQsNC70YzQvWnQutCw0Z4g0LrQsNC70LXQvdC00LDRgNC+0Z4g0LDQsdC+INC30LzRj9C90Y/RhtGMINC80LXRgNCw0L/RgNGL0LXQvNGB0YLQstGLINCx0LXQtyDQstC10LTQsNC80LAg0YPQu9Cw0LTQsNC70YzQvWnQutCw0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIzMjQ0Njk0OTYzMjcyNDkzNzYiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LTQsNC00LDQstCw0YbRjCwg0LLRi9C00LDQu9GP0YbRjCwg0LfQvNGP0L3Rj9GG0Ywg0LzQtdGA0LDQv9GA0YvQtdC80YHRgtCy0YssINGP0LrRltGPINC80L7QttC90LAg0YDRjdC00LDQs9Cw0LLQsNGG0Ywg0L3QsCDRgtGN0LvQtdGE0L7QvdC1LCDRgyDRgtGL0Lwg0LvRltC60YMg0YHRg9GB0YLRgNGN0YfRiyDRgSDRgdGP0LHRgNCw0LxpIGkg0LrQsNC70LXQs9Cw0LxpLiDQk9GN0YLQsCDQtNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWINCw0LQg0YPQu9Cw0LTQsNC70YzQvWnQutCw0Z4g0LrQsNC70LXQvdC00LDRgNC+0Z4g0LDQsdC+INC30LzRj9C90Y/RhtGMINC80LXRgNCw0L/RgNGL0LXQvNGB0YLQstGLINCx0LXQtyDQstC10LTQsNC80LAg0YPQu9Cw0LTQsNC70YzQvWnQutCw0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI4Njg4MzM0OTc0MDM2ODIzMzMwIj4i0LzQsNC60LXRgiDQutGA0YvQvdGW0YYg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8g0LTQu9GPINGC0Y3RgdGC0LDQstCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+ItCh0YLQstCw0YDRi9GG0Ywg0LzQsNC60LXRgiDQutGA0YvQvdGW0YYg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8g0LTQu9GPINGC0Y3RgdGC0LDQstCw0L3QvdGPINGWINGe0YHRgtCw0LvRkdGe0LrRliDQvdC+0LLQsNCz0LAg0L/RgNCw0LLQsNC50LTQsNGA0LAg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8uINCT0Y3RgtCwINC00LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQv9C10YDQsNCy0YvQt9C90LDRh9GL0YbRjCDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3QtSDRli/QsNCx0L4g0YHRgtCw0YLRg9GBLCDQstC10YDQvdGD0YLRiyDRltC90YjRi9C8aSDQutGA0YvQvdGW0YbQsNC8aSwg0L3QsNC/0YDRi9C60LvQsNC0INCz0LXQsNC/0LDQt2nRhtGL0LnQvdCw0Lkg0YHQu9GD0LbQsdCw0LkgaSDQv9GA0LDQstCw0LnQtNCw0YDQsNC8aSDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3Rjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLQtNC+0YHRgtGD0L8g0LTQsCDQtNCw0LTQsNGC0LrQvtCy0YvRhSDQutCw0LzQsNC90LTQsNGeINC/0LDRgdGC0LDRntGI0YfRi9C60LAg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSI1OTQ1MTY2NjQyMzM1ODAwNzYzIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCDQtNCw0LTQsNGC0LrQvtCy0YvRhSDQutCw0LzQsNC90LQg0L/RgNCw0LLQsNC50LTQsNGA0LAg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8uINCT0Y3RgtCwINC80L7QttCwINC00LDQt9Cy0L7Qu2nRhtGMINC/0YDRi9C60LvQsNC00LDQvdC90Y4g0Z7QvNC10YjQstCw0YbRhtCwINGeINC/0YDQsNGG0YMgR1BTINCw0LHQviDRltC90YjRi9GFINC60YDRi9C90ZbRhiDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3Rjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+ItC00LDQt9Cy0L7QuyDQvdCwINGe0YHRgtCw0LvRj9Cy0LDQvdC90LUg0L/QsNGB0YLQsNGe0YjRh9GL0LrQsCDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+ItCh0YLQstCw0YDRi9GG0Ywg0LzQsNC60LXRgiDQutGA0YvQvdGW0YYg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8g0LTQu9GPINGC0Y3RgdGC0LDQstCw0L3QvdGPINGWINGe0YHRgtCw0LvRkdGe0LrRliDQvdC+0LLQsNCz0LAg0L/RgNCw0LLQsNC50LTQsNGA0LAg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8uINCT0Y3RgtCwINC00LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQv9C10YDQsNCy0YvQt9C90LDRh9GL0YbRjCDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3QtSDRli/QsNCx0L4g0YHRgtCw0YLRg9GBLCDQstC10YDQvdGD0YLRiyDRltC90YjRi9C8aSDQutGA0YvQvdGW0YbQsNC8aSwg0L3QsNC/0YDRi9C60LvQsNC0INCz0LXQsNC/0LDQt2nRhtGL0LnQvdCw0Lkg0YHQu9GD0LbQsdCw0LkgaSDQv9GA0LDQstCw0LnQtNCw0YDQsNC8aSDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3Rjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiLQtNCw0LrQu9Cw0LTQvdCw0LUg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90LUgKNC90LAg0LDRgdC90L7QstC1IEdQUyDRliDRgdC10YLQutGWKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjUyOTUwNDc1NjM1NjQ5ODEyNTAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LLRi9C30L3QsNGH0LDRhtGMINC00LDQutC70LDQtNC90LDQtSDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3QtSDQtyDQtNCw0L/QsNC80L7Qs9Cw0LkgR1BTINCw0LHQviDRgdC10YLQutCw0LLRi9GFINC60YDRi9C9adGGINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdGPLCDQvdCw0L/RgNGL0LrQu9Cw0LQg0LLQtdC2INGB0L7RgtCw0LLQsNC5INGB0YPQstGP0LdpIGkgV2ktRmkuINCT0Y3RgtGL0Y8g0YHQu9GD0LbQsdGLINCy0YvQt9C90LDRh9GN0L3QvdGPINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdGPINC/0LDQsmnQvdC90Ysg0LHRi9GG0Ywg0YPQutC70Y7Rh9Cw0L3RiyBpINC00LDRgdGC0YPQv9C90YvRjyDQtNC70Y8g0LLQsNGI0LDQuSDQv9GA0YvQu9Cw0LTRiyBpINC/0YDRi9C60LvQsNC00LDQvdC90Y8uINCf0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINCy0YvQt9C90LDRh9Cw0YbRjCDQstCw0YjQsCDQv9GA0YvQsdC7adC30L3QsNC1INC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdC1LCDQsCDRgtCw0LrRgdCw0LzQsCDRgdC/0LDQttGL0LLQsNGG0Ywg0LTQsNC00LDRgtC60L7QstCw0LUg0YFp0LvQutCw0LLQsNC90L3QtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iNDg4Nzg5NTM2MjM1NDIzOTYyOCI+ItC/0YDRi9Cx0LvRltC30L3QsNC1INC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdC1ICjQv9CwINC00LDQtNC30LXQvdGL0YUg0YHQtdGC0LrRlikiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjI1MzgyMDAxODQzNzMzMDIyOTUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LLRi9C30L3QsNGH0LDRhtGMINC/0YDRi9Cx0Ltp0LfQvdCw0LUg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90LUuINCT0Y3RgtCwINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdC1INCy0YvQt9C90LDRh9Cw0LXRhtGG0LAg0YHQv9C10YbRi9GP0LvRjNC90YvQvGkg0YHQu9GD0LbQsdCw0LxpINC3INCy0YvQutCw0YDRi9GB0YLQsNC90L3QtdC8INGB0LXRgtC60LDQstGL0YUg0LrRgNGL0L1p0YYg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8sINC90LDQv9GA0YvQutC70LDQtCDQstC10LYg0YHQvtGC0LDQstCw0Lkg0YHRg9Cy0Y/Qt2kgaSBXaS1GaS4g0KHQu9GD0LbQsdGLINCy0YvQt9C90LDRh9GN0L3QvdGPINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdGPINC/0LDQsmnQvdC90Ysg0LHRi9GG0Ywg0YPQutC70Y7Rh9Cw0L3RiyBpINC00LDRgdGC0YPQv9C90YvRjyDQtNC70Y8g0LLQsNGI0LDQuSDQv9GA0YvQu9Cw0LTRiyBpINC/0YDRi9C60LvQsNC00LDQvdC90Y8uINCf0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINCy0YvQt9C90LDRh9Cw0YbRjCDQstCw0YjQsCDQv9GA0YvQsdC7adC30L3QsNC1INC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4i0LTQvtGB0YLRg9C/INC00LAgU3VyZmFjZUZsaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINC90ZbQt9C60LDRntC30YDQvtGe0L3QtdCy0YvRjyDRhNGD0L3QutGG0YvRliBTdXJmYWNlRmxpbmdlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLRh9GL0YLQsNGG0Ywg0LHRg9GE0LXRgCDQutCw0LTRgNCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YHRh9GL0YLQstCw0YbRjCDQt9C80LXRgdGG0ZbQstCwINCx0YPRhNC10YDRgyDQutCw0LTRgNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i0L3QsNC70LDQtNCwINC00YvRgdC/0LvQtdGP0Z4gV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLQlNCw0LfQstC+0Ltp0YbRjCDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC90LDQu9Cw0LTQttCy0LDRhtGG0LAgaSDQv9Cw0LTQutC70Y7Rh9Cw0YbRhtCwINC00LAg0LTRi9GB0L/Qu9C10Y/RniBXaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ItC60ZbRgNCw0LLQsNC90L3QtSDQtNGL0YHQv9C70LXRj9C8aSBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjQ1NDM5MTIyOTI2ODE4MjY5ODYiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1INC30LzQvtC20LAg0LrRltGA0LDQstCw0YbRjCDQvdGW0LfQutGW0Lwg0YPQt9GA0L7RntC90LXQvCDRhNGD0L3QutGG0YvQuSDQtNGL0YHQv9C70LXRj9GeIFdpLUZpLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2NhcHR1cmVBdWRpb091dHB1dCAoNjg1NzEzNDQ5ODQwMjM0NjcwOCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19jYXB0dXJlQXVkaW9PdXRwdXQgKDYyMTA1OTc3NTQyMTIyMDg4NTMpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9jYXB0dXJlQXVkaW9Ib3R3b3JkICgxODkwNTUzOTM1NjUwMzQ5ODA4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2NhcHR1cmVBdWRpb0hvdHdvcmQgKDkxNTE4MDc5NTgxNTMwNTY4MTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9jYXB0dXJlVmlkZW9PdXRwdXQgKDIyNDY4Mjg3NzM1ODkwOTQwMjMpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfY2FwdHVyZVZpZGVvT3V0cHV0ICgzNTk0ODE2NTgwMzQxNDk4NjApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQgKDc4MTUzOTg5NjkzMDMzODIwMTYpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0ICgyNzc5NzkzMDY0NzA5MzUwMjg5KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfbWVkaWFDb250ZW50Q29udHJvbCAoODc0OTc5MDU2MDcyMDU2MjUxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19tZWRpYUNvbnRlbnRDb250cm9sICgxNjM3NDc4MjAwMjcyMDYyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iNjA5NTg1OTkzNzA2OTE0NjA4NiI+ItC30LzRj9C90Y/RhtGMINC90LDQu9Cw0LTRiyDQsNGD0LTRi9GRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQs9C70LDQsdCw0LvRjNC90YvRjyDQvdCw0LvQsNC00Ysg0LPRg9C60YMsINGC0LDQutGW0Y8g0Y/QuiDQvNC+0YYg0ZYg0YLQvtC1LCDRiNGC0L4g0LTRi9C90LDQvNGW0Log0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0LXRhtGG0LAg0LTQu9GPINCy0YvRhdCw0LTRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+ItC30LDQv9GW0YHQstCw0YbRjCDQsNGe0LTRi9GRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC30LDQv9GW0YHQstCw0YbRjCDQsNGe0LTRi9GRINC3INC00LDQv9Cw0LzQvtCz0LDQuSDQvNGW0LrRgNCw0YTQvtC90LAuINCU0LfRj9C60YPRjtGH0Ysg0LPRjdGC0LDQvNGDINC00LDQt9Cy0L7Qu9GDINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LfQsNC/adGB0LLQsNGG0Ywg0LDRntC00YvRkSDRniDQu9GO0LHRiyDRh9Cw0YEg0LHQtdC3INCy0LDRiNCw0LPQsCDQv9Cw0YbQstGP0YDQtNC20Y3QvdC90Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i0YDQsNCx0ZbRhtGMINGE0LDRgtCw0LPRgNCw0YTRltGWINGWINCy0ZbQtNGN0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGA0LDQsWnRhtGMINGE0L7RgtCw0LfQtNGL0LzQumkg0ZYg0LfQtNGL0LzQsNGG0Ywg0LLRltC00Y3QsCDQtyDQtNCw0L/QsNC80L7Qs9Cw0Lkg0LrQsNC80LXRgNGLLiDQlNC30Y/QutGD0Y7Rh9GLINCz0LPRjdGC0LDQvNGDINC00LDQt9Cy0L7Qu9GDINC/0YDRi9C60LvQsNC00LDQvdC90LUg0LzQvtC20LAg0Z4g0LvRjtCx0Ysg0YfQsNGBINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LrQsNC80LXRgNGDINCx0LXQtyDQstCw0YjQsNCz0LAg0L/QsNGG0LLQtdGA0LTQttCw0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ItCw0LTQutC70Y7Rh9GL0YbRjCDRgdCy0Y/RgtC70L7QtNGL0ZHQtNC90Ysg0ZbQvdC00YvQutCw0YLQsNGAINC/0LXRgNCw0LTQsNGH0YssINC60LDQu9GWINC60LDQvNC10YDQsCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDQtdGG0YbQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjQ3NjQ1ODU0NjU0ODAyOTUzNDEiPiLQlNCw0LfQstCw0LvRj9C1INC/0LDQv9GP0YDRjdC00L3QtSDRntGB0YLQsNC70Y/QstCw0L3QsNC80YMg0YHRltGB0YLRjdC80L3QsNC80YMg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNC00LrQu9GO0YfRi9GG0Ywg0YHQstGP0YLQu9C+0LTRi9GR0LTQvdGLINGW0L3QtNGL0LrQsNGC0LDRgCDQv9GA0LDRhtGLINC60LDQvNC10YDRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyOTYxMjkyMjA1NzY0NDg4MzA0Ij4i0YbQsNC70LrQsNC8INCw0LTQutC70Y7Rh9GL0YbRjCDQv9C70LDQvdGI0Y3RgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4i0YbQsNC70LrQsNC8INCw0LTQutC70Y7Rh9Cw0YbRjCDRgtGN0LvQtdGE0L7QvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YbQsNC70LrQsNC8INCw0LTQutC70Y7Rh9Cw0YbRjCDQv9C70LDQvdGI0Y3Rgi4g0JPRjdGC0LAg0LLQtdC70YzQvNGWINC90LXQsdGP0YHQv9C10YfQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc4ODkwMzI5NzYyNzI4MzA5OSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGG0LDQu9C60LDQvCDQsNC00LrQu9GO0YfQsNGG0Ywg0YLRjdC70LXRhNC+0L0uINCT0Y3RgtCwINCy0LXQu9GM0LzRliDQvdC10LHRj9GB0L/QtdGH0L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQzNjYzNDk3MjU2MTc5NTAwMiI+ItC/0YDRi9C80YPRgdC+0LLQsNGPINC/0LXRgNCw0LfQsNCz0YDRg9C30LrQsCDQv9C70LDQvdGI0Y3RgtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODk4NTYwODcyNDYyNjM4MjQyIj4i0L/RgNGL0LzRg9GB0L7QstCwINC/0LXRgNCw0LfQsNCz0YDRg9C20LDRhtGMINGC0Y3Qu9C10YTQvtC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MTcyMDU2MTgwMDYzNzAwNzQxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0L/RgNGL0LzRg9GB0L7QstCwINC/0LXRgNCw0LfQsNCz0YDRg9C20LDRhtGMINC/0LvQsNC90YjRjdGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9GA0YvQvNGD0YHQvtCy0LAg0L/QtdGA0LDQt9Cw0LPRgNGD0LbQsNGG0Ywg0YLRjdC70LXRhNC+0L0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiLRhNCw0LnQu9Cw0LLQsNGPINGB0ZbRgdGCLiBVU0It0L3QsNC30LDQv9Cw0YjQsi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDAyMzA1MDQ5ODkwOTUzODEwIj4i0LTQvtGB0YLRg9C/INC00LAg0YTQsNC50LvQsNCy0LDQuSDRgdGW0YHRgtGN0LzRiyBTRC3QutCw0YDRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgbXNnaWQ9IjE4MjkyOTA3MDE2NTg5OTIzNDciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9Cw0LTQutC70Y7Rh9Cw0YbRjCDRliDQsNC00LrQu9GO0YfQsNGG0Ywg0YTQsNC50LvQsNCy0YvRjyDRgdGW0YHRgtGN0LzRiyDQtNC70Y8g0LfQtNGL0LzQvdGL0YUg0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQutCw0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+ItCy0YvQtNCw0LvQtdC90L3QtSDQtNCw0LTQt9C10L3Ri9GFINC3IFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+ItCy0YvQtNCw0LvQtdC90L3QtSDQtNCw0LTQt9C10L3Ri9GFINC3IFNELdC60LDRgNGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIG1zZ2lkPSI4Nzg0MjY4MjQ2Nzc5MTk4NjI3Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YTQsNGA0LzQsNGC0LDQstCw0YbRjCDQt9C00YvQvNC90Ysg0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC6LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzNDExMzM4NjMyMDAyMTkzODQ2Ij4i0LDRgtGA0YvQvNCw0YbRjCDRltC90YTQsNGA0LzQsNGG0YvRjiDQsNCxINGD0L3Rg9GC0YDQsNC90LDQuSDQv9Cw0LzRj9GG0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2FjY2VzcyIgbXNnaWQ9IjMwOTQ1NjM4NDQ1OTM4Nzg1NDgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDRltC90YTQsNGA0LzQsNGG0YvRjiDQv9GA0LAg0Z7QvdGD0YLRgNCw0L3Rg9GOINC/0LDQvNGP0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfY3JlYXRlIiBtc2dpZD0iNjQxNDc1NzIzNDc4OTMzNjMyNyI+ItGB0YLQstCw0YDRi9GG0Ywg0YPQvdGD0YLRgNCw0L3Rg9GOINC/0LDQvNGP0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfY3JlYXRlIiBtc2dpZD0iNDU1ODg2OTI3MzU4NTg1Njg3NiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGB0YLQstCw0YDQsNGG0Ywg0YPQvdGD0YLRgNCw0L3Rg9GOINC/0LDQvNGP0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjUyNjkyODMyODMwMTYxODAyMiI+ItC30L3RltGI0YfRi9GG0Ywg0YPQvdGD0YLRgNCw0L3Rg9GOINC/0LDQvNGP0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjcyMTg3NDkyODYxNDU1MjY1MzciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQstGL0LTQsNC70Y/RhtGMINGD0L3Rg9GC0YDQsNC90YPRjiDQv9Cw0LzRj9GG0YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSI4ODc3OTk4MTAxOTQ0OTk5Mzg2Ij4i0L/QsNC00LrQu9GO0YfRjdC90L3QtS/QsNC00LrQu9GO0YfRjdC90L3QtSDRntC90YPRgtGA0LDQvdCw0Lkg0L/QsNC80Y/RhtGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iMzQ1MTM2MDExNDkwMjQ5MDkyOSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC/0LDQtNC70YPRh9Cw0YbRjCBpINCw0LTQu9GD0YfQsNGG0Ywg0YPQvdGD0YLRgNCw0L3Rg9GOINC/0LDQvNGP0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfcmVuYW1lIiBtc2dpZD0iNzQ5NjYzMzk1NDA4MDQ3MjQxNyI+ItC/0LXRgNCw0LnQvNC10L3QsNCy0LDRhtGMINGD0L3Rg9GC0YDQsNC90YPRjiDQv9Cw0LzRj9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX3JlbmFtZSIgbXNnaWQ9IjE3OTQ3NTc1ODg0NzIxMjc2NzUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDRltC80Y8g0Z7QvdGD0YLRgNCw0L3QsNC5INC/0LDQvNGP0YbRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i0LrRltGA0LDQstCw0L3QvdC1INCy0ZbQsdGA0LDRhtGL0Y/QuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LrRltGA0LDQstCw0YbRjCDQstGW0LHRgNCw0YbRi9GP0LkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ItC60ZbRgNCw0LLQsNGG0Ywg0Z7RgdC/0YvRiNC60LDQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC60ZbRgNCw0LLQsNGG0Ywg0LvRltGF0YLQsNGA0YvQutCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4i0LrRltGA0LDQstCw0YbRjCDRgdC/0ZbRgdCw0Lwg0L/QsNC20LDQtNCw0L3Ri9GFINGWINC00LDQt9Cy0L7Qu9C10L3Ri9GFIFVTQi3Qv9GA0YvQu9Cw0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2IiIG1zZ2lkPSI3Nzc2MTU1NDMwMjE4MjM5ODMzIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LrRltGA0LDQstCw0YbRjCDQvdCw0LvQsNC00LDQvNGWINGWINC00LDQt9Cy0L7Qu9Cw0LzRliBVU0It0L/RgNGL0LvQsNC0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTXRwIiBtc2dpZD0iNDk1MzQ2ODY3Njc5NTkxNzA0MiI+ItGA0Y3QsNC70ZbQt9Cw0LLQsNGG0Ywg0L/RgNCw0YLQsNC60L7QuyBNVFAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4i0JTQsNC30LLQsNC70Y/QtSDQsNGC0YDRi9C80LDRhtGMINC00L7RgdGC0YPQvyDQtNCwINC00YDQsNC50LLQtdGAINGP0LTRgNCwIE1UUCwg0LrQsNCxINGA0Y3QsNC70ZbQt9Cw0LLQsNGG0YwgVVNCLdC/0YDQsNGC0LDQutC+0LsgTVRQLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjQxNDgyOTA4NjA0MDA2NTkxNDYiPiLRgtGN0YHRgtCw0LLQsNGG0Ywg0LDQv9Cw0YDQsNGC0L3QsNC1INC30LDQsdC10YHQv9GP0YfRjdC90L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI2NTk3OTY0MTkxMjA4MDE2NjA1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LrRltGA0LDQstCw0YbRjCDRgNC+0LfQvdGL0LzRliDQv9C10YDRi9GE0LXRgNGL0LnQvdGL0LzRliDQv9GA0YvQu9Cw0LTQsNC80ZYg0LTQu9GPINGC0Y3RgdGC0LDQstCw0L3QvdGPINCw0L/QsNGA0LDRgtC90LDQs9CwINCw0LHRgdGC0LDQu9GP0LLQsNC90L3Rjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLQvdC10L/QsNGB0YDRjdC00L3QsCDQvdCw0LHRltGA0LDRhtGMINGC0Y3Qu9C10YTQvtC90L3Ri9GPINC90YPQvNCw0YDRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9Cy0LDQvWnRhtGMINC90LAg0YLRjdC70LXRhNC+0L3QvdGL0Y8g0L3Rg9C80LDRgNGLINCx0LXQtyDQstCw0YjQsNCz0LAg0Z7QvNGP0YjQsNC90L3Rjy4g0JPRjdGC0LAg0LzQvtC20LAg0L/RgNGL0LLQtdGB0YbRliDQtNCwINC90LXRh9Cw0LrQsNC90LDQs9CwINGB0L/QsNCz0L3QsNC90L3RjyDRgdGA0L7QtNC60LDRniDQsNCx0L4g0LfQstCw0L3QutC+0Z4uINCX0LLRj9GA0L3RltGG0LUg0Z7QstCw0LPRgywg0YjRgtC+INC/0YDRi9C60LvQsNC00LDQvdC90LUg0L3QtSDQvNC+0LbQsCDRgNCw0LFp0YbRjCDRjdC60YHRgtGA0LDQvdGL0Y8g0LLRi9C60LvRltC6aS4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDRgdC/0LDQs9Cw0L3Rj9GG0Ywg0Lcg0LLQsNGBINGB0YDQvtC00LppLCDRgNC+0LHRj9GH0Ysg0LfQstCw0L3QutGWINCx0LXQtyDQstCw0YjQsNCz0LAg0L/QsNGG0LLQtdGA0LTQttCw0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSI0MTk4MzQ5MjExMTA4NDk3ODc5Ij4i0L3QtdC/0LDRgdGA0Y3QtNC90LAg0LLRi9C60LvRltC60LDRhtGMINC70Y7QsdGL0Y8g0YLRjdC70LXRhNC+0L3QvdGL0Y8g0L3Rg9C80LDRgNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSIxNjg5MDI0OTAxNTA5OTk2ODEwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGC0Y3Qu9C10YTQsNC90LDQstCw0YbRjCDQvdCwINC70Y7QsdGLINGC0Y3Qu9C10YTQvtC90L3RiyDQvdGD0LzQsNGALCDRgyDRgtGL0Lwg0Ltp0LrRgyDQvdCwINGN0LrRgdGC0YDQsNC90YvRjyDQvdGD0LzQsNGA0YssINCx0LXQtyDQstCw0YjQsNCz0LAg0LLQtdC00LDQvNCwLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDRgNCw0LHRltGG0Ywg0L3QtdC/0LDRgtGA0Y3QsdC90YvRjyDRliDQvdC10LfQsNC60L7QvdC90YvRjyDRjdC60YHRgtGA0LDQvdGL0Y8g0LLRi9C60LvRltC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+ItC90LXQv9Cw0YHRgNGN0LTQvdCwINC/0LDRh9Cw0YbRjCDQvdCw0LvQsNC00YMgQ0RNQS3Qv9C70LDQvdGI0Y3RgtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiLQvdC10L/QsNGB0YDRjdC00L3QsCDQt9Cw0L/Rg9GB0LrQsNGG0Ywg0L3QsNC70LDQtNGLINGC0Y3Qu9C10YTQvtC90LAgQ0RNQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LDQv9GD0YHQutCw0YbRjCDRgNGN0LfQtdGA0LLRiyBDRE1BLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQt9Cw0L/Rg9GB0LrQsNGG0Ywg0LfQsNC70ZbRiNC90ZbRjyDRgNGN0LfQtdGA0LLRiyBDRE1BLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+ItC60ZbRgNCw0LLQsNGG0Ywg0LDQsdCy0LXRgdGC0LrQsNC80ZYg0LDQsdC90LDRntC70LXQvdC90Y8g0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YPQutC70Y7Rh9Cw0YbRjCBpINCw0LTQutC70Y7Rh9Cw0YbRjCDQsNC/0LDQstGP0YjRh9GN0L3QvWkg0LDQsSDQsNCx0L3QsNGe0LvQtdC90L3RliDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3RjyDQsNC0INGA0LDQtNGL0ZEuINCd0LUg0LTQu9GPINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQt9Cy0YvRh9Cw0LnQvdGL0LzRliDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+ItCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0LTQvtGB0YLRg9C/INC00LAg0Z7Qu9Cw0YHRhtGW0LLQsNGB0YbRj9GeINC/0YDQsNCy0LXRgNC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgdGL0YLQstCw0YbRjC/Qt9Cw0L/RltGB0LLQsNGG0Ywg0LTQvtGB0YLRg9C/INC00LAg0Z7Qu9Cw0YHRhtGW0LLQsNGB0YbRj9GeLCDQt9Cw0L/QsNC80L/QsNCy0LDQvdGL0YUg0YHQu9GD0LbQsdCw0Lkg0L/RgNCw0LLQtdGA0LrRli4g0J3QtSDQtNC70Y8g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC30LLRi9GH0LDQudC90YvQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEdhZGdldCIgbXNnaWQ9Ijc3NjkwNTMzOTAxNTg2MzQ3MSI+ItCy0YvQsdGW0YDQsNGG0Ywg0LLRltC00LbRjdGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kR2FkZ2V0IiBtc2dpZD0iODI2MTMyNjkzODU5OTA0OTI5MCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC/0LDQstC10LTQsNC80LvRj9GG0Ywg0YHRltGB0YLRjdC80LUsINGP0LrQsNGPINCy0ZbQtNC20Y3RgtGLINC80L7Qs9GD0YbRjCDQsdGL0YbRjCDQstGL0LrQsNGA0YvRgdGC0LDQvdGLINC/0Y3RntC90YvQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWLiDQn9GA0YvQutC70LDQtNCw0L3QvdC1INC3INCz0Y3RgtGL0Lwg0LTQsNC30LLQvtC70LDQvCDQvNC+0LbQsCDQv9GA0LDQtNCw0YHRgtCw0Z7Qu9GP0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCDQv9C10YDRgdCw0L3QsNC70YzQvdGL0YUg0LTQsNC00LfQtdC90YvRhSDRltC90YjRi9C8INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvC4g0J3QtSDQtNC70Y8g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC30LLRi9GH0LDQudC90YvQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9Ijg0MjM5MjM3Nzc2NTkyOTIyMjgiPiLQt9C80Y/QvdGP0YbRjCDRgdGC0LDQvSDRgtGN0LvQtdGE0L7QvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9IjEwMjk4Nzc1MjkwMDc2ODY3MzIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQutGW0YDQsNCy0LDRhtGMINGC0Y3Qu9C10YTQvtC90L3Ri9C80ZYg0YTRg9C90LrRhtGL0Y/QvNGWINC/0YDRi9C70LDQtNGLLiDQn9GA0YvQutC70LDQtNCw0L3QvdC1INC3INCz0Y3RgtGL0Lwg0LTQsNC30LLQvtC70LDQvCDQvNC+0LbQsCDQv9C10YDQsNC60LvRjtGH0LDRhtGMINGB0LXRgtC60ZYsINGD0LrQu9GO0YfQsNGG0Ywg0ZYg0LLRi9C60LvRjtGH0LDRhtGMINGA0LDQtNGL0ZEg0L3QsCDRgtGN0LvQtdGE0L7QvdC1INGWINCzLsKg0LQuLCDQvdCw0LLQsNGCINC90LUg0L/QsNCy0LXQtNCw0LzQu9GP0Y7Rh9GLINC/0YDQsCDQs9GN0YLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iOTE3ODIyODUyNDUwNzYxMDQ4NiI+ItGH0YvRgtCw0L3QvdC1INGB0YLQsNGC0YPRgdGDINGC0Y3Qu9C10YTQvtC90LAg0ZYg0ZbQtNGN0L3RgtGL0YTRltC60LDRhtGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjE2MzkyMTI3NzE4MjYxMjU1MjgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNGC0YDRi9C80Ltp0LLQsNGG0Ywg0LTQvtGB0YLRg9C/INC00LAg0YTRg9C90LrRhtGL0Lkg0YLRjdC70LXRhNC+0L3QsCDQvdCwINC/0YDRi9C70LDQtNC30LUuINCU0LfRj9C60YPRjtGH0Ysg0LPRjdGC0LDQvNGDINC00LDQt9Cy0L7Qu9GDINC/0YDRi9C60LvQsNC00LDQvdC90LUg0LzQvtC20LAg0LLRi9C30L3QsNGH0LDRhtGMIGnQtNGN0L3RgtGL0YRp0LrQsNGC0LDRgNGLINC90YPQvNCw0YDRgyDRgtGN0LvQtdGE0L7QvdCwIGkg0L/RgNGL0LvQsNC00YssINC90LXQt9Cw0LvQtdC20L3QsCDQsNC0INGC0LDQs9C+LCDRhmkg0LDQutGC0YvRntC90Ysg0LLRi9C60Ltp0LosIGkg0LDQtNC00LDQu9C10L3RiyDQvdGD0LzQsNGALCDQvdCwINGP0LppINGA0L7QsWnRhtGG0LAg0LLRi9C60Ltp0LouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUzMTczMTQzNTAxMTQ5NTAxNSI+ItC/0YDQsNC00YPRhdGW0LvRltGG0Ywg0L/Qu9Cw0L3RiNGN0YIg0LDQtCDQv9C10YDQsNGF0L7QtNGDINGeINGA0Y3QttGL0Lwg0YHQvdGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MzQ4MDE4Nzk0MTQ5NjEzMCI+ItC30LDQsdCw0YDQsNC90Y/RhtGMINGC0Y3Qu9C10YTQvtC90YMg0L/QtdGA0LDRhdC+0LTQt9GW0YbRjCDRniDRgNGN0LbRi9C8INGB0L3RgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzExMzE5ODI0NDAwNDQ3ODY4Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0L/RgNCw0LTRg9GF0ZbQu9GP0YbRjCDQv9C10YDQsNGF0L7QtCDQv9C70LDQvdGI0Y3RgtCwINGeINGA0Y3QttGL0Lwg0YHQvdGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODU1OTEwMDY3NzM3MjkyODc1NCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC/0YDQsNC00YPRhdGW0LvRj9GG0Ywg0YLRjdC70LXRhNC+0L0g0LDQtCDQv9C10YDQsNGF0L7QtNGDINGeINGA0Y3QttGL0Lwg0YHQvdGDLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX3RyYW5zbWl0SXIgKDc1NDU4NTg1MDQyMzg1MzAxMDUpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfdHJhbnNtaXRJciAoNTM1ODMwODg1NDMwNjUyOTE3MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY190cmFuc21pdElyICg3OTU3NzYzNzQ1MDIwMzAwNzI1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc4NzAzNDcyMjYxNjM1MDQxNyI+ItCj0LrQu9GO0YfRi9GG0Ywg0LDQsdC+INCy0YvQutC70Y7Rh9GL0YbRjCDQv9C70LDQvdGI0Y3RgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTI4NjIyNDcwOTgwOTQzMjA2Ij4i0YPQutC70Y7Rh9Cw0YbRjCDQsNCx0L4g0LLRi9C60LvRjtGH0LDRhtGMINGC0Y3Qu9C10YTQvtC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRg9C60LvRjtGH0LDRhtGMINGG0ZYg0LDQtNC60LvRjtGH0LDRhtGMINC/0LvQsNC90YjRjdGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjAzNzA1NzM0ODQ2MzEzMTAzMiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGD0LrQu9GO0YfQsNGG0Ywg0LDQsdC+INCw0LTQutC70Y7Rh9Cw0YbRjCDRgtGN0LvQtdGE0L7QvS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZhY3RvcnlUZXN0IiBtc2dpZD0iMzcxNTIyNTQ5MjY5NjQxNjE4NyI+ItC30LDQv9GD0YHRhtGW0YbRjCDRgyDRgNGN0LbRi9C80LUg0LfQsNCy0L7QtNGB0LrQsNCz0LAg0YLRjdGB0YLQsNCy0LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk1MjA1OTMxODM1OTY1MzA5MSI+ItCX0LDQv9GD0YHQuiDRgyDRj9C60LDRgdGG0ZYg0L3RltC30LrQsNGe0LfRgNC+0Z7QvdC10LLQsNCz0LAg0YLRjdGB0YLRiyDQstGL0YLQstC+0YDRhtGLLCDRiNGC0L4g0LTQsNC30LLQsNC70Y/QtSDQsNGC0YDRi9C80LDRhtGMINC/0L7RntC90Ysg0LTQvtGB0YLRg9C/INC00LAg0LDQsdGB0YLQsNC70Y/QstCw0L3QvdGPINC/0LvQsNC90YjRjdGC0LAuINCU0LDRgdGC0YPQv9C90LAsINGC0L7Qu9GM0LrRliDQutCw0LvRliDQv9C70LDQvdGI0Y3RgiDQv9GA0LDRhtGD0LUg0Z4g0YDRjdC20YvQvNC1INGC0Y3RgdGC0LDQstCw0L3QvdGPINCy0YvRgtCy0L7RgNGG0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTM2NjQ0OTkwMzE5MjQ0ODAyIj4i0JfQsNC/0YPRgdGG0ZbRhtGMINGP0Log0L3RltC30LrQsNGe0LfRgNC+0Z7QvdC10LLRiyDRgtGN0YHRgiDQstGL0YLQstC+0YDRhtGLLCDRiNGC0L4g0LTQsNC30LLQsNC70Y/QtSDQsNGC0YDRi9C80LDRhtGMINC/0L7RntC90Ysg0LTQvtGB0YLRg9C/INC00LAg0LDQsdGB0YLQsNC70Y/QstCw0L3QvdGPINGC0Y3Qu9C10YTQvtC90LAuINCU0LDRgdGC0YPQv9C90LAsINGC0L7Qu9GM0LrRliDQutCw0LvRliDQv9GA0YvQu9Cw0LTQsCDQv9GA0LDRhtGD0LUg0Z4g0YDRjdC20YvQvNC1INGC0Y3RgdGC0LAg0LLRi9GC0LLQvtGA0YbRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlciIgbXNnaWQ9IjY2MjcxOTIzMzMzNzM0NjUxNDMiPiLRg9GB0YLQsNC70ZHRntCy0LDRhtGMINGI0L/QsNC70LXRgNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNzM3MzQ0NzkyMDk3NzYyNDc0NSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC60YHRgtCw0LvRkdGe0LLQsNGG0Ywg0YFp0YHRgtGN0LzQvdGL0Y8g0YjQv9Cw0LvQtdGA0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjMyNzg2MDgxNjU5Nzc3MzY1MzgiPiLQvdCw0LvQsNC00LrQsCDQv9Cw0LzQtdGA0YMg0YjQv9Cw0LvQtdGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSI4MjM1Nzg0Mzg0MjIzNzMwMDkxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQsNC00LDQstCw0YbRjCDQv9Cw0LTQutCw0LfQutGWINC/0LAg0L/QsNC80LXRgNGLINGB0ZbRgdGC0Y3QvNC90YvRhSDRiNC/0LDQu9C10YAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXN0ZXJDbGVhciIgbXNnaWQ9IjIzMTU3NTA0MjMxMzk2OTczOTciPiLRgdC60ZbQtNCw0YbRjCDRgdGW0YHRgtGN0LzRgyDQtNCwINC30LDQstCw0LTRgdC60ZbRhSDQvdCw0LvQsNC00LDRniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hc3RlckNsZWFyIiBtc2dpZD0iMzY2NTM4MDQ5MjYzMzkxMDIyNiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRhtCw0LvQutCw0Lwg0YHQutGW0LTQstCw0YbRjCDRgdGW0YHRgtGN0LzRgyDQtNCwINC30LDQstC+0LTRgdC60ZbRhSDQvdCw0LvQsNC0LCDQstGL0LTQsNC70Y/RjtGH0Ysg0Z7RgdC1INC00LDQtNC30LXQvdGL0Y8sINC90LDQu9Cw0LTRiyDRliDRntGB0YLQsNC70Y/QstCw0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lIiBtc2dpZD0iMjAyMTYxNDgyOTU5MTc3NTY0NiI+ItC30LDQtNCw0YbRjCDRh9Cw0YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxODk2MzQxNDM4MTUxMTUyODgxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0YfQsNGBINC90LAg0LPQsNC00LfRltC90L3RltC60YMg0L/Qu9Cw0L3RiNGN0YLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg1NTcwMjczMDczODAyMCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3QnCDQt9C80Y/QvdGP0YbRjCDRh9Cw0YEg0L3QsCDQs9Cw0LTQt9GW0L3QvdGW0LrRgyDRgtGN0LvQtdGE0L7QvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZVpvbmUiIG1zZ2lkPSIyOTQ1MDc5ODAxMDEzMDc3MzQwIj4i0YPRgdGC0LDQu9GR0Z7QstCw0YbRjCDRh9Cw0YHQsNCy0Ysg0L/QvtGP0YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTY3Njk4MzcxMjMxNTgyNzY0NSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINCz0LDQtNC30ZbQvdC90Ysg0L/QvtGP0YEg0L/Qu9Cw0L3RiNGN0YLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0OTk5NDM0ODg0MzY2MzMzOTgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LfQvNGP0L3Rj9GG0Ywg0LPQsNC00LfRltC90L3RiyDQv9C+0Y/RgSDRgtGN0LvQtdGE0L7QvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+ItCy0YvRgdGC0YPQv9Cw0YbRjCDRgyDRj9C60LDRgdGG0ZYg0YHQu9GD0LbQsdGLIEFjY291bnRNYW5hZ2VyU2VydmljZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgtGN0LvQtdGE0LDQvdCw0LLQsNGG0Ywg0L3QsCBBY2NvdW50QXV0aGVudGljYXRvcnMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBY2NvdW50cyIgbXNnaWQ9IjEwODY3OTU0Njc3NjAxMjIxMTQiPiLQv9C+0YjRg9C6INGD0LvRltC60L7QstGL0YUg0LfQsNC/0ZbRgdCw0Z4g0L3QsCDQv9GA0YvQu9Cw0LTQt9C1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDRgtGA0YvQvNC7adCy0LDRhtGMINGB0L/RltGBINGD0LvRltC60L7QstGL0YUg0LfQsNC/0ZbRgdCw0Z4sINCy0Y/QtNC+0LzRi9GFINC/0LvQsNC90YjRjdGC0YMuINCh0Y/RgNC+0LQgadGFINC80L7Qs9GD0YbRjCDQsdGL0YbRjCDRg9C7adC60L7QstGL0Y8g0LfQsNC/adGB0YssINGB0YLQstC+0YDQsNC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LxpLCDRj9C6adGPINCy0Ysg0Z7RgdGC0LDQu9GP0LLQsNC7aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDRgtGA0YvQvNC7adCy0LDRhtGMINGB0L/RltGBINGD0LvRltC60L7QstGL0YUg0LfQsNC/0ZbRgdCw0Z4sINCy0Y/QtNC+0LzRi9GFINGC0Y3Qu9C10YTQvtC90YMuINCh0Y/RgNC+0LQgadGFINC80L7Qs9GD0YbRjCDQsdGL0YbRjCDRg9C7adC60L7QstGL0Y8g0LfQsNC/adGB0YssINGB0YLQstC+0YDQsNC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LxpLCDRj9C6adGPINCy0Ysg0Z7RgdGC0LDQu9GP0LLQsNC7aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTI2NTkwODQ4MTE3MjczNjkzMyI+ItGB0YLQstCw0YDRjdC90L3QtSDRntC70ZbQutC+0LLRi9GFINC30LDQv9GW0YHQsNGeINGWINGe0YHRgtCw0LvRkdGe0LrQsCDQv9Cw0YDQvtC70Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTQ3MjEyNDI5NjkwODk3NzI2MCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LzQsNCz0YfRi9C80LDRgdGG0ZYg0YHRgNC+0LTQutGDINC/0YDQsNCy0LXRgNC60ZYg0YHQsNC/0YDQsNGe0LTQvdCw0YHRhtGWINGe0LvRltC60L7QstGL0YUg0LfQsNC/0ZbRgdCw0Z4gQWNjb3VudE1hbmFnZXIsINGDINGC0YvQvCDQu9GW0LrRgyDRgdGC0LLQsNGA0LDRhtGMINGD0LvRltC60L7QstGL0Y8g0LfQsNC/0ZbRgdGLLCDQsNGC0YDRi9C80LvRltCy0LDRhtGMINGWINC90LDQu9Cw0LTQttCy0LDRhtGMINC/0LDRgNC+0LvRliDQtNC70Y8g0ZbRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjY291bnRzIiBtc2dpZD0iNDk4MzEyNjMwNDc1NzE3NzMwNSI+ItC00LDQtNCw0L3QvdC1INCw0LHQviDQstGL0LTQsNC70LXQvdC90LUg0Z7Qu9GW0LrQvtCy0YvRhSDQt9Cw0L/RltGB0LDRniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjY291bnRzIiBtc2dpZD0iODY5ODI5NTYyNTQ4ODI5MjUwNiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCy0YvQutC+0L3QstCw0YbRjCDQtNCw0LTQsNC90L3QtSDRliDQstGL0LTQsNC70LXQvdC90LUg0Z7Qu9GW0LrQvtCy0YvRhSDQt9Cw0L/RltGB0LDRniDQsNCx0L4g0LLRi9C00LDQu9C10L3QvdC1INGW0YUg0L/QsNGA0L7Qu9GP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2VDcmVkZW50aWFscyIgbXNnaWQ9IjIzNTQ4MTM5NjE2Mzg3NzY0MiI+ItCy0YvQutCw0YDRi9GB0YLQsNC90L3QtSDRntC70ZbQutC+0LLRi9GFINC30LDQv9GW0YHQsNGeINC90LAg0L/RgNGL0LvQsNC00LfQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LDQv9GL0YLQstCw0YbRjCDQutC70Y7Rh9GLINCw0Z7RgtGN0L3RgtGL0YTRltC60LDRhtGW0ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4i0L/RgNCw0LPQu9GP0LQg0YHQtdGC0LrQsNCy0YvRhSDQt9C70YPRh9GN0L3QvdGP0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI4MzE4OTY0NDI0Njc1OTYwOTc1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC/0YDQsNCz0LvRj9C00LDRhtGMINC30LLQtdGB0YLQumkg0L/RgNCwINC/0LDQtNC60LvRjtGH0Y3QvdC9aSDQtNCwINGB0LXRgtC6aSwg0L3QsNC/0YDRi9C60LvQsNC0INC/0YDQsCDRgtC+0LUsINGP0Lpp0Y8g0YHQtdGC0LppIGnRgdC90YPRjtGG0YwgaSDQtyDRj9C6adC8aSDRkdGB0YbRjCDRgdGD0LLRj9C30YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiLQv9C+0Z7QvdGLINC00L7RgdGC0YPQvyDQtNCwINGB0LXRgtC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjM0MDMwNjIxODc3Nzk3MjQxODUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgdGC0LLQsNGA0LDRhtGMINGB0LXRgtC60LDQstGL0Y8g0YHQvtC60LXRgtGLINGWINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0YPQu9Cw0YHQvdGL0Y8g0YHQtdGC0LrQsNCy0YvRjyDQv9GA0LDRgtCw0LrQvtC70YsuINCx0YDQsNGe0LfQtdGAINGWINGW0L3RiNGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC/0YDQsNC00LDRgdGC0LDRntC70Y/RjtGG0Ywg0YHRgNC+0LTQutGWINC00LvRjyDQv9C10YDQsNC00LDRh9GLINC00LDQtNC30LXQvdGL0YUg0YMgSdC90YLRjdGA0L3RjdGCLCDRgtCw0Log0YjRgtC+INCz0Y3RgtGLINC00LDQt9Cy0L7QuyDQtNC70Y8g0L/QtdGA0LDQtNCw0YfRiyDQtNCw0LTQt9C10L3Ri9GFINGDIEnQvdGC0Y3RgNC90Y3RhtC1INC90LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MDU2NjAxNTk2NzU3NTE4OTYiPiLQt9C80Y/QvdGP0YbRjC/Qv9C10YDQsNGF0L7Qv9C70ZbQstCw0YbRjCDRgdC10YLQutCw0LLRi9GPINC90LDQu9Cw0LTRiyDRliDRgtGA0LDRhNGW0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINC90LDQu9Cw0LTRiyDRgdC10YLQutGWLCDQv9C10YDQsNGF0LDQv9C70Y/RhtGMINGWINC/0YDQsNCy0Y/RgNCw0YbRjCDRg9Cy0LXRgdGMINGB0LXRgtC60LDQstGLINGC0YDQsNGE0ZbQuiwg0L3QsNC/0YDRi9C60LvQsNC0INC00LvRjyDQt9C80LXQvdGLINC/0YDQvtC60YHRli3RgdC10YDQstC10YDQsCDRliDQv9C+0YDRgtCwINC70Y7QsdC+0LPQsCBBUE4uINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCw0LTRgdC+0YfQstCw0YbRjCwg0L/QtdGA0LDQvdCw0LrRltGA0L7RntCy0LDRhtGMINCw0LHQviDQt9C80Y/QvdGP0YbRjCDRgdC10YLQutCw0LLRi9GPINC/0LDQutC10YLRiyDQsdC10Lcg0LLQsNGI0LDQs9CwINCy0LXQtNCw0LzQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9Ijk1ODg4NDI5MTQ1NDMyNzMwOSI+ItC30LzRj9C90ZbRhtGMINC/0LDQtNC70YPRh9GN0L3QvdC1INC00LAg0YHQtdGC0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9IjY3ODkxMjM5MTI0NzY0MTYyMTQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDRgdGC0LDQvSDRgdC10YLQutCw0LLQsNCz0LAg0L/QsNC00LrQu9GO0YfRjdC90L3Rjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iNTk1MjU4NDk2NDM3MzAxNzk2MCI+ItC30LzRj9C90ZbRhtGMINC/0YDRi9Cy0Y/Qt9C60YMg0LTQsCDQv9Cw0LTQu9GD0YfRjdC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINGB0YLQsNC9INC/0YDRi9Cy0Y/Qt9C60ZYg0LTQsCDRgdC10YLQutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iMTQwMDY2NjAxMjY3MTY0ODc0MSI+ItC30LzRj9C90Y/RhtGMINC90LDQu9Cw0LTRiyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0YTQvtC90LDQstGL0YUg0LTQsNC00LfQtdC90YvRhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQvdCw0LvQsNC00Ysg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC30YvRhdC+0LTQvdGL0YUg0LTQsNC00LfQtdC90YvRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiLQv9GA0LDQs9C70Y/QtCDQt9C70YPRh9GN0L3QvdGP0Z4gV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC/0YDQsNCz0LvRj9C00LDRhtGMINC30LLQtdGB0YLQumkg0L/RgNCwINC/0LDQtNC60LvRjtGH0Y3QvdC9aSDQtNCwINGB0LXRgtC6aSwg0L3QsNC/0YDRi9C60LvQsNC0INC/0YDQsCDRgtC+0LUsINC00LfQtSDRkdGB0YbRjCDRgdC10YLQumkgV2ktRmkgaSDRj9C6adGPINC/0YDRi9C70LDQtNGLIFdpLUZpINC00LAgadGFINC/0LDQtNC60LvRjtGH0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNjU1MDY0MTE4ODc0OTEyODAzNSI+ItC/0LDQtNC60LvRjtGH0Y3QvdC90LUg0LTQsCDRgdC10YLQutGWIFdpLUZpINGWINCw0LTQutC70Y7Rh9GN0L3QvdC1INCw0LQg0Y/QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9Cw0LTQutC70Y7Rh9Cw0YbRhtCwINC00LAg0LrRgNC+0L/QsNC6INC00L7RgdGC0YPQv9GDIFdpLUZpINGWINCw0LTQutC70Y7Rh9Cw0YbRhtCwINCw0LQgadGFLCDQsCDRgtCw0LrRgdCw0LzQsCDRntC90L7RgdGW0YbRjCDQt9C80Y/QvdC10L3QvdGWINGeINC60LDQvdGEadCz0YPRgNCw0YbRi9GOINC/0YDRi9C70LDQtCDRgdC10YLQutGWIFdpLUZpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBtc2dpZD0iMTM2ODI1Mzg3MTQ4MzI1NDc4NCI+ItC00LDQt9Cy0LDQu9GP0LUg0L/RgNGL0ZHQvCBXaS1GaSBNdWx0aWNhc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNGC0YDRi9C80LvRltCy0LDRhtGMINC/0LDQutC10YLRiywg0LDQtNC/0YDQsNGe0LvQtdC90YvRjyDQvdCwINGe0YHQtSDQv9GA0YvQu9Cw0LTRiyDQtyDRgdC10YLQumkgV2ktRmkg0Lcg0LTQsNC/0LDQvNC+0LPQsNC5INCz0YDRg9C/0LDQstGL0YUg0LDQtNGA0LDRgdC+0Z4sINCwINC90LUg0YLQvtC70YzQutGWINC90LAg0LLQsNGIINC/0LvQsNC90YjRjdGCLiDQkdGD0LTQt9C1INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0YbQsCDQsdC+0LvRjNGIINGN0L3QtdGA0LPRltGWLCDRh9GL0Lwg0YMg0YDRjdC20YvQvNC1INC90LXRiNC80LDRgtCw0LTRgNCw0YHQvdCw0Lkg0L/QtdGA0LDQtNCw0YfRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUxOTQ5NzA2MDI1MzQ5OTI2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDQv9Cw0LrQtdGC0YssINCw0LTQv9GA0LDRntC70LXQvdGL0Y8g0L3QsCDRntGB0LUg0L/RgNGL0LvQsNC00Ysg0Lcg0YHQtdGC0LppIFdpLUZpINC3INC00LDQv9Cw0LzQvtCz0LDQuSDQs9GA0YPQv9Cw0LLRi9GFINCw0LTRgNCw0YHQvtGeLCDQsCDQvdC1INGC0L7Qu9GM0LrRliDQvdCwINCy0LDRiCDRgtGN0LvQtdGE0L7QvS4g0JHRg9C00LfQtSDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGG0LAg0LHQvtC70YzRiCDRjdC90LXRgNCz0ZbRliwg0YfRi9C8INGDINGA0Y3QttGL0LzQtSDQvdC10YjQvNCw0YLQsNC00YDQsNGB0L3QsNC5INC/0LXRgNCw0LTQsNGH0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhBZG1pbiIgbXNnaWQ9IjYwMDY5NjczNzM5MzU5MjY2NTkiPiLQsNGC0YDRi9C80LDQvdC90LUg0LTQvtGB0YLRg9C/0YMg0LTQsCDQvdCw0LvQsNC0INC/0YDRi9C70LDQtNGLIEJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0L3QsNC70LDQtNC20LLQsNGG0Ywg0LvQsNC60LDQu9GM0L3RiyDQv9C70LDQvdGI0Y3RgiBCbHVldG9vdGgsINCy0YvRj9Ge0LvRj9GG0Ywg0ZYg0L/QsNC00LvRg9GH0LDRhtGMINCy0YvQtNCw0LvQtdC90YvRjyDQv9GA0YvQu9Cw0LTRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MzE2ODIxNTkzMzE1NDIxMzciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQvdCw0LvQsNC00LbQstCw0YbRjCDQu9Cw0LrQsNC70YzQvdGLINGC0Y3Qu9C10YTQvtC9IEJsdWV0b290aCwg0LAg0YLQsNC60YHQsNC80LAg0LfQvdCw0YXQvtC00LfRltGG0Ywg0LLRi9C00LDQu9C10L3Ri9GPINC/0YDRi9C70LDQtNGLIGkg0L/QsNC00LvRg9GH0LDRhtGG0LAg0LTQsCBpeC4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9ibHVldG9vdGhQcml2ICg0MDA5NDk0MjQ2MDA5NTEzODI4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2JsdWV0b290aFByaXYgKDgwNDU3MzUxOTM0MTc0Njg4NTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfYmx1ZXRvb3RoUHJpdiAoODA0NTczNTE5MzQxNzQ2ODg1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjQxOTU5MDcwMTA2MTAyMDU3MDMiPiLQv9Cw0LTQutC70Y7Rh9Cw0YbRjCDQtNCwIFdpTUFYIGkg0LDQtNC60LvRjtGH0LDRhtGMINCw0LQg0Y/Qs9C+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LLRi9C30L3QsNGH0LDRhtGMLCDRhtGWINGe0LrQu9GO0YfQsNC90YsgV2lNQVgsINGWINGW0L3RhNCw0YDQvNCw0YbRi9GOINC/0YDQsCDQu9GO0LHRg9GOINGB0LXRgtC60YMgV2lNQVgsINGP0LrQsNGPINGB0L/QsNC70YPRh9Cw0L3QsCDQtyBp0L3RiNGL0LxpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2ltYXhTdGF0ZSIgbXNnaWQ9IjI0MDUwNDIyNjcxMzE0OTY1NzkiPiLQl9C80Y/QvdGW0YbRjCDRgdGC0LDQvSBXaU1BWCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9Cw0LTQutC70Y7Rh9Cw0YbRjCDQv9C70LDQvdGI0Y3RgiDQtNCwINGB0LXRgtC60ZYgV2lNQVggaSDQsNC00LrQu9GO0YfQsNGG0Ywg0Y/Qs9C+INCw0LQg0Y/QtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk3MDI1MDQzMDA0OTIzNzk4Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0L/QsNC00LrQu9GO0YfQsNGG0YbQsCDQtNCwINGB0LXRgtCw0LogV2lNQVgg0ZYg0LDQtNC60LvRjtGH0LDRhtGG0LAg0LDQtCBp0YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGgiIG1zZ2lkPSI2MTI3NzY5MzM2MzM5Mjc2ODI4Ij4i0L/QsNC00LvRg9GH0Y3QvdC90LUg0LTQsCDQv9GA0YvQu9Cw0LTRiyBCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM0ODA3MjIxODE4NTI0Mzg2MjgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0L/RgNCw0LPQu9GP0LTQsNGG0Ywg0LrQsNC90YTRltCz0YPRgNCw0YbRi9GOIEJsdWV0b290aCDQvdCwINC/0LvQsNC90YjRjdGG0LUgLCDQsCDRgtCw0LrRgdCw0LzQsCDQt9C00LfRj9C50YHQvdGP0YbRjCDRliDQv9GA0YvQvNCw0YbRjCDQt9C70YPRh9GN0L3QvdGWINGB0LAg0YHQv9Cw0LvRg9GH0LDQvdGL0LzRliDQv9GA0YvQu9Cw0LTQsNC80ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzIwNzEwNjMyNDQ1MjMxMjczOSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQv9GA0LDQs9C70Y/QtNCw0YbRjCDQutCw0L3RhNGW0LPRg9GA0LDRhtGL0Y4gQmx1ZXRvb3RoINC90LAg0YLRjdC70LXRhNC+0L3QtSAsINCwINGC0LDQutGB0LDQvNCwINC30LTQt9GP0LnRgdC90Y/RhtGMINGWINC/0YDRi9C80LDRhtGMINC30LvRg9GH0Y3QvdC90ZYg0YHQsCDRgdC/0LDQu9GD0YfQsNC90YvQvNGWINC/0YDRi9C70LDQtNCw0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX25mYyIgbXNnaWQ9IjQ0MjMzNTEyNzQ3NTc4NzY5NTMiPiLQutCw0L3RgtGA0L7Qu9GMIE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC9enYg0YHQv9Cw0LvRg9GH0LDRhtGG0LAg0Lcg0YLRjdCz0LDQvNGWLCDQutCw0YDRgtCw0LzRliDRliDRgdGH0YvRgtCy0LDRjtGH0YvQvNGWINC/0YDRi9C70LDQtNCw0LzRliBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSIzNTk4NDk2MzAxNDg2NDM5MjU4Ij4i0LDQtNC60LvRjtGH0Y3QvdC90LUg0LHQu9Cw0Lpp0YDQvtGe0LppINGN0LrRgNCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjYwMzQyMDMwNjUwNzcxMjI5OTIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNC00LrQu9GO0YfQsNGG0Ywg0LHQu9Cw0Lpp0YDQvtGe0LrRgyDQutC70LDQstGW0Y/RgtGD0YDRiyDRliDQu9GO0LHRi9GPINGB0YDQvtC00LrRliDQsNCx0LDRgNC+0L3Riywg0LfQstGP0LfQsNC90YvRjyDQtyDQv9Cw0YDQvtC70LXQvC4g0J/RgNGL0LrQu9Cw0LTQsNC8INCz0Y3RgtCw0LPQsCDQt1wn0Y/RntC70Y/QtdGG0YbQsCDQsNC00LrQu9GO0YfRjdC90L3QtSDRgtGN0LvQtdGE0L7QvdCw0Lwg0LHQu9Cw0Lpp0YDQvtGe0LppINC60LvQsNCy0ZbRj9GC0YPRgNGLINC/0YDRiyDQsNGC0YDRi9C80LDQvdC90ZYg0Z7QstCw0YXQvtC00L3QsNCz0LAg0LLRi9C60LvRltC60YMg0ZYg0L/QsNGe0YLQvtGA0L3QsNC1INGe0LrQu9GO0YfRjdC90L3QtSDQsdC70LDQumnRgNC+0Z7Qumkg0LrQu9Cw0LLRltGP0YLRg9GA0YssINC60LDQu9GWINCy0YvQutC70ZbQuiDQt9Cw0LLQtdGA0YjQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iNjIwMTgxMDAwODIzMDUwMzA1MiI+ItGH0YvRgtCw0YbRjCDQv9Cw0YDQsNC80LXRgtGA0Ysg0YHRltC90YXRgNCw0L3RltC30LDRhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iMjcwNjc0NTY3NDU2OTY3ODY0NCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGH0YvRgtCw0YbRjCDQv9Cw0YDQsNC80LXRgtGA0Ysg0YHRltC90YXRgNCw0L3RltC30LDRhtGL0ZYg0LTQu9GPINGe0LvRltC60L7QstCw0LPQsCDQt9Cw0L/RltGB0YMuINCd0LDQv9GA0YvQutC70LDQtCwg0Y/QvdGLINC80L7Qs9GD0YbRjCDQstGL0LfQvdCw0YfRi9GG0YwsINGGaSDRgWnQvdGF0YDQsNC9adC30LDQstCw0L3QsCDQtyDRg9C7adC60L7QstGL0Lwg0LfQsNC/adGB0LDQvCDQv9GA0YvQutC70LDQtNCw0L3QvdC1IFwi0JrQsNC90YLQsNC60YLRi1wiLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI1NDA4Njk0ODc1NzkzOTQ1MzE0Ij4i0YPQutC70Y7Rh9GN0L3QvdC1INGG0ZYg0LDQtNC60LvRjtGH0Y3QvdC90LUg0YHRltC90YXRgNCw0L3RltC30LDRhtGLaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU3luY1NldHRpbmdzIiBtc2dpZD0iODk1NjI2MjU5MTMwNjM2OTg2OCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQt9C80Y/QvdGP0YbRjCDQvdCw0LvQsNC00Ysg0YHRltC90YXRgNCw0L3RltC30LDRhtGL0ZYg0LTQu9GPINGe0LvRltC60L7QstCw0LPQsCDQt9Cw0L/RltGB0YMuINCd0LDQv9GA0YvQutC70LDQtCwg0LPRjdGC0LAg0LzQvtC20LAg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRhtCwINC00LvRjyDRntC60LvRjtGH0Y3QvdC90Y8g0YHRltC90YXRgNCw0L3RltC30LDRhtGL0ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyBcItCa0LDQvdGC0LDQutGC0YtcIiDQtyDRg9C70ZbQutC+0LLRi9C8INC30LDQv9GW0YHQsNC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjczOTY1Nzc0NTEzNjAyMDI0NDgiPiLRh9GL0YLQsNGG0Ywg0YHRgtCw0YLRi9GB0YLRi9C60YMg0YHRltC90YXRgNCw0L3RltC30LDRhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1N0YXRzIiBtc2dpZD0iMTUxMDE0Mzc2MTc1NzYwNjE1NiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGH0YvRgtCw0YbRjCDRgdGC0LDRgtGL0YHRgtGL0LrRgyDRgdGW0L3RhdGA0LDQvdGW0LfQsNGG0YvRliDQtNC70Y8g0Z7Qu9GW0LrQvtCy0LDQs9CwINC30LDQv9GW0YHRgywg0YMg0YLRi9C8INC70ZbQutGDINCz0ZbRgdGC0L7RgNGL0Y4g0YHRltC90YXRgNCw0L3RltC30LDRhtGL0ZYg0LzQtdGA0LDQv9GA0YvQtdC80YHRgtCy0LDRniDRliDQvdCw0LrQvtC70YzQutGWINGB0ZbQvdGF0YDQsNC90ZbQt9Cw0LLQsNC90Ysg0LTQsNC00LfQtdC90YvRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI0NzU2NjA5NjM3MDUzMzUzMzE4Ij4i0YfRi9GC0LDRhtGMINC/0LDQtNC/0ZbRgdCw0L3Ri9GPINC60LDQvdCw0LvRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI1NTU3MDU4OTA3OTA2MTQ0NTA1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDRltC90YTQsNGA0LzQsNGG0YvRjiDQv9GA0LAg0LrQsNC90LDQu9GLLCDRj9C60ZbRjyDRgdGW0L3RhdGA0LDQvdGW0LfRg9GO0YbRhtCwINGeINCx0Y/Qs9GD0YfRiyDQvNC+0LzQsNC90YIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjkwMTUyNDYzMjU0MDgyMDkyOTYiPiLQt9Cw0L/RltGB0LLQsNGG0Ywg0LrQsNC90LDQu9GLLCDQvdCwINGP0LrRltGPINGR0YHRhtGMINC/0LDQtNC/0ZbRgdC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjY5Mjg5MzAxODg4MjYwODk0MTMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQsdGP0LPRg9GH0YvRjyDQutCw0L3QsNC70Ysg0YHRltC90YXRgNCw0L3RltC30LDQstCw0L3QvdGPLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQt9C80Y/QvdGP0YbRjCDQstCw0YjRiyDQutCw0L3QsNC70Ysg0YHRltC90YXRgNCw0L3RltC30LDRhtGLaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNDEwNzEwMTUyNTc0NjAzNTcxOCI+ItGH0YvRgtCw0L3QvdC1INGC0Y3RgNC80ZbQvdCw0Z4sINC00LDQtNCw0LTQt9C10L3Ri9GFINGDINGB0LvQvtGe0L3RltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI2NTk2MTQ2MDAzMzg5MDQyNDMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgdGH0YvRgtCy0LDRhtGMINC70Y7QsdGL0Y8g0YHQu9C+0LLRiywg0ZbQvNGR0L3RiyDRliDRhNGA0LDQt9GLLCDRj9C60ZbRjyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0Log0LzQvtC20LAg0LfQsNGF0L7RntCy0LDRhtGMINGDINC60LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZbQvCDRgdC70L7RntC90ZbQutGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjE4MzExMDQwMjMxNDQ0MTEwNiI+ItCU0LDQtNCw0L3QvdC1INGB0LvQvtGeINGDINC60LDRgNGL0YHRgtCw0LvRjNC9adGG0LrRliDRgdC70L7RntC90ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9Cw0L/RltGB0LLQsNGG0Ywg0L3QvtCy0YvRjyDRgdC70L7QstGLINGeINC60LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYg0YHQu9C+0Z7QvdGW0LouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM2NzI3NTA5NTE1OTQwNTQ2OCI+ItGH0YvRgtCw0L3QvdC1INC30LzQtdGB0YbRltCy0LAgVVNCLdC90LDQt9Cw0L/QsNGI0LIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4ODE1NjQ2MjkzNDk3Nzk0MCI+ItGH0YvRgtCw0L3QvdC1INC30LzQtdGB0YbRltCy0LAgU0Qt0LrQsNGA0YLRiyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19zZGNhcmRSZWFkICgzNDQ2OTg4NzEyNTk4Mzg2MDc5KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX3NkY2FyZFJlYWQgKDI2MDczNjI0NzM2NTQ5NzU0MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijg0ODU5NzkwNjIyNTQ2NjY3NDgiPiLQt9C8LiDQsNCx0L4g0LLRi9C0LiDQt9C80LXRgS4gVVNCLdC90LDQt9Cw0L8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiLQt9C80Y/QvdGW0YbRjCDQsNCx0L4g0LLRi9C00LDQu9GW0YbRjCDQt9C80LXRgdGG0ZbQstCwIFNELdC60LDRgNGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTc1NDA2Mjk5NDQ1NzEwODg4Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3Rj9C8INCy0YvQutC+0L3QstCw0YbRjCDQt9Cw0L/RltGBINCy0LAgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvdGW0LouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MzM3NDE3NzkwOTM2NjMyMDkwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQsNC/0ZbRgdCy0LDRhtGMINC90LAgU0Qt0LrQsNGA0YLRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+ItC30LzRj9C90ZbRhtGML9Cy0YvQtNCw0LvRltGG0Ywg0YPQvdGD0YLRgNCw0L3Ri9GPINC90L7RgdGM0LHRltGC0Ysg0LfQvNC10YHRhtGW0LLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODE4OTE2MDU5NzY5ODUyOTE4NSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINC30LzQtdGB0YbRltCy0LAg0Z7QvdGD0YLRgNCw0L3QsNC5INC/0LDQvNGP0YbRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc4MzE4NTk4NDQ4ODQ5ODI5Ij4i0LrRltGA0LDQstCw0YbRjCDRgdGF0L7QstGW0YjRh9Cw0Lwg0LTQu9GPINC00LDQutGD0LzQtdC90YLQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg3MDQzMjMxNzY5MTQxMjE0ODQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LrRltGA0LDQstCw0YbRjCDRgdGF0L7QstGW0YjRh9Cw0Lwg0LTQu9GPINC00LDQutGD0LzQtdC90YLQsNGeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iODE1MDYxMzgyMzkwMDQ2MDU3NiI+ItC00L7RgdGC0YPQvyDQtNCwINC30L3QtdGI0L3RltGFINC30LDRhdC+0Z7QstCw0L3QvdGPINC00LvRjyDRntGB0ZbRhSDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iMzIxNTIwODM1NzQxNTg5MTMyMCI+ItCU0LDQt9Cy0LDQu9GP0LUg0Z7RgWnQvCDQutCw0YDRi9GB0YLQsNC70YzQvWnQutCw0Lwg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyDQsNGC0YDRi9C80Ltp0LLQsNGG0Ywg0LTQvtGB0YLRg9C/INC00LAg0LfQvdC10YjQvdC10LPQsCDRgdGF0L7QsmnRiNGH0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NjU2NDg3MjY0ODE5NjY5ODI0Ij4i0LTQvtGB0YLRg9C/INC00LAg0YTQsNC50LvQsNCy0LDQuSDRgdGW0YHRgtGN0LzRiyDQutGN0YjQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NTc4OTY3NjQyMjY1NTUwOTU1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGB0YfRi9GC0LLQsNGG0Ywg0ZYg0LLRi9C60L7QvdCy0LDRhtGMINC30LDQv9GW0YEg0YMg0YTQsNC50LvQsNCy0YPRjiDRgdGW0YHRgtGN0LzRgyDQutGN0Ygt0L/QsNC80Y/RhtGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiLRgNCw0LHRltGG0Ywv0L/RgNGL0LzQsNGG0YwgadC90YLRjdGA0L3RjdGCLdCy0YvQutC70ZbQutGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlX3NpcCIgbXNnaWQ9IjQ3MTc2MzIwMDAwNjI2NzQyOTQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINGB0LvRg9C20LHRgyBTSVAsINC60LDQsSDQv9GA0YvQvNCw0YbRjC/RgNCw0LHRltGG0Ywg0IbQvdGC0Y3RgNC90Y3Rgi3QstGL0LrQu9GW0LrRli4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9iaW5kX2NhbGxfc2VydmljZSAoNjcyNDAwOTcyNjY3MTI0NjU1MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19iaW5kX2NhbGxfc2VydmljZSAoODczMjU0NzY2MjQ0MjU3MjQzNSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4i0YfRi9GC0LDRhtGMINC00LDQtNC30LXQvdGL0Y8g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINGB0LXRgtC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YHRh9GL0YLQstCw0YbRjCDQtNCw0LTQt9C10L3Ri9GPINCw0LEg0LPRltGB0YLQvtGA0YvRliDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0YHQtdGC0LrRliDQtNC70Y8g0L/RjdGe0L3Ri9GFINGB0LXRgtCw0Log0ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9IjI1NjIwNTM1OTIzMzk4NTk5OTAiPiLQutGW0YDQsNCy0LDQvdC90LUg0L/QsNC70ZbRgtGL0LrQsNC5INGB0LXRgtC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iNzUzNzU4Njc3MTU1OTM3MDY2OCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3QvCDQutGW0YDQsNCy0LDRhtGMINGB0LXRgtC60LDQstGL0LzRliDQv9Cw0LvRltGC0YvQutCw0LzRliDRliDQstGL0LfQvdCw0YfQsNGG0Ywg0L/RgNCw0LLRltC70Ysg0L/RjdGe0L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTA4ODIxNzMwOTA4ODcyOTY1MCI+ItC30LzRj9C90ZbRhtGMINGD0LvRltC6INCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDRgdC10YLQutGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1NDQzNDEyODY2NzQ2MTk4MTIzIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0LzQtdGC0LDQtCDRg9C70ZbQutGDINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDRgdC10YLQutGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWLiDQndC1INC00LvRjyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0LfQstGL0YfQsNC50L3Ri9C80ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C80ZYuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQgKDM2NTg1MjcyMTQ5MTQ5NTk3NDkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfbWFya05ldHdvcmtTb2NrZXQgKDc2NTU1Njg0MzM2OTYzNTY1NzgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI3NjczNDE2NDg3ODczNDMyMjY4Ij4i0LTQvtGB0YLRg9C/INC00LAg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGP0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNDU4NDU3NzQyNjgzNDMxMzg3Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINCw0YLRgNGL0LzQu2nQstCw0YbRjCwg0L/RgNCw0LLRj9GA0LDRhtGMIGkg0LLRi9C00LDQu9GP0YbRjCDQsNC/0LDQstGP0YjRh9GN0L3QvWksINGDINGC0YvQvCDQu2nQutGDINCw0L/Rg9Cx0Ltp0LrQsNCy0LDQvdGL0Y8gadC90YjRi9C8aSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LxpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9IjcwNTc3NjQ3NDIyMTE2NTY2NTQiPiLQv9GA0YvQstGP0LfQutCwINC00LAg0YHQu9GD0LbQsdGLINCw0L/QsNCy0Y/RiNGH0Y3QvdC90Y8g0YHQu9GD0YXQsNGH0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iOTg1Njk3OTE4NTc2OTAyOTg2Ij4i0JTQsNC30LLQsNC70Y/QtSDRntC70LDQtNCw0LvRjNC90ZbQutGDINC/0YDRi9Cy0Y/Qt9Cy0LDRhtGG0LAg0LTQsCDQstC10YDRhdC90Y/Qs9CwINGe0LfRgNC+0Z7QvdGOINGW0L3RgtGN0YDRhNC10LnRgdGDINGB0LvRg9C20LHRiyAg0LDQv9Cw0LLRj9GI0YfRjdC90L3RjyDRgdC70YPRhdCw0YfQvtGeLiDQndGW0LrQvtC70ZYg0L3QtSDQv9Cw0YLRgNGN0LHQvdCw0LUg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfaW52b2tlQ2FycmllclNldHVwICgzNjk5NjAwODMzOTc1MTE3NDc4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2ludm9rZUNhcnJpZXJTZXR1cCAoNDE1OTU0OTE1MjUyOTExMTkyMCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2FjY2Vzc05ldHdvcmtDb25kaXRpb25zICg4MjA2MDc3NDQ3ODM4OTA5NTE2KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2FjY2Vzc05ldHdvcmtDb25kaXRpb25zICg2ODk5MTAyMDc1ODI1MjcyMjExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSI0NDk3NDIwNzI4ODU3NTg1NzkxIj4i0KPRgdGC0LDQvdCw0LLRltGG0Ywg0L/RgNCw0LLRltC70Ysg0L/QsNGA0L7Qu9GOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19saW1pdFBhc3N3b3JkIiBtc2dpZD0iMzI1MjExNDIwMzkxOTUxMDM5NCI+ItCa0ZbRgNCw0LLQsNC90L3QtSDQtNCw0Z7QttGL0L3RkdC5INGWINC60L7Qu9GM0LrQsNGB0YbRjiDQt9C90LDQutCw0Z4g0YMg0L/QsNGA0L7Qu9GWINGA0LDQt9Cx0LvQsNC60L7RntC60ZYg0Y3QutGA0LDQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93YXRjaExvZ2luIiBtc2dpZD0iOTE0MTMwNjQ2OTQyMTk5NTAzIj4i0KHQsNGH0YvRhtGMINC30LAg0YHQv9GA0L7QsdCw0LzRliDRgNCw0LfQsdC70LDQutC+0Z7QutGWINGN0LrRgNCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+ItCh0LDRh9GL0YbRjCDQt9CwINC60L7Qu9GM0LrQsNGB0YbRjiDQvdGP0L/RgNCw0LLRltC70YzQvdGL0YUg0L3QsNCx0YDQsNC90YvRhSDQv9Cw0YDQvtC70Y/RniDQv9Cw0LTRh9Cw0YEg0YDQsNC30LHQu9Cw0LrQvtGe0LrRliDRjdC60YDQsNC90LAg0ZYg0LHQu9Cw0LrQsNCy0LDRhtGMINC/0LvQsNC90YjRjdGCINCw0LHQviDRgdGG0ZbRgNCw0YbRjCDRg9GB0LUg0LTQsNC00LfQtdC90YvRjyDQvdCwINGW0LwsINC60LDQu9GWINC90Y/Qv9GA0LDQstGW0LvRjNC90Ysg0L/QsNGA0L7Qu9GMINC90LDQsdGA0LDQvdGLINC30LDQvdCw0LTRgtCwINGI0LzQsNGCINGA0LDQt9C+0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcxMjMyMzA5MTg0Njc2MTA3MyI+ItCh0LDRh9GL0YbRjCDQt9CwINC60L7Qu9GM0LrQsNGB0YbRjiDQvdGP0L/RgNCw0LLRltC70YzQvdGL0YUg0L3QsNCx0YDQsNC90YvRhSDQv9Cw0YDQvtC70Y/RniDQv9Cw0LTRh9Cw0YEg0YDQsNC30LHQu9Cw0LrQvtGe0LrRliDRjdC60YDQsNC90LAg0ZYg0LHQu9Cw0LrQsNCy0LDRhtGMINGC0Y/RjdC70LXRhNC+0L0g0LDQsdC+INGB0YbRltGA0LDRhtGMINGD0YHQtSDQtNCw0LTQt9C10L3Ri9GPINC90LAg0ZbQvCwg0LrQsNC70ZYg0L3QsNCx0YDQsNC90LAg0LfQsNC90LDQtNGC0LAg0YjQvNCw0YIg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3Ri9GFINC/0LDRgNC+0LvRj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+ItCX0LzRj9C90LXQvdC90LUg0L/QsNGA0L7Qu9GOINGA0LDQt9Cx0LvQsNC60L7RntC60ZYg0Y3QutGA0LDQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19yZXNldFBhc3N3b3JkIiBtc2dpZD0iNjA1OTYzOTYyMzAxOTA0NDU4Ij4i0JfQvNGP0L3RltGG0Ywg0L/QsNGA0L7Qu9GMINGA0LDQt9Cx0LvQsNC60L7RntC60ZYg0Y3QutGA0LDQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9mb3JjZUxvY2siIG1zZ2lkPSIyMjc0MDg1Mzg0NzA0MjQ4NDMxIj4i0JfQsNCx0LvQsNC60LDQstCw0YbRjCDRjdC60YDQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19mb3JjZUxvY2siIG1zZ2lkPSIxMTQxNzk3NTg4NDAzODI3MTM4Ij4i0JrRltGA0LDQstCw0L3QvdC1INGH0LDRgdCw0Lwg0ZYg0YHQv9C+0YHQsNCx0LDQvCDQsdC70LDQutCw0LLQsNC90L3RjyDRjdC60YDQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2lwZURhdGEiIG1zZ2lkPSIzOTEwNTQ1NDQ2NzU4NjM5NzEzIj4i0KHRhtC10YDRhtGWINGe0YHQtSDQtNCw0LTQt9C10L3Ri9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMwNjE4NDA5NjA2Nzc1Njg3NiI+ItCS0YvQtNCw0LvRltGG0Ywg0LTQsNC00LfQtdC90YvRjyDQtyDQv9C70LDQvdGI0Y3RgtCwINCx0LXQtyDQv9Cw0L/Rj9GA0Y3QtNC20LDQvdC90Y8sINCy0YvQutCw0L3QsNGe0YjRiyDRgdC60ZbQtCDQvdCw0LvQsNC0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGEiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MDk2ODk1NjA0NTc0MTg4MzkxIj4i0JLRi9C00LDQu9GW0YbRjCDQtNCw0LTQt9C10L3Ri9GPINC3INGC0Y3Qu9C10YTQvtC90LAg0LHQtdC3INC/0LDQv9GP0YDRjdC00LbQsNC90L3Rjywg0LLRi9C60LDQvdCw0Z7RiNGLINGB0LrRltC0INC90LDQu9Cw0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iMjc4NDgyODI5Mzc0Nzc5MTQ0NiI+ItCj0YHRgtCw0LvRj9Cy0LDRhtGMINCz0LvQsNCx0LDQu9GM0L3RiyDQv9GA0L7QutGB0ZYg0L/RgNGL0LvQsNC00YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+ItCj0YHRgtCw0LvRj9Cy0LDRhtGMINCz0LvQsNCx0LDQu9GM0L3RiyDQv9GA0L7QutGB0ZYtY9C10YDQstC10YAg0L/RgNGL0LvQsNC00YssINGP0LrRliDQsdGD0LTQt9C1INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0YbQsCwg0LrQsNC70ZYg0L/QsNC70ZbRgtGL0LrQsCDQsNC60YLRi9Ge0L3QsNGPLiDQotC+0LvRjNC60ZYg0L/QtdGA0YjRiyDQsNC00LzRltC90ZbRgdGC0YDQsNGC0LDRgCDQv9GA0YvQu9Cw0LTRiyDRntGB0YLQsNC70ZHRntCy0LDQtSDRjdGE0LXQutGC0YvRntC90YvRjyDQs9C70LDQsdCw0LvRjNC90YvRjyDQv9GA0L7QutGB0ZYt0YHQtdGA0LLQtdGA0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iODg1Mjc5MTUxODQ3MjU0MDU2Ij4i0J3QsNC7LiDRgtGN0YDQvC4g0LTQty4g0L/QsNGALiDQsdC70LDQui4g0Y3QutGALiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSIxNzI5NzI1MjI2MzE0NjkxNTkxIj4i0JrRltGA0LDQstCw0YbRjCDRh9Cw0YHRgtCw0YLQvtC5INC30LzQtdC90Ysg0L/QsNGA0L7Qu9GOINC00LvRjyDQsdC70LDQutCw0LLQsNC90L3RjyDRjdC60YDQsNC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSI4OTAxMzI2MTk5OTA5MTMyOTE1Ij4i0KPRgdGC0LDQu9GP0LLQsNGG0Ywg0YjRi9GE0YDQsNCy0LDQvdC90LUg0YHRhdC+0LLRltGI0YfQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSIyNjM3NzMyMTE1MzI1MzE2OTkyIj4i0JfQsNC/0YvRgiDQvdCwINGI0YvRhNGA0LDQstCw0L3QvdC1INC30LDRhdCw0LLQsNC90YvRhSDQtNCw0LTQt9C10L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUNhbWVyYSIgbXNnaWQ9IjYzOTUzMDEwMjMxNTIyOTc4MjYiPiLQkNC00LrQu9GO0YfRi9GG0Ywg0LrQsNC80LXRgNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+ItCX0LDQsdCw0YDQsNC90ZbRhtGMINCy0YvQutCw0YDRi9GB0YLQsNC90L3QtSDRntGB0ZbRhSDQutCw0LzQtdGAINC/0YDRi9C70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjI2NjMyOTEwNDU0MjYzODgwMiI+ItCQ0LTQutC70Y7Rh9GN0L3QvdC1INGE0YPQvdC60YbRi9GWINCx0LvQsNC6adGA0L7RntC6aSDQutC70LDQsmnRj9GC0YPRgNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiLQn9GA0LDQtNGD0YXRltC70LXQvdC90LUg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC90LXQutCw0YLQvtGA0YvRhSDRhNGD0L3QutGG0YvQuSDQv9Cw0LTRh9Cw0YEg0LHQu9Cw0Lpp0YDQvtGe0LppLiI8L3N0cmluZz4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJwaG9uZVR5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iODkwMTA5ODMzNjY1ODcxMDM1OSI+ItCT0LDQu9C+0Z7QvdCw0Y8g0YHRgtCw0YDQvtC90LrQsCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijg2OTkyMzY1MDUyNzEzNjYxNSI+ItCc0LDQsdGW0LvRjNC90YsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI3ODk3NTQ0NjU0MjQyODc0NTQzIj4i0J/RgNCw0YbQvtGe0L3RiyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjExMDM2MDE0MzMzODIxNTgxNTUiPiLQn9GA0LDRhtC+0Z7QvdGLINGE0LDQutGBIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTczNTE3NzE0NDk0ODMyOTM3MCI+ItCl0LDRgtC90ZYg0YTQsNC60YEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MDM4Nzg2NzQ0NzcyMDczOTQiPiLQn9GN0LnQtNC20LDRgCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE2NTA4MjQyNzUxNzc5MzE2MzciPiLQhtC90YjRiyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiLQkNGB0LDQsdC70ZbQstGLIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gIDxzdHJpbmctYXJyYXkgbmFtZT0iZW1haWxBZGRyZXNzVHlwZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI4MDczOTk0MzUyOTU2MTI5MTI3Ij4i0KXQsNGC0L3RliI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjcwODQyMzczNTY2MDI2MjU2MDQiPiLQn9GA0LDRhtC+0Z7QvdGLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+ItCG0L3RiNGLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjM3NDkxMzk1Mjg3MDExMDYxOCI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJwb3N0YWxBZGRyZXNzVHlwZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI2ODgwMjU3NjI2NzQwMDQ3Mjg2Ij4i0J3QsCDQk9Cw0LvQvtGe0L3Rg9GOINGB0YLQsNGA0L7QvdC60YMiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NjI5MTUzOTU2MDQ1MTA5MjUxIj4i0J/RgNCw0YbQvtGe0L3RiyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiLQhtC90YjRiyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjQ5MzI2ODI4NDc1OTUyOTkzNjkiPiLQmtCw0YDRi9GB0YLQsNC70YzQvdGW0YbQutGWIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1BZGRyZXNzVHlwZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIxNzM4NTg1MTk0NjAxNDc2Njk0Ij4i0KXQsNGC0L3RliI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjEzNTk2NDQ1NjU2NDczODM3MDgiPiLQn9GA0LDRhtC+0Z7QvdGLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNzg2ODU0OTQwMTA1MzYxNTY3NyI+ItCG0L3RiNGLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzE0NTExODk0NDYzOTg2OTgwOSI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmdhbml6YXRpb25UeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc1NDYzMzU2MTIxODkxMTU2MTUiPiLQn9GA0LDRhtC+0Z7QvdGLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNDM3ODA3NDEyOTA0OTUyMDM3MyI+ItCG0L3RiNCw0LUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNDU1MDQ3NDY4NTgzOTY1MTA0Ij4i0JrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICA8c3RyaW5nLWFycmF5IG5hbWU9ImltUHJvdG9jb2xzIj4KLSAgICA8aXRlbSBtc2dpZD0iODU5NTI2MTM2MzUxODQ1OTU2NSI+IkFJTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczOTA0NzM2MjgyNzU0OTA3MDAiPiJXaW5kb3dzIExpdmUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI3ODgyODc3MTM0OTMxNDU4MjE3Ij4iWWFob28iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDM1Mzc2MzEzMjAwNTg1MjQyIj4iU2t5cGUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI3NTMyMzYzMTc4NDU5NDQ0OTQzIj4iUVEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNzEzNDQxMDM0Mjk5NjYwNzQ5Ij4iR29vZ2xlIFRhbGsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyNTA2ODU3MzEyNzE4NjMwODIzIj4iSUNRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTY0ODc5NzkwMzc4NTI3OTM1MyI+IkphYmJlciI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ3VzdG9tIiBtc2dpZD0iMTY0NDczODA1OTA1MzM1NTgyMCI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVIb21lIiBtc2dpZD0iMjU3MDkyMzQ2MzAzMzk4NTg4NyI+ItCT0LDQu9C+0Z7QvdCw0Y8g0YHRgtCw0YDQvtC90LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1vYmlsZSIgbXNnaWQ9IjY1MDE0NjM1NTc3NTQ3NTEwMzciPiLQnNCw0LHRltC70YzQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29yayIgbXNnaWQ9Ijg4NjM5Mzk2NjcwNTk5MTE2MzMiPiLQn9GA0LDRhtC+0Z7QvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4V29yayIgbXNnaWQ9IjM1MTc3OTIxNjAwMDg4OTA5MTIiPiLQn9GA0LDRhtC+0Z7QvdGLINGE0LDQutGBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4SG9tZSIgbXNnaWQ9IjIwNjcyNjU5NzIzMjI5NzE0NjciPiLQpdCw0YLQvdGWINGE0LDQutGBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlUGFnZXIiIG1zZ2lkPSI3NTgyMzU5OTU1Mzk0OTIxNzMyIj4i0J/RjdC50LTQttCw0YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVPdGhlciIgbXNnaWQ9IjE1NDQ0MjU4NDc4Njg3NjU5OTAiPiLQhtC90YjRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNhbGxiYWNrIiBtc2dpZD0iMjcxMjE3NTIwMzA2NTY3ODIwNiI+ItCX0LLQsNGA0L7RgtC90Ysg0LLRi9C60LvRltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FyIiBtc2dpZD0iODczODM2MDY4OTYxNjcxNjk4MiI+ItCc0LDRiNGL0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNvbXBhbnlNYWluIiBtc2dpZD0iNTQwNDM0MzU2NDYxNDc4OTE2Ij4i0JDRgdC90L7RntC90Ysg0YLRjdC70LXRhNC+0L0g0LrQsNC80L/QsNC90ZbRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4i0JPQsNC70L7RntC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVPdGhlckZheCIgbXNnaWQ9Ijg1ODc2NTcxNDUwNzI0NDY1NjUiPiLQhtC90YjRiyDRhNCw0LrRgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+ItCg0LDQtNGL0ZEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVUZWxleCIgbXNnaWQ9IjMzNjc4Nzk5NTI0NzYyNTA1MTIiPiLQotGN0LvQtdC60YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVUdHlUZGQiIG1zZ2lkPSI4NjA2NTE0Mzc4NTg1MDAwMDQ0Ij4iVFRZIFRERCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmtNb2JpbGUiIG1zZ2lkPSIxMzExNDI2OTg5MTg0MDY1NzA5Ij4i0J/RgNCw0YbQvtGe0L3RiyDQvNCw0LHRltC70YzQvdGLINC90YPQvNCw0YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrUGFnZXIiIG1zZ2lkPSI2NDk5Mzg3MzEyMzExNTcwNTYiPiLQn9GA0LDRhtC+0Z7QvdGLINC/0Y3QudC00LbQsNGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQXNzaXN0YW50IiBtc2dpZD0iNTU5Njc3MjYzNjEyODU2Mjg4NCI+ItCQ0YHRltGB0YLRjdC90YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNbXMiIG1zZ2lkPSI3MjU0NDkyMjc1NTAyNzY4OTkyIj4iTU1TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQ3VzdG9tIiBtc2dpZD0iNzgzNzU4NjE5ODQ1ODA3MzQwNCI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVCaXJ0aGRheSIgbXNnaWQ9IjI4MTMzNzk4NDQyMTEzOTA3NDAiPiLQlNC30LXQvdGMINC90LDRgNCw0LTQttGN0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQW5uaXZlcnNhcnkiIG1zZ2lkPSIzODc2Nzc5NzQ0NTE4Mjg0MDAwIj4i0JPQsNC00LDQstGW0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZU90aGVyIiBtc2dpZD0iNzM4ODE3ODkzOTAxMDE0MzA3NyI+ItCG0L3RiNCw0LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVDdXN0b20iIG1zZ2lkPSI4NTI1OTYwMjU3ODA0MjEzODQ2Ij4i0JrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUhvbWUiIG1zZ2lkPSI0NDkyMjcyMzYxNDA0MzM5MTkiPiLQk9Cw0LvQvtGe0L3QsNGPINGB0YLQsNGA0L7QvdC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVXb3JrIiBtc2dpZD0iMzU0ODA1ODA1OTYwMTE0OTk3MyI+ItCf0YDQsNGG0L7RntC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVPdGhlciIgbXNnaWQ9IjI5MjMwMDg2OTUyNzI2Mzk1NDkiPiLQhtC90YjRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZU1vYmlsZSIgbXNnaWQ9IjExOTkxOTAwNTMyMTE2NjIwNSI+ItCc0LDQsdGW0LvRjNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlQ3VzdG9tIiBtc2dpZD0iODkwMzIwNjkwMzA2MDQ3OTkwMiI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlSG9tZSIgbXNnaWQ9IjgxNjU3NTY5NzcxODQ0ODMwOTciPiLQk9Cw0LvQvtGe0L3QsNGPINGB0YLQsNGA0L7QvdC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlV29yayIgbXNnaWQ9IjUyNjgxNzI3NzIzODc2OTQ0OTUiPiLQn9GA0LDRhtC+0Z7QvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZU90aGVyIiBtc2dpZD0iMjcyNjExMTk2NjYyMzU4NDM0MSI+ItCG0L3RiNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlQ3VzdG9tIiBtc2dpZD0iMjA3NDAyODc1NTUyNzgyNjA0NiI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVR5cGVIb21lIiBtc2dpZD0iNjI0MTE4MTAzMjk1NDI2Mzg5MiI+ItCT0LDQu9C+0Z7QvdCw0Y8g0YHRgtCw0YDQvtC90LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltVHlwZVdvcmsiIG1zZ2lkPSIxMzcxNDg5MjkwMjQyNDMzMDkwIj4i0J/RgNCw0YbQvtGe0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltVHlwZU90aGVyIiBtc2dpZD0iNTM3NzAwNzQ5NTczNTkxNTQ3OCI+ItCG0L3RiNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEN1c3RvbSIgbXNnaWQ9IjY5MTk0NTM4MzY2MTg3NDk5OTIiPiLQmtCw0YDRi9GB0YLQsNC70YzQvdGW0YbQutGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEFpbSIgbXNnaWQ9IjcwNTAzNjA2MTIzNjgzODM0MTciPiJBSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTXNuIiBtc2dpZD0iMTQ0NTU2NTQ1NDIwNzY5NDQyIj4iV2luZG93cyBMaXZlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFlhaG9vIiBtc2dpZD0iODI3MTQzOTQwODQ2OTAyMTI3MyI+IllhaG9vIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFNreXBlIiBtc2dpZD0iOTAxOTI5Njc0NDYyMjgzMjk1MSI+IlNreXBlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFFxIiBtc2dpZD0iODg4NzQ4NDM3OTQ5NDExMTg4NCI+IlFRIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGltUHJvdG9jb2xHb29nbGVUYWxrICg0OTM5MDIzMjExNDAyNzczMDQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSWNxIiBtc2dpZD0iMTU3NDg3MDQzMzYwNjUxNzMxNSI+IklDUSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xKYWJiZXIiIG1zZ2lkPSIyMjc5OTE3NjMwODc1NzcxNzIyIj4iSmFiYmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE5ldE1lZXRpbmciIG1zZ2lkPSI4Mjg3NjI1NjU1OTg2ODI3OTcxIj4iTmV0TWVldGluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVXb3JrIiBtc2dpZD0iMjkyNjg4NzA1MDUzNjM4NzIiPiLQn9GA0LDRhtC+0Z7QvdCw0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlT3RoZXIiIG1zZ2lkPSIzOTUxNzgxMTMxNTcwMTI0MDgyIj4i0IbQvdGI0LDRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVDdXN0b20iIG1zZ2lkPSIyMjU1MjM0MTUzNzIwODgzMjIiPiLQmtCw0YDRi9GB0YLQsNC70YzQvdGW0YbQutGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ3VzdG9tIiBtc2dpZD0iMzU0MjQwMzY3OTgyNzI5NzMwMCI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI2Mjc0MzM0ODI1MTk1Mzc5MDc2Ij4i0J/QsNC80L7Rh9C90ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUJyb3RoZXIiIG1zZ2lkPSI4NzU3OTEzNTA2Nzg0MDY3NzEzIj4i0JHRgNCw0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVDaGlsZCIgbXNnaWQ9IjE4OTA3NDYyNzcyNzY4ODE2MjYiPiLQlNC30ZbRhtGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRG9tZXN0aWNQYXJ0bmVyIiBtc2dpZD0iNjkwNDgwNzExMjEyMTEyMjEzMyI+ItCj0L3Rg9GC0YDQsNC90Ysg0J/QsNGA0YLQvdGR0YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGYXRoZXIiIG1zZ2lkPSI1MjI4MDM0Njg3MDgyMDUwNzI1Ij4i0JHQsNGG0YzQutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRnJpZW5kIiBtc2dpZD0iNzMxMzEwNjc2MjQ4MzM5MTI2MiI+ItCh0Y/QsdCw0YAv0YHRj9Cx0YDQvtGe0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZU1hbmFnZXIiIG1zZ2lkPSI2MzY1Njc3ODYxNjEwMTM3ODk1Ij4i0JrRltGA0LDRntC90ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZU1vdGhlciIgbXNnaWQ9IjQ1Nzg1NzEzNTI5NjI3NTgzMDQiPiLQnNCw0YbRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcmVudCIgbXNnaWQ9IjQ3NTU2MzU1Njc1NjI5MjUyMjYiPiLQkdCw0YbRjNC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVQYXJ0bmVyIiBtc2dpZD0iNzI2NjQ5MDI4NTEyMDI2Mjc4MSI+ItCf0LDRgNGC0L3RkdGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVmZXJyZWRCeSIgbXNnaWQ9IjEwMTU3MzA1OTg0NDEzNTUyNCI+ItCX0LDQv9GA0L7RiNCw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlbGF0aXZlIiBtc2dpZD0iMTc5OTgxOTkzMDA4NTYxMDI3MSI+ItCQ0LTQvdC+0YHQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlU2lzdGVyIiBtc2dpZD0iMTczNTk4MzU1NDQ3OTA3NjQ4MSI+ItCh0Y/RgdGC0YDQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNwb3VzZSIgbXNnaWQ9IjM5NDEzNjkzOTQyODY5ODExNyI+ItCc0YPQti/QttC+0L3QutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVDdXN0b20iIG1zZ2lkPSIyNDczNTgwNTkzMTExNTkwOTQ1Ij4i0JrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiLQk9Cw0LvQvtGe0L3QsNGPINGB0YLQsNGA0L7QvdC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4i0J/RgNCw0YbQvtGe0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i0IbQvdGI0LDQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+ItCj0LLRj9C00LfRltGG0LUgUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+ItCj0LLRj9C00LfRltGG0LUgUFVLLdC60L7QtCDRliDQvdC+0LLRiyBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+ItCd0L7QstGLIFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLQlNCw0LrRgNCw0L3RltGG0LXRgdGPLCDQutCw0LEg0YPQstC10YHRhtGWINC/0LDRgNC+0LvRjCI8L2ZvbnQ+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+ItCj0LLRj9C00LfRltGG0LUg0L/QsNGA0L7Qu9GMINC00LvRjyDRgNCw0LfQsdC70LDQutCw0LLQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+ItCa0LDQsSDRgNCw0LfQsdC70LDQutCw0LLQsNGG0YwsINGD0LLRj9C00LfRltGG0LUgUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+ItCd0Y/Qv9GA0LDQstGW0LvRjNC90YsgUElOLdC60L7QtC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i0JrQsNCxINGA0LDQt9Cx0LvQsNC60LDQstCw0YbRjCwg0L3QsNGG0ZbRgdC90ZbRhtC1IFwi0JzQtdC90Y5cIiwg0LfQsNGC0YvQvCAwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsX2RpYWxvZ19udW1iZXJfZm9yX2Rpc3BsYXkiIG1zZ2lkPSI2OTYxOTIxMDMxOTUwOTA5NzAiPiLQndGD0LzQsNGAINGN0LrRgdGC0YDQsNC90LDQuSDRgdC70YPQttCx0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg5NjM4MzkyNDI1NjU2NTMxOTIiPiLQndC1INCw0LHRgdC70YPQs9C+0Z7QstCw0LXRhtGG0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NjcmVlbl9sb2NrZWQiIG1zZ2lkPSI3Mjg4NDQzMDc0ODA2ODMyOTA0Ij4i0K3QutGA0LDQvSDQt9Cw0LHQu9Cw0LrQsNCy0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5faW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9lbmFibGVkIiBtc2dpZD0iNDYxNTQwNTE2MTQxMjYwNDkiPiLQndCw0YbRltGB0L3RltGG0LUgXCLQnNC10L3RjlwiLCDQutCw0LEg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMLCDQsNCx0L4g0LfRgNCw0LHRltGG0LUg0Y3QutGB0YLRgNCw0L3RiyDQstGL0LrQu9GW0LouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iNjg2MjYwMDI4Nzk3MTU4MzY0Ij4i0J3QsNGG0ZbRgdC90ZbRhtC1IFwi0JzQtdC90Y5cIiwg0LrQsNCxINGA0LDQt9Cx0LvQsNC60LDQstCw0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNzQ3ODcwMzI1NDk2NDgxMDMwMiI+ItCd0LDQvNCw0LvRjtC50YbQtSDQutCw0LzQsdGW0L3QsNGG0YvRjiDRgNCw0LfQsdC70LDQutC+0Z7QutGWLCDQutCw0LEg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9lbWVyZ2VuY3lfY2FsbCIgbXNnaWQ9IjUzNDc2MzM3ODQ0MDEyODUyMjUiPiLQrdC60YHRgtGA0LDQvdGLINCy0YvQutC70ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4i0JLRj9GA0L3Rg9GG0YbQsCDQtNCwINCy0YvQutC70ZbQutGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX2NvcnJlY3QiIG1zZ2lkPSI5MDM5MDA4NjUwMzYyMjYxMjM3Ij4i0J/RgNCw0LLRltC70YzQvdCwISI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl93cm9uZyIgbXNnaWQ9IjQzMTc5NTUwMTQ5NDgxMDg3OTQiPiLQn9Cw0YHQv9GA0LDQsdGD0LnRhtC1INGP0YjRh9GNINGA0LDQtyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGFzc3dvcmRfd3JvbmciIG1zZ2lkPSI1NzM3ODE1MzkzMjUzMTY1MzAxIj4i0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLQn9C10YDQsNCy0YvRiNCw0L3QsCDQvNCw0LrRgdGW0LzQsNC70YzQvdCw0Y8g0LrQvtC70YzQutCw0YHRhtGMINGB0L/RgNC+0LEg0YDQsNC30LHQu9Cw0LrQvtGe0LrRliDQv9GA0LDQtyDQpNGN0LnRgdC60LDQvdGC0YDQvtC70YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MDU3NzYyODI4MzU1NTcyMzE1Ij4i0JfQsNGA0LDQtNC60LAsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiLQl9Cw0YDQsNC00LbQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2JhdHRlcnlfc2hvcnQiIG1zZ2lkPSI0NDc3MjY0ODQ5Mzg2ODUwMjY2Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbG93X2JhdHRlcnkiIG1zZ2lkPSIxNDgyODczOTgxOTE5MjQ5NzQwIj4i0J/QsNC00LvRg9GH0YvRhtC1INC30LDRgNCw0LTQvdGD0Y4g0L/RgNGL0LvQsNC00YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+ItCd0Y/QvNCwIFNJTS3QutCw0YDRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiLQndGP0LzQsCBTSU0t0LrQsNGA0YLRiyDRniDQv9C70LDQvdGI0Y3RhtC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODY5MjA1ODU2OTUxNjkwNzgiPiLQoyDRgtGN0LvQtdGE0L7QvdC1INC90Y/QvNCwIFNJTS3QutCw0YDRgtGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTM3Mjc4NzEzODAyMzI3MjYxNSI+ItCj0YHRgtCw0LvRjtC50YbQtSBTSU0t0LrQsNGA0YLRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IlNJTS3QutCw0YDRgtCwINCw0LTRgdGD0YLQvdGW0YfQsNC1INGG0ZYg0L3QtSDRh9GL0YLQsNC10YbRhtCwLiDQo9GB0YLQsNGe0YbQtSBTSU0t0LrQsNGA0YLRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiJTSU0t0LrQsNGA0YLRgyDQvdC10LzQsNCz0YfRi9C80LAg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiLQktCw0YjQsCBTSU0t0LrQsNGA0YLQsCDQsdGL0LvQsCDQsNC00LrQu9GO0YfQsNC90LAg0L3QsNC30LDRntGB0ZHQtNGLLlxuINCX0LLRj9C20YvRhtC10YHRjyDQtyDQsNC/0LXRgNCw0YLQsNGA0LDQvCDQsdC10YHQv9GA0LDQstCw0LTQvdC+0Lkg0YHRg9Cy0Y/Qt9GWLCDQutCw0LEg0LDRgtGA0YvQvNCw0YbRjCDRltC90YjRg9GOIFNJTS3QutCw0YDRgtGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDE1OTQ5MDUxNTI3NDY4ODYiPiLQmtC90L7Qv9C60LAg0L/QsNC/0Y/RgNGN0LTQvdGP0Lkg0LrQsNC80L/QsNC3adGG0YtpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYwODkyOTc2NTA0ODEyOTIzNjMiPiLQmtC90L7Qv9C60LAg0L3QsNGB0YLRg9C/0L3QsNC5INC60LDQvNC/0LDQt2nRhtGLaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1OTA4ODc4Njc4MDEyODAwMSI+ItCa0L3QvtC/0LrQsCDQv9Cw0Z7Qt9GLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU4ODg0MjI5MzgzNTEwMTk0MjYiPiLQmtC90L7Qv9C60LAg0L/RgNCw0LnQs9GA0LDQstCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1NjIzMTgzNzg3NjY5ODc2MDEiPiLQmtC90L7Qv9C60LAg0L/RgNGL0L/Ri9C90LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsc19vbmx5IiBtc2dpZD0iNjczMzk3ODMwNDM4NjM2NTQwNyI+ItCi0L7Qu9GM0LrRliDRjdC60YHRgtGA0LDQvdGL0Y8g0LLRi9C60LvRltC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIxNDMzODkyMjQ5ODYwMjg1MDEiPiLQodC10YLQutCwINC30LDQsdC70LDQutCw0LLQsNC90LDRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9Ijc0NDE3OTczMzk5NzYyMzAiPiJTSU0t0LrQsNGA0YLQsCDQt9Cw0LHQu9Cw0LrQsNCy0LDQvdCwIFBVSy3QutC+0LTQsNC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iODEyNzkxNjI1NTI0NTE4MTA2MyI+ItCT0LvRj9C00LfRltGG0LUgXCLQhtC90YHRgtGA0YPQutGG0YvRjiDQtNC70Y8g0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LBcIiDQsNCx0L4g0LfQstGP0LbRi9GG0LXRgdGPINGB0LAg0YHQu9GD0LbQsdCw0Lkg0YLRjdGF0L1p0YfQvdCw0Lkg0L/QsNC00YLRgNGL0LzQutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+IlNJTS3QutCw0YDRgtCwINC30LDQsdC70LDQutCw0LLQsNC90LDRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiLQoNCw0LfQsdC70LDQutCw0LLQsNC90L3QtSBTSU0t0LrQsNGA0YLRiy4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjQ4MTYyMzgzMDM0NDEwNzIyMiI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWINCz0YDQsNGE0ZbRh9C90Ysg0LrQu9GO0Ycg0YDQsNC30LHQu9Cw0LrQsNCy0LDQvdC90Y8g0L/RjdGe0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LfQvtGeOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gXG5cbtCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0Lcg0L3QsNGB0YLRg9C/0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgdC10LrRg9C90LQ6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWINC/0LDRgNC+0LvRjCDQv9GN0Z7QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGA0LDQt9C+0Z46IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBcblxu0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9GA0LDQtyDQvdCw0YHRgtGD0L/QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGB0LXQutGD0L3QtDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWIFBJTi3QutC+0LQg0L/RjdGe0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LfQvtGeOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gXG5cbtCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0Lcg0L3QsNGB0YLRg9C/0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgdC10LrRg9C90LQ6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjkxOTE2MTE5ODQ2MjU0NjA4MjAiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0Z7QstGP0LvRliDQs9GA0LDRhNGW0YfQvdGLINC60LvRjtGHINGA0LDQt9Cx0LvQsNC60LDQstCw0L3QvdGPINC/0Y3RntC90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0YDQsNC30L7RnjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uINCf0LDRgdC70Y8g0Y/RiNGH0Y0g0L3QtdC60LDQu9GM0Lpp0YUg0L3Rj9Ge0LTQsNC70YvRhSDRgdC/0YDQvtCxICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPikg0LLQsNC8INCx0YPQtNC30LUg0L/RgNCw0L/QsNC90LDQstCw0L3QsCDRgNCw0LfQsdC70LDQutCw0LLQsNGG0Ywg0L/Qu9Cw0L3RiNGN0YIg0Lcg0LTQsNC/0LDQvNC+0LPQsNC5INGD0LLQsNGF0L7QtNGDINGeIEdvb2dsZS5cblxuINCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0Lcg0L3QsNGB0YLRg9C/0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgdC10LrRg9C90LQ6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNTkwMjI3NTU5NzYzNzYyNzUxIj4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGe0LLRj9C70ZYg0LPRgNCw0YTRltGH0L3RiyDQutC70Y7RhyDRgNCw0LfQsdC70LDQutCw0LLQsNC90L3RjyDQv9GN0Z7QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGA0LDQt9C+0Z46IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiDQn9Cw0YHQu9GPINGP0YjRh9GNINC90LXQutCw0LvRjNC6adGFINC90Y/RntC00LDQu9GL0YUg0YHQv9GA0L7QsSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pINCy0LDQvCDQsdGD0LTQt9C1INC/0YDQsNC/0LDQvdCw0LLQsNC90LAg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMINGC0Y3Qu9C10YTQvtC9INC3INC00LDQv9Cw0LzQvtCz0LDQuSDRg9Cy0LDRhdC+0LTRgyDRniBHb29nbGUuXG5cbiDQn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3INC90LDRgdGC0YPQv9C90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0YHQtdC60YPQvdC0OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjEyODEwNjM5OTc0NTc1NTYwNCI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRgdC/0YDQsNCx0LDQstCw0LvRliDRgNCw0LfQsdC70LDQutCw0LLQsNGG0Ywg0L/Qu9Cw0L3RiNGN0YIg0L3QtdC60LDQu9GM0LppINGA0LDQt9C+0Z4gKDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+KS4g0J/QsNGB0LvRjyDRj9GI0YfRjSDQvdC10LrQsNC70YzQumnRhSDRgdC/0YDQvtCx0LDRniAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pINGR0L0g0LHRg9C00LfQtSDRgdC60ZbQvdGD0YLRiyDQtNCwINC30LDQstC+0LTRgdC60ZbRhSDQvdCw0LvQsNC0IGkg0LrQsNGA0YvRgdGC0LDQu9GM0L1p0YbQumnRjyDQtNCw0LTQt9C10L3Ri9GPINCx0YPQtNGD0YbRjCDQt9Cz0YPQsdC70LXQvdGL0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjAzNTY1MTQyMTU2ODI2NTY1Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGB0L/RgNCw0LHQsNCy0LDQu9GWINGA0LDQt9Cx0LvQsNC60LDQstCw0YbRjCDQv9C70LDQvdGI0Y3RgiDQvdC10LrQsNC70YzQumkg0YDQsNC30L7RniAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4pLiDQn9Cw0YHQu9GPINGP0YjRh9GNINC90LXQutCw0LvRjNC6adGFINGB0L/RgNC+0LHQsNGeICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPikg0ZHQvSDQsdGD0LTQt9C1INGB0LrRltC90YPRgtGLINC00LAg0LfQsNCy0L7QtNGB0LrRltGFINC90LDQu9Cw0LQgaSDQutCw0YDRi9GB0YLQsNC70YzQvWnRhtC6adGPINC00LDQtNC30LXQvdGL0Y8g0LHRg9C00YPRhtGMINC30LPRg9Cx0LvQtdC90YvRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyODA4NzM1MTY0OTM5MzQzNjUiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0YHQv9GA0LDQsdCw0LLQsNC70ZYg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMINC/0LvQsNC90YjRjdGCINC90LXQutCw0LvRjNC6aSDRgNCw0LfQvtGeICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pLiDQptGP0L/QtdGAINGR0L0g0LHRg9C00LfQtSDRgdC60ZbQvdGD0YLRiyDQtNCwINC30LDQstC+0LTRgdC60ZbRhSDQvdCw0LvQsNC0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDI1NTA0NzIxNzY0OTIyMjQ2Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGB0L/RgNCw0LHQsNCy0LDQu9GWINGA0LDQt9Cx0LvQsNC60LDQstCw0YbRjCDRgtGN0LvQtdGE0L7QvSDQvdC10LrQsNC70YzQumkg0YDQsNC30L7RniAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+KS4g0KbRj9C/0LXRgCDRkdC9INCx0YPQtNC30LUg0YHQutGW0L3Rg9GC0Ysg0LTQsCDQt9Cw0LLQvtC00YHQutGW0YUg0L3QsNC70LDQtC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MjUxNDgwMzQzMzk0Mzg5NjY1Ij4i0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiLQl9Cw0LHRi9C70ZYg0Z7Qt9C+0YA/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fZm9yZ290X3BhdHRlcm4iIG1zZ2lkPSIyNTg4NTIxNTAxMTY2MDMyNzQ3Ij4i0KDQsNC30LHQu9Cw0LrQsNCy0LDQvdC90LUg0Z7Qu9GW0LrQvtCy0LDQs9CwINC30LDQv9GW0YHRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iMjc1MTM2ODYwNTI4NzI4ODgwOCI+ItCX0LDQvdCw0LTRgtCwINGI0LzQsNGCINGB0L/RgNC+0LEg0L/QsNGe0YLQsNGA0YvRhtGMINGI0LDQsdC70L7QvSEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4i0JrQsNCxINGA0LDQt9Cx0LvQsNC60LDQstCw0YbRjCwg0YPQstCw0LnQtNC30ZbRhtC1INGeINGB0LLQvtC5INGD0LvRltC60L7QstGLINC30LDQv9GW0YEgR29vZ2xlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI4ODQ2ODgxNDI0MTA2NDg0NDQ3Ij4i0IbQvNGPINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwICjRjdC70LXQutGC0YDQvtC90L3QsNGPINC/0L7RiNGC0LApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjU5NTgwMjgzODM5NTQ3Mzg1MjgiPiLQn9Cw0YDQvtC70YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNzEzMDg5MzY5NDc5NTc4NjMwMCI+ItCj0LLQsNC50YHRhtGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjEzNjQwNTE0NzMzNDc0ODU5MDgiPiLQndGP0L/RgNCw0LLRltC70YzQvdCw0LUg0ZbQvNGPINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwINGG0ZYg0L/QsNGA0L7Qu9GMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiLQl9Cw0LHRi9C70ZbRgdGPINC90LAg0ZbQvNGPINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwINCw0LHQviDQv9Cw0YDQvtC70Yw/XG7QndCw0LLQtdC00LDQudGG0LUgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iNzExNDYyNzM1MTI4NjkzMzg2NyI+ItCf0YDQsNCy0LXRgNC60LAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+ItCg0LDQt9Cx0LvQsNC60LDQstCw0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4i0JPRg9C6INGD0LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29mZl9sYWJlbCIgbXNnaWQ9Ijk5NjgyMjgyNTE1NDMxOTAyNiI+ItCT0YPQuiDQstGL0LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX3N0YXJ0IiBtc2dpZD0iMzk0MTA0NTUwMjkzMzE0Mjg0NyI+ItCa0LvRjtGHINC/0LDRh9Cw0YLRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2xlYXJlZCIgbXNnaWQ9IjU1ODM0Nzk3MjEwMDE2Mzk1NzkiPiLQmtC70Y7RhyDQstGL0LTQsNC70LXQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jZWxsX2FkZGVkIiBtc2dpZD0iNjc1NjAzMTIwODM1OTI5MjQ4NyI+ItCh0L7RgtCw0LLRiyDQtNCw0LTQsNC00LfQtdC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2RldGVjdGVkIiBtc2dpZD0iNDk4ODczMDg5NTU1NDA1NzA1OCI+ItCa0LvRjtGHINC30LDQstC10YDRiNCw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4g0JJJ0LTQttGN0YIgJTIkZCDQtyAlMyRkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLQlNCw0LTQsNGG0Ywg0LLRltC00LbRjdGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLQn9GD0YHRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLQktC+0LHQu9Cw0YHRhtGMINGA0LDQt9Cx0LvQsNC60ZbRgNC+0Z7QutGWINGA0LDQt9Cz0LDRgNC90YPRgtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+ItCS0L7QsdC70LDRgdGG0Ywg0YDQsNC30LHQu9Cw0LrRltGA0L7RntC60ZYg0LfQs9Cw0YDQvdGD0YLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiLQktGW0LTQttGN0YIgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+ItCh0LXQu9C10LrRgtCw0YAg0LrQsNGA0YvRgdGC0LDQu9GM0L1p0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+ItCh0YLQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i0JrQsNC80LXRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+ItCd0LDQu9Cw0LTRiyDQvNGD0LvRjNGC0YvQvNC10LTRi9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLQl9C80Y/QvdC10L3QvdC1INC/0LDRgNCw0LTQutGDINCy0ZbQtNC20Y3RgtCw0Z4g0L/QsNGH0LDQu9C+0YHRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLQl9C80Y/QvdC10L3QvdC1INC/0LDRgNCw0LTQutGDINCy0ZbQtNC20Y3RgtCw0Z4g0YHQutC+0L3Rh9GL0LvQsNGB0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiLQktGW0LTQttGN0YIgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g0LLRi9C00LDQu9C10L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLQoNCw0LfQs9Cw0YDQvdGD0YbRjCDQstC+0LHQu9Cw0YHRhtGMINGA0LDQt9Cx0LvQsNC60ZbRgNC+0Z7QutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+ItCg0LDQt9Cx0LvQsNC6adGA0L7RntC60LAg0YHQu9Cw0LnQtNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i0KPQt9C+0YAg0YDQsNC30LHQu9Cw0Lpp0YDQvtGe0LrRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+ItCk0Y3QudGB0LrQsNC90YLRgNC+0LvRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQSU4t0LrQvtC0INGA0LDQt9Cx0LvQsNC6adGA0L7RntC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i0J/QsNGA0L7Qu9GMINGA0LDQt9Cx0LvQsNC6adGA0L7RntC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i0JLQvtCx0LvQsNGB0YbRjCDRg9C30L7RgNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLQktC+0LHQu9Cw0YHRhtGMINGB0LvQsNC50LTQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iMTIzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfY2hhcmFjdGVyIiBtc2dpZD0iNzMzNjQ3MDUzNTM4NTAwOTUyMyI+ItCX0L3QsNC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfd29yZCIgbXNnaWQ9IjcwNzU1NzAzMjgzNzQ5MTg2NjAiPiLRgdC70L7QstCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluayIgbXNnaWQ9IjU4MTU1MDg4ODA3ODI0ODgyNjciPiLRgdC/0LDRgdGL0LvQutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluZSIgbXNnaWQ9IjU3NjQyNjcyMzUwMjYxMjA4ODgiPiLRgNCw0LTQvtC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91cl9hbXBtIiBtc2dpZD0iNDU4NDMzODA4MzUyOTM1NTk4MiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IkFNUE0iPiVQPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhvdXJfY2FwX2FtcG0iIG1zZ2lkPSIyMDgzNDY1OTkyOTQwNDQ0MzY2Ij4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JXA8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfZmFpbGVkIiBtc2dpZD0iNTQxMDI3MDMyOTExNDIxMjA0MSI+ItCd0LUg0LDRgtGA0YvQvNCw0LvQsNGB0Y8g0LLRi9C60LDQvdCw0YbRjCDQt9Cw0LLQvtC00YHQutGD0Y4g0L/RgNCw0LLQtdGA0LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vdF9zeXN0ZW0iIG1zZ2lkPSI0NDM1MjAxNjU2NzY3Mjc2NzIzIj4i0JTQt9C10Y/QvdC90LUgRkFDVE9SWV9URVNUINC/0LDQtNGC0YDRi9C80LvRltCy0LDQtdGG0YbQsCDRgtC+0LvRjNC60ZYg0LTQu9GPINC/0LDQutC10YLQsNGeLCDRg9GB0YLQsNC70Y/QstCw0L3Ri9GFINC90LAg0YjQu9GP0YXRgyAvc3lzdGVtL2FwcC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub19hY3Rpb24iIG1zZ2lkPSI4NzI5OTE4NzQ3OTk5OTg1NjEiPiLQn9Cw0LrQtdGCLCDRj9C60ZYg0LLRi9C60L7QvdCy0LDQtSDQtNC30LXRj9C90L3QtSBGQUNUT1JZX1RFU1QsINC90LUg0LfQvdC+0LnQtNC30LXQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiLQn9C10YDQsNC30LDQs9GA0YPQt9GW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjE5ODc0ODM5Nzc4MzQ2MDM4NzIiPiLQndCwINGB0YLQsNGA0L7QvdGG0Ysg0Lcg0LDQtNGA0LDRgdCw0LwgPHhsaWZmOmcgaWQ9IlRJVExFIj4lczwveGxpZmY6Zz4g0LLRi9C30L3QsNGH0LDQvdCwOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+IkphdmFTY3JpcHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF90aXRsZSIgbXNnaWQ9IjI2MTkzNzY1NTU1MjUxMTY1OTMiPiLQn9Cw0YbQstC10YDQtNC30ZbRhtC1INC/0LXRgNCw0YXQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfcG9zaXRpdmVfYnV0dG9uIiBtc2dpZD0iMzExMjc1MjAxMDYwMDQ4NDEzMCI+ItCf0LDQutGW0L3Rg9GG0Ywg0LPRjdGC0YMg0YHRgtCw0YDQvtC90LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX25lZ2F0aXZlX2J1dHRvbiIgbXNnaWQ9IjU2MTQ4NjEyOTMwMjYwOTk3MTUiPiLQl9Cw0YHRgtCw0LLQsNGG0YbQsCDQvdCwINCz0Y3RgtCw0Lkg0YHRgtCw0YDQvtC90YbRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkIiBtc2dpZD0iMzQ2ODgxNjM1NzA5NTM3ODU5MCI+Ijx4bGlmZjpnIGlkPSJNRVNTQUdFIj4lczwveGxpZmY6Zz5cblxu0JLRiyDRntC/0Y3RntC90LXQvdGLLCDRiNGC0L4g0YXQvtGH0LDRhtC1INC/0LDQumnQvdGD0YbRjCDQs9GN0YLRgyDRgdGC0LDRgNC+0L3QutGDPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbGFiZWwiIG1zZ2lkPSI2ODYwMjYxNzU4NjY1ODI1MDY5Ij4i0J/QsNGG0LLQtdGA0LTQt9GW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRvdWJsZV90YXBfdG9hc3QiIG1zZ2lkPSI0NTk1MDQ2NTE1NDAwMjY4ODgxIj4i0J/QsNC00LrQsNC30LrQsDog0LTQstC+0LnRh9GLINC90LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINC/0LDQstGP0LvRltGH0YvRhtGMINCw0LHQviDQv9Cw0LzQtdC90YjRi9GG0YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+ItCQ0Z7RgtCw0LfQsNC/0LDRntC90LXQvdC90LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXR1cF9hdXRvZmlsbCIgbXNnaWQ9IjcxMDM0OTUwNzAxODA1OTA4MTQiPiLQo9GB0YLQsNC70Y/QstCw0L3QvdC1INCw0Z7RgtCw0LfQsNC/0LDRntC90LXQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX25hbWVfc2VwYXJhdG9yIiBtc2dpZD0iNjM1MDE0NTE1NDc3OTcwNjc3MiI+IiAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfbmFtZV9mb3JtYXQiIG1zZ2lkPSIzMjY4MDQxMDU0ODk5MjE0OTQ1Ij4iJDEkMiQzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X3NlcGFyYXRvciIgbXNnaWQ9Ijc0ODMzMDc4OTMxNzAzMjQxMjkiPiIsICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9mb3JtYXQiIG1zZ2lkPSI0ODc0NDU5NDU1Nzg2ODI3MzQ0Ij4iJDEkMiQzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcHJvdmluY2UiIG1zZ2lkPSIyMjMxODA2NTUzODYzNDIyMzAwIj4i0J/RgNCw0LLRltC90YbRi9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcG9zdGFsX2NvZGUiIG1zZ2lkPSI0Njk2NDMwNDA3Njg5Mzc3MTA4Ij4i0J/QsNGI0YLQvtCy0Ysg0ZbQvdC00Y3QutGBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfc3RhdGUiIG1zZ2lkPSI2OTg4ODk0MTk1NTIwMDQ0NjEzIj4i0KjRgtCw0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF96aXBfY29kZSIgbXNnaWQ9Ijg2OTc1NDQ1OTI2MjczMjI5NDYiPiLQn9Cw0YjRgtC+0LLRiyDRltC90LTRjdC60YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9jb3VudHkiIG1zZ2lkPSIyMzcwNzM3NzEwMjAzNjI4OTEiPiLQkNC60YDRg9Cz0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9pc2xhbmQiIG1zZ2lkPSI0MDIwMTAwODc1OTg0NjY3MDI1Ij4i0JLQvtGB0YLRgNCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kaXN0cmljdCIgbXNnaWQ9Ijg0MDA3MzUwNzMzOTIyNjc2NzIiPiLQoNCw0ZHQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2RlcGFydG1lbnQiIG1zZ2lkPSI1MzQzMjc5NDYyNTY0NDUzMzA5Ij4i0JDQtNC00LfQtdC7Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcHJlZmVjdHVyZSIgbXNnaWQ9IjIwMjg0OTk0ODUwNjU4MDA0MTkiPiLQn9GA0Y3RhNC10LrRgtGD0YDQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3BhcmlzaCIgbXNnaWQ9IjgyMDIyMDYxMDU0Njg4MjAwNTciPiLQn9GA0YvRhdC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+ItCf0LvQvtGI0YfQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2VtaXJhdGUiIG1zZ2lkPSIyODkzODgwOTc4ODM1Njk4ODE4Ij4i0K3QvNGW0YDQsNGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3NzUyNjU3NzU0MDUxMDY5ODMiPiLRh9GL0YLQsNC90L3QtSDQstGN0LEt0LfQsNC60LvQsNC00LDQuiDRliDQs9GW0YHRgtC+0YDRi2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9Ijg0NjIzNzgyMjY2MDA0Mzk2NTgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YHRh9GL0YLQstCw0YbRjCDRg9GB0LUgVVJMLdCw0LTRgNCw0YHRiywg0Y/QumnRjyDQsdGL0LtpINC90LDQstC10LTQsNC90Ysg0Z4g0LHRgNCw0Z7Qt9C10YDRiywg0LAg0YLQsNC60YHQsNC80LAg0Z7RgdC1INC30LDQutC70LDQtNC6aS4g0KPQstCw0LPQsDog0LPRjdGC0Ysg0LTQsNC30LLQvtC7INC90LXQu9GM0LPQsCDQsNC20YvRhtGG0Y/RntC70Y/RhtGMINC/0LDQsdC+0YfQvdGL0LxpINCx0YDQsNGe0LfQtdGA0LDQvGkg0LDQsdC+IGnQvdGI0YvQvGkg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8aSDQtyDRg9C70LDRgdGGadCy0LDRgdGG0Y/QvGkg0LHRgNCw0Z7Qt9C10YDQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3MTQ3ODUxNjUyNzMzMTQ0OTAiPiLQt9Cw0L/RltGBINCy0Y3QsS3Qt9Cw0LrQu9Cw0LTQsNC6INGWINCz0ZbRgdGC0L7RgNGLaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINCz0ZbRgdGC0L7RgNGL0Y4g0LHRgNCw0Z7Qt9C10YDQsCDQsNCx0L4g0LfQsNC60LvQsNC00LrRliwg0Y/QumnRjyDQt9Cw0YXQvtGe0LLQsNGO0YbRhtCwINC90LAg0L/Qu9Cw0L3RiNGN0YbQtS4g0JPRjdGC0LAg0LzQvtC20LAg0LTQsNC30LLQvtC70ZbRhtGMINC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LLRi9C00LDQu9GP0YbRjCDQsNCx0L4g0LfQvNGP0L3Rj9GG0Ywg0LTQsNC00LfQtdC90YvRjyDQsdGA0LDRntC30LXRgNCwLiDQo9Cy0LDQs9CwOiDQs9GN0YLRiyDQtNCw0LfQstC+0Lsg0L3QtSDRgNCw0YHQv9Cw0Z7RgdGO0LTQttCy0LDQtdGG0YbQsCDQvdCwINC/0LDQsdC+0YfQvdGL0Y8g0LHRgNCw0Z7Qt9C10YDRiyBpIGnQvdGI0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0Lcg0YTRg9C90LrRhtGL0Y/QvGkg0LHRgNCw0Z7Qt9C10YDQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC30LzRj9C90Y/RhtGMINCz0ZbRgdGC0L7RgNGL0Y4g0LHRgNCw0Z7Qt9C10YDQsCwg0ZYg0LfQsNC60LvQsNC00LrRliwg0LfQsNGF0LDQstCw0L3Ri9GPINGeINGC0Y3Qu9C10YTQvtC90LUuINCT0Y3RgtCwINC00LDQt9Cy0L7Qu9GW0YbRjCDQv9GA0YvQutC70LDQtNCw0L3QvdGOINCy0YvQtNCw0LvRj9GG0Ywg0LDQsdC+INC30LzRj9C90Y/RhtGMINC00LDQtNC30LXQvdGL0Y8g0LHRgNCw0Z7Qt9C10YDQsC4g0KPQstCw0LPQsDog0LPRjdGC0Ysg0LTQsNC30LLQvtC7INC80L7QttCwINC90LUg0LTQt9C10LnQvWnRh9Cw0YbRjCDQtNC70Y8g0ZbQvdGI0YvRhSDQsdGA0LDRntC30LXRgNCw0Z4g0ZYg0ZbQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4g0Lcg0LzQsNCz0YfRi9C80LDRgdGG0Y/QvNGWINCy0Y3QsS3QsdGA0LDRntC30LXRgNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWxhcm0iIG1zZ2lkPSIxMzc5Mjk0NTU2MzYyMDkxODE0Ij4i0YPRgdGC0LDQu9GR0Z7QutCwINGB0ZbQs9C90LDQu9GDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWxhcm0iIG1zZ2lkPSIzMTYzOTIwMzkxNTc0NzM4NDgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0Z7RgdGC0LDQu9GR0Z7QstCw0YbRjCDRgdGW0LPQvdCw0Lsg0L3QsCDRntGB0YLQsNC70Y/QstCw0L3Ri9C8INC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LHRg9C00LfRltC70YzQvdGW0LrQsC4g0J/RjdGe0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LHRg9C00LfRltC70YzQvdGW0LrQsCDQvdC1INC80L7Qs9GD0YbRjCDRgNGN0LDQu9GW0LfQvtGe0LLQsNGG0Ywg0LPRjdGC0YPRjiDQvNCw0LPRh9GL0LzQsNGB0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiLQtNCw0LTQsNGG0Ywg0LPQsNC70LDRgdCw0LLQvtC1INC/0LDQstC10LTQsNC80LvQtdC90L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQtNCw0LTQsNCy0LDRhtGMINC/0LDQstC10LTQsNC80LvQtdC90L3RliDRniDQstCw0YjRgyDRgdC60YDRi9C90Y4g0LPQsNC70LDRgdCw0LLQvtC5INC/0L7RiNGC0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSI1OTYyMjI0MTU4OTU1MjczOTMyIj4i0LfQvNGP0L3RltGG0Ywg0LTQsNC30LLQvtC70Ysg0LPQtdCw0L/QsNC30ZbRhtGL0Y/QvdCw0LLQsNC90L3RjyDQtNC70Y8g0LHRgNCw0Z7Qt9GN0YDQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjEwODM3NDMyMzQ1MjI2Mzg3NDciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQtNCw0LfQstC+0LvRiyDQs9C10LDQu9Cw0LrQsNGG0YvRliDQsdGA0LDRntC30Y3RgNCwLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwLCDQutCw0LEg0LTQsNC30LLQsNC70Y/RhtGMINCw0LTQv9GA0LDRntC60YMg0ZbQvdGE0LDRgNC80LDRhtGL0ZYg0LDQsSDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3RliDQstGL0L/QsNC00LrQvtCy0YvQvCDQstGN0LEt0YHQsNC50YLQsNC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iNTU2ODEzOTEwMDY0NTgyOTExNyI+ItCy0LXRgNGL0YTRltC60LDQstCw0YbRjCDQv9Cw0LrQtdGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wYWNrYWdlVmVyaWZpY2F0aW9uQWdlbnQiIG1zZ2lkPSI4NDM3NTkwMTkwOTkwODQzMzgxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0L/RgNCw0LLRj9GA0LDRhtGMINC80LDQs9GH0YvQvNCw0YHRhtGMINGD0YHRgtCw0LvRj9Cy0LDQvdC90Y8g0L/QsNC60LXRgtGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjQxODc3ODY3OTMzNjAzMjY2NTQiPiLQv9GA0YvQstGP0LfQsNGG0Ywg0LTQsCDQstC10YDRi9GE0ZbQutCw0YLQsNGA0YMg0L/QsNC60LXRgtGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjMxODA3NDE3NzMyMzM4NjIxMjYiPiLQlNCw0LfQstCw0LvRj9C1INGe0LvQsNC00LDQu9GM0L3RltC60YMg0YDQsNCx0ZbRhtGMINC30LDQv9GL0YLRiyDQstC10YDRi9GE0ZbQutCw0YLQsNGA0LDRniDQv9Cw0LrQtdGC0YMuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlcmlhbFBvcnQiIG1zZ2lkPSI1NDYwODMzMjc2NTQ2MzEwNzYiPiLQsNGC0YDRi9C80LDRhtGMINC00L7RgdGC0YPQvyDQtNCwINC/0LDRgdC70Y/QtNC+0Z7QvdGL0YUg0L/QsNGA0YLQvtGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiLQlNCw0LfQstCw0LvRj9C1INGe0LvQsNC00LDQu9GM0L3RltC60YMg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCDQv9Cw0YHQu9GP0LTQvtGe0L3Ri9GFINC/0LDRgNGC0L7RniDQtyDQtNCw0L/QsNC80L7Qs9Cw0LkgQVBJIFNlcmlhbE1hbmFnZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjUwNzc3NzQyOTc5NDM0MDkyODUiPiLQt9C90LXRiNC9aSDQtNC+0YHRgtGD0L8g0LTQsCDQutCw0L3RgtGN0L3Rgi3Qv9GA0LDQstCw0LnQtNGN0YDQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI0NTQ0MzQ2NDg2Njk3ODUzNjg1Ij4i0JTQsNC1INGe0LvQsNC00LDQu9GM0L3RltC60YMg0LTQvtGB0YLRg9C/INC00LAg0LrQsNC90YLRjdC90YIt0L/RgNCw0LLQsNC50LTRjdGA0LDRniDQtyDQsNCx0LDQu9C+0L3QumkuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4i0LDQtNC80Y/QvWnRhtGMINCw0Z7RgtCw0LzQsNGC0YvRh9C90LDQtSDQsNCx0L3QsNGe0LvQtdC90L3QtSDQv9GA0YvQu9Cw0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVMb2NrIiBtc2dpZD0iMTY1NTYyNTgzMjE2Njc3ODQ5MiI+ItCU0LDQt9Cy0LDQu9GP0LUg0Z7Qu9Cw0LTQsNC70YzQvdGW0LrRgyDQsNC00L/RgNCw0Z7Qu9GP0YbRjCDRgyDRgWnRgdGC0Y3QvNGDINC30LLQtdGB0YLQumkg0L/RgNCwINGC0L7QtSwg0LrQsNC70ZYg0LHRg9C00LfQtSDQt9GA0YPRh9C90Ysg0YfQsNGBINC00LvRjyDQvdC10ZbQvdGC0LXRgNCw0LrRgtGL0Z7QvdCw0LPQsCDQv9C10YDQsNC30LDQv9GD0YHQutGDINGeINC80Y3RgtCw0YUg0LDQsdC90LDRntC70LXQvdC90Y8g0L/RgNGL0LvQsNC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9tZXNzYWdlIiBtc2dpZD0iNzY3MzQ0Njg3MTM5MTk1NzkwIj4i0JLRiyDRhdC+0YfQsNGG0LUsINC60LDQsSDQsdGA0LDRntC30Y3RgCDQt9Cw0L/QvtC80L3RltGeINCz0Y3RgtGLINC/0LDRgNC+0LvRjD8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25vdG5vdyIgbXNnaWQ9IjYzODk2NzUzMTY3MDY2OTk3NTgiPiLQndC1INGG0Y/Qv9C10YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX3JlbWVtYmVyIiBtc2dpZD0iNjQ5MTg3OTY3ODk5Njc0OTQ2NiI+ItCX0LDQv9C+0LzQvdGW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbmV2ZXIiIG1zZ2lkPSI4Mjc0MzMwMjk2Nzg1ODU1MTA1Ij4i0J3RltC60L7Qu9GWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4i0KMg0LLQsNGBINC90Y/QvNCwINC00LDQt9Cy0L7Qu9GDINC90LAg0LDQtNC60YDRi9GG0YbRkSDQs9GN0YLQsNC5INGB0YLQsNGA0L7QvdC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGV4dF9jb3BpZWQiIG1zZ2lkPSI0OTg1NzI5NTI0NjcwMTMxMzg1Ij4i0KLRjdC60YHRgiDRgdC60LDQv9GW0Y/QstCw0L3RiyDRniDQsdGD0YTQtdGAINCw0LHQvNC10L3Rgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtb3JlX2l0ZW1fbGFiZWwiIG1zZ2lkPSI0NjUwOTE4OTIzMDgzMzIwNDk1Ij4i0JHQvtC70YzRiCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZXBlbmRfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNTcyMjE0NDYxNjc2MDE1NjQyIj4i0JzQtdC90Y4rIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiLQv9GA0LDQsdC10LsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZW51X2VudGVyX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjc0MzM2Mjc4NTExMTMwOTY2OCI+ImVudGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGVfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIzNjU4MTc4MDA3MjAyNzQ4MTY0Ij4i0LLRi9C00LDQu9GW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaF9nbyIgbXNnaWQ9IjgyOTgwMTY2Njk4MjIxNDE3MTkiPiLQn9C+0YjRg9C6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zZWFyY2giIG1zZ2lkPSI2NzQ5ODI2NjM5MDk4NTEyMTIwIj4i0J/QvtGI0YPQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fcXVlcnkiIG1zZ2lkPSI1OTExNzc4NTkzMTI1MzU1MTI0Ij4i0JfQsNC/0YvRgiDQvdCwINC/0L7RiNGD0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX2NsZWFyIiBtc2dpZD0iMTMzMDI4MTk5MDk1MTgzMzAzMyI+ItCS0YvQtNCw0LvRltGG0Ywg0LfQsNC/0YvRgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc3VibWl0IiBtc2dpZD0iMjY4ODQ1MDEzMzI5Nzk4MzU0MiI+ItCQ0LTQv9GA0LDQstGW0YbRjCDQt9Cw0L/Ri9GCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl92b2ljZSIgbXNnaWQ9IjI0NTMyMDM2OTU2NzQ5OTQ0NDAiPiLQk9Cw0LvQsNGB0LDQstGLINC/0L7RiNGD0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iNzQ2MDY5NDA3MDMwOTczMDE0OSI+ItCj0LrQu9GO0YfRi9GG0Ywg0YTRg9C90LrRhtGL0Y4gRXhwbG9yZSBieSBUb3VjaD8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg2NTU4ODc1MzkwODk5MTA1NzciPiLQodC70YPQttCx0LAg0LTQvtGB0YLRg9C/0YMgPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDQt9Cw0L/Ri9GC0LLQsNC1INGe0LrQu9GO0YfRjdC90L3QtSDRhNGD0L3QutGG0YvRliBFeHBsb3JlIGJ5IFRvdWNoLiDQmtCw0LvRliDRhNGD0L3QutGG0YvRjyBFeHBsb3JlIGJ5IFRvdWNoINCx0YPQtNC30LUg0Z7QutC70Y7Rh9Cw0L3QsNGPLCDQstGLINC30LzQvtC20LDRhtC1INC/0LDRh9GD0YbRjCDQsNCx0L4g0Z7QsdCw0YfRi9GG0Ywg0LDQv9GW0YHQsNC90L3RliDRgtCw0LPQviwg0YjRgtC+INC30L3QsNGF0L7QtNC30ZbRhtGG0LAg0L/QsNC0INCy0LDRiNGL0Lwg0L/QsNC70YzRhtCw0LwsINCw0LHQviDQstGL0LrQvtC90LLQsNGG0Ywg0LbRjdGB0YLRiyDQtNC70Y8g0Z7Qt9Cw0LXQvNCw0LTQt9C10Y/QvdC90Y8g0Lcg0L/Qu9Cw0L3RiNGN0YLQsNC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI3MDgxOTk2NzI4NTIzNzMxOTUiPiLQodC70YPQttCx0LAg0LTQvtGB0YLRg9C/0YMgPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDQt9Cw0L/Ri9GC0LLQsNC1INGe0LrQu9GO0YfRjdC90L3QtSDRhNGD0L3QutGG0YvRliBFeHBsb3JlIGJ5IFRvdWNoLiDQmtCw0LvRliDRhNGD0L3QutGG0YvRjyBFeHBsb3JlIGJ5IFRvdWNoINCx0YPQtNC30LUg0Z7QutC70Y7Rh9Cw0L3QsNGPLCDQstGLINC30LzQvtC20LDRhtC1INC/0LDRh9GD0YbRjCDQsNCx0L4g0Z7QsdCw0YfRi9GG0Ywg0LDQv9GW0YHQsNC90L3RliDRgtCw0LPQviwg0YjRgtC+INC30L3QsNGF0L7QtNC30ZbRhtGG0LAg0L/QsNC0INCy0LDRiNGL0Lwg0L/QsNC70YzRhtCw0LwsINCw0LHQviDQstGL0LrQvtC90LLQsNGG0Ywg0LbRjdGB0YLRiyDQtNC70Y8g0Z7Qt9Cw0LXQvNCw0LTQt9C10Y/QvdC90Y8g0Lcg0YLRjdC70LXRhNC+0L3QsNC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iNzM5NjM4NDUwODk1Mzc3OTkyNSI+IjEg0LzQtdGB0Y/RhiDRgtCw0LzRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJlZm9yZU9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iOTA5MTM0NTQ2ODM2NDk5ODI2Ij4i0KDQsNC90LXQuSwg0YfRi9C8IDEg0LzQtdGB0Y/RhiDRgtCw0LzRgyI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0ibnVtX3NlY29uZHNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDg2OTg3MDA1NjU0Nzg5NjAxMSI+IjEg0YHQtdC60YPQvdC00YMg0YLQsNC80YMiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM5MDM3MDY4MDQzNDk1NTYzNzkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDRgS4g0YLQsNC80YMiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9Im51bV9taW51dGVzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMzMDY3ODc0MzMwODg4MTAxOTEiPiIxINGF0LLRltC70ZbQvdGDINGC0LDQvNGDIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMTc2OTQyMDA4OTE1NDU1MTE2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0YXQsi4g0YLQsNC80YMiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9Im51bV9ob3Vyc19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI5MTUwNzk3OTQ0NjEwODIxODQ5Ij4iMSDQs9Cw0LTQt9GW0L3RgyDRgtCw0LzRgyI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ2NzI3MzIzOTU4NzU4NzU2OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INCz0LDQtNC3LiDRgtCw0LzRgyI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0ibGFzdF9udW1fZGF5cyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzA2OTk5MjgwODE2NDMxODI2OCI+ItCQ0L/QvtGI0L3RltGFINC00LfRkdC9OiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9Imxhc3RfbW9udGgiIG1zZ2lkPSIzOTU5MzQ2NzM5OTc5MDU1NDMyIj4i0JDQv9C+0YjQvdGWINC80LXRgdGP0YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbGRlciIgbXNnaWQ9IjUyMTE5NzUwMjI4MTU1NTQ4NDAiPiLQoNCw0L3QtdC5Ijwvc3RyaW5nPgotICA8cGx1cmFscyBuYW1lPSJudW1fZGF5c19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NjEzNTg1MzQzOTgxMTU4MjAiPiLRg9GH0L7RgNCwIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDc5NTg2NDY2MTUzMzE0NjMzIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0LQuINGC0LDQvNGDIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJpbl9udW1fc2Vjb25kcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjI3Mjk3NDU1NjA5NTQ5MDUxMDIiPiLQv9GA0LDQtyAxINGB0LXQutGD0L3QtNGDIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMjQxOTI2MTE2NDQzOTc0Njg3Ij4i0L/RgNCw0LcgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0YEuIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJpbl9udW1fbWludXRlcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg3OTMwOTUyNTEzMjUyMDAzOTUiPiLQv9GA0LDQtyAxINGF0LLRltC70ZbQvdGDIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMzMwNzEzOTM2Mzk5NDQ4NzQ5Ij4i0L/RgNCw0LcgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0YXQsi4iPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9ob3VycyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjcxNjQzNTMzNDI0Nzc3Njk5OTkiPiLQv9GA0LDQtyAxINCz0LDQtNC30ZbQvdGDIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDcyOTA2NzczNTM3MjczODkiPiLQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDQs9Cw0LTQty4iPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9kYXlzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTQxMzA4ODc0MzAwOTgzOTUxOCI+ItC30LDRntGC0YDQsCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTEwOTQ0OTM3NTEwMDk1MzI0NyI+ItC/0YDQsNC3IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INC0LiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9zZWNvbmRzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE4NDkwMzY4NDAyMDAwNjkxMTgiPiIxINGB0LXQutGD0L3QtNGDINGC0LDQvNGDIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNjk5MTY5MzY2NjUwOTMwNDE1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0YEuINGC0LDQvNGDIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX21pbnV0ZXNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjM2MTQ5MDE0NzExMzg3MTU0NSI+IjEg0YXQsmnQu2nQvdGDINGC0LDQvNGDIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NTExNjQ5Njg1OTcxNTA3MTAiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDQvNGW0L0uINGC0LDQvNGDIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2hvdXJzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ3OTYyMTIwMzk3MjQ3MjIxMTYiPiIxINCz0LDQtNC30ZbQvdGDINGC0LDQvNGDIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2ODg5OTcwNzQ1NzQ4NTM4OTAxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0LPQsNC00LcuINGC0LDQvNGDIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2RheXNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODQ2MzE2MTcxMTQ5MjY4MDMwOSI+ItGD0YfQvtGA0LAiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM0NTMzNDI2Mzk2MTY0ODExOTEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDQtC4g0YLQsNC80YMiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fc2Vjb25kcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NDIyMjUzNzA3OTUwNjYyOTkiPiLQv9GA0LDQtyAxINGB0LXQutGD0L3QtNGDIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDk1ODgwMTA4ODI1ODA1MTA4Ij4i0L/RgNCw0LcgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0YEuIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX21pbnV0ZXMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NjI3ODYxNDk5MjgyODQ4NzgiPiLQv9GA0LDQtyAxINGF0LIuIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MjE2MTEzMjkyNzA2NTY4NzI2Ij4i0J/RgNCw0LcgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0YXQsi4iPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1faG91cnMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjc0NzA4MTE4MTI0MDQ1MjQ2Ij4i0L/RgNCw0LcgMSDQs9Cw0LTQt9GW0L3RgyI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzcwNTM3Mzc2Njc5ODAxMzQwNiI+ItC/0YDQsNC3IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INCz0LDQtNC3LiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9kYXlzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjE3ODU3NjI1NDM4NTczOTg1NSI+ItC30LDRntGC0YDQsCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjk3MzA2Mjk2ODAzODM1NTk5MSI+ItC/0YDQsNC3IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INC0LiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl9kYXRlIiBtc2dpZD0iOTA5Mzk0OTc1Nzc1NzQ0NTExNyI+ItC00LDRgtCwOiA8eGxpZmY6ZyBpZD0iREFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3RpbWUiIG1zZ2lkPSI1NTA2ODMxMjQ0MjYzMDgzNzkzIj4i0YMgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl95ZWFyIiBtc2dpZD0iNTA0MDM5NTY0MDcxMTg2NzE3NyI+ItGDIDx4bGlmZjpnIGlkPSJZRUFSIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXkiIG1zZ2lkPSI4MTQ0MTk1Nzc2MDU4MTE5NDI0Ij4i0LTQt9C10L3RjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRheXMiIG1zZ2lkPSI0Nzc0NTQ3NjYxMDIxMzQ0NjAyIj4i0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91ciIgbXNnaWQ9IjIxMjY3NzE5MTY0MjYxODk0ODEiPiLQs9Cw0LTQt9GW0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhvdXJzIiBtc2dpZD0iODk0NDI0MDA1MjY2ODUyOTkzIj4i0LMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWludXRlIiBtc2dpZD0iOTE0ODg3ODY1NzcwMzc2OTg2OCI+ItGF0LIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWludXRlcyIgbXNnaWQ9IjU2NDYwMDEwMDU4MjcwMzQ1MDkiPiLRhdCyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlY29uZCIgbXNnaWQ9IjMxODQyMzU4MDgwMjE0NzgiPiLRgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWNvbmRzIiBtc2dpZD0iMzE2MTUxNTM0NzIxNjU4OTIzNSI+ItGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndlZWsiIG1zZ2lkPSI1NjE3OTYxNTM3MTczMDYxNTgzIj4i0YLRi9C00LfQtdC90YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiLRgtGL0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ieWVhciIgbXNnaWQ9IjQwMDExMTgyMjEwMTM4OTIwNzYiPiLQs9C+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ5ZWFycyIgbXNnaWQ9IjY4ODE1Nzc3MTc5OTMyMTM1MjIiPiLQsy4iPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX3NlY29uZHMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2OTYyMDE1NTI4MzcyOTY5NDgxIj4iMSDRgdC10LrRg9C90LTQsCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTg4NjEwNzc2NjU3NzE2Njc4NiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INGBIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJkdXJhdGlvbl9taW51dGVzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDkxNTQxNDAwMjU0NjA4NTYxNyI+IjEg0YXQstGW0LvRltC90LAiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMxNjUxODcxNjkyMjQ5MDg3NzUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDRhdCyLiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25faG91cnMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4OTE3NDY3NDkxMjQ4ODA5OTcyIj4iMSDQs9Cw0LTQt9GW0L3QsCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzg2Mzk2Mjg1NDI0Njc3MzkzMCI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INCz0LDQtNC3LiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90aXRsZSIgbXNnaWQ9IjM1MzQ1MDkxMzU0MzgzNTMwNzciPiLQn9GA0LDQsdC70LXQvNCwINC3INCy0ZbQtNGN0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF9pbnZhbGlkX3Byb2dyZXNzaXZlX3BsYXliYWNrIiBtc2dpZD0iMzE4NjY3MDMzNTkzODY3MDQ0NCI+ItCS0ZbQtNGN0LAg0L3QtSDQv9Cw0LTRi9GF0L7QtNC30ZbRhtGMINC00LvRjyDQv9Cw0YLQvtC60LDQstCw0Lkg0L/QtdGA0LDQtNCw0YfRiyDQvdCwIOKAi+KAi9Cz0Y3RgtGDINC/0YDRi9C70LDQtNGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X3Vua25vd24iIG1zZ2lkPSIzNDUwNDM5MTU1MTg3ODEwMDg1Ij4i0J3QtdC80LDQs9GH0YvQvNCwINC/0YDQsNC50LPRgNCw0YbRjCDQs9GN0YLQsCDQstGW0LTRjdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iIG1zZ2lkPSIyODIyMjM4MjE1MTAwNjc5NTkyIj4i0J7QmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aXZlX3RpbWUiIG1zZ2lkPSIxODE4NTU3MTc3ODI5NDExNDE3Ij4iPHhsaWZmOmcgaWQ9IkRBVEUiPiUxJHM8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub29uIiBtc2dpZD0iNzI0NTM1MzUyODgxODU4NzkwOCI+ItCw0L/QvtGe0LTQvdGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iTm9vbiIgbXNnaWQ9IjMzNDIxMjc3NDUyMzAwMTMxMjciPiLQn9C+0Z7QtNC30LXQvdGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWlkbmlnaHQiIG1zZ2lkPSI3MTY2MjU5NTA4ODUwNDU3NTk1Ij4i0LDQv9C+0Z7QvdCw0YfRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Ik1pZG5pZ2h0IiBtc2dpZD0iNTYzMDgwNjkwNjg5Nzg5MjIwMSI+ItCQ0L/QvtGe0L3QsNGH0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGFwc2VkX3RpbWVfc2hvcnRfZm9ybWF0X21tX3NzIiBtc2dpZD0iNDQzMTU1NTk0MzgyODcxMTQ3MyI+Ijx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMSQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMiQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9oX21tX3NzIiBtc2dpZD0iMTg0NjA3MTk5NzYxNjY1NDEyNCI+Ijx4bGlmZjpnIGlkPSJIT1VSUyI+JTEkZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUyJDAyZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUzJDAyZDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3RBbGwiIG1zZ2lkPSI2ODc2NTE4OTI1ODQ0MTI5MzMxIj4i0JLRi9C70YPRh9GL0YbRjCDRg9GB0ZEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i0JLRi9GA0LDQt9Cw0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i0JrQsNC/0ZbRj9Cy0LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i0KPRgdGC0LDQstGW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i0JfQsNC80Y/QvdGW0YbRjC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLQktGL0LTQsNC70ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLQodC60LDQv9GW0Y/QstCw0YbRjCBVUkwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLQktGL0LHRgNCw0YbRjCDRgtGN0LrRgdGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+ItCS0YvQu9GD0YfRjdC90L3QtSDRgtGN0LrRgdGC0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i0JTQsNC00LDRhtGMINGDINGB0LvQvtGe0L3RltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLQktGL0LTQsNC7adGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnB1dE1ldGhvZCIgbXNnaWQ9IjE2NTM2MzAwNjIzMDQ1Njc4NzkiPiLQnNC10YLQsNC0INGD0LLQvtC00YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlZGl0VGV4dE1lbnVUaXRsZSIgbXNnaWQ9IjQ5MDkxMzU1NjQ5NDE4MTU0OTQiPiLQlNC30LXRj9C90L3RliDQtyDRgtGN0LrRgdGC0LDQvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGl0bGUiIG1zZ2lkPSI1NTc2MjcyNDk2MzY1Njg0ODM0Ij4i0JzQtdGB0YbQsCDQtNC70Y8g0LfQsNGF0LDQstCw0L3QvdGPINC90LAg0LfRi9GF0L7QtNC30LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RleHQiIG1zZ2lkPSI2NjQwNTA1ODE3NjE3NDE0MzcxIj4i0J3QtdC60LDRgtC+0YDRi9GPINGB0ZbRgdGC0Y3QvNC90YvRjyDRhNGD0L3QutGG0YvRliDQvNC+0LPRg9GG0Ywg0L3QtSDQv9GA0LDRhtCw0LLQsNGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4NzE4MzM1MTIxMDYwNzg3OTE0Ij4i0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSA8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+INC/0YDQsNGG0YPQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iNDY1MzU4Njk0Nzc0NzMzMDA1OCI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINCw0YLRgNGL0LzQsNGG0Ywg0LTQsNC00LDRgtC60L7QstGD0Y4g0ZbQvdGE0LDRgNC80LDRhtGL0Y4g0LDQsdC+INGB0L/Ri9C90ZbRhtGMINC/0YDQsNCz0YDQsNC80YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib2siIG1zZ2lkPSI1OTcwMDYwNDMwNTYyNTI0OTEwIj4i0J7QmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiLQkNC00LzRj9C90ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ieWVzIiBtc2dpZD0iNTM2Mjk4MjMwMzMzNzk2OTMxMiI+ItCe0JoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJubyIgbXNnaWQ9IjUxNDE1MzEwNDQ5MzU1NDE0OTciPiLQkNC00LzRj9C90ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlhbG9nX2FsZXJ0X3RpdGxlIiBtc2dpZD0iMjA0OTY1ODcwODYwOTA0MzEwMyI+ItCj0LLQsNCz0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2FkaW5nIiBtc2dpZD0iNzkzMzY4MTI2MDI5NjAyMTE4MCI+ItCX0LDQs9GA0YPQt9C60LAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29uIiBtc2dpZD0iMTU0NDY4Mjc1NTUxNDQ5NDI5OCI+ItCj0LrQu9GO0YfRi9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29mZiIgbXNnaWQ9IjY4MTU4NzAzODY5NzI4MDU4MzIiPiLQkNC00LrQu9GO0YfQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+ItCX0LDQstGP0YDRiNGL0YbRjCDQtNC30LXRj9C90L3QtSDQtyDQtNCw0L/QsNC80L7Qs9Cw0LkiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igd2hpY2hIb21lQXBwbGljYXRpb24gKDQ2MTY0MjAxNzI3MjczMjY3ODIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4i0JLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQv9CwINC30LzQsNGe0YfQsNC90L3RliDQtNC70Y8g0LPRjdGC0LDQs9CwINC00LfQtdGP0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4i0JDRh9GL0YHRhtGW0YbRjCDQv9CwINC30LzQsNGe0YfQsNC90L3RliDRniDRgNCw0LfQtNC30LXQu9C1IFwi0J3QsNC70LDQtNGLINGB0ZbRgdGC0Y3QvNGLICZndDsg0J/RgNGL0LrQu9Cw0LTQsNC90L3RliAmZ3Q7INCh0L/QsNC80L/QsNCy0LDQvdGL0Y9cIi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiLQktGL0LHQtdGA0YvRhtC1INC00LfQtdGP0L3QvdC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4i0JLRi9Cx0LXRgNGL0YbQtSDQv9GA0YvQutC70LDQtNCw0L3QvdC1INC00LvRjyBVU0It0L/RgNGL0LvQsNC00YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub0FwcGxpY2F0aW9ucyIgbXNnaWQ9IjI5OTE4MTQyNzM5MzY1MDQ2ODkiPiLQndGP0LzQsCDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4sINGP0LrRltGPINC80L7Qs9GD0YbRjCDQstGL0LrQvtC90LLQsNGG0Ywg0LPRjdGC0Ysg0L/RgNCw0YbRjdGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiLQndCwINC20LDQu9GMLCDQv9GA0YvQutC70LDQtNCw0L3QvdC1IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g0YHQv9GL0L3RltC70LDRgdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiLQndCwINC20LDQu9GMLCDQv9GA0LDRhtGN0YEgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+INGB0L/Ri9C90ZbRntGB0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5yX3RpdGxlIiBtc2dpZD0iNDM1MTk0ODQ4MTQ1OTEzNTcwOSI+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfYWN0aXZpdHlfYXBwbGljYXRpb24iIG1zZ2lkPSIxOTA0NDc3MTg5MDU3MTk5MDY2Ij4i0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+INC90LUg0LDQtNC60LDQt9Cy0LDQtS5cblxu0JfQsNC60YDRi9GG0Ywg0Y/Qs9C+PyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+ItCf0YDQsNGG0Y3RgSA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+INC90LUg0LDQtNC60LDQt9Cy0LDQtS5cblxu0JfQsNC60YDRi9GG0Ywg0Y/Qs9C+PyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hcHBsaWNhdGlvbl9wcm9jZXNzIiBtc2dpZD0iODk0MTc1NzYwNzM0MDQ4MTA1NyI+ItCf0YDRi9C60LvQsNC00LDQvdC90LUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDQvdC1INCw0LTQutCw0LfQstCw0LUuINCX0LDQutGA0YvRhtGMINGP0LPQvj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfcHJvY2VzcyIgbXNnaWQ9IjY1MTMyMDk4NzQ4ODA1MTcxMjUiPiLQn9GA0LDRhtGN0YEgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+INC90LUg0LDQtNC60LDQt9Cy0LDQtS5cblxu0JfQsNC60YDRi9GG0Ywg0Y/Qs9C+PyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2Nsb3NlIiBtc2dpZD0iODM0NjA3MjA5NDUyMTI2NTYwNSI+ItCe0JoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXBvcnQiIG1zZ2lkPSI0MDYwMjE4MjYwOTg0Nzk1NzA2Ij4i0KHQv9GA0LDQstCw0LfQtNCw0YfQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndhaXQiIG1zZ2lkPSI3MTQ3MTE4MjE3MjI2MzE3NzMyIj4i0KfQsNC60LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4i0KHRgtCw0YDQvtC90LrQsCDQvdC1INCw0LTQutCw0LfQstCw0LUg0L3QsCDQt9Cw0L/Ri9GC0YsuXG5cbtCX0LDQutGA0YvRhtGMINGP0LU/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIxNTQ3OTk3NzgwNTA2NzEzNTgxIj4i0J/RgNGL0LrQuy4g0L/QtdGA0LDQvdCw0LrRltGA0LDQstCw0L3QsNC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfcmVwbGFjZSIgbXNnaWQ9IjYyMDI0OTg5NDk5NzAyODE0MTIiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1IDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g0LfQsNGA0LDQtyDQt9Cw0L/Rg9GI0YfQsNC90LDQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19vcmlnaW5hbCIgbXNnaWQ9IjE4ODEwMjAyMzAyMTY2ODY4MyI+ItCf0YDRi9C60LvQsNC00LDQvdC90LUgPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDQt9Cw0L/Rg9GI0YfQsNC90LDQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2NhbGUiIG1zZ2lkPSIzMjAyOTU1NjY3Njc1OTQ0NDk5Ij4i0KjQutCw0LvQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zaG93IiBtc2dpZD0iNDAxMzg3ODg3NjQ4NjY1NTg5MiI+ItCX0LDRntGB0ZHQtNGLINC/0LDQutCw0LfQstCw0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+ItCX0L3QvtGeINGD0LrQu9GO0YfRi9GG0LUg0LPRjdGC0LAg0Z4g0YDQsNC30LTQt9C10LvQtSBcItCh0ZbRgdGC0Y3QvNC90YvRjyDQvdCw0LvQsNC00YsgJmd0OyDQn9GA0YvQutC70LDQtNCw0L3QvdGWICZndDsg0KHQv9Cw0LzQv9Cw0LLQsNC90YvRj1wiLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtdl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjMzMDcyMDkxOTIxNTU0NDI4MjkiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gKNC/0YDQsNGG0Y3RgSA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTIkczwveGxpZmY6Zz4pINC/0LDRgNGD0YjRi9C70LAg0Z7Qu9Cw0YHQvdGD0Y4g0L/QsNC70ZbRgtGL0LrRgyBTdHJpY3RNb2RlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtdl9wcm9jZXNzIiBtc2dpZD0iNTEyMDM5NzAxMjA0NzQ2MjQ0NiI+ItCf0YDQsNGG0Y3RgSA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g0L/QsNGA0YPRiNGL0Z4g0YPQu9Cw0YHQvdGD0Y4g0L/QsNC70ZbRgtGL0LrRgyBTdHJpY3RNb2RlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+ItCQ0LHQvdCw0Z7Qu9C10L3QvdC1IEFuZHJvaWQuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19hcGsiIG1zZ2lkPSI3OTA0MDQyNjgyMTExNTI2MTY5Ij4i0JDQv9GC0YvQvNGW0LfQsNGG0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19zdGFydGluZ19hcHBzIiBtc2dpZD0iNDUxNDY0NTE2MzQ2OTI2NzEzIj4i0JfQsNC/0YPRgdC6INC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19jb21wbGV0ZSIgbXNnaWQ9IjE0MDU5NTQ3NTQxMTI5OTkyMjkiPiLQl9Cw0LLRj9GA0YjRjdC90L3QtSDQt9Cw0LPRgNGD0LfQutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb24iIG1zZ2lkPSI5MDg3MDYzOTg1Nzc2NjI2MTY2Ij4i0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSBcIjx4bGlmZjpnIGlkPSJBUFAiPiUxJHM8L3hsaWZmOmc+XCIg0LfQsNC/0YPRiNGH0LDQvdCw0LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uX2RldGFpbCIgbXNnaWQ9IjE3MjE2ODE3NDE2MTc4OTg4NjUiPiLQndCw0YbRltGB0L3RltGG0LUsINC60LDQsSDQv9C10YDQsNC50YHRhtGWINC00LAg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90aXRsZSIgbXNnaWQ9IjcxNTMxNjcwODU0MDMyOTgxNjkiPiLQn9C10YDQsNC60LvRjtGH0YvRhtGMINC/0YDRi9C60LvQsNC00LDQvdC90ZY/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RleHQiIG1zZ2lkPSI3MDIyNjMxOTI0NTM0NDA2NDAzIj4i0KPQttC+INC30LDQv9GD0YjRh9Cw0L3QsCDRltC90YjQsNC1INC/0YDRi9C60LvQsNC00LDQvdC90LUsINGP0LrQvtC1INC/0LDQstGW0L3QvdCwINCx0YvRhtGMINGB0L/Ri9C90LXQvdCwINC/0LXRgNCw0LQg0LfQsNC/0YPRgdC60LDQvCDQvdC+0LLQsNCz0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9hY3Rpb24iIG1zZ2lkPSI0OTMxMjkxNzIyMzg1NjYyODIiPiLQktGP0YDQvdGD0YbRhtCwINC00LAgPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwODIwOTQyNzU1ODAzNTgwNDkiPiLQndC1INC30LDQv9GD0YHQutCw0LnRhtC1INC90L7QstGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2FjdGlvbiIgbXNnaWQ9IjU0NzI3NTY5MjY5NDU0NDA3MDYiPiLQl9Cw0L/Rg9GB0YbRltGG0YwgPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5MzIxNDM1OTgzNzE1MzczNDAiPiLQodC/0YvQvdGW0YbRjCDRgdGC0LDRgNGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQsdC10Lcg0LfQsNGF0LDQstCw0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbmRUZXh0IiBtc2dpZD0iNTIwOTg3NDU3MTk1OTQ2OTE0MiI+ItCS0YvQsdC10YDRi9GG0LUg0LTQt9C10Y/QvdC90LUg0LTQu9GPINGC0Y3QutGB0YLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9yaW5ndG9uZSIgbXNnaWQ9IjY4ODU0MjE0MDY4NDU3MzQ2NTAiPiLQk9GD0YfQvdCw0YHRhtGMINC30LLQsNC90LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpYyIgbXNnaWQ9IjU0MjE2NTExNTcxMzg2MjgxNzEiPiLQk9GD0YfQvdCw0YHRhtGMINC/0YDQsNC50LPRgNCw0LLQsNC70YzQvdGW0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4i0J/RgNCw0LnQs9GA0LDQstCw0LXRhtGG0LAg0L/RgNCw0LcgQmx1ZXRvb3RoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+ItCj0YHRgtCw0LvRj9Cy0LDQvdGLINGG0ZbRhdGWINGA0Y3QttGL0LwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfY2FsbCIgbXNnaWQ9IjM5NDE2ODAwNDEyODI3ODg3MTEiPiLQk9GD0YfQvdCw0YHRhtGMINC/0LDQtNGH0LDRgSDRgNCw0LfQvNC+0LLRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ibHVldG9vdGhfY2FsbCIgbXNnaWQ9IjIwMDI4OTE5MjYzNTExNTE1MzQiPiLQk9GD0YfQvdCw0YHRhtGMIEJsdWV0b290aCDQv9Cw0LTRh9Cw0YEg0LLRi9C60LvRltC60YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYWxhcm0iIG1zZ2lkPSIxOTg1MTkxNjE2MDQyNjg5MTAwIj4i0JPRg9GH0L3QsNGB0YbRjCDQsdGD0LTQt9GW0LvRjNC90ZbQutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjI0MjIyNjU2NTY3NDQyNzY3MTUiPiLQk9GD0YfQvdCw0YHRhtGMINCw0L/QsNCy0Y/RiNGH0Y3QvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV91bmtub3duIiBtc2dpZD0iMTQwMDIxOTY2OTc3MDQ0NTkwMiI+ItCT0YPRh9C90LDRgdGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4i0JPRg9GH0L3QsNGB0YbRjCBCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9yaW5nZXIiIG1zZ2lkPSIzMzI2MDAzODQ3MDA2MTYyNDk2Ij4i0JPRg9GH0L3QsNGB0YbRjCDRgNGL0L3Qs9GC0L7QvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25faW5jYWxsIiBtc2dpZD0iODg5MDA3MzIxODE1NDU0MzM5NyI+ItCT0YPRh9C90LDRgdGG0Ywg0LLRi9C60LvRltC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9tZWRpYSIgbXNnaWQ9IjQyMTczMTE3MTk2NjUxOTQyMTUiPiLQk9GD0YfQvdCw0YHRhtGMINC/0YDQsNC50LPRgNCw0LLQsNC70YzQvdGW0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjcwNDQ5ODY1NDY0NzcyODIyNzQiPiLQk9GD0YfQvdCw0YHRhtGMINCw0L/QsNCy0Y/RiNGH0Y3QvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX2RlZmF1bHQiIG1zZ2lkPSIzNzg5NzU4OTgwMzU3Njk2OTM2Ij4i0KDRi9C90LPRgtC+0L0g0L/QsCDQt9C80LDRntGH0LDQvdC9aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX2RlZmF1bHRfd2l0aF9hY3R1YWwiIG1zZ2lkPSI4MTI5NTYzNDgwODk1OTkwMzcyIj4i0KDRi9C90LPRgtC+0L0g0L/QsCDQt9C80LDRntGH0LDQvdC9aSAoPHhsaWZmOmcgaWQ9IkFDVFVBTF9SSU5HVE9ORSI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfc2lsZW50IiBtc2dpZD0iNzkzNzYzNDM5MjQwODk3NzA2MiI+ItCd0Y/QvNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfcGlja2VyX3RpdGxlIiBtc2dpZD0iMzUxNTE0MzkzOTE3NTExOTA5NCI+ItCg0YvQvdCz0YLQvtC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV91bmtub3duIiBtc2dpZD0iNTQ3NzkxOTk4ODcwMTc4NDc4OCI+ItCd0LXQstGP0LTQvtC80Ysg0YDRi9C90LPRgtC+0L0iPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjY1NDEyMzk4NzQxODE2ODY5MyI+ItCh0LXRgtC60LAgV2ktRmkg0LTQsNGB0YLRg9C/0L3QsNGPIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MTkyNDI0NDg5MTY4Mzk3Mzg2Ij4i0JTQsNGB0YLRg9C/0L3Ri9GPINGB0LXRgtC60ZYgV2ktRmkiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlX2RldGFpbGVkIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTYzNDEwMTQ1MDM0MzI3NzM0NSI+ItCQ0LTQutGA0YvRgtCw0Y8g0YHQtdGC0LrQsCBXaS1GaSDQtNCw0YHRgtGD0L/QvdCw0Y8iPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc5MTU4OTUzMjM2NDQyOTI3NjgiPiLQlNCw0YHRgtGD0L/QvdGLINCw0LTQutGA0YvRgtGL0Y8g0YHQtdGC0LrRliBXaS1GaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4i0KPQstCw0LnQtNC30ZbRhtC1INGeINGB0LXRgtC60YMgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iODQ5NTE1NTU5MzM1ODA1NDY3NiI+ItCj0LLQsNC50LTQt9GW0YbQtSDRniDRgdC10YLQutGDIFdpLUZpIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW5fZGV0YWlsZWQgKDgwMDAwODE5NDE0NDc5NzYxMTgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3dhdGNoZG9nX25ldHdvcmtfZGlzYWJsZWQiIG1zZ2lkPSI3OTA0MjE0MjMxNjUxNTQ2MzQ3Ij4i0J3QtdC80LDQs9GH0YvQvNCwINC/0LDQtNC60LvRjtGH0YvRhtGG0LAg0LTQsCBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZF9kZXRhaWxlZCIgbXNnaWQ9IjU1NDg3ODA3NzY0MTgzMzI2NzUiPiIg0LTRgNGN0L3QvdCw0LUg0L/QsNC00LrQu9GO0YfRjdC90L3QtSDQtNCwINCG0L3RgtGN0YDQvdGN0YLRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IldpLUZpIERpcmVjdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3R1cm5vbl9tZXNzYWdlIiBtc2dpZD0iMjkwOTI1MDk0MjI5OTYyNzI0NCI+ItCf0LDRh9Cw0YbRjCDRgNCw0LHQvtGC0YMgV2ktRmkgRGlyZWN0LiDQk9GN0YLQsCDQsNC00LrQu9GO0YfRi9GG0Ywg0LrQu9GW0LXQvdGC0LAg0LDQsdC+INC60YDQvtC/0LrRgyDQtNC+0YHRgtGD0L/RgyBXaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiLQndC10LzQsNCz0YfRi9C80LAg0LfQsNC/0YPRgdGG0ZbRhtGMIFdpLUZpIERpcmVjdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiJXaS1GaSBEaXJlY3Qg0YPQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjM4OTQ5OTUzOTkzODk0MzM1Ij4i0JTQsNC60YDQsNC90ZbRhtC10YHRjywg0LrQsNCxINC90LDQu9Cw0LTQt9GW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiLQn9GA0YvQvdGP0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlY2xpbmUiIG1zZ2lkPSIyMTEyMjI1NDUxNzA2MTM3ODk0Ij4i0JDQtNGF0ZbQu9GW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ludml0YXRpb25fc2VudF90aXRsZSIgbXNnaWQ9IjEzMTg5NzUxODUxMTIwNzA3MzQiPiLQl9Cw0L/RgNCw0YjRjdC90L3QtSDQsNC00L/RgNCw0Z7Qu9C10L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ludml0YXRpb25fdG9fY29ubmVjdF90aXRsZSIgbXNnaWQ9IjQ5NTg4MDM5NDg2NTg1MzM2MzciPiLQl9Cw0L/RgNCw0YjRjdC90L3QtSDQtNCw0LvRg9GH0YvRhtGG0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcm9tX21lc3NhZ2UiIG1zZ2lkPSI1NzAzODkxNzQ3MzE5NTE3NjkiPiLQkNC0OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3RvX21lc3NhZ2UiIG1zZ2lkPSIyNDg5Njg5NzQ1MjIwNDQwOTkiPiLQmtCw0LzRgzoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbnRlcl9waW5fbWVzc2FnZSIgbXNnaWQ9IjU5MjA5Mjk1NTAzNjc4Mjg5NzAiPiLQo9Cy0Y/QtNC30ZbRhtC1INC/0LDRgtGA0Y3QsdC90YsgUElOLdC60L7QtDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9zaG93X3Bpbl9tZXNzYWdlIiBtc2dpZD0iODUzMDU2MzMyMzg4MDkyMTA5NCI+IlBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODAxMjk4MTI1Nzc0MjIzMjQ3NSI+ItCi0Y3Qu9C10YTQvtC9INCx0YPQtNC30LUg0YfQsNGB0L7QstCwINCw0LTQutC70Y7Rh9Cw0L3RiyDQsNC0INGB0LXRgtC60ZYgV2ktRmksINC/0LDQutGD0LvRjCDRkdC9INC/0LDQtNC70YPRh9Cw0L3RiyDQtNCwINC/0YDRi9C70LDQtNGLIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczNjM5MDcyMTM3ODc0NjkxNTEiPiLQotGN0LvQtdGE0L7QvSDQsdGD0LTQt9C1INGH0LDRgdC+0LLQsCDQsNC00LrQu9GO0YfQsNC90Ysg0LDQtCBXaS1GaSwg0L/QsNC60YPQu9GMINGR0L0g0L/QsNC00LvRg9GH0LDQvdGLINC00LAg0L/RgNGL0LvQsNC00YsgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9jaGFyYWN0ZXIiIG1zZ2lkPSIzMzY1NTUwMTIwNjE3NzAxNzQ1Ij4i0KPRgdGC0LDQstGW0YbRjCDRgdGW0LzQstCw0LsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiLQkNC00L/RgNCw0Z7QutCwIFNNUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4i0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDQtNCw0YHRi9C70LDQtSDQstGP0LvRltC60YPRjiDQutC+0LvRjNC60LDRgdGG0YwgU01TLdC/0LDQstC10LTQsNC80LvQtdC90L3Rj9GeLiDQlNCw0LfQstC+0LvRltGG0Ywg0LPRjdGC0LDQvNGDINC/0YDRi9C60LvQsNC00LDQvdC90Y4g0L/RgNCw0YbRj9Cz0LLQsNGG0Ywg0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3llcyIgbXNnaWQ9IjM2NjM3MjU5OTM4NTU4MTY4MDciPiLQlNCw0LfQstC+0LvRltGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9ubyIgbXNnaWQ9IjYyNTQzODU2MTM5NTUzNDk4MiI+ItCX0LDQsdCw0YDQsNC90ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7INGF0L7Rh9CwINCw0LTQv9GA0LDQsmnRhtGMINC/0LDQstC10LTQsNC80LvQtdC90L3QtSDQvdCwINCw0LTRgNCw0YEgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSIzNDkyMDI1NzE5ODY4MDc4NDU3Ij4i0JPRjdGC0LAgIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+ItC80L7QttCwINC/0YDRi9Cy0LXRgdGGaSDQtNCwINC00LDQtNCw0YLQutC+0LLRi9GFINCy0YvQtNCw0YLQutCw0LLQsNC90L3Rj9GeIjwvZm9udD4iINC3INCy0LDRiNCw0LPQsCDQvNCw0LFp0LvRjNC90LDQs9CwINGe0Ltp0LrQvtCy0LDQs9CwINC30LDQv2nRgdGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19wcmVtaXVtX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjU1MjM4MjYzNDkxMDUxMjM2ODciPjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+ItCT0Y3RgtCwINGB0YLQsNC90LUg0L/RgNGL0YfRi9C90LDQuSDQtNCw0LTQsNGC0LrQvtCy0LDQs9CwINGB0L/QsNCz0L3QsNC90L3RjyDRgdGA0L7QtNC60LDRniDQtyDQstCw0YjQsNCz0LAg0LzQsNCxadC70YzQvdCw0LPQsCDRntC7adC60L7QstCw0LPQsCDQt9Cw0L9p0YHRgy4iPC9mb250Pjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbGxvdyIgbXNnaWQ9IjQ0NTg4Nzg2MzcxMTEwMjM0MTMiPiLQkNC00L/RgNCw0LJp0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiLQkNC00LzQtdC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl9jaG9pY2UiIG1zZ2lkPSI1Mjg5NTM4NTkyMjcyMjE4MTM2Ij4i0JfQsNGF0LDQstCw0YbRjCDQvNC+0Lkg0LLRi9Cx0LDRgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4i0J/QsNC30L3QtdC5INCz0Y3RgtCwINC80L7QttC90LAg0LfQvNGP0L1p0YbRjCDRgyDRgNCw0LfQtNC30LXQu9C1IFwi0J3QsNC70LDQtNGLICZndDsg0J/RgNGL0LrQu9Cw0LTQsNC90L1pXCIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2Fsd2F5c19hbGxvdyIgbXNnaWQ9IjMyNDExODExNTQ4Njk0OTMzNjgiPiLQl9Cw0Z7RgdGR0LTRiyDQtNCw0LfQstCw0LvRj9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4i0J3RltC60L7Qu9GWINC90LUg0LTQsNC30LLQsNC70Y/RhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4iU0lNLdC60LDRgNGC0LAg0LLRi9C00LDQu9C10L3QsNGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfbWVzc2FnZSIgbXNnaWQ9IjIzMzMxNjQ1NTk5NzA5NTg2NDUiPiLQnNCw0LHRltC70YzQvdCw0Y8g0YHQtdGC0LrQsCDQsdGD0LTQt9C1INC90LXQtNCw0YHRgtGD0L/QvdCw0Y8g0LTQsCDQv9C10YDQsNC30LDQs9GA0YPQt9C60ZYg0Lcg0LTQt9C10Y7Rh9Cw0LkgU0lNLdC60LDRgNGC0LDQuS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiLQk9Cw0YLQvtCy0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4iU0lNLdC60LDRgNGC0LAg0LTQsNC00LDQt9C10L3QsNGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX21lc3NhZ2UiIG1zZ2lkPSI2NTk5OTQ1MzAxMTQxMDUwMjE2Ij4i0J/QtdGA0LDQt9Cw0LPRgNGD0LfRltGG0LUg0L/RgNGL0LvQsNC00YMsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMINC00L7RgdGC0YPQvyDQtNCwINC80LDQsdGW0LvRjNC90LDQuSDRgdC10YLQutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiLQn9C10YDQsNC30LDQv9GD0YHRhtGW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjgzNDkzNjI2MjMwNjg4MTkyOTUiPiLQo9GB0YLQsNC70Y/QstCw0YbRjCDRh9Cw0YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI1ODc5NDUwNjU5NDUzNzgyMjc4Ij4i0KPRgdGC0LDQu9GP0LLQsNGG0Ywg0LTQsNGC0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfc2V0IiBtc2dpZD0iNTc3NzA3NTYxNDMyMTA4Nzc1OCI+ItCX0LDQtNCw0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9kb25lIiBtc2dpZD0iMjUwNzY4Mzc1MTc1OTMwODgyOCI+ItCT0LDRgtC+0LLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1zX25ld19wZXJtX3ByZWZpeCIgbXNnaWQ9IjgyNTc3NDA3MTA3NTQzMDE0MDciPjxmb250IHNpemU9IjEyIiBmZ2NvbG9yPSIjZmYzM2I1ZTUiPiLQndCe0JLQkNCVOiAiPC9mb250Pjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybXNfZGVzY3JpcHRpb25fYXBwIiBtc2dpZD0iNTEzOTgzNjE0MzI5MzI5OTQxNyI+ItCf0YDQsNC00LDRgdGC0LDRntC70LXQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3QtdC8IDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fcGVybWlzc2lvbnMiIG1zZ2lkPSI3MjgzMzU3NzI4MjE5MzM4MTEyIj4i0JTQsNC30LLQvtC70YMg0L3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiLQt9CwINCz0Y3RgtCwINC80L7QttCwINGB0L/QsNCz0LDQvdGP0YbRhtCwINC/0LvQsNGC0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9hY3Rpdml0eV90aXRsZSIgbXNnaWQ9IjQ0NjUwNTUxNTcyMDk2NDg2NDEiPiLQo9C9adCy0LXRgNGB0LDQu9GM0L3RiyBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+IlVTQiDQv9Cw0LTQu9GD0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMzMDg1MzgwOTQzMTY0Nzc4MzkiPiLQktGLINC/0LDQtNC70YPRh9Cw0L3RiyDQtNCwINC60LDQvNC/XCfRjtGC0LDRgNCwINC/0YDQsNC3IFVTQi4g0J3QsNGG0ZbRgdC90ZbRhtC1INC90LAg0LrQvdC+0L/QutGDINC90ZbQttGN0LksINC60LDQu9GWINC20LDQtNCw0LXRhtC1INC60LDQv9GW0YDQsNCy0LDRhtGMINGE0LDQudC70Ysg0Lcg0LrQsNC80L9cJ9GO0YLQsNGA0LAg0L3QsCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQuiDQv9GA0YvQu9Cw0LTRiyBBbmRyb2lkINGWINC90LDQsNC00LLQsNGA0L7Rgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA1MzUxMDAwNDQ2MDM3ODExIj4i0JLRiyDQv9Cw0LTQutC70Y7Rh9GL0LvRltGB0Y8g0LTQsCDQutCw0LzQv1wn0Y7RgtCw0YDQsCDQv9GA0LDQtyBVU0IuINCd0LDRhtGW0YHQvdGW0YbQtSDQvdCwINC60L3QvtC/0LrRgyDQvdGW0LbRjdC5LCDQutCw0LvRliDQstGLINC20LDQtNCw0LXRhtC1INGB0LrQsNC/0ZbRgNCw0LLQsNGG0Ywg0YTQsNC50LvRiyDQtyDQutCw0LzQv1wn0Y7RgtCw0YDQsCDQvdCwIFNELdC60LDRgNGC0YMg0L/RgNGL0LvQsNC00YsgQW5kcm9pZCDRliDQvdCw0LDQtNCy0LDRgNC+0YIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYnV0dG9uX21vdW50IiBtc2dpZD0iMTA1MjI1OTkzMDM2OTUwODIzNSI+ItCj0LrQu9GO0YfRi9GG0YwgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzAxNzA0NTIxNzM2NTU0MDY1OCI+ItCf0LDRntGB0YLQsNC70LAg0L/RgNCw0LHQu9C10LzQsCDQtyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90LXQvCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC60LAg0LLQsCDRntC9adCy0LXRgNGB0LDQu9GM0L3Ri9C8IFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0LrRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg3NjAxODUxMjcxNjk3MDMxMyI+ItCf0LDRntGB0YLQsNC70LAg0L/RgNCw0LHQu9C10LzQsCDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8gU0Qt0LrQsNGA0YLRiyDQstCwINGe0L1p0LLQtdGA0YHQsNC70YzQvdGL0LwgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQutGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0Ig0L/QsNC00LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkzOTgyMjc4MzgyODE4Mzc2MyI+ItCU0LDQutGA0LDQvdGW0YbQtdGB0Y8sINC60LDQsSDQutCw0L/RltGP0LLQsNGG0Ywg0YTQsNC50LvRiyDQtyDQutCw0LzQv1wn0Y7RgtCw0YDQsCDRhmkg0L3QsCDRj9Cz0L4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzM2MDU4Mzk2NjYzNTE2MDE3Ij4i0JLRi9C60LvRjtGH0YvRhtGMIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINCw0LTQutC70Y7Rh9GL0YbRjCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQui4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX3RpdGxlIiBtc2dpZD0iNjYwMTI5ODUxNzA4Nzc1ODUzIj4iVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvdGW0Log0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0LXRhtGG0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+ItCf0LXRgNGIINGH0YvQvCDQsNC00LrQu9GO0YfRi9GG0YwgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvdGW0LosINCw0LTQutC70Y7Rh9GL0YbQtShcItCy0YvQvGnRhtC1XCIpIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC6INC/0YDRi9C70LDQtNGLIEFuZHJvaWQg0LDQtCDQutCw0LzQv1wn0Y7RgtCw0YDQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4i0J/QtdGA0Ygg0YfRi9C8INCw0LTQutC70Y7Rh9GL0YbRjCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQuiwg0LDQtNC60LvRjtGH0YvRhtC1KFwi0LLRi9C8adGG0LVcIikgU0Qt0LrQsNGA0YLRgyDQstCw0YjQsNC5INC/0YDRi9C70LDQtNGLIEFuZHJvaWQg0Lcg0LrQsNC80L9cJ9GO0YLQsNGA0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9idXR0b25fbW91bnQiIG1zZ2lkPSI3MDYwMjE4MDM0OTAwNjk2MDI5Ij4i0JDQtNC60LvRjtGH0YvRhtGMIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxOTcwMzc0ODk4MjYzMDYzODM2Ij4i0J/QsNC80YvQu9C60LAg0LDQtNC60LvRjtGH0Y3QvdC90Y8gVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvdGW0LrQsC4g0J/QtdGA0LDQutCw0L3QsNC50YbQtdGB0Y8sINGI0YLQviDQstGLINCw0LTQutC70Y7Rh9GL0LvRliDRhdC+0YHRgiBVU0IsINCwINC/0L7RgtGL0Lwg0L/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiLQn9Cw0LTQutC70Y7Rh9GL0YbRjCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4i0JrQsNC70ZYg0LLRiyDRntC60LvRjtGH0YvRhtC1IFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC6LCDQvdC10LrQsNGC0L7RgNGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3Rliwg0Y/QutGW0Y8g0LLRiyDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDQtdGG0LUsINGB0L/Ri9C90Y/RhtGG0LAg0ZYg0LzQvtCz0YPRhtGMINCx0YvRhtGMINC90LXQtNCw0YHRgtGD0L/QvdGL0Y8sINC/0LDQutGD0LvRjCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQuiDQvdC1INCx0YPQtNC30LUg0LDQtNC60LvRjtGH0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiLQn9Cw0LzRi9C70LrQsCDQv9GA0LDRhtGLIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19vayIgbXNnaWQ9IjczNzY5NTMxNjcwMzk4NjU3MDEiPiLQntCaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX210cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzNjk5OTEzMDk3MzkxNTUwMzk0Ij4i0J/QsNC00LvRg9GH0LDQvdCwINGP0Log0LzQtdC00YvRjy3Qv9GA0YvQu9Cw0LTQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9wdHBfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMTk2MDgxNzE5MjIxNjA2NDgzMyI+ItCf0LDQtNC60LvRjtGH0LDQvdGLINGP0Log0LrQsNC80LXRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2NkX2luc3RhbGxlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2Nzc0NzEyODI3ODkyMDkwNzU0Ij4i0J/QsNC00LvRg9GH0LDQvdGLINGP0Log0YPRgdGC0LDQu9GP0LLQsNC70YzQvdGW0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiLQn9Cw0LTQutC70Y7Rh9Cw0L3RiyDQtNCwIFVTQi3Qv9GA0YvQu9Cw0LTRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjIyOTA4NTkzOTk5ODM3MjAyNzEiPiLQndCw0YbRltGB0L3RltGG0LUsINC60LDQsSDRg9Cx0LDRh9GL0YbRjCDRltC90YjRi9GPINC/0LDRgNCw0LzQtdGC0YDRiyBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiLQpNCw0YDQvNCw0YLQsNCy0LDRhtGMIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0Lo/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+ItCk0LDRgNC80LDRgtCw0LLQsNGG0YwgU0Qt0LrQsNGA0YLRgz8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTM0MDE2ODUzNDI1NzYxMDc4Ij4i0KPRgdC1INGE0LDQudC70YssINGP0LrRltGPINC30LDRhdC+0Z7QstCw0Y7RhtGG0LAg0L3QsCDQstCw0YjRi9C8IFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC60YMsINCx0YPQtNGD0YbRjCDQstGL0LTQsNC70LXQvdGLLiDQk9GN0YLQsCDQtNC30LXRj9C90L3QtSDQvdC1INC80L7QttCwINCx0YvRhtGMINCw0LTQvNC10L3QtdC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDEzMTg5NTAyNzU0MzgzMCI+ItCj0YHQtSDQtNCw0LTQt9C10L3Ri9GPINC90LAg0LrQsNGA0YbQtSDQsdGD0LTRg9GG0Ywg0YHRgtGA0LDRh9Cw0L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfYnV0dG9uX2Zvcm1hdCIgbXNnaWQ9IjQxMzEwNjQ1NjAxMjc0Nzg2OTUiPiLQpNCw0YDQvNCw0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3MjkwNDQ3Nzg5NDkxODk5MTgiPiLQn9GA0YvQu9Cw0LTQsCDQsNC00LvQsNC00LrRliBVU0Ig0L/QsNC00LrQu9GO0YfQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINCw0LTQutC70Y7Rh9GL0YbRjCDQsNC00LvQsNC00LrRgyBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2lucHV0X21ldGhvZCIgbXNnaWQ9IjQ2NTMzODczMzY3OTEyMjI5NzgiPiLQktGL0LHQtdGA0YvRhtC1INC80LXRgtCw0LQg0YPQstC+0LTRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iOTA5MTY1MjE1NzcyMjQ5NTExNiI+ItCd0LDQu9Cw0LTQt9GW0YbRjCDQvNC10YLQsNC00Ysg0Z7QstC+0LTRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiLQpNGW0LfRltGH0L3QsNGPINC60LvQsNCy0ZbRj9GC0YPRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGFyZHdhcmUiIG1zZ2lkPSI3NTE3ODIxMDg2ODg4OTkwMjc4Ij4i0JDQv9Cw0YAuINGB0YAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxNDA3MzY3MDE3MjYzMDMwNzczIj4i0JLRi9Cx0YDQsNGG0Ywg0YDQsNGB0LrQu9Cw0LTQutGDINC60LvQsNCy0ZbRj9GC0YPRgNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0NjU5MDc3MDA0NDkyNTcwNjMiPiLQndCw0YbRltGB0L3RltGG0LUsINC60LDQsSDQstGL0LHRgNCw0YbRjCDRgNCw0YHQutC70LDQtNC60YMg0LrQu9Cw0LLRltGP0YLRg9GA0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfYWxwaGFiZXQiIG1zZ2lkPSI1NDMzMjc1NDg1NDk5MDM5MTk5Ij4iINCQ0JHQktCT0JTQldCB0JbQl9CG0JnQmtCb0JzQndCe0J/QoNCh0KLQo9CO0KTQpdCm0KfQqFwn0KvQrNCt0K7QryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhbmRpZGF0ZXNfc3R5bGUiIG1zZ2lkPSI0MzMzOTEzMDg5NjM3MDYyMjU3Ij48dT4i0LrQsNC90LTRi9C00LDRgi4iPC91Pjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ5ODE2MDA1MzUxNDY4NTYwIj4i0J/QsNC00YDRi9GF0YLQvtGe0LrQsCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ1NzYwMzQxODk3MDk5NDA1MCI+ItCf0LDQtNGA0YvRhdGC0L7RntC60LAgU0Qt0LrQsNGA0YLRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgyODczMTk4ODI5MjY3MzcwNTMiPiLQn9GA0LDQstC10YDQutCwINC90LAg0L3QsNGP0Z7QvdCw0YHRhtGMINC/0LDQvNGL0LvQsNC6LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3Nzg4MDQwNzQ1Njg2MjI5MzA3Ij4i0J/Rg9GB0YLRiyBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzgwNDc3ODM4MjQxMjEyOTk3Ij4i0J/Rg9GB0YLQsNGPIFNELdC60LDRgNGC0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4iVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvdGW0Log0L/Rg9GB0YLRiyDQsNCx0L4g0LzQsNC1INGE0LDQudC70LDQstGD0Y4g0YHRltGB0YLRjdC80YMsINGP0LrQsNGPINC90LUg0L/QsNC00YLRgNGL0LzQu9GW0LLQsNC10YbRhtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+IlNELdC60LDRgNGC0LAg0L/Rg9GB0YLQsNGPINCw0LHQviDQvNCw0LUg0YTQsNC50LvQsNCy0YPRjiDRgdGW0YHRgtGN0LzRgywg0Y/QutCw0Y8g0L3QtSDQv9Cw0LTRgtGA0YvQvNC70ZbQstCw0LXRhtGG0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i0J/QsNGI0LrQvtC00LbQsNC90YsgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDEwNzIzOTA2MDE5MTAwMTg5Ij4iU0Qt0LrQsNGA0YLQsCDQv9Cw0YjQutC+0LTQttCw0L3QsNGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE3OTU5MTc1NzgzOTUzMzMyODAiPiJVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQuiDQv9Cw0YjQutC+0LTQttCw0L3Riy4g0J/QsNGB0L/RgNCw0LHRg9C50YbQtSDQsNC00YTQsNGA0LzQsNGC0LDQstCw0YbRjCDRj9Cz0L4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+IlNELdC60LDRgNGC0LAg0L/QsNGI0LrQvtC00LbQsNC90LAuINCf0LDRgdC/0YDQsNCx0YPQudGG0LUg0LDQtNGE0LDRgNC80LDRgtCw0LLQsNGG0Ywg0Y/QtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+IlVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0Log0L3QtdGH0LDQutCw0L3QsCDQsdGL0Z4g0LLRi9C00LDQu9C10L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NzIxNTI4ODI2MDQ0MDc4MzciPiJTRC3QutCw0YDRgtCwINCx0YvQu9CwINC90LXRh9Cw0LrQsNC90LAg0LLRi9C00LDQu9C10L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiLQkNC00LrQu9GO0YfRi9GG0LUgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQuiwg0L/QtdGA0Ygg0YfRi9C8INCy0YvRhtGP0LPQstCw0YbRjCDRj9Cz0L4sINC60LDQsSDQv9Cw0LfQsdC10LPQvdGD0YbRjCDRgdGC0YDQsNGC0Ysg0LTQsNC00LfQtdC90YvRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjAxODMyOTM3NDc0NDgyNDEiPiLQmtCw0LEg0L/QsNC30LHQtdCz0L3Rg9GG0Ywg0YHRgtGA0LDRgtGLINC00LDQtNC30LXQvdGL0YUsINCw0LTQutC70Y7Rh9GL0YbQtSBTRC3QutCw0YDRgtGDLCDQv9C10YDRiCDRh9GL0Lwg0LLRi9C80LDRhtGMINGP0LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+IlVTQi3QvdCw0LfQsNC/LiDQvNC+0LbQvdCwINCx0Y/RgdC/LiDQstGL0YbRj9Cz0L3Rg9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY3Mjk4MDExMzA3OTA2MTYyMDAiPiLQnNC+0LbQvdCwINCx0Y/RgdC/0LXRh9C90LAg0LLRi9C00LDQu9GW0YbRjCBTRC3QutCw0YDRgtGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4i0JLRiyDQvNC+0LbQsNGG0LUg0LHRj9GB0L/QtdGH0L3QsCDQstGL0LTQsNC7adGG0YwgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQui4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTY4ODQxMjc4MTM4Mzc3NjA0Ij4i0JLRiyDQvNC+0LbQsNGG0LUg0LHRj9GB0L/QtdGH0L3QsCDQstGL0LTQsNC70ZbRhtGMIFNELdC60LDRgNGC0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiJVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC6INCy0YvQtNCw0LvQtdC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTAyNTE4MDMwNDA0MzgxMzE4Ij4iU0Qt0LrQsNGA0YLQsCDQstGL0LTQsNC70LXQvdCw0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQuiDQstGL0LTQsNC70LXQvdGLLiDQo9GB0YLQsNCy0ZbRhtGMINC90L7QstGL0Y8g0L3QvtGB0YzQsdGW0YLRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJTRC3QutCw0YDRgtCwINCy0YvQtNCw0LvQtdC90LDRjy4g0KPRgdGC0LDRntGG0LUg0L3QvtCy0YPRji4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9saXN0X2VtcHR5IiBtc2dpZD0iMTY3NTM4ODMzMDc4Njg0MTA2NiI+ItCQ0LTQv9Cw0LLQtdC00L3Ri9GPINC00LfQtdGP0L3QvdGWINC90LUg0LfQvdC+0LnQtNC30LXQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9Ijg3ODczNTIwNzQzMjY3NDg4OTIiPiLQsNCx0L3QsNCy0ZbRhtGMINGB0YLQsNGC0YvRgdGC0YvQutGDINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQutCw0LzQv9Cw0L3QtdC90YLQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9IjExMDY2MTI0MjQyNTQyNzc2MzAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDRgdCw0LHRgNCw0L3Rg9GOINGB0YLQsNGC0YvRgdGC0YvQutGDINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQutCw0LzQv9Cw0L3QtdC90YLQsNGeLiDQndC1INC00LvRjyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0LfQstGL0YfQsNC50L3Ri9C80ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C80ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzNDEwMzYzMTEyMTE0MDY2OTIiPiLQutCw0L/RltGP0LLQsNGG0Ywg0LfQvNC10YHRhtGW0LLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM5MDY5NzEyNDI4ODMxNzgzMSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCy0YvQutC70ZbQutCw0YbRjCDRgdC70YPQttCx0YMg0LfQsNGF0LDQstCw0L3QvdGPINC/0LAg0LfQvNCw0Z7Rh9Cw0L3QvdGWINC00LvRjyDQutCw0L/RltGP0LLQsNC90L3RjyDQt9C80LXRgdGG0ZbQstCwLiDQndC1INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNC10YbRhtCwINC30LLRi9GH0LDQudC90YvQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iMTY0MjAyNDQ1NTc1MDQxNDY5NCI+ItCc0LDRgNGI0YDRg9GC0L3RiyDQvNGD0LvRjNGC0YvQvNC10LTRi9C50L3RiyDQstGL0YXQsNC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNDkzMjgxODc0OTU0NzI0NDM0NiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC80LDRgNGI0YDRg9GC0YvQt9Cw0LLQsNGG0Ywg0LzRg9C70YzRgtGL0LzQtdC00YvQudC90Ysg0LLRi9GF0LDQtCDQvdCwIGnQvdGI0YvRjyDQt9C90LXRiNC9adGPINC/0YDRi9C70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNzU2NTU1MjIzNzk3NzgxNTA0NyI+ItCU0L7RgdGC0YPQvyDQtNCwINCx0LvQsNC60ZbRgNC+0Z7QutGWINC60LvQsNCy0ZbRj9GC0YPRgNGLINCx0Y/RgdC/0LXRh9C90LDQs9CwINGB0YXQvtCy0ZbRiNGH0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI1ODY2MjQ1NDg0MzAzMjg1NzYyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0LTQvtGB0YLRg9C/INC00LAg0LHQu9Cw0LrRltGA0L7RntC60ZYg0LrQu9Cw0LLRltGP0YLRg9GA0Ysg0LHRj9GB0L/QtdGH0L3QsNCz0LAg0YHRhdC+0LLRltGI0YfQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIxNzIxOTUxODQyMDc4MjgzODciPiLQmmnRgNCw0LLQsNC90L3QtSDQsNC00LvRjtGB0YLRgNCw0LLQsNC90L3QtdC8INGWINGB0YXQsNCy0LDQvdC90LXQvCDQsdC70LDQumnRgNC+0Z7Qumkg0LrQu9Cw0LLRltGP0YLRg9GA0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sX2tleWd1YXJkIiBtc2dpZD0iMzA0MzczMjI5MDUxODYyOTA2MSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQumnRgNCw0LLQsNGG0Ywg0LHQu9Cw0Lpp0YDQvtGe0LrQsNC5INC60LvQsNCyadGP0YLRg9GA0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idHV0b3JpYWxfZG91YmxlX3RhcF90b196b29tX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0MDcwNDMzMjA4MTYwMDYzNTM4Ij4i0JTQstC+0LnRh9GLINC00LDQutGA0LDQvdGW0YbQtdGB0Y8sINC60LDQsSDQt9C80Y/QvWnRhtGMINC80LDRiNGC0LDQsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdhZGdldF9ob3N0X2Vycm9yX2luZmxhdGluZyIgbXNnaWQ9IjQ4ODIwMDQzMTQ5MDY0NjYxNjIiPiLQndC10LzQsNCz0YfRi9C80LAg0LTQsNC00LDRhtGMINCy0ZbQtNC20Y3Rgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2dvIiBtc2dpZD0iODMyMDg0NTY1MTczNzM2OTAyNyI+ItCf0LDRh9Cw0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VhcmNoIiBtc2dpZD0iNjU4MTEwMjcxODIyODA3ODExIj4i0J/QvtGI0YPQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VuZCIgbXNnaWQ9IjIzMTYxNjY1NTYzNDkzMTQ0MjQiPiLQkNC00L/RgNCw0LLRltGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX25leHQiIG1zZ2lkPSIzMTM4ODQzOTA0MDA5ODEzODM0Ij4i0JTQsNC70LXQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZG9uZSIgbXNnaWQ9Ijg5NzE1MTYxMTc5MTA5MzQ2MDUiPiLQk9Cw0YLQvtCy0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3ByZXZpb3VzIiBtc2dpZD0iMTQ0MzU1MDAzOTI1MDEwNTk0OCI+ItCd0LDQt9Cw0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2RlZmF1bHQiIG1zZ2lkPSIyODQwOTIxODg1NTU4MDQ1NzIxIj4i0JLRi9C60LDQvdCw0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRpYWxfbnVtYmVyX3VzaW5nIiBtc2dpZD0iNTc4OTE3NjQyNTE2NzU3MzU4NiI+ItCd0LDQsdGA0LDRhtGMINC90YPQvNCw0YBcbtC3INCy0YvQutCw0YDRi9GB0YLQsNC90L3QtdC8IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9jb250YWN0X3VzaW5nIiBtc2dpZD0iNDk0NzQwNTIyNjc4ODEwNDUzOCI+ItCh0YLQstCw0YDRi9GG0Ywg0LrQsNC90YLQsNC60YJcbtC3INC00LDQv9Cw0LzQvtCz0LDQuTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9oZWFkZXIiIG1zZ2lkPSIyMTA2MTAzODE3OTM3ODU5NjYyIj4i0JPRjdGC0YvRjyDQsNC00L3QviDQsNCx0L4g0L3QtdC60LDQu9GM0LrRliDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4g0LfQsNC/0YvRgtCy0LDRjtGG0Ywg0LTQsNC30LLQvtC7INC90LAg0LTQvtGB0YLRg9C/INC00LAg0LLQsNGI0LDQs9CwINGe0LvRltC60L7QstCw0LPQsCDQt9Cw0L/RltGB0YMg0YbRj9C/0LXRgCDRliDRniDQsdGD0LTRg9GH0YvQvdGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9mb290ZXIiIG1zZ2lkPSIzMTI1MjExMzQzMzc5Mzc2NTYxIj4i0JTQsNC30LLQvtC70ZbRhtGMINCz0Y3RgtGLINC30LDQv9GL0YI/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfcGVybWlzc2lvbnNfaGVhZGVyX3RleHQiIG1zZ2lkPSI2ODc0NDk3NDA4MjAxODI2NzA4Ij4i0JfQsNC/0YvRgiDQvdCwINC00L7RgdGC0YPQvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsbG93IiBtc2dpZD0iNzIyNTk0ODgxMTI5NjM4NjU1MSI+ItCU0LDQt9Cy0L7Qu9GW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4i0JfQsNCx0LDRgNCw0L3RltGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjQ4Njc1OTc5NTkyNjIzNzkwNyI+ItCU0LDQt9Cy0L7QuyDQt9Cw0L/Ri9GC0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWlzc2lvbl9yZXF1ZXN0X25vdGlmaWNhdGlvbl93aXRoX3N1YnRpdGxlIiBtc2dpZD0iODUzMDM5MzEzOTYzOTU2MDE4OSI+ItCX0LDQv9GL0YLQsNC90Ysg0LTQsNC30LLQvtC7XG7QtNC70Y8g0Z7Qu9GW0LrQvtCy0LDQs9CwINC30LDQv9GW0YHRgyA8eGxpZmY6ZyBpZD0iQUNDT1VOVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRfbWV0aG9kX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjgzNTU3MTc5OTQ0OTkyNjQ5Ij4i0JzQtdGC0LDQtCDRg9Cy0L7QtNGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+ItCh0ZbQvdGF0YDQsNC90ZbQt9Cw0YbRi9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iNDE0ODEyMDc0MjA5NjQ3NDY0MSI+ItCh0L/QtdGG0YvRj9C70YzQvdGL0Y8g0LzQsNCz0YfRi9C80LDRgdGG0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3YWxscGFwZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyNDAwODc4NDQzMDQ2ODc2NjIiPiLQqNC/0LDQu9C10YDRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+ItCX0LzQtdC90LAg0YjQv9Cw0LvQtdGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i0KHQu9GD0YXQsNGHINCw0L/QsNCy0Y/RiNGH0Y3QvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDQsNC60YLRi9Cy0LDQstCw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiDQsNC60YLRi9Cy0YPQtdGG0YbQsCDQv9GA0YvQutC70LDQtNCw0L3QvdC10LwgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i0JTQsNC60YDQsNC90ZbRhtC10YHRjywg0LrQsNCxINC60ZbRgNCw0LLQsNGG0Ywg0YHQtdGC0LrQsNC5LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0X2xvbmciIG1zZ2lkPSI2NDA3MzUxMDA2MjQ5MTc0NDczIj4i0J/QsNC00LvRg9GH0LDQvdGLINC00LAg0YHQtdCw0L3RgdCwIFwiPHhsaWZmOmcgaWQ9IlNFU1NJT04iPiVzPC94bGlmZjpnPlwiLiDQlNCw0LrRgNCw0L3RltGG0LXRgdGPLCDQutCw0LEg0Lpp0YDQsNCy0LDRhtGMINGB0LXRgtC60LDQuS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiLQn9Cw0LTQutC70Y7Rh9GN0L3QvdC1INC30LDRntGB0ZHQtNGLINGe0LrQu9GO0YfQsNC90LDQs9CwIFZQTi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0ZWQiIG1zZ2lkPSI4MjAyNjc5Njc0ODE5MjEzOTMxIj4i0JfQsNGe0YHRkdC00Ysg0Z7QutC70Y7Rh9Cw0L3RiyBpINC/0LDQtNC60LvRjtGH0LDQvdGLIFZQTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9lcnJvciIgbXNnaWQ9IjYwMDkyNDk4MTQwMzQ3MDgxNzUiPiLQn9Cw0LzRi9C70LrQsCDQt9Cw0Z7RgdGR0LTRiyDRntC60LvRjtGH0LDQvdCw0LPQsCBWUE4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29uZmlnIiBtc2dpZD0iNjQxNTg5OTE1MDY3MTUzNzk3MCI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINC30LzRj9C90ZbRhtGMINC90LDQu9Cw0LTRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVwbG9hZF9maWxlIiBtc2dpZD0iMjg5Nzk1NzE3MjM2NjczMDQxNiI+ItCS0YvQsdC10YDRi9GG0LUg0YTQsNC50LsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub19maWxlX2Nob3NlbiIgbXNnaWQ9IjYzNjM2NDg1NjIxNzA3NTk0NjUiPiLQpNCw0LnQuyDQvdC1INCy0YvQsdGA0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzZXQiIG1zZ2lkPSIyNDQ4MTY4MDgwOTY0MjA5OTA4Ij4i0KHQutGW0L3Rg9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdWJtaXQiIG1zZ2lkPSIxNjAyMzM1NTcyMDg5OTExOTQxIj4i0J/QtdGA0LDQtNCw0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+ItCg0Y3QttGL0LwgXCLQoyDQvNCw0YjRi9C90LVcIiDRntC60LvRjtGH0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgwMzUyMzA1Mzc1NjM1MDMyNjIiPiLQlNCw0LrRgNCw0L3RltGG0LXRgdGPLCDQutCw0LEg0LLRi9C50YHRhtGWINC3INGA0Y3QttGL0LzRgyBcItCo0YLRg9GA0LzQsNC9XCIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE0NjY5NDIzNDM5ODIwMjYwMSI+IlVTQi3QvNCw0LTRjdC8INCw0LHQviDQutGA0L7Qv9C60LAg0LTQvtGB0YLRg9C/0YMgV2ktRmkg0LDQutGC0YvRntC90YvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNjg1NzAzMTc2MDEwMzA2Mjk4MiI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINC90LDQu9Cw0LTQt9GW0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiLQndCw0LfQsNC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV4dF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMDgwNTU1MTA0Njc3OTkyNDA4Ij4i0JTQsNC70LXQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNraXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTI3NTM2MjI5OTQ3MTYzMTgxOSI+ItCf0YDQsNC/0YPRgdGG0ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0ODkwODk0MjY3NDU0ODY3Mjc2Ij4i0IbQvdGC0Y3QvdGB0ZbRntC90LDQtSDQstGL0LrQsNGA0YvRgdGC0LDQvdC90LUg0L/QtdGA0LDQtNCw0YfRiyDQtNCw0LTQt9C10L3Ri9GFINC/0YDQsNC3INC80LDQsdGW0LvRjNC90YPRjiDRgdC10YLQutGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjMzNDA4MjIyMjg1OTkzMzc3NDMiPiLQndCw0YbRltGB0L3RltGG0LUsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMINC00LDQtNCw0YLQutC+0LLRi9GPINC30LLQtdGB0YLQutGWINCw0LEg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGWINC80LDQsWnQu9GM0L3QsNC5INC/0LXRgNCw0LTQsNGH0Ysg0LTQsNC00LfQtdC90YvRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjI2OTU0MTg5NzcyOTc4MTMzMiI+ItCb0ZbQvNGW0YIg0LzQsNCx0ZbQu9GM0L3QsNC5INC/0LXRgNCw0LTQsNGH0Ysg0LTQsNC00LfQtdC90YvRhSDQv9C10YDQsNCy0YvRiNCw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjU0NDM0NTczMjEzNTQ5MDcxODEiPiLQndCw0YbRltGB0L3RltGG0LUsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMINC00LDQtNCw0YLQutC+0LLRi9GPINC30LLQtdGB0YLQutGWINCw0LEg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGWINC80LDQsWnQu9GM0L3QsNC5INC/0LXRgNCw0LTQsNGH0Ysg0LTQsNC00LfQtdC90YvRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub19tYXRjaGVzIiBtc2dpZD0iODEyOTQyMTkwODkxNTg0MDczNyI+ItCd0Y/QvNCwINGB0YPQv9Cw0LTQt9C10L3QvdGP0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmaW5kX29uX3BhZ2UiIG1zZ2lkPSIxOTQ2Nzk5MjMzODIyODIwMzg0Ij4i0JfQvdCw0LnRgdGG0ZYg0L3QsCDRgdGC0LDRgNC+0L3RhtGLIjwvc3RyaW5nPgotICA8cGx1cmFscyBuYW1lPSJtYXRjaGVzX2ZvdW5kIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODE2NzE0NzA4MTEzNjU3OTQzOSI+IjEg0YHRg9C/0LDQtNC30LXQvdC90LUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ2NDE4NzI3OTcwNjc2MDkxNzciPiI8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiDQtyA8eGxpZmY6ZyBpZD0iVE9UQUwiPiVkPC94bGlmZjpnPiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tb2RlX2RvbmUiIG1zZ2lkPSI3MjE3NTgxNjQwNDYxOTIyMjg5Ij4i0JPQsNGC0L7QstCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4i0JDQtNC60LvRjtGH0Y3QvdC90LUgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQutCwLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMjc4OTQ5OTg0MDk1MzcxOTAiPiLQkNC00LrQu9GO0YfRjdC90L3QtSBTRC3QutCw0YDRgtGLLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NTIxNTczMzIxNTI0MzQwMDU4Ij4i0JLRi9C00LDQu9C10L3QvdC1INC00LDQtNC30LXQvdGL0YUg0LcgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQutCwLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1OTY5ODg4NzU1MDcwNDMwNDIiPiLQktGL0LTQsNC70LXQvdC90LUg0LTQsNC00LfQtdC90YvRhSDQtyBTRC3QutCw0YDRgtGLLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiLQndC10LzQsNCz0YfRi9C80LAg0LDRh9GL0YHRhmnRhtGMIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC6LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMTUyNDg2OTY2NDQ1MTA5MzUiPiLQndC10LzQsNCz0YfRi9C80LAg0LDRh9GL0YHRhmnRhtGMIFNELdC60LDRgNGC0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4iU0Qt0LrQsNGA0YLQsCDQsdGL0LvQsCDQstGL0L3Rg9GC0LDRjyDQtNCwINCw0LTQutC70Y7Rh9GN0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDE4MTg4NzIwMDA5NTY5NjkzIj4i0JfQsNGA0LDQtyBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC6INC/0YDQsNCy0Y/RgNCw0LXRhtGG0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzM0NzYyNTAzOTA0ODI3NDgxIj4i0JfQsNGA0LDQtyBTRC3QutCw0YDRgtCwINC/0YDQsNCy0Y/RgNCw0LXRhtGG0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcmVtb3ZlZCIgbXNnaWQ9IjcwMDE1MjY5MDUwNTc5NTIwOTciPiJTRC3QutCw0YDRgtCwINCx0YvQu9CwINCy0YvQtNCw0LvQtdC90LDRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNTgzMDgxNDM0OTI1MDgzNDIyNSI+ItCX0LDRgNCw0LcgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQuiDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDQtdGG0YbQsCDQutCw0LzQv9GD0YLQsNGA0LDQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzA2MTMwNTY4MTMzNTQwNDM1Ij4i0JfQsNGA0LDQtyBTRC3QutCw0YDRgtCwINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNC10YbRhtCwINC60LDQvNC/0YPRgtCw0YDQsNC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Vua25vd25fc3RhdGUiIG1zZ2lkPSI3MjkxOTI3ODIxOTcyOTAzODUiPiLQl9C90LXRiNC90ZbRjyDQvdC+0YHRjNCx0ZbRgtGLINGeINC90LXQstGP0LTQvtC80YvQvCDRgdGC0LDQvdC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYXJlIiBtc2dpZD0iMTc3ODY4NjYxODIzMDAxMTk2NCI+ItCQ0LTQutGA0YvRhtGMINC00L7RgdGC0YPQvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmQiIG1zZ2lkPSI0ODA4MjcwOTAwMzIyOTg1OTYwIj4i0J/QvtGI0YPQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndlYnNlYXJjaCIgbXNnaWQ9IjQzMzcxNTc5Nzc0MDAyMTE1ODkiPiLQktGN0LEt0L/QvtGI0YPQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmRfbmV4dCIgbXNnaWQ9IjU3NDIxMjQ2MTg5NDIxOTM5NzgiPiLQl9C90LDQudGB0YbRliDQvWnQttGN0LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmaW5kX3ByZXZpb3VzIiBtc2dpZD0iMjE5NjcyMzY2OTM4ODM2MDUwNiI+ItCX0L3QsNC50YHRhtGWINCy0YvRiNGN0LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZlRpY2tlciIgbXNnaWQ9IjU2MjI2ODM5MTI2MTY0OTYxNzIiPiLQl9Cw0L/Ri9GCINC/0YDQsCDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3QtSDQsNC0INC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwIDx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZlRpdGxlIiBtc2dpZD0iNTQ0Njg1ODcxNzE1NzQxNjgzOSI+ItCX0LDQv9GL0YIg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZk1lc3NhZ2UiIG1zZ2lkPSIxMzc0NzE4MDIzMjI0MDAwNzAyIj4i0JfQsNC/0YvRgiDQsNC0INC60LDRgNGL0YHRgtCw0LvRjNC9adC60LAgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+ICg8eGxpZmY6ZyBpZD0iU0VSVklDRSI+JTIkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZZZXMiIG1zZ2lkPSIyMzQ2NTY2MDcyODY3MjEzNTYzIj4i0KLQsNC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiLQndC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY190b29fbWFueV9kZWxldGVzIiBtc2dpZD0iNTI5NjMyMTg1MDY2Mjc0Njg5MCI+ItCS0YvQtNCw0LvRltGG0Ywg0L/QtdGA0LDQstGL0YjQsNC90Ysg0LvRltC80ZbRgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlc19kZXNjIiBtc2dpZD0iNDk2NTUxNjcxMDA4Njk0MjQ1Ij4i0JLRi9C00LDQu9C10L3QsCDRjdC70LXQvNC10L3RgtCw0Z4g0LTQu9GPINGC0YvQv9GDINGB0ZbQvdGF0YDQsNC9adC30LDRhtGLaSBcIjx4bGlmZjpnIGlkPSJUWVBFX09GX1NZTkMiPiUyJHM8L3hsaWZmOmc+XCI6IDx4bGlmZjpnIGlkPSJOVU1CRVJfT0ZfREVMRVRFRF9JVEVNUyI+JTEkZDwveGxpZmY6Zz4uINCj0LvRltC60L7QstGLINC30LDQv9GW0YEgPHhsaWZmOmcgaWQ9IkFDQ09VTlRfTkFNRSI+JTMkczwveGxpZmY6Zz4uINCo0YLQviDQstGLINC20LDQtNCw0LXRhtC1INC30YDQsNCx0ZbRhtGMPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN5bmNfcmVhbGx5X2RlbGV0ZSIgbXNnaWQ9IjI1NzI2MDAxMDMxMjI1OTYyNDMiPiLQktGL0LTQsNC70ZbRhtGMINGN0LvQtdC80LXQvdGC0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY191bmRvX2RlbGV0ZXMiIG1zZ2lkPSIyOTQxMzE3MzYwNjAwMzM4NjAyIj4i0KHQutCw0YHQsNCy0LDRhtGMINCy0YvQtNCw0LvQtdC90L3RliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN5bmNfZG9fbm90aGluZyIgbXNnaWQ9IjM3NDM3NjQ3NDA0MzA4MjE4NDUiPiLQndGW0YfQvtCz0LAg0LfQsNGA0LDQtyDQvdC1INGA0LDQsdGW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9hY2NvdW50X2xhYmVsIiBtc2dpZD0iNTY1NTIwMzA4OTc0NjQyMzkyNyI+ItCS0YvQsdC10YDRi9GG0LUg0Z7Qu9GW0LrQvtCy0Ysg0LfQsNC/0ZbRgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+ItCU0LDQtNCw0YbRjCDRg9C70ZbQutC+0LLRiyDQt9Cw0L/RltGBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzYxMTk4Mjg5NDg1MzQzNTg3NCI+ItCU0LDQtNCw0YbRjCDRg9C70ZbQutC+0LLRiyDQt9Cw0L/RltGBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iMjQxMjA3MjI3MjgzMjI4NDMxMyI+ItCf0LDQstGP0LvRltGH0YvRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9kZWNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iNDc2MDUwNzc4Mzg2Nzc5MDY3Ij4i0J/QsNC80LXQvdGI0YvRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfc2Nyb2xsX21vZGUiIG1zZ2lkPSIzMDczMTAxMDY3NDQxNjM4NDI4Ij4i0J3QsNGG0ZbRgdC90ZbRhtC1INGWINGe0YLRgNGL0LzQu9GW0LLQsNC50YbQtSA8eGxpZmY6ZyBpZD0iVkFMVUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfYWN0aW9uIiBtc2dpZD0iOTEwMTQ3MzA0NTg5MTgzNTQ5MCI+ItCf0YDQsNCy0Y/QtNC30ZbRhtC1INC/0LDQu9GM0YbQsNC8INGD0LLQtdGA0YUsINC60LDQsSDQv9Cw0LLRj9C70ZbRh9GL0YbRjCwg0LDQsdC+INGe0L3RltC3LCDQutCw0LEg0L/QsNC80LXQvdGI0YvRhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iODg2NTg4NTExNDAyODYxNDMyMSI+ItCf0LDQstGP0LvRltGH0YvRhtGMINC70ZbRh9Cx0YMg0YXQstGW0LvRltC9LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iNjI0NjgzNDkzNzA4MDY4NDc5MSI+ItCf0LDQvNC10L3RiNGL0YbRjCDQu9GW0YfQsdGDINGF0LLRltC70ZbQvS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIzNjUyMDU2MDU1ODEwMjIzMTM5Ij4i0J/QsNCy0Y/Qu9GW0YfRi9GG0Ywg0LvRltGH0LHRgyDQs9Cw0LTQt9GW0L0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X2hvdXJfYnV0dG9uIiBtc2dpZD0iMTM3NzQ3OTg2MzQyOTIxNDc5MiI+ItCf0LDQvNC10L3RiNGL0YbRjCDQu9GW0YfQsdGDINCz0LDQtNC30ZbQvS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfc2V0X3BtX2J1dHRvbiIgbXNnaWQ9IjQxNDc1OTA2OTYxNTEyMzA4NjMiPiLQo9GB0YLQsNC70Y/QstCw0YbRjCDRh9Cw0YEg0L/QsNGB0LvRjyDQv9Cw0Z7QtNC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfc2V0X2FtX2J1dHRvbiIgbXNnaWQ9IjgzMDIxNDAzNTM1Mzk0ODY3NTIiPiLQo9GB0YLQsNC70Y/QstCw0YbRjCDRh9Cw0YEg0LTQsCDQv9Cw0Z7QtNC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+ItCf0LDQstGP0LvRltGH0YvRhtGMINC70ZbRh9Cx0YMg0LzQtdGB0Y/RhtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X21vbnRoX2J1dHRvbiIgbXNnaWQ9IjE4MzI2OTg5OTU1NDE3MjYwMTkiPiLQn9Cw0LzQtdC90YjRi9GG0Ywg0LvRltGH0LHRgyDQvNC10YHRj9GG0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfZGF5X2J1dHRvbiIgbXNnaWQ9IjcxMzA0NjU0MTIzMDgxNzM5MDMiPiLQn9Cw0LLRj9C70ZbRh9GL0YbRjCDQu9GW0YfQsdGDINC00L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNDEzMTg4MTUyMTgxODc1MDAzMSI+ItCf0LDQvNC10L3RiNGL0YbRjCDQu9GW0YfQsdGDINC00L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjYzMTg2OTczODQzMTA4MDg4OTkiPiLQn9Cw0LLRj9C70ZbRh9GL0YbRjCDQu9GW0YfQsdGDINCz0L7QtNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNDQ4MjAyMTgxMzQ5MTEyMTcxNyI+ItCf0LDQvNC10L3RiNGL0YbRjCDQu9GW0YfQsdGDINCz0L7QtNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiLQkNC00LzQtdC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i0JLRi9C00LDQu9GW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4i0JPQsNGC0L7QstCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4i0JfQvNC10L3QsCDRgNGN0LbRi9C80YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i0JLRi9Cx0LXRgNGL0YbQtSDQv9GA0YvQutC70LDQtNCw0L3QvdC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i0JDQv9GD0LHQu9GW0LrQsNCy0LDRhtGMINC3INC00LDQv9Cw0LzQvtCz0LDQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLQkNC00L/RgNCw0LJp0YbRjCDQtyDQtNCw0L/QsNC80L7Qs9Cw0Lkg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+ItCg0YPRh9C60LAg0LTQu9GPINC/0LXRgNCw0YHQvtGe0LLQsNC90L3Rjy4g0J3QsNGG0ZbRgdC90ZbRhtC1INGWINGe0YLRgNGL0LzQu9GW0LLQsNC50YbQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i0J/RgNCw0LLRj9C00LfRltGG0LUg0L/QsNC70YzRhtCw0Lwg0YPQstC10YDRhSwg0LrQsNCxINCw0YLRgNGL0LzQsNGG0YwgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+ItCf0YDQsNCy0Y/QtNC30ZbRhtC1INC/0LDQu9GM0YbQsNC8INGD0L3RltC3LCDQutCw0LEg0LDRgtGA0YvQvNCw0YbRjCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i0J/RgNCw0LLRj9C00LfRltGG0LUg0L/QsNC70YzRhtCw0Lwg0YPQu9C10LLQsCwg0LrQsNCxINCw0YLRgNGL0LzQsNGG0YwgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLQn9GA0LDQstGP0LTQt9GW0YbQtSDQv9Cw0LvRjNGG0LDQvCDRg9C/0YDQsNCy0LAsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+ItCg0LDQt9Cx0LvQsNC60LDQstCw0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLQmtCw0LzQtdGA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i0KbRltGF0ZYg0YDRjdC20YvQvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLQk9GD0Log0YPQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i0J/QvtGI0YPQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+ItCf0YDQsNCz0LDRgNGC0LDQudGG0LUsINC60LDQsSDRgNCw0LfQsdC70LDQutCw0LLQsNGG0YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+ItCa0LDQsSDQv9GA0LDRgdC70YPRhdCw0YbRjCDQv9Cw0YDQvtC7aSwg0L/QsNC00LrQu9GO0YfRi9GG0LUg0LPQsNGA0L1p0YLRg9GA0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i0JrRgNC+0L/QutCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUyOTM2MDA0OTY2MDE0OTAyMTYiPiLQn9C10YDQsNC50YHRhtGWINC00LAg0L/QsNGH0LDRgtC60L7QstCw0Lkg0YHRgtCw0YDQvtC90LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjM3NDk2NTYyOTUyMTUyNTg5Ij4i0J/QtdGA0LDQudGB0YbRliDRntCy0LXRgNGFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21lbnVfb3ZlcmZsb3dfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjk1NjU5MDM3NTA5MDA4NDUzIj4i0JHQvtC70YzRiCDQvdCw0LvQsNC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9Ijc5NjU5ODQzNjA5MDM2OTM5MDMiPiIlMSRzLCAlMiRzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX3N1YnRpdGxlX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9IjY5ODU1NDY1MzA0NzE3ODA3MjciPiIlMSRzLCAlMiRzLCAlMyRzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9pbnRlcm5hbCIgbXNnaWQ9IjQ4OTE5MTY4MzM2NTc5MjkyNjMiPiLQo9C90YPRgtGA0LDQvdCw0Y8g0L/QsNC80Y/RhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9zZF9jYXJkIiBtc2dpZD0iMzI4Mjk0ODg2MTM3ODI4Njc0NSI+IlNELdC60LDRgNGC0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3VzYiIgbXNnaWQ9IjMwMTc5NTQwNTk1Mzg1MTcyNzgiPiJVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dHJhY3RfZWRpdF9tZW51X2J1dHRvbiIgbXNnaWQ9Ijg5NDA0Nzg3MzA0OTY2MTAxMzciPiLQoNGN0LTQsNCz0LDQstCw0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE5NTU2Mzg4NjIxMjIyMzIzNDIiPiLQn9Cw0L/Rj9GA0Y3QtNC20LDQvdC90LUg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC00LDQtNC30LXQvdGL0YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfYm9keSIgbXNnaWQ9IjI4MTQ2NzM1NTE0NzE5Njk5NTQiPiLQlNCw0LrRgNCw0L3RltGG0LXRgdGPLCDQutCw0LEg0L/RgNCw0LPQu9C10LTQt9C10YbRjCDQs9GW0YHRgtC+0YDRi9GOINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDRliDQvdCw0LvQsNC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF90aXRsZSIgbXNnaWQ9IjcwOTMzMzQ0MTk1MTg3MDY2ODYiPiLQn9C10YDQsNC00LDRh9CwINC00LDQtNC3LiAyRy0zRyDQstGL0LrQu9GO0YfQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzYzNjQ4OTQzNjgxOTQ3MDc2MSI+ItCf0LXRgNCw0LTQsNGH0LAg0LTQsNC00LfQtdC90YvRhSA0RyDQstGL0LrQu9GO0YfQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF90aXRsZSIgbXNnaWQ9Ijc4Njk0MDI1MTkzOTE2MzE4ODQiPiLQnNCw0LHRltC70YzQvdCw0Y8g0L/QtdGA0LDQtNCw0YfQsCDQtNCw0LTQty4g0LLRi9C60LsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3RpdGxlIiBtc2dpZD0iODk5MjE1NDczNjQ0MTI4NDg2NSI+ItCf0LXRgNCw0LQuINC00LDQtNC3LiBXaS1GaSDQsNC00LrQu9GO0YfQsNC90LDRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfYm9keSIgbXNnaWQ9IjMzMTc5NjQ3MDY5NzM2MDEzODYiPiLQndCw0YbRltGB0L3RltGG0LUsINC60LDQsSDRg9C60LvRjtGH0YvRhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiLQn9C10YDQsNCy0YvRiNCw0L3RiyDQu9GW0LzRltGCIDJHLTNHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMTEwNjU2Mjc3OTMxMTIwOTAzOSI+ItCf0LXRgNCw0LLRi9GI0LDQvdGLINC70ZbQvNGW0YIg0LTQsNC00LfQtdC90YvRhSA0RyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIyNzkyNDA1NzIxNjU0MTIxNjgiPiLQn9C10YDQsNCy0YvRiNCw0L3RiyDQu9GW0LzRltGCINC80LDQsdGW0LvRjNC90YvRhSDQtNCw0LTQt9C10L3Ri9GFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI4NzQzODU2MDA2Mzg0ODI1OTc0Ij4i0J/QtdGA0LDQsi4g0LvRltC80ZbRgiDQv9CwINC00LDQtNC30LXQvdGL0LwgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X3Nub296ZWRfYm9keSIgbXNnaWQ9IjcwMzU0OTAyNzgyOTg0NDE3NjciPiLQkNCxXCfRkdC8IDx4bGlmZjpnIGlkPSJTSVpFIj4lczwveGxpZmY6Zz4g0L/QtdGA0LDQstGL0YjQsNC1INGD0YHRgtCw0L3QvtGe0LsuINC80Y/QttGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF90aXRsZSIgbXNnaWQ9IjU5NjUxNTczNjEwMzYzMjE5MTQiPiLQl9GL0YXQvtC00L3Ri9GPINC00LDQtNC30LXQvdGL0Y8g0LDQsdC80LXQttCw0LLQsNC90YvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINC30L3Rj9GG0Ywg0LDQsdC80LXQttCw0LLQsNC90L3QtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGUiIG1zZ2lkPSI2NTEwMDQwNDg2MDQ5MjM3NjM5Ij4i0KHQtdGA0YLRi9GE0ZbQutCw0YIg0LHRj9GB0L/QtdC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGVfaXNfdmFsaWQiIG1zZ2lkPSI2ODI1MjYzMjUwNzc0NTY5MzczIj4i0JPRjdGC0Ysg0YHQtdGA0YLRi9GE0ZbQutCw0YIg0YHQsNC/0YDQsNGe0LTQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF90byIgbXNnaWQ9IjQ1NDIzOTQ4MDI3NDkyMTAzMiI+ItCS0YvQtNCw0LTQt9C10L3RizoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21tb25fbmFtZSIgbXNnaWQ9IjIyMzMyMDkyOTk0MzQxNzI2NDYiPiLQl9Cy0YvRh9Cw0LnQvdCw0LUg0ZbQvNGPOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9yZ19uYW1lIiBtc2dpZD0iNjk3MzU2MTE5MDc2MjA4NTIzNiI+ItCQ0YDQs9Cw0L3RltC30LDRhtGL0Y86Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnX3VuaXQiIG1zZ2lkPSI3MjY1OTgxODkwNDIyMDcwMzgzIj4i0JDQtNC00LfQtdC7INCw0YDQs9Cw0L3RltC30LDRhtGL0ZY6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX2J5IiBtc2dpZD0iMjY0NzU4NDk4ODA1NzQ4MTU2NiI+ItCS0YvQtNCw0L3QsDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2YWxpZGl0eV9wZXJpb2QiIG1zZ2lkPSI4ODE4ODg2MTM3NTQ1OTgzMTEwIj4i0KLRjdGA0LzRltC9INC00LfQtdGP0L3QvdGPOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9vbiIgbXNnaWQ9IjU4OTUwMTc0MDQzNjEzOTcyMzIiPiLQktGL0LTQsNC00LfQtdC90Ys6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXhwaXJlc19vbiIgbXNnaWQ9IjM2NzYyNDI5NDk5MTU5NTk4MjEiPiLQl9Cw0LrQsNC90YfQstCw0LXRhtGG0LA6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VyaWFsX251bWJlciIgbXNnaWQ9Ijc1ODgxNDA2NzY2MDg2MjQ5MyI+ItCh0LXRgNGL0LnQvdGLINC90YPQvNCw0YA6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmluZ2VycHJpbnRzIiBtc2dpZD0iNDUxNjAxOTYxOTg1MDc2MzA0OSI+ItCQ0LTQsdGW0YLQutGWINC/0LDQu9GM0YbQsNGeOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiLQkNC00LHRltGC0LDQuiDQv9Cw0LvRjNGG0LDRniBTSEEtMjU2OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4i0JDQtNCx0ZbRgtC60ZYg0L/QsNC70YzRhtCw0Z4gU0hBLTE6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X3NlZV9hbGwiIG1zZ2lkPSI0MjkyNTY5MzgzOTc2NjM2MjAwIj4i0J/RgNCw0LPQu9C10LTQt9C10YbRjCDRg9GB0ZEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI0NzEwMDEzODY0OTc0MDQwNjE1Ij4i0JLRi9Cx0LXRgNGL0YbQtSDQv9GA0LDRhtGN0YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiLQkNC/0YPQsdC70ZbQutCw0LLQsNGG0Ywg0Lcg0LTQsNC/0LDQvNC+0LPQsNC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibGlzdF9kZWxpbWV0ZXIiIG1zZ2lkPSIzOTc1MTE3NTcyMTg1NDk0MTUyIj4iLCAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZW5kaW5nIiBtc2dpZD0iMzI0NTY1MzY4MTAwODIxODAzMCI+ItCQ0LTQv9GA0LDRntC60LAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsYXVuY2hCcm93c2VyRGVmYXVsdCIgbXNnaWQ9IjIwNTc5NTE5NDcyOTc2MTQ3MjUiPiLQl9Cw0L/Rg9GB0YZp0YbRjCDQsdGA0LDRntC30LXRgD8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJTZXR1cENhbGxEZWZhdWx0IiBtc2dpZD0iNTgzNDk0ODQ2OTI1Mzc1ODU3NSI+ItCf0YDRi9C90Y/RhtGMINCy0YvQutC70ZbQuj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2VfYWx3YXlzIiBtc2dpZD0iODAxNzc3MDc0NzgwMTQ5NDkzMyI+ItCX0LDRntGB0ZHQtNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX29uY2UiIG1zZ2lkPSIyNDA0NjQ0Nzk3MTQ5MTczNzU4Ij4i0KLQvtC70YzQutGWINCw0LTQt9GW0L0g0YDQsNC3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjE3MDUzODk4MTY3MTI3NDcxIj4i0J/Qu9Cw0L3RiNGN0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjM5MjkxMjczNDIwMTQwMTIzIj4i0KLRjdC70LXRhNC+0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWVfaGVhZHBob25lcyIgbXNnaWQ9IjgxMTk5NzE4NDM4MDM0MzkxMTAiPiLQndCw0LLRg9GI0L3RltC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWVfZG9ja19zcGVha2VycyIgbXNnaWQ9IjYyNDA2MDI5ODIyNzY1OTE4NjQiPiLQlNGL0L3QsNC80ZbQutGWINGB0YLQsNC90YbRi2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X21lZGlhX3JvdXRlX25hbWVfaGRtaSIgbXNnaWQ9IjI0NTA5NzAzOTkwMjM0NzgwNTUiPiJIRE1JIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+ItCh0ZbRgdGC0Y3QvNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGgt0LDRntC00YvRkSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i0JHQtdGB0L/RgNCw0LLQsNC00L3RiyDQtNGL0YHQv9C70LXQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLQk9Cw0YLQvtCy0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLQnNGD0LvRjNGC0YvQvNC10LTRi9C50L3RiyDQstGL0YXQsNC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+ItCh0LrQsNC9adGA0LDQstCw0L3QvdC1Li4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i0J/QsNC00LrQu9GO0YfRjdC90L3QtS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i0JTQsNGB0YLRg9C/0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNjczOTg5OTk2MjY4MTg4NjQwMSI+ItCd0LXQtNCw0YHRgtGD0L/QvdGLIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhX3JvdXRlX3N0YXR1c19pbl91c2UgKDQ1MzM3ODYwMzEwOTAxOTgwNjMpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfYnVpbHRfaW5fZGlzcGxheV9uYW1lIiBtc2dpZD0iMjU4MzEzNDI5NDI5MjU2Mzk0MSI+ItCj0LHRg9C00LDQstCw0L3RiyDRjdC60YDQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+ItCt0LrRgNCw0L0gSERNSSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLQntCy0LXRgNC70LXQuSAjwqA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4g0LrRgC4g0L3QsCDRhtCw0LvRjiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXggKDYwMjIxMTk3MDI2Mjg1NzIwODApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+ItCf0LDQtNC60LvRjtGH0LDQvdGLINCx0LXRgdC/0YDQsNCy0LDQtNC90Ysg0LTRi9GB0L/Qu9C10LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i0JPRjdGC0Ysg0Y3QutGA0LDQvSDQv9Cw0LrQsNC30LLQsNC10YbRhtCwINC90LAg0ZbQvdGI0LDQuSDQv9GA0YvQu9Cw0LTQt9C1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+ItCQ0LTQutC70Y7Rh9GL0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i0K3QutGB0YLRgNCw0L3QvdGLINCy0YvQutC70ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+ItCX0LDQsdGL0LvRliDQutC70Y7RhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i0J3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDQutC70Y7RhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+ItCd0Y/Qv9GA0LDQsmnQu9GM0L3RiyDQv9Cw0YDQvtC70YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i0J3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiLQn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJGQ8L3hsaWZmOmc+INGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i0J3QsNC80LDQu9GO0LnRhtC1INC60LvRjtGHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4i0KPQstGP0LTQt9GW0YbQtSBQSU4t0LrQvtC0IFNJTS3QutCw0YDRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiLQo9Cy0Y/QtNC30ZbRhtC1IFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i0KPQstGP0LTQt9GW0YbQtSDQv9Cw0YDQvtC70YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJTSU0t0LrQsNGA0YLQsCDQt9Cw0YDQsNC3INCw0LTQutC70Y7Rh9Cw0L3QsC4g0KPQstGP0LTQt9GW0YbQtSBQVUst0LrQvtC0LCDQutCw0LEg0L/RgNCw0YbRj9Cz0L3Rg9GG0YwuINCX0LLRj9C20YvRhtC10YHRjyDRgdCwINGB0LLQsGnQvCDQsNC/0LXRgNCw0YLQsNGA0LDQvCwg0LrQsNCxINCw0YLRgNGL0LzQsNGG0Ywg0LTQsNC00LDRgtC60L7QstGD0Y4gadC90YTQsNGA0LzQsNGG0YvRji4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i0KPQstGP0LTQt9GW0YbQtSDQttCw0LTQsNC90YsgUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLQn9Cw0YbQstC10YDQtNC30ZbRhtC1INC20LDQtNCw0L0gUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4i0KDQsNC30LHQu9Cw0Lpp0YDQvtGe0LrQsCBTSU0t0LrQsNGA0YLRiy4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+ItCd0Y/Qv9GA0LDQstGW0LvRjNC90YsgUElOLdC60L7QtC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLQo9Cy0Y/QtNC30ZbRhtC1IFBJTi3QutC+0LQsINGP0LrRliDQt9C80Y/RiNGH0LDQtSDQsNC0IDQg0LTQsCA4INC70ZbRh9Cx0LDRni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUst0LrQvtC0INC/0LDQstGW0L3QtdC9INGD0YLRgNGL0LzQu2nQstCw0YbRjCA4INC7adGH0LHQsNGeINGWINCx0L7Qu9GM0YguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i0J/QsNGe0YLQvtGA0L3QsCDRg9Cy0Y/QtNC30ZbRhtC1INC/0YDQsNCy0ZbQu9GM0L3RiyBQVUst0LrQvtC0LiDQndC10LDQtNC90LDRgNCw0LfQvtCy0YvRjyDRgdC/0YDQvtCx0Ysg0L3QsNC30LDRntC20LTRiyDQsNC00LrQu9GO0YfQsNGG0YwgU0lNLdC60LDRgNGC0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTi3QutC+0LTRiyDQvdC1INGB0YPQv9Cw0LTQsNGO0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+ItCX0LDQvdCw0LTRgtCwINGI0LzQsNGCINGB0L/RgNC+0LEg0L/QsNGe0YLQsNGA0YvRhtGMINGI0LDQsdC70L7QvSEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i0JrQsNCxINGA0LDQt9Cx0LvQsNC6adGA0LDQstCw0YbRjCwg0YPQstCw0LnQtNC30ZbRhtC1INGeINGB0LLQvtC5INGD0LvRltC60L7QstGLINC30LDQv9GW0YEgR29vZ2xlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i0IbQvNGPINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwICjRjdC70LXQutGC0YDQvtC90L3QsNGPINC/0L7RiNGC0LApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLQn9Cw0YDQvtC70YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+ItCj0LLQsNC50YHRhmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+ItCd0Y/Qv9GA0LDQstGW0LvRjNC90LDQtSDRltC80Y8g0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAg0YbRliDQv9Cw0YDQvtC70YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+ItCX0LDQsdGL0LvRltGB0Y8g0L3QsCDRltC80Y8g0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAg0LDQsdC+INC/0LDRgNC+0LvRjD9cbtCd0LDQstC10LTQsNC50YbQtSAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i0J/RgNCw0LLQtdGA0LrQsCDRntC7adC60L7QstCw0LPQsCDQt9Cw0L9p0YHRgy4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGe0LLRj9C70ZYgUElOLdC60L7QtCDQv9GN0Z7QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGA0LDQt9C+0Z46IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBcblxu0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGe0LLRj9C70ZYg0L/QsNGA0L7Qu9GMINC/0Y3RntC90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0YDQsNC30L7RnjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIFxuXG7Qn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0Z7QstGP0LvRliDQs9GA0LDRhNGW0YfQvdGLINC60LvRjtGHINGA0LDQt9Cx0LvQsNC6adGA0L7RntC6aSDQv9GN0Z7QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGA0LDQt9C+0Z46IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBcblxu0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0YHQv9GA0LDQsdCw0LLQsNC70ZYg0YDQsNC30LHQu9Cw0Lpp0YDQsNCy0LDRhtGMINC/0LvQsNC90YjRjdGCINC90LXQutCw0LvRjNC6aSDRgNCw0LfQvtGeICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPikuINCf0LDRgdC70Y8g0Y/RiNGH0Y0g0L3QtdC60LDQu9GM0Lpp0YUg0YHQv9GA0L7QsSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pINGR0L0g0LHRg9C00LfQtSDRgdC60ZbQvdGD0YLRiyDQtNCwINC30LDQstC+0LTRgdC60ZbRhSDQvdCw0LvQsNC0IGkg0LrQsNGA0YvRgdGC0LDQu9GM0L1p0YbQumnRjyDQtNCw0LTQt9C10L3Ri9GPINCx0YPQtNGD0YbRjCDQt9Cz0YPQsdC70LXQvdGL0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRgdC/0YDQsNCx0LDQstCw0LvRliDRgNCw0LfQsdC70LDQumnRgNCw0LLQsNGG0Ywg0L/Qu9Cw0L3RiNGN0YIg0L3QtdC60LDQu9GM0LppINGA0LDQt9C+0Z4gKDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+KS4g0J/QsNGB0LvRjyDRj9GI0YfRjSDQvdC10LrQsNC70YzQumnRhSDRgdC/0YDQvtCxICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPikg0ZHQvSDQsdGD0LTQt9C1INGB0LrRltC90YPRgtGLINC00LAg0LfQsNCy0LDQtNGB0LrRltGFINC90LDQu9Cw0LQgaSDQutCw0YDRi9GB0YLQsNC70YzQvWnRhtC6adGPINC00LDQtNC30LXQvdGL0Y8g0LHRg9C00YPRhtGMINC30LPRg9Cx0LvQtdC90YvRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRgdC/0YDQsNCx0LDQstCw0LvRliDRgNCw0LfQsdC70LDQumnRgNCw0LLQsNGG0Ywg0L/Qu9Cw0L3RiNGN0YIg0L3QtdC60LDQu9GM0LppINGA0LDQt9C+0Z4gKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikuINCm0Y/Qv9C10YAg0ZHQvSDQsdGD0LTQt9C1INGB0LrRltC90YPRgtGLINC00LAg0LfQsNCy0LDQtNGB0LrRltGFINC90LDQu9Cw0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGB0L/RgNCw0LHQsNCy0LDQu9GWINGA0LDQt9Cx0LvQsNC6adGA0LDQstCw0YbRjCDRgtGN0LvQtdGE0L7QvSDQvdC10LrQsNC70YzQumkg0YDQsNC30L7RniAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+KS4g0KbRj9C/0LXRgCDRkdC9INCx0YPQtNC30LUg0YHQutGW0L3Rg9GC0Ysg0LTQsCDQt9Cw0LLQsNC00YHQutGW0YUg0L3QsNC70LDQtC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGe0LLRj9C70ZYg0LPRgNCw0YTRltGH0L3RiyDQutC70Y7RhyDRgNCw0LfQsdC70LDQumnRgNC+0Z7Qumkg0L/RjdGe0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LfQvtGeOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4g0J/QsNGB0LvRjyDRj9GI0YfRjSDQvdC10LrQsNC70YzQumnRhSDQvdGP0Z7QtNCw0LvRi9GFINGB0L/RgNC+0LEgKDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+KSDQstCw0Lwg0LHRg9C00LfQtSDQv9GA0LDQv9Cw0L3QsNCy0LDQvdCwINGA0LDQt9Cx0LvQsNC6adGA0LDQstCw0YbRjCDRgtGN0LvQtdGE0L7QvSwg0YPQstCw0LnRiNC+0Z7RiNGLINGeIEdvb2dsZS5cblxuINCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0Z7QstGP0LvRliDQs9GA0LDRhNGW0YfQvdGLINC60LvRjtGHINGA0LDQt9Cx0LvQsNC6adGA0L7RntC6aSDQv9GN0Z7QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGA0LDQt9C+0Z46IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiDQn9Cw0YHQu9GPINGP0YjRh9GNINC90LXQutCw0LvRjNC6adGFINC90Y/RntC00LDQu9GL0YUg0YHQv9GA0L7QsSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pINCy0LDQvCDQsdGD0LTQt9C1INC/0YDQsNC/0LDQvdCw0LLQsNC90LAg0YDQsNC30LHQu9Cw0Lpp0YDQsNCy0LDRhtGMINGC0Y3Qu9C10YTQvtC9LCDRg9Cy0LDQudGI0L7RntGI0Ysg0Z4gR29vZ2xlLlxuXG4g0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLQktGL0LTQsNC7adGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYWZlX21lZGlhX3ZvbHVtZV93YXJuaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMyNDE2MTkzOTQ3NTQ3ODA2NiI+ItCf0LDQstGP0Ltp0YfRi9GG0Ywg0LPRg9C6INCx0L7Qu9GM0Ygg0LfQsCDRgNGN0LrQsNC80LXQvdC00LDQstCw0L3RiyDRntC30YDQvtCy0LXQvdGMP1xu0JTQvtGe0LPQsNC1INGB0LvRg9GF0LDQvdC90LUg0LzRg9C30YvQumkg0L3QsCDQstGP0Ltp0LrQsNC5INCz0YPRh9C90LDRgdGGaSDQvNC+0LbQsCDQv9Cw0YjQutC+0LTQt2nRhtGMINCy0LDRiCDRgdC70YvRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250aW51ZV90b19lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE2MjY0MjczNzIzMTYwNzAyNTgiPiLQo9GC0YDRi9C80Ltp0LLQsNC50YbQtSDQtNCy0LAg0L/QsNC70YzRhtGLLCDQutCw0LEg0YPQutC70Y7Rh9GL0YbRjCDQtNC+0YHRgtGD0L8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9lbmFibGVkIiBtc2dpZD0iMTM4MTk3MjA0ODU2NDU0NzY4NSI+ItCU0LDRgdGC0YPQv9C90LDRgdGG0Ywg0YPQutC70Y7Rh9Cw0L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYWNjZXNzaWJpbGl0eV9jYW5jZWxlZCIgbXNnaWQ9IjM4MzM5MjMyNTc5NjY2MzU2NzMiPiLQlNCw0YHRgtGD0L/QvdCw0YHRhtGMINCw0LTQvNC10L3QtdC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiLQkdGP0LPRg9GH0Ysg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC6IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvd25lcl9uYW1lIiBtc2dpZD0iMjcxNjc1NTQ2MDM3NjAyODE1NCI+ItCj0LvQsNC00LDQu9GM0L3RltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXJyb3JfbWVzc2FnZV90aXRsZSIgbXNnaWQ9IjQ1MTAzNzMwODMwODI1MDAxOTUiPiLQn9Cw0LzRi9C70LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub19yZXN0cmljdGVkX2FjY291bnRzIiBtc2dpZD0iNTczOTQ2MzI0OTY3MzcyNzczNiI+ItCT0Y3RgtCwINC/0YDRi9C60LvQsNC00LDQvdC90LUg0L3QtSDQv9Cw0LTRgtGA0YvQvNC70ZbQstCw0LUg0Z7Qu9GW0LrQvtCy0YvRjyDQt9Cw0L/RltGB0Ysg0LTQu9GPINC/0YDQvtGEadC70Y/RniDQtyDQsNCx0LzQtdC20LDQstCw0L3QvdGP0LzRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub3RfZm91bmQiIG1zZ2lkPSIzNDI5MTQxODUzNDk4OTI3Mzc5Ij4i0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQtNC70Y8g0LPRjdGC0LDQs9CwINC00LfQtdGP0L3QvdGPINC90LUg0LfQvdC+0LnQtNC30LXQvdCw0LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXZva2UiIG1zZ2lkPSI1NDA0NDc5MTg1MjI4MjcxNTg2Ij4i0JDQvdGD0LvRj9Cy0LDRhtGMIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYTAgKDE5OTQ0NzQyNTI5MzEyOTQxNzIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19hMSAoMzMzMzA2MDQyMTUyOTc5MTc4NikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2EyICgzMDk3NTM1OTkxOTI1Nzk4MjgwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYTMgKDMwMjMyMTMyNTkzMTQyMzYxMjMpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19hNCAoMjMxNzQ1MzI1Mjk2ODczNzY0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYTUgKDM0ODQzMjc0MDczNDA4NjU0MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19hNiAoNDg2MTkwODQ4NzEyOTU3NzUzMCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2E3ICg1ODkwMjA4NTg4MDcyOTM2MTMwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYTggKDQzMTk0MjUwNDEwODU4MTY2MTIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19hOSAoNDg4MjIyMDUyOTUwNjQzMjAwOCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2ExMCAoMjM4Mjg2NjAyNjM2NTM1OTM5MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2IwICgzNjUxODI3MTQ3NDAyMDA5Njc1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYjEgKDYwNzI4NTk2MjgyNzg3Mzk5NTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19iMiAoMTM0ODczMTg1MjE1MDM4MDM3OCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2IzICgyNjEyNTEwMTgxMjU5MjYxMzc5KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYjQgKDY5NTE1MTM3ODgzODExNTQzNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2I1ICg0ODYzNzU0Mjg1NTgyMjEyNDg3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYjYgKDUzMDU4MTYyOTIxMzk2NDcyNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19iNyAoNTMxNjczNTQyNjAyNzg2NjI0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYjggKDkxNjQ0NzQ1OTU3MDg4NTAwMzQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19iOSAoMjgyMTAyOTc2NzY0Nzc0MTYwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYjEwICg0NTE3MTQxNzE0NDA3ODk4OTc2KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYzAgKDMxMDM1MjEzNTc5MDE1OTExMDApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19jMSAoMTIzMTk1NDEwNTk4NTA0ODU5NSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2MyICg5Mjc3MDI4MTY5ODAwODc0NjIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19jMyAoODM1MTU0MTczNTE4MzA0MTU5KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYzQgKDUwOTU5NTE5ODUxMDgxOTQwMTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19jNSAoMTk4NTM5NzQ1MDMzMjMwNTczOSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2M2ICg4MTQ3NDIxOTI0MTc0NjkzMDEzKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYzcgKDg5OTM5OTQ5MjUyNzYxMjI5NTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19jOCAoNjg3MTE3ODEwNDEzOTU5ODk1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2M5ICg3OTgzNTMyNjM1MjI3NTYxMzYyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYzEwICg1MDQwNzY0MjkzNDA2NzY1NTg0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9uYV9sZXR0ZXIgKDI4NDE0MTQ4Mzk4ODgzNDQyOTYpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX25hX2d2cm5tdF9sZXR0ZXIgKDUyOTU4MzY4Mzg4NjI5NjI4MDkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX25hX2xlZ2FsICg4NjIxMzY0MDM3NjgwNDY1NjY2KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9uYV9qdW5pb3JfbGVnYWwgKDMzMDkzMjQxNjIxNTUwODU5MDQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX25hX2xlZGdlciAoNTU2NzAzMDM0MDUwOTA3NTMzMykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfbmFfdGFibG9pZCAoNDU3MTczNTAzODUwMTY2MTc1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfbmFfaW5kZXhfM3g1ICg1MTgyOTAxOTE3ODE4NjI1MTI2KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9uYV9pbmRleF80eDYgKDc2ODc2MjA2MjU0MjIzMTIzOTYpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX25hX2luZGV4XzV4OCAoODgzNDIxNTI4NDY0Njg3MjgwMCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfbmFfbW9uYXJjaCAoMjEzNjM5OTA2OTU2NTUwNzU0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9uYV9xdWFydG8gKDgzNTc3ODQ5MzU5MzAyMzIyMykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfbmFfZm9vbHNjYXAgKDE1NzM5MTEyMzc5ODM2NzcxMzgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2NoaW5lc2Vfcm9jXzhrICgzNjI2ODU1ODQ3MTg5NDM4ODk2KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9jaGluZXNlX3JvY18xNmsgKDkxODIxOTE1NzcwMjI5NDMzNTUpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2NoaW5lc2VfcHJjXzEgKDQ3OTMyMzI2NDQ5ODAxNzA1MDApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2NoaW5lc2VfcHJjXzIgKDU0MDQxMDk3MzA5NzU3MjA2NzApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2NoaW5lc2VfcHJjXzMgKDEzMzUwOTIyNTMzMzkzNjM1MjYpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2NoaW5lc2VfcHJjXzQgKDkxNjc5OTc4MDA0ODY1Njk4MzQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2NoaW5lc2VfcHJjXzUgKDg0NTg3NTE2ODgyMzU0MTQ5NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9wcmNfNiAoMzIyMDMyNTY2NzY5MjY0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9wcmNfNyAoMTc3Njc5MjEzODUwNzAzODUyNykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9wcmNfOCAoMTQxNzE3NjY0MjY4NzQ1NjY5MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9wcmNfOSAoNDc4NTk4MzQ3MzEyMzc5ODM2NSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9wcmNfMTAgKDc4NDc5ODIyOTkzOTE4NTE4OTkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2NoaW5lc2VfcHJjXzE2ayAoMjYyNzkzMzgzNTM5OTgwNjc3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9jaGluZXNlX29tX3BhX2thaSAoNTI1NjgxNTU3OTQ0Nzk1OTgxNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9vbV9kYWlfcGFfa2FpICg3MzM2NDEyOTYzNDQxMzU0NDA3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9jaGluZXNlX29tX2p1cnJvX2t1X2thaSAoNjMyNDQ2NTQ0NDEwMDQ5MDc0MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2VfamlzX2IxMCAoMTc4NzI2Mjg0NTYyNzY5NDM3NikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2VfamlzX2I5ICgzMzM2MDM1NzgzNjYzMjg3NDcwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfYjggKDYxOTUzOTgyOTkxMDQzNDU3MzEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX2ppc19iNyAoMTY3NDYyMTg4NjkwMjgyODg4NCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2VfamlzX2I2ICg0MTcwNTc2Mjg2MDYyNjU3NDM1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfYjUgKDQ4OTkyOTc5NTgxMDAwMzI1MzMpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX2ppc19iNCAoNDIxMzE1ODEyOTEyNjY2Njg0NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2VfamlzX2IzICg4NTEzNzE1MzA3NDEwMzEwNjk2KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfYjIgKDQ3Nzc2OTAyMTE4OTcxMzExOTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX2ppc19iMSAoNDYwODE0MjM4NTQ1NzAzNDYwMykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2VfamlzX2IwICg3NTg3MTA4MzY2NTcyMjQzOTkxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfZXhlYyAoNTI0NDA3NTQzMjI2MzY0OTA2OCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2VfY2hvdTQgKDQ5NDE2NTIwMTUwMzI2MzEzNjEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX2Nob3UzICg2Mzg3MzE5MTY5MjYzOTU3MDEwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9jaG91MiAoMTI5OTExMjAyNTQxNTM0Mzk4MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2VfaGFnYWtpICg4MDcwMTE1NjIwNjQ0MjU0NTY1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9vdWZ1a3UgKDYwNDkwNjU1ODczMDc4OTY1NjQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX2thaHUgKDY4NzI2OTYwMjc1NjAwNjUxNzMpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX2tha3UyICgyMzU5MDc3MjMzNzc1NDU1NDA1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV95b3U0ICgyMDkxNzc3MTY4NzQ3MDU4MDA4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV91bmtub3duX3BvcnRyYWl0ICgzMDg4MDQzNjQxNjE2NDA5NzYyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV91bmtub3duX2xhbmRzY2FwZSAoNDg3Njk5NTMyNzAyOTM2MTU1MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciB3cml0ZV9mYWlsX3JlYXNvbl9jYW5jZWxsZWQgKDcwOTEyNTgzNzgxMjE2Mjc2MjQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igd3JpdGVfZmFpbF9yZWFzb25fY2Fubm90X3dyaXRlICg4MTMyNTA1NDE3OTM1MzM3NzI0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlYXNvbl91bmtub3duICg2MDQ4OTEzODgwMTg0NjI4MTE5KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlYXNvbl9zZXJ2aWNlX3VuYXZhaWxhYmxlICg3ODI0MDA4NzMyMjQzOTAzMjY4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHByaW50X3NlcnZpY2VfaW5zdGFsbGVkX3RpdGxlICgyMjQ2MzE3MTY5NDQ0MDgxNjI4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHByaW50X3NlcnZpY2VfaW5zdGFsbGVkX21lc3NhZ2UgKDU4OTczNjI5MzEwNzA0NTkxNTIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVzdHJfcGluX2VudGVyX2FkbWluX3BpbiAoNzgzNjQzNzMxODk1MTQzOTcwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlc3RyX3Bpbl9lbnRlcl9waW4gKDMzOTU5NTM0MjEzNjg0NzYxMDMpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVzdHJfcGluX2luY29ycmVjdCAoODU3MTUxMjAwMzk1NTA3NzkyNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZXN0cl9waW5fZW50ZXJfb2xkX3BpbiAoMTQ2MjIwNjIyNTUxMjkxMDc1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZXN0cl9waW5fZW50ZXJfbmV3X3BpbiAoNTk1OTYwNjY5MTYxOTk1OTE4NCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZXN0cl9waW5fY29uZmlybV9waW4gKDg1MDE1MjM4Mjk2MzMxNDYyMzkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVzdHJfcGluX2NyZWF0ZV9waW4gKDgwMTc2MDAwMDAyNjM0NTAzMzcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCAoMjIyNDIxNDE5MDkwNjk5NDU0OCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0ICg4MTczOTgyNzU2MjY1Nzc3NzkyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlc3RyX3Bpbl9jb3VudGRvd246b25lICgzMTEwNTA5OTUxOTg1NDg2NzUpIC0tPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlc3RyX3Bpbl9jb3VudGRvd246b3RoZXIgKDQ3MzA4Njg5MjA3NDI5NTI4MTcpIC0tPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlc3RyX3Bpbl90cnlfbGF0ZXIgKDk3MzE0NDQ3MjQ5MDUzMjM3NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24gKDcyMjc0MTY4OTQ5NzkwNDc0NjcpIC0tPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiAoODU1NDk5MTQ4ODA5NjY2MjUwOCkgLS0+Ci0gICAgPHNraXAgLz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKaW5kZXggOTliYTkyMi4uN2Y4NTdlNCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLQktGK0LLQtdC00LXRgtC1IFBVSyDQutC+0LQg0YEg0L/QvtC90LUg0L7RgdC10Lwg0YbQuNGE0YDQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iU0lNINC60LDRgNGC0LDRgtCwINCy0Lgg0LUg0LfQsNC60LvRjtGH0LXQvdCwINGBIFBVSy4g0JLRitCy0LXQtNC10YLQtSBQVUsg0LrQvtC00LAsINC30LAg0LTQsCDRjyDQvtGC0LrQu9GO0YfQuNGC0LUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i0JLRitCy0LXQtNC10YLQtSBQVUsyLCDQt9CwINC00LAg0L7RgtCx0LvQvtC60LjRgNCw0YLQtSBTSU0g0LrQsNGA0YLQsNGC0LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i0J3QtdGD0YHQv9C10YjQvdC+IOKAkyDQsNC60YLQuNCy0LjRgNCw0LnRgtC1INC30LDQutC70Y7Rh9Cy0LDQvdC10YLQviDQvdCwIFNJTS9SVUlNINC60LDRgNGC0LDRgtCwLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+ItCe0YHRgtCw0LLQsCDQstC4IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtC/0LjRgiwg0L/RgNC10LTQuCBTSU0g0LrQsNGA0YLQsNGC0LAg0LTQsCDQsdGK0LTQtSDQt9Cw0LrQu9GO0YfQtdC90LAuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4i0J7RgdGC0LDQstCw0YIg0LLQuCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L7Qv9C40YLQsCwg0L/RgNC10LTQuCBTSU0g0LrQsNGA0YLQsNGC0LAg0LTQsCDQsdGK0LTQtSDQt9Cw0LrQu9GO0YfQtdC90LAuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLQmNC00LXQvdGC0LjRhNC40LrQsNGG0LjRjyDQvdCwINCy0YUuINC+0LHQsNC20LTQsNC90LjRjyI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i0KDQsNC30YDQtdGI0LDQstCwINC90LAg0L/RgNC40YLQtdC20LDRgtC10LvRjyDQtNCwINGB0LUg0L7QsdCy0YrRgNC20LUg0YEg0LjQvdGC0LXRgNGE0LXQudGB0LAg0L7RgiDQvdCw0Lkt0LLQuNGB0L7QutC+0YLQviDQvdC40LLQviDQvdCwINGD0YHQu9GD0LPQsCDQt9CwIFZQTi4g0J3QvtGA0LzQsNC70L3QuNGC0LUg0L/RgNC40LvQvtC20LXQvdC40Y8g0LHQuCDRgtGA0Y/QsdCy0LDQu9C+INC90LjQutC+0LPQsCDQtNCwINC90LUg0YHQtSDQvdGD0LbQtNCw0Y/RgiDQvtGCINGC0L7QstCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLQvtCx0LLRitGA0LfQstCw0L3QtSDRgSDRgtCw0L/QtdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLQoNCw0LfRgNC10YjQsNCy0LAg0L3QsCDQv9GA0LjRgtC10LbQsNGC0LXQu9GPINC00LAg0YHQtSDQvtCx0LLRitGA0LbQtSDRgSDQuNC90YLQtdGA0YTQtdC50YHQsCDQvtGCINC90LDQuS3QstC40YHQvtC60L7RgtC+INC90LjQstC+INC90LAg0YLQsNC/0LXRgi4g0J3QvtGA0LzQsNC70L3QuNGC0LUg0L/RgNC40LvQvtC20LXQvdC40Y8g0LHQuCDRgtGA0Y/QsdCy0LDQu9C+INC90LjQutC+0LPQsCDQtNCwINC90LUg0YHQtSDQvdGD0LbQtNCw0Y/RgiDQvtGCINGC0L7QstCwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4i0YHQstGK0YDQt9Cy0LDQvdC1INGBINC+0YLQtNCw0LvQtdGH0LXQvSDQtdC60YDQsNC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i0KDQsNC30YDQtdGI0LDQstCwINC90LAg0L/RgNC40YLQtdC20LDRgtC10LvRjyDQtNCwINGB0LUg0YHQstGK0YDQttC1INGBINC40L3RgtC10YDRhNC10LnRgdCwINC+0YIg0L/RitGA0LLQviDQvdC40LLQviDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvSDQtdC60YDQsNC9LiDQndC+0YDQvNCw0LvQvdC40YLQtSDQv9GA0LjQu9C+0LbQtdC90LjRjyDQsdC4INGC0YDRj9Cx0LLQsNC70L4g0L3QuNC60L7Qs9CwINC00LAg0L3QtSDRgdC1INC90YPQttC00LDRj9GCINC+0YIg0YLQvtCy0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i0L7QsdCy0YrRgNC30LLQsNC90LUg0YEg0YPRgdC70YPQs9CwINC30LAg0L/RgNC40YHQv9C+0YHQvtCx0LvQtdC90LjRjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLQoNCw0LfRgNC10YjQsNCy0LAg0L3QsCDQv9GA0LjRgtC10LbQsNGC0LXQu9GPINC00LAg0YHQtSDQvtCx0LLRitGA0LbQtSDRgSDQuNC90YLQtdGA0YTQtdC50YHQsCDQvtGCINC90LDQuS3QstC40YHQvtC60L7RgtC+INC90LjQstC+INC90LAg0YPRgdC70YPQs9CwINC30LAg0L/RgNC40YHQv9C+0YHQvtCx0LvQtdC90LjRjy4g0J3QvtGA0LzQsNC70L3QuNGC0LUg0L/RgNC40LvQvtC20LXQvdC40Y8g0LHQuCDRgtGA0Y/QsdCy0LDQu9C+INC90LjQutC+0LPQsCDQtNCwINC90LUg0YHQtSDQvdGD0LbQtNCw0Y/RgiDQvtGCINGC0L7QstCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ItCy0LfQsNC40LzQvtC00LXQudGB0YLQstC40LUg0YEg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YAg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4iPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNC70L7QttC10L3QuNC10YLQviDQtNCwINC40LfQv9C+0LvQt9Cy0LAg0YTRg9C90LrRhtC40LjRgtC1INC90LAgU3VyZmFjZUZsaW5nZXIg0L7RgiDQvdC40YHQutC+INC90LjQstC+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ItGH0LXRgtC10L3QtSDQvdCwINC60LDQtNGA0L7QstC40Y8g0LHRg9GE0LXRgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLQoNCw0LfRgNC10YjQsNCy0LAg0L3QsCDQv9GA0LjQu9C+0LbQtdC90LjQtdGC0L4g0LTQsCDRh9C10YLQtSDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQutCw0LTRgNC+0LLQuNGPINCx0YPRhNC10YAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4i0LTQvtGB0YLRitC/INC00L4gSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNC70L7QttC10L3QuNC10YLQviDQtNCwINC40LfQv9C+0LvQt9Cy0LAg0YTRg9C90LrRhtC40LjRgtC1INC90LAgSW5wdXRGbGluZ2VyINC+0YIg0L3QuNGB0LrQviDQvdC40LLQvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ItC60L7QvdGE0LjQs9GD0YDQuNGA0LDQvdC1INC90LAg0LTQuNGB0L/Qu9C10LjRgtC1INC/0YDQtdC3IFdpRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLQoNCw0LfRgNC10YjQsNCy0LAg0L3QsCDQv9GA0LjQu9C+0LbQtdC90LjQtdGC0L4g0LTQsCDQutC+0L3RhNC40LPRg9GA0LjRgNCwINC4INC00LAg0YHQtSDRgdCy0YrRgNC30LLQsCDRgSDQtNC40YHQv9C70LXQuNGC0LUg0L/RgNC10LcgV2lGaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ItC60L7QvdGC0YDQvtC70LjRgNCw0L3QtSDQvdCwINC00LjRgdC/0LvQtdC40YLQtSDQv9GA0LXQtyBXaUZpIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNC70L7QttC10L3QuNC10YLQviDQtNCwINC/0YDQvtC80LXQvdGPINCz0LvQvtCx0LDQu9C90LjRgtC1INC90LDRgdGC0YDQvtC50LrQuCDQt9CwINC30LLRg9C60LAsINC60LDRgtC+INC90LDQv9GA0LjQvNC10YAg0YHQuNC70LDRgtCwINC4INGC0L7QstCwLCDQutC+0Lkg0LLQuNGB0L7QutC+0LPQvtCy0L7RgNC40YLQtdC7INGB0LUg0LjQt9C/0L7Qu9C30LLQsCDQt9CwINC40LfRhdC+0LQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLQt9Cw0L/QuNGBINC90LAg0LfQstGD0LoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiLQoNCw0LfRgNC10YjQsNCy0LAg0L3QsCDQv9GA0LjQu9C+0LbQtdC90LjQtdGC0L4g0LTQsCDQt9Cw0L/QuNGB0LLQsCDQt9Cy0YPQuiDRgSDQvNC40LrRgNC+0YTQvtC90LAuINCi0L7QstCwINGA0LDQt9GA0LXRiNC10L3QuNC1INC80YMg0L/QvtC30LLQvtC70Y/QstCwINC00LAg0LPQviDQv9GA0LDQstC4INC/0L4g0LLRgdGP0LrQviDQstGA0LXQvNC1INCx0LXQtyDQv9C+0YLQstGK0YDQttC00LXQvdC40LUg0L7RgiDQstCw0YjQsCDRgdGC0YDQsNC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiLQutC+0LzRg9C90LjQutCw0YbQuNGPINGB0YrRgSBTSU0g0LrQsNGA0YLQsNGC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiLQoNCw0LfRgNC10YjQsNCy0LAg0L3QsCDQv9GA0LjQu9C+0LbQtdC90LjQtdGC0L4g0LTQsCDQuNC30L/RgNCw0YnQsCDQutC+0LzQsNC90LTQuCDQtNC+IFNJTSDQutCw0YDRgtCw0YLQsC4g0KLQvtCy0LAg0LUg0LzQvdC+0LPQviDQvtC/0LDRgdC90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i0L/RgNCw0LLQtdC90LUg0L3QsCDRgdC90LjQvNC60Lgg0Lgg0LLQuNC00LXQvtC60LvQuNC/0L7QstC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNC70L7QttC10L3QuNC10YLQviDQtNCwINC/0YDQsNCy0Lgg0YHQvdC40LzQutC4INC4INCy0LjQtNC10L7QutC70LjQv9C+0LLQtSDRgSDQutCw0LzQtdGA0LDRgtCwLiDQotC+0LLQsCDRgNCw0LfRgNC10YjQtdC90LjQtSDQvNGDINC/0L7Qt9Cy0L7Qu9GP0LLQsCDQtNCwINGPINC40LfQv9C+0LvQt9Cy0LAg0L/QviDQstGB0Y/QutC+INCy0YDQtdC80LUg0LHQtdC3INC/0L7RgtCy0YrRgNC20LTQtdC90LjQtSDQvtGCINCy0LDRiNCwINGB0YLRgNCw0L3QsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiLQtNC10LDQutGC0LjQstC40YDQsNC90LUg0L3QsCDRgdCy0LXRgtC+0LTQuNC+0LTQvdC40Y8g0LjQvdC00LjQutCw0YLQvtGAINC30LAg0L/RgNC10LTQsNCy0LDQvdC1LCDQutC+0LPQsNGC0L4g0LrQsNC80LXRgNCw0YLQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAiPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiLQlNC+0LzQsNGI0LXQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLQodC70YPQttC10LHQtdC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiLQlNGA0YPQsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiLQndGP0LzQsCDQvdCw0LzQtdGA0LXQvdC+INC/0YDQuNC70L7QttC10L3QuNC1LCDRgSDQutC+0LXRgtC+INC00LAg0YHQtSDQvtGC0LLQvtGA0Lgg0YLQvtC30Lgg0LrQvtC90YLQsNC60YIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i0JLRitCy0LXQtNC10YLQtSDQn9CY0J0g0LrQvtC00LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLQktGK0LLQtdC00LXRgtC1IFBVSyDQuCDQvdC+0LLQuNGPINCf0JjQnSDQutC+0LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDQutC+0LQiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i0JjQt9Cx0LXRgNC10YLQtSDQv9GA0LjQu9C+0LbQtdC90LjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4g0L3QtSDQvNC+0LbQsCDQtNCwINGB0LUg0YHRgtCw0YDRgtC40YDQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+ItCh0L/QvtC00LXQu9GP0L3QtSDRgdGK0YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i0KHQv9C+0LTQtdC70Y/QvdC1INGB0YrRgTogPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLQn9C70YrQt9Cz0LDRidCwINGB0LUg0LTRgNGK0LbQutCwLiDQlNC+0LrQvtGB0L3QtdGC0LUg0Lgg0LfQsNC00YDRitC20YLQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i0J/Qu9GK0LfQvdC10YLQtSDQvdCw0LPQvtGA0LUg0LfQsCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i0J/Qu9GK0LfQvdC10YLQtSDQvdCw0LTQvtC70YMg0LfQsCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i0J/Qu9GK0LfQvdC10YLQtSDQvdCw0LvRj9Cy0L4g0LfQsCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+ItCf0LvRitC30L3QtdGC0LUg0L3QsNC00Y/RgdC90L4g0LfQsCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLQntGC0LrQu9GO0YfQstCw0L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLQmtCw0LzQtdGA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i0KLQuNGFINGA0LXQttC40LwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i0JLQutC70Y7Rh9Cy0LDQvdC1INC90LAg0LfQstGD0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i0KLRitGA0YHQtdC90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLQn9GA0L7QutCw0YDQsNC50YLQtSDQv9GA0YrRgdGCLCDQt9CwINC00LAg0L7RgtC60LvRjtGH0LjRgtC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLQktC60LvRjtGH0LXRgtC1INGB0LvRg9GI0LDQu9C60LgsINC30LAg0LTQsCDRh9GD0LXRgtC1INC40LfQs9C+0LLQsNGA0Y/QvdC10YLQviDQvdCwINC60LvQsNCy0LjRiNC40YLQtSDQt9CwINC/0LDRgNC+0LvQsNGC0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i0KLQvtGH0LrQsC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLQodC40YHRgtC10LzQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i0JfQstGD0Log0L/RgNC10LcgQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLQkdC10LfQttC40YfQtdC9INC00LjRgdC/0LvQtdC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+ItCT0L7RgtC+0LLQviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+ItCY0LfRhdC+0LTRj9GJ0LAg0LzRg9C70YLQuNC80LXQtNC40Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+ItCh0LLRitGA0LfQstCw0L3QtSDRgSDRg9GB0YLRgNC+0LnRgdGC0LLQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+ItCV0LrRgNCw0L0g0LfQsCDQv9GA0LXQtNCw0LLQsNC90LUg0LrRitC8INGD0YHRgtGA0L7QudGB0YLQstC+0YLQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+ItCi0YrRgNGB0Y/RgiDRgdC1INGD0YHRgtGA0L7QudGB0YLQstCw4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i0J3QsNGB0YLRgNC+0LnQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+ItCf0YDQtdC60YDQsNGC0Y/QstCw0L3QtSDQvdCwINCy0YDRitC30LrQsNGC0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i0KHQutCw0L3QuNGA0LAg0YHQtS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+ItCj0YHRgtCw0L3QvtCy0Y/QstCwINGB0LUg0LLRgNGK0LfQutCwLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLQndCw0LvQuNGG0LUiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLQndCw0YHQu9Cw0LPQstCw0L3QtSDihJY8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+IuKAnjx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuKAnDogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDQt9Cw0YnQuNGC0LXQvdC+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLQkdC10LfQttC40YfQvdC40Y/RgiDQtNC40YHQv9C70LXQuSDQtSDRgdCy0YrRgNC30LDQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLQotC+0LfQuCDQtdC60YDQsNC9INGB0LUg0L/QvtC60LDQt9Cy0LAg0L3QsCDQtNGA0YPQs9C+INGD0YHRgtGA0L7QudGB0YLQstC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+ItCV0LrRgNCw0L3RitGCINGB0LUg0L/RgNC10LTQsNCy0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLQo9GB0YLQsNC90L7QstGP0LLQsCDRgdC1INCy0YDRitC30LrQsCDRgS/RitGBIOKAnjx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuKAnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+ItCV0LrRgNCw0L3RitGCINGB0LUg0L/RgNC10LTQsNCy0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+ItCj0YHRgtCw0L3QvtCy0LXQvdCwINC1INCy0YDRitC30LrQsCDRgS/RitGBIOKAnjx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuKAnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLQn9GA0LXQutGA0LDRgtGP0LLQsNC90LUg0L3QsCDQstGA0YrQt9C60LDRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLQodC/0LXRiNC90L4g0L7QsdCw0LbQtNCw0L3QtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+ItCX0LDQsdGA0LDQstC10L3QsCDRhNC40LPRg9GA0LAiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+ItCe0L/QuNGC0LDQudGC0LUg0L7RgtC90L7QstC+INC/0L4t0LrRitGB0L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLQl9CwINC40LfRhdC+0LQg0L7RgiDRhtGP0Lsg0LXQutGA0LDQvSDQv9GA0LXQutCw0YDQsNC50YLQtSDQv9GA0YrRgdGCINC+0YLQs9C+0YDQtSDQvdCw0LTQvtC70YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLQmtGA0YrQs9C+0LIg0L/Qu9GK0LfQs9Cw0Ycg0LfQsCDRh9Cw0YHQvtCy0LXRgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLQmtGA0YrQs9C+0LIg0L/Qu9GK0LfQs9Cw0Ycg0LfQsCDQvNC40L3Rg9GC0LjRgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+ItCY0LfQsdC40YDQsNC90LUg0L3QsCDRh9Cw0YHQvtCy0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLQmNC30LHQuNGA0LDQvdC1INC90LAg0LzQuNC90YPRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLQnNC10YHQtdGH0L3QsCDRgtCw0LHQu9C40YbQsCDQvdCwINC00L3QuNGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLQodC/0LjRgdGK0Log0YEg0LPQvtC00LjQvdC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLQmNC30LHQuNGA0LDQvdC1INC90LAg0LzQtdGB0LXRhiDQuCDQtNC10L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLQmNC30LHQuNGA0LDQvdC1INC90LAg0LPQvtC00LjQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+ItCY0LfQsdGA0LDRhdGC0LUgPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4i0JjQt9GC0YDQuNGF0YLQtSA8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKaW5kZXggOGI0NmU4NC4uODVlYTU0ZSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJJbnRyb2R1ZWl4IHVuIFBVSyBjb21wb3N0IGNvbSBhIG3DrW5pbSBkZSA4IG5vbWJyZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IkxhIHRhcmdldGEgU0lNIGVzdMOgIGJsb3F1ZWphZGEgcGVsIFBVSy4gRXNjcml2aXUgZWwgY29kaSBQVUsgcGVyIGRlc2Jsb3F1ZWphci1sYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJFc2NyaXZpdSBlbCBQVUsyIHBlciBkZXNibG9xdWVqYXIgbGEgdGFyZ2V0YSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iTm8gw6lzIGNvcnJlY3RlOyBhY3RpdmEgZWwgYmxvcXVlaWcgZGUgUlVJTS9TSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iRXQgcXVlZGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudDsgc2kgbm8gbFwnZW5jZXJ0ZXMsIGxhIFNJTSBlcyBibG9xdWVqYXLDoC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJFdCBxdWVkZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudHM7IHNpIG5vIGxcJ2VuY2VydGVzLCBsYSBTSU0gZXMgYmxvcXVlamFyw6AuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJZGVudGlmaWNhY2nDsyBkZSB0cnVjYWRhIGVudHJhbnQiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlBlcm1ldCBxdWUgZWwgdGl0dWxhciB2aW5jdWxpIGEgbGEgaW50ZXJmw61jaWUgZGUgbml2ZWxsIHN1cGVyaW9yIGRcJ3VuIHNlcnZlaSBkZSBWUE4uIE5vIHNcJ2hhdXJpYSBkZSBuZWNlc3NpdGFyIG1haSBwZXIgYSBsZXMgYXBsaWNhY2lvbnMgbm9ybWFscy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iZW5sbGHDp2EgYW1iIHVuIGZvbnMgZGUgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IlBlcm1ldCBxdWUgZWwgdGl0dWxhciB2aW5jdWxpIGEgbGEgaW50ZXJmw61jaWUgZGUgbml2ZWxsIHN1cGVyaW9yIGRcJ3VuIGZvbnMgZGUgcGFudGFsbGEuIE5vIHNcJ2hhdXJpYSBkZSBuZWNlc3NpdGFyIG1haSBwZXIgYSBsZXMgYXBsaWNhY2lvbnMgbm9ybWFscy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InZpbmN1bGEgYSB1bmEgcGFudGFsbGEgcmVtb3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iUGVybWV0IHF1ZSBlbCB0aXR1bGFyIGVzIHZpbmN1bGkgYSBsYSBpbnRlcmbDrWNpZSBkZSBuaXZlbGwgc3VwZXJpb3IgZFwndW5hIHBhbnRhbGxhIHJlbW90YS4gTm8gc1wnaGF1cmlhIGRlIG5lY2Vzc2l0YXIgbWFpIHBlciBhIGxlcyBhcGxpY2FjaW9ucyBub3JtYWxzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InZpbmN1bGEgYSB1biBzZXJ2ZWkgZGUgd2lkZ2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlBlcm1ldCBxdWUgZWwgdGl0dWxhciB2aW5jdWxpIGEgbGEgaW50ZXJmw61jaWUgZGUgbml2ZWxsIHN1cGVyaW9yIGRcJ3VuIHNlcnZlaSBkZSB3aWRnZXQuIE5vIHNcJ2hhdXJpYSBkZSBuZWNlc3NpdGFyIG1haSBwZXIgYSBsZXMgYXBsaWNhY2lvbnMgbm9ybWFscy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJpbnRlcmFjdHVhciBhbWIgdW4gYWRtaW5pc3RyYWRvciBkZWwgZGlzcG9zaXRpdSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iUGVybWV0IHF1ZSBsXCdhcGxpY2FjacOzIHV0aWxpdHppIGZ1bmNpb25zIFN1cmZhY2VGbGluZ2VyIGRlIGJhaXggbml2ZWxsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImxsZWdpciBsYSBtZW3DsnJpYSBpbnRlcm3DqGRpYSBkZSBtYXJjcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQZXJtZXQgcXVlIGxcJ2FwbGljYWNpw7MgbGxlZ2VpeGkgZWwgY29udGluZ3V0IGRlIGxhIG1lbcOycmlhIGludGVybcOoZGlhIGRlIG1hcmNzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImFjY2VkZWl4IGEgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IlBlcm1ldCBxdWUgbFwnYXBsaWNhY2nDsyB1dGlsaXR6aSBmdW5jaW9ucyBkZSBiYWl4IG5pdmVsbCBkXCdJbnB1dEZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmFjacOzIGRlIGxlcyBwYW50YWxsZXMgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJQZXJtZXQgYSBsXCdhcGxpY2FjacOzIGNvbmZpZ3VyYXItc2UgaSBjb25uZWN0YXItc2UgYSBsZXMgcGFudGFsbGVzIFdpLUZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iY29udHJvbCBkZSBsZXMgcGFudGFsbGVzIFdpLUZpIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IlBlcm1ldCBxdWUgbFwnYXBsaWNhY2nDsyBtb2RpZmlxdWkgbGEgY29uZmlndXJhY2nDsyBkXCfDoHVkaW8gZ2VuZXJhbCwgY29tIGFyYSBlbCB2b2x1bSBpIGxcJ2FsdGF2ZXUgZGUgc29ydGlkYSBxdWUgZXMgZmEgc2VydmlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4iZW5yZWdpc3RyYXIgw6B1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iUGVybWV0IHF1ZSBsXCdhcGxpY2FjacOzIGVucmVnaXN0cmkgw6B1ZGlvIGFtYiBlbCBtaWNyw7Jmb24uIEFxdWVzdCBwZXJtw61zIHBlcm1ldCBxdWUgbFwnYXBsaWNhY2nDsyBlbnJlZ2lzdHJpIMOgdWRpbyBlbiBxdWFsc2V2b2wgbW9tZW50IHNlbnNlIGxhIHRldmEgY29uZmlybWFjacOzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4iY29tdW5pY2FjacOzIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IlBlcm1ldCBxdWUgbFwnYXBsaWNhY2nDsyBlbnZpw68gb3JkcmVzIGEgbGEgU0lNLiBBaXjDsiDDqXMgbW9sdCBwZXJpbGzDs3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4iZmVzIGZvdG9zIGkgdsOtZGVvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQZXJtZXQgcXVlIGxcJ2FwbGljYWNpw7MgZmFjaSBmb3RvcyBpIHbDrWRlb3MgYW1iIGxhIGPDoG1lcmEuIEFxdWVzdCBwZXJtw61zIHBlcm1ldCBxdWUgbFwnYXBsaWNhY2nDsyB1dGlsaXR6aSBsYSBjw6BtZXJhIGVuIHF1YWxzZXZvbCBtb21lbnQgc2Vuc2UgbGEgdGV2YSBjb25maXJtYWNpw7MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4iZGVzYWN0aXZhIGxhIHRyYW5zbWlzc2nDsyBkZWwgTEVEIGluZGljYWRvciBlbiBmZXIgc2VydmlyIGxhIGPDoG1lcmEiPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiJDYXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IkZlaW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJBbHRyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4iTm8gaGVtIHRyb2JhdCBjYXAgYXBsaWNhY2nDsyBwZXIgbW9zdHJhciBhcXVlc3QgY29udGFjdGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iSW50cm9kdWVpeCBlbCBjb2RpIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IkludHJvZHVlaXggZWwgY29kaSBQVUsgaSBlbCBjb2RpIFBJTiBub3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IkNvZGkgUFVLIjwvc3RyaW5nPgpAQCAtOTgxLDEwICs5OTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODY1NTg4NzUzOTA4OTkxMDU3NyI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gdm9sIGFjdGl2YXIgbFwnZXhwbG9yYWNpw7MgdMOgY3RpbC4gUXVhbiBsXCdleHBsb3JhY2nDsyB0w6BjdGlsIGVzdMOgIGFjdGl2YWRhLCBwb3RzIGVzY29sdGFyIG8gdmV1cmUgbGVzIGRlc2NyaXBjaW9ucyBkZWwgY29udGluZ3V0IHNlbGVjY2lvbmF0IG8gdXRpbGl0emFyIGdlc3RvcyBwZXIgaW50ZXJhY3R1YXIgYW1iIGxhIHRhdWxldGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjcwODE5OTY3Mjg1MjM3MzE5NSI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gdm9sIGFjdGl2YXIgbFwnZXhwbG9yYWNpw7MgdMOgY3RpbC4gUXVhbiBsXCdleHBsb3JhY2nDsyBwZXIgdMOgY3RpbCBlc3TDoCBhY3RpdmFkYSwgcG90cyBlc2NvbHRhciBvIHZldXJlIGxlcyBkZXNjcmlwY2lvbnMgZGVsIGNvbnRpbmd1dCBzZWxlY2Npb25hdCBvIHV0aWxpdHphciBnZXN0b3MgcGVyIGludGVyYWN0dWFyIGFtYiBlbCB0ZWzDqGZvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjczOTYzODQ1MDg5NTM3Nzk5MjUiPiJGYSAxIG1lcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJlZm9yZU9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iOTA5MTM0NTQ2ODM2NDk5ODI2Ij4iRmEgbWVueXMgZFwnMSBtZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IkZhIG3DqXMgZFwnMSBtZXMiPC9zdHJpbmc+CiAgIDxwbHVyYWxzIG5hbWU9Im51bV9zZWNvbmRzX2FnbyI+CiAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4Njk4NzAwNTY1NDc4OTYwMTEiPiJGYSAxIHNlZ29uIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzOTAzNzA2ODA0MzQ5NTU2Mzc5Ij4iZmEgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2Vnb25zIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzOTAzNzA2ODA0MzQ5NTU2Mzc5Ij4iRmEgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2Vnb25zIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICA8cGx1cmFscyBuYW1lPSJudW1fbWludXRlc19hZ28iPgogICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMzA2Nzg3NDMzMDg4ODEwMTkxIj4iRmEgMSBtaW51dCI8L2l0ZW0+CkBAIC0xMDAwLDcgKzEwMTIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibGFzdF9tb250aCIgbXNnaWQ9IjM5NTkzNDY3Mzk5NzkwNTU0MzIiPiJFbCBtZXMgcGFzc2F0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ib2xkZXIiIG1zZ2lkPSI1MjExOTc1MDIyODE1NTU0ODQwIj4iTcOpcyBhbnRpZ3VlcyI8L3N0cmluZz4KICAgPHBsdXJhbHMgbmFtZT0ibnVtX2RheXNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODYxMzU4NTM0Mzk4MTE1ODIwIj4iYWhpciI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg2MTM1ODUzNDM5ODExNTgyMCI+IkFoaXIiPC9pdGVtPgogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI0Nzk1ODY0NjYxNTMzMTQ2MzMiPiJGYSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBkaWVzIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICA8cGx1cmFscyBuYW1lPSJpbl9udW1fc2Vjb25kcyI+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJNYWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJSZXRvcm4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJTZWxlY2Npb25hIHVuYSBhcGxpY2FjacOzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iTm8gc1wnaGEgcG9ndXQgaW5pY2lhciA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkNvbXBhcnRlaXggYW1iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkNvbXBhcnRlaXggYW1iIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iTGxpc2NhIGVsIGRpdC4gTWFudMOpbiBwcmVtdXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkZlcyBsbGlzY2FyIGVsIGRpdCBjYXAgYW11bnQgcGVyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJGZXMgbGxpc2NhciBlbCBkaXQgY2FwIGF2YWxsIHBlciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRmVzIGxsaXNjYXIgZWwgZGl0IGNhcCBhIGxcJ2VzcXVlcnJhIHBlciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkZlcyBsbGlzY2FyIGVsIGRpdCBjYXAgYSBsYSBkcmV0YSBwZXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iRGVzYmxvcXVlamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iQ8OgbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTaWxlbmNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkFjdGl2YSBlbCBzbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iQ2VyY2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJMbGlzY2EgZWwgZGl0IHBlciBkZXNibG9xdWVqYXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IkNvbm5lY3RhIHVuIGF1cmljdWxhciBwZXIgZXNjb2x0YXIgbGVzIGNsYXVzIGRlIGxhIGNvbnRyYXNlbnlhIGVuIHZldSBhbHRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlB1bnQuIjwvc3RyaW5nPgpAQCAtMTQ4Myw5ICsxNDg3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iw4B1ZGlvIHBlciBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlBhbnRhbGxhIHNlbnNlIGZpbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJGZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJTb3J0aWRhIGRlIGNvbnRpbmd1dCBtdWx0aW3DqGRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJTXCdlc3TDoCBleHBsb3JhbnQuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IkNvbm5leGnDsyBhbCBkaXNwb3NpdGl1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iRW1pc3Npw7MgZGUgcGFudGFsbGEgYWwgZGlzcG9zaXRpdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlNcJ2VzdGFuIGNlcmNhbnQgZGlzcG9zaXRpdXPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJDb25maWd1cmFjacOzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkRlc2Nvbm5lY3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNcJ2VzdMOgIGNlcmNhbnTigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJTXCdlc3TDoCBjb25uZWN0YW50Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJEaXNwb25pYmxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI2NzM5ODk5OTYyNjgxODg2NDAxIj4iTm8gZGlzcG9uaWJsZSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlN1cGVycG9zYSAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc2VndXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkxhIHBhbnRhbGxhIHNlbnNlIGZpbCBlc3TDoCBjb25uZWN0YWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkFxdWVzdGEgcGFudGFsbGEgZXMgbW9zdHJhIGVuIHVuIGFsdHJlIGRpc3Bvc2l0aXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iRW1pc3Npw7MgZGUgcGFudGFsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJTXCdlc3TDoCBjb25uZWN0YW50IGEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iRW1pc3Npw7MgZGUgcGFudGFsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IkNvbm5lY3RhdCBhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJEZXNjb25uZWN0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iVHJ1Y2FkYSBkXCdlbWVyZ8OobmNpYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlBhdHLDsyBvYmxpZGF0Ijwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjYwLDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJUb3JuYS1obyBhIHByb3ZhciBtw6lzIHRhcmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iRmVzIGxsaXNjYXIgZWwgZGl0IGNhcCBhdmFsbCBwZXIgc29ydGlyIGRlIGxhIHBhbnRhbGxhIGNvbXBsZXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iRmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iQ29udHJvbCBjaXJjdWxhciBkZSBsZXMgaG9yZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IkNvbnRyb2wgY2lyY3VsYXIgZGVscyBtaW51dHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iU2VsZWNjaW9uYSBsZXMgaG9yZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTZWxlY2Npb25hIGVscyBtaW51dHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IkdyYWVsbGEgbWVuc3VhbCBkZSBkaWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTGxpc3RhIGFudWFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJTZWxlY2Npb25hIHVuIG1lcyBpIHVuIGRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlNlbGVjY2lvbmEgdW4gYW55Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBzZWxlY2Npb25hdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IHN1cHJpbWl0Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAppbmRleCA3M2NhMDJiLi5hOGRkZmZlIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlphZGVqdGUgb3NtaW3DrXN0bsO9IG5lYm8gZGVsxaHDrSBrw7NkIFBVSy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iU0lNIGthcnRhIGplIGJsb2tvdsOhbmEgcG9tb2PDrSBrw7NkdSBQVUsuIE9kYmxva3VqZXRlIGppIHphZMOhbsOtbSBrw7NkdSBQVUsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iQ2hjZXRlLWxpIG9kYmxva292YXQgU0lNIGthcnR1LCB6YWRlanRlIGvDs2QgUFVLMi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJPcGVyYWNlIG5lYnlsYSDDunNwxJvFoW7DoSwgcG92b2x0ZSB6w6FtZWsgU0lNL1JVSU0ga2FydHkuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iTcOhdGUgamXFoXTEmyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9rdXMuIFBvdMOpIGJ1ZGUgU0lNIGthcnRhIHV6YW3EjWVuYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJQb8SNZXQgemLDvXZhasOtY8OtY2ggcG9rdXPFrywgcG8gamVqaWNoxb4gdnnEjWVycMOhbsOtIGJ1ZGUgU0lNIGthcnRhIHV6YW3EjWVuYTogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iUMWZw61jaG96w60gaWRlbnRpZmlrYWNlIHZvbGFqw61jw61obyI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iVW1vxb7FiHVqZSBkcsW+aXRlbGkgbmF2w6F6YXQgc2UgbmEgbmVqdnnFocWhw60gw7pyb3ZlxYggc2x1xb5ieSBWUE4uIELEm8W+bsOpIGFwbGlrYWNlIGJ5IHRvdG8gb3Byw6F2bsSbbsOtIG5lbcSbbHkgbmlrZHkgcG/FvmFkb3ZhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4idmF6YmEgbmEgdGFwZXR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJVbW/FvsWIdWplIGRyxb5pdGVsaSBuYXbDoXphdCBzZSBuYSBuZWp2ecWhxaHDrSDDunJvdmXFiCByb3pocmFuw60gdGFwZXR5LiBCxJvFvm7DqSBhcGxpa2FjZSBieSB0b3RvIG9wcsOhdm7Em27DrSBuZW3Em2x5IG5pa2R5IHBvxb5hZG92YXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJwxZlpcG9qaXQgc2Uga2Ugdnpkw6FsZW7DqW11IGRpc3BsZWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iVW1vxb7FiHVqZSBkcsW+aXRlbGkgcMWZaXBvaml0IHNlIGsgdnlzb2tvw7pyb3bFiG92w6ltdSByb3pocmFuw60gdnpkw6FsZW7DqWhvIGRpc3BsZWplLiBCxJvFvm7DqSBhcGxpa2FjZSBieSB0b3RvIG9wcsOhdm7Em27DrSBuZW3Em2x5IG5pa2R5IHBvdMWZZWJvdmF0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+Im5hdsOhemF0IHNlIG5hIHNsdcW+YnUgd2lkZ2V0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJVbW/FvsWIdWplIGRyxb5pdGVsaSBuYXbDoXphdCBzZSBuYSBuZWp2ecWhxaHDrSDDunJvdmXFiCBzbHXFvmJ5IHdpZGdldHUuIELEm8W+bsOpIGFwbGlrYWNlIGJ5IHRvdG8gb3Byw6F2bsSbbsOtIG5lbcSbbHkgbmlrZHkgcG/FvmFkb3ZhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJrb211bmlrb3ZhdCBzZSBzcHLDoXZjZW0gemHFmcOtemVuw60iPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlVtb8W+xYh1amUgYXBsaWthY2kgcG91xb7DrXZhdCBuw616a2/DunJvdsWIb3bDqSBmdW5rY2UgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ixI10ZW7DrSB2eXJvdm7DoXZhY8OtIHBhbcSbdGkgc27DrW1rxa8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iVW1vxb7FiHVqZSBhcGxpa2FjaSDEjcOtc3Qgb2JzYWggdnlyb3Zuw6F2YWPDrSBwYW3Em3RpIHNuw61ta8WvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+InDFmcOtc3R1cCBrIGZ1bmtjaSBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iVW1vxb7FiHVqZSBhcGxpa2FjaSBwb3XFvsOtdmF0IG7DrXprb8O6cm92xYhvdsOpIGZ1bmtjZSBJbnB1dEZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJrb25maWd1cm92YXQgZGlzcGxlamUgcMWZZXMgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJQb3ZvbHVqZSBhcGxpa2FjaSBwxZlpcG9qaXQgYSBrb25maWd1cm92YXQgZGlzcGxlamUgcMWZZXMgV2ktRmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJvdmzDoWRhdCBkaXNwbGVqZSBwxZllcyBXaS1GaSI8L3N0cmluZz4KQEAgLTQ5NSw2ICs1MDQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiJVbW/FvsWIdWplIGFwbGlrYWNpIHptxJtuaXQgZ2xvYsOhbG7DrSBuYXN0YXZlbsOtIHp2dWt1LCBuYXDFmcOta2xhZCBobGFzaXRvc3QgxI1pIHJlcHJvZHVrdG9yIHBybyB2w71zdHVwIHp2dWt1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4ibmFocsOhdsOhbsOtIHp2dWt1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iVW1vxb7FiHVqZSBhcGxpa2FjaSB6YXpuYW1lbmF0IHp2dWsgcG9tb2PDrSBtaWtyb2ZvbnUuIFRvdG8gb3Byw6F2bsSbbsOtIHVtb8W+xYh1amUgYXBsaWthY2kga2R5a29saXYgemF6bmFtZW5hdCB6dnVrIGJleiB2YcWhZWhvIHN2b2xlbsOtLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4ia29tdW5pa2FjZSBzIGthcnRvdSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJVbW/FvsWIdWplIGFwbGlrYWNpIG9kZXPDrWxhdCBwxZnDrWthenkgbmEga2FydHUgU0lNLiBUb3RvIG9wcsOhdm7Em27DrSBqZSB2ZWxtaSBuZWJlenBlxI1uw6kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4icG/FmWl6b3bDoW7DrSBmb3RvZ3JhZmnDrSBhIHZpZGXDrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJVbW/FvsWIdWplIGFwbGlrYWNpIHBvxZlpem92YXQgZm90b2dyYWZpZSBhIHZpZGVhIHBvbW9jw60gZm90b2FwYXLDoXR1LiBUb3RvIG9wcsOhdm7Em27DrSB1bW/FvsWIdWplIGFwbGlrYWNpIHBvdcW+w612YXQgZm90b2FwYXLDoXQga2R5a29saXYgaSBiZXogdmHFoWVobyBzdm9sZW7DrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiJ2eXBudXTDrSBpbmRpa8OhdG9ydSBMRUQgcMWZZW5vc3UgcMWZaSBwb3XFvml0w60gZm90b2FwYXLDoXR1Ijwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iRG9txa8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iUHLDoWNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJKaW7DqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJOZWJ5bGEgbmFsZXplbmEgxb7DoWRuw6EgYXBsaWthY2UsIHBvbW9jw60ga3RlcsOpIGJ5IHRlbnRvIGtvbnRha3QgYnlsbyBtb8W+bsOpIHpvYnJheml0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlphZGVqdGUga8OzZCBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJaYWRlanRlIGvDs2QgUFVLIGEgbm92w70ga8OzZCBQSU4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJLw7NkIFBVSyI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJWeWJyYXQgYXBsaWthY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJBcGxpa2FjaSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IG5lbHplIHNwdXN0aXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iU2TDrWxldCBzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IlNkw61sZXQgcyBhcGxpa2Fjw60gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJQb3N1dm7DrWsuIERvdGtuxJt0ZSBzZSBhIHBvZHLFvnRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJQxZllamXEj3RlIHByc3RlbSBuYWhvcnU6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IlDFmWVqZcSPdGUgcHJzdGVtIGRvbMWvOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJQxZllamXEj3RlIHByc3RlbSBkb2xldmE6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJQxZllamXEj3RlIHByc3RlbSBkb3ByYXZhOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Ik9kZW1rbm91dCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJGb3RvYXBhcsOhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJUaWNow70iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iWmFwbm91dCB6dnVrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJWeWhsZWTDoXbDoW7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+Ik9kZW1rbmV0ZSBwb3N1bnV0w61tIHByc3R1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJDaGNldGUtbGkgc2x5xaFldCwga3RlcsOpIGtsw6F2ZXN5IGpzdGUgcMWZaSB6YWTDoXbDoW7DrSBoZXNsYSBzdGlza2xpLCBwxZlpcG9qdGUgc2x1Y2jDoXRrYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJUZcSNa2EuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3lzdMOpbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoIEF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJCZXpkcsOhdG92w70gZGlzcGxlaiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJIb3Rvdm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJWw71zdHVwIG3DqWRpw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IlDFmWlwb2plbsOtIGsgemHFmcOtemVuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJPZGVzw61sw6Fuw60gb2JzYWh1IG9icmF6b3ZreSBkbyB6YcWZw616ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlZ5aGxlZMOhdsOhbsOtIHphxZnDrXplbsOt4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iTmFzdGF2ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJPZHBvaml0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlZ5aGxlZMOhdsOhbsOt4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iUMWZaXBvam92w6Fuw63igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRvc3R1cG7DoSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlDFmWVrcnl2bsOhIHZyc3R2YSDEjS4gPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHphYmV6cGXEjWVuw6kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkJlemRyw6F0b3bDvSBkaXNwbGVqIGplIHDFmWlwb2plbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJUYXRvIG9icmF6b3ZrYSBzZSB6b2JyYXp1amUgdiBqaW7DqW0gemHFmcOtemVuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iT2Rlc8OtbMOhbsOtIG9ic2FodSBvYnJhem92a3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJQxZlpcG9qb3bDoW7DrSBrIG9icmF6b3ZjZSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJPZGVzw61sw6Fuw60gb2JzYWh1IG9icmF6b3ZreSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iUMWZaXBvamVubyBrIG9icmF6b3ZjZSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iT2Rwb2ppdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iVMOtc8WIb3bDqSB2b2zDoW7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlphcG9tZW51dMOpIGdlc3RvIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjYwLDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJaa3VzdGUgdG8gem5vdnUgcG96ZMSbamkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iUmXFvmltIGNlbMOpIG9icmF6b3ZreSB1a29uxI3DrXRlIHDFmWVqZXTDrW0gZG9sxa8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJIb3Rvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJLcnVob3bDvSBwb3N1dm7DrWsgaG9kaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IktydWhvdsO9IHBvc3V2bsOtayBtaW51dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJadm9sdGUgaG9kaW55Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iWnZvbHRlIG1pbnV0eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iRG55IHVzcG/FmcOhZGFuw6kgcG8gbcSbc8OtY8OtY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJTZXpuYW0gcm9rxa8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlZ5YmVydGUgbcSbc8OtYyBhIGRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlZ5YmVydGUgcm9rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+IlZ5YnLDoW5hIHBvbG/FvmthIDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+IsSMw61zbGljZSA8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBieWxhIHNtYXrDoW5hIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAppbmRleCAwY2Y1YmM1Li40Y2FmZjY5IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IkFuZ2l2IGVuIFBVSy1rb2RlIHDDpSA4IGVsbGVyIGZsZXJlIGNpZnJlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJEaXQgU0lNLWtvcnQgZXIgbMOlc3QgbWVkIFBVSy1rb2Rlbi4gSW5kdGFzdCBQVUsta29kZW4gZm9yIGF0IGzDpXNlIGRlbiBvcC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJJbmR0YXN0IFBVSzIta29kZW4gZm9yIGF0IGzDpXNlIG9wIGZvciBTSU0ta29ydGV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+Ik1pc2x5a2tlZGVzLiBBa3RpdsOpciBTSU0tL1JVSU0tbMOlcy4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZvcnPDuGcgdGlsYmFnZSwgZsO4ciBTSU0ta29ydGV0IGJsaXZlciBsw6VzdC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZvcnPDuGcgdGlsYmFnZSwgZsO4ciBTSU0ta29ydGV0IGJsaXZlciBsw6VzdC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUktbnVtbWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJbmRnw6VlbmRlIG9wa2FsZHMtaWQiPC9zdHJpbmc+CkBAIC0yMzAsMTMgKzIzNSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0b3JhZ2UiIG1zZ2lkPSIxOTcxMTE4NzcwNTQ2MzM2OTY2Ij4iTGFncmluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4iRsOlIGFkZ2FuZyB0aWwgVVNCLWxhZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiJGw6UgYWRnYW5nIHRpbCBTRC1rb3J0ZXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiJUaWxnw6ZuZ2VsaWdoZWRzZnVua3Rpb25lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI3OTE5MDI1NjAyMjgzNTkzOTA3Ij4iSGrDpmxwZWZ1bmt0aW9uZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9IjQyMDUxOTY4ODE2NzgxNDQzMzUiPiJGdW5rdGlvbmVyLCBzb20gaGrDpmxwZXRla25vbG9naWVyIGthbiBhbm1vZGUgb20uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzOTAxNzE3OTM2OTMwMTcwMzIwIj4iaGVudGUgaW5kaG9sZGV0IGkgdmluZHVldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzNzcyMjI1MDA4NjA1MzEwNjcyIj4idW5kZXJzw7hnZSBpbmRob2xkZXQgaSBldCB2aW5kdWUsIGR1IGludGVyYWdlcmVyIG1lZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+ImFrdGl2ZXJlIFVkZm9yc2sgdmVkIGJlcsO4cmluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiJEZSBlbW5lciwgZGVyIHRyeWtrZXMgcMOlLCBsw6ZzZXMgaMO4anQsIG9nIHNrw6ZybWVuIGthbiB1ZGZvcnNrZXMgdmVkIGhqw6ZscCBhZiBiZXbDpmdlbHNlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNzM5ODgxNzY2NTIyNTk0MDczIj4iYWt0aXZlcmUgZm9yYmVkcmV0IHdlYnRpbGfDpm5nZWxpZ2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE3Mzk4ODE3NjY1MjI1OTQwNzMiPiJha3RpdmVyZSBmb3JiZWRyZXQgd2ViaGrDpmxwZWZ1bmt0aW9uZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9Ijc4ODEwNjM5NjE1MDc1MTE3NjUiPiJEZXIgaW5zdGFsbGVyZXMgbXVsaWd2aXMgc2NyaXB0cyBmb3IgYXQgZ8O4cmUgYXBwaW5kaG9sZCBtZXJlIHRpbGfDpm5nZWxpZ3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iMjEwMzQ0MDM5MTkwMjQxMjE3NCI+Im9ic2VydmVyZSB0ZWtzdCwgZHUgc2tyaXZlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IkRldHRlIG9tZmF0dGVyIHBlcnNvbmxpZ2UgZGF0YSBzw6Vzb20ga3JlZGl0a29ydG51bXJlIG9nIGFkZ2FuZ3Nrb2Rlci4iPC9zdHJpbmc+CkBAIC0zMDgsOCArMzEzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2R1bXAiIG1zZ2lkPSIxNzc4Mjk5MDg4NjkyMjkwMzI5Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBoZW50ZSBzeXN0ZW1ldHMgaW50ZXJuZSB0aWxzdGFuZC4gT25kc2luZGVkZSBhcHBzIGthbiBoZW50ZSBlbiBsYW5nIHLDpmtrZSBmb3J0cm9saWdlIG9nIGJlc2t5dHRlZGUgb3BseXNuaW5nZXIsIHNvbSBkZSBub3JtYWx0IGFsZHJpZyB2aWxsZSBoYXZlIGJydWcgZm9yLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSI4MDIyNTg4NjA4OTk0NTg5OTM4Ij4iaGVudGUgc2vDpnJtaW5kaG9sZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iMzE5MzI2OTA2OTQ2OTcwMDI2NSI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gaGVudGUgaW5kaG9sZGV0IGkgZGV0IGFrdGl2ZSB2aW5kdWUuIE9uZHNpbmRlZGUgYXBwcyBrYW4gaGVudGUgYWwgaW5kaG9sZGV0IGkgdmluZHVldCBvZyB1bmRlcnPDuGdlIGFsIGRlbnMgdGVrc3QgbWVkIHVuZHRhZ2Vsc2UgYWYgYWRnYW5nc2tvZGVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMjMxMjYxMjEzNTEyNzMxMDI1NCI+ImFrdGl2w6lyIHRpbGfDpm5nZWxpZ2hlZCBtaWRsZXJ0aWRpZ3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4iVGlsbGFkZXIsIGF0IGVuIGFwcGxpa2F0aW9uIG1pZGxlcnRpZGlndCBrYW4gYWt0aXZlcmUgdGlsZ8OmbmdlbGlnaGVkIHDDpSBlbmhlZGVuLiBTa2FkZWxpZ2UgYXBwcyBrYW4gbXVsaWd2aXMgYWt0aXZlcmUgdGlsZ8OmbmdlbGlnaGVkIHVkZW4gYnJ1Z2VyZW5zIHNhbXR5a2tlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMjMxMjYxMjEzNTEyNzMxMDI1NCI+ImFrdGl2ZXJlIGhqw6ZscGVmdW5rdGlvbmVyIG1pZGxlcnRpZGlndCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiJUaWxsYWRlciwgYXQgZW4gYXBwIG1pZGxlcnRpZGlndCBrYW4gYWt0aXZlcmUgaGrDpmxwZWZ1bmt0aW9uZXIgcMOlIGVuaGVkZW4uIFNrYWRlbGlnZSBhcHBzIGthbiBtdWxpZ3ZpcyBha3RpdmVyZSBoasOmbHBlZnVua3Rpb25lciB1ZGVuIGJydWdlcmVucyBzYW10eWtrZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iODUzMjI5NTE5OTExMjUxOTM3OCI+ImhlbnQgb3BseXNuaW5nZXIgb20gdmluZHVlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iNDk5ODgzNjM3MDQyNDE4Njg0OSI+IlRpbGxhZGVyLCBhdCBlbiBhcHBsaWthdGlvbiBoZW50ZXIgb3BseXNuaW5nZXIgb20gdmluZHVlcm5lIGkgdmluZHVlc2FkbWluaXN0cmF0b3Jlbi4gU2thZGVsaWdlIGFwcHMga2FuIG11bGlndmlzIGhlbnRlIG9wbHlzbmluZ2VyLCBkZXIgZXIgYmVyZWduZXQgdGlsIGludGVybiBzeXN0ZW1icnVnLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9Ijg2NzU1MzU2NDg4MDc0MjczODkiPiJmaWx0cmVyIGJlZ2l2ZW5oZWRlciI8L3N0cmluZz4KQEAgLTMyNSwxMSArMzMwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9Ijg5MjIzOTA5NDg2NzE4MjY1NiI+Im92ZXJ2w6VnZSBvZyBrb250cm9sbGVyZSDDpWJuaW5nIGFmIGFsbGUgYXBwcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIG92ZXJ2w6VnZSBvZyBrb250cm9sbGVyZSwgaHZvcmRhbiBzeXN0ZW1ldCBzdGFydGVyIGFrdGl2aXRldGVyLiBPbmRzaW5kZWRlIGFwcHMga2FuIGZ1bGRzdMOmbmRpZyBrb21wcm9taXR0ZXJlIHN5c3RlbWV0LiBEZW5uZSB0aWxsYWRlbHNlIGVyIGt1biBuw7hkdmVuZGlnIHRpbCB1ZHZpa2xpbmcsIGFsZHJpZyB0aWwgbm9ybWFsIGJydWcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjI1NzYzMzM0MzQ4OTM1MzI0NzUiPiJzZW5kIHVkc2VuZGVsc2Ugb20gZmplcm5ldCBwYWtrZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gdWRzZW5kZSBlbiBtZWRkZWxlbHNlIG9tLCBhdCBlbiBhcHBwYWtrZSBlciBmamVybmV0LiBPbmRzaW5kZWRlIGFwcHMga2FuIGJydWdlIGRldHRlIHRpbCBhdCBkcsOmYmUgYW5kcmUga8O4cmVuZGUgYXBwcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjY2MjE5MDEyMTYyMDc5MzEwODkiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIHVkc2VuZGUgZW4gdW5kZXJyZXRuaW5nIG9tLCBhdCBlbiBhcHAtcGFra2UgZXIgZmplcm5ldC4gT25kc2luZGVkZSBhcHBzIGthbiBicnVnZSBkZXR0ZSB0aWwgYXQgbHVra2UgYW5kcmUga8O4cmVuZGUgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNTY4OTA5NTAwOTAzMDMzNjU5MyI+InNlbmQgc21zLW1vZHRhZ2V0IHVkc2VuZGVsc2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIHVkc2VuZGUgZW4gbWVkZGVsZWxzZSBvbSwgYXQgZGVyIGVyIG1vZHRhZ2V0IGVuIHNtcy1iZXNrZWQuIE9uZHNpbmRlZGUgYXBwcyBrYW4gYnJ1Z2UgZGV0dGUgdGlsIGF0IGZvcmZhbHNrZSBpbmRnw6VlbmRlIHNtcy1iZXNrZWRlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIHVkc2VuZGUgZW4gdW5kZXJyZXRuaW5nIG9tLCBhdCBkZXIgZXIgbW9kdGFnZXQgZW4gc21zLWJlc2tlZC4gT25kc2luZGVkZSBhcHBzIGthbiBicnVnZSBkZXR0ZSB0aWwgYXQgc2ltdWxlcmUgaW5kZ8OlZW5kZSBzbXMtYmVza2VkZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+InNlbmQgV0FQLVBVU0gtbW9kdGFnZXQgdWRzZW5kZWxzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiB1ZHNlbmRlIGVuIG1lZGRlbGVsc2Ugb20sIGF0IGRlciBlciBtb2R0YWdldCBlbiBXQVAgUFVTSC1iZXNrZWQuIE9uZHNpbmRlZGUgYXBwcyBrYW4gYnJ1Z2UgZGV0dGUgdGlsIGF0IGZvcmZhbHNrZSBtb2R0YWdlbHNlIGFmIG1tcy1iZXNrZWRlciBlbGxlciBpIGRldCBza2p1bHRlIGVyc3RhdHRlIGluZGhvbGRldCBww6UgZW4gd2Vic2lkZSBtZWQgb25kc2luZGVkZSB2YXJpYW50ZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIHVkc2VuZGUgZW4gdW5kZXJyZXRuaW5nIG9tLCBhdCBkZXIgZXIgbW9kdGFnZXQgZW4gV0FQIFBVU0gtYmVza2VkLiBPbmRzaW5kZWRlIGFwcHMga2FuIGJydWdlIGRldHRlIHRpbCBhdCBzaW11bGVyZSBtb2R0YWdlbHNlIGFmIG1tcy1iZXNrZWRlciBlbGxlciBpIGRldCBza2p1bHRlIGVyc3RhdHRlIGluZGhvbGRldCBww6UgZW4gd2Vic2lkZSBtZWQgb25kc2luZGVkZSB2YXJpYW50ZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSIyNDUxODczNjY0MzYzNjYyNjY2Ij4iYmVncsOmbnMgYW50YWxsZXQgYWYga8O4cmVuZGUgcHJvY2Vzc2VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iNzMxODA2MTMxNDA0MDg3OTU0MiI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4ga29udHJvbGxlcmUgZGV0IG1ha3NpbWFsZSBhbnRhbCBrw7hyZW5kZSBwcm9jZXNzZXIuIERldHRlIGVyIGFsZHJpZyBuw7hkdmVuZGlndCB0aWwgbm9ybWFsZSBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNTUwOTU4NTA3Nzk4Nzk2OTY1Ij4idHZpbmdlIGJhZ2dydW5kc2FwcHMgdGlsIGF0IGx1a2tlIjwvc3RyaW5nPgpAQCAtMzQ4LDcgKzM1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maXJtX2Z1bGxfYmFja3VwIiBtc2dpZD0iMTc0ODc2MjE3MTYzNzY5OTU2MiI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gw6VibmUgYnJ1Z2VyZ3LDpm5zZWZsYWRlbiB0aWwgYmVrcsOmZnRlbHNlIGFmIGtvbXBsZXQgc2lra2VyaGVkc2tvcGllcmluZy4gTcOlIGlra2UgYW52ZW5kZXMgYWYgbm9nZW4gYXBwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSIyMTQ4NTYzNjI4MTQwMTkzMjMxIj4idmlzIHVhdXRvcmlzZXJlZGUgdmluZHVlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iNzQ1ODM4Nzc1OTQ2MTQ2NjM5NyI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gb3ByZXR0ZSB2aW5kdWVyLCBkZXIgZXIgYmVyZWduZXQgdGlsIGJydWdlcmdyw6Zuc2VmbGFkZW4gaSBkZXQgaW50ZXJuZSBzeXN0ZW0uIEFudmVuZGVzIGlra2UgYWYgbm9ybWFsZSBhcHBzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4idHLDpmtrZSBvdmVyIGFuZHJlIGFwcHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iMzU0MzM0Nzk4MDgzOTUxODYxMyI+Imlnbm9yZXJlIGFuZHJlIGFwcHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9Ijg1ODQ2NzgzODE5NzI4MjAxMTgiPiJUaWxsYWRlciwgYXQgYXBwZW4gdHLDpmtrZXMgb3ZlbiBww6UgYW5kcmUgYXBwbGlrYXRpb25lciBlbGxlciBkZWxlIGFmIGJydWdlcmdyw6Zuc2VmbGFkZW4uIERlIGthbiBmb3JzdHlycmUgZGluIGJydWcgYWYgZ3LDpm5zZWZsYWRlbiBpIGVuIGFwcGxpa2F0aW9uIGVsbGVyIMOmbmRyZSBkZXQsIGR1IHRyb3IsIGR1IHNlciBpIGFuZHJlIGFwcGxpa2F0aW9uZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiJyZWRpZ2VyIGdsb2JhbCBhbmltYXRpb25zaGFzdGlnaGVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4iVGlsbGFkZXIsIGF0IGFwcGVuIHRpbCBlbmh2ZXIgdGlkIGthbiDDpm5kcmUgZGVuIGdsb2JhbGUgYW5pbWF0aW9uc2hhc3RpZ2hlZCAoaHVydGlnZXJlIGVsbGVyIGxhbmdzb21tZXJlIGFuaW1hdGlvbmVyKS4iPC9zdHJpbmc+CkBAIC0zNjMsOCArMzY4LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iODM4Nzc1NDkwMTY4ODcyODA0MyI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gc2UgZGUgdGFzdGVyLCBzb20gZHUgdHJ5a2tlciBww6UsIHNlbHYgaSBlbiBhbmRlbiBhcHAgKHPDpXNvbSBpbmR0YXN0bmluZyBhZiBhZGdhbmdza29kZSkuIERldHRlIGLDuHIgYWxkcmlnIHbDpnJlIG7DuGR2ZW5kaWd0IGZvciBub3JtYWxlIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMzYwMDY0NjIwMjMwNTE1Nzc2Ij4iZm9ycGxpZ3QgdGlsIGVuIGlucHV0bWV0b2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzI1MDQ0MDMyMjgwNzI4NjMzMSI+IlRpbGxhZGVyLCBhdCBicnVnZXJlbiBrYW4gZm9ycGxpZ3RlciBzaWcgdGlsIGVuIGlucHV0bWV0b2RlcyBncsOmbnNlZmxhZGUgcMOlIMO4dmVyc3RlIG5pdmVhdS4gQsO4ciBhbGRyaWcgdsOmcmUgbsO4ZHZlbmRpZ3QgdGlsIGFsbWluZGVsaWdlIGFwcHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI1MzU3NzMzOTQyNTU2MDMxNTkzIj4iYmluZCBkaWcgdGlsIGVuIHRpbGfDpm5nZWxpZ2hlZHN0amVuZXN0ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjcwMzQ2MTU5Mjg2MDkzMzEzNjgiPiJUaWxsYWRlciwgYXQgYnJ1Z2VyZW4gYmluZGVyIHNpZyB0aWwgZW4gZ3LDpm5zZWZsYWRlIGZvciBlbiB0aWxnw6ZuZ2VsaWdoZWRzdGplbmVzdGUgcMOlIMO4dmVyc3RlIG5pdmVhdS4gQsO4ciBhbGRyaWcgdsOmcmUgbsO4ZHZlbmRpZ3QgdGlsIGFsbWluZGVsaWdlIGFwcHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI1MzU3NzMzOTQyNTU2MDMxNTkzIj4iYmluZGUgZGlnIHRpbCBlbiBoasOmbHBldGplbmVzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI3MDM0NjE1OTI4NjA5MzMxMzY4Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBiaW5kZSBzaWcgdGlsIGVuIGdyw6Zuc2VmbGFkZSBmb3IgZW4gaGrDpmxwZXRqZW5lc3RlIHDDpSDDuHZlcnN0ZSBuaXZlYXUuIELDuHIgYWxkcmlnIHbDpnJlIG7DuGR2ZW5kaWd0IHRpbCBhbG1pbmRlbGlnZSBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFByaW50U2VydmljZSIgbXNnaWQ9Ijg0NjI4MTUxNzk1NzI3NDg3NjEiPiJmb3JiaW5kZSB0aWwgZW4gdWRza3JpZnRzdGplbmVzdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+IlRpbGxhZGVyLCBhdCBicnVnZXJlbiBmb3JiaW5kZXIgdGlsIGdyw6Zuc2VmbGFkZW4gZm9yIGVuIHVkc2tyaWZ0c3RqZW5lc3RlIHDDpSDDuHZlcnN0ZSBuaXZlYXUuIERldHRlIGLDuHIgYWxkcmlnIHbDpnJlIG7DuGR2ZW5kaWd0IGZvciBhbG1pbmRlbGlnZSBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSI2ODA3NzYyNzgzNzQ0MTI1OTU0Ij4iZm9yYmluZGUgdGlsIGVuIHVkc2tyaWZ0c3Nwb29sZXJ0amVuZXN0ZSI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iVGlsbGFkZXIsIGF0IGJydWdlcmVuIGZvcnBsaWd0ZXIgc2lnIHRpbCBlbiBWUE4tdGplbmVzdGVzIGdyw6Zuc2VmbGFkZSBww6Ugw7h2ZXJzdGUgbml2ZWF1LiBCw7hyIGFsZHJpZyB2w6ZyZSBuw7hkdmVuZGlndCBpIGFsbWluZGVsaWdlIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ImZvcnBsaWd0IHRpbCBldCB0YXBldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iVGlsbGFkZXIsIGF0IGluZGVoYXZlcmVuIGthbiBiaW5kZSBlbiBiYWdncnVuZHMgZ3LDpm5zZWZsYWRlIHDDpSDDuHZlcnN0ZSBuaXZlYXUuIERldHRlIGLDuHIgYWxkcmlnIHbDpnJlIG7DuGR2ZW5kaWd0IGZvciBhbG1pbmRlbGlnZSBhcHBzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iYmluZCB0aWwgZW4gZWtzdGVybiBza8Omcm0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJUaWxsYWRlciwgYXQgYnJ1Z2VyZW4ga2FuIGZvcmV0YWdlIGVuIGJpbmRpbmcgdGlsIGdyw6Zuc2VmbGFkZW5zIMO4dmVyc3RlIG5pdmVhdSBww6UgZW4gZWtzdGVybiBza8Omcm0uIELDuHIgYWxkcmlnIHbDpnJlIG7DuGR2ZW5kaWd0IHRpbCBhbG1pbmRlbGlnZSBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ImZvcnBsaWd0IHRpbCBlbiB3aWRnZXR0amVuZXN0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJUaWxsYWRlciwgYXQgYnJ1Z2VyZW4ga2FuIGZvcnBsaWd0ZSBzaWcgdGlsIGVuIGdyw6Zuc2VmbGFkZSBmb3IgZW4gd2lkZ2V0dGplbmVzdGUgcMOlIMO4dmVyc3RlIG5pdmVhdS4gQsO4ciBhbGRyaWcgdsOmcmUgbsO4ZHZlbmRpZ3QgdGlsIGFsbWluZGVsaWdlIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4ia29tbXVuaWtlcmUgbWVkIGVuIGVuaGVkc2FkbWluaXN0cmF0b3IiPC9zdHJpbmc+CkBAIC00MzQsNyArNDQxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4ia8O4cmUgdmVkIG9wc3RhcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzM5MDMwNDY2NDExNjg4MDcwNCI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gc3RhcnRlIGFmIHNpZyBzZWx2LCBzw6Ugc25hcnQgc3lzdGVtZXQgZXIgZsOmcmRpZyBtZWQgYXQgc3RhcnRlLiBEZXR0ZSBrYW4gZ8O4cmUgdGFibGV0dGVucyBvcHN0YXJ0c3RpZCBsw6ZuZ2VyZSBvZyBnaXZlIGFwcGVuIHRpbGxhZGVsc2UgdGlsIGF0IGfDuHJlIHRhYmxldHRlbiBsYW5nc29tbWVyZSB2ZWQgYWx0aWQgYXQgbGFkZSBhcHBlbiBrw7hyZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUxMzk1MDU4OTEwMjYxNzUwNCI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gw6VibmUgc2lnIHNlbHYsIG7DpXIgc3lzdGVtZXQgZXIgZsOmcmRpZyBtZWQgYXQgc3RhcnRlIG9wLiBEZXR0ZSBrYW4gZ8O4cmUgb3BzdGFydGVuIGFmIHRlbGVmb25lbiBsYW5nc29tbWVyZSBvZyBnZW5lcmVsdCBnw7hyZSBzeXN0ZW1ldCBsYW5nc29tbWVyZSwgbsOlciBhcHBlbiBhbHRpZCBrw7hyZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTdGlja3kiIG1zZ2lkPSI3OTE5MTI2MzcyNjA2ODgxNjE0Ij4ic2VuZCBrbMOmYmVuZGUgdWRzZW5kZWxzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U3RpY2t5IiBtc2dpZD0iNzkxOTEyNjM3MjYwNjg4MTYxNCI+InNlbmRlIGtsw6ZiZW5kZSB1ZHNlbmRlbHNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3NzQ5NzYwNDk0Mzk5OTE1NjUxIj4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBzZW5kZSBrbMOmYmVuZGUgdWRzZW5kZWxzZXIsIGRlciBmb3JibGl2ZXIgdGlsYmFnZSwgbsOlciB1ZHNlbmRlbHNlbiBlciBzbHV0LiBPdmVyZHJldmVuIGJydWcga2FuIGfDuHJlIGRpbiB0YWJsZXQgbGFuZ3NvbSBlbGxlciB1c3RhYmlsIHZlZCBhdCB0dmluZ2UgZGVuIHRpbCBhdCBicnVnZSBmb3IgbWVnZXQgaHVrb21tZWxzZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBzZW5kZSBrbMOmYmVuZGUgdWRzZW5kZWxzZXIsIGRlciBmb3JibGl2ZXIgdGlsYmFnZSwgbsOlciB1ZHNlbmRlbHNlbiBlciBzbHV0LiBPdmVyZHJldmVuIGJydWcga2FuIGfDuHJlIGRpbiB0ZWxlZm9uIGxhbmdzb20gZWxsZXIgdXN0YWJpbCB2ZWQgYXQgdHZpbmdlIGRlbiB0aWwgYXQgYnJ1Z2UgZm9yIG1lZ2V0IGh1a29tbWVsc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ29udGFjdHMiIG1zZ2lkPSI4MzQ4NDgxMTMxODk5ODg2MTMxIj4ibMOmc2UgZGluZSBrb250YWt0cGVyc29uZXIiPC9zdHJpbmc+CkBAIC00NTcsNyArNDY0LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBmw6UgYWRnYW5nIHRpbCBvZyBzeW5rcm9uaXNlcmUgc29jaWFsZSBvcGRhdGVyaW5nZXIgZnJhIGRpZyBvZyBkaW5lIHZlbm5lci4gVsOmciBmb3JzaWd0aWcsIG7DpXIgZHUgZGVsZXIgb3BseXNuaW5nZXIg4oCTIG1lZCBkZW5uZSB0aWxsYWRlbHNlIGthbiBhcHBlbiBsw6ZzZSBrb21tdW5pa2F0aW9uIG1lbGxlbSBkaWcgb2cgZGluZSB2ZW5uZXIgcMOlIHNvY2lhbGUgbmV0dsOmcmssIHVhbnNldCBmb3J0cm9saWdoZWQuIEJlbcOmcmshIERlbm5lIHRpbGxhZGVsc2UgaMOlbmRow6Z2ZXMgbXVsaWd2aXMgaWtrZSBww6UgYWxsZSBzb2NpYWxlIG5ldHbDpnJrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTA0MTc5MjIyNDkzMjM1NjQ1Ij4ic2tyaXYgaSBkaW4gc29jaWFsZSBzdHLDuG0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwODY1NTc1NTIyMDQxMTQ4NDkiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIHZpc2Ugc29jaWFsZSBvcGRhdGVyaW5nZXIgZnJhIGRpbmUgdmVubmVyLiBWw6ZyIGZvcnNpZ3RpZywgbsOlciBkdSBkZWxlciBvcGx5c25pbmdlciDigJMgbWVkIGRlbm5lIHRpbGxhZGVsc2Uga2FuIGFwcGVuIHByb2R1Y2VyZSBtZWRkZWxlbHNlciwgZGVyIGthbiBzeW5lcyBhdCBrb21tZSBmcmEgZW4gdmVuLiBCZW3DpnJrISBEZW5uZSB0aWxsYWRlbHNlIGjDpW5kaMOmdmVzIG11bGlndmlzIGlra2UgcMOlIGFsbGUgc29jaWFsZSBuZXR2w6Zyay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxlbmRhciIgbXNnaWQ9IjU5NzI3Mjc1NjAyNTc2MTIzOTgiPiJsw6ZzIGthbGVuZGVyYmVnaXZlbmhlZGVyIHBsdXMgZm9ydHJvbGlnZSBvcGx5c25pbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGVuZGFyIiBtc2dpZD0iNTk3MjcyNzU2MDI1NzYxMjM5OCI+ImzDpnNlIGthbGVuZGVyYmVnaXZlbmhlZGVyIG9nIGZvcnRyb2xpZ2Ugb3BseXNuaW5nZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQyMTY0NjIwNDkwNTc2NTg3MjMiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIGzDpnNlIGFsbGUgZGUga2FsZW5kZXJiZWdpdmVuaGVkZXIsIGRlciBlciBnZW10IHDDpSBkaW4gdGFibGV0LCBmLmVrcy4gdmVubmVycyBlbGxlciBrb2xsZWdlcnMuIE1lZCBkZW5uZSB0aWxsYWRlbHNlIGthbiBhcHBlbiBkZWxlIGVsbGVyIGdlbW1lIGRpbmUga2FsZW5kZXJkYXRhLCB1YW5zZXQgZm9ydHJvbGlnaGVkIGVsbGVyIGbDuGxzb21oZWQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzQzNDU0ODY4MjQ3MDg1MTU4MyI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gbMOmc2UgYWxsZSBkZSBrYWxlbmRlcmJlZ2l2ZW5oZWRlciwgZGVyIGVyIGdlbXQgcMOlIGRpbiB0ZWxlZm9uLCBmLmVrcy4gdmVubmVycyBlbGxlciBrb2xsZWdlcnMuIE1lZCBkZW5uZSB0aWxsYWRlbHNlIGthbiBhcHBlbiBkZWxlIGVsbGVyIGdlbW1lIGRpbmUga2FsZW5kZXJkYXRhLCB1YW5zZXQgZm9ydHJvbGlnaGVkIGVsbGVyIGbDuGxzb21oZWQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+InRpbGbDuGplIGVsbGVyIMOmbmRyZSBrYWxlbmRlcmJlZ2l2ZW5oZWRlciBvZyBzZW5kZSBlLW1haWwgdGlsIGfDpnN0ZXIgdWRlbiBlamVyZW5zIHZpZGVuIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIGJydWdlIFN1cmZhY2VGbGluZ2VyLWZ1bmt0aW9uZXIgcMOlIGxhdnQgbml2ZWF1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImzDpnMgcmFtbWVidWZmZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBsw6ZzZSBpbmRob2xkZXQgZnJhIHJhbW1lYnVmZmVyZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iZsOlIGFkZ2FuZyB0aWwgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkdpdmVyIGFwcGVuIHRpbGxhZGVsc2UgdGlsIGF0IGJydWdlIFN1cmZhY2VGbGluZ2VyLWZ1bmt0aW9uZXIgcMOlIGxhdnQgbml2ZWF1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ia29uZmlndXJlciBXaS1GaS1za8Omcm1lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGtvbmZpZ3VyZXJlciBvZyBvcHJldHRlciBmb3JiaW5kZWxzZSB0aWwgV2ktRmktc2vDpnJtZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ImtvbnRyb2xsw6lyIFdpLUZpLXNrw6ZybWUiPC9zdHJpbmc+CkBAIC00OTUsNyArNTA0LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiDDpm5kcmUgZ2xvYmFsZSBseWRpbmRzdGlsbGluZ2VyLCBzb20gZi5la3MuIGx5ZHN0eXJrZSBvZyBodmlsa2VuIGjDuGp0dGFsZXIgZGVyIGJydWdlcyB0aWwgb3V0cHV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4ib3B0YWdlIGx5ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gb3B0YWdlIGx5ZCBtZWQgbWlrcm9mb25lbi4gTWVkIGRlbm5lIHRpbGxhZGVsc2Uga2FuIGFwcGVuIHRpbCBlbmh2ZXIgdGlkIG9wdGFnZSBseWQgdWRlbiBkaW4gYmVrcsOmZnRlbHNlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+InRhZyBiaWxsZWRlciBvZyBvcHRhZyB2aWRlbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4iU0lNLWtvbW11bmlrYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJUaWxsYWRlciwgYXQgYXBwZW4gc2VuZGVyIGtvbW1hbmRvZXIgdGlsIFNJTS1rb3J0ZXQuIERldHRlIGVyIG1lZ2V0IGZhcmxpZ3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4idGFnZSBiaWxsZWRlciBvZyBvcHRhZ2UgdmlkZW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiB0YWdlIGJpbGxlZGVyIG9nIHZpZGVvZXIgbWVkIGthbWVyYWV0LiBNZWQgZGVubmUgdGlsbGFkZWxzZSBrYW4gYXBwZW4gdGlsIGVuaHZlciB0aWQgYnJ1Z2Uga2FtZXJhZXQgdWRlbiBkaW4gYmVrcsOmZnRlbHNlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImRlYWt0aXZlciBzZW5kZWx5c2Rpb2RlbiwgbsOlciBrYW1lcmFldCBlciBpIGJydWciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4iVGlsbGFkZXIsIGF0IGVuIGZvcnVkaW5zdGFsbGVyZXQgc3lzdGVtYXBwbGlrYXRpb27CoGRlYWt0aXZlcmVyIGx5c2Rpb2RlbiBmb3IgYnJ1ZyBhZiBrYW1lcmFldC4iPC9zdHJpbmc+CkBAIC01MzMsMTUgKzU0NCwxNSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTXRwIiBtc2dpZD0iNjUzMjk2MTIwMDQ4Njc5MTU3MCI+IlRpbGxhZGVyIGFkZ2FuZyB0aWwga2VybmUtTVRQLWRyaXZlcmVuIGZvciBhdCBpbXBsZW1lbnRlcmUgTVRCIFVTQi1wcm90b2tvbGxlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI0MTQ4MjkwODYwNDAwNjU5MTQ2Ij4idGVzdCBoYXJkd2FyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI2NTk3OTY0MTkxMjA4MDE2NjA1Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBrb250cm9sbGVyZSBmb3Jza2VsbGlnZSBwZXJpZmVyZSBlbmhlZGVyIHRpbCBhdCB0ZXN0ZSBoYXJkd2FyZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4icmluZyBkaXJla3RlIG9wIHRpbCB0ZWxlZm9ubnVtcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJyaW5nZSBkaXJla3RlIG9wIHRpbCB0ZWxlZm9ubnVtcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiByaW5nZSB0aWwgdGVsZWZvbm51bXJlIHVkZW4gZGluIGluZGdyaWJlbi4gRGV0dGUga2FuIHJlc3VsdGVyZSBpIHV2ZW50ZWRlIG9wa3LDpnZuaW5nZXIgZWxsZXIgb3BrYWxkLiBCZW3DpnJrLCBhdCBhcHBlbiBtZWQgZGVubmUgdGlsbGFkZWxzZSBpa2tlIGthbiByaW5nZSB0aWwgbsO4ZG9wa2FsZHNudW1yZS4gU2thZGVsaWdlIGFwcHMga2FuIGtvc3RlIGRpZyBwZW5nZSB2ZWQgYXQgZm9yZXRhZ2Ugb3BrYWxkIHVkZW4gZGluIGJla3LDpmZ0ZWxzZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+InJpbmcgZGlyZWt0ZSBvcCB0aWwgYWxsZSB0ZWxlZm9ubnVtcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+InJpbmdlIGRpcmVrdGUgb3AgdGlsIGFsbGUgdGVsZWZvbm51bXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSIxNjg5MDI0OTAxNTA5OTk2ODEwIj4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiByaW5nZSB0aWwgZXQgaHZpbGtldCBzb20gaGVsc3QgbnVtbWVyLCBibC5hLiBuw7hkb3BrYWxkIHVkZW4gZGluIGluZGdyaWJlbi4gT25kc2luZGVkZSBhcHBzIGthbiBmb3JldGFnZSB1bsO4ZHZlbmRpZ2Ugb2cgdWxvdmxpZ2Ugb3BrYWxkIHRpbCBuw7hkdGplbmVzdGVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ4NDI1NzY5OTQxNDQ2MDQ4MjEiPiJzdGFydCBDRE1BLW9wc8OmdG5pbmcgYWYgdGFibGV0Y29tcHV0ZXJlbiBkaXJla3RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiJzdGFydCBDRE1BLXRlbGVmb25vcHPDpnRuaW5nIGRpcmVrdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgbXNnaWQ9IjE5OTQxOTM1Mzg4MDIzMTQxODYiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIHN0YXJ0ZSBDRE1BLWxldmVyaW5nLiBPbmRzaW5kZWRlIGFwcHMga2FuIHN0YXJ0ZSB1bsO4ZHZlbmRpZyBDRE1BLWxldmVyaW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+ImtvbnRyb2xsZXIgbWVkZGVsZWxzZXIgb20gcGxhY2VyaW5nc29wZGF0ZXJpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBha3RpdmVyZS9kZWFrdGl2ZXJlIG1lZGRlbGVsc2VyIG9tIHBsYWNlcmluZ3NvcGRhdGVyaW5nIGZyYSBzZW5kZXJlbi4gQW52ZW5kZXMgaWtrZSBpIGFsbWluZGVsaWdlIGFwcHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSI3Nzg1NDA4MjUzMzY0MzM1NzQwIj4ia29udHJvbGxlciB1bmRlcnJldG5pbmdlciBvbSBwbGFjZXJpbmdzb3BkYXRlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9IjExMjA3NDE1NTc4OTE0Mzg4NzYiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIGFrdGl2ZXJlL2RlYWt0aXZlcmUgdW5kZXJyZXRuaW5nZXIgb20gcGxhY2VyaW5nc29wZGF0ZXJpbmcgZnJhIHNlbmRlcmVuLiBBbnZlbmRlcyBpa2tlIGkgYWxtaW5kZWxpZ2UgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+ImVnZW5za2FiZXIgZm9yIGFkZ2FuZ3Nrb250cm9sIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI0MDI0NTI2OTY4NjMwMTk0MTI4Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBmw6UgbMOmc2Uvc2tyaXZlLWFkZ2FuZyB0aWwgZWdlbnNrYWJlciwgZGVyIGVyIHVwbG9hZGV0IGFmIGtvbnRyb2x0amVuZXN0ZW4uIEFudmVuZGVzIGlra2UgYWYgYWxtaW5kZWxpZ2UgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiJ2w6ZsZyB3aWRnZXRzIjwvc3RyaW5nPgpAQCAtNTUwLDcgKzU2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gc3R5cmUgZW5oZWRlbnMgdGVsZWZvbmZ1bmt0aW9uZXIuIEVuIGFwcCBtZWQgZGVubmUgdGlsbGFkZWxzZSBrYW4gc2tpZnRlIG5ldHbDpnJrLCBzbMOlIHRlbGVmb25zZW5kZXJlbiB0aWwgb2cgZnJhIG9nIGxpZ25lbmRlIHVkZW4gYXQgdW5kZXJyZXR0ZSBkaWcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjkxNzgyMjg1MjQ1MDc2MTA0ODYiPiJsw6ZzZSB0ZWxlZm9uZW5zIHN0YXR1cyBvZyBpZGVudGl0ZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjE2MzkyMTI3NzE4MjYxMjU1MjgiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIGbDpSBhZGdhbmcgdGlsIHRlbGVmb25mdW5rdGlvbmVybmUgcMOlIGVuaGVkZW4uIE1lZCBkZW5uZSB0aWxsYWRlbHNlIGthbiBhcHBlbiBmYXN0c2zDpSB0ZWxlZm9ubnVtbWVyZXQgb2cgZW5oZWRzLWlkXCdlcm5lLCBodm9ydmlkdCBldCBvcGthbGQgZXIgYWt0aXZ0IHNhbXQgZGV0IGVrc3Rlcm5lIG51bW1lciwgZGVyIG9wcmV0dGVzIGZvcmJpbmRlbHNlIHRpbCB2aWEgZXQgb3BrYWxkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiJhZmhvbGQgdGFibGV0Y29tcHV0ZXJlbiBmcmEgYXQgZ8OlIGkgZHZhbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTMxNzMxNDM1MDExNDk1MDE1Ij4iYWZob2xkZSB0YWJsZXRjb21wdXRlcmVuIGZyYSBhdCBnw6UgaSBkdmFsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiJhZmhvbGRlIHRlbGVmb25lbiBmcmEgYXQgZ8OlIGkgZHZhbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gZm9yaGluZHJlIHRhYmxldHRlbiBpIGF0IGfDpSBpIGR2YWxlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODU1OTEwMDY3NzM3MjkyODc1NCI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gZm9yaGluZHJlLCBhdCB0ZWxlZm9uZW4gZ8OlciBpIGR2YWxlLiI8L3N0cmluZz4KQEAgLTY3OSwxMSArNjkwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2F0Y2hMb2dpbiIgbXNnaWQ9IjkxNDEzMDY0Njk0MjE5OTUwMyI+Ik92ZXJ2w6VnIGZvcnPDuGcgcMOlIG9wbMOlc25pbmcgYWYgc2vDpnJtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjE1NzI5Mjk0MjE1MDcwMDcyIj4iT3ZlcnbDpWcgYW50YWxsZXQgYWYgZm9ya2VydCBpbmR0YXN0ZWRlIGFkZ2FuZ3Nrb2RlciwgbsOlciBkdSBsw6VzZXIgc2vDpnJtZW4gb3AsIG9nIGzDpXMgZGluIHRhYmxldCwgZWxsZXIgc2xldCBhbGxlIGRhdGEgaSBkZW4sIGh2aXMgZGVyIGVyIGluZHRhc3RldCBmb3IgbWFuZ2UgZm9ya2VydGUgYWRnYW5nc2tvZGVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiJPdmVydsOlZyBhbnRhbGxldCBhZiBmb3JrZXJ0ZSBhZGdhbmdza29kZXIgdmVkIG9wbMOlc25pbmcgYWYgc2vDpnJtZW4sIG9nIGzDpXMgdGVsZWZvbmVuIGVsbGVyIHNsZXQgYWxsZSBkYXRhIHDDpSB0ZWxlZm9uZW4sIGh2aXMgZGVyIGVyIGluZHRhc3RldCBmb3IgbWFuZ2UgZm9ya2VydGUgYWRnYW5nc2tvZGVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+IlNraWZ0IGFkZ2FuZ3Nrb2RlIHRpbCBvcGzDpXNuaW5nIGFmIHNrw6ZybSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjYwNTk2Mzk2MjMwMTkwNDQ1OCI+IlNraWZ0IGFkZ2FuZ3Nrb2RlIHRpbCBvcGzDpXNuaW5nIGFmIHNrw6ZybWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+IlNraWZ0ZSBhZGdhbmdza29kZSB0aWwgb3Bsw6VzbmluZyBhZiBza8Omcm0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiJTa2lmdGVyIGFkZ2FuZ3Nrb2RlIHRpbCBvcGzDpXNuaW5nIGFmIHNrw6ZybWVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9mb3JjZUxvY2siIG1zZ2lkPSIyMjc0MDg1Mzg0NzA0MjQ4NDMxIj4iTMOlcyBza8Omcm1lbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZm9yY2VMb2NrIiBtc2dpZD0iMTE0MTc5NzU4ODQwMzgyNzEzOCI+IktvbnRyb2xsZXIsIGh2b3JkYW4gb2cgaHZvcm7DpXIgc2vDpnJtZW4gbMOlc2VzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93aXBlRGF0YSIgbXNnaWQ9IjM5MTA1NDU0NDY3NTg2Mzk3MTMiPiJTbGV0IGFsbGUgZGF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZm9yY2VMb2NrIiBtc2dpZD0iMTE0MTc5NzU4ODQwMzgyNzEzOCI+IktvbnRyb2xsZXJlciwgaHZvcmRhbiBvZyBodm9ybsOlciBza8Omcm1lbiBsw6VzZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dpcGVEYXRhIiBtc2dpZD0iMzkxMDU0NTQ0Njc1ODYzOTcxMyI+IlNsZXR0ZSBhbGxlIGRhdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzA2MTg0MDk2MDY3NzU2ODc2Ij4iU2xldCBkaW4gdGFibGV0cyBkYXRhIHVkZW4gdmFyc2VsIHZlZCBhdCBnZW5kYW5uZSBmYWJyaWtzaW5kc3RpbGxpbmdlcm5lLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGEiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MDk2ODk1NjA0NTc0MTg4MzkxIj4iU2xldCB0ZWxlZm9uZW5zIGRhdGEgdWRlbiB2YXJzZWwgdmVkIGF0IGdlbmRhbm5lIGZhYnJpa3NpbmRzdGlsbGluZ2VybmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iMjc4NDgyODI5Mzc0Nzc5MTQ0NiI+IkFuZ2l2IGVuaGVkZW5zIGdsb2JhbGUgcHJveHkiPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiJIamVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IkFyYmVqZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IkFuZGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IkRlciBibGV2IGlra2UgZnVuZGV0IG5vZ2VuIGFwcGxpa2F0aW9uLCBzb20ga2FuIHZpc2UgZGVubmUga29udGFrdHBlcnNvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJbmR0YXN0IHBpbmtvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJJbmR0YXN0IFBVSy0gb2cgcGlua29kZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLWtvZGUiPC9zdHJpbmc+CkBAIC0xMTE0LDggKzExMjYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9hZGluZyIgbXNnaWQ9Ijc5MzM2ODEyNjAyOTYwMjExODAiPiJJbmRsw6ZzZXLigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29uIiBtc2dpZD0iMTU0NDY4Mjc1NTUxNDQ5NDI5OCI+IlRJTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb2ZmIiBtc2dpZD0iNjgxNTg3MDM4Njk3MjgwNTgzMiI+IkZSQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4iRnVsZGbDuHIgaGFuZGxpbmcgdmVkIGhqw6ZscCBhZiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndoaWNoSG9tZUFwcGxpY2F0aW9uIiBtc2dpZD0iNDYxNjQyMDE3MjcyNzMyNjc4MiI+IlbDpmxnIGVuIHN0YXJ0c2lkZWFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4iQnJ1ZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndoaWNoSG9tZUFwcGxpY2F0aW9uIiBtc2dpZD0iNDYxNjQyMDE3MjcyNzMyNjc4MiI+IlbDpmxnIGVuIHN0YXJ0YXBwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IkJydWcgc29tIHN0YW5kYXJkIHRpbCBkZW5uZSBoYW5kbGluZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhckRlZmF1bHRIaW50TXNnIiBtc2dpZD0iMzI1MjU4NDY4OTUxMjA3NzI1NyI+IlJ5ZCBzdGFuZGFyZCBpIFN5c3RlbWluZHN0aWxsaW5nZXIgJmd0OyBBcHBzICZndDsgRG93bmxvYWRldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiJWw6ZsZyBlbiBoYW5kbGluZyI8L3N0cmluZz4KQEAgLTEyMzQsMjAgKzEyNDYsMjAgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+IlVTQiBlciB0aWxzbHV0dGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMzA4NTM4MDk0MzE2NDc3ODM5Ij4iRHUgaGFyIGbDpWV0IGZvcmJpbmRlbHNlIHRpbCBkaW4gY29tcHV0ZXIgdmlhIFVTQi4gVHJ5ayBww6Uga25hcHBlbiBuZWRlbmZvciwgaHZpcyBkdSB2aWwga29waWVyZSBmaWxlciBtZWxsZW0gZGluIGNvbXB1dGVyIG9nIGRpbiBBbmRyb2lkcyBVU0ItbGFnZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNTM1MTAwMDQ0NjAzNzgxMSI+IkR1IGhhciBmw6VldCBmb3JiaW5kZWxzZSB0aWwgZGluIGNvbXB1dGVyIHZpYSBVU0IuIFRyeWsgcMOlIGtuYXBwZW4gbmVkZW5mb3IsIGh2aXMgZHUgdmlsIGtvcGllcmUgZmlsZXIgbWVsbGVtIGRpbiBjb21wdXRlciBvZyBkaW4gQW5kcm9pZHMgU0Qta29ydC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9idXR0b25fbW91bnQiIG1zZ2lkPSIxMDUyMjU5OTMwMzY5NTA4MjM1Ij4iU2zDpSBVU0ItbGFncmluZyB0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9idXR0b25fbW91bnQiIG1zZ2lkPSIxMDUyMjU5OTMwMzY5NTA4MjM1Ij4iU2zDpSBVU0ItbGFnZXIgdGlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMDE3MDQ1MjE3MzY1NTQwNjU4Ij4iRGVyIGVyIGV0IHByb2JsZW0gbWVkIGF0IGJydWdlIGRpdCBVU0ItbGFnZXIgc29tIFVTQi1tYXNzZWxhZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4iRGVyIGVyIGV0IHByb2JsZW0gbWVkIGF0IGJydWdlIGRpdCBTRC1rb3J0IHNvbSBVU0ItbWFzc2VsYWdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4MTc1ODkyNTU0NzU3MjE2NTI1Ij4iVVNCIGVyIHRpbHNsdXR0ZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkzOTgyMjc4MzgyODE4Mzc2MyI+IlRyeWsgZm9yIGF0IGtvcGllcmUgZmlsZXIgdGlsL2ZyYSBkaW4gY29tcHV0ZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzM2MDU4Mzk2NjYzNTE2MDE3Ij4iU2zDpSBVU0ItbGFncmluZ2VuIGZyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4iVHJ5ayBmb3IgYXQgc2zDpSBVU0ItbGFncmluZyBmcmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2NTY4NTIwOTg1NTU2MjM4MjIiPiJUcnlrIGZvciBhdCBzbMOlIFVTQi1sYWdlciBmcmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF90aXRsZSIgbXNnaWQ9IjY2MDEyOTg1MTcwODc3NTg1MyI+IlVTQi1sYWdlciBpIGJydWciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IkbDuHIgZHUgc2zDpXIgVVNCLWxhZ3JpbmcgZnJhLCBza2FsIGR1IGRlbW9udGVyZSBkaW4gQW5kcm9pZHMgVVNCLWxhZ2VyIChcInNrdWJiZSBlbmhlZGVuIHVkXCIpIGZyYSBkaW4gY29tcHV0ZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IkbDuHIgZHUgc2zDpXIgVVNCLWxhZ3JpbmcgZnJhLCBza2FsIGR1IGRlbW9udGVyZSBkaW4gQW5kcm9pZHMgU0Qta29ydCAoXCJza3ViYmUgZW5oZWRlbiB1ZFwiKSBmcmEgZGluIGNvbXB1dGVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfYnV0dG9uX21vdW50IiBtc2dpZD0iNzA2MDIxODAzNDkwMDY5NjAyOSI+IlNsw6UgVVNCLWxhZ3JpbmcgZnJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+IkRlciBvcHN0b2QgZXQgcHJvYmxlbSBtZWQgYXQgc2zDpSBVU0ItbGFncmluZyBmcmEuIEtvbnRyb2xsZXIsIGF0IGR1IGhhciBkZW1vbnRlcmV0IFVTQi12w6ZydGVuLCBvZyBwcsO4diBkZXJlZnRlciBpZ2VuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+IlNsw6UgVVNCLWxhZ3JpbmcgdGlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4iSHZpcyBkdSBzbMOlciBVU0ItbGFncmluZyB0aWwsIHN0b3BwZXMgbm9nbGUgYWYgZGUgYXBwcywgc29tIGR1IGJydWdlciwgb2cgZGUga2FuIHbDpnJlIHV0aWxnw6ZuZ2VsaWdlLCBpbmR0aWwgZHUgc2zDpXIgVVNCLWxhZ3JpbmcgZnJhIGlnZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiJGw7hyIGR1IHNsw6VyIFVTQi1sYWdlciBmcmEsIHNrYWwgZHUgZGVtb250ZXJlIGRpbiBBbmRyb2lkcyBVU0ItbGFnZXIgKFwic2t1YmJlIGVuaGVkZW4gdWRcIikgZnJhIGRpbiBjb21wdXRlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4iRsO4ciBkdSBzbMOlciBVU0ItbGFnZXIgZnJhLCBza2FsIGR1IGRlbW9udGVyZSBkaW4gQW5kcm9pZHMgU0Qta29ydCAoXCJza3ViYmUgZW5oZWRlbiB1ZFwiKSBmcmEgZGluIGNvbXB1dGVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfYnV0dG9uX21vdW50IiBtc2dpZD0iNzA2MDIxODAzNDkwMDY5NjAyOSI+IlNsw6UgVVNCLWxhZ2VyIGZyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiJEZXIgb3BzdG9kIGV0IHByb2JsZW0gbWVkIGF0IHNsw6UgVVNCLWxhZ2VyIGZyYS4gS29udHJvbGxlciwgYXQgZHUgaGFyIGRlbW9udGVyZXQgVVNCLXbDpnJ0ZW4sIG9nIHByw7h2IGRlcmVmdGVyIGlnZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RpdGxlIiBtc2dpZD0iOTYzMDM5MDMzNDcwNDc4Njk3Ij4iU2zDpSBVU0ItbGFnZXIgdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4iSHZpcyBkdSBzbMOlciBVU0ItbGFnZXIgdGlsLCBzdG9wcGVzIG5vZ2xlIGFmIGRlIGFwcHMsIHNvbSBkdSBicnVnZXIsIG9nIGRlIGthbiB2w6ZyZSB1dGlsZ8OmbmdlbGlnZSwgaW5kdGlsIGR1IHNsw6VyIFVTQi1sYWdlciBmcmEgaWdlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkbGdfZXJyb3JfdGl0bGUiIG1zZ2lkPSI3MzIzNjU4NDY5NjI2NTE0MjA3Ij4iVVNCLWhhbmRsaW5nZW4gbWlzbHlra2VkZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4iT0siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiJUaWxzbHV0dGV0IHNvbSBlbiBtZWRpZWVuaGVkIjwvc3RyaW5nPgpAQCAtMTMyNSw3ICsxMzM3LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fd2l0aF9zdWJ0aXRsZSIgbXNnaWQ9Ijg1MzAzOTMxMzk2Mzk1NjAxODkiPiJEZXIgZXIgYW5tb2RldCBvbSB0aWxsYWRlbHNlXG5mb3Iga29udG9lbiA8eGxpZmY6ZyBpZD0iQUNDT1VOVCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImlucHV0X21ldGhvZF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTI4MzU1NzE3OTk0NDk5MjY0OSI+IklucHV0bWV0b2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IlN5bmtyb25pc2VyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iNDE0ODEyMDc0MjA5NjQ3NDY0MSI+IlRpbGfDpm5nZWxpZ2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjQxNDgxMjA3NDIwOTY0NzQ2NDEiPiJIasOmbHBlZnVua3Rpb25lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndhbGxwYXBlcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTI0MDA4Nzg0NDMwNDY4NzY2MiI+IlRhcGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iU2tpZnQgdGFwZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJVbmRlcnJldG5pbmdzbHl0dGVyIjwvc3RyaW5nPgpAQCAtMTM2Myw3ICsxMzc1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4iRGVtb250ZXJlciBTRC1rb3J0ZXQuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJTbGV0dGVyIFVTQi1sYWdlcmV0Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1OTY5ODg4NzU1MDcwNDMwNDIiPiJTbGV0dGVyIFNELWtvcnRldC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4iS3VubmUgaWtrZSBzbGV0dGUgVVNCLWxhZ3JpbmcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiJLdW5uZSBpa2tlIHNsZXR0ZSBVU0ItbGFnZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+Ikt1bm5lIGlra2Ugc2xldHRlIFNELWtvcnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4iU0Qta29ydGV0IGJsZXYgZmplcm5ldCwgZsO4ciBkZXQgYmxldiBkZW1vbnRlcmV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IlVTQi1sYWdlciBibGl2ZXIga29udHJvbGxlcmV0LiI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iQW5naXYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJWw6ZsZyBlbiBhcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IGt1bm5lIGlra2Ugc3RhcnRlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkRlbCBtZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iRGVsIG1lZCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IkdsaWRlbmRlIGjDpW5kdGFnLiBUcnlrIG9nIGhvbGQgbmVkZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iR2xpZCBvcCBmb3IgYXQgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkdsaWQgbmVkIGZvciBhdCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iR2xpZCB0aWwgdmVuc3RyZSBmb3IgYXQgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJHbGlkIHRpbCBow7hqcmUgZm9yIGF0IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkzDpXMgb3AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+Ikx5ZGzDuHMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iTHlkIHNsw6VldCB0aWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlPDuGduaW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iR2xpZCBodXJ0aWd0IGhlbm92ZXIgZm9yIGF0IGzDpXNlIG9wLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJUaWxzbHV0IGV0IGhlYWRzZXQgZm9yIGF0IGjDuHJlIHRhc3Rlcm5lIGJsaXZlIGzDpnN0IGjDuGp0IHZlZCBhbmdpdmVsc2UgYWYgYWRnYW5nc2tvZGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUHVua3R1bS4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTeXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aC1seWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlRyw6VkbMO4cyBza8Omcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iVWRmw7hyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iTWVkaWV1ZGdhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+Ik9wcmV0IGZvcmJpbmRlbHNlIHRpbCBlbmhlZGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iU2VuZCBza8Omcm0gdGlsIGVuaGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iU8O4Z2VyIGVmdGVyIGVuaGVkZXLigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJJbmRzdGlsbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkFmYnJ5ZCBmb3JiaW5kZWxzZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iU8O4Z2VyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iT3ByZXR0ZXIgZm9yYmluZGVsc2UuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IlRpbGfDpm5nZWxpZyI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Ik92ZXJsZWpyaW5nIG5yLiA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzaWtrZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkRlciBlciB0aWxzbHV0dGV0IGVuIHRyw6VkbMO4cyBza8Omcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iRGVubmUgc2vDpnJtIHZpc2VzIHDDpSBlbiBhbmRlbiBlbmhlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJTa8Omcm0gc2VuZGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iRGVyIG9wcmV0dGVzIGZvcmJpbmRlbHNlIHRpbCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJTa8Omcm0gc2VuZGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJGb3JidW5kZXQgdGlsIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJBZmJyeWQgZm9yYmluZGVsc2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJOw7hkb3BrYWxkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iR2xlbXQgbcO4bnN0ZXIiPC9zdHJpbmc+CkBAIC0xNTM3LDkgKzE1NDcsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCTICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iRmplcm4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlX21lZGlhX3ZvbHVtZV93YXJuaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMyNDE2MTkzOTQ3NTQ3ODA2NiI+IlNrYWwgbHlkc3R5cmtlbiB2w6ZyZSBvdmVyIGRldCBhbmJlZmFsZWRlIG5pdmVhdT9cbkR1IGthbiBza2FkZSBkaW4gaMO4cmVsc2UgdmVkIGF0IGx5dHRlIHZlZCBow7hqIGx5ZHN0eXJrZSBpIGzDpm5nZXJlIHRpZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250aW51ZV90b19lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE2MjY0MjczNzIzMTYwNzAyNTgiPiJIb2xkIGZvcnRzYXQgdG8gZmluZ3JlIG5lZGUgZm9yIGF0IGFrdGl2ZXJlIHRpbGfDpm5nZWxpZ2hlZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2VuYWJsZWQiIG1zZ2lkPSIxMzgxOTcyMDQ4NTY0NTQ3Njg1Ij4iVGlsZ8OmbmdlbGlnaGVkIGFrdGl2ZXJldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYWNjZXNzaWJpbGl0eV9jYW5jZWxlZCIgbXNnaWQ9IjM4MzM5MjMyNTc5NjY2MzU2NzMiPiJUaWxnw6ZuZ2VsaWdoZWQgZXIgYW5udWxsZXJldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250aW51ZV90b19lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE2MjY0MjczNzIzMTYwNzAyNTgiPiJCbGl2IHZlZCBtZWQgYXQgaG9sZGUgdG8gZmluZ3JlIG5lZGUgZm9yIGF0IGFrdGl2ZXJlIGhqw6ZscGVmdW5rdGlvbmVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZW5hYmxlZCIgbXNnaWQ9IjEzODE5NzIwNDg1NjQ1NDc2ODUiPiJIasOmbHBlZnVua3Rpb25lciBlciBha3RpdmVyZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2FjY2Vzc2liaWxpdHlfY2FuY2VsZWQiIG1zZ2lkPSIzODMzOTIzMjU3OTY2NjM1NjczIj4iSGrDpmxwZWZ1bmt0aW9uZXIgZXIgYW5udWxsZXJldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+Ik51dsOmcmVuZGUgYnJ1Z2VyIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvd25lcl9uYW1lIiBtc2dpZD0iMjcxNjc1NTQ2MDM3NjAyODE1NCI+IkVqZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IkZlamwiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlByw7h2IGlnZW4gc2VuZXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlN0cnlnIG5lZCBmcmEgdG9wcGVuIGZvciBhdCBhZnNsdXR0ZSBmdWxkIHNrw6ZybSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iVWRmw7hyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iQ2lya3Vsw6ZyIHRpbWV2w6ZsZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJDaXJrdWzDpnIgbWludXR2w6ZsZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlbDpmxnIHRpbWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iVsOmbGcgbWludXR0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+Ik3DpW5lZHNnaXR0ZXIgbWVkIGRhZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJMaXN0ZSBvdmVyIMOlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iVsOmbGcgbcOlbmVkIG9nIGRhZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlbDpmxnIMOlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gZXIgdmFsZ3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBlciBzbGV0dGV0Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAppbmRleCBmNzk5YmU0Li4zZjVkNjE4IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IkdlYmVuIFNpZSBlaW5lIG1pbmRlc3RlbnMgYWNodHN0ZWxsaWdlIFBVSyBlaW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IklocmUgU0lNLUthcnRlIGlzdCBtaXQgZWluZW0gUFVLIGdlc3BlcnJ0LiBHZWJlbiBTaWUgenVtIEVudHNwZXJyZW4gZGVuIFBVSy1Db2RlIGVpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJHZWJlbiBTaWUgenVtIEVudHNwZXJyZW4gZGVyIFNJTS1LYXJ0ZSBkZW4gUFVLMiBlaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iRmVobGVyLiBTSU0tL1JVSU0tU3BlcnJlIGFrdGl2aWVyZW4uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iU2llIGhhYmVuIG5vY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IFZlcnN1Y2gsIGJldm9yIElocmUgU0lNLUthcnRlIGdlc3BlcnJ0IHdpcmQuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iU2llIGhhYmVuIG5vY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IFZlcnN1Y2hlLCBiZXZvciBJaHJlIFNJTS1LYXJ0ZSBnZXNwZXJydCB3aXJkLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iQW5ydWZlci1JRCBmw7xyIGVpbmdlaGVuZGVuIEFucnVmIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJFcm3DtmdsaWNodCBkZW0gSGFsdGVyLCBzaWNoIGFuIGRpZSBPYmVyZmzDpGNoZSBlaW5lcyBWUE4tRGllbnN0ZXMgYXVmIG9iZXJzdGVyIEViZW5lIHp1IGJpbmRlbi4gU29sbHRlIG5pZSBmw7xyIG5vcm1hbGUgQXBwcyBiZW7DtnRpZ3Qgd2VyZGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJBbiBlaW5lbiBIaW50ZXJncnVuZCBiaW5kZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkVybcO2Z2xpY2h0IGRlbSBIYWx0ZXIsIHNpY2ggYW4gZGllIE9iZXJmbMOkY2hlIGVpbmVzIEhpbnRlcmdydW5kcyBhdWYgb2JlcnN0ZXIgRWJlbmUgenUgYmluZGVuLiBTb2xsdGUgbmllIGbDvHIgbm9ybWFsZSBBcHBzIGJlbsO2dGlndCB3ZXJkZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJBbiBSZW1vdGUtRGlzcGxheSBiaW5kZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJFcm3DtmdsaWNodCBkZW0gSGFsdGVyLCBzaWNoIGFuIGRpZSBPYmVyZmzDpGNoZSBlaW5lcyBSZW1vdGUtRGlzcGxheXMgYXVmIG9iZXJzdGVyIEViZW5lIHp1IGJpbmRlbi4gU29sbHRlIGbDvHIgbm9ybWFsZSBBcHBzIG5pZSBiZW7DtnRpZ3Qgd2VyZGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IkFuIGVpbmVuIFdpZGdldC1EaWVuc3QgYmluZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkVybcO2Z2xpY2h0IGRlbSBIYWx0ZXIsIHNpY2ggYW4gZGllIE9iZXJmbMOkY2hlIGVpbmVzIFdpZGdldC1EaWVuc3RlcyBhdWYgb2JlcnN0ZXIgRWJlbmUgenUgYmluZGVuLiBTb2xsdGUgbmllIGbDvHIgbm9ybWFsZSBBcHBzIGJlbsO2dGlndCB3ZXJkZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iSW50ZXJha3Rpb24gbWl0IGVpbmVtIEdlcsOkdGVhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgpAQCAtNDQ5LDkgKzQ1Niw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsbExvZyIgbXNnaWQ9Ijg1NTIwNDU2NjQ3NDM0OTkzNTQiPiJBbnJ1Zmxpc3RlIGJlYXJiZWl0ZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NjE4MDYwNjIyNzQxMTkyNDUiPiJFcm3DtmdsaWNodCBkZXIgQXBwLCBkaWUgQW5ydWZsaXN0ZSBJaHJlcyBUYWJsZXRzIHp1IMOkbmRlcm4sIGVpbnNjaGxpZcOfbGljaCBkZXIgRGF0ZW4gw7xiZXIgZWluLSB1bmQgYXVzZ2VoZW5kZSBBbnJ1ZmUuIFNjaMOkZGxpY2hlIEFwcHMga8O2bm5lbiBzbyBJaHJlIEFucnVmbGlzdGUgbMO2c2NoZW4gb2RlciDDpG5kZXJuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4Mzk0MTczNjM1Mjc4Nzg0MiI+IkVybcO2Z2xpY2h0IGRlciBBcHAsIGRpZSBBbnJ1Zmxpc3RlIElocmVzIFRlbGVmb25zIHp1IMOkbmRlcm4sIGVpbnNjaGxpZcOfbGljaCBkZXIgRGF0ZW4gw7xiZXIgZWluLSB1bmQgYXVzZ2VoZW5kZSBBbnJ1ZmUuIFNjaMOkZGxpY2hlIEFwcHMga8O2bm5lbiBzbyBJaHJlIEFucnVmbGlzdGUgbMO2c2NoZW4gb2RlciDDpG5kZXJuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFByb2ZpbGUiIG1zZ2lkPSI0NzAxODg5ODUyNjEyNzE2Njc4Ij4iTWVpbmUgS29udGFrdGthcnRlbiBsZXNlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFByb2ZpbGUiIG1zZ2lkPSI0NzAxODg5ODUyNjEyNzE2Njc4Ij4iSWhyZSBLb250YWt0a2FydGVuIGxlc2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDYyNDc1MTUxODQ5ODg4ODQ4Ij4iRXJtw7ZnbGljaHQgZGVyIEFwcCwgYXVmIElocmVtIEdlcsOkdCBnZXNwZWljaGVydGUgcGVyc29uZW5iZXpvZ2VuZSBQcm9maWxkYXRlbiB6dSBsZXNlbiwgZWluc2NobGllw59saWNoIElocmVzIE5hbWVucyB1bmQgSWhyZXIgS29udGFrdGRhdGVuLiBEaWUgQXBwIGthbm4gU2llIHNvbWl0IGlkZW50aWZpemllcmVuIHVuZCBJaHJlIFByb2ZpbGRhdGVuIGFuIGFuZGVyZSBzZW5kZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiJNZWluZSBLb250YWt0a2FydGVuIMOkbmRlcm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlUHJvZmlsZSIgbXNnaWQ9IjkwNzc5MzYyODc3NzM5NzY0MyI+IklocmUgS29udGFrdGthcnRlbiDDpG5kZXJuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTU1MjA4NDI5NDU5ODQ2NTg5OSI+IkVybcO2Z2xpY2h0IGRlciBBcHAsIGF1ZiBJaHJlbSBHZXLDpHQgZ2VzcGVpY2hlcnRlIHBlcnNvbmVuYmV6b2dlbmUgUHJvZmlsZGF0ZW4genUgw6RuZGVybiwgZWluc2NobGllw59saWNoIElocmVzIE5hbWVucyB1bmQgSWhyZXIgS29udGFrdGRhdGVuLCBzb3dpZSBEYXRlbiBoaW56dXp1ZsO8Z2VuLiBEaWUgQXBwIGthbm4gU2llIHNvIGlkZW50aWZpemllcmVuIHVuZCBJaHJlIFByb2ZpbGRhdGVuIGFuIGFuZGVyZSBzZW5kZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTI2ODkyMDk1NjE1MjQxOTE3MCI+IkluIHNvemlhbGVtIFN0cmVhbSBsZXNlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4iRXJtw7ZnbGljaHQgZGVyIEFwcCwgYXVmIFVwZGF0ZXMgYXVzIHNvemlhbGVuIE5ldHp3ZXJrZW4gdm9uIElobmVuIHVuZCBJaHJlbiBGcmV1bmRlbiB6dXp1Z3JlaWZlbiB1bmQgZGllc2UgenUgc3luY2hyb25pc2llcmVuLiBTZWllbiBTaWUgdm9yc2ljaHRpZywgd2VubiBTaWUgSW5mb3JtYXRpb25lbiB0ZWlsZW46IERlciBBcHAgd2lyZCBlcmxhdWJ0LCBkaWUgS29tbXVuaWthdGlvbiB6d2lzY2hlbiBJaG5lbiB1bmQgSWhyZW4gRnJldW5kZW4gaW4gc296aWFsZW4gTmV0endlcmtlbiB6dSBsZXNlbiwgdW5hYmjDpG5naWcgdm9uIGRlciBWZXJ0cmF1bGljaGtlaXQgZGVyIGtvbW11bml6aWVydGVuIEluZm9ybWF0aW9uZW4uIEhpbndlaXM6IERpZXNlIEJlcmVjaHRpZ3VuZyBrYW5uIG3DtmdsaWNoZXJ3ZWlzZSBuaWNodCBpbiBhbGxlbiBzb3ppYWxlbiBOZXR6d2Vya2VuIGVyend1bmdlbiB3ZXJkZW4uIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJFcm3DtmdsaWNodCBkZXIgQXBwLCBkaWUgc3lzdGVtbmFoZW4gU3VyZmFjZUZsaW5nZXItRnVua3Rpb25lbiB6dSB2ZXJ3ZW5kZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJGcmFtZS1QdWZmZXIgbGVzZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iRXJtw7ZnbGljaHQgZGVyIEFwcCwgZGVuIEluaGFsdCBkZXMgRnJhbWUtUHVmZmVycyB6dSBsZXNlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IkF1ZiBJbnB1dEZsaW5nZXIgenVncmVpZmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkVybcO2Z2xpY2h0IGRlciBBcHAsIGRpZSBzeXN0ZW1uYWhlbiBJbnB1dEZsaW5nZXItRnVua3Rpb25lbiB6dSB2ZXJ3ZW5kZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IldMQU4tQW56ZWlnZW4ga29uZmlndXJpZXJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IkVybGF1YnQgZGVyIEFwcCwgV0xBTi1BbnplaWdlbiB6dSBrb25maWd1cmllcmVuIHVuZCBlaW5lIFZlcmJpbmR1bmcgenUgZGllc2VuIGhlcnp1c3RlbGxlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV0xBTi1BbnplaWdlbiBzdGV1ZXJuIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IkVybcO2Z2xpY2h0IGRlciBBcHAsIGdsb2JhbGUgQXVkaW8tRWluc3RlbGx1bmdlbiB6dSDDpG5kZXJuLCBldHdhIGRpZSBMYXV0c3TDpHJrZSB1bmQgZGVuIExhdXRzcHJlY2hlciBmw7xyIGRpZSBBdXNnYWJlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4iQXVkaW8gYXVmbmVobWVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iRXJtw7ZnbGljaHQgZGVyIEFwcCwgVG9uIG1pdGhpbGZlIGRlcyBNaWtyb2ZvbnMgYXVmenVuZWhtZW4uIERpZSBCZXJlY2h0aWd1bmcgZXJsYXVidCBkZXIgQXBwLCBUb25hdWZuYWhtZW4gamVkZXJ6ZWl0IHVuZCBvaG5lIElocmUgQmVzdMOkdGlndW5nIGR1cmNoenVmw7xocmVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4iU0lNLUtvbW11bmlrYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJFcm3DtmdsaWNodCBkZXIgQXBwIGRhcyBTZW5kZW4gdm9uIEJlZmVobGVuIGFuIGRpZSBTSU0tS2FydGUuIERpZXMgaXN0IMOkdcOfZXJzdCByaXNpa29yZWljaC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJCaWxkZXIgdW5kIFZpZGVvcyBhdWZuZWhtZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iRXJtw7ZnbGljaHQgZGVyIEFwcCwgQmlsZGVyIHVuZCBWaWRlb3MgbWl0IGRlciBLYW1lcmEgYXVmenVuZWhtZW4uIERpZSBCZXJlY2h0aWd1bmcgZXJsYXVidCBkZXIgQXBwLCBkaWUgS2FtZXJhIGplZGVyemVpdCB1bmQgb2huZSBJaHJlIEJlc3TDpHRpZ3VuZyB6dSBudXR6ZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4iTEVELUFuemVpZ2UgZsO8ciDDnGJlcnRyYWd1bmcgYmVpIEthbWVyYW51dHp1bmcgZGVha3RpdmllcmVuIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iUHJpdmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+Ikdlc2Now6RmdGxpY2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IlNvbnN0aWdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IkVzIHd1cmRlIGtlaW5lIEFwcCB6dW0gQW56ZWlnZW4gZGllc2VzIEtvbnRha3RzIGdlZnVuZGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTi1Db2RlIGVpbmdlYmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIHVuZCBuZXVlbiBQSU4tQ29kZSBlaW5nZWJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLUNvZGUiPC9zdHJpbmc+CkBAIC04MzAsNyArODQyLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl93cm9uZyIgbXNnaWQ9IjQzMTc5NTUwMTQ5NDgxMDg3OTQiPiJFcm5ldXQgdmVyc3VjaGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXNzd29yZF93cm9uZyIgbXNnaWQ9IjU3Mzc4MTUzOTMyNTMxNjUzMDEiPiJFcm5ldXQgdmVyc3VjaGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IkRpZSBtYXhpbWFsIHp1bMOkc3NpZ2UgQW56YWhsIGFuIEZhY2UgVW5sb2NrLVZlcnN1Y2hlbiB3dXJkZSDDvGJlcnNjaHJpdHRlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MDU3NzYyODI4MzU1NTcyMzE1Ij4iV2lyZCBnZWxhZGVuLi4uICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gPHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MDU3NzYyODI4MzU1NTcyMzE1Ij4iV2lyZCBhdWZnZWxhZGVuLi4uICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gPHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPikiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiJBdWZnZWxhZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9iYXR0ZXJ5X3Nob3J0IiBtc2dpZD0iNDQ3NzI2NDg0OTM4Njg1MDI2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiA8eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9sb3dfYmF0dGVyeSIgbXNnaWQ9IjE0ODI4NzM5ODE5MTkyNDk3NDAiPiJMYWRlZ2Vyw6R0IGFuc2NobGllw59lbiI8L3N0cmluZz4KQEAgLTExOTgsNyArMTIxMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3RvX2Nvbm5lY3RfdGl0bGUiIG1zZ2lkPSI0OTU4ODAzOTQ4NjU4NTMzNjM3Ij4iRWlubGFkdW5nIHp1bSBBdWZiYXUgZWluZXIgVmVyYmluZHVuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2Zyb21fbWVzc2FnZSIgbXNnaWQ9IjU3MDM4OTE3NDczMTk1MTc2OSI+IlZvbjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4iQW46Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4iR2ViZW4gU2llIGRpZSBlcmZvcmRlcmxpY2hlIFBJTiBlaW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4iR2ViZW4gU2llIGRpZSBQSU4gZWluOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4iUElOOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4iRGFzIFRhYmxldCB3aXJkIHZvcsO8YmVyZ2VoZW5kIHZvbSBXTEFOIGdldHJlbm50LCB3w6RocmVuZCBlaW5lIFZlcmJpbmR1bmcgbWl0IDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gYmVzdGVodC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczNjM5MDcyMTM3ODc0NjkxNTEiPiJEYXMgVGVsZWZvbiB3aXJkIHZvcsO8YmVyZ2VoZW5kIHZvbSBXTEFOIGdldHJlbm50LCB3w6RocmVuZCBlaW5lIFZlcmJpbmR1bmcgbWl0IDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gaGVyZ2VzdGVsbHQgd2lyZC4iPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJVbXNjaGFsdHRhc3RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRWluZ2FiZXRhc3RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iQXBwIGF1c3fDpGhsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IGtvbm50ZSBuaWNodCBnZXN0YXJ0ZXQgd2VyZGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IlRlaWxlbiBtaXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iTWl0IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4gdGVpbGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IlNjaGllYmVyZWdsZXI6IEJlcsO8aHJlbiB1bmQgaGFsdGVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ilp1bSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gbmFjaCBvYmVuIHNjaGllYmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iWnVtIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiBuYWNoIHVudGVuIHNjaGllYmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iWnVtIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiBuYWNoIGxpbmtzIHNjaGllYmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ilp1bSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gbmFjaCByZWNodHMgc2NoaWViZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkVudHNwZXJyZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IkxhdXRsb3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iVG9uIGVpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iU3VjaGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJadW0gRW50c3BlcnJlbiBkZW4gRmluZ2VyIMO8YmVyIGRlbiBCaWxkc2NoaXJtIHppZWhlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJTY2hsaWXDn2VuIFNpZSBlaW4gSGVhZHNldCBhbiwgdW0gZGFzIFBhc3N3b3J0IGdlc3Byb2NoZW4genUgaMO2cmVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlB1bmt0LiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoLUF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJLYWJlbGxvc2Ugw5xiZXJ0cmFndW5nIChXaURpKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJGZXJ0aWciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNZWRpZW5hdXNnYWJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJNaXQgR2Vyw6R0IHZlcmJpbmRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IkJpbGRzY2hpcm0gYXVmIEdlcsOkdCDDvGJlcnRyYWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IkdlcsOkdGUgd2VyZGVuIGdlc3VjaHTigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJFaW5zdGVsbHVuZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IlZlcmJpbmR1bmcgdHJlbm5lbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJXaXJkIGdlc2Nhbm50Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iVmVyYmluZHVuZyB3aXJkIGhlcmdlc3RlbGx0Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJWZXJmw7xnYmFyIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iT3ZlcmxheS1Oci4gPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc2ljaGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJLYWJlbGxvc2Ugw5xiZXJ0cmFndW5nIChXaURpKSBpc3QgYWt0aXZpZXJ0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJEaWVzZXIgQmlsZHNjaGlybSB3aXJkIGF1ZiBlaW5lbSBhbmRlcmVuIEdlcsOkdCBhbmdlemVpZ3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IkJpbGRzY2hpcm0gd2lyZCDDvGJlcnRyYWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IlZlcmJpbmR1bmcgbWl0IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiB3aXJkIGhlcmdlc3RlbGx0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkJpbGRzY2hpcm0gd2lyZCDDvGJlcnRyYWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iVmVyYnVuZGVuIG1pdCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iVmVyYmluZHVuZyB0cmVubmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJOb3RydWYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJNdXN0ZXIgdmVyZ2Vzc2VuIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjYwLDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJTcMOkdGVyIGVybmV1dCB2ZXJzdWNoZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iWnVtIFNjaGxpZcOfZW4gZGVzIFZvbGxiaWxkcyB2b24gb2JlbiBuYWNoIHVudGVuIHdpc2NoZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkZlcnRpZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IktyZWlzZsO2cm1pZ2VyIFNjaGllYmVyZWdsZXIgZsO8ciBTdHVuZGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJLcmVpc2bDtnJtaWdlciBTY2hpZWJlcmVnbGVyIGbDvHIgTWludXRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJTdHVuZGVuIGF1c3fDpGhsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJNaW51dGVuIGF1c3fDpGhsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+Ik1vbmF0c3Jhc3RlciBtaXQgZWluemVsbmVuIFRhZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iSmFocmVzbGlzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+Ik1vbmF0IHVuZCBUYWcgYXVzd8OkaGxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IkphaHIgYXVzd8OkaGxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gYXVzZ2V3w6RobHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBnZWzDtnNjaHQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCmluZGV4IDYwNWQ4NDUuLmIwODY4ZWQgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4izqDOu863zrrPhM+Bzr/Ou86/zrPOrs+Dz4TOtSDOrc69zrHOvSDOus+JzrTOuc66z4wgUFVLIM68zrUgOCDOsc+BzrnOuM68zr/Pjc+CIM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+Bzr/Phc+CLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLOlyDOus6sz4HPhM6xIFNJTSDOrc+HzrXOuSDOus67zrXOuc60z4nOuM61zq8gzrzOtSDOus+JzrTOuc66z4wgUFVLLiDOoM67zrfOus+Ez4HOv867zr/Os86uz4PPhM61IM+Ezr/OvSDOus+JzrTOuc66z4wgUFVLIM6zzrnOsSDOvc6xIM+EzrfOvSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4izqDOu863zrrPhM+Bzr/Ou86/zrPOrs+Dz4TOtSDPhM6/zr0gzrrPic60zrnOus+MIFBVSzIgzrPOuc6xIM+EzrfOvSDOus6xz4TOrM+BzrPOt8+DzrcgzrHPgM6/zrrOu861zrnPg868zr/PjSDPhM63z4IgzrrOrM+Bz4TOsc+CIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiLOkc69zrXPgM65z4TPhc+Hzq7PgiDPgM+Bzr/Pg8+AzqzOuM61zrnOsS4gzpXOvc61z4HOs86/z4DOv865zq7Pg8+EzrUgz4TOvyDOms67zrXOr860z4nOvM6xIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+Is6Rz4DOv868zq3Ovc61zrkgzqzOu867zrcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IM+Az4HOv8+Dz4DOrM64zrXOuc6xIM+Az4HOv8+Ezr/PjSDOtyDOus6sz4HPhM6xIFNJTSDOus67zrXOuc60z4nOuM61zq8uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4izpHPgM6/zrzOrc69zr/Phc69IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDPgM+Bzr/Pg8+AzqzOuM61zrnOtc+CIM+Az4HOv8+Ezr/PjSDOtyDOus6sz4HPhM6xIFNJTSDOus67zrXOuc60z4nOuM61zq8uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLOlc65z4POtc+Bz4fPjM68zrXOvc63IM6xzr3Osc6zzr3Pjs+BzrnPg863IM66zrvOrs+DzrfPgiI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOv869IM66zqzPhM6/z4fOvyDPhM63IM60zq3Pg868zrXPhc+Dzrcgz4PPhM63IM60zrnOtc+AzrHPhs6uIM6xzr3Pic+EzqzPhM6/z4UgzrXPgM65z4DOrc60zr/PhSDOvM65zrHPgiDPhc+AzrfPgc61z4POr86xz4IgVnBuLiDOlM61zr0gzrHPgM6xzrnPhM61zq/PhM6xzrkgzrPOuc6xIM66zrHOvc6/zr3Ouc66zq3PgiDOtc+GzrHPgc68zr/Os86tz4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+Is60zq3Pg868zrXPhc+Dzrcgz4POtSDPhM6xz4DOtc+Ez4POsc+Bzq/OsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOv869IM66zqzPhM6/z4fOvyDPhM63IM60zq3Pg868zrXPhc+Dzrcgz4PPhM63IM60zrnOtc+AzrHPhs6uIM6xzr3Pic+EzqzPhM6/z4UgzrXPgM65z4DOrc60zr/PhSDOvM65zrHPgiDPhM6xz4DOtc+Ez4POsc+Bzq/Osc+CLiDOlM61zr0gzrHPgM6xzrnPhM61zq/PhM6xzrkgzrPOuc6xIM+Dz4XOvc6uzrjOtc65z4IgzrXPhs6xz4HOvM6/zrPOrc+CLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4izrzOtc+EzrHPhs6/z4HOrCDPg861IM68zrnOsSDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OtyDOv864z4zOvc63Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOv869IM66zqzPhM6/z4fOvyDPhM63IM60zq3Pg868zrXPhc+Dzrcgz4PPhM63IM60zrnOtc+AzrHPhs6uIM6xzr3Pic+EzqzPhM6/z4UgzrXPgM65z4DOrc60zr/PhSDOvM65zrHPgiDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Ot8+CIM6/zrjPjM69zrfPgi4gzpTOtc69IM6xz4DOsc65z4TOtc6vz4TOsc65IM+Azr/PhM6tIM6zzrnOsSDOus6xzr3Ov869zrnOus6tz4IgzrXPhs6xz4HOvM6/zrPOrc+CLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+Is60zq3Pg868zrXPhc+Dzrcgz4POtSDPhc+AzrfPgc61z4POr86xIM6zz4HOsc+GzrnOus+Ozr0gz4PPhM6/zrnPh861zq/Pic69Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPg8+Ezr/OvSDOus6sz4TOv8+Hzr8gz4TOtyDOtM6tz4POvM61z4XPg863IM+Dz4TOtyDOtM65zrXPgM6xz4bOriDOsc69z4nPhM6sz4TOv8+FIM61z4DOuc+Azq3OtM6/z4UgzrzOuc6xz4Igz4XPgM63z4HOtc+Dzq/Osc+CIM6zz4HOsc+GzrnOus+Ozr0gz4PPhM6/zrnPh861zq/Pic69LiDOlM61zr0gzrHPgM6xzrnPhM61zq/PhM6xzrkgzrPOuc6xIM66zrHOvc6/zr3Ouc66zq3PgiDOtc+GzrHPgc68zr/Os86tz4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4izrXPgM65zrrOv865zr3Pic69zq/OsSDOvM61IM6tzr3Osc69IM60zrnOsc+HzrXOuc+BzrnPg8+Ezq4gz4PPhc+DzrrOtc+Fzq7PgiI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4izpXPgM65z4TPgc6tz4DOtc65IM+DzrUgzrzOuc6xIM61z4bOsc+BzrzOv86zzq4gzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc61zq8gzrvOtc65z4TOv8+Fz4HOs86vzrXPgiBTdXJmYWNlRmxpbmdlciDPh86xzrzOt867zr/PjSDOtc+AzrnPgM6tzrTOv8+FLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+Is6xzr3OrM6zzr3Pic+Dzrcgz4DPgc6/z4PPic+BzrnOvc6uz4IgzrzOvc6uzrzOt8+CIM+AzrvOsc65z4POr86/z4UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gz4TOt869IM6xzr3OrM6zzr3Pic+Dzrcgz4TOv8+FIM+AzrXPgc65zrXPh86/zrzOrc69zr/PhSDPhM63z4Igz4DPgc6/z4PPic+BzrnOvc6uz4IgzrzOvc6uzrzOt8+CIM+AzrvOsc65z4POr86/z4UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iz4DPgc+Mz4POss6xz4POtyDPg8+Ezr8gSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPg861IM68zrnOsSDOtc+GzrHPgc68zr/Os86uIM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOtc6vIM67zrXOuc+Ezr/Phc+BzrPOr861z4IgSW5wdXRGbGluZ2VyIM+HzrHOvM63zrvOv8+NIM61z4DOuc+Azq3OtM6/z4UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLOtM65zrHOvM+Mz4HPhs+Jz4POtyDOv864zr/Ovc+Ozr0gV2lmaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPhM63IM60zrnOsc68z4zPgc+Gz4nPg863IM+EzrfPgiDOtc+GzrHPgc68zr/Os86uz4IgzrrOsc65IM+Ezrcgz4PPjc69zrTOtc+DzrfPgiDPg861IM6/zrjPjM69zrXPgiBXaWZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4izq3Ou861zrPPh86/z4Igzr/OuM6/zr3Pjs69IFdpZmkiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gz4TOt869IM+Ez4HOv8+Azr/PgM6/zq/Ot8+DzrcgzrrOsc64zr/Ou865zrrPjs69IM+Bz4XOuM68zq/Pg861z4nOvSDOrs+Hzr/PhSwgz4zPgM+Jz4Igzrcgzq3Ovc+EzrHPg863IM66zrHOuSDPgM6/zrnOvyDOt8+HzrXOr86/IM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOr8+EzrHOuSDOs865zrEgzq3Ovs6/zrTOvy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+Is61zrPOs8+BzrHPhs6uIM6uz4fOv8+FIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gz4TOt869IM61zrPOs8+BzrHPhs6uIM6uz4fOv8+FIM68zrUgz4TOvyDOvM65zrrPgc+Mz4bPic69zr8uIM6Rz4XPhM6uIM63IM6szrTOtc65zrEgzrTOr869zrXOuSDPhM63IM60z4XOvc6xz4TPjM+EzrfPhM6xIM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gzr3OsSDOtc6zzrPPgc6sz4bOtc65IM6uz4fOvyDOsc69zqwgz4DOrM+DzrEgz4PPhM65zrPOvM6uIM+Hz4nPgc6vz4Igz4TOt869IM6tzrPOus+BzrnPg86uIM+DzrHPgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+Is61z4DOuc66zr/Ouc69z4nOvc6vzrEgzrzOtSDOus6sz4HPhM6xIHNpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPg8+EzrfOvSDOtc+GzrHPgc68zr/Os86uIM+EzrfOvSDOsc+Azr/Pg8+Ezr/Ou86uIM61zr3PhM6/zrvPjs69IM+Dz4TOt869IM66zqzPgc+EzrEgU0lNLiDOkc+Fz4TPjCDOtc6vzr3Osc65IM61zr7Osc65z4HOtc+EzrnOus6sIM61z4DOuc66zq/Ovc60z4XOvc6/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+Is67zq7PiM63IM+Gz4nPhM6/zrPPgc6xz4bOuc+Ozr0gzrrOsc65IM6yzq/Ovc+EzrXOvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLOlc+AzrnPhM+Bzq3PgM61zrkgz4PPhM63zr0gzrXPhs6xz4HOvM6/zrPOriDPhM63IM67zq7PiM63IM+Gz4nPhM6/zrPPgc6xz4bOuc+Ozr0gzrrOsc65IM6yzq/Ovc+EzrXOvyDOvM61IM+Ezrcgz4bPic+Ezr/Os8+BzrHPhs65zrrOriDOvM63z4fOsc69zq4uIM6Rz4XPhM6uIM63IM6szrTOtc65zrEgzrTOr869zrXOuSDPhM63IM60z4XOvc6xz4TPjM+EzrfPhM6xIM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc61zq8gz4TOtyDPhs+Jz4TOv86zz4HOsc+GzrnOus6uIM68zrfPh86xzr3OriDOsc69zqwgz4DOrM+DzrEgz4PPhM65zrPOvM6uIM+Hz4nPgc6vz4Igz4TOt869IM6tzrPOus+BzrnPg86uIM+DzrHPgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiLOsc+AzrXOvc61z4HOs86/z4DOv86vzrfPg863IM6tzr3OtM61zrnOvs63z4IgTEVEIM68zrXPhM6szrTOv8+DzrfPgiDPjM+EzrHOvSDPh8+BzrfPg865zrzOv8+Azr/Ouc61zq/PhM6xzrkgzrcgz4bPic+Ezr/Os8+BzrHPhs65zrrOriDOvM63z4fOsc69zq4iPC9zdHJpbmc+CkBAIC02NDIsNyArNjUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODgxNTY0NjI5MzQ5Nzc5NDAiPiLOsc69zqzOs869z4nPg863IM+Ezr/PhSDPgM61z4HOuc61z4fOv868zq3Ovc6/z4Ugz4TOt8+CIM66zqzPgc+EzrHPgiBTRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0Njk4ODcxMjU5ODM4NjA3OSI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPg8+EzrfOvSDOtc+GzrHPgc68zr/Os86uIM+EzrfOvSDOsc69zqzOs869z4nPg863IM+Ezr/PhSDPgM61z4HOuc61z4fOv868zq3Ovc6/z4Ugz4TOv8+FIM6xz4DOv864zrfOus61z4XPhM65zrrOv8+NIM+DzrHPgiDPh8+Oz4HOv8+FIFVTQi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYwNzM2MjQ3MzY1NDk3NTQxMSI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPg8+EzrfOvSDOtc+GzrHPgc68zr/Os86uIM+EzrfOvSDOsc69zqzOs869z4nPg863IM+Ezr/PhSDPgM61z4HOuc61z4fOv868zq3Ovc6/z4Ugz4TOt8+CIM66zqzPgc+EzrHPgiBTRC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijg0ODU5NzkwNjIyNTQ2NjY3NDgiPiLPhM+Bzr/PgC4gzq4gzrTOuc6xzrPPgS4gz4TOv8+FIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+Is+Ez4HOv8+Azr/PgM6/zq/Ot8+Dzrcgzq4gzrTOuc6xzrPPgc6xz4bOriDPhM6/z4UgVVNCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiLPhM+Bzr/PgM6/z4DOv86vzrfPg863IM6uIM60zrnOsc6zz4HOsc+Gzq4gz4TPic69IM+AzrXPgc65zrXPh86/zrzOrc69z4nOvSDPhM63z4IgzrrOrM+Bz4TOsc+CIFNEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPg8+EzrfOvSDOtc+GzrHPgc68zr/Os86uIM+EzrfOvSDOtc6zzrPPgc6xz4bOriDPg8+Ezr/OvSDOsc+Azr/OuM63zrrOtc+Fz4TOuc66z4wgz4fPjs+Bzr8gVVNCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPg8+EzrfOvSDOtc+GzrHPgc68zr/Os86uIM+EzrfOvSDOtc6zzrPPgc6xz4bOriDPg8+EzrfOvSDOus6sz4HPhM6xIFNELiI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+Is6Rz4HPh865zrrOriDPg861zrvOr860zrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4izpXPgc6zzrHPg86vzrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+Is6GzrvOu86/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+Is6UzrXOvSDOss+Bzq3OuM63zrrOtSDOus6xzrzOr86xIM61z4bOsc+BzrzOv86zzq4gzrPOuc6xIM+EzrfOvSDPgM+Bzr/Oss6/zrvOriDOsc+Fz4TOrs+CIM+EzrfPgiDOtc+AzrHPhs6uz4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4izqDOu863zrrPhM+Bzr/Ou86/zrPOrs+Dz4TOtSDPhM6/zr0gzrrPic60zrnOus+MIM6xz4HOuc64zrzPjCBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLOoM67zrfOus+Ez4HOv867zr/Os86uz4PPhM61IM+Ezr/OvSDOus+JzrTOuc66z4wgUFVLIM66zrHOuSDPhM6/zr0gzr3Orc6/IM66z4nOtM65zrrPjCBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+Is6az4nOtM65zrrPjM+CIFBVSyI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLOlc+AzrnOu86tzr7PhM61IM66zqzPgM6/zrnOsSDOtc+GzrHPgc68zr/Os86uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4izpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOtc66zrrOr869zrfPg863IM+Ezr/PhSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4izprOv865zr3OriDPh8+Bzq7Pg863IM68zrUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4izprOv865zr3OriDPh8+Bzq7Pg863IM68zrUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLOo8+Ezr/Ouc+HzrXOr86/IM+HzrXOuc+BzrnPg868zr/PjSDOvM61IM60z4XOvc6xz4TPjM+EzrfPhM6xIM6/zrvOr8+DzrjOt8+DzrfPgi4gzpHOs86zzq/Ovs+EzrUgzrrOsc65IM+AzrHPhM6uz4PPhM61IM+AzrHPgc6xz4TOtc+EzrHOvM6tzr3OsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4izprPjc67zrnPg863IM+Az4HOv8+CIM+EzrEgzrXPgM6szr3PiSDOs865zrEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Is6az43Ou865z4POtyDPgM+Bzr/PgiDPhM6xIM66zqzPhM+JIM6zzrnOsSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4izprPjc67zrnPg863IM+Az4HOv8+CIM+EzrEgzrHPgc65z4PPhM61z4HOrCDOs865zrEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLOms+NzrvOuc+Dzrcgz4DPgc6/z4Igz4TOsSDOtM61zr7Ouc6sIM6zzrnOsSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLOns61zrrOu861zq/OtM+JzrzOsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLOps+Jz4TOv86zz4HOsc+GzrnOus6uIM68zrfPh86xzr3OriI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLOkc64z4zPgc+FzrLOvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLOlc69zrXPgc6zzr/PgM6/zq/Ot8+Dzrcgzq7Ph86/z4UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Is6Rzr3Osc62zq7PhM63z4POtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+Is6jz43Pgc61z4TOtSDOs865zrEgzr7Otc66zrvOtc6vzrTPic68zrEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+Is6jz4XOvc60zq3Pg8+EzrUgzrHOus6/z4XPg8+EzrnOus6sIM6zzrnOsSDOvc6xIM6xzrrOv8+Nz4POtc+EzrUgz4TOsSDPgM67zq7Ous+Ez4HOsSDPhM6/z4UgzrrPic60zrnOus6/z40gz4DPgc+Mz4POss6xz4POt8+CIM69zrEgzrXOus+Gz4nOvc6/z43Ovc+EzrHOuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLOpM61zrvOtc6vzrEuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4izqPPjc+Dz4TOt868zrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+Is6Jz4fOv8+CIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4izpHPg8+Nz4HOvM6xz4TOtyDOv864z4zOvc63Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+Is6kzq3Ou86/z4IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLOiM6+zr/OtM6/z4IgzrzOrc+Dz4nOvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4izqPPjc69zrTOtc+DzrcgzrzOtSDPhM63IM+Dz4XPg866zrXPhc6uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4izpzOtc+EzqzOtM6/z4POtyDOv864z4zOvc63z4Igz4POtSDPg8+Fz4POus61z4XOriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Is6Rzr3Osc62zq7PhM63z4POtyDPg8+Fz4POus61z4XPjs694oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4izqHPhc64zrzOr8+DzrXOuc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+Is6Rz4DOv8+Dz43Ovc60zrXPg863Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+Is6jzqzPgc+Jz4POt+KApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+Is6jz43Ovc60zrXPg8634oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLOlM65zrHOuM6tz4POuc68zrciPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLOlc+AzrnOus6szrvPhc+IzrcgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDOsc+Dz4bOsc67zq3PgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4izojPh861zrkgz4PPhc69zrTOtc64zrXOryDOsc+Dz43Pgc68zrHPhM63IM6/zrjPjM69zrciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4izpHPhc+Ezq4gzrcgzr/OuM+Mzr3OtyDOtc68z4bOsc69zq/Ots61z4TOsc65IM+DzrUgzrzOuc6xIM6szrvOu863IM+Dz4XPg866zrXPhc6uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+Is6czrXPhM6szrTOv8+Dzrcgzr/OuM+Mzr3Ot8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4izpPOr861zr3PhM6xzrkgz4PPjc69zrTOtc+DzrcgzrzOtSDPhM6/IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+Is6czrXPhM6szrTOv8+Dzrcgzr/OuM+Mzr3Ot8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiLOo8+Fzr3OtM6tzrjOt866zrUgzrzOtSDPhM6/IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLOkc+Azr/Pg8+Nzr3OtM61z4POtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4izprOu86uz4POtc65z4IgzrXPgM61zq/Os86/z4XPg86xz4IgzrHOvc6szrPOus63z4IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLOns61z4fOrM+DzrHPhM61IM+Ezr8gzrzOv8+Ezq/Oss6/Ijwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjYwLDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLOlM6/zrrOuc68zqzPg8+EzrUgzr7Osc69zqwgzrHPgc6zz4zPhM61z4HOsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLOo86sz4HPic+Dzrcgz4DPgc6/z4Igz4TOsSDOus6sz4TPiSDOs865zrEgzq3Ovs6/zrTOvyDOsc+Az4wgz4DOu86uz4HOtyDOv864z4zOvc63Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLOpM6tzrvOv8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4izprPhc66zrvOuc66z4wgz4HPhc64zrzOuc+Dz4TOuc66z4wgz4nPgc+Ozr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+Is6az4XOus67zrnOus+MIM+Bz4XOuM68zrnPg8+EzrnOus+MIM67zrXPgM+Ez47OvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLOlc+AzrnOu86/zrPOriDPic+Bz47OvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+Is6Vz4DOuc67zr/Os86uIM67zrXPgM+Ez47OvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4izqDOu86tzrPOvM6xIM63zrzOtc+Bz47OvSDPhM6/z4UgzrzOrs69zrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLOm86vz4PPhM6xIM61z4TPjs69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLOlc+AzrnOu86/zrPOriDOvM6uzr3OsSDOus6xzrkgzrfOvM6tz4HOsc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4izpXPgM65zrvOv86zzq4gzq3PhM6/z4XPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiLOlc+AzrnOu86tz4fPhM63zrrOtSDPhM6/IM+Dz4TOv865z4fOtc6vzr8gPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gzrTOuc6xzrPPgc6sz4bOt866zrUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKaW5kZXggY2E4NTA5YS4uMTFmMzA0NjggMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJUeXBlIGEgUFVLIHRoYXQgaXMgOCBudW1iZXJzIG9yIGxvbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iWW91ciBTSU0gY2FyZCBpcyBQVUstbG9ja2VkLiBUeXBlIHRoZSBQVUsgY29kZSB0byB1bmxvY2sgaXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iVHlwZSBQVUsyIHRvIHVuYmxvY2sgU0lNIGNhcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iVW5zdWNjZXNzZnVsLCBlbmFibGUgU0lNL1JVSU0gTG9jay4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJZb3UgaGF2ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcmVtYWluaW5nIGF0dGVtcHQvcyBiZWZvcmUgU0lNIGlzIGxvY2tlZC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJZb3UgaGF2ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcmVtYWluaW5nIGF0dGVtcHQvcyBiZWZvcmUgU0lNIGlzIGxvY2tlZC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IkluY29taW5nIENhbGxlciBJRCI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iQWxsb3dzIHRoZSBob2xkZXIgdG8gYmluZCB0byB0aGUgdG9wLWxldmVsIGludGVyZmFjZSBvZiBhIFZwbiBzZXJ2aWNlLiBTaG91bGQgbmV2ZXIgYmUgbmVlZGVkIGZvciBub3JtYWwgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iYmluZCB0byB3YWxscGFwZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkFsbG93cyB0aGUgaG9sZGVyIHRvIGJpbmQgdG8gdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2Ugb2Ygd2FsbHBhcGVyLiBTaG91bGQgbmV2ZXIgYmUgbmVlZGVkIGZvciBub3JtYWwgYXBwbGljYXRpb25zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iYmluZCB0byBhIHJlbW90ZSBkaXNwbGF5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iQWxsb3dzIHRoZSBob2xkZXIgdG8gYmluZCB0byB0aGUgdG9wLWxldmVsIGludGVyZmFjZSBvZiBhIHJlbW90ZSBkaXNwbGF5LiBTaG91bGQgbmV2ZXIgYmUgbmVlZGVkIGZvciBub3JtYWwgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJiaW5kIHRvIGEgd2lkZ2V0IHNlcnZpY2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iQWxsb3dzIHRoZSBob2xkZXIgdG8gYmluZCB0byB0aGUgdG9wLWxldmVsIGludGVyZmFjZSBvZiBhIHdpZGdldCBzZXJ2aWNlLiBTaG91bGQgbmV2ZXIgYmUgbmVlZGVkIGZvciBub3JtYWwgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJpbnRlcmFjdCB3aXRoIGRldmljZSBhZG1pbiI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iQWxsb3dzIHRoZSBhcHAgdG8gdXNlIFN1cmZhY2VGbGluZ2VyIGxvdy1sZXZlbCBmZWF0dXJlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJyZWFkIGZyYW1lIGJ1ZmZlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJBbGxvd3MgdGhlIGFwcCB0byByZWFkIHRoZSBjb250ZW50IG9mIHRoZSBmcmFtZSBidWZmZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iYWNjZXNzIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJBbGxvd3MgdGhlIGFwcCB0byB1c2UgSW5wdXRGbGluZ2VyIGxvdy1sZXZlbCBmZWF0dXJlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ImNvbmZpZ3VyZSBXaS1GaSBkaXNwbGF5cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IkFsbG93cyB0aGUgYXBwIHRvIGNvbmZpZ3VyZSBhbmQgY29ubmVjdCB0byBXaS1GaSBkaXNwbGF5cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ImNvbnRyb2wgV2ktRmkgZGlzcGxheXMiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4iQWxsb3dzIHRoZSBhcHAgdG8gbW9kaWZ5IGdsb2JhbCBhdWRpbyBzZXR0aW5ncyBzdWNoIGFzIHZvbHVtZSBhbmQgd2hpY2ggc3BlYWtlciBpcyB1c2VkIGZvciBvdXRwdXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJyZWNvcmQgYXVkaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiJBbGxvd3MgdGhlIGFwcCB0byByZWNvcmQgYXVkaW8gd2l0aCB0aGUgbWljcm9waG9uZS4gVGhpcyBwZXJtaXNzaW9uIGFsbG93cyB0aGUgYXBwIHRvIHJlY29yZCBhdWRpbyBhdCBhbnkgdGltZSB3aXRob3V0IHlvdXIgY29uZmlybWF0aW9uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4iU0lNIGNvbW11bmljYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJBbGxvd3MgdGhlIGFwcCB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBTSU0uIFRoaXMgaXMgdmVyeSBkYW5nZXJvdXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4idGFrZSBwaWN0dXJlcyBhbmQgdmlkZW9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkFsbG93cyB0aGUgYXBwIHRvIHRha2UgcGljdHVyZXMgYW5kIHZpZGVvcyB3aXRoIHRoZSBjYW1lcmEuIFRoaXMgcGVybWlzc2lvbiBhbGxvd3MgdGhlIGFwcCB0byB1c2UgdGhlIGNhbWVyYSBhdCBhbnkgdGltZSB3aXRob3V0IHlvdXIgY29uZmlybWF0aW9uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImRpc2FibGUgdHJhbnNtaXQgaW5kaWNhdG9yIExFRCB3aGVuIGNhbWVyYSBpcyBpbiB1c2UiPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiJIb21lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IldvcmsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+Ik90aGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+Ik5vIGFwcGxpY2F0aW9uIGZvdW5kIHRvIHZpZXcgdGhpcyBjb250YWN0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlR5cGUgUElOIGNvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJUeXBlIFBVSyBhbmQgbmV3IFBJTiBjb2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsgY29kZSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJDaG9vc2UgYW4gYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iQ291bGRuXCd0IGxhdW5jaCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iU2hhcmUgd2l0aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJTaGFyZSB3aXRoIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iU2xpZGluZyBoYW5kbGUuIFRvdWNoICZhbXA7IGhvbGQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlNsaWRlIHVwIGZvciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iU2xpZGUgZG93biBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlNsaWRlIGxlZnQgZm9yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iU2xpZGUgcmlnaHQgZm9yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IlVubG9jayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJDYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2lsZW50Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlNvdW5kIG9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTZWFyY2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJTd2lwZSB0byB1bmxvY2suIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlBsdWcgaW4gYSBoZWFkc2V0IHRvIGhlYXIgcGFzc3dvcmQga2V5cyBzcG9rZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iRG90Ijwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGggYXVkaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IldpcmVsZXNzIGRpc3BsYXkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iRG9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik1lZGlhIG91dHB1dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iQ29ubmVjdCB0byBkZXZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJDYXN0IHNjcmVlbiB0byBkZXZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJTZWFyY2hpbmcgZm9yIGRldmljZXPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJTZXR0aW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJEaXNjb25uZWN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNjYW5uaW5nLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iQ29ubmVjdGluZy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iQXZhaWxhYmxlIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iT3ZlcmxheSAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHNlY3VyZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iV2lyZWxlc3MgZGlzcGxheSBpcyBjb25uZWN0ZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iVGhpcyBzY3JlZW4gaXMgc2hvd2luZyBvbiBhbm90aGVyIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJDYXN0aW5nIHNjcmVlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkNvbm5lY3RpbmcgdG8gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iQ2FzdGluZyBzY3JlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IkNvbm5lY3RlZCB0byA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iRGlzY29ubmVjdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iRW1lcmdlbmN5IGNhbGwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJGb3Jnb3QgUGF0dGVybiI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY2MCwxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iVHJ5IGFnYWluIGxhdGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlN3aXBlIGRvd24gZnJvbSB0aGUgdG9wIHRvIGV4aXQgZnVsbCBzY3JlZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJGaW5pc2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkhvdXJzIGNpcmN1bGFyIHNsaWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iTWludXRlcyBjaXJjdWxhciBzbGlkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iU2VsZWN0IGhvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iU2VsZWN0IG1pbnV0ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+Ik1vbnRoIGdyaWQgb2YgZGF5cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IlllYXIgbGlzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iU2VsZWN0IG1vbnRoIGFuZCBkYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJTZWxlY3QgeWVhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gc2VsZWN0ZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBkZWxldGVkIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCmluZGV4IGNhODUwOWEuLjExZjMwNDY4IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iVHlwZSBhIFBVSyB0aGF0IGlzIDggbnVtYmVycyBvciBsb25nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IllvdXIgU0lNIGNhcmQgaXMgUFVLLWxvY2tlZC4gVHlwZSB0aGUgUFVLIGNvZGUgdG8gdW5sb2NrIGl0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlR5cGUgUFVLMiB0byB1bmJsb2NrIFNJTSBjYXJkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IlVuc3VjY2Vzc2Z1bCwgZW5hYmxlIFNJTS9SVUlNIExvY2suIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iWW91IGhhdmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlbWFpbmluZyBhdHRlbXB0L3MgYmVmb3JlIFNJTSBpcyBsb2NrZWQuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iWW91IGhhdmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlbWFpbmluZyBhdHRlbXB0L3MgYmVmb3JlIFNJTSBpcyBsb2NrZWQuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJbmNvbWluZyBDYWxsZXIgSUQiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IkFsbG93cyB0aGUgaG9sZGVyIHRvIGJpbmQgdG8gdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2Ugb2YgYSBWcG4gc2VydmljZS4gU2hvdWxkIG5ldmVyIGJlIG5lZWRlZCBmb3Igbm9ybWFsIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ImJpbmQgdG8gd2FsbHBhcGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJBbGxvd3MgdGhlIGhvbGRlciB0byBiaW5kIHRvIHRoZSB0b3AtbGV2ZWwgaW50ZXJmYWNlIG9mIHdhbGxwYXBlci4gU2hvdWxkIG5ldmVyIGJlIG5lZWRlZCBmb3Igbm9ybWFsIGFwcGxpY2F0aW9ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+ImJpbmQgdG8gYSByZW1vdGUgZGlzcGxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IkFsbG93cyB0aGUgaG9sZGVyIHRvIGJpbmQgdG8gdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2Ugb2YgYSByZW1vdGUgZGlzcGxheS4gU2hvdWxkIG5ldmVyIGJlIG5lZWRlZCBmb3Igbm9ybWFsIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4iYmluZCB0byBhIHdpZGdldCBzZXJ2aWNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkFsbG93cyB0aGUgaG9sZGVyIHRvIGJpbmQgdG8gdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2Ugb2YgYSB3aWRnZXQgc2VydmljZS4gU2hvdWxkIG5ldmVyIGJlIG5lZWRlZCBmb3Igbm9ybWFsIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJhY3Qgd2l0aCBkZXZpY2UgYWRtaW4iPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IkFsbG93cyB0aGUgYXBwIHRvIHVzZSBTdXJmYWNlRmxpbmdlciBsb3ctbGV2ZWwgZmVhdHVyZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4icmVhZCBmcmFtZSBidWZmZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iQWxsb3dzIHRoZSBhcHAgdG8gcmVhZCB0aGUgY29udGVudCBvZiB0aGUgZnJhbWUgYnVmZmVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImFjY2VzcyBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iQWxsb3dzIHRoZSBhcHAgdG8gdXNlIElucHV0RmxpbmdlciBsb3ctbGV2ZWwgZmVhdHVyZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmUgV2ktRmkgZGlzcGxheXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJBbGxvd3MgdGhlIGFwcCB0byBjb25maWd1cmUgYW5kIGNvbm5lY3QgdG8gV2ktRmkgZGlzcGxheXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJjb250cm9sIFdpLUZpIGRpc3BsYXlzIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IkFsbG93cyB0aGUgYXBwIHRvIG1vZGlmeSBnbG9iYWwgYXVkaW8gc2V0dGluZ3Mgc3VjaCBhcyB2b2x1bWUgYW5kIHdoaWNoIHNwZWFrZXIgaXMgdXNlZCBmb3Igb3V0cHV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4icmVjb3JkIGF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iQWxsb3dzIHRoZSBhcHAgdG8gcmVjb3JkIGF1ZGlvIHdpdGggdGhlIG1pY3JvcGhvbmUuIFRoaXMgcGVybWlzc2lvbiBhbGxvd3MgdGhlIGFwcCB0byByZWNvcmQgYXVkaW8gYXQgYW55IHRpbWUgd2l0aG91dCB5b3VyIGNvbmZpcm1hdGlvbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+IlNJTSBjb21tdW5pY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4iQWxsb3dzIHRoZSBhcHAgdG8gc2VuZCBjb21tYW5kcyB0byB0aGUgU0lNLiBUaGlzIGlzIHZlcnkgZGFuZ2Vyb3VzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+InRha2UgcGljdHVyZXMgYW5kIHZpZGVvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJBbGxvd3MgdGhlIGFwcCB0byB0YWtlIHBpY3R1cmVzIGFuZCB2aWRlb3Mgd2l0aCB0aGUgY2FtZXJhLiBUaGlzIHBlcm1pc3Npb24gYWxsb3dzIHRoZSBhcHAgdG8gdXNlIHRoZSBjYW1lcmEgYXQgYW55IHRpbWUgd2l0aG91dCB5b3VyIGNvbmZpcm1hdGlvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiJkaXNhYmxlIHRyYW5zbWl0IGluZGljYXRvciBMRUQgd2hlbiBjYW1lcmEgaXMgaW4gdXNlIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iSG9tZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiJXb3JrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJPdGhlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJObyBhcHBsaWNhdGlvbiBmb3VuZCB0byB2aWV3IHRoaXMgY29udGFjdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJUeXBlIFBJTiBjb2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iVHlwZSBQVUsgYW5kIG5ldyBQSU4gY29kZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIGNvZGUiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iQ2hvb3NlIGFuIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IkNvdWxkblwndCBsYXVuY2ggPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IlNoYXJlIHdpdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iU2hhcmUgd2l0aCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IlNsaWRpbmcgaGFuZGxlLiBUb3VjaCAmYW1wOyBob2xkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJTbGlkZSB1cCBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IlNsaWRlIGRvd24gZm9yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJTbGlkZSBsZWZ0IGZvciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IlNsaWRlIHJpZ2h0IGZvciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJVbmxvY2siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iQ2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlNpbGVudCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJTb3VuZCBvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iU2VhcmNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iU3dpcGUgdG8gdW5sb2NrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJQbHVnIGluIGEgaGVhZHNldCB0byBoZWFyIHBhc3N3b3JkIGtleXMgc3Bva2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IkRvdCI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoIGF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJXaXJlbGVzcyBkaXNwbGF5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IkRvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNZWRpYSBvdXRwdXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IkNvbm5lY3QgdG8gZGV2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iQ2FzdCBzY3JlZW4gdG8gZGV2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iU2VhcmNoaW5nIGZvciBkZXZpY2Vz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iU2V0dGluZ3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iRGlzY29ubmVjdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJTY2FubmluZy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IkNvbm5lY3RpbmcuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkF2YWlsYWJsZSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Ik92ZXJsYXkgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzZWN1cmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IldpcmVsZXNzIGRpc3BsYXkgaXMgY29ubmVjdGVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IlRoaXMgc2NyZWVuIGlzIHNob3dpbmcgb24gYW5vdGhlciBkZXZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iQ2FzdGluZyBzY3JlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJDb25uZWN0aW5nIHRvIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkNhc3Rpbmcgc2NyZWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJDb25uZWN0ZWQgdG8gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkRpc2Nvbm5lY3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IkVtZXJnZW5jeSBjYWxsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iRm9yZ290IFBhdHRlcm4iPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlRyeSBhZ2FpbiBsYXRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJTd2lwZSBkb3duIGZyb20gdGhlIHRvcCB0byBleGl0IGZ1bGwgc2NyZWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iRmluaXNoZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJIb3VycyBjaXJjdWxhciBzbGlkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+Ik1pbnV0ZXMgY2lyY3VsYXIgc2xpZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlNlbGVjdCBob3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IlNlbGVjdCBtaW51dGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJNb250aCBncmlkIG9mIGRheXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJZZWFyIGxpc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlNlbGVjdCBtb250aCBhbmQgZGF5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iU2VsZWN0IHllYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IHNlbGVjdGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gZGVsZXRlZCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAppbmRleCBlYjczMWEzLi4xOTA1MjE5IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iSW5ncmVzYSB1biBjw7NkaWdvIFBVSyBkZSBvY2hvIG7Dum1lcm9zIG8gbcOhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iVHUgdGFyamV0YSBTSU0gZXN0w6EgYmxvcXVlYWRhIGNvbiBQVUsuIEVzY3JpYmUgZWwgY8OzZGlnbyBQVUsgcGFyYSBkZXNibG9xdWVhcmxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkVzY3JpYmlyIFBVSzIgcGFyYSBkZXNibG9xdWVhciBsYSB0YXJqZXRhIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJFcnJvcjsgaGFiaWxpdGEgZWwgYmxvcXVlbyBkZSBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJUZSBxdWVkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50byBhbnRlcyBkZSBxdWUgc2UgYmxvcXVlZSBsYSB0YXJqZXRhIFNJTS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJUZSBxdWVkYW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudG9zIGFudGVzIGRlIHF1ZSBzZSBibG9xdWVlIGxhIHRhcmpldGEgU0lNLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSWRlbnRpZmljYWRvciBkZSBsbGFtYWRhcyBlbnRyYW50ZXMiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlBlcm1pdGUgYWwgdGl0dWxhciB2aW5jdWxhcnNlIGEgbGEgaW50ZXJmYXogZGUgbml2ZWwgc3VwZXJpb3IgZGUgdW4gc2VydmljaW8gZGUgVlBOLiBMYXMgYXBsaWNhY2lvbmVzIG5vcm1hbGVzIG5vIGRlYmVyw61hbiBuZWNlc2l0YXIgZXN0ZSBwZXJtaXNvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJ2aW5jdWxhciBhIHVuIGZvbmRvIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJQZXJtaXRlIGFsIHByb3BpZXRhcmlvIHZpbmN1bGFyc2UgYSBsYSBpbnRlcmZheiBkZSBuaXZlbCBzdXBlcmlvciBkZSB1biBmb25kbyBkZSBwYW50YWxsYS4gTGFzIGFwbGljYWNpb25lcyBub3JtYWxlcyBubyBkZWJlbiB1dGlsaXphciBlc3RlIHBlcm1pc28uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJ2aW5jdWxhciBhIHVuYSBwYW50YWxsYSByZW1vdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJQZXJtaXRlIGFsIHByb3BpZXRhcmlvIHZpbmN1bGFyc2UgYSBsYSBpbnRlcmZheiBkZSBuaXZlbCBzdXBlcmlvciBkZSB1bmEgcGFudGFsbGEgcmVtb3RhLiBMYXMgYXBsaWNhY2lvbmVzIG5vcm1hbGVzIG5vIGRlYmVyw61hbiBuZWNlc2l0YXIgZXN0ZSBwZXJtaXNvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InZpbmN1bGFyIGEgdW4gc2VydmljaW8gZGUgd2lkZ2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlBlcm1pdGUgYWwgcHJvcGlldGFyaW8gdmluY3VsYXJzZSBhIGxhIGludGVyZmF6IGRlIG5pdmVsIHN1cGVyaW9yIGRlbCBzZXJ2aWNpbyBkZSB3aWRnZXQuIExhcyBhcGxpY2FjaW9uZXMgbm9ybWFsZXMgbm8gZGViZXLDrWFuIG5lY2VzaXRhciBlc3RlIHBlcm1pc28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJhY3R1YXIgY29uIHVuIGFkbWluaXN0cmFkb3IgZGUgZGlzcG9zaXRpdm9zIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiB1dGlsaWNlIGZ1bmNpb25lcyBkZSBTdXJmYWNlRmxpbmdlciBkZSBiYWpvIG5pdmVsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImxlZXIgZWwgYsO6ZmVyIGRlIHRyYW1hcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBsZWEgZWwgY29udGVuaWRvIGRlbCBiw7pmZXIgZGUgdHJhbWFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImFjY2VkZXIgYSBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iUGVybWl0ZSBxdWUgbGEgYXBsaWNhY2nDs24gdXRpbGljZSBmdW5jaW9uZXMgZGUgSW5wdXRGbGluZ2VyIGRlIGJham8gbml2ZWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmFyIHBhbnRhbGxhcyBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIGNvbmZpZ3VyZSB5IHNlIGNvbmVjdGUgYSBwYW50YWxsYXMgV2ktRmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJjb250cm9sYXIgcGFudGFsbGFzIFdpLUZpIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIG1vZGlmaXF1ZSBsYSBjb25maWd1cmFjacOzbiBkZSBhdWRpbyBnbG9iYWwsIHBvciBlamVtcGxvLCBlbCB2b2x1bWVuIHkgZWwgYWx0YXZveiBkZSBzYWxpZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJncmFiYXIgYXVkaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBncmFiZSBhdWRpbyBjb24gZWwgbWljcsOzZm9uby4gTGEgYXBsaWNhY2nDs24gcHVlZGUgdXRpbGl6YXIgZXN0ZSBwZXJtaXNvIHBhcmEgZ3JhYmFyIGF1ZGlvIGVuIGN1YWxxdWllciBtb21lbnRvIHNpbiB0ZW5lciB0dSBjb25maXJtYWNpw7NuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4iQ29tdW5pY2FjacOzbiBjb24gdGFyamV0YSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBlbnbDrWUgY29tYW5kb3MgYSBsYSB0YXJqZXRhIFNJTS4gVXNhciBlc3RlIHBlcm1pc28gZXMgcGVsaWdyb3NvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+InRvbWFyIGZvdG9ncmFmw61hcyB5IGdyYWJhciB2aWRlb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iUGVybWl0ZSBxdWUgbGEgYXBsaWNhY2nDs24gc2FxdWUgZm90b3MgbyBncmFiZSB2aWRlb3MgY29uIGxhIGPDoW1hcmEuIEVzdGUgcGVybWlzbyBhdXRvcml6YSBhIGxhIGFwbGljYWNpw7NuIGEgdXRpbGl6YXIgbGEgY8OhbWFyYSBlbiBjdWFscXVpZXIgbW9tZW50byBzaW4gdHUgY29uZmlybWFjacOzbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiJJbmhhYmlsaXRhciBlbCBpbmRpY2Fkb3IgTEVEIGRlIHRyYW5zbWlzacOzbiBtaWVudHJhcyBzZSB1dGlsaXphIGxhIGPDoW1hcmEiPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiJDYXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IlRyYWJham8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+Ik90cm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4iTm8gc2UgZW5jb250csOzIG5pbmd1bmEgYXBsaWNhY2nDs24gcGFyYSB2ZXIgZXN0ZSBjb250YWN0by4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJbmdyZXNhIGVsIGPDs2RpZ28gUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iRXNjcmliZSBlbCBjw7NkaWdvIFBVSyB5IHVuIG51ZXZvIGPDs2RpZ28gUElOLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iQ8OzZGlnbyBQVUsiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJNYXnDunNjdWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iSW5ncmVzYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJFbGlnZSB1bmEgYXBsaWNhY2nDs24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iTm8gc2UgcHVkbyBhYnJpciA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkNvbXBhcnRpciBjb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iQ29tcGFydGlyIGNvbiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+Ik1hbnTDqW4gcHJlc2lvbmFkbyBlbCBjb250cm9sYWRvciBkZXNsaXphbnRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgYXJyaWJhIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkRlc2xpemEgZWwgZGVkbyBoYWNpYSBhYmFqbyBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgbGEgaXpxdWllcmRhIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgbGEgZGVyZWNoYSBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkRlc2Jsb3F1ZWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkPDoW1hcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2lsZW5jaW9zbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJTb25pZG8gYWN0aXZhZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkJ1c2NhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkRlc2xpemEgZWwgZGVkbyBwYXJhIGRlc2Jsb3F1ZWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJDb25lY3RhIHVuIGF1cmljdWxhciBwYXJhIGVzY3VjaGFyIGxhcyBjb250cmFzZcOxYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUHVudG8iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTaXN0ZW1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJBdWRpbyBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlBhbnRhbGxhIGluYWzDoW1icmljYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJMaXN0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IlNhbGlkYSBtdWx0aW1lZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJDb25lY3RhciBhbCBkaXNwb3NpdGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IlRyYW5zbWl0aXIgcGFudGFsbGEgYSBkaXNwb3NpdGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IkJ1c2NhbmRvIGRpc3Bvc2l0aXZvc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IkNvbmZpZ3VyYWNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkRlc2NvbmVjdGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IkV4YW1pbmFuZG8uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJDb25lY3RhbmRvLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJEaXNwb25pYmxlIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iU3VwZXJwb3NpY2nDs24gIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+IHggPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IHBwcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHNlZ3VyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iU2UgY29uZWN0w7MgbGEgcGFudGFsbGEgaW5hbMOhbWJyaWNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkVzdGEgcGFudGFsbGEgc2UgbXVlc3RyYSBlbiBvdHJvIGRpc3Bvc2l0aXZvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJUcmFuc21pdGllbmRvIHBhbnRhbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iRXN0YWJsZWNpZW5kbyBjb25leGnDs24gY29uIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IlRyYW5zbWl0aWVuZG8gcGFudGFsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IlNlIGVzdGFibGVjacOzIGNvbmV4acOzbiBjb24gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJEZXNjb25lY3RhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iUmVhbGl6YXIgbGxhbWFkYSBkZSBlbWVyZ2VuY2lhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iwr9PbHZpZGFzdGUgZWwgcGF0csOzbj8iPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTksMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iSW50ZW50YXIgZW4gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gcyI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJWdWVsdmUgYSBpbnRlbnRhciBtw6FzIHRhcmRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJTYWxpciBkZSBwYW50YWxsYSBjb21wbGV0YTogZGVzbGl6YXIgYWJham8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iRGVzbGl6YSBlbCBkZWRvIGhhY2lhIGFiYWpvIHBhcmEgc2FsaXIgZGUgbGEgcGFudGFsbGEgY29tcGxldGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJMaXN0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkNvbnRyb2wgZGVzbGl6YW50ZSBjaXJjdWxhciBkZSBob3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iQ29udHJvbCBkZXNsaXphbnRlIGNpcmN1bGFyIGRlIG1pbnV0b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iU2VsZWNjaW9uYXIgaG9yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTZWxlY2Npb25hciBtaW51dG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJDdWFkcsOtY3VsYSBtZW5zdWFsIGRlIGTDrWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTGlzdGEgZGUgYcOxb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlNlbGVjY2lvbmFyIG1lcyB5IGTDrWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJTZWxlY2Npb25hciBhw7FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBzZWxlY2Npb25hZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBib3JyYWRvIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAppbmRleCBhODlmMzVhLi45YjU4ZTJkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IkVzY3JpYmUgdW4gY8OzZGlnbyBQVUsgZGUgb2NobyBjYXJhY3RlcmVzIG8gbcOhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iTGEgdGFyamV0YSBTSU0gZXN0w6EgYmxvcXVlYWRhIGNvbiBlbCBjw7NkaWdvIFBVSy4gSW50cm9kdWNlIGVsIGPDs2RpZ28gUFVLIHBhcmEgZGVzYmxvcXVlYXJsYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJJbnRyb2R1Y2UgZWwgY8OzZGlnbyBQVUsyIHBhcmEgZGVzYmxvcXVlYXIgbGEgdGFyamV0YSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iRXJyb3IsIGhhYmlsaXRhciBibG9xdWVvIGRlIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IlRlIHF1ZWRhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBpbnRlbnRvIHBhcmEgYmxvcXVlYXIgbGEgdGFyamV0YSBTSU0uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iUXVlZGFuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBpbnRlbnRvcyBwYXJhIGJsb3F1ZWFyIGxhIHRhcmpldGEgU0lNLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSUQgZGUgZW1pc29yIGRlIGxsYW1hZGEgZW50cmFudGUiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlBlcm1pdGUgZW5sYXphciBjb24gbGEgaW50ZXJmYXogZGUgbml2ZWwgc3VwZXJpb3IgZGUgdW4gc2VydmljaW8gZGUgVlBOLiBMYXMgYXBsaWNhY2lvbmVzIG5vcm1hbGVzIG5vIGRlYmVyw61hbiBuZWNlc2l0YXIgZXN0ZSBwZXJtaXNvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJlbmxhemFyIGNvbiB1biBmb25kbyBkZSBwYW50YWxsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iUGVybWl0ZSBlbmxhemFyIGNvbiBsYSBpbnRlcmZheiBkZSBuaXZlbCBzdXBlcmlvciBkZSB1biBmb25kbyBkZSBwYW50YWxsYS4gTGFzIGFwbGljYWNpb25lcyBub3JtYWxlcyBubyBkZWJlcsOtYW4gbmVjZXNpdGFyIGVzdGUgcGVybWlzby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+ImVubGF6YXIgYSB1bmEgcGFudGFsbGEgcmVtb3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iUGVybWl0ZSBlbmxhemFyIGNvbiBsYSBpbnRlcmZheiBkZSBuaXZlbCBzdXBlcmlvciBkZSB1bmEgcGFudGFsbGEgcmVtb3RhLiBMYXMgYXBsaWNhY2lvbmVzIG5vcm1hbGVzIG5vIGRlYmVyw61hbiBuZWNlc2l0YXIgZXN0ZSBwZXJtaXNvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ImVubGF6YXIgY29uIHVuIHNlcnZpY2lvIGRlIHdpZGdldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJQZXJtaXRlIGVubGF6YXIgY29uIGxhIGludGVyZmF6IGRlIG5pdmVsIHN1cGVyaW9yIGRlIHVuIHNlcnZpY2lvIGRlIHdpZGdldC4gTGFzIGFwbGljYWNpb25lcyBub3JtYWxlcyBubyBkZWJlcsOtYW4gbmVjZXNpdGFyIGVzdGUgcGVybWlzby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJpbnRlcmFjdHVhciBjb24gZWwgYWRtaW5pc3RyYWRvciBkZSB1biBkaXNwb3NpdGl2byI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iUGVybWl0ZSBxdWUgbGEgYXBsaWNhY2nDs24gdXNlIGZ1bmNpb25lcyBkZSBTdXJmYWNlRmxpbmdlciBkZSBuaXZlbCBpbmZlcmlvci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJsZWVyIG1lbW9yaWEgZGUgYWxtYWNlbmFtaWVudG8gaW50ZXJtZWRpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBsZWEgZWwgY29udGVuaWRvIGRlIGxhIG1lbW9yaWEgZGUgYWxtYWNlbmFtaWVudG8gaW50ZXJtZWRpby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJhY2NlZGVyIGEgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIHV0aWxpY2UgZnVuY2lvbmVzIGRlIGJham8gbml2ZWwgZGUgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmFyIHBhbnRhbGxhcyBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIGNvbmZpZ3VyZSBwYW50YWxsYXMgV2ktRmkgeSBzZSBjb25lY3RlIGEgZWxsYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJjb250cm9sYXIgcGFudGFsbGFzIFdpLUZpIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIG1vZGlmaXF1ZSBsYSBjb25maWd1cmFjacOzbiBkZSBhdWRpbyBnbG9iYWwgKHBvciBlamVtcGxvLCBlbCB2b2x1bWVuIHkgZWwgYWx0YXZveiBkZSBzYWxpZGEpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4iZ3JhYmFyIHNvbmlkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIGdyYWJlIGF1ZGlvIGNvbiBlbCBtaWNyw7Nmb25vLiBMYSBhcGxpY2FjacOzbiBwdWVkZSB1dGlsaXphciBlc3RlIHBlcm1pc28gcGFyYSBncmFiYXIgYXVkaW8gZW4gY3VhbHF1aWVyIG1vbWVudG8gc2luIHRlbmVyIGxhIGNvbmZpcm1hY2nDs24gZGVsIHVzdWFyaW8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJjb211bmljYWNpw7NuIGNvbiBsYSB0YXJqZXRhIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIGVudsOtZSBjb21hbmRvcyBhIGxhIHRhcmpldGEgU0lNLiBFc3RlIHBlcm1pc28gZXMgbXV5IHBlbGlncm9zby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJyZWFsaXphciBmb3RvZ3JhZsOtYXMgeSB2w61kZW9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIGhhZ2EgZm90b3MgbyBncmFiZSB2w61kZW9zIGNvbiBsYSBjw6FtYXJhLiBFc3RlIHBlcm1pc28gYXV0b3JpemEgYSBsYSBhcGxpY2FjacOzbiBhIHV0aWxpemFyIGxhIGPDoW1hcmEgZW4gY3VhbHF1aWVyIG1vbWVudG8gc2luIHR1IGNvbmZpcm1hY2nDs24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4iaW5oYWJpbGl0YXIgZWwgaW5kaWNhZG9yIExFRCBkZSB0cmFuc21pc2nDs24gbWllbnRyYXMgc2UgdXRpbGl6YSBsYSBjw6FtYXJhIjwvc3RyaW5nPgpAQCAtNzgzLDcgKzc5NCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sWWFob28iIG1zZ2lkPSI4MjcxNDM5NDA4NDY5MDIxMjczIj4iWWFob28hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFNreXBlIiBtc2dpZD0iOTAxOTI5Njc0NDYyMjgzMjk1MSI+IlNreXBlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFFxIiBtc2dpZD0iODg4NzQ4NDM3OTQ5NDExMTg4NCI+IlFRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiJDb252ZXJzYWNpb25lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xHb29nbGVUYWxrIiBtc2dpZD0iNDkzOTAyMzIxMTQwMjc3MzA0Ij4iSGFuZ291dHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSWNxIiBtc2dpZD0iMTU3NDg3MDQzMzYwNjUxNzMxNSI+IklDUSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xKYWJiZXIiIG1zZ2lkPSIyMjc5OTE3NjMwODc1NzcxNzIyIj4iSmFiYmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE5ldE1lZXRpbmciIG1zZ2lkPSI4Mjg3NjI1NjU1OTg2ODI3OTcxIj4iTmV0TWVldGluZyI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IkNhc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iVHJhYmFqbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iT3RybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJObyBzZSBoYSBlbmNvbnRyYWRvIG5pbmd1bmEgYXBsaWNhY2nDs24gcGFyYSB2ZXIgZXN0ZSBjb250YWN0by4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJbnRyb2R1Y2UgZWwgY8OzZGlnbyBQSU4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iSW50cm9kdWNlIGVsIGPDs2RpZ28gUFVLIHkgdW4gbnVldm8gY8OzZGlnbyBQSU4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDw7NkaWdvIFBVSyI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+Ik1hecO6cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkludHJvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iU2VsZWNjaW9uYXIgdW5hIGFwbGljYWNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iTm8gc2UgaGEgcG9kaWRvIGFicmlyIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJDb21wYXJ0aXIgY29uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkNvbXBhcnRpciBjb24gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJNYW50w6luIHB1bHNhZG8gZWwgaWNvbm8gZGUgZGVzYmxvcXVlbyB5IGRlc2zDrXphbG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkRlc2xpemEgZWwgZGVkbyBoYWNpYSBhcnJpYmEgcGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iRGVzbGl6YSBlbCBkZWRvIGhhY2lhIGFiYWpvIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkRlc2xpemEgZWwgZGVkbyBoYWNpYSBsYSBpenF1aWVyZGEgcGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkRlc2xpemEgZWwgZGVkbyBoYWNpYSBsYSBkZXJlY2hhIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iRGVzYmxvcXVlYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iQ8OhbWFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTaWxlbmNpbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJTb25pZG8gYWN0aXZhZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkJ1c2NhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkRlc2xpemEgZWwgZGVkbyBwYXJhIGRlc2Jsb3F1ZWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJDb25lY3RhIHVuIGF1cmljdWxhciBwYXJhIGVzY3VjaGFyIGxhcyBjb250cmFzZcOxYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUHVudG8iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTaXN0ZW1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJBdWRpbyBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlBhbnRhbGxhIGluYWzDoW1icmljYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJGaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJTYWxpZGEgbXVsdGltZWRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iQ29uZWN0YXIgYSBkaXNwb3NpdGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IkVudmlhciBwYW50YWxsYSBhIGRpc3Bvc2l0aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iQnVzY2FuZG8gZGlzcG9zaXRpdm9z4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iQWp1c3RlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJEZXNjb25lY3RhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJBbmFsaXphbmRvLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iQ29uZWN0YW5kby4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iRGlzcG9uaWJsZSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlN1cGVycG9zaWNpw7NuICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzZWd1cm8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IlBhbnRhbGxhIGluYWzDoW1icmljYSBjb25lY3RhZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iRXN0YSBwYW50YWxsYSBzZSBtdWVzdHJhIGVuIG90cm8gZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IkVudmlhbmRvIHBhbnRhbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iQ29uZWN0YW5kbyBhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkVudmlhbmRvIHBhbnRhbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJDb25lY3RhZG8gYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iRGVzY29uZWN0YXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IkxsYW1hZGEgZGUgZW1lcmdlbmNpYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IsK/SGFzIG9sdmlkYWRvIGVsIHBhdHLDs24/Ijwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjYwLDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJWb2x2ZXIgYSBpbnRlbnRhciBtw6FzIHRhcmRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkRlc2xpemEgZWwgZGVkbyBoYWNpYSBhYmFqbyBwYXJhIHNhbGlyIGRlIGxhIHBhbnRhbGxhIGNvbXBsZXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJMaXN0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkNvbnRyb2wgZGVzbGl6YW50ZSBjaXJjdWxhciBkZSBob3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iQ29udHJvbCBkZXNsaXphbnRlIGNpcmN1bGFyIGRlIG1pbnV0b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iU2VsZWNjaW9uYXIgaG9yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTZWxlY2Npb25hciBtaW51dG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJDdWFkcsOtY3VsYSBtZW5zdWFsIGRlIGTDrWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTGlzdGEgZGUgYcOxb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlNlbGVjY2lvbmFyIG1lcyB5IGTDrWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJTZWxlY2Npb25hciBhw7FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBzZWxlY2Npb25hZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBlbGltaW5hZG8iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKaW5kZXggNzQyZDNkYS4uYWFkZWNhOSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlNpc2VzdGFnZSA4LSB2w7VpIGVuYW1hbnVtYnJpbGluZSBQVUsta29vZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iU0lNLWthYXJ0IG9uIFBVSy1sdWt1c3RhdHVkLiBBdmFtaXNla3Mgc2lzZXN0YWdlIFBVSy1rb29kLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNpc2VzdGFnZSBTSU0ta2FhcmRpIGJsb2tlZXJpbmd1IHTDvGhpc3RhbWlzZWtzIFBVSzIta29vZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJFYmHDtW5uZXN0dXMsIFNJTS1pL1JVSU0taSBsdWt1c3R1c2UgbHViYW1pbmUuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iVGVpbCBvbiBlbm5lIFNJTS1pIGx1a3VzdHVtaXN0IGrDpMOkbnVkIHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthdHNlLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IlRlaWwgb24gZW5uZSBTSU0taSBsdWt1c3R1bWlzdCBqw6TDpG51ZCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYXRzZXQuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJTaXNzZXR1bGV2YSBrw7VuZSBoZWxpc3RhamEgSUQiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlbDtWltYWxkYWIgb21hbmlrdWwgc2lkdWRhIFZQTi10ZWVudXNlIMO8bGF0YXNlbWUgbGlpZGVzZWdhLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4idGF1c3RhcGlsZGlnYSBzaWR1bWluZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iTHViYWIgb21hbmlrdWwgc2lkdWRhIHRhdXN0YXBpbGRpIMO8bGF0YXNlbWUgbGlpZGVzZWdhLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+ImthdWdla3JhYW5pZ2Egc2lkdW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJMdWJhYiBvbWFuaWt1bCBzaWR1ZGEgcmFrZW5kdXNlIGthdWdla3JhYW5pIMO8bGF0YXNlbWUgbGlpZGVzZWdhLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJ2aWRpbmF0ZWVudXNlZ2Egc2lkdW1pbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iTHViYWIgb21hbmlrdWwgc2lkdWRhIHZpZGluYSB0ZWVudXNlIMO8bGF0YXNlbWUgbGlpZGVzZWdhLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJzZWFkbWUgYWRtaW5pc3RyYWF0b3JpZ2Egc3VodGxlbWluZSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGthc3V0YWRhIFN1cmZhY2VGbGluZ2VyaSBtYWRhbGF0YXNlbWVsaXNpIGZ1bmt0c2lvb25lLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImxvZSBrYWFkcmlwdWh2cml0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBrYWFkcmlwdWh2cmkgc2lzdSBsdWdlZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4ianV1cmRlcMOkw6RzIElucHV0RmxpbmdlcmlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJMdWJhYiByYWtlbmR1c2VsIGthc3V0YWRhIElucHV0RmxpbmdlcmkgbWFkYWxhdGFzZW1lbGlzaSBmdW5rdHNpb29uZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IldpRmktZWtyYWFuaWRlIHNlYWRpc3RhbWluZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+Ikx1YmFiIHJha2VuZHVzZWwgc2VhZGlzdGFkYSBXaUZpLWVrcmFhbmUgamEgbmVuZGVnYSDDvGhlbmR1cyBsdXVhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV2lGaS1la3JhYW5pZGUganVodGltaW5lIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSDDvGxkaXNlaWQgaGVsaXNlYWRlaWQsIG7DpGl0ZWtzIGhlbGl0dWdldnVzdCBqYSBzZWRhLCBtaWxsaXN0IGvDtWxhcml0IGthc3V0YXRha3NlIHbDpGxqdW5kaWtzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4ic2FsdmVzdGEgaGVsaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBzYWx2ZXN0YWRhIG1pa3JvZm9uaWdhIGhlbGkuIFNlZSBsdWJhIHbDtWltYWxkYWIgcmFrZW5kdXNlbCBzYWx2ZXN0YWRhIGhlbGkgaWdhbCBhamFsIGlsbWEgdGVpZSBraW5uaXR1c2V0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+InNpZGUgU0lNLWthYXJkaWdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4iTHViYWIgcmFrZW5kdXNlbCBzYWF0YSBrw6Rza2UgU0lNLWthYXJkaWxlLiBTZWUgb24gdsOkZ2Egb2h0bGlrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+InBpbHRpZGUgamEgdmlkZW90ZSB0ZWdlbWluZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGVoYSBrYWFtZXJhZ2EgcGlsdGUgamEgdmlkZW9pZC4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c2VsIGthc3V0YWRhIGthYW1lcmF0IG1pcyB0YWhlcyBhamFsIHRlaWUga2lubml0dXNldGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4ia2VlbGEga2FhbWVyYSBrYXN1dGFtaXNlbCBuw6RpZGlrdXR1bGUga2FzdXRhbWluZSI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IktvZHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iVMO2w7YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+Ik11dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJTZWxsZSBrb250YWt0aSBrdXZhbWlzZWtzIGVpIGxlaXR1ZCDDvGh0ZWdpIHJha2VuZHVzdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJTaXNlc3RhZ2UgUElOLWtvb2QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJTaXNlc3RhZ2UgUFVLLWtvb2QgamEgdXVzIFBJTi1rb29kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsta29vZCI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlTDtXN0dWtsYWh2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iU2lzZXN0dXNrbGFodiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlZhbGlnZSByYWtlbmR1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IlJha2VuZHVzdCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IGVpIMO1bm5lc3R1bnVkIGvDpGl2aXRhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJKYWdhOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJKYWdhIHJha2VuZHVzZWdhIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iTGliaXN0YW1pc3BpZGUuIFB1dWR1dGFnZSBqYSBob2lka2UgYWxsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJMb2hpc3RhZ2Ugw7xsZXM6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJMb2hpc3RhZ2UgYWxsYTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkxvaGlzdGFnZSB2YXNha3VsZTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJMb2hpc3RhZ2UgcGFyZW1hbGU6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Ikx1a3UgYXZhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYWFtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IkjDpMOkbGV0dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJIZWxpIG9uIHNlZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Ik90c2luZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkF2YW1pc2VrcyB0w7VtbWFrZSBzw7VybWVnYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUGFyb29saWRlIGt1dWxhbWlzZWtzIMO8aGVuZGFnZSBwZWFrb21wbGVrdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJQdW5rdC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTw7xzdGVlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoLWhlbGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+Ikp1aHRtZXRhIGVrcmFhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJWYWxtaXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNZWVkaWF2w6RsanVuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iU2VhZG1lZ2Egw7xoZW5kYW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJFa3JhYW5pa3V2YSDDvGxla2FuZG1pbmUgc2VhZG1lc3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iU2VhZG1ldGUgb3RzaW1pbmUg4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iU2VhZGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkthdGtlc3RhIMO8aGVuZHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNrYW5lZXJpbmcgLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iw5xoZW5kYW4uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IlNhYWRhdmFsIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iw5xsZWthdGUgbnIgLjx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+IHggPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHR1cnZhbGluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iSnVodG1ldGEgZWtyYWFuacO8aGVuZHVzIG9uIGxvb2R1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJFa3JhYW4gb24gbsOkaGEgdGVpc2VzIHNlYWRtZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iRWtyYWFuaWt1dmEgw7xsZWthbmRtaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iw5xoZW5kYW1pbmUgZWtyYWFuaWdhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkVrcmFhbmlrdXZhIMO8bGVrYW5kbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iw5xoZW5kYXR1ZCBla3JhYW5pZ2EgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkthdGtlc3RhIMO8aGVuZHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJIw6RkYWFiaWvDtW5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iVW51c3Rhc2luIG11c3RyaSI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1OSwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiJQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlByb292aWdlIGhpbGplbSB1dWVzdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iVMOkaXNla3JhYW5pIHN1bGdlbWlzZWtzIHDDvGhraWdlIMO8bGV2YWx0IGFsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iVMOkaXNla3JhYW5pbHQgdsOkbGp1bWlzZWtzIHDDvGhraWdlIMO8bGV2YWx0IGFsbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJWYWxtaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJSaW5naWt1anVsaW5lIHR1bm5pbGl1Z3VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJSaW5naWt1anVsaW5lIG1pbnV0aWxpdWd1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJUdW5kaWRlIHZhbGltaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iTWludXRpdGUgdmFsaW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IlDDpGV2YWQga3V1IHJ1dWR1c3Rpa3VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iQWFzdGF0ZSBsb2VuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iS3V1IGphIHDDpGV2YSB2YWxpbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IkFhc3RhIHZhbGltaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBvbiB2YWxpdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gb24ga3VzdHV0YXR1ZCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC9kb25vdHRyYW5zbGF0ZS1jbGRyLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXQvZG9ub3R0cmFuc2xhdGUtY2xkci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDQ5ZGIyNDAuLjAwMDAwMDAKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC9kb25vdHRyYW5zbGF0ZS1jbGRyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im51bWVyaWNfZGF0ZV90ZW1wbGF0ZSI+IiVzLiVzLiVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibW9udGhfZGF5X3llYXIiPiUtZSAlQiAlWTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9vZl9kYXkiPiUtazolTTolUzwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9hbmRfdGltZSI+JS1rOiVNOiVTICVkLiVtLiVZPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWUiPiUyJHMgJTEkczwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE4MzJjOC4uMDAwMDAwMAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCi0qKgotKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImJ5dGVTaG9ydCIgbXNnaWQ9IjgzNDA5NzM4OTI3NDIwMTkxMDEiPiJCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2lsb2J5dGVTaG9ydCIgbXNnaWQ9IjU5NzM3ODk3ODM1MDQ3NzE4NzgiPiJrQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZ2FieXRlU2hvcnQiIG1zZ2lkPSI2MzU1ODUxNTc2NzcwNDI4OTIyIj4iTUIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnaWdhYnl0ZVNob3J0IiBtc2dpZD0iMzI1OTg4MjQ1NTIxMjE5MzIxNCI+IkdCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGVyYWJ5dGVTaG9ydCIgbXNnaWQ9IjIzMTYxMzAxODE1OTE4Njk2MiI+IlRCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGV0YWJ5dGVTaG9ydCIgbXNnaWQ9IjU2Mzc4MTY2ODAxNDQ5OTAyMTkiPiJQQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbGVTaXplU3VmZml4IiBtc2dpZD0iOTE2NDI5Mjc5MTUwMDUzMTk0OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJHM8L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDtQZWFsa2lyamF0YSZndDsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpcyIgbXNnaWQ9Ijc4OTk4Mjk1MTYwNDg4MTMyMzciPiLigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpc190d29fZG90cyIgbXNnaWQ9IjEyMjgwNzg5OTQ4NjYwMzA3MzYiPiLigKUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIgbXNnaWQ9Ijc2OTQwNjMwNDIwNzk2NzY1MTciPiIoVGVsZWZvbmludW1icml0IHBvbGUpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idW5rbm93bk5hbWUiIG1zZ2lkPSIyMjc3NTU2NTQ2NzQyNzQ2NTIyIj4iKFR1bmRtYXR1KSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiJLw7VuZXBvc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0TXNpc2RuQWxwaGFUYWciIG1zZ2lkPSIyODUwODg5NzU0OTE5NTg0Njc0Ij4iTVNJU0ROMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+IsOcaGVuZHVzcHJvYmxlZW0gdsO1aSBrZWh0ZXR1IE1NSS1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUZkbkVycm9yIiBtc2dpZD0iNTIyNDM5ODIxNjM4NTMxNjQ3MSI+IlRvaW1pbmcgb24gYWludWx0IGZpa3NlZXJpdHVkIHZhbGltaXNudW1icml0ZWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkIiBtc2dpZD0iODE0NzI3ODM0NjQxNDcxNDMxNSI+IlRlZW51cyBvbiBsdWJhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkRm9yIiBtc2dpZD0iNjg1NjIyODE0MDQ1MzQ3MTA0MSI+IlRlZW51cyBvbGkgbHViYXR1ZCBqw6RyZ21pc2VsZToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRGlzYWJsZWQiIG1zZ2lkPSIxOTM3NTUzMjI2NTkyNTE2NDExIj4iVGVlbnVzIG9uIGtlZWxhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VSZWdpc3RlcmVkIiBtc2dpZD0iNjI3NTAxOTA4MjU5ODEwMjQ5MyI+IlJlZ2lzdHJlZXJpbWluZSDDtW5uZXN0dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiJLdXN0dXRhbWluZSBvbGkgZWR1a2FzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkSW5jb3JyZWN0IiBtc2dpZD0iNzYxMjIwODgzOTQ1MDEyODcxNSI+IlZhbGUgcGFyb29sLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUNvbXBsZXRlIiBtc2dpZD0iODIzMjUyNzQ5NTQxMTY5ODM1OSI+Ik1NSSBvbiBsw7VwdWxlIHZpaWR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4iU2lzZXN0YXR1ZCB2YW5hIFBJTi1rb29kIHBvbGUgw7VpZ2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFkUHVrIiBtc2dpZD0iNTQ4NzI1NzY0NzA4MTEzMjIwMSI+IlNpc2VzdGF0dWQgUFVLLWtvb2QgcG9sZSDDtWlnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IlNpc2VzdGF0dWQgUElOLWtvb2RpZCBlaSBrYXR0dS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUGluIiBtc2dpZD0iMzg1MDAxODQ0NTE4NzQ3NTM3NyI+IlNpc2VzdGFnZSA04oCTOC1udW1icmlsaW5lIFBJTi1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iU2lzZXN0YWdlIDgtIHbDtWkgZW5hbWFudW1icmlsaW5lIFBVSy1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0ta2FhcnQgb24gUFVLLWx1a3VzdGF0dWQuIEF2YW1pc2VrcyBzaXNlc3RhZ2UgUFVLLWtvb2QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iU2lzZXN0YWdlIFNJTS1rYWFyZGkgYmxva2VlcmluZ3UgdMO8aGlzdGFtaXNla3MgUFVLMi1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iU2lzc2V0dWxldmEga8O1bmUgaGVsaXN0YWphIElEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ2xpck1taSIgbXNnaWQ9Ijc3ODQ2NzM2NzM0NDY4MzMwOTEiPiJWw6RsanV2YSBrw7VuZSBoZWxpc3RhamEgSUQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDZk1taSIgbXNnaWQ9IjUxMjMyMTg5ODkxNDE1NzM1MTUiPiJLw7VuZWRlIHN1dW5hbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+IktvcHV0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJCYU1taSIgbXNnaWQ9IjQ1NTE5MzA2NzkyNjc3MDU4MSI+IkvDtW5lcGlpcmFuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlB3ZE1taSIgbXNnaWQ9IjcwNDM3MTU2ODc5MDUyNTQxOTkiPiJQYXJvb2xpIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+IlBJTi1rb29kaSBtdXV0bWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNuaXBNbWkiIG1zZ2lkPSIzMTEwNTM0NjgwNTU3ODU3MTYyIj4iSGVsaXN0YWphIG51bWJlciBvbGVtYXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+IkhlbGlzdGFqYSBudW1iZXIgcGlpcmF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJUaHJlZVdDTW1pIiBtc2dpZD0iOTA1MTA0NzE3MDMyMTE5MDM2OCI+IktvbG1lc3V1bmFsaW5lIGvDtW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUnVhY01taSIgbXNnaWQ9Ijc4Mjc4ODc0NTkxMzgzMDg4ODYiPiJTb292aW1hdHV0ZSB0w7zDvHR1dGUga8O1bmVkZSBow7xsZ2FtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ25kTW1pIiBtc2dpZD0iMzExNjQ0NjIzNzA4MTU3NTgwOCI+IkhlbGlzdGFqYSBudW1icmkga29oYWxldG9pbWV0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJEbmRNbWkiIG1zZ2lkPSIxMjY1NDc4OTMyNDE4MzM0MzMxIj4iTWl0dGUgaMOkaXJpZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPbiIgbXNnaWQ9IjQyOTQxNTQwOTE0NTc4MTkyMyI+IkhlbGlzdGFqYSBJRCB2YWlraW1pc2kgcGlpcmF0dWQuIErDpHJnbWluZSBrw7VuZTogcGlpcmF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPZmYiIG1zZ2lkPSIzMDkyOTE4MDA2MDc3ODY0NjI0Ij4iSGVsaXN0YWphIElEIHZhaWtpbWlzaSBwaWlyYXR1ZC4gSsOkcmdtaW5lIGvDtW5lOiBwb2xlIHBpaXJhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9uIiBtc2dpZD0iNjE3OTQyNTE4Mjg1NjQxODQ2NSI+IlZhaWtpbWlzaSBwb2xlIGhlbGlzdGFqYSBJRCBwaWlyYXR1ZC4gSsOkcmdtaW5lIGvDtW5lOiBwaWlyYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPZmYiIG1zZ2lkPSIyNTY3OTk4NjMzMTI0NDA4NTUyIj4iSGVsaXN0YWphIElEIHBvbGUgdmFpa2ltaXNpIHBpaXJhdHVkLiBKw6RyZ21pbmUga8O1bmU6IHBvbGUgcGlpcmF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlTm90UHJvdmlzaW9uZWQiIG1zZ2lkPSI4NjE0ODMwMTgwNTA4Njg2NjY2Ij4iVGVlbnVzIHBvbGUgZXR0ZSB2YWxtaXN0YXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSUGVybWFuZW50IiBtc2dpZD0iMzM3NzM3MTE0NTkyNjgzNTY3MSI+IkhlbGlzdGFqYSBJRCBzZWFkZXQgZWkgc2FhIG11dXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRDaGFuZ2VkVGl0bGUiIG1zZ2lkPSI1NTkyMTg5Mzk4OTU2MTg3NDk4Ij4iUGlpcmF0dWQganV1cmRlcMOkw6RzIG11dXR1bnVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRGF0YSIgbXNnaWQ9Ijg2NTM3OTQ3ODQ2OTAwNjU1NDAiPiJBbmRtZXNpZGV0ZWVudXMgb24gYmxva2Vlcml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRW1lcmdlbmN5IiBtc2dpZD0iNjU4MTE2Mzc3OTA3MjgzMzY2NSI+IkjDpGRhYWJpdGVlbnVzIG9uIGJsb2tlZXJpdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbk5vcm1hbCIgbXNnaWQ9IjQ5NTM4NjcwMTEzODk3NTA2NzMiPiJIw6TDpGx0ZWVudXMgb24gYmxva2Vlcml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsVm9pY2UiIG1zZ2lkPSIzMzk2OTYzNjUyMTA4MTUxMjYwIj4iS8O1aWsgaMOkw6RsdGVlbnVzZWQgb24gYmxva2Vlcml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+IlNNUy10ZWVudXMgb24gYmxva2Vlcml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VEYXRhIiBtc2dpZD0iOTk2NjM2NDg3MTA2MTcxMzIwIj4iSMOkw6RsLS9hbmRtZXRlZW51c2VkIG9uIGJsb2tlZXJpdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IkjDpMOkbC0vU01TLXRlZW51c2VkIG9uIGJsb2tlZXJpdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbCIgbXNnaWQ9IjU2NDMwMjgyNjQ0NjYwOTI4MjEiPiJLw7VpayBow6TDpGwtL2FuZG1lLS9TTVMtdGVlbnVzZWQgb24gYmxva2Vlcml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4iSMOkw6RsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YSIgbXNnaWQ9Ijg3MjQ1Njc4MjA3NzkzNzg5MyI+IkFuZG1lZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0ZBWCIgbXNnaWQ9IjU1NjY2MjQ5OTg4NDA0ODY0NzUiPiJGQUtTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzU01TIiBtc2dpZD0iMjAxNTQ2MDM3MzcwMTUyNzQ4OSI+IlNNUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFBc3luYyIgbXNnaWQ9IjQ1MjM0NTQ3ODM0OTg1NTE0NjgiPiJBc8O8bmtyb29uaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFTeW5jIiBtc2dpZD0iNzUzMDAwMDUxOTY0NjA1NDc3NiI+IlPDvG5rcm9vbmltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUGFja2V0IiBtc2dpZD0iNjk5MTAwNjU1Nzk5MzQyMzQ1MyI+IlBha2V0dCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BBRCIgbXNnaWQ9IjMyMzUyNTkwODU2NDgyNzEwMzciPiJQQUQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDAiIG1zZ2lkPSI3MTcwMzM1NDcyMTk4Njk0OTQ1Ij4iUsOkbmRsdXNpbmRpa2FhdG9yIHNlZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEiIG1zZ2lkPSI1MzE0ODYxNTE5NzUyNTM4OTIyIj4iUsOkbmRsdXNpbmRpa2FhdG9yIHbDpGxqYXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDIiIG1zZ2lkPSI4OTY5OTI5MDQ5MDgxMjY4MTE1Ij4iUsOkbmRsdXNpbmRpa2FhdG9yIHZpbGd1YiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MyIgbXNnaWQ9IjUxNDgyNTUwMjcwNDM5NDMzMTciPiJOYWFicnVza29ubmFzdCB2w6RsamFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ0IiBtc2dpZD0iODgwODQ1NjY4MjU1MDc5NjUzMCI+IkFyZW5kdXNlc3QgdsOkbGphcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NSIgbXNnaWQ9Ijc2MDQwNjMyNTI4NTAzNTQzNTAiPiJSw6RuZGx1cyDigJMgZWVsaXN0YXR1ZCBzw7xzdGVlbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NiIgbXNnaWQ9IjIwNTk0NDA4MjU3ODI4NzE1MTMiPiJSw6RuZGx1cyDigJMgc2FhZGFvbGV2IHPDvHN0ZWVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ3IiBtc2dpZD0iNzExMjA3ODcyNDA5NzIzMzYwNSI+IlLDpG5kbHVzIOKAkyBBbGxpYW5jZVwnaSBwYXJ0bmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ4IiBtc2dpZD0iNTk4OTU2OTc3ODYwNDA4OTI5MSI+IlLDpG5kbHVzIOKAkyBQcmVtaXVtaSBwYXJ0bmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ5IiBtc2dpZD0iNzk2OTI5NjgxMTM1NTE1MjQ5MSI+IlLDpG5kbHVzIC0gdMOkaXN0ZWVudXNlIGZ1bmt0c2lvbmFhbHN1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTAiIG1zZ2lkPSIzOTkyOTA2OTk5ODE1MzE2NDE3Ij4iUsOkbmRsdXMgLSBvc2FsaW5lIHRlZW51c2VmdW5rdHNpb25hYWxzdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDExIiBtc2dpZD0iNDE1NDQ3Njg1NDQyNjkyMDk3MCI+IlLDpG5kbHVzZSBiw6RubmVyIHNlZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEyIiBtc2dpZD0iMTE4OTA3MTExOTk5MjcyNjMyMCI+IlLDpG5kbHVzYsOkbm5lciB2w6RsamFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHRTZWFyY2hpbmciIG1zZ2lkPSI4MzYwMTQxODg1OTcyMjc5OTYzIj4iVGVlbnVzZSBvdHNpbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVOb3RGb3J3YXJkZWQiIG1zZ2lkPSIxNjgzNjg1ODgzODQxMjcyNTYwIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IHBvbGUgc3V1bmF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkIiBtc2dpZD0iMTMwMjkyMjExNzQ5ODU5MDUyMSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkVGltZSIgbXNnaWQ9IjkyMDYyNTE3MzY1MjcwODUyNTYiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJUSU1FX0RFTEFZIj57Mn08L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkIiBtc2dpZD0iNTA3MzIzNzgyNzYyMDE2NjI4NSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBwb2xlIHN1dW5hdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWRUaW1lIiBtc2dpZD0iNjc4MTYyMTk2NDMyMDYzNTE3MiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBwb2xlIGVkYXN0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZjQ29tcGxldGUiIG1zZ2lkPSIzMTE4ODQ4MjMwOTY2ODg2NTc1Ij4iRnVua3RzaW9vbmlrb29kIHZhbG1pcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmY0Vycm9yIiBtc2dpZD0iMzMyNzU2MDEyNjU4ODUwMDc3NyI+IsOcaGVuZHVzcHJvYmxlZW0gdsO1aSBrZWh0ZXR1IGZ1bmt0c2lvb25pa29vZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JPayIgbXNnaWQ9IjExOTE5MTkzNzgwODM0NzIyMDQiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvciIgbXNnaWQ9Ijc5NTYzOTI1MTExNDY2OTg1MjIiPiJJbG1uZXMgdsO1cmd1IHZpZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yTG9va3VwIiBtc2dpZD0iNDcxMTY4NzQ1NjExMTk2MzE2MyI+IlVSTC1pIGVpIGxlaXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiJTYWlkaSBhdXRlbnRpbWlzZSBza2VlbWkgZWkgdG9ldGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+IkF1dGVudGltaW5lIGViYcO1bm5lc3R1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JQcm94eUF1dGgiIG1zZ2lkPSIxNzg4MjA3MDEwNTU5MDgxMzMxIj4iUHVodmVyc2VydmVyaSBrYXVkdSBhdXRlbnRpbWluZSBlYmHDtW5uZXN0dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQ29ubmVjdCIgbXNnaWQ9Ijg3MTQyNzMyMzYzNjQ2NDA1NDkiPiJTZXJ2ZXJpZ2EgZWkgc2FhbnVkIMO8aGVuZHVzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JJTyIgbXNnaWQ9IjIzNDA1NTgxOTc0ODkzMDIxODgiPiJTZXJ2ZXJpZ2EgZWkgc2FhbnVkIMO8aGVuZHVzdC4gUHJvb3ZpZ2UgaGlsamVtIHV1ZXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUaW1lb3V0IiBtc2dpZD0iNDc0MzQwMzcwMzc2Mjg4Mzk1NCI+IsOcaGVuZHVzIHNlcnZlcmlnYSBhZWd1bnVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclJlZGlyZWN0TG9vcCIgbXNnaWQ9Ijg2Nzk1OTYwOTAzOTI3Nzk1MTYiPiJMZWh0IHNpc2FsZGFiIGxpaWdhIHBhbGp1IHNlcnZlcmkgw7xtYmVyc3V1bmFtaXNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkU2NoZW1lIiBtc2dpZD0iNTAxNTczMDgxMjkwNjE5MjIwOCI+IlByb3Rva29sbGkgZWkgdG9ldGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGYWlsZWRTc2xIYW5kc2hha2UiIG1zZ2lkPSI5NjU0OTYwNjAwMDY1ODY0MSI+IlR1cnZhbGlzdCDDvGhlbmR1c3QgZWkgc2FhbnVkIGx1dWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQmFkVXJsIiBtc2dpZD0iMzYzNjkyOTcyMjcyODg4MTk3MiI+IkxlaHRlIHBvbGUgdsO1aW1hbGlrIGF2YWRhLCBrdW5hIFVSTCBvbiB2YWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZpbGUiIG1zZ2lkPSIyMTcwNzg4NTE1MDUyNTU4Njc2Ij4iRmFpbGlsZSBlaSBww6TDpHNlIGp1dXJkZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlTm90Rm91bmQiIG1zZ2lkPSI2MjAzODU2NjEyMDQyNjU1MDg0Ij4iU29vdml0dWQgZmFpbGkgZWkgbGVpdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRvb01hbnlSZXF1ZXN0cyIgbXNnaWQ9IjEyMzUzOTY5MjcwODcxODgyNTMiPiJUw7bDtnRsZW1pc2VsIG9uIGxpaWdhIHBhbGp1IHRhb3RsdXNpLiBQcm9vdmlnZSBoaWxqZW0gdXVlc3RpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg5Njc3MTAwMjUwMzYxNjM4MjIiPiJWaWdhIGtvbnRvbGUgPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHNpc3NlbG9naW1pc2VsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jIiBtc2dpZD0iODM1MzUyMzA2MDI2OTMzNTY2NyI+IlPDvG5rcm9vbmltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIG1zZ2lkPSIzOTc3NDMzNDkxOTE5MDE0NTgiPiJTw7xua3Jvb25pbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlVG9vTWFueURlbGV0ZXNOb3RpZmljYXRpb25EZXNjIiBtc2dpZD0iODEwMDk4MTQzNTA4MDY5NjQzMSI+IkxpaWdhIHBhbGp1IMO8a3N1c2UgPHhsaWZmOmcgaWQ9IkNPTlRFTlRfVFlQRSI+JXM8L3hsaWZmOmc+IGt1c3R1dHVzaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NDk0MDE5MjM0MTAyMTU0ODk2Ij4iVGFodmVsYXJ2dXRpIG3DpGx1cnV1bSBvbiB0w6Rpcy4gUnV1bWkgdmFiYXN0YW1pc2VrcyBrdXN0dXRhZ2UgbcO1bmVkIGZhaWxpZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ3NTk5OTI4NjY4MDAwMDU0MSI+IlRlbGVmb25pbcOkbHUgb24gdMOkaXMuIFJ1dW1pIHZhYmFzdGFtaXNla3Mga3VzdHV0YWdlIG3DtW5lZCBmYWlsaWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWUiIG1zZ2lkPSI2NTQ1Njk2MDA3NjMxNDA0MjkyIj4iTWluYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODU0NTM1MTQyMDg2NTIwMjg1MyI+IlRhaHZlbGFydnV0aSB2YWxpa3VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMxOTkxOTA3NTQ2Mzk4ODYzOCI+IlRlbGVmb25pdmFsaWt1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlIiBtc2dpZD0iNzE2NzcwMzM4OTgwMjYxODY2MyI+IkjDpMOkbGV0dSByZcW+aWltIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idHVybl9vbl9yYWRpbyIgbXNnaWQ9IjM5MTI3OTMwOTIzMzk5NjIzNzEiPiJMw7xsaXRhZ2UgdHJhYWRpdGEgc2lkZSBzaXNzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InR1cm5fb2ZmX3JhZGlvIiBtc2dpZD0iODE5ODc4NDk0OTk4NzA2MjM0NiI+IkzDvGxpdGFnZSByYWFkaW9zaWRlIHbDpGxqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9sb2NrIiBtc2dpZD0iNzk5MDk0NjU1NDk2MDk4MTUzIj4iRWtyYWFuaWx1a2siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3dlcl9vZmYiIG1zZ2lkPSI0MjY2NjE0MTA3NDEyODY1MDQ4Ij4iTMO8bGl0YSB2w6RsamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9zaWxlbnQiIG1zZ2lkPSIzMTkyOTgxNjMwMTg0NzMwNzgiPiJIZWxpbiBvbiB2w6RsamFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfdmlicmF0ZSIgbXNnaWQ9IjcwNzIwNDMzODg1ODE1NTEzOTUiPiJWaWJyZWVyaXYgaGVsaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9yaW5nIiBtc2dpZD0iODU5MjI0MTgxNjE5NDA3NDM1MyI+IkhlbGluIG9uIHNlZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9wcm9ncmVzcyIgbXNnaWQ9IjIyODEwNzkyNTczMjk5ODEyMDMiPiJWw6RsamFsw7xsaXRhbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMzg1NzQ1MTc5NTU1NzMxNDcwIj4iVGVpZSB0YWh2ZWxhcnZ1dGkgbMO8bGl0dWIgdsOkbGphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDk3OTIxNzUyNDI4MjEzNTMiPiJUZWllIHRlbGVmb24gbMO8bGl0dWIgdsOkbGphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm1fcXVlc3Rpb24iIG1zZ2lkPSIyOTA2NTQ0NzY4ODgxMTM2MTgzIj4iS2FzIHNvb3ZpdGUgdsOkbGphIGzDvGxpdGFkYT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfdGl0bGUiIG1zZ2lkPSI3MDU0NTA5OTE0NTAwMTQwMzYxIj4iT2h1dHVzIHJlxb5paW1pcyB0YWFza8OkaXZpdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX2NvbmZpcm0iIG1zZ2lkPSI1NTI5Mzk0NDUwMjc4NDY2OCI+IkthcyBzb292aXRlIHRhYXNrw6Rpdml0YWRhIG9odXR1cyByZcW+aWltaXM/IFNlZSBrZWVsYWIga8O1aWsgaW5zdGFsbGl0dWQga29sbWFuZGF0ZSBvc2Fwb29sdGUgcmFrZW5kdXNlZC4gTmVlZCB0YWFzdGF0YWtzZSBww6RyYXN0IHV1ZXN0aSB0YWFza8OkaXZpdGFtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiJIaWxqdXRpc2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+IkhpbGp1dGlzaSByYWtlbmR1c2kgcG9sZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDA4NDc3MTQwMDg4MDUzNjY1Ij4iVGFodmVsYXJ2dXRpIHZhbGlrdWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiJUZWxlZm9uaXZhbGlrdWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2siIG1zZ2lkPSIyODQ0OTQ1MTkxNzkyMTE5NzEyIj4iRWtyYWFuaWx1a2siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3Bvd2VyX29mZiIgbXNnaWQ9IjQ0NzE4Nzk0NDA4Mzk4Nzk3MjIiPiJMw7xsaXRhIHbDpGxqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fYnVnX3JlcG9ydCIgbXNnaWQ9Ijc5MzQwMTA1Nzg5MjIzMDQ3OTkiPiJWZWFhcnVhbm5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3RpdGxlIiBtc2dpZD0iMjY2NzQ5NDgwMzc0MjU0ODUzMyI+IlZlYWFydWFuZGUgdsO1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSIgbXNnaWQ9IjM5ODQ0NzA0ODc1MDM1MDQ1NiI+Ik5paSBrb2d1dGFrc2UgdGVhdmV0IHRlaWUgc2VhZG1lIHByYWVndXNlIG9sZWt1IGtvaHRhLCBldCBzYWF0YSBzZWUgbWVpbGlzw7VudW1pbmEuIEVubmUga3VpIHNhYXRlIHZlYWFydWFuZGUgw6RyYSBzYWF0YSwgdsO1dGFiIHNlbGxlIGxvb21pbmUgbmF0dWtlIGFlZ2E7IHZhcnVnZSBrYW5uYXR1c3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl90b2dnbGVfc2lsZW50X21vZGUiIG1zZ2lkPSI4MjE5NTI1MzQ0MjQ2ODEwOTI1Ij4iSMOkw6RsZXR1IHJlxb5paW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjMyODk4NDE5MzcwMDM3NTg4MDYiPiJIZWxpIG9uIFbDhExKQVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSIxNTA2MDQ2NTc5MTc3MDY2NDE5Ij4iSGVsaSBvbiBTRUVTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfdG9nZ2xlX2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI1ODg0MzMwMzA2OTI2MzA3NDU2Ij4iTGVubnVyZcW+aWltIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIyNzE5NTU3OTgyNjA4OTE5NzUwIj4iTGVubnVyZcW+aWltIG9uIFNFRVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4iTGVubnVyZcW+aWltIG9uIFbDhExKQVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJUdXJ2YXJlxb5paW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkLXPDvHN0ZWVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Nvc3RNb25leSIgbXNnaWQ9IjU0Mjk4MDgyMTc4NjE0NjA0MDEiPiJUYXN1bGlzZWQgdGVlbnVzZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Nvc3RNb25leSIgbXNnaWQ9IjMyOTMzMDE5MDM0MDk4Njk0OTUiPiJUYXN1bGlzdGUgdG9pbWluZ3V0ZSB0ZWdlbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4iVGVpZSBzw7VudW1pZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWVzc2FnZXMiIG1zZ2lkPSI3ODIxOTk5MDcxMDAzNjk5MjM2Ij4iVGVpZSBTTVMtLCBtZWlsaS0gamEgbXV1ZGUgc8O1bnVtaXRlIGx1Z2VtaW5lIGphIGtpcmp1dGFtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9wZXJzb25hbEluZm8iIG1zZ2lkPSIzNTE5MTYzMTQxMDcwNTMzNDc0Ij4iVGVpZSBpc2lrbGlrdWQgYW5kbWVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19wZXJzb25hbEluZm8iIG1zZ2lkPSI4NDI2NDUzMTI5Nzg4ODYxMzM4Ij4iT3RzZW5lIGp1dXJkZXDDpMOkcyB0ZWllIGtvaHRhIGvDpGl2YWxlIHRlYWJlbGUsIG1pcyBvbiBzYWx2ZXN0YXR1ZCB0ZWllIGtvbnRha3Rpa2FhcmRpbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NvY2lhbEluZm8iIG1zZ2lkPSI1Nzk5MDk2NjIzNDEyMDQzNzkxIj4iVGVpZSBzb3RzaWFhbG5lIHRlYXZlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zb2NpYWxJbmZvIiBtc2dpZD0iNzEyOTg0MjQ1NzYxMTY0MzQ5MyI+Ik90c2VuZSBqdXVyZGVww6TDpHMgdGVpZSBrb250YWt0aWRlIHRlYWJlbGUgamEgc290c2lhYWxzZXRlbGUgc2lkZW1ldGVsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbG9jYXRpb24iIG1zZ2lkPSI2MzUxNDk3NDI0MzY2OTIwNDkiPiJUZWllIGFzdWtvaHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2xvY2F0aW9uIiBtc2dpZD0iNTcwNDY3OTc2MzEyNDE3MDEwMCI+IkrDpGxnaWdlIG9tYSBmw7zDvHNpbGlzdCBhc3Vrb2h0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbmV0d29yayIgbXNnaWQ9IjU4MDg5ODMzNzc3MjcxMDk4MzEiPiJWw7VyZ3VzdWh0bHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+Ikp1dXJkZXDDpMOkcyBlcmluZXZhdGVsZSB2w7VyZ3VmdW5rdHNpb29uaWRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSIxNTg1NDAzNTQ0MTYyMTI4MTA5Ij4iQmx1ZXRvb3RoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iNTYyNTI4ODU3NzE2NDI4MjM5MSI+Ikp1dXJkZXDDpMOkcyBzZWFkbWV0ZWxlIGphIHbDtXJrdWRlbGUgQmx1ZXRvb3RoaSBrYXVkdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjgzMjkyNjE2NzAxNTE4NzEyMzUiPiJIZWxpc2VhZGVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hdWRpb1NldHRpbmdzIiBtc2dpZD0iMjY0MTUxNTQwMzM0NzU2ODEzMCI+IkhlbGlzZWFkZXRlIG11dXRtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjYyMDkyNDY2NTM0MjQ3OTgwMzMiPiJBa3UgbcO1anV0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjQ0MTI3NTMyMDYzODkxNjk0NyI+IkZ1bmt0c2lvb25pZGUsIG1pcyB2w7VpdmFkIGFrdSBraWlyZXN0aSB0w7xoamVuZGFkYSwga2FzdXRhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FsZW5kYXIiIG1zZ2lkPSI1ODYzNTA4NDM3NzgzNjgzOTAyIj4iS2FsZW5kZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbGVuZGFyIiBtc2dpZD0iNTc3NzUzNDMxNjk4MjE4NDQxNiI+Ik90c2VuZSBqdXVyZGVww6TDpHMga2FsZW5kcmlsZSBqYSBzw7xuZG11c3RlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RpY3Rpb25hcnkiIG1zZ2lkPSI0MTQ4NTk3MTI4ODQzNjQxMzc5Ij4iS2FzdXRhamEgc8O1bmFyYWFtYXR1IGx1Z2VtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaWN0aW9uYXJ5IiBtc2dpZD0iNzkyMTE2NjM1NTk2NDc2NDQ5MCI+Ikthc3V0YWphIHPDtW5hcmFhbWF0dSBzw7VuYWRlIGx1Z2VtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MDkwMjM3NzAyNDMyNTc2Nzg4Ij4iS2FzdXRhamEgc8O1bmFyYWFtYXR1c3NlIGtpcmp1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyNzExNTYxOTk0NDk3MzYxNjQ2Ij4iS2FzdXRhamEgc8O1bmFyYWFtYXR1c3NlIHPDtW5hZGUgbGlzYW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Jvb2ttYXJrcyIgbXNnaWQ9IjE5NDk1MTk2NzMxMDM5NjgyMjkiPiJKw6RyamVob2lkamFkIGphIGFqYWx1Z3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Jvb2ttYXJrcyIgbXNnaWQ9IjQxNjk3NzE2MDYyNTc5NjMwMjgiPiJPdHNlbmUganV1cmRlcMOkw6RzIGrDpHJqZWhvaWRqYXRlbGUgamEgYnJhdXNlcmkgYWphbG9vbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmljZUFsYXJtcyIgbXNnaWQ9IjYxMTc3MDQ2Mjk3Mjg4MjQxMDEiPiJBbGFybSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNDc2OTM1NjM2MjI1MTY0MTE3NSI+IsOEcmF0dXNrZWxsYSBzZWFkbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfdm9pY2VtYWlsIiBtc2dpZD0iNDE2MjIzNzE0NTAyNzU5MjEzMyI+IkvDtW5lcG9zdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfdm9pY2VtYWlsIiBtc2dpZD0iMjQ5ODQwMzk2OTg2Mjk1MTM5MyI+Ik90c2VuZSBqdXVyZGVww6TDpHMga8O1bmVwb3N0aWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9taWNyb3Bob25lIiBtc2dpZD0iMTcxNTM5OTAwMjUwMDQzNDY0Ij4iTWlrcm9mb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21pY3JvcGhvbmUiIG1zZ2lkPSI3MTA2NjE4Mjg2OTA1NzM4NDA4Ij4iT3RzZW5lIGp1dXJkZXDDpMOkcyBtaWtyb2ZvbmlsZSBoZWxpIHNhbHZlc3RhbWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jYW1lcmEiIG1zZ2lkPSI0ODIwMzcyNDk1ODk0NTg2NjE1Ij4iS2FhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+Ik90c2VuZSBqdXVyZGVww6TDpHMga2FhbWVyYWxlIGZvdG9kZSB2w7VpIHZpZGVvdGUgasOkw6RkdnVzdGFtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NjcmVlbmxvY2siIG1zZ2lkPSI4Mjc1NTAwMTczMzMwNzE4MTY4Ij4iTHVrdXN0dXNrdXZhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zY3JlZW5sb2NrIiBtc2dpZD0iNzA2NzQ5NzEyODkyNTQ5OTQwMSI+IlbDtWltZSBtw7VqdXRhZGEgbHVrdXN0dXNrdXZhIGvDpGl0dW1pc3Qgc2VhZG1lcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXBwSW5mbyIgbXNnaWQ9IjgwMjg3ODk3NjI2MzQxNDc3MjUiPiJUZWllIHJha2VuZHVzdGUgdGVhdmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FwcEluZm8iIG1zZ2lkPSIzOTUwMzc4NTM4MDQ5NjI1OTA3Ij4iVsO1aW1lIG3DtWp1dGFkYSB0ZWlzdGUgc2VhZG1lcyBvbGV2YXRlIHJha2VuZHVzdGUga8OkaXR1bWlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd2FsbHBhcGVyIiBtc2dpZD0iMzg1MDI4MDE1ODA0MTE3NTk5OCI+IlRhdXN0YXBpbHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dhbGxwYXBlciIgbXNnaWQ9IjU2MzA0MTc4NTQ3NTA1NDAxNTQiPiJTZWFkbWUgdGF1c3RhcGlsZGkgc2VhZGV0ZSBtdXV0bWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3lzdGVtQ2xvY2siIG1zZ2lkPSI0MDY1MzU3NTkyMzY2MTI5OTIiPiJLZWxsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1DbG9jayIgbXNnaWQ9IjM5NDQzNTk4MzM2MjQwOTQ5OTIiPiJTZWFkbWUgYWphIHbDtWkgYWphdsO2w7ZuZGkgbXV1dG1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0YXR1c0JhciIgbXNnaWQ9IjIwOTU4NjI1NjgxMTM5NDUzOTgiPiJPbGVrdXJpYmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0YXR1c0JhciIgbXNnaWQ9IjYyNDI1OTM0MzIyMjY4MDcxNzEiPiJTZWFkbWUgb2xla3VyaWJhIHNlYWRldGUgbXV1dG1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5bmNTZXR0aW5ncyIgbXNnaWQ9IjMzNDE5OTA5ODYxNDc4MjY1NDEiPiJTw7xua3Jvb25pbWlzc2VhZGVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeW5jU2V0dGluZ3MiIG1zZ2lkPSI3NjAzMTk1MjY1MTI5MDMxNzk3Ij4iSnV1cmRlcMOkw6RzIHPDvG5rcm9vbmltaXNzZWFkZXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY291bnRzIiBtc2dpZD0iMzM1OTY0NjI5MTEyNTMyNTUxOSI+IlRlaWUga29udG9kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2NvdW50cyIgbXNnaWQ9IjQ5NDg3MzI2NDE4MjcwOTEzMTIiPiJKdXVyZGVww6TDpHMgc2FhZGFvbGV2YXRlbGUga29udG9kZWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNzk5ODIxNDk2ODc5MTU5OTMyNiI+IlJpaXN0dmFyYSBqdWh0ZWxlbWVuZGlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNDM1NzA1Nzg2MTIyNTQ2MjcwMiI+Ik90c2VuZSBqdXVyZGVww6TDpHMgbW9iaWlsdGVsZWZvbmkgcmlpc3R2YXJhbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3Bob25lQ2FsbHMiIG1zZ2lkPSI5MDY3MTczOTg4MzI1ODY1OTIzIj4iVGVsZWZvbmlrw7VuZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3Bob25lQ2FsbHMiIG1zZ2lkPSI3NDg5NzAxNjIwNDQ2MTgzNzcwIj4iVGVsZWZvbmlrw7VuZWRlIGrDpGxnaW1pbmUsIHNhbHZlc3RhbWluZSBqYSB0w7bDtnRsZW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbVRvb2xzIiBtc2dpZD0iNDY1MjE5MTY0NDA4MjcxNDA0OCI+IlPDvHN0ZWVtaXTDtsO2cmlpc3RhZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3lzdGVtVG9vbHMiIG1zZ2lkPSI4MTYyMTAyNjAyMTkwNzM0MzA1Ij4iU8O8c3RlZW1pIG1hZGFsYW1hIHRhc2VtZSBqdXVyZGVww6TDpHMgamEganVodGltaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iMzQ0NjE2NDU4NDcxMDU5NjUxMyI+IkFyZW5kdXN0w7bDtnJpaXN0YWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSI3MDU4ODI4MDMyMzU4MTQyMDE4Ij4iRnVua3RzaW9vbmlkIG9uIHZhamFsaWt1ZCBhaW51bHQgcmFrZW5kdXN0ZSBhcmVuZGFqYXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Rpc3BsYXkiIG1zZ2lkPSI0Mjc5OTA5Njc2MDM2NDAyNjM2Ij4iTXV1IHJha2VuZHVzZSBrYXN1dGFqYWxpaWRlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGlzcGxheSIgbXNnaWQ9IjYwNTEwMDIwMzE5MzMwMTM3MTQiPiJUZWlzdGUgcmFrZW5kdXN0ZSBrYXN1dGFqYWxpaWRlc2UgbcO1anV0YW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0b3JhZ2UiIG1zZ2lkPSIxOTcxMTE4NzcwNTQ2MzM2OTY2Ij4iTcOkbHVydXVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiJKdXVyZGVww6TDpHMgVVNCLW3DpGx1c2VhZG1lbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iOTIwMzMwMjIxNDkxNTM1NTc3NCI+Ikp1dXJkZXDDpMOkcyBTRC1rYWFyZGlsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNzkxOTAyNTYwMjI4MzU5MzkwNyI+IlDDpMOkc3VmdW5rdHNpb29uaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9IjQyMDUxOTY4ODE2NzgxNDQzMzUiPiJGdW5rdHNpb29uaWQsIG1pZGEgc2FhYiB0YW90bGVkYSBhYmlzdGF2IHRlaG5vbG9vZ2lhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzkwMTcxNzkzNjkzMDE3MDMyMCI+IkFrbmEgc2lzdSB0b29taW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM3NzIyMjUwMDg2MDUzMTA2NzIiPiJUdXR2dWdlIGthc3V0YXRhdmEgYWtuYSBzaXN1Z2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjMxMDg3MjMzNjQ2NzY2NjczMjAiPiJQdXVkdXR1c2VnYSBzaXJ2aW1pc2Ugc2lzc2Vsw7xsaXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiJQdXVkdXRhdHVkIMO8a3N1c3RlIG5pbWVzaWQgZXNpdGF0YWtzZSBow6TDpGxlZ2EgbmluZyBla3JhYW5pIHNhYWIgc2lydmlkYSBwdXVkdXR1c3RlZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTczOTg4MTc2NjUyMjU5NDA3MyI+IlZlZWJpIHTDpGl1c3RhdHVkIGp1dXJkZXDDpMOkc3Ugc2lzc2Vsw7xsaXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iNzg4MTA2Mzk2MTUwNzUxMTc2NSI+IlJha2VuZHVzZSBzaXN1IGvDpHR0ZXNhYWRhdmFtYWtzIG11dXRtaXNla3MgdsO1aWRha3NlIGluc3RhbGxpZGEgc2tyaXB0ZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSIyMTAzNDQwMzkxOTAyNDEyMTc0Ij4iU2lzZXN0YXR1ZCB0ZWtzdGkgasOkbGdpbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IlNpc2FsZGFiIGlzaWtsaWtrZSBhbmRtZWlkLCBudCBrcmVkaWl0a2FhcmRpIG51bWJyZWlkIGphIHBhcm9vbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4ia2VlbGEgdsO1aSBtdXVkYSBvbGVrdXJpYmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtlZWxhdGEgb2xla3VyaWJhIHbDtWkgbGlzYWRhIGphIGVlbWFsZGFkYSBzw7xzdGVlbWlpa29vbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzI0NzI4MTkxMTM4NzkzMTQ4NSI+Im9sZWt1cmliYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MTYxMTM2NjA3OTU5NzYwNjAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgb2xsYSBvbGVrdXJpYmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSIxMTQ4MTk4Nzg1OTM3NDg5MjY0Ij4ibGFpZW5kYS9haGVuZGEgb2xla3VyaWJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iNjkxNzU0OTQzNzEyOTQwMTEzMiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsYWllbmRhZGEgdsO1aSBhaGVuZGFkYSBvbGVrdXJpYmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiJtYXJzcnV1dGlnZSB2w6RsanV2YWQga8O1bmVkIHV1ZXN0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iNTMzMTMxODkzMTkzNzQwMjA0MCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB0w7bDtmRlbGRhIHbDpGxqdXZhaWQga8O1bmVzaWQgamEgbXV1dGEgdmFsaXRhdmF0IG51bWJyaXQuIEx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c2VsIGrDpGxnaWRhLCDDvG1iZXIgc3V1bmF0YSB2w7VpIHRha2lzdGFkYSB2w6RsanV2YWlkIGvDtW5lc2lkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVNtcyIgbXNnaWQ9Ijg2NzM0NzE3Njg5NDc4OTUwODIiPiJ2w7V0a2UgdmFzdHUgdGVrc3Rpc8O1bnVtZWlkIChTTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdmFzdHUgdsO1dHRhIGphIHTDtsO2ZGVsZGEgU01TLXPDtW51bWVpZC4gU2VlIHTDpGhlbmRhYiwgZXQgcmFrZW5kdXMgdsO1aWIgasOkbGdpZGEgdsO1aSBrdXN0dXRhZGEgdGVpZSBzZWFkbWVsZSBzYWFkZXR1ZCBzw7VudW1laWQgbmVpZCB0ZWlsZSBuw6RpdGFtYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZU1tcyIgbXNnaWQ9IjE4MjEzMTczNDQ2NjgyNTcwOTgiPiJ2w7V0a2UgdmFzdHUgdGVrc3Rpc8O1bnVtZWlkIChNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2YXN0dSB2w7V0dGEgamEgdMO2w7ZkZWxkYSBtdWx0aW1lZWRpdW1zw7VudW1laWQuIFNlZSB0w6RoZW5kYWIsIGV0IHJha2VuZHVzIHbDtWliIGrDpGxnaWRhIHbDtWkga3VzdHV0YWRhIHRlaWUgc2VhZG1lbGUgc2FhZGV0dWQgc8O1bnVtZWlkIG5laWQgdGVpbGUgbsOkaXRhbWF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4iaMOkZGFhYml0ZWFkZXRlIHZhc3R1dsO1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iODQ4NTI0MDcwMjYyNDMxOTc0Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHZhc3R1IHbDtXR0YSBqYSB0w7bDtmRlbGRhIGjDpGRhYWJpc8O1bnVtZWlkLiBTZWUgw7VpZ3VzIG9uIHNhYWRhdmFsIGFpbnVsdCBzw7xzdGVlbWlyYWtlbmR1c3RlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSIxNTk4MzI4ODQzNjE5NjQ2MTY2Ij4ibW9iaWlsc2lkZXPDtW51bWl0ZSBsdWdlbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHNlYWRtZSB2YXN0dSB2w7VldHVkIG1vYmlpbHNpZGVzw7VudW1laWQuIE1vYmlpbHNpZGVtw6RyZ3VhbmRlaWQgZWRhc3RhdGFrc2UgbcO1bmVzIGFzdWtvaGFzIGVyaW9sdWtvcnJhc3QgdGVhdml0YW1pc2Vrcy4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgc2VnYWRhIHNlYWRtZSB0b2ltaXZ1c3QgdsO1aSB0w7bDtmQgZXJpb2x1a29ycmEgc8O1bnVtaSB2YXN0dXbDtXRtaXNlbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRTbXMiIG1zZ2lkPSI1NjAwODMwNjEyMTQ3NjcxNTI5Ij4ic2FhZGEgU01TLXPDtW51bWVpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRTbXMiIG1zZ2lkPSI3MDk0NzI5Mjk4MjA0OTM3NjY3Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHNhYXRhIFNNUy1zw7VudW1laWQuIFNlZSB2w7VpYiBrYWFzYSB0dXVhIG9vdGFtYXR1aWQgdGFzdXNpZC4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpbGUgdGVraXRhZGEga3VsdXNpZCwgc2FhdGVzIHPDtW51bWVpZCB0ZWllIGtpbm5pdHVzZXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9Ijg3MTM4ODkxMDUzMDU5NDMyMDAiPiJzw7VudW1pZ2EgdmFzdGFtaXNlIHPDvG5kbXVzdGUgc2FhdG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+Ikx1YmFiIHJha2VuZHVzZWwgc2FhdGEgdGFvdGx1c2kgdGVpc3RlbGUgc8O1bnVtaXNpZGUgcmFrZW5kdXN0ZWxlLCBldCBrw6RzaXRsZWRhIHNpc3NldHVsZXZhdGUga8O1bmVkZWxlIHPDtW51bWlnYSB2YXN0YW1pc2Ugc8O8bmRtdXNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNtcyIgbXNnaWQ9Ijg3NDUwODY1NzIyMTMyNzA0ODAiPiJsdWdlZ2Ugb21hIHRla3N0aXPDtW51bWVpZCAoU01TIHbDtWkgTU1TKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI0Njc5ODE1NDg2ODQ3MzU1MjIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHRhaHZlbGFydnV0aXNzZSB2w7VpIFNJTS1rYWFyZGlsZSBzYWx2ZXN0YXR1ZCBTTVMtc8O1bnVtZWlkLiBTZWUgdsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBrw7Vpa2kgU01TLXPDtW51bWVpZCBzaXN1c3QgdsO1aSBrb25maWRlbnRzaWFhbHN1c2VzdCBob29saW1hdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHRlbGVmb25pIHbDtWkgU0lNLWthYXJkaWxlIHNhbHZlc3RhdHVkIFNNUy1zw7VudW1laWQuIFNlZSB2w7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIGvDtWlraSBTTVMtc8O1bnVtZWlkIHNpc3VzdCB2w7VpIGtvbmZpZGVudHNpYWFsc3VzZXN0IGhvb2xpbWF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+Im11dXRrZSBvbWEgdGVrc3Rpc8O1bnVtZWlkIChTTVMgdsO1aSBNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga2lyanV0YWRhIHRlaWUgdGFodmVsYXJ2dXRpc3NlIHbDtWkgU0lNLWthYXJkaWxlIHNhbHZlc3RhdHVkIFNNUy1zw7VudW1pdGVzc2UuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHRlaWUgc8O1bnVtaWQga3VzdHV0YWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBraXJqdXRhZGEgdGVpZSB0ZWxlZm9uaSB2w7VpIFNJTS1rYWFyZGlsZSBzYWx2ZXN0YXR1ZCBTTVMtc8O1bnVtaXRlc3NlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCB0ZWllIHPDtW51bWlkIGt1c3R1dGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+InbDtXRrZSB2YXN0dSB0ZWtzdGlzw7VudW1laWQgKFdBUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9Ijc0ODIzMjE5MDIyMDU4MzM4NSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2YXN0dSB2w7V0dGEgamEgdMO2w7ZkZWxkYSBXQVAtc8O1bnVtZWlkLiBTZWUgbHViYSBow7VsbWFiIHbDtWltZXQgasOkbGdpZGEgdsO1aSBrdXN0dXRhZGEgdGVpbGUgc2FhZGV0dWQgc8O1bnVtZWlkIG5laWQgdGVpbGUgbsOkaXRhbWF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+IkvDpGl0YXR1ZCByYWtlbmR1c3RlIHRvb21pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUYXNrcyIgbXNnaWQ9Ijc0NTQyMTU5OTU4NDc2NTgxMDIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdHV1YSB0ZWF2ZXQgcHJhZWd1IGphIGhpbGp1dGkga8OkaXRhdHVkIMO8bGVzYW5uZXRlIGtvaHRhLiBTZWUgdsO1aWIgbHViYWRhIHJha2VuZHVzZWwgYXZhc3RhZGEgdGVhdmV0IHNlbGxlIGtvaHRhLCBtaWxsaXNlaWQgcmFrZW5kdXNpIHNlYWRtZXMga2FzdXRhdGFrc2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+InRvaW1pbmd1ZCBlcmluZXZhdGVsIGthc3V0YWpha29udG9kZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iMzY0NjcwOTYzNjIzMzg1Nzg2Ij4iTHViYWIgcmFrZW5kdXNlbCB0ZWhhIHRvaW1pbmd1aWQgc2VhZG1lIGVyaW5ldmF0ZWwga2FzdXRhamFrb250b2RlbC4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQga2FzdXRhZGEgc2VkYSBrYXN1dGFqYXRldmFoZWxpc2Uga2FpdHNlIHJpa2t1bWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJhY3RBY3Jvc3NVc2Vyc0Z1bGwiIG1zZ2lkPSIyNTY3NzM0Mjg1NTQ1MDc0MTA1Ij4idMOkaWVsaWsgbGl0c2VudHMgdGVoYSB0b2ltaW5ndWlkIGVyaW5ldmF0ZWwga2FzdXRhamFrb250b2RlbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMzc2ODQxMzY4Mzk1NTAyMzY2Ij4iTHViYWIga8O1aWtpIHbDtWltYWxpa2tlIHRvaW1pbmd1aWQgZXJpbmV2YXRlbCBrYXN1dGFqYWtvbnRvZGVsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNlcnMiIG1zZ2lkPSIxNjc2MTUwOTExNjcyMjgyNDI4Ij4ia2FzdXRhamF0ZSBoYWxkYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2VycyIgbXNnaWQ9Ijg0MDkzMDY2Njc2NDUzNTU2MzgiPiJWw7VpbWFsZGFiIHJha2VuZHVzdGVsIGhhbGxhdGEgc2VhZG1lIGthc3V0YWphaWQsIHNlYWxodWxnYXMgcMOkcmluZ3VpZCwgbG9vbWlzdCBqYSBrdXN0dXRhbWlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4idMO2w7Z0YXZhdGUgcmFrZW5kdXN0ZSDDvGtzaWthc2phZGUgdG9vbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSIxNTM4MjQ3NDE0NDA3MTc1OTkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdHV1YSDDvGtzaWthc2phbGlra3UgdGVhdmV0IHByYWVndSB0w7bDtnRhdmF0ZSBqYSBoaWxqdXRpIGvDpGl0YXR1ZCDDvGxlc2FubmV0ZSBrb2h0YS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdHV2YXN0YWRhIHByaXZhYXRzZXQgdGVhdmV0IG11dWRlIHJha2VuZHVzdGUga29odGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4ia8OkaXRhdHVkIHJha2VuZHVzdGUgw7xtYmVyasOkcmplc3RhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGVpc2FsZGFkYSDDvGxlc2FuZGVkIGVzaXBsYWFuaWxlIGphIHRhdXN0YWxlLiBSYWtlbmR1cyB2w7VpYiBzZWRhIHRlaGEgdGVpZSBzaXNlbmRpdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW1vdmVUYXNrcyIgbXNnaWQ9IjY4MjE1MTM0MDE4NzAzNzc0MDMiPiJrw6RpdGF0dWQgcmFrZW5kdXN0ZSBwZWF0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW1vdmVUYXNrcyIgbXNnaWQ9IjEzOTQ3MTQzNTIwNjI2MzU0OTMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgZWVtYWxkYWRhIMO8bGVzYW5kZWQgamEgcGVhdGFkYSBuZW5kZSByYWtlbmR1c2VkLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBow6RpcmlkYSB0ZWlzdGUgcmFrZW5kdXN0ZSBrw6RpdHVtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSI3MzkxMTkxMzg0MDI3MzAzMDY1Ij4idGVnZXZ1c3Zpcm5hZGUgaGFsZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSIxNjE1ODgxOTMzMDM0MDg0NDQwIj4iTHViYWIgcmFrZW5kdXNlbCBsaXNhZGEsIGVlbWFsZGFkYSBqYSBtdXV0YSB0ZWdldnVzdmlybmFzaWQsIGt1cyB0ZWlzZWQgcmFrZW5kdXNlZCB0w7bDtnRhdmFkLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBow6RpcmlkYSB0ZWlzdGUgcmFrZW5kdXN0ZSBrw6RpdHVtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9IjI5MTg3NjgyMzgwNDUyMDY0NTYiPiJtaXMgdGFoZXMgdG9pbWluZ3UgYWx1c3RhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSI5OTc4MjM2OTUzNDM1ODQwMDEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga8OkaXZpdGFkYSBtaXMgdGFoZXMgdG9pbWluZ3UgbG9hIGthaXRzZXN0IHbDtWkgZWtzcG9yZGl0dWQgb2xla3VzdCBzw7VsdHVtYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiJrdXZhIMO8aGlsZHV2dXNlIHNlYWRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5MjA0MzYxODY5MzkxNzM3NCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqdWh0aWRhIHRlaXN0ZSByYWtlbmR1c3RlIGt1dmEgw7xoaWxkdXZ1c2UgcmXFvmlpbWkuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHRlaXNpIHJha2VuZHVzaSBow6RpcmlkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldERlYnVnQXBwIiBtc2dpZD0iMzAyMjEwNzE5ODY4NjU4NDA1MiI+IlJha2VuZHVzZSBzaWx1bWlzZSBsdWJhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldERlYnVnQXBwIiBtc2dpZD0iNDQ3NDUxMjQxNjI5OTAxMzI1NiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsw7xsaXRhZGEgc2lzc2UgdGVpc2UgcmFrZW5kdXNlIHNpbHVtaXNlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBzZWRhIGthc3V0YWRhIHRlaXN0ZSByYWtlbmR1c3RlIHBlYXRhbWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQxNjIwOTIxODUxMjQyMzQ0ODAiPiJtdXV0a2Ugc8O8c3RlZW1pIGt1dmFzZWFkZWlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQzNzIyMjM4NzMxNTQyOTYwNzYiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbXV1dGEgcHJhZWd1c3Qga29uZmlndXJhdHNpb29uaSwgbsOkaXRla3MgbG9rYWF0aSB2w7VpIMO8bGRpc3Qga2lyamFzdXVydXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjU2ODQ1MDQwNTgxOTI5MjEwOTgiPiJhdXRvcmXFvmlpbWkgbHViYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19lbmFibGVDYXJNb2RlIiBtc2dpZD0iNDg1MzE4NzQyNTc1MTQxOTQ2NyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBhdXRvcmXFvmlpbWkgbHViYWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSIzOTE0MDI2Njg3NDIwMTc3MjAyIj4ic3VsZ2VnZSB0ZWlzZWQgcmFrZW5kdXNlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iNDU5MzM1MzIzNTk1OTczMzExOSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsw7VwZXRhZGEgdGVpc3RlIHJha2VuZHVzdGUgdGF1c3RhcHJvdHNlc3NlLiBTZWUgdsO1aWIgcGVhdGFkYSB0ZWlzdGUgcmFrZW5kdXN0ZSB0w7bDti4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+IlRlaXN0ZSByYWtlbmR1c3RlIGrDtXVnYSBwZWF0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjUyNTMxNTcyOTYxODM5NDA4MTIiPiJMdWJhYiByYWtlbmR1c2VsIHN1bm5pdmlpc2lsaXNlbHQgdGVpc2kgcmFrZW5kdXNpIHBlYXRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZUJhY2siIG1zZ2lkPSI2NTI5MzUyMDQwNzI1ODQ2MTYiPiJSYWtlbmR1c2Ugc3VsZ3VtYSBzdW5kaW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZUJhY2siIG1zZ2lkPSIzODkyMjk1ODMwNDE5NTEzNjIzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHN1bmRpZGEgaWdhIGVzaXBsYWFuaWwgb2xldmEgcmFrZW5kdXNlIHN1bGdlbWEgamEgdGFnYXNpIG1pbmVtYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kdW1wIiBtc2dpZD0iMTY4MTc5OTg2MjQzODk1NDc1MiI+InbDtXRhIHZhc3R1IHPDvHN0ZWVtaSBzaXNlb2xlayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2R1bXAiIG1zZ2lkPSIxNzc4Mjk5MDg4NjkyMjkwMzI5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlYWRhIHNhYWRhIHPDvHN0ZWVtaSBzaXNlbWlzdCBvbGVrdXQuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIGhhbmtpZGEgbWl0bWVzdWd1c3QgcHJpdmFhdHNldCBqYSB0dXJ2YXRlYXZldCwgbWlkYSBuZWlsIHRhdmFsaXNlbHQga3VuYWdpIHZhamEgZWkgbMOkaGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjgwMjI1ODg2MDg5OTQ1ODk5MzgiPiJla3JhYW5pc2lzdSB0YWFzdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSIzMTkzMjY5MDY5NDY5NzAwMjY1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGvDpHR0ZSBzYWFkYSBha3RpaXZzZSBha25hIHNpc3UuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIGhhbmtpZGEga29ndSBha25hIHNpc3UgamEgdXVyaWRhIGtvZ3Ugc2VsbGUgdGVrc3RpLCB2w6RsamEgYXJ2YXR1ZCBwYXJvb2xlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMjMxMjYxMjEzNTEyNzMxMDI1NCI+ImFqdXRpbmUgaMO1bGJ1c3R1c2UgbHViYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4iTHViYWIgcmFrZW5kdXNlbCBhanV0aXNlbHQgbHViYWRhIHNlYWRtZXMgaMO1bGJ1c3R1c2UuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIGx1YmFkYSBow7VsYnVzdHVzZSBrYXN1dGFqYSBuw7V1c29sZWt1dGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9Ijg1MzIyOTUxOTkxMTI1MTkzNzgiPiJoYW5naSBha25hIHRlYXZlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI0OTk4ODM2MzcwNDI0MTg2ODQ5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGhhbmtpZGEgdGVhdmV0IGFrbmFoYWxkdXJpIGFrZW5kZSBrb2h0YS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgaGFua2lkYSB0ZWF2ZXQsIG1pcyBvbiBtw7VlbGR1ZCBzw7xzdGVlbWlzaXNlc2VrcyBrYXN1dGFtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODY3NTUzNTY0ODgwNzQyNzM4OSI+ImZpbHRyZWVyaSBzw7xuZG11c2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9IjgwMDYyMzYzMTU4ODgzNDc2ODAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgcmVnaXN0cmVlcmlkYSBzaXNlc3R1c2ZpbHRyaSwgbWlzIGZpbHRyZWVyaWIga8O1aWdpIGthc3V0YWphIHPDvG5kbXVzdGUgdm9vLCBlbm5lIGt1aSBuZWVkIMOkcmEgc2FhZGV0YWtzZS4gUGFoYXRhaHRsaWsgcmFrZW5kdXMgdsO1aWIgc8O8c3RlZW1pIGthc3V0YWphbGlpZGVzdCBqdWh0aWRhIGlsbWEga2FzdXRhamEgc2Vra3VtaXNldGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI1OTczNjI2NzM4MTcwNjE4Nzc1Ij4ia3V2YSBzdXVyZW5kYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI3MTIxMjM1Njg0NTE1MDAzNzkyIj4iTHViYWIgcmFrZW5kdXNlbCBla3JhYW5pIHNpc3Ugc3V1cmVuZGFkYS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgbXV1bmRhZGEga3V2YSBzaXN1IG5paSwgZXQgc2VhZGUgbXV1dHViIGViYXN0YWJpaWxzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2h1dGRvd24iIG1zZ2lkPSI3MTg1NzQ3ODI0MDM4OTA5MDE2Ij4ib3NhbGluZSB2w6RsamFsw7xsaXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NodXRkb3duIiBtc2dpZD0iNzA0NjUwMDgzODc0NjI5MTc3NSI+IkzDvGxpdGFiIHRlZ2V2dXNoYWxkdXJpIHbDpGxqYWzDvGxpdHVzb2xla3Vzc2UuIEVpIGzDvGxpdGEgbMO1cGxpa3VsdCB2w6RsamEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI0MTM4NjA4NjEwNzE3NDI1NTczIj4idsOkbGRpIHJha2VuZHVzdGUgw7xtYmVybMO8bGl0YW1pc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI4MjYyMTk1ODAyNTgyMjU1MDIxIj4iVGFraXN0YWIga2FzdXRhamEgbMO8bGl0dW1pc3QgdGVpc2VsZSByYWtlbmR1c2VsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1Mzc5MjIzMTE0MTE1NDYwMTYiPiJha3RpaXZzZSByYWtlbmR1c2UgdGVhYmUgaGFua2ltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUxMjQ0ODg1NTQ5NjA2NzEzMSI+Ikx1YmFiIMO1aWd1c3RlIHNhYWphbCBoYW5raWRhIHByaXZhYXRzZXQgdGVhdmV0IGVrcmFhbmlsIGVzaXBsYWFuaWwgb2xldmEgYWt0aWl2c2UgcmFrZW5kdXNlIGtvaHRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iODkyMjM5MDk0ODY3MTgyNjU2Ij4iS8O1aWdpIHJha2VuZHVzdGUga8OkaXZpdHVtaXNlIGrDpGxnaW1pbmUgamEganVodGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqw6RsZ2lkYSBqYSBqdWh0aWRhLCBrdWlkYXMgc8O8c3RlZW0gdGVnZXZ1c2kga8OkaXZpdGFiLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBzw7xzdGVlbWkgdMOkaWVsaWt1bHQgcmlra3VkYS4gU2VkYSDDtWlndXN0IG9uIHZhamEgYWludWx0IGFyZW5kdXNla3MsIG1pdHRlIHRhdmFrYXN1dHVzZSBrb3JyYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjI1NzYzMzM0MzQ4OTM1MzI0NzUiPiJzYWFkYSBwYWtldGlzdCBlZW1hbGRhdHVkIHNhYWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSI2NjIxOTAxMjE2MjA3OTMxMDg5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGVkYXN0YWRhIHRlYXRpc2UgcmFrZW5kdXNlIHBha2V0aSBlZW1hbGRhbWlzZSBrb2h0YS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgc2VkYSBrYXN1dGFkYSB0ZWlzdGUga8OkaXRhdHVkIHJha2VuZHVzdGUgcGVhdGFtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiJzYWFkYSBTTVMtaSB0ZWVsIHZhc3R1dsO1ZXR1ZCBzYWFkZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBlZGFzdGFkYSB0ZWF0aXNlIFNNUy1zw7VudW1pIHZhc3R1dsO1dG1pc2Uga29odGEuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHNlZGEga2FzdXRhZGEgc2lzc2V0dWxldmF0ZSBTTVMtc8O1bnVtaXRlIHbDtWx0c2ltaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+InNhYWRhIFdBUC1QVVNILXZhc3R1dsO1ZXR1ZCBzYWF0ZWlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgZWRhc3RhZGEgdGVhdGlzZSBXQVAgUFVTSC1zw7VudW1pIHZhc3R1dsO1dG1pc2Uga29odGEuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHNlZGEga2FzdXRhZGEgTU1TLXPDtW51bWl0ZSB2YXN0dXbDtXRtaXNlIHbDtWx0c2ltaXNla3MgdsO1aSBtaXMgdGFoZXMgdmVlYmlsZWhlIHNpc3Ugc2FsYWphIGFzZW5kYW1pc2VrcyBwYWhhdGFodGxpa3VnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjI0NTE4NzM2NjQzNjM2NjI2NjYiPiJwaWlyYSB0w7bDtnRhdmF0ZSBwcm90c2Vzc2lkZSBhcnZ1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iNzMxODA2MTMxNDA0MDg3OTU0MiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqdWh0aWRhIHTDtsO2dGF2YXRlIHByb3RzZXNzaWRlIG1ha3NpbWFhbHNldCBhcnZ1LiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBwb2xlIHNlZGEgdmFqYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9IjU1MDk1ODUwNzc5ODc5Njk2NSI+InN1bmRpZ2UgdGF1c3RhcmFrZW5kdXNlZCBzdWxndW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNzQ3MTMxMDY1Mjg2ODg0MTQ5OSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtw6TDpHJhdGEsIGthcyB0ZWdldnVzZWQgbMO1cGV0YXRha3NlIGtvaGUsIGt1aSBuZWVkIGxpaWd1dmFkIHRhdXN0YWxlLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBwb2xlIHNlZGEgdmFqYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiJha3Ugc3RhdGlzdGlrYSBsdWdlbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjU4OTczNDY1ODI4ODI5MTUxMTQiPiJMdWJhYiByYWtlbmR1c2VsIGx1Z2VkYSBtYWRhbGEgYWt1dGFzZW1lIGthc3V0dXNhbmRtZWlkLiBWw7VpYiBsdWJhZGEgcmFrZW5kdXNlbCBoYW5raWRhIMO8a3Npa2FzamFsaWtrdSB0ZWF2ZXQgc2VsbGUga29odGEsIG1pcyByYWtlbmR1c2kgdGUga2FzdXRhdGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIzNzE5Njg5NzY0NTM2Mzc5NTU3Ij4iYWt1IHN0YXRpc3Rpa2EgbXV1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIGFrdSBrb2h0YSBrb2d1dHVkIHN0YXRpc3Rpa2F0LiBNaXR0ZSBrYXN1dGFkYSB0YXZhcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iMTUwODc3OTY4NzQzNjU4NTc0NCI+InJha2VuZHVzZSB0w7bDtnN0YXRpc3Rpa2EgaGFua2ltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGhhbmtpZGEga29ndXR1ZCByYWtlbmR1c2UgdMO2w7ZzdGF0aXN0aWthdC4gTWl0dGUga2FzdXRhZGEgdGF2YXJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9Ijg4MjkwOTczNzM4NTE1MjE1MDUiPiJyYWtlbmR1c2UgdMO2w7ZzdGF0aXN0aWthIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI1MDc4NDU5NjU5NDQwMzQ4MyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSBrb2d1dHVkIHJha2VuZHVzZSB0w7bDtnN0YXRpc3Rpa2F0LiBNaXR0ZSBrYXN1dGFkYSB0YXZhcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhY2t1cCIgbXNnaWQ9IjQ3MDAxMzAyMjg2NTQ1MzkyMCI+Imp1aGkgc8O8c3RlZW1pIHZhcnVuZHVzdCBqYSB0YWFzdGV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmFja3VwIiBtc2dpZD0iNjkxMjIzMDUyNTE0MDU4OTg5MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqdWh0aWRhIHPDvHN0ZWVtaSB2YXJ1bmR1cy0gamEgdGFhc3RlbWVoaGFuaXNtaS4gTWl0dGUga2FzdXRhZGEgdGF2YXJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maXJtX2Z1bGxfYmFja3VwIiBtc2dpZD0iNTU1NzA3MTMyNTgwNDQ2OTEwMiI+InTDpGllbGlrdSB2YXJ1a29vcGlhIGtpbm5pdGFtaW5lIHbDtWkgdG9pbWluZ3UgdGFhc3RhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGvDpGl2aXRhZGEgdMOkaWVsaWt1IHZhcnVrb29waWEga2lubml0dXNsaWlkZXNlLiBNaXR0ZSBrYXN1dGFkYSDDvGhlc2tpIHJha2VuZHVzZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9IjIxNDg1NjM2MjgxNDAxOTMyMzEiPiJrdXZhIHZvbGl0dXNldGEgYWtuYWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9Ijc0NTgzODc3NTk0NjE0NjYzOTciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSBha25haWQsIG1pcyBvbiBtw7VlbGR1ZCBrYXN1dGFtaXNla3Mgc8O8c3RlZW1pc2lzZXNlbGUga2FzdXRhamFsaWlkZXNlbGUuIE1pdHRlIGthc3V0YWRhIHRhdmFyYWtlbmR1c3RlIHB1aHVsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4idMO1bW1ha2Ugw7xsZSB0ZWlzdGUgcmFrZW5kdXN0ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iODU4NDY3ODM4MTk3MjgyMDExOCI+Ikx1YmFiIHJha2VuZHVzZWwgam9vbmlzdGFkYSB0ZWlzdGVsZSByYWtlbmR1c3RlbGUgdsO1aSBuZW5kZSBrYXN1dGFqYWxpaWRlc3RlbGUuIFNlZSB2w7VpYiBzZWdhZGEgw7xrc2vDtWlrIG1pbGxpc2UgcmFrZW5kdXNlIGxpaWRlc2Uga2FzdXRhbWlzdCB2w7VpIG11dXRhIHNlZGEsIG1pZGEgYXJ2YXRlIG7DpGdldmF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSIyODA1MTAzMjQxMTUzOTA3MTc0Ij4ibXV1ZGEgw7xsZGlzdCBhbmltYXRzaW9vbmlraWlydXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIGFuaW1hdHNpb29uaSDDvGxkaXN0IGtpaXJ1c3QgKGFuaW1hdHNpb29uZSBraWlyZW5kYWRhIHbDtWkgYWVnbHVzdGFkYSkgw7xrc2vDtWlrIG1pbGxhbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjEyODY1MDU3MTcwNTAxMjEzNzAiPiJSYWtlbmR1c2UgbHViYWRlIGhhbGRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSBqYSBoYWxsYXRhIHRlbWEgZW5kYSBsdWJlLCBtw7bDtmR1ZGVzIHRhdmFww6RyYXNlc3QgWi1qw6RyamVrb3JyYXN0LiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9IjQ3MDgxODExODQ0NDE4ODAxNzUiPiJla3JhYW5pa3V2YSBwZWF0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mcmVlemVTY3JlZW4iIG1zZ2lkPSI4NTU4OTIzNzg5MjIyNjcwMDY0Ij4iTHViYWIgcmFrZW5kdXNlbCBhanV0aXNlbHQgcGVhdGFkYSBla3JhYW5pIGt1dmEgdMOkaXNla3JhYW5pbGUgw7xsZW1pbmVrdWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5qZWN0RXZlbnRzIiBtc2dpZD0iMTM3ODc0NjU4NDAyMzU4NjYwMCI+InZhanV0YSBrbGFodmUgamEganVodG51cHBlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5qZWN0RXZlbnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDYzNTI1NjU1OTk5Njg2MzIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2FhdGEgb21hIHNpc2VuZHRvaW1pbmd1aWQgKGtsYWh2aXZhanV0dXNpIGptcykgdGVpc3RlbGUgcmFrZW5kdXN0ZWxlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBzZWRhIGthc3V0YWRhIHRhaHZlbGFydnV0aSDDvGxldsO1dG1pc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTMxMjgwNTc1NzIzMjYyNTMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2FhdGEgb21hIHNpc2VuZHRvaW1pbmd1aWQgKGtsYWh2aXZhanV0dXNpIGptcykgdGVpc3RlbGUgcmFrZW5kdXN0ZWxlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBzZWRhIGthc3V0YWRhIHRlbGVmb25pIMO8bGV2w7V0bWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI0Njk0Mjg5MDAwNDEyNDkyMzQiPiJzYWx2ZXN0YSBzaXNlc3RhdGF2IHRla3N0IGphIHRlaHRhdmFkIHRvaW1pbmd1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iODM4Nzc1NDkwMTY4ODcyODA0MyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2YWFkYXRhIHZhanV0YXRhdmFpZCBrbGFodmUsIGlzZWdpIGt1aSBzdWh0bGV0ZSB0ZWlzZSByYWtlbmR1c2VnYSAobsOkaXRla3MgcGFyb29saSBzaXNlc3RhbWlzZWwpLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMzNjAwNjQ2MjAyMzA1MTU3NzYiPiJzZW8gc2lzZXN0dXNtZWV0b2RpZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMjUwNDQwMzIyODA3Mjg2MzMxIj4iTHViYWIgb21hbmlrdWwgc2lkdWRhIHNpc2VzdHVzbWVldG9kaSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI1MzU3NzMzOTQyNTU2MDMxNTkzIj4ic2lkdW1pbmUganV1cmRlcMOkw6RzdXRlZW51c2VnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjcwMzQ2MTU5Mjg2MDkzMzEzNjgiPiJMdWJhYiBvbWFuaWt1bCBsdXVhIHNpZGVtZSBqdXVyZGVww6TDpHN1dGVlbnVzZSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgdG9oaWtzIHNlZGEga3VuYWdpIHZhamEgbWlubmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iODQ2MjgxNTE3OTU3Mjc0ODc2MSI+InNpZHVtaW5lIHByaW50aW1pc3RlZW51c2VnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI3OTYwMDY3NjIzMjA5MTExMTM1Ij4iTHViYWIgb21hbmlrdWwgc2lkdWRhIHByaW50aW1pc3RlZW51c2Ugw7xsYXRhc2VtZSBsaWlkZXNlZ2EuIFRhdmFyYWtlbmR1c3RlIHB1aHVsIGVpIHBlYWtzIHNlZGEga3VuYWdpIHZhamEgbWluZW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQWxsUHJpbnRKb2JzIiBtc2dpZD0iMTEyMDc5MjQ2ODQ2NTcxMTE1OSI+Imp1dXJkZXDDpMOkcyBrw7Vpa2lkZWxlIHByaW50aW1pc3TDtsO2ZGVsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0FsbFByaW50Sm9icyIgbXNnaWQ9IjI5NzgxODUzMTEwNDE4NjQ3NjIiPiJMdWJhYiBvbWFuaWt1bGUganV1cmRlcMOkw6RzdSB0ZWlzZSByYWtlbmR1c2UgbG9vZHVkIHByaW50aW1pc3TDtsO2ZGVsZS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjI3NTI3MzEzMDA0MTk0MTA3MjQiPiJORkMtdGVlbnVzZWdhIHNpZHVtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4iTHViYWIga2FzdXRhamFsIGx1dWEgc2Vvc2VkIHJha2VuZHVzdGVnYSwgbWlzIGrDpGxqZW5kYXZhZCBORkMta2FhcnRlLiBQb2xlIGt1bmFnaSB2YWphbGlrIHRhdmFsaXN0ZSByYWtlbmR1c3RlIGtvcnJhbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjczNTgzNzg0MDE5MTUyODc5MzgiPiJ0ZWtzdGl0ZWVudXNlZ2Egc2lkdW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI4MTUxOTY4OTEwOTczOTk4NjcwIj4iVsO1aW1hbGRhYiBvbWFuaWt1bCBzaWR1ZGEgdGVrc3RpdGVlbnVzZSAobnQgU3BlbGxDaGVja2VyU2VydmljZSkgw7xsYXRhc2VtZSBsaWlkZXNlZ2EuIFRhdmFyYWtlbmR1c3RlIHB1aHVsIGVpIHBlYWtzIHNlZGEga3VuYWdpIHZhamEgbWluZW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4ic2VvIFZQTi10ZWVudXNlZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJWw7VpbWFsZGFiIG9tYW5pa3VsIHNpZHVkYSBWUE4tdGVlbnVzZSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InRhdXN0YXBpbGRpZ2Egc2lkdW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+Ikx1YmFiIG9tYW5pa3VsIHNpZHVkYSB0YXVzdGFwaWxkaSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4idmlkaW5hdGVlbnVzZWdhIHNpZHVtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+Ikx1YmFiIG9tYW5pa3VsIHNpZHVkYSB2aWRpbmEgdGVlbnVzZSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4ic2VhZG1lIGFkbWluaXN0cmFhdG9yaWdhIHN1aHRsZW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI1Njk3MTU0MTk1NDM5MDc5MzAiPiJWw7VpbWFsZGFiIG9tYW5pa3VsIHNhYXRhIGthdmF0c3VzaSBzZWFkbWUgYWRtaW5pc3RyYWF0b3JpbGUuIFRhdmFyYWtlbmR1c3RlIHB1aHVsIGVpIHBlYWtzIHNlZGEga3VuYWdpIHZhamEgbWluZW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNDI0ODgyODkwMDA0NTgwODcyMiI+InNlYWRtZSBhZG1pbmlzdHJhYXRvcmkgbGlzYW1pbmUgdsO1aSBlZW1hbGRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURldmljZUFkbWlucyIgbXNnaWQ9IjUwMjU2MDgxNjc3MDk5NDI0ODUiPiJWw7VpbWFsZGFiIG9tYW5pa3VsIGxpc2FkYSB2w7VpIGVlbWFsZGFkYSBha3RpaXZzZWlkIHNlYWRtZSBhZG1pbmlzdHJhYXRvcmVpZC4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgdG9oaWtzIHNlZSBrdW5hZ2kgdmFqYWxpayBvbGxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMzY1OTQ3NzE3MTYzODY2ODQ0Ij4ibXV1ZGEgZWtyYWFuaSBwYWlndXR1c3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbXV1dGEgZWtyYWFuaSBww7bDtnJhbWlzdCBtaXMgdGFoZXMgYWphbC4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI5MTc1MzcxNjEzMzIyNTYyOTM0Ij4ia3Vyc29yaWtpaXJ1c2UgbXV1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI2ODY2NTYzMjM0Mjc0MTA0MjMzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIGlnYWwgYWphbCBoaWlyZS0gdsO1aSBwdXV0ZXBhZGpha3Vyc29yaSBraWlydXN0LiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iNDc3ODczMTcwMzYwMDkwOTM0MCI+ImtsYXZpYXR1dXJpIHBhaWd1dHVzZSBtdXV0bWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iODQ4MDAxNjc3MTEzNDE3NTg3OSI+Ikx1YmFiIHJha2VuZHVzZWwgbXV1dGEga2xhdmlhdHV1cmkgcGFpZ3V0dXN0LiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBrdW5hZ2kgdmFqYSBvbGVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0NTM5MDAyOTkxOTQ3Mzc2NjU5Ij4iTGludXhpIHNpZ25hYWxpZGUgc2FhdG1pbmUgcmFrZW5kdXN0ZWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGFvdGxlZGEgZWRhc3RhdHVkIHNpZ25hYWxpIHNhYXRtaXN0IGvDtWlnaWxlIHDDvHNpcHJvdHNlc3NpZGVsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcnNpc3RlbnRBY3Rpdml0eSIgbXNnaWQ9Ijg4NDExMTM2Mjc5NTU1NjM5MzgiPiJSYWtlbmR1c3RlIHBpZGV2IHTDtsO2cyBob2lkbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSBvbWEgb3NpIG3DpGx1cyBww7xzaXZha3MuIFNlZSB2w7VpYiBwaWlyYXRhIHRlaXN0ZWxlICh0YWh2ZWxhcnZ1dGl0IGFlZ2xhc2VtYWtzIG11dXR2YXRlbGUpIHJha2VuZHVzdGVsZSBzYWFkYW9sZXZhdCBtw6RsdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0Mzg0NzYwMDQ3NTA4Mjc4MjcyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIG9tYSBvc2kgbcOkbHVzIHDDvHNpdmFrcy4gU2VlIHbDtWliIHBpaXJhdGEgdGVpc3RlbGUgKHRlbGVmb25pIGFlZ2xhc2VtYWtzIG11dXR2YXRlbGUpIHJha2VuZHVzdGVsZSBzYWFkYW9sZXZhdCBtw6RsdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iMTg0Mzg1MTI5NTM3NzA1OTM4Ij4iUmFrZW5kdXN0ZSBrdXN0dXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBrdXN0dXRhZGEgQW5kcm9pZC1wYWtldHRlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBzZWRhIGthc3V0YWRhIG9sdWxpc3RlIHJha2VuZHVzdGUga3VzdHV0YW1pc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiJUZWlzdGUgcmFrZW5kdXN0ZSBhbmRtZXRlIGt1c3R1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjQ2MjUzMjM2ODQxMjU0NTk0ODgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga3VzdHV0YWRhIGthc3V0YWphIGFuZG1lZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4iVGVpc3RlIHJha2VuZHVzdGUgdmFoZW3DpGx1IGt1c3R1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga3VzdHV0YWRhIHZhaGVtw6RsdSBmYWlsaWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9Ijc0NzI5MjE3NjgzNTc5ODE5ODYiPiJSYWtlbmR1c2UgbcOkbHVydXVtaSBtw7XDtXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHR1dWEgb21hIGtvb2RpLCBhbmRtZWQgamEgdmFoZW3DpGx1IHN1dXJ1c2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSIyMTk5MTI4NDgyODIwMzA2OTI0Ij4iUmFrZW5kdXN0ZSBvdHNlIGluc3RhbGxpbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaW5zdGFsbGlkYSB1dXNpIHbDtWkgdsOkcnNrZW5kYXR1ZCBBbmRyb2lkLXBha2V0dGUuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHNlbGxlIGFiaWwgbGlzYWRhIHV1c2kgbWVlbGV2YWxkc2UgdGVnZXZ1c2UgbHViYWRlZ2EgcmFrZW5kdXNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiJLw7VpZ2kgcmFrZW5kdXNlIHZhaGVtw6RsdWFuZG1ldGUga3VzdHV0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTc0NjQwODcxOTQ1NDM0NTY1Ij4iTHViYWIgcmFrZW5kdXNlbCB2YWJhc3RhZGEgdGFodmVsYXJ2dXRpIG3DpGx1cnV1bWksIGt1c3R1dGFkZXMgZmFpbGUgdGVpc3RlIHJha2VuZHVzdGUgdmFoZW3DpGx1IGthdGFsb29naWRlcy4gU2VsbGUgdGFnYWrDpHJqZWwgdsO1aXZhZCB0ZWlzZWQgcmFrZW5kdXNlZCBrw6Rpdml0dWRhIGFlZ2xhc2VtYWx0LCBzZXN0IG5lZWQgcGVhdmFkIG9tYSBhbmRtZWQgdXVlc3RpIHRvb21hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNDU5NDQxMDIxOTU2NDM2Nzc5Ij4iTHViYWIgcmFrZW5kdXNlbCB2YWJhc3RhZGEgdGVsZWZvbmkgbcOkbHVydXVtaSwga3VzdHV0YWRlcyBmYWlsZSB0ZWlzdGUgcmFrZW5kdXN0ZSB2YWhlbcOkbHUga2F0YWxvb2dpZGVzLiBTZWxsZSB0YWdhasOkcmplbCB2w7VpdmFkIHRlaXNlZCByYWtlbmR1c2VkIGvDpGl2aXR1ZGEgYWVnbGFzZW1hbHQsIHNlc3QgbmVlZCBwZWF2YWQgb21hIGFuZG1lZCB1dWVzdGkgdG9vbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3ZlUGFja2FnZSIgbXNnaWQ9IjMyODk4OTAyNzE2NDU5MjE0MTEiPiJSYWtlbmR1c2UgcmVzc3Vyc3NpZGUgdGVpc2FsZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMTk1NjIyMTc3NzgyNDQ1MjQiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGVpc2FsZGEgcmFrZW5kdXNlcmVzc3Vyc2lkIHNpc2VtaXNlbHQga2FuZGphbHQgdsOkbGlzZWxlIGphIHZhc3R1cGlkaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRMb2dzIiBtc2dpZD0iNjYxNTc3ODU0MzE5ODk2NzYxNCI+InR1bmRsaWtlIGxvZ2lhbmRtZXRlIGx1Z2VtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBzw7xzdGVlbWkgZXJpbmV2YWlkIGxvZ2lmYWlsZS4gTmlpIG9uIHbDtWltYWxpayBhdmFzdGFkYSDDvGxkaXN0IHRlYXZldCBzZWxsZSBrb2h0YSwgbWlkYSB0ZSB0YWh2ZWxhcnZ1dGlnYSB0ZWV0ZSwgc2ggaXNpa2xpa2t1IHbDtWkgcHJpdmFhdHNldCB0ZWF2ZXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMDYzNDM4MTQwMjQxNTYwNDQzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBzw7xzdGVlbWkgZXJpbmV2YWlkIGxvZ2lmYWlsZS4gTmlpIG9uIHbDtWltYWxpayBhdmFzdGFkYSDDvGxkaXN0IHRlYXZldCBzZWxsZSBrb2h0YSwgbWlkYSB0ZSB0ZWxlZm9uaWdhIHRlZXRlLCBtaXMgdsO1aWIga2Fhc2F0YSBrYSBpc2lrbGlra3UgdsO1aSBwcml2YWF0c2V0IHRlYXZldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI3MTU4MDU1NTU4MjM4ODE4MTgiPiJNaXMgdGFoZXMgbWVlZGl1bWlkZWtvb2Rlcmkga2FzdXRhbWluZSB0YWFzZXNpdHVzZWtzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGFhc2VzaXR1c2VrcyBrYXN1dGFkYSBtaXMgdGFoZXMgaW5zdGFsbGl0dWQgbWVlZGl1bWlkZWtvb2Rlcml0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiJsb2Uva2lyanV0YSB2YWxpamEgYWxsaWthaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWdlZGEgdmFsaW1pc3LDvGhtYSBtaXMgdGFoZXMgcmVzc3Vyc3NpIGphIHNlbGxlc3NlIGtpcmp1dGFkYSAobsOkaXRla3Mga2F1c3RhcyAvZGV2IG9sZXZhZCBmYWlsaWQpLiBTZWUgdsO1aWIgbcO1anV0YWRhIHPDvHN0ZWVtaSBzdGFiaWlsc3VzdCBqYSB0dXJ2ZXQuIFNlZGEgdG9oaWtzIGthc3V0YWRhIHRvb3RqYSB2w7VpIG9wZXJhYXRvciBBSU5VTFQgcmlpc3R2YXJhc3BldHNpaWZpbGlzZWtzIGRpYWdub3N0aWtha3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiJSYWtlbmR1c2Uga29tcG9uZW50aWRlIGx1YmFtaW5lIHbDtWkga2VlbGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbcOkw6RyYXRhLCBrYXMgdGVpc2UgcmFrZW5kdXNlIGtvbXBvbmVudCBvbiBsdWJhdHVkIHbDtWkgbWl0dGUuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIGthc3V0YWRhIHNlZGEgb2x1bGlzdGUgdGFodmVsYXJ2dXRpcmFrZW5kdXN0ZSBrZWVsYW1pc2Vrcy4gTmVuZGUgw7VpZ3VzdGUgcHVodWwgcGVhYiBvbGVtYSBldHRldmFhdGxpaywga3VuYSBuZWVkIHbDtWltYWxkYXZhZCBtdXV0YSByYWtlbmR1c2Uga29tcG9uZW50ZSBrYXN1dHVrcywgZWJhw7xodGxhc2VrcyB2w7VpIGViYXN0YWJpaWxzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTgyNzIzMjQ4NDQxNjUwNTYxNSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtw6TDpHJhdGEsIGthcyB0ZWlzZSByYWtlbmR1c2Uga29tcG9uZW50IG9uIGx1YmF0dWQgdsO1aSBtaXR0ZS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQga2FzdXRhZGEgc2VkYSBvbHVsaXN0ZSB0ZWxlZm9uaXJha2VuZHVzdGUga2VlbGFtaXNla3MuIE5lbmRlIMO1aWd1c3RlIHB1aHVsIHBlYWIgb2xlbWEgZXR0ZXZhYXRsaWssIGt1bmEgbmVlZCB2w7VpbWFsZGF2YWQgbXV1dGEgcmFrZW5kdXNlIGtvbXBvbmVudGUga2FzdXR1a3MsIGViYcO8aHRsYXNla3MgdsO1aSBlYmFzdGFiaWlsc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0NjI3MzE1MzUxMDkzNTA4Nzk1Ij4ibHViYWRlIGFuZG1pbmUgdsO1aSB0w7xoaXN0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDA4ODY0MjY1NDA4NTg1MDY2MiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBhbmRhIHbDtWkgdMO8aGlzdGFkYSB0ZWF0dWQgbHViYXNpZCBlbmRhbGUgdsO1aSB0ZWlzdGVsZSByYWtlbmR1c3RlbGUuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIGthc3V0YWRhIHNlZGEganV1cmRlcMOkw6RzdSBoYW5raW1pc2VrcyBzZWxsaXN0ZWxlIGZ1bmt0c2lvb25pZGVsZSwgbWlsbGUgamFva3MgdGUgcG9sZSBsdWJhIGFuZG51ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9Ijg0NjMxODE2Mjg2OTUzOTYzOTEiPiJFZWxpc3RhdHVkIHJha2VuZHVzdGUgbcOkw6RyYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI0OTczOTg2NzYyMjQxNzgzNzEyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRlaWUgZWVsaXN0YXR1ZCByYWtlbmR1c2kuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHNhbGFqYSBtdXV0YSB0w7bDtnRhdmFpZCByYWtlbmR1c2ksIHBldHRlcyB0ZWllIG9sZW1hc29sZXZhZCByYWtlbmR1c2VkIGtvZ3VtYSB0ZWlsdCBwcml2YWF0c2VpZCBhbmRtZWlkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9IjIyMjYxOTUyOTA5NTUyMjQ3MzAiPiJtdXV0a2Ugc8O8c3RlZW1pIHNlYWRlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNldHRpbmdzIiBtc2dpZD0iNzc3NTcyMzQ0MTU1ODkwNzE4MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSBzw7xzdGVlbWlzZWFkZXRlIGFuZG1laWQuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHJpa2t1ZGEgdGVpZSBzw7xzdGVlbWkga29uZmlndXJhdHNpb29uaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiJtdXVkYSB0dXJ2YWxpc2kgc8O8c3RlZW1pc2VhZGVpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHPDvHN0ZWVtaSB0dXJ2YXNlYWRldGUgYW5kbWVpZC4gTWl0dGUga2FzdXRhZGEgdGF2YXJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiJtdXVkYSBHb29nbGVcJ2kgdGVlbnVzdGVrYWFydGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbXV1dGEgR29vZ2xlXCdpIHRlZW51c3Rla2FhcnRpLiBNaXR0ZSBrYXN1dGFkYSB0YXZhcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVCb290Q29tcGxldGVkIiBtc2dpZD0iNTMxMjk2NTU2NTk4NzgwMDAyNSI+ImvDpGl0YWdlIGvDpGl2aXRhbWlzZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzM5MDMwNDY2NDExNjg4MDcwNCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBrw6Rpdml0dWRhIGlzZSBrb2hlLCBrdWkgc8O8c3RlZW0gb24ga8OkaXZpdHVudWQuIFNlZSB2w7VpYiB0YWh2ZWxhcnZ1dGkga8OkaXZpdGFtaXN0IGFlZ2x1c3RhZGEgamEgbHViYWIgcmFrZW5kdXNlbCBtdXV0YSB0YWh2ZWxhcnZ1dGkga2Egw7xsZGlzZWx0IGFlZ2xhc2VtYWtzLCBrdW5hIHTDtsO2dGFiIHBpZGV2YWx0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGvDpGl2aXR1ZGEgaXNlIGtvaGUsIGt1aSBzw7xzdGVlbSBvbiBrw6Rpdml0dW51ZC4gU2VlIHbDtWliIHRlbGVmb25pIGvDpGl2aXRhbWlzdCBhZWdsdXN0YWRhIGphIGx1YmFiIHJha2VuZHVzZWwgbXV1dGEgdGVsZWZvbmkga2Egw7xsZGlzZWx0IGFlZ2xhc2VtYWtzLCBrdW5hIHTDtsO2dGFiIHBpZGV2YWx0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U3RpY2t5IiBtc2dpZD0iNzkxOTEyNjM3MjYwNjg4MTYxNCI+ImtsZWVwc2FhdGUgc2FhdG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc3NDk3NjA0OTQzOTk5MTU2NTEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2FhdGEgcMO8c2l2YWlkIGVkYXN0dXNpLCBtaXMgasOkw6R2YWQgcMOkcmFzdCBzYWF0ZSBsw7VwcGVtaXN0IGFsbGVzLiDDnGxlbcOkw6RyYW5lIGthc3V0YW1pbmUgdsO1aWIgbXV1dGEgdGFodmVsYXJ2dXRpIGFlZ2xhc2VrcyB2w7VpIGViYXN0YWJpaWxzZWtzLCBww7VoanVzdGFkZXMgc2VsbGUgbGlpZ2Egc3V1cmUgbcOkbHVrYXN1dHVzZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHNhYXRhIHDDvHNpdmFpZCBlZGFzdHVzaSwgbWlzIGrDpMOkdmFkIHDDpHJhc3Qgc2FhdGUgbMO1cHBlbWlzdCBhbGxlcy4gw5xsZW3DpMOkcmFuZSBrYXN1dGFtaW5lIHbDtWliIG11dXRhIHRlbGVmb25pIGFlZ2xhc2VrcyB2w7VpIGViYXN0YWJpaWxzZWtzLCBww7VoanVzdGFkZXMgc2VsbGUgbGlpZ2Egc3V1cmUgbcOkbHVrYXN1dHVzZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDb250YWN0cyIgbXNnaWQ9IjgzNDg0ODExMzE4OTk4ODYxMzEiPiJsdWdlZ2Ugb21hIGtvbnRha3RlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1Mjk0ODY2ODU2OTQxMTQ5NjM5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBhbmRtZWlkIHRlaWUgdGFodmVsYXJ2dXRpc3NlIHNhbHZlc3RhdHVkIGtvbnRha3RpZGUga29odGEsIG7DpGl0ZWtzIHNlZGEsIGt1aSB0aWh0aSB0ZSBrZWxsZWxlZ2kgaGVsaXN0YXRlLCBtZWlsaXRlIHbDtWkgbmVuZGVnYSBtdXVsIHZpaXNpbCBzdWh0bGV0ZS4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c3RlbCBzYWx2ZXN0YWRhIHRlaWUga29udGFrdGFuZG1laWQgamEgcGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpZSB0ZWFkbWF0YSBrb250YWt0YW5kbWVpZCBqYWdhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ0MDY1NDE1MjQ1NzMwMDY2MiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWdlZGEgYW5kbWVpZCB0ZWllIHRlbGVmb25pIHNhbHZlc3RhdHVkIGtvbnRha3RpZGUga29odGEsIG7DpGl0ZWtzIHNlZGEsIGt1aSB0aWh0aSB0ZSBrZWxsZWxlZ2kgaGVsaXN0YXRlLCBtZWlsaXRlIHbDtWkgbmVuZGVnYSBtdXVsIHZpaXNpbCBzdWh0bGV0ZS4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c3RlbCBzYWx2ZXN0YWRhIHRlaWUga29udGFrdGFuZG1laWQgamEgcGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpZSB0ZWFkbWF0YSBrb250YWt0YW5kbWVpZCBqYWdhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNvbnRhY3RzIiBtc2dpZD0iNTEwNzQ5MjA4NjQxNjc5MzU0NCI+Im11dXRrZSBvbWEga29udGFrdGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbXV1dGEgdGFodmVsYXJ2dXRpc3NlIHNhbHZlc3RhdHVkIGtvbnRha3RpZGUgYW5kbWVpZCwgc2VhbGh1bGdhcyBzZWRhLCBrdWkgdGlodGkgb2xldGUga29ua3JlZXRzZXRlbGUga29udGFrdGlkZWxlIGhlbGlzdGFudWQsIG1laWxpbnVkIHbDtWkgbmVuZGVnYSBtdXVsIHZpaXNpbCBzdWhlbG51ZC4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c3RlbCBrdXN0dXRhZGEga29udGFrdGFuZG1laWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU4OTg2OTIyNDYyNTE2MzU1OCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB0ZWxlZm9uaSBzYWx2ZXN0YXR1ZCBrb250YWt0aWRlIGFuZG1laWQsIHNlYWxodWxnYXMgc2VkYSwga3VpIHRpaHRpIG9sZXRlIGtvbmtyZWV0c2V0ZWxlIGtvbnRha3RpZGVsZSBoZWxpc3RhbnVkLCBtZWlsaW51ZCB2w7VpIG5lbmRlZ2EgbXV1bCB2aWlzaWwgc3VoZWxudWQuIFNlZSBsdWJhIHbDtWltYWxkYWIgcmFrZW5kdXN0ZWwga3VzdHV0YWRhIGtvbnRha3RhbmRtZWlkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGxMb2ciIG1zZ2lkPSIzNDc4MTMzMTg0NjI0MTAyNzM5Ij4ia8O1bmVsb2dpIGx1Z2VtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM3MDA2NDUxODQ4NzA3NjAyODUiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHRlaWUgdGFodmVsYXJ2dXRpIGvDtW5lbG9naSwgc2ggYW5kbWVpZCBzaXNzZXR1bGV2YXRlIGphIHbDpGxqdXZhdGUga8O1bmVkZSBrb2h0YS4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c3RlbCBzYWx2ZXN0YWRhIHRlaWUga8O1bmVsb2dpIGFuZG1laWQgamEgcGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpZSB0ZWFkbWF0YSBrw7VuZWxvZ2kgYW5kbWVpZCBqYWdhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSB0ZWllIHRlbGVmb25pIGvDtW5lbG9naSwgc2ggYW5kbWVpZCBzaXNzZXR1bGV2YXRlIGphIHbDpGxqdXZhdGUga8O1bmVkZSBrb2h0YS4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c3RlbCBzYWx2ZXN0YWRhIHRlaWUga8O1bmVsb2dpIGFuZG1laWQgamEgcGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpZSB0ZWFkbWF0YSBrw7VuZWxvZ2kgYW5kbWVpZCBqYWdhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4ia8O1bmVsb2dpIGtpcmp1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4iTHViYWIgcmFrZW5kdXNlbCBtdXV0YSB0YWh2ZWxhcnZ1dGkga8O1bmVsb2dpLCBzaCBzaXNzZXR1bGV2YXRlIGphIHbDpGxqYW1pbmV2YXRlIGvDtW5lZGUgYW5kbWVpZC4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQga2FzdXRhZGEgc2VkYSBrw7VuZWxvZ2kga3VzdHV0YW1pc2VrcyB2w7VpIG11dXRtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4iTHViYWIgcmFrZW5kdXNlbCBtdXV0YSB0ZWxlZm9uaSBrw7VuZWxvZ2ksIHNoIHNpc3NldHVsZXZhdGUgamEgdsOkbGphbWluZXZhdGUga8O1bmVkZSBhbmRtZWlkLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBrYXN1dGFkYSBzZWRhIGvDtW5lbG9naSBrdXN0dXRhbWlzZWtzIHbDtWkgbXV1dG1pc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+Imx1Z2VnZSBvbWEga29udGFrdGlrYWFydGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NjI0NzUxNTE4NDk4ODg4NDgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHNlYWRtZXNzZSBzYWx2ZXN0YXR1ZCBpc2lrbGlra3UgcHJvZmlpbGl0ZWF2ZXQsIG7DpGl0ZWtzIHRlaWUgbmltZSBqYSBrb250YWt0dGVhdmV0LiBTZWUgdMOkaGVuZGFiLCBldCByYWtlbmR1cyBzYWFiIHRlaWQgdHV2YXN0YWRhIGphIHNhYXRhIHRlaWUgcHJvZmlpbGl0ZWF2ZXQgdGVpc3RlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiJtdXV0a2Ugb21hIGtvbnRha3Rpa2FhcnRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTU1MjA4NDI5NDU5ODQ2NTg5OSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB2w7VpIGxpc2FkYSBzZWFkbWVzc2Ugc2FsdmVzdGF0dWQgaXNpa2xpa2t1IHByb2ZpaWxpdGVhdmV0LCBuw6RpdGVrcyB0ZWllIG5pbWUgamEga29udGFrdHRlYXZldC4gU2VlIHTDpGhlbmRhYiwgZXQgcmFrZW5kdXMgc2FhYiB0ZWlkIHR1dmFzdGFkYSBqYSBzYWF0YSB0ZWllIHByb2ZpaWxpdGVhdmV0IHRlaXN0ZWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiJTb3RzaWFhbHZvbyBsdWdlbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4iQW5uYWIgcmFrZW5kdXNlbGUganV1cmRlcMOkw6RzdSBqYSB2w7VpbWFsZGFiIHPDvG5rcm9vbmlkYSB0ZWllIGphIHRlaWUgc8O1cHJhZGUgc290c2lhYWxzZWlkIHbDpHJza2VuZHVzaS4gT2xnZSB0ZWFiZSBqYWdhbWlzZWwgZXR0ZXZhYXRsaWsg4oCTIHNlZSB2w7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHRlaWUgc3VodGx1c2kgc8O1cHJhZGVnYSBzdWh0bHVzdsO1cmd1c3Rpa2VzIGtvbmZpZGVudHNpYWFsc3VzZXN0IGhvb2xpbWF0YS4gTcOkcmt1czogc2VlIGx1YmEgZWkgcHJ1dWdpIGrDtXVzdHVkYSBrw7VpZ2lzIHN1aHRsdXN2w7VyZ3VzdGlrZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM1MDQxNzkyMjI0OTMyMzU2NDUiPiJTb3RzaWFhbHZvb2d1IGtpcmp1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGt1dmFkYSBzw7VwcmFkZSBzb3RzaWFhbHNlaWQgdsOkcnNrZW5kdXNpLiBPbGdlIHRlYWJlIGphZ2FtaXNlbCBldHRldmFhdGxpayDigJMgc2VlIHbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdXVhIHPDtW51bWVpZCwgbWlzIHbDtWl2YWQgbsOkaWRhIHR1bGV2YXQgc8O1cHJhZGVsdC4gTcOkcmt1czogc2VlIGx1YmEgZWkgcHJ1dWdpIGrDtXVzdHVkYSBrw7Vpa2lkZXMgc3VodGx1c3bDtXJndXN0aWtlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxlbmRhciIgbXNnaWQ9IjU5NzI3Mjc1NjAyNTc2MTIzOTgiPiJrYWxlbmRyaXPDvG5kbXVzdGUgbHVnZW1pbmUgamEga29uZmlkZW50c2lhYWxuZSB0ZWF2ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWdlZGEga8O1aWtpIHRhaHZlbGFydnV0aXNzZSBzYWx2ZXN0YXR1ZCBrYWxlbmRyaXPDvG5kbXVzaSwgc2ggc8O1cHJhZGUgdsO1aSB0w7bDtmthYXNsYXN0ZSBvbWkuIFNlZSB2w7VpYiBsdWJhZGEgcmFrZW5kdXNlbCBqYWdhZGEgdsO1aSBzYWx2ZXN0YWRhIHRlaWUga2FsZW5kcmlhbmRtZWlkLCBob29saW1hdGEga29uZmlkZW50c2lhYWxzdXNlc3QgdsO1aSB0dW5kbGlra3VzZXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc0MzQ1NDg2ODI0NzA4NTE1ODMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIGvDtWlraSB0ZWxlZm9uaSBzYWx2ZXN0YXR1ZCBrYWxlbmRyaXPDvG5kbXVzaSwgc2ggc8O1cHJhZGUgdsO1aSB0w7bDtmthYXNsYXN0ZSBvbWkuIFNlZSB2w7VpYiBsdWJhZGEgcmFrZW5kdXNlbCBqYWdhZGEgdsO1aSBzYWx2ZXN0YWRhIHRlaWUga2FsZW5kcmlhbmRtZWlkLCBob29saW1hdGEga29uZmlkZW50c2lhYWxzdXNlc3QgdsO1aSB0dW5kbGlra3VzZXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDYWxlbmRhciIgbXNnaWQ9Ijg0Mzg4NzQ3NTUxOTM4MjU2NDciPiJrYWxlbmRyaXPDvG5kbXVzdGUgbGlzYW1pbmUgdsO1aSBtdXV0bWluZSBqYSBrw7xsYWxpc3RlbGUgb21hbmlrZSB0ZWFkbWF0YSBtZWlsaSBzYWF0bWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NzkwMzU1MjAxMTM2Njg1MjgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbGlzYWRhLCBlZW1hbGRhZGEgamEgbXV1dGEgc8O8bmRtdXNpLCBtaWRhIHNhYXRlIG11dXRhIG9tYSB0YWh2ZWxhcnZ1dGlzLCBzaCBzw7VwcmFkZSBqYSB0w7bDtmthYXNsYXN0ZSBvbWkuIFNlZSB2w7VpYiB2w7VpbWFsZGFkYSByYWtlbmR1c2VsIHNhYXRhIHPDtW51bWVpZCwgbWlzIG7DpGl2YWQgdHVsZXZhdCBrYWxlbmRyaSBvbWFuaWtlbHQsIHbDtWkgbXV1dGEgc8O8bmRtdXNpIG9tYW5pa3UgdGVhZG1hdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIzMjQ0Njk0OTYzMjcyNDkzNzYiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbGlzYWRhLCBlZW1hbGRhZGEgamEgbXV1dGEgc8O8bmRtdXNpLCBtaWRhIHNhYXRlIG11dXRhIG9tYSB0ZWxlZm9uaXMsIHNoIHPDtXByYWRlIGphIHTDtsO2a2Fhc2xhc3RlIG9taS4gU2VlIHbDtWliIHbDtWltYWxkYWRhIHJha2VuZHVzZWwgc2FhdGEgc8O1bnVtZWlkLCBtaXMgbsOkaXZhZCB0dWxldmF0IGthbGVuZHJpIG9tYW5pa2VsdCwgdsO1aSBtdXV0YSBzw7xuZG11c2kgb21hbmlrdSB0ZWFkbWF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9Ijg2ODgzMzQ5NzQwMzY4MjMzMzAiPiJ2w7VsdHNhc3Vrb2hhZCB0ZXN0aW1pc2VrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiJMb29nZSB2w7VsdHNhc3Vrb2hhIGFsbGlrYWlkLCBldCBrYXRzZXRhZGEgdsO1aSBpbnN0YWxsaWRhIHV1dCBhc3Vrb2hhcGFra3VqYXQuIFNlZSBsdWJhYiByYWtlbmR1c2VsIHTDvGhpc3RhZGEgdGVpc3RlIGFzdWtvaGFhbGxpa2F0ZSwgbsOkaXRla3MgR1BTLWkgdsO1aSBhc3Vrb2hhcGFra3VqYXRlIHRhZ2FzdGF0dWQgYXN1a29oYSBqYS92w7VpIG9sZWt1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iMjgzNjMwODA3NjcyMDU1MzgzNyI+Imp1dXJkZXDDpMOkcyBhc3Vrb2hhcGFra3VqYSBsaXNha8Okc2t1ZGVsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgcMOkw6RzZWRhIGp1dXJkZSBhc3Vrb2hhcGFra3VqYSBlcmlrw6Rza3VkZWxlLiBTZWUgdsO1aWIgbHViYWRhIHJha2VuZHVzZWwgc2VnYWRhIEdQUy1pIHbDtWkgbXV1ZGUgYXN1a29oYWFsbGlrYXRlIHTDtsO2ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+Imx1YmEgYXN1a29oYXBha2t1amEgaW5zdGFsbGltaXNla3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjkwNjYxNDYxMjA0NzA1OTE1MDkiPiJMb29nZSB2w7VsdHNhc3Vrb2hhIGFsbGlrYWlkLCBldCBrYXRzZXRhZGEgdsO1aSBpbnN0YWxsaWRhIHV1dCBhc3Vrb2hhcGFra3VqYXQuIFNlZSBsdWJhYiByYWtlbmR1c2VsIHTDvGhpc3RhZGEgdGVpc3RlIGFzdWtvaGFhbGxpa2F0ZSwgbsOkaXRla3MgR1BTLWkgdsO1aSBhc3Vrb2hhcGFra3VqYXRlIHRhZ2FzdGF0dWQgYXN1a29oYSBqYS92w7VpIG9sZWt1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iMTE5MTg5ODA2MTk2NTI3MzM3MiI+InTDpHBuZSBhc3Vrb2h0IChHUFMtIGphIHbDtXJndXDDtWhpbmUpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+Ikx1YmFiIHJha2VuZHVzZWwgaGFua2lkYSB0ZWllIHTDpHBzZSBhc3Vrb2hhIGdsb2JhYWxzZSBwb3NpdHNpb25lZXJpbWlzc8O8c3RlZW1pIChHUFMpIHbDtWkgdsO1cmd1IGFzdWtvaGFhbGxpa2F0ZSAobnQgbW9iaWlsaW1hc3RpZGUgamEgV2lGaSkgasOkcmdpLiBOZWVkIGFzdWtvaGF0ZWVudXNlZCBwZWF2YWQgb2xlbWEgc2lzc2UgbMO8bGl0YXR1ZCBqYSB0ZWllIHNlYWRtZSBqYW9rcyBzYWFkYXZhbCwgZXQgcmFrZW5kdXMgc2Fha3MgbmVpZCBrYXN1dGFkYS4gUmFrZW5kdXNlZCB2w7VpdmFkIGthc3V0YWRhIHNlZGEgdGVpZSBhc3Vrb2hhIHR1dmFzdGFtaXNla3MgamEgdGFyYmlkYSBha3V0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSI0ODg3ODk1MzYyMzU0MjM5NjI4Ij4ibGlnaWthdWRuZSBhc3Vrb2h0ICh2w7VyZ3Vww7VoaW5lKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+Ikx1YmFiIHJha2VuZHVzZWwgaGFua2lkYSBqdXVyZGVww6TDpHN1IGxpZ2lrYXVkc2VsZSBhc3Vrb2hhbGUuIEFzdWtvaHQgdHVsZXRhdGFrc2UgYXN1a29oYXRlZW51c3RlIGrDpHJnaSwga2FzdXRhZGVzIHbDtXJndSBhc3Vrb2hhYWxsaWthaWQsIG50IG1vYmlpbGltYXN0aWQgamEgV2lGaS4gTmVlZCBhc3Vrb2hhdGVlbnVzZWQgcGVhdmFkIG9sZW1hIHNpc3NlIGzDvGxpdGF0dWQgamEgdGVpZSBzZWFkbWUgamFva3Mgc2FhZGF2YWwsIGV0IHJha2VuZHVzIHNhYWtzIG5laWQga2FzdXRhZGEuIFJha2VuZHVzZWQgdsO1aXZhZCBrYXN1dGFkYSBzZWRhIHRlaWUgbGlnaWthdWRzZSBhc3Vrb2hhIHR1dmFzdGFtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjIzNjM5Njk2NDE3OTIzODg5NDciPiJqdXVyZGVww6TDpHMgU3VyZmFjZUZsaW5nZXJpbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga2FzdXRhZGEgU3VyZmFjZUZsaW5nZXJpIG1hZGFsYXRhc2VtZWxpc2kgZnVua3RzaW9vbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ibG9lIGthYWRyaXB1aHZyaXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGthYWRyaXB1aHZyaSBzaXN1IGx1Z2VkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJqdXVyZGVww6TDpHMgSW5wdXRGbGluZ2VyaWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+Ikx1YmFiIHJha2VuZHVzZWwga2FzdXRhZGEgSW5wdXRGbGluZ2VyaSBtYWRhbGF0YXNlbWVsaXNpIGZ1bmt0c2lvb25lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iV2lGaS1la3JhYW5pZGUgc2VhZGlzdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iTHViYWIgcmFrZW5kdXNlbCBzZWFkaXN0YWRhIFdpRmktZWtyYWFuZSBqYSBuZW5kZWdhIMO8aGVuZHVzIGx1dWEuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfY2FwdHVyZUF1ZGlvT3V0cHV0ICg2ODU3MTM0NDk4NDAyMzQ2NzA4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCAoNjIxMDU5Nzc1NDIxMjIwODg1MykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2NhcHR1cmVWaWRlb091dHB1dCAoMjI0NjgyODc3MzU4OTA5NDAyMykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19jYXB0dXJlVmlkZW9PdXRwdXQgKDM1OTQ4MTY1ODAzNDE0OTg2MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCAoNzgxNTM5ODk2OTMwMzM4MjAxNikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQgKDI3Nzk3OTMwNjQ3MDkzNTAyODkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4ibXV1ZGEgaGVsaXNlYWRlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSDDvGxkaXNlaWQgaGVsaXNlYWRlaWQsIG7DpGl0ZWtzIGhlbGl0dWdldnVzdCBqYSBzZWRhLCBtaWxsaXN0IGvDtWxhcml0IGthc3V0YXRha3NlIHbDpGxqdW5kaWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4ic2FsdmVzdGEgaGVsaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBzYWx2ZXN0YWRhIG1pa3JvZm9uaWdhIGhlbGkuIFNlZSBsdWJhIHbDtWltYWxkYWIgcmFrZW5kdXNlbCBzYWx2ZXN0YWRhIGhlbGkgaWdhbCBhamFsIGlsbWEgdGVpZSBraW5uaXR1c2V0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJwaWx0aWRlIGphIHZpZGVvdGUgdGVnZW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlaGEga2FhbWVyYWdhIHBpbHRlIGphIHZpZGVvaWQuIFNlZSBsdWJhIHbDtWltYWxkYWIgcmFrZW5kdXNlbCBrYXN1dGFkYSBrYWFtZXJhdCBtaXMgdGFoZXMgYWphbCB0ZWllIGtpbm5pdHVzZXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImtlZWxhIGthYW1lcmEga2FzdXRhbWlzZWwgbsOkaWRpa3V0dWxlIGthc3V0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4iTHViYWIgZWVsaW5zdGFsbGl0dWQgc8O8c3RlZW1pcmFrZW5kdXNlbCBrZWVsYXRhIGthYW1lcmEgbsOkaWRpa3V0dWxlIGthc3V0YW1pc2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjk2MTI5MjIwNTc2NDQ4ODMwNCI+ImJsb2tlZXJpIHRhaHZlbGFydnV0aSBqw6TDpGRhdmFsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4iYmxva2VlcmkgdGVsZWZvbiBqw6TDpGRhdmFsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtvZ3UgdGFodmVsYXJ2dXRpIGrDpMOkZGF2YWx0IGtlZWxhdGEuIFNlZSBvbiB2w6RnYSBvaHRsaWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzg4OTAzMjk3NjI3MjgzMDk5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtvZ3UgdGVsZWZvbmkgasOkw6RkYXZhbHQga2VlbGF0YS4gU2VlIG9uIHbDpGdhIG9odGxpay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQzNjYzNDk3MjU2MTc5NTAwMiI+InN1bm5pIHRhaHZlbGFydnV0aSB0YWFza8OkaXZpdHVtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg5ODU2MDg3MjQ2MjYzODI0MiI+InN1bm5pIHRlbGVmb25pIHRhYXNrw6Rpdml0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgxNzIwNTYxODAwNjM3MDA3NDEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc3VuZGlkYSB0YWh2ZWxhcnZ1dGl0IHRhYXNrw6Rpdml0dW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc3VuZGlkYSB0ZWxlZm9uaSB0YWFza8OkaXZpdHVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+Imp1dXJkZXAuIFVTQi1ydXVtaSBmYWlsaXPDvHN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiJqdXVyZGVww6TDpHMgU0Qta2FhcmRpIGZhaWxpc8O8c3RlZW1pbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iMTgyOTI5MDcwMTY1ODk5MjM0NyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBmYWlsaXPDvHN0ZWVtZSBpcmRtw6RsbHUgcGFpZ2FsZGFkYSBqYSBzZWFsdCBsYWh1dGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4idMO8aGplbmRhZ2UgVVNCLXNhbHZlc3R1c3J1dW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+InTDvGhqZW5kYWdlIFNELWthYXJ0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iODc4NDI2ODI0Njc3OTE5ODYyNyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2b3JtaW5kYWRhIGlyZG3DpGx1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzNDExMzM4NjMyMDAyMTkzODQ2Ij4iaGFuZ2kgdGVhdmV0IHNpc2Vtw6RsdSBrb2h0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBoYW5raWRhIHNpc2Vtw6RsdSB0ZWF2ZXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2NyZWF0ZSIgbXNnaWQ9IjY0MTQ3NTcyMzQ3ODkzMzYzMjciPiJzaXNlbcOkbHUgbG9vbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfY3JlYXRlIiBtc2dpZD0iNDU1ODg2OTI3MzU4NTg1Njg3NiI+Ikx1YmFiIHJha2VuZHVzZWwgbHV1YSBzaXNlbcOkbHUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI1MjY5MjgzMjgzMDE2MTgwMjIiPiJow6R2aXRhIHNpc2Vtw6RsdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjcyMTg3NDkyODYxNDU1MjY1MzciPiJMdWJhYiByYWtlbmR1c2VsIHNpc2Vtw6RsdSBow6R2aXRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSI4ODc3OTk4MTAxOTQ0OTk5Mzg2Ij4iU2lzZW3DpGx1IHBhaWdhbGRhbWluZS9lZW1hbGRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9IjM0NTEzNjAxMTQ5MDI0OTA5MjkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2lzZW3DpGx1c2VhZG1lIHBhaWdhbGRhZGEvZXJhbGRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX3JlbmFtZSIgbXNnaWQ9Ijc0OTY2MzM5NTQwODA0NzI0MTciPiJzaXNlbcOkbHUgw7xtYmVybmltZXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBzaXNlbcOkbHUgw7xtYmVyIG5pbWV0YWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJqdWh0aWdlIHZpYnJlZXJpbWlzdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGp1aHRpZGEgdmlicmVlcmltaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJqdWhpIHRhc2t1bGFtcGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqdWh0aWRhIHRhc2t1bGFtcGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4iVVNCLXNlYWRtZXRlIGVlbGlzdHVzdGUgamEgbHViYWRlIGhhbGRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGFsbGF0YSBVU0Itc2VhZG1ldGUgZWVsaXN0dXNpIGphIGx1YmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4iTVRQLXByb3Rva29sbGkgcmFrZW5kYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4iTHViYWIganV1cmRlcMOkw6RzdSB0dXVtYSBNVFAtZHJhaXZlcmlsZSBNVFAgVVNCLXByb3Rva29sbGkgcmFrZW5kYW1pc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI0MTQ4MjkwODYwNDAwNjU5MTQ2Ij4idGVzdGkgcmlpc3R2YXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjY1OTc5NjQxOTEyMDgwMTY2MDUiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwganVodGlkYSBlcmluZXZhaWQgdsOkbGlzc2VhZG1laWQgcmlpc3R2YXJhIHRlc3RpbWlzZSBlZXNtw6RyZ2lsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImhlbGlzdGEgb3RzZSB0ZWxlZm9uaW51bWJyaXRlbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlaWUgc2Vra3VtaXNldGEgdGVsZWZvbmludW1icml0ZWxlIGhlbGlzdGFkYS4gU2VlIHbDtWliIHDDtWhqdXN0YWRhIG9vdGFtYXR1aWQgdGFzdXNpZCB2w7VpIHRlbGVmb25pa8O1bmVzaWQuIFBhbmdlIHTDpGhlbGUsIGV0IHNlZSBlaSBsdWJhIHJha2VuZHVzZWwgaGVsaXN0YWRhIGjDpGRhYWJpbnVtYnJpdGVsZS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpbGUga3VsdXNpZCB0ZWtpdGFkYSwgdGVoZXMgdGVsZWZvbmlrw7VuZXNpZCB0ZWllIGtpbm5pdHVzZXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSI0MTk4MzQ5MjExMTA4NDk3ODc5Ij4iaGVsaXN0YSBvdHNlIG1pcyB0YWhlcyB0ZWxlZm9uaW51bWJyaXRlbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGVsaXN0YWRhIG1pcyB0YWhlcyB0ZWxlZm9uaW51bWJyaWxlLCBzaCBow6RkYWFiaW51bWJyaXRlbGUgaWxtYSB0ZWllIHNla2t1bWlzZXRhLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCB0ZWhhIGjDpGRhYWJpdGVlbnVzdGVsZSBtaXR0ZXZhamFsaWtrZSBqYSBlYmFzZWFkdXNsaWtrZSBrw7VuZXNpZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4ia8OkaXZpdGEgb3RzZSBDRE1BLXRhaHZlbGFydnV0aSBzZWFkaXN0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTYwNDg0ODA5NTMxNTQyMTQyNSI+IkNETUEtdGVsZWZvbmlzZWFkaXN0dXNlIG90c2Uga8OkaXZpdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIG1zZ2lkPSIxOTk0MTkzNTM4ODAyMzE0MTg2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGvDpGl2aXRhZGEgQ0RNQSBldHRldmFsbWlzdGFtaXNlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBDRE1BIGV0dGV2YWxtaXN0YW1pc2UgYXNqYXR1bHQga8OkaXZpdGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9Ijc3ODU0MDgyNTMzNjQzMzU3NDAiPiJrb250cm9sbGkgYXN1a29oYSB2w6Ryc2tlbmRhbWlzZSB0ZWF0aXNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iMTEyMDc0MTU1Nzg5MTQzODg3NiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWJhZGEva2VlbGF0YSBhc3Vrb2hhIHbDpHJza2VuZGFtaXNlIHRlYXRpc2VkIHJhYWRpb3N0LiBNaXR0ZSBrYXN1dGFkYSB0YXZhcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+Imp1dXJkZXDDpMOkcyByZWdpc3RyZWVyaW1pc2F0cmlidXV0aWRlbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiJBbm5hYiByYWtlbmR1c2VsZSBsdWdlbWlzLS9raXJqdXR1c8O1aWd1c2UgcmVnaXN0cmVlcmltaXN0ZWVudXNlZ2Egw7xsZXMgbGFhZGl0dWQgYXRyaWJ1dXRpZGVsZS4gTWl0dGUga2FzdXRhZGEgdGF2YXJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kR2FkZ2V0IiBtc2dpZD0iNzc2OTA1MzM5MDE1ODYzNDcxIj4idmFsaSB2aWRpbmFpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIMO2ZWxkYSBzw7xzdGVlbWlsZSwgbWlsbGluZSByYWtlbmR1cyBzYWFiIGthc3V0YWRhIG1pbGxpc2VpZCB2aWRpbmFpZC4gU2VsbGUgw7VpZ3VzZWdhIHJha2VuZHVzIHbDtWliIGFuZGEgdGVpc3RlbGUgcmFrZW5kdXN0ZWxlIGp1dXJkZXDDpMOkc3UgaXNpa2xpa2VsZSBhbmRtZXRlbGUuIE1pdHRlIGthc3V0YWRhIHRhdmFyYWtlbmR1c3RlIHB1aHVsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9Ijg0MjM5MjM3Nzc2NTkyOTIyMjgiPiJtdXVkYSB0ZWxlZm9uaSBvbGVrdXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqdWh0aWRhIHNlYWRtZSB0ZWxlZm9uaWZ1bmt0c2lvb25lLiBTZWxsZSBsb2FnYSByYWtlbmR1cyBzYWFiIHZhaGV0YWRhIHbDtXJrZSwgbMO8bGl0YWRhIHRlbGVmb25pcmFhZGlvdCBzaXNzZSBqYSB2w6RsamEgbmluZyB0ZWhhIG11dWRraSBpbG1hIHRlaWQgdGVhdml0YW1hdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjkxNzgyMjg1MjQ1MDc2MTA0ODYiPiJsdWdlZ2UgdGVsZWZvbmkgb2xla3V0IGphIGlkZW50aXRlZXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSIxNjM5MjEyNzcxODI2MTI1NTI4Ij4iQW5uYWIgcmFrZW5kdXNlbGUganV1cmRlcMOkw6RzdSBzZWFkbWUgdGVsZWZvbmlmdW5rdHNpb29uaWRlbGUuIFNlZSBsdWJhIHbDtWltYWxkYWIgcmFrZW5kdXNlbCBtw6TDpHJhdGEgdGVsZWZvbmludW1icmkgamEgc2VhZG1lIElELWQgbmluZyBrb250cm9sbGlkYSwga2FzIGvDtW5lIG9uIGFrdGlpdm5lIGphIGthdWdudW1iZXIgb24ga8O1bmUga2F1ZHUgdGVsZWZvbmlnYSDDvGhlbmRhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiJ0YWh2ZWxhcnZ1dGkgdWludW1pc2UgdsOkbHRpbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiJ2w6RsZGkgdGVsZWZvbmkgdWludW1pc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2w6RsdGlkYSB0YWh2ZWxhcnZ1dGkgdWludW1pc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NTU5MTAwNjc3MzcyOTI4NzU0Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHbDpGx0aWRhIHRlbGVmb25pIHVpbnVtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3ODcwMzQ3MjI2MTYzNTA0MTciPiJsw7xsaXRhIHRhaHZlbGFydnV0aSBzaXNzZSB2w7VpIHbDpGxqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTI4NjIyNDcwOTgwOTQzMjA2Ij4ibMO8bGl0YSB0ZWxlZm9uIHNpc3NlIHbDtWkgdsOkbGphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGFodmVsYXJ2dXRpdCBzaXNzZSB2w7VpIHbDpGxqYSBsw7xsaXRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2MDM3MDU3MzQ4NDYzMTMxMDMyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlbGVmb25pIHNpc3NlIHbDtWkgdsOkbGphIGzDvGxpdGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZhY3RvcnlUZXN0IiBtc2dpZD0iMzcxNTIyNTQ5MjY5NjQxNjE4NyI+ImvDpGl2aXRhIHRlaGFzZSB0ZXN0cmXFvmlpbWlzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NTIwNTkzMTgzNTk2NTMwOTEiPiJLw6RpdGFnZSBtYWRhbGF0YXNlbWVsaXNlIHRvb3RqYXRlc3RpbmEsIG1pcyBhbm5hYiB0w6RpZWxpa3UganV1cmRlcMOkw6RzdSB0YWh2ZWxhcnZ1dGkgcmlpc3R2YXJhbGUuIFNhYWRhdmFsIGFpbnVsdCBzaWlzLCBrdWkgdGFodmVsYXJ2dXRpIHTDtsO2dGFiIHRvb3RqYXRlc3RpIHJlxb5paW1pcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiJLw6Rpdml0YWdlIG1hZGFsYXRhc2VtZWxpc2UgdG9vdGphdGVzdGluYSwgbWlzIHbDtWltYWxkYWIgdMOkaWVsaWtrdSBqdXVyZGVww6TDpHN1IHRlbGVmb25pIHJpaXN0dmFyYWxlLiBLYXN1dGF0YXYgYWludWx0IGp1aHVsLCBrdWkgdGVsZWZvbiB0w7bDtnRhYiB0b290amEgdGVzdHJlxb5paW1pcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlciIgbXNnaWQ9IjY2MjcxOTIzMzMzNzM0NjUxNDMiPiJtw6TDpHJhIHRhdXN0YXBpbHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG3DpMOkcmF0YSBzw7xzdGVlbWkgdGF1c3RhcGlsZGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjMyNzg2MDgxNjU5Nzc3MzY1MzgiPiJrb3JyaWdlZXJpZ2Ugb21hIHRhdXN0YXBpbGRpIHN1dXJ1c3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjgyMzU3ODQzODQyMjM3MzAwOTEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbcOkw6RyYXRhIHPDvHN0ZWVtaSB0YXVzdGFwaWxkaSBzdXVydXNlIHZpaGplaWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXN0ZXJDbGVhciIgbXNnaWQ9IjIzMTU3NTA0MjMxMzk2OTczOTciPiJsw6RodGVzdGEgc8O8c3RlZW0gdGVoYXNlIHZhaWtlc2VhZGV0ZWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIzNjY1MzgwNDkyNjMzOTEwMjI2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHPDvHN0ZWVtaSB0ZWhhc2VzZWFkZWQgdMOkaWVsaWt1bHQgbMOkaHRlc3RhZGEsIGt1c3R1dGFkZXMga8O1aWsgYW5kbWVkLCBrb25maWd1cmF0c2lvb25pIGphIGluc3RhbGxpdHVkIHJha2VuZHVzZWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lIiBtc2dpZD0iMjAyMTYxNDgyOTU5MTc3NTY0NiI+ImtlbGxhYWphIG3DpMOkcmFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTg5NjM0MTQzODE1MTE1Mjg4MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB0YWh2ZWxhcnZ1dGkga2VsbGFhZWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODU1NzAyNzMwNzM4MDIwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRlbGVmb25pIGtlbGxhYWVnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWVab25lIiBtc2dpZD0iMjk0NTA3OTgwMTAxMzA3NzM0MCI+Im3DpMOkcmEgYWphdsO2w7ZuZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRhaHZlbGFydnV0aSBhamF2w7bDtm5kaXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDk5OTQzNDg4NDM2NjMzMzk4Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRlbGVmb25pIGFqYXbDtsO2bmRpdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjQ4MjkyNjIzNDk2OTEzODY5ODYiPiJBY2NvdW50TWFuYWdlclNlcnZpY2VcJ2luYSB0ZWd1dHNlbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGVsaXN0YWRhIGtvbnRvIGF1dGVudGlqYXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBY2NvdW50cyIgbXNnaWQ9IjEwODY3OTU0Njc3NjAxMjIxMTQiPiJsZWlka2Ugc2VhZG1lc3Qga29udG9kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGFua2lkYSB0YWh2ZWxhcnZ1dGlsZSB0ZWFkYW9sZXZhaWQga29udG9sb2VuZGVpZC4gU2VlIHbDtWliIGjDtWxtYXRhIG1pcyB0YWhlcyBrb250b3NpZCwgbWlsbGUgb24gbG9vbnVkIHRlaWUgaW5zdGFsbGl0dWQgcmFrZW5kdXNlZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGFua2lkYSB0ZWxlZm9uaWxlIHRlYWRhb2xldmFpZCBrb250b2xvZW5kZWlkLiBTZWUgdsO1aWIgaMO1bG1hdGEgbWlzIHRhaGVzIGtvbnRvc2lkLCBtaWxsZSBvbiBsb29udWQgdGVpZSBpbnN0YWxsaXR1ZCByYWtlbmR1c2VkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4ibG9vZ2Uga29udG9kIGphIG3DpMOkcmFrZSBwYXJvb2xpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTQ3MjEyNDI5NjkwODk3NzI2MCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBrYXN1dGFkYSBrb250b2hhbGR1cmkga29udG8gYXV0ZW50aWphIHbDtWltYWx1c2ksIHNoIGx1dWEga29udG9zaWQgbmluZyBoYW5raWRhIGphIG3DpMOkcmF0YSBwYXJvb2xlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4ibGlzYWdlIHbDtWkgZWVtYWxkYWdlIGtvbnRvc2lkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI4Njk4Mjk1NjI1NDg4MjkyNTA2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlaGEgdG9pbWluZ3VpZCwgbmFndSBrb250b2RlIGxpc2FtaW5lIGphIGVlbWFsZGFtaW5lIG5pbmcgbmVuZGUgcGFyb29saWRlIGt1c3R1dGFtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSIyMzU0ODEzOTYxNjM4Nzc2NDIiPiJrYXN1dGFnZSBzZWFkbWVzIG9sZXZhaWQga29udG9zaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2VDcmVkZW50aWFscyIgbXNnaWQ9Ijc5ODQyMjcxNDc0MDMzNDY0MjIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGFvdGxlZGEgYXV0ZW50aW1pc2UgbHViYXNpZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiJ2YWFkYWtlIHbDtXJndcO8aGVuZHVzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiJMdWJhYiByYWtlbmR1c2VsIHZhYWRhdGEgdGVhdmV0IHbDtXJndcO8aGVuZHVzdGUga29odGEsIG7DpGl0ZWtzIHNlZGEsIG1pbGxpc2VkIHbDtXJndWQgb24gb2xlbWFzIGphIMO8aGVuZGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiJ0w6RpZWxpayBqdXVyZGVww6TDpHMgdsO1cmd1bGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjM0MDMwNjIxODc3Nzk3MjQxODUiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSB2w7VyZ3VwZXNhc2lkIGphIGthc3V0YWRhIGtvaGFuZGF0dWQgdsO1cmd1cHJvdG9rb2xsZS4gQnJhdXNlciBqYSB0ZWlzZWQgcmFrZW5kdXNlZCBhbm5hdmFkIHZhaGVuZGlkIGFuZG1ldGUgc2FhdG1pc2VrcyBJbnRlcm5ldHRpLCBuaWkgZXQgc2VkYSBsdWJhIGVpIG9sZSB2YWphIGFuZG1ldGUgc2FhdG1pc2VrcyBJbnRlcm5ldHRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUwNTY2MDE1OTY3NTc1MTg5NiI+InbDtXJndXNlYWRldGUgamEgLWxpaWtsdXNlIG11dXRtaW5lL2jDtWl2YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB2w7VyZ3VzZWFkZWlkIG5pbmcgcGVhdGFkYSBqYSBrb250cm9sbGlkYSBrb2d1IHbDtXJndWxpaWtsdXN0LCBuw6RpdGVrcyBtdXV0YSBtaXMgdGFoZXMgQVBOLWkgcHVodmVyc2VydmVyaXQgamEgcG9ydGkuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHbDtXJndXBha2V0dGUgasOkbGdpZGEsIMO8bWJlciBzdXVuYXRhIHbDtWkgbXV1dGEgdGVpZSB0ZWFkbWF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9Ijk1ODg4NDI5MTQ1NDMyNzMwOSI+Im11dWRhIHbDtXJndcO8aGVuZHV2dXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB2w7VyZ3XDvGhlbmR1dnVzZSBvbGVrdXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjU5NTI1ODQ5NjQzNzMwMTc5NjAiPiJKYWdhdHVkIMO8aGVuZHV2dXNlIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSIxNTI0NDQxMzQ0NDEyMzE5NzgwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIGphZ2F0dWQgdsO1cmd1IMO8aGVuZHV2dXNlIG9sZWt1dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiJtdXVkYSB0YXVzdGFhbmRtZXRlIGthc3V0dXNzZWFkZWlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iNTM0NzcyOTU3ODQ2ODc0NDM3OSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB0YXVzdGFhbmRtZXRlIGthc3V0dXNlIHNlYWRlaWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MjAyMDEyOTQ5MjQ3MDQwMDExIj4idmFhZGFrZSBXaUZpLcO8aGVuZHVzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdmFhZGF0YSB0ZWF2ZXQgV2lGaS12w7VyZ3Uga29odGEsIG7DpGl0ZWtzIMO8aGVuZGF0dWQgV2lGaS1zZWFkbWV0ZSBuaW1lc2lkIGphIHNlZGEsIGthcyBXaUZpIG9uIGx1YmF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4iw7xoZW5kYWdlIGphIGthdGtlc3RhZ2Ugw7xoZW5kdXMgV2lGaS1nYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSBqYSBrYXRrZXN0YWRhIMO8aGVuZHVzZSBXaUZpLXDDpMOkc3VwdW5rdGlkZWdhIG5pbmcgdGVoYSBtdXVkYXR1c2kgc2VhZG1lIGtvbmZpZ3VyYXRzaW9vbmlzIFdpRmktdsO1cmt1ZGVzc2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4ibHViYSBXaUZpIG11bHRpZWRhc3R1c3Zhc3R1dsO1dHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdmFzdHUgdsO1dHRhIHBha2V0dGUsIG1pcyBvbiBzYWFkZXR1ZCBrw7Vpa2lkZWxlIFdpRmktdsO1cmd1Z2Egw7xoZW5kYXR1ZCBzZWFkbWV0ZWxlLCBtaXMga2FzdXRhdmFkIG11bHRpZWRhc3R1c2UgYWFkcmVzc2UsIG1pdHRlIGFpbnVsdCB0ZWllIHRhaHZlbGFydnV0aXQuIFNlZSB2w7V0YWIgcm9oa2VtIGVuZXJnaWF0IGt1aSBtaXR0ZW11bHRpZWRhc3R1c2UgcmXFvmlpbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUxOTQ5NzA2MDI1MzQ5OTI2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHZhc3R1IHbDtXR0YSBwYWtldHRlLCBtaXMgb24gc2FhZGV0dWQga8O1aWtpZGVsZSBXaUZpLXbDtXJndWdhIMO8aGVuZGF0dWQgc2VhZG1ldGVsZSwgbWlzIGthc3V0YXZhZCBtdWx0aWVkYXN0dXNlIGFhZHJlc3NlLCBtaXR0ZSBhaW51bHQgdGVpZSB0ZWxlZm9uaS4gU2VlIHbDtXRhYiByb2hrZW0gZW5lcmdpYXQga3VpIG1pdHRlbXVsdGllZGFzdHVzZSByZcW+aWltLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4ianV1cmRlcMOkw6RzIEJsdWV0b290aGkg4oCL4oCLc2VhZGV0ZWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2VhZGlzdGFkYSBrb2hhbGlra3UgQmx1ZXRvb3RoLXRhaHZlbGFydnV0aXQgbmluZyBsZWlkYSBqYSBzaWR1ZGEgc2VkYSBrYXVnc2VhZG1ldGVnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MzE2ODIxNTkzMzE1NDIxMzciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2VhZGlzdGFkYSBrb2hhbGlra3UgQmx1ZXRvb3RoLXRlbGVmb25pIG5pbmcgbGVpZGEgamEgc2lkdWRhIHNlZGEga2F1Z3NlYWRtZXRlZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+IldpTUFYLWlnYSDDvGhlbmR1c2UgbG9vbWluZSBqYSDDvGhlbmR1c2Uga2F0a2VzdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbcOkw6RyYXRhLCBrYXMgV2lNQVggb24gbHViYXR1ZCwgamEgdmFhZGF0YSB0ZWF2ZXQga8O1aWtpZGUgw7xoZW5kYXR1ZCBXaU1BWC12w7Vya3VkZSBrb2h0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpbWF4U3RhdGUiIG1zZ2lkPSIyNDA1MDQyMjY3MTMxNDk2NTc5Ij4iV2lNQVgtaSBvbGVrdSBtdXV0bWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSBqYSBrYXRrZXN0YWRhIHRhaHZlbGFydnV0aSDDvGhlbmR1c2UgV2lNQVgtaSB2w7Vya3VkZWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSBqYSBrYXRrZXN0YWRhIHRlbGVmb25pIMO8aGVuZHVzZSBXaU1BWC1pIHbDtXJrdWRlZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGgiIG1zZ2lkPSI2MTI3NzY5MzM2MzM5Mjc2ODI4Ij4ic2lkdWdlIEJsdWV0b290aGkgc2VhZG1ldGVnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2YWFkYXRhIHRhaHZlbGFydnV0aSBCbHVldG9vdGgta29uZmlndXJhdHNpb29uaSBuaW5nIGx1dWEgamEgaGVha3Mga2lpdGEgw7xoZW5kdXNpIHNlb3R1ZCBzZWFkbWV0ZWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdmFhZGF0YSB0ZWxlZm9uaSBCbHVldG9vdGgta29uZmlndXJhdHNpb29uaSBuaW5nIGx1dWEgamEgaGVha3Mga2lpdGEgw7xoZW5kdXNpIHNlb3R1ZCBzZWFkbWV0ZWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbmZjIiBtc2dpZD0iNDQyMzM1MTI3NDc1Nzg3Njk1MyI+ImzDpGhpdsOkbGphc2lkZSBqdWh0aW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19uZmMiIG1zZ2lkPSI3MTIwNjExODE5NDAxNzg5OTA3Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHN1aGVsZGEgbMOkaGl2w6RsamFzaWRlIChORkMpIG3DpHJnZW5kaXRlLCBrYWFydGlkZSBqYSBsdWdlcml0ZWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+ImtlZWxha2UgZWtyYWFuaWx1a2siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSI2MDM0MjAzMDY1MDc3MTIyOTkyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtlZWxhdGEga2xhaHZpbHVrdSBqYSBtdXUgc2VvdHVkIHBhcm9vbGkgdHVydmFsaXN1c2UuIE7DpGl0ZWtzIGtlZWxhYiB0ZWxlZm9uIGtsYWh2aWx1a3Ugc2lzc2V0dWxldmEga8O1bmUgdmFzdHV2w7V0bWlzZWwgamEgbHViYWIga2xhaHZpbHVrdSB1dWVzdGksIGt1aSBrw7VuZSBvbiBsw7VwZXRhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjYyMDE4MTAwMDgyMzA1MDMwNTIiPiJsb2Ugc8O8bmtyb29uaW1pc3NlYWRlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iMjcwNjc0NTY3NDU2OTY3ODY0NCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWdlZGEga29udG8gc8O8bmtyb29uaW1pc3NlYWRlaWQuIE7DpGl0ZWtzIHbDtWliIHNlZSBtw6TDpHJhdGEsIGthcyByYWtlbmR1cyBJbmltZXNlZCBvbiBrb250b2dhIHPDvG5rcm9vbml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiJsw7xsaXRhZ2Ugc8O8bmtyb29uaW1pbmUgc2lzc2UgamEgdsOkbGphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI4OTU2MjYyNTkxMzA2MzY5ODY4Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIGtvbnRvIHPDvG5rcm9vbmltaXNzZWFkZWlkLiBOw6RpdGVrcyBzYWFiIHNlZGEga2FzdXRhZGEsIGV0IGx1YmFkYSByYWtlbmR1c2UgSW5pbWVzZWQgc8O8bmtyb29uaW1pbmUga29udG9nYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSI3Mzk2NTc3NDUxMzYwMjAyNDQ4Ij4ibG9lIHPDvG5rcm9vbmltaXNzdGF0aXN0aWthdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSIxNTEwMTQzNzYxNzU3NjA2MTU2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBrb250byBzw7xua3Jvb25pbWlzc3RhdGlzdGlrYXQsIHNoIHPDvG5rcm9vbmltaXNzw7xuZG11c3RlIGFqYWx1Z3UgamEgc8O8bmtyb29uaXR1ZCBhbmRtZXRlIGh1bGthLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjQ3NTY2MDk2MzcwNTMzNTMzMTgiPiJsb2UgdGVsbGl0dWQga2FuYWxlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNTU1NzA1ODkwNzkwNjE0NDUwNSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBzYWFkYSDDvGtzaWthc2p1IHByYWVndSBzw7xua3Jvb25pdGF2YXRlIHZvb2d1ZGUga29odGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjkwMTUyNDYzMjU0MDgyMDkyOTYiPiJraXJqdXRhIHRlbGxpdHVkIGthbmFsZWlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI2OTI4OTMwMTg4ODI2MDg5NDEzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRlaWUgcHJhZWd1IHPDvG5rcm9vbml0dWQgdm9vZ2UuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIG11dXRhIHRlaWUgc8O8bmtyb29uaXR1ZCB2b29nZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNDEwNzEwMTUyNTc0NjAzNTcxOCI+Imx1Z2VnZSB0ZXJtaW5laWQsIG1pcyB0ZSBzw7VuYXN0aWtrdSBsaXNhc2l0ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNjU5NjE0NjAwMzM4OTA0MjQzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBrw7Vpa2kgc8O1bnUsIG5pbWVzaWQgamEgZnJhYXNlLCBtaWxsZSBrYXN1dGFqYSBvbiBrYXN1dGFqYSBzw7VuYXJhYW1hdHVzc2Ugc2FsdmVzdGFudWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4ic8O1bmFkZSBsaXNhbWluZSBrYXN1dGFqYSBtw6TDpHJhdGxldHVkIHPDtW5hc3Rpa2t1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODE4NTM4NTcxNjI1NTA2NTI5MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBraXJqdXRhZGEga2FzdXRhamFzw7VuYXN0aWtrdSB1dXNpIHPDtW51LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4ia2FpdHN0dWQgc2FsdmVzdHVzcnV1bWkganV1cmRlcMOkw6RzdSBrYXRzZXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgyMzUzNDE1MTU2MDU1NTk2NzciPiJrYWl0c3R1ZCBzYWx2ZXN0dXNydXVtaSBqdXVyZGVww6TDpHN1IGthdHNldGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjQyNDczMjkyMzQ4MTMyMDcyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlc3RpZGEgbHViYSBVU0Itc2FsdmVzdHVzZWtzLCBtaXMgb24gc2FhZGF2YWwgdHVsZXZhc3RlcyBzZWFkbWV0ZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU5MTQ0MDI2ODQ2ODU4NDg4MjgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga2F0c2V0YWRhIFNELWthYXJkaSBsdWJhLCBtaXMgb24gc2FhZGF2YWwgdHVsZXZhc3RlbCBzZWFkbWV0ZWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4NDg1OTc5MDYyMjU0NjY2NzQ4Ij4ibXV1dGtlLCBrdXN0dXQuIFVTQi1ydXVtaSBzaXN1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiJTRC1rYWFyZGkgc2lzdSBtdXV0bWluZSB2w7VpIGt1c3R1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBraXJqdXRhZGEgVVNCLW3DpGx1c2VhZG1lbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MzM3NDE3NzkwOTM2NjMyMDkwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtpcmp1dGFkYSBTRC1rYWFyZGlsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+InNpc2Vtw6RsdSBzaXN1IG11dXRtLi9rdXN0dXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTg5MTYwNTk3Njk4NTI5MTg1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHNpc2VtaXNlIGFuZG1la2FuZGphIHNpc3UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+ImRva3VtZW5kaSB0YWxsZXR1c2UgaGFsZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg3MDQzMjMxNzY5MTQxMjE0ODQiPiJMdWJhYiByYWtlbmR1c2VsIGhhbGxhdGEgZG9rdW1lbmRpIHRhbGxldGFtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iODE1MDYxMzgyMzkwMDQ2MDU3NiI+Imp1dXJkZXDDpMOkcyB2w6RsaXNtw6RsdXNlYWRtZWxlIChrw7Vpa2lkZWxlIGthc3V0YWphdGVsZSkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSIzMjE1MjA4MzU3NDE1ODkxMzIwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2Uga8O1aWtpZGVsIGthc3V0YWphdGVsIHDDtsO2cmR1ZGEgdsOkbGlzbcOkbHVzZWFkbWUgcG9vbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTY1NjQ4NzI2NDgxOTY2OTgyNCI+Imp1dXJkZXDDpMOkcyB2YWhlbcOkbHUgZmFpbGlzw7xzdGVlbWlsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NTc4OTY3NjQyMjY1NTUwOTU1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHZhaGVtw6RsdSBmYWlsaXPDvHN0ZWVtaSBsdWdlZGEgamEga2lyanV0YWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiJJbnRlcm5ldGkta8O1bmVkZSB0ZWdlbWluZS92YXN0dXbDtXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlX3NpcCIgbXNnaWQ9IjQ3MTc2MzIwMDAwNjI2NzQyOTQiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga2FzdXRhZGEgU0lQLXRlZW51c3QgSW50ZXJuZXRpLWvDtW5lZGUgdmFsaW1pc2Vrcy92YXN0dXbDtXRtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc4NjI1OTMyODM2MTE0OTMyMzIiPiJ2w7VyZ3VrYXN1dHVzZSBhamFsb28gbHVnZW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHbDtXJndWthc3V0dXNlIGFqYWx1Z3UgdGVhdHVkIHbDtXJrdWRlIGphIHJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iMjU2MjA1MzU5MjMzOTg1OTk5MCI+InbDtXJndWVlc2tpcmphZGUgaGFsZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGFsbGF0YSB2w7VyZ3VlZXNraXJqdSBqYSBtw6TDpHJhdGxlZGEgcmFrZW5kdXNlc3BldHNpaWZpbGlzaSByZWVnbGVpZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTA4ODIxNzMwOTA4ODcyOTY1MCI+InbDtXJndWthc3V0dXNlIGFydmVzdGFtaXNlIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1NDQzNDEyODY2NzQ2MTk4MTIzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHbDtXJndWthc3V0dXNlIGxvZW5kYW1pc3QgcmFrZW5kdXN0ZSBzdWh0ZXMuIE1pdHRlIGthc3V0YWRhIHRhdmFyYWtlbmR1c3RlIHB1aHVsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4ic29rbGkgbcOkcmtpZGUgbXV1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9Ijc2NTU1Njg0MzM2OTYzNTY1NzgiPiJMdWJhYiByYWtlbmR1c2VsIG11dXRhIG1hcnNydXV0aW1pc2VrcyBzb2tsaSBtw6Rya2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI3NjczNDE2NDg3ODczNDMyMjY4Ij4ianV1cmRlcMOkw6RzdSBtw6RyZ3VhbmRlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI0NTg0NTc3NDI2ODM0MzEzODciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdHV1YSwga29udHJvbGxpZGEgamEga3VzdHV0YWRhIG3DpHJndWFuZGVpZCwgc2ggbmVpZCwgbWlsbGUgb24gcG9zdGl0YW51ZCB0ZWlzZWQgcmFrZW5kdXNlZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI3MDU3NzY0NzQyMjExNjU2NjU0Ij4ic2VvIG3DpHJndWFubmV0ZSBrdXVsYW1pc3RlZW51c2VnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI5ODU2OTc5MTg1NzY5MDI5ODYiPiJWw7VpbWFsZGFiIG9tYW5pa3VsIHNpZHVkYSBtw6RyZ3Vhbm5ldGUga3V1bGFtaXN0ZWVudXNlIMO8bGVtaXNlIHRhc2VtZSBrYXN1dGFqYWxpaWRlc2UuIFNlZGEgZWkgdG9oaWtzIHRhdmFyYWtlbmR1c3RlIHB1aHVsIGt1bmFnaSB2YWphIG9sbGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnZva2VDYXJyaWVyU2V0dXAiIG1zZ2lkPSIzNjk5NjAwODMzOTc1MTE3NDc4Ij4ib3BlcmFhdG9yaXBvb2xzZSBrb25maWd1cmF0c2lvb25pcmFrZW5kdXNlIGFrdGl2ZWVyaW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnZva2VDYXJyaWVyU2V0dXAiIG1zZ2lkPSI0MTU5NTQ5MTUyNTI5MTExOTIwIj4iTHViYWIgb21hbmlrdWwgYWt0aXZlZXJpZGEgb3BlcmFhdG9yaXBvb2xzZSBrb25maWd1cmF0c2lvb25pcmFrZW5kdXNlLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiJQYXJvb2xpIHJlZWdsaXRlIG3DpMOkcmFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19saW1pdFBhc3N3b3JkIiBtc2dpZD0iMzI1MjExNDIwMzkxOTUxMDM5NCI+IktvbnRyb2xsaWdlIGVrcmFhbmlsdWt1IGF2YW1pc2UgcGFyb29saWRlIHBpa2t1c3QgamEgdMOkaGVtw6Rya2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dhdGNoTG9naW4iIG1zZ2lkPSI5MTQxMzA2NDY5NDIxOTk1MDMiPiJFa3JhYW5pIGF2YW1pc2thdHNlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+IkrDpGxnaWIgZWtyYWFuaSBhdmFtaXNlbCB2YWxlc3RpIHNpc2VzdGF0dWQgcGFyb29saWRlIGFydnUgamEgbHVrdXN0YWIgdGFodmVsYXJ2dXRpIHbDtWkga3VzdHV0YWIga8O1aWsgc2VsbGUgYW5kbWVkLCBrdWkgdmFsZSBwYXJvb2wgc2lzZXN0YXRha3NlIGxpaWdhIHBhbGp1IGtvcmRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiJKw6RsZ2liIGVrcmFhbmkgYXZhbWlzZWwgdmFsZXN0aSBzaXNlc3RhdHVkIHBhcm9vbGlkZSBhcnZ1IGphIGx1a3VzdGFiIHRlbGVmb25pIHbDtWkga3VzdHV0YWIga8O1aWsgc2VsbGUgYW5kbWVkLCBrdWkgdmFsZSBwYXJvb2wgc2lzZXN0YXRha3NlIGxpaWdhIHBhbGp1IGtvcmRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+IkVrcmFhbmlsdWt1IHBhcm9vbGkgbXV1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiJFa3JhYW5pbHVrdSBwYXJvb2xpIG11dXRtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9mb3JjZUxvY2siIG1zZ2lkPSIyMjc0MDg1Mzg0NzA0MjQ4NDMxIj4iRWtyYWFuaSBsdWt1c3RhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZm9yY2VMb2NrIiBtc2dpZD0iMTE0MTc5NzU4ODQwMzgyNzEzOCI+Ik3DpMOkcmFrZSwga3VpZGFzIGphIG1pbGxhbCBla3JhYW4gbHVrdXN0dWIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dpcGVEYXRhIiBtc2dpZD0iMzkxMDU0NTQ0Njc1ODYzOTcxMyI+IkvDtWlraWRlIGFuZG1ldGUga3VzdHV0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzA2MTg0MDk2MDY3NzU2ODc2Ij4iS3VzdHV0YWdlIHRhaHZlbGFydnV0aSBhbmRtZWQgaG9pYXRhbWF0YSwgbMOkaHRlc3RhZGVzIGFydnV0aSB0ZWhhc2VhbmRtZXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUwOTY4OTU2MDQ1NzQxODgzOTEiPiJLdXN0dXRhIHRlbGVmb25pYW5kbWVkIGhvaWF0dXNldGEsIGzDpGh0ZXN0YWRlcyB0ZWxlZm9uaSB0ZWhhc2VhbmRtZXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iMjc4NDgyODI5Mzc0Nzc5MTQ0NiI+Ik3DpMOkcmEgc2VhZG1lIGdsb2JhYWxuZSBwdWh2ZXJzZXJ2ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+IkVlc2tpcmphZGUgbHViYW1pc2UgYWphbCBrYXN1dGF0YXZhIHNlYWRtZSBnbG9iYWFsc2UgcHVodmVyc2VydmVyaSBtw6TDpHJhbWluZS4gQWludWx0IGVzaW1lc2Ugc2VhZG1lIGFkbWluaXN0cmFhdG9yIG3DpMOkcmFiIHTDtWh1c2EgZ2xvYmFhbHNlIHB1aHZlcnNlcnZlcmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iODg1Mjc5MTUxODQ3MjU0MDU2Ij4iRWtyYWFuaWx1a3UgcGFyb29saSBhZWd1bWlzZSBtw6TDpHJhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSIxNzI5NzI1MjI2MzE0NjkxNTkxIj4iTcOkw6RyYWtlIGVrcmFhbmlsdWt1IHBhcm9vbGkgbXV1dG1pc3NhZ2VkdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSI4OTAxMzI2MTk5OTA5MTMyOTE1Ij4iU2FsdmVzdGFtaXNlIGtyw7xwdC4gbcOkw6RyYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSIyNjM3NzMyMTE1MzI1MzE2OTkyIj4iTsO1dWEgc2FsdmVzdGF0dWQgcmFrZW5kdXNlIGFuZG1ldGUga3LDvHB0ZWVyaW1pc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSI2Mzk1MzAxMDIzMTUyMjk3ODI2Ij4iS2VlbGEga2FhbWVyYWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4iVsOkbHRpZ2Ugc2VhZG1lIGvDtWlnaSBrYWFtZXJhdGUga2FzdXRhbWlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiJLbGFodmlsdWt1IGZ1bmt0cy4ga2VlbGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiJUYWtpc3RhZ2Uga2xhaHZpbHVrdSBtw7VuZSBmdW5rdHNpb29uaSBrYXN1dGFtaXN0LiI8L3N0cmluZz4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJwaG9uZVR5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iODkwMTA5ODMzNjY1ODcxMDM1OSI+IktvZHUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4Njk5MjM2NTA1MjcxMzY2MTUiPiJNb2JpaWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI3ODk3NTQ0NjU0MjQyODc0NTQzIj4iVMO2w7YiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxMTAzNjAxNDMzMzgyMTU4MTU1Ij4iVMO2w7ZmYWtzIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTczNTE3NzE0NDk0ODMyOTM3MCI+IktvZHVmYWtzIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjAzODc4Njc0NDc3MjA3Mzk0Ij4iUGlpcGFyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+Ik11dSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiJLb2hhbmRhdHVkIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gIDxzdHJpbmctYXJyYXkgbmFtZT0iZW1haWxBZGRyZXNzVHlwZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI4MDczOTk0MzUyOTU2MTI5MTI3Ij4iS29kdSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjcwODQyMzczNTY2MDI2MjU2MDQiPiJUw7bDtiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjExMTIwNDQ0MTA2NTkwMTEwMjMiPiJNdXUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyMzc0OTEzOTUyODcwMTEwNjE4Ij4iS29oYW5kYXR1ZCI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICA8c3RyaW5nLWFycmF5IG5hbWU9InBvc3RhbEFkZHJlc3NUeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY4ODAyNTc2MjY3NDAwNDcyODYiPiJLb2R1IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTYyOTE1Mzk1NjA0NTEwOTI1MSI+IlTDtsO2IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNDk2NjYwNDI2NDUwMDM0MzQ2OSI+Ik11dSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjQ5MzI2ODI4NDc1OTUyOTkzNjkiPiJLb2hhbmRhdHVkIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1BZGRyZXNzVHlwZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIxNzM4NTg1MTk0NjAxNDc2Njk0Ij4iS29kdSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjEzNTk2NDQ1NjU2NDczODM3MDgiPiJUw7bDtiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiJNdXUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4iS29oYW5kYXR1ZCI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yZ2FuaXphdGlvblR5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzU0NjMzNTYxMjE4OTExNTYxNSI+IlTDtsO2IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNDM3ODA3NDEyOTA0OTUyMDM3MyI+Ik11dSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM0NTUwNDc0Njg1ODM5NjUxMDQiPiJLb2hhbmRhdHVkIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1Qcm90b2NvbHMiPgotICAgIDxpdGVtIG1zZ2lkPSI4NTk1MjYxMzYzNTE4NDU5NTY1Ij4iQUlNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNzM5MDQ3MzYyODI3NTQ5MDcwMCI+IldpbmRvd3MgTGl2ZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc4ODI4NzcxMzQ5MzE0NTgyMTciPiJZYWhvbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwMzUzNzYzMTMyMDA1ODUyNDIiPiJTa3lwZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc1MzIzNjMxNzg0NTk0NDQ5NDMiPiJRUSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM3MTM0NDEwMzQyOTk2NjA3NDkiPiJHb29nbGUgVGFsayI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI1MDY4NTczMTI3MTg2MzA4MjMiPiJJQ1EiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxNjQ4Nzk3OTAzNzg1Mjc5MzUzIj4iSmFiYmVyIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDdXN0b20iIG1zZ2lkPSIxNjQ0NzM4MDU5MDUzMzU1ODIwIj4iS29oYW5kYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUhvbWUiIG1zZ2lkPSIyNTcwOTIzNDYzMDMzOTg1ODg3Ij4iS29kdW5lIHRlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNb2JpbGUiIG1zZ2lkPSI2NTAxNDYzNTU3NzU0NzUxMDM3Ij4iTW9iaWlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29yayIgbXNnaWQ9Ijg4NjM5Mzk2NjcwNTk5MTE2MzMiPiJUw7bDtmtvaGEgdGVsZWZvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUZheFdvcmsiIG1zZ2lkPSIzNTE3NzkyMTYwMDA4ODkwOTEyIj4iVMO2w7Zrb2hhIGZha3NpbnVtYmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4SG9tZSIgbXNnaWQ9IjIwNjcyNjU5NzIzMjI5NzE0NjciPiJLb2R1bmUgZmFrc2ludW1iZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVQYWdlciIgbXNnaWQ9Ijc1ODIzNTk5NTUzOTQ5MjE3MzIiPiJQaWlwYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVPdGhlciIgbXNnaWQ9IjE1NDQ0MjU4NDc4Njg3NjU5OTAiPiJNdXUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDYWxsYmFjayIgbXNnaWQ9IjI3MTIxNzUyMDMwNjU2NzgyMDYiPiJUYWdhc2loZWxpc3R1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNhciIgbXNnaWQ9Ijg3MzgzNjA2ODk2MTY3MTY5ODIiPiJBdXRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ29tcGFueU1haW4iIG1zZ2lkPSI1NDA0MzQzNTY0NjE0Nzg5MTYiPiJFdHRldsO1dHRlIMO8bGR0ZWxlZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlSXNkbiIgbXNnaWQ9IjgwMjI0NTMxOTMxNzEzNzAzMzciPiJJU0ROIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTWFpbiIgbXNnaWQ9IjY3NjYxMzcwMTA2MjgzMjY5MTYiPiJQZWFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXJGYXgiIG1zZ2lkPSI4NTg3NjU3MTQ1MDcyNDQ2NTY1Ij4iVGVpbmUgZmFrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+IlJhYWRpb3RlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVUZWxleCIgbXNnaWQ9IjMzNjc4Nzk5NTI0NzYyNTA1MTIiPiJUZWxla3NpbnVtYmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlVHR5VGRkIiBtc2dpZD0iODYwNjUxNDM3ODU4NTAwMDA0NCI+IlRUWSBUREQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrTW9iaWxlIiBtc2dpZD0iMTMxMTQyNjk4OTE4NDA2NTcwOSI+IlTDtsO2a29oYSBtb2JpaWx0ZWxlZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya1BhZ2VyIiBtc2dpZD0iNjQ5OTM4NzMxMjMxMTU3MDU2Ij4iVMO2w7Zrb2hhIHBpaXBhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjU1OTY3NzI2MzYxMjg1NjI4ODQiPiJBc3Npc3RlbnQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNbXMiIG1zZ2lkPSI3MjU0NDkyMjc1NTAyNzY4OTkyIj4iTU1TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQ3VzdG9tIiBtc2dpZD0iNzgzNzU4NjE5ODQ1ODA3MzQwNCI+IktvaGFuZGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVCaXJ0aGRheSIgbXNnaWQ9IjI4MTMzNzk4NDQyMTEzOTA3NDAiPiJTw7xubmlww6RldiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUFubml2ZXJzYXJ5IiBtc2dpZD0iMzg3Njc3OTc0NDUxODI4NDAwMCI+IkFhc3RhcMOkZXYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVPdGhlciIgbXNnaWQ9IjczODgxNzg5MzkwMTAxNDMwNzciPiJNdXUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVDdXN0b20iIG1zZ2lkPSI4NTI1OTYwMjU3ODA0MjEzODQ2Ij4iS29oYW5kYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUhvbWUiIG1zZ2lkPSI0NDkyMjcyMzYxNDA0MzM5MTkiPiJLb2R1bmUgZS1wb3N0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlV29yayIgbXNnaWQ9IjM1NDgwNTgwNTk2MDExNDk5NzMiPiJUw7bDtmtvaGEgZS1wb3N0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlT3RoZXIiIG1zZ2lkPSIyOTIzMDA4Njk1MjcyNjM5NTQ5Ij4iTXV1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlTW9iaWxlIiBtc2dpZD0iMTE5OTE5MDA1MzIxMTY2MjA1Ij4iTW9iaWlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiJLb2hhbmRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUhvbWUiIG1zZ2lkPSI4MTY1NzU2OTc3MTg0NDgzMDk3Ij4iS29kdW5lIGFhZHJlc3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlV29yayIgbXNnaWQ9IjUyNjgxNzI3NzIzODc2OTQ0OTUiPiJUw7bDtmtvaGEgYWFkcmVzcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVPdGhlciIgbXNnaWQ9IjI3MjYxMTE5NjY2MjM1ODQzNDEiPiJNdXUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVR5cGVDdXN0b20iIG1zZ2lkPSIyMDc0MDI4NzU1NTI3ODI2MDQ2Ij4iS29oYW5kYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUhvbWUiIG1zZ2lkPSI2MjQxMTgxMDMyOTU0MjYzODkyIj4iS29kdW5lIElNLWFhZHJlc3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVR5cGVXb3JrIiBtc2dpZD0iMTM3MTQ4OTI5MDI0MjQzMzA5MCI+IlTDtsO2a29oYSBJTS1hYWRyZXNzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlT3RoZXIiIG1zZ2lkPSI1Mzc3MDA3NDk1NzM1OTE1NDc4Ij4iTXV1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEN1c3RvbSIgbXNnaWQ9IjY5MTk0NTM4MzY2MTg3NDk5OTIiPiJLb2hhbmRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEFpbSIgbXNnaWQ9IjcwNTAzNjA2MTIzNjgzODM0MTciPiJBSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTXNuIiBtc2dpZD0iMTQ0NTU2NTQ1NDIwNzY5NDQyIj4iV2luZG93cyBMaXZlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFlhaG9vIiBtc2dpZD0iODI3MTQzOTQwODQ2OTAyMTI3MyI+IllhaG9vIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFNreXBlIiBtc2dpZD0iOTAxOTI5Njc0NDYyMjgzMjk1MSI+IlNreXBlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFFxIiBtc2dpZD0iODg4NzQ4NDM3OTQ5NDExMTg4NCI+IlFRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiJIYW5nb3V0cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZVdvcmsiIG1zZ2lkPSIyOTI2ODg3MDUwNTM2Mzg3MiI+IlTDtsO2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZU90aGVyIiBtc2dpZD0iMzk1MTc4MTEzMTU3MDEyNDA4MiI+Ik11dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVDdXN0b20iIG1zZ2lkPSIyMjU1MjM0MTUzNzIwODgzMjIiPiJLb2hhbmRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ3VzdG9tIiBtc2dpZD0iMzU0MjQwMzY3OTgyNzI5NzMwMCI+IktvaGFuZGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI2Mjc0MzM0ODI1MTk1Mzc5MDc2Ij4iQXNzaXN0ZW50Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQnJvdGhlciIgbXNnaWQ9Ijg3NTc5MTM1MDY3ODQwNjc3MTMiPiJWZW5kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ2hpbGQiIG1zZ2lkPSIxODkwNzQ2Mjc3Mjc2ODgxNjI2Ij4iTGFwcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZURvbWVzdGljUGFydG5lciIgbXNnaWQ9IjY5MDQ4MDcxMTIxMjExMjIxMzMiPiJFbHVrYWFzbGFuZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZhdGhlciIgbXNnaWQ9IjUyMjgwMzQ2ODcwODIwNTA3MjUiPiJJc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGcmllbmQiIG1zZ2lkPSI3MzEzMTA2NzYyNDgzMzkxMjYyIj4iU8O1YmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTWFuYWdlciIgbXNnaWQ9IjYzNjU2Nzc4NjE2MTAxMzc4OTUiPiJIYWxkdXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNb3RoZXIiIG1zZ2lkPSI0NTc4NTcxMzUyOTYyNzU4MzA0Ij4iRW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFyZW50IiBtc2dpZD0iNDc1NTYzNTU2NzU2MjkyNTIyNiI+IlZhbmVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFydG5lciIgbXNnaWQ9IjcyNjY0OTAyODUxMjAyNjI3ODEiPiJQYXJ0bmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVmZXJyZWRCeSIgbXNnaWQ9IjEwMTU3MzA1OTg0NDEzNTUyNCI+IlZpaXRhczoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWxhdGl2ZSIgbXNnaWQ9IjE3OTk4MTk5MzAwODU2MTAyNzEiPiJTdWd1bGFuZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNpc3RlciIgbXNnaWQ9IjE3MzU5ODM1NTQ0NzkwNzY0ODEiPiLDlWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlU3BvdXNlIiBtc2dpZD0iMzk0MTM2OTM5NDI4Njk4MTE3Ij4iQWJpa2Fhc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUN1c3RvbSIgbXNnaWQ9IjI0NzM1ODA1OTMxMTE1OTA5NDUiPiJLb2hhbmRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IktvZHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iVMO2w7YiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+Ik11dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlNpc2VzdGFnZSBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlNpc2VzdGFnZSBQVUsta29vZCBqYSB1dXMgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSy1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJVdXMgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJQdXVkdXRhZ2UgcGFyb29saSBzaXNlc3RhbWlzZWtzIjwvZm9udD48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iQXZhbWlzZWtzIHNpc2VzdGFnZSBwYXJvb2wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJBdmFtaXNla3Mgc2lzZXN0YWdlIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iVmFsZSBQSU4ta29vZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iQXZhbWlzZWtzIHZhanV0YWdlIG1lbsO8w7xrbGFodmksIHNlZWrDpHJlbCBrbGFodmkgMC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbF9kaWFsb2dfbnVtYmVyX2Zvcl9kaXNwbGF5IiBtc2dpZD0iNjk2MTkyMTAzMTk1MDkwOTcwIj4iSMOkZGFhYmludW1iZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg5NjM4MzkyNDI1NjU2NTMxOTIiPiJUZWVudXMgcHV1ZHViLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2NyZWVuX2xvY2tlZCIgbXNnaWQ9IjcyODg0NDMwNzQ4MDY4MzI5MDQiPiJFa3JhYW4gbHVrdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2VuYWJsZWQiIG1zZ2lkPSI0NjE1NDA1MTYxNDEyNjA0OSI+IlZhanV0YWdlIGF2YW1pc2VrcyB2w7VpIGjDpGRhYWJpa8O1bmUgdGVnZW1pc2VrcyBtZW7DvMO8bnVwcHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSI2ODYyNjAwMjg3OTcxNTgzNjQiPiJWYWp1dGFnZSBhdmFtaXNla3MgbWVuw7zDvGtsYWh2aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNzQ3ODcwMzI1NDk2NDgxMDMwMiI+IkF2YW1pc2VrcyBqb29uaXN0YWdlIG11c3RlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZW1lcmdlbmN5X2NhbGwiIG1zZ2lkPSI1MzQ3NjMzNzg0NDAxMjg1MjI1Ij4iSMOkZGFhYmlrw7VuZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4iS8O1bmUganV1cmRlIHRhZ2FzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9jb3JyZWN0IiBtc2dpZD0iOTAzOTAwODY1MDM2MjI2MTIzNyI+IsOVaWdlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl93cm9uZyIgbXNnaWQ9IjQzMTc5NTUwMTQ5NDgxMDg3OTQiPiJQcm9vdmlnZSB1dWVzdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Bhc3N3b3JkX3dyb25nIiBtc2dpZD0iNTczNzgxNTM5MzI1MzE2NTMwMSI+IlByb292aWdlIHV1ZXN0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiJNYWtzaW1hYWxuZSB0ZWVudXNlZ2EgRmFjZSBVbmxvY2sgYXZhbWlzZSBrYXRzZXRlIGFydiBvbiDDvGxldGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MDU3NzYyODI4MzU1NTcyMzE1Ij4iTGFhZGltaW5lLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jaGFyZ2VkIiBtc2dpZD0iMzIxNjM1NzQ1Njg0MDYwNjI0Ij4iTGFldHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9iYXR0ZXJ5X3Nob3J0IiBtc2dpZD0iNDQ3NzI2NDg0OTM4Njg1MDI2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiA8eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9sb3dfYmF0dGVyeSIgbXNnaWQ9IjE0ODI4NzM5ODE5MTkyNDk3NDAiPiLDnGhlbmRhZ2UgbGFhZGlqYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk5NDM5Mjc3ODE5MjE1Mzk5Ij4iU0lNLWthYXJ0aSBwb2xlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiJUYWh2ZWxhcnZ1dGlzIHBvbGUgU0lNLWthYXJ0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4iVGVsZWZvbmlzIHBvbGUgU0lNLWthYXJ0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUzNzI3ODcxMzgwMjMyNzI2MTUiPiJTaXNlc3RhZ2UgU0lNLWthYXJ0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSIzNTI2NTczMDk5MDE5MzE5NDcyIj4iU0lNLWthYXJ0IHB1dWR1YiB2w7VpIG9uIGxvZXRhbWF0dS4gU2lzZXN0YWdlIFNJTS1rYWFydC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiJLYXN1dGFtaXNrw7VsYm1hdHUgU0lNLWthYXJ0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiJTSU0ta2FhcnQgb24gasOkw6RkYXZhbHQga2VlbGF0dWQuXG4gVGVpc2UgU0lNLWthYXJkaSBzYWFtaXNla3MgdsO1dGtlIMO8aGVuZHVzdCBvbWEgdHJhYWRpdGEgc2lkZSB0ZWVudXNlcGFra3VqYWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDE1OTQ5MDUxNTI3NDY4ODYiPiJFZWxtaXNlIGxvbyBudXBwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYwODkyOTc2NTA0ODEyOTIzNjMiPiJOdXBwIErDpHJnbWluZSByYWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU5MDg4Nzg2NzgwMTI4MDAxIj4iTnVwcCBQZWF0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI1ODg4NDIyOTM4MzUxMDE5NDI2Ij4iTnVwcCBFc2l0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTYyMzE4Mzc4NzY2OTg3NjAxIj4iTnVwcCBQZWF0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsc19vbmx5IiBtc2dpZD0iNjczMzk3ODMwNDM4NjM2NTQwNyI+IkFpbnVsdCBow6RkYWFiaWvDtW5lZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjE0MzM4OTIyNDk4NjAyODUwMSI+IlbDtXJrIHN1bGV0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4iU0lNLWthYXJ0IG9uIFBVSy1sdWt1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiJWYWFkYWtlIGthc3V0dXNqdWhlbmRpdCB2w7VpIHbDtXRrZSDDvGhlbmR1c3Qga2xpZW5kaXRlZW5pbmR1c2VnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiJTSU0ta2FhcnQgb24gbHVrdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4iU0lNLWthYXJkaSBhdmFtaW5lIC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjQ4MTYyMzgzMDM0NDEwNzIyMiI+Ik9sZXRlIG9tYSBhdmFtaXNtdXN0cml0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkga29vc3RhbnVkLiBcblxuUHJvb3ZpZ2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IHV1ZXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjI3MjU5NzMyODYyMzkzNDQ1NTUiPiJPbGV0ZSBwYXJvb2xpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgc2lzZXN0YW51ZC4gXG5cblByb292aWdlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdCB1dWVzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+Ik9sZXRlIFBJTi1rb29kaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIHNpc2VzdGFudWQuIFxuXG5Qcm9vdmlnZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QgdXVlc3RpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjkxOTE2MTE5ODQ2MjU0NjA4MjAiPiJKb29uaXN0YXNpdGUgb21hIGF2YW1pc211c3RyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpLiBQw6RyYXN0IHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IHBhbHV0YWtzZSB0ZWlsIHRhaHZlbGFydnV0aSBhdmFkYSBHb29nbGVcJ2kgc2lzc2Vsb2dpbWlzZWdhLlxuXG4gUHJvb3ZpZ2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IHV1ZXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+Ikpvb25pc3Rhc2l0ZSBvbWEgYXZhbWlzbXVzdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgcGFsdXRha3NlIHRlaWwgdGVsZWZvbiBhdmFkYSBHb29nbGVcJ2kgc2lzc2Vsb2dpbWlzZWdhLlxuXG4gUHJvb3ZpZ2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IHV1ZXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjEyODEwNjM5OTc0NTc1NTYwNCI+Ik9sZXRlIMO8cml0YW51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB0YWh2ZWxhcnZ1dGl0IHZhbGVzdGkgYXZhZGEuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlZHV0dXQga2F0c2V0IGzDpGh0ZXN0YXRha3NlIHRhaHZlbGFydnV0aSB0ZWhhc2UgdmFpa2VzZWFkZXRlbGUgamEga8O1aWsga2FzdXRhamFhbmRtZWQgbMOkaGV2YWQga2FvdHNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODYwMzU2NTE0MjE1NjgyNjU2NSI+Ik9sZXRlIMO8cml0YW51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB0ZWxlZm9uaSB2YWxlc3RpIGF2YWRhLiBQw6RyYXN0IHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IGzDpGh0ZXN0YXRha3NlIHRlbGVmb24gdGVoYXNlIHZhaWtlc2VhZGV0ZWxlIGphIGvDtWlrIGthc3V0YWphYW5kbWVkIGzDpGhldmFkIGthb3RzaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyODA4NzM1MTY0OTM5MzQzNjUiPiJPbGV0ZSBww7zDvGRudWQgdGFodmVsYXJ2dXRpdCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBhdmFkYS4gVGFodmVsYXJ2dXRpIGzDpGh0ZXN0YXRha3NlIG7DvMO8ZCB0ZWhhc2UgdmFpa2VzZWFkZXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiJPbGV0ZSBww7zDvGRudWQgdGVsZWZvbmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgYXZhZGEuIFRlbGVmb24gbMOkaHRlc3RhdGFrc2UgbsO8w7xkIHRlaGFzZSB2YWlrZXNlYWRldGVsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MjUxNDgwMzQzMzk0Mzg5NjY1Ij4iUHJvb3ZpZ2UgdXVlc3RpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiJLYXMgdW51c3Rhc2l0ZSBtdXN0cmk/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fZm9yZ290X3BhdHRlcm4iIG1zZ2lkPSIyNTg4NTIxNTAxMTY2MDMyNzQ3Ij4iS29udG8gYXZhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iMjc1MTM2ODYwNTI4NzI4ODgwOCI+IkxpaWdhIHBhbGp1IG11c3RyaWthdHNlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4iQXZhbWlzZWtzIGxvZ2lnZSBzaXNzZSBvbWEgR29vZ2xlXCdpIGtvbnRvZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9Ijg4NDY4ODE0MjQxMDY0ODQ0NDciPiJLYXN1dGFqYW5pbWkgKGUtcG9zdCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iNTk1ODAyODM4Mzk1NDczODUyOCI+IlBhcm9vbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4iTG9naSBzaXNzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSIxMzY0MDUxNDczMzQ3NDg1OTA4Ij4iVmFsZSBrYXN1dGFqYW5pbWkgdsO1aSBwYXJvb2wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iMTY5NjkyNDc2MzY5MDM3OTA3MyI+IkthcyB1bnVzdGFzaXRlIG9tYSBrYXN1dGFqYW5pbWUgdsO1aSBwYXJvb2xpP1xuS8O8bGFzdGFnZSBhYWRyZXNzaSAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSI3MTE0NjI3MzUxMjg2OTMzODY3Ij4iS29udHJvbGxpbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+IkF2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4iSGVsaSBzaXNzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb2ZmX2xhYmVsIiBtc2dpZD0iOTk2ODIyODI1MTU0MzE5MDI2Ij4iSGVsaSB2w6RsamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX3N0YXJ0IiBtc2dpZD0iMzk0MTA0NTUwMjkzMzE0Mjg0NyI+Ik11c3RyaSBrb29zdGFtaXNlZ2Egb24gYWx1c3RhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+Ik11c3RlciBvbiBrdXN0dXRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jZWxsX2FkZGVkIiBtc2dpZD0iNjc1NjAzMTIwODM1OTI5MjQ4NyI+IkxhaHRlciBvbiBsaXNhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9kZXRlY3RlZCIgbXNnaWQ9IjQ5ODg3MzA4OTU1NTQwNTcwNTgiPiJNdXN0ZXIgb24gdmFsbWlzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBWaWRpbiAlMiRkLyUzJGQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IlZpZGluYSBsaXNhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IlTDvGhpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJBdmFtaXNhbGEgb24gbGFpZW5kYXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJBdmFtaXNhbGEgb24gYWhlbmRhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiJLYXN1dGFqYSB2YWxpamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJPbGVrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4iS2FhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJNZWVkaWEganVodG51cHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJWaWRpbmEgw7xtYmVya29ycmFsZGFtaW5lIGFsZ2FzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlZpZGluYSDDvG1iZXJrb3JyYWxkYW1pbmUgbMO1cHBlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG9uIGt1c3R1dGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4iQXZhbWlzYWxhIGxhaWVuZGFtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IkxvaGlzdGFtaXNlZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+Ik11c3RyaWdhIGF2YW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJOw6RvZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUElOLWtvb2RpZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiJQYXJvb2xpZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJNdXN0cmkgYWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiJMb2hpc3RhbWlzYWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfY2hhcmFjdGVyIiBtc2dpZD0iNzMzNjQ3MDUzNTM4NTAwOTUyMyI+InTDpGhlbcOkcmsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF93b3JkIiBtc2dpZD0iNzA3NTU3MDMyODM3NDkxODY2MCI+InPDtW5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluayIgbXNnaWQ9IjU4MTU1MDg4ODA3ODI0ODgyNjciPiJsaW5rIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluZSIgbXNnaWQ9IjU3NjQyNjcyMzUwMjYxMjA4ODgiPiJyaWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91cl9hbXBtIiBtc2dpZD0iNDU4NDMzODA4MzUyOTM1NTk4MiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJBTVBNIj4lUDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJob3VyX2NhcF9hbXBtIiBtc2dpZD0iMjA4MzQ2NTk5Mjk0MDQ0NDM2NiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4iVGVoYXNldGVzdCBlYmHDtW5uZXN0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub3Rfc3lzdGVtIiBtc2dpZD0iNDQzNTIwMTY1Njc2NzI3NjcyMyI+IlRvaW1pbmd1dCBGQUNUT1JZX1RFU1QgdG9ldGF0YWtzZSBhaW51bHQga2F1c3RhIFxcc3lzdGVtXFxhcHAgaW5zdGFsbGl0dWQgcGFrZXR0aWRlIHB1aHVsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+IkVpIGxlaXR1ZCDDvGh0ZWdpIHBha2V0dGksIG1pcyB2w7VpbWFsZGFrcyB0b2ltaW5ndXQgRkFDVE9SWV9URVNULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiJUYWFza8OkaXZpdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIxOTg3NDgzOTc3ODM0NjAzODcyIj4iTGVodCAg4oCePHhsaWZmOmcgaWQ9IlRJVExFIj4lczwveGxpZmY6Zz7igJ0gw7x0bGViIGrDpHJnbWlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjY5NjE5MDMyMTM3Mjk2Njc1NzMiPiJKYXZhU2NyaXB0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfdGl0bGUiIG1zZ2lkPSIyNjE5Mzc2NTU1NTI1MTE2NTkzIj4iTmF2aWdlZXJpbWlzZSBraW5uaXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3Bvc2l0aXZlX2J1dHRvbiIgbXNnaWQ9IjMxMTI3NTIwMTA2MDA0ODQxMzAiPiJMYWhrdSBzZWxsZWx0IGxlaGVsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX25lZ2F0aXZlX2J1dHRvbiIgbXNnaWQ9IjU2MTQ4NjEyOTMwMjYwOTk3MTUiPiJKw6TDpCBzZWxsZWxlIGxlaGVsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkIiBtc2dpZD0iMzQ2ODgxNjM1NzA5NTM3ODU5MCI+Ijx4bGlmZjpnIGlkPSJNRVNTQUdFIj4lczwveGxpZmY6Zz5cblxuS2FzIHNvb3ZpdGUga2luZGxhc3RpIHNlbGxlbHQgbGVoZWx0IGxhaGt1ZGE/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9sYWJlbCIgbXNnaWQ9IjY4NjAyNjE3NTg2NjU4MjUwNjkiPiJLaW5uaXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZG91YmxlX3RhcF90b2FzdCIgbXNnaWQ9IjQ1OTUwNDY1MTU0MDAyNjg4ODEiPiJWaWhqZTogc3V1cmVuZGFtaXNla3MgamEgdsOkaGVuZGFtaXNla3MgcHV1ZHV0YWdlIGtha3Mga29yZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+IkF1dG9tYWF0bmUgdMOkaXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2V0dXBfYXV0b2ZpbGwiIG1zZ2lkPSI3MTAzNDk1MDcwMTgwNTkwODE0Ij4iQXV0b21hYXRzZSB0w6RpdG1pc2Ugc2VhZGlzdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19uYW1lX3NlcGFyYXRvciIgbXNnaWQ9IjYzNTAxNDUxNTQ3Nzk3MDY3NzIiPiIgIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X25hbWVfZm9ybWF0IiBtc2dpZD0iMzI2ODA0MTA1NDg5OTIxNDk0NSI+IiQxJDIkMyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9zZXBhcmF0b3IiIG1zZ2lkPSI3NDgzMzA3ODkzMTcwMzI0MTI5Ij4iLCAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfZm9ybWF0IiBtc2dpZD0iNDg3NDQ1OTQ1NTc4NjgyNzM0NCI+IiQxJDIkMyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3Byb3ZpbmNlIiBtc2dpZD0iMjIzMTgwNjU1Mzg2MzQyMjMwMCI+IlByb3ZpbnRzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcG9zdGFsX2NvZGUiIG1zZ2lkPSI0Njk2NDMwNDA3Njg5Mzc3MTA4Ij4iU2lodG51bWJlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3N0YXRlIiBtc2dpZD0iNjk4ODg5NDE5NTUyMDA0NDYxMyI+Ik9sZWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF96aXBfY29kZSIgbXNnaWQ9Ijg2OTc1NDQ1OTI2MjczMjI5NDYiPiJTaWh0bnVtYmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfY291bnR5IiBtc2dpZD0iMjM3MDczNzcxMDIwMzYyODkxIj4iTWFha29uZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiJTYWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZGlzdHJpY3QiIG1zZ2lkPSI4NDAwNzM1MDczMzkyMjY3NjcyIj4iUGlpcmtvbmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kZXBhcnRtZW50IiBtc2dpZD0iNTM0MzI3OTQ2MjU2NDQ1MzMwOSI+Ik9zYWtvbmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcmVmZWN0dXJlIiBtc2dpZD0iMjAyODQ5OTQ4NTA2NTgwMDQxOSI+IlByZWZla3R1dXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wYXJpc2giIG1zZ2lkPSI4MjAyMjA2MTA1NDY4ODIwMDU3Ij4iVmFsZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FyZWEiIG1zZ2lkPSIzNTQ3NDA5MDUwODg5OTUyNDIzIj4iUGlpcmtvbmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9lbWlyYXRlIiBtc2dpZD0iMjg5Mzg4MDk3ODgzNTY5ODgxOCI+IkVtaXJhYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzc3NTI2NTc3NTQwNTEwNjk4MyI+Imx1Z2VnZSBvbWEgdmVlYmlqw6RyamVob2lkamFpZCBqYSAtYWphbHVndSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iODQ2MjM3ODIyNjYwMDQzOTY1OCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWdlZGEga8O1aWtpZGUgVVJMLWlkZSBhamFsdWd1LCBtaWRhIGJyYXVzZXIgb24ga8O8bGFzdGFudWQsIGphIGvDtWlraSBicmF1c2VyaSBqw6RyamVob2lkamFpZC4gTcOkcmt1czogc2VlIGx1YmEgZWkgcHJ1dWdpIGrDtXVzdHVkYSBrb2xtYW5kYSBvc2Fwb29sZSBicmF1c2VyaXRlZ2EgdsO1aSB0ZWlzdGUgdmVlYmlzaXJ2aW1pc3bDtWltZWdhIHJha2VuZHVzdGVnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3MTQ3ODUxNjUyNzMzMTQ0OTAiPiJraXJqdXRhZ2UgdmVlYmlqw6RyamVob2lkamFpZCBqYSAtYWphbHVndSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB0YWh2ZWxhcnZ1dGlzc2Ugc2FsdmVzdGF0dWQgYnJhdXNlcmkgYWphbHVndSB2w7VpIGrDpHJqZWhvaWRqYWlkLiBTZWUgdsO1aW1hbGRhYiByYWtlbmR1c2VsIGt1c3R1dGFkYSB2w7VpIG11dXRhIGJyYXVzZXJpIGFuZG1laWQuIE3DpHJrdXM6IHNlZSBsdWJhIGVpIHBydXVnaSBqw7V1c3R1ZGEga29sbWFuZGEgb3NhcG9vbGUgYnJhdXNlcml0ZXMgdsO1aSB0ZWlzdGVzIHZlZWJpc2lydmltaXN2w7VpbWVnYSByYWtlbmR1c3Rlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRlbGVmb25pIHNhbHZlc3RhdHVkIGJyYXVzZXJpIGFqYWx1Z3UgdsO1aSBqw6RyamVob2lkamFpZC4gU2VlIHbDtWltYWxkYWIgcmFrZW5kdXNlbCBrdXN0dXRhZGEgdsO1aSBtdXV0YSBicmF1c2VyaSBhbmRtZWlkLiBNw6Rya3VzOiBzZWUgbHViYSBlaSBwcnV1Z2kgasO1dXN0dWRhIGtvbG1hbmRhIG9zYXBvb2xlIGJyYXVzZXJpdGVzIHbDtWkgdGVpc3RlcyB2ZWViaXNpcnZpbWlzdsO1aW1lZ2EgcmFrZW5kdXN0ZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiJtw6TDpHJha2Ugw6RyYXR1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsYXJtIiBtc2dpZD0iMzE2MzkyMDM5MTU3NDczODQ4Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHNlYWRhIGluc3RhbGxpdHVkIMOkcmF0dXNrZWxsYXJha2VuZHVzZXMgw6RyYXR1c2UuIE3DtW5lZCDDpHJhdHVza2VsbGFyYWtlbmR1c2VkIGVpIHBydXVnaSBzZWRhIGZ1bmt0c2lvb25pIGp1dXJ1dGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiJsaXNhIGvDtW5lcG9zdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hZGRWb2ljZW1haWwiIG1zZ2lkPSI2NjA0NTA4NjUxNDI4MjUyNDM3Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGxpc2FkYSBzw7VudW1laWQgdGVpZSBrw7VuZXBvc3RpIHBvc3RrYXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjU5NjIyMjQxNTg5NTUyNzM5MzIiPiJCcmF1c2VyaSBnZW9sb2thdHNpb29uacO1aWd1c3RlIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSBicmF1c2VyaSBnZW9sb2thdHNpb29uacO1aWd1c2kuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHNlZGEga2FzdXRhZGEgYXN1a29oYXRlYWJlIHNhYXRtaXNlIGx1YmFtaXNla3Mgc3V2YWxpc3RlbGUgdmVlYmlzYWl0aWRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wYWNrYWdlVmVyaWZpY2F0aW9uQWdlbnQiIG1zZ2lkPSI1NTY4MTM5MTAwNjQ1ODI5MTE3Ij4icGFrZXR0aWRlIGtpbm5pdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iODQzNzU5MDE5MDk5MDg0MzM4MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBraW5uaXRhZGEsIGV0IHBha2V0dGkgc2FhYiBpbnN0YWxsaWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjQxODc3ODY3OTMzNjAzMjY2NTQiPiJzaWR1bWluZSBwYWtldGkga2lubml0YWphZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iMzE4MDc0MTc3MzIzMzg2MjEyNiI+Ikx1YmFiIG9tYW5pa3VsIHRlaGEgdGFvdGx1c2kgcGFrZXRpIGtpbm5pdGFqYXRlIGtvaHRhLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlcmlhbFBvcnQiIG1zZ2lkPSI1NDYwODMzMjc2NTQ2MzEwNzYiPiJqdXVyZGVww6TDpHMgamFkYXBvcnRpZGVsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlcmlhbFBvcnQiIG1zZ2lkPSIyOTkxNjM5OTg1MjI0NTk4MTkzIj4iVsO1aW1hbGRhYiBvbWFuaWt1bCBTZXJpYWxNYW5hZ2VyaSBBUEktbGlpZGVzZSBhYmlsIGphZGFwb3J0aWRlbGUganV1cmRlIHDDpMOkc2VkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNTA3Nzc3NDI5Nzk0MzQwOTI4NSI+InbDpGxpbmUganV1cmRlcMOkw6RzIHNpc3VwYWtrdWphdGVsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNDU0NDM0NjQ4NjY5Nzg1MzY4NSI+IlbDtWltYWxkYWIgdmFsZGFqYWwgaGFua2lkYSBqdXVyZGVww6TDpHN1IHNpc3VwYWtrdWphdGVsZSBrZXN0YSBrYXVkdS4gUG9sZSBrdW5hZ2kgdmFqYWxpayB0YXZhbGlzdGUgcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4ic2VhZG1lIGF1dG9tLiB2w6Ryc2tlbmRhbWlzdGUgdGFraXN0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVMb2NrIiBtc2dpZD0iMTY1NTYyNTgzMjE2Njc3ODQ5MiI+IlbDtWltYWxkYWIgdmFsZGFqYWwgcGFra3VkYSBzw7xzdGVlbWlsZSB0ZWF2ZXQgc2VsbGUga29odGEsIGthcyBvbiBzb2JpdiBhZWcgbWl0dGVpbnRlcmFrdGlpdnNla3MgdGFhc2vDpGl2aXRhbWlzZWtzLCBldCB2aWlhIHNlYWRlIMO8bGUgdXVlbGUgdmVyc2lvb25pbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9tZXNzYWdlIiBtc2dpZD0iNzY3MzQ0Njg3MTM5MTk1NzkwIj4iS2FzIHNvb3ZpdGUsIGV0IGJyYXVzZXIgasOkdGFrcyBzZWxsZSBwYXJvb2xpIG1lZWxkZT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25vdG5vdyIgbXNnaWQ9IjYzODk2NzUzMTY3MDY2OTk3NTgiPiJNaXR0ZSBwcmFlZ3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX3JlbWVtYmVyIiBtc2dpZD0iNjQ5MTg3OTY3ODk5Njc0OTQ2NiI+IlBpZGFnZSBtZWVsZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25ldmVyIiBtc2dpZD0iODI3NDMzMDI5Njc4NTg1NTEwNSI+Ik1pdHRlIGt1bmFnaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9wZW5fcGVybWlzc2lvbl9kZW55IiBtc2dpZD0iNzM3NDAzNjcwODMxNjYyOTgwMCI+IlRlaWwgcG9sZSBsdWJhIHNlbGxlIGxlaGUgYXZhbWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRleHRfY29waWVkIiBtc2dpZD0iNDk4NTcyOTUyNDY3MDEzMTM4NSI+IkzDtWlrZWxhdWFsZSBrb3BlZXJpdHVkIHRla3N0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1vcmVfaXRlbV9sYWJlbCIgbXNnaWQ9IjQ2NTA5MTg5MjMwODMzMjA0OTUiPiJSb2hrZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVwZW5kX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjU3MjIxNDQ2MTY3NjAxNTY0MiI+Ik1lbsO8w7wrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiJ0w7xoaWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZW51X2VudGVyX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjc0MzM2Mjc4NTExMTMwOTY2OCI+InNpc2VzdHVza2xhaHYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiJrdXN0dXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoX2dvIiBtc2dpZD0iODI5ODAxNjY2OTgyMjE0MTcxOSI+Ik90c2luZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc2VhcmNoIiBtc2dpZD0iNjc0OTgyNjYzOTA5ODUxMjEyMCI+Ik90c2luZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fcXVlcnkiIG1zZ2lkPSI1OTExNzc4NTkzMTI1MzU1MTI0Ij4iT3RzaW5ndXDDpHJpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX2NsZWFyIiBtc2dpZD0iMTMzMDI4MTk5MDk1MTgzMzAzMyI+IlTDvGhqZW5kYSBww6RyaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zdWJtaXQiIG1zZ2lkPSIyNjg4NDUwMTMzMjk3OTgzNTQyIj4iUMOkcmluZ3UgZXNpdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl92b2ljZSIgbXNnaWQ9IjI0NTMyMDM2OTU2NzQ5OTQ0NDAiPiJIw6TDpGxvdHNpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iNzQ2MDY5NDA3MDMwOTczMDE0OSI+IkthcyBsdWJhZGEgcHV1ZHV0dXNlZ2EgdXVyaW1pbmU/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBzb292aWIgbHViYWRhIHB1dWR1dHVzZWdhIHV1cmltaXNlLiBLdWkgcHV1ZHV0dXNlZ2EgdXVyaW1pbmUgb24gc2lzc2UgbMO8bGl0YXR1ZCwga3V1bGV0ZSB2w7VpIG7DpGV0ZSBraXJqZWxkdXNpIGFzamFkZSBrb2h0YSwgbWlzIG9uIHRlaWUgc8O1cm1lIGFsbCwgdsO1aSBzYWF0ZSBzdWhlbGRhIHRhaHZlbGFydnV0aWdhIGxpaWd1dHVzdGUgYWJpbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNzA4MTk5NjcyODUyMzczMTk1Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBzb292aWIgbHViYWRhIHB1dWR1dHVzZWdhIHV1cmltaXNlLiBLdWkgcHV1ZHV0dXNlZ2EgdXVyaW1pbmUgb24gc2lzc2UgbMO8bGl0YXR1ZCwga3V1bGV0ZSB2w7VpIG7DpGV0ZSBraXJqZWxkdXNpIGFzamFkZSBrb2h0YSwgbWlzIG9uIHRlaWUgc8O1cm1lIGFsbCwgdsO1aSBzYWF0ZSBzdWhlbGRhIHRlbGVmb25pZ2EgbGlpZ3V0dXN0ZSBhYmlsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iNzM5NjM4NDUwODk1Mzc3OTkyNSI+IjEga3V1IHRhZ2FzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJlZm9yZU9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iOTA5MTM0NTQ2ODM2NDk5ODI2Ij4iVmFyZW0ga3VpIDEga3V1IHRhZ2FzaSI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0ibnVtX3NlY29uZHNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDg2OTg3MDA1NjU0Nzg5NjAxMSI+IjEgc2VrdW5kIHRhZ2FzaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzkwMzcwNjgwNDM0OTU1NjM3OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNla3VuZGl0IHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0ibnVtX21pbnV0ZXNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzMwNjc4NzQzMzA4ODgxMDE5MSI+IjEgbWludXQgdGFnYXNpIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMTc2OTQyMDA4OTE1NDU1MTE2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gbWludXRpdCB0YWdhc2kiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9Im51bV9ob3Vyc19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI5MTUwNzk3OTQ0NjEwODIxODQ5Ij4iMSB0dW5kIHRhZ2FzaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ2NzI3MzIzOTU4NzU4NzU2OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHR1bmRpIHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0ibGFzdF9udW1fZGF5cyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzA2OTk5MjgwODE2NDMxODI2OCI+IlZpaW1hc2VkIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHDDpGV2YSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9Imxhc3RfbW9udGgiIG1zZ2lkPSIzOTU5MzQ2NzM5OTc5MDU1NDMyIj4iRWVsbWlzZWwga3V1bCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9sZGVyIiBtc2dpZD0iNTIxMTk3NTAyMjgxNTU1NDg0MCI+IlZhbmVtIjwvc3RyaW5nPgotICA8cGx1cmFscyBuYW1lPSJudW1fZGF5c19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NjEzNTg1MzQzOTgxMTU4MjAiPiJlaWxlIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDc5NTg2NDY2MTUzMzE0NjMzIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gcMOkZXZhIHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX3NlY29uZHMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIyNzI5NzQ1NTYwOTU0OTA1MTAyIj4iMSBzZWt1bmRpIHDDpHJhc3QiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEyNDE5MjYxMTY0NDM5NzQ2ODciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+IjEgbWludXRpIHDDpHJhc3QiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMzMzA3MTM5MzYzOTk0NDg3NDkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBtaW51dGkgcMOkcmFzdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2hvdXJzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNzE2NDM1MzM0MjQ3Nzc2OTk5OSI+IjEgdHVubmkgcMOkcmFzdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3MjkwNjc3MzUzNzI3Mzg5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gdHVubmkgcMOkcmFzdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2RheXMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NDEzMDg4NzQzMDA5ODM5NTE4Ij4iaG9tbWUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjUxMDk0NDkzNzUxMDA5NTMyNDciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBww6RldmEgcMOkcmFzdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9zZWNvbmRzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE4NDkwMzY4NDAyMDAwNjkxMTgiPiIxIHMgdGFnYXNpIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNjk5MTY5MzY2NjUwOTMwNDE1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2VrdW5kaXQgdGFnYXNpIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX21pbnV0ZXNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjM2MTQ5MDE0NzExMzg3MTU0NSI+IjEgbWludXQgdGFnYXNpIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NTExNjQ5Njg1OTcxNTA3MTAiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBtaW51dGl0IHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9ob3Vyc19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0Nzk2MjEyMDM5NzI0NzIyMTE2Ij4iMSB0dW5kIHRhZ2FzaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjg4OTk3MDc0NTc0ODUzODkwMSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHR1bmRpIHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9kYXlzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg0NjMxNjE3MTE0OTI2ODAzMDkiPiJlaWxlIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNDUzMzQyNjM5NjE2NDgxMTkxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gcMOkZXZhIHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9zZWNvbmRzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg0MjIyNTM3MDc5NTA2NjI5OSI+IjEgc2VrdW5kaSBww6RyYXN0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDk1ODgwMTA4ODI1ODA1MTA4Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX21pbnV0ZXMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NjI3ODYxNDk5MjgyODQ4NzgiPiIxIG1pbnV0aSBww6RyYXN0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MjE2MTEzMjkyNzA2NTY4NzI2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gbWludXRpIHDDpHJhc3QiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1faG91cnMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjc0NzA4MTE4MTI0MDQ1MjQ2Ij4iMSB0dW5uaSBww6RyYXN0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNzA1MzczNzY2Nzk4MDEzNDA2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gdHVubmkgcMOkcmFzdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9kYXlzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjE3ODU3NjI1NDM4NTczOTg1NSI+ImhvbW1lIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyOTczMDYyOTY4MDM4MzU1OTkxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gcMOkZXZhIHDDpHJhc3QiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfZGF0ZSIgbXNnaWQ9IjkwOTM5NDk3NTc3NTc0NDUxMTciPiJrdXVww6RldmFsIDx4bGlmZjpnIGlkPSJEQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfdGltZSIgbXNnaWQ9IjU1MDY4MzEyNDQyNjMwODM3OTMiPiJrZWxsIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfeWVhciIgbXNnaWQ9IjUwNDAzOTU2NDA3MTE4NjcxNzciPiJhYXN0YWwgPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRheSIgbXNnaWQ9IjgxNDQxOTU3NzYwNTgxMTk0MjQiPiJww6RldiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRheXMiIG1zZ2lkPSI0Nzc0NTQ3NjYxMDIxMzQ0NjAyIj4icMOkZXZhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91ciIgbXNnaWQ9IjIxMjY3NzE5MTY0MjYxODk0ODEiPiJ0dW5kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91cnMiIG1zZ2lkPSI4OTQ0MjQwMDUyNjY4NTI5OTMiPiJ0dW5kaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZSIgbXNnaWQ9IjkxNDg4Nzg2NTc3MDM3Njk4NjgiPiJtaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaW51dGVzIiBtc2dpZD0iNTY0NjAwMTAwNTgyNzAzNDUwOSI+Im1pbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlY29uZCIgbXNnaWQ9IjMxODQyMzU4MDgwMjE0NzgiPiJzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kcyIgbXNnaWQ9IjMxNjE1MTUzNDcyMTY1ODkyMzUiPiJzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiJuw6RkYWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiJuw6RkYWxhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InllYXIiIG1zZ2lkPSI0MDAxMTE4MjIxMDEzODkyMDc2Ij4iYWFzdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ5ZWFycyIgbXNnaWQ9IjY4ODE1Nzc3MTc5OTMyMTM1MjIiPiJhYXN0YXQiPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX3NlY29uZHMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2OTYyMDE1NTI4MzcyOTY5NDgxIj4iMSBzZWt1bmQiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjE4ODYxMDc3NjY1NzcxNjY3ODYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzZWt1bmRpdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fbWludXRlcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ5MTU0MTQwMDI1NDYwODU2MTciPiIxIG1pbnV0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMTY1MTg3MTY5MjI0OTA4Nzc1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gbWludXRpdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25faG91cnMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4OTE3NDY3NDkxMjQ4ODA5OTcyIj4iMSB0dW5kIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzODYzOTYyODU0MjQ2NzczOTMwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gdHVuZGkiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGl0bGUiIG1zZ2lkPSIzNTM0NTA5MTM1NDM4MzUzMDc3Ij4iUHJvYmxlZW0gdmlkZW9nYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X2ludmFsaWRfcHJvZ3Jlc3NpdmVfcGxheWJhY2siIG1zZ2lkPSIzMTg2NjcwMzM1OTM4NjcwNDQ0Ij4iU2VlIHZpZGVvIGVpIHNvYmkgdm9vZ2VzaXR1c2VrcyBzZWxsZXMgc2VhZG1lcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF91bmtub3duIiBtc2dpZD0iMzQ1MDQzOTE1NTE4NzgxMDA4NSI+IlZpZGVvdCBlaSBzYWEgZXNpdGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfYnV0dG9uIiBtc2dpZD0iMjgyMjIzODIxNTEwMDY3OTU5MiI+Ik9LIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpdmVfdGltZSIgbXNnaWQ9IjE4MTg1NTcxNzc4Mjk0MTE0MTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JTEkczwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vb24iIG1zZ2lkPSI3MjQ1MzUzNTI4ODE4NTg3OTA4Ij4ia2Vza3DDpGV2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iTm9vbiIgbXNnaWQ9IjMzNDIxMjc3NDUyMzAwMTMxMjciPiJLZXNrcMOkZXYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaWRuaWdodCIgbXNnaWQ9IjcxNjYyNTk1MDg4NTA0NTc1OTUiPiJrZXNrw7bDtiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Ik1pZG5pZ2h0IiBtc2dpZD0iNTYzMDgwNjkwNjg5Nzg5MjIwMSI+Iktlc2vDtsO2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9tbV9zcyIgbXNnaWQ9IjQ0MzE1NTU5NDM4Mjg3MTE0NzMiPiI8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTEkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTIkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfaF9tbV9zcyIgbXNnaWQ9IjE4NDYwNzE5OTc2MTY2NTQxMjQiPiI8eGxpZmY6ZyBpZD0iSE9VUlMiPiUxJGQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMiQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMyQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0QWxsIiBtc2dpZD0iNjg3NjUxODkyNTg0NDEyOTMzMSI+IlZhbGkga8O1aWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iTMO1aWthIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3BlZXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iS2xlZWJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJBc2VuZGEuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iS3VzdHV0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29wZWVyaSBVUkwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJWYWxpZ2UgdGVrc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGVrc3RpIHZhbGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+Ikxpc2Egc8O1bmFzdGlra3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Ikt1c3R1dGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnB1dE1ldGhvZCIgbXNnaWQ9IjE2NTM2MzAwNjIzMDQ1Njc4NzkiPiJTaXNlc3R1c21lZXRvZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+IlRla3N0aXRvaW1pbmd1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGl0bGUiIG1zZ2lkPSI1NTc2MjcyNDk2MzY1Njg0ODM0Ij4iVGFsbGV0dXNydXVtIHNhYWIgdMOkaXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RleHQiIG1zZ2lkPSI2NjQwNTA1ODE3NjE3NDE0MzcxIj4iTcO1bmVkIHPDvHN0ZWVtaWZ1bmt0c2lvb25pZCBlaSBwcnV1Z2kgdMO2w7Z0YWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX3J1bm5pbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODcxODMzNTEyMTA2MDc4NzkxNCI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gdMO2w7Z0YWIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiJQdXVkdXRhZ2UgbGlzYXRlYWJlIHNhYW1pc2VrcyB2w7VpIHJha2VuZHVzZSBwZWF0YW1pc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvayIgbXNnaWQ9IjU5NzAwNjA0MzA1NjI1MjQ5MTAiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiJUw7xoaXN0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InllcyIgbXNnaWQ9IjUzNjI5ODIzMDMzMzc5NjkzMTIiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vIiBtc2dpZD0iNTE0MTUzMTA0NDkzNTU0MTQ5NyI+IlTDvGhpc3RhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlhbG9nX2FsZXJ0X3RpdGxlIiBtc2dpZD0iMjA0OTY1ODcwODYwOTA0MzEwMyI+IlTDpGhlbGVwYW51Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9hZGluZyIgbXNnaWQ9Ijc5MzM2ODEyNjAyOTYwMjExODAiPiJMYWFkaW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vbiIgbXNnaWQ9IjE1NDQ2ODI3NTU1MTQ0OTQyOTgiPiJTRUVTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vZmYiIG1zZ2lkPSI2ODE1ODcwMzg2OTcyODA1ODMyIj4iVsOETEpBUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4iTMO1cGV0YWdlIHRvaW1pbmcgcmFrZW5kdXNlZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4iS2FzdXRhIHZhaWtpbWlzaSBzZWxsZWtzIHRvaW1pbmd1a3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiJUw7xoamVuZGFnZSB2YWlrZWFuZG1lZCB2YWxpa3V0ZXMgU8O8c3RlZW1pc2VhZGVkICZndDsgUmFrZW5kdXNlZCAmZ3Q7IEFsbGFsYWFkaXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiJUb2ltaW5ndSB2YWxpbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZVVzYkFjdGl2aXR5IiBtc2dpZD0iNjg5NDc0ODQxNjA3MzU4MzUwOSI+IlVTQi1zZWFkbWUgamFva3MgcmFrZW5kdXNlIHZhbGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9BcHBsaWNhdGlvbnMiIG1zZ2lkPSIyOTkxODE0MjczOTM2NTA0Njg5Ij4iw5xrc2tpIHJha2VuZHVzIGVpIHNhYSBzZWRhIHRvaW1pbmd1dCB0ZW9zdGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZXJyX3RpdGxlIiBtc2dpZD0iMTkwNTgwMDU2MDMxNzEzNzc1MiI+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZXJyX2FwcGxpY2F0aW9uIiBtc2dpZD0iOTMyNjI4NDg4MDEzMDkyNzc2Ij4iS2FoanVrcyBvbiByYWtlbmR1cyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IHBlYXR1bnVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiJLYWhqdWtzIG9uIHByb3RzZXNzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiBwZWF0dW51ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfdGl0bGUiIG1zZ2lkPSI0MzUxOTQ4NDgxNDU5MTM1NzA5Ij48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjE5MDQ0NzcxODkwNTcxOTkwNjYiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+IGVpIHZhc3RhLlxuXG5LYXMgc29vdml0ZSBzZWxsZSBzdWxnZWRhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+IlRlZ2V2dXMgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBlaSB2YXN0YS5cblxuS2FzIHNvb3ZpdGUgc2VsbGUgc3VsZ2VkYT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfYXBwbGljYXRpb25fcHJvY2VzcyIgbXNnaWQ9Ijg5NDE3NTc2MDczNDA0ODEwNTciPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IGVpIHZhc3RhLiBLYXMgc29vdml0ZSBzZWxsZSBzdWxnZWRhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+IlByb3RzZXNzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiBlaSB2YXN0YS5cblxuS2FzIHNvb3ZpdGUgc2VsbGUgc3VsZ2VkYT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmb3JjZV9jbG9zZSIgbXNnaWQ9IjgzNDYwNzIwOTQ1MjEyNjU2MDUiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlcG9ydCIgbXNnaWQ9IjQwNjAyMTgyNjA5ODQ3OTU3MDYiPiJUZWF0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndhaXQiIG1zZ2lkPSI3MTQ3MTE4MjE3MjI2MzE3NzMyIj4iT29kYWtlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4iTGVodCBlaSByZWFnZWVyaS5cblxuS2FzIHNvb3ZpdGUgc2VsbGUgc3VsZ2VkYT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE1NDc5OTc3ODA1MDY3MTM1ODEiPiJSYWtlbmR1cyBvbiDDvG1iZXIgc3V1bmF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19yZXBsYWNlIiBtc2dpZD0iNjIwMjQ5ODk0OTk3MDI4MTQxMiI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gb24gbsO8w7xkIGvDpGl2aXR1bnVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iQWxnc2VsdCBrw6Rpdml0YXRpIHJha2VuZHVzIDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3NjYWxlIiBtc2dpZD0iMzIwMjk1NTY2NzY3NTk0NDQ5OSI+Ik3DtcO1dGthdmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2hvdyIgbXNnaWQ9IjQwMTM4Nzg4NzY0ODY2NTU4OTIiPiJLdXZhIGFsYXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4iTHViYWdlIHNlZSB1dWVzdGkgdmFsaWt1dGVzIFPDvHN0ZWVtaXNlYWRlZCAmZ3Q7IFJha2VuZHVzZWQgJmd0OyBBbGxhbGFhZGl0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IlJha2VuZHVzIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gKHByb3RzZXNzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMiRzPC94bGlmZjpnPikgb24gcmlra3VudWQgaXNla2VodGVzdGF0dWQgU3RyaWN0TW9kZVwnaSBlZXNraXJqdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiJQcm90c2VzcyA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4gb24gcmlra3VudWQgaXNlasO1dXN0YXR1ZCBTdHJpY3RNb2RlXCdpIGVlc2tpcmp1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+IkFuZHJvaWQgdmlpYWtzZSDDvGxlIHV1ZW1hbGUgdmVyc2lvb25pbGUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfYXBrIiBtc2dpZD0iNzkwNDA0MjY4MjExMTUyNjE2OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uIHJha2VuZHVzZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LXN0IG9wdGltZWVyaW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IlJha2VuZHVzdGUga8OkaXZpdGFtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2NvbXBsZXRlIiBtc2dpZD0iMTQwNTk1NDc1NDExMjk5OTIyOSI+IkvDpGl2aXRhbWlzZSBsw7VwdWxldmlpbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uIiBtc2dpZD0iOTA4NzA2Mzk4NTc3NjYyNjE2NiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiUxJHM8L3hsaWZmOmc+IHTDtsO2dGFiIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbl9kZXRhaWwiIG1zZ2lkPSIxNzIxNjgxNzQxNjE3ODk4ODY1Ij4iUHV1ZHV0YWdlIHJha2VuZHVzZWxlIGzDvGxpdHVtaXNla3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGl0bGUiIG1zZ2lkPSI3MTUzMTY3MDg1NDAzMjk4MTY5Ij4iS2FzIGzDvGxpdHVkYSB0ZWlzZWxlIHJha2VuZHVzZWxlPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90ZXh0IiBtc2dpZD0iNzAyMjYzMTkyNDUzNDQwNjQwMyI+IlRlaW5lIHJha2VuZHVzIGp1YmEgdMO2w7Z0YWIgamEgc2VlIHR1bGViIHBlYXRhZGEsIGV0IHNhYWtzaXRlIHV1ZSBrw6Rpdml0YWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfYWN0aW9uIiBtc2dpZD0iNDkzMTI5MTcyMjM4NTY2MjgyIj4iVGFnYXNpIHJha2VuZHVzc2UgPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwODIwOTQyNzU1ODAzNTgwNDkiPiLDhHJnZSBrw6Rpdml0YWdlIHV1dCByYWtlbmR1c3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9hY3Rpb24iIG1zZ2lkPSI1NDcyNzU2OTI2OTQ1NDQwNzA2Ij4iS8OkaXZpdGFnZSByYWtlbmR1cyA8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IlBlYXRhZ2UgdmFuYSByYWtlbmR1cyBzYWx2ZXN0YW1hdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VuZFRleHQiIG1zZ2lkPSI1MjA5ODc0NTcxOTU5NDY5MTQyIj4iVmFsaWdlIHRla3N0aSBqYW9rcyB0b2ltaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+IkhlbGluYSBoZWxpdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpYyIgbXNnaWQ9IjU0MjE2NTExNTcxMzg2MjgxNzEiPiJNZWVkaXVtaSBoZWxpdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4iRXNpdGF0YWtzZSBCbHVldG9vdGhpIGthdWR1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+IlZhbGl0dWQgb24gaMOkw6RsZXR1IG3DpHJndWFubmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfY2FsbCIgbXNnaWQ9IjM5NDE2ODAwNDEyODI3ODg3MTEiPiJLw7VuZSBoZWxpdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ibHVldG9vdGhfY2FsbCIgbXNnaWQ9IjIwMDI4OTE5MjYzNTExNTE1MzQiPiJCbHVldG9vdGhpIGvDtW5lIGhlbGl0dWdldnVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IkFsYXJtaSBoZWxpdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIyNDIyMjY1NjU2NzQ0Mjc2NzE1Ij4iVGVhZGlzdHVzaGVsaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV91bmtub3duIiBtc2dpZD0iMTQwMDIxOTY2OTc3MDQ0NTkwMiI+IkhlbGl0dWdldnVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fYmx1ZXRvb3RoIiBtc2dpZD0iNjUzODg5NDE3NzI1NTk2NDM0MCI+IkJsdWV0b290aGkgbWFodCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX3JpbmdlciIgbXNnaWQ9IjMzMjYwMDM4NDcwMDYxNjI0OTYiPiJIZWxpbmEgdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiJLw7VuZSBoZWxpdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX21lZGlhIiBtc2dpZD0iNDIxNzMxMTcxOTY2NTE5NDIxNSI+Ik1lZWRpdW1pIGhlbGl0dWdldnVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbm90aWZpY2F0aW9uIiBtc2dpZD0iNzA0NDk4NjU0NjQ3NzI4MjI3NCI+IlRlYXRpc2UgaGVsaXR1Z2V2dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9kZWZhdWx0IiBtc2dpZD0iMzc4OTc1ODk4MDM1NzY5NjkzNiI+IlZhaWtlaGVsaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9kZWZhdWx0X3dpdGhfYWN0dWFsIiBtc2dpZD0iODEyOTU2MzQ4MDg5NTk5MDM3MiI+IlZhaWtlaGVsaW4gKDx4bGlmZjpnIGlkPSJBQ1RVQUxfUklOR1RPTkUiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3NpbGVudCIgbXNnaWQ9Ijc5Mzc2MzQzOTI0MDg5NzcwNjIiPiJQdXVkdWIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4iSGVsaW5hZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4iVHVuZG1hdHUgaGVsaW4iPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjY1NDEyMzk4NzQxODE2ODY5MyI+IldpRmktdsO1cmsgb24gc2FhZGF2YWwiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQxOTI0MjQ0ODkxNjgzOTczODYiPiJXaUZpLXbDtXJndWQgc2FhZGF2YWwiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlX2RldGFpbGVkIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTYzNDEwMTQ1MDM0MzI3NzM0NSI+IkF2YXR1ZCBXaUZpIHbDtXJrIG9uIHNhYWRhdmFsIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3OTE1ODk1MzIzNjQ0MjkyNzY4Ij4iQXZhdHVkIFdpRmktdsO1cmd1ZCBvbiBzYWFkYXZhbCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4iTG9naWdlIHNpc3NlIFdpRmktdsO1cmt1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV0d29ya19hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9Ijg0OTUxNTU1OTMzNTgwNTQ2NzYiPiJMb2dpZ2UgdsO1cmt1Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW5fZGV0YWlsZWQgKDgwMDAwODE5NDE0NDc5NzYxMTgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3dhdGNoZG9nX25ldHdvcmtfZGlzYWJsZWQiIG1zZ2lkPSI3OTA0MjE0MjMxNjUxNTQ2MzQ3Ij4iRWkgc2FhbnVkIFdpRmktZ2Egw7xoZW5kdXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiBvbiBoYWxiIEludGVybmV0aS3DvGhlbmR1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IldpRmkgRGlyZWN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4iS8OkaXZpdGFnZSBXaUZpIG90c2XDvGhlbmR1cy4gU2VlIGzDvGxpdGFiIHbDpGxqYSBXaUZpIGtsaWVuZGkvbGV2aWFsYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiJXaUZpIG90c2XDvGhlbmR1c2Uga8OkaXZpdGFtaW5lIGViYcO1bm5lc3R1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiJXaUZpIERpcmVjdCBvbiBzZWVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiJQdXV0ZWQgc2VhZGV0ZSBqYW9rcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiJOw7V1c3R1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVjbGluZSIgbXNnaWQ9IjIxMTIyMjU0NTE3MDYxMzc4OTQiPiJLZWVsZHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUiIG1zZ2lkPSIxMzE4OTc1MTg1MTEyMDcwNzM0Ij4iS3V0c2Ugb24gc2FhZGV0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3RvX2Nvbm5lY3RfdGl0bGUiIG1zZ2lkPSI0OTU4ODAzOTQ4NjU4NTMzNjM3Ij4iS3V0c2Ugw7xoZW5kYW1pc2VrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2Zyb21fbWVzc2FnZSIgbXNnaWQ9IjU3MDM4OTE3NDczMTk1MTc2OSI+IlNhYXRqYToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4iU2FhamE6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4iU2lzZXN0YWdlIG7DtXV0YXYgUElOLWtvb2Q6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfc2hvd19waW5fbWVzc2FnZSIgbXNnaWQ9Ijg1MzA1NjMzMjM4ODA5MjEwOTQiPiJQSU4ta29vZDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODAxMjk4MTI1Nzc0MjIzMjQ3NSI+IlRhaHZlbGFydnV0aSDDvGhlbmR1cyBXaUZpLWdhIGthdGtlc3RhdGFrc2UgYWp1dGlzZWx0LCBrdWkgc2VlIG9uIMO8aGVuZGF0dWQgc2VhZG1lZ2EgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+IlRlbGVmb25pIMO8aGVuZHVzIFdpRmktZ2Ega2F0a2VzdGF0YWtzZSBhanV0aXNlbHQsIGt1aSBzZWUgb24gw7xoZW5kYXR1ZCBzZWFkbWVnYSA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiJTaXNlc3RhIHTDpGhlbcOkcmsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiJTTVMtc8O1bnVtaXRlIHNhYXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyBzYWFkYWIgc3V1cmVsIGh1bGdhbCBTTVMtc8O1bnVtZWlkLiBLYXMgdGFoYXRlIGx1YmFkYSBzZWxsZWwgcmFrZW5kdXNlbCBrYSBlZGFzcGlkaSBzw7VudW1laWQgc2FhdGE/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfeWVzIiBtc2dpZD0iMzY2MzcyNTk5Mzg1NTgxNjgwNyI+Ikx1YmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9ubyIgbXNnaWQ9IjYyNTQzODU2MTM5NTUzNDk4MiI+IktlZWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IHNvb3ZpYiBzYWF0YSBzw7VudW1pIGFhZHJlc3NpbGUgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSIzNDkyMDI1NzE5ODY4MDc4NDU3Ij4iU2VlICI8Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiJ2w7VpYiBww7VoanVzdGFkYSBrdWx1c2lkIjwvZm9udD4iIHRlaWUgbW9iaWlsaWtvbnRvbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNTUyMzgyNjM0OTEwNTEyMzY4NyI+PGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4iU2VlIGxpc2FiIGt1bHVzaWQgdGVpZSBtb2JpaWxpa29udG9sZS4iPC9mb250Pjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbGxvdyIgbXNnaWQ9IjQ0NTg4Nzg2MzcxMTEwMjM0MTMiPiJTYWFkYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiJUw7xoaXN0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX2Nob2ljZSIgbXNnaWQ9IjUyODk1Mzg1OTIyNzIyMTgxMzYiPiJKw6R0YSBtaW51IHZhbGlrIG1lZWxkZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4iU2FhdGUgbXV1dGEgamFvdGlzZXMgU2VhZGVkwqAmZ3Q7wqBSYWtlbmR1c2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbHdheXNfYWxsb3ciIG1zZ2lkPSIzMjQxMTgxMTU0ODY5NDkzMzY4Ij4iTHViYSBhbGF0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbmV2ZXJfYWxsb3ciIG1zZ2lkPSI0NDY5OTI3NjU3NzQyNjk2NzMiPiLDhHJhIGx1YmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiJTSU0ta2FhcnQgZWVtYWxkYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4iTW9iaWlsc2lkZXbDtXJrIGVpIG9sZSBzYWFkYXZhbCwga3VuaSBzaXNlc3RhdGUga2VodGl2YSBTSU0ta2FhcmRpIGphIHRhYXNrw6Rpdml0YXRlIHNlYWRtZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiJWYWxtaXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4iU0lNLWthYXJ0IGxpc2F0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiJNb2JpaWxzaWRldsO1cmt1IHDDpMOkc2VtaXNla3MgdGFhc2vDpGl2aXRhZ2Ugc2VhZGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX3Jlc3RhcnRfYnV0dG9uIiBtc2dpZD0iNDcyMjQwNzg0MjgxNTIzMjM0NyI+IlRhYXNrw6Rpdml0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjgzNDkzNjI2MjMwNjg4MTkyOTUiPiJLZWxsYWFqYSBtw6TDpHJhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjU4Nzk0NTA2NTk0NTM3ODIyNzgiPiJLdXVww6RldmEgbcOkw6RyYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfc2V0IiBtc2dpZD0iNTc3NzA3NTYxNDMyMTA4Nzc1OCI+Ik3DpMOkcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfZG9uZSIgbXNnaWQ9IjI1MDc2ODM3NTE3NTkzMDg4MjgiPiJWYWxtaXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtc19uZXdfcGVybV9wcmVmaXgiIG1zZ2lkPSI4MjU3NzQwNzEwNzU0MzAxNDA3Ij48Zm9udCBzaXplPSIxMiIgZmdjb2xvcj0iI2ZmMzNiNWU1Ij4iVVVTOiAiPC9mb250Pjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybXNfZGVzY3JpcHRpb25fYXBwIiBtc2dpZD0iNTEzOTgzNjE0MzI5MzI5OTQxNyI+IlRlZW51c2VwYWtrdWphOiA8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vX3Blcm1pc3Npb25zIiBtc2dpZD0iNzI4MzM1NzcyODIxOTMzODExMiI+Ikx1YmUgcG9sZSB2YWphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiJzZWUgdsO1aWIgb2xsYSB0YXN1bGluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2FjdGl2aXR5X3RpdGxlIiBtc2dpZD0iNDQ2NTA1NTE1NzIwOTY0ODY0MSI+IlVTQi1tYXNzbcOkbHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiJVU0Igw7xoZW5kYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IlRlaWwgb24gYXJ2dXRpZ2Egw7xoZW5kdXMgVVNCIGthdWR1LiBQdXVkdXRhZ2UgYWxsb2xldmF0IG51cHB1LCBrdWkgc29vdml0ZSBmYWlsZSBhcnZ1dGkgamEgQW5kcm9pZGkgVVNCLXNhbHZlc3R1c3J1dW1pIHZhaGVsIGtvcGVlcmlkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA1MzUxMDAwNDQ2MDM3ODExIj4iT2xldGUgYXJ2dXRpZ2Egw7xoZW5kYXR1ZCBVU0Iga2F1ZHUuIFB1dWR1dGFnZSBhbGxvbGV2YXQgbnVwcHUsIGt1aSBzb292aXRlIGZhaWxlIGFydnV0aSBqYSBBbmRyb2lkaSBTRC1rYWFyZGkgdmFoZWwga29wZWVyaWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiJMw7xsaXRhIFVTQi1tw6RsdXNlYWRlIHNpc3NlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMDE3MDQ1MjE3MzY1NTQwNjU4Ij4iUHJvYmxlZW0gVVNCLXNhbHZlc3R1c3J1dW1pIGthc3V0YW1pc2VsIFVTQi1tw6RsdXNlYWRtZW5hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4iUHJvYmxlZW0gU0Qta2FhcmRpIGthc3V0YW1pc2VsIFVTQi1tw6RsdXNlYWRtZW5hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0Igw7xoZW5kYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4iUHV1ZHV0YWdlLCBldCBrb3BlZXJpZGEgZmFpbGUgYXJ2dXRpc3QvYXJ2dXRpc3NlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+IkzDvGxpdGEgVVNCLW3DpGx1c2VhZGUgdsOkbGphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2NTY4NTIwOTg1NTU2MjM4MjIiPiJVU0Itc2FsdmVzdHVzcnV1bWkgdsOkbGphbMO8bGl0YW1pc2VrcyBwdXVkdXRhZ2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF90aXRsZSIgbXNnaWQ9IjY2MDEyOTg1MTcwODc3NTg1MyI+IlVTQiBrYXN1dHVzZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IkVubmUgVVNCLXNhbHZlc3R1c3J1dW1pIHbDpGxqYWzDvGxpdGFtaXN0IGVyYWxkYWdlICh2w6RsanV0YWdlKSBBbmRyb2lkaSBVU0Itc2FsdmVzdHVzcnV1bSBhcnZ1dGlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4iRW5uZSBVU0Itc2FsdmVzdHVzcnV1bWkgdsOkbGphbMO8bGl0YW1pc3QgZWVtYWxkYWdlICh2w6RsanV0YWdlKSBBbmRyb2lkaSBTRC1rYWFydCBhcnZ1dGlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiJMw7xsaXRhIFVTQi1tw6RsdXNlYWRlIHbDpGxqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiJUZWtraXMgcHJvYmxlZW0gVVNCLXNhbHZlc3R1c3J1dW1pIHbDpGxqYWzDvGxpdGFtaXNlZ2EuIEtvbnRyb2xsaWdlLCBrYXMgb2xldGUgVVNCLWhvc3RpIGVlbWFsZGFudWQsIGphIHByb292aWdlIHNlZWrDpHJlbCB1dWVzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RpdGxlIiBtc2dpZD0iOTYzMDM5MDMzNDcwNDc4Njk3Ij4iTMO8bGl0YSBVU0ItbcOkbHVzZWFkZSBzaXNzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+Ikt1aSBsw7xsaXRhdGUgVVNCLXNhbHZlc3R1c3J1dW1pIHNpc3NlLCB2w7VpdmFkIG3DtW5lZCBrYXN1dGF0YXZhZCByYWtlbmR1c2VkIHBlYXR1ZGEgZWdhIHBydXVnaSBvbGxhIHNhYWRhdmFsIGVubmUgVVNCLXNhbHZlc3R1c3J1dW1pIHbDpGxqYWzDvGxpdGFtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiJVU0IgdG9pbWluZyBlYmHDtW5uZXN0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4iT0siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLDnGhlbmRhdHVkIG1lZWRpdW1pc2VhZG1lbmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiLDnGhlbmRhdHVkIGthYW1lcmFuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9jZF9pbnN0YWxsZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjc3NDcxMjgyNzg5MjA5MDc1NCI+IsOcaGVuZGF0dWQgaW5zdGFsbGlqYW5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4iw5xoZW5kYXR1ZCBVU0ItbGlzYXNlYWRtZWdhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IlB1dWR1dGFnZSB0ZWlzaSBVU0IgdmFsaWt1aWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiJWb3JtaW5kLiBVU0Itc2VhZGU/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IkthcyB2b3JtaW5kYWRhIFNELWthYXJ0PyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiJLw7VpayBVU0ItbcOkbHVzZWFkbWVsZSBzYWx2ZXN0YXR1ZCBmYWlsaWQga3VzdHV0YXRha3NlLiBTZWRhIHRvaW1pbmd1dCBlaSBzYWEgdGFnYXNpIHbDtXR0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4iS8O1aWsga2FhcmRpbCBvbGV2YWQgYW5kbWVkIGzDpGhldmFkIGthZHVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfYnV0dG9uX2Zvcm1hdCIgbXNnaWQ9IjQxMzEwNjQ1NjAxMjc0Nzg2OTUiPiJWb3JtaW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IlVTQi1zaWx1bWluZSDDvGhlbmRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjEwMTY2NTQ2Mjc2MjY0NzYxNDIiPiJQdXVkdXRhZ2UgVVNCLXNpbHVtaXNlIGtlZWxhbWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9pbnB1dF9tZXRob2QiIG1zZ2lkPSI0NjUzMzg3MzM2NzkxMjIyOTc4Ij4iVmFsaWdlIHNpc2VzdHVzbWVldG9kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSI5MDkxNjUyMTU3NzIyNDk1MTE2Ij4iU2VhZGlzdGEgc2lzZXN0dXNtZWV0b2RpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiJGw7zDvHNpbGluZSBrbGF2aWF0dXVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGFyZHdhcmUiIG1zZ2lkPSI3NTE3ODIxMDg2ODg4OTkwMjc4Ij4iUmlpc3R2YXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxNDA3MzY3MDE3MjYzMDMwNzczIj4iS2xhdmlhdHV1cmkgcGFpZ3V0dXNlIHZhbGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0NjU5MDc3MDA0NDkyNTcwNjMiPiJQdXVkdXRhZ2Uga2xhdmlhdHV1cmkgcGFpZ3V0dXNlIHZhbGltaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfYWxwaGFiZXQiIG1zZ2lkPSI1NDMzMjc1NDg1NDk5MDM5MTk5Ij4iIEFCQ0RFRkdISUpLTE1OT1BRUlPFoFrFvVRVVlfDlcOEw5bDnFhZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfbnVtZXJpY19hbHBoYWJldCIgbXNnaWQ9IjQwMzAxNzA1MjQ1OTUxMjM2MTAiPiIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlPFoFrFvVRVVlfDlcOEw5bDnFhZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FuZGlkYXRlc19zdHlsZSIgbXNnaWQ9IjQzMzM5MTMwODk2MzcwNjIyNTciPjx1PiJrYW5kaWRhYWRpZCI8L3U+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDk4MTYwMDUzNTE0Njg1NjAiPiJVU0ItbcOkbHVzZWFkbWUgZXR0ZXZhbG0uIC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDU3NjAzNDE4OTcwOTk0MDUwIj4iU0Qta2FhcmRpIGV0dGV2YWxtaXN0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4iVmlnYWRlIGtvbnRyb2xsaW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiJUw7xoaSBVU0ItbcOkbHVzZWFkZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IlTDvGhpIFNELWthYXJ0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzg0MDEyMTA2NzQyNzI2OTUwMCI+IlVTQi1zYWx2ZXN0dXNydXVtIG9uIHTDvGhpIHbDtWkgZWkgdG9ldGEgZmFpbGlzw7xzdGVlbWkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjQxMDY1NjQxNzg2OTIzNjA0Ij4iU0Qta2FhcnQgb24gdMO8aGkgdsO1aSBlaSB0b2V0YXRhIHNlbGxlIGZhaWxpc8O8c3RlZW1pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjA5MDA0Njc2OTUzMjcxMzU2MyI+IkthaGp1c3RhdHVkIFVTQi1tw6RsdXNlYWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0MTA3MjM5MDYwMTkxMDAxODkiPiJLYWhqdXN0YXR1ZCBTRC1rYWFydCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNzk1OTE3NTc4Mzk1MzMzMjgwIj4iVVNCLXNhbHZlc3R1c3J1dW0gb24ga2FoanVzdGF0dWQuIFByb292aWdlIHV1ZXN0aSB2b3JtaW5kYWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE3NTM4OTg1Njc1MjU1NjgyNTMiPiJTRC1rYWFydCBvbiBrYWhqdXN0YXR1ZC4gUHJvb3ZpZ2UgdXVlc3RpIHZvcm1pbmRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE2NjE2ODMwMzEzMzA5NTEwNzMiPiJVU0Itc2VhZGUgZWVtYWxkYXRpIG9vdGFtYXR1bHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODcyMTUyODgyNjA0NDA3ODM3Ij4iU0Qta2FhcnQgb24gb290YW1hdHVsdCBlZW1hbGRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDMyOTg0ODgxOTg2NTU5NDI0MSI+IkFuZG1la2FvIHbDpGx0aW1pc2VrcyBsYWh1dGFnZSBVU0ItbcOkbHVzZWFkZSBlbm5lIGVlbWFsZGFtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IkFuZG1la2FvIHbDpGx0aW1pc2VrcyBsYWh1dGFnZSBTRC1rYWFydCBlbm5lIGVlbWFsZGFtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5Njc5NzM4OTMyNzAzNjAyMzAiPiJVU0Itc2VhZG1lIGVlbWFsZGFtaW5lIG9odXR1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4iU0Qta2FhcmRpIGVlbWFsZGFtaW5lIG9uIG9odXR1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4iU2FhdGUgVVNCLW3DpGx1c2VhZG1lIG9odXR1bHQgZWVtYWxkYWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiJTRC1rYWFyZGkgc2FhdGUgb2h1dHVsdCBlZW1hbGRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiJVU0ItbcOkbHVzZWFkZSBlZW1hbGRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+IkVlbWFsZGF0dWQgU0Qta2FhcnQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iVVNCLW3DpGx1c2VhZGUgZWVtYWxkYXR1ZC4gU2lzZXN0YWdlIHV1cyBtZWVkaXVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzg3MDEyMDY1Mjk4MzY1OTY0MSI+IlNELWthYXJ0IG9uIGVlbWFsZGF0dWQuIFNpc2VzdGFnZSB1dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiJTb2JpdmF0IHRlZ2V2dXN0IGVpIGxlaXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9Ijg3ODczNTIwNzQzMjY3NDg4OTIiPiJ2w6Ryc2tlbmRhIGtvbXBvbmVudGlkZSBrYXN1dHVzc3RhdGlzdGlrYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSBrb21wb25lbmRpIGtvaHRhIGtvZ3V0dWQga2FzdXR1c3N0YXRpc3Rpa2F0LiBNaXR0ZSBrYXN1dGFkYSB0YXZhcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+IlNpc3Uga29wZWVyaW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzOTA2OTcxMjQyODgzMTc4MzEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdsO1dHRhIHNpc3Uga29wZWVyaW1pc2VrcyBhcHBpIHZhaWtla29udGVpbmVydGVlbnVzZS4gTWl0dGUga2FzdXRhZGEgdGF2YXJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSIxNjQyMDI0NDU1NzUwNDE0Njk0Ij4iTWVlZGlhdsOkbGp1bmRpIHRlZWtvbm5hIGtvb3N0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSI0OTMyODE4NzQ5NTQ3MjQ0MzQ2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtvb3N0YWRhIHRlZWtvbm5hIG1lZWRpYXbDpGxqdW5kaXN0IHRlaXN0ZXNzZSB2w6RsaXN0ZXNzZSBzZWFkbWV0ZXNzZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9Ijc1NjU1NTIyMzc5Nzc4MTUwNDciPiJKdXVyZGVww6TDpHMgdsO1dG1la2FpdHNlZ2EgdHVydmFsaXNlbGUgdGFsbGV0dXNydXVtaWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNTg2NjI0NTQ4NDMwMzI4NTc2MiI+Ikx1YmFiIHJha2VuZHVzZWwgaGFua2lkYSBqdXVyZGVww6TDpHN1IHbDtXRtZWthaXRzZWdhIHR1cnZhbGlzZWxlIHRhbGxldHVzcnV1bWlsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIxNzIxOTUxODQyMDc4MjgzODciPiJWw7V0bWVrYWl0c2Uga3V2YW1pc2UgamEgcGVpdG1pc2UganVodGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjMwNDM3MzIyOTA1MTg2MjkwNjEiPiJMdWJhYiByYWtlbmR1c2VsIHbDtXRtZWthaXRzZXQganVodGlkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiJTdXVtaSBqdWh0aW1pc2VrcyBwdXVkdXRhZ2Uga2FrcyBrb3JkYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdhZGdldF9ob3N0X2Vycm9yX2luZmxhdGluZyIgbXNnaWQ9IjQ4ODIwMDQzMTQ5MDY0NjYxNjIiPiJWaWRpbmF0IGVpIHNhYW51ZCBsaXNhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9nbyIgbXNnaWQ9IjgzMjA4NDU2NTE3MzczNjkwMjciPiJNaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9zZWFyY2giIG1zZ2lkPSI2NTgxMTAyNzE4MjI4MDc4MTEiPiJPdHNpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlbmQiIG1zZ2lkPSIyMzE2MTY2NTU2MzQ5MzE0NDI0Ij4iU2FhZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX25leHQiIG1zZ2lkPSIzMTM4ODQzOTA0MDA5ODEzODM0Ij4iSsOkcmdtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kb25lIiBtc2dpZD0iODk3MTUxNjExNzkxMDkzNDYwNSI+IlZhbG1pcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4iRWVsbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2RlZmF1bHQiIG1zZ2lkPSIyODQwOTIxODg1NTU4MDQ1NzIxIj4iVMOkaWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlhbF9udW1iZXJfdXNpbmciIG1zZ2lkPSI1Nzg5MTc2NDI1MTY3NTczNTg2Ij4iVmFsaSBudW1iZXJcbiBrYXN1dGFkZXMgbnVtYnJpdCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiJMb28ga29udGFrdFxubnVtYnJpZ2EgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiLDnGtzIHbDtWkgbWl0dSByYWtlbmR1c3QgdGFvdGxldmFkIGx1YmEgcMOkw6RzZWRhIG7DvMO8ZCBqYSBlZGFzcGlkaSB0ZWllIGtvbnRvbGUganV1cmRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9mb290ZXIiIG1zZ2lkPSIzMTI1MjExMzQzMzc5Mzc2NTYxIj4iS2FzIHNvb3ZpdGUgdGFvdGx1c2UgbHViYWRhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW50X3Blcm1pc3Npb25zX2hlYWRlcl90ZXh0IiBtc2dpZD0iNjg3NDQ5NzQwODIwMTgyNjcwOCI+Ikp1dXJkZXDDpMOkc3V0YW90bHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4iTHViYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4iS2VlbGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjQ4Njc1OTc5NTkyNjIzNzkwNyI+IlRhb3RsZXR1ZCBsdWJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWlzc2lvbl9yZXF1ZXN0X25vdGlmaWNhdGlvbl93aXRoX3N1YnRpdGxlIiBtc2dpZD0iODUzMDM5MzEzOTYzOTU2MDE4OSI+Ikx1YmEgb24gdGFvdGxldHVkXG5rb250b2xlIDx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRfbWV0aG9kX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjgzNTU3MTc5OTQ0OTkyNjQ5Ij4iU2lzZXN0dXNtZWV0b2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIzNjg3OTY5MTM4Mzc1MDkyNDIzIj4iU8O8bmtyb29uaW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI0MTQ4MTIwNzQyMDk2NDc0NjQxIj4iSnV1cmRlcMOkw6RzZXRhdnVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4iVGF1c3RhcGlsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+Ik11dXRrZSB0YXVzdGFwaWx0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik3DpHJndWFubmV0ZSBrdXVsYW1pc3RlZW51cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIG9uIGFrdGl2ZWVyaXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTi1pIGFrdGl2ZWVyaXMgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVsO1cmd1IGhhbGRhbWlzZWtzIHB1dWR1dGFnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dF9sb25nIiBtc2dpZD0iNjQwNzM1MTAwNjI0OTE3NDQ3MyI+IsOcaGVuZGF0dWQgc2VhbnNpZ2EgPHhsaWZmOmcgaWQ9IlNFU1NJT04iPiVzPC94bGlmZjpnPi4gVsO1cmd1IGhhbGRhbWlzZWtzIHB1dWR1dGFnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiLDnGhlbmRhbWluZSBhbGF0aSBzZWVzIFZQTi1pZ2Eg4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLDnGhlbmRhdHVkIGFsYXRpIHNlZXMgVlBOLWlnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9lcnJvciIgbXNnaWQ9IjYwMDkyNDk4MTQwMzQ3MDgxNzUiPiJBbGF0aSBzZWVzIFZQTi1pIHZpZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29uZmlnIiBtc2dpZD0iNjQxNTg5OTE1MDY3MTUzNzk3MCI+IlB1dWR1dGFnZSBzZWFkaXN0YW1pc2VrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVwbG9hZF9maWxlIiBtc2dpZD0iMjg5Nzk1NzE3MjM2NjczMDQxNiI+IlZhbGlnZSBmYWlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fZmlsZV9jaG9zZW4iIG1zZ2lkPSI2MzYzNjQ4NTYyMTcwNzU5NDY1Ij4iw5xodGVnaSBmYWlsaSBwb2xlIHZhbGl0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXNldCIgbXNnaWQ9IjI0NDgxNjgwODA5NjQyMDk5MDgiPiJMw6RodGVzdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdWJtaXQiIG1zZ2lkPSIxNjAyMzM1NTcyMDg5OTExOTQxIj4iU2FhZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXJfbW9kZV9kaXNhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNjQ3NjgyMTIwMDM4NjQzMTYiPiJBdXRvcmXFvmlpbSBsdWJhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgwMzUyMzA1Mzc1NjM1MDMyNjIiPiJBdXRvcmXFvmlpbWlzdCB2w6RsanVtaXNla3MgcHV1ZHV0YWdlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNDY2OTQyMzQzOTgyMDI2MDEiPiJKYWdhbWluZSB2w7VpIHTDtsO2cHVua3Qgb24gYWt0aWl2bmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjY4NTcwMzE3NjAxMDMwNjI5ODIiPiJTZWFkaXN0YW1pc2VrcyBwdXVkdXRhZ2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFja19idXR0b25fbGFiZWwiIG1zZ2lkPSIyMzAwNDcwMDA0NTAzMzQzNDM5Ij4iVGFnYXNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV4dF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMDgwNTU1MTA0Njc3OTkyNDA4Ij4iSsOkcmdtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2tpcF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMjc1MzYyMjk5NDcxNjMxODE5Ij4iSsOkdGEgdmFoZWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0ODkwODk0MjY3NDU0ODY3Mjc2Ij4iS8O1cmdlIG1vYmlpbHNlIGFuZG1lc2lkZSBrYXN1dHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjMzNDA4MjIyMjg1OTkzMzc3NDMiPiJNb2JpaWxzZSBhbmRtZXNpZGUga2FzdXRhbWlzZSBrb2h0YSBsaXNhdGVhYmUgc2FhbWlzZWtzIHB1dWR1dGFnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjI2OTU0MTg5NzcyOTc4MTMzMiI+Ik1vYmlpbGkgYW5kbWVtYWh1cGlpcmFuZyDDvGxldGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI1NDQzNDU3MzIxMzU0OTA3MTgxIj4iTW9iaWlsc2UgYW5kbWVzaWRlIGthc3V0YW1pc2Uga29odGEgbGlzYXRlYWJlIHNhYW1pc2VrcyBwdXVkdXRhZ2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fbWF0Y2hlcyIgbXNnaWQ9IjgxMjk0MjE5MDg5MTU4NDA3MzciPiJWYXN0ZWQgcHV1ZHV2YWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmaW5kX29uX3BhZ2UiIG1zZ2lkPSIxOTQ2Nzk5MjMzODIyODIwMzg0Ij4iT3RzaWdlIGxlaGVsdCI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0ibWF0Y2hlc19mb3VuZCI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxNjcxNDcwODExMzY1Nzk0MzkiPiIxIHZhc3RlIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NjQxODcyNzk3MDY3NjA5MTc3Ij4iPHhsaWZmOmcgaWQ9IklOREVYIj4lZDwveGxpZmY6Zz4vPHhsaWZmOmcgaWQ9IlRPVEFMIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbW9kZV9kb25lIiBtc2dpZD0iNzIxNzU4MTY0MDQ2MTkyMjI4OSI+IlZhbG1pcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkyMzgxMDQ0ODUwNzYxMjc0NiI+IlVTQi1zYWx2ZXN0dXNydXVtaSBlZW1hbGRhbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMyNzg5NDk5ODQwOTUzNzE5MCI+IlNELWthYXJkaSBlZW1hbGRhbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJVU0Itc2FsdmVzdHVzcnV1bWkga3VzdHV0YW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1OTY5ODg4NzU1MDcwNDMwNDIiPiJTRC1rYWFyZGkga3VzdHV0YW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiJVU0ItbcOkbHVzZWFkbWUgdMO8aGplbmRhbWluZSBlYmHDtW5uZXN0dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IlNELWthYXJkaSBrdXN0dXRhbWluZSBlYmHDtW5uZXN0dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4iU0Qta2FhcnQgZWVtYWxkYXRpIGVubmUgbGFodXRhbWlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiJVU0ItbcOkbHVzZWFkZXQga29udHJvbGxpdGFrc2UgcHJhZWd1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMzNDc2MjUwMzkwNDgyNzQ4MSI+IlNELWthYXJ0aSBrb250cm9sbGl0YWtzZSBwcmFlZ3UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcmVtb3ZlZCIgbXNnaWQ9IjcwMDE1MjY5MDUwNTc5NTIwOTciPiJTRC1rYWFydCBvbiBlZW1hbGRhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4iUHJhZWd1IGthc3V0YWIgVVNCLW3DpGx1c2VhZGV0IGFydnV0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzA2MTMwNTY4MTMzNTQwNDM1Ij4iUHJhZWd1IGthc3V0YWIgU0Qta2FhcnRpIGFydnV0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV91bmtub3duX3N0YXRlIiBtc2dpZD0iNzI5MTkyNzgyMTk3MjkwMzg1Ij4iVsOkbGluZSBtZWVkaXVtIG9uIHR1bmRtYXR1cyBvbGVrdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhcmUiIG1zZ2lkPSIxNzc4Njg2NjE4MjMwMDExOTY0Ij4iSmFnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmQiIG1zZ2lkPSI0ODA4MjcwOTAwMzIyOTg1OTYwIj4iT3RzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndlYnNlYXJjaCIgbXNnaWQ9IjQzMzcxNTc5Nzc0MDAyMTE1ODkiPiJWZWViaW90c2luZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmRfbmV4dCIgbXNnaWQ9IjU3NDIxMjQ2MTg5NDIxOTM5NzgiPiJMZWlhIGrDpHJnbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmRfcHJldmlvdXMiIG1zZ2lkPSIyMTk2NzIzNjY5Mzg4MzYwNTA2Ij4iTGVpYSBlZWxtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaWNrZXIiIG1zZ2lkPSI1NjIyNjgzOTEyNjE2NDk2MTcyIj4iQXN1a29oYXDDpHJpbmcga2FzdXRhamFsdCA8eGxpZmY6ZyBpZD0iTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaXRsZSIgbXNnaWQ9IjU0NDY4NTg3MTcxNTc0MTY4MzkiPiJBc3Vrb2hhcMOkcmluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmTWVzc2FnZSIgbXNnaWQ9IjEzNzQ3MTgwMjMyMjQwMDA3MDIiPiJUYW90bGVqYTogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+ICg8eGxpZmY6ZyBpZD0iU0VSVklDRSI+JTIkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZZZXMiIG1zZ2lkPSIyMzQ2NTY2MDcyODY3MjEzNTYzIj4iSmFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiJFaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlcyIgbXNnaWQ9IjUyOTYzMjE4NTA2NjI3NDY4OTAiPiJLdXN0dXRhbWlzdGUgcGlpcmFydiBvbiDDvGxldGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+Ikt1c3R1dGF0YXZhZCDDvGtzdXNlZCBrb250b2wgPHhsaWZmOmcgaWQ9IkFDQ09VTlRfTkFNRSI+JTMkczwveGxpZmY6Zz4gc8O8bmtyb29uaW1pc3TDvMO8YmkgPHhsaWZmOmcgaWQ9IlRZUEVfT0ZfU1lOQyI+JTIkczwveGxpZmY6Zz4gamFva3M6IDx4bGlmZjpnIGlkPSJOVU1CRVJfT0ZfREVMRVRFRF9JVEVNUyI+JTEkZDwveGxpZmY6Zz4uIE1pZGEgc29vdml0ZSB0ZWhhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN5bmNfcmVhbGx5X2RlbGV0ZSIgbXNnaWQ9IjI1NzI2MDAxMDMxMjI1OTYyNDMiPiJLdXN0dXRhIMO8a3N1c2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY191bmRvX2RlbGV0ZXMiIG1zZ2lkPSIyOTQxMzE3MzYwNjAwMzM4NjAyIj4iVsO1dGtlIGt1c3R1dGFtaXNlZCB0YWdhc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX2RvX25vdGhpbmciIG1zZ2lkPSIzNzQzNzY0NzQwNDMwODIxODQ1Ij4iw4RyYSB0ZWUgcHJhZWd1IG1pZGFnaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9hY2NvdW50X2xhYmVsIiBtc2dpZD0iNTY1NTIwMzA4OTc0NjQyMzkyNyI+IktvbnRvIHZhbGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfbGFiZWwiIG1zZ2lkPSIyOTM1MjY3MzQ0ODQ5OTkzNTUzIj4iS29udG8gbGlzYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGRfYWNjb3VudF9idXR0b25fbGFiZWwiIG1zZ2lkPSIzNjExOTgyODk0ODUzNDM1ODc0Ij4iTGlzYSBrb250byI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjI0MTIwNzIyNzI4MzIyODQzMTMiPiJTdXVyZW5kYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2RlY3JlbWVudF9idXR0b24iIG1zZ2lkPSI0NzYwNTA3NzgzODY3NzkwNjciPiJWw6RoZW5kYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfbW9kZSIgbXNnaWQ9IjMwNzMxMDEwNjc0NDE2Mzg0MjgiPiI8eGxpZmY6ZyBpZD0iVkFMVUUiPiVzPC94bGlmZjpnPiBwdXVkdXRhZ2UgamEgaG9pZGtlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9hY3Rpb24iIG1zZ2lkPSI5MTAxNDczMDQ1ODkxODM1NDkwIj4iU3V1cmVuZGFtaXNla3MgbG9oaXN0YWdlIMO8bGVzLCB2w6RoZW5kYW1pc2VrcyBhbGxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iODg2NTg4NTExNDAyODYxNDMyMSI+Ik1pbnV0aXRlIHN1dXJlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iNjI0NjgzNDkzNzA4MDY4NDc5MSI+Ik1pbnV0aXRlIHbDpGhlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjM2NTIwNTYwNTU4MTAyMjMxMzkiPiJUdW5kaWRlIHN1dXJlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjEzNzc0Nzk4NjM0MjkyMTQ3OTIiPiJUdW5kaWRlIHbDpGhlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uIiBtc2dpZD0iNDE0NzU5MDY5NjE1MTIzMDg2MyI+IlBNLWkgc2VhZG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfc2V0X2FtX2J1dHRvbiIgbXNnaWQ9IjgzMDIxNDAzNTM1Mzk0ODY3NTIiPiJBTS1pIHNlYWRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X21vbnRoX2J1dHRvbiIgbXNnaWQ9IjUzNjk5OTg0NzkwNjc5MzQxMTAiPiJLdXUgc3V1cmVuZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X21vbnRoX2J1dHRvbiIgbXNnaWQ9IjE4MzI2OTg5OTU1NDE3MjYwMTkiPiJLdXUgdsOkaGVuZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI3MTMwNDY1NDEyMzA4MTczOTAzIj4iUMOkZXZhIHN1dXJlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNDEzMTg4MTUyMTgxODc1MDAzMSI+IlDDpGV2YSB2w6RoZW5kYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI2MzE4Njk3Mzg0MzEwODA4ODk5Ij4iQWFzdGEgc3V1cmVuZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNDQ4MjAyMTgxMzQ5MTEyMTcxNyI+IkFhc3RhIHbDpGhlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4iVMO8aGlzdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4iS3VzdHV0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4iVmFsbWlzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4iUmXFvmlpbWkgbXV1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJUw7VzdHVrbGFodiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IlNpc2VzdHVza2xhaHYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJWYWxpZ2UgcmFrZW5kdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJKYWdhOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJKYWdhIHJha2VuZHVzZWdhIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iTGliaXN0YW1pc3BpZGUuIFB1dWR1dGFnZSBqYSBob2lka2UgYWxsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJMb2hpc3RhZ2Ugw7xsZXM6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJMb2hpc3RhZ2UgYWxsYTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkxvaGlzdGFnZSB2YXNha3VsZTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJMb2hpc3RhZ2UgcGFyZW1hbGU6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Ikx1a3UgYXZhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYWFtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IkjDpMOkbGV0dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJIZWxpIG9uIHNlZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Ik90c2luZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkF2YW1pc2VrcyB0w7VtbWFrZSBzw7VybWVnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUGFyb29saWRlIGt1dWxhbWlzZWtzIMO8aGVuZGFnZSBwZWFrb21wbGVrdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJQdW5rdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MjkzNjAwNDk2NjAxNDkwMjE2Ij4iTGlpZ3UgYXZhbGVoZWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl91cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyMzc0OTY1NjI5NTIxNTI1ODkiPiJMaWlndSDDvGxlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tZW51X292ZXJmbG93X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjI5NTY1OTAzNzUwOTAwODQ1MyI+IlJvaGtlbSB2YWxpa3VpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI3OTY1OTg0MzYwOTAzNjkzOTAzIj4iJTEkcywgJTIkcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9zdWJ0aXRsZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI2OTg1NTQ2NTMwNDcxNzgwNzI3Ij4iJTEkcywgJTIkcywgJTMkcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfaW50ZXJuYWwiIG1zZ2lkPSI0ODkxOTE2ODMzNjU3OTI5MjYzIj4iU2lzZW1pbmUgc2FsdmVzdHVzcnV1bSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2Vfc2RfY2FyZCIgbXNnaWQ9IjMyODI5NDg4NjEzNzgyODY3NDUiPiJTRC1rYWFydCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IlVTQi1tw6RsdXNlYWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0cmFjdF9lZGl0X21lbnVfYnV0dG9uIiBtc2dpZD0iODk0MDQ3ODczMDQ5NjYxMDEzNyI+Ik11dWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTk1NTYzODg2MjEyMjIzMjM0MiI+IkFuZG1ldGUga2FzdXRhbWlzZSBob2lhdHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX2JvZHkiIG1zZ2lkPSIyODE0NjczNTUxNDcxOTY5OTU0Ij4iS2FzdXR1c2Uvc8OkdGV0ZSB2YWF0LiBwdXVkdXRhZ2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF90aXRsZSIgbXNnaWQ9IjcwOTMzMzQ0MTk1MTg3MDY2ODYiPiIyR+KAkzNHLWFuZG1lc2lkZSBvbiBrZWVsYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfdGl0bGUiIG1zZ2lkPSI3NjM2NDg5NDM2ODE5NDcwNzYxIj4iNEctYW5kbWVzaWRlIG9uIGtlZWxhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfdGl0bGUiIG1zZ2lkPSI3ODY5NDAyNTE5MzkxNjMxODg0Ij4iTW9iaWlsbmUgYW5kbWVzaWRlIG9uIGtlZWxhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3RpdGxlIiBtc2dpZD0iODk5MjE1NDczNjQ0MTI4NDg2NSI+IldpRmktYW5kbWVkIG9uIGtlZWxhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+Ikx1YmFtaXNla3MgcHV1ZHV0YWdlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiIyRy0zRyBhbmRtZW1haHVwaWlyYW5nIMO8bGV0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiI0RyBhbmRtZW1haHVwaWlyYW5nIMO8bGV0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIyNzkyNDA1NzIxNjU0MTIxNjgiPiJNb2JpaWxuZSBhbmRtZW1haHVwaWlyYW5nIMO8bGV0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IldpRmktYW5kbWV0ZSBwaWlyIG9uIMO8bGV0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfc25vb3plZF9ib2R5IiBtc2dpZD0iNzAzNTQ5MDI3ODI5ODQ0MTc2NyI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lczwveGxpZmY6Zz4gw7xsZSBtw6TDpHJhdHVkIHBpaXJtw6TDpHJhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF90aXRsZSIgbXNnaWQ9IjU5NjUxNTczNjEwMzYzMjE5MTQiPiJUYXVzdGFuZG1lZCBvbiBwaWlyYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+IlBpaXJhbmd1IGVlbWFsZGFtaXNla3MgcHV1ZHV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNzbF9jZXJ0aWZpY2F0ZSIgbXNnaWQ9IjY1MTAwNDA0ODYwNDkyMzc2MzkiPiJUdXJ2YXNlcnRpZmlrYWF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlX2lzX3ZhbGlkIiBtc2dpZD0iNjgyNTI2MzI1MDc3NDU2OTM3MyI+IlNlZSBzZXJ0aWZpa2FhdCBvbiBrZWh0aXYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX3RvIiBtc2dpZD0iNDU0MjM5NDgwMjc0OTIxMDMyIj4iVsOkbGphc3RhdHVkIHN1Ympla3RpbGU6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tbW9uX25hbWUiIG1zZ2lkPSIyMjMzMjA5Mjk5NDM0MTcyNjQ2Ij4iUMOkcmlzbmltaToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvcmdfbmFtZSIgbXNnaWQ9IjY5NzM1NjExOTA3NjIwODUyMzYiPiJPcmdhbmlzYXRzaW9vbjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvcmdfdW5pdCIgbXNnaWQ9IjcyNjU5ODE4OTA0MjIwNzAzODMiPiJPcmdhbmlzYXRzaW9vbmnDvGtzdXM6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX2J5IiBtc2dpZD0iMjY0NzU4NDk4ODA1NzQ4MTU2NiI+IlbDpGxqYXN0YWphOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZhbGlkaXR5X3BlcmlvZCIgbXNnaWQ9Ijg4MTg4ODYxMzc1NDU5ODMxMTAiPiJLZWh0aXZ1czoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfb24iIG1zZ2lkPSI1ODk1MDE3NDA0MzYxMzk3MjMyIj4iVsOkbGphc3RhbWlza3V1cMOkZXY6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXhwaXJlc19vbiIgbXNnaWQ9IjM2NzYyNDI5NDk5MTU5NTk4MjEiPiJBZWd1bWlza3V1cMOkZXY6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VyaWFsX251bWJlciIgbXNnaWQ9Ijc1ODgxNDA2NzY2MDg2MjQ5MyI+IlNlZXJpYW51bWJlcjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludHMiIG1zZ2lkPSI0NTE2MDE5NjE5ODUwNzYzMDQ5Ij4iU8O1cm1lasOkbGplZDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGEyNTZfZmluZ2VycHJpbnQiIG1zZ2lkPSI0MzkxMjcxMjg2NDc3Mjc5MjYzIj4iU0hBLTI1NiBzw7VybWVqw6RsZzoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IlNIQS0xIHPDtXJtZWrDpGxnOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19zZWVfYWxsIiBtc2dpZD0iNDI5MjU2OTM4Mzk3NjYzNjIwMCI+Ikt1dmEga8O1aWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI0NzEwMDEzODY0OTc0MDQwNjE1Ij4iVGVnZXZ1c2UgdmFsaW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiJKYWdhbWluZSByYWtlbmR1c2VnYToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2RldmljZV9sb2NrZWQiIG1zZ2lkPSIzMDkyNzAzNDQ4NjkwNjY5NzY4Ij4iU2VhZGUgbHVrdXN0YXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsaXN0X2RlbGltZXRlciIgbXNnaWQ9IjM5NzUxMTc1NzIxODU0OTQxNTIiPiIsICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbmRpbmciIG1zZ2lkPSIzMjQ1NjUzNjgxMDA4MjE4MDMwIj4iU2FhdG1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoQnJvd3NlckRlZmF1bHQiIG1zZ2lkPSIyMDU3OTUxOTQ3Mjk3NjE0NzI1Ij4iS2FzIGvDpGl2aXRhZGEgYnJhdXNlcj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJTZXR1cENhbGxEZWZhdWx0IiBtc2dpZD0iNTgzNDk0ODQ2OTI1Mzc1ODU3NSI+IkthcyB2YXN0YXRhIGvDtW5lbGU/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX2Fsd2F5cyIgbXNnaWQ9IjgwMTc3NzA3NDc4MDE0OTQ5MzMiPiJBbGF0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9vbmNlIiBtc2dpZD0iMjQwNDY0NDc5NzE0OTE3Mzc1OCI+IkFpbnVsdCDDvGtzIGtvcmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MTcwNTM4OTgxNjcxMjc0NzEiPiJUYWh2ZWxhcnZ1dGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjM5MjkxMjczNDIwMTQwMTIzIj4iVGVsZWZvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9oZWFkcGhvbmVzIiBtc2dpZD0iODExOTk3MTg0MzgwMzQzOTExMCI+IkvDtXJ2YWtsYXBpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9kb2NrX3NwZWFrZXJzIiBtc2dpZD0iNjI0MDYwMjk4MjI3NjU5MTg2NCI+IkRva2kga8O1bGFyaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X21lZGlhX3JvdXRlX25hbWVfaGRtaSIgbXNnaWQ9IjI0NTA5NzAzOTkwMjM0NzgwNTUiPiJIRE1JIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlPDvHN0ZWVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGgtaGVsaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iSnVodG1ldGEgZWtyYWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IlZhbG1pcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik1lZWRpYXbDpGxqdW5kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNrYW5lZXJpbmcgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iw5xoZW5kYW4uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IlNhYWRhdmFsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI2NzM5ODk5OTYyNjgxODg2NDAxIj4iRWkgb2xlIHNhYWRhdmFsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiJLYXN1dHVzZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfYnVpbHRfaW5fZGlzcGxheV9uYW1lIiBtc2dpZD0iMjU4MzEzNDI5NDI5MjU2Mzk0MSI+IlNpc3NlZWhpdGF0dWQgZWtyYWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+IkhETUktZWtyYWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IsOcbGVrYXRlIG5yIC48eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCB0dXJ2YWxpbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+Ikp1aHRtZXRhIGVrcmFhbmnDvGhlbmR1cyBvbiBsb29kdWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iRWtyYWFuIG9uIG7DpGhhIHRlaXNlcyBzZWFkbWVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkthdGtlc3RhIMO8aGVuZHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJIw6RkYWFiaWvDtW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iVW51c3Rhc2luIG11c3RyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4iVmFsZSBtdXN0ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiJWYWxlIHBhcm9vbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJWYWxlIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiJQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4iSm9vbmlzdGFnZSBvbWEgbXVzdGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iU2lzZXN0YWdlIFNJTS1pIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJTaXNlc3RhZ2UgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4iU2lzZXN0YWdlIHBhcm9vbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTSBvbiBuw7zDvGQga2VlbGF0dWQuIErDpHRrYW1pc2VrcyBzaXNlc3RhZ2UgUFVLLWtvb2QuIMOca3Npa2FzanUga8O8c2lnZSBvcGVyYWF0b3JpbHQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IlNpc2VzdGFnZSBzb292aXR1ZCBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJLaW5uaXRhZ2Ugc29vdml0dWQgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTS1rYWFyZGkgYXZhbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJWYWxlIFBJTi1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlNpc2VzdGFnZSA04oCTOC1udW1icmlsaW5lIFBJTi1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSy1rb29kaSBwaWtrdXMgcGVhYiBvbGVtYSB2w6RoZW1hbHQgOCBudW1icml0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlNpc2VzdGFnZSB1dWVzdGkgw7VpZ2UgUFVLLWtvb2QuIEtvcmR1dmthdHNldGUga29ycmFsIGtlZWxhdGFrc2UgU0lNIGrDpMOkZGF2YWx0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ta29vZGlkIGVpIG9sZSB2YXN0YXZ1c2VzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iTGlpZ2EgcGFsanUgbXVzdHJpa2F0c2VpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJBdmFtaXNla3MgbG9naWdlIHNpc3NlIG9tYSBHb29nbGVcJ2kga29udG9nYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+Ikthc3V0YWphbmltaSAoZS1wb3N0KSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4iUGFyb29sIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiJMb2dpIHNpc3NlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiJWYWxlIGthc3V0YWphbmltaSB2w7VpIHBhcm9vbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4iS2FzIHVudXN0YXNpdGUga2FzdXRhamFuaW1lIHbDtWkgcGFyb29saT9cbkvDvGxhc3RhZ2UgYWFkcmVzc2kgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IktvbnRvIGtvbnRyb2xsaW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJPbGV0ZSBQSU4ta29vZGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBzaXNlc3RhbnVkLlxuXG5Qcm9vdmlnZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QgdXVlc3RpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJPbGV0ZSBwYXJvb2xpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgc2lzZXN0YW51ZC4gXG5cblByb292aWdlIHV1ZXN0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ikpvb25pc3Rhc2l0ZSBvbWEgYXZhbWlzbXVzdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkuXG5cblByb292aWdlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdCB1dWVzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4iT2xldGUgw7xyaXRhbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHRhaHZlbGFydnV0aXQgdmFsZXN0aSBhdmFkYS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBsw6RodGVzdGF0YWtzZSB0YWh2ZWxhcnZ1dGkgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlIGphIGvDtWlrIGthc3V0YWphYW5kbWVkIGzDpGhldmFkIGthb3RzaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4iT2xldGUgw7xyaXRhbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHRlbGVmb25pIHZhbGVzdGkgYXZhZGEuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgbMOkaHRlc3RhdGFrc2UgdGVsZWZvbiB0ZWhhc2UgdmFpa2VzZWFkZXRlbGUgamEga8O1aWsga2FzdXRhamFhbmRtZWQgbMOkaGV2YWQga2FvdHNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4iT2xldGUgcMO8w7xkbnVkIHRhaHZlbGFydnV0aXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgYXZhZGEuIFRhaHZlbGFydnV0aSBsw6RodGVzdGF0YWtzZSBuw7zDvGQgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+Ik9sZXRlIHDDvMO8ZG51ZCB0ZWxlZm9uaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBhdmFkYS4gVGVsZWZvbiBsw6RodGVzdGF0YWtzZSBuw7zDvGQgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJKb29uaXN0YXNpdGUgb21hIGF2YW1pc211c3RyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpLiBQw6RyYXN0IHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IHBhbHV0YWtzZSB0ZWlsIHRhaHZlbGFydnV0aSBhdmFkYSBtZWlsaWtvbnRvZ2EuXG5cbiBQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSm9vbmlzdGFzaXRlIG9tYSBhdmFtaXNtdXN0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBwYWx1dGFrc2UgdGVpbCB0ZWxlZm9uIGF2YWRhIG1laWxpa29udG9nYS5cblxuIFByb292aWdlIHV1ZXN0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iRWVtYWxkYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhZmVfbWVkaWFfdm9sdW1lX3dhcm5pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzI0MTYxOTM5NDc1NDc4MDY2Ij4iS2FzIHN1dXJlbmRhZGEgaGVsaXR1Z2V2dXN0IMO8bGUgc29vdml0YXR1ZCB0YXNlbWU/XG5QaWthYWphbGluZSBzdXVyZSBoZWxpdHVnZXZ1c2VnYSBtdXVzaWthIGt1dWxhbWluZSB2w7VpYiBrYWhqdXN0YWRhIGt1dWxtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbnRpbnVlX3RvX2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTYyNjQyNzM3MjMxNjA3MDI1OCI+IkjDtWxidXN0dXNlIGx1YmFtaXNla3MgaG9pZGtlIGthaHQgc8O1cm1lIGFsbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2VuYWJsZWQiIG1zZ2lkPSIxMzgxOTcyMDQ4NTY0NTQ3Njg1Ij4iSMO1bGJ1c3R1cyBvbiBsdWJhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hY2Nlc3NpYmlsaXR5X2NhbmNlbGVkIiBtc2dpZD0iMzgzMzkyMzI1Nzk2NjYzNTY3MyI+IkjDtWxidXN0dXMgb24gdMO8aGlzdGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJQcmFlZ3VuZSBrYXN1dGFqYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiJPbWFuaWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IlZpZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbm9fcmVzdHJpY3RlZF9hY2NvdW50cyIgbXNnaWQ9IjU3Mzk0NjMyNDk2NzM3Mjc3MzYiPiJTZWUgcmFrZW5kdXMgZWkgdG9ldGEgcGlpcmF0dWQgcHJvZmlpbGlkZSBrb250b3NpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub3RfZm91bmQiIG1zZ2lkPSIzNDI5MTQxODUzNDk4OTI3Mzc5Ij4iU2VsbGUgdG9pbWluZ3Uga8Okc2l0bGVtaXNla3MgZWkgbGVpdHVkIMO8aHRlZ2kgcmFrZW5kdXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IlTDvGhpc3RhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMCIgbXNnaWQ9Ijc4NzU0Mjc0ODk0MjA4MjE3OTMiPiJJU08gQTAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExIiBtc2dpZD0iMzc2MDczNDQ5OTA1MDg3NTM1NiI+IklTTyBBMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTIiIG1zZ2lkPSI1OTczMjY2Mzc4MDIwMTQ0MzgyIj4iSVNPIEEyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMyIgbXNnaWQ9IjEzNzM0MDcxMDU2ODczMDA4ODQiPiJJU08gQTMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E0IiBtc2dpZD0iNjY4OTc3MjgwNzk4MjU5NzI1NCI+IklTTyBBNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTUiIG1zZ2lkPSI1MzUzNTQ5NjUyMDE1NzQxMDQwIj4iSVNPIEE1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNiIgbXNnaWQ9Ijg1ODUwMzgwNDg2NzQ5MTE5MDciPiJJU08gQTYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E3IiBtc2dpZD0iNjY0MTgzNjcxNjk2MzgzOTExOSI+IklTTyBBNyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTgiIG1zZ2lkPSI3NTcxMTM5NDM3NDY1NjkzMzU1Ij4iSVNPIEE4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOSIgbXNnaWQ9IjEzNzg0NTU4OTE5NTcxMTUwNzkiPiJJU08gQTkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExMCIgbXNnaWQ9IjI0ODA3NDc0NTc0Mjk0NzUzNDQiPiJJU08gQTEwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMCIgbXNnaWQ9IjM5NjU5MzUwOTc2NjExMDgwMzkiPiJJU08gQjAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxIiBtc2dpZD0iMjUwNTc1MzI4NTAxMDExNTQzNyI+IklTTyBCMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjIiIG1zZ2lkPSI4NzYzODc0NzA5ODU5NDU4NDUzIj4iSVNPIEIyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMyIgbXNnaWQ9IjQyMTA1MDY2ODgxOTE3NjQwNzYiPiJJU08gQjMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I0IiBtc2dpZD0iNTc0OTQwNDE2NTg4ODUyNjAzNCI+IklTTyBCNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjUiIG1zZ2lkPSI3NjQwNjI3NDE0NjIxOTA0NzMzIj4iSVNPIEI1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNiIgbXNnaWQ9IjczNDI5ODg4NjQ3MTI3NDg1NDQiPiJJU08gQjYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I3IiBtc2dpZD0iNTA2OTg0NDA2NTIzNTM4MjQyOSI+IklTTyBCNyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjgiIG1zZ2lkPSI3MzE2ODE4OTIyMjc4Nzc5Nzc0Ij4iSVNPIEI4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOSIgbXNnaWQ9IjU0MTQ3MjcwOTQwMjY1MzIzNDEiPiJJU08gQjkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxMCIgbXNnaWQ9IjUyNTEyNTM3MzE4MzIwNDgxODUiPiJJU08gQjEwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMCIgbXNnaWQ9IjQwMDMxMzgzNDI2NzE5NjQyMTciPiJJU08gQzAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MxIiBtc2dpZD0iMTkzNTE4ODA2MzM5MzU1MzAwOCI+IklTTyBDMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzIiIG1zZ2lkPSIzMTk3MzA3OTY5NzEyMDY5OTA0Ij4iSVNPIEMyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMyIgbXNnaWQ9IjQzMzU4MjYwODczMjE5MTM1MDgiPiJJU08gQzMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M0IiBtc2dpZD0iMzc0NTYzOTU5ODI4MTAxNTAwNSI+IklTTyBDNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzUiIG1zZ2lkPSI4MjY5NDU3NzY1ODIyNzkxMDEzIj4iSVNPIEM1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNiIgbXNnaWQ9IjU2NjY2NjEwNTI2MDM0NjkzMCI+IklTTyBDNiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzciIG1zZ2lkPSI4Njc4NDEzMTgwNzgyNjA4NDk4Ij4iSVNPIEM3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jOCIgbXNnaWQ9IjgzOTIzNzYyMDY2MjcwNDE3MzAiPiJJU08gQzgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M5IiBtc2dpZD0iOTE5MTYxMzM3MjMyNDg0NTQwNSI+IklTTyBDOSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEwIiBtc2dpZD0iNzMyNzcwOTY5OTE4NDkyMDgyMiI+IklTTyBDMTAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGV0dGVyIiBtc2dpZD0iNDE5MTgwNTYxNTgyOTQ3Mjk1MyI+IkxldHRlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9ndnJubXRfbGV0dGVyIiBtc2dpZD0iNzg1MzM4MjE5MjY0OTQwNTUwNyI+IkdvdmVybm1lbnQgTGV0dGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2xlZ2FsIiBtc2dpZD0iNjY5Nzk4Mjk4ODI4MzgyMzE1MCI+IkxlZ2FsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2p1bmlvcl9sZWdhbCIgbXNnaWQ9IjM3Mjc3NDM5Njk5MDI3NTg5NDgiPiJKdW5pb3IgTGVnYWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVkZ2VyIiBtc2dpZD0iMjgxODcxNDY0ODk2NjAxMjM2Ij4iTGVkZ2VyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX3RhYmxvaWQiIG1zZ2lkPSI1Nzc1OTY2NDE2MzMzNTc4MTI3Ij4iVGFibG9pZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndyaXRlX2ZhaWxfcmVhc29uX2NhbmNlbGxlZCIgbXNnaWQ9IjcwOTEyNTgzNzgxMjE2Mjc2MjQiPiJUw7xoaXN0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndyaXRlX2ZhaWxfcmVhc29uX2Nhbm5vdF93cml0ZSIgbXNnaWQ9IjgxMzI1MDU0MTc5MzUzMzc3MjQiPiJWaWdhIHNpc3Uga2lyanV0YW1pc2VsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiJTaXNlc3RhZ2UgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfb2xkX3BpbiIgbXNnaWQ9IjE0NjIyMDYyMjU1MTI5MTA3NTciPiJQcmFlZ3VuZSBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+IlV1cyBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jb25maXJtX3BpbiIgbXNnaWQ9Ijg1MDE1MjM4Mjk2MzMxNDYyMzkiPiJLaW5uaXRhZ2UgdXVzIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4iTG9vZ2UgUElOLWtvb2QgcGlpcmFuZ3V0ZSBtdXV0bWlzZWtzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiJQSU4ta29vZCBlaSBzb2JpLiBQcm9vdmlnZSB1dWVzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX3Rvb19zaG9ydCIgbXNnaWQ9IjgxNzM5ODI3NTYyNjU3Nzc3OTIiPiJQSU4ta29vZCBvbiBsaWlnYSBsw7xoaWtlLiBQZWFiIG9sZW1hIHbDpGhlbWFsdCA0LWtvaGFsaW5lLiI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0icmVzdHJfcGluX2NvdW50ZG93biI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4MzU2Mzk5Njk1MDM3Mjk4NzQiPiJWYWxlIFBJTi1rb29kLiBQcm9vdmlnZSAxIHMgcMOkcmFzdC4iPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjgwMzA2MDczNDMyMjMyODc2NTQiPiJWYWxlIFBJTi1rb29kLiBQcm9vdmlnZSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzIHDDpHJhc3QuIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAppbmRleCA5MmQ2ODdmLi41NDM1NmY4IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTI3LDE0ICsyNywxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0idGVyYWJ5dGVTaG9ydCIgbXNnaWQ9IjIzMTYxMzAxODE1OTE4Njk2MiI+Itiq2LHYp9io2KfbjNiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGV0YWJ5dGVTaG9ydCIgbXNnaWQ9IjU2Mzc4MTY2ODAxNDQ5OTAyMTkiPiLZvtiq2KfYqNin24zYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZpbGVTaXplU3VmZml4IiBtc2dpZD0iOTE2NDI5Mjc5MTUwMDUzMTk0OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJHM8L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDvYqNiv2YjZhiDYudmG2YjYp9mGJmd0OyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IuKAjyZsdDvYqNiv2YjZhiDYudmG2YjYp9mGJmd0OyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzIiBtc2dpZD0iNzg5OTgyOTUxNjA0ODgxMzIzNyI+IuKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzX3R3b19kb3RzIiBtc2dpZD0iMTIyODA3ODk5NDg2NjAzMDczNiI+Ii4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIgbXNnaWQ9Ijc2OTQwNjMwNDIwNzk2NzY1MTciPiIo2KjYr9mI2YYg2LTZhdin2LHZhyDYqtmE2YHZhikiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIo2YbYp9i02YbYp9izKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiLZvtiz2Kog2LXZiNiq24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0TXNpc2RuQWxwaGFUYWciIG1zZ2lkPSIyODUwODg5NzU0OTE5NTg0Njc0Ij4iTVNJU0ROMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+ItmF2LTaqdmEINiv2LEg2KfYqti12KfZhCDbjNinINqp2K8gTU1JINmG2KfZhdi52KrYqNixLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+IuKAj9mF2LTaqdmEINiv2LEg2KfYqti12KfZhCDbjNinINqp2K8gTU1JINmG2KfZhdi52KrYqNixLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1taUZkbkVycm9yIiBtc2dpZD0iNTIyNDM5ODIxNjM4NTMxNjQ3MSI+Iti52YXZhNqp2LHYryDZgdmC2Lcg2KjZhyDYtNmF2KfYsdmH4oCM2YfYp9uMINi02YXYp9ix2Ycg2q/bjNix24wg2KvYp9io2Kog2YXYrdiv2YjYryDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWQiIG1zZ2lkPSI4MTQ3Mjc4MzQ2NDE0NzE0MzE1Ij4i2LPYsdmI24zYsyDZgdi52KfZhCDYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkRm9yIiBtc2dpZD0iNjg1NjIyODE0MDQ1MzQ3MTA0MSI+Itiz2LHZiNuM2LMg2YHYudin2YQg2LTYryDYqNix2KfbjDoiPC9zdHJpbmc+CkBAIC00MiwxNCArNDIsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VSZWdpc3RlcmVkIiBtc2dpZD0iNjI3NTAxOTA4MjU5ODEwMjQ5MyI+Itir2KjYqiDYqNinINmF2YjZgdmC24zYqiDYp9mG2KzYp9mFINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRXJhc2VkIiBtc2dpZD0iMTI4ODU4NDY5NTI5NzIwMDk3MiI+Itm+2KfaqSDaqdix2K/ZhiDYqNinINmF2YjZgdmC24zYqiDYp9mG2KzYp9mFINi02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRJbmNvcnJlY3QiIG1zZ2lkPSI3NjEyMjA4ODM5NDUwMTI4NzE1Ij4i2LHZhdiyINmI2LHZiNivINin2LTYqtio2KfZhyDYp9iz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4iTU1JINqp2KfZhdmEINi02K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFkUGluIiBtc2dpZD0iOTAxNTI3NzY0NTU0NjcxMDAxNCI+Itm+24zZhiDZgtiv24zZhduMINqp2Ycg2YbZiNi02KrZh+KAjtin24zYryDYtdit24zYrSDZhtuM2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4iUFVLINqp2Ycg2YbZiNi02KrZh+KAjNin24zYryDYtdit24zYrSDZhtuM2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+Itm+24zZhuKAjtmH2KfbjNuMINqp2Ycg2YjYp9ix2K8g2qnYsdiv2YfigI7Yp9uM2K8g2KjYpyDbjNqp2K/bjNqv2LEg2YXYt9in2KjZgtiqINmG2K/Yp9ix2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlDb21wbGV0ZSIgbXNnaWQ9IjgyMzI1Mjc0OTU0MTE2OTgzNTkiPiLigI9NTUkg2qnYp9mF2YQg2LTYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4i4oCP2b7bjNmGINmC2K/bjNmF24wg2qnZhyDZhtmI2LTYqtmH4oCO2KfbjNivINi12K3bjNitINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhZFB1ayIgbXNnaWQ9IjU0ODcyNTc2NDcwODExMzIyMDEiPiLigI9QVUsg2qnZhyDZhtmI2LTYqtmH4oCM2KfbjNivINi12K3bjNitINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pc21hdGNoUGluIiBtc2dpZD0iNjA5Mzc5MDU0NDk2ODYzNDE5Ij4i4oCP2b7bjNmG4oCO2YfYp9uM24wg2qnZhyDZiNin2LHYryDaqdix2K/Zh+KAjtin24zYryDYqNinINuM2qnYr9uM2q/YsSDZhdi32KfYqNmC2Kog2YbYr9in2LHZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4i24zaqSDZvtuM2YYg2KjZhtmI24zYs9uM2K8g2qnZhyA0INiq2KcgOCDYsdmC2YUg2KjYp9i02K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLbjNqpIFBVSyDYqNinIDgg2LHZgtmFINuM2Kcg2KjbjNi02KrYsSDYqtin24zZviDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i2LPbjNmFINqp2KfYsdiqINi02YXYpyDYqNinIFBVSyDZgtmB2YQg2LTYr9mHINin2LPYqi4g2qnYryBQVUsg2LHYpyDYqNix2KfbjCDYqNin2LLar9i02KfbjNuMINii2YYg2KjZhtmI24zYs9uM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iUFVLMiDYsdinINio2LHYp9uMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINiz24zZhSDaqdin2LHYqiDYqNmG2YjbjNiz24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IuKAj9uM2qkgUFVLINio2KcgOCDYsdmC2YUg24zYpyDYqNuM2LTYqtixINiq2KfbjNm+INqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLigI/Ys9uM2YUg2qnYp9ix2Kog2LTZhdinINio2KcgUFVLINmC2YHZhCDYtNiv2Ycg2KfYs9iqLiDaqdivIFBVSyDYsdinINio2LHYp9uMINio2KfYstqv2LTYp9uM24wg2KLZhiDYqNmG2YjbjNiz24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLigI9QVUsyINix2Kcg2KjYsdin24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2LPbjNmFINqp2KfYsdiqINio2YbZiNuM2LPbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuKAj9mG2KfZhdmI2YHZgiDYqNmI2K/YjCDZgtmB2YQg2LPbjNmFL1JVSU0g2LHYpyDZgdi52KfZhCDaqdmG24zYry4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g2KjYp9ixINiv24zar9ixINmF24zigIzYqtmI2KfZhtuM2K8g2KrZhNin2LQg2qnZhtuM2K8g2Ygg2b7YsyDYp9iyINii2YYg2LPbjNmFINqp2KfYsdiqINmC2YHZhCDZhduM4oCM2LTZiNivLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2K/bjNqv2LEg2YXbjOKAjNiq2YjYp9mG24zYryDYqtmE2KfYtCDaqdmG24zYryDZiCDZvtizINin2LIg2KLZhiDYs9uM2YUg2qnYp9ix2Kog2YLZgdmEINmF24zigIzYtNmI2K8uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLYtNmG2KfYs9mHINiq2YXYp9izINqv24zYsdmG2K/ZhyDZiNix2YjYr9uMIjwvc3RyaW5nPgpAQCAtNzAsMTQgKzc1LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT24iIG1zZ2lkPSI2MTc5NDI1MTgyODU2NDE4NDY1Ij4i2b7bjNi04oCM2YHYsdi2INi02YbYp9iz2Ycg2KrZhdin2LMg2q/bjNix2YbYr9mHINix2YjbjCDYutuM2LEg2YXYrdiv2YjYryDYp9iz2KouINiq2YXYp9izINio2LnYr9uMOiDZhdit2K/ZiNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9mZiIgbXNnaWQ9IjI1Njc5OTg2MzMxMjQ0MDg1NTIiPiLZvtuM2LTigIzZgdix2LYg2LTZhtin2LPZhyDYqtmF2KfYsyDar9uM2LHZhtiv2Ycg2LHZiNuMINi624zYsSDZhdit2K/ZiNivINin2LPYqi4g2KrZhdin2LMg2KjYudiv24w6INio2K/ZiNmGINmF2K3Yr9mI2K/bjNiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZU5vdFByb3Zpc2lvbmVkIiBtc2dpZD0iODYxNDgzMDE4MDUwODY4NjY2NiI+Itiz2LHZiNuM2LMg2K/Yp9ix2KfbjCDZhdis2YjYsiDZhtuM2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSUGVybWFuZW50IiBtc2dpZD0iMzM3NzM3MTE0NTkyNjgzNTY3MSI+Iti02YXYpyDZhduM4oCO2KrZiNin2YbbjNivINiq2YbYuNuM2YUg2LTZhtin2LPZhyDYqtmF2KfYsyDar9uM2LHZhtiv2Ycg2LHYpyDYqti624zbjNixINiv2YfbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJQZXJtYW5lbnQiIG1zZ2lkPSIzMzc3MzcxMTQ1OTI2ODM1NjcxIj4i4oCP2LTZhdinINmF24zigI7YqtmI2KfZhtuM2K8g2KrZhti424zZhSDYtNmG2KfYs9mHINiq2YXYp9izINqv24zYsdmG2K/ZhyDYsdinINiq2LrbjNuM2LEg2K/Zh9uM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZENoYW5nZWRUaXRsZSIgbXNnaWQ9IjU1OTIxODkzOTg5NTYxODc0OTgiPiLYr9iz2KrYsdiz24wg2YXYrdiv2YjYryDYqti624zbjNixINuM2KfZgdiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRGF0YSIgbXNnaWQ9Ijg2NTM3OTQ3ODQ2OTAwNjU1NDAiPiLYs9ix2YjbjNizINiv2KfYr9mHINmF2LPYr9mI2K8g2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkVtZXJnZW5jeSIgbXNnaWQ9IjY1ODExNjM3NzkwNzI4MzM2NjUiPiLYs9ix2YjbjNizINin2LbYt9ix2KfYsduMINmF2LPYr9mI2K8g2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbk5vcm1hbCIgbXNnaWQ9IjQ5NTM4NjcwMTEzODk3NTA2NzMiPiLYs9ix2YjbjNizINi12YjYqtuMINmF2LPYr9mI2K8g2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGxWb2ljZSIgbXNnaWQ9IjMzOTY5NjM2NTIxMDgxNTEyNjAiPiLYqtmF2KfZhSDYs9ix2YjbjNiz4oCO2YfYp9uMINi12K/YpyDZhdiz2K/ZiNivINmH2LPYqtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsVm9pY2UiIG1zZ2lkPSIzMzk2OTYzNjUyMTA4MTUxMjYwIj4i4oCP2KrZhdin2YUg2LPYsdmI24zYs+KAjtmH2KfbjCDYtdiv2Kcg2YXYs9iv2YjYryDZh9iz2KrZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblNtcyIgbXNnaWQ9IjgzMTQzNTIzMjc0NjE2Mzg4OTciPiLYs9ix2YjbjNizINm+24zYp9mF2qkg2YXYs9iv2YjYryDYtNiv2Ycg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlRGF0YSIgbXNnaWQ9Ijk5NjYzNjQ4NzEwNjE3MTMyMCI+Itiz2LHZiNuM2LPigI7igI7Zh9in24wg2LXYr9inL9iv2KfYr9mHINmF2LPYr9mI2K8g2LTYr9mG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VEYXRhIiBtc2dpZD0iOTk2NjM2NDg3MTA2MTcxMzIwIj4i4oCP2LPYsdmI24zYs+KAjuKAjtmH2KfbjCDYtdiv2Kcv2K/Yp9iv2Ycg2YXYs9iv2YjYryDYtNiv2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZVNtcyIgbXNnaWQ9IjE4ODg1ODgxNTI3OTIwMjM4NzMiPiLYs9ix2YjbjNiz4oCM2YfYp9uMINi12YjYqtuML9m+24zYp9mF2qkg2YXYs9iv2YjYryDYtNiv2YfigIzYp9mG2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGwiIG1zZ2lkPSI1NjQzMDI4MjY0NDY2MDkyODIxIj4i2KrZhdin2YUg2LPYsdmI24zYs+KAjNmH2KfbjCDYtdiv2Kcv2K/Yp9iv2YcvINm+24zYp9mF2qkg2YXYs9iv2YjYryDZh9iz2KrZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1ZvaWNlIiBtc2dpZD0iMTI1ODM5MzgxMjMzNTI1ODAxOSI+Iti12YjYqtuMIjwvc3RyaW5nPgpAQCAtMTExLDE3ICsxMTYsMTcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZjRXJyb3IiIG1zZ2lkPSIzMzI3NTYwMTI2NTg4NTAwNzc3Ij4i2YXYtNqp2YQg2K/YsSDYp9iq2LXYp9mEINuM2Kcg2qnYryDZiNuM2pjar9uMINmG2KfZhdi52KrYqNixLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvck9rIiBtc2dpZD0iMTE5MTkxOTM3ODA4MzQ3MjIwNCI+Itiq2KPbjNuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3IiIG1zZ2lkPSI3OTU2MzkyNTExMTQ2Njk4NTIyIj4i2K7Yt9in24zbjCDYr9ixINi02KjaqdmHINmI2KzZiNivINiv2KfYtNiqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiJVUkwg2b7bjNiv2Kcg2YbYtNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiLYt9ix2K0g2qnZhNuMINiq2KPbjNuM2K8g2KfYudiq2KjYp9ixINiz2KfbjNiqINm+2LTYqtuM2KjYp9mG24wg2YbZhduM4oCO2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiLigI9VUkwg2b7bjNiv2Kcg2YbYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiLigI/Yt9ix2K0g2qnZhNuMINiq2KPbjNuM2K8g2KfYudiq2KjYp9ixINiz2KfbjNiqINm+2LTYqtuM2KjYp9mG24wg2YbZhduM4oCO2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckF1dGgiIG1zZ2lkPSIxNDM1MDY1NjI5NDM4MDQ0NTM0Ij4i2KrYo9uM24zYryDYp9i52KrYqNin2LEg2KfZhtis2KfZhSDZhti02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUHJveHlBdXRoIiBtc2dpZD0iMTc4ODIwNzAxMDU1OTA4MTMzMSI+Itiq2KPbjNuM2K8g2KfYudiq2KjYp9ixINin2LIg2LfYsduM2YIg2LPYsdmI2LEg2b7YsdmI2qnYs9uMINin2YbYrNin2YUg2YbYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckNvbm5lY3QiIG1zZ2lkPSI4NzE0MjczMjM2MzY0NjQwNTQ5Ij4i2KfYqti12KfZhCDYqNmHINiz2LHZiNixINin2YbYrNin2YUg2YbYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvcklPIiBtc2dpZD0iMjM0MDU1ODE5NzQ4OTMwMjE4OCI+Itio2LHZgtix2KfYsduMINin2LHYqtio2KfYtyDYqNinINiz2LHZiNixINmF2YXaqdmGINmG2KjZiNivLiDYqNi52K/Yp9mLINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVGltZW91dCIgbXNnaWQ9IjQ3NDM0MDM3MDM3NjI4ODM5NTQiPiLYstmF2KfZhiDYp9iq2LXYp9mEINio2Ycg2LPYsdmI2LEg2KrZhdin2YUg2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JSZWRpcmVjdExvb3AiIG1zZ2lkPSI4Njc5NTk2MDkwMzkyNzc5NTE2Ij4i2KfbjNmGINi12YHYrdmHINiv2KfYsdin24wg2KrYudiv2KfYryDYqNiz24zYp9ixINiy24zYp9iv24wg2KrYutuM24zYsSDZhdiz24zYsSDYs9ix2YjYsSDYp9iz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRTY2hlbWUiIG1zZ2lkPSI1MDE1NzMwODEyOTA2MTkyMjA4Ij4i2b7YsdmI2KraqdmEINm+2LTYqtuM2KjYp9mG24wg2YbZhduM4oCO2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkU2NoZW1lIiBtc2dpZD0iNTAxNTczMDgxMjkwNjE5MjIwOCI+IuKAj9m+2LHZiNiq2qnZhCDZvti02KrbjNio2KfZhtuMINmG2YXbjOKAjti02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGYWlsZWRTc2xIYW5kc2hha2UiIG1zZ2lkPSI5NjU0OTYwNjAwMDY1ODY0MSI+Itin2KrYtdin2YQg2KfZhdmGINin24zYrNin2K8g2YbYtNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckJhZFVybCIgbXNnaWQ9IjM2MzY5Mjk3MjI3Mjg4ODE5NzIiPiLYqNiv2YTbjNmEINmG2KfZhdi52KrYqNixINio2YjYr9mGIFVSTNiMINio2KfYsiDaqdix2K/ZhiDYtdmB2K3ZhyDZhdmF2qnZhiDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4i4oCP2KjYr9mE24zZhCDZhtin2YXYudiq2KjYsSDYqNmI2K/ZhiBVUkzYjCDYqNin2LIg2qnYsdiv2YYg2LXZgdit2Ycg2YXZhdqp2YYg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiLYr9iz2KrYsdiz24wg2KjZhyDZgdin24zZhCDYp9mG2KzYp9mFINmG2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlTm90Rm91bmQiIG1zZ2lkPSI2MjAzODU2NjEyMDQyNjU1MDg0Ij4i2YHYp9uM2YQg2K/Ysdiu2YjYp9iz2KrbjCDZvtuM2K/YpyDZhti02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVG9vTWFueVJlcXVlc3RzIiBtc2dpZD0iMTIzNTM5NjkyNzA4NzE4ODI1MyI+Itiv2LHYrtmI2KfYs9iq4oCM2YfYp9uMINiy24zYp9iv24wg2K/YsSDYrdin2YQg2b7Ysdiv2KfYsti0INin2LPYqi4g2KjYudiv2KfZiyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KQEAgLTEyOSw3ICsxMzQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jIiBtc2dpZD0iODM1MzUyMzA2MDI2OTMzNTY2NyI+ItmH2YXar9in2YXigIzYs9in2LLbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luY05vdGlmaWNhdGlvblRpdGxlIiBtc2dpZD0iMzk3NzQzMzQ5MTkxOTAxNDU4Ij4i2YfZhdqv2KfZheKAjNiz2KfYstuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VUb29NYW55RGVsZXRlc05vdGlmaWNhdGlvbkRlc2MiIG1zZ2lkPSI4MTAwOTgxNDM1MDgwNjk2NDMxIj4i2KrYudiv2KfYryDZhdmI2KfYsdivINit2LDZgSDYtNiv2YcgPHhsaWZmOmcgaWQ9IkNPTlRFTlRfVFlQRSI+JXM8L3hsaWZmOmc+INio2LPbjNin2LEg2LLbjNin2K8g2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY0OTQwMTkyMzQxMDIxNTQ4OTYiPiLYrdin2YHYuNmHINix2KfbjNin2YbZh9mUINmE2YjYrduMINm+2LEg2KfYs9iqISDYqNix2K7bjCDYp9iyINmB2KfbjNmE4oCO2YfYpyDYsdinINit2LDZgSDaqdmG24zYryDYqtinINmB2LbYpyDYotiy2KfYryDYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjQ5NDAxOTIzNDEwMjE1NDg5NiI+IuKAj9it2KfZgdi42Ycg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2b7YsSDYp9iz2KohINio2LHYrtuMINin2LIg2YHYp9uM2YTigI7Zh9inINix2Kcg2K3YsNmBINqp2YbbjNivINiq2Kcg2YHYttinINii2LLYp9ivINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ3NTk5OTI4NjY4MDAwMDU0MSI+Itit2KfZgdi42Ycg2KrZhNmB2YYg2b7YsSDYp9iz2KouINio2LnYttuMINin2LIg2YHYp9uM2YTigIzZh9inINix2Kcg2K3YsNmBINqp2YbbjNivINiq2Kcg2YHYttinINii2LLYp9ivINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iNTg0ODQwMjEyNzQ1NTAyMTcxNCI+ItmF2YXaqdmGINin2LPYqiDYtNio2qnZhyDZhti42KfYsdiqINi02K/ZhyDYqNin2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X25vdGlfYnlfdW5rbm93biIgbXNnaWQ9IjQ0NzU0Mzc4NjIxODk4NTA2MDIiPiLYqtmI2LPYtyDbjNqpINi02K7YtSDYq9in2YTYqyDZhtin2LTZhtin2LMiPC9zdHJpbmc+CkBAIC0xNDgsMTEgKzE1MywxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fcHJvZ3Jlc3MiIG1zZ2lkPSIyMjgxMDc5MjU3MzI5OTgxMjAzIj4i2K/YsSDYrdin2YQg2K7Yp9mF2YjYtCDYtNiv2YbigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMzg1NzQ1MTc5NTU1NzMxNDcwIj4i2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LTZhdinINiu2KfZhdmI2LQg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQ5NzkyMTc1MjQyODIxMzUzIj4i2q/ZiNi024wg2LTZhdinINiu2KfZhdmI2LQg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+Itii24zYpyDZhduM4oCO2K7ZiNin2YfbjNivINiq2YTZgdmGINiu2KfZhdmI2LQg2LTZiNiv2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+IuKAj9ii24zYpyDZhduM4oCO2K7ZiNin2YfbjNivINiq2YTZgdmGINiu2KfZhdmI2LQg2LTZiNiv2J8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfdGl0bGUiIG1zZ2lkPSI3MDU0NTA5OTE0NTAwMTQwMzYxIj4i2LHYp9mH4oCM2KfZhtiv2KfYstuMINmF2KzYr9ivINiv2LEg2K3Yp9mE2Kog2KfZhdmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX2NvbmZpcm0iIG1zZ2lkPSI1NTI5Mzk0NDUwMjc4NDY2OCI+Itii24zYpyDZhduM4oCM2K7ZiNin2YfbjNivINio2Kcg2K3Yp9mE2Kog2KfZhdmGINix2KfZh+KAjNin2YbYr9in2LLbjCDZhdis2K/YryDaqdmG24zYr9ifINio2Kcg2KfbjNmGINqp2KfYsSDZh9mF2YfZlCDYqNix2YbYp9mF2YfigIzZh9in24wg2LTYrti1INir2KfZhNir24wg2qnZhyDZhti12Kgg2qnYsdiv2YfigIzYp9uM2K8g2LrbjNix2YHYudin2YQg2YXbjOKAjNi02YjZhtivLiDYqNinINix2KfZh+KAjNin2YbYr9in2LLbjCDYr9mI2KjYp9ix2Ycg2LPbjNiz2KrZhSDYp9uM2YYg2KjYsdmG2KfZhdmH4oCM2YfYpyDYr9mI2KjYp9ix2Ycg2KjYp9iy24zYp9io24wg2YXbjOKAjNi02YjZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiLYp9iu24zYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vX3JlY2VudF90YXNrcyIgbXNnaWQ9Ijg3OTQ5MDY2NTg3MzIxOTM0NzMiPiLYqNix2YbYp9mF2YfigI7Zh9in24wg2KzYr9uM2K8g2YXZiNis2YjYryDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19yZWNlbnRfdGFza3MiIG1zZ2lkPSI4Nzk0OTA2NjU4NzMyMTkzNDczIj4i4oCP2KjYsdmG2KfZhdmH4oCO2YfYp9uMINis2K/bjNivINmF2YjYrNmI2K8g2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQwODQ3NzE0MDA4ODA1MzY2NSI+Itqv2LLbjNmG2YfigIzZh9in24wg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiLar9iy24zZhtmH4oCM2YfYp9uMINiq2YTZgdmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+ItmC2YHZhCDYtdmB2K3ZhyI8L3N0cmluZz4KQEAgLTE2OCw3ICsxNzMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iNTA3NTA3MDQ0Mjg1NDQ5MDI5NiI+Itit2KfZhNiqINmH2YjYp9m+24zZhdinINiu2KfZhdmI2LQg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiLYqNuM2LTYqtixINin2LIgOTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i2K3Yp9mE2Kog2KfbjNmF2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLYs9uM2LPYqtmFIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLigI/Ys9uM2LPYqtmFIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY29zdE1vbmV5IiBtc2dpZD0iNTQyOTgwODIxNzg2MTQ2MDQwMSI+Itiz2LHZiNuM2LPigIzZh9in24wg2LrbjNixINix2KfbjNqv2KfZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+Itin2YbYrNin2YUg2qnYp9ix2YfYp9uM24wg2qnZhyDYqNix2KfbjCDYtNmF2Kcg2YfYstuM2YbZhyDYr9in2LHYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4i2b7bjNin2YXigIzZh9in24wg2LTZhdinIjwvc3RyaW5nPgpAQCAtMTgwLDcgKzE4NSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbG9jYXRpb24iIG1zZ2lkPSI2MzUxNDk3NDI0MzY2OTIwNDkiPiLZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYtNmF2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2xvY2F0aW9uIiBtc2dpZD0iNTcwNDY3OTc2MzEyNDE3MDEwMCI+Itio2LEg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2YHbjNiy24zaqduMINiu2YjYryDZhti42KfYsdiqINiv2KfYtNiq2Ycg2KjYp9i024zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbmV0d29yayIgbXNnaWQ9IjU4MDg5ODMzNzc3MjcxMDk4MzEiPiLYp9ix2KrYqNin2Lcg2LTYqNqp2YfigIzYp9uMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+Itio2Ycg2YjbjNqY2q/bjOKAjtmH2KfbjCDZhdiu2KrZhNmBINi02KjaqdmHINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+IuKAj9io2Ycg2YjbjNqY2q/bjOKAjtmH2KfbjCDZhdiu2KrZhNmBINi02KjaqdmHINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSIxNTg1NDAzNTQ0MTYyMTI4MTA5Ij4i2KjZhNmI2KrZiNirIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iNTYyNTI4ODU3NzE2NDI4MjM5MSI+Itin2LIg2LfYsduM2YIg2KjZhNmI2KrZiNirINio2Ycg2K/Ys9iq2q/Yp9mH4oCM2YfYpyDZiCDYtNio2qnZh+KAjNmH2Kcg2K/Ys9iq2LHYs9uMINiv2KfYtNiq2Ycg2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI4MzI5MjYxNjcwMTUxODcxMjM1Ij4i2KrZhti424zZhdin2Kog2LXYr9inIjwvc3RyaW5nPgpAQCAtMjI4LDggKzIzMyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiLYsdin2KjYtyDYqNix2YbYp9mF2YfZlCDYr9uM2q/YsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGlzcGxheSIgbXNnaWQ9IjYwNTEwMDIwMzE5MzMwMTM3MTQiPiLYsdmI24wg2LHYp9io2Lcg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINiv24zar9ixINin2KvYsSDYr9in2LHYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RvcmFnZSIgbXNnaWQ9IjE5NzExMTg3NzA1NDYzMzY5NjYiPiLYrdin2YHYuNmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiLYqNmHINit2KfZgdi42YfZlCBVU0Ig2K/Ys9iq2LHYs9uMINm+24zYr9inINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiLYqNmHINqp2KfYsdiqIFNEINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiLigI/YqNmHINit2KfZgdi42YfZlCBVU0Ig2K/Ys9iq2LHYs9uMINm+24zYr9inINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiLigI/YqNmHINqp2KfYsdiqIFNEINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiLZiNuM2pjar9uM4oCM2YfYp9uMINmC2KfYqNmE24zYqiDYr9iz2KrYsdiz24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9IjQyMDUxOTY4ODE2NzgxNDQzMzUiPiLZiNuM2pjar9uM4oCM2YfYp9uM24wg2qnZhyDZgdmG2KfZiNix24wg2YXZgduM2K8g2YXbjOKAjNiq2YjYp9mG2K8g2K/Ysdiu2YjYp9iz2Kog2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzkwMTcxNzkzNjkzMDE3MDMyMCI+Itio2KfYstuM2KfYqNuMINmF2K3YqtmI2KfbjCDZvtmG2KzYsdmHIjwvc3RyaW5nPgpAQCAtMjQxLDM4ICsyNDYsMzggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9IjIxMDM0NDAzOTE5MDI0MTIxNzQiPiLZhtmI2LTYqtin2LHbjCDYsdinINqp2Ycg2KrYp9uM2b4g2YXbjOKAjNqp2YbbjNivINmF2LTYp9mH2K/ZhyDZhtmF2KfbjNuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLYp9i32YTYp9i52KfYqiDYtNiu2LXbjCDZhdin2YbZhtivINi02YXYp9ix2Ycg2qnYp9ix2Kog2KfYudiq2KjYp9ix24wg2Ygg2q/YsNix2YjYp9qY2YfigIzZh9inINix2Kcg2LTYp9mF2YQg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLYutuM2LHZgdi52KfZhCDaqdix2K/ZhiDbjNinINiq2LrbjNuM2LEg2YbZiNin2LEg2YjYtti524zYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtmI2KfYsSDZiNi22LnbjNiqINix2Kcg2LrbjNix2YHYudin2YQg2qnZhtivINuM2Kcg2YbZhdin2K/Zh9in24wg2LPbjNiz2KrZhSDYsdinINin2LbYp9mB2Ycg24zYpyDYrdiw2YEg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtmI2KfYsSDZiNi22LnbjNiqINix2Kcg2LrbjNix2YHYudin2YQg2qnZhtivINuM2Kcg2YbZhdin2K/Zh9in24wg2LPbjNiz2KrZhSDYsdinINin2LbYp9mB2Ycg24zYpyDYrdiw2YEg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcyNDcyODE5MTEzODc5MzE0ODUiPiLZhtmI2KfYsSDZiNi22LnbjNiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcxNjExMzY2MDc5NTk3NjA2MCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDaqdmHINiq2KjYr9uM2YQg2KjZhyDZhtmI2KfYsSDZiNi22LnbjNiqINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzE2MTEzNjYwNzk1OTc2MDYwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINqp2Ycg2KrYqNiv24zZhCDYqNmHINmG2YjYp9ixINmI2LbYuduM2Kog2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iMTE0ODE5ODc4NTkzNzQ4OTI2NCI+Itqv2LPYqtix2LQg2K/Yp9iv2YYv2KzZhdi5INqp2LHYr9mGINmG2YjYp9ixINmI2LbYuduM2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSI2OTE3NTQ5NDM3MTI5NDAxMTMyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YbZiNin2LEg2KfYqNiy2KfYsSDYsdinINis2YXYuSDaqdmG2K8g24zYpyDYqNin2LIg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjY5MTc1NDk0MzcxMjk0MDExMzIiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtmI2KfYsSDYp9io2LLYp9ixINix2Kcg2KzZhdi5INqp2YbYryDbjNinINio2KfYsiDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnN0YWxsX3Nob3J0Y3V0IiBtc2dpZD0iNDI3OTA3MDIxNjM3MTU2NDIzNCI+ItmG2LXYqCDZhduM2KfZhuKAjNio2LHZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbF9zaG9ydGN1dCIgbXNnaWQ9IjgzNDEyOTU5MTYyODY3MzY5OTYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2YXbjNin2YbigIzYqNix2YfYp9uMINi12YHYrdmHINin2LXZhNuMINix2Kcg2KjYr9mI2YYg2K/Yrtin2YTYqiDaqdin2LHYqNixINin2LbYp9mB2Ycg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdW5pbnN0YWxsX3Nob3J0Y3V0IiBtc2dpZD0iNDcyOTYzNDUyNDA0NDAwMzY5OSI+Itit2LDZgSDZhti12Kgg2YXbjNin2YbigIzYqNix2YfYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VuaW5zdGFsbF9zaG9ydGN1dCIgbXNnaWQ9IjY3NDU3NDM0NzQyNjUwNTc5NzUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2YXbjNin2YbigIzYqNix2YfYp9uMINi12YHYrdmHINin2LXZhNuMINix2Kcg2KjYr9mI2YYg2K/Yrtin2YTYqiDaqdin2LHYqNixINit2LDZgSDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiLYqtix2LPbjNmFINmF2KzYr9ivINmF2LPbjNixINiq2YXYp9iz4oCM2YfYp9uMINiu2LHZiNis24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjUzMzEzMTg5MzE5Mzc0MDIwNDAiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrZhdin2LPigIzZh9in24wg2K7YsdmI2KzbjCDYsdinINm+2LHYr9in2LLYtCDaqdmG2K8g2Ygg2LTZhdin2LHZh+KAjtmH2KfbjNuMINqp2Ycg2KjYp9uM2K8g2q/YsdmB2KrZhyDYtNmI2YbYryDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYp9uM2YYg2YXYrNmI2LIg2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINio2Ycg2qnZhtiq2LHZhNiMINmH2K/Yp9uM2Kog2YXYrNiv2K8g24zYpyDYrNmE2Yjar9uM2LHbjCDYp9iyINiq2YXYp9iz4oCM2YfYp9uMINiu2LHZiNis24wg2KjZvtix2K/Yp9iy2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSI1MzMxMzE4OTMxOTM3NDAyMDQwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2YXYp9iz4oCM2YfYp9uMINiu2LHZiNis24wg2LHYpyDZvtix2K/Yp9iy2LQg2qnZhtivINmIINi02YXYp9ix2YfigI7Zh9in24zbjCDaqdmHINio2KfbjNivINqv2LHZgdiq2Ycg2LTZiNmG2K8g2LHYpyDYqti624zbjNixINiv2YfYry4g2KfbjNmGINmF2KzZiNiyINio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYqNmHINqp2YbYqtix2YTYjCDZh9iv2KfbjNiqINmF2KzYr9ivINuM2Kcg2KzZhNmI2q/bjNix24wg2KfYsiDYqtmF2KfYs+KAjNmH2KfbjCDYrtix2YjYrNuMINio2b7Ysdiv2KfYstivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVNtcyIgbXNnaWQ9Ijg2NzM0NzE3Njg5NDc4OTUwODIiPiLYr9ix24zYp9mB2Kog2b7bjNin2YXigIzZh9in24wg2YbZiNi02KrYp9ix24wgKNm+24zYp9mF2qkpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2b7bjNin2YXaqeKAjNmH2Kcg2LHYpyDYr9ix24zYp9mB2Kog2Ygg2b7Ysdiv2KfYsti0INqp2YbYry4g2KfbjNmGINuM2LnZhtuMINio2LHZhtin2YXZhyDZhduM4oCM2KrZiNin2YbYryDZvtuM2KfZheKAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDYr9iz2Krar9in2Ycg2LTZhdinINix2Kcg2KjYr9mI2YYg2YbZhdin24zYtCDYotmG4oCM2YfYpyDYqNmHINi02YXYpyDYrdiw2YEg24zYpyDaqdmG2KrYsdmEINqp2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4i2K/YsduM2KfZgdiqINm+24zYp9mF4oCM2YfYp9uMINmG2YjYtNiq2KfYsduMIChNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZvtuM2KfZheKAjNmH2KfbjCBNTVMg2LHYpyDYr9ix24zYp9mB2Kog2Ygg2b7Ysdiv2KfYsti0INqp2YbYry4g2KfbjNmGINuM2LnZhtuMINio2LHZhtin2YXZhyDZhduM4oCM2KrZiNin2YbYryDZvtuM2KfZheKAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDYr9iz2Krar9in2Ycg2LTZhdinINix2Kcg2KjYr9mI2YYg2YbZhdin24zYtCDYotmG4oCM2YfYpyDYqNmHINi02YXYpyDYrdiw2YEg24zYpyDaqdmG2KrYsdmEINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4i4oCP2K/YsduM2KfZgdiqINm+24zYp9mF4oCM2YfYp9uMINmG2YjYtNiq2KfYsduMIChNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZvtuM2KfZheKAjNmH2KfbjCBNTVMg2LHYpyDYr9ix24zYp9mB2Kog2Ygg2b7Ysdiv2KfYsti0INqp2YbYry4g2KfbjNmGINuM2LnZhtuMINio2LHZhtin2YXZhyDZhduM4oCM2KrZiNin2YbYryDZvtuM2KfZheKAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDYr9iz2Krar9in2Ycg2LTZhdinINix2Kcg2KjYr9mI2YYg2YbZhdin24zYtCDYotmG4oCM2YfYpyDYqNmHINi02YXYpyDYrdiw2YEg24zYpyDaqdmG2KrYsdmEINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4i2K/YsduM2KfZgdiqINm+2K7YtOKAjNmH2KfbjCDYp9i22LfYsdin2LHbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZvtuM2KfZheKAjNmH2KfbjCDZvtiu2LQg2KfYtti32LHYp9ix24wg2LHYpyDYr9ix24zYp9mB2Kog2Ygg2b7Ysdiv2KfYsti0INqp2YbYry4g2KfbjNmGINmF2KzZiNiyINmB2YLYtyDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LPbjNiz2KrZhSDYr9ixINiv2LPYqtix2LMg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZvtuM2KfZheKAjNmH2KfbjCDZvtiu2LQg2KfYtti32LHYp9ix24wg2LHYpyDYr9ix24zYp9mB2Kog2Ygg2b7Ysdiv2KfYsti0INqp2YbYry4g2KfbjNmGINmF2KzZiNiyINmB2YLYtyDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LPbjNiz2KrZhSDYr9ixINiv2LPYqtix2LMg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+Itiu2YjYp9mG2K/ZhiDZvtuM2KfZheKAjNmH2KfbjCDZvtiu2LQg2LPZhNmI2YTbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2b7bjNin2YXigIzZh9in24wg2b7Yrti0INiz2YTZiNmE24wg2K/Ys9iq2q/Yp9mHINi02YXYpyDYsdinINio2K7ZiNin2YbYry4g2YfYtNiv2KfYsdmH2KfbjCDZvtiu2LQg2LPZhNmI2YTbjCDYr9ixINio2LHYrtuMINin2LIg2YXZiNmC2LnbjNiq4oCM2YfYp9uMINmF2qnYp9mG24wg2KrYrdmI24zZhCDYr9in2K/ZhyDZhduM4oCO2LTZiNmG2K8g2KrYpyDZhdmI2YLYuduM2KrigIzZh9in24wg2KfYtti32LHYp9ix24wg2LHYpyDYqNmHINi02YXYpyDYp9i52YTYp9mFINqp2YbZhtivLiDZiNmC2KrbjCDZvtiu2LQg2LPZhNmI2YTbjCDYr9ix24zYp9mB2Kog2YXbjOKAjti02YjYr9iMINmF2YXaqdmGINin2LPYqiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2K/YsSDYudmF2YTaqdix2K8g24zYpyDaqdin2LHaqdix2K8g2K/Ys9iq2q/Yp9mHINi02YXYpyDYp9iu2KrZhNin2YQg2KfbjNis2KfYryDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINm+24zYp9mF4oCM2YfYp9uMINm+2K7YtCDYs9mE2YjZhNuMINiv2LPYqtqv2KfZhyDYtNmF2Kcg2LHYpyDYqNiu2YjYp9mG2K8uINmH2LTYr9in2LHZh9in24wg2b7Yrti0INiz2YTZiNmE24wg2K/YsSDYqNix2K7bjCDYp9iyINmF2YjZgti524zYquKAjNmH2KfbjCDZhdqp2KfZhtuMINiq2K3ZiNuM2YQg2K/Yp9iv2Ycg2YXbjOKAjti02YjZhtivINiq2Kcg2YXZiNmC2LnbjNiq4oCM2YfYp9uMINin2LbYt9ix2KfYsduMINix2Kcg2KjZhyDYtNmF2Kcg2KfYudmE2KfZhSDaqdmG2YbYry4g2YjZgtiq24wg2b7Yrti0INiz2YTZiNmE24wg2K/YsduM2KfZgdiqINmF24zigI7YtNmI2K/YjCDZhdmF2qnZhiDYp9iz2Kog2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINiv2LEg2LnZhdmE2qnYsdivINuM2Kcg2qnYp9ix2qnYsdivINiv2LPYqtqv2KfZhyDYtNmF2Kcg2KfYrtiq2YTYp9mEINin24zYrNin2K8g2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kU21zIiBtc2dpZD0iNTYwMDgzMDYxMjE0NzY3MTUyOSI+Itin2LHYs9in2YQg2b7bjNin2YXaqSDZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2b7bjNin2YXaqeKAjNmH2Kcg2LHYpyDYp9ix2LPYp9mEINqp2YbYry4g2KfbjNmGINio2KfYudirINin24zYrNin2K8g2YfYstuM2YbZh+KAjNmH2KfbjCDZvtuM2LTigIzYqNuM2YbbjCDZhti02K/ZhyDZhduM4oCM2LTZiNivLiDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYrtix2Kgg2YXZhdqp2YYg2KfYs9iqINio2Kcg2KfYsdiz2KfZhCDZvtuM2KfZhSDYqNiv2YjZhiDYqtij24zbjNivINi02YXYpyDZh9iy24zZhtmH4oCM2YfYp9uM24wg2LHYpyDYqNix2KfbjCDYtNmF2Kcg2KfbjNis2KfYryDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4i2KfYsdiz2KfZhCDYsdmI24zYr9in2K/Zh9in24wgwqvZvtin2LPYruKAjCDYp9iyINi32LHbjNmCINm+24zYp9mFwrsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYr9ix2K7ZiNin2LPYquKAjNmH2Kcg2LHYpyDYqNix2KfbjCDYr9uM2q/YsSDYqNix2YbYp9mF2YfigIzZh9in24wg2b7bjNin2YXigIzYsdiz2KfZhtuMINio2YHYsdiz2KrYryDYqtinINio2Ycg2LHZiNuM2K/Yp9iv2YfYp9uMIMKr2b7Yp9iz2K7igIwg2KfYsiDYt9ix24zZgiDZvtuM2KfZhcK7INio2LHYp9uMINiq2YXYp9iz4oCM2YfYp9uMINiv2LHbjNin2YHYqtuMINix2LPbjNiv2q/bjCDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+Itiu2YjYp9mG2K/ZhiDZvtuM2KfZheKAjNmH2KfbjCDZhtmI2LTYqtin2LHbjCDYtNmF2KcgKNm+24zYp9mF2qkg24zYpyBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+IuKAj9iu2YjYp9mG2K/ZhiDZvtuM2KfZheKAjNmH2KfbjCDZhtmI2LTYqtin2LHbjCDYtNmF2KcgKNm+24zYp9mF2qkg24zYpyBNTVMpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZvtuM2KfZhdqp4oCM2YfYp9uMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg24zYpyDYs9uM2YUg2qnYp9ix2Kog2LTZhdinINix2Kcg2KjYrtmI2KfZhtivLiDYp9uM2YYg2YjbjNqY2q/bjCDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YfZhdmHINm+24zYp9mF2qnigIzZh9inINix2Kcg2LXYsdmB2YbYuNixINin2LIg2YXYrdiq2YjYpyDbjNinINmF2K3YsdmF2KfZhtmHINio2YjYr9mGINii2YbigIzZh9inINio2K7ZiNin2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY5NTk2NzUzMzQ1NzI0MDU1MCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZvtuM2KfZhdqp4oCM2YfYp9uMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2KrZhNmB2YYg24zYpyDYs9uM2YUg2qnYp9ix2Kog2LTZhdinINix2Kcg2KjYrtmI2KfZhtivLiDYp9uM2YYg2YjbjNqY2q/bjCDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YfZhdmHINm+24zYp9mF2qnigIzZh9inINix2Kcg2LXYsdmB2YbYuNixINin2LIg2YXYrdiq2YjYpyDbjNinINmF2K3YsdmF2KfZhtmHINio2YjYr9mGINii2YbigIzZh9inINio2K7ZiNin2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+ItmI24zYsdin24zYtCDZvtuM2KfZheKAjNmH2KfbjCDZhtmI2LTYqtin2LHbjCDYtNmF2KcgKNm+24zYp9mF2qkg24zYpyBNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYr9ixINm+24zYp9mF4oCM2YfYp9uMINqp2YjYqtin2Ycg2LDYrtuM2LHZhyDYtNiv2Ycg2K/YsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDbjNinINiz24zZhSDaqdin2LHYqiDYqNmG2YjbjNiz2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZvtuM2KfZheKAjNmH2KfbjCDYtNmF2Kcg2LHYpyDYrdiw2YEg2YXbjOKAjtqp2YbZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiv2LEg2b7bjNin2YXigIzZh9in24wg2qnZiNiq2KfZhyDYsNiu24zYsdmHINi02K/ZhyDYr9ixINiq2YTZgdmGINuM2Kcg2LPbjNmFINqp2KfYsdiqINio2YbZiNuM2LPYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2b7bjNin2YXigIzZh9in24wg2LTZhdinINix2Kcg2K3YsNmBINqp2YbZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI1OTkxMzk4NzExOTM2NTkwNDEwIj4i2K/YsduM2KfZgdiqINm+24zYp9mF4oCM2YfYp9uMINmG2YjYtNiq2KfYsduMIChXQVApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2b7bjNin2YXigIzZh9in24wgV0FQINix2Kcg2K/YsduM2KfZgdiqINmIINm+2LHYr9in2LLYtCDaqdmG2K8uINin24zZhiDZhdis2YjYsiDZhduM4oCM2KrZiNin2YbYryDZvtuM2KfZheKAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDYtNmF2Kcg2LHYpyDYqNiv2YjZhiDZhtmF2KfbjNi0INii2YbigIzZh9inINio2Ycg2LTZhdinINit2LDZgSDbjNinINqp2YbYqtix2YQg2qnZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4i2KjYp9iy24zYp9io24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv2LEg2K3Yp9mEINin2KzYsdinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNtcyIgbXNnaWQ9IjMyMTY5NTA0NzI2MzYyMTQ3NzQiPiLigI/ZiNuM2LHYp9uM2LQg2b7bjNin2YXigIzZh9in24wg2YbZiNi02KrYp9ix24wg2LTZhdinICjZvtuM2KfZhdqpINuM2KcgTU1TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K/YsSDZvtuM2KfZheKAjNmH2KfbjCDaqdmI2KrYp9mHINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg24zYpyDYs9uM2YUg2qnYp9ix2Kog2KjZhtmI24zYs9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2b7bjNin2YXigIzZh9in24wg2LTZhdinINix2Kcg2K3YsNmBINmF24zigI7aqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYr9ixINm+24zYp9mF4oCM2YfYp9uMINqp2YjYqtin2Ycg2LDYrtuM2LHZhyDYtNiv2Ycg2K/YsSDYqtmE2YHZhiDbjNinINiz24zZhSDaqdin2LHYqiDYqNmG2YjbjNiz2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINm+24zYp9mF4oCM2YfYp9uMINi02YXYpyDYsdinINit2LDZgSDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+IuKAj9iv2LHbjNin2YHYqiDZvtuM2KfZheKAjNmH2KfbjCDZhtmI2LTYqtin2LHbjCAoV0FQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINm+24zYp9mF4oCM2YfYp9uMIFdBUCDYsdinINiv2LHbjNin2YHYqiDZiCDZvtix2K/Yp9iy2LQg2qnZhtivLiDYp9uM2YYg2YXYrNmI2LIg2YXbjOKAjNiq2YjYp9mG2K8g2b7bjNin2YXigIzZh9in24wg2KfYsdiz2KfZhNuMINio2Ycg2LTZhdinINix2Kcg2KjYr9mI2YYg2YbZhdin24zYtCDYotmG4oCM2YfYpyDYqNmHINi02YXYpyDYrdiw2YEg24zYpyDaqdmG2KrYsdmEINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+IuKAj9io2KfYstuM2KfYqNuMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9ixINit2KfZhCDYp9is2LHYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYp9i32YTYp9i52KfYqiDZhdix2KjZiNi3INio2Ycg2qnYp9ix2YfYp9uMINiv2LEg2K3Yp9mEINin2KzYsdin24wg2KfYrtuM2LEg2Ygg2qnZhtmI2YbbjCDYsdinINio2KfYstuM2KfYqNuMINqp2YbYry4g2KfbjNmGINmF2YXaqdmGINin2LPYqiDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINiv2YfYryDYqNmHINin2LfZhNin2LnYp9iqINmF2LHYqNmI2Lcg2KjZhyDYqNix2YbYp9mF2YfigIzZh9in24zbjCDaqdmHINiv2LEg2K/Ys9iq2q/Yp9mHINin2LPYqtmB2KfYr9mHINmF24zigIzYtNmI2YbYryDYr9iz2Kog24zYp9io2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+Itin2LHYqtio2KfYtyDYqNuM2YYg2qnYp9ix2KjYsdin2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iMzY0NjcwOTYzNjIzMzg1Nzg2Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINin2YLYr9in2YXYp9iq24wg2K/YsSDYqNuM2YYg2qnYp9ix2KjYsdin2YYg2YXYrtiq2YTZgSDYr9ixINiv2LPYqtqv2KfZhyDYp9mG2KzYp9mFINiv2YfYry4g2YXZhdqp2YYg2KfYs9iqINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdiu2LHYqCDYp9iyINin24zZhiDZgtin2KjZhNuM2Kog2KjYsdin24wg2YbZgti2INit2YHYp9i42Kog2YXZiNis2YjYryDYr9ixINio24zZhiDaqdin2LHYqNix2KfZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYry4iPC9zdHJpbmc+CkBAIC0yODEsMzMgKzI4NiwzMyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2VycyIgbXNnaWQ9IjE2NzYxNTA5MTE2NzIyODI0MjgiPiLZhdiv24zYsduM2Kog2qnYp9ix2KjYsdin2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2VycyIgbXNnaWQ9Ijg0MDkzMDY2Njc2NDUzNTU2MzgiPiLYqNmHINio2LHZhtin2YXZh+KAjNmH2Kcg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINmF2K/bjNix24zYqiDaqdin2LHYqNix2KfZhtiMINin2LIg2YLYqNuM2YQg2b7Ysdiz2LTYjCDYp9uM2KzYp9ivINmIINit2LDZgSDaqdin2LHYqNix2KfZhtiMINix2Kcg2K/YsSDYr9iz2Krar9in2Ycg2KfZhtis2KfZhSDYr9mH2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4i2KjYp9iy24zYp9io24wg2KzYstim24zYp9iqINio2LHZhtin2YXZh+KAjNmH2KfbjCDYr9ixINit2KfZhCDYp9is2LHYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSIxNTM4MjQ3NDE0NDA3MTc1OTkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9i32YTYp9i52KfYqiDZhdmB2LXZhNuMINmF2LHYqNmI2Lcg2KjZhyDaqdin2LHZh9in24zbjCDaqdmHINiv2LEg2K3Yp9mEINit2KfYttixINmIINin2K7bjNix2KfZiyDYp9is2LHYpyDZhduM4oCO2LTZiNmG2K8g2LHYpyDYqNin2LLbjNin2KjbjCDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LfZhNin2LnYp9iqINi02K7YtduMINmF2LHYqNmI2Lcg2KjZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEg2LHYpyDZvtuM2K/YpyDaqdmG2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9IjIwMTg1NzU1MjY5MzQ0MjI3NzkiPiLYqtmG2LjbjNmFINmF2KzYr9ivINiq2LHYqtuM2Kgg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv2LEg2K3Yp9mEINin2KzYsdinIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVvcmRlclRhc2tzIiBtc2dpZD0iNzczNDIxNzc1NDg3NzQzOTM1MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2KfYsdmH2Kcg2LHYpyDYqNmHINm+24zYtOKAjNiy2YXbjNmG2Ycg2Ygg2b7Ys+KAjNiy2YXbjNmG2Ycg2YXZhtiq2YLZhCDaqdmG2K8uINio2LHZhtin2YXZh+KAjiDZhdmF2qnZhiDYp9iz2Kog2KjYr9mI2YYg2K/Yrtin2YTYqiDYtNmF2Kcg2KfbjNmGINqp2KfYsSDYsdinINin2YbYrNin2YUg2K/Zh9ivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVtb3ZlVGFza3MiIG1zZ2lkPSI2ODIxNTEzNDAxODcwMzc3NDAzIj4i2YXYqtmI2YLZgSDaqdix2K/ZhiDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/YsSDYrdin2YQg2KfYrNix2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW1vdmVUYXNrcyIgbXNnaWQ9IjEzOTQ3MTQzNTIwNjI2MzU0OTMiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDaqdin2LHZh9inINix2Kcg2K3YsNmBINqp2YbYryDZiCDYqNix2YbYp9mF2YfigI7Zh9in24wg2KLZhuKAjNmH2Kcg2LHYpyDZhdiq2YjZgtmBINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigIzYqtmI2KfZhtmG2K8g2K/YsSDYp9is2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSDYp9iu2KrZhNin2YQg2KfbjNis2KfYryDigI7aqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXREZXRhaWxlZFRhc2tzIiBtc2dpZD0iMTUzODI0NzQxNDQwNzE3NTk5Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYt9mE2KfYudin2Kog2YXZgdi12YTbjCDZhdix2KjZiNi3INio2Ycg2qnYp9ix2YfYp9uM24wg2qnZhyDYr9ixINit2KfZhCDYrdin2LbYsSDZiCDYp9iu24zYsdin2Ysg2KfYrNix2Kcg2YXbjOKAjti02YjZhtivINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9i32YTYp9i52KfYqiDYtNiu2LXbjCDZhdix2KjZiNi3INio2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv24zar9ixINix2Kcg2b7bjNiv2Kcg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4i4oCP2KrZhti424zZhSDZhdis2K/YryDYqtix2KrbjNioINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9ixINit2KfZhCDYp9is2LHYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDaqdin2LHZh9inINix2Kcg2KjZhyDZvtuM2LTigIzYstmF24zZhtmHINmIINm+2LPigIzYstmF24zZhtmHINmF2YbYqtmC2YQg2qnZhtivLiDYqNix2YbYp9mF2YfigI4g2YXZhdqp2YYg2KfYs9iqINio2K/ZiNmGINiv2K7Yp9mE2Kog2LTZhdinINin24zZhiDaqdin2LEg2LHYpyDYp9mG2KzYp9mFINiv2YfYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZVRhc2tzIiBtc2dpZD0iNjgyMTUxMzQwMTg3MDM3NzQwMyI+IuKAj9mF2KrZiNmC2YEg2qnYsdiv2YYg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv2LEg2K3Yp9mEINin2KzYsdinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVtb3ZlVGFza3MiIG1zZ2lkPSIxMzk0NzE0MzUyMDYyNjM1NDkzIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2qnYp9ix2YfYpyDYsdinINit2LDZgSDaqdmG2K8g2Ygg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINii2YbigIzZh9inINix2Kcg2YXYqtmI2YLZgSDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCM2KrZiNin2YbZhtivINiv2LEg2KfYrNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEg2KfYrtiq2YTYp9mEINin24zYrNin2K8g4oCO2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY3Rpdml0eVN0YWNrcyIgbXNnaWQ9IjczOTExOTEzODQwMjczMDMwNjUiPiLZhdiv24zYsduM2Kog2b7YtNiq2YfigIzZh9in24wg2YHYudin2YTbjNiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSIxNjE1ODgxOTMzMDM0MDg0NDQwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINm+2LTYqtmH4oCM2YfYp9uMINmB2LnYp9mE24zYqtuMINqp2Ycg2LPYp9uM2LEg2KjYsdmG2KfZhdmH4oCM2YfYpyDYr9ixINii2YbZh9inINin2KzYsdinINmF24zigIzYtNmI2YbYryDYsdinINin2LbYp9mB2Ycg24zYpyDYrdiw2YEg2qnZhtivINmIINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYrtix2Kgg2YXZhdqp2YYg2KfYs9iqINmB2LnYp9mE24zYqiDYqNix2YbYp9mF2YfigIzZh9in24wg2K/bjNqv2LEg2LHYpyDZhdiu2KrZhCDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSIyOTE4NzY4MjM4MDQ1MjA2NDU2Ij4i2LTYsdmI2Lkg2YfYsSDZhtmI2Lkg2YHYudin2YTbjNiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9Ijk5NzgyMzY5NTM0MzU4NDAwMSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDZh9ixINmB2LnYp9mE24zYqtuMINix2Kcg2LTYsdmI2Lkg2qnZhtivINio2K/ZiNmGINin24zZhtqp2Ycg2YjYtti524zYqiDYtdin2K/Ysdi02K/ZhyDbjNinINit2YHYp9i42Kog2KjYpyDZhdis2YjYsiDYr9ixINmG2LjYsSDar9ix2YHYqtmHINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iOTk3ODIzNjk1MzQzNTg0MDAxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINmH2LEg2YHYudin2YTbjNiq24wg2LHYpyDYtNix2YjYuSDaqdmG2K8g2KjYr9mI2YYg2KfbjNmG2qnZhyDZiNi22LnbjNiqINi12KfYr9ix2LTYr9mHINuM2Kcg2K3Zgdin2LjYqiDYqNinINmF2KzZiNiyINiv2LEg2YbYuNixINqv2LHZgdiq2Ycg2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiLYqtmG2LjbjNmFINiz2KfYstqv2KfYsduMINio2Kcg2LXZgdit2YfZlCDZhtmF2KfbjNi0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5MjA0MzYxODY5MzkxNzM3NCI+Itio2Ycg2KjYsdmG2KfZhdmH2ZQg2qnYp9ix2KjYsdiv24wg2KfYrNin2LLZhyDaqdmG2KrYsdmEINit2KfZhNiqINiz2KfYstqv2KfYsduMINi12YHYrdmH2ZQg2YbZhdin24zYtCDYqNix2KfbjCDYqNix2YbYp9mF2YfigIzZh9in24wg2K/bjNqv2LEg2LHYpyDZhduM4oCM2K/Zh9ivLiDYqNix2YbYp9mF2YfigIzZh9in24wg2K7Ysdin2Kjaqdin2LEg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINqp2KfYsdqp2LHYryDZhtin2K/Ysdiz2Kog2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCM2YfYpyDYtNmI2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldERlYnVnQXBwIiBtc2dpZD0iMzAyMjEwNzE5ODY4NjU4NDA1MiI+ItmB2LnYp9mEINqp2LHYr9mGINi524zYqOKAjNuM2KfYqNuMINio2LHZhtin2YXZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldERlYnVnQXBwIiBtc2dpZD0iNDQ3NDUxMjQxNjI5OTAxMzI1NiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINi524zYqOKAjNuM2KfYqNuMINix2Kcg2KjYsdin24wg2KjYsdmG2KfZhdmH4oCM2KfbjCDYr9uM2q/YsSDZgdi52KfZhCDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINin2KzYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv24zar9ixINix2Kcg2YXYqtmI2YLZgSDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXREZWJ1Z0FwcCIgbXNnaWQ9IjQ0NzQ1MTI0MTYyOTkwMTMyNTYiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYuduM2KjigIzbjNin2KjbjCDYsdinINio2LHYp9uMINio2LHZhtin2YXZh+KAjNin24wg2K/bjNqv2LEg2YHYudin2YQg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDYp9is2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSDYsdinINmF2KrZiNmC2YEg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb25maWd1cmF0aW9uIiBtc2dpZD0iNDE2MjA5MjE4NTEyNDIzNDQ4MCI+Itiq2LrbjNuM2LEg2KrZhti424zZhdin2Kog2YbZhdin24zYtNqv2LEg2LPbjNiz2KrZhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7bjNqp2LHYqNmG2K/bjCDZgdi52YTbjNiMINin2LIg2YLYqNuM2YQg2KfZhtiv2KfYstmHINqp2YTbjCDZgtmE2YUg24zYpyDZhdit2YTYjCDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7bjNqp2LHYqNmG2K/bjCDZgdi52YTbjNiMINin2LIg2YLYqNuM2YQg2KfZhtiv2KfYstmHINqp2YTbjCDZgtmE2YUg24zYpyDZhdit2YTYjCDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjU2ODQ1MDQwNTgxOTI5MjEwOTgiPiLZgdi52KfZhCDaqdix2K/ZhiDYrdin2YTYqiDYrtmI2K/YsdmIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrdin2YTYqiDYrtmI2K/YsdmIINix2Kcg2YHYudin2YQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI0ODUzMTg3NDI1NzUxNDE5NDY3Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K3Yp9mE2Kog2K7ZiNiv2LHZiCDYsdinINmB2LnYp9mEINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+Itio2LPYqtmGINiz2KfbjNixINio2LHZhtin2YXZh+KAjNmH2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjQ1OTMzNTMyMzU5NTk3MzMxMTkiPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2KjZhyDZgdix2KLbjNmG2K/Zh9in24wg2b7Ys+KAjNiy2YXbjNmG2Ycg2LPYp9uM2LEg2KjYsdmG2KfZhdmH4oCM2YfYpyDZvtin24zYp9mGINiv2YfYry4g2KfbjNmGINmF2YXaqdmGINin2LPYqiDYqNin2LnYqyDYtNmI2K8g2LPYp9uM2LEg2KjYsdmG2KfZhdmH4oCM2YfYpyDZhdiq2YjZgtmBINi02YjZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSIyMzI5NjI3NDI4ODMyMDY3NzAwIj4i2KrZiNmC2YEg2KfYrNio2KfYsduMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2Ycg2KfYrNio2KfYsSDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEg2LHYpyDZhdiq2YjZgtmBINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+IuKAj9iq2YjZgtmBINin2KzYqNin2LHbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjUyNTMxNTcyOTYxODM5NDA4MTIiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINin2KzYqNin2LEg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv24zar9ixINix2Kcg2YXYqtmI2YLZgSDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZUJhY2siIG1zZ2lkPSI2NTI5MzUyMDQwNzI1ODQ2MTYiPiLYqNiz2KrZhiDYp9is2KjYp9ix24wg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZm9yY2VCYWNrIiBtc2dpZD0iMzg5MjI5NTgzMDQxOTUxMzYyMyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2LHZhtin2YXZh+KAjNin24wg2LHYpyDaqdmHINiv2LEg2b7bjNi0INiy2YXbjNmG2Ycg2KfYs9iqINio2KjZhtiv2K8g2Ygg2KjYsdqv2LHYr9ivLiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZm9yY2VCYWNrIiBtc2dpZD0iMzg5MjI5NTgzMDQxOTUxMzYyMyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2LHZhtin2YXZh+KAjNin24wg2LHYpyDaqdmHINiv2LEg2b7bjNi0INiy2YXbjNmG2Ycg2KfYs9iqINio2KjZhtiv2K8g2Ygg2KjYsdqv2LHYr9ivLiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kdW1wIiBtc2dpZD0iMTY4MTc5OTg2MjQzODk1NDc1MiI+Itio2KfYstuM2KfYqNuMINmI2LbYuduM2Kog2K/Yp9iu2YTbjCDYs9uM2LPYqtmFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZHVtcCIgbXNnaWQ9IjE3NzgyOTkwODg2OTIyOTAzMjkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZiNi22LnbjNiqINiv2KfYrtmE24wg2LPbjNiz2KrZhSDYsdinINio2KfYstuM2KfYqNuMINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfZhtmI2KfYuSDZhdiu2KrZhNmB24wg2KfYsiDYp9i32YTYp9i52KfYqiDYrti12YjYtduMINmIINin2YXZhiDYsdinINqp2Ycg2YXYudmF2YjZhNinINio2Ycg2KLZhuKAjNmH2Kcg2YbbjNin2LIg2YbYr9in2LHZhtiv2Iwg2KjYp9iy24zYp9io24wg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZHVtcCIgbXNnaWQ9IjE3NzgyOTkwODg2OTIyOTAzMjkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZiNi22LnbjNiqINiv2KfYrtmE24wg2LPbjNiz2KrZhSDYsdinINio2KfYstuM2KfYqNuMINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfZhtmI2KfYuSDZhdiu2KrZhNmB24wg2KfYsiDYp9i32YTYp9i52KfYqiDYrti12YjYtduMINmIINin2YXZhiDYsdinINqp2Ycg2YXYudmF2YjZhNinINio2Ycg2KLZhuKAjNmH2Kcg2YbbjNin2LIg2YbYr9in2LHZhtiv2Iwg2KjYp9iy24zYp9io24wg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjgwMjI1ODg2MDg5OTQ1ODk5MzgiPiLYqNin2LLbjNin2KjbjCDZhdit2KrZiNin24wg2LXZgdit2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjMxOTMyNjkwNjk0Njk3MDAyNjUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhdit2KrZiNin24wg2b7Zhtis2LHZhyDZgdi52KfZhCDYsdinINio2KfYstuM2KfYqNuMINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2qnZhCDZhdit2KrZiNin24wg2b7Zhtis2LHZhyDYsdinINio2KfYstuM2KfYqNuMINqp2YbZhtivINmIINmH2YXZhyDZhdiq2YYg2KLZhtix2Kcg2KjZhyDYutuM2LEg2KfYsiDar9iw2LHZiNin2pjZh+KAjtmH2Kcg2KfZhdiq2K3Yp9mGINqp2YbZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iMzE5MzI2OTA2OTQ2OTcwMDI2NSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmF2K3YqtmI2KfbjCDZvtmG2KzYsdmHINmB2LnYp9mEINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDaqdmEINmF2K3YqtmI2KfbjCDZvtmG2KzYsdmHINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtmG2K8g2Ygg2YfZhdmHINmF2KrZhiDYotmG2LHYpyDYqNmHINi624zYsSDYp9iyINqv2LDYsdmI2KfamNmH4oCO2YfYpyDYp9mF2KrYrdin2YYg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl90ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIyMzEyNjEyMTM1MTI3MzEwMjU0Ij4i2YLYp9io2YTbjNiqINiv2LPYqtix2LPbjCDYqNmHINi32YjYsSDZhdmI2YLYqiDZgdi52KfZhCDYtNmI2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4i2KjZhyDbjNqpINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KjZhyDYtdmI2LHYqiDZhdmI2YLYqiDZgtin2KjZhNuM2Kog2K/Ys9iq2LHYs9uMINix2Kcg2K/YsSDYr9iz2Krar9in2Ycg2YHYudin2YQg2qnZhtivLiDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYrtix2Kgg2YXbjOKAjNiq2YjYp9mG2YbYryDZgtin2KjZhNuM2Kog2K/Ys9iq2LHYs9uMINix2Kcg2KjYr9mI2YYg2LHYttin24zYqiDaqdin2LHYqNixINmB2LnYp9mEINqp2YbZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI4NTMyMjk1MTk5MTEyNTE5Mzc4Ij4i2KjYp9iy24zYp9io24wg2KfYt9mE2KfYudin2Kog2b7Zhtis2LHZhyI8L3N0cmluZz4KQEAgLTMxOSwxMjQgKzMyNCwxMjYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2h1dGRvd24iIG1zZ2lkPSI3MTg1NzQ3ODI0MDM4OTA5MDE2Ij4i2K7Yp9mF2YjYtCDYtNiv2YYg2KzYstim24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaHV0ZG93biIgbXNnaWQ9IjcwNDY1MDA4Mzg3NDYyOTE3NzUiPiLZhdiv24zYsSDZgdi52KfZhNuM2Kog2LHYpyDYr9ixINit2KfZhNiqINiu2KfZhdmI2LTbjCDZgtix2KfYsSDZhduM4oCM2K/Zh9ivLiDYrtin2YXZiNi024wg2LHYpyDYqNmHINi12YjYsdiqINqp2KfZhdmEINin2YbYrNin2YUg2YbZhduM4oCM2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iNDEzODYwODYxMDcxNzQyNTU3MyI+ItmF2YXYp9mG2LnYqiDYp9iyINis2KfYqNis2KfbjNuMINio2LHZhtin2YXZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjgyNjIxOTU4MDI1ODIyNTUwMjEiPiLYp9is2KfYstmHINmG2YXbjOKAjtiv2YfYryDaqdin2LHYqNixINio2Ycg2KjYsdmG2KfZhdmHINiv24zar9ix24wg2KjYsdmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iODI2MjE5NTgwMjU4MjI1NTAyMSI+IuKAj9in2KzYp9iy2Ycg2YbZhduM4oCO2K/Zh9ivINqp2KfYsdio2LEg2KjZhyDYqNix2YbYp9mF2Ycg2K/bjNqv2LHbjCDYqNix2YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1Mzc5MjIzMTE0MTE1NDYwMTYiPiLYr9ix24zYp9mB2Kog2KfYt9mE2KfYudin2Kog2KjYsdmG2KfZhdmHINmB2LnZhNuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUxMjQ0ODg1NTQ5NjA2NzEzMSI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYp9i32YTYp9i52KfYqiDYrti12YjYtduMINmF2LHYqNmI2Lcg2KjZhyDYqNix2YbYp9mF2Ycg2YHYudmE24wg2LHYpyDYr9ixINm+24zYtCDYstmF24zZhtmHINi12YHYrdmHINio2KfYstuM2KfYqNuMINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9Ijg5MjIzOTA5NDg2NzE4MjY1NiI+ItmG2LjYp9ix2Kog2Ygg2qnZhtiq2LHZhCDYsdin2YfigIzYp9mG2K/Yp9iy24wg2YfZhdmHINio2LHZhtin2YXZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtit2YjZhyDYsdin2YfigIzYp9mG2K/Yp9iy24wg2YHYudin2YTbjNiq4oCM2YfYp9uMINiz24zYs9iq2YUg2LHYpyDaqdmG2KrYsdmEINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2qnYp9mF2YTYpyDYqNinINiz24zYs9iq2YUg2LPYp9iy2q/Yp9ixINi02YjZhtivLiDYp9uM2YYg2YXYrNmI2LIg2YHZgti3INio2LHYp9uMINiq2YjYs9i52Ycg2YbbjNin2LIg2KfYs9iqINmIINio2LHYp9uMINin2LPYqtmB2KfYr9mHINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtit2YjZhyDYsdin2YfigIzYp9mG2K/Yp9iy24wg2YHYudin2YTbjNiq4oCM2YfYp9uMINiz24zYs9iq2YUg2LHYpyDaqdmG2KrYsdmEINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2qnYp9mF2YTYpyDYqNinINiz24zYs9iq2YUg2LPYp9iy2q/Yp9ixINi02YjZhtivLiDYp9uM2YYg2YXYrNmI2LIg2YHZgti3INio2LHYp9uMINiq2YjYs9i52Ycg2YbbjNin2LIg2KfYs9iqINmIINio2LHYp9uMINin2LPYqtmB2KfYr9mHINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSIyNTc2MzMzNDM0ODkzNTMyNDc1Ij4i2KfYsdiz2KfZhCDZvtiu2LQg2KjYs9iq2Ycg2K3YsNmBINi02K/ZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINin2LnZhNin2YYg2K3YsNmBINio2LPYqtmHINio2LHZhtin2YXZhyDYsdinINm+2K7YtCDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINmH2LEg2KjYsdmG2KfZhdmHINiv2LEg2K3Yp9mEINin2KzYsdin24wg2K/bjNqv2LEg2LHYpyDYp9iyINio24zZhiDYqNio2LHYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjY2MjE5MDEyMTYyMDc5MzEwODkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9i52YTYp9mGINit2LDZgSDYqNiz2KrZhyDYqNix2YbYp9mF2Ycg2LHYpyDZvtiu2LQg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDZh9ixINio2LHZhtin2YXZhyDYr9ixINit2KfZhCDYp9is2LHYp9uMINiv24zar9ixINix2Kcg2KfYsiDYqNuM2YYg2KjYqNix2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiLYp9ix2LPYp9mEINm+2K7YtCDYr9ix24zYp9mB2Kog2LTYr9mHINiq2YjYs9i3INm+24zYp9mF2qkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9i52YTYp9mGINiv2LHbjNin2YHYqiDZvtuM2KfZhSDaqdmI2KrYp9mHINix2Kcg2b7Yrti0INqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfYsiDYp9uM2YYg2KjYsdin24wg2KzYudmEINm+24zYp9mF4oCM2YfYp9uMINqp2YjYqtin2Ycg2YjYsdmI2K/bjCDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4i2KfYsdiz2KfZhCDZvtiu2LQg2K/YsduM2KfZgdiqINi02K/ZhyDYqtmI2LPYtyBXQVAtUFVTSCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYudmE2KfZhtuMINix2Kcg2b7Yrti0INqp2YbYryDaqdmHINm+24zYp9mFIFdBUCBQVVNIINiv2LHbjNin2YHYqiDaqdix2K/ZhyDYp9iz2KouINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINiv2LHbjNin2YHYqiDZvtuM2KfZhSBNTVMg2LHYpyDYrNi52YQg2qnZhtmG2K8g24zYpyDZhdit2KrZiNin24wg2YfYsSDYtdmB2K3Zh9mUINmI2Kgg2LHYpyDYqNinINin2YbZiNin2Lkg2YXYrtix2Kgg2KzYp9uM2q/YstuM2YYg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI0MTUyMDM3NzIwMDM0MzY1NDkyIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYudmE2KfZhiDYr9ix24zYp9mB2Kog2b7bjNin2YUg2qnZiNiq2KfZhyDYsdinINm+2K7YtCDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KfbjNmGINio2LHYp9uMINis2LnZhCDZvtuM2KfZheKAjNmH2KfbjCDaqdmI2KrYp9mHINmI2LHZiNiv24wg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+IuKAj9in2LHYs9in2YQg2b7Yrti0INiv2LHbjNin2YHYqiDYtNiv2Ycg2KrZiNiz2LcgV0FQLVBVU0giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iNDc4MzQwMjUyNTAzOTQ0MjcyOSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINin2LnZhNin2YbbjCDYsdinINm+2K7YtCDaqdmG2K8g2qnZhyDZvtuM2KfZhSBXQVAgUFVTSCDYr9ix24zYp9mB2Kog2qnYsdiv2Ycg2KfYs9iqLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDYr9ix24zYp9mB2Kog2b7bjNin2YUgTU1TINix2Kcg2KzYudmEINqp2YbZhtivINuM2Kcg2YXYrdiq2YjYp9uMINmH2LEg2LXZgdit2YfZlCDZiNioINix2Kcg2KjYpyDYp9mG2YjYp9i5INmF2K7YsdioINis2KfbjNqv2LLbjNmGINqp2YbZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iMjQ1MTg3MzY2NDM2MzY2MjY2NiI+ItmF2K3Yr9mI2K8g2qnYsdiv2YYg2KrYudiv2KfYryDZgdix2KLbjNmG2K/Zh9in24wg2K/YsSDYrdin2YQg2KfYrNix2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K3Yr9in2qnYq9ixINiq2LnYr9in2K8g2b7Ysdiv2KfYsti02YfYp9uM24wg2LHYpyDaqdmHINin2KzYsdinINiu2YjYp9mH2K8g2LTYryDaqdmG2KrYsdmEINqp2YbYry4g2YfYsdqv2LIg2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmE2KfYstmFINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjczMTgwNjEzMTQwNDA4Nzk1NDIiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrdiv2Kfaqdir2LEg2KrYudiv2KfYryDZvtix2K/Yp9iy2LTZh9in24zbjCDYsdinINqp2Ycg2KfYrNix2Kcg2K7ZiNin2YfYryDYtNivINqp2YbYqtix2YQg2qnZhtivLiDZh9ix2q/YsiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YTYp9iy2YUg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiLYqNiz2KrZhiDYp9is2KjYp9ix24wg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINm+2LPigIzYstmF24zZhtmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNzQ3MTMxMDY1Mjg2ODg0MTQ5OSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2Ycg2YXYrdi2INin24zZhtqp2Ycg2YHYudin2YTbjNiq2YfYpyDYqNmHINm+2LPigIzYstmF24zZhtmHINix2YHYqtmG2K8g2KrZhdin2YUg2LTZiNmG2K8uINio2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2KfYstuMINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINmF2K3YtiDYp9uM2YbaqdmHINmB2LnYp9mE24zYqtmH2Kcg2KjZhyDZvtiz4oCM2LLZhduM2YbZhyDYsdmB2KrZhtivINiq2YXYp9mFINi02YjZhtivLiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNin2LLbjCDZhtuM2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiLYrtmI2KfZhtiv2YYg2KLZhdin2LEg2KjYp9iq2LHbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjU4OTczNDY1ODI4ODI5MTUxMTQiPiLYqNmHINuM2qkg2KjYsdmG2KfZhdmHINqp2KfYsdio2LHYr9uMINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDaqdmHINiv2KfYr9mH4oCM2YfYp9uMINin2LPYqtmB2KfYr9mHINqp2YbZhtiv2Ycg2KfYsiDZhduM2LLYp9mGINio2KfYqtix24wg2qnZhSDaqdmG2YjZhtuMINix2Kcg2KjYrtmI2KfZhtivLiDYp9uM2YYg2qnYp9ixINmF2YXaqdmGINin2LPYqiDYqNmHINio2LHZhtin2YXZhyDYp9uM2YYg2KfZhdqp2KfZhiDYsdinINio2K/Zh9ivINqp2Ycg2KfYt9mE2KfYudin2Kog2KzYstim24wg2K/Ysdio2KfYsdmHINio2LHZhtin2YXZh+KAjNmH2KfbjNuMINqp2Ycg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjNqp2YbbjNiv2Iwg2KjYr9iz2Kog2KLZiNix2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIzNzE5Njg5NzY0NTM2Mzc5NTU3Ij4i2KfYtdmE2KfYrSDYotmF2KfYsSDYqNin2KrYsduMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQmF0dGVyeVN0YXRzIiBtc2dpZD0iNjg2MjgxNzg1NzE3ODAyNTAwMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINii2YXYp9ixINis2YXYueKAjNii2YjYsduMINi02K/ZhyDYqNin2KrYsduMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KLZhdin2LEg2KzZhdi54oCM2KLZiNix24wg2LTYr9mHINio2KfYqtix24wg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSIxNTA4Nzc5Njg3NDM2NTg1NzQ0Ij4i2KjYp9iy24zYp9io24wg2KLZhdin2LEg2YXYsdio2YjYtyDYqNmHINqp2KfYsdqp2LHYryDYqNix2YbYp9mF2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjYyNDM4ODcwNDE1Nzc5MTI4NzciPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2KLZhdin2LEg2KzZhdi54oCM2KLZiNix24wg2LTYr9mHINmF2LHYqNmI2Lcg2KjZhyDYudmF2YTaqdix2K8g2KjYsdmG2KfZhdmHINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqtmI2LPYtyDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYudmF2YjZhNuM2Iwg2K/YsSDZhti42LEg2q/YsdmB2KrZhyDZhti02K/ZhyDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9Ijg4MjkwOTczNzM4NTE1MjE1MDUiPiLYqti624zbjNixINii2YXYp9ixINqp2KfYsdqp2LHYryDYqNix2YbYp9mF2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9IjUwNzg0NTk2NTk0NDAzNDgzIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDYqti624zbjNixINii2YXYp9ixINqp2KfYsdqp2LHYryDYrNmF2LnigIzYotmI2LHbjCDYtNiv2Ycg2KfYsiDYqNix2YbYp9mF2Ycg2LHYpyDZhduM4oCM2K/Zh9ivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqtmI2LPYtyDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYudmF2YjZhNuMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmFja3VwIiBtc2dpZD0iNDcwMDEzMDIyODY1NDUzOTIwIj4i2qnZhtiq2LHZhCDZhtiz2K7Zh9mUINm+2LTYqtuM2KjYp9mGINiz24zYs9iq2YUg2Ygg2KjYp9iy24zYp9io24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYWNrdXAiIG1zZ2lkPSI2OTEyMjMwNTI1MTQwNTg5ODkxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINm+2LTYqtuM2KjYp9mGINiz24zYs9iq2YUg2LHYpyDaqdmG2KrYsdmEINqp2YbYryDZiCDZhdqp2KfZhtuM2LPYqtmFINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmFja3VwIiBtc2dpZD0iNjkxMjIzMDUyNTE0MDU4OTg5MSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDZvti02KrbjNio2KfZhiDYs9uM2LPYqtmFINix2Kcg2qnZhtiq2LHZhCDaqdmG2K8g2Ygg2YXaqdin2YbbjNiz2KrZhSDYsdinINio2KfYstuM2KfYqNuMINqp2YbYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiLYqtmH24zZh9mUINmG2LPYrtmH2ZQg2b7YtNiq24zYqNin2YYg2qnYp9mF2YQg2LHYpyDYqtij24zbjNivINqp2LHYr9mHINuM2Kcg2LnZhdmE24zYp9iqINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtuM2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maXJtX2Z1bGxfYmFja3VwIiBtc2dpZD0iMTc0ODc2MjE3MTYzNzY5OTU2MiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINix2KfYqNi3INqp2KfYsdio2LEg2KrYp9uM24zYryDZhtiz2K7ZhyDaqdin2YXZhCDZvti02KrbjNio2KfZhiDYsdinINix2KfZh+KAjNin2YbYr9in2LLbjCDaqdmG2K8uINmH2LEg2KjYsdmG2KfZhdmH4oCM2KfbjCDZhtmF24zigI7YqtmI2KfZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjE3NDg3NjIxNzE2Mzc2OTk1NjIiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYsdin2KjYtyDaqdin2LHYqNixINiq2KfbjNuM2K8g2YbYs9iu2Ycg2qnYp9mF2YQg2b7YtNiq24zYqNin2YYg2LHYpyDYsdin2YfigIzYp9mG2K/Yp9iy24wg2qnZhtivLiDZh9ixINio2LHZhtin2YXZh+KAjNin24wg2YbZhduM4oCO2KrZiNin2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSIyMTQ4NTYzNjI4MTQwMTkzMjMxIj4i2YbZhdin24zYtCDZvtmG2KzYsdmH4oCM2YfYp9uMINi624zYsdmF2KzYp9iyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINm+2YbYrNix2YfigI7Zh9in24zbjCDYsdinINin24zYrNin2K8g2qnZhtivINqp2Ycg2YXbjOKAjtiu2YjYp9mH2K8g2KrZiNiz2Lcg2LHYp9io2Lcg2qnYp9ix2KjYsSDYs9uM2LPYqtmFINiv2KfYrtmE24wg2KfYs9iq2YHYp9iv2Ycg2LTZiNivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINm+2YbYrNix2YfigI7Zh9in24zbjCDYsdinINin24zYrNin2K8g2qnZhtivINqp2Ycg2YXbjOKAjtiu2YjYp9mH2K8g2KrZiNiz2Lcg2LHYp9io2Lcg2qnYp9ix2KjYsSDYs9uM2LPYqtmFINiv2KfYrtmE24wg2KfYs9iq2YHYp9iv2Ycg2LTZiNivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9IjM1NDMzNDc5ODA4Mzk1MTg2MTMiPiLYqtix2LPbjNmFINix2YjbjCDYqNix2YbYp9mF2YfigIzZh9in24wg2K/bjNqv2LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9Ijg1ODQ2NzgzODE5NzI4MjAxMTgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2qnZhyDYr9ixINio2KfZhNinINuM2Kcg2KjYrti04oCM2YfYp9uM24wg2KfYsiDYsdin2KjYtyDaqdin2LHYqNix24wg2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINqp2KfYsdio2LHYr9uMINmF2KrYtdmEINi02YjYry4g2KfbjNmGINqp2KfYsSDZhduM4oCM2KrZiNin2YbYryDYr9ixINin2LPYqtmB2KfYr9mHINi02YXYpyDYp9iyINix2KfYqNi3INmH2LEg2KjYsdmG2KfZhdmHINqp2KfYsdio2LHYr9uMINiq2K/Yp9iu2YQg2KfbjNis2KfYryDaqdmG2K8g24zYpyDYotmG2obZhyDYsdinINqp2Ycg2KjZhyDZhti42LEg2K7ZiNivINiv2LEg2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINqp2KfYsdio2LHYr9uMINmF24zigIzYqNuM2YbbjNiv2Iwg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiLYp9i12YTYp9itINiz2LHYudiqINin2YbbjNmF24zYtNmGINqp2YTbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iNzY5MDA2MzQyODkyNDM0MzU3MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYs9ix2LnYqiDaqdmE24wg2KfZhtuM2YXbjNi02YYg2LHYpyDZh9ixINiy2YXYp9mGINqp2Ycg2KjYrtmI2KfZh9ivINiq2LrbjNuM2LEg2K/Zh9ivICjYp9mG24zZhduM2LTZhuKAjtmH2KfbjCDYs9ix24zYudiq2LEg24zYpyDYotmH2LPYqtmH4oCO2KrYsSkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSIxMjg2NTA1NzE3MDUwMTIxMzcwIj4i2YXYr9uM2LHbjNiqINmG2LTYp9mG2YfigI7Zh9in24wg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqNinINin24zYrNin2K8g2qnZhtin2LHar9iw2LEg2KfYsiDYs9mB2KfYsdi0INi52KfYr9uMIFrYjCDZhti02KfZhtmH4oCO2YfYp9uMINiu2YjYryDYsdinINin24zYrNin2K8g2Ygg2YXYr9uM2LHbjNiqINqp2YbYry4g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9Ijc2OTAwNjM0Mjg5MjQzNDM1NzEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2LPYsdi52Kog2qnZhNuMINin2YbbjNmF24zYtNmGINix2Kcg2YfYsSDYstmF2KfZhiDaqdmHINio2K7ZiNin2YfYryDYqti624zbjNixINiv2YfYryAo2KfZhtuM2YXbjNi02YbigI7Zh9in24wg2LPYsduM2LnYqtixINuM2Kcg2KLZh9iz2KrZh+KAjtiq2LEpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+IuKAj9mF2K/bjNix24zYqiDZhti02KfZhtmH4oCO2YfYp9uMINio2LHZhtin2YXZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KjYpyDYp9uM2KzYp9ivINqp2YbYp9ix2q/YsNixINin2LIg2LPZgdin2LHYtCDYudin2K/bjCBa2Iwg2YbYtNin2YbZh+KAjtmH2KfbjCDYrtmI2K8g2LHYpyDYp9uM2KzYp9ivINmIINmF2K/bjNix24zYqiDaqdmG2K8uINio2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhdmI2LHYryDZhtuM2KfYsiDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mcmVlemVTY3JlZW4iIG1zZ2lkPSI0NzA4MTgxMTg0NDQxODgwMTc1Ij4i2KvYp9io2Kog2Ybar9mHINiv2KfYtNiq2YYg2LXZgdit2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mcmVlemVTY3JlZW4iIG1zZ2lkPSI4NTU4OTIzNzg5MjIyNjcwMDY0Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2qnYp9ix2KjYsdiv24wg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2YXZiNmC2KrYp9mLINi12YHYrdmHINix2Kcg2KjYsdin24wg24zaqSDYp9mG2KrZgtin2YQg2KrZhdin2YUg2LXZgdit2Ycg2KvYp9io2Kog2Ybar9mHINiv2KfYsdivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5qZWN0RXZlbnRzIiBtc2dpZD0iMTM3ODc0NjU4NDAyMzU4NjYwMCI+Itqp2YTbjNiv2YfYpyDZiCDYr9qp2YXZh+KAjNmH2KfbjCDaqdmG2KrYsdmEINix2Kcg2YHYtNin2LEg2K/Zh9uM2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNjM1MjU2NTU5OTk2ODYzMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINix2YjbjNiv2KfYr9mH2KfbjCDZiNix2YjYr9uMINiu2YjYryAo2YHYtNix2K/ZhiDaqdmE24zYr9mH2Kcg2Ygg2LrbjNix2YcpINix2Kcg2KrYrdmI24zZhCDYr9mH2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINqp2KfYsdqp2LHYryDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINqp2YbYqtix2YQg2qnZhtmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5qZWN0RXZlbnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjUzMTI4MDU3NTcyMzI2MjUzIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LHZiNuM2K/Yp9iv2YfYp9uMINmI2LHZiNiv24wg2K7ZiNivINix2Kcg2KjZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEg2KrYrdmI24zZhCDYr9mH2K8gKNmB2LTYsdiv2YYg2qnZhNuM2K/Zh9inINmIINi624zYsdmHKS4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfYsiDYotmGINio2LHYp9uMINqp2YbYqtix2YQg2qnYp9ix2qnYsdivINiq2YTZgdmGINin2LPYqtmB2KfYr9mHINqp2YbZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LHZiNuM2K/Yp9iv2YfYp9uMINmI2LHZiNiv24wg2K7ZiNivICjZgdi02LHYr9mGINqp2YTbjNiv2YfYpyDZiCDYutuM2LHZhykg2LHYpyDYqtit2YjbjNmEINiv2YfYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfYsiDYotmGINin2LPYqtmB2KfYr9mHINqp2YbZhtivINiq2Kcg2qnYp9ix2qnYsdivINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2qnZhtiq2LHZhCDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTMxMjgwNTc1NzIzMjYyNTMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYsdmI24zYr9in2K/Zh9in24wg2YjYsdmI2K/bjCDYrtmI2K8g2LHYpyDYqNmHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSDYqtit2YjbjNmEINiv2YfYryAo2YHYtNix2K/ZhiDaqdmE24zYr9mH2Kcg2Ygg2LrbjNix2YcpLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KjYsdin24wg2qnZhtiq2LHZhCDaqdin2LHaqdix2K8g2KrZhNmB2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjQ2OTQyODkwMDA0MTI0OTIzNCI+ItmF2YjYp9ix2K/bjCDaqdmHINmF24zigIzZhtmI24zYs9uM2K8g2Ygg2qnYp9ix2YfYp9uM24wg2qnZhyDYp9mG2KzYp9mFINmF24zigIzYr9mH24zYryDYsdinINi22KjYtyDaqdmG24zYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iODM4Nzc1NDkwMTY4ODcyODA0MyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2YTbjNiv2YfYp9uM24wg2LHYpyDaqdmHINmH2Ybar9in2YUg2KrYudin2YXZhCDYqNinINio2LHZhtin2YXZh9mUINiv24zar9ixINmB2LTYp9ixINmF24zigI7Yr9mH24zYryDYqNio24zZhtivICjZhdin2YbZhtivINiq2KfbjNm+INqp2LHYr9mGINqv2LDYsdmI2KfamNmHKS4g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iODM4Nzc1NDkwMTY4ODcyODA0MyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2YTbjNiv2YfYp9uM24wg2LHYpyDaqdmHINmH2Ybar9in2YUg2KrYudin2YXZhCDYqNinINio2LHZhtin2YXZh9mUINiv24zar9ixINmB2LTYp9ixINmF24zigI7Yr9mH24zYryDYqNio24zZhtivICjZhdin2YbZhtivINiq2KfbjNm+INqp2LHYr9mGINqv2LDYsdmI2KfamNmHKS4g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzM2MDA2NDYyMDIzMDUxNTc3NiI+Itm+24zZiNmG2K8g2LTYr9mHINio2Ycg2LHZiNi0INmI2LHZiNiv24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMjUwNDQwMzIyODA3Mjg2MzMxIj4i2KjZhyDYr9in2LHZhtiv2Ycg2KfbjNmGINiv2LPYqtqv2KfZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINix2KfYqNi3INiz2LfYrSDYqNin2YTYp9uMINuM2qkg2LHZiNi0INmI2LHZiNiv24wg2YXYqti12YQg2LTZiNivLiDYp9uM2YYg2YjbjNqY2q/bjCDZh9uM2obar9in2Ycg2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2LnZhdmI2YTbjCDYttix2YjYsduMINmG2YXbjOKAjtio2KfYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMyNTA0NDAzMjI4MDcyODYzMzEiPiLigI/YqNmHINiv2KfYsdmG2K/ZhyDYp9uM2YYg2K/Ys9iq2q/Yp9mHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2Ycg2LHYp9io2Lcg2LPYt9itINio2KfZhNin24wg24zaqSDYsdmI2LQg2YjYsdmI2K/bjCDZhdiq2LXZhCDYtNmI2K8uINin24zZhiDZiNuM2pjar9uMINmH24zahtqv2KfZhyDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYudmF2YjZhNuMINi22LHZiNix24wg2YbZhduM4oCO2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI1MzU3NzMzOTQyNTU2MDMxNTkzIj4i2KfYqti12KfZhCDYqNmHINiz2LHZiNuM2LMg2K/Ys9iq2LHYs9uMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDaqdmHINio2Ycg2LHYp9io2Lcg2LPYt9itINio2KfZhNin24wg2LPYsdmI24zYsyDYr9iz2KrYsdiz24wg2YXYqti12YQg2LTZiNivLiDZh9ix2q/YsiDYqNix2KfbjCDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYudmF2YjZhNuMINmF2YjYsdivINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFByaW50U2VydmljZSIgbXNnaWQ9Ijg0NjI4MTUxNzk1NzI3NDg3NjEiPiLYp9iq2LXYp9mEINio2Ycg24zaqSDYs9ix2YjbjNizINqG2KfZviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI3OTYwMDY3NjIzMjA5MTExMTM1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2KjZhyDYsdin2KjYtyDYs9i32K0g2KjYp9mE2KfbjCDYs9ix2YjbjNizINqG2KfZviDZhdiq2LXZhCDYtNmI2K8uINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi52YXZiNmE24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTcG9vbGVyU2VydmljZSIgbXNnaWQ9IjY4MDc3NjI3ODM3NDQxMjU5NTQiPiLYp9iq2LXYp9mEINio2Ycg2LPYsdmI24zYsyDZh9mF2KfZh9mG2q/igIzaqdmG2YbYr9mHINqG2KfZviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iMzY4MDU1MjI4NTkzMzMxODM3MiI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDaqdmHINio2Ycg2YjYp9iz2Lcg2LPYt9itINio2KfZhNin24wg2LPYsdmI24zYsyDZh9mF2KfZh9mG2q/igIzaqdmG2YbYr9mHINqG2KfZviDZhdiq2LXZhCDYtNmI2K8uINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi52YXZiNmE24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjI3NTI3MzEzMDA0MTk0MTA3MjQiPiLYp9iq2LXYp9mEINio2Ycg2LPYsdmI24zYsyBORkMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiLYqNmHINiv2KfYsdmG2K/ZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KjZhyDYqNix2YbYp9mF2YfigIzZh9in24zbjCDZhdiq2LXZhCDYtNmI2K8g2qnZhyDZhdi02KfYqNmHINio2Kcg2qnYp9ix2KrigIzZh9in24wgTkZDINi52YXZhCDZhduM4oCM2qnZhtmG2K8uINmH2LHar9iyINmG2KjYp9uM2K8g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINio2KfYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSIyNzUyNzMxMzAwNDE5NDEwNzI0Ij4i4oCP2KfYqti12KfZhCDYqNmHINiz2LHZiNuM2LMgTkZDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4i4oCP2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Ycg2KjYsdmG2KfZhdmH4oCM2YfYp9uM24wg2YXYqti12YQg2LTZiNivINqp2Ycg2YXYtNin2KjZhyDYqNinINqp2KfYsdiq4oCM2YfYp9uMIE5GQyDYudmF2YQg2YXbjOKAjNqp2YbZhtivLiDZh9ix2q/YsiDZhtio2KfbjNivINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDYudin2K/bjCDZhdmI2LHYryDZhtuM2KfYsiDYqNin2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjczNTgzNzg0MDE5MTUyODc5MzgiPiLYp9iq2LXYp9mEINio2Ycg24zaqSDYs9ix2YjbjNizINmF2KrZhtuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iODE1MTk2ODkxMDk3Mzk5ODY3MCI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYrtmI2K8g2LHYpyDYqNmHINuM2qkg2LHYp9io2Lcg2LPYt9itINio2KfZhNin24wg2K7Yr9mF2KfYqiDZhdiq2YbbjCDZhdix2KrYqNi3INqp2YbYryAo2KjYsdin24wg2YXYq9in2YQgU3BlbGxDaGVja2VyU2VydmljZSkuINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDYudin2K/bjCDZhNin2LLZhSDZhtuM2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iNDcwODU5NjAyMTE2MTQ3MzI1NSI+Itin2KrYtdin2YQg2KjZhyDbjNqpINiz2LHZiNuM2LMgVlBOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2KjZhyDYsdin2KjYtyDYs9i32K0g2KjYp9mE2KfbjCDYs9ix2YjbjNizIFZwbiDZhdiq2LXZhCDYtNmI2K8uINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi52YXZiNmE24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iODE1MTk2ODkxMDk3Mzk5ODY3MCI+IuKAj9io2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYrtmI2K8g2LHYpyDYqNmHINuM2qkg2LHYp9io2Lcg2LPYt9itINio2KfZhNin24wg2K7Yr9mF2KfYqiDZhdiq2YbbjCDZhdix2KrYqNi3INqp2YbYryAo2KjYsdin24wg2YXYq9in2YQgU3BlbGxDaGVja2VyU2VydmljZSkuINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDYudin2K/bjCDZhNin2LLZhSDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iNDcwODU5NjAyMTE2MTQ3MzI1NSI+IuKAj9in2KrYtdin2YQg2KjZhyDbjNqpINiz2LHZiNuM2LMgVlBOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i4oCP2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2KjZhyDYsdin2KjYtyDYs9i32K0g2KjYp9mE2KfbjCDYs9ix2YjbjNizIFZwbiDZhdiq2LXZhCDYtNmI2K8uINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi52YXZiNmE24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+Itm+24zZiNmG2K8g2LTYr9mHINio2Ycg2KrYtdmI24zYsSDYstmF24zZhtmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLYqNmHINiv2KfYsdmG2K/ZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINix2KfYqNi3INiz2LfYrSDYqNin2YTYp9uMINiq2LXZiNuM2LEg2LLZhduM2YbZhyDZhdiq2LXZhCDYtNmI2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdi52YXZiNmE24wg2YfYsdqv2LIg2KjZhyDYp9uM2YYg2YjbjNqY2q/bjCDZhtuM2KfYsiDZhtiv2KfYsdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLigI/YqNmHINiv2KfYsdmG2K/ZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINix2KfYqNi3INiz2LfYrSDYqNin2YTYp9uMINiq2LXZiNuM2LEg2LLZhduM2YbZhyDZhdiq2LXZhCDYtNmI2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdi52YXZiNmE24wg2YfYsdqv2LIg2KjZhyDYp9uM2YYg2YjbjNqY2q/bjCDZhtuM2KfYsiDZhtiv2KfYsdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLYp9iq2LXYp9mEINio2Ycg2YbZhdin24zYtNqv2LEg2LHYp9mHINiv2YjYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+Itio2YfCoNiv2KfYsdmG2K/ZhyDYp9mF4oCN2qnigI3Yp9mGINmF24zigIzYr9mH2K8g2KrYpyDYqNmHINix2KfYqNi3INiz2LfYrSDYqNin2YTYp9uMINmG2YXYp9uM2LTar9ixINix2KfZhyDYr9mI2LEg2YjYtdmEINi02YjYry4g2YbYqNin24zYryDZh9ix2q/YsiDYqNix2KfbjCDYqNix2YbYp9mF2YfigIzZh9in24wg2LnYp9iv24wg2YTYp9iy2YUg2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i2KfYqti12KfZhCDYqNmHINuM2qkg2LPYsdmI24zYsyDYp9io2LLYp9ix2qkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2KjZhyDYsdin2KjYtyDYs9i32K0g2KjYp9mE2KfbjCDYs9ix2YjbjNizINin2KjYstin2LHaqSDZhdiq2LXZhCDYtNmI2K8uINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi52YXZiNmE24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i2KrYudin2YXZhCDYqNinINuM2qkg2LPYsdm+2LHYs9iqINiv2LPYqtqv2KfZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9IjU2OTcxNTQxOTU0MzkwNzkzMCI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYp9mH2K/Yp9mBINiu2YjYryDYsdinINio2Ycg2LPYsdm+2LHYs9iqINiv2LPYqtqv2KfZhyDYp9ix2LPYp9mEINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2LnZhdmI2YTbjCDZh9uM2obar9in2Ycg2KjZhyDYp9uM2YYg2YjbjNqY2q/bjCDZhtuM2KfYstuMINmG2K/Yp9ix2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI1Njk3MTU0MTk1NDM5MDc5MzAiPiLigI/YqNmHINiv2KfYsdmG2K/ZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KfZh9iv2KfZgSDYrtmI2K8g2LHYpyDYqNmHINiz2LHZvtix2LPYqiDYr9iz2Krar9in2Ycg2KfYsdiz2KfZhCDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdi52YXZiNmE24wg2YfbjNqG2q/Yp9mHINio2Ycg2KfbjNmGINmI24zamNqv24wg2YbbjNin2LLbjCDZhtiv2KfYsdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4i2KfYttin2YHZhyDbjNinINit2LDZgSDYs9ix2b7Ysdiz2Kog2K/Ys9iq2q/Yp9mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYs9ix2b7Ysdiz2KrYp9mGINiv2LPYqtqv2KfZhyDZgdi52KfZhCDYsdinINin2LbYp9mB2Ycg24zYpyDYrdiw2YEg2qnZhtivLtmH2LHar9iyINmG2KjYp9uM2K8g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINio2KfYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMzY1OTQ3NzE3MTYzODY2ODQ0Ij4i2KrYutuM24zYsSDYrNmH2Kog2LXZgdit2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDahtix2K7YtCDYtdmB2K3ZhyDYsdinINmH2LEg2YjZgtiqINio2K7ZiNin2YfYryDYqti624zbjNixINiv2YfYry4g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldE9yaWVudGF0aW9uIiBtc2dpZD0iMzA0NjEyNjYxOTMxNjY3MTQ3NiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqG2LHYrti0INi12YHYrdmHINix2Kcg2YfYsSDZiNmC2Kog2KjYrtmI2KfZh9ivINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI5MTc1MzcxNjEzMzIyNTYyOTM0Ij4i2KrYutuM24zYsSDYs9ix2LnYqiDYp9i02KfYsdmH4oCM2q/YsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjY4NjY1NjMyMzQyNzQxMDQyMzMiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYs9ix2LnYqiDZhdin2YjYsyDZiCDZvtivINqp2YbYqtix2YQg2LHYpyDZh9ixINmI2YLYqiDYrtmI2KfYs9iqINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iNjg2NjU2MzIzNDI3NDEwNDIzMyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiz2LHYudiqINmF2KfZiNizINmIINm+2K8g2qnZhtiq2LHZhCDYsdinINmH2LEg2YjZgtiqINiu2YjYp9iz2Kog2KrYutuM24zYsSDYr9mH2K8uINio2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2KfYsiDZhtuM2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iNDc3ODczMTcwMzYwMDkwOTM0MCI+Itiq2LrbjNuM2LEg2obbjNiv2YXYp9mGINi12YHYrdmH4oCM2qnZhNuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9Ijg0ODAwMTY3NzExMzQxNzU4NzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDahtuM2K/Zhdin2YYg2LXZgdit2YfigIzaqdmE24zYryDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYp9uM2YYg2qnYp9ixINmH24zahuKAjNqv2KfZhyDYqNix2KfbjCDYqNix2YbYp9mF2YfigIzZh9in24wg2LnYp9iv24wg2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+Itin2LHYs9in2YQg2LPbjNqv2YbYp9mE2YfYp9uMIExpbnV4INio2Ycg2KjYsdmG2KfZhdmH4oCO2YfYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0ODk2OTkyMDc5MTgyNjQ5MTQxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K/Ysdiu2YjYp9iz2Kog2qnZhtivINiz24zar9mG2KfZhCDYp9ix2KfYptmHINi02K/ZhyDYqNmHINmH2YXZhyDZhdix2KfYrdmEINiv2KfYptmFINin2LHYs9in2YQg2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ1MzkwMDI5OTE5NDczNzY2NTkiPiLigI/Yp9ix2LPYp9mEINiz24zar9mG2KfZhNmH2KfbjCBMaW51eCDYqNmHINio2LHZhtin2YXZh+KAjtmH2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDg5Njk5MjA3OTE4MjY0OTE0MSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiv2LHYrtmI2KfYs9iqINqp2YbYryDYs9uM2q/Zhtin2YQg2KfYsdin2KbZhyDYtNiv2Ycg2KjZhyDZh9mF2Ycg2YXYsdin2K3ZhCDYr9in2KbZhSDYp9ix2LPYp9mEINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcnNpc3RlbnRBY3Rpdml0eSIgbXNnaWQ9Ijg4NDExMTM2Mjc5NTU1NjM5MzgiPiLZh9mF24zYtNmHINio2LHZhtin2YXZhyDYp9is2LHYpyDYtNmI2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1MjUxODkyNzIzMjkwODYxMzciPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YLYs9mF2KrigIzZh9in24zbjCDYp9iyINiu2YjYryDYsdinINiv2LEg2K3Yp9mB2LjZhyDYr9in2KbZhduMINqp2YbYry4g2KfbjNmGINqp2KfYsSDYrdin2YHYuNmHINmF2YjYrNmI2K8g2LHYpyDYqNix2KfbjCDYs9in24zYsSDYqNix2YbYp9mF2YfigIzZh9inINmF2K3Yr9mI2K8g2qnYsdiv2Ycg2Ygg2KjYp9i52Ksg2qnZhtiv24wg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0Mzg0NzYwMDQ3NTA4Mjc4MjcyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINmC2LPZhdiq4oCM2YfYp9uM24wg2KfYsiDYrtmI2K8g2LHYpyDYr9ixINit2KfZgdi42Ycg2K/Yp9im2YXbjCDaqdmG2K8uINin24zZhiDaqdin2LEg2K3Yp9mB2LjZhyDZhdmI2KzZiNivINix2Kcg2KjYsdin24wg2LPYp9uM2LEg2KjYsdmG2KfZhdmH4oCM2YfYpyDZhdit2K/ZiNivINqp2LHYr9mHINmIINio2KfYudirINqp2YbYr9uMINiq2YTZgdmGINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVQYWNrYWdlcyIgbXNnaWQ9IjE4NDM4NTEyOTUzNzcwNTkzOCI+Itit2LDZgSDYqNix2YbYp9mF2YfigI7Zh9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSI3NDExNDgwMjc1MTY3MjA1MDgxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjYs9iq2YfigI7Zh9in24wgQW5kcm9pZCDYsdinINm+2KfaqSDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdmH2YUg2LHYpyDYrdiw2YEg2qnZhtmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iMjc0MTA5MTkxODQ1ODQyNzU2Ij4i2K3YsNmBINiv2KfYr9mH4oCO2YfYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K/Yp9iv2YfigI7Zh9in24wg2qnYp9ix2KjYsSDYsdinINm+2KfaqSDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzEyODY2NTU3MTgzNzQwODY3NSI+Itit2LDZgSDYrdin2YHYuNmH2ZQg2b7ZhtmH2KfZhiDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzgxMjk5ODU5OTAwNjczMDE5NiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmB2KfbjNmE4oCM2YfYp9uMINit2KfZgdi42YfZlCDZvtmG2YfYp9mGINix2Kcg2b7Yp9qpINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iMTg0Mzg1MTI5NTM3NzA1OTM4Ij4i4oCP2K3YsNmBINio2LHZhtin2YXZh+KAjtmH2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNiz2KrZh+KAjtmH2KfbjCBBbmRyb2lkINix2Kcg2b7Yp9qpINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfYsiDYotmGINin2LPYqtmB2KfYr9mHINqp2YbZhtivINiq2Kcg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2YfZhSDYsdinINit2LDZgSDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiLigI/Yrdiw2YEg2K/Yp9iv2YfigI7Zh9in24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv24zar9ixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjQ2MjUzMjM2ODQxMjU0NTk0ODgiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYr9in2K/Zh+KAjtmH2KfbjCDaqdin2LHYqNixINix2Kcg2b7Yp9qpINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i4oCP2K3YsNmBINit2KfZgdi42YfZlCDZvtmG2YfYp9mGINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzODEyOTk4NTk5MDA2NzMwMTk2Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YHYp9uM2YTigIzZh9in24wg2K3Yp9mB2LjZh9mUINm+2YbZh9in2YYg2LHYpyDZvtin2qkg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4i2KfZhtiv2KfYstmHINqv24zYsduMINmB2LbYp9uMINit2KfZgdi42Ycg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2qnYr9mH2KfYjCDYr9in2K/Zh+KAjtmH2Kcg2Ygg2KfZhtiv2KfYstmH4oCO2YfYp9uMINit2KfZgdi42YfZlCDZvtmG2YfYp9mGINiu2YjYryDYsdinINio2KfYstuM2KfYqNuMINqp2YbYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2K/Zh9in2Iwg2K/Yp9iv2YfigI7Zh9inINmIINin2YbYr9in2LLZh+KAjtmH2KfbjCDYrdin2YHYuNmH2ZQg2b7ZhtmH2KfZhiDYrtmI2K8g2LHYpyDYqNin2LLbjNin2KjbjCDaqdmG2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjIxOTkxMjg0ODI4MjAzMDY5MjQiPiLZhti12Kgg2YXYs9iq2YLbjNmFINio2LHZhtin2YXZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNiz2KrZh+KAjtmH2KfbjCBBbmRyb2lkINio2Ycg2LHZiNiyINi02K/ZhyDbjNinINis2K/bjNivINix2Kcg2YbYtdioINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfYsiDYp9uM2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDYqNix2YbYp9mF2YfigI7Zh9in24wg2KzYr9uM2K8g2LHYpyDYqNinINmF2KzZiNiy2YfYp9uMINmC2YjbjCDYp9iu2KrbjNin2LHbjCDYp9i22KfZgdmHINqp2YbZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiLYrdiw2YEg2KrZhdin2YUg2K/Yp9iv2YfigI7Zh9in24wg2K3Yp9mB2LjZh9mUINm+2YbZh9in2YYg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iNTYyODUzMDk3MjU0ODA3MTI4NCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2LPYqtmH4oCO2YfYp9uMIEFuZHJvaWQg2KjZhyDYsdmI2LIg2LTYr9mHINuM2Kcg2KzYr9uM2K8g2LHYpyDZhti12Kgg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINin24zZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINio2LHZhtin2YXZh+KAjtmH2KfbjCDYrNiv24zYryDYsdinINio2Kcg2YXYrNmI2LLZh9in24wg2YLZiNuMINin2K7YqtuM2KfYsduMINin2LbYp9mB2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcENhY2hlIiBtc2dpZD0iNzQ4NzI3OTM5MTcyMzUyNjgxNSI+IuKAj9it2LDZgSDYqtmF2KfZhSDYr9in2K/Zh+KAjtmH2KfbjCDYrdin2YHYuNmH2ZQg2b7ZhtmH2KfZhiDYqNix2YbYp9mF2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTc0NjQwODcxOTQ1NDM0NTY1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2YHYttin24wg2LHYp9uM2KfZhtmHINmE2YjYrduMINix2Kcg2KfYsiDYt9ix24zZgiDYrdiw2YEg2qnYsdiv2YYg2YHYp9uM2YTigIzZh9inINiv2LEg2K/Yp9uM2LHaqdiq2YjYsduMINit2KfZgdi42Ycg2b7ZhtmH2KfZhiDYr9uM2q/YsSDYqNix2YbYp9mF2YfigIzZh9in24wg2qnYp9ix2KjYsdiv24zYjCDYotiy2KfYryDaqdmG2K8uINin24zZhiDaqdin2LEg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINqp2YbYr9uMINiv24zar9ixINio2LHZhtin2YXZh+KAjNmH2KfbjCDaqdin2LHYqNix2K/bjCDYr9ixINmH2Ybar9in2YUg2LHYp9mH4oCM2KfZhtiv2KfYstuMINi02YjYryDYstuM2LHYpyDYotmG2YfYpyDYqNin24zYryDYr9mI2KjYp9ix2Ycg2K/Yp9iv2YfigIzZh9in24wg2K7ZiNivINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2qnZhyDZgdi22KfbjCDYqtmE2YHZhiDYsdinINin2LIg2LfYsduM2YIg2K3YsNmBINqp2LHYr9mGINmB2KfbjNmE4oCM2YfYpyDYr9ixINiv2KfbjNix2qnYqtmI2LHbjCDYrdin2YHYuNmHINm+2YbZh9in2YYg2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINqp2KfYsdio2LHYr9uM2Iwg2KLYstin2K8g2qnZhtivLiDYp9uM2YYg2qnYp9ixINmF2YXaqdmGINin2LPYqiDYqNin2LnYqyDYsdin2Ycg2KfZhtiv2KfYstuMINii2YfYs9iq2Ycg2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINqp2KfYsdio2LHYr9uMINiv2LEg2YbYqtuM2KzZhyDZhtuM2KfYsiDYotmG2YfYpyDYqNmHINio2KfYstuM2KfYqNuMINiv2KfYr9mH4oCM2YfYp9uMINiu2YjYr9iMINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdmVQYWNrYWdlIiBtc2dpZD0iMzI4OTg5MDI3MTY0NTkyMTQxMSI+Itin2YbYqtmC2KfZhCDZhdmG2KfYqNi5INio2LHZhtin2YXZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdmVQYWNrYWdlIiBtc2dpZD0iMzE5NTYyMjE3Nzc4MjQ0NTI0Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YXZhtin2KjYuSDYqNix2YbYp9mF2Ycg2LHYpyDYp9iyINix2LPYp9mG2Ycg2K/Yp9iu2YTbjCDYqNmHINix2LPYp9mG2Ycg2K7Yp9ix2KzbjCDZiCDYqNin2YTYudqp2LMg2YXZhtiq2YLZhCDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMTk1NjIyMTc3NzgyNDQ1MjQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhdmG2KfYqNi5INio2LHZhtin2YXZhyDYsdinINin2LIg2LHYs9in2YbZhyDYr9in2K7ZhNuMINio2Ycg2LHYs9in2YbZhyDYrtin2LHYrNuMINmIINio2KfZhNi52qnYsyDZhdmG2KrZgtmEINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRMb2dzIiBtc2dpZD0iNjYxNTc3ODU0MzE5ODk2NzYxNCI+ItmF2LfYp9mE2LnZhyDYr9in2K/Zh+KAjNmH2KfbjCDar9iy2KfYsdi0INit2LPYp9izIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINmB2KfbjNmE4oCM2YfYp9uMINmF2K7YqtmE2YEg2q/Ystin2LHYtCDYs9uM2LPYqtmFINix2Kcg2KjYrtmI2KfZhtivLiDYqNinINin24zZhiDaqdin2LHYjCDYqNix2YbYp9mF2Ycg2KfYt9mE2KfYudin2Kog2qnZhNuMINmF2LHYqNmI2Lcg2KjZhyDaqdin2LHbjCDaqdmHINio2Kcg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2KfZhtis2KfZhSDZhduM4oCO2K/Zh9uM2K8g2LHYpyDaqdi02YEg2YXbjOKAjNqp2YbYr9iMINqp2Ycg2YXZhdqp2YYg2KfYs9iqINit2KfZiNuMINin2LfZhNin2LnYp9iqINi02K7YtduMINmIINiu2LXZiNi124wg2KjYp9i02YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIwNjM0MzgxNDAyNDE1NjA0NDMiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdin24zZhOKAjNmH2KfbjCDar9iy2KfYsdi0INmF2K7YqtmE2YEg2LPbjNiz2KrZhSDYsdinINio2K7ZiNin2YbYry4g2KfbjNmGINqp2KfYsSDYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KfYt9mE2KfYudin2Kog2LnZhdmI2YXbjCDaqdin2LHbjCDaqdmHINio2Kcg2KrZhNmB2YYg2KfZhtis2KfZhSDZhduM4oCO2K/Zh9uM2K8g2YXYq9mE2Kcg2KfYt9mE2KfYudin2Kog2K7YtdmI2LXbjCDZiCDYtNiu2LXbjCDYsdinINqp2LTZgSDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i2KfYs9iq2YHYp9iv2Ycg2KfYsiDZh9ixINix2YXYstqv2LTYp9uMINix2LPYp9mG2YfigI7Yp9uMINio2LHYp9uMINio2KfYstm+2K7YtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI4MjgzOTEyNDg4NDMzMTg5MDEwIj4i2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2LHZhtin2YXZhyDYp9iyINmH2LEg2LHZhdiy2q/YtNin24wg2LHYs9in2YbZhyDZhti12Kgg2LTYr9mH4oCM2KfbjCDYp9iz2KrZgdin2K/ZhyDaqdmG2K8g2KrYpyDYqNix2KfbjCDZvtiu2LQg2LHZhdiy2q/YtNin24zbjCDYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINmB2KfbjNmE4oCM2YfYp9uMINmF2K7YqtmE2YEg2q/Ystin2LHYtCDYs9uM2LPYqtmFINix2Kcg2KjYrtmI2KfZhtivLiDYqNinINin24zZhiDaqdin2LHYjCDYqNix2YbYp9mF2Ycg2KfYt9mE2KfYudin2Kog2qnZhNuMINmF2LHYqNmI2Lcg2KjZhyDaqdin2LHbjCDaqdmHINio2Kcg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2KfZhtis2KfZhSDZhduM4oCO2K/Zh9uM2K8g2LHYpyDaqdi02YEg2YXbjOKAjNqp2YbYr9iMINqp2Ycg2YXZhdqp2YYg2KfYs9iqINit2KfZiNuMINin2LfZhNin2LnYp9iqINi02K7YtduMINmIINiu2LXZiNi124wg2KjYp9i02YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIwNjM0MzgxNDAyNDE1NjA0NDMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdin24zZhOKAjNmH2KfbjCDar9iy2KfYsdi0INmF2K7YqtmE2YEg2LPbjNiz2KrZhSDYsdinINio2K7ZiNin2YbYry4g2KfbjNmGINqp2KfYsSDYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KfYt9mE2KfYudin2Kog2LnZhdmI2YXbjCDaqdin2LHbjCDaqdmHINio2Kcg2KrZhNmB2YYg2KfZhtis2KfZhSDZhduM4oCO2K/Zh9uM2K8g2YXYq9mE2Kcg2KfYt9mE2KfYudin2Kog2K7YtdmI2LXbjCDZiCDYtNiu2LXbjCDYsdinINqp2LTZgSDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i4oCP2KfYs9iq2YHYp9iv2Ycg2KfYsiDZh9ixINix2YXYstqv2LTYp9uMINix2LPYp9mG2YfigI7Yp9uMINio2LHYp9uMINio2KfYstm+2K7YtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI4MjgzOTEyNDg4NDMzMTg5MDEwIj4i4oCP2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2LHZhtin2YXZhyDYp9iyINmH2LEg2LHZhdiy2q/YtNin24wg2LHYs9in2YbZhyDZhti12Kgg2LTYr9mH4oCM2KfbjCDYp9iz2KrZgdin2K/ZhyDaqdmG2K8g2KrYpyDYqNix2KfbjCDZvtiu2LQg2LHZhdiy2q/YtNin24zbjCDYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjE2NzgzOTE4OTY3ODY4ODIwMTQiPiLZhdiv24zYsduM2Kog2KfYt9mE2KfYudin2Kog2qnYp9ix2KjYsduMINmF2YjYsdivINin2LnYqtmF2KfYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iNDAxNTY0NDA0NzE5NjkzNzAxNCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDar9mI2KfZh9uM2YbYp9mF2YfigIzZh9in24wgQ0Eg2LHYpyDYqNmHINi52YbZiNin2YYg2KfYt9mE2KfYudin2Kog2qnYp9ix2KjYsduMINmF2YjYsdivINin2LnYqtmF2KfYryDZhti12Kgg24zYpyDYrdiw2YEg2YbYtdioINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjQwMTU2NDQwNDcxOTY5MzcwMTQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2q/ZiNin2YfbjNmG2KfZhdmH4oCM2YfYp9uMIENBINix2Kcg2KjZhyDYudmG2YjYp9mGINin2LfZhNin2LnYp9iqINqp2KfYsdio2LHbjCDZhdmI2LHYryDYp9i52KrZhdin2K8g2YbYtdioINuM2Kcg2K3YsNmBINmG2LXYqCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaWFnbm9zdGljIiBtc2dpZD0iODA3Njc0Mzk1MzkwODAwMDM0MiI+Itiu2YjYp9mG2K/Zhi/ZhtmI2LTYqtmGINmF2YbYp9io2Lkg2YXYqti52YTZgiDYqNmHINiq2LTYrtuM2LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZh9ixINmF2YbYqNi524wg2LHYpyDaqdmHINmF2KrYudmE2YIg2KjZhyDar9ix2YjZhyDYqti02K7bjNi1INin2LPYqiDYqNiu2YjYp9mG2K8g2Ygg2K/YsSDYotmGINio2YbZiNuM2LPYr9ibINio2YfigIzYudmG2YjYp9mGINmF2KvYp9mE2Iwg2YHYp9uM2YTigIzZh9in24wgL2Rldi4g2KfbjNmGINin2YXYsSDYqNmH4oCM2LXZiNix2Kog2KjYp9mE2YLZiNmHINmF24zigIzYqtmI2KfZhtivINio2LEg2b7Yp9uM2K/Yp9ixINio2YjYr9mGINmIINin2YXZhtuM2Kog2LPbjNiz2KrZhSDYqtij2KvbjNixINio2q/YsNin2LHYry4g2KfbjNmGINiq2YbZh9inINio2KfbjNivINio2LHYp9uMINiq2LTYrtuM2LXigI7igIzZh9in24wg2YXYrtiq2LUg2LPYrtiq4oCM2KfZgdiy2KfYsSDYqtmI2LPYtyDYqtmI2YTbjNiv2qnZhtmG2K/ZhyDbjNinINin2b7Ysdin2KrZiNixINin2LPYqtmB2KfYr9mHINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZh9ixINmF2YbYqNi524wg2LHYpyDaqdmHINmF2KrYudmE2YIg2KjZhyDar9ix2YjZhyDYqti02K7bjNi1INin2LPYqiDYqNiu2YjYp9mG2K8g2Ygg2K/YsSDYotmGINio2YbZiNuM2LPYr9ibINio2YfigIzYudmG2YjYp9mGINmF2KvYp9mE2Iwg2YHYp9uM2YTigIzZh9in24wgL2Rldi4g2KfbjNmGINin2YXYsSDYqNmH4oCM2LXZiNix2Kog2KjYp9mE2YLZiNmHINmF24zigIzYqtmI2KfZhtivINio2LEg2b7Yp9uM2K/Yp9ixINio2YjYr9mGINmIINin2YXZhtuM2Kog2LPbjNiz2KrZhSDYqtij2KvbjNixINio2q/YsNin2LHYry4g2KfbjNmGINiq2YbZh9inINio2KfbjNivINio2LHYp9uMINiq2LTYrtuM2LXigI7igIzZh9in24wg2YXYrtiq2LUg2LPYrtiq4oCM2KfZgdiy2KfYsSDYqtmI2LPYtyDYqtmI2YTbjNiv2qnZhtmG2K/ZhyDbjNinINin2b7Ysdin2KrZiNixINin2LPYqtmB2KfYr9mHINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBtc2dpZD0iNjMzNTU3Njc3NTcxMTA5NTkzMSI+ItmB2LnYp9mEINuM2Kcg2LrbjNixINmB2LnYp9mEINqp2LHYr9mGINin2KzYstin24wg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdi52KfZhCDYqNmI2K/ZhiDbjNinINmG2KjZiNiv2YYg2KfYrNiy2KfbjCDYqNix2YbYp9mF2YfZlCDYr9uM2q/YsSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDZgtin2KjZhNuM2KrZh9in24wg2YXZh9mFINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2LrbjNix2YHYudin2YQg2qnZhtmG2K8uINio2KfbjNivINiv2YLYqiDaqdix2K8g2qnZhyDYqNinINin24zZhiDZhdis2YjYsiDZhdmF2qnZhiDYp9iz2Kog2YjYtti524zYqiDYp9is2LLYp9uMINio2LHZhtin2YXZhyDZhtin2b7Yp9uM2K/Yp9ix2Iwg2YbYp9mH2YXYp9mH2YbaryDbjNinINi624zYsdmC2KfYqNmEINin2LPYqtmB2KfYr9mHINi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4MjcyMzI0ODQ0MTY1MDU2MTUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdi52KfZhCDYqNmI2K/ZhiDbjNinINi624zYsdmB2LnYp9mEINio2YjYr9mGINis2LLYptuM2KfYqiDYqNix2YbYp9mF2YfZlCDYr9uM2q/YsSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDZiNuM2pjar9uM4oCM2YfYp9uMINmF2YfZhSDYsdinINi624zYsdmB2LnYp9mEINqp2YbZhtivLiDYqNix2KfbjCDYp9uM2YYg2YXYrNmI2LIg2KjYp9uM2K8g2K/ZgtiqINqp2YbbjNivINqG2YjZhiDZhdmF2qnZhiDYp9iz2Kog2YjYtti524zYqiDYrNiy2KbbjNin2Kog2KjYsdmG2KfZhdmHINmG2KfZvtin24zYr9in2LHYjCDYqNuM4oCO2KvYqNin2Kog24zYpyDYutuM2LHZgtin2KjZhCDYp9iz2KrZgdin2K/ZhyDYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdi52KfZhCDYqNmI2K/ZhiDbjNinINmG2KjZiNiv2YYg2KfYrNiy2KfbjCDYqNix2YbYp9mF2YfZlCDYr9uM2q/YsSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDZgtin2KjZhNuM2KrZh9in24wg2YXZh9mFINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2LrbjNix2YHYudin2YQg2qnZhtmG2K8uINio2KfbjNivINiv2YLYqiDaqdix2K8g2qnZhyDYqNinINin24zZhiDZhdis2YjYsiDZhdmF2qnZhiDYp9iz2Kog2YjYtti524zYqiDYp9is2LLYp9uMINio2LHZhtin2YXZhyDZhtin2b7Yp9uM2K/Yp9ix2Iwg2YbYp9mH2YXYp9mH2YbaryDbjNinINi624zYsdmC2KfYqNmEINin2LPYqtmB2KfYr9mHINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4MjcyMzI0ODQ0MTY1MDU2MTUiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdi52KfZhCDYqNmI2K/ZhiDbjNinINi624zYsdmB2LnYp9mEINio2YjYr9mGINis2LLYptuM2KfYqiDYqNix2YbYp9mF2YfZlCDYr9uM2q/YsSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDZiNuM2pjar9uM4oCM2YfYp9uMINmF2YfZhSDYsdinINi624zYsdmB2LnYp9mEINqp2YbZhtivLiDYqNix2KfbjCDYp9uM2YYg2YXYrNmI2LIg2KjYp9uM2K8g2K/ZgtiqINqp2YbbjNivINqG2YjZhiDZhdmF2qnZhiDYp9iz2Kog2YjYtti524zYqiDYrNiy2KbbjNin2Kog2KjYsdmG2KfZhdmHINmG2KfZvtin24zYr9in2LHYjCDYqNuM4oCO2KvYqNin2Kog24zYpyDYutuM2LHZgtin2KjZhCDYp9iz2KrZgdin2K/ZhyDYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDYyNzMxNTM1MTA5MzUwODc5NSI+Itin2LHYp9im2Ycg24zYpyDZhNi62Ygg2YXYrNmI2LLZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQwODg2NDI2NTQwODU4NTA2NjIiPiLYqNmHINuM2qkg2KjYsdmG2KfZhdmH2ZQg2qnYp9ix2KjYsdiv24wg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINiq2Kcg2YXYrNmI2LLZh9in24wg2K7Yp9i124wg2LHYpyDYqNix2KfbjCDYrtmI2K8g24zYpyDYr9uM2q/YsSDYqNix2YbYp9mF2YfigIzZh9inINin2LHYp9im2Ycg2qnYsdiv2Ycg24zYpyDYotmG4oCM2YfYpyDYsdinINmE2LrZiCDaqdmG2K8uINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi22LEg2KfYsiDYp9uM2YYg2K3Yp9mE2Kog2KjYsdin24wg2K/Ys9iq2LHYs9uMINio2Ycg2YjbjNqY2q/bjOKAjNmH2KfbjNuMINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2YbYryDaqdmHINi02YXYpyDYp9is2KfYstmHINii2YYg2LHYpyDYr9ixINin2K7YqtuM2KfYsdi02KfZhiDZgtix2KfYsSDZhtiv2KfYr9mH4oCM2KfbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iODQ2MzE4MTYyODY5NTM5NjM5MSI+Itiq2YbYuNuM2YUg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiq2LHYrNuM2K3bjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9IjQ5NzM5ODY3NjIyNDE3ODM3MTIiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNix2YbYp9mF2YfigI7Zh9in24wg2KrYsdis24zYrduMINi02YXYpyDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYqNiv2YjZhiDYp9i52YTYp9mGINio2LHZhtin2YXZh+KAjtmH2KfbjNuMINix2Kcg2qnZhyDYp9is2LHYpyDZhduM4oCO2LTZiNmG2K/YjCDYqti624zbjNixINiv2YfZhtivINiu2YjYryDYsdinINio2Ycg2KzYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDaqdmG2YjZhtuMINmC2YTZhdiv2KfYryDaqdmG2YbYryDYqtinINiv2KfYr9mH4oCO2YfYp9uMINi02K7YtduMINix2Kcg2KfYsiDYtNmF2Kcg2KzZhdi54oCM2KLZiNix24wg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI4NDYzMTgxNjI4Njk1Mzk2MzkxIj4i4oCP2KrZhti424zZhSDYqNix2YbYp9mF2YfigI7Zh9in24wg2KrYsdis24zYrduMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iNDk3Mzk4Njc2MjI0MTc4MzcxMiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2LHZhtin2YXZh+KAjtmH2KfbjCDYqtix2KzbjNit24wg2LTZhdinINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINio2K/ZiNmGINin2LnZhNin2YYg2KjYsdmG2KfZhdmH4oCO2YfYp9uM24wg2LHYpyDaqdmHINin2KzYsdinINmF24zigI7YtNmI2YbYr9iMINiq2LrbjNuM2LEg2K/Zh9mG2K8g2K7ZiNivINix2Kcg2KjZhyDYrNin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINqp2YbZiNmG24wg2YLZhNmF2K/Yp9ivINqp2YbZhtivINiq2Kcg2K/Yp9iv2YfigI7Zh9in24wg2LTYrti124wg2LHYpyDYp9iyINi02YXYpyDYrNmF2LnigIzYotmI2LHbjCDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSIyMjI2MTk1MjkwOTU1MjI0NzMwIj4i2KfYtdmE2KfYrSDYqtmG2LjbjNmF2KfYqiDYs9uM2LPYqtmFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9Ijc3NzU3MjM0NDE1NTg5MDcxODEiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYr9in2K/Zh+KAjtmH2KfbjCDYqtmG2LjbjNmFINiz24zYs9iq2YUg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2b7bjNqp2LHYqNmG2K/bjCDYs9uM2LPYqtmFINi02YXYpyDYsdinINiu2LHYp9ioINqp2YbZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K/Yp9iv2YfigI7Zh9in24wg2KrZhti424zZhSDYs9uM2LPYqtmFINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINm+24zaqdix2KjZhtiv24wg2LPbjNiz2KrZhSDYtNmF2Kcg2LHYpyDYrtix2KfYqCDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiLYp9i12YTYp9itINqp2LHYr9mGINiq2YbYuNuM2YXYp9iqINiz24zYs9iq2YUg2KfbjNmF2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iODE1OTUzNTYxMzAyMDEzNzM5MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYr9in2K/Zh+KAjtmH2KfbjCDYqtmG2LjbjNmF2KfYqiDYp9mF2YbbjNiq24wg2LPbjNiz2KrZhSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiLYp9i12YTYp9itINqp2LHYr9mGINmG2YLYtNmHINiz2LHZiNuM2LPigIzZh9in24wgR29vZ2xlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YbZgti02Ycg2LPYsdmI24zYs+KAjNmH2KfbjCBHb29nbGUg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiv2KfYr9mH4oCO2YfYp9uMINiq2YbYuNuM2YXYp9iqINin2YXZhtuM2KrbjCDYs9uM2LPYqtmFINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMjE0OTQyNjY2NDIyNjE1MjE4NSI+IuKAj9in2LXZhNin2K0g2qnYsdiv2YYg2YbZgti02Ycg2LPYsdmI24zYs+KAjNmH2KfbjCBHb29nbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtmC2LTZhyDYs9ix2YjbjNiz4oCM2YfYp9uMIEdvb2dsZSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlQm9vdENvbXBsZXRlZCIgbXNnaWQ9IjUzMTI5NjU1NjU5ODc4MDAwMjUiPiLYp9is2LHYpyDYtNiv2YYg2K/YsSDZh9mG2q/Yp9mFINix2KfZh+KAjNin2YbYr9in2LLbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjZhyDZhdit2LYg2KfYqtmF2KfZhSDYsdin2YfigI7Yp9mG2K/Yp9iy24wg2LPbjNiz2KrZhSDYrtmI2K/YqNiu2YjYryDYtNix2YjYuSDYqNmHINqp2KfYsSDaqdmG2K8uINin24zZhiDaqdin2LEg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINi02YjYryDZhdiv2Kog2LLZhdin2YYg2KjbjNi02KrYsduMINi12LHZgSDYtNiv2YjYuSDYqNmHINqp2KfYsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmI2K8g2Ygg2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjYpyDYp9is2LHYp9uMINmH2YXbjNi02q/bjCDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINqp2YbYryDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINmF2K3YtiDYp9uM2YbaqdmHINiz24zYs9iq2YUg2LHYp9mH4oCO2KfZhtiv2KfYstuMINi02K8g2K7ZiNiv2KjYrtmI2K8g2LTYsdmI2Lkg2KjZhyDaqdin2LEg2qnZhtivLiDYp9uM2YYg2qnYp9ixINio2KfYudirINmF24zigI7YtNmI2K8g2YXYr9iqINiy2YXYp9mGINio24zYtNiq2LHbjCDYtdix2YEg2LTZiNivINiq2Kcg2KrZhNmB2YYg2LTYsdmI2Lkg2KjZhyDaqdin2LEg2qnZhtivINmIINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2YQg2KrZhNmB2YYg2qnZhtivINi02YjYryDahtmI2YYg2YfZhduM2LTZhyDYr9ixINit2KfZhCDYp9is2LHYpyDYtNiv2YYg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjZhyDZhdit2LYg2KfYqtmF2KfZhSDYsdin2YfigI7Yp9mG2K/Yp9iy24wg2LPbjNiz2KrZhSDYrtmI2K/YqNiu2YjYryDYtNix2YjYuSDYqNmHINqp2KfYsSDaqdmG2K8uINin24zZhiDaqdin2LEg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINi02YjYryDZhdiv2Kog2LLZhdin2YYg2KjbjNi02KrYsduMINi12LHZgSDYtNiv2YjYuSDYqNmHINqp2KfYsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmI2K8g2Ygg2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjYpyDYp9is2LHYp9uMINmH2YXbjNi02q/bjCDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINqp2YbYryDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINmF2K3YtiDYp9uM2YbaqdmHINiz24zYs9iq2YUg2LHYp9mH4oCO2KfZhtiv2KfYstuMINi02K8g2K7ZiNiv2KjYrtmI2K8g2LTYsdmI2Lkg2KjZhyDaqdin2LEg2qnZhtivLiDYp9uM2YYg2qnYp9ixINio2KfYudirINmF24zigI7YtNmI2K8g2YXYr9iqINiy2YXYp9mGINio24zYtNiq2LHbjCDYtdix2YEg2LTZiNivINiq2Kcg2KrZhNmB2YYg2LTYsdmI2Lkg2KjZhyDaqdin2LEg2qnZhtivINmIINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2YQg2KrZhNmB2YYg2qnZhtivINi02YjYryDahtmI2YYg2YfZhduM2LTZhyDYr9ixINit2KfZhCDYp9is2LHYpyDYtNiv2YYg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U3RpY2t5IiBtc2dpZD0iNzkxOTEyNjM3MjYwNjg4MTYxNCI+Itin2LHYs9in2YQg2b7Yrti0INqG2LPYqNmG2K/ZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINm+2K7YtOKAjNmH2KfbjCDZhdin2YbYr9qv2KfYsSDYsdinINqp2Ycg2b7YsyDYp9iyINin2KrZhdin2YUg2b7Yrti0INio2KfZgtuMINmF24zigI7Zhdin2YbZhtivINin2LHYs9in2YQg2qnZhtivLiDYp9iz2KrZgdin2K/ZhyDYqNuM2LQg2KfYsiDYrdivINin24zZhiDZiNuM2pjar9uMINmF2YXaqdmGINin2LPYqiDYqNin2LnYqyDZhdi12LHZgSDYqNuM2LQg2KfYsiDYrdivINit2KfZgdi42Ycg2Ygg2K/YsSDZhtiq24zYrNmHINqp2YbYr9uMINuM2Kcg2YbYp9m+2KfbjNiv2KfYsduMINix2KfbjNin2YbZh9mUINmE2YjYrduMINi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7Yrti04oCM2YfYp9uMINmF2KfZhtiv2q/Yp9ixINix2Kcg2qnZhyDZvtizINin2LIg2KfYqtmF2KfZhSDZvtiu2LQg2KjYp9mC24wg2YXbjOKAjtmF2KfZhtmG2K8g2KfYsdiz2KfZhCDaqdmG2K8uINin2LPYqtmB2KfYr9mHINio24zYtCDYp9iyINit2K8g2KfbjNmGINmI24zamNqv24wg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINmF2LXYsdmBINio24zYtCDYp9iyINit2K8g2K3Yp9mB2LjZhyDZiCDYr9ixINmG2KrbjNis2Ycg2qnZhtiv24wg24zYpyDZhtin2b7Yp9uM2K/Yp9ix24wg2KrZhNmB2YYg2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINm+2K7YtOKAjNmH2KfbjCDZhdin2YbYr9qv2KfYsSDYsdinINqp2Ycg2b7YsyDYp9iyINin2KrZhdin2YUg2b7Yrti0INio2KfZgtuMINmF24zigI7Zhdin2YbZhtivINin2LHYs9in2YQg2qnZhtivLiDYp9iz2KrZgdin2K/ZhyDYqNuM2LQg2KfYsiDYrdivINin24zZhiDZiNuM2pjar9uMINmF2YXaqdmGINin2LPYqiDYqNin2LnYqyDZhdi12LHZgSDYqNuM2LQg2KfYsiDYrdivINit2KfZgdi42Ycg2Ygg2K/YsSDZhtiq24zYrNmHINqp2YbYr9uMINuM2Kcg2YbYp9m+2KfbjNiv2KfYsduMINix2KfbjNin2YbZh9mUINmE2YjYrduMINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7Yrti04oCM2YfYp9uMINmF2KfZhtiv2q/Yp9ixINix2Kcg2qnZhyDZvtizINin2LIg2KfYqtmF2KfZhSDZvtiu2LQg2KjYp9mC24wg2YXbjOKAjtmF2KfZhtmG2K8g2KfYsdiz2KfZhCDaqdmG2K8uINin2LPYqtmB2KfYr9mHINio24zYtCDYp9iyINit2K8g2KfbjNmGINmI24zamNqv24wg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINmF2LXYsdmBINio24zYtCDYp9iyINit2K8g2K3Yp9mB2LjZhyDZiCDYr9ixINmG2KrbjNis2Ycg2qnZhtiv24wg24zYpyDZhtin2b7Yp9uM2K/Yp9ix24wg2KrZhNmB2YYg2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENvbnRhY3RzIiBtc2dpZD0iODM0ODQ4MTEzMTg5OTg4NjEzMSI+Itiu2YjYp9mG2K/ZhiDZhdiu2KfYt9io24zZhiDYtNmF2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2K/Yp9iv2YfigIzZh9in24wg2YXYsdio2YjYtyDYqNmHINmF2K7Yp9i32KjbjNmGINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LTZhdinINix2Kcg2KjYrtmI2KfZhtivINin2LIg2KzZhdmE2YfYjCDYqti52K/Yp9ivINiv2YHYudin2Kog2KrZhdin2LPigIzZh9in24zbjCDaqdmHINio2LHZgtix2KfYsSDaqdix2K/Zh+KAjNin24zYr9iMINin24zZhduM2YTigIzZh9in24zbjCDaqdmHINin2LHYs9in2YQg2qnYsdiv2YfigIzYp9uM2K8g24zYpyDYqNmHINix2YjYtOKAjNmH2KfbjCDYr9uM2q/YsduMINio2Ycg2KfZgdix2KfYryDYrtin2LXbjCDYp9ix2KrYqNin2Lcg2KjYsdmC2LHYp9ixINqp2LHYr9mH4oCM2KfbjNivLiDYp9uM2YYg2KjYpyDYqNix2YbYp9mF2YfigIzZh9inINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYr9in2K/Zh+KAjNmH2KfbjCDZhdiu2KfYt9ioINi02YXYpyDYsdinINiw2K7bjNix2Ycg2qnZhtmG2K8g2Ygg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINmF2K7YsdioINmF2YXaqdmGINin2LPYqiDYr9in2K/Zh+KAjNmH2KfbjCDZhdiu2KfYt9ioINix2Kcg2KjYr9mI2YYg2KfYt9mE2KfYuSDYtNmF2Kcg2KjZhyDYp9i02KrYsdin2qkg2Kjar9iw2KfYsdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ0MDY1NDE1MjQ1NzMwMDY2MiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYr9in2K/Zh+KAjNmH2KfbjCDZhdix2KjZiNi3INio2Ycg2YXYrtin2LfYqNuM2YYg2LDYrtuM2LHZhyDYtNiv2Ycg2K/YsSDYqtmE2YHZhiDYtNmF2Kcg2LHYpyDYqNiu2YjYp9mG2K8g2KfYsiDYrNmF2YTZh9iMINiq2LnYr9in2K8g2K/Zgdi52KfYqiDYqtmF2KfYs+KAjNmH2KfbjNuMINqp2Ycg2KjYsdmC2LHYp9ixINqp2LHYr9mH4oCM2KfbjNiv2Iwg2KfbjNmF24zZhOKAjNmH2KfbjNuMINqp2Ycg2KfYsdiz2KfZhCDaqdix2K/Zh+KAjNin24zYryDbjNinINio2Ycg2LHZiNi04oCM2YfYp9uMINiv24zar9ix24wg2KjYpyDYp9mB2LHYp9ivINiu2KfYtduMINin2LHYqtio2KfYtyDYqNix2YLYsdin2LEg2qnYsdiv2YfigIzYp9uM2K8uINin24zZhiDYqNmHINio2LHZhtin2YXZh+KAjNmH2Kcg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINiv2KfYr9mH4oCM2YfYp9uMINmF2K7Yp9i32Kgg2LTZhdinINix2Kcg2LDYrtuM2LHZhyDaqdmG2YbYryDZiCDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYrtix2Kgg2YXZhdqp2YYg2KfYs9iqINiv2KfYr9mH4oCM2YfYp9uMINmF2K7Yp9i32Kgg2LHYpyDYqNiv2YjZhiDYp9i32YTYp9i5INi02YXYpyDYqNmHINin2LTYqtix2KfaqSDYqNqv2LDYp9ix2YbYry4iPC9zdHJpbmc+CkBAIC00NDcsMTIgKzQ1NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM3MDA2NDUxODQ4NzA3NjAyODUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2q/Ystin2LHYtCDYqtmF2KfYsyDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmF2Kcg2LHYpyDYqNiu2YjYp9mG2K8g2KfYsiDYrNmF2YTZhyDYr9in2K/Zh+KAjNmH2KfbjCDZhdix2KjZiNi3INio2Ycg2KrZhdin2LPigIzZh9in24wg2YjYsdmI2K/bjCDZiCDYrtix2YjYrNuMLiDYp9uM2YYg2YXYrNmI2LIg2KjZhyDYqNix2YbYp9mF2YfigIzZh9inINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYr9in2K/Zh+KAjNmH2KfbjCDar9iy2KfYsdi0INiq2YXYp9izINi02YXYpyDYsdinINiw2K7bjNix2Ycg2qnZhtmG2K8g2Ygg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINmF2K7YsdioINmF2YXaqdmGINin2LPYqiDYr9in2K/Zh+KAjNmH2KfbjCDar9iy2KfYsdi0INiq2YXYp9izINi02YXYpyDYsdinINio2K/ZiNmGINin2LfZhNin2Lkg2LTZhdinINio2Ycg2KfYtNiq2LHYp9qpINio2q/YsNin2LHZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3NzcyNTc5NjgxMzIxNzI0NCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDar9iy2KfYsdi0INiq2YXYp9izINiq2YTZgdmG24wg2LTZhdinINix2Kcg2KjYrtmI2KfZhtivINin2LIg2KzZhdmE2Ycg2K/Yp9iv2YfigIzZh9in24wg2YXYsdio2YjYtyDYqNmHINiq2YXYp9iz4oCM2YfYp9uMINmI2LHZiNiv24wg2Ygg2K7YsdmI2KzbjC4g2KfbjNmGINmF2KzZiNiyINio2Ycg2KjYsdmG2KfZhdmH4oCM2YfYpyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2K/Yp9iv2YfigIzZh9in24wg2q/Ystin2LHYtCDYqtmF2KfYsyDYtNmF2Kcg2LHYpyDYsNiu24zYsdmHINqp2YbZhtivINmIINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdiu2LHYqCDZhdmF2qnZhiDYp9iz2Kog2K/Yp9iv2YfigIzZh9in24wg2q/Ystin2LHYtCDYqtmF2KfYsyDYtNmF2Kcg2LHYpyDYqNiv2YjZhiDYp9i32YTYp9i5INi02YXYpyDYqNmHINin2LTYqtix2KfaqSDYqNqv2LDYp9ix2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsbExvZyIgbXNnaWQ9Ijg1NTIwNDU2NjQ3NDM0OTkzNTQiPiLZhtmI2LTYqtmGINqv2LLYp9ix2LQg2KrZhdin2LMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NjE4MDYwNjIyNzQxMTkyNDUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2q/Ystin2LHYtNin2Kog2KrZhdin2LMg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LTZhdin2Iwg2KfYsiDYrNmF2YTZhyDYr9in2K/Zh+KAjNmH2KfbjNuMINiv2LHZhdmI2LHYryDYqtmF2KfYs+KAjtmH2KfbjCDZiNix2YjYr9uMINmIINiu2LHZiNis24wg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdmG2KfZhdmH4oCM2YfYp9uMINmF2K7YsdioINmF2YXaqdmGINin2LPYqiDYp9iyINin24zZhiDZiNuM2pjar9uMINio2LHYp9uMINm+2KfaqSDaqdix2K/ZhiDbjNinINiq2LrbjNuM2LEg2q/Ystin2LHYtCDYqtmF2KfYsyDYtNmF2Kcg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqv2LLYp9ix2LTYp9iqINiq2YXYp9izINiq2YTZgdmG24wg2LTZhdin2Iwg2KfYsiDYrNmF2YTZhyDYr9in2K/Zh+KAjNmH2KfbjNuMINiv2LHZhdmI2LHYryDYqtmF2KfYs+KAjtmH2KfbjCDZiNix2YjYr9uMINmIINiu2LHZiNis24wg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdmG2KfZhdmH4oCM2YfYp9uMINmF2K7YsdioINmF2YXaqdmGINin2LPYqiDYp9iyINin24zZhiDZiNuM2pjar9uMINio2LHYp9uMINm+2KfaqSDaqdix2K/ZhiDbjNinINiq2LrbjNuM2LEg2q/Ystin2LHYtCDYqtmF2KfYsyDYtNmF2Kcg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqv2LLYp9ix2LTYp9iqINiq2YXYp9izINix2KfbjNin2YbZh9mUINmE2YjYrduMINi02YXYp9iMINin2LIg2KzZhdmE2Ycg2K/Yp9iv2YfigIzZh9in24zbjCDYr9ix2YXZiNix2K8g2KrZhdin2LPigI7Zh9in24wg2YjYsdmI2K/bjCDZiCDYrtix2YjYrNuMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdiu2LHYqCDZhdmF2qnZhiDYp9iz2Kog2KfYsiDYp9uM2YYg2YjbjNqY2q/bjCDYqNix2KfbjCDZvtin2qkg2qnYsdiv2YYg24zYpyDYqti624zbjNixINqv2LLYp9ix2LQg2KrZhdin2LMg2LTZhdinINin2LPYqtmB2KfYr9mHINqp2YbZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4Mzk0MTczNjM1Mjc4Nzg0MiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDar9iy2KfYsdi02KfYqiDYqtmF2KfYsyDYqtmE2YHZhtuMINi02YXYp9iMINin2LIg2KzZhdmE2Ycg2K/Yp9iv2YfigIzZh9in24zbjCDYr9ix2YXZiNix2K8g2KrZhdin2LPigI7Zh9in24wg2YjYsdmI2K/bjCDZiCDYrtix2YjYrNuMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdiu2LHYqCDZhdmF2qnZhiDYp9iz2Kog2KfYsiDYp9uM2YYg2YjbjNqY2q/bjCDYqNix2KfbjCDZvtin2qkg2qnYsdiv2YYg24zYpyDYqti624zbjNixINqv2LLYp9ix2LQg2KrZhdin2LMg2LTZhdinINin2LPYqtmB2KfYr9mHINqp2YbZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFByb2ZpbGUiIG1zZ2lkPSI0NzAxODg5ODUyNjEyNzE2Njc4Ij4i2K7ZiNin2YbYr9mGINqp2KfYsdiqINiq2YXYp9izINi02YXYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYp9i32YTYp9i52KfYqiDZhtmF2KfbjNmHINi02K7YtduMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2K/Ys9iq2q/Yp9mHINi02YXYp9iMINmF2KfZhtmG2K8g2YbYp9mFINmIINin2LfZhNin2LnYp9iqINiq2YXYp9izINi02YXYpyDYsdinINio2K7ZiNin2YbYry4g24zYudmG24wg2KjYsdmG2KfZhdmHINmF24zigI7YqtmI2KfZhtivINi02YXYpyDYsdinINi02YbYp9iz2KfbjNuMINqp2YbYryDZiCDZhdmF2qnZhiDYp9iz2Kog2KfYt9mE2KfYudin2Kog2YbZhdin24zZh9mUINi02YXYpyDYsdinINio2Ycg2K/bjNqv2LHYp9mGINin2LHYs9in2YQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYp9i32YTYp9i52KfYqiDZhtmF2KfbjNmHINi02K7YtduMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2K/Ys9iq2q/Yp9mHINi02YXYp9iMINmF2KfZhtmG2K8g2YbYp9mFINmIINin2LfZhNin2LnYp9iqINiq2YXYp9izINi02YXYpyDYsdinINio2K7ZiNin2YbYry4g24zYudmG24wg2KjYsdmG2KfZhdmHINmF24zigI7YqtmI2KfZhtivINi02YXYpyDYsdinINi02YbYp9iz2KfbjNuMINqp2YbYryDZiCDZhdmF2qnZhiDYp9iz2Kog2KfYt9mE2KfYudin2Kog2YbZhdin24zZh9mUINi02YXYpyDYsdinINio2Ycg2K/bjNqv2LHYp9mGINin2LHYs9in2YQg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVQcm9maWxlIiBtc2dpZD0iOTA3NzkzNjI4Nzc3Mzk3NjQzIj4i2KfYtdmE2KfYrSDaqdin2LHYqiDYqtmF2KfYsyDYtNmF2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NTUyMDg0Mjk0NTk4NDY1ODk5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYt9mE2KfYudin2Kog2YbZhdin24zZhyDYtNiu2LXbjCDYsNiu24zYsdmHINi02K/ZhyDYr9ixINiv2LPYqtqv2KfZhyDYtNmF2KfYjCDZhdin2YbZhtivINmG2KfZhSDZiCDYp9i32YTYp9i52KfYqiDYqtmF2KfYsyDYtNmF2Kcg2LHYpyDYqti624zbjNixINiv2YfYryDbjNinINin2LbYp9mB2Ycg2qnZhtivLiDbjNi52YbbjCDYqNix2YbYp9mF2YfigI4g2YXbjOKAjtiq2YjYp9mG2K8g2LTZhdinINix2Kcg2LTZhtin2LPYp9uM24wg2qnZhtivINmIINmF2YXaqdmGINin2LPYqiDYp9i32YTYp9i52KfYqiDZhtmF2KfbjNmH2ZQg2LTZhdinINix2Kcg2KjYsdin24wg2K/bjNqv2LHYp9mGINin2LHYs9in2YQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9i32YTYp9i52KfYqiDZhtmF2KfbjNmHINi02K7YtduMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2K/Ys9iq2q/Yp9mHINi02YXYp9iMINmF2KfZhtmG2K8g2YbYp9mFINmIINin2LfZhNin2LnYp9iqINiq2YXYp9izINi02YXYpyDYsdinINiq2LrbjNuM2LEg2K/Zh9ivINuM2Kcg2KfYttin2YHZhyDaqdmG2K8uINuM2LnZhtuMINio2LHZhtin2YXZh+KAjiDZhduM4oCO2KrZiNin2YbYryDYtNmF2Kcg2LHYpyDYtNmG2KfYs9in24zbjCDaqdmG2K8g2Ygg2YXZhdqp2YYg2KfYs9iqINin2LfZhNin2LnYp9iqINmG2YXYp9uM2YfZlCDYtNmF2Kcg2LHYpyDYqNix2KfbjCDYr9uM2q/Ysdin2YYg2KfYsdiz2KfZhCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTI2ODkyMDk1NjE1MjQxOTE3MCI+Itiu2YjYp9mG2K/ZhiDYrNix24zYp9mGINin2KzYqtmF2KfYuduMINi02YXYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Ycg2KjZh+KAjNix2YjYstix2LPYp9mG24zigIzZh9in24wg2KfYrNiq2YXYp9i524wg2KfYsiDYt9ix2YEg2LTZhdinINmIINiv2YjYs9iq2KfZhiDYtNmF2Kcg2K/Ys9iq2LHYs9uMINm+24zYr9inINqp2LHYr9mHINmIINii2YbigIzZh9inINix2Kcg2YfZhdqv2KfZheKAjNiz2KfYstuMINqp2YbYry4g2K/ZgtiqINqp2YbbjNivINqp2Ycg2YfZhtqv2KfZhSDYp9i02KrYsdin2qnigIzar9iw2KfYsduMIC0tINin24zZhiDZiNuM2pjar9uMINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYp9ix2KrYqNin2LfYp9iqINio24zZhiDYtNmF2Kcg2Ygg2K/ZiNiz2KrYp9mGINi02YXYpyDYsdinINiv2LEg2LTYqNqp2YfigIzZh9in24wg2KfYrNiq2YXYp9i524zYjCDYtdix2YHZhti42LEg2KfYsiDZhdit2LHZhdin2YbZhyDYqNmI2K/ZhiDYotmG4oCM2YfYpyDYqNiu2YjYp9mG2K8uINiq2YjYrNmHOiDYp9uM2YYg2YXYrNmI2LIg2YXZhdqp2YYg2KfYs9iqINiv2LEg2YfZhdmHINi02KjaqdmH4oCM2YfYp9uMINin2KzYqtmF2KfYuduMINin2KzYsdinINmG2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTA0MTc5MjIyNDkzMjM1NjQ1Ij4i2YbZiNi02KrZhiDYr9ixINis2LHbjNin2YYg2KfYrNiq2YXYp9i524wg2LTZhdinIjwvc3RyaW5nPgpAQCAtNDY0LDIzICs0NzEsMjUgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NzkwMzU1MjAxMTM2Njg1MjgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2LHZiNuM2K/Yp9iv2YfYp9uM24wg2LHYpyDaqdmHINmF24zigIzYqtmI2KfZhtuM2K8g2K/YsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYrtmI2K8g2KfYtdmE2KfYrSDZhtmF2KfbjNuM2K/YjCDYp9iyINis2YXZhNmHINix2YjbjNiv2KfYr9mH2KfbjCDYr9mI2LPYqtin2YYg24zYpyDZh9mF2qnYp9ix2KfZhiDYrtmI2K8g2LHYp9iMINin2LbYp9mB2Ycg24zYpyDYrdiw2YEg2qnYsdiv2Ycg24zYpyDYqti624zbjNixINiv2YfYry4g2KfbjNmGINmI24zamNqv24wg2YXZhdqp2YYg2KfYs9iqINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2K/Zh9ivINm+24zYp9mF4oCM2YfYp9uM24wg2LHYpyDaqdmHINio2Ycg2YbYuNixINmF24zigIzYsdiz2K8g2KfYsiDZhdin2YTaqduM2YYg2KrZgtmI24zZhSDYsdiz24zYr9mHINin2LPYqiDYp9ix2LPYp9mEINmG2YXZiNiv2Ycg24zYpyDYsdmI24zYr9in2K/Zh9inINix2Kcg2KjYr9mI2YYg2KfYt9mE2KfYuSDZhdin2YTaqSDYp9i12YTYp9itINqp2YbZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMzI0NDY5NDk2MzI3MjQ5Mzc2Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINix2YjbjNiv2KfYr9mH2KfbjNuMINix2Kcg2qnZhyDZhduM4oCM2KrZiNin2YbbjNivINiv2LEg2KrZhNmB2YYg2K7ZiNivINin2LXZhNin2K0g2YbZhdin24zbjNiv2Iwg2KfYsiDYrNmF2YTZhyDYsdmI24zYr9in2K/Zh9in24wg2K/ZiNiz2KrYp9mGINuM2Kcg2YfZhdqp2KfYsdin2YYg2K7ZiNivINix2KfYjCDYp9i22KfZgdmHINuM2Kcg2K3YsNmBINqp2LHYr9mHINuM2Kcg2KrYutuM24zYsSDYr9mH2K8uINin24zZhiDZiNuM2pjar9uMINmF2YXaqdmGINin2LPYqiDYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINiv2YfYryDZvtuM2KfZheKAjNmH2KfbjNuMINix2Kcg2qnZhyDYqNmHINmG2LjYsSDZhduM4oCM2LHYs9ivINin2LIg2YXYp9mE2qnbjNmGINiq2YLZiNuM2YUg2LHYs9uM2K/ZhyDYp9iz2Kog2KfYsdiz2KfZhCDZhtmF2YjYr9mHINuM2Kcg2LHZiNuM2K/Yp9iv2YfYpyDYsdinINio2K/ZiNmGINin2LfZhNin2Lkg2YXYp9mE2qkg2KfYtdmE2KfYrSDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9Ijg2ODgzMzQ5NzQwMzY4MjMzMzAiPiLZhdmG2KfYqNi5INmF2qnYp9mGINqp2KfYsNioINio2LHYp9uMINiq2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiLZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINqp2KfYsNioINix2Kcg2KjYsdin24wg2KrYs9iqINqp2LHYr9mGINuM2Kcg2YbYtdioINuM2qkg2KfYsdin2KbZh+KAjNiv2YfZhtiv2Ycg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KzYr9uM2K8g2KfbjNis2KfYryDZhtmF2KfbjNuM2K8uINin24zZhiDaqdin2LEg2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINmF2YjZgti524zYqiDZhdqp2KfZhtuMINmIL9uM2Kcg2YjYtti524zYqiDar9iy2KfYsdi0INiv2KfYr9mHINi02K/ZhyDYqtmI2LPYtyDYs9in24zYsSDZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINmF2KfZhtmG2K8gR1BTINuM2Kcg2KfYsdin2KbZh+KAjNiv2YfZhtiv2q/Yp9mGINmF2YjZgti524zYqiDZhdqp2KfZhtuMINix2Kcg2YbYp9iv24zYr9mHINio2q/bjNix2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuKAj9mF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2qnYp9iw2Kgg2LHYpyDYqNix2KfbjCDYqtiz2Kog2qnYsdiv2YYg24zYpyDZhti12Kgg24zaqSDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ZhyDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYrNiv24zYryDYp9uM2KzYp9ivINmG2YXYp9uM24zYry4g2KfbjNmGINqp2KfYsSDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2Ygv24zYpyDZiNi22LnbjNiqINqv2LLYp9ix2LQg2K/Yp9iv2Ycg2LTYr9mHINiq2YjYs9i3INiz2KfbjNixINmF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2YXYp9mG2YbYryBHUFMg24zYpyDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ar9in2YYg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2LHYpyDZhtin2K/bjNiv2Ycg2Kjar9uM2LHYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLYr9iz2KrYsdiz24wg2KjZhyDZgdix2YXYp9mG4oCM2YfYp9uMINio24zYtNiq2LEg2KfYsdin2KbZhyDYr9mH2YbYr9mHINmF2qnYp9mGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iNTk0NTE2NjY0MjMzNTgwMDc2MyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2Ycg2YHYsdmF2KfZhuKAjNmH2KfbjCDYp9ix2KfYptmH4oCO2K/Zh9mG2K/ZhyDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYr9uM2q/YsduMINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNivLiDYp9uM2YYg2YjbjNqY2q/bjCDZhdmF2qnZhiDYp9iz2Kog2KjYp9i52Ksg2YXYrtiq2YQg2LTYr9mGINi52YXZhNqp2LHYryBHUFMg24zYpyDYr9uM2q/YsSDZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINiq2YjYs9i3INin24zZhiDYqNix2YbYp9mF2Ycg2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINmB2LHZhdin2YbigIzZh9in24wg2KfYsdin2KbZh+KAjtiv2YfZhtiv2Ycg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2K/bjNqv2LHbjCDYr9iz2KrYsdiz24wg2K/Yp9i02KrZhyDYqNin2LTYry4g2KfbjNmGINmI24zamNqv24wg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINmF2K7YqtmEINi02K/ZhiDYudmF2YTaqdix2K8gR1BTINuM2Kcg2K/bjNqv2LEg2YXZhtin2KjYuSDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYqtmI2LPYtyDYp9uM2YYg2KjYsdmG2KfZhdmHINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+ItmF2KzZiNiyINio2LHYp9uMINmG2LXYqCDbjNqpINin2LHYp9im2Ycg2K/Zh9mG2K/ZhyDZhdqp2KfZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+ItmF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2qnYp9iw2Kgg2LHYpyDYqNix2KfbjCDYqtiz2Kog2qnYsdiv2YYg24zYpyDZhti12Kgg24zaqSDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ZhyDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYrNiv24zYryDYp9uM2KzYp9ivINmG2YXYp9uM24zYry4g2KfbjNmGINqp2KfYsSDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2Ygv24zYpyDZiNi22LnbjNiqINqv2LLYp9ix2LQg2K/Yp9iv2Ycg2LTYr9mHINiq2YjYs9i3INiz2KfbjNixINmF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2YXYp9mG2YbYryBHUFMg24zYpyDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ar9in2YYg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2LHYpyDZhtin2K/bjNiv2Ycg2Kjar9uM2LHYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiLZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYr9mC24zZgiAo2YXYqNiq2YbbjCDYqNixIEdQUyDZiCDYtNio2qnZhykiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2K/ZgtuM2YIg2LTZhdinINix2Kcg2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyINiz24zYs9iq2YUg2YXZiNmC2LnbjNiq4oCM24zYp9ioINis2YfYp9mG24wgKEdQUykg24zYpyDZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINi02KjaqdmH4oCM2KfbjCDZhdin2YbZhtivINio2LHYrOKAjNmH2KfbjCDYs9mE2YjZhNuMINuM2KcgV2ktRmkg2K/YsduM2KfZgdiqINqp2YbYry4g2KfbjNmGINiz2LHZiNuM2LPigIzZh9in24wg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KjYp9uM2K8g2K/YsSDYr9iz2Krar9in2Ycg2LTZhdinINio2LHYp9uMINio2LHZhtin2YXZh+KAjNin24wg2qnZhyDYp9iyINii2YbZh9inINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2K/YjCDZgdi52KfZhCDZiCDYr9ixINiv2LPYqtix2LMg2KjYp9i02K8uINio2LHZhtin2YXZh+KAjNmH2Kcg2YXZhdqp2YYg2KfYs9iqINin2LIg2KLZhiDYqNix2KfbjCDYqti524zbjNmGINis2KfbjNuMINqp2Ycg2YfYs9iq24zYr9iMINin2LPYqtmB2KfYr9mHINqp2YbZhtivINmIINmF2YXaqdmGINin2LPYqiDZhtuM2LHZiNuMINio2KfYqtix24wg2KjbjNi02KrYsduMINmF2LXYsdmBINqp2YbZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IuKAj9mF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2qnYp9iw2Kgg2LHYpyDYqNix2KfbjCDYqtiz2Kog2qnYsdiv2YYg24zYpyDZhti12Kgg24zaqSDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ZhyDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYrNiv24zYryDYp9uM2KzYp9ivINmG2YXYp9uM24zYry4g2KfbjNmGINqp2KfYsSDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2Ygv24zYpyDZiNi22LnbjNiqINqv2LLYp9ix2LQg2K/Yp9iv2Ycg2LTYr9mHINiq2YjYs9i3INiz2KfbjNixINmF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2YXYp9mG2YbYryBHUFMg24zYpyDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ar9in2YYg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2LHYpyDZhtin2K/bjNiv2Ycg2Kjar9uM2LHYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiLigI/ZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYr9mC24zZgiAo2YXYqNiq2YbbjCDYqNixIEdQUyDZiCDYtNio2qnZhykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2K/ZgtuM2YIg2LTZhdinINix2Kcg2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyINiz24zYs9iq2YUg2YXZiNmC2LnbjNiq4oCM24zYp9ioINis2YfYp9mG24wgKEdQUykg24zYpyDZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINi02KjaqdmH4oCM2KfbjCDZhdin2YbZhtivINio2LHYrOKAjNmH2KfbjCDYs9mE2YjZhNuMINuM2KcgV2ktRmkg2K/YsduM2KfZgdiqINqp2YbYry4g2KfbjNmGINiz2LHZiNuM2LPigIzZh9in24wg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KjYp9uM2K8g2K/YsSDYr9iz2Krar9in2Ycg2LTZhdinINio2LHYp9uMINio2LHZhtin2YXZh+KAjNin24wg2qnZhyDYp9iyINii2YbZh9inINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2K/YjCDZgdi52KfZhCDZiCDYr9ixINiv2LPYqtix2LMg2KjYp9i02K8uINio2LHZhtin2YXZh+KAjNmH2Kcg2YXZhdqp2YYg2KfYs9iqINin2LIg2KLZhiDYqNix2KfbjCDYqti524zbjNmGINis2KfbjNuMINqp2Ycg2YfYs9iq24zYr9iMINin2LPYqtmB2KfYr9mHINqp2YbZhtivINmIINmF2YXaqdmGINin2LPYqiDZhtuM2LHZiNuMINio2KfYqtix24wg2KjbjNi02KrYsduMINmF2LXYsdmBINqp2YbZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSI0ODg3ODk1MzYyMzU0MjM5NjI4Ij4i2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KrZgtix24zYqNuMICjZhdio2KrZhtuMINio2LEg2LTYqNqp2YcpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSIyNTM4MjAwMTg0MzczMzAyMjk1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KrZgtix24zYqNuMINi02YXYpyDYsdinINio2K/Ys9iqINii2YjYsdivLiDYp9uM2YYg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KfYsiDYs9ix2YjbjNiz4oCM2YfYp9uMINmF2YjZgti524zYqiDZhdqp2KfZhtuMINqp2Ycg2KfYsiDZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINi02KjaqdmH4oCM2KfbjCDZhdin2YbZhtivINio2LHYrOKAjNmH2KfbjCDYs9mE2YjZhNuMINmIIFdpLUZpINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2YbYr9iMINio2K/Ys9iqINmF24zigIzYotuM2K8uINin24zZhiDYs9ix2YjbjNiz4oCM2YfYp9uMINmF2YjZgti524zYqiDZhdqp2KfZhtuMINio2KfbjNivINiv2LEg2K/Ys9iq2q/Yp9mHINi02YXYpyDYqNix2KfbjCDYqNix2YbYp9mF2YfigIzYp9uMINqp2Ycg2KfYsiDYotmG2YfYpyDYp9iz2KrZgdin2K/ZhyDZhduM4oCM2qnZhtiv2Iwg2YHYudin2YQg2Ygg2K/YsSDYr9iz2KrYsdizINio2KfYtNivLiDYqNix2YbYp9mF2YfigIzZh9inINmF2YXaqdmGINin2LPYqiDYp9iyINii2YYg2KjYsdin24wg2KrYuduM24zZhiDYqtmC2LHbjNio24wg2KzYp9uM24wg2qnZhyDZh9iz2KrbjNiv2Iwg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjIzNjM5Njk2NDE3OTIzODg5NDciPiLYr9iz2KrYsdiz24wg2KjZhyBTdXJmYWNlRmxpbmdlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+Itin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqNix2YbYp9mF2Ycg2KfYsiDZiNuM2pjar9uM4oCM2YfYp9uMINiz2LfYrSDZvtin24zbjNmGIFN1cmZhY2VGbGluZ2VyINin2LPYqtmB2KfYr9mHINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjI1MzgyMDAxODQzNzMzMDIyOTUiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2qnZhyDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYqtmC2LHbjNio24wg2LTZhdinINix2Kcg2KjYr9iz2Kog2KLZiNix2K8uINin24zZhiDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYp9iyINiz2LHZiNuM2LPigIzZh9in24wg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2qnZhyDYp9iyINmF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2LTYqNqp2YfigIzYp9uMINmF2KfZhtmG2K8g2KjYsdis4oCM2YfYp9uMINiz2YTZiNmE24wg2YggV2ktRmkg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjNqp2YbZhtiv2Iwg2KjYr9iz2Kog2YXbjOKAjNii24zYry4g2KfbjNmGINiz2LHZiNuM2LPigIzZh9in24wg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KjYp9uM2K8g2K/YsSDYr9iz2Krar9in2Ycg2LTZhdinINio2LHYp9uMINio2LHZhtin2YXZh+KAjNin24wg2qnZhyDYp9iyINii2YbZh9inINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2K/YjCDZgdi52KfZhCDZiCDYr9ixINiv2LPYqtix2LMg2KjYp9i02K8uINio2LHZhtin2YXZh+KAjNmH2Kcg2YXZhdqp2YYg2KfYs9iqINin2LIg2KLZhiDYqNix2KfbjCDYqti524zbjNmGINiq2YLYsduM2KjbjCDYrNin24zbjCDaqdmHINmH2LPYqtuM2K/YjCDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMjM2Mzk2OTY0MTc5MjM4ODk0NyI+IuKAj9iv2LPYqtix2LPbjCDYqNmHIFN1cmZhY2VGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i4oCP2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2LHZhtin2YXZhyDYp9iyINmI24zamNqv24zigIzZh9in24wg2LPYt9itINm+2KfbjNuM2YYgU3VyZmFjZUZsaW5nZXIg2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+Itiu2YjYp9mG2K/ZhiDYqNin2YHYsSDZgtin2KgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YXYrdiq2YjYp9uMINio2KfZgdixINqp2KfYr9ixINix2Kcg2KjYrtmI2KfZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i2b7bjNqp2LHYqNmG2K/bjCDYtdmB2K3ZhyDZhtmF2KfbjNi04oCM2YfYp9uMIFdp4oCRRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDYp9iq2LXYp9mEINio2Ycg2LXZgdit2KfYqiDZhtmF2KfbjNi0IFdp4oCRRmkg2LHYpyDZvtuM2qnYsdio2YbYr9uMINqp2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+Itqp2YbYqtix2YQg2LXZgdit2Ycg2YbZhdin24zYtOKAjNmH2KfbjCBXaeKAkUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDaqdmHINmI24zamNqv24zigIzZh9in24wg2LPYt9itINm+2KfbjNuM2YYg2LXZgdit2YfigIzZh9in24wg2YbZhdin24zYtCBXaeKAkUZpINix2Kcg2qnZhtiq2LHZhCDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmF2K3YqtmI2KfbjCDYqNin2YHYsSDaqdin2K/YsSDYsdinINio2K7ZiNin2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiLigI/Yr9iz2KrYsdiz24wg2KjZhyBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i4oCP2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2LHZhtin2YXZhyDYp9iyINmC2KfYqNmE24zYquKAjNmH2KfbjCDYs9i32K0g2b7Yp9uM24zZhiBJbnB1dEZsaW5nZXIg2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i4oCP2b7bjNqp2LHYqNmG2K/bjCDYtdmB2K3ZhyDZhtmF2KfbjNi04oCM2YfYp9uMIFdp4oCRRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDYp9iq2LXYp9mEINio2Ycg2LXZgdit2KfYqiDZhtmF2KfbjNi0IFdp4oCRRmkg2LHYpyDZvtuM2qnYsdio2YbYr9uMINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IuKAj9qp2YbYqtix2YQg2LXZgdit2Ycg2YbZhdin24zYtOKAjNmH2KfbjCBXaeKAkUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDaqdmHINmI24zamNqv24zigIzZh9in24wg2LPYt9itINm+2KfbjNuM2YYg2LXZgdit2YfigIzZh9in24wg2YbZhdin24zYtCBXaeKAkUZpINix2Kcg2qnZhtiq2LHZhCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2ODU3MTM0NDk4NDAyMzQ2NzA4Ij4i2LbYqNi3INiu2LHZiNis24wg2LXYr9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjIxMDU5Nzc1NDIxMjIwODg1MyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYrtix2YjYrNuMINi12K/YpyDYsdinINi22KjYtyDZiCDZh9iv2KfbjNiqINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb0hvdHdvcmQiIG1zZ2lkPSIxODkwNTUzOTM1NjUwMzQ5ODA4Ij4i2KrYtNiu24zYtSDaqdmE24zYr9qv2YHYqtmHIjwvc3RyaW5nPgpAQCAtNDk1LDEzMyArNTA0LDEzNSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2KrZhti424zZhdin2Kog2LXZiNiq24wg2qnZhNuMINmF2KfZhtmG2K8g2YXbjNiy2KfZhiDYtdiv2Kcg2Ygg2KjZhNmG2K/ar9mI24wg2YXZiNix2K8g2KfYs9iq2YHYp9iv2Ycg2KjYsdin24wg2b7Yrti0INi12K/YpyDYsdinINin2LXZhNin2K0g2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4i2LbYqNi3INi12K/YpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYtdiv2Kcg2LHYpyDYqNinINmF24zaqdix2YjZgdmGINi22KjYtyDaqdmG2K8uINin24zZhiDZhdis2YjYsiDYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2LXYr9inINix2Kcg2K/YsSDZh9ixINiy2YXYp9mGINqp2Ycg2KjYrtmI2KfZh9uM2K8g2KjYr9mI2YYg2KrYo9uM24zYryDYtNmF2Kcg2LbYqNi3INqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+Itin2LHYqtio2KfYt9in2Kog2LPbjNmFINqp2KfYsdiqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDYp9ix2LPYp9mEINiv2LPYqtmI2LHYp9iqINio2Ycg2LPbjNmFINqp2KfYsdiqINix2Kcg2YXbjOKAjNiv2YfYry4g2KfbjNmGINio2LPbjNin2LEg2K7Yt9ix2YbYp9qpINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLYudqp2LPYqNix2K/Yp9ix24wg2Ygg2YHbjNmE2YXYqNix2K/Yp9ix24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Kcg2K/ZiNix2KjbjNmGINio2Ycg2Lnaqdiz2KjYsdiv2KfYsduMINmIINmB24zZhNmF2KjYsdiv2KfYsduMINio2b7Ysdiv2KfYstivLiDYp9uM2YYg2YXYrNmI2LIg2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM4oCM2K/Zh9ivINin2LIg2K/ZiNix2KjbjNmGINiv2LEg2YfYsSDYstmF2KfZhtuMINio2K/ZiNmGINiq2KPbjNuM2K8g2LTZhdinINin2LPYqtmB2KfYr9mHINqp2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiJMRUQg2YbYtNin2Ybar9ixINin2YbYqtmC2KfZhCDYr9in2K/Zh9iMINmH2Ybar9in2YUg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYr9mI2LHYqNuM2YYg2LrbjNix2YHYudin2YQg2LTZiNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iNDc2NDU4NTQ2NTQ4MDI5NTM0MSI+Itio2Ycg24zaqSDYqNix2YbYp9mF2Ycg2LPbjNiz2KrZhSDYp9iyINmC2KjZhCDZhti12Kgg2LTYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryBMRUQg2YbYtNin2Ybar9ixINin2LPYqtmB2KfYr9mHINin2LIg2K/ZiNix2KjbjNmGINix2Kcg2LrbjNix2YHYudin2YQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IuKAj0xFRCDZhti02KfZhtqv2LEg2KfZhtiq2YLYp9mEINiv2KfYr9mH2Iwg2YfZhtqv2KfZhSDYp9iz2KrZgdin2K/ZhyDYp9iyINiv2YjYsdio24zZhiDYutuM2LHZgdi52KfZhCDYtNmI2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4i4oCP2KjZhyDbjNqpINio2LHZhtin2YXZhyDYs9uM2LPYqtmFINin2LIg2YLYqNmEINmG2LXYqCDYtNiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivIExFRCDZhti02KfZhtqv2LEg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYr9mI2LHYqNuM2YYg2LHYpyDYutuM2LHZgdi52KfZhCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjk2MTI5MjIwNTc2NDQ4ODMwNCI+Iti624zYsSDZgdi52KfZhCDaqdix2K/ZhiDYr9in2KbZhSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4i2KrZhNmB2YYg2KjYt9mI2LEg2K/Yp9im2YXbjCDYutuM2LHZgdi52KfZhCDYtNmI2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMzNDgxODgwODAwMTY5OTUzMCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2KjZhyDYt9mI2LEg2qnZhNuMINmIINiv2KfYptmF24wg2LrbjNix2YHYudin2YQg2qnZhtivLiDYp9uM2YYg2qnYp9ixINio2LPbjNin2LEg2K7Yt9ix2YbYp9qpINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3ODg5MDMyOTc2MjcyODMwOTkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDar9mI2LTbjCDYsdinINio2Ycg2LfZiNixINqp2YTbjCDZiCDYr9in2KbZhduMINi624zYsdmB2LnYp9mEINqp2YbYry4g2KfbjNmGINqp2KfYsSDYqNiz24zYp9ixINiu2LfYsdmG2KfaqSDYp9iz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMzQ4MTg4MDgwMDE2OTk1MzAiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINio2Ycg2LfZiNixINqp2YTbjCDZiCDYr9in2KbZhduMINi624zYsdmB2LnYp9mEINqp2YbYry4g2KfbjNmGINqp2KfYsSDYqNiz24zYp9ixINiu2LfYsdmG2KfaqSDYp9iz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzg4OTAzMjk3NjI3MjgzMDk5Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2q/ZiNi024wg2LHYpyDYqNmHINi32YjYsSDaqdmE24wg2Ygg2K/Yp9im2YXbjCDYutuM2LHZgdi52KfZhCDaqdmG2K8uINin24zZhiDaqdin2LEg2KjYs9uM2KfYsSDYrti32LHZhtin2qkg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDM2NjM0OTcyNTYxNzk1MDAyIj4i2LHYp9mH4oCM2KfZhtiv2KfYstuMINmF2KzYr9ivINin2KzYqNin2LHbjCDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg5ODU2MDg3MjQ2MjYzODI0MiI+Itin2KzYqNin2LEg2KjYsdmG2KfZhdmHINio2LHYp9uMINix2KfZh+KAjNin2YbYr9in2LLbjCDZhdis2K/YryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiz2KjYqCDYsdin2YfigIzYp9mG2K/Yp9iy24wg2YXYrNiv2K8g2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LTZiNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYs9io2Kgg2LHYp9mH4oCM2KfZhtiv2KfYstuMINmF2KzYr9ivINqv2YjYtNuMINi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+Itiv2LPYqtix2LPbjCDYqNmHINiz24zYs9iq2YUg2YHYp9uM2YQg2K3Yp9mB2LjZh9mUIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiLYr9iz2KrYsdiz24wg2KjZhyDYs9uM2LPYqtmFINmB2KfbjNmEINqp2KfYsdiqIFNEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgbXNnaWQ9IjE4MjkyOTA3MDE2NTg5OTIzNDciPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdin24zZhOKAjNmH2KfbjCDYs9uM2LPYqtmF24wg2K/YsSDYrdin2YHYuNmHINis2K/Yp9i02K/ZhtuMINmG2LXYqCDYtNmI2K8g24zYpyDZhti12Kgg2KLZhiDZhNi62Ygg2LTZiNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyMjc4MTk1ODI2MjQ5MDQ5NzIiPiLZvtin2qkg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYyNTgyNjk4NjM5Mjc0MDU2Ij4i2b7Yp9qpINqp2LHYr9mGINqp2KfYsdiqIFNEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iODc4NDI2ODI0Njc3OTE5ODYyNyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINit2KfZgdi42Ycg2KzYr9in2LTYr9mG24wg2LHYpyDZgdix2YXYqiDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MTcyMDU2MTgwMDYzNzAwNzQxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LPYqNioINix2KfZh+KAjNin2YbYr9in2LLbjCDZhdis2K/YryDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTMyNjAwODEyNDI4OTk4OTk2OSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiz2KjYqCDYsdin2YfigIzYp9mG2K/Yp9iy24wg2YXYrNiv2K8g2q/ZiNi024wg2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyOTI3MzYxNTM3OTQyNTkxODQxIj4i4oCP2K/Ys9iq2LHYs9uMINio2Ycg2LPbjNiz2KrZhSDZgdin24zZhCDYrdin2YHYuNmH2ZQgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQwMjMwNTA0OTg5MDk1MzgxMCI+IuKAj9iv2LPYqtix2LPbjCDYqNmHINiz24zYs9iq2YUg2YHYp9uM2YQg2qnYp9ix2KogU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iMTgyOTI5MDcwMTY1ODk5MjM0NyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmB2KfbjNmE4oCM2YfYp9uMINiz24zYs9iq2YXbjCDYr9ixINit2KfZgdi42Ycg2KzYr9in2LTYr9mG24wg2YbYtdioINi02YjYryDbjNinINmG2LXYqCDYotmGINmE2LrZiCDYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+IuKAj9m+2KfaqSDaqdix2K/ZhiDYrdin2YHYuNmH2ZQgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiLigI/Zvtin2qkg2qnYsdiv2YYg2qnYp9ix2KogU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIG1zZ2lkPSI4Nzg0MjY4MjQ2Nzc5MTk4NjI3Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K3Yp9mB2LjZhyDYrNiv2KfYtNiv2YbbjCDYsdinINmB2LHZhdiqINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzQxMTMzODYzMjAwMjE5Mzg0NiI+Itiv2LHbjNin2YHYqiDYp9i32YTYp9i52KfYqiDZhdix2KjZiNi3INio2Ycg2K3Yp9mB2LjZh9mUINiv2KfYrtmE24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2FjY2VzcyIgbXNnaWQ9IjMwOTQ1NjM4NDQ1OTM4Nzg1NDgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9i32YTYp9i52KfYqiDZhdix2KjZiNi3INio2Ycg2K3Yp9mB2LjZh9mUINiv2KfYrtmE24wg2LHYpyDYr9ix24zYp9mB2Kog2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINin2LfZhNin2LnYp9iqINmF2LHYqNmI2Lcg2KjZhyDYrdin2YHYuNmH2ZQg2K/Yp9iu2YTbjCDYsdinINiv2LHbjNin2YHYqiDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2NyZWF0ZSIgbXNnaWQ9IjY0MTQ3NTcyMzQ3ODkzMzYzMjciPiLYp9uM2KzYp9ivINit2KfZgdi42YfZlCDYr9in2K7ZhNuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19jcmVhdGUiIG1zZ2lkPSI0NTU4ODY5MjczNTg1ODU2ODc2Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K3Yp9mB2LjZh9mUINiv2KfYrtmE24wg2KfbjNis2KfYryDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19jcmVhdGUiIG1zZ2lkPSI0NTU4ODY5MjczNTg1ODU2ODc2Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K3Yp9mB2LjZh9mUINiv2KfYrtmE24wg2KfbjNis2KfYryDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI1MjY5MjgzMjgzMDE2MTgwMjIiPiLYrtix2KfYqCDaqdix2K/ZhiDYrdin2YHYuNmH2ZQg2K/Yp9iu2YTbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjcyMTg3NDkyODYxNDU1MjY1MzciPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrdin2YHYuNmH2ZQg2K/Yp9iu2YTbjCDYsdinINin2LIg2KjbjNmGINio2KjYsdivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjcyMTg3NDkyODYxNDU1MjY1MzciPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrdin2YHYuNmH2ZQg2K/Yp9iu2YTbjCDYsdinINin2LIg2KjbjNmGINio2KjYsdivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iODg3Nzk5ODEwMTk0NDk5OTM4NiI+ItmG2LXYqC/ZhNi62Ygg2YbYtdioINit2KfZgdi42YfZlCDYr9in2K7ZhNuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iMzQ1MTM2MDExNDkwMjQ5MDkyOSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYrdin2YHYuNmH2ZQg2K/Yp9iu2YTbjCDYsdinINmG2LXYqCDaqdix2K/Zhy/Zhti12Kgg2KLZhtix2Kcg2YTYutmIINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSIzNDUxMzYwMTE0OTAyNDkwOTI5Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINit2KfZgdi42YfZlCDYr9in2K7ZhNuMINix2Kcg2YbYtdioINqp2LHYr9mHL9mG2LXYqCDYotmG2LHYpyDZhNi62Ygg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19yZW5hbWUiIG1zZ2lkPSI3NDk2NjMzOTU0MDgwNDcyNDE3Ij4i2YbYp9mF2q/YsNin2LHbjCDZhdis2K/YryDYr9iz2Krar9in2Ycg2LDYrtuM2LHZhyDYr9in2K7ZhNuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19yZW5hbWUiIG1zZ2lkPSIxNzk0NzU3NTg4NDcyMTI3Njc1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YbYp9mFINit2KfZgdi42YfZlCDYr9in2K7ZhNuMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19yZW5hbWUiIG1zZ2lkPSIxNzk0NzU3NTg4NDcyMTI3Njc1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YbYp9mFINit2KfZgdi42YfZlCDYr9in2K7ZhNuMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+Itqp2YbYqtix2YQg2YTYsdiy2LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmE2LHYstin2YbZhtiv2Ycg2LHYpyDaqdmG2KrYsdmEINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmE2LHYstin2YbZhtiv2Ycg2LHYpyDaqdmG2KrYsdmEINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i2qnZhtiq2LHZhCDahtix2KfYuiDZgtmI2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqG2LHYp9i6INmC2YjZhyDYsdinINqp2YbYqtix2YQg2qnZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNiIiBtc2dpZD0iMTExMzQ1MzQzMDY0NTQwMjcyMyI+ItmF2K/bjNix24zYqiDYqtmG2LjbjNmF2KfYqiDYqNix2q/YstuM2K/ZhyDZiCDZhdis2YjYstmH2Kcg2KjYsdin24wg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqtmG2LjbjNmF2KfYqiDYqNix2q/YstuM2K/ZhyDZiCDZhdis2YjYstmH2KfbjCDYr9iz2Krar9in2YfigIzZh9in24wgVVNCINix2Kcg2YXYr9uM2LHbjNiqINqp2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc010cCIgbXNnaWQ9IjQ5NTM0Njg2NzY3OTU5MTcwNDIiPiLYp9i52YXYp9mEINm+2LHZiNiq2qnZhCBNVFAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4i2K/Ys9iq2LHYs9uMINio2Ycg2K/Ysdin24zZiNixINqp2LHZhtmEIE1UUCDYrNmH2Kog2KfYudmF2KfZhCDZvtix2YjYqtqp2YQgTVRQIFVTQiDYsdinINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqG2LHYp9i6INmC2YjZhyDYsdinINqp2YbYqtix2YQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNiIiBtc2dpZD0iMTExMzQ1MzQzMDY0NTQwMjcyMyI+IuKAj9mF2K/bjNix24zYqiDYqtmG2LjbjNmF2KfYqiDYqNix2q/YstuM2K/ZhyDZiCDZhdis2YjYstmH2Kcg2KjYsdin24wg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqtmG2LjbjNmF2KfYqiDYqNix2q/YstuM2K/ZhyDZiCDZhdis2YjYstmH2KfbjCDYr9iz2Krar9in2YfigIzZh9in24wgVVNCINix2Kcg2YXYr9uM2LHbjNiqINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc010cCIgbXNnaWQ9IjQ5NTM0Njg2NzY3OTU5MTcwNDIiPiLigI/Yp9i52YXYp9mEINm+2LHZiNiq2qnZhCBNVFAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4i4oCP2K/Ys9iq2LHYs9uMINio2Ycg2K/Ysdin24zZiNixINqp2LHZhtmEIE1UUCDYrNmH2Kog2KfYudmF2KfZhCDZvtix2YjYqtqp2YQgTVRQIFVTQiDYsdinINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI0MTQ4MjkwODYwNDAwNjU5MTQ2Ij4i2KrYs9iqINiz2K7YquKAjNin2YHYstin2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNjU5Nzk2NDE5MTIwODAxNjYwNSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqNmHINmF2YbYuNmI2LEg2KrYs9iqINiz2K7YquKAjNin2YHYstin2LHYjCDZgtiz2YXYquKAjNmH2KfbjCDYrNin2YbYqNuMINmF2K7YqtmE2YEg2LHYpyDaqdmG2KrYsdmEINqp2YbZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI2NTk3OTY0MTkxMjA4MDE2NjA1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2Ycg2YXZhti42YjYsSDYqtiz2Kog2LPYrtiq4oCM2KfZgdiy2KfYsdiMINmC2LPZhdiq4oCM2YfYp9uMINis2KfZhtio24wg2YXYrtiq2YTZgSDYsdinINqp2YbYqtix2YQg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i2KrZhdin2LMg2YXYs9iq2YLbjNmFINio2Kcg2LTZhdin2LHZhyDYqtmE2YHZhuKAjNmH2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2K/ZiNmGINiv2K7Yp9mE2Kog2LTZhdinINio2Kcg2LTZhdin2LHZh+KAjNmH2KfbjCDYqtmE2YHZhiDYqtmF2KfYsyDYqNqv24zYsdivLiDYp9uM2YYg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINin24zYrNin2K8g2YfYstuM2YbZhyDbjNinINiq2YXYp9iz4oCM2YfYp9uMINm+24zYtOKAjNio24zZhtuMINmG2LTYr9mHINi02YjYry4g2KrZiNis2Ycg2K/Yp9i02KrZhyDYqNin2LTbjNivINqp2Ycg2KfbjNmGINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YbZhduM4oCM2K/Zh9ivINio2Ycg2KjYsdmC2LHYp9ix24wg2KrZhdin2LPigIzZh9in24wg2KfYtti32LHYp9ix24wg2KjZvtix2K/Yp9iy2K8uINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdiu2LHYqCDZhdmF2qnZhiDYp9iz2Kog2KjYpyDYqNix2YLYsdin2LHbjCDYqtmF2KfYsyDYqNiv2YjZhiDYqtij24zbjNivINi02YXYpyDZh9iy24zZhtmH4oCM2YfYp9uM24wg2LHYpyDYqNix2KfbjCDYtNmF2Kcg2KfbjNis2KfYryDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+Itiq2YXYp9izINmF2LPYqtmC24zZhSDYqNinINmH2LEg2LTZhdin2LHZhyDYqtmE2YHZhtuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSIxNjg5MDI0OTAxNTA5OTk2ODEwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjYr9mI2YYg2K/Yrtin2YTYqiDYqNinINmH2LEg2LTZhdin2LHZhyDYqtmE2YHZhtuMINiq2YXYp9izINio2q/bjNix2K/YjCDYp9iyINis2YXZhNmHINi02YXYp9ix2YfigI7Zh9in24wg2KfYtti32LHYp9ix24wuINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINiq2YXYp9iz4oCM2YfYp9uMINi624zYsdi22LHZiNix24wg2Ygg2LrbjNixINmC2KfZhtmI2YbbjCDYqNinINiu2K/Zhdin2Kog2KfYtti32LHYp9ix24wg2Kjar9uM2LHZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ4NDI1NzY5OTQxNDQ2MDQ4MjEiPiLYsdin2YfigIzYp9mG2K/Yp9iy24wg2YXYs9iq2YLbjNmFINiq2YbYuNuM2YUg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wgQ0RNQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NjA0ODQ4MDk1MzE1NDIxNDI1Ij4i2LTYsdmI2Lkg2YXYs9iq2YLbjNmFINix2KfZh+KAjNin2YbYr9in2LLbjCDYqtmE2YHZhiBDRE1BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIG1zZ2lkPSIxOTk0MTkzNTM4ODAyMzE0MTg2Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LTYsdin24zYtyDZhdmC2LHYsdin2KogQ0RNQSDYsdinINi02LHZiNi5INqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2LTYsdin24zYtyDZhdmC2LHYsdin2KogQ0RNQSDYsdinINiv2LEg2YXZiNin2YLYuSDYutuM2LHYttix2YjYsduMINi02LHZiNi5INqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNiv2YjZhiDYr9iu2KfZhNiqINio2Kcg2YfYsSDYtNmF2KfYsdmHINiq2YTZgdmG24wg2KrZhdin2LMg2Kjar9uM2LHYr9iMINin2LIg2KzZhdmE2Ycg2LTZhdin2LHZh+KAjtmH2KfbjCDYp9i22LfYsdin2LHbjC4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KrZhdin2LPigIzZh9in24wg2LrbjNix2LbYsdmI2LHbjCDZiCDYutuM2LEg2YLYp9mG2YjZhtuMINio2Kcg2K7Yr9mF2KfYqiDYp9i22LfYsdin2LHbjCDYqNqv24zYsdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+IuKAj9ix2KfZh+KAjNin2YbYr9in2LLbjCDZhdiz2KrZgtuM2YUg2KrZhti424zZhSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCBDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiLigI/YtNix2YjYuSDZhdiz2KrZgtuM2YUg2LHYp9mH4oCM2KfZhtiv2KfYstuMINiq2YTZgdmGIENETUEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgbXNnaWQ9IjE5OTQxOTM1Mzg4MDIzMTQxODYiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYtNix2KfbjNi3INmF2YLYsdix2KfYqiBDRE1BINix2Kcg2LTYsdmI2Lkg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYtNix2KfbjNi3INmF2YLYsdix2KfYqiBDRE1BINix2Kcg2K/YsSDZhdmI2KfZgti5INi624zYsdi22LHZiNix24wg2LTYsdmI2Lkg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+Itqp2YbYqtix2YQg2KfYudmE2KfZhuKAjNmH2KfbjCDYqNmH4oCM2LHZiNiy2LHYs9in2YbbjCDZhdqp2KfZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9IjExMjA3NDE1NTc4OTE0Mzg4NzYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KfYudmE2KfZhtmH2KfbjCDYqNmH4oCO2LHZiNiy2LHYs9in2YbbjCDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYsdinINin2LIg2LHYp9iv24zZiCDZgdi52KfZhC/YutuM2LHZgdi52KfZhCDaqdmG2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINin2LnZhNin2YbZh9in24wg2KjZh+KAjtix2YjYstix2LPYp9mG24wg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2LHYpyDYp9iyINix2KfYr9uM2Ygg2YHYudin2YQv2LrbjNix2YHYudin2YQg2qnZhtivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9Ijc4NTUyNTk0NjEyNjg3MzQ5MTQiPiLYr9iz2KrYsdiz24wg2KjZhyDZhdi02K7Ytdin2Kog2KfYudmE2KfZhSDZiNix2YjYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNDAyNDUyNjk2ODYzMDE5NDEyOCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYr9iz2KrYsdiz24wg2KjZhyDZiNuM2pjar9uM4oCM2YfYp9uMINio2KfYsdqv2LDYp9ix24wg2LTYr9mHINiq2YjYs9i3INiz2LHZiNuM2LPigIzZh9in24wg2YjYsdmI2K8g2LHYpyDYqNiu2YjYp9mG2K8v2KjZhtmI24zYs9ivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI0MDI0NTI2OTY4NjMwMTk0MTI4Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiv2LPYqtix2LPbjCDYqNmHINmI24zamNqv24zigIzZh9in24wg2KjYp9ix2q/YsNin2LHbjCDYtNiv2Ycg2KrZiNiz2Lcg2LPYsdmI24zYs+KAjNmH2KfbjCDZiNix2YjYryDYsdinINio2K7ZiNin2YbYry/YqNmG2YjbjNiz2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhdmI2LHYryDZhtuM2KfYsiDZhtuM2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiLYp9mG2KrYrtin2Kgg2KfYqNiy2KfYsdqp4oCM2YfYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjZhyDYs9uM2LPYqtmFINin2LnZhNin2YUg2qnZhtivINqp2K/Yp9mFINmI24zYrNiqINix2Kcg2qnYr9in2YUg2KjYsdmG2KfZhdmHINmF24zigI7YqtmI2KfZhtivINin2LPYqtmB2KfYr9mHINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2KfbjCDaqdmHINin24zZhiDZhdis2YjYsiDYsdinINiv2KfYsdivINmF24zigI7YqtmI2KfZhtivINio2Ycg2K/Yp9iv2YfigI7Zh9in24wg2LTYrti124wg2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCO2YfYpyDYr9iz2KrYsdiz24wg2K/Yp9i02KrZhyDYqNin2LTYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjZhyDYs9uM2LPYqtmFINin2LnZhNin2YUg2qnZhtivINqp2K/Yp9mFINmI24zYrNiqINix2Kcg2qnYr9in2YUg2KjYsdmG2KfZhdmHINmF24zigI7YqtmI2KfZhtivINin2LPYqtmB2KfYr9mHINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2KfbjCDaqdmHINin24zZhiDZhdis2YjYsiDYsdinINiv2KfYsdivINmF24zigI7YqtmI2KfZhtivINio2Ycg2K/Yp9iv2YfigI7Zh9in24wg2LTYrti124wg2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCO2YfYpyDYr9iz2KrYsdiz24wg2K/Yp9i02KrZhyDYqNin2LTYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9Ijg0MjM5MjM3Nzc2NTkyOTIyMjgiPiLYp9i12YTYp9itINqp2LHYr9mGINit2KfZhNiqINiq2YTZgdmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9IjEwMjk4Nzc1MjkwMDc2ODY3MzIiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2YjbjNqY2q/bjOKAjNmH2KfbjCDYr9iz2Krar9in2Ycg2LHYpyDaqdmG2KrYsdmEINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2KfbjCDaqdmHINin24zZhiDZhdis2YjYsiDYsdinINiv2KfYsdivINmF24zigI7YqtmI2KfZhtivINio2K/ZiNmGINin2LfZhNin2Lkg2LTZhdinINiq2LnZiNuM2LYg2LTYqNqp2Ycg2K/Yp9i02KrZhyDYqNin2LTYr9iMINix2KfYr9uM2YjbjCDYqtmE2YHZhiDYsdinINix2YjYtNmGINuM2Kcg2K7Yp9mF2YjYtCDaqdmG2K8g2Ygg2qnYp9ix2YfYp9uM24wg2KfYsiDYp9uM2YYg2YLYqNuM2YQg2LHYpyDYp9mG2KzYp9mFINiv2YfYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDZiNuM2pjar9uM4oCM2YfYp9uMINiv2LPYqtqv2KfZhyDYsdinINqp2YbYqtix2YQg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Yp9uMINqp2Ycg2KfbjNmGINmF2KzZiNiyINix2Kcg2K/Yp9ix2K8g2YXbjOKAjtiq2YjYp9mG2K8g2KjYr9mI2YYg2KfYt9mE2KfYuSDYtNmF2Kcg2KrYudmI24zYtiDYtNio2qnZhyDYr9in2LTYqtmHINio2KfYtNiv2Iwg2LHYp9iv24zZiNuMINiq2YTZgdmGINix2Kcg2LHZiNi02YYg24zYpyDYrtin2YXZiNi0INqp2YbYryDZiCDaqdin2LHZh9in24zbjCDYp9iyINin24zZhiDZgtio24zZhCDYsdinINin2YbYrNin2YUg2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSI5MTc4MjI4NTI0NTA3NjEwNDg2Ij4i2K7ZiNin2YbYr9mGINmI2LbYuduM2Kog2KrZhNmB2YYg2Ygg2LTZhtin2LPZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iMTYzOTIxMjc3MTgyNjEyNTUyOCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqNmHINmI24zamNqv24zigIzZh9in24wg2KrZhNmB2YYg2K/Ys9iq2q/Yp9mHINi02YXYpyDYr9iz2KrYsdiz24wg2b7bjNiv2Kcg2qnZhtivLiDYp9uM2YYg2YXYrNmI2LIg2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINi02YXYp9ix2Ycg2KrZhNmB2YYg2Ygg2LTZhtin2LPZh+KAjNmH2KfbjCDYr9iz2Krar9in2YfYjCDZgdi52KfZhCDYqNmI2K/ZhiDbjNqpINiq2YXYp9izINmIINi02YXYp9ix2Ycg2LHYp9mHINiv2YjYsduMINqp2Ycg2KjYpyDbjNqpINiq2YXYp9izINmF2KrYtdmEINi02K/ZhyDYp9iz2Kog2LHYpyDZhdi02K7YtSDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUzMTczMTQzNTAxMTQ5NTAxNSI+ItmF2YXYp9mG2LnYqiDYp9iyINio2Ycg2K7ZiNin2Kgg2LHZgdiq2YYg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTczNDgwMTg3OTQxNDk2MTMwIj4i2YXZhdin2YbYudiqINin2LIg2KjZhyDYrtmI2KfYqCDYsdmB2KrZhiDYqtmE2YHZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzExMzE5ODI0NDAwNDQ3ODY4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYsiDYutuM2LHZgdi52KfZhCDYtNiv2YYg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2KzZhNmI2q/bjNix24wg2qnZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODU1OTEwMDY3NzM3MjkyODc1NCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINin2LIg2LrbjNix2YHYudin2YQg2LTYr9mGINiq2YTZgdmGINis2YTZiNqv24zYsduMINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINin2LIg2LrbjNix2YHYudin2YQg2LTYr9mGINix2KfbjNin2YbZh9mUINmE2YjYrduMINis2YTZiNqv24zYsduMINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg1NTkxMDA2NzczNzI5Mjg3NTQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9iyINi624zYsdmB2LnYp9mEINi02K/ZhiDYqtmE2YHZhiDYrNmE2Yjar9uM2LHbjCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl90cmFuc21pdElyIiBtc2dpZD0iNzU0NTg1ODUwNDIzODUzMDEwNSI+Itin2LHYs9in2YQg2YXYp9iv2YjZhiDZgtix2YXYsiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RyYW5zbWl0SXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUzNTgzMDg4NTQzMDY1MjkxNzAiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDYp9iyINmB2LHYs9iq2YbYr9mHINmF2KfYr9mI2YYg2YLYsdmF2LLCoNix2KfbjNin2YbZhyDZhNmI2K3bjMKg2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RyYW5zbWl0SXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3OTU3NzYzNzQ1MDIwMzAwNzI1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINiq2Kcg2KfYsiDZgdix2LPYqtmG2K/ZhyDZhdin2K/ZiNmGINmC2LHZhdiyINiq2YTZgdmGINin2LPYqtmB2KfYr9mHINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RldmljZVBvd2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzg3MDM0NzIyNjE2MzUwNDE3Ij4i2LHZiNi02YYv2K7Yp9mF2YjYtCDaqdix2K/ZhiDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTI4NjIyNDcwOTgwOTQzMjA2Ij4i2LHZiNi02YYv2K7Yp9mF2YjYtCDaqdix2K/ZhiDYqtmE2YHZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njg5ODYyODc4OTg0NjMxODMxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2LHZiNi02YYg24zYpyDYrtin2YXZiNi0INqp2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjYwMzcwNTczNDg0NjMxMzEwMzIiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2q/ZiNi024wg2LHYpyDYsdmI2LTZhiDbjNinINiu2KfZhdmI2LQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njg5ODYyODc4OTg0NjMxODMxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2LHZiNi02YYg24zYpyDYrtin2YXZiNi0INqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjYwMzcwNTczNDg0NjMxMzEwMzIiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2q/ZiNi024wg2LHYpyDYsdmI2LTZhiDbjNinINiu2KfZhdmI2LQg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmFjdG9yeVRlc3QiIG1zZ2lkPSIzNzE1MjI1NDkyNjk2NDE2MTg3Ij4i2KfYrNix2Kcg2K/YsSDYrdin2YTYqiDYqtiz2Kog2qnYp9ix2K7Yp9mG2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk1MjA1OTMxODM1OTY1MzA5MSI+Itin2KzYsdinINio2YfigIzYudmG2YjYp9mGINiq2LPYqiDYs9in2LLZhtiv2Ycg2LPYt9itINm+2KfbjNuM2YbYjCDYp9mF2qnYp9mGINiv2LPYqtix2LPbjCDaqdin2YXZhCDYqNmHINiz2K7YquKAjNin2YHYstin2LEg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LTZhdinINix2Kcg2YHYsdin2YfZhSDZhduM4oCM2KLZiNix2K8uINmB2YLYtyDYstmF2KfZhtuMINqp2Ycg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2K/YsSDYrdin2YTYqiDYqtiz2Kog2LPYp9iy2YbYr9mHINiv2LEg2K3Yp9mEINin2KzYsdin2LPYqiDZgtin2KjZhCDYr9iz2KrYsdiz24wg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZhY3RvcnlUZXN0IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODEzNjY0NDk5MDMxOTI0NDgwMiI+Itin2KzYsdinINio2YfigIzYudmG2YjYp9mGINiq2LPYqiDYs9in2LLZhtiv2Ycg2LPYt9itINm+2KfbjNuM2YbYjCDYp9mF2qnYp9mGINiv2LPYqtix2LPbjCDaqdin2YXZhCDYqNmHINiz2K7YquKAjNin2YHYstin2LEg2KrZhNmB2YYg2LTZhdinINix2Kcg2YHYsdin2YfZhSDZhduM4oCM2KLZiNix2K8uINmB2YLYtyDYstmF2KfZhtuMINqp2Ycg2KrZhNmB2YYg2K/YsSDYrdin2YTYqiDYqtiz2Kog2LPYp9iy2YbYr9mHINiv2LEg2K3Yp9mEINin2KzYsdin2LPYqiDZgtin2KjZhCDYr9iz2KrYsdiz24wg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNjYyNzE5MjMzMzM3MzQ2NTE0MyI+Itiq2YbYuNuM2YUg2KrYtdmI24zYsSDYstmF24zZhtmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNzM3MzQ0NzkyMDk3NzYyNDc0NSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiq2LXZiNuM2LEg2LLZhduM2YbZhyDYs9uM2LPYqtmFINix2Kcg2KrZhti424zZhSDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNzM3MzQ0NzkyMDk3NzYyNDc0NSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiq2LXZiNuM2LEg2LLZhduM2YbZhyDYs9uM2LPYqtmFINix2Kcg2KrZhti424zZhSDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjMyNzg2MDgxNjU5Nzc3MzY1MzgiPiLYqtmG2LjbjNmFINin2YbYr9in2LLZhyDYqti12YjbjNixINiy2YXbjNmG2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjgyMzU3ODQzODQyMjM3MzAwOTEiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtqp2KfYqiDYp9mG2K/Yp9iy2Ycg2KrYtdmI24zYsSDYstmF24zZhtmHINiz24zYs9iq2YUg2LHYpyDYqtmG2LjbjNmFINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjgyMzU3ODQzODQyMjM3MzAwOTEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtqp2KfYqiDYp9mG2K/Yp9iy2Ycg2KrYtdmI24zYsSDYstmF24zZhtmHINiz24zYs9iq2YUg2LHYpyDYqtmG2LjbjNmFINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hc3RlckNsZWFyIiBtc2dpZD0iMjMxNTc1MDQyMzEzOTY5NzM5NyI+Itio2KfYstmG2LTYp9mG24wg2LPbjNiz2KrZhSDYqNmHINmF2YjYp9ix2K8g2b7bjNi04oCM2YHYsdi2INqp2KfYsdiu2KfZhtmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIzNjY1MzgwNDkyNjMzOTEwMjI2Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjYt9mI2LEg2qnYp9mF2YQg2LPbjNiz2KrZhSDYsdinINix2YjbjCDYqtmG2LjbjNmF2KfYqiDaqdin2LHYrtin2YbZhyDYqNin2LLZhti02KfZhtuMINqp2YbYr9iMINmH2YXZhyDYr9in2K/Zh+KAjtmH2KfYjCDZvtuM2qnYsdio2YbYr9uMINmIINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhti12Kgg2LTYr9mHINix2Kcg2b7Yp9qpINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXN0ZXJDbGVhciIgbXNnaWQ9IjM2NjUzODA0OTI2MzM5MTAyMjYiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNi32YjYsSDaqdin2YXZhCDYs9uM2LPYqtmFINix2Kcg2LHZiNuMINiq2YbYuNuM2YXYp9iqINqp2KfYsdiu2KfZhtmHINio2KfYstmG2LTYp9mG24wg2qnZhtiv2Iwg2YfZhdmHINiv2KfYr9mH4oCO2YfYp9iMINm+24zaqdix2KjZhtiv24wg2Ygg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmG2LXYqCDYtNiv2Ycg2LHYpyDZvtin2qkg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZSIgbXNnaWQ9IjIwMjE2MTQ4Mjk1OTE3NzU2NDYiPiLYqtmG2LjbjNmFINiz2KfYudiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTg5NjM0MTQzODE1MTE1Mjg4MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiy2YXYp9mGINiz2KfYudiqINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NTU3MDI3MzA3MzgwMjAiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYstmF2KfZhiDYs9in2LnYqiDYqtmE2YHZhiDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE4OTYzNDE0MzgxNTExNTI4ODEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYstmF2KfZhiDYs9in2LnYqiDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODU1NzAyNzMwNzM4MDIwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LLZhdin2YYg2LPYp9i52Kog2KrZhNmB2YYg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWVab25lIiBtc2dpZD0iMjk0NTA3OTgwMTAxMzA3NzM0MCI+Itiq2YbYuNuM2YUg2YXZhti32YLZh9mUINiy2YXYp9mG24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTY3Njk4MzcxMjMxNTgyNzY0NSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmF2YbYt9mC2YfZlCDYstmF2KfZhtuMINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDk5OTQzNDg4NDM2NjMzMzk4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YXZhti32YLZh9mUINiy2YXYp9mG24wg2KrZhNmB2YYg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjQ4MjkyNjIzNDk2OTEzODY5ODYiPiLYudmF2YTaqdix2K8g2KjZh+KAjNi52YbZiNin2YYgQWNjb3VudE1hbmFnZXJTZXJ2aWNlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iMTk0ODQ1NTU1MjMzMzYxNTk1NCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqNinIEFjY291bnRBdXRoZW50aWNhdG9ycyDYqtmF2KfYsyDYqNix2YLYsdin2LEg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YXZhti32YLZh9mUINiy2YXYp9mG24wg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0OTk5NDM0ODg0MzY2MzMzOTgiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhdmG2LfZgtmH2ZQg2LLZhdin2YbbjCDYqtmE2YHZhiDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+IuKAj9i52YXZhNqp2LHYryDYqNmH4oCM2LnZhtmI2KfZhiBBY2NvdW50TWFuYWdlclNlcnZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSIxOTQ4NDU1NTUyMzMzNjE1OTU0Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2KcgQWNjb3VudEF1dGhlbnRpY2F0b3JzINiq2YXYp9izINio2LHZgtix2KfYsSDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBY2NvdW50cyIgbXNnaWQ9IjEwODY3OTU0Njc3NjAxMjIxMTQiPiLbjNin2YHYqtmGINit2LPYp9io4oCM2YfYpyDYr9ixINiv2LPYqtqv2KfZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzQxNDk2NTM0NzY5NjYwMDI3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Ycg2YTbjNiz2Kog2K3Ys9in2KjigIzZh9in24wg2LTZhtin2K7YqtmHINi02K/ZhyDYqtmI2LPYtyDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYr9iz2KrYsdiz24wg2b7bjNiv2Kcg2qnZhtivLiDYp9uM2YYg2YXZhdqp2YYg2KfYs9iqINit2LPYp+KAjNio4oCM2YfYp9uMINin24zYrNin2K8g2LTYr9mHINiq2YjYs9i3INio2LHZhtin2YXZh+KAjNmH2KfbjNuMINix2Kcg2qnZhyDZhti12Kgg2qnYsdiv2YfigIzYp9uM2K/YjCDYtNin2YXZhCDYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDQ4MzE2ODIyNDUxODA3MzgyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Ycg2YTbjNiz2Kog2K3Ys9in2KjigIzZh9in24wg2LTZhtin2K7YqtmHINi02K/ZhyDYqtmI2LPYtyDYqtmE2YHZhiDYr9iz2KrYsdiz24wg2b7bjNiv2Kcg2qnZhtivLiDYp9uM2YYg2YXZhdqp2YYg2KfYs9iqINit2LPYp+KAjNio4oCM2YfYp9uMINin24zYrNin2K8g2LTYr9mHINiq2YjYs9i3INio2LHZhtin2YXZh+KAjNmH2KfbjNuMINix2Kcg2qnZhyDZhti12Kgg2qnYsdiv2YfigIzYp9uM2K/YjCDYtNin2YXZhCDYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjUyNjU5MDg0ODExNzI3MzY5MzMiPiLYp9uM2KzYp9ivINit2LPYp9io4oCM2YfYpyDZiCDYqtmG2LjbjNmFINqv2LDYsdmI2KfamOKAjNmH4oCM2YfYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTQ3MjEyNDI5NjkwODk3NzI2MCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYp9iyINin2YXaqdin2YbYp9iqINiq2KPbjNuM2K8g2qnZhtmG2K/ZhyDYp9i52KrYqNin2LEg2K3Ys9in2KggQWNjb3VudE1hbmFnZXIg2KfYsiDYrNmF2YTZhyDYp9uM2KzYp9ivINit2LPYp9ioINmIINiv2LHbjNin2YHYqiDZiCDYqtmG2LjbjNmFINqv2LDYsdmI2KfamNmH4oCO2YfYpyDYp9iz2KrZgdin2K/ZhyDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1NDcyMTI0Mjk2OTA4OTc3MjYwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINin2LIg2KfZhdqp2KfZhtin2Kog2KrYo9uM24zYryDaqdmG2YbYr9mHINin2LnYqtio2KfYsSDYrdiz2KfYqCBBY2NvdW50TWFuYWdlciDYp9iyINis2YXZhNmHINin24zYrNin2K8g2K3Ys9in2Kgg2Ygg2K/YsduM2KfZgdiqINmIINiq2YbYuNuM2YUg2q/YsNix2YjYp9qY2YfigI7Zh9inINin2LPYqtmB2KfYr9mHINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjY291bnRzIiBtc2dpZD0iNDk4MzEyNjMwNDc1NzE3NzMwNSI+Itin2YHYstmI2K/ZhiDbjNinINit2LDZgSDYrdiz2KfYqOKAjNmH2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYudmF2YTaqdix2K/Zh9in24zbjCDZhdin2YbZhtivINin2YHYstmI2K/ZhiDZiCDYrdiw2YEg2K3Ys9in2KjigIzZh9inINmIINit2LDZgSDar9iw2LHZiNin2pjZh+KAjtmH2Kcg2LHYpyDYp9mG2KzYp9mFINiv2YfYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYudmF2YTaqdix2K/Zh9in24zbjCDZhdin2YbZhtivINin2YHYstmI2K/ZhiDZiCDYrdiw2YEg2K3Ys9in2KjigIzZh9inINmIINit2LDZgSDar9iw2LHZiNin2pjZh+KAjtmH2Kcg2LHYpyDYp9mG2KzYp9mFINiv2YfYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iMjM1NDgxMzk2MTYzODc3NjQyIj4i2KfYs9iq2YHYp9iv2Ycg2KfYsiDYrdiz2KfYqOKAjNmH2Kcg2K/YsSDYr9iz2Krar9in2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2VDcmVkZW50aWFscyIgbXNnaWQ9Ijc5ODQyMjcxNDc0MDMzNDY0MjIiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2YbYtNin2YbZh+KAjtmH2KfbjCDYqtin24zbjNivINin2LnYqtio2KfYsSDYsdinINiv2LHYrtmI2KfYs9iqINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2VDcmVkZW50aWFscyIgbXNnaWQ9Ijc5ODQyMjcxNDc0MDMzNDY0MjIiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2YbYtNin2YbZh+KAjtmH2KfbjCDYqtin24zbjNivINin2LnYqtio2KfYsSDYsdinINiv2LHYrtmI2KfYs9iqINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiLZhdi02KfZh9iv2YfZlCDYp9iq2LXYp9mE2KfYqiDYtNio2qnZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2KfYt9mE2KfYudin2Kog2YXYsdio2YjYtyDYqNmHINin2KrYtdin2YTYp9iqINi02KjaqdmHINmF2KfZhtmG2K8g2LTYqNqp2YfigIzZh9in24wg2YXZiNis2YjYryDZiCDZhdiq2LXZhCDYsdinINmF2LTYp9mH2K/ZhyDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiLYr9iz2KrYsdiz24wg2qnYp9mF2YQg2KjZhyDYtNio2qnZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYs9mI2qnYquKAjNmH2KfbjCDYtNio2qnZhyDYsdinINin24zYrNin2K8g2qnZhtivINmIINin2LIg2b7YsdmI2KraqdmE4oCM2YfYp9uMINi02KjaqdmHINiz2YHYp9ix2LTbjCDYp9iz2KrZgdin2K/ZhyDZhtmF2KfbjNivLiDZhdix2YjYsdqv2LEg2Ygg2LPYp9uM2LEg2KjYsdmG2KfZhdmH4oCM2YfYpyDYsdmI2LTbjCDYsdinINio2LHYp9uMINin2LHYs9in2YQg2K/Yp9iv2YfigIzZh9inINio2Ycg2KfbjNmG2KrYsdmG2Kog2KfYsdin2KbZhyDZhduM4oCM2qnZhtmG2K8g2KjZhtin2KjYsdin24zZhiDYp9uM2YYg2YXYrNmI2LIg2KjYsdin24wg2KfYsdiz2KfZhCDYr9in2K/ZhyDYqNmHINin24zZhtiq2LHZhtiqINi22LHZiNix24wg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTA1NjYwMTU5Njc1NzUxODk2Ij4i2KrYutuM24zYsS/YsdmH2q/bjNix24wg2KrZhti424zZhdin2Kog2LTYqNqp2Ycg2Ygg2KrYsdin2YHbjNqpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUzMzM3OTg4ODY0MTI3MTQxOTMiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqtmG2LjbjNmF2KfYqiDYtNio2qnZhyDYsdinINiq2LrbjNuM2LEg2K/Zh9ivINmIINiv2LEg2qnZhCDYqtix2KfZgduM2qkg2LTYqNqp2Ycg2YXYr9in2K7ZhNmHINqp2YbYryDZiCDYotmGINix2Kcg2LLbjNixINmG2LjYsSDYr9in2LTYqtmHINio2KfYtNiv2Iwg2KjYsdin24wg2YXYq9in2YQg2b7Ysdin2qnYs9uMINmIINm+2YjYsdiqINmH2LEgQVBOINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINio2LPYqtmH4oCO2YfYp9uMINi02KjaqdmHINix2Kcg2KjYr9mI2YYg2KfYt9mE2KfYuSDYtNmF2Kcg2qnZhtiq2LHZhCDaqdmG2YbYr9iMINmF2KzYr9iv2Kcg2YfYr9in24zYqiDaqdmG2YbYryDbjNinINiq2LrbjNuM2LEg2K/Zh9mG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUzMzM3OTg4ODY0MTI3MTQxOTMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqtmG2LjbjNmF2KfYqiDYtNio2qnZhyDYsdinINiq2LrbjNuM2LEg2K/Zh9ivINmIINiv2LEg2qnZhCDYqtix2KfZgduM2qkg2LTYqNqp2Ycg2YXYr9in2K7ZhNmHINqp2YbYryDZiCDYotmGINix2Kcg2LLbjNixINmG2LjYsSDYr9in2LTYqtmHINio2KfYtNiv2Iwg2KjYsdin24wg2YXYq9in2YQg2b7Ysdin2qnYs9uMINmIINm+2YjYsdiqINmH2LEgQVBOINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINio2LPYqtmH4oCO2YfYp9uMINi02KjaqdmHINix2Kcg2KjYr9mI2YYg2KfYt9mE2KfYuSDYtNmF2Kcg2qnZhtiq2LHZhCDaqdmG2YbYr9iMINmF2KzYr9iv2Kcg2YfYr9in24zYqiDaqdmG2YbYryDbjNinINiq2LrbjNuM2LEg2K/Zh9mG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI5NTg4ODQyOTE0NTQzMjczMDkiPiLYqti624zbjNixINmC2KfYqNmE24zYqiDYp9iq2LXYp9mEINi02KjaqdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmI2LbYuduM2Kog2KfYqti12KfZhCDYtNio2qnZhyDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9IjY3ODkxMjM5MTI0NzY0MTYyMTQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZiNi22LnbjNiqINin2KrYtdin2YQg2LTYqNqp2Ycg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iNTk1MjU4NDk2NDM3MzAxNzk2MCI+Itiq2LrbjNuM2LEg2YLYp9io2YTbjNiqINin2KrYtdin2YQg2K/Yp9iv2Ycg2KjYpyDYs9uM2YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjE1MjQ0NDEzNDQ0MTIzMTk3ODAiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZiNi22LnbjNiqINin2KrYtdin2YQg2LTYqNqp2Ycg2KfYqti12KfZhCDYr9in2K/ZhyDYqNinINiz24zZhSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmI2LbYuduM2Kog2KfYqti12KfZhCDYtNio2qnZhyDYp9iq2LXYp9mEINiv2KfYr9mHINio2Kcg2LPbjNmFINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSIxNDAwNjY2MDEyNjcxNjQ4NzQxIj4i2KrYutuM24zYsSDYqtmG2LjbjNmF2KfYqiDZhduM2LLYp9mGINin2LPYqtmB2KfYr9mHINiv2KfYr9mHINiv2LEg2b7Ys+KAjNiy2YXbjNmG2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSI1MzQ3NzI5NTc4NDY4NzQ0Mzc5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KrZhti424zZhSDaqdin2LHYqNix2K8g2K/Yp9iv2YfigI7Zh9in24wg2b7Ys+KAjNiy2YXbjNmG2Ycg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiLZhdi02KfZh9iv2YfZlCDYp9iq2LXYp9mE2KfYqiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2KfYt9mE2KfYudin2Kog2YXYsdio2YjYtyDYqNmHINi02KjaqdmHIFdpLUZpINix2Kcg2YXYtNin2YfYr9mHINqp2YbYr9iMINio2YfigIzYudmG2YjYp9mGINmF2KvYp9mEINmB2LnYp9mEINio2YjYr9mGIFdpLUZpINmIINmG2KfZhSDYr9iz2Krar9in2YfigIzZh9in24wgV2ktRmkg2YXYqti12YQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4i2KfYqti12KfZhCDYqNmHIFdpLUZpINmIINmC2LfYuSDYp9iq2LXYp9mEINin2LIg2KLZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINmG2YLYp9i3INiv2LPYqtix2LPbjCBXaS1GaSDZiNi12YQg2LTZiNivINmIINin2LHYqtio2KfYtyDYrtmI2K8g2LHYpyDYqNinINii2YbigIzZh9inINmC2LfYuSDaqdmG2K8g2Ygg2KrYutuM24zYsdin2KrbjCDYsdinINiv2LEg2b7bjNqp2LHYqNmG2K/bjCDYr9iz2Krar9in2Ycg2KjYsdin24wg2LTYqNqp2YfigI7Zh9in24wgV2ktRmkg2KfbjNis2KfYryDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4i2K/YsduM2KfZgdiqINqG2YbYr9qv2KfZhtmHIFdpLUZpINix2Kcg2YXYrNin2LIg2YXbjOKAjNqp2YbYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzk2OTc3NDAyMTI1NjMzNjU0OCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqNmHINiv2LHbjNin2YHYqiDYqNiz2KrZh+KAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDZh9mF2Ycg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMINmF2YjYrNmI2K8g2K/YsSDYtNio2qnZhyBXaS1GaSDYqNinINin2LPYqtmB2KfYr9mHINin2LIg2KLYr9ix2LPigIzZh9in24wg2b7Yrti0INqG2YbYr9qv2KfZhtmHINmIINmG2Ycg2YHZgti3INio2Ycg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LTZhdinINio2b7Ysdiv2KfYstmG2K8uINin24zZhiDYp9iyINiq2YjYp9mGINmF2LXYsdmBINio24zYtNiq2LHbjCDZhtiz2KjYqiDYqNmHINit2KfZhNiqINm+2K7YtCDYutuM2LHahtmG2K/ar9in2YbZhyDYp9iz2KrZgdin2K/ZhyDZhduM4oCM2qnZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KjZhyDYr9ix24zYp9mB2Kog2KjYs9iq2YfigIzZh9in24wg2KfYsdiz2KfZhNuMINio2Ycg2YfZhdmHINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDZhdmI2KzZiNivINiv2LEg2LTYqNqp2YcgV2ktRmkg2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyINii2K/Ysdiz4oCM2YfYp9uMINm+2K7YtCDahtmG2K/ar9in2YbZhyDZiCDZhtmHINmB2YLYtyDYqNmHINiq2YTZgdmGINi02YXYpyDYqNm+2LHYr9in2LLZhtivLiDYp9uM2YYg2KfYsiDYqtmI2KfZhiDZhdi12LHZgSDYqNuM2LTYqtix24wg2YbYs9io2Kog2KjZhyDYrdin2YTYqiDZvtiu2LQg2LrbjNix2obZhtiv2q/Yp9mG2Ycg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjNqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSI1MzQ3NzI5NTc4NDY4NzQ0Mzc5Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KrZhti424zZhSDaqdin2LHYqNix2K8g2K/Yp9iv2YfigI7Zh9in24wg2b7Ys+KAjNiy2YXbjNmG2Ycg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiLigI/Zhdi02KfZh9iv2YfZlCDYp9iq2LXYp9mE2KfYqiBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2KfYt9mE2KfYudin2Kog2YXYsdio2YjYtyDYqNmHINi02KjaqdmHIFdpLUZpINix2Kcg2YXYtNin2YfYr9mHINqp2YbYr9iMINio2YfigIzYudmG2YjYp9mGINmF2KvYp9mEINmB2LnYp9mEINio2YjYr9mGIFdpLUZpINmIINmG2KfZhSDYr9iz2Krar9in2YfigIzZh9in24wgV2ktRmkg2YXYqti12YQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4i4oCP2KfYqti12KfZhCDYqNmHIFdpLUZpINmIINmC2LfYuSDYp9iq2LXYp9mEINin2LIg2KLZhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINmG2YLYp9i3INiv2LPYqtix2LPbjCBXaS1GaSDZiNi12YQg2LTZiNivINmIINin2LHYqtio2KfYtyDYrtmI2K8g2LHYpyDYqNinINii2YbigIzZh9inINmC2LfYuSDaqdmG2K8g2Ygg2KrYutuM24zYsdin2KrbjCDYsdinINiv2LEg2b7bjNqp2LHYqNmG2K/bjCDYr9iz2Krar9in2Ycg2KjYsdin24wg2LTYqNqp2YfigI7Zh9in24wgV2ktRmkg2KfbjNis2KfYryDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4i4oCP2K/YsduM2KfZgdiqINqG2YbYr9qv2KfZhtmHIFdpLUZpINix2Kcg2YXYrNin2LIg2YXbjOKAjNqp2YbYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzk2OTc3NDAyMTI1NjMzNjU0OCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqNmHINiv2LHbjNin2YHYqiDYqNiz2KrZh+KAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDZh9mF2Ycg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMINmF2YjYrNmI2K8g2K/YsSDYtNio2qnZhyBXaS1GaSDYqNinINin2LPYqtmB2KfYr9mHINin2LIg2KLYr9ix2LPigIzZh9in24wg2b7Yrti0INqG2YbYr9qv2KfZhtmHINmIINmG2Ycg2YHZgti3INio2Ycg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LTZhdinINio2b7Ysdiv2KfYstmG2K8uINin24zZhiDYp9iyINiq2YjYp9mGINmF2LXYsdmBINio24zYtNiq2LHbjCDZhtiz2KjYqiDYqNmHINit2KfZhNiqINm+2K7YtCDYutuM2LHahtmG2K/ar9in2YbZhyDYp9iz2KrZgdin2K/ZhyDZhduM4oCM2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KjZhyDYr9ix24zYp9mB2Kog2KjYs9iq2YfigIzZh9in24wg2KfYsdiz2KfZhNuMINio2Ycg2YfZhdmHINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDZhdmI2KzZiNivINiv2LEg2LTYqNqp2YcgV2ktRmkg2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyINii2K/Ysdiz4oCM2YfYp9uMINm+2K7YtCDahtmG2K/ar9in2YbZhyDZiCDZhtmHINmB2YLYtyDYqNmHINiq2YTZgdmGINi02YXYpyDYqNm+2LHYr9in2LLZhtivLiDYp9uM2YYg2KfYsiDYqtmI2KfZhiDZhdi12LHZgSDYqNuM2LTYqtix24wg2YbYs9io2Kog2KjZhyDYrdin2YTYqiDZvtiu2LQg2LrbjNix2obZhtiv2q/Yp9mG2Ycg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjNqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aEFkbWluIiBtc2dpZD0iNjAwNjk2NzM3MzkzNTkyNjY1OSI+Itiv2LPYqtix2LPbjCDYqNmHINiq2YbYuNuM2YXYp9iqINio2YTZiNiq2YjYqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2KjZhNmI2KrZiNirINmF2K3ZhNuMINix2Kcg2b7bjNqp2LHYqNmG2K/bjCDaqdix2K/Zh9iMINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDYsdin2Ycg2K/ZiNixINix2Kcg2LTZhtin2LPYp9uM24wg2qnYsdiv2Ycg2Ygg2KjYpyDYotmG4oCM2YfYpyDYrNmB2Kog2LTZiNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiq2YTZgdmGINio2YTZiNiq2YjYqyDZhdit2YTbjCDYsdinINm+24zaqdix2KjZhtiv24wg2qnZhtivINmIINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDYsdin2Ycg2K/ZiNixINix2Kcg2b7bjNiv2Kcg2qnZhtivINmIINio2Kcg2KLZhuKAjNmH2Kcg2KzZgdiqINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjkyMTE3NzQ3MTc0ODg4MjEzNyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINix2KfbjNin2YbZh9mUINmE2YjYrduMINio2YTZiNiq2YjYqyDZhdit2YTbjCDYsdinINm+24zaqdix2KjZhtiv24wg2qnYsdiv2YfYjCDYr9iz2Krar9in2YfigIzZh9in24wg2LHYp9mHINiv2YjYsSDYsdinINi02YbYp9iz2KfbjNuMINqp2LHYr9mHINmIINio2Kcg2KLZhuKAjNmH2Kcg2KzZgdiqINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MzE2ODIxNTkzMzE1NDIxMzciPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqtmE2YHZhiDYqNmE2YjYqtmI2Ksg2YXYrdmE24wg2LHYpyDZvtuM2qnYsdio2YbYr9uMINqp2YbYryDZiCDYr9iz2Krar9in2YfigIzZh9in24wg2LHYp9mHINiv2YjYsSDYsdinINm+24zYr9inINqp2YbYryDZiCDYqNinINii2YbigIzZh9inINis2YHYqiDYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhQcml2IiBtc2dpZD0iNDAwOTQ5NDI0NjAwOTUxMzgyOCI+Itin2KzYp9iy2Ycg2KfYsdiq2KjYp9i3INio2Kcg2KjZhNmI2KrZiNirINin2LIg2LfYsduM2YIg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoUHJpdiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODA0NTczNTE5MzQxNzQ2ODg1NyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYqNiv2YjZhiDYqti52KfZhdmEINqp2KfYsdio2LEg2KjYpyDYr9iz2Krar9in2YfigIzZh9in24wg2LHYp9mHINiv2YjYsSDZhdix2KrYqNi3INi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhQcml2IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0NTczNTE5MzQxNzQ2ODg1NyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYqNiv2YjZhiDYqti52KfZhdmEINqp2KfYsdio2LEg2KjYpyDYr9iz2Krar9in2YfigIzZh9in24wg2LHYp9mHINiv2YjYsSDZhdix2KrYqNi3INi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI0MTk1OTA3MDEwNjEwMjA1NzAzIj4i2KfYqti12KfZhCDZiCDZgti32Lkg2KfYqti12KfZhCDYp9iyIFdpTUFYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+IuKAj9in2KrYtdin2YQg2Ygg2YLYt9i5INin2KrYtdin2YQg2KfYsiBXaU1BWCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI2MzYwMTAyODc3MjYxOTc4ODg3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINmB2LnYp9mEINio2YjYr9mGINmI2KfbjNmF2qnYsyDZiCDYp9i32YTYp9i52KfYqiDZhdix2KjZiNi3INio2Ycg2YfYsSDbjNqpINin2LIg2LTYqNqp2YfigIzZh9in24wg2YjYp9uM2YXaqdizINmF2KrYtdmEINix2Kcg2YXYtNiu2LUg2qnZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2ltYXhTdGF0ZSIgbXNnaWQ9IjI0MDUwNDIyNjcxMzE0OTY1NzkiPiLYqti624zbjNixINmI2LbYuduM2KogV2lNQVgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpbWF4U3RhdGUiIG1zZ2lkPSIyNDA1MDQyMjY3MTMxNDk2NTc5Ij4i4oCP2KrYutuM24zYsSDZiNi22LnbjNiqIFdpTUFYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzE1NjQ1NjUwNDA4NDIwMTgwNSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINio2Ycg2LTYqNqp2YfigIzZh9in24wg2YjYp9uM2YXaqdizINmF2KrYtdmEINqp2LHYr9mHINuM2Kcg2KfYqti12KfZhCDYotmGINix2Kcg2KfYsiDYp9uM2YYg2LTYqNqp2YfigIzZh9inINmC2LfYuSDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NzAyNTA0MzAwNDkyMzc5OCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjtiv2YfYryDYqtinINiq2YTZgdmGINix2Kcg2KjZhyDYtNio2qnZh+KAjNmH2KfbjCDZiNin24zZhdqp2LMg2YXYqti12YQg2qnYsdiv2Ycg24zYpyDYp9iq2LXYp9mEINii2YbYsdinINin2LIg2KfbjNmGINi02KjaqdmH4oCM2YfYpyDZgti32Lkg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigI7Yr9mH2K8g2KrYpyDYqtmE2YHZhiDYsdinINio2Ycg2LTYqNqp2YfigIzZh9in24wg2YjYp9uM2YXaqdizINmF2KrYtdmEINqp2LHYr9mHINuM2Kcg2KfYqti12KfZhCDYotmG2LHYpyDYp9iyINin24zZhiDYtNio2qnZh+KAjNmH2Kcg2YLYt9i5INqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aCIgbXNnaWQ9IjYxMjc3NjkzMzYzMzkyNzY4MjgiPiLYrNmB2Kog2qnYsdiv2YYg2KjYpyDYr9iz2Krar9in2YfigIzZh9in24wg2KjZhNmI2KrZiNirIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7bjNqp2LHYqNmG2K/bjCDYqNmE2YjYqtmI2Ksg2K/YsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINmF2LTYp9mH2K/ZhyDaqdmG2K8g2Ygg2KfYqti12KfZhCDYqNinINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDZhdix2KrYqNi3INix2Kcg2KjYsdmC2LHYp9ixINqp2LHYr9mHINmIINio2b7YsNuM2LHYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7bjNqp2LHYqNmG2K/bjCDYqNmE2YjYqtmI2Ksg2K/YsSDYqtmE2YHZhiDYsdinINmF2LTYp9mH2K/ZhyDaqdmG2K/YjCDZiCDYp9iq2LXYp9mE2KfYqiDYr9iz2Krar9in2YfigIzZh9in24wg2YXYsdiq2KjYtyDYsdinINio2LHZgtix2KfYsSDaqdix2K/ZhyDZiCDYqNm+2LDbjNix2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7bjNqp2LHYqNmG2K/bjCDYqNmE2YjYqtmI2Ksg2K/YsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINmF2LTYp9mH2K/ZhyDaqdmG2K8g2Ygg2KfYqti12KfZhCDYqNinINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDZhdix2KrYqNi3INix2Kcg2KjYsdmC2LHYp9ixINqp2LHYr9mHINmIINio2b7YsNuM2LHYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7bjNqp2LHYqNmG2K/bjCDYqNmE2YjYqtmI2Ksg2K/YsSDYqtmE2YHZhiDYsdinINmF2LTYp9mH2K/ZhyDaqdmG2K/YjCDZiCDYp9iq2LXYp9mE2KfYqiDYr9iz2Krar9in2YfigIzZh9in24wg2YXYsdiq2KjYtyDYsdinINio2LHZgtix2KfYsSDaqdix2K/ZhyDZiCDYqNm+2LDbjNix2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9uZmMiIG1zZ2lkPSI0NDIzMzUxMjc0NzU3ODc2OTUzIj4i2qnZhtiq2LHZhCDYp9ix2KrYqNin2Lcg2LHYp9mHINmG2LLYr9uM2qkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19uZmMiIG1zZ2lkPSI3MTIwNjExODE5NDAxNzg5OTA3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjYpyDYqtqv2YfYp9uMINin2LHYqtio2KfYtyDZhduM2K/Yp9mGINmG2LLYr9uM2qkgKE5GQynYjCDaqdin2LHYqtmH2Kcg2Ygg2YHYp9uM2YQg2K7ZiNin2YYg2KfYsdiq2KjYp9i3INio2LHZgtix2KfYsSDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2Kcg2Krar9mH2KfbjCDYp9ix2KrYqNin2Lcg2YXbjNiv2KfZhiDZhtiy2K/bjNqpIChORkMp2Iwg2qnYp9ix2KrZh9inINmIINmB2KfbjNmEINiu2YjYp9mGINin2LHYqtio2KfYtyDYqNix2YLYsdin2LEg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+Iti624zYsdmB2LnYp9mEINqp2LHYr9mGINmC2YHZhCDYtdmB2K3ZhyDYtNmF2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSI2MDM0MjAzMDY1MDc3MTIyOTkyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINmC2YHZhCDaqdmE24zYryDZiCDZh9ixINqv2YjZhtmHINin2YXZhtuM2Kog2q/YsNix2YjYp9qY2Ycg2YXYsdiq2KjYtyDYsdinINi624zYsdmB2LnYp9mEINqp2YbYry4g2KjZh+KAjNi52YbZiNin2YYg2YXYq9in2YQg2KrZhNmB2YYg2YfZhtqv2KfZhSDYr9ix24zYp9mB2Kog24zaqSDYqtmF2KfYsyDYqtmE2YHZhtuMINmI2LHZiNiv24wg2YLZgdmEINqp2YTbjNivINix2Kcg2LrbjNix2YHYudin2YQg2YXbjOKAjNqp2YbYryDZiCDYqNi52K8g2KfYsiDZvtin24zYp9mGINiq2YXYp9iz2Iwg2YLZgdmEINqp2YTbjNivINix2Kcg2K/ZiNio2KfYsdmHINmB2LnYp9mEINmF24zigIzaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iNjIwMTgxMDAwODIzMDUwMzA1MiI+Itiu2YjYp9mG2K/ZhiDYqtmG2LjbjNmF2KfYqiDZh9mF2q/Yp9mF4oCM2LPYp9iy24wiPC9zdHJpbmc+CkBAIC02MzEsMzkgKzY0MiwzOSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1N0YXRzIiBtc2dpZD0iNzM5NjU3NzQ1MTM2MDIwMjQ0OCI+Itiu2YjYp9mG2K/ZhiDYp9i32YTYp9i52KfYqiDYotmF2KfYsduMINmH2YXar9in2YXigIzYs9in2LLbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSIxNTEwMTQzNzYxNzU3NjA2MTU2Ij4i2KjZhyDbjNqpINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2YjYtti524zYqiDZh9mF2q/Yp9mF4oCM2LPYp9iy24wg24zaqSDYrdiz2KfYqCDYsdinINio2K7ZiNin2YbYr9iMINin2LIg2KzZhdmE2Ycg2LPYp9io2YLZhyDYsdmI24zYr9in2K/Zh9in24wg2YfZhdqv2KfZheKAjNiz2KfYstuMINmIINmF24zYstin2YYg2K/Yp9iv2YfigIzZh9in24wg2YfZhdqv2KfZheKAjNiz2KfYstuMINi02K/Zhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI0NzU2NjA5NjM3MDUzMzUzMzE4Ij4i2K7ZiNin2YbYr9mGINmB24zYr9mH2KfbjCDZhdi02KrYsdqpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjU1NTcwNTg5MDc5MDYxNDQ1MDUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrNiy2KbbjNin2Kog2YXYsdio2YjYtyDYqNmHINmB24zYr9mH2KfbjCDZh9mF2q/Yp9mFINi02K/ZhyDaqdmG2YjZhtuMINix2Kcg2K/YsduM2KfZgdiqINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNTU1NzA1ODkwNzkwNjE0NDUwNSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINis2LLYptuM2KfYqiDZhdix2KjZiNi3INio2Ycg2YHbjNiv2YfYp9uMINmH2YXar9in2YUg2LTYr9mHINqp2YbZiNmG24wg2LHYpyDYr9ix24zYp9mB2Kog2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI5MDE1MjQ2MzI1NDA4MjA5Mjk2Ij4i2YbZiNi02KrZhiDZgduM2K/Zh9in24wg2YXYtNiq2LHaqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iNjkyODkzMDE4ODgyNjA4OTQxMyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmB24zYr9mH2KfbjCDZh9mF2q/Yp9mFINi02K/ZhyDaqdmG2YjZhtuMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINmB24zYr9mH2KfbjCDZh9mF2q/Yp9mFINi02K/ZhyDYsdinINiq2LrbjNuM2LEg2K/Zh9mG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI2OTI4OTMwMTg4ODI2MDg5NDEzIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YHbjNiv2YfYp9uMINmH2YXar9in2YUg2LTYr9mHINqp2YbZiNmG24wg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2YHbjNiv2YfYp9uMINmH2YXar9in2YUg2LTYr9mHINix2Kcg2KrYutuM24zYsSDYr9mH2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNDEwNzEwMTUyNTc0NjAzNTcxOCI+Itiu2YjYp9mG2K/ZhiDZiNin2pjZh+KAjNmH2KfbjNuMINqp2Ycg2KjZhyDZgdix2YfZhtqv4oCMINmE2LrYqiDYp9i22KfZgdmHINqp2LHYr9uM2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDZh9mF2Ycg2qnZhNmF2YfYjCDZhtin2YUg2Ygg2LnYqNin2LHYp9iq24wg2LHYpyDaqdmHINqp2KfYsdio2LEg2K/YsSDZgdix2YfZhtqvINmE2LrYqiDYrtmI2K8g2LDYrtuM2LHZhyDaqdix2K/ZhyDYp9iz2Kog2KjYrtmI2KfZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNjU5NjE0NjAwMzM4OTA0MjQzIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINmH2YXZhyDaqdmE2YXZh9iMINmG2KfZhSDZiCDYudio2KfYsdin2KrbjCDYsdinINqp2Ycg2qnYp9ix2KjYsSDYr9ixINmB2LHZh9mG2q8g2YTYutiqINiu2YjYryDYsNiu24zYsdmHINqp2LHYr9mHINin2LPYqiDYqNiu2YjYp9mG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4i2KfZgdiy2YjYr9mGINqp2YTZhdin2Kog2KjZhyDZgdix2YfZhtqvINmE2LrYqiDYqti52LHbjNmB4oCMINi02K/ZhyDYqtmI2LPYtyDaqdin2LHYqNixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODE4NTM4NTcxNjI1NTA2NTI5MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2YTZhdin2Kog2KzYr9uM2K8g2LHYpyDYr9ixINmB2YfYsdiz2Kog2qnYp9ix2KjYsSDYqNmG2YjbjNiz2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM2NzI3NTA5NTE1OTQwNTQ2OCI+Itiu2YjYp9mG2K/ZhiDZhdit2KrZiNuM2KfYqiDYrdin2YHYuNmH2ZQgVVNCINi02YXYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODgxNTY0NjI5MzQ5Nzc5NDAiPiLYrtmI2KfZhtiv2YYg2YXYrdiq2YjbjNin2Kog2qnYp9ix2KogU0Qg2LTZhdinIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ2OTg4NzEyNTk4Mzg2MDc5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINmF2K3YqtmI2KfZh9in24wg2YHYttin24wg2LDYrtuM2LHZhyBVU0Ig2LHYpyDYqNiu2YjYp9mG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MDczNjI0NzM2NTQ5NzU0MTEiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2YXYrdiq2YjYp9mH2KfbjCDaqdin2LHYqiBTRCDYtNmF2Kcg2LHYpyDYqNiu2YjYp9mG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4NDg1OTc5MDYyMjU0NjY2NzQ4Ij4i2KfYtdmE2KfYrSDbjNinINit2LDZgSDZhdit2KrZiNuM2KfYqiDYrdin2YHYuNmH2ZQgVVNCINi02YXYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4ODA1NjkzNjMwMDUwNDU4NzYzIj4i2YXYrdiq2YjYp9uMINqp2KfYsdiqIFNEINi02YXYpyDYsdinINin2LXZhNin2K0g2qnYsdiv2Ycg24zYpyDYqti624zbjNixINiv2YfYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYr9ixINit2KfZgdi42YfZlCBVU0Ig2KjZhtmI24zYs9ivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiv2LEg2qnYp9ix2KogU0Qg2KjZhtmI24zYs9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDaqdmE2YXYp9iqINis2K/bjNivINix2Kcg2K/YsSDZgdmH2LHYs9iqINqp2KfYsdio2LEg2KjZhtmI24zYs9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjcyNzUwOTUxNTk0MDU0NjgiPiLigI/YrtmI2KfZhtiv2YYg2YXYrdiq2YjbjNin2Kog2K3Yp9mB2LjZh9mUIFVTQiDYtNmF2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg4MTU2NDYyOTM0OTc3OTQwIj4i4oCP2K7ZiNin2YbYr9mGINmF2K3YqtmI24zYp9iqINqp2KfYsdiqIFNEINi02YXYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0Njk4ODcxMjU5ODM4NjA3OSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZhdit2KrZiNin2YfYp9uMINmB2LbYp9uMINiw2K7bjNix2YcgVVNCINix2Kcg2KjYrtmI2KfZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjA3MzYyNDczNjU0OTc1NDExIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINmF2K3YqtmI2KfZh9in24wg2qnYp9ix2KogU0Qg2LTZhdinINix2Kcg2KjYrtmI2KfZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+IuKAj9in2LXZhNin2K0g24zYpyDYrdiw2YEg2YXYrdiq2YjbjNin2Kog2K3Yp9mB2LjZh9mUIFVTQiDYtNmF2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODgwNTY5MzYzMDA1MDQ1ODc2MyI+IuKAj9mF2K3YqtmI2KfbjCDaqdin2LHYqiBTRCDYtNmF2Kcg2LHYpyDYp9i12YTYp9itINqp2LHYr9mHINuM2Kcg2KrYutuM24zYsSDYr9mH2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTc1NDA2Mjk5NDQ1NzEwODg4Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K/YsSDYrdin2YHYuNmH2ZQgVVNCINio2YbZiNuM2LPYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYr9ixINqp2KfYsdiqIFNEINio2YbZiNuM2LPYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+Itiq2LrbjNuM2LEv2K3YsNmBINmF2K3YqtmI2KfZh9in24wg2K3Yp9mB2LjZhyDYsdiz2KfZhtmHINiv2KfYrtmE24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxODkxNjA1OTc2OTg1MjkxODUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhdit2KrZiNuM2KfYqiDYrdin2YHYuNmHINix2LPYp9mG2Ycg2K/Yp9iu2YTbjCDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODE4OTE2MDU5NzY5ODUyOTE4NSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmF2K3YqtmI24zYp9iqINit2KfZgdi42Ycg2LHYs9in2YbZhyDYr9in2K7ZhNuMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+ItmF2K/bjNix24zYqiDZgdi22KfbjCDYsNiu24zYsdmH4oCM2LPYp9iy24wg2KfYs9mG2KfYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NzA0MzIzMTc2OTE0MTIxNDg0Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINmB2LbYp9uMINiw2K7bjNix2YfigIzYs9in2LLbjCDYp9iz2YbYp9ivINix2Kcg2YXYr9uM2LHbjNiqINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjgxNTA2MTM4MjM5MDA0NjA1NzYiPiLYr9iz2KrYsdiz24wg2KjZhyDYr9iz2Krar9in2Ycg2LDYrtuM2LHZhyDYrtin2LHYrNuMINiq2YXYp9mFINqp2KfYsdio2LHYp9mGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iMzIxNTIwODM1NzQxNTg5MTMyMCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqNmHINiv2LPYqtqv2KfZhyDYsNiu24zYsdmHINiu2KfYsdis24wg2KjYsdin24wg2YfZhdmHINqp2KfYsdio2LHYp9mGINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU2NTY0ODcyNjQ4MTk2Njk4MjQiPiLYr9iz2KrYsdiz24wg2KjZhyDYs9uM2LPYqtmFINmB2KfbjNmEINit2KfZgdi42YfZlCDZvtmG2YfYp9mGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYs9uM2LPYqtmFINmB2KfbjNmEINit2KfZgdi42YfZlCDZvtmG2YfYp9mGINix2Kcg2KjYrtmI2KfZhtivINmIINio2YbZiNuM2LPYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTU3ODk2NzY0MjI2NTU1MDk1NSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiz24zYs9iq2YUg2YHYp9uM2YQg2K3Yp9mB2LjZh9mUINm+2YbZh9in2YYg2LHYpyDYqNiu2YjYp9mG2K8g2Ygg2KjZhtmI24zYs9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiLYudmE2KfZhdiq4oCM2q/YsNin2LHbjC/Yr9ix24zYp9mB2Kog2KrZhdin2LPigIzZh9in24wg2KfbjNmG2KrYsdmG2KrbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZV9zaXAiIG1zZ2lkPSI0NzE3NjMyMDAwMDYyNjc0Mjk0Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYsiDYrtiv2YXYp9iqIFNJUCDYp9iz2KrZgdin2K/ZhyDaqdmG2K8g2Ygg2KrZhdin2LPigIzZh9in24wg2KfbjNmG2KrYsdmG2KrbjCDYqNqv24zYsdivL9iv2LHbjNin2YHYqiDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlX3NpcCIgbXNnaWQ9IjQ3MTc2MzIwMDAwNjI2NzQyOTQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9iyINiu2K/Zhdin2KogU0lQINin2LPYqtmB2KfYr9mHINqp2YbYryDZiCDYqtmF2KfYs+KAjNmH2KfbjCDYp9uM2YbYqtix2YbYqtuMINio2q/bjNix2K8v2K/YsduM2KfZgdiqINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRfY2FsbF9zZXJ2aWNlIiBtc2dpZD0iNjcyNDAwOTcyNjY3MTI0NjU1MSI+Itiq2LnYp9mF2YQg2KjYpyDYtdmB2K3Zh+KAjNmG2YXYp9uM2LQg2YfZhtqv2KfZhSDYqtmF2KfYsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRfY2FsbF9zZXJ2aWNlIiBtc2dpZD0iODczMjU0NzY2MjQ0MjU3MjQzNSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDaqdmG2KrYsdmEINqp2YbYryDaqdmHINqp2KfYsdio2LEg2obZhyDYstmF2KfZhtuMINmIINqG2q/ZiNmG2Ycg2LXZgdit2YfigIzZhtmF2KfbjNi0INmH2Ybar9in2YUg2KrZhdin2LMg2LHYpyDZhdi02KfZh9iv2Ycg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4i2K7ZiNin2YbYr9mGINiz2KfYqNmC2Ycg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYtNio2qnZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWROZXR3b3JrVXNhZ2VIaXN0b3J5IiBtc2dpZD0iNzY4OTA2MDc0OTgxOTEyNjQ3MiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2KfYsdio2LHYryDYtNio2qnZhyDYsdinINiv2LEg2LfZiNmEINiy2YXYp9mGINio2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2Kcg2Ygg2LTYqNqp2YfigI7Zh9in24wg2K7Yp9i1INio2K7ZiNin2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDaqdin2LHYqNix2K8g2LTYqNqp2Ycg2LHYpyDYr9ixINi32YjZhCDYstmF2KfZhiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9inINmIINi02KjaqdmH4oCO2YfYp9uMINiu2KfYtSDYqNiu2YjYp9mG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iMjU2MjA1MzU5MjMzOTg1OTk5MCI+ItmF2K/bjNix24zYqiDYrti3INmF2LTbjCDYtNio2qnZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSI3NTM3NTg2NzcxNTU5MzcwNjY4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K7YtyDZhdi024zigI7Zh9in24wg2LTYqNqp2Ycg2LHYpyDZhdiv24zYsduM2Kog2qnZhtivINmIINmC2YjYp9mG24zZhiDYrtin2LUg2KjYsdmG2KfZhdmHINix2Kcg2KrYuduM24zZhiDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrti3INmF2LTbjOKAjtmH2KfbjCDYtNio2qnZhyDYsdinINmF2K/bjNix24zYqiDaqdmG2K8g2Ygg2YLZiNin2YbbjNmGINiu2KfYtSDYqNix2YbYp9mF2Ycg2LHYpyDYqti524zbjNmGINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTA4ODIxNzMwOTA4ODcyOTY1MCI+Itin2LXZhNin2K0g2YXYrdin2LPYqNmHINin2LPYqtmB2KfYr9mHINin2LIg2LTYqNqp2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtit2YjZhyDZhdit2KfYs9io2Ycg2qnYp9ix2KjYsdivINi02KjaqdmHINiv2LEg2KjYsdmG2KfZhdmHINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtit2YjZhyDZhdit2KfYs9io2Ycg2qnYp9ix2KjYsdivINi02KjaqdmHINiv2LEg2KjYsdmG2KfZhdmHINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iMzY1ODUyNzIxNDkxNDk1OTc0OSI+Itiq2LrbjNuM2LEg2LnZhNin2KbZhSDYs9mI2qnYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iNzY1NTU2ODQzMzY5NjM1NjU3OCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqNix2KfbjCDZhdiz24zYsduM2KfYqNuMINi52YTYp9im2YUg2LPZiNqp2Kog2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI3NjczNDE2NDg3ODczNDMyMjY4Ij4i2KfYudmE2KfZhuKAjNmH2KfbjCDYr9iz2KrYsdiz24wiPC9zdHJpbmc+CkBAIC02NzUsMTAgKzY4NiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjgyMDYwNzc0NDc4Mzg5MDk1MTYiPiLar9mI2LQg2K/Yp9iv2YYg2KjYsdin24wg2KjYsdix2LPbjCDYtNix2KfbjNi3INi02KjaqdmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI2ODk5MTAyMDc1ODI1MjcyMjExIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINio2LHYp9uMINio2LHYsdiz24wg2LTYsdin24zYtyDYtNio2qnZhyDar9mI2LQg2K/Zh9ivLiDYp9uM2YYg2KfZhdqp2KfZhiDZh9ix2q/YsiDZhtio2KfbjNivINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi52YXZiNmE24wg2YXZiNix2K8g2YbbjNin2LIg2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSI0NDk3NDIwNzI4ODU3NTg1NzkxIj4i2KrZhti424zZhSDZgtmI2KfZhtuM2YYg2LHZhdiyINmI2LHZiNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19saW1pdFBhc3N3b3JkIiBtc2dpZD0iMzI1MjExNDIwMzkxOTUxMDM5NCI+Iti32YjZhCDZiCDZhtmI24zYs9mH4oCO2YfYp9uMINmF2KzYp9iyINiv2LEg2q/YsNix2YjYp9qY2YfigIzZh9in24wg2KjYp9iy2qnYsdiv2YYg2YLZgdmEINi12YHYrdmHINix2Kcg2qnZhtiq2LHZhCDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSIzMjUyMTE0MjAzOTE5NTEwMzk0Ij4i4oCP2LfZiNmEINmIINmG2YjbjNiz2YfigI7Zh9in24wg2YXYrNin2LIg2K/YsSDar9iw2LHZiNin2pjZh+KAjNmH2KfbjCDYqNin2LLaqdix2K/ZhiDZgtmB2YQg2LXZgdit2Ycg2LHYpyDaqdmG2KrYsdmEINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93YXRjaExvZ2luIiBtc2dpZD0iOTE0MTMwNjQ2OTQyMTk5NTAzIj4i2YbZhdin24zYtCDYqtmE2KfYtOKAjNmH2KfbjCDZgtmB2YQg2q/YtNin24zbjCDYtdmB2K3ZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+Itiq2LnYr9in2K8g2q/YsNix2YjYp9qY2YfigI7Zh9in24wg2KfYtNiq2KjYp9mHINiq2KfbjNm+INi02K/ZhyDYsdinINmH2Ybar9in2YUg2KjYp9iy2qnYsdiv2YYg2YLZgdmEINi12YHYrdmHINqp2YbYqtix2YQg2YXbjOKAjNqp2YbYr9iMINmIINuM2Kcg2Kfar9ixINiv2YHYudin2Kog2LLbjNin2K/bjCDar9iw2LHZiNin2pjZhyDYp9i02KrYqNin2Ycg2KrYp9uM2b4g2LTZiNivINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2YLZgdmEINmF24zigI7aqdmG2K8g2Ygg2YfZhdmHINiv2KfYr9mH4oCO2YfYp9uMINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2b7Yp9qpINmF24zigI7aqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcxMjMyMzA5MTg0Njc2MTA3MyI+Itiq2LnYr9in2K8g2q/YsNix2YjYp9qY2YfigI7Zh9in24wg2YbYp9iv2LHYs9iqINiq2KfbjNm+INi02K/ZhyDYsdinINqp2YbYqtix2YQg2YXbjOKAjtqp2YbYry4g2YfZhtqv2KfZhSDYqNin2LLaqdix2K/ZhiDZgtmB2YQg2LXZgdit2Ycg2Kfar9ixINiv2YHYudin2Kog2LLbjNin2K/bjCDar9iw2LHZiNin2pjZhyDZhtin2K/Ysdiz2Kog2KrYp9uM2b4g2qnYsdiv2YfigI7Yp9uM2K/YjCDYqtmE2YHZhiDYsdinINmC2YHZhCDaqdmG24zYryDbjNinINmH2YXZhyDYr9in2K/Zh+KAjtmH2KfbjCDYqtmE2YHZhiDYsdinINm+2KfaqSDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyMTU3MjkyOTQyMTUwNzAwNzIiPiLigI/Yqti52K/Yp9ivINqv2LDYsdmI2KfamNmH4oCO2YfYp9uMINin2LTYqtio2KfZhyDYqtin24zZviDYtNiv2Ycg2LHYpyDZh9mG2q/Yp9mFINio2KfYstqp2LHYr9mGINmC2YHZhCDYtdmB2K3ZhyDaqdmG2KrYsdmEINmF24zigIzaqdmG2K/YjCDZiCDbjNinINin2q/YsSDYr9mB2LnYp9iqINiy24zYp9iv24wg2q/YsNix2YjYp9qY2Ycg2KfYtNiq2KjYp9mHINiq2KfbjNm+INi02YjYryDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINmC2YHZhCDZhduM4oCO2qnZhtivINmIINmH2YXZhyDYr9in2K/Zh+KAjtmH2KfbjCDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINm+2KfaqSDZhduM4oCO2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiLigI/Yqti52K/Yp9ivINqv2LDYsdmI2KfamNmH4oCO2YfYp9uMINmG2KfYr9ix2LPYqiDYqtin24zZviDYtNiv2Ycg2LHYpyDaqdmG2KrYsdmEINmF24zigI7aqdmG2K8uINmH2Ybar9in2YUg2KjYp9iy2qnYsdiv2YYg2YLZgdmEINi12YHYrdmHINin2q/YsSDYr9mB2LnYp9iqINiy24zYp9iv24wg2q/YsNix2YjYp9qY2Ycg2YbYp9iv2LHYs9iqINiq2KfbjNm+INqp2LHYr9mH4oCO2KfbjNiv2Iwg2KrZhNmB2YYg2LHYpyDZgtmB2YQg2qnZhtuM2K8g24zYpyDZh9mF2Ycg2K/Yp9iv2YfigI7Zh9in24wg2KrZhNmB2YYg2LHYpyDZvtin2qkg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSIyNjIwMDc3MTkxMjQyNjg4OTU1Ij4i2KrYutuM24zYsSDYsdmF2LIg2YjYsdmI2K8g2YLZgdmEINqv2LTYp9uM24wg2LXZgdit2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiLar9iw2LHZiNin2pjZhyDYqNin2LLar9i02KfbjNuMINmC2YHZhCDYtdmB2K3ZhyDYsdinINiq2LrbjNuM2LEg2K/Zh9uM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2ZvcmNlTG9jayIgbXNnaWQ9IjIyNzQwODUzODQ3MDQyNDg0MzEiPiLZgtmB2YQg2qnYsdiv2YYg2LXZgdit2YciPC9zdHJpbmc+CkBAIC02OTMsNyArNzA0LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iODkwMTMyNjE5OTkwOTEzMjkxNSI+Itiq2YbYuNuM2YUg2LHZhdiy2q/YsNin2LHbjCDYrdin2YHYuNmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+Itio2KfbjNivINin2LfZhNin2LnYp9iqINiw2K7bjNix2Ycg2LTYr9mHINio2LHZhtin2YXZhyDYsdmF2LLar9iw2KfYsduMINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUNhbWVyYSIgbXNnaWQ9IjYzOTUzMDEwMjMxNTIyOTc4MjYiPiLYutuM2LEg2YHYudin2YQg2qnYsdiv2YYg2K/ZiNix2KjbjNmGINmH2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4i2KfYsiDYp9iz2KrZgdin2K/ZhyDYp9iyINiq2YXYp9mFINiv2YjYsdio24zZhuKAjtmH2KfbjCDYr9iz2Krar9in2Ycg2KzZhNmI2q/bjNix24wg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+IuKAj9in2LIg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYqtmF2KfZhSDYr9mI2LHYqNuM2YbigI7Zh9in24wg2K/Ys9iq2q/Yp9mHINis2YTZiNqv24zYsduMINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjI2NjMyOTEwNDU0MjYzODgwMiI+Iti624zYsdmB2LnYp9mEINqp2LHYr9mGINmI24zamNqv24zigIzigIzZh9inINiv2LEg2YXYrdin2YHYuCDaqdmE24zYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIzNDY3MDgyMjcyMTg2NTM0NjE0Ij4i2KfYsiDYp9iz2KrZgdin2K/ZhyDYp9iyINio2LHYrtuMINmI24zamNqv24zigIzZh9inINiv2LEg2YXYrdin2YHYuCDaqdmE24zYryDYrNmE2Yjar9uM2LHbjCDYtNmI2K8uIjwvc3RyaW5nPgogICA8c3RyaW5nLWFycmF5IG5hbWU9InBob25lVHlwZXMiPgpAQCAtODA5LDkgKzgyMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+Iti12YHYrdmH2ZQg2KfYtdmE24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4i2YXYrdmEINqp2KfYsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i2LPYp9uM2LEg2YXZiNin2LHYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiLZh9uM2oYg2KjYsdmG2KfZhdmH4oCM2KfbjCDYqNix2KfbjCDZhdi02KfZh9iv2Ycg2KfbjNmGINmF2K7Yp9i32Kgg2b7bjNiv2Kcg2YbYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+Itm+24zZhiDaqdivINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsg2Ygg2b7bjNmGINqp2K8g2KzYr9uM2K8g2LHYpyDYqtin24zZviDaqdmG24zYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4i2qnYryBQVUsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLigI9QVUsg2Ygg2b7bjNmGINqp2K8g2KzYr9uM2K8g2LHYpyDYqtin24zZviDaqdmG24zYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4i4oCP2qnYryBQVUsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Itm+24zZhiDaqdivINis2K/bjNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i2KjYsdin24wg2KrYp9uM2b4g2q/YsNix2YjYp9qY2Ycg2YTZhdizINqp2YbbjNivIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i2KjYsdin24wg2KjYp9iy2qnYsdiv2YYg2YLZgdmE2Iwg2q/YsNix2YjYp9qY2Ycg2LHYpyDZiNin2LHYryDaqdmG24zYryI8L3N0cmluZz4KQEAgLTgyOSw3ICs4NDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX2NvcnJlY3QiIG1zZ2lkPSI5MDM5MDA4NjUwMzYyMjYxMjM3Ij4i2LXYrduM2K0g2KfYs9iqISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl93cm9uZyIgbXNnaWQ9IjQzMTc5NTUwMTQ5NDgxMDg3OTQiPiLYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXNzd29yZF93cm9uZyIgbXNnaWQ9IjU3Mzc4MTUzOTMyNTMxNjUzMDEiPiLYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+Itiv2YHYudin2Kog2KrZhNin2LQg2KjYsdin24wgRmFjZSBVbmxvY2sg2KfYsiDYrdiv2Kfaqdir2LEg2YXYrNin2LIg2KjbjNi02KrYsSDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IuKAj9iv2YHYudin2Kog2KrZhNin2LQg2KjYsdin24wgRmFjZSBVbmxvY2sg2KfYsiDYrdiv2Kfaqdir2LEg2YXYrNin2LIg2KjbjNi02KrYsSDYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wbHVnZ2VkX2luIiBtc2dpZD0iODA1Nzc2MjgyODM1NTU3MjMxNSI+Itiv2LEg2K3Yp9mEINi02KfYsdqY2IwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2hhcmdlZCIgbXNnaWQ9IjMyMTYzNTc0NTY4NDA2MDYyNCI+Iti02KfYsdqYINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2JhdHRlcnlfc2hvcnQiIG1zZ2lkPSI0NDc3MjY0ODQ5Mzg2ODUwMjY2Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KQEAgLTg0MCw3ICs4NTIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4i2LPbjNmFINqp2KfYsdiqINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjM1MjY1NzMwOTkwMTkzMTk0NzIiPiLYs9uM2YUg2qnYp9ix2Kog2YXZiNis2YjYryDZhtuM2LPYqiDbjNinINmC2KfYqNmEINiu2YjYp9mG2K/ZhiDZhtuM2LPYqi4g24zaqSDYs9uM2YUg2qnYp9ix2Kog2YjYp9ix2K8g2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4i2LPbjNmFINqp2KfYsdiqINi624zYsdmC2KfYqNmEINin2LPYqtmB2KfYr9mHINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iOTEwOTA0NjQzNDMzMTUxMzcxIj4i2LPbjNmFINqp2KfYsdiqINi02YXYpyDYqNmHINi32YjYsSDYr9in2KbZhSDYutuM2LEg2YHYudin2YQg2LTYr9mHINin2LPYqi4gXG7YqNix2KfbjCDYr9in2LTYqtmGINiz24zZhSDaqdin2LHYqiDYr9uM2q/YsSDYqNinINin2LHYp9im2YfigI7Yr9mH2YbYr9mHINiz2LHZiNuM2LMg2KjbjOKAjtiz24zZhSDYrtmI2K8g2KrZhdin2LMg2Kjar9uM2LHbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiLigI/Ys9uM2YUg2qnYp9ix2Kog2LTZhdinINio2Ycg2LfZiNixINiv2KfYptmFINi624zYsSDZgdi52KfZhCDYtNiv2Ycg2KfYs9iqLiBcbtio2LHYp9uMINiv2KfYtNiq2YYg2LPbjNmFINqp2KfYsdiqINiv24zar9ixINio2Kcg2KfYsdin2KbZh+KAjtiv2YfZhtiv2Ycg2LPYsdmI24zYsyDYqNuM4oCO2LPbjNmFINiu2YjYryDYqtmF2KfYsyDYqNqv24zYsduM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwMTU5NDkwNTE1Mjc0Njg4NiI+Itiv2qnZhdmHINiq2LHYp9qpINmC2KjZhNuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYwODkyOTc2NTA0ODEyOTIzNjMiPiLYr9qp2YXZhyDYqtix2KfaqSDYqNi52K/bjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1OTA4ODc4Njc4MDEyODAwMSI+Itiv2qnZhdmHINmF2qnYqyI8L3N0cmluZz4KQEAgLTg0OCwxNSArODYwLDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDU2MjMxODM3ODc2Njk4NzYwMSI+Itiv2qnZhdmHINiq2YjZgtmBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxzX29ubHkiIG1zZ2lkPSI2NzMzOTc4MzA0Mzg2MzY1NDA3Ij4i2YHZgti3INiq2YXYp9iz4oCM2YfYp9uMINin2LbYt9ix2KfYsduMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMTQzMzg5MjI0OTg2MDI4NTAxIj4i2LTYqNqp2Ycg2YLZgdmEINi02K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4i2LPbjNmFINqp2KfYsdiqINio2KcgUFVLINmC2YHZhCDYtNiv2Ycg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9Ijc0NDE3OTczMzk5NzYyMzAiPiLigI/Ys9uM2YUg2qnYp9ix2Kog2KjYpyBQVUsg2YLZgdmEINi02K/ZhyDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI4MTI3OTE2MjU1MjQ1MTgxMDYzIj4i2YTYt9mB2KfZiyDYqNmHINix2KfZh9mG2YXYp9uMINqp2KfYsdio2LEg2YXYsdin2KzYudmHINqp2LHYr9mHINuM2Kcg2KjYpyDZhdix2qnYsiDZvti02KrbjNio2KfZhtuMINin2LIg2YXYtNiq2LHbjNin2YYg2KrZhdin2LMg2Kjar9uM2LHbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+Itiz24zZhSDaqdin2LHYqiDZgtmB2YQg2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiLYqNin2LLar9i02KfbjNuMINmC2YHZhCDYs9uM2YUg2qnYp9ix2KouLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjY0ODE2MjM4MzAzNDQxMDcyMjIiPiLYp9mE2q/ZiNuMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINiu2YjYryDYsdinIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9i02KrYqNin2Ycg2qnYtNuM2K/Zh+KAjtin24zYry4gXG5cbtmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjY0ODE2MjM4MzAzNDQxMDcyMjIiPiLigI/Yp9mE2q/ZiNuMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINiu2YjYryDYsdinIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9i02KrYqNin2Ycg2qnYtNuM2K/Zh+KAjtin24zYry4gXG5cbtmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjI3MjU5NzMyODYyMzkzNDQ1NTUiPiLar9iw2LHZiNin2pjZh9mUINiu2YjYryDYsdinIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9i02KrYqNin2Ycg2KrYp9uM2b4g2qnYsdiv2YfigIzYp9uM2K8uIFxuXG7ZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjYyMTY2NzI3MDY1NDU2OTY5NTUiPiLZvtuM2YYg2LHYpzx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+ICDYqNin2LEg2KfYtNiq2KjYp9mHINiq2KfbjNm+INqp2LHYr9mH4oCO2KfbjNivLiBcblxu2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI5MTkxNjExOTg0NjI1NDYwODIwIj4i2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCO2KfbjNivLiDYqNi52K8g2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2LHYp9uMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINix2KfbjNin2YbZh9mUINmE2YjYrduMINiu2YjYryDYqNmHIEdvb2dsZSDZiNin2LHYryDYtNmI24zYry5cblxuINmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+Iti02YXYpyDYp9mE2q/ZiNuMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINiu2YjYryDYsdinIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9i02KrYqNin2Ycg2qnYtNuM2K/Zh+KAjNin24zYry4g2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INiq2YTYp9i0INmG2KfZhdmI2YHZgiDYr9uM2q/YsSDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2LHYp9uMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINqv2YjYtNuMINiu2YjYryDYqNmHINio2LHZhtin2YXZh9mUIEdvb2dsZSDZiNin2LHYryDYtNmI24zYry5cblxuINmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2MjE2NjcyNzA2NTQ1Njk2OTU1Ij4i4oCP2b7bjNmGINix2Kc8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiAg2KjYp9ixINin2LTYqtio2KfZhyDYqtin24zZviDaqdix2K/Zh+KAjtin24zYry4gXG5cbtm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IuKAj9i02YXYpyDYp9mE2q/ZiNuMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINiu2YjYryDYsdinIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9i02KrYqNin2Ycg2qnYtNuM2K/Zh+KAjtin24zYry4g2KjYudivINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmC2Iwg2KfYsiDYtNmF2Kcg2K7ZiNin2LPYqtmHINmF24zigI7YtNmI2K8g2qnZhyDYqNix2KfbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhCDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYrtmI2K8g2KjZhyBHb29nbGUg2YjYp9ix2K8g2LTZiNuM2K8uXG5cbiDZhNi32YHYp9mLINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiLigI/YtNmF2Kcg2KfZhNqv2YjbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhCDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINqp2LTbjNiv2YfigIzYp9uM2K8uINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YIg2K/bjNqv2LEg2KfYsiDYtNmF2Kcg2K7ZiNin2LPYqtmHINmF24zigI7YtNmI2K8g2qnZhyDYqNix2KfbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhCDar9mI2LTbjCDYrtmI2K8g2KjZhyDYqNix2YbYp9mF2YfZlCBHb29nbGUg2YjYp9ix2K8g2LTZiNuM2K8uXG5cbiDZhNi32YHYp9mLINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxMjgxMDYzOTk3NDU3NTU2MDQiPiLYtNmF2Kcg2KjZhyDYp9i02KrYqNin2YcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2YLYr9in2YUg2KjZhyDYqNin2LIg2qnYsdiv2YYg2YLZgdmEINix2KfbjNin2YbZh9mUINmE2YjYrduMINqp2LHYr9mH4oCM2KfbjNivLiDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmCINiv24zar9ix2Iwg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2KjZhyDZvtuM2LTigIzZgdix2LYg2qnYp9ix2K7Yp9mG2Ycg2KjYp9iy2YbYtNin2YbbjCDZhduM4oCM2LTZiNivINmIINiq2YXYp9mFINiv2KfYr9mH4oCM2YfYp9uMINqp2KfYsdio2LEg2KfYsiDYr9iz2Kog2K7ZiNin2YfYryDYsdmB2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjAzNTY1MTQyMTU2ODI2NTY1Ij4i2LTZhdinINio2Ycg2KfYtNiq2KjYp9mHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9mC2K/Yp9mFINio2Ycg2KjYp9iyINqp2LHYr9mGINmC2YHZhCDYqtmE2YHZhiDaqdix2K/Zh+KAjNin24zYry4g2b7YsyDYp9iyPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmCINiv24zar9ix2Iwg2KrZhNmB2YYg2KjZhyDZvtuM2LTigIzZgdix2LYg2qnYp9ix2K7Yp9mG2Ycg2KjYp9iy2YbYtNin2YbbjCDZhduM4oCM2LTZiNivINmIINiq2YXYp9mFINiv2KfYr9mH4oCM2YfYp9uMINqp2KfYsdio2LEg2KfYsiDYr9iz2Kog2K7ZiNin2YfYryDYsdmB2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjgwODczNTE2NDkzOTM0MzY1Ij4i2LTZhdinINio2Ycg2KfYtNiq2KjYp9mHINin2YLYr9in2YUg2KjZhyDYqNin2LIg2qnYsdiv2YYg2YLZgdmEIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDaqdix2K/Zh+KAjNin24zYry4g2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2K/YsSDYrdin2YQg2K3Yp9i22LEg2KjZhyDZvtuM2LTigIzZgdix2LYg2qnYp9ix2K7Yp9mG2Ycg2KjYp9iy2YbYtNin2YbbjCDZhduM4oCM2LTZiNivLiI8L3N0cmluZz4KQEAgLTg2NCwxMyArODc2LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MjUxNDgwMzQzMzk0Mzg5NjY1Ij4i2K/YsSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSIyNjI2OTk5NDQ5NjEwNjk1OTMwIj4i2KfZhNqv2Ygg2LHYpyDZgdix2KfZhdmI2LQg2qnYsdiv2YfigIzYp9uM2K/YnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+Itio2KfYstqv2LTYp9uM24wg2YLZgdmEINit2LPYp9ioIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSIyNzUxMzY4NjA1Mjg3Mjg4ODA4Ij4i2KrZhNin2LTigI7Zh9in24wg2LLbjNin2K/bjCDYqNix2KfbjCDaqdi024zYr9mGINin2YTar9mIINi12YjYsdiqINqv2LHZgdiq2Ycg2KfYs9iqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzkzMTgxNjI1NjEwMDcwNzc4NCI+Itio2LHYp9uMINio2KfYstqv2LTYp9uM24wg2YLZgdmE2Iwg2KjYpyDYrdiz2KfYqCBHb29nbGUg2K7ZiNivINmI2KfYsdivINiz24zYs9iq2YUg2LTZiNuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSIyNzUxMzY4NjA1Mjg3Mjg4ODA4Ij4i4oCP2KrZhNin2LTigI7Zh9in24wg2LLbjNin2K/bjCDYqNix2KfbjCDaqdi024zYr9mGINin2YTar9mIINi12YjYsdiqINqv2LHZgdiq2Ycg2KfYs9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzkzMTgxNjI1NjEwMDcwNzc4NCI+IuKAj9io2LHYp9uMINio2KfYstqv2LTYp9uM24wg2YLZgdmE2Iwg2KjYpyDYrdiz2KfYqCBHb29nbGUg2K7ZiNivINmI2KfYsdivINiz24zYs9iq2YUg2LTZiNuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9Ijg4NDY4ODE0MjQxMDY0ODQ0NDciPiLZhtin2YUg2qnYp9ix2KjYsduMICjYp9uM2YXbjNmEKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI1OTU4MDI4MzgzOTU0NzM4NTI4Ij4i2LHZhdiyINmI2LHZiNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjcxMzA4OTM2OTQ3OTU3ODYzMDAiPiLZiNix2YjYryDYqNmHINiz24zYs9iq2YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iMTM2NDA1MTQ3MzM0NzQ4NTkwOCI+ItmG2KfZhSDaqdin2LHYqNixINuM2Kcg2LHZhdiyINmI2LHZiNivINmG2KfZhdi52KrYqNixINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSIxNjk2OTI0NzYzNjkwMzc5MDczIj4i2YbYp9mFINqp2KfYsdio2LHbjCDbjNinINqv2LDYsdmI2KfamNmH2ZQg2K7ZiNivINix2Kcg2YHYsdin2YXZiNi0INqp2LHYr9uM2K/Yn1xu2KfYsiAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIg2KjYp9iy2K/bjNivINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiLigI/Zhtin2YUg2qnYp9ix2KjYsduMINuM2Kcg2q/YsNix2YjYp9qY2YfZlCDYrtmI2K8g2LHYpyDZgdix2KfZhdmI2LQg2qnYsdiv24zYr9ifXG7Yp9iyICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDYqNin2LLYr9uM2K8g2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSI3MTE0NjI3MzUxMjg2OTMzODY3Ij4i2K/YsSDYrdin2YQg2KjYsdix2LPbjC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdW5sb2NrX2xhYmVsIiBtc2dpZD0iNzM3NDQwNDgzMjIwNjY3MDU0Ij4i2KjYp9iy2q/YtNin24zbjCDZgtmB2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29uX2xhYmVsIiBtc2dpZD0iOTA2ODg3NzU3NjUxMzQyNTk3MCI+Iti12K/YpyDYsdmI2LTZhiI8L3N0cmluZz4KQEAgLTg3OSw3ICs4OTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+Itin2YTar9mIINm+2KfaqSDYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jZWxsX2FkZGVkIiBtc2dpZD0iNjc1NjAzMTIwODM1OTI5MjQ4NyI+Itiz2YTZiNmEINin2LbYp9mB2Ycg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fZGV0ZWN0ZWQiIG1zZ2lkPSI0OTg4NzMwODk1NTU0MDU3MDU4Ij4i2KfZhNqv2Ygg2KraqdmF24zZhCDYtNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDYp9io2LLYp9ix2qkgJTIkZCDYp9iyICUzJGQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiLigI8lMSRzLiDYp9io2LLYp9ix2qkgJTIkZCDYp9iyICUzJGQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+Itin2KjYstin2LHaqSDYp9i22KfZgdmHINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i2K7Yp9mE24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+ItmF2YbYt9mC2Ycg2KjYp9iy2q/YtNin24zbjCDar9iz2KrYsdiv2Ycg2LTYry4iPC9zdHJpbmc+CkBAIC05MTAsMTAgKzkyMiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iaG91cl9hbXBtIiBtc2dpZD0iNDU4NDMzODA4MzUyOTM1NTk4MiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IkFNUE0iPiVQPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImhvdXJfY2FwX2FtcG0iIG1zZ2lkPSIyMDgzNDY1OTkyOTQwNDQ0MzY2Ij4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JXA8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfZmFpbGVkIiBtc2dpZD0iNTQxMDI3MDMyOTExNDIxMjA0MSI+Itiq2LPYqiDaqdin2LHYrtin2YbZhyDYp9mG2KzYp9mFINmG2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vdF9zeXN0ZW0iIG1zZ2lkPSI0NDM1MjAxNjU2NzY3Mjc2NzIzIj4i2LnZhdmE2qnYsdivIEZBQ1RPUllfVEVTVCDYqtmG2YfYpyDYqNix2KfbjCDYqNiz2KrZh+KAjNmH2KfbjCDZhti12Kgg2LTYr9mHINiv2LEgL3N5c3RlbS9hcHAg2b7YtNiq24zYqNin2YbbjCDZhduM4oCM2LTZiNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+Itio2LPYqtmH4oCM2KfbjCDbjNin2YHYqiDZhti02K8g2qnZhyDYudmF2YTaqdix2K8gRkFDVE9SWV9URVNUINix2Kcg2KfYsdin2KbZhyDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiLigI/YudmF2YTaqdix2K8gRkFDVE9SWV9URVNUINiq2YbZh9inINio2LHYp9uMINio2LPYqtmH4oCM2YfYp9uMINmG2LXYqCDYtNiv2Ycg2K/YsSAvc3lzdGVtL2FwcCDZvti02KrbjNio2KfZhtuMINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm9fYWN0aW9uIiBtc2dpZD0iODcyOTkxODc0Nzk5OTk4NTYxIj4i4oCP2KjYs9iq2YfigIzYp9uMINuM2KfZgdiqINmG2LTYryDaqdmHINi52YXZhNqp2LHYryBGQUNUT1JZX1RFU1Qg2LHYpyDYp9ix2KfYptmHINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9yZWJvb3QiIG1zZ2lkPSI2MzIwMTY4MjAzMDUwNzkxNjQzIj4i2LHYp9mH4oCM2KfZhtiv2KfYstuMINmF2KzYr9ivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTk4NzQ4Mzk3NzgzNDYwMzg3MiI+Iti12YHYrdmHINiv2LEgXCI8eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPlwiINmF24zigI7ar9mI24zYrzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIxOTg3NDgzOTc3ODM0NjAzODcyIj4i4oCP2LXZgdit2Ycg2K/YsSBcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+XCIg2YXbjOKAjtqv2YjbjNivOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+Itis2KfZiNinINin2LPaqdix24zZvtiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfdGl0bGUiIG1zZ2lkPSIyNjE5Mzc2NTU1NTI1MTE2NTkzIj4i2KrYo9uM24zYryDZvtuM2YXYp9uM2LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF9wb3NpdGl2ZV9idXR0b24iIG1zZ2lkPSIzMTEyNzUyMDEwNjAwNDg0MTMwIj4i2KrYsdqpINin24zZhiDYtdmB2K3ZhyI8L3N0cmluZz4KQEAgLTk0NSwxNyArOTU3LDE3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY4MjU1Mjc0NjkxNDU3NjA5MjIiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2LPYp9io2YLZhyDZhdix2YjYsdqv2LEg24zYpyDZhti02KfZhtqp4oCM2YfYp9uMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LTZhdinINix2Kcg2KfYtdmE2KfYrSDaqdmG2K8uINin24zZhiDZiNuM2pjar9uMINmF2YXaqdmGINin2LPYqiDYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINiv2YfYryDYr9in2K/Zh+KAjNmH2KfbjCDZhdix2YjYsdqv2LEg2LHYpyDYrdiw2YEg24zYpyDYp9i12YTYp9itINqp2YbYry4g2KrZiNis2Yc6INin24zZhiDZhdis2YjYsiDZhdmF2qnZhiDYp9iz2Kog2KrZiNiz2Lcg2YXYsdmI2LHar9ix2YfYp9uMINi02K7YtSDYq9in2YTYqyDbjNinINiz2KfbjNixINio2LHZhtin2YXZh+KAjNmH2KfbjCDYr9in2LHYp9uMINmC2KfYqNmE24zYqiDZhdix2YjYsSDZiNioINmC2KfYqNmEINin2KzYsdinINmG2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ5NzM4OTUzMTAxNDE4NTUwOSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYs9in2KjZgtmHINmF2LHZiNix2q/YsSDbjNinINmG2LTYp9mG2qnigIzZh9in24wg2LDYrtuM2LHZhyDYtNiv2Ycg2K/YsSDYqtmE2YHZhiDYtNmF2Kcg2LHYpyDYp9i12YTYp9itINqp2YbYry4g2KfbjNmGINmI24zamNqv24wg2YXZhdqp2YYg2KfYs9iqINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2K/Zh9ivINiv2KfYr9mH4oCM2YfYp9uMINmF2LHZiNix2q/YsSDYsdinINit2LDZgSDbjNinINin2LXZhNin2K0g2qnZhtivLiDYqtmI2KzZhzog2KfbjNmGINmF2KzZiNiyINmF2YXaqdmGINin2LPYqiDYqtmI2LPYtyDZhdix2YjYsdqv2LHZh9in24wg2LTYrti1INir2KfZhNirINuM2Kcg2LPYp9uM2LEg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINiv2KfYsdin24wg2YLYp9io2YTbjNiqINmF2LHZiNixINmI2Kgg2YLYp9io2YQg2KfYrNix2Kcg2YbYqNin2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsYXJtIiBtc2dpZD0iMTM3OTI5NDU1NjM2MjA5MTgxNCI+Itiq2YbYuNuM2YUg24zaqSDZh9i02K/Yp9ixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWxhcm0iIG1zZ2lkPSIzMTYzOTIwMzkxNTc0NzM4NDgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZh9i02K/Yp9ix24wg2LHYpyDYr9ixINio2LHZhtin2YXZhyDYs9in2LnYqiDYstmG2q/Yr9in2LEg2YbYtdioINi02K/ZhyDYqtmG2LjbjNmFINqp2YbYry4g2KjYsdiu24wg2KfYsiDYqNix2YbYp9mF2YfigI7Zh9in24wg2LPYp9i52Kog2LLZhtqv2K/Yp9ixINmG2YXbjOKAjtiq2YjYp9mG2YbYryDYp9uM2YYg2YjbjNqY2q/bjCDYsdinINin2LnZhdin2YQg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWxhcm0iIG1zZ2lkPSIzMTYzOTIwMzkxNTc0NzM4NDgiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZh9i02K/Yp9ix24wg2LHYpyDYr9ixINio2LHZhtin2YXZhyDYs9in2LnYqiDYstmG2q/Yr9in2LEg2YbYtdioINi02K/ZhyDYqtmG2LjbjNmFINqp2YbYry4g2KjYsdiu24wg2KfYsiDYqNix2YbYp9mF2YfigI7Zh9in24wg2LPYp9i52Kog2LLZhtqv2K/Yp9ixINmG2YXbjOKAjtiq2YjYp9mG2YbYryDYp9uM2YYg2YjbjNqY2q/bjCDYsdinINin2LnZhdin2YQg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hZGRWb2ljZW1haWwiIG1zZ2lkPSI1NTI1NjYwMDI2MDkwOTU5MDQ0Ij4i2KfZgdiy2YjYr9mGINm+2LPYqiDYtdmI2KrbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDZvtuM2KfZheKAjNmH2Kcg2LHYpyDYqNmHINi12YbYr9mI2YIg2K/YsduM2KfZgdiqINm+2LPYqiDYtdmI2KrbjCDYtNmF2Kcg2KfYttin2YHZhyDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSI1OTYyMjI0MTU4OTU1MjczOTMyIj4i2KrYutuM24zYsSDZhdis2YjYstmH2KfbjCDZhdqp2KfZhiDYrNi62LHYp9mB24zYp9uM24wg2YXYsdmI2LHar9ixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmF2KzZiNiy2YfYp9uMINis2LrYsdin2YHbjNin24zbjCDZhdix2YjYsdqv2LEg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfYsiDYotmGINin2LPYqtmB2KfYr9mHINqp2YbZhtivINiq2Kcg2KfYt9mE2KfYudin2Kog2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2LHYpyDYqNmHINiz2KfbjNiq4oCM2YfYp9uMINmI2Kgg2qnYqtin2KjYrtin2YbZhyDYqNmB2LHYs9iq2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSIxMDgzNzQzMjM0NTIyNjM4NzQ3Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YXYrNmI2LLZh9in24wg2KzYutix2KfZgduM2KfbjNuMINmF2LHZiNix2q/YsSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDYp9i32YTYp9i52KfYqiDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYsdinINio2Ycg2LPYp9uM2KrigIzZh9in24wg2YjYqCDaqdiq2KfYqNiu2KfZhtmHINio2YHYsdiz2KrZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iNTU2ODEzOTEwMDY0NTgyOTExNyI+Itiq2KPbjNuM2K8g2KjYs9iq2YfigIzZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iODQzNzU5MDE5MDk5MDg0MzM4MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZgtin2KjZhCDZhti12Kgg2KjZiNiv2YYg2KjYs9iq2Ycg2LHYpyDYqtij24zbjNivINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSI0MTg3Nzg2NzkzMzYwMzI2NjU0Ij4i2KfYqti12KfZhCDYqNmHINuM2qkg2KrYo9uM24zYryDaqdmG2YbYr9mHINio2LPYqtmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjMxODA3NDE3NzMyMzM4NjIxMjYiPiLYqNmHINiv2KfYsdmG2K/ZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqtin24zbjNiv2qnZhtmG2K/ar9in2YYg2KjYs9iq2Ycg2LHYpyDYr9ix2K7ZiNin2LPYqiDaqdmG2K8uINio2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2KfYsiDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iMzE4MDc0MTc3MzIzMzg2MjEyNiI+IuKAj9io2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiq2KfbjNuM2K/aqdmG2YbYr9qv2KfZhiDYqNiz2KrZhyDYsdinINiv2LHYrtmI2KfYs9iqINqp2YbYry4g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VyaWFsUG9ydCIgbXNnaWQ9IjU0NjA4MzMyNzY1NDYzMTA3NiI+Itiv2LPYqtix2LPbjCDYqNmHINiv2LHar9in2YfigIzZh9in24wg2LPYsduM2KfZhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlcmlhbFBvcnQiIG1zZ2lkPSIyOTkxNjM5OTg1MjI0NTk4MTkzIj4i2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiBTZXJpYWxNYW5hZ2VyIEFQSSDYqNmHINiv2LHar9in2YfigIzZh9in24wg2LPYsduM2KfZhCDYr9iz2KrYsdiz24wg2K/Yp9i02KrZhyDYqNin2LTYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXJpYWxQb3J0IiBtc2dpZD0iMjk5MTYzOTk4NTIyNDU5ODE5MyI+IuKAj9io2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqNinINin2LPYqtmB2KfYr9mHINin2LIgU2VyaWFsTWFuYWdlciBBUEkg2KjZhyDYr9ix2q/Yp9mH4oCM2YfYp9uMINiz2LHbjNin2YQg2K/Ys9iq2LHYs9uMINiv2KfYtNiq2Ycg2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjUwNzc3NzQyOTc5NDM0MDkyODUiPiLYr9iz2KrYsdiz24wg2K7Yp9ix2KzbjCDYqNmHINin2LHYp9im2YfigIzYr9mH2YbYr9qv2KfZhiDZhdit2KrZiNinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI0NTQ0MzQ2NDg2Njk3ODUzNjg1Ij4i2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINiq2Kcg2KfYsiDYrtin2LHYrCDYqNix2YbYp9mF2Ycg2KjZhyDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ar9in2YYg2YXYrdiq2YjYpyDYr9iz2KrYsdiz24wg2K/Yp9i02KrZhyDYqNin2LTYry4g2YfYsdqv2LIg2KjYsdin24wg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINmF2LnZhdmI2YTbjCDYqNmHINii2YYg2YbbjNin2LLbjCDZhtuM2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4i2KrYsdi624zYqCDYqNmHINin2YbYrNin2YUg2YbYr9in2K/ZhiDYqNmH4oCM2LHZiNiy2LHYs9in2YbbjOKAjNmH2KfbjCDYrtmI2K/aqdin2LEg2K/Ys9iq2q/Yp9mHIjwvc3RyaW5nPgpAQCAtMTA5NSw3ICsxMTA3LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+Itis2KfbjCDar9iw2KfYsduMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLYrNin24zar9iy24zZhiDYtNmI2K8uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i2K3YsNmBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLaqdm+24wgVVJMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLigI/aqdm+24wgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i2KfZhtiq2K7Yp9ioINmF2KrZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLYp9mG2KrYrtin2Kgg2YXYqtmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+Itin2YHYstmI2K/ZhiDYqNmHINmB2LHZh9mG2q/igIzZhNi62KoiPC9zdHJpbmc+CkBAIC0xMTE3LDE4ICsxMTI5LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+Itiq2qnZhduM2YQg2LnZhdmE2qnYsdivINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndoaWNoSG9tZUFwcGxpY2F0aW9uIiBtc2dpZD0iNDYxNjQyMDE3MjcyNzMyNjc4MiI+Itin2YbYqtiu2KfYqCDbjNqpINio2LHZhtin2YXZhyDYtdmB2K3ZhyDYp9i12YTbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c1VzZSIgbXNnaWQ9IjQ1ODMwMTgzNjgwMDA2MTA0MzgiPiLYp9iz2KrZgdin2K/ZhyDYqNmHINi12YjYsdiqINm+24zYtOKAjNmB2LHYtiDYqNix2KfbjCDYp9uM2YYg2LnZhdmE2qnYsdivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4i2b7bjNi04oCM2YHYsdi2INix2Kcg2K/YsSDYqtmG2LjbjNmF2KfYqiDYs9uM2LPYqtmFJmd0OyDYqNix2YbYp9mF2YfigI7Zh9inJmd0OyDZhdmI2LHYryDYr9in2YbZhNmI2K8g2LTYr9mHINm+2KfaqSDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjbGVhckRlZmF1bHRIaW50TXNnIiBtc2dpZD0iMzI1MjU4NDY4OTUxMjA3NzI1NyI+IuKAj9m+24zYtOKAjNmB2LHYtiDYsdinINiv2LEg2KrZhti424zZhdin2Kog2LPbjNiz2KrZhSZndDsg2KjYsdmG2KfZhdmH4oCO2YfYpyZndDsg2YXZiNix2K8g2K/Yp9mG2YTZiNivINi02K/ZhyDZvtin2qkg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlQWN0aXZpdHkiIG1zZ2lkPSI3NDg2ODc2MTQ3NzUxODAzMzMzIj4i2KfZhtiq2K7Yp9ioINi52YXZhNqp2LHYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZVVzYkFjdGl2aXR5IiBtc2dpZD0iNjg5NDc0ODQxNjA3MzU4MzUwOSI+Itin2YbYqtiu2KfYqCDYqNix2YbYp9mF2Ycg2KjYsdin24wg2K/Ys9iq2q/Yp9mHIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+ItmH24zahiDYqNix2YbYp9mF2YfigIzYp9uMINmG2YXbjOKAjtiq2YjYp9mG2K8g2KfbjNmGINqp2KfYsSDYsdinINin2YbYrNin2YUg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZVVzYkFjdGl2aXR5IiBtc2dpZD0iNjg5NDc0ODQxNjA3MzU4MzUwOSI+IuKAj9in2YbYqtiu2KfYqCDYqNix2YbYp9mF2Ycg2KjYsdin24wg2K/Ys9iq2q/Yp9mHIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+IuKAj9mH24zahiDYqNix2YbYp9mF2YfigIzYp9uMINmG2YXbjOKAjtiq2YjYp9mG2K8g2KfbjNmGINqp2KfYsSDYsdinINin2YbYrNin2YUg2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiLZhdiq2KPYs9mB2KfZhtmH2IwgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDZhdiq2YjZgtmBINi02K/ZhyDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWVycl9wcm9jZXNzIiBtc2dpZD0iNDUwNzA1ODk5NzAzNTY5NzU3OSI+ItmF2KrYo9iz2YHYp9mG2YfYjCDZvtix2K/Yp9iy2LQgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+INmF2KrZiNmC2YEg2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbnJfdGl0bGUiIG1zZ2lkPSI0MzUxOTQ4NDgxNDU5MTM1NzA5Ij48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjE5MDQ0NzcxODkwNTcxOTkwNjYiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+INm+2KfYs9iuINmG2YXbjOKAjtiv2YfYry5cblxu2KLbjNinINmF24zigI7YrtmI2KfZh9uM2K8g2KLZhtix2Kcg2KjYqNmG2K/bjNiv2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfYWN0aXZpdHlfcHJvY2VzcyIgbXNnaWQ9IjU3NzYyMDk4ODMyOTkwODk3NjciPiLZgdi52KfZhNuM2KogPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDZvtin2LPYriDZhtmF24zigI7Yr9mH2K8uXG5cbtii24zYpyDZhduM4oCO2K7ZiNin2YfbjNivINii2YYg2LHYpyDYqNio2YbYr9uM2K/YnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hcHBsaWNhdGlvbl9wcm9jZXNzIiBtc2dpZD0iODk0MTc1NzYwNzM0MDQ4MTA1NyI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g2b7Yp9iz2K4g2YbZhduM4oCO2K/Zh9ivLiDYotuM2Kcg2YXbjOKAjtiu2YjYp9mH24zYryDYotmGINix2Kcg2KjYqNmG2K/bjNiv2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfcHJvY2VzcyIgbXNnaWQ9IjY1MTMyMDk4NzQ4ODA1MTcxMjUiPiLYsdmI2YbYryA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g2b7Yp9iz2K4g2YbZhduM4oCO2K/Zh9ivLiBcblxu2KLbjNinINmF24zigI7YrtmI2KfZh9uM2K8g2KLZhiDYsdinINio2KjZhtiv24zYr9ifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X2FwcGxpY2F0aW9uIiBtc2dpZD0iMTkwNDQ3NzE4OTA1NzE5OTA2NiI+IuKAjzx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz4g2b7Yp9iz2K4g2YbZhduM4oCO2K/Zh9ivLlxuXG7YotuM2Kcg2YXbjOKAjtiu2YjYp9mH24zYryDYotmG2LHYpyDYqNio2YbYr9uM2K/YnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+IuKAj9mB2LnYp9mE24zYqiA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+INm+2KfYs9iuINmG2YXbjOKAjtiv2YfYry5cblxu2KLbjNinINmF24zigI7YrtmI2KfZh9uM2K8g2KLZhiDYsdinINio2KjZhtiv24zYr9ifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4i4oCPPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDZvtin2LPYriDZhtmF24zigI7Yr9mH2K8uINii24zYpyDZhduM4oCO2K7ZiNin2YfbjNivINii2YYg2LHYpyDYqNio2YbYr9uM2K/YnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+IuKAj9ix2YjZhtivIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDZvtin2LPYriDZhtmF24zigI7Yr9mH2K8uIFxuXG7YotuM2Kcg2YXbjOKAjtiu2YjYp9mH24zYryDYotmGINix2Kcg2KjYqNmG2K/bjNiv2J8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9jbG9zZSIgbXNnaWQ9IjgzNDYwNzIwOTQ1MjEyNjU2MDUiPiLYqtij24zbjNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwb3J0IiBtc2dpZD0iNDA2MDIxODI2MDk4NDc5NTcwNiI+Itqv2LLYp9ix2LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3YWl0IiBtc2dpZD0iNzE0NzExODIxNzIyNjMxNzczMiI+ItmF2YbYqti42LEg2KjZhdin2YbbjNivIjwvc3RyaW5nPgpAQCAtMTEzOCw5ICsxMTUwLDkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDYp9iyINin2KjYqtiv2Kcg2LHYp9mH4oCM2KfZhtiv2KfYstuMINi02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3NjYWxlIiBtc2dpZD0iMzIwMjk1NTY2NzY3NTk0NDQ5OSI+ItmF2YLbjNin2LMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2hvdyIgbXNnaWQ9IjQwMTM4Nzg4NzY0ODY2NTU4OTIiPiLZh9mF24zYtNmHINmG2LTYp9mGINiv2KfYr9mHINi02YjYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+Itiv2LEg2KrZhti424zZhdin2Kog2LPbjNiz2KrZhSAmZ3Q72KjYsdmG2KfZhdmH4oCO2YfYpyAmZ3Q7INmF2YjYsdivINiv2KfZhtmE2YjYryDYtNiv2Ycg2KLZhiDYsdinINiv2YjYqNin2LHZhyDZgdi52KfZhCDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4i2KjYsdmG2KfZhdmHIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gKNm+2LHYr9in2LLYtCA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTIkczwveGxpZmY6Zz4pINiu2Lcg2YXYtNuMIFN0cmljdE1vZGUg2KfYrNix2KfbjNuMINiu2YjYryDYsdinINmG2YLYtiDaqdix2K/ZhyDYp9iz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic212X3Byb2Nlc3MiIG1zZ2lkPSI1MTIwMzk3MDEyMDQ3NDYyNDQ2Ij4i2YHYsdii24zZhtivIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDYrti3INmF2LTbjCBTdHJpY3RNb2RlINin2KzYsdin24wg2K7ZiNiv2qnYp9ixINiu2YjYryDYsdinINmG2YLYtiDaqdix2K/ZhyDYp9iz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4i4oCP2K/YsSDYqtmG2LjbjNmF2KfYqiDYs9uM2LPYqtmFICZndDvYqNix2YbYp9mF2YfigI7Zh9inICZndDsg2YXZiNix2K8g2K/Yp9mG2YTZiNivINi02K/ZhyDYotmGINix2Kcg2K/ZiNio2KfYsdmHINmB2LnYp9mEINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjMzMDcyMDkxOTIxNTU0NDI4MjkiPiLigI/YqNix2YbYp9mF2YcgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiAo2b7Ysdiv2KfYsti0IDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMiRzPC94bGlmZjpnPikg2K7YtyDZhdi024wgU3RyaWN0TW9kZSDYp9is2LHYp9uM24wg2K7ZiNivINix2Kcg2YbZgti2INqp2LHYr9mHINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLigI/Zgdix2KLbjNmG2K8gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+INiu2Lcg2YXYtNuMIFN0cmljdE1vZGUg2KfYrNix2KfbjCDYrtmI2K/aqdin2LEg2K7ZiNivINix2Kcg2YbZgti2INqp2LHYr9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ190aXRsZSIgbXNnaWQ9IjE1ODQxOTIyODU0NDE0MDU3NDYiPiLigI9BbmRyb2lkINiv2LEg2K3Yp9mEINin2LHYqtmC2Kcg2KfYs9iqLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfYXBrIiBtc2dpZD0iNzkwNDA0MjY4MjExMTUyNjE2OSI+Itiv2LEg2K3Yp9mEINio2YfbjNmG2YfigIzYs9in2LLbjCDYqNix2YbYp9mF2YfZlCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19zdGFydGluZ19hcHBzIiBtc2dpZD0iNDUxNDY0NTE2MzQ2OTI2NzEzIj4i2K/YsSDYrdin2YQg2KLYutin2LIg2KjYsdmG2KfZhdmH4oCM2YfYpy4iPC9zdHJpbmc+CkBAIC0xMTc0LDIzICsxMTg2LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4i2KLZh9mG2q/igIzZh9in24wg2LLZhtqvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfdW5rbm93biIgbXNnaWQ9IjU0Nzc5MTk5ODg3MDE3ODQ3ODgiPiLYotmH2YbaryDYstmG2q8g2YbYp9i02YbYp9izIjwvc3RyaW5nPgogICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZSI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY2NTQxMjM5ODc0MTgxNjg2OTMiPiLYtNio2qnZhyBXaS1GaSDZhdmI2KzZiNivINin2LPYqiI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+Iti02KjaqdmH4oCM2YfYp9uMIFdpLUZpINmF2YjYrNmI2K8g2YfYs9iq2YbYryI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY2NTQxMjM5ODc0MTgxNjg2OTMiPiLigI/YtNio2qnZhyBXaS1GaSDZhdmI2KzZiNivINin2LPYqiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IuKAj9i02KjaqdmH4oCM2YfYp9uMIFdpLUZpINmF2YjYrNmI2K8g2YfYs9iq2YbYryI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGVfZGV0YWlsZWQiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4i2LTYqNqp2YcgV2ktRmkg2YXZiNis2YjYryDYsdinINio2KfYsiDaqdmG24zYryI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzkxNTg5NTMyMzY0NDI5Mjc2OCI+Iti02KjaqdmH4oCM2YfYp9uMIFdpLUZpINmF2YjYrNmI2K8g2LHYpyDYqNin2LIg2qnZhtuM2K8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4i4oCP2LTYqNqp2YcgV2ktRmkg2YXZiNis2YjYryDYsdinINio2KfYsiDaqdmG24zYryI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzkxNTg5NTMyMzY0NDI5Mjc2OCI+IuKAj9i02KjaqdmH4oCM2YfYp9uMIFdpLUZpINmF2YjYrNmI2K8g2LHYpyDYqNin2LIg2qnZhtuM2K8iPC9pdGVtPgogICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iNDAyOTQ4OTcxNjYwNTI1NTM4NiI+ItmI2LHZiNivINio2Ycg2LTYqNqp2YcgV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iNDAyOTQ4OTcxNjYwNTI1NTM4NiI+IuKAj9mI2LHZiNivINio2Ycg2LTYqNqp2YcgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iODQ5NTE1NTU5MzM1ODA1NDY3NiI+ItmI2LHZiNivINio2Ycg2LTYqNqp2YciPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbmV0d29ya19hdmFpbGFibGVfc2lnbl9pbl9kZXRhaWxlZCAoODAwMDA4MTk0MTQ0Nzk3NjExOCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiLYp9iq2LXYp9mEINio2YcgV2ktRmkg2YXZhdqp2YYg2YbbjNiz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3dhdGNoZG9nX25ldHdvcmtfZGlzYWJsZWQiIG1zZ2lkPSI3OTA0MjE0MjMxNjUxNTQ2MzQ3Ij4i4oCP2KfYqti12KfZhCDYqNmHIFdpLUZpINmF2YXaqdmGINmG24zYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiDYp9iq2LXYp9mEINin24zZhtiq2LHZhtiq24wg2LbYuduM2YHbjCDYr9in2LHYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IldpLUZpIERpcmVjdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3R1cm5vbl9tZXNzYWdlIiBtc2dpZD0iMjkwOTI1MDk0MjI5OTYyNzI0NCI+IldpLUZpIERpcmVjdCDYsdinINi02LHZiNi5INqp2YbbjNivLiDYp9uM2YYg2qnYp9ixINmG2YLYt9mHINin2KrYtdin2YQv2LPYsdmI24zYsyDar9uM2LHZhtiv2YcgV2ktRmkg2LHYpyDYutuM2LHZgdi52KfZhCDYrtmI2KfZh9ivINqp2LHYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiJXaS1GaSBEaXJlY3Qg2LTYsdmI2Lkg2YbYtNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+IldpLUZpIERpcmVjdCDYsdmI2LTZhiDYp9iz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90dXJub25fbWVzc2FnZSIgbXNnaWQ9IjI5MDkyNTA5NDIyOTk2MjcyNDQiPiLigI9XaS1GaSBEaXJlY3Qg2LHYpyDYtNix2YjYuSDaqdmG24zYry4g2KfbjNmGINqp2KfYsSDZhtmC2LfZhyDYp9iq2LXYp9mEL9iz2LHZiNuM2LMg2q/bjNix2YbYr9mHIFdpLUZpINix2Kcg2LrbjNix2YHYudin2YQg2K7ZiNin2YfYryDaqdix2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4i4oCPV2ktRmkgRGlyZWN0INi02LHZiNi5INmG2LTYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiLigI9XaS1GaSBEaXJlY3Qg2LHZiNi02YYg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiLZhNmF2LMg2qnYsdiv2YYg2KjYsdin24wg2KrZhti424zZhdin2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIxNjQ1MjY3MjU5MjcyODI5NTU5Ij4i2b7YsNuM2LHYtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlY2xpbmUiIG1zZ2lkPSIyMTEyMjI1NDUxNzA2MTM3ODk0Ij4i2LnYr9mFINm+2LDbjNix2LQiPC9zdHJpbmc+CkBAIC0xMjAwLDIwICsxMjEyLDIwIEBACiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4i2KjZhzoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbnRlcl9waW5fbWVzc2FnZSIgbXNnaWQ9IjU5MjA5Mjk1NTAzNjc4Mjg5NzAiPiLZvtuM2YYg2YTYp9iy2YUg2LHYpyDYqtin24zZviDaqdmG24zYrzoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9zaG93X3Bpbl9tZXNzYWdlIiBtc2dpZD0iODUzMDU2MzMyMzg4MDkyMTA5NCI+Itm+24zZhjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODAxMjk4MTI1Nzc0MjIzMjQ3NSI+Itiv2LEg2K3bjNmGINin2KrYtdin2YQg2KjZhyA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+INin2LHYqtio2KfYtyDYp9uM2YYg2LHYp9uM2KfZhtmHINmE2YjYrduMINio2KcgV2ktRmkg2YXZiNmC2KrYp9mLINmC2LfYuSDYrtmI2KfZh9ivINi02K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4i2KfbjNmGINqv2YjYtNuMINio2YfigIzYt9mI2LEg2YXZiNmC2Kog2KfYsiBXaS1GaSDZgti32Lkg2K7ZiNin2YfYryDYtNiv2Iwg2K/YsSDYrdin2YTbjCDaqdmHINio2YcgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDZiNi12YQg2KfYs9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgwMTI5ODEyNTc3NDIyMzI0NzUiPiLigI/Yr9ixINit24zZhiDYp9iq2LXYp9mEINio2YcgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDYp9ix2KrYqNin2Lcg2KfbjNmGINix2KfbjNin2YbZhyDZhNmI2K3bjCDYqNinIFdpLUZpINmF2YjZgtiq2KfZiyDZgti32Lkg2K7ZiNin2YfYryDYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+IuKAj9in24zZhiDar9mI2LTbjCDYqNmH4oCM2LfZiNixINmF2YjZgtiqINin2LIgV2ktRmkg2YLYt9i5INiu2YjYp9mH2K8g2LTYr9iMINiv2LEg2K3Yp9mE24wg2qnZhyDYqNmHIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4g2YjYtdmEINin2LPYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9jaGFyYWN0ZXIiIG1zZ2lkPSIzMzY1NTUwMTIwNjE3NzAxNzQ1Ij4i2K/YsdisINmG2YjbjNiz2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiLYp9ix2LPYp9mEINm+24zYp9mF2qkg2YfYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsg2K/YsSDYrdin2YQg2KfYsdiz2KfZhCDYqti52K/Yp9ivINiy24zYp9iv24wg2b7bjNin2YXaqSDYp9iz2KouINii24zYpyDYp9is2KfYstmHINmF24zigIzYr9mH24zYryDYp9uM2YYg2KjYsdmG2KfZhdmHINmH2YXahtmG2KfZhiDZvtuM2KfZhdqpINin2LHYs9in2YQg2qnZhtiv2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9tZXNzYWdlIiBtc2dpZD0iMzg2Nzg5OTE2OTY1MTQ5NjQzMyI+IuKAjyZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7INiv2LEg2K3Yp9mEINin2LHYs9in2YQg2KrYudiv2KfYryDYstuM2KfYr9uMINm+24zYp9mF2qkg2KfYs9iqLiDYotuM2Kcg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9uM2K8g2KfbjNmGINio2LHZhtin2YXZhyDZh9mF2obZhtin2YYg2b7bjNin2YXaqSDYp9ix2LPYp9mEINqp2YbYr9ifIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfeWVzIiBtc2dpZD0iMzY2MzcyNTk5Mzg1NTgxNjgwNyI+Itin2KzYp9iy2Ycg2K/Yp9iv2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9ubyIgbXNnaWQ9IjYyNTQzODU2MTM5NTUzNDk4MiI+Itix2K/aqdix2K/ZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDZhdin24zZhCDYp9iz2Kog2b7bjNin2YXbjCDYqNmHICZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJERVNUX0FERFJFU1MiPiUyJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDYp9ix2LPYp9mEINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX21lc3NhZ2UiIG1zZ2lkPSIxNjQ1NDM2NDY2Mjg1MzEwODU1Ij4i4oCPJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsg2YXYp9uM2YQg2KfYs9iqINm+24zYp9mF24wg2KjZhyAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsg2KfYsdiz2KfZhCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjM0OTIwMjU3MTk4NjgwNzg0NTciPiLYp9uM2YYg2qnYp9ixICI8Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiLZhduM4oCM2KrZiNin2YbYryDZhdmG2KzYsSDYqNmHINi02KfYsdqYIjwvZm9udD4iINit2LPYp9ioINiq2YTZgdmGINmH2YXYsdin2Ycg2LTZhdinINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfcHJlbWl1bV9zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSI1NTIzODI2MzQ5MTA1MTIzNjg3Ij48Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiLYp9uM2YYg2qnYp9ixINit2LPYp9ioINiq2YTZgdmGINmH2YXYsdin2Ycg2LTZhdinINix2Kcg2LTYp9ix2pgg2K7ZiNin2YfYryDaqdix2K8uIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWxsb3ciIG1zZ2lkPSI0NDU4ODc4NjM3MTExMDIzNDEzIj4i2KfYsdiz2KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiLZhNi62YgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl9jaG9pY2UiIG1zZ2lkPSI1Mjg5NTM4NTkyMjcyMjE4MTM2Ij4i2KfbjNmGINin2YbYqtiu2KfYqCDYsdinINio2Ycg2K7Yp9i32LEg2KjYs9m+2KfYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4i2YXbjOKAjNiq2YjYp9mG24zYryDYqNi52K/Yp9mLINii2YYg2LHYpyDYr9ixINiq2YbYuNuM2YXYp9iqICZndDsg2KjYsdmG2KfZhdmH4oCM2YfYpyDYqti624zbjNixINiv2YfbjNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfdW5kb19pbnN0cnVjdGlvbiIgbXNnaWQ9IjQ5NjA5NDQxMzMwNTIyODc0ODQiPiLigI/ZhduM4oCM2KrZiNin2YbbjNivINio2LnYr9in2Ysg2KLZhiDYsdinINiv2LEg2KrZhti424zZhdin2KogJmd0OyDYqNix2YbYp9mF2YfigIzZh9inINiq2LrbjNuM2LEg2K/Zh9uM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2Fsd2F5c19hbGxvdyIgbXNnaWQ9IjMyNDExODExNTQ4Njk0OTMzNjgiPiLZh9mF24zYtNmHINmF2KzYp9iyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9uZXZlcl9hbGxvdyIgbXNnaWQ9IjQ0Njk5Mjc2NTc3NDI2OTY3MyI+ItmH2YXbjNi02Ycg2LrbjNix2YXYrNin2LIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiLYs9uM2YUg2qnYp9ix2Kog2KjYsdiv2KfYtNiq2Ycg2LTYryI8L3N0cmluZz4KQEAgLTEyMzAsMzggKzEyNDIsMzggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1zX2Rlc2NyaXB0aW9uX2FwcCIgbXNnaWQ9IjUxMzk4MzYxNDMyOTMyOTk0MTciPiLYp9ix2KfYptmHINi02K/ZhyDYqtmI2LPYtyA8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19wZXJtaXNzaW9ucyIgbXNnaWQ9IjcyODMzNTc3MjgyMTkzMzgxMTIiPiLZhdis2YjYstuMINmE2KfYstmFINmG24zYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiLZhdmF2qnZhiDYp9iz2Kog2KjYsdin24wg2LTZhdinINmH2LLbjNmG2Ycg2K/Yp9i02KrZhyDYqNin2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2FjdGl2aXR5X3RpdGxlIiBtc2dpZD0iNDQ2NTA1NTE1NzIwOTY0ODY0MSI+Itit2KfZgdi42Ycg2KfZhtio2YjZhyBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiJVU0Ig2YXYqti12YQg2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+Iti02YXYpyDYp9iyINi32LHbjNmCIFVTQiDYqNmHINix2KfbjNin2YbZh9mUINiu2YjYryDZhdiq2LXZhCDYtNiv2YfigI7Yp9uM2K8uINin2q/YsSDZhduM4oCO2K7ZiNin2YfbjNivINmB2KfbjNmE4oCO2YfYpyDYsdinINio24zZhiDYsdin24zYp9mG2YfZlCDYrtmI2K8g2Ygg2K3Yp9mB2LjZh9mUIFVTQiDYr9ixIEFuZHJvaWQg2qnZvtuMINqp2YbbjNiv2Iwg2K/aqdmF2Ycg2LLbjNixINix2Kcg2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiLYtNmF2Kcg2KfYsiDYt9ix24zZgiBVU0Ig2KjZhyDYsdin24zYp9mG2YfZlCDYrtmI2K8g2YXYqti12YQg2LTYr9mH4oCO2KfbjNivLiDYp9qv2LEg2YXbjOKAjtiu2YjYp9mH24zYryDZgdin24zZhOKAjtmH2Kcg2LHYpyDYqNuM2YYg2LHYp9uM2KfZhtmH2ZQg2K7ZiNivINmIINqp2KfYsdiqIFNEINiv2LEgQW5kcm9pZCDaqdm+24wg2qnZhtuM2K/YjCDYr9qp2YXZhyDYstuM2LEg2LHYpyDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYnV0dG9uX21vdW50IiBtc2dpZD0iMTA1MjI1OTkzMDM2OTUwODIzNSI+Itix2YjYtNmGINqp2LHYr9mGINiv2LPYqtqv2KfZhyDYsNiu24zYsdmH4oCM2LPYp9iy24wgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMDE3MDQ1MjE3MzY1NTQwNjU4Ij4i2YfZhtqv2KfZhSDYp9iz2KrZgdin2K/ZhyDYp9iyINit2KfZgdi42YfZlCBVU0Ig2KjYsdin24wg2K3Yp9mB2LjZhyDYp9mG2KjZiNmHIFVTQiDZhdi02qnZhNuMINio2YjYrNmI2K8g2KLZhdivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4i2YfZhtqv2KfZhSDYp9iz2KrZgdin2K/ZhyDYp9iyINqp2KfYsdiqIFNEINio2LHYp9uMINit2KfZgdi42Ycg2LDYrtuM2LHZhyDYp9mG2KjZiNmHIFVTQiDZhdi02qnZhNuMINio2YjYrNmI2K8g2KLZhdivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0Ig2YXYqti12YQg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2FjdGl2aXR5X3RpdGxlIiBtc2dpZD0iNDQ2NTA1NTE1NzIwOTY0ODY0MSI+IuKAj9it2KfZgdi42Ycg2KfZhtio2YjZhyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiLigI9VU0Ig2YXYqti12YQg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IuKAj9i02YXYpyDYp9iyINi32LHbjNmCIFVTQiDYqNmHINix2KfbjNin2YbZh9mUINiu2YjYryDZhdiq2LXZhCDYtNiv2YfigI7Yp9uM2K8uINin2q/YsSDZhduM4oCO2K7ZiNin2YfbjNivINmB2KfbjNmE4oCO2YfYpyDYsdinINio24zZhiDYsdin24zYp9mG2YfZlCDYrtmI2K8g2Ygg2K3Yp9mB2LjZh9mUIFVTQiDYr9ixIEFuZHJvaWQg2qnZvtuMINqp2YbbjNiv2Iwg2K/aqdmF2Ycg2LLbjNixINix2Kcg2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiLigI/YtNmF2Kcg2KfYsiDYt9ix24zZgiBVU0Ig2KjZhyDYsdin24zYp9mG2YfZlCDYrtmI2K8g2YXYqti12YQg2LTYr9mH4oCO2KfbjNivLiDYp9qv2LEg2YXbjOKAjtiu2YjYp9mH24zYryDZgdin24zZhOKAjtmH2Kcg2LHYpyDYqNuM2YYg2LHYp9uM2KfZhtmH2ZQg2K7ZiNivINmIINqp2KfYsdiqIFNEINiv2LEgQW5kcm9pZCDaqdm+24wg2qnZhtuM2K/YjCDYr9qp2YXZhyDYstuM2LEg2LHYpyDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYnV0dG9uX21vdW50IiBtc2dpZD0iMTA1MjI1OTkzMDM2OTUwODIzNSI+IuKAj9ix2YjYtNmGINqp2LHYr9mGINiv2LPYqtqv2KfZhyDYsNiu24zYsdmH4oCM2LPYp9iy24wgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMDE3MDQ1MjE3MzY1NTQwNjU4Ij4i4oCP2YfZhtqv2KfZhSDYp9iz2KrZgdin2K/ZhyDYp9iyINit2KfZgdi42YfZlCBVU0Ig2KjYsdin24wg2K3Yp9mB2LjZhyDYp9mG2KjZiNmHIFVTQiDZhdi02qnZhNuMINio2YjYrNmI2K8g2KLZhdivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4i4oCP2YfZhtqv2KfZhSDYp9iz2KrZgdin2K/ZhyDYp9iyINqp2KfYsdiqIFNEINio2LHYp9uMINit2KfZgdi42Ycg2LDYrtuM2LHZhyDYp9mG2KjZiNmHIFVTQiDZhdi02qnZhNuMINio2YjYrNmI2K8g2KLZhdivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiLigI9VU0Ig2YXYqti12YQg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4i2KjYsdin24wg2qnZvtuMINqp2LHYr9mGINmB2KfbjNmE4oCM2YfYpyDYp9iyL9io2Ycg2LHYp9uM2KfZhtmH2ZQg2K7ZiNivINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzMzYwNTgzOTY2NjM1MTYwMTciPiLYrtin2YXZiNi0INqp2LHYr9mGINiv2LPYqtqv2KfZhyDYsNiu24zYsdmH4oCM2LPYp9iy24wgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2NTY4NTIwOTg1NTU2MjM4MjIiPiLYqNix2KfbjCDYutuM2LHZgdi52KfZhCDaqdix2K/ZhiDYrdin2YHYuNmH2ZQgVVNC2Iwg2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiLYr9iz2Krar9in2Ycg2LDYrtuM2LHZh+KAjNiz2KfYstuMIFVTQiDYr9ixINit2KfZhCDYp9iz2KrZgdin2K/ZhyDYp9iz2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+ItmC2KjZhCDYp9iyINi624zYsdmB2LnYp9mEINqp2LHYr9mGINit2KfZgdi42YfZlCBVU0LYjCDYrdin2YHYuNmH2ZQgVVNCINmF2LHYqNmI2Lcg2KjZhyBBbmRyb2lkINix2Kcg2K/YsSDYsdin24zYp9mG2YfZlCDYrtmI2K8g2YTYutmIINmG2LXYqCDaqdmG24zYryAoXCLYrtin2LHYrCDaqdmG24zYr1wiKS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4i2YLYqNmEINin2LIg2LrbjNix2YHYudin2YQg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQtiMINqp2KfYsdiqIFNEINmF2LHYqNmI2Lcg2KjZhyBBbmRyb2lkINix2Kcg2K/YsSDYsdin24zYp9mG2Ycg2YTYutmIINmG2LXYqCDaqdmG24zYryAoXCLYrtin2LHYrCDaqdmG24zYr1wiKS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiLYrtin2YXZiNi0INqp2LHYr9mGINiv2LPYqtqv2KfZhyDYsNiu24zYsdmH4oCM2LPYp9iy24wgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+ItmH2Ybar9in2YUg2LrbjNix2YHYudin2YQg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQiDZhdi02qnZhNuMINio2YjYrNmI2K8g2KLZhdivLiDYqNix2LHYs9uMINqp2YbbjNivINmF24zYstio2KfZhiBVU0Ig2LHYpyDZhNi62Ygg2YbYtdioINqp2LHYr9mHINio2KfYtNuM2K/YjCDYs9m+2LMg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiLYsdmI2LTZhiDaqdix2K/ZhiDYr9iz2Krar9in2Ycg2LDYrtuM2LHZh+KAjNiz2KfYstuMIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+Itiv2LEg2LXZiNix2Kog2YHYudin2YQg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQtiMINio2LHYrtuMINin2LIg2KjYsdmG2KfZhdmH4oCO2YfYp9uM24wg2qnZhyDYp9iyINii2YbigIzZh9inINin2LPYqtmB2KfYr9mHINmF24zigI7aqdmG24zYryDZhdiq2YjZgtmBINmF24zigI7YtNmI2YbYryDZiCDYqtinINiy2YXYp9mG24wg2qnZhyDYrdin2YHYuNmH2ZQgVVNCINix2Kcg2LrbjNix2YHYudin2YQg2YbaqdmG24zYryDYp9mF2qnYp9mGINin2LPYqtmB2KfYr9mHINin2LIg2KLZhuKAjNmH2Kcg2YjYrNmI2K8g2YbYrtmI2KfZh9ivINiv2KfYtNiqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiLYsdin2YfigIzYp9mG2K/Yp9iy24wgVVNCINmG2KfZhdmI2YHZgiDYqNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzM2MDU4Mzk2NjYzNTE2MDE3Ij4i4oCP2K7Yp9mF2YjYtCDaqdix2K/ZhiDYr9iz2Krar9in2Ycg2LDYrtuM2LHZh+KAjNiz2KfYstuMIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4i4oCP2KjYsdin24wg2LrbjNix2YHYudin2YQg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQtiMINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX3RpdGxlIiBtc2dpZD0iNjYwMTI5ODUxNzA4Nzc1ODUzIj4i4oCP2K/Ys9iq2q/Yp9mHINiw2K7bjNix2YfigIzYs9in2LLbjCBVU0Ig2K/YsSDYrdin2YQg2KfYs9iq2YHYp9iv2Ycg2KfYs9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiLigI/Zgtio2YQg2KfYsiDYutuM2LHZgdi52KfZhCDaqdix2K/ZhiDYrdin2YHYuNmH2ZQgVVNC2Iwg2K3Yp9mB2LjZh9mUIFVTQiDZhdix2KjZiNi3INio2YcgQW5kcm9pZCDYsdinINiv2LEg2LHYp9uM2KfZhtmH2ZQg2K7ZiNivINmE2LrZiCDZhti12Kgg2qnZhtuM2K8gKFwi2K7Yp9ix2Kwg2qnZhtuM2K9cIikuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IuKAj9mC2KjZhCDYp9iyINi624zYsdmB2LnYp9mEINqp2LHYr9mGINit2KfZgdi42YfZlCBVU0LYjCDaqdin2LHYqiBTRCDZhdix2KjZiNi3INio2YcgQW5kcm9pZCDYsdinINiv2LEg2LHYp9uM2KfZhtmHINmE2LrZiCDZhti12Kgg2qnZhtuM2K8gKFwi2K7Yp9ix2Kwg2qnZhtuM2K9cIikuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9idXR0b25fbW91bnQiIG1zZ2lkPSI3MDYwMjE4MDM0OTAwNjk2MDI5Ij4i4oCP2K7Yp9mF2YjYtCDaqdix2K/ZhiDYr9iz2Krar9in2Ycg2LDYrtuM2LHZh+KAjNiz2KfYstuMIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiLigI/Zh9mG2q/Yp9mFINi624zYsdmB2LnYp9mEINqp2LHYr9mGINit2KfZgdi42YfZlCBVU0Ig2YXYtNqp2YTbjCDYqNmI2KzZiNivINii2YXYry4g2KjYsdix2LPbjCDaqdmG24zYryDZhduM2LLYqNin2YYgVVNCINix2Kcg2YTYutmIINmG2LXYqCDaqdix2K/ZhyDYqNin2LTbjNiv2Iwg2LPZvtizINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RpdGxlIiBtc2dpZD0iOTYzMDM5MDMzNDcwNDc4Njk3Ij4i4oCP2LHZiNi02YYg2qnYsdiv2YYg2K/Ys9iq2q/Yp9mHINiw2K7bjNix2YfigIzYs9in2LLbjCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGV4dCIgbXNnaWQ9IjUxMDA0Mjg3NTcxMDc0Njk0NTQiPiLigI/Yr9ixINi12YjYsdiqINmB2LnYp9mEINqp2LHYr9mGINit2KfZgdi42YfZlCBVU0LYjCDYqNix2K7bjCDYp9iyINio2LHZhtin2YXZh+KAjtmH2KfbjNuMINqp2Ycg2KfYsiDYotmG4oCM2YfYpyDYp9iz2KrZgdin2K/ZhyDZhduM4oCO2qnZhtuM2K8g2YXYqtmI2YLZgSDZhduM4oCO2LTZiNmG2K8g2Ygg2KrYpyDYstmF2KfZhtuMINqp2Ycg2K3Yp9mB2LjZh9mUIFVTQiDYsdinINi624zYsdmB2LnYp9mEINmG2qnZhtuM2K8g2KfZhdqp2KfZhiDYp9iz2KrZgdin2K/ZhyDYp9iyINii2YbigIzZh9inINmI2KzZiNivINmG2K7ZiNin2YfYryDYr9in2LTYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfZXJyb3JfdGl0bGUiIG1zZ2lkPSI3MzIzNjU4NDY5NjI2NTE0MjA3Ij4i4oCP2LHYp9mH4oCM2KfZhtiv2KfYstuMIFVTQiDZhtin2YXZiNmB2YIg2KjZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRsZ19vayIgbXNnaWQ9IjczNzY5NTMxNjcwMzk4NjU3MDEiPiLYqtij24zbjNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX210cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzNjk5OTEzMDk3MzkxNTUwMzk0Ij4i2YXYqti12YQg2LTYr9mHINio2YfigIzYudmG2YjYp9mGINiv2LPYqtqv2KfZhyDYsdiz2KfZhtmH4oCM2KfbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9wdHBfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMTk2MDgxNzE5MjIxNjA2NDgzMyI+ItmF2KrYtdmEINi02K/ZhyDYqNmH4oCM2LnZhtmI2KfZhiDYr9mI2LHYqNuM2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfY2RfaW5zdGFsbGVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3NzQ3MTI4Mjc4OTIwOTA3NTQiPiLZhdiq2LXZhCDYtNiv2Ycg2KjZh+KAjNi52YbZiNin2YYg2YbYtdioINqp2YbZhtiv2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiLYqNmHINuM2qkg2YjYs9uM2YTZhyDYrNin2YbYqNuMIFVTQiDZiNi12YQg2LTYr9mHINin2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjIyOTA4NTkzOTk5ODM3MjAyNzEiPiLYqNix2KfbjCDYs9in24zYsSDar9iy24zZhtmH4oCM2YfYp9uMIFVTQiDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiLYrdin2YHYuNmH2ZQgVVNCINmB2LHZhdiqINi02YjYr9ifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+Itqp2KfYsdiqIFNEINmB2LHZhdiqINi02YjYr9ifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkzNDAxNjg1MzQyNTc2MTA3OCI+ItmH2YXZhyDZgdin24zZhOKAjNmH2KfbjCDYsNiu24zYsdmHINi02K/ZhyDYr9ixINit2KfZgdi42YfZlCBVU0Ig2b7Yp9qpINiu2YjYp9mH2K8g2LTYry4g2KfbjNmGINi52YXZhCDYsdinINmG2YXbjOKAjtiq2YjYp9mGINio2LHar9ix2K/Yp9mG2K8hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDEzMTg5NTAyNzU0MzgzMCI+Itiq2YXYp9mFINin2LfZhNin2LnYp9iqINix2YjbjCDaqdin2LHYqiDYtNmF2Kcg2KfYsiDYqNuM2YYg2YXbjOKAjtix2YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiLigI/YqNmHINuM2qkg2YjYs9uM2YTZhyDYrNin2YbYqNuMIFVTQiDZiNi12YQg2LTYr9mHINin2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjIyOTA4NTkzOTk5ODM3MjAyNzEiPiLigI/YqNix2KfbjCDYs9in24zYsSDar9iy24zZhtmH4oCM2YfYp9uMIFVTQiDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiLigI/Yrdin2YHYuNmH2ZQgVVNCINmB2LHZhdiqINi02YjYr9ifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IuKAj9qp2KfYsdiqIFNEINmB2LHZhdiqINi02YjYr9ifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkzNDAxNjg1MzQyNTc2MTA3OCI+IuKAj9mH2YXZhyDZgdin24zZhOKAjNmH2KfbjCDYsNiu24zYsdmHINi02K/ZhyDYr9ixINit2KfZgdi42YfZlCBVU0Ig2b7Yp9qpINiu2YjYp9mH2K8g2LTYry4g2KfbjNmGINi52YXZhCDYsdinINmG2YXbjOKAjtiq2YjYp9mGINio2LHar9ix2K/Yp9mG2K8hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDEzMTg5NTAyNzU0MzgzMCI+IuKAj9iq2YXYp9mFINin2LfZhNin2LnYp9iqINix2YjbjCDaqdin2LHYqiDYtNmF2Kcg2KfYsiDYqNuM2YYg2YXbjOKAjtix2YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfYnV0dG9uX2Zvcm1hdCIgbXNnaWQ9IjQxMzEwNjQ1NjAxMjc0Nzg2OTUiPiLZgtin2YTYqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+Itin2KrYtdin2YQg2LHZgdi5INi524zYqCBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+Itio2LHYp9uMINi624zYsdmB2LnYp9mEINqp2LHYr9mGINin2LTaqdin2YQg2LLYr9in24zbjCBVU0Ig2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IuKAj9in2KrYtdin2YQg2LHZgdi5INi524zYqCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+IuKAj9io2LHYp9uMINi624zYsdmB2LnYp9mEINqp2LHYr9mGINin2LTaqdin2YQg2LLYr9in24zbjCBVU0Ig2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9pbnB1dF9tZXRob2QiIG1zZ2lkPSI0NjUzMzg3MzM2NzkxMjIyOTc4Ij4i2KfZhtiq2K7Yp9ioINix2YjYtCDZiNix2YjYr9uMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSI5MDkxNjUyMTU3NzIyNDk1MTE2Ij4i2KrZhti424zZhSDYsdmI2LTigIzZh9in24wg2YjYsdmI2K/bjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiLYtdmB2K3Zh+KAjNqp2YTbjNivINmB24zYstuM2qnbjCI8L3N0cmluZz4KQEAgLTEyNzEsMzQgKzEyODMsMzQgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX2FscGhhYmV0IiBtc2dpZD0iNTQzMzI3NTQ4NTQ5OTAzOTE5OSI+IiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmRpZGF0ZXNfc3R5bGUiIG1zZ2lkPSI0MzMzOTEzMDg5NjM3MDYyMjU3Ij48dT4i2K/Yp9mI2LfZhNio24zZhiI8L3U+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDk4MTYwMDUzNTE0Njg1NjAiPiLYotmF2KfYr9mHINiz2KfYstuMINit2KfZgdi42YfZlCBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ1NzYwMzQxODk3MDk5NDA1MCI+Itii2YXYp9iv2Ycg2qnYsdiv2YYg2qnYp9ix2KogU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDk4MTYwMDUzNTE0Njg1NjAiPiLigI/YotmF2KfYr9mHINiz2KfYstuMINit2KfZgdi42YfZlCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ1NzYwMzQxODk3MDk5NDA1MCI+IuKAj9ii2YXYp9iv2Ycg2qnYsdiv2YYg2qnYp9ix2KogU0QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4i2KjYsdix2LPbjCDYrti32KfZh9inLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3Nzg4MDQwNzQ1Njg2MjI5MzA3Ij4i2K3Yp9mB2LjZh9mUIFVTQiDYrtin2YTbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+Itqp2KfYsdiqIFNEINiu2KfZhNuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzg0MDEyMTA2NzQyNzI2OTUwMCI+Itit2KfZgdi42YfZlCBVU0Ig2K7Yp9mE24wg2KfYs9iqINuM2Kcg2K/Yp9ix2KfbjCDYs9uM2LPYqtmFINmB2KfbjNmEINm+2LTYqtuM2KjYp9mG24wg2YbYtNiv2Ycg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+Itqp2KfYsdiqIFNEINiu2KfZhNuMINin2LPYqiDbjNinINiv2KfYsdin24wg2LPbjNiz2KrZhSDZgdin24zZhCDZvti02KrbjNio2KfZhtuMINmG2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjIwOTAwNDY3Njk1MzI3MTM1NjMiPiLYrdin2YHYuNmH2ZQgVVNCINiu2LHYp9ioINi02K/ZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDEwNzIzOTA2MDE5MTAwMTg5Ij4i2qnYp9ix2KogU0Qg2KLYs9uM2Kgg2K/bjNiv2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+Itit2KfZgdi42YfZlCBVU0Ig2K7Ysdin2Kgg2KfYs9iqLiDYs9i524wg2qnZhtuM2K8g2KLZhtix2Kcg2K/ZiNio2KfYsdmHINmB2LHZhdiqINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE3NTM4OTg1Njc1MjU1NjgyNTMiPiLaqdin2LHYqiBTRCDYrtix2KfYqCDYp9iz2KouINiz2LnbjCDaqdmG24zYryDYotmG2LHYpyDYr9mI2KjYp9ix2Ycg2YHYsdmF2Kog2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE2NjE2ODMwMzEzMzA5NTEwNzMiPiLYrdin2YHYuNmH2ZQgVVNCINio2Ycg2LXZiNix2Kog2LrbjNix2YXZhtiq2LjYsdmHINis2K/YpyDYtNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+Itqp2KfYsdiqIFNEINio2Ycg2LXZiNix2Kog2LrbjNix2YXZhtiq2LjYsdmH4oCM2KfbjCDYrNiv2Kcg2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiLYp9iq2LXYp9mEINit2KfZgdi42YfZlCBVU0Ig2LHYpyDZgtio2YQg2KfYsiDYqNuM2LHZiNmGINii2YjYsdiv2YYg2YLYt9i5INqp2YbbjNivINiq2Kcg2LPYqNioINin2LIg2KjbjNmGINix2YHYqtmGINiv2KfYr9mH4oCM2YfYpyDZhti02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjAxODMyOTM3NDc0NDgyNDEiPiLaqdin2LHYqiBTRCDYsdinINmC2KjZhCDYp9iyINio24zYsdmI2YYg2KLZiNix2K/ZhiDYrNiv2Kcg2qnZhtuM2K8g2KrYpyDYs9io2Kgg2KfYsiDYqNuM2YYg2LHZgdiq2YYg2K/Yp9iv2YfigIzZh9inINmG2LTZiNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5Njc5NzM4OTMyNzAzNjAyMzAiPiLYrdin2YHYuNmH2ZQgVVNCINix2Kcg2YXbjOKAjNiq2YjYp9mG24zYryDYqNinINin24zZhdmG24wg2KzYr9inINqp2YbbjNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4i2qnYp9ix2KogU0Qg2LHYpyDZhduM4oCM2KrZiNin2YYg2KjYpyDYp9mF2YbbjNiqINqp2KfZhdmEINis2K/YpyDaqdix2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNDIxOTUzNjE2MDY0OTM1MzAiPiLYtNmF2Kcg2YXbjOKAjNiq2YjYp9mG24zYryDYrdin2YHYuNmH2ZQgVVNCINix2Kcg2KjYpyDYp9i32YXbjNmG2KfZhiDYrNiv2Kcg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2ODg0MTI3ODEzODM3NzYwNCI+Itqp2KfYsdiqIFNEINix2Kcg2YXbjOKAjNiq2YjYp9mG24zYryDYqNinINin2YXZhtuM2Kog2qnYp9mF2YQg2K7Yp9ix2Kwg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiLYrNiv2Kcg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiLaqdin2LHYqiBTRCDYrdiw2YEg2LTYr9mHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjkyMTEyNjE2MjU4MDU3NDE0MyI+Itit2KfZgdi42YfZlCBVU0Ig2KzYr9inINi02K8uINuM2qkg2LHYs9in2YbZhyDYrNiv24zYryDZhdiq2LXZhCDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiLaqdin2LHYqiBTRCDYrNiv2Kcg2LTYry4g24zaqSDaqdin2LHYqiDYrNiv24zYryDZiNin2LHYryDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzc4ODA0MDc0NTY4NjIyOTMwNyI+IuKAj9it2KfZgdi42YfZlCBVU0Ig2K7Yp9mE24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3ODA0Nzc4MzgyNDEyMTI5OTciPiLigI/aqdin2LHYqiBTRCDYrtin2YTbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc4NDAxMjEwNjc0MjcyNjk1MDAiPiLigI/Yrdin2YHYuNmH2ZQgVVNCINiu2KfZhNuMINin2LPYqiDbjNinINiv2KfYsdin24wg2LPbjNiz2KrZhSDZgdin24zZhCDZvti02KrbjNio2KfZhtuMINmG2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2NDEwNjU2NDE3ODY5MjM2MDQiPiLigI/aqdin2LHYqiBTRCDYrtin2YTbjCDYp9iz2Kog24zYpyDYr9in2LHYp9uMINiz24zYs9iq2YUg2YHYp9uM2YQg2b7YtNiq24zYqNin2YbbjCDZhti02K/ZhyDYp9iz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i4oCP2K3Yp9mB2LjZh9mUIFVTQiDYrtix2KfYqCDYtNiv2YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+IuKAj9qp2KfYsdiqIFNEINii2LPbjNioINiv24zYr9mHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE3OTU5MTc1NzgzOTUzMzMyODAiPiLigI/Yrdin2YHYuNmH2ZQgVVNCINiu2LHYp9ioINin2LPYqi4g2LPYuduMINqp2YbbjNivINii2YbYsdinINiv2YjYqNin2LHZhyDZgdix2YXYqiDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNzUzODk4NTY3NTI1NTY4MjUzIj4i4oCP2qnYp9ix2KogU0Qg2K7Ysdin2Kgg2KfYs9iqLiDYs9i524wg2qnZhtuM2K8g2KLZhtix2Kcg2K/ZiNio2KfYsdmHINmB2LHZhdiqINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNjYxNjgzMDMxMzMwOTUxMDczIj4i4oCP2K3Yp9mB2LjZh9mUIFVTQiDYqNmHINi12YjYsdiqINi624zYsdmF2YbYqti42LHZhyDYrNiv2Kcg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NzIxNTI4ODI2MDQ0MDc4MzciPiLigI/aqdin2LHYqiBTRCDYqNmHINi12YjYsdiqINi624zYsdmF2YbYqti42LHZh+KAjNin24wg2KzYr9inINi02K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MzI5ODQ4ODE5ODY1NTk0MjQxIj4i4oCP2KfYqti12KfZhCDYrdin2YHYuNmH2ZQgVVNCINix2Kcg2YLYqNmEINin2LIg2KjbjNix2YjZhiDYotmI2LHYr9mGINmC2LfYuSDaqdmG24zYryDYqtinINiz2KjYqCDYp9iyINio24zZhiDYsdmB2KrZhiDYr9in2K/Zh+KAjNmH2Kcg2YbYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjYwMTgzMjkzNzQ3NDQ4MjQxIj4i4oCP2qnYp9ix2KogU0Qg2LHYpyDZgtio2YQg2KfYsiDYqNuM2LHZiNmGINii2YjYsdiv2YYg2KzYr9inINqp2YbbjNivINiq2Kcg2LPYqNioINin2LIg2KjbjNmGINix2YHYqtmGINiv2KfYr9mH4oCM2YfYpyDZhti02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTY3OTczODkzMjcwMzYwMjMwIj4i4oCP2K3Yp9mB2LjZh9mUIFVTQiDYsdinINmF24zigIzYqtmI2KfZhtuM2K8g2KjYpyDYp9uM2YXZhtuMINis2K/YpyDaqdmG24zYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjcyOTgwMTEzMDc5MDYxNjIwMCI+IuKAj9qp2KfYsdiqIFNEINix2Kcg2YXbjOKAjNiq2YjYp9mGINio2Kcg2KfZhdmG24zYqiDaqdin2YXZhCDYrNiv2Kcg2qnYsdivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4i4oCP2LTZhdinINmF24zigIzYqtmI2KfZhtuM2K8g2K3Yp9mB2LjZh9mUIFVTQiDYsdinINio2Kcg2KfYt9mF24zZhtin2YYg2KzYr9inINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiLigI/aqdin2LHYqiBTRCDYsdinINmF24zigIzYqtmI2KfZhtuM2K8g2KjYpyDYp9mF2YbbjNiqINqp2KfZhdmEINiu2KfYsdisINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NDg2Mzc3MjMwMTQwMjI3NjUxIj4i4oCP2KzYr9inINqp2LHYr9mGINit2KfZgdi42YfZlCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTAyNTE4MDMwNDA0MzgxMzE4Ij4i4oCP2qnYp9ix2KogU0Qg2K3YsNmBINi02K/ZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjY5MjExMjYxNjI1ODA1NzQxNDMiPiLigI/Yrdin2YHYuNmH2ZQgVVNCINis2K/YpyDYtNivLiDbjNqpINix2LPYp9mG2Ycg2KzYr9uM2K8g2YXYqti12YQg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzODcwMTIwNjUyOTgzNjU5NjQxIj4i4oCP2qnYp9ix2KogU0Qg2KzYr9inINi02K8uINuM2qkg2qnYp9ix2Kog2KzYr9uM2K8g2YjYp9ix2K8g2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiLZgdi52KfZhNuM2KrbjCDZhdi32KfYqNmCINio2Kcg2KfbjNmGINmF2YjYsdivINuM2KfZgdiqINmG2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSI4Nzg3MzUyMDc0MzI2NzQ4ODkyIj4i2KjZh+KAjNix2YjYstix2LPYp9mG24wg2KLZhdin2LEg2YXYsdio2YjYtyDYqNmHINin2LPYqtmB2KfYr9mHINmF2KTZhNmB2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYotmF2KfYsSDYrNmF2LnigI7YotmI2LHbjCDYtNiv2Ycg2qnYp9ix2KjYsdivINmC2LfYudmHINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYotmF2KfYsSDYrNmF2LnigI7YotmI2LHbjCDYtNiv2Ycg2qnYp9ix2KjYsdivINmC2LfYudmHINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+Itqp2b7bjCDaqdix2K/ZhiDZhdit2KrZiNinIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LPYsdmI24zYsyDZvtuM2LTigIzZgdix2LYg2LHYpyDZgdix2KfYrtmI2KfZhtuMINqp2YbYryDZiCDZhdit2KrZiNinINix2Kcg2qnZvtuMINqp2YbYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM5MDY5NzEyNDI4ODMxNzgzMSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiz2LHZiNuM2LMg2b7bjNi04oCM2YHYsdi2INix2Kcg2YHYsdin2K7ZiNin2YbbjCDaqdmG2K8g2Ygg2YXYrdiq2YjYpyDYsdinINqp2b7bjCDaqdmG2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhdmI2LHYryDZhtuM2KfYsiDZhtuM2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JvdXRlX21lZGlhX291dHB1dCIgbXNnaWQ9IjE2NDIwMjQ0NTU3NTA0MTQ2OTQiPiLYqti524zbjNmGINmF2LPbjNixINiu2LHZiNis24wg2LHYs9in2YbZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JvdXRlX21lZGlhX291dHB1dCIgbXNnaWQ9IjQ5MzI4MTg3NDk1NDcyNDQzNDYiPiLYqNmHINuM2qkg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYrtix2YjYrNuMINix2LPYp9mG2Ycg2LHYpyDYqNmHINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDYrtin2LHYrNuMINiv24zar9ixINiq2LnbjNuM2YYg2YXYs9uM2LEg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNzU2NTU1MjIzNzk3NzgxNTA0NyI+Itiv2LPYqtix2LPbjCDYqNmHINmB2LbYp9uMINiw2K7bjNix2YfigIzYs9in2LLbjCDYp9uM2YXZhiDZhdit2KfZgdi4INqp2YTbjNivIjwvc3RyaW5nPgpAQCAtMTMyOSwxMyArMTM0MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4i2KrYtdmI24zYsSDYstmF24zZhtmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i2KrYutuM24zYsSDYqti12YjbjNixINiy2YXbjNmG2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLYtNmG2YjZhtiv2Ycg2KfYudmE2KfZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOINmB2LnYp9mEINi02K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4g2KrZiNiz2LcgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INmB2LnYp9mEINi02K/ZhyDYp9iz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IuKAj1ZQTiDZgdi52KfZhCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i4oCPVlBOINiq2YjYs9i3IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDZgdi52KfZhCDYtNiv2Ycg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i2KjYsdin24wg2YXYr9uM2LHbjNiqINi02KjaqdmHINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dF9sb25nIiBtc2dpZD0iNjQwNzM1MTAwNjI0OTE3NDQ3MyI+Itio2YcgPHhsaWZmOmcgaWQ9IlNFU1NJT04iPiVzPC94bGlmZjpnPiDZiNi12YQg2LTYry4g2KjYsdin24wg2YXYr9uM2LHbjNiqINi02KjaqdmHINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiLYr9ixINit2KfZhCDYp9iq2LXYp9mEIFZQTiDZh9mF24zYtNmHINmB2LnYp9mE4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiJWUE4g2YfZhduM2LTZhyDZgdi52KfZhCDZhdiq2LXZhCDYtNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Vycm9yIiBtc2dpZD0iNjAwOTI0OTgxNDAzNDcwODE3NSI+Itiu2LfYp9uMIFZQTiDZh9mF24zYtNmHINmB2LnYp9mEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDQzNDM4OTY0NDQwOTYwNzQ1Ij4i4oCP2K/YsSDYrdin2YQg2KfYqti12KfZhCBWUE4g2YfZhduM2LTZhyDZgdi52KfZhOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0ZWQiIG1zZ2lkPSI4MjAyNjc5Njc0ODE5MjEzOTMxIj4i4oCPVlBOINmH2YXbjNi02Ycg2YHYudin2YQg2YXYqti12YQg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9lcnJvciIgbXNnaWQ9IjYwMDkyNDk4MTQwMzQ3MDgxNzUiPiLigI/Yrti32KfbjCBWUE4g2YfZhduM2LTZhyDZgdi52KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25maWciIG1zZ2lkPSI2NDE1ODk5MTUwNjcxNTM3OTcwIj4i2KjYsdin24wg2b7bjNqp2LHYqNmG2K/bjCDZhNmF2LMg2qnZhtuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1cGxvYWRfZmlsZSIgbXNnaWQ9IjI4OTc5NTcxNzIzNjY3MzA0MTYiPiLYp9mG2KrYrtin2Kgg2YHYp9uM2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19maWxlX2Nob3NlbiIgbXNnaWQ9IjYzNjM2NDg1NjIxNzA3NTk0NjUiPiLZh9uM2oYg2YHYp9uM2YTbjCDYp9mG2KrYrtin2Kgg2YbYtNivIjwvc3RyaW5nPgpAQCAtMTM1OSwxOCArMTM3MSwxOCBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ2NDE4NzI3OTcwNjc2MDkxNzciPiI8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiDYp9iyIDx4bGlmZjpnIGlkPSJUT1RBTCI+JWQ8L3hsaWZmOmc+IjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21vZGVfZG9uZSIgbXNnaWQ9IjcyMTc1ODE2NDA0NjE5MjIyODkiPiLYp9mG2KzYp9mFINi02K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MjM4MTA0NDg1MDc2MTI3NDYiPiLYr9ixINit2KfZhCDZhNi62Ygg2YbYtdioINit2KfZgdi42YfZlCBVU0IuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMyNzg5NDk5ODQwOTUzNzE5MCI+Itiv2LEg2K3Yp9mEINmE2LrZiCDZhti12Kgg2qnYp9ix2KogU0QuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiLYr9ixINit2KfZhCDZvtin2qkg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4i2K/YsSDYrdin2YQg2b7Yp9qpINqp2LHYr9mGINqp2KfYsdiqIFNELi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiLZvtin2qkg2qnYsdiv2YYg2YXYrdmEINiw2K7bjNix2YcgIFVTQiDZhdmF2qnZhiDZhtuM2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzE1MjQ4Njk2NjQ0NTEwOTM1Ij4i2b7Yp9qpINqp2LHYr9mGINqp2KfYsdiqIFNEINmF2YXaqdmGINmG24zYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2JhZF9yZW1vdmFsIiBtc2dpZD0iNzk2MDg2NDA2MTAxNjYwMzI4MSI+Itqp2KfYsdiqIFNEINmC2KjZhCDYp9iyINmC2LfYuSDYp9iq2LXYp9mEINin2LIg2K/Ys9iq2q/Yp9mHINiu2KfYsdisINi02K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDE4MTg4NzIwMDA5NTY5NjkzIj4i2K3Yp9mB2LjZh9mUIFVTQiDYp9qp2YbZiNmGINiv2LEg2K3Yp9mEINio2LHYsdiz24wg2LTYr9mGINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMzQ3NjI1MDM5MDQ4Mjc0ODEiPiLaqdin2LHYqiBTRCDYr9ixINit2KfZhCDYrdin2LbYsSDYr9ixINit2KfZhCDYqNix2LHYs9uMINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yZW1vdmVkIiBtc2dpZD0iNzAwMTUyNjkwNTA1Nzk1MjA5NyI+Itqp2KfYsdiqIFNEINit2LDZgSDYtNiv2Ycg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkyMzgxMDQ0ODUwNzYxMjc0NiI+IuKAj9iv2LEg2K3Yp9mEINmE2LrZiCDZhti12Kgg2K3Yp9mB2LjZh9mUIFVTQi4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4i4oCP2K/YsSDYrdin2YQg2YTYutmIINmG2LXYqCDaqdin2LHYqiBTRC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDUyMTU3MzMyMTUyNDM0MDA1OCI+IuKAj9iv2LEg2K3Yp9mEINm+2KfaqSDaqdix2K/ZhiDYrdin2YHYuNmH2ZQgVVNCLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1OTY5ODg4NzU1MDcwNDMwNDIiPiLigI/Yr9ixINit2KfZhCDZvtin2qkg2qnYsdiv2YYg2qnYp9ix2KogU0QuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjI5OTc2OTU2MzYyNDc3Njk0OCI+IuKAj9m+2KfaqSDaqdix2K/ZhiDZhdit2YQg2LDYrtuM2LHZhyAgVVNCINmF2YXaqdmGINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMTUyNDg2OTY2NDQ1MTA5MzUiPiLigI/Zvtin2qkg2qnYsdiv2YYg2qnYp9ix2KogU0Qg2YXZhdqp2YYg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4i4oCP2qnYp9ix2KogU0Qg2YLYqNmEINin2LIg2YLYt9i5INin2KrYtdin2YQg2KfYsiDYr9iz2Krar9in2Ycg2K7Yp9ix2Kwg2LTYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiLigI/Yrdin2YHYuNmH2ZQgVVNCINin2qnZhtmI2YYg2K/YsSDYrdin2YQg2KjYsdix2LPbjCDYtNiv2YYg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMzNDc2MjUwMzkwNDgyNzQ4MSI+IuKAj9qp2KfYsdiqIFNEINiv2LEg2K3Yp9mEINit2KfYttixINiv2LEg2K3Yp9mEINio2LHYsdiz24wg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4i4oCP2qnYp9ix2KogU0Qg2K3YsNmBINi02K/ZhyDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjU4MzA4MTQzNDkyNTA4MzQyMjUiPiLYrdin2YHYuNmHINiv2LEg2K3Yp9mEINit2KfYttixINiq2YjYs9i3INix2KfbjNin2YbZhyDYr9uM2q/YsduMINin2LPYqtmB2KfYr9mHINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcwNjEzMDU2ODEzMzU0MDQzNSI+Itqp2KfYsdiqIFNEINiv2LEg2K3Yp9mEINit2KfYttixINiq2YjYs9i3INuM2qkg2LHYp9uM2KfZhtmHINiv2LEg2K3Yp9mEINin2LPYqtmB2KfYr9mHINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzA2MTMwNTY4MTMzNTQwNDM1Ij4i4oCP2qnYp9ix2KogU0Qg2K/YsSDYrdin2YQg2K3Yp9i22LEg2KrZiNiz2Lcg24zaqSDYsdin24zYp9mG2Ycg2K/YsSDYrdin2YQg2KfYs9iq2YHYp9iv2Ycg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Vua25vd25fc3RhdGUiIG1zZ2lkPSI3MjkxOTI3ODIxOTcyOTAzODUiPiLYsdiz2KfZhtmHINiu2KfYsdis24wg2K/YsSDYrdin2YTYqiDZhtin2LTZhtin2LMg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlIiBtc2dpZD0iMTc3ODY4NjYxODIzMDAxMTk2NCI+Itin2LTYqtix2KfaqeKAjNqv2LDYp9ix24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmaW5kIiBtc2dpZD0iNDgwODI3MDkwMDMyMjk4NTk2MCI+ItuM2KfZgdiq2YYiPC9zdHJpbmc+CkBAIC0xMzgzLDcgKzEzOTUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZZZXMiIG1zZ2lkPSIyMzQ2NTY2MDcyODY3MjEzNTYzIj4i2KjZhNmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiLYrtuM2LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXMiIG1zZ2lkPSI1Mjk2MzIxODUwNjYyNzQ2ODkwIj4i2KfYsiDYrdivINmF2KzYp9iyINit2LDZgSDZgdix2KfYqtixINix2YHYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlc19kZXNjIiBtc2dpZD0iNDk2NTUxNjcxMDA4Njk0MjQ1Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl9PRl9ERUxFVEVEX0lURU1TIj4lMSRkPC94bGlmZjpnPiDZhdmI2LHYryDYrdiw2YEg2LTYr9mHINio2LHYp9uMIDx4bGlmZjpnIGlkPSJUWVBFX09GX1NZTkMiPiUyJHM8L3hsaWZmOmc+2Iwg2K3Ys9in2KggPHhsaWZmOmcgaWQ9IkFDQ09VTlRfTkFNRSI+JTMkczwveGxpZmY6Zz4g2YjYrNmI2K8g2K/Yp9ix2K8uINmF24zigI7YrtmI2KfZh9uM2K8g2obZhyDaqdin2LHbjCDYp9mG2KzYp9mFINiv2YfbjNiv2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+IuKAjzx4bGlmZjpnIGlkPSJOVU1CRVJfT0ZfREVMRVRFRF9JVEVNUyI+JTEkZDwveGxpZmY6Zz4g2YXZiNix2K8g2K3YsNmBINi02K/ZhyDYqNix2KfbjCA8eGxpZmY6ZyBpZD0iVFlQRV9PRl9TWU5DIj4lMiRzPC94bGlmZjpnPtiMINit2LPYp9ioIDx4bGlmZjpnIGlkPSJBQ0NPVU5UX05BTUUiPiUzJHM8L3hsaWZmOmc+INmI2KzZiNivINiv2KfYsdivLiDZhduM4oCO2K7ZiNin2YfbjNivINqG2Ycg2qnYp9ix24wg2KfZhtis2KfZhSDYr9mH24zYr9ifIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3luY19yZWFsbHlfZGVsZXRlIiBtc2dpZD0iMjU3MjYwMDEwMzEyMjU5NjI0MyI+Itit2LDZgSDZhdmI2KfYsdivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3luY191bmRvX2RlbGV0ZXMiIG1zZ2lkPSIyOTQxMzE3MzYwNjAwMzM4NjAyIj4i2YTYutmIINmF2YjYp9ix2K8g2K3YsNmBINi02K/ZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5bmNfZG9fbm90aGluZyIgbXNnaWQ9IjM3NDM3NjQ3NDA0MzA4MjE4NDUiPiLYp9qp2YbZiNmGINqp2KfYsduMINin2YbYrNin2YUg2YbYtNmI2K8iPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i2KfZhtiq2K7Yp9ioINio2LHZhtin2YXZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Itix2KfZh+KAjNin2YbYr9in2LLbjCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+INin2YbYrNin2YUg2YbYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i2KfYtNiq2LHYp9qp4oCM2q/YsNin2LHbjCDYqNinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+Itin2LTYqtix2KfaqeKAjNqv2LDYp9ix24wg2KjYpyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+Itin2YfYsdmFINqp2YbYqtix2YQg2K3Ysdqp2KouINmE2YXYsyDaqdix2K/ZhyDZiCDZhtqv2YfYr9in2LHbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLZhNi62LLYp9mG2K/ZhiDYqNmHINio2KfZhNinINio2LHYp9uMIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLZhNi62LLYp9mG2K/ZhiDYqNmHINm+2KfbjNuM2YYg2KjYsdin24wgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+ItmE2LrYstin2YbYr9mGINio2Ycg2obZviDYqNix2KfbjCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+ItmE2LrYstin2YbYr9mGINio2Ycg2LHYp9iz2Kog2KjYsdin24wgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i2KjYp9iy2qnYsdiv2YYg2YLZgdmEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+Itiv2YjYsdio24zZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLYs9in2qnYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLYtdiv2Kcg2LHZiNi02YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Itis2LPYqtis2YgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLYqNix2KfbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhNiMINio2YTYutiy2KfZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+Itio2LHYp9uMINi02YbbjNiv2YYg2qnZhNuM2K/Zh9in24wg2q/YsNix2YjYp9qY2Ycg2qnZhyDYqNinINi12K/Yp9uMINio2YTZhtivINiu2YjYp9mG2K/ZhyDZhduM4oCM2LTZiNmG2K/YjCDZh9iv2LPYqiDYsdinINmI2LXZhCDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLZhtmC2LfZhy4iPC9zdHJpbmc+CkBAIC0xNDM1LDIwICsxNDM5LDIwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNzk2NTk4NDM2MDkwMzY5MzkwMyI+IuKAjiUxJHMsICUyJHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfc3VidGl0bGVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNjk4NTU0NjUzMDQ3MTc4MDcyNyI+IuKAjiUxJHMsICUyJHMsICUzJHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX2ludGVybmFsIiBtc2dpZD0iNDg5MTkxNjgzMzY1NzkyOTI2MyI+Itit2KfZgdi42YfZlCDYr9in2K7ZhNuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9zZF9jYXJkIiBtc2dpZD0iMzI4Mjk0ODg2MTM3ODI4Njc0NSI+Itqp2KfYsdiqIFNEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2IiIG1zZ2lkPSIzMDE3OTU0MDU5NTM4NTE3Mjc4Ij4i2K3Yp9mB2LjZh9mUIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2Vfc2RfY2FyZCIgbXNnaWQ9IjMyODI5NDg4NjEzNzgyODY3NDUiPiLigI/aqdin2LHYqiBTRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IuKAj9it2KfZgdi42YfZlCBVU0IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJleHRyYWN0X2VkaXRfbWVudV9idXR0b24iIG1zZ2lkPSI4OTQwNDc4NzMwNDk2NjEwMTM3Ij4i2YjbjNix2KfbjNi0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTk1NTYzODg2MjEyMjIzMjM0MiI+ItmH2LTYr9in2LEg2YXbjNiy2KfZhiDYp9iz2KrZgdin2K/ZhyDYp9iyINiv2KfYr9mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX2JvZHkiIG1zZ2lkPSIyODE0NjczNTUxNDcxOTY5OTU0Ij4i2KjYsdin24wg2YXYtNin2YfYr9mHINqp2KfYsdio2LHYryDZiCDYqtmG2LjbjNmF2KfYqiDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF90aXRsZSIgbXNnaWQ9IjcwOTMzMzQ0MTk1MTg3MDY2ODYiPiLYr9in2K/Zh+KAjNmH2KfbjCAyRy0zRyDYutuM2LHZgdi52KfZhCDYtNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF90aXRsZSIgbXNnaWQ9Ijc2MzY0ODk0MzY4MTk0NzA3NjEiPiLYr9in2K/ZhyA0RyDYutuM2LEg2YHYudin2YQg2LTYr9mHINin2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfdGl0bGUiIG1zZ2lkPSI3MDkzMzM0NDE5NTE4NzA2Njg2Ij4i4oCP2K/Yp9iv2YfigIzZh9in24wgMkctM0cg2LrbjNix2YHYudin2YQg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfdGl0bGUiIG1zZ2lkPSI3NjM2NDg5NDM2ODE5NDcwNzYxIj4i4oCP2K/Yp9iv2YcgNEcg2LrbjNixINmB2LnYp9mEINi02K/ZhyDYp9iz2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF90aXRsZSIgbXNnaWQ9Ijc4Njk0MDI1MTkzOTE2MzE4ODQiPiLYr9in2K/Zh+KAjNmH2KfbjCDYqtmE2YHZhiDZh9mF2LHYp9mHINi624zYsdmB2LnYp9mEINi02K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfdGl0bGUiIG1zZ2lkPSI4OTkyMTU0NzM2NDQxMjg0ODY1Ij4i2K/Yp9iv2YfigIzZh9in24wgV2ktRmkg2LrbjNix2YHYudin2YQg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiLigI/Yr9in2K/Zh+KAjNmH2KfbjCBXaS1GaSDYutuM2LHZgdi52KfZhCDYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+Itio2LHYp9uMINmB2LnYp9mEINqp2LHYr9mGINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI3MDI2NzM5MTIxMTM4MDA1MjMxIj4i2KfYt9mE2KfYudin2KogMkctM0cg2KjbjNi0INin2LIg2K3YryDZhdis2KfYsiDYp9iz2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIxMTA2NTYyNzc5MzExMjA5MDM5Ij4i2KjbjNi0INin2LIg2K3YryDZhdis2KfYsiA0RyDYp9iz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI3MDI2NzM5MTIxMTM4MDA1MjMxIj4i4oCP2KfYt9mE2KfYudin2KogMkctM0cg2KjbjNi0INin2LIg2K3YryDZhdis2KfYsiDYp9iz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIxMTA2NTYyNzc5MzExMjA5MDM5Ij4i4oCP2KjbjNi0INin2LIg2K3YryDZhdis2KfYsiA0RyDYp9iz2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMjc5MjQwNTcyMTY1NDEyMTY4Ij4i2K/Yp9iv2YfigIzZh9in24wg2KrZhNmB2YYg2YfZhdix2KfZhyDYp9iyINmF2YLYr9in2LEg2YXYrNin2LIg2KjbjNi02KrYsSDYp9iz2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9Ijg3NDM4NTYwMDYzODQ4MjU5NzQiPiLYp9iyINmF2K3Yr9mI2K/ZhyDZhdis2KfYsiDYr9in2K/Zh+KAjNmH2KfbjCBXaS1GaSDYqNuM2LTYqtixINi02K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9Ijg3NDM4NTYwMDYzODQ4MjU5NzQiPiLigI/Yp9iyINmF2K3Yr9mI2K/ZhyDZhdis2KfYsiDYr9in2K/Zh+KAjNmH2KfbjCBXaS1GaSDYqNuM2LTYqtixINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X3Nub296ZWRfYm9keSIgbXNnaWQ9IjcwMzU0OTAyNzgyOTg0NDE3NjciPiI8eGxpZmY6ZyBpZD0iU0laRSI+JXM8L3hsaWZmOmc+INin2LIg2K3YryDYqti524zbjNmGINi02K/ZhyDYqNuM2LTYqtixINi02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX3RpdGxlIiBtc2dpZD0iNTk2NTE1NzM2MTAzNjMyMTkxNCI+Itiv2KfYr9mHINm+2LPigIzYstmF24zZhtmHINmF2K3Yr9mI2K8g2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+Itio2LHYp9uMINit2LDZgSDZhdit2K/ZiNiv24zYqtiMINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+CkBAIC0xNDY0LDggKzE0NjgsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZXhwaXJlc19vbiIgbXNnaWQ9IjM2NzYyNDI5NDk5MTU5NTk4MjEiPiLYqtin2LHbjNiuINin2YbZgti22Kc6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VyaWFsX251bWJlciIgbXNnaWQ9Ijc1ODgxNDA2NzY2MDg2MjQ5MyI+Iti02YXYp9ix2YfZlCDYs9ix24zYp9mEOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50cyIgbXNnaWQ9IjQ1MTYwMTk2MTk4NTA3NjMwNDkiPiLYp9ir2LEg2KfZhtqv2LTYqjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGEyNTZfZmluZ2VycHJpbnQiIG1zZ2lkPSI0MzkxMjcxMjg2NDc3Mjc5MjYzIj4i2KfYq9ixINin2Ybar9i02KogU0hBLTI1NjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+Itin2KvYsSDYp9mG2q/YtNiqIFNIQS0xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhMjU2X2ZpbmdlcnByaW50IiBtc2dpZD0iNDM5MTI3MTI4NjQ3NzI3OTI2MyI+IuKAj9in2KvYsSDYp9mG2q/YtNiqIFNIQS0yNTY6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhMV9maW5nZXJwcmludCIgbXNnaWQ9Ijc5MzAzMzAyMzUyNjk0MDQ1ODEiPiLigI/Yp9ir2LEg2KfZhtqv2LTYqiBTSEEtMSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19zZWVfYWxsIiBtc2dpZD0iNDI5MjU2OTM4Mzk3NjYzNjIwMCI+ItmF2LTYp9mH2K/Zh9mUINmH2YXZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjQ3MTAwMTM4NjQ5NzQwNDA2MTUiPiLYp9mG2KrYrtin2Kgg2YHYudin2YTbjNiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfYWN0aW9uX3Byb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI1MjQ3Njg0NDM1OTc5MTQ5MjE2Ij4i2KfYtNiq2LHYp9qp4oCM2q/YsNin2LHbjCDYqNinIjwvc3RyaW5nPgpAQCAtMTQ4MywyMCArMTQ4NywyNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+Itiz24zYs9iq2YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+Itio2YTZiNiq2YjYq+KAjNmH2KfbjCDYtdmI2KrbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i2LXZgdit2Ycg2YbZhdin24zYtCDYqNuM4oCM2LPbjNmFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+Itin2YbYrNin2YUg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Itiu2LHZiNis24wg2LHYs9in2YbZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i2KjYsdmC2LHYp9ix24wg2KfYsdiq2KjYp9i3INio2Kcg2K/Ys9iq2q/Yp9mHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4i2YHYsdiz2KrYp9iv2YYg2LXZgdit2Ycg2YbZhdin24zYtCDYqNmHINiv2LPYqtqv2KfZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Itiv2LEg2K3Yp9mEINis2LPYqtis2Ygg2KjYsdin24wg2K/Ys9iq2q/Yp9mH4oCM2YfYpy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+Itiq2YbYuNuM2YXYp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+ItmC2LfYuSDYp9ix2KrYqNin2LciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i2K/YsSDYrdin2YQg2KfYs9qp2YYg2qnYsdiv2YbigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLYr9ix2K3Yp9mEINin2KrYtdin2YTigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+Itiv2LEg2K/Ys9iq2LHYsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNjczOTg5OTk2MjY4MTg4NjQwMSI+Itiv2LEg2K/Ys9iq2LHYsyDZhtuM2LPYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19pbl91c2UiIG1zZ2lkPSI0NTMzNzg2MDMxMDkwMTk4MDYzIj4i2K/YsSDYrdin2YQg2KfYs9iq2YHYp9iv2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfYnVpbHRfaW5fZGlzcGxheV9uYW1lIiBtc2dpZD0iMjU4MzEzNDI5NDI5MjU2Mzk0MSI+Iti12YHYrdmHINmG2YXYp9uM2LQg2KfYsiDYrtmI2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfaGRtaV9kaXNwbGF5X25hbWUiIG1zZ2lkPSIxNTU1MjY0NTU5MjI3NDcwMTA5Ij4i2LXZgdit2YcgSERNSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9oZG1pX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjE1NTUyNjQ1NTkyMjc0NzAxMDkiPiLigI/YtdmB2K3ZhyBIRE1JIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+ItmH2YXZvtmI2LTYp9mG24wgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4i2Iwg2KfZhdmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLZhtmF2KfbjNi02q/YsSDYqNuM4oCM2LPbjNmFINmF2KrYtdmEINin2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLYp9uM2YYg2LXZgdit2Ycg2K/YsSDYrdin2YQg2YbZhdin24zYtCDYr9ixINiv2LPYqtqv2KfZhyDYr9uM2q/YsduMINin2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiLYr9ix2K3Yp9mEINmB2LHYs9iq2KfYr9mGINi12YHYrdmHINmG2YXYp9uM2LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLYr9ix2K3Yp9mEINin2KrYtdin2YQg2KjZhyA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLYr9ix2K3Yp9mEINmB2LHYs9iq2KfYr9mGINi12YHYrdmHINmG2YXYp9uM2LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+Itio2YcgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+INmF2KrYtdmEINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i2YLYt9i5INin2KrYtdin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Itiq2YXYp9izINin2LbYt9ix2KfYsduMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i2KfZhNqv2Ygg2LHYpyDZgdix2KfZhdmI2LQg2qnYsdiv2YfigIzYp9uM2K8iPC9zdHJpbmc+CkBAIC0xNTE3LDEzICsxNTI3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiLZvtuM2YYg2qnYryDYqNin24zYryDbuCDYudiv2K8g24zYpyDYqNuM2LTYqtixINio2KfYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Itm+24zZhiDaqdivINi12K3bjNitINix2Kcg2K/ZiNio2KfYsdmHINmI2KfYsdivINqp2YbbjNivLiDYqtmE2KfYtOKAjNmH2KfbjCDZhdqp2LHYsSDYqNmH4oCM2LfZiNixINiv2KfYptmFINiz24zZhSDaqdin2LHYqiDYsdinINi624zYsdmB2LnYp9mEINiu2YjYp9mH2K8g2qnYsdivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLZvtuM2YYg2qnYr9mH2Kcg2YXZhti32KjZgiDZhtuM2LPYqtmG2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLYqtmE2KfYtOKAjtmH2KfbjCDYstuM2KfYr9uMINio2LHYp9uMINqp2LTbjNiv2YYg2KfZhNqv2Ygg2LXZiNix2Kog2q/YsdmB2KrZhyDYp9iz2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i2KjYsdin24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YTYjCDYqNinINit2LPYp9ioIEdvb2dsZSDYrtmI2K8g2YjYp9ix2K8g2LPbjNiz2KrZhSDYtNmI24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLigI/YqtmE2KfYtOKAjtmH2KfbjCDYstuM2KfYr9uMINio2LHYp9uMINqp2LTbjNiv2YYg2KfZhNqv2Ygg2LXZiNix2Kog2q/YsdmB2KrZhyDYp9iz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4oCP2KjYsdin24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YTYjCDYqNinINit2LPYp9ioIEdvb2dsZSDYrtmI2K8g2YjYp9ix2K8g2LPbjNiz2KrZhSDYtNmI24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+ItmG2KfZhSDaqdin2LHYqNix24wgKNin24zZhduM2YQpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLar9iw2LHZiNin2pjZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i2YjYsdmI2K8g2KjZhyDYs9uM2LPYqtmFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLZhtin2YUg2qnYp9ix2KjYsduMINuM2Kcg2q/YsNix2YjYp9qY2Ycg2YbYp9mF2LnYqtio2LEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+ItmG2KfZhSDaqdin2LHYqNix24wg24zYpyDar9iw2LHZiNin2pjZhyDYrtmI2K8g2LHYpyDZgdix2KfZhdmI2LQg2qnYsdiv24zYr9ifXG7Yp9iyICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDYqNin2LLYr9uM2K8g2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuKAj9mG2KfZhSDaqdin2LHYqNix24wg24zYpyDar9iw2LHZiNin2pjZhyDYrtmI2K8g2LHYpyDZgdix2KfZhdmI2LQg2qnYsdiv24zYr9ifXG7Yp9iyICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDYqNin2LLYr9uM2K8g2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i2K/Ysdit2KfZhCDYqNix2LHYs9uMINit2LPYp9ioLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLZvtuM2YYg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDYqtin24zZviDaqdix2K/bjNivLiBcblxu2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i2q/YsNix2YjYp9qY2Ycg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDYqtin24zZviDaqdix2K/bjNivLiBcblxu2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CkBAIC0xNTMyLDggKzE1NDIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+Iti02YXYpyDYqNmHINin2LTYqtio2KfZhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfZgtiv2KfZhSDYqNmHINio2KfYsiDaqdix2K/ZhiDZgtmB2YQg2KrZhNmB2YYg2qnYsdiv2YfigIzYp9uM2K8uINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YIg2K/bjNqv2LHYjCDYqtmE2YHZhiDYqNmHINm+24zYtOKAjNmB2LHYtiDaqdin2LHYrtin2YbZhyDYqNin2LLZhti02KfZhtuMINmF24zigIzYtNmI2K8g2Ygg2KrZhdin2YUg2K/Yp9iv2YfigIzZh9in24wg2qnYp9ix2KjYsSDYp9iyINiv2LPYqiDYrtmI2KfZh9ivINix2YHYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+Iti02YXYpyDYqNmHINin2LTYqtio2KfZhyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2YLYr9in2YUg2KjZhyDYqNin2LIg2qnYsdiv2YYg2YLZgdmEINix2KfbjNin2YbZhyDZhNmI2K3bjCDaqdix2K/Zh+KAjNin24zYry4g2LHYp9uM2KfZhtmHINmE2YjYrduMINin2qnZhtmI2YYg2KjZhyDZvtuM2LTigIzZgdix2LYg2qnYp9ix2K7Yp9mG2Ycg2KjYp9iy2YbYtNin2YbbjCDZhduM4oCM2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+Iti02YXYpyDYqNmHINin2LTYqtio2KfZhyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2YLYr9in2YUg2KjZhyDYqNin2LIg2qnYsdiv2YYg2YLZgdmEINiq2YTZgdmGINqp2LHYr9mH4oCM2KfbjNivLiDYp9uM2YYg2KrZhNmB2YYg2KfaqdmG2YjZhiDYqNmHINm+24zYtOKAjNmB2LHYtiDaqdin2LHYrtin2YbZhyDYqNin2LLZhti02KfZhtuMINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+Iti02YXYpyDYp9mE2q/ZiNuMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINiu2YjYryDYsdinIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9i02KrYqNin2Ycg2qnYtNuM2K/Zh+KAjtin24zYry4g2KjYudivINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmC2Iwg2KfYsiDYtNmF2Kcg2K7ZiNin2LPYqtmHINmF24zigI7YtNmI2K8g2qnZhyDYqNinINin2LPYqtmB2KfYr9mHINin2LIg24zaqSDYrdiz2KfYqCDYp9uM2YXbjNmEINmC2YHZhCDYsdin24zYp9mG2Ycg2YTZiNit24wg2K7ZiNivINix2Kcg2KjYp9iyINqp2YbbjNivLlxuXG4g2YTYt9mB2KfZiyDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCM2KfbjNivLiDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmC2Iwg2KfYsiDYtNmF2Kcg2K7ZiNin2LPYqtmHINmF24zigI7YtNmI2K8g2qnZhyDYqNinINin2LPYqtmB2KfYr9mHINin2LIg24zaqSDYrdiz2KfYqCDYp9uM2YXbjNmEINmC2YHZhCDYqtmE2YHZhiDYrtmI2K8g2LHYpyDYqNin2LIg2qnZhtuM2K8uXG5cbiDZhNi32YHYp9mLINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuKAj9i02YXYpyDYp9mE2q/ZiNuMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINiu2YjYryDYsdinIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9i02KrYqNin2Ycg2qnYtNuM2K/Zh+KAjtin24zYry4g2KjYudivINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmC2Iwg2KfYsiDYtNmF2Kcg2K7ZiNin2LPYqtmHINmF24zigI7YtNmI2K8g2qnZhyDYqNinINin2LPYqtmB2KfYr9mHINin2LIg24zaqSDYrdiz2KfYqCDYp9uM2YXbjNmEINmC2YHZhCDYsdin24zYp9mG2Ycg2YTZiNit24wg2K7ZiNivINix2Kcg2KjYp9iyINqp2YbbjNivLlxuXG4g2YTYt9mB2KfZiyDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4oCP2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCM2KfbjNivLiDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmC2Iwg2KfYsiDYtNmF2Kcg2K7ZiNin2LPYqtmHINmF24zigI7YtNmI2K8g2qnZhyDYqNinINin2LPYqtmB2KfYr9mHINin2LIg24zaqSDYrdiz2KfYqCDYp9uM2YXbjNmEINmC2YHZhCDYqtmE2YHZhiDYrtmI2K8g2LHYpyDYqNin2LIg2qnZhtuM2K8uXG5cbiDZhNi32YHYp9mLINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i2K3YsNmBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZV9tZWRpYV92b2x1bWVfd2FybmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMjQxNjE5Mzk0NzU0NzgwNjYiPiLYtdiv2Kcg2KjZhyDYqNin2YTYp9iq2LEg2KfYsiDYs9i32K0g2KrZiNi124zZhyDYtNiv2Ycg2KfZgdiy2KfbjNi0INuM2KfYqNiv2J9cbtqv2YjYtCDYr9in2K/ZhiDYqNmHINi12K/Yp9uMINio2YTZhtivINio2LHYp9uMINmF2K/YqiDYt9mI2YTYp9mG24wg2YXbjOKAjNiq2YjYp9mG2K8g2KjZhyDYtNmG2YjYp9uM24wg2LTZhdinINii2LPbjNioINio2LHYs9in2YbYry4iPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTksMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4i2KfZhdiq2K3Yp9mGINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+Itio2LnYr9in2Ysg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLYqNix2KfbjCDYrtix2YjYrCDYp9iyINiq2YXYp9mFINi12YHYrdmHINin2LIg2KjYp9mE2Kcg2KjZhyDZvtin24zbjNmGINio2qnYtNuM2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i2KjYsdin24wg2K7YsdmI2Kwg2KfYsiDYrdin2YTYqiDYqtmF2KfZhSDYtdmB2K3Zh9iMINin2Ybar9i02Kog2K7ZiNivINix2Kcg2KjZhyDYqtmG2K/bjCDYp9iyINio2KfZhNin24wg2LXZgdit2YfCoNio2Ycg2b7Yp9uM24zZhiDYqNqp2LTbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i2KfZhtis2KfZhSDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4i2YTYutiy2YbYr9mHINiv2KfbjNix2YfigIzYp9uMINiz2KfYudiqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLZhNi62LLZhtiv2Ycg2K/Yp9uM2LHZh+KAjNin24wg2K/ZgtuM2YLZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLYp9mG2KrYrtin2Kgg2LPYp9i52KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLYp9mG2KrYrtin2Kgg2K/ZgtuM2YLZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i2KzYr9mI2YQg2LHZiNiy2YfYpyDYqNix2KfYs9in2LMg2YXYp9mHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i2YTbjNiz2Kog2LPYp9mE4oCM2YfYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i2KfZhtiq2K7Yp9ioINmF2KfZhyDZiCDYsdmI2LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLYp9mG2KrYrtin2Kgg2LPYp9mEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiDYp9mG2KrYrtin2Kgg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+INit2LDZgSDYtNivIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbAppbmRleCAzMTMwY2JhLi5hMGJkMDNiIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IktpcmpvaXRhIHbDpGhpbnTDpMOkbiA4IG51bWVyb24gcGl0dWluZW4gUFVLLWtvb2RpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0ta29ydHRpc2kgb24gUFVLLWx1a2l0dHUuIFBvaXN0YSBsdWtpdHVzIGFudGFtYWxsYSBQVUsta29vZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iUHVyYSBTSU0ta29ydGluIGVzdG8gYW50YW1hbGxhIFBVSzIta29vZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iRXDDpG9ubmlzdHVpLCBvdGEgU0lNLS9SVUlNLWx1a2l0dXMga8OkeXR0w7bDtm4uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iU2ludWxsYSBvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4geXJpdHlzIGrDpGxqZWxsw6QsIGVubmVuIGt1aW4gU0lNLWtvcnR0aSBsdWtpdGFhbi4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJTaW51bGxhIG9uIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB5cml0eXN0w6QgasOkbGplbGzDpCwgZW5uZW4ga3VpbiBTSU0ta29ydHRpIGx1a2l0YWFuLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSS1rb29kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iU29pdHRhamFuIHR1bm51cyI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iQW50YWEgc292ZWxsdWtzZW4gc2l0b3V0dWEgVlBOLXBhbHZlbHVuIHlsZW1tw6RuIHRhc29uIGvDpHl0dMO2bGlpdHR5bcOkw6RuLiBFaSB0YXZhbGxpc3RlbiBzb3ZlbGx1c3RlbiBrw6R5dHTDtsO2bi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4ic2lkbyB0YXVzdGFrdXZhYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkFudGFhIHNvdmVsbHVrc2VuIHNpdG91dHVhIHRhdXN0YWt1dmFuIHlsw6R0YXNvbiBrw6R5dHTDtmxpaXR0eW3DpMOkbi4gRWkgdGF2YWxsaXN0ZW4gc292ZWxsdXN0ZW4ga8OkeXR0w7bDtm4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJldMOkbsOkeXR0w7bDtm4gc2l0b3V0dW1pbmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iQW50YWEgc292ZWxsdWtzZW4gc2l0b3V0dWEgZXTDpG7DpHl0w7ZuIHlsZW1tw6RuIHRhc29uIGvDpHl0dMO2bGlpdHR5bcOkw6RuLiBFaSB0YXZhbGxpc3RlbiBzb3ZlbGx1a3NpZW4ga8OkeXR0w7bDtm4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4ic2l0b3VkdSB3aWRnZXQtcGFsdmVsdXVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkFudGFhIHNvdmVsbHVrc2VuIHNpdG91dHVhIHdpZGdldC1wYWx2ZWx1biB5bGVtbcOkbiB0YXNvbiBrw6R5dHTDtmxpaXR0eW3DpMOkbi4gRWkgdGF2YWxsaXN0ZW4gc292ZWxsdWtzaWVuIGvDpHl0dMO2w7ZuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImtvbW11bmlrb2kgbGFpdHRlZW4gasOkcmplc3RlbG3DpG52YWx2b2phbiBrYW5zc2EiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IkFudGFhIHNvdmVsbHVrc2VuIGvDpHl0dMOkw6QgU3VyZmFjZUZsaW5nZXJpbiBtYXRhbGFuIHRhc29uIG9taW5haXN1dWtzaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ibHVlIGtlaHlzcHVza3VyaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iQW50YWEgc292ZWxsdWtzZW4gbHVrZWEga2VoeXNwdXNrdXJpbiBzaXPDpGx0w7bDpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXJpbiBrw6R5dHTDpG1pbmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkFudGFhIHNvdmVsbHVrc2VuIGvDpHl0dMOkw6QgSW5wdXRGbGluZ2VyaW4gbWF0YWxhbiB0YXNvbiBvbWluYWlzdXVrc2lhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ibcOkw6RyaXTDpCB3aWZpLW7DpHl0dMO2amVuIGFzZXR1a3NldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IkFudGFhIHNvdmVsbHVrc2VuIG3DpMOkcml0dMOkw6Qgd2lmaS1uw6R5dHTDtmrDpCBqYSBtdW9kb3N0YWEgeWh0ZXlkZW4gbmlpaGluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iaGFsbGl0c2Ugd2lmaS1uw6R5dHTDtmrDpCI8L3N0cmluZz4KQEAgLTQ5NSw2ICs1MDQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiJBbnRhYSBzb3ZlbGx1a3NlbiBtdW9rYXRhIHlsZWlzacOkIMOkw6RuaWFzZXR1a3NpYSwga3V0ZW4gw6TDpG5lbnZvaW1ha2t1dXR0YSBqYSBrw6R5dGV0dMOkdsOkw6Qga2FpdXRpbnRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4idGFsbGVudGFhIMOkw6RudMOkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iQW50YWEgc292ZWxsdWtzZW4gdGFsbGVudGFhIMOkw6RudMOkIG1pa3JvZm9uaW4gYXZ1bGxhLiBTb3ZlbGx1cyB2b2kgdGFsbGVudGFhIMOkw6RudMOkIG1pbGxvaW4gdGFoYW5zYSBweXl0w6Rtw6R0dMOkIHNpbnVsdGEgbHVwYWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJTSU0tdmllc3RpbnTDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IkFudGFhIHNvdmVsbHVrc2VuIGzDpGhldHTDpMOkIGtvbWVudG9qYSBTSU0ta29ydGlsbGUuIFTDpG3DpCBlaSBvbGUgdHVydmFsbGlzdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4ib3RhIGt1dmlhIGphIHZpZGVvaXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkFudGFhIHNvdmVsbHVrc2VuIG90dGFhIGt1dmlhIGphIGt1dmF0YSB2aWRlb2l0YSBrYW1lcmFsbGEuIFNvdmVsbHVzIHZvaSBrw6R5dHTDpMOkIGthbWVyYWEgbWlsbG9pbiB0YWhhbnNhIGlsbWFuIGx1cGFhc2kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4icG9pc3RhIGzDpGhldHlrc2VuIG1lcmtraXZhbG8ga8OkeXTDtnN0w6QsIGt1biBrYW1lcmFhIGvDpHl0ZXTDpMOkbiI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IktvdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iVHnDtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iTXV1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IlTDpG3DpG4ga29udGFrdGluIGthdHNlbGVtaXNlZW4gZWkgbMO2eWR5IHNvdmVsbHVzdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iQW5uYSBQSU4ta29vZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJBbm5hIFBVSy1rb29kaSBqYSB1dXNpIFBJTi1rb29kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLWtvb2RpIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlZhbGl0c2Ugc292ZWxsdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IGVpIGvDpHlubmlzdHkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJKYWEgc2V1cmFhdmllbiBrYW5zc2E6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkphYSBzb3ZlbGx1a3Nlc3NhIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iTGl1a3V2YSB2YWxpdHNpbi4gS29za2V0YSBwaXRrw6TDpG4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkxpdVwndXRhIHlsw7ZzIGphIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJMaXVcJ3V0YSBhbGFzIGphIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJMaXVcJ3V0YSB2YXNlbW1hbGxlIGphIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iTGl1XCd1dGEgb2lrZWFsbGUgamEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iUG9pc3RhIGx1a2l0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IsOEw6RuZXTDtm4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iw4TDpG5pIGvDpHl0w7Zzc8OkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJIYWt1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iUG9pc3RhIGx1a2l0dXMgbGl1XCd1dHRhbWFsbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IkxpaXTDpCBrdXVsb2trZWV0IGt1dWxsYWtzZXNpLCBtaXTDpCBuw6RwcMOkaW1pw6QgcGFpbmF0IGtpcmpvaXR0YWVzc2FzaSBzYWxhc2FuYWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUGlzdGUuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iSsOkcmplc3RlbG3DpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoLcOkw6RuaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iTGFuZ2F0b24gbsOkeXR0w7YiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iVmFsbWlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iTWVkaWFuIMOkw6RuZW50b2lzdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IlloZGlzdMOkIGxhaXR0ZWVzZWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iTMOkaGV0w6QgbsOkeXR0w7YgbGFpdHRlZXNlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJFdHNpdMOkw6RuIGxhaXR0ZWl0YeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IkFzZXR1a3NldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJLYXRrYWlzZSB5aHRleXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iRXRzaXTDpMOkbi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IlloZGlzdGV0w6TDpG4uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkvDpHl0ZXR0w6R2aXNzw6QiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJQZWl0dG9rdXZhICMgPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc3VvamF0dHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkxhbmdhdG9uIG7DpHl0dMO2IG9uIHloZGlzdGV0dHkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iVMOkbcOkIHJ1dXR1IG7DpGt5eSB0b2lzZWxsYSBsYWl0dGVlbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IkzDpGhldGV0w6TDpG4gbsOkeXR0w7bDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IlloZGlzdGV0w6TDpG4gbsOkeXR0w7bDtm4gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iTMOkaGV0ZXTDpMOkbiBuw6R5dHTDtsOkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJZaGRpc3RldHR5IG7DpHl0dMO2w7ZuIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJLYXRrYWlzZSB5aHRleXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IkjDpHTDpHB1aGVsdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlVub2h0dW51dCBrdXZpbyI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1OSwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiJZcml0w6QgdXVkLiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzIGt1bC4iPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iWXJpdMOkIG15w7ZoZW1taW4gdXVkZWxsZWVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlBvaXN0dSBrb2tvIG7DpHl0w7ZuIHRpbGFzdGEgbGl1XCd1dHRhbWFsbGEgYWxhcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iUG9pc3R1IGtva28gbsOkeXTDtm4gdGlsYXN0YSBweXloa8OkaXNlbcOkbGzDpCBhbGFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iVmFsbWlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iVHVudGllbiB5bXB5csOkbm11b3RvaW5lbiBsaXVrdXPDpMOkZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJNaW51dXR0aWVuIHltcHlyw6RubXVvdG9pbmVuIGxpdWt1c8Okw6RkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iVmFsaXRzZSB0dW5uaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJWYWxpdHNlIG1pbnV1dGl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJQw6RpdsOkcnV1ZHVra28ga3V1a2F1c2l0dGFpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IlZ1b3NpbHVldHRlbG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlZhbGl0c2Uga3V1a2F1c2kgamEgcMOkaXbDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlZhbGl0c2UgdnVvc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IG9uIHZhbGl0dHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBwb2lzdGV0dGlpbiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbAppbmRleCAzODVlZDRiLi40ZWUxMzE1IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iVmV1aWxsZXogc2Fpc2lyIHVuZSBjbMOpIFBVSyBjb21wb3J0YW50IGF1IG1vaW5zIGh1aXTCoGNoaWZmcmVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJWb3RyZSBjYXJ0ZSBTSU0gZXN0IHZlcnJvdWlsbMOpZSBwYXIgY2zDqSBQVUsuIFNhaXNpc3NleiBsYSBjbMOpIFBVSyBwb3VyIGxhIGTDqXZlcnJvdWlsbGVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNhaXNpc3NleiBsYSBjbMOpIFBVSzIgcG91ciBkw6libG9xdWVyIGxhIGNhcnRlIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJPcMOpcmF0aW9uIGluZnJ1Y3R1ZXVzZS4gQWN0aXZleiBsZSB2ZXJyb3VpbGxhZ2UgU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iSWwgdm91cyByZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZlIGF2YW50IHF1ZSB2b3RyZSBjYXJ0ZSBTSU0gc29pdCB2ZXJyb3VpbGzDqWUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iSWwgdm91cyByZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZlKHMpIGF2YW50IHF1ZSB2b3RyZSBjYXJ0ZSBTSU0gc29pdCB2ZXJyb3VpbGzDqWUuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJDb2RlIElNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+Ik51bcOpcm8gZGUgbFwnYXBwZWxhbnQgKGVudHJhbnQpIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gYXV0b3Jpc8OpZSBkZSBzXCdhc3NvY2llciDDoCBsXCdpbnRlcmZhY2UgZGUgcGx1cyBoYXV0IG5pdmVhdSBkXCd1biBzZXJ2aWNlIFJQVi4gTGVzIGFwcGxpY2F0aW9ucyBzdGFuZGFyZHMgbmUgZG9pdmVudCBqYW1haXMgYXZvaXIgcmVjb3VycyDDoCBjZXR0ZSBmb25jdGlvbm5hbGl0w6kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InNlIGZpeGVyIMOgIHVuIGZvbmQgZFwnw6ljcmFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gYXV0b3Jpc8OpZSBkZSBzXCdhc3NvY2llciDDoCBsXCdpbnRlcmZhY2UgZGUgcGx1cyBoYXV0IG5pdmVhdSBkXCd1biBmb25kIGRcJ8OpY3Jhbi4gTGVzIGFwcGxpY2F0aW9ucyBzdGFuZGFyZHMgbmUgZG9pdmVudCBqYW1haXMgYXZvaXIgcmVjb3VycyDDoCBjZXR0ZSBmb25jdGlvbm5hbGl0w6kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJsaWVyIMOgIHVuIMOpY3JhbiBkaXN0YW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGF1dG9yaXPDqWUgZGUgc1wnYXNzb2NpZXIgw6AgbFwnaW50ZXJmYWNlIGRlIHBsdXMgaGF1dCBuaXZlYXUgZFwndW4gw6ljcmFuIGRpc3RhbnQuIExlcyBhcHBsaWNhdGlvbnMgc3RhbmRhcmRzIG5lIGRvaXZlbnQgamFtYWlzIGF2b2lyIHJlY291cnMgw6AgY2V0dGUgZm9uY3Rpb25uYWxpdMOpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InNcJ2Fzc29jaWVyIMOgIHVuIHNlcnZpY2UgZGUgd2lkZ2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBhdXRvcmlzw6llIGRlIHNcJ2Fzc29jaWVyIMOgIGxcJ2ludGVyZmFjZSBkZSBwbHVzIGhhdXQgbml2ZWF1IGRcJ3VuIHNlcnZpY2UgZGUgd2lkZ2V0LiBMZXMgYXBwbGljYXRpb25zIHN0YW5kYXJkcyBuZSBkb2l2ZW50IGphbWFpcyBhdm9pciByZWNvdXJzIMOgIGNldHRlIGZvbmN0aW9ubmFsaXTDqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJpbnRlcmFnaXIgYXZlYyBsXCdhZG1pbmlzdHJhdGV1ciBkXCd1biBww6lyaXBow6lyaXF1ZSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRcJ3V0aWxpc2VyIGxlcyBmb25jdGlvbm5hbGl0w6lzIGRlIGJhcyBuaXZlYXUgZGUgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ibGlyZSBsYSBtw6ltb2lyZSB0YW1wb24gZ3JhcGhpcXVlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkZSBsaXJlIGxlIGNvbnRlbnUgZGUgbGEgbcOpbW9pcmUgdGFtcG9uIGdyYXBoaXF1ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJhY2PDqWRlciDDoCBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRcJ3V0aWxpc2VyIGxlcyBmb25jdGlvbm5hbGl0w6lzIGRlIGJhcyBuaXZlYXUgZGUgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmVyIGxlcyDDqWNyYW5zIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRlIGNvbmZpZ3VyZXIgZGVzIMOpY3JhbnMgV2ktRmkgZXQgZGUgc1wneSBjb25uZWN0ZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJjb250csO0bGVyIGxlcyDDqWNyYW5zIFdpLUZpIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkZSBtb2RpZmllciBsZXMgcGFyYW3DqHRyZXMgYXVkaW8gZ8OpbsOpcmF1eCwgdGVscyBxdWUgbGUgdm9sdW1lIGV0IGxhIHNvcnRpZSBhdWRpbyB1dGlsaXPDqWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJlbnJlZ2lzdHJlciBmaWNoaWVyIGF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRcJ2VucmVnaXN0cmVyIGRlcyBjb250ZW51cyBhdWRpbyDDoCBsXCdhaWRlIGR1IG1pY3JvcGhvbmUuIENldHRlIGF1dG9yaXNhdGlvbiBsdWkgZG9ubmUgbGEgcG9zc2liaWxpdMOpIGRcJ2VucmVnaXN0cmVyIGR1IGNvbnRlbnUgYXVkaW8gw6AgdG91dCBtb21lbnQgc2FucyB2b3RyZSBjb25zZW50ZW1lbnQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJDb21tdW5pY2F0aW9uIGF2ZWMgbGEgY2FydGUgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRcJ2Vudm95ZXIgZGVzIGNvbW1hbmRlcyDDoCBsYSBjYXJ0ZSBTSU0uIENldHRlIGZvbmN0aW9ubmFsaXTDqSBlc3QgdHLDqHMgZGFuZ2VyZXVzZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJwcmVuZHJlIGRlcyBwaG90b3MgZXQgZmlsbWVyIGRlcyB2aWTDqW9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkZSBwcmVuZHJlIGRlcyBwaG90b3MgZXQgZGUgZmlsbWVyIGRlcyB2aWTDqW9zIGF2ZWMgbFwnYXBwYXJlaWwgcGhvdG8uIENldHRlIGF1dG9yaXNhdGlvbiBsdWkgcGVybWV0IGRcJ3V0aWxpc2VyIGxcJ2FwcGFyZWlsIHBob3RvIMOgIHRvdXQgbW9tZW50IHNhbnMgdm90cmUgY29uc2VudGVtZW50LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImTDqXNhY3RpdmVyIGxcJ2luZGljYXRldXIgZFwnw6ltaXNzaW9uIExFRCBsb3JzcXVlIGxhIGNhbcOpcmEgZXN0IGVuIGNvdXJzIGRcJ3V0aWxpc2F0aW9uIjwvc3RyaW5nPgpAQCAtNzgzLDcgKzc5NCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sWWFob28iIG1zZ2lkPSI4MjcxNDM5NDA4NDY5MDIxMjczIj4iWWFob28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sU2t5cGUiIG1zZ2lkPSI5MDE5Mjk2NzQ0NjIyODMyOTUxIj4iU2t5cGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sUXEiIG1zZ2lkPSI4ODg3NDg0Mzc5NDk0MTExODg0Ij4iUVEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IkNvbnZlcnNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IkhhbmdvdXRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEljcSIgbXNnaWQ9IjE1NzQ4NzA0MzM2MDY1MTczMTUiPiJJQ1EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSmFiYmVyIiBtc2dpZD0iMjI3OTkxNzYzMDg3NTc3MTcyMiI+IkphYmJlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xOZXRNZWV0aW5nIiBtc2dpZD0iODI4NzYyNTY1NTk4NjgyNzk3MSI+Ik5ldE1lZXRpbmciPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiJEb21pY2lsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiJUcmF2YWlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJBdXRyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJBdWN1bmUgYXBwbGljYXRpb24gcGVybWV0dGFudCBkXCdhZmZpY2hlciBjZSBjb250YWN0IG5cJ2Egw6l0w6kgdHJvdXbDqWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iU2Fpc2lzc2V6IGxlIE5JUC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJTYWlzaXNzZXogbGEgY2zDqcKgUFVLIGV0IGxlIG5vdXZlYXUgTklQLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iQ2zDqSBQVUsiPC9zdHJpbmc+CkBAIC0xMTEyLDggKzExMjQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibm8iIG1zZ2lkPSI1MTQxNTMxMDQ0OTM1NTQxNDk3Ij4iQW5udWxlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpYWxvZ19hbGVydF90aXRsZSIgbXNnaWQ9IjIwNDk2NTg3MDg2MDkwNDMxMDMiPiJBdHRlbnRpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2FkaW5nIiBtc2dpZD0iNzkzMzY4MTI2MDI5NjAyMTE4MCI+IkNoYXJnZW1lbnQgZW4gY291cnMuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29uIiBtc2dpZD0iMTU0NDY4Mjc1NTUxNDQ5NDI5OCI+IkFDVElWw4lFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vZmYiIG1zZ2lkPSI2ODE1ODcwMzg2OTcyODA1ODMyIj4iRMOJU0FDVElWw4lFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vbiIgbXNnaWQ9IjE1NDQ2ODI3NTU1MTQ0OTQyOTgiPiJPVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29mZiIgbXNnaWQ9IjY4MTU4NzAzODY5NzI4MDU4MzIiPiJOT04iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+IkNvbnRpbnVlciBhdmVjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2hpY2hIb21lQXBwbGljYXRpb24iIG1zZ2lkPSI0NjE2NDIwMTcyNzI3MzI2NzgyIj4iU8OpbGVjdGlvbm5leiB1bmUgYXBwbGljYXRpb24gZGUgbFwnw6ljcmFuIGRcJ2FjY3VlaWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4iVXRpbGlzZXIgY2V0dGUgYXBwbGljYXRpb24gcGFyIGTDqWZhdXQgcG91ciBjZXR0ZSBhY3Rpb24iPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJNYWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRyw6llIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iU8OpbGVjdGlvbm5leiB1bmUgYXBwbGljYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJJbXBvc3NpYmxlIGRlIGxhbmNlciBsXCdhcHBsaWNhdGlvbiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iUGFydGFnZXogYXZlYyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJQYXJ0YWdlciBhdmVjIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iUG9pZ27DqWUgY291bGlzc2FudGUuIEFwcHV5ZXogZGUgbWFuacOocmUgcHJvbG9uZ8OpZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRmFpcmUgZ2xpc3NlciBsZSBkb2lndCB2ZXJzIGxlIGhhdXTCoDogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iRmFpcmUgZ2xpc3NlciBsZSBkb2lndCB2ZXJzIGxlIGJhc8KgOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJGYWl0ZXMgZ2xpc3NlciB2b3RyZSBkb2lndCB2ZXJzIGxhIGdhdWNoZcKgcG91ciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkZhaXRlcyBnbGlzc2VyIHZvdHJlIGRvaWd0IHZlcnMgbGEgZHJvaXRlIHBvdXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iRMOpdmVycm91aWxsZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iQXBwYXJlaWwgcGhvdG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iTW9kZSBzaWxlbmNpZXV4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlNvbiBhY3RpdsOpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJSZWNoZXJjaGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJGYWl0ZXMgZ2xpc3NlciB2b3RyZSBkb2lndCBwb3VyIGTDqXZlcnJvdWlsbGVyIGxcJ2FwcGFyZWlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJCcmFuY2hleiBkZXMgw6ljb3V0ZXVycyBwb3VyIGVudGVuZHJlIGxcJ8Opbm9uY8OpIGRlcyB0b3VjaGVzIGxvcnMgZGUgbGEgc2Fpc2llIGR1IG1vdCBkZSBwYXNzZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJQb2ludC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTeXN0w6htZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQXVkaW8gQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJBZmZpY2hhZ2Ugc2FucyBmaWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iVGVybWluw6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJTb3J0aWUgbXVsdGltw6lkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IkNvbm5leGlvbiDDoCBsXCdhcHBhcmVpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IkRpZmZ1c2VyIGxcJ8OpY3JhbiBzdXIgbFwnYXBwYXJlaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJSZWNoZXJjaGUgZFwnYXBwYXJlaWxzIGVuIGNvdXJz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iUGFyYW3DqHRyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iRMOpY29ubmVjdGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IkFuYWx5c2UgZW4gY291cnMuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJDb25uZXhpb24gZW4gY291cnMuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRpc3BvbmlibGUiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJTdXBlcnBvc2l0aW9uIG7CsMKgPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7CoDogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPsKgeMKgPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+wqBwcHAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzw6ljdXJpc8OpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJMXCdhZmZpY2hhZ2Ugc2FucyBmaWwgZXN0IGNvbm5lY3TDqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iQ2V0IMOpY3JhbiBzXCdhZmZpY2hlIHN1ciB1biBhdXRyZSBhcHBhcmVpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iQ29ubmV4aW9uIMOgIGxcJ8OpY3JhbiBlbiBjb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkNvbm5leGlvbiBhdSByw6lzZWF1IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiBlbiBjb3Vyc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkRpZmZ1c2lvbiBkZSBsXCfDqWNyYW4gZW4gY291cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IkNvbm5lY3TDqSDDoCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iRMOpY29ubmVjdGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJBcHBlbCBkXCd1cmdlbmNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iSlwnYWkgb3VibGnDqSBsZSBzY2jDqW1hIjwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU5LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+IlLDqWVzc2F5ZXIgZGFucyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPsKgcyI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJSw6llc3NheWV6IHBsdXMgdGFyZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJCYWxheWV6IHZlcnMgbGUgYmFzIHBvdXIgcXVpdHRlciBwbGVpbiDDqWNyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iQmFsYXlleiB2ZXJzIGxlIGJhcyBwb3VyIHF1aXR0ZXIgbGUgbW9kZSBwbGVpbiDDqWNyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IlRlcm1pbsOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iQ3Vyc2V1ciBjaXJjdWxhaXJlIGRlcyBoZXVyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IkN1cnNldXIgY2lyY3VsYWlyZSBkZXMgbWludXRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJTw6lsZWN0aW9ubmV6IGxlcyBoZXVyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTw6lsZWN0aW9ubmV6IGxlcyBtaW51dGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJDYWxlbmRyaWVyIG1lbnN1ZWwgc291cyBmb3JtZSBkZSBncmlsbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJMaXN0ZSBkZXMgYW5uw6llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iU8OpbGVjdGlvbm5leiB1biBtb2lzIGV0IHVuIGpvdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJTw6lsZWN0aW9ubmV6IHVuZSBhbm7DqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iwqvCoDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPsKgwrsgYSDDqXTDqSBzw6lsZWN0aW9ubsOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iwqvCoDx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+wqDCuyBhIMOpdMOpIHN1cHByaW3DqSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKaW5kZXggOWE0NGEzMS4uMzNkMDY1MSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJTYWlzaXNzZXogdW4gY29kZSBQVUsgY29tcG9ydGFudCBhdSBtb2lucyBodWl0wqBjaGlmZnJlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iVm90cmUgY2FydGUgU0lNIGVzdCB2ZXJyb3VpbGzDqWUgcGFyIGNsw6kgUFVLLiBTYWlzaXNzZXogbGEgY2zDqSBQVUsgcG91ciBsYSBkw6l2ZXJyb3VpbGxlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJTYWlzaXNzZXogbGEgY2zDqSBQVUsyIHBvdXIgZMOpYmxvcXVlciBsYSBjYXJ0ZSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iw4ljaGVjIGRlIGxcJ29ww6lyYXRpb24uIFZldWlsbGV6IGFjdGl2ZXIgbGUgdmVycm91aWxsYWdlIGRlIGxhIGNhcnRlIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IklsIHZvdXMgcmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqB0ZW50YXRpdmUgYXZhbnQgcXVlIHZvdHJlIGNhcnRlIFNJTSBuZSBzb2l0IHZlcnJvdWlsbMOpZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJJbCB2b3VzIHJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgdGVudGF0aXZlcyBhdmFudCBxdWUgdm90cmUgY2FydGUgU0lNIG5lIHNvaXQgdmVycm91aWxsw6llLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iQ29kZSBJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJDb2RlIE1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+Ik51bcOpcm8gZGUgbFwnYXBwZWxhbnQgKGVudHJhbnQpIjwvc3RyaW5nPgpAQCAtMjI1LDcgKzIzMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbVRvb2xzIiBtc2dpZD0iODE2MjEwMjYwMjE5MDczNDMwNSI+IkFjY8OocyBldCBjb250csO0bGUgZGUgZmFpYmxlIG5pdmVhdSBkdSBzeXN0w6htZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjM0NDYxNjQ1ODQ3MTA1OTY1MTMiPiJPdXRpbHMgZGUgZMOpdmVsb3BwZW1lbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSI3MDU4ODI4MDMyMzU4MTQyMDE4Ij4iQ2VzIGZvbmN0aW9ubmFsaXTDqXMgc29udCBkZXN0aW7DqWVzIHVuaXF1ZW1lbnQgYXV4IGTDqXZlbG9wcGV1cnMgZFwnYXBwbGljYXRpb25zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+IkludGVyZmFjZSB1dGlsaXNhdGV1ciBkXCd1bmUgYXV0cmUgYXBwbGljYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiJJbnRlcmZhY2UgZGVzIGF1dHJlcyBhcHBsaXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4iRWZmZXQgc3VyIGxcJ2ludGVyZmFjZSB1dGlsaXNhdGV1ciBkXCdhdXRyZXMgYXBwbGljYXRpb25zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0b3JhZ2UiIG1zZ2lkPSIxOTcxMTE4NzcwNTQ2MzM2OTY2Ij4iU3RvY2thZ2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzQ0MjMxODUwMjQ0Njg3NDk5OSI+IkFjY8OpZGVyIMOgIGxhICBtw6ltb2lyZSBkZSBzdG9ja2FnZSBVU0IiPC9zdHJpbmc+CkBAIC0zNDgsNyArMzUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRlIGxhbmNlciBsXCdpbnRlcmZhY2UgdXRpbGlzYXRldXIgZGUgY29uZmlybWF0aW9uIGRlIHNhdXZlZ2FyZGUgY29tcGzDqHRlLiBTZXVsZXMgY2VydGFpbmVzIGFwcGxpY2F0aW9ucyBwZXV2ZW50IGLDqW7DqWZpY2llciBkZSBjZXR0ZSBwZXJtaXNzaW9uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSIyMTQ4NTYzNjI4MTQwMTkzMjMxIj4iQWZmaWNoYWdlIGRlIGZlbsOqdHJlcyBub24gYXV0b3Jpc8OpZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9Ijc0NTgzODc3NTk0NjE0NjYzOTciPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgY3LDqWVyIGRlcyBmZW7DqnRyZXMgZGVzdGluw6llcyDDoCDDqnRyZSB1dGlsaXPDqWVzIHBhciBsXCdpbnRlcmZhY2UgdXRpbGlzYXRldXIgZHUgc3lzdMOobWUgaW50ZXJuZS4gTGVzIGFwcGxpY2F0aW9ucyBzdGFuZGFyZHMgbmUgZG9pdmVudCBwYXMgdXRpbGlzZXIgY2V0dGUgZm9uY3Rpb25uYWxpdMOpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4iaWdub3JlciBsZXMgYXV0cmVzIGFwcGxpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4iU1wnYWZmaWNoZXIgZW4gc3VyaW1wcmVzc2lvbiBkYW5zIGxlcyBhdXRyZXMgYXBwbGlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSI4NTg0Njc4MzgxOTcyODIwMTE4Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRcJ2lnbm9yZXIgZFwnYXV0cmVzIGFwcGxpY2F0aW9ucyBvdSBjZXJ0YWluZXMgcGFydGllcyBkZSBsXCdpbnRlcmZhY2UgdXRpbGlzYXRldXIuIENlbGEgcGV1dCBhbHTDqXJlciB2b3RyZSB1dGlsaXNhdGlvbiBkZSBsXCdpbnRlcmZhY2UgZGUgblwnaW1wb3J0ZSBxdWVsbGUgYXBwbGljYXRpb24sIG91IG1vZGlmaWVyIGNlIHF1ZSB2b3VzIHBlbnNleiB2b2lyIGRhbnMgZFwnYXV0cmVzIGFwcGxpY2F0aW9ucy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iMjgwNTEwMzI0MTE1MzkwNzE3NCI+IlLDqWdsYWdlIGRlIGxhIHZpdGVzc2UgZGVzIGFuaW1hdGlvbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9Ijc2OTAwNjM0Mjg5MjQzNDM1NzEiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgbW9kaWZpZXIgw6AgdG91dCBtb21lbnQgbGEgdml0ZXNzZSBnw6luw6lyYWxlIGRlcyBhbmltYXRpb25zIHBvdXIgbGVzIHJhbGVudGlyIG91IGxlcyBhY2PDqWzDqXJlci4iPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBhdXRvcmlzw6llIGRlIHNcJ2Fzc29jaWVyIMOgIGxcJ2ludGVyZmFjZSBkZSBwbHVzIGhhdXQgbml2ZWF1IGRcJ3VuIHNlcnZpY2XCoFZQTi4gTGVzIGFwcGxpY2F0aW9ucyBzdGFuZGFyZHMgbmUgZG9pdmVudCBqYW1haXMgYXZvaXIgcmVjb3VycyDDoCBjZXR0ZSBmb25jdGlvbm5hbGl0w6kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+IlNlIGZpeGVyIHN1ciB1biBmb25kIGRcJ8OpY3JhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGF1dG9yaXPDqWUgZGUgc1wnYXNzb2NpZXIgw6AgbFwnaW50ZXJmYWNlIGRlIHBsdXMgaGF1dCBuaXZlYXUgZFwndW4gZm9uZCBkXCfDqWNyYW4uIExlcyBhcHBsaWNhdGlvbnMgc3RhbmRhcmRzIG5lIGRvaXZlbnQgamFtYWlzIGF2b2lyIHJlY291cnMgw6AgY2V0dGUgZm9uY3Rpb25uYWxpdMOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4ic1wnYXNzb2NpZXIgw6AgdW4gw6ljcmFuIMOgIGRpc3RhbmNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iUGVybWV0dHJlIMOgIGxcJ2FwcGxpY2F0aW9uIGF1dG9yaXPDqWUgZGUgc1wnYXNzb2NpZXIgw6AgbFwnaW50ZXJmYWNlIGRlIG5pdmVhdSBzdXDDqXJpZXVyIGRcJ3VuIMOpY3JhbiDDoCBkaXN0YW5jZS4gQ2V0dGUgZm9uY3Rpb25uYWxpdMOpIG5lIGRldnJhaXQgcGFzIMOqdHJlIG7DqWNlc3NhaXJlIHBvdXIgbGVzIGFwcGxpY2F0aW9ucyBzdGFuZGFyZHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4iYXNzb2NpZXIgw6AgdW4gc2VydmljZSB3aWRnZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGF1dG9yaXPDqWUgZGUgc1wnYXNzb2NpZXIgw6AgbFwnaW50ZXJmYWNlIGRlIHBsdXMgaGF1dCBuaXZlYXUgZFwndW4gc2VydmljZSB3aWRnZXQuIExlcyBhcHBsaWNhdGlvbnMgc3RhbmRhcmRzIG5lIGRvaXZlbnQgamFtYWlzIGF2b2lyIHJlY291cnMgw6AgY2V0dGUgZm9uY3Rpb25uYWxpdMOpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImludGVyYWdpciBhdmVjIGxcJ2FkbWluaXN0cmF0ZXVyIGR1IHDDqXJpcGjDqXJpcXVlIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZFwndXRpbGlzZXIgbGVzIGZvbmN0aW9ubmFsaXTDqXMgZGUgYmFzIG5pdmVhdSBkZSBTdXJmYWNlRmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJMZWN0dXJlIGRlIGxhIG3DqW1vaXJlIHRhbXBvbiBncmFwaGlxdWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRlIGxpcmUgbGUgY29udGVudSBkZSBsYSBtw6ltb2lyZSB0YW1wb24gZ3JhcGhpcXVlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImFjY8OpZGVyIMOgIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZFwndXRpbGlzZXIgbGVzIGZvbmN0aW9ubmFsaXTDqXMgZGUgYmFzZSBkXCdJbnB1dEZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmVyIGxlcyDDqWNyYW5zIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRlIGNvbmZpZ3VyZXIgZGVzIMOpY3JhbnMgV2ktRmkgZXQgZGUgc1wneSBjb25uZWN0ZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJjb250csO0bGVyIGxlcyDDqWNyYW5zIFdpLUZpIjwvc3RyaW5nPgpAQCAtNDkzLDggKzUwMiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWVkaWFDb250ZW50Q29udHJvbCIgbXNnaWQ9IjE2Mzc0NzgyMDAyNzIwNjIiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgY29udHLDtGxlciBsYSBsZWN0dXJlIGRlcyBjb250ZW51cyBtdWx0aW3DqWRpYXMgZXQgZFwnYWNjw6lkZXIgYXV4IGluZm9ybWF0aW9ucyBhc3NvY2nDqWVzLCB0ZWxsZXMgcXVlIGxlIHRpdHJlIG91IGxcJ2F1dGV1ci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4ibW9kaWZpZXIgdm9zIHBhcmFtw6h0cmVzIGF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgbW9kaWZpZXIgbGVzIHBhcmFtw6h0cmVzIGF1ZGlvIGfDqW7DqXJhdXgsIHRlbHMgcXVlIGxlIHZvbHVtZSBldCBsYSBzb3J0aWUgYXVkaW8gdXRpbGlzw6llLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4iRW5yZWdpc3RyZXIgZGVzIGZpY2hpZXJzIGF1ZGlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJlbnJlZ2lzdHJlciBkZXMgZmljaGllcnMgYXVkaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZFwnZW5yZWdpc3RyZXIgZGVzIGNvbnRlbnVzIGF1ZGlvIMOgIGxcJ2FpZGUgZHUgbWljcm9waG9uZS4gQ2V0dGUgYXV0b3Jpc2F0aW9uIGx1aSBkb25uZSBsYSBwb3NzaWJpbGl0w6kgZFwnZW5yZWdpc3RyZXIgZHUgY29udGVudSBhdWRpbyDDoCB0b3V0IG1vbWVudCBzYW5zIHZvdHJlIGNvbnNlbnRlbWVudC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+IkNvbW11bmljYXRpb24gYXZlYyBsYSBjYXJ0ZSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJBdXRvcmlzZXIgbFwnZW52b2kgZGUgY29tbWFuZGVzIMOgIGxhIGNhcnRlIFNJTSB2aWEgbFwnYXBwbGljYXRpb24uIENldHRlIGZvbmN0aW9ubmFsaXTDqSBlc3QgdHLDqHMgcmlzcXXDqWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4icHJlbmRyZSBkZXMgcGhvdG9zIGV0IGVucmVnaXN0cmVyIGRlcyB2aWTDqW9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkZSBwcmVuZHJlIGRlcyBwaG90b3MgZXQgZGUgZmlsbWVyIGRlcyB2aWTDqW9zIGF2ZWMgbFwnYXBwYXJlaWwgcGhvdG8uIENldHRlIGF1dG9yaXNhdGlvbiBsdWkgcGVybWV0IGRcJ3V0aWxpc2VyIGxcJ2FwcGFyZWlsIHBob3RvIMOgIHRvdXQgbW9tZW50IHNhbnMgdm90cmUgY29uc2VudGVtZW50LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImTDqXNhY3RpdmVyIGxcJ2luZGljYXRldXIgZFwnw6ltaXNzaW9uIExFRCBsb3JzcXVlIGxhIGNhbcOpcmEgZXN0IGVuIGNvdXJzIGRcJ3V0aWxpc2F0aW9uIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iRG9taWNpbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iUHJvZmVzc2lvbm5lbGxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJBdXRyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJBdWN1bmUgYXBwbGljYXRpb24gcGVybWV0dGFudCBkXCdhZmZpY2hlciBjZSBjb250YWN0IG5cJ2Egw6l0w6kgdHJvdXbDqWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iU2Fpc2lzc2V6IGxlIGNvZGXCoFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJTYWlzaXNzZXogbGEgY2zDqcKgUFVLIGV0IGxlIG5vdXZlYXUgY29kZcKgUElOLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iQ29kZSBQVUsiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJNYWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRyw6llIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iU8OpbGVjdGlvbm5leiB1bmUgYXBwbGljYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJJbXBvc3NpYmxlIGRlIGxhbmNlciBsXCdhcHBsaWNhdGlvbiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IlBhcnRhZ2VyIGF2ZWMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iUGFydGFnZXIgYXZlYyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IlBvaWduw6llIGNvdWxpc3NhbnRlLiBBcHB1eWV6IGRlIG1hbmnDqHJlIHByb2xvbmfDqWUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkZhaXRlcyBnbGlzc2VyIHZlcnMgbGUgaGF1dCBwb3VyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJGYWl0ZXMgZ2xpc3NlciB2ZXJzIGxlIGJhcyBwb3VyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJGYWl0ZXMgZ2xpc3NlciB2ZXJzIGxhIGdhdWNoZSBwb3VyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iRmFpdGVzIGdsaXNzZXIgdmVycyBsYSBkcm9pdGUgcG91ciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJEw6l2ZXJyb3VpbGxlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJBcHBhcmVpbCBwaG90byI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJNb2RlIHNpbGVuY2lldXgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU29uIGFjdGl2w6kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlJlY2hlcmNoZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJGYWl0ZXMgZ2xpc3NlciB2b3RyZSBkb2lndCBwb3VyIGTDqXZlcnJvdWlsbGVyIGxcJ2FwcGFyZWlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJCcmFuY2hleiBkZXMgw6ljb3V0ZXVycyBwb3VyIGVudGVuZHJlIGxcJ8Opbm9uY8OpIGRlcyB0b3VjaGVzIGxvcnMgZGUgbGEgc2Fpc2llIGR1IG1vdCBkZSBwYXNzZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJQb2ludC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTeXN0w6htZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQXVkaW8gQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJBZmZpY2hhZ2Ugc2FucyBmaWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iT0siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJTb3J0aWUgbXVsdGltw6lkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IkNvbm5leGlvbiDDoCBsXCdhcHBhcmVpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IkRpZmZ1c2VyIGxcJ8OpY3JhbiBzdXIgbFwnYXBwYXJlaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJSZWNoZXJjaGUgZFwnYXBwYXJlaWxzIGVuIGNvdXJz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iUGFyYW3DqHRyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iRMOpY29ubmVjdGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IkFuYWx5c2UgZW4gY291cnMuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJDb25uZXhpb24gZW4gY291cnMuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRpc3BvbmlibGUiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJTdXBlcnBvc2l0aW9uIG7CsMKgPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7CoDogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPsKgeMKgPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+wqBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzw6ljdXJpc8OpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJMXCdhZmZpY2hhZ2Ugc2FucyBmaWwgZXN0IGNvbm5lY3TDqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iQ2V0IMOpY3JhbiBzXCdhZmZpY2hlIHN1ciB1biBhdXRyZSBhcHBhcmVpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iRGlmZnVzaW9uIGRlIGxcJ8OpY3JhbiBlbiBjb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkNvbm5leGlvbiDDoCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4gZW4gY291cnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJEaWZmdXNpb24gZGUgbFwnw6ljcmFuIGVuIGNvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJDb25uZWN0w6kgw6AgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkTDqWNvbm5lY3RlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iQXBwZWwgZFwndXJnZW5jZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IkpcJ2FpIG91Ymxpw6kgbGUgc2Now6ltYSI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1OSwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiJSw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz7CoHMiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iVmV1aWxsZXogcsOpZXNzYXllciB1bHTDqXJpZXVyZW1lbnQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkJhbGF5ZXIgdmVycyBsZSBiYXMgcG91ciBxdWl0dGVyIGxlIHBsZWluIMOpY3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJGYWl0ZXMgZ2xpc3NlciBsZSBkb2lndCB2ZXJzIGxlIGJhcyBwb3VyIHF1aXR0ZXIgbGUgbW9kZSBwbGVpbiDDqWNyYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJPSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkN1cnNldXIgY2lyY3VsYWlyZSBkZXMgaGV1cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJDdXJzZXVyIGNpcmN1bGFpcmUgZGVzIG1pbnV0ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iU8OpbGVjdGlvbm5lciB1bmUgaGV1cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTw6lsZWN0aW9ubmVyIGRlcyBtaW51dGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJDYWxlbmRyaWVyIG1lbnN1ZWwgc291cyBmb3JtZSBkZSBncmlsbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJMaXN0ZSBkZXMgYW5uw6llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iU8OpbGVjdGlvbm5lciB1biBtb2lzIGV0IHVuIGpvdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJTw6lsZWN0aW9ubmVyIHVuZSBhbm7DqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iXCI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz5cIiBzw6lsZWN0aW9ubsOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iXCI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPlwiIHN1cHByaW3DqSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKaW5kZXggNzM1NzViZC4uMmE0YmE1YiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLgpJDgpLjgpL4gUFVLIOCksuCkv+CkluClh+CkgiDgpJzgpYsgOCDgpIXgpILgpJXgpYvgpIIg4KSv4KS+IOCkheCkp+Ckv+CklSDgpJXgpL4g4KS54KWLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLgpIbgpKrgpJXgpL4g4KS44KS/4KSuIOCkleCkvuCksOCljeCkoSBQVUsg4KSy4KWJ4KSVIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4g4KS54KWILiDgpIfgpLjgpYcg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIFBVSyDgpJXgpYvgpKEg4KSy4KS/4KSW4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IuCkuOCkv+CkriDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSs4KWN4oCN4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIFBVSzIg4KSy4KS/4KSW4KWH4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuCkheCkuOCkq+Cksiwg4KS44KS/4KSuLy9SVUlNIOCksuClieCklSDgpLjgpJXgpY3gpLfgpK4g4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IuCkuOCkv+CkriDgpJXgpYcg4KSy4KWJ4KSVIOCkueCliyDgpJzgpL7gpKjgpYcg4KS44KWHIOCkquCkueCksuClhyDgpIbgpKrgpJXgpYcg4KSq4KS+4KS4IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpY3gpLDgpK/gpL7gpLgg4KS24KWH4KS3IOCkueCliC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLgpLjgpL/gpK4g4KSV4KWHIOCksuClieCklSDgpLngpYsg4KSc4KS+4KSo4KWHIOCkuOClhyDgpKrgpLngpLLgpYcg4KSG4KSq4KSV4KWHIOCkquCkvuCkuCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KWN4KSw4KSv4KS+4KS4IOCktuClh+CktyDgpLngpYjgpIIuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLgpIfgpKjgpJXgpK7gpL/gpILgpJcg4KSV4KWJ4KSy4KSwIElEIjwvc3RyaW5nPgpAQCAtMTUwLDkgKzE1NSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQ5NzkyMTc1MjQyODIxMzUzIj4i4KSG4KSq4KSV4KS+IOCkq+CkvOCli+CkqCDgpLbgpJ8g4KSh4KS+4KSJ4KSoIOCkueCliyDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybV9xdWVzdGlvbiIgbXNnaWQ9IjI5MDY1NDQ3Njg4ODExMzYxODMiPiLgpJXgpY3igI3gpK/gpL4g4KSG4KSqIOCktuCknyDgpKHgpL7gpIngpKgg4KSV4KSw4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpII/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX3RpdGxlIiBtc2dpZD0iNzA1NDUwOTkxNDUwMDE0MDM2MSI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpK7gpYvgpKEg4KSu4KWH4KSCIOCksOClgOCkrOClguCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfY29uZmlybSIgbXNnaWQ9IjU1MjkzOTQ0NTAyNzg0NjY4Ij4i4KSV4KWN4KSv4KS+IOCkhuCkqiDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSu4KWL4KShIOCkruClh+CkgiDgpLDgpYDgpKzgpYLgpJ8g4KSV4KSw4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpII/IOCkh+CkuOCkuOClhyDgpIbgpKrgpJXgpYcg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpLngpYHgpI8g4KS44KSt4KWAIOCkpOClg+CkpOClgOCkryDgpKrgpJXgpY3gpLcg4KSP4KSq4KWN4KS4IOCkheCkleCljeCkt+CkriDgpLngpYsg4KSc4KS+4KSP4KSC4KSX4KWHLiDgpJzgpKwg4KSG4KSqIOCkq+Ckv+CksCDgpLjgpYcg4KSw4KWA4KSs4KWC4KSfIOCkleCksOClh+CkguCkl+ClhyDgpKTgpYsg4KS14KWHIOCkquClgeCkqOCksOCljeCkuOCljeCkpeCkvuCkquCkv+CkpCDgpLngpYsg4KSc4KS+4KSP4KSC4KSX4KWHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV9jb25maXJtIiBtc2dpZD0iNTUyOTM5NDQ1MDI3ODQ2NjgiPiLgpJXgpY3gpK/gpL4g4KSG4KSqIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpK7gpYvgpKEg4KSu4KWH4KSCIOCksOClgOCkrOClguCknyDgpJXgpLDgpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkgj8g4KSH4KS44KS44KWHIOCkhuCkquCkleClhyDgpIfgpILgpLjgpY3gpJ/gpYngpLIg4KSV4KS/4KSPIOCkueClgeCkjyDgpLjgpK3gpYAg4KSk4KWD4KSk4KWA4KSvIOCkquCkleCljeCktyDgpJDgpKrgpY3gpLggIOCkheCkleCljeCkt+CkriDgpLngpYsg4KSc4KS+4KSP4KSC4KSX4KWHLiDgpJzgpKwg4KSG4KSqIOCkq+Ckv+CksCDgpLjgpYcg4KSw4KWA4KSs4KWC4KSfIOCkleCksOClh+CkguCkl+ClhyDgpKTgpYsg4KS14KWHIOCkquClgeCkqOCksOCljeCkuOCljeCkpeCkvuCkquCkv+CkpCDgpLngpYsg4KSc4KS+4KSP4KSC4KSX4KWHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiLgpLngpL7gpLIg4KSV4KWHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+IuCkleCli+CkiCDgpLngpL7gpLIg4KS54KWAIOCkleClhyDgpI/gpKrgpY3gpLgg4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX3JlY2VudF90YXNrcyIgbXNnaWQ9Ijg3OTQ5MDY2NTg3MzIxOTM0NzMiPiLgpJXgpYvgpIgg4KS54KS+4KSyIOCkueClgCDgpJXgpYcg4KSQ4KSq4KWN4KS4ICDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQwODQ3NzE0MDA4ODA1MzY2NSI+IuCkn+Clh+CkrOCksuClh+CknyDgpLXgpL/gpJXgpLLgpY3igI3gpKoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiLgpKvgpLzgpYvgpKgg4KS14KS/4KSV4KSy4KWN4oCN4KSqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+IuCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpLLgpYngpJUiPC9zdHJpbmc+CkBAIC0yMDUsOCArMjEwLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+IuCkmuCkv+CkpOCljeCksCDgpK/gpL4g4KS14KWA4KSh4KS/4KSv4KWLIOCkleCliOCkquCljeKAjeCkmuCksCDgpJXgpYcg4KSy4KS/4KSPIOCkleCliOCkruCksOClhyDgpKrgpLAg4KS44KWA4KSn4KWAIOCkquCkueClgeCkguCkmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc2NyZWVubG9jayIgbXNnaWQ9IjgyNzU1MDAxNzMzMzA3MTgxNjgiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KSy4KWJ4KSVIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc2NyZWVubG9jayIgbXNnaWQ9IjcwNjc0OTcxMjg5MjU0OTk0MDEiPiLgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkleClgCDgpLLgpYngpJUg4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleCkviDgpLXgpY3gpK/gpLXgpLngpL7gpLAg4KSq4KWN4KSw4KSt4KS+4KS14KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYAg4KSV4KWN4KS34KSu4KSk4KS+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hcHBJbmZvIiBtc2dpZD0iODAyODc4OTc2MjYzNDE0NzcyNSI+IuCkhuCkquCkleClhyDgpI/gpKrgpY3igI3gpLgg4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXBwSW5mbyIgbXNnaWQ9IjM5NTAzNzg1MzgwNDk2MjU5MDciPiLgpIXgpKrgpKjgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkquCksCDgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLXgpY3igI3gpK/gpLXgpLngpL7gpLAg4KSV4KWLIOCkquCljeCksOCkreCkvuCkteCkv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkleCljeCkt+CkruCkpOCkvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXBwSW5mbyIgbXNnaWQ9IjgwMjg3ODk3NjI2MzQxNDc3MjUiPiLgpIbgpKrgpJXgpYcg4KSQ4KSq4KWN4KS4IOCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FwcEluZm8iIG1zZ2lkPSIzOTUwMzc4NTM4MDQ5NjI1OTA3Ij4i4KSF4KSq4KSo4KWHIOCkieCkquCkleCksOCkoyDgpKrgpLAg4KSF4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpYcg4KS14KWN4oCN4KSv4KS14KS54KS+4KSwIOCkleCliyDgpKrgpY3gpLDgpK3gpL7gpLXgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleClgCDgpJXgpY3gpLfgpK7gpKTgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dhbGxwYXBlciIgbXNnaWQ9IjM4NTAyODAxNTgwNDExNzU5OTgiPiLgpLXgpYngpLLgpKrgpYfgpKrgpLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dhbGxwYXBlciIgbXNnaWQ9IjU2MzA0MTc4NTQ3NTA1NDAxNTQiPiLgpIngpKrgpJXgpLDgpKMg4KSV4KWAIOCkteClieCksuCkquClh+CkquCksCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSs4KSm4KSy4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1DbG9jayIgbXNnaWQ9IjQwNjUzNTc1OTIzNjYxMjk5MiI+IuCkmOCkoeCkvOClgCI8L3N0cmluZz4KQEAgLTIyNCw5ICsyMjksOSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbVRvb2xzIiBtc2dpZD0iNDY1MjE5MTY0NDA4MjcxNDA0OCI+IuCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJ/gpYLgpLIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbVRvb2xzIiBtc2dpZD0iODE2MjEwMjYwMjE5MDczNDMwNSI+IuCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpL4g4KSo4KS/4KSu4KWN4oCN4KSoLeCkuOCljeKAjeCkpOCksCDgpKrgpLngpYHgpILgpJog4KSU4KSwIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkoy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjM0NDYxNjQ1ODQ3MTA1OTY1MTMiPiLgpKHgpYfgpLXgpLLgpKrgpK7gpYfgpILgpJ8g4KSf4KWC4KSyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iNzA1ODgyODAzMjM1ODE0MjAxOCI+IuCkuOClgeCkteCkv+Ckp+CkvuCkj+CkgiDgpJzgpYsg4KSV4KWH4KS14KSyIOCkj+CkquCljeCkuCDgpKHgpYfgpLXgpLLgpKrgpLAg4KSV4KWHIOCksuCkv+CkjyDgpIbgpLXgpLbgpY3gpK/gpJUg4KS54KWI4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+IuCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLggVUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4i4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcgVUkg4KSV4KWLIOCkquCljeCksOCkreCkvuCkteCkv+CkpCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iNzA1ODgyODAzMjM1ODE0MjAxOCI+IuCkuOClgeCkteCkv+Ckp+CkvuCkj+CkgiDgpJzgpYsg4KSV4KWH4KS14KSyIOCkkOCkquCljeCkuCAg4KSh4KWH4KS14KSy4KSq4KSwIOCkleClhyDgpLLgpL/gpI8g4KSG4KS14KS24KWN4KSv4KSVIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiLgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaXNwbGF5IiBtc2dpZD0iNjA1MTAwMjAzMTkzMzAxMzcxNCI+IuCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIFVJIOCkleCliyDgpKrgpY3gpLDgpK3gpL7gpLXgpL/gpKQg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdG9yYWdlIiBtc2dpZD0iMTk3MTExODc3MDU0NjMzNjk2NiI+IuCkuOCkguCkl+CljeCksOCkueCkoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4iVVNCIOCkuOCkguCkl+CljeCksOCkueCkoyDgpK7gpYfgpIIg4KSq4KS54KWB4KSC4KSa4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSu4KWH4KSCIOCkquCkueClgeCkguCkmuClh+Ckgi4iPC9zdHJpbmc+CkBAIC0yMzcsNDQzICsyNDIsNDQ5IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+IuCkuOCljeCkquCksOCljeCktiDgpKbgpY3gpLXgpL7gpLDgpL4g4KSP4KSV4KWN4KS44KSq4KWN4KSy4KWL4KSwIOCkleCksOClh+CkgiDgpJXgpYsg4KSa4KS+4KSy4KWCIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiLgpLjgpY3gpKrgpLDgpY3gpLYg4KSV4KS/4KSPIOCkl+CkjyDgpIbgpIfgpJ/gpK4g4KSc4KS84KWL4KSwIOCkuOClhyDgpKzgpYvgpLLgpYcg4KSc4KS+4KSP4KSC4KSX4KWHIOCklOCksCDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KWLIOCknOClh+CkuOCljeCkmuCksCDgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkuOClhyDgpI/gpJXgpY3gpLjgpKrgpY3gpLLgpYvgpLAg4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpYfgpJfgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTczOTg4MTc2NjUyMjU5NDA3MyI+IuCkj+CkqOCljeCkueCkvuCkguCkuCDgpJXgpYAg4KSX4KSIIOCkteClh+CkrCDgpIbgpLjgpL7gpKgg4KSk4KSw4KWA4KSV4KS+IOCkmuCkvuCksuClgiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9Ijc4ODEwNjM5NjE1MDc1MTE3NjUiPiLgpI/gpKrgpY3gpLgg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkleCliyDgpIXgpKfgpL/gpJUg4KSq4KS54KWB4KSC4KSaLeCkr+Cli+Ckl+CljeCkryDgpKzgpKjgpL7gpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpJ8g4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJzgpL4g4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9Ijc4ODEwNjM5NjE1MDc1MTE3NjUiPiLgpJDgpKrgpY3gpLggIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJXgpYsg4KSF4KSn4KS/4KSVIOCkquCkueClgeCkguCkmi3gpK/gpYvgpJfgpY3gpK8g4KSs4KSo4KS+4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4KSV4KWN4KSw4KS/4KSq4KWN4KSfIOCkh+CkguCkuOCljeCkn+ClieCksiDgpJXgpL/gpI8g4KSc4KS+IOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iMjEwMzQ0MDM5MTkwMjQxMjE3NCI+IuCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSy4KS/4KSW4KWHIOCkueClgeCkjyDgpKrgpL7gpKAg4KSV4KWLIOCkp+CljeCkr+CkvuCkqCDgpLjgpYcg4KSm4KWH4KSW4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i4KSV4KWN4KSw4KWH4KSh4KS/4KSfIOCkleCkvuCksOCljeCkoSDgpKjgpILgpKzgpLAg4KSU4KSwIOCkquCkvuCkuOCkteCksOCljeCkoSDgpJzgpYjgpLjgpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCkoeClh+Ckn+CkviDgpLbgpL7gpK7gpL/gpLIg4KS54KWL4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSs4KS+4KSwIOCkheCkleCljeCkt+CkriDgpK/gpL4g4KSs4KSm4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS44KWN4KSl4KS/4KSk4KS/IOCkrOCkvuCksCDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KSo4KWHIOCkr+CkviDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSG4KSH4KSV4KSoIOCkleCliyDgpJzgpYvgpKHgpLzgpKjgpYcg4KSv4KS+IOCkqOCkv+CkleCkvuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpY3gpKXgpL/gpKTgpL8g4KSs4KS+4KSwIOCkheCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSv4KS+IOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpIbgpIfgpJXgpKgg4KSV4KWLIOCknOCli+CkoeCkvOCkqOClhyDgpK/gpL4g4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzI0NzI4MTkxMTM4NzkzMTQ4NSI+IuCkuOCljeKAjeCkpeCkv+CkpOCkvyDgpKzgpL7gpLAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzE2MTEzNjYwNzk1OTc2MDYwIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSs4KS+4KSwIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MTYxMTM2NjA3OTU5NzYwNjAiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCljeKAjeCkpeCkv+CkpOCkvyDgpKzgpL7gpLAg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSIxMTQ4MTk4Nzg1OTM3NDg5MjY0Ij4i4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkrOCkvuCksCDgpLXgpL/gpLjgpY3igI3gpKTgpYPgpKQv4KS44KSC4KSV4KWN4KS34KS/4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjY5MTc1NDk0MzcxMjk0MDExMzIiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOCljeCkpeCkv+CkpOCkvyDgpKzgpL7gpLAg4KSV4KWLIOCkteCkv+CkuOCljeCkpOClg+CkpCDgpK/gpL4g4KS44KSC4KSV4KWN4KS34KS/4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjY5MTc1NDk0MzcxMjk0MDExMzIiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpY3gpKXgpL/gpKTgpL8g4KSs4KS+4KSwIOCkleCliyDgpLXgpL/gpLjgpY3gpKTgpYPgpKQg4KSv4KS+IOCkuOCkguCkleCljeCkt+Ckv+CkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxfc2hvcnRjdXQiIG1zZ2lkPSI0Mjc5MDcwMjE2MzcxNTY0MjM0Ij4i4KS24KWJ4KSw4KWN4KSf4KSV4KSfIOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsX3Nob3J0Y3V0IiBtc2dpZD0iODM0MTI5NTkxNjI4NjczNjk5NiI+IuCkj+CkquCljeKAjeCksuCkv+CkleClh+CktuCkqCDgpJXgpYsg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleClhyDgpLngpLjgpY3igI3gpKTgpJXgpY3gpLfgpYfgpKog4KSV4KWHIOCkrOCkv+CkqOCkviDgpLngpYvgpK7gpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KS24KWJ4KSw4KWN4KSf4KSV4KSfIOCknOCli+CkoeCkvOCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91bmluc3RhbGxfc2hvcnRjdXQiIG1zZ2lkPSI0NzI5NjM0NTI0MDQ0MDAzNjk5Ij4i4KS24KWJ4KSw4KWN4KSf4KSV4KSfIOCkheCkqOCkh+CkguCkuOCljeCkn+ClieCksiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191bmluc3RhbGxfc2hvcnRjdXQiIG1zZ2lkPSI2NzQ1NzQzNDc0MjY1MDU3OTc1Ij4i4KSP4KSq4KWN4oCN4KSy4KS/4KSV4KWH4KS24KSoIOCkleCliyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSV4KWHIOCkueCkuOCljeKAjeCkpOCkleCljeCkt+Clh+CkqiDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkueCli+CkruCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpLbgpYngpLDgpY3gpJ/gpJXgpJ8g4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCkleClgCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+IuCkhuCkieCkn+Ckl+Cli+Ckh+CkguCklyDgpJXgpYngpLIg4KSV4KWLIOCkleCkueClgOCkgiDgpJTgpLAg4KSt4KWH4KSc4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSI1MzMxMzE4OTMxOTM3NDAyMDQwIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpIbgpIngpJ/gpJfgpYvgpIfgpILgpJcg4KSV4KWJ4KSyIOCkuOCkguCkuOCkvuCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSU4KSwIOCkoeCkvuCkr+CksiDgpJXgpL/gpI8g4KSc4KS+4KSo4KWHIOCkteCkvuCksuCkviDgpKjgpILgpKzgpLAg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpIbgpIngpJ/gpJfgpYvgpIfgpILgpJcg4KSV4KWJ4KSyIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSV4KSw4KSo4KWHLCDgpLDgpYDgpKHgpL7gpK/gpLDgpYfgpJXgpY3igI3gpJ8g4KSV4KSw4KSo4KWHLCDgpK/gpL4g4KSJ4KSo4KWN4oCN4KS54KWH4KSCIOCksOCli+CkleCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iNTMzMTMxODkzMTkzNzQwMjA0MCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSG4KSJ4KSf4KSX4KWL4KSH4KSC4KSXIOCkleClieCksiDgpLjgpILgpLjgpL7gpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCklOCksCDgpKHgpL7gpK/gpLIg4KSV4KS/4KSPIOCknOCkvuCkqOClhyDgpLXgpL7gpLLgpL4g4KSo4KSC4KSs4KSwIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkkOCkquCljeCkuCDgpJXgpYsg4KSG4KSJ4KSf4KSX4KWL4KSH4KSC4KSXIOCkleClieCksiDgpJXgpYAg4KSo4KS/4KSX4KSw4KS+4KSo4KWAIOCkleCksOCkqOClhywg4KSw4KWA4KSh4KS+4KSv4KSw4KWH4KSV4KWN4oCN4KSfIOCkleCksOCkqOClhywg4KSv4KS+IOCkieCkqOCljeKAjeCkueClh+CkgiDgpLDgpYvgpJXgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVTbXMiIG1zZ2lkPSI4NjczNDcxNzY4OTQ3ODk1MDgyIj4i4KSq4KS+4KSgIOCkuOCkguCkpuClh+CktiAoU01TKSDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIFNNUyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJTgpLAg4KS44KSC4KS44KS+4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpL4g4KSF4KSw4KWN4KSlIOCkueCliCDgpJXgpL8g4KSP4KSq4KWN4KS4IOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkreClh+CknOClhyDgpJfgpI8g4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSG4KSq4KSV4KWLIOCkpuCkv+CkluCkvuCkjyDgpKzgpL/gpKjgpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkieCkqOCljeKAjeCkueClh+CkgiDgpLngpJ/gpL4g4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlU21zIiBtc2dpZD0iNjQyNDM4Nzc1NDIyODc2NjkzOSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIFNNUyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJTgpLAg4KS44KSC4KS44KS+4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpL4g4KSF4KSw4KWN4KSlIOCkueCliCDgpJXgpL8g4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkquCksCDgpK3gpYfgpJzgpYcg4KSX4KSPIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYAg4KSo4KS/4KSX4KSw4KS+4KSo4KWAIOCkhuCkquCkleCliyDgpKbgpL/gpJbgpL7gpI8g4KSs4KS/4KSo4KS+IOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWIIOCklOCksCDgpIngpKjgpY3igI3gpLngpYfgpIIg4KS54KSf4KS+IOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlTW1zIiBtc2dpZD0iMTgyMTMxNzM0NDY2ODI1NzA5OCI+IuCkquCkvuCkoCDgpLjgpILgpKbgpYfgpLYgKE1NUykg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVNbXMiIG1zZ2lkPSI1MzMwMTk0MzcyNjMyMTIyNjAiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIE1NUyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJTgpLAg4KS44KSC4KS44KS+4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpL4g4KSF4KSw4KWN4KSlIOCkueCliCDgpJXgpL8g4KSP4KSq4KWN4KS4IOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkreClh+CknOClhyDgpJfgpI8g4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSG4KSq4KSV4KWLIOCkpuCkv+CkluCkvuCkjyDgpKzgpL/gpKjgpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkieCkqOCljeKAjeCkueClh+CkgiDgpLngpJ/gpL4g4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlTW1zIiBtc2dpZD0iNTMzMDE5NDM3MjYzMjEyMjYwIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsgTU1TIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYsg4KSq4KWN4KSw4KS+4KSq4KWN4oCN4KSkIOCklOCksCDgpLjgpILgpLjgpL7gpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkleCkviDgpIXgpLDgpY3gpKUg4KS54KWIIOCkleCkvyDgpJDgpKrgpY3gpLggIOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkreClh+CknOClhyDgpJfgpI8g4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSG4KSq4KSV4KWLIOCkpuCkv+CkluCkvuCkjyDgpKzgpL/gpKjgpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkieCkqOCljeKAjeCkueClh+CkgiDgpLngpJ/gpL4g4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4i4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkquCljeCksOCkuOCkvuCksOCkoyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9Ijg0ODUyNDA3MDI2MjQzMTk3NCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSU4KSwIOCkuOCkguCkuOCkvuCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYfgpLXgpLIg4KS44KS/4KS44KWN4KSf4KSuIOCkj+CkquCljeCkuCDgpK7gpYfgpIIg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iODQ4NTI0MDcwMjYyNDMxOTc0Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSU4KSwIOCkuOCkguCkuOCkvuCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYfgpLXgpLIg4KS44KS/4KS44KWN4KSf4KSuIOCkkOCkquCljeCkuCAg4KSu4KWH4KSCIOCkieCkquCksuCkrOCljeCkpyDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSIxNTk4MzI4ODQzNjE5NjQ2MTY2Ij4i4KS44KWH4KSyIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpILgpKbgpYfgpLYg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iNjM2MTk3Mjc3NjA4MDQ1ODk3OSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkieCkquCkleCksOCkoyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSV4KWB4KSbIOCkuOCljeKAjeCkpeCkvuCkqOCli+CkgiDgpKrgpLAg4KSG4KSq4KSV4KWLIOCkhuCkquCkvuCkpOCkleCkvuCksuClgOCkqCDgpLjgpY3igI3gpKXgpL/gpKTgpL/gpK/gpYvgpIIg4KSV4KWAIOCkmuClh+CkpOCkvuCkteCkqOClgCDgpKbgpYfgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpYfgpLIg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkheCksuCksOCljeCknyDgpLXgpL/gpKTgpLDgpL/gpKQg4KSV4KS/4KSPIOCknOCkvuCkpOClhyDgpLngpYjgpIIuIOCkhuCkquCkvuCkpOCkleCkvuCksuClgOCkqCDgpLjgpYfgpLIg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkquCljeCksOCkvuCkquCljeCkpCDgpLngpYvgpKjgpYcg4KSq4KSwIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3igI3gpLgg4KSG4KSq4KSV4KWHIOCkieCkquCkleCksOCkoyDgpJXgpYcg4KSo4KS/4KS34KWN4oCN4KSq4KS+4KSm4KSoIOCkr+CkviDgpLjgpILgpJrgpL7gpLLgpKgg4KSu4KWH4KSCIOCkueCkuOCljeKAjeCkpOCkleCljeCkt+Clh+CkqiDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KS44KWH4KSyIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpJXgpYHgpJsg4KS44KWN4oCN4KSl4KS+4KSo4KWL4KSCIOCkquCksCDgpIbgpKrgpJXgpYsg4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkuOCljeKAjeCkpeCkv+CkpOCkv+Ckr+Cli+CkgiDgpJXgpYAg4KSa4KWH4KSk4KS+4KS14KSo4KWAIOCkpuClh+CkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSF4KSy4KSw4KWN4KSfIOCkteCkv+CkpOCksOCkv+CkpCDgpJXgpL/gpI8g4KSc4KS+4KSk4KWHIOCkueCliOCkgi4g4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkueCli+CkqOClhyDgpKrgpLAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkleClhyDgpKjgpL/gpLfgpY3igI3gpKrgpL7gpKbgpKgg4KSv4KS+IOCkuOCkguCkmuCkvuCksuCkqCDgpK7gpYfgpIIg4KS54KS44KWN4oCN4KSk4KSV4KWN4KS34KWH4KSqIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiJTTVMg4KS44KSC4KSm4KWH4KS2IOCkreClh+CknOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRTbXMiIG1zZ2lkPSI3MDk0NzI5Mjk4MjA0OTM3NjY3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyBTTVMg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpK3gpYfgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KSV4KWHIOCkquCksOCkv+Cko+CkvuCkruCkuOCljeCkteCksOClguCkqiDgpIXgpKrgpY3gpLDgpKTgpY3igI3gpK/gpL7gpLbgpL/gpKQg4KS24KWB4KSy4KWN4oCN4KSVIOCksuCkvuCkl+ClgiDgpLngpYsg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYAg4KSq4KWB4KS34KWN4KSf4KS/IOCkleClhyDgpKzgpL/gpKjgpL4g4KS44KSC4KSm4KWH4KS2IOCkreClh+CknOCkleCksCDgpIbgpKrgpJXgpL4g4KSn4KSoIOCkteCljeKAjeCkr+CkryDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIFNNUyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpYcg4KSq4KSw4KS/4KSj4KS+4KSu4KS44KWN4KS14KSw4KWC4KSqIOCkheCkquCljeCksOCkpOCljeKAjeCkr+CkvuCktuCkv+CkpCDgpLbgpYHgpLLgpY3igI3gpJUg4KSy4KS+4KSX4KWCIOCkueCliyDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYAg4KSq4KWB4KS34KWN4KSf4KS/IOCkleClhyDgpKzgpL/gpKjgpL4g4KS44KSC4KSm4KWH4KS2IOCkreClh+CknOCkleCksCDgpIbgpKrgpJXgpL4g4KSn4KSoIOCkteCljeKAjeCkr+CkryDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4i4KS44KSC4KSm4KWH4KS2LeCkpuCljeCkteCkvuCksOCkvi3gpJzgpLXgpL7gpKwg4KSt4KWH4KSc4KWH4KSCIOCkiOCkteClh+CkguCknyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4i4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCkleClieCksiDgpJXgpYcg4KS44KSC4KSm4KWH4KS2LeCkpuCljeCkteCkvuCksOCkvi3gpJzgpLXgpL7gpKwg4KSm4KWH4KSo4KWHIOCkleClhyDgpIjgpLXgpYfgpILgpJ8g4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPLCDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkheCkqOCljeCkryDgpLjgpILgpKbgpYfgpLYg4KS44KWH4KS14KS+IOCkj+CkquCljeCkuCDgpJXgpYsg4KSF4KSo4KWB4KSw4KWL4KSnIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4i4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCkleClieCksiDgpJXgpYcg4KS44KSC4KSm4KWH4KS2LeCkpuCljeCkteCkvuCksOCkvi3gpJzgpLXgpL7gpKwg4KSm4KWH4KSo4KWHIOCkleClhyDgpIjgpLXgpYfgpILgpJ8g4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPLCDgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKjgpY3gpK8g4KS44KSC4KSm4KWH4KS2IOCkuOClh+CkteCkviDgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKjgpYHgpLDgpYvgpKcg4KSt4KWH4KSc4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+IuCkheCkquCkqOClhyDgpKrgpL7gpKAg4KS44KSC4KSm4KWH4KS2IChTTVMg4KSv4KS+IE1NUykg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpK/gpL4gU0lNIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIFNNUyDgpLjgpILgpKbgpYfgpLYg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSv4KS+IOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkj+CkquCljeCkuCDgpLjgpK3gpYAgU01TIOCkuOCkguCkpuClh+CktiDgpKrgpKLgpLwg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY5NTk2NzUzMzQ1NzI0MDU1MCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpK/gpL4gU0lNIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIFNNUyDgpLjgpILgpKbgpYfgpLYg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSv4KS+IOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkj+CkquCljeCkuCDgpLjgpK3gpYAgU01TIOCkuOCkguCkpuClh+CktiDgpKrgpKLgpLwg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpK/gpL4gU0lNIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIFNNUyDgpLjgpILgpKbgpYfgpLYg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSv4KS+IOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkkOCkquCljeCkuCAg4KS44KSt4KWAIFNNUyDgpLjgpILgpKbgpYfgpLYg4KSq4KSi4KS8IOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkr+CkviBTSU0g4KSV4KS+4KSw4KWN4KShIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQgU01TIOCkuOCkguCkpuClh+CktiDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KS44KWHIOCkuOCkvuCkruCkl+CljeCksOClgCDgpK/gpL4g4KSX4KWL4KSq4KSo4KWA4KSv4KSk4KS+IOCkquCksCDgpKfgpY3gpK/gpL7gpKgg4KSm4KS/4KSPIOCkrOCkv+CkqOCkviwg4KSQ4KSq4KWN4KS4ICDgpLjgpK3gpYAgU01TIOCkuOCkguCkpuClh+CktiDgpKrgpKLgpLwg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+IuCkheCkquCkqOClhyDgpKrgpL7gpKAg4KS44KSC4KSm4KWH4KS2IChTTVMg4KSv4KS+IE1NUykg4KS44KSC4KSq4KS+4KSm4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkr+CkviDgpLjgpL/gpK4g4KSV4KS+4KSw4KWN4KShIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQgU01TIOCkuOCkguCkpuClh+CktuCli+CkgiDgpK7gpYfgpIIg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KSG4KSq4KSV4KWHIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYsg4KS54KSf4KS+IOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkr+CkviDgpLjgpL/gpK4g4KSV4KS+4KSw4KWN4KShIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQgU01TIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYsg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguICDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkhuCkquCkleClhyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkueCkn+CkviDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpK/gpL4g4KS44KS/4KSuIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIFNNUyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSu4KWH4KSCIOCksuCkv+CkluCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYcg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpLngpJ/gpL4g4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkr+CkviDgpLjgpL/gpK4g4KSV4KS+4KSw4KWN4KShIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQgU01TIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYsg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguICDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYcg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpLngpJ/gpL4g4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+IuCkquCkvuCkoCDgpLjgpILgpKbgpYfgpLYgKFdBUCkg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4i4KSP4KSq4KWN4KS4IOCkleCliyBXQVAg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSU4KSwIOCkuOCkguCkuOCkvuCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpK7gpYfgpIIg4KSG4KSq4KSV4KWLIOCkreClh+CknOClhyDgpJfgpI8g4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSG4KSq4KSV4KWLIOCkpuCkv+CkluCkvuCkjyDgpKzgpL/gpKjgpL4g4KSV4KSw4KSo4KWHIOCklOCksCDgpLngpJ/gpL7gpKjgpYcg4KSV4KWAIOCkleCljeCkt+CkruCkpOCkviDgpLbgpL7gpK7gpL/gpLIg4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4i4KSa4KSyIOCksOCkueClhyDgpI/gpKrgpY3igI3gpLgg4KSq4KWB4KSo4KSw4KWN4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkruClh+CkgiDgpJTgpLAg4KS54KS+4KSyIOCkueClgCDgpK7gpYfgpIIg4KSa4KSyIOCksOCkueClhyDgpJXgpL7gpLDgpY3gpK/gpYvgpIIg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleCliyDgpKrgpYHgpKg6IOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KS44KWHIOCkj+CkquCljeCkuCDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkieCkquCkr+Cli+CklyDgpJXgpL/gpI8g4KSX4KSPIOCkj+CkquCljeCkuCDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSW4KWL4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiLgpJDgpKrgpY3gpLggIOCkleCliyBXQVAg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSU4KSwIOCkuOCkguCkuOCkvuCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpK7gpYfgpIIg4KSG4KSq4KSV4KWLIOCkreClh+CknOClhyDgpJfgpI8g4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSG4KSq4KSV4KWLIOCkpuCkv+CkluCkvuCkjyDgpKzgpL/gpKjgpL4g4KSV4KSw4KSo4KWHIOCklOCksCDgpLngpJ/gpL7gpKjgpYcg4KSV4KWAIOCkleCljeCkt+CkruCkpOCkviDgpLbgpL7gpK7gpL/gpLIg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4i4KSa4KSyIOCksOCkueClhyDgpJDgpKrgpY3gpLgg4KSq4KWB4KSo4KSw4KWN4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkteCksOCljeCkpOCkruCkvuCkqCDgpK7gpYfgpIIg4KSU4KSwIOCkueCkvuCksiDgpLngpYAg4KSu4KWH4KSCIOCkmuCksiDgpLDgpLngpYcg4KSV4KS+4KSw4KWN4KSv4KWL4KSCIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYsg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJDgpKrgpY3gpLggIOCkieCkquCkleCksOCkoyDgpKrgpLAg4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+CkjyDgpJfgpI8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSW4KWL4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+IuCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkk+CkgiDgpJXgpYcg4KSs4KWA4KSaIOCkuOCkueCkreCkvuCkl+Ckv+CkpOCkviDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iMzY0NjcwOTYzNjIzMzg1Nzg2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkreCkv+CkqOCljeCkqCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpJPgpIIg4KSV4KWHIOCkrOClgOCkmiDgpJXgpL7gpLDgpY3gpK8g4KSo4KS/4KS34KWN4KSq4KS+4KSm4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkk+CkgiDgpJXgpYcg4KSs4KWA4KSaIOCkuOClgeCksOCkleCljeCkt+CkviDgpJXgpL4g4KSJ4KSy4KWN4KSy4KSC4KSY4KSoIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJhY3RBY3Jvc3NVc2VycyIgbXNnaWQ9IjM2NDY3MDk2MzYyMzM4NTc4NiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkieCkquCkleCksOCkoyDgpKrgpLAg4KSt4KS/4KSo4KWN4KSoIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkk+CkgiDgpJXgpYcg4KSs4KWA4KSaIOCkleCkvuCksOCljeCkryDgpKjgpL/gpLfgpY3gpKrgpL7gpKbgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkk+CkgiDgpJXgpYcg4KSs4KWA4KSaIOCkuOClgeCksOCkleCljeCkt+CkviDgpJXgpL4g4KSJ4KSy4KWN4KSy4KSC4KSY4KSoIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjI1Njc3MzQyODU1NDUwNzQxMDUiPiLgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpJPgpIIg4KSV4KWHIOCkrOClgOCkmiDgpLjgpLngpK3gpL7gpJfgpL/gpKTgpL4g4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSq4KWC4KSw4KWN4KSjIOCksuCkvuCkh+CkuOClh+CkguCkuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMzc2ODQxMzY4Mzk1NTAyMzY2Ij4i4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KST4KSCIOCkleClhyDgpKzgpYDgpJog4KS44KSt4KWAIOCkuOCkguCkreCktSDgpLjgpLngpK3gpL7gpJfgpL/gpKTgpL4g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2VycyIgbXNnaWQ9IjE2NzYxNTA5MTE2NzIyODI0MjgiPiLgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSJ4KSq4KSV4KSw4KSjIOCkquCksCDgpJXgpY3gpLXgpYfgpLDgpYAsIOCkqOCkv+CksOCljeCkruCkvuCkoyDgpJTgpLAg4KS54KSf4KS+4KSo4KWHIOCkuOCkueCkv+CkpCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpJPgpIIg4KSV4KWLIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkuOClgeCkteCkv+Ckp+CkviDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjYyMjk0Njg2NzQ3NTM1Mjk1MDEiPiLgpJrgpLIg4KSw4KS54KWHIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KS14KS/4KS14KSw4KSjIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXREZXRhaWxlZFRhc2tzIiBtc2dpZD0iMTUzODI0NzQxNDQwNzE3NTk5Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSu4KWH4KSCIOCklOCksCDgpLngpL7gpLIg4KS54KWAIOCkruClh+CkgiDgpJrgpLIg4KSw4KS54KWHIOCkleCkvuCksOCljeCkr+Cli+CkgiDgpJXgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSW4KWL4KScIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4i4KSa4KSyIOCksOCkueClhyDgpI/gpKrgpY3igI3gpLgg4KSq4KWB4KSoOiDgpJXgpY3gpLDgpK7gpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVvcmRlclRhc2tzIiBtc2dpZD0iNzczNDIxNzc1NDg3NzQzOTM1MSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSV4KS+4KSw4KWN4KSv4KWL4KSCIOCkleCliyDgpIXgpJfgpY3gpLDgpK3gpYLgpK7gpL8g4KSU4KSwIOCkquClg+Ckt+CljeKAjeCkoOCkreClguCkruCkvyDgpKrgpLAg4KSy4KWHIOCknOCkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpI/gpKrgpY3gpLgg4KSG4KSq4KSV4KWHIOCkh+CkqOCkquClgeCknyDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkr+CkuSDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZVRhc2tzIiBtc2dpZD0iNjgyMTUxMzQwMTg3MDM3NzQwMyI+IuCkmuCksuCkqOClhyDgpLXgpL7gpLLgpYcg4KSP4KSq4KWN4KS4IOCksOCli+CkleClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlbW92ZVRhc2tzIiBtc2dpZD0iMTM5NDcxNDM1MjA2MjYzNTQ5MyI+IuCkleCkv+CkuOClgCDgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkleCkvuCksOCljeCkr+Cli+CkgiDgpJXgpYsg4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCklOCksCDgpIngpKjgpJXgpYcg4KSP4KSq4KWN4oCN4KS4IOCkuOCkruCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleCkviDgpLXgpY3igI3gpK/gpLXgpLngpL7gpLAg4KSs4KS+4KSn4KS/4KSkIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkieCkquCkleCksOCkoyDgpKrgpLAg4KSV4KWN4KS14KWH4KSw4KWALCDgpKjgpL/gpLDgpY3gpK7gpL7gpKMg4KSU4KSwIOCkueCkn+CkvuCkqOClhyDgpLjgpLngpL/gpKQg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KST4KSCIOCkleCliyDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleClgCDgpLjgpYHgpLXgpL/gpKfgpL4g4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4i4KSa4KSyIOCksOCkueClhyDgpJDgpKrgpY3gpLgg4KSV4KWHIOCkteCkv+CkteCksOCkoyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjE1MzgyNDc0MTQ0MDcxNzU5OSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkteCksOCljeCkpOCkruCkvuCkqCDgpK7gpYfgpIIg4KSU4KSwIOCkueCkvuCksiDgpLngpYAg4KSu4KWH4KSCIOCkmuCksiDgpLDgpLngpYcg4KSV4KS+4KSw4KWN4KSv4KWL4KSCIOCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpKjgpL/gpJzgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkluCli+CknCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVvcmRlclRhc2tzIiBtc2dpZD0iMjAxODU3NTUyNjkzNDQyMjc3OSI+IuCkmuCksiDgpLDgpLngpYcg4KSQ4KSq4KWN4KS4IOCkquClgeCkqDog4KSV4KWN4KSw4KSu4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpJXgpL7gpLDgpY3gpK/gpYvgpIIg4KSV4KWLIOCkheCkl+CljeCksOCkreClguCkruCkvyDgpJTgpLAg4KSq4KWD4KS34KWN4oCN4KSg4KSt4KWC4KSu4KS/IOCkquCksCDgpLLgpYcg4KSc4KS+4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWHIOCkh+CkqOCkquClgeCknyDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkr+CkuSDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZVRhc2tzIiBtc2dpZD0iNjgyMTUxMzQwMTg3MDM3NzQwMyI+IuCkmuCksuCkqOClhyDgpLXgpL7gpLLgpYcg4KSQ4KSq4KWN4KS4ICDgpLDgpYvgpJXgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW1vdmVUYXNrcyIgbXNnaWQ9IjEzOTQ3MTQzNTIwNjI2MzU0OTMiPiLgpJXgpL/gpLjgpYAg4KSQ4KSq4KWN4KS4IOCkleCliyDgpJXgpL7gpLDgpY3gpK/gpYvgpIIg4KSV4KWLIOCkqOCkv+CkleCkvuCksuCkqOClhyDgpJTgpLAg4KSJ4KSo4KSV4KWHIOCkkOCkquCljeCkuCDgpLjgpK7gpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSF4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpL4g4KS14KWN4oCN4KSv4KS14KS54KS+4KSwIOCkrOCkvuCkp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iNzM5MTE5MTM4NDAyNzMwMzA2NSI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpLjgpY3gpJ/gpYjgpJUg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iMTYxNTg4MTkzMzAzNDA4NDQ0MCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSQ4KS44KWHIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpLjgpY3gpJ/gpYjgpJUg4KSc4KWL4KSh4KS84KSo4KWHLCDgpKjgpL/gpJXgpL7gpLLgpKjgpYcsIOCklOCksCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpL/gpKjgpK7gpYfgpIIg4KSF4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpJrgpLLgpKTgpYcg4KS54KWL4KSCLiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCkteCljeCkr+CkteCkueCkvuCksCDgpK7gpYfgpIIg4KSs4KS+4KSn4KS+IOCkoeCkvuCksiDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iMTYxNTg4MTkzMzAzNDA4NDQ0MCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkkOCkuOClhyDgpJfgpKTgpL/gpLXgpL/gpKfgpL8g4KS44KWN4KSf4KWI4KSVIOCknOCli+CkoeCkvOCkqOClhywg4KSo4KS/4KSV4KS+4KSy4KSo4KWHLCDgpJTgpLAg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSc4KS/4KSo4KSu4KWH4KSCIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkmuCksuCkpOClhyDgpLngpYvgpIIuIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpLXgpY3gpK/gpLXgpLngpL7gpLAg4KSu4KWH4KSCIOCkrOCkvuCkp+CkviDgpKHgpL7gpLIg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSIyOTE4NzY4MjM4MDQ1MjA2NDU2Ij4i4KSV4KWL4KSIIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9Ijk5NzgyMzY5NTM0MzU4NDAwMSI+IuCkheCkqOClgeCkruCkpOCkvyDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSv4KS+IOCkqOCkv+CksOCljeCkr+CkvuCkpCDgpJXgpYAg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkquCksCDgpKfgpY3igI3gpK/gpL7gpKgg4KSm4KS/4KSPIOCkrOCkv+CkqOCkviwg4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpJXgpYvgpIgg4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkquCljeCksOCkvuCksOCkguCkrSDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iOTk3ODIzNjk1MzQzNTg0MDAxIj4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkuOClgeCksOCkleCljeCkt+CkviDgpK/gpL4g4KSo4KS/4KSw4KWN4KSv4KS+4KSkIOCkleClgCDgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSq4KSwIOCkp+CljeKAjeCkr+CkvuCkqCDgpKbgpL/gpI8g4KSs4KS/4KSo4KS+LCDgpJDgpKrgpY3gpLgg4KSV4KWLIOCkleCli+CkiCDgpJfgpKTgpL/gpLXgpL/gpKfgpL8g4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KS44KSC4KSX4KSk4KSk4KS+IOCkuOClh+CknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRTY3JlZW5Db21wYXRpYmlsaXR5IiBtc2dpZD0iNjkyMDQzNjE4NjkzOTE3Mzc0Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KS44KSC4KSX4KSk4KSk4KS+IOCkruCli+CkoSDgpJXgpYsg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4oCN4KS4IOCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KS+IOCkteCljeKAjeCkr+CkteCkueCkvuCksCDgpKzgpL7gpKfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXREZWJ1Z0FwcCIgbXNnaWQ9IjMwMjIxMDcxOTg2ODY1ODQwNTIiPiLgpI/gpKrgpY3igI3gpLgg4KSh4KWA4KSs4KSXIOCkleCksOCkqOCkviDgpLjgpJXgpY3gpLfgpK4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0RGVidWdBcHAiIG1zZ2lkPSI0NDc0NTEyNDE2Mjk5MDEzMjU2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSh4KWA4KSs4KSXIOCkleCkv+Ckr+CkviDgpJzgpL7gpKjgpL4g4KSa4KS+4KSy4KWCIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSF4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpJXgpYsg4KS44KSu4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTIwNDM2MTg2OTM5MTczNzQiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpLjgpILgpJfgpKTgpKTgpL4g4KSu4KWL4KShIOCkleCliyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSF4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpL4g4KS14KWN4oCN4KSv4KS14KS54KS+4KSwIOCkrOCkvuCkp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldERlYnVnQXBwIiBtc2dpZD0iMzAyMjEwNzE5ODY4NjU4NDA1MiI+IuCkkOCkquCljeCkuCDgpKHgpYDgpKzgpJcg4KSV4KSw4KSo4KS+IOCkuOCkleCljeCkt+CkriDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXREZWJ1Z0FwcCIgbXNnaWQ9IjQ0NzQ1MTI0MTYyOTkwMTMyNTYiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSy4KS/4KSPIOCkoeClgOCkrOCklyDgpJXgpL/gpK/gpL4g4KSc4KS+4KSo4KS+IOCkmuCkvuCksuClgiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KSu4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQxNjIwOTIxODUxMjQyMzQ0ODAiPiLgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkuOClh+Ckn+Ckv+CkguCklyDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb25maWd1cmF0aW9uIiBtc2dpZD0iNDM3MjIyMzg3MzE1NDI5NjA3NiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCwg4KSc4KWI4KS44KWHIOCkuOCljeCkpeCkvuCkqCDgpK/gpL4g4KS44KSu4KSX4KWN4KSwIOCkheCkleCljeCkt+CksOCli+CkgiDgpJXgpL4g4KSG4KSV4KS+4KSwLCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb25maWd1cmF0aW9uIiBtc2dpZD0iNDM3MjIyMzg3MzE1NDI5NjA3NiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkteCksOCljeCkpOCkruCkvuCkqCDgpJXgpYngpKjgpY3gpKvgpLzgpL/gpJfgpLDgpYfgpLbgpKgsIOCknOCliOCkuOClhyDgpLjgpY3gpKXgpL7gpKgg4KSv4KS+IOCkuOCkruCkl+CljeCksCDgpIXgpJXgpY3gpLfgpLDgpYvgpIIg4KSV4KS+IOCkhuCkleCkvuCksCwg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9lbmFibGVDYXJNb2RlIiBtc2dpZD0iNTY4NDUwNDA1ODE5MjkyMTA5OCI+IuCkleCkvuCksCDgpK7gpYvgpKEg4KS44KSV4KWN4KS34KSuIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI0ODUzMTg3NDI1NzUxNDE5NDY3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpJXgpL7gpLAg4KSu4KWL4KShIOCkuOCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+IuCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iNDU5MzM1MzIzNTk1OTczMzExOSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYAg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkk+CkgiDgpJXgpYsg4KS44KSu4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpJXgpL4g4KSa4KSy4KSo4KS+IOCksOCli+CklSDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSIyMzI5NjI3NDI4ODMyMDY3NzAwIj4i4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSF4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VCYWNrIiBtc2dpZD0iNjUyOTM1MjA0MDcyNTg0NjE2Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlQmFjayIgbXNnaWQ9IjM4OTIyOTU4MzA0MTk1MTM2MjMiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkheCkl+CljeCksOCkreClguCkruCkvyDgpK7gpYfgpIIg4KSa4KSyIOCksOCkueClgCDgpJXgpYvgpIgg4KSt4KWAIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOCkqOClhyDgpJTgpLAg4KS14KS+4KSq4KS4IOCknOCkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpJXgpL7gpLAg4KSu4KWL4KShIOCkuOCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+IuCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iNDU5MzM1MzIzNTk1OTczMzExOSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWAIOCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL7gpJPgpIIg4KSV4KWLIOCkuOCkruCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleCkviDgpJrgpLLgpKjgpL4g4KSw4KWL4KSVIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjIzMjk2Mjc0Mjg4MzIwNjc3MDAiPiLgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkrOCksuCkquClguCksOCljeCkteCklSDgpKzgpILgpKYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSI1MjUzMTU3Mjk2MTgzOTQwODEyIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSF4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSs4KSy4KSq4KWC4KSw4KWN4KS14KSVIOCkrOCkguCkpiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlQmFjayIgbXNnaWQ9IjY1MjkzNTIwNDA3MjU4NDYxNiI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSs4KSy4KSq4KWC4KSw4KWN4KS14KSVIOCkrOCkguCkpiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZUJhY2siIG1zZ2lkPSIzODkyMjk1ODMwNDE5NTEzNjIzIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSF4KSX4KWN4KSw4KSt4KWC4KSu4KS/IOCkruClh+CkgiDgpJrgpLIg4KSw4KS54KWAIOCkleCli+CkiCDgpK3gpYAg4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkrOCksuCkquClguCksOCljeCkteCklSDgpKzgpILgpKYg4KSV4KSw4KSo4KWHIOCklOCksCDgpLXgpL7gpKrgpLgg4KSc4KS+4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2R1bXAiIG1zZ2lkPSIxNjgxNzk5ODYyNDM4OTU0NzUyIj4i4KS44KS/4KS44KWN4oCN4KSf4KSuIOCkleClgCDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KS/4KS44KWN4oCN4KSf4KSuIOCkleClgCDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpLXgpL/gpK3gpL/gpKjgpY3igI3gpKgg4KSq4KWN4KSw4KSV4KS+4KSwIOCkleClgCDgpKjgpL/gpJzgpYAg4KSU4KSwIOCkuOClgeCksOCkleCljeCkt+CkviDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCknOCkv+CkqOCkleClgCDgpIngpKjgpY3igI3gpLngpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSv4KSkOiDgpIbgpLXgpLbgpY3igI3gpK/gpJXgpKTgpL4g4KSo4KS54KWA4KSCIOCkueCli+CkpOClgC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KS/4KS44KWN4oCN4KSf4KSuIOCkleClgCDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpLXgpL/gpK3gpL/gpKjgpY3igI3gpKgg4KSq4KWN4KSw4KSV4KS+4KSwIOCkleClgCDgpKjgpL/gpJzgpYAg4KSU4KSwIOCkuOClgeCksOCkleCljeCkt+CkviDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCknOCkv+CkqOCkleClgCDgpIngpKjgpY3igI3gpLngpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSv4KSkOiDgpIbgpLXgpLbgpY3igI3gpK/gpJXgpKTgpL4g4KSo4KS54KWA4KSCIOCkueCli+CkpOClgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iODAyMjU4ODYwODk5NDU4OTkzOCI+IuCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSq4KWB4KSo4KSw4KWN4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iMzE5MzI2OTA2OTQ2OTcwMDI2NSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KSV4KWN4KSw4KS/4KSvIOCkteCkv+CkguCkoeCliyDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpLXgpL/gpILgpKHgpYsg4KSV4KWAIOCkuOCkguCkquClguCksOCljeCkoyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCklOCksCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSV4KWLIOCkm+Cli+CkoeCkvOCkleCksCDgpIfgpLjgpJXgpYcg4KS44KSt4KWAIOCkquCkvuCkoCDgpJzgpL7gpILgpJog4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjMxOTMyNjkwNjk0Njk3MDAyNjUiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCkleCljeCksOCkv+CkryDgpLXgpL/gpILgpKHgpYsg4KSV4KWAIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpYHgpKjgpLDgpY3gpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KS14KS/4KSC4KSh4KWLIOCkleClgCDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgiDgpJTgpLAg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkleCliyDgpJvgpYvgpKHgpLzgpJXgpLAg4KSH4KS44KSV4KWHIOCkuOCkreClgCDgpKrgpL7gpKAg4KSc4KS+4KSC4KSaIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl90ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIyMzEyNjEyMTM1MTI3MzEwMjU0Ij4i4KSG4KS44KS+4KSoIOCkpOCksOClgOCkleCkviDgpJXgpYsg4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkqiDgpLjgpYcg4KS44KSV4KWN4KS34KSuIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkieCkquCkleCksOCkoyDgpKrgpLAg4KSG4KS44KS+4KSoIOCkpOCksOClgOCkleCkviDgpJXgpYsg4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkqiDgpLjgpYcg4KS44KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJXgpYAg4KS44KS54KSu4KSk4KS/IOCkleClhyDgpKzgpL/gpKjgpL4g4KSG4KS44KS+4KSoIOCkpOCksOClgOCkleCkviDgpJXgpYsg4KS44KSV4KWN4KS34KSuIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkhuCkuOCkvuCkqCDgpKTgpLDgpYDgpJXgpL4g4KSV4KWLIOCkheCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKog4KS44KWHIOCkuOCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleClgCDgpLjgpLngpK7gpKTgpL8g4KSV4KWHIOCkrOCkv+CkqOCkviDgpIbgpLjgpL7gpKgg4KSk4KSw4KWA4KSV4KS+IOCkleCliyDgpLjgpJXgpY3gpLfgpK4g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9Ijg1MzIyOTUxOTkxMTI1MTkzNzgiPiLgpLXgpL/gpILgpKHgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9IjQ5OTg4MzYzNzA0MjQxODY4NDkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkteCkv+CkguCkoeCliyDgpKrgpY3gpLDgpKzgpILgpKfgpJUg4KS44KWHIHdpbmRvd3Mg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KS/4KS44KWN4KSf4KSuIOCkieCkquCkr+Cli+CklyDgpJXgpYcg4KSy4KS/4KSPIOCkheCkreCkv+CkquCljeCksOClh+CkpCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9IjQ5OTg4MzYzNzA0MjQxODY4NDkiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkteCkv+CkguCkoeCliyDgpKrgpY3gpLDgpKzgpILgpKfgpJUg4KS44KWHIHdpbmRvd3Mg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KS/4KS44KWN4KSf4KSuIOCkieCkquCkr+Cli+CklyDgpJXgpYcg4KSy4KS/4KSPIOCkheCkreCkv+CkquCljeCksOClh+CkpCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4Njc1NTM1NjQ4ODA3NDI3Mzg5Ij4i4KSI4KS14KWH4KSC4KSfIOCkq+CkvOCkv+CksuCljeCkn+CksCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODAwNjIzNjMxNTg4ODM0NzY4MCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSH4KSo4KSq4KWB4KSfIOCkq+CkvOCkv+CksuCljeKAjeCkn+CksCDgpKrgpILgpJzgpYDgpJXgpYPgpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgsIOCknOCliyDgpLjgpK3gpYAg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkiOCkteClh+CkguCknyDgpJXgpYcg4KS44KWN4oCN4KSf4KWN4KSw4KWA4KSuIOCkleCliyDgpK3gpYfgpJzgpYcg4KSc4KS+4KSo4KWHIOCkuOClhyDgpKrgpLngpLLgpYcg4KSr4KS84KS/4KSy4KWN4oCN4KSf4KSwIOCkleCksOCkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3igI3gpLgg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleClhyDgpLngpLjgpY3igI3gpKTgpJXgpY3gpLfgpYfgpKog4KSV4KWHIOCkrOCkv+CkqOCkviDgpLjgpL/gpLjgpY3igI3gpJ/gpK4gVUkg4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODAwNjIzNjMxNTg4ODM0NzY4MCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSH4KSo4KSq4KWB4KSfIOCkq+CkvOCkv+CksuCljeKAjeCkn+CksCDgpKrgpILgpJzgpYDgpJXgpYPgpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgsIOCknOCliyDgpLjgpK3gpYAg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkiOCkteClh+CkguCknyDgpJXgpYcg4KS44KWN4oCN4KSf4KWN4KSw4KWA4KSuIOCkleCliyDgpK3gpYfgpJzgpYcg4KSc4KS+4KSo4KWHIOCkuOClhyDgpKrgpLngpLLgpYcg4KSr4KS84KS/4KSy4KWN4oCN4KSf4KSwIOCkleCksOCkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleClhyDgpLngpLjgpY3igI3gpKTgpJXgpY3gpLfgpYfgpKog4KSV4KWHIOCkrOCkv+CkqOCkviDgpLjgpL/gpLjgpY3igI3gpJ/gpK4gVUkg4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjU5NzM2MjY3MzgxNzA2MTg3NzUiPiLgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KSV4KWLIOCkhuCkteCksOCljeCkp+Ckv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI3MTIxMjM1Njg0NTE1MDAzNzkyIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KSV4KWAIOCkuOCkvuCkruCkl+CljeCksOClgCDgpIbgpLXgpLDgpY3gpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KSh4KS/4KS44KWN4KSq4KWN4KSy4KWHIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJXgpYsg4KSH4KS4IOCkpOCksOCkuSDgpLjgpYcg4KSs4KSm4KSyIOCkuOCkleCkpOClhyDgpLngpYjgpIIg4KSV4KS/IOCkieCkquCkleCksOCkoyDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAg4KSw4KWH4KSC4KSh4KSwIOCkueCli+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNzEyMTIzNTY4NDUxNTAwMzc5MiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkoeCkv+CkuOCljeCkquCljeCksuClhyDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkhuCkteCksOCljeCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSh4KS/4KS44KWN4KSq4KWN4KSy4KWHIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJXgpYsg4KSH4KS4IOCkpOCksOCkuSDgpLjgpYcg4KSs4KSm4KSyIOCkuOCkleCkpOClhyDgpLngpYjgpIIg4KSV4KS/IOCkieCkquCkleCksOCkoyDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAg4KSw4KWH4KSC4KSh4KSwIOCkueCli+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaHV0ZG93biIgbXNnaWQ9IjcxODU3NDc4MjQwMzg5MDkwMTYiPiLgpIbgpILgpLbgpL/gpJUg4KS24KSf4KSh4KS+4KSJ4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2h1dGRvd24iIG1zZ2lkPSI3MDQ2NTAwODM4NzQ2MjkxNzc1Ij4i4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkquCljeCksOCkrOCkguCkp+CklSDgpJXgpYsg4KS24KSf4KSh4KS+4KSJ4KSoIOCkuOCljeKAjeCkpeCkv+CkpOCkvyDgpK7gpYfgpIIg4KSw4KSW4KSk4KS+IOCkueCliC4g4KSq4KWC4KSw4KWN4KSjIOCktuCkn+CkoeCkvuCkieCkqCDgpKjgpL/gpLfgpY3igI3gpKrgpL7gpKbgpL/gpKQg4KSo4KS54KWA4KSCIOCkleCksOCkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI0MTM4NjA4NjEwNzE3NDI1NTczIj4i4KSP4KSq4KWN4oCN4KS4IOCkuOCljeKAjeCkteCkv+CkmiDgpJXgpLDgpKjgpYcg4KS44KWHIOCksOCli+CkleCkpOCkviDgpLngpYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI4MjYyMTk1ODAyNTgyMjU1MDIxIj4i4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleCliyDgpKbgpYLgpLjgpLDgpYcg4KSP4KSq4KWN4oCN4KS4IOCkquCksCDgpLjgpY3igI3gpLXgpL/gpJog4KSV4KSw4KSo4KWHIOCkuOClhyDgpLDgpYvgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUzNzkyMjMxMTQxMTU0NjAxNiI+IuCkteCksOCljeCkpOCkruCkvuCkqCDgpI/gpKrgpY3gpLgg4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUxMjQ0ODg1NTQ5NjA2NzEzMSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleClhyDgpIXgpJfgpY3gpLDgpK3gpL7gpJcg4KSu4KWH4KSCIOCkuOCljeCkpeCkv+CkpCDgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSP4KSq4KWN4KS4IOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iODkyMjM5MDk0ODY3MTgyNjU2Ij4i4KS44KSt4KWAIOCkj+CkquCljeKAjeCkuCDgpJXgpYAg4KSy4KWJ4KSo4KWN4oCN4KSa4KS/4KSC4KSXIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSV4KSw4KWH4KSCIOCklOCksCDgpIngpLjgpYcg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkr+CkuSDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSU4KSwIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJXgpL8g4KS44KS/4KS44KWN4KSf4KSuIOCkleCliOCkuOClhyDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpK/gpL7gpIIg4KSy4KWJ4KSo4KWN4KSaIOCkleCksOCkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KS44KS/4KS44KWN4KSf4KSuIOCkleCliyDgpKrgpYLgpLDgpYAg4KSk4KSw4KS5IOCkuOClhyDgpJzgpYvgpJbgpL/gpK4g4KSu4KWH4KSCIOCkoeCkvuCksiDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiDgpIfgpLgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkleClgCDgpIbgpLXgpLbgpY3gpK/gpJXgpKTgpL4g4KSV4KWH4KS14KSyIOCkteCkv+CkleCkvuCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkueCliCwg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkieCkquCkr+Cli+CklyDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI0MTM4NjA4NjEwNzE3NDI1NTczIj4i4KSQ4KSq4KWN4KS4IOCkuOCljeKAjeCkteCkv+CkmiDgpJXgpLDgpKjgpYcg4KS44KWHIOCksOCli+CkleCkpOCkviDgpLngpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI4MjYyMTk1ODAyNTgyMjU1MDIxIj4i4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleCliyDgpKbgpYLgpLjgpLDgpYcg4KSQ4KSq4KWN4KS4IOCkquCksCDgpLjgpY3igI3gpLXgpL/gpJog4KSV4KSw4KSo4KWHIOCkuOClhyDgpLDgpYvgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUzNzkyMjMxMTQxMTU0NjAxNiI+IuCkteCksOCljeCkpOCkruCkvuCkqCDgpJDgpKrgpY3gpLggIOCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1MTI0NDg4NTU0OTYwNjcxMzEiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkuOCljeCkleCljeCksOClgOCkqCDgpJXgpYcg4KSF4KSX4KWN4KSw4KSt4KS+4KSXIOCkruClh+CkgiDgpLjgpY3gpKXgpL/gpKQg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkkOCkquCljeCkuCAg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSo4KS/4KSc4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ydW5TZXRBY3Rpdml0eVdhdGNoZXIiIG1zZ2lkPSI4OTIyMzkwOTQ4NjcxODI2NTYiPiLgpLjgpK3gpYAg4KSQ4KSq4KWN4KS4IOCkleClgCDgpLLgpYngpKjgpY3igI3gpJrgpL/gpILgpJcg4KSV4KWAIOCkqOCkv+Ckl+CksOCkvuCkqOClgCDgpJXgpLDgpYfgpIIg4KSU4KSwIOCkieCkuOClhyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkr+CkuSDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSU4KSwIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJXgpL8g4KS44KS/4KS44KWN4KSf4KSuIOCkleCliOCkuOClhyDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpK/gpL7gpIIg4KSy4KWJ4KSo4KWN4KSaIOCkleCksOCkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkuOCkv+CkuOCljeCkn+CkriDgpJXgpYsg4KSq4KWC4KSw4KWAIOCkpOCksOCkuSDgpLjgpYcg4KSc4KWL4KSW4KS/4KSuIOCkruClh+CkgiDgpKHgpL7gpLIg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYAg4KSG4KS14KS24KWN4KSv4KSV4KSk4KS+IOCkleClh+CkteCksiDgpLXgpL/gpJXgpL7gpLgg4KSV4KWHIOCksuCkv+CkjyDgpLngpYgsIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIngpKrgpK/gpYvgpJcg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSIyNTc2MzMzNDM0ODkzNTMyNDc1Ij4i4KSq4KWI4KSV4KWH4KScIOCkqOCkv+CkleCkvuCksuClhyDgpJfgpI8g4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkreClh+CknOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSV4KWL4KSIIOCkkOCkuOClgCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCkv+CkuOClhyDgpJXgpL/gpLjgpYAg4KSP4KSq4KWN4KS4IOCkquCliOCkleClh+CknCDgpKjgpYcg4KSo4KS/4KSV4KS+4KSyIOCkpuCkv+Ckr+CkviDgpJfgpK/gpL4g4KS54KWLLiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSa4KSyIOCksOCkueClhyDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpK7gpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSI2NjIxOTAxMjE2MjA3OTMxMDg5Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSV4KWL4KSIIOCkkOCkuOClgCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCkv+CkuOClhyDgpJXgpL/gpLjgpYAg4KSQ4KSq4KWN4KS4ICDgpKrgpYjgpJXgpYfgpJwg4KSo4KWHIOCkqOCkv+CkleCkvuCksiDgpKbgpL/gpK/gpL4g4KSX4KSv4KS+IOCkueCliy4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJrgpLIg4KSw4KS54KWHIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpK7gpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiJTTVMt4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkquCljeCksOCkuOCkvuCksCDgpK3gpYfgpJzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkteCkuSDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCliyBTTVMg4KS44KSC4KSm4KWH4KS2IOCkqOClhyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KWAIOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkqOCkleCksuClgCDgpIfgpKjgpJXgpK7gpL/gpILgpJcg4KS44KSC4KSm4KWH4KS2IOCkl+CkouCkvOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkteCkuSDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCliyBTTVMg4KS44KSC4KSm4KWH4KS2IOCkqOClhyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KWAIOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpKjgpJXgpLLgpYAg4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCkuOCkguCkpuClh+CktiDgpJfgpKLgpLzgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4iV0FQLVBVU0gt4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkquCljeCksOCkuOCkvuCksOCkoyDgpK3gpYfgpJzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iNDc4MzQwMjUyNTAzOTQ0MjcyOSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS14KS5IOCkuOClguCkmuCkqOCkviDgpKrgpY3gpLDgpLjgpL7gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSc4KWLIFdBUCBQVVNIIOCkuOCkguCkpuClh+CktiDgpJXgpYsg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkueClgeCkhiDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpKjgpJXgpLLgpYAgTU1TIOCkuOCkguCkpuClh+CktiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkr+CkviDgpJXgpL/gpLjgpYAg4KS14KWH4KSs4KSq4KWD4KS34KWN4KSgIOCkleClgCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSV4KWLIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpKbgpYLgpLjgpLDgpYcg4KSw4KWC4KSqIOCkuOClhyDgpJrgpYHgpKrgpJrgpL7gpKog4KSq4KWN4KSw4KSk4KS/4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS14KS5IOCkuOClguCkmuCkqOCkviDgpKrgpY3gpLDgpLjgpL7gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSc4KWLIFdBUCBQVVNIIOCkuOCkguCkpuClh+CktiDgpJXgpYsg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkueClgeCkhiDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSo4KSV4KSy4KWAIE1NUyDgpLjgpILgpKbgpYfgpLYg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpK/gpL4g4KSV4KS/4KS44KWAIOCkteClh+CkrOCkquClg+Ckt+CljeCkoCDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkleCliyDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSm4KWC4KS44KSw4KWHIOCksOClguCkqiDgpLjgpYcg4KSa4KWB4KSq4KSa4KS+4KSqIOCkquCljeCksOCkpOCkv+CkuOCljeCkpeCkvuCkquCkv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjI0NTE4NzM2NjQzNjM2NjI2NjYiPiLgpJrgpLIg4KSw4KS54KWAIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkk+CkgiDgpJXgpYAg4KS44KSC4KSW4KWN4oCN4KSv4KS+IOCkuOClgOCkruCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpJrgpLLgpL7gpIgg4KSc4KS+4KSo4KWHIOCkteCkvuCksuClgCDgpIXgpKfgpL/gpJXgpKTgpK4g4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KST4KSCIOCkleCliyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKTgpYAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiLgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkr+CkuSDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSV4KS/IOCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpK7gpYfgpIIg4KSc4KS+4KSk4KWHIOCkueClgCDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpK/gpL7gpIIg4KSq4KWC4KSw4KWN4KSjIOCkueCliyDgpJzgpL7gpKTgpYAg4KS54KWIIOCkr+CkviDgpKjgpLngpYAuIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSV4KSk4KS+IOCkqOCkueClgOCkgiDgpLngpYvgpKTgpYAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iNzMxODA2MTMxNDA0MDg3OTU0MiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkmuCksuCkvuCkiCDgpJzgpL7gpKjgpYcg4KS14KS+4KSy4KWAIOCkheCkp+Ckv+CkleCkpOCkriDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL7gpJPgpIIg4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKTgpYAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiLgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSQ4KSq4KWN4KS4IOCkleCliyDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpK/gpLkg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCkleCkvyDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSu4KWH4KSCIOCknOCkvuCkpOClhyDgpLngpYAg4KSX4KSk4KS/4KS14KS/4KSn4KS/4KSv4KS+4KSCIOCkquClguCksOCljeCkoyDgpLngpYsg4KSc4KS+4KSk4KWAIOCkueCliCDgpK/gpL4g4KSo4KS54KWALiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJXgpKTgpL4g4KSo4KS54KWA4KSCIOCkueCli+CkpOClgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiLgpKzgpYjgpJ/gpLDgpYAg4KSV4KWHIOCkhuCkguCkleCkoeCkvOClhyDgpKrgpKLgpLzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI1ODk3MzQ2NTgyODgyOTE1MTE0Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSo4KS/4KSu4KWN4KSoLeCkuOCljeCkpOCksOClgOCkryDgpKzgpYjgpJ/gpLDgpYAg4KSJ4KSq4KSv4KWL4KSXIOCkoeClh+Ckn+CkviDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4g4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpL/gpI8g4KSc4KS+4KSo4KWHIOCkteCkvuCksuClhyDgpI/gpKrgpY3gpLgg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS14KS/4KS44KWN4KSk4KWD4KSkIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKLgpYLgpILgpKLgpKjgpYcg4KSm4KWHIOCkuOCkleCkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmF0dGVyeVN0YXRzIiBtc2dpZD0iNTg5NzM0NjU4Mjg4MjkxNTExNCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkteCksOCljeCkpOCkruCkvuCkqCDgpKjgpL/gpK7gpY3gpKgt4KS44KWN4KSk4KSw4KWA4KSvIOCkrOCliOCkn+CksOClgCDgpIngpKrgpK/gpYvgpJcg4KSh4KWH4KSf4KS+IOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpL/gpI8g4KSc4KS+4KSo4KWHIOCkteCkvuCksuClhyDgpJDgpKrgpY3gpLggIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkteCkv+CkuOCljeCkpOClg+CkpCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSi4KWC4KSC4KSi4KSo4KWHIOCkpuClhyDgpLjgpJXgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQmF0dGVyeVN0YXRzIiBtc2dpZD0iMzcxOTY4OTc2NDUzNjM3OTU1NyI+IuCkrOCliOCkn+CksOClgCDgpJXgpYcg4KSG4KSC4KSV4KSh4KS84KWHIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKzgpYjgpJ/gpLDgpYAg4KSV4KWHIOCkuOCkguCkleCksuCkv+CkpCDgpIbgpILgpJXgpKHgpLzgpYvgpIIg4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjE1MDg3Nzk2ODc0MzY1ODU3NDQiPiLgpI/gpKrgpY3gpLgg4KS44KSC4KSa4KS+4KSy4KSoIOCkhuCkguCkleCkoeCkvOClhyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpILgpJXgpLLgpL/gpKQg4KSP4KSq4KWN4KS4IOCkuOCkguCkmuCkvuCksuCkqCDgpIbgpILgpJXgpKHgpLzgpYcg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI4ODI5MDk3MzczODUxNTIxNTA1Ij4i4KSP4KSq4KWN4KS4IOCkleCkvuCksOCljeCkr+CkteCkvuCkueClgCDgpJXgpYcg4KSG4KSC4KSV4KSh4KS84KWHIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUFwcE9wc1N0YXRzIiBtc2dpZD0iNTA3ODQ1OTY1OTQ0MDM0ODMiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkj+CkquCljeCkuCDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KSV4KWHIOCkj+CkleCkpOCljeCksOCkv+CkpCDgpIbgpILgpJXgpKHgpLzgpYcg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjY4NjI4MTc4NTcxNzgwMjUwMDIiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkrOCliOCkn+CksOClgCDgpJXgpYcg4KS44KSC4KSV4KSy4KS/4KSkIOCkhuCkguCkleCkoeCkvOCli+CkgiDgpJXgpYsg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iMTUwODc3OTY4NzQzNjU4NTc0NCI+IuCkkOCkquCljeCkuCAg4KS44KSC4KSa4KS+4KSy4KSoIOCkhuCkguCkleCkoeCkvOClhyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KSC4KSV4KSy4KS/4KSkIOCkkOCkquCljeCkuCAg4KS44KSC4KSa4KS+4KSy4KSoIOCkhuCkguCkleCkoeCkvOClhyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI4ODI5MDk3MzczODUxNTIxNTA1Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KSV4KWHIOCkhuCkguCkleCkoeCkvOClhyDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9IjUwNzg0NTk2NTk0NDAzNDgzIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSQ4KSq4KWN4KS4ICDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KSV4KWHIOCkj+CkleCkpOCljeCksOCkv+CkpCDgpIbgpILgpJXgpKHgpLzgpYcg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhY2t1cCIgbXNnaWQ9IjQ3MDAxMzAyMjg2NTQ1MzkyMCI+IuCkuOCkv+CkuOCljeKAjeCkn+CkriDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCklOCksCDgpKrgpYHgpKjgpLDgpY3gpLjgpY3igI3gpKXgpL7gpKrgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmFja3VwIiBtc2dpZD0iNjkxMjIzMDUyNTE0MDU4OTg5MSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS44KS/4KS44KWN4KSf4KSuIOCkleClhyDgpKzgpYjgpJXgpIXgpKog4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJTgpLAg4KSV4KWN4KSw4KS/4KSv4KS+4KS14KS/4KSn4KS/IOCkleCliyDgpKrgpYHgpLDgpY3gpKjgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmFja3VwIiBtc2dpZD0iNjkxMjIzMDUyNTE0MDU4OTg5MSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkuOCkv+CkuOCljeCkn+CkriDgpJXgpYcg4KSs4KWI4KSV4KSF4KSqIOCkleCliyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSU4KSwIOCkleCljeCksOCkv+Ckr+CkvuCkteCkv+Ckp+CkvyDgpJXgpYsg4KSq4KWB4KSw4KWN4KSo4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiLgpKrgpYLgpLDgpY3gpKMg4KS44KWB4KSw4KSV4KWN4KS34KS+IOCkr+CkviDgpKrgpYHgpKjgpLDgpY3gpLjgpY3igI3gpKXgpL7gpKrgpKjgpL4g4KSV4KS+4KSw4KWN4KSv4KS14KS+4KS54KWAIOCkleClgCDgpKrgpYHgpLfgpY3gpJ/gpL8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjE3NDg3NjIxNzE2Mzc2OTk1NjIiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkquClguCksOCljeCkoyDgpKzgpYjgpJXgpIXgpKog4KSq4KWB4KS34KWN4KSf4KS/4KSV4KSw4KSjIFVJIOCksuClieCkqOCljeKAjeCkmiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSV4KS/4KS44KWAIOCkj+CkquCljeKAjeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpKrgpYLgpLDgpY3gpKMg4KSs4KWI4KSV4KSF4KSqIOCkquClgeCkt+CljeCkn+Ckv+CkleCksOCkoyBVSSDgpLLgpYngpKjgpY3igI3gpJog4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkleCkv+CkuOClgCDgpJDgpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iMjE0ODU2MzYyODE0MDE5MzIzMSI+IuCkheCkqOCkp+Ckv+CkleClg+CkpCDgpLXgpL/gpILgpKHgpYsg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4i4KSV4KS/4KS44KWAIOCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSQ4KS44KWAIOCkteCkv+CkguCkoeCliyDgpKzgpKjgpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpL/gpKjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkhuCkguCkpOCksOCkv+CklSDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSV4KS/4KSv4KS+IOCknOCkvuCkqOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9IjM1NDMzNDc5ODA4Mzk1MTg2MTMiPiLgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkquCksCDgpJbgpYDgpILgpJrgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9Ijg1ODQ2NzgzODE5NzI4MjAxMTgiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCktuClgOCksOCljeCktyDgpKrgpLAg4KSv4KS+IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KSV4KWHIOCkueCkv+CkuOCljeCkuOCli+CkgiDgpKrgpLAg4KSG4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIOCkteClhyDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkj+CkquCljeCkuCDgpK7gpYfgpIIg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkleClhyDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkruClh+CkgiDgpLngpLjgpY3gpKTgpJXgpY3gpLfgpYfgpKog4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIsIOCkr+CkviDgpIngpLgg4KSa4KWA4KScIOCkleCliyDgpKzgpKbgpLIg4KS44KSV4KSk4KWAIOCkueCliCDgpJzgpL/gpLjgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpIbgpKrgpJXgpYsg4KSy4KSX4KSk4KS+IOCkueCliCDgpJXgpL8g4KSG4KSqIOCkieCkuOClhyDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkruClh+CkgiDgpKbgpYfgpJYg4KSw4KS54KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9Ijc0NTgzODc3NTk0NjE0NjYzOTciPiLgpJXgpL/gpLjgpYAg4KSQ4KSq4KWN4KS4IOCkleCliyDgpJDgpLjgpYAg4KS14KS/4KSC4KSh4KWLIOCkrOCkqOCkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCkv+CkqOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSG4KSC4KSk4KSw4KS/4KSVIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkpuCljeCkteCkvuCksOCkviDgpJXgpL/gpK/gpL4g4KSc4KS+4KSo4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iMzU0MzM0Nzk4MDgzOTUxODYxMyI+IuCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSq4KSwIOCkluClgOCkguCkmuClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iODU4NDY3ODM4MTk3MjgyMDExOCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpLbgpYDgpLDgpY3gpLcg4KSq4KSwIOCkr+CkviDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkleClhyDgpLngpL/gpLjgpY3gpLjgpYvgpIIg4KSq4KSwIOCkhuCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpLXgpYcg4KSV4KS/4KS44KWAIOCkreClgCDgpJDgpKrgpY3gpLggIOCkruClh+CkgiDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KSV4KWHIOCkhuCkquCkleClhyDgpIngpKrgpK/gpYvgpJcg4KSu4KWH4KSCIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgiwg4KSv4KS+IOCkieCkuCDgpJrgpYDgpJwg4KSV4KWLIOCkrOCkpuCksiDgpLjgpJXgpKTgpYAg4KS54KWIIOCknOCkv+CkuOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkhuCkquCkleCliyDgpLLgpJfgpKTgpL4g4KS54KWIIOCkleCkvyDgpIbgpKog4KSJ4KS44KWHIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkruClh+CkgiDgpKbgpYfgpJYg4KSw4KS54KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iMjgwNTEwMzI0MTE1MzkwNzE3NCI+IuCkteCliOCktuCljeCkteCkv+CklSDgpI/gpKjgpL/gpK7gpYfgpLbgpKgg4KSX4KSk4KS/IOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iNzY5MDA2MzQyODkyNDM0MzU3MSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSV4KS/4KS44KWAIOCkreClgCDgpLjgpK7gpK8g4KS14KWI4KS24KWN4KS14KS/4KSVIOCkj+CkqOCkv+CkruClh+CktuCkqCDgpJfgpKTgpL8gKOCkpOClh+CknOCkvCDgpK/gpL4g4KSn4KWA4KSu4KWHIOCkj+CkqOCkv+CkruClh+CktuCkqCkg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSIxMjg2NTA1NzE3MDUwMTIxMzcwIj4i4KSP4KSq4KWN4oCN4KS4IOCkn+Cli+CkleCkqCDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSJ4KSo4KSV4KWHIOCkuOCkvuCkruCkvuCkqOCljeCkryBaLeCkleCljeCksOCkruCli+CkgiDgpKrgpLAg4KSoIOCkquCkueClgeCkguCkmuCkpOClhyDgpLngpYHgpI8g4KSJ4KSo4KSV4KWHIOCkuOCljeCkteCkr+CkgiDgpJXgpYcg4KSf4KWL4KSV4KSoIOCkrOCkqOCkvuCkqOClhyDgpJTgpLAg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkuOCkruCkryDgpLXgpYjgpLbgpY3gpLXgpL/gpJUg4KSP4KSo4KS/4KSu4KWH4KS24KSoIOCkl+CkpOCkvyAo4KSk4KWH4KSc4KS8IOCkr+CkviDgpKfgpYDgpK7gpYcg4KSP4KSo4KS/4KSu4KWH4KS24KSoKSDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjEyODY1MDU3MTcwNTAxMjEzNzAiPiLgpJDgpKrgpY3gpLgg4KSf4KWL4KSV4KSoIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSI4MDQzNDMxNzEzMDE0Mzk1NjcxIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSJ4KSo4KSV4KWHIOCkuOCkvuCkruCkvuCkqOCljeCkryBaLeCkleCljeCksOCkruCli+CkgiDgpKrgpLAg4KSoIOCkquCkueClgeCkguCkmuCkpOClhyDgpLngpYHgpI8g4KSJ4KSo4KSV4KWHIOCkuOCljeCkteCkr+CkgiDgpJXgpYcg4KSf4KWL4KSV4KSoIOCkrOCkqOCkvuCkqOClhyDgpJTgpLAg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mcmVlemVTY3JlZW4iIG1zZ2lkPSI0NzA4MTgxMTg0NDQxODgwMTc1Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleCliyDgpLjgpY3gpKXgpL/gpLAg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZnJlZXplU2NyZWVuIiBtc2dpZD0iODU1ODkyMzc4OTIyMjY3MDA2NCI+IuCkquClguCksOCljeCkoy3gpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KS44KSC4KSV4KWN4KSw4KSu4KSjIOCkleClhyDgpLLgpL/gpI8g4KSP4KSq4KWN4KS4IOCkleCliyDgpIXgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KWLIOCkuOCljeCkpeCkv+CksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mcmVlemVTY3JlZW4iIG1zZ2lkPSI4NTU4OTIzNzg5MjIyNjcwMDY0Ij4i4KSq4KWC4KSw4KWN4KSjLeCkuOCljeCkleCljeCksOClgOCkqCDgpLjgpILgpJXgpY3gpLDgpK7gpKMg4KSV4KWHIOCksuCkv+CkjyDgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KWLIOCkuOCljeCkpeCkv+CksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luamVjdEV2ZW50cyIgbXNnaWQ9IjEzNzg3NDY1ODQwMjM1ODY2MDAiPiLgpJXgpYHgpILgpJzgpL/gpK/gpYvgpIIg4KSU4KSwIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkoyDgpKzgpJ/gpKgg4KSV4KWLIOCkpuCkrOCkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KWHIOCkh+CkqOCkquClgeCknyDgpIjgpLXgpYfgpILgpJ8gKOCkleClgeCkguCknOClgCDgpKbgpKzgpL7gpKjgpL4sIOCkhuCkpuCkvykg4KSV4KWLIOCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkteCkv+CkpOCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkn+Clh+CklSDgpJPgpLXgpLAg4KSV4KSw4KSo4KWHIOCkruClh+CkgiDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KWN4oCN4KS14KSv4KSCIOCkleClhyDgpIfgpKjgpKrgpYHgpJ8g4KSI4KS14KWH4KSC4KSfICjgpJXgpYHgpILgpJzgpYAg4KSm4KSs4KS+4KSo4KS+LCDgpIbgpKbgpL8pIOCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkteCkv+CkpOCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSf4KWH4KSVIOCkk+CkteCksCDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KWHIOCkh+CkqOCkquClgeCknyDgpIjgpLXgpYfgpILgpJ8gKOCkleClgeCkguCknOClgCDgpKbgpKzgpL7gpKjgpL4sIOCkhuCkpuCkvykg4KSV4KWLIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWLIOCkteCkv+CkpOCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkn+Clh+CklSDgpJPgpLXgpLAg4KSV4KSw4KSo4KWHIOCkruClh+CkgiDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KWN4oCN4KS14KSv4KSCIOCkleClhyDgpIfgpKjgpKrgpYHgpJ8g4KSI4KS14KWH4KSC4KSfICjgpJXgpYHgpILgpJzgpYAg4KSm4KSs4KS+4KSo4KS+LCDgpIbgpKbgpL8pIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWLIOCkteCkv+CkpOCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSf4KWH4KSVIOCkk+CkteCksCDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI0Njk0Mjg5MDAwNDEyNDkyMzQiPiLgpIbgpKog4KSc4KWLIOCkreClgCDgpLLgpL/gpJbgpKTgpYcg4KS54KWI4KSCIOCklOCksCDgpJzgpYsg4KSV4KS+4KSw4KWN4KSv4KS14KS+4KS54KS/4KSv4KS+4KSCIOCkleCksOCkpOClhyDgpLngpYjgpIIg4KSJ4KSo4KWN4oCN4KS54KWH4KSCIOCksOCkv+CkleClieCksOCljeCkoSDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjgzODc3NTQ5MDE2ODg3MjgwNDMiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCkuOCkvuCkpSDgpLjgpLngpK3gpL7gpJfgpL/gpKTgpL4g4KSV4KSw4KSk4KWHIOCkuOCkruCkryDgpK3gpYAg4KSG4KSq4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpKbgpKzgpL7gpIgg4KSc4KS+4KSo4KWHIOCkteCkvuCksuClgCDgpJXgpYHgpILgpJzgpL/gpK/gpL7gpIIg4KSm4KWH4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYggKOCknOCliOCkuOClhyDgpJXgpYvgpIgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCksuCkv+CkluCkqOCkvikuIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjgzODc3NTQ5MDE2ODg3MjgwNDMiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KS44KS+4KSlIOCkuOCkueCkreCkvuCkl+Ckv+CkpOCkviDgpJXgpLDgpKTgpYcg4KS44KSu4KSvIOCkreClgCDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkpuCkrOCkvuCkiCDgpJzgpL7gpKjgpYcg4KS14KS+4KSy4KWAIOCkleClgeCkguCknOCkv+Ckr+CkvuCkgiDgpKbgpYfgpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCAo4KSc4KWI4KS44KWHIOCkleCli+CkiCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSy4KS/4KSW4KSo4KS+KS4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzM2MDA2NDYyMDIzMDUxNTc3NiI+IuCkleCkv+CkuOClgCDgpIfgpKjgpKrgpYHgpJ8g4KS14KS/4KSn4KS/IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzI1MDQ0MDMyMjgwNzI4NjMzMSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIOCkh+CkqOCkquClgeCknyDgpLXgpL/gpKfgpL8g4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMjUwNDQwMzIyODA3Mjg2MzMxIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KSH4KSo4KSq4KWB4KSfIOCkteCkv+Ckp+CkvyDgpJXgpYcg4KS24KWA4KSw4KWN4KS3LeCkuOCljeKAjeCkpOCksCDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpLngpYvgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNTM1NzczMzk0MjU1NjAzMTU5MyI+IuCkhuCkuOCkvuCkqCDgpKTgpLDgpYDgpJXgpL4g4KS44KWH4KS14KS+IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIOCkhuCkuOCkvuCkqCDgpKTgpLDgpYDgpJXgpL4g4KS44KWH4KS14KS+IOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIOCkhuCkuOCkvuCkqCDgpKTgpLDgpYDgpJXgpL4g4KS44KWH4KS14KS+IOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iODQ2MjgxNTE3OTU3Mjc0ODc2MSI+IuCkquCljeCksOCkv+CkguCknyDgpLjgpYfgpLXgpL4g4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIOCkquCljeCksOCkv+CkguCknyDgpLjgpYfgpLXgpL4g4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIOCkquCljeCksOCkv+CkguCknyDgpLjgpYfgpLXgpL4g4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iNjgwNzc2Mjc4Mzc0NDEyNTk1NCI+IuCkquCljeCksOCkv+CkguCknyDgpLjgpY3gpKrgpYLgpLLgpLAg4KS44KWH4KS14KS+IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSIzNjgwNTUyMjg1OTMzMzE4MzcyIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpKrgpY3gpLDgpL/gpILgpJ8g4KS44KWN4KSq4KWC4KSy4KSwIOCkuOClh+CkteCkviDgpJXgpYcg4KS24KWA4KSw4KWN4KS3LeCkuOCljeKAjeCkpOCksCDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpLngpYvgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iMzY4MDU1MjI4NTkzMzMxODM3MiI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSq4KWN4KSw4KS/4KSC4KSfIOCkuOCljeCkquClguCksuCksCDgpLjgpYfgpLXgpL4g4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iMjc1MjczMTMwMDQxOTQxMDcyNCI+Ik5GQyDgpLjgpYfgpLXgpL4g4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpLDgpLngpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkkOCkuOClhyDgpI/gpKrgpY3gpLgg4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpLDgpLngpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpYsgTkZDIOCkleCkvuCksOCljeCkoSDgpJXgpL4g4KSF4KSo4KWB4KSV4KSw4KSjIOCkleCksCDgpLDgpLngpYcg4KS54KWI4KSCLiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJDgpLjgpYcg4KSQ4KSq4KWN4KS4ICDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCksOCkueCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCliyBORkMg4KSV4KS+4KSw4KWN4KShIOCkleCkviDgpIXgpKjgpYHgpJXgpLDgpKMg4KSV4KSwIOCksOCkueClhyDgpLngpYjgpIIuIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI3MzU4Mzc4NDAxOTE1Mjg3OTM4Ij4i4KSV4KS/4KS44KWAIOCkquCkvuCkoCDgpLjgpYfgpLXgpL4g4KSq4KSwIOCkrOCkqOClhyDgpLDgpLngpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI4MTUxOTY4OTEwOTczOTk4NjcwIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KSq4KS+4KSgIOCkuOClh+CkteCkviAo4KSJ4KSm4KS+LiBTcGVsbENoZWNrZXJTZXJ2aWNlKSDgpJXgpYcg4KS24KWA4KSw4KWN4KS3LeCkuOCljeKAjeCkpOCksCDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KSq4KSwIOCkhuCkrOCkpuCljeCkpyDgpLngpYvgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkleCkv+CkuOClgCDgpKrgpL7gpKAg4KS44KWH4KS14KS+ICjgpIngpKbgpL4uIFNwZWxsQ2hlY2tlclNlcnZpY2UpIOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpKrgpLAg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjQ3MDg1OTYwMjExNjE0NzMyNTUiPiLgpJXgpL/gpLjgpYAgVlBOIOCkuOClh+CkteCkviDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIFZwbiDgpLjgpYfgpLXgpL4g4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkleCkv+CkuOClgCBWcG4g4KS44KWH4KS14KS+IOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+IuCkteClieCksuCkquClh+CkquCksCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KS14KWJ4KSy4KSq4KWH4KSq4KSwIOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkleCkv+CkuOClgCDgpLXgpYngpLLgpKrgpYfgpKrgpLAg4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuCksOCkv+CkruCli+CknyDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkleCkv+CkuOClgCDgpLDgpL/gpK7gpYvgpJ8g4KSh4KS/4KS44KWN4KSq4KWN4KSy4KWHIOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSw4KWA4KSvIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i4KSV4KS/4KS44KWAIOCkteCkv+CknOClh+CknyDgpLjgpYfgpLXgpL4g4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KS14KS/4KSc4KWH4KSfIOCkuOClh+CkteCkviDgpJXgpYcg4KS24KWA4KSw4KWN4KS3LeCkuOCljeKAjeCkpOCksCDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpLngpYvgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkleCkv+CkuOClgCDgpLXgpL/gpJzgpYfgpJ8g4KS44KWH4KS14KS+IOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4KSV4KS/4KS44KWAIOCkieCkquCkleCksOCkoyDgpLXgpY3igI3gpK/gpLXgpLjgpY3igI3gpKXgpL7gpKrgpJUg4KSV4KWHIOCkuOCkvuCkpSDgpLjgpLngpK3gpL7gpJfgpL/gpKTgpL4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KSJ4KSq4KSV4KSw4KSjIOCkteCljeKAjeCkr+CkteCkuOCljeKAjeCkpeCkvuCkquCklSDgpJXgpYsg4KSJ4KSm4KWN4KSm4KWH4KS24KWN4KSvIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KSJ4KSq4KSV4KSw4KSjIOCkteCljeKAjeCkr+CkteCkuOCljeKAjeCkpeCkvuCkquCklSDgpJXgpYsg4KSJ4KSm4KWN4KSm4KWH4KS24KWN4KSvIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4i4KSJ4KSq4KSV4KSw4KSjIOCkieCkquCkleCksOCkoyDgpLjgpYHgpJrgpL7gpLDgpYIg4KSi4KS84KSC4KSXIOCkuOClhyDgpJrgpLLgpL7gpKjgpYcg4KS14KS+4KSy4KWHIOCkleCliyDgpJzgpYvgpKHgpLzgpYfgpIIg4KSv4KS+IOCkqOCkv+CkleCkvuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURldmljZUFkbWlucyIgbXNnaWQ9IjUwMjU2MDgxNjc3MDk5NDI0ODUiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkuOCkleCljeCksOCkv+CkryDgpKHgpL/gpLXgpL7gpIfgpLgg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSV4KWL4KSCIOCkleCliyDgpJzgpYvgpKHgpLzgpKjgpYcg4KSv4KS+IOCkqOCkv+CkleCkvuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KS44KSV4KWN4KSw4KS/4KSvIOCkoeCkv+CkteCkvuCkh+CkuCDgpLXgpY3gpK/gpLXgpLjgpY3gpKXgpL7gpKrgpJXgpYvgpIIg4KSV4KWLIOCknOCli+CkoeCkvOCkqOClhyDgpK/gpL4g4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMzNjU5NDc3MTcxNjM4NjY4NDQiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KSF4KSt4KS/4KS14KS/4KSo4KWN4oCN4KSv4KS+4KS4IOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldE9yaWVudGF0aW9uIiBtc2dpZD0iMzA0NjEyNjYxOTMxNjY3MTQ3NiI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSV4KS/4KS44KWAIOCkreClgCDgpLjgpK7gpK8g4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkleCkviDgpLDgpYvgpJ/gpYfgpLbgpKgg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkleCkv+CkuOClgCDgpK3gpYAg4KS44KSu4KSvIOCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpJXgpL4g4KSw4KWL4KSf4KWH4KS24KSoIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI5MTc1MzcxNjEzMzIyNTYyOTM0Ij4i4KS44KWC4KSa4KSVIOCkl+CkpOCkvyDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI2ODY2NTYzMjM0Mjc0MTA0MjMzIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpK7gpL7gpIngpLgg4KSv4KS+IOCkn+CljeCksOCliOCkleCkquCliOCkoSDgpLjgpYLgpJrgpJUg4KSX4KSk4KS/IOCkleCliyDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkuOCkruCkryDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjY4NjY1NjMyMzQyNzQxMDQyMzMiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpK7gpL7gpIngpLgg4KSv4KS+IOCkn+CljeCksOCliOCkleCkquCliOCkoSDgpLjgpYLgpJrgpJUg4KSX4KSk4KS/IOCkleCliyDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkuOCkruCkryDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI0Nzc4NzMxNzAzNjAwOTA5MzQwIj4i4KSV4KWA4KSs4KWL4KSw4KWN4KShIOCksuClh+CkhuCkieCknyDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9Ijg0ODAwMTY3NzExMzQxNzU4NzkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkleClgOCkrOCli+CksOCljeCkoSDgpLLgpYfgpIbgpIngpJ8g4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+IuCkj+CkquCljeCkuCDgpJXgpYsgTGludXgg4KS44KS/4KSX4KWN4KSo4KSyIOCkreClh+CknOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0ODk2OTkyMDc5MTgyNjQ5MTQxIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpK/gpLkg4KSF4KSo4KWB4KSw4KWL4KSnIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCkleCkvyDgpKbgpL/gpK/gpL4g4KSX4KSv4KS+IOCkuOCkv+Ckl+CljeCkqOCksiDgpLjgpK3gpYAg4KSc4KS+4KSw4KWAIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkk+CkgiDgpJXgpYsg4KSt4KWH4KSc4KS+IOCknOCkvuCkjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcnNpc3RlbnRBY3Rpdml0eSIgbXNnaWQ9Ijg4NDExMTM2Mjc5NTU1NjM5MzgiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkueCkruClh+CktuCkviDgpJrgpLLgpKjgpYcg4KS14KS+4KSy4KS+IOCkrOCkqOCkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KWN4KSu4KWD4KSk4KS/IOCkruClh+CkgiDgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KWHIOCkleClgeCkmyDgpLngpL/gpLjgpY3gpLjgpYvgpIIg4KSV4KWLIOCksuCkl+CkvuCkpOCkvuCksCDgpKzgpKjgpL7gpKjgpYcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkieCkquCksuCkrOCljeKAjeCkpyDgpLjgpY3igI3gpK7gpYPgpKTgpL8g4KSV4KWLIOCkuOClgOCkruCkv+CkpCDgpJXgpLAg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpKfgpYDgpK7gpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KWN4KSu4KWD4KSk4KS/IOCkruClh+CkgiDgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KWHIOCkleClgeCkmyDgpLngpL/gpLjgpY3gpLjgpYvgpIIg4KSV4KWLIOCksuCkl+CkvuCkpOCkvuCksCDgpKzgpKjgpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpIngpKrgpLLgpKzgpY3igI3gpKcg4KS44KWN4oCN4KSu4KWD4KSk4KS/IOCkleCliyDgpLjgpYDgpK7gpL/gpKQg4KSV4KSwIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSn4KWA4KSu4KS+IOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSIxODQzODUxMjk1Mzc3MDU5MzgiPiLgpI/gpKrgpY3igI3gpLgg4KS54KSf4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSI3NDExNDgwMjc1MTY3MjA1MDgxIj4i4KSP4KSq4KWN4KS4IOCkleCliyBBbmRyb2lkIOCkquCliOCkleClh+CknCDgpLngpJ/gpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkruCkueCkpOCljeCkteCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KS54KSf4KS+4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iMjc0MTA5MTkxODQ1ODQyNzU2Ij4i4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpL4g4KSh4KWH4KSf4KS+IOCkueCkn+CkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSh4KWH4KSf4KS+IOCkuOCkvuCkq+CkvCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KS44KSC4KSa4KSvIOCkueCkn+CkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzODEyOTk4NTk5MDA2NzMwMTk2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpILgpJrgpK8g4KSr4KS84KS+4KSH4KSy4KWH4KSCIOCkueCkn+CkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4i4KSP4KSq4KWN4KS4IOCkuOCkguCkl+CljeCksOCkueCkoyDgpLjgpY3gpKXgpL7gpKgg4KSu4KS+4KSq4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIngpLjgpJXgpL4g4KSV4KWL4KShLCDgpKHgpYfgpJ/gpL4sIOCklOCksCDgpLjgpILgpJrgpK8g4KSG4KSV4KS+4KSw4KWL4KSCIOCkleCliyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjIxOTkxMjg0ODI4MjAzMDY5MjQiPiLgpLjgpYDgpKfgpYcg4KSP4KSq4KWN4oCN4KS4IOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSI1NjI4NTMwOTcyNTQ4MDcxMjg0Ij4i4KSP4KSqIOCkleCliyDgpKjgpI8g4KSv4KS+IOCkqOCkiCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS14KS+4KSy4KWHIEFuZHJvaWQg4KSq4KWI4KSV4KWH4KScIOCkh+CkguCkuOCljeCkn+ClieCksiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkheCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpLDgpYLgpKog4KS44KWHIOCkuOCktuCkleCljeCkpCDgpIXgpKjgpYHgpK7gpKTgpL/gpK/gpYvgpIIg4KS14KS+4KSy4KWHIOCkqOCkjyDgpI/gpKrgpY3gpLgg4KSc4KWL4KSh4KS84KSo4KWHIOCkruClh+CkgiDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwQ2FjaGUiIG1zZ2lkPSI3NDg3Mjc5MzkxNzIzNTI2ODE1Ij4i4KS44KSt4KWAIOCkj+CkquCljeCkuCDgpLjgpILgpJrgpK8g4KSh4KWH4KSf4KS+IOCkueCkn+CkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzQ2NDA4NzE5NDU0MzQ1NjUiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWAIOCkuOCkguCkmuCkryDgpKjgpL/gpLDgpY3gpKbgpYfgpLbgpL/gpJXgpL7gpJPgpIIg4KSu4KWH4KSCIOCkuOClhyDgpKvgpLzgpL7gpIfgpLLgpYfgpIIg4KS54KSf4KS+4KSV4KSwIOCkn+Clh+CkrOCksuClh+CknyDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSV4KWLIOCkluCkvuCksuClgCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4g4KSH4KS44KS44KWHIOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSF4KSn4KS/4KSVIOCkp+ClgOCkruClhyDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KS54KWLIOCkuOCkleCkpOClhyDgpLngpYjgpIIg4KSV4KWN4KSv4KWL4KSC4KSV4KS/IOCkieCkqOCljeCkueClh+CkgiDgpIXgpKrgpKjgpL4g4KSh4KWH4KSf4KS+IOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkhuCkteCktuCljeCkr+CkleCkpOCkviDgpLngpYvgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNDU5NDQxMDIxOTU2NDM2Nzc5Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClgCDgpLjgpILgpJrgpK8g4KSo4KS/4KSw4KWN4KSm4KWH4KS24KS/4KSV4KS+4KST4KSCIOCkruClh+CkgiDgpLjgpYcg4KSr4KS84KS+4KSH4KSy4KWH4KSCIOCkueCkn+CkvuCkleCksCDgpKvgpLzgpYvgpKgg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkleCliyDgpJbgpL7gpLLgpYAg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIOCkh+CkuOCkuOClhyDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkheCkp+Ckv+CklSDgpKfgpYDgpK7gpYcg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkueCliyDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCkleCljeCkr+Cli+CkguCkleCkvyDgpIngpKjgpY3gpLngpYfgpIIg4KSF4KSq4KSo4KS+IOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpLDgpY3gpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkleClgCDgpIbgpLXgpLbgpY3gpK/gpJXgpKTgpL4g4KS54KWL4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdmVQYWNrYWdlIiBtc2dpZD0iMzI4OTg5MDI3MTY0NTkyMTQxMSI+IuCkj+CkquCljeKAjeCkuCDgpLjgpILgpLjgpL7gpKfgpKjgpYvgpIIg4KSV4KWLIOCksuClhyDgpJzgpL7gpI/gpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3ZlUGFja2FnZSIgbXNnaWQ9IjMxOTU2MjIxNzc3ODI0NDUyNCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSP4KSq4KWN4oCN4KS4IOCkuOCkguCkuOCkvuCkp+CkqOCli+CkgiDgpJXgpYsg4KSG4KSC4KSk4KSw4KS/4KSVIOCkuOClhyDgpKzgpL7gpLngpLDgpYAg4KSu4KWA4KSh4KS/4KSv4KS+IOCkruClh+CkgiDgpJTgpLAg4KSH4KS44KSV4KWHIOCkteCkv+CkquCksOClgOCkpCDgpLLgpYcg4KSc4KS+4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI4NDgwMDE2NzcxMTM0MTc1ODc5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJXgpYDgpKzgpYvgpLDgpY3gpKEg4KSy4KWH4KSG4KSJ4KSfIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ1MzkwMDI5OTE5NDczNzY2NTkiPiLgpJDgpKrgpY3gpLggIOCkleCliyBMaW51eCDgpLjgpL/gpJfgpY3gpKjgpLIg4KSt4KWH4KSc4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkr+CkuSDgpIXgpKjgpYHgpLDgpYvgpKcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSV4KS/IOCkpuCkv+Ckr+CkviDgpJfgpK/gpL4g4KS44KS/4KSX4KWN4KSo4KSyIOCkuOCkreClgCDgpJzgpL7gpLDgpYAg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KST4KSCIOCkleCliyDgpK3gpYfgpJzgpL4g4KSc4KS+4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyc2lzdGVudEFjdGl2aXR5IiBtc2dpZD0iODg0MTExMzYyNzk1NTU2MzkzOCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS54KSu4KWH4KS24KS+IOCkmuCksuCkqOClhyDgpLXgpL7gpLLgpL4g4KSs4KSo4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTI1MTg5MjcyMzI5MDg2MTM3Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpY3gpK7gpYPgpKTgpL8g4KSu4KWH4KSCIOCkuOCljeKAjeCkteCkr+CkgiDgpJXgpYcg4KSV4KWB4KSbIOCkueCkv+CkuOCljeCkuOCli+CkgiDgpJXgpYsg4KSy4KSX4KS+4KSk4KS+4KSwIOCkrOCkqOCkvuCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSy4KS/4KSPIOCkieCkquCksuCkrOCljeKAjeCkpyDgpLjgpY3igI3gpK7gpYPgpKTgpL8g4KSV4KWLIOCkuOClgOCkruCkv+CkpCDgpJXgpLAg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpKfgpYDgpK7gpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KWN4KSu4KWD4KSk4KS/IOCkruClh+CkgiDgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KWHIOCkleClgeCkmyDgpLngpL/gpLjgpY3gpLjgpYvgpIIg4KSV4KWLIOCksuCkl+CkvuCkpOCkvuCksCDgpKzgpKjgpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpLLgpL/gpI8g4KSJ4KSq4KSy4KSs4KWN4oCN4KSnIOCkuOCljeKAjeCkruClg+CkpOCkvyDgpJXgpYsg4KS44KWA4KSu4KS/4KSkIOCkleCksCDgpKvgpLzgpYvgpKgg4KSV4KWLIOCkp+ClgOCkruCkviDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iMTg0Mzg1MTI5NTM3NzA1OTM4Ij4i4KSQ4KSq4KWN4KS4IOCkueCkn+CkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIEFuZHJvaWQg4KSq4KWI4KSV4KWH4KScIOCkueCkn+CkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkruCkueCkpOCljeCkteCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkueCkn+CkvuCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjI3NDEwOTE5MTg0NTg0Mjc1NiI+IuCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KS+IOCkoeClh+Ckn+CkviDgpLngpJ/gpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iNDYyNTMyMzY4NDEyNTQ1OTQ4OCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KS44KS+4KSr4KS8IOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjMxMjg2NjU1NzE4Mzc0MDg2NzUiPiLgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLjgpILgpJrgpK8g4KS54KSf4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpILgpJrgpK8g4KSr4KS84KS+4KSH4KSy4KWH4KSCIOCkueCkn+CkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4i4KSQ4KSq4KWN4KS4ICDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KS44KWN4KSl4KS+4KSoIOCkruCkvuCkquClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkieCkuOCkleCkviDgpJXgpYvgpKEsIOCkoeClh+Ckn+Ckviwg4KSU4KSwIOCkuOCkguCkmuCkryDgpIbgpJXgpL7gpLDgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+IuCkuOClgOCkp+ClhyDgpJDgpKrgpY3gpLgg4KSH4KSC4KS44KWN4oCN4KSf4KWJ4KSyIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLgpI/gpKog4KSV4KWLIOCkqOCkjyDgpK/gpL4g4KSo4KSIIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLXgpL7gpLLgpYcgQW5kcm9pZCDgpKrgpYjgpJXgpYfgpJwg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkheCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpLDgpYLgpKog4KS44KWHIOCkuOCktuCkleCljeCkpCDgpIXgpKjgpYHgpK7gpKTgpL/gpK/gpYvgpIIg4KS14KS+4KSy4KWHIOCkqOCkjyDgpJDgpKrgpY3gpLggIOCknOCli+CkoeCkvOCkqOClhyDgpK7gpYfgpIIg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcENhY2hlIiBtc2dpZD0iNzQ4NzI3OTM5MTcyMzUyNjgxNSI+IuCkuOCkreClgCDgpJDgpKrgpY3gpLggIOCkuOCkguCkmuCkryDgpKHgpYfgpJ/gpL4g4KS54KSf4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3NDY0MDg3MTk0NTQzNDU2NSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClgCDgpLjgpILgpJrgpK8g4KSo4KS/4KSw4KWN4KSm4KWH4KS24KS/4KSV4KS+4KST4KSCIOCkruClh+CkgiDgpLjgpYcg4KSr4KS84KS+4KSH4KSy4KWH4KSCIOCkueCkn+CkvuCkleCksCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkleCliyDgpJbgpL7gpLLgpYAg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIOCkh+CkuOCkuOClhyDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpIXgpKfgpL/gpJUg4KSn4KWA4KSu4KWHIOCkquCljeCksOCkvuCksOCkguCkrSDgpLngpYsg4KS44KSV4KSk4KWHIOCkueCliOCkgiDgpJXgpY3gpK/gpYvgpILgpJXgpL8g4KSJ4KSo4KWN4KS54KWH4KSCIOCkheCkquCkqOCkviDgpKHgpYfgpJ/gpL4g4KSq4KWB4KSo4KSw4KWN4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpJXgpYAg4KSG4KS14KS24KWN4KSv4KSV4KSk4KS+IOCkueCli+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYAg4KS44KSC4KSa4KSvIOCkqOCkv+CksOCljeCkpuClh+CktuCkv+CkleCkvuCkk+CkgiDgpK7gpYfgpIIg4KS44KWHIOCkq+CkvOCkvuCkh+CksuClh+CkgiDgpLngpJ/gpL7gpJXgpLAg4KSr4KS84KWL4KSoIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpYsg4KSW4KS+4KSy4KWAIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpIfgpLjgpLjgpYcg4KSF4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSF4KSn4KS/4KSVIOCkp+ClgOCkruClhyDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KS54KWLIOCkuOCkleCkpOClhyDgpLngpYjgpIIg4KSV4KWN4KSv4KWL4KSC4KSV4KS/IOCkieCkqOCljeCkueClh+CkgiDgpIXgpKrgpKjgpL4g4KSh4KWH4KSf4KS+IOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkhuCkteCktuCljeCkr+CkleCkpOCkviDgpLngpYvgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMjg5ODkwMjcxNjQ1OTIxNDExIj4i4KSQ4KSq4KWN4KS4IOCkuOCkguCkuOCkvuCkp+CkqOCli+CkgiDgpJXgpYsg4KSy4KWHIOCknOCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdmVQYWNrYWdlIiBtc2dpZD0iMzE5NTYyMjE3Nzc4MjQ0NTI0Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJDgpKrgpY3gpLgg4KS44KSC4KS44KS+4KSn4KSo4KWL4KSCIOCkleCliyDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KWHIOCkrOCkvuCkueCksOClgCDgpK7gpYDgpKHgpL/gpK/gpL4g4KSu4KWH4KSCIOCklOCksCDgpIfgpLjgpJXgpYcg4KS14KS/4KSq4KSw4KWA4KSkIOCksuClhyDgpJzgpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRMb2dzIiBtc2dpZD0iNjYxNTc3ODU0MzE5ODk2NzYxNCI+IuCkuOCkguCkteClh+CkpuCkqOCktuClgOCksiDgpLLgpYngpJcg4KSh4KWH4KSf4KS+IOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MjA2MTMxMzI5MzQ1NTE1MSI+IuCkleCkv+CkuOClgCDgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpYAg4KS14KS/4KSt4KS/4KSo4KWN4oCN4KSoIOCksuClieCklyDgpKvgpLzgpL7gpIfgpLLgpYvgpIIg4KS44KWHIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpILgpK3gpL7gpLXgpL/gpKQg4KSw4KWC4KSqIOCkuOClhyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSv4KS+IOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS24KS+4KSu4KS/4KSyIOCkleCksOCkpOClhyDgpLngpYHgpI8sIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYcg4KS44KS+4KSlIOCkhuCkqiDgpJXgpY3igI3gpK/gpL4g4KSV4KSwIOCksOCkueClhyDgpLngpYjgpIIg4KSH4KS4IOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJbgpYvgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIwNjM0MzgxNDAyNDE1NjA0NDMiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpYAg4KS14KS/4KSt4KS/4KSo4KWN4oCN4KSoIOCksuClieCklyDgpKvgpLzgpL7gpIfgpLLgpYfgpIIg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkguCkreCkvuCkteCkv+CkpCDgpLDgpYLgpKog4KS44KWHIOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpK/gpL4g4KSo4KS/4KSc4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLjgpLngpL/gpKQsIOCkr+CkuSDgpIfgpLjgpYcg4KSH4KS4IOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJbgpYvgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJXgpL8g4KSG4KSqIOCkq+CkvOCli+CkqCDgpLjgpYcg4KSV4KWN4oCN4KSv4KS+IOCkleCksCDgpLDgpLngpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MjA2MTMxMzI5MzQ1NTE1MSI+IuCkleCkv+CkuOClgCDgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpYAg4KS14KS/4KSt4KS/4KSo4KWN4oCN4KSoIOCksuClieCklyDgpKvgpLzgpL7gpIfgpLLgpYvgpIIg4KS44KWHIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpILgpK3gpL7gpLXgpL/gpKQg4KSw4KWC4KSqIOCkuOClhyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSv4KS+IOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS24KS+4KSu4KS/4KSyIOCkleCksOCkpOClhyDgpLngpYHgpI8sIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYcg4KS44KS+4KSlIOCkhuCkqiDgpJXgpY3igI3gpK/gpL4g4KSV4KSwIOCksOCkueClhyDgpLngpYjgpIIg4KSH4KS4IOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJbgpYvgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIwNjM0MzgxNDAyNDE1NjA0NDMiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpYAg4KS14KS/4KSt4KS/4KSo4KWN4oCN4KSoIOCksuClieCklyDgpKvgpLzgpL7gpIfgpLLgpYfgpIIg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkguCkreCkvuCkteCkv+CkpCDgpLDgpYLgpKog4KS44KWHIOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpK/gpL4g4KSo4KS/4KSc4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLjgpLngpL/gpKQsIOCkr+CkuSDgpIfgpLjgpYcg4KSH4KS4IOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJbgpYvgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJXgpL8g4KSG4KSqIOCkq+CkvOCli+CkqCDgpLjgpYcg4KSV4KWN4oCN4KSv4KS+IOCkleCksCDgpLDgpLngpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjcxNTgwNTU1NTgyMzg4MTgxOCI+IuCkquCljeCksuClh+CkrOCliOCklSDgpJXgpYcg4KSy4KS/4KSPIOCkleCkv+CkuOClgCDgpK3gpYAg4KSu4KWA4KSh4KS/4KSv4KS+IOCkoeClgOCkleCli+CkoeCksCDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI4MjgzOTEyNDg4NDMzMTg5MDEwIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpKrgpY3gpLLgpYfgpKzgpYjgpJUg4KSh4KWA4KSV4KWL4KShIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCkv+CkuOClgCDgpK3gpYAg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJfgpI8g4KSh4KWA4KSV4KWL4KSh4KSwIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpKrgpY3gpLLgpYfgpKzgpYjgpJUg4KSh4KWA4KSV4KWL4KShIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCkv+CkuOClgCDgpK3gpYAg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJfgpI8g4KSh4KWA4KSV4KWL4KSh4KSwIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjE2NzgzOTE4OTY3ODY4ODIwMTQiPiLgpLXgpL/gpLbgpY3gpLXgpLjgpKjgpYDgpK8g4KSV4KWN4KSw4KWH4KSh4KWH4KSC4KS24KS/4KSv4KSyIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjQwMTU2NDQwNDcxOTY5MzcwMTQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIENBIOCkquCljeCksOCkruCkvuCko+CkquCkpOCljeCksOCli+CkgiDgpJXgpYsg4KS14KS/4KS24KWN4KS14KS44KSo4KWA4KSvIOCkleCljeCksOClh+CkoeClh+CkguCktuCkv+Ckr+CksiDgpJXgpYcg4KSw4KWC4KSqIOCkruClh+CkgiDgpIfgpILgpLjgpY3gpJ/gpYngpLIg4KSU4KSwIOCkheCkqOCkh+CkguCkuOCljeCkn+ClieCksiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMiIG1zZ2lkPSI0MDE1NjQ0MDQ3MTk2OTM3MDE0Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsgQ0Eg4KSq4KWN4KSw4KSu4KS+4KSj4KSq4KSk4KWN4KSw4KWL4KSCIOCkleCliyDgpLXgpL/gpLbgpY3gpLXgpLjgpKjgpYDgpK8g4KSV4KWN4KSw4KWH4KSh4KWH4KSC4KS24KS/4KSv4KSyIOCkleClhyDgpLDgpYLgpKog4KSu4KWH4KSCIOCkh+CkguCkuOCljeCkn+ClieCksiDgpJTgpLAg4KSF4KSo4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCksOCkqOClhyDgpKbgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RpYWdub3N0aWMiIG1zZ2lkPSI4MDc2NzQzOTUzOTA4MDAwMzQyIj4i4KSo4KS/4KSm4KS+4KSoIOCkleClhyDgpLjgpY3igI3gpLXgpL7gpK7gpL/gpKTgpY3igI3gpLUg4KS14KS+4KSy4KWHIOCkuOCkguCkuOCkvuCkp+CkqOCli+CkgiDgpJXgpYsg4KSq4KSi4KS84KWH4KSCL+CksuCkv+CkluClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RpYWdub3N0aWMiIG1zZ2lkPSI2NjA4Mjk1NjkyMDAyNDUyMjgzIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyBkaWFnIOCkuOCkruClguCkuSDgpJXgpYcg4KS44KWN4oCN4KS14KS+4KSu4KS/4KSk4KWN4oCN4KS1IOCkteCkvuCksuClhyDgpJXgpL/gpLjgpYAg4KS44KSC4KS44KS+4KSn4KSoIOCkleCliyDgpKrgpKLgpLzgpKjgpYcg4KSU4KSwIOCkieCkuOCkruClh+CkgiDgpLLgpL/gpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliDsg4KSJ4KSm4KS+4KS54KSw4KSjIOCkleClhyDgpLLgpL/gpI8sIC9kZXYg4KSV4KWAIOCkq+CkvOCkvuCkh+CksuClh+Ckgi4g4KSv4KS5IOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpYAg4KS44KWN4oCN4KSl4KS/4KSw4KSk4KS+IOCklOCksCDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSV4KWLIOCkuOCkguCkreCkvuCkteCkv+CkpCDgpLDgpYLgpKog4KS44KWHIOCkquCljeCksOCkreCkvuCkteCkv+CkpCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4g4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpKjgpL/gpLDgpY3gpK7gpL7gpKTgpL4g4KSv4KS+IOCkkeCkquCksOClh+Ckn+CksCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSV4KWH4KS14KSyIOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksC3gpLXgpL/gpLbgpL/gpLfgpY3gpJ8g4KSo4KS/4KSm4KS+4KSoIOCkleClhyDgpLLgpL/gpI8g4KSV4KS/4KSv4KS+IOCknOCkvuCkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiLgpI/gpKrgpY3igI3gpLgg4KSY4KSf4KSV4KWL4KSCIOCkleCliyDgpLjgpJXgpY3gpLfgpK4g4KSv4KS+IOCkheCkleCljeCkt+CkriDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODg4NzQzNTc0MDk4MjIzNzI5NCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSv4KS5IOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCkleCkvyDgpJXgpL/gpLjgpYAg4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpL4g4KSY4KSf4KSVIOCkuOCkleCljeCkt+CkriDgpLngpYgg4KSv4KS+IOCkqOCkueClgOCkgi4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpK7gpLngpKTgpY3igI3gpLXgpKrgpYLgpLDgpY3gpKMg4KSr4KS84KWL4KSoIOCkleCljeCkt+CkruCkpOCkvuCkk+CkgiDgpJXgpYsg4KSF4KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpK7gpYfgpIIg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkuOCkvuCkteCkp+CkvuCkqOClgCDgpJXgpYcg4KS44KS+4KSlIOCkleCksOCkqOCkviDgpJrgpL7gpLngpL/gpI8sIOCkleCljeCkr+Cli+CkguCkleCkvyDgpIfgpLjgpLjgpYcg4KSP4KSq4KWN4oCN4KS4IOCkmOCkn+CkleCli+CkgiDgpJXgpYcg4KSF4KSo4KWB4KSq4KSv4KWL4KSX4KWALCDgpIXgpLjgpILgpJfgpKQsIOCkr+CkviDgpIXgpLjgpY3igI3gpKXgpL/gpLAg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkruClh+CkgiDgpJzgpL7gpKjgpYcg4KSV4KWAIOCkuOCkguCkreCkvuCkteCkqOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODI3MjMyNDg0NDE2NTA1NjE1Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpK/gpLkg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSV4KS/IOCkleCkv+CkuOClgCDgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleCkviDgpJjgpJ/gpJUg4KS44KSV4KWN4KS34KSuIOCkueCliCDgpK/gpL4g4KSo4KS54KWA4KSCLiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4oCN4KS4IOCkruCkueCkpOCljeKAjeCkteCkquClguCksOCljeCkoyDgpKvgpLzgpYvgpKgg4KSV4KWN4KS34KSu4KSk4KS+4KST4KSCIOCkleCliyDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KSo4KWHIOCkruClh+CkgiDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiDgpIfgpLgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KS44KS+4KS14KSn4KS+4KSo4KWAIOCkleClhyDgpLjgpL7gpKUg4KSV4KSw4KSo4KS+IOCkmuCkvuCkueCkv+Ckjywg4KSV4KWN4KSv4KWL4KSC4KSV4KS/IOCkh+CkuOCkuOClhyDgpI/gpKrgpY3igI3gpLgg4KSY4KSf4KSV4KWL4KSCIOCkleClhyDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAsIOCkheCkuOCkguCkl+CkpCwg4KSv4KS+IOCkheCkuOCljeKAjeCkpeCkv+CksCDgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSu4KWH4KSCIOCknOCkvuCkqOClhyDgpJXgpYAg4KS44KSC4KSt4KS+4KS14KSo4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+IuCkkOCkquCljeCkuCDgpJXgpYsgZGlhZyDgpLjgpK7gpYLgpLkg4KSV4KWHIOCkuOCljeKAjeCkteCkvuCkruCkv+CkpOCljeKAjeCktSDgpLXgpL7gpLLgpYcg4KSV4KS/4KS44KWAIOCkuOCkguCkuOCkvuCkp+CkqCDgpJXgpYsg4KSq4KSi4KS84KSo4KWHIOCklOCksCDgpIngpLjgpK7gpYfgpIIg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYg7IOCkieCkpuCkvuCkueCksOCkoyDgpJXgpYcg4KSy4KS/4KSPLCAvZGV2IOCkleClgCDgpKvgpLzgpL7gpIfgpLLgpYfgpIIuIOCkr+CkuSDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSV4KWAIOCkuOCljeKAjeCkpeCkv+CksOCkpOCkviDgpJTgpLAg4KS44KWB4KSw4KSV4KWN4KS34KS+IOCkleCliyDgpLjgpILgpK3gpL7gpLXgpL/gpKQg4KSw4KWC4KSqIOCkuOClhyDgpKrgpY3gpLDgpK3gpL7gpLXgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSo4KS/4KSw4KWN4KSu4KS+4KSk4KS+IOCkr+CkviDgpJHgpKrgpLDgpYfgpJ/gpLAg4KSm4KWN4KS14KS+4KSw4KS+IOCkleClh+CkteCksiDgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLAt4KS14KS/4KS24KS/4KS34KWN4KSfIOCkqOCkv+CkpuCkvuCkqCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkv+Ckr+CkviDgpJzgpL7gpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29tcG9uZW50U3RhdGUiIG1zZ2lkPSI2MzM1NTc2Nzc1NzExMDk1OTMxIj4i4KSQ4KSq4KWN4KS4IOCkmOCkn+CkleCli+CkgiDgpJXgpYsg4KS44KSV4KWN4KS34KSuIOCkr+CkviDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkr+CkuSDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJXgpL8g4KSV4KS/4KS44KWAIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KS+IOCkmOCkn+CklSDgpLjgpJXgpY3gpLfgpK4g4KS54KWIIOCkr+CkviDgpKjgpLngpYDgpIIuIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSu4KS54KSk4KWN4oCN4KS14KSq4KWC4KSw4KWN4KSjIOCkq+CkvOCli+CkqCDgpJXgpY3gpLfgpK7gpKTgpL7gpJPgpIIg4KSV4KWLIOCkheCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIOCkh+CkuCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpLjgpL7gpLXgpKfgpL7gpKjgpYAg4KSV4KWHIOCkuOCkvuCkpSDgpJXgpLDgpKjgpL4g4KSa4KS+4KS54KS/4KSPLCDgpJXgpY3gpK/gpYvgpILgpJXgpL8g4KSH4KS44KS44KWHIOCkkOCkquCljeCkuCDgpJjgpJ/gpJXgpYvgpIIg4KSV4KWHIOCkheCkqOClgeCkquCkr+Cli+Ckl+ClgCwg4KSF4KS44KSC4KSX4KSkLCDgpK/gpL4g4KSF4KS44KWN4oCN4KSl4KS/4KSwIOCkuOCljeKAjeCkpeCkv+CkpOCkvyDgpK7gpYfgpIIg4KSc4KS+4KSo4KWHIOCkleClgCDgpLjgpILgpK3gpL7gpLXgpKjgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTgyNzIzMjQ4NDQxNjUwNTYxNSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSv4KS5IOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCkleCkvyDgpJXgpL/gpLjgpYAg4KSF4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpL4g4KSY4KSf4KSVIOCkuOCkleCljeCkt+CkriDgpLngpYgg4KSv4KS+IOCkqOCkueClgOCkgi4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpK7gpLngpKTgpY3igI3gpLXgpKrgpYLgpLDgpY3gpKMg4KSr4KS84KWL4KSoIOCkleCljeCkt+CkruCkpOCkvuCkk+CkgiDgpJXgpYsg4KSF4KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpK7gpYfgpIIg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkuOCkvuCkteCkp+CkvuCkqOClgCDgpJXgpYcg4KS44KS+4KSlIOCkleCksOCkqOCkviDgpJrgpL7gpLngpL/gpI8sIOCkleCljeCkr+Cli+CkguCkleCkvyDgpIfgpLjgpLjgpYcg4KSQ4KSq4KWN4KS4IOCkmOCkn+CkleCli+CkgiDgpJXgpYcg4KSF4KSo4KWB4KSq4KSv4KWL4KSX4KWALCDgpIXgpLjgpILgpJfgpKQsIOCkr+CkviDgpIXgpLjgpY3igI3gpKXgpL/gpLAg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkruClh+CkgiDgpJzgpL7gpKjgpYcg4KSV4KWAIOCkuOCkguCkreCkvuCkteCkqOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDYyNzMxNTM1MTA5MzUwODc5NSI+IuCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpIIg4KSv4KS+IOCksOCkpuCljeCkpiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDA4ODY0MjY1NDA4NTg1MDY2MiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSJ4KS44KSV4KWHIOCkr+CkviDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KS14KS/4KS24KWH4KS3IOCkheCkqOClgeCkruCkpOCkv+Ckr+CkvuCkgiDgpKbgpYfgpKjgpYcg4KSv4KS+IOCksOCkpuCljeCkpiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkieCkqCDgpLjgpYHgpLXgpL/gpKfgpL7gpJPgpIIg4KSk4KSVIOCkquCkueClgeCkguCkmuCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCknOCliyDgpIbgpKrgpKjgpYcg4KSJ4KSo4KWN4KS54KWH4KSCIOCkqOCkueClgOCkgiDgpKbgpYAg4KS54KWI4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iODQ2MzE4MTYyODY5NTM5NjM5MSI+IuCkquCkuOCkguCkpuClgOCkpuCkviDgpI/gpKrgpY3igI3gpLgg4KS44KWH4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9IjQ5NzM5ODY3NjIyNDE3ODM3MTIiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpKrgpLjgpILgpKbgpYDgpKbgpL4g4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KSG4KSq4KS44KWHIOCkqOCkv+CknOClgCDgpKHgpYfgpJ/gpL4g4KSP4KSV4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkhuCkquCkleClhyDgpK7gpYzgpJzgpYLgpKbgpL4g4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpY3gpKrgpYLgpKvgpLwg4KSV4KSw4KSV4KWHLCDgpJrgpLLgpL7gpI8g4KSc4KS+4KSo4KWHIOCkteCkvuCksuClhyDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkmuClgeCkquCkmuCkvuCkqiDgpKzgpKbgpLIg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDA4ODY0MjY1NDA4NTg1MDY2MiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkieCkuOCkleClhyDgpK/gpL4g4KSF4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSV4KWHIOCksuCkv+CkjyDgpLXgpL/gpLbgpYfgpLcg4KSF4KSo4KWB4KSu4KSk4KS/4KSv4KS+4KSCIOCkpuClh+CkqOClhyDgpK/gpL4g4KSw4KSm4KWN4KSmIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkieCkqCDgpLjgpYHgpLXgpL/gpKfgpL7gpJPgpIIg4KSk4KSVIOCkquCkueClgeCkguCkmuCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCknOCliyDgpIbgpKrgpKjgpYcg4KSJ4KSo4KWN4KS54KWH4KSCIOCkqOCkueClgOCkgiDgpKbgpYAg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iODQ2MzE4MTYyODY5NTM5NjM5MSI+IuCkquCkuOCkguCkpuClgOCkpuCkviDgpJDgpKrgpY3gpLgg4KS44KWH4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9IjQ5NzM5ODY3NjIyNDE3ODM3MTIiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSq4KS44KSC4KSm4KWA4KSm4KS+IOCkkOCkquCljeCkuCAg4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSG4KSq4KS44KWHIOCkqOCkv+CknOClgCDgpKHgpYfgpJ/gpL4g4KSP4KSV4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkhuCkquCkleClhyDgpK7gpYzgpJzgpYLgpKbgpL4g4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KWN4KSq4KWC4KSr4KS8IOCkleCksOCkleClhywg4KSa4KSy4KS+4KSPIOCknOCkvuCkqOClhyDgpLXgpL7gpLLgpYcg4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSa4KWB4KSq4KSa4KS+4KSqIOCkrOCkpuCksiDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9IjIyMjYxOTUyOTA5NTUyMjQ3MzAiPiLgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KS44KWH4KSf4KS/4KSC4KSXIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KS44KWH4KSf4KS/4KSC4KSXIOCkoeClh+Ckn+CkviDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KSG4KSq4KSV4KWHIOCkuOCkv+CkuOCljeCkn+CkriDgpJXgpYcg4KSV4KWJ4KSo4KWN4KSr4KS84KS/4KSX4KSw4KWH4KS24KSoIOCkleCliyDgpKbgpYLgpLfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9Ijc3NzU3MjM0NDE1NTg5MDcxODEiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KS44KWH4KSf4KS/4KSC4KSXIOCkoeClh+Ckn+CkviDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkhuCkquCkleClhyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSV4KWHIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCDgpJXgpYsg4KSm4KWC4KS34KS/4KSkIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjIwNDY3NjI1MTg3NjcxODI4OCI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KS44KWH4KSf4KS/4KSC4KSXIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSV4KWHIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSh4KWH4KSf4KS+IOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjgxNTk1MzU2MTMwMjAxMzczOTEiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSV4KWHIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSh4KWH4KSf4KS+IOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiJHb29nbGUg4KS44KWH4KS14KS+4KSP4KSCIOCkqOCkleCljeCktuCkviDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIEdvb2dsZSDgpLjgpYfgpLXgpL7gpJPgpIIg4KSV4KS+IOCkqOCkleCljeCktuClhyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyBHb29nbGUg4KS44KWH4KS14KS+4KST4KSCIOCkleCkviDgpKjgpJXgpY3gpLbgpYcg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4i4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkueCli+CkqOClhyDgpKrgpLAg4KSa4KSy4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczOTAzMDQ2NjQxMTY4ODA3MDQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeCkn+CkriDgpKbgpY3gpLXgpL7gpLDgpL4g4KSs4KWC4KSf4KS/4KSC4KSXIOCkquClguCksOCljeCkoyDgpJXgpLDgpKTgpYcg4KS54KWAIOCkuOCljeCkteCkpOCkgyDgpIbgpLDgpILgpK0g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkhuCksOCkguCkrSDgpLngpYvgpKjgpYcg4KSu4KWH4KSCIOCkheCkp+Ckv+CklSDgpLjgpK7gpK8g4KSy4KSXIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkj+CkquCljeCkuCDgpJXgpYsg4KSo4KS/4KSw4KSC4KSk4KSwIOCkmuCksuCkvuCkleCksCDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpKfgpYDgpK7gpL4g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeCkn+CkriDgpKbgpY3gpLXgpL7gpLDgpL4g4KSs4KWC4KSf4KS/4KSC4KSXIOCkquClguCksOCljeCkoyDgpJXgpLDgpKTgpYcg4KS54KWAIOCkuOCljeCkteCkpOCkgyDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpKvgpLzgpYvgpKgg4KSV4KWLIOCkquCljeCksOCkvuCksOCkguCkrSDgpLngpYvgpKjgpYcg4KSu4KWH4KSCIOCkheCkp+Ckv+CklSDgpLjgpK7gpK8g4KSy4KSXIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkj+CkquCljeCkuCDgpJXgpYcg4KSo4KS/4KSw4KSC4KSk4KSwIOCkmuCksuCkpOClhyDgpLDgpLngpKjgpYcg4KS44KWHIOCkuOCkguCkquClguCksOCljeCkoyDgpKvgpLzgpYvgpKgg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KSP4KSCIOCkp+ClgOCkruClgCDgpLngpYsg4KS44KSV4KSk4KWAIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzM5MDMwNDY2NDExNjg4MDcwNCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkuOCkv+CkuOCljeCkn+CkriDgpKbgpY3gpLXgpL7gpLDgpL4g4KSs4KWC4KSf4KS/4KSC4KSXIOCkquClguCksOCljeCkoyDgpJXgpLDgpKTgpYcg4KS54KWAIOCkuOCljeCkteCkpOCkgyDgpIbgpLDgpILgpK0g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkhuCksOCkguCkrSDgpLngpYvgpKjgpYcg4KSu4KWH4KSCIOCkheCkp+Ckv+CklSDgpLjgpK7gpK8g4KSy4KSXIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkkOCkquCljeCkuCAg4KSV4KWLIOCkqOCkv+CksOCkguCkpOCksCDgpJrgpLLgpL7gpJXgpLAg4KS44KSC4KSq4KWC4KSw4KWN4KSjIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYsg4KSn4KWA4KSu4KS+IOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KS/4KS44KWN4KSf4KSuIOCkpuCljeCkteCkvuCksOCkviDgpKzgpYLgpJ/gpL/gpILgpJcg4KSq4KWC4KSw4KWN4KSjIOCkleCksOCkpOClhyDgpLngpYAg4KS44KWN4KS14KSk4KSDIOCkquCljeCksOCkvuCksOCkguCkrSDgpLngpYvgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KS44KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkueCli+CkqOClhyDgpK7gpYfgpIIg4KSF4KSn4KS/4KSVIOCkuOCkruCkryDgpLLgpJcg4KS44KSV4KSk4KS+IOCkueCliCDgpJTgpLAg4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSo4KS/4KSw4KSC4KSk4KSwIOCkmuCksuCkpOClhyDgpLDgpLngpKjgpYcg4KS44KWHIOCkuOCkguCkquClguCksOCljeCkoyDgpKvgpLzgpYvgpKgg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KSP4KSCIOCkp+ClgOCkruClgCDgpLngpYsg4KS44KSV4KSk4KWAIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiLgpLjgpY3gpJ/gpL/gpJXgpYAg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkreClh+CknOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KWN4oCN4KSf4KS/4KSV4KWAIOCkquCljeCksOCkuOCkvuCksOCkoyDgpK3gpYfgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSc4KWLIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpK7gpL7gpKrgpY3gpKQg4KS54KWL4KSo4KWHIOCkleClhyDgpKzgpL7gpKYg4KSt4KWAIOCkrOCkqOClhyDgpLDgpLngpKTgpYcg4KS54KWI4KSCLiDgpIXgpKTgpY3gpK/gpKfgpL/gpJUg4KSJ4KSq4KSv4KWL4KSXLCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWAIOCkrOCkueClgeCkpCDgpIXgpKfgpL/gpJUg4KS44KWN4KSu4KWD4KSk4KS/IOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSV4KWHIOCkieCkuOClhyDgpKfgpYDgpK7gpL4g4KSv4KS+IOCkheCkuOCljeKAjeCkpeCkv+CksCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpY3igI3gpJ/gpL/gpJXgpYAg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpJzgpYsg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkruCkvuCkquCljeCkpCDgpLngpYvgpKjgpYcg4KSV4KWHIOCkrOCkvuCkpiDgpK3gpYAg4KSs4KSo4KWHIOCksOCkueCkpOClhyDgpLngpYjgpIIuIOCkheCkpOCljeCkr+Ckp+Ckv+CklSDgpIngpKrgpK/gpYvgpJcsIOCkq+CkvOCli+CkqCDgpJXgpYAg4KSs4KS54KWB4KSkIOCkheCkp+Ckv+CklSDgpLjgpY3gpK7gpYPgpKTgpL8g4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYcg4KSJ4KS44KWHIOCkp+ClgOCkruCkviDgpK/gpL4g4KSF4KS44KWN4oCN4KSl4KS/4KSwIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KWN4oCN4KSf4KS/4KSV4KWAIOCkquCljeCksOCkuOCkvuCksOCkoyDgpK3gpYfgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSc4KWLIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpK7gpL7gpKrgpY3gpKQg4KS54KWL4KSo4KWHIOCkleClhyDgpKzgpL7gpKYg4KSt4KWAIOCkrOCkqOClhyDgpLDgpLngpKTgpYcg4KS54KWI4KSCLiDgpIXgpKTgpY3gpK/gpKfgpL/gpJUg4KSJ4KSq4KSv4KWL4KSXLCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWAIOCkrOCkueClgeCkpCDgpIXgpKfgpL/gpJUg4KS44KWN4KSu4KWD4KSk4KS/IOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSV4KWHIOCkieCkuOClhyDgpKfgpYDgpK7gpL4g4KSv4KS+IOCkheCkuOCljeKAjeCkpeCkv+CksCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpY3igI3gpJ/gpL/gpJXgpYAg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpJzgpYsg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkruCkvuCkquCljeCkpCDgpLngpYvgpKjgpYcg4KSV4KWHIOCkrOCkvuCkpiDgpK3gpYAg4KSs4KSo4KWHIOCksOCkueCkpOClhyDgpLngpYjgpIIuIOCkheCkpOCljeCkr+Ckp+Ckv+CklSDgpIngpKrgpK/gpYvgpJcsIOCkq+CkvOCli+CkqCDgpJXgpYAg4KSs4KS54KWB4KSkIOCkheCkp+Ckv+CklSDgpLjgpY3gpK7gpYPgpKTgpL8g4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYcg4KSJ4KS44KWHIOCkp+ClgOCkruCkviDgpK/gpL4g4KSF4KS44KWN4oCN4KSl4KS/4KSwIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENvbnRhY3RzIiBtc2dpZD0iODM0ODQ4MTEzMTg5OTg4NjEzMSI+IuCkheCkquCkqOClhyDgpLjgpILgpKrgpLDgpY3gpJUg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1Mjk0ODY2ODU2OTQxMTQ5NjM5Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KS44KSC4KSq4KSw4KWN4KSV4KWL4KSCIOCkleClhyDgpKHgpYfgpJ/gpL4g4KSV4KWLLCDgpLjgpL7gpKUg4KS54KWAIOCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KS14KS/4KS24KS/4KS34KWN4KSfIOCkteCljeCkr+CkleCljeCkpOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSV4KWJ4KSyIOCkleCksOCkqOClhywg4KSI4KSu4KWH4KSyIOCkleCksOCkqOClhywg4KSv4KS+IOCkheCkqOCljeKAjeCkryDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkuOCkguCkteCkvuCkpiDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkhuCkteClg+CkpOCljeCkpOCkvyDgpJXgpYsg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS54KWH4KSc4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYgsIOCklOCksCDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkhuCkquCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+CkqOCkviDgpLjgpILgpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkleCliyDgpLjgpL7gpJ3gpL4g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ0MDY1NDE1MjQ1NzMwMDY2MiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkuOCkguCkquCksOCljeCkleCli+CkgiDgpJXgpYcg4KSh4KWH4KSf4KS+IOCkleCliywg4KS44KS+4KSlIOCkueClgCDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkteCkv+CktuCkv+Ckt+CljeCknyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpK/gpYvgpIIg4KSV4KWLIOCkleClieCksiDgpJXgpLDgpKjgpYcsIOCkiOCkruClh+CksiDgpJXgpLDgpKjgpYcsIOCkr+CkviDgpIXgpKjgpY3igI3gpK8g4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpLjgpILgpLXgpL7gpKYg4KSV4KSw4KSo4KWHIOCkleClgCDgpIbgpLXgpYPgpKTgpY3gpKTgpL8g4KSV4KWLIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkuOCkguCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkueClh+CknOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILCDgpJTgpLAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClhyDgpKzgpL/gpKjgpL4g4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS+4KSd4KS+IOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTI5NDg2Njg1Njk0MTE0OTYzOSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpLjgpILgpKrgpLDgpY3gpJXgpYvgpIIg4KSV4KWHIOCkoeClh+Ckn+CkviDgpJXgpYssIOCkuOCkvuCkpSDgpLngpYAg4KSG4KSq4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpLXgpL/gpLbgpL/gpLfgpY3gpJ8g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSv4KWL4KSCIOCkleCliyDgpJXgpYngpLIg4KSV4KSw4KSo4KWHLCDgpIjgpK7gpYfgpLIg4KSV4KSw4KSo4KWHLCDgpK/gpL4g4KSF4KSo4KWN4oCN4KSvIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KS44KSC4KS14KS+4KSmIOCkleCksOCkqOClhyDgpJXgpYAg4KSG4KS14KWD4KSk4KWN4KSk4KS/IOCkleCliyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS54KWH4KSc4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYgsIOCklOCksCDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClhyDgpKzgpL/gpKjgpL4g4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS+4KSd4KS+IOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KS44KSC4KSq4KSw4KWN4KSV4KWL4KSCIOCkleClhyDgpKHgpYfgpJ/gpL4g4KSV4KWLLCDgpLjgpL7gpKUg4KS54KWAIOCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KS14KS/4KS24KS/4KS34KWN4KSfIOCkteCljeCkr+CkleCljeCkpOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSV4KWJ4KSyIOCkleCksOCkqOClhywg4KSI4KSu4KWH4KSyIOCkleCksOCkqOClhywg4KSv4KS+IOCkheCkqOCljeKAjeCkryDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkuOCkguCkteCkvuCkpiDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkhuCkteClg+CkpOCljeCkpOCkvyDgpJXgpYsg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkuOCkguCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkueClh+CknOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILCDgpJTgpLAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkuOCkguCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ29udGFjdHMiIG1zZ2lkPSI1MTA3NDkyMDg2NDE2NzkzNTQ0Ij4i4KSF4KSq4KSo4KWHIOCkuOCkguCkquCksOCljeCklSDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpLjgpILgpKrgpLDgpY3gpJXgpYvgpIIg4KSV4KWHIOCkoeClh+Ckn+CkviDgpJXgpYssIOCkuOCkvuCkpSDgpLngpYAg4KSG4KSq4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpLXgpL/gpLbgpL/gpLfgpY3gpJ8g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSv4KWL4KSCIOCkleCliyDgpJXgpYngpLIg4KSV4KSw4KSo4KWHLCDgpIjgpK7gpYfgpLIg4KSV4KSw4KSo4KWHLCDgpK/gpL4g4KSF4KSo4KWN4oCN4KSvIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KS44KSC4KS14KS+4KSmIOCkleCksOCkqOClhyDgpJXgpYAg4KSG4KS14KWD4KSk4KWN4KSk4KS/IOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS54KSf4KS+4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU4OTg2OTIyNDYyNTE2MzU1OCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkuOCkguCkquCksOCljeCkleCli+CkgiDgpJXgpYcg4KSh4KWH4KSf4KS+IOCkleCliywg4KS44KS+4KSlIOCkueClgCDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkteCkv+CktuCkv+Ckt+CljeCknyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpK/gpYvgpIIg4KSV4KWLIOCkleClieCksiDgpJXgpLDgpKjgpYcsIOCkiOCkruClh+CksiDgpJXgpLDgpKjgpYcsIOCkr+CkviDgpIXgpKjgpY3igI3gpK8g4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpLjgpILgpLXgpL7gpKYg4KSV4KSw4KSo4KWHIOCkleClgCDgpIbgpLXgpYPgpKTgpY3gpKTgpL8g4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpLjgpILgpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkleCliyDgpLngpJ/gpL7gpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KS44KSC4KSq4KSw4KWN4KSV4KWL4KSCIOCkleClhyDgpKHgpYfgpJ/gpL4g4KSV4KWLLCDgpLjgpL7gpKUg4KS54KWAIOCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KS14KS/4KS24KS/4KS34KWN4KSfIOCkteCljeCkr+CkleCljeCkpOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSV4KWJ4KSyIOCkleCksOCkqOClhywg4KSI4KSu4KWH4KSyIOCkleCksOCkqOClhywg4KSv4KS+IOCkheCkqOCljeKAjeCkryDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkuOCkguCkteCkvuCkpiDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkhuCkteClg+CkpOCljeCkpOCkvyDgpJXgpYsg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpLjgpILgpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkleCliyDgpLngpJ/gpL7gpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTg5ODY5MjI0NjI1MTYzNTU4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkuOCkguCkquCksOCljeCkleCli+CkgiDgpJXgpYcg4KSh4KWH4KSf4KS+IOCkleCliywg4KS44KS+4KSlIOCkueClgCDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkteCkv+CktuCkv+Ckt+CljeCknyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpK/gpYvgpIIg4KSV4KWLIOCkleClieCksiDgpJXgpLDgpKjgpYcsIOCkiOCkruClh+CksiDgpJXgpLDgpKjgpYcsIOCkr+CkviDgpIXgpKjgpY3igI3gpK8g4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpLjgpILgpLXgpL7gpKYg4KSV4KSw4KSo4KWHIOCkleClgCDgpIbgpLXgpYPgpKTgpY3gpKTgpL8g4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS54KSf4KS+4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsbExvZyIgbXNnaWQ9IjM0NzgxMzMxODQ2MjQxMDI3MzkiPiLgpJXgpYngpLIg4KSy4KWJ4KSXIOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNzAwNjQ1MTg0ODcwNzYwMjg1Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkleCkviDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpJzgpL/gpLjgpK7gpYfgpIIg4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCklOCksCDgpIbgpIngpJ/gpJfgpYvgpIfgpILgpJcg4KSV4KWJ4KSyIOCkleCkviDgpKHgpYfgpJ/gpL4g4KS24KS+4KSu4KS/4KSyIOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS54KWH4KSc4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYgsIOCklOCksCDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkhuCkquCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+CkqOCkviDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS+4KSd4KS+IOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3NzcyNTc5NjgxMzIxNzI0NCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpJXgpL4g4KSV4KWJ4KSyIOCksuClieCklyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSc4KS/4KS44KSu4KWH4KSCIOCkh+CkqOCkleCkruCkv+CkguCklyDgpJTgpLAg4KSG4KSJ4KSf4KSX4KWL4KSH4KSC4KSXIOCkleClieCksiDgpJXgpL4g4KSh4KWH4KSf4KS+IOCktuCkvuCkruCkv+CksiDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSV4KWJ4KSyIOCksuClieCklyDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkueClh+CknOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILCDgpJTgpLAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClhyDgpKzgpL/gpKjgpL4g4KSV4KWJ4KSyIOCksuClieCklyDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzcwMDY0NTE4NDg3MDc2MDI4NSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpKvgpLzgpYvgpKgg4KSV4KS+IOCkleClieCksiDgpLLgpYngpJcg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgsIOCknOCkv+CkuOCkruClh+CkgiDgpIfgpKjgpJXgpK7gpL/gpILgpJcg4KSU4KSwIOCkhuCkieCkn+Ckl+Cli+Ckh+CkguCklyDgpJXgpYngpLIg4KSV4KS+IOCkoeClh+Ckn+CkviDgpLbgpL7gpK7gpL/gpLIg4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS54KWH4KSc4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYgsIOCklOCksCDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClhyDgpKzgpL/gpKjgpL4g4KSV4KWJ4KSyIOCksuClieCklyDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3Nzc3MjU3OTY4MTMyMTcyNDQiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkleCkviDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpJzgpL/gpLjgpK7gpYfgpIIg4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCklOCksCDgpIbgpIngpJ/gpJfgpYvgpIfgpILgpJcg4KSV4KWJ4KSyIOCkleCkviDgpKHgpYfgpJ/gpL4g4KS24KS+4KSu4KS/4KSyIOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSV4KWJ4KSyIOCksuClieCklyDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkueClh+CknOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILCDgpJTgpLAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkleClieCksiDgpLLgpYngpJcg4KSh4KWH4KSf4KS+IOCkleCliyDgpLjgpL7gpJ3gpL4g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4i4KSV4KWJ4KSyIOCksuClieCklyDgpLLgpL/gpJbgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NjE4MDYwNjIyNzQxMTkyNDUiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkh+CkqOCkleCkruCkv+CkguCklyDgpJTgpLAg4KSG4KSJ4KSf4KSX4KWL4KSH4KSC4KSXIOCkleClieCksiDgpJXgpYcg4KSh4KWH4KSf4KS+IOCkuOCkueCkv+CkpCwg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpL4g4KSV4KWJ4KSyIOCksuClieCklyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3igI3gpLgg4KSG4KSq4KSV4KWHIOCkleClieCksiDgpLLgpYngpJcg4KSV4KWLIOCkruCkv+Ckn+CkvuCkqOClhyDgpK/gpL4g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpIfgpKjgpJXgpK7gpL/gpILgpJcg4KSU4KSwIOCkhuCkieCkn+Ckl+Cli+Ckh+CkguCklyDgpJXgpYngpLIg4KSV4KWHIOCkoeClh+Ckn+CkviDgpLjgpLngpL/gpKQsIOCkhuCkquCkleClhyDgpKvgpLzgpYvgpKgg4KSV4KS+IOCkleClieCksiDgpLLgpYngpJcg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4oCN4KS4IOCkhuCkquCkleClhyDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkleCliyDgpK7gpL/gpJ/gpL7gpKjgpYcg4KSv4KS+IOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY2MTgwNjA2MjI3NDExOTI0NSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCklOCksCDgpIbgpIngpJ/gpJfgpYvgpIfgpILgpJcg4KSV4KWJ4KSyIOCkleClhyDgpKHgpYfgpJ/gpL4g4KS44KS54KS/4KSkLCDgpIbgpKrgpJXgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCkviDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpIbgpKrgpJXgpYcg4KSV4KWJ4KSyIOCksuClieCklyDgpJXgpYsg4KSu4KS/4KSf4KS+4KSo4KWHIOCkr+CkviDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODM5NDE3MzYzNTI3ODc4NDIiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkh+CkqOCkleCkruCkv+CkguCklyDgpJTgpLAg4KSG4KSJ4KSf4KSX4KWL4KSH4KSC4KSXIOCkleClieCksiDgpJXgpYcg4KSh4KWH4KSf4KS+IOCkuOCkueCkv+CkpCwg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpJXgpL4g4KSV4KWJ4KSyIOCksuClieCklyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSG4KSq4KSV4KWHIOCkleClieCksiDgpLLgpYngpJcg4KSV4KWLIOCkruCkv+Ckn+CkvuCkqOClhyDgpK/gpL4g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUHJvZmlsZSIgbXNnaWQ9IjQ3MDE4ODk4NTI2MTI3MTY2NzgiPiLgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KS+IOCkuOCkguCkquCksOCljeCklSDgpJXgpL7gpLDgpY3gpKEg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDYyNDc1MTUxODQ5ODg4ODQ4Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAsIOCknOCliOCkuOClhyDgpIbgpKrgpJXgpL4g4KSo4KS+4KSuIOCklOCksCDgpLjgpILgpKrgpLDgpY3gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWALCDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KSV4KS+IOCkheCksOCljeCkpSDgpLngpYgg4KSV4KS/IOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYsg4KSq4KS54KSa4KS+4KSoIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkhuCkquCkleClgCDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkheCkqOCljeCkryDgpLLgpYvgpJfgpYvgpIIg4KSV4KWLIOCkreClh+CknCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSq4KWN4KSw4KWL4KSr4KS84KS+4KSH4KSyIOCknOCkvuCkqOCkleCkvuCksOClgCwg4KSc4KWI4KS44KWHIOCkhuCkquCkleCkviDgpKjgpL7gpK4g4KSU4KSwIOCkuOCkguCkquCksOCljeCklSDgpJzgpL7gpKjgpJXgpL7gpLDgpYAsIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpL4g4KSF4KSw4KWN4KSlIOCkueCliCDgpJXgpL8g4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYsg4KSq4KS54KSa4KS+4KSoIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkhuCkquCkleClgCDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkheCkqOCljeCkryDgpLLgpYvgpJfgpYvgpIIg4KSV4KWLIOCkreClh+CknCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVQcm9maWxlIiBtc2dpZD0iOTA3NzkzNjI4Nzc3Mzk3NjQzIj4i4KS44KWN4oCN4KS14KSv4KSCIOCkleCkviDgpLjgpILgpKrgpLDgpY3gpJUg4KSV4KS+4KSw4KWN4KShIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpKjgpL/gpJzgpYAg4KSq4KWN4KSw4KWL4KSr4KS84KS+4KSH4KSyIOCknOCkvuCkqOCkleCkvuCksOClgCwg4KSc4KWI4KS44KWHIOCkhuCkquCkleCkviDgpKjgpL7gpK4g4KSU4KSwIOCkuOCkguCkquCksOCljeCklSDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWLIOCkrOCkpuCksuCkqOClhyDgpK/gpL4g4KSJ4KS44KSu4KWH4KSCIOCkleClgeCkmyDgpJzgpYvgpKHgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KSV4KS+IOCkheCksOCljeCkpSDgpLngpYgg4KSV4KS/IOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYsg4KSq4KS54KSa4KS+4KSoIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkhuCkquCkleClgCDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkheCkqOCljeCkryDgpLLgpYvgpJfgpYvgpIIg4KSV4KWLIOCkreClh+CknCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KSo4KS/4KSc4KWAIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAsIOCknOCliOCkuOClhyDgpIbgpKrgpJXgpL4g4KSo4KS+4KSuIOCklOCksCDgpLjgpILgpKrgpLDgpY3gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleCliyDgpKzgpKbgpLLgpKjgpYcg4KSv4KS+IOCkieCkuOCkruClh+CkgiDgpJXgpYHgpJsg4KSc4KWL4KSh4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkleCkviDgpIXgpLDgpY3gpKUg4KS54KWIIOCkleCkvyDgpJDgpKrgpY3gpLggIOCkhuCkquCkleCliyDgpKrgpLngpJrgpL7gpKgg4KS44KSV4KSk4KS+IOCkueCliCDgpJTgpLAg4KSG4KSq4KSV4KWAIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSF4KSo4KWN4KSvIOCksuCli+Ckl+Cli+CkgiDgpJXgpYsg4KSt4KWH4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTI2ODkyMDk1NjE1MjQxOTE3MCI+IuCkheCkquCkqOClgCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KS44KWN4oCN4KSf4KWN4KSw4KWA4KSuIOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4i4KSP4KSqIOCkleCliyDgpIbgpKrgpJXgpYcg4KSU4KSwIOCkhuCkquCkleClhyDgpK7gpL/gpKTgpY3gpLDgpYvgpIIg4KSV4KWAIOCkqOCkiCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkpOCklSDgpKrgpLngpYHgpILgpJrgpKjgpYcg4KSU4KSwIOCkieCkqOCljeCkueClh+CkgiDgpLjgpK7gpKjgpY3igI3gpLXgpK/gpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLjgpL7gpJ3gpL4g4KSV4KSw4KSk4KWHIOCkuOCkruCkryDgpLjgpL7gpLXgpKfgpL7gpKgg4KSw4KS54KWH4KSCIC0g4KSH4KS44KS44KWHIOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkj+CkqiDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCksCDgpIbgpKrgpJXgpYcg4KSU4KSwIOCkhuCkquCkleClhyDgpK7gpL/gpKTgpY3gpLDgpYvgpIIg4KSV4KWHIOCkrOClgOCkmiDgpLjgpILgpJrgpL7gpLDgpYvgpIIg4KSV4KWLIOCkquCkouCkvCDgpLjgpJXgpKTgpL4g4KS54KWILiDgpKfgpY3igI3gpK/gpL7gpKgg4KSm4KWH4KSCOiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkuOCkreClgCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCksCDgpLLgpL7gpJfgpYIg4KSo4KS54KWA4KSCIOCkleClgCDgpJzgpL4g4KS44KSV4KSk4KWALiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTA0MTc5MjIyNDkzMjM1NjQ1Ij4i4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkuOCljeKAjeCkn+CljeCksOClgOCkriDgpK7gpYfgpIIg4KSy4KS/4KSW4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4i4KSP4KSqIOCkleCliyDgpIbgpKrgpJXgpYcg4KSu4KS/4KSk4KWN4KSw4KWL4KSCIOCkleClgCDgpKjgpIgg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLjgpL7gpJ3gpL4g4KSV4KSw4KSk4KWHIOCkuOCkruCkryDgpLjgpL7gpLXgpKfgpL7gpKgg4KSw4KS54KWH4KSCIC0g4KSH4KS44KS44KWHIOCkj+CkquCljeCkuCDgpJDgpLjgpYcg4KS44KSC4KSm4KWH4KS2IOCkrOCkqOCkviDgpLjgpJXgpKTgpL4g4KS54KWIIOCknOCliyDgpJXgpL/gpLjgpYAg4KSu4KS/4KSk4KWN4KSwIOCkleClgCDgpJPgpLAg4KS44KWHIOCkhuCkpOClhyDgpKbgpL/gpJbgpL7gpIgg4KSm4KWH4KSk4KWHIOCkueCliOCkgi4g4KSn4KWN4oCN4KSv4KS+4KSoIOCkpuClh+Ckgjog4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpLjgpK3gpYAg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpLAg4KSy4KS+4KSX4KWCIOCkqOCkueClgOCkgiDgpJXgpYAg4KSc4KS+IOCkuOCkleCkpOClgC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwODY1NTc1NTIyMDQxMTQ4NDkiPiLgpI/gpKog4KSV4KWLIOCkhuCkquCkleClhyDgpK7gpL/gpKTgpY3gpLDgpYvgpIIg4KSV4KWAIOCkqOCkiCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkpuCksOCljeCktuCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkuOCkvuCkneCkviDgpJXgpLDgpKTgpYcg4KS44KSu4KSvIOCkuOCkvuCkteCkp+CkvuCkqCDgpLDgpLngpYfgpIIgLSDgpIfgpLjgpLjgpYcg4KSQ4KSq4KWN4KS4ICDgpJDgpLjgpYcg4KS44KSC4KSm4KWH4KS2IOCkrOCkqOCkviDgpLjgpJXgpKTgpL4g4KS54KWIIOCknOCliyDgpJXgpL/gpLjgpYAg4KSu4KS/4KSk4KWN4KSwIOCkleClgCDgpJPgpLAg4KS44KWHIOCkhuCkpOClhyDgpKbgpL/gpJbgpL7gpIgg4KSm4KWH4KSk4KWHIOCkueCliOCkgi4g4KSn4KWN4oCN4KSv4KS+4KSoIOCkpuClh+Ckgjog4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpLjgpK3gpYAg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpLAg4KSy4KS+4KSX4KWCIOCkqOCkueClgOCkgiDgpJXgpYAg4KSc4KS+IOCkuOCkleCkpOClgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxlbmRhciIgbXNnaWQ9IjU5NzI3Mjc1NjAyNTc2MTIzOTgiPiLgpJXgpYfgpLLgpYjgpILgpKHgpLAg4KSI4KS14KWH4KSC4KSfIOCkleClhyDgpLjgpL7gpKUt4KS44KS+4KSlIOCkl+Cli+CkquCkqOClgOCkryDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MjE2NDYyMDQ5MDU3NjU4NzIzIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpK7gpL/gpKTgpY3gpLDgpYvgpIIg4KSv4KS+IOCkuOCkueCkleCksOCljeCkruCkv+Ckr+Cli+CkgiDgpJXgpYcg4KSV4KWI4KSy4KWH4KSC4KSh4KSwIOCkh+CkteClh+CkguCknyDgpLjgpLngpL/gpKQsIOCkhuCkquCkleClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSq4KSwIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KSH4KS14KWH4KSC4KSfIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpLjgpYcg4KSX4KWL4KSq4KSo4KWA4KSv4KSk4KS+IOCkr+CkviDgpLjgpILgpLXgpYfgpKbgpKjgpLbgpYDgpLLgpKTgpL4g4KSq4KSwIOCkp+CljeCkr+CkvuCkqCDgpKbgpL/gpI8g4KSs4KS/4KSo4KS+LCDgpI/gpKrgpY3gpLgg4KSG4KSq4KSV4KWHIOCkleCliOCksuClh+CkguCkoeCksCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliCDgpK/gpL4g4KS44KS54KWH4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzQzNDU0ODY4MjQ3MDg1MTU4MyI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSu4KS/4KSk4KWN4KSw4KWL4KSCIOCkr+CkviDgpLjgpLngpJXgpLDgpY3gpK7gpL/gpK/gpYvgpIIg4KSV4KWHIOCkleCliOCksuClh+CkguCkoeCksCDgpIfgpLXgpYfgpILgpJ8g4KS44KS54KS/4KSkLCDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkquCksCDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KSV4KWI4KSy4KWH4KSC4KSh4KSwIOCkh+CkteClh+CkguCknyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KS44KWHIOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpK/gpL4g4KS44KSC4KS14KWH4KSm4KSo4KS24KWA4KSy4KSk4KS+IOCkquCksCDgpKfgpY3gpK/gpL7gpKgg4KSm4KS/4KSPIOCkrOCkv+CkqOCkviwg4KSP4KSq4KWN4KS4IOCkhuCkquCkleClhyDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KSh4KWH4KSf4KS+IOCkleCliyDgpLjgpL7gpJ3gpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgg4KSv4KS+IOCkuOCkueClh+CknCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkruCkv+CkpOCljeCksOCli+CkgiDgpK/gpL4g4KS44KS54KSV4KSw4KWN4KSu4KS/4KSv4KWL4KSCIOCkleClhyDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KSH4KS14KWH4KSC4KSfIOCkuOCkueCkv+CkpCwg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpKrgpLAg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkleCliOCksuClh+CkguCkoeCksCDgpIfgpLXgpYfgpILgpJ8g4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJfgpYvgpKrgpKjgpYDgpK/gpKTgpL4g4KSv4KS+IOCkuOCkguCkteClh+CkpuCkqOCktuClgOCksuCkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWHIOCkleCliOCksuClh+CkguCkoeCksCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliCDgpK/gpL4g4KS44KS54KWH4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzQzNDU0ODY4MjQ3MDg1MTU4MyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkruCkv+CkpOCljeCksOCli+CkgiDgpK/gpL4g4KS44KS54KSV4KSw4KWN4KSu4KS/4KSv4KWL4KSCIOCkleClhyDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KSH4KS14KWH4KSC4KSfIOCkuOCkueCkv+CkpCwg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpKrgpLAg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkleCliOCksuClh+CkguCkoeCksCDgpIfgpLXgpYfgpILgpJ8g4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJfgpYvgpKrgpKjgpYDgpK/gpKTgpL4g4KSv4KS+IOCkuOCkguCkteClh+CkpuCkqOCktuClgOCksuCkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWHIOCkleCliOCksuClh+CkguCkoeCksCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliCDgpK/gpL4g4KS44KS54KWH4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+IuCkheCkquCkqOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+KAjeCkqOCkviDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KSI4KS14KWH4KSC4KSfIOCknOCli+CkoeCkvOClh+CkgiDgpK/gpL4g4KS44KSC4KS24KWL4KSn4KS/4oCN4KSkIOCkleCksOClh+CkgiDgpJTgpLAg4KSF4KSk4KS/4oCN4KSl4KS/4oCN4KSv4KWL4KSCIOCkleCliyDgpIjgpK7gpYfgpLIg4KSt4KWH4KSc4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSu4KS/4KSk4KWN4KSw4KWL4KSCIOCkr+CkviDgpLjgpLngpJXgpLDgpY3gpK7gpL/gpK/gpYvgpIIg4KSV4KWHIOCkiOCkteClh+CkguCknyDgpJXgpYcg4KS44KS+4KSlIOCkueClgCDgpLXgpYcg4KSI4KS14KWH4KSC4KSfIOCknOCli+CkoeCkvOCkqOClhywg4KSo4KS/4KSV4KS+4KSy4KSo4KWHLCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpL/gpKjgpY3gpLngpYfgpIIg4KSG4KSqIOCkheCkquCkqOClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSq4KSwIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS44KS44KWHIOCkj+CkquCljeCkuCzgpIXgpKrgpKjgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClhyDgpKzgpL/gpKjgpL4g4KSJ4KSoIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYsg4KSt4KWH4KScIOCkuOCkleCkpOCkviDgpLngpYgg4KSc4KWLIOCkleCliOCksuClh+CkguCkoeCksCDgpLjgpY3gpLXgpL7gpK7gpL/gpK/gpYvgpIIg4KSV4KWAIOCkk+CksCDgpLjgpYcg4KSG4KSk4KWHIOCkpuCkv+CkluCkvuCkiCDgpKbgpYfgpKTgpYcg4KS54KWI4KSCLCDgpK/gpL4g4KSI4KS14KWH4KSC4KSfIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSu4KS/4KSk4KWN4KSw4KWL4KSCIOCkr+CkviDgpLjgpLngpJXgpLDgpY3gpK7gpL/gpK/gpYvgpIIg4KSV4KWHIOCkiOCkteClh+CkguCknyDgpJXgpYcg4KS44KS+4KSlIOCkueClgCDgpLXgpYcg4KSI4KS14KWH4KSC4KSfIOCknOCli+CkoeCkvOCkqOClhywg4KSo4KS/4KSV4KS+4KSy4KSo4KWHLCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpL/gpKjgpY3gpLngpYfgpIIg4KSG4KSqIOCkheCkquCkqOClhyDgpKvgpLzgpYvgpKgg4KSq4KSwIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS44KS44KWHIOCkj+CkquCljeCkuCwg4KSF4KSq4KSo4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkieCkqCDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkreClh+CknCDgpLjgpJXgpKTgpL4g4KS54KWIIOCknOCliyDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KS44KWN4KS14KS+4KSu4KS/4KSv4KWL4KSCIOCkleClgCDgpJPgpLAg4KS44KWHIOCkhuCkpOClhyDgpKbgpL/gpJbgpL7gpIgg4KSm4KWH4KSk4KWHIOCkueCliOCkgiwg4KSv4KS+IOCkiOCkteClh+CkguCknyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkruCkv+CkpOCljeCksOCli+CkgiDgpK/gpL4g4KS44KS54KSV4KSw4KWN4KSu4KS/4KSv4KWL4KSCIOCkleClhyDgpIjgpLXgpYfgpILgpJ8g4KSV4KWHIOCkuOCkvuCkpSDgpLngpYAg4KS14KWHIOCkiOCkteClh+CkguCknyDgpJzgpYvgpKHgpLzgpKjgpYcsIOCkqOCkv+CkleCkvuCksuCkqOClhywg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSc4KS/4KSo4KWN4KS54KWH4KSCIOCkhuCkqiDgpIXgpKrgpKjgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkquCksCDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIOCkh+CkuOCkuOClhyDgpJDgpKrgpY3gpLggLOCkheCkquCkqOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+CkqOCkviDgpIngpKgg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpK3gpYfgpJwg4KS44KSV4KSk4KS+IOCkueCliCDgpJzgpYsg4KSV4KWI4KSy4KWH4KSC4KSh4KSwIOCkuOCljeCkteCkvuCkruCkv+Ckr+Cli+CkgiDgpJXgpYAg4KST4KSwIOCkuOClhyDgpIbgpKTgpYcg4KSm4KS/4KSW4KS+4KSIIOCkpuClh+CkpOClhyDgpLngpYjgpIIsIOCkr+CkviDgpIjgpLXgpYfgpILgpJ8g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMzI0NDY5NDk2MzI3MjQ5Mzc2Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSu4KS/4KSk4KWN4KSw4KWL4KSCIOCkr+CkviDgpLjgpLngpJXgpLDgpY3gpK7gpL/gpK/gpYvgpIIg4KSV4KWHIOCkiOCkteClh+CkguCknyDgpJXgpYcg4KS44KS+4KSlIOCkueClgCDgpLXgpYcg4KSI4KS14KWH4KSC4KSfIOCknOCli+CkoeCkvOCkqOClhywg4KSo4KS/4KSV4KS+4KSy4KSo4KWHLCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpL/gpKjgpY3gpLngpYfgpIIg4KSG4KSqIOCkheCkquCkqOClhyDgpKvgpLzgpYvgpKgg4KSq4KSwIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS44KS44KWHIOCkkOCkquCljeCkuCAsIOCkheCkquCkqOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+CkqOCkviDgpIngpKgg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpK3gpYfgpJwg4KS44KSV4KSk4KS+IOCkueCliCDgpJzgpYsg4KSV4KWI4KSy4KWH4KSC4KSh4KSwIOCkuOCljeCkteCkvuCkruCkv+Ckr+Cli+CkgiDgpJXgpYAg4KST4KSwIOCkuOClhyDgpIbgpKTgpYcg4KSm4KS/4KSW4KS+4KSIIOCkpuClh+CkpOClhyDgpLngpYjgpIIsIOCkr+CkviDgpIjgpLXgpYfgpILgpJ8g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iODY4ODMzNDk3NDAzNjgyMzMzMCI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkleCksuClgCDgpLjgpY3igI3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkleClg+CkpOCljeCksOCkv+CkriDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSkIOCkrOCkqOCkvuCkj+CkgiDgpK/gpL4g4KSP4KSVIOCkqOCkr+CkviDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+IOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpLDgpYfgpIIuIOCkr+CkuSDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOCljeKAjeCkpeCkvuCkqCDgpJTgpLAv4KSv4KS+IOCkheCkqOCljeKAjeCkryDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KWL4KSCIOCknOCliOCkuOClhyBHUFMg4KSv4KS+IOCkuOCljeKAjeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpKTgpL7gpJPgpIIg4KSm4KWN4KS14KS+4KSw4KS+IOCksuCljOCkn+CkvuCkiCDgpJfgpIgg4KS44KWN4KSl4KS/4KSk4KS/IOCkleCliyDgpJPgpLXgpLDgpLDgpL7gpIfgpKEg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkleClg+CkpOCljeCksOCkv+CkriDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSkIOCkrOCkqOCkvuCkj+CkgiDgpK/gpL4g4KSP4KSVIOCkqOCkr+CkviDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+IOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpLDgpYfgpIIuIOCkr+CkuSDgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpY3igI3gpKXgpL7gpKgg4KSU4KSwL+Ckr+CkviDgpIXgpKjgpY3igI3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCli+CkgiDgpJzgpYjgpLjgpYcgR1BTIOCkr+CkviDgpLjgpY3igI3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+4KST4KSCIOCkpuCljeCkteCkvuCksOCkviDgpLLgpYzgpJ/gpL7gpIgg4KSX4KSIIOCkuOCljeCkpeCkv+CkpOCkvyDgpJXgpYsg4KST4KS14KSw4KSw4KS+4KSH4KShIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iMjgzNjMwODA3NjcyMDU1MzgzNyI+IuCkheCkpOCkv+CksOCkv+CkleCljeCkpCDgpLjgpY3igI3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+IOCkhuCkpuClh+CktuCli+CkgiDgpK7gpYfgpIIg4KSq4KS54KWB4KSC4KSa4KWHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iNTk0NTE2NjY0MjMzNTgwMDc2MyI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSF4KSk4KS/4KSw4KS/4KSV4KWN4KSkIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpKTgpL4g4KSG4KSm4KWH4KS24KWL4KSCIOCkquCksCDgpKrgpLngpYHgpILgpJrgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkj+CkquCljeCkuCDgpJXgpYsgR1BTIOCkr+CkviDgpIXgpKjgpY3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCli+CkgiDgpJXgpYcg4KS44KSC4KSa4KS+4KSy4KSoIOCkruClh+CkgiDgpKzgpL7gpKfgpL4g4KSq4KS54KWB4KSC4KSa4KS+4KSo4KWHIOCkpuClhyDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKTgpL/gpLDgpL/gpJXgpY3gpKQg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkpOCkviDgpIbgpKbgpYfgpLbgpYvgpIIg4KSq4KSwIOCkquCkueClgeCkguCkmuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSQ4KSq4KWN4KS4ICDgpJXgpYsgR1BTIOCkr+CkviDgpIXgpKjgpY3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCli+CkgiDgpJXgpYcg4KS44KSC4KSa4KS+4KSy4KSoIOCkruClh+CkgiDgpKzgpL7gpKfgpL4g4KSq4KS54KWB4KSC4KSa4KS+4KSo4KWHIOCkpuClhyDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI2NTc4MTAxMTk5ODI1MTkzODczIj4i4KSV4KS/4KS44KWAIOCkuOCljeKAjeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpKTgpL4g4KSV4KWLIOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkleClg+CkpOCljeCksOCkv+CkriDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSkIOCkrOCkqOCkvuCkj+CkgiDgpK/gpL4g4KSP4KSVIOCkqOCkjyDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+IOCkleCliyDgpIfgpILgpLjgpY3igI3gpJ/gpYngpLIg4KSV4KSw4KWH4KSCLiDgpK/gpLkg4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpY3igI3gpKXgpL7gpKgg4KSU4KSwL+Ckr+CkviDgpIXgpKjgpY3igI3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCli+CkgiDgpJzgpYjgpLjgpYcgR1BTIOCkr+CkviDgpLjgpY3igI3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+4KST4KSCIOCkpuCljeCkteCkvuCksOCkviDgpLLgpYzgpJ/gpL7gpIgg4KSX4KSIIOCkuOCljeCkpeCkv+CkpOCkvyDgpJXgpYsg4KST4KS14KSw4KSw4KS+4KSH4KShIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkleClg+CkpOCljeCksOCkv+CkriDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSkIOCkrOCkqOCkvuCkj+CkgiDgpK/gpL4g4KSP4KSVIOCkqOCkjyDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+IOCkleCliyDgpIfgpILgpLjgpY3igI3gpJ/gpYngpLIg4KSV4KSw4KWH4KSCLiDgpK/gpLkg4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KWN4oCN4KSl4KS+4KSoIOCklOCksC/gpK/gpL4g4KSF4KSo4KWN4oCN4KSvIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpYvgpIIg4KSc4KWI4KS44KWHIEdQUyDgpK/gpL4g4KS44KWN4oCN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkpOCkvuCkk+CkgiDgpKbgpY3gpLXgpL7gpLDgpL4g4KSy4KWM4KSf4KS+4KSIIOCkl+CkiCDgpLjgpY3gpKXgpL/gpKTgpL8g4KSV4KWLIOCkk+CkteCksOCksOCkvuCkh+CkoSDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiLgpLjgpJ/gpYDgpJUg4KS44KWN4KSl4KS+4KSoIChHUFMg4KSU4KSwIOCkqOClh+Ckn+CkteCksOCljeCklS3gpIbgpKfgpL7gpLDgpL/gpKQpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSX4KWN4KSy4KWL4KSs4KSyIOCkquCli+CknOCkvOCkv+CktuCkqOCkv+CkguCklyDgpLjgpL/gpLjgpY3gpJ/gpK4gKEdQUykg4KSv4KS+IOCkuOClh+CksiDgpJ/gpYngpLXgpLAg4KSU4KSwIFdpLUZpIOCknOCliOCkuOClhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCli+CkgiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkleClhyDgpIbgpKrgpJXgpL4g4KS44KSf4KWA4KSVIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIOCkj+CkquCljeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSH4KSoIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLXgpL7gpJPgpIIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpL/gpI8g4KSc4KS+4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSH4KSo4KWN4KS54KWH4KSCIOCkmuCkvuCksuClgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPIOCklOCksCDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkquCksCDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4g4KSP4KSq4KWN4KS4IOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSv4KS5IOCkquCkpOCkviDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KSV4KS54KS+4KSCIOCkquCksCDgpLngpYjgpIIsIOCklOCksCDgpIXgpKTgpL/gpLDgpL/gpJXgpY3gpKQg4KSs4KWI4KSf4KSw4KWAIOCkleClgCDgpJbgpKrgpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkl+CljeCksuCli+CkrOCksiDgpKrgpYvgpJzgpLzgpL/gpLbgpKjgpL/gpILgpJcg4KS44KS/4KS44KWN4KSf4KSuIChHUFMpIOCkr+CkviDgpLjgpYfgpLIg4KSf4KWJ4KS14KSwIOCklOCksCBXaS1GaSDgpJzgpYjgpLjgpYcg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpYvgpIIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYcg4KSG4KSq4KSV4KS+IOCkuOCkn+ClgOCklSDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpJDgpKrgpY3gpLggIOCkpuCljeCkteCkvuCksOCkviDgpIfgpKgg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkk+CkgiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+CkjyDgpJzgpL7gpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIfgpKjgpY3gpLngpYfgpIIg4KSa4KS+4KSy4KWCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8g4KSU4KSwIOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkieCkquCksuCkrOCljeCkpyDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiDgpJDgpKrgpY3gpLggIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSv4KS5IOCkquCkpOCkviDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KSV4KS54KS+4KSCIOCkquCksCDgpLngpYjgpIIsIOCklOCksCDgpIXgpKTgpL/gpLDgpL/gpJXgpY3gpKQg4KSs4KWI4KSf4KSw4KWAIOCkleClgCDgpJbgpKrgpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjQ4ODc4OTUzNjIzNTQyMzk2MjgiPiLgpIXgpKjgpYHgpK7gpL7gpKjgpL/gpKQg4KS44KWN4KSl4KS+4KSoICjgpKjgpYfgpJ/gpLXgpLDgpY3gpJUt4KSG4KSn4KS+4KSw4KS/4KSkKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KS+IOCkheCkqOClgeCkruCkvuCkqOCkv+CkpCDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpIfgpLgg4KS44KWN4KSl4KS+4KSoIOCkleCliyDgpLjgpYfgpLIg4KSf4KWJ4KS14KSwIOCklOCksCBXaS1GaSDgpJzgpYjgpLjgpYcg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpYvgpIIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYcg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkk+CkgiDgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4g4KS54KWILiDgpI/gpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkh+CkqCDgpLjgpY3gpKXgpL7gpKgg4KS44KWH4KS14KS+4KST4KSCIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSH4KSo4KWN4KS54KWH4KSCIOCkmuCkvuCksuClgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPIOCklOCksCDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkruClh+CkgiDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4g4KSP4KSq4KWN4KS4IOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSv4KS5IOCkquCkpOCkviDgpLLgpJfgpL7gpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KSy4KSX4KSt4KSXIOCkleCkueCkvuCkgiDgpKrgpLAg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleCkviDgpIXgpKjgpYHgpK7gpL7gpKjgpL/gpKQg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4g4KSH4KS4IOCkuOCljeCkpeCkvuCkqCDgpJXgpYsg4KS44KWH4KSyIOCkn+ClieCkteCksCDgpJTgpLAgV2ktRmkg4KSc4KWI4KS44KWHIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KWL4KSCIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSV4KWHIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLXgpL7gpJPgpIIg4KSm4KWN4KS14KS+4KSw4KS+IOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+IOCkueCliC4g4KSQ4KSq4KWN4KS4ICDgpKbgpY3gpLXgpL7gpLDgpL4g4KSH4KSoIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLXgpL7gpJPgpIIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIfgpKjgpY3gpLngpYfgpIIg4KSa4KS+4KSy4KWCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8g4KSU4KSwIOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSu4KWH4KSCIOCkieCkquCksuCkrOCljeCkpyDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiDgpJDgpKrgpY3gpLggIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSv4KS5IOCkquCkpOCkviDgpLLgpJfgpL7gpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KSy4KSX4KSt4KSXIOCkleCkueCkvuCkgiDgpKrgpLAg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4iU3VyZmFjZUZsaW5nZXIg4KSu4KWH4KSCIOCkquCkueClgeCkguCkmuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsgU3VyZmFjZUZsaW5nZXIg4KSo4KS/4KSu4KWN4oCN4KSoLeCkuOCljeKAjeCkpOCksCDgpLjgpYHgpLXgpL/gpKfgpL7gpI/gpIIg4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IuCkkOCkquCljeCkuCDgpJXgpYsgU3VyZmFjZUZsaW5nZXIg4KSo4KS/4KSu4KWN4oCN4KSoLeCkuOCljeKAjeCkpOCksCDgpLjgpYHgpLXgpL/gpKfgpL7gpI/gpIIg4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuCkq+CkvOCljeCksOClh+CkriDgpKzgpKvgpLzgpLAg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSr4KS84KWN4KSw4KWH4KSuIOCkrOCkq+CkvOCksCDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkq+CkvOCljeCksOClh+CkriDgpKzgpKvgpLzgpLAg4KSV4KWAIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXIg4KSP4KSV4KWN4KS44KWH4KS4IOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIElucHV0RmxpbmdlciDgpKjgpL/gpK7gpY3igI3gpKgt4KS44KWN4oCN4KSk4KSwIOCkuOClgeCkteCkv+Ckp+CkvuCkk+CkgiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iV2lmaSDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KSV4KWLIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJTgpLAgV2lmaSDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KS44KWHIOCkleCkqOClh+CkleCljeCknyDgpJXgpLDgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJTgpLAgV2lmaSDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KS44KWHIOCkleCkqOClh+CkleCljeCknyDgpJXgpLDgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV2lmaSDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyBXaWZpIOCkoeCkv+CkuOCljeCkquCljeCksuClhyDgpJXgpYAg4KSo4KS/4KSu4KWN4KSoLeCkuOCljeCkpOCksCDgpJXgpYAg4KS44KWB4KS14KS/4KSn4KS+4KSP4KSCIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsgV2lmaSDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KSV4KWAIOCkqOCkv+CkruCljeCkqC3gpLjgpY3gpKTgpLAg4KSV4KWAIOCkuOClgeCkteCkv+Ckp+CkvuCkj+CkgiDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2ODU3MTM0NDk4NDAyMzQ2NzA4Ij4i4KSR4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYsg4KSV4KWI4KSq4KWN4oCN4KSa4KSwIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkkeCkoeCkv+Ckr+CliyDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWLIOCkleCliOCkquCljeKAjeCkmuCksCDgpJTgpLAg4KSw4KWA4KSh4KS+4KSv4KSw4KWH4KSV4KWN4oCN4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkkeCkoeCkv+Ckr+CliyDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWLIOCkleCliOCkquCljeKAjeCkmuCksCDgpJTgpLAg4KSw4KWA4KSh4KS+4KSv4KSw4KWH4KSV4KWN4oCN4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjE4OTA1NTM5MzU2NTAzNDk4MDgiPiLgpLngpYngpJ/gpLXgpLDgpY3gpKEg4KSq4KS54KSa4KS+4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjkxNTE4MDc5NTgxNTMwNTY4MTAiPiLgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KWLIOCkueClieCkn+CkteCksOCljeCkoSDgpKrgpLngpJrgpL7gpKgg4KSV4KWHIOCksuCkv+CkjyDgpJHgpKHgpL/gpK/gpYsg4KSV4KWI4KSq4KWN4KSa4KSwIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpJXgpYjgpKrgpY3gpJrgpLAg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkruClh+CkgiDgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliCDgpLLgpYfgpJXgpL/gpKgg4KS14KS5IOCkheCkqOCljeCkryDgpJHgpKHgpL/gpK/gpYsg4KSV4KWI4KSq4KWN4KSa4KSwICjgpIngpKbgpL4uIOCkleCliOCkruCkleClieCksOCljeCkoeCksCkg4KSV4KWLIOCkqOCkueClgOCkgiDgpLDgpYvgpJXgpKTgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyMjQ2ODI4NzczNTg5MDk0MDIzIj4i4KS14KWA4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYsg4KSV4KWI4KSq4KWN4oCN4KSa4KSwIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjM1OTQ4MTY1ODAzNDE0OTg2MCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS14KWA4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYsg4KSV4KWI4KSq4KWN4oCN4KSa4KSwIOCklOCksCDgpLDgpYDgpKHgpL7gpK/gpLDgpYfgpJXgpY3igI3gpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMzU5NDgxNjU4MDM0MTQ5ODYwIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLXgpYDgpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliyDgpJXgpYjgpKrgpY3igI3gpJrgpLAg4KSU4KSwIOCksOClgOCkoeCkvuCkr+CksOClh+CkleCljeKAjeCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9Ijc4MTUzOTg5NjkzMDMzODIwMTYiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KS14KWA4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYsg4KSV4KWI4KSq4KWN4oCN4KSa4KSwIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjI3Nzk3OTMwNjQ3MDkzNTAyODkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLXgpYDgpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliyDgpJXgpYjgpKrgpY3igI3gpJrgpLAg4KSU4KSwIOCksOClgOCkoeCkvuCkr+CksOClh+CkleCljeKAjeCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyNzc5NzkzMDY0NzA5MzUwMjg5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KS14KWA4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYsg4KSV4KWI4KSq4KWN4oCN4KSa4KSwIOCklOCksCDgpLDgpYDgpKHgpL7gpK/gpLDgpYfgpJXgpY3igI3gpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tZWRpYUNvbnRlbnRDb250cm9sIiBtc2dpZD0iODc0OTc5MDU2MDcyMDU2MjUxMSI+IuCkruClgOCkoeCkv+Ckr+CkviDgpKrgpY3gpLLgpYfgpKzgpYjgpJUg4KSU4KSwIOCkruClh+Ckn+CkvuCkoeClh+Ckn+CkviDgpI/gpJXgpY3gpLjgpYfgpLgg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhQ29udGVudENvbnRyb2wiIG1zZ2lkPSIxNjM3NDc4MjAwMjcyMDYyIj4i4KSP4KSq4KWN4KSy4KS/4KSV4KWH4KS24KSoIOCkleCliyDgpK7gpYDgpKHgpL/gpK/gpL4g4KSq4KWN4KSy4KWH4KSs4KWI4KSVIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliCDgpJTgpLAg4KSu4KWA4KSh4KS/4KSv4KS+IOCknOCkvuCkqOCkleCkvuCksOClgCAo4KS24KWA4KSw4KWN4KS34KSVLCDgpLLgpYfgpJbgpJUuLi4pIOCkj+CkleCljeCkuOClh+CkuCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4i4KSF4KSq4KSo4KWAIOCkkeCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpILgpJcg4KSs4KSm4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkteCliOCktuCljeCkteCkv+CklSDgpJHgpKHgpL/gpK/gpYsg4KS44KWH4KSf4KS/4KSC4KSXLCDgpJzgpYjgpLjgpYcg4KS14KWJ4KSy4KWN4oCN4KSv4KWC4KSuIOCklOCksCDgpJXgpYzgpKgt4KS44KS+IOCkuOCljeCkquClgOCkleCksCDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWHIOCksuCkv+CkjyDgpIngpKrgpK/gpYvgpJcg4KSV4KS/4KSv4KS+IOCkl+Ckr+Ckviwg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS14KWI4KS24KWN4KS14KS/4KSVIOCkkeCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpILgpJcsIOCknOCliOCkuOClhyDgpLXgpYngpLLgpY3igI3gpK/gpYLgpK4g4KSU4KSwIOCkleCljOCkqC3gpLjgpL4g4KS44KWN4KSq4KWA4KSV4KSwIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYcg4KSy4KS/4KSPIOCkieCkquCkr+Cli+CklyDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+LCDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLgpJHgpKHgpL/gpK/gpYsg4KSw4KS/4KSV4KWJ4KSw4KWN4KShIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSu4KS+4KSH4KSV4KWN4KSw4KWL4KSr4KS84KWL4KSoIOCkpuCljeCkteCkvuCksOCkviDgpJHgpKHgpL/gpK/gpYsg4KSw4KS/4KSV4KS+4KSw4KWN4KShIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWAIOCkquClgeCkt+CljeCkn+CkvyDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkleCkv+CkuOClgCDgpK3gpYAg4KS44KSu4KSvIOCkkeCkoeCkv+Ckr+CliyDgpLDgpL/gpJXgpL7gpLDgpY3gpKEg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSu4KS+4KSH4KSV4KWN4KSw4KWL4KSr4KS84KWL4KSoIOCkpuCljeCkteCkvuCksOCkviDgpJHgpKHgpL/gpK/gpYsg4KSw4KS/4KSV4KS+4KSw4KWN4KShIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClgCDgpKrgpYHgpLfgpY3gpJ/gpL8g4KSV4KWHIOCkrOCkv+CkqOCkviDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkuOCkruCkryDgpJHgpKHgpL/gpK/gpYsg4KSw4KS/4KSV4KS+4KSw4KWN4KShIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4i4KS44KS/4KSuIOCkuOCkguCkmuCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KS/4KSuIOCkruClh+CkgiDgpIbgpKbgpYfgpLYg4KSt4KWH4KSc4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIOCkr+CkuSDgpKzgpLngpYHgpKQg4KS54KWAIOCkluCkpOCksOCkqOCkvuCklSDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i4KSa4KS/4KSk4KWN4KSwIOCklOCksCDgpLXgpYDgpKHgpL/gpK/gpYsg4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSV4KWI4KSu4KSw4KWHIOCkuOClhyDgpJrgpL/gpKTgpY3gpLAg4KSU4KSwIOCkteClgOCkoeCkv+Ckr+CliyDgpLLgpYfgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkleCkv+CkuOClgCDgpK3gpYAg4KS44KSu4KSvIOCkhuCkquCkleClgCDgpKrgpYHgpLfgpY3gpJ/gpL8g4KSV4KWHIOCkrOCkv+CkqOCkviDgpJXgpYjgpK7gpLDgpYcg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSV4KWI4KSu4KSw4KWHIOCkuOClhyDgpJrgpL/gpKTgpY3gpLAg4KSU4KSwIOCkteClgOCkoeCkv+Ckr+CliyDgpLLgpYfgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJDgpKrgpY3gpLggIOCkleCliyDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkuOCkruCkryDgpIbgpKrgpJXgpYAg4KSq4KWB4KS34KWN4KSf4KS/IOCkleClhyDgpKzgpL/gpKjgpL4g4KSV4KWI4KSu4KSw4KWHIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i4KSV4KWI4KSu4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpK7gpYfgpIIg4KS54KWL4KSo4KWHIOCkquCksCDgpLjgpILgpJrgpL7gpLDgpKMg4KS44KSC4KSV4KWH4KSk4KSVIExFRCDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iNDc2NDU4NTQ2NTQ4MDI5NTM0MSI+IuCkquCkueCksuClhyDgpLjgpYcg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJfgpI8g4KS44KS/4KS44KWN4KSf4KSuIOCkj+CkquCljeCkuCDgpJXgpYsg4KSV4KWI4KSu4KSw4KWHIOCkleCliyDgpLjgpILgpJXgpYfgpKTgpJUgTEVEIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkuOClhyDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4i4KSq4KS54KSy4KWHIOCkuOClhyDgpIfgpILgpLjgpY3gpJ/gpYngpLIg4KSV4KS/4KSPIOCkl+CkjyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSV4KWI4KSu4KSw4KWHIOCkleCliyDgpLjgpILgpJXgpYfgpKTgpJUgTEVEIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkuOClhyDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyOTYxMjkyMjA1NzY0NDg4MzA0Ij4i4KS44KWN4oCN4KSl4KS+4KSv4KWAIOCksOClguCkqiDgpLjgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkheCkleCljeCkt+CkriDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODMzNzgxNzA5MzMyNjM3MDUzNyI+IuCkq+CkvOCli+CkqCDgpJXgpYsg4KS44KWN4oCN4KSl4KS+4KSv4KWAIOCksOClguCkqiDgpLjgpYcg4KSF4KSV4KWN4KS34KSuIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpLjgpY3igI3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpKzgpLngpYHgpKQg4KSW4KSk4KSw4KSo4KS+4KSVIOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3ODg5MDMyOTc2MjcyODMwOTkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOCkguCkquClguCksOCljeCkoyDgpKvgpLzgpYvgpKgg4KSV4KWLIOCkuOCljeKAjeCkpeCkvuCkr+ClgCDgpLDgpYLgpKog4KS44KWHIOCkheCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkrOCkueClgeCkpCDgpJbgpKTgpLDgpKjgpL7gpJUg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpLjgpY3igI3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpKzgpLngpYHgpKQg4KSW4KSk4KSw4KSo4KS+4KSVIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3ODg5MDMyOTc2MjcyODMwOTkiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCkguCkquClguCksOCljeCkoyDgpKvgpLzgpYvgpKgg4KSV4KWLIOCkuOCljeKAjeCkpeCkvuCkr+ClgCDgpLDgpYLgpKog4KS44KWHIOCkheCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkrOCkueClgeCkpCDgpJbgpKTgpLDgpKjgpL7gpJUg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDM2NjM0OTcyNTYxNzk1MDAyIj4i4KSf4KWH4KSs4KSy4KWH4KSfIOCksOClgOCkrOClguCknyDgpJXgpYcg4KSy4KS/4KSPIOCkrOCkvuCkp+CljeKAjeCkryDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4OTg1NjA4NzI0NjI2MzgyNDIiPiLgpKvgpLzgpYvgpKgg4KSw4KWA4KSs4KWC4KSfIOCkleClhyDgpLLgpL/gpI8g4KSs4KS+4KSn4KWN4oCN4KSvIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCksOClgOCkrOClguCknyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKzgpL7gpKfgpY3igI3gpK8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTMyNjAwODEyNDI4OTk4OTk2OSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSr4KS84KWL4KSoIOCkrOCksuCkquClguCksOCljeCkteCklSDgpLDgpYDgpKzgpYLgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MTcyMDU2MTgwMDYzNzAwNzQxIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSw4KWA4KSs4KWC4KSfIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkrOCkvuCkp+CljeKAjeCkryDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MzI2MDA4MTI0Mjg5OTg5OTY5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpKvgpLzgpYvgpKgg4KSs4KSy4KSq4KWC4KSw4KWN4KS14KSVIOCksOClgOCkrOClguCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+IlVTQiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSr4KS84KS+4KSH4KSyIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpKrgpLAg4KSq4KS54KWB4KSC4KSa4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQwMjMwNTA0OTg5MDk1MzgxMCI+IlNEIOCkleCkvuCksOCljeCkoSDgpKvgpLzgpL7gpIfgpLIg4KS44KS/4KS44KWN4oCN4KSf4KSuIOCkquCksCDgpKrgpLngpYHgpILgpJrgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iMTgyOTI5MDcwMTY1ODk5MjM0NyI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSo4KS/4KSV4KS+4KSy4KWHIOCknOCkvuCkqOClhyDgpK/gpYvgpJfgpY3igI3gpK8g4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkleClhyDgpLLgpL/gpI8g4KSr4KS84KS+4KSH4KSyIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpK7gpL7gpIngpILgpJ8g4KSU4KSwIOCkheCkqOCkruCkvuCkieCkguCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iMTgyOTI5MDcwMTY1ODk5MjM0NyI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSo4KS/4KSV4KS+4KSy4KWHIOCknOCkvuCkqOClhyDgpK/gpYvgpJfgpY3igI3gpK8g4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkleClhyDgpLLgpL/gpI8g4KSr4KS84KS+4KSH4KSyIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpK7gpL7gpIngpILgpJ8g4KSU4KSwIOCkheCkqOCkruCkvuCkieCkguCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4iVVNCIOCkuOCkguCkl+CljeCksOCkueCkoyDgpK7gpL/gpJ/gpL7gpI/gpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+IlNEIOCkleCkvuCksOCljeCkoSDgpK7gpL/gpJ/gpL7gpI/gpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIG1zZ2lkPSI4Nzg0MjY4MjQ2Nzc5MTk4NjI3Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKjgpL/gpJXgpL7gpLLgpKjgpYcg4KSv4KWL4KSX4KWN4oCN4KSvIOCkuOCkguCkl+CljeCksOCkueCkoyDgpKvgpLzgpYngpLDgpY3gpK7gpYfgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iODc4NDI2ODI0Njc3OTE5ODYyNyI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCkr+Cli+Ckl+CljeKAjeCkryDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSr4KS84KWJ4KSw4KWN4KSu4KWH4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzNDExMzM4NjMyMDAyMTkzODQ2Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkuOCkguCkl+CljeCksOCkueCkoyDgpKrgpLAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2FjY2VzcyIgbXNnaWQ9IjMwOTQ1NjM4NDQ1OTM4Nzg1NDgiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzMDk0NTYzODQ0NTkzODc4NTQ4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfY3JlYXRlIiBtc2dpZD0iNjQxNDc1NzIzNDc4OTMzNjMyNyI+IuCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSs4KSo4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19jcmVhdGUiIG1zZ2lkPSI0NTU4ODY5MjczNTg1ODU2ODc2Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpK7gpYvgpKzgpL7gpIfgpLIg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkrOCkqOCkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfY3JlYXRlIiBtc2dpZD0iNDU1ODg2OTI3MzU4NTg1Njg3NiI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkuOCkguCkl+CljeCksOCkueCkoyDgpKzgpKjgpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjUyNjkyODMyODMwMTYxODAyMiI+IuCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSo4KS34KWN4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjcyMTg3NDkyODYxNDU1MjY1MzciPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSo4KS34KWN4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjcyMTg3NDkyODYxNDU1MjY1MzciPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSo4KS34KWN4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iODg3Nzk5ODEwMTk0NDk5OTM4NiI+IuCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSu4KS+4KSJ4KSC4KSfL+CkheCkqOCkruCkvuCkieCkguCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSIzNDUxMzYwMTE0OTAyNDkwOTI5Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpK7gpYvgpKzgpL7gpIfgpLIg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkruCkvuCkieCkguCkny/gpIXgpKjgpK7gpL7gpIngpILgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iMzQ1MTM2MDExNDkwMjQ5MDkyOSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkuOCkguCkl+CljeCksOCkueCkoyDgpK7gpL7gpIngpILgpJ8v4KSF4KSo4KSu4KS+4KSJ4KSC4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19yZW5hbWUiIG1zZ2lkPSI3NDk2NjMzOTU0MDgwNDcyNDE3Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpL4g4KSo4KS+4KSuIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpL4g4KSo4KS+4KSuIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpL4g4KSo4KS+4KSuIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgpJXgpILgpKrgpKgg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpJXgpILgpKrgpKjgpJXgpLDgpY3gpKTgpL4g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJXgpILgpKrgpKjgpJXgpLDgpY3gpKTgpL4g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLgpKvgpLzgpY3gpLLgpYjgpLbgpLLgpL7gpIfgpJ8g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKvgpLzgpY3gpLLgpYjgpLbgpLLgpL7gpIfgpJ8g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpKvgpLzgpY3gpLLgpYjgpLbgpLLgpL7gpIfgpJ8g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNiIiBtc2dpZD0iMTExMzQ1MzQzMDY0NTQwMjcyMyI+IlVTQiDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSV4KWAIOCkquCljeCksOCkvuCkpeCkruCkv+CkleCkpOCkvuCkj+CkgiDgpJTgpLAg4KSF4KSo4KWB4KSu4KSk4KS/4KSv4KS+4KSCIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2IiIG1zZ2lkPSI3Nzc2MTU1NDMwMjE4MjM5ODMzIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyBVU0Ig4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClgCDgpKrgpY3gpLDgpL7gpKXgpK7gpL/gpJXgpKTgpL7gpJPgpIIg4KSU4KSwIOCkheCkqOClgeCkruCkpOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIFVTQiDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSV4KWAIOCkquCljeCksOCkvuCkpeCkruCkv+CkleCkpOCkvuCkk+CkgiDgpJTgpLAg4KSF4KSo4KWB4KSu4KSk4KS/4KSv4KWL4KSCIOCkleCliyDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4iTVRQIOCkquCljeCksOCli+Ckn+Cli+CkleClieCksiDgpLLgpL7gpJfgpYIg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTXRwIiBtc2dpZD0iNjUzMjk2MTIwMDQ4Njc5MTU3MCI+Ik1UUCBVU0Ig4KSq4KWN4KSw4KWL4KSf4KWL4KSV4KWJ4KSyIOCksuCkvuCkl+ClgiDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpJXgpLDgpY3gpKjgpYfgpLIgTVRQIOCkoeCljeCksOCkvuCkh+CkteCksCDgpK7gpYfgpIIg4KSq4KS54KWB4KSC4KSaIOCkleClgCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI0MTQ4MjkwODYwNDAwNjU5MTQ2Ij4i4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI2NTk3OTY0MTkxMjA4MDE2NjA1Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLAg4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkleClhyDgpLLgpL/gpI8g4KS14KS/4KS14KS/4KSnIOCkuOCkueCkvuCkr+CklSDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNjU5Nzk2NDE5MTIwODAxNjYwNSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwIOCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkteCkv+CkteCkv+CkpyDgpLjgpLngpL7gpK/gpJUg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleCliyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4KSr4KS84KWL4KSoIOCkqOCkguCkrOCksCDgpKrgpLAg4KS44KWA4KSn4KWHIOCkleClieCksiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KS54KS44KWN4oCN4KSk4KSV4KWN4KS34KWH4KSqIOCkleClhyDgpKzgpL/gpKjgpL4g4KSr4KS84KWL4KSoIOCkqOCkguCkrOCksCDgpKrgpLAg4KSV4KWJ4KSyIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpYcg4KSq4KSw4KS/4KSj4KS+4KSuIOCkheCkquCljeCksOCkpOCljeKAjeCkr+CkvuCktuCkv+CkpCDgpLbgpYHgpLLgpY3igI3gpJUg4KSv4KS+IOCkleClieCksiDgpLngpYsg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSn4KWN4KSv4KS+4KSoIOCkpuClh+CkgiDgpJXgpL8g4KSv4KS5IOCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkqOCkguCkrOCksCDgpKrgpLAg4KSV4KWJ4KSyIOCkqOCkueClgOCkgiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+LiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkhuCkquCkleClgCDgpKrgpYHgpLfgpY3gpJ/gpL8g4KSV4KWHIOCkrOCkv+CkqOCkviDgpJXgpYngpLIg4KSV4KSw4KSV4KWHIOCkhuCkquCkleCkviDgpKfgpKgg4KS14KWN4oCN4KSv4KSvIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KS54KS44KWN4oCN4KSk4KSV4KWN4KS34KWH4KSqIOCkleClhyDgpKzgpL/gpKjgpL4g4KSr4KS84KWL4KSoIOCkqOCkguCkrOCksCDgpKrgpLAg4KSV4KWJ4KSyIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpYcg4KSq4KSw4KS/4KSj4KS+4KSuIOCkheCkquCljeCksOCkpOCljeKAjeCkr+CkvuCktuCkv+CkpCDgpLbgpYHgpLLgpY3igI3gpJUg4KSv4KS+IOCkleClieCksiDgpLngpYsg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSn4KWN4KSv4KS+4KSoIOCkpuClh+CkgiDgpJXgpL8g4KSv4KS5IOCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkvuCkpOCkleCkvuCksuClgOCkqCDgpKjgpILgpKzgpLAg4KSq4KSwIOCkleClieCksiDgpKjgpLngpYDgpIIg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkvi4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWAIOCkquClgeCkt+CljeCkn+CkvyDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkleClieCksiDgpJXgpLDgpJXgpYcg4KSG4KSq4KSV4KS+IOCkp+CkqCDgpLXgpY3igI3gpK/gpK8g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjQxOTgzNDkyMTExMDg0OTc4NzkiPiLgpJXgpL/gpLjgpYAg4KSt4KWAIOCkq+CkvOCli+CkqCDgpKjgpILgpKzgpLAg4KSq4KSwIOCkuOClgOCkp+ClhyDgpJXgpYngpLIg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSIxNjg5MDI0OTAxNTA5OTk2ODEwIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KS54KS44KWN4oCN4KSk4KSV4KWN4KS34KWH4KSqIOCkleClhyDgpKzgpL/gpKjgpL4g4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkqOCkguCkrOCksOCli+CkgiDgpLjgpLngpL/gpKQsIOCkleCkv+CkuOClgCDgpK3gpYAg4KSr4KS84KWL4KSoIOCkqOCkguCkrOCksCDgpKrgpLAg4KSV4KWJ4KSyIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4oCN4KS4IOCkhuCkquCkvuCkpOCkleCkvuCksuClgOCkqCDgpLjgpYfgpLXgpL7gpJPgpIIg4KSq4KSwIOCkheCkqOCkvuCkteCktuCljeKAjeCkr+CklSDgpJTgpLAg4KSF4KS14KWI4KSnIOCkleClieCksiDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpLngpLjgpY3igI3gpKTgpJXgpY3gpLfgpYfgpKog4KSV4KWHIOCkrOCkv+CkqOCkviDgpIbgpKrgpL7gpKTgpJXgpL7gpLLgpYDgpKgg4KSo4KSC4KSs4KSw4KWL4KSCIOCkuOCkueCkv+CkpCwg4KSV4KS/4KS44KWAIOCkreClgCDgpKvgpLzgpYvgpKgg4KSo4KSC4KSs4KSwIOCkquCksCDgpJXgpYngpLIg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkuOClh+CkteCkvuCkk+CkgiDgpKrgpLAg4KSF4KSo4KS+4KS14KS24KWN4oCN4KSv4KSVIOCklOCksCDgpIXgpLXgpYjgpKcg4KSV4KWJ4KSyIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ4NDI1NzY5OTQxNDQ2MDQ4MjEiPiLgpLjgpYDgpKfgpYcgQ0RNQSDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KS44KWH4KSf4KSF4KSqIOCkquCljeCksOCkvuCksOCkguCkrSDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTYwNDg0ODA5NTMxNTQyMTQyNSI+IuCkuOClgOCkp+ClhyBDRE1BIOCkq+CkvOCli+CkqCDgpLjgpYfgpJ/gpIXgpKog4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsgQ0RNQSDgpKrgpY3gpLDgpL7gpLXgpKfgpL7gpKgg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4oCN4KS4IOCkheCkqOCkvuCkteCktuCljeKAjeCkr+CklSDgpLDgpYLgpKog4KS44KWHIENETUEg4KSq4KWN4KSw4KS+4KS14KSn4KS+4KSoIOCkquCljeCksOCkvuCksOCkguCkrSDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgbXNnaWQ9IjE5OTQxOTM1Mzg4MDIzMTQxODYiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIENETUEg4KSq4KWN4KSw4KS+4KS14KSn4KS+4KSoIOCkquCljeCksOCkvuCksOCkguCkrSDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpIXgpKjgpL7gpLXgpLbgpY3igI3gpK/gpJUg4KSw4KWC4KSqIOCkuOClhyBDRE1BIOCkquCljeCksOCkvuCkteCkp+CkvuCkqCDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSI3Nzg1NDA4MjUzMzY0MzM1NzQwIj4i4KS44KWN4oCN4KSl4KS+4KSoIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkqOCkiCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWAIOCkuOClguCkmuCkqOCkvuCkk+CkgiDgpJXgpYsg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9IjExMjA3NDE1NTc4OTE0Mzg4NzYiPiLgpI/gpKog4KSV4KWLIOCksOClh+CkoeCkv+Ckr+CliyDgpLjgpYcg4KS44KWN4oCN4KSl4KS+4KSoIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkqOCkiCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWAIOCkuOClguCkmuCkqOCkvuCkj+CkgiDgpLjgpJXgpY3gpLfgpK4v4KSF4KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9IjExMjA3NDE1NTc4OTE0Mzg4NzYiPiLgpI/gpKog4KSV4KWLIOCksOClh+CkoeCkv+Ckr+CliyDgpLjgpYcg4KS44KWN4oCN4KSl4KS+4KSoIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkqOCkiCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWAIOCkuOClguCkmuCkqOCkvuCkj+CkgiDgpLjgpJXgpY3gpLfgpK4v4KSF4KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI3ODU1MjU5NDYxMjY4NzM0OTE0Ij4i4KSa4KWH4KSV4KSH4KSoIOCkl+ClgeCko+Cli+CkgiDgpK7gpYfgpIIg4KSq4KS54KWB4KSC4KSa4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI0MDI0NTI2OTY4NjMwMTk0MTI4Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpJrgpYfgpJXgpIfgpKgg4KS44KWH4KS14KS+IOCkpuCljeCkteCkvuCksOCkviDgpIXgpKrgpLLgpYvgpKEg4KSV4KS/4KSPIOCkl+CkjyDgpJfgpYHgpKPgpYvgpIIg4KSq4KSwIOCkquCkouCkvOClh+Ckgi/gpLLgpL/gpJbgpYfgpIIg4KSq4KS54KWB4KSC4KSaIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI0MDI0NTI2OTY4NjMwMTk0MTI4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSa4KWH4KSV4KSH4KSoIOCkuOClh+CkteCkviDgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSq4KSy4KWL4KShIOCkleCkv+CkjyDgpJfgpI8g4KSX4KWB4KSj4KWL4KSCIOCkquCksCDgpKrgpKLgpLzgpYfgpIIv4KSy4KS/4KSW4KWH4KSCIOCkquCkueClgeCkguCkmiDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEdhZGdldCIgbXNnaWQ9Ijc3NjkwNTMzOTAxNTg2MzQ3MSI+IuCkteCkv+CknOClh+CknyDgpJrgpYHgpKjgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kR2FkZ2V0IiBtc2dpZD0iODI2MTMyNjkzODU5OTA0OTI5MCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS44KS/4KS44KWN4KSf4KSuIOCkleCliyDgpK/gpLkg4KSs4KSk4KS+4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSV4KS/IOCkleCkv+CkuCDgpI/gpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkleCljOCkqCDgpLjgpYcg4KS14KS/4KSc4KWH4KSfIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpKTgpL4g4KS54KWILiDgpJXgpYvgpIgg4KSP4KSq4KWN4KS4LCDgpIfgpLgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkleClhyDgpLjgpL7gpKUg4KSF4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpJXgpYcg4KSo4KS/4KSc4KWAIOCkoeClh+Ckn+CkviDgpKrgpLAg4KSq4KS54KWB4KSC4KSaIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEdhZGdldCIgbXNnaWQ9IjgyNjEzMjY5Mzg1OTkwNDkyOTAiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSV4KWLIOCkr+CkuSDgpKzgpKTgpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJXgpL8g4KSV4KS/4KS4IOCkkOCkquCljeCkuCAg4KSm4KWN4KS14KS+4KSw4KS+IOCkleCljOCkqCDgpLjgpYcg4KS14KS/4KSc4KWH4KSfIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpKTgpL4g4KS54KWILiDgpJXgpYvgpIgg4KSQ4KSq4KWN4KS4ICwg4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYcg4KS44KS+4KSlIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpKjgpL/gpJzgpYAg4KSh4KWH4KSf4KS+IOCkquCksCDgpKrgpLngpYHgpILgpJog4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSI4NDIzOTIzNzc3NjU5MjkyMjI4Ij4i4KSr4KS84KWL4KSoIOCkuOCljeKAjeCkpeCkv+CkpOCkvyDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSJ4KSq4KSV4KSw4KSjIOCkleClgCDgpKvgpLzgpYvgpKgg4KS44KWB4KS14KS/4KSn4KS+4KSP4KSCIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpLXgpL7gpLLgpL4g4KSV4KWL4KSIIOCkj+CkquCljeKAjeCkuCDgpIbgpKrgpJXgpYsg4KS44KWC4KSa4KS/4KSkIOCkleCkv+CkjyDgpKzgpL/gpKjgpL4g4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCljeKAjeCkteCkv+CkmiDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliCwg4KSr4KS84KWL4KSoIOCkleCkviDgpLDgpYfgpKHgpL/gpK/gpYsg4KSa4KS+4KSy4KWCIOCklOCksCDgpKzgpILgpKYg4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkkOCkuOClhyDgpLngpYAg4KSF4KSo4KWN4KSvIOCkleCkvuCksOCljeCkryDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSJ4KSq4KSV4KSw4KSjIOCkleClgCDgpKvgpLzgpYvgpKgg4KS44KWB4KS14KS/4KSn4KS+4KSP4KSCIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpLXgpL7gpLLgpL4g4KSV4KWL4KSIIOCkkOCkquCljeCkuCDgpIbgpKrgpJXgpYsg4KS44KWC4KSa4KS/4KSkIOCkleCkv+CkjyDgpKzgpL/gpKjgpL4g4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCljeKAjeCkteCkv+CkmiDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliCwg4KSr4KS84KWL4KSoIOCkleCkviDgpLDgpYfgpKHgpL/gpK/gpYsg4KSa4KS+4KSy4KWCIOCklOCksCDgpKzgpILgpKYg4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkkOCkuOClhyDgpLngpYAg4KSF4KSo4KWN4KSvIOCkleCkvuCksOCljeCkryDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iOTE3ODIyODUyNDUwNzYxMDQ4NiI+IuCkq+CkvOCli+CkqCDgpJXgpYAg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCklOCksCDgpKrgpLngpJrgpL7gpKgg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSIxNjM5MjEyNzcxODI2MTI1NTI4Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSV4KWAIOCkq+CkvOCli+CkqCDgpLjgpYHgpLXgpL/gpKfgpL7gpJPgpIIg4KSk4KSVIOCkquCkueClgeCkguCkmuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkj+CkquCljeCkuCDgpJXgpYsg4KSr4KS84KWL4KSoIOCkqOCkguCkrOCksCDgpJTgpLAg4KSJ4KSq4KSV4KSw4KSjIOCkhuCkiOCkoeClgCwg4KSV4KWJ4KSyIOCkuOCkleCljeCksOCkv+CkryDgpLngpYgg4KSv4KS+IOCkqOCkueClgOCkgiwg4KSU4KSwIOCkleClieCksiDgpKbgpY3gpLXgpL7gpLDgpL4g4KSV4KSo4KWH4KSV4KWN4KSfIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4g4KSm4KWC4KSw4KS44KWN4oCN4KSlIOCkqOCkguCkrOCksCDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSIxNjM5MjEyNzcxODI2MTI1NTI4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSJ4KSq4KSV4KSw4KSjIOCkleClgCDgpKvgpLzgpYvgpKgg4KS44KWB4KS14KS/4KSn4KS+4KST4KSCIOCkpOCklSDgpKrgpLngpYHgpILgpJrgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJDgpKrgpY3gpLggIOCkleCliyDgpKvgpLzgpYvgpKgg4KSo4KSC4KSs4KSwIOCklOCksCDgpIngpKrgpJXgpLDgpKMg4KSG4KSI4KSh4KWALCDgpJXgpYngpLIg4KS44KSV4KWN4KSw4KS/4KSvIOCkueCliCDgpK/gpL4g4KSo4KS54KWA4KSCLCDgpJTgpLAg4KSV4KWJ4KSyIOCkpuCljeCkteCkvuCksOCkviDgpJXgpKjgpYfgpJXgpY3gpJ8g4KSV4KS/4KSv4KS+IOCkl+Ckr+CkviDgpKbgpYLgpLDgpLjgpY3igI3gpKUg4KSo4KSC4KSs4KSwIOCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTMxNzMxNDM1MDExNDk1MDE1Ij4i4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpKjgpL/gpLfgpY3igI3gpJXgpY3gpLDgpL/gpK8g4KS54KWL4KSo4KWHIOCkuOClhyDgpLDgpYvgpJXgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTczNDgwMTg3OTQxNDk2MTMwIj4i4KSr4KS84KWL4KSoIOCkleCliyDgpKjgpL/gpLfgpY3igI3gpJXgpY3gpLDgpL/gpK8g4KS54KWL4KSo4KWHIOCkuOClhyDgpLDgpYvgpJXgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSu4KWH4KSCIOCkqOCkueClgOCkgiDgpLngpYsg4KSc4KS+4KSo4KWHIOCkuOClhyDgpLDgpYvgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODU1OTEwMDY3NzM3MjkyODc1NCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSr4KS84KWL4KSoIOCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSu4KWH4KSCIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpYcg4KS44KWHIOCksOCli+CkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczMTEzMTk4MjQ0MDA0NDc4NjgiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpK7gpYfgpIIg4KSo4KS54KWA4KSCIOCkueCliyDgpJzgpL7gpKjgpYcg4KS44KWHIOCksOCli+CkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NTU5MTAwNjc3MzcyOTI4NzU0Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSr4KS84KWL4KSoIOCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSu4KWH4KSCIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpYcg4KS44KWHIOCksOCli+CkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl90cmFuc21pdElyIiBtc2dpZD0iNzU0NTg1ODUwNDIzODUzMDEwNSI+IuCkh+CkguCkq+CkvOCljeCksOCkvuCksOClh+CkoSDgpLjgpILgpJrgpL7gpLDgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdHJhbnNtaXRJciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTM1ODMwODg1NDMwNjUyOTE3MCI+IuCkj+CkquCljeCksuCkv+CkleClh+CktuCkqCDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleClhyDgpIfgpILgpKvgpLzgpY3gpLDgpL7gpLDgpYfgpKEg4KSf4KWN4KSw4KS+4KSC4KS44KSu4KWA4KSf4KSwIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdHJhbnNtaXRJciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc5NTc3NjM3NDUwMjAzMDA3MjUiPiLgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KWLIOCkq+CkvOCli+CkqCDgpJXgpYcg4KSH4KSC4KSr4KS84KWN4KSw4KS+4KSw4KWH4KShIOCkn+CljeCksOCkvuCkguCkuOCkruClgOCkn+CksCDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3ODcwMzQ3MjI2MTYzNTA0MTciPiLgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSa4KS+4KSy4KWCIOCkr+CkviDgpKzgpILgpKYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5Mjg2MjI0NzA5ODA5NDMyMDYiPiLgpKvgpLzgpYvgpKgg4KSa4KS+4KSy4KWCIOCkr+CkviDgpKzgpILgpKYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkn+Clh+CkrOCksuClh+CknyDgpJrgpL7gpLLgpYIg4KSv4KS+IOCkrOCkguCkpiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjYwMzcwNTczNDg0NjMxMzEwMzIiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkq+CkvOCli+CkqCDgpJrgpL7gpLLgpYIg4KSv4KS+IOCkrOCkguCkpiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY4OTg2Mjg3ODk4NDYzMTgzMSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCkmuCkvuCksuClgiDgpK/gpL4g4KSs4KSC4KSmIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjAzNzA1NzM0ODQ2MzEzMTAzMiI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSr4KS84KWL4KSoIOCkmuCkvuCksuClgiDgpK/gpL4g4KSs4KSC4KSmIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmFjdG9yeVRlc3QiIG1zZ2lkPSIzNzE1MjI1NDkyNjk2NDE2MTg3Ij4i4KSr4KS84KWI4KSV4KWN4oCN4KSf4KWN4KSw4KWAIOCkquCksOClgOCkleCljeCkt+CkoyDgpK7gpYvgpKEg4KSu4KWH4KSCIOCkmuCksuCkvuCkj+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZhY3RvcnlUZXN0IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTUyMDU5MzE4MzU5NjUzMDkxIj4i4KSf4KWH4KSs4KSy4KWH4KSfIOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksCDgpK7gpYfgpIIg4KSq4KWC4KSw4KWN4KSjIOCkquCkueClgeCkguCkmiDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkpOClhyDgpLngpYHgpI8g4KSo4KS/4KSu4KWN4oCN4KSoLeCkuOCljeKAjeCkpOCksCDgpKjgpL/gpLDgpY3gpK7gpL7gpKTgpL4g4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkleClhyDgpLDgpYLgpKog4KSu4KWH4KSCIOCkmuCksuCkvuCkj+Ckgi4g4KSV4KWH4KS14KSyIOCkpOCkreClgCDgpIngpKrgpLLgpKzgpY3igI3gpKcg4KSc4KSsIOCkleCli+CkiCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSo4KS/4KSw4KWN4KSu4KS+4KSk4KS+IOCkquCksOClgOCkleCljeCkt+CkoyDgpK7gpYvgpKEg4KSu4KWH4KSCIOCkmuCksiDgpLDgpLngpL4g4KS54KWLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZhY3RvcnlUZXN0IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODEzNjY0NDk5MDMxOTI0NDgwMiI+IuCkq+CkvOCli+CkqCDgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLAg4KSu4KWH4KSCIOCkquClguCksOCljeCkoyDgpKrgpLngpYHgpILgpJog4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpKTgpYcg4KS54KWB4KSPIOCkqOCkv+CkruCljeKAjeCkqC3gpLjgpY3igI3gpKTgpLAg4KSo4KS/4KSw4KWN4KSu4KS+4KSk4KS+IOCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSw4KWC4KSqIOCkruClh+CkgiDgpJrgpLLgpL7gpI/gpIIuIOCkleClh+CkteCksiDgpKTgpK3gpYAg4KSJ4KSq4KSy4KSs4KWN4oCN4KSnIOCknOCkrCDgpJXgpYvgpIgg4KSr4KS84KWL4KSoIOCkqOCkv+CksOCljeCkruCkvuCkpOCkviDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSu4KWL4KShIOCkruClh+CkgiDgpJrgpLIg4KSw4KS54KS+IOCkueCliy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlciIgbXNnaWQ9IjY2MjcxOTIzMzMzNzM0NjUxNDMiPiLgpLXgpYngpLLgpKrgpYfgpKrgpLAg4KS44KWH4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlciIgbXNnaWQ9IjczNzM0NDc5MjA5Nzc2MjQ3NDUiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpLXgpYngpLLgpKrgpYfgpKrgpLAg4KS44KWH4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlciIgbXNnaWQ9IjczNzM0NDc5MjA5Nzc2MjQ3NDUiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpLXgpYngpLLgpKrgpYfgpKrgpLAg4KS44KWH4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSIzMjc4NjA4MTY1OTc3NzM2NTM4Ij4i4KSF4KSq4KSo4KWHIOCkteClieCksuCkquClh+CkquCksCDgpJXgpL4g4KSG4KSV4KS+4KSwIOCkj+CkoeCknOCkuOCljeCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjgyMzU3ODQzODQyMjM3MzAwOTEiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpLXgpYngpLLgpKrgpYfgpKrgpLAg4KSG4KSV4KS+4KSwIOCkuOCkguCkleClh+CkpCDgpLjgpYfgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSI4MjM1Nzg0Mzg0MjIzNzMwMDkxIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KS14KWJ4KSy4KSq4KWH4KSq4KSwIOCkhuCkleCkvuCksCDgpLjgpILgpJXgpYfgpKQg4KS44KWH4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIyMzE1NzUwNDIzMTM5Njk3Mzk3Ij4i4KSr4KS84KWI4KSV4KWN4oCN4KSf4KWN4KSw4KWAIOCkoeCkv+Ckq+CkvOClieCksuCljeKAjeCknyDgpKrgpLAg4KS44KS/4KS44KWN4oCN4KSf4KSuIOCksOClgOCkuOClh+CknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXN0ZXJDbGVhciIgbXNnaWQ9IjM2NjUzODA0OTI2MzM5MTAyMjYiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOCkreClgCDgpKHgpYfgpJ/gpL4sIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCwg4KSU4KSwIOCkh+CkguCkuOCljeCkn+ClieCksiDgpI/gpKrgpY3gpLgg4KSu4KS/4KSf4KS+4KSV4KSwLCDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSV4KWLIOCkquClguCksOClgCDgpKTgpLDgpLkg4KSJ4KS44KSV4KWAIOCkq+CkvOCliOCkleCljeCkn+CksOClgCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSq4KSwIOCksOClgOCkuOClh+CknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXN0ZXJDbGVhciIgbXNnaWQ9IjM2NjUzODA0OTI2MzM5MTAyMjYiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpK3gpYAg4KSh4KWH4KSf4KS+LCDgpJXgpYngpKjgpY3gpKvgpLzgpL/gpJfgpLDgpYfgpLbgpKgsIOCklOCksCDgpIfgpILgpLjgpY3gpJ/gpYngpLIg4KSQ4KSq4KWN4KS4ICDgpK7gpL/gpJ/gpL7gpJXgpLAsIOCkuOCkv+CkuOCljeCkn+CkriDgpJXgpYsg4KSq4KWC4KSw4KWAIOCkpOCksOCkuSDgpIngpLjgpJXgpYAg4KSr4KS84KWI4KSV4KWN4KSf4KSw4KWAIOCkuOClh+Ckn+Ckv+CkguCklyDgpKrgpLAg4KSw4KWA4KS44KWH4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZSIgbXNnaWQ9IjIwMjE2MTQ4Mjk1OTE3NzU2NDYiPiLgpLjgpK7gpK8g4KS44KWH4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE4OTYzNDE0MzgxNTExNTI4ODEiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYAg4KSY4KSh4KS84KWAIOCkleCkviDgpLjgpK7gpK8g4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NTU3MDI3MzA3MzgwMjAiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkq+CkvOCli+CkqCDgpJXgpYAg4KSY4KSh4KS84KWAIOCkleCkviDgpLjgpK7gpK8g4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTg5NjM0MTQzODE1MTE1Mjg4MSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleClgCDgpJjgpKHgpLzgpYAg4KSV4KS+IOCkuOCkruCkryDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg1NTcwMjczMDczODAyMCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSr4KS84KWL4KSoIOCkleClgCDgpJjgpKHgpLzgpYAg4KSV4KS+IOCkuOCkruCkryDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWVab25lIiBtc2dpZD0iMjk0NTA3OTgwMTAxMzA3NzM0MCI+IuCkuOCkruCkryDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KS44KWH4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KS+IOCkuOCkruCkryDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDk5OTQzNDg4NDM2NjMzMzk4Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KS+IOCkuOCkruCkryDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE2NzY5ODM3MTIzMTU4Mjc2NDUiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpL4g4KS44KSu4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0OTk5NDM0ODg0MzY2MzMzOTgiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpL4g4KS44KSu4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjQ4MjkyNjIzNDk2OTEzODY5ODYiPiLgpJbgpL7gpKTgpL4g4KSq4KWN4KSw4KSs4KSC4KSn4KSVIOCkuOClh+CkteCkviDgpJXgpYcg4KSw4KWC4KSqIOCkruClh+CkgiDgpJXgpL7gpLDgpY3gpK8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iMTk0ODQ1NTU1MjMzMzYxNTk1NCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSW4KS+4KSk4KS+IOCkquCljeCksOCkruCkvuCko+CkleCli+CkgiDgpJXgpYsg4KSV4KWJ4KSyIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpK7gpL7gpKPgpJXgpYvgpIIg4KSV4KWLIOCkleClieCksiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFjY291bnRzIiBtc2dpZD0iMTA4Njc5NTQ2Nzc2MDEyMjExNCI+IuCkieCkquCkleCksOCkoyDgpKrgpLAg4KSW4KS+4KSk4KWHIOCkouClguCkguCkouClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzQxNDk2NTM0NzY5NjYwMDI3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSm4KWN4KS14KS+4KSw4KS+IOCknOCljeCknuCkvuCkpCDgpJbgpL7gpKTgpYvgpIIg4KSV4KWAIOCkuOClguCkmuClgCDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkruClh+CkgiDgpLXgpYcg4KSW4KS+4KSk4KWHIOCktuCkvuCkruCkv+CksiDgpLngpYsg4KS44KSV4KSk4KWHIOCkueCliOCkgiDgpJzgpL/gpKjgpY3igI3gpLngpYfgpIIg4KSG4KSq4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpIfgpILgpLjgpY3igI3gpJ/gpYngpLIg4KSV4KS/4KSPIOCkl+CkjyDgpI/gpKrgpY3gpLgg4KSo4KWHIOCkrOCkqOCkvuCkr+CkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDQ4MzE2ODIyNDUxODA3MzgyIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpKvgpLzgpYvgpKgg4KSm4KWN4KS14KS+4KSw4KS+IOCknOCljeCknuCkvuCkpCDgpJbgpL7gpKTgpYvgpIIg4KSV4KWAIOCkuOClguCkmuClgCDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkruClh+CkgiDgpLXgpYcg4KSW4KS+4KSk4KWHIOCktuCkvuCkruCkv+CksiDgpLngpYsg4KS44KSV4KSk4KWHIOCkueCliOCkgiDgpJzgpL/gpKjgpY3igI3gpLngpYfgpIIg4KSG4KSq4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpIfgpILgpLjgpY3igI3gpJ/gpYngpLIg4KSV4KS/4KSPIOCkl+CkjyDgpI/gpKrgpY3gpLgg4KSo4KWHIOCkrOCkqOCkvuCkr+CkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSm4KWN4KS14KS+4KSw4KS+IOCknOCljeCknuCkvuCkpCDgpJbgpL7gpKTgpYvgpIIg4KSV4KWAIOCkuOClguCkmuClgCDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkruClh+CkgiDgpLXgpYcg4KSW4KS+4KSk4KWHIOCktuCkvuCkruCkv+CksiDgpLngpYsg4KS44KSV4KSk4KWHIOCkueCliOCkgiDgpJzgpL/gpKjgpY3igI3gpLngpYfgpIIg4KSG4KSq4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpIfgpILgpLjgpY3igI3gpJ/gpYngpLIg4KSV4KS/4KSPIOCkl+CkjyDgpJDgpKrgpY3gpLggIOCkqOClhyDgpKzgpKjgpL7gpK/gpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ0ODMxNjgyMjQ1MTgwNzM4MiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkq+CkvOCli+CkqCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KWN4KSe4KS+4KSkIOCkluCkvuCkpOCli+CkgiDgpJXgpYAg4KS44KWC4KSa4KWAIOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KSu4KWH4KSCIOCkteClhyDgpJbgpL7gpKTgpYcg4KS24KS+4KSu4KS/4KSyIOCkueCliyDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCknOCkv+CkqOCljeKAjeCkueClh+CkgiDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpL/gpI8g4KSX4KSPIOCkkOCkquCljeCkuCAg4KSo4KWHIOCkrOCkqOCkvuCkr+CkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjUyNjU5MDg0ODExNzI3MzY5MzMiPiLgpJbgpL7gpKTgpYcg4KSs4KSo4KS+4KSP4KSCIOCklOCksCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KS44KWH4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTQ3MjEyNDI5NjkwODk3NzI2MCI+IuCkj+CkquCljeKAjeCkv+CksuCkleClh+CktuCkqCDgpJXgpYsg4KSW4KS+4KSk4KS+IOCkrOCkqOCkvuCkqOClhyDgpJTgpLAg4KSJ4KSo4KSV4KWHIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCklOCksCDgpLjgpYfgpJ8g4KSV4KSw4KSo4KWHIOCkuOCkueCkv+CkpCwg4KSW4KS+4KSk4KS+IOCkquCljeCksOCkrOCkguCkp+CklSDgpJXgpYAg4KSW4KS+4KSk4KS+IOCkquCljeCksOCkruCkvuCko+CklSDgpJXgpY3gpLfgpK7gpKTgpL7gpJPgpIIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjY291bnRzIiBtc2dpZD0iNDk4MzEyNjMwNDc1NzE3NzMwNSI+IuCkluCkvuCkpOClhyDgpJzgpYvgpKHgpYfgpIIg4KSv4KS+IOCkqOCkv+CkleCkvuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjY291bnRzIiBtc2dpZD0iODY5ODI5NTYyNTQ4ODI5MjUwNiI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSW4KS+4KSk4KWHIOCknOCli+CkoeCkvOCkqOCkviDgpJTgpLAg4KSo4KS/4KSV4KS+4KSy4KSo4KS+IOCklOCksCDgpIngpKjgpJXgpYcg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkueCkn+CkvuCkqOClhyDgpJzgpYjgpLjgpYcg4KSV4KS+4KSw4KWN4KSvIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjY291bnRzIiBtc2dpZD0iODY5ODI5NTYyNTQ4ODI5MjUwNiI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSW4KS+4KSk4KWHIOCknOCli+CkoeCkvOCkqOCkviDgpJTgpLAg4KSo4KS/4KSV4KS+4KSy4KSo4KS+IOCklOCksCDgpIngpKjgpJXgpYcg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkueCkn+CkvuCkqOClhyDgpJzgpYjgpLjgpYcg4KSV4KS+4KSw4KWN4KSvIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSIyMzU0ODEzOTYxNjM4Nzc2NDIiPiLgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkluCkvuCkpOCli+CkgiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSq4KWN4KSw4KSu4KS+4KSj4KWA4KSV4KSw4KSjIOCkn+Cli+CkleCkqCDgpJXgpL4g4KSF4KSo4KWB4KSw4KWL4KSnIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkquCljeCksOCkruCkvuCko+ClgOCkleCksOCkoyDgpJ/gpYvgpJXgpKgg4KSV4KS+IOCkheCkqOClgeCksOCli+CkpyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KSo4KWH4KSV4KWN4oCN4KS24KSoIOCkpuClh+CkluClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJXgpKjgpYfgpJXgpY3igI3gpLbgpKgg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkpuClh+CkluCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCliOCkuOClhyDgpJXgpYzgpKgg4KS44KWHIOCkqOClh+Ckn+CkteCksOCljeCklSDgpK7gpYzgpJzgpYLgpKYg4KS54KWI4KSCIOCklOCksCDgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KSo4KWH4KSV4KWN4oCN4KS24KSoIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKbgpYfgpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpYjgpLjgpYcg4KSV4KWM4KSoIOCkuOClhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSu4KWM4KSc4KWC4KSmIOCkueCliOCkgiDgpJTgpLAg4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iODAxODc1ODEzNjQwNDMyMzY1OCI+IuCkquClguCksOCljeCkoyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KS54KWB4KSC4KSaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSIzNDAzMDYyMTg3Nzc5NzI0MTg1Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWJ4KSV4KWH4KSfIOCkrOCkqOCkvuCkqOClhyDgpJTgpLAg4KSV4KS44KWN4oCN4KSf4KSuIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpY3gpLDgpYvgpJ/gpYvgpJXgpYngpLIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCklOCksCDgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4KS4IOCkh+CkguCkn+CksOCkqOClh+CknyDgpJXgpYsg4KSh4KWH4KSf4KS+IOCkreClh+CknOCkqOClhyDgpJXgpYcg4KS44KS+4KSn4KSoIOCkieCkquCksuCkrOCljeKAjeCkpyDgpJXgpLDgpL7gpKTgpYcg4KS54KWI4KSCLCDgpKTgpL7gpJXgpL8g4KSH4KSC4KSf4KSw4KSo4KWH4KSfIOCkleCliyDgpKHgpYfgpJ/gpL4g4KSt4KWH4KSc4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYAg4KSG4KS14KS24KWN4oCN4KSv4KSV4KSk4KS+IOCkqOCkueClgOCkgiDgpLngpYsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSIzNDAzMDYyMTg3Nzc5NzI0MTg1Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOClieCkleClh+CknyDgpKzgpKjgpL7gpKjgpYcg4KSU4KSwIOCkleCkuOCljeKAjeCkn+CkriDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KWN4KSw4KWL4KSf4KWL4KSV4KWJ4KSyIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpJTgpLAg4KSF4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCAg4KSH4KSC4KSf4KSw4KSo4KWH4KSfIOCkleCliyDgpKHgpYfgpJ/gpL4g4KSt4KWH4KSc4KSo4KWHIOCkleClhyDgpLjgpL7gpKfgpKgg4KSJ4KSq4KSy4KSs4KWN4oCN4KSnIOCkleCksOCkvuCkpOClhyDgpLngpYjgpIIsIOCkpOCkvuCkleCkvyDgpIfgpILgpJ/gpLDgpKjgpYfgpJ8g4KSV4KWLIOCkoeClh+Ckn+CkviDgpK3gpYfgpJzgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIfgpLgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkleClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJXgpKTgpL4g4KSo4KS54KWA4KSCIOCkueCliy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MDU2NjAxNTk2NzU3NTE4OTYiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWH4KSf4KS/4KSC4KSXIOCklOCksCDgpJ/gpY3gpLDgpYjgpKvgpLzgpL/gpJUg4KSs4KSm4KSy4KWH4KSCL+CksOCli+CkleClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MzMzNzk4ODg2NDEyNzE0MTkzIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWH4KSf4KS/4KSC4KSXIOCkrOCkpuCksuCkqOClhyDgpJTgpLAg4KS44KSt4KWAIOCkn+CljeCksOCliOCkq+CkvOCkv+CklSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KWLIOCkrOCkvuCkp+Ckv+CkpCDgpJTgpLAg4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpIngpKbgpL7gpLngpLDgpKMg4KSV4KWHIOCksuCkv+CkjyDgpJXgpL/gpLjgpYAgQVBOIOCkleCkviDgpKrgpY3gpLDgpYngpJXgpY3gpLjgpYAg4KSU4KSwIOCkquCli+CksOCljeCknyDgpKzgpKbgpLLgpKjgpL4uIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KSG4KSq4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpYjgpJXgpYfgpJ8g4KSV4KWAIOCkqOCkv+Ckl+CksOCkvuCkqOClgCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgiwg4KSJ4KSo4KWN4KS54KWH4KSCIOCksOClgOCkoeCkvuCkr+CksOClh+CkleCljeCknywg4KSv4KS+IOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpYfgpJ/gpL/gpILgpJcg4KSs4KSm4KSy4KSo4KWHIOCklOCksCDgpLjgpK3gpYAg4KSf4KWN4KSw4KWI4KSr4KS84KS/4KSVIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJXgpYsg4KSs4KS+4KSn4KS/4KSkIOCklOCksCDgpKjgpL/gpLDgpYDgpJXgpY3gpLfgpKMg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgsIOCkieCkpuCkvuCkueCksOCkoyDgpJXgpYcg4KSy4KS/4KSPIOCkleCkv+CkuOClgCBBUE4g4KSV4KS+IOCkquCljeCksOClieCkleCljeCkuOClgCDgpJTgpLAg4KSq4KWL4KSw4KWN4KSfIOCkrOCkpuCksuCkqOCkvi4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpYjgpJXgpYfgpJ8g4KSV4KWAIOCkqOCkv+Ckl+CksOCkvuCkqOClgCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgiwg4KSJ4KSo4KWN4KS54KWH4KSCIOCksOClgOCkoeCkvuCkr+CksOClh+CkleCljeCknywg4KSv4KS+IOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9Ijk1ODg4NDI5MTQ1NDMyNzMwOSI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpJXgpKjgpYfgpJXgpY3igI3gpJ/gpL/gpLXgpL/gpJ/gpYAg4KSs4KSm4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkleCkqOClh+CkleCljeCkn+Ckv+CkteCkv+Ckn+ClgCDgpJXgpYAg4KS44KWN4KSl4KS/4KSk4KS/IOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9IjY3ODkxMjM5MTI0NzY0MTYyMTQiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KSo4KWH4KSV4KWN4KSf4KS/4KS14KS/4KSf4KWAIOCkleClgCDgpLjgpY3gpKXgpL/gpKTgpL8g4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjU5NTI1ODQ5NjQzNzMwMTc5NjAiPiLgpJ/gpYfgpKbgpLAg4KSV4KWAIOCkl+CkiCDgpJXgpKjgpYfgpJXgpY3igI3gpJ/gpL/gpLXgpL/gpJ/gpYAg4KSs4KSm4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSIxNTI0NDQxMzQ0NDEyMzE5NzgwIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpJ/gpYfgpKbgpLAg4KSV4KWAIOCkl+CkiCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KSo4KWH4KSV4KWN4oCN4KSf4KS/4KS14KS/4KSf4KWAIOCkleClgCDgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSIxNTI0NDQxMzQ0NDEyMzE5NzgwIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJ/gpYfgpKbgpLAg4KSV4KWAIOCkl+CkiCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KSo4KWH4KSV4KWN4oCN4KSf4KS/4KS14KS/4KSf4KWAIOCkleClgCDgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSIxNDAwNjY2MDEyNjcxNjQ4NzQxIj4i4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkoeClh+Ckn+CkviDgpIngpKrgpK/gpYvgpJcg4KS44KWH4KSf4KS/4KSC4KSXIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpKHgpYfgpJ/gpL4g4KSJ4KSq4KSv4KWL4KSXIOCkuOClh+Ckn+Ckv+CkguCklyDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSI1MzQ3NzI5NTc4NDY4NzQ0Mzc5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSh4KWH4KSf4KS+IOCkieCkquCkr+Cli+CklyDgpLjgpYfgpJ/gpL/gpILgpJcg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MjAyMDEyOTQ5MjQ3MDQwMDExIj4iV2ktRmkg4KSV4KSo4KWH4KSV4KWN4oCN4KS24KSoIOCkpuClh+CkluClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIFdpLUZpIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAsIOCknOCliOCkuOClhyBXSS1GaSDgpLjgpJXgpY3gpLfgpK4g4KS54KWIIOCkr+CkviDgpKjgpLngpYDgpIIg4KSU4KSwIOCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpL/gpI8g4KSX4KSPIFdpLUZpIOCkieCkquCkleCksOCko+Cli+CkgiDgpJXgpYcg4KSo4KS+4KSuLCDgpKbgpYfgpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsgV2ktRmkg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCknOCkvuCkqOCkleCkvuCksOClgCwg4KSc4KWI4KS44KWHIFdJLUZpIOCkuOCkleCljeCkt+CkriDgpLngpYgg4KSv4KS+IOCkqOCkueClgOCkgiDgpJTgpLAg4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkleCkv+CkjyDgpJfgpI8gV2ktRmkg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClhyDgpKjgpL7gpK4sIOCkpuClh+CkluCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNjU1MDY0MTE4ODc0OTEyODAzNSI+IldpLUZpIOCkuOClhyDgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSU4KSwIOCkoeCkv+CkuOCljeKAjeCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI3MTM3OTUwMjk3Mzg2MTI3NTMzIj4i4KSP4KSq4KWN4KS4IOCkleCliyBXaS1GaSDgpKrgpLngpYHgpILgpJog4KSs4KS/4KSC4KSm4KWB4KST4KSCIOCkuOClhyDgpJXgpKjgpYfgpJXgpY3gpJ8g4KSU4KSwIOCkoeCkv+CkuOCljeCkleCkqOClh+CkleCljeCknyDgpJXgpLDgpKjgpYcg4KSU4KSwIFdpLUZpIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJXgpYcg4KSy4KS/4KSPIOCkieCkquCkleCksOCkoyDgpJXgpYngpKjgpY3gpKvgpLzgpL/gpJfgpLDgpYfgpLbgpKgg4KSu4KWH4KSCIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI3MTM3OTUwMjk3Mzg2MTI3NTMzIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsgV2ktRmkg4KSq4KS54KWB4KSC4KSaIOCkrOCkv+CkguCkpuClgeCkk+CkgiDgpLjgpYcg4KSV4KSo4KWH4KSV4KWN4KSfIOCklOCksCDgpKHgpL/gpLjgpY3gpJXgpKjgpYfgpJXgpY3gpJ8g4KSV4KSw4KSo4KWHIOCklOCksCBXaS1GaSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KWHIOCksuCkv+CkjyDgpIngpKrgpJXgpLDgpKMg4KSV4KWJ4KSo4KWN4KSr4KS84KS/4KSX4KSw4KWH4KS24KSoIOCkruClh+CkgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4iV2ktRmkg4KSu4KSy4KWN4oCN4KSf4KWA4KSV4KS+4KS44KWN4oCN4KSfIOCkquCljeCksOCkvuCkquCljeCkpOCkvyDgpJXgpYsg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzk2OTc3NDAyMTI1NjMzNjU0OCI+IuCkj+CkquCljeCkuCDgpJXgpYsgV2ktRmkg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCksCDgpK7gpLLgpY3gpJ/gpYDgpJXgpL7gpLjgpY3gpJ8g4KSq4KSk4KWHIOCkleClhyDgpIngpKrgpK/gpYvgpJcg4KS44KWHIOCkleClh+CkteCksiDgpIbgpKrgpJXgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkquCksCDgpLngpYAg4KSo4KS54KWA4KSCLCDgpKzgpLLgpY3gpJXgpL8g4KS44KSt4KWAIOCkieCkquCkleCksOCko+Cli+CkgiDgpKrgpLAg4KSt4KWH4KSc4KWHIOCkl+CkjyDgpKrgpYjgpJXgpYfgpJ8g4KSq4KWN4KSw4KS+4KSq4KWN4oCN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSX4KWI4KSwLeCkruCksuCljeCkn+ClgOCkleCkvuCkuOCljeCknyDgpK7gpYvgpKEg4KS44KWHIOCkheCkp+Ckv+CklSDgpKrgpL7gpLXgpLAg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIFdpLUZpIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpLAg4KSu4KSy4KWN4KSf4KWA4KSV4KS+4KS44KWN4KSfIOCkquCkpOClhyDgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkuOClhyDgpJXgpYfgpLXgpLIg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpKrgpLAg4KS54KWAIOCkqOCkueClgOCkgiwg4KSs4KSy4KWN4KSV4KS/IOCkuOCkreClgCDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSq4KSwIOCkreClh+CknOClhyDgpJfgpI8g4KSq4KWI4KSV4KWH4KSfIOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkl+CliOCksC3gpK7gpLLgpY3gpJ/gpYDgpJXgpL7gpLjgpY3gpJ8g4KSu4KWL4KShIOCkuOClhyDgpIXgpKfgpL/gpJUg4KSq4KS+4KS14KSwIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiLgpJDgpKrgpY3gpLggIOCkleCliyBXaS1GaSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KSwIOCkruCksuCljeCkn+ClgOCkleCkvuCkuOCljeCknyDgpKrgpKTgpYcg4KSV4KWHIOCkieCkquCkr+Cli+CklyDgpLjgpYcg4KSV4KWH4KS14KSyIOCkhuCkquCkleClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSq4KSwIOCkueClgCDgpKjgpLngpYDgpIIsIOCkrOCksuCljeCkleCkvyDgpLjgpK3gpYAg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkquCksCDgpK3gpYfgpJzgpYcg4KSX4KSPIOCkquCliOCkleClh+CknyDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpJfgpYjgpLAt4KSu4KSy4KWN4KSf4KWA4KSV4KS+4KS44KWN4KSfIOCkruCli+CkoSDgpLjgpYcg4KSF4KSn4KS/4KSVIOCkquCkvuCkteCksCDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIFdpLUZpIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpLAg4KSu4KSy4KWN4KSf4KWA4KSV4KS+4KS44KWN4KSfIOCkquCkpOClhyDgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkuOClhyDgpJXgpYfgpLXgpLIg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpKrgpLAg4KS54KWAIOCkqOCkueClgOCkgiwg4KSs4KSy4KWN4KSV4KS/IOCkuOCkreClgCDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSq4KSwIOCkreClh+CknOClhyDgpJfgpI8g4KSq4KWI4KSV4KWH4KSfIOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkl+CliOCksC3gpK7gpLLgpY3gpJ/gpYDgpJXgpL7gpLjgpY3gpJ8g4KSu4KWL4KShIOCkuOClhyDgpIXgpKfgpL/gpJUg4KSq4KS+4KS14KSwIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aEFkbWluIiBtc2dpZD0iNjAwNjk2NzM3MzkzNTkyNjY1OSI+IkJsdWV0b290aCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSq4KSwIOCkquCkueClgeCkguCkmuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4i4KSV4KS/4KS44KWAIOCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KWN4oCN4KSl4KS+4KSo4KWA4KSvIEJsdWV0b290aCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWJ4KSo4KWN4oCN4KSr4KS84KS/4KSX4KSwIOCkleCksOCkqOClhyDgpJXgpYAg4KSU4KSwIOCksOCkv+CkruCli+CknyDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSV4KWHIOCkuOCkvuCkpSDgpJbgpYvgpJzgpKjgpYcg4KSU4KSwIOCkr+ClgeCkl+CljeKAjeCkruCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MzE2ODIxNTkzMzE1NDIxMzciPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOCljeKAjeCkpeCkvuCkqOClgOCkryBCbHVldG9vdGgg4KSr4KS84KWL4KSoIOCkleClieCkqOCljeKAjeCkq+CkvOCkv+Ckl+CksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSU4KSwIOCksOCkv+CkruCli+CknyDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSV4KWHIOCkuOCkvuCkpSDgpJbgpYvgpJzgpKjgpYcg4KSU4KSwIOCkr+ClgeCkl+CljeKAjeCkruCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjkyMTE3NzQ3MTc0ODg4MjEzNyI+IuCkleCkv+CkuOClgCDgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCljeKAjeCkpeCkvuCkqOClgOCkryBCbHVldG9vdGgg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleClieCkqOCljeKAjeCkq+CkvOCkv+Ckl+CksCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCklOCksCDgpLDgpL/gpK7gpYvgpJ8g4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClhyDgpLjgpL7gpKUg4KSW4KWL4KSc4KSo4KWHIOCklOCksCDgpK/gpYHgpJfgpY3igI3gpK7gpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTMxNjgyMTU5MzMxNTQyMTM3Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpY3igI3gpKXgpL7gpKjgpYDgpK8gQmx1ZXRvb3RoIOCkq+CkvOCli+CkqCDgpJXgpYngpKjgpY3igI3gpKvgpLzgpL/gpJfgpLAg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgsIOCklOCksCDgpLDgpL/gpK7gpYvgpJ8g4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClhyDgpLjgpL7gpKUg4KSW4KWL4KSc4KSo4KWHIOCklOCksCDgpK/gpYHgpJfgpY3igI3gpK7gpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhQcml2IiBtc2dpZD0iNDAwOTQ5NDI0NjAwOTUxMzgyOCI+IuCkj+CkquCljeKAjeCksuCkv+CkleClh+CktuCkqCDgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IEJsdWV0b290aCDgpK/gpYHgpJfgpY3igI3gpK7gpKgg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhQcml2IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDQ1NzM1MTkzNDE3NDY4ODU3Ij4i4KSP4KSq4KWN4oCN4KSy4KS/4KSV4KWH4KS24KSoIOCkleCliyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSV4KWHIOCkh+CkguCkn+CksOCliOCkleCljeCktuCkqCDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkpuClguCksOCkuOCljeKAjeCkpSDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSV4KWHIOCkuOCkvuCkpSDgpK/gpYHgpJfgpY3igI3gpK7gpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoUHJpdiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNDU3MzUxOTM0MTc0Njg4NTciPiLgpI/gpKrgpY3igI3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KWLIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJXgpYcg4KSH4KSC4KSf4KSw4KWI4KSV4KWN4KS24KSoIOCkleClhyDgpKzgpL/gpKjgpL4g4KSm4KWC4KSw4KS44KWN4oCN4KSlIOCkieCkquCkleCksOCko+Cli+CkgiDgpJXgpYcg4KS44KS+4KSlIOCkr+ClgeCkl+CljeKAjeCkruCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI0MTk1OTA3MDEwNjEwMjA1NzAzIj4iV2lNQVgg4KS44KWHIOCkleCkqOClh+CkleCljeCknyDgpJTgpLAg4KSh4KS/4KS44KWN4KSV4KSo4KWH4KSV4KWN4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI2MzYwMTAyODc3MjYxOTc4ODg3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyBXaU1BWCDgpLjgpJXgpY3gpLfgpK4g4KS54KWIIOCkr+CkviDgpKjgpLngpYDgpIIg4KSU4KSwIOCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpL/gpI8g4KSX4KSPIOCkleCkv+CkuOClgCBXaU1BWCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIFdpTUFYIOCkuOCkleCljeCkt+CkriDgpLngpYgg4KSv4KS+IOCkqOCkueClgOCkgiDgpJTgpLAg4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkleCkv+CkjyDgpJfgpI8g4KSV4KS/4KS44KWAIFdpTUFYIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2ltYXhTdGF0ZSIgbXNnaWQ9IjI0MDUwNDIyNjcxMzE0OTY1NzkiPiJXaU1BWCDgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSs4KSm4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzE1NjQ1NjUwNDA4NDIwMTgwNSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsgV2lNQVgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkleCkqOClh+CkleCljeKAjeCknyDgpJTgpLAg4KSh4KS/4KS44KWN4oCN4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIFdpTUFYIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpYcg4KSr4KS84KWL4KSoIOCkleCliyDgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSU4KSwIOCkoeCkv+CkuOCljeKAjeCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMTU2NDU2NTA0MDg0MjAxODA1Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyBXaU1BWCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWHIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYsg4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCklOCksCDgpKHgpL/gpLjgpY3igI3gpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NzAyNTA0MzAwNDkyMzc5OCI+IuCkkOCkquCljeCkuCDgpJXgpYsgV2lNQVgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOClhyDgpKvgpLzgpYvgpKgg4KSV4KWLIOCkleCkqOClh+CkleCljeKAjeCknyDgpJTgpLAg4KSh4KS/4KS44KWN4oCN4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoIiBtc2dpZD0iNjEyNzc2OTMzNjMzOTI3NjgyOCI+IkJsdWV0b290aCDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSV4KWHIOCkuOCkvuCkpSDgpK/gpYHgpJfgpY3gpK7gpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSq4KSwIEJsdWV0b290aCDgpJXgpL4g4KSV4KWJ4KSo4KWN4oCN4KSr4KS84KS/4KSX4KSw4KWH4KS24KSoIOCkpuClh+CkluCkqOClhywg4KSU4KSwIOCkr+ClgeCkl+CljeKAjeCkruCkv+CkpCDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSV4KWHIOCkuOCkvuCkpSDgpJXgpKjgpYfgpJXgpY3igI3gpLbgpKgg4KSs4KSo4KS+4KSo4KWHIOCklOCksCDgpLjgpY3igI3gpLXgpYDgpJXgpL7gpLAg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzIwNzEwNjMyNDQ1MjMxMjczOSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSr4KS84KWL4KSoIOCkquCksCBCbHVldG9vdGgg4KSV4KS+IOCkleClieCkqOCljeKAjeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCDgpKbgpYfgpJbgpKjgpYcsIOCklOCksCDgpK/gpYHgpJfgpY3igI3gpK7gpL/gpKQg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClhyDgpLjgpL7gpKUg4KSV4KSo4KWH4KSV4KWN4oCN4KS24KSoIOCkrOCkqOCkvuCkqOClhyDgpJTgpLAg4KS44KWN4oCN4KS14KWA4KSV4KS+4KSwIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCkquCksCBCbHVldG9vdGgg4KSV4KS+IOCkleClieCkqOCljeKAjeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCDgpKbgpYfgpJbgpKjgpYcsIOCklOCksCDgpK/gpYHgpJfgpY3igI3gpK7gpL/gpKQg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClhyDgpLjgpL7gpKUg4KSV4KSo4KWH4KSV4KWN4oCN4KS24KSoIOCkrOCkqOCkvuCkqOClhyDgpJTgpLAg4KS44KWN4oCN4KS14KWA4KSV4KS+4KSwIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkq+CkvOCli+CkqCDgpKrgpLAgQmx1ZXRvb3RoIOCkleCkviDgpJXgpYngpKjgpY3igI3gpKvgpLzgpL/gpJfgpLDgpYfgpLbgpKgg4KSm4KWH4KSW4KSo4KWHLCDgpJTgpLAg4KSv4KWB4KSX4KWN4oCN4KSu4KS/4KSkIOCkieCkquCkleCksOCko+Cli+CkgiDgpJXgpYcg4KS44KS+4KSlIOCkleCkqOClh+CkleCljeKAjeCktuCkqCDgpKzgpKjgpL7gpKjgpYcg4KSU4KSwIOCkuOCljeKAjeCkteClgOCkleCkvuCksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX25mYyIgbXNnaWQ9IjQ0MjMzNTEyNzQ3NTc4NzY5NTMiPiLgpKjgpL/gpK/gpLAg4KSr4KS84KWA4KSy4KWN4oCN4KShIOCkleCkruCljeKAjeCkr+ClguCkqOCkv+CkleClh+CktuCkqCDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSo4KS/4KSv4KSwIOCkq+CkvOClgOCksuCljeCkoSDgpJXgpK7gpY3gpK/gpYLgpKjgpL/gpJXgpYfgpLbgpKggKE5GQykg4KSf4KWI4KSXLCDgpJXgpL7gpLDgpY3gpKEsIOCklOCksCDgpLDgpYDgpKHgpLAg4KSV4KWHIOCkuOCkvuCkpSDgpLjgpILgpJrgpL7gpLAg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkqOCkv+Ckr+CksCDgpKvgpLzgpYDgpLLgpY3gpKEg4KSV4KSu4KWN4KSv4KWC4KSo4KS/4KSV4KWH4KS24KSoIChORkMpIOCkn+CliOCklywg4KSV4KS+4KSw4KWN4KShLCDgpJTgpLAg4KSw4KWA4KSh4KSwIOCkleClhyDgpLjgpL7gpKUg4KS44KSC4KSa4KS+4KSwIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+IuCkheCkquCkqOCkviDgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KSy4KWJ4KSVIOCkheCkleCljeCkt+CkriDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSI2MDM0MjAzMDY1MDc3MTIyOTkyIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpJXgpYDgpLLgpYngpJUg4KSU4KSwIOCkleCli+CkiCDgpK3gpYAg4KS44KSC4KSs4KSm4KWN4KSnIOCkquCkvuCkuOCkteCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSF4KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIngpKbgpL7gpLngpLDgpKMg4KSV4KWHIOCksuCkv+Ckjywg4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCkq+CkvOCli+CkqCDgpJXgpYngpLIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkpOClhyDgpLjgpK7gpK8g4KSr4KS84KWL4KSoLCDgpJXgpYDgpLLgpYngpJUg4KSV4KWLIOCkheCkleCljeCkt+CkriDgpJXgpLAg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSr4KS/4KSwIOCkleClieCksiDgpLjgpK7gpL7gpKrgpY3gpKQg4KS54KWL4KSo4KWHIOCkquCksCDgpJXgpYDgpLLgpYngpJUg4KSV4KWLIOCkquClgeCkqDog4KS44KSV4KWN4KS34KSuIOCkleCksCDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjYwMzQyMDMwNjUwNzcxMjI5OTIiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkleClgOCksuClieCklSDgpJTgpLAg4KSV4KWL4KSIIOCkreClgCDgpLjgpILgpKzgpKbgpY3gpKcg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkuOClgeCksOCkleCljeCkt+CkviDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkieCkpuCkvuCkueCksOCkoyDgpJXgpYcg4KSy4KS/4KSPLCDgpIfgpKjgpJXgpK7gpL/gpILgpJcg4KSr4KS84KWL4KSoIOCkleClieCksiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSk4KWHIOCkuOCkruCkryDgpKvgpLzgpYvgpKgsIOCkleClgOCksuClieCklSDgpJXgpYsg4KSF4KSV4KWN4KS34KSuIOCkleCksCDgpKbgpYfgpKTgpL4g4KS54KWILCDgpKvgpL/gpLAg4KSV4KWJ4KSyIOCkuOCkruCkvuCkquCljeCkpCDgpLngpYvgpKjgpYcg4KSq4KSwIOCkleClgOCksuClieCklSDgpJXgpYsg4KSq4KWB4KSoOiDgpLjgpJXgpY3gpLfgpK4g4KSV4KSwIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iNjIwMTgxMDAwODIzMDUwMzA1MiI+IuCkuOCkruCkqOCljeCkteCkr+CkqCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjI3MDY3NDU2NzQ1Njk2Nzg2NDQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkleCkv+CkuOClgCDgpJbgpL7gpKTgpYcg4KSV4KWAIOCkuOCkruCkqOCljeCkteCkr+CkqCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkieCkpuCkvuCkueCksOCkoyDgpJXgpYcg4KSy4KS/4KSPLCDgpIfgpLjgpLjgpYcg4KSv4KS5IOCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpL/gpK/gpL4g4KSc4KS+IOCkuOCkleCkpOCkviDgpLngpYgg4KSV4KS/IOCksuCli+CklyDgpI/gpKrgpY3gpLgg4KSV4KS/4KS44KWAIOCkluCkvuCkpOClhyDgpJXgpYcg4KS44KS+4KSlIOCkuOCkruCkqOCljeKAjeCkteCkr+Ckv+CkpCDgpLngpYgg4KSv4KS+IOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iMjcwNjc0NTY3NDU2OTY3ODY0NCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkleCkv+CkuOClgCDgpJbgpL7gpKTgpYcg4KSV4KWAIOCkuOCkruCkqOCljeCkteCkr+CkqCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkieCkpuCkvuCkueCksOCkoyDgpJXgpYcg4KSy4KS/4KSPLCDgpIfgpLjgpLjgpYcg4KSv4KS5IOCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpL/gpK/gpL4g4KSc4KS+IOCkuOCkleCkpOCkviDgpLngpYgg4KSV4KS/IOCksuCli+CklyDgpJDgpKrgpY3gpLggIOCkleCkv+CkuOClgCDgpJbgpL7gpKTgpYcg4KSV4KWHIOCkuOCkvuCkpSDgpLjgpK7gpKjgpY3igI3gpLXgpK/gpL/gpKQg4KS54KWIIOCkr+CkviDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiLgpLjgpK7gpKjgpY3igI3gpLXgpK/gpKgg4KSs4KSC4KSmIOCkr+CkviDgpJrgpL7gpLLgpYIg4KSf4KWJ4KSX4KSyIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU3luY1NldHRpbmdzIiBtc2dpZD0iODk1NjI2MjU5MTMwNjM2OTg2OCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSV4KS/4KS44KWAIOCkluCkvuCkpOClhyDgpJXgpYAg4KS44KSu4KSo4KWN4KS14KSv4KSoIOCkuOClh+Ckn+Ckv+CkguCklyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkieCkpuCkvuCkueCksOCkoyDgpJXgpYcg4KSy4KS/4KSPLCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCksuCli+CklyDgpI/gpKrgpY3gpLgg4KSV4KS+IOCkuOCkruCkqOCljeKAjeCkteCkr+CkqCDgpJXgpL/gpLjgpYAg4KSW4KS+4KSk4KWHIOCkuOClhyDgpLjgpJXgpY3gpLfgpK4g4KSV4KSw4KSo4KWHIOCkruClh+CkgiDgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9Ijg5NTYyNjI1OTEzMDYzNjk4NjgiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpJXgpL/gpLjgpYAg4KSW4KS+4KSk4KWHIOCkleClgCDgpLjgpK7gpKjgpY3gpLXgpK/gpKgg4KS44KWH4KSf4KS/4KSC4KSXIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSJ4KSm4KS+4KS54KSw4KSjIOCkleClhyDgpLLgpL/gpI8sIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSy4KWL4KSXIOCkkOCkquCljeCkuCAg4KSV4KS+IOCkuOCkruCkqOCljeKAjeCkteCkr+CkqCDgpJXgpL/gpLjgpYAg4KSW4KS+4KSk4KWHIOCkuOClhyDgpLjgpJXgpY3gpLfgpK4g4KSV4KSw4KSo4KWHIOCkruClh+CkgiDgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSI3Mzk2NTc3NDUxMzYwMjAyNDQ4Ij4i4KS44KSu4KSo4KWN4KS14KSv4KSoIOCkhuCkguCkleCkoeCkvOClhyDgpKrgpKLgpLzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1N0YXRzIiBtc2dpZD0iMTUxMDE0Mzc2MTc1NzYwNjE1NiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSV4KS/4KS44KWAIOCkluCkvuCkpOClhyDgpJXgpYcg4KS44KSu4KSo4KWN4KS14KSv4KSoIOCkhuCkguCkleCkoeCkvOClhywg4KS44KS+4KSlIOCkueClgCDgpLjgpK7gpKjgpY3igI3gpLXgpK/gpL/gpKQg4KSI4KS14KWH4KSC4KSfIOCkleCkviDgpIfgpKTgpL/gpLngpL7gpLgg4KSU4KSwIOCkuOCkruCkqOCljeKAjeCkteCkr+Ckv+CkpCDgpKHgpYfgpJ/gpL4g4KSV4KWAIOCkruCkvuCkpOCljeCksOCkviDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1N0YXRzIiBtc2dpZD0iMTUxMDE0Mzc2MTc1NzYwNjE1NiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkleCkv+CkuOClgCDgpJbgpL7gpKTgpYcg4KSV4KWHIOCkuOCkruCkqOCljeCkteCkr+CkqCDgpIbgpILgpJXgpKHgpLzgpYcsIOCkuOCkvuCkpSDgpLngpYAg4KS44KSu4KSo4KWN4oCN4KS14KSv4KS/4KSkIOCkiOCkteClh+CkguCknyDgpJXgpL4g4KSH4KSk4KS/4KS54KS+4KS4IOCklOCksCDgpLjgpK7gpKjgpY3igI3gpLXgpK/gpL/gpKQg4KSh4KWH4KSf4KS+IOCkleClgCDgpK7gpL7gpKTgpY3gpLDgpL4g4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNDc1NjYwOTYzNzA1MzM1MzMxOCI+IuCkl+CljeCksOCkvuCkueCkleClgC3gpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSr4KS84KWA4KShIOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI1NTU3MDU4OTA3OTA2MTQ0NTA1Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSu4KWH4KSCIOCkuOCkruCkqOCljeCkteCkr+Ckv+CkpCDgpKvgpLzgpYDgpKEg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS14KS/4KS14KSw4KSjIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNTU1NzA1ODkwNzkwNjE0NDUwNSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkruClh+CkgiDgpLjgpK7gpKjgpY3gpLXgpK/gpL/gpKQg4KSr4KS84KWA4KShIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkteCkv+CkteCksOCkoyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjkwMTUyNDYzMjU0MDgyMDkyOTYiPiLgpJfgpY3gpLDgpL7gpLngpJXgpYAt4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkq+CkvOClgOCkoSDgpLLgpL/gpJbgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjY5Mjg5MzAxODg4MjYwODk0MTMiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KS44KSu4KSo4KWN4KS14KSv4KS/4KSkIOCkq+CkvOClgOCkoSDgpJXgpYsg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkhuCkquCkleClhyDgpLjgpK7gpKjgpY3gpLXgpK/gpL/gpKQg4KSr4KS84KWA4KShIOCkleCliyDgpKzgpKbgpLIg4KS44KSV4KSk4KWHIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjY5Mjg5MzAxODg4MjYwODk0MTMiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkuOCkruCkqOCljeCkteCkr+Ckv+CkpCDgpKvgpLzgpYDgpKEg4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWHIOCkuOCkruCkqOCljeCkteCkr+Ckv+CkpCDgpKvgpLzgpYDgpKEg4KSV4KWLIOCkrOCkpuCksiDgpLjgpJXgpKTgpYcg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI0MTA3MTAxNTI1NzQ2MDM1NzE4Ij4i4KS24KSs4KWN4KSm4KSV4KWL4KS2IOCkruClh+CkgiDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCknOCli+CkoeCkvOClhyDgpJfgpI8g4KS24KSs4KWN4oCN4KSm4KWL4KSCIOCkleCliyDgpKrgpKLgpLzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSQ4KS44KWHIOCkuOCkreClgCDgpLbgpKzgpY3igI3gpKbgpYvgpIIsIOCkqOCkvuCkruCli+CkgiDgpJTgpLAg4KS14KS+4KSV4KWN4KSv4KS+4KSC4KS24KWL4KSCIOCkleCliyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpYsg4KS44KSC4KSt4KS14KSkOiDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDigI3gpLbgpKzgpY3gpKbgpJXgpYvgpLYg4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpJXgpL/gpI8g4KSX4KSPIOCkueCli+Ckgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSQ4KS44KWHIOCkuOCkreClgCDgpLbgpKzgpY3igI3gpKbgpYvgpIIsIOCkqOCkvuCkruCli+CkgiDgpJTgpLAg4KS14KS+4KSV4KWN4KSv4KS+4KSC4KS24KWL4KSCIOCkleCliyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpYsg4KS44KSC4KSt4KS14KSkOiDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDigI3gpLbgpKzgpY3gpKbgpJXgpYvgpLYg4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpJXgpL/gpI8g4KSX4KSPIOCkueCli+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjIxODMxMTA0MDIzMTQ0NDExMDYiPiLgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSm4KWN4KS14KS+4KSw4KS+IOCkquCksOCkv+CkreCkvuCkt+Ckv+CkpCDgpLbgpKzgpY3gpKbgpJXgpYvgpLYg4KSu4KWH4KSCIOCktuCkrOCljeCkpiDgpJzgpYvgpKHgpLzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MTg1Mzg1NzE2MjU1MDY1MjkxIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS24KSs4KWN4KSm4KSV4KWL4KS2IOCkruClh+CkgiDgpKjgpI8g4KS24KSs4KWN4KSmIOCksuCkv+CkluCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS24KSs4KWN4KSm4KSV4KWL4KS2IOCkruClh+CkgiDgpKjgpI8g4KS24KSs4KWN4KSmIOCksuCkv+CkluCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjcyNzUwOTUxNTk0MDU0NjgiPiLgpIXgpKrgpKjgpYcgVVNCIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODgxNTY0NjI5MzQ5Nzc5NDAiPiLgpIXgpKrgpKjgpYcgU0Qg4KSV4KS+4KSw4KWN4KShIOCkleClgCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ2OTg4NzEyNTk4Mzg2MDc5Ij4i4KSP4KSq4KWN4oCN4KSy4KS/4KSV4KWH4KS24KSoIOCkleCliyDgpIbgpKrgpJXgpYcgVVNCIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkquCkouCkvOCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MDczNjI0NzM2NTQ5NzU0MTEiPiLgpI/gpKrgpY3igI3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KWLIOCkhuCkquCkleClhyBTRCDgpJXgpL7gpLDgpY3gpKEg4KSV4KWAIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpKLgpLzgpKjgpYcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+IuCkheCkquCkqOClhyBVU0Ig4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkleClgCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSs4KSm4KSy4KWH4KSCIOCkr+CkviDgpLngpJ/gpL7gpI/gpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODgwNTY5MzYzMDA1MDQ1ODc2MyI+IuCkheCkquCkqOClhyBTRCDgpJXgpL7gpLDgpY3gpKEg4KSV4KWAIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKzgpKbgpLLgpYfgpIIg4KSv4KS+IOCkueCkn+CkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiLgpI/gpKrgpY3gpLLgpL8uIOCkleCliyBVU0Ig4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkruClh+CkgiDgpLLgpL/gpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIFNEIOCkleCkvuCksOCljeCkoSDgpKrgpLAg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+IuCkkOCkquCljeCkuCDgpJXgpYsgVVNCIOCkuOCkguCkl+CljeCksOCkueCkoyDgpK7gpYfgpIIg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MzM3NDE3NzkwOTM2NjMyMDkwIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsgU0Qg4KSV4KS+4KSw4KWN4KShIOCkquCksCDgpLLgpL/gpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+IuCkhuCkguCkpOCksOCkv+CklSDgpK7gpYDgpKHgpL/gpK/gpL4g4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkuOCkvuCkruCkl+CljeCksOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSs4KSm4KSy4KWH4KSCL+CkueCkn+CkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODE4OTE2MDU5NzY5ODUyOTE4NSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSC4KSk4KSw4KS/4KSVIOCkruClgOCkoeCkv+Ckr+CkviDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSV4KWAIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJXgpYsg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODE4OTE2MDU5NzY5ODUyOTE4NSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkguCkpOCksOCkv+CklSDgpK7gpYDgpKHgpL/gpK/gpL4g4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkleClgCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc4MzE4NTk4NDQ4ODQ5ODI5Ij4i4KSm4KS44KWN4KSk4KS+4KS14KWH4KSc4KS8IOCkuOCkguCkl+CljeCksOCkueCkoyDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg3MDQzMjMxNzY5MTQxMjE0ODQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkpuCkuOCljeCkpOCkvuCkteClh+CknOCkvCDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+Ckgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODcwNDMyMzE3NjkxNDEyMTQ4NCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkpuCkuOCljeCkpOCkvuCkteClh+CknOCkvCDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjgxNTA2MTM4MjM5MDA0NjA1NzYiPiLgpLjgpK3gpYAg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KST4KSCIOCkleClhyDgpKzgpL7gpLngpLDgpYAg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkpOCklSDgpKrgpLngpYHgpILgpJrgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSIzMjE1MjA4MzU3NDE1ODkxMzIwIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpK3gpYAg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KST4KSCIOCkleClhyDgpKzgpL7gpLngpLDgpYAg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkpOCklSDgpKrgpLngpYHgpILgpJrgpKjgpYcg4KSm4KWH4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjMyMTUyMDgzNTc0MTU4OTEzMjAiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpK3gpYAg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KST4KSCIOCkleClhyDgpKzgpL7gpLngpLDgpYAg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkpOCklSDgpKrgpLngpYHgpILgpJrgpKjgpYcg4KSm4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU2NTY0ODcyNjQ4MTk2Njk4MjQiPiLgpJXgpYjgpLYg4KSr4KS84KS+4KSH4KSyIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpK7gpYfgpIIg4KSq4KS54KSC4KSa4KWHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOCkguCkmuCkryDgpKvgpLzgpL7gpIfgpLIg4KS44KS/4KS44KWN4oCN4KSf4KSuIOCkquCkouCkvOCkqOClhyDgpJTgpLAg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCkguCkmuCkryDgpKvgpLzgpL7gpIfgpLIg4KS44KS/4KS44KWN4oCN4KSf4KSuIOCkquCkouCkvOCkqOClhyDgpJTgpLAg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2Vfc2lwIiBtc2dpZD0iNTk4Njk1MjM2Mjc5NTg3MDUwMiI+IuCkh+CkguCkn+CksOCkqOClh+CknyDgpJXgpYngpLIg4KSV4KSw4KWH4KSCL+CkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSH4KSC4KSf4KSw4KSo4KWH4KSfIOCkleClieCksiDgpJXgpLDgpKjgpYcv4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIFNJUCDgpLjgpYfgpLXgpL4g4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkh+CkguCkn+CksOCkqOClh+CknyDgpJXgpYngpLIg4KSV4KSw4KSo4KWHL+CkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyBTSVAg4KS44KWH4KS14KS+IOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kX2NhbGxfc2VydmljZSIgbXNnaWQ9IjY3MjQwMDk3MjY2NzEyNDY1NTEiPiLgpIfgpKgt4KSV4KWJ4KSyIOCkuOCljeCkleCljeCksOClgOCkqCDgpLjgpYcg4KS44KS54KSt4KS+4KSX4KS/4KSk4KS+IOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRfY2FsbF9zZXJ2aWNlIiBtc2dpZD0iODczMjU0NzY2MjQ0MjU3MjQzNSI+IuCkj+CkquCljeCksuCkv+CkleClh+CktuCkqCDgpJXgpYsg4KSv4KS5IOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliCDgpJXgpL8g4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleCliyDgpIfgpKgt4KSV4KWJ4KSyIOCkuOCljeCkleCljeCksOClgOCkqCDgpJXgpKwg4KSU4KSwIOCkleCliOCkuOClgCDgpKbgpL/gpJbgpL7gpIgg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWROZXR3b3JrVXNhZ2VIaXN0b3J5IiBtc2dpZD0iNzg2MjU5MzI4MzYxMTQ5MzIzMiI+IuCkkOCkpOCkv+CkueCkvuCkuOCkv+CklSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkquCkouClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWROZXR3b3JrVXNhZ2VIaXN0b3J5IiBtc2dpZD0iNzY4OTA2MDc0OTgxOTEyNjQ3MiI+IuCkleCkv+CkuOClgCDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkteCkv+CktuCkv+Ckt+CljeCknyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSU4KSwIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkkOCkpOCkv+CkueCkvuCkuOCkv+CklSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkleCliyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiLgpJXgpL/gpLjgpYAg4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS14KS/4KS24KS/4KS34KWN4KSfIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJTgpLAg4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSQ4KSk4KS/4KS54KS+4KS44KS/4KSVIOCkqOClh+Ckn+CkteCksOCljeCklSDgpIngpKrgpK/gpYvgpJcg4KSV4KWLIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9IjI1NjIwNTM1OTIzMzk4NTk5OTAiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSo4KWA4KSk4KS/IOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iNzUzNzU4Njc3MTU1OTM3MDY2OCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkqOClgOCkpOCkv+Ckr+CkvuCkgiDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCklOCksCDgpI/gpKrgpY3igI3gpLgt4KS14KS/4KS24KS/4KS34KWN4oCN4KSfIOCkqOCkv+Ckr+CkruCli+CkgiDgpJXgpYsg4KSq4KSw4KS/4KSt4KS+4KS34KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSI3NTM3NTg2NzcxNTU5MzcwNjY4Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSo4KWA4KSk4KS/4KSv4KS+4KSCIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSU4KSwIOCkkOCkquCljeCkuC3gpLXgpL/gpLbgpL/gpLfgpY3igI3gpJ8g4KSo4KS/4KSv4KSu4KWL4KSCIOCkleCliyDgpKrgpLDgpL/gpK3gpL7gpLfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjUwODgyMTczMDkwODg3Mjk2NTAiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkueCkv+CkuOCkvuCkrCDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkr+CkuSDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSV4KS/IOCkj+CkquCljeKAjeCkuCDgpJXgpYAg4KSk4KWB4KSy4KSo4KS+IOCkruClh+CkgiDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkleCkviDgpK7gpYLgpLLgpY3gpK/gpL7gpILgpJXgpKgg4KSV4KWI4KS44KWHIOCkleCkv+Ckr+CkviDgpJzgpL7gpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTQ0MzQxMjg2Njc0NjE5ODEyMyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkr+CkuSDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSV4KS/IOCkkOCkquCljeCkuCDgpJXgpYAg4KSk4KWB4KSy4KSo4KS+IOCkruClh+CkgiDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkleCkviDgpK7gpYLgpLLgpY3gpK/gpL7gpILgpJXgpKgg4KSV4KWI4KS44KWHIOCkleCkv+Ckr+CkviDgpJzgpL7gpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4i4KS44KWJ4KSV4KWH4KSfIOCkruCkvuCksOCljeCklSDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9Ijc2NTU1Njg0MzM2OTYzNTY1NzgiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCksOClguCkn+Ckv+CkguCklyDgpJXgpYcg4KSy4KS/4KSPIOCkuOClieCkleClh+CknyDgpK7gpL7gpLDgpY3gpJUg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9Ijc2NTU1Njg0MzM2OTYzNTY1NzgiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLDgpYLgpJ/gpL/gpILgpJcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpYngpJXgpYfgpJ8g4KSu4KS+4KSw4KWN4KSVIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNzY3MzQxNjQ4Nzg3MzQzMjI2OCI+IuCkuOClguCkmuCkqOCkvuCkk+CkgiDgpKTgpJUg4KSq4KS54KWB4KSC4KSa4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9IjQ1ODQ1Nzc0MjY4MzQzMTM4NyI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS44KWC4KSa4KSo4KS+4KST4KSCIOCkleCliyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHLCDgpJzgpL7gpILgpJog4KSV4KSw4KSo4KWHLCDgpJTgpLAg4KS44KS+4KSr4KS8IOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpJzgpL/gpKjgpK7gpYfgpIIg4KSF4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkquCli+CkuOCljeCknyDgpJXgpYAg4KSX4KSIIOCkuOClguCkmuCkqOCkvuCkj+CkgiDgpK3gpYAg4KS24KS+4KSu4KS/4KSyIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNDU4NDU3NzQyNjgzNDMxMzg3Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KWC4KSa4KSo4KS+4KST4KSCIOCkleCliyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHLCDgpJzgpL7gpILgpJog4KSV4KSw4KSo4KWHLCDgpJTgpLAg4KS44KS+4KSr4KS8IOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpJzgpL/gpKjgpK7gpYfgpIIg4KSF4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpKrgpYvgpLjgpY3gpJ8g4KSV4KWAIOCkl+CkiCDgpLjgpYLgpJrgpKjgpL7gpI/gpIIg4KSt4KWAIOCktuCkvuCkruCkv+CksiDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iNzA1Nzc2NDc0MjIxMTY1NjY1NCI+IuCkuOClguCkmuCkqOCkviDgpLbgpY3gpLDgpLXgpKPgpJXgpLDgpY3gpKTgpL4g4KS44KWH4KS14KS+IOCkuOClhyDgpJzgpYHgpKHgpLzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iOTg1Njk3OTE4NTc2OTAyOTg2Ij4i4KSn4KS+4KSw4KSVIOCkleCliyDgpLjgpYLgpJrgpKjgpL4g4KS24KWN4KSw4KS14KSj4KSV4KSw4KWN4KSk4KS+IOCkuOClh+CkteCkviDgpJXgpYcg4KS24KWA4KSw4KWN4KS3IOCkuOCljeCkpOCksOClgOCkryDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KS44KWHIOCknOClgeCkoeCkvOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOClgCDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnZva2VDYXJyaWVyU2V0dXAiIG1zZ2lkPSIzNjk5NjAwODMzOTc1MTE3NDc4Ij4i4KS14KS+4KS54KSVIOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSy4KSs4KWN4KSnIOCkleCksOCkvuCkr+CkviDgpJfgpK/gpL4g4KSV4KWJ4KSo4KWN4KSr4KS84KS/4KSX4KSw4KWH4KS24KSoIOCkj+CkquCljeCkuCDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iNDE1OTU0OTE1MjUyOTExMTkyMCI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KS14KS+4KS54KSVIOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSy4KSs4KWN4KSnIOCkleCksOCkvuCkr+CkviDgpJfgpK/gpL4g4KSV4KWJ4KSo4KWN4KSr4KS84KS/4KSX4KSw4KWH4KS24KSoIOCkj+CkquCljeCkuCDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iOTg1Njk3OTE4NTc2OTAyOTg2Ij4i4KSn4KS+4KSw4KSVIOCkleCliyDgpLjgpYLgpJrgpKjgpL4g4KS24KWN4KSw4KS14KSj4KSV4KSw4KWN4KSk4KS+IOCkuOClh+CkteCkviDgpJXgpYcg4KS24KWA4KSw4KWN4KS3IOCkuOCljeCkpOCksOClgOCkryDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KS44KWHIOCknOClgeCkoeCkvOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpYAg4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iMzY5OTYwMDgzMzk3NTExNzQ3OCI+IuCkteCkvuCkueCklSDgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCksuCkrOCljeCkpyDgpJXgpLDgpL7gpK/gpL4g4KSX4KSv4KS+IOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCDgpJDgpKrgpY3gpLggIOCkquCljeCksOCkvuCksOCkguCkrSDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnZva2VDYXJyaWVyU2V0dXAiIG1zZ2lkPSI0MTU5NTQ5MTUyNTI5MTExOTIwIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpLXgpL7gpLngpJUg4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpLLgpKzgpY3gpKcg4KSV4KSw4KS+4KSv4KS+IOCkl+Ckr+CkviDgpJXgpYngpKjgpY3gpKvgpLzgpL/gpJfgpLDgpYfgpLbgpKgg4KSQ4KSq4KWN4KS4ICDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtDb25kaXRpb25zIiBtc2dpZD0iODIwNjA3NzQ0NzgzODkwOTUxNiI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3gpKXgpL/gpKTgpL/gpK/gpYvgpIIg4KSV4KWHIOCkheCkteCksuCli+CkleCkqOCli+CkgiDgpJXgpYsg4KS44KWB4KSo4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI2ODk5MTAyMDc1ODI1MjcyMjExIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWN4KSl4KS/4KSk4KS/4KSv4KWL4KSCIOCkleClhyDgpIXgpLXgpLLgpYvgpJXgpKjgpYvgpIIg4KSV4KWLIOCkuOClgeCkqOCkqOClh8Kg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtDb25kaXRpb25zIiBtc2dpZD0iNjg5OTEwMjA3NTgyNTI3MjIxMSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3gpKXgpL/gpKTgpL/gpK/gpYvgpIIg4KSV4KWHIOCkheCkteCksuCli+CkleCkqOCli+CkgiDgpJXgpYsg4KS44KWB4KSo4KSo4KWHwqDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9saW1pdFBhc3N3b3JkIiBtc2dpZD0iNDQ5NzQyMDcyODg1NzU4NTc5MSI+IuCkquCkvuCkuOCkteCksOCljeCkoSDgpKjgpL/gpK/gpK4g4KS44KWH4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjMyNTIxMTQyMDM5MTk1MTAzOTQiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgt4KSF4KSo4KSy4KWJ4KSVIOCkquCkvuCkuOCkteCksOCljeCkoSDgpK7gpYfgpIIg4KSF4KSo4KWB4KSu4KSk4KS/IOCkquCljeCksOCkvuCkquCljeCkpCDgpLLgpILgpKzgpL7gpIgg4KSU4KSwIOCkteCksOCljeCko+Cli+CkgiDgpJXgpYsg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2F0Y2hMb2dpbiIgbXNnaWQ9IjkxNDEzMDY0Njk0MjE5OTUwMyI+IuCkuOCljeKAjeCkleCljeCksOClgOCkqC3gpIXgpKjgpLLgpYngpJUg4KSV4KWHIOCkquCljeCksOCkr+CkvuCkuOCli+CkgiDgpKrgpLAg4KSo4KS/4KSX4KSw4KS+4KSo4KWAIOCksOCkluClh+CkgiI8L3N0cmluZz4KQEAgLTY5MSw3ICs3MDIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iODg1Mjc5MTUxODQ3MjU0MDU2Ij4i4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCksuClieCklSDgpJXgpLDgpYfgpIIg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkuOCkruCkvuCkquCljeCkpOCkvyDgpLjgpYfgpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19leHBpcmVQYXNzd29yZCIgbXNnaWQ9IjE3Mjk3MjUyMjYzMTQ2OTE1OTEiPiLgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KWH4KSCIOCkleCkvyDgpJXgpL/gpKTgpKjgpYcg4KS44KSu4KSvIOCkruClh+CkgiDgpLLgpYngpJUt4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKzgpKbgpLLgpL4g4KSc4KS+4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9Ijg5MDEzMjYxOTk5MDkxMzI5MTUiPiLgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSP4KSo4KWN4oCN4KSV4KWN4KSw4KS/4KSq4KWN4oCN4KS24KSoIOCkuOClh+CknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSIyNjM3NzMyMTE1MzI1MzE2OTkyIj4i4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkj+CkquCljeKAjeCkuCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkj+CkqOCljeCkleCljeCksOCkv+CkquCljeCknyDgpJXgpL/gpK/gpL4g4KSc4KS+4KSo4KS+IOCkhuCkteCktuCljeKAjeCkr+CklSDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+IuCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpJDgpKrgpY3gpLgg4KSh4KWH4KSf4KS+IOCkleCliyDgpI/gpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpJ8g4KSV4KS/4KSv4KS+IOCknOCkvuCkqOCkviDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iNjM5NTMwMTAyMzE1MjI5NzgyNiI+IuCkleCliOCkruCksOCli+CkgiDgpJXgpYsg4KSF4KSV4KWN4KS34KSuIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUNhbWVyYSIgbXNnaWQ9IjIzMDYzNDkwNDI4MzQ3NTQ1OTciPiLgpLjgpK3gpYAg4KSJ4KSq4KSV4KSw4KSjIOCkleCliOCkruCksOCli+CkgiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCksOCli+CkleClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiLgpJXgpYDgpJfgpL7gpLDgpY3gpKEg4KSu4KWH4KSCIOCkuOClgeCkteCkv+Ckp+CkvuCkj+CkgiDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4i4KSY4KSwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IuCkleCkvuCksOCljeCkr+CkvuCksuCkryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IuCkh+CkuCDgpLjgpILgpKrgpLDgpY3gpJUg4KSV4KWLIOCkpuClh+CkluCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCli+CkiCDgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSo4KS54KWA4KSCIOCkruCkv+CksuCkvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLgpKrgpL/gpKgg4KSV4KWL4KShIOCksuCkv+CkluClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyDgpJTgpLAg4KSo4KSv4KS+IOCkquCkv+CkqCDgpJXgpYvgpKEg4KSy4KS/4KSW4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsg4KSV4KWL4KShIjwvc3RyaW5nPgpAQCAtOTQwLDI0ICs5NTIsMjQgQEAKICAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FyZWEiIG1zZ2lkPSIzNTQ3NDA5MDUwODg5OTUyNDIzIj4i4KSV4KWN4KS34KWH4KSk4KWN4KSwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZW1pcmF0ZSIgbXNnaWQ9IjI4OTM4ODA5Nzg4MzU2OTg4MTgiPiLgpIXgpK7gpYDgpLDgpL7gpKQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzc3NTI2NTc3NTQwNTEwNjk4MyI+IuCkheCkquCkqOClhyDgpLXgpYfgpKwg4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSVIOCklOCksCDgpIfgpKTgpL/gpLngpL7gpLgg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSm4KWN4KS14KS+4KSw4KS+IOCkteCkv+CknOCkvOCkv+CknyDgpJXgpL/gpI8g4KSX4KSPIOCkuOCkreClgCBVUkwg4KSV4KWHIOCkh+CkpOCkv+CkueCkvuCkuCwg4KSU4KSwIOCkuOCkreClgCDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSVIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKfgpY3igI3gpK/gpL7gpKgg4KSm4KWH4KSCOiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpOClg+CkpOClgOCkry3gpKrgpJXgpY3gpLcg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkr+CkviDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KS/4KSC4KSXIOCkleCljeCkt+CkruCkpOCkvuCkk+CkgiDgpLXgpL7gpLLgpYcg4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSy4KS+4KSX4KWCIOCkqOCkueClgOCkgiDgpJXgpYAg4KSc4KS+IOCkuOCkleCkpOClgC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9Ijg0NjIzNzgyMjY2MDA0Mzk2NTgiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSm4KWN4KS14KS+4KSw4KS+IOCkteCkv+CknOCkvOCkv+CknyDgpJXgpL/gpI8g4KSX4KSPIOCkuOCkreClgCBVUkwg4KSV4KWHIOCkh+CkpOCkv+CkueCkvuCkuCwg4KSU4KSwIOCkuOCkreClgCDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSVIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKfgpY3igI3gpK/gpL7gpKgg4KSm4KWH4KSCOiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpOClg+CkpOClgOCkry3gpKrgpJXgpY3gpLcg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkr+CkviDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KS/4KSC4KSXIOCkleCljeCkt+CkruCkpOCkvuCkk+CkgiDgpLXgpL7gpLLgpYcg4KSF4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCAg4KSm4KWN4KS14KS+4KSw4KS+IOCksuCkvuCkl+ClgiDgpKjgpLngpYDgpIIg4KSV4KWAIOCknOCkviDgpLjgpJXgpKTgpYAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzE0Nzg1MTY1MjczMzE0NDkwIj4i4KS14KWH4KSsIOCkrOClgeCkleCkruCkvuCksOCljeCklSDgpJTgpLAg4KSH4KSk4KS/4KS54KS+4KS4IOCksuCkv+CkluClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpJXgpYcg4KSH4KSk4KS/4KS54KS+4KS4IOCkr+CkviDgpKzgpYHgpJXgpK7gpL7gpLDgpY3gpJUg4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KS44KWHIOCkj+CkquCljeCkuCDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSh4KWH4KSf4KS+IOCkleCliyDgpK7gpL/gpJ/gpL4g4KS44KSV4KSk4KS+IOCkueCliCDgpK/gpL4g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiDgpKfgpY3igI3gpK/gpL7gpKgg4KSm4KWH4KSCOiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpOClg+CkpOClgOCkry3gpKrgpJXgpY3gpLcg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkr+CkviDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KS/4KSC4KSXIOCkleCljeCkt+CkruCkpOCkvuCkk+CkgiDgpLXgpL7gpLLgpYcg4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSy4KS+4KSX4KWCIOCkqOCkueClgOCkgiDgpJXgpYAg4KSc4KS+IOCkuOCkleCkpOClgC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkleClhyDgpIfgpKTgpL/gpLngpL7gpLgg4KSv4KS+IOCkrOClgeCkleCkruCkvuCksOCljeCklSDgpJXgpYsg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpLjgpYcg4KSP4KSq4KWN4KS4IOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkruCkv+Ckn+CkviDgpLjgpJXgpKTgpL4g4KS54KWIIOCkr+CkviDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIOCkp+CljeKAjeCkr+CkvuCkqCDgpKbgpYfgpII6IOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSk4KWD4KSk4KWA4KSvLeCkquCkleCljeCktyDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSv4KS+IOCkteClh+CkrCDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpL/gpILgpJcg4KSV4KWN4KS34KSu4KSk4KS+4KST4KSCIOCkteCkvuCksuClhyDgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpLLgpL7gpJfgpYIg4KSo4KS54KWA4KSCIOCkleClgCDgpJzgpL4g4KS44KSV4KSk4KWALiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSV4KWHIOCkh+CkpOCkv+CkueCkvuCkuCDgpK/gpL4g4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSVIOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJDgpKrgpY3gpLggIOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkruCkv+Ckn+CkviDgpLjgpJXgpKTgpL4g4KS54KWIIOCkr+CkviDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIOCkp+CljeKAjeCkr+CkvuCkqCDgpKbgpYfgpII6IOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSk4KWD4KSk4KWA4KSvLeCkquCkleCljeCktyDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSv4KS+IOCkteClh+CkrCDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpL/gpILgpJcg4KSV4KWN4KS34KSu4KSk4KS+4KST4KSCIOCkteCkvuCksuClhyDgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4ICDgpKbgpY3gpLXgpL7gpLDgpL4g4KSy4KS+4KSX4KWCIOCkqOCkueClgOCkgiDgpJXgpYAg4KSc4KS+IOCkuOCkleCkpOClgC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpJXgpYcg4KSH4KSk4KS/4KS54KS+4KS4IOCkr+CkviDgpKzgpYHgpJXgpK7gpL7gpLDgpY3gpJUg4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KS44KWHIOCkkOCkquCljeCkuCAg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkoeClh+Ckn+CkviDgpJXgpYsg4KSu4KS/4KSf4KS+IOCkuOCkleCkpOCkviDgpLngpYgg4KSv4KS+IOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4g4KSn4KWN4oCN4KSv4KS+4KSoIOCkpuClh+Ckgjog4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpKTgpYPgpKTgpYDgpK8t4KSq4KSV4KWN4KS3IOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpK/gpL4g4KS14KWH4KSsIOCkrOCljeCksOCkvuCkieCknOCkvOCkv+CkguCklyDgpJXgpY3gpLfgpK7gpKTgpL7gpJPgpIIg4KS14KS+4KSy4KWHIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLggIOCkpuCljeCkteCkvuCksOCkviDgpLLgpL7gpJfgpYIg4KSo4KS54KWA4KSCIOCkleClgCDgpJzgpL4g4KS44KSV4KSk4KWALiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWxhcm0iIG1zZ2lkPSIxMzc5Mjk0NTU2MzYyMDkxODE0Ij4i4KSF4KSy4KS+4KSw4KWN4KSuIOCkuOClh+CknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSH4KSC4KS44KWN4oCN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJfgpI8g4KSF4KSy4KS+4KSw4KWN4KSuIOCkmOCkoeCkvOClgCDgpI/gpKrgpY3igI3gpLgg4KSu4KWH4KSCIOCkheCksuCkvuCksOCljeCkriDgpLjgpYfgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkueCliyDgpLjgpJXgpKTgpL4g4KS54KWIIOCkleClgeCkmyDgpIXgpLLgpL7gpLDgpY3gpK4g4KSY4KSh4KS84KWAIOCkj+CkquCljeKAjeCkuCDgpK7gpYfgpIIg4KSv4KS5IOCkuOClgeCkteCkv+Ckp+CkviDgpKgg4KS54KWLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsYXJtIiBtc2dpZD0iMzE2MzkyMDM5MTU3NDczODQ4Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpIfgpILgpLjgpY3igI3gpJ/gpYngpLIg4KSV4KS/4KSPIOCkl+CkjyDgpIXgpLLgpL7gpLDgpY3gpK4g4KSY4KSh4KS84KWAIOCkkOCkquCljeCkuCDgpK7gpYfgpIIg4KSF4KSy4KS+4KSw4KWN4KSuIOCkuOClh+CknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS54KWLIOCkuOCkleCkpOCkviDgpLngpYgg4KSV4KWB4KSbIOCkheCksuCkvuCksOCljeCkriDgpJjgpKHgpLzgpYAg4KSQ4KSq4KWN4KS4IOCkruClh+CkgiDgpK/gpLkg4KS44KWB4KS14KS/4KSn4KS+IOCkqCDgpLngpYsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hZGRWb2ljZW1haWwiIG1zZ2lkPSI1NTI1NjYwMDI2MDkwOTU5MDQ0Ij4i4KSn4KWN4oCN4KS14KSo4KS/4KSu4KWH4KSyIOCknOCli+CkoeCkvOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpKfgpY3igI3gpLXgpKjgpL/gpK7gpYfgpLIg4KSH4KSo4KSs4KWJ4KSV4KWN4oCN4KS4IOCkruClh+CkgiDgpLjgpILgpKbgpYfgpLYg4KSc4KWL4KSh4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWRkVm9pY2VtYWlsIiBtc2dpZD0iNjYwNDUwODY1MTQyODI1MjQzNyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpKfgpY3igI3gpLXgpKjgpL/gpK7gpYfgpLIg4KSH4KSo4KSs4KWJ4KSV4KWN4oCN4KS4IOCkruClh+CkgiDgpLjgpILgpKbgpYfgpLYg4KSc4KWL4KSh4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSI1OTYyMjI0MTU4OTU1MjczOTMyIj4i4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkreCljOCkl+Cli+CksuCkv+CklS3gpLjgpY3gpKXgpL7gpKgg4KSF4KSo4KWB4KSu4KSk4KS/4KSv4KWL4KSCIOCkleCliyDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSIxMDgzNzQzMjM0NTIyNjM4NzQ3Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSV4KWHIOCkreCljOCkl+Cli+CksuCkv+CklS3gpLjgpY3igI3gpKXgpL7gpKgg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkv+Ckr+CkvuCkgiDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3igI3gpLgg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpI/gpJXgpKrgpJXgpY3gpLfgpYDgpK8g4KS14KWH4KSs4KS44KS+4KSH4KSfIOCkleCliyDgpLjgpY3igI3gpKXgpL7gpKgg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkreClh+CknOCkqOClhyDgpK7gpYfgpIIg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkleClhyDgpK3gpYzgpJfgpYvgpLLgpL/gpJUt4KS44KWN4oCN4KSl4KS+4KSoIOCkleClgCDgpIXgpKjgpYHgpK7gpKTgpL/gpK/gpL7gpIIg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4IOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSP4KSV4KSq4KSV4KWN4KS34KWA4KSvIOCkteClh+CkrOCkuOCkvuCkh+CknyDgpJXgpYsg4KS44KWN4oCN4KSl4KS+4KSoIOCknOCkvuCkqOCkleCkvuCksOClgCDgpK3gpYfgpJzgpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iNTU2ODEzOTEwMDY0NTgyOTExNyI+IuCkquCliOCkleClh+CknCDgpLjgpKTgpY3igI3gpK/gpL7gpKrgpL/igI3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iODQzNzU5MDE5MDk5MDg0MzM4MSI+IuCkj+CkquCljeKAjeCksuCkv+KAjeCkleClh+CktuCkqCDgpJXgpYsg4KSH4KSC4KS44KWN4oCN4KSf4KWJ4KSyIOCkleCksOCkqOClhyDgpK/gpYvgpJfgpY3igI3gpK8g4KSq4KWI4KSV4KWH4KScIOCkuOCkpOCljeKAjeCkr+CkvuCkquCkv+KAjeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSI0MTg3Nzg2NzkzMzYwMzI2NjU0Ij4i4KSq4KWI4KSV4KWH4KScIOCkquCljeCksOCkruCkvuCko+CklSDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4i4KSn4KS+4KSw4KSVIOCkleCliyDgpKrgpYjgpJXgpYfgpJwg4KSq4KWN4KSw4KSu4KS+4KSj4KSVIOCkleClhyDgpIXgpKjgpYHgpLDgpYvgpKcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkv+KAjSDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjMxODA3NDE3NzMyMzM4NjIxMjYiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkquCliOCkleClh+CknCDgpKrgpY3gpLDgpK7gpL7gpKPgpJUg4KSV4KWHIOCkheCkqOClgeCksOCli+CkpyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/4oCNIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlcmlhbFBvcnQiIG1zZ2lkPSI1NDYwODMzMjc2NTQ2MzEwNzYiPiLgpLjgpYDgpLDgpL/gpK/gpLIg4KSq4KWL4KSw4KWN4KSfIOCkquCksCDgpKrgpLngpYHgpILgpJrgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXJpYWxQb3J0IiBtc2dpZD0iMjk5MTYzOTk4NTIyNDU5ODE5MyI+IlNlcmlhbE1hbmFnZXIgQVBJIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSV4KWHIOCkp+CkvuCksOCklSDgpJXgpYsg4KS44KWA4KSw4KS/4KSv4KSyIOCkquCli+CksOCljeCknyDgpKrgpLAg4KSq4KS54KWB4KSC4KSaIOCkquCljeCksOCkpuCkvuCkqCDgpJXgpLDgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI1MDc3Nzc0Mjk3OTQzNDA5Mjg1Ij4i4KSs4KS+4KS54KWN4KSvIOCksOClguCkqiDgpLjgpYcg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkquCljeCksOCkpuCkvuCkpOCkvuCkk+CkgiDgpKrgpLAg4KSq4KS54KWB4KSC4KSaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI0NTQ0MzQ2NDg2Njk3ODUzNjg1Ij4i4KSn4KS+4KSw4KSVIOCkleCliyDgpLbgpYfgpLIg4KS44KWHIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpY3gpLDgpKbgpL7gpKTgpL7gpJPgpIIg4KSk4KSVIOCkquCkueClgeCkguCkmuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJXgpKTgpL4g4KSo4KS54KWA4KSCIOCkueCli+CkqOClgCDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI0NTQ0MzQ2NDg2Njk3ODUzNjg1Ij4i4KSn4KS+4KSw4KSVIOCkleCliyDgpLbgpYfgpLIg4KS44KWHIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpY3gpLDgpKbgpL7gpKTgpL7gpJPgpIIg4KSk4KSVIOCkquCkueClgeCkguCkmuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSV4KSk4KS+IOCkqOCkueClgOCkgiDgpLngpYvgpKjgpYAg4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlTG9jayIgbXNnaWQ9IjM1Mjc1NTgzNjY2MTY2ODA4ODkiPiLgpIXgpKrgpKjgpYfgpIbgpKog4KSJ4KSq4KSV4KSw4KSjIOCkleClgCDgpKjgpIgg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkqCDgpLLgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVMb2NrIiBtc2dpZD0iMTY1NTYyNTgzMjE2Njc3ODQ5MiI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSJ4KSq4KSV4KSw4KSjIOCkheCkquCkl+CljeCksOClh+CkoSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+Ckjywg4KSX4KWI4KSwLeCkuOCkueCkreCkvuCkl+ClgCDgpLDgpYDgpKzgpYLgpJ8g4KSV4KWHIOCkoOClgOCklSDgpLjgpK7gpK8g4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS44KS/4KS44KWN4KSf4KSuIOCkquCksCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS44KWN4KSk4KWB4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbWVzc2FnZSIgbXNnaWQ9Ijc2NzM0NDY4NzEzOTE5NTc5MCI+IuCkleCljeKAjeCkr+CkviDgpIbgpKog4KSa4KS+4KS54KSk4KWHIOCkueCliOCkgiDgpJXgpL8g4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkquCkvuCkuOCkteCksOCljeCkoSDgpJXgpYsg4KSv4KS+4KSmIOCksOCkluClhz8iPC9zdHJpbmc+CkBAIC0xMTA1LDcgKzExMTcsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190aXRsZSIgbXNnaWQ9IjU1NzYyNzI0OTYzNjU2ODQ4MzQiPiLgpLjgpILgpJfgpY3gpLDgpLngpKMg4KS44KWN4oCN4KSl4KS+4KSoIOCkuOCkruCkvuCkquCljeKAjeCkpCDgpLngpYsg4KSw4KS54KS+IOCkueCliCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGV4dCIgbXNnaWQ9IjY2NDA1MDU4MTc2MTc0MTQzNzEiPiLgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliCDgpJXgpYHgpJsg4KS44KS/4KS44KWN4KSf4KSuIOCkq+CkvOCkguCkleCljeCktuCkqCDgpJXgpL7gpLDgpY3gpK8g4KSoIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg3MTgzMzUxMjEwNjA3ODc5MTQiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkmuCksiDgpLDgpLngpL4g4KS54KWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX3J1bm5pbmdfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI0NjUzNTg2OTQ3NzQ3MzMwMDU4Ij4i4KSF4KSn4KS/4KSVIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYcg4KSy4KS/4KSPIOCkr+CkviDgpI/gpKrgpY3gpLgg4KSw4KWL4KSV4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4KSq4KSw4KWN4KS2IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiLgpIXgpKfgpL/gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClhyDgpLLgpL/gpI8g4KSv4KS+IOCkkOCkquCljeCkuCAg4KSw4KWL4KSV4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4KSq4KSw4KWN4KS2IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvayIgbXNnaWQ9IjU5NzAwNjA0MzA1NjI1MjQ5MTAiPiLgpKDgpYDgpJUg4KS54KWIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNjQ0MjU2MDU3MTI1OTkzNTEzMCI+IuCksOCkpuCljeCkpiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ5ZXMiIG1zZ2lkPSI1MzYyOTgyMzAzMzM3OTY5MzEyIj4i4KSg4KWA4KSVIOCkueCliCI8L3N0cmluZz4KQEAgLTExMTksOCArMTEzMSw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4i4KSH4KS4IOCkleCljeCksOCkv+Ckr+CkviDgpJXgpYcg4KSy4KS/4KSPIOCkoeCkv+Ckq+CkvOClieCksuCljeKAjeCknyDgpLDgpYLgpKog4KS44KWHIOCkieCkquCkr+Cli+CklyDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KS44KWH4KSf4KS/4KSC4KSXICZndDsgQXBwcyAmZ3Q7IOCkoeCkvuCkieCkqOCksuCli+CkoSDgpJXgpL/gpI8g4KSX4KSPIOCkruClh+CkgiDgpKHgpL/gpKvgpLzgpYngpLLgpY3igI3gpJ8g4KS44KS+4KSrIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiLgpJXgpYvgpIgg4KSV4KWN4KSw4KS/4KSv4KS+IOCkmuClgeCkqOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZVVzYkFjdGl2aXR5IiBtc2dpZD0iNjg5NDc0ODQxNjA3MzU4MzUwOSI+IlVTQiDgpIngpKrgpJXgpLDgpKMg4KSV4KWHIOCksuCkv+CkjyDgpJXgpYvgpIgg4KSP4KSq4KWN4KS4IOCkmuClgeCkqOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+IuCkleCli+CkiCDgpK3gpYAg4KSP4KSq4KWN4oCN4KS4IOCkr+CkuSDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KSo4KS54KWA4KSCIOCkleCksCDgpLjgpJXgpKTgpL4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4iVVNCIOCkieCkquCkleCksOCkoyDgpJXgpYcg4KSy4KS/4KSPIOCkleCli+CkiCDgpJDgpKrgpY3gpLggIOCkmuClgeCkqOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+IuCkleCli+CkiCDgpK3gpYAg4KSQ4KSq4KWN4KS4IOCkr+CkuSDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KSo4KS54KWA4KSCIOCkleCksCDgpLjgpJXgpKTgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWVycl90aXRsZSIgbXNnaWQ9IjE5MDU4MDA1NjAzMTcxMzc3NTIiPjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWVycl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjkzMjYyODQ4ODAxMzA5Mjc3NiI+IuCkpuClgeCksOCljeCkreCkvuCkl+CljeKAjeCkr+CkteCktiwgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgpLDgpYHgpJUg4KSX4KSv4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZXJyX3Byb2Nlc3MiIG1zZ2lkPSI0NTA3MDU4OTk3MDM1Njk3NTc5Ij4i4KSm4KWB4KSw4KWN4KSt4KS+4KSX4KWN4oCN4KSv4KS14KS2LCA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCksOClgeCklSDgpJfgpIgg4KS54KWILiI8L3N0cmluZz4KQEAgLTExMzksMjAgKzExNTEsMjAgQEAKICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zY2FsZSIgbXNnaWQ9IjMyMDI5NTU2Njc2NzU5NDQ0OTkiPiLgpLjgpY3gpJXgpYfgpLIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2hvdyIgbXNnaWQ9IjQwMTM4Nzg4NzY0ODY2NTU4OTIiPiLgpLngpK7gpYfgpLbgpL4g4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4i4KSH4KS44KWHIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpLjgpYfgpJ/gpL/gpILgpJcgJmd0OyBBcHBzICZndDsg4KSh4KS+4KSJ4KSo4KSy4KWL4KShIOCkleCkv+CkjyDgpJfgpI8g4KSu4KWH4KSCIOCkquClgeCkqDog4KS44KSV4KWN4KS34KSuIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4i4KSP4KSq4KWN4oCN4KS4IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gKOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkviA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTIkczwveGxpZmY6Zz4pIOCkqOClhyDgpIngpLjgpJXgpYAg4KS44KWN4oCN4KS14KSv4KSCIOCksuCkvuCkl+ClgiDgpLngpYvgpKjgpYcg4KS14KS+4KSy4KWAIFN0cmljdE1vZGUg4KSo4KWA4KSk4KS/IOCkleCkviDgpIngpLLgpY3igI3gpLLgpILgpJjgpKgg4KSV4KS/4KSv4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4i4KSQ4KSq4KWN4KS4IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gKOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkviA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTIkczwveGxpZmY6Zz4pIOCkqOClhyDgpIngpLjgpJXgpYAg4KS44KWN4oCN4KS14KSv4KSCIOCksuCkvuCkl+ClgiDgpLngpYvgpKjgpYcg4KS14KS+4KSy4KWAIFN0cmljdE1vZGUg4KSo4KWA4KSk4KS/IOCkleCkviDgpIngpLLgpY3igI3gpLLgpILgpJjgpKgg4KSV4KS/4KSv4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IOCkqOClhyDgpIngpLjgpJXgpYAg4KS44KWN4oCN4KS1LeCkquCljeCksOCkteCksOCljeCkpOCkv+CkpCBTdHJpY3RNb2RlIOCkqOClgOCkpOCkvyDgpJXgpL4g4KSJ4KSy4KWN4oCN4KSy4KSC4KSY4KSoIOCkleCkv+Ckr+CkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4iQW5kcm9pZCDgpIXgpKrgpJfgpY3gpLDgpYfgpKEg4KS54KWLIOCksOCkueCkviDgpLngpYguLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19hcGsiIG1zZ2lkPSI3OTA0MDQyNjgyMTExNTI2MTY5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgpK7gpYfgpIIg4KS44KWHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSP4KSq4KWN4KS4IOCkheCkqOClgeCkleClguCksuCkv+CkpCDgpLngpYsg4KSw4KS54KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19zdGFydGluZ19hcHBzIiBtc2dpZD0iNDUxNDY0NTE2MzQ2OTI2NzEzIj4i4KSP4KSq4KWN4KS4IOCkquCljeCksOCkvuCksOCkguCkrSDgpLngpYvgpKjgpYcg4KS14KS+4KSy4KWHIOCkueCliOCkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCkruClh+CkgiDgpLjgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpJDgpKrgpY3gpLggIOCkheCkqOClgeCkleClguCksuCkv+CkpCDgpLngpYsg4KSw4KS54KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19zdGFydGluZ19hcHBzIiBtc2dpZD0iNDUxNDY0NTE2MzQ2OTI2NzEzIj4i4KSQ4KSq4KWN4KS4ICDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KS54KWL4KSo4KWHIOCkteCkvuCksuClhyDgpLngpYjgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19jb21wbGV0ZSIgbXNnaWQ9IjE0MDU5NTQ3NTQxMTI5OTkyMjkiPiLgpKzgpYLgpJ8g4KS44KSu4KS+4KSq4KWN4oCN4KSkIOCkueCliyDgpLDgpLngpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb24iIG1zZ2lkPSI5MDg3MDYzOTg1Nzc2NjI2MTY2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz4g4KSa4KSyIOCksOCkueClgCDgpLngpYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uX2RldGFpbCIgbXNnaWQ9IjE3MjE2ODE3NDE2MTc4OTg4NjUiPiLgpI/gpKrgpY3igI3gpLgg4KSq4KSwIOCkuOCljeKAjeCkteCkv+CkmiDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpY3igI3gpKrgpLDgpY3gpLYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RpdGxlIiBtc2dpZD0iNzE1MzE2NzA4NTQwMzI5ODE2OSI+IuCkj+CkquCljeCkuCDgpLjgpY3gpLXgpL/gpJog4KSV4KSw4KWH4KSCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90ZXh0IiBtc2dpZD0iNzAyMjYzMTkyNDUzNDQwNjQwMyI+IuCkpuClguCkuOCksOCkviDgpI/gpKrgpY3gpLgg4KSq4KS54KSy4KWHIOCkuOClhyDgpJrgpLIg4KSw4KS54KS+IOCkueCliCDgpJzgpL/gpLjgpYcg4KSV4KS/4KS44KWAIOCkqOCkjyDgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkquCljeCksOCkvuCksOCkguCkrSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCkquCkueCksuClhyDgpKzgpILgpKYg4KSV4KS/4KSv4KS+IOCknOCkvuCkqOCkviDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb25fZGV0YWlsIiBtc2dpZD0iMTcyMTY4MTc0MTYxNzg5ODg2NSI+IuCkkOCkquCljeCkuCDgpKrgpLAg4KS44KWN4oCN4KS14KS/4KSaIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkuOCljeKAjeCkquCksOCljeCktiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGl0bGUiIG1zZ2lkPSI3MTUzMTY3MDg1NDAzMjk4MTY5Ij4i4KSQ4KSq4KWN4KS4ICDgpLjgpY3gpLXgpL/gpJog4KSV4KSw4KWH4KSCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90ZXh0IiBtc2dpZD0iNzAyMjYzMTkyNDUzNDQwNjQwMyI+IuCkpuClguCkuOCksOCkviDgpJDgpKrgpY3gpLggIOCkquCkueCksuClhyDgpLjgpYcg4KSa4KSyIOCksOCkueCkviDgpLngpYgg4KSc4KS/4KS44KWHIOCkleCkv+CkuOClgCDgpKjgpI8g4KSQ4KSq4KWN4KS4IOCkleCliyDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KSo4KWHIOCkleClhyDgpKrgpLngpLLgpYcg4KSs4KSC4KSmIOCkleCkv+Ckr+CkviDgpJzgpL7gpKjgpL4g4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2FjdGlvbiIgbXNnaWQ9IjQ5MzEyOTE3MjIzODU2NjI4MiI+Ijx4bGlmZjpnIGlkPSJPTERfQVBQIj4lMSRzPC94bGlmZjpnPiDgpKrgpLAg4KS14KS+4KSq4KS4IOCksuCljOCkn+Clh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDgyMDk0Mjc1NTgwMzU4MDQ5Ij4i4KSo4KSv4KS+IOCkj+CkquCljeKAjeCkuCDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSoIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjA4MjA5NDI3NTU4MDM1ODA0OSI+IuCkqOCkr+CkviDgpJDgpKrgpY3gpLgg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkqCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9hY3Rpb24iIG1zZ2lkPSI1NDcyNzU2OTI2OTQ1NDQwNzA2Ij4iPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+IOCkquCljeCksOCkvuCksOCkguCkrSDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IuCkquClgeCksOCkvuCkqOClhyDgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkrOCkv+CkqOCkviDgpLjgpLngpYfgpJzgpYcg4KSs4KSC4KSmIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IuCkquClgeCksOCkvuCkqOClhyDgpJDgpKrgpY3gpLgg4KSV4KWLIOCkrOCkv+CkqOCkviDgpLjgpLngpYfgpJzgpYcg4KSs4KSC4KSmIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZW5kVGV4dCIgbXNnaWQ9IjUyMDk4NzQ1NzE5NTk0NjkxNDIiPiLgpKrgpL7gpKAg4KSV4KWHIOCksuCkv+CkjyDgpJXgpL/gpLjgpYAg4KSV4KWN4KSw4KS/4KSv4KS+IOCkleCliyDgpJrgpYHgpKjgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfcmluZ3RvbmUiIG1zZ2lkPSI2ODg1NDIxNDA2ODQ1NzM0NjUwIj4i4KSw4KS/4KSC4KSX4KSwIOCkteClieCksuCljeKAjeCkr+ClguCkriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpYyIgbXNnaWQ9IjU0MjE2NTExNTcxMzg2MjgxNzEiPiLgpK7gpYDgpKHgpL/gpK/gpL4g4KS14KWJ4KSy4KWN4oCN4KSv4KWC4KSuIjwvc3RyaW5nPgpAQCAtMTIwNCw3ICsxMjE2LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+IuCkq+CkvOCli+CkqCA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkuOClhyDgpJXgpKjgpYfgpJXgpY3gpJ8g4KSw4KS54KSk4KWHIOCkuOCkruCkryBXaS1GaSDgpLjgpYcg4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkqiDgpLjgpYcg4KSh4KS/4KS44KWN4KSV4KSo4KWH4KSV4KWN4KSfIOCkueCliyDgpJzgpL7gpI/gpJfgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfY2hhcmFjdGVyIiBtc2dpZD0iMzM2NTU1MDEyMDYxNzcwMTc0NSI+IuCkteCksOCljeCkoyDgpLjgpK7gpY3igI3gpK7gpL/gpLLgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfdGl0bGUiIG1zZ2lkPSI3Mjk2NjEyNzgxMTI4OTE3NzE5Ij4iU01TIOCkuOCkguCkpuClh+CktiDgpK3gpYfgpJwg4KSw4KS54KS+IOCkueCliCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsg4KSs4KSh4KS84KWAIOCkuOCkguCkluCljeCkr+CkviDgpK7gpYfgpIIgU01TIOCkuOCkguCkpuClh+CktiDgpK3gpYfgpJwg4KSw4KS54KS+IOCkueCliC4g4KSV4KWN4KSv4KS+IOCkhuCkqiDgpIfgpLgg4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpILgpKbgpYfgpLYg4KSt4KWH4KSc4KSo4KS+IOCknOCkvuCksOClgCDgpLDgpJbgpKjgpYcg4KSm4KWH4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpII/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDgpKzgpKHgpLzgpYAg4KS44KSC4KSW4KWN4KSv4KS+IOCkruClh+CkgiBTTVMg4KS44KSC4KSm4KWH4KS2IOCkreClh+CknCDgpLDgpLngpL4g4KS54KWILiDgpJXgpY3gpK/gpL4g4KSG4KSqIOCkh+CkuCDgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpILgpKbgpYfgpLYg4KSt4KWH4KSc4KSo4KS+IOCknOCkvuCksOClgCDgpLDgpJbgpKjgpYcg4KSm4KWH4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpII/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfeWVzIiBtc2dpZD0iMzY2MzcyNTk5Mzg1NTgxNjgwNyI+IuCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9ubyIgbXNnaWQ9IjYyNTQzODU2MTM5NTUzNDk4MiI+IuCkheCkuOCljeCkteClgOCkleCkvuCksCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX21lc3NhZ2UiIG1zZ2lkPSIxNjQ1NDM2NDY2Mjg1MzEwODU1Ij4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDssICZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJERVNUX0FERFJFU1MiPiUyJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDgpKrgpLAg4KS44KSC4KSm4KWH4KS2IOCkreClh+CknOCkqOCkviDgpJrgpL7gpLngpKTgpL4g4KS54KWILiI8L3N0cmluZz4KQEAgLTEyMTMsNyArMTIyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2FsbG93IiBtc2dpZD0iNDQ1ODg3ODYzNzExMTAyMzQxMyI+IuCkreClh+CknOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiLgpLDgpKbgpY3gpKYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+IuCkruClh+CksOClgCDgpKrgpLjgpILgpKYg4KSV4KWLIOCkr+CkvuCkpiDgpLDgpJbgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl91bmRvX2luc3RydWN0aW9uIiBtc2dpZD0iNDk2MDk0NDEzMzA1MjI4NzQ4NCI+IuCkhuCkqiDgpIfgpLjgpYcg4KSs4KS+4KSmIOCkruClh+CkgiDgpLjgpYfgpJ/gpL/gpILgpJfCoCZndDvCoOCkj+CkquCljeCkuCDgpK7gpYfgpIIg4KSs4KSm4KSyIOCkuOCkleCkpOClhyDgpLngpYjgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl91bmRvX2luc3RydWN0aW9uIiBtc2dpZD0iNDk2MDk0NDEzMzA1MjI4NzQ4NCI+IuCkhuCkqiDgpIfgpLjgpYcg4KSs4KS+4KSmIOCkruClh+CkgiDgpLjgpYfgpJ/gpL/gpILgpJfCoCZndDvCoOCkkOCkquCljeCkuCAg4KSu4KWH4KSCIOCkrOCkpuCksiDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbHdheXNfYWxsb3ciIG1zZ2lkPSIzMjQxMTgxMTU0ODY5NDkzMzY4Ij4i4KS54KSu4KWH4KS24KS+IOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4i4KSV4KSt4KWAIOCkreClgCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSoIOCkpuClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX3RpdGxlIiBtc2dpZD0iNjIyNzcxMjMxOTIyMzIyNjE4NSI+IuCkuOCkv+CkruCkleCkvuCksOCljeCkoSDgpKjgpL/gpJXgpL7gpLLgpL4g4KSX4KSv4KS+Ijwvc3RyaW5nPgpAQCAtMTI0Nyw3ICsxMjU5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfYnV0dG9uX21vdW50IiBtc2dpZD0iNzA2MDIxODAzNDkwMDY5NjAyOSI+IlVTQiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiJVU0Ig4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkrOCkguCkpiDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkleCli+CkiCDgpLjgpK7gpLjgpY3igI3gpK/gpL4g4KS54KWB4KSIIOCkpeClgC4g4KSc4KS+4KSC4KSa4KWH4KSCIOCkleCkvyDgpIbgpKrgpKjgpYcgVVNCIOCkueCli+CkuOCljeKAjeCknyDgpIXgpKjgpK7gpL7gpIngpILgpJ8g4KSV4KS/4KSv4KS+IOCkueCliCDgpK/gpL4g4KSo4KS54KWA4KSCLCDgpKTgpKwg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+IlVTQiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSa4KS+4KSy4KWCIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+IuCkr+CkpuCkvyDgpIbgpKogVVNCIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJrgpL7gpLLgpYIg4KSV4KSw4KSk4KWHIOCkueCliOCkgiwg4KSk4KWLIOCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+CkjyDgpJzgpL4g4KSw4KS54KWHIOCkleClgeCkmyDgpI/gpKrgpY3igI3gpLgg4KSw4KWB4KSVIOCknOCkvuCkj+CkguCkl+ClhyDgpJTgpLAg4KS54KWLIOCkuOCkleCkpOCkviDgpLngpYgg4KSV4KS/IOCkteClhyDgpKTgpKwg4KSk4KSVIOCkheCkqOClgeCkquCksuCkrOCljeKAjeCkpyDgpLDgpLngpYfgpIIg4KSc4KSsIOCkpOCklSDgpJXgpL8g4KSG4KSqIFVTQiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSs4KSC4KSmIOCkqOCkueClgOCkgiDgpJXgpLAg4KSm4KWH4KSk4KWHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+IuCkr+CkpuCkvyDgpIbgpKogVVNCIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJrgpL7gpLLgpYIg4KSV4KSw4KSk4KWHIOCkueCliOCkgiwg4KSk4KWLIOCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+CkjyDgpJzgpL4g4KSw4KS54KWHIOCkleClgeCkmyDgpJDgpKrgpY3gpLgg4KSw4KWB4KSVIOCknOCkvuCkj+CkguCkl+ClhyDgpJTgpLAg4KS54KWLIOCkuOCkleCkpOCkviDgpLngpYgg4KSV4KS/IOCkteClhyDgpKTgpKwg4KSk4KSVIOCkheCkqOClgeCkquCksuCkrOCljeKAjeCkpyDgpLDgpLngpYfgpIIg4KSc4KSsIOCkpOCklSDgpJXgpL8g4KSG4KSqIFVTQiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSs4KSC4KSmIOCkqOCkueClgOCkgiDgpJXgpLAg4KSm4KWH4KSk4KWHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiJVU0Ig4KSV4KS+4KSw4KWN4KSv4KS14KS+4KS54KWAIOCkteCkv+Ckq+CksiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRsZ19vayIgbXNnaWQ9IjczNzY5NTMxNjcwMzk4NjU3MDEiPiLgpKDgpYDgpJUg4KS54KWIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX210cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzNjk5OTEzMDk3MzkxNTUwMzk0Ij4i4KSV4KS/4KS44KWAIOCkruClgOCkoeCkv+Ckr+CkviDgpIngpKrgpJXgpLDgpKMg4KSV4KWHIOCksOClguCkqiDgpK7gpYfgpIIg4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CkBAIC0xMjk2LDE1ICsxMzA4LDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSo4KS/4KSV4KS+4KSy4KS+IOCkl+Ckr+Ckvi4g4KSP4KSVIOCkqOCkr+CkviDgpLjgpK7gpY3igI3gpK7gpL/gpLLgpL/gpKQg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2xpc3RfZW1wdHkiIG1zZ2lkPSIxNjc1Mzg4MzMwNzg2ODQxMDY2Ij4i4KSV4KWL4KSIIOCkruCkv+CksuCkpOClgC3gpJzgpYHgpLLgpKTgpYAg4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkqOCkueClgOCkgiDgpK7gpL/gpLLgpYAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wa2dVc2FnZVN0YXRzIiBtc2dpZD0iODc4NzM1MjA3NDMyNjc0ODg5MiI+IuCkmOCkn+CklSDgpIngpKrgpK/gpYvgpJcg4KSG4KSC4KSV4KSh4KS84KWL4KSCIOCkleClgCDgpKjgpIgg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSIxMTA2NjEyNDI0MjU0Mjc3NjMwIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpJjgpJ/gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkleClhyDgpLjgpILgpJXgpLLgpL/gpKQg4KSG4KSC4KSV4KSh4KS84KWHIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSY4KSf4KSVIOCkieCkquCkr+Cli+CklyDgpJXgpYcg4KS44KSC4KSV4KSy4KS/4KSkIOCkhuCkguCkleCkoeCkvOClhyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzNDEwMzYzMTEyMTE0MDY2OTIiPiLgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSV4KWAIOCkquCljeCksOCkpOCkv+CksuCkv+CkquCkvyDgpKzgpKjgpL7gpI/gpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzOTA2OTcxMjQyODgzMTc4MzEiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJXgpYAg4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSq4KS/IOCkrOCkqOCkvuCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkoeCkv+Ckq+CkvOClieCksuCljeCknyDgpJXgpILgpJ/gpYfgpKjgpLAg4KS44KWH4KS14KS+IOCktuClgeCksOClgiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzOTA2OTcxMjQyODgzMTc4MzEiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSV4KWAIOCkquCljeCksOCkpOCkv+CksuCkv+CkquCkvyDgpKzgpKjgpL7gpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKHgpL/gpKvgpLzgpYngpLLgpY3gpJ8g4KSV4KSC4KSf4KWH4KSo4KSwIOCkuOClh+CkteCkviDgpLbgpYHgpLDgpYIg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSIxNjQyMDI0NDU1NzUwNDE0Njk0Ij4i4KSu4KWA4KSh4KS/4KSv4KS+IOCkhuCkieCkn+CkquClgeCknyDgpJXgpYsg4KSw4KWC4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JvdXRlX21lZGlhX291dHB1dCIgbXNnaWQ9IjQ5MzI4MTg3NDk1NDcyNDQzNDYiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkruClgOCkoeCkv+Ckr+CkviDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWLIOCkheCkqOCljeCkryDgpKzgpL7gpLngpLDgpYAg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkquCksCDgpLDgpYLgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNDkzMjgxODc0OTU0NzI0NDM0NiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkruClgOCkoeCkv+Ckr+CkviDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWLIOCkheCkqOCljeCkryDgpKzgpL7gpLngpLDgpYAg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkquCksCDgpLDgpYLgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI3NTY1NTUyMjM3OTc3ODE1MDQ3Ij4i4KSV4KWA4KSX4KS+4KSw4KWN4KShIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSP4KSV4KWN4KS44KWH4KS4IOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9IjU4NjYyNDU0ODQzMDMyODU3NjIiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkleClgOCkl+CkvuCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkj+CkleCljeCkuOClh+CkuCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI1ODY2MjQ1NDg0MzAzMjg1NzYyIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSV4KWA4KSX4KS+4KSw4KWN4KShIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSP4KSV4KWN4KS44KWH4KS4IOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjE3MjE5NTE4NDIwNzgyODM4NyI+IuCkleClgOCkl+CkvuCksOCljeCkoSDgpKbgpL/gpJbgpL7gpKjgpL4g4KSU4KSwIOCkm+Ckv+CkquCkvuCkqOCkviDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjMwNDM3MzIyOTA1MTg2MjkwNjEiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkleClgOCkl+CkvuCksOCljeCkoSDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjMwNDM3MzIyOTA1MTg2MjkwNjEiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpJXgpYDgpJfgpL7gpLDgpY3gpKEg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InR1dG9yaWFsX2RvdWJsZV90YXBfdG9fem9vbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDA3MDQzMzIwODE2MDA2MzUzOCI+IuCknOCkvOClguCkriDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpKMg4KSV4KWHIOCksuCkv+CkjyDgpKbgpYsg4KSs4KS+4KSwIOCkuOCljeCkquCksOCljeCktiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJnYWRnZXRfaG9zdF9lcnJvcl9pbmZsYXRpbmciIG1zZ2lkPSI0ODgyMDA0MzE0OTA2NDY2MTYyIj4i4KS14KS/4KSc4KWH4KSfIOCkqOCkueClgOCkgiDgpJzgpYvgpKHgpLzgpL4g4KSc4KS+IOCkuOCkleCkvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2dvIiBtc2dpZD0iODMyMDg0NTY1MTczNzM2OTAyNyI+IuCknOCkvuCkj+CkgiI8L3N0cmluZz4KQEAgLTEzMTYsNyArMTMyOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2RlZmF1bHQiIG1zZ2lkPSIyODQwOTIxODg1NTU4MDQ1NzIxIj4i4KSo4KS/4KS34KWN4oCN4KSq4KS+4KSm4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpYWxfbnVtYmVyX3VzaW5nIiBtc2dpZD0iNTc4OTE3NjQyNTE2NzU3MzU4NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiDgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkpuCljeCkteCkvuCksOCkviBcbiDgpKjgpILgpKzgpLAg4KSh4KS+4KSv4KSyIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9jb250YWN0X3VzaW5nIiBtc2dpZD0iNDk0NzQwNTIyNjc4ODEwNDUzOCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkleClh1xuIOCkuOCkguCkquCksOCljeCklSDgpKzgpKjgpL7gpI/gpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncmFudF9jcmVkZW50aWFsc19wZXJtaXNzaW9uX21lc3NhZ2VfaGVhZGVyIiBtc2dpZD0iMjEwNjEwMzgxNzkzNzg1OTY2MiI+IuCkqOCkv+CkruCljeKAjeCkqCDgpI/gpJUg4KSv4KS+IOCkheCkp+Ckv+CklSDgpI/gpKrgpY3igI3gpLgg4KSF4KSt4KWAIOCklOCksCDgpK3gpLXgpL/gpLfgpY3igI3gpK8g4KSu4KWH4KSCIOCkhuCkquCkleClhyDgpJbgpL7gpKTgpYcg4KSu4KWH4KSCIOCkquCkueClgeCkguCkmiDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkleCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSV4KSw4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9jcmVkZW50aWFsc19wZXJtaXNzaW9uX21lc3NhZ2VfaGVhZGVyIiBtc2dpZD0iMjEwNjEwMzgxNzkzNzg1OTY2MiI+IuCkqOCkv+CkruCljeKAjeCkqCDgpI/gpJUg4KSv4KS+IOCkheCkp+Ckv+CklSDgpJDgpKrgpY3gpLgg4KSF4KSt4KWAIOCklOCksCDgpK3gpLXgpL/gpLfgpY3igI3gpK8g4KSu4KWH4KSCIOCkhuCkquCkleClhyDgpJbgpL7gpKTgpYcg4KSu4KWH4KSCIOCkquCkueClgeCkguCkmiDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkleCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSV4KSw4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncmFudF9jcmVkZW50aWFsc19wZXJtaXNzaW9uX21lc3NhZ2VfZm9vdGVyIiBtc2dpZD0iMzEyNTIxMTM0MzM3OTM3NjU2MSI+IuCkleCljeCkr+CkviDgpIbgpKog4KSH4KS4IOCkheCkqOClgeCksOCli+CkpyDgpJXgpYsg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImdyYW50X3Blcm1pc3Npb25zX2hlYWRlcl90ZXh0IiBtc2dpZD0iNjg3NDQ5NzQwODIwMTgyNjcwOCI+IuCkquCkueClgeCkguCkmiDgpIXgpKjgpYHgpLDgpYvgpKciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbGxvdyIgbXNnaWQ9IjcyMjU5NDg4MTEyOTYzODY1NTEiPiLgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KWH4KSCIjwvc3RyaW5nPgpAQCAtMTQxMywxOSArMTQyNSwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4iTW9kZSBjaGFuZ2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i4KSV4KWL4KSIIOCkj+CkquCljeKAjeCkuCDgpJrgpYHgpKjgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLgpJXgpYvgpIgg4KSQ4KSq4KWN4KS4IOCkmuClgeCkqOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4g4KSV4KWLIOCksuClieCkqOCljeCkmiDgpKjgpLngpYDgpIIg4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLgpIfgpLjgpJXgpYcg4KS44KS+4KSlIOCkuOCkvuCkneCkviDgpJXgpLDgpYfgpII6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4g4KSV4KWHIOCkuOCkvuCkpSDgpLjgpL7gpJ3gpL4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IuCkuOCljeCksuCkvuCkh+CkoeCkv+CkguCklyDgpLngpYjgpILgpKHgpLIuIOCkuOCljeCkquCksOCljeCktiDgpJXgpLDgpJXgpYcg4KSw4KSW4KWH4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4KSV4KWHIOCksuCkv+CkjyDgpIrgpKrgpLAg4KS44KWN4oCN4KSy4KS+4KSH4KShIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4KSV4KWHIOCksuCkv+CkjyDgpKjgpYDgpJrgpYcg4KS44KWN4oCN4KSy4KS+4KSH4KShIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4KSV4KWHIOCksuCkv+CkjyDgpKzgpL7gpI/gpIIg4KS44KWN4oCN4KSy4KS+4KSH4KShIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOCkleClhyDgpLLgpL/gpI8g4KSm4KS+4KSP4KSCIOCkuOCljeKAjeCksuCkvuCkh+CkoSDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuCkleCliOCkruCksOCkviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLgpK7gpYzgpKgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i4KSn4KWN4oCN4KS14KSo4KS/IOCkmuCkvuCksuClgiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuCkluCli+CknOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IuCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpY3igI3gpLXgpL7gpIfgpKog4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLgpKzgpYvgpLLgpYAg4KSX4KSI4KSCIOCkquCkvuCkuOCkteCksOCljeCkoSDgpJXgpYHgpILgpJzgpL/gpK/gpL7gpIIg4KS44KWB4KSo4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS54KWH4KSh4KS44KWH4KSfIOCkquCljeKAjeCksuCklyDgpIfgpKgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IuCkrOCkv+CkguCkpuClgS4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLgpLjgpL/gpLjgpY3igI3gpJ/gpK4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aCDgpJHgpKHgpL/gpK/gpYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IuCkteCkvuCkr+CksOCksuClh+CkuCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i4KSq4KWC4KSw4KWN4KSjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i4KSu4KWA4KSh4KS/4KSv4KS+IOCkhuCkieCkn+CkquClgeCknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i4KSJ4KSq4KSV4KSw4KSjIOCkuOClhyDgpJXgpKjgpYfgpJXgpY3gpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4i4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSu4KWH4KSCIOCkleCkvuCkuOCljeCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLgpIngpKrgpJXgpLDgpKMg4KSW4KWL4KSc4KWHIOCknOCkviDgpLDgpLngpYcg4KS54KWI4KSC4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i4KS44KWH4KSf4KS/4KSC4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IuCkoeCkv+CkuOCljeCkleCkqOClh+CkleCljeCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i4KS44KWN4oCN4KSV4KWI4KSoIOCkleCksCDgpLDgpLngpL4g4KS54KWILi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i4KSV4KSo4KWH4KSV4KWN4KSfIOCkueCliyDgpLDgpLngpL4g4KS54KWILi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLgpIngpKrgpLLgpKzgpY3gpKciPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLgpJPgpLXgpLDgpLLgpYcgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuCkteCkvuCkr+CksOCksuClh+CkuCDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KSV4KSo4KWH4KSV4KWN4KSfIOCkueCliCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLgpK/gpLkg4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkheCkqOCljeCkryDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkpuCkv+CkluCkvuCkiCDgpKbgpYcg4KSw4KS54KWAIOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiLgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KS+4KS44KWN4KSfIOCkueCliyDgpLDgpLngpYAg4KS54KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+IOCkuOClhyDgpJXgpKjgpYfgpJXgpY3gpJ8g4KS54KWLIOCksOCkueCkviDgpLngpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KS+4KS44KWN4KSfIOCkueCliyDgpLDgpLngpYAg4KS54KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4g4KS44KWHIOCkleCkqOClh+CkleCljeCknyDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i4KSh4KS/4KS44KWN4KSV4KSo4KWH4KSV4KWN4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkleClieCksiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IuCkhuCkleCkvuCksCDgpK3gpYLgpLIg4KSX4KSPIjwvc3RyaW5nPgpAQCAtMTU0Myw4ICsxNTUzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiLgpLjgpY3gpLXgpL7gpK7gpYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IuCkpOCljeCksOClgeCkn+CkvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub19yZXN0cmljdGVkX2FjY291bnRzIiBtc2dpZD0iNTczOTQ2MzI0OTY3MzcyNzczNiI+IuCkr+CkuSDgpI/gpKrgpY3gpLgg4KSq4KWN4KSw4KSk4KS/4KSs4KSC4KSn4KS/4KSkIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpJXgpYcg4KSW4KS+4KSk4KWL4KSCIOCkleCkviDgpLjgpK7gpLDgpY3gpKXgpKgg4KSo4KS54KWA4KSCIOCkleCksOCkpOCkviDgpLngpYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbm90X2ZvdW5kIiBtc2dpZD0iMzQyOTE0MTg1MzQ5ODkyNzM3OSI+IuCkh+CkuCDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KSV4KWLIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpJXgpYvgpIgg4KSP4KSq4KWN4KS4IOCkqOCkueClgOCkgiDgpK7gpL/gpLLgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm9fcmVzdHJpY3RlZF9hY2NvdW50cyIgbXNnaWQ9IjU3Mzk0NjMyNDk2NzM3Mjc3MzYiPiLgpK/gpLkg4KSQ4KSq4KWN4KS4ICDgpKrgpY3gpLDgpKTgpL/gpKzgpILgpKfgpL/gpKQg4KSq4KWN4KSw4KWL4KSr4KS84KS+4KSH4KSyIOCkleClhyDgpJbgpL7gpKTgpYvgpIIg4KSV4KS+IOCkuOCkruCksOCljeCkpeCkqCDgpKjgpLngpYDgpIIg4KSV4KSw4KSk4KS+IOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub3RfZm91bmQiIG1zZ2lkPSIzNDI5MTQxODUzNDk4OTI3Mzc5Ij4i4KSH4KS4IOCkleCkvuCksOCljeCkr+CkteCkvuCkueClgCDgpJXgpYsg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCli+CkiCDgpJDgpKrgpY3gpLggIOCkqOCkueClgOCkgiDgpK7gpL/gpLLgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXZva2UiIG1zZ2lkPSI1NDA0NDc5MTg1MjI4MjcxNTg2Ij4i4KSo4KS/4KSw4KS44KWN4oCN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYTAiIG1zZ2lkPSIxOTk0NDc0MjUyOTMxMjk0MTcyIj4iSVNPIEEwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19hMSIgbXNnaWQ9IjMzMzMwNjA0MjE1Mjk3OTE3ODYiPiJJU08gQTEiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IuCkrOCkvuCkpiDgpK7gpYfgpIIg4KSq4KWB4KSo4KSDIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i4KSq4KWC4KSw4KWN4KSjIOCkuOCljeCkleCljeCksOClgOCkqCDgpLjgpYcg4KSs4KS+4KS54KSwIOCkhuCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkiuCkquCksCDgpLjgpYcg4KSo4KWA4KSa4KWHIOCkuOCljeCkteCkvuCkh+CkqiDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLgpKrgpYLgpLDgpY3gpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLgpJjgpILgpJ/gpYsg4KSV4KS+IOCkmuCkleCljeCksOCkvuCkleCkvuCksCDgpLjgpY3gpLLgpL7gpIfgpKHgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IuCkruCkv+CkqOCkn+Cli+CkgiDgpJXgpL4g4KSa4KSV4KWN4KSw4KS+4KSV4KS+4KSwIOCkuOCljeCksuCkvuCkh+CkoeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLgpJjgpILgpJ/gpYcg4KSa4KWB4KSo4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4i4KSu4KS/4KSo4KSfIOCkmuClgeCkqOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i4KSm4KS/4KSo4KWL4KSCIOCkleClgCDgpK7gpL7gpLkg4KSX4KWN4KSw4KS/4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i4KS14KSw4KWN4KS3IOCkleClgCDgpLjgpYLgpJrgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IuCkruCkvuCkuSDgpJTgpLAg4KSm4KS/4KSoIOCkmuClgeCkqOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IuCkteCksOCljeCktyDgpJrgpYHgpKjgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IOCkmuCkr+CkqOCkv+CkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IOCkleCliyDgpLngpJ/gpL4g4KSm4KS/4KSv4KS+IOCkl+Ckr+CkviI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKaW5kZXggMzdkYzE0MS4uMmNjZDg2OSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJVcGnFoWl0ZSBQVUsga29qaSBzZSBzYXN0b2ppIG9kIGJhcmVtIDggYnJvamV2YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iVmHFoWEgamUgU0lNIGthcnRpY2EgemFrbGp1xI1hbmEgUFVLLW9tLiBVbmVzaXRlIFBVSyBrw7RkIGRhIGJpc3RlIGplIG90a2xqdcSNYWxpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlVuZXNpdGUgUFVLMiBkYSBiaXN0ZSBvZGJsb2tpcmFsaSBTSU0ga2FydGljdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJOZXVzcGplxaFubzsgb21vZ3XEh2kgemFrbGp1xI1hdmFuamUgU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9rdcWhYWogcHJpamUgemFrbGp1xI1hdmFuamEgU0lNIGthcnRpY2UuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iSW1hdGUgam/FoSBuZWtvbGlrbyBwcmVvc3RhbGloIHBva3XFoWFqYSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+KSBwcmlqZSB6YWtsanXEjWF2YW5qYSBTSU0ga2FydGljZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IklEIGRvbGF6bm9nIHBveml2YXRlbGphIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJOb3NpdGVsanUgb21vZ3XEh3VqZSB2ZXphbmplIHV6IHN1xI1lbGplIG5hanZpxaFlIHJhemluZSBWUE4gdXNsdWdlLiBOZSBiaSBzbWplbG8gYml0aSBwb3RyZWJubyB6YSBub3JtYWxuZSBhcGxpa2FjaWplLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJwb3ZlemFubyBzIHBvemFkaW5za29tIHNsaWtvbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iTm9zaXRlbGp1IG9tb2d1xId1amUgcG92ZXppdmFuamUgc2Egc3XEjWVsamVtIHBvemFkaW5za2Ugc2xpa2UgbmFqdmnFoWUgcmF6aW5lLiBOZSBiaSBzbWplbG8gYml0aSBwb3RyZWJubyB6YSBub3JtYWxuZSBhcGxpa2FjaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4idmV6YW5qZSB1eiB1ZGFsamVuaSB6YXNsb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJOb3NpdGVsanUgb21vZ3XEh3VqZSB2ZXphbmplIHV6YSBzdcSNZWxqZSBuYWp2acWhZSByYXppbmUgdWRhbGplbm9nIHphc2xvbmEuIE5lIGJpIHNtamVsbyBiaXRpIHBvdHJlYm5vIHphIG5vcm1hbG5lIGFwbGlrYWNpamUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4idmV6YW5qZSBuYSB1c2x1Z3Ugd2lkZ2V0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJOb3NpdGVsanUgb21vZ3XEh3VqZSB2ZXphbmplIHV6IHN1xI1lbGplIG5hanZpxaFlIHJhemluZSB1c2x1Z2Ugd2lkZ2V0YS4gTmUgYmkgc21qZWxvIGJpdGkgcG90cmVibm8gemEgbm9ybWFsbmUgYXBsaWthY2lqZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJpbnRlcmFrY2lqYSBzIGFkbWluaXN0cmF0b3JvbSB1cmXEkWFqYSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iQXBsaWthY2lqaSBvbW9ndcSHdWplIHVwb3RyZWJ1IHpuYcSNYWpraSBuaXNrZSByYXppbmUgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ixI1pdGFuamUgbWXEkXVzcHJlbW5pa2Egb2t2aXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IkFwbGlrYWNpamkgb21vZ3XEh3VqZSDEjWl0YW5qZSBzYWRyxb5hamEgbWXEkXVzcHJlbW5pa2Egb2t2aXJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+InByaXN0dXBpIElucHV0RmxpbmdlcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iRG9wdcWhdGEgYXBsaWthY2lqaSB1cG90cmVidSB6bmHEjWFqa2kgbmlza2UgcmF6aW5lIElucHV0RmxpbmdlcmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJrb25maWd1cmlyYWogV2lmaSB6YXNsb25lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iT21vZ3XEh3VqZSBhcGxpa2FjaWppIGtvbmZpZ3VyaXJhbmplIGkgcG92ZXppdmFuamUgcyBXaS1GaSB6YXNsb25pbWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJ1cHJhdmxqYWogV2lmaSB6YXNsb25pbWEiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4iQXBsaWthY2lqaSBvbW9ndcSHdWplIGl6bWplbnUgZ2xvYmFsbmloIHBvc3RhdmtpIHp2dWthLCBwcmltamVyaWNlIGdsYXNub8SHZSBpIHp2dcSNbmlrYSBrb2ppIHNlIHVwb3RyZWJsamF2YSB6YSBpemxhei4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+InNuaW1hbmplIHp2dWthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iQXBsaWthY2lqaSBvbW9ndcSHdWplIHNuaW1hbmplIHp2dWthIG1pa3JvZm9ub20uIFRhIGRvenZvbGEgYXBsaWthY2lqaSBvbW9ndcSHdWplIHNuaW1hbmplIHp2dWthIHUgYmlsbyBrb2plbSB0cmVudXRrdSBiZXogdmHFoWVnIG9kb2JyZW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+ImtvbXVuaWthY2lqYSBzYSBTSU0tb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJPbW9ndcSHdWplIGFwbGlrYWNpamkgc2xhbmplIG5hcmVkYmkgU0lNLXUuIFRvIGplIHZybG8gb3Bhc25vLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+InNuaW1pIGZvdG9ncmFmaWplIGkgdmlkZW96YXBpc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iQXBsaWthY2lqaSBvbW9ndcSHdWplIHNuaW1hbmplIHNsaWthIGkgdmlkZW96YXBpc2EgZm90b2FwYXJhdG9tLiBUYSBkb3p2b2xhIGFwbGlrYWNpamkgb21vZ3XEh3VqZSB1cG90cmVidSBmb3RvYXBhcmF0YSB1IGJpbG8ga29qZW0gdHJlbnV0a3UgYmV6IHZhxaFlZyBvZG9icmVuamEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4ib25lbW9ndcSHYXZhbmplIGxhbXBpY2UgcG9rYXppdmHEjWEgcHJpamVub3NhIGthZGEgamUgZm90b2FwYXJhdCB1IHVwb3RyZWJpIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iUG/EjWV0bmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iUG9zYW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IkRydWdvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+Ik5lbWEgYXBsaWthY2lqZSB6YSBwcmlrYXppdmFuamUgdG9nIGtvbnRha3RhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlVuZXNpdGUgUElOIGvDtGQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJVbmVzaXRlIFBVSyBpIG5vdmkgUElOIGvDtGQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyBrw7RkIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+Ik9kYWJpciBhcGxpa2FjaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iTmlqZSBtb2d1xIdlIHBva3JlbnV0aSBhcGxpa2FjaWp1IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJEaWplbGplbmplIHNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkRpamVsaSBzIGFwbGlrYWNpam9tIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iS2xpem5hIHJ1xI1rYS4gRG9kaXJuaXRlIGkgZHLFvml0ZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iS2xpem5pdGUgcHJlbWEgZ29yZSB6YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iS2xpem5pdGUgcHJlbWEgZG9samUgemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IktsaXpuaXRlIGxpamV2byB6YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IktsaXpuaXRlIGRlc25vIHphIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Ik90a2xqdcSNYWoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iRm90b2FwYXJhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJCZcWhdW1ubyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJadnVrIGplIHVrbGp1xI1lbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iUHJldHJhxb5pdmFuamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJQcmlqZcSRaXRlIHByc3RpbWEgZGEgYmlzdGUgb3RrbGp1xI1hbGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlByaWtsanXEjWl0ZSBzbHXFoWFsaWNlIGtha28gYmlzdGUgxI11bGkgaXpnb3ZhcmFuamUgdGlwa2kgemFwb3JrZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJUb8SNa2EuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3VzdGF2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGggenZ1ayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iQmXFvmnEjW5pIHByaWtheiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJHb3Rvdm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNZWRpanNraSBpemxheiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iUG92ZXppdmFuamUgcyB1cmXEkWFqZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJFbWl0aXJhbmplIHphc2xvbmEgbmEgdXJlxJFhaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlRyYcW+ZW5qZSB1cmXEkWFqYeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IlBvc3RhdmtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IlByZWtpbmkgdmV6dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJTa2VuaXJhbmplLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iUG92ZXppdmFuamUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRvc3R1cG5vIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iUHJla2xhcGFuamUgYnIuIDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+IHggPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHNpZ3Vybm8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkJlxb5pxI1uaSBqZSBwcmlrYXogcG92ZXphbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJPdmFqIHNlIHphc2xvbiBwcmlrYXp1amUgbmEgbmVrb20gZHJ1Z29tIHVyZcSRYWp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IkVtaXRpcmFuamUgemFzbG9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IlBvdmV6aXZhbmplIHNhIHphc2xvbm9tIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkVtaXRpcmFuamUgemFzbG9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iUG92ZXphbiBzYSB6YXNsb25vbSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iSXNrbGp1xI1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJIaXRhbiBwb3ppdiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlphYm9yYXZpbGkgc3RlIG9icmF6YWMiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlBva3XFoWFqdGUgcG9ub3ZvIGthc25pamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iUHJpamXEkWl0ZSBwcnN0b20gcyB2cmhhIHByZW1hIGRvbGplIHphIGl6bGF6IGl6IGNpamVsb2cgemFzbG9uYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkdvdG92byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IktydcW+bmkga2xpemHEjSBzYXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJLcnXFvm5pIGtsaXphxI0gbWludXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+Ik9kYWJlcml0ZSBzYXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iT2RhYmVyaXRlIG1pbnV0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iTXJlxb5hIGRhbmEgdSBtamVzZWN1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iUG9waXMgZ29kaW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJPZGFiZXJpdGUgbWplc2VjIGkgZGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iT2RhYmVyaXRlIGdvZGludSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiJPZGFicmFuYSBqZSBzdGF2a2EgPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iSXpicmlzYW4gamUgYnJvaiA8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKaW5kZXggNGFlNTkzOC4uMWRiNmVlMCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCkBAIC00OCw4ICs0OCwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibWlzbWF0Y2hQaW4iIG1zZ2lkPSI2MDkzNzkwNTQ0OTY4NjM0MTkiPiJBIGJlw61ydCBQSU4ga8OzZG9rIG5lbSBlZ3llem5lay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUGluIiBtc2dpZD0iMzg1MDAxODQ0NTE4NzQ3NTM3NyI+IsONcmpvbiBiZSBlZ3kgNC04IHN6w6FtamVnecWxIFBJTi1rw7Nkb3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiI4IHN6w6FtamVnecWxIHZhZ3kgaG9zc3phYmIgUFVLIGvDs2RvdCDDrXJqb24gYmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IkEgU0lNLWvDoXJ0eWEgbGUgdmFuIHrDoXJ2YSBhIFBVSy1rw7NkZGFsLiBBIGZlbG9sZMOhc2hveiBhZGphIG1lZyBhIFBVSy1rw7Nkb3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iQSBTSU0ta8OhcnR5YSBmZWxvbGTDoXPDoWhveiBhZGphIG1lZyBhIFBVSzIta8OzZG90LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJBIFNJTSBrw6FydHlhIGxlIHZhbiB6w6FydmEgYSBQVUsga8OzZGRhbC4gQSBmZWxvbGTDoXNob3ogYWRqYSBtZWcgYSBQVUsga8OzZG90LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkEgU0lNIGvDoXJ0eWEgZmVsb2xkw6Fzw6Fob3ogYWRqYSBtZWcgYSBQVUsyIGvDs2RvdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJTaWtlcnRlbGVuLCBlbmdlZMOpbHllenplIGEgU0lNLS9SVUlNLXrDoXJvbMOhc3QuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iTcOpZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHLDs2LDoWxrb3rDoXNhIHZhbiwgbWllbMWRdHQgesOhcm9sanVrIGEgU0lNIGvDoXJ0ecOhdC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJNw6lnIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcsOzYsOhbGtvesOhc2EgdmFuLCBtaWVsxZF0dCB6w6Fyb2xqdWsgYSBTSU0ga8OhcnR5w6F0LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iQmXDqXJrZXrFkSBow612w7Nhem9ub3PDrXTDsyI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iTGVoZXTFkXbDqSB0ZXN6aSBhIGhhc3puw6Fsw7Mgc3rDoW3DoXJhLCBob2d5IGNzYXRsYWtvenpvbiBlZ3kgVlBOLXN6b2xnw6FsdGF0w6FzIGxlZ2ZlbHPFkSBzemludMWxIGtlemVsxZFmZWzDvGxldMOpaGV6LiBBIG5vcm3DoWwgYWxrYWxtYXrDoXNva25hayBlcnJlIHNvaGEgbmluY3Mgc3rDvGtzw6lnZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iw7Zzc3pla2FwY3NvbMOhcyBow6F0dMOpcmvDqXBwZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkxlaGV0xZF2w6kgdGVzemksIGhvZ3kgYSB0dWxhamRvbm9zIGvDtnRlbGV6xZF2w6kgdGVneWUgZWd5IGjDoXR0w6lya8OpcCBsZWdmZWxzxZEgc3ppbnTFsSBmZWzDvGxldMOpdC4gQSBub3Jtw6FsIGFsa2FsbWF6w6Fzb2tuYWsgZXJyZSBzb2hhIG5pbmNzIHN6w7xrc8OpZ2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJjc2F0bGFrb3rDoXMgZWd5IHTDoXZvbGkga2lqZWx6xZFow7Z6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iTGVoZXTFkXbDqSB0ZXN6aSBhIGhhc3puw6Fsw7Mgc3rDoW3DoXJhLCBob2d5IGNzYXRsYWtvenpvbiBlZ3kgdMOhdm9saSBraWplbHrFkSBsZWdmZWxzxZEgc3ppbnTFsSBrZXplbMWRZmVsw7xsZXTDqWhlei4gQSBub3Jtw6FsIGFsa2FsbWF6w6Fzb2tuYWsgZXJyZSBzb2hhIG5pbmNzIHN6w7xrc8OpZ8O8ay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJjc2F0bGFrb3rDoXMgbW9kdWxzem9sZ8OhbHRhdMOhc2hveiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJMZWhldMWRdsOpIHRlc3ppIGEgaGFzem7DoWzDsyBzesOhbcOhcmEsIGhvZ3kgY3NhdGxha296em9uIGVneSBtb2R1bHN6b2xnw6FsdGF0w6FzIGxlZ2ZlbHPFkSBzemludMWxIGtlemVsxZFmZWzDvGxldMOpaGV6LiBBIG5vcm3DoWwgYWxrYWxtYXrDoXNva25hayBlcnJlIHNvaGEgbmluY3Mgc3rDvGtzw6lnZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJheiBlc3prw7Z6a2V6ZWzFkSBoYXN6bsOhbGF0YSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iTGVoZXTFkXbDqSB0ZXN6aSBheiBhbGthbG1hesOhcyBzesOhbcOhcmEgYSBTdXJmYWNlRmxpbmdlciBhbGFjc29ueSBzemludMWxIGZ1bmtjacOzayBoYXN6bsOhbGF0w6F0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImtlcmV0cHVmZmVyIG9sdmFzw6FzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJMZWhldMWRdsOpIHRlc3ppIGF6IGFsa2FsbWF6w6FzIHN6w6Ftw6FyYSBhIGtlcmV0cHVmZmVyIHRhcnRhbG3DoW5hayBvbHZhc8Ohc8OhdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJob3p6w6Fmw6lyw6lzIGF6IElucHV0RmxpbmdlcmhleiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJMZWhldMWRdsOpIHRlc3ppIGF6IGFsa2FsbWF6w6FzIHN6w6Ftw6FyYSBheiBJbnB1dEZsaW5nZXIgYWxhY3Nvbnkgc3ppbnTFsSBmdW5rY2nDs2sgaGFzem7DoWxhdMOhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IldpLUZpIGtpamVsesWRayBrb25maWd1csOhbMOhc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJMZWhldMWRdsOpIHRlc3ppLCBob2d5IGF6IGFsa2FsbWF6w6FzIFdpLUZpIGtpamVsesWRa2V0IGtvbmZpZ3Vyw6Fsam9uLCDDqXMgY3NhdGxha296em9uIGhvenrDoWp1ay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IldpLUZpIGtpamVsesWRayBpcsOhbnnDrXTDoXNhIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IkxlaGV0xZF2w6kgdGVzemkgYXogYWxrYWxtYXrDoXMgc3rDoW3DoXJhIGF6IMOhbHRhbMOhbm9zIGhhbmdiZcOhbGzDrXTDoXNvaywgcMOpbGTDoXVsIGEgaGFuZ2VyxZEgw6lzIGEgaGFzem7DoWxuaSBrw612w6FudCBraW1lbmV0aSBoYW5nc3rDs3LDsyBtw7Nkb3PDrXTDoXPDoXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJoYW5nYW55YWcgcsO2Z3rDrXTDqXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iTGVoZXTFkXbDqSB0ZXN6aSBheiBhbGthbG1hesOhcyBzesOhbcOhcmEgYSBtaWtyb2Zvbm5hbCB2YWzDsyBoYW5nZmVsdsOpdGVsdC5BeiBlbmdlZMOpbGx5ZWwgcmVuZGVsa2V6xZEgYWxrYWxtYXrDoXMgYXogw5ZuIGrDs3bDoWhhZ3nDoXNhIG7DqWxrw7xsLCBiw6FybWlrb3IgcsO2Z3rDrXRoZXQgaGFuZ2FueWFnb3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJTSU0ta29tbXVuaWvDoWNpw7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJFbmdlZMOpbHllemksIGhvZ3kgYXogYWxrYWxtYXrDoXMgcGFyYW5jc29rYXQga8O8bGRqw7ZuIGEgU0lNIGvDoXJ0ecOhcmEuIEV6IHJlbmRrw612w7xsIHZlc3rDqWx5ZXMgbGVoZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4iZm90w7NrIMOpcyB2aWRlw7NrIGvDqXN6w610w6lzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJMZWhldMWRdsOpIHRlc3ppIGF6IGFsa2FsbWF6w6FzIHN6w6Ftw6FyYSwgaG9neSBhIGbDqW55a8OpcGV6xZFnw6lwcGVsIGZvdMOza2F0IMOpcyB2aWRlw7NrYXQga8Opc3rDrXRzZW4uIEF6IGVuZ2Vkw6lsbHllbCByZW5kZWxrZXrFkSBhbGthbG1hesOhcyBiw6FybWlrb3IsIGF6IMOWbiBqw7N2w6FoYWd5w6FzYSBuw6lsa8O8bCBoYXN6bsOhbGhhdGphIGEgZsOpbnlrw6lwZXrFkWfDqXBldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiLDoXR2aXRlbGplbHrFkSBMRUQgbGV0aWx0w6FzYSwgaGEgYSBrYW1lcmEgaGFzem7DoWxhdGJhbiB2YW4iPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiJPdHRob25pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+Ik11bmthaGVseSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iRWd5w6liIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+Ik5lbSB0YWzDoWxoYXTDsyBhbGthbG1hesOhcyBhIG7DqXZqZWd5IG1lZ3Rla2ludMOpc2hlei4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLDjXJqYSBiZSBhIFBJTiBrw7Nkb3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLDjXJqYSBiZSBhIFBVSyBrw7Nkb3QsIG1hamQgYXogw7pqIFBJTiBrw7Nkb3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyBrw7NkIjwvc3RyaW5nPgpAQCAtODM1LDggKzg0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2JhdHRlcnlfc2hvcnQiIG1zZ2lkPSI0NDc3MjY0ODQ5Mzg2ODUwMjY2Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbG93X2JhdHRlcnkiIG1zZ2lkPSIxNDgyODczOTgxOTE5MjQ5NzQwIj4iQ3NhdGxha296dGFzc2EgYSB0w7ZsdMWRdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk5NDM5Mjc3ODE5MjE1Mzk5Ij4iTmluY3MgU0lNIGvDoXJ0eWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiJOaW5jcyBTSU0ta8OhcnR5YSBhIHTDoWJsYWfDqXBiZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4NjkyMDU4NTY5NTE2OTA3OCI+Ik5pbmNzIFNJTS1rw6FydHlhIGEgdGVsZWZvbmJhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MTY1OTE5NjA5NTc5MTQ3NCI+Ik5pbmNzIFNJTSBrw6FydHlhIGEgdMOhYmxhZ8OpcGJlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4iTmluY3MgU0lNIGvDoXJ0eWEgYSB0ZWxlZm9uYmFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTM3Mjc4NzEzODAyMzI3MjYxNSI+IkhlbHllenplbiBiZSBlZ3kgU0lNIGvDoXJ0ecOhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IkEgU0lNIGvDoXJ0eWEgaGnDoW55emlrIHZhZ3kgbmVtIG9sdmFzaGF0w7MuIEhlbHllenplbiBiZSBlZ3kgU0lNIGvDoXJ0ecOhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiJBIFNJTSBrw6FydHlhIG5lbSBoYXN6bsOhbGhhdMOzLiI8L3N0cmluZz4KQEAgLTg1MCw4ICs4NjIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMTQzMzg5MjI0OTg2MDI4NTAxIj4iQSBow6Fsw7N6YXQgbGV6w6FydmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4iQSBTSU0ta8OhcnR5YSBsZSB2YW4gesOhcnZhIGEgUFVLLWvDs2RkYWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI4MTI3OTE2MjU1MjQ1MTgxMDYzIj4iTsOpenplIG1lZyBhIGZlbGhhc3puw6Fsw7NpIMO6dG11dGF0w7N0LCB2YWd5IHZlZ3llIGZlbCBhIGthcGNzb2xhdG90IGF6IMO8Z3lmw6lsc3pvbGfDoWxhdHRhbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiJBIFNJTS1rw6FydHlhIGxlIHZhbiB6w6FydmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4iU0lNLWvDoXJ0eWEgZmVsb2xkw6FzYS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+IkEgU0lNIGvDoXJ0eWEgbGUgdmFuIHrDoXJ2YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiJTSU0ga8OhcnR5YSBmZWxvbGTDoXNhLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2NDgxNjIzODMwMzQ0MTA3MjIyIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCByb3NzenVsIHJhanpvbHRhIGxlIGZlbG9sZMOhc2kgbWludMOhdC4gXG5cbkvDqXJqw7xrLCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtw6Fzb2RwZXJjIG3Dumx2YSBwcsOzYsOhbGphIMO6anJhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+IsOWbiBoZWx5dGVsZW7DvGwgYWR0YSBtZWcgYSBqZWxzesOzdCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBhbGthbG9tbWFsLiBcbiBcbiBQcsOzYsOhbGphIMO6anJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG3DoXNvZHBlcmMgbcO6bHZhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjYyMTY2NzI3MDY1NDU2OTY5NTUiPiLDlm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBoZWx5dGVsZW7DvGwgYWR0YSBtZWcgUElOIGvDs2Rqw6F0LiBcbiBcbiBQcsOzYsOhbGphIMO6anJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG3DoXNvZHBlcmMgbcO6bHZhLiI8L3N0cmluZz4KQEAgLTg2NSw3ICs4NzcsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiJFbGZlbGVqdGV0dGUgYSBtaW50w6F0PyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+IkZpw7NrIGZlbG9sZMOhc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiJUw7psIHNvayBtaW50YXJhanpvbMOhc2kgcHLDs2LDoWxrb3rDoXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4iQSBmZWxvbGTDoXNob3ogamVsZW50a2V6emVuIGJlIEdvb2dsZSBGacOza2rDoXZhbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4iQSBmZWxvbGTDoXNob3ogamVsZW50a2V6emVuIGJlIEdvb2dsZS1macOza2rDoXZhbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iODg0Njg4MTQyNDEwNjQ4NDQ0NyI+IkZlbGhhc3puw6Fsw7Nuw6l2IChlLW1haWwgY8OtbSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iNTk1ODAyODM4Mzk1NDczODUyOCI+IkplbHN6w7MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNzEzMDg5MzY5NDc5NTc4NjMwMCI+IkJlamVsZW50a2V6w6lzIjwvc3RyaW5nPgpAQCAtMTIxNiwxMCArMTIyOCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfdW5kb19pbnN0cnVjdGlvbiIgbXNnaWQ9IjQ5NjA5NDQxMzMwNTIyODc0ODQiPiJNw7Nkb3PDrXTDoXM6IEJlw6FsbMOtdMOhc29rICZndDsgQWxrYWxtYXrDoXNvayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWx3YXlzX2FsbG93IiBtc2dpZD0iMzI0MTE4MTE1NDg2OTQ5MzM2OCI+IkVuZ2Vkw6lseWV6w6lzIG1pbmRpZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbmV2ZXJfYWxsb3ciIG1zZ2lkPSI0NDY5OTI3NjU3NzQyNjk2NzMiPiJTb2hhIG5lbSBlbmdlZMOpbHllemVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4iU0lNLWvDoXJ0eWEgZWx0w6F2b2zDrXR2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX3RpdGxlIiBtc2dpZD0iNjIyNzcxMjMxOTIyMzIyNjE4NSI+IlNJTSBrw6FydHlhIGVsdMOhdm9sw610dmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF9tZXNzYWdlIiBtc2dpZD0iMjMzMzE2NDU1OTk3MDk1ODY0NSI+IkEgbW9iaWxow6Fsw7N6YXQgbmVtIGxlc3ogZWzDqXJoZXTFkSwgYW3DrWcgw7pqcmEgbmVtIGluZMOtdGphIGVneSDDqXJ2w6lueWVzIFNJTSBrw6FydHlhIGJlaGVseWV6w6lzZSB1dMOhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiJLw6lzeiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiJTSU0ta8OhcnR5YSBob3p6w6FhZHZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX3RpdGxlIiBtc2dpZD0iMzcxOTY3MDUxMjg4OTY3NDY5MyI+IlNJTSBrw6FydHlhIGhvenrDoWFkdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiJBIG1vYmlsaMOhbMOzemF0aG96IGVsw6lyw6lzw6loZXogaW5kw610c2Egw7pqcmEgYXogZXN6a8O2enQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2ltX3Jlc3RhcnRfYnV0dG9uIiBtc2dpZD0iNDcyMjQwNzg0MjgxNTIzMjM0NyI+IsOaanJhaW5kw610w6FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODM0OTM2MjYyMzA2ODgxOTI5NSI+IklkxZEgYmXDoWxsw610w6FzYSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJWw6FsYXNzem9uIGtpIGVneSBhbGthbG1hesOhc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJBKHopIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4gYWxrYWxtYXrDoXN0IGluZMOtdMOhc2EgbmVtIHNpa2Vyw7xsdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+Ik1lZ29zenTDoXMgYSBrw7Z2ZXRrZXrFkXZlbDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iT3NzemEgbWVnIGEga8O2dmV0a2V6xZEgYWxrYWxtYXrDoXNzYWw6IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iQ3PDunN6dGF0aGF0w7MgZm9nYW50ecO6LiDDiXJpbnRzZSBtZWcgw6lzIHRhcnRzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iQSh6KSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gbcWxdmVsZXRoZXogY3PDunN6dGFzc2EgZmVsZmVsw6kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iQSh6KSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gbcWxdmVsZXRoZXogY3PDunN6dGFzc2EgbGVmZWzDqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJBKHopIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiBtxbF2ZWxldGhleiBjc8O6c3p0YXNzYSBiYWxyYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iQSh6KSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gbcWxdmVsZXRoZXogY3PDunN6dGFzc2Egam9iYnJhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iRmVsb2xkw6FzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJOw6ltw610w6FzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkhhbmcgYmVrYXBjc29sw6FzYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iS2VyZXPDqXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJBIGZlbG9sZMOhc8OhaG96IGjDunp6YSB2w6lnaWcgYXogdWpqw6F0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJDc2F0bGFrb3p0YXNzb24gZWd5IGbDvGxoYWxsZ2F0w7N0LCBoYSBoYWxsYW5pIHN6ZXJldG7DqSBhIGplbHN6w7MgYmV0xbFpdCBmZWxvbHZhc3ZhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlBvbnQuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iUmVuZHN6ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aCBoYW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJWZXpldMOpayBuw6lsa8O8bGkga2lqZWx6xZEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iS8Opc3oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNw6lkaWFraW1lbmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJDc2F0bGFrb3rDoXMgYWRvdHQgZXN6a8O2emjDtnoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJLw6lwZXJuecWRIMOhdGvDvGxkw6lzZSBheiBlc3prw7Z6cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJFc3prw7Z6a2VyZXPDqXPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJCZcOhbGzDrXTDoXNvayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJMZXbDoWxhc3p0w6FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IktlcmVzw6lzLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iS2FwY3NvbMOzZMOhcy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iRWzDqXJoZXTFkSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Ijx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4uIGZlZHbDqW55Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBrw6lwcG9udCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIGJpenRvbnPDoWdvcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iVmV6ZXTDqWsgbsOpbGvDvGxpIGtpamVsesWRIGNzYXRsYWtvenRhdHZhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkV6IGEga2lqZWx6xZEgbWVnamVsZW7DrXTDqXN0IHbDqWdleiBlZ3kgbcOhc2lrIGVzemvDtnrDtm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iS8OpcGVybnnFkSDDoXRrw7xsZMOpc2XigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJDc2F0bGFrb3rDoXMgYSBrw7Z2ZXRrZXrFkWjDtno6IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkvDqXBlcm55xZEgw6F0a8O8bGTDqXNl4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJDc2F0bGFrb3p2YSBhIGvDtnZldGtlesWRaMO2ejogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IlN6w6l0a2FwY3NvbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iU2Vnw6lseWjDrXbDoXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJFbGZlbGVqdGV0dCBtaW50YSI8L3N0cmluZz4KQEAgLTE1MTgsNyArMTUyOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJBZGphIG1lZyDDumpyYSBhIGhlbHllcyBQVUsga8OzZG90LiBBeiBpc23DqXRlbHQgcHLDs2LDoWxrb3rDoXNzYWwgdsOpZ2xlZ2VzZW4gbGV0aWx0amEgYSBTSU0ga8OhcnR5w6F0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJBIFBJTiBrw7Nkb2sgbmVtIGVneWV6bmVrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IlTDumwgc29rIG1pbnRhcmFqem9sw6FzaSBwcsOzYsOhbGtvesOhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJBIGZlbG9sZMOhc2hveiBqZWxlbnRrZXp6ZW4gYmUgR29vZ2xlIEZpw7NrasOhdmFsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJBIGZlbG9sZMOhc2hveiBqZWxlbnRrZXp6ZW4gYmUgR29vZ2xlLWZpw7NrasOhdmFsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4iRmVsaGFzem7DoWzDs27DqXYgKGUtbWFpbCBjw61tKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4iSmVsc3rDsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4iQmVqZWxlbnRrZXrDqXMiPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTksMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iUHLDs2LDoWxqYSDDumpyYSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBtw6Fzb2RwZXJjIG3Dumx2YSI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJQcsOzYsOhbGtvenpvbiBrw6lzxZFiYiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJBIHRlbGplcyBrw6lwZXJuecWRcyBuw6l6ZXRixZFsIHZhbMOzIGtpbMOpcMOpc2hleiBow7p6emEgdWpqw6F0IGEgdGV0ZWrDqXTFkWwgbGVmZWzDqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iQSB0ZWxqZXMga8OpcGVybnnFkXMgbsOpemV0YsWRbCB2YWzDsyBraWzDqXDDqXNoZXogaMO6enphIHVqasOhdCBhIGvDqXBlcm55xZEgdGV0ZWrDqXTFkWwgbGVmZWzDqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkvDqXN6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iw5NyYSBrw7ZyIGFsYWvDuiBjc8O6c3prw6FqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iUGVyYyBrw7ZyIGFsYWvDuiBjc8O6c3prw6FqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLDk3JhIGtpdsOhbGFzenTDoXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iUGVyYyBraXbDoWxhc3p0w6FzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iTmFwb2sgaGF2aSBsZW9zenTDoXNiYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLDiXZlayBsaXN0w6FqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iVsOhbGFzc3phIGtpIGEgaMOzbmFwb3Qgw6lzIGEgbmFwb3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJWw6FsYXNzemEga2kgYXogw6l2ZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IGtpdsOhbGFzenR2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+IkEoeikgPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gw6lydMOpayB0w7Zyw7ZsdmUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKaW5kZXggOTZmZjMxZS4uNDQ0YzFjYSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+ItWE1bjWgtW/1oTVodWj1oDVpdaEwqBQVUssINW41oDVtiA4INWv1aHVtCDVodW+1aXVrCDVqdWr1b4g1bjWgtW21as6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+ItWB1aXWgCBTSU0g1oTVodaA1b/VqCBQVUst1bjVviDVr9W41bLVutW+1aHVriDVpzog1YTVuNaC1b/WhNWh1aPWgNWl1oQgUFVLINWv1bjVpNWoINWh1bXVtiDVodW61aHVr9W41bLVutWl1azVuNaCINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i1YTVuNaC1b/WhNWh1aPWgNWl1oQgUFVLMi3VqGAgU0lNINaE1aHWgNW/1bYg1aHWgNWj1aXVrNWh1aLVodaB1aXVrNW41oIg1bDVodW01aHWgDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiLVgdWh1a3VuNWy1b7VpdaBOiDVhNWr1aHWgdaA1aXWhCBTSU0vUlVJTSDVr9W41bLVutW41oLVtNWoOiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+ItWE1bbVodaBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDWg9W41oDVsdWdINW01avVttW51ocgU0lNLdWrINWh1oDVo9Wl1azVodaD1aHVr9W41oLVtNWoOiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+ItWE1bbVodaBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDWg9W41oDVsdWdINW01avVttW51ocgU0lNLdWrINWh1oDVo9Wl1azVodaD1aHVr9W41oLVtNWoOiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i1YTVuNaC1b/WhNWh1bXVq9W2INWm1aHVttWj1bjVstWrIElEIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1b3VpdaD1aHVr9Wh1bbVodW/1avWgNW41bvVqCDVtNWr1aHVttWh1awgVnBuINWu1aHVvNWh1bXVuNaC1anVtdWh1bYg1b7VpdaA1avVtiDVtNWh1a/VodaA1aTVodWv1asg1avVttW/1aXWgNaG1aXVtdW91avVtjog1Y3VuNW+1bjWgNWh1a/VodW2INWw1aHVvtWl1azVvtWh1a7VttWl1oDVqyDVsNWh1bTVodaAINWl1oDVotaH1acg1bnVutWl1b/WhCDVpyDVodW21bDWgNWh1arVpdW31b8g1azVq9W21as6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ItW01avVodW21aHVrCDVutWh1b3Vv9Wh1bzVq9W2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1b3VpdaD1aHVr9Wh1bbVodW/1avWgNW41bvVqCDVtNWr1aHVttWh1azCoNW61aHVvdW/1aHVvNWrINW+1aXWgNWr1bYg1bTVodWv1aHWgNWk1aHVr9WrINWr1bbVv9Wl1oDWhtWl1bXVvdWr1bY6wqDVjdW41b7VuNaA1aHVr9Wh1bYg1bDVodW+1aXVrNW+1aHVrtW21aXWgNWrINWw1aHVtNWh1oAg1aXWgNWi1ofVp8Kg1bnVutWl1b/WhCDVpyDVodW21bDWgNWh1arVpdW31b8g1azVq9W21as6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLVtNWr1aHVttWh1awg1bDVpdW81aHVr9WhINWn1a/WgNWh1bbVq9W2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i1LnVuNaC1bXVrCDVpyDVv9Wh1azVq9W9INW91aXWg9Wh1a/VodW21aHVv9Wr1oDVuNW71agg1bTVq9Wh1bbVodWsINWw1aXVvNWh1a/VoSDVp9Wv1oDVodW21asg1b7VpdaA1avVtiDVtNWh1a/VodaA1aTVodWv1asg1avVttW/1aXWgNaG1aXVtdW91avVtjog1Y3VuNW+1bjWgNWh1a/VodW2INWu1oDVodWj1oDVpdaA1asg1bDVodW01aHWgCDVpdaA1aLWh9WnINW51brVpdW/1oQg1acg1aHVttWw1oDVodWq1aXVt9W/INWs1avVttWrOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ItW01avVodW21aHVrCDVvtWr1bvVpdWpINWu1aHVvNWh1bXVuNaC1anVtdWh1bbVqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1b3VpdaD1aHVr9Wh1bbVodW/1avWgNW41bvVqCDVtNWr1aHVttWh1awg1b7Vq9W71aXVqSDVrtWh1bzVodW11bjWgtWp1bXVodW2INW+1aXWgNWr1bYg1bTVodWv1aHWgNWk1aHVr9WrINWr1bbVv9Wl1oDWhtWl1bXVvdWr1bY6INWN1bjVvtW41oDVodWv1aHVtiDVsNWh1b7VpdWs1b7VodWu1bbVpdaA1asg1bDVodW01aHWgCDVpdaA1aLWh9WnINW51brVpdW/1oQg1acg1aHVttWw1oDVodWq1aXVt9W/INWs1avVttWrOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ItaD1bjVrdWj1bjWgNWu1aHVr9aB1aXVrCDVvdWh1oDWhNWrINWv1aHVvNWh1b7VodaA1bnVqyDVsNWl1b8iPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+ItS51bjWgtW11awg1acg1b/VodWs1avVvSDVsNWh1b7VpdWs1b7VodWu1avVtiDWhdWj1b/VodWj1bjWgNWu1aXVrCBTdXJmYWNlRmxpbmdlciDWgdWh1a7WgCDVtNWh1a/VodaA1aTVodWv1asg1aPVuNaA1a7VodW81bjWgtW11anVttWl1oDVqDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLVr9Wh1oDVpNWh1awg1bfWgNW71aHVttWh1a/VqyDVutWh1bDVttWh1a/VqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1a/VodaA1aTVodWsINW31oDVu9Wh1bbVodWv1asg1brVodWw1bbVodWv1asg1aLVuNW+1aHVttWk1aHVr9W41oLVqdW11bjWgtW21ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4i1bTVuNaC1b/WhCDVo9W41oDVrtWl1awgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+ItS51bjWgtW11awg1acg1b/VodWs1avVvSDVrtaA1aHVo9aA1avVtiDWhdWj1b/VodWj1bjWgNWu1aXVrCBJbnB1dEZsaW5nZXIg1oHVodWu1oAg1bTVodWv1aHWgNWk1aHVr9WrINWj1bjWgNWu1aHVvNW41oLVtdWp1bbVpdaA1ag6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLVr9Wh1oDVo9Wh1b7VuNaA1aXVrCBXaUZpLdWrINaB1bjWgtaB1aHVpNaA1bjWgtW01agiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1a/VodaA1aPVodW+1bjWgNWl1awg1ocg1bTVq9Wh1bbVodWsIFdpRmkg1oHVuNaC1oHVodWk1oDVq9W51bbVpdaA1avVtjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ItWv1aHVvNWh1b7VodaA1aXVrCBXaWZpLdWrINaB1bjWgtaB1aHVpNaA1bjWgtW01agiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i1LnVuNaC1bXVrCDVpyDVv9Wh1azVq9W9INWw1aHVvtWl1azVvtWh1a7Vq9W2INaD1bjWg9W41a3VpdWsINWx1aHVtdW21aHVttW11bjWgtWp1avCoNWj1azVuNWi1aHVrCDVr9Wh1oDVo9Wh1b7VuNaA1bjWgtW01bbVpdaA1agsINWr1bbVudW61aXVvSDWhdaA1avVttWh1a9gINWx1aHVtdW21agg1ocg1anVpSDVuNaAINWt1bjVvdWh1oPVuNWy1bYg1acg1oXVo9W/1aHVo9W41oDVrtW+1aHVriDVodaA1b/VodWu1bTVodW2INWw1aHVtNWh1oA6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLVsdWh1bXVttWh1aPWgNWl1awg1bHVodW11bbVodW21bXVuNaC1akiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1aLVodaA1bHWgNWh1a3VuNW91bjVviDVsdWh1bXVttWh1aPWgNWl1awg1bHVodW11bbVodW21bXVuNaC1ak6INSx1bXVvSDVqdW41oLVtdWs1b/VvtW41oLVqdW11bjWgtW21agg1bDVttWh1oDVodW+1bjWgNW41oLVqdW11bjWgtW2INWnINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1bHVodW11bbVodW21bXVuNaC1akg1bHVodW11bbVodWj1oDVpdWsINaB1aHVttWv1aHWgdWh1a4g1arVodW01aHVttWh1a9gINWh1bzVodW21oEg1bHVpdaAINWw1aHVvdW/1aHVv9W01aHVtjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+IlNJTSDVsNWh1bLVuNaA1aTVodWv1oHVuNaC1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1bDWgNWh1bTVodW21bbVpdaAINW41oLVstWh1oDVr9Wl1awgU0lNLdWr1bY6INWN1aEg1bfVodW/INW+1b/VodW21aPVodW+1bjWgCDVpzoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLVrNW41oLVvdWh1bbVr9Wh1oDVpdWsINaHINW/1aXVvdWh1bbVr9Wh1oDVpdWsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItS51bjWgtW11awg1acg1b/VodWs1avVvSDVsNWh1b7VpdWs1b7VodWu1avVtiDWhtW41b/VuNWt1oHVq9Wv1bjVviDVrNW41oLVvdWh1bbVr9Wh1oDVpdWsINaHINW/1aXVvdWh1bbVr9Wh1oDVpdWsOiDUsdW11b0g1anVuNaC1bXVrNW/1b7VuNaC1anVtdW41oLVttWoINWw1bbVodaA1aHVvtW41oDVuNaC1anVtdW41oLVtiDVpyDVv9Wh1azVq9W9INWw1aHVvtWl1azVvtWh1a7Vq9W2INaF1aPVv9Wh1aPVuNaA1a7VpdWsINaG1bjVv9W41a3WgdWr1a/VqCDWgdWh1bbVr9Wh1oHVodWuINWq1aHVtNWh1bbVodWvYCDVodW81aHVttaBINWx1aXWgCDVsNWh1b3Vv9Wh1b/VtNWh1bY6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i1aHVttW71aHVv9Wl1awg1oPVuNWt1aHVttaB1bjVsiBMRUQg1oHVuNaC1oHVq9W51agsINWl1oDVoiDWhtW41b/VuNWt1oHVq9Wv1agg1oXVo9W/1aHVo9W41oDVrtW+1bjWgtW0INWnIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4i1Y/VttWh1bXVq9W2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+ItSx1bfVrdWh1b/VodW21oTVodW11avVtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i1LHVtdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+ItSx1bXVvSDVr9W41bbVv9Wh1a/Vv9WoINWk1avVv9Wl1azVuNaCINWw1aHVtNWh1oAg1bDVodW01aHVutWh1b/VodW91a3VodW2INWu1oDVodWj1avWgCDVudWv1aE6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i1YTVuNaC1b/WhNWh1aPWgNWl1oQgUElOINWv1bjVpNWoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i1YTVuNaC1b/WhNWh1aPWgNWl1oQgUFVLLdWoINaHINW21bjWgCBQSU4g1a/VuNWk1agiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDVr9W41aQiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+ItWE1bjWgtW/1oQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLUuNW21b/WgNWl1awg1a7WgNWh1aPVq9aAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4i1YnVsNWh1bvVuNWy1b7VpdaBINWj1bjWgNWu1aHWgNWv1aXVrCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+INWu1oDVodWj1avWgNWoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i1Y/VodaA1aHVrtWl1awiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i1YDVodW01oXVo9W/1aHVo9W41oDVrtWl1awgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPi3VqyDVsNWl1b8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i1Y3VodWw1bjVsiDVotW81bbVodWvOiDVgNW61aXVrMKgJmFtcDsg1brVodWw1aXVrDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i1Y3VodWw1aXWgdaA1aXWhCDVvtWl1oDWhyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t1asg1bDVodW01aHWgDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLVjdWh1bDVpdaB1oDVpdaEINaB1aHVriA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t1asg1bDVodW01aHWgDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLVjdWh1bDVpdaB1oDVpdaEINWx1aHVrWAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LdWrINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+ItWN1aHVsNWl1oHWgNWl1oQg1aHVu2AgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LdWrINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLUsdW61aHVr9W41bLVutWl1awiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i1ZbVuNW/1bjVrdaB1avVryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLUvNW41oLVvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLVgdWh1bXVttWoINW01avVodaB1bbVpdWsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLViNaA1bjVttWl1awiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLVjdWh1bDVpdaB1oDVpdaEYCDVodW61aHVr9W41bLVutWl1azVuNaCINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+ItWE1avVodaB1oDVpdaEINWh1a/VodW21bvVodWv1aHVrNW21aXWgNWoYCDVodaA1b/VodW91aHVttW+1bjVsiDVo9Wh1bLVv9W21aHVotWh1bzVqCDVrNW91aXVrNW41oIg1bDVodW01aHWgDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLUv9Wl1b86Ijwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i1YDVodW01aHVr9Wh1oDVoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoLdWrINWx1aHVtdW21aHVttW11bjWgtWpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLUsdW21azVodaAINWn1a/WgNWh1bYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i1L/VodW/1aHWgNW+1aHVriDVpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+ItWE1aXVpNWr1aEg1aHWgNW/1aHVrtW41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i1YTVq9Wh1bbVodWsINW91aHWgNaE1avVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+ItWA1aXVvNWh1oDVsdWh1a/VpdWsINWn1a/WgNWh1bbVqCDVvdWh1oDWhNWrINW+1oDVoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+ItWI1oDVuNW21b7VuNaC1bQg1aXVtiDVvdWh1oDWhNWl1oAuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLUv9Wh1oDVo9Wh1b7VuNaA1bjWgtW01bbVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+ItSx1bbVu9Wh1b/VpdWsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+ItWN1a/VodW21aHVvtW41oDVuNaC1bQuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLVhNWr1aHVttW41oLVtCDVpy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i1YDVodW91aHVttWl1azVqyDVpyI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+ItWO1aXWgNWh1a7VodWu1a8gIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiDVr9W01b4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDVodW21b7Vv9Wh1bbVoyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i1LHVttWs1aHWgCDWgdW41oLWgdWh1aTWgNW41oLVtNWoINWv1aHVutWh1a/WgdW+1aHVriDVpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLUsdW11b0g1afVr9aA1aHVttWoINaB1bjWgtaB1aHVpNaA1b7VuNaC1bQg1acg1aHVtdWsINW91aHWgNaE1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+ItS31a/WgNWh1bbVqyDVsNWl1bzVodaA1bHVodWv1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4i1YTVq9Wh1bbVuNaC1bQg1acgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LdWr1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLUt9Wv1oDVodW21agg1bDVpdW81aHWgNWx1aHVr9W+1bjWgtW0INWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiLVhNWr1aHWgdW+1aHVriDVpyA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4t1avVtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLUsdW21bvVodW/1aXVrCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i1LHWgNW/1aHVr9Wh1oDVoyDVq9aA1aHVvtWr1bPVodWv1asg1bDVpdW81aHVrdW41b3VodWm1aHVttWjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i1YTVuNW81aHWgdWl1awg1aXVtCDVvdWt1aXVtNWh1bYiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+ItS/1oDVr9Wr1bYg1oPVuNaA1bHVpdaEINW01asg1oPVuNaE1oAg1bjWgtW3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+ItWN1aHVsNWh1bDVodaA1b7VodWu1aXWhCDVvtWl1oDVq9aBINW+1aHWgNWdINWh1bTVotW41bLVu9Wh1a/VodW2INWn1a/WgNWh1bbVq9aBINWk1bjWgtaA1b0g1aPVodWs1bjWgiDVsNWh1bTVodaAOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i1YrVodW/1oDVodW91b8g1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLUutWh1bTVpdaA1asg1ajVttW/1oDVuNaC1anVtdW41oLVtiDVqdW+1aHVv9Wh1a3Vv9Wh1a/Vq9aBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLVkNW41brVpdW21aXWgNWrINWo1bbVv9aA1bjWgtWp1bXVuNaC1bYg1anVvtWh1b/VodWt1b/VodWv1avWgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLUuNW21b/WgNWl1oQg1arVodW01agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLUuNW21b/WgNWl1oQg1oDVuNW61aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i1LHVtNW91aHVqdW+1asg1ajVttW/1oDVuNaC1anVtdWh1bYg1brVodW/1bjWgtWw1aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+ItWP1aHWgNWr1bbVpdaA1asg1oHVodW21a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+ItS41bbVv9aA1aXWhCDVodW01avVvdW2INW41oIg1oXWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4i1LjVttW/1oDVpdaEINW/1aHWgNWr1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4i1LjVttW/1oDVvtWh1a4g1acgPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+INW/1aHWgNaA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDVqdWr1b7VqCDVu9W21bvVvtWh1a4g1aciPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCmluZGV4IDQxN2MxOGUuLjhkMjc5ZDcgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iS2V0aWsgUFVLIHlhbmcgdGVyZGlyaSBkYXJpIDggYW5na2EgYXRhdSBsZWJpaC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iS2FydHUgU0lNIEFuZGEgZGlrdW5jaSBQVUsuIEtldGlra2FuIGtvZGUgUFVLIHVudHVrIG1lbWJ1a2FueWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iS2V0aWtrYW4gUFVLMiB1bnR1ayBtZW1idWthIGthcnR1IFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IkdhZ2FsLCBha3RpZmthbiBLdW5jaSBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJTaXNhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJjb2JhYW4gc2ViZWx1bSBTSU0gdGVya3VuY2kuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iU2lzYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcGVyY29iYWFuIHNlYmVsdW0gU0lNIHRlcmt1bmNpLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iTm9tb3IgUGVuZWxlcG9uIE1hc3VrIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJNZW5naXppbmthbiBwZW1lZ2FuZyBtZW5naWthdCBhbnRhcm11a2EgdGluZ2thdCB0aW5nZ2kgZGFyaSBzdWF0dSBsYXlhbmFuIFZwbi4gVGlkYWsgcGVybmFoIGRpcGVybHVrYW4gb2xlaCBhcGwgbm9ybWFsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJtZW5naWthdCBrZSB3YWxscGFwZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+Ik1lbmdpemlua2FuIHBlbWVnYW5nIG1lbmdpa2F0IGFudGFybXVrYSB0aW5na2F0IHRpbmdnaSBkYXJpIHN1YXR1IHdhbGxwYXBlci4gVGlkYWsgcGVybmFoIGRpcGVybHVrYW4gb2xlaCBhcGwgbm9ybWFsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4ibWVuZ2lrYXQga2UgbGF5YXIgamFyYWsgamF1aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+Ik1lbmdpemlua2FuIHBlbWVnYW5nIG1lbmdpa2F0IGtlIGFudGFybXVrYSB0aW5na2F0IGF0YXMgZGFyaSBsYXlhciBqYXJhayBqYXVoLiBUaWRhayBwZXJuYWggZGlwZXJsdWthbiB1bnR1ayBhcGxpa2FzaSBub3JtYWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4ibWVuZ2lrYXQga2UgbGF5YW5hbiB3aWRnZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iTWVuZ2l6aW5rYW4gcGVtZWdhbmcgbWVuZ2lrYXQgYW50YXJtdWthIHRpbmdrYXQgdGluZ2dpIGRhcmkgc3VhdHUgbGF5YW5hbiB3aWRnZXQuIFRpZGFrIHBlcm5haCBkaXBlcmx1a2FuIG9sZWggYXBsIG5vcm1hbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJiZXJpbnRlcmFrc2kgZGVuZ2FuIGFkbWluIHBlcmFuZ2thdCI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iTWVuZ2l6aW5rYW4gYXBsIG1lbmdndW5ha2FuIGZpdHVyIHRpbmdrYXQgcmVuZGFoIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImJhY2EgYnVmZmVyIGZyYW1lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+Ik1lbmdpemlua2FuIGFwbCBtZW1iYWNhIGtvbnRlbiBwZW55YW5nZ2EgZnJhbWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4ibWVuZ2Frc2VzIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJNZW11bmdraW5rYW4gYXBsaWthc2kgbWVuZ2d1bmFrYW4gZml0dXIgdGluZ2thdCByZW5kYWggSW5wdXRGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ibWVuZ29uZmlndXJhc2kgdGFtcGlsYW4gV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJJemlua2FuIGFwbGlrYXNpIG1lbmdvbmZpZ3VyYXNpIGRhbiB0ZXJodWJ1bmcga2UgdGFtcGlsYW4gV2ktRmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJtZW5nb250cm9sIHRhbXBpbGFuIFdpLUZpIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+Ik1lbXVuZ2tpbmthbiBhcGxpa2FzaSBtZW5ndWJhaCBzZXRlbGFuIGF1ZGlvIGdsb2JhbCwgbWlzYWxueWEgdm9sdW1lIGRhbiBwZW5nZXJhcyBzdWFyYSBtYW5hIHlhbmcgZGlndW5ha2FuIHVudHVrIGtlbHVhcmFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4icmVrYW0gYXVkaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiJNZW11bmdraW5rYW4gYXBsaWthc2kgbWVyZWthbSBhdWRpbyBkZW5nYW4gbWlrcm9mb24uIEl6aW4gaW5pIG1lbXVuZ2tpbmthbiBhcGxpa2FzaSBtZXJla2FtIGF1ZGlvIGthcGFuIHNhamEgdGFucGEga29uZmlybWFzaSBBbmRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4ia29tdW5pa2FzaSBzaW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJNZW5naXppbmthbiBhcGxpa2FzaSBtZW5naXJpbSBwZXJpbnRhaCBrZSBTSU0uIEluaSBzYW5nYXQgYmVyYmFoYXlhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+ImFtYmlsIGdhbWJhciBkYW4gdmlkZW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iTWVtdW5na2lua2FuIGFwbGlrYXNpIG1lbmdhbWJpbCBnYW1iYXIgZGFuIHZpZGVvIGRlbmdhbiBrYW1lcmEuIEl6aW4gaW5pIG1lbXVuZ2tpbmthbiBhcGxpa2FzaSBtZW5nZ3VuYWthbiBrYW1lcmEga2FwYW4gc2FqYSB0YW5wYSBrb25maXJtYXNpIEFuZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4ibm9uYWt0aWZrYW4gTEVEIGluZGlrYXRvciB0cmFuc21pc2kgc2FhdCBrYW1lcmEgZGlndW5ha2FuIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iQmVyYW5kYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiJLZXJqYWFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJMYWlubnlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IlRpZGFrIGFkYSBhcGxpa2FzaSB5YW5nIGRpdGVtdWthbiB1bnR1ayBtZWxpaGF0IGtvbnRhayBpbmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iS2V0aWsga29kZSBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJLZXRpayBrb2RlIFBVSyBkYW4gUElOIGJhcnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IktvZGUgUFVLIjwvc3RyaW5nPgpAQCAtMTE0MiwxNSArMTE1NCwxNSBAQAogICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IkFwbCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IChwcm9zZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSB0ZWxhaCBtZWxhbmdnYXIga2ViaWpha2FuIFN0cmljdE1vZGUgeWFuZyBkaWJlcmxha3VrYW5ueWEgc2VuZGlyaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiJQcm9zZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IHRlbGFoIG1lbGFuZ2dhciBrZWJpamFrYW4gU3RyaWN0TW9kZSB5YW5nIGRpYmVybGFrdWthbiBzZWNhcmEgb3RvbWF0aXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4iQW5kcm9pZCBzZWRhbmcgbWVuaW5na2F0a2FuIHZlcnNpLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfYXBrIiBtc2dpZD0iNzkwNDA0MjY4MjExMTUyNjE2OSI+Ik1lbmdvcHRpbWFsa2FuIGFwbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGRhcmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19zdGFydGluZ19hcHBzIiBtc2dpZD0iNDUxNDY0NTE2MzQ2OTI2NzEzIj4iTWVtdWxhaSBhcGwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfYXBrIiBtc2dpZD0iNzkwNDA0MjY4MjExMTUyNjE2OSI+Ik1lbmdvcHRpbWFsa2FuIGFwbGlrYXNpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZGFyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3N0YXJ0aW5nX2FwcHMiIG1zZ2lkPSI0NTE0NjQ1MTYzNDY5MjY3MTMiPiJNZW11bGFpIGFwbGlrYXNpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2NvbXBsZXRlIiBtc2dpZD0iMTQwNTk1NDc1NDExMjk5OTIyOSI+Ik1lbnllbGVzYWlrYW4gYm9vdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uIiBtc2dpZD0iOTA4NzA2Mzk4NTc3NjYyNjE2NiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiUxJHM8L3hsaWZmOmc+IGJlcmphbGFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbl9kZXRhaWwiIG1zZ2lkPSIxNzIxNjgxNzQxNjE3ODk4ODY1Ij4iU2VudHVoIHVudHVrIGJlcmFsaWgga2UgYXBsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RpdGxlIiBtc2dpZD0iNzE1MzE2NzA4NTQwMzI5ODE2OSI+IkJlcmFsaWggYXBsPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90ZXh0IiBtc2dpZD0iNzAyMjYzMTkyNDUzNDQwNjQwMyI+IkFwbCBsYWluIHN1ZGFoIGJlcmphbGFuIGRhbiBoYXJ1cyBkaWhlbnRpa2FuIGFnYXIgQW5kYSBkYXBhdCBtZW11bGFpIHlhbmcgYmFydS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2FjdGlvbiIgbXNnaWQ9IjQ5MzEyOTE3MjIzODU2NjI4MiI+IktlbWJhbGkga2U8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjA4MjA5NDI3NTU4MDM1ODA0OSI+IkphbmdhbiBtZW11bGFpIGFwbCBiYXJ1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDgyMDk0Mjc1NTgwMzU4MDQ5Ij4iSmFuZ2FuIG1lbXVsYWkgYXBsaWthc2kgYmFydS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2FjdGlvbiIgbXNnaWQ9IjU0NzI3NTY5MjY5NDU0NDA3MDYiPiJNdWxhaSA8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IkhlbnRpa2FuIGFwbCBsYW1hIHRhbnBhIG1lbnlpbXBhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZW5kVGV4dCIgbXNnaWQ9IjUyMDk4NzQ1NzE5NTk0NjkxNDIiPiJQaWxpaCB0aW5kYWthbiB1bnR1ayB0ZWtzIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlBpbGloIGFwbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IlRpZGFrIGRhcGF0IG1lbHVuY3Vya2FuIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJCZXJiYWdpIGRlbmdhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJCZXJiYWdpIGRlbmdhbiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IkdhZ2FuZyBnZXNlci4gU2VudHVoICZhbXA7IHRhaGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJHZXNlciBrZSBhdGFzIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJHZXNlciBrZSBiYXdhaCB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iR2VzZXIga2Uga2lyaSB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ikdlc2VyIGtlIGthbmFuIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Ik1lbWJ1a2EgZ2VtYm9rIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTZW55YXAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU3VhcmEgaGlkdXAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlRlbHVzdXJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iR2VzZWsgdW50dWsgbWVtYnVrYSBrdW5jaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUGFzYW5nIGhlYWRzZXQgdW50dWsgbWVuZGVuZ2FyIHRvbWJvbCBzYW5kaSB5YW5nIGRpdWNhcGthbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJUaXRpay4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTaXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkF1ZGlvIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iTGF5YXIgbmlya2FiZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iU2VsZXNhaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IktlbHVhcmFuIG1lZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJTYW1idW5na2FuIGtlIHBlcmFuZ2thdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IlRyYW5zbWlzaSBsYXlhciBrZSBwZXJhbmdrYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJNZW5lbHVzdXJpIHBlcmFuZ2thdOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IlNldGVsYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iUHV0dXNrYW4gc2FtYnVuZ2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+Ik1lbWluZGFpLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iTWVueWFtYnVuZy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iVGVyc2VkaWEiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJIYW1wYXJhbiAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIGFtYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkxheWFyIG5pcmthYmVsIHRlcnNhbWJ1bmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iTGF5YXIgaW5pIGRpdGFtcGlsa2FuIGRpIHBlcmFuZ2thdCBsYWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IlRyYW5zbWlzaSBsYXlhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Ik1lbnlhbWJ1bmcga2UgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iVHJhbnNtaXNpIGxheWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJUZXJzYW1idW5nIGtlIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJQdXR1c2thbiBzYW1idW5nYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IlBhbmdnaWxhbiBkYXJ1cmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iTHVwYSBQb2xhPyI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1OSwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiJDb2JhIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGRldGlrIGxhZ2kiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iQ29iYSBsYWdpIG5hbnRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+Ikdlc2VrIGtlIGJhd2FoIHVudHVrIGtlbHVhciBkYXJpIGxheWFyIHBlbnVoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+Ikdlc2VrIGRhcmkgYXRhcyBrZSBiYXdhaCB1bnR1ayBrZWx1YXIgZGFyaSBsYXlhciBwZW51aC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IlNlbGVzYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJQZW5nZ2VzZXIgcHV0YXIgamFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJQZW5nZ2VzZXIgcHV0YXIgbWVuaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iUGlsaWggamFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iUGlsaWggbWVuaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+Iktpc2kgaGFyaSBwYWRhIGJ1bGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iRGFmdGFyIHRhaHVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJQaWxpaCBidWxhbiBkYW4gaGFyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlBpbGloIHRhaHVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBkaXBpbGloIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gZGloYXB1cyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKaW5kZXggZDJkYmZjMy4uZDBmMTMxNCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJEaWdpdGEgdW4gUFVLIGZvcm1hdG8gZGEgYWxtZW5vIDggbnVtZXJpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJMYSBTSU0gw6ggYmxvY2NhdGEgdHJhbWl0ZSBQVUsuIERpZ2l0YSBpbCBjb2RpY2UgUFVLIHBlciBzYmxvY2NhcmxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkRpZ2l0YSBpbCBQVUsyIHBlciBzYmxvY2NhcmUgbGEgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+Ik9wZXJhemlvbmUgbm9uIHJpdXNjaXRhOyBhdHRpdmEgYmxvY2NvIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IkhhaSBhbmNvcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2byBhIGRpc3Bvc2l6aW9uZSBwcmltYSBjaGUgbGEgU0lNIHZlbmdhIGJsb2NjYXRhLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IkhhaSBhbmNvcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBhIGRpc3Bvc2l6aW9uZSBwcmltYSBjaGUgbGEgU0lNIHZlbmdhIGJsb2NjYXRhLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSUQgY2hpYW1hbnRlIGluIGVudHJhdGEiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IkNvbnNlbnRlIGxcJ2Fzc29jaWF6aW9uZSBhbGxcJ2ludGVyZmFjY2lhIHByaW5jaXBhbGUgZGkgdW4gc2Vydml6aW8gVlBOLiBOb24gZG92cmViYmUgbWFpIGVzc2VyZSBuZWNlc3NhcmlvIHBlciBsZSBub3JtYWxpIGFwcGxpY2F6aW9uaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iYXNzb2NpYXppb25lIGEgc2ZvbmRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJDb25zZW50ZSBsXCdhc3NvY2lhemlvbmUgZGkgdW5vIHNmb25kbyBhbGxcJ2ludGVyZmFjY2lhIHByaW5jaXBhbGUuIE5vbiBkb3ZyZWJiZSBtYWkgZXNzZXJlIG5lY2Vzc2FyaWEgcGVyIGxlIG5vcm1hbGkgYXBwbGljYXppb25pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iY29sbGVnYSBhIHVuIGRpc3BsYXkgcmVtb3RvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iQ29uc2VudGUgYWwgdGl0b2xhcmUgZGkgY29sbGVnYXJzaSBhbGxcJ2ludGVyZmFjY2lhIGRpIHByaW1vIGxpdmVsbG8gZGkgdW4gZGlzcGxheSByZW1vdG8uIE5vbiBkb3ZyZWJiZSBlc3NlcmUgbWFpIG5lY2Vzc2FyaWEgcGVyIGxlIG5vcm1hbGkgYXBwbGljYXppb25pLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ImFzc29jaWF6aW9uZSBhIHVuIHNlcnZpemlvIHdpZGdldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJDb25zZW50ZSBsXCdhc3NvY2lhemlvbmUgYWxsXCdpbnRlcmZhY2NpYSBwcmluY2lwYWxlIGRpIHVuIHNlcnZpemlvIHdpZGdldC4gTm9uIGRvdnJlYmJlIG1haSBlc3NlcmUgbmVjZXNzYXJpbyBwZXIgbGUgbm9ybWFsaSBhcHBsaWNhemlvbmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJhemlvbmUgY29uIHVuIGFtbWluaXN0cmF0b3JlIGRpc3Bvc2l0aXZvIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJDb25zZW50ZSBhbGxcJ2FwcGxpY2F6aW9uZSBsXCd1dGlsaXp6byBkaSBmdW56aW9uaSBkaSBiYXNzbyBsaXZlbGxvIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImxldHR1cmEgYnVmZmVyIGRpIGZyYW1lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IkNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIGxlZ2dlcmUgaSBjb250ZW51dGkgZGVsIGJ1ZmZlciBkaSBmcmFtZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJhY2Nlc3NvIGEgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIHV0aWxpenphcmUgZnVuemlvbmkgZGkgYmFzc28gbGl2ZWxsbyBJbnB1dEZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmF6aW9uZSBkaSBzY2hlcm1pIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iQ29uc2VudGUgYWxsXCdhcHBsaWNhemlvbmUgZGkgY29uZmlndXJhcmUgc2NoZXJtaSBXaS1GaSBlIGRpIGNvbGxlZ2Fyc2kgYSBlc3NpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iY29udHJvbGxvIGRpIHNjaGVybWkgV2ktRmkiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4iQ29uc2VudGUgYWxsXCdhcHBsaWNhemlvbmUgZGkgbW9kaWZpY2FyZSBsZSBpbXBvc3RhemlvbmkgYXVkaW8gZ2xvYmFsaSwgY29tZSBpbCB2b2x1bWUgZSBxdWFsZSBhbHRvcGFybGFudGUgdmllbmUgdXRpbGl6emF0byBwZXIgbFwndXNjaXRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4icmVnaXN0cmF6aW9uZSBhdWRpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IkNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIHJlZ2lzdHJhcmUgYXVkaW8gY29uIGlsIG1pY3JvZm9uby4gUXVlc3RhIGF1dG9yaXp6YXppb25lIGNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIHJlZ2lzdHJhcmUgYXVkaW8gaW4gcXVhbHNpYXNpIG1vbWVudG8gc2VuemEgbGEgdHVhIGNvbmZlcm1hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4iY29tdW5pY2F6aW9uZSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJDb25zZW50ZSBhbGxcJ2FwcCBkaSBpbnZpYXJlIGNvbWFuZGkgYWxsYSBTSU0uIFF1ZXN0byDDqCBtb2x0byBwZXJpY29sb3NvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+ImFjcXVpc2l6aW9uZSBkaSBmb3RvIGUgdmlkZW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iQ29uc2VudGUgYWxsXCdhcHBsaWNhemlvbmUgZGkgc2NhdHRhcmUgZm90byBlIHJpcHJlbmRlcmUgdmlkZW8gY29uIGxhIGZvdG9jYW1lcmEuIFF1ZXN0YSBhdXRvcml6emF6aW9uZSBjb25zZW50ZSBhbGxcJ2FwcGxpY2F6aW9uZSBkaSB1dGlsaXp6YXJlIGxhIGZvdG9jYW1lcmEgaW4gcXVhbHNpYXNpIG1vbWVudG8gc2VuemEgbGEgdHVhIGNvbmZlcm1hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImRpc2FiaWxpdGF6aW9uZSBkZWwgTEVEIGRpIGluZGljYXppb25lIGRlbGxhIHRyYXNtaXNzaW9uZSBxdWFuZG8gbGEgZm90b2NhbWVyYSDDqCBpbiB1c28iPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiJDYXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+Ikxhdm9ybyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iQWx0cm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4iTmVzc3VuYSBhcHBsaWNhemlvbmUgdHJvdmF0YSBwZXIgbGEgdmlzdWFsaXp6YXppb25lIGRpIHF1ZXN0byBjb250YXR0by4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJbnNlcmlzY2kgaWwgY29kaWNlIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+Ikluc2VyaXNjaSBpbCBQVUsgZSBpbCBudW92byBjb2RpY2UgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDb2RpY2UgUFVLIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iTWFpdXNjb2xvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iSW52aW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJTY2VnbGkgdW5cJ2FwcGxpY2F6aW9uZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IkltcG9zc2liaWxlIGF2dmlhcmUgbFwnYXBwbGljYXppb25lIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJDb25kaXZpZGkgY29uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkNvbmRpdmlkaSBjb24gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJNYW5pZ2xpYSBzY29ycmV2b2xlLiBUb2NjYSBlIHRpZW5pIHByZW11dG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlN1IHBlciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iR2nDuSBwZXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkEgc2luaXN0cmEgcGVyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iQSBkZXN0cmEgcGVyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IlNibG9jY2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iRm90b2NhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTaWxlbnppb3NvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkF1ZGlvIGF0dGl2YXRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJSaWNlcmNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iRmFpIHNjb3JyZXJlIHBlciBzYmxvY2NhcmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IkNvbGxlZ2EgZ2xpIGF1cmljb2xhcmkgcGVyIGFzY29sdGFyZSBsYSBwcm9udW5jaWEgZGVpIHRhc3RpIHByZW11dGkgcGVyIGxhIHBhc3N3b3JkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlB1bnRvLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlNpc3RlbWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkF1ZGlvIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iVmlzdWFsaXp6YXppb25lIHdpcmVsZXNzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IkZpbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJVc2NpdGEgbWVkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IkNvbm5ldHRpIGFsIGRpc3Bvc2l0aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iVHJhc21ldHRpIHNjaGVybW8gYWwgZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJSaWNlcmNhIGRpIGRpc3Bvc2l0aXZpIGluIGNvcnNv4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iSW1wb3N0YXppb25pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkRpc2Nvbm5ldHRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlJpY2VyY2EgaW4gY29yc28uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJDb25uZXNzaW9uZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iRGlzcG9uaWJpbGUiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJPdmVybGF5IG4uIDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+IHggPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIG9wemlvbmUgc2ljdXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJJbCBkaXNwbGF5IHdpcmVsZXNzIMOoIGNvbm5lc3NvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IlF1ZXN0YSBzY2hlcm1hdGEgw6ggbW9zdHJhdGEgc3UgdW4gYWx0cm8gZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iVHJhc21pc3Npb25lIHNjaGVybW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJDb2xsZWdhbWVudG8gYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4gaW4gY29yc28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJUcmFzbWlzc2lvbmUgc2NoZXJtbyBhdHRpdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IkNvbGxlZ2F0byBhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJEaXNjb25uZXR0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iQ2hpYW1hdGEgZGkgZW1lcmdlbnphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iU2VxdWVuemEgZGltZW50aWNhdGEiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlJpcHJvdmEgcGnDuSB0YXJkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJTY29ycmkgZGFsbFwnYWx0byB2ZXJzbyBpbCBiYXNzbyBwZXIgdXNjaXJlIGRhbGxhIG1vZGFsaXTDoCBzY2hlcm1vIGludGVyby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkZpbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJEaXNwb3NpdGl2byBkaSBzY29ycmltZW50byBjaXJjb2xhcmUgcGVyIGxlIG9yZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iRGlzcG9zaXRpdm8gZGkgc2NvcnJpbWVudG8gY2lyY29sYXJlIHBlciBpIG1pbnV0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJTZWxlemlvbmEgbGUgb3JlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iU2VsZXppb25hIGkgbWludXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJHcmlnbGlhIGRpIGdpb3JuaSBwZXIgbWVzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IkVsZW5jbyBkZWdsaSBhbm5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJTZWxlemlvbmEgbWVzZSBlIGdpb3JubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlNlbGV6aW9uYSBhbm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+IkVsZW1lbnRvIHNlbGV6aW9uYXRvOiA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBlbGltaW5hdG8iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCmluZGV4IDUxZjM4ODkuLmUyZWEzY2EgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMjMsMTggKzIzLDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJieXRlU2hvcnQiIG1zZ2lkPSI4MzQwOTczODkyNzQyMDE5MTAxIj4iQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtpbG9ieXRlU2hvcnQiIG1zZ2lkPSI1OTczNzg5NzgzNTA0NzcxODc4Ij4iS0IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWdhYnl0ZVNob3J0IiBtc2dpZD0iNjM1NTg1MTU3Njc3MDQyODkyMiI+Ik1CIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2lnYWJ5dGVTaG9ydCIgbXNnaWQ9IjMyNTk4ODI0NTUyMTIxOTMyMTQiPiJHQuKAj+KAjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdpZ2FieXRlU2hvcnQiIG1zZ2lkPSIzMjU5ODgyNDU1MjEyMTkzMjE0Ij4i4oCPR0LigI/igI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXJhYnl0ZVNob3J0IiBtc2dpZD0iMjMxNjEzMDE4MTU5MTg2OTYyIj4iVEIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXRhYnl0ZVNob3J0IiBtc2dpZD0iNTYzNzgxNjY4MDE0NDk5MDIxOSI+IlBCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmlsZVNpemVTdWZmaXgiIG1zZ2lkPSI5MTY0MjkyNzkxNTAwNTMxOTQ5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkczwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iVU5JVCI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1bnRpdGxlZCIgbXNnaWQ9IjQ2Mzg5NTY5NTQ4NTI3ODI1NzYiPiImZ3Q715zXnNeQINeb15XXqteo16ombHQ7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW50aXRsZWQiIG1zZ2lkPSI0NjM4OTU2OTU0ODUyNzgyNTc2Ij4i4oCPJmd0O9ec15zXkCDXm9eV16rXqNeqJmx0OyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzIiBtc2dpZD0iNzg5OTgyOTUxNjA0ODgxMzIzNyI+Ii4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzX3R3b19kb3RzIiBtc2dpZD0iMTIyODA3ODk5NDg2NjAzMDczNiI+IuKApSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVtcHR5UGhvbmVOdW1iZXIiIG1zZ2lkPSI3Njk0MDYzMDQyMDc5Njc2NTE3Ij4iKNeQ15nXnyDXnteh16TXqCDXmNec16TXldefKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVua25vd25OYW1lIiBtc2dpZD0iMjI3NzU1NjU0Njc0Mjc0NjUyMiI+IijXnNeQINeZ15PXldeiKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiLXk9eV15DXqCDXp9eV15zXmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRNc2lzZG5BbHBoYVRhZyIgbXNnaWQ9IjI4NTA4ODk3NTQ5MTk1ODQ2NzQiPiJNU0lTRE4xIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibW1pRXJyb3IiIG1zZ2lkPSI1MTU0NDk5NDU3NzM5MDUyOTA3Ij4i15HXoteZ15Qg15HXl9eZ15HXldeoINeQ15Ug16fXldeTIE1NSSDXnNeQINeX15XXp9eZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+IuKAj9eR16LXmdeUINeR15fXmdeR15XXqCDXkNeVINen15XXkyBNTUkg15zXkCDXl9eV16fXmS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtbWlGZG5FcnJvciIgbXNnaWQ9IjUyMjQzOTgyMTYzODUzMTY0NzEiPiLXlNek16LXldec15Qg157XldeS15HXnNeqINec157Xodek16jXmSDXl9eZ15XXkiDXp9eR15XXoteZ150g15HXnNeR15MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWQiIG1zZ2lkPSI4MTQ3Mjc4MzQ2NDE0NzE0MzE1Ij4i15TXqdeZ16jXldeqINeU15XXpNei15wuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWRGb3IiIG1zZ2lkPSI2ODU2MjI4MTQwNDUzNDcxMDQxIj4i15TXqdeZ16jXldeqINeU15XXpNei15wg16LXkdeV16g6Ijwvc3RyaW5nPgpAQCAtNDIsMTQgKzQyLDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlUmVnaXN0ZXJlZCIgbXNnaWQ9IjYyNzUwMTkwODI1OTgxMDI0OTMiPiLXlNeU16jXqdee15Qg15HXldem16LXlCDXkdeU16bXnNeX15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiLXlNee15fXmden15Qg15HXldem16LXlCDXkdeU16bXnNeX15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRJbmNvcnJlY3QiIG1zZ2lkPSI3NjEyMjA4ODM5NDUwMTI4NzE1Ij4i16HXmdeh157XlCDXqdeS15XXmdeULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUNvbXBsZXRlIiBtc2dpZD0iODIzMjUyNzQ5NTQxMTY5ODM1OSI+Ik1NSSDXlNeV16nXnNedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhZFBpbiIgbXNnaWQ9IjkwMTUyNzc2NDU1NDY3MTAwMTQiPiLXlC1QSU4g15TXmdep158g16nXlNen15zXk9eqINep15LXldeZLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhZFB1ayIgbXNnaWQ9IjU0ODcyNTc2NDcwODExMzIyMDEiPiLXlC1QVUsg16nXlNen15zXk9eqINep15LXldeZLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1pc21hdGNoUGluIiBtc2dpZD0iNjA5Mzc5MDU0NDk2ODYzNDE5Ij4i16fXldeT15kg15QtUElOINep15TXp9ec15PXqiDXnNeQINeq15XXkNee15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUGluIiBtc2dpZD0iMzg1MDAxODQ0NTE4NzQ3NTM3NyI+IteU16fXnNeTIFBJTiDXqdeQ15XXqNeb15UgNCDXoteTIDgg16HXpNeo15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IteU16fXnNeTIFBVSyDXkdeQ15XXqNeaIDgg157Xodek16jXmdedINeQ15Ug15nXldeq16guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+Iteb16jXmNeZ16Eg15QtU0lNINeg16LXldecINeR15DXntem16LXldeqIFBVSy4g15TXp9ec15Mg15DXqiDXp9eV15MgUFVLINeb15PXmSDXnNeR15jXnCDXkNeqINeg16LXmdec16rXlS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLXlNen15zXkyBQVUsyINeb15PXmSDXnNeR15jXnCDXkNeqINeX16HXmdee16og15vXqNeY15nXoSDXlC1TSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4i4oCPTU1JINeU15XXqdec150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUGluIiBtc2dpZD0iOTAxNTI3NzY0NTU0NjcxMDAxNCI+IuKAj9eULVBJTiDXlNeZ16nXnyDXqdeU16fXnNeT16og16nXkteV15kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUHVrIiBtc2dpZD0iNTQ4NzI1NzY0NzA4MTEzMjIwMSI+IuKAj9eULVBVSyDXqdeU16fXnNeT16og16nXkteV15kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWlzbWF0Y2hQaW4iIG1zZ2lkPSI2MDkzNzkwNTQ0OTY4NjM0MTkiPiLigI/Xp9eV15PXmSDXlC1QSU4g16nXlNen15zXk9eqINec15Ag16rXldeQ157XmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4i4oCP15TXp9ec15MgUElOINep15DXldeo15vXlSA0INei15MgOCDXodek16jXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4i4oCP15TXp9ec15MgUFVLINeR15DXldeo15ogOCDXnteh16TXqNeZ150g15DXlSDXmdeV16rXqC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i4oCP15vXqNeY15nXoSDXlC1TSU0g16DXoteV15wg15HXkNee16bXoteV16ogUFVLLiDXlNen15zXkyDXkNeqINen15XXkyBQVUsg15vXk9eZINec15HXmNecINeQ16og16DXoteZ15zXqteVLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IuKAj9eU16fXnNeTIFBVSzIg15vXk9eZINec15HXmNecINeQ16og15fXodeZ157XqiDXm9eo15jXmdehINeULVNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiLigI/XnNeQINeU16bXnNeX16ouINeU16TXotecINeg16LXmdec16ogU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i4oCP16DXldeq16gg15zXmiDXoNeZ16HXmdeV158gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INec16TXoNeZINeg16LXmdec16og15vXqNeY15nXoSDXlC1TSU0uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4i4oCP16DXldeq16jXlSDXnNeaIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINec16TXoNeZINeg16LXmdec16og15vXqNeY15nXoSDXlC1TSU0uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLXlteZ15TXldeZINee16rXp9ep16gg16nXnCDXqdeZ15fXlCDXoNeb16DXodeqIjwvc3RyaW5nPgpAQCAtNTgsNyArNjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iQ3dNbWkiIG1zZ2lkPSI5MTI5Njc4MDU2Nzk1MDE2ODY3Ij4i16nXmdeX15Qg157Xnteq15nXoNeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQmFNbWkiIG1zZ2lkPSI0NTUxOTMwNjc5MjY3NzA1ODEiPiLXl9eh15nXnteqINep15nXl9eV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJQd2RNbWkiIG1zZ2lkPSI3MDQzNzE1Njg3OTA1MjU0MTk5Ij4i16nXmdeg15XXmSDXodeZ16HXnteUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+Itep16DXlCDXkNeqINeULVBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlBpbk1taSIgbXNnaWQ9IjMxMTMxMTc3ODAzNjExOTAzMDQiPiLigI/Xqdeg15Qg15DXqiDXlC1QSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbmlwTW1pIiBtc2dpZD0iMzExMDUzNDY4MDU1Nzg1NzE2MiI+Itee16HXpNeoINee16rXp9ep16gg16DXntem15AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+Itee16HXpNeoINee16rXp9ep16gg15fXodeV15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJUaHJlZVdDTW1pIiBtc2dpZD0iOTA1MTA0NzE3MDMyMTE5MDM2OCI+Itep15nXl9eUINei150g16nXnNeV16nXlCDXntep16rXqtek15nXnSI8L3N0cmluZz4KQEAgLTc2LDEwICs4MSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRW1lcmdlbmN5IiBtc2dpZD0iNjU4MTE2Mzc3OTA3MjgzMzY2NSI+Itep15nXqNeV16og15fXmdeo15XXnSDXl9eh15XXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Ob3JtYWwiIG1zZ2lkPSI0OTUzODY3MDExMzg5NzUwNjczIj4i15TXqdeZ16jXldeqINeU16fXldec15kg15fXodeV150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsVm9pY2UiIG1zZ2lkPSIzMzk2OTYzNjUyMTA4MTUxMjYwIj4i15vXnCDXlNep15nXqNeV16rXmdedINeU16fXldec15nXmdedINeX16HXldee15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25TbXMiIG1zZ2lkPSI4MzE0MzUyMzI3NDYxNjM4ODk3Ij4i16nXmdeo15XXqiBTTVMg15fXodeV150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+IuKAj9ep15nXqNeV16ogU01TINeX16HXldedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlRGF0YSIgbXNnaWQ9Ijk5NjYzNjQ4NzEwNjE3MTMyMCI+Itep15nXqNeV16rXmSDXlNen15XXnC/XoNeq15XXoNeZ150g15fXodeV157XmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+Itep15nXqNeV16rXmSDXp9eV15wvU01TINeX16HXldee15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGwiIG1zZ2lkPSI1NjQzMDI4MjY0NDY2MDkyODIxIj4i15vXnCDXlNep15nXqNeV16rXmdedINep15wg16fXldecL9eg16rXldeg15nXnS9TTVMg15fXodeV157XmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IuKAj9ep15nXqNeV16rXmSDXp9eV15wvU01TINeX16HXldee15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGwiIG1zZ2lkPSI1NjQzMDI4MjY0NDY2MDkyODIxIj4i4oCP15vXnCDXlNep15nXqNeV16rXmdedINep15wg16fXldecL9eg16rXldeg15nXnS9TTVMg15fXodeV157XmdedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1ZvaWNlIiBtc2dpZD0iMTI1ODM5MzgxMjMzNTI1ODAxOSI+Ikdvb2dsZSBWb2ljZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGEiIG1zZ2lkPSI4NzI0NTY3ODIwNzc5Mzc4OTMiPiJHb29nbGUgRGF0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0ZBWCIgbXNnaWQ9IjU1NjY2MjQ5OTg4NDA0ODY0NzUiPiLXpNen16EiPC9zdHJpbmc+CkBAIC0xMTQsNyArMTE5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiLXnNeQINeg15nXqtefINec157XpteV15Ag15DXqiDXm9eq15XXkdeqINeU15DXqteoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiLXodeb15nXnteqINeQ15nXnteV16og15TXkNeq16gg15DXmdeg15Qg16DXqtee15vXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+IteU15DXmdee15XXqiDXoNeb16nXnC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JQcm94eUF1dGgiIG1zZ2lkPSIxNzg4MjA3MDEwNTU5MDgxMzMxIj4i15TXkNeZ157XldeqINeT16jXmiDXqdeo16og15QtUHJveHkg16DXm9ep15wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUHJveHlBdXRoIiBtc2dpZD0iMTc4ODIwNzAxMDU1OTA4MTMzMSI+IuKAj9eU15DXmdee15XXqiDXk9eo15og16nXqNeqINeULVByb3h5INeg15vXqdecLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckNvbm5lY3QiIG1zZ2lkPSI4NzE0MjczMjM2MzY0NjQwNTQ5Ij4i15zXkCDXoNeZ16rXnyDXnNeU16rXl9eR16gg15zXqdeo16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9ySU8iIG1zZ2lkPSIyMzQwNTU4MTk3NDg5MzAyMTg4Ij4i15zXkCDXoNeZ16rXnyDXnNeq16fXqdeoINei150g15TXqdeo16ouINeg16HXlCDXqdeV15Eg157XkNeV15fXqCDXmdeV16rXqC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUaW1lb3V0IiBtc2dpZD0iNDc0MzQwMzcwMzc2Mjg4Mzk1NCI+IteX15zXoyDXlNeW157XnyDXlNen16bXldeRINep15wg15TXl9eZ15HXldeoINec16nXqNeqLiI8L3N0cmluZz4KQEAgLTE2OCwxMSArMTczLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4i157XpteRINeY15nXodeUINeb15HXldeZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i157XpteRINeR15jXldeXIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4i157Xoteo15vXqiBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4i4oCP157Xoteo15vXqiBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Nvc3RNb25leSIgbXNnaWQ9IjU0Mjk4MDgyMTc4NjE0NjA0MDEiPiLXqdeZ16jXldeq15nXnSDXqdei15XXnNeZ150g15vXodejIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jb3N0TW9uZXkiIG1zZ2lkPSIzMjkzMzAxOTAzNDA5ODY5NDk1Ij4i15HXmdem15XXoiDXpNei15XXnNeV16og16nXotep15XXmdeV16og15zXotec15XXqiDXnNeaINeb16HXoy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4i15TXlNeV15PXoteV16og16nXnNeaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19tZXNzYWdlcyIgbXNnaWQ9Ijc4MjE5OTkwNzEwMDM2OTkyMzYiPiLXp9eo15nXkNeUINeV15vXqteZ15HXlCDXkdeU15XXk9ei15XXqiDXlC1TTVMsINeU15PXldeQXCLXnCDXldeU15XXk9ei15XXqiDXkNeX16jXldeqINep15zXmi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21lc3NhZ2VzIiBtc2dpZD0iNzgyMTk5OTA3MTAwMzY5OTIzNiI+IuKAj9en16jXmdeQ15Qg15XXm9eq15nXkdeUINeR15TXldeT16LXldeqINeULVNNUywg15TXk9eV15BcItecINeV15TXldeT16LXldeqINeQ15fXqNeV16og16nXnNeaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9wZXJzb25hbEluZm8iIG1zZ2lkPSIzNTE5MTYzMTQxMDcwNTMzNDc0Ij4i15TXnteZ15PXoiDXlNeQ15nXqdeZINep15zXmiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGVyc29uYWxJbmZvIiBtc2dpZD0iODQyNjQ1MzEyOTc4ODg2MTMzOCI+IteS15nXqdeUINeZ16nXmdeo15Qg15zXnteZ15PXoiDXotec15nXmiwg15TXnteQ15XXl9eh158g15HXm9eo15jXmdehINeQ15nXqSDXlNen16nXqCDXqdec15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NvY2lhbEluZm8iIG1zZ2lkPSI1Nzk5MDk2NjIzNDEyMDQzNzkxIj4i157XmdeT16Ig16LXnCDXlNen16nXqNeZ150g15TXl9eR16jXqteZ15nXnSDXqdec15oiPC9zdHJpbmc+CkBAIC0xODIsNyArMTg3LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9uZXR3b3JrIiBtc2dpZD0iNTgwODk4MzM3NzcyNzEwOTgzMSI+Iteq16fXqdeV16jXqiDXqNep16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX25ldHdvcmsiIG1zZ2lkPSI0NDc4Mjk5NDEzMjQxODYxOTg3Ij4i15TXqNep15DXqiDXkteZ16nXlCDXnNeq15vXldeg15XXqiDXqNep16og16nXldeg15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjE1ODU0MDM1NDQxNjIxMjgxMDkiPiJCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSI1NjI1Mjg4NTc3MTY0MjgyMzkxIj4i15LXmdep15Qg15zXnteb16nXmdeo15nXnSDXldec16jXqdeq15XXqiDXkdeQ157Xptei15XXqiBCbHVldG9vdGguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iNTYyNTI4ODU3NzE2NDI4MjM5MSI+IuKAj9eS15nXqdeUINec157Xm9ep15nXqNeZ150g15XXnNeo16nXqteV16og15HXkNee16bXoteV16ogQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hdWRpb1NldHRpbmdzIiBtc2dpZD0iODMyOTI2MTY3MDE1MTg3MTIzNSI+IteU15LXk9eo15XXqiDXkNeV15PXmdeVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hdWRpb1NldHRpbmdzIiBtc2dpZD0iMjY0MTUxNTQwMzM0NzU2ODEzMCI+Itep15nXoNeV15kg15TXkteT16jXldeqINeU15DXldeT15nXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWZmZWN0c0JhdHRlcnkiIG1zZ2lkPSI2MjA5MjQ2NjUzNDI0Nzk4MDMzIj4i15TXqdek16LXlCDXotecINeU16HXldec15zXlCI8L3N0cmluZz4KQEAgLTIyOCw4ICsyMzMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Rpc3BsYXkiIG1zZ2lkPSI0Mjc5OTA5Njc2MDM2NDAyNjM2Ij4i157Xntep16cg15TXntep16rXntepINep15wg15DXpNec15nXp9em15nXlCDXkNeX16jXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGlzcGxheSIgbXNnaWQ9IjYwNTEwMDIwMzE5MzMwMTM3MTQiPiLXlNep16TXoteUINei15wg157Xntep16cg15TXntep16rXntepINep15wg15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0b3JhZ2UiIG1zZ2lkPSIxOTcxMTE4NzcwNTQ2MzM2OTY2Ij4i15DXl9eh15XXnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4i15LXmdep15Qg15zXkNee16bXoteZINeQ15fXodeV158g157XodeV15IgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiLXktepINec15vXqNeY15nXoSBTRC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzQ0MjMxODUwMjQ0Njg3NDk5OSI+IuKAj9eS15nXqdeUINec15DXntem16LXmSDXkNeX16HXldefINee16HXldeSIFVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI5MjAzMzAyMjE0OTE1MzU1Nzc0Ij4i4oCP15LXqSDXnNeb16jXmNeZ16EgU0QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiLXqteb15XXoNeV16og16DXkteZ16nXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI0MjA1MTk2ODgxNjc4MTQ0MzM1Ij4i16rXm9eV16DXldeqINep15jXm9eg15XXnNeV15LXmdeUINee16HXmdeZ16LXqiDXmdeb15XXnNeUINec15HXp9epLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzkwMTcxNzkzNjkzMDE3MDMyMCI+IteQ15fXlteoINeq15XXm9efINep15wg15fXnNeV158iPC9zdHJpbmc+CkBAIC0yNTIsMjYgKzI1NywyNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdW5pbnN0YWxsX3Nob3J0Y3V0IiBtc2dpZD0iNjc0NTc0MzQ3NDI2NTA1Nzk3NSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXodeZ16gg16fXmdem15XXqNeZINeT16jXmiDXkdee16HXmiDXk9ejINeU15HXmdeqINec15zXkCDXlNeq16LXqNeR15XXqiDXlNee16nXqtee16kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiLXoNeZ16rXldeRINee15fXk9epINep15wg16nXmdeX15XXqiDXmdeV16bXkNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjUzMzEzMTg5MzE5Mzc0MDIwNDAiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNei15HXkyDXqdeZ15fXldeqINeZ15XXpteQ15XXqiDXldec16nXoNeV16og15DXqiDXlNee16HXpNeoINep15nXqSDXnNeX15nXmdeSLiDXkNeZ16nXldeoINeW15Qg157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXoten15XXkSDXkNeX16gg16nXmdeX15XXqiDXmdeV16bXkNeV16osINec15HXpteiINeU16TXoNeZ15Qg157Xl9eT16kg16nXnNeU158g15DXlSDXkNejINec157XoNeV16Ig15DXqiDXkdeZ16bXldei158uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+Iten15HXnNeqINeU15XXk9ei15XXqiDXmNen16HXmCAoU01TKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVTbXMiIG1zZ2lkPSI2NDI0Mzg3NzU0MjI4NzY2OTM5Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15XXnNei15HXkyDXlNeV15PXoteV16ogU01TLiDXntep157XoteV16og15TXk9eR16gg15TXmdeQINep15TXkNek15zXmden16bXmdeUINeZ15vXldec15Qg15zXoten15XXkSDXkNeX16gg15TXldeT16LXldeqINep16DXqdec15fXlSDXnNee15vXqdeZ16gg15DXlSDXnNee15fXldenINeQ15XXqtefINee15HXnNeZINec15TXpteZ15Ig15zXmiDXkNeV16rXny4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4i16fXkdec16og15TXldeT16LXldeqINeY16fXodeYIChNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeV15zXoteR15Mg15TXldeT16LXldeqIE1NUy4g157Xqdee16LXldeqINeU15PXkdeoINeU15nXkCDXqdeU15DXpNec15nXp9em15nXlCDXmdeb15XXnNeUINec16LXp9eV15Eg15DXl9eoINeU15XXk9ei15XXqiDXqdeg16nXnNeX15Ug15zXnteb16nXmdeoINeQ15Ug15zXnteX15XXpyDXkNeV16rXnyDXnteR15zXmSDXnNeU16bXmdeSINec15og15DXldeq158uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+IuKAj9en15HXnNeqINeU15XXk9ei15XXqiDXmNen16HXmCAoU01TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVTbXMiIG1zZ2lkPSI2NDI0Mzg3NzU0MjI4NzY2OTM5Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15XXnNei15HXkyDXlNeV15PXoteV16ogU01TLiDXntep157XoteV16og15TXk9eR16gg15TXmdeQINep15TXkNek15zXmden16bXmdeUINeZ15vXldec15Qg15zXoten15XXkSDXkNeX16gg15TXldeT16LXldeqINep16DXqdec15fXlSDXnNee15vXqdeZ16gg15DXlSDXnNee15fXldenINeQ15XXqtefINee15HXnNeZINec15TXpteZ15Ig15zXmiDXkNeV16rXny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4i4oCP16fXkdec16og15TXldeT16LXldeqINeY16fXodeYIChNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeV15zXoteR15Mg15TXldeT16LXldeqIE1NUy4g157Xqdee16LXldeqINeU15PXkdeoINeU15nXkCDXqdeU15DXpNec15nXp9em15nXlCDXmdeb15XXnNeUINec16LXp9eV15Eg15DXl9eoINeU15XXk9ei15XXqiDXqdeg16nXnNeX15Ug15zXnteb16nXmdeoINeQ15Ug15zXnteX15XXpyDXkNeV16rXnyDXnteR15zXmSDXnNeU16bXmdeSINec15og15DXldeq158uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iMTgwMzQ3NzY2MDg0NjI4ODA4OSI+Iten15HXnCDXqdeZ15PXldeo15kg15fXmdeo15XXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen15HXnCDXldec16LXkdeTINec16nXk9eoINeU15XXk9ei15XXqiDXl9eZ16jXldedINee16nXldeT16jXldeqLiDXlNeo16nXkNeUINeW15Ug15bXnteZ16DXlCDXqNenINec15DXpNec15nXp9em15nXldeqINee16LXqNeb16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSIxNTk4MzI4ODQzNjE5NjQ2MTY2Ij4i16fXqNeZ15DXqiDXlNeV15PXoteV16og16nXmdeT15XXqCDXodec15XXnNeo15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXlNeV15PXoteV16og16nXmdeT15XXqCDXodec15XXnNeo15kg16nXlNeq16fXkdec15Ug15HXnteb16nXmdeoINep15zXmi4g15TXqteo15DXldeqINep15nXk9eV16gg16HXnNeV15zXqNeZINeg16nXnNeX15XXqiDXkdee16fXldee15XXqiDXnteh15XXmdee15nXnSDXotecINee16DXqiDXnNeU15bXlNeZ16gg15DXldeq15og157XpNeg15kg157XpteR15kg15fXmdeo15XXnS4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei16nXldeZ15XXqiDXnNeU16TXqNeZ16Ig15zXkdeZ16bXldei15nXnSDXkNeVINec16TXoteV15zXlCDXqdecINeU157Xm9ep15nXqCDXqdec15og15vXkNep16gg157Xqten15HXnCDXqdeZ15PXldeoINeX15nXqNeV150g16HXnNeV15zXqNeZLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiLXqdec15XXlyDXlNeV15PXoteV16ogU01TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15zXldeXINeU15XXk9ei15XXqiBTTVMuINeU15PXkdeoINei16nXldeZINec15LXqNeV150g15zXl9eZ15XXkdeZ150g15HXnNeq15kg16bXpNeV15nXmdedLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15LXqNeV150g15zXotec15XXmdeV16og16LXnCDXmdeT15kg16nXnNeZ15fXqiDXlNeV15PXoteV16og15zXnNeQINeQ15nXqdeV16jXmi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRTbXMiIG1zZ2lkPSI1NjAwODMwNjEyMTQ3NjcxNTI5Ij4i4oCP16nXnNeV15cg15TXldeT16LXldeqIFNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRTbXMiIG1zZ2lkPSI3MDk0NzI5Mjk4MjA0OTM3NjY3Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdec15XXlyDXlNeV15PXoteV16ogU01TLiDXlNeT15HXqCDXotep15XXmSDXnNeS16jXldedINec15fXmdeV15HXmdedINeR15zXqteZINem16TXldeZ15nXnS4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNeS16jXldedINec16LXnNeV15nXldeqINei15wg15nXk9eZINep15zXmdeX16og15TXldeT16LXldeqINec15zXkCDXkNeZ16nXldeo15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iODcxMzg4OTEwNTMwNTk0MzIwMCI+Itep15zXmdeX16og15DXmdeo15XXoteZIFwn16rXkteV15HXlCDXkdeQ157Xptei15XXqiDXlNeV15PXoteUXCciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15cg15HXp9ep15XXqiDXnNeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXmdedINep15wg15TXoteR16jXqiDXlNeV15PXoteV16og15vXk9eZINec15jXpNecINeR15DXmdeo15XXoteZIFwn16rXkteV15HXlCDXkdeQ157Xptei15XXqiDXlNeV15PXoteUXCcg16LXkdeV16gg16nXmdeX15XXqiDXoNeb16DXodeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+Iten16jXmdeQ16og15TXldeT16LXldeqINeU15jXp9eh15gg16nXnNeaIChTTVMg15DXlSBNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15TXldeT16LXldeqIFNNUyDXlNee15DXldeX16HXoNeV16og15HXmNeQ15HXnNeYINeQ15Ug15HXm9eo15jXmdehINeULVNJTS4g15PXkdeoINeW15Qg157XqteZ16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15DXqiDXm9ecINeU15XXk9ei15XXqiDXlC1TTVMsINec15zXkCDXlNeq15fXqdeR15XXqiDXkdeq15XXm9efINeQ15Ug15HXodeV15PXmdeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeU15XXk9ei15XXqiBTTVMg15TXnteQ15XXl9eh16DXldeqINeR15jXnNek15XXnyDXkNeVINeR15vXqNeY15nXoSDXlC1TSU0uINeT15HXqCDXlteUINee16rXmdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeQ16og15vXnCDXlNeV15PXoteV16og15QtU01TLCDXnNec15Ag15TXqteX16nXkdeV16og15HXqteV15vXnyDXkNeVINeR16HXldeT15nXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTbXMiIG1zZ2lkPSIzMjE2OTUwNDcyNjM2MjE0Nzc0Ij4i16LXqNeZ15vXqiDXlNeV15PXoteV16og15TXmNen16HXmCDXqdec15ogKFNNUyDXkNeVIE1NUykiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTE2MDQxMzk0Nzc5NDUwMTUzOCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15vXqteV15Eg15zXlNeV15PXoteV16ogU01TINeU157XkNeV15fXodeg15XXqiDXkdeY15DXkdec15gg15DXlSDXkdeb16jXmNeZ16Eg15QtU0lNINep15zXmi4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNee15fXldenINeQ16og15TXlNeV15PXoteV16og16nXnNeaLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15vXqteV15Eg15zXlNeV15PXoteV16ogU01TINeU157XkNeV15fXodeg15XXqiDXkdeY15zXpNeV158g15DXlSDXkdeb16jXmNeZ16Eg15QtU0lNINep15zXmi4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNee15fXldenINeQ16og15TXlNeV15PXoteV16og16nXnNeaLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI1OTkxMzk4NzExOTM2NTkwNDEwIj4i16fXkdec16og15TXldeT16LXldeqINeY16fXodeYIChXQVApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen15HXnCDXldec16LXkdeTINeU15XXk9ei15XXqiBXQVAuINeQ15nXqdeV16gg15bXlCDXm9eV15zXnCDXkNeqINeU15nXm9eV15zXqiDXnNei16fXldeRINeQ15fXqCDXlNeV15PXoteV16og16nXoNep15zXl9eVINeQ15zXmdeaINeV15zXnteX15XXpyDXkNeV16rXnyDXnteR15zXmSDXnNeU16bXmdeSINec15og15DXldeq158uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+IuKAj9en16jXmdeQ16og15TXldeT16LXldeqINeU15jXp9eh15gg16nXnNeaIChTTVMg15DXlSBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15TXldeT16LXldeqIFNNUyDXlNee15DXldeX16HXoNeV16og15HXmNeQ15HXnNeYINeQ15Ug15HXm9eo15jXmdehINeULVNJTS4g15PXkdeoINeW15Qg157XqteZ16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15DXqiDXm9ecINeU15XXk9ei15XXqiDXlC1TTVMsINec15zXkCDXlNeq15fXqdeR15XXqiDXkdeq15XXm9efINeQ15Ug15HXodeV15PXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeU15XXk9ei15XXqiBTTVMg15TXnteQ15XXl9eh16DXldeqINeR15jXnNek15XXnyDXkNeVINeR15vXqNeY15nXoSDXlC1TSU0uINeT15HXqCDXlteUINee16rXmdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeQ16og15vXnCDXlNeV15PXoteV16og15QtU01TLCDXnNec15Ag15TXqteX16nXkdeV16og15HXqteV15vXnyDXkNeVINeR16HXldeT15nXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTbXMiIG1zZ2lkPSIzMjE2OTUwNDcyNjM2MjE0Nzc0Ij4i4oCP16LXqNeZ15vXqiDXlNeV15PXoteV16og15TXmNen16HXmCDXqdec15ogKFNNUyDXkNeVIE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTE2MDQxMzk0Nzc5NDUwMTUzOCI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15vXqteV15Eg15zXlNeV15PXoteV16ogU01TINeU157XkNeV15fXodeg15XXqiDXkdeY15DXkdec15gg15DXlSDXkdeb16jXmNeZ16Eg15QtU0lNINep15zXmi4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNee15fXldenINeQ16og15TXlNeV15PXoteV16og16nXnNeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15vXqteV15Eg15zXlNeV15PXoteV16ogU01TINeU157XkNeV15fXodeg15XXqiDXkdeY15zXpNeV158g15DXlSDXkdeb16jXmNeZ16Eg15QtU0lNINep15zXmi4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNee15fXldenINeQ16og15TXlNeV15PXoteV16og16nXnNeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI1OTkxMzk4NzExOTM2NTkwNDEwIj4i4oCP16fXkdec16og15TXldeT16LXldeqINeY16fXodeYIChXQVApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen15HXnCDXldec16LXkdeTINeU15XXk9ei15XXqiBXQVAuINeQ15nXqdeV16gg15bXlCDXm9eV15zXnCDXkNeqINeU15nXm9eV15zXqiDXnNei16fXldeRINeQ15fXqCDXlNeV15PXoteV16og16nXoNep15zXl9eVINeQ15zXmdeaINeV15zXnteX15XXpyDXkNeV16rXnyDXnteR15zXmSDXnNeU16bXmdeSINec15og15DXldeq158uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUYXNrcyIgbXNnaWQ9IjY0NjYwOTUzOTY2MjM5MzM5MDYiPiLXkNeX15bXldeoINeQ16TXnNeZ16fXpteZ15XXqiDXpNei15nXnNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUYXNrcyIgbXNnaWQ9Ijc0NTQyMTU5OTU4NDc2NTgxMDIiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeQ15fXlteoINee15nXk9eiINec15LXkdeZINee16nXmdee15XXqiDXlNek15XXotec15XXqiDXm9eo15LXoiDXldep16TXotec15Ug15zXkNeX16jXldeg15QuINeZ15nXqteb158g16nXlNeT15HXqCDXmdeq15nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXktec15XXqiDXnteZ15PXoiDXnNeS15HXmSDXlNeQ16TXnNeZ16fXpteZ15XXqiDXqdeR15TXnyDXoNei16nXlCDXqdeZ157XldepINeR157Xm9ep15nXqC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSI3MTE0MjU1MjgxOTQ0MjExNjgyIj4i15DXmdeg15jXqNeQ16fXpteZ15Qg15HXmdefINee16nXqtee16nXmdedIjwvc3RyaW5nPgpAQCAtMzEzLDcgKzMxOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iODUzMjI5NTE5OTExMjUxOTM3OCI+IteQ15fXlteoINee15nXk9eiINeX15zXldefIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI0OTk4ODM2MzcwNDI0MTg2ODQ5Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXkNeX15bXqCDXnteZ15PXoiDXnNeS15HXmSDXlNeX15zXldeg15XXqiDXntee16DXlNecINeU15fXnNeV16DXldeqLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXqdeV15nXldeqINec15DXl9eW16gg157XmdeT16Ig15TXnteZ15XXoteTINec16nXmdee15XXqSDXntei16jXm9eqINek16DXmdee15kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODY3NTUzNTY0ODgwNzQyNzM4OSI+Iteh16DXnyDXkNeZ16jXldei15nXnSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4MDA2MjM2MzE1ODg4MzQ3NjgwIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqNep15XXnSDXnteh16DXnyDXp9ec15gg16nXnteh16DXnyDXkNeqINeU15bXqNedINep15wg15vXnCDXkNeZ16jXldei15kg15TXntep16rXntepINec16TXoNeZINep15TXnSDXoNep15zXl9eZ150uINeQ16TXnNeZ16fXpteZ15Qg15bXk9eV16DXmdeqINei16nXldeZ15Qg15zXqdec15XXmCDXkS1VSSDXqdecINeU157Xoteo15vXqiDXnNec15Ag15TXqtei16jXkdeV16og157Xqdeq157XqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODAwNjIzNjMxNTg4ODM0NzY4MCI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16jXqdeV150g157Xodeg158g16fXnNeYINep157Xodeg158g15DXqiDXlNeW16jXnSDXqdecINeb15wg15DXmdeo15XXoteZINeU157Xqdeq157XqSDXnNek16DXmSDXqdeU150g16DXqdec15fXmdedLiDXkNek15zXmden16bXmdeUINeW15PXldeg15nXqiDXotep15XXmdeUINec16nXnNeV15gg15EtVUkg16nXnCDXlNee16LXqNeb16og15zXnNeQINeU16rXoteo15HXldeqINee16nXqtee16kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI1OTczNjI2NzM4MTcwNjE4Nzc1Ij4i15TXkteT15zXqiDXqtem15XXkteUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNzEyMTIzNTY4NDUxNTAwMzc5MiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXkteT15nXnCDXkNeqINeU16rXldeb158g16nXnCDXqtem15XXkteULiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec16nXoNeV16og15DXqiDXqteV15vXnyDXlNeq16bXldeS15Qg15vXmiDXqdeU157Xm9ep15nXqCDXmdeU16TXldeaINec15HXnNeq15kg16nXnteZ16kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaHV0ZG93biIgbXNnaWQ9IjcxODU3NDc4MjQwMzg5MDkwMTYiPiLXm9eZ15HXldeZINeX15zXp9eZIjwvc3RyaW5nPgpAQCAtMzI2LDEwICszMzEsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeg15TXnCDXntei16fXkSDXkNeX16gg15TXkNeV16TXnyDXqdeR15Ug15TXntei16jXm9eqINee16TXoteZ15zXlCDXpNei15nXnNeV15nXldeqLCDXldec16nXnNeV15gg15HXlS4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNeh15vXnyDXkNeqINeU157Xoteo15vXqiDXm9eV15zXlC4g15TXqNep15DXlCDXlteVINeQ15nXoNeUINeg15fXldem15Qg15zXqdeZ157XldepINeo15LXmdecLCDXkNec15Ag15zXpNeZ16rXldeXINeR15zXkdeTLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSIyNTc2MzMzNDM0ODkzNTMyNDc1Ij4i16nXnNeXINep15nXk9eV16gg16nXlNeV16HXqCDXnteX15HXmdec15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjY2MjE5MDEyMTYyMDc5MzEwODkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15PXqCDXlNeq16jXkNeUINei15wg15vXmiDXqdeX15HXmdec16og15DXpNec15nXp9em15nXldeqINeU15XXodeo15QuINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXlNep16rXntepINeR15vXmiDXm9eT15kg15zXodeS15XXqCDXkNek15zXmden16bXmdeV16og16TXoteZ15zXldeqINeQ15fXqNeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiLXqdec15cg16nXmdeT15XXqCDXqdeU16rXp9eR15wg15EtU01TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI0MTUyMDM3NzIwMDM0MzY1NDkyIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeT16gg15TXqteo15DXlCDXotecINeb15og16nXlNeq16fXkdec15Qg15TXldeT16LXqiBTTVMuINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXlNep16rXntepINeR15vXmiDXm9eT15kg15zXlteZ15nXoyDXlNeV15PXoteV16ogU01TINeg15vXoNeh15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4i16nXnNeXINep15nXk9eV16gg16nXlNeq16fXkdecINeR15DXntem16LXldeqIFdBUC1QVVNIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15PXqCDXlNeq16jXkNeUINei15wg15vXmiDXqdeU16rXp9eR15zXlCDXlNeV15PXoteUINee16HXldeSIFdBUCBQVVNILiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15TXqdeq157XqSDXkdeb15og15vXk9eZINec15bXmdeZ16Mg16fXkdec15Qg16nXnCDXlNeV15PXoteV16ogTU1TINeQ15Ug15vXk9eZINec15TXl9ec15nXoyDXkdeX16nXkNeZINeQ16og15TXqteV15vXnyDXqdecINeT16Mg15DXmdeg15jXqNeg15gg15vXnNep15TXlSDXkdeS15nXqNeh15DXldeqINeW15PXldeg15nXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI1Njg5MDk1MDA5MDMwMzM2NTkzIj4i4oCP16nXnNeXINep15nXk9eV16gg16nXlNeq16fXkdecINeRLVNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXk9eoINeU16rXqNeQ15Qg16LXnCDXm9eaINep15TXqten15HXnNeUINeU15XXk9ei16ogU01TLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15TXqdeq157XqSDXkdeb15og15vXk9eZINec15bXmdeZ16Mg15TXldeT16LXldeqIFNNUyDXoNeb16DXodeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+IuKAj9ep15zXlyDXqdeZ15PXldeoINep15TXqten15HXnCDXkdeQ157Xptei15XXqiBXQVAtUFVTSCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeT16gg15TXqteo15DXlCDXotecINeb15og16nXlNeq16fXkdec15Qg15TXldeT16LXlCDXnteh15XXkiBXQVAgUFVTSC4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNeU16nXqtee16kg15HXm9eaINeb15PXmSDXnNeW15nXmdejINen15HXnNeUINep15wg15TXldeT16LXldeqIE1NUyDXkNeVINeb15PXmSDXnNeU15fXnNeZ16Mg15HXl9ep15DXmSDXkNeqINeU16rXldeb158g16nXnCDXk9ejINeQ15nXoNeY16jXoNeYINeb15zXqdeU15Ug15HXkteZ16jXodeQ15XXqiDXlteT15XXoNeZ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjI0NTE4NzM2NjQzNjM2NjI2NjYiPiLXlNeS15HXnCDXkNeqINee16HXpNeoINeU16rXlNec15nXm9eZ150g15TXpNeV16LXnNeZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdec15XXmCDXotecINeU157Xodek16gg15TXnteo15HXmSDXqdecINeq15TXnNeZ15vXmdedINep15nXpNei15zXlS4g15TXqNep15DXlCDXlteVINec16LXldec150g15DXmdeg15Qg16DXl9eV16bXlCDXnNeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeZ150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiLXkNeZ15zXldelINeh15LXmdeo15Qg16nXnCDXkNek15zXmden16bXmdeV16og15HXqNen16IiPC9zdHJpbmc+CkBAIC0zNTMsNyArMzU4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSIyODA1MTAzMjQxMTUzOTA3MTc0Ij4i16nXoNeUINeQ16og157XlNeZ16jXldeqINeU15TXoNek16nXlCDXlNeS15zXldeR15zXmdeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4i15TXqNep15DXlCDXlteVINee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINee15TXmdeo15XXqiDXlNeU16DXpNep15Qg15TXm9ec15zXmdeqICjXlNeg16TXqdeV16og157XlNeZ16jXldeqINeQ15Ug15DXmdeY15nXldeqINeZ15XXqteoKSDXkdeb15wg16LXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjEyODY1MDU3MTcwNTAxMjEzNzAiPiLXoNeZ15TXldecINeQ16HXmdee15XXoNeZINeQ16TXnNeZ16fXpteZ15XXqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeZ16bXldeoINeV15zXoNeU15wg15DXodeZ157Xldeg15nXnSDXntep15zXlNedLCDXqteV15og16LXp9eZ16TXqiDXodeZ15PXldeoINeULVog15TXqNeS15nXnCDXqdec15TXnS4g15TXqNep15DXlCDXlteVINec16LXldec150g15DXmdeg15Qg16DXl9eV16bXlCDXnNeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15nXpteV16gg15XXnNeg15TXnCDXkNeh15nXnteV16DXmdedINee16nXnNeU150sINeq15XXmiDXoten15nXpNeqINeh15nXk9eV16gg15QtWiDXlNeo15LXmdecINep15zXlNedLiDXlNeo16nXkNeUINeW15Ug15zXoteV15zXnSDXkNeZ16DXlCDXoNeX15XXpteUINec15DXpNec15nXp9em15nXldeqINeo15LXmdec15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9IjQ3MDgxODExODQ0NDE4ODAxNzUiPiLXlNen16TXkNeqINee16HXmiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9Ijg1NTg5MjM3ODkyMjI2NzAwNjQiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16fXpNeZ15Ag15HXkNeV16TXnyDXltee16DXmSDXkNeqINeU157XodeaINec157XoteR16gg15zXnteh15og157XnNeQLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5qZWN0RXZlbnRzIiBtc2dpZD0iMTM3ODc0NjU4NDAyMzU4NjYwMCI+Itec15fXpSDXotecINee16fXqdeZ150g15XXqdec15XXmCDXkdec15fXpteg15nXnSI8L3N0cmluZz4KQEAgLTM2OSwxNiArMzc0LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+IteU15TXqNep15DXlCDXlNeW15Ug157XkNek16nXqNeqINec15HXotec15nXnSDXnNeR16bXoiDXkNeZ15LXldeTINec157Xntep16cg15TXqNee15Qg15TXotec15nXldeg15Qg16nXnCDXqdeZ16jXldeqINeU15PXpNeh15QuINec16LXldec150g15zXkCDXkNee15XXqNeUINec15TXmdeV16og16DXl9eV16bXlCDXoteR15XXqCDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSI2ODA3NzYyNzgzNzQ0MTI1OTU0Ij4i15DXmdeS15XXkyDXnNep15nXqNeV16og15TXk9ek16HXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iMzY4MDU1MjI4NTkzMzMxODM3MiI+Itee15DXpNep16jXqiDXnNeR16LXnNeZ150g15zXkdem16Ig15DXmdeS15XXkyDXnNee157XqdenINeR16jXnteUINeU16LXnNeZ15XXoNeUINep15wg16nXmdeo15XXqiDXlNeT16TXodeULiDXnNei15XXnNedINec15Ag15DXnteV16jXlCDXnNeU15nXldeqINeg15fXldem15Qg16LXkdeV16gg15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iMjc1MjczMTMwMDQxOTQxMDcyNCI+IteQ15nXkteV15Mg15zXqdeZ16jXldeqIE5GQyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iNjEyMDY0NzYyOTE3NDA2Njg2MiI+Itee15DXpNep16jXqiDXnNeR16LXnNeZ150g15zXkNeS15Mg15DXqiDXlNeQ16TXnNeZ16fXpteZ15XXqiDXlNee15fXp9eV16og15vXqNeY15nXodeZ15XXqiBORkMuINec16LXldec150g15zXkCDXkNee15XXqNeUINec15TXmdeV16og16DXl9eV16bXlCDXoteR15XXqCDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSIyNzUyNzMxMzAwNDE5NDEwNzI0Ij4i4oCP15DXmdeS15XXkyDXnNep15nXqNeV16ogTkZDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4i4oCP157XkNek16nXqNeqINec15HXotec15nXnSDXnNeQ15LXkyDXkNeqINeU15DXpNec15nXp9em15nXldeqINeU157Xl9en15XXqiDXm9eo15jXmdeh15nXldeqIE5GQy4g15zXoteV15zXnSDXnNeQINeQ157Xldeo15Qg15zXlNeZ15XXqiDXoNeX15XXpteUINei15HXldeoINeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI3MzU4Mzc4NDAxOTE1Mjg3OTM4Ij4i15TXm9ek16TXlCDXnNep15nXqNeV16og15jXp9eh15giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI4MTUxOTY4OTEwOTczOTk4NjcwIj4i157XkNek16nXqCDXnNee16nXqtee16kg15zXmdem15XXqCDXkNeZ15LXldeTINec157Xntep16cg15TXqNee15Qg15TXotec15nXldeg15Qg16nXnCDXqdeZ16jXldeqINeY16fXodeYICjXnNee16nXnCwgU3BlbGxDaGVja2VyU2VydmljZSkuINeU16jXqdeQ15Qg15bXlSDXnNei15XXnNedINeQ15nXoNeUINeg15fXldem15Qg15zXkNek15zXmden16bXmdeV16og16jXkteZ15zXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4i15DXkteTINec16nXmdeo15XXqiBWUE4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLXnteQ16TXqdeoINec157Xqdeq157XqSDXnNeR16bXoiDXkNeZ15LXldeTINec157Xntep16cg15HXqNee15Qg16LXnNeZ15XXoNeUINep15wg16nXmdeo15XXqiBWUE4uINeU16jXqdeQ15Qg15bXlSDXnNei15XXnNedINeQ15nXoNeUINeg15fXldem15Qg15zXkNek15zXmden16bXmdeV16og16jXkteZ15zXmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLigI/XnteQ16TXqdeoINec157Xqdeq157XqSDXnNeZ16bXldeoINeQ15nXkteV15Mg15zXntee16nXpyDXlNeo157XlCDXlNei15zXmdeV16DXlCDXqdecINep15nXqNeV16og15jXp9eh15ggKNec157XqdecLCBTcGVsbENoZWNrZXJTZXJ2aWNlKS4g15TXqNep15DXlCDXlteVINec16LXldec150g15DXmdeg15Qg16DXl9eV16bXlCDXnNeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjQ3MDg1OTYwMjExNjE0NzMyNTUiPiLigI/XkNeS15Mg15zXqdeZ16jXldeqIFZQTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IuKAj9ee15DXpNep16gg15zXntep16rXntepINec15HXpteiINeQ15nXkteV15Mg15zXntee16nXpyDXkdeo157XlCDXotec15nXldeg15Qg16nXnCDXqdeZ16jXldeqIFZQTi4g15TXqNep15DXlCDXlteVINec16LXldec150g15DXmdeg15Qg16DXl9eV16bXlCDXnNeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeZ150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+Iten16nXldeoINec15jXpNeYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLXnteQ16TXqdeoINec157Xqdeq157XqSDXnNeR16bXoiDXkNeZ15LXldeTINec157Xntep16cg15TXqNee15Qg15TXotec15nXldeg15Qg16nXnCDXmNek15guINeU16jXqdeQ15Qg15bXlSDXnNei15XXnNedINeQ15nXoNeUINeg15fXldem15Qg15zXkNek15zXmden16bXmdeV16og16jXkteZ15zXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IteU15vXpNek15Qg15zXqdeZ16jXldeqIFdpZGdldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLXnteQ16TXqdeoINec157Xqdeq157XqSDXnNeR16bXoiDXkNeZ15LXldeTINec157Xntep16cg15TXqNee15Qg15TXotec15nXldeg15Qg16nXnCDXqdeZ16jXldeqIFdpZGdldC4g15TXqNep15DXlCDXlteVINec16LXldec150g15DXmdeg15Qg16DXl9eV16bXlCDXnNeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLXkNeZ15LXldeTINec16bXkiDXnteo15XXl9enIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i15TXqNep15DXlCDXlteVINee15DXpNep16jXqiDXnNee16nXqtee16kg15zXkdem16Ig15DXmdeS15XXkyDXnNee157XqdenINeU16jXnteUINeU16LXnNeZ15XXoNeUINep15wg16bXkiDXqNeX15XXpy4g15zXoteV15zXnSDXkNeZ16DXlCDXkNee15XXqNeUINec15TXmdeV16og16DXl9eV16bXlCDXnNeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i4oCP15TXm9ek16TXlCDXnNep15nXqNeV16ogV2lkZ2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IuKAj9ee15DXpNep16gg15zXntep16rXntepINec15HXpteiINeQ15nXkteV15Mg15zXntee16nXpyDXlNeo157XlCDXlNei15zXmdeV16DXlCDXqdecINep15nXqNeV16ogV2lkZ2V0LiDXlNeo16nXkNeUINeW15Ug15zXoteV15zXnSDXkNeZ16DXlCDXoNeX15XXpteUINec15DXpNec15nXp9em15nXldeqINeo15LXmdec15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLXp9eZ15nXnSDXkNeZ16DXmNeo15DXp9em15nXlCDXotedINee16DXlNecINeU157Xm9ep15nXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9IjU2OTcxNTQxOTU0MzkwNzkzMCI+Itee15DXpNep16gg15zXntep16rXntepINec16nXnNeV15cg15vXldeV16DXldeqINec157XoNeU15wg15TXqten16DXmdedLiDXlNeo16nXkNeUINeW15Ug15zXoteV15zXnSDXkNeZ16DXlCDXoNeX15XXpteUINec15DXpNec15nXp9em15nXldeqINeo15LXmdec15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZURldmljZUFkbWlucyIgbXNnaWQ9IjQyNDg4Mjg5MDAwNDU4MDg3MjIiPiLXlNeV16HXpNeUINeQ15Ug15TXodeo15Qg16nXnCDXnteg15TXnNeZINee15vXqdeZ16giPC9zdHJpbmc+CkBAIC0zODksMTMgKzM5NiwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iNjg2NjU2MzIzNDI3NDEwNDIzMyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXlNee15TXmdeo15XXqiDXqdecINee16bXkdeZ16Ig15TXoteb15HXqCDXkNeVINec15XXlyDXlNee15LXoiDXkdeb15wg16LXqi4g15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqiDXnNeQINeQ157Xldeo15nXnSDXnNei15XXnNedINec15TXlteT16fXpyDXnNeU16jXqdeQ15Qg15bXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iNDc3ODczMTcwMzYwMDkwOTM0MCI+Itep16DXlCDXkNeqINek16jXmdeh16og15TXnten15zXk9eqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI4NDgwMDE2NzcxMTM0MTc1ODc5Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINek16jXmdeh16og15TXnten15zXk9eqLiDXlNeo16nXkNeUINeW15Ug15zXoteV15zXnSDXkNeZ16DXlCDXkNee15XXqNeUINec15TXmdeV16og16DXl9eV16bXlCDXoteR15XXqCDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ1MzkwMDI5OTE5NDczNzY2NTkiPiLXqdec15nXl9eqINeQ15XXqteV16ogTGludXgg15zXkNek15zXmden16bXmdeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0NTM5MDAyOTkxOTQ3Mzc2NjU5Ij4i4oCP16nXnNeZ15fXqiDXkNeV16rXldeqIExpbnV4INec15DXpNec15nXp9em15nXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeR16fXqSDXqdeU15DXldeqINep16DXp9ec15gg15nXmdep15zXlyDXnNeb15wg15TXqteU15zXmdeb15nXnSDXlNee16rXntep15vXmdedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyc2lzdGVudEFjdGl2aXR5IiBtc2dpZD0iODg0MTExMzYyNzk1NTU2MzkzOCI+IteU15LXk9eo16og15TXkNek15zXmden16bXmdeUINec16TXoteV15wg16rXnteZ15MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1MjUxODkyNzIzMjkwODYxMzciPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16TXldeaINeX15zXp9eZ150g157Xnteg15Ug15zXp9eR15XXoteZ150g15HXlteZ15vXqNeV158uINek16LXldec15Qg15bXlSDXotep15XXmdeUINec15TXkteR15nXnCDXkNeqINeU15bXmdeb16jXldefINeU15bXnteZ158g15zXkNek15zXmden16bXmdeV16og15DXl9eo15nXnSDXldec15TXkNeYINeQ16og16TXoteV15zXqiDXlNeY15DXkdec15guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXpNeV15og15fXnNen15nXnSDXntee16DXlSDXnNen15HXldei15nXnSDXkdeW15nXm9eo15XXny4g16TXoteV15zXlCDXlteVINei16nXldeZ15Qg15zXlNeS15HXmdecINeQ16og15TXlteZ15vXqNeV158g15TXltee15nXnyDXnNeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXmdedINeV15zXlNeQ15gg15DXqiDXpNei15XXnNeqINeU15jXnNek15XXny4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iMTg0Mzg1MTI5NTM3NzA1OTM4Ij4i157Xl9eZ16fXqiDXkNek15zXmden16bXmdeV16oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNee15fXldenINeX15HXmdec15XXqiBBbmRyb2lkLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15TXqdeq157XqSDXkdeb15og15vXk9eZINec157Xl9eV16cg15DXpNec15nXp9em15nXldeqINeX16nXldeR15XXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNee15fXldenINeX15HXmdec15XXqiBBbmRyb2lkLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15TXqdeq157XqSDXkdeb15og15vXk9eZINec157Xl9eV16cg15DXpNec15nXp9em15nXldeqINeX16nXldeR15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiLXnteX15nXp9eqINeg16rXldeg15nXnSDXqdecINeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjQ2MjUzMjM2ODQxMjU0NTk0ODgiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeg16fXldeqINeQ16og16DXqteV16DXmSDXlNee16nXqtee16kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzEyODY2NTU3MTgzNzQwODY3NSI+Itee15fXmden16og16fXkdem15nXnSDXqdee15XXqNeZ150g16nXnCDXkNek15zXmden16bXmdeV16og15DXl9eo15XXqiI8L3N0cmluZz4KQEAgLTQwMyw3ICs0MTAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9Ijc0NzI5MjE3NjgzNTc5ODE5ODYiPiLXnteT15nXk9eqINeg16TXlyDXlNeQ15fXodeV158g16nXnCDXkNek15zXmden16bXmdeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9IjM5MjEwNjgxNTQ0MjA3MzgyOTYiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeQ15fXlteoINeQ16og15TXp9eV15MsINeU16DXqteV16DXmdedLCDXldeS15XXk9ec15kg15TXp9eR16bXmdedINeU16nXnteV16jXmdedINep15zXlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+IteU16rXp9eg15Qg15nXqdeZ16jXlCDXqdecINeQ16TXnNeZ16fXpteZ15XXqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16rXp9eZ158g15fXkdeZ15zXldeqIEFuZHJvaWQg15fXk9ep15XXqiDXkNeVINee16LXldeT15vXoNeV16ouINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXlNep16rXntepINeR15vXmiDXm9eT15kg15zXlNeV16HXmdejINeQ16TXnNeZ16fXpteZ15XXqiDXl9eT16nXldeqINeR16LXnNeZINeU16jXqdeQ15XXqiDXlteUINeb15PXmSDXnNeU15XXodeZ16Mg15DXpNec15nXp9em15nXldeqINeX15PXqdeV16og16LXnSDXlNeo16nXkNeV16og16jXkdeV16ot16LXldem157XlCDXkNen16jXkNeZ15XXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSI1NjI4NTMwOTcyNTQ4MDcxMjg0Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeq16fXmdefINeX15HXmdec15XXqiBBbmRyb2lkINeX15PXqdeV16og15DXlSDXntei15XXk9eb16DXldeqLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15TXqdeq157XqSDXkdeb15og15vXk9eZINec15TXldeh15nXoyDXkNek15zXmden16bXmdeV16og15fXk9ep15XXqiDXkdei15zXmSDXlNeo16nXkNeV16og15bXlCDXm9eT15kg15zXlNeV16HXmdejINeQ16TXnNeZ16fXpteZ15XXqiDXl9eT16nXldeqINei150g15TXqNep15DXldeqINeo15HXldeqLdei15XXptee15Qg15DXp9eo15DXmdeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcENhY2hlIiBtc2dpZD0iNzQ4NzI3OTM5MTcyMzUyNjgxNSI+Itee15fXmden16og15vXnCDXlNeg16rXldeg15nXnSDXkden15HXpteZ150g16nXnteV16jXmdedINep15wg15DXpNec15nXp9em15nXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3NDY0MDg3MTk0NTQzNDU2NSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXl9eo16gg16nXmNeXINeQ15fXodeV158g15HXmNeQ15HXnNeYINei15wg15nXk9eZINee15fXmden16og16fXkdem15nXnSDXkdeh16TXqNeZ15XXqiDXlNen15HXpteZ150g15TXqdee15XXqNeZ150g16nXnCDXkNek15zXmden16bXmdeV16og15DXl9eo15XXqi4g15TXk9eR16gg16LXqdeV15kg15zXkteo15XXnSDXnNeU16TXotec15Qg16nXnCDXkNek15zXmden16bXmdeV16og15DXl9eo15XXqiDXnNeU15nXldeqINeQ15nXmNeZ16og15nXldeq16gg157Xm9eZ15XXldefINep16LXnNeZ15TXnSDXnNeQ15fXlteoINee15fXk9epINeQ16og15TXoNeq15XXoNeZ150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNek16DXldeqINep15jXlyDXkNeX16HXldefINeR15jXnNek15XXnyDXotecINeZ15PXmSDXnteX15nXp9eqINen15HXpteZ150g15HXodek16jXmdeV16og15TXp9eR16bXmdedINeU16nXnteV16jXmdedINep15wg15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16ouINeU15PXkdeoINei16nXldeZINec15LXqNeV150g15zXlNek16LXnNeUINep15wg15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16og15zXlNeZ15XXqiDXkNeZ15jXmdeqINeZ15XXqteoINee15vXmdeV15XXnyDXqdei15zXmdeU150g15zXkNeX15bXqCDXnteX15PXqSDXkNeqINeU16DXqteV16DXmdedLiI8L3N0cmluZz4KQEAgLTQxNSw5ICs0MjIsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i16nXmdee15XXqSDXkdeb15wg157XpNei16DXlyDXnteT15nXlCDXqdeU15XXkCDXnNeU16TXotec15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iODI4MzkxMjQ4ODQzMzE4OTAxMCI+IteU16jXqdeQ15Qg15bXlSDXnteQ16TXqdeo16og15zXkNek15zXmden16bXmdeUINec15TXqdeq157XqSDXkdeb15wg157XpNei16DXlyDXnteT15nXlCDXnteV16rXp9efINeb15PXmSDXnNeR16bXoiDXpNei16DXldeXINec15TXqdee16LXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iMTY3ODM5MTg5Njc4Njg4MjAxNCI+Iteg15nXlNeV15wg16TXqNeY15kg15vXoNeZ16HXlCDXnteU15nXnteg15nXnSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iNDAxNTY0NDA0NzE5NjkzNzAxNCI+Itee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeq16fXmdefINeV15zXlNeh15nXqCDXkNeZ16nXldeo15kgQ0Eg15vXpNeo15jXmSDXm9eg15nXodeUINee15TXmdee16DXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiLXp9eo15Av15vXqteV15Eg15HXntep15DXkdeZ150g15HXkdei15zXldeqIGRpYWciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15XXnNeb16rXldeRINeR15vXnCDXntep15DXkSDXqdeR15HXotec15XXqiDXp9eR15XXpteqINeULWRpYWc7INec15PXldeS157XlCwg16fXkdem15nXnSDXkS3igI4vZGV2LiDXpNei15XXnNeUINeW15Ug16LXqdeV15nXlCDXnNeU16nXpNeZ16Ig16LXnCDXlNeZ16bXmdeR15XXqiDXldeU15DXkdeY15fXlCDXqdecINeU157Xoteo15vXqi4g15DXpNep16jXldeqINeW15Ug16bXqNeZ15vXlCDXnNep157XqSDXqNenINeQ16og15TXmdem16jXnyDXkNeVINeU157XpNei15nXnCwg15zXpteV16jXmiDXkNeR15fXldeg15nXnSDXodek16bXmdek15nXmdedINec15fXldee16jXlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjQwMTU2NDQwNDcxOTY5MzcwMTQiPiLigI/XnteQ16TXqdeo16og15zXkNek15zXmden16bXmdeUINec15TXqten15nXnyDXldec15TXodeZ16gg15DXmdep15XXqNeZIENBINeb16TXqNeY15kg15vXoNeZ16HXlCDXnteU15nXnteg15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RpYWdub3N0aWMiIG1zZ2lkPSI4MDc2NzQzOTUzOTA4MDAwMzQyIj4i4oCP16fXqNeQL9eb16rXldeRINeR157XqdeQ15HXmdedINeR15HXotec15XXqiBkaWFnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlhZ25vc3RpYyIgbXNnaWQ9IjY2MDgyOTU2OTIwMDI0NTIyODMiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeV15zXm9eq15XXkSDXkdeb15wg157XqdeQ15Eg16nXkdeR16LXnNeV16og16fXkdeV16bXqiDXlC1kaWFnOyDXnNeT15XXktee15QsINen15HXpteZ150g15Et4oCOL2Rldi4g16TXoteV15zXlCDXlteVINei16nXldeZ15Qg15zXlNep16TXmdeiINei15wg15TXmdem15nXkdeV16og15XXlNeQ15HXmNeX15Qg16nXnCDXlNee16LXqNeb16ouINeQ16TXqdeo15XXqiDXlteVINem16jXmdeb15Qg15zXqdee16kg16jXpyDXkNeqINeU15nXpteo158g15DXlSDXlNee16TXoteZ15wsINec16bXldeo15og15DXkdeX15XXoNeZ150g16HXpNem15nXpNeZ15nXnSDXnNeX15XXnteo15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiLXlNek16LXnNeUINeQ15Ug15TXqdeR16rXlCDXqdecINeo15vXmdeR15kg15DXpNec15nXp9em15nXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og157XpteRINeU15TXpNei15zXlCDXqdecINeo15vXmdeRINeR15DXpNec15nXp9em15nXlCDXkNeX16jXqi4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNeU16nXqtee16kg15HXm9eaINeb15PXmSDXnNeU16nXkdeZ16og15nXm9eV15zXldeqINeX16nXldeR15XXqiDXqdecINeU15jXkNeR15zXmC4g15nXqSDXnNeg15TXldeSINeR15TXqNep15DXlCDXlteVINeR15bXlNeZ16jXldeqLCDXnteb15nXldeV158g16nXlNeZ15Ag15nXm9eV15zXlCDXnNeU15HXmdeQINeo15vXmdeR15kg15DXpNec15nXp9em15nXldeqINec157XpteRINec15Ag16nXnteZ16ksINec15Ag16LXp9eR15kg15DXlSDXnNeQINeZ16bXmdeRLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTgyNzIzMjQ4NDQxNjUwNTYxNSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXntem15Eg15TXlNek16LXnNeUINep15wg16jXm9eZ15Eg15HXkNek15zXmden16bXmdeUINeQ15fXqNeqLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15TXqdeq157XqSDXkdeb15og15vXk9eZINec15TXqdeR15nXqiDXmdeb15XXnNeV16og15fXqdeV15HXldeqINep15wg15TXmNec16TXldefLiDXmdepINec16DXlNeV15Ig15HXlNeo16nXkNeUINeW15Ug15HXlteU15nXqNeV16osINee15vXmdeV15XXnyDXqdeU15nXkCDXmdeb15XXnNeUINec15TXkdeZ15Ag16jXm9eZ15HXmSDXkNek15zXmden16bXmdeV16og15zXntem15Eg15zXkCDXqdee15nXqSwg15zXkCDXoten15HXmSDXkNeVINec15Ag15nXpteZ15EuIjwvc3RyaW5nPgpAQCAtNDI5LDggKzQzNiw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNldHRpbmdzIiBtc2dpZD0iNzc3NTcyMzQ0MTU1ODkwNzE4MSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXoNeq15XXoNeZINeU15LXk9eo15XXqiDXlNee16LXqNeb16ouINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXqdeR16kg15DXqiDXqtem15XXqNeqINeU157Xoteo15vXqiDXqdec15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iMjA0Njc2MjUxODc2NzE4Mjg4Ij4i16nXoNeUINeQ16og15TXkteT16jXldeqINeU157Xoteo15vXqiDXlNee15DXldeR15jXl9eqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjgxNTk1MzU2MTMwMjAxMzczOTEiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og16DXqteV16DXmSDXlNeU15LXk9eo15XXqiDXlNee15DXldeR15jXl9eZ150g16nXnCDXlNee16LXqNeb16ouINec15Ag157XmdeV16LXkyDXnNep15nXnteV16kg16LXnCDXmdeT15kg15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMjE0OTQyNjY2NDIyNjE1MjE4NSI+Itep16DXlCDXkNeqINee16TXqiDXlNep15nXqNeV16rXmdedINep15wgR29vZ2xlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINee16TXqiDXqdeZ16jXldeq15kgR29vZ2xlLiDXnNeQINee15nXldei15Mg15zXqdeZ157XldepINei15wg15nXk9eZINeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiLigI/Xqdeg15Qg15DXqiDXntek16og15TXqdeZ16jXldeq15nXnSDXqdecIEdvb2dsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMTI4NzMwOTQzNzYzODM4MDIyOSI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXntek16og16nXmdeo15XXqteZIEdvb2dsZS4g15zXkCDXnteZ15XXoteTINec16nXmdee15XXqSDXotecINeZ15PXmSDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4i15TXpNei15zXlCDXkdei16og15DXqteX15XXnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNek16LXmdecINeQ16og16LXptee15Ug157XmdeTINei150g16HXmdeV150g16rXlNec15nXmiDXlNeQ16rXl9eV15wg16nXnCDXlNee16LXqNeb16ouINee16nXldedINeb15og15TXpNei15zXqiDXlNeY15DXkdec15gg16LXqdeV15nXlCDXnNeU16rXkNeo15og15XXlNeQ16TXnNeZ16fXpteZ15Qg16LXnNeV15zXlCDXnNeU15DXmCDXkNeqINeU16TXoteZ15zXldeqINeU15vXnNec15nXqiDXqdecINeU15jXkNeR15zXmCwg15HXqdecINek16LXmdec15XXqteUINeU16rXnteZ15PXmdeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNek16LXmdecINeQ16og16LXptee15Ug157XmdeTINei150g15TXqdec157XqiDXqteU15zXmdeaINeU15DXqteX15XXnCDXqdecINeU157Xoteo15vXqi4g157XqdeV150g15vXmiDXlNek16LXnNeqINeU15jXnNek15XXnyDXotep15XXmdeUINec15TXqteQ16jXmiDXldeU15DXpNec15nXp9em15nXlCDXotec15XXnNeUINec15TXkNeYINeQ16og15TXpNei15nXnNeV16og15TXm9ec15zXmdeqINep15wg15TXmNec16TXldefLCDXkdep15wg16TXoteZ15zXldeq15Qg15TXqtee15nXk9eZ16ouIjwvc3RyaW5nPgpAQCAtNDY0LDIzICs0NzEsMjUgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NzkwMzU1MjAxMTM2Njg1MjgiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU15XXodeZ16MsINec15TXodeZ16gg15XXnNep16DXldeqINeQ15nXqNeV16LXmdedINep15DXqteUINeZ15vXldecINec16nXoNeV16og15HXmNeQ15HXnNeYLCDXm9eV15zXnCDXkNec15Qg16nXnCDXl9eR16jXmdedINeQ15Ug16LXnteZ16rXmdedINec16LXkdeV15PXlC4g15TXk9eR16gg16LXqdeV15kg15zXlNeq15nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdec15XXlyDXlNeV15PXoteV16og15TXoNeo15DXldeqINeb15DXmdec15Ug16nXoNep15zXl9eVINee15HXotec15kg15zXldeXINep16DXlCDXkNeVINec16nXoNeV16og15DXmdeo15XXoteZ150g15zXnNeQINeZ15PXmdei16og15TXkdei15zXmdedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMzI0NDY5NDk2MzI3MjQ5Mzc2Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeV16HXmdejLCDXnNeU16HXmdeoINeV15zXqdeg15XXqiDXkNeZ16jXldei15nXnSDXqdeQ16rXlCDXmdeb15XXnCDXnNep16DXldeqINeR15jXnNek15XXnywg15vXldec15wg15DXnNeUINep15wg15fXkdeo15nXnSDXkNeVINei157Xmdeq15nXnSDXnNei15HXldeT15QuINeU15PXkdeoINei16nXldeZINec15TXqteZ16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15cg15TXldeT16LXldeqINeU16DXqNeQ15XXqiDXm9eQ15nXnNeVINep16DXqdec15fXlSDXnteR16LXnNeZINec15XXlyDXqdeg15Qg15DXlSDXnNep16DXldeqINeQ15nXqNeV16LXmdedINec15zXkCDXmdeT15nXoteqINeU15HXotec15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9Ijg2ODgzMzQ5NzQwMzY4MjMzMzAiPiLXpteV16gg157Xp9eV16jXldeqINee15nXp9eV150g157Xk9eV157XmdedINec16bXldeo15og15HXk9eZ16fXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiLXpteV16gg157Xp9eV16jXldeqINee15nXp9eV150g157Xk9eV157XmdedINec15HXk9eZ16fXlCwg15DXlSDXlNeq16fXnyDXodek16cg157Xmden15XXnSDXl9eT16kuINek16LXldec15Qg15bXlSDXnteQ16TXqdeo16og15zXkNek15zXmden16bXmdeUINec16LXp9eV16Mg15DXqiDXlNee15nXp9eV150g15Uv15DXlSDXlNeh15jXmNeV16Eg15TXnteV15fXlteo15nXnSDXotecINeZ15PXmSDXnten15XXqNeV16og157Xmden15XXnSDXkNeX16jXmdedINeb157XlSBHUFMg15DXlSDXodek16fXmSDXnteZ16fXldedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiLigI/XpteV16gg157Xp9eV16jXldeqINee15nXp9eV150g157Xk9eV157XmdedINec15HXk9eZ16fXlCwg15DXlSDXlNeq16fXnyDXodek16cg157Xmden15XXnSDXl9eT16kuINek16LXldec15Qg15bXlSDXnteQ16TXqdeo16og15zXkNek15zXmden16bXmdeUINec16LXp9eV16Mg15DXqiDXlNee15nXp9eV150g15Uv15DXlSDXlNeh15jXmNeV16Eg15TXnteV15fXlteo15nXnSDXotecINeZ15PXmSDXnten15XXqNeV16og157Xmden15XXnSDXkNeX16jXmdedINeb157XlSBHUFMg15DXlSDXodek16fXmSDXnteZ16fXldedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iMjgzNjMwODA3NjcyMDU1MzgzNyI+IteS15nXqdeUINec16TXp9eV15PXldeqINeh16TXpyDXnteZ16fXldedINeg15XXodek15XXqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeS16nXqiDXnNek16fXldeT15XXqiDXoNeV16HXpNeV16og16nXnCDXodek16cg16nXmdeo15XXqiDXlNee15nXp9eV150uINeQ15nXqdeV16gg15bXlCDXotep15XXmSDXnNeQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15HXqSDXkNeqINek16LXldec16og15QtR1BTINeQ15Ug157Xp9eV16jXldeqINee15nXp9eV150g15DXl9eo15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSI1OTQ1MTY2NjQyMzM1ODAwNzYzIj4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXktep16og15zXpNen15XXk9eV16og16DXldeh16TXldeqINep15wg16HXpNenINep15nXqNeV16og15TXnteZ16fXldedLiDXkNeZ16nXldeoINeW15Qg16LXqdeV15kg15zXkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeR16kg15DXqiDXpNei15XXnNeqINeULUdQUyDXkNeVINee16fXldeo15XXqiDXnteZ16fXldedINeQ15fXqNeZ150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjY1NzgxMDExOTk4MjUxOTM4NzMiPiLXlNeo16nXkNeUINec15TXqten15nXnyDXodek16cg157Xmden15XXnSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+Item15XXqCDXnten15XXqNeV16og157Xmden15XXnSDXnteT15XXnteZ150g15zXkdeT15nXp9eULCDXkNeVINeU16rXp9efINeh16TXpyDXnteZ16fXldedINeX15PXqS4g16TXoteV15zXlCDXlteVINee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXoten15XXoyDXkNeqINeU157Xmden15XXnSDXlS/XkNeVINeU16HXmNeY15XXoSDXlNee15XXl9eW16jXmdedINei15wg15nXk9eZINee16fXldeo15XXqiDXnteZ16fXldedINeQ15fXqNeZ150g15vXnteVIEdQUyDXkNeVINeh16TXp9eZINee15nXp9eV150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSIxMTkxODk4MDYxOTY1MjczMzcyIj4i157Xmden15XXnSDXnteT15XXmdenICjXnteR15XXodehIEdQUyDXldeo16nXqikiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15DXqiDXlNee15nXp9eV150g15TXnteT15XXmdenINep15zXmiDXkdeQ157Xptei15XXqiDXntei16jXm9eqINeU157Xmden15XXnSDXlNeS15zXldeR15zXmdeqIChHUFMpINeQ15Ug157Xp9eV16jXldeqINee15nXp9eV150g15HXqNep16og15vXkteV158g15DXoNeY16DXldeqINeh15zXldec16jXmdeV16og15UtV2ktRmkuINep15nXqNeV16rXmSDXnteZ16fXldedINeQ15zXlCDXl9eZ15nXkdeZ150g15zXlNeZ15XXqiDXnteV16TXotec15nXnSDXldeg15LXmdep15nXnSDXnNee15vXqdeZ16gg16nXnNeaINeb15PXmSDXqdeU15DXpNec15nXp9em15nXlCDXqtep16rXntepINeR15TXnS4g15nXmdeq15vXnyDXqdeQ16TXnNeZ16fXpteZ15XXqiDXmdei16nXlSDXkdeb15og16nXmdee15XXqSDXm9eT15kg15zXp9eR15XXoiDXlNeZ15vXnyDXkNeq15Qg16DXntem15Ag15XXnNeS16jXldedINec16bXqNeZ15vXqiDXodeV15zXnNeUINee15XXkteR16jXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjkwNjYxNDYxMjA0NzA1OTE1MDkiPiLigI/XpteV16gg157Xp9eV16jXldeqINee15nXp9eV150g157Xk9eV157XmdedINec15HXk9eZ16fXlCwg15DXlSDXlNeq16fXnyDXodek16cg157Xmden15XXnSDXl9eT16kuINek16LXldec15Qg15bXlSDXnteQ16TXqdeo16og15zXkNek15zXmden16bXmdeUINec16LXp9eV16Mg15DXqiDXlNee15nXp9eV150g15Uv15DXlSDXlNeh15jXmNeV16Eg15TXnteV15fXlteo15nXnSDXotecINeZ15PXmSDXnten15XXqNeV16og157Xmden15XXnSDXkNeX16jXmdedINeb157XlSBHUFMg15DXlSDXodek16fXmSDXnteZ16fXldedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iMTE5MTg5ODA2MTk2NTI3MzM3MiI+IuKAj9ee15nXp9eV150g157Xk9eV15nXpyAo157XkdeV16HXoSBHUFMg15XXqNep16opIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeQ16og15TXnteZ16fXldedINeU157Xk9eV15nXpyDXqdec15og15HXkNee16bXoteV16og157Xoteo15vXqiDXlNee15nXp9eV150g15TXktec15XXkdec15nXqiAoR1BTKSDXkNeVINee16fXldeo15XXqiDXnteZ16fXldedINeR16jXqdeqINeb15LXldefINeQ16DXmNeg15XXqiDXodec15XXnNeo15nXldeqINeVLVdpLUZpLiDXqdeZ16jXldeq15kg157Xmden15XXnSDXkNec15Qg15fXmdeZ15HXmdedINec15TXmdeV16og157Xldek16LXnNeZ150g15XXoNeS15nXqdeZ150g15zXnteb16nXmdeoINep15zXmiDXm9eT15kg16nXlNeQ16TXnNeZ16fXpteZ15Qg16rXqdeq157XqSDXkdeU150uINeZ15nXqteb158g16nXkNek15zXmden16bXmdeV16og15nXotep15Ug15HXm9eaINep15nXnteV16kg15vXk9eZINec16fXkdeV16Ig15TXmdeb158g15DXqteUINeg157XpteQINeV15zXkteo15XXnSDXnNem16jXmdeb16og16HXldec15zXlCDXnteV15LXkdeo16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjQ4ODc4OTUzNjIzNTQyMzk2MjgiPiLXnteZ16fXldedINee16nXldei16ggKNee15HXldeh16Eg16jXqdeqKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeQ16og157Xmden15XXnteaINeU157XqdeV16LXqC4g157Xmden15XXnSDXlteUINeg15LXlteoINei15wt16TXmSDXqdeZ16jXldeq15kg157Xmden15XXnSDXlNei15XXqdeZ150g16nXmdee15XXqSDXkdee16fXldeo15XXqiDXnteZ16fXldedINeR16jXqdeqLCDXm9eS15XXnyDXkNeg15jXoNeV16og16HXnNeV15zXqNeZ15XXqiDXlS1XaS1GaS4g16nXmdeo15XXqteZINee15nXp9eV150g15DXnNeUINeX15nXmdeR15nXnSDXnNeU15nXldeqINee15XXpNei15zXmdedINeV16DXkteZ16nXmdedINec157Xm9ep15nXqCDXqdec15og15vXk9eZINep15TXkNek15zXmden16bXmdeUINeq16nXqtee16kg15HXlNedLiDXmdeZ16rXm9efINep15DXpNec15nXp9em15nXldeqINeZ16LXqdeVINeR15vXmiDXqdeZ157XldepINeb15PXmSDXnNen15HXldeiINeQ16og157Xmden15XXnteaINeU157XqdeV16LXqC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMjM2Mzk2OTY0MTc5MjM4ODk0NyI+IteS15nXqdeUINecLVN1cmZhY2VGbGluZ2VyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNep16rXntepINeR16rXm9eV16DXldeqINeR16jXnteUINeU16DXnteV15vXlCDXqdecIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeQ16og157Xmden15XXnteaINeU157XqdeV16LXqC4g157Xmden15XXnSDXlteUINeg15LXlteoINei15wt16TXmSDXqdeZ16jXldeq15kg157Xmden15XXnSDXlNei15XXqdeZ150g16nXmdee15XXqSDXkdee16fXldeo15XXqiDXnteZ16fXldedINeR16jXqdeqLCDXm9eS15XXnyDXkNeg15jXoNeV16og16HXnNeV15zXqNeZ15XXqiDXlS1XaS1GaS4g16nXmdeo15XXqteZINee15nXp9eV150g15DXnNeUINeX15nXmdeR15nXnSDXnNeU15nXldeqINee15XXpNei15zXmdedINeV16DXkteZ16nXmdedINec157Xm9ep15nXqCDXqdec15og15vXk9eZINep15TXkNek15zXmden16bXmdeUINeq16nXqtee16kg15HXlNedLiDXmdeZ16rXm9efINep15DXpNec15nXp9em15nXldeqINeZ16LXqdeVINeR15vXmiDXqdeZ157XldepINeb15PXmSDXnNen15HXldeiINeQ16og157Xmden15XXnteaINeU157XqdeV16LXqC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMjM2Mzk2OTY0MTc5MjM4ODk0NyI+IuKAj9eS15nXqdeUINecLVN1cmZhY2VGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNep16rXntepINeR16rXm9eV16DXldeqINeR16jXnteUINeU16DXnteV15vXlCDXqdecIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IteQ15fXodeV158g15bXnteg15kg16nXnCDXnteh15LXqNeqINen16jXmdeQ15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXkNeqINeU16rXldeb158g16nXnCDXnteQ15LXqCDXlNeg16rXldeg15nXnSDXlNeW157XoNeZINep15wg15TXnteh15LXqNeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLXlNeS15PXqCDXqtem15XXkteV16ogV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU15LXk9eZ16gg15XXnNeU16rXl9eR16gg15zXqtem15XXkteV16ogV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiLXqdec15XXmCDXkdeq16bXldeS15XXqiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjQ1NDM5MTIyOTI2ODE4MjY5ODYiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15zXldeYINeR16rXm9eV16DXldeqINeR16jXnteUINeg157Xldeb15Qg16nXnCDXqtem15XXkteV16ogV2ktRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4i4oCP15LXmdep15Qg15DXnCBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i4oCP157XkNek16nXqNeqINec15DXpNec15nXp9em15nXlCDXnNeU16nXqtee16kg15HXqteb15XXoNeV16og15HXqNee15Qg16DXnteV15vXlCDXqdecIElucHV0Rmxpbmdlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IuKAj9eU15LXk9eoINeq16bXldeS15XXqiBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXkteT15nXqCDXldec15TXqteX15HXqCDXnNeq16bXldeS15XXqiBXaS1GaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IuKAj9ep15zXldeYINeR16rXpteV15LXldeqIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15gg15HXqteb15XXoNeV16og15HXqNee15Qg16DXnteV15vXlCDXqdecINeq16bXldeS15XXqiBXaS1GaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjY4NTcxMzQ0OTg0MDIzNDY3MDgiPiLXp9ec15nXmNeqINek15zXmCDXkNeV15PXmdeVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjIxMDU5Nzc1NDIxMjIwODg1MyI+Itee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9ec15XXmCDXldec15TXpNeg15XXqiDXnteX15PXqSDXpNec15gg15DXldeT15nXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb0hvdHdvcmQiIG1zZ2lkPSIxODkwNTUzOTM1NjUwMzQ5ODA4Ij4i15bXmdeU15XXmSDXqdecINee15nXnNeqINeU16TXotec15QiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXlNeS15PXqNeV16og15DXldeT15nXlSDXktec15XXkdec15nXldeqINeb157XlSDXoteV16bXnteqINen15XXnCDXldeR15fXmdeo16og15TXqNee16fXldecINeU157Xqdee16kg15zXpNec15guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLXlNen15zXmCDXkNeV15PXmdeVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNen15zXmdeYINeQ15XXk9eZ15Ug15HXkNee16bXoteV16og15TXnteZ16fXqNeV16TXldefLiDXkNeZ16nXldeoINeW15Qg157XqteZ16gg15zXkNek15zXmden16bXmdeUINec15TXp9ec15nXmCDXkNeV15PXmdeVINeR15vXnCDXoteqINec15zXkCDXkNeZ16nXldeo15ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiLigI/Xqten16nXldeo16ogU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4i4oCP157XkNek16nXqNeqINec15nXmdep15XXnSDXnNep15zXldeXINek16fXldeT15XXqiDXnC1TSU0uINeW15XXlNeZINeU16jXqdeQ15Qg157XodeV15vXoNeqINee15DXldeTLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+Item15zXnSDXqtee15XXoNeV16og15XXodeo15jXldeg15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNem15zXnSDXqtee15XXoNeV16og15XXodeo15jXldeg15nXnSDXkdeQ157Xptei15XXqiDXlNee16bXnNee15QuINeQ15nXqdeV16gg15bXlCDXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16nXqtee16kg15HXntem15zXnteUINeR15vXnCDXoteqINec15zXkCDXkNeZ16nXldeo15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i15TXqdeR16og15DXqiDXoNeV16jXmdeqINee16bXkSDXlNep15nXk9eV16gg15vXqdeU157Xptec157XlCDXkdep15nXnteV16kiPC9zdHJpbmc+CkBAIC01MDcsMTEgKzUxOCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODk4NTYwODcyNDYyNjM4MjQyIj4i15DXnNelINeQ16rXl9eV15wg157Xl9eT16kg16nXnCDXlNeY15zXpNeV158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgxNzIwNTYxODAwNjM3MDA3NDEiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeQ15zXpSDXkNeqINeU15jXkNeR15zXmCDXnNeR16bXoiDXkNeq15fXldecLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeQ15zXpSDXkNeqINeU15jXnNek15XXnyDXnNeR16bXoiDXkNeq15fXldecLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyOTI3MzYxNTM3OTQyNTkxODQxIj4i15LXmdep15Qg15zXntei16jXm9eqINeU16fXkdem15nXnSDXqdecINeQ15fXodeV158gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQwMjMwNTA0OTg5MDk1MzgxMCI+IteS15nXqdeUINec157Xoteo15vXqiDXlNen15HXpteZ150g16nXnCDXm9eo15jXmdehIFNEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiLigI/XkteZ16nXlCDXnNee16LXqNeb16og15TXp9eR16bXmdedINep15wg15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDAyMzA1MDQ5ODkwOTUzODEwIj4i4oCP15LXmdep15Qg15zXntei16jXm9eqINeU16fXkdem15nXnSDXqdecINeb16jXmNeZ16EgU0QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iMTgyOTI5MDcwMTY1ODk5MjM0NyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15jXoteV158g15XXnNeR15jXnCDXmNei15nXoNeUINep15wg157Xoteo15vXldeqINen15HXpteZ150g15HXkNee16bXoteZINeQ15fXodeV158g16DXqdec16TXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyMjc4MTk1ODI2MjQ5MDQ5NzIiPiLXnteX15nXp9eqINeQ15fXodeV158gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiLXnteX15nXp9eqINeb16jXmNeZ16EgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4i4oCP157Xl9eZ16fXqiDXkNeX16HXldefIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYyNTgyNjk4NjM5Mjc0MDU2Ij4i4oCP157Xl9eZ16fXqiDXm9eo15jXmdehIFNEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iODc4NDI2ODI0Njc3OTE5ODYyNyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16TXqNee15gg15DXntem16LXmSDXkNeX16HXldefINeg16nXnNek15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzQxMTMzODYzMjAwMjE5Mzg0NiI+Iten15HXnCDXnteZ15PXoiDXotecINeQ15fXodeV158g16TXoNeZ157XmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINee15nXk9eiINei15wg15DXntem16LXmSDXlNeQ15fXodeV158g15TXpNeg15nXnteZLiI8L3N0cmluZz4KQEAgLTUyNywyNSArNTM4LDI1IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15gg15HXqNeY15guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+Itep15zXmdeY15Qg15HXpNeg16EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15gg15HXpNeg16EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4i16DXlNecINeU16LXk9ek15XXqiDXldeQ15nXqdeV16jXmdedINei15HXldeoINee15vXqdeZ16jXmSBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2IiIG1zZ2lkPSI3Nzc2MTU1NDMwMjE4MjM5ODMzIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXoNeU15wg15TXoteT16TXldeqINeV15TXqNep15DXldeqINei15HXldeoINee15vXqdeZ16jXmSBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4i15nXmdep150g16TXqNeV15jXlden15XXnCBNVFAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4i157XkNek16nXqCDXkteZ16nXlCDXnNee16DXlNecINeU16rXp9efIE1UUCDXqdecINeU15zXmdeR15Qg15vXk9eZINec15nXmdep150g15DXqiDXpNeo15XXmNeV16fXldecINeULVVTQiDXqdecINeULU1UUC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVVzYiIgbXNnaWQ9IjExMTM0NTM0MzA2NDU0MDI3MjMiPiLigI/XoNeU15wg15TXoteT16TXldeqINeV15DXmdep15XXqNeZ150g16LXkdeV16gg157Xm9ep15nXqNeZIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeg15TXnCDXlNei15PXpNeV16og15XXlNeo16nXkNeV16og16LXkdeV16gg157Xm9ep15nXqNeZIFVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc010cCIgbXNnaWQ9IjQ5NTM0Njg2NzY3OTU5MTcwNDIiPiLigI/XmdeZ16nXnSDXpNeo15XXmNeV16fXldecIE1UUCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc010cCIgbXNnaWQ9IjY1MzI5NjEyMDA0ODY3OTE1NzAiPiLigI/XnteQ16TXqdeoINeS15nXqdeUINec157XoNeU15wg15TXqten158gTVRQINep15wg15TXnNeZ15HXlCDXm9eT15kg15zXmdeZ16nXnSDXkNeqINek16jXldeY15XXp9eV15wg15QtVVNCINep15wg15QtTVRQLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjQxNDgyOTA4NjA0MDA2NTkxNDYiPiLXkdeT15XXpyDXl9eV157XqNeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjY1OTc5NjQxOTEyMDgwMTY2MDUiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15zXldeYINeR16TXqNeZ15jXmSDXpteZ15XXkyDXlNeZ16fXpNeZINep15XXoNeZ150g15zXpteV16jXmiDXkdeT15nXp9eqINeU15fXldee16jXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLXlNeq16fXqdeoINeZ16nXmdeo15XXqiDXnNee16HXpNeo15kg15jXnNek15XXnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16rXp9ep16gg15zXnteh16TXqNeZINeY15zXpNeV158g15zXnNeQINeU16rXoteo15HXldeq15ouINek16LXldec15Qg15bXlSDXotep15XXmdeUINec15LXqNeV150g15zXqdeZ15fXldeqINeQ15Ug15zXl9eZ15XXkdeZ150g15zXkCDXptek15XXmdeZ150uINep15nXnSDXnNeRINep15TXk9eR16gg15zXkCDXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16rXp9ep16gg15zXnteh16TXqNeZINeX15nXqNeV150uINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotep15XXmdeV16og15zXkteo15XXnSDXnNei15zXldeZ15XXqiDXotecINeZ15PXmSDXkdeZ16bXldeiINep15nXl9eV16og15zXnNeQINeU16rXoteo15HXldeq15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjQxOTgzNDkyMTExMDg0OTc4NzkiPiLXlNeq16fXqdeoINeZ16nXmdeo15XXqiDXnNeb15wg157Xodek16gg15jXnNek15XXnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iMTY4OTAyNDkwMTUwOTk5NjgxMCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXqten16nXqCDXnNeb15wg157Xodek16gg15jXnNek15XXnyDXqdeU15XXkCwg15vXldec15wg157Xodek16jXmSDXl9eZ16jXldedLCDXnNec15Ag15TXqtei16jXkdeV16rXmi4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNeR16bXoiDXqdeZ15fXldeqINee15nXldeq16jXldeqINeV15zXkCDXl9eV16fXmdeV16og15zXqdeZ16jXldeq15kg15fXmdeo15XXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4i15TXpNei15wg15nXqdeZ16jXldeqINeU16rXp9eg16og15jXkNeR15zXmCDXnteh15XXkiBDRE1BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiLXlNek16LXnCDXmdep15nXqNeV16og15TXkteT16jXlCDXqdecINeY15zXpNeV158gQ0RNQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXpNei15nXnCDXlNen16bXkNeqIENETUEuINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXlNek16LXmdecINeU16fXpteQ16ogQ0RNQSDXnNec15Ag16bXldeo15ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+IuKAj9eU16TXotecINeZ16nXmdeo15XXqiDXlNeq16fXoNeqINeY15DXkdec15gg157XodeV15IgQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NjA0ODQ4MDk1MzE1NDIxNDI1Ij4i4oCP15TXpNei15wg15nXqdeZ16jXldeqINeU15LXk9eo15Qg16nXnCDXmNec16TXldefIENETUEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgbXNnaWQ9IjE5OTQxOTM1Mzg4MDIzMTQxODYiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16TXoteZ15wg15TXp9em15DXqiBDRE1BLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15TXpNei15nXnCDXlNen16bXkNeqIENETUEg15zXnNeQINem15XXqNeaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+Itep15zXldeYINeR15TXqteo15DXldeqINei15wg16LXk9eb15XXnyDXnteZ16fXldedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iMTEyMDc0MTU1Nzg5MTQzODg3NiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15DXpNep16gv15zXlNep15HXmdeqINeU16rXqNeQ15XXqiDXnNeS15HXmSDXoteT15vXldeg15kg157Xmden15XXnSDXnteU16jXk9eZ15UuINec15Ag157XmdeV16LXkyDXnNep15nXnteV16kg16LXnCDXmdeT15kg15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+IteS15nXqdeUINec157XkNek15nXmdeg15kg15vXoNeZ16HXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNDAyNDUyNjk2ODYzMDE5NDEyOCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeS15nXqdeUINec16fXqNeZ15DXlC/Xm9eq15nXkdeUINec157XkNek15nXmdeg15nXnSDXqdeU15XXotec15Ug16LXnCDXmdeT15kg16nXmdeo15XXqiDXlNeb16DXmdeh15QuINec15Ag157XmdeV16LXkyDXnNep15nXnteV16kg16LXnCDXmdeT15kg15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiLXkdeX16gg16jXm9eZ15HXmSBXaWRnZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kR2FkZ2V0IiBtc2dpZD0iODI2MTMyNjkzODU5OTA0OTI5MCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15nXmdeT16Ig15DXqiDXlNee16LXqNeb16og15HXkNeZ15zXlSDXpNeo15nXmNeZIFdpZGdldCDXmdeb15XXnCDXnNeU16nXqtee16kg15vXnCDXkNek15zXmden16bXmdeULiDXkNek15zXmden16bXmdeUINeR16LXnNeqINeU16jXqdeQ15Qg15bXlSDXmdeb15XXnCDXnNeh16TXpyDXnNeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeqINeS15nXqdeUINec16DXqteV16DXmdedINeQ15nXqdeZ15nXnS4g15zXkCDXnteZ15XXoteTINec16nXmdee15XXqSDXotecINeZ15PXmSDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEdhZGdldCIgbXNnaWQ9Ijc3NjkwNTMzOTAxNTg2MzQ3MSI+IuKAj9eR15fXqCDXqNeb15nXkdeZIFdpZGdldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXmdeZ15PXoiDXkNeqINeU157Xoteo15vXqiDXkdeQ15nXnNeVINek16jXmdeY15kgV2lkZ2V0INeZ15vXldecINec15TXqdeq157XqSDXm9ecINeQ16TXnNeZ16fXpteZ15QuINeQ16TXnNeZ16fXpteZ15Qg15HXotec16og15TXqNep15DXlCDXlteVINeZ15vXldecINec16HXpNenINec15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16og15LXmdep15Qg15zXoNeq15XXoNeZ150g15DXmdep15nXmdedLiDXnNeQINee15nXldei15Mg15zXqdeZ157XldepINei15wg15nXk9eZINeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iODQyMzkyMzc3NzY1OTI5MjIyOCI+Itep16DXlCDXkNeqINee16bXkSDXlNeY15zXpNeV158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15gg15HXqteb15XXoNeV16og15TXmNec16TXldefINep15wg15TXnteb16nXmdeoLiDXkNek15zXmden16bXmdeUINeR16LXnNeqINeU16jXqdeQ15Qg15bXlSDXmdeb15XXnNeUINec16LXkdeV16gg15HXmdefINeo16nXqteV16osINec15TXpNei15nXnCDXldec15vXkdeV16og15DXqiDXlNeo15PXmdeVINeR15jXnNek15XXnyDXldec15HXpteiINek16LXldec15XXqiDXoNeV16HXpNeV16og15PXldee15XXqiDXnteR15zXmSDXnNeZ15nXk9eiINeQ15XXqteaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSI5MTc4MjI4NTI0NTA3NjEwNDg2Ij4i16fXqNeZ15DXqiDXlNeh15jXmNeV16Eg15XXlNeW15TXldeqINep15wg15TXmNec16TXldefIjwvc3RyaW5nPgpAQCAtNTc2LDggKzU4Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWVab25lIiBtc2dpZD0iMjk0NTA3OTgwMTAxMzA3NzM0MCI+IteU15LXk9eoINeQ15bXldeoINeW157XnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINeQ15bXldeoINeU15bXntefINep15wg15TXmNeQ15HXnNeYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQ5OTk0MzQ4ODQzNjYzMzM5OCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXkNeW15XXqCDXlNeW157XnyDXqdecINeU15jXnNek15XXny4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjQ4MjkyNjIzNDk2OTEzODY5ODYiPiLXpNei15wg15HXqteV16gg15QtQWNjb3VudE1hbmFnZXJTZXJ2aWNlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iMTk0ODQ1NTU1MjMzMzYxNTk1NCI+IteU16jXqdeQ15Qg15bXlSDXnteQ16TXqdeo16og15zXkNek15zXmden16bXmdeUINec15HXpteiINep15nXl9eV16og15DXnCBBY2NvdW50QXV0aGVudGljYXRvcnMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSI0ODI5MjYyMzQ5NjkxMzg2OTg2Ij4i4oCP16TXotecINeR16rXldeoINeULUFjY291bnRNYW5hZ2VyU2VydmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiLigI/XlNeo16nXkNeUINeW15Ug157XkNek16nXqNeqINec15DXpNec15nXp9em15nXlCDXnNeR16bXoiDXqdeZ15fXldeqINeQ15wgQWNjb3VudEF1dGhlbnRpY2F0b3JzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QWNjb3VudHMiIG1zZ2lkPSIxMDg2Nzk1NDY3NzYwMTIyMTE0Ij4i15fXmdek15XXqSDXl9ep15HXldeg15XXqiDXkdee15vXqdeZ16giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc0MTQ5NjUzNDc2OTY2MDAyNyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeo16nXmdee15Qg16nXnCDXl9ep15HXldeg15XXqiDXlNee15XXm9eo15nXnSDXnNeY15DXkdec15guINeU15PXkdeoINei16nXldeZINec15vXnNeV15wg15fXqdeR15XXoNeV16og16nXoNeV16bXqNeVINei15wg15nXk9eZINeQ16TXnNeZ16fXpteZ15XXqiDXqdeU16rXp9eg16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDQ4MzE2ODIyNDUxODA3MzgyIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg16jXqdeZ157XlCDXqdecINeX16nXkdeV16DXldeqINeU157Xldeb16jXmdedINec15jXnNek15XXny4g15TXk9eR16gg16LXqdeV15kg15zXm9ec15XXnCDXl9ep15HXldeg15XXqiDXqdeg15XXpteo15Ug16LXnCDXmdeT15kg15DXpNec15nXp9em15nXldeqINep15TXqten16DXqi4iPC9zdHJpbmc+CkBAIC01OTAsMzcgKzYwMSwzNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4i15TXpteSINeX15nXkdeV16jXmSDXqNep16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI4MzE4OTY0NDI0Njc1OTYwOTc1Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNem15nXkiDXnteZ15PXoiDXnNeS15HXmSDXl9eZ15HXldeo15kg16jXqdeqLCDXnNee16nXnCwg15DXmdec15Ug16jXqdeq15XXqiDXp9eZ15nXnteV16og15XXnteX15XXkdeo15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iODAxODc1ODEzNjQwNDMyMzY1OCI+IteS15nXqdeqINeo16nXqiDXntec15DXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15nXpteV16ggU29ja2V0cyDXldec15TXqdeq157XqSDXkdek16jXldeY15XXp9eV15zXmSDXqNep16og157Xldeq15DXnteZ150g15DXmdep15nXqi4g15TXk9ek15PXpNefINeV15DXpNec15nXp9em15nXldeqICDXkNeX16jXldeqINee16HXpNen15XXqiDXkNee16bXoteZ150g15zXqdec15nXl9eqINeg16rXldeg15nXnSDXnNeQ15nXoNeY16jXoNeYLCDXm9eaINep15DXmdep15XXqCDXlteUINeQ15nXoNeVINeg15fXldelINec16nXnNeZ15fXqiDXoNeq15XXoNeZ150g15zXkNeZ16DXmNeo16DXmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjM0MDMwNjIxODc3Nzk3MjQxODUiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeZ16bXldeoIFNvY2tldHMg15XXnNeU16nXqtee16kg15HXpNeo15XXmNeV16fXldec15kg16jXqdeqINee15XXqteQ157XmdedINeQ15nXqdeZ16ouINeU15PXpNeT16TXnyDXldeQ16TXnNeZ16fXpteZ15XXqiAg15DXl9eo15XXqiDXnteh16TXp9eV16og15DXntem16LXmdedINec16nXnNeZ15fXqiDXoNeq15XXoNeZ150g15zXkNeZ16DXmNeo16DXmCwg15vXmiDXqdeQ15nXqdeV16gg15bXlCDXkNeZ16DXlSDXoNeX15XXpSDXnNep15zXmdeX16og16DXqteV16DXmdedINec15DXmdeg15jXqNeg15guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTA1NjYwMTU5Njc1NzUxODk2Ij4i16nXoNeUL9ei15vXkSDXlNeS15PXqNeV16og16jXqdeqINeV16rXoNeV16LXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MzMzNzk4ODg2NDEyNzE0MTkzIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINeU15LXk9eo15XXqiDXlNeo16nXqiDXldec16LXm9eRINeV15zXkdeT15XXpyDXkNeqINeb15wg16rXoNeV16LXqiDXlNeo16nXqiwg15zXk9eV15LXnteULCDXnNep16DXldeqINeQ16og15QtcHJveHkg15XXlNeZ16bXmdeQ15Qg16nXnCDXm9ecINeo16nXqiBBUE4uINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXoten15XXkSDXkNeX16gg15fXkdeZ15zXldeqINeo16nXqiwg15zXkdem16Ig15TXpNeg15nXlCDXnteX15PXqSDXqdec15TXnyDXkNeVINec16nXoNeV16og15DXldeq158sINec15zXkCDXmdeT15nXoteq15ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUzMzM3OTg4ODY0MTI3MTQxOTMiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og15TXkteT16jXldeqINeU16jXqdeqINeV15zXoteb15Eg15XXnNeR15PXldenINeQ16og15vXnCDXqteg15XXoteqINeU16jXqdeqLCDXnNeT15XXktee15QsINec16nXoNeV16og15DXqiDXlC1wcm94eSDXldeU15nXpteZ15DXlCDXqdecINeb15wg16jXqdeqIEFQTi4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNei16fXldeRINeQ15fXqCDXl9eR15nXnNeV16og16jXqdeqLCDXnNeR16bXoiDXlNek16DXmdeUINee15fXk9epINep15zXlNefINeQ15Ug15zXqdeg15XXqiDXkNeV16rXnywg15zXnNeQINeZ15PXmdei16rXmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9Ijk1ODg4NDI5MTQ1NDMyNzMwOSI+Itep16DXlCDXkNeqINen15nXqdeV16jXmdeV16og15TXqNep16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI2Nzg5MTIzOTEyNDc2NDE2MjE0Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINee16bXkSDXlNen15nXqdeV16jXmdeV16og16nXnCDXlNeo16nXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iNTk1MjU4NDk2NDM3MzAxNzk2MCI+Itep15nXoNeV15kg16nXnCDXp9eZ16nXldeo15nXldeqINen16nXldeo15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjE1MjQ0NDEzNDQ0MTIzMTk3ODAiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og157XpteRINeU16fXmdep15XXqNeZ15XXqiDXqdecINeo16nXqiDXp9ep15XXqNeULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iMTQwMDY2NjAxMjY3MTY0ODc0MSI+Itep16DXlCDXkNeqINeU15LXk9eo15XXqiDXlNep15nXnteV16kg15HXoNeq15XXoNeZINeU16jXp9eiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iNTM0NzcyOTU3ODQ2ODc0NDM3OSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXlNeS15PXqNeqINeU16nXmdee15XXqSDXkdeg16rXldeg15kg16jXp9eiLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+IteU16bXkiDXl9eZ15HXldeo15kgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNem15nXkiDXnteZ15PXoiDXotecINeo16nXqteV16ogV2ktRmksINec157XqdecLCDXlNeQ150gV2ktRmkg157Xldek16LXnCwg15vXnteVINeS150g16nXnSDXnteb16nXmdeo15kg15QtV2ktRmkg15TXnteX15XXkdeo15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiLXlNeq15fXkdeo15XXqiDXldeU16rXoNeq16fXldeqINeeLVdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXqteX15HXqCDXnNeg16fXldeT15XXqiDXkteZ16nXqiBXaS1GaSDXldec15TXqteg16rXpyDXnteU158sINeV15vXnyDXnNeR16bXoiDXqdeZ16DXldeZ15nXnSDXkdeq16bXldeo16og15TXnteb16nXmdeoINei15HXldeoINeo16nXqteV16ogV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4i15DXpNep16gg16fXkdec16og16nXmdeT15XXqNeZ150g157XqNeV15HXmdedINeRLVdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3OTY5Nzc0MDIxMjU2MzM2NTQ4Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15fXkdeZ15zXldeqINep16DXqdec15fXlSDXnNeb15wg15TXnteb16nXmdeo15nXnSDXkdeo16nXqiBXaS1GaSDXkdeQ157Xptei15XXqiDXm9eq15XXkdeV16og16nXmdeT15XXqCDXnNen15HXldem15QsINeV15zXkCDXqNenINeR15jXkNeR15zXmCDXqdec15ouINem16jXmdeb16og15TXl9ep157XnCDXkteR15XXlNeUINeZ15XXqteoINee15DXqdeoINeR157XpteRINep15DXmdeg15Ug16nXmdeT15XXqCDXnNen15HXldem15QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeX15HXmdec15XXqiDXqdeg16nXnNeX15Ug15zXm9ecINeU157Xm9ep15nXqNeZ150g15HXqNep16ogV2ktRmkg15HXkNee16bXoteV16og15vXqteV15HXldeqINep15nXk9eV16gg15zXp9eR15XXpteULCDXldec15Ag16jXpyDXkdeY15zXpNeV158g16nXnNeaLiDXpteo15nXm9eqINeU15fXqdee15wg15LXkdeV15TXlCDXmdeV16rXqCDXnteQ16nXqCDXkdee16bXkSDXqdeQ15nXoNeVINep15nXk9eV16gg15zXp9eR15XXpteULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4i15LXmdep15Qg15zXlNeS15PXqNeV16ogQmx1ZXRvb3RoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU15LXk9eZ16gg15DXqiDXqtem15XXqNeq15Ug16nXnCDXlNeY15DXkdec15gg15TXnten15XXnteZINee16HXldeSIEJsdWV0b290aCDXldeb158g15zXktec15XXqiDXnteb16nXmdeo15nXnSDXnteo15XXl9en15nXnSDXldec15HXpteiINeU16rXkNee15Qg15DXmdeq150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTMxNjgyMTU5MzMxNTQyMTM3Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeS15PXmdeoINeQ16og16rXpteV16jXqteVINep15wg15TXmNec16TXldefINeU157Xp9eV157XmSDXnteh15XXkiBCbHVldG9vdGgg15XXm9efINec15LXnNeV16og157Xm9ep15nXqNeZ150g157XqNeV15fXp9eZ150g15XXnNeR16bXoiDXlNeq15DXnteUINeQ15nXqtedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoUHJpdiIgbXNnaWQ9IjQwMDk0OTQyNDYwMDk1MTM4MjgiPiLXkNek16nXqCDXlNeq15DXnteqIEJsdWV0b290aCDXotecINeZ15PXmSDXlNeQ16TXnNeZ16fXpteZ15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiLigI/XlNem15Ig15fXmdeR15XXqNeZIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTAwMjc5ODA3NzM4NzgwMzcyNiI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXpteZ15Ig157XmdeT16Ig16LXnCDXqNep16rXldeqIFdpLUZpLCDXnNee16nXnCwg15TXkNedIFdpLUZpINee15XXpNei15wsINeb157XlSDXktedINep150g157Xm9ep15nXqNeZINeULVdpLUZpINeU157Xl9eV15HXqNeZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4i4oCP15TXqteX15HXqNeV16og15XXlNeq16DXqten15XXqiDXni1XaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16rXl9eR16gg15zXoNen15XXk9eV16og15LXmdep16ogV2ktRmkg15XXnNeU16rXoNeq16cg157XlNefLCDXldeb158g15zXkdem16Ig16nXmdeg15XXmdeZ150g15HXqtem15XXqNeqINeU157Xm9ep15nXqCDXoteR15XXqCDXqNep16rXldeqIFdpLUZpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBtc2dpZD0iMTM2ODI1Mzg3MTQ4MzI1NDc4NCI+IuKAj9eQ16TXqdeoINen15HXnNeqINep15nXk9eV16jXmdedINee16jXldeR15nXnSDXkS1XaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzk2OTc3NDAyMTI1NjMzNjU0OCI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeX15HXmdec15XXqiDXqdeg16nXnNeX15Ug15zXm9ecINeU157Xm9ep15nXqNeZ150g15HXqNep16ogV2ktRmkg15HXkNee16bXoteV16og15vXqteV15HXldeqINep15nXk9eV16gg15zXp9eR15XXpteULCDXldec15Ag16jXpyDXkdeY15DXkdec15gg16nXnNeaLiDXpteo15nXm9eqINeU15fXqdee15wg15LXkdeV15TXlCDXmdeV16rXqCDXnteQ16nXqCDXkdee16bXkSDXqdeQ15nXoNeVINep15nXk9eV16gg15zXp9eR15XXpteULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen15HXnCDXl9eR15nXnNeV16og16nXoNep15zXl9eVINec15vXnCDXlNee15vXqdeZ16jXmdedINeR16jXqdeqIFdpLUZpINeR15DXntem16LXldeqINeb16rXldeR15XXqiDXqdeZ15PXldeoINec16fXkdeV16bXlCwg15XXnNeQINeo16cg15HXmNec16TXldefINep15zXmi4g16bXqNeZ15vXqiDXlNeX16nXntecINeS15HXldeU15Qg15nXldeq16gg157XkNep16gg15HXntem15Eg16nXkNeZ16DXlSDXqdeZ15PXldeoINec16fXkdeV16bXlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aEFkbWluIiBtc2dpZD0iNjAwNjk2NzM3MzkzNTkyNjY1OSI+IuKAj9eS15nXqdeUINec15TXkteT16jXldeqIEJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeS15PXmdeoINeQ16og16rXpteV16jXqteVINep15wg15TXmNeQ15HXnNeYINeU157Xp9eV157XmSDXnteh15XXkiBCbHVldG9vdGgg15XXm9efINec15LXnNeV16og157Xm9ep15nXqNeZ150g157XqNeV15fXp9eZ150g15XXnNeR16bXoiDXlNeq15DXnteUINeQ15nXqtedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXkteT15nXqCDXkNeqINeq16bXldeo16rXlSDXqdecINeU15jXnNek15XXnyDXlNee16fXldee15kg157XodeV15IgQmx1ZXRvb3RoINeV15vXnyDXnNeS15zXldeqINee15vXqdeZ16jXmdedINee16jXldeX16fXmdedINeV15zXkdem16Ig15TXqteQ157XlCDXkNeZ16rXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aFByaXYiIG1zZ2lkPSI0MDA5NDk0MjQ2MDA5NTEzODI4Ij4i4oCP15DXpNep16gg15TXqteQ157XqiBCbHVldG9vdGgg16LXnCDXmdeT15kg15TXkNek15zXmden16bXmdeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoUHJpdiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODA0NTczNTE5MzQxNzQ2ODg1NyI+Itee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXkdem16Ig15TXqteQ157XlCDXotedINee15vXqdeZ16jXmdedINee16jXldeX16fXmdedINec15zXkCDXlNeq16LXqNeR15XXqiDXlNee16nXqtee16kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoUHJpdiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNDU3MzUxOTM0MTc0Njg4NTciPiLXnteQ16TXqdeo16og15zXkNek15zXmden16bXmdeUINec15HXpteiINeU16rXkNee15Qg16LXnSDXnteb16nXmdeo15nXnSDXnteo15XXl9en15nXnSDXnNec15Ag15TXqtei16jXkdeV16og15TXntep16rXntepLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjQxOTU5MDcwMTA2MTAyMDU3MDMiPiLXlNeq15fXkdeo15XXqiDXldeU16rXoNeq16fXldeqINeeLVdpTUFYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeT16LXqiDXlNeQ150gV2lOTUFYINee15XXpNei15wsINeb157XlSDXktedINec16fXkdecINee15nXk9eiINeU15DXnSDXqNep16rXldeqIFdpTk1BWCDXm9ec16nXlNefINee15fXldeR16jXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2ltYXhTdGF0ZSIgbXNnaWQ9IjI0MDUwNDIyNjcxMzE0OTY1NzkiPiLXqdeg15Qg15DXqiDXntem15EgV2lNQVgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMTU2NDU2NTA0MDg0MjAxODA1Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXl9eR16gg15DXqiDXlNeY15DXkdec15gg15zXqNep16rXldeqIFdpTUFYINeV15zXlNeq16DXqtenINee15TXny4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk3MDI1MDQzMDA0OTIzNzk4Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXl9eR16gg15DXqiDXlNeY15zXpNeV158g15zXqNep16rXldeqIFdpTUFYINeV15zXlNeq16DXqtenINee15TXny4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aCIgbXNnaWQ9IjYxMjc3NjkzMzYzMzkyNzY4MjgiPiLXlNeq15DXnteUINec157Xm9ep15nXqNeZIEJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXpteZ15Ig15DXqiDXqtem15XXqNeqINeULUJsdWV0b290aCDXkdeY15DXkdec15gsINeV15vXnyDXnNeZ16bXldeoINeV15zXp9eR15wg15fXmdeR15XXqNeZ150g16LXnSDXnteb16nXmdeo15nXnSDXnteV16rXkNee15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNem15nXkiDXkNeqINeq16bXldeo16og15QtQmx1ZXRvb3RoINeR15jXnNek15XXnywg15XXm9efINec15nXpteV16gg15XXnNen15HXnCDXl9eZ15HXldeo15nXnSDXotedINee15vXqdeZ16jXmdedINee15XXqteQ157XmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbmZjIiBtc2dpZD0iNDQyMzM1MTI3NDc1Nzg3Njk1MyI+Itep15zXldeYINeRLU5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjQxOTU5MDcwMTA2MTAyMDU3MDMiPiLigI/XlNeq15fXkdeo15XXqiDXldeU16rXoNeq16fXldeqINeeLVdpTUFYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeT16LXqiDXlNeQ150gV2lOTUFYINee15XXpNei15wsINeb157XlSDXktedINec16fXkdecINee15nXk9eiINeU15DXnSDXqNep16rXldeqIFdpTk1BWCDXm9ec16nXlNefINee15fXldeR16jXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2ltYXhTdGF0ZSIgbXNnaWQ9IjI0MDUwNDIyNjcxMzE0OTY1NzkiPiLigI/Xqdeg15Qg15DXqiDXntem15EgV2lNQVgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMTU2NDU2NTA0MDg0MjAxODA1Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXl9eR16gg15DXqiDXlNeY15DXkdec15gg15zXqNep16rXldeqIFdpTUFYINeV15zXlNeq16DXqtenINee15TXny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk3MDI1MDQzMDA0OTIzNzk4Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXl9eR16gg15DXqiDXlNeY15zXpNeV158g15zXqNep16rXldeqIFdpTUFYINeV15zXlNeq16DXqtenINee15TXny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aCIgbXNnaWQ9IjYxMjc3NjkzMzYzMzkyNzY4MjgiPiLigI/XlNeq15DXnteUINec157Xm9ep15nXqNeZIEJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXpteZ15Ig15DXqiDXqtem15XXqNeqINeULUJsdWV0b290aCDXkdeY15DXkdec15gsINeV15vXnyDXnNeZ16bXldeoINeV15zXp9eR15wg15fXmdeR15XXqNeZ150g16LXnSDXnteb16nXmdeo15nXnSDXnteV16rXkNee15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNem15nXkiDXkNeqINeq16bXldeo16og15QtQmx1ZXRvb3RoINeR15jXnNek15XXnywg15XXm9efINec15nXpteV16gg15XXnNen15HXnCDXl9eZ15HXldeo15nXnSDXotedINee15vXqdeZ16jXmdedINee15XXqteQ157XmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbmZjIiBtc2dpZD0iNDQyMzM1MTI3NDc1Nzg3Njk1MyI+IuKAj9ep15zXldeYINeRLU5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXoNeU15wg16rXp9ep15XXqNeqINei150g16rXkteZ150sINeb16jXmNeZ16HXmdedINeV16fXldeo15DXmdedINee16HXldeSIFwn16rXp9ep15XXqNeqINee15jXldeV15cg16fXpteoXCcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSIzNTk4NDk2MzAxNDg2NDM5MjU4Ij4i15HXmdeY15XXnCDXoNei15nXnNeqINeU157XodeaINep15zXmiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjYwMzQyMDMwNjUwNzcxMjI5OTIiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16nXkdeZ16og15DXqiDXoNei15nXnNeqINeU157Xp9ep15nXnSDXldeb15wg15DXntem16LXmSDXkNeR15jXl9eUINee16nXldeZ15og15TXnteR15XXodehINei15wg16HXmdeh157XlC4g15zXk9eV15LXnteULCDXlNeY15zXpNeV158g157XqdeR15nXqiDXkNeqINeg16LXmdec16og15TXnten16nXmdedINeR16LXqiDXp9eR15zXlCDXqdecINep15nXl9eqINeY15zXpNeV158g16DXm9eg16HXqiwg15XXnNeQ15fXqCDXnteb158g157XpNei15nXnCDXnteX15PXqSDXkNeqINeg16LXmdec16og15TXnten16nXmdedINei150g16HXmdeV150g15TXqdeZ15fXlC4iPC9zdHJpbmc+CkBAIC02MzgsMTQgKzY0OSwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI2NTk2MTQ2MDAzMzg5MDQyNDMiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeQ16og15vXnCDXlNee15nXnNeZ150sINeU16nXnteV16og15XXlNeR15nXmNeV15nXmdedINep15TXntep16rXntepINeQ15fXodefINeR157Xmdec15XXnyDXlNee16nXqtee16kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4i15TXldeh16TXqiDXnteZ15zXmdedINec157Xmdec15XXnyDXnteV15LXk9eoLdee16nXqtee16kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MTg1Mzg1NzE2MjU1MDY1MjkxIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXm9eq15XXkSDXnteZ15zXmdedINeX15PXqdeV16og15HXnteZ15zXldefINeU157Xqdeq157XqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY3Mjc1MDk1MTU5NDA1NDY4Ij4i16fXqNeZ15DXqiDXlNeq15XXm9efINep15wg15DXl9eh15XXnyDXlC1VU0Ig16nXnNeaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4ODE1NjQ2MjkzNDk3Nzk0MCI+Iten16jXmdeQ16og15TXqteV15vXnyDXqdecINeb16jXmNeZ16Eg15QtU0Qg16nXnNeaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ2OTg4NzEyNTk4Mzg2MDc5Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXkNeqINeq15XXm9efINeQ15fXodeV158g15QtVVNCINep15zXmi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYwNzM2MjQ3MzY1NDk3NTQxMSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15DXqiDXqteV15vXnyDXm9eo15jXmdehINeULVNEINep15zXmi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijg0ODU5NzkwNjIyNTQ2NjY3NDgiPiLXqdeZ16DXldeZINeQ15Ug157Xl9eZ16fXlCDXqdecINeq15XXm9efINeQ15fXodeV158g15QtVVNCINep15zXmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4ODA1NjkzNjMwMDUwNDU4NzYzIj4i16nXmdeg15XXmSDXkNeVINee15fXmden15Qg16nXnCDXqteV15vXnyDXm9eo15jXmdehINeULVNEINep15zXmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeb16rXldeRINec15TXqten158g15TXkNeX16HXldefINee16HXldeSIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeb16rXldeRINec15vXqNeY15nXoSDXlC1TRC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY3Mjc1MDk1MTU5NDA1NDY4Ij4i4oCP16fXqNeZ15DXqiDXlNeq15XXm9efINep15wg15DXl9eh15XXnyDXlC1VU0Ig16nXnNeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4ODE1NjQ2MjkzNDk3Nzk0MCI+IuKAj9en16jXmdeQ16og15TXqteV15vXnyDXqdecINeb16jXmNeZ16Eg15QtU0Qg16nXnNeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ2OTg4NzEyNTk4Mzg2MDc5Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXkNeqINeq15XXm9efINeQ15fXodeV158g15QtVVNCINep15zXmi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYwNzM2MjQ3MzY1NDk3NTQxMSI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15DXqiDXqteV15vXnyDXm9eo15jXmdehINeULVNEINep15zXmi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijg0ODU5NzkwNjIyNTQ2NjY3NDgiPiLigI/XqdeZ16DXldeZINeQ15Ug157Xl9eZ16fXlCDXqdecINeq15XXm9efINeQ15fXodeV158g15QtVVNCINep15zXmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4ODA1NjkzNjMwMDUwNDU4NzYzIj4i4oCP16nXmdeg15XXmSDXkNeVINee15fXmden15Qg16nXnCDXqteV15vXnyDXm9eo15jXmdehINeULVNEINep15zXmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeb16rXldeRINec15TXqten158g15TXkNeX16HXldefINee16HXldeSIFVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeb16rXldeRINec15vXqNeY15nXoSDXlC1TRC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+Itep16DXlC/XnteX16cg16rXldeb158g16nXnCDXkNeX16HXldefINee15PXmdeUINek16DXmdee15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxODkxNjA1OTc2OTg1MjkxODUiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og15TXqteV15vXnyDXqdecINeQ157Xptei15kg15TXkNeX16HXldefINeU16TXoNeZ157XmSDXnNee15PXmdeULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3NzgzMTg1OTg0NDg4NDk4MjkiPiLXoNeZ15TXldecINep15wg15DXl9eh15XXnyDXnteh157Xm9eZ150iPC9zdHJpbmc+CkBAIC02NTUsNyArNjY2LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU2NTY0ODcyNjQ4MTk2Njk4MjQiPiLXkteZ16nXlCDXnNee16LXqNeb16og15TXp9eR16bXmdedINeR16fXldeR16Ug15TXqdee15XXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NTc4OTY3NjQyMjY1NTUwOTU1Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXldec15vXqteV15Eg15HXntei16jXm9eqINeU16fXkdem15nXnSDXqdecINeU16fXkdem15nXnSDXlNep157Xldeo15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZV9zaXAiIG1zZ2lkPSI1OTg2OTUyMzYyNzk1ODcwNTAyIj4i15HXpteiL9en15HXnCDXqdeZ15fXldeqINeQ15nXoNeY16jXoNeYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlX3NpcCIgbXNnaWQ9IjQ3MTc2MzIwMDAwNjI2NzQyOTQiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16nXqtee16kg15HXqdeZ16jXldeqIFNJUCDXm9eT15kg15zXkdem16Iv15zXp9eR15wg16nXmdeX15XXqiDXkNeZ16DXmNeo16DXmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXqdeq157XqSDXkdep15nXqNeV16ogU0lQINeb15PXmSDXnNeR16bXoi/XnNen15HXnCDXqdeZ15fXldeqINeQ15nXoNeY16jXoNeYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZF9jYWxsX3NlcnZpY2UiIG1zZ2lkPSI2NzI0MDA5NzI2NjcxMjQ2NTUxIj4i16bXldeoINeQ15nXoNeY16jXkNen16bXmdeUINei150g157XodeaINep15nXl9eUINeg15vXoNeh16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kX2NhbGxfc2VydmljZSIgbXNnaWQ9Ijg3MzI1NDc2NjI0NDI1NzI0MzUiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen15HXldeiINee16rXmSDXldeQ15nXmiDXlNee16nXqtee16kg15nXqNeQ15Qg16nXmdeX15Qg16DXm9eg16HXqiDXotecINeU157XodeaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4i16fXqNeZ15DXqiDXoNeq15XXoNeZINep15nXnteV16kg15TXmdeh15jXldeo15nXmdedINeR16jXqdeqIjwvc3RyaW5nPgpAQCAtNjY0LDggKzY3NSw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iNzUzNzU4Njc3MTU1OTM3MDY2OCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16DXlNecINee15PXmdeg15nXldeqINeU16jXqdeqINec15TXkteT15nXqCDXm9ec15zXmdedINeh16TXpteZ16TXmdeZ150t15zXkNek15zXmden16bXmdeULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1MDg4MjE3MzA5MDg4NzI5NjUwIj4i16nXoNeUINeg15nXlNeV15wg15fXqdeR15XXoNeV16og16nXnCDXqdeZ157XldepINeR16jXqdeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1NDQzNDEyODY2NzQ2MTk4MTIzIj4i15TXqNep15DXlCDXlteVINee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINeQ15XXpNefINeU15fXmdep15XXkSDXqdecINeg16rXldeg15kg16nXmdee15XXqSDXkdeo16nXqiDXnteV15wg15vXnCDXkNek15zXmden16bXmdeULiDXnNeQINee15nXldei15Mg15zXqdeZ157XldepINeR15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iMzY1ODUyNzIxNDkxNDk1OTc0OSI+Itep15nXoNeV15kg16nXnCDXodeZ157XoNeZIFNvY2tldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iNzY1NTU2ODQzMzY5NjM1NjU3OCI+IteU15TXqNep15DXlCDXlNeW15Ug157XkNek16nXqNeqINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeh15nXnteg15kgU29ja2V0INei15HXldeoINeg15nXqteV15EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iMzY1ODUyNzIxNDkxNDk1OTc0OSI+IuKAj9ep15nXoNeV15kg16nXnCDXodeZ157XoNeZIFNvY2tldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iNzY1NTU2ODQzMzY5NjM1NjU3OCI+IuKAj9eU15TXqNep15DXlCDXlNeW15Ug157XkNek16nXqNeqINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeh15nXnteg15kgU29ja2V0INei15HXldeoINeg15nXqteV15EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI3NjczNDE2NDg3ODczNDMyMjY4Ij4i15LXmdep15Qg15zXlNeq16jXkNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNDU4NDU3NzQyNjgzNDMxMzg3Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXkNeX15bXqCwg15zXkdeT15XXpyDXldec157Xl9eV16cg15TXqteo15DXldeqLCDXm9eV15zXnCDXm9eQ15zXlCDXqdek15XXqNeh157XlSDXotecINeZ15PXmSDXkNek15zXmden16bXmdeV16og15DXl9eo15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI3MDU3NzY0NzQyMjExNjU2NjU0Ij4i15DXmdeS15XXkyDXnNep15nXqNeV16og16nXnCDXnteQ15bXmdefINec15TXqteo15DXldeqIjwvc3RyaW5nPgpAQCAtNjg2LDE2ICs2OTcsMTYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93aXBlRGF0YSIgbXNnaWQ9IjM5MTA1NDU0NDY3NTg2Mzk3MTMiPiLXnteX16cg15DXqiDXm9ecINeU16DXqteV16DXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMwNjE4NDA5NjA2Nzc1Njg3NiI+Itee15fXpyDXkNeqINeg16rXldeg15kg15TXmNeQ15HXnNeYINec15zXkCDXkNeW15TXqNeUINei15wg15nXk9eZINeR15nXpteV16Ig15DXmdek15XXoSDXoNeq15XXoNeZINeZ16bXqNefLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGEiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MDk2ODk1NjA0NTc0MTg4MzkxIj4i157Xl9enINeQ16og16DXqteV16DXmSDXlNeY15zXpNeV158g15zXnNeQINeQ15bXlNeo15Qg16LXnCDXmdeT15kg15HXmdem15XXoiDXkNeZ16TXldehINeg16rXldeg15kg15nXpteo158uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iMjc4NDgyODI5Mzc0Nzc5MTQ0NiI+IteU15LXk9eoINeQ16og16nXqNeqINeULVByb3h5INeU15vXnNec15kg16nXnCDXlNee15vXqdeZ16giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+IteU15LXk9eoINep15nXnteV16kg15HXqdeo16og15QtUHJveHkg15TXktec15XXkdec15kg16nXnCDXlNee15vXqdeZ16gg15vXkNep16gg15TXnteT15nXoNeZ15XXqiDXnteV16TXotec16ouINeo16cg157XoNeU15wg15TXnteb16nXmdeoINeU16jXkNep15XXnyDXnteS15PXmdeoINeQ16og16nXqNeqINeULVByb3h5INeU15LXnNeV15HXnNeZINeU16TXoteZ15wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iMjc4NDgyODI5Mzc0Nzc5MTQ0NiI+IuKAj9eU15LXk9eoINeQ16og16nXqNeqINeULVByb3h5INeU15vXnNec15kg16nXnCDXlNee15vXqdeZ16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+IuKAj9eU15LXk9eoINep15nXnteV16kg15HXqdeo16og15QtUHJveHkg15TXktec15XXkdec15kg16nXnCDXlNee15vXqdeZ16gg15vXkNep16gg15TXnteT15nXoNeZ15XXqiDXnteV16TXotec16ouINeo16cg157XoNeU15wg15TXnteb16nXmdeoINeU16jXkNep15XXnyDXnteS15PXmdeoINeQ16og16nXqNeqINeULVByb3h5INeU15LXnNeV15HXnNeZINeU16TXoteZ15wuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iODg1Mjc5MTUxODQ3MjU0MDU2Ij4i15TXkteT16gg16rXkNeo15nXmiDXqtek15XXkteUINec16HXmdeh157XlCDXqdecINeg16LXmdec16og15TXnteh15oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iMTcyOTcyNTIyNjMxNDY5MTU5MSI+Itep15zXldeYINeR16rXk9eZ16jXldeqINep15HXlCDXmdepINec16nXoNeV16og15DXqiDXlNeh15nXodee15Qg16nXnCDXoNei15nXnNeqINeU157XodeaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iODkwMTMyNjE5OTkwOTEzMjkxNSI+IteU15LXk9eoINeU16bXpNeg16og15DXl9eh15XXnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9IjI2Mzc3MzIxMTUzMjUzMTY5OTIiPiLXk9eo15XXqSDXqdeg16rXldeg15kg15DXpNec15nXp9em15nXldeqINee15DXldeX16HXoNeV16og15nXlNeZ15Ug157Xldem16TXoNeZ150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSI2Mzk1MzAxMDIzMTUyMjk3ODI2Ij4i15TXqdeR16og157Xptec157XldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+Itee16DXoiDXqdeZ157XldepINeR15vXnCDXlNee16bXnNee15XXqiDXqdeR157Xm9ep15nXqC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiLXlNep15HXqiDXqteb15XXoNeV16og15EtS2V5Z3VhcmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVLZXlndWFyZEZlYXR1cmVzIiBtc2dpZD0iMzQ2NzA4MjI3MjE4NjUzNDYxNCI+Itee16DXoiDXqdeZ157XldepINeR16rXm9eV16DXldeqINee16HXldeZ157XldeqINeRLUtleWd1YXJkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjI2NjMyOTEwNDU0MjYzODgwMiI+IuKAj9eU16nXkdeqINeq15vXldeg15XXqiDXkS1LZXlndWFyZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIzNDY3MDgyMjcyMTg2NTM0NjE0Ij4i4oCP157XoNeiINep15nXnteV16kg15HXqteb15XXoNeV16og157XodeV15nXnteV16og15EtS2V5Z3VhcmQuIjwvc3RyaW5nPgogICA8c3RyaW5nLWFycmF5IG5hbWU9InBob25lVHlwZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4OTAxMDk4MzM2NjU4NzEwMzU5Ij4i15HXmdeqIjwvaXRlbT4KICAgICA8aXRlbSBtc2dpZD0iODY5OTIzNjUwNTI3MTM2NjE1Ij4i16DXmdeZ15MiPC9pdGVtPgpAQCAtODA5LDE0ICs4MjAsMTUgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiLXk9ejINeU15HXmdeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+Itei15HXldeT15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IteQ15fXqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IteU16fXnNeTINen15XXkyBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLXlNen15zXkyDXkNeqINen15XXkyDXlC1QVUsg15XXp9eV15MgINeULVBJTiDXlNeX15PXqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4i16fXldeTIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i16fXldeTIFBJTiDXl9eT16kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4i15zXkCDXoNee16bXkNeUINeQ16TXnNeZ16fXpteZ15Qg15zXlNem15LXqiDXlNeq15XXm9efINeU15bXlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLigI/XlNen15zXkyDXp9eV15MgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i4oCP15TXp9ec15Mg15DXqiDXp9eV15Mg15QtUFVLINeV16fXldeTICDXlC1QSU4g15TXl9eT16kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IuKAj9en15XXkyBQVUsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IuKAj9en15XXkyBQSU4g15fXk9epIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i15LXoiDXm9eT15kg15zXlNen15zXmdeTINeQ16og15TXodeZ16HXnteUIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i15TXp9ec15Mg16HXmdeh157XlCDXnNeR15nXmNeV15wg15TXoNei15nXnNeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i15TXp9ec15Mg16fXldeTIFBJTiDXnNeR15nXmNeV15wg15TXoNei15nXnNeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i16fXldeTIFBJTiDXqdeS15XXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuKAj9eU16fXnNeTINen15XXkyBQSU4g15zXkdeZ15jXldecINeU16DXoteZ15zXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IuKAj9en15XXkyBQSU4g16nXkteV15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i15vXk9eZINec15HXmNecINeQ16og15TXoNei15nXnNeULCDXnNeX16Ug16LXnCBcJ9eq16TXqNeZ15hcJyDXldec15DXl9eoINee15vXnyDXotecIDAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxfZGlhbG9nX251bWJlcl9mb3JfZGlzcGxheSIgbXNnaWQ9IjY5NjE5MjEwMzE5NTA5MDk3MCI+Itee16HXpNeoINeX15nXqNeV150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg5NjM4MzkyNDI1NjU2NTMxOTIiPiLXkNeZ158g16nXmdeo15XXqiI8L3N0cmluZz4KQEAgLTgzNCwxMyArODQ2LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiLXmNei15XXnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYmF0dGVyeV9zaG9ydCIgbXNnaWQ9IjQ0NzcyNjQ4NDkzODY4NTAyNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9sb3dfYmF0dGVyeSIgbXNnaWQ9IjE0ODI4NzM5ODE5MTkyNDk3NDAiPiLXl9eR16gg15DXqiDXlNee15jXotefLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTk0MzkyNzc4MTkyMTUzOTkiPiLXkNeZ158g15vXqNeY15nXoSBTSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MTY1OTE5NjA5NTc5MTQ3NCI+IteQ15nXnyDXm9eo15jXmdehIFNJTSDXkdeY15DXkdec15guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4NjkyMDU4NTY5NTE2OTA3OCI+IteQ15nXnyDXm9eo15jXmdehIFNJTSDXkdeY15zXpNeV158uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4i15TXm9eg16Eg15vXqNeY15nXoSBTSU0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjM1MjY1NzMwOTkwMTkzMTk0NzIiPiLXm9eo15jXmdehINeULVNJTSDXl9eh16gg15DXlSDXqdec15Ag16DXmdeq158g15zXp9eo15XXkCDXkNeV16rXlS4g15TXm9eg16Eg15vXqNeY15nXoSBTSU0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4i15zXkCDXoNeZ16rXnyDXnNeU16nXqtee16kg15HXm9eo15jXmdehIFNJTSDXlteULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiLXm9eo15jXmdehINeULVNJTSDXqdec15og15TXldep15HXqiDXnNem157Xmdeq15XXqi5cbtek16DXlCDXnNeh16TXpyDXlNep15nXqNeV16og15TXkNec15fXldeY15kg16nXnNeaINec16fXkdec16og15vXqNeY15nXoSBTSU0g15DXl9eoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTk0MzkyNzc4MTkyMTUzOTkiPiLigI/XkNeZ158g15vXqNeY15nXoSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MTY1OTE5NjA5NTc5MTQ3NCI+IuKAj9eQ15nXnyDXm9eo15jXmdehIFNJTSDXkdeY15DXkdec15guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4NjkyMDU4NTY5NTE2OTA3OCI+IuKAj9eQ15nXnyDXm9eo15jXmdehIFNJTSDXkdeY15zXpNeV158uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4i4oCP15TXm9eg16Eg15vXqNeY15nXoSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjM1MjY1NzMwOTkwMTkzMTk0NzIiPiLigI/Xm9eo15jXmdehINeULVNJTSDXl9eh16gg15DXlSDXqdec15Ag16DXmdeq158g15zXp9eo15XXkCDXkNeV16rXlS4g15TXm9eg16Eg15vXqNeY15nXoSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4i4oCP15zXkCDXoNeZ16rXnyDXnNeU16nXqtee16kg15HXm9eo15jXmdehIFNJTSDXlteULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiLigI/Xm9eo15jXmdehINeULVNJTSDXqdec15og15TXldep15HXqiDXnNem157Xmdeq15XXqi5cbtek16DXlCDXnNeh16TXpyDXlNep15nXqNeV16og15TXkNec15fXldeY15kg16nXnNeaINec16fXkdec16og15vXqNeY15nXoSBTSU0g15DXl9eoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDE1OTQ5MDUxNTI3NDY4ODYiPiLXnNeX16bXnyDXlNeo16bXldei15Qg15TXp9eV15PXnteqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYwODkyOTc2NTA0ODEyOTIzNjMiPiLXnNeX16bXnyDXlNeo16bXldei15Qg15TXkdeQ15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTkwODg3ODY3ODAxMjgwMDEiPiLXnNeX16bXnyDXlNeU16nXlNeZ15QiPC9zdHJpbmc+CkBAIC04NDgsMTUgKzg2MCwxNSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1NjIzMTgzNzg3NjY5ODc2MDEiPiLXnNeX16bXnyDXlNei16bXmdeo15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbHNfb25seSIgbXNnaWQ9IjY3MzM5NzgzMDQzODYzNjU0MDciPiLXqdeZ15fXldeqINeX15nXqNeV150g15HXnNeR15MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIxNDMzODkyMjQ5ODYwMjg1MDEiPiLXqNep16og16DXoteV15zXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9Ijc0NDE3OTczMzk5NzYyMzAiPiLXm9eo15jXmdehIFNJTSDXoNei15XXnCDXkdeQ157Xptei15XXqiBQVUsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNzQ0MTc5NzMzOTk3NjIzMCI+IuKAj9eb16jXmNeZ16EgU0lNINeg16LXldecINeR15DXntem16LXldeqIFBVSy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiLXoteZ15nXnyDXkdee15PXqNeZ15og15zXntep16rXntepINeQ15Ug16TXoNeUINec16nXmdeo15XXqiDXlNec16fXldeX15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiLXm9eo15jXmdehINeULVNJTSDXoNei15XXnC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiLXnteR15jXnCDXoNei15nXnNeUINep15wg15vXqNeY15nXoSBTSU3igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiLigI/Xm9eo15jXmdehINeULVNJTSDXoNei15XXnC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiLigI/XnteR15jXnCDXoNei15nXnNeUINep15wg15vXqNeY15nXoSBTSU3igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjY0ODE2MjM4MzAzNDQxMDcyMjIiPiLXqdeo15jXmNeqINeQ16og16fXlSDXkdeZ15jXldecINeU16DXoteZ15zXlCDXkdeQ15XXpNefINep15LXldeZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uIFxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSIyNzI1OTczMjg2MjM5MzQ0NTU1Ij4i15TXp9ec15PXqiDXodeZ16HXnteUINep15LXldeZ15QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS5cblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjYyMTY2NzI3MDY1NDU2OTY5NTUiPiLXlNen15zXk9eqINen15XXkyBQSU4g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS5cblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjkxOTE2MTE5ODQ2MjU0NjA4MjAiPiLXqdeo15jXmNeqINeR15DXldek158g16nXkteV15kg15DXqiDXp9eVINeR15nXmNeV15wg15TXoNei15nXnNeUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uINec15DXl9eoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg16rXqteR16fXqSDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNeQ15HXnNeYINeR15DXntem16LXldeqINek16jXmNeZINeU15vXoNeZ16HXlCDXqdec15og15wtR29vZ2xlLlxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiLXqdeo15jXmNeqINeQ16og16fXlSDXkdeZ15jXldecINeU16DXoteZ15zXlCDXkdeQ15XXpNefINep15LXldeZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg16rXqteR16fXqSDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNec16TXldefINeR15DXntem16LXldeqINek16jXmNeZINeU15vXoNeZ16HXlCDXqdec15og15wtR29vZ2xl4oCPLlxuXG4g16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjYyMTY2NzI3MDY1NDU2OTY5NTUiPiLigI/XlNen15zXk9eqINen15XXkyBQSU4g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS5cblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjkxOTE2MTE5ODQ2MjU0NjA4MjAiPiLigI/Xqdeo15jXmNeqINeR15DXldek158g16nXkteV15kg15DXqiDXp9eVINeR15nXmNeV15wg15TXoNei15nXnNeUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uINec15DXl9eoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg16rXqteR16fXqSDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNeQ15HXnNeYINeR15DXntem16LXldeqINek16jXmNeZINeU15vXoNeZ16HXlCDXqdec15og15wtR29vZ2xlLlxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiLigI/Xqdeo15jXmNeqINeQ16og16fXlSDXkdeZ15jXldecINeU16DXoteZ15zXlCDXkdeQ15XXpNefINep15LXldeZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg16rXqteR16fXqSDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNec16TXldefINeR15DXntem16LXldeqINek16jXmNeZINeU15vXoNeZ16HXlCDXqdec15og15wtR29vZ2xl4oCPLlxuXG4g16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTI4MTA2Mzk5NzQ1NzU1NjA0Ij4i15HXmdem16LXqiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINep15LXldeZ15nXnSDXnNeR15nXmNeV15wg16DXoteZ15zXqiDXlNeY15DXkdec15guINec15DXl9eoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg15TXmNeQ15HXnNeYINeZ16LXkdeV16gg15DXmdek15XXoSDXnNeR16jXmdeo16og15TXnteX15PXnCDXqdecINeU15nXpteo158g15XXm9ecINeg16rXldeg15kg15TXntep16rXntepINeZ15DXkdeT15UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjAzNTY1MTQyMTU2ODI2NTY1Ij4i15HXmdem16LXqiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINep15LXldeZ15nXnSDXnNeR15nXmNeV15wg16DXoteZ15zXqiDXlNeY15zXpNeV158uINec15DXl9eoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg15TXmNec16TXldefINeZ16LXkdeV16gg15DXmdek15XXoSDXnNeR16jXmdeo16og15TXnteX15PXnCDXqdecINeU15nXpteo158g15XXm9ecINeg16rXldeg15kg15TXntep16rXntepINeZ15DXkdeT15UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjgwODczNTE2NDkzOTM0MzY1Ij4i15HXmdem16LXqiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXqdeS15XXmdeZ150g15zXkdeZ15jXldecINeg16LXmdec16og15TXmNeQ15HXnNeYLiDXlNeY15DXkdec15gg15nXoteR15XXqCDXm9ei16og15DXmdek15XXoSDXnNeR16jXmdeo16og15TXnteX15PXnCDXqdecINeU15nXpteo158uIjwvc3RyaW5nPgpAQCAtODY1LDEyICs4NzcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSIyNjI2OTk5NDQ5NjEwNjk1OTMwIj4i16nXm9eX16og15DXqiDXlNen15U/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fZm9yZ290X3BhdHRlcm4iIG1zZ2lkPSIyNTg4NTIxNTAxMTY2MDMyNzQ3Ij4i15HXmdeY15XXnCDXoNei15nXnNeqINeX16nXkdeV158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiLXkdeV16bXoteVINeg15nXodeZ15XXoNeV16og16jXkdeZ150g157Xk9eZINec16nXqNeY15XXmCDXp9eVINeR15nXmNeV15wg16DXoteZ15zXlC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4i15vXk9eZINec15HXmNecINeQ16og15TXoNei15nXnNeULCDXlNeZ15vXoNehINeR15DXntem16LXldeqINeX16nXkdeV158gR29vZ2xlINep15zXmi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4i4oCP15vXk9eZINec15HXmNecINeQ16og15TXoNei15nXnNeULCDXlNeZ15vXoNehINeR15DXntem16LXldeqINeX16nXkdeV158gR29vZ2xlINep15zXmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iODg0Njg4MTQyNDEwNjQ4NDQ0NyI+Itep150g157Xqdeq157XqSAo15PXldeQXCLXnCkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iNTk1ODAyODM4Mzk1NDczODUyOCI+Iteh15nXodee15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNzEzMDg5MzY5NDc5NTc4NjMwMCI+Iteb16DXmdeh15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iMTM2NDA1MTQ3MzM0NzQ4NTkwOCI+Itep150g157Xqdeq157XqSDXkNeVINeh15nXodee15Qg15zXkCDXl9eV16fXmdeZ150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iMTY5NjkyNDc2MzY5MDM3OTA3MyI+Itep15vXl9eqINeQ16og16nXnSDXlNee16nXqtee16kg15DXlSDXlNeh15nXodee15Q/XG7Xkden16gg15HXm9eq15XXkdeqICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSIxNjk2OTI0NzYzNjkwMzc5MDczIj4i4oCP16nXm9eX16og15DXqiDXqdedINeU157Xqdeq157XqSDXkNeVINeU16HXmdeh157XlD9cbteR16fXqCDXkdeb16rXldeR16ogIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iNzExNDYyNzM1MTI4NjkzMzg2NyI+IteR15XXk9enLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl91bmxvY2tfbGFiZWwiIG1zZ2lkPSI3Mzc0NDA0ODMyMjA2NjcwNTQiPiLXkdeY15wg16DXoteZ15zXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4i16fXldecINek15XXotecIjwvc3RyaW5nPgpAQCAtODc5LDI0ICs4OTEsMjQgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2xlYXJlZCIgbXNnaWQ9IjU1ODM0Nzk3MjEwMDE2Mzk1NzkiPiLXlNeq15HXoNeZ16og16DXnteX16fXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2VsbF9hZGRlZCIgbXNnaWQ9IjY3NTYwMzEyMDgzNTkyOTI0ODciPiLXlNeq15Ag16DXldeh16MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2RldGVjdGVkIiBtc2dpZD0iNDk4ODczMDg5NTU1NDA1NzA1OCI+IteU16rXkdeg15nXqiDXlNeV16nXnNee15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIFdpZGdldCAlMiRkINee16rXldeaICUzJGQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IteU15XXodejIFdpZGdldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IuKAjyUxJHMuIFdpZGdldCAlMiRkINee16rXldeaICUzJGQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuKAj9eU15XXodejIFdpZGdldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+Iteo15nXpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4i15DXlteV16gg15HXmdeY15XXnCDXlNeg16LXmdec15Qg15TXldeo15fXkS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiLXkNeW15XXqCDXkdeZ15jXldecINeU16DXoteZ15zXlCDXm9eV15XXpS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiJXaWRnZXQg4oCPPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4i4oCPV2lkZ2V0IOKAjzx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiLXkdeV15fXqCDXntep16rXntep15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+Iteh15jXmNeV16EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLXntem15zXnteUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+Itek16fXk9eZINee15PXmdeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLXodeZ15PXldeoINee15fXk9epINep15wgV2lkZ2V0cyDXlNeq15fXmdecLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+Iteh15nXk9eV16gg157Xl9eT16kg16nXnCBXaWRnZXRzINeU16HXqteZ15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IldpZGdldCDigI88eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDXoNee15fXpy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+IuKAj9eh15nXk9eV16gg157Xl9eT16kg16nXnCBXaWRnZXRzINeU16rXl9eZ15wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i4oCP16HXmdeT15XXqCDXnteX15PXqSDXqdecIFdpZGdldHMg15TXodeq15nXmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4i4oCPV2lkZ2V0IOKAjzx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INeg157Xl9enLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IteU16jXl9eRINeQ16og15DXlteV16gg15HXmdeY15XXnCDXlNeg16LXmdec15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i15HXmdeY15XXnCDXoNei15nXnNeUINeR15DXntem16LXldeqINeU16HXmNeULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i15HXmdeY15XXnCDXoNei15nXnNeUINeR15DXntem16LXldeqINem15nXldeoINen15UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiLXkdeZ15jXldecINeg16LXmdec15Qg15HXkNee16bXoteV16og15bXmdeU15XXmSDXpNeg15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4i15HXmdeY15XXnCDXoNei15nXnNeUINeR15DXntem16LXldeqINee16HXpNeoIFBJTi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4i4oCP15HXmdeY15XXnCDXoNei15nXnNeUINeR15DXntem16LXldeqINee16HXpNeoIFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLXkdeZ15jXldecINeg16LXmdec15Qg15HXkNee16bXoteV16og16HXmdeh157XlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLXkNeW15XXqCDXpteZ15XXqCDXp9eVLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLXkNeW15XXqCDXlNeh15jXlC4iPC9zdHJpbmc+CkBAIC05MTAsOCArOTIyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImhvdXJfYW1wbSIgbXNnaWQ9IjQ1ODQzMzgwODM1MjkzNTU5ODIiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lUDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJob3VyX2NhcF9hbXBtIiBtc2dpZD0iMjA4MzQ2NTk5Mjk0MDQ0NDM2NiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IkFNUE0iPiVwPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X2ZhaWxlZCIgbXNnaWQ9IjU0MTAyNzAzMjkxMTQyMTIwNDEiPiLXkdeT15nXp9eqINeU15nXpteo158g16DXm9ep15zXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vdF9zeXN0ZW0iIG1zZ2lkPSI0NDM1MjAxNjU2NzY3Mjc2NzIzIj4i15TXpNei15XXnNeUIEZBQ1RPUllfVEVTVCDXoNeq157Xm9eqINeo16cg16LXkdeV16gg15fXkdeZ15zXldeqINep15TXldeq16fXoNeVINeRLeKAji9zeXN0ZW0vYXBwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+Itec15Ag16DXntem15DXlCDXl9eR15nXnNeUINeU157Xodek16fXqiDXkNeqINeU16TXoteV15zXlCBGQUNUT1JZX1RFU1QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiLigI/XlNek16LXldec15QgRkFDVE9SWV9URVNUINeg16rXnteb16og16jXpyDXoteR15XXqCDXl9eR15nXnNeV16og16nXlNeV16rXp9eg15Ug15Et4oCOL3N5c3RlbS9hcHAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm9fYWN0aW9uIiBtc2dpZD0iODcyOTkxODc0Nzk5OTk4NTYxIj4i4oCP15zXkCDXoNee16bXkNeUINeX15HXmdec15Qg15TXnteh16TXp9eqINeQ16og15TXpNei15XXnNeUIEZBQ1RPUllfVEVTVC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9yZWJvb3QiIG1zZ2lkPSI2MzIwMTY4MjAzMDUwNzkxNjQzIj4i15DXqteX15wg157Xl9eT16kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIxOTg3NDgzOTc3ODM0NjAzODcyIj4i15HXk9ejINep15HXm9eq15XXkdeqIFwnPHhsaWZmOmcgaWQ9IlRJVExFIj4lczwveGxpZmY6Zz5cJyDXm9eq15XXkSDXm9eaOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+IkphdmFTY3JpcHQiPC9zdHJpbmc+CkBAIC05NDAsMTAgKzk1MiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYXJlYSIgbXNnaWQ9IjM1NDc0MDkwNTA4ODk5NTI0MjMiPiLXkNeW15XXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2VtaXJhdGUiIG1zZ2lkPSIyODkzODgwOTc4ODM1Njk4ODE4Ij4i15DXnteZ16jXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3NzUyNjU3NzU0MDUxMDY5ODMiPiLXp9eo15nXkNeqINeh15nXnteg15nXldeqINeV15TXmdeh15jXldeo15nXmdeqINeU15DXmdeg15jXqNeg15gg16nXnNeaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXkNeqINeU15TXmdeh15jXldeo15nXlCDXqdecINeb15wg15vXqteV15HXldeqINeU15DXqteo15nXnSDXqdeR15TXnyDXlNeT16TXk9ek158g15HXmden16gsINeV15DXqiDXm9ecINeULUJvb2ttYXJrcyDXqdecINeU15PXpNeT16TXny4g16nXmdedINec15E6INeT16TXk9ek16DXmSDXpteTINep15zXmdep15kg15DXlSDXkNek15zXmden16bXmdeV16og15DXl9eo15XXqiDXotedINeZ15vXldec15XXqiDXnNeT16TXk9eV16Mg15HXkNeZ16DXmNeo16DXmCDXkNeZ16DXnSDXmdeb15XXnNeZ150g15zXkNeb15XXoyDXkNeZ16nXldeoINeW15QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXkNeqINeU15TXmdeh15jXldeo15nXlCDXqdecINeb15wg15vXqteV15HXldeqINeU15DXqteo15nXnSDXqdeR15TXnyDXlNeT16TXk9ek158g15HXmden16gsINeV15DXqiDXm9ecINeULUJvb2ttYXJrcyDXqdecINeU15PXpNeT16TXny4g16nXmdedINec15E6INeT16TXk9ek16DXmSDXpteTINep15zXmdep15kg15DXlSDXkNek15zXmden16bXmdeV16og15DXl9eo15XXqiDXotedINeZ15vXldec15XXqiDXnNeT16TXk9eV16Mg15HXkNeZ16DXmNeo16DXmCDXkNeZ16DXnSDXmdeb15XXnNeZ150g15zXkNeb15XXoyDXkNeZ16nXldeoINeW15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzE0Nzg1MTY1MjczMzE0NDkwIj4i15vXqteZ15HXqiDXodeZ157XoNeZ15XXqiDXldeU15nXodeY15XXqNeZ15nXqiDXkNeZ16DXmNeo16DXmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXlNeU15nXodeY15XXqNeZ15Qg15DXlSDXlC1Cb29rbWFya3Mg16nXnCDXlNeT16TXk9ek158g15TXnteQ15XXl9eh16DXmdedINeR15jXkNeR15zXmC4g15TXk9eR16gg16LXqdeV15kg15zXkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXnteX15XXpyDXkNeVINec16nXoNeV16og16DXqteV16DXmSDXk9ek15PXpNefLiDXqdeZ150g15zXkTog15DXmdep15XXqCDXlteUINeQ15nXoNeVINeg15nXqtefINec15DXm9eZ16TXlCDXotecINeZ15PXmSDXk9ek15PXpNeg15kg16bXkyDXqdec15nXqdeZINeQ15Ug15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16og15HXotec15XXqiDXmdeb15XXnNeV16og15LXnNeZ16nXlCDXkdeQ15nXoNeY16jXoNeYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0OTczODk1MzEwMTQxODU1MDkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og15TXlNeZ16HXmNeV16jXmdeUINeQ15Ug15QtQm9va21hcmtzINep15wg15TXk9ek15PXpNefINeU157XkNeV15fXodeg15nXnSDXkdeY15zXpNeV158uINeU15PXkdeoINei16nXldeZINec15DXpNep16gg15zXkNek15zXmden16bXmdeUINec157Xl9eV16cg15DXlSDXnNep16DXldeqINeg16rXldeg15kg15PXpNeT16TXny4g16nXmdedINec15E6INeQ15nXqdeV16gg15bXlCDXkNeZ16DXlSDXoNeZ16rXnyDXnNeQ15vXmdek15Qg16LXnCDXmdeT15kg15PXpNeT16TXoNeZINem15Mg16nXnNeZ16nXmSDXkNeVINeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeqINeR16LXnNeV16og15nXm9eV15zXldeqINeS15zXmdep15Qg15HXkNeZ16DXmNeo16DXmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY4MjU1Mjc0NjkxNDU3NjA5MjIiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og15TXlNeZ16HXmNeV16jXmdeUINeQ15Ug15QtQm9va21hcmtzINep15wg15TXk9ek15PXpNefINeU157XkNeV15fXodeg15nXnSDXkdeY15DXkdec15guINeU15PXkdeoINei16nXldeZINec15DXpNep16gg15zXkNek15zXmden16bXmdeUINec157Xl9eV16cg15DXlSDXnNep16DXldeqINeg16rXldeg15kg15PXpNeT16TXny4g16nXmdedINec15E6INeQ15nXqdeV16gg15bXlCDXkNeZ16DXlSDXoNeZ16rXnyDXnNeQ15vXmdek15Qg16LXnCDXmdeT15kg15PXpNeT16TXoNeZINem15Mg16nXnNeZ16nXmSDXkNeVINeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeqINeR16LXnNeV16og15nXm9eV15zXldeqINeS15zXmdep15Qg15HXkNeZ16DXmNeo16DXmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINeU15TXmdeh15jXldeo15nXlCDXkNeVINeULUJvb2ttYXJrcyDXqdecINeU15PXpNeT16TXnyDXlNee15DXldeX16HXoNeZ150g15HXmNec16TXldefLiDXlNeT15HXqCDXotep15XXmSDXnNeQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNee15fXldenINeQ15Ug15zXqdeg15XXqiDXoNeq15XXoNeZINeT16TXk9ek158uINep15nXnSDXnNeROiDXkNeZ16nXldeoINeW15Qg15DXmdeg15Ug16DXmdeq158g15zXkNeb15nXpNeUINei15wg15nXk9eZINeT16TXk9ek16DXmSDXpteTINep15zXmdep15kg15DXlSDXkNek15zXmden16bXmdeV16og15DXl9eo15XXqiDXkdei15zXldeqINeZ15vXldec15XXqiDXktec15nXqdeUINeR15DXmdeg15jXqNeg15guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiLXlNeS15PXqNeqINeU16rXqNeQ15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXkteT15nXqCDXlNeq16jXkNeUINeR15DXpNec15nXp9em15nXlCDXnteV16rXp9eg16og16nXnCDXqdei15XXnyDXntei15XXqNeoLiDXkNek15zXmden16bXmdeV16og157XodeV15nXnteV16og16nXnCDXqdei15XXnyDXntei15XXqNeoINeQ15nXoNefINee15nXmdep157XldeqINeq15vXldeg15Qg15bXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiLXlNeV16HXoyDXk9eV15DXqCDXp9eV15zXmSI8L3N0cmluZz4KQEAgLTk1NSw3ICs5NjcsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iNDE4Nzc4Njc5MzM2MDMyNjY1NCI+IteU15vXpNek15Qg15zXnteQ157XqiDXl9eR15nXnNeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjMxODA3NDE3NzMyMzM4NjIxMjYiPiLXnteQ16TXqdeoINec157Xqdeq157XqSDXnNeU15LXmdepINeR16fXqdeV16og16nXnCDXnteQ157XqteZINeX15HXmdec15XXqi4g15TXqNep15DXlCDXlteVINec16LXldec150g15DXmdeg15Qg16DXl9eV16bXlCDXnNeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeZ150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXJpYWxQb3J0IiBtc2dpZD0iNTQ2MDgzMzI3NjU0NjMxMDc2Ij4i15LXmdep15Qg15zXmdem15nXkNeV16og15jXldeo15nXldeqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiLXnteQ16TXqdeoINec15HXotec15nXnSDXnNeS16nXqiDXnNeZ16bXmdeQ15XXqiDXmNeV16jXmdeV16og15HXkNee16bXoteV16og157Xntep16cg15QtIEFQSSDXqdecIFNlcmlhbE1hbmFnZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiLigI/XnteQ16TXqdeoINec15HXotec15nXnSDXnNeS16nXqiDXnNeZ16bXmdeQ15XXqiDXmNeV16jXmdeV16og15HXkNee16bXoteV16og157Xntep16cg15QtIEFQSSDXqdecIFNlcmlhbE1hbmFnZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjUwNzc3NzQyOTc5NDM0MDkyODUiPiLXkteZ16nXlCDXnNeh16TXp9eZINeq15XXm9efINeR15DXldek158g15fXmdem15XXoNeZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI0NTQ0MzQ2NDg2Njk3ODUzNjg1Ij4i157XkNek16nXqCDXnNeR16LXnNeZ150g15zXktep16og15zXodek16fXmSDXqteV15vXnyDXnteU157XoteY16TXqi4g15zXoteV15zXnSDXnNeQINeQ157XldeoINec15TXmdeV16og16bXldeo15og16LXkdeV16gg15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4i15PXl9eUINei15PXm9eV16DXmSDXnteb16nXmdeoINeQ15XXmNeV157XmNeZ15nXnSI8L3N0cmluZz4KQEAgLTExMTcsOSArMTEyOSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+IteU16nXnNee16og16TXoteV15zXlCDXkdeQ157Xptei15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndoaWNoSG9tZUFwcGxpY2F0aW9uIiBtc2dpZD0iNDYxNjQyMDE3MjcyNzMyNjc4MiI+IteR15fXqCDXkNek15zXmden16bXmdeUINec15PXoyDXlNeR15nXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c1VzZSIgbXNnaWQ9IjQ1ODMwMTgzNjgwMDA2MTA0MzgiPiLXlNep16rXntepINeb15HXqNeZ16jXqiDXnteX15PXnCDXoteR15XXqCDXpNei15XXnNeUINeW15UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLXoNen15Qg15DXqiDXlNeS15PXqNeqINeU157Xl9eT15wg15FcJ9eU15LXk9eo15XXqiDXntei16jXm9eqXCcgJmx0O+KAjyBHb29nbGUgQXBwc+KAjyAmbHQ7IFwn15TXldeo15PXldeqXCcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLigI/XoNen15Qg15DXqiDXlNeS15PXqNeqINeU157Xl9eT15wg15FcJ9eU15LXk9eo15XXqiDXntei16jXm9eqXCcgJmx0O+KAjyBHb29nbGUgQXBwc+KAjyAmbHQ7IFwn15TXldeo15PXldeqXCcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlQWN0aXZpdHkiIG1zZ2lkPSI3NDg2ODc2MTQ3NzUxODAzMzMzIj4i15HXl9eZ16jXqiDXpNei15XXnNeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4i15HXl9eoINeQ16TXnNeZ16fXpteZ15Qg16LXkdeV16gg15TXqten158g15QtVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4i4oCP15HXl9eoINeQ16TXnNeZ16fXpteZ15Qg16LXkdeV16gg15TXqten158g15QtVVNCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9BcHBsaWNhdGlvbnMiIG1zZ2lkPSIyOTkxODE0MjczOTM2NTA0Njg5Ij4i15DXmdefINeQ16TXnNeZ16fXpteZ15XXqiDXqdeZ15vXldec15XXqiDXnNeR16bXoiDXpNei15XXnNeUINeW15UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWVycl90aXRsZSIgbXNnaWQ9IjE5MDU4MDA1NjAzMTcxMzc3NTIiPjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWVycl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjkzMjYyODQ4ODAxMzA5Mjc3NiI+Itec16bXoteo16DXlSwg16TXoteV15zXqiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INeU15XXpNeh16fXlC4iPC9zdHJpbmc+CkBAIC0xMTM4LDkgKzExNTAsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfb3JpZ2luYWwiIG1zZ2lkPSIxODgxMDIwMjMwMjE2Njg2ODMiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+INeU15XXpNei15wg15HXnten15XXqC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2NhbGUiIG1zZ2lkPSIzMjAyOTU1NjY3Njc1OTQ0NDk5Ij4i16nXmdeg15XXmSDXp9eg15Qt157XmdeT15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2hvdyIgbXNnaWQ9IjQwMTM4Nzg4NzY0ODY2NTU4OTIiPiLXlNem15Ig16rXnteZ15MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfaGludCIgbXNnaWQ9IjEwNjQ1MjQwODQ1NDMzMDQ0NTkiPiLXkNek16nXqCDXqteb15XXoNeUINeW15Ug157Xl9eT16kg15FcJ9eU15LXk9eo15XXqiDXntei16jXm9eqXCcgJmx0O+KAjyBHb29nbGUgQXBwc+KAjyAmbHQ7IFwn15TXldeo15PXldeqXCcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IteU15DXpNec15nXp9em15nXlCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+ICjXqteU15zXmdeaIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMiRzPC94bGlmZjpnPikg15TXpNeoINeQ16og157Xk9eZ16DXmdeV16ogU3RyaWN0TW9kZSDXkdeQ15vXmdek15Qg16LXptee15nXqiDXqdec15UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic212X3Byb2Nlc3MiIG1zZ2lkPSI1MTIwMzk3MDEyMDQ3NDYyNDQ2Ij4i15TXqteU15zXmdeaIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDXlNek16gg15DXqiDXnteT15nXoNeZ15XXqiBTdHJpY3RNb2RlINeR15DXm9eZ16TXlCDXotem157XmdeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IuKAj9eQ16TXqdeoINeq15vXldeg15Qg15bXlSDXnteX15PXqSDXkVwn15TXkteT16jXldeqINee16LXqNeb16pcJyAmbHQ74oCPIEdvb2dsZSBBcHBz4oCPICZsdDsgXCfXlNeV16jXk9eV16pcJy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4i4oCP15TXkNek15zXmden16bXmdeUIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gKNeq15TXnNeZ15ogPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSDXlNek16gg15DXqiDXnteT15nXoNeZ15XXqiBTdHJpY3RNb2RlINeR15DXm9eZ16TXlCDXotem157XmdeqINep15zXlS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLigI/XlNeq15TXnNeZ15ogPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+INeU16TXqCDXkNeqINee15PXmdeg15nXldeqIFN0cmljdE1vZGUg15HXkNeb15nXpNeUINei16bXnteZ16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4i4oCPQW5kcm9pZCDXnteR16bXoiDXqdeT16jXldeS4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfYXBrIiBtc2dpZD0iNzkwNDA0MjY4MjExMTUyNjE2OSI+Itee15HXpteiINeQ15XXpNeY15nXnteZ15bXpteZ15Qg16nXnCDXkNek15zXmden16bXmdeUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g157XqteV15ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19zdGFydGluZ19hcHBzIiBtc2dpZD0iNDUxNDY0NTE2MzQ2OTI2NzEzIj4i157XpNei15nXnCDXkNek15zXmden16bXmdeV16ouIjwvc3RyaW5nPgpAQCAtMTE1NiwxNCArMTE2OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2VuZFRleHQiIG1zZ2lkPSI1MjA5ODc0NTcxOTU5NDY5MTQyIj4i15HXl9eZ16jXqiDXpNei15XXnNeUINec15HXmdem15XXoiDXotedINeY16fXodeYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+Itei15XXptee16og16fXldecINep15wg16bXnNem15XXnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpYyIgbXNnaWQ9IjU0MjE2NTExNTcxMzg2MjgxNzEiPiLXoteV16bXnteqINen15XXnCDXqdecINee15PXmdeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfcGxheWluZ190aHJvdWdoX2JsdWV0b290aCIgbXNnaWQ9IjkxNjU5ODQzNzkzOTQ2MDE1MzMiPiLXlNek16LXnNeUINeR15DXntem16LXldeqIEJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4i4oCP15TXpNei15zXlCDXkdeQ157Xptei15XXqiBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWNfaGludF9zaWxlbnRfcmluZ3RvbmVfc2VsZWN0ZWQiIG1zZ2lkPSI4MzEwNzM5OTYwOTczMTU2MjcyIj4i15TXldeS15PXqCDXqNeZ16DXkteY15XXnyDXqden15giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfY2FsbCIgbXNnaWQ9IjM5NDE2ODAwNDEyODI3ODg3MTEiPiLXoteV16bXnteqINen15XXnCDXkdep15nXl9eUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2JsdWV0b290aF9jYWxsIiBtc2dpZD0iMjAwMjg5MTkyNjM1MTE1MTUzNCI+Itei15XXptee16og15TXp9eV15wg15HXqdeZ15fXlCDXkS1CbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYmx1ZXRvb3RoX2NhbGwiIG1zZ2lkPSIyMDAyODkxOTI2MzUxMTUxNTM0Ij4i4oCP16LXldem157XqiDXlNen15XXnCDXkdep15nXl9eUINeRLUJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9hbGFybSIgbXNnaWQ9IjE5ODUxOTE2MTYwNDI2ODkxMDAiPiLXoteV16bXnteqINen15XXnCDXqdecINeU16rXqNeQ15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMjQyMjI2NTY1Njc0NDI3NjcxNSI+Itei15XXptee16og16fXldecINep15wg15TXqteo15DXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Vua25vd24iIG1zZ2lkPSIxNDAwMjE5NjY5NzcwNDQ1OTAyIj4i16LXldem157XqiDXp9eV15wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4i16LXldem157XqiDXp9eV15wg16nXnCBCbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4i4oCP16LXldem157XqiDXp9eV15wg16nXnCBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9yaW5nZXIiIG1zZ2lkPSIzMzI2MDAzODQ3MDA2MTYyNDk2Ij4i16LXldem157XqiDXp9eV15wg16nXnCDXqNeZ16DXkteY15XXnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiLXoteV16bXnteqINen15XXnCDXqdecINep15nXl9eV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9tZWRpYSIgbXNnaWQ9IjQyMTczMTE3MTk2NjUxOTQyMTUiPiLXoteV16bXnteqINen15XXnCDXqdecINee15PXmdeUIjwvc3RyaW5nPgpAQCAtMTE3NCwyMyArMTE4NiwyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfcGlja2VyX3RpdGxlIiBtc2dpZD0iMzUxNTE0MzkzOTE3NTExOTA5NCI+Iteo15nXoNeS15jXldeg15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4i16jXmdeg15LXmNeV158g15zXkCDXmdeT15XXoiI8L3N0cmluZz4KICAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGUiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NjU0MTIzOTg3NDE4MTY4NjkzIj4i16jXqdeqIFdpLUZpINeW157Xmdeg15QiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQxOTI0MjQ0ODkxNjgzOTczODYiPiLXqNep16rXldeqIFdpLUZpINeW157Xmdeg15XXqiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY2NTQxMjM5ODc0MTgxNjg2OTMiPiLigI/XqNep16ogV2ktRmkg15bXnteZ16DXlCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IuKAj9eo16nXqteV16ogV2ktRmkg15bXnteZ16DXldeqIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9kZXRhaWxlZCI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE2MzQxMDE0NTAzNDMyNzczNDUiPiLXqNep16ogV2ktRmkg16TXqteV15fXlCDXltee15nXoNeUIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3OTE1ODk1MzIzNjQ0MjkyNzY4Ij4i16jXqdeq15XXqiBXaS1GaSDXpNeq15XXl9eV16og15bXnteZ16DXldeqIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTYzNDEwMTQ1MDM0MzI3NzM0NSI+IuKAj9eo16nXqiBXaS1GaSDXpNeq15XXl9eUINeW157Xmdeg15QiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc5MTU4OTUzMjM2NDQyOTI3NjgiPiLigI/XqNep16rXldeqIFdpLUZpINek16rXldeX15XXqiDXltee15nXoNeV16oiPC9pdGVtPgogICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iNDAyOTQ4OTcxNjYwNTI1NTM4NiI+Iteb16DXmdeh15Qg15zXqNep16ogV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iNDAyOTQ4OTcxNjYwNTI1NTM4NiI+IuKAj9eb16DXmdeh15Qg15zXqNep16ogV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iODQ5NTE1NTU5MzM1ODA1NDY3NiI+IteU15nXm9eg16Eg15zXqNep16oiPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbmV0d29ya19hdmFpbGFibGVfc2lnbl9pbl9kZXRhaWxlZCAoODAwMDA4MTk0MTQ0Nzk3NjExOCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiLXkNeZ158g15DXpNep16jXldeqINec15TXqteX15HXqCDXnC1XaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiLigI/XkNeZ158g15DXpNep16jXldeqINec15TXqteX15HXqCDXnC1XaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZF9kZXRhaWxlZCIgbXNnaWQ9IjU1NDg3ODA3NzY0MTgzMzI2NzUiPiIg15DXmdeg15Ug157Xl9eV15HXqCDXlNeZ15jXkSDXnNeQ15nXoNeY16jXoNeYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijk3NjExNzgyNjU5MzI0NTE3Ij4iV2ktRmkg15nXqdeZ16giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90dXJub25fbWVzc2FnZSIgbXNnaWQ9IjI5MDkyNTA5NDIyOTk2MjcyNDQiPiLXlNek16LXnCBXaS1GaSDXmdep15nXqC4g16TXoteV15zXlCDXlteVINeq15vXkdeUINeQ16og15TXnNen15XXly/XlNeg16fXldeT15Qg15TXl9ee15Qg16nXnCDXlC1XaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiLXnNeQINeg15nXqtefINec15TXpNei15nXnCBXaS1GaSDXmdep15nXqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+IldpLUZpINeZ16nXmdeoINee15XXpNei15wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IuKAj1dpLUZpINeZ16nXmdeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4i4oCP15TXpNei15wgV2ktRmkg15nXqdeZ16guINek16LXldec15Qg15bXlSDXqteb15HXlCDXkNeqINeU16DXp9eV15PXlCDXnNep15nXqteV16Mg15DXmdeg15jXqNeg15gg15EtV2ktRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4i4oCP15zXkCDXoNeZ16rXnyDXnNeU16TXoteZ15wgV2ktRmkg15nXqdeZ16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiLigI9XaS1GaSDXmdep15nXqCDXnteV16TXotecIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiLXkteiINei15HXldeoINeU15LXk9eo15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiLXp9eR15wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWNsaW5lIiBtc2dpZD0iMjExMjIyNTQ1MTcwNjEzNzg5NCI+IteT15fXlCI8L3N0cmluZz4KQEAgLTExOTgsMjggKzEyMTAsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ludml0YXRpb25fdG9fY29ubmVjdF90aXRsZSIgbXNnaWQ9IjQ5NTg4MDM5NDg2NTg1MzM2MzciPiLXlNeW157XoNeUINec15TXqteX15HXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2Zyb21fbWVzc2FnZSIgbXNnaWQ9IjU3MDM4OTE3NDczMTk1MTc2OSI+Itee15DXqjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4i15DXnDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbnRlcl9waW5fbWVzc2FnZSIgbXNnaWQ9IjU5MjA5Mjk1NTAzNjc4Mjg5NzAiPiLXlNen15zXkyDXkNeqINen15XXkyDXlC1QSU4g15TXoNeT16jXqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbnRlcl9waW5fbWVzc2FnZSIgbXNnaWQ9IjU5MjA5Mjk1NTAzNjc4Mjg5NzAiPiLigI/XlNen15zXkyDXkNeqINen15XXkyDXlC1QSU4g15TXoNeT16jXqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9zaG93X3Bpbl9tZXNzYWdlIiBtc2dpZD0iODUzMDU2MzMyMzg4MDkyMTA5NCI+IlBJTjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODAxMjk4MTI1Nzc0MjIzMjQ3NSI+IteU15jXkNeR15zXmCDXmdeq16DXqtenINee16jXqdeqINeULVdpLUZpINeR15DXldek158g15bXnteg15kg15HXqdei15Qg16nXlNeV15Ag157Xl9eV15HXqCDXkNecIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczNjM5MDcyMTM3ODc0NjkxNTEiPiLXlNeY15zXpNeV158g15nXqteg16rXpyDXnteo16nXqiDXlC1XaS1GaSDXkdeQ15XXpNefINeW157XoNeZINeR16nXoteUINep15TXldeQINee15fXldeR16gg15DXnCA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgwMTI5ODEyNTc3NDIyMzI0NzUiPiLigI/XlNeY15DXkdec15gg15nXqteg16rXpyDXnteo16nXqiDXlC1XaS1GaSDXkdeQ15XXpNefINeW157XoNeZINeR16nXoteUINep15TXldeQINee15fXldeR16gg15DXnCA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4i4oCP15TXmNec16TXldefINeZ16rXoNeq16cg157XqNep16og15QtV2ktRmkg15HXkNeV16TXnyDXltee16DXmSDXkdep16LXlCDXqdeU15XXkCDXnteX15XXkdeoINeQ15wgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9jaGFyYWN0ZXIiIG1zZ2lkPSIzMzY1NTUwMTIwNjE3NzAxNzQ1Ij4i15TXldeh16Mg16rXlSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+Itep15XXnNeXINeU15XXk9ei15XXqiBTTVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9tZXNzYWdlIiBtc2dpZD0iMzg2Nzg5OTE2OTY1MTQ5NjQzMyI+IiZsdDtiJmd0OyA8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+ICZsdDsvIGImZ3Q7INep15XXnNeXINee16HXpNeoINeo15Eg16nXnCDXlNeV15PXoteV16ogU01TLiDXlNeQ150g15HXqNem15XXoNeaINec15DXpNep16gg15zXkNek15zXmden16bXmdeUINeW15Ug15zXlNee16nXmdeaINec16nXnNeV15cg15TXldeT16LXldeqPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+IuKAj9ep15XXnNeXINeU15XXk9ei15XXqiBTTVMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9tZXNzYWdlIiBtc2dpZD0iMzg2Nzg5OTE2OTY1MTQ5NjQzMyI+IuKAjyZsdDtiJmd0OyA8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+ICZsdDsvIGImZ3Q7INep15XXnNeXINee16HXpNeoINeo15Eg16nXnCDXlNeV15PXoteV16ogU01TLiDXlNeQ150g15HXqNem15XXoNeaINec15DXpNep16gg15zXkNek15zXmden16bXmdeUINeW15Ug15zXlNee16nXmdeaINec16nXnNeV15cg15TXldeT16LXldeqPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3llcyIgbXNnaWQ9IjM2NjM3MjU5OTM4NTU4MTY4MDciPiLXkNek16nXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4i15PXl9eUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7INeo15XXpteUINec16nXnNeV15cg15TXldeT16LXlCDXkNecICZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJERVNUX0FERFJFU1MiPiUyJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0Oy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX21lc3NhZ2UiIG1zZ2lkPSIxNjQ1NDM2NDY2Mjg1MzEwODU1Ij4i4oCPJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsg16jXldem15Qg15zXqdec15XXlyDXlNeV15PXoteUINeQ15wgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSIzNDkyMDI1NzE5ODY4MDc4NDU3Ij4i15TXpNei15XXnNeUICI8Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiLXotep15XXmdeUINec15LXqNeV150g15zXl9eZ15XXkdeZ150iPC9mb250PiIg15HXl9ep15HXldefINeU157Xm9ep15nXqCDXlNeg15nXmdeTINep15zXmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfcHJlbWl1bV9zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSI1NTIzODI2MzQ5MTA1MTIzNjg3Ij48Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiLXlNek16LXldec15Qg16rXkteo15XXnSDXnNeX15nXldeR15nXnSDXkdeX16nXkdeV158g15TXnteb16nXmdeoINeU16DXmdeZ15Mg16nXnNeaLiI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2FsbG93IiBtc2dpZD0iNDQ1ODg3ODYzNzExMTAyMzQxMyI+Itep15zXlyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiLXkdeY15wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl9jaG9pY2UiIG1zZ2lkPSI1Mjg5NTM4NTkyMjcyMjE4MTM2Ij4i15bXm9eV16gg15DXqiDXlNeR15fXmdeo15Qg16nXnNeZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfdW5kb19pbnN0cnVjdGlvbiIgbXNnaWQ9IjQ5NjA5NDQxMzMwNTIyODc0ODQiPiLXoNeZ16rXnyDXnNep16DXldeqINeW15DXqiDXnteQ15XXl9eoINeZ15XXqteoINeRXCfXlNeS15PXqNeV16pcJyAmZ3Q7IFwn15DXpNec15nXp9em15nXldeqXCciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl91bmRvX2luc3RydWN0aW9uIiBtc2dpZD0iNDk2MDk0NDEzMzA1MjI4NzQ4NCI+IuKAj9eg15nXqtefINec16nXoNeV16og15bXkNeqINee15DXldeX16gg15nXldeq16gg15FcJ9eU15LXk9eo15XXqlwnICZndDsgXCfXkNek15zXmden16bXmdeV16pcJyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWx3YXlzX2FsbG93IiBtc2dpZD0iMzI0MTE4MTE1NDg2OTQ5MzM2OCI+IteQ16TXqdeoINeq157XmdeTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9uZXZlcl9hbGxvdyIgbXNnaWQ9IjQ0Njk5Mjc2NTc3NDI2OTY3MyI+Itec16LXldec150g15DXnCDXqteQ16TXqdeoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4i15vXqNeY15nXoSDXlC1TSU0g15TXldeh16giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF9tZXNzYWdlIiBtc2dpZD0iMjMzMzE2NDU1OTk3MDk1ODY0NSI+IteU16jXqdeqINeU16HXnNeV15zXqNeZ16og15zXkCDXqteU15nXlCDXltee15nXoNeUINei15Mg16nXqtek16LXmdecINee15fXk9epINec15DXl9eoINeU15vXoNeh16og15vXqNeY15nXoSBTSU0g15fXlden15kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4i4oCP15vXqNeY15nXoSDXlC1TSU0g15TXldeh16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF9tZXNzYWdlIiBtc2dpZD0iMjMzMzE2NDU1OTk3MDk1ODY0NSI+IuKAj9eU16jXqdeqINeU16HXnNeV15zXqNeZ16og15zXkCDXqteU15nXlCDXltee15nXoNeUINei15Mg16nXqtek16LXmdecINee15fXk9epINec15DXl9eoINeU15vXoNeh16og15vXqNeY15nXoSBTSU0g15fXlden15kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2ltX2RvbmVfYnV0dG9uIiBtc2dpZD0iODI3OTQ5OTg5MzY5OTYzNzc1Ij4i16HXmdeV150iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4i15vXqNeY15nXoSDXlC1TSU0g16DXldeh16MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4i4oCP15vXqNeY15nXoSDXlC1TSU0g16DXldeh16MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiLXlNek16LXnCDXnteX15PXqSDXkNeqINeU157Xm9ep15nXqCDXm9eT15kg15zXktep16og15DXnCDXlNeo16nXqiDXlNeh15zXldec16jXmdeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiLXlNek16LXnCDXnteX15PXqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjgzNDkzNjI2MjMwNjg4MTkyOTUiPiLXlNeS15PXqNeqINep16LXlCI8L3N0cmluZz4KQEAgLTEyMzAsMzggKzEyNDIsMzggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1zX2Rlc2NyaXB0aW9uX2FwcCIgbXNnaWQ9IjUxMzk4MzYxNDMyOTMyOTk0MTciPiLXnteY16LXnSA8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX3Blcm1pc3Npb25zIiBtc2dpZD0iNzI4MzM1NzcyODIxOTMzODExMiI+Itec15Ag15PXqNeV16nXmdedINeQ15nXqdeV16jXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiLXpNei15XXnNeUINeW15Ug16LXqdeV15nXlCDXnNeX15nXmdeRINeQ15XXqteaINeR15vXodejOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2FjdGl2aXR5X3RpdGxlIiBtc2dpZD0iNDQ2NTA1NTE1NzIwOTY0ODY0MSI+IteQ157Xptei15kg157XodeV15IgVVNCINec15DXl9eh15XXnyDXkdeg16TXlyDXkteT15XXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+IlVTQiDXnteX15XXkdeoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMzA4NTM4MDk0MzE2NDc3ODM5Ij4i15TXqteX15HXqNeqINec157Xl9ep15Eg15HXkNee16bXoteV16ogVVNCLiDXkteiINeR15zXl9em158g16nXkdeU157XqdeaINeQ150g15HXqNem15XXoNeaINec15TXoteq15nXpyDXp9eR16bXmdedINeR15nXnyDXlNee15fXqdeRINec15DXl9eh15XXnyDXlC1VU0Ig16nXnCDXnteb16nXmdeoINeULUFuZHJvaWQg16nXnNeaLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiLXlNeq15fXkdeo16og15zXnteX16nXkSDXkdeQ157Xptei15XXqiBVU0IuINeS16Ig15HXnNeX16bXnyDXqdeR15TXntep15og15DXnSDXkdeo16bXldeg15og15zXlNei16rXmdenINen15HXpteZ150g15HXmdefINeU157Xl9ep15Eg15zXkdeZ158g15vXqNeY15nXoSDXlC1TRCDXqdecINee15vXqdeZ16gg15QtQW5kcm9pZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9idXR0b25fbW91bnQiIG1zZ2lkPSIxMDUyMjU5OTMwMzY5NTA4MjM1Ij4i15TXpNei15wg15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiLXmdepINeR16LXmdeUINeR16nXmdee15XXqSDXkdeQ15fXodeV158g15QtVVNCINep15zXmiDXnNeQ15fXodeV158g15HXoNek15cg15LXk9eV15wg15EtVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4i15nXqSDXkdei15nXlCDXkdep15nXnteV16kg15HXm9eo15jXmdehINeULVNEINep15zXmiDXnNeQ15fXodeV158g15HXoNek15cg15LXk9eV15wg15EtVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0Ig157Xl9eV15HXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2FjdGl2aXR5X3RpdGxlIiBtc2dpZD0iNDQ2NTA1NTE1NzIwOTY0ODY0MSI+IuKAj9eQ157Xptei15kg157XodeV15IgVVNCINec15DXl9eh15XXnyDXkdeg16TXlyDXkteT15XXnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+IuKAj1VTQiDXnteX15XXkdeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMzA4NTM4MDk0MzE2NDc3ODM5Ij4i4oCP15TXqteX15HXqNeqINec157Xl9ep15Eg15HXkNee16bXoteV16ogVVNCLiDXkteiINeR15zXl9em158g16nXkdeU157XqdeaINeQ150g15HXqNem15XXoNeaINec15TXoteq15nXpyDXp9eR16bXmdedINeR15nXnyDXlNee15fXqdeRINec15DXl9eh15XXnyDXlC1VU0Ig16nXnCDXnteb16nXmdeoINeULUFuZHJvaWQg16nXnNeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiLigI/XlNeq15fXkdeo16og15zXnteX16nXkSDXkdeQ157Xptei15XXqiBVU0IuINeS16Ig15HXnNeX16bXnyDXqdeR15TXntep15og15DXnSDXkdeo16bXldeg15og15zXlNei16rXmdenINen15HXpteZ150g15HXmdefINeU157Xl9ep15Eg15zXkdeZ158g15vXqNeY15nXoSDXlC1TRCDXqdecINee15vXqdeZ16gg15QtQW5kcm9pZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9idXR0b25fbW91bnQiIG1zZ2lkPSIxMDUyMjU5OTMwMzY5NTA4MjM1Ij4i4oCP15TXpNei15wg15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiLigI/XmdepINeR16LXmdeUINeR16nXmdee15XXqSDXkdeQ15fXodeV158g15QtVVNCINep15zXmiDXnNeQ15fXodeV158g15HXoNek15cg15LXk9eV15wg15EtVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4i4oCP15nXqSDXkdei15nXlCDXkdep15nXnteV16kg15HXm9eo15jXmdehINeULVNEINep15zXmiDXnNeQ15fXodeV158g15HXoNek15cg15LXk9eV15wg15EtVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiLigI9VU0Ig157Xl9eV15HXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4i15LXoiDXm9eT15kg15zXlNei16rXmdenINen15HXpteZ150g15zXnteX16nXkS/XnteU157Xl9ep15EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzM2MDU4Mzk2NjYzNTE2MDE3Ij4i15vXkdeUINeQ15fXodeV158gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2NTY4NTIwOTg1NTU2MjM4MjIiPiLXkteiINeb15PXmSDXnNeb15HXldeqINeQ16og15DXl9eh15XXnyDXlC1VU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF90aXRsZSIgbXNnaWQ9IjY2MDEyOTg1MTcwODc3NTg1MyI+IteQ15fXodeV158gVVNCINep16DXntem15Ag15HXqdeZ157XldepIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiLXnNek16DXmSDXqdeq15vXkdeUINeQ16og15DXl9eh15XXnyDXlC1VU0IsINeR15jXnCDXkNeqINeU15jXoteZ16DXlCAoXCLXlNeV16bXkFwiKSDXqdecINeQ15fXodeV158g15QtVVNCINep15wg15QtQW5kcm9pZCDXqdec15og157XlNee15fXqdeRLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNDM5Njk3ODI0NjA2MTMxMTQiPiLXnNek16DXmSDXqdeq15vXkdeUINeQ16og15DXl9eh15XXnyDXlC1VU0IsINeV15PXkCDXqdeR15nXmNec16og15DXqiDXlNeY16LXmdeg15QgKFwi15TXldem15DXqlwiKSDXqdecINeb16jXmNeZ16Eg15QtU0Qg16nXnCDXlC1BbmRyb2lkINep15zXmiDXnteU157Xl9ep15EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9idXR0b25fbW91bnQiIG1zZ2lkPSI3MDYwMjE4MDM0OTAwNjk2MDI5Ij4i15vXkdeUINeQ15fXodeV158gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+IteU15nXqteUINeR16LXmdeUINeR15vXmdeR15XXmSDXkNeX16HXldefINeULVVTQi4g15XXk9eQINep15HXmdeY15zXqiDXkNeqINeY16LXmdeg16og157XkNeo15cg15QtVVNCLCDXldec15DXl9eoINee15vXnyDXoNeh15Qg16nXldeRLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+IteU16TXotecINeQ15fXodeV158gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4i15DXnSDXqtek16LXmdecINeQ15fXodeV158gVVNCLCDXkNek15zXmden16bXmdeV16og157XodeV15nXnteV16og16nXkdeU158g15DXqteUINee16nXqtee16kg15nXpNeh15nXp9eVINec16TXoteV15wsINeV15nXmdeq15vXnyDXqdeU158g15zXkCDXmdeU15nXlSDXltee15nXoNeV16og16LXkyDXqdeq15vXkdeUINeQ16og15DXl9eh15XXnyDXlC1VU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+Itek16LXldec16ogVVNCINeg15vXqdec15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzMzYwNTgzOTY2NjM1MTYwMTciPiLigI/Xm9eR15Qg15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+IuKAj9eS16Ig15vXk9eZINec15vXkdeV16og15DXqiDXkNeX16HXldefINeULVVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX3RpdGxlIiBtc2dpZD0iNjYwMTI5ODUxNzA4Nzc1ODUzIj4i4oCP15DXl9eh15XXnyBVU0Ig16nXoNee16bXkCDXkdep15nXnteV16kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IuKAj9ec16TXoNeZINep16rXm9eR15Qg15DXqiDXkNeX16HXldefINeULVVTQiwg15HXmNecINeQ16og15TXmNei15nXoNeUIChcIteU15XXpteQXCIpINep15wg15DXl9eh15XXnyDXlC1VU0Ig16nXnCDXlC1BbmRyb2lkINep15zXmiDXnteU157Xl9ep15EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IuKAj9ec16TXoNeZINep16rXm9eR15Qg15DXqiDXkNeX16HXldefINeULVVTQiwg15XXk9eQINep15HXmdeY15zXqiDXkNeqINeU15jXoteZ16DXlCAoXCLXlNeV16bXkNeqXCIpINep15wg15vXqNeY15nXoSDXlC1TRCDXqdecINeULUFuZHJvaWQg16nXnNeaINee15TXnteX16nXkS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiLigI/Xm9eR15Qg15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxOTcwMzc0ODk4MjYzMDYzODM2Ij4i4oCP15TXmdeq15Qg15HXoteZ15Qg15HXm9eZ15HXldeZINeQ15fXodeV158g15QtVVNCLiDXldeT15Ag16nXkdeZ15jXnNeqINeQ16og15jXoteZ16DXqiDXnteQ16jXlyDXlC1VU0IsINeV15zXkNeX16gg157Xm9efINeg16HXlCDXqdeV15EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RpdGxlIiBtc2dpZD0iOTYzMDM5MDMzNDcwNDc4Njk3Ij4i4oCP15TXpNei15wg15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGV4dCIgbXNnaWQ9IjUxMDA0Mjg3NTcxMDc0Njk0NTQiPiLigI/XkNedINeq16TXoteZ15wg15DXl9eh15XXnyBVU0IsINeQ16TXnNeZ16fXpteZ15XXqiDXnteh15XXmdee15XXqiDXqdeR15TXnyDXkNeq15Qg157Xqdeq157XqSDXmdek16HXmden15Ug15zXpNei15XXnCwg15XXmdeZ16rXm9efINep15TXnyDXnNeQINeZ15TXmdeVINeW157Xmdeg15XXqiDXoteTINep16rXm9eR15Qg15DXqiDXkNeX16HXldefINeULVVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfZXJyb3JfdGl0bGUiIG1zZ2lkPSI3MzIzNjU4NDY5NjI2NTE0MjA3Ij4i4oCP16TXoteV15zXqiBVU0Ig16DXm9ep15zXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRsZ19vayIgbXNnaWQ9IjczNzY5NTMxNjcwMzk4NjU3MDEiPiLXkNeZ16nXldeoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX210cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzNjk5OTEzMDk3MzkxNTUwMzk0Ij4i157Xl9eV15HXqCDXm9ee15vXqdeZ16gg157Xk9eZ15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiLXnteX15XXkdeoINeb157Xptec157XlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9jZF9pbnN0YWxsZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjc3NDcxMjgyNzg5MjA5MDc1NCI+Itee15fXldeR16gg15vXnteq16fXmdefIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4i157Xl9eV15HXqCDXnNeQ15HXmdeW16ggVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IteS16Ig15zXp9eR15zXqiDXkNek16nXqNeV15nXldeqIFVTQiDXoNeV16HXpNeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiLXnNek16jXnteYINeQ16og15DXntem16LXmSDXlNeQ15fXodeV158g157XodeV15IgVVNCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2NDg0MTU5MjE1MjY1MjYwNjkiPiLXnNek16jXnteYINeQ16og15vXqNeY15nXoSDXlC1TRD8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTM0MDE2ODUzNDI1NzYxMDc4Ij4i15vXnCDXlNen15HXpteZ150g16nXqdee15XXqNeZ150g15HXkNee16bXoteZINeU15DXl9eh15XXnyDXnteh15XXkiBVU0Ig16nXnNeaINeZ15nXnteX16fXlS4g16TXoteV15zXlCDXlteVINeU15nXkCDXkdec16rXmSDXlNek15nXm9eUISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3Nvcnlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNzg0ODIzNjk3NDA4NzY1MzY2NiI+IuKAj9ee15fXldeR16gg15zXkNeR15nXlteoIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjIyOTA4NTkzOTk5ODM3MjAyNzEiPiLigI/XkteiINec16fXkdec16og15DXpNep16jXldeZ15XXqiBVU0Ig16DXldeh16TXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI5MDIwMDkyMTk2MDYxMDA3MjYyIj4i4oCP15zXpNeo157XmCDXkNeqINeQ157Xptei15kg15TXkNeX16HXldefINee16HXldeSIFVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjQ4NDE1OTIxNTI2NTI2MDY5Ij4i4oCP15zXpNeo157XmCDXkNeqINeb16jXmNeZ16Eg15QtU0Q/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkzNDAxNjg1MzQyNTc2MTA3OCI+IuKAj9eb15wg15TXp9eR16bXmdedINep16nXnteV16jXmdedINeR15DXntem16LXmSDXlNeQ15fXodeV158g157XodeV15IgVVNCINep15zXmiDXmdeZ157Xl9en15UuINek16LXldec15Qg15bXlSDXlNeZ15Ag15HXnNeq15kg15TXpNeZ15vXlCEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4i15vXnCDXlNeg16rXldeg15nXnSDXqdee15DXldeX16HXoNeZ150g15HXm9eo15jXmdehINeZ15DXkdeT15UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X2J1dHRvbl9mb3JtYXQiIG1zZ2lkPSI0MTMxMDY0NTYwMTI3NDc4Njk1Ij4i16TXqNee15XXmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+Iteg15nXp9eV15kg15HXkNeS15nXnSDXqdecIFVTQiDXnteX15XXkdeoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjEwMTY2NTQ2Mjc2MjY0NzYxNDIiPiLXkteiINeb15PXmSDXnNeU16nXkdeZ16og15DXqiDXoNeZ16fXldeZINeU15HXkNeS15nXnSDXkdeU16rXp9efINeULVVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3MjkwNDQ3Nzg5NDkxODk5MTgiPiLigI/XoNeZ16fXldeZINeR15DXkteZ150g16nXnCBVU0Ig157Xl9eV15HXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxMDE2NjU0NjI3NjI2NDc2MTQyIj4i4oCP15LXoiDXm9eT15kg15zXlNep15HXmdeqINeQ16og16DXmden15XXmSDXlNeR15DXkteZ150g15HXlNeq16fXnyDXlC1VU0IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2lucHV0X21ldGhvZCIgbXNnaWQ9IjQ2NTMzODczMzY3OTEyMjI5NzgiPiLXkdeX16gg16nXmdeY16og15TXlteg15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjkwOTE2NTIxNTc3MjI0OTUxMTYiPiLXlNeS15PXqCDXqdeZ15jXldeqINen15zXmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiLXnten15zXk9eqINek15nXlteZ16oiPC9zdHJpbmc+CkBAIC0xMjcxLDI5ICsxMjgzLDI5IEBACiAgICAgPHN0cmluZyBuYW1lPSJmYXN0X3Njcm9sbF9hbHBoYWJldCIgbXNnaWQ9IjU0MzMyNzU0ODU0OTkwMzkxOTkiPiIgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYXN0X3Njcm9sbF9udW1lcmljX2FscGhhYmV0IiBtc2dpZD0iNDAzMDE3MDUyNDU5NTEyMzYxMCI+IiAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5kaWRhdGVzX3N0eWxlIiBtc2dpZD0iNDMzMzkxMzA4OTYzNzA2MjI1NyI+PHU+Itee15XXotee15PXmdedIjwvdT48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+Itee15vXmdefINeQ15fXodeV158gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NTc2MDM0MTg5NzA5OTQwNTAiPiLXnteb15nXnyDXkNeqINeb16jXmNeZ16EgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDk4MTYwMDUzNTE0Njg1NjAiPiLigI/Xnteb15nXnyDXkNeX16HXldefIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDU3NjAzNDE4OTcwOTk0MDUwIj4i4oCP157Xm9eZ158g15DXqiDXm9eo15jXmdehIFNEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iODI4NzMxOTg4MjkyNjczNzA1MyI+IteR15XXk9enINeQ150g15nXqSDXqdeS15nXkNeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLXkNee16bXoteZINeQ15fXodeV158g16jXmdenINee16HXldeSIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+Iteb16jXmNeZ16EgU0Qg16jXmdenIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzg0MDEyMTA2NzQyNzI2OTUwMCI+IteQ15fXodeV158g15QtVVNCINeo15nXpyDXkNeVINep157Xoteo15vXqiDXlNen15HXpteZ150g16nXnNeVINeQ15nXoNeUINeg16rXnteb16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjQxMDY1NjQxNzg2OTIzNjA0Ij4i15vXqNeY15nXoSDXlC1TRCDXqNeZ16cg15DXlSDXqdee16LXqNeb16og15TXp9eR16bXmdedINep15zXlSDXkNeZ16DXlCDXoNeq157Xm9eqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjA5MDA0Njc2OTUzMjcxMzU2MyI+IteQ157Xptei15kg15DXl9eh15XXnyDXpNeS15XXnSDXnteh15XXkiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+Iteb16jXmNeZ16EgU0Qg16TXkteV150iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+IteQ15fXodeV158g15QtVVNCINek15LXldedLiDXoNeh15Qg15zXpNeo157XmCDXkNeV16rXlSDXnteX15PXqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNzUzODk4NTY3NTI1NTY4MjUzIj4i15vXqNeY15nXoSDXlC1TRCDXpNeS15XXnS4g16DXodeUINec16TXqNee15gg15DXldeq15Ug157Xl9eT16kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE2NjE2ODMwMzEzMzA5NTEwNzMiPiLXkNeX16HXldefIFVTQiDXlNeV16HXqCDXkdeQ15XXpNefINeR15zXqteZINem16TXldeZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+Iteb16jXmNeZ16EgU0Qg15TXldeh16gg15HXkNeV16TXnyDXnNeQINem16TXldeZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDMyOTg0ODgxOTg2NTU5NDI0MSI+IteR15jXnCDXmNei15nXoNeUINep15wg15DXl9eh15XXnyBVU0Ig15zXpNeg15kg15TXodeo16rXlSDXm9eT15kg15zXnteg15XXoiDXkNeV15HXk9efINeg16rXldeg15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjAxODMyOTM3NDc0NDgyNDEiPiLXkdeY15wg15DXqiDXmNei15nXoNeqINeb16jXmNeZ16EgU0Qg15zXpNeg15kg15TXodeo16rXlSDXm9eT15kg15zXnteg15XXoiDXkNeV15HXk9efINeg16rXldeg15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTY3OTczODkzMjcwMzYwMjMwIj4i16DXmdeq158g15zXlNeh15nXqCDXkNeqINeQ157Xptei15kg15TXkNeX16HXldefINee16HXldeSIFVTQiDXkdeR15jXl9eUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4i15DXpNep16gg15zXlNeh15nXqCDXkNeqINeb16jXmNeZ16EgU0QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNDIxOTUzNjE2MDY0OTM1MzAiPiLXkNeq15Qg15nXm9eV15wg15zXlNeh15nXqCDXkdeR15jXl9eUINeQ16og15DXl9eh15XXnyDXlC1VU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2ODg0MTI3ODEzODM3NzYwNCI+Iteg15nXqtefINec15TXodeZ16gg15HXkdeY15fXlCDXm9eo15jXmdehIFNELiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NDg2Mzc3MjMwMTQwMjI3NjUxIj4i15DXl9eh15XXnyBVU0Ig15TXldeh16giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTAyNTE4MDMwNDA0MzgxMzE4Ij4i15vXqNeY15nXoSBTRCDXlNeV16HXqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjY5MjExMjYxNjI1ODA1NzQxNDMiPiLXkNeX16HXldefIFVTQiDXlNeV16HXqC4g15TXm9eg16Eg157Xk9eZ15Qg15fXk9ep15QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzODcwMTIwNjUyOTgzNjU5NjQxIj4i15vXqNeY15nXoSBTRCDXlNeV16HXqC4g15TXm9eg16Eg15vXqNeY15nXoSDXl9eT16kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLigI/XkNee16bXoteZINeQ15fXodeV158g16jXmdenINee16HXldeSIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IuKAj9eb16jXmNeZ16EgU0Qg16jXmdenIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzg0MDEyMTA2NzQyNzI2OTUwMCI+IuKAj9eQ15fXodeV158g15QtVVNCINeo15nXpyDXkNeVINep157Xoteo15vXqiDXlNen15HXpteZ150g16nXnNeVINeQ15nXoNeUINeg16rXnteb16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjQxMDY1NjQxNzg2OTIzNjA0Ij4i4oCP15vXqNeY15nXoSDXlC1TRCDXqNeZ16cg15DXlSDXqdee16LXqNeb16og15TXp9eR16bXmdedINep15zXlSDXkNeZ16DXlCDXoNeq157Xm9eqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjA5MDA0Njc2OTUzMjcxMzU2MyI+IuKAj9eQ157Xptei15kg15DXl9eh15XXnyDXpNeS15XXnSDXnteh15XXkiBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+IuKAj9eb16jXmNeZ16EgU0Qg16TXkteV150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+IuKAj9eQ15fXodeV158g15QtVVNCINek15LXldedLiDXoNeh15Qg15zXpNeo157XmCDXkNeV16rXlSDXnteX15PXqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNzUzODk4NTY3NTI1NTY4MjUzIj4i4oCP15vXqNeY15nXoSDXlC1TRCDXpNeS15XXnS4g16DXodeUINec16TXqNee15gg15DXldeq15Ug157Xl9eT16kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE2NjE2ODMwMzEzMzA5NTEwNzMiPiLigI/XkNeX16HXldefIFVTQiDXlNeV16HXqCDXkdeQ15XXpNefINeR15zXqteZINem16TXldeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+IuKAj9eb16jXmNeZ16EgU0Qg15TXldeh16gg15HXkNeV16TXnyDXnNeQINem16TXldeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDMyOTg0ODgxOTg2NTU5NDI0MSI+IuKAj9eR15jXnCDXmNei15nXoNeUINep15wg15DXl9eh15XXnyBVU0Ig15zXpNeg15kg15TXodeo16rXlSDXm9eT15kg15zXnteg15XXoiDXkNeV15HXk9efINeg16rXldeg15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjAxODMyOTM3NDc0NDgyNDEiPiLigI/XkdeY15wg15DXqiDXmNei15nXoNeqINeb16jXmNeZ16EgU0Qg15zXpNeg15kg15TXodeo16rXlSDXm9eT15kg15zXnteg15XXoiDXkNeV15HXk9efINeg16rXldeg15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTY3OTczODkzMjcwMzYwMjMwIj4i4oCP16DXmdeq158g15zXlNeh15nXqCDXkNeqINeQ157Xptei15kg15TXkNeX16HXldefINee16HXldeSIFVTQiDXkdeR15jXl9eUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4i4oCP15DXpNep16gg15zXlNeh15nXqCDXkNeqINeb16jXmNeZ16EgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNDIxOTUzNjE2MDY0OTM1MzAiPiLigI/XkNeq15Qg15nXm9eV15wg15zXlNeh15nXqCDXkdeR15jXl9eUINeQ16og15DXl9eh15XXnyDXlC1VU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2ODg0MTI3ODEzODM3NzYwNCI+IuKAj9eg15nXqtefINec15TXodeZ16gg15HXkdeY15fXlCDXm9eo15jXmdehIFNELiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NDg2Mzc3MjMwMTQwMjI3NjUxIj4i4oCP15DXl9eh15XXnyBVU0Ig15TXldeh16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTAyNTE4MDMwNDA0MzgxMzE4Ij4i4oCP15vXqNeY15nXoSBTRCDXlNeV16HXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjY5MjExMjYxNjI1ODA1NzQxNDMiPiLigI/XkNeX16HXldefIFVTQiDXlNeV16HXqC4g15TXm9eg16Eg157Xk9eZ15Qg15fXk9ep15QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzODcwMTIwNjUyOTgzNjU5NjQxIj4i4oCP15vXqNeY15nXoSBTRCDXlNeV16HXqC4g15TXm9eg16Eg15vXqNeY15nXoSDXl9eT16kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiLXnNeQINeg157XpteQ15Ug16TXoteZ15zXldeZ15XXqiDXqteV15DXnteV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wa2dVc2FnZVN0YXRzIiBtc2dpZD0iODc4NzM1MjA3NDMyNjc0ODg5MiI+Itei15PXm9efINeg16rXldeg15nXnSDXodeY15jXmdeh15jXmdeZ150g16LXnCDXqdeZ157XldepINeR16jXm9eZ15EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og16HXmNeY15nXodeY15nXp9eV16og16nXmdee15XXqSDXqdeg15DXodek15Ug15zXkteR15kg16jXm9eZ15HXmdedINep15XXoNeZ150uINec15Ag157XmdeV16LXkyDXnNep15nXnteV16kg16LXnCDXmdeT15kg15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqi4iPC9zdHJpbmc+CkBAIC0xMzA2LDcgKzEzMTgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sX2tleWd1YXJkIiBtc2dpZD0iMTcyMTk1MTg0MjA3ODI4Mzg3Ij4i16nXnNeV15gg15HXlNem15LXlCDXldeU16HXqteo15Qg16nXnCDXnteS158g15TXnten15zXk9eqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjMwNDM3MzIyOTA1MTg2MjkwNjEiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15zXldeYINeR157XktefINeU157Xp9ec15PXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiLXkteiINek16LXnteZ15nXnSDXnNeR16fXqNeqINee16jXl9enINee16rXpteV15LXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdhZGdldF9ob3N0X2Vycm9yX2luZmxhdGluZyIgbXNnaWQ9IjQ4ODIwMDQzMTQ5MDY0NjYxNjIiPiLXnNeQINeg15nXqtefINec15TXldeh15nXoyB3aWRnZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2FkZ2V0X2hvc3RfZXJyb3JfaW5mbGF0aW5nIiBtc2dpZD0iNDg4MjAwNDMxNDkwNjQ2NjE2MiI+IuKAj9ec15Ag16DXmdeq158g15zXlNeV16HXmdejIHdpZGdldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2dvIiBtc2dpZD0iODMyMDg0NTY1MTczNzM2OTAyNyI+IteU16rXl9ecIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9zZWFyY2giIG1zZ2lkPSI2NTgxMTAyNzE4MjI4MDc4MTEiPiLXl9ek16kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlbmQiIG1zZ2lkPSIyMzE2MTY2NTU2MzQ5MzE0NDI0Ij4i16nXnNeXIjwvc3RyaW5nPgpAQCAtMTMyOSwxMyArMTM0MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4i15jXpNeYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i16nXoNeUINeY16TXmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Itee15DXlteZ158g15zXlNeq16jXkNeV16oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDXnteV16TXotecIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOINee15XXpNei15wg16LXnCDXmdeT15kgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLigI9WUE4g157Xldek16LXnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IuKAj1ZQTiDXnteV16TXotecINei15wg15nXk9eZIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IteS16Ig15vXk9eZINec16DXlNecINeQ16og15TXqNep16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHRfbG9uZyIgbXNnaWQ9IjY0MDczNTEwMDYyNDkxNzQ0NzMiPiLXnteX15XXkdeoINeQ15wgPHhsaWZmOmcgaWQ9IlNFU1NJT04iPiVzPC94bGlmZjpnPi4g15LXoiDXm9eT15kg15zXoNeU15wg15DXqiDXlNeo16nXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiLXlC1WUE4g16nXnteV16TXotecINeq157XmdeTLCDXnteq15fXkdeoLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLXlC1WUE4g16nXpNeV16LXnCDXqtee15nXkywg157Xl9eV15HXqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9lcnJvciIgbXNnaWQ9IjYwMDkyNDk4MTQwMzQ3MDgxNzUiPiLXqdeS15nXkNeqIFZQTiDXqdee15XXpNei15wg16rXnteZ15MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiLigI/XlC1WUE4g16nXnteV16TXotecINeq157XmdeTLCDXnteq15fXkdeoLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLigI/XlC1WUE4g16nXpNeV16LXnCDXqtee15nXkywg157Xl9eV15HXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9lcnJvciIgbXNnaWQ9IjYwMDkyNDk4MTQwMzQ3MDgxNzUiPiLigI/XqdeS15nXkNeqIFZQTiDXqdee15XXpNei15wg16rXnteZ15MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29uZmlnIiBtc2dpZD0iNjQxNTg5OTE1MDY3MTUzNzk3MCI+IteS16Ig15vXk9eZINec15TXkteT15nXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVwbG9hZF9maWxlIiBtc2dpZD0iMjg5Nzk1NzE3MjM2NjczMDQxNiI+IteR15fXqCDXp9eV15HXpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2ZpbGVfY2hvc2VuIiBtc2dpZD0iNjM2MzY0ODU2MjE3MDc1OTQ2NSI+Itec15Ag16DXkdeX16gg16fXldeR16UiPC9zdHJpbmc+CkBAIC0xMzQzLDcgKzEzNTUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3VibWl0IiBtc2dpZD0iMTYwMjMzNTU3MjA4OTkxMTk0MSI+Itep15zXlyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+Itee16bXkSDXnteb15XXoNeZ16og157Xldek16LXnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4MDM1MjMwNTM3NTYzNTAzMjYyIj4i15LXoiDXm9eT15kg15zXpteQ16og157Xntem15Eg157Xm9eV16DXmdeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNDY2OTQyMzQzOTgyMDI2MDEiPiLXp9ep15XXqCDXkNeVINek16LXmdecINeb16DXp9eV15PXlCDXl9ee15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzMTQ2Njk0MjM0Mzk4MjAyNjAxIj4i16nXmdeq15XXoyDXkNeZ16DXmNeo16DXmCDXpNei15nXnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNjg1NzAzMTc2MDEwMzA2Mjk4MiI+IteS16Ig15vXk9eZINec15TXkteT15nXqC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiLXlNen15XXk9edIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmV4dF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMDgwNTU1MTA0Njc3OTkyNDA4Ij4i15TXkdeQIjwvc3RyaW5nPgpAQCAtMTM1OSwxOCArMTM3MSwxOCBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ2NDE4NzI3OTcwNjc2MDkxNzciPiI8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiDXnteq15XXmiA8eGxpZmY6ZyBpZD0iVE9UQUwiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tb2RlX2RvbmUiIG1zZ2lkPSI3MjE3NTgxNjQwNDYxOTIyMjg5Ij4i16HXmdeV150iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MjM4MTA0NDg1MDc2MTI3NDYiPiLXnteR15jXnCDXmNei15nXoNeUINep15wg15DXl9eh15XXnyBVU0IuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMyNzg5NDk5ODQwOTUzNzE5MCI+Itee15HXmNecINeY16LXmdeg15Qg16nXnCDXm9eo15jXmdehIFNELi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NTIxNTczMzIxNTI0MzQwMDU4Ij4i157XldeX16cg15DXl9eh15XXnyBVU0IuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjU5Njk4ODg3NTUwNzA0MzA0MiI+Itee15XXl9enINeb16jXmNeZ16EgU0QuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjI5OTc2OTU2MzYyNDc3Njk0OCI+Itec15Ag16DXmdeq158g15zXnteX15XXpyDXkNeqINeQ15fXodeV158g15QtIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzE1MjQ4Njk2NjQ0NTEwOTM1Ij4i15zXkCDXoNeZ16rXnyDXnNee15fXldenINeQ16og15vXqNeY15nXoSDXlC1TRC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9iYWRfcmVtb3ZhbCIgbXNnaWQ9Ijc5NjA4NjQwNjEwMTY2MDMyODEiPiLXm9eo15jXmdehIFNEINeU15XXodeoINec16TXoNeZINep15jXoteZ16DXqteVINeR15XXmNec15QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDE4MTg4NzIwMDA5NTY5NjkzIj4i15DXl9eh15XXnyBVU0Ig16DXkdeT16cg15vXoteqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMzNDc2MjUwMzkwNDgyNzQ4MSI+Iteb16jXmNeZ16EgU0Qg16DXkdeT16cg15vXoteqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4i15vXqNeY15nXoSBTRCDXlNeV16HXqC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNTgzMDgxNDM0OTI1MDgzNDIyNSI+IteQ15fXodeV158gVVNCINeg157XpteQINeb16LXqiDXkdep15nXnteV16kg16nXnCDXnteX16nXkS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzA2MTMwNTY4MTMzNTQwNDM1Ij4i15vXqNeY15nXoSBTRCDXoNee16bXkCDXm9ei16og15HXqdeZ157XldepINep15wg157Xl9ep15EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4i4oCP157XkdeY15wg15jXoteZ16DXlCDXqdecINeQ15fXodeV158gVVNCLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMjc4OTQ5OTg0MDk1MzcxOTAiPiLigI/XnteR15jXnCDXmNei15nXoNeUINep15wg15vXqNeY15nXoSBTRC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDUyMTU3MzMyMTUyNDM0MDA1OCI+IuKAj9ee15XXl9enINeQ15fXodeV158gVVNCLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1OTY5ODg4NzU1MDcwNDMwNDIiPiLigI/XnteV15fXpyDXm9eo15jXmdehIFNELi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiLigI/XnNeQINeg15nXqtefINec157Xl9eV16cg15DXqiDXkNeX16HXldefINeULSBVU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IuKAj9ec15Ag16DXmdeq158g15zXnteX15XXpyDXkNeqINeb16jXmNeZ16Eg15QtU0QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4i4oCP15vXqNeY15nXoSBTRCDXlNeV16HXqCDXnNek16DXmSDXqdeY16LXmdeg16rXlSDXkdeV15jXnNeULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IuKAj9eQ15fXodeV158gVVNCINeg15HXk9enINeb16LXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMzQ3NjI1MDM5MDQ4Mjc0ODEiPiLigI/Xm9eo15jXmdehIFNEINeg15HXk9enINeb16LXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yZW1vdmVkIiBtc2dpZD0iNzAwMTUyNjkwNTA1Nzk1MjA5NyI+IuKAj9eb16jXmNeZ16EgU0Qg15TXldeh16guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjU4MzA4MTQzNDkyNTA4MzQyMjUiPiLigI/XkNeX16HXldefIFVTQiDXoNee16bXkCDXm9ei16og15HXqdeZ157XldepINep15wg157Xl9ep15EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcwNjEzMDU2ODEzMzU0MDQzNSI+IuKAj9eb16jXmNeZ16EgU0Qg16DXntem15Ag15vXoteqINeR16nXmdee15XXqSDXqdecINee15fXqdeRLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Vua25vd25fc3RhdGUiIG1zZ2lkPSI3MjkxOTI3ODIxOTcyOTAzODUiPiLXnteT15nXlCDXl9eZ16bXldeg15nXqiDXkdee16bXkSDXnNeQINeZ15PXldeiLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlIiBtc2dpZD0iMTc3ODY4NjYxODIzMDAxMTk2NCI+Itep16rXoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZpbmQiIG1zZ2lkPSI0ODA4MjcwOTAwMzIyOTg1OTYwIj4i157XpteQIjwvc3RyaW5nPgpAQCAtMTM5OCw4ICsxNDEwLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iNjI0NjgzNDkzNzA4MDY4NDc5MSI+IteU16TXl9eqINeT16fXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjM2NTIwNTYwNTU4MTAyMjMxMzkiPiLXlNeV16HXoyDXqdei15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIxMzc3NDc5ODYzNDI5MjE0NzkyIj4i15TXpNeX16og16nXoteUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X3NldF9wbV9idXR0b24iIG1zZ2lkPSI0MTQ3NTkwNjk2MTUxMjMwODYzIj4i15TXkteT16ggUE0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfc2V0X2FtX2J1dHRvbiIgbXNnaWQ9IjgzMDIxNDAzNTM1Mzk0ODY3NTIiPiLXlNeS15PXqCBBTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uIiBtc2dpZD0iNDE0NzU5MDY5NjE1MTIzMDg2MyI+IuKAj9eU15LXk9eoIFBNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X3NldF9hbV9idXR0b24iIG1zZ2lkPSI4MzAyMTQwMzUzNTM5NDg2NzUyIj4i4oCP15TXkteT16ggQU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+IteU15XXodejINeX15XXk9epIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X21vbnRoX2J1dHRvbiIgbXNnaWQ9IjE4MzI2OTg5OTU1NDE3MjYwMTkiPiLXlNek15fXqiDXl9eV15PXqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNzEzMDQ2NTQxMjMwODE3MzkwMyI+IteU15XXodejINeZ15XXnSI8L3N0cmluZz4KQEAgLTE0MTQsNDEgKzE0MjYsMzMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLXkdeX16gg15DXpNec15nXp9em15nXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Itec15Ag16DXmdeq158g15TXmdeUINec15TXpNei15nXnCDXkNeqIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLXqdeq16Mg16LXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLXqdeq16Mg16LXnSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IteZ15PXmdeqINec15TXl9ec16fXlC4g15LXoiDXldeU15fXltenLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLXlNeh15gg15zXntei15zXlCDXm9eT15kg15zXlNem15nXkiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i15TXodeYINec157XmNeUINeb15PXmSDXnNeU16bXmdeSIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLXlNeh15gg16nXnteQ15zXlCDXm9eT15kg15zXlNem15nXkiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IteU16HXmCDXmdee15nXoNeUINeb15PXmSDXnNeU16bXmdeSIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IteR15jXnCDXoNei15nXnNeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+Itee16bXnNee15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i16nXp9eYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IteU16fXldecINek15XXotecIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLXl9eZ16TXldepIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4i15TXl9ec16cg15zXkdeZ15jXldecINeg16LXmdec15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IteX15HXqCDXkNeV15bXoNeZ15XXqiDXm9eT15kg15zXqdee15XXoiDXlNen16jXkNeUINep15wg157XpNeq15fXldeqINeh15nXodee15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i16DXp9eV15PXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MjkzNjAwNDk2NjAxNDkwMjE2Ij4i16DXldeV15gg15zXk9ejINeU15HXmdeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl91cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyMzc0OTY1NjI5NTIxNTI1ODkiPiLXoNeV15XXmCDXnNee16LXnNeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21lbnVfb3ZlcmZsb3dfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjk1NjU5MDM3NTA5MDA4NDUzIj4i15DXpNep16jXldeZ15XXqiDXoNeV16HXpNeV16oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNzk2NTk4NDM2MDkwMzY5MzkwMyI+IiUxJHPigI8sICUyJHMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfc3VidGl0bGVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNjk4NTU0NjUzMDQ3MTc4MDcyNyI+IiUxJHPigI8sICUyJHPigI8sICUzJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNzk2NTk4NDM2MDkwMzY5MzkwMyI+IuKAjyUxJHPigI8sICUyJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfc3VidGl0bGVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNjk4NTU0NjUzMDQ3MTc4MDcyNyI+IuKAjyUxJHPigI8sICUyJHPigI8sICUzJHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX2ludGVybmFsIiBtc2dpZD0iNDg5MTkxNjgzMzY1NzkyOTI2MyI+IteQ15fXodeV158g16TXoNeZ157XmSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2Vfc2RfY2FyZCIgbXNnaWQ9IjMyODI5NDg4NjEzNzgyODY3NDUiPiLXm9eo15jXmdehIFNEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2IiIG1zZ2lkPSIzMDE3OTU0MDU5NTM4NTE3Mjc4Ij4i15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4i4oCP15vXqNeY15nXoSBTRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IuKAj9eQ15fXodeV158gVVNCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXh0cmFjdF9lZGl0X21lbnVfYnV0dG9uIiBtc2dpZD0iODk0MDQ3ODczMDQ5NjYxMDEzNyI+Itei16jXldeaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTk1NTYzODg2MjEyMjIzMjM0MiI+IteQ15bXlNeo16og16nXmdee15XXqSDXkdeg16rXldeg15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ19ib2R5IiBtc2dpZD0iMjgxNDY3MzU1MTQ3MTk2OTk1NCI+IteS16Ig15vXk9eZINec15TXpteZ15Ig16DXqteV16DXmSDXqdeZ157XldepINeV15TXkteT16jXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfdGl0bGUiIG1zZ2lkPSI3MDkzMzM0NDE5NTE4NzA2Njg2Ij4i16DXqteV16DXmSAyRy0zRyDXnteV16nXkdeq15nXnSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfdGl0bGUiIG1zZ2lkPSI3NjM2NDg5NDM2ODE5NDcwNzYxIj4i16DXqteV16DXmSA0RyDXnteV16nXkdeq15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfdGl0bGUiIG1zZ2lkPSI3MDkzMzM0NDE5NTE4NzA2Njg2Ij4i4oCP16DXqteV16DXmSAyRy0zRyDXnteV16nXkdeq15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfdGl0bGUiIG1zZ2lkPSI3NjM2NDg5NDM2ODE5NDcwNzYxIj4i4oCP16DXqteV16DXmSA0RyDXnteV16nXkdeq15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+Iteg16rXldeg15nXnSDXnNeg15nXmdeTINee15XXqdeR16rXmdedIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3RpdGxlIiBtc2dpZD0iODk5MjE1NDczNjQ0MTI4NDg2NSI+Iteg16rXldeg15kgV2ktRmkg15TXldep15HXqteVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3RpdGxlIiBtc2dpZD0iODk5MjE1NDczNjQ0MTI4NDg2NSI+IuKAj9eg16rXldeg15kgV2ktRmkg15TXldep15HXqteVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+IteS16Ig15vXk9eZINec15TXpNei15nXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiLXkNeZ16jXoteUINeX16jXmdeS15Qg157XnteS15HXnNeqINeU16DXqteV16DXmdedINep15wgMkctM0ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIxMTA2NTYyNzc5MzExMjA5MDM5Ij4i15DXmdeo16LXlCDXl9eo15nXkteUINee157XkteR15zXqiDXlNeg16rXldeg15nXnSDXqdecIDRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iNzAyNjczOTEyMTEzODAwNTIzMSI+IuKAj9eQ15nXqNei15Qg15fXqNeZ15LXlCDXntee15LXkdec16og15TXoNeq15XXoNeZ150g16nXnCAyRy0zRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiLigI/XkNeZ16jXoteUINeX16jXmdeS15Qg157XnteS15HXnNeqINeU16DXqteV16DXmdedINep15wgNEciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMjc5MjQwNTcyMTY1NDEyMTY4Ij4i15DXmdeo16LXlCDXl9eo15nXkteUINee157XkteR15zXqiDXlNeg16rXldeg15nXnSDXnNeg15nXmdeTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI4NzQzODU2MDA2Mzg0ODI1OTc0Ij4i15DXmdeo16LXlCDXl9eo15nXkteUINee157XkteR15zXqiDXlNeg16rXldeg15nXnSDXqdecIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI4NzQzODU2MDA2Mzg0ODI1OTc0Ij4i4oCP15DXmdeo16LXlCDXl9eo15nXkteUINee157XkteR15zXqiDXlNeg16rXldeg15nXnSDXqdecIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9zbm9vemVkX2JvZHkiIG1zZ2lkPSI3MDM1NDkwMjc4Mjk4NDQxNzY3Ij4iPHhsaWZmOmcgaWQ9IlNJWkUiPiVzPC94bGlmZjpnPiDXntei15wg15zXnteS15HXnNeUINep16bXldeZ16DXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4i16DXqteV16DXmSDXlNeo16fXoiDXnteV15LXkdec15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+IteS16Ig15vXk9eZINec15TXodeZ16gg15DXqiDXlNeU15LXkdec15QuIjwvc3RyaW5nPgpAQCAtMTQ2NCw4ICsxNDY4LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImV4cGlyZXNfb24iIG1zZ2lkPSIzNjc2MjQyOTQ5OTE1OTU5ODIxIj4i16rXkNeo15nXmiDXqtek15XXkteUOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcmlhbF9udW1iZXIiIG1zZ2lkPSI3NTg4MTQwNjc2NjA4NjI0OTMiPiLXnteh16TXqCDXodeZ15PXldeo15k6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmluZ2VycHJpbnRzIiBtc2dpZD0iNDUxNjAxOTYxOTg1MDc2MzA0OSI+IteY15HXmdei15XXqiDXkNem15HXojoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGEyNTZfZmluZ2VycHJpbnQiIG1zZ2lkPSI0MzkxMjcxMjg2NDc3Mjc5MjYzIj4i15jXkdeZ16LXqiDXkNem15HXoiBTSEEtMjU2OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4i15jXkdeZ16LXqiDXkNem15HXoiBTSEEtMToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGEyNTZfZmluZ2VycHJpbnQiIG1zZ2lkPSI0MzkxMjcxMjg2NDc3Mjc5MjYzIj4i4oCP15jXkdeZ16LXqiDXkNem15HXoiBTSEEtMjU2OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4i4oCP15jXkdeZ16LXqiDXkNem15HXoiBTSEEtMToiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfc2VlX2FsbCIgbXNnaWQ9IjQyOTI1NjkzODM5NzY2MzYyMDAiPiLXlNem15Ig15TXm9ecIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNDcxMDAxMzg2NDk3NDA0MDYxNSI+IteR15fXqCDXpNei15nXnNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiLXqdeq16Mg16LXnSI8L3N0cmluZz4KQEAgLTE0ODEsNTEgKzE0ODUsNTcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9kb2NrX3NwZWFrZXJzIiBtc2dpZD0iNjI0MDYwMjk4MjI3NjU5MTg2NCI+Iteo157Xp9eV15zXmdedINep15wg157XoteS158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X21lZGlhX3JvdXRlX25hbWVfaGRtaSIgbXNnaWQ9IjI0NTA5NzAzOTkwMjM0NzgwNTUiPiJIRE1JIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+Itee16LXqNeb16oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IteQ15XXk9eZ15UgQmx1ZXRvb3RoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLigI/XkNeV15PXmdeVIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i16bXkiDXkNec15fXldeY15kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i16HXmdeV150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLXpNec15gg157Xk9eZ15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IteU16rXl9eR16jXldeqINec157Xm9ep15nXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IteU16LXkdeo16og157XodeaINeQ15wg157Xm9ep15nXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Itee15fXpNepINee15vXqdeZ16jXmded4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i15TXkteT16jXldeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IteU16rXoNeq16ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i16HXldeo16cuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLXnteq15fXkdeoLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLXltee15nXnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNjczOTg5OTk2MjY4MTg4NjQwMSI+Itec15Ag15bXnteZ158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfaW5fdXNlIiBtc2dpZD0iNDUzMzc4NjAzMTA5MDE5ODA2MyI+IteR16nXmdee15XXqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9idWlsdF9pbl9kaXNwbGF5X25hbWUiIG1zZ2lkPSIyNTgzMTM0Mjk0MjkyNTYzOTQxIj4i157XodeaINee15XXkdeg15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfaGRtaV9kaXNwbGF5X25hbWUiIG1zZ2lkPSIxNTU1MjY0NTU5MjI3NDcwMTA5Ij4i157XodeaIEhETUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfaGRtaV9kaXNwbGF5X25hbWUiIG1zZ2lkPSIxNTU1MjY0NTU5MjI3NDcwMTA5Ij4i4oCP157XodeaIEhETUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i16nXm9eR16og16LXnCAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IOKAjjx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz7igI4sIOKAjzx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiLigI88eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IOKAjjx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz7igI4sIOKAjzx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsINee15DXldeR15jXlyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i157XodeaINeQ15zXl9eV15jXmSDXnteX15XXkdeoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+Itee16HXmiDXlteUINee15XXpteSINeR157Xm9ep15nXqCDXkNeX16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4i15TXoteR16jXqiDXnteh15og157XqteR16bXoteqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4i157XqteX15HXqCDXkNecIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IteU16LXkdeo16og157XodeaINee16rXkdem16LXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4i157Xl9eV15HXqCDXkNecIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLXoNeq16ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Itep15nXl9eqINeX15nXqNeV150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLXqdeb15fXqiDXkNeqINeU16fXlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i16fXlSDXkdeZ15jXldecINeg16LXmdec15Qg16nXkteV15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiLXodeZ16HXnteUINep15LXldeZ15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i157Xodek16ggUElOINep15LXldeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IuKAj9ee16HXpNeoIFBJTiDXqdeS15XXmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i16nXqNeY15gg15DXqiDXp9eVINeR15nXmNeV15wg15TXoNei15nXnNeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4i15TXltefINee16HXpNeoIFBJTiDXnC1TSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IteU15bXnyDXnteh16TXqCBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLigI/XlNeW158g157Xodek16ggUElOINecLVNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4i4oCP15TXltefINee16HXpNeoIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiLXlNeW158g15DXqiDXlNeh15nXodee15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiLXm9eo15jXmdehINeULVNJTSDXnteV16nXkdeqINeb16LXqi4g15TXltefINen15XXkyBQVUsg15vXk9eZINec15TXntep15nXmi4g16TXoNeUINeQ15wg15TXodek16cg15zXpNeo15jXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLXlNeW158g15DXqiDXp9eV15Mg15QtUElOINeU16jXpteV15kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i15DXqdeoINeQ16og16fXldeTINeULVBJTiDXlNeo16bXldeZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLXnteR15jXnCDXoNei15nXnNeUINep15wg15vXqNeY15nXoSBTSU3igKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiLXp9eV15MgUElOINep15LXldeZLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IteU16fXnNeTINee16HXpNeoIFBJTiDXqdeQ15XXqNeb15UgNCDXoteTIDgg16HXpNeo15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiLXp9eV15MgUFVLINem16jXmdeaINec15TXmdeV16og15HXnyA4INeh16TXqNeV16og15DXlSDXmdeV16rXqC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLXlNeW158g157Xl9eT16kg15DXqiDXp9eV15MgUFVLINeU16DXm9eV158uINeg15nXodeZ15XXoNeV16og15fXldeW16jXmdedINeZ16nXkdeZ16rXlSDXnNem157Xmdeq15XXqiDXkNeqINeb16jXmNeZ16Eg15QtU0lNLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLXp9eV15PXmSDXlC1QSU4g15DXmdeg150g16rXldeQ157XmdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i4oCP15vXqNeY15nXoSDXlC1TSU0g157Xldep15HXqiDXm9ei16ouINeU15bXnyDXp9eV15MgUFVLINeb15PXmSDXnNeU157XqdeZ15ouINek16DXlCDXkNecINeU16HXpNenINec16TXqNeY15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i4oCP15TXltefINeQ16og16fXldeTINeULVBJTiDXlNeo16bXldeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuKAj9eQ16nXqCDXkNeqINen15XXkyDXlC1QSU4g15TXqNem15XXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4i4oCP157XkdeY15wg16DXoteZ15zXlCDXqdecINeb16jXmNeZ16EgU0lN4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i4oCP16fXldeTIFBJTiDXqdeS15XXmS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLigI/XlNen15zXkyDXnteh16TXqCBQSU4g16nXkNeV16jXm9eVIDQg16LXkyA4INeh16TXqNeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4i4oCP16fXldeTIFBVSyDXpteo15nXmiDXnNeU15nXldeqINeR158gOCDXodek16jXldeqINeQ15Ug15nXldeq16guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4oCP15TXltefINee15fXk9epINeQ16og16fXldeTIFBVSyDXlNeg15vXldefLiDXoNeZ16HXmdeV16DXldeqINeX15XXlteo15nXnSDXmdep15HXmdeq15Ug15zXptee15nXqteV16og15DXqiDXm9eo15jXmdehINeULVNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i4oCP16fXldeT15kg15QtUElOINeQ15nXoNedINeq15XXkNee15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Iteg15nXodeZ15XXoNeV16og16jXkdeZ150g157Xk9eZINec16nXqNeY15XXmCDXp9eVINeR15nXmNeV15wg16DXoteZ15zXlC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i15vXk9eZINec15HXmNecINeQ16og15TXoNei15nXnNeULCDXlNeZ15vXoNehINeR15DXntem16LXldeqINeX16nXkdeV158gR29vZ2xlINep15zXmi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4oCP15vXk9eZINec15HXmNecINeQ16og15TXoNei15nXnNeULCDXlNeZ15vXoNehINeR15DXntem16LXldeqINeX16nXkdeV158gR29vZ2xlINep15zXmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+Itep150g157Xqdeq157XqSAo15PXldeQXCLXnCkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+Iteh15nXodee15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IteU15nXm9eg16EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+Itep150g157Xqdeq157XqSDXkNeVINeh15nXodee15Qg15zXkCDXl9eV16fXmdeZ150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+Itep15vXl9eqINeQ16og16nXnSDXlNee16nXqtee16kg15DXlSDXlNeh15nXodee15Q/XG7Xkden16gg15HXm9eq15XXkdeqICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4oCP16nXm9eX16og15DXqiDXqdedINeU157Xqdeq157XqSDXkNeVINeU16HXmdeh157XlD9cbteR16fXqCDXkdeb16rXldeR16ogIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IteR15XXk9enINeX16nXkdeV15/igKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IteU16fXnNeT16og157Xodek16ggUElOINep15LXldeZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uIFxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLigI/XlNen15zXk9eqINee16HXpNeoIFBJTiDXqdeS15XXmSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLiBcblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLXlNen15zXk9eqINeh15nXodee15Qg16nXkteV15nXlCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLlxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Itep16jXmNeY16og15DXqiDXp9eVINeR15nXmNeV15wg15TXoNei15nXnNeUINeR15DXldek158g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS4gXG5cbteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLXkdeZ16bXoteqIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og16nXkteV15nXmdedINec15HXmdeY15XXnCDXoNei15nXnNeqINeU15jXnNek15XXny4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXlNeY15DXkdec15gg15nXoteR15XXqCDXkNeZ16TXldehINec15HXqNeZ16jXqiDXlNee15fXk9ecINep15wg15TXmdem16jXnyDXldeb15wg16DXqteV16DXmSDXlNee16nXqtee16kg15nXkNeR15PXlS4iPC9zdHJpbmc+CkBAIC0xNTg1LDkgKzE1OTUsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX2p1bmlvcl9sZWdhbCIgbXNnaWQ9IjMzMDkzMjQxNjIxNTUwODU5MDQiPiJKdW5pb3IgTGVnYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfbGVkZ2VyIiBtc2dpZD0iNTU2NzAzMDM0MDUwOTA3NTMzMyI+IkxlZGdlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9uYV90YWJsb2lkIiBtc2dpZD0iNDU3MTczNTAzODUwMTY2MTc1NyI+IlRhYmxvaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfaW5kZXhfM3g1IiBtc2dpZD0iNTE4MjkwMTkxNzgxODYyNTEyNiI+Iteb16jXmNeZ16Eg15DXmdeg15PXp9ehIDN4NSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9uYV9pbmRleF80eDYiIG1zZ2lkPSI3Njg3NjIwNjI1NDIyMzEyMzk2Ij4i15vXqNeY15nXoSDXkNeZ16DXk9en16EgNHg2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX2luZGV4XzV4OCIgbXNnaWQ9Ijg4MzQyMTUyODQ2NDY4NzI4MDAiPiLXm9eo15jXmdehINeQ15nXoNeT16fXoSA1eDgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfaW5kZXhfM3g1IiBtc2dpZD0iNTE4MjkwMTkxNzgxODYyNTEyNiI+IuKAj9eb16jXmNeZ16Eg15DXmdeg15PXp9ehIDN4NSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9uYV9pbmRleF80eDYiIG1zZ2lkPSI3Njg3NjIwNjI1NDIyMzEyMzk2Ij4i4oCP15vXqNeY15nXoSDXkNeZ16DXk9en16EgNHg2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX2luZGV4XzV4OCIgbXNnaWQ9Ijg4MzQyMTUyODQ2NDY4NzI4MDAiPiLigI/Xm9eo15jXmdehINeQ15nXoNeT16fXoSA1eDgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfbW9uYXJjaCIgbXNnaWQ9IjIxMzYzOTkwNjk1NjU1MDc1NCI+Ik1vbmFyY2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfcXVhcnRvIiBtc2dpZD0iODM1Nzc4NDkzNTkzMDIzMjIzIj4iUXVhcnRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX2Zvb2xzY2FwIiBtc2dpZD0iMTU3MzkxMTIzNzk4MzY3NzEzOCI+IkZvb2xzY2FwIjwvc3RyaW5nPgpAQCAtMTYzNSwxOSArMTY0NSwzMCBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3NlcnZpY2VfdW5hdmFpbGFibGUiIG1zZ2lkPSI3ODI0MDA4NzMyMjQzOTAzMjY4Ij4i16nXmdeo15XXqiDXlNeU15PXpNeh15Qg15zXkCDXlNeV16TXotecIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZV9pbnN0YWxsZWRfdGl0bGUiIG1zZ2lkPSIyMjQ2MzE3MTY5NDQ0MDgxNjI4Ij4i16nXmdeo15XXqiA8eGxpZmY6ZyBpZD0iTkFNRSI+JXM8L3hsaWZmOmc+INee15XXqten158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlX2luc3RhbGxlZF9tZXNzYWdlIiBtc2dpZD0iNTg5NzM2MjkzMTA3MDQ1OTE1MiI+IteU16fXqSDXm9eT15kg15zXlNek16LXmdecIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX2FkbWluX3BpbiIgbXNnaWQ9Ijc4MzY0MzczMTg5NTE0Mzk3MCI+IteU15bXnyDXkNeqINee16HXpNeoINeULVBJTiDXqdecINee16DXlNecINeU157Xoteo15vXqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9waW4iIG1zZ2lkPSIzMzk1OTUzNDIxMzY4NDc2MTAzIj4i15TXltefINee16HXpNeoIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9hZG1pbl9waW4iIG1zZ2lkPSI3ODM2NDM3MzE4OTUxNDM5NzAiPiLigI/XlNeW158g15DXqiDXnteh16TXqCDXlC1QSU4g16nXnCDXnteg15TXnCDXlNee16LXqNeb16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfcGluIiBtc2dpZD0iMzM5NTk1MzQyMTM2ODQ3NjEwMyI+IuKAj9eU15bXnyDXnteh16TXqCBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5faW5jb3JyZWN0IiBtc2dpZD0iODU3MTUxMjAwMzk1NTA3NzkyNCI+Itep15LXldeZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX29sZF9waW4iIG1zZ2lkPSIxNDYyMjA2MjI1NTEyOTEwNzU3Ij4i157Xodek16ggUElOINeg15XXm9eX15kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfbmV3X3BpbiIgbXNnaWQ9IjU5NTk2MDY2OTE2MTk5NTkxODQiPiLXnteh16TXqCBQSU4g15fXk9epIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NvbmZpcm1fcGluIiBtc2dpZD0iODUwMTUyMzgyOTYzMzE0NjIzOSI+IteQ16nXqCDXkNeqINee16HXpNeoINeULVBJTiDXlNeX15PXqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jcmVhdGVfcGluIiBtc2dpZD0iODAxNzYwMDAwMDI2MzQ1MDMzNyI+Item15XXqCDXnteh16TXqCBQSU4g15zXqdeZ16DXldeZINeU15LXkdec15XXqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lcnJvcl9kb2VzbnRfbWF0Y2giIG1zZ2lkPSIyMjI0MjE0MTkwOTA2OTk0NTQ4Ij4i157Xodek16jXmSDXlC1QSU4g15zXkCDXqteV15DXnteZ150uINeg16HXlCDXqdeV15EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX3Rvb19zaG9ydCIgbXNnaWQ9IjgxNzM5ODI3NTYyNjU3Nzc3OTIiPiLXnteh16TXqCDXlC1QSU4g16fXpteoINee15PXmS4g15fXmdeZ15Eg15zXlNeZ15XXqiDXkdeQ15XXqNeaIDQg16HXpNeo15XXqiDXnNek15fXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9vbGRfcGluIiBtc2dpZD0iMTQ2MjIwNjIyNTUxMjkxMDc1NyI+IuKAj9ee16HXpNeoIFBJTiDXoNeV15vXl9eZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX25ld19waW4iIG1zZ2lkPSI1OTU5NjA2NjkxNjE5OTU5MTg0Ij4i4oCP157Xodek16ggUElOINeX15PXqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jb25maXJtX3BpbiIgbXNnaWQ9Ijg1MDE1MjM4Mjk2MzMxNDYyMzkiPiLigI/XkNep16gg15DXqiDXnteh16TXqCDXlC1QSU4g15TXl9eT16kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY3JlYXRlX3BpbiIgbXNnaWQ9IjgwMTc2MDAwMDAyNjM0NTAzMzciPiLigI/XpteV16gg157Xodek16ggUElOINec16nXmdeg15XXmSDXlNeS15HXnNeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfZG9lc250X21hdGNoIiBtc2dpZD0iMjIyNDIxNDE5MDkwNjk5NDU0OCI+IuKAj9ee16HXpNeo15kg15QtUElOINec15Ag16rXldeQ157XmdedLiDXoNeh15Qg16nXldeRLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lcnJvcl90b29fc2hvcnQiIG1zZ2lkPSI4MTczOTgyNzU2MjY1Nzc3NzkyIj4i4oCP157Xodek16gg15QtUElOINen16bXqCDXnteT15kuINeX15nXmdeRINec15TXmdeV16og15HXkNeV16jXmiA0INeh16TXqNeV16og15zXpNeX15XXqi4iPC9zdHJpbmc+CiAgIDxwbHVyYWxzIG5hbWU9InJlc3RyX3Bpbl9jb3VudGRvd24iPgogICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMTEwNTA5OTUxOTg1NDg2NzUiPiLXoNeh15Qg16nXldeRINeR16LXldeTINep16DXmdeZ15QiPC9pdGVtPgogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiLXoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INep16DXmdeV16oiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i16DXodeUINep15XXkSDXnteQ15XXl9eoINeZ15XXqteoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IteU15fXnNenINee15jXlCDXnteU15fXnNenINeU16LXnNeZ15XXnyDXm9eT15kg15zXpteQ16og157Xnteh15og157XnNeQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i15HXldem16IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLXnteX15XXldefINep16LXldeqINee16LXktec15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+Itee15fXldeV158g15PXp9eV16og157XoteS15zXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLXkdeX16gg16nXoteV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLXkdeX16gg15PXp9eV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IteR15fXmdeo16og15nXnteZ150g15HXl9eV15PXqSDXkdeq16bXldeS16og16jXqdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i16jXqdeZ157XqiDXqdeg15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i15HXl9eoINeX15XXk9epINeV15nXldedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4i15HXl9eoINep16DXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4g16DXkdeX16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDXoNee15fXpyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKaW5kZXggMjQ2YTgyZS4uNzc1ZjNhZSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJQVUvjga845qGB5Lul5LiK44Gn5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlNJTeOCq+ODvOODieOBr1BVS+OBp+ODreODg+OCr+OBleOCjOOBpuOBhOOBvuOBmeOAguODreODg+OCr+OCkuino+mZpOOBmeOCi+OBq+OBr1BVS+OCs+ODvOODieOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNJTeOCq+ODvOODieOBruODreODg+OCr+ino+mZpOOBruOBn+OCgVBVSzLjgpLlhaXlipvjgZfjgb7jgZnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJTSU0vUlVJTeODreODg+OCr+OCkuacieWKueOBq+OBl+OBpuOBj+OBoOOBleOBhOOAgiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IuWFpeWKm+OBp+OBjeOCi+OBruOBr+OBguOBqDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuWbnuOBp+OBmeOAguOBk+OBruWbnuaVsOOCkui2heOBiOOCi+OBqFNJTeOBjOODreODg+OCr+OBleOCjOOBvuOBmeOAgiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IuWFpeWKm+OBp+OBjeOCi+OBruOBr+OBguOBqDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuWbnuOBp+OBmeOAguOBk+OBruWbnuaVsOOCkui2heOBiOOCi+OBqFNJTeOBjOODreODg+OCr+OBleOCjOOBvuOBmeOAgiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i552A5L+h5pmC44Gu55m65L+h6ICF55Wq5Y+3Ijwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJWUE7jgrXjg7zjg5Pjgrnjga7jg4jjg4Pjg5fjg6zjg5njg6vjgqTjg7Pjgr/jg7zjg5Xjgqfjg7zjgrnjgavjg5DjgqTjg7Pjg4njgZnjgovjgZPjgajjgpLmiYDmnInogIXjgavoqLHlj6/jgZfjgb7jgZnjgILpgJrluLjjga7jgqLjg5fjg6rjgafjga/kuI3opoHjgafjgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i5aOB57SZ44Gr44OQ44Kk44Oz44OJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLlo4HntJnjga7jg4jjg4Pjg5fjg6zjg5njg6vjgqTjg7Pjgr/jg7zjg5Xjgqfjg7zjgrnjgavjg5DjgqTjg7Pjg4njgZnjgovjgZPjgajjgpLmiYDmnInogIXjgavoqLHlj6/jgZfjgb7jgZnjgILpgJrluLjjga7jgqLjg5fjg6rjgafjga/kuI3opoHjgafjgZnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuODquODouODvOODiOODh+OCo+OCueODl+ODrOOCpOOBuOOBruODkOOCpOODs+ODiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IuODquODouODvOODiOODh+OCo+OCueODl+ODrOOCpOOBruODiOODg+ODl+ODrOODmeODq+OCpOODs+OCv+ODvOODleOCp+ODvOOCueOBq+ODkOOCpOODs+ODieOBmeOCi+OBk+OBqOOCkuaJgOacieiAheOBq+ioseWPr+OBl+OBvuOBmeOAgumAmuW4uOOBruOCouODl+ODquOBp+OBr+S4jeimgeOBp+OBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IuOCpuOCo+OCuOOCp+ODg+ODiOOCteODvOODk+OCueOBq+ODkOOCpOODs+ODiSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLjgqbjgqPjgrjjgqfjg4Pjg4jjgrXjg7zjg5Pjgrnjga7jg4jjg4Pjg5fjg6zjg5njg6vjgqTjg7Pjgr/jg7zjg5Xjgqfjg7zjgrnjgavjg5DjgqTjg7Pjg4njgZnjgovjgZPjgajjgpLmiYDmnInogIXjgavoqLHlj6/jgZfjgb7jgZnjgILpgJrluLjjga7jgqLjg5fjg6rjgafjga/kuI3opoHjgafjgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLjg4fjg5DjgqTjgrnnrqHnkIbogIXjgajjga7pgJrkv6EiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlN1cmZhY2VGbGluZ2Vy44Gu5L2O44Os44OZ44Or44Gu5qmf6IO944Gu5L2/55So44KS44Ki44OX44Oq44Gr6Kix5Y+v44GX44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4i44OV44Os44O844Og44OQ44OD44OV44Kh44Gu6Kqt44G/5Y+W44KKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuODleODrOODvOODoOODkOODg+ODleOCoeOBruWGheWuueOBruiqreOBv+WPluOCiuOCkuOCouODl+ODquOBq+ioseWPr+OBl+OBvuOBmeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IklucHV0RmxpbmdlcuOBuOOBruOCouOCr+OCu+OCuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJJbnB1dEZsaW5nZXLjga7kvY7jg6zjg5njg6vjga7mqZ/og73jgpLkvb/nlKjjgZnjgovjgZPjgajjgpLjgqLjg5fjg6rjgavoqLHlj6/jgZfjgb7jgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IldpLUZp44OH44Kj44K544OX44Os44Kk44Gu6Kit5a6aIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iV2ktRmnjg4fjgqPjgrnjg5fjg6zjgqTjgpLoqK3lrprjgZfjgabmjqXntprjgZnjgovjgZPjgajjgpLjgqLjg5fjg6rjgavoqLHlj6/jgZfjgb7jgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IldpLUZp44OH44Kj44K544OX44Os44Kk44Gu5Yi25b6hIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+Iumfs+WjsOWFqOiIrOOBruioreWumu+8iOmfs+mHj+OAgeWHuuWKm+OBq+S9v+eUqOOBmeOCi+OCueODlOODvOOCq+ODvOOBquOBqe+8ieOBruWkieabtOOCkuOCouODl+ODquOBq+ioseWPr+OBl+OBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4i6Yyy6Z+zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i44Oe44Kk44Kv44KS5L2/44Gj44Gf6Yyy6Z+z44KS44Ki44OX44Oq44Gr6Kix5Y+v44GX44G+44GZ44CC44GT44KM44Gr44KI44KK44CB44Ki44OX44Oq44GM44GE44Gk44Gn44KC56K66KqN44Gq44GX44Gn6Yyy6Z+z44Gn44GN44KL44KI44GG44Gr44Gq44KK44G+44GZ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJTSU3pgJrkv6EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJTSU3jgavjgrPjg57jg7Pjg4njgpLpgIHkv6HjgZnjgovjgZPjgajjgpLjgqLjg5fjg6rjgavoqLHlj6/jgZfjgb7jgZnvvaHjgZPjga7oqLHlj6/jga/pnZ7luLjjgavljbHpmbrjgafjgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLlhpnnnJ/jgajli5XnlLvjga7mkq7lvbEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i44Kr44Oh44Op44Gn44Gu5YaZ55yf44Go5YuV55S744Gu5pKu5b2x44KS44Ki44OX44Oq44Gr6Kix5Y+v44GX44G+44GZ44CC44GT44KM44Gr44KI44KK44CB44Ki44OX44Oq44GM56K66KqN44Gq44GX44Gn44GE44Gk44Gn44KC44Kr44Oh44Op44KS5L2/55So44Gn44GN44KL44KI44GG44Gr44Gq44KK44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i44Kr44Oh44Op44Gu5L2/55So5Lit44Gr6YCa5L+h44Kk44Oz44K444Kx44O844K/TEVE44KS54Sh5Yq544Gr44GZ44KLIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4i6Ieq5a6FIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IuWLpOWLmeWFiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i44Gd44Gu5LuWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IuOBk+OBrumAo+e1oeWFiOOCkuihqOekuuOBmeOCi+OCouODl+ODquOBjOimi+OBpOOBi+OCiuOBvuOBm+OCk+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTuOCs+ODvOODieOCkuWFpeWKmyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVS+OBqOaWsOOBl+OBhFBJTuOCs+ODvOODieOCkuWFpeWKmyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVL44Kz44O844OJIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IuOCouODl+ODquOBrumBuOaKniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz7jgpLotbfli5XjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLlhbHmnIkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPuOBqOWFseaciSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLjgrnjg6njgqTjg4Djg7zjg4/jg7Pjg4njg6vjgafjgZnjgILmirzjgZfntprjgZHjgb7jgZnjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i5LiK44Gr44K544Op44Kk44OJ44GX44GmPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44KS6KGM44GE44G+44GZ44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i5LiL44Gr44K544Op44Kk44OJ44GX44GmPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44KS6KGM44GE44G+44GZ44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i5bem44Gr44K544Op44Kk44OJ44GX44GmPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44KS6KGM44GE44G+44GZ44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuWPs+OBq+OCueODqeOCpOODieOBl+OBpjx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOCkuihjOOBhOOBvuOBmeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i44Ot44OD44Kv44KS6Kej6ZmkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuOCq+ODoeODqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLjg57jg4rjg7zjg6Ljg7zjg4kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i44K144Km44Oz44OJT04iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuaknOe0ouOBl+OBvuOBmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IuODreODg+OCr+ino+mZpOOBmeOCi+OBq+OBr+OCueODr+OCpOODl+OBl+OBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLjg5Hjgrnjg6/jg7zjg4njga7jgq3jg7zjgYzpn7Plo7Dlh7rlipvjgZXjgozjgovjga7jgafjg5jjg4Pjg4njgrvjg4Pjg4jjgpLmjqXntprjgZfjgabjgY/jgaDjgZXjgYTjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLjg4njg4Pjg4jjgIIiPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLjgrfjgrnjg4bjg6AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aOmfs+WjsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i44Ov44Kk44Ok44Os44K544OH44Kj44K544OX44Os44KkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IuWujOS6hiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IuODoeODh+OCo+OCouWHuuWKmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i56uv5pyr44Gr5o6l57aaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4i56uv5pyr44G444Gu55S76Z2i44Gu44Kt44Oj44K544OIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i56uv5pyr44KS5qSc57Si44GX44Gm44GE44G+44GZ4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IuaOpee2muOCkuino+mZpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLjgrnjgq3jg6Pjg7PkuK0uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLmjqXntprkuK0uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IuWIqeeUqOOBp+OBjeOBvuOBmSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IuOCquODvOODkOODvOODrOOCpOesrDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+44CBPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IuOAgeOCu+OCreODpeOCoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i44Ov44Kk44Ok44Os44K544OH44Kj44K544OX44Os44Kk44GM5o6l57aa44GV44KM44Gm44GE44G+44GZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IuOBk+OBrueUu+mdouOBr+WIpeOBruerr+acq+OBp+ihqOekuuOBleOCjOOBpuOBhOOBvuOBmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiLnlLvpnaLjga7jgq3jg6Pjgrnjg4jkuK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7jgavmjqXntprjgZfjgabjgYTjgb7jgZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLnlLvpnaLjga7jgq3jg6Pjgrnjg4jkuK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuOBq+aOpee2muOBl+OBvuOBl+OBnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLliIfmlq0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Iue3iuaApemAmuWgsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IuODkeOCv+ODvOODs+OCkuW/mOOCjOOBn+WgtOWQiCI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY2MCwxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i44GX44Gw44KJ44GP44GX44Gm44GL44KJ5YaN6Kmm6KGMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IuWFqOeUu+mdouihqOekuuOCkue1guS6huOBmeOCi+OBq+OBr+OAgeS4iuOBi+OCieS4i+OBq+OCueODr+OCpOODlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i5a6M5LqGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4i5YaG5b2i44K544Op44Kk44OA44O877yI5pmC77yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLlhoblvaLjgrnjg6njgqTjg4Djg7zvvIjliIbvvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i5pmC6ZaT44KS6YG45oqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4i5YiG44KS6YG45oqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLml6XjgrDjg6rjg4Pjg4nvvIjmnIjliKXvvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLlubTjg6rjgrnjg4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IuaciOOBqOaXpeOCkumBuOaKniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IuW5tOOCkumBuOaKniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz7jgpLpgbjmip7jgZfjgb7jgZfjgZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPuOCkuWJiumZpOOBl+OBvuOBl+OBnyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAppbmRleCBhODAyNWQ4Li5hZDljMTUxIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4i4YOQ4YOZ4YOg4YOY4YOk4YOU4YOXIFBVSywg4YOg4YOd4YOb4YOU4YOa4YOY4YOqIOGDoOGDleGDkCDhg5Dhg5wg4YOb4YOU4YOi4YOYIOGDquGDmOGDpOGDoOGDmOGDoeGDkuGDkOGDnCDhg6jhg5Thg5Phg5Lhg5Thg5Hhg5AuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IuGDl+GDpeGDleGDlOGDnOGDmCBTSU0g4YOR4YOQ4YOg4YOQ4YOX4YOYIOGDk+GDkOGDkeGDmuGDneGDmeGDmOGDmuGDmOGDkCBQVUsg4YOZ4YOd4YOT4YOY4YOXLiDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Hhg5fhg5Xhg5jhg6Eg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOU4YOXIFBVSyDhg5nhg53hg5Phg5guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iU0lNIOGDkeGDkOGDoOGDkOGDl+GDmOGDoSDhg5Lhg5Dhg5zhg6Hhg5Dhg5Hhg5rhg53hg5nhg5Dhg5Mg4YOQ4YOZ4YOg4YOY4YOk4YOU4YOXIFBVSzIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDm+GDquGDk+GDlOGDmuGDneGDkeGDkC4g4YOp4YOQ4YOg4YOX4YOU4YOXIFNJTS9SVUlNIOGDqeGDkOGDmeGDlOGDouGDleGDkC4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOT4YOQ4YOS4YOg4YOp4YOQ4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5AsIOGDoeGDkOGDnOGDkOGDmyBTSU0g4YOT4YOQ4YOY4YOR4YOa4YOd4YOZ4YOU4YOR4YOd4YOT4YOU4YOhLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IuGDl+GDpeGDleGDlOGDnCDhg5Phg5Dhg5Lhg6Dhg6nhg5Dhg5cgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGDm+GDquGDk+GDlOGDmuGDneGDkeGDkCwg4YOh4YOQ4YOc4YOQ4YObIFNJTSDhg5Phg5Dhg5jhg5Hhg5rhg53hg5nhg5Thg5Hhg53hg5Phg5Thg6EuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLhg6jhg5Thg5vhg53hg5vhg5Dhg5Xhg5Dhg5rhg5gg4YOW4YOQ4YOg4YOY4YOhIOGDkOGDkeGDneGDnOGDlOGDnOGDouGDmOGDoSBJRCI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i4YOQ4YOe4YOhIOGDqOGDlOGDlOGDq+GDmuGDlOGDkeGDkCBWcG4g4YOh4YOU4YOg4YOV4YOY4YOh4YOY4YOhIOGDluGDlOGDk+GDkCDhg5Phg53hg5zhg5jhg6Eg4YOY4YOc4YOi4YOU4YOg4YOk4YOU4YOY4YOh4YOX4YOQ4YOcIOGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDkC4g4YOQ4YOg4YOQ4YOh4YOT4YOg4YOd4YOhIOGDkuGDkOGDm+GDneGDmOGDp+GDlOGDnOGDlOGDkeGDkCDhg6nhg5Xhg5Thg6Phg5rhg5Thg5Hhg6Dhg5jhg5Ug4YOQ4YOe4YOU4YOR4YOo4YOYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLhg6Thg53hg5zhg5bhg5Qg4YOb4YOY4YOt4YOU4YOT4YOU4YOR4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLhg5vhg6Thg5rhg53hg5Hhg5Thg5rhg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQIOGDpOGDneGDnOGDmOGDoSDhg5bhg5Thg5Phg5Ag4YOT4YOd4YOc4YOY4YOhIOGDmOGDnOGDouGDlOGDoOGDpOGDlOGDmOGDoeGDl+GDkOGDnCDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg5AuIOGDkOGDoOGDkOGDoeGDk+GDoOGDneGDoSDhg5Lhg5Dhg5vhg53hg5jhg6fhg5Thg5zhg5Thg5Hhg5Ag4YOp4YOV4YOU4YOj4YOa4YOU4YOR4YOg4YOY4YOVIOGDkOGDnuGDlOGDkeGDqOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuGDk+GDmOGDoeGDouGDkOGDnOGDquGDmOGDo+GDoCDhg5vhg53hg5zhg5jhg6Lhg53hg6Dhg5bhg5Qg4YOb4YOY4YOR4YOb4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i4YOb4YOk4YOa4YOd4YOR4YOU4YOa4YOhIOGDqOGDlOGDlOGDq+GDmuGDlOGDkeGDkCDhg5vhg5jhg5Thg5Hhg5Dhg6Eg4YOT4YOY4YOh4YOi4YOQ4YOc4YOq4YOY4YOj4YOgIOGDm+GDneGDnOGDmOGDouGDneGDoOGDmOGDoSDhg5bhg5Thg5Phg5Ag4YOT4YOd4YOc4YOY4YOhIOGDmOGDnOGDouGDlOGDoOGDpOGDlOGDmOGDoeGDoS4g4YOp4YOV4YOU4YOj4YOa4YOU4YOR4YOg4YOY4YOVIOGDkOGDnuGDoSDhg5Thg6Eg4YOs4YOU4YOh4YOY4YOXIOGDkOGDoOGDkOGDoeGDneGDk+GDlOGDoSDhg6Phg5zhg5Phg5Ag4YOT4YOQ4YOt4YOY4YOg4YOT4YOU4YOhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IuGDleGDmOGDr+GDlOGDoiDhg6Hhg5Thg6Dhg5Xhg5jhg6Hhg5fhg5Dhg5wg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IuGDkOGDnuGDoSDhg6jhg5Thg5Thg6vhg5rhg5Thg5Hhg5Ag4YOW4YOU4YOT4YOQIOGDk+GDneGDnOGDmOGDoSDhg5jhg5zhg6Lhg5Thg6Dhg6Thg5Thg5jhg6Hhg5jhg6Eg4YOV4YOY4YOv4YOU4YOi4YOX4YOQ4YOcIOGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDkC4g4YOQ4YOg4YOQ4YOh4YOT4YOg4YOd4YOhIOGDkuGDkOGDm+GDneGDmOGDp+GDlOGDnOGDlOGDkeGDkCDhg6nhg5Xhg5Thg6Phg5rhg5Thg5Hhg6Dhg5jhg5Ug4YOQ4YOe4YOU4YOR4YOo4YOYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+IuGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDmOGDoSDhg5Dhg5Phg5vhg5jhg5zhg5fhg5Dhg5wg4YOY4YOc4YOi4YOU4YOg4YOQ4YOl4YOq4YOY4YOQIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLhg5Dhg57hg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQLCDhg5Lhg5Dhg5vhg53hg5jhg6fhg5Thg5zhg53hg6EgU3VyZmFjZUZsaW5nZXIt4YOY4YOhIOGDk+GDkOGDkeGDkOGDmuGDmCDhg5Phg53hg5zhg5jhg6Eg4YOU4YOa4YOU4YOb4YOU4YOc4YOi4YOU4YOR4YOYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuGDmeGDkOGDk+GDoOGDmOGDoSDhg5Hhg6Phg6Thg5Thg6Dhg5jhg6EgKOGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg6jhg5jhg5Lhg5fhg5Dhg5Xhg6Hhg5jhg6EpIOGDrOGDkOGDmeGDmOGDl+GDruGDleGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLhg5Dhg57hg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQIOGDrOGDkOGDmOGDmeGDmOGDl+GDruGDneGDoSDhg5Hhg6Phg6Thg5Thg6Dhg6Phg5rhg5gg4YOp4YOQ4YOg4YOp4YOd4YOhIOGDmeGDneGDnOGDouGDlOGDnOGDouGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXIt4YOW4YOUIOGDrOGDleGDk+GDneGDm+GDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLhg5Dhg57hg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQLCDhg5Lhg5Dhg5vhg53hg5jhg6fhg5Thg5zhg53hg6EgSW5wdXRGbGluZ2VyLeGDmOGDoSDhg5Phg5Dhg5Hhg5Dhg5rhg5gg4YOT4YOd4YOc4YOY4YOhIOGDpOGDo+GDnOGDpeGDquGDmOGDlOGDkeGDmC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IldpZmkg4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDmeGDneGDnOGDpOGDmOGDkuGDo+GDoOGDkOGDquGDmOGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuGDkOGDnuGDoSDhg6jhg5Thg5Thg6vhg5rhg5Thg5Hhg5AgV2lmaSDhg5Thg5nhg6Dhg5Dhg5zhg5Thg5Hhg5fhg5Dhg5wg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOQIOGDk+GDkCDhg5Phg5Dhg5nhg53hg5zhg6Thg5jhg5Lhg6Phg6Dhg5jhg6Dhg5Thg5Hhg5AuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJXaWZpIOGDlOGDmeGDoOGDkOGDnOGDlOGDkeGDmOGDoSDhg5vhg5Dhg6Dhg5fhg5Xhg5AiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i4YOQ4YOe4YOhIOGDqOGDlOGDlOGDq+GDmuGDlOGDkeGDkCDhg5Dhg6Phg5Phg5jhg53hg6Eg4YOS4YOa4YOd4YOR4YOQ4YOa4YOj4YOg4YOYIOGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmOGDoSDhg6jhg5Thg6rhg5Xhg5rhg5AuIOGDm+GDkOGDki46IOGDruGDm+GDmOGDoSDhg6Hhg5jhg5vhg5Dhg6bhg5rhg5Qg4YOT4YOQIOGDoOGDneGDm+GDlOGDmuGDmCDhg5Phg5jhg5zhg5Dhg5vhg5jhg5nhg5gg4YOS4YOQ4YOb4YOd4YOY4YOn4YOU4YOc4YOU4YOR4YOQIOGDoeGDmOGDkuGDnOGDkOGDmuGDmOGDoSDhg5Lhg5Dhg5vhg53hg6Hhg6Lhg5Dhg5zhg5Dhg5MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLhg5Dhg6Phg5Phg5jhg53hg6Eg4YOp4YOQ4YOs4YOU4YOg4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i4YOQ4YOe4YOhIOGDqOGDlOGDlOGDq+GDmuGDlOGDkeGDkCDhg5Dhg6Phg5Phg5jhg50g4YOp4YOQ4YOs4YOU4YOg4YOQIOGDm+GDmOGDmeGDoOGDneGDpOGDneGDnOGDmOGDly4g4YOc4YOU4YOR4YOQ4YOg4YOX4YOV4YOQIOGDkOGDnuGDoSDhg5Dhg6Phg5Phg5jhg50g4YOp4YOQ4YOs4YOU4YOg4YOY4YOhIOGDo+GDpOGDmuGDlOGDkeGDkOGDoSDhg5Dhg6vhg5rhg5Thg5Xhg6Eg4YOc4YOU4YOR4YOY4YOh4YOb4YOY4YOU4YOgIOGDk+GDoOGDneGDoSwg4YOX4YOl4YOV4YOU4YOc4YOYIOGDl+GDkOGDnOGDruGDm+GDneGDkeGDmOGDoSDhg5Lhg5Dhg6Dhg5Thg6jhg5QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiLhg5nhg53hg5vhg6Phg5zhg5jhg5nhg5Dhg6rhg5jhg5AgU0lNLeGDl+GDkOGDnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IuGDkOGDnuGDmOGDoeGDl+GDleGDmOGDoSDhg5zhg5Thg5Hhg5jhg6Eg4YOT4YOQ4YOg4YOX4YOV4YOQIOGDkuGDkOGDo+GDkuGDluGDkOGDleGDnOGDneGDoSDhg5Hhg6Dhg6vhg5Dhg5zhg5Thg5Hhg5Thg5Hhg5ggU0lNLeGDkeGDkOGDoOGDkOGDl+GDoS4g4YOU4YOhIOGDq+GDkOGDmuGDmOGDkOGDnCDhg6Hhg5Dhg6jhg5jhg6jhg5jhg5AuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i4YOh4YOj4YOg4YOQ4YOX4YOU4YOR4YOY4YOh4YOQIOGDk+GDkCDhg5Xhg5jhg5Phg5Thg53hg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOT4YOQ4YOm4YOU4YOR4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuGDkOGDnuGDoSDhg6jhg5Thg5Thg6vhg5rhg5Thg5Hhg5Ag4YOZ4YOQ4YOb4YOU4YOg4YOY4YOXIOGDoeGDo+GDoOGDkOGDl+GDmOGDoeGDkCDhg5Phg5Ag4YOV4YOY4YOT4YOU4YOd4YOhIOGDkuGDkOGDk+GDkOGDpuGDlOGDkeGDkC4g4YOU4YOhIOGDnOGDlOGDkeGDkOGDoOGDl+GDleGDkCDhg5Dhg57hg6Eg4YOj4YOk4YOa4YOU4YOR4YOQ4YOhIOGDkOGDq+GDmuGDlOGDleGDoSwg4YOc4YOU4YOR4YOY4YOh4YOb4YOY4YOU4YOgIOGDk+GDoOGDneGDoSDhg5Lhg5Dhg5vhg53hg5jhg6fhg5Thg5zhg53hg6Eg4YOZ4YOQ4YOb4YOU4YOg4YOQIOGDl+GDpeGDleGDlOGDnOGDmCDhg5Phg5Dhg5Phg5Dhg6Hhg6Lhg6Phg6Dhg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOg4YOU4YOo4YOULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IuGDmeGDkOGDm+GDlOGDoOGDmOGDoSDhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Thg5Hhg5jhg6Hhg5Dhg6Eg4YOS4YOQ4YOT4YOQ4YOb4YOq4YOU4YOb4YOYIOGDmOGDnOGDk+GDmOGDmeGDkOGDouGDneGDoOGDmOGDoSBMRUQg4YOS4YOQ4YOX4YOY4YOo4YOV4YOQIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4i4YOh4YOQ4YOu4YOa4YOYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IuGDoeGDkOGDm+GDoeGDkOGDruGDo+GDoOGDmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i4YOh4YOu4YOV4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IuGDkOGDmyDhg5nhg53hg5zhg6Lhg5Dhg6Xhg6Lhg5jhg6Eg4YOb4YOc4YOQ4YOu4YOV4YOU4YOa4YOYIOGDkOGDnuGDmuGDmOGDmeGDkOGDquGDmOGDkCDhg5Xhg5Thg6Ag4YOb4YOd4YOY4YOr4YOU4YOR4YOc4YOQLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IuGDkOGDmeGDoOGDmOGDpOGDlOGDlyBQSU4g4YOZ4YOd4YOT4YOYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i4YOT4YOQ4YOR4YOU4YOt4YOT4YOU4YOXIFBVSyDhg5nhg53hg5Phg5gg4YOT4YOQIOGDkOGDruGDkOGDmuGDmCBQSU4g4YOZ4YOd4YOT4YOYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIOGDmeGDneGDk+GDmCI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0LSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IuGDqOGDlOGDp+GDleGDkOGDnOGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IuGDkOGDnuGDmOGDoSDhg5Dhg6Dhg6nhg5Thg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IOGDleGDlOGDoCDhg5Lhg5Dhg5Thg6jhg5Xhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLhg5Lhg5Dhg5bhg5jhg5Dhg6Dhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i4YOS4YOQ4YOj4YOW4YOY4YOQ4YOg4YOU4YOXIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4t4YOhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IuGDkuGDkOGDoeGDoOGDmOGDkOGDmuGDlOGDkeGDmOGDlyDhg5vhg5Dhg6Dhg5fhg5Xhg5AuIOGDqOGDlOGDlOGDruGDlOGDlyAmYW1wOyDhg5Dhg6Ag4YOQ4YOj4YOo4YOV4YOQ4YOXLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLhg5Lhg5Dhg5Dhg6Hhg6Dhg5jhg5Dhg5rhg5Thg5cg4YOW4YOU4YOb4YOd4YOXIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3hg5fhg5Xhg5jhg6EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i4YOS4YOQ4YOQ4YOh4YOg4YOY4YOQ4YOa4YOU4YOXIOGDpeGDleGDlOGDm+GDneGDlyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t4YOX4YOV4YOY4YOhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuGDkuGDkOGDkOGDoeGDoOGDmOGDkOGDmuGDlOGDlyDhg5vhg5Dhg6Dhg6rhg67hg5zhg5jhg5UgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LeGDl+GDleGDmOGDoS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4i4YOS4YOQ4YOQ4YOh4YOg4YOY4YOQ4YOa4YOU4YOXIOGDm+GDkOGDoOGDr+GDleGDnOGDmOGDlSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t4YOX4YOV4YOY4YOhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuGDmeGDkOGDm+GDlOGDoOGDkCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLhg6Phg67hg5vhg50iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i4YOu4YOb4YOY4YOhIOGDqeGDkOGDoOGDl+GDleGDkCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4YOr4YOY4YOU4YOR4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4i4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOY4YOh4YOQ4YOX4YOV4YOY4YOhIOGDkuGDkOGDk+GDkOGDpOGDo+GDoOGDquGDmuGDlOGDlyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLhg6jhg5Thg5Dhg5Thg6Dhg5fhg5Thg5Mg4YOn4YOj4YOg4YOh4YOQ4YOh4YOb4YOU4YOc4YOU4YOR4YOYLCDhg57hg5Dhg6Dhg53hg5rhg5jhg6Eg4YOm4YOY4YOa4YOQ4YOZ4YOU4YOR4YOYIOGDoOGDneGDmyDhg5Lhg5Dhg5jhg5Lhg53hg5cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i4YOs4YOU4YOg4YOi4YOY4YOa4YOYLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IuGDoeGDmOGDoeGDouGDlOGDm+GDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoIOGDkOGDo+GDk+GDmOGDnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i4YOj4YOh4YOQ4YOT4YOU4YOc4YOdIOGDlOGDmeGDoOGDkOGDnOGDmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLhg5Phg5Dhg6Hhg6Dhg6Phg5rhg5Phg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLhg5vhg5Thg5Phg5jhg5Ag4YOS4YOQ4YOb4YOd4YOb4YOQ4YOV4YOQ4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5Dhg6Hhg5fhg5Dhg5wg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4i4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDkOGDluGDlCDhg5Lhg5Dhg5Phg5Dhg6rhg5Thg5vhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5Thg5Hhg5jhg6Eg4YOr4YOY4YOU4YOR4YOQ4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i4YOe4YOQ4YOg4YOQ4YOb4YOU4YOi4YOg4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IuGDmeGDkOGDleGDqOGDmOGDoOGDmOGDoSDhg5Lhg5Dhg6zhg6fhg5Xhg5Thg6Lhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i4YOh4YOZ4YOQ4YOc4YOY4YOg4YOU4YOR4YOQLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOQLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLhg67hg5Thg5rhg5vhg5jhg6Hhg5Dhg6zhg5Xhg5Phg53hg5vhg5giPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLhg5Lhg5Dhg5Phg5Dhg6Thg5Dhg6Dhg5Xhg5AgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDhg5Phg5Dhg6rhg6Phg5rhg5giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuGDo+GDoeGDkOGDk+GDlOGDnOGDnSDhg5Thg5nhg6Dhg5Dhg5zhg5gg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IuGDkuGDkOGDm+GDneGDoeGDkOGDruGDo+GDmuGDlOGDkeGDkCDhg5Lhg5Dhg5Phg5Dhg5Thg6rhg5Thg5vhg5Ag4YOh4YOu4YOV4YOQIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDkOGDoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiLhg5vhg5jhg5vhg5Phg5jhg5zhg5Dhg6Dhg5Thg53hg5Hhg6Eg4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDkuGDkOGDk+GDkOGDquGDlOGDm+GDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi3hg5fhg5Dhg5wg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4i4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOU4YOd4YOR4YOhIOGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg5Lhg5Dhg5Phg5Dhg6rhg5Thg5vhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IuGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDo+GDmuGDmOGDkCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4t4YOX4YOQ4YOcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IuGDmeGDkOGDleGDqOGDmOGDoOGDmOGDoSDhg5Lhg5Dhg6zhg6fhg5Xhg5Thg6Lhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuGDkuGDkOGDk+GDkOGDo+GDk+GDlOGDkeGDlOGDmuGDmCDhg5Phg5Dhg67hg5vhg5Dhg6Dhg5Thg5Hhg5jhg6Eg4YOW4YOQ4YOg4YOYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4YOT4YOQ4YOS4YOQ4YOV4YOY4YOs4YOn4YOT4YOQ4YOXIOGDnOGDmOGDm+GDo+GDqOGDmCI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1OSwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiLhg5nhg5jhg5Phg5Thg5Ug4YOU4YOg4YOX4YOu4YOU4YOaIOGDoeGDquGDkOGDk+GDlOGDlyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDhg6zhg5Dhg5vhg6jhg5giPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i4YOh4YOq4YOQ4YOT4YOU4YOXIOGDm+GDneGDkuGDleGDmOGDkOGDnOGDlOGDkeGDmOGDlyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLhg6nhg5Dhg5vhg53hg5Dhg6Hhg6Dhg5jhg5Dhg5rhg5Thg5cg4YOW4YOU4YOV4YOY4YOT4YOQ4YOcIOGDoeGDoOGDo+GDmuGDmCDhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOT4YOQ4YOh4YOQ4YOu4YOj4YOg4YOQ4YOTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IuGDqeGDkOGDm+GDneGDkOGDoeGDoOGDmOGDkOGDmuGDlOGDlyDhg5bhg5Thg5Xhg5jhg5Phg5Dhg5wg4YOh4YOg4YOj4YOa4YOYIOGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg5Phg5Dhg6Hhg5Dhg67hg6Phg6Dhg5Dhg5MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLhg5Phg5Dhg6Hhg6Dhg6Phg5rhg5Phg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLhg6Hhg5Dhg5Dhg5fhg5Thg5Hhg5jhg6Eg4YOs4YOg4YOY4YOj4YOa4YOYIOGDoeGDmuGDkOGDmOGDk+GDlOGDoOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4i4YOs4YOj4YOX4YOU4YOR4YOY4YOhIOGDrOGDoOGDmOGDo+GDmuGDmCDhg6Hhg5rhg5Dhg5jhg5Phg5Thg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIOGDoeGDkOGDkOGDl+GDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IuGDkOGDmOGDoOGDqeGDmOGDlOGDlyDhg6zhg6Phg5fhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IuGDk+GDpuGDlOGDlOGDkeGDmOGDoSDhg5Hhg5Dhg5Phg5Qg4YOX4YOV4YOU4YOW4YOUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i4YOs4YOa4YOY4YOhIOGDoeGDmOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIOGDl+GDleGDlCDhg5Phg5Ag4YOg4YOY4YOq4YOu4YOV4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4i4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIOGDrOGDlOGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiLhg5Dhg6Dhg6nhg5Thg6Phg5rhg5jhg5AgPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4g4YOs4YOQ4YOY4YOo4YOQ4YOa4YOQIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCmluZGV4IDZkYWNlM2MuLmE5NmNlNGUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLhnpThnonhn5LhnoXhnrzhnpvigIvhnoDhnrzhnoogUFVLIOGeiuGfguGem+KAi+GemOGetuGek+KAi+GeluGeuOKAiyDhn6gg4Z6b4Z+B4Z6B4oCLIOGerOKAi+GenOGfguGehOKAi+Geh+GetuGehOKAi+Gek+GfgeGfh+GflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLhnp/hn4rhnrjhnpjhnoDhnrbhno/igIvigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDigIvhnofhnrbhnpThn4vigIvhnoDhnrzhnoogUFVLIOGflCDhnpThnonhn5LhnoXhnrzhnpvigIvhnoDhnrzhnoogUFVLIOGeiuGevuGemOGfkuGelOGeuOKAi+GeiuGfhOGfh+KAi+Gen+GfhOGflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IuGelOGeieGfkuGeheGevOGem+KAi+GegOGevOGeiiBQVUsyIOGeiuGevuGemOGfkuGelOGeuOKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+Gen+GfiuGeuOGemOKAi+GegOGetuGej+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuGelOGemuGetuGeh+GfkOGemSwg4Z6U4Z6+4Z6A4oCL4Z6A4Z624Z6a4oCL4Z6F4Z624Z6A4Z+L4Z6f4Z+E4oCL4Z6f4Z+K4Z644oCL4Z6YIC8gUlVJTSDhn5QiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLhnqLhn5LhnpPhnoDigIvhnpjhnrbhnpMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGegOGetuGemuKAi+GeluGfkuGemeGetuGemeGetuGemOKAi+GeiuGfguGem+KAi+Gek+GfheGen+Gem+Gfi+KAi+GemOGeu+Gek+KAi+GeluGfgeGem+KAi+Gen+GfiuGeuOKAi+GemOKAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+GeheGetuGegOGfi+Gen+GfhOKAi+GflCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IuGeouGfkuGek+GegOKAi+GemOGetuGekyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Z6A4Z624Z6a4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z+C4Z6b4oCL4Z6T4Z+F4Z6f4Z6b4Z+L4oCL4Z6Y4Z674Z6T4oCL4Z6W4Z+B4Z6b4oCL4Z6f4Z+K4Z644oCL4Z6Y4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6F4Z624Z6A4Z+L4Z6f4Z+E4oCL4Z+UIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLhnpvhn4HhnoHigIvhnp/hnpjhn5LhnoLhnrbhnpvhn4vigIvhnqLhn5LhnpPhnoDigIvhnqDhn4XigIvigIvhnoXhnrzhnpsiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IuGesuGfkuGemeKAi+GemOGfkuGeheGetuGen+Gfi+KAi+GeheGehOKAi+GeheGfhuGejuGeu+GeheKAi+GelOGfkuGemuGekeGetuGegOGfi+KAi+GegOGemOGfkuGemuGet+Gej+KAi+GegOGfhuGeluGevOGem+KAi+Gek+Gfg+KAi+Gen+GfgeGenOGetuGegOGemOGfkuGemCBWcG4g4Z+U4oCLIOGemOGet+Gek+KAi+GeguGeveGemuKAi+GeheGetuGfhuGelOGetuGeheGfi+KAi+Gen+GemOGfkuGemuGetuGelOGfi+KAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GekuGemOGfkuGemOGej+GetuKAi+GekeGfgeGflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLhnoXhnoTigIvhnpHhn4XigIvhnpXhn5LhnpHhnrbhn4bhnoTigIvhnprhnrzhnpThnpfhnrbhnpYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuGesuGfkuGemeKAi+GemOGfkuGeheGetuGen+Gfi+KAi+GeheGehOKAi+GeheGfhuGejuGeu+GeheGelOGfkuGemuGekeGetuGegOGfi+KAi+GegOGemOGfkuGemuGet+Gej+KAi+GegOGfhuGeluGevOGem+KAi+Gek+Gfg+KAi+GeleGfkuGekeGetuGfhuGehOKAi+GemuGevOGelOGel+GetuGeluGflCDhnpjhnrfhnpPigIvhnoLhnr3hnprigIvhnoXhnrbhn4bhnpThnrbhnoXhn4vigIvhnp/hnpjhn5LhnprhnrbhnpThn4vigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpLhnpjhn5Lhnpjhno/hnrbigIvhnpHhn4Hhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuGel+GfkuGeh+GetuGelOGfi+KAi+GekeGfheKAi+GegOGetuGemuKAi+GelOGehOGfkuGeoOGetuGeieKAi+GeluGeuOKAi+GeheGemOGfkuGehOGetuGemSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IuGeouGek+Geu+GeieGfkuGeieGetuGej+KAi+GesuGfkuGemeKAi+GemOGfkuGeheGetuGen+Gfi+KAi+Gel+GfkuGeh+GetuGelOGfi+KAi+KAi+GekeGfheKAi+GeheGfhuGejuGeu+GeheKAi+GelOGfkuGemuGekeGetuGegOGfi+KAi+GegOGemOGfkuGemuGet+Gej+KAi+GegOGfhuGeluGevOGem+KAi+Gek+Gfg+KAi+GegOGetuGemuKAi+GelOGehOGfkuGeoOGetuGeieKAi+GeluGeuOKAi+GeheGemOGfkuGehOGetuGemeGflCDhnpjhnrfhnpPigIvhnoLhnr3hnprigIvhnoXhnrbhn4bhnpThnrbhnoXhn4vigIvhnp/hnpjhn5LhnprhnrbhnpThn4vigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpLhnpjhn5Lhnpjhno/hnrbigIvhnpHhn4Hhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLhnoXhnoTigIvhnp/hn4HhnpzhnrbigIvhnoDhnpjhn5LhnpjigIvhnpLhnrbhno/hnrvigIvhnoDhn5LhnprhnrbhnqDhn5LhnpzhnrfhnoAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i4Z6y4Z+S4Z6Z4oCL4Z6Y4Z+S4Z6F4Z624Z6f4Z+L4oCL4Z6F4Z6E4oCL4Z6F4Z+G4Z6O4Z674Z6F4oCL4Z6U4Z+S4Z6a4Z6R4Z624Z6A4Z+L4oCL4Z6A4Z6Y4Z+S4Z6a4Z634Z6P4oCL4Z6A4Z+G4Z6W4Z684Z6b4oCL4Z6T4Z+D4oCL4Z6f4Z+B4Z6c4Z624Z6A4Z6Y4Z+S4Z6Y4oCL4Z6S4Z624Z6P4Z674oCL4Z6A4Z+S4Z6a4Z624Z6g4Z+S4Z6c4Z634Z6A4Z+UIOGemOGet+Gek+KAi+GeguGeveGemuKAi+KAi+GeheGetuGfhuGelOGetuGeheGfi+KAi+Gen+GemOGfkuGemuGetuGelOGfi+KAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GekuGemOGfkuGemOGej+GetuKAi+GekeGfgeGflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+IuGekeGetuGegOGfi+GekeGehOKAi+Geh+GetuKAi+GemOGeveGemeKAi+GeouGfkuGek+GegOGeguGfkuGemuGelOGfi+GeguGfkuGemuGehOKAi+Gep+GelOGegOGemuGejuGfjSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i4Z6y4Z+S4Z6Z4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6b4Z6A4Z+S4Z6B4Z6O4Z+I4oCL4Z6A4Z6Y4Z+S4Z6a4Z634Z6P4oCL4Z6R4Z624Z6U4oCL4Z6a4Z6U4Z6f4Z+LIFN1cmZhY2VGbGluZ2VyIOGflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuGeouGetuGek+KAi+GeouGehOGfkuGeguKAi+GeheGehOGeheGetuGfhuKAi+GelOGejuGfkuGeiuGfhOGfh+KAi+GeouGetuGen+Gek+GfkuGekyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnqLhnrbhnpPigIvhnpjhnrbhno/hnrfhnoDhnrbigIvhnpPhn4PigIvhnqLhnoThn5LhnoLigIvhnoXhnoThnoXhnrbhn4bigIvhnpThno7hn5Lhnorhn4Thn4figIvhnqLhnrbhnp/hnpPhn5LhnpPhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiLhnoXhnrzhnpvigIvhnorhn4bhno7hnr7hnprhnoDhnrbhnpogSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IuGesuGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GelOGfkuGemuGevuKAi+Gem+GegOGfkuGegeGejuGfiOKAi+GegOGemOGfkuGemuGet+Gej+KAi+GekeGetuGelCBJbnB1dEZsaW5nZXIg4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLhnoDhn4bhno7hno/hn4vigIvhnprhnoXhnpPhnrbhnp/hnpjhn5Lhnpbhn5DhnpPhn5LhnpLigIvhnoDhnrbhnprigIvhnpThnoThn5LhnqDhnrbhnonigIvhnpzhn4nhnrbhnpnhnqDhn5LhnpzhnrbhnpkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnoDhn4bhno7hno/hn4vigIvhnprhnoXhnpPhnrbhnp/hnpjhn5Lhnpbhn5DhnpPhn5LhnpLigIsg4Z6T4Z634Z6E4oCL4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6R4Z+F4oCL4Z6A4Z624Z6a4oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6c4Z+J4Z624Z6Z4Z6g4Z+S4Z6c4Z624Z6Z4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiLhnpbhnrfhnpPhnrfhno/hn5LhnpnigIvhnoDhnrbhnprigIvhnpThnoThn5LhnqDhnrbhnonigIvhnpzhn4nhnrbhnpnhnqDhn5LhnpzhnrbhnpkiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i4Z6y4Z+S4Z6Z4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6A4Z+C4oCL4Z6A4Z624Z6a4oCL4Z6A4Z+G4Z6O4Z6P4Z+L4oCL4Z6f4Z+G4Z6h4Z+B4Z6E4oCL4Z6f4Z6A4Z6bIOGeiuGevOGeheKAi+Geh+GetuKAi+GegOGemOGfkuGemuGet+Gej+KAi+Gen+GfhuGeoeGfgeGehCDhnpPhnrfhnoTigIvhnqLhnrzhnpThn4nhnrbhnpvhn5DhnprigIvhnorhn4LhnpvigIvhnpThnrbhnpPigIvhnpThn5Lhnprhnr7igIvhnp/hnpjhn5LhnprhnrbhnpThn4vigIvhnpvhnpHhn5LhnpLhnpXhnpvhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+IuGekOGej+KAi+Gen+GfhuGeoeGfgeGehCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IuKAi+GeseGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GekOGej+KAi+Gen+GfhuGeoeGfgeGehOKAi+KAi+Geh+GetuGemOGeveGemeKAi+GemOGeuOGegOGfkuGemuGevOGeoOGfkuGenOGevOGek+KAi+KAi+KAi+GflCDhnp/hnrfhnpHhn5LhnpLhnrfigIvhnpPhn4Hhn4figIvhnqLhnpPhnrvhnonhn5Lhnonhnrbhno/igIvhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpDhno/igIvhnp/hn4bhnqHhn4HhnoTigIvigIvhnpPhn4XigIvhnpbhn4HhnpvigIvhno7hnrbigIvhnpjhnr3hnpnigIvhnorhn4ThnpnigIvhnoLhn5LhnpjhnrbhnpPigIvhnoDhnrbhnprigIvhnpThnonhn5LhnofhnrbhnoDhn4vigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+IuGegOGetuGemuKAi+Gel+GfkuGeh+GetuGelOGfi+KAi+Gen+GfiuGeuOGemOGegOGetuGejyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IuGesuGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GeleGfkuGeieGevuKAi+GeluGetuGegOGfkuGemeKAi+GelOGeieGfkuGeh+GetuKAi+GekeGfheKAi+Gen+GfiuGeuOGemOKAi+GegOGetuGej+GflCDhnpzhnrbigIvhnoLhn5Lhnprhn4Thn4figIvhnpDhn5LhnpPhnrbhnoDhn4vigIvhno7hnrbhnp/hn4vhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLhnpDhno/igIvhnprhnrzhnpQg4Z6T4Z634Z6E4Z6c4Z644Z6K4Z+B4Z6i4Z68Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuGesuGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GekOGej+KAi+GemuGevOGelCDhnpPhnrfhnoTigIvhnpzhnrjhnorhn4HhnqLhnrzigIvhnorhn4ThnpnigIvhnpThn5Lhnprhnr7igIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpDhno/hn5Qg4Z6c4Z624oCL4Z6y4Z+S4Z6Z4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6Q4Z6P4oCL4Z6T4Z+F4oCL4Z6W4Z+B4Z6b4oCL4oCL4Z6O4Z624Z6Y4Z694Z6Z4oCL4Z6K4Z+E4Z6Z4oCL4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6A4Z624Z6a4oCL4Z6U4Z6J4Z+S4Z6H4Z624Z6A4Z+L4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i4Z6U4Z634Z6R4oCL4oCL4Z6W4Z6T4Z+S4Z6b4Z664oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6A4Z624Z6a4oCL4Z6U4Z6J4Z+S4Z6H4Z684Z6T4oCL4oCL4Z6W4Z+B4Z6b4oCL4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6Q4Z6P4oCL4Z6A4Z+G4Z6W4Z674Z6E4oCL4Z6U4Z+S4Z6a4Z6+Ijwvc3RyaW5nPgpAQCAtNzgzLDcgKzc5NCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sWWFob28iIG1zZ2lkPSI4MjcxNDM5NDA4NDY5MDIxMjczIj4iWWFob28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sU2t5cGUiIG1zZ2lkPSI5MDE5Mjk2NzQ0NjIyODMyOTUxIj4iU2t5cGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sUXEiIG1zZ2lkPSI4ODg3NDg0Mzc5NDk0MTExODg0Ij4iUVEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IuGegOGetuGemuKAi+Geh+Geh+GfguGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xHb29nbGVUYWxrIiBtc2dpZD0iNDkzOTAyMzIxMTQwMjc3MzA0Ij4iSGFuZ291dHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSWNxIiBtc2dpZD0iMTU3NDg3MDQzMzYwNjUxNzMxNSI+IklDUSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xKYWJiZXIiIG1zZ2lkPSIyMjc5OTE3NjMwODc1NzcxNzIyIj4iSmFiYmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE5ldE1lZXRpbmciIG1zZ2lkPSI4Mjg3NjI1NjU1OTg2ODI3OTcxIj4iTmV0TWVldGluZyI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IuGeguGfgeGeoOKAi+GekeGfhuGeluGfkOGemiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLhnoDhnpPhn5Lhnpvhn4LhnoTigIvhnpLhn5Lhnpzhnr7hnoDhnrbhnpoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IuGeleGfkuGen+GfgeGehOGflyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiLhnprhnoDigIvhnpjhnrfhnpPigIvhnoPhnr7hnonigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrgg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6Y4Z6+4Z6b4oCL4Z6R4Z+G4Z6T4Z624Z6A4Z+L4Z6R4Z+G4Z6T4Z6E4oCL4Z6T4Z+B4Z+H4oCL4Z6R4Z+B4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6A4Z684Z6KIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IuGelOGeieGfkuGeheGevOGem+KAi+GegOGevOGeiiBQVUsg4Z6T4Z634Z6E4oCLIFBJTiDhnpDhn5LhnpjhnrgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IuGegOGevOGeiiBQVUsiPC9zdHJpbmc+CkBAIC0xMTIzLDE0ICsxMTM1LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJub0FwcGxpY2F0aW9ucyIgbXNnaWQ9IjI5OTE4MTQyNzM5MzY1MDQ2ODkiPiLhnoLhn5LhnpjhnrbhnpPigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnqLhnrbhnoXigIvhnqLhnpPhnrvhnpzhno/hn5Lhno/igIvhnp/hnoDhnpjhn5LhnpjhnpfhnrbhnpbigIvhnpPhn4Hhn4fhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZXJyX3RpdGxlIiBtc2dpZD0iMTkwNTgwMDU2MDMxNzEzNzc1MiI+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZXJyX2FwcGxpY2F0aW9uIiBtc2dpZD0iOTMyNjI4NDg4MDEzMDkyNzc2Ij4i4Z6K4Z+E4Z6Z4oCL4Z6U4Z6a4Z624Z6H4Z+Q4Z6ZIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4Z6U4Z624Z6T4oCL4Z6U4Z6J4Z+S4Z6I4Z6U4Z+L4Z+UIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWVycl9wcm9jZXNzIiBtc2dpZD0iNDUwNzA1ODk5NzAzNTY5NzU3OSI+IuGeh+GetuKAi+GeouGegOGeu+Gen+GemyDhnorhn4bhno7hnr7hnprhnoDhnrbhnpogPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IOGelOGetuGek+KAi+GelOGeieGfkuGeiOGelOGfi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiLhnorhn4ThnpnigIvhnpThnprhnrbhnofhn5Dhnpkg4Z6K4Z+G4Z6O4Z6+4Z6a4Z6A4Z624Z6aIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDhnpThnrbhnpPigIvhnpThnonhn5LhnojhnpThn4vhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbnJfdGl0bGUiIG1zZ2lkPSI0MzUxOTQ4NDgxNDU5MTM1NzA5Ij48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjE5MDQ0NzcxODkwNTcxOTkwNjYiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+IOGemOGet+Gek+KAi+GehuGfkuGem+GevuGemeGej+GelOGflFxuXG7hno/hnr7igIvhnqLhn5LhnpPhnoDigIvhnoXhnoThn4vigIvhnpThnrfhnpHigIvhnpzhnrbigIvhnqw/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X3Byb2Nlc3MiIG1zZ2lkPSI1Nzc2MjA5ODgzMjk5MDg5NzY3Ij4i4Z6f4Z6A4Z6Y4Z+S4Z6Y4Z6X4Z624Z6WIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g4Z6Y4Z634Z6T4oCL4Z6G4Z+S4Z6b4Z6+4Z6Z4Z6P4Z6U4Z+UXG5cbuGej+GevuKAi+GeouGfkuGek+GegOKAi+GeheGehOGfi+KAi+GelOGet+GekeKAi+GenOGetj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbnJfYXBwbGljYXRpb25fcHJvY2VzcyIgbXNnaWQ9Ijg5NDE3NTc2MDczNDA0ODEwNTciPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOGemOGet+Gek+KAi+GehuGfkuGem+GevuGemeGej+GelOGflCDhno/hnr7igIvhnqLhn5LhnpPhnoDigIvhnoXhnoThn4vigIvhnpThnrfhnpHigIvhnpzhnrY/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5yX3Byb2Nlc3MiIG1zZ2lkPSI2NTEzMjA5ODc0ODgwNTE3MTI1Ij4i4Z6K4Z+G4Z6O4Z6+4Z6a4Z6A4Z624Z6aIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDhnpjhnrfhnpPigIvhnobhn5Lhnpvhnr7hnpnhno/hnpThn5QgXG5cbuGej+GevuKAi+GeouGfkuGek+GegOKAi+GeheGehOGfi+KAi+GelOGet+GekeKAi+GenOGetuKAi+GerD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9jbG9zZSIgbXNnaWQ9IjgzNDYwNzIwOTQ1MjEyNjU2MDUiPiLhnpnhnpvhn4vigIvhnpbhn5LhnprhnpgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXBvcnQiIG1zZ2lkPSI0MDYwMjE4MjYwOTg0Nzk1NzA2Ij4i4Z6a4Z6U4Z624Z6Z4Z6A4Z624Z6a4Z6O4Z+NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVwb3J0IiBtc2dpZD0iNDA2MDIxODI2MDk4NDc5NTcwNiI+IuGemuGetuGemeGegOGetuGemuGejuGfjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndhaXQiIG1zZ2lkPSI3MTQ3MTE4MjE3MjI2MzE3NzMyIj4i4Z6a4Z6E4Z+L4Z6F4Z624Z+GIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4i4Z6R4Z+G4Z6W4Z+Q4Z6a4oCL4Z6A4Z+S4Z6b4Z624Z6Z4oCL4Z6H4Z624oCL4Z6Y4Z634Z6T4oCL4Z6G4Z+S4Z6b4Z6+4Z6Z4Z6P4Z6U4Z+UXG5cbuGej+GevuKAi+GeouGfkuGek+GegOKAi+KAi+GeheGehOGfi+KAi+GelOGet+GekeKAi+GenOGetj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE1NDc5OTc3ODA1MDY3MTM1ODEiPiLhnpThnrbhnpPigIvhnpThn5LhnorhnrzhnprigIvhnpHhnrfhnp/igIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrgiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i4Z6H4Z+S4Z6a4Z6+4Z6f4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4i4Z6Y4Z634Z6T4oCL4Z6i4Z624Z6F4oCL4Z6F4Z624Z6U4Z+L4Z6V4Z+S4Z6K4Z6+4Z6YIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLhnoXhn4LhnoDhnprhn4bhnpvhn4LhnoDigIvhnofhnrbigIvhnpjhnr3hnpkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i4Z6F4Z+C4Z6A4oCL4Z6a4Z+G4Z6b4Z+C4Z6A4oCL4Z6H4Z624oCL4Z6Y4Z694Z6ZIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i4Z6C4Z+S4Z6a4Z6U4Z+L4Z6C4Z+S4Z6a4Z6E4oCL4Z6A4Z624Z6a4oCL4Z6a4Z674Z6J4Z+UIOGelOGfieGfhyAmYW1wOyDhnp/hnoThn5LhnoDhno/hn4vhn5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i4Z6a4Z674Z6J4oCL4Z6h4Z6+4Z6E4oCL4Z6b4Z6+4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z64IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLhnprhnrvhnonigIvhnoXhnrvhn4fhnoDhn5Lhnprhn4ThnpjigIvhnp/hnpjhn5LhnprhnrbhnpThn4sgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuGemuGeu+GeieKAi+GekeGfheKAi+GehuGfkuGenOGfgeGehOKAi+GeiuGevuGemOGfkuGelOGeuCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuGemuGeu+GeieKAi+KAi+GekeGfheKAi+Gen+GfkuGeiuGetuGfhuKAi+GeiuGevuGemOGfkuGelOGeuCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLhnorhn4Thn4figIvigIvhnp/hn4QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6Q4Z6PIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuGen+GfkuGehOGetuGej+GfiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLhnpThnr7hnoDigIvhnp/hn4bhnqHhn4HhnoQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuGen+GfkuGenOGfguGehOGemuGegCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IuGeouGevOGen+KAiyDhnorhnr7hnpjhn5LhnpThnrjigIvhnorhn4Thn4figIvhnp/hn4Thn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i4Z6K4Z+E4Z6P4oCL4Z6A4Z624Z6f4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6f4Z+S4Z6K4Z624Z6U4Z+L4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6U4Z624Z6T4oCL4Z6T4Z634Z6Z4Z624Z6Z4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iRG90LiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IuGelOGfkuGemuGeluGfkOGek+GfkuGekiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i4Z6f4Z+G4Z6h4Z+B4Z6E4oCL4Z6U4Z+K4Z+S4Z6b4Z684Z6S4Z684Z6fIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLhnpThnoThn5LhnqDhnrbhnonigIvhnpThno7hn5LhnorhnrbhnonigIvhnqXhno/igIvhnoHhn5Lhnp/hn4IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i4Z6a4Z694Z6F4Z6a4Z624Z6b4Z+LIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i4Z6b4Z6R4Z+S4Z6S4Z6V4Z6b4oCL4Z6Y4Z+B4Z6M4Z+AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLhnpfhn5LhnofhnrbhnpThn4vigIvhnqfhnpThnoDhnprhno7hn40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLhnoXhnrbhno/hn4vigIvhnpDhn5LhnpPhnrbhnoDhn4vigIvhnqLhn4HhnoDhn5LhnprhnoThn4vigIvhnpHhn4XigIvhnqfhnpThnoDhnprhno7hn40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLhnoDhn4bhnpbhnrvhnoTigIvhnp/hn5Lhnpzhn4LhnoThnprhnoDigIvhnqfhnpThnoDhnprhno7hn40uLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLhnoDhnrbhnprigIvhnoDhn4bhno7hno/hn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i4Z6V4Z+S4Z6K4Z624Z6F4Z+LIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IuGegOGfhuGeluGeu+GehOKAi+GenOGet+Gel+GetuGeguKAi+GemuGegOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IuGegOGfhuGeluGeu+GehOKAi+KAi+KAi+Gel+GfkuGeh+GetuGelOGfi+KAi+KApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i4Z6R4Z+G4Z6T4Z+B4Z6aIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4g4Z6P4Z+S4Z6a4Z694Z6P4oCL4Z6C4Z+S4Z6T4Z62Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwg4Z6f4Z674Z6c4Z6P4Z+S4Z6Q4Z634Z6X4Z624Z6WIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLhnpThnrbhnpPigIvhnpfhn5LhnofhnrbhnpThn4vigIvhnoDhnrbhnprigIvhnpThnoThn5LhnqDhnrbhnonigIvhnpThno7hn5LhnorhnrbhnonigIvhnqXhno/igIvhnoHhn5Lhnp/hn4IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4Z6T4Z+B4Z+H4oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6b4Z6+4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6V4Z+S4Z6f4Z+B4Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IuGeheGetuGej+Gfi+KAi+GekOGfkuGek+GetuGegOGfi+KAi+GeouGfgeGegOGfkuGemuGehOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IuGegOGfhuGeluGeu+GehOKAi+Gej+Gel+GfkuGeh+GetuGelOGfi+KAi+GekeGfhSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLhnoXhnrbhno/hn4vigIvhnpDhn5LhnpPhnrbhnoDhn4vigIvhnqLhn4HhnoDhn5LhnprhnoThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IuGej+Gel+GfkuGeh+GetuGelOGfi+KAi+GekeGfhSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i4Z6V4Z+S4Z6K4Z624Z6F4Z+LIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLhnoDhnrbhnprigIvhnqDhn4XigIvhnpbhn4HhnpvigIvhnqLhnrbhnp/hnpPhn5LhnpMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLhnpfhn5Lhnpvhn4HhnoXigIvigIvhnpvhn4bhnpPhnrbhn4YiPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTksMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4i4Z6f4Z684Z6Y4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6Y4Z+S4Z6K4Z6E4oCL4Z6R4Z+A4Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6a4Z6Z4Z+I4Z6W4Z+B4Z6bIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuCI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLhnp/hnrzhnpjigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhn5LhnorhnoThnpHhn4Dhno/igIvhnpPhn4XigIvhnpbhn4HhnpvigIvhnoDhn5Lhnprhn4Thnpnhn5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i4Z6i4Z684Z6f4oCL4oCL4oCL4Z6F4Z674Z+H4Z6A4Z+S4Z6a4Z+E4Z6YIOGeiuGevuGemOGfkuGelOGeuOKAi+GeheGfgeGeieKAi+GeluGeuOKAi+GegOGetuGemuKAi+GelOGehOGfkuGeoOGetuGeieKAi+GeluGfgeGeieKAi+GeouGfgeGegOGfkuGemuGehOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLhnqLhnrzhnp/igIvigIvigIvigIvhnpbhnrjhnpvhnr7igIvhnoXhnrvhn4fhnoDhn5Lhnprhn4Thnpgg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6F4Z+B4Z6J4oCL4Z6W4Z644oCL4Z6A4Z624Z6a4oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6W4Z+B4Z6J4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLhnprhnr3hnoXhnprhnrbhnpvhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLhnoLhn5LhnprhnrbhnpThn4vigIvhnprhn4bhnoDhnrfhnpvigIvhnprhnoThn5LhnpzhnoThn4vigIvhnpjhn4nhn4ThnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IuGeguGfkuGemuGetuGelOGfi+KAi+GemuGfhuGegOGet+Gem+KAi+GemuGehOGfkuGenOGehOGfi+KAi+Gek+GetuGekeGeuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLhnofhn5Lhnprhnr7hnp/igIvhnpjhn4nhn4ThnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLhnofhn5Lhnprhnr7hnp/igIvhnpPhnrbhnpHhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IuGegOGfkuGemuGeoeGetuKAi+KAi+KAi+GegeGfguKAi+Gek+Gfg+KAi+GekOGfkuGehOGfgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IuGelOGeieGfkuGeh+GeuOKAi+GehuGfkuGek+GetuGfhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i4Z6H4Z+S4Z6a4Z6+4Z6f4oCL4Z6B4Z+CIOGek+Get+GehOKAi+GekOGfkuGehOGfgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IuGeh+GfkuGemuGevuGen+KAi+GehuGfkuGek+GetuGfhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiLhnpThnrbhnpPigIvhnofhn5Lhnprhnr7hnp8gPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4i4Z6U4Z624Z6T4oCL4Z6b4Z674Z6UIDx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAppbmRleCAxYTBiMmQ5Li5kM2JhMGFiIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IjjsnpDrpqwg7J207IOB7J2YIOyIq+yekCBQVUvrpbwg7J6F66Cl7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0g7Lm065Oc7J2YIFBVS+qwgCDsnqDqsqgg7J6I7Iq164uI64ukLiDsnqDquIjtlbTsoJztlZjroKTrqbQgUFVLIOy9lOuTnOulvCDsnoXroKXtlZjshLjsmpQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iU0lNIOy5tOuTnCDsnqDquIjsnYQg7ZW07KCc7ZWY66Ck66m0IFBVSzLrpbwg7J6F66Cl7ZWY7IS47JqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuyLpO2MqO2WiOyKteuLiOuLpC4gU0lNL1JVSU0g7J6g6riI7J2EIOyCrOyaqSDshKTsoJXtlZjshLjsmpQuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+7ZqMIOydtOyDgSDsi6TtjKjtlaAg6rK97JqwIFNJTeydtCDsnqDquYHri4jri6QuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+7ZqMIOydtOyDgSDsi6TtjKjtlaAg6rK97JqwIFNJTeydtCDsnqDquYHri4jri6QuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLrsJzsi6DsnpAg67KI7Zi4Ijwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLqtoztlZzsnYQg6rCA7KeEIO2UhOuhnOq3uOueqOydtCBWUE4g7ISc67mE7Iqk7JeQIOuMgO2VnCDstZzsg4HsnIQg7J247YSw7Y6Y7J207Iqk66W8IOyCrOyaqe2VmOuPhOuhnSDtl4jsmqntlanri4jri6QuIOydvOuwmCDslbHsl5DripQg7ZWE7JqU7ZWY7KeAIOyViuyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i67Cw6rK97ZmU66m0IOyXsOqysCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i6raM7ZWc7J2EIOqwgOynhCDtlITroZzqt7jrnqjsnbQg67Cw6rK97ZmU66m07JeQIOuMgO2VnCDstZzsg4HsnIQg7J247YSw7Y6Y7J207Iqk66W8IOyCrOyaqe2VmOuPhOuhnSDtl4jsmqntlanri4jri6QuIOydvOuwmCDslbHsl5DripQg7ZWE7JqU7ZWY7KeAIOyViuyKteuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuybkOqyqSDrlJTsiqTtlIzroIjsnbTsl5Ag7Jew6rKwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i6raM7ZWc7J2EIOqwgOynhCDtlITroZzqt7jrnqjsnbQg7JuQ6rKpIOuUlOyKpO2UjOugiOydtOyXkCDrjIDtlZwg7LWc7IOB7JyEIOyduO2EsO2OmOydtOyKpOulvCDsgqzsmqntlZjrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukLiDsnbzrsJgg7JWx7JeQ64qUIO2VhOyalO2VmOyngCDslYrsirXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i7JyE7KCvIOyEnOu5hOyKpOyZgCDsl7DqsrAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i6raM7ZWc7J2EIOqwgOynhCDtlITroZzqt7jrnqjsnbQg7JyE7KCvIOyEnOu5hOyKpOyXkCDrjIDtlZwg7LWc7IOB7JyEIOyduO2EsO2OmOydtOyKpOulvCDsgqzsmqntlZjrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukLiDsnbzrsJgg7JWx7JeQ64qUIO2VhOyalO2VmOyngCDslYrsirXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i6riw6riwIOq0gOumrOyekOyZgCDsg4HtmLgg7J6R7JqpIjwvc3RyaW5nPgpAQCAtNDYwLDcgKzQ2Nyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxlbmRhciIgbXNnaWQ9IjU5NzI3Mjc1NjAyNTc2MTIzOTgiPiLsupjrprDrjZQg7J287KCVIOuwjyDquLDrsIDsoJXrs7Qg7J296riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MjE2NDYyMDQ5MDU3NjU4NzIzIj4i7JWx7J20IOy5nOq1rOuCmCDrj5nro4zsnZgg7J287KCV7J2EIO2PrO2VqO2VmOyXrCDtg5zruJTrpr/sl5Ag7KCA7J6l65CcIOuqqOuToCDsupjrprDrjZQg7J287KCV7J2EIOydveydhCDsiJgg7J6I64+E66GdIO2XiOyaqe2VqeuLiOuLpC4g7J20IOqyveyasCDslbHsnbQg67mE67CA7Jyg7KeAIOuYkOuKlCDquLDrsIDshLHsnYQg66y07Iuc7ZWY6rOgIOy6mOumsOuNlCDrjbDsnbTthLDrpbwg6rO17JygIOuYkOuKlCDsoIDsnqXtlaAg7IiY64+EIOyeiOyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NDM0NTQ4NjgyNDcwODUxNTgzIj4i7JWx7J20IOy5nOq1rOuCmCDrj5nro4zsnZgg7J287KCV7J2EIO2PrO2VqO2VmOyXrCDtnLTrjIDsoITtmZTsl5Ag7KCA7J6l65CcIOuqqOuToCDsupjrprDrjZQg7J287KCV7J2EIOydveydhCDsiJgg7J6I64+E66GdIO2XiOyaqe2VqeuLiOuLpC4g7J20IOqyveyasCDslbHsnbQg67mE67CA7Jyg7KeAIOuYkOuKlCDquLDrsIDshLHqs7wg6rSA6rOEIOyXhuydtCDsupjrprDrjZQg642w7J207YSw66W8IOqzteycoCDrmJDripQg7KCA7J6l7ZWgIOyImOuPhCDsnojsirXri4jri6QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+IuyGjOycoOyekCDrqrDrnpgg7LqY66aw642UIOydvOygleydhCDstpTqsIAg65iQ64qUIOyImOygle2VmOqzoCDssLjshJ3snpDsl5Dqsowg7J2066mU7J28IOyghOyGoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDYWxlbmRhciIgbXNnaWQ9Ijg0Mzg4NzQ3NTUxOTM4MjU2NDciPiLshozsnKDsnpDsl5Dqsowg7JWM66as7KeAIOyViuqzoCDsupjrprDrjZQg7J287KCV7J2EIOy2lOqwgCDrmJDripQg7IiY7KCV7ZWY6rOgIOywuOyEneyekOyXkOqyjCDsnbTrqZTsnbwg7KCE7IahIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+IuyVseydtCDsuZzqtazrgpgg64+Z66OM7J2YIOydvOygleydhCDtj6ztlajtlZjsl6wg7YOc67iU66a/7JeQ7IScIOyImOygle2VoCDsiJgg7J6I64qUIOydvOygleydhCDstpTqsIAsIOyCreygnCwg67OA6rK97ZWgIOyImCDsnojrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukLiDsnbQg6rK97JqwIOyVseydtCDsupjrprDrjZQg7IaM7Jyg7J6Q6rCAIOuztOuCtOuKlCDqsoPsspjrn7wg66mU7Iuc7KeA66W8IOyghOyGoe2VmOqxsOuCmCDshozsnKDsnpAg66qo66W06rKMIOydvOygleydhCDsiJjsoJXtlaAg7IiY64+EIOyeiOyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+IuyVseydtCDsuZzqtazrgpgg64+Z66OM7J2YIOydvOygleydhCDtj6ztlajtlZjsl6wg7Zy064yA7KCE7ZmU7JeQ7IScIOyImOygle2VoCDsiJgg7J6I64qUIOydvOygleydhCDstpTqsIAsIOyCreygnCwg67OA6rK97ZWgIOyImCDsnojrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukLiDsnbQg6rK97JqwIOyVseydtCDsupjrprDrjZQg7IaM7Jyg7J6Q6rCAIOuztOuCtOuKlCDqsoPsspjrn7wg66mU7Iuc7KeA66W8IOyghOyGoe2VmOqxsOuCmCDshozsnKDsnpAg66qo66W06rKMIOydvOygleydhCDsiJjsoJXtlaAg7IiY64+EIOyeiOyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9Ijg2ODgzMzQ5NzQwMzY4MjMzMzAiPiLthYzsiqTtirjrpbwg7JyE7ZW0IOychOy5mCDsoJXrs7TsoJzqs7XsnpDroZwg6rCA7J6lIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLslbHsnbQgU3VyZmFjZUZsaW5nZXLsnZgg7ZWY7JyEIOyImOykgCDquLDriqXsnYQg7IKs7Jqp7ZWgIOyImCDsnojrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+Iu2UhOugiOyehCDrsoTtjbwg7J296riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuyVseydtCDtlITroIjsnoQg67KE7Y287J2YIOuCtOyaqeydhCDsnb3snYQg7IiYIOyeiOuPhOuhnSDtl4jsmqntlanri4jri6QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iSW5wdXRGbGluZ2Vy7JeQIOyVoeyEuOyKpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLslbHsnbQgSW5wdXRGbGluZ2Vy7J2YIO2VmOychCDsiJjspIAg6riw64ql7J2EIOyCrOyaqe2VmOuPhOuhnSDtlanri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJXaS1GaSDrlJTsiqTtlIzroIjsnbQg7ISk7KCVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4i7JWx7J20IFdpLUZpIOuUlOyKpO2UjOugiOydtOulvCDshKTsoJXtlZjqs6Ag7Jew6rKw7ZWY64+E66GdIO2XiOyaqe2VqeuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IldpLUZpIOuUlOyKpO2UjOugiOydtCDsoJzslrQiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i7JWx7J20IOydjOufieydtOuCmCDstpzroKXsnYQg7JyE7ZW0IOyCrOyaqe2VmOuKlCDsiqTtlLzsu6Qg65OxIOyghOyytCDsmKTrlJTsmKQg7ISk7KCV7J2EIOuzgOqyve2VoCDsiJgg7J6I64+E66GdIO2XiOyaqe2VqeuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+IuyYpOuUlOyYpCDrhbnsnYwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiLslbHsnbQg66eI7J207YGs66GcIOyYpOuUlOyYpOulvCDrhbnsnYztlaAg7IiYIOyeiOuPhOuhnSDtl4jsmqntlanri4jri6QuIOydtCDqtoztlZzsnYQg7IKs7Jqp7ZWY66m0IOyVseydtCDsgqzsmqnsnpDsnZgg7ZmV7J24IOyXhuydtCDslrjsoJzrk6Dsp4Ag7Jik65SU7Jik66W8IOuFueydjO2VoCDsiJgg7J6I7Iq164uI64ukLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4iU0lNIO2GteyLoCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IuyVseydtCBTSU3sl5Ag66qF66C57Ja066W8IOyghOyGoe2VoCDsiJgg7J6I64+E66GdIO2XiOyaqe2VqeuLiOuLpC4g7J20IOq4sOuKpeydgCDrp6TsmrAg7JyE7ZeY7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+IuyCrOynhOqzvCDrj5nsmIHsg4Eg7LCN6riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuyVseydtCDsubTrqZTrnbzroZwg7IKs7KeE6rO8IOuPmeyYgeyDgeydhCDssI3snYQg7IiYIOyeiOuPhOuhnSDtl4jsmqntlanri4jri6QuIOydtCDqtoztlZzsnYQg7IKs7Jqp7ZWY66m0IOyVseydtCDslrjsoJzrk6Dsp4Ag7IKs7Jqp7J6Q7J2YIO2ZleyduCDsl4bsnbQg7Lm066mU652866W8IOyCrOyaqe2VoCDsiJgg7J6I7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+Iuy5tOuplOudvOulvCDsgqzsmqntlaAg65WMIOyghOyGoSDtkZzsi5wgTEVEIOyCrOyaqSDspJHsp4AiPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiLsp5EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4i7KeB7J6lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiLquLDtg4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4i7J20IOyjvOyGjOuhneydhCDtkZzsi5ztlaAg7IiYIOyeiOuKlCDslaDtlIzrpqzsvIDsnbTshZjsnbQg7JeG7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTiDsvZTrk5wg7J6F66ClIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIOuwjyDsg4ggUElOIOy9lOuTnCDsnoXroKUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDsvZTrk5wiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCDtgqQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciDtgqQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLslbEg7ISg7YOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPuydhCjrpbwpIOyLpO2Wie2VoCDsiJgg7JeG7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IuqzteycoCDrjIDsg4E6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz7smYAo6rO8KSDqs7XsnKAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i7Iqs65287J2065SpIO2VuOuTpOydhCDquLjqsowg7YSw7LmY7ZWY7IS47JqULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7tlZjroKTrqbQg7JyE66GcIOyKrOudvOydtOuTnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPu2VmOugpOuptCDslYTrnpjroZwg7Iqs65287J2065OcIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+7ZWY66Ck66m0IOyZvOyqveycvOuhnCDsiqzrnbzsnbTrk5wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+7ZWY66Ck66m0IOyYpOuluOyqveycvOuhnCDsiqzrnbzsnbTrk5wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuyeoOq4iCDtlbTsoJwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i7Lm066mU6528Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuustOydjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLsgqzsmrTrk5wg7Lyc6riwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLqsoDsg4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLsiqTsmYDsnbTtlITtlZjsl6wg7J6g6riJ64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLruYTrsIDrsojtmLgg7YKk66W8IOydjOyEseycvOuhnCDrk6TsnLzroKTrqbQg7Zek65Oc7IWL7J2EIOyXsOqysO2VmOyEuOyalC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLsoJAiPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLsi5zsiqTthZwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+Iuu4lOujqO2IrOyKpCDsmKTrlJTsmKQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IuustOyEoCDrlJTsiqTtlIzroIjsnbQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i7JmE66OMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i66+465SU7Ja0IOy2nOugpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i6riw6riw7JeQIOyXsOqysCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+Iuq4sOq4sOuhnCDtmZTrqbQg7KCE7IahIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i6riw6riwIOqygOyDiSDspJHigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLshKTsoJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i7Jew6rKwIO2VtOygnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLqsoDsg4kg7KSRLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i7Jew6rKwIOykkS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i7IKs7JqpIOqwgOuKpSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Ijx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz7rsojsp7gg7Jik67KE66CI7J20Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwg67O07JWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLrrLTshKAg65SU7Iqk7ZSM66CI7J206rCAIOyXsOqysOuQmOyXiOyKteuLiOuLpC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i7J20IO2ZlOuptOydgCDri6Trpbgg6riw6riw7JeQ7IScIO2RnOyLnOuQmOqzoCDsnojsirXri4jri6QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+Iu2ZlOuptCDsoITshqEg7KSRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+7JeQIOyXsOqysCDspJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLtmZTrqbQg7KCE7IahIOykkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+7JeQIOyXsOqysOuQqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLsl7DqsrAg7ZW07KCcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLquLTquIkg7Ya17ZmUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i7Yyo7YS07J2EIOyeiuydjCI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1OSwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPuy0iCDtm4Tsl5Ag64uk7IucIOyLnOuPhO2VmOyEuOyalC4iPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i64KY7KSR7JeQIOuLpOyLnCDsi5zrj4QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i7KCE7LK07ZmU66m07J2EIOyiheujjO2VmOugpOuptCDsnITsl5DshJwg7JWE656Y66GcIOyKpOyZgOydtO2UhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLsoITssrTtmZTrqbTsnYQg7KKF66OM7ZWY66Ck66m0IOychOyXkOyEnCDslYTrnpjroZwg7Iqk7JmA7J207ZSE7ZWY7IS47JqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i7JmE66OMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4i7Iuc6rCEIOybkO2YlSDsiqzrnbzsnbTrjZQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+Iuu2hCDsm5DtmJUg7Iqs65287J20642UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IuyLnOqwhCDshKDtg50iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLrtoQg7ISg7YOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLsm5Trs4Qg67CU65GR7YyQ7IudIOuCoOynnCDtkZzsi5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLrhYQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IuyblC/snbwg7ISg7YOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4i7Jew64+EIOyEoO2DnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz7snbQo6rCAKSDshKDtg53rkKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDsgq3soJzrkKgiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbGFuZC9kaW1lbnMueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sYW5kL2RpbWVucy54bWwKaW5kZXggZGM1OWY2MS4uNjQwY2ExZSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1sYW5kL2RpbWVucy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sYW5kL2RpbWVucy54bWwKQEAgLTYxLDYgKzYxLDEwIEBACiAgICAgTGFuZHNjYXBlJ3MgbGF5b3V0IGFsbG93cyB0aGlzIHRvIGJlIHNtYWxsZXIgdGhhbiBmb3IgcG9ydHJhaXQuIC0tPgogICAgIDxkaW1lbiBuYW1lPSJrZ19zcXVhc2hlZF9sYXlvdXRfdGhyZXNob2xkIj40MDBkcDwvZGltZW4+CiAKKyAgICA8IS0tIE5ldyBUaW1lUGlja2VyIGRpbWVuc2lvbnMuIC0tPgorICAgIDxkaW1lbiBuYW1lPSJ0aW1lcGlja2VyX2xlZnRfc2lkZV93aWR0aCI+MjUwZGlwPC9kaW1lbj4KKwogICAgIDwhLS0gd2lkdGggb2YgSW1tZXJzaXZlTW9kZUNvbmZpcm1hdGlvbiAoLTEgZm9yIG1hdGNoX3BhcmVudCkgLS0+CiAgICAgPGRpbWVuIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NsaW5nX3dpZHRoIj4zODBkcDwvZGltZW4+CisKIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAppbmRleCAwMDNiM2Y5Li41OTUxMjc0IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4i4Lqe4Lq04Lqh4Lql4Lqw4Lqr4Lqx4LqUIFBVSyDgupfgurXgu4jguqHgurUgOCDgu4LgupXgu4DguqXguoEg4Lqr4Lq84Lq34Lqr4Lq84Lqy4LqN4LqB4Lqn4LuI4Lqy4LqZ4Lqx4LuJ4LqZLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLguorgurTguqHguoHgurLgupTguoLguq3guofgupfgu4jgurLgupngupbgurfguoHguqXgurHguq3guoHgupTgu4nguqfguo3guqXgurDguqvgurHgupQgUFVLLiDgu4Pguqvgu4ngup7gurTguqHguqXgurDguqvgurHgupQgUFVLIOC7gOC6nuC6t+C7iOC6reC6m+C6u+C6lOC6peC6seC6reC6geC6oeC6seC6mS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLgup7gurTguqEgUFVLMiDgu4Dgup7gurfgu4jguq3gupvgurvgupTguqXgurHguq3guoEgU0lNIGNhcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i4Lqa4LuN4LuI4Lqq4Lqz4LuA4Lql4Lqx4LqULCDgu4DgupvgurXgupTgupngu43gurLgu4Pguorgu4nguoHgurLgupnguqXgurHguq3guoHguoLguq3guocgU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i4LqX4LuI4Lqy4LqZ4Lqq4Lqy4Lqh4Lqy4LqU4Lql4Lqt4LqH4LuE4LqU4LuJ4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3guoHgu4jguq3gupngupfgurXgu4ggU0lNIOC6guC6reC6h+C6l+C7iOC6suC6meC6iOC6sOC6luC6t+C6geC6peC6seC6reC6gS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLgupfgu4jgurLgupnguqrgurLguqHgurLgupTguqXguq3guofgu4TgupTgu4nguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC6geC7iOC6reC6meC6l+C6teC7iCBTSU0g4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4LqI4Lqw4LqW4Lq34LqB4Lql4Lqx4Lqt4LqBLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i4Lud4Lqy4LqN4LuA4Lql4LqB4Lqc4Lq54LuI4LuC4LqX4LuA4LqC4Lq74LuJ4LqyIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Dguojgurvgu4ngurLguoLguq3guofgu4Dguorgurfgu4jguq3guqHgu4Lguo3guofguoHgurHguprguqrgu4jguqfgupngupXgurTgupTgupXgu43gu4jguqXgurDgupTgurHguprgu4DgupfgurTguofguqrgurjgupQg4LqC4Lqt4LqH4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZIFZQTi4g4LuB4Lqt4Lqx4Lqa4Lqv4LqX4Lq74LuI4Lqn4LuE4Lqb4Lqa4LuN4LuI4LqE4Lqn4LqZ4LqI4Lqz4LuA4Lqb4Lqx4LqZ4LqV4LuJ4Lqt4LqH4LuD4LqK4LuJLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLgu4Dguorgurfgu4jguq3guqHgu4Lguo3guofguoHgurHguprgup7gurLguprgup7gurfgu4ngupnguqvgurzgurHguociPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC6nOC6ueC7iOC7g+C6iuC7ieC7gOC6iuC6t+C7iOC6reC6oeC7guC6jeC6h+C6geC6seC6muC6quC7iOC6p+C6meC6leC6tOC6lOC6leC7jeC7iOC6peC6sOC6lOC6seC6muC6quC6ueC6h+C6quC6uOC6lCDguoLguq3guofgup7gurLguprgup7gurfgu4ngupnguqvgurzgurHguofgu4PgupTgupngurbgu4jguocuIOC7geC6reC6seC6muC6r+C6l+C6s+C6oeC6sOC6lOC6suC6muC7jeC7iOC6hOC6p+C6meC6iOC6s+C7gOC6m+C6seC6meC6leC7ieC6reC6h+C7g+C6iuC7iS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuC6nOC6ueC6geC6geC6seC6meC7gOC6nuC6t+C7iOC6reC6quC6sOC7geC6lOC6h+C6nOC6u+C6meC6l+C6suC6h+C7hOC6gS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngupzgurngu4jgupbgurfgupzgurnguoHguoHgurHguprguqrgu4jguqfgupngupXgurTgupTgupXgu43gu4jguqXgurDgupTgurHguprguqrgurnguofguqrgurjgupQg4LqC4Lqt4LqH4LqB4Lqy4LqZ4Lqq4Lqw4LuB4LqU4LqH4Lqc4Lq74LqZ4LqX4Lqy4LqH4LuE4LqBLiDguprgu43gu4jguojgurPgu4DgupvgurHgupnguqrgurPguqXgurHguprgu4Hguq3gurHguprguq/gupfgurvgu4jguqfgu4TgupsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i4LuA4LqK4Lq34LuI4Lqt4Lqh4LuC4LqN4LqH4LuE4Lqb4Lqr4Lqy4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZ4Lqn4Lq04LqU4LuA4LqI4Lqx4LqUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC6nOC6ueC7iOC6luC6t+C6nOC6ueC6geC6geC6seC6muC6reC6tOC6meC7gOC6leC6teC7gOC6n+C6lOC6peC6sOC6lOC6seC6muC6quC6ueC6h+C6quC6uOC6lCDguoLguq3guofguprgu43guqXgurTguoHgurLgupnguqfgurTgu4DguojgurHgupQuIOC6muC7jeC7iOC6iOC6s+C7gOC6m+C6seC6meC6quC6s+C6peC6seC6muC7geC6reC6seC6muC6r+C6l+C6u+C7iOC6p+C7hOC6my4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLgupXgurTgupTgupXgu43gu4jguoHgurHguprgupzgurngu4jgu4DguprgurTgu4jguofgu4Hguo3guofguq3gurjgupvgurDguoHguq3gupkiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC7geC6reC6seC6muC6r+C6meC6s+C7g+C6iuC7ieC6hOC6p+C6suC6oeC6quC6suC6oeC6suC6lOC6peC6sOC6lOC6seC6muC6leC7iOC6syBTdXJmYWNlRmxpbmdlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuC6reC7iOC6suC6meC7gOC6n+C6o+C6oeC6muC6seC6muC7gOC6n+C6tSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq/guq3gu4jgurLgupngu4Dgupngurfgu4nguq3guqvgurLguoLguq3guofgu4Dgup/guqPguqHguprgurHguprgu4Dgup/gurUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4i4LuA4LqC4Lq74LuJ4Lqy4LuA4LqW4Lq04LqHIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq/gupngurPgu4Pguorgu4nguoTguqfgurLguqHguqrgurLguqHgurLgupQgSW5wdXRGbGluZ2VyIOC6peC6sOC6lOC6seC6muC6leC7iOC6syI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i4Lqb4Lqx4Lqa4LqE4LuI4Lqy4LqB4Lqy4LqZ4Lqq4Lqw4LuB4LqU4LqH4Lqc4Lq74LqZIFdpRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq/gupXgurHgu4nguofguoTgu4jgurIg4LuB4Lql4Lqw4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4LqI4LuN4Lqq4Lqw4LuB4LqU4LqH4Lqc4Lq74LqZIFdpRmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiLguoTguqfguprguoTgurjguqHguoHgurLgupnguqrgurDgu4HgupTguocgV2lGaSI8L3N0cmluZz4KQEAgLTQ5NSw2ICs1MDQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq/gu4HguoHgu4ngu4TguoLguoHgurLgupngupXgurHgu4nguofguoTgu4jgurLguqrgur3guofguqrgu4jguqfgupnguoHgurLguocg4LuA4LqK4Lqx4LuI4LqZOiDguqXgurDgupTgurHguprguqrgur3guocg4LuB4Lql4Lqw4Lql4Lqz4LuC4Lqe4LqH4LuD4LqU4LqX4Lq14LuI4LqW4Lq34LqB4LuD4LqK4LuJ4Lqq4Lq74LuI4LqH4Lqq4Lq94LqH4Lqt4Lqt4LqBLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4i4Lqa4Lqx4LqZ4LqX4Lq24LqB4Lqq4Lq94LqHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LuD4Lqr4LuJ4LuB4Lqt4Lqx4Lqa4Lqv4Lqa4Lqx4LqZ4LqX4Lq24LqB4Lqq4Lq94LqH4LqU4LuJ4Lqn4LqN4LuE4Lqh4LuC4LqE4Lqj4LuC4Lqf4LqZ4LuE4LqU4LuJLiDguoHgurLgupnguq3gurDgupngurjguo3gurLgupTgupngurXgu4nguojgurDgu4Dguq7gurHgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq8g4Lqq4Lqy4Lqh4Lqy4LqU4Lqa4Lqx4LqZ4LqX4Lq24LqB4Lqq4Lq94LqH4LuE4LqU4LuJ4LqV4Lqw4Lqr4Lql4Lqt4LqU4LuA4Lqn4Lql4LqyIOC7guC6lOC6jeC6muC7jeC7iOC6leC7ieC6reC6h+C6luC7ieC6suC6geC6suC6meC6ouC6t+C6meC6ouC6seC6meC6iOC6suC6geC6l+C7iOC6suC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+IuC6geC6suC6meC6quC6t+C7iOC6quC6suC6meC6guC6reC6hyBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq/guqrgurvgu4jguofguoTgurPguqrgurHgu4jguofguqvgurIgU0lNLiDguqrgurTgu4jguofgupngurXgu4nguq3gurHgupngupXgurDguqXgurLguo3guqvgurzgurLguo0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i4LqW4LuI4Lqy4LqN4Lqu4Lq54LqaIOC7geC6peC6sOC6p+C6tOC6lOC6teC7guC6rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq/gupbgu4jgurLguo3guq7gurngupog4LuB4Lql4Lqw4Lqn4Lq04LqU4Lq14LuC4Lqt4LqU4LuJ4Lqn4LqN4LqB4LuJ4Lqt4LqH4LqW4LuI4Lqy4LqN4Lqu4Lq54LqaLiDguoHgurLgupnguq3gurDgupngurjguo3gurLgupTgupngurXgu4nguojgurDguq3gurLgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq8g4Lqq4Lqy4Lqh4Lqy4LqU4LuD4LqK4LuJ4LqB4LuJ4Lqt4LqH4LqW4LuI4Lqy4LqN4Lqu4Lq54Lqa4LuE4LqU4LuJ4LqV4Lqw4Lqr4Lql4Lqt4LqU4LuA4Lqn4Lql4LqyIOC7guC6lOC6jeC6muC7jeC7iOC6leC7ieC6reC6h+C6luC7ieC6suC6geC6suC6meC6ouC6t+C6meC6ouC6seC6meC6iOC6suC6geC6l+C7iOC6suC6mS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiLgupvgurTgupTgu4Tgup/guqrgurHgupnguo3gurLgupkgTEVEIOC7gOC6oeC6t+C7iOC6reC6meC6s+C7g+C6iuC7ieC6geC7ieC6reC6hyI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IuC7gOC6ruC6t+C6reC6mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLguprgu4jguq3gupngu4Dguq7gurHgupTguqfgur3guoEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IuC6reC6t+C7iOC6meC7hiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiLguprgu43gu4jgup7gurvguprgu4Hguq3gurHguprguq/gupfgurXgu4jigIvgupXgurTgupTigIvgupXgu43gu4jigIvgupngurXgu4nigIsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i4Lqe4Lq04Lqh4Lql4Lqw4Lqr4Lqx4LqUIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IuC6nuC6tOC6oeC6peC6sOC6q+C6seC6lCBQVUsg4LuB4Lql4Lqw4oCL4Lql4Lqw4oCL4Lqr4Lqx4LqUIFBJTiDguq3gurHgupngu4Pgu53gu4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IuC6peC6sOKAi+C6q+C6seC6lCBQVUsiPC9zdHJpbmc+CkBAIC0xMTE0LDcgKzExMjYsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9hZGluZyIgbXNnaWQ9Ijc5MzM2ODEyNjAyOTYwMjExODAiPiLguoHgurPguqXgurHguofgu4LguqvguqXgupQuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29uIiBtc2dpZD0iMTU0NDY4Mjc1NTUxNDQ5NDI5OCI+IuC7gOC6m+C6teC6lCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb2ZmIiBtc2dpZD0iNjgxNTg3MDM4Njk3MjgwNTgzMiI+IuC6m+C6tOC6lCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4i4LuA4Lqu4Lqx4LqU4Lqn4Lq94LqB4LuD4Lqr4LuJ4Lqq4Lqz4LuA4Lql4Lqx4LqU4LuC4LqU4LqN4LuD4LqK4LuJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2hpY2hBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ1MzMxODU5NDcwNjQ3NzMzODYiPiLgupTgurPgu4DgupngurXgupnguoHgurLgupngu4LgupTguo3gu4Pguorgu4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aGljaEhvbWVBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ2MTY0MjAxNzI3MjczMjY3ODIiPiLgu4DguqXgurfguq3guoHgu4Hguq3gurHguprguq8gSG9tZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c1VzZSIgbXNnaWQ9IjQ1ODMwMTgzNjgwMDA2MTA0MzgiPiLgu4Pguorgu4ngu4LgupTguo3guoTgu4jgurLgu4DguqXgurXgu4jguqHgupXgurvgupnguqrgurPguqXgurHguprguoHgurLgupngu4Dguq7gurHgupTguqfgur3guoHgupngurXgu4kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLguqXgurbguprguqXgu4ngurLguofguoTgu4jgurLgu4DguqXgurXgu4jguqHgupXgurvgu4ngupkg4LuD4LqZIOC6geC6suC6meC6leC6seC7ieC6h+C6hOC7iOC6suC6peC6sOC6muC6u+C6miAmZ3Q7IOC7geC6reC6seC6muC6ryAmZ3Q7IOC6lOC6suC6p+C7guC6q+C6peC6lOC7geC6peC7ieC6py4iPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i4LuA4Lql4Lq34Lqt4LqB4LuB4Lqt4Lqx4Lqa4LqvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4i4Lqa4LuN4LuI4oCL4Lqq4Lqy4oCL4Lqh4Lqy4LqU4oCL4LuA4Lqb4Lq14LqUIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4g4LuE4LqU4LuJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i4LuB4Lqa4LuI4LqH4Lqb4Lqx4LqZ4LqB4Lqx4LqaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IuC7geC6muC7iOC6h+C6m+C6seC6meC7g+C6q+C7iSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IuC7gOC6peC6t+C7iOC6reC6meC6muC7iOC6reC6meC6luC6tyDgu4HguqXgu4nguqfgu4HgupXgurDguoTgu4ngurLguofgu4Tguqfgu4kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuC7gOC6peC6t+C7iOC6reC6meC6guC6tuC7ieC6meC7gOC6nuC6t+C7iOC6rSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i4LuA4Lql4Lq34LuI4Lqt4LqZ4Lql4Lq74LqH4LuA4Lqe4Lq34LuI4LqtIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLgu4DguqXgurfgu4jguq3gupngu4TgupvgupfgurLguofguorgu4ngurLguo3gu4Dgup7gurfgu4jguq0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLgu4DguqXgurfgu4jguq3gupngu4TgupvgupfgurLguofguoLguqfgurLgu4Dgup7gurfgu4jguq0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuC6geC7ieC6reC6hyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLgupvgurTgupTguqrgur3guociPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i4LuA4Lqb4Lq14LqU4Lqq4Lq94LqHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLguorguq3guoHguqvgurIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLgupvgurHgupTgu4Dgup7gurfgu4jguq3gupvgurvgupTguqXgurHguq3guoEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IuC6quC6veC6muC6quC6suC6jeC6q+C6ueC6n+C6seC6h+C7gOC6nuC6t+C7iOC6reC6n+C6seC6h+C6peC6sOC6q+C6seC6lOC6nOC7iOC6suC6mS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLguojgu43gu4ngurLgu4DguqHgurHgupQuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i4Lql4Lqw4Lqa4Lq74LqaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLguqrgur3guocgQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLguoHgurLgupnguqrgurDgu4HgupTguofgupzgurvgupngu4Tguq7gu4nguqrgurLguo0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i4LuB4Lql4LuJ4Lqn4LuGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i4Lqh4Lq14LuA4LqU4LqN4LuA4Lqt4Lq74LuJ4Lqy4Lqe4Lq44LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLgu4Dguorgurfgu4jguq3guqHgupXgu43gu4jguqvgurLguq3gurjgupvgurDguoHguq3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLguqrgurvgu4jguofgup7gurLguprgu5zgu4ngurLguojgu43gu4TgupvguqvgurLguq3gurjgupvgurDguoHguq3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLguoHgurPguqXgurHguofguorguq3guoHguqvgurLguq3gurjgupvgurDguoHguq3gupkuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLguoHgurLgupngupXgurHgu4nguofguoTgu4jgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i4LqV4Lqx4LqU4LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IuC6geC6s+C6peC6seC6h+C6quC6sOC7geC6geC6mS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IuC6geC6s+C6peC6seC6h+C7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i4Lqq4Lqy4Lqh4Lqy4LqU4LuD4LqK4LuJ4LuE4LqU4LuJIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i4LqB4Lqy4LqZ4Lqn4Lqy4LqH4LqK4LuJ4Lqt4LqZICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwg4Lqb4Lqt4LqU4LuE4LqeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLgu4Dguorgurfgu4jguq3guqHgupXgu43gu4jguoHgurLgupnguqrgurDgu4HgupTguofgupzgurvgupngu4Tguq7gu4nguqrgurLguo3gu4HguqXgu4nguqciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i4LqI4LuN4LqZ4Lq14LuJ4LqB4Lqz4Lql4Lqx4LqH4Lqq4Lqw4LuB4LqU4LqH4Lqi4Lq54LuI4LuD4LqZ4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZ4Lqt4Lq34LuI4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IuC6geC6s+C6peC6seC6h+C6quC6u+C7iOC6h+C6nuC6suC6muC7nOC7ieC6suC6iOC7jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IuC6geC6s+C6peC6seC6h+C7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC6q+C6siA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLguoHgurLgupnguqrgurvgu4jguofgup7gurLguprgu5zgu4ngurLguojgu40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IuC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC6geC6seC6miA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4g4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IuC6ouC6uOC6lOC6geC6suC6meC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i4LqB4Lqy4LqZ4LuC4LqX4Lqq4Lq44LqB4LuA4Lqq4Lq14LqZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4Lql4Lq34Lqh4Lqu4Lq54Lqa4LuB4Lqa4Lqa4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqBPyI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY2MCwxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i4Lql4Lqt4LqH4LuD4Lud4LuI4Lqt4Lq14LqB4LqE4Lqx4LuJ4LqH4LuD4LqZ4Lqe4Lqy4LqN4Lqr4Lql4Lqx4LqHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLgupvgurHgupTguqXgurvguofguqHgurLguojgurLguoHgupfgurLguofgu4DgupfgurTguofgu4Dgup7gurfgu4jguq3guq3guq3guoHguojgurLguoHgu4Lgu53gupTgu4DgupXgurHguqHgu5zgu4ngurLguojgu40uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLgu4HguqXgu4nguqfgu4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLgu4LgupXgu53gurjgupngupvgurHguprguorgurvgu4jguqfgu4LguqHguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IuC7guC6leC7neC6uOC6meC6m+C6seC6muC6meC6suC6l+C6tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLgu4DguqXgurfguq3guoHigIvguorgurvgu4jguqfigIvgu4LguqHguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLgu4DguqXgurfguq3guoHgupngurLigIvgupfgurUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IuC6leC6suC6leC6suC6peC6suC6h+C6p+C6seC6meC6l+C6teC7gOC6lOC6t+C6reC6meC6m+C6tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IuC6peC6suC6jeC6geC6suC6meC6m+C6tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i4LuA4Lql4Lq34Lqt4LqB4LuA4LqU4Lq34Lqt4LqZIOC7geC6peC6sCDguqfgurHgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLgu4DguqXgurfguq3guoHigIvgupvgurUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IOC6luC6t+C6geC7gOC6peC6t+C6reC6geC7geC6peC7ieC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IOC6luC6t+C6geC6peC6tuC6muC7geC6peC7ieC6pyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKaW5kZXggOWZhNDFjOS4uNTRhOTExNCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLErnZlc2tpdGUgOCBza2FpdG1lbsWzIGFyIGlsZ2VzbsSvIFBVSyBrb2TEhS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iSsWrc8WzIFNJTSBrb3J0ZWzElyB5cmEgdcW+cmFraW50YSBQVUsga29kdS4gSmVpIG5vcml0ZSBqxIUgYXRyYWtpbnRpLCDEr3Zlc2tpdGUgUFVLIGtvZMSFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IsSudmVza2l0ZSBQVUsyIGtvZMSFLCBrYWQgcGFuYWlraW50dW3El3RlIFNJTSBrb3J0ZWzEl3MgYmxva2F2aW3EhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJOZXBhdnlrby4gxK5nYWxpbnRpIFNJTSAvIFJVSU0gdcW+cmFrdMSFLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+Ikxpa28gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGJhbmQuIFBhc2t1aSBTSU0ga29ydGVsxJcgYnVzIHXFvnJha2ludGEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iTGlrbyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYmFuZC4gUGFza3VpIFNJTSBrb3J0ZWzElyBidXMgdcW+cmFraW50YS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IsSuZWluYW7EjWlvIHNrYW1iaW50b2pvIElEIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJMZWlkxb5pYW1hIHNhdmluaW5rdWkgc3VzaXNhaXN0eXRpIHN1IGF1a8WhxI1pYXVzaW8gbHlnaW8gVlBOIHBhc2xhdWdvcyBzxIVzYWphLiDErnByYXN0b21zIHByb2dyYW1vbXMgdG8gbmV0dXLEl3TFsyBwcmlyZWlrdGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InN1c2Fpc3R5dGkgc3UgZGFyYmFsYXVraW8gZm9udSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iTGVpZMW+aWFtYSBzYXZpbmlua8SFIHN1c2Fpc3R5dGkgc3UgYXVrxaHEjWlhdXNpbyBseWdpbyBkYXJiYWxhdWtpbyBmb25vIHPEhXNhamEuIMSucHJhc3RvbXMgcHJvZ3JhbW9tcyB0byBuZXR1csSXdMWzIHByaXJlaWt0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InN1c2lzYWlzdHl0aSBzdSBudW90b2xpbml1IGVrcmFudSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IkxlaWTFvmlhbWEgc2F2aW5pbmt1aSBzdXNpc2Fpc3R5dGkgc3UgYXVrxaHEjWlhdXNpb2pvIGx5Z2lvIG51b3RvbGluaW8gZWtyYW5vIHPEhXNhamEuIMSucHJhc3RvbXMgcHJvZ3JhbW9tcyB0byBuZXR1csSXdMWzIHByaXJlaWt0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJzdXNhaXN0eXRpIHN1IHZhbGRpa2xpbyBwYXNsYXVnYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJMZWlkxb5pYW1hIHNhdmluaW5rdWkgc3VzaXNhaXN0eXRpIHN1IGF1a8WhxI1pYXVzaW8gbHlnaW8gdmFsZGlrbGlvIHBhc2xhdWdvcyBzxIVzYWphLiDErnByYXN0b21zIHByb2dyYW1vbXMgdG8gbmV0dXLEl3TFsyBwcmlyZWlrdGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4ic8SFdmVpa2F1dGkgc3UgxK9yZW5naW5pbyBhZG1pbmlzdHJhdG9yaXVtaSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iTGVpZMW+aWFtYSBwcm9ncmFtYWkgbmF1ZG90aSDigJ5TdXJmYWNlRmxpbmdlcuKAnCDFvmVtbyBseWdpbyBmdW5rY2lqYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ic2thaXR5dGkga2FkcsWzIGJ1ZmVyxK8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iTGVpZMW+aWFtYSBwcm9ncmFtYWkgc2thaXR5dGkgcsSXbWVsaW8gYnVmZXJpbyB0dXJpbsSvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+InBhc2lla3RpIOKAnklucHV0RmxpbmdlcuKAnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJQcm9ncmFtYWkgbGVpZMW+aWFtYSBuYXVkb3RpIOKAnklucHV0RmxpbmdlcuKAnCDFvmVtbyBseWdpbyBmdW5rY2lqYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJrb25maWfFq3J1b3RpIOKAnldpLUZp4oCcIHBhdGVpa3RpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IkxlaWTFvmlhbWEgcHJvZ3JhbWFpIGtvbmZpZ8WrcnVvdGkgaXIgcHJpc2lqdW5ndGkgcHJpZSDigJ5XaS1GaeKAnCBwYXRlaWvEjWnFsy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+InZhbGR5dGkg4oCeV2ktRmnigJwgcGF0ZWlrdGlzIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IkxlaWTFvmlhbWEgcHJvZ3JhbWFpIGtlaXN0aSB2aXN1b3Rpbml1cyBnYXJzbyBudXN0YXR5bXVzLCBwdnouLCBnYXJzdW3EhSBpciB0YWksIGt1cmlzIGdhcnNpYWthbGJpcyBuYXVkb2phbWFzIGnFoXZlc8SNaWFpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4ixK9yYcWheXRpIGdhcnPEhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IkxlaWTFvmlhbWEgcHJvZ3JhbWFpIMSvcmHFoXl0aSBnYXJzxIUgbmF1ZG9qYW50IG1pa3JvZm9uxIUuIMWgaXMgbGVpZGltYXMgc3V0ZWlraWEgZ2FsaW15YsSZIHByb2dyYW1haSDEr3JhxaF5dGkgZ2Fyc8SFIGJldCBrYWRhIGJlIGrFq3PFsyBwYXR2aXJ0aW5pbW8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJTSU0ga29ydGVsxJdzIHJ5xaF5cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IlByb2dyYW1haSBsZWlkxb5pYW1hIHNpxbNzdGkga29tYW5kYXMgxK8gU0lNIGtvcnRlbMSZLiBUYWkgbGFiYWkgcGF2b2ppbmdhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+ImZvdG9ncmFmdW90aSBpciBmaWxtdW90aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJMZWlkxb5pYW1hIHByb2dyYW1haSBmb3RvZ3JhZnVvdGkgaXIgZmlsbXVvdGkga2FtZXJhLiDFoGlzIGxlaWRpbWFzIHN1dGVpa2lhIHRlaXPEmSBwcm9ncmFtYWkgbmF1ZG90aSBrYW1lcsSFIGJldCBrYWRhIGJlIGrFq3PFsyBwYXR2aXJ0aW5pbW8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4ibmVsZWlzdGkgcGVyZHVvdGkgTEVEIGluZGlrYXRvcmlhdXMsIGthaSBuYXVkb2phbWFzIGZvdG9hcGFyYXRhcyI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IlBhZ3JpbmRpbmlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IkRhcmJhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iS2l0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJOZXJhc3RhIGpva2nFsyBwcm9ncmFtxbMgxaFpYW0ga29udGFrdHVpIHBlcsW+acWrcsSXdGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4ixK52ZXNraXRlIFBJTiBrb2TEhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IsSudmVza2l0ZSBQVUsgaXIgbmF1asSFIFBJTiBrb2R1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIGtvZGFzIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLErnZlc3RpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iUGFzaXJpbmtpdGUgcHJvZ3JhbcSFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iTmVwYXZ5a28gcGFsZWlzdGkg4oCePHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPuKAnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkJlbmRyaW50aSBzdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJCZW5kcmludGkgc3Ug4oCePHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPuKAnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJTbHlkaW1vIHZhbGR5bWFzLiBQYWxpZXNraXRlIGlyIGxhaWt5a2l0ZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iU2x5c2tpdGUgYXVrxaF0eW4gbGluayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iU2x5c2tpdGUgxb5lbXluIGxpbmsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlNseXNraXRlIMSvIGthaXLEmSBsaW5rIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iU2x5c2tpdGUgxK8gZGXFoWluxJkgbGluayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJBdHJha2ludGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iVmFpemRvIGthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJCZWdhcnNpcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJHYXJzYXMgxK9qdW5ndGFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJQYWllxaFrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IlBlcmJyYXVraXRlIHBpcsWhdHUsIGthZCBhdHJha2ludHVtxJd0ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUHJpanVua2l0ZSBhdXNpbmVzLCBrYWQgacWhZ2lyc3R1bcSXdGUgc2Frb211cyBzbGFwdGHFvm9kxb5pbyBrbGF2acWhdXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iVGHFoWthcy4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTaXN0ZW1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLigJ5CbHVldG9vdGjigJwgZ2Fyc2FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJCZWxhaWRpcyByb2R5bWFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IkF0bGlrdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNZWRpam9zIGnFoXZlc3RpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iUHJpanVuZ2ltYXMgcHJpZSDEr3JlbmdpbmlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iUGVyZHVvdGkgZWtyYW7EhSDEryDEr3JlbmdpbsSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iSWXFoWtvbWEgxK9yZW5naW5pxbPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJOdXN0YXR5bWFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkF0anVuZ3RpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+Ik51c2thaXRvbWEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJKdW5naWFtYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iUGFzaWVraWFtYSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlBlcmRhbmdhIG5yLiA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+IuKAnjx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuKAnDogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiB0YcWhay4gY29seWplIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc2F1Z3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IlByaWp1bmd0YXMgYmVsYWlkaXMgbW9uaXRvcml1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLFoGlzIGVrcmFuYXMgcm9kb21hcyBraXRhbWUgxK9yZW5naW55amUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iUGVyZHVvZGFtYXMgZWtyYW5hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IlByaXNpanVuZ2lhbWEgcHJpZSDigJ48eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7igJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJQZXJkdW9kYW1hcyBla3JhbmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJQcmlzaWp1bmd0YSBwcmllIOKAnjx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuKAnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJBdGp1bmd0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iU2thbWJ1dGlzIHBhZ2FsYm9zIG51bWVyaXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJQYW1pcsWhYXUgYXRyYWtpbmltbyBwaWXFoWluxK8iPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlbEl2xpYXUgYmFuZHlraXRlIGRhciBrYXJ0xIUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iUGVyYnJhdWtpdGUgbnVvIHZpcsWhYXVzIMW+ZW15biwga2FkIGnFoWVpdHVtxJd0ZSBpxaEgdmlzbyBla3Jhbm8gcmXFvmltbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iQXRsaWt0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkFwc2tyaXRhcyB2YWxhbmTFsyBzbGFua2lrbGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJBcHNrcml0YXMgbWludcSNacWzIHNsYW5raWtsaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iUGFzaXJpbmtpdGUgdmFsYW5kYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJQYXNpcmlua2l0ZSBtaW51dGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJNxJduZXNpbyBkaWVuxbMgdGlua2xlbGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTWV0xbMgc8SFcmHFoWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJQYXNpcmlua2l0ZSBtxJduZXPEryBpciBkaWVuxIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJQYXNpcmlua2l0ZSBtZXR1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiJQYXNpcmlua3RhOiA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiJJxaF0cmludGE6IDx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbAppbmRleCAwMzZkNWQ2Li4yZjViMDkzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IkllcmFrc3RpZXQgUFVLwqBrb2R1LCBrYXMgc2FzdMSBdiBubyA4wqB2YWkgdmFpcsSBayBjaXBhcmllbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iU0lNIGthcnRlIGlyIGJsb8S3xJN0YSBhciBQVUsga29kdS4gSWVyYWtzdGlldCBQVUsga29kdSwgbGFpIHRvIGF0YmxvxLfEk3R1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkllcmFrc3RpZXQgUFVLMiBrb2R1LCBsYWkgYXRibG/Et8STdHUgU0lNIGthcnRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+Ik5laXpkZXbEgXMuIEllc3DEk2pvamlldCBTSU0vUlVJTcKgYmxvxLfEk8WhYW51LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IlZhcmF0IG3Ek8SjaW7EgXQgdsSTbCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHJlaXppLCBwaXJtcyBTSU3CoGthcnRlIHRpa3MgYmxvxLfEk3RhLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IlZhcmF0IG3Ek8SjaW7EgXQgdsSTbCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHJlaXppKC1lcyksIHBpcm1zIFNJTcKga2FydGUgdGlrcyBibG/Et8STdGEuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJZW7EgWtvxaHEgSB6dmFuYSB6dmFuxKt0xIFqYcKgSUQiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IsS7YXVqIMSrcGHFoW5pZWthbSBpenZlaWRvdCBzYWl0aSBhciBWUE4gcGFrYWxwb2p1bWEgYXVnxaHEk2rEgSBsxKttZcWGYSBzYXNrYXJuaS4gUGFyYXN0YWrEgW0gbGlldG90bsSTbSB0YXMgbmVrYWQgbmF2IG5lcGllY2llxaFhbXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InNhaXN0xKt0IGFyIHRhcGV0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4ixLthdWogxKtwYcWhbmlla2FtIHBpZXNhaXN0xKt0IHRhcGV0ZXMgYXVnc3TEgWvEgSBsxKttZcWGYSBsaWV0b3TEgWphIHNhc2thcm5pLiBQYXJhc3RhasSBbSBsaWV0b3RuxJNtIHRhcyBuZWthZCBuYXYgbmVwaWVjaWXFoWFtcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IlNhaXRlcyBpenZlaWRlIGFyIGF0dMSBbHUgZGlzcGxlanUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLEu2F1aiDEq3BhxaFuaWVrYW0gaXp2ZWlkb3Qgc2FpdGkgYXIgYXR0xIFsYSBkaXNwbGVqYSBhdWfFocSTasSBIGzEq21lxYZhIHNhc2thcm5pLiBQYXJhc3RhasSBbSBsaWV0b3RuxJNtIHRhcyBuZWthZCBuYXYgbmVwaWVjaWXFoWFtcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJzYWlzdMSrdCBhciBsb2dyxKtrYSBwYWthbHBvanVtdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLEu2F1aiDEq3BhxaFuaWVrYW0gaXp2ZWlkb3Qgc2FpdGkgYXIgbG9ncsSra2EgcGFrYWxwb2p1bWEgYXVnxaHEk2rEgSBsxKttZcWGYSBzYXNrYXJuaS4gUGFyYXN0YWrEgW0gbGlldG90bsSTbSB0YXMgbmVrYWQgbmF2IG5lcGllY2llxaFhbXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4ibWlqaWVkYXJib3RpZXMgYXIgaWVyxKtjZXMgYWRtaW5pc3RyYXRvcnUiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IsS7YXVqIGxpZXRvdG5laSBsaWV0b3QgU3VyZmFjZUZsaW5nZXIgemVtYSBsxKttZcWGYSBmdW5rY2lqYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ibGFzxKt0IGthZHJ1IGJ1ZmVyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLEu2F1aiBsaWV0b3RuZWkgbGFzxKt0IGthZHJ1IGJ1ZmVyYSBzYXR1cnUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iUGlla8S8dXZlIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLEu2F1aiBsaWV0b3RuZWkgaXptYW50b3QgSW5wdXRGbGluZ2VyIHplbWEgbMSrbWXFhmEgZnVua2NpamFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iV2ktRmkgZGlzcGxlanUga29uZmlndXLEk8WhYW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4ixLthdWogbGlldG90bmVpIGtvbmZpZ3VyxJN0IFdpLUZpIGRpc3BsZWp1cyB1biB2ZWlkb3Qgc2F2aWVub2p1bXUgYXIgdGllbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IldpLUZpIGRpc3BsZWp1IHZhZMSrYmEiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4ixLthdWogbGlldG90bmVpIG1haW7Eq3QgZ2xvYsSBbG9zIGF1ZGlvIGllc3RhdMSranVtdXMsIHBpZW3Ek3JhbSwgc2thxLx1bXUgdW4gaXplamFpIGl6bWFudG90byBza2HEvHJ1bmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJpZXJha3N0xKt0IGF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4ixLthdWogbGlldG90bmVpIGllcmFrc3TEq3QgYXVkaW8sIGl6bWFudG9qb3QgbWlrcm9mb251LiDFoMSrIGF0xLxhdWphIMS8YXVqIGxpZXRvdG5laSBpZXJha3N0xKt0IGF1ZGlvIGplYmt1csSBIGJyxKtkxKsgYmV6IGrFq3N1IGFwc3RpcHJpbsSBanVtYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+IlNJTcKgc2F6acWGYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IsS7YXVqIGxpZXRvdG5laSBzxat0xKt0IGtvbWFuZGFzIHV6IFNJTcKga2FydGkuIFRhcyBpciDEvG90aSBixKtzdGFtaSEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJ1esWGZW10IGF0dMSTbHVzIHVuIHZpZGVva2xpcHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IsS7YXVqIGxpZXRvdG5laSB1esWGZW10IGF0dMSTbHVzIHVuIHZpZGVva2xpcHVzIGFyIGthbWVydS4gQXIgxaFvIGF0xLxhdWp1IGxpZXRvdG5lIHZhciBqZWJrdXLEgSBicsSrZMSrIGl6bWFudG90IGthbWVydSBiZXogasWrc3UgYXBzdGlwcmluxIFqdW1hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IkF0c3DEk2pvdCBwxIFycmFpZMSrxaFhbmFzIExFRMKgaW5kaWthdG9ydSwga2FkIGthbWVyYSB0aWVrIGl6bWFudG90YSI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+Ik3EgWrEgXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iRGFyYnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IkNpdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4iTmV0aWthIGF0cmFzdGEgbmV2aWVuYSBsaWV0b2p1bXByb2dyYW1tYSwgYXIga3VydSBza2F0xKt0IMWhbyBrb250YWt0cGVyc29udS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJZXZhZGlldCBQSU7CoGtvZHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iSWV2YWRpZXQgUFVLwqBrb2R1IHVuIGphdW51IFBJTsKga29kdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVS8Kga29kcyI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlDEgXJzbMSTZ8WhYW5hcyB0YXVzdGnFhsWhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iSWV2YWTEq8WhYW5hcyB0YXVzdGnFhsWhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iSXp2xJNsaWV0aWVzIGxpZXRvdG5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iTmV2YXLEk2phIHBhbGFpc3QgbGlldG90bmkgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJLb3DEq2dvdCBhcjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iS29wxKtnb3QgYXIgbGlldG9qdW1wcm9ncmFtbXUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJCxKtkxIFtcyB0dXJpcy4gUGllc2thcmlldGllcyB0YW0gdW4gdHVyaWV0IHRvIG5vc3BpZXN0dS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iVmVsY2lldCB1eiBhdWfFoXUsIGxhaSB2ZWlrdHUgxaHEgWR1IGRhcmLEq2J1OiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iVmVsY2lldCB1eiBsZWp1LCBsYWkgdmVpa3R1IMWhxIFkdSBkYXJixKtidTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlZlbGNpZXQgcGEga3JlaXNpLCBsYWkgdmVpa3R1IMWhxIFkdSBkYXJixKtidTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJWZWxjaWV0IHBhIGxhYmksIGxhaSB2ZWlrdHUgxaHEgWR1IGRhcmLEq2J1OiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJBdGJsb8S3xJN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJLbHVzdW1zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlNrYcWGYSBpZXNsxJNndGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Ik1la2zEk3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJWZWxjaWV0IGFyIHBpcmtzdHUsIGxhaSBhdGJsb8S3xJN0dS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUGlldmllbm9qaWV0IGF1c3RpxYZhcywgbGFpIGR6aXJkxJN0dSBwYXJvbGVzIHRhdXN0acWGdSBub3NhdWt1bXVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlB1bmt0cy4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTaXN0xJNtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoIGF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJCZXp2YWR1IGF0dMSTbG/FoWFuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJHYXRhdnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNdWx0aXZpZGVzIGl6ZWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJTYXZpZW5vanVtYSBpenZlaWRlIGFyIGllcsSrY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJFa3LEgW5hIGFwcmFpZGUgdXogaWVyxKtjaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Ik5vdGllayBpZXLEq8SNdSBtZWtsxJPFoWFuYeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+Ikllc3RhdMSranVtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJBdHZpZW5vdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJOb3RpZWsgbWVrbMSTxaFhbmEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJOb3RpZWsgc2F2aWVub2p1bWEgaXp2ZWlkZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iUGllZWphbXMiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJQxIFya2zEgWp1bXMgTnIuwqA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPsKgeMKgPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+wqBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBkcm/FoXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkJlenZhZHUgYXR0xJNsb8WhYW5hcyBzYXZpZW5vanVtcyBpciBpenZlaWRvdHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IsWgaXMgZWtyxIFucyB0aWVrIHLEgWTEq3RzIGNpdMSBIGllcsSrY8STLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJFa3LEgW5hIGFwcmFpZMSrxaFhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJOb3RpZWsgc2F2aWVub2p1bWEgaXp2ZWlkZSBhcjogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iRWtyxIFuYSBhcHJhaWTEq8WhYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJJenZlaWRvdHMgc2F2aWVub2p1bXMgYXI6IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJQxIFydHJhdWt0IHNhdmllbm9qdW11Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLEgHJrxIFydGFzIGl6c2F1a3VtcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IkFpem1pcnN1IGtvbWJpbsSBY2lqdSI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY2MCwxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iVsSTbMSBayBtxJPEo2luaWV0IHbEk2xyZWl6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJMYWkgaXppZXR1IG5vIHBpbG5la3LEgW5hIHJlxb7Eq21hLCB2ZWxjaWV0IG5vIGF1Z8WhYXMgdXogbGVqdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkdhdGF2cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IlN0dW5kdSBhcMS8dmVpZGEgc2zEq2RuaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+Ik1pbsWrxaF1IGFwxLx2ZWlkYSBzbMSrZG5pcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJBdGxhc2lldCBzdHVuZGFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IkF0bGFzaWV0IG1pbsWrdGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iUmXFvsSjaXMgYXIgbcSTbmXFoWEgZGllbsSBbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IkdhZHUgc2FyYWtzdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IkF0bGFzaWV0IG3Ek25lc2kgdW4gZGllbnUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iQXRsYXNpZXQgZ2FkdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iQXRsYXPEq3RzOiA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiB0aWthIGR6xJNzdHMuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCmluZGV4IGZlM2Q3OGIuLjEwM2Y2MmEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiI4LdGBINGG06nTqdC90LPSr9C5INGC0L7QvtC90L7QvtGBINCx0q/RgtGN0YUgUFVLLdCzINCx0LjRh9C90Y0g0q/Sry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iU0lNINC60LDRgNGC0L3RiyBQVUst0YLSr9Cz0LbQuNCz0LTRgdGN0L0uINCi0LDQudC70LDRhSDQsdC+0LsgUFVLINC60L7QtNGL0LMg0LHQuNGH0L3RjSDSr9KvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNJTSDQutCw0YDRgtGL0L0g0YXQsNCw0LvRgtGL0LMg0LHQvtC70LjRg9C70LDRhSDQsdC+0LsgUFVLMi3QsyDQsdC40YfQvdGNINKv0q8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i0JDQvNC20LjQu9GC0LPSr9C5INCx0L7Qu9C70L7Qviwg0KHQmNCcL9Cg0q7QmNCcINGC0q/Qs9C20Y3RjdCzINC40LTRjdCy0YXQttKv0q/Qu9C90Y0g0q/Sry4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLQotCw0L3RiyDQodCY0Jwg0YLSr9Cz0LbQuNCz0LTRjdGF0Y3RjdGBINOp0LzQvdOpINGC0LDQvdC0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtGA0L7Qu9C00LvQvtCz0L4g0YXQuNC50YUg0LHQvtC70L7QvNC2INKv0LvQtNC70Y3RjS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLQodCY0Jwg0YLSr9Cz0LbQuNCz0LTRjdGF0Y3RjdGBINOp0LzQvdOpINGC0LDQvdC0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtGA0L7Qu9C00LvQvtCz0L4g0YXQuNC50YUg0LHQvtC70L7QvNC2INKv0LvQtNC70Y3RjS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+ItCU0YPRg9C00LvQsNCz0LAg0YXQuNC50LPRh9C40LnQvSBJRCI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i0K3Qt9GN0LzRiNC40LPRhyDQvdGMIFZQTiDSr9C50LvRh9C40LvQs9GN0Y3QvdC40Lkg0LTRjdGN0LQt0YLTqdCy0YjQuNC90LjQuSDQuNC90YLQtdGA0YTQtdC50YHRgtGN0Lkg0YXQvtC70LHQvtGFINCx0L7Qu9C+0LzQttGC0L7QuS4g0K3QvdCz0LjQudC9INCw0L/Qvy3QtCDRiNCw0LDRgNC00LvQsNCz0LDQs9Kv0LkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ItGF0LDQvdGL0L0g0LfRg9GA0LDQs9GC0LDQuSDRhdC+0LvQsdC+0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+ItCt0LfRjdC80YjQuNCz0Ycg0L3RjCDRhdCw0L3Ri9C9INC30YPRgNCw0LPQvdGLINC00Y3RjdC0LdGC06nQstGI0LjQvdC40Lkg0LjQvdGC0LXRgNGE0LXQudGB0YLRjdC5INGF0L7Qu9Cx0L7RhSDQsdC+0LvQvtC80LbRgtC+0LkuINCt0L3Qs9C40LnQvSDQsNC/0L8t0YPRg9C00LDQtCDRiNCw0LDRgNC00LvQsNCz0LDQs9Kv0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLQsNC70YHRi9C9INC00Y3Qu9Cz0Y3RhtGC0Y3QuSDRhdC+0LvQsdC+0LPQtNC+0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLQrdC30Y3QvNGI0LjQs9GH0LjQtCDQsNC70YHRi9C9INC00Y3Qu9Cz0Y3RhiDQtNGN0YUg0LTRjdGN0LQg0LTQsNCy0YXQsNGA0LPRi9C9INC40L3RgtC10YDRhNGN0LnRgdGC0Y3QuSDRhdC+0LvQsdC+0LPQtNC+0YUg0LHQvtC70L7QvNC2INC+0LvQs9C+0L3Qvi4g0K3QvdCz0LjQudC9INCw0L/Qvy3QtCDRiNCw0LDRgNC00LDQs9C00LDRhdCz0q/QuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLQstC40LTQttC10YIg0q/QudC70YfQuNC70LPRjdGN0YLRjdC5INGF0L7Qu9Cx0L7RhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLQrdC30Y3QvNGI0LjQs9GHINC90Ywg0LLQuNC00LbQtdGCINKv0LnQu9GH0LjQu9Cz0Y3RjdC90LjQuSDQtNGN0Y3QtC3RgtOp0LLRiNC40L3QuNC5INC40L3RgtC10YDRhNC10LnRgdGC0Y3QuSDRhdC+0LvQsdC+0YUg0LHQvtC70L7QvNC20YLQvtC5LiDQrdC90LPQuNC50L0g0LDQv9C/LdC0INGI0LDQsNGA0LTQu9Cw0LPQsNCz0q/QuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLRgtOp0YXTqdOp0YDTqdC80LbQuNC50L0g0LDQtNC80LjQvdGC0LDQuSDRhdCw0YDQuNC70YbQsNC9INKv0LnQu9GH0LvRjdGFIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLQkNC/0L8g0L3RjCBTdXJmYWNlRmxpbmdlciDQtNC+0L7QtC3RgtOp0LLRiNC40L3QuNC5INGE0YPQvdC60YbQuNC50LMg0LDRiNC40LPQu9Cw0YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ItCk0YDRjdC50Lwg0LHRg9GE0LXRgNGN0Y3RgSDRg9C90YjQuNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+ItCQ0L/QvyDQvdGMINGE0YDRjdC50Lwg0LHRg9GE0LXRgNGL0L0g0LrQvtC90YLQtdC90YLRi9CzINGD0L3RiNC40YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IklucHV0Rmxpbmdlci3RgiDRhdCw0L3QtNCw0LvRgiDRhdC40LnRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLQkNC/0L8t0LQgU3VyZmFjZUZsaW5nZXIg0LTQvtC+0LQt0YLSr9Cy0YjQvdC40Lkg0YTRg9C90LrRhtGD0YPQtNGL0LMg0LDRiNC40LPQu9Cw0YUg0LHQvtC70L7QvNC2INC+0LvQs9C+0L3Qvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IldpZmkg0LTRjdC70LPRjdGG0LjQudCzINGC0L7RhdC40YDRg9GD0LvQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4i0JDQv9C/INC90YwgV2lmaSDQtNGN0LvQs9GN0YbQuNC50LMg0YLQvtGF0LjRgNGD0YPQu9Cw0YUg0LHQvtC70L7QvSDRhdC+0LvQsdC+0LPQtNC+0YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV2lmaSDQtNGN0LvQs9GN0YbQuNC50LMg0YPQtNC40YDQtNCw0YUiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i0JDQv9C/INC90Ywg0LTRg9GD0L3RiyDRhdGN0LzQttGN0Y0sINGB0L/QuNC60LXRgNGL0L0g0LPQsNGA0LDQu9GC0LDQtCDQsNGI0LjQs9C70LDQs9C00LDRhSDQs9C70L7QsdCw0Lsg0LDRg9C00LjQviDRgtC+0YXQuNGA0LPQvtC+0LMg06nTqdGA0YfQu9Op0YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4i0LDRg9C00LjQviDQsdC40YfQuNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i0JDQv9C/INC90Ywg0LzQuNC60YDQvtGE0L7QvdC+0L7RgCDQsNGD0LTQuNC+INCx0LjRh9C40YUg0LHQvtC70L7QvNC20YLQvtC5LiDQrdC90Y0g0LfTqdCy0YjTqdOp0YDTqdC7INC90Ywg0LDQv9C/LdC0INGP0LzQsNGAINGHINKv0LXQtCDRgtCw0L3RiyDQt9Op0LLRiNOp06nRgNOp0LvQs9Kv0LnQs9GN0Y3RgCDQsNGD0LTQuNC+INCx0LjRh9C40YUg0LHQvtC70L7QvNC20LjQudCzINC+0LvQs9C+0L3Qvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+ItGB0LjQvCDRhdC+0LvQsdC+0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiLQkNC/0L8t0LQgU0lNINGA0q/SryDQutC+0LzQvNCw0L3QtCDQuNC70LPRjdGN0YXQuNC50LMg0LfTqdCy0YjTqdOp0YDQvdOpLiDQrdC90Y0g0LzQsNGIINCw0Y7Rg9C70YLQsNC5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+ItC30YPRgNCw0LMg0LDQstCw0YUg0LHQvtC70L7QvSDQstC40LTQtdC+INCx0LjRh9C40YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i0JDQv9C/INC90Ywg0LrQsNC80LXRgNCw0LDRgCDQt9GD0YDQsNCzINCw0LLQsNGFINCx0L7Qu9C+0L0g0LLQuNC00LXQviDQsdC40YfQuNGFINCx0L7Qu9C+0LzQttGC0L7QuS4g0K3QvdGNINC306nQstGI06nTqdGA06nQuyDQvdGMINCw0L/Qvy3QtCDRj9C80LDRgCDRhyDSr9C10LQg0YLQsNC90Ysg0LfTqdCy0YjTqdOp0YDTqdC70LPSr9C50LPRjdGN0YAg0LrQsNC80LXRgCDQsNGI0LjQs9C70LDRhSDQsdC+0LvQvtC80LbQuNC50LMg0L7Qu9Cz0L7QvdC+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ItC60LDQvNC10YAg0LDRiNC40LPQu9Cw0LYg0LHQsNC50YUg0q/QtdC0INC00LDQvNC20YPRg9C70LvRi9CzINC30LDQsNCz0YcgTEVELdCzINC40LTRjdCy0YXQs9Kv0Lkg0LHQvtC70LPQvtGFIjwvc3RyaW5nPgpAQCAtNzgzLDcgKzc5NCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sWWFob28iIG1zZ2lkPSI4MjcxNDM5NDA4NDY5MDIxMjczIj4iWWFob28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sU2t5cGUiIG1zZ2lkPSI5MDE5Mjk2NzQ0NjIyODMyOTUxIj4iU2t5cGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sUXEiIG1zZ2lkPSI4ODg3NDg0Mzc5NDk0MTExODg0Ij4iUVEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+ItCm0YPQs9C70LDRgNCw0LvRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xHb29nbGVUYWxrIiBtc2dpZD0iNDkzOTAyMzIxMTQwMjc3MzA0Ij4iSGFuZ291dHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSWNxIiBtc2dpZD0iMTU3NDg3MDQzMzYwNjUxNzMxNSI+IklDUSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xKYWJiZXIiIG1zZ2lkPSIyMjc5OTE3NjMwODc1NzcxNzIyIj4iSmFiYmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE5ldE1lZXRpbmciIG1zZ2lkPSI4Mjg3NjI1NjU1OTg2ODI3OTcxIj4iTmV0TWVldGluZyI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+ItCT0Y3RgNC40LnQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLQkNC20LvRi9C9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiLQkdGD0YHQsNC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+ItCt0L3RjSDRhdCw0YDQuNC70YbQsNCz0YfQuNC50LMg0YXQsNGA0LDRhSDQsNC/0L/Qu9C40LrQtdGI0L0g0L7Qu9C00YHQvtC90LPSr9C5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTiDQutC+0LTRi9CzINCx0LjRh9C90Y0g0q/SryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSy3QsyDQsdC40YfRjdGN0LQg0YjQuNC90Y0gUElOINC60L7QtCDQvtGA0YPRg9C70L3QsCDRg9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsg0LrQvtC0Ijwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4i0KjQuNGE0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLQntGA0YPRg9C70LDRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+ItCQ0L/QvyDRgdC+0L3Qs9C+0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+LdCzINGN0YXQu9Kv0q/Qu9C2INGH0LDQtNGB0LDQvdCz0q/QuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+ItCl0YPQstCw0LDQu9GG0LDRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+LdGC0LDQuSDRhdGD0LLQsNCw0LvRhtCw0L3QsCDRg9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+ItCR0LDRgNC40YPQu9GL0LMg0LPRg9C70YHRg9GD0LvQvdCwLiDQpdKv0YDRjdGN0LQg0YXSr9C70Y3RjdC90Y0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3QsyDQs9GD0LvRgdGD0YPQu9Cw0YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+INGF0LjQudGFINCx0L7QuyDQtNC+0L7RiCDQs9GD0LvRgdGD0YPQu9Cw0YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+INGF0LjQudGFINC30q/Sr9C90LvSr9KvINCz0YPQu9GB0YPRg9C70LDRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+INGF0LjQudGFINCx0L7QuyDQsdCw0YDRg9GD0L3Qu9GD0YMg0LPRg9C70YHRg9GD0LvQsNGFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i0KLQsNC50LvQsNGFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+ItCa0LDQvNC10YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i0KfQuNC80Y3RjdCz0q/QuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLQlNGD0YPQvdGD0YPQtCDQuNC00Y3QstGF0YLRjdC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLQpdCw0LnRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+ItCi0q/Qs9C20Y3RjdCzINGC0LDQudC70LDRhSDQsdC+0Lsg0YLQsNGC0L3QsCDRg9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+ItCd0YPRg9GGINKv0LPQvdC40Lkg0LTRg9GD0LTQu9Cw0LPRi9CzINGB0L7QvdGB0L7RhSDQsdC+0Lsg0YfQuNGF0Y3QstGH0LjQudCzINC30LDQu9Cz0LDQvdCwINGD0YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i0KbRjdCzLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+ItCh0LjRgdGC0LXQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i0JHQu9GO0YLSr9Kv0YIg0LDRg9C00LjQviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i0KPRgtCw0YHQs9Kv0Lkg0LTRjdC70LPRjdGGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+ItCU0YPRg9GB0YHQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i0JzQtdC00LjQsCDQs9Cw0YDQsNC70YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+ItCi06nRhdOp06nRgNOp0LzQttGC0Y3QuSDRhdC+0LvQsdC+0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLQlNGN0LvQs9GN0YbQuNC50LMg0YLTqdGF06nTqdGA06nQvNC2INGA0q/SryDQtNCw0LzQttGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLQotOp0YXTqdOp0YDTqdC80LbSr9Kv0LTQuNC50LMg0YXQsNC50LYg0LHQsNC50L3QsOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+ItCi0L7RhdC40YDQs9C+0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i0KHQsNC70LPQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+ItCh0LrQsNC9INGF0LjQudC2INCx0LDQudC90LAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLQpdC+0LvQsdC+0LPQtNC+0LYg0LHQsNC50L3QsC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i0JHQvtC70L7QvNC20YLQvtC5Ijwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i0JTQsNCy0YXQsNGA0LPQsCAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsINC90LDQudC00LLQsNGA0YLQsNC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLQo9GC0LDRgdCz0q/QuSDQtNGN0LvQs9GN0YYg0YXQvtC70LHQvtCz0LTQvtCyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+ItCt0L3RjSDQtNGN0LvQs9GN0YYg06nTqdGAINGC06nRhdOp06nRgNOp0LzQttC40LnQsyDRhdCw0YDRg9GD0LvQtiDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+ItCU0Y3Qu9Cz0Y3RhtC40LnQsyDQtNCw0LzQttGD0YPQu9C2INCx0LDQudC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4g0YDRg9GDINGF0L7Qu9Cx0L7Qs9C00L7QtiDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4i0JTRjdC70LPRjdGG0LjQudCzINC00LDQvNC20YPRg9C70LYg0LHQsNC50L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+INGA0YPRgyDRhdC+0LvQsdC+0LPQtNGB0L7QvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLQodCw0LvQs9Cw0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+ItCv0LDRgNCw0LvRgtCw0Lkg0LTRg9GD0LTQu9Cw0LPQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+ItCl0Y3RjdCzINC80LDRgNGC0YHQsNC9Ijwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU5LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNGL0L0g0LTQsNGA0LDQsCDQtNCw0YXQuNC9INC+0YDQvtC70LTQvtC90L4g0YPRgyI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLQlNCw0YDQsNCwINC00LDRhdC40L0g0L7RgNC+0LvQtNC+0L3QviDRg9GDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+ItCR0q/RgtGN0L0g0LTRjdC70LPRjdGG0Y3RjdGBINCz0LDRgNCw0YXRi9C9INGC0YPQu9C0INC00Y3RjdGA0Y3RjdGBINC90Ywg0Y3RhdC70Y3QvSDQtNC+0L7RiCDRiNGD0LTRgNCw0L3QsCDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLQkdKv0YLRjdC9INC00Y3Qu9Cz0Y3RhtGN0Y3RgSDQs9Cw0YDQsNGF0YvQvSDRgtGD0LvQtCDQtNGN0Y3RgNGN0Y3RgSDQvdGMINC00L7QvtGIINGI0YPQtNGA0LDQvdCwINGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLQlNGD0YPRgdGB0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+ItCm0LDQsyDQs9Kv0LnQu9Cz0Y3Qs9GHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLQnNC40L3Rg9GCINCz0q/QudC70LPRjdCz0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i0KbQsNCzINGB0L7QvdCz0L7QvdC+INGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLQnNC40L3Rg9GCINGB0L7QvdCz0L7QvdC+INGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+ItOo0LTRgNKv0q/QtNC40LnQsyDRgdCw0YDQsNCw0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLQltC40LvQuNC50L0g0LbQsNCz0YHQsNCw0LvRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i0KHQsNGAINCx0L7Qu9C+0L0g06nQtNGA0LjQudCzINGB0L7QvdCz0L7QvdC+INGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLQltC40LvQuNC50LMg0YHQvtC90LPQvtC90L4g0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4g0YHQvtC90LPQvtCz0LTRgdC+0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDRg9GB0YLRgdCw0L0iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKaW5kZXggODhkNzZlNy4uMTZiZTZkZSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlRhaXBrYW4gUFVLIHlhbmcgbWVtcHVueWFpIDggbm9tYm9yIGF0YXUgbGViaWggcGFuamFuZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iS2FkIFNJTSBhbmRhIGRpa3VuY2kgUFVLLiBUYWlwa2FuIGtvZCBQVUsgdW50dWsgbWVtYnVrYSBrdW5jaW55YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJUYWlwa2FuIFBVSzIgdW50dWsgbWVueWFoc2VrYXQga2FkIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJUaWRhayBiZXJqYXlhLCBkYXlha2FuIEt1bmNpIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IkFuZGEgbWVtcHVueWFpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJjdWJhYW4gbGFnaSBzZWJlbHVtIFNJTSBkaWt1bmNpLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IkFuZGEgbWVtcHVueWFpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJjdWJhYW4gbGFnaSBzZWJlbHVtIFNJTSBkaWt1bmNpLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSUQgUGVtYW5nZ2lsIE1hc3VrIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJNZW1iZW5hcmthbiBwZW1lZ2FuZyB0ZXJpa2F0IGRlbmdhbiBhbnRhcmEgbXVrYSBwZXJpbmdrYXQgdGVydGluZ2dpIGJhZ2kgcGVya2hpZG1hdGFuIFZwbi4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InRlcmlrYXQgcGFkYSBrZXJ0YXMgZGluZGluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgdGVyaWthdCBkZW5nYW4gYW50YXJhIG11a2EgcGVyaW5na2F0IHRlcnRpbmdnaSBiYWdpIGtlcnRhcyBkaW5kaW5nLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InRlcmlrYXQga2VwYWRhIHBhcGFyYW4gamF1aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBwYXBhcmFuIGphdWguIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InRlcmlrYXQga2VwYWRhIHBlcmtoaWRtYXRhbiB3aWRnZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgdGVyaWthdCBkZW5nYW4gYW50YXJhIG11a2EgcGVyaW5na2F0IHRlcnRpbmdnaSBiYWdpIHBlcmtoaWRtYXRhbiB3aWRnZXQuIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImJlcmludGVyYWtzaSBkZW5nYW4gcGVudGFkYmlyIHBlcmFudGkiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5nZ3VuYWthbiBjaXJpIHBlcmluZ2thdCByZW5kYWggU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4iYmFjYSBwZW5pbWJhbCBiaW5na2FpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIGthbmR1bmdhbiBwZW5pbWJhbCBiaW5na2FpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImFrc2VzIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2d1bmFrYW4gY2lyaSBwZXJpbmdrYXQgcmVuZGFoIElucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ImtvbmZpZ3VyYXNpa2FuIHBhcGFyYW4gV2lmaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5na29uZmlndXJhc2kgZGFuIG1lbnlhbWJ1bmcga2UgcGFwYXJhbiBXaWZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4ia2F3YWwgcGFwYXJhbiBXaWZpIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIHRldGFwYW4gYXVkaW8gZ2xvYmFsIHNlcGVydGkga2VsYW50YW5nYW4gZGFuIHBlbWJlc2FyIHN1YXJhIG1hbmEgZGlndW5ha2FuIHVudHVrIG91dHB1dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+InJha2FtIGF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lcmFrYW0gYXVkaW8gbWVuZ2d1bmFrYW4gbWlrcm9mb24uIEtlYmVuYXJhbiBpbmkgbWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lcmFrYW0gYXVkaW8gcGFkYSBiaWxhLWJpbGEgbWFzYSB0YW5wYSBwZW5nZXNhaGFuIGFuZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJrb211bmlrYXNpIHNpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5naGFudGFyIGFyYWhhbiBrZXBhZGEgU0lNLiBJbmkgYW1hdCBiZXJiYWhheWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4iYW1iaWwgZ2FtYmFyIGRhbiB2aWRlbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2FtYmlsIGdhbWJhciBkYW4gdmlkZW8gbWVuZ2d1bmFrYW4ga2FtZXJhLiBLZWJlbmFyYW4gaW5pIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5nZ3VuYWthbiBrYW1lcmEgcGFkYSBiaWxhLWJpbGEgbWFzYSB0YW5wYSBwZW5nZXNhaGFuIGFuZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4ibHVtcHVoa2FuIExFRCBwZW51bmp1ayBwZW5naGFudGFyYW4gc2VtYXNhIGthbWVyYSBzZWRhbmcgZGlndW5ha2FuIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iUnVtYWgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iS2VyamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IkxhaW4tbGFpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJUaWFkYSBhcGxpa2FzaSBkaXRlbXVpIHVudHVrIG1lbGloYXQga2VuYWxhbiBpbmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iVGFpcCBrb2QgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iVGFpcCBQVUsgZGFuIGtvZCBQSU4gYmFoYXJ1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJLb2QgUFVLIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJNYXN1ayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlBpbGloIGFwbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IlRpZGFrIGRhcGF0IG1lbGFuY2Fya2FuIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJLb25nc2kgZGVuZ2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IktvbmdzaSBkZW5nYW4gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJQZW1lZ2FuZyBnZWxvbmdzb3IuIFNlbnR1aCAmYW1wOyB0YWhhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iTHVuY3Vya2FuIGtlIGF0YXMgdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ikx1bmN1cmthbiBrZSBiYXdhaCB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iTHVuY3Vya2FuIGtlIGtpcmkgdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJMdW5jdXJrYW4ga2Uga2FuYW4gdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iQnVrYSBrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2VueWFwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkJ1bnlpIGRpaGlkdXBrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkNhcmlhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkxlcmV0IHVudHVrIG1lbWJ1a2Ega3VuY2kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlBhc2FuZ2thbiBzZXQga2VwYWxhIHVudHVrIG1lbmRlbmdhciBrZWt1bmNpIGthdGEgbGFsdWFuIGRpc2VidXRrYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iVGl0aWsuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJBdWRpbyBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlBhcGFyYW4gd2F5YXJsZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iU2VsZXNhaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik91dHB1dCBtZWRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iU2FtYnVuZyBrZSBwZXJhbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iSGFudGFyIHNrcmluIGtlIHBlcmFudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJNZW5jYXJpIHBlcmFudGkuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJUZXRhcGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IlB1dHVza2FuIHNhbWJ1bmdhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJNZW5naW1iYXPigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJNZW55YW1idW5nLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJUZXJzZWRpYSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlRpbmRpaCAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHNlbGFtYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IlBhcGFyYW4gd2F5YXJsZXMgZGlzYW1idW5na2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IlNrcmluIGluaSBkaXR1bmp1a2thbiBwYWRhIHBlcmFudGkgbGFpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJNZW5naGFudGFyIHNrcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iTWVueWFtYnVuZyBrZSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJNZW5naGFudGFyIHNrcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJEaXNhbWJ1bmdrYW4ga2UgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IlB1dHVzIHNhbWJ1bmdhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iUGFuZ2dpbGFuIGtlY2VtYXNhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+Ikx1cGEgQ29yYWsiPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTksMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iQ3ViYSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0IGxhZ2kiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iQ3ViYSBzZWJlbnRhciBsYWdpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkxlcmV0IGtlIGJhd2FoIHVudHVrIGtlbHVhciBkYXJpIHNrcmluIHBlbnVoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkxlcmV0IGtlIGJhd2FoIGRhcmkgYXRhcyB1bnR1ayBrZWx1YXIgZGFyaSBza3JpbiBwZW51aC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IlNlbGVzYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJQZW5nZ2VsYW5nc2FyIGJ1bGF0YW4gamFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJQZW5nZ2VsYW5nc2FyIGJ1bGF0YW4gbWluaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iUGlsaWggamFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iUGlsaWggbWluaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IkdyaWQgaGFyaSBidWxhbmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iU2VuYXJhaSB0YWh1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iUGlsaWggYnVsYW4gZGFuIGhhcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJQaWxpaCB0YWh1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gZGlwaWxpaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IGRpcGFkYW1rYW4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXMvZG9ub3R0cmFuc2xhdGUtY2xkci54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1zL2Rvbm90dHJhbnNsYXRlLWNsZHIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA3ZGE1YTcyLi4wMDAwMDAwCi0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXMvZG9ub3R0cmFuc2xhdGUtY2xkci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1lcmljX2RhdGVfdGVtcGxhdGUiPiIlcy8lcy8lcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1vbnRoX2RheV95ZWFyIj4lZCAlQiAlWTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9vZl9kYXkiPiUtbDolTTolUyAlcDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9hbmRfdGltZSI+JS1sOiVNOiVTICVwICVkICViICVZPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWUiPiUyJHMgJTEkczwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1zL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlmZTkzMC4uMDAwMDAwMAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1zL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCi0qKgotKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImJ5dGVTaG9ydCIgbXNnaWQ9IjgzNDA5NzM4OTI3NDIwMTkxMDEiPiJCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtpbG9ieXRlU2hvcnQiIG1zZ2lkPSI1OTczNzg5NzgzNTA0NzcxODc4Ij4iS0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWdhYnl0ZVNob3J0IiBtc2dpZD0iNjM1NTg1MTU3Njc3MDQyODkyMiI+Ik1CIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2lnYWJ5dGVTaG9ydCIgbXNnaWQ9IjMyNTk4ODI0NTUyMTIxOTMyMTQiPiJHQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRlcmFieXRlU2hvcnQiIG1zZ2lkPSIyMzE2MTMwMTgxNTkxODY5NjIiPiJUQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBldGFieXRlU2hvcnQiIG1zZ2lkPSI1NjM3ODE2NjgwMTQ0OTkwMjE5Ij4iUEIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmaWxlU2l6ZVN1ZmZpeCIgbXNnaWQ9IjkxNjQyOTI3OTE1MDA1MzE5NDkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRzPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDtUaWRhayBiZXJ0YWp1ayZndDsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpcyIgbXNnaWQ9Ijc4OTk4Mjk1MTYwNDg4MTMyMzciPiIuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpc190d29fZG90cyIgbXNnaWQ9IjEyMjgwNzg5OTQ4NjYwMzA3MzYiPiLigKUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbXB0eVBob25lTnVtYmVyIiBtc2dpZD0iNzY5NDA2MzA0MjA3OTY3NjUxNyI+IihUaWFkYSBub21ib3IgdGVsZWZvbikiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIoVGlkYWsgZGlrZXRhaHVpKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiJNZWwgc3VhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0TXNpc2RuQWxwaGFUYWciIG1zZ2lkPSIyODUwODg5NzU0OTE5NTg0Njc0Ij4iTVNJU0ROMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+Ik1hc2FsYWggc2FtYnVuZ2FuIGF0YXUga29kIE1NSSB0aWRhayBzYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtbWlGZG5FcnJvciIgbXNnaWQ9IjUyMjQzOTgyMTYzODUzMTY0NzEiPiJQZW5nZW5kYWxpYW4gZGloYWRrYW4ga2VwYWRhIG5vbWJvciBkYWlsYW4gdGV0YXAgc2FoYWphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkIiBtc2dpZD0iODE0NzI3ODM0NjQxNDcxNDMxNSI+IlBlcmtoaWRtYXRhbiB0ZWxhaCBkaWRheWFrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWRGb3IiIG1zZ2lkPSI2ODU2MjI4MTQwNDUzNDcxMDQxIj4iUGVya2hpZG1hdGFuIGRpZGF5YWthbiB1bnR1azoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRGlzYWJsZWQiIG1zZ2lkPSIxOTM3NTUzMjI2NTkyNTE2NDExIj4iUGVya2hpZG1hdGFuIHRlbGFoIGRpbHVtcHVoa2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VSZWdpc3RlcmVkIiBtc2dpZD0iNjI3NTAxOTA4MjU5ODEwMjQ5MyI+IlBlbmRhZnRhcmFuIGJlcmpheWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiJQZW1hZGFtYW4gYmVyamF5YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZEluY29ycmVjdCIgbXNnaWQ9Ijc2MTIyMDg4Mzk0NTAxMjg3MTUiPiJLYXRhIGxhbHVhbiBzYWxhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUNvbXBsZXRlIiBtc2dpZD0iODIzMjUyNzQ5NTQxMTY5ODM1OSI+Ik1NSSBzZWxlc2FpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhZFBpbiIgbXNnaWQ9IjkwMTUyNzc2NDU1NDY3MTAwMTQiPiJQSU4gbGFtYSB5YW5nIGFuZGEgdGFpcGthbiB0aWRhayBiZXR1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4iS29kIFBVSyB5YW5nIGFuZGEgdGFpcGthbiB0aWRhayBiZXR1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IlBJTiB5YW5nIGFuZGEgdGFpcCB0aWRhayBzZXBhZGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4iVGFpcGthbiBQSU4geWFuZyBtZW5nYW5kdW5naSA0IGhpbmdnYSA4IG5vbWJvci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlRhaXBrYW4gUFVLIHlhbmcgbWVtcHVueWFpIDggbm9tYm9yIGF0YXUgbGViaWggcGFuamFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iS2FkIFNJTSBhbmRhIGRpa3VuY2kgUFVLLiBUYWlwa2FuIGtvZCBQVUsgdW50dWsgbWVtYnVrYSBrdW5jaW55YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJUYWlwa2FuIFBVSzIgdW50dWsgbWVueWFoc2VrYXQga2FkIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IklEIFBlbWFuZ2dpbCBNYXN1ayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNsaXJNbWkiIG1zZ2lkPSI3Nzg0NjczNjczNDQ2ODMzMDkxIj4iSUQgUGVtYW5nZ2lsIEtlbHVhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNmTW1pIiBtc2dpZD0iNTEyMzIxODk4OTE0MTU3MzUxNSI+IlBlbWFqdWFuIHBhbmdnaWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+IlBhbmdnaWxhbiBtZW51bmdndSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkJhTW1pIiBtc2dpZD0iNDU1MTkzMDY3OTI2NzcwNTgxIj4iU2VrYXRhbiBwYW5nZ2lsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJQd2RNbWkiIG1zZ2lkPSI3MDQzNzE1Njg3OTA1MjU0MTk5Ij4iVHVrYXIga2F0YSBsYWx1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJQaW5NbWkiIG1zZ2lkPSIzMTEzMTE3NzgwMzYxMTkwMzA0Ij4iUGVudWthcmFuIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNuaXBNbWkiIG1zZ2lkPSIzMTEwNTM0NjgwNTU3ODU3MTYyIj4iTm9tYm9yIHBhbmdnaWxhbiBhZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+Ik5vbWJvciBwYW5nZ2lsYW4gdGVyaGFkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iVGhyZWVXQ01taSIgbXNnaWQ9IjkwNTEwNDcxNzAzMjExOTAzNjgiPiJQYW5nZ2lsYW4gdGlnYSBoYWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUnVhY01taSIgbXNnaWQ9Ijc4Mjc4ODc0NTkxMzgzMDg4ODYiPiJQZW5vbGFrYW4gcGFuZ2dpbGFuIG1lbmdnYW5nZ3UgeWFuZyB0aWRhayBkaWluZ2luaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNuZE1taSIgbXNnaWQ9IjMxMTY0NDYyMzcwODE1NzU4MDgiPiJQZW5naGFudGFyYW4gbm9tYm9yIHBhbmdnaWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkRuZE1taSIgbXNnaWQ9IjEyNjU0Nzg5MzI0MTgzMzQzMzEiPiJKYW5nYW4gZ2FuZ2d1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT24iIG1zZ2lkPSI0Mjk0MTU0MDkxNDU3ODE5MjMiPiJJRCBwZW1hbmdnaWwgc2VjYXJhIGxhbGFpbnlhIGRpdGV0YXBrYW4ga2VwYWRhIHRlcmhhZC4gUGFuZ2dpbGFuIHNldGVydXNueWE6IFRlcmhhZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T25OZXh0Q2FsbE9mZiIgbXNnaWQ9IjMwOTI5MTgwMDYwNzc4NjQ2MjQiPiJJRCBwZW1hbmdnaWwgc2VjYXJhIGxhbGFpbnlhIGRpdGV0YXBrYW4ga2VwYWRhIHRlcmhhZC4gUGFuZ2dpbGFuIHNldGVydXNueWE6IFRpZGFrIHRlcmhhZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPbiIgbXNnaWQ9IjYxNzk0MjUxODI4NTY0MTg0NjUiPiJJRCBwZW1hbmdnaWwgc2VjYXJhIGxhbGFpbnlhIGRpdGV0YXBrYW4ga2VwYWRhIHRpZGFrIHRlcmhhZC4gUGFuZ2dpbGFuIHNldGVydXNueWE6IFRlcmhhZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPZmYiIG1zZ2lkPSIyNTY3OTk4NjMzMTI0NDA4NTUyIj4iSUQgcGVtYW5nZ2lsIHNlY2FyYSBsYWxhaW55YSBkaXRldGFwa2FuIGtlcGFkYSB0aWRhayBkaWhhZGthbi4gUGFuZ2dpbGFuIHNldGVydXNueWE6IFRpZGFrIHRlcmhhZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VOb3RQcm92aXNpb25lZCIgbXNnaWQ9Ijg2MTQ4MzAxODA1MDg2ODY2NjYiPiJQZXJraGlkbWF0YW4geWFuZyB0aWRhayBkaXVudHVra2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJQZXJtYW5lbnQiIG1zZ2lkPSIzMzc3MzcxMTQ1OTI2ODM1NjcxIj4iQW5kYSB0aWRhayBib2xlaCBtZW5ndWJhaCB0ZXRhcGFuIElEIHBlbWFuZ2dpbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkQ2hhbmdlZFRpdGxlIiBtc2dpZD0iNTU5MjE4OTM5ODk1NjE4NzQ5OCI+IkFrc2VzIHRlcmhhZCBkaXViYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25EYXRhIiBtc2dpZD0iODY1Mzc5NDc4NDY5MDA2NTU0MCI+IlBlcmtoaWRtYXRhbiBkYXRhIGRpc2VrYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRW1lcmdlbmN5IiBtc2dpZD0iNjU4MTE2Mzc3OTA3MjgzMzY2NSI+IlBlcmtoaWRtYXRhbiBrZWNlbWFzYW4gZGlzZWthdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Ob3JtYWwiIG1zZ2lkPSI0OTUzODY3MDExMzg5NzUwNjczIj4iUGVya2hpZG1hdGFuIHN1YXJhIGRpc2VrYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsVm9pY2UiIG1zZ2lkPSIzMzk2OTYzNjUyMTA4MTUxMjYwIj4iU2VtdWEgcGVya2hpZG1hdGFuIHN1YXJhIGRpc2VrYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+IlBlcmtoaWRtYXRhbiBTTVMgZGlzZWthdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZURhdGEiIG1zZ2lkPSI5OTY2MzY0ODcxMDYxNzEzMjAiPiJQZXJraGlkbWF0YW4gc3VhcmEvZGF0YSBkaXNla2F0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IlBlcmtoaWRtYXRhbiBzdWFyYS9TTVMgZGlzZWthdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGwiIG1zZ2lkPSI1NjQzMDI4MjY0NDY2MDkyODIxIj4iU2VtdWEgcGVya2hpZG1hdGFuIHN1YXJhL2RhdGEvU01TIGRpc2VrYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4iU3VhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhIiBtc2dpZD0iODcyNDU2NzgyMDc3OTM3ODkzIj4iRGF0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0ZBWCIgbXNnaWQ9IjU1NjY2MjQ5OTg4NDA0ODY0NzUiPiJGQUtTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzU01TIiBtc2dpZD0iMjAxNTQ2MDM3MzcwMTUyNzQ4OSI+IlNNUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFBc3luYyIgbXNnaWQ9IjQ1MjM0NTQ3ODM0OTg1NTE0NjgiPiJUYWsgc2VnZXJhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFTeW5jIiBtc2dpZD0iNzUzMDAwMDUxOTY0NjA1NDc3NiI+IlBlbnllZ2VyYWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BhY2tldCIgbXNnaWQ9IjY5OTEwMDY1NTc5OTM0MjM0NTMiPiJCaW5na2lzYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQQUQiIG1zZ2lkPSIzMjM1MjU5MDg1NjQ4MjcxMDM3Ij4iUEFEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQwIiBtc2dpZD0iNzE3MDMzNTQ3MjE5ODY5NDk0NSI+IlBlbnVuanVrIFBlcmF5YXVhbiBEaWhpZHVwa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxIiBtc2dpZD0iNTMxNDg2MTUxOTc1MjUzODkyMiI+IlBlbnVuanVrIFBlcmF5YXVhbiBEaW1hdGlrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDIiIG1zZ2lkPSI4OTY5OTI5MDQ5MDgxMjY4MTE1Ij4iUGVudW5qdWsgUGVyYXlhdWFuIEJlcmtlbGlwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQzIiBtc2dpZD0iNTE0ODI1NTAyNzA0Mzk0MzMxNyI+IkRpIGx1YXIga2F3YXNhbiBrZWppcmFuYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDQiIG1zZ2lkPSI4ODA4NDU2NjgyNTUwNzk2NTMwIj4iRGkgbHVhciBCYW5ndW5hbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NSIgbXNnaWQ9Ijc2MDQwNjMyNTI4NTAzNTQzNTAiPiJQZXJheWF1YW4gLSBTaXN0ZW0gRGl1dGFtYWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NiIgbXNnaWQ9IjIwNTk0NDA4MjU3ODI4NzE1MTMiPiJQZXJheWF1YW4gLSBTaXN0ZW0gVGVyc2VkaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDciIG1zZ2lkPSI3MTEyMDc4NzI0MDk3MjMzNjA1Ij4iUGVyYXlhdWFuIC0gUmFrYW4gS29uZ3NpIEdhYnVuZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ4IiBtc2dpZD0iNTk4OTU2OTc3ODYwNDA4OTI5MSI+IlBlcmF5YXVhbiAtIFJha2FuIEtvbmdzaSBQcmVtaXVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ5IiBtc2dpZD0iNzk2OTI5NjgxMTM1NTE1MjQ5MSI+IlBlcmF5YXVhbiAtIEtlZnVuZ3NpYW4gUGVya2hpZG1hdGFuIFBlbnVoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMCIgbXNnaWQ9IjM5OTI5MDY5OTk4MTUzMTY0MTciPiJQZXJheWF1YW4gLSBLZWZ1bmdzaWFuIFBlcmtoaWRtYXRhbiBTZXBhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDExIiBtc2dpZD0iNDE1NDQ3Njg1NDQyNjkyMDk3MCI+IlNlcGFuZHVrIFBlcmF5YXVhbiBEaWhpZHVwa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMiIgbXNnaWQ9IjExODkwNzExMTk5OTI3MjYzMjAiPiJTZXBhbmR1ayBQZXJheWF1YW4gRGltYXRpa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHRTZWFyY2hpbmciIG1zZ2lkPSI4MzYwMTQxODg1OTcyMjc5OTYzIj4iTWVuY2FyaSBQZXJraGlkbWF0YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlTm90Rm9yd2FyZGVkIiBtc2dpZD0iMTY4MzY4NTg4Mzg0MTI3MjU2MCI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBUaWRhayBkaW1hanVrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkIiBtc2dpZD0iMTMwMjkyMjExNzQ5ODU5MDUyMSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkVGltZSIgbXNnaWQ9IjkyMDYyNTE3MzY1MjcwODUyNTYiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+IHNlbGVwYXMgPHhsaWZmOmcgaWQ9IlRJTUVfREVMQVkiPnsyfTwveGxpZmY6Zz4gc2FhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkIiBtc2dpZD0iNTA3MzIzNzgyNzYyMDE2NjI4NSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBUaWRhayBkaW1hanVrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlUmVnaXN0ZXJlZFRpbWUiIG1zZ2lkPSI2NzgxNjIxOTY0MzIwNjM1MTcyIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IFRpZGFrIGRpbWFqdWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZjQ29tcGxldGUiIG1zZ2lkPSIzMTE4ODQ4MjMwOTY2ODg2NTc1Ij4iS29kIGNpcmkgc2VsZXNhaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmY0Vycm9yIiBtc2dpZD0iMzMyNzU2MDEyNjU4ODUwMDc3NyI+Ik1hc2FsYWggc2FtYnVuZ2FuIGF0YXUga29kIGNpcmkgdGlkYWsgc2FoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvck9rIiBtc2dpZD0iMTE5MTkxOTM3ODA4MzQ3MjIwNCI+Ik9LIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yIiBtc2dpZD0iNzk1NjM5MjUxMTE0NjY5ODUyMiI+IkJlcmxha3UgcmFsYXQgcmFuZ2thaWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiJUaWRhayBtZW5lbXVpIFVSTC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JVbnN1cHBvcnRlZEF1dGhTY2hlbWUiIG1zZ2lkPSI2Mjk5OTgwMjgwNDQyMDc2Nzk5Ij4iU2tlbWEgcGVuZ2VzYWhhbiB0YXBhayB0aWRhayBkaXNva29uZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+IlRpZGFrIGRhcGF0IG1lbmdlc2Foa2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclByb3h5QXV0aCIgbXNnaWQ9IjE3ODgyMDcwMTA1NTkwODEzMzEiPiJQZW5nZXNhaGFuIG1lbGFsdWkgcGVsYXlhbiBwcm9rc2kgdGlkYWsgYmVyamF5YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JDb25uZWN0IiBtc2dpZD0iODcxNDI3MzIzNjM2NDY0MDU0OSI+IlRpZGFrIGRhcGF0IG1lbnlhbWJ1bmcga2UgcGVsYXlhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JJTyIgbXNnaWQ9IjIzNDA1NTgxOTc0ODkzMDIxODgiPiJUaWRhayBkYXBhdCBiZXJrb211bmlrYXNpIGRlbmdhbiBwZWxheWFuLiBDdWJhIHNlYmVudGFyIGxhZ2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVGltZW91dCIgbXNnaWQ9IjQ3NDM0MDM3MDM3NjI4ODM5NTQiPiJTYW1idW5nYW4ga2UgcGVsYXlhbiB0YW1hdCBtYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclJlZGlyZWN0TG9vcCIgbXNnaWQ9Ijg2Nzk1OTYwOTAzOTI3Nzk1MTYiPiJIYWxhbWFuIGluaSBtZW5nYW5kdW5naSB0ZXJsYWx1IGJhbnlhayBwZW5ndWJhaGhhbGFhbiBwZWxheWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkU2NoZW1lIiBtc2dpZD0iNTAxNTczMDgxMjkwNjE5MjIwOCI+IlByb3Rva29sIHRpZGFrIGRpc29rb25nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZhaWxlZFNzbEhhbmRzaGFrZSIgbXNnaWQ9Ijk2NTQ5NjA2MDAwNjU4NjQxIj4iVGlkYWsgZGFwYXQgbWV3dWp1ZGthbiBzYW1idW5nYW4gc2VsYW1hdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4iVGlkYWsgZGFwYXQgbWVtYnVrYSBoYWxhbWFuIGtlcmFuYSBVUkwgdGlkYWsgc2FoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZpbGUiIG1zZ2lkPSIyMTcwNzg4NTE1MDUyNTU4Njc2Ij4iVGlkYWsgZGFwYXQgbWVuZ2Frc2VzIGZhaWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZU5vdEZvdW5kIiBtc2dpZD0iNjIwMzg1NjYxMjA0MjY1NTA4NCI+IlRpZGFrIG1lbmVtdWkgZmFpbCB5YW5nIGRpbWludGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVG9vTWFueVJlcXVlc3RzIiBtc2dpZD0iMTIzNTM5NjkyNzA4NzE4ODI1MyI+IlRlcmxhbHUgYmFueWFrIHBlcm1pbnRhYW4gc2VkYW5nIGRpcHJvc2VzLiBDdWJhIHNlYmVudGFyIGxhZ2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODk2NzcxMDAyNTAzNjE2MzgyMiI+IlJhbGF0IGxvZyBtYXN1ayB1bnR1ayA8eGxpZmY6ZyBpZD0iQUNDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVN5bmMiIG1zZ2lkPSI4MzUzNTIzMDYwMjY5MzM1NjY3Ij4iUGVueWVnZXJha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIG1zZ2lkPSIzOTc3NDMzNDkxOTE5MDE0NTgiPiJQZW55ZWdlcmFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVRvb01hbnlEZWxldGVzTm90aWZpY2F0aW9uRGVzYyIgbXNnaWQ9IjgxMDA5ODE0MzUwODA2OTY0MzEiPiJUZXJsYWx1IGJhbnlhayBwZW1hZGFtYW4gPHhsaWZmOmcgaWQ9IkNPTlRFTlRfVFlQRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY0OTQwMTkyMzQxMDIxNTQ4OTYiPiJTdG9yYW4gdGFibGV0IHBlbnVoLiBQYWRhbWthbiBiZWJlcmFwYSBmYWlsIHVudHVrIG1lbmdvc29uZ2thbiBydWFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ3NTk5OTI4NjY4MDAwMDU0MSI+IlN0b3JhbiB0ZWxlZm9uIHBlbnVoLiBQYWRhbWthbiBiZWJlcmFwYSBmYWlsIHVudHVrIG1lbmdvc29uZ2thbiBydWFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZSIgbXNnaWQ9IjY1NDU2OTYwMDc2MzE0MDQyOTIiPiJTYXlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTQ1MzUxNDIwODY1MjAyODUzIj4iUGlsaWhhbiB0YWJsZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzE5OTE5MDc1NDYzOTg4NjM4Ij4iUGlsaWhhbiB0ZWxlZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGUiIG1zZ2lkPSI3MTY3NzAzMzg5ODAyNjE4NjYzIj4iTW9kIHNlbnlhcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InR1cm5fb25fcmFkaW8iIG1zZ2lkPSIzOTEyNzkzMDkyMzM5OTYyMzcxIj4iSGlkdXBrYW4gd2F5YXJsZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0dXJuX29mZl9yYWRpbyIgbXNnaWQ9IjgxOTg3ODQ5NDk5ODcwNjIzNDYiPiJNYXRpa2FuIHdheWFybGVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2xvY2siIG1zZ2lkPSI3OTkwOTQ2NTU0OTYwOTgxNTMiPiJLdW5jaSBza3JpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvd2VyX29mZiIgbXNnaWQ9IjQyNjY2MTQxMDc0MTI4NjUwNDgiPiJNYXRpa2FuIGt1YXNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfc2lsZW50IiBtc2dpZD0iMzE5Mjk4MTYzMDE4NDczMDc4Ij4iUGVuZGVyaW5nIGRpbWF0aWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3ZpYnJhdGUiIG1zZ2lkPSI3MDcyMDQzMzg4NTgxNTUxMzk1Ij4iUGVuZGVyaW5nIGJlcmdldGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfcmluZyIgbXNnaWQ9Ijg1OTIyNDE4MTYxOTQwNzQzNTMiPiJQZW5kZXJpbmcgZGloaWR1cGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX3Byb2dyZXNzIiBtc2dpZD0iMjI4MTA3OTI1NzMyOTk4MTIwMyI+Ik1lbWF0aWthbi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMzODU3NDUxNzk1NTU3MzE0NzAiPiJUYWJsZXQgYW5kYSBha2FuIGRpbWF0aWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQ5NzkyMTc1MjQyODIxMzUzIj4iVGVsZWZvbiBhbmRhIGFrYW4gZGltYXRpa2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm1fcXVlc3Rpb24iIG1zZ2lkPSIyOTA2NTQ0NzY4ODgxMTM2MTgzIj4iQWRha2FoIGFuZGEgbWFodSBtZW51dHVwPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV90aXRsZSIgbXNnaWQ9IjcwNTQ1MDk5MTQ1MDAxNDAzNjEiPiJCdXQgc2VtdWxhIGtlIG1vZCBzZWxhbWF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX2NvbmZpcm0iIG1zZ2lkPSI1NTI5Mzk0NDUwMjc4NDY2OCI+IkFkYWthaCBhbmRhIG1haHUgYnV0IHNlbXVsYSBrZSBkYWxhbSBtb2Qgc2VsYW1hdD8gSW5pIGFrYW4gbWVsdW1wdWhrYW4gc2VtdWEgYXBsaWthc2kgcGloYWsga2V0aWdhIHlhbmcgdGVsYWggYW5kYSBwYXNhbmcuIFNlbXVhIGFwbGlrYXNpIGl0dSBha2FuIGRpcHVsaWhrYW4gc2VtdWxhIGFwYWJpbGEgYW5kYSBtZW1idXQgc2VtdWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiJCYXJ1LWJhcnUgaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+IlRpYWRhIGFwbCB0ZXJiYWhhcnUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDA4NDc3MTQwMDg4MDUzNjY1Ij4iUGlsaWhhbiB0YWJsZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiJQaWxpaGFuIHRlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2siIG1zZ2lkPSIyODQ0OTQ1MTkxNzkyMTE5NzEyIj4iS3VuY2kgc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3Bvd2VyX29mZiIgbXNnaWQ9IjQ0NzE4Nzk0NDA4Mzk4Nzk3MjIiPiJNYXRpa2FuIGt1YXNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9idWdfcmVwb3J0IiBtc2dpZD0iNzkzNDAxMDU3ODkyMjMwNDc5OSI+IkxhcG9yYW4gcGVwaWphdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF90aXRsZSIgbXNnaWQ9IjI2Njc0OTQ4MDM3NDI1NDg1MzMiPiJBbWJpbCBsYXBvcmFuIHBlcGlqYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSIgbXNnaWQ9IjM5ODQ0NzA0ODc1MDM1MDQ1NiI+IkluaSBha2FuIG1lbmd1bXB1bCBtYWtsdW1hdCB0ZW50YW5nIGtlYWRhYW4gcGVyYW50aSBzZW1hc2EgYW5kYSB1bnR1ayBkaWhhbnRhcmthbiBzZWJhZ2FpIG1lc2VqIGUtbWVsLiBQcm9zZXMgaW5pIGFrYW4gbWVuZ2FtYmlsIHNlZGlraXQgbWFzYSBiZXJtdWxhIGRhcmkgbGFwb3JhbiBwZXBpamF0IHNlaGluZ2dhIHNpYXAgdW50dWsgZGloYW50YXI7IGphZGkgZGloYXJhcCBiZXJzYWJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3RvZ2dsZV9zaWxlbnRfbW9kZSIgbXNnaWQ9IjgyMTk1MjUzNDQyNDY4MTA5MjUiPiJNb2Qgc2VueWFwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIzMjg5ODQxOTM3MDAzNzU4ODA2Ij4iQnVueWkgRElNQVRJS0FOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iMTUwNjA0NjU3OTE3NzA2NjQxOSI+IkJ1bnlpIERJSElEVVBLQU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc190b2dnbGVfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjU4ODQzMzAzMDY5MjYzMDc0NTYiPiJNb2QgcGVzYXdhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMjcxOTU1Nzk4MjYwODkxOTc1MCI+Ik1vZCBQZXNhd2F0IERJSElEVVBLQU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4iTW9kIFBlc2F3YXQgRElNQVRJS0FOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iTW9kIHNlbGFtYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTaXN0ZW0gQW5kcm9pZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jb3N0TW9uZXkiIG1zZ2lkPSI1NDI5ODA4MjE3ODYxNDYwNDAxIj4iUGVya2hpZG1hdGFuIHlhbmcgYW5kYSBwZXJsdSBiYXlhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+Ik1lbGFrdWthbiBwZXJrYXJhIHlhbmcgYm9sZWggbWVuZ2VuYWthbiBiYXlhcmFuIGtlcGFkYSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9tZXNzYWdlcyIgbXNnaWQ9Ijc1MjEyNDkxNDg0NDU0NTY2NjIiPiJNZXNlaiBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19tZXNzYWdlcyIgbXNnaWQ9Ijc4MjE5OTkwNzEwMDM2OTkyMzYiPiJNZW1iYWNhIGRhbiBtZW51bGlzIFNNUywgZS1tZWwsIGRhbiBtZXNlaiBsYWluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9wZXJzb25hbEluZm8iIG1zZ2lkPSIzNTE5MTYzMTQxMDcwNTMzNDc0Ij4iTWFrbHVtYXQgcGVyaWJhZGkgYW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGVyc29uYWxJbmZvIiBtc2dpZD0iODQyNjQ1MzEyOTc4ODg2MTMzOCI+IkFrc2VzIGxhbmdzdW5nIGtlIG1ha2x1bWF0IHRlbnRhbmcgYW5kYSwgeWFuZyBkaXNpbXBhbiBwYWRhIGthZCBrZW5hbGFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NvY2lhbEluZm8iIG1zZ2lkPSI1Nzk5MDk2NjIzNDEyMDQzNzkxIj4iTWFrbHVtYXQgc29zaWFsIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NvY2lhbEluZm8iIG1zZ2lkPSI3MTI5ODQyNDU3NjExNjQzNDkzIj4iQWtzZXMgbGFuZ3N1bmcga2UgbWFrbHVtYXQgdGVudGFuZyBrZW5hbGFuIGFuZGEgZGFuIHNhbWJ1bmdhbiBzb3NpYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2xvY2F0aW9uIiBtc2dpZD0iNjM1MTQ5NzQyNDM2NjkyMDQ5Ij4iTG9rYXNpIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2xvY2F0aW9uIiBtc2dpZD0iNTcwNDY3OTc2MzEyNDE3MDEwMCI+IlBhbnRhdSBsb2thc2kgZml6aWthbCBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9uZXR3b3JrIiBtc2dpZD0iNTgwODk4MzM3NzcyNzEwOTgzMSI+IktvbXVuaWthc2kgcmFuZ2thaWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+IkFrc2VzIHBlbGJhZ2FpIGNpcmkgcmFuZ2thaWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iMTU4NTQwMzU0NDE2MjEyODEwOSI+IkJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjU2MjUyODg1NzcxNjQyODIzOTEiPiJBa3NlcyBwZXJhbnRpIGRhbiByYW5na2FpYW4gbWVsYWx1aSBCbHVldG9vdGguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI4MzI5MjYxNjcwMTUxODcxMjM1Ij4iVGV0YXBhbiBBdWRpbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjI2NDE1MTU0MDMzNDc1NjgxMzAiPiJUdWthciB0ZXRhcGFuIGF1ZGlvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjYyMDkyNDY2NTM0MjQ3OTgwMzMiPiJNZW5qZWphc2thbiBCYXRlcmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjQ0MTI3NTMyMDYzODkxNjk0NyI+Ikd1bmFrYW4gY2lyaSB5YW5nIGJvbGVoIG1lbmdoYWJpc2thbiBiYXRlcmkgZGVuZ2FuIGNlcGF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jYWxlbmRhciIgbXNnaWQ9IjU4NjM1MDg0Mzc3ODM2ODM5MDIiPiJLYWxlbmRhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FsZW5kYXIiIG1zZ2lkPSI1Nzc3NTM0MzE2OTgyMTg0NDE2Ij4iQWtzZXMgbGFuZ3N1bmcga2Uga2FsZW5kYXIgZGFuIGFjYXJhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaWN0aW9uYXJ5IiBtc2dpZD0iNDE0ODU5NzEyODg0MzY0MTM3OSI+IkJhY2EgS2FtdXMgUGVuZ2d1bmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RpY3Rpb25hcnkiIG1zZ2lkPSI3OTIxMTY2MzU1OTY0NzY0NDkwIj4iQmFjYSBwZXJrYXRhYW4gZGkgZGFsYW0ga2FtdXMgcGVuZ2d1bmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgwOTAyMzc3MDI0MzI1NzY3ODgiPiJUdWxpcyBLYW11cyBQZW5nZ3VuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjcxMTU2MTk5NDQ5NzM2MTY0NiI+IlRhbWJhaCBwZXJrYXRhYW4ga2Uga2FtdXMgcGVuZ2d1bmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Jvb2ttYXJrcyIgbXNnaWQ9IjE5NDk1MTk2NzMxMDM5NjgyMjkiPiJQZW5hbmRhIGhhbGFtYW4gZGFuIFNlamFyYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Jvb2ttYXJrcyIgbXNnaWQ9IjQxNjk3NzE2MDYyNTc5NjMwMjgiPiJBa3NlcyBsYW5nc3VuZyBrZSBwZW5hbmRhIGhhbGFtYW4gZGFuIHNlamFyYWggcGVueWVtYWsgaW1iYXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmljZUFsYXJtcyIgbXNnaWQ9IjYxMTc3MDQ2Mjk3Mjg4MjQxMDEiPiJQZW5nZ2VyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNDc2OTM1NjM2MjI1MTY0MTE3NSI+IlRldGFwa2FuIGphbSBwZW5nZ2VyYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfdm9pY2VtYWlsIiBtc2dpZD0iNDE2MjIzNzE0NTAyNzU5MjEzMyI+Ik1lbCBzdWFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfdm9pY2VtYWlsIiBtc2dpZD0iMjQ5ODQwMzk2OTg2Mjk1MTM5MyI+IkFrc2VzIGxhbmdzdW5nIGtlIG1lbCBzdWFyYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWljcm9waG9uZSIgbXNnaWQ9IjE3MTUzOTkwMDI1MDA0MzQ2NCI+Ik1pa3JvZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19taWNyb3Bob25lIiBtc2dpZD0iNzEwNjYxODI4NjkwNTczODQwOCI+IkFrc2VzIGxhbmdzdW5nIGtlIG1pa3JvZm9uIHVudHVrIG1lcmFrYW0gYXVkaW8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbWVyYSIgbXNnaWQ9IjQ4MjAzNzI0OTU4OTQ1ODY2MTUiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbWVyYSIgbXNnaWQ9IjI5MzM2NjczNzIyODk1Njc3MTQiPiJBa3NlcyBsYW5nc3VuZyBrZSBrYW1lcmEgdW50dWsgbWVyYWthbSBpbWVqIGF0YXUgdmlkZW8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NjcmVlbmxvY2siIG1zZ2lkPSI4Mjc1NTAwMTczMzMwNzE4MTY4Ij4iS3VuY2kgc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NjcmVlbmxvY2siIG1zZ2lkPSI3MDY3NDk3MTI4OTI1NDk5NDAxIj4iS2V1cGF5YWFuIHVudHVrIG1lbXBlbmdhcnVoaSBrZWxha3VhbiBza3JpbiBrdW5jaSBwYWRhIHBlcmFudGkgYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXBwSW5mbyIgbXNnaWQ9IjgwMjg3ODk3NjI2MzQxNDc3MjUiPiJNYWtsdW1hdCBhcGxpa2FzaSBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hcHBJbmZvIiBtc2dpZD0iMzk1MDM3ODUzODA0OTYyNTkwNyI+IktldXBheWFhbiB1bnR1ayBtZW1wZW5nYXJ1aGkgdGluZ2thaCBsYWt1IGFwbGlrYXNpIGxhaW4gcGFkYSBwZXJhbnRpIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dhbGxwYXBlciIgbXNnaWQ9IjM4NTAyODAxNTgwNDExNzU5OTgiPiJLZXJ0YXMgZGluZGluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd2FsbHBhcGVyIiBtc2dpZD0iNTYzMDQxNzg1NDc1MDU0MDE1NCI+IlR1a2FyIHRldGFwYW4ga2VydGFzIGRpbmRpbmcgcGVyYW50aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3lzdGVtQ2xvY2siIG1zZ2lkPSI0MDY1MzU3NTkyMzY2MTI5OTIiPiJKYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbUNsb2NrIiBtc2dpZD0iMzk0NDM1OTgzMzYyNDA5NDk5MiI+IlR1a2FyIG1hc2EgcGVyYW50aSBhdGF1IHpvbiBtYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdGF0dXNCYXIiIG1zZ2lkPSIyMDk1ODYyNTY4MTEzOTQ1Mzk4Ij4iQmFyIFN0YXR1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iNjI0MjU5MzQzMjIyNjgwNzE3MSI+IlR1a2FyIHRldGFwYW4gYmFyIHN0YXR1cyBwZXJhbnRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeW5jU2V0dGluZ3MiIG1zZ2lkPSIzMzQxOTkwOTg2MTQ3ODI2NTQxIj4iVGV0YXBhbiBQZW55ZWdlcmFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5bmNTZXR0aW5ncyIgbXNnaWQ9Ijc2MDMxOTUyNjUxMjkwMzE3OTciPiJBa3NlcyBrZSB0ZXRhcGFuIHNlZ2VyYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjb3VudHMiIG1zZ2lkPSIzMzU5NjQ2MjkxMTI1MzI1NTE5Ij4iQWthdW4gYW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjb3VudHMiIG1zZ2lkPSI0OTQ4NzMyNjQxODI3MDkxMzEyIj4iQWtzZXMgYWthdW4geWFuZyB0ZXJzZWRpYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9Ijc5OTgyMTQ5Njg3OTE1OTkzMjYiPiJLYXdhbGFuIHBlcmtha2FzYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2hhcmR3YXJlQ29udHJvbHMiIG1zZ2lkPSI0MzU3MDU3ODYxMjI1NDYyNzAyIj4iQWtzZXMgbGFuZ3N1bmcga2VwYWRhIHBlcmtha2FzYW4gcGFkYSBzZXQgdGFuZ2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9waG9uZUNhbGxzIiBtc2dpZD0iOTA2NzE3Mzk4ODMyNTg2NTkyMyI+IlBhbmdnaWxhbiB0ZWxlZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19waG9uZUNhbGxzIiBtc2dpZD0iNzQ4OTcwMTYyMDQ0NjE4Mzc3MCI+Ik1lbWFudGF1LCBtZXJla29ka2FuIGRhbiBtZW1wcm9zZXMgcGFuZ2dpbGFuIHRlbGVmb24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbVRvb2xzIiBtc2dpZD0iNDY1MjE5MTY0NDA4MjcxNDA0OCI+IkFsYXRhbiBzaXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbVRvb2xzIiBtc2dpZD0iODE2MjEwMjYwMjE5MDczNDMwNSI+IkFrc2VzIGRhbiBrYXdhbGFuIHBlcmluZ2thdCBsZWJpaCByZW5kYWggYmFnaSBzaXN0ZW0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSIzNDQ2MTY0NTg0NzEwNTk2NTEzIj4iQWxhdGFuIHBlbWJhbmd1bmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iNzA1ODgyODAzMjM1ODE0MjAxOCI+IkNpcmkgaGFueWEgZGlwZXJsdWthbiB1bnR1ayBwZW1iYW5ndW4gYXBsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+IkFwbGlrYXNpIFVJIExhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4iTWVtcGVuZ2FydWhpIFVJIGFwbGlrYXNpIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0b3JhZ2UiIG1zZ2lkPSIxOTcxMTE4NzcwNTQ2MzM2OTY2Ij4iU3RvcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiJBa3NlcyBzdG9yYW4gVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiJBa3NlcyBrYWQgU0QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiJDaXJpIGtlYm9sZWhha3Nlc2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI0MjA1MTk2ODgxNjc4MTQ0MzM1Ij4iQ2lyaSB5YW5nIGJvbGVoIGRpbWludGEgb2xlaCB0ZWtub2xvZ2kgYmFudHVhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM5MDE3MTc5MzY5MzAxNzAzMjAiPiJEYXBhdGthbiBrZW1iYWxpIGthbmR1bmdhbiB0ZXRpbmdrYXAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzc3MjIyNTAwODYwNTMxMDY3MiI+IlBlcmlrc2Ega2FuZHVuZ2FuIHRldGluZ2thcCB5YW5nIGJlcmludGVyYWtzaSBkZW5nYW4gYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+IkhpZHVwa2FuIEplbGFqYWggbWVsYWx1aSBTZW50dWhhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiJJdGVtIHlhbmcgZGlzZW50dWggYWthbiBkaXNlYnV0IGRlbmdhbiBrdWF0IGRhbiBza3JpbiBib2xlaCBkaWplbGFqYWggbWVuZ2d1bmFrYW4gZ2VyYWsgaXN5YXJhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNzM5ODgxNzY2NTIyNTk0MDczIj4iSGlkdXBrYW4ga2Vib2xlaGNhcGFpYW4gd2ViIGRpcGVydGluZ2thdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iNzg4MTA2Mzk2MTUwNzUxMTc2NSI+IlNrcmlwIGJvbGVoIGRpcGFzYW5nIHVudHVrIG1lbmphZGlrYW4ga2FuZHVuZ2FuIGFwbCBsZWJpaCBtdWRhaCBkaWFrc2VzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9IjIxMDM0NDAzOTE5MDI0MTIxNzQiPiJQZXJoYXRpa2FuIHRla3MgeWFuZyBhbmRhIHRhaXAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJCZXJzZXJ0YSBkYXRhIHBlcmliYWRpIHNlcGVydGkgbm9tYm9yIGthZCBrcmVkaXQgZGFuIGthdGEgbGFsdWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+Imx1bXB1aGthbiBhdGF1IHViYWggc3VhaSBiYXIgc3RhdHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+Ik1lbWJlbmFya2FuIGFwbCBtZWx1bXB1aGthbiBiYXIgc3RhdHVzIGF0YXUgbWVuYW1iYWggZGFuIG1lbmdhbGloIGtlbHVhciBpa29uIHNpc3RlbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MjQ3MjgxOTExMzg3OTMxNDg1Ij4iYmFyIHN0YXR1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MTYxMTM2NjA3OTU5NzYwNjAiPiJNZW1iZW5hcmthbiBhcGwgbWVuamFkaSBiYXIgc3RhdHVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iMTE0ODE5ODc4NTkzNzQ4OTI2NCI+ImtlbWJhbmdrYW4vcnVudHVoa2FuIGJhciBzdGF0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSI2OTE3NTQ5NDM3MTI5NDAxMTMyIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmdlbWJhbmdrYW4gYXRhdSBtZXJ1bnR1aGthbiBiYXIgc3RhdHVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSIzOTA2MDA3ODMxMTkyOTkwOTQ2Ij4idHVrYXIgbGFsdWFuIHBhbmdnaWxhbiBrZWx1YXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjUzMzEzMTg5MzE5Mzc0MDIwNDAiPiJNZW1iZW5hcmthbiBhcGwgbWVtcHJvc2VzIHBhbmdnaWxhbiBrZWx1YXIgZGFuIG1lbnVrYXIgbm9tYm9yIHlhbmcgcGVybHUgZGlkYWlsLiBLZWJlbmFyYW4gaW5pIG1lbWJvbGVoa2FuIGFwbCBtZW1hbnRhdSwgbWVuZ2FsaWggYXRhdSBtZW5naGFsYW5nIHBhbmdnaWxhbiBrZWx1YXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+InRlcmltYSBtZXNlaiB0ZWtzIChTTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiJNZW1iZW5hcmthbiBhcGwgbWVuZXJpbWEgZGFuIG1lbXByb3NlcyBtZXNlaiBTTVMuIEluaSBiZXJtYWtuYSBhcGwgYm9sZWggbWVtYW50YXUgYXRhdSBtZW1hZGFtIG1lc2VqIHlhbmcgZGloYW50YXIga2UgcGVyYW50aSBhbmRhIHRhbnBhIG1lbnVuanVra2FubnlhIGtlcGFkYSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZU1tcyIgbXNnaWQ9IjE4MjEzMTczNDQ2NjgyNTcwOTgiPiJ0ZXJpbWEgbWVzZWogdGVrcyAoTU1TKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVNbXMiIG1zZ2lkPSI1MzMwMTk0MzcyNjMyMTIyNjAiPiJNZW1iZW5hcmthbiBhcGwgbWVuZXJpbWEgZGFuIG1lbXByb3NlcyBtZXNlaiBNTVMuIEluaSBiZXJtYWtuYSBhcGwgYm9sZWggbWVtYW50YXUgYXRhdSBtZW1hZGFtIG1lc2VqIHlhbmcgZGloYW50YXIga2UgcGVyYW50aSBhbmRhIHRhbnBhIG1lbnVuanVra2FubnlhIGtlcGFkYSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9IjE4MDM0Nzc2NjA4NDYyODgwODkiPiJ0ZXJpbWEgc2lhcmFuIGtlY2VtYXNhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZXJpbWEgZGFuIG1lbXByb3NlcyBtZXNlaiBzaWFyYW4ga2VjZW1hc2FuLiBLZWJlbmFyYW4gaW5pIGhhbnlhIHRlcnNlZGlhIGtlcGFkYSBhcGwgc2lzdGVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+ImJhY2EgbWVzZWogc2lhcmFuIHNlbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiJNZW1ib2xlaGthbiBhcGwgbWVtYmFjYSBtZXNlaiBzaWFyYW4gc2VsIHlhbmcgZGl0ZXJpbWEgb2xlaCBwZXJhbnRpIGFuZGEuIElzeWFyYXQgc2lhcmFuIHNlbCBkaWhhbnRhciBkaSBiZWJlcmFwYSBsb2thc2kgdW50dWsgbWVtYmVyaSBhbWFyYW4ga2VwYWRhIGFuZGEgdGVudGFuZyBzaXR1YXNpIGtlY2VtYXNhbi4gQXBsIGhhc2FkIGJvbGVoIG1lbmdnYW5nZ3UgcHJlc3Rhc2kgYXRhdSBvcGVyYXNpIHBlcmFudGkgYW5kYSBhcGFiaWxhIHNpYXJhbiBzZWwga2VjZW1hc2FuIGRpdGVyaW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiJoYW50YXIgbWVzZWogU01TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2hhbnRhciBtZXNlaiBTTVMuIEluaSBib2xlaCBtZW55ZWJhYmthbiBjYWogZGkgbHVhciBqYW5na2Fhbi4gQXBsIGhhc2FkIGJvbGVoIG1lbWJ1YXQgYW5kYSBrZXJ1Z2lhbiB3YW5nIGRlbmdhbiBtZW5naGFudGFyIG1lc2VqIHRhbnBhIHBlbmdlc2FoYW4gYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4iYWNhcmEgaGFudGFyIHJlc3BvbnMtbWVsYWx1aS1tZXNlaiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdoYW50YXIgcGVybWludGFhbiBrZXBhZGEgYXBsIHBlcm1lc2VqYW4gbGFpbiB1bnR1ayBtZW5nZW5kYWxpa2FuIGFjYXJhIHJlc3BvbnMtbWVsYWx1aS1tZXNlaiB1bnR1ayBwYW5nZ2lsYW4gbWFzdWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+ImJhY2EgbWVzZWogdGVrcyBhbmRhIChTTVMgYXRhdSBNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIG1lc2VqIFNNUyB5YW5nIHRlcnNpbXBhbiBwYWRhIHRhYmxldCBhdGF1IGthZCBTSU0gYW5kYS4gSW5pIG1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIHNlbXVhIG1lc2VqIFNNUywgdGFucGEgbWVuZ2lyYSBrYW5kdW5nYW4gYXRhdSBrZXJhaHNpYWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjk1OTY3NTMzNDU3MjQwNTUwIj4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2EgbWVzZWogU01TIHlhbmcgdGVyc2ltcGFuIHBhZGEgdGVsZWZvbiBhdGF1IGthZCBTSU0gYW5kYS4gSW5pIG1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIHNlbXVhIG1lc2VqIFNNUywgdGFucGEgbWVuZ2lyYSBrYW5kdW5nYW4gYXRhdSBrZXJhaHNpYWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTbXMiIG1zZ2lkPSIzMjE2OTUwNDcyNjM2MjE0Nzc0Ij4iZWRpdCBtZXNlaiB0ZWtzIChTTVMgYXRhdSBNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVudWxpcyBrZXBhZGEgbWVzZWogU01TIHlhbmcgZGlzaW1wYW4gcGFkYSB0YWJsZXQgYXRhdSBrYWQgU0lNIGFuZGEuIEFwbCBoYXNhZCBib2xlaCBtZW1hZGFtIG1lc2VqIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnVsaXMga2VwYWRhIG1lc2VqIFNNUyB5YW5nIGRpc2ltcGFuIHBhZGEgdGVsZWZvbiBhdGF1IGthZCBTSU0gYW5kYS4gQXBsIGhhc2FkIGJvbGVoIG1lbWFkYW0gbWVzZWogYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+InRlcmltYSBtZXNlaiB0ZWtzIChXQVApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZXJpbWEgZGFuIG1lbXByb3NlcyBtZXNlaiBXQVAuIEtlYmVuYXJhbiBpbmkgdGVybWFzdWsga2V1cGF5YWFuIHVudHVrIG1lbWFudGF1IGF0YXUgbWVtYWRhbSBtZXNlaiB5YW5nIGRpaGFudGFyIGtlcGFkYSBhbmRhIHRhbnBhIG1lbnVuanVra2FubnlhIGtlcGFkYSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4iZGFwYXRrYW4gc2VtdWxhIGFwbCB5YW5nIHNlZGFuZyBkaWphbGFua2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VGFza3MiIG1zZ2lkPSI3NDU0MjE1OTk1ODQ3NjU4MTAyIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmdhbWJpbCBtYWtsdW1hdCB0ZW50YW5nIHR1Z2FzYW4geWFuZyBzZWRhbmcgZGFuIGJhcnUgYmVyamFsYW4uIEluaSBib2xlaCBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZW11aSBtYWtsdW1hdCB0ZW50YW5nIGFwbCBtYW5hIHlhbmcgZGlndW5ha2FuIHBhZGEgcGVyYW50aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSI3MTE0MjU1MjgxOTQ0MjExNjgyIj4iYmVyaW50ZXJha3NpIHNlc2FtYSBwZW5nZ3VuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSIzNjQ2NzA5NjM2MjMzODU3ODYiPiJNZW1iZW5hcmthbiBhcGwgbWVsYWt1a2FuIHRpbmRha2FuIG1lcmVudGFzaSBwZW5nZ3VuYSBiZXJiZXphIHBhZGEgcGVyYW50aS4gQXBsIGhhc2FkIGJvbGVoIG1lbmdndW5ha2FuIGluaSB1bnR1ayBtZWxhbmdnYXIgcGVybGluZHVuZ2FuIGFudGFyYSBwZW5nZ3VuYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMjU2NzczNDI4NTU0NTA3NDEwNSI+Imxlc2VuIHBlbnVoIHVudHVrIGJlcmludGVyYWtzaSBzZXNhbWEgcGVuZ2d1bmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjM3Njg0MTM2ODM5NTUwMjM2NiI+Ik1lbWJlbmFya2FuIHNlbXVhIGludGVyYWtzaSB5YW5nIG11bmdraW4gc2VzYW1hIHBlbmdndW5hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNlcnMiIG1zZ2lkPSIxNjc2MTUwOTExNjcyMjgyNDI4Ij4idXJ1cyBwZW5nZ3VuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndXJ1cyBwZW5nZ3VuYSBwYWRhIHBlcmFudGkgaW5pLCB0ZXJtYXN1ayBwZXJ0YW55YWFuLCBwZW1idWF0YW4gZGFuIHBlbWFkYW1hbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4iZGFwYXRrYW4gYnV0aXJhbiBhcGwgeWFuZyBiZXJqYWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSIxNTM4MjQ3NDE0NDA3MTc1OTkiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZGFwYXRrYW4gbWFrbHVtYXQgdGVycGVyaW5jaSB0ZW50YW5nIHR1Z2FzYW4geWFuZyBzZWRhbmcgZGFuIGJhcnUgYmVyamFsYW4uIEFwbCBoYXNhZCBib2xlaCBtZW5kYXBhdCBtYWtsdW1hdCBwZXJpYmFkaSB0ZW50YW5nIGFwbCBsYWluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVvcmRlclRhc2tzIiBtc2dpZD0iMjAxODU3NTUyNjkzNDQyMjc3OSI+InN1c3VuIHNlbXVsYSB0ZXJ0aWIgYXBsIHlhbmcgZGlqYWxhbmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiJNZW1iZW5hcmthbiBhcGwgbWVtaW5kYWhrYW4gdHVnYXNhbiBrZSBsYXRhciBkZXBhbiBkYW4gbGF0YXIgYmVsYWthbmcuIEFwbCBib2xlaCBtZWxha3VrYW4gaW5pIHRhbnBhIGlucHV0IGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW1vdmVUYXNrcyIgbXNnaWQ9IjY4MjE1MTM0MDE4NzAzNzc0MDMiPiJoZW50aWthbiBhcGwgeWFuZyBzZWRhbmcgZGlqYWxhbmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlbW92ZVRhc2tzIiBtc2dpZD0iMTM5NDcxNDM1MjA2MjYzNTQ5MyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5nYWxpaCBrZWx1YXIgdHVnYXNhbiBkYW4gbWVsdXB1c2thbiBhcGxueWEuIEFwbCBoYXNhZCBib2xlaCBtZW5nZ2FuZ2d1IHRpbmdrYWggbGFrdSBhcGwgbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iNzM5MTE5MTM4NDAyNzMwMzA2NSI+InVydXMgdGluZGFuYW4gYWt0aXZpdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY3Rpdml0eVN0YWNrcyIgbXNnaWQ9IjE2MTU4ODE5MzMwMzQwODQ0NDAiPiJNZW1iZW5hcmthbiBhcGwgbWVuYW1iYWgsIG1lbmdhbGloIGtlbHVhciBkYW4gbWVuZ3ViYWggc3VhaSB0aW5kYW5hbiBha3Rpdml0aSB0ZW1wYXQgYXBsIGxhaW4gYmVyamFsYW4uIEFwbCBoYXNhZCBib2xlaCBtZW5nZ2FuZ2d1IHRpbmdrYWggbGFrdSBhcGwgbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSIyOTE4NzY4MjM4MDQ1MjA2NDU2Ij4ibXVsYWthbiBzZWJhcmFuZyBha3Rpdml0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSI5OTc4MjM2OTUzNDM1ODQwMDEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtdWxha2FuIGFwYS1hcGEgYWt0aXZpdGksIHRhbnBhIG1lbmdpcmEgcGVybGluZHVuZ2FuIGtlYmVuYXJhbiBhdGF1IGtlYWRhYW4gZWtzcG9ydC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTc1Mzg3MTE4ODYxODQyMDYxIj4idGV0YXBrYW4ga2VzZXJhc2lhbiBza3JpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTIwNDM2MTg2OTM5MTczNzQiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2F3YWwgbW9kIGtlc2VyYXNpYW4gc2tyaW4gYXBsaWthc2kgbGFpbi4gQXBsaWthc2kgaGFzYWQgbXVuZ2tpbiBtZW1hdGFoa2FuIGtlbGFrdWFuIGFwbGlrYXNpIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXREZWJ1Z0FwcCIgbXNnaWQ9IjMwMjIxMDcxOTg2ODY1ODQwNTIiPiJkYXlha2FuIHBlbnlhaHBlcGlqYXRhbiBhcGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXREZWJ1Z0FwcCIgbXNnaWQ9IjQ0NzQ1MTI0MTYyOTkwMTMyNTYiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2hpZHVwa2FuIHBlbnlhaHBlcGlqYXRhbiB1bnR1ayBhcGwgbGFpbi4gQXBsIGhhc2FkIGJvbGVoIG1lbmdndW5ha2FubnlhIHVudHVrIG1lbmdoYXB1c2thbiBhcGwgbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MTYyMDkyMTg1MTI0MjM0NDgwIj4idHVrYXIgdGV0YXBhbiBwYXBhcmFuIHNpc3RlbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmd1YmFoIGtvbmZpZ3VyYXNpIHNlbWFzYSBzZXBlcnRpIHRlbXBhdCBwZXJpc3Rpd2EgYXRhdSBzYWl6IGZvbiBrZXNlbHVydWhhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI1Njg0NTA0MDU4MTkyOTIxMDk4Ij4iZGF5YWthbiBtb2Qga2VyZXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiJNZW1iZW5hcmthbiBhcGwgbWVuZGF5YWthbiBtb2Qga2VyZXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSIzOTE0MDI2Njg3NDIwMTc3MjAyIj4idHV0dXAgYXBsIGxhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjQ1OTMzNTMyMzU5NTk3MzMxMTkiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuYW1hdGthbiBwcm9zZXMgbGF0YXIgYmVsYWthbmcgYXBsIGxhaW4uIEluaSBib2xlaCBtZW55ZWJhYmthbiBhcGwgbGFpbiBiZXJoZW50aSBiZXJqYWxhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+InBha3NhIGFwbCBsYWluIHN1cGF5YSBiZXJoZW50aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+Ik1lbWJlbmFya2FuIGFwbCBtZW5naGVudGlrYW4gYXBsIGxhaW4gc2VjYXJhIHBha3NhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VCYWNrIiBtc2dpZD0iNjUyOTM1MjA0MDcyNTg0NjE2Ij4ibWVtYWtzYSBhcGwgdW50dWsgbWVudXR1cCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlQmFjayIgbXNnaWQ9IjM4OTIyOTU4MzA0MTk1MTM2MjMiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYWtzYSBhcGEtYXBhIGFrdGl2aXRpIHlhbmcgYWRhIGRpIGxhdGFyIGRlcGFuIHVudHVrIHR1dHVwIGRhbiBrZW1iYWxpLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2R1bXAiIG1zZ2lkPSIxNjgxNzk5ODYyNDM4OTU0NzUyIj4ibWVuZGFwYXRrYW4gc2VtdWxhIGtlYWRhYW4gZGFsYW1hbiBzaXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5kYXBhdGthbiBzZW11bGEga2VhZGFhbiBkYWxhbWFuIHNpc3RlbS4gQXBsIGhhc2FkIGJvbGVoIG1lbmRhcGF0a2FuIHBlbGJhZ2FpIG1ha2x1bWF0IHBlcmliYWRpIGRhbiBzZWxhbWF0IHlhbmcgYmlhc2FueWEgdGlkYWsgaWEgcGVybHVrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjgwMjI1ODg2MDg5OTQ1ODk5MzgiPiJkYXBhdGthbiBzZW11bGEga2FuZHVuZ2FuIHNrcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSIzMTkzMjY5MDY5NDY5NzAwMjY1Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmRhcGF0a2FuIGthbmR1bmdhbiB0ZXRpbmdrYXAgYWt0aWYuIEFwbCBoYXNhZCBib2xlaCBtZW5nYW1iaWwga2VzZWx1cnVoYW4ga2FuZHVuZ2FuIHRldGluZ2thcCBkYW4gbWVtZXJpa3NhIHNlbXVhIHRla3Mga2VjdWFsaSBrYXRhIGxhbHVhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjIzMTI2MTIxMzUxMjczMTAyNTQiPiJkYXlha2FuIGtlYm9sZWhjYXBhaWFuIHVudHVrIHNlbWVudGFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiJNZW1iZW5hcmthbiBhcGxpa2FzaSB1bnR1ayBtZW5kYXlha2FuIGtlYm9sZWhjYXBhaWFuIHVudHVrIHNlbWVudGFyYSBwYWRhIHBlcmFudGkuIEFwbCBoYXNhZCBtdW5na2luIG1lbmRheWFrYW4ga2Vib2xlaGNhcGFpYW4gdGFucGEgaXppbiBwZW5nZ3VuYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iODUzMjI5NTE5OTExMjUxOTM3OCI+ImRhcGF0a2FuIG1ha2x1bWF0IHRldGluZ2thcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iNDk5ODgzNjM3MDQyNDE4Njg0OSI+Ik1lbWJvbGVoa2FuIGFwbGlrYXNpIG1lbmRhcGF0a2FuIG1ha2x1bWF0IHRlbnRhbmcgdGV0aW5na2FwIGRhcmkgcGVuZ3VydXMgdGV0aW5na2FwLiBBcGwgaGFzYWQgYm9sZWggbWVuZGFwYXRrYW4gbWFrbHVtYXQgeWFuZyBiZXJ0dWp1YW4gdW50dWsgcGVuZ2d1bmFhbiBzaXN0ZW0gZGFsYW1hbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4Njc1NTM1NjQ4ODA3NDI3Mzg5Ij4idGFwaXMgYWNhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODAwNjIzNjMxNTg4ODM0NzY4MCI+Ik1lbWJlbmFya2FuIGFwbGlrYXNpIG1lbmRhZnRhcmthbiBwZW5hcGlzIGlucHV0IHlhbmcgbWVuYXBpcyBzdHJpbSBzZW11YSBhY2FyYSBwZW5nZ3VuYSBzZWJlbHVtIGRpaGFudGFyLiBBcGwgaGFzYWQgbXVuZ2tpbiBtZW5nYXdhbCBVSSBzaXN0ZW0gdGFucGEgY2FtcHVyIHRhbmdhbiBwZW5nZ3VuYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjU5NzM2MjY3MzgxNzA2MTg3NzUiPiJiZXNhcmthbiBwYXBhcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNzEyMTIzNTY4NDUxNTAwMzc5MiI+Ik1lbWJlbmFya2FuIGFwbGlrYXNpIG1lbWJlc2Fya2FuIGthbmR1bmdhbiBwYXBhcmFuLiBBcGwgaGFzYWQgbXVuZ2tpbiBtZW5ndWJhaCBrYW5kdW5nYW4gcGFwYXJhbiB5YW5nIGFrYW4gbWVtYnVhdGthbiBwZXJhbnRpIHRpZGFrIGJvbGVoIGRpZ3VuYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NodXRkb3duIiBtc2dpZD0iNzE4NTc0NzgyNDAzODkwOTAxNiI+InBlbnV0dXBhbiBzZXBhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaHV0ZG93biIgbXNnaWQ9IjcwNDY1MDA4Mzg3NDYyOTE3NzUiPiJNZWxldGFra2FuIHBlbmd1cnVzIGFrdGl2aXRpIGRhbGFtIGtlYWRhYW4gdHV0dXAuIFRpZGFrIG1lbGFrc2FuYWthbiBwZW51dHVwYW4gbGVuZ2thcC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjQxMzg2MDg2MTA3MTc0MjU1NzMiPiJoYWxhbmcgcGVydHVrYXJhbiBhcGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI4MjYyMTk1ODAyNTgyMjU1MDIxIj4iTWVuZ2hhbGFuZyBwZW5nZ3VuYSBkYXJpcGFkYSBiZXJ0dWthciBrZXBhZGEgYXBsIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSIyNTM3OTIyMzExNDExNTQ2MDE2Ij4iZGFwYXRrYW4gbWFrbHVtYXQgYXBsIHNlbWFzYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1MTI0NDg4NTU0OTYwNjcxMzEiPiJNZW1iZW5hcmthbiBwZW1lZ2FuZyBtZW5kYXBhdGthbiBtYWtsdW1hdCBwZXJpYmFkaSB0ZW50YW5nIHBlcm1vaG9uYW4gc2VtYXNhIGRpIGxhdGFyIGhhZGFwYW4gc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9Ijg5MjIzOTA5NDg2NzE4MjY1NiI+InBhbnRhdSBkYW4ga2F3YWwgc2VtdWEgcGVsYW5jYXJhbiBhcGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ydW5TZXRBY3Rpdml0eVdhdGNoZXIiIG1zZ2lkPSI2MDAzNjAzMTYyNTc4NTc3NDA2Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbWFudGF1IGRhbiBtZW5nYXdhbCBjYXJhIHNpc3RlbSBtZWxhbmNhcmthbiBha3Rpdml0aS4gQXBsIGhhc2FkIGJvbGVoIG1lbmplamFza2FuIHNpc3RlbSBzZXBlbnVobnlhLiBLZWJlbmFyYW4gaW5pIGhhbnlhIGRpcGVybHVrYW4gdW50dWsgcGVtYmFuZ3VuYW4sIHRpZGFrIHNla2FsaS1rYWxpIHVudHVrIHBlbmdndW5hYW4gYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjI1NzYzMzM0MzQ4OTM1MzI0NzUiPiJoYW50YXIgc2lhcmFuIGJhaGF3YSBwYWtlaiB0ZWxhaCBkaWFsaWgga2VsdWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSI2NjIxOTAxMjE2MjA3OTMxMDg5Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnlpYXJrYW4gcGVtYmVyaXRhaHVhbiBiYWhhd2EgcGFrZWogYXBsIHRlbGFoIGRpa2VsdWFya2FuLiBBcGwgaGFzYWQgYm9sZWggbWVuZ2d1bmFrYW5ueWEgdW50dWsgbWVtYnVudWggbWFuYS1tYW5hIGFwbCBsYWluIHlhbmcgc2VkYW5nIGJlcmphbGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI1Njg5MDk1MDA5MDMwMzM2NTkzIj4iaGFudGFyIHNpYXJhbiBTTVMgZGl0ZXJpbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVueWlhcmthbiBwZW1iZXJpdGFodWFuIGJhaGF3YSBtZXNlaiBTTVMgdGVsYWggZGl0ZXJpbWEuIEFwbCBoYXNhZCBib2xlaCBtZW5nZ3VuYWthbm55YSB1bnR1ayBtZW1hbHN1a2FuIG1lc2VqIFNNUyBtYXN1ay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4iaGFudGFyIHNpYXJhbiBXQVAtVE9MQUstZGl0ZXJpbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iNDc4MzQwMjUyNTAzOTQ0MjcyOSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW55aWFya2FuIHBlbWJlcml0YWh1YW4gYmFoYXdhIG1lc2VqIFdBUCBQVVNIIHRlbGFoIGRpdGVyaW1hLiBBcGwgaGFzYWQgYm9sZWggbWVuZ2d1bmFrYW5ueWEgdW50dWsgbWVtYWxzdWthbiBwZW5lcmltYWFuIG1lc2VqIE1NUyBhdGF1IHNlY2FyYSBkaWFtLWRpYW0gbWVuZ2dhbnRpa2FuIGthbmR1bmdhbiBtYW5hLW1hbmEgbGFtYW4gd2ViIGRlbmdhbiB2YXJpYW4gaGFzYWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSIyNDUxODczNjY0MzYzNjYyNjY2Ij4iaGFka2FuIGJpbGFuZ2FuIHByb3NlcyB5YW5nIGRpamFsYW5rYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmdhd2FsIGJpbGFuZ2FuIG1ha3NpbXVtIHByb3NlcyB5YW5nIGFrYW4gYmVybGFuZ3N1bmcuIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNTUwOTU4NTA3Nzk4Nzk2OTY1Ij4ibWVtYWtzYSBhcGwgbGF0YXIgYmVsYWthbmcgdW50dWsgbWVudXR1cCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2F3YWwgc2FtYSBhZGEgYWt0aXZpdGkgc2VudGlhc2Egc2VsZXNhaSBzZWJhaWsgc2FoYWphIGlhIHBlcmdpIGtlIGxhdGFyIGJlbGFrYW5nLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiJiYWNhIHN0YXRpc3RpayBiYXRlcmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI1ODk3MzQ2NTgyODgyOTE1MTE0Ij4iTWVtYmVuYXJrYW4gYXBsaWthc2kgbWVtYmFjYSBkYXRhIHBlbmdndW5hYW4gYmF0ZXJpIHRhaGFwIHJlbmRhaCBzZW1hc2EuIEJvbGVoIG1lbWJlbmFya2FuIGFwbGlrYXNpIHVudHVrIG1lbmNhcmkgbWFrbHVtYXQgdGVycGVyaW5jaSB0ZW50YW5nIGFwbCB5YW5nIGFuZGEgZ3VuYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjM3MTk2ODk3NjQ1MzYzNzk1NTciPiJ1YmFoIHN1YWkgc3RhdGlzdGlrIGJhdGVyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjY4NjI4MTc4NTcxNzgwMjUwMDIiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ3ViYWggc3VhaSBzdGF0aXN0aWsgYmF0ZXJpIHlhbmcgZGlrdW1wdWwuIEJ1a2FuIHVudHVrIHBlbmdndW5hYW4gYXBsIG5vcm1hbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iMTUwODc3OTY4NzQzNjU4NTc0NCI+ImRhcGF0a2FuIHNlbXVsYSBzdGF0aXN0aWsgcGVuZ2VuZGFsaWFuIGFwbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iNjI0Mzg4NzA0MTU3NzkxMjg3NyI+Ik1lbWJlbmFya2FuIGFwbCBtZW5kYXBhdGthbiBzZW11bGEgc3RhdGlzdGlrIHBlbmdlbmRhbGlhbiBhcGxpa2FzaSB5YW5nIGRpa3VtcHVsLiBCdWthbiB1bnR1ayBrZWd1bmFhbiBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9Ijg4MjkwOTczNzM4NTE1MjE1MDUiPiJ1YmFoIHN1YWkgYXBsIG9wcyBzdGF0aXN0aWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9IjUwNzg0NTk2NTk0NDAzNDgzIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmd1YmFoIHN1YWkgc3RhdGlzdGlrIG9wZXJhc2kgYXBsaWthc2kgeWFuZyBkaWt1bXB1bC4gQnVrYW4gdW50dWsga2VndW5hYW4gYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmFja3VwIiBtc2dpZD0iNDcwMDEzMDIyODY1NDUzOTIwIj4ic2FuZGFyYW4gZGFuIHBlbXVsaWhhbiBzaXN0ZW0ga2F3YWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhY2t1cCIgbXNnaWQ9IjY5MTIyMzA1MjUxNDA1ODk4OTEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2F3YWwgc2FuZGFyYW4gc2lzdGVtIGRhbiBtZW11bGloa2FuIG1la2FuaXNtZS4gQnVrYW4gdW50dWsgZGlndW5ha2FuIG9sZWggYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiJzYWhrYW4gcGVueWFuZGFyYW4gcGVudWggYXRhdSBwZW11bGloYW4gb3BlcmFzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbXVsYWthbiBVSSBwZW5nZXNhaGFuIHNhbmRhcmFuIHBlbnVoLiBCdWthbiB1bnR1ayBkaWd1YWthbiBvbGVoIG1hbmEtbWFuYSBhcGwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9IjIxNDg1NjM2MjgxNDAxOTMyMzEiPiJtZW1hcGFwYXJrYW4gdGV0aW5na2FwIHlhbmcgdGlhZGEga2ViZW5hcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbWJ1YXQgdGV0aW5na2FwIHlhbmcgZGltYWtzdWRrYW4gdW50dWsgZGlndW5ha2FuIG9sZWggYW50YXJhIG11a2EgcGVuZ2d1bmEgc2lzdGVtIGRhbGFtYW4uIEJ1a2FuIHVudHVrIGRpZ3VuYWthbiBvbGVoIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iMzU0MzM0Nzk4MDgzOTUxODYxMyI+Imx1a2lzIGF0YXMgYXBsIGxhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9Ijg1ODQ2NzgzODE5NzI4MjAxMTgiPiJNZW1iZW5hcmthbiBhcGxpa2FzaSBiZXJ0aW5kaWggZGkgYXRhcyBhcGxpa2FzaSBsYWluIGF0YXUgc2ViYWhhZ2lhbiBkYXJpcGFkYSBhbnRhcmEgbXVrYSBwZW5nZ3VuYS4gSW5pIG11bmdraW4gbWVuZ2dhbmdndSBwZW5nZ3VuYWFuIGFudGFyYSBtdWthIGFuZGEgZGFsYW0gc2ViYXJhbmcgYXBsaWthc2kgYXRhdSBtZW51a2FyIGFwYSB5YW5nIGFuZGEgcmFzYSBhbmRhIGxpaGF0IGRhbGFtIGFwbGlrYXNpIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiJtZW5ndWJhaCBzdWFpIGtlbGFqdWFuIGFuaW1hc2kgZ2xvYmFsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4iTWVtYmVuYXJrYW4gYXBsIG1lbnVrYXIga2VsYWp1YW4gYW5pbWFzaSBnbG9iYWwgKGFuaW1hc2kgeWFuZyBsZWJpaCBsYWp1IGF0YXUgbGViaWggcGVybGFoYW4pIHBhZGEgYmlsYS1iaWxhIG1hc2Egc2FoYWphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+InVydXMgdG9rZW4gYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1idWF0IGRhbiBtZW5ndXJ1c2thbiB0b2tlbiBtZXJla2Egc2VuZGlyaSwgZGVuZ2FuIG1lbWludGFzIHN1c3VuYW4tWiBiaWFzYW55YS4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mcmVlemVTY3JlZW4iIG1zZ2lkPSI0NzA4MTgxMTg0NDQxODgwMTc1Ij4iYmVrdWthbiBza3JpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9Ijg1NTg5MjM3ODkyMjI2NzAwNjQiPiJNZW1iZW5hcmthbiBhcGxpa2FzaSBtZW1iZWt1a2FuIHNlbWVudGFyYSBza3JpbiB1bnR1ayBwZXJhbGloYW4gc2tyaW4gcGVudWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbmplY3RFdmVudHMiIG1zZ2lkPSIxMzc4NzQ2NTg0MDIzNTg2NjAwIj4ibWVuZWthbiBrZWt1bmNpIGRhbiBidXRhbmcga2F3YWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnlhbXBhaWthbiBwZXJpc3Rpd2EgaW5wdXQgc2VuZGlyaSAodGVrYW5hbiBrZWt1bmNpLCBkYW4gc2ViYWdhaW55YSkga2VwYWRhIGFwbCBsYWluLiBBcGwgaGFzYWQgYm9sZWggbWVuZ2d1bmFrYW5ueWEgdW50dWsgbWVuZ2FtYmlsIGFsaWggdGFibGV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW55YW1wYWlrYW4gcGVyaXN0aXdhIGlucHV0IHNlbmRpcmkgKHRla2FuYW4ga2VrdW5jaSwgZGFuIHNlYmFnYWlueWEpIGtlcGFkYSBhcGwgbGFpbi4gQXBsIGhhc2FkIGJvbGVoIG1lbmdndW5ha2FubnlhIHVudHVrIG1lbmdhbWJpbCBhbGloIHRlbGVmb24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjQ2OTQyODkwMDA0MTI0OTIzNCI+InJha2FtIGFwYSB5YW5nIGFuZGEgdGFpcGthbiBkYW4gdGluZGFrYW4geWFuZyBhbmRhIGFtYmlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI4Mzg3NzU0OTAxNjg4NzI4MDQzIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbGloYXQga2VrdW5jaSB5YW5nIGFuZGEgdGVrYW4gd2FsYXVwdW4gc2VtYXNhIGJlcmludGVyYWtzaSBkZW5nYW4gYXBsIGxhaW4gKHNlcGVydGkgbWVuYWlwIGthdGEgbGFsdWFuKS4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMzYwMDY0NjIwMjMwNTE1Nzc2Ij4idGVyaWthdCBrZXBhZGEga2FlZGFoIGlucHV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzI1MDQ0MDMyMjgwNzI4NjMzMSI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBrYWVkYWggaW5wdXQgaXR1LiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjUzNTc3MzM5NDI1NTYwMzE1OTMiPiJ0ZXJpa2F0IGtlcGFkYSBwZXJraGlkbWF0YW4geWFuZyBib2xlaCBkaWFrc2VzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBwZXJraGlkbWF0YW4geWFuZyBib2xlaCBkaWFrc2VzLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI4NDYyODE1MTc5NTcyNzQ4NzYxIj4idGVyaWthdCBrZXBhZGEgcGVya2hpZG1hdGFuIGNldGFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBwZXJraGlkbWF0YW4gY2V0YWthbi4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NBbGxQcmludEpvYnMiIG1zZ2lkPSIxMTIwNzkyNDY4NDY1NzExMTU5Ij4iYWtzZXMgc2VtdWEga2VyamEgY2V0YWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0FsbFByaW50Sm9icyIgbXNnaWQ9IjI5NzgxODUzMTEwNDE4NjQ3NjIiPiJNZW1iZW5hcmthbiBwZW1lZ2FuZyBtZW5nYWtzZXMga2VyamEgY2V0YWthbiB5YW5nIGRpYnVhdCBvbGVoIGFwbCBsYWluLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9iaW5kTmZjU2VydmljZSAoMjc1MjczMTMwMDQxOTQxMDcyNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19iaW5kTmZjU2VydmljZSAoNjEyMDY0NzYyOTE3NDA2Njg2MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iNzM1ODM3ODQwMTkxNTI4NzkzOCI+InRlcmlrYXQga2VwYWRhIHBlcmtoaWRtYXRhbiB0ZWtzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iODE1MTk2ODkxMDk3Mzk5ODY3MCI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIG1lbmdpa2F0IGtlcGFkYSBhbnRhcmEgbXVrYSBwZXJpbmdrYXQgYXRhc2FuIHBlcmtoaWRtYXRhbiB0ZWtzKG1pcy4gUGVya2hpZG1hdGFuUGVueWVtYWtFamFhbikuIFRpZGFrIHNlaGFydXNueWEgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjQ3MDg1OTYwMjExNjE0NzMyNTUiPiJ0ZXJpa2F0IGtlcGFkYSBwZXJraGlkbWF0YW4gVlBOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgdGVyaWthdCBkZW5nYW4gYW50YXJhIG11a2EgcGVyaW5na2F0IHRlcnRpbmdnaSBiYWdpIHBlcmtoaWRtYXRhbiBWcG4uIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJ0ZXJpa2F0IHBhZGEga2VydGFzIGRpbmRpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBrZXJ0YXMgZGluZGluZy4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4idGVyaWthdCBrZXBhZGEgcGVya2hpZG1hdGFuIHdpZGdldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJNZW1iZW5hcmthbiBwZW1lZ2FuZyB0ZXJpa2F0IGRlbmdhbiBhbnRhcmEgbXVrYSBwZXJpbmdrYXQgdGVydGluZ2dpIGJhZ2kgcGVya2hpZG1hdGFuIHdpZGdldC4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iYmVyaW50ZXJha3NpIGRlbmdhbiBwZW50YWRiaXIgcGVyYW50aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9IjU2OTcxNTQxOTU0MzkwNzkzMCI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIG1lbmdoYW50YXIgdHVqdWFuIGtlcGFkYSBwZW50YWRiaXIgcGVyYW50aS4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4idGFtYmFoIGF0YXUgYWxpaCBrZWx1YXIgcGVudGFkYmlyIHBlcmFudGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI1MDI1NjA4MTY3NzA5OTQyNDg1Ij4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgbWVuYW1iYWggYXRhdSBtZW5nYWxpaCBrZWx1YXIgcGVudGFkYmlyIHBlcmFudGkgYWt0aWYuIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMzY1OTQ3NzE3MTYzODY2ODQ0Ij4idHVrYXIgb3JpZW50YXNpIHNrcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMDQ2MTI2NjE5MzE2NjcxNDc2Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnVrYXIgcHV0YXJhbiBza3JpbiBwYWRhIGJpbGEtYmlsYSBtYXNhLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjkxNzUzNzE2MTMzMjI1NjI5MzQiPiJ0dWthciBrZWxhanVhbiBwZW51ZGluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjY4NjY1NjMyMzQyNzQxMDQyMzMiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVudWthciBrZWxhanVhbiBwZW51bmp1ayB0ZXRpa3VzIGF0YXUgcGFkIGplamFrIHBhZGEgYmlsYS1iaWxhIG1hc2EuIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI0Nzc4NzMxNzAzNjAwOTA5MzQwIj4idHVrYXIgc3VzdW4gYXR1ciBwYXBhbiBrZWt1bmNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI4NDgwMDE2NzcxMTM0MTc1ODc5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbnVrYXIgc3VzdW4gYXR1ciBwYXBhbiBrZWt1bmNpLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0NTM5MDAyOTkxOTQ3Mzc2NjU5Ij4iaGFudGFyIGlzeWFyYXQgTGludXgga2VwYWRhIGFwbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0ODk2OTkyMDc5MTgyNjQ5MTQxIj4iTWVtYmVuYXJrYW4gYXBsIG1lbWludGEgaXN5YXJhdCB5YW5nIGRpYmVrYWxrYW4gZGloYW50YXIga2VwYWRhIHNlbXVhIHByb3NlcyB5YW5nIGJlcnRlcnVzYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4iYnVhdGthbiBhcGwgc2VudGlhc2EgYmVyamFsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1MjUxODkyNzIzMjkwODYxMzciPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYnVhdCBzZWJhaGFnaWFuIGRpcmlueWEgYmVydGVydXNhbiBkYWxhbSBtZW1vcmkuIEluaSBib2xlaCBtZW5nZWhhZGthbiBtZW1vcmkgeWFuZyB0ZXJzZWRpYSBrZXBhZGEgYXBsIGxhaW4gZGFuIG1lbmphZGlrYW4gdGFibGV0IHBlcmxhaGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzODQ3NjAwNDc1MDgyNzgyNzIiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYnVhdCBzZWJhaGFnaWFuIGRhcmkgZGlyaW55YSBiZXJ0ZXJ1c2FuIGRhbGFtIG1lbW9yaS4gSW5pIGJvbGVoIG1lbmdlaGFka2FuIG1lbW9yaSB5YW5nIHRlcnNlZGlhIGtlcGFkYSBhcGwgbGFpbiBkYW4gbWVuamFkaWthbiB0ZWxlZm9uIHBlcmxhaGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSIxODQzODUxMjk1Mzc3MDU5MzgiPiJwYWRhbSBhcGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYWRhbSBwYWtlaiBBbmRyb2lkLiBBcGwgaGFzYWQgYm9sZWggbWVuZ2d1bmFrYW5ueWEgdW50dWsgbWVtYWRhbSBhcGwgcGVudGluZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiJwYWRhbWthbiBkYXRhIGFwbCBsYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjQ2MjUzMjM2ODQxMjU0NTk0ODgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ29zb25na2FuIGRhdGEgcGVuZ2d1bmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzEyODY2NTU3MTgzNzQwODY3NSI+InBhZGFta2FuIGNhY2hlIGFwbCBsYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiJNZW1iZW5hcmthbiBhcGwgbWVtYWRhbWthbiBmYWlsIGNhY2hlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4idWt1ciBydWFuZyBzdG9yYW4gYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmRhcGF0a2FuIHNlbXVsYSBrb2RueWEsIGRhdGFueWEgZGFuIHNhaXogY2FjaGVueWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjIxOTkxMjg0ODI4MjAzMDY5MjQiPiJwYXNhbmcgdGVydXMgYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iNTYyODUzMDk3MjU0ODA3MTI4NCI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1hc2FuZyBwYWtlaiBBbmRyb2lkIHlhbmcgYmFoYXJ1IGF0YXUgeWFuZyBkaWtlbWFzIGtpbmkuIEFwbCBoYXNhZCBib2xlaCBtZW5nZ3VuYWthbm55YSB1bnR1ayBtZW5hbWJhaCBhcGwgYmFoYXJ1IGRlbmdhbiBrZWl6aW5hbiBiZXJrdWFzYSBzZWNhcmEgc2V3ZW5hbmctd2VuYW5nbnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiJwYWRhbWthbiBzZW11YSBkYXRhIGNhY2hlIGFwbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzQ2NDA4NzE5NDU0MzQ1NjUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ29zb25na2FuIHN0b3JhbiB0YWJsZXQgZGVuZ2FuIG1lbWFkYW0gZmFpbCBkYWxhbSBkaXJla3RvcmkgY2FjaGUgYXBsaWthc2kgbGFpbi4gSW5pIGJvbGVoIG1lbnllYmFia2FuIGFwbGlrYXNpIGxhaW4gYmVybXVsYSBsZWJpaCBwZXJsYWhhbiBrZXJhbmEgcGVybHUgbWVuZGFwYXRrYW4gc2VtdWxhIGRhdGFueWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ29zb25na2FuIHN0b3JhbiB0ZWxlZm9uIGRlbmdhbiBtZW1hZGFtIGZhaWwgZGFsYW0gZGlyZWt0b3JpIGNhY2hlIGFwbGlrYXNpIGxhaW4uIEluaSBib2xlaCBtZW55ZWJhYmthbiBhcGxpa2FzaSBsYWluIGJlcm11bGEgbGViaWggcGVybGFoYW4ga2VyYW5hIHBlcmx1IG1lbmRhcGF0a2FuIHNlbXVsYSBkYXRhbnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMjg5ODkwMjcxNjQ1OTIxNDExIj4iQWxpaCBzdW1iZXIgYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMTk1NjIyMTc3NzgyNDQ1MjQiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtaW5kYWhrYW4gc3VtYmVyIGFwbCBkYXJpIG1lZGlhIGRhbGFtYW4ga2UgbHVhcmFuIGRhbiBzZWJhbGlrbnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZExvZ3MiIG1zZ2lkPSI2NjE1Nzc4NTQzMTk4OTY3NjE0Ij4iYmFjYSBkYXRhIGxvZyBzZW5zaXRpZiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MjA2MTMxMzI5MzQ1NTE1MSI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIGRhcmlwYWRhIHBlbGJhZ2FpIGZhaWwgbG9nIHNpc3RlbS4gSGFsIGluaSBtZW1iZW5hcmthbm55YSBtZW5lbXVpIG1ha2x1bWF0IHVtdW0gbWVuZ2VuYWkgcGVya2FyYSB5YW5nIGFuZGEgbGFrdWthbiBkZW5nYW4gdGFibGV0LCBqdWdhIGJlcnBvdGVuc2kgbWVuZW11aSBtYWtsdW1hdCBwZXJzZW5kaXJpYW4gZGFuIHBlcmliYWRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjA2MzQzODE0MDI0MTU2MDQ0MyI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIGRhcmlwYWRhIHBlbGJhZ2FpIGZhaWwgbG9nIHNpc3RlbS4gSGFsIGluaSBtZW1iZW5hcmthbm55YSBtZW5lbXVpIG1ha2x1bWF0IHVtdW0gbWVuZ2VuYWkgcGVya2FyYSB5YW5nIGFuZGEgbGFrdWthbiBkZW5nYW4gdGVsZWZvbiwganVnYSBiZXJwb3RlbnNpIG1lbnllcnRha2FuIG1ha2x1bWF0IHBlcnNlbmRpcmlhbiBkYW4gcGVyaWJhZGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4iZ3VuYWthbiBtYW5hLW1hbmEgcGVueWFoa29kIG1lZGlhIHVudHVrIG1haW4gc2VtdWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2d1bmFrYW4gc2ViYXJhbmcgcGVueWFoa29kIG1lZGlhIHlhbmcgZGlwYXNhbmdrYW4gdW50dWsgbWVueWFoa29kIG1haW4gc2VtdWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiJiYWNhL3R1bGlzIGtlIHN1bWJlciB5YW5nIGRpbWlsaWtpIG9sZWggZGlhZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RpYWdub3N0aWMiIG1zZ2lkPSI2NjA4Mjk1NjkyMDAyNDUyMjgzIj4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2EgZGFuIG1lbnVsaXMga2Ugc2ViYXJhbmcgc3VtYmVyIHlhbmcgZGltaWxpa2kgb2xlaCBrdW1wdWxhbiBkaWFnOyBjb250b2hueWEsIGZhaWwgZGFsYW0gL2Rldi4gSGFsIGluaSBiZXJwb3RlbnNpIG1lbmplamFza2FuIGtlc3RhYmlsYW4gZGFuIGtlc2VsYW1hdGFuIHNpc3RlbS4gUGVya2FyYSBpbmkgc2VoYXJ1c255YSBIQU5ZQSBkaWd1bmFrYW4gdW50dWsgZGlhZ25vc2lzIGtodXN1cyBwZXJrYWthc2FuIG9sZWggcGVuZ2lsYW5nIGF0YXUgcGVuZ2VuZGFsaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBtc2dpZD0iNjMzNTU3Njc3NTcxMTA5NTkzMSI+ImRheWFrYW4gYXRhdSBsdW1wdWhrYW4ga29tcG9uZW4gYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVudWthciBzYW1hIGFkYSBrb21wb25lbiBhcGwgbGFpbiBkaWRheWFrYW4gYXRhdSB0aWRhay4gQXBsIGhhc2FkIGJvbGVoIG1lbmdndW5ha2FubnlhIHVudHVrIG1lbHVtcHVoa2FuIGtldXBheWFhbiB0ZWxlZm9uIHlhbmcgcGVudGluZy4gQmVyaGF0aS1oYXRpIHNlbWFzYSBtZW5nZ3VuYWthbiBrZWJlbmFyYW4gaW5pLCBrZXJhbmEgaGFsIGluaSBib2xlaCBtZW5qYWRpa2FuIGtvbXBvbmVuIGFwbCBiZXJhZGEgZGFsYW0ga2VhZGFhbiB0aWRhayBib2xlaCBkaWd1bmFrYW4sIHRpZGFrIGtvbnNpc3RlbiwgYXRhdSB0aWRhayBzdGFiaWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODI3MjMyNDg0NDE2NTA1NjE1Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnVrYXIgc2FtYSBhZGEga29tcG9uZW4gYXBsIGxhaW4gZGlkYXlha2FuIGF0YXUgdGlkYWsuIEFwbCBoYXNhZCBib2xlaCBtZW5nZ3VuYWthbm55YSB1bnR1ayBtZWx1bXB1aGthbiBrZXVwYXlhYW4gdGVsZWZvbiB5YW5nIHBlbnRpbmcuIEJlcmhhdGktaGF0aSBzZW1hc2EgbWVuZ2d1bmFrYW4ga2ViZW5hcmFuIGluaSwga2VyYW5hIGhhbCBpbmkgYm9sZWggbWVuamFkaWthbiBrb21wb25lbiBhcGwgYmVyYWRhIGRhbGFtIGtlYWRhYW4gdGlkYWsgYm9sZWggZGlndW5ha2FuLCB0aWRhayBrb25zaXN0ZW4sIGF0YXUgdGlkYWsgc3RhYmlsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQ2MjczMTUzNTEwOTM1MDg3OTUiPiJiZXJpa2FuIGF0YXUgYmF0YWxrYW4ga2ViZW5hcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQwODg2NDI2NTQwODU4NTA2NjIiPiJNZW1iZW5hcmthbiBhcGxpa2FzaSBtZW1iZXJpa2FuIGF0YXUgbWVtYmF0YWxrYW4ga2ViZW5hcmFuIGtodXN1cyB1bnR1ayBhcGxpa2FzaSBpdHUgc2VuZGlyaSBhdGF1IGFwbGlrYXNpIGxhaW4uIEFwbGlrYXNpIGJlcm5pYXQgamFoYXQgYm9sZWggbWVuZ2d1bmFrYW4gcGVya2FyYSBpbmkgdW50dWsgbWVuZ2Frc2VzIGNpcmkgeWFuZyBiZWx1bSBhbmRhIGJlcmlrYW4gcGFkYW55YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9Ijg0NjMxODE2Mjg2OTUzOTYzOTEiPiJ0ZXRhcGthbiBrZXV0YW1hYW4gYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iNDk3Mzk4Njc2MjI0MTc4MzcxMiI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIGFwbCBwaWxpaGFuIGFuZGEuIEFwbCBoYXNhZCBzZWNhcmEgZGlhbS1kaWFtIGJvbGVoIG1lbnVrYXIgYXBsIHlhbmcgZGlqYWxhbmthbiwgbWVuaXB1IGFwbCBhbmRhIHlhbmcgc2VkaWEgYWRhIHVudHVrIG1lbmd1bXB1bCBkYXRhIHBlcmliYWRpIGRhcmlwYWRhIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNldHRpbmdzIiBtc2dpZD0iMjIyNjE5NTI5MDk1NTIyNDczMCI+InViYWggc3VhaSB0ZXRhcGFuIHNpc3RlbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmd1YmFoIHN1YWkgZGF0YSB0ZXRhcGFuIHNpc3RlbS4gQXBsIGhhc2FkIGJvbGVoIG1lcm9zYWtrYW4ga29uZmlndXJhc2kgc2lzdGVtIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iMjA0Njc2MjUxODc2NzE4Mjg4Ij4idWJhaCBzdWFpIHRldGFwYW4gc2lzdGVtIHNlbGFtYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iODE1OTUzNTYxMzAyMDEzNzM5MSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIGRhdGEgdGV0YXBhbiBzZWxhbWF0IHNpc3RlbS4gQnVrYW4gdW50dWsgZGlndW5ha2FuIG9sZWggYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIyMTQ5NDI2NjY0MjI2MTUyMTg1Ij4ibWVuZ3ViYWggc3VhaSBwZXRhIHBlcmtoaWRtYXRhbiBHb29nbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiJNZW1ib2xlaGthbiBhcGwgbWVuZ3ViYWggc3VhaSBwZXRhIHBlcmtoaWRtYXRhbiBHb29nbGUuIEJ1a2FuIHVudHVrIGtlZ3VuYWFuIG9sZWggYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4iamFsYW5rYW4gcGFkYSBwZXJtdWxhYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzM5MDMwNDY2NDExNjg4MDcwNCI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW11bGFrYW4gZGlyaW55YSBzZW5kaXJpIHNlYmFpayBzYWhhamEgc2lzdGVtIHNlbGVzYWkgbWVuZ2VidXQuIEluaSBib2xlaCBtZW1idWF0IG1hc2EgdW50dWsgbWVuZ2hpZHVwa2FuIHRhYmxldCBtZW5qYWRpIGxlYmloIGxhbWEgZGFuIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1wZXJsYWhhbmthbiBrZXNlbHVydWhhbiB0YWJsZXQgZGVuZ2FuIHNlbnRpYXNhIGJlcmphbGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4iTWVtYmVuYXJrYW4gYXBsIGJlcm11bGEgc2VuZGlyaSBzZWJhaWsgc2FoYWphIHNpc3RlbSB0ZWxhaCBzZWxlc2FpIG1lbmdlYnV0LiBJbmkgYm9sZWggbWVuamFkaWthbm55YSBtZW5nYW1iaWwgbWFzYSB5YW5nIGxhbWEgdW50dWsgbWVuZ2hpZHVwa2FuIHRlbGVmb24gZGFuIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZWxhbWJhdGthbiBrZXNlbHVydWhhbiB0ZWxlZm9uIGRlbmdhbiBzZW50aWFzYSBiZXJqYWxhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiJoYW50YXIgc2lhcmFuIGxla2l0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3NzQ5NzYwNDk0Mzk5OTE1NjUxIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmdoYW50YXIgc2lhcmFuIG1lbGVraXQsIHlhbmcga2VrYWwgc2VsZXBhcyBzaWFyYW4gYmVyYWtoaXIuIFBlbmdndW5hYW4gYmVybGViaWhhbiBib2xlaCBtZW1idWF0a2FuIHRhYmxldCBwZXJsYWhhbiBhdGF1IHRpZGFrIHN0YWJpbCBrZXJhbmEgbWVuZ2d1bmFrYW4gdGVybGFsdSBiYW55YWsgbWVtb3JpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4MjU4MDM3NjQyMzI0NDUwOTEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2hhbnRhciBzaWFyYW4gbWVsZWtpdCwgeWFuZyBrZWthbCBzZWxlcGFzIHNpYXJhbiBiZXJha2hpci4gUGVuZ2d1bmFhbiBiZXJsZWJpaGFuIGJvbGVoIG1lbWJ1YXQgdGVsZWZvbiBwZXJsYWhhbiBhdGF1IHRpZGFrIHN0YWJpbCBkZW5nYW4gbWVueWViYWJrYW5ueWEgbWVuZ2d1bmFrYW4gbWVtb3JpIHlhbmcgdGVybGFsdSBiYW55YWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ29udGFjdHMiIG1zZ2lkPSI4MzQ4NDgxMTMxODk5ODg2MTMxIj4iYmFjYSBrZW5hbGFuIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiJNZW1iZW5hcmthbiBhcGwgbWVtYmFjYSBkYXRhIHRlbnRhbmcga2VuYWxhbiBhbmRhIHlhbmcgdGVyc2ltcGFuIGRpIHRhYmxldCBhbmRhLCB0ZXJtYXN1ayBrZWtlcmFwYW4gYW5kYSBtZW1hbmdnaWwsIG1lbmdoYW50YXIgZS1tZWwgYXRhdSBiZXJrb211bmlrYXNpIGRhbGFtIGNhcmEgbGFpbiBkZW5nYW4gaW5kaXZpZHUgdGVydGVudHUuIEtlYmVuYXJhbiBpbmkgbWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnlpbXBhbiBkYXRhIGtlbmFsYW4gYW5kYSBkYW4gYXBsIGhhc2FkIGJvbGVoIGJlcmtvbmdzaSBkYXRhIGtlbmFsYW4gYW5kYSB0YW5wYSBwZW5nZXRhaHVhbiBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiJNZW1iZW5hcmthbiBhcGwgbWVtYmFjYSBkYXRhIHRlbnRhbmcga2VuYWxhbiBhbmRhIHlhbmcgdGVyc2ltcGFuIGRpIHRlbGVmb24gYW5kYSwgdGVybWFzdWsga2VrZXJhcGFuIGFuZGEgbWVtYW5nZ2lsLCBtZW5naGFudGFyIGUtbWVsIGF0YXUgYmVya29tdW5pa2FzaSBkYWxhbSBjYXJhIGxhaW4gZGVuZ2FuIGluZGl2aWR1IHRlcnRlbnR1LiBLZWJlbmFyYW4gaW5pIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW55aW1wYW4gZGF0YSBrZW5hbGFuIGFuZGEgZGFuIGFwbCBoYXNhZCBib2xlaCBiZXJrb25nc2kgZGF0YSBrZW5hbGFuIGFuZGEgdGFucGEgcGVuZ2V0YWh1YW4gYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ29udGFjdHMiIG1zZ2lkPSI1MTA3NDkyMDg2NDE2NzkzNTQ0Ij4idWJhaCBzdWFpIGtlbmFsYW4gYW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzI0MzkzMjUyMTk1MzYwMiI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndWJhaCBzdWFpIGRhdGEgdGVudGFuZyBrZW5hbGFuIGFuZGEgeWFuZyB0ZXJzaW1wYW4gcGFkYSB0YWJsZXQgYW5kYSwgdGVybWFzdWsga2VrZXJhcGFuIHNpYXBhIGFuZGEgcGFuZ2dpbCwgaGFudGFyIGUtbWVsIGF0YXUgYmVya29tdW5pa2FzaSBkYWxhbSBjYXJhIGxhaW4gZGVuZ2FuIGtlbmFsYW4gdGVydGVudHUuIEtlYmVuYXJhbiBpbmkgbWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbWFkYW0gZGF0YSBrZW5hbGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1ODk4NjkyMjQ2MjUxNjM1NTgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ3ViYWggc3VhaSBkYXRhIHRlbnRhbmcga2VuYWxhbiBhbmRhIHlhbmcgdGVyc2ltcGFuIHBhZGEgdGVsZWZvbiBhbmRhLCB0ZXJtYXN1ayBrZWtlcmFwYW4gc2lhcGEgYW5kYSBwYW5nZ2lsLCBoYW50YXIgZS1tZWwgYXRhdSBiZXJrb211bmlrYXNpIGRhbGFtIGNhcmEgbGFpbiBkZW5nYW4ga2VuYWxhbiB0ZXJ0ZW50dS4gS2ViZW5hcmFuIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYWRhbSBkYXRhIGtlbmFsYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsbExvZyIgbXNnaWQ9IjM0NzgxMzMxODQ2MjQxMDI3MzkiPiJiYWNhIGxvZyBwYW5nZ2lsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzcwMDY0NTE4NDg3MDc2MDI4NSI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIGxvZyBwYW5nZ2lsYW4gdGFibGV0IGFuZGEsIHRlcm1hc3VrIGRhdGEgdGVudGFuZyBwYW5nZ2lsYW4gbWFzdWsgZGFuIGtlbHVhci4gS2ViZW5hcmFuIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVueWltcGFuIGRhdGEgbG9nIHBhbmdnaWxhbiBhbmRhIGRhbiBhcGwgaGFzYWQgYm9sZWggYmVya29uZ3NpIGRhdGEgcGFuZ2dpbGFuIHRhbnBhIHBlbmdldGFodWFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2EgbG9nIHBhbmdnaWxhbiB0ZWxlZm9uIGFuZGEsIHRlcm1hc3VrIGRhdGEgdGVudGFuZyBwYW5nZ2lsYW4gbWFzdWsgZGFuIGtlbHVhci4gS2ViZW5hcmFuIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVueWltcGFuIGRhdGEgbG9nIHBhbmdnaWxhbiBhbmRhIGRhbiBhcGwgaGFzYWQgYm9sZWggYmVya29uZ3NpIGRhdGEgcGFuZ2dpbGFuIHRhbnBhIHBlbmdldGFodWFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4idHVsaXMgbG9nIHBhbmdnaWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY2MTgwNjA2MjI3NDExOTI0NSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIHBhbmdnaWxhbiB0YWJsZXQgYW5kYSwgdGVybWFzdWsgZGF0YSB0ZW50YW5nIHBhbmdnaWxhbiBtYXN1ayBkYW4ga2VsdWFyLiBBcGwgaGFzYWQgYm9sZWggbWVuZ2d1bmFrYW5ueWEgdW50dWsgbWVtYWRhbSBhdGF1IG1lbmd1YmFoIHN1YWkgbG9nIHBhbmdnaWxhbiBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4Mzk0MTczNjM1Mjc4Nzg0MiI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIHBhbmdnaWxhbiB0ZWxlZm9uIGFuZGEsIHRlcm1hc3VrIGRhdGEgdGVudGFuZyBwYW5nZ2lsYW4gbWFzdWsgZGFuIGtlbHVhci4gQXBsIGhhc2FkIGJvbGVoIG1lbmdndW5ha2FubnlhIHVudHVrIG1lbWFkYW0gYXRhdSBtZW5ndWJhaCBzdWFpIGxvZyBwYW5nZ2lsYW4gYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+ImJhY2Ega2FkIGtlbmFsYW4gYW5kYSBzZW5kaXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDYyNDc1MTUxODQ5ODg4ODQ4Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2EgbWFrbHVtYXQgcHJvZmlsIHBlcmliYWRpIHlhbmcgZGlzaW1wYW4gZGFsYW0gcGVyYW50aSBhbmRhLCBzZXBlcnRpIG5hbWEgZGFuIG1ha2x1bWF0IGtlbmFsYW4gYW5kYS4gSW5pIGJlcm1ha25hIGFwbCBsYWluIGJvbGVoIG1lbmdlbmFsIHBhc3RpIGFuZGEgZGFuIG1lbmdoYW50YXIgbWFrbHVtYXQgcHJvZmlsIGFuZGEga2VwYWRhIG9yYW5nIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiJ1YmFoIHN1YWkga2FkIGtlbmFsYW4gc2VuZGlyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiJNZW1iZW5hcmthbiBhcGwgbWVudWthciBhdGF1IG1lbmFtYmFoIG1ha2x1bWF0IHByb2ZpbCBwZXJpYmFkaSB5YW5nIGRpc2ltcGFuIHBhZGEgcGVyYW50aSBhbmRhLCBzZXBlcnRpIG5hbWEgZGFuIG1ha2x1bWF0IGtlbmFsYW4gYW5kYS4gSW5pIGJlcm1ha25hIGFwbCBib2xlaCBtZW5nZW5hbCBwYXN0aSBhbmRhIGRhbiBtZW5naGFudGFyIG1ha2x1bWF0IHByb2ZpbCBhbmRhIGtlcGFkYSBvcmFuZyBsYWluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiJiYWNhIGFsaXJhbiBzb3NpYWwgYW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmdha3NlcyBkYW4gbWVueWVnZXJha2thbiBrZW1hcyBraW5pIHNvc2lhbCBkYXJpcGFkYSBhbmRhIGRhbiByYWthbiBhbmRhLiBCZXJoYXRpLWhhdGkgc2VtYXNhIGJlcmtvbmdzaSBtYWtsdW1hdCAtIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYmFjYSBrb211bmlrYXNpIGRpIGFudGFyYSBhbmRhIGRhbiByYWthbiBhbmRhIHBhZGEgcmFuZ2thaWFuIHNvc2lhbCB0YW5wYSBtZW5naXJhIGtlcmFoc2lhYW4uIE5vdGE6IGtlYmVuYXJhbiBpbmkgdGlkYWsgYm9sZWggZGlrdWF0a3Vhc2FrYW4gcGFkYSBzZW11YSByYW5na2FpYW4gc29zaWFsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTA0MTc5MjIyNDkzMjM1NjQ1Ij4idHVsaXMga2UgYWxpcmFuIHNvc2lhbCBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWFwYXJrYW4ga2VtYXMga2luaSBzb3NpYWwgZGFyaSByYWthbiBhbmRhLiBCZXJoYXRpLWhhdGkgc2VtYXNhIGJlcmtvbmdzaSBtYWtsdW1hdCAtIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2hhc2lsa2FuIG1lc2VqIHlhbmcga2VsaWhhdGFuIHNlcGVydGkgZGF0YW5nIGRhcmkgc2VvcmFuZyByYWthbi4gTm90YToga2ViZW5hcmFuIGluaSB0aWRhayBib2xlaCBkaWt1YXRrdWFzYWthbiBwYWRhIHNlbXVhIHJhbmdrYWlhbiBzb3NpYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsZW5kYXIiIG1zZ2lkPSI1OTcyNzI3NTYwMjU3NjEyMzk4Ij4iYmFjYSBhY2FyYSBrYWxlbmRhciBzZXJ0YSBtYWtsdW1hdCBzdWxpdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIHNlbXVhIGFjYXJhIGthbGVuZGFyIHlhbmcgdGVyc2ltcGFuIHBhZGEgdGFibGV0IGFuZGEsIHRlcm1hc3VrIG1pbGlrIHJha2FuIGF0YXUgcmFrYW4gc2VrZXJqYS4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBiZXJrb25nc2kgYXRhdSBtZW55aW1wYW4gZGF0YSBrYWxlbmRhciBhbmRhLCB0YW5wYSBtZW5naXJhIGtlcmFoc2lhYW4gYXRhdSBzZW5zaXRpdml0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NDM0NTQ4NjgyNDcwODUxNTgzIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbWJhY2Egc2VtdWEgYWNhcmEga2FsZW5kYXIgeWFuZyB0ZXJzaW1wYW4gcGFkYSB0ZWxlZm9uIGFuZGEsIHRlcm1hc3VrIG1pbGlrIHJha2FuIGF0YXUgcmFrYW4gc2VrZXJqYS4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBiZXJrb25nc2kgYXRhdSBtZW55aW1wYW4gZGF0YSBrYWxlbmRhciBhbmRhLCB0YW5wYSBtZW5naXJhIGtlcmFoc2lhYW4gYXRhdSBzZW5zaXRpdml0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsZW5kYXIiIG1zZ2lkPSI4NDM4ODc0NzU1MTkzODI1NjQ3Ij4idGFtYmFoIGF0YXUgdWJhaCBzdWFpIGFjYXJhIGthbGVuZGFyIGRhbiBoYW50YXIgZS1tZWwga2VwYWRhIHRldGFtdSB0YW5wYSBwZW5nZXRhaHVhbiBwZW1pbGlrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5hbWJhaCwgbWVuZ2FsaWgga2VsdWFyLCBtZW5ndWJhaCBhY2FyYSB5YW5nIGFuZGEgYm9sZWggdWJhaCBzdWFpIHBhZGEgdGFibGV0IGFuZGEsIHRlcm1hc3VrIG1pbGlrIHJha2FuIGF0YXUgcmFrYW4gc2VrZXJqYS4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCBtZW5naGFudGFyIG1lc2VqIHlhbmcga2VsaWhhdGFuIHNlcGVydGkgZGF0YW5nIGRhcmkgcGVtaWxpayBrYWxlbmRhciBhdGF1IG1lbmd1YmFoIHN1YWkgYWNhcmEgdGFucGEgcGVuZ2V0YWh1YW4gcGVtaWxpay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+Ik1lbWJlbmFya2FuIGFwbCBtZW5hbWJhaCwgbWVuZ2FsaWgga2VsdWFyLCBtZW5ndWJhaCBhY2FyYSB5YW5nIGFuZGEgYm9sZWggdWJhaCBzdWFpIHBhZGEgdGVsZWZvbiBhbmRhLCB0ZXJtYXN1ayBtaWxpayByYWthbiBhdGF1IHJha2FuIHNla2VyamEuIEluaSBib2xlaCBtZW1iZW5hcmthbiBhcGwgbWVuZ2hhbnRhciBtZXNlaiB5YW5nIGtlbGloYXRhbiBzZXBlcnRpIGRhdGFuZyBkYXJpIHBlbWlsaWsga2FsZW5kYXIgYXRhdSBtZW5ndWJhaCBzdWFpIGFjYXJhIHRhbnBhIHBlbmdldGFodWFuIHBlbWlsaWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI4Njg4MzM0OTc0MDM2ODIzMzMwIj4iZ3VuYWthbiBzdW1iZXIgbG9rYXNpIG9sb2stb2xvayB1bnR1ayBwZW5ndWppYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI1ODA4NzExMDM5NDgyMDUxODI0Ij4iQnVhdCBzdW1iZXIgbG9rYXNpIHBhbHN1IHVudHVrIG1lbmd1amkgYXRhdSBtZW1hc2FuZyBwZW1iZWthbCBsb2thc2kgYmFoYXJ1LiBJbmkgbWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbWJhdGFsa2FuIGxva2FzaSBkYW4vYXRhdSBzdGF0dXMgeWFuZyBkaWtlbWJhbGlrYW4gb2xlaCBzdW1iZXIgbG9rYXNpIGxhaW4gc2VwZXJ0aSBHUFMgYXRhdSBwZW1iZWthbCBsb2thc2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSIyODM2MzA4MDc2NzIwNTUzODM3Ij4iYWtzZXMgcGVyaW50YWggdGFtYmFoYW4gcGVtYmVrYWwgbG9rYXNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iNTk0NTE2NjY0MjMzNTgwMDc2MyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5nYWtzZXMgYXJhaGFuIHBlbWJla2FsIGxva2FzaSB0YW1iYWhhbi4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBjYW1wdXIgdGFuZ2FuIGRlbmdhbiBvcGVyYXNpIEdQUyBhdGF1IHN1bWJlciBsb2thc2kgbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+ImtlYmVuYXJhbiB1bnR1ayBtZW1hc2FuZyBwZW1iZWthbCBsb2thc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjkwNjYxNDYxMjA0NzA1OTE1MDkiPiJCdWF0IHN1bWJlciBsb2thc2kgcGFsc3UgdW50dWsgbWVuZ3VqaSBhdGF1IG1lbWFzYW5nIHBlbWJla2FsIGxva2FzaSBiYWhhcnUuIEluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYmF0YWxrYW4gbG9rYXNpIGRhbi9hdGF1IHN0YXR1cyB5YW5nIGRpa2VtYmFsaWthbiBvbGVoIHN1bWJlciBsb2thc2kgbGFpbiBzZXBlcnRpIEdQUyBhdGF1IHBlbWJla2FsIGxva2FzaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiJsb2thc2kgdGVwYXQgKEdQUyBkYW4gYmVyYXNhc2thbiByYW5na2FpYW4pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5kYXBhdGthbiBsb2thc2kgdGVwYXQgYW5kYSBtZW5nZ3VuYWthbiBTaXN0ZW0gS2VkdWR1a2FuIEdsb2JhbCAoR1BTKSBhdGF1IHN1bWJlciBsb2thc2kgcmFuZ2thaWFuIHNlcGVydGkgbWVuYXJhIHNlbCBkYW4gV2ktRmkuIFBlcmtoaWRtYXRhbiBsb2thc2kgaW5pIG1lc3RpIGRpaGlkdXBrYW4gZGFuIHRlcnNlZGlhIHBhZGEgcGVyYW50aSBhbmRhIHVudHVrIGtlZ3VuYWFuIGFwbC4gQXBsIGJvbGVoIG1lbmdndW5ha2FuIGluaSB1bnR1ayBtZW5lbnR1a2FuIHRlbXBhdCBhbmRhIGJlcmFkYSBkYW4gbXVuZ2tpbiBtZW5nZ3VuYWthbiBrdWFzYSBiYXRlcmkgdGFtYmFoYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjQ4ODc4OTUzNjIzNTQyMzk2MjgiPiJsb2thc2kgYW5nZ2FyYW4gKGJlcmFzYXNrYW4gcmFuZ2thaWFuKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5kYXBhdGthbiBsb2thc2kgYW5nZ2FyYW4gYW5kYS4gTG9rYXNpIGluaSBkaXBlcm9sZWhpIG9sZWggcGVya2hpZG1hdGFuIGxva2FzaSBtZW5nZ3VuYWthbiBzdW1iZXIgbG9rYXNpIHJhbmdrYWlhbiBzZXBlcnRpIG1lbmFyYSBzZWwgZGFuIFdpLUZpLiBQZXJraGlkbWF0YW4gbG9rYXNpIGluaSBtZXN0aSBkaWhpZHVwa2FuIGRhbiB0ZXJzZWRpYSBwYWRhIHBlcmFudGkgYW5kYSB1bnR1ayBrZWd1bmFhbiBhcGwuIEFwbCBib2xlaCBtZW5nZ3VuYWthbiBpbmkgdW50dWsgbWVuZW50dWthbiBzZWNhcmEgYW5nZ2FyYW4gdGVtcGF0IGFuZGEgYmVyYWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4iYWtzZXMgU3VyZmFjZUZsaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2d1bmFrYW4gY2lyaSBwZXJpbmdrYXQgcmVuZGFoIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImJhY2EgcGVuaW1iYWwgYmluZ2thaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJNZW1iZW5hcmthbiBhcGwgbWVtYmFjYSBrYW5kdW5nYW4gcGVuaW1iYWwgYmluZ2thaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJha3NlcyBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdndW5ha2FuIGNpcmkgcGVyaW5na2F0IHJlbmRhaCBJbnB1dEZsaW5nZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJrb25maWd1cmFzaWthbiBwYXBhcmFuIFdpZmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2tvbmZpZ3VyYXNpIGRhbiBtZW55YW1idW5nIGtlIHBhcGFyYW4gV2lmaS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQgKDY4NTcxMzQ0OTg0MDIzNDY3MDgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0ICg2MjEwNTk3NzU0MjEyMjA4ODUzKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfY2FwdHVyZVZpZGVvT3V0cHV0ICgyMjQ2ODI4NzczNTg5MDk0MDIzKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2NhcHR1cmVWaWRlb091dHB1dCAoMzU5NDgxNjU4MDM0MTQ5ODYwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0ICg3ODE1Mzk4OTY5MzAzMzgyMDE2KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCAoMjc3OTc5MzA2NDcwOTM1MDI4OSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjYwOTU4NTk5MzcwNjkxNDYwODYiPiJ0dWthciB0ZXRhcGFuIGF1ZGlvIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIHRldGFwYW4gYXVkaW8gZ2xvYmFsIHNlcGVydGkga2VsYW50YW5nYW4gZGFuIHBlbWJlc2FyIHN1YXJhIG1hbmEgZGlndW5ha2FuIHVudHVrIG91dHB1dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+InJha2FtIGF1ZGlvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lcmFrYW0gYXVkaW8gbWVuZ2d1bmFrYW4gbWlrcm9mb24uIEtlYmVuYXJhbiBpbmkgbWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lcmFrYW0gYXVkaW8gcGFkYSBiaWxhLWJpbGEgbWFzYSB0YW5wYSBwZW5nZXNhaGFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4iYW1iaWwgZ2FtYmFyIGRhbiB2aWRlbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2FtYmlsIGdhbWJhciBkYW4gdmlkZW8gbWVuZ2d1bmFrYW4ga2FtZXJhLiBLZWJlbmFyYW4gaW5pIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5nZ3VuYWthbiBrYW1lcmEgcGFkYSBiaWxhLWJpbGEgbWFzYSB0YW5wYSBwZW5nZXNhaGFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4ibHVtcHVoa2FuIExFRCBwZW51bmp1ayBwZW5naGFudGFyYW4gc2VtYXNhIGthbWVyYSBzZWRhbmcgZGlndW5ha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iNDc2NDU4NTQ2NTQ4MDI5NTM0MSI+Ik1lbWJlbmFya2FuIGFwbGlrYXNpIHNpc3RlbSB5YW5nIGRpcHJhcGFzYW5nIHVudHVrIG1lbHVtcHVoa2FuIExFRCBwZW51bmp1ayBwZW5nZ3VuYWFuIGthbWVyYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyOTYxMjkyMjA1NzY0NDg4MzA0Ij4ibWVsdW1wdWhrYW4gdGFibGV0IHNlY2FyYSBrZWthbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4ibHVtcHVoa2FuIHRlbGVmb24gc2VjYXJhIGtla2FsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMzQ4MTg4MDgwMDE2OTk1MzAiPiJNZW1iZW5hcmthbiBhcGwgbWVsdW1wdWhrYW4ga2VzZWx1cnVoYW4gdGFibGV0IHNlY2FyYSBrZWthbC4gSW5pIGFtYXQgYmVyYmFoYXlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc4ODkwMzI5NzYyNzI4MzA5OSI+Ik1lbWJlbmFya2FuIGFwbCBtZWx1bXB1aGthbiBrZXNlbHVydWhhbiB0ZWxlZm9uIHNlY2FyYSBrZWthbC4gSW5pIGFtYXQgYmVyYmFoYXlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDM2NjM0OTcyNTYxNzk1MDAyIj4ibWVtYWtzYSB0YWJsZXQgYnV0IHNlbXVsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg5ODU2MDg3MjQ2MjYzODI0MiI+InBha3NhIHRlbGVmb24gYnV0IHNlbXVsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+Ik1lbWJlbmFya2FuIGFwbCBtZW1ha3NhIHRhYmxldCB1bnR1ayBidXQgc2VtdWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiJNZW1iZW5hcmthbiBhcGwgbWVtYWtzYSB0ZWxlZm9uIHVudHVrIGJ1dCBzZW11bGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiJha3NlcyBzaXN0ZW0gZmFpbCBzdG9yYW4gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQwMjMwNTA0OTg5MDk1MzgxMCI+ImFrc2VzIHNpc3RlbSBmYWlsIEthZCBTRCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIG1zZ2lkPSIxODI5MjkwNzAxNjU4OTkyMzQ3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbGVrYXBrYW4gZGFuIG1lbnlhaGxla2Fwa2FuIHNpc3RlbSBmYWlsIHVudHVrIHN0b3JhbiBib2xlaCBhbGloLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyMjc4MTk1ODI2MjQ5MDQ5NzIiPiJwYWRhbWthbiBzdG9yYW4gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiJwYWRhbWthbiBrYWQgU0QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIG1zZ2lkPSI4Nzg0MjY4MjQ2Nzc5MTk4NjI3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWZvcm1hdGthbiBzdG9yYW4gYm9sZWggYWxpaC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzQxMTMzODYzMjAwMjE5Mzg0NiI+ImRhcGF0a2FuIG1ha2x1bWF0IHRlbnRhbmcgc3RvcmFuIGRhbGFtYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2FjY2VzcyIgbXNnaWQ9IjMwOTQ1NjM4NDQ1OTM4Nzg1NDgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZGFwYXRrYW4gbWFrbHVtYXQgZGFyaSBzdG9yYW4gZGFsYW1hbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfY3JlYXRlIiBtc2dpZD0iNjQxNDc1NzIzNDc4OTMzNjMyNyI+ImJ1YXQgc3RvcmFuIGRhbGFtYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2NyZWF0ZSIgbXNnaWQ9IjQ1NTg4NjkyNzM1ODU4NTY4NzYiPiJNZW1iZW5hcmthbiBhcGwgbWVtYnVhdCBzdG9yYW4gZGFsYW1hbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjUyNjkyODMyODMwMTYxODAyMiI+Im1lbXVzbmFoa2FuIHN0b3JhbiBkYWxhbWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19kZXN0cm95IiBtc2dpZD0iNzIxODc0OTI4NjE0NTUyNjUzNyI+Ik1lbWJlbmFya2FuIGFwbCBtZW11c25haGthbiBzdG9yYW4gZGFsYW1hbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9Ijg4Nzc5OTgxMDE5NDQ5OTkzODYiPiJsZWthcC9ueWFobGVrYXAgc3RvcmFuIGRhbGFtYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSIzNDUxMzYwMTE0OTAyNDkwOTI5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbGVrYXBrYW4vbWVueWFobGVrYXBrYW4gc3RvcmFuIGRhbGFtYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX3JlbmFtZSIgbXNnaWQ9Ijc0OTY2MzM5NTQwODA0NzI0MTciPiJuYW1ha2FuIHNlbXVsYSBzdG9yYW4gZGFsYW1hbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5hbWFrYW4gc2VtdWxhIHN0b3JhbiBkYWxhbWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJrYXdhbCBnZXRhcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2F3YWwgcGVuZ2dldGFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJtZW5nYXdhbCBsYW1wdSBzdWx1aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmdhd2FsIGxhbXB1IHN1bHVoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNiIiBtc2dpZD0iMTExMzQ1MzQzMDY0NTQwMjcyMyI+InVydXMgcGlsaWhhbiBkYW4ga2ViZW5hcmFuIHVudHVrIHBlcmFudGkgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNiIiBtc2dpZD0iNzc3NjE1NTQzMDIxODIzOTgzMyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndXJ1c2thbiBwaWxpaGFuIGRhbiBrZWJlbmFyYW4gdW50dWsgcGVyYW50aSBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4ibGFrc2FuYWthbiBwcm90b2tvbCBNVFAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4iTWVtYmVuYXJrYW4gYWtzZXMga2VwYWRhIHBlbWFjdSBpbnRpIE1UUCB1bnR1ayBtZWxha3NhbmFrYW4gcHJvdG9rb2wgVVNCIE1UUC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI0MTQ4MjkwODYwNDAwNjU5MTQ2Ij4idWppIHBlcmtha2FzYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNjU5Nzk2NDE5MTIwODAxNjYwNSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5nYXdhbCBwZWxiYWdhaSBwZXJzaXNpYW4gdW50dWsgdHVqdWFuIHBlbmd1amlhbiBwZXJrYWthc2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InBhbmdnaWwgdGVydXMgbm9tYm9yIHRlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWFuZ2dpbCBub21ib3IgdGVsZWZvbiB0YW5wYSBjYW1wdXIgdGFuZ2FuIGFuZGEuIEluaSBtdW5na2luIG1lbnllYmFia2FuIGNhaiBhdGF1IHBhbmdnaWxhbiB5YW5nIGRpIGx1YXIgamFuZ2thYW4uIEFwbCBoYXNhZCBib2xlaCBtZW55ZWJhYmthbiBhbmRhIGtlcnVnaWFuIHdhbmcgZGVuZ2FuIG1lbWJ1YXQgcGFuZ2dpbGFuIHRhbnBhIHBlbmdlc2FoYW4gYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+InBhbmdnaWwgdGVydXMgc2ViYXJhbmcgbm9tYm9yIHRlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYW5nZ2lsIG1hbmEtbWFuYSBub21ib3IgdGVsZWZvbiwgdGVybWFzdWsgbm9tYm9yIGtlY2VtYXNhbiwgdGFucGEgY2FtcHVyIHRhbmdhbiBhbmRhLiBBcGwgaGFzYWQgYm9sZWggbWVtYnVhdCBwYW5nZ2lsYW4geWFuZyB0aWRhayBwZXJsdSBkYW4gc2FsYWggZGkgc2lzaSB1bmRhbmctdW5kYW5nIGtlIHBlcmtoaWRtYXRhbiBrZWNlbWFzYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+Im11bGFrYW4gdGVydXMgcGVyc2VkaWFhbiB0YWJsZXQgQ0RNQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NjA0ODQ4MDk1MzE1NDIxNDI1Ij4ibWVtdWxha2FuIHBlcnNlZGlhYW4gdGVsZWZvbiBDRE1BIHNlY2FyYSBsYW5nc3VuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+Ik1lbWJlbmFya2FuIGFwbCBtZW11bGFrYW4gcGVydW50dWthbiBDRE1BLiBBcGwgaGFzYWQgYm9sZWggbWVtdWxha2FuIHBlcnVudHVrYW4gQ0RNQSB5YW5nIHRpZGFrIHBlcmx1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+Imthd2FsIHBlbWJlcml0YWh1YW4ga2VtYXMga2luaSBsb2thc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmRheWFrYW4vbWVsdW1wdWhrYW4gcGVtYmVyaXRhaHVhbiBrZW1hcyBraW5pIGxva2FzaSBkYXJpIHJhZGlvLiBCdWthbiB1bnR1ayBrZWd1bmFhbiBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9Ijc4NTUyNTk0NjEyNjg3MzQ5MTQiPiJha3NlcyBzaWZhdCBkYWZ0YXIgbWFzdWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiJNZW1iZW5hcmthbiBhcGwgbWVtYmFjYS9tZW51bGlzIGFrc2VzIGtlcGFkYSBzaWZhdCB5YW5nIGRpbXVhdCBuYWlrIG9sZWggcGVya2hpZG1hdGFuIGNoZWNraW4uIEJ1a2FuIHVudHVrIGRpZ3VuYWthbiBvbGVoIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiJwaWxpaCB3aWRnZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kR2FkZ2V0IiBtc2dpZD0iODI2MTMyNjkzODU5OTA0OTI5MCI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1iZXJpdGFodSBzaXN0ZW0gd2lkZ2V0IG1hbmEgeWFuZyBib2xlaCBkaWd1bmFrYW4gb2xlaCBhcGwgeWFuZyBtYW5hLiBBcGwgZGVuZ2FuIGtlYmVuYXJhbiBpbmkgYm9sZWggbWVtYmVyaSBha3NlcyBrZXBhZGEgZGF0YSBwZXJpYmFkaSBrZXBhZGEgYXBsIGxhaW4uIEJ1a2FuIHVudHVrIGRpZ3VuYWthbiBvbGVoIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSI4NDIzOTIzNzc3NjU5MjkyMjI4Ij4idWJhaCBzdWFpIGtlYWRhYW4gdGVsZWZvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSIxMDI5ODc3NTI5MDA3Njg2NzMyIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmdhd2FsIGNpcmktY2lyaSB0ZWxlZm9uIHBlcmFudGkuIEFwbCBkZW5nYW4ga2ViZW5hcmFuIGluaSBib2xlaCBtZW51a2FyIHJhbmdrYWlhbiwgbWVuZ2hpZHVwa2FuIGRhbiBtZW1hdGlrYW4gcmFkaW8gdGVsZWZvbiBkYW4gc2ViYWdhaW55YSB0YW5wYSBtZW1iZXJpdGFodSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSI5MTc4MjI4NTI0NTA3NjEwNDg2Ij4iYmFjYSBzdGF0dXMgZGFuIGlkZW50aXRpIHRlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjE2MzkyMTI3NzE4MjYxMjU1MjgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2Frc2VzIGNpcmkgdGVsZWZvbiBwYWRhIHBlcmFudGkuIEtlYmVuYXJhbiBpbmkgbWVtYm9sZWhrYW4gYXBsIG1lbmVudHVrYW4gbm9tYm9yIHRlbGVmb24gZGFuIElEIHBlcmFudGksIHNhbWEgYWRhIHBhbmdnaWxhbiBha3RpZiBkYW4gbm9tYm9yIGphdWggeWFuZyBkaWh1YnVuZ2thbiBkZW5nYW4gcGFuZ2dpbGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiJtZW5naGFsYW5nIHRhYmxldCBkYXJpcGFkYSB0aWR1ciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiJoYWxhbmcgdGVsZWZvbiBkYXJpcGFkYSB0aWR1ciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzExMzE5ODI0NDAwNDQ3ODY4Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdoYWxhbmcgdGFibGV0IGRhcmlwYWRhIHRpZHVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODU1OTEwMDY3NzM3MjkyODc1NCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5naGFsYW5nIHRlbGVmb24gZGFyaXBhZGEgdGlkdXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc4NzAzNDcyMjYxNjM1MDQxNyI+Im1lbmdoaWR1cGthbiBhdGF1IG1lbWF0aWthbiBrdWFzYSB0YWJsZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RldmljZVBvd2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDkyODYyMjQ3MDk4MDk0MzIwNiI+Imt1YXNha2FuIHRlbGVmb24gaGlkdXAgYXRhdSBtYXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2hpZHVwa2FuIGF0YXUgbWVtYXRpa2FuIHRhYmxldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjYwMzcwNTczNDg0NjMxMzEwMzIiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2hpZHVwa2FuIGF0YXUgbWVtYXRpa2FuIHRlbGVmb24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mYWN0b3J5VGVzdCIgbXNnaWQ9IjM3MTUyMjU0OTI2OTY0MTYxODciPiJqYWxhbmthbiBkYWxhbSBtb2QgdWppYW4ga2lsYW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NTIwNTkzMTgzNTk2NTMwOTEiPiJKYWxhbmthbiBzZWJhZ2FpIHVqaWFuIHBlbmdlbHVhciBwZXJpbmdrYXQgcmVuZGFoLCBtZW1iZW5hcmthbiBha3NlcyBwZW51aCBrZXBhZGEgcGVya2FrYXNhbiB0YWJsZXQuIEhhbnlhIHRlcnNlZGlhIGFwYWJpbGEgdGFibGV0IGRpamFsYW5rYW4gZGFsYW0gbW9kIHVqaWFuIHBlbmdlbHVhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiJNZW5qYWxhbmthbiBzZWJhZ2FpIHVqaWFuIHBlbmdpbGFuZyBwZXJpbmdrYXQgcmVuZGFoLCBtZW1iZW5hcmthbiBha3NlcyBwZW51aCBrZXBhZGEgcGVya2FrYXNhbiB0ZWxlZm9uLiBIYW55YSB0ZXJzZWRpYSBhcGFiaWxhIHRlbGVmb24gZGlqYWxhbmthbiBkYWxhbSBtb2QgdWppYW4gcGVuZ2lsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNjYyNzE5MjMzMzM3MzQ2NTE0MyI+InRldGFwa2FuIGtlcnRhcyBkaW5kaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNzM3MzQ0NzkyMDk3NzYyNDc0NSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ldGFwa2FuIGtlcnRhcyBkaW5kaW5nIHNpc3RlbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iMzI3ODYwODE2NTk3NzczNjUzOCI+ImxhcmFza2FuIHNhaXoga2VydGFzIGRpbmRpbmcgYW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iODIzNTc4NDM4NDIyMzczMDA5MSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ldGFwa2FuIHBlbWJheWFuZyBzYWl6IGtlcnRhcyBkaW5kaW5nIHNpc3RlbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hc3RlckNsZWFyIiBtc2dpZD0iMjMxNTc1MDQyMzEzOTY5NzM5NyI+Im1lbmV0YXBrYW4gc2VtdWxhIHNpc3RlbSBrZXBhZGEgbGFsYWkga2lsYW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIzNjY1MzgwNDkyNjMzOTEwMjI2Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmV0YXBrYW4gc2VtdWxhIHNpc3RlbSBrZXBhZGEgdGV0YXBhbiBraWxhbmcgc2VwZW51aG55YSwgbWVtYWRhbSBzZW11YSBkYXRhLCBrb25maWd1cmFzaSwgZGFuIGFwbCB5YW5nIGRpcGFzYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZSIgbXNnaWQ9IjIwMjE2MTQ4Mjk1OTE3NzU2NDYiPiJ0ZXRhcGthbiBtYXNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTg5NjM0MTQzODE1MTE1Mjg4MSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW51a2FyIG1hc2EgamFtIHRhYmxldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg1NTcwMjczMDczODAyMCI+Ik1lbWJvbGVoa2FuIGFwbCB1bnR1ayBtZW51a2FyIHdha3R1IGphbSB0ZWxlZm9uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZVpvbmUiIG1zZ2lkPSIyOTQ1MDc5ODAxMDEzMDc3MzQwIj4idGV0YXBrYW4gem9uIHdha3R1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE2NzY5ODM3MTIzMTU4Mjc2NDUiPiJNZW1iZW5hcmthbiBhcGwgbWVudWthciB6b24gd2FrdHUgdGFibGV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQ5OTk0MzQ4ODQzNjYzMzM5OCI+Ik1lbWJlbmFya2FuIGFwbCBtZW51a2FyIHpvbiB3YWt0dSB0ZWxlZm9uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+ImJlcnRpbmRhayBzZWJhZ2FpIFBlcmtoaWRtYXRhblBlbmd1cnVzQWthdW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSIxOTQ4NDU1NTUyMzMzNjE1OTU0Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJ1YXQgcGFuZ2dpbGFuIGtlIFBlbmdlc2FoIEFrYXVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QWNjb3VudHMiIG1zZ2lkPSIxMDg2Nzk1NDY3NzYwMTIyMTE0Ij4iY2FyaSBha2F1biBwYWRhIHBlcmFudGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc0MTQ5NjUzNDc2OTY2MDAyNyI+Ik1lbWJlbmFya2FuIGFwbCBtZW5kYXBhdGthbiBzZW5hcmFpIGFrYXVuIHlhbmcgZGlrZW5hbGkgb2xlaCB0YWJsZXQuIEluaSBtdW5na2luIHRlcm1hc3VrIHNlYmFyYW5nIGFrYXVuIHlhbmcgZGlidWF0IG9sZWggYXBsaWthc2kgeWFuZyB0ZWxhaCBhbmRhIHBhc2FuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiJNZW1iZW5hcmthbiBhcGwgbWVuZGFwYXRrYW4gc2VuYXJhaSBha2F1biB5YW5nIGRpa2VuYWxpIG9sZWggdGVsZWZvbi4gSW5pIG11bmdraW4gdGVybWFzdWsgc2ViYXJhbmcgYWthdW4geWFuZyBkaWJ1YXQgb2xlaCBhcGxpa2FzaSB5YW5nIHRlbGFoIGFuZGEgcGFzYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4iYnVhdCBha2F1biBkYW4gdGV0YXBrYW4ga2F0YSBsYWx1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjU0NzIxMjQyOTY5MDg5NzcyNjAiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2d1bmFrYW4ga2Vib2xlaGFuIHBlbmdlc2FoIGFrYXVuIFBlbmd1cnVzIEFrYXVuLCB0ZXJtYXN1ayBtZW1idWF0IGFrYXVuIGRhbiBtZW5kYXBhdGthbiBzZXJ0YSBtZW5ldGFwa2FuIGthdGEgbGFsdWFubnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4idGFtYmFoIGF0YXUgYWxpaCBrZWx1YXIgYWthdW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiJNZW1iZW5hcmthbiBhcGwgbWVsYWtzYW5ha2FuIG9wZXJhc2kgc2VwZXJ0aSBtZW5hbWJhaCBkYW4gbWVuZ2FsaWgga2VsdWFyIGFrYXVuIGRhbiBtZW1hZGFta2FuIGthdGEgbGFsdWFubnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSIyMzU0ODEzOTYxNjM4Nzc2NDIiPiJndW5hIGFrYXVuIHBhZGEgcGVyYW50aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+Ik1lbWJlbmFya2FuIGFwbCBtZW1pbnRhIHRva2VuIHBlbmdlc2FoYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4ibGloYXQgc2FtYnVuZ2FuIHJhbmdrYWlhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiJNZW1iZW5hcmthbiBhcGwgbWVsaWhhdCBtYWtsdW1hdCB0ZW50YW5nIHNhbWJ1bmdhbiByYW5na2FpYW4gc2VwZXJ0aSByYW5na2FpYW4gbWFuYSB5YW5nIHd1anVkIGRhbiBiZXJzYW1idW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSI4MDE4NzU4MTM2NDA0MzIzNjU4Ij4iYWtzZXMgcmFuZ2thaWFuIHBlbnVoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSIzNDAzMDYyMTg3Nzc5NzI0MTg1Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJ1YXQgc29rZXQgcmFuZ2thaWFuIGRhbiBtZW5nZ3VuYWthbiBwcm90b2tvbCByYW5na2FpYW4gdGVyc3VhaS4gUGVueWVtYWsgaW1iYXMgZGFuIGFwbGlrYXNpIGxhaW4gbWVueWVkaWFrYW4gY2FyYSB1bnR1ayBtZW5naGFudGFyIGRhdGEga2UgaW50ZXJuZXQsIGphZGkga2ViZW5hcmFuIGluaSB0aWRhayBkaXBlcmx1a2FuIHVudHVrIG1lbmdoYW50YXIgZGF0YSBrZSBpbnRlcm5ldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MDU2NjAxNTk2NzU3NTE4OTYiPiJtZW5ndWJhaC9tZW1pbnRhcyB0ZXRhcGFuIGRhbiBsYWx1IGxpbnRhcyByYW5na2FpYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW51a2FyIHRldGFwYW4gcmFuZ2thaWFuIGRhbiB1bnR1ayBtZW1pbnRhcyBzZXJ0YSBtZW1lcmlrc2Egc2VtdWEgdHJhZmlrIHJhbmdrYWlhbiwgY29udG9obnlhIHVudHVrIG1lbnVrYXIgcHJva3NpIGRhbiBwb3J0IG1hbmEtbWFuYSBBUE4uIEFwbCBoYXNhZCBib2xlaCBtZW1hbnRhdSwgbWVuZ3ViYWggaGFsYSwgYXRhdSBtZW5ndWJhaCBzdWFpIHBha2V0IHJhbmdrYWlhbiB0YW5wYSBwZW5nZXRhaHVhbiBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iOTU4ODg0MjkxNDU0MzI3MzA5Ij4idHVrYXIga2VzYW1idW5nYW4gcmFuZ2thaWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBrZWFkYWFuIGtlc2FtYnVuZ2FuIHJhbmdrYWlhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iNTk1MjU4NDk2NDM3MzAxNzk2MCI+InR1a2FyIGtlc2FtYnVuZ2FuIGJlcnRhbWJhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBrZWFkYWFuIGtlc2FtYnVuZ2FuIHJhbmdrYWlhbiB0YW1iYXRhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiJ0dWthciB0ZXRhcGFuIHBlbmdndW5hYW4gZGF0YSBsYXRhciBiZWxha2FuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiJNZW1iZW5hcmthbiBhcGwgbWVudWthciB0ZXRhcGFuIHBlbmdndW5hYW4gZGF0YSBsYXRhciBiZWxha2FuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiJsaWhhdCBzYW1idW5nYW4gV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbGloYXQgbWFrbHVtYXQgdGVudGFuZyByYW5na2FpYW4gV2ktRmksIHNlcGVydGkgc2FtYSBhZGEgV2ktRmkgZGlkYXlha2FuIGRhbiBuYW1hIHBlcmFudGkgV2ktRmkgeWFuZyBkaXNhbWJ1bmdrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4ic2FtYnVuZyBkYW4gcHV0dXNrYW4gZGFyaSBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiJNZW1iZW5hcmthbiBhcGwgbWVueWFtYnVuZyBrZSBkYW4gbWVtdXR1c2thbiBzYW1idW5nYW4gZGFyaSB0aXRpayBjYXBhaWFuIFdpLUZpIGRhbiBtZW1idWF0IHBlcnViYWhhbiBrZXBhZGEga29uZmlndXJhc2kgcGVyYW50aSB1bnR1ayByYW5na2FpYW4gV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4iYmVuYXJrYW4gcGVuZXJpbWFhbiBXaS1GaSBNdWx0aXNpYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZXJpbWEgcGFrZXQgeWFuZyBkaWhhbnRhciBrZXBhZGEgc2VtdWEgcGVyYW50aSBwYWRhIHJhbmdrYWlhbiBXaS1GaSBtZW5nZ3VuYWthbiBhbGFtYXQgbXVsdGlzaWFyLCBidWthbiBoYW55YSB0YWJsZXQgYW5kYS4gQXBsIG1lbmdndW5ha2FuIGxlYmloIGt1YXNhIGJlcmJhbmRpbmcgbW9kIGJ1a2FuIG11bHRpc2lhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUxOTQ5NzA2MDI1MzQ5OTI2Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmVyaW1hIHBha2V0IHlhbmcgZGloYW50YXIga2VwYWRhIHNlbXVhIHBlcmFudGkgcGFkYSByYW5na2FpYW4gV2ktRmkgbWVuZ2d1bmFrYW4gYWxhbWF0IG11bHRpc2lhciwgYnVrYW4gaGFueWEgdGVsZWZvbiBhbmRhLiBJYSBtZW5nZ3VuYWthbiBsZWJpaCBrdWFzYSBiZXJiYW5kaW5nIG1vZCBidWthbiBtdWx0aXNpYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhBZG1pbiIgbXNnaWQ9IjYwMDY5NjczNzM5MzU5MjY2NTkiPiJha3NlcyB0ZXRhcGFuIEJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdrb25maWd1cmFzaWthbiB0YWJsZXQgQmx1ZXRvb3RoIHNldGVtcGF0IGRhbiBtZW5lbXVpIHNlcnRhIGJlcnBhc2FuZ2FuIGRlbmdhbiBwZXJhbnRpIGphdWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTMxNjgyMTU5MzMxNTQyMTM3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdrb25maWd1cmFzaWthbiB0ZWxlZm9uIEJsdWV0b290aCBzZXRlbXBhdCBkYW4gbWVuZW11aSBzZXJ0YSBiZXJwYXNhbmdhbiBkZW5nYW4gcGVyYW50aSBqYXVoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjQxOTU5MDcwMTA2MTAyMDU3MDMiPiJzYW1idW5nIGRhbiBwdXR1c2thbiBzYW1idW5nYW4gV2lNQVgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+Ik1lbWJlbmFya2FuIGFwbCBtZW5lbnR1a2FuIHNhbWEgYWRhIFdpTWFYIGRpZGF5YWthbiBkYW4gbWFrbHVtYXQgdGVudGFuZyBzZWJhcmFuZyByYW5na2FpYW4gV2lNYVggeWFuZyBkaXNhbWJ1bmdrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+IlR1a2FyIGtlYWRhYW4gV2lNQVgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMTU2NDU2NTA0MDg0MjAxODA1Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnlhbWJ1bmdrYW4gdGFibGV0IGtlIGRhbiBtZW55YWhzYW1idW5na2FuIHRhYmxldCBkYXJpIHJhbmdrYWlhbiBXaU1hWC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk3MDI1MDQzMDA0OTIzNzk4Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnlhbWJ1bmdrYW4gdGVsZWZvbiBrZSBkYW4gbWVueWFoc2FtYnVuZyB0ZWxlZm9uIGRhcmkgcmFuZ2thaWFuIFdpTWFYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoIiBtc2dpZD0iNjEyNzc2OTMzNjMzOTI3NjgyOCI+ImJlcnBhc2FuZ2FuIGRlbmdhbiBwZXJhbnRpIEJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+Ik1lbWJlbmFya2FuIGFwbCBtZWxpaGF0IGtvbmZpZ3VyYXNpIEJsdWV0b290aCBwYWRhIHRhYmxldCBkYW4gdW50dWsgbWVtYnVhdCBzZXJ0YSBtZW5lcmltYSBzYW1idW5nYW4gZGVuZ2FuIHBlcmFudGkgeWFuZyBkaXBhc2FuZ2thbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbGloYXQga29uZmlndXJhc2kgQmx1ZXRvb3RoIHBhZGEgdGVsZWZvbiBkYW4gbWVtYnVhdCBzZXJ0YSBtZW5lcmltYSBzYW1idW5nYW4gZGVuZ2FuIHBlcmFudGkgeWFuZyBkaXBhc2FuZ2thbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX25mYyIgbXNnaWQ9IjQ0MjMzNTEyNzQ3NTc4NzY5NTMiPiJtZW5nYXdhbCBLb211bmlrYXNpIE1lZGFuIERla2F0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+Ik1lbWJlbmFya2FuIGFwbCBiZXJrb211bmlrYXNpIGRlbmdhbiB0ZWcsIGthZCBkYW4gcGVtYmFjYSBLb211bmlrYXNpIE1lZGFuIERla2F0IChORkMpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+Imx1bXB1aGthbiBrdW5jaSBza3JpbiBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iNjAzNDIwMzA2NTA3NzEyMjk5MiI+Ik1lbWJlbmFya2FuIGFwbCBtZWx1bXB1aGthbiBrdW5jaSBrZWt1bmNpIGRhbiBzZWJhcmFuZyBrZXNlbGFtYXRhbiBrYXRhIGxhbHVhbiB5YW5nIGJlcmthaXRhbi4gU2ViYWdhaSBjb250b2gsIHRlbGVmb24gbWVsdW1wdWhrYW4ga3VuY2kga2VrdW5jaSBhcGFiaWxhIG1lbmVyaW1hIHBhbmdnaWxhbiB0ZWxlZm9uIG1hc3VrIGtlbXVkaWFuIG1lbmRheWFrYW4gc2VtdWxhIGt1bmNpIGtla3VuY2kgYXBhYmlsYSBwYW5nZ2lsYW4gc2VsZXNhaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSI2MjAxODEwMDA4MjMwNTAzMDUyIj4ibWVtYmFjYSB0ZXRhcGFuIHBlbnllZ2VyYWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSIyNzA2NzQ1Njc0NTY5Njc4NjQ0Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2EgdGV0YXBhbiBzZWdlcmFrIHVudHVrIGFrYXVuLiBTZWJhZ2FpIGNvbnRvaCwgaW5pIGJvbGVoIG1lbmVudHVrYW4gc2FtYSBhZGEgYXBsIE9yYW5nIGRpc2VnZXJha2thbiBkZW5nYW4gYWthdW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiJ0b2dvbCBzZWdlcmFrIGhpZHVwIGRhbiBtYXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI4OTU2MjYyNTkxMzA2MzY5ODY4Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmd1YmFoIHN1YWkgdGV0YXBhbiBzZWdlcmFrIHVudHVrIGFrYXVuLiBTZWJhZ2FpIGNvbnRvaCwgaW5pIGJvbGVoIGRpZ3VuYWthbiB1bnR1ayBtZW5kYXlha2FuIHBlbnllZ2VyYWthbiBhcGwgT3JhbmcgZGVuZ2FuIGFrYXVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjczOTY1Nzc0NTEzNjAyMDI0NDgiPiJiYWNhIHN0YXRpc3RpayBwZW55ZWdlcmFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1N0YXRzIiBtc2dpZD0iMTUxMDE0Mzc2MTc1NzYwNjE1NiI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1iYWNhIHN0YXRpc3RpayBzZWdlcmFrIHVudHVrIGFrYXVuLCB0ZXJtYXN1ayBzZWphcmFoIGFjYXJhIHNlZ2VyYWsgZGFuIGJlcmFwYSBiYW55YWsgZGF0YSBkaXNlZ2VyYWtrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNDc1NjYwOTYzNzA1MzM1MzMxOCI+ImJhY2Egc3VhcGFuIGxhbmdnYW5hbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI1NTU3MDU4OTA3OTA2MTQ0NTA1Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmRhcGF0a2FuIGJ1dGlyYW4gbWVuZ2VuYWkgc3VhcGFuIHRlcnNlZ2VyYWsgc2VtYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI5MDE1MjQ2MzI1NDA4MjA5Mjk2Ij4idHVsaXMgc3VhcGFuIHlhbmcgZGlsYW5nZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI2OTI4OTMwMTg4ODI2MDg5NDEzIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmd1YmFoIHN1YWkgc3VhcGFuIHNlZ2VyYWthbiBzZW1hc2EgYW5kYS4gQXBsIGhhc2FkIGJvbGVoIG1lbnVrYXIgc3VhcGFuIGFuZGEgeWFuZyBkaXNlZ2VyYWtrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjQxMDcxMDE1MjU3NDYwMzU3MTgiPiJiYWNhIGlzdGlsYWggeWFuZyBhbmRhIHRhbWJhaGthbiBrZXBhZGEga2FtdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIHNlbXVhIHBlcmthdGFhbiwgbmFtYSBkYW4gZnJhc2EgeWFuZyBtdW5na2luIHRlbGFoIGRpc2ltcGFuIG9sZWggcGVuZ2d1bmEgZGFsYW0ga2FtdXMgcGVuZ2d1bmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4idGFtYmFoIHBlcmthdGFhbiBrZSBrYW11cyBkaXRha3JpZmthbiBwZW5nZ3VuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiJNZW1iZW5hcmthbiBhcGwgbWVudWxpcyBwZXJrYXRhYW4gYmFoYXJ1IGtlIGRhbGFtIGthbXVzIHBlbmdndW5hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4idWppIGFrc2VzIGtlIHN0b3JhbiBkaWxpbmR1bmdpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+InVqaSBha3NlcyBrZSBzdG9yYW4gZGlsaW5kdW5naSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY0MjQ3MzI5MjM0ODEzMjA3MiI+IkFwbCBib2xlaCB1amkga2ViZW5hcmFuIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTkxNDQwMjY4NDY4NTg0ODgyOCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndWppIGtlYmVuYXJhbiB1bnR1ayBrYWQgU0QgeWFuZyBha2FuIHRlcnNlZGlhIHBhZGEgcGVyYW50aSBha2FuIGRhdGFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijg0ODU5NzkwNjIyNTQ2NjY3NDgiPiJ1YmFoIHN1YWkgYXRhdSBwYWRhbSBrYW5kdW5nYW4gc3RvcmFuIFVTQiBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiJ1YmFoIHN1YWkgYXRhdSBwYWRhbSBrYW5kdW5nYW4ga2FkIFNEIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTc1NDA2Mjk5NDQ1NzEwODg4Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbnVsaXMga2Ugc3RvcmFuIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiJNZW1iZW5hcmthbiBhcGwgbWVudWxpcyBrZSBrYWQgU0QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTk4MzkxOTk3MDY4NzkwMTUiPiJ1Ymggc3VhaS9wZG0ga2RnIHN0cm4gbWRpYSBkbG0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxODkxNjA1OTc2OTg1MjkxODUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ3ViYWggc3VhaSBrYW5kdW5nYW4gc3RvcmFuIG1lZGlhIGRhbGFtYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+InVydXMgc3RvcmFuIGRva3VtZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODcwNDMyMzE3NjkxNDEyMTQ4NCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndXJ1cyBzdG9yYW4gZG9rdW1lbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjgxNTA2MTM4MjM5MDA0NjA1NzYiPiJtZW5nYWtzZXMgc3RvcmFuIGx1YXJhbiB1bnR1ayBzZW11YSBwZW5nZ3VuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjMyMTUyMDgzNTc0MTU4OTEzMjAiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2Frc2VzIHN0b3JhbiBsdWFyYW4gdW50dWsgc2VtdWEgcGVuZ2d1bmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTY1NjQ4NzI2NDgxOTY2OTgyNCI+ImFrc2VzIHNpc3RlbSBmYWlsIGNhY2hlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiJNZW1iZW5hcmthbiBhcGwgbWVtYmFjYSBkYW4gbWVudWxpcyBjYWNoZSBzaXN0ZW0gZmFpbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZV9zaXAiIG1zZ2lkPSI1OTg2OTUyMzYyNzk1ODcwNTAyIj4ibWVtYnVhdC9tZW5lcmltYSBwYW5nZ2lsYW4gSW50ZXJuZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5nZ3VuYWthbiBwZXJraGlkbWF0YW4gU0lQIHVudHVrIG1lbWJ1YXQvbWVuZXJpbWEgcGFuZ2dpbGFuIEludGVybmV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4iYmFjYSBzZWphcmFoIHBlbmdndW5hYW4gcmFuZ2thaWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3Njg5MDYwNzQ5ODE5MTI2NDcyIj4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2Egc2VqYXJhaCBwZW5nZ3VuYWFuIHJhbmdrYWlhbiB1bnR1ayByYW5na2FpYW4gZGFuIGFwbCBraHVzdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iMjU2MjA1MzU5MjMzOTg1OTk5MCI+InVydXMgZGFzYXIgcmFuZ2thaWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ3VydXMgZGFzYXIgcmFuZ2thaWFuIGRhbiBtZW5lbnR1a2FuIHBlcmF0dXJhbiBraHVzdXMgYXBsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1MDg4MjE3MzA5MDg4NzI5NjUwIj4idWJhaCBzdWFpIHBlcmFrYXVuYW4gcGVuZ2d1bmFhbiByYW5na2FpYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ3ViYWggc3VhaSBiYWdhaW1hbmEgcGVuZ2d1bmFhbiByYW5na2FpYW4gZGlhbWJpbCBraXJhIHRlcmhhZGFwIGFwbC4gQnVrYW4gdW50dWsgZGlndW5ha2FuIG9sZWggYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4idWJhaCB0YW5kYSBzb2tldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iNzY1NTU2ODQzMzY5NjM1NjU3OCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndWJhaCBzdWFpIHRhbmRhIHNva2V0IHVudHVrIGxhbHVhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9Ijc2NzM0MTY0ODc4NzM0MzIyNjgiPiJwZW1iZXJpdGFodWFuIGFrc2VzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9IjQ1ODQ1Nzc0MjY4MzQzMTM4NyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5kYXBhdGthbiBzZW11bGEsIG1lbWVyaWtzYSBkYW4gbWVtYWRhbSBiZXJzaWggcGVtYmVyaXRhaHVhbiwgdGVybWFzdWsgeWFuZyBkaXNpYXJrYW4gb2xlaCBhcGwgbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI3MDU3NzY0NzQyMjExNjU2NjU0Ij4iaWthdCBrZXBhZGEgcGVya2hpZG1hdGFuIHBlbmRlbmdhciBwZW1iZXJpdGFodWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9Ijk4NTY5NzkxODU3NjkwMjk4NiI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBwZXJraGlkbWF0YW4gcGVuZGVuZ2FyIHBlbWJlcml0YWh1YW4uIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iMzY5OTYwMDgzMzk3NTExNzQ3OCI+Imd1bmFrYW4gYXBsIGtvbmZpZ3VyYXNpIHlhbmcgZGlzZWRpYWthbiBvbGVoIHBlbWJhd2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnZva2VDYXJyaWVyU2V0dXAiIG1zZ2lkPSI0MTU5NTQ5MTUyNTI5MTExOTIwIj4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgbWVuZ2d1bmFrYW4gYXBsIGtvbmZpZ3VyYXNpIHlhbmcgZGliZXJpa2FuIG9sZWggcGVtYmF3YS4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSI0NDk3NDIwNzI4ODU3NTg1NzkxIj4iVGV0YXBrYW4gcGVyYXR1cmFuIGthdGEgbGFsdWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19saW1pdFBhc3N3b3JkIiBtc2dpZD0iMzI1MjExNDIwMzkxOTUxMDM5NCI+Ik1lbmdhd2FsIHBhbmphbmcgZGFuIGFrc2FyYSB5YW5nIGRpYmVuYXJrYW4gZGFsYW0ga2F0YSBsYWx1YW4gYnVrYSBrdW5jaSBza3Jpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2F0Y2hMb2dpbiIgbXNnaWQ9IjkxNDEzMDY0Njk0MjE5OTUwMyI+Ik1lbWFudGF1IHBlcmN1YmFhbiBidWthIGt1bmNpIHNrcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjE1NzI5Mjk0MjE1MDcwMDcyIj4iTWVtYW50YXUgYmlsYW5nYW4ga2F0YSBsYWx1YW4geWFuZyB0ZXJzaWxhcCBkaXRhaXAgYXBhYmlsYSBtZW1idWthIHNrcmluLCBkYW4gbWVuZ3VuY2kgdGFibGV0IGF0YXUgbWVtYWRhbSBzZW11YSBkYXRhIHRhYmxldCBqaWthIHRlcmxhbHUgYmFueWFrIGtlc2lsYXBhbiBtZW5haXAga2F0YSBsYWx1YW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcxMjMyMzA5MTg0Njc2MTA3MyI+Ik1lbWFudGF1IGJpbGFuZ2FuIGthdGEgbGFsdWFuIHNhbGFoIHlhbmcgZGl0YWlwIHNlbWFzYSBtZW1idWthIHNrcmluLCBkYW4gbWVuZ3VuY2kgdGVsZWZvbiBhdGF1IG1lbWFkYW0gc2VtdWEgZGF0YSB0ZWxlZm9uIGppa2EgdGVybGFsdSBiYW55YWsga2F0YSBsYWx1YW4gc2FsYWggZGl0YWlwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+IlR1a2FyIGthdGEgbGFsdWFuIGJ1a2Ega3VuY2kgc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiJUdWthciBrYXRhIGxhbHVhbiBidWthIGt1bmNpIHNrcmluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9mb3JjZUxvY2siIG1zZ2lkPSIyMjc0MDg1Mzg0NzA0MjQ4NDMxIj4iS3VuY2kgc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2ZvcmNlTG9jayIgbXNnaWQ9IjExNDE3OTc1ODg0MDM4MjcxMzgiPiJNZW5nYXdhbCBjYXJhIGRhbiBiaWxhIHNrcmluIGRpa3VuY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dpcGVEYXRhIiBtc2dpZD0iMzkxMDU0NTQ0Njc1ODYzOTcxMyI+IlBhZGFta2FuIHNlbXVhIGRhdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzA2MTg0MDk2MDY3NzU2ODc2Ij4iTWVtYWRhbWthbiBkYXRhIHRhYmxldCB0YW5wYSBhbWFyYW4gZGVuZ2FuIG1lbGFrdWthbiB0ZXRhcGFuIHNlbXVsYSBkYXRhIGtpbGFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTA5Njg5NTYwNDU3NDE4ODM5MSI+Ik1lbWFkYW1rYW4gZGF0YSB0ZWxlZm9uIHRhbnBhIGFtYXJhbiBkZW5nYW4gbWVsYWt1a2FuIHRldGFwYW4gc2VtdWxhIGRhdGEga2lsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9zZXRHbG9iYWxQcm94eSIgbXNnaWQ9IjI3ODQ4MjgyOTM3NDc3OTE0NDYiPiJUZXRhcGthbiBwcm9rc2kgZ2xvYmFsIHBlcmFudGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+Ik1lbmV0YXBrYW4gcHJva3NpIGdsb2JhbCBwZXJhbnRpIHVudHVrIGRpZ3VuYWthbiBzZW1lbnRhcmEgZGFzYXIgZGlkYXlha2FuLiBIYW55YSBwZW50YWRiaXIgcGVyYW50aSBwZXJ0YW1hIGJvbGVoIG1lbmV0YXBrYW4gcHJva3NpIGdsb2JhbCBkZW5nYW4gYmVya2VzYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iODg1Mjc5MTUxODQ3MjU0MDU2Ij4iVHRwa24gdG10IHRtcGggay9sbG4ga2NpIHNrcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19leHBpcmVQYXNzd29yZCIgbXNnaWQ9IjE3Mjk3MjUyMjYzMTQ2OTE1OTEiPiJLYXdhbCBrZWtlcmFwYW4gcGVudWthcmFuIGthdGEgbGFsdWFuIGt1bmNpIHNrcmluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iODkwMTMyNjE5OTkwOTEzMjkxNSI+IlRldGFwa2FuIHBlbnl1bGl0YW4gc3RvcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+Ik1lbWVybHVrYW4gZGF0YSBhcGwgeWFuZyBkaXNpbXBhbiBpdHUgZGlzdWxpdGthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUNhbWVyYSIgbXNnaWQ9IjYzOTUzMDEwMjMxNTIyOTc4MjYiPiJMdW1wdWhrYW4ga2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+Ik1lbmdoYWxhbmcgcGVuZ2d1bmFhbiBzZW11YSBrYW1lcmEgcGVyYW50aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiJMdW1wdWggY2lyaSBwZWxpbmR1bmcga2VrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIzNDY3MDgyMjcyMTg2NTM0NjE0Ij4iQ2VnYWggcGVuZ2d1bmFhbiBiZWJlcmFwYSBjaXJpIGRhbGFtIHBlbGluZHVuZyBrZWt1bmNpLiI8L3N0cmluZz4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJwaG9uZVR5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iODkwMTA5ODMzNjY1ODcxMDM1OSI+IkxhbWFuIFV0YW1hIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODY5OTIzNjUwNTI3MTM2NjE1Ij4iTXVkYWggYWxpaCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc4OTc1NDQ2NTQyNDI4NzQ1NDMiPiJLZXJqYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjExMDM2MDE0MzMzODIxNTgxNTUiPiJGYWtzIEtlcmphIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTczNTE3NzE0NDk0ODMyOTM3MCI+IkZha3MgUnVtYWgiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MDM4Nzg2NzQ0NzcyMDczOTQiPiJBbGF0IGtlbHVpIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+IkxhaW4tbGFpbiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiJQZXJpYmFkaSI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICA8c3RyaW5nLWFycmF5IG5hbWU9ImVtYWlsQWRkcmVzc1R5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iODA3Mzk5NDM1Mjk1NjEyOTEyNyI+IlJ1bWFoIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNzA4NDIzNzM1NjYwMjYyNTYwNCI+IktlcmphIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+IkxhaW4tbGFpbiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjIzNzQ5MTM5NTI4NzAxMTA2MTgiPiJQZXJpYmFkaSI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICA8c3RyaW5nLWFycmF5IG5hbWU9InBvc3RhbEFkZHJlc3NUeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY4ODAyNTc2MjY3NDAwNDcyODYiPiJSdW1haCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU2MjkxNTM5NTYwNDUxMDkyNTEiPiJLZXJqYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiJMYWluLWxhaW4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI0OTMyNjgyODQ3NTk1Mjk5MzY5Ij4iUGVyaWJhZGkiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJpbUFkZHJlc3NUeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE3Mzg1ODUxOTQ2MDE0NzY2OTQiPiJMYW1hbiBVdGFtYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjEzNTk2NDQ1NjU2NDczODM3MDgiPiJLZXJqYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiJMYWluLWxhaW4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4iUGVyaWJhZGkiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmdhbml6YXRpb25UeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc1NDYzMzU2MTIxODkxMTU2MTUiPiJLZXJqYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjQzNzgwNzQxMjkwNDk1MjAzNzMiPiJMYWluLWxhaW4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNDU1MDQ3NDY4NTgzOTY1MTA0Ij4iUGVyaWJhZGkiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJpbVByb3RvY29scyI+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijg1OTUyNjEzNjM1MTg0NTk1NjUiPiJBSU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI3MzkwNDczNjI4Mjc1NDkwNzAwIj4iV2luZG93cyBMaXZlIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNzg4Mjg3NzEzNDkzMTQ1ODIxNyI+IllhaG9vIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTAzNTM3NjMxMzIwMDU4NTI0MiI+IlNreXBlIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNzUzMjM2MzE3ODQ1OTQ0NDk0MyI+IlFRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzcxMzQ0MTAzNDI5OTY2MDc0OSI+IkJ1YWwgR29vZ2xlIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjUwNjg1NzMxMjcxODYzMDgyMyI+IklDUSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE2NDg3OTc5MDM3ODUyNzkzNTMiPiJKYWJiZXIiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUN1c3RvbSIgbXNnaWQ9IjE2NDQ3MzgwNTkwNTMzNTU4MjAiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUhvbWUiIG1zZ2lkPSIyNTcwOTIzNDYzMDMzOTg1ODg3Ij4iTGFtYW4gVXRhbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNb2JpbGUiIG1zZ2lkPSI2NTAxNDYzNTU3NzU0NzUxMDM3Ij4iTXVkYWggQWxpaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmsiIG1zZ2lkPSI4ODYzOTM5NjY3MDU5OTExNjMzIj4iS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhXb3JrIiBtc2dpZD0iMzUxNzc5MjE2MDAwODg5MDkxMiI+IkZha3MgS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhIb21lIiBtc2dpZD0iMjA2NzI2NTk3MjMyMjk3MTQ2NyI+IkZha3MgUnVtYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVQYWdlciIgbXNnaWQ9Ijc1ODIzNTk5NTUzOTQ5MjE3MzIiPiJBbGF0IEtlbHVpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXIiIG1zZ2lkPSIxNTQ0NDI1ODQ3ODY4NzY1OTkwIj4iTGFpbi1sYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FsbGJhY2siIG1zZ2lkPSIyNzEyMTc1MjAzMDY1Njc4MjA2Ij4iUGFuZ2dpbCBiYWxpayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNhciIgbXNnaWQ9Ijg3MzgzNjA2ODk2MTY3MTY5ODIiPiJLZXJldGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDb21wYW55TWFpbiIgbXNnaWQ9IjU0MDQzNDM1NjQ2MTQ3ODkxNiI+Ik5vbWJvciBVdGFtYSBTeWFyaWthdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4iVXRhbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVPdGhlckZheCIgbXNnaWQ9Ijg1ODc2NTcxNDUwNzI0NDY1NjUiPiJGYWtzIExhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVSYWRpbyIgbXNnaWQ9IjQwOTM3MzgwNzk5MDg2Njc1MTMiPiJSYWRpbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVRlbGV4IiBtc2dpZD0iMzM2Nzg3OTk1MjQ3NjI1MDUxMiI+IlRlbGVrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVR0eVRkZCIgbXNnaWQ9Ijg2MDY1MTQzNzg1ODUwMDAwNDQiPiJUVFkgVEREIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya01vYmlsZSIgbXNnaWQ9IjEzMTE0MjY5ODkxODQwNjU3MDkiPiJUZWxlZm9uIE11ZGFoIEFsaWggS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrUGFnZXIiIG1zZ2lkPSI2NDk5Mzg3MzEyMzExNTcwNTYiPiJBbGF0IEtlbHVpIEtlcmphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQXNzaXN0YW50IiBtc2dpZD0iNTU5Njc3MjYzNjEyODU2Mjg4NCI+IlBlbWJhbnR1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW1zIiBtc2dpZD0iNzI1NDQ5MjI3NTUwMjc2ODk5MiI+Ik1NUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUN1c3RvbSIgbXNnaWQ9Ijc4Mzc1ODYxOTg0NTgwNzM0MDQiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUJpcnRoZGF5IiBtc2dpZD0iMjgxMzM3OTg0NDIxMTM5MDc0MCI+IkhhcmkgTGFoaXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVBbm5pdmVyc2FyeSIgbXNnaWQ9IjM4NzY3Nzk3NDQ1MTgyODQwMDAiPiJVbGFuZyB0YWh1biI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZU90aGVyIiBtc2dpZD0iNzM4ODE3ODkzOTAxMDE0MzA3NyI+IkxhaW4tbGFpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg1MjU5NjAyNTc4MDQyMTM4NDYiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUhvbWUiIG1zZ2lkPSI0NDkyMjcyMzYxNDA0MzM5MTkiPiJSdW1haCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4iS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVPdGhlciIgbXNnaWQ9IjI5MjMwMDg2OTUyNzI2Mzk1NDkiPiJMYWluLWxhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVNb2JpbGUiIG1zZ2lkPSIxMTk5MTkwMDUzMjExNjYyMDUiPiJNdWRhaCBBbGloIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVIb21lIiBtc2dpZD0iODE2NTc1Njk3NzE4NDQ4MzA5NyI+IkxhbWFuIFV0YW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZVdvcmsiIG1zZ2lkPSI1MjY4MTcyNzcyMzg3Njk0NDk1Ij4iS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4iTGFpbi1sYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlQ3VzdG9tIiBtc2dpZD0iMjA3NDAyODc1NTUyNzgyNjA0NiI+IlBlcmliYWRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlSG9tZSIgbXNnaWQ9IjYyNDExODEwMzI5NTQyNjM4OTIiPiJMYW1hbiBVdGFtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltVHlwZVdvcmsiIG1zZ2lkPSIxMzcxNDg5MjkwMjQyNDMzMDkwIj4iS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVR5cGVPdGhlciIgbXNnaWQ9IjUzNzcwMDc0OTU3MzU5MTU0NzgiPiJMYWluLWxhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQ3VzdG9tIiBtc2dpZD0iNjkxOTQ1MzgzNjYxODc0OTk5MiI+IlBlcmliYWRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEFpbSIgbXNnaWQ9IjcwNTAzNjA2MTIzNjgzODM0MTciPiJBSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTXNuIiBtc2dpZD0iMTQ0NTU2NTQ1NDIwNzY5NDQyIj4iV2luZG93cyBMaXZlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFlhaG9vIiBtc2dpZD0iODI3MTQzOTQwODQ2OTAyMTI3MyI+IllhaG9vIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFNreXBlIiBtc2dpZD0iOTAxOTI5Njc0NDYyMjgzMjk1MSI+IlNreXBlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFFxIiBtc2dpZD0iODg4NzQ4NDM3OTQ5NDExMTg4NCI+IlFRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiJIYW5nb3V0cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZVdvcmsiIG1zZ2lkPSIyOTI2ODg3MDUwNTM2Mzg3MiI+IktlcmphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZU90aGVyIiBtc2dpZD0iMzk1MTc4MTEzMTU3MDEyNDA4MiI+IkxhaW4tbGFpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVDdXN0b20iIG1zZ2lkPSIyMjU1MjM0MTUzNzIwODgzMjIiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUN1c3RvbSIgbXNnaWQ9IjM1NDI0MDM2Nzk4MjcyOTczMDAiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjYyNzQzMzQ4MjUxOTUzNzkwNzYiPiJQZW1iYW50dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUJyb3RoZXIiIG1zZ2lkPSI4NzU3OTEzNTA2Nzg0MDY3NzEzIj4iQWJhbmcvQWRpayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUNoaWxkIiBtc2dpZD0iMTg5MDc0NjI3NzI3Njg4MTYyNiI+IkFuYWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVEb21lc3RpY1BhcnRuZXIiIG1zZ2lkPSI2OTA0ODA3MTEyMTIxMTIyMTMzIj4iUmFrYW4gS29uZ3NpIERvbWVzdGlrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRmF0aGVyIiBtc2dpZD0iNTIyODAzNDY4NzA4MjA1MDcyNSI+IkJhcGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGcmllbmQiIG1zZ2lkPSI3MzEzMTA2NzYyNDgzMzkxMjYyIj4iUmFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNYW5hZ2VyIiBtc2dpZD0iNjM2NTY3Nzg2MTYxMDEzNzg5NSI+IlBlbmd1cnVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTW90aGVyIiBtc2dpZD0iNDU3ODU3MTM1Mjk2Mjc1ODMwNCI+IklidSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcmVudCIgbXNnaWQ9IjQ3NTU2MzU1Njc1NjI5MjUyMjYiPiJJYnUgYmFwYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcnRuZXIiIG1zZ2lkPSI3MjY2NDkwMjg1MTIwMjYyNzgxIj4iUmFrYW4gS29uZ3NpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVmZXJyZWRCeSIgbXNnaWQ9IjEwMTU3MzA1OTg0NDEzNTUyNCI+IkRpcnVqdWsgb2xlaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlbGF0aXZlIiBtc2dpZD0iMTc5OTgxOTkzMDA4NTYxMDI3MSI+IlNhdWRhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTaXN0ZXIiIG1zZ2lkPSIxNzM1OTgzNTU0NDc5MDc2NDgxIj4iS2FrYWsvQWRpayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNwb3VzZSIgbXNnaWQ9IjM5NDEzNjkzOTQyODY5ODExNyI+IlBhc2FuZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVDdXN0b20iIG1zZ2lkPSIyNDczNTgwNTkzMTExNTkwOTQ1Ij4iUGVyaWJhZGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iUnVtYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IkxhaW4tbGFpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlRhaXAga29kIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlRhaXAgUFVLIGRhbiBrb2QgUElOIGJhaGFydSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iS29kIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iS29kIFBJTiBCYWhhcnUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJTZW50dWggdW50dWsgbWVuYWlwIGthdGEgbGFsdWFuIjwvZm9udD48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iVGFpcCBrYXRhIGxhbHVhbiB1bnR1ayBtZW1idWthIGt1bmNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iVGFpcCBQSU4gdW50dWsgbWVtYnVrYSBrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IktvZCBQSU4gc2FsYWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IlVudHVrIG1lbWJ1a2Ega3VuY2ksIHRla2FuIE1lbnUsIGtlbXVkaWFuIDAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxfZGlhbG9nX251bWJlcl9mb3JfZGlzcGxheSIgbXNnaWQ9IjY5NjE5MjEwMzE5NTA5MDk3MCI+Ik5vbWJvciBrZWNlbWFzYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg5NjM4MzkyNDI1NjU2NTMxOTIiPiJUaWFkYSBwZXJraGlkbWF0YW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zY3JlZW5fbG9ja2VkIiBtc2dpZD0iNzI4ODQ0MzA3NDgwNjgzMjkwNCI+IlNrcmluIGRpa3VuY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2VuYWJsZWQiIG1zZ2lkPSI0NjE1NDA1MTYxNDEyNjA0OSI+IlRla2FuIE1lbnUgdW50dWsgbWVueWFoc2VrYXQgYXRhdSBtZW1idWF0IHBhbmdnaWxhbiBrZWNlbWFzYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iNjg2MjYwMDI4Nzk3MTU4MzY0Ij4iVGVrYW4gTWVudSB1bnR1ayBtZW1idWthIGt1bmNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI3NDc4NzAzMjU0OTY0ODEwMzAyIj4iTHVraXNrYW4gY29yYWsgdW50dWsgbWVtYnVrYSBrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZW1lcmdlbmN5X2NhbGwiIG1zZ2lkPSI1MzQ3NjMzNzg0NDAxMjg1MjI1Ij4iUGFuZ2dpbGFuIGtlY2VtYXNhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4iS2VtYmFsaSBrZSBwYW5nZ2lsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fY29ycmVjdCIgbXNnaWQ9IjkwMzkwMDg2NTAzNjIyNjEyMzciPiJCZXR1bCEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fd3JvbmciIG1zZ2lkPSI0MzE3OTU1MDE0OTQ4MTA4Nzk0Ij4iQ3ViYSBsYWdpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXNzd29yZF93cm9uZyIgbXNnaWQ9IjU3Mzc4MTUzOTMyNTMxNjUzMDEiPiJDdWJhIGxhZ2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iVGVsYWggbWVsZXBhc2kgaGFkIGN1YmFhbiBCdWthIEt1bmNpIFdhamFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wbHVnZ2VkX2luIiBtc2dpZD0iODA1Nzc2MjgyODM1NTU3MjMxNSI+Ik1lbmdlY2FzLCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPikiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiJTdWRhaCBkaWNhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYmF0dGVyeV9zaG9ydCIgbXNnaWQ9IjQ0NzcyNjQ4NDkzODY4NTAyNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9sb3dfYmF0dGVyeSIgbXNnaWQ9IjE0ODI4NzM5ODE5MTkyNDk3NDAiPiJTYW1idW5na2FuIHBlbmdlY2FzIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+IlRpYWRhIGthZCBTSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MTY1OTE5NjA5NTc5MTQ3NCI+IlRpYWRhIGthZCBTSU0gZGFsYW0gdGFibGV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODY5MjA1ODU2OTUxNjkwNzgiPiJLYWQgU0lNIHRpYWRhIGRhbGFtIHRlbGVmb24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4iTWFzdWtrYW4ga2FkIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IkthZCBTSU0gdGlhZGEgYXRhdSB0aWRhayBib2xlaCBkaWJhY2EuIFNpbGEgbWFzdWtrYW4ga2FkIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiJLYWQgU0lNIHRpZGFrIGJvbGVoIGRpZ3VuYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iOTEwOTA0NjQzNDMzMTUxMzcxIj4iS2FkIFNJTSBhbmRhIHRlbGFoIGRpbHVtcHVoa2FuIHNlY2FyYSBrZWthbC5cbiBIdWJ1bmdpIHBlbWJla2FsIHBlcmtoaWRtYXRhbiB3YXlhcmxlcyBhbmRhIHVudHVrIG1lbmRhcGF0a2FuIGthZCBTSU0gbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjAxNTk0OTA1MTUyNzQ2ODg2Ij4iQnV0YW5nIGxhZ3Ugc2ViZWx1bW55YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI2MDg5Mjk3NjUwNDgxMjkyMzYzIj4iQnV0YW5nIGxhZ3Ugc2V0ZXJ1c255YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1OTA4ODc4Njc4MDEyODAwMSI+IkJ1dGFuZyBKZWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU4ODg0MjI5MzgzNTEwMTk0MjYiPiJCdXRhbmcgbWFpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTYyMzE4Mzc4NzY2OTg3NjAxIj4iQnV0YW5nIGJlcmhlbnRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxzX29ubHkiIG1zZ2lkPSI2NzMzOTc4MzA0Mzg2MzY1NDA3Ij4iUGFuZ2dpbGFuIGtlY2VtYXNhbiBzYWhhamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIxNDMzODkyMjQ5ODYwMjg1MDEiPiJSYW5na2FpYW4gZGlrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9Ijc0NDE3OTczMzk5NzYyMzAiPiJLYWQgU0lNIGRpa3VuY2kgZGVuZ2FuIFBVSy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiJMaWhhdCBQYW5kdWFuIFBlbmdndW5hIGF0YXUgaHVidW5naSBQZW5qYWdhYW4gUGVsYW5nZ2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+IkthZCBTSU0gZGlrdW5jaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiJNZW1idWthIGt1bmNpIGthZCBTSU0uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjY0ODE2MjM4MzAzNDQxMDcyMjIiPiJBbmRhIHRlbGFoIHRlcnNpbGFwIG1lbHVraXMgY29yYWsgYnVrYSBrdW5jaSBhbmRhIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFxuXG5TaWxhIGN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+IkFuZGEgdGVsYWggdGVyc2lsYXAgdGFpcCBtZW5haXAga2F0YSBsYWx1YW4gYW5kYSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IkFuZGEgdGVsYWggdGVyc2lsYXAgdGFpcCBQSU4gYW5kYSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IkFuZGEgdGVsYWggdGVyc2lsYXAgbWVsdWtpcyBjb3JhayBidWthIGt1bmNpIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCBhbmRhIGFrYW4gZGltaW50YSBtZW1idWthIGt1bmNpIHRhYmxldCBhbmRhIG1lbmdndW5ha2FuIGxvZyBtYXN1ayBHb29nbGUgYW5kYS5cblxuIEN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNTkwMjI3NTU5NzYzNzYyNzUxIj4iQW5kYSB0ZWxhaCB0ZXJzaWxhcCBsdWtpcyBjb3JhayBidWthIGt1bmNpIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCBhbmRhIGFrYW4gZGltaW50YSBtZW1idWthIGt1bmNpIHRlbGVmb24gYW5kYSBtZW5nZ3VuYWthbiBsb2cgbWFzdWsgR29vZ2xlIGFuZGEuXG5cbiBTaWxhIGN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTI4MTA2Mzk5NzQ1NzU1NjA0Ij4iQW5kYSB0ZWxhaCBtZW5jdWJhIHVudHVrIG1lbWJ1a2Ega3VuY2kgdGFibGV0IGRlbmdhbiBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgdGlkYWsgYmVyamF5YSwgdGFibGV0IGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2VwYWRhIHRldGFwYW4gbGFsYWkga2lsYW5nIGRhbiBzZW11YSBkYXRhIHBlbmdndW5hIGFrYW4gaGlsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODYwMzU2NTE0MjE1NjgyNjU2NSI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRlbGVmb24gZGVuZ2FuIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCB0ZWxlZm9uIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2VwYWRhIHRldGFwYW4gbGFsYWkga2lsYW5nIGRhbiBzZW11YSBkYXRhIHBlbmdndW5hIGFrYW4gaGlsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI4MDg3MzUxNjQ5MzkzNDM2NSI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRhYmxldCBzZWNhcmEgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkuIFRhYmxldCBraW5pIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2UgdGV0YXBhbiBsYWxhaSBraWxhbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiJBbmRhIHRlbGFoIG1lbmN1YmEgdW50dWsgbWVtYnVrYSBrdW5jaSB0ZWxlZm9uIHNlY2FyYSBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FsaS4gVGVsZWZvbiBraW5pIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2VwYWRhIHRldGFwYW4gbGFsYWkga2lsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYyNTE0ODAzNDMzOTQzODk2NjUiPiJDdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiJMdXBhIGNvcmFrPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+IkJ1a2Ega3VuY2kgYWthdW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiJUZXJsYWx1IGJhbnlhayBwZXJjdWJhYW4gbWVsdWtpcyBjb3JhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiJVbnR1ayBtZW1idWthIGt1bmNpLCBsb2cgbWFzdWsgZGVuZ2FuIGFrYXVuIEdvb2dsZSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI4ODQ2ODgxNDI0MTA2NDg0NDQ3Ij4iTmFtYSBQZW5nZ3VuYSAoRS1tZWwpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjU5NTgwMjgzODM5NTQ3Mzg1MjgiPiJLYXRhIGxhbHVhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4iTG9nIG1hc3VrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjEzNjQwNTE0NzMzNDc0ODU5MDgiPiJOYW1hIHBlbmdndW5hIGF0YXUga2F0YSBsYWx1YW4gdGlkYWsgc2FoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiJMdXBhIG5hbWEgcGVuZ2d1bmEgYXRhdSBrYXRhIGxhbHVhbiBhbmRhP1xuTGF3YXRpICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjcxMTQ2MjczNTEyODY5MzM4NjciPiJNZW55ZW1ha+KApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdW5sb2NrX2xhYmVsIiBtc2dpZD0iNzM3NDQwNDgzMjIwNjY3MDU0Ij4iQnVrYSBrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4iQnVueWkgZGloaWR1cGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb2ZmX2xhYmVsIiBtc2dpZD0iOTk2ODIyODI1MTU0MzE5MDI2Ij4iQnVueWkgZGltYXRpa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9zdGFydCIgbXNnaWQ9IjM5NDEwNDU1MDI5MzMxNDI4NDciPiJDb3JhayBkaW11bGFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NsZWFyZWQiIG1zZ2lkPSI1NTgzNDc5NzIxMDAxNjM5NTc5Ij4iQ29yYWsgZGlwYWRhbWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2VsbF9hZGRlZCIgbXNnaWQ9IjY3NTYwMzEyMDgzNTkyOTI0ODciPiJTZWwgZGl0YW1iYWhrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2RldGVjdGVkIiBtc2dpZD0iNDk4ODczMDg5NTU1NDA1NzA1OCI+IkNvcmFrIHNpYXAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIFdpZGdldCAlMiRkIGRhcmkgJTMkZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4iVGFtYmFoIHdpZGdldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+Iktvc29uZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4iQmFoYWdpYW4gYnVrYSBrdW5jaSBkaWtlbWJhbmdrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4iQmFoYWdpYW4gYnVrYSBrdW5jaSBkaXJ1bnR1aGthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiJXaWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IlBlbWlsaWggcGVuZ2d1bmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJTdGF0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4iS2F3YWxhbiBtZWRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4iUGVueXVzdW5hbiBzZW11bGEgd2lkZ2V0IGRpbXVsYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiJQZW55dXN1bmFuIHNlbXVsYSB3aWRnZXQgdGFtYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiJXaWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gZGlwYWRhbWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiJLZW1iYW5na2FuIGJhaGFnaWFuIGJ1a2Ega3VuY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4iQnVrYSBrdW5jaSBsdW5jdXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiJCdWthIGt1bmNpIGNvcmFrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4iV2FqYWggQnVrYSBLdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJCdWthIGt1bmNpIHBpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiJCdWthIGt1bmNpIGthdGEgbGFsdWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+Ikthd2FzYW4gY29yYWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+Ikthd2FzYW4gbHVuY3VyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfY2hhcmFjdGVyIiBtc2dpZD0iNzMzNjQ3MDUzNTM4NTAwOTUyMyI+IndhdGFrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfd29yZCIgbXNnaWQ9IjcwNzU1NzAzMjgzNzQ5MTg2NjAiPiJwZXJrYXRhYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9saW5rIiBtc2dpZD0iNTgxNTUwODg4MDc4MjQ4ODI2NyI+InBhdXRhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmUiIG1zZ2lkPSI1NzY0MjY3MjM1MDI2MTIwODg4Ij4iYmFyaXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJob3VyX2FtcG0iIG1zZ2lkPSI0NTg0MzM4MDgzNTI5MzU1OTgyIj4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JVA8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91cl9jYXBfYW1wbSIgbXNnaWQ9IjIwODM0NjU5OTI5NDA0NDQzNjYiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4iVWppYW4ga2lsYW5nIGdhZ2FsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiJUaW5kYWthbiBGQUNUT1JZX1RFU1QgaGFueWEgZGlzb2tvbmcgdW50dWsgcGFrZWogeWFuZyBkaXBhc2FuZ2thbiBkYWxhbSAvc3lzdGVtL2FwcC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub19hY3Rpb24iIG1zZ2lkPSI4NzI5OTE4NzQ3OTk5OTg1NjEiPiJUaWFkYSBwYWtlaiB5YW5nIG1lbnllZGlha2FuIHRpbmRha2FuIEZBQ1RPUllfVEVTVCBkaXRlbXVpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiJCdXQgc2VtdWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTk4NzQ4Mzk3NzgzNDYwMzg3MiI+IkhhbGFtYW4gZGkgXCc8eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPlwnIGJlcmthdGE6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI2OTYxOTAzMjEzNzI5NjY3NTczIj4iSmF2YVNjcmlwdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3RpdGxlIiBtc2dpZD0iMjYxOTM3NjU1NTUyNTExNjU5MyI+IlNhaGthbiBOYXZpZ2FzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3Bvc2l0aXZlX2J1dHRvbiIgbXNnaWQ9IjMxMTI3NTIwMTA2MDA0ODQxMzAiPiJUaW5nZ2Fsa2FuIEhhbGFtYW4gaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfbmVnYXRpdmVfYnV0dG9uIiBtc2dpZD0iNTYxNDg2MTI5MzAyNjA5OTcxNSI+Iktla2FsIGRpIEhhbGFtYW4gaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWQiIG1zZ2lkPSIzNDY4ODE2MzU3MDk1Mzc4NTkwIj4iPHhsaWZmOmcgaWQ9Ik1FU1NBR0UiPiVzPC94bGlmZjpnPlxuXG5BZGFrYWggYW5kYSBwYXN0aSBhbmRhIG1haHUgbWVuYXZpZ2FzaSBrZWx1YXIgZGFyaSBoYWxhbWFuIGluaT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX2xhYmVsIiBtc2dpZD0iNjg2MDI2MTc1ODY2NTgyNTA2OSI+IlNhaGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRvdWJsZV90YXBfdG9hc3QiIG1zZ2lkPSI0NTk1MDQ2NTE1NDAwMjY4ODgxIj4iUGV0dWE6IEtldGlrIGR1YSBrYWxpIHVudHVrIG1lbmdlenVtIG1hc3VrIGRhbiBrZWx1YXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+IkF1dG8gaXNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2V0dXBfYXV0b2ZpbGwiIG1zZ2lkPSI3MTAzNDk1MDcwMTgwNTkwODE0Ij4iU2VkaWFrYW4gQXV0b2lzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3NfbmFtZV9zZXBhcmF0b3IiIG1zZ2lkPSI2MzUwMTQ1MTU0Nzc5NzA2NzcyIj4iICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9uYW1lX2Zvcm1hdCIgbXNnaWQ9IjMyNjgwNDEwNTQ4OTkyMTQ5NDUiPiIkMSQyJDMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfc2VwYXJhdG9yIiBtc2dpZD0iNzQ4MzMwNzg5MzE3MDMyNDEyOSI+IiwgIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X2Zvcm1hdCIgbXNnaWQ9IjQ4NzQ0NTk0NTU3ODY4MjczNDQiPiIkMSQyJDMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcm92aW5jZSIgbXNnaWQ9IjIyMzE4MDY1NTM4NjM0MjIzMDAiPiJXaWxheWFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcG9zdGFsX2NvZGUiIG1zZ2lkPSI0Njk2NDMwNDA3Njg5Mzc3MTA4Ij4iUG9za29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfc3RhdGUiIG1zZ2lkPSI2OTg4ODk0MTk1NTIwMDQ0NjEzIj4iTmVnZXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfemlwX2NvZGUiIG1zZ2lkPSI4Njk3NTQ0NTkyNjI3MzIyOTQ2Ij4iUG9za29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfY291bnR5IiBtc2dpZD0iMjM3MDczNzcxMDIwMzYyODkxIj4iV2lsYXlhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiJQdWxhdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2Rpc3RyaWN0IiBtc2dpZD0iODQwMDczNTA3MzM5MjI2NzY3MiI+IkRhZXJhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2RlcGFydG1lbnQiIG1zZ2lkPSI1MzQzMjc5NDYyNTY0NDUzMzA5Ij4iSmFiYXRhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ByZWZlY3R1cmUiIG1zZ2lkPSIyMDI4NDk5NDg1MDY1ODAwNDE5Ij4iV2lsYXlhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3BhcmlzaCIgbXNnaWQ9IjgyMDIyMDYxMDU0Njg4MjAwNTciPiJLYXJpYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+Ikthd2FzYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9lbWlyYXRlIiBtc2dpZD0iMjg5Mzg4MDk3ODgzNTY5ODgxOCI+IkVtaXJpYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzc3NTI2NTc3NTQwNTEwNjk4MyI+ImJhY2EgcGVuYW5kYSBidWt1IGRhbiBzZWphcmFoIFdlYiBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2Egc2VqYXJhaCBzZW11YSBVUkwgeWFuZyB0ZWxhaCBQZW55ZW1hayBJbWJhcyBsYXdhdGkgZGFuIHNlbXVhIHBlbmFuZGEgaGFsYW1hbiBQZW55ZW1hayBJbWJhcy4gTm90YToga2ViZW5hcmFuIGluaSB0aWRhayBib2xlaCBkaWt1YXRrdWFzYWthbiBvbGVoIHBlbnllbWFrIGltYmFzIHBpaGFrIGtldGlnYSBhdGF1IGFwbGlrYXNpIGxhaW4gZGVuZ2FuIGtldXBheWFhbiBtZW55ZW1hayBpbWJhcyB3ZWIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzE0Nzg1MTY1MjczMzE0NDkwIj4idHVsaXMgcGVuYW5kYSBidWt1IGRhbiBzZWphcmFoIHdlYiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndWJhaCBzdWFpIHNlamFyYWggYXRhdSBwZW5hbmRhIGhhbGFtYW4gUGVueWVtYWsgSW1iYXMgeWFuZyB0ZXJzaW1wYW4gcGFkYSB0YWJsZXQgYW5kYS4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1hZGFtIGF0YXUgbWVuZ3ViYWggc3VhaSBkYXRhIFBlbnllbWFrIEltYmFzLiBOb3RhOiBrZWJlbmFyYW4gaW5pIHRpZGFrIGJvbGVoIGRpa3VhdGt1YXNha2FuIG9sZWggcGVueWVtYWsgaW1iYXMgcGloYWsga2V0aWdhIGF0YXUgYXBsaWthc2kgbGFpbiBkZW5nYW4ga2V1cGF5YWFuIG1lbnllbWFrIGltYmFzIHdlYi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmd1YmFoIHN1YWkgc2VqYXJhaCBhdGF1IHBlbmFuZGEgaGFsYW1hbiBQZW55ZW1hayBJbWJhcyB5YW5nIHRlcnNpbXBhbiBwYWRhIHRlbGVmb24gYW5kYS4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1hZGFtIGF0YXUgbWVuZ3ViYWggc3VhaSBkYXRhIFBlbnllbWFrIEltYmFzLiBOb3RhOiBrZWJlbmFyYW4gaW5pIHRpZGFrIGJvbGVoIGRpa3VhdGt1YXNha2FuIG9sZWggcGVueWVtYWsgaW1iYXMgcGloYWsga2V0aWdhIGF0YXUgYXBsaWthc2kgbGFpbiBkZW5nYW4ga2V1cGF5YWFuIG1lbnllbWFrIGltYmFzIHdlYi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsYXJtIiBtc2dpZD0iMTM3OTI5NDU1NjM2MjA5MTgxNCI+InRldGFwa2FuIHBlbmdnZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWxhcm0iIG1zZ2lkPSIzMTYzOTIwMzkxNTc0NzM4NDgiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZXRhcGthbiBwZW5nZ2VyYSBkYWxhbSBhcGwgcGVuZ2dlcmEgamFtIHlhbmcgZGlwYXNhbmcuIFNlc2V0ZW5nYWggYXBwbGlrYXNpIGphbSBwZW5nZ2VyYSB0aWRhayBib2xlaCBtZWxha3NhbmFrYW4gY2lyaSBpbmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hZGRWb2ljZW1haWwiIG1zZ2lkPSI1NTI1NjYwMDI2MDkwOTU5MDQ0Ij4idGFtYmFoIG1lbCBzdWFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuYW1iYWhrYW4gbWVzZWogcGFkYSBwZXRpIG1hc3VrIG1lbCBzdWFyYSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iNTk2MjIyNDE1ODk1NTI3MzkzMiI+InViYWggc3VhaSBrZWJlbmFyYW4gZ2VvbG9rYXNpIFBlbnllbWFrIEltYmFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIGtlYmVuYXJhbiBnZW9sb2thc2kgUGVueWVtYWsgSW1iYXMuIEFwbCBoYXNhZCBib2xlaCBtZW5nZ3VuYWthbm55YSB1bnR1ayBtZW1iZW5hcmthbiBtZW5naGFudGFyIG1ha2x1bWF0IGxva2FzaSBrZXBhZGEgbGFtYW4gd2ViIHNlbWJhcmFuZ2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iNTU2ODEzOTEwMDY0NTgyOTExNyI+InNhaGthbiBwYWtlaiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9Ijg0Mzc1OTAxOTA5OTA4NDMzODEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2VzYWhrYW4gYmFoYXdhIHBha2VqIGJvbGVoIGRpcGFzYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjQxODc3ODY3OTMzNjAzMjY2NTQiPiJpa2F0IGtlcGFkYSBwZW5nZXNhaCBwYWtlaiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgbWVtYnVhdCBwZXJtaW50YWFuIHBlbmdlc2FoIHBha2VqLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBub3JtYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXJpYWxQb3J0IiBtc2dpZD0iNTQ2MDgzMzI3NjU0NjMxMDc2Ij4iYWtzZXMgcG9ydCBiZXJzaXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiJNZW1iZW5hcmthbiBwZW1lZ2FuZyBtZW5nYWtzZXMgcG9ydCBiZXJzaXJpIG1lbmdndW5ha2FuIEFQSSBTZXJpYWxNYW5hZ2VyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI1MDc3Nzc0Mjk3OTQzNDA5Mjg1Ij4iYWtzZXMgcGVtYmVrYWwga2FuZHVuZ2FuIHNlY2FyYSBsdWFyYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiJNZW1ib2xlaGthbiBwZW1lZ2FuZyBtZW5nYWtzZXMgcGVtYmVrYWwga2FuZHVuZ2FuIGRhcmkgbHVhci4gVGlkYWsgYWthbiBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4idGlkYWsgbWVuZ2dhbGFra2FuIGtlbWFzIGtpbmkgcGVyYW50aSBhdXRvbWF0aWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVMb2NrIiBtc2dpZD0iMTY1NTYyNTgzMjE2Njc3ODQ5MiI+Ik1lbWJlbmFya2FuIGFwbGlrYXNpIHVudHVrIG1lbmF3YXJrYW4gbWFrbHVtYXQga2VwYWRhIHNpc3RlbSB0ZW50YW5nIGJpbGEgYWthbiBtZW5qYWRpIG1hc2EgeWFuZyBiYWlrIHVudHVrIGJ1dCBzZW11bGEgYnVrYW4gaW50ZXJha3RpZiB1bnR1ayBtZW5haWsgdGFyYWYgcGVyYW50aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX21lc3NhZ2UiIG1zZ2lkPSI3NjczNDQ2ODcxMzkxOTU3OTAiPiJBZGFrYWggYW5kYSBtYWh1IHBlbnllbWFrIGltYmFzIG1lbmdpbmdhdGkga2F0YSBsYWx1YW4gaW5pPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbm90bm93IiBtc2dpZD0iNjM4OTY3NTMxNjcwNjY5OTc1OCI+IkJ1a2FuIHNla2FyYW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiJJbmdhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbmV2ZXIiIG1zZ2lkPSI4Mjc0MzMwMjk2Nzg1ODU1MTA1Ij4iSmFuZ2FuIHNla2FsaS1rYWxpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4iQW5kYSB0aWRhayBtZW1wdW55YWkga2ViZW5hcmFuIHVudHVrIG1lbWJ1a2EgbGFtYW4gaW5pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRleHRfY29waWVkIiBtc2dpZD0iNDk4NTcyOTUyNDY3MDEzMTM4NSI+IlRla3MgZGlzYWxpbiBrZSBwYXBhbiBrZXJhdGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibW9yZV9pdGVtX2xhYmVsIiBtc2dpZD0iNDY1MDkxODkyMzA4MzMyMDQ5NSI+IkxhZ2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVwZW5kX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjU3MjIxNDQ2MTY3NjAxNTY0MiI+Ik1lbnUrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiJydWFuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZW50ZXJfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNzQzMzYyNzg1MTExMzA5NjY4Ij4iZW50ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiJwYWRhbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaF9nbyIgbXNnaWQ9IjgyOTgwMTY2Njk4MjIxNDE3MTkiPiJDYXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zZWFyY2giIG1zZ2lkPSI2NzQ5ODI2NjM5MDk4NTEyMTIwIj4iQ2FyaWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9xdWVyeSIgbXNnaWQ9IjU5MTE3Nzg1OTMxMjUzNTUxMjQiPiJQZXJ0YW55YWFuIGNhcmlhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4iUGVydGFueWFhbiBqZWxhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc3VibWl0IiBtc2dpZD0iMjY4ODQ1MDEzMzI5Nzk4MzU0MiI+IlNlcmFoIHBlcnRhbnlhYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3ZvaWNlIiBtc2dpZD0iMjQ1MzIwMzY5NTY3NDk5NDQ0MCI+IkNhcmlhbiBzdWFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSI3NDYwNjk0MDcwMzA5NzMwMTQ5Ij4iRGF5YWthbiBKZWxhamFoIG1lbGFsdWkgU2VudHVoYW4/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBpbmdpbiBtZW5kYXlha2FuIEplbGFqYWggbWVsYWx1aSBTZW50dWhhbi4gQXBhYmlsYSBKZWxhamFoIG1lbGFsdWkgU2VudHVoYW4gZGlkYXlha2FuLCBhbmRhIGJvbGVoIG1lbmRlbmdhciBhdGF1IG1lbGloYXQgcGVuZXJhbmdhbiB0ZW50YW5nIGFwYSBkaSBiYXdhaCBqYXJpIGFuZGEgYXRhdSBtZWxha3VrYW4gZ2VyYWsgaXN5YXJhdCB1bnR1ayBiZXJpbnRlcmFrc2kgZGVuZ2FuIHRhYmxldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNzA4MTk5NjcyODUyMzczMTk1Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBpbmdpbiBtZW5kYXlha2FuIEplbGFqYWggbWVsYWx1aSBTZW50dWhhbi4gQXBhYmlsYSBKZWxhamFoIG1lbGFsdWkgU2VudHVoYW4gZGlkYXlha2FuLCBhbmRhIGJvbGVoIG1lbmRlbmdhciBhdGF1IG1lbGloYXQgcGVuZXJhbmdhbiB0ZW50YW5nIGFwYSBkaSBiYXdhaCBqYXJpIGFuZGEgYXRhdSBtZWxha3VrYW4gZ2VyYWsgaXN5YXJhdCB1bnR1ayBiZXJpbnRlcmFrc2kgZGVuZ2FuIHRlbGVmb24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4iMSBidWxhbiB5YW5nIGxhbHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IlNlYmVsdW0gMSBidWxhbiB5YW5nIGxhbHUiPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9Im51bV9zZWNvbmRzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4Njk4NzAwNTY1NDc4OTYwMTEiPiIxIHNhYXQgeWFuZyBsYWx1IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzOTAzNzA2ODA0MzQ5NTU2Mzc5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FhdCB5YW5nIGxhbHUiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9Im51bV9taW51dGVzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMzMDY3ODc0MzMwODg4MTAxOTEiPiIxIG1pbml0IHlhbmcgbGFsdSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjE3Njk0MjAwODkxNTQ1NTExNiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IG1pbml0IHlhbmcgbGFsdSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0ibnVtX2hvdXJzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjkxNTA3OTc5NDQ2MTA4MjE4NDkiPiIxIGphbSB5YW5nIGxhbHUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI0NjcyNzMyMzk1ODc1ODc1NjkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBqYW0geWFuZyBsYWx1IjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJsYXN0X251bV9kYXlzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMDY5OTkyODA4MTY0MzE4MjY4Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gaGFyaSB0ZXJha2hpciI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9Imxhc3RfbW9udGgiIG1zZ2lkPSIzOTU5MzQ2NzM5OTc5MDU1NDMyIj4iQnVsYW4gbGVwYXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbGRlciIgbXNnaWQ9IjUyMTE5NzUwMjI4MTU1NTQ4NDAiPiJMZWJpaCBsYW1hIjwvc3RyaW5nPgotICA8cGx1cmFscyBuYW1lPSJudW1fZGF5c19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NjEzNTg1MzQzOTgxMTU4MjAiPiJzZW1hbGFtIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDc5NTg2NDY2MTUzMzE0NjMzIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gaGFyaSB5YW5nIGxhbHUiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9zZWNvbmRzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjcyOTc0NTU2MDk1NDkwNTEwMiI+ImRhbGFtIDEgc2FhdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTI0MTkyNjExNjQ0Mzk3NDY4NyI+ImRhbGFtIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhYXQiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+ImRhbGFtIDEgbWluaXQiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMzMzA3MTM5MzYzOTk0NDg3NDkiPiJkYWxhbSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBtaW5pdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2hvdXJzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNzE2NDM1MzM0MjQ3Nzc2OTk5OSI+ImRhbGFtIDEgamFtIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDcyOTA2NzczNTM3MjczODkiPiJkYWxhbSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBqYW0iPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9kYXlzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTQxMzA4ODc0MzAwOTgzOTUxOCI+ImVzb2siPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjUxMDk0NDkzNzUxMDA5NTMyNDciPiJkYWxhbSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBoYXJpIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX3NlY29uZHNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTg0OTAzNjg0MDIwMDA2OTExOCI+IjEgc2FhdCB5YW5nIGxhbHUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM2OTkxNjkzNjY2NTA5MzA0MTUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0IHlhbmcgbGFsdSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9taW51dGVzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjYzNjE0OTAxNDcxMTM4NzE1NDUiPiIxIG1pbml0IHlhbmcgbGFsdSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODUxMTY0OTY4NTk3MTUwNzEwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gbWluaXQgeWFuZyBsYWx1IjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2hvdXJzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ3OTYyMTIwMzk3MjQ3MjIxMTYiPiIxIGphbSB5YW5nIGxhbHUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY4ODk5NzA3NDU3NDg1Mzg5MDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBqYW0geWFuZyBsYWx1IjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2RheXNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODQ2MzE2MTcxMTQ5MjY4MDMwOSI+InNlbWFsYW0iPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM0NTMzNDI2Mzk2MTY0ODExOTEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBoYXJpIHlhbmcgbGFsdSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9zZWNvbmRzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg0MjIyNTM3MDc5NTA2NjI5OSI+ImRhbGFtIDEgc2FhdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ5NTg4MDEwODgyNTgwNTEwOCI+ImRhbGFtIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhYXQiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fbWludXRlcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU2Mjc4NjE0OTkyODI4NDg3OCI+ImRhbGFtIDEgbWluaXQiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQyMTYxMTMyOTI3MDY1Njg3MjYiPiJkYWxhbSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBtaW5pdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9ob3VycyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNzQ3MDgxMTgxMjQwNDUyNDYiPiJkYWxhbSAxIGphbSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzcwNTM3Mzc2Njc5ODAxMzQwNiI+ImRhbGFtIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGphbSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9kYXlzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjE3ODU3NjI1NDM4NTczOTg1NSI+ImVzb2siPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI5NzMwNjI5NjgwMzgzNTU5OTEiPiJkYWxhbSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBoYXJpIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX2RhdGUiIG1zZ2lkPSI5MDkzOTQ5NzU3NzU3NDQ1MTE3Ij4icGFkYSA8eGxpZmY6ZyBpZD0iREFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3RpbWUiIG1zZ2lkPSI1NTA2ODMxMjQ0MjYzMDgzNzkzIj4icGFkYSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3llYXIiIG1zZ2lkPSI1MDQwMzk1NjQwNzExODY3MTc3Ij4iZGFsYW0gPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRheSIgbXNnaWQ9IjgxNDQxOTU3NzYwNTgxMTk0MjQiPiJoYXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF5cyIgbXNnaWQ9IjQ3NzQ1NDc2NjEwMjEzNDQ2MDIiPiJoYXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91ciIgbXNnaWQ9IjIxMjY3NzE5MTY0MjYxODk0ODEiPiJqYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJob3VycyIgbXNnaWQ9Ijg5NDQyNDAwNTI2Njg1Mjk5MyI+ImphbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZSIgbXNnaWQ9IjkxNDg4Nzg2NTc3MDM3Njk4NjgiPiJtaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaW51dGVzIiBtc2dpZD0iNTY0NjAwMTAwNTgyNzAzNDUwOSI+Im1pbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlY29uZCIgbXNnaWQ9IjMxODQyMzU4MDgwMjE0NzgiPiJzYWF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kcyIgbXNnaWQ9IjMxNjE1MTUzNDcyMTY1ODkyMzUiPiJzYWF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiJtaW5nZ3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiJtaW5nZ3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ5ZWFyIiBtc2dpZD0iNDAwMTExODIyMTAxMzg5MjA3NiI+InRhaHVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ieWVhcnMiIG1zZ2lkPSI2ODgxNTc3NzE3OTkzMjEzNTIyIj4idGFodW4iPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX3NlY29uZHMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2OTYyMDE1NTI4MzcyOTY5NDgxIj4iMSBzYWF0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxODg2MTA3NzY2NTc3MTY2Nzg2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FhdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fbWludXRlcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ5MTU0MTQwMDI1NDYwODU2MTciPiIxIG1pbml0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMTY1MTg3MTY5MjI0OTA4Nzc1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gbWluaXQiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX2hvdXJzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODkxNzQ2NzQ5MTI0ODgwOTk3MiI+IjEgamFtIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzODYzOTYyODU0MjQ2NzczOTMwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gamFtIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RpdGxlIiBtc2dpZD0iMzUzNDUwOTEzNTQzODM1MzA3NyI+Ik1hc2FsYWggdmlkZW8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF9pbnZhbGlkX3Byb2dyZXNzaXZlX3BsYXliYWNrIiBtc2dpZD0iMzE4NjY3MDMzNTkzODY3MDQ0NCI+Ik1hYWYsIHZpZGVvIGluaSB0aWRhayBzYWggdW50dWsgcGVuc3RyaW1hbiBrZSBwZXJhbnRpIGluaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF91bmtub3duIiBtc2dpZD0iMzQ1MDQzOTE1NTE4NzgxMDA4NSI+IlRpZGFrIGRhcGF0IG1haW5rYW4gdmlkZW8gaW5pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iIG1zZ2lkPSIyODIyMjM4MjE1MTAwNjc5NTkyIj4iT0siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGl2ZV90aW1lIiBtc2dpZD0iMTgxODU1NzE3NzgyOTQxMTQxNyI+Ijx4bGlmZjpnIGlkPSJEQVRFIj4lMSRzPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9vbiIgbXNnaWQ9IjcyNDUzNTM1Mjg4MTg1ODc5MDgiPiJ0ZW5nYWggaGFyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Ik5vb24iIG1zZ2lkPSIzMzQyMTI3NzQ1MjMwMDEzMTI3Ij4iVGVuZ2FoIGhhcmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaWRuaWdodCIgbXNnaWQ9IjcxNjYyNTk1MDg4NTA0NTc1OTUiPiJ0ZW5nYWggbWFsYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJNaWRuaWdodCIgbXNnaWQ9IjU2MzA4MDY5MDY4OTc4OTIyMDEiPiJUZW5nYWggbWFsYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGFwc2VkX3RpbWVfc2hvcnRfZm9ybWF0X21tX3NzIiBtc2dpZD0iNDQzMTU1NTk0MzgyODcxMTQ3MyI+Ijx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMSQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMiQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9oX21tX3NzIiBtc2dpZD0iMTg0NjA3MTk5NzYxNjY1NDEyNCI+Ijx4bGlmZjpnIGlkPSJIT1VSUyI+JTEkZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUyJDAyZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUzJDAyZDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3RBbGwiIG1zZ2lkPSI2ODc2NTE4OTI1ODQ0MTI5MzMxIj4iUGlsaWggc2VtdWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iUG90b25nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJTYWxpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlRhbXBhbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iR2FudGkuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iUGFkYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlNhbGluIFVSTCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlBpbGloIHRla3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iUGVtaWxpaGFuIHRla3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iVGFtYmFoIGtlIGthbXVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJQYWRhbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImlucHV0TWV0aG9kIiBtc2dpZD0iMTY1MzYzMDA2MjMwNDU2Nzg3OSI+IkthZWRhaCBpbnB1dCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+IlRpbmRha2FuIHRla3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RpdGxlIiBtc2dpZD0iNTU3NjI3MjQ5NjM2NTY4NDgzNCI+IlJ1YW5nIHN0b3JhbiBzZW1ha2luIGJlcmt1cmFuZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190ZXh0IiBtc2dpZD0iNjY0MDUwNTgxNzYxNzQxNDM3MSI+IkJlYmVyYXBhIGZ1bmdzaSBzaXN0ZW0gbXVuZ2tpbiB0aWRhayBiZXJmdW5nc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4NzE4MzM1MTIxMDYwNzg3OTE0Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBzZWRhbmcgYmVyamFsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiJTZW50dWggdW50dWsgbWFrbHVtYXQgbGFuanV0IGF0YXUgdW50dWsgbWVuZ2hlbnRpa2FuIGFwbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvayIgbXNnaWQ9IjU5NzAwNjA0MzA1NjI1MjQ5MTAiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiJCYXRhbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InllcyIgbXNnaWQ9IjUzNjI5ODIzMDMzMzc5NjkzMTIiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vIiBtc2dpZD0iNTE0MTUzMTA0NDkzNTU0MTQ5NyI+IkJhdGFsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlhbG9nX2FsZXJ0X3RpdGxlIiBtc2dpZD0iMjA0OTY1ODcwODYwOTA0MzEwMyI+IlBlcmhhdGlhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvYWRpbmciIG1zZ2lkPSI3OTMzNjgxMjYwMjk2MDIxMTgwIj4iTWVtdWF0a2Fu4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vbiIgbXNnaWQ9IjE1NDQ2ODI3NTU1MTQ0OTQyOTgiPiJISURVUCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb2ZmIiBtc2dpZD0iNjgxNTg3MDM4Njk3MjgwNTgzMiI+Ik1BVElLQU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+IlNlbGVzYWlrYW4gdGluZGFrYW4gbWVuZ2d1bmFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4iR3VuYWthbm55YSBzZWNhcmEgbGFsYWkgdW50dWsgdGluZGFrYW4gaW5pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4iUGFkYW0gYmVyc2loIGxhbGFpIGRhbGFtIHRldGFwYW4gU2lzdGVtICZndDsgQXBsICZndDsgRGltdWF0IHR1cnVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZUFjdGl2aXR5IiBtc2dpZD0iNzQ4Njg3NjE0Nzc1MTgwMzMzMyI+IlBpbGloIHRpbmRha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4iUGlsaWggYXBsIHVudHVrIHBlcmFudGkgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9BcHBsaWNhdGlvbnMiIG1zZ2lkPSIyOTkxODE0MjczOTM2NTA0Njg5Ij4iVGlhZGEgYXBsIHlhbmcgYm9sZWggbWVuamFsYW5rYW4gdGluZGFrYW4gaW5pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiJNYWxhbmdueWEsIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gdGVsYWggYmVyaGVudGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWVycl9wcm9jZXNzIiBtc2dpZD0iNDUwNzA1ODk5NzAzNTY5NzU3OSI+Ik1hbGFuZ255YSwgcHJvc2VzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiB0ZWxhaCBiZXJoZW50aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfdGl0bGUiIG1zZ2lkPSI0MzUxOTQ4NDgxNDU5MTM1NzA5Ij48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjE5MDQ0NzcxODkwNTcxOTkwNjYiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+IHRpZGFrIGJlcnRpbmRhayBiYWxhcy5cblxuQWRha2FoIGFuZGEgbWFodSBtZW51dHVwbnlhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+IkFrdGl2aXRpIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4gdGlkYWsgYmVydGluZGFrIGJhbGFzLiBcblxuIEFkYWthaCBhbmRhIG1haHUgbWVudXR1cG55YT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfYXBwbGljYXRpb25fcHJvY2VzcyIgbXNnaWQ9Ijg5NDE3NTc2MDczNDA0ODEwNTciPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IHRpZGFrIGJlcnRpbmRhayBiYWxhcy4gQWRha2FoIGFuZGEgbWFodSBtZW51dHVwbnlhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+IlByb3NlcyA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4gdGlkYWsgYmVydGluZGFrIGJhbGFzLiBcblxuQWRha2FoIGFuZGEgbWFodSBtZW51dHVwbnlhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2Nsb3NlIiBtc2dpZD0iODM0NjA3MjA5NDUyMTI2NTYwNSI+Ik9LIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVwb3J0IiBtc2dpZD0iNDA2MDIxODI2MDk4NDc5NTcwNiI+IkxhcG9ya2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2FpdCIgbXNnaWQ9IjcxNDcxMTgyMTcyMjYzMTc3MzIiPiJUdW5nZ3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3ZWJwYWdlX3VucmVzcG9uc2l2ZSIgbXNnaWQ9IjMyNzI3NTgzNTExMzgxMjI1MDMiPiJMYW1hbiBpbmkgdGlkYWsgYmVydGluZGFrIGJhbGFzLiBcblxuQWRha2FoIGFuZGEgbWFodSBtZW51dHVwbnlhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTU0Nzk5Nzc4MDUwNjcxMzU4MSI+IkFwbCBkaXViYWggaGFsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3JlcGxhY2UiIG1zZ2lkPSI2MjAyNDk4OTQ5OTcwMjgxNDEyIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBraW5pIHNlZGFuZyBiZXJqYWxhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19vcmlnaW5hbCIgbXNnaWQ9IjE4ODEwMjAyMzAyMTY2ODY4MyI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gcGFkYSBhc2FsbnlhIHRlbGFoIGRpbGFuY2Fya2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zY2FsZSIgbXNnaWQ9IjMyMDI5NTU2Njc2NzU5NDQ0OTkiPiJTa2FsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zaG93IiBtc2dpZD0iNDAxMzg3ODg3NjQ4NjY1NTg5MiI+IlNlbnRpYXNhIHR1bmp1a2thbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IkRheWFrYW4gc2VtdWxhIGtvZCBrb21wYWsgaW5pIHRldGFwYW4gU2lzdGVtICZndDsgQXBsICZndDsgRGltdWF0IHR1cnVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtdl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjMzMDcyMDkxOTIxNTU0NDI4MjkiPiJBcGwgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiAocHJvc2VzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMiRzPC94bGlmZjpnPikgdGVsYWggbWVsYW5nZ2FyIGRhc2FyIE1vZCBUZWdhc255YSBzZW5kaXJpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtdl9wcm9jZXNzIiBtc2dpZD0iNTEyMDM5NzAxMjA0NzQ2MjQ0NiI+IlByb3NlcyA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4gdGVsYWggbWVsYW5nZ2FyIGRhc2FyIE1vZCBUZWdhc255YSBzZW5kaXJpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+IkFuZHJvaWQgc2VkYW5nIG1lbmFpayB0YXJhZi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiJNZW5nb3B0aW11bWthbiBhcGwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBkYXJpcGFkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3N0YXJ0aW5nX2FwcHMiIG1zZ2lkPSI0NTE0NjQ1MTYzNDY5MjY3MTMiPiJNZW11bGFrYW4gYXBsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2NvbXBsZXRlIiBtc2dpZD0iMTQwNTk1NDc1NDExMjk5OTIyOSI+IkJ1dCBha2hpci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uIiBtc2dpZD0iOTA4NzA2Mzk4NTc3NjYyNjE2NiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiUxJHM8L3hsaWZmOmc+IGRpamFsYW5rYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uX2RldGFpbCIgbXNnaWQ9IjE3MjE2ODE3NDE2MTc4OTg4NjUiPiJTZW50dWggdW50dWsgYmVydHVrYXIga2UgYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RpdGxlIiBtc2dpZD0iNzE1MzE2NzA4NTQwMzI5ODE2OSI+IlR1a2FyIGFwbD8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGV4dCIgbXNnaWQ9IjcwMjI2MzE5MjQ1MzQ0MDY0MDMiPiJBcGwgbGFpbiBzdWRhaCBwdW4gZGlqYWxhbmthbiB5YW5nIG1lc3RpIGRpaGVudGlrYW4gc2ViZWx1bSBhbmRhIGJvbGVoIG1lbXVsYWthbiB5YW5nIGJhaGFydS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2FjdGlvbiIgbXNnaWQ9IjQ5MzEyOTE3MjIzODU2NjI4MiI+IktlbWJhbGkga2UgPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwODIwOTQyNzU1ODAzNTgwNDkiPiJKYW5nYW4gbXVsYWthbiBhcGwgYmFoYXJ1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5ld19hcHBfYWN0aW9uIiBtc2dpZD0iNTQ3Mjc1NjkyNjk0NTQ0MDcwNiI+Ik11bGFrYW4gPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5MzIxNDM1OTgzNzE1MzczNDAiPiJIZW50aWthbiBhcGwgbGFtYSB0YW5wYSBtZW55aW1wYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VuZFRleHQiIG1zZ2lkPSI1MjA5ODc0NTcxOTU5NDY5MTQyIj4iUGlsaWggdGluZGFrYW4gdW50dWsgdGVrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9yaW5ndG9uZSIgbXNnaWQ9IjY4ODU0MjE0MDY4NDU3MzQ2NTAiPiJLZWxhbnRhbmdhbiBwZW5kZXJpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWMiIG1zZ2lkPSI1NDIxNjUxMTU3MTM4NjI4MTcxIj4iS2VsYW50YW5nYW4gbWVkaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWNfaGludF9wbGF5aW5nX3Rocm91Z2hfYmx1ZXRvb3RoIiBtc2dpZD0iOTE2NTk4NDM3OTM5NDYwMTUzMyI+IkJlcm1haW4gbWVsYWx1aSBCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWNfaGludF9zaWxlbnRfcmluZ3RvbmVfc2VsZWN0ZWQiIG1zZ2lkPSI4MzEwNzM5OTYwOTczMTU2MjcyIj4iTmFkYSBkZXJpbmcgc2VueWFwIGRpdGV0YXBrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfY2FsbCIgbXNnaWQ9IjM5NDE2ODAwNDEyODI3ODg3MTEiPiJLZWxhbnRhbmdhbiBzZW1hc2EgcGFuZ2dpbGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2JsdWV0b290aF9jYWxsIiBtc2dpZD0iMjAwMjg5MTkyNjM1MTE1MTUzNCI+IktlbGFudGFuZ2FuIHNlbWFzYSBkYWxhbSBwYW5nZ2lsYW4gbWVuZ2d1bmFrYW4gQmx1ZXRvb3RoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IktlbGFudGFuZ2FuIHBlbmdnZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjI0MjIyNjU2NTY3NDQyNzY3MTUiPiJLZWxhbnRhbmdhbiBwZW1iZXJpdGFodWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Vua25vd24iIG1zZ2lkPSIxNDAwMjE5NjY5NzcwNDQ1OTAyIj4iS2VsYW50YW5nYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4iS2VsYW50YW5nYW4gQmx1ZXRvb3RoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fcmluZ2VyIiBtc2dpZD0iMzMyNjAwMzg0NzAwNjE2MjQ5NiI+IktlbGFudGFuZ2FuIG5hZGEgZGVyaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25faW5jYWxsIiBtc2dpZD0iODg5MDA3MzIxODE1NDU0MzM5NyI+IktlbGFudGFuZ2FuIHBhbmdnaWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX21lZGlhIiBtc2dpZD0iNDIxNzMxMTcxOTY2NTE5NDIxNSI+IktlbGFudGFuZ2FuIG1lZGlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbm90aWZpY2F0aW9uIiBtc2dpZD0iNzA0NDk4NjU0NjQ3NzI4MjI3NCI+IktlbGFudGFuZ2FuIHBlbWJlcml0YWh1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9kZWZhdWx0IiBtc2dpZD0iMzc4OTc1ODk4MDM1NzY5NjkzNiI+Ik5hZGEgZGVyaW5nIGxhbGFpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdF93aXRoX2FjdHVhbCIgbXNnaWQ9IjgxMjk1NjM0ODA4OTU5OTAzNzIiPiJOYWRhIGRlcmluZyBsYWxhaSAoPHhsaWZmOmcgaWQ9IkFDVFVBTF9SSU5HVE9ORSI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfc2lsZW50IiBtc2dpZD0iNzkzNzYzNDM5MjQwODk3NzA2MiI+IlRpYWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfcGlja2VyX3RpdGxlIiBtc2dpZD0iMzUxNTE0MzkzOTE3NTExOTA5NCI+Ik5hZGEgZGVyaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfdW5rbm93biIgbXNnaWQ9IjU0Nzc5MTk5ODg3MDE3ODQ3ODgiPiJOYWRhIGRlcmluZyB0aWRhayBkaWtldGFodWkiPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjY1NDEyMzk4NzQxODE2ODY5MyI+IlJhbmdrYWlhbiBXaS1GaSB0ZXJzZWRpYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IlJhbmdrYWlhbiBXaS1GaSB0ZXJzZWRpYSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGVfZGV0YWlsZWQiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4iUmFuZ2thaWFuIFdpLUZpIHRlcmJ1a2EgdGVyc2VkaWEiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc5MTU4OTUzMjM2NDQyOTI3NjgiPiJSYW5na2FpYW4gV2ktRmkgdGVyYnVrYSB0ZXJzZWRpYSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4iTG9nIG1hc3VrIGtlIHJhbmdrYWlhbiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4iTG9nIG1hc3VrIGtlIHJhbmdrYWlhbiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+IlRpZGFrIGJvbGVoIG1lbnlhbWJ1bmcga2VwYWRhIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiBtZW1wdW55YWkgc2FtYnVuZ2FuIGludGVybmV0IHlhbmcga3VyYW5nIGJhaWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZGlhbG9nX3RpdGxlIiBtc2dpZD0iOTc2MTE3ODI2NTkzMjQ1MTciPiJXaS1GaSBMYW5nc3VuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3R1cm5vbl9tZXNzYWdlIiBtc2dpZD0iMjkwOTI1MDk0MjI5OTYyNzI0NCI+Ik11bGFrYW4gV2ktRmkgTGFuZ3N1bmcuIEhhbCBpbmkgYWthbiBtZW1hdGlrYW4gcGVuZ2VuZGFsaWFuIGtsaWVuL2xpcHV0YW4gV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4iVGlkYWsgZGFwYXQgbWVtdWxha2FuIFdpLUZpIExhbmdzdW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+IldpLUZpIERpcmVjdCBkaWhpZHVwa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiJTZW50dWggdW50dWsgdGV0YXBhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiJUZXJpbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWNsaW5lIiBtc2dpZD0iMjExMjIyNTQ1MTcwNjEzNzg5NCI+IlRvbGFrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl9zZW50X3RpdGxlIiBtc2dpZD0iMTMxODk3NTE4NTExMjA3MDczNCI+IkplbXB1dGFuIGRpaGFudGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl90b19jb25uZWN0X3RpdGxlIiBtc2dpZD0iNDk1ODgwMzk0ODY1ODUzMzYzNyI+IkplbXB1dGFuIHVudHVrIG1lbnlhbWJ1bmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcm9tX21lc3NhZ2UiIG1zZ2lkPSI1NzAzODkxNzQ3MzE5NTE3NjkiPiJEYXJpcGFkYToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4iS2VwYWRhOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VudGVyX3Bpbl9tZXNzYWdlIiBtc2dpZD0iNTkyMDkyOTU1MDM2NzgyODk3MCI+IlRhaXBrYW4gUElOIHlhbmcgZGlwZXJsdWthbjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9zaG93X3Bpbl9tZXNzYWdlIiBtc2dpZD0iODUzMDU2MzMyMzg4MDkyMTA5NCI+IlBJTjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODAxMjk4MTI1Nzc0MjIzMjQ3NSI+IlNhbWJ1bmdhbiB0YWJsZXQga2UgV2ktRmkgYWthbiBkaXB1dHVza2FuIGJ1YXQgc2VtZW50YXJhIHdha3R1IHNlbWFzYSB0YWJsZXQgYmVyc2FtYnVuZyBrZSA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4iU2FtYnVuZ2FuIHRlbGVmb24ga2UgV2ktRmkgYWthbiBkaXB1dHVza2FuIGJ1YXQgc2VtZW50YXJhIHdha3R1IHNlbWFzYSB0ZWxlZm9uIGJlcnNhbWJ1bmcga2UgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9jaGFyYWN0ZXIiIG1zZ2lkPSIzMzY1NTUwMTIwNjE3NzAxNzQ1Ij4iTWFzdWtrYW4gYWtzYXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfdGl0bGUiIG1zZ2lkPSI3Mjk2NjEyNzgxMTI4OTE3NzE5Ij4iTWVuZ2hhbnRhciBtZXNlaiBTTVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9tZXNzYWdlIiBtc2dpZD0iMzg2Nzg5OTE2OTY1MTQ5NjQzMyI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IHNlZGFuZyBtZW5naGFudGFyIGJhbnlhayBtZXNlaiBTTVMuIEFkYWthaCBhbmRhIG1haHUgbWVtYmVuYXJrYW4gYXBsIGluaSB0ZXJ1cyBtZW5naGFudGFyIG1lc2VqPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3llcyIgbXNnaWQ9IjM2NjM3MjU5OTM4NTU4MTY4MDciPiJCZW5hcmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4iTmFmaWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyBpbmdpbiBtZW5naGFudGFyIG1lc2VqIGtlcGFkYSAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjM0OTIwMjU3MTk4NjgwNzg0NTciPiJJbmkgYWthbiBtZW55ZWJhYmthbiBha2F1biBtdWRhaCBhbGloIGFuZGEgIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+ImRpa2VuYWthbiBjYWoiPC9mb250PiIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNTUyMzgyNjM0OTEwNTEyMzY4NyI+PGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4iSW5pIGFrYW4gbWVueWViYWJrYW4gYWthdW4gbXVkYWggYWxpaCBhbmRhIGRpa2VuYWthbiBjYWouIjwvZm9udD48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWxsb3ciIG1zZ2lkPSI0NDU4ODc4NjM3MTExMDIzNDEzIj4iSGFudGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9kZW55IiBtc2dpZD0iMjkyNzM4OTg0MDIwOTE3MDcwNiI+IkJhdGFsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+IkluZ2F0IHBpbGloYW4gc2F5YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4iQW5kYSBib2xlaCBtZW51a2FyIGluaSBuYW50aSBkYWxhbSBUZXRhcGFuwqAmZ3Q7wqBBcGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2Fsd2F5c19hbGxvdyIgbXNnaWQ9IjMyNDExODExNTQ4Njk0OTMzNjgiPiJTZW50aWFzYSBCZW5hcmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbmV2ZXJfYWxsb3ciIG1zZ2lkPSI0NDY5OTI3NjU3NzQyNjk2NzMiPiJKYW5nYW4gQmVuYXJrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiJLYWQgU0lNIGRpa2VsdWFya2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfbWVzc2FnZSIgbXNnaWQ9IjIzMzMxNjQ1NTk5NzA5NTg2NDUiPiJSYW5na2FpYW4gbXVkYWggYWxpaCB0aWRhayBha2FuIHRlcnNlZGlhIHNlaGluZ2dhIGFuZGEgbXVsYSBzZW11bGEgZGVuZ2FuIGthZCBTSU0geWFuZyBzYWggZGltYXN1a2thbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiJTZWxlc2FpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX3RpdGxlIiBtc2dpZD0iMzcxOTY3MDUxMjg4OTY3NDY5MyI+IkthZCBTSU0gZGl0YW1iYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiJNdWxha2FuIHNlbXVsYSBwZXJhbnRpIGFuZGEgdW50dWsgbWVuZ2Frc2VzIHJhbmdrYWlhbiBtdWRhaCBhbGloLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiJNdWxha2FuIHNlbXVsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjgzNDkzNjI2MjMwNjg4MTkyOTUiPiJUZXRhcGthbiBtYXNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNTg3OTQ1MDY1OTQ1Mzc4MjI3OCI+IlRldGFwa2FuIHRhcmlraCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9zZXQiIG1zZ2lkPSI1Nzc3MDc1NjE0MzIxMDg3NzU4Ij4iVGV0YXBrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfZG9uZSIgbXNnaWQ9IjI1MDc2ODM3NTE3NTkzMDg4MjgiPiJTZWxlc2FpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybXNfbmV3X3Blcm1fcHJlZml4IiBtc2dpZD0iODI1Nzc0MDcxMDc1NDMwMTQwNyI+PGZvbnQgc2l6ZT0iMTIiIGZnY29sb3I9IiNmZjMzYjVlNSI+IkJBSEFSVTogIjwvZm9udD48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1zX2Rlc2NyaXB0aW9uX2FwcCIgbXNnaWQ9IjUxMzk4MzYxNDMyOTMyOTk0MTciPiJEaXNlZGlha2FuIG9sZWggPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub19wZXJtaXNzaW9ucyIgbXNnaWQ9IjcyODMzNTc3MjgyMTkzMzgxMTIiPiJUaWFkYSBrZWJlbmFyYW4gZGlwZXJsdWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1fY29zdHNfbW9uZXkiIG1zZ2lkPSI0OTAyNDcwMzI0MTQyMTUxMTE2Ij4iYW5kYSBtdW5na2luIGRpa2VuYWthbiBiYXlhcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4iU3RvcmFuIG1hc3NhIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+InNhbWJ1bmdhbiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMzMDg1MzgwOTQzMTY0Nzc4MzkiPiJBbmRhIGJlcnNhbWJ1bmcga2Uga29tcHV0ZXIgbWVsYWx1aSBVU0IuIFNlbnR1aCBidXRhbmcgZGkgYmF3YWggamlrYSBhbmRhIG1haHUgbWVueWFsaW4gZmFpbCBhbnRhcmEga29tcHV0ZXIgZGFuIHN0b3JhbiBVU0IgQW5kcm9pZCBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiJBbmRhIHRlbGFoIGJlcnNhbWJ1bmcga2Uga29tcHV0ZXIgbWVsYWx1aSBVU0IuIFNlbnR1aCBidXRhbmcgZGkgYmF3YWggamlrYSBhbmRhIG1haHUgbWVueWFsaW4gZmFpbCBkaSBhbnRhcmEga29tcHV0ZXIgZGFuIGthZCBTRCBBbmRyb2lkIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYnV0dG9uX21vdW50IiBtc2dpZD0iMTA1MjI1OTkzMDM2OTUwODIzNSI+IkhpZHVwa2FuIHN0b3JhbiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiJUZXJkYXBhdCBtYXNhbGFoIG1lbmdndW5ha2FuIHN0b3JhbiBVU0IgYW5kYSB1bnR1ayBzdG9yYW4gbWFzc2EgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4iVGVyZGFwYXQgbWFzYWxhaCBtZW5nZ3VuYWthbiBrYWQgU0QgYW5kYSB1bnR1ayBzdG9yYW4gbWFzc2EgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0IgZGlzYW1idW5na2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5Mzk4MjI3ODM4MjgxODM3NjMiPiJQaWxpaCB1bnR1ayBtZW55YWxpbiBmYWlsIGtlL2Rhcmkga29tcHV0ZXIgYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzMzYwNTgzOTY2NjM1MTYwMTciPiJNYXRpa2FuIHN0b3JhbiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+IlNlbnR1aCB1bnR1ayBtZW1hdGlrYW4gc3RvcmFuIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX3RpdGxlIiBtc2dpZD0iNjYwMTI5ODUxNzA4Nzc1ODUzIj4iU3RvcmFuIFVTQiBzZWRhbmcgZGlndW5ha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiJTZWJlbHVtIG1lbWF0aWthbiBzdG9yYW4gVVNCLCBueWFobGVrYXAgKFwia2VsdWFya2FuXCIpIHN0b3JhbiBVU0IgQW5kcm9pZCBkYXJpIGtvbXB1dGVyIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IlNlYmVsdW0gbWVtYXRpa2FuIHN0b3JhbiBVU0IsIG55YWggbGVrYXAgKFwia2VsdWFya2FuXCIpIGthZCBTRCBBbmRyb2lkIGRhcmkga29tcHV0ZXIgYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiJNYXRpa2FuIHN0b3JhbiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxOTcwMzc0ODk4MjYzMDYzODM2Ij4iVGVyZGFwYXQgbWFzYWxhaCBtZW1hdGlrYW4gc3RvcmFuIFVTQi4gU2VtYWsgYmFoYXdhIGFuZGEgdGVsYWggbWVueWFobGVrYXBrYW4gaG9zIFVTQiwga2VtdWRpYW4gY3ViYSBsYWdpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+IkhpZHVwa2FuIHN0b3JhbiBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4iSmlrYSBhbmRhIG1lbmdoaWR1cGthbiBzdG9yYW4gVVNCLCBzZXNldGVuZ2FoIGFwbCB5YW5nIHNlZGFuZyBhbmRhIGd1bmFrYW4gYWthbiB0ZXJoZW50aSBkYW4gbXVuZ2tpbiB0aWRhayBha2FuIHRlcnNlZGlhIHNlaGluZ2dhIGFuZGEgbWVtYXRpa2FuIHN0b3JhbiBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+Ik9wZXJhc2kgVVNCIHRpZGFrIGJlcmpheWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4iT0siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiJEaXNhbWJ1bmdrYW4gc2ViYWdhaSBwZXJhbnRpIG1lZGlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3B0cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxOTYwODE3MTkyMjE2MDY0ODMzIj4iRGlzYW1idW5na2FuIHNlYmFnYWkga2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2NkX2luc3RhbGxlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2Nzc0NzEyODI3ODkyMDkwNzU0Ij4iRGlzYW1idW5na2FuIHNlYmFnYWkgcGVtYXNhbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiJEaXNhbWJ1bmdrYW4ga2VwYWRhIGFrc2Vzb3JpIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjIyOTA4NTkzOTk5ODM3MjAyNzEiPiJTZW50dWggdW50dWsgbWVuZGFwYXRrYW4gcGlsaWhhbiBVU0IgeWFuZyBsYWluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI5MDIwMDkyMTk2MDYxMDA3MjYyIj4iRm9ybWF0IHN0b3JhbiBVU0I/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IkZvcm1hdCBrYWQgU0Q/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkzNDAxNjg1MzQyNTc2MTA3OCI+IlNlbXVhIGZhaWwgeWFuZyBkaXNpbXBhbiBkYWxhbSBzdG9yYW4gVVNCIGFuZGEgYWthbiBkaXBhZGFta2FuLiBUaW5kYWthbiBpbmkgdGlkYWsgYm9sZWggZGl0ZXJiYWxpa2thbiEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4iU2VtdWEgZGF0YSBwYWRhIGthZCBhbmRhIGFrYW4gaGlsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9idXR0b25fZm9ybWF0IiBtc2dpZD0iNDEzMTA2NDU2MDEyNzQ3ODY5NSI+IkZvcm1hdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IlBlbnlhaHBlcGlqYXRhbiBVU0IgZGlzYW1idW5na2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjEwMTY2NTQ2Mjc2MjY0NzYxNDIiPiJTZW50dWggdW50dWsgbWVsdW1wdWhrYW4gcGVueWFocGVwaWphdGFuIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaW5wdXRfbWV0aG9kIiBtc2dpZD0iNDY1MzM4NzMzNjc5MTIyMjk3OCI+IlBpbGloIGthZWRhaCBpbnB1dCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iOTA5MTY1MjE1NzcyMjQ5NTExNiI+IlNlZGlha2FuIGthZWRhaCBpbnB1dCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiJQYXBhbiBrZWt1bmNpIGZpemlrYWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoYXJkd2FyZSIgbXNnaWQ9Ijc1MTc4MjEwODY4ODg5OTAyNzgiPiJQZXJrYWthc2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxNDA3MzY3MDE3MjYzMDMwNzczIj4iUGlsaWggc3VzdW4gYXR1ciBwYXBhbiBrZWt1bmNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0NjU5MDc3MDA0NDkyNTcwNjMiPiJTZW50dWggdW50dWsgbWVtaWxpaCBzdXN1biBhdHVyIHBhcGFuIGtla3VuY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfYWxwaGFiZXQiIG1zZ2lkPSI1NDMzMjc1NDg1NDk5MDM5MTk5Ij4iIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfbnVtZXJpY19hbHBoYWJldCIgbXNnaWQ9IjQwMzAxNzA1MjQ1OTUxMjM2MTAiPiIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FuZGlkYXRlc19zdHlsZSIgbXNnaWQ9IjQzMzM5MTMwODk2MzcwNjIyNTciPjx1PiJjYWxvbiI8L3U+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDk4MTYwMDUzNTE0Njg1NjAiPiJNZW55ZWRpYWthbiBzdG9yYW4gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NTc2MDM0MTg5NzA5OTQwNTAiPiJNZW55ZWRpYWthbiBrYWQgU0QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4iTWVueWVtYWsgdW50dWsgbWVuZ2VzYW4gcmFsYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiJTdG9yYW4gVVNCIGtvc29uZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IkthZCBTRCBrb3NvbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4iU3RvcmFuIFVTQiBrb3NvbmcgYXRhdSBtZW1wdW55YWkgc2lzdGVtIGZhaWwgeWFuZyB0aWRhayBkaXNva29uZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2NDEwNjU2NDE3ODY5MjM2MDQiPiJLYWQgU0Qga29zb25nIGF0YXUgbWVtcHVueWFpIHNpc3RlbSBmYWlsIHlhbmcgdGlkYWsgZGlzb2tvbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4iU3RvcmFuIFVTQiByb3NhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDEwNzIzOTA2MDE5MTAwMTg5Ij4iS2FkIFNEIHJvc2FrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE3OTU5MTc1NzgzOTUzMzMyODAiPiJTdG9yYW4gVVNCIHJvc2FrLiBDdWJhIGZvcm1hdGthbm55YSBzZW11bGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+IkthZCBTRCByb3Nhay4gQ3ViYSBmb3JtYXRrYW5ueWEgc2VtdWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNjYxNjgzMDMxMzMwOTUxMDczIj4iU3RybiBVU0IgZGlhbGgga2xyIHRucGEgZGlqZ2thIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+IkthZCBTRCBkaWtlbHVhcmthbiB0YW5wYSBkaWphbmdrYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiJOeWFobGVrYXAgc3RvcmFuIFVTQiBzZWJlbHVtIG1lbmdlbHVhcmthbm55YSB1bnR1ayBtZW5nZWxha2thbiBrZWhpbGFuZ2FuIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjYwMTgzMjkzNzQ3NDQ4MjQxIj4iTnlhaGxla2FwIGthZCBTRCBzZWJlbHVtIG1lbmdlbHVhcmthbm55YSB1bnR1ayBtZW5nZWxha2thbiBrZWhpbGFuZ2FuIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+IlN0cm4gVVNCIHNsYW1hdCB1dGsgZGlrbHVhcmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjcyOTgwMTEzMDc5MDYxNjIwMCI+InNlbGFtYXQgdW50dWsgbWVuZ2VsdWFya2FuIGthZCBTRCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE0MjE5NTM2MTYwNjQ5MzUzMCI+IkFuZGEgYm9sZWggbWVuZ2VsdWFya2FuIHN0b3JhbiBVU0IgZGVuZ2FuIHNlbGFtYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2ODg0MTI3ODEzODM3NzYwNCI+IkFuZGEgYm9sZWggbWVuZ2VsdWFya2FuIGthZCBTRCBkZW5nYW4gc2VsYW1hdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDQ4NjM3NzIzMDE0MDIyNzY1MSI+IlN0b3JhbiBVU0IgZGlhbGloIGtlbHVhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiJLYWQgU0QgZGlrZWx1YXJrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iU3RvcmFuIFVTQiBkaWtlbHVhcmthbi4gU2lzaXBrYW4gbWVkaWEgYmFydS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJLYWQgU0QgdGVsYWggZGlrZWx1YXJrYW4uIE1hc3Vra2FuIHlhbmcgYmFydS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9saXN0X2VtcHR5IiBtc2dpZD0iMTY3NTM4ODMzMDc4Njg0MTA2NiI+IlRpYWRhIGFrdGl2aXRpIHlhbmcgc2VwYWRhbiBkaXRlbXVpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9Ijg3ODczNTIwNzQzMjY3NDg4OTIiPiJrZW1hcyBraW5pIHN0YXRpc3RpayBwZW5nZ3VuYWFuIGtvbXBvbmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9IjExMDY2MTI0MjQyNTQyNzc2MzAiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ3ViYWggc3VhaSBzdGF0aXN0aWsgcGVuZ2d1bmFhbiBrb21wb25lbiB5YW5nIGRpa3VtcHVsLiBCdWthbiB1bnR1ayBrZWd1bmFhbiBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzNDEwMzYzMTEyMTE0MDY2OTIiPiJzYWxpbiBrYW5kdW5nYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzOTA2OTcxMjQyODgzMTc4MzEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2d1bmFrYW4gcGVya2hpZG1hdGFuIGJla2FzIGxhbGFpIHVudHVrIG1lbnlhbGluIGthbmR1bmdhbi4gQnVrYW4gdW50dWsgZGlndW5ha2FuIG9sZWggYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iMTY0MjAyNDQ1NTc1MDQxNDY5NCI+IkJ1YXQgbGFsdWFuIG91dHB1dCBtZWRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JvdXRlX21lZGlhX291dHB1dCIgbXNnaWQ9IjQ5MzI4MTg3NDk1NDcyNDQzNDYiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYnVhdCBsYWx1YW4gb3V0cHV0IG1lZGlhIGtlIHBlcmFudGkgbHVhcmFuIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI3NTY1NTUyMjM3OTc3ODE1MDQ3Ij4iQWtzZXMgc3RvcmFuIHNlbGFtYXQgcGVuZ2F3YWwga2VrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9IjU4NjYyNDU0ODQzMDMyODU3NjIiPiJNZW1iZW5hcmthbiBhcGxpa2FzaSBtZW5nYWtzZXMgc3RvcmFuIHNlbGFtYXQgcGVuZ2F3YWwga2VrdW5jaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIxNzIxOTUxODQyMDc4MjgzODciPiJLYXdhbCBwYXBhcmthbiBkYW4gc2VtYnVueWlrYW4gcGVuZ2F3YWwga2VrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIzMDQzNzMyMjkwNTE4NjI5MDYxIj4iTWVtYmVuYXJrYW4gYXBsaWthc2kgdW50dWsgbWVuZ2F3YWwgcGVuZ2F3YWwga2VrdW5jaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiJTZW50dWggZHVhIGthbGkgdW50dWsgbWVuZGFwYXRrYW4ga2F3YWxhbiB6dW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnYWRnZXRfaG9zdF9lcnJvcl9pbmZsYXRpbmciIG1zZ2lkPSI0ODgyMDA0MzE0OTA2NDY2MTYyIj4iVGlkYWsgZGFwYXQgbWVuYW1iYWhrYW4gd2lkZ2V0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZ28iIG1zZ2lkPSI4MzIwODQ1NjUxNzM3MzY5MDI3Ij4iUGVyZ2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlYXJjaCIgbXNnaWQ9IjY1ODExMDI3MTgyMjgwNzgxMSI+IkNhcmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlbmQiIG1zZ2lkPSIyMzE2MTY2NTU2MzQ5MzE0NDI0Ij4iSGFudGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9uZXh0IiBtc2dpZD0iMzEzODg0MzkwNDAwOTgxMzgzNCI+IlNldGVydXNueWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2RvbmUiIG1zZ2lkPSI4OTcxNTE2MTE3OTEwOTM0NjA1Ij4iU2VsZXNhaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4iU2JsbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZGVmYXVsdCIgbXNnaWQ9IjI4NDA5MjE4ODU1NTgwNDU3MjEiPiJMYWtzYW5ha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlhbF9udW1iZXJfdXNpbmciIG1zZ2lkPSI1Nzg5MTc2NDI1MTY3NTczNTg2Ij4iRGFpbCBub21ib3Jcbm1lbmdndW5ha2FuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9jb250YWN0X3VzaW5nIiBtc2dpZD0iNDk0NzQwNTIyNjc4ODEwNDUzOCI+Ild1anVka2FuIGtlbmFsYW5cbm1lbmdndW5ha2FuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9oZWFkZXIiIG1zZ2lkPSIyMTA2MTAzODE3OTM3ODU5NjYyIj4iU2F0dSBhdGF1IGxlYmloIGFwbCBiZXJpa3V0IG1lbWludGEga2ViZW5hcmFuIHVudHVrIG1lbmdha3NlcyBha2F1biBhbmRhLCBzZWthcmFuZyBkYW4gcGFkYSBtYXNhIGhhZGFwYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2Zvb3RlciIgbXNnaWQ9IjMxMjUyMTEzNDMzNzkzNzY1NjEiPiJBZGFrYWggYW5kYSBtYWh1IG1lbWJlbmFya2FuIHBlcm1pbnRhYW4gaW5pPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW50X3Blcm1pc3Npb25zX2hlYWRlcl90ZXh0IiBtc2dpZD0iNjg3NDQ5NzQwODIwMTgyNjcwOCI+IlBlcm1pbnRhYW4gYWtzZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbGxvdyIgbXNnaWQ9IjcyMjU5NDg4MTEyOTYzODY1NTEiPiJCZW5hcmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4iTmFmaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NDg2NzU5Nzk1OTI2MjM3OTA3Ij4iS2ViZW5hcmFuIGRpbWludGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij4iS2ViZW5hcmFuIGRpbWludGFcbnVudHVrIGFrYXVuIDx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRfbWV0aG9kX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjgzNTU3MTc5OTQ0OTkyNjQ5Ij4iS2FlZGFoIGlucHV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IlBlbnllZ2VyYWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjQxNDgxMjA3NDIwOTY0NzQ2NDEiPiJLZWJvbGVoYWtzZXNhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndhbGxwYXBlcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTI0MDA4Nzg0NDMwNDY4NzY2MiI+IktlcnRhcyBkaW5kaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iVHVrYXIga2VydGFzIGRpbmRpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJQZW5kZW5nYXIgcGVtYmVyaXRhaHVhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGRpYWt0aWZrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gZGlha3RpZmthbiBvbGVoIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlNlbnR1aCB1bnR1ayBtZW5ndXJ1cyByYW5na2FpYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHRfbG9uZyIgbXNnaWQ9IjY0MDczNTEwMDYyNDkxNzQ0NzMiPiJCZXJzYW1idW5nIGtlIDx4bGlmZjpnIGlkPSJTRVNTSU9OIj4lczwveGxpZmY6Zz4uIFNlbnR1aCB1bnR1ayBtZW5ndXJ1cyByYW5na2FpYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDQzNDM4OTY0NDQwOTYwNzQ1Ij4iVlBOIHNlbnRpYXNhIGhpZHVwIHNlZGFuZyBkaXNhbWJ1bmdrYW4uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGVkIiBtc2dpZD0iODIwMjY3OTY3NDgxOTIxMzkzMSI+IlZQTiBzZW50aWFzYSBoaWR1cCB0ZWxhaCBkaXNhbWJ1bmdrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fZXJyb3IiIG1zZ2lkPSI2MDA5MjQ5ODE0MDM0NzA4MTc1Ij4iUmFsYXQgVlBOIHNlbnRpYXNhIGhpZHVwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2NvbmZpZyIgbXNnaWQ9IjY0MTU4OTkxNTA2NzE1Mzc5NzAiPiJTZW50dWggdW50dWsgbWVuZ2tvbmZpZ3VyYXNpa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXBsb2FkX2ZpbGUiIG1zZ2lkPSIyODk3OTU3MTcyMzY2NzMwNDE2Ij4iUGlsaWggZmFpbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vX2ZpbGVfY2hvc2VuIiBtc2dpZD0iNjM2MzY0ODU2MjE3MDc1OTQ2NSI+IlRpYWRhIGZhaWwgZGlwaWxpaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc2V0IiBtc2dpZD0iMjQ0ODE2ODA4MDk2NDIwOTkwOCI+IlRldGFwa2FuIHNlbXVsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN1Ym1pdCIgbXNnaWQ9IjE2MDIzMzU1NzIwODk5MTE5NDEiPiJTZXJhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+Ik1vZCBrZXJldGEgZGlkYXlha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgwMzUyMzA1Mzc1NjM1MDMyNjIiPiJTZW50dWggdW50dWsga2VsdWFyIGRhcmkgbW9kIGtlcmV0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzMTQ2Njk0MjM0Mzk4MjAyNjAxIj4iUGVuYW1iYXRhbiBhdGF1IHRpdGlrIHBhbmFzIGFrdGlmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI2ODU3MDMxNzYwMTAzMDYyOTgyIj4iU2VudHVoIHVudHVrIG1lbnllZGlha2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhY2tfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjMwMDQ3MDAwNDUwMzM0MzQzOSI+IktlbWJhbGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZXh0X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEwODA1NTUxMDQ2Nzc5OTI0MDgiPiJTZXRlcnVzbnlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2tpcF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMjc1MzYyMjk5NDcxNjMxODE5Ij4iTGFuZ2thdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlX3dhcm5pbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDg5MDg5NDI2NzQ1NDg2NzI3NiI+IlBlbmdndW5hYW4gdGluZ2dpIGRhdGEgbXVkYWggYWxpaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlX3dhcm5pbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIzMzQwODIyMjI4NTk5MzM3NzQzIj4iU2VudHVoIHVudHVrIG1lbmdldGFodWkgbGViaWggbGFuanV0IG1lbmdlbmFpIHBlbmdndW5hYW4gZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjI2OTU0MTg5NzcyOTc4MTMzMiI+Ik1lbGViaWhpIGhhZCBkYXRhIG11ZGFoIGFsaWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI1NDQzNDU3MzIxMzU0OTA3MTgxIj4iU2VudHVoIHVudHVrIG1lbmdldGFodWkgbGViaWggbGFuanV0IG1lbmdlbmFpIHBlbmdndW5hYW4gZGF0YSBtdWRhaCBhbGloLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vX21hdGNoZXMiIG1zZ2lkPSI4MTI5NDIxOTA4OTE1ODQwNzM3Ij4iVGlhZGEgcGFkYW5hbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmRfb25fcGFnZSIgbXNnaWQ9IjE5NDY3OTkyMzM4MjI4MjAzODQiPiJDYXJpIGRpIGhhbGFtYW4iPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTY3MTQ3MDgxMTM2NTc5NDM5Ij4iMSBwYWRhbmFuIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NjQxODcyNzk3MDY3NjA5MTc3Ij4iPHhsaWZmOmcgaWQ9IklOREVYIj4lZDwveGxpZmY6Zz4gZGFyaXBhZGEgPHhsaWZmOmcgaWQ9IlRPVEFMIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbW9kZV9kb25lIiBtc2dpZD0iNzIxNzU4MTY0MDQ2MTkyMjI4OSI+IlNlbGVzYWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MjM4MTA0NDg1MDc2MTI3NDYiPiJNZW55YWhsZWthcCBzdG9yYW4gVVNC4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMjc4OTQ5OTg0MDk1MzcxOTAiPiJNZW55YWhsZWthcCBrYWQgU0TigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJNZW1hZGFta2FuIHN0b3JhbiBVU0LigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjU5Njk4ODg3NTUwNzA0MzA0MiI+Ik1lbWFkYW1rYW4ga2FkIFNE4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiJUaWRhayBkYXBhdCBtZW1hZGFta2FuIHN0b3JhbiBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IlRpZGFrIGRhcGF0IG1lbWFkYW1rYW4ga2FkIFNELiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2JhZF9yZW1vdmFsIiBtc2dpZD0iNzk2MDg2NDA2MTAxNjYwMzI4MSI+IkthZCBTRCB0ZWxhaCBkaWtlbHVhcmthbiBzZWJlbHVtIGRpbnlhaGxla2FwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IlN0b3JhbiBVU0Igc2VkYW5nIGRpc2VtYWsgYnVhdCBtYXNhIGluaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMzQ3NjI1MDM5MDQ4Mjc0ODEiPiJLYWQgU0Qgc2VkYW5nIGRpc2VtYWsgYnVhdCBtYXNhIGluaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yZW1vdmVkIiBtc2dpZD0iNzAwMTUyNjkwNTA1Nzk1MjA5NyI+IkthZCBTRCB0ZWxhaCBkaWtlbHVhcmthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNTgzMDgxNDM0OTI1MDgzNDIyNSI+IlN0b3JhbiBVU0Igc2VkYW5nIGRpZ3VuYWthbiBvbGVoIGtvbXB1dGVyIGJ1YXQgbWFzYSBpbmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcwNjEzMDU2ODEzMzU0MDQzNSI+IkthZCBTRCBzZWRhbmcgZGlndW5ha2FuIG9sZWgga29tcHV0ZXIgYnVhdCBtYXNhIGluaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV91bmtub3duX3N0YXRlIiBtc2dpZD0iNzI5MTkyNzgyMTk3MjkwMzg1Ij4iTWVkaWEgbHVhcmFuIGRhbGFtIGtlYWRhYW4geWFuZyB0aWRhayBkaWtldGFodWkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhcmUiIG1zZ2lkPSIxNzc4Njg2NjE4MjMwMDExOTY0Ij4iS29uZ3NpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmluZCIgbXNnaWQ9IjQ4MDgyNzA5MDAzMjI5ODU5NjAiPiJEYXBhdGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndlYnNlYXJjaCIgbXNnaWQ9IjQzMzcxNTc5Nzc0MDAyMTE1ODkiPiJDYXJpYW4gV2ViIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmluZF9uZXh0IiBtc2dpZD0iNTc0MjEyNDYxODk0MjE5Mzk3OCI+IkNhcmkgc2V0ZXJ1c255YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmRfcHJldmlvdXMiIG1zZ2lkPSIyMTk2NzIzNjY5Mzg4MzYwNTA2Ij4iQ2FyaSBzZWJlbHVtbnlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaWNrZXIiIG1zZ2lkPSI1NjIyNjgzOTEyNjE2NDk2MTcyIj4iUGVybWludGFhbiBsb2thc2kgZGFyaXBhZGEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGl0bGUiIG1zZ2lkPSI1NDQ2ODU4NzE3MTU3NDE2ODM5Ij4iUGVybWludGFhbiBsb2thc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZk1lc3NhZ2UiIG1zZ2lkPSIxMzc0NzE4MDIzMjI0MDAwNzAyIj4iRGltaW50YSBvbGVoIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiAoPHhsaWZmOmcgaWQ9IlNFUlZJQ0UiPiUyJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc1ZlcmlmWWVzIiBtc2dpZD0iMjM0NjU2NjA3Mjg2NzIxMzU2MyI+IllhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiJUaWRhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlcyIgbXNnaWQ9IjUyOTYzMjE4NTA2NjI3NDY4OTAiPiJNZWxlYmloaSBoYWQgcGFkYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+IlRlcmRhcGF0IDx4bGlmZjpnIGlkPSJOVU1CRVJfT0ZfREVMRVRFRF9JVEVNUyI+JTEkZDwveGxpZmY6Zz4gaXRlbSB5YW5nIGRpcGFkYW1rYW4gdW50dWsgPHhsaWZmOmcgaWQ9IlRZUEVfT0ZfU1lOQyI+JTIkczwveGxpZmY6Zz4sIGFrYXVuIDx4bGlmZjpnIGlkPSJBQ0NPVU5UX05BTUUiPiUzJHM8L3hsaWZmOmc+LiBBcGFrYWggeWFuZyBtYWh1IGFuZGEgbGFrdWthbj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX3JlYWxseV9kZWxldGUiIG1zZ2lkPSIyNTcyNjAwMTAzMTIyNTk2MjQzIj4iUGFkYW1rYW4gaXRlbSBpdHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX3VuZG9fZGVsZXRlcyIgbXNnaWQ9IjI5NDEzMTczNjA2MDAzMzg2MDIiPiJCdWF0IGFzYWwgcGVtYWRhbWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY19kb19ub3RoaW5nIiBtc2dpZD0iMzc0Mzc2NDc0MDQzMDgyMTg0NSI+IkphbmdhbiBsYWt1a2FuIGFwYS1hcGEgc2VrYXJhbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfYWNjb3VudF9sYWJlbCIgbXNnaWQ9IjU2NTUyMDMwODk3NDY0MjM5MjciPiJQaWxpaCBha2F1biI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+IlRhbWJhaCBha2F1biI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjM2MTE5ODI4OTQ4NTM0MzU4NzQiPiJUYW1iYWggYWthdW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9idXR0b24iIG1zZ2lkPSIyNDEyMDcyMjcyODMyMjg0MzEzIj4iVGluZ2thdGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfZGVjcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjQ3NjA1MDc3ODM4Njc3OTA2NyI+Ikt1cmFuZ2thbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9tb2RlIiBtc2dpZD0iMzA3MzEwMTA2NzQ0MTYzODQyOCI+Ijx4bGlmZjpnIGlkPSJWQUxVRSI+JXM8L3hsaWZmOmc+IHNlbnR1aCB0ZXJ1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfYWN0aW9uIiBtc2dpZD0iOTEwMTQ3MzA0NTg5MTgzNTQ5MCI+Ikx1bmN1cmthbiBrZSBhdGFzIHVudHVrIG1lbmluZ2thdGthbiBkYW4ga2UgYmF3YWggdW50dWsgbWVuZ3VyYW5na2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iODg2NTg4NTExNDAyODYxNDMyMSI+IlRpbmdrYXRrYW4gbWluaXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9IjYyNDY4MzQ5MzcwODA2ODQ3OTEiPiJLdXJhbmdrYW4gbWluaXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIzNjUyMDU2MDU1ODEwMjIzMTM5Ij4iVGluZ2thdGthbiBqYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIxMzc3NDc5ODYzNDI5MjE0NzkyIj4iS3VyYW5na2FuIGphbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uIiBtc2dpZD0iNDE0NzU5MDY5NjE1MTIzMDg2MyI+IlRldGFwa2FuIFBNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X3NldF9hbV9idXR0b24iIG1zZ2lkPSI4MzAyMTQwMzUzNTM5NDg2NzUyIj4iVGV0YXBrYW4gQU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+IlRpbmdrYXRrYW4gYnVsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iMTgzMjY5ODk5NTU0MTcyNjAxOSI+Ikt1cmFuZ2thbiBidWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNzEzMDQ2NTQxMjMwODE3MzkwMyI+IlRpbmdrYXRrYW4gaGFyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNDEzMTg4MTUyMTgxODc1MDAzMSI+Ikt1cmFuZ2thbiBoYXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNjMxODY5NzM4NDMxMDgwODg5OSI+IlRpbmdrYXRrYW4gdGFodW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI0NDgyMDIxODEzNDkxMTIxNzE3Ij4iS3VyYW5na2FuIHRhaHVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJCYXRhbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiJQYWRhbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4iU2VsZXNhaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IlBlcnViYWhhbiBtb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+Ik1hc3VrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iUGlsaWggYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iS29uZ3NpIGRlbmdhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJLb25nc2kgZGVuZ2FuIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iUGVtZWdhbmcgZ2Vsb25nc29yLiBTZW50dWggJmFtcDsgdGFoYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ikx1bmN1cmthbiBrZSBhdGFzIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJMdW5jdXJrYW4ga2UgYmF3YWggdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ikx1bmN1cmthbiBrZSBraXJpIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iTHVuY3Vya2FuIGtlIGthbmFuIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkJ1a2Ega3VuY2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlNlbnlhcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJCdW55aSBkaWhpZHVwa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJDYXJpYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJMZXJldCB1bnR1ayBtZW1idWthIGt1bmNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJQYXNhbmdrYW4gc2V0IGtlcGFsYSB1bnR1ayBtZW5kZW5nYXIga2VrdW5jaSBrYXRhIGxhbHVhbiBkaXNlYnV0a2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlRpdGlrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUyOTM2MDA0OTY2MDE0OTAyMTYiPiJOYXZpZ2FzaSBsYW1hbiB1dGFtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjM3NDk2NTYyOTUyMTUyNTg5Ij4iTmF2aWdhc2kga2UgYXRhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tZW51X292ZXJmbG93X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjI5NTY1OTAzNzUwOTAwODQ1MyI+IkxhZ2kgcGlsaWhhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI3OTY1OTg0MzYwOTAzNjkzOTAzIj4iJTEkcywgJTIkcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9zdWJ0aXRsZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI2OTg1NTQ2NTMwNDcxNzgwNzI3Ij4iJTEkcywgJTIkcywgJTMkcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfaW50ZXJuYWwiIG1zZ2lkPSI0ODkxOTE2ODMzNjU3OTI5MjYzIj4iU3RvcmFuIGRhbGFtYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4iS2FkIFNEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2IiIG1zZ2lkPSIzMDE3OTU0MDU5NTM4NTE3Mjc4Ij4iU3RvcmFuIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dHJhY3RfZWRpdF9tZW51X2J1dHRvbiIgbXNnaWQ9Ijg5NDA0Nzg3MzA0OTY2MTAxMzciPiJFZGl0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTk1NTYzODg2MjEyMjIzMjM0MiI+IkFtYXJhbiBwZW5nZ3VuYWFuIGRhdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfYm9keSIgbXNnaWQ9IjI4MTQ2NzM1NTE0NzE5Njk5NTQiPiJTZW50dWggdW50dWsgbWVsaWhhdCBwZW5nZ3VuYWFuIGRhbiB0ZXRhcGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfdGl0bGUiIG1zZ2lkPSI3MDkzMzM0NDE5NTE4NzA2Njg2Ij4iRGF0YSAyRy0zRyBkaWx1bXB1aGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfdGl0bGUiIG1zZ2lkPSI3NjM2NDg5NDM2ODE5NDcwNzYxIj4iRGF0YSA0RyBkaWx1bXB1aGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+IkRhdGEgbXVkYWggYWxpaCBkaWx1bXB1aGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiJEYXRhIFdpLUZpIGRpbHVtcHVoa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+IlNlbnR1aCB1bnR1ayBtZW5kYXlha2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiJNZWxlYmloaSBoYWQgZGF0YSAyRy0zRyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiJNZWxlYmloaSBoYWQgZGF0YSA0RyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIyNzkyNDA1NzIxNjU0MTIxNjgiPiJNZWxlYmloaSBoYWQgZGF0YSBtdWRhaCBhbGloIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI4NzQzODU2MDA2Mzg0ODI1OTc0Ij4iTWVsZWJpaGkgaGFkIGRhdGEgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X3Nub296ZWRfYm9keSIgbXNnaWQ9IjcwMzU0OTAyNzgyOTg0NDE3NjciPiI8eGxpZmY6ZyBpZD0iU0laRSI+JXM8L3hsaWZmOmc+IG1lbGViaWhpIGhhZCB5YW5nIGRpdGVudHVrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX3RpdGxlIiBtc2dpZD0iNTk2NTE1NzM2MTAzNjMyMTkxNCI+IkRhdGEgbGF0YXIgYmVsYWthbmcgdGVyaGFkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX2JvZHkiIG1zZ2lkPSI2NzQxNTIxMzMwOTk3NDUyOTkwIj4iU2VudHVoIHVudHVrIG1lbWJ1YW5nIHNla2F0YW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlIiBtc2dpZD0iNjUxMDA0MDQ4NjA0OTIzNzYzOSI+IlNpamlsIGtlc2VsYW1hdGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlX2lzX3ZhbGlkIiBtc2dpZD0iNjgyNTI2MzI1MDc3NDU2OTM3MyI+IlNpamlsIGluaSBzYWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX3RvIiBtc2dpZD0iNDU0MjM5NDgwMjc0OTIxMDMyIj4iRGlrZWx1YXJrYW4ga2VwYWRhOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbW1vbl9uYW1lIiBtc2dpZD0iMjIzMzIwOTI5OTQzNDE3MjY0NiI+Ik5hbWEgYmlhc2E6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnX25hbWUiIG1zZ2lkPSI2OTczNTYxMTkwNzYyMDg1MjM2Ij4iT3JnYW5pc2FzaToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvcmdfdW5pdCIgbXNnaWQ9IjcyNjU5ODE4OTA0MjIwNzAzODMiPiJVbml0IG9yZ2FuaXNhc2k6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX2J5IiBtc2dpZD0iMjY0NzU4NDk4ODA1NzQ4MTU2NiI+IkRpa2VsdWFya2FuIG9sZWg6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idmFsaWRpdHlfcGVyaW9kIiBtc2dpZD0iODgxODg4NjEzNzU0NTk4MzExMCI+Iktlc2FoYW46Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX29uIiBtc2dpZD0iNTg5NTAxNzQwNDM2MTM5NzIzMiI+IkRpa2VsdWFya2FuIHBhZGE6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXhwaXJlc19vbiIgbXNnaWQ9IjM2NzYyNDI5NDk5MTU5NTk4MjEiPiJUYW1hdCB0ZW1wb2ggcGFkYToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4iTm9tYm9yIHNpcmk6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmluZ2VycHJpbnRzIiBtc2dpZD0iNDUxNjAxOTYxOTg1MDc2MzA0OSI+IkNhcCBqYXJpOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiJDYXAgamFyaSBTSEEtMjU2OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4iQ2FwIGphcmkgU0hBLTE6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X3NlZV9hbGwiIG1zZ2lkPSI0MjkyNTY5MzgzOTc2NjM2MjAwIj4iTGloYXQgc2VtdWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI0NzEwMDEzODY0OTc0MDQwNjE1Ij4iUGlsaWggYWt0aXZpdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiJLb25nc2kgZGVuZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9kZXZpY2VfbG9ja2VkIiBtc2dpZD0iMzA5MjcwMzQ0ODY5MDY2OTc2OCI+IlBlcmFudGkgZGlrdW5jaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsaXN0X2RlbGltZXRlciIgbXNnaWQ9IjM5NzUxMTc1NzIxODU0OTQxNTIiPiIsICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbmRpbmciIG1zZ2lkPSIzMjQ1NjUzNjgxMDA4MjE4MDMwIj4iTWVuZ2hhbnRhcuKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaEJyb3dzZXJEZWZhdWx0IiBtc2dpZD0iMjA1Nzk1MTk0NzI5NzYxNDcyNSI+IkxhbmNhcmthbiBQZW55ZW1hayBJbWJhcz8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJTZXR1cENhbGxEZWZhdWx0IiBtc2dpZD0iNTgzNDk0ODQ2OTI1Mzc1ODU3NSI+IlRlcmltYSBwYW5nZ2lsYW4/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX2Fsd2F5cyIgbXNnaWQ9IjgwMTc3NzA3NDc4MDE0OTQ5MzMiPiJTZW50aWFzYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9vbmNlIiBtc2dpZD0iMjQwNDY0NDc5NzE0OTE3Mzc1OCI+IkhhbnlhIHNla2FsaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYxNzA1Mzg5ODE2NzEyNzQ3MSI+IlRhYmxldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQyMzkyOTEyNzM0MjAxNDAxMjMiPiJUZWxlZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2hlYWRwaG9uZXMiIG1zZ2lkPSI4MTE5OTcxODQzODAzNDM5MTEwIj4iRm9uIGtlcGFsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9kb2NrX3NwZWFrZXJzIiBtc2dpZD0iNjI0MDYwMjk4MjI3NjU5MTg2NCI+IlBlbWJlc2FyIHN1YXJhIGRvayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJBdWRpbyBCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlBhcGFyYW4gd2F5YXJsZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iU2VsZXNhaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik91dHB1dCBtZWRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJNZW5naW1iYXPigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJNZW55YW1idW5nLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJUZXJzZWRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNjczOTg5OTk2MjY4MTg4NjQwMSI+IlRpZGFrIHRlcnNlZGlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiJTZWRhbmcgZGlndW5ha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2J1aWx0X2luX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjI1ODMxMzQyOTQyOTI1NjM5NDEiPiJTa3JpbiBUZXJiaW5hIERhbGFtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+IlNrcmluIEhETUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iVGluZGloICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCAoNjAyMjExOTcwMjYyODU3MjA4MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iUGFwYXJhbiB3YXlhcmxlcyBkaXNhbWJ1bmdrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iU2tyaW4gaW5pIGRpdHVuanVra2FuIHBhZGEgcGVyYW50aSBsYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IlB1dHVzIHNhbWJ1bmdhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iUGFuZ2dpbGFuIGtlY2VtYXNhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+Ikx1cGEgQ29yYWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IkNvcmFrIFNhbGFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4iS2F0YSBMYWx1YW4gU2FsYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIHNhbGFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiJDdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+Ikx1a2lza2FuIGNvcmFrIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJNYXN1a2thbiBQSU4gU0lNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJNYXN1a2thbiBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4iTWFzdWtrYW4gS2F0YSBMYWx1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJLaW5pIFNJTSBkaWx1bXB1aGthbi4gTWFzdWtrYW4ga29kIFBVSyB1bnR1ayBtZW5lcnVza2FuLiBIdWJ1bmdpIHBlbWJhd2EgdW50dWsgYnV0aXJhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iTWFzdWtrYW4ga29kIFBJTiB5YW5nIGRpaW5naW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IlNhaGthbiBrb2QgUElOIHlhbmcgZGlpbmdpbmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ik1lbWJ1a2Ega3VuY2kga2FkIFNJTS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IktvZCBQSU4gc2FsYWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iVGFpcGthbiBQSU4geWFuZyBtZW5nYW5kdW5naSA0IGhpbmdnYSA4IG5vbWJvci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJLb2QgUFVLIG1lc3RpbGFoIDggbm9tYm9yIGF0YXUgbGViaWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iTWFzdWtrYW4gc2VtdWxhIGtvZCBQSU4geWFuZyBiZXR1bC4gUGVyY3ViYWFuIGJlcnVsYW5nIGFrYW4gbWVsdW1wdWhrYW4gU0lNIHNlY2FyYSBrZWthbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iS29kIFBJTiB0aWRhayBzZXBhZGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iVGVybGFsdSBiYW55YWsgcGVyY3ViYWFuIG1lbHVraXMgY29yYWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iVW50dWsgbWVtYnVrYSBrdW5jaSwgbG9nIG1hc3VrIGRlbmdhbiBha2F1biBHb29nbGUgYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+Ik5hbWEgUGVuZ2d1bmEgKEUtbWVsKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4iS2F0YSBsYWx1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IkxvZyBtYXN1ayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4iTmFtYSBwZW5nZ3VuYSBhdGF1IGthdGEgbGFsdWFuIHRpZGFrIHNhaC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4iTHVwYSBuYW1hIHBlbmdndW5hIGF0YXUga2F0YSBsYWx1YW4gYW5kYT9cbkxhd2F0aSI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiJNZW55ZW1hayBha2F1buKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iQW5kYSB0ZWxhaCBtZW5haXAgUElOIGFuZGEgc2VjYXJhIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFxuXG5DdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iQW5kYSB0ZWxhaCBtZW5haXAga2F0YSBsYWx1YW4gYW5kYSBzZWNhcmEgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gXG5cbkN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJBbmRhIHRlbGFoIHRlcnNpbGFwIG1lbHVraXMgY29yYWsgYnVrYSBrdW5jaSBhbmRhIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFxuXG5DdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiJBbmRhIHRlbGFoIG1lbmN1YmEgdW50dWsgbWVtYnVrYSBrdW5jaSB0YWJsZXQgZGVuZ2FuIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCB0YWJsZXQgYWthbiBkaXRldGFwa2FuIHNlbXVsYSBrZXBhZGEgdGV0YXBhbiBsYWxhaSBraWxhbmcgZGFuIHNlbXVhIGRhdGEgcGVuZ2d1bmEgYWthbiBoaWxhbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRlbGVmb24gZGVuZ2FuIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCB0ZWxlZm9uIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2VwYWRhIHRldGFwYW4gbGFsYWkga2lsYW5nIGRhbiBzZW11YSBkYXRhIHBlbmdndW5hIGFrYW4gaGlsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4iQW5kYSB0ZWxhaCBtZW5jdWJhIHVudHVrIG1lbWJ1a2Ega3VuY2kgdGFibGV0IHNlY2FyYSBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FsaS4gVGFibGV0IGtpbmkgYWthbiBkaXRldGFwa2FuIHNlbXVsYSBrZSB0ZXRhcGFuIGxhbGFpIGtpbGFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiJBbmRhIHRlbGFoIG1lbmN1YmEgdW50dWsgbWVtYnVrYSBrdW5jaSB0ZWxlZm9uIHNlY2FyYSBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FsaS4gVGVsZWZvbiBraW5pIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2UgdGV0YXBhbiBsYWxhaSBraWxhbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkFuZGEgdGVsYWggdGVyc2lsYXAgbWVsdWtpcyBjb3JhayBidWthIGt1bmNpIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCBhbmRhIGFrYW4gZGltaW50YSBtZW1idWthIGt1bmNpIHRhYmxldCBhbmRhIG1lbmdndW5ha2FuIGxvZyBtYXN1ayBHb29nbGUgYW5kYS5cblxuIEN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iQW5kYSB0ZWxhaCB0ZXJzaWxhcCBsdWtpcyBjb3JhayBidWthIGt1bmNpIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCBhbmRhIGFrYW4gZGltaW50YSBtZW1idWthIGt1bmNpIHRlbGVmb24gYW5kYSBtZW5nZ3VuYWthbiBsb2cgbWFzdWsgR29vZ2xlIGFuZGEuXG5cbiBDdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJBbGloIGtlbHVhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhZmVfbWVkaWFfdm9sdW1lX3dhcm5pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzI0MTYxOTM5NDc1NDc4MDY2Ij4iVGluZ2thdGthbiBrZWxhbnRhbmdhbiBtZWxlYmloaSBhcmFzIHlhbmcgZGljYWRhbmdrYW4/XG5NZW5kZW5nYXIgcGFkYSBrZWxhbnRhbmdhbiB0aW5nZ2kgdW50dWsgdGVtcG9oIHlhbmcgcGFuamFuZyBib2xlaCBtZXJvc2Fra2FuIHBlbmRlbmdhcmFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGludWVfdG9fZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNjI2NDI3MzcyMzE2MDcwMjU4Ij4iVGVydXNrYW4gbWVuYWhhbiBkZW5nYW4gZHVhIGphcmkgdW50dWsgbWVuZGF5YWthbiBrZWJvbGVoY2FwYWlhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2VuYWJsZWQiIG1zZ2lkPSIxMzgxOTcyMDQ4NTY0NTQ3Njg1Ij4iS2Vib2xlaGNhcGFpYW4gZGlkYXlha2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hY2Nlc3NpYmlsaXR5X2NhbmNlbGVkIiBtc2dpZD0iMzgzMzkyMzI1Nzk2NjYzNTY3MyI+IktlYm9sZWhjYXBhaWFuIGRpYmF0YWxrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJQZW5nZ3VuYSBzZW1hc2EgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im93bmVyX25hbWUiIG1zZ2lkPSIyNzE2NzU1NDYwMzc2MDI4MTU0Ij4iUGVtaWxpayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVycm9yX21lc3NhZ2VfdGl0bGUiIG1zZ2lkPSI0NTEwMzczMDgzMDgyNTAwMTk1Ij4iUmFsYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbm9fcmVzdHJpY3RlZF9hY2NvdW50cyIgbXNnaWQ9IjU3Mzk0NjMyNDk2NzM3Mjc3MzYiPiJBcGwgaW5pIHRpZGFrIG1lbnlva29uZyBha2F1biB1bnR1ayBwcm9maWwgeWFuZyBkaXNla2F0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX25vdF9mb3VuZCIgbXNnaWQ9IjM0MjkxNDE4NTM0OTg5MjczNzkiPiJUaWRhayBtZW5lbXVpIGFwbGlrYXNpIHVudHVrIG1lbmdlbmRhbGlrYW4gdGluZGFrYW4gaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IkJhdGFsa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMCIgbXNnaWQ9Ijc4NzU0Mjc0ODk0MjA4MjE3OTMiPiJJU08gQTAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExIiBtc2dpZD0iMzc2MDczNDQ5OTA1MDg3NTM1NiI+IklTTyBBMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTIiIG1zZ2lkPSI1OTczMjY2Mzc4MDIwMTQ0MzgyIj4iSVNPIEEyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMyIgbXNnaWQ9IjEzNzM0MDcxMDU2ODczMDA4ODQiPiJJU08gQTMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E0IiBtc2dpZD0iNjY4OTc3MjgwNzk4MjU5NzI1NCI+IklTTyBBNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTUiIG1zZ2lkPSI1MzUzNTQ5NjUyMDE1NzQxMDQwIj4iSVNPIEE1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNiIgbXNnaWQ9Ijg1ODUwMzgwNDg2NzQ5MTE5MDciPiJJU08gQTYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E3IiBtc2dpZD0iNjY0MTgzNjcxNjk2MzgzOTExOSI+IklTTyBBNyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTgiIG1zZ2lkPSI3NTcxMTM5NDM3NDY1NjkzMzU1Ij4iSVNPIEE4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOSIgbXNnaWQ9IjEzNzg0NTU4OTE5NTcxMTUwNzkiPiJJU08gQTkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExMCIgbXNnaWQ9IjI0ODA3NDc0NTc0Mjk0NzUzNDQiPiJJU08gQTEwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMCIgbXNnaWQ9IjM5NjU5MzUwOTc2NjExMDgwMzkiPiJJU08gQjAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxIiBtc2dpZD0iMjUwNTc1MzI4NTAxMDExNTQzNyI+IklTTyBCMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjIiIG1zZ2lkPSI4NzYzODc0NzA5ODU5NDU4NDUzIj4iSVNPIEIyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMyIgbXNnaWQ9IjQyMTA1MDY2ODgxOTE3NjQwNzYiPiJJU08gQjMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I0IiBtc2dpZD0iNTc0OTQwNDE2NTg4ODUyNjAzNCI+IklTTyBCNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjUiIG1zZ2lkPSI3NjQwNjI3NDE0NjIxOTA0NzMzIj4iSVNPIEI1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNiIgbXNnaWQ9IjczNDI5ODg4NjQ3MTI3NDg1NDQiPiJJU08gQjYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I3IiBtc2dpZD0iNTA2OTg0NDA2NTIzNTM4MjQyOSI+IklTTyBCNyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjgiIG1zZ2lkPSI3MzE2ODE4OTIyMjc4Nzc5Nzc0Ij4iSVNPIEI4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOSIgbXNnaWQ9IjU0MTQ3MjcwOTQwMjY1MzIzNDEiPiJJU08gQjkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxMCIgbXNnaWQ9IjUyNTEyNTM3MzE4MzIwNDgxODUiPiJJU08gQjEwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMCIgbXNnaWQ9IjQwMDMxMzgzNDI2NzE5NjQyMTciPiJJU08gQzAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MxIiBtc2dpZD0iMTkzNTE4ODA2MzM5MzU1MzAwOCI+IklTTyBDMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzIiIG1zZ2lkPSIzMTk3MzA3OTY5NzEyMDY5OTA0Ij4iSVNPIEMyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMyIgbXNnaWQ9IjQzMzU4MjYwODczMjE5MTM1MDgiPiJJU08gQzMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M0IiBtc2dpZD0iMzc0NTYzOTU5ODI4MTAxNTAwNSI+IklTTyBDNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzUiIG1zZ2lkPSI4MjY5NDU3NzY1ODIyNzkxMDEzIj4iSVNPIEM1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNiIgbXNnaWQ9IjU2NjY2NjEwNTI2MDM0NjkzMCI+IklTTyBDNiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzciIG1zZ2lkPSI4Njc4NDEzMTgwNzgyNjA4NDk4Ij4iSVNPIEM3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jOCIgbXNnaWQ9IjgzOTIzNzYyMDY2MjcwNDE3MzAiPiJJU08gQzgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M5IiBtc2dpZD0iOTE5MTYxMzM3MjMyNDg0NTQwNSI+IklTTyBDOSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEwIiBtc2dpZD0iNzMyNzcwOTY5OTE4NDkyMDgyMiI+IklTTyBDMTAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGV0dGVyIiBtc2dpZD0iNDE5MTgwNTYxNTgyOTQ3Mjk1MyI+IlN1cmF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2d2cm5tdF9sZXR0ZXIiIG1zZ2lkPSI3ODUzMzgyMTkyNjQ5NDA1NTA3Ij4iU3VyYXQgS2VyYWphYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVnYWwiIG1zZ2lkPSI2Njk3OTgyOTg4MjgzODIzMTUwIj4iVW5kYW5nLXVuZGFuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9qdW5pb3JfbGVnYWwiIG1zZ2lkPSIzNzI3NzQzOTY5OTAyNzU4OTQ4Ij4iVW5kYW5nLXVuZGFuZyBKdW5pb3IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVkZ2VyIiBtc2dpZD0iMjgxODcxNDY0ODk2NjAxMjM2Ij4iTGVqYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfdGFibG9pZCIgbXNnaWQ9IjU3NzU5NjY0MTYzMzM1NzgxMjciPiJUYWJsb2lkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id3JpdGVfZmFpbF9yZWFzb25fY2FuY2VsbGVkIiBtc2dpZD0iNzA5MTI1ODM3ODEyMTYyNzYyNCI+IkRpYmF0YWxrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5ub3Rfd3JpdGUiIG1zZ2lkPSI4MTMyNTA1NDE3OTM1MzM3NzI0Ij4iUmFsYXQgbWVudWxpcyBrYW5kdW5nYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfcGluIiBtc2dpZD0iMzM5NTk1MzQyMTM2ODQ3NjEwMyI+Ik1hc3Vra2FuIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9vbGRfcGluIiBtc2dpZD0iMTQ2MjIwNjIyNTUxMjkxMDc1NyI+IlBJTiBzZW1hc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfbmV3X3BpbiIgbXNnaWQ9IjU5NTk2MDY2OTE2MTk5NTkxODQiPiJQSU4gYmFoYXJ1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NvbmZpcm1fcGluIiBtc2dpZD0iODUwMTUyMzgyOTYzMzE0NjIzOSI+IlNhaGthbiBQSU4gYmFoYXJ1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4iQnVhdCBQSU4gdW50dWsgbWVuZ3ViYWggc3VhaSBzZWthdGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiJQSU4gdGlkYWsgc2VwYWRhbi4gQ3ViYSBsYWdpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lcnJvcl90b29fc2hvcnQiIG1zZ2lkPSI4MTczOTgyNzU2MjY1Nzc3NzkyIj4iUElOIHRlcmxhbHUgcGVuZGVrLiBNZXN0aSBzZWt1cmFuZy1rdXJhbmdueWEgNCBhbmdrYS4iPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9InJlc3RyX3Bpbl9jb3VudGRvd24iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0ODM1NjM5OTY5NTAzNzI5ODc0Ij4iUElOIHNhbGFoLiBDdWJhIGxhZ2kgZGFsYW0gbWFzYSAxIHNhYXQuIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4MDMwNjA3MzQzMjIzMjg3NjU0Ij4iUElOIHNhbGFoLiBDdWJhIGxhZ2kgZGFsYW0gbWFzYSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0LiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKaW5kZXggM2JlODgxNy4uNzk0ZjcyYiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJTa3JpdiBpbm4gZW4gUFVLLWtvZGUgcMOlIMOldHRlIHRhbGwgZWxsZXIgbWVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0ta29ydGV0IGRpdHQgZXIgUFVLLWzDpXN0LiBTa3JpdiBpbm4gUFVLLWtvZGVuIGZvciDDpSBsw6VzZSBkZXQgb3BwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNrcml2IGlubiBQVUsyIGZvciDDpSBsw6VzZSBvcHAgU0lNLWtvcnRldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJNaXNseWt0ZXMg4oCTIGFrdGl2ZXIgbMOlcyBmb3IgU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iRHUgaGFyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmb3Jzw7hrIGlnamVuIGbDuHIgU0lNLWtvcnRldCBsw6VzZXMuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iRHUgaGFyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmb3Jzw7hrIGlnamVuIGbDuHIgU0lNLWtvcnRldCBsw6VzZXMuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJbm5nw6VlbmRlIG51bW1lcnZpc25pbmciPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IkxhciBpbm5laGF2ZXJlbiBiaW5kZSBzZWcgdGlsIGRldCDDuHZlcnN0ZSBuaXbDpWV0IGF2IGdyZW5zZXNuaXR0ZXQgZm9yIGVuIFZQTi10amVuZXN0ZS4gU2thbCBhbGRyaSB2w6ZyZSBuw7hkdmVuZGlnIGZvciB2YW5saWdlIGFwcGVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJiaW5kZSB0aWwgYmFrZ3J1bm5zYmlsZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkxhciBpbm5laGF2ZXJlbiBiaW5kZSBkZXQgw7h2ZXJzdGUgbml2w6VldCBhdiBncmVuc2Vzbml0dGV0IHRpbCBlbiBiYWtncnVubi4gU2thbCBhbGRyaSB2w6ZyZSBuw7hkdmVuZGlnIGZvciB2YW5saWdlIGFwcGVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iYmluZGUgdGlsIGVrc3Rlcm4gc2tqZXJtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iTGFyIGlubmVoYXZlcmVuIGJpbmRlIHNlZyB0aWwgZGV0IMO4dmVyc3RlIGdyZW5zZXNuaXR0bml2w6VldCBmb3IgZWtzdGVybiBza2plcm0uIFNrYWwgYWxkcmkgdsOmcmUgbsO4ZHZlbmRpZyBmb3IgdmFubGlnZSBhcHBlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJiaW5kZSB0aWwgbW9kdWx0amVuc3RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkxhciBpbm5laGF2ZXJlbiBiaW5kZSBzZWcgdGlsIGRldCDDuHZlcnN0ZSBuaXbDpWV0IGF2IGdyZW5zZXNuaXR0ZXQgZm9yIGVuIG1vZHVsdGplbmVzdGUuIFNrYWwgYWxkcmkgdsOmcmUgbsO4ZHZlbmRpZyBmb3IgdmFubGlnZSBhcHBlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJrb21tdW5pc2VyZSBtZWQgZW5oZXRzYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iTGFyIGFwcGVuIGJydWtlIGdydW5ubGVnZ2VuZGUgU3VyZmFjZUZsaW5nZXItZnVua3Nqb25lci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJsZXNlIHNramVybWJ1ZmZlcmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IkxhciBhcHBlbiBsZXNlIGlubmhvbGRldCBpIHJhbW1lYnVmZmVyZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4idGlsZ2FuZyB0aWwgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkxhciBhcHBlbiBicnVrZSBncnVubmxlZ2dlbmRlIElucHV0Rmxpbmdlci1mdW5rc2pvbmVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ia29uZmlndXJlcmUgV2ktRmktc2tqZXJtZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJUaWxsYXRlciBhcHBlbiDDpSBrb25maWd1cmVyZSBvZyBrb2JsZSB0aWwgV2ktRmktc2tqZXJtZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJrb250cm9sbGVyZSBXaS1GaS1za2plcm1lciI8L3N0cmluZz4KQEAgLTQ5NSw2ICs1MDQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiJMYXIgYXBwZW4gZW5kcmUgZ2xvYmFsZSBseWRpbm5zdGlsbGluZ2VyIHNsaWsgc29tIHZvbHVtIG9nIGh2aWxrZW4gaMO4eXR0YWxlciBzb20gYnJ1a2VzIGZvciBseWRhdnNwaWxsaW5nLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4idGEgb3BwIGx5ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IkxhciBhcHBlbiB0YSBvcHAgbHlkIG1lZCBtaWtyb2ZvbmVuLiBEZXR0ZSBiZXR5ciBhdCBhcHBlbiBrYW4gdGEgb3BwIGx5ZCBuw6VyIHNvbSBoZWxzdCB1dGVuIGF0IGR1IGhhciBiZWR0IG9tIGRldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+InNpbS1rb21tdW5pa2Fzam9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4iTGFyIGFwcGVuIHNlbmRlIGtvbW1hbmRvZXIgdGlsIFNJTS1rb3J0ZXQuIERldHRlIGVyIHZlbGRpZyBmYXJsaWcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4idGEgYmlsZGVyIG9nIHZpZGVvZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iTGFyIGFwcGVuIHRhIGJpbGRlciBvZyBmaWxtZSBtZWQga2FtZXJhZXQuIERlbm5lIHRpbGxhdGVsc2VuIGdqw7hyIGF0IGFwcGVuIGthbiBicnVrZSBrYW1lcmFldCBuw6VyIHNvbSBoZWxzdCB1dGVuIGJla3JlZnRlbHNlIGZyYSBkZWcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4iZGVha3RpdmVyIExFRC1seXNldCBmb3IgaW5kaWtlcmluZyBhdiBvdmVyZsO4cmluZyBuw6VyIGthbWVyYWV0IGVyIGkgYnJ1ayI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IkhqZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iQXJiZWlkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJBbm5lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJEdSBoYXIgaW5nZW4gYXBwZXIgc29tIGthbiDDpXBuZSBkZW5uZSBrb250YWt0ZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iU2tyaXYgaW5uIFBJTi1rb2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iU2tyaXYgaW5uIFBVSy1rb2RlIG9nIG55IHBlcnNvbmxpZyBrb2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsta29kZSI8L3N0cmluZz4KQEAgLTg2NSw3ICs4NzcsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiJHbGVtdCBtw7huc3RlcmV0PyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+Ik9wcGzDpXNpbmcgYXYga29udG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiJGb3IgbWFuZ2UgZm9yc8O4ayBww6UgdGVnbmluZyBhdiBtw7huc3RlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiJMb2dnIGRlZyBww6UgbWVkIEdvb2dsZS1rb250b2VuIGRpbiBmb3Igw6UgbMOlc2Ugb3BwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiJMb2dnIHDDpSBtZWQgR29vZ2xlLWtvbnRvZW4gZGluIGZvciDDpSBsw6VzZSBvcHAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9Ijg4NDY4ODE0MjQxMDY0ODQ0NDciPiJCcnVrZXJuYXZuIChlLXBvc3QpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjU5NTgwMjgzODM5NTQ3Mzg1MjgiPiJQYXNzb3JkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjcxMzA4OTM2OTQ3OTU3ODYzMDAiPiJMb2dnIHDDpSI8L3N0cmluZz4KQEAgLTExODIsNyArMTE5NCw3IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzkxNTg5NTMyMzY0NDI5Mjc2OCI+IsOFcG5lIHRyw6VkbMO4c25ldHQgaSBuw6ZyaGV0ZW4iPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iNDAyOTQ4OTcxNjYwNTI1NTM4NiI+IlDDpWxvZ2dpbmcgdGlsIFdpLUZpLW5ldHR2ZXJrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV0d29ya19hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9Ijg0OTUxNTU1OTMzNTgwNTQ2NzYiPiJMb2dnIGRlZyBww6UgbmV0dHZlcmtldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4iTG9nZyBww6UgbmV0dHZlcmtldCI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+IkthbiBpa2tlIGtvYmxlIHRpbCBXaS1GaSI8L3N0cmluZz4KQEAgLTEyMTgsNyArMTIzMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4iQWxkcmkgdGlsbGF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4iU0lNLWtvcnQgZXIgZmplcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4iRGV0IG1vYmlsZSBuZXR0dmVya2V0IGZvcmJsaXIgdXRpbGdqZW5nZWxpZyBpbm50aWwgZHUgc3RhcnRlciBww6Ugbnl0dCBtZWQgZXQgZ3lsZGlnIFNJTS1rb3J0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9kb25lX2J1dHRvbiIgbXNnaWQ9IjgyNzk0OTk4OTM2OTk2Mzc3NSI+IkZ1bGxmw7hydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9kb25lX2J1dHRvbiIgbXNnaWQ9IjgyNzk0OTk4OTM2OTk2Mzc3NSI+IkZlcmRpZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiJTSU0ta29ydCBlciBsYWd0IHRpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF9tZXNzYWdlIiBtc2dpZD0iNjU5OTk0NTMwMTE0MTA1MDIxNiI+IlN0YXJ0IGVuaGV0ZW4gcMOlIG55dHQgZm9yIMOlIGbDpSB0aWxnYW5nIHRpbCBkZXQgbW9iaWxlIG5ldHR2ZXJrZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2ltX3Jlc3RhcnRfYnV0dG9uIiBtc2dpZD0iNDcyMjQwNzg0MjgxNTIzMjM0NyI+IlN0YXJ0IHDDpSBueXR0Ijwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlZlbGcgZW4gYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iS3VubmUgaWtrZSBzdGFydGUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkRlbCBtZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iRGVsIG1lZCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IkdsaWRlYnJ5dGVyLiBUcnlrayBvZyBob2xkIGlubmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkRyYSBvcHAgZm9yIMOlIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJEcmEgbmVkIGZvciDDpSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRHJhIHRpbCB2ZW5zdHJlIGZvciDDpSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkRyYSB0aWwgaMO4eXJlIGZvciDDpSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJMw6VzIG9wcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU3RpbGxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+Ikx5ZCBww6UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlPDuGsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJTdmVpcCBmb3Igw6UgbMOlc2Ugb3BwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJLb2JsZSB0aWwgaG9kZXRlbGVmb25lciBmb3Igw6UgaMO4cmUgb3BwbGVzaW5nIGF2IGJva3N0YXZlbmUgaSBwYXNzb3JkZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUHVua3R1bS4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTeXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aC1seWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlRyw6VkbMO4cyBza2plcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iRnVsbGbDuHJ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iTWVkaWV1dGdhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IktvYmxlIHRpbCBlbmhldGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iU2VuZCBza2plcm1lbiB0aWwgZW5oZXRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlPDuGtlciBldHRlciBlbmhldGVyIOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IklubnN0aWxsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iS29ibGUgZnJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNrYW5uZXIgLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iS29ibGVyIHRpbCAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IlRpbGdqZW5nZWxpZyI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Ik92ZXJsZWdnICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzaWtrZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IlRyw6VkbMO4cyBza2plcm1kZWxpbmcgZXIgdGlsa29ibGV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkRlbm5lIHNramVybWVuIHZpc2VzIHDDpSBlbiBhbm5lbiBlbmhldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJTZW5kZXIgc2tqZXJtZW4g4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iS29ibGVyIHRpbCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJTZW5kZXIgc2tqZXJtZW4g4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJLb2JsZXQgdGlsIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJLb2JsZSBmcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Ik7DuGRudW1tZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJIYXIgZHUgZ2xlbXQgbcO4bnN0ZXJldD8iPC9zdHJpbmc+CkBAIC0xNTE4LDcgKzE1MjgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iU2tyaXYgaW5uIGRlbiBrb3JyZWt0ZSBQVUsta29kZW4gcMOlIG55dHQuIEdqZW50YXR0ZSBmb3Jzw7hrIGtvbW1lciB0aWwgw6UgZGVha3RpdmVyZSBTSU0ta29ydGV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ta29kZW5lIHN0ZW1tZXIgaWtrZSBvdmVyZW5zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iRm9yIG1hbmdlIGZvcnPDuGsgcMOlIHRlZ25pbmcgYXYgbcO4bnN0ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iTG9nZyBkZWcgcMOlIG1lZCBHb29nbGUta29udG9lbiBkaW4gZm9yIMOlIGzDpXNlIG9wcC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iTG9nZyBww6UgbWVkIEdvb2dsZS1rb250b2VuIGRpbiBmb3Igw6UgbMOlc2Ugb3BwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4iQnJ1a2VybmF2biAoZS1wb3N0YWRyZXNzZSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IlBhc3NvcmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IkxvZ2cgcMOlIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjYwLDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJQcsO4diBww6Ugbnl0dCBzZW5lcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iU3ZlaXAgbmVkIGZyYSB0b3BwZW4gYXYgc2tqZXJtZW4gZm9yIMOlIGfDpSB1dCBhdiBmdWxsc2tqZXJtdmlzbmluZ2VuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iRmVyZGlnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iU2lya3Vsw6ZyIGdsaWRlYnJ5dGVyIGZvciB0aW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iU2lya3Vsw6ZyIGdsaWRlYnJ5dGVyIGZvciBtaW51dHRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJBbmdpIHRpbWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iQW5naSBtaW51dHRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iTcOlbmVkc3J1dGVuZXR0IG1lZCBkYWdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IsOFcnNsaXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iVmVsZyBtw6VuZWRlbiBvZyBkYWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlZlbGcgw6VyZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IGVyIHZhbGd0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gZXIgc2xldHRldCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjI2ODk3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTU5MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJieXRlU2hvcnQiIG1zZ2lkPSI4MzQwOTczODkyNzQyMDE5MTAxIj4iQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtpbG9ieXRlU2hvcnQiIG1zZ2lkPSI1OTczNzg5NzgzNTA0NzcxODc4Ij4iS0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWdhYnl0ZVNob3J0IiBtc2dpZD0iNjM1NTg1MTU3Njc3MDQyODkyMiI+Ik1CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2lnYWJ5dGVTaG9ydCIgbXNnaWQ9IjMyNTk4ODI0NTUyMTIxOTMyMTQiPiJHQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRlcmFieXRlU2hvcnQiIG1zZ2lkPSIyMzE2MTMwMTgxNTkxODY5NjIiPiJUQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBldGFieXRlU2hvcnQiIG1zZ2lkPSI1NjM3ODE2NjgwMTQ0OTkwMjE5Ij4iUEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaWxlU2l6ZVN1ZmZpeCIgbXNnaWQ9IjkxNjQyOTI3OTE1MDA1MzE5NDkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRzPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDvgpKzgpL/gpKjgpL4g4KS24KWA4KSw4KWN4KS34KSVJmd0OyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzIiBtc2dpZD0iNzg5OTgyOTUxNjA0ODgxMzIzNyI+IuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzX3R3b19kb3RzIiBtc2dpZD0iMTIyODA3ODk5NDg2NjAzMDczNiI+IuKApSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5UGhvbmVOdW1iZXIiIG1zZ2lkPSI3Njk0MDYzMDQyMDc5Njc2NTE3Ij4iKOCkleClgeCkqOCliCDgpKvgpYvgpKgg4KSo4KSu4KWN4KSs4KSwIOCkm+CliOCkqCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIo4KSF4KSc4KWN4KSe4KS+4KSkKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiLgpK3gpY3gpLXgpL7gpIfgpLgg4KSu4KWH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdE1zaXNkbkFscGhhVGFnIiBtc2dpZD0iMjg1MDg4OTc1NDkxOTU4NDY3NCI+Ik1TSVNETuClpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+IuCknOCkoeCkvuCkqCDgpLjgpK7gpLjgpY3gpK/gpL4g4KS14KS+IOCkheCkruCkvuCkqOCljeCkryBNTUkg4KSV4KWL4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pRmRuRXJyb3IiIG1zZ2lkPSI1MjI0Mzk4MjE2Mzg1MzE2NDcxIj4i4KSF4KSq4KSw4KWH4KS24KSoIOCkqOCkv+CktuCljeCkmuCkv+CkpCDgpKHgpL7gpK/gpLIg4KSo4KSu4KWN4KSs4KSw4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpL7gpKTgpY3gpLAg4KSq4KWN4KSw4KSk4KS/4KSs4KSo4KWN4KSn4KS/4KSkIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkIiBtc2dpZD0iODE0NzI3ODM0NjQxNDcxNDMxNSI+IuCkuOClh+CkteCkviDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWRGb3IiIG1zZ2lkPSI2ODU2MjI4MTQwNDUzNDcxMDQxIj4i4KSo4KS/4KSu4KWN4KSoIOCkieCksuCljeCksuClh+CkluCkv+CkpOCkleCliyDgpLLgpL7gpJfgpL8g4KS44KWH4KS14KS+IOCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpL/gpK/gpYs6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZURpc2FibGVkIiBtc2dpZD0iMTkzNzU1MzIyNjU5MjUxNjQxMSI+IuCkuOClh+CkteCkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VSZWdpc3RlcmVkIiBtc2dpZD0iNjI3NTAxOTA4MjU5ODEwMjQ5MyI+IuCkpuCksOCljeCkpOCkviDgpLjgpKvgpLIg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiLgpK7gpYfgpJ/gpL7gpIcg4KS44KSr4KSyIOCkpeCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkSW5jb3JyZWN0IiBtc2dpZD0iNzYxMjIwODgzOTQ1MDEyODcxNSI+IuCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlDb21wbGV0ZSIgbXNnaWQ9IjgyMzI1Mjc0OTU0MTE2OTgzNTkiPiJNTUkg4KSq4KWB4KSw4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhZFBpbiIgbXNnaWQ9IjkwMTUyNzc2NDU1NDY3MTAwMTQiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCliyDgpKrgpYHgpLDgpL7gpKjgpYsgUElOIOCkuOCkueClgCDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpYsgUFVLIOCkuOCkueClgCDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KWLIFBJTiDgpK7gpYfgpLIg4KSW4KS+4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFBpbiIgbXNnaWQ9IjM4NTAwMTg0NDUxODc0NzUzNzciPiLgpaog4KSm4KWH4KSW4KS/IOClriDgpLXgpJ/gpL4g4KSo4KSu4KWN4KSs4KSwIOCkreCkj+CkleCliyDgpI/gpIngpJ/gpL4gUElOIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IuClriDgpLXgpJ/gpL4g4KSo4KSu4KWN4KSs4KSw4KS54KSw4KWCIOCkteCkviDgpLjgpYsg4KSt4KSo4KWN4KSm4KS+IOCksuCkvuCkruCliyDgpI/gpIngpJ/gpL4gUFVLIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i4KSk4KSq4KS+4KSI4KSC4KSV4KWLIFNJTSDgpJXgpL7gpLDgpY3gpKEgUFVLLeCksuCklSDgpJvgpaQg4KSv4KS44KSy4KS+4KSIIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggUFVLIOCkleCli+CkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIFBVSzIg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i4KSG4KSX4KSu4KSoIOCkleCksuCksCBJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNsaXJNbWkiIG1zZ2lkPSI3Nzg0NjczNjczNDQ2ODMzMDkxIj4i4KSs4KS+4KS54KS/4KSw4KS/4KSo4KWHIOCkleCksuCksCBJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNmTW1pIiBtc2dpZD0iNTEyMzIxODk4OTE0MTU3MzUxNSI+IuCkleCksiDgpIXgpJfgpL7gpKHgpL8g4KSs4KSi4KS+4KSJ4KSB4KSm4KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ3dNbWkiIG1zZ2lkPSI5MTI5Njc4MDU2Nzk1MDE2ODY3Ij4i4KSV4KSyIOCkquCljeCksOCkpOCkv+CkleCljeCkt+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkJhTW1pIiBtc2dpZD0iNDU1MTkzMDY3OTI2NzcwNTgxIj4i4KSV4KSyIOCkrOCljeCkr+CkvuCksOCkv+CkmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlB3ZE1taSIgbXNnaWQ9IjcwNDM3MTU2ODc5MDUyNTQxOTkiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+IlBJTiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmlwTW1pIiBtc2dpZD0iMzExMDUzNDY4MDU1Nzg1NzE2MiI+IuCkquCljeCksOCkuOCljeCkpOClgeCkpCDgpKjgpK7gpY3gpKzgpLDgpK7gpL4g4KSV4KSyIOCkl+CksOCljeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuaXJNbWkiIG1zZ2lkPSIzMDYyMTAyMTIxNDMwNTQ4NzMxIj4i4KSV4KSyIOCkl+CksOCljeCkqOClhyDgpIXgpILgpJUg4KSw4KWL4KSV4KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlRocmVlV0NNbWkiIG1zZ2lkPSI5MDUxMDQ3MTcwMzIxMTkwMzY4Ij4i4KSV4KSyIOCkl+CksOCljeCkqOClhyDgpKTgpL/gpKgg4KSk4KSw4KS/4KSV4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUnVhY01taSIgbXNnaWQ9Ijc4Mjc4ODc0NTkxMzgzMDg4ODYiPiLgpKjgpJrgpL7gpLngpL/gpI/gpJXgpL4g4KSw4KS/4KS44KSJ4KSg4KWN4KSm4KS+IOCkleCksuCkueCksOClguCkleCliyDgpIXgpLjgpY3gpLXgpYDgpJXgpL7gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmRNbWkiIG1zZ2lkPSIzMTE2NDQ2MjM3MDgxNTc1ODA4Ij4i4KSV4KSy4KS/4KSZIOCkqOCkruCljeCkrOCksCDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KWN4KSo4KWHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iRG5kTW1pIiBtc2dpZD0iMTI2NTQ3ODkzMjQxODMzNDMzMSI+IuCkrOCkvuCkp+CkviDgpKjgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPbiIgbXNnaWQ9IjQyOTQxNTQwOTE0NTc4MTkyMyI+IuCkuOClgOCkruCkpOCkvyDgpJfgpLDgpY3gpKgg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCksuCksCBJRCwg4KSF4KSw4KWN4KSV4KWLIOCkleCksjog4KS44KWA4KSu4KSk4KS/IOCkl+CksOCkv+Ckj+CkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T25OZXh0Q2FsbE9mZiIgbXNnaWQ9IjMwOTI5MTgwMDYwNzc4NjQ2MjQiPiLgpJXgpLLgpLAgSUQg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSV4KWLIOCksuCkvuCkl+CkvyDgpLDgpYvgpJXgpL7gpLXgpJ8g4KSb4KWkIOCkheCksOCljeCkleCliyDgpJXgpLI6IOCksOCli+CkleCkvuCkteCknyDgpJvgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT24iIG1zZ2lkPSI2MTc5NDI1MTgyODU2NDE4NDY1Ij4i4KSV4KSy4KSwIElEIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkpuClh+CkluCkvyDgpKrgpY3gpLDgpKTgpL/gpKzgpKjgpY3gpKfgpL/gpKQg4KSb4KWI4KSo4KWkIOCkheCksOCljeCkleCliyDgpJXgpLI6IOCkquCljeCksOCkpOCkv+CkrOCkqOCljeCkp+Ckv+CkpCDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT2ZmIiBtc2dpZD0iMjU2Nzk5ODYzMzEyNDQwODU1MiI+IuCkleCksuCksCBJRCDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpJXgpYsg4KSy4KS+4KSX4KS/IOCksOCli+CkleCkvuCkteCknyDgpJvgpYjgpKjgpaQg4KSF4KSw4KWN4KSV4KWLIOCkleCksjog4KSw4KWL4KSV4KS+4KS14KSfIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VOb3RQcm92aXNpb25lZCIgbXNnaWQ9Ijg2MTQ4MzAxODA1MDg2ODY2NjYiPiLgpLjgpYfgpLXgpL7gpJXgpYsg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJQZXJtYW5lbnQiIG1zZ2lkPSIzMzc3MzcxMTQ1OTI2ODM1NjcxIj4i4KSk4KSq4KS+4KSI4KSCIOCkleCksuCksCBJRCDgpLjgpYfgpJ/gpL/gpJkg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKjgpYHgpLngpYHgpKjgpY3gpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkQ2hhbmdlZFRpdGxlIiBtc2dpZD0iNTU5MjE4OTM5ODk1NjE4NzQ5OCI+IuCkquCljeCksOCkpOCkv+CkrOCkqOCljeCkp+Ckv+CkpCDgpKrgpLngpYHgpIHgpJog4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkreCkj+CkleCliyDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25EYXRhIiBtc2dpZD0iODY1Mzc5NDc4NDY5MDA2NTU0MCI+IuCkoeClh+Ckn+CkviDgpLjgpYfgpLXgpL4g4KSw4KWL4KSV4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkVtZXJnZW5jeSIgbXNnaWQ9IjY1ODExNjM3NzkwNzI4MzM2NjUiPiLgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KS44KWH4KS14KS+IOCksOCli+CkleCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Ob3JtYWwiIG1zZ2lkPSI0OTUzODY3MDExMzg5NzUwNjczIj4i4KSt4KWN4KS14KS+4KSH4KS4IOCkuOClh+CkteCkviDgpKzgpY3gpLLgpJUg4KSt4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbFZvaWNlIiBtc2dpZD0iMzM5Njk2MzY1MjEwODE1MTI2MCI+IuCkuOCkrOCliCDgpIbgpLXgpL7gpJwg4KS44KWH4KS14KS+4KS54KSw4KWCIOCkrOCkqOCljeCkpiDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25TbXMiIG1zZ2lkPSI4MzE0MzUyMzI3NDYxNjM4ODk3Ij4iU01TIOCkuOClh+CkteCkviDgpLDgpYvgpJXgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VEYXRhIiBtc2dpZD0iOTk2NjM2NDg3MTA2MTcxMzIwIj4i4KSt4KWN4KS14KS+4KSH4KS4L+CkoeClh+Ckn+CkviDgpLjgpYfgpLXgpL7gpLngpLDgpYIg4KSw4KWL4KSV4KS/4KSP4KSV4KS+IOCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IuCkhuCkteCkvuCknC9TTVMg4KS44KWH4KS14KS+4KS54KSw4KWCIOCkrOCkqOCljeCkpiDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGwiIG1zZ2lkPSI1NjQzMDI4MjY0NDY2MDkyODIxIj4i4KS44KSs4KWIIOCkreCljeCkteCkvuCkh+CkuC/gpKHgpYfgpJ/gpL4vU01TIOCkuOClh+CkteCkvuCkueCksOClgiDgpKzgpY3gpLLgpJUg4KSt4KSP4KSV4KS+IOCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1ZvaWNlIiBtc2dpZD0iMTI1ODM5MzgxMjMzNTI1ODAxOSI+IuCkhuCkteCkvuCknCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGEiIG1zZ2lkPSI4NzI0NTY3ODIwNzc5Mzc4OTMiPiLgpKHgpYfgpJ/gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NGQVgiIG1zZ2lkPSI1NTY2NjI0OTk4ODQwNDg2NDc1Ij4i4KSr4KWN4KSv4KS+4KSV4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzU01TIiBtc2dpZD0iMjAxNTQ2MDM3MzcwMTUyNzQ4OSI+IlNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFBc3luYyIgbXNnaWQ9IjQ1MjM0NTQ3ODM0OTg1NTE0NjgiPiJBc3luYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFTeW5jIiBtc2dpZD0iNzUzMDAwMDUxOTY0NjA1NDc3NiI+IuCkuOCkv+CkmeCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQYWNrZXQiIG1zZ2lkPSI2OTkxMDA2NTU3OTkzNDIzNDUzIj4i4KSq4KWN4KSv4KS+4KSV4KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUEFEIiBtc2dpZD0iMzIzNTI1OTA4NTY0ODI3MTAzNyI+IlBBRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MCIgbXNnaWQ9IjcxNzAzMzU0NzIxOTg2OTQ5NDUiPiLgpLDgpYvgpK7gpL/gpJkg4KS44KWC4KSa4KSVIOCkluClgeCksuCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MSIgbXNnaWQ9IjUzMTQ4NjE1MTk3NTI1Mzg5MjIiPiLgpLDgpYvgpK7gpL/gpJkg4KS44KWC4KSa4KSVIOCkrOCkqOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MiIgbXNnaWQ9Ijg5Njk5MjkwNDkwODEyNjgxMTUiPiLgpLDgpYvgpK7gpL/gpJkg4KS44KWC4KSa4KSVIOCkq+CljeCksuCljeCkr+CkvuCkuCDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDMiIG1zZ2lkPSI1MTQ4MjU1MDI3MDQzOTQzMzE3Ij4i4KSb4KS/4KSu4KWH4KSV4KSs4KS+4KSfIOCkrOCkvuCkueCkv+CksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NCIgbXNnaWQ9Ijg4MDg0NTY2ODI1NTA3OTY1MzAiPiLgpKzgpL/gpLLgpY3gpKHgpL/gpJngpJXgpYsg4KSs4KS+4KS54KS/4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ1IiBtc2dpZD0iNzYwNDA2MzI1Mjg1MDM1NDM1MCI+IuCksOCli+CkruCkv+CkmSAtIOCkieCkquCkr+ClgeCkleCljeCkpCDgpKrgpY3gpLDgpKPgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDYiIG1zZ2lkPSIyMDU5NDQwODI1NzgyODcxNTEzIj4i4KSw4KWL4KSu4KS/4KSZIC0g4KSJ4KSq4KSy4KSs4KWN4KSnIOCkquCljeCksOCko+CkvuCksuClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NyIgbXNnaWQ9IjcxMTIwNzg3MjQwOTcyMzM2MDUiPiLgpLDgpYvgpK7gpL/gpJkgLSDgpI/gpLLgpL/gpK/gpKjgpY3gpLjgpLAg4KSq4KS+4KSw4KWN4KSf4KSo4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ4IiBtc2dpZD0iNTk4OTU2OTc3ODYwNDA4OTI5MSI+IuCksOCli+CkruCkv+CkmSAtIOCkquCljeCksOCkv+CkruCkv+Ckr+CkriDgpKrgpL7gpLDgpY3gpJ/gpKjgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDkiIG1zZ2lkPSI3OTY5Mjk2ODExMzU1MTUyNDkxIj4i4KSw4KWL4KSu4KS/4KSZIC0g4KSq4KWC4KSw4KWN4KSjIOCkuOClh+CkteCkviDgpJXgpL7gpLDgpY3gpK/gpJXgpY3gpLfgpK7gpKTgpL4g4KSF4KS14KS44KWN4KSl4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMCIgbXNnaWQ9IjM5OTI5MDY5OTk4MTUzMTY0MTciPiLgpLDgpYvgpK7gpL/gpJkgLSDgpIbgpJngpY3gpLbgpL/gpJUg4KS44KWH4KS14KS+IOCkquCljeCksOCkleCkvuCksOCljeCkr+CkpOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTEiIG1zZ2lkPSI0MTU0NDc2ODU0NDI2OTIwOTcwIj4i4KSw4KWL4KSu4KS/4KSZIOCkp+CljeCkteCknOCkviDgpJrgpL7gpLLgpYEg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMiIgbXNnaWQ9IjExODkwNzExMTk5OTI3MjYzMjAiPiLgpLDgpYvgpK7gpL/gpJkg4KSs4KWN4KSv4KS+4KSo4KSwIOCkrOCkqOCljeCkpiDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dFNlYXJjaGluZyIgbXNnaWQ9IjgzNjAxNDE4ODU5NzIyNzk5NjMiPiLgpLjgpYfgpLXgpL7gpJXgpYsg4KSW4KWL4KSc4KWAIOCkl+CksOCljeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVOb3RGb3J3YXJkZWQiIG1zZ2lkPSIxNjgzNjg1ODgzODQxMjcyNTYwIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IOCkheCkl+CkvuCkoeCkvyDgpKrgpKDgpL7gpIfgpI/gpJXgpYsg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZCIgbXNnaWQ9IjEzMDI5MjIxMTc0OTg1OTA1MjEiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZFRpbWUiIG1zZ2lkPSI5MjA2MjUxNzM2NTI3MDg1MjU2Ij4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiDgpKrgpJvgpL8gPHhsaWZmOmcgaWQ9IlRJTUVfREVMQVkiPnsyfTwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWQiIG1zZ2lkPSI1MDczMjM3ODI3NjIwMTY2Mjg1Ij4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IOCkheCkl+CkvuCkoeCkvyDgpKzgpKLgpL7gpIfgpI/gpJXgpYsg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWRUaW1lIiBtc2dpZD0iNjc4MTYyMTk2NDMyMDYzNTE3MiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgpIXgpJfgpL7gpKHgpL8g4KSs4KSi4KS+4KSH4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZjQ29tcGxldGUiIG1zZ2lkPSIzMTE4ODQ4MjMwOTY2ODg2NTc1Ij4i4KS14KS/4KS24KWH4KS34KSk4KS+IOCkleCli+CkoSDgpKrgpYHgpLDgpL4g4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmNFcnJvciIgbXNnaWQ9IjMzMjc1NjAxMjY1ODg1MDA3NzciPiLgpJzgpKHgpL7gpKgg4KS44KSu4KS44KWN4KSv4KS+IOCkteCkviDgpIXgpK7gpL7gpKjgpY3gpK8g4KS44KWB4KS14KS/4KSn4KS+IOCkleCli+CkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvck9rIiBtc2dpZD0iMTE5MTkxOTM3ODA4MzQ3MjIwNCI+IuCkoOCkv+CklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3IiIG1zZ2lkPSI3OTU2MzkyNTExMTQ2Njk4NTIyIj4i4KSP4KSJ4KSf4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpKTgpY3gpLDgpYHgpJ/gpL8g4KSl4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yTG9va3VwIiBtc2dpZD0iNDcxMTY4NzQ1NjExMTk2MzE2MyI+IlVSTCDgpK3gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRBdXRoU2NoZW1lIiBtc2dpZD0iNjI5OTk4MDI4MDQ0MjA3Njc5OSI+IuCkuOCkvuCkh+Ckn+CkleCliyDgpIbgpKfgpL/gpJXgpL7gpLDgpL/gpJXgpKTgpL4g4KSv4KWL4KSc4KSo4KS+IOCkuOCkruCksOCljeCkpeCkv+CkpCDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+IuCkquCljeCksOCkruCkvuCko+ClgOCkleCksOCkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUHJveHlBdXRoIiBtc2dpZD0iMTc4ODIwNzAxMDU1OTA4MTMzMSI+IuCkquCljeCksOCli+CkleCljeCkuOClgCDgpLjgpLDgpY3gpK3gpLDgpJXgpYsg4KSu4KS+4KSn4KWN4KSv4KSu4KSm4KWN4KS14KS+4KSw4KS+IOCkquCljeCksOCkruCkvuCko+Ckv+CkleCksOCkoyDgpIXgpLjgpKvgpLIg4KSt4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckNvbm5lY3QiIG1zZ2lkPSI4NzE0MjczMjM2MzY0NjQwNTQ5Ij4i4KS44KSw4KWN4KSt4KSw4KS44KSB4KSXIOCknOCli+CkoeCljeCkqCDgpLjgpJXgpYfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JJTyIgbXNnaWQ9IjIzNDA1NTgxOTc0ODkzMDIxODgiPiLgpLjgpLDgpY3gpK3gpLDgpLjgpIHgpJcg4KS44KSC4KSa4KS+4KSwIOCkl+CksOCljeCkqCDgpLjgpJXgpYfgpKjgpaQg4KSr4KWH4KSw4KS/IOCkquCkm+CkvyDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVGltZW91dCIgbXNnaWQ9IjQ3NDM0MDM3MDM3NjI4ODM5NTQiPiLgpLjgpLDgpY3gpK3gpLAg4KS44KSC4KSX4KSV4KWLIOCkuOCkruCljeCkquCksOCljeCklSDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KS44KSu4KSvIOCkuOCkleCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclJlZGlyZWN0TG9vcCIgbXNnaWQ9Ijg2Nzk1OTYwOTAzOTI3Nzk1MTYiPiLgpKrgpYPgpLfgpY3gpJ/gpK7gpL4g4KSn4KWH4KSw4KWIIOCkuOCksOCljeCkreCksOCkueCksOClguCkpOCkv+CksCDgpKrgpYHgpKjgpIMg4KSo4KS/4KSw4KWN4KSm4KWH4KS24KSo4KS54KSw4KWCIOCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkU2NoZW1lIiBtc2dpZD0iNTAxNTczMDgxMjkwNjE5MjIwOCI+IuCkquCljeCksOCli+Ckn+Cli+CkleCksiDgpLjgpK7gpLDgpY3gpKXgpL/gpKQg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmFpbGVkU3NsSGFuZHNoYWtlIiBtc2dpZD0iOTY1NDk2MDYwMDA2NTg2NDEiPiLgpI/gpIngpJ/gpL4g4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCknOCkoeCkvuCkqCDgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KSX4KSw4KWN4KSoIOCkuOCkleClh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckJhZFVybCIgbXNnaWQ9IjM2MzY5Mjk3MjI3Mjg4ODE5NzIiPiLgpKrgpYPgpLfgpY3gpKAg4KSW4KWL4KSy4KWN4KSoIOCkuOCkleCkv+CkgeCkpuCliOCkqCDgpJXgpL/gpKjgpK3gpKjgpYcgVVJMIOCkheCkruCkvuCkqOCljeCkryDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlIiBtc2dpZD0iMjE3MDc4ODUxNTA1MjU1ODY3NiI+IuCkq+CkvuCkh+CksiDgpK3gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZU5vdEZvdW5kIiBtc2dpZD0iNjIwMzg1NjYxMjA0MjY1NTA4NCI+IuCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpL/gpI/gpJXgpYsg4KSr4KS+4KSH4KSyIOCkreClh+Ckn+CkvuCkieCkqCDgpLjgpJXgpYfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUb29NYW55UmVxdWVzdHMiIG1zZ2lkPSIxMjM1Mzk2OTI3MDg3MTg4MjUzIj4i4KSn4KWH4KSw4KWIIOCkqOCliCDgpIXgpKjgpYHgpLDgpYvgpKfgpLngpLDgpYIg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KSu4KS+IOCkm+CkqOCljeClpCDgpKrgpJvgpL8g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4OTY3NzEwMDI1MDM2MTYzODIyIj4iPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiUxJHM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpL7gpIfgpKgg4KSH4KSoIOCkpOCljeCksOClgeCkn+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luYyIgbXNnaWQ9IjgzNTM1MjMwNjAyNjkzMzU2NjciPiLgpLjgpL/gpJngpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIG1zZ2lkPSIzOTc3NDMzNDkxOTE5MDE0NTgiPiLgpLjgpL/gpJngpY3gpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VUb29NYW55RGVsZXRlc05vdGlmaWNhdGlvbkRlc2MiIG1zZ2lkPSI4MTAwOTgxNDM1MDgwNjk2NDMxIj4i4KSF4KSk4KS/IOCkp+Clh+CksOCliCA8eGxpZmY6ZyBpZD0iQ09OVEVOVF9UWVBFIj4lczwveGxpZmY6Zz4g4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjQ5NDAxOTIzNDEwMjE1NDg5NiI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSW4KS+4KSy4KWAIOCkm+CliOCkqCEg4KSg4KS+4KSJ4KSBIOCkluCkvuCksuClgCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleClh+CkueClgCDgpKvgpL7gpIfgpLLgpLngpLDgpYIg4KSu4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NzU5OTkyODY2ODAwMDA1NDEiPiLgpKvgpYvgpKgg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkreCksOCkv+Ckj+CkleCliyDgpJshIOCkoOCkvuCkieCkgSDgpJbgpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpYfgpLngpYAg4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lIiBtc2dpZD0iNjU0NTY5NjAwNzYzMTQwNDI5MiI+IuCkruCksuCkvuCkiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODU0NTM1MTQyMDg2NTIwMjg1MyI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLXgpL/gpJXgpLLgpY3gpKrgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzE5OTE5MDc1NDYzOTg4NjM4Ij4i4KSr4KWL4KSoIOCkteCkv+CkleCksuCljeCkquCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlIiBtc2dpZD0iNzE2NzcwMzM4OTgwMjYxODY2MyI+IuCkruCljOCkqCDgpK7gpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXJuX29uX3JhZGlvIiBtc2dpZD0iMzkxMjc5MzA5MjMzOTk2MjM3MSI+IuCkteCkvuCkr+CksOCksuClh+CkuCDgpIXgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHVybl9vZmZfcmFkaW8iIG1zZ2lkPSI4MTk4Nzg0OTQ5OTg3MDYyMzQ2Ij4i4KSk4KS+4KSw4KSw4KS54KS/4KSkIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fbG9jayIgbXNnaWQ9Ijc5OTA5NDY1NTQ5NjA5ODE1MyI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpLLgpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfb2ZmIiBtc2dpZD0iNDI2NjYxNDEwNzQxMjg2NTA0OCI+IuCkquCkvuCkteCksCDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9zaWxlbnQiIG1zZ2lkPSIzMTkyOTgxNjMwMTg0NzMwNzgiPiLgpJjgpKjgpY3gpJ/gpYAg4KSs4KSo4KWN4KSmIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3ZpYnJhdGUiIG1zZ2lkPSI3MDcyMDQzMzg4NTgxNTUxMzk1Ij4i4KSY4KSo4KWN4KSf4KWAIOCkleCkruCljeCkquCkqCDgpJfgpLDgpY3gpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9yaW5nIiBtc2dpZD0iODU5MjI0MTgxNjE5NDA3NDM1MyI+IuCkmOCkqOCljeCkn+CkvyDgpJrgpL7gpLLgpYEg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fcHJvZ3Jlc3MiIG1zZ2lkPSIyMjgxMDc5MjU3MzI5OTgxMjAzIj4i4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkpuCliC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMzODU3NDUxNzk1NTU3MzE0NzAiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkrOCkqOCljeCkpiDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0OTc5MjE3NTI0MjgyMTM1MyI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKgg4KSs4KSo4KWN4KSmIOCkueClgeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+IuCkleClhyDgpKTgpKrgpL7gpIjgpIIg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYHgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX3RpdGxlIiBtc2dpZD0iNzA1NDUwOTkxNDUwMDE0MDM2MSI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpK7gpYvgpKHgpK7gpL4g4KSq4KWB4KSo4KSD4KSs4KWB4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV9jb25maXJtIiBtc2dpZD0iNTUyOTM5NDQ1MDI3ODQ2NjgiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSu4KWL4KSh4KSu4KS+IOCkpOCkquCkvuCkiOCkgSDgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/IOCkpOCkquCkvuCkiOCkgeCksuClhyDgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KSX4KSw4KWH4KSV4KS+IOCkuOCkrOCliCDgpKTgpYfgpLjgpY3gpLDgpYsg4KSq4KSV4KWN4KS34KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS+4KSJ4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiLgpKjgpK/gpL7gpIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19yZWNlbnRfdGFza3MiIG1zZ2lkPSI4Nzk0OTA2NjU4NzMyMTkzNDczIj4i4KSV4KWB4KSo4KWIIOCkqOCkr+CkvuCkgSDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSb4KWI4KSo4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQwODQ3NzE0MDA4ODA1MzY2NSI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLXgpL/gpJXgpLLgpY3gpKrgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiLgpKvgpYvgpKgg4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3Bvd2VyX29mZiIgbXNnaWQ9IjQ0NzE4Nzk0NDA4Mzk4Nzk3MjIiPiLgpLbgpJXgpY3gpKTgpL8g4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9idWdfcmVwb3J0IiBtc2dpZD0iNzkzNDAxMDU3ODkyMjMwNDc5OSI+IuCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdGl0bGUiIG1zZ2lkPSIyNjY3NDk0ODAzNzQyNTQ4NTMzIj4i4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCknyDgpLLgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSIgbXNnaWQ9IjM5ODQ0NzA0ODc1MDM1MDQ1NiI+IuCkj+CkieCkn+CkviDgpIfgpK7gpYfgpLIg4KS44KSo4KWN4KSm4KWH4KS24KSV4KWLIOCksOClguCkquCkruCkviDgpKrgpKDgpL7gpIngpKjgpLLgpL7gpIgg4KSv4KS44KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLngpL7gpLLgpYjgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCkheCkteCkuOCljeCkpeCkvuCkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4g4KS44KWC4KSa4KSo4KS+IOCknOCkruCljeCkruCkviDgpJfgpLDgpY3gpKjgpYcg4KSb4KWkIOCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KS44KWB4KSw4KWBIOCkl+CksOClh+CkpuClh+CkluCkvyDgpKrgpKDgpL7gpIngpKgg4KSk4KSv4KS+4KSwIOCkqOCkreCkj+CkuOCkruCljeCkriDgpK/gpLjgpLLgpYcg4KSV4KWH4KS54KWAIOCkuOCkruCkryDgpLLgpL/gpKjgpY3gpJs7IOCkleClg+CkquCkr+CkviDgpKfgpYjgpLDgpY3gpK8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl90b2dnbGVfc2lsZW50X21vZGUiIG1zZ2lkPSI4MjE5NTI1MzQ0MjQ2ODEwOTI1Ij4i4KSu4KWM4KSoIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMzI4OTg0MTkzNzAwMzc1ODgwNiI+IuCkhuCkteCkvuCknCDgpKzgpKjgpY3gpKYg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iMTUwNjA0NjU3OTE3NzA2NjQxOSI+IuCkp+CljeCkteCkqOCkvyDgpJbgpYHgpLLgpY3gpLLgpL4g4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfdG9nZ2xlX2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI1ODg0MzMwMzA2OTI2MzA3NDU2Ij4i4KS54KS14KS+4KSH4KSc4KS54KS+4KScIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMjcxOTU1Nzk4MjYwODkxOTc1MCI+IuCkueCkteCkvuCkh+CknOCkueCkvuCknCDgpK7gpYvgpKEg4KSW4KWB4KSy4KS+IOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjUwNzUwNzA0NDI4NTQ0OTAyOTYiPiLgpLngpLXgpL7gpIfgpJzgpLngpL7gpJwg4KSu4KWL4KShIOCkrOCkqOCljeCkpiDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+IuClr+Clr+ClrysiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSu4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4i4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkquCljeCksOCko+CkvuCksuClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jb3N0TW9uZXkiIG1zZ2lkPSI1NDI5ODA4MjE3ODYxNDYwNDAxIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkv+CksOCljeCkqOClgSDgpKrgpLDgpY3gpKjgpYcg4KS44KWH4KS14KS+4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jb3N0TW9uZXkiIG1zZ2lkPSIzMjkzMzAxOTAzNDA5ODY5NDk1Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkruCkueCkgeCkl+CliyDgpKrgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWHIOCkleCkvuCkruCkueCksOClgiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4i4KSk4KSq4KS+4KSI4KSC4KSV4KS+IOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWVzc2FnZXMiIG1zZ2lkPSI3ODIxOTk5MDcxMDAzNjk5MjM2Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IFNNUywg4KSH4KSu4KWH4KSyIOCksCDgpIXgpKjgpY3gpK8g4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSy4KWH4KSW4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3BlcnNvbmFsSW5mbyIgbXNnaWQ9IjM1MTkxNjMxNDEwNzA1MzM0NzQiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSo4KS/4KSc4KWAIOCkuOClguCkmuCkqOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGVyc29uYWxJbmZvIiBtc2dpZD0iODQyNjQ1MzEyOTc4ODg2MTMzOCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSV4KS+4KSw4KWN4KSh4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4g4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkrOCkvuCksOClh+CkleCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYDgpK7gpL4g4KS44KS/4KSn4KS+IOCkquCkueClgeCkgeCkmiDgpKrgpYHgpLDgpY3igI3gpK/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc29jaWFsSW5mbyIgbXNnaWQ9IjU3OTkwOTY2MjM0MTIwNDM3OTEiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkuOClguCkmuCkqOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc29jaWFsSW5mbyIgbXNnaWQ9IjcxMjk4NDI0NTc2MTE2NDM0OTMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSc4KSh4KS+4KSo4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkleCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYDgpK7gpL4g4KS44KS/4KSn4KS+IOCkquCkueClgeCkgeCkmiDgpKrgpYHgpLDgpY3igI3gpK/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbG9jYXRpb24iIG1zZ2lkPSI2MzUxNDk3NDI0MzY2OTIwNDkiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWN4KSl4KS+4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19sb2NhdGlvbiIgbXNnaWQ9IjU3MDQ2Nzk3NjMxMjQxNzAxMDAiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSt4KWM4KSk4KS/4KSVIOCkuOCljeCkpeCkvuCkqCDgpKjgpL/gpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX25ldHdvcmsiIG1zZ2lkPSI1ODA4OTgzMzc3NzI3MTA5ODMxIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCkguCkmuCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbmV0d29yayIgbXNnaWQ9IjQ0NzgyOTk0MTMyNDE4NjE5ODciPiLgpLXgpL/gpK3gpL/gpKjgpY3gpKgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOClgeCkteCkv+Ckp+CkvuCkueCksOClguCkruCkviDgpKrgpLngpYHgpIHgpJog4KSw4KS+4KSW4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSIxNTg1NDAzNTQ0MTYyMTI4MTA5Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iNTYyNTI4ODU3NzE2NDI4MjM5MSI+IuCkrOCljeCksuClgeCkn+ClgeCkpeCkleCliyDgpK7gpL7gpKfgpY3gpK/gpK7gpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWCIOCksCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYLgpK7gpL7gpKXgpL8g4KSq4KS54KWB4KSB4KSaIOCksOCkvuCkluCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hdWRpb1NldHRpbmdzIiBtc2dpZD0iODMyOTI2MTY3MDE1MTg3MTIzNSI+IuCkheCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIyNjQxNTE1NDAzMzQ3NTY4MTMwIj4i4KSF4KSh4KS/4KSv4KWLIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKzgpKbgpLLgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWZmZWN0c0JhdHRlcnkiIG1zZ2lkPSI2MjA5MjQ2NjUzNDI0Nzk4MDMzIj4i4KSs4KWN4KSv4KSf4KWN4KSw4KS/4KSy4KS+4KSIIOCkquCljeCksOCkreCkvuCktSDgpKrgpL7gpLDgpY3gpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjQ0MTI3NTMyMDYzODkxNjk0NyI+IuCkm+Ckv+Ckn+CljeCkn+CliCDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KS44KSV4KS+4KSJ4KSoIOCkuOCkleCljeCkqOClhyDgpKTgpYAg4KS14KS/4KS24KWH4KS34KSk4KS+4KS54KSw4KWCIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FsZW5kYXIiIG1zZ2lkPSI1ODYzNTA4NDM3NzgzNjgzOTAyIj4i4KSq4KS+4KSk4KWN4KSw4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jYWxlbmRhciIgbXNnaWQ9IjU3Nzc1MzQzMTY5ODIxODQ0MTYiPiLgpKrgpL7gpKTgpY3gpLDgpYsg4KSk4KSl4KS+IOCkmOCkn+CkqOCkvuCkueCksOClguCkruCkviDgpKrgpY3gpLDgpKTgpY3gpK/gpJXgpY3gpLcg4KSq4KS54KWB4KSB4KSaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RpY3Rpb25hcnkiIG1zZ2lkPSI0MTQ4NTk3MTI4ODQzNjQxMzc5Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RpY3Rpb25hcnkiIG1zZ2lkPSI3OTIxMTY2MzU1OTY0NzY0NDkwIj4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktuCkruCkviDgpLbgpKzgpY3gpKbgpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgwOTAyMzc3MDI0MzI1NzY3ODgiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS24KSs4KWN4KSm4KSV4KWL4KS2IOCksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjcxMTU2MTk5NDQ5NzM2MTY0NiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpLbgpKzgpY3gpKbgpJXgpYvgpLbgpK7gpL4g4KS24KSs4KWN4KSm4KS54KSw4KWCIOCkpeCkquCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ib29rbWFya3MiIG1zZ2lkPSIxOTQ5NTE5NjczMTAzOTY4MjI5Ij4i4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpIfgpKTgpL/gpLngpL7gpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Jvb2ttYXJrcyIgbXNnaWQ9IjQxNjk3NzE2MDYyNTc5NjMwMjgiPiLgpKzgpYHgpJXgpK7gpL7gpLDgpY3gpJXgpLngpLDgpYIg4KSwIOCkrOCljeCksOCkvuCkieCknOCksCDgpIfgpKTgpL/gpLngpL7gpLjgpK7gpL4g4KS44KS/4KSn4KS+IOCkquCkueClgeCkgeCkmuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kZXZpY2VBbGFybXMiIG1zZ2lkPSI2MTE3NzA0NjI5NzI4ODI0MTAxIj4i4KSF4KSy4KS+4KSw4KWN4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZpY2VBbGFybXMiIG1zZ2lkPSI0NzY5MzU2MzYyMjUxNjQxMTc1Ij4i4KSF4KSy4KS+4KSw4KWN4KSuIOCkmOCkoeClgCDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3ZvaWNlbWFpbCIgbXNnaWQ9IjQxNjIyMzcxNDUwMjc1OTIxMzMiPiLgpK3gpY3gpLXgpL7gpIfgpLgg4KSu4KWH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY192b2ljZW1haWwiIG1zZ2lkPSIyNDk4NDAzOTY5ODYyOTUxMzkzIj4i4KSt4KWN4KS14KS+4KSH4KS44KSu4KWH4KSy4KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJrgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWljcm9waG9uZSIgbXNnaWQ9IjE3MTUzOTkwMDI1MDA0MzQ2NCI+IuCkruCkvuCkh+CkleCljeCksOCli+Ckq+Cli+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWljcm9waG9uZSIgbXNnaWQ9IjcxMDY2MTgyODY5MDU3Mzg0MDgiPiLgpK7gpL5b4KSV4KWN4KSw4KWL4KSr4KWL4KSo4KSs4KS+4KSfIOCksOClh+CkleCksOCljeCkoSDgpIXgpKHgpL/gpK/gpYvgpK7gpL4g4KS44KS/4KSn4KS+IOCkquCkueClgeCkgeCkmiDgpKrgpYHgpLDgpY3igI3gpK/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FtZXJhIiBtc2dpZD0iNDgyMDM3MjQ5NTg5NDU4NjYxNSI+IuCkleCljeCkr+CkvuCkruClh+CksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+IuCkpOCkuOCljeCkrOCkv+CksCDgpLXgpL4g4KSt4KS/4KSh4KS/4KSv4KWLIOCkleCljeCkr+CkvuCkquCljeCkmuCksOCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+4KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJrgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc2NyZWVubG9jayIgbXNnaWQ9IjgyNzU1MDAxNzMzMzA3MTgxNjgiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSy4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc2NyZWVubG9jayIgbXNnaWQ9IjcwNjc0OTcxMjg5MjU0OTk0MDEiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCksuCklSDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpJXgpYsg4KS14KWN4KSv4KS14KS54KS+4KSw4KSy4KS+4KSIIOCkquCljeCksOCkreCkvuCkteCkv+CkpCDgpJfgpLDgpY3gpKjgpYcg4KSV4KWN4KS34KSu4KSk4KS+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FwcEluZm8iIG1zZ2lkPSI4MDI4Nzg5NzYyNjM0MTQ3NzI1Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLjgpYLgpJrgpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FwcEluZm8iIG1zZ2lkPSIzOTUwMzc4NTM4MDQ5NjI1OTA3Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkieCkquCkleCksOCko+CkruCkviDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkteCljeCkr+CkteCkueCkvuCksOCkruCkviDgpKrgpY3gpLDgpK3gpL7gpLUg4KSq4KS+4KSw4KWN4KSo4KWHIOCkleCljeCkt+CkruCkpOCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl93YWxscGFwZXIiIG1zZ2lkPSIzODUwMjgwMTU4MDQxMTc1OTk4Ij4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY193YWxscGFwZXIiIG1zZ2lkPSI1NjMwNDE3ODU0NzUwNTQwMTU0Ij4i4KSJ4KSq4KSV4KSw4KSjIOCkteCkvuCksuCkquClh+CkquCksCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSs4KSm4KSy4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbUNsb2NrIiBtc2dpZD0iNDA2NTM1NzU5MjM2NjEyOTkyIj4i4KSY4KSh4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1DbG9jayIgbXNnaWQ9IjM5NDQzNTk4MzM2MjQwOTQ5OTIiPiLgpIngpKrgpJXgpLDgpKMg4KS44KSu4KSvIOCkteCkviDgpLjgpK7gpK8g4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RhdHVzQmFyIiBtc2dpZD0iMjA5NTg2MjU2ODExMzk0NTM5OCI+IuCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpJ/gpY3gpJ/gpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0YXR1c0JhciIgbXNnaWQ9IjYyNDI1OTM0MzIyMjY4MDcxNzEiPiLgpIngpKrgpJXgpLDgpKMg4KS44KWN4KSl4KS/4KSk4KS/IOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5bmNTZXR0aW5ncyIgbXNnaWQ9IjMzNDE5OTA5ODYxNDc4MjY1NDEiPiLgpLjgpL/gpJngpY3gpJUg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeW5jU2V0dGluZ3MiIG1zZ2lkPSI3NjAzMTk1MjY1MTI5MDMxNzk3Ij4i4KS44KS/4KSZ4KWN4KSVIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClguCkruCkviDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY291bnRzIiBtc2dpZD0iMzM1OTY0NjI5MTEyNTMyNTUxOSI+IuCkpOCkquCkvuCkiOCkgeCkleCkviDgpJbgpL7gpKTgpL7gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY291bnRzIiBtc2dpZD0iNDk0ODczMjY0MTgyNzA5MTMxMiI+IuCkieCkquCksuCkrOCljeCkpyDgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNzk5ODIxNDk2ODc5MTU5OTMyNiI+IuCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKPgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2hhcmR3YXJlQ29udHJvbHMiIG1zZ2lkPSI0MzU3MDU3ODYxMjI1NDYyNzAyIj4i4KS54KWN4KSv4KS+4KSo4KWN4KSh4KS44KWH4KSf4KSV4KWLIOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksOCkruCkviDgpKrgpY3gpLDgpKTgpY3gpK/gpJXgpY3gpLcg4KSq4KS54KWB4KSB4KSa4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3Bob25lQ2FsbHMiIG1zZ2lkPSI5MDY3MTczOTg4MzI1ODY1OTIzIj4i4KSr4KWL4KSoIOCkleCksuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGhvbmVDYWxscyIgbXNnaWQ9Ijc0ODk3MDE2MjA0NDYxODM3NzAiPiLgpIXgpKjgpYHgpJfgpK7gpKgsIOCksOClh+CkleCksOCljeCkoSDgpLAg4KSr4KWL4KSoIOCkleCksuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpLjgpYvgpKfgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbVRvb2xzIiBtc2dpZD0iNDY1MjE5MTY0NDA4MjcxNDA0OCI+IuCkquCljeCksOCko+CkvuCksuClgCDgpJTgpJzgpL7gpLDgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbVRvb2xzIiBtc2dpZD0iODE2MjEwMjYwMjE5MDczNDMwNSI+IuCkqOCkv+CkruCljeCkqC3gpLjgpY3gpKTgpLAg4KSq4KS54KWB4KSB4KSaIOCksCDgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpJXgpYsg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSIzNDQ2MTY0NTg0NzEwNTk2NTEzIj4i4KS14KS/4KSV4KS44KS/4KSkIOCkn+ClgeCksuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjcwNTg4MjgwMzIzNTgxNDIwMTgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS14KS/4KSV4KS+4KS44KSV4KSw4KWN4KSk4KS+4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpL7gpKTgpY3gpLAg4KS44KWB4KS14KS/4KSn4KS+4KS54KSw4KWC4KSV4KWLIOCkhuCkteCktuCljeCkr+CkleCkpOCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcgVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyBVSSDgpLLgpL7gpIgg4KSF4KS44KSwIOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdG9yYWdlIiBtc2dpZD0iMTk3MTExODc3MDU0NjMzNjk2NiI+IuCkreCko+CljeCkoeCkvuCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4iVVNCIOCkreCko+CljeCkoeCkvuCksOCko+CkruCkvuCkpeCkvyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iOTIwMzMwMjIxNDkxNTM1NTc3NCI+IlNEIOCkleCkvuCksOCljeCkoeCkruCkvuCkpeCkvyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiLgpKrgpLngpYHgpIHgpJrgpYDgpJXgpLDgpKMg4KS14KS/4KS24KWH4KS34KSk4KS+4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI0MjA1MTk2ODgxNjc4MTQ0MzM1Ij4i4KS44KS54KSv4KWL4KSX4KWAIOCkquCljeCksOCkteCkv+Ckp+CkvyDgpK3gpI/gpJXgpYsg4KS14KS/4KS24KWH4KS34KSk4KS+4KS54KSw4KWC4KSy4KWHIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzOTAxNzE3OTM2OTMwMTcwMzIwIj4i4KS14KS/4KSo4KWN4KSh4KWLIOCkuOCkvuCkruCkl+CljeCksOClgOCkleCliyDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM3NzIyMjUwMDg2MDUzMTA2NzIiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSF4KSo4KWN4KSk4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkreCkh+CksOCkueClh+CkleCliyDgpLXgpL/gpKjgpY3gpKHgpYvgpJXgpYsg4KS44KS+4KSu4KSX4KWN4KSw4KWA4KSV4KWLIOCkqOCkv+CksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+IuCkm+Cli+Ckj+CksCDgpJfgpLDgpL/gpKjgpYcg4KSW4KWL4KSc4KSy4KS+4KSIIOCkuOClgeCkmuCkvuCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdFRvdWNoRXhwbG9yYXRpb24iIG1zZ2lkPSI1ODAwNTUyNTE2Nzc5MjQ5MzU2Ij4i4KSb4KWL4KSH4KSP4KSV4KS+IOCkhuCkh+Ckn+CkruCkueCksOClgiDgpJrgpLDgpY3gpJXgpYsg4KS44KWN4KS14KSw4KSu4KS+IOCkrOCli+CksuCkv+CkqOClhyDgpJsg4KSwIOCkuOCljeCkleCljeCksOCkv+CkqCDgpIfgpLbgpL7gpLDgpL7gpLngpLDgpYLgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOCljeCkteClh+Ckt+CkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTczOTg4MTc2NjUyMjU5NDA3MyI+IuCkieCkmuCljeCkmiDgpLXgpYfgpKwg4KSq4KS54KWB4KSB4KSa4KSy4KS+4KSIIOCkuOClgeCkmuCkvuCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9Ijc4ODEwNjM5NjE1MDc1MTE3NjUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KS44KS+4KSu4KSX4KWN4KSw4KWA4KSy4KS+4KSIIOCkpeCkqiDgpKrgpLngpYHgpIHgpJrgpK/gpYvgpJfgpY3gpK8g4KSs4KSo4KS+4KSJ4KSoIOCksuCkv+CkquCkv+CkueCksOClgiDgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkqOClgSDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSIyMTAzNDQwMzkxOTAyNDEyMTc0Ij4i4KSG4KSr4KWB4KSy4KWHIOCkn+CkvuCkh+CkqiDgpJfgpLDgpYfgpJXgpYsg4KSq4KS+4KSg4KSV4KWLIOCkqOCkv+CksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSh4KWH4KSf4KS+IOCknOCkuOCljeCkpOCliCDgpJXgpY3gpLDgpYfgpKHgpL/gpJ8g4KSV4KS+4KSw4KWN4KShIOCkqOCkruCljeCkrOCksOCkueCksOClgiDgpLAg4KSq4KS+4KS44KS14KSw4KWN4KSh4KS54KSw4KWCIOCkuOCkruCkvuCkteClh+CktiDgpJfgpLDgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSf4KWN4KSf4KS/4KSy4KS+4KSIIOCkheCkleCljeCkt+CkriDgpLXgpL4g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSf4KWN4KSf4KS/IOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KS14KS+IOCkquCljeCksOCko+CkvuCksuClgCDgpIbgpIfgpJXgpKjgpLngpLDgpYIg4KSl4KSq4KWN4KSoIOCksCDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MjQ3MjgxOTExMzg3OTMxNDg1Ij4i4KS44KWN4KSl4KS/4KSk4KS/IOCkquCkn+CljeCkn+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MTYxMTM2NjA3OTU5NzYwNjAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KWN4KSl4KS/4KSk4KS/IOCkquCkn+CljeCkn+CkvyDgpLngpYHgpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iMTE0ODE5ODc4NTkzNzQ4OTI2NCI+IuCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpJ/gpY3gpJ/gpL/gpLLgpL7gpIgg4KS14KS/4KS44KWN4KSk4KWD4KSkL+CkuOCkmeCljeCkleClgeCkmuCkv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSI2OTE3NTQ5NDM3MTI5NDAxMTMyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpJ/gpY3gpJ/gpL8g4KS14KS/4KS44KWN4KSk4KS+4KSwIOCkteCkviDgpLjgpILgpJXgpYHgpJrgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+IuCkrOCkueCkv+CksOCljeCkl+CkruCkqCDgpJXgpLLgpLngpLDgpYLgpLLgpL7gpIgg4KSF4KSw4KWN4KSV4KWLIOCkruCkvuCksOCljeCklyDgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjUzMzEzMTg5MzE5Mzc0MDIwNDAiPiLgpKzgpLngpL/gpLDgpY3gpJfgpK7gpKgg4KSV4KSy4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCktuCli+Ckp+CkqCDgpJfgpLDgpY3gpKgg4KSwIOCkoeCkvuCkr+CksiDgpJfgpLDgpL/gpKjgpYcg4KSo4KSu4KWN4KSs4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQgIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkruCli+CkqOCkv+Ckn+CksCDgpJfgpLDgpY3gpKgsIOCkheCkqOCljeCkr+CkpOCljeCksCDgpKrgpKDgpL7gpIngpKgg4KS14KS+IOCkrOCkvuCkueCkv+CksCDgpJzgpL7gpKjgpYcg4KSV4KSy4KS54KSw4KWC4KSy4KS+4KSIIOCksOCli+CkleCljeCkqCDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVTbXMiIG1zZ2lkPSI4NjczNDcxNzY4OTQ3ODk1MDgyIj4i4KSq4KS+4KSgIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiAoU01TKSDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIggU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCksCDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSV4KWLIOCkruCkpOCksuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkieCkquCkleCksOCko+CkruCkviDgpKrgpKDgpL7gpIfgpI/gpJXgpYsg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkpOCkquCkvuCkiOCkguCksuCkvuCkiCDgpKjgpKbgpYfgpJbgpL7gpIjgpKjgpYgg4KSu4KWL4KSo4KS/4KSf4KSwIOCkl+CksOCljeCkqCDgpLXgpL4g4KSu4KWH4KSf4KS+4KSJ4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZU1tcyIgbXNnaWQ9IjE4MjEzMTczNDQ2NjgyNTcwOTgiPiLgpKrgpL7gpKAg4KS44KSo4KWN4KSm4KWH4KS2IChNTVMpIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlTW1zIiBtc2dpZD0iNTMzMDE5NDM3MjYzMjEyMjYwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIE1NUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpLAg4KSq4KWN4KSw4KSV4KWD4KSv4KS+IOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCkleCliyDgpK7gpKTgpLLgpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSq4KSg4KS+4KSH4KSP4KSV4KWLIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKTgpKrgpL7gpIjgpILgpLLgpL7gpIgg4KSo4KSm4KWH4KSW4KS+4KSI4KSo4KWIIOCkruCli+CkqOCkv+Ckn+CksCDgpJfgpLDgpY3gpKgg4KS14KS+IOCkruClh+Ckn+CkvuCkieCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4i4KSG4KSV4KS44KWN4KSu4KS/4KSVIOCkquCljeCksOCkuOCkvuCksOCko+CkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9Ijg0ODUyNDA3MDI2MjQzMTk3NCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCksCDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSu4KS+IOCkruCkvuCkpOCljeCksCDgpIngpKrgpLLgpKzgpY3gpKcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSIxNTk4MzI4ODQzNjE5NjQ2MTY2Ij4i4KS44KWH4KSyIOCkquCljeCksOCkuOCkvuCksOCkv+CkpCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iNjM2MTk3Mjc3NjA4MDQ1ODk3OSI+IuCkpOCkquCkvuCkiOCkguCkleCliyDgpIngpKrgpJXgpLDgpKPgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpYfgpLIg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkmuClh+CkpOCkvuCkteCkqOClgOCkueCksOClgiDgpJXgpYfgpLngpYAg4KS44KWN4KSl4KS+4KSo4KS54KSw4KWC4KSu4KS+IOCkpOCkquCkvuCkiOCkguCksuCkvuCkiCDgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSX4KSk4KS/4KS14KS/4KSn4KS/4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpLjgpJrgpYfgpKQg4KSX4KSw4KS+4KSJ4KSoIOCkl+CksOCkv+Ckj+CkleCkviDgpJvgpKjgpY3gpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpI/gpIngpJ/gpL4g4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkpuCkmyDgpJzgpKwg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkieCkquCkleCksOCko+CkleCliyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KS14KS+IOCkheCkquCksOClh+CktuCkqOCkleCliyDgpLjgpL7gpKUg4KS54KS44KWN4KSk4KSV4KWN4KS34KWH4KSqIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRTbXMiIG1zZ2lkPSI1NjAwODMwNjEyMTQ3NjcxNTI5Ij4iU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKrgpY3gpLDgpKTgpY3gpK/gpL7gpLjgpL/gpKQg4KSa4KS+4KSw4KWN4KSc4KS54KSw4KWC4KSV4KWLIOCkquCksOCkv+Cko+CkvuCkriDgpKbgpL/gpKgg4KS44KSV4KWN4KSm4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkquClgeCkt+CljeCkn+CkvyDgpKzgpL/gpKjgpL4g4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkj+CksCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSq4KWI4KS44KS+IOCkluCksOCljeCkmiDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iODcxMzg4OTEwNTMwNTk0MzIwMCI+IuCkquCljeCksOCkpOCkv+CkleCljeCksOCkv+Ckr+Ckvi3gpK7gpL7gpLDgpY3gpKvgpKQt4KS44KSo4KWN4KSm4KWH4KS2IOCkmOCkn+CkqOCkvuCkueCksOClgiDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpJfgpKQg4KSV4KSy4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpKrgpY3gpLDgpKTgpL/gpJXgpY3gpLDgpL/gpK/gpL4t4KSu4KS+4KSw4KWN4KSr4KSkLeCkuOCkqOCljeCkpuClh+CktiDgpJjgpJ/gpKjgpL7gpLngpLDgpYLgpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkuOCkqOCljeCkpuClh+CktiDgpKrgpKDgpL7gpIngpKjgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSu4KS+IOCkheCkqOClgeCksOCli+Ckp+CkueCksOClgiDgpKrgpKDgpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNtcyIgbXNnaWQ9Ijg3NDUwODY1NzIyMTMyNzA0ODAiPiLgpKTgpKrgpL7gpIjgpILgpJXgpL4g4KSq4KS+4KSgIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiAoU01TIOCkteCkviBNTVMpIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI0Njc5ODE1NDg2ODQ3MzU1MjIiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkteCkviBTSU0g4KSV4KS+4KSw4KWN4KSh4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4gU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClguCksuCkvuCkiCDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL/gpLfgpK/gpLXgpLjgpY3gpKTgpYEg4KS14KS+IOCkl+Cli+CkquCkqOClgOCkr+CkpOCkvuCksuCkvuCkiCDgpLXgpYfgpLXgpL7gpLjgpY3gpKTgpL4g4KSX4KSw4KWN4KSm4KWIIOCkuOCkrOCliCBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkouCljeCkqOClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSoIOCkteCkviBTSU0g4KSV4KS+4KSw4KWN4KSh4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4gU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClguCksuCkvuCkiCDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkuOCkrOCliCBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWC4KSy4KS+4KSIIOCkquCkouCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkteCkviDgpLXgpL/gpLbgpY3gpLXgpLjgpKjgpL/gpK/gpKTgpL4g4KSs4KS/4KSo4KS+IOCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTbXMiIG1zZ2lkPSIzMjE2OTUwNDcyNjM2MjE0Nzc0Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkquCkvuCkoCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KS44KSu4KWN4KSq4KS+4KSm4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSAoU01TIOCkteCkviBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLXgpL4gU0lNIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLAg4KSX4KSw4KS/4KSP4KSV4KS+IFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSy4KWH4KSW4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSoIOCkteCkviBTSU0g4KSV4KS+4KSw4KWN4KSh4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4gU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClguCksuCkvuCkiCDgpLLgpYfgpJbgpY3igI3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KS44KS+4KSv4KSmIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSu4KWH4KSf4KS+4KSJ4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI1OTkxMzk4NzExOTM2NTkwNDEwIj4i4KSq4KS+4KSgIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiAoV0FQKSDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiJXQVAg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSwIOCkquCljeCksOCktuCli+Ckp+CkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CkruCkviDgpK7gpYvgpKjgpL/gpJ/gpLAg4KSX4KSw4KWN4KSo4KWHIOCkteCkviDgpKTgpKrgpL7gpIjgpIHgpLLgpL7gpIgg4KSq4KSg4KS+4KSH4KSP4KSV4KS+IOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKTgpKrgpL7gpIjgpIHgpLLgpL7gpIgg4KSo4KSm4KWH4KSW4KS+4KSIIOCkruClh+Ckn+CljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL4g4KS44KSu4KS+4KS14KWH4KS2IOCkueClgeCkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4i4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VGFza3MiIG1zZ2lkPSI3NDU0MjE1OTk1ODQ3NjU4MTAyIj4i4KS14KSw4KWN4KSk4KSu4KS+4KSo4KSu4KS+IOCksCDgpK3gpLDgpJbgpLDgpYgg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkleCkvuCksOCljeCkr+CkueCksOClgiDgpKzgpL7gpLDgpYfgpJXgpYsg4KS44KWC4KSa4KSo4KS+IOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkv+CkpCDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkieCkquCkleCksOCko+CkruCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSt4KSP4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4g4KS44KWC4KSa4KSo4KS+IOCkquCkpOCljeCkpOCkviDgpLLgpJfgpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkueCksOClgiDgpKTgpLDgpY3gpKsg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSIzNjQ2NzA5NjM2MjMzODU3ODYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYIg4KSu4KS+4KSw4KWN4KSr4KSkIOCkleCkvuCksOCljeCkr+CkueCksOClgiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYIg4KSs4KS/4KSaIOCkuOClgeCksOCkleCljeCkt+CkviDgpKzgpL/gpKXgpYvgpLLgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKjgpYcg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjI1Njc3MzQyODU1NDUwNzQxMDUiPiLgpJXgpYHgpLDgpL7gpJXgpL7gpKjgpYAg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWCIOCkrOCkv+CkmiDgpIXgpKjgpY3gpKTgpLDgpY3gpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSoIOCkquClguCksOCljeCkoyDgpIXgpKjgpYHgpK7gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjM3Njg0MTM2ODM5NTUwMjM2NiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkuOCkgeCkl+CkleCliyDgpJXgpYHgpLDgpL7gpJXgpL7gpKjgpYAg4KS44KSs4KWIIOCkuOCkruCljeCkreCkvuCkteCkqOCkvuCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2VycyIgbXNnaWQ9IjE2NzYxNTA5MTE2NzIyODI0MjgiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYIg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIngpKrgpJXgpLDgpKPgpK7gpL4sIOCkquCljeCksOCktuCljeCkqCwg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCksCDgpK7gpYfgpJ/gpL7gpIfgpLjgpLngpL/gpKQg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkrOCkqOCljeCkpyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjYyMjk0Njg2NzQ3NTM1Mjk1MDEiPiLgpJrgpLLgpL/gpLDgpLngpYfgpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkteCkv+CkteCksOCkoyDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjE1MzgyNDc0MTQ0MDcxNzU5OSI+IuCkteCksOCljeCkpOCkruCkvuCkqOCkruCkviDgpLAg4KSt4KSw4KSW4KSw4KWIIOCkmuCksuCkv+CksOCkueClh+CkleCkviDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYLgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCkteCkv+CkuOCljeCkpOClg+CkpCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSs4KS+4KSw4KWH4KSV4KWLIOCkqOCkv+CknOClgCDgpLjgpYLgpJrgpKjgpL4g4KSq4KSk4KWN4KSk4KS+IOCksuCkl+CkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9IjIwMTg1NzU1MjY5MzQ0MjI3NzkiPiLgpJrgpLLgpL/gpLDgpLngpYfgpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkquClgeCkqOCkg+CkleCljeCksOCkriDgpJfgpLDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW9yZGVyVGFza3MiIG1zZ2lkPSI3NzM0MjE3NzU0ODc3NDM5MzUxIj4i4KSV4KS+4KSu4KS54KSw4KWC4KSy4KS+4KSIIOCkheCkl+CljeCksOCkreCkvuCklyDgpLAg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/4KSu4KS+IOCkuOCkvuCksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSv4KWLIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIfgpKjgpKrgpYHgpJ8g4KSs4KS/4KSo4KS+IOCkqOCliCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW1vdmVUYXNrcyIgbXNnaWQ9IjY4MjE1MTM0MDE4NzAzNzc0MDMiPiLgpJrgpL7gpLLgpYEg4KSt4KSH4KSw4KS54KWH4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW1vdmVUYXNrcyIgbXNnaWQ9IjEzOTQ3MTQzNTIwNjI2MzU0OTMiPiLgpJXgpL7gpK7gpLngpLDgpYIg4KS54KSf4KS+4KSJ4KSoIOCksCDgpIngpKjgpYDgpLngpLDgpYLgpJXgpYsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkteCljeCkr+CkteCkueCkvuCksOCksuCkvuCkiCDgpIXgpKzgpLDgpYvgpKcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSI3MzkxMTkxMzg0MDI3MzAzMDY1Ij4iYWN0aXZpdHkgc3RhY2tzIOCkleCliyDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSIxNjE1ODgxOTMzMDM0MDg0NDQwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSa4KSy4KWN4KSo4KWHIGFjdGl2aXR5IHN0YWNrcyDgpLLgpL7gpIgg4KSl4KSq4KWN4KSoLCDgpLngpJ/gpL7gpIngpKgg4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KS14KWN4KSv4KS14KS54KS+4KSw4KSy4KS+4KSIIOCkteCkv+CkmOCkn+CkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iMjkxODc2ODIzODA0NTIwNjQ1NiI+IuCkleClgeCkqOCliCDgpJfgpKTgpL/gpLXgpL/gpKfgpL8g4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSI5OTc4MjM2OTUzNDM1ODQwMDEiPiLgpIXgpKjgpYHgpK7gpKTgpL8g4KS44KWB4KSw4KSV4KWN4KS34KS+IOCkteCkviDgpKjgpL/gpLDgpY3gpK/gpL7gpKQg4KSF4KS14KS44KWN4KSl4KS+4KSy4KS+4KSIIOCkteCkvuCkuOCljeCkpOCkviDgpKjgpJfgpLDgpL/gpJXgpKgg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpJXgpL7gpLDgpY3gpK8g4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSF4KSo4KWB4KSV4KWC4KSy4KSk4KS+IOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRTY3JlZW5Db21wYXRpYmlsaXR5IiBtc2dpZD0iNjkyMDQzNjE4NjkzOTE3Mzc0Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CkueCksOClguCkleCliyDgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSu4KS/4KSy4KWN4KSm4KWLIOCkruCli+CkoeCksuCkvuCkiCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KS54KSw4KWC4KSV4KWLIOCkteCljeCkr+CkteCkueCkvuCksCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkn+ClgeCkn+CkvuCkieCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldERlYnVnQXBwIiBtc2dpZD0iMzAyMjEwNzE5ODY4NjU4NDA1MiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKHgpL/gpKzgpJcg4KSX4KSw4KWN4KSo4KWHIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXREZWJ1Z0FwcCIgbXNnaWQ9IjQ0NzQ1MTI0MTYyOTkwMTMyNTYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KSh4KS/4KSs4KSXIOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSa4KS+4KSy4KWBIOCkl+CksOCljeCkqOClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSw4KWCIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLjgpK7gpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkr+CkuOCkleCliyDgpIngpKrgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQxNjIwOTIxODUxMjQyMzQ0ODAiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQzNzIyMjM4NzMxNTQyOTYwNzYiPiLgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSV4KSo4KWN4KSr4KS/4KSX4KSw4KWH4KS44KSoIOCknOCkuOCljeCkpOCliCDgpLLgpYvgpJXgpY3gpK/gpL7gpLIg4KS14KS+IOCkuOCkrOCliOCkpOCkv+CksCDgpKvgpKjgpY3gpJ8g4KSG4KSV4KS+4KSwIOCkrOCkpuCksuCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjU2ODQ1MDQwNTgxOTI5MjEwOTgiPiLgpJXgpL7gpLAg4KSu4KWL4KShIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19lbmFibGVDYXJNb2RlIiBtc2dpZD0iNDg1MzE4NzQyNTc1MTQxOTQ2NyI+IuCkleCkvuCksCDgpK7gpYvgpKHgpLLgpL7gpIgg4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSIzOTE0MDI2Njg3NDIwMTc3MjAyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjQ1OTMzNTMyMzU5NTk3MzMxMTkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KS54KSw4KWCIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJrgpLLgpY3gpKjgpKzgpL7gpJ8g4KSw4KWL4KSV4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSIyMzI5NjI3NDI4ODMyMDY3NzAwIj4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpKbgpKzgpL7gpKzgpK7gpL4g4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSI1MjUzMTU3Mjk2MTgzOTQwODEyIj4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VCYWNrIiBtc2dpZD0iNjUyOTM1MjA0MDcyNTg0NjE2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSs4KSyIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlQmFjayIgbXNnaWQ9IjM4OTIyOTU4MzA0MTk1MTM2MjMiPiLgpIXgpJfgpY3gpLDgpK3gpL7gpJfgpK7gpL4g4KSt4KSP4KSV4KWLIOCkleClgeCkqOCliCDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpLLgpL7gpIgg4KSc4KSs4KSw4KSc4KS44KWN4KSk4KWAIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSwIOCkq+CksOCljeCkleClh+CksCDgpJzgpL7gpKjgpJXgpL4g4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIcg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CkleCkpOCkviDgpKrgpLDgpY3gpKbgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2R1bXAiIG1zZ2lkPSIxNjgxNzk5ODYyNDM4OTU0NzUyIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KWLIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2R1bXAiIG1zZ2lkPSIxNzc4Mjk5MDg4NjkyMjkwMzI5Ij4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KWLIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkieCkqOClgOCkueCksOClguCksuCkvuCkiCDgpLjgpL7gpK7gpL7gpKjgpY3gpK/gpKTgpIMg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkqOCkmuCkvuCkueCkv+CkqOClhyDgpLXgpY3gpK/gpL7gpKrgpJUg4KS14KS/4KS14KS/4KSn4KSk4KS+4KSV4KWLIOCkqOCkv+CknOClgCDgpLAg4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkuOClguCkmuCkqOCkviDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSI4MDIyNTg4NjA4OTk0NTg5OTM4Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSIzMTkzMjY5MDY5NDY5NzAwMjY1Ij4i4KS44KSV4KWN4KSw4KS/4KSvIOCkteCkv+CkqOCljeCkoeCli+CkleCliyDgpLXgpL/gpLfgpK/gpLXgpLjgpY3gpKTgpYHgpLLgpL7gpIgg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkquClgeCksOCliCDgpLXgpL/gpKjgpY3gpKHgpYvgpJXgpYsg4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWBIOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWNIOCksCDgpKrgpL7gpLjgpLXgpLDgpY3gpKHgpLngpLDgpYLgpKzgpL7gpLngpYfgpJUg4KSv4KS44KSV4KS+IOCkuOCkrOCliCDgpKrgpL7gpKDgpJXgpYsg4KSc4KS+4KSB4KSaIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjIzMTI2MTIxMzUxMjczMTAyNTQiPiLgpKrgpLngpYHgpIHgpJrgpKTgpL7gpLLgpL7gpIgg4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KSJ4KSq4KSV4KSw4KSj4KSu4KS+4KSl4KS/IOCkquCkueClgeCkgeCkmiDgpLDgpL7gpJbgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkleCliyDgpLjgpLngpK7gpKTgpL8g4KSs4KS/4KSo4KS+IOCkqOCliCDgpKrgpLngpYHgpIHgpJrgpLLgpL7gpIgg4KS44KSV4KWN4KS34KSuIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iODUzMjI5NTE5OTExMjUxOTM3OCI+IuCkteCkv+CkqOCljeCkoeCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iNDk5ODgzNjM3MDQyNDE4Njg0OSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL/gpKjgpY3gpKHgpYsg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSV4KSs4KS+4KSfIOCkteCkv+CkqOCljeCkoeCli+CkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4g4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSJ4KSq4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpKjgpL/gpK7gpL/gpKTgpY3gpKQg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCkqOCkvyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9Ijg2NzU1MzU2NDg4MDc0MjczODkiPiLgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSb4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9IjgwMDYyMzYzMTU4ODgzNDc2ODAiPiLgpIfgpKjgpY3gpKrgpYHgpJ8g4KSr4KS/4KSy4KWN4KSf4KSwIOCknOClgeCkqCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkmOCkn+CkqOCkvuCkueCksOClgiDgpKrgpKDgpL7gpIfgpKjgpYHgpK3gpKjgpY3gpKbgpL4g4KSq4KS54KS/4KSy4KWHIOCkq+Ckv+CksuCljeCkn+CksCDgpJfgpLDgpY3gpKjgpYfgpLLgpL7gpIgg4KSm4KSw4KWN4KSk4KS+IOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpJXgpYsg4KS54KS44KWN4KSk4KSV4KWN4KS34KWH4KSqIOCkrOCkv+CkqOCkviDgpKjgpYggVUkg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjU5NzM2MjY3MzgxNzA2MTg3NzUiPiLgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNzEyMTIzNTY4NDUxNTAwMzc5MiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKjgpJXgpYsg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkhuCkteCksOCljeCkp+CkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkquCljeCksOCkpuCksOCljeCktuCkqCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KS44KSC4KSV4KWN4KSw4KSu4KSjIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpKjgpY0g4KSc4KS44KSy4KWHIOCkieCkquCkleCksOCko+CksuCkvuCkiCDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAg4KSs4KSo4KS+4KSJ4KSB4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaHV0ZG93biIgbXNnaWQ9IjcxODU3NDc4MjQwMzg5MDkwMTYiPiLgpIbgpILgpLbgpL/gpJUg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2h1dGRvd24iIG1zZ2lkPSI3MDQ2NTAwODM4NzQ2MjkxNzc1Ij4i4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkleCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWHIOCkheCkteCkuOCljeCkpeCkvuCkruCkviDgpLDgpL7gpJbgpY3gpJvgpaQg4KSq4KWC4KSw4KWN4KSjIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYcg4KSV4KS+4KSuIOCkl+CksOCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iNDEzODYwODYxMDcxNzQyNTU3MyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpY3gpLXgpL/gpJrgpLngpLDgpYIg4KSc4KWL4KSX4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iODI2MjE5NTgwMjU4MjI1NTAyMSI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KS44KWN4KS14KS/4KSaIOCkl+CksOCljeCkqOCkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYLgpLLgpL7gpIgg4KSw4KWL4KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSIyNTM3OTIyMzExNDExNTQ2MDE2Ij4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjgxNTM2NTE0MzQxNDUxMzI1MDUiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpJXgpYsg4KSF4KSX4KWN4KSwIOCkreCkvuCkl+CkruCkviDgpLngpL7gpLLgpJXgpYsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCksCDgpLjgpYfgpLXgpL7gpLngpLDgpYLgpJXgpL4g4KSs4KS+4KSw4KWHIOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSo4KS/4KSV4KS+4KSy4KWN4KSoIOCkrOCkvuCkueCkleCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ydW5TZXRBY3Rpdml0eVdhdGNoZXIiIG1zZ2lkPSI4OTIyMzkwOTQ4NjcxODI2NTYiPiLgpLjgpKzgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOClgeCksOClgeCkteCkvuCkpCDgpJfgpLDgpY3gpKjgpYcg4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCksCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJXgpLjgpLDgpYAg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkuOClgeCksOClgeCkteCkvuCkpCDgpJfgpKTgpL/gpLngpLDgpYIg4KSu4KWL4KSo4KS/4KSf4KSwIOCkl+CksOCljeCkqCDgpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSu4KS+IOCkquClguCksOCljeCkoyDgpLjgpLngpK7gpKQg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/IOCkleClh+CkteCksiDgpLXgpL/gpJXgpL7gpLjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkhuCkteCktuCljeCkr+CklSDgpJssIOCkuOCkvuCkp+CkvuCksOCkoyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleCkueCkv+CksuClhyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iMjU3NjMzMzQzNDg5MzUzMjQ3NSI+IuCkquCljeCkr+CkvuCkleClh+CknCDgpLngpJ/gpL7gpIfgpI/gpJXgpYsg4KSq4KWN4KSw4KS44KS+4KSw4KSj4KSy4KS+4KSIIOCkquCkoOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbIOCknOClgeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSq4KWN4KSv4KS+4KSV4KWH4KScIOCkueCkn+CkvuCkh+Ckj+CkleCliyDgpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCljeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpYsg4KSV4KWB4KSo4KWIIOCkheCkqOCljeCkryDgpJrgpL7gpLLgpYEg4KSF4KSo4KWB4KWN4KSq4KWN4KSw4KSv4KWL4KSXIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNTY4OTA5NTAwOTAzMDMzNjU5MyI+IlNNUy3gpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkquCkoOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IuCkpOCljeCkr+CliyDgpI/gpIngpJ/gpL4gU01TIOCkuOCkqOCljeCkpuClh+CktuCkrOCkvuCknyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSt4KSP4KSV4KWLIOCkuOClguCkmuCkqOCkvuCksuCkvuCkiCDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkhuCkieCkgeCkpuCliCDgpJfgpLDgpYfgpJXgpYsgU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClguCksuCkvuCkiCDgpJzgpL7gpLLgpLjgpL7gpJzgpYAg4KSX4KSw4KWN4KSoIOCkuOCkvuCkr+CkpiDgpJbgpLDgpL7gpKwg4KSt4KSP4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpLjgpLLgpL7gpIgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4iV0FQLVBVU0gt4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkquCljeCksOCkuOCkvuCksOCkoyDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iNDc4MzQwMjUyNTAzOTQ0MjcyOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbIOCknOClgeCkqCDgpI/gpIngpJ/gpL4gV0FQIFBVU0gg4KS44KSo4KWN4KSm4KWH4KS2IOCkquCljeCksOCkvuCkquCljeCkpCDgpK3gpI/gpJXgpYsg4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KWLIE1NUyDgpLjgpKjgpY3gpKbgpYfgpLYg4KSs4KS/4KSX4KS+4KSw4KWN4KSoIOCkteCkviDgpK7gpYzgpKgg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkleClgeCkqOCliCDgpKrgpKjgpL8g4KS14KWH4KSs4KSq4KWD4KS34KWN4KSg4KSV4KWLIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJbgpLDgpL7gpKwg4KS14KS/4KSt4KWH4KSm4KS54KSw4KWC4KS44KSB4KSXIOCkrOCkpuCksuCljeCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iMjQ1MTg3MzY2NDM2MzY2MjY2NiI+IuCkmuCkvuCksuClgSDgpKrgpY3gpLDgpLbgpYvgpKfgpKjgpLngpLDgpYLgpJXgpYsg4KS44KSZ4KWN4KSW4KWN4KSv4KS+IOCkuOClgOCkruCkpOCkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkmuCkvuCksuClgSDgpLngpYHgpKjgpYcg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KS54KSw4KWC4KSV4KWLIOCkheCkp+Ckv+CkleCkpOCkriDgpLjgpILgpJbgpY3gpK/gpL4g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleCkueCkv+CksuClhyDgpKrgpKjgpL8g4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkquCksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9IjU1MDk1ODUwNzc5ODc5Njk2NSI+IuCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpKbgpKzgpL7gpKwg4KSm4KS/4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNzQ3MTMxMDY1Mjg2ODg0MTQ5OSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpLngpLDgpYIg4KS44KSn4KWI4KSBIOCkuOCkruCkvuCkquCljeCkpCDgpK3gpK/gpYsg4KSV4KS/IOCkreCkj+CkqCDgpJzgpKwg4KSV4KS/IOCknOCkpOCkvyDgpLjgpJXgpY3gpKbgpYsg4KSk4KS/4KSo4KWA4KS54KSw4KWCIOCkquClg+Ckt+CljeCkoOCkreClguCkruCkv+CkruCkviDgpJzgpL7gpKjgpY3gpJvgpKjgpY0g4KSt4KSo4KWN4KSo4KWHIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpLngpL/gpLLgpYcg4KSq4KSo4KS/IOCkhuCkteCktuCljeCkr+CklSDgpKjgpKrgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIyNzg5NjEwNjczNTE0MTAzMzY0Ij4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkpOCkpeCljeCkr+CkvuCkmeCljeCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI1ODk3MzQ2NTgyODgyOTE1MTE0Ij4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkpeCli+CksOCliCDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpYAg4KSq4KWN4KSw4KSv4KWL4KSXIOCkoeClh+Ckn+CkviDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CklSDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJzgpYHgpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWA4KSw4KS54KSo4KWB4KSt4KSP4KSV4KWLIOCkmyDgpKTgpY3gpK/gpLjgpY3gpJXgpYsg4KSs4KS+4KSw4KWH4KSV4KS+IOCkquClgeCksOCljeCkoyDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpLjgpL7gpK/gpKYg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjM3MTk2ODk3NjQ1MzYzNzk1NTciPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSk4KSl4KWN4KSv4KS+4KSZ4KWN4KSV4KSy4KS+4KSIIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkguCkleCksuCkv+CkpCDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSk4KSl4KWN4KSv4KS+4KSZ4KWN4KSV4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjE1MDg3Nzk2ODc0MzY1ODU3NDQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KSC4KSa4KS+4KSy4KSo4KSV4KS+IOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClgiDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4i4KS44KSZ4KWN4KSV4KSy4KSoIOCkl+CksOCkv+Ckj+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KSC4KSa4KS+4KSy4KSoIOCkpOCkpeCljeCkr+CkvuCkmeCljeCksuCkvuCkiCDgpKrgpYHgpKjgpIMg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSs4KS+4KSfIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9Ijg4MjkwOTczNzM4NTE1MjE1MDUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KSC4KSa4KSy4KS+4KSoIOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI1MDc4NDU5NjU5NDQwMzQ4MyI+IuCkuOCkmeCljeCkleCksuCkqCDgpJfgpLDgpL/gpI/gpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCkguCkmuCkvuCksuCkqCDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpLLgpL7gpIgg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSs4KS+4KSfIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYWNrdXAiIG1zZ2lkPSI0NzAwMTMwMjI4NjU0NTM5MjAiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSs4KWN4KSv4KSV4KSF4KSqIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSwIOCkquClgeCkqOCkgyDgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmFja3VwIiBtc2dpZD0iNjkxMjIzMDUyNTE0MDU4OTg5MSI+IuCkquCljeCksOCko+CkvuCksuClgOCkleCliyDgpJzgpJfgpYfgpKHgpL4g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpLAg4KSq4KWB4KSo4KSD4KSq4KWN4KSw4KS+4KSq4KWN4KSk4KS/4KSV4KWLIOCkuOCkguCkr+Cli+CknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkv+CkpCDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiLgpKrgpYLgpLDgpY3gpKMg4KSc4KSX4KWH4KSh4KS+IOCkl+CksOCljeCkqCDgpLXgpL4g4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4iVUkg4KSV4KWLIOCkquClguCksOCljeCkoyDgpJzgpJfgpYfgpKHgpL4g4KSo4KS/4KS24KWN4KSa4KS/4KSo4KWN4KSk4KSk4KS+IOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpJXgpL4g4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkleClgeCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpKzgpL7gpJ8g4KSq4KWN4KSw4KSv4KWL4KSXIOCkqOCkl+CksOCkv+CkqOClh+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSIyMTQ4NTYzNjI4MTQwMTkzMjMxIj4i4KSF4KSo4KSn4KS/4KSV4KWD4KSkIOCkrOCkv+CkqOCljeCkoeCli+CkueCksOClgiDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkteCkv+CkqOCljeCkoeCli+CkueCksOClgiDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJsg4KSc4KWB4KSoIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkheCkreCkv+CkquCljeCksOClh+CksOCkv+CkpCDgpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkruCkviDgpJrgpL/gpKTgpY3gpLAg4KSV4KWL4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSI4NTg0Njc4MzgxOTcyODIwMTE4Ij4i4KSF4KSw4KWCIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkruCkvuCkpeCkvyDgpLXgpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCkleCkviDgpK3gpL7gpJfgpLngpLDgpYLgpK7gpL4g4KSa4KS/4KSk4KWN4KSwIOCkleCli+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKTgpL/gpKjgpYDgpLngpLDgpYLgpLLgpYcg4KSV4KWB4KSo4KWIIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpJXgpYsg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkuOCkgeCklyDgpLngpLjgpY3gpKTgpJXgpY3gpLfgpYfgpKog4KSX4KSw4KWN4KSoIOCkteCkviDgpKTgpKrgpL7gpIjgpIEg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkruCkviDgpJXgpYcg4KSm4KWH4KSW4KS/4KSw4KS54KSo4KWBIOCkreCkj+CkleCliyDgpJsg4KSt4KSo4KWN4KSo4KWHIOCkuOCli+CkmuCljeCkqCDgpLngpYHgpKjgpY3gpJsg4KSt4KSo4KWN4KSo4KWHIOCkrOCkpuCksuCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iMjgwNTEwMzI0MTE1MzkwNzE3NCI+IuCkl+CljeCksuCli+CkrOCksiDgpLjgpJzgpYDgpLXgpL/gpJXgpLDgpKMg4KSX4KSk4KS/IOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9Ijc2OTAwNjM0Mjg5MjQzNDM1NzEiPiLgpLXgpL/gpLbgpY3gpLXgpKzgpY3gpK/gpL7gpKrgpL8g4KS44KSc4KWA4KS14KS/4KSV4KSw4KSjKOCkpuCljeCksOClgeCkpCDgpLXgpL4g4KSi4KS/4KSy4KS+IOCkuOCknOClgOCkteCkv+CkleCksOCko+CkueCksOClgikg4KSy4KS+4KSIIOCkleClgeCkqOCliCDgpKrgpKjgpL8g4KS44KSu4KSvIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSIxMjg2NTA1NzE3MDUwMTIxMzcwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkn+Cli+CkleCkqOCkueCksOClgiDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpKvgpY3gpKjgpL4g4KSf4KWL4KSV4KSo4KS54KSw4KWCIOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKgg4KSwIOCkieCkqOClgOCkueCksOClguCkleCliyDgpLjgpL7gpKfgpL7gpLDgpKMgWi3gpJXgpY3gpLDgpK7gpL7gpJngpY3gpJXgpKgg4KSs4KS+4KSH4KSq4KS+4KS4IOCkl+CksOClh+CksCDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KS54KWB4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZnJlZXplU2NyZWVuIiBtc2dpZD0iNDcwODE4MTE4NDQ0MTg4MDE3NSI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpKvgpY3gpLDgpL/gpJwg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZnJlZXplU2NyZWVuIiBtc2dpZD0iODU1ODkyMzc4OTIyMjY3MDA2NCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpYLgpLDgpY3gpKMt4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkuOCkguCkleCljeCksOCkruCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KS44KWN4KSl4KS/4KSwIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbmplY3RFdmVudHMiIG1zZ2lkPSIxMzc4NzQ2NTg0MDIzNTg2NjAwIj4i4KSV4KWB4KSe4KWN4KSc4KWA4KS54KSw4KWCIOCksCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSs4KSf4KSo4KS54KSw4KWCIOCkpeCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4i4KSv4KS44KSV4KS+IOCkhuCkq+CljeCkqOCkviDgpIfgpKjgpKrgpYHgpJ8g4KSY4KSf4KSo4KS+4KS54KSw4KWCICjgpJXgpL8g4KSl4KS/4KSa4KS+4KSH4KS54KSw4KWCLCDgpIbgpKbgpL8pIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KS14KS/4KSk4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CkuOCksuCkvuCkiCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLjgpK7gpY3gpK4g4KSy4KWI4KSc4KS+4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5qZWN0RXZlbnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjUzMTI4MDU3NTcyMzI2MjUzIj4i4KSv4KS44KWN4KSV4KWLIOCkhuCkq+CljeCkqOCliCDgpKjgpL/gpLXgpYfgpLYg4KSY4KSf4KSo4KS+4KS54KSw4KWCICjgpJXgpL8g4KSl4KS/4KSa4KS+4KSH4KS54KSw4KWCLCDgpIbgpKbgpL8uKSDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KWL4KSv4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkquClgeCljeCksOCljeKAjeCkr+CkvuCkieCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKvgpYvgpKjgpLLgpL7gpIgg4KS54KS44KWN4KSk4KSV4KWN4KS34KWH4KSqIOCkl+CksOCljeCkqCDgpK/gpLjgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSXIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI0Njk0Mjg5MDAwNDEyNDkyMzQiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSV4KWHIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYHgpKjgpY3gpJsg4KSwIOCkleClhyDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYIg4KSy4KS/4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCksOClh+CkleCksOCljeCkoSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjgzODc3NTQ5MDE2ODg3MjgwNDMiPiLgpIXgpLDgpY3gpJXgpYsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXKOCknOCkuOCljeCkpOCliCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCkvuCkhyngpLjgpIHgpJcg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOClh+CkleCliyDgpKzgpYfgpLLgpL4g4KSq4KSo4KS/IOCkpOCkquCkvuCkiOCkgeCksuClhyDgpKXgpL/gpJrgpYfgpJXgpL4g4KSV4KS/4KS54KSw4KWC4KSy4KS+4KSHIOCkueClh+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KS54KWB4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMzYwMDY0NjIwMjMwNTE1Nzc2Ij4i4KSP4KSJ4KSf4KS+IOCkqOCkv+CkteClh+CktiDgpKTgpLDgpL/gpJXgpL7gpK7gpL4g4KSs4KS+4KSB4KSn4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzI1MDQ0MDMyMjgwNzI4NjMzMSI+IuCkj+CkieCkn+CkviDgpKjgpL/gpLXgpYfgpLYg4KSk4KSw4KS/4KSV4KS+4KSV4KWLIOCkieCkmuCljeCkmiDgpLjgpY3gpKTgpLDgpJXgpYsg4KSH4KSo4KWN4KSf4KSw4KSr4KWH4KS44KSy4KS+4KSIIOCkquCkleCljeCkleCkviDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkruCkvuCkpOClgCDgpLDgpL7gpJbgpY3gpKjgpYfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNTM1NzczMzk0MjU1NjAzMTU5MyI+IuCkj+CkieCkn+CkviDgpKrgpLngpYHgpIHgpJog4KS44KWH4KS14KS+4KS44KSB4KSXIOCknOCli+CkoeCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjcwMzQ2MTU5Mjg2MDkzMzEzNjgiPiLgpI/gpJUg4KSq4KS54KWB4KSB4KSaIOCkuOClh+CkteCkvuCkleCliyDgpIngpJrgpY3gpJog4KS44KWN4KSk4KSw4KSV4KWLIOCkleClgeCksOCkvuCkleCkvuCkqOClgOCksuCkvuCkiCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4KSo4KWH4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI4NDYyODE1MTc5NTcyNzQ4NzYxIj4i4KSP4KSJ4KSf4KS+IOCkquCljeCksOCkv+CkqOCljeCknyDgpLjgpYfgpLXgpL7gpLjgpIHgpJcg4KSc4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFByaW50U2VydmljZSIgbXNnaWQ9Ijc5NjAwNjc2MjMyMDkxMTExMzUiPiLgpI/gpIngpJ/gpL4g4KSq4KWN4KSw4KS/4KSo4KWN4KSfIOCkuOClh+CkteCkvuCkleCliyDgpIngpJrgpY3gpJog4KS44KWN4KSk4KSw4KSV4KWLIOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCksuCkvuCkiCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSI2ODA3NzYyNzgzNzQ0MTI1OTU0Ij4i4KSq4KWN4KSw4KS/4KSo4KWN4KSfIOCkuOCljeCkquClgeCksuCksCDgpLjgpYfgpLXgpL7gpLjgpIHgpJcg4KSs4KS+4KSn4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSIzNjgwNTUyMjg1OTMzMzE4MzcyIj4i4KSq4KWN4KSw4KS/4KSo4KWN4KSfIOCkuOCljeCkquClgeCksuCksCDgpLjgpYfgpLXgpL7gpJXgpYsg4KS24KWA4KSw4KWN4KS3IOCkpOCkuSDgpIfgpKjgpY3gpJ/gpLDgpY3gpKvgpYfgpLjgpLLgpL7gpIgg4KSs4KS+4KS54KSV4KS44KSB4KSXIOCkrOCkvuCkgeCkp+CljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOCkvyDgpIbgpLXgpL7gpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSIyNzUyNzMxMzAwNDE5NDEwNzI0Ij4iTkZDIOCkuOClh+CkteCkvuCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiJORkMg4KSV4KS+4KSw4KWN4KSh4KS54KSw4KWCIOCkh+CkruClgeCksuClh+CknyDgpJfgpLDgpY3gpKjgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkrOCkvuCkgeCkp+CljeCkqOCkleCkviDgpLLgpL7gpJfgpL8g4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCkviDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI3MzU4Mzc4NDAxOTE1Mjg3OTM4Ij4i4KSP4KSJ4KSf4KS+IOCkquCkvuCkoCDgpLjgpYfgpLXgpL7gpLjgpIHgpJcg4KS44KSC4KSX4KSg4KS/4KSkIOCkueClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLgpI/gpIngpJ/gpL4g4KSq4KS+4KSgIOCkuOClh+CkteCkvuCkleCliyAo4KSJ4KSm4KS+4KS54KSw4KSjIOCktuCkrOCljeCkpiDgpKrgpLDgpYDgpJXgpY3gpLfgpKPgpLjgpYfgpLXgpL4pIOCkieCkmuCljeCkmiDgpLjgpY3gpKTgpLDgpJXgpYsg4KSH4KSo4KWN4KSf4KSw4KSr4KWH4KS44KSy4KS+4KSIIOCkquCkleCljeCkleCkviDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkruCkvuCkpOClgCDgpLDgpL7gpJbgpY3gpKjgpYfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4iVlBOIOCkuOClh+CkteCkvuCkuOCkgeCklyDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLgpI/gpJUgVnBuIOCkuOClh+CkteCkvuCkleCliyDgpIngpJrgpY3gpJog4KS44KWN4KSk4KSw4KSV4KWLIOCkleClgeCksOCkvuCkleCkvuCkqOClgOCksuCkvuCkiCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4KSo4KWH4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i4KSP4KSJ4KSf4KS+IOCkteCkvuCksuCkquClh+CkquCksOCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuCkteCkvuCksuCkquClh+CkquCksOCkleCliyDgpK7gpL7gpKXgpL/gpLLgpY3gpLLgpYsg4KS44KWN4KSk4KSw4KSV4KWLIOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKgg4KSn4KS+4KSw4KSV4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IuCkj+CkieCkn+CkviDgpLXgpL/gpJzgpYfgpJ8g4KS44KWH4KS14KS+4KS44KSB4KSXIOCkuOCkguCkl+CkoOCkv+CkpCDgpLngpYHgpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i4KSP4KSJ4KSf4KS+IOCkteCkv+CknOClh+CknyDgpLjgpYfgpLXgpL7gpJXgpYsg4KSJ4KSa4KWN4KSaIOCkuOCljeCkpOCksOCkleCliyDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpLjgpLLgpL7gpIgg4KSq4KSV4KWN4KSV4KS+IOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS44KSu4KS+4KSk4KWAIOCksOCkvuCkluCljeCkqOClh+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCkquCljeCksOCkrOCkqOCljeCkp+CkuOCkgeCklyDgpIXgpKjgpY3gpKTgpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i4KSJ4KSq4KSV4KSw4KSjIOCkquCljeCksOCktuCkvuCkuOCklSDgpLLgpL7gpIgg4KSG4KS24KSvIOCkquCkoOCkvuCkieCkqCDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4oCN4KSo4KWH4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4i4KSP4KSJ4KSf4KS+IOCkieCkquCkleCksOCkoyDgpLXgpY3gpK/gpLXgpLjgpY3gpKXgpL7gpKrgpJUg4KSl4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KS54KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+IuCkueCli+CksuCljeCkoeCksOCksuCkvuCkiCDgpLjgpJXgpY3gpLDgpL/gpK8g4KSJ4KSq4KSV4KSw4KSjIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkleCkueCksOClgiDgpKXgpKog4KSX4KSw4KWN4KSoIOCkteCkviDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSq4KSo4KS/IOCkhuCkteCktuCljeCkr+CklSDgpKjgpLngpYHgpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMzNjU5NDc3MTcxNjM4NjY4NDQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSF4KSt4KS/4KSu4KWB4KSW4KS/4KSV4KSw4KSjIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpK7gpK/gpK7gpL4g4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSV4KWLIOCkquCksOCkv+CkleCljeCksOCkruCkoyDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iOTE3NTM3MTYxMzMyMjU2MjkzNCI+IuCkuOCkmeCljeCkleClh+CkpOCklSDgpJfgpKTgpL8g4KSs4KSm4KSy4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iNjg2NjU2MzIzNDI3NDEwNDIzMyI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KS44KSu4KSv4KSu4KS+IOCkruCkvuCkieCkuCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkteCkviDgpJ/gpY3gpLDgpL7gpJXgpKrgpY3gpK/gpL7gpKEg4KS44KSC4KSV4KWH4KSk4KSV4KSV4KWLIOCkl+CkpOCkvyDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkqOCkmuCkvuCkueCkv+CkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iNDc3ODczMTcwMzYwMDkwOTM0MCI+IuCkleCkv+CkrOCli+CksOCljeCkoSDgpLLgpYfgpIbgpIngpJ8g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iODQ4MDAxNjc3MTEzNDE3NTg3OSI+IuCkleCkv+CkrOCli+CksOCljeCkoSDgpLLgpYfgpIbgpIngpJ/gpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpLjgpL7gpK/gpKYg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+IkxpbnV4IOCkuOCkguCkleClh+CkpOCkueCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiLgpLjgpKzgpYgg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkueCksOClguCkruCkviDgpKrgpKDgpL7gpIfgpI/gpJXgpL4g4KS44KSC4KSV4KWH4KSk4KSy4KS+4KSIIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCknOCkueCkv+CksuClhyDgpKrgpKjgpL8g4KSa4KSy4KWN4KSo4KWHIOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+IuCkr+CkuOCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KSu4KWH4KSu4KWL4KSw4KWA4KSu4KS+IOCkpuClg+CkoiDgpK3gpI/gpJXgpYvgpJXgpYsg4KSF4KSC4KS2IOCkrOCkqOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkouCkv+CksuCliyDgpJfgpLDgpL7gpIngpIHgpKbgpYgg4KSX4KSw4KWH4KSV4KS+IOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KS44KWA4KSu4KS/4KSkIOCkruCkvuCkpOCljeCksOCkvuCkruCkviDgpK/gpLjgpLLgpYcg4KSu4KWH4KSu4KWL4KSw4KWAIOCkieCkquCksuCkrOCljeCkpyDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK7gpYfgpK7gpYvgpLDgpYDgpK7gpL4g4KSG4KSr4KWI4KSC4KSV4KWLIOCkqOCkv+CksOCkqOCljeCkpOCksOCkleCliyDgpIXgpILgpLYg4KSs4KSo4KS+4KSJ4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkq+Cli+CkqOCksuCkvuCkiCDgpKLgpL/gpLLgpL4g4KSs4KSo4KS+4KSP4KSwIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpK7gpL4g4KSu4KWH4KSu4KWL4KSw4KWAIFNJTeCkv+CkpCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVQYWNrYWdlcyIgbXNnaWQ9IjE4NDM4NTEyOTUzNzcwNTkzOCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkquCljeCkr+CkvuCkleClh+CknOCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CkuOCksuCkvuCkiCDgpK7gpLngpKTgpY3gpKTgpY3gpLXgpKrgpYLgpLDgpY3gpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjI3NDEwOTE5MTg0NTg0Mjc1NiI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4i4KSq4KWN4KSw4KSv4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpJXgpY3gpK/gpL7gpLjgpLngpLDgpYIg4KSu4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KWN4KSv4KS+4KS4IOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKDgpL7gpIngpIHgpJXgpYsg4KSu4KS+4KSq4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK/gpLjgpJXgpYsg4KSV4KWL4KShLCDgpKHgpYfgpJ/gpL4sIOCksCDgpJXgpY3gpK/gpL7gpLgg4KSG4KSV4KS+4KSw4KS54KSw4KWCIOCkquClgeCkqOCkg+CkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLjgpL/gpKfgpYgg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLgpKjgpK/gpL7gpIEg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqCDgpLXgpL4g4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkquCljeCkr+CkvuCkleClh+CknOCkueCksOClgiDgpIXgpKbgpY3gpK/gpL7gpLXgpKfgpL/gpJUg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KS44KSy4KS+4KSIIOCkruCkqOCkquCksOClgCDgpLDgpYLgpKrgpK7gpL4g4KS24KSV4KWN4KSk4KS/4KS24KS+4KSy4KWAIOCkheCkqOClgeCkruCkpOCkv+CkueCksOClgiDgpK3gpI/gpJXgpL4g4KSo4KSv4KS+4KSBIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpKXgpKrgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwQ2FjaGUiIG1zZ2lkPSI3NDg3Mjc5MzkxNzIzNTI2ODE1Ij4i4KS44KSs4KWIIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpJXgpY3gpK/gpL7gpLgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzQ2NDA4NzE5NDU0MzQ1NjUiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkleCljeCkr+CkvuCkuCDgpKHgpL7gpIfgpLDgpYfgpJXgpY3gpJ/gpLDgpYDgpLngpLDgpYLgpK7gpL4g4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkueCkn+CkvuCkj+CksCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpJXgpYsg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkluCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSJ4KSo4KWA4KS54KSw4KWC4KSy4KWHIOCkhuCkq+CljeCkqOCliyDgpKHgpYfgpJ/gpL4g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KS+4KSy4KWHIOCkr+CkuOCksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkuOCljeCkn+CkvuCksOCljeCknyDgpLngpYHgpKgg4KSo4KS/4KSV4KWIIOCkouCkv+CksuCliyDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpJXgpY3gpK/gpL7gpLgg4KSh4KS+4KSH4KSw4KWH4KSV4KWN4KSf4KSw4KWA4KSu4KS+IOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpI/gpLAg4KSr4KWL4KSoIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSs4KSi4KWAIOCkouCkv+CksuCkviDgpLjgpYHgpLDgpYEg4KSX4KSw4KS+4KSJ4KSB4KSbIOCkleCkv+CkqOCkleCkvyDgpKTgpL/gpKjgpYDgpLngpLDgpYLgpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIPgpKrgpY3gpLDgpL7gpKrgpY3gpKTgpL8g4KSX4KSw4KWN4KSoIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3ZlUGFja2FnZSIgbXNnaWQ9IjMyODk4OTAyNzE2NDU5MjE0MTEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCkuOCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdmVQYWNrYWdlIiBtc2dpZD0iMzE5NTYyMjE3Nzc4MjQ0NTI0Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCljeCksOCli+CkpOCkueCksOClgiDgpIbgpKjgpY3gpKTgpLDgpL/gpJXgpKzgpL7gpJ8g4KSs4KS+4KS54KWN4KSvIOCkruClh+CkoeCkv+Ckr+CkvuCkruCkviDgpLAg4KS14KS/4KSq4KSw4KS/4KSk4KSu4KS+IOCksuCliOCknOCkvuCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZExvZ3MiIG1zZ2lkPSI2NjE1Nzc4NTQzMTk4OTY3NjE0Ij4i4KS44KSC4KS14KWH4KSo4KS24KWA4KSyIOCksuCklyDgpKHgpYfgpJ/gpL4g4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKvgpL7gpIfgpLLgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkruCljeCkreCkvuCkteCljeCkryDgpLDgpYLgpKrgpK7gpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCksCDgpKjgpL/gpJzgpYAg4KS44KWC4KSa4KSo4KS+4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgSDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLjgpIHgpJcg4KSV4KWHIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIOCkreCkqOCljeCkqOClhyDgpKzgpL7gpLDgpYfgpJXgpYsg4KS44KS+4KSn4KS+4KSw4KSjIOCkuOClguCkmuCkqOCkviDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMDYzNDM4MTQwMjQxNTYwNDQzIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKvgpL7gpIfgpLLgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkruCljeCkreCkvuCkteCljeCkryDgpLDgpYLgpKrgpK7gpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCksCDgpKjgpL/gpJzgpYAg4KS44KWC4KSa4KSo4KS+4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgSDgpKvgpYvgpKjgpLjgpIHgpJcg4KSV4KWHIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIOCkreCkqOCljeCkqOClhyDgpKzgpL7gpLDgpYfgpJXgpYsg4KS44KS+4KSn4KS+4KSw4KSjIOCkuOClguCkmuCkqOCkviDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i4KSq4KSb4KS+4KSh4KS/IOCkrOCknOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWB4KSo4KWIIOCkruCkv+CkoeCkv+Ckr+CkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSy4KWH4KSs4KWN4KSv4KS+4KSVIOCkoeCkv+CkleCli+CkoSDgpJfgpLDgpY3gpKgg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSu4KS/4KSh4KS/4KSv4KS+IOCkoeCkv+CkleCli+CkoeCksCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iMTY3ODM5MTg5Njc4Njg4MjAxNCI+IuCkteCkv+CktuCljeCkteCkuOCkqOClgOCkryDgpKrgpY3gpLDgpK7gpL7gpKPgpLngpLDgpYIg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iNDAxNTY0NDA0NzE5NjkzNzAxNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCBDQSDgpKrgpY3gpLDgpK7gpL7gpKPgpKrgpKTgpY3gpLDgpLngpLDgpYIg4KS14KS/4KS24KWN4KS14KS44KSo4KWA4KSvIOCkquCljeCksOCkruCkvuCko+CkueCksOClguCkleCkviDgpLDgpYLgpKrgpK7gpL4g4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqCDgpLAg4KS54KSf4KS+4KSJ4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RpYWdub3N0aWMiIG1zZ2lkPSI4MDc2NzQzOTUzOTA4MDAwMzQyIj4iZGlhZyDgpJXgpYsg4KS44KWN4KS14KS+4KSu4KS/4KSk4KWN4KS14KSu4KS+IOCksOCkueClh+CkleCliyDgpLjgpILgpLjgpL7gpKfgpKjgpLngpLDgpYLgpK7gpL4g4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNL+CksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RpYWdub3N0aWMiIG1zZ2lkPSI2NjA4Mjk1NjkyMDAyNDUyMjgzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIGRpYWcg4KS44KSu4KWC4KS54KSm4KWN4KS14KS+4KSw4KS+IOCkuOCljeCkteCkvuCkruCkv+CkpOCljeCktSDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpY3gpLDgpYvgpKTgpLngpLDgpYLgpK7gpL4g4KSq4KSi4KWN4KSoIOCksCDgpLLgpYfgpJbgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmzsg4KSJ4KSm4KS+4KS54KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvywgL2RldiAg4KSu4KS+IOCkq+CkvuCkh+CksuCkueCksOClguClpCDgpK/gpLjgpLLgpYcg4KS44KSu4KWN4KSt4KS14KSk4KSDIOCkquCljeCksOCko+CkvuCksuClgCDgpLjgpY3gpKXgpL/gpLDgpKTgpL4g4KSwIOCkuOClgeCksOCkleCljeCkt+CkvuCkruCkviDgpKrgpY3gpLDgpK3gpL7gpLUg4KSq4KS+4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCDgpK/gpYsg4KSV4KWH4KS14KSyIOCkqOCkv+CksOCljeCkruCkvuCkpOCkviDgpLXgpL4g4KS44KSC4KSa4KS+4KSy4KSV4KSm4KWN4KS14KS+4KSw4KS+IOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksC3gpKjgpL/gpLDgpY3gpKbgpL/gpLfgpY3gpJ/gpJXgpYsg4KSy4KS+4KSX4KS/IOCkquCljeCksOCkr+Cli+CklyDgpLngpYHgpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSF4KSC4KS24KS54KSw4KWCIOCkuOCkleCljeCkt+CkriDgpLXgpL4g4KSF4KSV4KWN4KS34KSuIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4ODg3NDM1NzQwOTgyMjM3Mjk0Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpJXgpY3gpLfgpK4g4KSbIOCkteCkviDgpJvgpYjgpKgg4KSt4KSo4KWN4KSo4KWHIOCkleClgeCksOCkvuCkleCliyDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK7gpLngpKTgpY3gpKTgpY3gpLXgpKrgpYLgpLDgpY3gpKMg4KSr4KWL4KSoIOCkuOCkleCljeCkt+CkruCkpOCkviDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CkuOCkgeCkl+CliCDgpLngpYvgpLjgpL/gpK/gpL7gpLDgpYAg4KSF4KSq4KSo4KS+4KSJ4KSo4KWBIOCkquCksOCljeCkmywg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkteCkv+Ckt+CkryDgpLjgpYLgpJrgpYDgpK7gpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkqOCkueClgeCkqOClhywg4KSF4KS44KSC4KSX4KSkLCDgpIXgpLjgpY3gpKXgpL/gpLAg4KSF4KS14KS44KWN4KSl4KS+IOCkreCkj+CkleCliyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KS54KWB4KSo4KWHIOCkuOCkruCljeCkreCkvuCkteCkqOCkviDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4MjcyMzI0ODQ0MTY1MDU2MTUiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkheCkguCktiDgpLjgpJXgpY3gpLfgpK4g4KSbIOCkteCkviDgpJvgpYjgpKgg4KSt4KSo4KWN4KSo4KWH4KSu4KS+IOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkruCkueCkpOCljeCkpOCljeCkteCkquClguCksOCljeCkoyDgpKvgpYvgpKgg4KS44KSV4KWN4KS34KSu4KSk4KS+IOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KS44KSB4KSX4KWIIOCkueCli+CkuOCkv+Ckr+CkvuCksOClgCDgpIXgpKrgpKjgpL7gpIngpKjgpYEg4KSq4KSw4KWN4KSbLCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS14KS/4KS34KSvIOCkuOClguCkmuClgOCkruCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSo4KS54KWB4KSo4KWHLCDgpIXgpLjgpILgpJfgpKQsIOCkheCkuOCljeCkpeCkv+CksCDgpIXgpLXgpLjgpY3gpKXgpL4g4KSt4KSP4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpLngpYHgpKjgpYcg4KS44KSu4KWN4KSt4KS+4KS14KSo4KS+IOCkueClgeCkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQ2MjczMTUzNTEwOTM1MDg3OTUiPiLgpIXgpKjgpYHgpK7gpKTgpL/gpLngpLDgpYIg4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSw4KSm4KWN4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0MDg4NjQyNjU0MDg1ODUwNjYyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkr+CliyDgpLXgpL4g4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSo4KS/4KSw4KWN4KSm4KS/4KS34KWN4KSfIOCkuOCljeCkteClgOCkleClg+CkpOCkv+CkueCksOClgiDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KWN4KSoIOCkteCkviDgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpYsg4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKrgpY3gpLDgpKbgpL7gpKgg4KSo4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KS+IOCkuOClgeCkteCkv+Ckp+CkvuCkueCksOClguCkruCkviDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iODQ2MzE4MTYyODY5NTM5NjM5MSI+IuCkteCkv+CktuClh+CktyDgpLDgpYLgpKrgpK7gpL4g4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iNDk3Mzk4Njc2MjI0MTc4MzcxMiI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpK7gpKjgpKrgpLDgpY3gpKjgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkpOClgCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpLngpLDgpYLgpLLgpL7gpIgg4KSa4KWB4KSq4KSa4KS+4KSqIOCksOClguCkquCkruCkviDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljSwg4KSk4KSq4KS+4KSI4KSB4KSs4KS+4KSfIOCkqOCkv+CknOClgCDgpKHgpYfgpJ/gpL4g4KS44KSC4KSV4KSy4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSt4KSH4KSw4KS54KWH4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpY3gpKrgpYHgpKsg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9IjIyMjYxOTUyOTA5NTUyMjQ3MzAiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNldHRpbmdzIiBtc2dpZD0iNzc3NTcyMzQ0MTU1ODkwNzE4MSI+IuCkquCljeCksOCko+CkvuCksuClgOCkleCkviDgpLjgpYfgpJ/gpL/gpJkg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KS44KS+4KSv4KSmIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpJXgpYsg4KSV4KSo4KWN4KSr4KS/4KSX4KSw4KWH4KS44KSo4KSy4KS+4KSIIOCkleCljeCkt+CkpOCkvyDgpKrgpYHgpLDgpY3igI3gpK/gpL7gpIngpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iMjA0Njc2MjUxODc2NzE4Mjg4Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KWLIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpYfgpJ/gpL/gpJkg4KSh4KWH4KSf4KS+IOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIyMTQ5NDI2NjY0MjI2MTUyMTg1Ij4iR29vZ2xlIOCkuOClh+CkteCkviDgpKjgpJXgpY3gpLjgpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMTI4NzMwOTQzNzYzODM4MDIyOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCBHb29nbGUg4KS44KWH4KS14KS+IOCkqOCkleCljeCkuOCkvuCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkpuCljeCkteCkvuCksOCkvuCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4i4KS44KWN4KSf4KS+4KSw4KWN4KSf4KSF4KSq4KSu4KS+IOCkmuCksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4i4KSG4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCljeCksOCko+CkvuCksuClgCDgpKzgpYHgpJ8g4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkquClguCksOCljeCkoyDgpLngpYHgpKjgpYcg4KSs4KS/4KSk4KS/4KSV4KWIIOCkhuCkq+CliOCksuCkvuCkiCDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KSu4KS+IOCkouCkv+CksuCkviDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSbIOCksCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSu4KSX4KWN4KSw4KSu4KS+IOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLjgpKfgpYjgpIEg4KSa4KS+4KSy4KWBIOCkl+CksOClh+CksCDgpKLgpL/gpLLgpL4g4KSs4KSo4KS+4KSJ4KSB4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkrOClgeCknyDgpJfgpLDgpYAg4KS44KSV4KWH4KSq4KSb4KS/IOCknOCkpOCkvyDgpLjgpJXgpY3gpKbgpYsg4KSa4KS+4KSB4KSh4KWLIOCkhuCkq+CliOCkguCkruCkviDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkq+Cli+CkqCDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KSu4KS+IOCkouCkv+CksuCkviDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSbIOCksCDgpIXgpKjgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSu4KSX4KWN4KSw4KSu4KS+IOCkq+Cli+CkqCDgpLjgpKfgpYjgpIEg4KSa4KS+4KSy4KWBIOCkl+CksOClh+CksCDgpKLgpL/gpLLgpL4g4KSs4KSo4KS+4KSJ4KSB4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTdGlja3kiIG1zZ2lkPSI3OTE5MTI2MzcyNjA2ODgxNjE0Ij4i4KS44KWN4KSf4KS/4KSV4KS/IOCkquCljeCksOCkuOCkvuCksOCkoyDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc3NDk3NjA0OTQzOTk5MTU2NTEiPiLgpJTgpKrgpJrgpL7gpLDgpL/gpJUg4KSq4KWN4KSw4KS44KS+4KSw4KSj4KSy4KS+4KSIIOCkquCkoOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSP4KSJ4KSf4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJzgpYHgpKgg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkruCkvuCkquCljeCkpCDgpK3gpI/gpKrgpJvgpL8g4KSs4KS+4KSB4KSV4KWAIOCksOCkueCkqOCljeCkm+ClpCDgpIXgpKTgpY3gpK/gpL7gpKfgpL/gpJUg4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkp+Clh+CksOCliCDgpK7gpYfgpK7gpYvgpLDgpYAg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CkleCliyDgpJXgpL7gpLDgpKPgpLLgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkouCkv+CksuCliyDgpLAg4KSF4KS44KWN4KSl4KS/4KSwIOCkrOCkqOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i4KSU4KSq4KSa4KS+4KSw4KS/4KSVIOCkquCljeCksOCkuOCkvuCksOCko+CksuCkvuCkiCDgpKrgpKDgpL7gpIngpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CklSDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSc4KWB4KSoIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpK7gpL7gpKrgpY3gpKQg4KSt4KSP4KSq4KSb4KS/IOCkrOCkvuCkgeCkleClgCDgpLDgpLngpKjgpY3gpJvgpaQg4KSF4KSk4KWN4KSv4KS+4KSn4KS/4KSVIOCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpKfgpYfgpLDgpYgg4KSu4KWH4KSu4KWL4KSw4KWAIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpJXgpYsg4KSV4KS+4KSw4KSj4KSy4KWHIOCkq+Cli+CkqOCksuCkvuCkiCDgpKLgpL/gpLLgpYsg4KSwIOCkheCkuOCljeCkpeCkv+CksCDgpKzgpKjgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ29udGFjdHMiIG1zZ2lkPSI4MzQ4NDgxMTMxODk5ODg2MTMxIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSo4KS/4KSw4KWN4KSm4KS/4KS34KWN4KSfIOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpOCkuOCkgeCklyDgpIXgpKjgpY3gpK8g4KSk4KSw4KS/4KSV4KS+4KS54KSw4KWC4KSs4KS+4KSfIOCkleCksiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KS+LCDgpIfgpK7gpYfgpLIg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCkviDgpLXgpL4g4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqOClgeCkreCkj+CkleCkviDgpIbgpLXgpYPgpKTgpL/gpLjgpLngpL/gpKTgpJXgpYsg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSX4KSw4KS/4KSP4KSV4KS+IOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClguCkleCliyDgpKHgpYfgpJ/gpL4g4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpKzgpJrgpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCksCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSs4KS/4KSo4KS+IOCkuOCkruCljeCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDQwNjU0MTUyNDU3MzAwNjYyIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkteCkv+CktuClh+CktyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpLngpLDgpYLgpLjgpIHgpJcg4KSF4KSw4KWN4KSV4KWLIOCkpOCksOCkv+CkleCkvuCkrOCkvuCknyDgpJXgpLIg4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KS+LCDgpIfgpK7gpYfgpLIg4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KS+IOCkteCkviDgpLjgpILgpJrgpL7gpLAg4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KS+IOCkhuCkteClg+CkpOCkv+CkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSo4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4g4KSh4KWH4KSf4KS+4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkrOCkmuCkpCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCksCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSc4KWN4KSe4KS+4KSoIOCkrOCkv+CkqOCkviDgpKjgpYgg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpLjgpL7gpK/gpKYg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDb250YWN0cyIgbXNnaWQ9IjUxMDc0OTIwODY0MTY3OTM1NDQiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWCIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiLgpIXgpKjgpY3gpK8g4KSk4KSw4KS/4KSV4KS+4KSV4KS+IOCkhuCkteClg+CkpOCkv+CkueCksOClguCkuOCkgeCklyDgpJzgpYHgpKgg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkleCksiwg4KSH4KSu4KWH4KSyLCDgpLXgpL4g4KS14KS/4KS24KWH4KS3IOCkuOCkruCljeCkquCksOCljeCklSDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpL7gpLjgpLngpL/gpKQg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+IOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpJXgpYsg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuCDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkvuCksuCkvuCkiCDgpK7gpYfgpJ/gpL7gpIngpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTg5ODY5MjI0NjI1MTYzNTU4Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkrOCkvuCksOCkruCljeCkrOCkvuCksCDgpJXgpLIg4KSX4KSw4KWH4KSV4KS+LCDgpIfgpK7gpYfgpLIg4KSX4KSw4KWH4KSV4KS+LCDgpLXgpL4g4KS14KS/4KS24KWH4KS3IOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClguCkuOCkgeCklyDgpLjgpJ7gpY3gpJrgpL7gpLAg4KSX4KSw4KWH4KSV4KS+IOCkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSo4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpJfgpLDgpYfgpJXgpL4g4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkruCljeCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KS+4KSJ4KSoIOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGxMb2ciIG1zZ2lkPSIzNDc4MTMzMTg0NjI0MTAyNzM5Ij4i4KSV4KSyIOCksuCklyDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzcwMDY0NTE4NDg3MDc2MDI4NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSV4KWLIOCkleCksiDgpLLgpJcsIOCkhuCkl+CkruCkqCDgpLAg4KSs4KS54KS/4KSw4KWN4KSX4KSu4KSoIOCkleCksuCkueCksOClgiDgpKzgpL7gpLDgpYcg4KSh4KWH4KSf4KS+IOCkuOCkueCkv+CkpOCkleCliyDgpJXgpLIg4KSy4KSXIOCkquCkouCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuCDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJXgpLIg4KSy4KSXIOCkoeClh+Ckn+CkvuCkueCksOClguCkleCliyDgpKzgpJrgpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCksCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSs4KS/4KSo4KS+IOCkqOCliCDgpK/gpYsg4KSV4KSyIOCksuCklyDgpKHgpYfgpJ/gpL7gpLLgpL7gpIgg4KSF4KSw4KWC4KS44KSB4KSXIOCkuOCkvuCkneClh+CkpuCkvuCksCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4i4KSt4KS/4KSk4KWN4KSwIOCkhuCkieCkqOClhyDgpLAg4KSs4KS+4KS54KS/4KSwIOCknOCkvuCkqOClhyDgpJXgpLLgpLngpLDgpYLgpLjgpLngpL/gpKQg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+CkqOCkleCliyDgpJXgpLIg4KSy4KSXIOCkquCkouCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCAg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkleCksiDgpLLgpJcg4KSh4KWH4KSf4KS+IOCkrOCkmuCkpCDgpJfgpLDgpY3gpKgg4KSm4KS/4KSo4KWN4KSbIOCksCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpKXgpL7gpLngpYgg4KSo4KSq4KS+4KSIIOCkleCksiDgpLLgpJcg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4i4KSV4KSyIOCksuCklyDgpLLgpYfgpJbgpY3igI3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NjE4MDYwNjIyNzQxMTkyNDUiPiLgpIbgpJfgpK7gpKgg4KSk4KSl4KS+IOCkrOCkueCksOCljeCkl+CkruCkqCDgpKHgpYfgpJ/gpL7gpLjgpLngpL/gpKQg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkleCliyDgpJXgpLIg4KSy4KSX4KSV4KWLIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpLjgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCksiDgpLLgpJcg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpLXgpL4g4KSu4KWH4KSf4KS+4KSJ4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpKvgpYvgpKjgpJXgpYsg4KSG4KSJ4KSo4KWHIOCksCDgpKzgpL7gpLngpL/gpLAg4KSc4KS+4KSo4KWHIOCkleCksuCkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpJXgpYsg4KSh4KWH4KSf4KS+IOCkuOCkueCkv+CkpCDgpJXgpLIg4KSy4KSXIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CkuOCksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSV4KSyIOCksuCklyDgpK7gpYfgpJ/gpL7gpIngpKgg4KS14KS+IOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkleCkvuCksOCljeCkoSDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NjI0NzUxNTE4NDk4ODg4NDgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkieCkquCkleCksOCko+CkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSX4KSw4KS/4KSP4KSV4KS+IOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCkouCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJzgpLjgpY3gpKTgpYgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkqOCkvuCkriDgpLAg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCknOCkvuCkqOCkleCkvuCksOClgOClpCDgpK/gpLjgpJXgpYsg4KSu4KSk4KSy4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpKTgpKrgpL7gpIjgpILgpLLgpL7gpIgg4KSq4KS54KS/4KSa4KS+4KSoIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJsg4KSwIOCkpOCkquCkvuCkiOCkguCkleCliyDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkheCksOClguCksuCkvuCkiCDgpKrgpKDgpL7gpIngpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSG4KSr4KWN4KSo4KWIIOCkuOCkruCljeCkquCksOCljeCklSDgpJXgpL7gpLDgpY3gpKEg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkreCko+CljeCkoeCkvuCksCDgpK3gpI/gpJXgpYsg4KS14KWN4KSv4KS+4KSV4KWN4KSk4KS/4KSX4KSkIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAsIOCknOCkuOCljeCkpOCliCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSo4KS+4KSuIOCkteCkviDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWA4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KS14KS+IOCkpeCkquCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSV4KWLIOCkruCkpOCksuCkrCDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpJrgpL/gpKjgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWNIOCksCDgpLjgpL7gpK/gpKYg4KSF4KSo4KWN4KSv4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCkoOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMjY4OTIwOTU2MTUyNDE5MTcwIj4i4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkuOCkvuCkruCkvuCknOCkv+CklSDgpLjgpY3gpJ/gpY3gpLDgpL/gpK4g4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQyNTU3MDYwMjcxNzIwNTA4NzIiPiLgpKTgpKrgpL7gpIjgpIEg4KSwIOCkpOCkquCkvuCkiOCkgeCkleCkviDgpLjgpL7gpKXgpYDgpLngpLDgpYLgpKzgpL7gpJ8g4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkheCkquCkoeClh+Ckn+CksuCkvuCkiCDgpKrgpLngpYHgpIHgpJog4KSwIOCkuOCkv+CkguCklSDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSm4KS+IOCkuOCkvuCkteCkp+CkvuCkqCDgpLDgpLngpKjgpYHgpLngpYvgpLjgpY0gIC0tIOCkuOCkruCkvuCknOCkv+CklSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYLgpK7gpL4g4KSk4KSq4KS+4KSI4KSBIOCksCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KS+4KSl4KWA4KSV4KWLICDgpKzgpL/gpJrgpK7gpL4g4KSt4KSP4KSV4KS+IOCkuOCkguCkmuCkvuCksOCksuCkvuCkiCDgpKrgpKLgpY3gpKgg4KS14KS/4KS24KWN4KS14KS+4KS44KSo4KWA4KSv4KSk4KS+IOCkrOClh+Ckl+CksOCliCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSo4KWL4KSfOiDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/IOCkrOCksuCkquClguCksOCljeCkteCklSDgpLjgpKzgpYgg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkqOClh+Ckn+CkteCksOCljeCkleCkueCksOClguCkruCkviDgpLjgpL7gpK/gpKYg4KSo4KSX4KSw4KWN4KSoIOCkuOCkleCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTA0MTc5MjIyNDkzMjM1NjQ1Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCkvuCkruCkvuCknOCkv+CklSDgpKrgpY3gpLDgpLXgpL7gpLngpK7gpL4g4KSy4KWH4KSW4KWN4oCN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpLjgpL7gpKXgpYDgpLngpLDgpYLgpKzgpL7gpJ8g4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkheCkquCkoeClh+Ckn+CkueCksOClgiDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKjgpYcg4KSs4KWH4KSy4KS+4KSu4KS+IOCkueCli+CktuCkv+Ckr+CkvuCksCDgpLDgpLngpKjgpYHgpLngpYvgpLjgpY0gLS0g4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSo4KS/4KSw4KWN4KSu4KS+4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbIOCknOClgeCkqCDgpLjgpL7gpKXgpYDgpKzgpL7gpJ8g4KSG4KSP4KSV4KWLIOCkpuClh+CkluCkv+CkqOCljeCkm+ClpCDgpJ/gpL/gpKrgpY3gpKrgpKPgpYA6IOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL8g4KS44KSs4KWIIOCkuOCkvuCkruCkvuCknOCkv+CklSDgpLjgpJ7gpY3gpJzgpL7gpLLgpLngpLDgpYLgpK7gpL4g4KSy4KS+4KSX4KWCIOCkqOCkueClgeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxlbmRhciIgbXNnaWQ9IjU5NzI3Mjc1NjAyNTc2MTIzOTgiPiLgpJfgpYvgpKrgpY3gpK8g4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCksCDgpKrgpL7gpKTgpY3gpLDgpYsg4KSY4KSf4KSo4KS+4KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpJfgpLDgpL/gpI/gpJXgpL4g4KSk4KWAIOCkuOCkvuCkpeClgOCkueCksOClgiDgpLXgpL4g4KS44KS54KSv4KWL4KSX4KWA4KS54KSw4KWCIOCkuOCkueCkv+CkpOCkleCliyDgpKrgpL7gpKTgpY3gpLDgpL7gpJXgpL4g4KSV4KS+4KSw4KWN4KSv4KSV4KWN4KSw4KSu4KS54KSw4KWCIOCkquCkouCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpJfgpYvgpKrgpKjgpYDgpK/gpKTgpL4g4KS14KS+IOCkuOCkguCkteClh+CkpuCkqOCktuClgOCksuCkpOCkviDgpKzgpL/gpKjgpL4g4KSq4KSo4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSq4KS+4KSk4KWN4KSw4KS+4KSV4KS+IOCkoeClh+Ckn+CkviDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSoIOCkteCkviDgpKzgpJrgpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NDM0NTQ4NjgyNDcwODUxNTgzIj4i4KSk4KWAIOCkuOCkvuCkpeClgOCkueCksOClgiDgpLXgpL4g4KS44KS54KSV4KSw4KWN4KSu4KWA4KS54KSw4KWC4KS44KS54KS/4KSkIOCkuOCkrOCliCDgpKrgpL7gpKTgpY3gpLDgpYsg4KSY4KSf4KSo4KS+4KS54KSw4KWCIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkreCkj+CkleCkvuCksuCkvuCkiCDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKrgpL7gpKTgpY3gpLDgpYsg4KSh4KWH4KSf4KS+IOCkr+CkuOCksuClhyDgpLjgpL7gpK/gpKYg4KS44KWH4KSv4KSwIOCkl+CksOCljeCkqCDgpLXgpL4g4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS14KS/4KS24KWN4KS14KS+4KS44KSo4KS/4KSv4KSk4KS+IOCkteCkviDgpLjgpK7gpY3gpLXgpYfgpKbgpKjgpLbgpYDgpLLgpKTgpL4g4KSs4KS/4KSo4KS+IOCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDYWxlbmRhciIgbXNnaWQ9Ijg0Mzg4NzQ3NTUxOTM4MjU2NDciPiLgpKrgpL7gpKTgpY3gpLDgpYsg4KSY4KSf4KSo4KS+4KS54KSw4KWCIOCkpeCkquCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSu4KS+4KSy4KS/4KSV4KSV4KWLIOCknOCljeCknuCkvuCkqCDgpKzgpL/gpKjgpL4g4KSo4KWIIOCkquCkvuCkueClgeCkqOCkvuCkueCksOClguCksuCkvuCkiCDgpIfgpK7gpYfgpLIg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+IuCkpOClgCDgpLjgpL7gpKXgpYDgpLngpLDgpYIg4KS14KS+IOCkuOCkueCkleCksOCljeCkruClgOCkueCksOClguCkuOCkueCkv+CkpOCkleCkviDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSc4KS44KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpIbgpKvgpY3gpKjgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCknOClgeCkqCDgpKrgpL7gpKTgpY3gpLDgpL7gpJXgpYsg4KSu4KS+4KSy4KS/4KSV4KS54KSw4KWC4KSs4KS+4KSfIOCkhuCkj+CkleCkviDgpKbgpYfgpJbgpL/gpKjgpYfgpLLgpL7gpIgg4KSq4KSg4KS+4KSJ4KSo4KWHIOCkteCkviDgpK7gpL7gpLLgpL/gpJXgpLngpLDgpYLgpJXgpYsg4KSc4KWN4KSe4KS+4KSoIOCkrOClh+Ckl+CksCDgpJjgpJ/gpKjgpL7gpLLgpL7gpIgg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClhyDgpIXgpKjgpYHgpK7gpL/gpKQg4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIzMjQ0Njk0OTYzMjcyNDkzNzYiPiLgpKTgpYAg4KS44KS+4KSl4KWA4KS54KSw4KWCIOCkteCkviDgpLjgpLngpJXgpLDgpY3gpK7gpYDgpLngpLDgpYLgpLjgpLngpL/gpKQg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+Cli+CkqOCkleCkviDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSc4KS44KSy4KS+4KSIIOCkpeCkquCljeCkqCwg4KS54KSf4KS+4KSJ4KSoIOCksCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoICDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKrgpL7gpKTgpY3gpLDgpYsg4KSu4KS+4KSy4KS/4KSV4KSs4KS+4KSfIOCkpuClh+CkluCkviDgpKrgpLDgpYfgpJXgpL4g4KS14KS+IOCkruCkvuCksuCkv+CkleCkleCliyDgpJzgpY3gpJ7gpL7gpKgg4KSs4KS/4KSo4KS+IOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpK3gpI/gpJXgpL4g4KSY4KSf4KSo4KS+4KS54KSw4KWCIOCkuOCkqOCljeCkpuClh+CktiDgpKrgpKDgpL7gpIngpKgg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iODY4ODMzNDk3NDAzNjgyMzMzMCI+IuCkquCksOClgOCkleCljeCkt+Cko+CkleCliyDgpLLgpL7gpJfgpL8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCkueCksOClgiDgpK7gpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuCkquCksOClgOCkleCljeCkt+Cko+CkleCliyDgpLLgpL7gpJfgpL8g4KSu4KSVIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpLngpLDgpYIg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSo4KSv4KS+4KSBIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJUg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkqOCkruCkviDgpJPgpK3gpLDgpLDgpL7gpIfgpKEg4KSX4KSw4KWN4KSm4KSbIOCksC/gpLXgpL4g4KS44KWN4KSl4KS/4KSk4KS/IOCkheCkqOCljeCkryDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCknOCkuOCljeCkpOCliCBHUFMg4KS14KS+IOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJXgpKzgpL7gpJ8g4KSr4KSw4KWN4KSV4KS+4KSH4KSP4KSV4KS+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSIyODM2MzA4MDc2NzIwNTUzODM3Ij4i4KSF4KSn4KS/4KSVIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJUg4KSG4KSm4KWH4KS24KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSI1OTQ1MTY2NjQyMzM1ODAwNzYzIj4i4KSl4KSqIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJUg4KSV4KSu4KS+4KSj4KWN4KSh4KS54KSw4KWCIOCkuOCkruCljeCkriDgpKrgpLngpYHgpIHgpJog4KSq4KWB4KSw4KWN4oCN4KSv4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KS+4KSv4KSmIOCknOClgOCkquClgOCkj+CkuOCkleCliyDgpLXgpL4g4KSF4KSo4KWN4KSvIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLXgpL7gpLngpLDgpYLgpJXgpYsg4KSV4KS+4KSw4KWN4KSvIOCkuOCkgeCklyDgpLngpLjgpY3gpKTgpJXgpY3gpLfgpYfgpKog4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpLjgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI2NTc4MTAxMTk5ODI1MTkzODczIj4i4KSP4KSJ4KSf4KS+IOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpKTgpL4g4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjkwNjYxNDYxMjA0NzA1OTE1MDkiPiLgpKrgpLDgpYDgpJXgpY3gpLfgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkruCklSDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkqOCkr+CkvuCkgSDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSv4KSVIOCkuOCljeCkpeCkvuCkquCkqOCkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpY3gpKXgpL7gpKjgpK7gpL4g4KST4KSt4KSw4KSw4KS+4KSH4KShIOCkl+CksOCljeCkpuCkmyDgpLAv4KS14KS+IOCkuOCljeCkpeCkv+CkpOCkvyDgpIXgpKjgpY3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCkueCksOClgiDgpJzgpLjgpY3gpKTgpYggR1BTIOCkteCkviDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSv4KSV4KSs4KS+4KSfIOCkq+CksOCljeCkleCkvuCkh+Ckj+CkleCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iMTE5MTg5ODA2MTk2NTI3MzM3MiI+IuCkuOCkn+Ckv+CklSDgpLjgpY3gpKXgpL7gpKggKEdQUyDgpLAg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkhuCkp+CkvuCksOCkv+CkpCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkteCkv+CktuCljeCkteCkteCljeCkr+CkvuCkquClgCDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIChHUFMpIOCkteCkviDgpLjgpYfgpLIg4KSf4KS+4KS14KSw4KS54KSw4KWCIOCksCDgpLXgpL7gpIct4KSr4KS+4KSHIOCknOCkuOCljeCkpOCkviDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpLngpYAg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpYAg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkueCksOClgiDgpJbgpYvgpLLgpY3gpKjgpYEg4KSq4KSw4KWN4KSbIOCksCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpL4g4KSy4KS+4KSX4KS/IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkieCkquCkleCksOCko+CkruCkviDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWB4KSo4KWBIOCkquCksOCljeCkm+ClpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSBIOCkleCkueCkvuCkgSDgpLngpYHgpKjgpYEg4KS54KWB4KSo4KWN4KSbIOCkreCkqOCljeCkqOClhyDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpKMg4KSX4KSw4KWN4KSoIOCkr+CkuOCksuCkvuCkiCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkmyDgpLAg4KSv4KS44KSy4KWHIOCkheCkpOCkv+CksOCkv+CkleCljeCkpCDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSJ4KSw4KWN4KSc4KS+IOCkluCkpOCkqiDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjQ4ODc4OTUzNjIzNTQyMzk2MjgiPiLgpIXgpKjgpYHgpK7gpL7gpKjgpL/gpKQg4KS44KWN4KSl4KS+4KSoICjgpKjgpYfgpJ/gpLXgpLDgpY3gpJUt4KSG4KSn4KS+4KSw4KS/4KSkKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSF4KSo4KWB4KSu4KS+4KSo4KS/4KSkIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLIg4KSf4KS+4KS14KSwIOCksCDgpLXgpL7gpIct4KSr4KS+4KSH4KSc4KS44KWN4KSk4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCli+CklyDgpJfgpLDgpYAg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkueCksOClguCkrOCkvuCknyDgpIngpKTgpY3gpKrgpKjgpY3gpKgg4KSX4KSw4KS/4KSP4KSV4KWLIOCkueCli+ClpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSv4KWAIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLXgpL7gpLngpLDgpYLgpJXgpYsg4KSJ4KSq4KSv4KWL4KSXIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSv4KWAIOCkuOClh+CkteCkvuCkueCksOClgiDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkmuCkvuCksuClgSDgpLAg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkueClgeCkqOClgSDgpIbgpLXgpLbgpY3gpK/gpJUg4KSb4KWkIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIXgpKjgpYHgpK7gpL7gpKjgpL/gpKQg4KSw4KWC4KSq4KSu4KS+IOCkpOCkquCkvuCkiOCkgSDgpJXgpLngpL7gpIEg4KS54KWB4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkreCkqOCljeCkqOClhyDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpKMg4KSX4KSw4KWN4KSoIOCkr+CkuOCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4iU3VyZmFjZUZsaW5nZXIg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlN1cmZhY2VGbGluZ2VyIOCkleCkri3gpLjgpY3gpKTgpLAg4KS44KWB4KS14KS/4KSn4KS+4KS54KSw4KWCIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLgpKvgpY3gpLDgpYfgpK4g4KSs4KSr4KSwIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSr4KWN4KSw4KWH4KSuIOCkrOCkq+CksOCkleCliyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXIg4KSV4KWLIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iSW5wdXRGbGluZ2VyIOCkleCliyDgpJXgpK4t4KS44KWN4KSk4KSwIOCkuOClgeCkteCkv+Ckp+CkvuCkueCksOClgiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSo4KS54KSw4KWC4KSy4KS+4KSIIOCkteCkv+CkqOCljeCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KSo4KWN4KSr4KS/4KSX4KSwIOCkl+CksOCljeCkqCDgpLAg4KS14KS+4KSH4KSr4KS+4KSHIOCkquCljeCksOCkpuCksOCljeCktuCkqOCkueCksOClguCkuOCkgeCklyDgpJzgpYvgpKHgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i4KS14KS+4KSH4KSr4KS+4KSHIOCkquCljeCksOCkpuCksOCljeCktuCkqOCkueCksOClgiDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKjgpYDgpJXgpL4g4KSk4KSy4KWN4KSy4KWLIOCkpOCkuSDgpLXgpL/gpLfgpYfgpLbgpKTgpL7gpLngpLDgpYIg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjg1NzEzNDQ5ODQwMjM0NjcwOCI+IuCkheCkoeCkv+Ckr+CliyDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWI4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYjgpKYg4KSX4KSw4KWN4KSoIOCksCDgpLDgpL/gpKHgpL7gpIfgpLDgpYfgpJXgpY3gpJ8g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjIyNDY4Mjg3NzM1ODkwOTQwMjMiPiLgpK3gpL/gpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliOCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIzNTk0ODE2NTgwMzQxNDk4NjAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSt4KS/4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYjgpKYg4KSX4KSw4KWN4KSoIOCksCDgpLDgpL/gpKHgpL7gpIfgpLDgpYfgpJXgpY3gpJ8g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9Ijc4MTUzOTg5NjkzMDMzODIwMTYiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KS/4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYjgpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjc3OTc5MzA2NDcwOTM1MDI4OSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KS/4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYjgpKYg4KSX4KSw4KWN4KSoIOCksCDgpLDgpL/gpKHgpL7gpIfgpLDgpYfgpJXgpY3gpJ8g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkheCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkl+CljeCksuCli+CkrOCksiDgpIXgpKHgpL/gpK/gpYsg4KS44KWH4KSf4KS/4KSZ4KWN4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSc4KS44KWN4KSk4KWIIOCkhuCkteCkvuCknOCkleCliyDgpK7gpL7gpKTgpY3gpLDgpL4g4KSwIOCkhuCkieCkn+CkquClgeCkn+CkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWB4KSoIOCkuOCljeCkquCkv+CkleCksCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWH4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLgpIXgpKHgpL/gpK/gpYsg4KSw4KWH4KSV4KSw4KWN4KShIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK7gpL7gpIfgpJXgpY3gpLDgpYvgpKvgpYvgpKjgpJXgpYsg4KS44KS+4KSlIOCkheCkoeCkv+Ckr+CliyDgpLDgpYfgpJXgpLDgpY3gpKEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSq4KWB4KS34KWN4KSf4KS/4KSV4KSw4KSjIOCkrOCkv+CkqOCkviDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkuOCkruCkr+CkruCkviDgpIXgpKHgpL/gpK/gpYsg4KSw4KWH4KSV4KSw4KWN4KShIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i4KSk4KS44KWN4KSs4KS/4KSw4KS54KSw4KWCIOCksCDgpK3gpL/gpKHgpL/gpK/gpYvgpLngpLDgpYIg4KSy4KS/4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL7gpLjgpIHgpJcg4KSk4KS44KWN4KSs4KS/4KSwIOCksCDgpK3gpL/gpKHgpL/gpK/gpYvgpLngpLDgpYIg4KSy4KS/4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkquClgeCkt+CljeCkn+Ckv+CkleCksOCkoyDgpKzgpL/gpKjgpL4g4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpK7gpK/gpK7gpL4g4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KWN4KS14KWA4KSV4KWD4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IuCkleCljeCkr+CkvuCkruClh+CksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KS54KWB4KSB4KSm4KS+IOCkuOClguCkmuCklSBMRUQg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkheCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4i4KSq4KWC4KSw4KWN4KS1LeCkuOCljeCkpeCkvuCkquCkv+CkpCDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCljeCkr+CkvuCkruClh+CksOCkviDgpIngpKrgpK/gpYvgpJcg4KS44KWC4KSa4KSVIExFRCDgpIXgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyOTYxMjkyMjA1NzY0NDg4MzA0Ij4i4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4i4KSr4KWL4KSo4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqOCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4i4KSq4KWB4KSw4KWIIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkqOCkv+CkleCliCDgpJbgpKTgpLDgpKjgpL7gpJUg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzg4OTAzMjk3NjI3MjgzMDk5Ij4i4KS44KSu4KWN4KSq4KWC4KSw4KWN4KSjIOCkq+Cli+CkqOCksuCkvuCkiCDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkp+Clh+CksOCliCDgpJbgpKTgpLDgpKjgpL7gpJUg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM0MzY2MzQ5NzI1NjE3OTUwMDIiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSq4KWB4KSo4KSD4KSs4KWB4KSfIOCkl+CksOCljeCkqCDgpJzgpYvgpKEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODk4NTYwODcyNDYyNjM4MjQyIj4i4KSr4KWL4KSoIOCkquClgeCkqOCkg+CkrOClgeCknyDgpJfgpLDgpY3gpKjgpYEg4KSc4KWL4KShIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSq4KWB4KSo4KSD4KSs4KWB4KSfIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MzI2MDA4MTI0Mjg5OTg5OTY5Ij4i4KSr4KWL4KSo4KSy4KS+4KSIIOCkrOCksuCkquClgeCksOCljeCkteCklSDgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyOTI3MzYxNTM3OTQyNTkxODQxIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKvgpL7gpIfgpLIg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDAyMzA1MDQ5ODkwOTUzODEwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkq+CkvuCkh+CksiDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIG1zZ2lkPSIxODI5MjkwNzAxNjU4OTkyMzQ3Ij4i4KS54KSf4KS+4KSJ4KSoIOCkruCkv+CksuCljeCkqOClhyDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkq+CkvuCkh+CksiDgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpLngpLDgpYIg4KSu4KS+4KSJ4KSo4KWN4KSfIOCksCDgpIXgpKjgpK7gpL7gpIngpKjgpY3gpJ8g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSu4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iODc4NDI2ODI0Njc3OTE5ODYyNyI+IuCkueCkn+CkvuCkieCkqCDgpK7gpL/gpLLgpY3gpKjgpYcg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkq+CksOCljeCkruCljeCkr+CkvuCknyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2FjY2VzcyIgbXNnaWQ9IjM0MTEzMzg2MzIwMDIxOTM4NDYiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSV4KWLIOCkuOClguCkmuCkqOCkviDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzMDk0NTYzODQ0NTkzODc4NTQ4Ij4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCko+CkruCkviDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19jcmVhdGUiIG1zZ2lkPSI2NDE0NzU3MjM0Nzg5MzM2MzI3Ij4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19jcmVhdGUiIG1zZ2lkPSI0NTU4ODY5MjczNTg1ODU2ODc2Ij4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19kZXN0cm95IiBtc2dpZD0iNTI2OTI4MzI4MzAxNjE4MDIyIj4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKfgpY3gpLXgpLjgpY3gpKQg4KSq4KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19kZXN0cm95IiBtc2dpZD0iNzIxODc0OTI4NjE0NTUyNjUzNyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkp+CljeCkteCkuOCljeCkpCDgpKrgpL7gpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iODg3Nzk5ODEwMTk0NDk5OTM4NiI+IuCkhuCkqOCljeCkpOCksOCkv+CklSDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpLLgpL7gpIgg4KSu4KS+4KSJ4KSo4KWN4KSfL+CkheCkqOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSIzNDUxMzYwMTE0OTAyNDkwOTI5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSu4KS+4KSJ4KSo4KWN4KSfL+CkheCkqOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19yZW5hbWUiIG1zZ2lkPSI3NDk2NjMzOTU0MDgwNDcyNDE3Ij4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpKrgpYHgpKg64KSo4KS+4KSu4KS+4KSV4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+IuCkhuCkqOCljeCkpOCksOClgOCklSDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSq4KWB4KSo4KSo4KS+4KSu4KS+4KSV4KSw4KSjIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i4KSV4KSu4KWN4KSq4KSoIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK3gpL7gpIfgpKzgpY3gpLDgpYfgpJ/gpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuCkq+CljeCksuCljeCkr+CkvuCkuOCksuCkvuCkiOCknyDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLgpKvgpY3gpLLgpY3gpK/gpL7gpLgg4KSq4KWN4KSw4KSV4KS+4KS24KSy4KS+4KSIIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVVzYiIgbXNnaWQ9IjExMTM0NTM0MzA2NDU0MDI3MjMiPiJVU0Ig4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpKrgpY3gpLDgpL7gpKXgpK7gpL/gpJXgpKTgpL7gpLngpLDgpYIg4KSwIOCkheCkqOClgeCkruCkpOCkv+CkueCksOClgiDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNiIiBtc2dpZD0iNzc3NjE1NTQzMDIxODIzOTgzMyI+IlVTQiDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkquCljeCksOCkvuCkpeCkruCkv+CkleCkpOCkvuCkueCksOClgiDgpLAg4KSF4KSo4KWB4KSu4KSk4KS/4KS54KSw4KWC4KSy4KS+4KSIIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4iTVRQIOCkquCljeCksOCli+Ckn+Cli+CkleCksiDgpJXgpL7gpLDgpY3gpK/gpL7gpKjgpY3gpLXgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTXRwIiBtc2dpZD0iNjUzMjk2MTIwMDQ4Njc5MTU3MCI+Ik1UUCBVU0Ig4KSq4KWN4KSw4KWL4KSf4KWL4KSV4KSyIOCkleCkvuCksOCljeCkr+CkvuCkqOCljeCkteCkr+CkqCDgpJfgpLDgpY3gpKgg4KSV4KWH4KSw4KWN4KSo4KSyIE1UUCDgpKHgpY3gpLDgpL7gpIfgpK3gpLDgpJXgpYsg4KSq4KS54KWB4KSB4KSa4KSV4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI0MTQ4MjkwODYwNDAwNjU5MTQ2Ij4i4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwIOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNjU5Nzk2NDE5MTIwODAxNjYwNSI+IuCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksCDgpKrgpLDgpYDgpJXgpY3gpLfgpKPgpJXgpYsg4KSJ4KSm4KWN4KSm4KWH4KS24KWN4KSv4KSV4KS+IOCksuCkvuCkl+CkvyDgpLXgpL/gpK3gpL/gpKjgpY3gpKgg4KSq4KSw4KS/4KSn4KWA4KSv4KS54KSw4KWC4KSy4KS+4KSIIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLgpKvgpYvgpKgg4KSo4KSu4KWN4KSs4KSw4KS54KSw4KWC4KSu4KS+IOCkuOCkv+Ckp+CliCDgpJXgpLIg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpLngpLjgpY3gpKTgpJXgpY3gpLfgpYfgpKog4KSs4KWH4KSX4KSw4KWIIOCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLAg4KSV4KSyIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KSq4KWH4KSV4KWN4KS34KS/4KSkIOCktuClgeCksuCljeCklSDgpLXgpL4g4KSV4KSy4KS54KSw4KWCIOCkl+CksOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSo4KSu4KWN4KSs4KSw4KS54KSw4KWCIOCkleCksiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkgeCkpuCliOCkqCDgpLXgpL/gpJrgpL7gpLAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCljeCkteClgOCkleCkvuCksCDgpKzgpL/gpKjgpL4g4KSV4KSy4KS54KSw4KWCIOCkl+CksOClh+CksCDgpKTgpKrgpL7gpIjgpIHgpLLgpL7gpIgg4KSs4KSi4KWAIOCkquCliOCkuOCkviDgpKTgpL/gpLDgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjQxOTgzNDkyMTExMDg0OTc4NzkiPiLgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYIg4KS44KS/4KSn4KWIIOCkleCksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiLgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLDgpK7gpL4sIOCkhuCkleCkuOCljeCkruCkv+CklSDgpKjgpK7gpY3gpKzgpLAg4KS44KS54KS/4KSkLCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS54KS44KWN4KSk4KSV4KWN4KS34KWH4KSqIOCkrOCkv+CkqOCkviDgpJXgpLIg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkqOCkvuCkteCktuCljeCkr+CklSDgpLAg4KSX4KWI4KSwIOCkleCkvuCkqOClgeCkqOClgCDgpJXgpLLgpLngpLDgpYLgpLLgpL7gpIgg4KSG4KSV4KS44KWN4KSu4KS/4KSV4KSu4KS+IOCkuOCljeCkpeCkvuCkqOCkvuCkqOCljeCkpOCksOCkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+IkNETUEg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkuOClh+Ckn+CkheCkqyDgpLjgpL/gpKfgpYgg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NjA0ODQ4MDk1MzE1NDIxNDI1Ij4iQ0RNQSDgpKvgpYvgpKgg4KS44KWH4KSf4KSF4KSqIOCkuOCkv+Ckp+CliCDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIG1zZ2lkPSIxOTk0MTkzNTM4ODAyMzE0MTg2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIENETUEg4KSq4KWN4KSw4KS+4KS14KSn4KS+4KSoIOCkuOClgeCksHUg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIXgpKjgpL7gpLXgpLbgpY3gpK/gpJUg4KSw4KWC4KSq4KSu4KS+IENETUEg4KSq4KWN4KSw4KS+4KS14KSn4KS+4KSoIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSI3Nzg1NDA4MjUzMzY0MzM1NzQwIj4i4KS44KWN4KSl4KS+4KSoIOCkheCkquCkoeClh+CknyDgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYIg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9IjExMjA3NDE1NTc4OTE0Mzg4NzYiPiLgpLDgpYfgpKHgpL/gpK/gpYvgpKzgpL7gpJ8g4KS44KWN4KSl4KS+4KSoIOCkheCkpuCljeCkr+CkvuCkteCkp+Ckv+CklSDgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYLgpLLgpL7gpIgg4KS44KSV4KWN4KS34KSuL+CkheCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSo4KS54KWB4KSo4KWH4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9Ijc4NTUyNTk0NjEyNjg3MzQ5MTQiPiLgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KS14KS/4KS24KWH4KS34KSk4KS+4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiLgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KS44KWH4KS14KS+4KSm4KWN4KS14KS+4KSw4KS+IOCkteCkv+CktuClh+Ckt+CkpOCkviDgpIXgpKrgpLLgpYvgpKEg4KSt4KSP4KSV4KWLIOCkquCkueClgeCkgeCkmiDgpKrgpKLgpY3gpKgv4KSy4KWH4KSW4KWN4oCN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiLgpLXgpL/gpJzgpYfgpJ/gpLngpLDgpYLgpJXgpYsg4KSa4KSv4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCljeCksOCko+CkvuCksuClgOCksuCkvuCkiCDgpJXgpYHgpKgg4KS14KS/4KSc4KWH4KSfIOCkleClgeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpL/gpKjgpY3gpJsg4KSt4KSo4KWH4KSwIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CkuOCkueCkv+CkpOCkleCliyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSh4KWH4KSf4KS+4KSV4KWLIOCkquCkueClgeCkgeCkmiDgpKbgpL/gpKgg4KS44KSV4KWN4KSm4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSI4NDIzOTIzNzc3NjU5MjkyMjI4Ij4i4KSr4KWL4KSo4KSV4KWLIOCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9IjEwMjk4Nzc1MjkwMDc2ODY3MzIiPiLgpIngpKrgpJXgpLDgpKPgpJXgpL4g4KSr4KWL4KSoIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClguCksuCkvuCkiCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCAg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpI/gpIngpJ/gpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3gpLXgpL/gpJog4KSX4KSw4KWN4KSoLCDgpKvgpYvgpKgg4KSw4KWH4KSh4KS/4KSv4KWLIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSwIOCkluCli+CksuCljeCkqCDgpLAg4KSc4KS44KWN4KSk4KWIIOCkpOCkquCkvuCkiOCkgSDgpLjgpKfgpYgg4KS44KWC4KSa4KS/4KSkIOCkqOCkl+CksOClgCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjkxNzgyMjg1MjQ1MDc2MTA0ODYiPiLgpKvgpYvgpKgg4KS44KWN4KSl4KS/4KSk4KS/IOCksCDgpKrgpLngpL/gpJrgpL7gpKgg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSIxNjM5MjEyNzcxODI2MTI1NTI4Ij4i4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCkq+Cli+CkqCDgpLXgpL/gpLbgpYfgpLfgpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLAg4KSwIOCkieCkquCkleCksOCko+CkleCliyBJRHMsIOCkleCksiDgpLjgpJXgpY3gpLfgpK4g4KSbIOCkleCkvyDgpJvgpYjgpKgg4KSwIOCkleCksuCkpuCljeCkteCkvuCksOCkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSf4KS+4KSi4KS+4KSV4KWLIOCkqOCkruCljeCkrOCksCDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTMxNzMxNDM1MDExNDk1MDE1Ij4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkqOCkv+CkqOCljeCkpuCljeCksOCkvuCkruCkviDgpJzgpL7gpKjgpKzgpL7gpJ8g4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MzQ4MDE4Nzk0MTQ5NjEzMCI+IuCkq+Cli+CkqOCksuCkvuCkiCDgpKjgpL/gpKbgpL7gpIngpKjgpKzgpL7gpJ8g4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczMTEzMTk4MjQ0MDA0NDc4NjgiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSo4KS/4KS44KWN4KSV4KWN4KSw4KS/4KSvIOCkueClgeCkqOCkrOCkvuCknyDgpLDgpYvgpJXgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NTU5MTAwNjc3MzcyOTI4NzU0Ij4i4KSr4KWL4KSo4KSy4KS+4KSIIOCkqOCkv+CkuOCljeCkleCljeCksOCkv+CkryDgpLngpYHgpKjgpKzgpL7gpJ8g4KSw4KWL4KSV4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3ODcwMzQ3MjI2MTYzNTA0MTciPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSq4KS+4KS14KSwIOCkluCli+CksuCljeCkqCDgpLAg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTI4NjIyNDcwOTgwOTQzMjA2Ij4i4KSr4KWL4KSoIOCkluCli+CksuCljeCkqCDgpLXgpL4g4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpIngpLDgpY3gpJzgpL4g4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njg5ODYyODc4OTg0NjMxODMxIj4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkluCli+CksuCljeCkqCDgpLAg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjAzNzA1NzM0ODQ2MzEzMTAzMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKvgpYvgpKgg4KSW4KWL4KSy4KWN4KSoIOCksCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZhY3RvcnlUZXN0IiBtc2dpZD0iMzcxNTIyNTQ5MjY5NjQxNjE4NyI+IuCkq+CljeCkr+CkvuCkleCljeCkn+CljeCksOCkvyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSu4KWL4KSh4KSu4KS+IOCkmuCkvuCksuClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk1MjA1OTMxODM1OTY1MzA5MSI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLDgpLLgpL7gpIgg4KSq4KWB4KSw4KS+IOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSm4KS/4KSB4KSm4KWIIOCkpOCksuCljeCksuCliyDgpLjgpY3gpKTgpLAg4KSJ4KSk4KWN4KSk4KWN4KSq4KS+4KSm4KSVIOCkquCksOClgOCkleCljeCkt+Cko+CkleCliyDgpLDgpYLgpKrgpK7gpL4g4KSa4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpIngpKTgpY3gpKTgpY3gpKrgpL7gpKbgpJUg4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkruCli+CkoeCkruCkviDgpJrgpLLgpL/gpLDgpLngpYfgpJXgpYsg4KSs4KWH4KSy4KS+IOCkruCkvuCkpOCljeCksCDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTM2NjQ0OTkwMzE5MjQ0ODAyIj4i4KSk4KSy4KWN4KSy4KWLIOCkuOCljeCkpOCksCDgpIngpKTgpY3gpKTgpY3gpKrgpL7gpKbgpJUg4KSc4KS44KWN4KSk4KWIIOCkmuCksuCkvuCkieCkqOClgeCkueCli+CkuOCljSwg4KSq4KWB4KSw4KS+IOCkquCkueClgeCkgeCkmiDgpKbgpL/gpKgg4KSr4KWL4KSoIOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KS54KWB4KSo4KWN4KSb4KWkIOCkq+Cli+CkqCDgpIngpKTgpY3gpKrgpL7gpKbgpJUg4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkruCli+CkoeCkruCkviDgpJrgpLLgpL/gpLDgpLngpYfgpJXgpYsg4KSs4KWH4KSy4KS+IOCkruCkvuCkpOCljeCksCDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXIiIG1zZ2lkPSI2NjI3MTkyMzMzMzczNDY1MTQzIj4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCljeCksOCko+CkvuCksuClgCDgpLXgpL7gpLLgpKrgpYfgpKrgpLAg4KS44KWH4KSfIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjMyNzg2MDgxNjU5Nzc3MzY1MzgiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KS14KS+4KSy4KSq4KWH4KSq4KSwIOCkhuCkleCkvuCksCDgpLjgpK7gpL7gpK/gpYvgpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSI4MjM1Nzg0Mzg0MjIzNzMwMDkxIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkteCkvuCksuCkquClh+CkquCksOCkleCliyDgpIbgpJXgpL7gpLAg4KS44KSZ4KWN4KSV4KWH4KSk4KS54KSw4KWCIOCkruCkv+CksuCkvuCkieCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIyMzE1NzUwNDIzMTM5Njk3Mzk3Ij4i4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXN0ZXJDbGVhciIgbXNnaWQ9IjM2NjUzODA0OTI2MzM5MTAyMjYiPiLgpK/gpLjgpJXgpL4g4KSr4KWN4KSv4KS+4KSV4KWN4KSf4KWN4KSw4KS/IOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiwg4KSV4KSo4KWN4KSr4KS/4KSX4KSw4KWH4KS44KSoIOCksCDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkquCljeCksOCko+CkvuCksuClgOCkruCkviDgpKrgpYHgpLDgpYgg4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWUiIG1zZ2lkPSIyMDIxNjE0ODI5NTkxNzc1NjQ2Ij4i4KS44KSu4KSvIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxODk2MzQxNDM4MTUxMTUyODgxIj4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSV4KWLIOCkmOCkoeClgOCkleCliyDgpLjgpK7gpK8g4KSs4KSm4KSy4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NTU3MDI3MzA3MzgwMjAiPiLgpKvgpYvgpKjgpJXgpYsg4KSY4KSh4KWA4KSV4KWLIOCkuOCkruCkryDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWVab25lIiBtc2dpZD0iMjk0NTA3OTgwMTAxMzA3NzM0MCI+IuCkuOCkruCkryDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkleCliyDgpLjgpK7gpK8g4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQ5OTk0MzQ4ODQzNjYzMzM5OCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKvgpYvgpKjgpJXgpYsg4KS44KSu4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjQ4MjkyNjIzNDk2OTEzODY5ODYiPiJBY2NvdW50TWFuYWdlclNlcnZpY2Ug4KSV4KWLIOCksOClguCkquCkruCkviDgpJXgpL7gpLDgpY3gpK8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iMTk0ODQ1NTU1MjMzMzYxNTk1NCI+IuCkluCkvuCkpOCkviDgpIXgpKfgpL/gpJXgpL7gpLDgpYDgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KSyIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFjY291bnRzIiBtc2dpZD0iMTA4Njc5NTQ2Nzc2MDEyMjExNCI+IuCkieCkquCkleCksOCko+CkruCkviDgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KSt4KWH4KSf4KWN4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSm4KWN4KS14KS+4KSw4KS+IOCknOCljeCknuCkvuCkpCDgpJbgpL7gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KS44KWC4KSa4KWAIOCkquCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpKbgpY3gpLXgpL7gpLDgpL4g4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkuOCljeCkpeCkvuCkquCkv+CkpCDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpYsg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KS44KSu4KS+4KS14KWH4KS2IOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiLgpKvgpYvgpKjgpLLgpL7gpIgg4KSl4KS+4KS54KS+IOCkreCkj+CkleCkviDgpJbgpL7gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KS44KWC4KSa4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpKzgpL7gpJ8g4KS44KWD4KSc4KS/4KSkIOCkleClgeCkqOCliCDgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KS44KSu4KS+4KS14KWH4KS2IOCkueClgeCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTI2NTkwODQ4MTE3MjczNjkzMyI+IuCkluCkvuCkpOCkviDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTQ3MjEyNDI5NjkwODk3NzI2MCI+IuCkluCkvuCkpOCkvuCkueCksOClguCkleCliyDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KWHIOCksCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWHIOCksCDgpIngpKjgpYDgpLngpLDgpYLgpJXgpYsg4KSq4KS+4KS44KS14KSw4KWN4KSh4KS54KSw4KWC4KSV4KWLIOCkuOClh+Ckn+Ckv+CkmSDgpJfgpLDgpY3gpKjgpYcg4KS44KS54KS/4KSkIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpKzgpKjgpY3gpKfgpJXgpJXgpYsg4KSW4KS+4KSk4KS+IOCkhuCkp+Ckv+CkleCkvuCksOClgCDgpLjgpJXgpY3gpLfgpK7gpKTgpL7gpLngpLDgpYIg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4i4KSW4KS+4KSk4KS+4KS54KSw4KWCIOCkpeCkquCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KS54KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI4Njk4Mjk1NjI1NDg4MjkyNTA2Ij4i4KSW4KS+4KSk4KS+4KS54KSw4KWCIOCkpeCkquCljeCkqOClhyDgpLAg4KS54KSf4KS+4KSJ4KSo4KWHIOCknOCkuOCljeCkpOCkviDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL7gpLngpLDgpYIg4KS44KSu4KWN4KSq4KSo4KWN4KSoIOCkl+CksOCljeCkqCwg4KSwIOCkieCkqOClgOCkueCksOClguCkleCliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSu4KWH4KSf4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2VDcmVkZW50aWFscyIgbXNnaWQ9IjIzNTQ4MTM5NjE2Mzg3NzY0MiI+IuCkieCkquCkleCksOCko+CkruCkviDgpJbgpL7gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpY3gpLDgpK7gpL7gpKPgpYDgpJXgpLDgpKMg4KSf4KWL4KSV4KSo4KS54KSw4KWCIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iNDk1MTAyNzk2NDM0ODk3NDc3MyI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpJzgpKHgpL7gpKjgpLngpLDgpYIg4KS54KWH4KSw4KWN4KSo4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iODMxODk2NDQyNDY3NTk2MDk3NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSc4KSh4KS+4KSo4KS54KSw4KWCIOCknOCkuOCljeCkpOCliCDgpJXgpYHgpKgg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWCIOCkheCkteCkuOCljeCkpeCkv+CkpCDgpLngpYHgpKjgpY3gpJvgpKjgpY0g4KSwIOCknOCkoeCkv+CkpCDgpJvgpKjgpY0g4KSc4KS44KSy4KWHIOCkueClh+CksOCljeCkqOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiLgpKrgpYLgpLDgpY3gpKMg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCkueClgeCkgeCkmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpJXgpYfgpJ/gpLngpLDgpYIg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqCDgpLAg4KSV4KS44KWN4KSf4KSuIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpY3gpLDgpYvgpJ/gpYvgpJXgpLIg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KSwIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSH4KSo4KWN4KSf4KSw4KSo4KWH4KSf4KSu4KS+IOCkoeClh+Ckn+CkviDgpKrgpKDgpL7gpIngpKjgpYcg4KSu4KS+4KSn4KWN4KSv4KSuIOCkquCljeCksOCkpuCkvuCkqCDgpJfgpLDgpY3gpJvgpKjgpY0sIOCkpOCljeCkr+CkuOCliOCksuClhyDgpIfgpKjgpY3gpJ/gpLDgpKjgpYfgpJ/gpK7gpL4g4KSh4KWH4KSf4KS+IOCkquCkoOCkvuCkieCkqCDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KSV4KWLIOCkhuCkteCktuCljeCkr+CkleCkpOCkviDgpKrgpLDgpY3gpKbgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MDU2NjAxNTk2NzU3NTE4OTYiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCksCDgpJ/gpY3gpLDgpL7gpKvgpL/gpJUg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSAvIOCksOCli+CkleCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MzMzNzk4ODg2NDEyNzE0MTkzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpLAg4KS44KSs4KWIIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJ/gpY3gpLDgpL7gpKvgpL/gpJUg4KSw4KWL4KSV4KWN4KSoIOCksCDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCkieCkpuCkvuCkueCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWB4KSo4KWIIOCkquCkqOCkvyBBUE4g4KSV4KWLIOCkquCljeCksOCli+CkleCljeCkuOClgCDgpLAg4KSq4KWL4KSw4KWN4KSfIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSc4KWN4KSe4KS+4KSoIOCkrOCkv+CkqOCkviDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KWN4KSv4KS+4KSV4KWH4KSf4KS54KSw4KWCIOCkruCli+CkqOCkv+Ckn+CksCDgpJfgpLDgpY3gpKgsIOCkquClgeCkqDrgpKjgpL/gpLDgpY3gpKbgpYfgpLbgpL/gpKQg4KSX4KSw4KWN4KSoLCDgpLXgpL4g4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9Ijk1ODg4NDI5MTQ1NDMyNzMwOSI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpJzgpKHgpL7gpKgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9IjY3ODkxMjM5MTI0NzY0MTYyMTQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCknOCkoeCkvuCkqOCkleCliyDgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjU5NTI1ODQ5NjQzNzMwMTc5NjAiPiLgpJ/gpYfgpKXgpLDgpY3gpKEg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCknOCkoeCkvuCkqCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSIxNTI0NDQxMzQ0NDEyMzE5NzgwIj4i4KSf4KS/4KSl4KSwIOCkl+CksOClh+CkleCliyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSc4KSh4KS+4KSo4KSV4KWLIOCkuOCljeCkpeCkv+CkpOCkvyDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiLgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSh4KWH4KSf4KS+IOCkquCljeCksOCkr+Cli+CklyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkoeClh+Ckn+CkviDgpIngpKrgpK/gpYvgpJcg4KS44KWH4KSf4KS/4KSZIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSc4KSh4KS+4KSo4KS54KSw4KWCIOCkueClh+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCknOCkvuCkqOCkleCkvuCksOClgCDgpLngpYfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSc4KS44KWN4KSk4KWIIOCkleCkvyDgpLXgpL7gpIct4KSr4KS+4KSHIOCkuOCkleCljeCkt+CkriDgpJsg4KSV4KS/IOCkm+CliOCkqCDgpLAg4KSc4KSh4KS+4KSoIOCkl+CksOCkv+Ckj+CkleCliyDgpLXgpL7gpIct4KSr4KS+4KSHIOCkieCkquCkleCksOCko+CkueCksOClguCkleCliyDgpKjgpL7gpK7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiLgpLXgpL7gpIct4KSr4KS+4KSH4KS44KSB4KSXIOCknOCli+CkoeCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSb4KWB4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL7gpIct4KSr4KS+4KSHIOCkquCkueClgeCkgeCkmiDgpKzgpL/gpKjgpY3gpKbgpYHgpKzgpL7gpJ8g4KSc4KSh4KS+4KSoIOCkl+CksOCljeCkqCDgpLAg4KS14KS/4KSa4KWN4KSb4KWH4KSm4KSoIOCkl+CksOCljeCkqCDgpLAg4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkieCkquCkleCksOCkoyDgpJXgpKjgpY3gpKvgpL/gpJfgpLDgpYfgpLjgpKjgpK7gpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSo4KS54KSw4KWCIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyBNdWx0aWNhc3Qg4KS44KWN4KS14KS/4KSV4KWD4KSk4KS/4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSu4KSy4KWN4KSf4KS/4KSV4KS+4KS34KWN4KSfIOCkoOClh+Ckl+CkvuCkqOCkvuCkueCksOClgiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KSu4KS+IOCkquCkoOCkvuCkh+Ckj+CkleCliyDgpKrgpY3gpK/gpL7gpJXgpYfgpJ/gpLngpLDgpYIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJXgpYfgpLXgpLIg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpK7gpL7gpKTgpY3gpLAg4KS54KWL4KSH4KSo4KWkIOCkr+CkuOCksuClhyDgpJfgpYjgpLAt4KSu4KSy4KWN4KSf4KS/4KSV4KS+4KS34KWN4KSfIOCkruCli+CkoSDgpK3gpKjgpY3gpKbgpL4g4KSs4KSi4KWAIOCkieCksOCljeCknOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKgg4KSu4KS+4KSk4KWN4KSwIOCkueCli+Ckh+CkqCwg4KSu4KSy4KWN4KSf4KS/4KSV4KS+4KS44KWN4KSfIOCkoOClh+Ckl+CkvuCkqOCkvuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWHIOCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KSV4KS+IOCkuOCkrOCliCDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpK7gpL4g4KSq4KSg4KS+4KSH4KSP4KSV4KS+IOCkquCljeCkr+CkvuCkleClh+Ckn+CkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpJfgpYjgpLAt4KSu4KSy4KWN4KSf4KS/4KSV4KS+4KS44KWN4KSfIOCkruCli+CkoeCkreCkqOCljeCkpuCkviDgpKzgpKLgpYAg4KSJ4KSw4KWN4KSc4KS+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aEFkbWluIiBtc2dpZD0iNjAwNjk2NzM3MzkzNTkyNjY1OSI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpK7gpL4g4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4i4KS44KWN4KSl4KS+4KSo4KWA4KSvIOCkrOCljeCksuClgeCkn+ClgeCkpSDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSV4KSo4KWN4KSr4KS/4KSX4KSwIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSwIOCkn+CkvuCkouCkvuCkleCkviDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLLgpL7gpIgg4KSq4KSk4KWN4KSk4KS+IOCksuCkl+CkvuCkieCkqCDgpLAg4KSc4KWL4KSh4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpY3gpKXgpL7gpKjgpYDgpK8g4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkq+Cli+CkqCDgpJXgpKjgpY3gpKvgpL/gpJfgpLAg4KSX4KSw4KWN4KSoIOCksCDgpJ/gpL7gpKLgpL7gpJXgpL4g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KS44KSB4KSXIOCkluCli+CknCDgpJfgpLDgpY3gpKgg4KSwIOCknOCli+CkoeClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjQxOTU5MDcwMTA2MTAyMDU3MDMiPiJXaU1BWOCkuOCkgeCklyDgpJzgpYvgpKHgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkm+ClgeCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI2MzYwMTAyODc3MjYxOTc4ODg3Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpLjgpJXgpY3gpLfgpK4g4KSbIOCkleCkvyDgpJvgpYjgpKgg4KSwIOCknOCkoeCkvuCkqCDgpK3gpI/gpJXgpYsg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+IuCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS+4KSH4KSu4KWN4KSv4KS+4KSV4KWN4KS4IOCkqOClh+Ckn+CkteCksOCljeCkleCkueCksOClguCkrOCkvuCknyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSc4KSh4KS+4KSoIOCkl+CksOCljeCkqCDgpLAg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkteCkv+CkmuCljeCkm+Clh+CkpuCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiLgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWC4KS44KSB4KSXIOCkq+Cli+CkqCDgpJzgpYvgpKHgpY3gpKgg4KSwIOCkm+ClgeCkn+CkvuCkieCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoIiBtc2dpZD0iNjEyNzc2OTMzNjMzOTI3NjgyOCI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSc4KWL4KSh4KWAIOCkruCkv+CksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkruCkviDgpKzgpY3gpLLgpYHgpJ/gpYHgpKXgpJXgpYsg4KSV4KSo4KWN4KSr4KS/4KSX4KWB4KSw4KWH4KS44KSo4KSy4KS+4KSIIOCkueClh+CksOCljeCkqCDgpLAg4KSs4KSo4KS+4KSJ4KSoIOCksCDgpJzgpYvgpKHgpYAg4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KS44KSB4KSXIOCknOCkoeCkvuCkqOCkueCksOClguCksuCkvuCkiCDgpLjgpY3gpLXgpYDgpJXgpL7gpLAg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzIwNzEwNjMyNDQ1MjMxMjczOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKvgpYvgpKjgpK7gpL4g4KSs4KWN4KSy4KWB4KSf4KWB4KSl4KSV4KWLIOCkleCkqOCljeCkq+Ckv+Ckl+CksOClh+CkuOCkqCDgpLngpYfgpLDgpY3gpKgg4KSwIOCknOCli+CkoeClgCDgpK3gpI/gpJXgpL4g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KS44KSB4KSXIOCknOCkoeCkvuCkqOCkueCksOClgiDgpKzgpKjgpL7gpIngpKgg4KSwIOCkuOCljeCkteClgOCkleCkvuCksCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbmZjIiBtc2dpZD0iNDQyMzM1MTI3NDc1Nzg3Njk1MyI+IuCkqOCknOCkv+CklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KS44KSC4KSa4KS+4KSwIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCko+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSo4KSv4KS+4KSBIOCkleCljeCkt+Clh+CkpOCljeCksCDgpLjgpILgpJrgpL7gpLAgKE5GQykg4KSf4KWN4KSv4KS+4KSX4KS54KSw4KWCLCDgpJXgpL7gpLDgpY3gpKHgpLngpLDgpYIg4KSwIOCkquCkvuCkoOCkleCkueCksOClguCkuOCkgeCklyDgpIXgpKjgpY3gpKTgpLDgpY3gpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjM1OTg0OTYzMDE0ODY0MzkyNTgiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSy4KSVIOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSI2MDM0MjAzMDY1MDc3MTIyOTkyIj4i4KSV4KWB4KSo4KWIIOCkuOCkruCljeCkrOCkqOCljeCkp+Ckv+CkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KS44KWB4KSw4KSV4KWN4KS34KS+IOCksCDgpJXgpL/gpLLgpJXgpLLgpL7gpIgg4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpIngpKbgpL7gpLngpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/LCDgpIXgpKjgpY3gpKTgpLDgpY3gpJfgpK7gpKgg4KSr4KWL4KSoIOCkleCksiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSm4KS+IOCkq+Cli+CkqOCksuClhyDgpJXgpL/gpLLgpJXgpLLgpL7gpIgg4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkmywg4KSk4KWN4KSv4KS44KSq4KSb4KS/IOCkleCksiDgpLjgpJXgpL/gpI/gpJXgpYsg4KSs4KWH4KSy4KS+IOCkleCkv+CksuCklSDgpKrgpYHgpKjgpIPgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iNjIwMTgxMDAwODIzMDUwMzA1MiI+IuCkuOCkruClgOCkleCksOCkoyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjI3MDY3NDU2NzQ1Njk2Nzg2NDQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSW4KS+4KSk4KS+4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpL/gpJngpY3gpJUg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkquCkouCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkieCkpuCkvuCkueCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSv4KS44KSy4KWHIOCkteCljeCkr+CkleCljeCkpOCkv+CkueCksOCkleCliyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSW4KS+4KSk4KS+4KS44KSB4KSXIOCkuOCkv+CkmeCljeCklSDgpK3gpI/gpJXgpYsg4KSo4KSt4KSP4KSV4KWLIOCkqOCkv+CksOCljeCkp+CkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiLgpJ/gpJfgpLIg4KS44KS/4KSZ4KWN4KSVIOCkluClgeCksuCkviDgpLAg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI4OTU2MjYyNTkxMzA2MzY5ODY4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkluCkvuCkpOCkvuCkleCliyDgpLLgpL7gpJfgpL8g4KS44KS/4KSZ4KWN4KSVIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSJ4KSm4KS+4KS54KSw4KSj4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSv4KWLIOCkluCkvuCkpOCkvuCkuOCkgeCklyDgpLXgpY3gpK/gpJXgpY3gpKTgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkuOCkv+CkmeCljeCklSDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1N0YXRzIiBtc2dpZD0iNzM5NjU3NzQ1MTM2MDIwMjQ0OCI+IuCkuOCkv+CkmeCljeCklSDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpJXgpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjE1MTAxNDM3NjE3NTc2MDYxNTYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSW4KS+4KSk4KS+4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpK7gpYDgpJXgpLDgpKPgpJXgpYsg4KSG4KSB4KSV4KSh4KS+IOCkuOCkruClgOCkleCksOCkoyDgpJjgpJ/gpKjgpL7gpLngpLDgpYLgpJXgpYsgIOCkh+CkpOCkv+CkueCkvuCkuCDgpLAg4KS44KSu4KWA4KSV4KSw4KSjIOCkl+CksOCkv+Ckj+CkleCliyDgpKHgpYfgpJ/gpL7gpJXgpYsg4KSu4KS+4KSq4KSoIOCkuOCkruClh+CkpCwg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI0NzU2NjA5NjM3MDUzMzUzMzE4Ij4i4KS44KSm4KS44KWN4KSvIOCkrOCkqOCkvuCkh+CkleCkviDgpKvgpL/gpKHgpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjU1NTcwNTg5MDc5MDYxNDQ1MDUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KS54KS/4KSy4KWH4KSV4KWLIOCkuOCkruClgOCkleCksOCkoyDgpJfgpLDgpL/gpI/gpJXgpL4g4KS44KWC4KSa4KSV4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpLXgpL/gpLXgpLDgpKPgpLngpLDgpYIg4KSy4KS/4KSo4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iOTAxNTI0NjMyNTQwODIwOTI5NiI+IuCkuOCkpuCkuOCljeCkryDgpKzgpKjgpL7gpIfgpJXgpL4g4KSr4KS/4KSh4KS54KSw4KWCIOCksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iNjkyODkzMDE4ODgyNjA4OTQxMyI+IuCkpOCkquCkvuCkiOCkgeCkleCkviDgpK3gpLDgpY3gpJbgpLDgpYgg4KS44KS/4KSZ4KWN4KSVIOCkq+Ckv+CkoeCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KS/4KSZ4KWN4KSVIOCkq+Ckv+CkoeCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpLjgpLLgpYcgIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNDEwNzEwMTUyNTc0NjAzNTcxOCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpLbgpKzgpY3gpKbgpJXgpYvgpLbgpK7gpL4g4KSl4KSq4KWH4KSV4KS+IOCktuCkrOCljeCkpuCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktuCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSX4KSw4KWH4KSV4KS+IOCkueClgeCkqCDgpLjgpJXgpY3gpKjgpYcg4KS44KSs4KWIIOCktuCkrOCljeCkpuCkueCksOClgiwg4KSo4KS+4KSu4KS54KSw4KWCIOCksCDgpKrgpKbgpL7gpLXgpLLgpYDgpLngpLDgpYIg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjIxODMxMTA0MDIzMTQ0NDExMDYiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4t4KSq4KSw4KS/4KSt4KS+4KS34KS/4KSkIOCktuCkrOCljeCkpuCkleCli+CktuCkruCkviDgpLbgpKzgpY3gpKbgpLngpLDgpYIg4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODE4NTM4NTcxNjI1NTA2NTI5MSI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpLbgpKzgpY3gpKbgpJXgpYvgpLbgpK7gpL4g4KSo4KSv4KS+4KSBIOCktuCkrOCljeCkpiDgpLLgpYfgpJbgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJfgpLDgpL/gpI/gpJXgpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmuCkleCliyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJfgpLDgpL/gpI/gpJXgpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmuCkleCliyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjQyNDczMjkyMzQ4MTMyMDcyIj4i4KSt4KS14KS/4KS34KWN4KSvIOCkieCkquCkleCksOCko+CkueCksOClguCkruCkviDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWB4KSo4KWHIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU5MTQ0MDI2ODQ2ODU4NDg4MjgiPiLgpK3gpLXgpL/gpLfgpY3gpK8g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KSu4KS+IOCkieCkquCksuCkrOCljeCkpyDgpLngpYHgpKjgpYcgU0Qg4KSV4KS+4KSw4KWN4KSh4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyBVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSV4KWLIOCkteCkv+Ckt+Ckr+CkteCkuOCljeCkpOClgeCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODgwNTY5MzYzMDA1MDQ1ODc2MyI+IuCkpOCkquCkvuCkiOCkgeCkleCliyBTRCDgpJXgpL7gpLDgpY3gpKHgpJXgpYsg4KS14KS/4KS34KSv4KS44KWC4KSa4KWAIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSu4KS+IOCksuClh+CkluCljeKAjeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIggU0Qg4KSV4KS+4KSw4KWN4KSh4KSu4KS+IOCksuClh+CkluCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTk4MzkxOTk3MDY4NzkwMTUiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSu4KS/4KSh4KS/4KSv4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpLjgpL7gpK7gpJfgpY3gpLDgpYDgpLngpLDgpYIg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljS/gpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxODkxNjA1OTc2OTg1MjkxODUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkruCkv+CkoeCkv+Ckr+CkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KS44KS+4KSu4KSX4KWN4KSw4KWA4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3NzgzMTg1OTg0NDg4NDk4MjkiPiLgpJXgpL7gpJfgpJzgpL7gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCljeCksOCkrOCkqOCljeCkpyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODcwNDMyMzE3NjkxNDEyMTQ4NCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJXgpL7gpJfgpJzgpL7gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkuOCkruCkvuCkr+Cli+CknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iODE1MDYxMzgyMzkwMDQ2MDU3NiI+IuCkuOCkrOCliCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSs4KS+4KS54KWN4KSvIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpKrgpLngpYHgpIHgpJog4KSw4KS+4KSW4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iMzIxNTIwODM1NzQxNTg5MTMyMCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpKzgpYgg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpKzgpL7gpLngpY3gpK8g4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSu4KS+4KSl4KS/IOCkquCkueClgeCkgeCkmiDgpLDgpL7gpJbgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU2NTY0ODcyNjQ4MTk2Njk4MjQiPiLgpJXgpY3gpK/gpL7gpLgg4KSr4KS+4KSH4KSyIOCkquCljeCksOCko+CkvuCksuClgCDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiLgpJXgpYfgpLgg4KSr4KS+4KSH4KSyIOCkquCljeCksOCko+CkvuCksuClgOCksuCkvuCkiCDgpKrgpKLgpY3gpKgg4KSwIOCksuClh+CkluCljeKAjeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZV9zaXAiIG1zZ2lkPSI1OTg2OTUyMzYyNzk1ODcwNTAyIj4i4KSH4KSo4KWN4KSf4KSw4KSo4KWH4KSfIOCkleCksuCkueCksOClgiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+IuCkh+CkqOCljeCkn+CksOCkqOClh+CknyDgpJXgpLIg4KSX4KSw4KWN4KSoL+CkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKggU0lQIOCkuOClh+CkteCkvuCksuCkvuCkiCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCkr+Cli+Ckl+CkleCliyDgpIfgpKTgpL/gpLngpL7gpLgg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3Njg5MDYwNzQ5ODE5MTI2NDcyIj4i4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkqOClh+Ckn+CkteCksOCljeCkleCkueCksOClgiDgpLAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJDgpKTgpL/gpLngpL7gpLjgpL/gpJUg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCkr+Cli+CklyDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iMjU2MjA1MzU5MjMzOTg1OTk5MCI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpKjgpYDgpKTgpL8g4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSI3NTM3NTg2NzcxNTU5MzcwNjY4Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkqOClgOCkpOCkv+CkueCksOClgiDgpLXgpY3gpK/gpLXgpLjgpY3gpKXgpL7gpKrgpKgg4KSX4KSw4KWN4KSoIOCksCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJct4KS14KS/4KS24KWH4KS3IOCkqOCkv+Ckr+CkruCkueCksOClgiDgpKrgpLDgpL/gpK3gpL7gpLfgpL/gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjUwODgyMTczMDkwODg3Mjk2NTAiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSXIOCksuClh+CkluCkvuCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1NDQzNDEyODY2NzQ2MTk4MTIzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkuOCksOClgCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KS14KS/4KSw4KWC4KSm4KWN4KSn4KSu4KS+IOCkleCkuOCksOClgCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSX4KWAIOCkheCkleCkvuCkieCkqOCljeCkn+Clh+CkoSDgpJsg4KSt4KSo4KWH4KSwIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+IOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9IjM2NTg1MjcyMTQ5MTQ5NTk3NDkiPiLgpLjgpJXgpYfgpJ/gpJXgpYsg4KSo4KS/4KS24KS+4KSo4KS54KSw4KWCIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9Ijc2NTU1Njg0MzM2OTYzNTY1NzgiPiLgpK7gpL7gpLDgpY3gpJcg4KSm4KSw4KWN4KS24KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSV4KWH4KSf4KSV4KWLIOCkqOCkv+CktuCkvuCkqOCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI3NjczNDE2NDg3ODczNDMyMjY4Ij4i4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNDU4NDU3NzQyNjgzNDMxMzg3Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkrOCkvuCknyDgpKrgpYvgpLjgpY3gpJ8g4KSX4KSw4KS/4KSP4KSV4KS+4KS44KS54KS/4KSkIOCkquClgeCkqOCkg+CkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgsIOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKgg4KSwIOCkuOClguCkmuCkqOCkvuCkueCksOClgiDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI3MDU3NzY0NzQyMjExNjU2NjU0Ij4i4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCktuCljeCksOCli+CkpOCkviDgpLjgpYfgpLXgpL7gpK7gpL4g4KSs4KS+4KSB4KSn4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9Ijk4NTY5NzkxODU3NjkwMjk4NiI+IuCkueCli+CksuCljeCkoeCksOCksuCkvuCkiCDgpLjgpYLgpJrgpKjgpL4g4KS24KWN4KSw4KWL4KSk4KS+IOCkuOClh+CkteCkvuCkleCliyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4KSk4KSw4KSV4KWLIOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuCDgpKzgpL7gpIHgpKfgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuClhyDgpKrgpKjgpL8g4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkquCksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjM2OTk2MDA4MzM5NzUxMTc0NzgiPiLgpLXgpL7gpLngpJUt4KSq4KWN4KSw4KSm4KS+4KSoIOCkteCkv+CkqOCljeCkr+CkvuCkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjQxNTk1NDkxNTI1MjkxMTE5MjAiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLLgpL7gpIgg4KS14KS+4KS54KSVLeCkquCljeCksOCkpuCkvuCkqCDgpLXgpL/gpKjgpY3gpK/gpL7gpLgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI4MjA2MDc3NDQ3ODM4OTA5NTE2Ij4i4KS44KSe4KWN4KSc4KS+4KSyIOCkheCkteCkuOCljeCkpeCkvuCkleCkviDgpKrgpLDgpY3gpK/gpLXgpYfgpJXgpY3gpLfgpKPgpJXgpL4g4KSy4KS+4KSX4KS/IOCkuOClgeCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtDb25kaXRpb25zIiBtc2dpZD0iNjg5OTEwMjA3NTgyNTI3MjIxMSI+IuCkuOCknuCljeCknOCkvuCksiDgpIXgpLXgpLjgpY3gpKXgpL7gpJXgpL4g4KSq4KSw4KWN4KSv4KS14KWH4KSV4KWN4KS34KSjIOCkuOClgeCkqOCljeCkqOCkleCkviDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaTgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkmuCkvuCkgeCkueCkv+CkpuCliCDgpKjgpJrgpL7gpIHgpLngpL/gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ob3R3b3JkUmVjb2duaXRpb24iIG1zZ2lkPSIzMjI1MDgwNDA4NzQ2MzYxMzEzIj4i4KSc4KSy4KWN4KSm4KWL4KSs4KSy4KWN4KSm4KWLIOCktuCkrOCljeCkpiDgpKrgpLngpL/gpJrgpL7gpKjgpJXgpL4g4KSy4KS+4KSX4KS/IOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ob3R3b3JkUmVjb2duaXRpb24iIG1zZ2lkPSIzNzE2NzQxMjYwMTk1MzY0MjUyIj4i4KSc4KSy4KWN4KSm4KS+4KSs4KSy4KWN4KSm4KS+IOCktuCkrOCljeCkpiDgpKrgpLngpL/gpJrgpL7gpKjgpJXgpL4g4KSy4KS+4KSX4KS/IOCkheCkqOClgeCksOCli+CkpyDgpKrgpKDgpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaTgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KS+IOCksuCkvuCkl+CkvyDgpK/gpYsg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkqOCkmuCkvuCkueCkv+CkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSo4KS/4KSv4KSu4KS54KSw4KWCIOCkruCkv+CksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjMyNTIxMTQyMDM5MTk1MTAzOTQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgt4KSF4KSo4KSy4KSVIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClguCkruCkviDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSH4KSP4KSV4KWLIOCksuCkruCljeCkrOCkvuCkhyDgpLAg4KSF4KSV4KWN4KS34KSw4KS54KSw4KWCIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2F0Y2hMb2dpbiIgbXNnaWQ9IjkxNDEzMDY0Njk0MjE5OTUwMyI+IuCkruCli+CkqOCkv+Ckn+CksCDgpLjgpY3gpJXgpY3gpLDgpL/gpKgt4KSF4KSo4KSy4KSVIOCkquCljeCksOCkr+CkpOCljeCkqOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSm4KS+IOCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkreCkj+CkleCliyDgpLjgpILgpJbgpY3gpK/gpL4g4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSv4KSm4KS/IOCkqOCkv+CkleCliCDgpKfgpYfgpLDgpYgg4KSX4KSy4KSkIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClgiDgpJ/gpL7gpIfgpKog4KSt4KSP4KSV4KS+IOCkm+CkqCDgpK3gpKjgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkleCkviDgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSm4KS+IOCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkreCkj+CkleCliyDgpLjgpILgpJbgpY3gpK/gpL4g4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSv4KSm4KS/IOCkqOCkv+CkleCliCDgpKfgpYfgpLDgpYgg4KSX4KSy4KSkIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClgiDgpJ/gpL7gpIfgpKog4KSt4KSP4KSV4KS+IOCkm+CkqCDgpK3gpKjgpYcg4KSr4KWL4KSoIOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkq+Cli+CkqOCkleCkviDgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+IuCkuOCljeCkleCljeCksOCkv+CkqC3gpIXgpKjgpLLgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkpuCksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjYwNTk2Mzk2MjMwMTkwNDQ1OCI+IuCkuOCljeCkleCljeCksOCkv+CkqC3gpIXgpKjgpLLgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZm9yY2VMb2NrIiBtc2dpZD0iMjI3NDA4NTM4NDcwNDI0ODQzMSI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpLLgpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19mb3JjZUxvY2siIG1zZ2lkPSIxMTQxNzk3NTg4NDAzODI3MTM4Ij4i4KSV4KS44KSw4KWAIOCksCDgpJXgpLngpL/gpLLgpYcg4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93aXBlRGF0YSIgbXNnaWQ9IjM5MTA1NDU0NDY3NTg2Mzk3MTMiPiLgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGEiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMDYxODQwOTYwNjc3NTY4NzYiPiLgpI/gpIngpJ/gpL4g4KSr4KWN4KSv4KS+4KSV4KWN4KSf4KWN4KSw4KS/IOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KWH4KSwIOCkmuClh+CkpOCkvuCkteCkqOClgCDgpKjgpIbgpIngpIHgpKbgpYgg4KSf4KWN4KSv4KS+4KSs4KSy4KWN4KSf4KSV4KWLIOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTA5Njg5NTYwNDU3NDE4ODM5MSI+IuCkj+CkieCkn+CkviDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSh4KWH4KSf4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpYfgpLAg4KSa4KWH4KSk4KS+4KS14KSo4KWAIOCkqOCkhuCkieCkgeCkpuCliCDgpKvgpYvgpKjgpJXgpYsg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9zZXRHbG9iYWxQcm94eSIgbXNnaWQ9IjI3ODQ4MjgyOTM3NDc3OTE0NDYiPiLgpIngpKrgpJXgpLDgpKMg4KS14KS/4KS24KWN4KS14KS14KWN4KSv4KS+4KSq4KWAIOCkquCljeCksOCli+CkleCljeCkuOClgCDgpK7gpL/gpLLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+IuCkqOClgOCkpOCkvyDgpLjgpJXgpY3gpLfgpK4g4KS54KWB4KSB4KSm4KS+IOCkquCljeCksOCkr+Cli+CklyDgpLngpYHgpKjgpYcg4KSJ4KSq4KSV4KSw4KSjICDgpLXgpL/gpLbgpY3gpLXgpLXgpY3gpK/gpL7gpKrgpYAg4KSq4KWN4KSw4KWL4KSV4KWN4KS44KWAIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSq4KWN4KSw4KSl4KSuIOCkieCkquCkleCksOCkoyDgpKrgpY3gpLDgpLbgpL7gpLjgpLbgpKjgpLLgpYcg4KSu4KS+4KSk4KWN4KSwIOCkquCljeCksOCkreCkvuCkteCkleCkvuCksOClgCDgpLXgpL/gpLbgpY3gpLXgpLXgpY3gpK/gpL7gpKrgpYAg4KSq4KWN4KSw4KWL4KSV4KWN4KS44KWAIOCkuOClh+CknyDgpJfgpLDgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSI4ODUyNzkxNTE4NDcyNTQwNTYiPiLgpLLgpJUt4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpIXgpKjgpY3gpKQg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSIxNzI5NzI1MjI2MzE0NjkxNTkxIj4i4KSq4KWN4KSw4KS+4KSv4KSDIOCkleCkpOCkvyDgpJvgpL/gpJ/gpYsg4KSy4KSVLeCkuOCljeCkleCljeCksOCkv+CkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSs4KSm4KSy4KWN4KSo4KWBIOCkquCksOCljeCkmyDgpK/gpLjgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iODkwMTMyNjE5OTkwOTEzMjkxNSI+IuCkreCko+CljeCkoeCkvuCksOCkoyDgpIfgpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpLjgpKgg4KSu4KS/4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+IuCkreCko+CljeCkoeCkvuCksCDgpJfgpLDgpL/gpI/gpJXgpYsg4KSh4KWH4KSf4KS+IOCkh+CkqOCljeCkleCljeCksOCkv+CkquCljeCknyDgpLngpYHgpKjgpYEg4KSG4KS14KS24KWN4KSv4KSVIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iNjM5NTMwMTAyMzE1MjI5NzgyNiI+IuCkleCljeCkr+CkvuCkruClh+CksOCkvuCksuCkvuCkiCDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+IuCkuOCkrOCliCDgpIngpKrgpJXgpLDgpKMg4KSV4KWN4KSv4KS+4KSu4KSw4KS+4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiLgpJXgpL/gpJfgpL7gpLDgpY3gpKHgpK7gpL4g4KSt4KSP4KSV4KS+IOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClgiDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiLgpJXgpYfgpLngpYAg4KSV4KS/4KSX4KS+4KSw4KWN4KShIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBob25lVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI4OTAxMDk4MzM2NjU4NzEwMzU5Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY5OTIzNjUwNTI3MTM2NjE1Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg5NzU0NDY1NDI0Mjg3NDU0MyI+IuCkleCkvuCkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMTAzNjAxNDMzMzgyMTU4MTU1Ij4i4KSV4KS+4KSw4KWN4KSvIOCkq+CljeCkr+CkvuCkleCljeCkuCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MzUxNzcxNDQ5NDgzMjkzNzAiPiLgpJjgpLDgpJXgpYsg4KSr4KWN4KSv4KS+4KSV4KWN4KS4IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjAzODc4Njc0NDc3MjA3Mzk0Ij4i4KSq4KWH4KSc4KSwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+IuCkheCkqOCljeCkryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJlbWFpbEFkZHJlc3NUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjgwNzM5OTQzNTI5NTYxMjkxMjciPiLgpJfgpYPgpLkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3MDg0MjM3MzU2NjAyNjI1NjA0Ij4i4KSV4KS+4KSuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+IuCkheCkqOCljeCkryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIzNzQ5MTM5NTI4NzAxMTA2MTgiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwb3N0YWxBZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI2ODgwMjU3NjI2NzQwMDQ3Mjg2Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTYyOTE1Mzk1NjA0NTEwOTI1MSI+IuCkleCkvuCkriI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0OTMyNjgyODQ3NTk1Mjk5MzY5Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1BZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSIxNzM4NTg1MTk0NjAxNDc2Njk0Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM1OTY0NDU2NTY0NzM4MzcwOCI+IuCkleCkvuCkriI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JnYW5pemF0aW9uVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NTQ2MzM1NjEyMTg5MTE1NjE1Ij4i4KSV4KS+4KSuIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQzNzgwNzQxMjkwNDk1MjAzNzMiPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNDU1MDQ3NDY4NTgzOTY1MTA0Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1Qcm90b2NvbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI4NTk1MjYxMzYzNTE4NDU5NTY1Ij4iQUlNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzM5MDQ3MzYyODI3NTQ5MDcwMCI+IldpbmRvd3MgTGl2ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4ODI4NzcxMzQ5MzE0NTgyMTciPiJZYWhvbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjUwMzUzNzYzMTMyMDA1ODUyNDIiPiLgpLjgpY3gpJXgpL7gpIfgpKoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3NTMyMzYzMTc4NDU5NDQ0OTQzIj4iUVEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNzEzNDQxMDM0Mjk5NjYwNzQ5Ij4iR29vZ2xlIFRhbGsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNTA2ODU3MzEyNzE4NjMwODIzIj4iSUNRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY0ODc5NzkwMzc4NTI3OTM1MyI+IkphYmJlciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ3VzdG9tIiBtc2dpZD0iMTY0NDczODA1OTA1MzM1NTgyMCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUhvbWUiIG1zZ2lkPSIyNTcwOTIzNDYzMDMzOTg1ODg3Ij4i4KSX4KWD4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW9iaWxlIiBtc2dpZD0iNjUwMTQ2MzU1Nzc1NDc1MTAzNyI+IuCkruCli+CkrOCkvuCkh+CksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmsiIG1zZ2lkPSI4ODYzOTM5NjY3MDU5OTExNjMzIj4i4KSV4KS+4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4V29yayIgbXNnaWQ9IjM1MTc3OTIxNjAwMDg4OTA5MTIiPiLgpJXgpL7gpLDgpY3gpK8g4KSr4KWN4KSv4KS+4KSV4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4SG9tZSIgbXNnaWQ9IjIwNjcyNjU5NzIzMjI5NzE0NjciPiLgpJjgpLDgpJXgpYsg4KSr4KWN4KSv4KS+4KSV4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlUGFnZXIiIG1zZ2lkPSI3NTgyMzU5OTU1Mzk0OTIxNzMyIj4i4KSq4KWH4KSc4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXIiIG1zZ2lkPSIxNTQ0NDI1ODQ3ODY4NzY1OTkwIj4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FsbGJhY2siIG1zZ2lkPSIyNzEyMTc1MjAzMDY1Njc4MjA2Ij4i4KSV4KSy4KSs4KWN4KSv4KS+4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FyIiBtc2dpZD0iODczODM2MDY4OTYxNjcxNjk4MiI+IuCkleCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNvbXBhbnlNYWluIiBtc2dpZD0iNTQwNDM0MzU2NDYxNDc4OTE2Ij4i4KSV4KSu4KWN4KSq4KSo4KWAIOCkruClgeCkluCljeCkryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4i4KSu4KWB4KSW4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXJGYXgiIG1zZ2lkPSI4NTg3NjU3MTQ1MDcyNDQ2NTY1Ij4i4KSF4KSo4KWN4KSvIOCkq+CljeCkr+CkvuCkleCljeCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+IuCksOClh+CkoeCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVRlbGV4IiBtc2dpZD0iMzM2Nzg3OTk1MjQ3NjI1MDUxMiI+IuCkn+Clh+CksuClh+CkleCljeCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVR0eVRkZCIgbXNnaWQ9Ijg2MDY1MTQzNzg1ODUwMDAwNDQiPiJUVFkgVEREIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya01vYmlsZSIgbXNnaWQ9IjEzMTE0MjY5ODkxODQwNjU3MDkiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KSs4KS+4KSH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya1BhZ2VyIiBtc2dpZD0iNjQ5OTM4NzMxMjMxMTU3MDU2Ij4i4KSV4KS+4KSw4KWN4KSvIOCkquClh+CknOCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjU1OTY3NzI2MzYxMjg1NjI4ODQiPiLgpLjgpLngpL7gpK/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNbXMiIG1zZ2lkPSI3MjU0NDkyMjc1NTAyNzY4OTkyIj4iTU1TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQ3VzdG9tIiBtc2dpZD0iNzgzNzU4NjE5ODQ1ODA3MzQwNCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUJpcnRoZGF5IiBtc2dpZD0iMjgxMzM3OTg0NDIxMTM5MDc0MCI+IuCknOCkqOCljeCkruCkpuCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUFubml2ZXJzYXJ5IiBtc2dpZD0iMzg3Njc3OTc0NDUxODI4NDAwMCI+IuCkteCkvuCksOCljeCkt+Ckv+CklSDgpLjgpK7gpL7gpLDgpYvgpLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVPdGhlciIgbXNnaWQ9IjczODgxNzg5MzkwMTAxNDMwNzciPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVDdXN0b20iIG1zZ2lkPSI4NTI1OTYwMjU3ODA0MjEzODQ2Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlSG9tZSIgbXNnaWQ9IjQ0OTIyNzIzNjE0MDQzMzkxOSI+IuCkl+Clg+CkuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4i4KSV4KS+4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlT3RoZXIiIG1zZ2lkPSIyOTIzMDA4Njk1MjcyNjM5NTQ5Ij4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlTW9iaWxlIiBtc2dpZD0iMTE5OTE5MDA1MzIxMTY2MjA1Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlSG9tZSIgbXNnaWQ9IjgxNjU3NTY5NzcxODQ0ODMwOTciPiLgpJfgpYPgpLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlV29yayIgbXNnaWQ9IjUyNjgxNzI3NzIzODc2OTQ0OTUiPiLgpJXgpL7gpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlQ3VzdG9tIiBtc2dpZD0iMjA3NDAyODc1NTUyNzgyNjA0NiI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUhvbWUiIG1zZ2lkPSI2MjQxMTgxMDMyOTU0MjYzODkyIj4i4KSX4KWD4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlV29yayIgbXNnaWQ9IjEzNzE0ODkyOTAyNDI0MzMwOTAiPiLgpJXgpL7gpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVPdGhlciIgbXNnaWQ9IjUzNzcwMDc0OTU3MzU5MTU0NzgiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQ3VzdG9tIiBtc2dpZD0iNjkxOTQ1MzgzNjYxODc0OTk5MiI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xBaW0iIG1zZ2lkPSI3MDUwMzYwNjEyMzY4MzgzNDE3Ij4iQUlNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE1zbiIgbXNnaWQ9IjE0NDU1NjU0NTQyMDc2OTQ0MiI+IldpbmRvd3MgTGl2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xZYWhvbyIgbXNnaWQ9IjgyNzE0Mzk0MDg0NjkwMjEyNzMiPiJZYWhvbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xTa3lwZSIgbXNnaWQ9IjkwMTkyOTY3NDQ2MjI4MzI5NTEiPiLgpLjgpY3gpJXgpL7gpIfgpKoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sUXEiIG1zZ2lkPSI4ODg3NDg0Mzc5NDk0MTExODg0Ij4iUVEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IuCkueCljeCkr+CkvuCkmeCkhuCkieCkn+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZVdvcmsiIG1zZ2lkPSIyOTI2ODg3MDUwNTM2Mzg3MiI+IuCkleCkvuCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVPdGhlciIgbXNnaWQ9IjM5NTE3ODExMzE1NzAxMjQwODIiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlQ3VzdG9tIiBtc2dpZD0iMjI1NTIzNDE1MzcyMDg4MzIyIj4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ3VzdG9tIiBtc2dpZD0iMzU0MjQwMzY3OTgyNzI5NzMwMCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjYyNzQzMzQ4MjUxOTUzNzkwNzYiPiLgpLjgpLngpL7gpK/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVCcm90aGVyIiBtc2dpZD0iODc1NzkxMzUwNjc4NDA2NzcxMyI+IuCkreCkvuCkhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUNoaWxkIiBtc2dpZD0iMTg5MDc0NjI3NzI3Njg4MTYyNiI+IuCkrOCkmuCljeCkmuCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZURvbWVzdGljUGFydG5lciIgbXNnaWQ9IjY5MDQ4MDcxMTIxMjExMjIxMzMiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KS44KS+4KSd4KWH4KSm4KS+4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRmF0aGVyIiBtc2dpZD0iNTIyODAzNDY4NzA4MjA1MDcyNSI+IuCkrOClgeCkrOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZyaWVuZCIgbXNnaWQ9IjczMTMxMDY3NjI0ODMzOTEyNjIiPiLgpK7gpL/gpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNYW5hZ2VyIiBtc2dpZD0iNjM2NTY3Nzg2MTYxMDEzNzg5NSI+IuCkrOCljeCkr+CkteCkuOCljeCkpeCkvuCkquCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZU1vdGhlciIgbXNnaWQ9IjQ1Nzg1NzEzNTI5NjI3NTgzMDQiPiLgpIbgpK7gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVQYXJlbnQiIG1zZ2lkPSI0NzU1NjM1NTY3NTYyOTI1MjI2Ij4i4KSF4KSt4KS/4KSt4KS+4KS14KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFydG5lciIgbXNnaWQ9IjcyNjY0OTAyODUxMjAyNjI3ODEiPiLgpKrgpL7gpLDgpY3gpJ/gpKjgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWZlcnJlZEJ5IiBtc2dpZD0iMTAxNTczMDU5ODQ0MTM1NTI0Ij4i4KSm4KWN4KS14KS+4KSw4KS+IOCkieCksuCljeCksuCkv+CkluCkv+CkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlbGF0aXZlIiBtc2dpZD0iMTc5OTgxOTkzMDA4NTYxMDI3MSI+IuCkhuCkq+CkqOCljeCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNpc3RlciIgbXNnaWQ9IjE3MzU5ODM1NTQ0NzkwNzY0ODEiPiLgpKzgpLngpL/gpKjgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTcG91c2UiIG1zZ2lkPSIzOTQxMzY5Mzk0Mjg2OTgxMTciPiLgpKrgpKTgpL8t4KSq4KSk4KWN4KSo4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVDdXN0b20iIG1zZ2lkPSIyNDczNTgwNTkzMTExNTkwOTQ1Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IuCkl+Clg+CkuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLgpJXgpL7gpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsg4KSwIOCkqOCkr+CkvuCkgSBQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDgpJXgpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IuCkqOCkr+CkvuCkgSBQSU4g4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggUElOIOCkleCli+CkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4KSX4KSy4KSkIFBJTiDgpJXgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpK7gpYfgpKjgpYEg4KSl4KS/4KSa4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpKTgpY3gpK/gpLjgpKrgpJvgpL8g4KWmIOCkpeCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsX2RpYWxvZ19udW1iZXJfZm9yX2Rpc3BsYXkiIG1zZ2lkPSI2OTYxOTIxMDMxOTUwOTA5NzAiPiLgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSo4KSu4KWN4KSs4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4OTYzODM5MjQyNTY1NjUzMTkyIj4i4KS44KWH4KS14KS+IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2NyZWVuX2xvY2tlZCIgbXNnaWQ9IjcyODg0NDMwNzQ4MDY4MzI5MDQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSy4KSVIOCkl+CksOCkv+Ckj+CkleCli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5faW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9lbmFibGVkIiBtc2dpZD0iNDYxNTQwNTE2MTQxMjYwNDkiPiLgpIXgpKjgpLLgpJUg4KS14KS+IOCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpJXgpLIg4KSX4KSw4KWN4KSoIOCkruClh+CkqOClgSDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSI2ODYyNjAwMjg3OTcxNTgzNjQiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkruClh+CkqOClgSDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNzQ3ODcwMzI1NDk2NDgxMDMwMiI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYEg4KSi4KS+4KSB4KSa4KS+IOCkluCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZW1lcmdlbmN5X2NhbGwiIG1zZ2lkPSI1MzQ3NjMzNzg0NDAxMjg1MjI1Ij4i4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkleCksuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4i4KSV4KSy4KSu4KS+IOCkq+CksOCljeCkleCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9jb3JyZWN0IiBtc2dpZD0iOTAzOTAwODY1MDM2MjI2MTIzNyI+IuCkuOCkueClgCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fd3JvbmciIG1zZ2lkPSI0MzE3OTU1MDE0OTQ4MTA4Nzk0Ij4i4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Bhc3N3b3JkX3dyb25nIiBtc2dpZD0iNTczNzgxNTM5MzI1MzE2NTMwMSI+IuCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IuCkheCkpOCljeCkr+CkvuCkp+Ckv+CklSDgpK7gpYvgpLngpKHgpL4g4KSW4KWL4KSy4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClgiDgpKzgpKLgpYAg4KSt4KSP4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wbHVnZ2VkX2luIiBtc2dpZD0iODA1Nzc2MjgyODM1NTU3MjMxNSI+IuCkmuCkvuCksOCljeCknCDgpLngpYHgpIHgpKbgpYgsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiLgpJrgpL7gpLDgpY3gpJwg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9iYXR0ZXJ5X3Nob3J0IiBtc2dpZD0iNDQ3NzI2NDg0OTM4Njg1MDI2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2xvd19iYXR0ZXJ5IiBtc2dpZD0iMTQ4Mjg3Mzk4MTkxOTI0OTc0MCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpJrgpL7gpLDgpY3gpJzgpLAg4KSc4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpK7gpL4gU0lNIOCkleCkvuCksOCljeCkoSDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4i4KSr4KWL4KSo4KSu4KS+IFNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4iU0lNIOCkleCkvuCksOCljeCkoSDgpJjgpYHgpLjgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSoIOCkteCkviDgpKrgpKLgpY3gpKgg4KSu4KS/4KSy4KWN4KSm4KWI4KSo4KWkIFNJTSDgpJXgpL7gpLDgpY3gpKEg4KS54KS+4KSy4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4i4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpK/gpYvgpJfgpY3gpK8gU0lNIOCkleCkvuCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsgU0lNIOCkleCkvuCksOCljeCkoSDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkheCkleCljeCkt+CkriDgpK3gpK/gpYvgpaRcbiDgpIXgpLDgpY3gpJXgpYsgU0lNIOCkleCkvuCksOCljeCkoeCkleCliyDgpLLgpL7gpJfgpL8g4KSG4KSr4KSo4KWLIOCkpOCkvuCksOCksOCkueCkv+CkpCDgpLjgpYfgpLXgpL4g4KSq4KWN4KSw4KSm4KS+4KSv4KSV4KS44KSB4KSXIOCkuOCkruCljeCkquCksOCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjAxNTk0OTA1MTUyNzQ2ODg2Ij4i4KSF4KSY4KS/4KSy4KWN4KSy4KWLIOCkn+CljeCksOCkr+CkvuCklSDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjA4OTI5NzY1MDQ4MTI5MjM2MyI+IuCkheCksOCljeCkleCliyDgpJ/gpY3gpLDgpK/gpL7gpJUg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU5MDg4Nzg2NzgwMTI4MDAxIj4i4KSw4KWL4KSV4KWN4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI1ODg4NDIyOTM4MzUxMDE5NDI2Ij4i4KSs4KSc4KS+4KSJ4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTYyMzE4Mzc4NzY2OTg3NjAxIj4i4KSs4KSf4KSoIOCksOCli+CkleCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsc19vbmx5IiBtc2dpZD0iNjczMzk3ODMwNDM4NjM2NTQwNyI+IuCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpJXgpLLgpLngpLDgpYIg4KSu4KS+4KSk4KWN4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMTQzMzg5MjI0OTg2MDI4NTAxIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCksuCklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4iU0lNIOCkleCkvuCksOCljeCkoSBQVUst4KSy4KSVIOCkl+CksOCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSo4KS/4KSw4KWN4KSm4KWH4KS24KSVIOCkteCkviDgpJfgpY3gpLDgpL7gpLngpJUg4KS44KWH4KS14KS+IOCkuOCkruCljeCkquCksOCljeCklSDgpLngpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCksuCklSDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4iU0lNIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpLLgpJUg4KSX4KSw4KS/4KSB4KSm4KWILi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2NDgxNjIzODMwMzQ0MTA3MjIyIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpLLgpJUg4KSi4KS+4KSB4KSa4KS+IOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkluCkv+CkmuCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSIyNzI1OTczMjg2MjM5MzQ0NTU1Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkquCkvuCkuOCkteCksOCljeCkoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJbgpL/gpJrgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCDgpKrgpJvgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSl4KSqIOCkheCkuOCkq+CksiDgpJXgpYvgpLjgpL/gpLjgpLngpLDgpYIsIOCkpOCkquCkvuCkiOCkgeCkleCliyBHb29nbGUg4KS44KS+4KSH4KSoIOCkh+CkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWAIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpK3gpKjgpL/gpKjgpYcg4KSb4KWkXG5cbiAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL7gpLLgpL7gpIgg4KSV4KWL4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQg4KSq4KSb4KS/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkheCksOClgiDgpKfgpYfgpLDgpYgg4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClguCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKggR29vZ2xlIOCkuOCkvuCkh+CkqCDgpIfgpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CksCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxMjgxMDYzOTk3NDU3NTU2MDQiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkleCli+CktuCkv+CkuCDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpYsg4KSb4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkheCksOClgiDgpKfgpYfgpLDgpYgg4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClguCkquCkm+Ckvywg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkq+CljeCkr+CkvuCkn+CljeCksOCkvyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkueClgeCkqOClhyDgpJsg4KSwIOCkuOCkrOCliCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSh4KWH4KSf4KS+IOCkueCksOCkvuCkieCkqOClhyDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSr4KWL4KSoIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKzgpKLgpYAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkpOCljeCkqOCkueCksOClgiDgpKrgpJvgpL8sIOCkq+Cli+CkqCDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpLngpYHgpKjgpYcg4KSbIOCksCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjgwODczNTE2NDkzOTM0MzY1Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkn+CljeCkr+CkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQg4KSF4KSsIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpKvgpYvgpKggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJfgpLDgpY3gpKjgpYHgpK3gpK/gpYvgpaQg4KSF4KSsIOCkq+Cli+CkqCDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjI1MTQ4MDM0MzM5NDM4OTY2NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+IuCkouCkvuCkgeCkmuCkviDgpKzgpL/gpLDgpY3gpLjgpKjgpYEg4KSt4KSv4KWLPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+IuCkluCkvuCkpOCkviDgpIXgpKjgpLLgpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiLgpKjgpL/gpJXgpYgg4KSn4KWH4KSw4KWIIOCkleCli+CkuOCkv+CkuOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIEdvb2dsZSDgpJbgpL7gpKTgpL7gpLjgpIHgpJcg4KS44KS+4KSH4KSoIOCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iODg0Njg4MTQyNDEwNjQ4NDQ0NyI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkqOCkvuCkriAo4KSH4KSu4KWH4KSyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI1OTU4MDI4MzgzOTU0NzM4NTI4Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4i4KS44KS+4KSH4KSoIOCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iMTM2NDA1MTQ3MzM0NzQ4NTkwOCI+IuCkheCkruCkvuCkqOCljeCkryDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpKjgpL7gpK4g4KS14KS+IOCkquCkvuCkuOCkteCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkv+CksOCljeCkuOCkqOClgeCkreCkr+Cliz9cbiDgpK3gpY3gpLDgpK7gpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS4IjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iNzExNDYyNzM1MTI4NjkzMzg2NyI+IuCknOCkvuCkgeCkmiDgpJfgpLDgpY3gpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+IuCkluCli+CksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4i4KSG4KS14KS+4KScIOCkmuCkvuCksuClgSDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29mZl9sYWJlbCIgbXNnaWQ9Ijk5NjgyMjgyNTE1NDMxOTAyNiI+IuCkp+CljeCkteCkqOCkvyDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX3N0YXJ0IiBtc2dpZD0iMzk0MTA0NTUwMjkzMzE0Mjg0NyI+IuCkouCkvuCkgeCkmuCkviDgpLjgpYHgpLDgpYEg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+IuCkouCkvuCkgeCkmuCkviDgpLngpJ/gpL7gpIfgpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NlbGxfYWRkZWQiIG1zZ2lkPSI2NzU2MDMxMjA4MzU5MjkyNDg3Ij4i4KS44KWH4KSyIOCkpeCkqiDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2RldGVjdGVkIiBtc2dpZD0iNDk4ODczMDg5NTU1NDA1NzA1OCI+IuCkouCkvuCkgeCkmuCkviDgpKrgpYHgpLDgpL4g4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDgpLXgpL/gpJzgpYfgpJ8gJTIkZCBvZiAlMyRk4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuCkteCkv+CknOClh+CknyDgpKXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLgpJbgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KS14KS/4KS44KWN4KSk4KS+4KSwIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSt4KSk4KWN4KSV4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4KS14KS/4KSc4KWH4KSf4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJvgpKjgpYzgpJ/gpJXgpLDgpY3gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLgpLjgpY3gpKXgpL/gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i4KSu4KS/4KSh4KS/4KSv4KS+IOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCko+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i4KS14KS/4KSc4KWH4KSfIOCkquClgeCkqOCkg+CkleCljeCksOCkriDgpJfgpLDgpY3gpKjgpYcg4KS44KWB4KSw4KWBIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IuCkteCkv+CknOClh+CknyDgpKrgpYHgpKjgpIPgpJXgpY3gpLDgpK4g4KS44KSu4KS+4KSq4KWN4KSkIOCkreCkj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IuCkteCkv+CknOClh+CknyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgpK7gpYfgpJ/gpL7gpIfgpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLgpIXgpKjgpLLgpJUg4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IuCkuOCljeCksuCkvuCkh+CkoSDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IuCkouCkvuCkgeCkmuCkviDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuCkq+Clh+CkuCDgpIXgpKjgpLLgpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUGluIOCkheCkqOCksuCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IuCkquCkvuCkuOCkteCksOCljeCkoSDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLgpKLgpL7gpIHgpJrgpL4g4KSV4KWN4KS34KWH4KSk4KWN4KSw4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IuCkuOCljeCksuCkvuCkh+CkoSDgpJXgpY3gpLfgpYfgpKTgpY3gpLDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iP+Clp+ClqOClqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2NoYXJhY3RlciIgbXNnaWQ9IjczMzY0NzA1MzUzODUwMDk1MjMiPiLgpIXgpJXgpY3gpLfgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF93b3JkIiBtc2dpZD0iNzA3NTU3MDMyODM3NDkxODY2MCI+IuCktuCkrOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmsiIG1zZ2lkPSI1ODE1NTA4ODgwNzgyNDg4MjY3Ij4i4KSy4KS/4KSZ4KWN4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluZSIgbXNnaWQ9IjU3NjQyNjcyMzUwMjYxMjA4ODgiPiLgpLLgpL7gpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX2FtcG0iIG1zZ2lkPSI0NTg0MzM4MDgzNTI5MzU1OTgyIj4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JVA8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9jYXBfYW1wbSIgbXNnaWQ9IjIwODM0NjU5OTI5NDA0NDQzNjYiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4i4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+IOCkquCksOClgOCkleCljeCkt+CkoyDgpIXgpLjgpKvgpLIg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiJGQUNUT1JZX1RFU1Qg4KSV4KS+4KSw4KWN4KSw4KS14KS+4KSH4KSy4KWHIC9zeXN0ZW0vYXBwIOCkruCkviDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSq4KWN4KSv4KS+4KSV4KWH4KSc4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpL7gpKTgpY3gpLAg4KS44KSu4KSw4KWN4KSl4KSoIOCkl+CksOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+IuCkleClgeCkqOCliCDgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KSr4KWH4KSy4KS+IOCkquCkvuCksOCljeCkqCDgpLjgpJXgpL/gpI/gpKgg4KSc4KS44KSy4KWHIEZBQ1RPUllfVEVTVCDgpJXgpL7gpLDgpY3gpK8g4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiLgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTk4NzQ4Mzk3NzgzNDYwMzg3MiI+IuCkr+CkuCBcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+XCIg4KSu4KS+IOCkreCkj+CkleCliyDgpKrgpYPgpLfgpY3gpKDgpLLgpYcg4KSs4KSk4KS+4KSJ4KSB4KSbOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+IuCknOCkvuCkreCkvuCkuOCljeCkleCljeCksOCkv+CkquCljeCknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3RpdGxlIiBtc2dpZD0iMjYxOTM3NjU1NTUyNTExNjU5MyI+IuCkruCkvuCksOCljeCkl+CkqOCkv+CksOCljeCkpuClh+CktuCkqCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfcG9zaXRpdmVfYnV0dG9uIiBtc2dpZD0iMzExMjc1MjAxMDYwMDQ4NDEzMCI+IuCkr+CkuCDgpKrgpYPgpLfgpY3gpKDgpLLgpL7gpIgg4KSb4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfbmVnYXRpdmVfYnV0dG9uIiBtc2dpZD0iNTYxNDg2MTI5MzAyNjA5OTcxNSI+IuCkr+CkueClgCDgpKrgpYPgpLfgpY3gpKDgpK7gpL4g4KSw4KS54KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWQiIG1zZ2lkPSIzNDY4ODE2MzU3MDk1Mzc4NTkwIj4iPHhsaWZmOmcgaWQ9Ik1FU1NBR0UiPiVzPC94bGlmZjpnPlxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CliyDgpKrgpYfgpJzgpKzgpL7gpJ8g4KSo4KWH4KSt4KS/4KSX4KWH4KSfIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbIOCkreCkqOCljeCkqOClhyDgpKjgpL/gpLbgpY3gpJrgpKQg4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbGFiZWwiIG1zZ2lkPSI2ODYwMjYxNzU4NjY1ODI1MDY5Ij4i4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvdWJsZV90YXBfdG9hc3QiIG1zZ2lkPSI0NTk1MDQ2NTE1NDAwMjY4ODgxIj4i4KSc4KWB4KSV4KWN4KSk4KS/OiDgpJzgpYHgpK7gpLLgpL7gpIgg4KSg4KWC4KSy4KWLIOCksCDgpLjgpL7gpKjgpYsg4KSq4KS+4KSw4KWN4KSoIOCkpuClgeCkiCDgpKrgpJ/gpJUg4KS54KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+IuCkuOCljeCkteCkpOCkgyDgpK3gpLDgpY3gpKjgpYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXR1cF9hdXRvZmlsbCIgbXNnaWQ9IjcxMDM0OTUwNzAxODA1OTA4MTQiPiLgpIXgpJ/gpYvgpKvgpL/gpLIg4KS44KWH4KSf4KSF4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3NfbmFtZV9zZXBhcmF0b3IiIG1zZ2lkPSI2MzUwMTQ1MTU0Nzc5NzA2NzcyIj4iICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9uYW1lX2Zvcm1hdCIgbXNnaWQ9IjMyNjgwNDEwNTQ4OTkyMTQ5NDUiPiIk4KWnJOClqCTgpakiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfc2VwYXJhdG9yIiBtc2dpZD0iNzQ4MzMwNzg5MzE3MDMyNDEyOSI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X2Zvcm1hdCIgbXNnaWQ9IjQ4NzQ0NTk0NTU3ODY4MjczNDQiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcm92aW5jZSIgbXNnaWQ9IjIyMzE4MDY1NTM4NjM0MjIzMDAiPiLgpKrgpY3gpLDgpL7gpKjgpY3gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wb3N0YWxfY29kZSIgbXNnaWQ9IjQ2OTY0MzA0MDc2ODkzNzcxMDgiPiLgpLngpYHgpLLgpL7gpJXgpYAg4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfc3RhdGUiIG1zZ2lkPSI2OTg4ODk0MTk1NTIwMDQ0NjEzIj4i4KSw4KS+4KSc4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfemlwX2NvZGUiIG1zZ2lkPSI4Njk3NTQ0NTkyNjI3MzIyOTQ2Ij4iWklQIOCkleCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2NvdW50eSIgbXNnaWQ9IjIzNzA3Mzc3MTAyMDM2Mjg5MSI+IuCkleCkvuCkieCkqOCljeCkn+ClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiLgpJ/gpL7gpKrgpYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kaXN0cmljdCIgbXNnaWQ9Ijg0MDA3MzUwNzMzOTIyNjc2NzIiPiLgpJzgpL/gpLLgpY3gpLLgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kZXBhcnRtZW50IiBtc2dpZD0iNTM0MzI3OTQ2MjU2NDQ1MzMwOSI+IuCkteCkv+CkreCkvuCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ByZWZlY3R1cmUiIG1zZ2lkPSIyMDI4NDk5NDg1MDY1ODAwNDE5Ij4i4KSq4KWN4KSw4KS24KS+4KS44KSV4KWA4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3BhcmlzaCIgbXNnaWQ9IjgyMDIyMDYxMDU0Njg4MjAwNTciPiLgpKrgpYfgpLDgpL/gpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+IuCkleCljeCkt+Clh+CkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2VtaXJhdGUiIG1zZ2lkPSIyODkzODgwOTc4ODM1Njk4ODE4Ij4i4KSH4KSu4KS/4KSw4KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3NzUyNjU3NzU0MDUxMDY5ODMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpIfgpKTgpL/gpLngpL7gpLgg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4i4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSy4KWHIOCkreCljeCksOCkruCkoyDgpJfgpLDgpYfgpJXgpYsg4KS44KSs4KWIIFVSTCDgpLngpLDgpYLgpJXgpYsg4KSH4KSk4KS/4KS54KS+4KS4IOCksCDgpKzgpY3gpLDgpL7gpIngpJzgpLDgpJXgpL4g4KS44KSs4KWIIOCkrOClgeCkleCkruCkvuCksOCljeCkleCkueCksOClgiDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkqOCli+Cknzog4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuCkvuCkiCDgpKTgpYfgpLjgpY3gpLDgpYsg4KSq4KSV4KWN4KS3IOCkrOCljeCksOCkvuCkieCknOCksOCkueCksOClguCkpuCljeCkteCkvuCksOCkviDgpLXgpL4g4KS14KWH4KSsIOCkrOCljeCksOCkvuCkieCknCDgpJfgpLDgpY3gpKjgpYcg4KSV4KWN4KS34KSu4KSk4KS+4KSm4KWN4KS14KS+4KSw4KS+IOCkrOCksuCkquClguCksOCljeCkteCklSDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KS/4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzE0Nzg1MTY1MjczMzE0NDkwIj4i4KS14KWH4KSsIOCkrOClgeCkleCkruCkvuCksOCljeCkleCkueCksOClgiDgpLAg4KSH4KSk4KS/4KS54KS+4KS4IOCksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkreCko+CljeCkoeCkvuCksCDgpJfgpLDgpL/gpI/gpJXgpYsg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSV4KWLIOCkh+CkpOCkv+CkueCkvuCkuCDgpLXgpL4g4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkrOCljeCksOCkvuCknOCksCDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KS+4KSJ4KSoIOCkteCkviDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KS44KSV4KWN4KSm4KSb4KWkIOCkn+Ckv+CkquCljeCkquCko+ClgDog4KSv4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KScIOCkl+CksOCljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KS44KS+4KSlIOCkpOClh+CkuOCljeCksOCliy3gpKrgpL7gpLDgpY3gpJ/gpYAg4KSs4KWN4KSw4KS+4KSJ4KSc4KSwIOCkteCkviDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+IOCksuCkvuCkl+ClgiDgpJfgpLDgpL/gpI/gpJXgpYsg4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ5NzM4OTUzMTAxNDE4NTUwOSI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKjgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkreCkj+CkleCliyDgpKzgpY3gpLDgpL7gpIngpJzgpLDgpJXgpYsg4KSH4KSk4KS/4KS54KS+4KS4IOCkteCkviDgpKzgpYHgpJXgpK7gpL7gpLDgpY3gpJXgpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkuOCkvuCkr+CkpiDgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkruClh+Ckn+CljeCkqCDgpLXgpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSo4KWL4KSfOiDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KScIOCkl+CksOCljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL7gpLjgpLngpL/gpKTgpJXgpL4g4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLXgpL4g4KSk4KWH4KS44KWN4KSw4KWLLSDgpKrgpJXgpY3gpLcg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSm4KWN4KS14KS+4KSw4KS+IOCkuOCkvuCkr+CkpiDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KS+4KSIIOCksuCkvuCkl+ClgSDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSC4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiLgpI/gpIngpJ/gpL4g4KSG4KSy4KSw4KWN4KSuIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+IuCkuOCljeCkpeCkvuCkquCkqOCkviDgpJfgpLDgpL/gpI/gpJXgpYsg4KS44KSZ4KWN4KSV4KWH4KSkIOCkmOCkoeClgCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KS44KSZ4KWN4KSV4KWH4KSkIOCkuOCkruCkryDgpK7gpL/gpLLgpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSV4KWH4KS54KWAIOCkuOCkmeCljeCkleClh+CkpCDgpJjgpKHgpYAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpLjgpYHgpLXgpL/gpKfgpL4g4KSV4KS+4KSw4KWN4KSv4KS+4KSo4KWN4KS14KSv4KSoIOCkqOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiLgpK3gpY3gpLXgpL7gpIfgpLjgpK7gpYfgpLIg4KSl4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSt4KWN4KS14KS+4KSH4KS44KSu4KWH4KSyIOCkh+CkqOCkrOCkleCljeCkuOCkruCkviDgpLjgpKjgpY3gpKbgpYfgpLYg4KSl4KSq4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iNTk2MjIyNDE1ODk1NTI3MzkzMiI+IuCkreClguCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpK7gpKTgpL/gpLngpLDgpYIg4KSs4KWN4KSw4KS+4KSJ4KSc4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSIxMDgzNzQzMjM0NTIyNjM4NzQ3Ij4i4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSV4KWLIOCkreClgi3gpLjgpY3gpKXgpL7gpKgg4KSF4KSo4KWB4KSu4KSk4KS/4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyAg4KS44KWN4KSl4KS+4KSoIOCkuOClguCkmuCkqOCkviDgpK7gpKjgpKrgpLDgpYAg4KS14KWH4KSsIOCkuOCkvuCkh+Ckn+CkueCksOClguCkruCkviDgpKrgpKDgpL7gpIngpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpLjgpLLgpL7gpIgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9IjU1NjgxMzkxMDA2NDU4MjkxMTciPiLgpKrgpY3gpK/gpJXgpYfgpJzgpLngpLDgpYLgpJXgpYsg4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9Ijg0Mzc1OTAxOTA5OTA4NDMzODEiPiLgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkr+Cli+Ckl+CljeCkryDgpJsg4KSV4KS/IOCkreCkqOClh+CksCDgpLDgpYHgpJzgpYEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iNDE4Nzc4Njc5MzM2MDMyNjY1NCI+IuCkj+CkieCkn+CkviDgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KSw4KWB4KSc4KWB4KSV4KSw4KWN4KSk4KS+4KSu4KS+IOCkrOCkvuCkgeCkp+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4i4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkquCljeCkr+CkvuCkleClh+CknCDgpKrgpY3gpLDgpK7gpL7gpKPgpL/gpKTgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSF4KSo4KWB4KSw4KWL4KSn4KS54KSw4KWCIOCkrOCkqOCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VyaWFsUG9ydCIgbXNnaWQ9IjU0NjA4MzMyNzY1NDYzMTA3NiI+IuCkquCkueClgeCkgeCkmiDgpLjgpL/gpLDgpL/gpK/gpLIg4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiLgpLngpYvgpLLgpY3gpKHgpLDgpLLgpL7gpIggU2VyaWFsTWFuYWdlciBBUEkg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CksCDgpLjgpL/gpLDgpL/gpK/gpLIg4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI1MDc3Nzc0Mjk3OTQzNDA5Mjg1Ij4i4KS14KS/4KS34KSv4KS44KWC4KSa4KWAIOCkquCljeCksOCkpuCkvuCkpOCkvuCksuCkvuCkiCDgpKzgpL7gpLngpY3gpK8g4KSw4KWC4KSq4KSu4KS+IOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiLgpLjgpYfgpLLgpKzgpL7gpJ8g4KSn4KS+4KSw4KSV4KSy4KWHIOCkteCkv+Ckt+Ckr+CkteCkuOCljeCkpOClgSDgpKrgpY3gpLDgpKbgpL7gpK/gpJXgpLngpLDgpYLgpLjgpK7gpY3gpK7gpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkquCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKbgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4i4KS44KWN4KS14KSa4KS+4KSy4KS/4KSkIOCkieCkquCkleCksOCkoyDgpIXgpKrgpKHgpYfgpJ/gpLngpLDgpYIg4KS54KSk4KWL4KSk4KWN4KS44KS+4KS54KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUxvY2siIG1zZ2lkPSIxNjU1NjI1ODMyMTY2Nzc4NDkyIj4i4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkieCkquCkleCksOCkoyDgpIXgpKrgpJfgpY3gpLDgpYfgpKEg4KSX4KSw4KWN4KSoIOCkl+CliOCksCDgpKrgpL7gpLDgpLjgpY3gpKrgpLDgpL/gpJUg4KSq4KWB4KSo4KSD4KSs4KWB4KSf4KSV4KWLIOCksuCkvuCkl+CkvyDgpIngpJrgpL/gpKQg4KS44KSu4KSv4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpK7gpL4g4KSc4KS+4KSo4KS+4KSV4KS+4KSw4KWAIOCkquCljeCksOCkuOCljeCkpOCkvuCkteCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbWVzc2FnZSIgbXNnaWQ9Ijc2NzM0NDY4NzEzOTE5NTc5MCI+IuCkleClhyDgpKTgpKrgpL7gpIjgpIIg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSy4KWHIOCkr+CliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KS44KSu4KWN4KSd4KWH4KSV4KWLIOCkmuCkvuCkueCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25vdG5vdyIgbXNnaWQ9IjYzODk2NzUzMTY3MDY2OTk3NTgiPiLgpIXgpLngpL/gpLLgpYcg4KS54KWL4KSH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiLgpLjgpK7gpY3gpJ3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25ldmVyIiBtc2dpZD0iODI3NDMzMDI5Njc4NTg1NTEwNSI+IuCkleCkueCkv+CksuCljeCkr+CliCDgpKrgpKjgpL8g4KS54KWL4KSH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4i4KSv4KWLIOCkquClg+Ckt+CljeCkoCDgpJbgpYvgpLLgpY3gpKgg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0X2NvcGllZCIgbXNnaWQ9IjQ5ODU3Mjk1MjQ2NzAxMzEzODUiPiLgpJXgpY3gpLLgpL/gpKrgpKzgpYvgpLDgpY3gpKHgpK7gpL4g4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSqIOCkl+CksOCkv+Ckj+CkleCliyDgpKrgpL7gpKDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb3JlX2l0ZW1fbGFiZWwiIG1zZ2lkPSI0NjUwOTE4OTIzMDgzMzIwNDk1Ij4i4KSs4KSi4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcGVuZF9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI1NzIyMTQ0NjE2NzYwMTU2NDIiPiLgpK7gpYfgpKjgpYErIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiLgpKDgpL7gpIngpIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2VudGVyX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjc0MzM2Mjc4NTExMTMwOTY2OCI+IuCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiLgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2hfZ28iIG1zZ2lkPSI4Mjk4MDE2NjY5ODIyMTQxNzE5Ij4i4KSW4KWL4KSc4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zZWFyY2giIG1zZ2lkPSI2NzQ5ODI2NjM5MDk4NTEyMTIwIj4i4KSW4KWL4KSc4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9xdWVyeSIgbXNnaWQ9IjU5MTE3Nzg1OTMxMjUzNTUxMjQiPiLgpJzgpL/gpJzgpY3gpJ7gpL7gpLjgpL4g4KSW4KWL4KScIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4i4KSq4KWN4KSw4KS24KWN4oCN4KSoIOCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc3VibWl0IiBtc2dpZD0iMjY4ODQ1MDEzMzI5Nzk4MzU0MiI+IuCknOCkv+CknOCljeCknuCkvuCkuOCkviDgpKrgpYfgpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl92b2ljZSIgbXNnaWQ9IjI0NTMyMDM2OTU2NzQ5OTQ0NDAiPiLgpK3gpY3gpLXgpL7gpIfgpLgg4KSW4KWL4KSc4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ190aXRsZSIgbXNnaWQ9Ijc0NjA2OTQwNzAzMDk3MzAxNDkiPiLgpJvgpYvgpI/gpLAg4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkl+CksOCljeCkqOClhyDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPuCksuClhyDgpLjgpY3gpKrgpLDgpY3gpLfgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWN4KSb4KWkIOCkuOCljeCkquCksOCljeCkt+CkpuCljeCkteCkvuCksOCkviDgpIXgpKjgpY3gpLXgpYfgpLfgpKMg4KS44KSV4KWN4KS34KSuIOCkreCkj+CkleCliyDgpKzgpYfgpLLgpL4sIOCkpOCkquCkvuCkiOCkgSDgpIbgpKvgpY3gpKjgpYsg4KSU4KSB4KSy4KS+4KSV4KWLIOCkruClgeCkqOCkvyDgpK3gpI/gpJXgpL4g4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpLjgpYHgpKjgpY3gpKgg4KS14KS+IOCkteCkv+CkteCksOCkoyDgpLngpYfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkteCkviDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLjgpIHgpJcg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIfgpLbgpL7gpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjcwODE5OTY3Mjg1MjM3MzE5NSI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz7gpLLgpYcg4KS44KWN4KSq4KSw4KWN4KS34KSm4KWN4KS14KS+4KSw4KS+IOCkheCkqOCljeCkteClh+Ckt+CkoyDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOCljeCkm+ClpCDgpLjgpY3gpKrgpLDgpY3gpLfgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkuOCkleCljeCkt+CkriDgpK3gpI/gpJXgpYsg4KSs4KWH4KSy4KS+IOCkpOCkquCkvuCkiOCkgSDgpIbgpKvgpY3gpKjgpYsg4KSU4KSB4KSy4KS+4KSV4KWLIOCkruClgeCkqOCkvyDgpK3gpI/gpJXgpL4g4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpLjgpYHgpKjgpY3gpKgg4KS14KS+IOCkteCkv+CkteCksOCkoyDgpLngpYfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkteCkviDgpKvgpYvgpKjgpLjgpIHgpJcg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIfgpLbgpL7gpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4i4KWnIOCkruCkueCkv+CkqOCkviDgpIXgpJjgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IuClpyDgpK7gpLngpL/gpKjgpL4g4KSF4KSY4KS/Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJudW1fc2Vjb25kc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0ODY5ODcwMDU2NTQ3ODk2MDExIj4i4KWnIOCkuOClh+CkleClh+CkqOCljeCkoSDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM5MDM3MDY4MDQzNDk1NTYzNzkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKEg4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJudW1fbWludXRlc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMzA2Nzg3NDMzMDg4ODEwMTkxIj4i4KWnIOCkruCkv+CkqOClh+CknyDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIxNzY5NDIwMDg5MTU0NTUxMTYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL/gpKjgpYfgpJ8g4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJudW1faG91cnNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iOTE1MDc5Nzk0NDYxMDgyMTg0OSI+IuClpyDgpJjgpKjgpY3gpJ/gpL4g4KSF4KSY4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDY3MjczMjM5NTg3NTg3NTY5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSY4KSo4KWN4KSf4KS+IOCkheCkmOCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibGFzdF9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzA2OTk5MjgwODE2NDMxODI2OCI+IuCkheCkqOCljeCkpOCkv+CkriA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpKbgpL/gpKgiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJsYXN0X21vbnRoIiBtc2dpZD0iMzk1OTM0NjczOTk3OTA1NTQzMiI+IuCkheCkqOCljeCkpOCkv+CkriDgpK7gpLngpL/gpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRlciIgbXNnaWQ9IjUyMTE5NzUwMjI4MTU1NTQ4NDAiPiLgpKrgpYHgpLDgpL7gpKjgpYsiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9kYXlzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg2MTM1ODUzNDM5ODExNTgyMCI+IuCkueCkv+CknOCliyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ3OTU4NjQ2NjE1MzMxNDYzMyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkpuCkv+CkqCDgpIXgpJjgpL8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9zZWNvbmRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjcyOTc0NTU2MDk1NDkwNTEwMiI+IuClpyDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEyNDE5MjYxMTY0NDM5NzQ2ODciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+IuClpyDgpK7gpL/gpKjgpYfgpJ/gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMzMzA3MTM5MzYzOTk0NDg3NDkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPuCkruCkv+CkqOClh+Ckn+CkruCkviI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNzE2NDM1MzM0MjQ3Nzc2OTk5OSI+IuClpyDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzI5MDY3NzM1MzcyNzM4OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkmOCkqOCljeCkn+CkvuCkruCkviI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NDEzMDg4NzQzMDA5ODM5NTE4Ij4i4KSt4KWL4KSy4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1MTA5NDQ5Mzc1MTAwOTUzMjQ3Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSm4KS/4KSo4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX3NlY29uZHNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTg0OTAzNjg0MDIwMDA2OTExOCI+IuClpyDgpLjgpYfgpJXgpYfgpKjgpY3gpKEg4KSF4KSY4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNjk5MTY5MzY2NjUwOTMwNDE1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KShIOCkheCkl+CkvuCkoeCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9taW51dGVzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjYzNjE0OTAxNDcxMTM4NzE1NDUiPiLgpacg4KSu4KS/4KSo4KWH4KSfIOCkheCkmOCkvyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODUxMTY0OTY4NTk3MTUwNzEwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSu4KS/4KSo4KWH4KSfIOCkheCkmOCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9ob3Vyc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0Nzk2MjEyMDM5NzI0NzIyMTE2Ij4i4KWnIOCkmOCkqOCljeCkn+CkviDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY4ODk5NzA3NDU3NDg1Mzg5MDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL4g4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2RheXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODQ2MzE2MTcxMTQ5MjY4MDMwOSI+IuCkueCkv+CknOCliyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzQ1MzM0MjYzOTYxNjQ4MTE5MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkpuCkv+CkqCDgpIXgpJjgpL8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NDIyMjUzNzA3OTUwNjYyOTkiPiLgpacg4KS44KWH4KSV4KSo4KWN4KShIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDk1ODgwMTA4ODI1ODA1MTA4Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NjI3ODYxNDk5MjgyODQ4NzgiPiLgpacg4KSu4KS/4KSo4KWH4KSf4KSu4KS+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MjE2MTEzMjkyNzA2NTY4NzI2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSu4KS/4KSo4KWH4KSf4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI3NDcwODExODEyNDA0NTI0NiI+IuClpyDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM3MDUzNzM3NjY3OTgwMTM0MDYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjIxNzg1NzYyNTQzODU3Mzk4NTUiPiLgpK3gpYvgpLLgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI5NzMwNjI5NjgwMzgzNTU5OTEiPiLgpKbgpL/gpKg8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfZGF0ZSIgbXNnaWQ9IjkwOTM5NDk3NTc3NTc0NDUxMTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JXM8L3hsaWZmOmc+IOCkruCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl90aW1lIiBtc2dpZD0iNTUwNjgzMTI0NDI2MzA4Mzc5MyI+Ijx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4g4KSu4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3llYXIiIG1zZ2lkPSI1MDQwMzk1NjQwNzExODY3MTc3Ij4iPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiDgpK7gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXkiIG1zZ2lkPSI4MTQ0MTk1Nzc2MDU4MTE5NDI0Ij4i4KSm4KS/4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5cyIgbXNnaWQ9IjQ3NzQ1NDc2NjEwMjEzNDQ2MDIiPiLgpKbgpL/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyIiBtc2dpZD0iMjEyNjc3MTkxNjQyNjE4OTQ4MSI+IuCkmOCkqOCljeCkn+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJzIiBtc2dpZD0iODk0NDI0MDA1MjY2ODUyOTkzIj4i4KSY4KSo4KWN4KSf4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlIiBtc2dpZD0iOTE0ODg3ODY1NzcwMzc2OTg2OCI+IuCkruCkv+CkqOClh+CknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZXMiIG1zZ2lkPSI1NjQ2MDAxMDA1ODI3MDM0NTA5Ij4i4KSu4KS/4KSo4KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kIiBtc2dpZD0iMzE4NDIzNTgwODAyMTQ3OCI+IuCkuOClh+CkleClh+CkqOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlY29uZHMiIG1zZ2lkPSIzMTYxNTE1MzQ3MjE2NTg5MjM1Ij4i4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiLgpLngpKrgpY3gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiLgpLngpKrgpY3gpKTgpL7gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyIiBtc2dpZD0iNDAwMTExODIyMTAxMzg5MjA3NiI+IuCkteCksOCljeCktyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJzIiBtc2dpZD0iNjg4MTU3NzcxNzk5MzIxMzUyMiI+IuCkteCksOCljeCkt+CkueCksOClgiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY5NjIwMTU1MjgzNzI5Njk0ODEiPiLgpacg4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxODg2MTA3NzY2NTc3MTY2Nzg2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJkdXJhdGlvbl9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDkxNTQxNDAwMjU0NjA4NTYxNyI+IuClpyDgpK7gpL/gpKjgpYfgpJ8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMxNjUxODcxNjkyMjQ5MDg3NzUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL/gpKjgpYfgpJ8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODkxNzQ2NzQ5MTI0ODgwOTk3MiI+IuClpyDgpJjgpKjgpY3gpJ/gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM4NjM5NjI4NTQyNDY3NzM5MzAiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGl0bGUiIG1zZ2lkPSIzNTM0NTA5MTM1NDM4MzUzMDc3Ij4i4KSt4KS/4KSh4KS/4KSv4KWLIOCkuOCkruCkuOCljeCkr+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X2ludmFsaWRfcHJvZ3Jlc3NpdmVfcGxheWJhY2siIG1zZ2lkPSIzMTg2NjcwMzM1OTM4NjcwNDQ0Ij4i4KSv4KWLIOCkreCkv+CkoeCkv+Ckr+CliyDgpK/gpLgg4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpY3gpJ/gpY3gpLDgpL/gpK7gpL/gpJkg4KSX4KSw4KWN4KSoIOCkruCkvuCkqOCljeCkryDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF91bmtub3duIiBtc2dpZD0iMzQ1MDQzOTE1NTE4NzgxMDA4NSI+IuCkr+CliyDgpK3gpL/gpKHgpL/gpK/gpYsg4KSa4KSy4KS+4KSJ4KSoIOCkuOCkleCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iIG1zZ2lkPSIyODIyMjM4MjE1MTAwNjc5NTkyIj4i4KSg4KWA4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aXZlX3RpbWUiIG1zZ2lkPSIxODE4NTU3MTc3ODI5NDExNDE3Ij4iPHhsaWZmOmcgaWQ9IkRBVEUiPiUxJHM8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub29uIiBtc2dpZD0iNzI0NTM1MzUyODgxODU4NzkwOCI+IuCkruCkp+CljeCkr+CkvuCkqOCljeCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Ik5vb24iIG1zZ2lkPSIzMzQyMTI3NzQ1MjMwMDEzMTI3Ij4i4KSu4KSn4KWN4KSv4KS+4KSo4KWN4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWlkbmlnaHQiIG1zZ2lkPSI3MTY2MjU5NTA4ODUwNDU3NTk1Ij4i4KSu4KSn4KWN4KSv4KSw4KS+4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTWlkbmlnaHQiIG1zZ2lkPSI1NjMwODA2OTA2ODk3ODkyMjAxIj4i4KSu4KSn4KWN4KSv4KSw4KS+4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9tbV9zcyIgbXNnaWQ9IjQ0MzE1NTU5NDM4Mjg3MTE0NzMiPiI8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTEkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTIkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfaF9tbV9zcyIgbXNnaWQ9IjE4NDYwNzE5OTc2MTY2NTQxMjQiPiI8eGxpZmY6ZyBpZD0iSE9VUlMiPiUxJGQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMiQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMyQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0QWxsIiBtc2dpZD0iNjg3NjUxODkyNTg0NDEyOTMzMSI+IuCkuOCkrOCliOCksuCkvuCkiCDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCkleCkvuCkn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSq4KS/IOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCkn+CkvuCkgeCkuOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4KS14KS/4KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgpJXgpYsg4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuCkquCkvuCkoCDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuCkquCkvuCkoCDgpJrgpK/gpKjgpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4KS24KSs4KWN4KSm4KSV4KWL4KS24KSu4KS+IOCkpeCkquCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRNZXRob2QiIG1zZ2lkPSIxNjUzNjMwMDYyMzA0NTY3ODc5Ij4i4KSo4KS/4KS14KWH4KS2IOCkteCkv+Ckp+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+IuCkquCkvuCkoCDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RpdGxlIiBtc2dpZD0iNTU3NjI3MjQ5NjM2NTY4NDgzNCI+IuCkreCko+CljeCkoeCkvuCksOCkoyDgpKDgpL7gpIngpIEg4KS44KSV4KS/4KSB4KSm4KWIIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGV4dCIgbXNnaWQ9IjY2NDA1MDU4MTc2MTc0MTQzNzEiPiLgpLjgpL7gpK/gpKYg4KSV4KWH4KS54KWAIOCkquCljeCksOCko+CkvuCksuClgCDgpJXgpL7gpLDgpY3gpK/gpJXgpY3gpLDgpK7gpLngpLDgpYLgpLLgpYcg4KSV4KS+4KSuIOCkl+CksOCljeCkpuCliOCkqOCkqOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg3MTgzMzUxMjEwNjA3ODc5MTQiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkmuCksuCkv+CksOCkueClh+CkleCliyDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiLgpKXgpKog4KS44KWC4KSa4KSo4KS+4KSV4KWLIOCksuCkvuCkl+CkvyDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2siIG1zZ2lkPSI1OTcwMDYwNDMwNTYyNTI0OTEwIj4i4KSg4KS/4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVzIiBtc2dpZD0iNTM2Mjk4MjMwMzMzNzk2OTMxMiI+IuCkoOCkv+CklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJubyIgbXNnaWQ9IjUxNDE1MzEwNDQ5MzU1NDE0OTciPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlhbG9nX2FsZXJ0X3RpdGxlIiBtc2dpZD0iMjA0OTY1ODcwODYwOTA0MzEwMyI+IuCkuOCkvuCkteCkp+CkvuCkqOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvYWRpbmciIG1zZ2lkPSI3OTMzNjgxMjYwMjk2MDIxMTgwIj4i4KSy4KWL4KShIOCkueClgeCkgeCkpuCliC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb24iIG1zZ2lkPSIxNTQ0NjgyNzU1NTE0NDk0Mjk4Ij4i4KSa4KS+4KSy4KWBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vZmYiIG1zZ2lkPSI2ODE1ODcwMzg2OTcyODA1ODMyIj4i4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2hpY2hBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ1MzMxODU5NDcwNjQ3NzMzODYiPiLgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkleCkvuCksOCkrOCkvuCkueClgCDgpKrgpYHgpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IuCkr+CkuCDgpJXgpL7gpLDgpY3gpK/gpJXgpYsg4KSy4KS+4KSX4KS/IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWC4KSu4KS+IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCksuCkvuCkiCDgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0gJmd0OyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIgJmd0OyDgpKHgpL7gpIngpKjgpLLgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiLgpI/gpIngpJ/gpL4g4KSV4KS+4KSw4KWN4KSv4KSV4KWLIOCkmuCkr+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiJVU0Ig4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpI/gpIngpJ/gpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpJXgpL7gpLDgpY3gpK8g4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCliOCkqOCkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiLgpKbgpYHgpLDgpY3gpK3gpL7gpJfgpY3gpK/gpLXgpLYsIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz7gpLLgpYcg4KSw4KWL4KSV4KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiLgpKbgpYHgpLDgpY3gpK3gpL7gpJfgpY3gpK/gpLXgpLYsIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkviA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g4KSs4KSo4KWN4KSmIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl90aXRsZSIgbXNnaWQ9IjQzNTE5NDg0ODE0NTkxMzU3MDkiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X2FwcGxpY2F0aW9uIiBtc2dpZD0iMTkwNDQ3NzE4OTA1NzE5OTA2NiI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz7gpLLgpYcg4KSV4KS+4KSw4KWN4KSvIOCkl+CksOCkv+CksOCkueClh+CkleCliyDgpJvgpYjgpKjgpaRcblxu4KSV4KWHIOCkpOCkquCkvuCkiOCkgSDgpK/gpLjgpLLgpL7gpIgg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOCksuClhyDgpKrgpY3gpLDgpKTgpL/gpJXgpY3gpLDgpL/gpK/gpL4g4KSm4KWH4KSW4KS+4KSH4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSCIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgpJzgpLXgpL7gpKsg4KSm4KS/4KSH4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpCDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX3Byb2Nlc3MiIG1zZ2lkPSI2NTEzMjA5ODc0ODgwNTE3MTI1Ij4i4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPuCksuClhyDgpJXgpL7gpLDgpY3gpK8g4KSX4KSw4KS/4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfY2xvc2UiIG1zZ2lkPSI4MzQ2MDcyMDk0NTIxMjY1NjA1Ij4i4KSg4KS/4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcG9ydCIgbXNnaWQ9IjQwNjAyMTgyNjA5ODQ3OTU3MDYiPiLgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FpdCIgbXNnaWQ9IjcxNDcxMTgyMTcyMjYzMTc3MzIiPiLgpKrgpY3gpLDgpKTgpYDgpJXgpY3gpLfgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4i4KSq4KWD4KS34KWN4KSgIOCkl+CliOCksCDgpJzgpL/gpK7gpY3gpK7gpYfgpLXgpL7gpLDgpYAg4KSt4KSP4KSV4KWLIOCkm+ClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSCIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE1NDc5OTc3ODA1MDY3MTM1ODEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSq4KWB4KSo4KSDIOCkqOCkv+CksOCljeCkpuClh+CktuClgOCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3JlcGxhY2UiIG1zZ2lkPSI2MjAyNDk4OTQ5OTcwMjgxNDEyIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpIXgpLngpL/gpLLgpYcg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpLXgpL7gpLjgpY3gpKTgpLXgpL/gpJUg4KS44KWB4KSw4KWB4KS14KS+4KSkIOCkreCkj+CkleCliyDgpKXgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2NhbGUiIG1zZ2lkPSIzMjAyOTU1NjY3Njc1OTQ0NDk5Ij4i4KS44KWN4KSV4KWH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4i4KS44KSn4KWI4KSBIOCkpuClh+CkluCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IuCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpK7gpL4g4KSv4KS44KSy4KS+4KSIIOCkquClgeCkqOCkg+CkuOCkleCljeCkt+CkriDgpJfgpLDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0gJmd0OyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIgJmd0OyDgpKHgpL7gpIngpKjgpLLgpYvgpKEg4KSX4KSw4KWH4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+ICjgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSDgpLLgpYcg4KSv4KS44KSV4KWLIOCkuOCljeCkteCkr+Ckgi3gpLLgpL7gpJfgpYEg4KSX4KSw4KS/4KSP4KSV4KWLIOCkuOCljeCkn+CljeCksOCkv+Ckn+CkruCli+CkoSDgpKjgpYDgpKTgpL8g4KSJ4KSy4KSZ4KWN4KSY4KSoIOCkl+CksOClh+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IOCkr+CkuOCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KSV4KSh4KS+4KSu4KWL4KShIOCkqOClgOCkpOCkv+CkleCkviDgpJXgpL7gpLDgpKMg4KSJ4KSy4KWN4KSy4KSZ4KWN4KSY4KSoIOCkl+CksOCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ190aXRsZSIgbXNnaWQ9IjE1ODQxOTIyODU0NDE0MDU3NDYiPiLgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKEg4KSF4KSq4KSX4KWN4KSw4KWH4KShIOCkueClgeCkgeCkpuCliOCkm+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSF4KSo4KWB4KSV4KWB4KSyIOCkueClgeCkgeCkpuCliCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCkleCliyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IuCkuOClgeCksOClgeCkteCkvuCkpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19jb21wbGV0ZSIgbXNnaWQ9IjE0MDU5NTQ3NTQxMTI5OTkyMjkiPiLgpKzgpYHgpJ8g4KSq4KWB4KSw4KS+IOCkueClgeCkgeCkpuCliOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb24iIG1zZ2lkPSI5MDg3MDYzOTg1Nzc2NjI2MTY2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz4g4KSa4KSy4KS/4KSw4KS54KWH4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb25fZGV0YWlsIiBtc2dpZD0iMTcyMTY4MTc0MTYxNzg5ODg2NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpLjgpY3gpLXgpL/gpJog4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90aXRsZSIgbXNnaWQ9IjcxNTMxNjcwODU0MDMyOTgxNjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KS44KWN4KS14KS/4KSaIOCkl+CksOCljeCkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RleHQiIG1zZ2lkPSI3MDIyNjMxOTI0NTM0NDA2NDAzIj4i4KSF4KSw4KWN4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKrgpLngpL/gpLLgpYcg4KSo4KWIIOCkmuCkvuCksuClgSDgpJsg4KSc4KWB4KSoIOCkpOCkquCkvuCkiOCkguCksuClhyDgpI/gpIngpJ/gpL4g4KSo4KSv4KS+4KSBIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYEg4KSF4KSY4KS/IOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9hY3Rpb24iIG1zZ2lkPSI0OTMxMjkxNzIyMzg1NjYyODIiPiI8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4g4KSu4KS+IOCkq+CksOCljeCkleCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDgyMDk0Mjc1NTgwMzU4MDQ5Ij4i4KSo4KSv4KS+4KSBIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpYHgpLDgpYEg4KSo4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9hY3Rpb24iIG1zZ2lkPSI1NDcyNzU2OTI2OTQ1NDQwNzA2Ij4iPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+IOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IuCkrOCkmuCkpCDgpKjgpJfgpLDgpYAg4KSq4KWB4KSw4KS+4KSo4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZW5kVGV4dCIgbXNnaWQ9IjUyMDk4NzQ1NzE5NTk0NjkxNDIiPiLgpKrgpL7gpKDgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CkieCkn+CkviDgpKrgpY3gpLDgpJXgpL7gpLDgpY3gpK8g4KSb4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+IuCkrOCknOCkvuCkieCkqOClhyDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWMiIG1zZ2lkPSI1NDIxNjUxMTU3MTM4NjI4MTcxIj4i4KSu4KS/4KSh4KS/4KSv4KS+4KSV4KWLIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSl4KSV4KWLIOCkruCkvuCkp+CljeCkr+CkruCkpuCljeCkteCkvuCksOCkviDgpKzgpJzgpL7gpIfgpKbgpYgg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+IuCktuCkvuCkqOCljeCkpCDgpLDgpL/gpJngpY3gpJfgpJ/gpYvgpKgg4KS44KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2NhbGwiIG1zZ2lkPSIzOTQxNjgwMDQxMjgyNzg4NzExIj4i4KSH4KSoLeCkleCksiDgpK3gpYvgpLLgpY3gpK/gpYHgpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYmx1ZXRvb3RoX2NhbGwiIG1zZ2lkPSIyMDAyODkxOTI2MzUxMTUxNTM0Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkreCkv+CkpOCljeCksOClgC3gpJXgpLIg4KSu4KS+4KSk4KWN4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IuCkhuCksuCksOCljeCkriDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMjQyMjI2NTY1Njc0NDI3NjcxNSI+IuCkuOClguCkmuCkqOCkviDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfdW5rbm93biIgbXNnaWQ9IjE0MDAyMTk2Njk3NzA0NDU5MDIiPiLgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkreCli+CksuCljeCkr+ClgeCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX3JpbmdlciIgbXNnaWQ9IjMzMjYwMDM4NDcwMDYxNjI0OTYiPiLgpJjgpKjgpY3gpJ/gpL/gpJXgpYsg4KSG4KS14KS+4KScIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiLgpJXgpLLgpL4g4KSu4KS+4KSk4KWN4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbWVkaWEiIG1zZ2lkPSI0MjE3MzExNzE5NjY1MTk0MjE1Ij4i4KSu4KS/4KSh4KS/4KSv4KS+4KSV4KWLIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjcwNDQ5ODY1NDY0NzcyODIyNzQiPiLgpLjgpYLgpJrgpKjgpL4g4KSt4KWL4KSy4KWN4KSv4KWB4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdCIgbXNnaWQ9IjM3ODk3NTg5ODAzNTc2OTY5MzYiPiLgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSw4KS/4KSZ4KSf4KWL4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdF93aXRoX2FjdHVhbCIgbXNnaWQ9IjgxMjk1NjM0ODA4OTU5OTAzNzIiPiLgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSw4KS/4KSZ4KSf4KWL4KSoICg8eGxpZmY6ZyBpZD0iQUNUVUFMX1JJTkdUT05FIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9zaWxlbnQiIG1zZ2lkPSI3OTM3NjM0MzkyNDA4OTc3MDYyIj4i4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLngpYvgpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4i4KSY4KSo4KWN4KSf4KWA4KSV4KS+IOCkuOCljeCkteCksOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4i4KSF4KSc4KWN4KSe4KS+4KSkIOCksOCkv+CkmeCkn+Cli+CkqCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NjU0MTIzOTg3NDE4MTY4NjkzIj4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkmyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWCIOCkieCkquCksuCkrOCljeCkpyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGVfZGV0YWlsZWQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4i4KSW4KWB4KSy4KWN4KSy4KS+IOCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCksuCkrOCljeCkpyDgpJsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc5MTU4OTUzMjM2NDQyOTI3NjgiPiLgpJbgpYHgpLLgpY3gpLLgpL4g4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkmyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpK7gpL4g4KS44KS+4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSV4KSu4KS+IOCkuOCkvuCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbmV0d29ya19hdmFpbGFibGVfc2lnbl9pbl9kZXRhaWxlZCAoODAwMDA4MTk0MTQ0Nzk3NjExOCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiLgpLXgpL7gpIct4KSr4KS+4KSH4KS44KSB4KSXIOCknOCkoeCkvuCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiDgpJXgpK7gpJzgpYvgpLAg4KSH4KSo4KWN4KSf4KSw4KSo4KWH4KSfIOCknOCkoeCkvuCkqCDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSq4KWN4KSw4KSk4KWN4KSv4KSV4KWN4KS3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpLjgpL/gpKfgpL4g4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpK/gpLjgpLLgpYcg4KS14KS+4KSHLeCkq+CkvuCkhyDgpJfgpY3gpLDgpL7gpLngpJUv4KS54KSf4KWN4KS44KWN4KSq4KSf4KSy4KS+4KSIIOCkrOCkqOCljeCkpiDgpJfgpLDgpL7gpIngpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpLjgpL/gpKfgpL4g4KS44KWB4KSw4KWBIOCkueClgeCkqCDgpLjgpJXgpYfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiLgpLXgpL7gpIct4KSr4KS+4KSHIOCkquCljeCksOCkpOCljeCkr+CkleCljeCktyDgpJbgpYHgpLLgpY3gpLLgpL4g4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiLgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiLgpLjgpY3gpLXgpYDgpJXgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWNsaW5lIiBtc2dpZD0iMjExMjIyNTQ1MTcwNjEzNzg5NCI+IuCkheCkuOCljeCkteClgOCkleCkvuCksCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUiIG1zZ2lkPSIxMzE4OTc1MTg1MTEyMDcwNzM0Ij4i4KSo4KS/4KSu4KSo4KWN4KSk4KWN4KSw4KSj4KS+IOCkquCkoOCkvuCkh+Ckj+CkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ludml0YXRpb25fdG9fY29ubmVjdF90aXRsZSIgbXNnaWQ9IjQ5NTg4MDM5NDg2NTg1MzM2MzciPiLgpJzgpKHgpL7gpKjgpK7gpL4g4KSo4KS/4KSu4KSo4KWN4KSk4KWN4KSw4KSj4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJvbV9tZXNzYWdlIiBtc2dpZD0iNTcwMzg5MTc0NzMxOTUxNzY5Ij4i4KSs4KS+4KSfOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3RvX21lc3NhZ2UiIG1zZ2lkPSIyNDg5Njg5NzQ1MjIwNDQwOTkiPiLgpKrgpY3gpLDgpL7gpKrgpJU6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4i4KSG4KS14KS24KWN4KSv4KSVIFBJTiDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4iUElOOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4i4KSv4KWLIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz7gpLjgpIHgpJcg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkrOClh+CksuCkviDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpLXgpL7gpIct4KSr4KS+4KSH4KSs4KS+4KSfIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpJfgpLDgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4i4KSc4KSsIOCkr+CliyA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkuOCkgeCklyDgpJzgpKHgpL/gpKQg4KS54KWB4KSo4KWN4KSbLCDgpKvgpYvgpKgg4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpLXgpL7gpIct4KSr4KS+4KSH4KSs4KS+4KSfIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpLngpYHgpKjgpYcg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiLgpIXgpJXgpY3gpLfgpLDgpLngpLDgpYIg4KSq4KWN4KSw4KS14KWH4KS2IOCkl+CksOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+IlNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KSg4KS+4KSH4KSB4KSm4KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDgpLLgpYcg4KSn4KSw4KWIIOCkuOCkguCkluCljeCkr+CkvuCkruCkviBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkieCkgeCkpuCliOCkm+ClpCDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkieCkqCDgpLjgpYHgpJrgpL7gpLDgpYEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KSa4KS+4KS54KSo4KWBIOCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4i4KSF4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkuOCkqOCljeCkpuClh+CktiDgpKrgpKDgpL7gpIngpKgg4KSa4KS+4KS54KWB4KSo4KWBIOCkueClgeCkqOCljeCkmyAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjM0OTIwMjU3MTk4NjgwNzg0NTciPiLgpK/gpLjgpLLgpYcgIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IiDgpLbgpYHgpLLgpY3gpJUg4KSy4KSX4KS+4KSJ4KSoIOCkuOCkleCljeCkmyI8L2ZvbnQ+IiDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkluCkvuCkpOCkvuCkruCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19wcmVtaXVtX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjU1MjM4MjYzNDkxMDUxMjM2ODciPjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IuCkr+CkuOCksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkluCkvuCkpOCkvuCkruCkviDgpJrgpL7gpLDgpY3gpJzgpLngpLDgpYIg4KSJ4KSk4KWN4KSq4KSo4KWN4KSoIOCkl+CksOCljeCkpuCkm+ClpCI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2FsbG93IiBtc2dpZD0iNDQ1ODg3ODYzNzExMTAyMzQxMyI+IuCkquCkoOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+IuCkruClh+CksOCliyDgpJvgpKjgpYzgpJ8g4KSv4KS+4KSmIOCksOCkvuCkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4i4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKrgpJvgpL8g4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWC4KSu4KS+IOCkrOCkpuCksuCljeCkqCDgpLjgpJXgpY3gpKjgpYEg4KS54KWB4KSo4KWN4KSbICZndDsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbHdheXNfYWxsb3ciIG1zZ2lkPSIzMjQxMTgxMTU0ODY5NDkzMzY4Ij4i4KS44KSn4KWI4KSBIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4i4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkheCkqOClgeCkruCkpOCkvyDgpKjgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkh+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4i4KSP4KSJ4KSf4KS+IOCkruCkvuCkqOCljeCkryBTSU0g4KSV4KS+4KSw4KWN4KShIOCksOCkvuCkluClh+CksCDgpKrgpYHgpKjgpIPgpLjgpY3gpJ/gpL7gpLDgpY3gpJ8g4KSo4KSX4KSw4KWH4KS44KSu4KWN4KSuIOCkruCli+CkrOCkvuCkh+CksiDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkueClgeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiLgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpKXgpKog4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX21lc3NhZ2UiIG1zZ2lkPSI2NTk5OTQ1MzAxMTQxMDUwMjE2Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSoIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSq4KWB4KSo4KSD4KS44KWN4KSf4KS+4KSw4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiLgpKrgpYHgpKjgpIPgpLjgpY3gpJ/gpL7gpLDgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODM0OTM2MjYyMzA2ODgxOTI5NSI+IuCkuOCkruCkryDgpK7gpL/gpLLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI1ODc5NDUwNjU5NDUzNzgyMjc4Ij4i4KSu4KS/4KSk4KS/IOCkruCkv+CksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9zZXQiIG1zZ2lkPSI1Nzc3MDc1NjE0MzIxMDg3NzU4Ij4i4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9kb25lIiBtc2dpZD0iMjUwNzY4Mzc1MTc1OTMwODgyOCI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1zX25ld19wZXJtX3ByZWZpeCIgbXNnaWQ9IjgyNTc3NDA3MTA3NTQzMDE0MDciPjxmb250IHNpemU9IjEyIiBmZ2NvbG9yPSIjZmYzM2I1ZTUiPiLgpKjgpK/gpL7gpIE6ICI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtc19kZXNjcmlwdGlvbl9hcHAiIG1zZ2lkPSI1MTM5ODM2MTQzMjkzMjk5NDE3Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPuCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcGVybWlzc2lvbnMiIG1zZ2lkPSI3MjgzMzU3NzI4MjE5MzM4MTEyIj4i4KSV4KWB4KSo4KWIIOCkheCkqOClgeCkruCkpOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiLgpLjgpL7gpK/gpKYg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkquCliOCkuOCkviDgpKrgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4iVVNCIOCkoOClguCksuCliyDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiJVU0Ig4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IuCkpOCkquCkvuCkiOCkgiDgpIbgpKvgpY3gpKjgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSu4KS+IFVTQiDgpK7gpL7gpLDgpY3gpKvgpKQg4KSc4KSh4KS+4KSoIOCkueClgeCkqOClgeCkreCkr+Cli+ClpCDgpKTgpLLgpJXgpYsg4KSs4KSf4KSoIOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSv4KSm4KS/IOCkpOCkquCkvuCkiOCkgiDgpIbgpKvgpY3gpKjgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSwIOCksCDgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKHgpJXgpYsgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpYDgpJog4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkquCljeCksOCkpOCkv+CksuCkv+CkquCkvyDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkreCkqOClh+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiLgpKTgpKrgpL7gpIjgpIIg4KSG4KSr4KWN4KSo4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkruCkviBVU0Ig4KSu4KS+4KSw4KWN4KSr4KSkIOCknOCkoeCkvuCkqCDgpLngpYHgpKjgpYHgpK3gpK/gpYvgpaQg4KSk4KSy4KSV4KWLIOCkrOCkn+CkqCDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIIg4KSG4KSr4KWN4KSo4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksCDgpLAg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KSh4KSV4KWLIFNEIOCkleCkvuCksOCljeCkoSDgpKzgpYDgpJog4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkquCljeCksOCkpOCkv+CksuCkv+CkquCkvyDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkreCkqOClh+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkmuCkvuCksuClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiJVU0Ig4KSG4KSuIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4iVVNCIOCkhuCkriDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkpOCkquCkvuCkiOCkgeCkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0Ig4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkrOCkvuCknyDgpLXgpL4g4KSk4KS/4KSwIOCkq+CkvuCkh+CksuCkueCksOClgiDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKog4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkueClgeCkqOClgeCkreCkqOCljeCkpuCkviDgpKrgpLngpYDgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkrOCkvuCknyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIChcIuCkneCkv+CkleCljeCkqOClgeCkueCli+CkuOCljVwiKSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkheCkmOCkvyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSs4KS+4KSfIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKHgpJXgpYsgU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyAoXCLgpKjgpL/gpJXgpL7gpLLgpYfgpJXgpYtcIikg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9idXR0b25fbW91bnQiIG1zZ2lkPSI3MDYwMjE4MDM0OTAwNjk2MDI5Ij4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkueCli+CkuOCljeCknyDgpIXgpKjgpK7gpL7gpIngpKjgpY3gpJ8g4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJzgpL7gpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNLCDgpKTgpY3gpK/gpLjgpKrgpJvgpL8g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkluCli+CksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+IuCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpYvgpLLgpY3gpKjgpYEg4KSt4KSv4KWLIOCkreCkqOClhyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpL4g4KSV4KWH4KS54KWAIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLDgpYvgpJXgpL/gpKjgpYcg4KSb4KSo4KWNIOCksCDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSo4KSX4KSw4KWH4KS44KSu4KWN4KSuIOCkheCkqOClgeCkquCksuCkrOCljeCkpyDgpLngpYHgpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+IlVTQiDgpLjgpILgpJrgpL7gpLLgpKgg4KSF4KS44KSr4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX29rIiBtc2dpZD0iNzM3Njk1MzE2NzAzOTg2NTcwMSI+IuCkoOCkv+CklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLgpK7gpL/gpKHgpL/gpK/gpL4g4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksOClguCkquCkruCkviDgpJzgpKHgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL7gpJXgpYsg4KSw4KWC4KSq4KSu4KS+IOCknOCkoeCkvuCkqCDgpK3gpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfY2RfaW5zdGFsbGVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3NzQ3MTI4Mjc4OTIwOTA3NTQiPiLgpI/gpIngpJ/gpL4g4KS44KWN4KSl4KS+4KSq4KSo4KSV4KSw4KWN4KSk4KS+4KSV4KWLIOCksOClguCkquCkruCkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4iVVNCIOCkuOCkueCkvuCkr+CkleCkruCkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IuCkheCkqOCljeCkryBVU0Ig4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSy4KS+4KSIIOCkq+CksOCljeCkruCljeCkr+CkvuCknyAg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IlNEIOCkleCkvuCksOCljeCkoSDgpKvgpLDgpY3gpK7gpY3gpK/gpL7gpJ8g4KSX4KSw4KWN4KSo4KWHPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsgVVNC4KSu4KS+IOCkuOCkmeCljeCkl+CljeCksOCkuSDgpK3gpI/gpJXgpL4g4KS44KSs4KWIIOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL/gpKjgpYcg4KSb4KSo4KWN4KWkIOCkr+CliyDgpJXgpL7gpLDgpY3gpK8g4KSJ4KSy4KWN4KSf4KS+4KSJ4KSoIOCkuOCkleCkv+CkgeCkpuCliOCkqCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpI/gpJXgpL4g4KS44KSs4KWIIOCkoeClh+Ckn+CkvuCkueCksOClgiDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X2J1dHRvbl9mb3JtYXQiIG1zZ2lkPSI0MTMxMDY0NTYwMTI3NDc4Njk1Ij4i4KSr4KSw4KWN4KSu4KWN4KSv4KS+4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IlVTQiDgpKHgpL/gpKzgpJcg4KSX4KSw4KWN4KSo4KWHIOCknOCkoeCkv+CkpCDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+IlVTQiDgpKHgpL/gpKzgpJcg4KSX4KSw4KWN4KSo4KWHIOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2lucHV0X21ldGhvZCIgbXNnaWQ9IjQ2NTMzODczMzY3OTEyMjI5NzgiPiLgpKjgpL/gpLXgpYfgpLYg4KS14KS/4KSn4KS/IOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iOTA5MTY1MjE1NzcyMjQ5NTExNiI+IuCkh+CkqOCkquClgeCknyDgpLXgpL/gpKfgpL/gpLngpLDgpYIg4KS44KWH4KSf4KSF4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiLgpK3gpYzgpKTgpL/gpJUg4KSV4KS/4KSs4KWL4KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGFyZHdhcmUiIG1zZ2lkPSI3NTE3ODIxMDg2ODg4OTkwMjc4Ij4i4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxNDA3MzY3MDE3MjYzMDMwNzczIj4i4KSV4KS/4KSs4KWL4KSw4KWN4KShIOCksOClguCkquCksOClh+CkluCkviDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0NjU5MDc3MDA0NDkyNTcwNjMiPiLgpJXgpL/gpKzgpYvgpLDgpY3gpKEg4KSw4KWC4KSq4KSw4KWH4KSW4KS+IOCkmuCkr+CkqCDgpJfgpLDgpY3gpKgg4KSf4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX2FscGhhYmV0IiBtc2dpZD0iNTQzMzI3NTQ4NTQ5OTAzOTE5OSI+IiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmRpZGF0ZXNfc3R5bGUiIG1zZ2lkPSI0MzMzOTEzMDg5NjM3MDYyMjU3Ij48dT4i4KSJ4KSu4KWN4KSu4KWH4KSm4KS14KS+4KSwIjwvdT48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSk4KSv4KS+4KSw4KWAIOCkueClgeCkgeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDU3NjAzNDE4OTcwOTk0MDUwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkpOCkr+CkvuCksCDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4i4KSk4KWN4KSw4KWB4KSf4KS/4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJzgpL7gpIHgpJog4KSX4KSw4KWN4KSm4KWI4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLgpLDgpL/gpJXgpY3gpKQgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IuCkluCkvuCksuClgCBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpL7gpLLgpYAg4KS14KS+IOCkheCkuOCkruCksOCljeCkpeCkv+CkpCDgpKvgpL7gpIfgpLIg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+IlNEIOCkleCkvuCksOCljeCkoSDgpJbgpL7gpLLgpYAg4KSbIOCkheCkpeCkteCkviDgpLjgpK7gpLDgpY3gpKXgpKgg4KSo4KSX4KSw4KS/4KSP4KSV4KWLIOCkq+CkvuCkh+CksiDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i4KSs4KS/4KSX4KWN4KSw4KS/4KSP4KSV4KWLIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+IuCkrOCkv+Ckl+CljeCksOCkv+Ckj+CkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KS/4KSX4KWN4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCDgpK/gpLjgpLLgpL7gpIgg4KSq4KWB4KSo4KSD4KSr4KSw4KWN4KSu4KWN4KSv4KS+4KSfIOCkl+CksOCljeCkqCDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+IlNEIOCkleCkvuCksOCljeCkoSDgpKzgpL/gpJfgpY3gpLDgpL/gpI/gpJXgpYsg4KSb4KWkIOCkr+CkuOCksuCkvuCkiCDgpKrgpYHgpKjgpIPgpKvgpLDgpY3gpK7gpY3gpK/gpL7gpJ8g4KSX4KSw4KWN4KSoIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSq4KWN4KSw4KSk4KWN4KSv4KS+4KS24KS/4KSkIOCksOClguCkquCkruCkviDgpLngpJ/gpL7gpIfgpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+IlNEIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpKrgpYfgpJXgpY3gpLfgpL/gpKQg4KSw4KWC4KSq4KSu4KS+IOCkueCkn+CkvuCkh+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiLgpKHgpYfgpJ/gpL4g4KSX4KWB4KSu4KWN4KSo4KSs4KS+4KSfIOCksOCli+CkleCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8gVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIngpKjgpYHgpIXgpJjgpL8g4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IuCkoeClh+Ckn+CkviDgpKjgpL7gpLYg4KS54KWB4KSo4KSs4KS+4KSfIOCkrOCkmuCljeCkqCBTRCDgpJXgpL7gpLDgpY3gpKHgpLLgpL7gpIgg4KSo4KS/4KSV4KS+4KSy4KWN4KSo4KWB4KSt4KSo4KWN4KSm4KS+IOCkquCkueCkv+CksuCkviDgpIXgpKjgpK7gpL7gpIngpKjgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KS54KSf4KS+4KSJ4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkieCkqCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4i4KSk4KSq4KS+4KSI4KSCIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLDgpYLgpKrgpK7gpL4gVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIngpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiLgpKTgpKrgpL7gpIjgpIEgU0Qg4KSV4KS+4KSw4KWN4KShIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLDgpYLgpKrgpK7gpL4g4KS54KSf4KS+4KSJ4KSoIOCkuOCkleCljeCkqOClgSDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDQ4NjM3NzIzMDE0MDIyNzY1MSI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KS54KSf4KS+4KSH4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+IuCkueCkn+CkvuCkh+Ckj+CkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iVVNEIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIfgpK/gpYvgpaQg4KSo4KSv4KS+4KSBIOCkruCkv+CkoeCkv+Ckr+CkviDgpJjgpYHgpLjgpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KS54KSf4KS+4KSH4KSv4KWL4KWkIOCkj+CkieCkn+CkviDgpKjgpK/gpL7gpIEg4KSb4KS/4KSw4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiLgpJXgpYHgpKjgpYgg4KSu4KS/4KSy4KWN4KSo4KWHIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpKrgpL7gpIfgpI/gpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSI4Nzg3MzUyMDc0MzI2NzQ4ODkyIj4i4KSW4KSj4KWN4KShIOCkquCljeCksOCkr+Cli+CklyDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpJXgpLngpLDgpYIg4KSF4KSq4KSh4KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSIxMTA2NjEyNDI0MjU0Mjc3NjMwIj4i4KSc4KSu4KWN4KSu4KS+IOCkl+CksOCkv+Ckj+CkleCliyDgpJjgpJ/gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+IuCkuOCkvuCkruCkvuCkl+CljeCksOClgOCkleCliyDgpKjgpJXgpLIg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKrgpL8g4KSX4KSw4KWN4KSoIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpKjgpY3gpJ/gpYfgpKjgpLAg4KS44KWH4KS14KS+IOCkhuCkueCljeCkteCkvuCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSIxNjQyMDI0NDU1NzUwNDE0Njk0Ij4i4KSu4KS/4KSh4KS/4KSv4KS+IOCkquCksOCkv+Cko+CkvuCkriDgpKbgpL/gpLbgpL7gpKjgpL/gpLDgpY3gpKbgpYfgpLYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNDkzMjgxODc0OTU0NzI0NDM0NiI+IuCkruCkv+CkoeCkv+Ckr+CkviDgpKrgpLDgpL/gpKPgpL7gpK7gpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkrOCkvuCkueCkv+CksOClgCDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSy4KWI4KSc4KS+4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNzU2NTU1MjIzNzk3NzgxNTA0NyI+IuCkleCkv+Ckl+CkvuCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI1ODY2MjQ1NDg0MzAzMjg1NzYyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkv+Ckl+CkvuCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjE3MjE5NTE4NDIwNzgyODM4NyI+IuCkleCkv+Ckl+CkvuCksOCljeCkoSDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSX4KSw4KWN4KSo4KWHIOCksCDgpLLgpYHgpJXgpL7gpIngpKjgpYcg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIzMDQzNzMyMjkwNTE4NjI5MDYxIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkv+Ckl+CkvuCksOCljeCkoSDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiLgpJzgpYHgpK4g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpKbgpYHgpIgg4KSa4KWL4KSf4KS/IOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnYWRnZXRfaG9zdF9lcnJvcl9pbmZsYXRpbmciIG1zZ2lkPSI0ODgyMDA0MzE0OTA2NDY2MTYyIj4i4KS14KS/4KSc4KWH4KSfIOCkpeCkqiDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9nbyIgbXNnaWQ9IjgzMjA4NDU2NTE3MzczNjkwMjciPiLgpJzgpL7gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlYXJjaCIgbXNnaWQ9IjY1ODExMDI3MTgyMjgwNzgxMSI+IuCkluCli+CknOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VuZCIgbXNnaWQ9IjIzMTYxNjY1NTYzNDkzMTQ0MjQiPiLgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX25leHQiIG1zZ2lkPSIzMTM4ODQzOTA0MDA5ODEzODM0Ij4i4KSF4KSw4KWN4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kb25lIiBtc2dpZD0iODk3MTUxNjExNzkxMDkzNDYwNSI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4i4KSF4KSY4KS/4KSy4KWN4KSy4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kZWZhdWx0IiBtc2dpZD0iMjg0MDkyMTg4NTU1ODA0NTcyMSI+IuCkmuCksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxfbnVtYmVyX3VzaW5nIiBtc2dpZD0iNTc4OTE3NjQyNTE2NzU3MzU4NiI+XG4i4KSo4KSu4KWN4KSs4KSwIOCkoeCkvuCkr+CksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiLgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljVxu4KSv4KWLIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiLgpKjgpL/gpK7gpY3gpKgg4KSP4KSJ4KSf4KS+IOCkteCkviDgpKfgpYfgpLDgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJbgpL7gpKTgpL7gpK7gpL4g4KSq4KS54KWB4KSB4KSa4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSF4KS54KS/4KSy4KWHIOCksCDgpK3gpLXgpL/gpLfgpY3gpK/gpK7gpL4g4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9mb290ZXIiIG1zZ2lkPSIzMTI1MjExMzQzMzc5Mzc2NTYxIj4i4KSV4KWHIOCkpOCkquCkvuCkiOCkgSDgpK/gpLgg4KSF4KSo4KWB4KSw4KWL4KSn4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X3Blcm1pc3Npb25zX2hlYWRlcl90ZXh0IiBtc2dpZD0iNjg3NDQ5NzQwODIwMTgyNjcwOCI+IuCkheCkqOClgeCksOCli+CkpyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4i4KSF4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NDg2NzU5Nzk1OTI2MjM3OTA3Ij4i4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCkv+Ckj+CkleCliyDgpIXgpKjgpYHgpK7gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij5cbiLgpJbgpL7gpKTgpL4gPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiVzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCkv+Ckj+CkleCliyDgpIXgpKjgpYHgpK7gpKTgpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnB1dF9tZXRob2RfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyODM1NTcxNzk5NDQ5OTI2NDkiPiLgpIfgpKjgpKrgpYHgpJ8g4KS14KS/4KSn4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IuCkuOCkv+CkmeCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI0MTQ4MTIwNzQyMDk2NDc0NjQxIj4i4KSJ4KSq4KSy4KSs4KWN4KSn4KSk4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgpLjgpYLgpJrgpKjgpL4g4KS44KWB4KSo4KWN4KSo4KWH4KS14KS+4KSy4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4KS44KSV4KWN4KSw4KS/4KSvIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7gpKbgpY3gpLXgpL7gpLDgpL4g4KS44KSV4KWN4KSw4KS/4KSvIOCkl+CksOCkv+Ckj+CkleCliyDgpLngpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dF9sb25nIiBtc2dpZD0iNjQwNzM1MTAwNjI0OTE3NDQ3MyI+Ijx4bGlmZjpnIGlkPSJTRVNTSU9OIj4lczwveGxpZmY6Zz7gpLjgpIHgpJcg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkm+ClpCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDQzNDM4OTY0NDQwOTYwNzQ1Ij4iVlBOIOCknOCkoeCkvuCkqCDgpLjgpKfgpYgg4KSc4KWL4KSh4KWN4KSm4KWI4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLgpLjgpKfgpYjgpIEg4KSW4KWB4KSy4KWN4KSy4KS+IOCkueClgeCkqOClhyBWUE4g4KSc4KWL4KSh4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Vycm9yIiBtc2dpZD0iNjAwOTI0OTgxNDAzNDcwODE3NSI+IuCkuOCkp+CliOCkgSDgpK3gpLDgpL8gVlBOIOCkpOCljeCksOClgeCkn+Ckv+CkruCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25maWciIG1zZ2lkPSI2NDE1ODk5MTUwNjcxNTM3OTcwIj4i4KSV4KSo4KWN4KSr4KS/4KSX4KSwIOCkl+CksOCljeCkqCDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXBsb2FkX2ZpbGUiIG1zZ2lkPSIyODk3OTU3MTcyMzY2NzMwNDE2Ij4i4KSr4KS+4KSH4KSyIOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2ZpbGVfY2hvc2VuIiBtc2dpZD0iNjM2MzY0ODU2MjE3MDc1OTQ2NSI+IuCkleClgeCkqOCliCDgpKvgpL7gpIfgpLIg4KSb4KS+4KSo4KS/4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc2V0IiBtc2dpZD0iMjQ0ODE2ODA4MDk2NDIwOTkwOCI+IuCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpY3gpKjgpYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdWJtaXQiIG1zZ2lkPSIxNjAyMzM1NTcyMDg5OTExOTQxIj4i4KSq4KWH4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+IuCkleCkvuCksCDgpK7gpYvgpKEg4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4MDM1MjMwNTM3NTYzNTAzMjYyIj4i4KSV4KS+4KSwIOCkruCli+CkoeCkrOCkvuCknyDgpKjgpL/gpLjgpY3gpJXgpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE0NjY5NDIzNDM5ODIwMjYwMSI+IuCkn+Clh+CkpeCksCDgpJfgpLDgpY3gpKjgpYcg4KS14KS+IOCkueCkn+CkuOCljeCkquCknyDgpLjgpJXgpY3gpLDgpL/gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjY4NTcwMzE3NjAxMDMwNjI5ODIiPiLgpLjgpYfgpJ/gpIXgpKog4KSX4KSw4KWN4KSoIOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiLgpKrgpJvgpL7gpKHgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXh0X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEwODA1NTUxMDQ2Nzc5OTI0MDgiPiLgpIXgpLDgpY3gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJza2lwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEyNzUzNjIyOTk0NzE2MzE4MTkiPiLgpJvgpYvgpKHgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ4OTA4OTQyNjc0NTQ4NjcyNzYiPiLgpIngpJrgpY3gpJog4KSu4KWL4KSs4KS+4KSH4KSyIOCkoeClh+Ckn+CkviDgpKrgpY3gpLDgpK/gpYvgpJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMzM0MDgyMjIyODU5OTMzNzc0MyI+IuCkruCli+CkrOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpIXgpLDgpYIg4KSl4KSqIOCknOCkvuCkqOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8gIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2MjY5NTQxODk3NzI5NzgxMzMyIj4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkoeClh+Ckn+CkviDgpLjgpYDgpK7gpL4g4KSq4KS+4KSwIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjU0NDM0NTczMjEzNTQ5MDcxODEiPiLgpK7gpYvgpKzgpL7gpIfgpLIg4KSh4KWH4KSf4KS+IOCkquCljeCksOCkr+Cli+CklyDgpKzgpL7gpLDgpYcg4KSl4KSqIOCkuOCkv+CkleCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19tYXRjaGVzIiBtc2dpZD0iODEyOTQyMTkwODkxNTg0MDczNyI+IuCkleClgeCkqOCliCDgpK7gpL/gpLLgpYfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX29uX3BhZ2UiIG1zZ2lkPSIxOTQ2Nzk5MjMzODIyODIwMzg0Ij4i4KSq4KWD4KS34KWN4KSg4KSu4KS+IOCkq+Clh+CksuCkviDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTY3MTQ3MDgxMTM2NTc5NDM5Ij4i4KWnIOCkruClh+CksiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDY0MTg3Mjc5NzA2NzYwOTE3NyI+Ijx4bGlmZjpnIGlkPSJUT1RBTCI+JWQ8L3hsaWZmOmc+IOCkleCliyA8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tb2RlX2RvbmUiIG1zZ2lkPSI3MjE3NTgxNjQwNDYxOTIyMjg5Ij4i4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4iVVNCICDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkpuCliC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkruClh+Ckn+CkvuCkieCkgeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkruClh+Ckn+CkvuCkieCkgeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4iVVNCIOCkreCko+CljeCkoeCkvuCksOCko+CksuCkvuCkiCDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IlNEIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyDgpLngpYHgpKjgpYHgpK3gpKjgpY3gpKbgpL4g4KSq4KS54KS/4KSy4KS+IOCkqOCkv+CkleCkvuCksuCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IuCkheCkueCkv+CksuClhyBVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCknOCkvuCkgeCkmiDgpK3gpIfgpLDgpLngpYfgpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzM0NzYyNTAzOTA0ODI3NDgxIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkueCkv+CksuClhyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSt4KSH4KSw4KS54KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkh+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkpuCljeCkteCkvuCksOCkviDgpIXgpLngpL/gpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSX4KSu4KS+IOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MDYxMzA1NjgxMzM1NDA0MzUiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSF4KS54KS/4KSy4KWHIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfdW5rbm93bl9zdGF0ZSIgbXNnaWQ9IjcyOTE5Mjc4MjE5NzI5MDM4NSI+IuCkrOCkvuCkueCljeCkryDgpK7gpL/gpKHgpL/gpK/gpL4g4KSF4KSc4KWN4KSe4KS+4KSkIOCkheCkteCkuOCljeCkpeCkvuCkruCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlIiBtc2dpZD0iMTc3ODY4NjYxODIzMDAxMTk2NCI+IuCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kIiBtc2dpZD0iNDgwODI3MDkwMDMyMjk4NTk2MCI+IuCkquCkpOCljeCkpOCkviDgpLLgpJfgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWJzZWFyY2giIG1zZ2lkPSI0MzM3MTU3OTc3NDAwMjExNTg5Ij4i4KS14KWH4KSsIOCkluCli+CknOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfbmV4dCIgbXNnaWQ9IjU3NDIxMjQ2MTg5NDIxOTM5NzgiPiLgpIXgpLDgpY3gpJXgpYsg4KSt4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZF9wcmV2aW91cyIgbXNnaWQ9IjIxOTY3MjM2NjkzODgzNjA1MDYiPiLgpIXgpJjgpL/gpLLgpY3gpLLgpYsg4KSr4KWH4KSy4KS+IOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGlja2VyIiBtc2dpZD0iNTYyMjY4MzkxMjYxNjQ5NjE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4g4KSs4KS+4KSfIOCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpLDgpYvgpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZlRpdGxlIiBtc2dpZD0iNTQ0Njg1ODcxNzE1NzQxNjgzOSI+IuCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpLDgpYvgpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZk1lc3NhZ2UiIG1zZ2lkPSIxMzc0NzE4MDIzMjI0MDAwNzAyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+ICg8eGxpZmY6ZyBpZD0iU0VSVklDRSI+JTIkczwveGxpZmY6Zz4pIOCkpuCljeCkteCkvuCksOCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZZZXMiIG1zZ2lkPSIyMzQ2NTY2MDcyODY3MjEzNTYzIj4i4KS54KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiLgpLngpYvgpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXMiIG1zZ2lkPSI1Mjk2MzIxODUwNjYyNzQ2ODkwIj4i4KS44KWA4KSu4KS+IOCkqOCkvuCkmOClh+CkleCkvuCkueCksOClgiDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+IuCkpOCljeCkr+CkueCkvuCkgSA8eGxpZmY6ZyBpZD0iTlVNQkVSX09GX0RFTEVURURfSVRFTVMiPiUxJGQ8L3hsaWZmOmc+IOCkruClh+Ckn+CkvuCkh+Ckj+CkleCkviDgpIbgpIfgpJ/gpK7gpLngpLDgpYIg4KSb4KSo4KWNIDx4bGlmZjpnIGlkPSJUWVBFX09GX1NZTkMiPiUyJHM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSW4KS+4KSk4KS+IDx4bGlmZjpnIGlkPSJBQ0NPVU5UX05BTUUiPiUzJHM8L3hsaWZmOmc+4KWkIOCkpOCkquCkvuCkiOCkgiDgpJXgpYcg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19yZWFsbHlfZGVsZXRlIiBtc2dpZD0iMjU3MjYwMDEwMzEyMjU5NjI0MyI+IuCkteCkuOCljeCkpOClgeCkueCksOClgiDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3VuZG9fZGVsZXRlcyIgbXNnaWQ9IjI5NDEzMTczNjA2MDAzMzg2MDIiPiLgpK7gpYfgpJ/gpL/gpI/gpJXgpL7gpLngpLDgpYIg4KSq4KWC4KSw4KWN4KS14KS14KSkIOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfZG9fbm90aGluZyIgbXNnaWQ9IjM3NDM3NjQ3NDA0MzA4MjE4NDUiPiLgpIXgpLngpL/gpLLgpYfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleClh+CkueClgCDgpKjgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfYWNjb3VudF9sYWJlbCIgbXNnaWQ9IjU2NTUyMDMwODk3NDY0MjM5MjciPiLgpI/gpIngpJ/gpL4g4KSW4KS+4KSk4KS+IOCkm+CkvuCkqOCljeKAjeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+IuCkj+CkieCkn+CkviDgpJbgpL7gpKTgpL4g4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzYxMTk4Mjg5NDg1MzQzNTg3NCI+IuCkluCkvuCkpOCkviDgpKXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iMjQxMjA3MjI3MjgzMjI4NDMxMyI+IuCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfZGVjcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjQ3NjA1MDc3ODM4Njc3OTA2NyI+IuCkmOCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9tb2RlIiBtc2dpZD0iMzA3MzEwMTA2NzQ0MTYzODQyOCI+Ijx4bGlmZjpnIGlkPSJWQUxVRSI+JXM8L3hsaWZmOmc+4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpLjgpK7gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfYWN0aW9uIiBtc2dpZD0iOTEwMTQ3MzA0NTg5MTgzNTQ5MCI+IuCkrOCkouCkvuCkieCkqCDgpK7gpL7gpKXgpL8g4KSwIOCkmOCkn+CkvuCkieCkqCDgpKTgpLIg4KS44KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X21pbnV0ZV9idXR0b24iIG1zZ2lkPSI4ODY1ODg1MTE0MDI4NjE0MzIxIj4i4KSu4KS/4KSo4KWH4KSfIOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iNjI0NjgzNDkzNzA4MDY4NDc5MSI+IuCkruCkv+CkqOClh+CknyDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIzNjUyMDU2MDU1ODEwMjIzMTM5Ij4i4KSY4KSo4KWN4KSf4KS+IOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjEzNzc0Nzk4NjM0MjkyMTQ3OTIiPiLgpJjgpKjgpY3gpJ/gpL4g4KSY4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X3NldF9wbV9idXR0b24iIG1zZ2lkPSI0MTQ3NTkwNjk2MTUxMjMwODYzIj4iUE0g4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uIiBtc2dpZD0iODMwMjE0MDM1MzUzOTQ4Njc1MiI+IkFNIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+IuCkruCkueCkv+CkqOCkviDgpKzgpKLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iMTgzMjY5ODk5NTU0MTcyNjAxOSI+IuCkruCkueCkv+CkqOCkviDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpY3gpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfZGF5X2J1dHRvbiIgbXNnaWQ9IjcxMzA0NjU0MTIzMDgxNzM5MDMiPiLgpKbgpL/gpKgg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI0MTMxODgxNTIxODE4NzUwMDMxIj4i4KSm4KS/4KSoIOCkmOCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjYzMTg2OTczODQzMTA4MDg4OTkiPiLgpLXgpLDgpY3gpLcg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNDQ4MjAyMTgxMzQ5MTEyMTcxNyI+IuCkteCksOCljeCktyDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLgpK7gpYvgpKEg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IuCkj+CkieCkn+CkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSb4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IOCkuOCkgeCklyDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IuCkp+Ckv+CkuOCkvuCksOCljeCkqOClhyDgpLngpY3gpK/gpL7gpKjgpY3gpKHgpLLgpaQg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNICZhbXA7IOCkuOCkruCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkruCkvuCkpeCkvyDgpKfgpL/gpLjgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4KSV4KWLIOCksuCkvuCkl+CkvyDgpKTgpLIg4KS44KWN4KSy4KS+4KSH4KShIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuCkuOCljeCksuCkvuCkh+CkoSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkrOCkvuCkr+CkvuCkgeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLgpLjgpY3gpLLgpL7gpIfgpKEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpKbgpL7gpK/gpL7gpIHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuCkruCljOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLgpIbgpLXgpL7gpJwg4KSa4KS+4KSy4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLgpJbgpYvgpLLgpY3gpKjgpLLgpL7gpIcg4KS54KWB4KSk4KWN4KSk4KWN4KSv4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IuCkrOCli+CksuCkv+Ckj+CkleCliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSV4KWB4KSe4KWN4KSc4KWA4KS54KSw4KWCIOCkuOClgeCkqOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS54KWH4KSh4KS44KWH4KSfIOCkquCljeCksuCklyDgpIfgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i4KSh4KSf4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTI5MzYwMDQ5NjYwMTQ5MDIxNiI+IuCkl+Clg+CkuSDgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjIzNzQ5NjU2Mjk1MjE1MjU4OSI+IuCkruCkvuCkpeCkvyDgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbWVudV9vdmVyZmxvd19kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyOTU2NTkwMzc1MDkwMDg0NTMiPiLgpKXgpKog4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9Ijc5NjU5ODQzNjA5MDM2OTM5MDMiPiIlMSRzLCAlMiRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX3N1YnRpdGxlX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9IjY5ODU1NDY1MzA0NzE3ODA3MjciPiIlMSRzLCAlMiRzLCAlMyRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9pbnRlcm5hbCIgbXNnaWQ9IjQ4OTE5MTY4MzM2NTc5MjkyNjMiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9zZF9jYXJkIiBtc2dpZD0iMzI4Mjk0ODg2MTM3ODI4Njc0NSI+IlNEIOCkleCkvuCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRyYWN0X2VkaXRfbWVudV9idXR0b24iIG1zZ2lkPSI4OTQwNDc4NzMwNDk2NjEwMTM3Ij4i4KS44KSu4KWN4KSq4KS+4KSm4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE5NTU2Mzg4NjIxMjIyMzIzNDIiPiLgpKHgpYfgpJ/gpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkmuClh+CkpOCkvuCkteCkqOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ19ib2R5IiBtc2dpZD0iMjgxNDY3MzU1MTQ3MTk2OTk1NCI+IuCkieCkquCkr+Cli+CklyDgpLAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkueClh+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+IjJHLTNHIOCkoeClh+Ckn+CkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF90aXRsZSIgbXNnaWQ9Ijc2MzY0ODk0MzY4MTk0NzA3NjEiPiI0RyDgpKHgpYfgpJ/gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+IuCkruCli+CkrOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiLgpLXgpL7gpIct4KSr4KS+4KSHIOCkoeClh+Ckn+CkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+IuCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iNzAyNjczOTEyMTEzODAwNTIzMSI+IjJHLTNHIOCkoeClh+Ckn+CkviDgpLjgpYDgpK7gpL4g4KSt4KSo4KWN4KSm4KS+IOCkquCkvuCksCDgpK3gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMTEwNjU2Mjc3OTMxMTIwOTAzOSI+IjRHIOCkoeClh+Ckn+CkviBTSU3gpL4g4KSo4KS+4KSY4KWN4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjI3OTI0MDU3MjE2NTQxMjE2OCI+IuCkruCli+CkteCkvuCkh+CksiDgpKHgpYfgpJ/gpL4gU0lN4KS+IOCkqOCkvuCkmOCljeCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSh4KWH4KSf4KS+IFNJTeCkviDgpKjgpL7gpJjgpY3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X3Nub296ZWRfYm9keSIgbXNnaWQ9IjcwMzU0OTAyNzgyOTg0NDE3NjciPiI8eGxpZmY6ZyBpZD0iU0laRSI+JXM8L3hsaWZmOmc+IOCkieCksuCljeCksuClh+CkluCkv+CkpCDgpLjgpYDgpK7gpL4g4KSt4KSo4KWN4KSm4KS+IOCkrOCkouClgCDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4i4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/4KSV4KS+IOCkoeClh+Ckn+CkviDgpKrgpY3gpLDgpKTgpL/gpKzgpKjgpY3gpKfgpL/gpKQg4KSX4KSw4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+IuCkheCkteCksOCli+CkpyDgpLngpJ/gpL7gpIngpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlIiBtc2dpZD0iNjUxMDA0MDQ4NjA0OTIzNzYzOSI+IuCkuOClgeCksOCkleCljeCkt+CkviDgpKrgpY3gpLDgpK7gpL7gpKPgpKrgpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGVfaXNfdmFsaWQiIG1zZ2lkPSI2ODI1MjYzMjUwNzc0NTY5MzczIj4i4KSq4KWN4KSw4KSu4KS+4KSj4KSq4KSk4KWN4KSwIOCkruCkvuCkqOCljeCkryDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfdG8iIG1zZ2lkPSI0NTQyMzk0ODAyNzQ5MjEwMzIiPiLgpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KS+4KSw4KWAIOCkl+CksOCkv+Ckj+CkleClizoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21tb25fbmFtZSIgbXNnaWQ9IjIyMzMyMDkyOTk0MzQxNzI2NDYiPiLgpLjgpL7gpKfgpL7gpLDgpKMg4KSo4KS+4KSuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ19uYW1lIiBtc2dpZD0iNjk3MzU2MTE5MDc2MjA4NTIzNiI+IuCkuOCkguCkl+CkoOCkqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdfdW5pdCIgbXNnaWQ9IjcyNjU5ODE4OTA0MjIwNzAzODMiPiLgpLjgpILgpJfgpKDgpKjgpL7gpKTgpY3gpK7gpJUg4KSP4KSV4KS+4KSHOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9ieSIgbXNnaWQ9IjI2NDc1ODQ5ODgwNTc0ODE1NjYiPiLgpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KS+4KSw4KWAIOCkl+CksOCkv+Ckj+CkleClizoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2YWxpZGl0eV9wZXJpb2QiIG1zZ2lkPSI4ODE4ODg2MTM3NTQ1OTgzMTEwIj4i4KSu4KS+4KSo4KWN4KSv4KSk4KS+OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9vbiIgbXNnaWQ9IjU4OTUwMTc0MDQzNjEzOTcyMzIiPiLgpJzgpL7gpLDgpYAg4KSX4KSw4KS/4KSP4KSV4KWLOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4cGlyZXNfb24iIG1zZ2lkPSIzNjc2MjQyOTQ5OTE1OTU5ODIxIj4i4KSF4KS14KSn4KS/IOCkuOCkruCkvuCkquCljeCkpDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4i4KSV4KWN4KSw4KSuIOCkuOCkguCkluCljeCkr+CkvjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludHMiIG1zZ2lkPSI0NTE2MDE5NjE5ODUwNzYzMDQ5Ij4i4KSU4KSB4KSg4KS+4KSb4KS+4KSq4KS54KSw4KWCOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiJTSEEt4KWo4KWr4KWsIOCklOCkguCkoOCkvuCkm+CkvuCkqjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IlNIQS0xIOCklOCkguCksuCkvuCkm+CkvuCkqjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfc2VlX2FsbCIgbXNnaWQ9IjQyOTI1NjkzODM5NzY2MzYyMDAiPiLgpLjgpKzgpYgg4KS54KWH4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNDcxMDAxMzg2NDk3NDA0MDYxNSI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpJvgpKjgpYzgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfYWN0aW9uX3Byb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI1MjQ3Njg0NDM1OTc5MTQ5MjE2Ij4i4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxpc3RfZGVsaW1ldGVyIiBtc2dpZD0iMzk3NTExNzU3MjE4NTQ5NDE1MiI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VuZGluZyIgbXNnaWQ9IjMyNDU2NTM2ODEwMDgyMTgwMzAiPiLgpKrgpKDgpL7gpIngpIHgpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hCcm93c2VyRGVmYXVsdCIgbXNnaWQ9IjIwNTc5NTE5NDcyOTc2MTQ3MjUiPiLgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iU2V0dXBDYWxsRGVmYXVsdCIgbXNnaWQ9IjU4MzQ5NDg0NjkyNTM3NTg1NzUiPiLgpJXgpLIg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2VfYWx3YXlzIiBtc2dpZD0iODAxNzc3MDc0NzgwMTQ5NDkzMyI+IuCkuOCkp+CliOCkgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9vbmNlIiBtc2dpZD0iMjQwNDY0NDc5NzE0OTE3Mzc1OCI+IuCkj+CkieCkn+CkviDgpK7gpL7gpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MTcwNTM4OTgxNjcxMjc0NzEiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjM5MjkxMjczNDIwMTQwMTIzIj4i4KSr4KWL4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2hlYWRwaG9uZXMiIG1zZ2lkPSI4MTE5OTcxODQzODAzNDM5MTEwIj4i4KS54KWH4KSh4KSr4KWL4KSo4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2RvY2tfc3BlYWtlcnMiIG1zZ2lkPSI2MjQwNjAyOTgyMjc2NTkxODY0Ij4i4KSh4KSVIOCkuOCljeCkquCkv+CkleCksOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUg4KSF4KSh4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLgpKTgpL7gpLDgpLDgpLngpL/gpKQg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IuCkruCkv+CkoeCkv+Ckr+CkvuCkleCliyDgpIngpKTgpY3gpKrgpL7gpKbgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i4KS44KWN4KSV4KWN4KSv4KS+4KSoIOCkl+CksOCljeCkpuCliCAuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLgpJzgpKHgpL7gpKgg4KS54KWB4KSB4KSm4KWILi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLgpIngpKrgpLLgpKzgpY3gpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9IjY3Mzk4OTk5NjI2ODE4ODY0MDEiPiLgpIngpKrgpLLgpKzgpY3gpKcg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2J1aWx0X2luX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjI1ODMxMzQyOTQyOTI1NjM5NDEiPiLgpKrgpYLgpLDgpY3gpLUt4KSo4KS/4KSw4KWN4KSu4KS/4KSkIOCkuOCljeCkleCljeCksOCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9oZG1pX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjE1NTUyNjQ1NTkyMjc0NzAxMDkiPiJIRE1JIOCkuOCljeCkleCljeCksOCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLgpIbgpLXgpLDgpKMgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuCkpOCkvuCksOCksOCkueCkv+CkpCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLgpIXgpLDgpY3gpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkr+CliyDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLLgpYcg4KSm4KWH4KSW4KS+4KSH4KSw4KS54KWH4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLgpLXgpL/gpJrgpY3gpJvgpYfgpKbgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSV4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4KSi4KS+4KSB4KSa4KS+IOCkrOCkv+CksOCljeCkuOCkqOClgSDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IuCkl+CksuCkpCDgpKLgpL7gpIHgpJrgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiLgpJfgpLLgpKQg4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IuCkl+CksuCkpCBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJGQ8L3hsaWZmOmc+4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLgpIbgpKvgpY3gpKjgpYsg4KSi4KS+4KSB4KSa4KS+IOCkleCli+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4g4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUElOIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkheCkueCkv+CksuClhyDgpIXgpLjgpJXgpY3gpLfgpK4g4KSb4KWkIOCkuOClgeCkmuCkvuCksOClgSDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IFBVSyDgpJXgpYvgpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCAg4KS14KS/4KS14KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpLXgpL7gpLngpJXgpLLgpL7gpIgg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLgpIfgpJrgpY3gpJvgpL/gpKQgUElOIOCkleCli+CkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuCkruCkqOCkquCksOCljeCkpuCliyBQSU4g4KSV4KWL4KShIOCkqOCkv+CktuCljeCkmuCkv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuCkl+CksuCkpCBQSU4g4KSV4KWL4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4KWqIOCkpuClh+CkluCkvyDgpa4g4KS14KS+4KSfIOCkqOCkruCljeCkrOCksCDgpK3gpI/gpJXgpYsg4KSP4KSJ4KSf4KS+IFBJTiDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIOCkleCli+CkoSDgpa4g4KS14KSf4KS+IOCkqOCkruCljeCkrOCksCDgpLXgpL4g4KS44KWLIOCkreCkqOCljeCkpuCkviDgpKzgpKLgpYAg4KS54KWB4KSo4KWB4KSq4KSw4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUFVLIOCkleCli+CkoSDgpKrgpYHgpKg64KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpKfgpYfgpLDgpYgg4KSq4KWB4KSoOuCkquCljeCksOCkr+CkvuCkuOCkueCksOClguCksuClhyBTSU3gpLLgpL7gpIgg4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpKjgpL/gpLfgpY3gpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KS/4KSm4KS/4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4g4KSV4KWL4KSh4KS54KSw4KWCIOCkruClh+CksiDgpJbgpL7gpI/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLgpKjgpL/gpJXgpYgg4KSn4KWH4KSw4KWIIOCkouCkvuCkgeCkmuCkviDgpJXgpYvgpLjgpL/gpLjgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8sIOCkpOCkquCkvuCkiOCkgeCkleCliyBHb29nbGUg4KSW4KS+4KSk4KS+4KSV4KWLIOCkuOCkvuCkpSDgpLjgpL7gpIfgpKgg4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriAo4KSH4KSu4KWH4KSyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLgpLjgpL7gpIfgpKgg4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4KSF4KSu4KS+4KSo4KWN4KSvIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuCkleClhyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkv+CksOCljeCkuOCkqOClgeCkreCkr+Cliz9cbiI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgpK7gpL4g4KSc4KS+4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i4KSW4KS+4KSk4KS+IOCknOCkvuCkgeCkmiDgpLngpYHgpIHgpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJfgpLLgpKQg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCliyDgpJvgpaQgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpLLgpJUg4KSi4KS+4KSB4KSa4KS+IOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkluCkv+CkmuCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKrgpJvgpL8g4KSl4KSqIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYIsIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSbIOCksCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkoeClh+Ckn+CkviDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKTgpLjgpIHgpJcg4KSr4KWL4KSo4KSy4KS+4KSIIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSv4KWL4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkquCkm+CkvyDgpKXgpKog4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClgiwg4KSr4KWL4KSo4KSy4KS+4KSIIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpL7gpLDgpY3gpK/gpLbgpL7gpLLgpL7gpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCkv+CkqOClhyDgpJsg4KSwIOCkuOCkrOCliCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSh4KWH4KSf4KS+IOCkueCksOCkvuCkieCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJ/gpY3gpK/gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIOCkheCkrCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCkvuCksOCljeCkr+CktuCkvuCksuCkvuCkruCkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KS/4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkq+Cli+CkqCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCDgpIXgpKwg4KSr4KWL4KSoIOCkq+CljeCkr+CkvuCkleCljeCkn+CljeCksOCkvyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkueClgeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CksOCljeCkqOClgeCkreCkr+Cli+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLXgpL/gpKvgpLIg4KSq4KWN4KSw4KSv4KSk4KWN4KSo4KS54KSw4KWCIOCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSC4KSy4KS+4KSIIOCkhuCkq+CljeCkqOCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KS44KWL4KSn4KS/4KSo4KWHIOCkm+ClpFxuXG4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KS54KSw4KWC4KSu4KS+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4g4KSX4KSy4KSkIOCksOClguCkquCkruCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSk4KS+4KSo4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSn4KWH4KSw4KWIIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8sIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpI/gpIngpJ/gpL4g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkvuCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkXG5cbiDgpKvgpYfgpLDgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlX21lZGlhX3ZvbHVtZV93YXJuaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMyNDE2MTkzOTQ3NTQ3ODA2NiI+IuCkhuCkteCkvuCknCDgpLjgpLLgpY3gpLLgpL7gpLkg4KSm4KS/4KSP4KSV4KWLIOCkpOCkueCkreCkqOCljeCkpuCkviDgpK7gpL7gpKXgpL8gIOCkrOCkouCkvuCkieCkqOClhyDgpLngpYs/XG7gpKDgpYLgpLLgpYsg4KSG4KS14KS+4KSc4KSu4KS+IOCkuOClgeCkqOCljeCkpuCkviDgpLLgpL7gpK7gpYsg4KS44KSu4KSv4KSV4KWLIOCksuCkvuCkl+CkvyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWB4KSo4KWN4KSo4KWHIOCktuCkleCljeCkpOClgOCksuCkvuCkiCDgpJbgpKTgpY3gpKTgpK4g4KSq4KS+4KSw4KWN4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRpbnVlX3RvX2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTYyNjQyNzM3MjMxNjA3MDI1OCI+IuCkieCkquCksuCkrOCljeCkp+CkpOCkviDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkpuClgeCkiOCkteCkn+CkviDgpJTgpILgpLLgpL7gpLngpLDgpYLgpLLgpYcg4KSl4KS/4KSa4KS/4KSw4KS54KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9lbmFibGVkIiBtc2dpZD0iMTM4MTk3MjA0ODU2NDU0NzY4NSI+IuCkquCkueClgeCkgeCkmiDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2FjY2Vzc2liaWxpdHlfY2FuY2VsZWQiIG1zZ2lkPSIzODMzOTIzMjU3OTY2NjM1NjczIj4i4KSq4KS54KWB4KSB4KSa4KSv4KWL4KSX4KWN4KSv4KSk4KS+IOCksOCkpuCljeCkpiDgpJfgpLDgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuCkheCkueCkv+CksuClh+CkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiLgpK7gpL7gpLLgpL/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IuCkpOCljeCksOClgeCkn+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub19yZXN0cmljdGVkX2FjY291bnRzIiBtc2dpZD0iNTczOTQ2MzI0OTY3MzcyNzczNiI+IuCkquCljeCksOCkpOCkv+CkrOCkqOCljeCkp+Ckv+CkpCDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLLgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSW4KS+4KSk4KS+4KS54KSw4KWCIOCkuOCkruCksOCljeCkpeCkqCDgpJfgpLDgpY3gpKbgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm90X2ZvdW5kIiBtc2dpZD0iMzQyOTE0MTg1MzQ5ODkyNzM3OSI+IuCkr+CkuCDgpJXgpL7gpLDgpY3gpK8g4KS44KSu4KWN4KS54KS+4KSy4KSo4KWHIOCkleClgeCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSt4KWH4KSf4KS/4KSP4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IuCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EwIiBtc2dpZD0iNzg3NTQyNzQ4OTQyMDgyMTc5MyI+IklTTyBBMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEiIG1zZ2lkPSIzNzYwNzM0NDk5MDUwODc1MzU2Ij4iSVNPIEExIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMiIgbXNnaWQ9IjU5NzMyNjYzNzgwMjAxNDQzODIiPiJJU08gQTIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EzIiBtc2dpZD0iMTM3MzQwNzEwNTY4NzMwMDg4NCI+IklTTyBBMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTQiIG1zZ2lkPSI2Njg5NzcyODA3OTgyNTk3MjU0Ij4iSVNPIEE0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNSIgbXNnaWQ9IjUzNTM1NDk2NTIwMTU3NDEwNDAiPiJJU08gQTUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E2IiBtc2dpZD0iODU4NTAzODA0ODY3NDkxMTkwNyI+IklTTyBBNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTciIG1zZ2lkPSI2NjQxODM2NzE2OTYzODM5MTE5Ij4iSVNPIEE3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOCIgbXNnaWQ9Ijc1NzExMzk0Mzc0NjU2OTMzNTUiPiJJU08gQTgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E5IiBtc2dpZD0iMTM3ODQ1NTg5MTk1NzExNTA3OSI+IklTTyBBOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEwIiBtc2dpZD0iMjQ4MDc0NzQ1NzQyOTQ3NTM0NCI+IklTTyBBMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IwIiBtc2dpZD0iMzk2NTkzNTA5NzY2MTEwODAzOSI+IklTTyBCMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEiIG1zZ2lkPSIyNTA1NzUzMjg1MDEwMTE1NDM3Ij4iSVNPIEIxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMiIgbXNnaWQ9Ijg3NjM4NzQ3MDk4NTk0NTg0NTMiPiJJU08gQjIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IzIiBtc2dpZD0iNDIxMDUwNjY4ODE5MTc2NDA3NiI+IklTTyBCMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjQiIG1zZ2lkPSI1NzQ5NDA0MTY1ODg4NTI2MDM0Ij4iSVNPIEI0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNSIgbXNnaWQ9Ijc2NDA2Mjc0MTQ2MjE5MDQ3MzMiPiJJU08gQjUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I2IiBtc2dpZD0iNzM0Mjk4ODg2NDcxMjc0ODU0NCI+IklTTyBCNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjciIG1zZ2lkPSI1MDY5ODQ0MDY1MjM1MzgyNDI5Ij4iSVNPIEI3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOCIgbXNnaWQ9IjczMTY4MTg5MjIyNzg3Nzk3NzQiPiJJU08gQjgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I5IiBtc2dpZD0iNTQxNDcyNzA5NDAyNjUzMjM0MSI+IklTTyBCOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEwIiBtc2dpZD0iNTI1MTI1MzczMTgzMjA0ODE4NSI+IklTTyBCMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MwIiBtc2dpZD0iNDAwMzEzODM0MjY3MTk2NDIxNyI+IklTTyBDMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEiIG1zZ2lkPSIxOTM1MTg4MDYzMzkzNTUzMDA4Ij4iSVNPIEMxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMiIgbXNnaWQ9IjMxOTczMDc5Njk3MTIwNjk5MDQiPiJJU08gQzIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MzIiBtc2dpZD0iNDMzNTgyNjA4NzMyMTkxMzUwOCI+IklTTyBDMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzQiIG1zZ2lkPSIzNzQ1NjM5NTk4MjgxMDE1MDA1Ij4iSVNPIEM0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNSIgbXNnaWQ9IjgyNjk0NTc3NjU4MjI3OTEwMTMiPiJJU08gQzUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M2IiBtc2dpZD0iNTY2NjY2MTA1MjYwMzQ2OTMwIj4iSVNPIEM2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNyIgbXNnaWQ9Ijg2Nzg0MTMxODA3ODI2MDg0OTgiPiJJU08gQzciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M4IiBtc2dpZD0iODM5MjM3NjIwNjYyNzA0MTczMCI+IklTTyBDOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzkiIG1zZ2lkPSI5MTkxNjEzMzcyMzI0ODQ1NDA1Ij4iSVNPIEM5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMTAiIG1zZ2lkPSI3MzI3NzA5Njk5MTg0OTIwODIyIj4iSVNPIEMxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZXR0ZXIiIG1zZ2lkPSI0MTkxODA1NjE1ODI5NDcyOTUzIj4i4KSq4KSk4KWN4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2d2cm5tdF9sZXR0ZXIiIG1zZ2lkPSI3ODUzMzgyMTkyNjQ5NDA1NTA3Ij4i4KS44KSw4KSV4KS+4KSw4KWAIOCkquCkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWdhbCIgbXNnaWQ9IjY2OTc5ODI5ODgyODM4MjMxNTAiPiLgpJXgpL7gpKjgpYLgpKjgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfanVuaW9yX2xlZ2FsIiBtc2dpZD0iMzcyNzc0Mzk2OTkwMjc1ODk0OCI+Ikp1bmlvciBMZWdhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWRnZXIiIG1zZ2lkPSIyODE4NzE0NjQ4OTY2MDEyMzYiPiJMZWRnZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfdGFibG9pZCIgbXNnaWQ9IjU3NzU5NjY0MTYzMzM1NzgxMjciPiJUYWJsb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id3JpdGVfZmFpbF9yZWFzb25fY2FuY2VsbGVkIiBtc2dpZD0iNzA5MTI1ODM3ODEyMTYyNzYyNCI+IuCksOCkpuCljeCkpiDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5ub3Rfd3JpdGUiIG1zZ2lkPSI4MTMyNTA1NDE3OTM1MzM3NzI0Ij4i4KS44KS+4KSu4KS+4KSX4KWN4KSw4KWAIOCksuClh+CkluCkqOCkruCkviDgpKTgpY3gpLDgpYHgpJ/gpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjYwNDg5MTM4ODAxODQ2MjgxMTkiPiLgpIXgpJzgpY3gpJ7gpL7gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfYWRtaW5fcGluIiBtc2dpZD0iNzgzNjQzNzMxODk1MTQzOTcwIj4i4KSq4KWN4KSw4KS24KS+4KS44KSVIFBJTiDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiJQSU4g4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9pbmNvcnJlY3QiIG1zZ2lkPSI4NTcxNTEyMDAzOTU1MDc3OTI0Ij4i4KSX4KSy4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX29sZF9waW4iIG1zZ2lkPSIxNDYyMjA2MjI1NTEyOTEwNzU3Ij4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+IuCkqOCkr+CkvuCkgSBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY29uZmlybV9waW4iIG1zZ2lkPSI4NTAxNTIzODI5NjMzMTQ2MjM5Ij4i4KSo4KSv4KS+4KSBIFBJTiDgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4i4KSq4KWN4KSw4KSk4KS/4KSs4KSo4KWN4KSn4KS54KSw4KWC4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CkieCkn+CkviBQSU4g4KSs4KSo4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiJQSU4g4KS54KSw4KWCIOCkruClh+CksiDgpJbgpL7gpI/gpKjgpKjgpY3gpaQg4KSq4KWB4KSo4KSDIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0IiBtc2dpZD0iODE3Mzk4Mjc1NjI2NTc3Nzc5MiI+IlBJTiDgpIXgpKTgpL8g4KSb4KWL4KSf4KWLIOCkreCkr+Cli+ClpCDgpJXgpK7gpY3gpKTgpYDgpK7gpL4g4KWqIOCkheCkmeCljeCklSDgpLngpYHgpKgg4KSG4KS14KS24KWN4KSv4KSVIOCkm+ClpCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icmVzdHJfcGluX2NvdW50ZG93biI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMxMTA1MDk5NTE5ODU0ODY3NSI+IuClpyDgpLjgpYfgpJXgpYfgpKjgpY3gpKEg4KSq4KSb4KS/IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IuCkquCkm+CkvyDgpKrgpYHgpKjgpIMg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRyYW5zaWVudF9uYXZpZ2F0aW9uX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjQ5MDc4NDQwNDM2MTExMjM0MjYiPiLgpKrgpJ/gpY3gpJ/gpL8g4KSm4KWH4KSW4KS/4KSo4KWHIOCkrOCkqOCkvuCkieCkqCDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpJXgpYsg4KSb4KWH4KSJ4KSu4KS+IOCkuOCljeCkteCkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0cmFuc2llbnRfbmF2aWdhdGlvbl9jb25maXJtYXRpb25fbG9uZyIgbXNnaWQ9IjgwNjE2ODU5MjA1MDgwODY2OTciPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KSf4KWN4KSf4KS/IOCkpuClh+CkluCkv+CkqOClhyDgpKzgpKjgpL7gpIngpKgg4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSV4KWLIOCkm+Clh+CkieCkrOCkvuCknyDgpLjgpY3gpLXgpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmU0ZmMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1ODggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYnl0ZVNob3J0IiBtc2dpZD0iODM0MDk3Mzg5Mjc0MjAxOTEwMSI+IkIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJraWxvYnl0ZVNob3J0IiBtc2dpZD0iNTk3Mzc4OTc4MzUwNDc3MTg3OCI+IktCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVnYWJ5dGVTaG9ydCIgbXNnaWQ9IjYzNTU4NTE1NzY3NzA0Mjg5MjIiPiJNQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdpZ2FieXRlU2hvcnQiIG1zZ2lkPSIzMjU5ODgyNDU1MjEyMTkzMjE0Ij4iR0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXJhYnl0ZVNob3J0IiBtc2dpZD0iMjMxNjEzMDE4MTU5MTg2OTYyIj4iVEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXRhYnl0ZVNob3J0IiBtc2dpZD0iNTYzNzgxNjY4MDE0NDk5MDIxOSI+IlBCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmlsZVNpemVTdWZmaXgiIG1zZ2lkPSI5MTY0MjkyNzkxNTAwNTMxOTQ5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkczwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iVU5JVCI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bnRpdGxlZCIgbXNnaWQ9IjQ2Mzg5NTY5NTQ4NTI3ODI1NzYiPiImbHQ74KSs4KS/4KSo4KS+IOCktuClgOCksOCljeCkt+CklSZndDsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpcyIgbXNnaWQ9Ijc4OTk4Mjk1MTYwNDg4MTMyMzciPiLigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpc190d29fZG90cyIgbXNnaWQ9IjEyMjgwNzg5OTQ4NjYwMzA3MzYiPiLigKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eVBob25lTnVtYmVyIiBtc2dpZD0iNzY5NDA2MzA0MjA3OTY3NjUxNyI+IijgpJXgpYHgpKjgpYgg4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksCDgpJvgpYjgpKgpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5rbm93bk5hbWUiIG1zZ2lkPSIyMjc3NTU2NTQ2NzQyNzQ2NTIyIj4iKOCkheCknOCljeCknuCkvuCkpCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0Vm9pY2VNYWlsQWxwaGFUYWciIG1zZ2lkPSIyNjYwMDIwOTkwMDk3NzMzMDc3Ij4i4KSt4KWN4KS14KS+4KSH4KS4IOCkruClh+CksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRNc2lzZG5BbHBoYVRhZyIgbXNnaWQ9IjI4NTA4ODk3NTQ5MTk1ODQ2NzQiPiJNU0lTRE7gpaciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlFcnJvciIgbXNnaWQ9IjUxNTQ0OTk0NTc3MzkwNTI5MDciPiLgpJzgpKHgpL7gpKgg4KS44KSu4KS44KWN4KSv4KS+IOCkteCkviDgpIXgpK7gpL7gpKjgpY3gpK8gTU1JIOCkleCli+CkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUZkbkVycm9yIiBtc2dpZD0iNTIyNDM5ODIxNjM4NTMxNjQ3MSI+IuCkheCkquCksOClh+CktuCkqCDgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KSh4KS+4KSv4KSyIOCkqOCkruCljeCkrOCksOCkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSu4KS+4KSk4KWN4KSwIOCkquCljeCksOCkpOCkv+CkrOCkqOCljeCkp+Ckv+CkpCDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZCIgbXNnaWQ9IjgxNDcyNzgzNDY0MTQ3MTQzMTUiPiLgpLjgpYfgpLXgpL4g4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkRm9yIiBtc2dpZD0iNjg1NjIyODE0MDQ1MzQ3MTA0MSI+IuCkqOCkv+CkruCljeCkqCDgpIngpLLgpY3gpLLgpYfgpJbgpL/gpKTgpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOClh+CkteCkviDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KS/4KSv4KWLOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VEaXNhYmxlZCIgbXNnaWQ9IjE5Mzc1NTMyMjY1OTI1MTY0MTEiPiLgpLjgpYfgpLXgpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlUmVnaXN0ZXJlZCIgbXNnaWQ9IjYyNzUwMTkwODI1OTgxMDI0OTMiPiLgpKbgpLDgpY3gpKTgpL4g4KS44KSr4KSyIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFcmFzZWQiIG1zZ2lkPSIxMjg4NTg0Njk1Mjk3MjAwOTcyIj4i4KSu4KWH4KSf4KS+4KSHIOCkuOCkq+CksiDgpKXgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZEluY29ycmVjdCIgbXNnaWQ9Ijc2MTIyMDg4Mzk0NTAxMjg3MTUiPiLgpJfgpLLgpKQg4KSq4KS+4KS44KS14KSw4KWN4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4iTU1JIOCkquClgeCksOCkviDgpK3gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpYsg4KSq4KWB4KSw4KS+4KSo4KWLIFBJTiDgpLjgpLngpYAg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUHVrIiBtc2dpZD0iNTQ4NzI1NzY0NzA4MTEzMjIwMSI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KWLIFBVSyDgpLjgpLngpYAg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWlzbWF0Y2hQaW4iIG1zZ2lkPSI2MDkzNzkwNTQ0OTY4NjM0MTkiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCliyBQSU4g4KSu4KWH4KSyIOCkluCkvuCkgeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4i4KWqIOCkpuClh+CkluCkvyDgpa4g4KS14KSf4KS+IOCkqOCkruCljeCkrOCksCDgpK3gpI/gpJXgpYsg4KSP4KSJ4KSf4KS+IFBJTiDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLgpa4g4KS14KSf4KS+IOCkqOCkruCljeCkrOCksOCkueCksOClgiDgpLXgpL4g4KS44KWLIOCkreCkqOCljeCkpuCkviDgpLLgpL7gpK7gpYsg4KSP4KSJ4KSf4KS+IFBVSyDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IuCkpOCkquCkvuCkiOCkguCkleCliyBTSU0g4KSV4KS+4KSw4KWN4KShIFBVSy3gpLLgpJUg4KSb4KWkIOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIFBVSyDgpJXgpYvgpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCBQVUsyIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IuCkhuCkl+CkruCkqCDgpJXgpLLgpLAgSUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbGlyTW1pIiBtc2dpZD0iNzc4NDY3MzY3MzQ0NjgzMzA5MSI+IuCkrOCkvuCkueCkv+CksOCkv+CkqOClhyDgpJXgpLLgpLAgSUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDZk1taSIgbXNnaWQ9IjUxMjMyMTg5ODkxNDE1NzM1MTUiPiLgpJXgpLIg4KSF4KSX4KS+4KSh4KS/IOCkrOCkouCkvuCkieCkgeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+IuCkleCksiDgpKrgpY3gpLDgpKTgpL/gpJXgpY3gpLfgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJCYU1taSIgbXNnaWQ9IjQ1NTE5MzA2NzkyNjc3MDU4MSI+IuCkleCksiDgpKzgpY3gpK/gpL7gpLDgpL/gpJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQd2RNbWkiIG1zZ2lkPSI3MDQzNzE1Njg3OTA1MjU0MTk5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCksOCkv+CkteCksOCljeCkpOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlBpbk1taSIgbXNnaWQ9IjMxMTMxMTc3ODAzNjExOTAzMDQiPiJQSU4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ25pcE1taSIgbXNnaWQ9IjMxMTA1MzQ2ODA1NTc4NTcxNjIiPiLgpKrgpY3gpLDgpLjgpY3gpKTgpYHgpKQg4KSo4KSu4KWN4KSs4KSw4KSu4KS+IOCkleCksiDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+IuCkleCksiDgpJfgpLDgpY3gpKjgpYcg4KSF4KSC4KSVIOCksOCli+CkleClh+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJUaHJlZVdDTW1pIiBtc2dpZD0iOTA1MTA0NzE3MDMyMTE5MDM2OCI+IuCkleCksiDgpJfgpLDgpY3gpKjgpYcg4KSk4KS/4KSoIOCkpOCksOCkv+CkleCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJ1YWNNbWkiIG1zZ2lkPSI3ODI3ODg3NDU5MTM4MzA4ODg2Ij4i4KSo4KSa4KS+4KS54KS/4KSP4KSV4KS+IOCksOCkv+CkuOCkieCkoOCljeCkpuCkviDgpJXgpLLgpLngpLDgpYLgpJXgpYsg4KSF4KS44KWN4KS14KWA4KSV4KS+4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ25kTW1pIiBtc2dpZD0iMzExNjQ0NjIzNzA4MTU3NTgwOCI+IuCkleCksuCkv+CkmSDgpKjgpK7gpY3gpKzgpLAg4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkqOClhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkRuZE1taSIgbXNnaWQ9IjEyNjU0Nzg5MzI0MTgzMzQzMzEiPiLgpKzgpL7gpKfgpL4g4KSo4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT24iIG1zZ2lkPSI0Mjk0MTU0MDkxNDU3ODE5MjMiPiLgpLjgpYDgpK7gpKTgpL8g4KSX4KSw4KWN4KSoIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpLLgpLAgSUQsIOCkheCksOCljeCkleCliyDgpJXgpLI6IOCkuOClgOCkruCkpOCkvyDgpJfgpLDgpL/gpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPZmYiIG1zZ2lkPSIzMDkyOTE4MDA2MDc3ODY0NjI0Ij4i4KSV4KSy4KSwIElEIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkleCliyDgpLLgpL7gpJfgpL8g4KSw4KWL4KSV4KS+4KS14KSfIOCkm+ClpCDgpIXgpLDgpY3gpJXgpYsg4KSV4KSyOiDgpLDgpYvgpJXgpL7gpLXgpJ8g4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9uIiBtc2dpZD0iNjE3OTQyNTE4Mjg1NjQxODQ2NSI+IuCkleCksuCksCBJRCDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpKbgpYfgpJbgpL8g4KSq4KWN4KSw4KSk4KS/4KSs4KSo4KWN4KSn4KS/4KSkIOCkm+CliOCkqOClpCDgpIXgpLDgpY3gpJXgpYsg4KSV4KSyOiDgpKrgpY3gpLDgpKTgpL/gpKzgpKjgpY3gpKfgpL/gpKQg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9mZiIgbXNnaWQ9IjI1Njc5OTg2MzMxMjQ0MDg1NTIiPiLgpJXgpLLgpLAgSUQg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSV4KWLIOCksuCkvuCkl+CkvyDgpLDgpYvgpJXgpL7gpLXgpJ8g4KSb4KWI4KSo4KWkIOCkheCksOCljeCkleCliyDgpJXgpLI6IOCksOCli+CkleCkvuCkteCknyDgpJvgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlTm90UHJvdmlzaW9uZWQiIG1zZ2lkPSI4NjE0ODMwMTgwNTA4Njg2NjY2Ij4i4KS44KWH4KS14KS+4KSV4KWLIOCkteCljeCkr+CkteCkuOCljeCkpeCkviDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSUGVybWFuZW50IiBtc2dpZD0iMzM3NzM3MTE0NTkyNjgzNTY3MSI+IuCkpOCkquCkvuCkiOCkgiDgpJXgpLLgpLAgSUQg4KS44KWH4KSf4KS/4KSZIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZENoYW5nZWRUaXRsZSIgbXNnaWQ9IjU1OTIxODkzOTg5NTYxODc0OTgiPiLgpKrgpY3gpLDgpKTgpL/gpKzgpKjgpY3gpKfgpL/gpKQg4KSq4KS54KWB4KSB4KSaIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpK3gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRGF0YSIgbXNnaWQ9Ijg2NTM3OTQ3ODQ2OTAwNjU1NDAiPiLgpKHgpYfgpJ/gpL4g4KS44KWH4KS14KS+IOCksOCli+CkleCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25FbWVyZ2VuY3kiIG1zZ2lkPSI2NTgxMTYzNzc5MDcyODMzNjY1Ij4i4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkuOClh+CkteCkviDgpLDgpYvgpJXgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uTm9ybWFsIiBtc2dpZD0iNDk1Mzg2NzAxMTM4OTc1MDY3MyI+IuCkreCljeCkteCkvuCkh+CkuCDgpLjgpYfgpLXgpL4g4KSs4KWN4KSy4KSVIOCkreCkj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGxWb2ljZSIgbXNnaWQ9IjMzOTY5NjM2NTIxMDgxNTEyNjAiPiLgpLjgpKzgpYgg4KSG4KS14KS+4KScIOCkuOClh+CkteCkvuCkueCksOClgiDgpKzgpKjgpY3gpKYg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+IlNNUyDgpLjgpYfgpLXgpL4g4KSw4KWL4KSV4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlRGF0YSIgbXNnaWQ9Ijk5NjYzNjQ4NzEwNjE3MTMyMCI+IuCkreCljeCkteCkvuCkh+CkuC/gpKHgpYfgpJ/gpL4g4KS44KWH4KS14KS+4KS54KSw4KWCIOCksOCli+CkleCkv+Ckj+CkleCkviDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZVNtcyIgbXNnaWQ9IjE4ODg1ODgxNTI3OTIwMjM4NzMiPiLgpIbgpLXgpL7gpJwvU01TIOCkuOClh+CkteCkvuCkueCksOClgiDgpKzgpKjgpY3gpKYg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsIiBtc2dpZD0iNTY0MzAyODI2NDQ2NjA5MjgyMSI+IuCkuOCkrOCliCDgpK3gpY3gpLXgpL7gpIfgpLgv4KSh4KWH4KSf4KS+L1NNUyDgpLjgpYfgpLXgpL7gpLngpLDgpYIg4KSs4KWN4KSy4KSVIOCkreCkj+CkleCkviDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NWb2ljZSIgbXNnaWQ9IjEyNTgzOTM4MTIzMzUyNTgwMTkiPiLgpIbgpLXgpL7gpJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhIiBtc2dpZD0iODcyNDU2NzgyMDc3OTM3ODkzIj4i4KSh4KWH4KSf4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRkFYIiBtc2dpZD0iNTU2NjYyNDk5ODg0MDQ4NjQ3NSI+IuCkq+CljeCkr+CkvuCkleCljeCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1NNUyIgbXNnaWQ9IjIwMTU0NjAzNzM3MDE1Mjc0ODkiPiJTTVMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhQXN5bmMiIG1zZ2lkPSI0NTIzNDU0NzgzNDk4NTUxNDY4Ij4iQXN5bmMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhU3luYyIgbXNnaWQ9Ijc1MzAwMDA1MTk2NDYwNTQ3NzYiPiLgpLjgpL/gpJngpY3gpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUGFja2V0IiBtc2dpZD0iNjk5MTAwNjU1Nzk5MzQyMzQ1MyI+IuCkquCljeCkr+CkvuCkleClh+CknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BBRCIgbXNnaWQ9IjMyMzUyNTkwODU2NDgyNzEwMzciPiJQQUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDAiIG1zZ2lkPSI3MTcwMzM1NDcyMTk4Njk0OTQ1Ij4i4KSw4KWL4KSu4KS/4KSZIOCkuOClguCkmuCklSDgpJbgpYHgpLLgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEiIG1zZ2lkPSI1MzE0ODYxNTE5NzUyNTM4OTIyIj4i4KSw4KWL4KSu4KS/4KSZIOCkuOClguCkmuCklSDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDIiIG1zZ2lkPSI4OTY5OTI5MDQ5MDgxMjY4MTE1Ij4i4KSw4KWL4KSu4KS/4KSZIOCkuOClguCkmuCklSDgpKvgpY3gpLLgpY3gpK/gpL7gpLgg4KSX4KSw4KWN4KSm4KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQzIiBtc2dpZD0iNTE0ODI1NTAyNzA0Mzk0MzMxNyI+IuCkm+Ckv+CkruClh+CkleCkrOCkvuCknyDgpKzgpL7gpLngpL/gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDQiIG1zZ2lkPSI4ODA4NDU2NjgyNTUwNzk2NTMwIj4i4KSs4KS/4KSy4KWN4KSh4KS/4KSZ4KSV4KWLIOCkrOCkvuCkueCkv+CksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NSIgbXNnaWQ9Ijc2MDQwNjMyNTI4NTAzNTQzNTAiPiLgpLDgpYvgpK7gpL/gpJkgLSDgpIngpKrgpK/gpYHgpJXgpY3gpKQg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ2IiBtc2dpZD0iMjA1OTQ0MDgyNTc4Mjg3MTUxMyI+IuCksOCli+CkruCkv+CkmSAtIOCkieCkquCksuCkrOCljeCkpyDgpKrgpY3gpLDgpKPgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDciIG1zZ2lkPSI3MTEyMDc4NzI0MDk3MjMzNjA1Ij4i4KSw4KWL4KSu4KS/4KSZIC0g4KSP4KSy4KS/4KSv4KSo4KWN4KS44KSwIOCkquCkvuCksOCljeCkn+CkqOCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OCIgbXNnaWQ9IjU5ODk1Njk3Nzg2MDQwODkyOTEiPiLgpLDgpYvgpK7gpL/gpJkgLSDgpKrgpY3gpLDgpL/gpK7gpL/gpK/gpK4g4KSq4KS+4KSw4KWN4KSf4KSo4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ5IiBtc2dpZD0iNzk2OTI5NjgxMTM1NTE1MjQ5MSI+IuCksOCli+CkruCkv+CkmSAtIOCkquClguCksOCljeCkoyDgpLjgpYfgpLXgpL4g4KSV4KS+4KSw4KWN4KSv4KSV4KWN4KS34KSu4KSk4KS+IOCkheCkteCkuOCljeCkpeCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTAiIG1zZ2lkPSIzOTkyOTA2OTk5ODE1MzE2NDE3Ij4i4KSw4KWL4KSu4KS/4KSZIC0g4KSG4KSZ4KWN4KS24KS/4KSVIOCkuOClh+CkteCkviDgpKrgpY3gpLDgpJXgpL7gpLDgpY3gpK/gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDExIiBtc2dpZD0iNDE1NDQ3Njg1NDQyNjkyMDk3MCI+IuCksOCli+CkruCkv+CkmSDgpKfgpY3gpLXgpJzgpL4g4KSa4KS+4KSy4KWBIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTIiIG1zZ2lkPSIxMTg5MDcxMTE5OTkyNzI2MzIwIj4i4KSw4KWL4KSu4KS/4KSZIOCkrOCljeCkr+CkvuCkqOCksCDgpKzgpKjgpY3gpKYg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHRTZWFyY2hpbmciIG1zZ2lkPSI4MzYwMTQxODg1OTcyMjc5OTYzIj4i4KS44KWH4KS14KS+4KSV4KWLIOCkluCli+CknOClgCDgpJfgpLDgpY3gpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlTm90Rm9yd2FyZGVkIiBtc2dpZD0iMTY4MzY4NTg4Mzg0MTI3MjU2MCI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgpIXgpJfgpL7gpKHgpL8g4KSq4KSg4KS+4KSH4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWQiIG1zZ2lkPSIxMzAyOTIyMTE3NDk4NTkwNTIxIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWRUaW1lIiBtc2dpZD0iOTIwNjI1MTczNjUyNzA4NTI1NiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4g4KSq4KSb4KS/IDx4bGlmZjpnIGlkPSJUSU1FX0RFTEFZIj57Mn08L3hsaWZmOmc+IOCkuOClh+CkleClh+CkqOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkIiBtc2dpZD0iNTA3MzIzNzgyNzYyMDE2NjI4NSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgpIXgpJfgpL7gpKHgpL8g4KSs4KSi4KS+4KSH4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkVGltZSIgbXNnaWQ9IjY3ODE2MjE5NjQzMjA2MzUxNzIiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjog4KSF4KSX4KS+4KSh4KS/IOCkrOCkouCkvuCkh+Ckj+CkleCliyDgpJvgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmY0NvbXBsZXRlIiBtc2dpZD0iMzExODg0ODIzMDk2Njg4NjU3NSI+IuCkteCkv+CktuClh+Ckt+CkpOCkviDgpJXgpYvgpKEg4KSq4KWB4KSw4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZjRXJyb3IiIG1zZ2lkPSIzMzI3NTYwMTI2NTg4NTAwNzc3Ij4i4KSc4KSh4KS+4KSoIOCkuOCkruCkuOCljeCkr+CkviDgpLXgpL4g4KSF4KSu4KS+4KSo4KWN4KSvIOCkuOClgeCkteCkv+Ckp+CkviDgpJXgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JPayIgbXNnaWQ9IjExOTE5MTkzNzgwODM0NzIyMDQiPiLgpKDgpL/gpJUg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yIiBtc2dpZD0iNzk1NjM5MjUxMTE0NjY5ODUyMiI+IuCkj+CkieCkn+CkviDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSk4KWN4KSw4KWB4KSf4KS/IOCkpeCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiJVUkwg4KSt4KWH4KSf4KS+4KSJ4KSoIOCkuOCkleClh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiLgpLjgpL7gpIfgpJ/gpJXgpYsg4KSG4KSn4KS/4KSV4KS+4KSw4KS/4KSV4KSk4KS+IOCkr+Cli+CknOCkqOCkviDgpLjgpK7gpLDgpY3gpKXgpL/gpKQg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQXV0aCIgbXNnaWQ9IjE0MzUwNjU2Mjk0MzgwNDQ1MzQiPiLgpKrgpY3gpLDgpK7gpL7gpKPgpYDgpJXgpLDgpKMg4KSX4KSw4KWN4KSoIOCkuOCkleClh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclByb3h5QXV0aCIgbXNnaWQ9IjE3ODgyMDcwMTA1NTkwODEzMzEiPiLgpKrgpY3gpLDgpYvgpJXgpY3gpLjgpYAg4KS44KSw4KWN4KSt4KSw4KSV4KWLIOCkruCkvuCkp+CljeCkr+CkruCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK7gpL7gpKPgpL/gpJXgpLDgpKMg4KSF4KS44KSr4KSyIOCkreCkj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JDb25uZWN0IiBtc2dpZD0iODcxNDI3MzIzNjM2NDY0MDU0OSI+IuCkuOCksOCljeCkreCksOCkuOCkgeCklyDgpJzgpYvgpKHgpY3gpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9ySU8iIG1zZ2lkPSIyMzQwNTU4MTk3NDg5MzAyMTg4Ij4i4KS44KSw4KWN4KSt4KSw4KS44KSB4KSXIOCkuOCkguCkmuCkvuCksCDgpJfgpLDgpY3gpKgg4KS44KSV4KWH4KSo4KWkIOCkq+Clh+CksOCkvyDgpKrgpJvgpL8g4KSV4KWL4KS44KS/4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRpbWVvdXQiIG1zZ2lkPSI0NzQzNDAzNzAzNzYyODgzOTU0Ij4i4KS44KSw4KWN4KSt4KSwIOCkuOCkguCkl+CkleCliyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkuOCkruCkryDgpLjgpJXgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JSZWRpcmVjdExvb3AiIG1zZ2lkPSI4Njc5NTk2MDkwMzkyNzc5NTE2Ij4i4KSq4KWD4KS34KWN4KSf4KSu4KS+IOCkp+Clh+CksOCliCDgpLjgpLDgpY3gpK3gpLDgpLngpLDgpYLgpKTgpL/gpLAg4KSq4KWB4KSo4KSDIOCkqOCkv+CksOCljeCkpuClh+CktuCkqOCkueCksOClgiDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JVbnN1cHBvcnRlZFNjaGVtZSIgbXNnaWQ9IjUwMTU3MzA4MTI5MDYxOTIyMDgiPiLgpKrgpY3gpLDgpYvgpJ/gpYvgpJXgpLIg4KS44KSu4KSw4KWN4KSl4KS/4KSkIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZhaWxlZFNzbEhhbmRzaGFrZSIgbXNnaWQ9Ijk2NTQ5NjA2MDAwNjU4NjQxIj4i4KSP4KSJ4KSf4KS+IOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJzgpKHgpL7gpKgg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqCDgpLjgpJXgpYfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4i4KSq4KWD4KS34KWN4KSgIOCkluCli+CksuCljeCkqCDgpLjgpJXgpL/gpIHgpKbgpYjgpKgg4KSV4KS/4KSo4KSt4KSo4KWHIFVSTCDgpIXgpK7gpL7gpKjgpY3gpK8g4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiLgpKvgpL7gpIfgpLIg4KSt4KWH4KSf4KS+4KSJ4KSoIOCkuOCkleClh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZpbGVOb3RGb3VuZCIgbXNnaWQ9IjYyMDM4NTY2MTIwNDI2NTUwODQiPiLgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KS/4KSP4KSV4KWLIOCkq+CkvuCkh+CksiDgpK3gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVG9vTWFueVJlcXVlc3RzIiBtc2dpZD0iMTIzNTM5NjkyNzA4NzE4ODI1MyI+IuCkp+Clh+CksOCliCDgpKjgpYgg4KSF4KSo4KWB4KSw4KWL4KSn4KS54KSw4KWCIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkruCkviDgpJvgpKjgpY3gpaQg4KSq4KSb4KS/IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODk2NzcxMDAyNTAzNjE2MzgyMiI+Ijx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lMSRzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KS44KS+4KSH4KSoIOCkh+CkqCDgpKTgpY3gpLDgpYHgpJ/gpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVN5bmMiIG1zZ2lkPSI4MzUzNTIzMDYwMjY5MzM1NjY3Ij4i4KS44KS/4KSZ4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luY05vdGlmaWNhdGlvblRpdGxlIiBtc2dpZD0iMzk3NzQzMzQ5MTkxOTAxNDU4Ij4i4KS44KS/4KSZ4KWN4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlVG9vTWFueURlbGV0ZXNOb3RpZmljYXRpb25EZXNjIiBtc2dpZD0iODEwMDk4MTQzNTA4MDY5NjQzMSI+IuCkheCkpOCkvyDgpKfgpYfgpLDgpYggPHhsaWZmOmcgaWQ9IkNPTlRFTlRfVFlQRSI+JXM8L3hsaWZmOmc+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY0OTQwMTkyMzQxMDIxNTQ4OTYiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkluCkvuCksuClgCDgpJvgpYjgpKghIOCkoOCkvuCkieCkgSDgpJbgpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpYfgpLngpYAg4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDc1OTk5Mjg2NjgwMDAwNTQxIj4i4KSr4KWL4KSoIOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpLDgpL/gpI/gpJXgpYsg4KSbISDgpKDgpL7gpIngpIEg4KSW4KS+4KSy4KWAIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWH4KS54KWAIOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZSIgbXNnaWQ9IjY1NDU2OTYwMDc2MzE0MDQyOTIiPiLgpK7gpLLgpL7gpIgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1NDUzNTE0MjA4NjUyMDI4NTMiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMxOTkxOTA3NTQ2Mzk4ODYzOCI+IuCkq+Cli+CkqCDgpLXgpL/gpJXgpLLgpY3gpKrgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZSIgbXNnaWQ9IjcxNjc3MDMzODk4MDI2MTg2NjMiPiLgpK7gpYzgpKgg4KSu4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHVybl9vbl9yYWRpbyIgbXNnaWQ9IjM5MTI3OTMwOTIzMzk5NjIzNzEiPiLgpLXgpL7gpK/gpLDgpLLgpYfgpLgg4KSF4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1cm5fb2ZmX3JhZGlvIiBtc2dpZD0iODE5ODc4NDk0OTk4NzA2MjM0NiI+IuCkpOCkvuCksOCksOCkueCkv+CkpCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2xvY2siIG1zZ2lkPSI3OTkwOTQ2NTU0OTYwOTgxNTMiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSy4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX29mZiIgbXNnaWQ9IjQyNjY2MTQxMDc0MTI4NjUwNDgiPiLgpKrgpL7gpLXgpLAg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfc2lsZW50IiBtc2dpZD0iMzE5Mjk4MTYzMDE4NDczMDc4Ij4i4KSY4KSo4KWN4KSf4KWAIOCkrOCkqOCljeCkpiDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV92aWJyYXRlIiBtc2dpZD0iNzA3MjA0MzM4ODU4MTU1MTM5NSI+IuCkmOCkqOCljeCkn+ClgCDgpJXgpK7gpY3gpKrgpKgg4KSX4KSw4KWN4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfcmluZyIgbXNnaWQ9Ijg1OTIyNDE4MTYxOTQwNzQzNTMiPiLgpJjgpKjgpY3gpJ/gpL8g4KSa4KS+4KSy4KWBIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX3Byb2dyZXNzIiBtc2dpZD0iMjI4MTA3OTI1NzMyOTk4MTIwMyI+IuCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMzg1NzQ1MTc5NTU1NzMxNDcwIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpKzgpKjgpY3gpKYg4KS54KWB4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDk3OTIxNzUyNDI4MjEzNTMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSoIOCkrOCkqOCljeCkpiDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybV9xdWVzdGlvbiIgbXNnaWQ9IjI5MDY1NDQ3Njg4ODExMzYxODMiPiLgpJXgpYcg4KSk4KSq4KS+4KSI4KSCIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV90aXRsZSIgbXNnaWQ9IjcwNTQ1MDk5MTQ1MDAxNDAzNjEiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSu4KWL4KSh4KSu4KS+IOCkquClgeCkqOCkg+CkrOClgeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfY29uZmlybSIgbXNnaWQ9IjU1MjkzOTQ0NTAyNzg0NjY4Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkruCli+CkoeCkruCkviDgpKTgpKrgpL7gpIjgpIEg4KSq4KWB4KSo4KSD4KSs4KWB4KSfIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbPyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOClh+CkleCkviDgpLjgpKzgpYgg4KSk4KWH4KS44KWN4KSw4KWLIOCkquCkleCljeCkt+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCkvuCkieCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRfdGFza3NfdGl0bGUiIG1zZ2lkPSIzNjkxNzY0NjIzNjM4MTI3ODg4Ij4i4KSo4KSv4KS+4KSBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+IuCkleClgeCkqOCliCDgpKjgpK/gpL7gpIEg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkm+CliOCkqOCkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MDg0NzcxNDAwODgwNTM2NjUiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNDA2NDE2ODMxNTQxNjE1MjU4Ij4i4KSr4KWL4KSoIOCkteCkv+CkleCksuCljeCkquCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9jayIgbXNnaWQ9IjI4NDQ5NDUxOTE3OTIxMTk3MTIiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9wb3dlcl9vZmYiIG1zZ2lkPSI0NDcxODc5NDQwODM5ODc5NzIyIj4i4KS24KSV4KWN4KSk4KS/IOCkrOCkqOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fYnVnX3JlcG9ydCIgbXNnaWQ9Ijc5MzQwMTA1Nzg5MjIzMDQ3OTkiPiLgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3RpdGxlIiBtc2dpZD0iMjY2NzQ5NDgwMzc0MjU0ODUzMyI+IuCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KSy4KS/4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X21lc3NhZ2UiIG1zZ2lkPSIzOTg0NDcwNDg3NTAzNTA0NTYiPiLgpI/gpIngpJ/gpL4g4KSH4KSu4KWH4KSyIOCkuOCkqOCljeCkpuClh+CktuCkleCliyDgpLDgpYLgpKrgpK7gpL4g4KSq4KSg4KS+4KSJ4KSo4KSy4KS+4KSIIOCkr+CkuOCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS54KS+4KSy4KWI4KSV4KWLIOCkieCkquCkleCksOCko+CkleCliyDgpIXgpLXgpLjgpY3gpKXgpL7gpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCkuOClguCkmuCkqOCkviDgpJzgpK7gpY3gpK7gpL4g4KSX4KSw4KWN4KSo4KWHIOCkm+ClpCDgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSfIOCkuOClgeCksOClgSDgpJfgpLDgpYfgpKbgpYfgpJbgpL8g4KSq4KSg4KS+4KSJ4KSoIOCkpOCkr+CkvuCksCDgpKjgpK3gpI/gpLjgpK7gpY3gpK4g4KSv4KS44KSy4KWHIOCkleClh+CkueClgCDgpLjgpK7gpK8g4KSy4KS/4KSo4KWN4KSbOyDgpJXgpYPgpKrgpK/gpL4g4KSn4KWI4KSw4KWN4KSvIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fdG9nZ2xlX3NpbGVudF9tb2RlIiBtc2dpZD0iODIxOTUyNTM0NDI0NjgxMDkyNSI+IuCkruCljOCkqCDgpK7gpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjMyODk4NDE5MzcwMDM3NTg4MDYiPiLgpIbgpLXgpL7gpJwg4KSs4KSo4KWN4KSmIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjE1MDYwNDY1NzkxNzcwNjY0MTkiPiLgpKfgpY3gpLXgpKjgpL8g4KSW4KWB4KSy4KWN4KSy4KS+IOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX3RvZ2dsZV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iNTg4NDMzMDMwNjkyNjMwNzQ1NiI+IuCkueCkteCkvuCkh+CknOCkueCkvuCknCDgpK7gpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjI3MTk1NTc5ODI2MDg5MTk3NTAiPiLgpIngpKHgpL7gpKgg4KSu4KWL4KShIOCkluClgeCksuCkviDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4i4KS54KS14KS+4KSH4KSc4KS54KS+4KScIOCkruCli+CkoSDgpKzgpKjgpY3gpKYg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiLgpa/gpa/gpa8rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IuCkj+CkqOCljeCkoeCljeCksOCli+Ckh+CkoSDgpKrgpY3gpLDgpKPgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY29zdE1vbmV5IiBtc2dpZD0iNTQyOTgwODIxNzg2MTQ2MDQwMSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpL/gpLDgpY3gpKjgpYEg4KSq4KSw4KWN4KSo4KWHIOCkuOClh+CkteCkvuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+IuCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpK7gpLngpIHgpJfgpYsg4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkqOClhyDgpJXgpL7gpK7gpLngpLDgpYIg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21lc3NhZ2VzIiBtc2dpZD0iNzUyMTI0OTE0ODQ0NTQ1NjY2MiI+IuCkpOCkquCkvuCkiOCkguCkleCkviDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21lc3NhZ2VzIiBtc2dpZD0iNzgyMTk5OTA3MTAwMzY5OTIzNiI+IuCkpOCkquCkvuCkiOCkgeCkleCkviBTTVMsIOCkh+CkruClh+CksiDgpLAg4KSF4KSo4KWN4KSvIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSwIOCksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9wZXJzb25hbEluZm8iIG1zZ2lkPSIzNTE5MTYzMTQxMDcwNTMzNDc0Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkqOCkv+CknOClgCDgpLjgpYLgpJrgpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3BlcnNvbmFsSW5mbyIgbXNnaWQ9Ijg0MjY0NTMxMjk3ODg4NjEzMzgiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+IOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKzgpL7gpLDgpYfgpJXgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWA4KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJog4KSq4KWB4KSw4KWN4oCN4KSv4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NvY2lhbEluZm8iIG1zZ2lkPSI1Nzk5MDk2NjIzNDEyMDQzNzkxIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCkvuCkruCkvuCknOCkv+CklSDgpLjgpYLgpJrgpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NvY2lhbEluZm8iIG1zZ2lkPSI3MTI5ODQyNDU3NjExNjQzNDkzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClgiDgpLAg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCknOCkoeCkvuCkqOCkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpJXgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWA4KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJog4KSq4KWB4KSw4KWN4oCN4KSv4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2xvY2F0aW9uIiBtc2dpZD0iNjM1MTQ5NzQyNDM2NjkyMDQ5Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCljeCkpeCkvuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbG9jYXRpb24iIG1zZ2lkPSI1NzA0Njc5NzYzMTI0MTcwMTAwIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkreCljOCkpOCkv+CklSDgpLjgpY3gpKXgpL7gpKgg4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9uZXR3b3JrIiBtc2dpZD0iNTgwODk4MzM3NzcyNzEwOTgzMSI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpILgpJrgpL7gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX25ldHdvcmsiIG1zZ2lkPSI0NDc4Mjk5NDEzMjQxODYxOTg3Ij4i4KS14KS/4KSt4KS/4KSo4KWN4KSoIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpYHgpLXgpL/gpKfgpL7gpLngpLDgpYLgpK7gpL4g4KSq4KS54KWB4KSB4KSaIOCksOCkvuCkluCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iMTU4NTQwMzU0NDE2MjEyODEwOSI+IuCkrOCljeCksuClgeCkn+ClgeCkpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjU2MjUyODg1NzcxNjQyODIzOTEiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKXgpJXgpYsg4KSu4KS+4KSn4KWN4KSv4KSu4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkleCksOCko+CkueCksOClgiDgpLAg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWC4KSu4KS+4KSl4KS/IOCkquCkueClgeCkgeCkmiDgpLDgpL7gpJbgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjgzMjkyNjE2NzAxNTE4NzEyMzUiPiLgpIXgpKHgpL/gpK/gpYsg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hdWRpb1NldHRpbmdzIiBtc2dpZD0iMjY0MTUxNTQwMzM0NzU2ODEzMCI+IuCkheCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSs4KSm4KSy4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjIwOTI0NjY1MzQyNDc5ODAzMyI+IuCkrOCljeCkr+Ckn+CljeCksOCkv+CksuCkvuCkiCDgpKrgpY3gpLDgpK3gpL7gpLUg4KSq4KS+4KSw4KWN4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjY0NDEyNzUzMjA2Mzg5MTY5NDciPiLgpJvgpL/gpJ/gpY3gpJ/gpYgg4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkuOCkleCkvuCkieCkqCDgpLjgpJXgpY3gpKjgpYcg4KSk4KWAIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClgiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbGVuZGFyIiBtc2dpZD0iNTg2MzUwODQzNzc4MzY4MzkwMiI+IuCkquCkvuCkpOCljeCksOCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FsZW5kYXIiIG1zZ2lkPSI1Nzc3NTM0MzE2OTgyMTg0NDE2Ij4i4KSq4KS+4KSk4KWN4KSw4KWLIOCkpOCkpeCkviDgpJjgpJ/gpKjgpL7gpLngpLDgpYLgpK7gpL4g4KSq4KWN4KSw4KSk4KWN4KSv4KSV4KWN4KS3IOCkquCkueClgeCkgeCkmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaWN0aW9uYXJ5IiBtc2dpZD0iNDE0ODU5NzEyODg0MzY0MTM3OSI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpLbgpKzgpY3gpKbgpJXgpYvgpLYg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaWN0aW9uYXJ5IiBtc2dpZD0iNzkyMTE2NjM1NTk2NDc2NDQ5MCI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpLbgpKzgpY3gpKbgpJXgpYvgpLbgpK7gpL4g4KS24KSs4KWN4KSm4KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MDkwMjM3NzAyNDMyNTc2Nzg4Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktiDgpLLgpYfgpJbgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjI3MTE1NjE5OTQ0OTczNjE2NDYiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS24KSs4KWN4KSm4KSV4KWL4KS24KSu4KS+IOCktuCkrOCljeCkpuCkueCksOClgiDgpKXgpKrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYm9va21hcmtzIiBtc2dpZD0iMTk0OTUxOTY3MzEwMzk2ODIyOSI+IuCkrOClgeCkleCkruCkvuCksOCljeCkleCkueCksOClgiDgpLAg4KSH4KSk4KS/4KS54KS+4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ib29rbWFya3MiIG1zZ2lkPSI0MTY5NzcxNjA2MjU3OTYzMDI4Ij4i4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KSH4KSk4KS/4KS54KS+4KS44KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJrgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNjExNzcwNDYyOTcyODgyNDEwMSI+IuCkheCksuCkvuCksOCljeCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNDc2OTM1NjM2MjI1MTY0MTE3NSI+IuCkheCksuCkvuCksOCljeCkriDgpJjgpKHgpYAg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl92b2ljZW1haWwiIG1zZ2lkPSI0MTYyMjM3MTQ1MDI3NTkyMTMzIj4i4KSt4KWN4KS14KS+4KSH4KS4IOCkruClh+CksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfdm9pY2VtYWlsIiBtc2dpZD0iMjQ5ODQwMzk2OTg2Mjk1MTM5MyI+IuCkreCljeCkteCkvuCkh+CkuOCkruClh+CksuCkruCkviDgpLjgpL/gpKfgpL4g4KSq4KS54KWB4KSB4KSa4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21pY3JvcGhvbmUiIG1zZ2lkPSIxNzE1Mzk5MDAyNTAwNDM0NjQiPiLgpK7gpL7gpIfgpJXgpY3gpLDgpYvgpKvgpYvgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21pY3JvcGhvbmUiIG1zZ2lkPSI3MTA2NjE4Mjg2OTA1NzM4NDA4Ij4i4KSu4KS+W+CkleCljeCksOCli+Ckq+Cli+CkqOCkrOCkvuCknyDgpLDgpYfgpJXgpLDgpY3gpKEg4KSF4KSh4KS/4KSv4KWL4KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJog4KSq4KWB4KSw4KWN4oCN4KSv4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbWVyYSIgbXNnaWQ9IjQ4MjAzNzI0OTU4OTQ1ODY2MTUiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbWVyYSIgbXNnaWQ9IjI5MzM2NjczNzIyODk1Njc3MTQiPiLgpKTgpLjgpY3gpKzgpL/gpLAg4KS14KS+IOCkreCkv+CkoeCkv+Ckr+CliyDgpJXgpY3gpK/gpL7gpKrgpY3gpJrgpLDgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleCljeCkr+CkvuCkruClh+CksOCkvuCkruCkviDgpLjgpL/gpKfgpL4g4KSq4KS54KWB4KSB4KSa4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NjcmVlbmxvY2siIG1zZ2lkPSI4Mjc1NTAwMTczMzMwNzE4MTY4Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NjcmVlbmxvY2siIG1zZ2lkPSI3MDY3NDk3MTI4OTI1NDk5NDAxIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkieCkquCkleCksOCko+CkruCkviDgpLLgpJUg4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSV4KWLIOCkteCljeCkr+CkteCkueCkvuCksOCksuCkvuCkiCDgpKrgpY3gpLDgpK3gpL7gpLXgpL/gpKQg4KSX4KSw4KWN4KSo4KWHIOCkleCljeCkt+CkruCkpOCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hcHBJbmZvIiBtc2dpZD0iODAyODc4OTc2MjYzNDE0NzcyNSI+IuCkpOCkquCkvuCkiOCkgeCkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KS44KWC4KSa4KSo4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hcHBJbmZvIiBtc2dpZD0iMzk1MDM3ODUzODA0OTYyNTkwNyI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLXgpY3gpK/gpLXgpLngpL7gpLDgpK7gpL4g4KSq4KWN4KSw4KSt4KS+4KS1IOCkquCkvuCksOCljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd2FsbHBhcGVyIiBtc2dpZD0iMzg1MDI4MDE1ODA0MTE3NTk5OCI+IuCkteCkvuCksuCkquClh+CkquCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd2FsbHBhcGVyIiBtc2dpZD0iNTYzMDQxNzg1NDc1MDU0MDE1NCI+IuCkieCkquCkleCksOCkoyDgpLXgpL7gpLLgpKrgpYfgpKrgpLAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkrOCkpuCksuCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1DbG9jayIgbXNnaWQ9IjQwNjUzNTc1OTIzNjYxMjk5MiI+IuCkmOCkoeClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3lzdGVtQ2xvY2siIG1zZ2lkPSIzOTQ0MzU5ODMzNjI0MDk0OTkyIj4i4KSJ4KSq4KSV4KSw4KSjIOCkuOCkruCkryDgpLXgpL4g4KS44KSu4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0YXR1c0JhciIgbXNnaWQ9IjIwOTU4NjI1NjgxMTM5NDUzOTgiPiLgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSf4KWN4KSf4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI2MjQyNTkzNDMyMjI2ODA3MTcxIj4i4KSJ4KSq4KSV4KSw4KSjIOCkuOCljeCkpeCkv+CkpOCkvyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeW5jU2V0dGluZ3MiIG1zZ2lkPSIzMzQxOTkwOTg2MTQ3ODI2NTQxIj4i4KS44KS/4KSZ4KWN4KSVIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3luY1NldHRpbmdzIiBtc2dpZD0iNzYwMzE5NTI2NTEyOTAzMTc5NyI+IuCkuOCkv+CkmeCljeCklSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpK7gpL4g4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2NvdW50cyIgbXNnaWQ9IjMzNTk2NDYyOTExMjUzMjU1MTkiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KSW4KS+4KSk4KS+4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2NvdW50cyIgbXNnaWQ9IjQ5NDg3MzI2NDE4MjcwOTEzMTIiPiLgpIngpKrgpLLgpKzgpY3gpKcg4KSW4KS+4KSk4KS+4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9Ijc5OTgyMTQ5Njg3OTE1OTkzMjYiPiLgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSj4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNDM1NzA1Nzg2MTIyNTQ2MjcwMiI+IuCkueCljeCkr+CkvuCkqOCljeCkoeCkuOClh+Ckn+CkleCliyDgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLDgpK7gpL4g4KSq4KWN4KSw4KSk4KWN4KSv4KSV4KWN4KS3IOCkquCkueClgeCkgeCkmuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9waG9uZUNhbGxzIiBtc2dpZD0iOTA2NzE3Mzk4ODMyNTg2NTkyMyI+IuCkq+Cli+CkqCDgpJXgpLLgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3Bob25lQ2FsbHMiIG1zZ2lkPSI3NDg5NzAxNjIwNDQ2MTgzNzcwIj4i4KSF4KSo4KWB4KSX4KSu4KSoLCDgpLDgpYfgpJXgpLDgpY3gpKEg4KSwIOCkq+Cli+CkqCDgpJXgpLLgpLngpLDgpYLgpJXgpYsg4KSq4KWN4KSw4KS44KWL4KSn4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1Ub29scyIgbXNnaWQ9IjQ2NTIxOTE2NDQwODI3MTQwNDgiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSU4KSc4KS+4KSw4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1Ub29scyIgbXNnaWQ9IjgxNjIxMDI2MDIxOTA3MzQzMDUiPiLgpKjgpL/gpK7gpY3gpKgt4KS44KWN4KSk4KSwIOCkquCkueClgeCkgeCkmiDgpLAg4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KWLIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iMzQ0NjE2NDU4NDcxMDU5NjUxMyI+IuCkteCkv+CkleCkuOCkv+CkpCDgpJ/gpYHgpLLgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSI3MDU4ODI4MDMyMzU4MTQyMDE4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkteCkv+CkleCkvuCkuOCkleCksOCljeCkpOCkvuCkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSu4KS+4KSk4KWN4KSwIOCkuOClgeCkteCkv+Ckp+CkvuCkueCksOClguCkleCliyDgpIbgpLXgpLbgpY3gpK/gpJXgpKTgpL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaXNwbGF5IiBtc2dpZD0iNjA1MTAwMjAzMTkzMzAxMzcxNCI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsgVUkg4KSy4KS+4KSIIOCkheCkuOCksCDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RvcmFnZSIgbXNnaWQ9IjE5NzExMTg3NzA1NDYzMzY5NjYiPiLgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzQ0MjMxODUwMjQ0Njg3NDk5OSI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpK7gpL7gpKXgpL8g4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiJTRCDgpJXgpL7gpLDgpY3gpKHgpK7gpL7gpKXgpL8g4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI3OTE5MDI1NjAyMjgzNTkzOTA3Ij4i4KSq4KS54KWB4KSB4KSa4KWA4KSV4KSw4KSjIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNDIwNTE5Njg4MTY3ODE0NDMzNSI+IuCkuOCkueCkr+Cli+Ckl+ClgCDgpKrgpY3gpLDgpLXgpL/gpKfgpL8g4KSt4KSP4KSV4KWLIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClguCksuClhyDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzkwMTcxNzkzNjkzMDE3MDMyMCI+IuCkteCkv+CkqOCljeCkoeCliyDgpLjgpL7gpK7gpJfgpY3gpLDgpYDgpJXgpYsg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzNzcyMjI1MDA4NjA1MzEwNjcyIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkheCkqOCljeCkpOCksOCkleCljeCksOCkv+Ckr+CkviDgpK3gpIfgpLDgpLngpYfgpJXgpYsg4KS14KS/4KSo4KWN4KSh4KWL4KSV4KWLIOCkuOCkvuCkruCkl+CljeCksOClgOCkleCliyDgpKjgpL/gpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjMxMDg3MjMzNjQ2NzY2NjczMjAiPiLgpJvgpYvgpI/gpLAg4KSX4KSw4KS/4KSo4KWHIOCkluCli+CknOCksuCkvuCkiCDgpLjgpYHgpJrgpL7gpLDgpYEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iNTgwMDU1MjUxNjc3OTI0OTM1NiI+IuCkm+Cli+Ckh+Ckj+CkleCkviDgpIbgpIfgpJ/gpK7gpLngpLDgpYIg4KSa4KSw4KWN4KSV4KWLIOCkuOCljeCkteCksOCkruCkviDgpKzgpYvgpLLgpL/gpKjgpYcg4KSbIOCksCDgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSH4KS24KS+4KSw4KS+4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIXgpKjgpY3gpLXgpYfgpLfgpKMg4KSX4KSw4KWN4KSoIOCkuOCkleCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE3Mzk4ODE3NjY1MjI1OTQwNzMiPiLgpIngpJrgpY3gpJog4KS14KWH4KSsIOCkquCkueClgeCkgeCkmuCksuCkvuCkiCDgpLjgpYHgpJrgpL7gpLDgpYEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSI3ODgxMDYzOTYxNTA3NTExNzY1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkuOCkvuCkruCkl+CljeCksOClgOCksuCkvuCkiCDgpKXgpKog4KSq4KS54KWB4KSB4KSa4KSv4KWL4KSX4KWN4KSvIOCkrOCkqOCkvuCkieCkqCDgpLLgpL/gpKrgpL/gpLngpLDgpYIg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKjgpYEg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iMjEwMzQ0MDM5MTkwMjQxMjE3NCI+IuCkhuCkq+ClgeCksuClhyDgpJ/gpL7gpIfgpKog4KSX4KSw4KWH4KSV4KWLIOCkquCkvuCkoOCkleCliyDgpKjgpL/gpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCkoeClh+Ckn+CkviDgpJzgpLjgpY3gpKTgpYgg4KSV4KWN4KSw4KWH4KSh4KS/4KSfIOCkleCkvuCksOCljeCkoSDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYIg4KSwIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClgiDgpLjgpK7gpL7gpLXgpYfgpLYg4KSX4KSw4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i4KS44KWN4KSl4KS/4KSk4KS/IOCkquCkn+CljeCkn+Ckv+CksuCkvuCkiCDgpIXgpJXgpY3gpLfgpK4g4KS14KS+IOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i4KS44KWN4KSl4KS/4KSk4KS/IOCkquCkn+CljeCkn+CkvyDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkteCkviDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSG4KSH4KSV4KSo4KS54KSw4KWCIOCkpeCkquCljeCkqCDgpLAg4KS54KSf4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzI0NzI4MTkxMTM4NzkzMTQ4NSI+IuCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpJ/gpY3gpJ/gpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzE2MTEzNjYwNzk1OTc2MDYwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpJ/gpY3gpJ/gpL8g4KS54KWB4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjExNDgxOTg3ODU5Mzc0ODkyNjQiPiLgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSf4KWN4KSf4KS/4KSy4KS+4KSIIOCkteCkv+CkuOCljeCkpOClg+CkpC/gpLjgpJngpY3gpJXgpYHgpJrgpL/gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iNjkxNzU0OTQzNzEyOTQwMTEzMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSf4KWN4KSf4KS/IOCkteCkv+CkuOCljeCkpOCkvuCksCDgpLXgpL4g4KS44KSC4KSV4KWB4KSa4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiLgpKzgpLngpL/gpLDgpY3gpJfgpK7gpKgg4KSV4KSy4KS54KSw4KWC4KSy4KS+4KSIIOCkheCksOCljeCkleCliyDgpK7gpL7gpLDgpY3gpJcg4KSm4KS/4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSI1MzMxMzE4OTMxOTM3NDAyMDQwIj4i4KSs4KS54KS/4KSw4KWN4KSX4KSu4KSoIOCkleCksuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpLbgpYvgpKfgpKgg4KSX4KSw4KWN4KSoIOCksCDgpKHgpL7gpK/gpLIg4KSX4KSw4KS/4KSo4KWHIOCkqOCkruCljeCkrOCksCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkICDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK7gpYvgpKjgpL/gpJ/gpLAg4KSX4KSw4KWN4KSoLCDgpIXgpKjgpY3gpK/gpKTgpY3gpLAg4KSq4KSg4KS+4KSJ4KSoIOCkteCkviDgpKzgpL7gpLngpL/gpLAg4KSc4KS+4KSo4KWHIOCkleCksuCkueCksOClguCksuCkvuCkiCDgpLDgpYvgpJXgpY3gpKgg4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+IuCkquCkvuCkoCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIgKFNNUykg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVTbXMiIG1zZ2lkPSI2NDI0Mzg3NzU0MjI4NzY2OTM5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpLAg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCkleCliyDgpK7gpKTgpLLgpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSq4KSg4KS+4KSH4KSP4KSV4KWLIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKTgpKrgpL7gpIjgpILgpLLgpL7gpIgg4KSo4KSm4KWH4KSW4KS+4KSI4KSo4KWIIOCkruCli+CkqOCkv+Ckn+CksCDgpJfgpLDgpY3gpKgg4KS14KS+IOCkruClh+Ckn+CkvuCkieCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4i4KSq4KS+4KSgIOCkuOCkqOCljeCkpuClh+CktiAoTU1TKSDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCBNTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSwIOCkquCljeCksOCkleClg+Ckr+CkviDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpJXgpYsg4KSu4KSk4KSy4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkquCkoOCkvuCkh+Ckj+CkleCliyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSk4KSq4KS+4KSI4KSC4KSy4KS+4KSIIOCkqOCkpuClh+CkluCkvuCkiOCkqOCliCDgpK7gpYvgpKjgpL/gpJ/gpLAg4KSX4KSw4KWN4KSoIOCkteCkviDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iMTgwMzQ3NzY2MDg0NjI4ODA4OSI+IuCkhuCkleCkuOCljeCkruCkv+CklSDgpKrgpY3gpLDgpLjgpL7gpLDgpKPgpLngpLDgpYIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpLAg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkruCkviDgpK7gpL7gpKTgpY3gpLAg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+IuCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpL/gpKQg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSm4KWN4KS14KS+4KSw4KS+IOCkquCljeCksOCkvuCkquCljeCkpCDgpLjgpYfgpLIg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KWH4KSyIOCkquCljeCksOCkuOCkvuCksOCkoyDgpJrgpYfgpKTgpL7gpLXgpKjgpYDgpLngpLDgpYIg4KSV4KWH4KS54KWAIOCkuOCljeCkpeCkvuCkqOCkueCksOClguCkruCkviDgpKTgpKrgpL7gpIjgpILgpLLgpL7gpIgg4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkl+CkpOCkv+CkteCkv+Ckp+Ckv+CkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4g4KS44KSa4KWH4KSkIOCkl+CksOCkvuCkieCkqCDgpJfgpLDgpL/gpI/gpJXgpL4g4KSb4KSo4KWN4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSP4KSJ4KSf4KS+IOCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpLjgpYfgpLIg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKbgpJsg4KSc4KSsIOCkpOCkquCkvuCkiOCkguCkleCliyDgpIngpKrgpJXgpLDgpKPgpJXgpYsg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkteCkviDgpIXgpKrgpLDgpYfgpLbgpKjgpJXgpYsg4KS44KS+4KSlIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kU21zIiBtc2dpZD0iNTYwMDgzMDYxMjE0NzY3MTUyOSI+IlNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIggU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpKDgpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSq4KWN4KSw4KSk4KWN4KSv4KS+4KS44KS/4KSkIOCkmuCkvuCksOCljeCknOCkueCksOClguCkleCliyDgpKrgpLDgpL/gpKPgpL7gpK4g4KSm4KS/4KSoIOCkuOCkleCljeCkpuCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpKrgpYHgpLfgpY3gpJ/gpL8g4KSs4KS/4KSo4KS+IOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpKDgpL7gpI/gpLAg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkquCliOCkuOCkviDgpJbgpLDgpY3gpJog4KSX4KSw4KS+4KSJ4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9Ijg3MTM4ODkxMDUzMDU5NDMyMDAiPiLgpKrgpY3gpLDgpKTgpL/gpJXgpY3gpLDgpL/gpK/gpL4t4KSu4KS+4KSw4KWN4KSr4KSkLeCkuOCkqOCljeCkpuClh+CktiDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9IjcxMDc2NDg1NDg0Njg3Nzg3MzQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSG4KSX4KSkIOCkleCksuCkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KSk4KS/4KSV4KWN4KSw4KS/4KSv4KS+LeCkruCkvuCksOCljeCkq+CkpC3gpLjgpKjgpY3gpKbgpYfgpLYg4KSY4KSf4KSo4KS+4KS54KSw4KWC4KSy4KS+4KSIIOCkheCkqOCljeCkryDgpLjgpKjgpY3gpKbgpYfgpLYg4KSq4KSg4KS+4KSJ4KSo4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkruCkviDgpIXgpKjgpYHgpLDgpYvgpKfgpLngpLDgpYIg4KSq4KSg4KS+4KSJ4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTbXMiIG1zZ2lkPSI4NzQ1MDg2NTcyMjEzMjcwNDgwIj4i4KSk4KSq4KS+4KSI4KSC4KSV4KS+IOCkquCkvuCkoCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIgKFNNUyDgpLXgpL4gTU1TKSDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLXgpL4gU0lNIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+IFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYLgpLLgpL7gpIgg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWBIOCkteCkviDgpJfgpYvgpKrgpKjgpYDgpK/gpKTgpL7gpLLgpL7gpIgg4KS14KWH4KS14KS+4KS44KWN4KSk4KS+IOCkl+CksOCljeCkpuCliCDgpLjgpKzgpYggU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpKLgpY3gpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjk1OTY3NTMzNDU3MjQwNTUwIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+Cli+CkqCDgpLXgpL4gU0lNIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+IFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYLgpLLgpL7gpIgg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpLjgpKzgpYggU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClguCksuCkvuCkiCDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkvuCkruCkl+CljeCksOClgCDgpLXgpL4g4KS14KS/4KS24KWN4KS14KS44KSo4KS/4KSv4KSk4KS+IOCkrOCkv+CkqOCkviDgpKjgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+IuCkpOCkquCkvuCkiOCkgeCkleCkviDgpKrgpL7gpKAg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkuOCkruCljeCkquCkvuCkpuCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gKFNNUyDgpLXgpL4gTU1TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KS14KS+IFNJTSDgpJXgpL7gpLDgpY3gpKHgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSwIOCkl+CksOCkv+Ckj+CkleCkviBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCksuClh+CkluCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+Cli+CkqCDgpLXgpL4gU0lNIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+IFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYLgpLLgpL7gpIgg4KSy4KWH4KSW4KWN4oCN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkuOCkvuCkr+CkpiDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+IuCkquCkvuCkoCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIgKFdBUCkg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4iV0FQIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCksCDgpKrgpY3gpLDgpLbgpYvgpKfgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpK7gpL4g4KSu4KWL4KSo4KS/4KSf4KSwIOCkl+CksOCljeCkqOClhyDgpLXgpL4g4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkquCkoOCkvuCkh+Ckj+CkleCkviDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkqOCkpuClh+CkluCkvuCkiCDgpK7gpYfgpJ/gpY3gpKjgpYcg4KSV4KWN4KS34KSu4KSk4KS+IOCkuOCkruCkvuCkteClh+CktiDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+IuCkmuCksuCkv+CksOCkueClh+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+IuCkteCksOCljeCkpOCkruCkvuCkqOCkruCkviDgpLAg4KSt4KSw4KSW4KSw4KWIIOCkmuCksuCkv+CksOCkueClh+CkleCkviDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYIg4KSs4KS+4KSw4KWH4KSV4KWLIOCkuOClguCkmuCkqOCkviDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpL/gpKQg4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkreCkj+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCkuOClguCkmuCkqOCkviDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJhY3RBY3Jvc3NVc2VycyIgbXNnaWQ9IjcxMTQyNTUyODE5NDQyMTE2ODIiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYIg4KSk4KSw4KWN4KSrIOCkheCkqOCljeCkpOCksOCljeCkleCljeCksOCkv+Ckr+CkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iMzY0NjcwOTYzNjIzMzg1Nzg2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkieCkquCkleCksOCko+CkruCkviDgpLXgpL/gpK3gpL/gpKjgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWCIOCkruCkvuCksOCljeCkq+CkpCDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYIg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWCIOCkrOCkv+CkmiDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSs4KS/4KSl4KWL4KSy4KWN4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWHIOCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJhY3RBY3Jvc3NVc2Vyc0Z1bGwiIG1zZ2lkPSIyNTY3NzM0Mjg1NTQ1MDc0MTA1Ij4i4KSV4KWB4KSw4KS+4KSV4KS+4KSo4KWAIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkueCksOClgiDgpKzgpL/gpJog4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpKrgpYLgpLDgpY3gpKMg4KSF4KSo4KWB4KSu4KSk4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJhY3RBY3Jvc3NVc2Vyc0Z1bGwiIG1zZ2lkPSIzNzY4NDEzNjgzOTU1MDIzNjYiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLjgpIHgpJfgpJXgpYsg4KSV4KWB4KSw4KS+4KSV4KS+4KSo4KWAIOCkuOCkrOCliCDgpLjgpK7gpY3gpK3gpL7gpLXgpKjgpL7gpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNlcnMiIG1zZ2lkPSIxNjc2MTUwOTExNjcyMjgyNDI4Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWCIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2VycyIgbXNnaWQ9Ijg0MDkzMDY2Njc2NDUzNTU2MzgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+LCDgpKrgpY3gpLDgpLbgpY3gpKgsIOCkuOCkv+CksOCljeCknOCkqOCkviDgpLAg4KSu4KWH4KSf4KS+4KSH4KS44KS54KS/4KSkIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4i4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLXgpL/gpLXgpLDgpKMg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSIxNTM4MjQ3NDE0NDA3MTc1OTkiPiLgpLXgpLDgpY3gpKTgpK7gpL7gpKjgpK7gpL4g4KSwIOCkreCksOCkluCksOCliCDgpJrgpLLgpL/gpLDgpLngpYfgpJXgpL4g4KSV4KS+4KSw4KWN4KSv4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpLXgpL/gpLjgpY3gpKTgpYPgpKQg4KS44KWC4KSa4KSo4KS+IOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkrOCkvuCksOClh+CkleCliyDgpKjgpL/gpJzgpYAg4KS44KWC4KSa4KSo4KS+IOCkquCkpOCljeCkpOCkviDgpLLgpJfgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4i4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpKrgpYHgpKjgpIPgpJXgpY3gpLDgpK4g4KSX4KSw4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVvcmRlclRhc2tzIiBtc2dpZD0iNzczNDIxNzc1NDg3NzQzOTM1MSI+IuCkleCkvuCkruCkueCksOClguCksuCkvuCkiCDgpIXgpJfgpY3gpLDgpK3gpL7gpJcg4KSwIOCkquClg+Ckt+CljeCkoOCkreClguCkruCkv+CkruCkviDgpLjgpL7gpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkr+CliyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSH4KSo4KSq4KWB4KSfIOCkrOCkv+CkqOCkviDgpKjgpYgg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVtb3ZlVGFza3MiIG1zZ2lkPSI2ODIxNTEzNDAxODcwMzc3NDAzIj4i4KSa4KS+4KSy4KWBIOCkreCkh+CksOCkueClh+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVtb3ZlVGFza3MiIG1zZ2lkPSIxMzk0NzE0MzUyMDYyNjM1NDkzIj4i4KSV4KS+4KSu4KS54KSw4KWCIOCkueCkn+CkvuCkieCkqCDgpLAg4KSJ4KSo4KWA4KS54KSw4KWC4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLXgpY3gpK/gpLXgpLngpL7gpLDgpLLgpL7gpIgg4KSF4KSs4KSw4KWL4KSnIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iNzM5MTE5MTM4NDAyNzMwMzA2NSI+ImFjdGl2aXR5IHN0YWNrcyDgpJXgpYsg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iMTYxNTg4MTkzMzAzNDA4NDQ0MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkmuCksuCljeCkqOClhyBhY3Rpdml0eSBzdGFja3Mg4KSy4KS+4KSIIOCkpeCkquCljeCkqCwg4KS54KSf4KS+4KSJ4KSoIOCksCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkteCljeCkr+CkteCkueCkvuCksOCksuCkvuCkiCDgpLXgpL/gpJjgpJ/gpKgg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9IjI5MTg3NjgyMzgwNDUyMDY0NTYiPiLgpJXgpYHgpKjgpYgg4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iOTk3ODIzNjk1MzQzNTg0MDAxIj4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkuOClgeCksOCkleCljeCkt+CkviDgpLXgpL4g4KSo4KS/4KSw4KWN4KSv4KS+4KSkIOCkheCkteCkuOCljeCkpeCkvuCksuCkvuCkiCDgpLXgpL7gpLjgpY3gpKTgpL4g4KSo4KSX4KSw4KS/4KSV4KSoIOCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSV4KS+4KSw4KWN4KSvIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTc1Mzg3MTE4ODYxODQyMDYxIj4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkheCkqOClgeCkleClguCksuCkpOCkviDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5MjA0MzYxODY5MzkxNzM3NCI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpLngpLDgpYLgpJXgpYsg4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkruCkv+CksuCljeCkpuCliyDgpK7gpYvgpKHgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CkueCksOClguCkleCliyDgpLXgpY3gpK/gpLXgpLngpL7gpLAg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpJ/gpYHgpJ/gpL7gpIngpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXREZWJ1Z0FwcCIgbXNnaWQ9IjMwMjIxMDcxOTg2ODY1ODQwNTIiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSh4KS/4KSs4KSXIOCkl+CksOCljeCkqOClhyDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0RGVidWdBcHAiIG1zZ2lkPSI0NDc0NTEyNDE2Mjk5MDEzMjU2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkoeCkv+CkrOCklyDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkmuCkvuCksuClgSDgpJfgpLDgpY3gpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KS44KSu4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpK/gpLjgpJXgpYsg4KSJ4KSq4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MTYyMDkyMTg1MTI0MjM0NDgwIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkquCljeCksOCkpuCksOCljeCktuCkqCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkleCkqOCljeCkq+Ckv+Ckl+CksOClh+CkuOCkqCDgpJzgpLjgpY3gpKTgpYgg4KSy4KWL4KSV4KWN4KSv4KS+4KSyIOCkteCkviDgpLjgpKzgpYjgpKTgpL/gpLAg4KSr4KSo4KWN4KSfIOCkhuCkleCkvuCksCDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI1Njg0NTA0MDU4MTkyOTIxMDk4Ij4i4KSV4KS+4KSwIOCkruCli+CkoSDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiLgpJXgpL7gpLAg4KSu4KWL4KSh4KSy4KS+4KSIIOCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSI0NTkzMzUzMjM1OTU5NzMzMTE5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkueCksOClgiDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSa4KSy4KWN4KSo4KSs4KS+4KSfIOCksOCli+CkleCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSm4KSs4KS+4KSs4KSu4KS+IOCksOCli+CkleCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSs4KSy4KSq4KWC4KSw4KWN4KS14KSVIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlQmFjayIgbXNnaWQ9IjY1MjkzNTIwNDA3MjU4NDYxNiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkrOCksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZUJhY2siIG1zZ2lkPSIzODkyMjk1ODMwNDE5NTEzNjIzIj4i4KSF4KSX4KWN4KSw4KSt4KS+4KSX4KSu4KS+IOCkreCkj+CkleCliyDgpJXgpYHgpKjgpYgg4KSX4KSk4KS/4KS14KS/4KSn4KS/4KSy4KS+4KSIIOCknOCkrOCksOCknOCkuOCljeCkpOClgCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCksCDgpKvgpLDgpY3gpJXgpYfgpLAg4KSc4KS+4KSo4KSV4KS+IOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSHIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJXgpKTgpL4g4KSq4KSw4KWN4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kdW1wIiBtc2dpZD0iMTY4MTc5OTg2MjQzODk1NDc1MiI+IuCkquCljeCksOCko+CkvuCksuClgOCkleCliyDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KS44KWN4KSl4KS/4KSk4KS/IOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+IuCkquCljeCksOCko+CkvuCksuClgOCkleCliyDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KS44KWN4KSl4KS/4KSk4KS/IOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIngpKjgpYDgpLngpLDgpYLgpLLgpL7gpIgg4KS44KS+4KSu4KS+4KSo4KWN4KSv4KSk4KSDIOCkleCkueCkv+CksuCljeCkr+CliCDgpKjgpJrgpL7gpLngpL/gpKjgpYcg4KS14KWN4KSv4KS+4KSq4KSVIOCkteCkv+CkteCkv+Ckp+CkpOCkvuCkleCliyDgpKjgpL/gpJzgpYAg4KSwIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iODAyMjU4ODYwODk5NDU4OTkzOCI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iMzE5MzI2OTA2OTQ2OTcwMDI2NSI+IuCkuOCkleCljeCksOCkv+CkryDgpLXgpL/gpKjgpY3gpKHgpYvgpJXgpYsg4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KSy4KS+4KSIIOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKrgpYHgpLDgpYgg4KS14KS/4KSo4KWN4KSh4KWL4KSV4KWLIOCkteCkv+Ckt+Ckr+CkteCkuOCljeCkpOClgSDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljSDgpLAg4KSq4KS+4KS44KS14KSw4KWN4KSh4KS54KSw4KWC4KSs4KS+4KS54KWH4KSVIOCkr+CkuOCkleCkviDgpLjgpKzgpYgg4KSq4KS+4KSg4KSV4KWLIOCknOCkvuCkgeCkmiDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl90ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIyMzEyNjEyMTM1MTI3MzEwMjU0Ij4i4KSq4KS54KWB4KSB4KSa4KSk4KS+4KSy4KS+4KSIIOCkheCkuOCljeCkpeCkvuCkr+ClgCDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iODA3OTQ1NjI5MzE4Mjk3NTQ2NCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkieCkquCkleCksOCko+CkruCkvuCkpeCkvyDgpKrgpLngpYHgpIHgpJog4KSw4KS+4KSW4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpJXgpYsg4KS44KS54KSu4KSk4KS/IOCkrOCkv+CkqOCkviDgpKjgpYgg4KSq4KS54KWB4KSB4KSa4KSy4KS+4KSIIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9Ijg1MzIyOTUxOTkxMTI1MTkzNzgiPiLgpLXgpL/gpKjgpY3gpKHgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9IjQ5OTg4MzYzNzA0MjQxODY4NDkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS/4KSo4KWN4KSh4KWLIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkleCkrOCkvuCknyDgpLXgpL/gpKjgpY3gpKHgpYvgpLngpLDgpYLgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkieCkquCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KSo4KS/4KSu4KS/4KSk4KWN4KSkIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpKjgpL8g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4Njc1NTM1NjQ4ODA3NDI3Mzg5Ij4i4KSY4KSf4KSo4KS+4KS54KSw4KWCIOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4MDA2MjM2MzE1ODg4MzQ3NjgwIj4i4KSH4KSo4KWN4KSq4KWB4KSfIOCkq+Ckv+CksuCljeCkn+CksCDgpJzgpYHgpKgg4KS44KSs4KWIIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSq4KSg4KS+4KSH4KSo4KWB4KSt4KSo4KWN4KSm4KS+IOCkquCkueCkv+CksuClhyDgpKvgpL/gpLLgpY3gpJ/gpLAg4KSX4KSw4KWN4KSo4KWH4KSy4KS+4KSIIOCkpuCksOCljeCkpOCkviDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KSV4KWLIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpKzgpL/gpKjgpL4g4KSo4KWIIFVJIOCkquCljeCksOCko+CkvuCksuClgCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI1OTczNjI2NzM4MTcwNjE4Nzc1Ij4i4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjcxMjEyMzU2ODQ1MTUwMDM3OTIiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSo4KSV4KWLIOCkuOCkvuCkruCkl+CljeCksOClgCDgpIbgpLXgpLDgpY3gpKfgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkuOCkguCkleCljeCksOCkruCkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWNIOCknOCkuOCksuClhyDgpIngpKrgpJXgpLDgpKPgpLLgpL7gpIgg4KSF4KSo4KWB4KSq4KSv4KWL4KSX4KWAIOCkrOCkqOCkvuCkieCkgeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2h1dGRvd24iIG1zZ2lkPSI3MTg1NzQ3ODI0MDM4OTA5MDE2Ij4i4KSG4KSC4KS24KS/4KSVIOCkrOCkqOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NodXRkb3duIiBtc2dpZD0iNzA0NjUwMDgzODc0NjI5MTc3NSI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpLXgpY3gpK/gpLXgpLjgpY3gpKXgpL7gpKrgpJXgpLLgpL7gpIgg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClhyDgpIXgpLXgpLjgpY3gpKXgpL7gpK7gpL4g4KSw4KS+4KSW4KWN4KSb4KWkIOCkquClguCksOCljeCkoyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWHIOCkleCkvuCkriDgpJfgpLDgpY3gpKbgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjQxMzg2MDg2MTA3MTc0MjU1NzMiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWN4KS14KS/4KSa4KS54KSw4KWCIOCknOCli+Ckl+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjgyNjIxOTU4MDI1ODIyNTUwMjEiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSu4KS+IOCkuOCljeCkteCkv+CkmiDgpJfgpLDgpY3gpKjgpKzgpL7gpJ8g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWC4KSy4KS+4KSIIOCksOCli+CkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUzNzkyMjMxMTQxMTU0NjAxNiI+IuCkteCksOCljeCkpOCkruCkvuCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSI4MTUzNjUxNDM0MTQ1MTMyNTA1Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSV4KWLIOCkheCkl+CljeCksCDgpK3gpL7gpJfgpK7gpL4g4KS54KS+4KSy4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLAg4KS44KWH4KS14KS+4KS54KSw4KWC4KSV4KS+IOCkrOCkvuCksOClhyDgpKjgpL/gpJzgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkqOCkv+CkleCkvuCksuCljeCkqCDgpKzgpL7gpLngpJXgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iODkyMjM5MDk0ODY3MTgyNjU2Ij4i4KS44KSs4KWIIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpYHgpLDgpYHgpLXgpL7gpKQg4KSX4KSw4KWN4KSo4KWHIOCkqOCkv+CksOClgOCkleCljeCkt+CkoyDgpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KS44KSw4KWAIOCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYHgpLDgpYHgpLXgpL7gpKQg4KSX4KSk4KS/4KS54KSw4KWCIOCkruCli+CkqOCkv+Ckn+CksCDgpJfgpLDgpY3gpKgg4KSwIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkquCljeCksOCko+CkvuCksuClgOCkruCkviDgpKrgpYLgpLDgpY3gpKMg4KS44KS54KSu4KSkIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYfgpLXgpLIg4KS14KS/4KSV4KS+4KS44KSV4KWLIOCksuCkvuCkl+CkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSbLCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpLngpL/gpLLgpYcg4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjI1NzYzMzM0MzQ4OTM1MzI0NzUiPiLgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KS54KSf4KS+4KSH4KSP4KSV4KWLIOCkquCljeCksOCkuOCkvuCksOCko+CksuCkvuCkiCDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjY2MjE5MDEyMTYyMDc5MzEwODkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KWC4KSa4KSo4KS+IOCkquCljeCksOCkuOCkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmyDgpJzgpYHgpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkquCljeCkr+CkvuCkleClh+CknCDgpLngpJ/gpL7gpIfgpI/gpJXgpYsg4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpY3gpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KWLIOCkleClgeCkqOCliCDgpIXgpKjgpY3gpK8g4KSa4KS+4KSy4KWBIOCkheCkqOClgeCljeCkquCljeCksOCkr+Cli+CklyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiJTTVMt4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkquCljeCksOCkuOCkvuCksOCkoyDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiLgpKTgpY3gpK/gpYsg4KSP4KSJ4KSf4KS+IFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpKzgpL7gpJ8g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkreCkj+CkleCliyDgpLjgpYLgpJrgpKjgpL7gpLLgpL7gpIgg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpIbgpIngpIHgpKbgpYgg4KSX4KSw4KWH4KSV4KWLIFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYLgpLLgpL7gpIgg4KSc4KS+4KSy4KS44KS+4KSc4KWAIOCkl+CksOCljeCkqCDgpLjgpL7gpK/gpKYg4KSW4KSw4KS+4KSsIOCkreCkj+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KS44KSy4KS+4KSIIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+IldBUC1QVVNILeCkquCljeCksOCkvuCkquCljeCkpCDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KWC4KSa4KSo4KS+IOCkquCljeCksOCkuOCkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmyDgpJzgpYHgpKgg4KSP4KSJ4KSf4KS+IFdBUCBQVVNIIOCkuOCkqOCljeCkpuClh+CktiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSt4KSP4KSV4KWLIOCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyBNTVMg4KS44KSo4KWN4KSm4KWH4KS2IOCkrOCkv+Ckl+CkvuCksOCljeCkqCDgpLXgpL4g4KSu4KWM4KSoIOCkpOCksOCkv+CkleCkvuCksuClhyDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkteClh+CkrOCkquClg+Ckt+CljeCkoOCkleCliyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSW4KSw4KS+4KSsIOCkteCkv+CkreClh+CkpuCkueCksOClguCkuOCkgeCklyDgpKzgpKbgpLLgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjI0NTE4NzM2NjQzNjM2NjI2NjYiPiLgpJrgpL7gpLLgpYEg4KSq4KWN4KSw4KS24KWL4KSn4KSo4KS54KSw4KWC4KSV4KWLIOCkuOCkmeCljeCkluCljeCkr+CkviDgpLjgpYDgpK7gpKTgpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iNzMxODA2MTMxNDA0MDg3OTU0MiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJrgpL7gpLLgpYEg4KS54KWB4KSo4KWHIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkueCksOClguCkleCliyDgpIXgpKfgpL/gpJXgpKTgpK4g4KS44KSC4KSW4KWN4KSv4KS+IOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpLngpL/gpLLgpYcg4KSq4KSo4KS/IOCkhuCkteCktuCljeCkr+CklSDgpKjgpKrgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiLgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSm4KSs4KS+4KSsIOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSX4KSk4KS/4KS14KS/4KSn4KS/4KS54KSw4KWCIOCkuOCkp+CliOCkgSDgpLjgpK7gpL7gpKrgpY3gpKQg4KSt4KSv4KWLIOCkleCkvyDgpK3gpI/gpKgg4KSc4KSsIOCkleCkvyDgpJzgpKTgpL8g4KS44KSV4KWN4KSm4KWLIOCkpOCkv+CkqOClgOCkueCksOClgiDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL/gpK7gpL4g4KSc4KS+4KSo4KWN4KSb4KSo4KWNIOCkreCkqOCljeCkqOClhyDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmF0dGVyeVN0YXRzIiBtc2dpZD0iMjc4OTYxMDY3MzUxNDEwMzM2NCI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkvyDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmF0dGVyeVN0YXRzIiBtc2dpZD0iNTg5NzM0NjU4Mjg4MjkxNTExNCI+IuCkteCksOCljeCkpOCkruCkvuCkqCDgpKXgpYvgpLDgpYgg4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KWAIOCkquCljeCksOCkr+Cli+CklyDgpKHgpYfgpJ/gpL4g4KSq4KSi4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpI/gpJUg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSc4KWB4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClgOCksOCkueCkqOClgeCkreCkj+CkleCliyDgpJsg4KSk4KWN4KSv4KS44KWN4KSV4KWLIOCkrOCkvuCksOClh+CkleCkviDgpKrgpYHgpLDgpY3gpKMg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KS44KS+4KSv4KSmIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIzNzE5Njg5NzY0NTM2Mzc5NTU3Ij4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQmF0dGVyeVN0YXRzIiBtc2dpZD0iNjg2MjgxNzg1NzE3ODAyNTAwMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpILgpJXgpLLgpL/gpKQg4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSIxNTA4Nzc5Njg3NDM2NTg1NzQ0Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCkguCkmuCkvuCksuCkqOCkleCkviDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpJXgpLngpLDgpYIg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iNjI0Mzg4NzA0MTU3NzkxMjg3NyI+IuCkuOCkmeCljeCkleCksuCkqCDgpJfgpLDgpL/gpI/gpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCkguCkmuCkvuCksuCkqCDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpLLgpL7gpIgg4KSq4KWB4KSo4KSDIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI4ODI5MDk3MzczODUxNTIxNTA1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCkguCkmuCksuCkvuCkqCDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpJXgpLngpLDgpYLgpLLgpL7gpIgg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUFwcE9wc1N0YXRzIiBtc2dpZD0iNTA3ODQ1OTY1OTQ0MDM0ODMiPiLgpLjgpJngpY3gpJXgpLLgpKgg4KSX4KSw4KS/4KSP4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpILgpJrgpL7gpLLgpKgg4KSk4KSl4KWN4KSv4KS+4KSZ4KWN4KSy4KS+4KSIIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmFja3VwIiBtc2dpZD0iNDcwMDEzMDIyODY1NDUzOTIwIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkrOCljeCkr+CkleCkheCkqiDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpKrgpYHgpKjgpIMg4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhY2t1cCIgbXNnaWQ9IjY5MTIyMzA1MjUxNDA1ODk4OTEiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpJXgpYsg4KSc4KSX4KWH4KSh4KS+IOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSwIOCkquClgeCkqOCkg+CkquCljeCksOCkvuCkquCljeCkpOCkv+CkleCliyDgpLjgpILgpK/gpYvgpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpL/gpKQg4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSI1NTU3MDcxMzI1ODA0NDY5MTAyIj4i4KSq4KWC4KSw4KWN4KSjIOCknOCkl+Clh+CkoeCkviDgpJfgpLDgpY3gpKgg4KS14KS+IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkviDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkqOCkv+CktuCljeCkmuCkv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maXJtX2Z1bGxfYmFja3VwIiBtc2dpZD0iMTc0ODc2MjE3MTYzNzY5OTU2MiI+IlVJIOCkleCliyDgpKrgpYLgpLDgpY3gpKMg4KSc4KSX4KWH4KSh4KS+IOCkqOCkv+CktuCljeCkmuCkv+CkqOCljeCkpOCkpOCkviDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KSV4KS+IOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJXgpYHgpKjgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSs4KS+4KSfIOCkquCljeCksOCkr+Cli+CklyDgpKjgpJfgpLDgpL/gpKjgpYfgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iMjE0ODU2MzYyODE0MDE5MzIzMSI+IuCkheCkqOCkp+Ckv+CkleClg+CkpCDgpKzgpL/gpKjgpY3gpKHgpYvgpLngpLDgpYIg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iNzQ1ODM4Nzc1OTQ2MTQ2NjM5NyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL/gpKjgpY3gpKHgpYvgpLngpLDgpYIg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbIOCknOClgeCkqCDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpLjgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpK3gpL/gpKrgpY3gpLDgpYfgpLDgpL/gpKQg4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iMzU0MzM0Nzk4MDgzOTUxODYxMyI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpK7gpL4g4KSa4KS/4KSk4KWN4KSwIOCkleCli+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iODU4NDY3ODM4MTk3MjgyMDExOCI+IuCkheCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpK7gpL7gpKXgpL8g4KS14KS+IOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpLjgpJXgpL4g4KSt4KS+4KSX4KS54KSw4KWC4KSu4KS+IOCkmuCkv+CkpOCljeCksCDgpJXgpYvgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSk4KS/4KSo4KWA4KS54KSw4KWC4KSy4KWHIOCkleClgeCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KSH4KSo4KWN4KSf4KSw4KSr4KWH4KSV4KWLIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpLjgpIHgpJcg4KS54KS44KWN4KSk4KSV4KWN4KS34KWH4KSqIOCkl+CksOCljeCkqCDgpLXgpL4g4KSk4KSq4KS+4KSI4KSBIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpK7gpL4g4KSV4KWHIOCkpuClh+CkluCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIOCkreCkqOCljeCkqOClhyDgpLjgpYvgpJrgpY3gpKgg4KS54KWB4KSo4KWN4KSbIOCkreCkqOCljeCkqOClhyDgpKzgpKbgpLLgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiLgpJfgpY3gpLLgpYvgpKzgpLIg4KS44KSc4KWA4KS14KS/4KSV4KSw4KSjIOCkl+CkpOCkvyDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4i4KS14KS/4KS24KWN4KS14KSs4KWN4KSv4KS+4KSq4KS/IOCkuOCknOClgOCkteCkv+CkleCksOCkoyjgpKbgpY3gpLDgpYHgpKQg4KS14KS+IOCkouCkv+CksuCkviDgpLjgpJzgpYDgpLXgpL/gpJXgpLDgpKPgpLngpLDgpYIpIOCksuCkvuCkiCDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkuOCkruCkryDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpJ/gpYvgpJXgpKjgpLngpLDgpYIg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSG4KSr4KWN4KSo4KS+IOCkn+Cli+CkleCkqOCkueCksOClgiDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSoIOCksCDgpIngpKjgpYDgpLngpLDgpYLgpJXgpYsg4KS44KS+4KSn4KS+4KSw4KSjIFot4KSV4KWN4KSw4KSu4KS+4KSZ4KWN4KSV4KSoIOCkrOCkvuCkh+CkquCkvuCkuCDgpJfgpLDgpYfgpLAg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleCkueCkv+CksuCljeCkr+CliCDgpKrgpKjgpL8g4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkueClgeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9IjQ3MDgxODExODQ0NDE4ODAxNzUiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSr4KWN4KSw4KS/4KScIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9Ijg1NTg5MjM3ODkyMjI2NzAwNjQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWC4KSw4KWN4KSjLeCkuOCljeCkleCljeCksOCkv+CkqCDgpLjgpILgpJXgpY3gpLDgpK7gpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkuOCljeCkpeCkv+CksCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5qZWN0RXZlbnRzIiBtc2dpZD0iMTM3ODc0NjU4NDAyMzU4NjYwMCI+IuCkleClgeCknuCljeCknOClgOCkueCksOClgiDgpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkrOCkn+CkqOCkueCksOClgiDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNjM1MjU2NTU5OTk2ODYzMiI+IuCkr+CkuOCkleCkviDgpIbgpKvgpY3gpKjgpL4g4KSH4KSo4KSq4KWB4KSfIOCkmOCkn+CkqOCkvuCkueCksOClgiAo4KSV4KS/IOCkpeCkv+CkmuCkvuCkh+CkueCksOClgiwg4KSG4KSm4KS/KSDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkteCkv+CkpOCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpLjgpLLgpL7gpIgg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KS44KSu4KWN4KSuIOCksuCliOCknOCkvuCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+IuCkr+CkuOCljeCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KSo4KS/4KS14KWH4KS2IOCkmOCkn+CkqOCkvuCkueCksOClgiAo4KSV4KS/IOCkpeCkv+CkmuCkvuCkh+CkueCksOClgiwg4KSG4KSm4KS/Likg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCli+Ckr+Ckl+CkueCksOClguCksuCkvuCkiCDgpKrgpYHgpY3gpLDgpY3igI3gpK/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSr4KWL4KSo4KSy4KS+4KSIIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpJfgpLDgpY3gpKgg4KSv4KS44KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iNDY5NDI4OTAwMDQxMjQ5MjM0Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkleClhyDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCksCDgpJXgpYcg4KSV4KS+4KSw4KWN4KSv4KS54KSw4KWCIOCksuCkv+CkqOClgeCkueClgeCkqOCljeCkmyDgpLDgpYfgpJXgpLDgpY3gpKEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI4Mzg3NzU0OTAxNjg4NzI4MDQzIj4i4KSF4KSw4KWN4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyjgpJzgpLjgpY3gpKTgpYgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpL7gpIcp4KS44KSB4KSXIOCkheCkqOCljeCkpOCksOCljeCkleCljeCksOCkv+Ckr+CkviDgpJfgpLDgpYfgpJXgpYsg4KSs4KWH4KSy4KS+IOCkquCkqOCkvyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSl4KS/4KSa4KWH4KSV4KS+IOCkleCkv+CkueCksOClguCksuCkvuCkhyDgpLngpYfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkueClgeCkgeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzM2MDA2NDYyMDIzMDUxNTc3NiI+IuCkj+CkieCkn+CkviDgpKjgpL/gpLXgpYfgpLYg4KSk4KSw4KS/4KSV4KS+4KSu4KS+IOCkrOCkvuCkgeCkp+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMyNTA0NDAzMjI4MDcyODYzMzEiPiLgpI/gpIngpJ/gpL4g4KSo4KS/4KS14KWH4KS2IOCkpOCksOCkv+CkleCkvuCkleCliyDgpIngpJrgpY3gpJog4KS44KWN4KSk4KSw4KSV4KWLIOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCksuCkvuCkiCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4KSo4KWH4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjUzNTc3MzM5NDI1NTYwMzE1OTMiPiLgpI/gpIngpJ/gpL4g4KSq4KS54KWB4KSB4KSaIOCkuOClh+CkteCkvuCkuOCkgeCklyDgpJzgpYvgpKHgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI3MDM0NjE1OTI4NjA5MzMxMzY4Ij4i4KSP4KSVIOCkquCkueClgeCkgeCkmiDgpLjgpYfgpLXgpL7gpJXgpYsg4KSJ4KSa4KWN4KSaIOCkuOCljeCkpOCksOCkleCliyDgpJXgpYHgpLDgpL7gpJXgpL7gpKjgpYDgpLLgpL7gpIgg4KSq4KSV4KWN4KSV4KS+IOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS44KSu4KS+4KSk4KWAIOCksOCkvuCkluCljeCkqOClh+CksuClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iODQ2MjgxNTE3OTU3Mjc0ODc2MSI+IuCkj+CkieCkn+CkviDgpKrgpY3gpLDgpL/gpKjgpY3gpJ8g4KS44KWH4KS14KS+4KS44KSB4KSXIOCknOCli+CkoeCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI3OTYwMDY3NjIzMjA5MTExMTM1Ij4i4KSP4KSJ4KSf4KS+IOCkquCljeCksOCkv+CkqOCljeCknyDgpLjgpYfgpLXgpL7gpJXgpYsg4KSJ4KSa4KWN4KSaIOCkuOCljeCkpOCksOCkleCliyDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpLjgpLLgpL7gpIgg4KSq4KSV4KWN4KSV4KS+IOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0FsbFByaW50Sm9icyIgbXNnaWQ9IjExMjA3OTI0Njg0NjU3MTExNTkiPiLgpLjgpKzgpYgg4KSq4KWN4KSw4KS/4KSo4KWN4KSfIOCkleCkvuCksOCljeCkr+CkueCksOClguCkleCliyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQWxsUHJpbnRKb2JzIiBtc2dpZD0iMjk3ODE4NTMxMTA0MTg2NDc2MiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCksuCkvuCkiCDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSm4KWN4KS14KS+4KSw4KS+IOCkqOCkv+CksOCljeCkruCkv+CkpCDgpKrgpY3gpLDgpL/gpKjgpY3gpJ8g4KSV4KS+4KSw4KWN4KSv4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSIyNzUyNzMxMzAwNDE5NDEwNzI0Ij4iTkZDIOCkuOClh+CkteCkvuCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiJORkMg4KSV4KS+4KSw4KWN4KSh4KS54KSw4KWCIOCkh+CkruClgeCksuClh+CknyDgpJfgpLDgpY3gpKjgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkrOCkvuCkgeCkp+CljeCkqOCkleCkviDgpLLgpL7gpJfgpL8g4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCkviDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI3MzU4Mzc4NDAxOTE1Mjg3OTM4Ij4i4KSP4KSJ4KSf4KS+IOCkquCkvuCkoCDgpLjgpYfgpLXgpL7gpLjgpIHgpJcg4KS44KSC4KSX4KSg4KS/4KSkIOCkueClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLgpI/gpIngpJ/gpL4g4KSq4KS+4KSgIOCkuOClh+CkteCkvuCkleCliyAo4KSJ4KSm4KS+4KS54KSw4KSjIOCktuCkrOCljeCkpiDgpKrgpLDgpYDgpJXgpY3gpLfgpKPgpLjgpYfgpLXgpL4pIOCkieCkmuCljeCkmiDgpLjgpY3gpKTgpLDgpJXgpYsg4KSH4KSo4KWN4KSf4KSw4KSr4KWH4KS44KSy4KS+4KSIIOCkquCkleCljeCkleCkviDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkruCkvuCkpOClgCDgpLDgpL7gpJbgpY3gpKjgpYfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4iVlBOIOCkuOClh+CkteCkvuCkuOCkgeCklyDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLgpI/gpJUgVnBuIOCkuOClh+CkteCkvuCkleCliyDgpIngpJrgpY3gpJog4KS44KWN4KSk4KSw4KSV4KWLIOCkleClgeCksOCkvuCkleCkvuCkqOClgOCksuCkvuCkiCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4KSo4KWH4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i4KSP4KSJ4KSf4KS+IOCkteCkvuCksuCkquClh+CkquCksOCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuCkteCkvuCksuCkquClh+CkquCksOCkleCliyDgpK7gpL7gpKXgpL/gpLLgpY3gpLLgpYsg4KS44KWN4KSk4KSw4KSV4KWLIOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKgg4KSn4KS+4KSw4KSV4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IuCkj+CkieCkn+CkviDgpLXgpL/gpJzgpYfgpJ8g4KS44KWH4KS14KS+4KS44KSB4KSXIOCkuOCkguCkl+CkoOCkv+CkpCDgpLngpYHgpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i4KSP4KSJ4KSf4KS+IOCkteCkv+CknOClh+CknyDgpLjgpYfgpLXgpL7gpJXgpYsg4KSJ4KSa4KWN4KSaIOCkuOCljeCkpOCksOCkleCliyDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpLjgpLLgpL7gpIgg4KSq4KSV4KWN4KSV4KS+IOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS44KSu4KS+4KSk4KWAIOCksOCkvuCkluCljeCkqOClh+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCkquCljeCksOCkrOCkqOCljeCkp+CkuOCkgeCklyDgpIXgpKjgpY3gpKTgpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i4KSJ4KSq4KSV4KSw4KSjIOCkquCljeCksOCktuCkvuCkuOCklSDgpLLgpL7gpIgg4KSG4KS24KSvIOCkquCkoOCkvuCkieCkqCDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4oCN4KSo4KWH4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4i4KSP4KSJ4KSf4KS+IOCkieCkquCkleCksOCkoyDgpLXgpY3gpK/gpLXgpLjgpY3gpKXgpL7gpKrgpJUg4KSl4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KS54KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+IuCkueCli+CksuCljeCkoeCksOCksuCkvuCkiCDgpLjgpJXgpY3gpLDgpL/gpK8g4KSJ4KSq4KSV4KSw4KSjIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkleCkueCksOClgiDgpKXgpKog4KSX4KSw4KWN4KSoIOCkteCkviDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSq4KSo4KS/IOCkhuCkteCktuCljeCkr+CklSDgpKjgpLngpYHgpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMzNjU5NDc3MTcxNjM4NjY4NDQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSF4KSt4KS/4KSu4KWB4KSW4KS/4KSV4KSw4KSjIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpK7gpK/gpK7gpL4g4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSV4KWLIOCkquCksOCkv+CkleCljeCksOCkruCkoyDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iOTE3NTM3MTYxMzMyMjU2MjkzNCI+IuCkuOCkmeCljeCkleClh+CkpOCklSDgpJfgpKTgpL8g4KSs4KSm4KSy4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iNjg2NjU2MzIzNDI3NDEwNDIzMyI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KS44KSu4KSv4KSu4KS+IOCkruCkvuCkieCkuCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkteCkviDgpJ/gpY3gpLDgpL7gpJXgpKrgpY3gpK/gpL7gpKEg4KS44KSC4KSV4KWH4KSk4KSV4KSV4KWLIOCkl+CkpOCkvyDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkqOCkmuCkvuCkueCkv+CkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iNDc3ODczMTcwMzYwMDkwOTM0MCI+IuCkleCkv+CkrOCli+CksOCljeCkoSDgpLLgpYfgpIbgpIngpJ8g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iODQ4MDAxNjc3MTEzNDE3NTg3OSI+IuCkleCkv+CkrOCli+CksOCljeCkoSDgpLLgpYfgpIbgpIngpJ/gpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpLjgpL7gpK/gpKYg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+IkxpbnV4IOCkuOCkguCkleClh+CkpOCkueCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiLgpLjgpKzgpYgg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkueCksOClguCkruCkviDgpKrgpKDgpL7gpIfgpI/gpJXgpL4g4KS44KSC4KSV4KWH4KSk4KSy4KS+4KSIIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCknOCkueCkv+CksuClhyDgpKrgpKjgpL8g4KSa4KSy4KWN4KSo4KWHIOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+IuCkr+CkuOCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KSu4KWH4KSu4KWL4KSw4KWA4KSu4KS+IOCkpuClg+CkoiDgpK3gpI/gpJXgpYvgpJXgpYsg4KSF4KSC4KS2IOCkrOCkqOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkouCkv+CksuCliyDgpJfgpLDgpL7gpIngpIHgpKbgpYgg4KSX4KSw4KWH4KSV4KS+IOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KS44KWA4KSu4KS/4KSkIOCkruCkvuCkpOCljeCksOCkvuCkruCkviDgpK/gpLjgpLLgpYcg4KSu4KWH4KSu4KWL4KSw4KWAIOCkieCkquCksuCkrOCljeCkpyDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK7gpYfgpK7gpYvgpLDgpYDgpK7gpL4g4KSG4KSr4KWI4KSC4KSV4KWLIOCkqOCkv+CksOCkqOCljeCkpOCksOCkleCliyDgpIXgpILgpLYg4KSs4KSo4KS+4KSJ4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkq+Cli+CkqOCksuCkvuCkiCDgpKLgpL/gpLLgpL4g4KSs4KSo4KS+4KSP4KSwIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpK7gpL4g4KSu4KWH4KSu4KWL4KSw4KWAIFNJTeCkv+CkpCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVQYWNrYWdlcyIgbXNnaWQ9IjE4NDM4NTEyOTUzNzcwNTkzOCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkquCljeCkr+CkvuCkleClh+CknOCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CkuOCksuCkvuCkiCDgpK7gpLngpKTgpY3gpKTgpY3gpLXgpKrgpYLgpLDgpY3gpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjI3NDEwOTE5MTg0NTg0Mjc1NiI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4i4KSq4KWN4KSw4KSv4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpJXgpY3gpK/gpL7gpLjgpLngpLDgpYIg4KSu4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KWN4KSv4KS+4KS4IOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKDgpL7gpIngpIHgpJXgpYsg4KSu4KS+4KSq4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK/gpLjgpJXgpYsg4KSV4KWL4KShLCDgpKHgpYfgpJ/gpL4sIOCksCDgpJXgpY3gpK/gpL7gpLgg4KSG4KSV4KS+4KSw4KS54KSw4KWCIOCkquClgeCkqOCkg+CkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLjgpL/gpKfgpYgg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLgpKjgpK/gpL7gpIEg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqCDgpLXgpL4g4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkquCljeCkr+CkvuCkleClh+CknOCkueCksOClgiDgpIXgpKbgpY3gpK/gpL7gpLXgpKfgpL/gpJUg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KS44KSy4KS+4KSIIOCkruCkqOCkquCksOClgCDgpLDgpYLgpKrgpK7gpL4g4KS24KSV4KWN4KSk4KS/4KS24KS+4KSy4KWAIOCkheCkqOClgeCkruCkpOCkv+CkueCksOClgiDgpK3gpI/gpJXgpL4g4KSo4KSv4KS+4KSBIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpKXgpKrgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwQ2FjaGUiIG1zZ2lkPSI3NDg3Mjc5MzkxNzIzNTI2ODE1Ij4i4KS44KSs4KWIIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpJXgpY3gpK/gpL7gpLgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzQ2NDA4NzE5NDU0MzQ1NjUiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkleCljeCkr+CkvuCkuCDgpKHgpL7gpIfgpLDgpYfgpJXgpY3gpJ/gpLDgpYDgpLngpLDgpYLgpK7gpL4g4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkueCkn+CkvuCkj+CksCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpJXgpYsg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkluCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSJ4KSo4KWA4KS54KSw4KWC4KSy4KWHIOCkhuCkq+CljeCkqOCliyDgpKHgpYfgpJ/gpL4g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KS+4KSy4KWHIOCkr+CkuOCksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkuOCljeCkn+CkvuCksOCljeCknyDgpLngpYHgpKgg4KSo4KS/4KSV4KWIIOCkouCkv+CksuCliyDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpJXgpY3gpK/gpL7gpLgg4KSh4KS+4KSH4KSw4KWH4KSV4KWN4KSf4KSw4KWA4KSu4KS+IOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpI/gpLAg4KSr4KWL4KSoIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSs4KSi4KWAIOCkouCkv+CksuCkviDgpLjgpYHgpLDgpYEg4KSX4KSw4KS+4KSJ4KSB4KSbIOCkleCkv+CkqOCkleCkvyDgpKTgpL/gpKjgpYDgpLngpLDgpYLgpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIPgpKrgpY3gpLDgpL7gpKrgpY3gpKTgpL8g4KSX4KSw4KWN4KSoIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3ZlUGFja2FnZSIgbXNnaWQ9IjMyODk4OTAyNzE2NDU5MjE0MTEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCkuOCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdmVQYWNrYWdlIiBtc2dpZD0iMzE5NTYyMjE3Nzc4MjQ0NTI0Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCljeCksOCli+CkpOCkueCksOClgiDgpIbgpKjgpY3gpKTgpLDgpL/gpJXgpKzgpL7gpJ8g4KSs4KS+4KS54KWN4KSvIOCkruClh+CkoeCkv+Ckr+CkvuCkruCkviDgpLAg4KS14KS/4KSq4KSw4KS/4KSk4KSu4KS+IOCksuCliOCknOCkvuCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZExvZ3MiIG1zZ2lkPSI2NjE1Nzc4NTQzMTk4OTY3NjE0Ij4i4KS44KSC4KS14KWH4KSo4KS24KWA4KSyIOCksuCklyDgpKHgpYfgpJ/gpL4g4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKvgpL7gpIfgpLLgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkruCljeCkreCkvuCkteCljeCkryDgpLDgpYLgpKrgpK7gpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCksCDgpKjgpL/gpJzgpYAg4KS44KWC4KSa4KSo4KS+4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgSDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLjgpIHgpJcg4KSV4KWHIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIOCkreCkqOCljeCkqOClhyDgpKzgpL7gpLDgpYfgpJXgpYsg4KS44KS+4KSn4KS+4KSw4KSjIOCkuOClguCkmuCkqOCkviDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMDYzNDM4MTQwMjQxNTYwNDQzIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKvgpL7gpIfgpLLgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkruCljeCkreCkvuCkteCljeCkryDgpLDgpYLgpKrgpK7gpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCksCDgpKjgpL/gpJzgpYAg4KS44KWC4KSa4KSo4KS+4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgSDgpKvgpYvgpKjgpLjgpIHgpJcg4KSV4KWHIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIOCkreCkqOCljeCkqOClhyDgpKzgpL7gpLDgpYfgpJXgpYsg4KS44KS+4KSn4KS+4KSw4KSjIOCkuOClguCkmuCkqOCkviDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i4KSq4KSb4KS+4KSh4KS/IOCkrOCknOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWB4KSo4KWIIOCkruCkv+CkoeCkv+Ckr+CkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSy4KWH4KSs4KWN4KSv4KS+4KSVIOCkoeCkv+CkleCli+CkoSDgpJfgpLDgpY3gpKgg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSu4KS/4KSh4KS/4KSv4KS+IOCkoeCkv+CkleCli+CkoeCksCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9tYW5hZ2VDYUNlcnRpZmljYXRlcyAoMTY3ODM5MTg5Njc4Njg4MjAxNCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19tYW5hZ2VDYUNlcnRpZmljYXRlcyAoNDAxNTY0NDA0NzE5NjkzNzAxNCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiJkaWFnIOCkleCliyDgpLjgpY3gpLXgpL7gpK7gpL/gpKTgpY3gpLXgpK7gpL4g4KSw4KS54KWH4KSV4KWLIOCkuOCkguCkuOCkvuCkp+CkqOCkueCksOClguCkruCkviDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0v4KSy4KWH4KSW4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlhZ25vc3RpYyIgbXNnaWQ9IjY2MDgyOTU2OTIwMDI0NTIyODMiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIggZGlhZyDgpLjgpK7gpYLgpLngpKbgpY3gpLXgpL7gpLDgpL4g4KS44KWN4KS14KS+4KSu4KS/4KSk4KWN4KS1IOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkuOCljeCksOCli+CkpOCkueCksOClguCkruCkviDgpKrgpKLgpY3gpKgg4KSwIOCksuClh+CkluCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbOyDgpIngpKbgpL7gpLngpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/LCAvZGV2ICDgpK7gpL4g4KSr4KS+4KSH4KSy4KS54KSw4KWC4KWkIOCkr+CkuOCksuClhyDgpLjgpK7gpY3gpK3gpLXgpKTgpIMg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkuOCljeCkpeCkv+CksOCkpOCkviDgpLAg4KS44KWB4KSw4KSV4KWN4KS34KS+4KSu4KS+IOCkquCljeCksOCkreCkvuCktSDgpKrgpL7gpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KWkIOCkr+CliyDgpJXgpYfgpLXgpLIg4KSo4KS/4KSw4KWN4KSu4KS+4KSk4KS+IOCkteCkviDgpLjgpILgpJrgpL7gpLLgpJXgpKbgpY3gpLXgpL7gpLDgpL4g4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwLeCkqOCkv+CksOCljeCkpuCkv+Ckt+CljeCkn+CkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KSv4KWL4KSXIOCkueClgeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBtc2dpZD0iNjMzNTU3Njc3NTcxMTA5NTkzMSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpIXgpILgpLbgpLngpLDgpYIg4KS44KSV4KWN4KS34KSuIOCkteCkviDgpIXgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCkleCljeCkt+CkriDgpJsg4KS14KS+IOCkm+CliOCkqCDgpK3gpKjgpY3gpKjgpYcg4KSV4KWB4KSw4KS+4KSV4KWLIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkruCkueCkpOCljeCkpOCljeCkteCkquClguCksOCljeCkoyDgpKvgpYvgpKgg4KS44KSV4KWN4KS34KSu4KSk4KS+IOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KS44KSB4KSX4KWIIOCkueCli+CkuOCkv+Ckr+CkvuCksOClgCDgpIXgpKrgpKjgpL7gpIngpKjgpYEg4KSq4KSw4KWN4KSbLCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS14KS/4KS34KSvIOCkuOClguCkmuClgOCkruCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSo4KS54KWB4KSo4KWHLCDgpIXgpLjgpILgpJfgpKQsIOCkheCkuOCljeCkpeCkv+CksCDgpIXgpLXgpLjgpY3gpKXgpL4g4KSt4KSP4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpLngpYHgpKjgpYcg4KS44KSu4KWN4KSt4KS+4KS14KSo4KS+IOCkueClgeCkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTgyNzIzMjQ4NDQxNjUwNTYxNSI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSF4KSC4KS2IOCkuOCkleCljeCkt+CkriDgpJsg4KS14KS+IOCkm+CliOCkqCDgpK3gpKjgpY3gpKjgpYfgpK7gpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSu4KS54KSk4KWN4KSk4KWN4KS14KSq4KWC4KSw4KWN4KSjIOCkq+Cli+CkqCDgpLjgpJXgpY3gpLfgpK7gpKTgpL4g4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCli+Ckl+CkueCksOClguCksuClhyDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpLjgpIHgpJfgpYgg4KS54KWL4KS44KS/4KSv4KS+4KSw4KWAIOCkheCkquCkqOCkvuCkieCkqOClgSDgpKrgpLDgpY3gpJssIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLXgpL/gpLfgpK8g4KS44KWC4KSa4KWA4KSu4KS+IOCkquCljeCksOCkr+Cli+CklyDgpKjgpLngpYHgpKjgpYcsIOCkheCkuOCkguCkl+CkpCwg4KSF4KS44KWN4KSl4KS/4KSwIOCkheCkteCkuOCljeCkpeCkviDgpK3gpI/gpJXgpYsg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkueClgeCkqOClhyDgpLjgpK7gpY3gpK3gpL7gpLXgpKjgpL4g4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDYyNzMxNTM1MTA5MzUwODc5NSI+IuCkheCkqOClgeCkruCkpOCkv+CkueCksOClgiDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQwODg2NDI2NTQwODU4NTA2NjIiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSv4KWLIOCkteCkviDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpKjgpL/gpLDgpY3gpKbgpL/gpLfgpY3gpJ8g4KS44KWN4KS14KWA4KSV4KWD4KSk4KS/4KS54KSw4KWCIOCkquCljeCksOCkpuCkvuCkqCDgpJfgpLDgpY3gpKgg4KS14KS+IOCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkquCljeCksOCkpuCkvuCkqCDgpKjgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpL4g4KS44KWB4KS14KS/4KSn4KS+4KS54KSw4KWC4KSu4KS+IOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI4NDYzMTgxNjI4Njk1Mzk2MzkxIj4i4KS14KS/4KS24KWH4KS3IOCksOClguCkquCkruCkviDgpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI0OTczOTg2NzYyMjQxNzgzNzEyIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkruCkqOCkquCksOCljeCkqOClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpJrgpLLgpL/gpLDgpLngpYfgpJXgpL4g4KSk4KWAIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CkueCksOClguCksuCkvuCkiCDgpJrgpYHgpKrgpJrgpL7gpKog4KSw4KWC4KSq4KSu4KS+IOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWNLCDgpKTgpKrgpL7gpIjgpIHgpKzgpL7gpJ8g4KSo4KS/4KSc4KWAIOCkoeClh+Ckn+CkviDgpLjgpILgpJXgpLLgpKgg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpK3gpIfgpLDgpLngpYfgpJXgpYsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkquClgeCkqyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNldHRpbmdzIiBtc2dpZD0iMjIyNjE5NTI5MDk1NTIyNDczMCI+IuCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkuOClh+Ckn+Ckv+CkmSDgpKHgpYfgpJ/gpL7gpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpLjgpL7gpK/gpKYg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCljeCksOCko+CkvuCksuClgOCkleCliyDgpJXgpKjgpY3gpKvgpL/gpJfgpLDgpYfgpLjgpKjgpLLgpL7gpIgg4KSV4KWN4KS34KSk4KS/IOCkquClgeCksOCljeKAjeCkr+CkvuCkieCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjgxNTk1MzU2MTMwMjAxMzczOTEiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpJXgpYsg4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkuOClh+Ckn+Ckv+CkmSDgpKHgpYfgpJ/gpL4g4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiJHb29nbGUg4KS44KWH4KS14KS+IOCkqOCkleCljeCkuOCkviDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIEdvb2dsZSDgpLjgpYfgpLXgpL4g4KSo4KSV4KWN4KS44KS+4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlQm9vdENvbXBsZXRlZCIgbXNnaWQ9IjUzMTI5NjU1NjU5ODc4MDAwMjUiPiLgpLjgpY3gpJ/gpL7gpLDgpY3gpJ/gpIXgpKrgpK7gpL4g4KSa4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczOTAzMDQ2NjQxMTY4ODA3MDQiPiLgpIbgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkrOClgeCknyDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSq4KWC4KSw4KWN4KSjIOCkueClgeCkqOClhyDgpKzgpL/gpKTgpL/gpJXgpYgg4KSG4KSr4KWI4KSy4KS+4KSIIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpK7gpL4g4KSi4KS/4KSy4KS+IOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJsg4KSwIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpK7gpJfgpY3gpLDgpK7gpL4g4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkuOCkp+CliOCkgSDgpJrgpL7gpLLgpYEg4KSX4KSw4KWH4KSwIOCkouCkv+CksuCkviDgpKzgpKjgpL7gpIngpIHgpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUxMzk1MDU4OTEwMjYxNzUwNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSs4KWB4KSfIOCkl+CksOClgCDgpLjgpJXgpYfgpKrgpJvgpL8g4KSc4KSk4KS/IOCkuOCkleCljeCkpuCliyDgpJrgpL7gpIHgpKHgpYsg4KSG4KSr4KWI4KSC4KSu4KS+IOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSr4KWL4KSoIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpK7gpL4g4KSi4KS/4KSy4KS+IOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJsg4KSwIOCkheCkqOCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpK7gpJfgpY3gpLDgpK7gpL4g4KSr4KWL4KSoIOCkuOCkp+CliOCkgSDgpJrgpL7gpLLgpYEg4KSX4KSw4KWH4KSwIOCkouCkv+CksuCkviDgpKzgpKjgpL7gpIngpIHgpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiLgpLjgpY3gpJ/gpL/gpJXgpL8g4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkquCkoOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IuCklOCkquCkmuCkvuCksOCkv+CklSDgpKrgpY3gpLDgpLjgpL7gpLDgpKPgpLLgpL7gpIgg4KSq4KSg4KS+4KSJ4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpI/gpIngpJ/gpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCknOClgeCkqCDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KS44KSu4KS+4KSq4KWN4KSkIOCkreCkj+CkquCkm+CkvyDgpKzgpL7gpIHgpJXgpYAg4KSw4KS54KSo4KWN4KSb4KWkIOCkheCkpOCljeCkr+CkvuCkp+Ckv+CklSDgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSn4KWH4KSw4KWIIOCkruClh+CkruCli+CksOClgCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSV4KWLIOCkleCkvuCksOCko+CksuClhyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSi4KS/4KSy4KWLIOCksCDgpIXgpLjgpY3gpKXgpL/gpLAg4KSs4KSo4KS+4KSJ4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4MjU4MDM3NjQyMzI0NDUwOTEiPiLgpJTgpKrgpJrgpL7gpLDgpL/gpJUg4KSq4KWN4KSw4KS44KS+4KSw4KSj4KSy4KS+4KSIIOCkquCkoOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSP4KSVIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJzgpYHgpKgg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkruCkvuCkquCljeCkpCDgpK3gpI/gpKrgpJvgpL8g4KSs4KS+4KSB4KSV4KWAIOCksOCkueCkqOCljeCkm+ClpCDgpIXgpKTgpY3gpK/gpL7gpKfgpL/gpJUg4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkp+Clh+CksOCliCDgpK7gpYfgpK7gpYvgpLDgpYAg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CkleCliyDgpJXgpL7gpLDgpKPgpLLgpYcg4KSr4KWL4KSo4KSy4KS+4KSIIOCkouCkv+CksuCliyDgpLAg4KSF4KS44KWN4KSl4KS/4KSwIOCkrOCkqOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDb250YWN0cyIgbXNnaWQ9IjgzNDg0ODExMzE4OTk4ODYxMzEiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTI5NDg2Njg1Njk0MTE0OTYzOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKjgpL/gpLDgpY3gpKbgpL/gpLfgpY3gpJ8g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSk4KS44KSB4KSXIOCkheCkqOCljeCkryDgpKTgpLDgpL/gpJXgpL7gpLngpLDgpYLgpKzgpL7gpJ8g4KSV4KSyIOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpL4sIOCkh+CkruClh+CksiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KS+IOCkteCkviDgpIXgpKjgpY3gpKTgpLDgpY3gpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KS+IOCkhuCkteClg+CkpOCkv+CkuOCkueCkv+CkpOCkleCliyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpJfgpLDgpL/gpI/gpJXgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWC4KSV4KWLIOCkoeClh+Ckn+CkviDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkrOCkmuCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSwIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKzgpL/gpKjgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KS14KS/4KS24KWH4KS3IOCkteCljeCkr+CkleCljeCkpOCkv+CkueCksOClguCkuOCkgeCklyDgpIXgpLDgpY3gpJXgpYsg4KSk4KSw4KS/4KSV4KS+4KSs4KS+4KSfIOCkleCksiDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpL4sIOCkh+CkruClh+CksiDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpL4g4KS14KS+IOCkuOCkguCkmuCkvuCksCDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpL4g4KSG4KS14KWD4KSk4KS/4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKjgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkreCkj+CkleCkviDgpKHgpYfgpJ/gpL7gpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCkquCkouCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCkruCljeCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KSs4KSa4KSkIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJzgpY3gpJ7gpL7gpKgg4KSs4KS/4KSo4KS+IOCkqOCliCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkuOCkvuCkr+CkpiDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNvbnRhY3RzIiBtc2dpZD0iNTEwNzQ5MjA4NjQxNjc5MzU0NCI+IuCkpOCkquCkvuCkiOCkgeCkleCkviDgpLjgpK7gpY3gpKrgpLDgpY3gpJXgpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzI0MzkzMjUyMTk1MzYwMiI+IuCkheCkqOCljeCkryDgpKTgpLDgpL/gpJXgpL7gpJXgpL4g4KSG4KS14KWD4KSk4KS/4KS54KSw4KWC4KS44KSB4KSXIOCknOClgeCkqCDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSV4KSyLCDgpIfgpK7gpYfgpLIsIOCkteCkviDgpLXgpL/gpLbgpYfgpLcg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCkvuCkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkleCliyDgpKHgpYfgpJ/gpL7gpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkruClh+Ckn+CkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1ODk4NjkyMjQ2MjUxNjM1NTgiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSs4KS+4KSw4KSu4KWN4KSs4KS+4KSwIOCkleCksiDgpJfgpLDgpYfgpJXgpL4sIOCkh+CkruClh+CksiDgpJfgpLDgpYfgpJXgpL4sIOCkteCkviDgpLXgpL/gpLbgpYfgpLcg4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWC4KS44KSB4KSXIOCkuOCknuCljeCkmuCkvuCksCDgpJfgpLDgpYfgpJXgpL4g4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKjgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkl+CksOClh+CkleCkviDgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpL7gpIngpKgg4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsbExvZyIgbXNnaWQ9IjM0NzgxMzMxODQ2MjQxMDI3MzkiPiLgpJXgpLIg4KSy4KSXIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNzAwNjQ1MTg0ODcwNzYwMjg1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpJXgpYsg4KSV4KSyIOCksuCklywg4KSG4KSX4KSu4KSoIOCksCDgpKzgpLngpL/gpLDgpY3gpJfgpK7gpKgg4KSV4KSy4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpKHgpYfgpJ/gpL4g4KS44KS54KS/4KSk4KSV4KWLIOCkleCksiDgpLLgpJcg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCksiDgpLLgpJcg4KSh4KWH4KSf4KS+4KS54KSw4KWC4KSV4KWLIOCkrOCkmuCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSwIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKzgpL/gpKjgpL4g4KSo4KWIIOCkr+CliyDgpJXgpLIg4KSy4KSXIOCkoeClh+Ckn+CkvuCksuCkvuCkiCDgpIXgpLDgpYLgpLjgpIHgpJcg4KS44KS+4KSd4KWH4KSm4KS+4KSwIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3Nzc3MjU3OTY4MTMyMTcyNDQiPiLgpK3gpL/gpKTgpY3gpLAg4KSG4KSJ4KSo4KWHIOCksCDgpKzgpL7gpLngpL/gpLAg4KSc4KS+4KSo4KWHIOCkleCksuCkueCksOClguCkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KSo4KSV4KWLIOCkleCksiDgpLLgpJcg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkICDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KSV4KSyIOCksuCklyDgpKHgpYfgpJ/gpL4g4KSs4KSa4KSkIOCkl+CksOCljeCkqCDgpKbgpL/gpKjgpY3gpJsg4KSwIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpeCkvuCkueCliCDgpKjgpKrgpL7gpIgg4KSV4KSyIOCksuCklyDgpKHgpYfgpJ/gpL7gpLLgpL7gpIgg4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsbExvZyIgbXNnaWQ9Ijg1NTIwNDU2NjQ3NDM0OTkzNTQiPiLgpJXgpLIg4KSy4KSXIOCksuClh+CkluCljeKAjeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY2MTgwNjA2MjI3NDExOTI0NSI+IuCkhuCkl+CkruCkqCDgpKTgpKXgpL4g4KSs4KS54KSw4KWN4KSX4KSu4KSoIOCkoeClh+Ckn+CkvuCkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSV4KWLIOCkleCksiDgpLLgpJfgpJXgpYsg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CkuOCksuCkvuCkiCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSV4KSyIOCksuCklyDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkteCkviDgpK7gpYfgpJ/gpL7gpIngpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODM5NDE3MzYzNTI3ODc4NDIiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkq+Cli+CkqOCkleCliyDgpIbgpIngpKjgpYcg4KSwIOCkrOCkvuCkueCkv+CksCDgpJzgpL7gpKjgpYcg4KSV4KSy4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkleCliyDgpKHgpYfgpJ/gpL4g4KS44KS54KS/4KSkIOCkleCksiDgpLLgpJcg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KS44KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpJXgpLIg4KSy4KSXIOCkruClh+Ckn+CkvuCkieCkqCDgpLXgpL4g4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFByb2ZpbGUiIG1zZ2lkPSI0NzAxODg5ODUyNjEyNzE2Njc4Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkhuCkq+CljeCkqOCliCDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSV4KS+4KSw4KWN4KShIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpJfgpLDgpL/gpI/gpJXgpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCknOCkuOCljeCkpOCliCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSo4KS+4KSuIOCksCDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWA4KWkIOCkr+CkuOCkleCliyDgpK7gpKTgpLLgpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkpOCkquCkvuCkiOCkguCksuCkvuCkiCDgpKrgpLngpL/gpJrgpL7gpKgg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkmyDgpLAg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSF4KSw4KWC4KSy4KS+4KSIIOCkquCkoOCkvuCkieCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlUHJvZmlsZSIgbXNnaWQ9IjkwNzc5MzYyODc3NzM5NzY0MyI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkleCkvuCksOCljeCkoSDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTU1MjA4NDI5NDU5ODQ2NTg5OSI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSwIOCkreCkj+CkleCliyDgpLXgpY3gpK/gpL7gpJXgpY3gpKTgpL/gpJfgpKQg4KSq4KWN4KSw4KWL4KSr4KS+4KSH4KSyIOCknOCkvuCkqOCkleCkvuCksOClgCwg4KSc4KS44KWN4KSk4KWIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKjgpL7gpK4g4KS14KS+IOCkuOCkruCljeCkquCksOCljeCklSDgpJzgpL7gpKjgpJXgpL7gpLDgpYDgpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpLXgpL4g4KSl4KSq4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpJXgpYsg4KSu4KSk4KSy4KSsIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkmuCkv+CkqOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY0g4KSwIOCkuOCkvuCkr+CkpiDgpIXgpKjgpY3gpK/gpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KSg4KS+4KSJ4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkuOCljeCkn+CljeCksOCkv+CkriDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDI1NTcwNjAyNzE3MjA1MDg3MiI+IuCkpOCkquCkvuCkiOCkgSDgpLAg4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkuOCkvuCkpeClgOCkueCksOClguCkrOCkvuCknyDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSF4KSq4KSh4KWH4KSf4KSy4KS+4KSIIOCkquCkueClgeCkgeCkmiDgpLAg4KS44KS/4KSC4KSVIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKbgpL4g4KS44KS+4KS14KSn4KS+4KSoIOCksOCkueCkqOClgeCkueCli+CkuOCljSAgLS0g4KS44KSu4KS+4KSc4KS/4KSVIOCkqOClh+Ckn+CkteCksOCljeCkleCkueCksOClguCkruCkviDgpKTgpKrgpL7gpIjgpIEg4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpL7gpKXgpYDgpJXgpYsgIOCkrOCkv+CkmuCkruCkviDgpK3gpI/gpJXgpL4g4KS44KSC4KSa4KS+4KSw4KSy4KS+4KSIIOCkquCkouCljeCkqCDgpLXgpL/gpLbgpY3gpLXgpL7gpLjgpKjgpYDgpK/gpKTgpL4g4KSs4KWH4KSX4KSw4KWIIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKjgpYvgpJ86IOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSs4KSy4KSq4KWC4KSw4KWN4KS14KSVIOCkuOCkrOCliCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWC4KSu4KS+IOCkuOCkvuCkr+CkpiDgpKjgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM1MDQxNzkyMjI0OTMyMzU2NDUiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkquCljeCksOCkteCkvuCkueCkruCkviDgpLLgpYfgpJbgpY3igI3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwODY1NTc1NTIyMDQxMTQ4NDkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkuOCkvuCkpeClgOCkueCksOClguCkrOCkvuCknyDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSF4KSq4KSh4KWH4KSf4KS54KSw4KWCIOCkquCljeCksOCkpuCksOCljeCktuCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClhyDgpKzgpYfgpLLgpL7gpK7gpL4g4KS54KWL4KS24KS/4KSv4KS+4KSwIOCksOCkueCkqOClgeCkueCli+CkuOCljSAtLSDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKjgpL/gpLDgpY3gpK7gpL7gpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJsg4KSc4KWB4KSoIOCkuOCkvuCkpeClgOCkrOCkvuCknyDgpIbgpI/gpJXgpYsg4KSm4KWH4KSW4KS/4KSo4KWN4KSb4KWkIOCkn+Ckv+CkquCljeCkquCko+ClgDog4KSv4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpLjgpKzgpYgg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkuOCknuCljeCknOCkvuCksuCkueCksOClguCkruCkviDgpLLgpL7gpJfgpYIg4KSo4KS54KWB4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGVuZGFyIiBtc2dpZD0iNTk3MjcyNzU2MDI1NzYxMjM5OCI+IuCkl+Cli+CkquCljeCkryDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSwIOCkquCkvuCkpOCljeCksOCliyDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MjE2NDYyMDQ5MDU3NjU4NzIzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkl+CksOCkv+Ckj+CkleCkviDgpKTgpYAg4KS44KS+4KSl4KWA4KS54KSw4KWCIOCkteCkviDgpLjgpLngpK/gpYvgpJfgpYDgpLngpLDgpYIg4KS44KS54KS/4KSk4KSV4KWLIOCkquCkvuCkpOCljeCksOCkvuCkleCkviDgpJXgpL7gpLDgpY3gpK/gpJXgpY3gpLDgpK7gpLngpLDgpYIg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpLXgpL4g4KS44KSC4KS14KWH4KSm4KSo4KS24KWA4KSy4KSk4KS+IOCkrOCkv+CkqOCkviDgpKrgpKjgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpKrgpL7gpKTgpY3gpLDgpL7gpJXgpL4g4KSh4KWH4KSf4KS+IOCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKgg4KS14KS+IOCkrOCkmuCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc0MzQ1NDg2ODI0NzA4NTE1ODMiPiLgpKTgpYAg4KS44KS+4KSl4KWA4KS54KSw4KWCIOCkteCkviDgpLjgpLngpJXgpLDgpY3gpK7gpYDgpLngpLDgpYLgpLjgpLngpL/gpKQg4KS44KSs4KWIIOCkquCkvuCkpOCljeCksOCliyDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+4KSy4KS+4KSIIOCkquCkouCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCkvuCkpOCljeCksOCliyDgpKHgpYfgpJ/gpL4g4KSv4KS44KSy4KWHIOCkuOCkvuCkr+CkpiDgpLjgpYfgpK/gpLAg4KSX4KSw4KWN4KSoIOCkteCkviDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLXgpL/gpLbgpY3gpLXgpL7gpLjgpKjgpL/gpK/gpKTgpL4g4KS14KS+IOCkuOCkruCljeCkteClh+CkpuCkqOCktuClgOCksuCkpOCkviDgpKzgpL/gpKjgpL4g4KSo4KWIIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+IuCkquCkvuCkpOCljeCksOCliyDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpK7gpL7gpLLgpL/gpJXgpJXgpYsg4KSc4KWN4KSe4KS+4KSoIOCkrOCkv+CkqOCkviDgpKjgpYgg4KSq4KS+4KS54KWB4KSo4KS+4KS54KSw4KWC4KSy4KS+4KSIIOCkh+CkruClh+CksiDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njc5MDM1NTIwMTEzNjY4NTI4Ij4i4KSk4KWAIOCkuOCkvuCkpeClgOCkueCksOClgiDgpLXgpL4g4KS44KS54KSV4KSw4KWN4KSu4KWA4KS54KSw4KWC4KS44KS54KS/4KSk4KSV4KS+IOCkmOCkn+CkqOCkvuCkueCksOClgiDgpJzgpLjgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkhuCkq+CljeCkqOCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpK7gpL4g4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSc4KWB4KSoIOCkquCkvuCkpOCljeCksOCkvuCkleCliyDgpK7gpL7gpLLgpL/gpJXgpLngpLDgpYLgpKzgpL7gpJ8g4KSG4KSP4KSV4KS+IOCkpuClh+CkluCkv+CkqOClh+CksuCkvuCkiCDgpKrgpKDgpL7gpIngpKjgpYcg4KS14KS+IOCkruCkvuCksuCkv+CkleCkueCksOClguCkleCliyDgpJzgpY3gpJ7gpL7gpKgg4KSs4KWH4KSX4KSwIOCkmOCkn+CkqOCkvuCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWHIOCkheCkqOClgeCkruCkv+CkpCDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+IuCkpOClgCDgpLjgpL7gpKXgpYDgpLngpLDgpYIg4KS14KS+IOCkuOCkueCkleCksOCljeCkruClgOCkueCksOClguCkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSo4KSV4KS+IOCkmOCkn+CkqOCkvuCkueCksOClgiDgpJzgpLjgpLLgpL7gpIgg4KSl4KSq4KWN4KSoLCDgpLngpJ/gpL7gpIngpKgg4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKggIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkquCkvuCkpOCljeCksOCliyDgpK7gpL7gpLLgpL/gpJXgpKzgpL7gpJ8g4KSm4KWH4KSW4KS+IOCkquCksOClh+CkleCkviDgpLXgpL4g4KSu4KS+4KSy4KS/4KSV4KSV4KWLIOCknOCljeCknuCkvuCkqCDgpKzgpL/gpKjgpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkreCkj+CkleCkviDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KS44KSo4KWN4KSm4KWH4KS2IOCkquCkoOCkvuCkieCkqCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI4Njg4MzM0OTc0MDM2ODIzMzMwIj4i4KSq4KSw4KWA4KSV4KWN4KS34KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCkruCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI1ODA4NzExMDM5NDgyMDUxODI0Ij4i4KSq4KSw4KWA4KSV4KWN4KS34KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpJUg4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCkueCksOClgiDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpKjgpK/gpL7gpIEg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkr+CklSDgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KWN4KSl4KS+4KSo4KSu4KS+IOCkk+CkreCksOCksOCkvuCkh+CkoSDgpJfgpLDgpY3gpKbgpJsg4KSwL+CkteCkviDgpLjgpY3gpKXgpL/gpKTgpL8g4KSF4KSo4KWN4KSvIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpLngpLDgpYIg4KSc4KS44KWN4KSk4KWIIEdQUyDgpLXgpL4g4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkr+CkleCkrOCkvuCknyDgpKvgpLDgpY3gpJXgpL7gpIfgpI/gpJXgpL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLgpIXgpKfgpL/gpJUg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkr+CklSDgpIbgpKbgpYfgpLbgpLngpLDgpYIg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLgpKXgpKog4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkr+CklSDgpJXgpK7gpL7gpKPgpY3gpKHgpLngpLDgpYIg4KS44KSu4KWN4KSuIOCkquCkueClgeCkgeCkmiDgpKrgpYHgpLDgpY3igI3gpK/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpL7gpK/gpKYg4KSc4KWA4KSq4KWA4KSP4KS44KSV4KWLIOCkteCkviDgpIXgpKjgpY3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkueCksOClguCkleCliyDgpJXgpL7gpLDgpY3gpK8g4KS44KSB4KSXIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjY1NzgxMDExOTk4MjUxOTM4NzMiPiLgpI/gpIngpJ/gpL4g4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkpOCkviDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IuCkquCksOClgOCkleCljeCkt+Cko+CkleCliyDgpLLgpL7gpJfgpL8g4KSu4KSVIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpLngpLDgpYIg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSo4KSv4KS+4KSBIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJUg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkqOCkruCkviDgpJPgpK3gpLDgpLDgpL7gpIfgpKEg4KSX4KSw4KWN4KSm4KSbIOCksC/gpLXgpL4g4KS44KWN4KSl4KS/4KSk4KS/IOCkheCkqOCljeCkryDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCknOCkuOCljeCkpOCliCBHUFMg4KS14KS+IOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJXgpKzgpL7gpJ8g4KSr4KSw4KWN4KSV4KS+4KSH4KSP4KSV4KS+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSIxMTkxODk4MDYxOTY1MjczMzcyIj4i4KS44KSf4KS/4KSVIOCkuOCljeCkpeCkvuCkqCAoR1BTIOCksCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSG4KSn4KS+4KSw4KS/4KSkKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjUyOTUwNDc1NjM1NjQ5ODEyNTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KS14KS/4KS24KWN4KS14KS14KWN4KSv4KS+4KSq4KWAIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKPgpL7gpLLgpYAgKEdQUykg4KS14KS+IOCkuOClh+CksiDgpJ/gpL7gpLXgpLDgpLngpLDgpYIg4KSwIOCkteCkvuCkhy3gpKvgpL7gpIcg4KSc4KS44KWN4KSk4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCkueClgCDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+ClgCDgpLjgpY3gpKXgpL7gpKgg4KS44KWH4KS14KS+4KS54KSw4KWCIOCkluCli+CksuCljeCkqOClgSDgpKrgpLDgpY3gpJsg4KSwIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCkviDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkieCkquCksuCkrOCljeCkpyDgpLngpYHgpKjgpYEg4KSq4KSw4KWN4KSb4KWkIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKTgpKrgpL7gpIjgpIEg4KSV4KS54KS+4KSBIOCkueClgeCkqOClgSDgpLngpYHgpKjgpY3gpJsg4KSt4KSo4KWN4KSo4KWHIOCkqOCkv+CksOCljeCkp+CkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KSv4KS44KSy4KS+4KSIIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSbIOCksCDgpK/gpLjgpLLgpYcg4KSF4KSk4KS/4KSw4KS/4KSV4KWN4KSkIOCkrOCljeCkr+CkvuCkn+CljeCksOCkvyDgpIngpLDgpY3gpJzgpL4g4KSW4KSk4KSqIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iNDg4Nzg5NTM2MjM1NDIzOTYyOCI+IuCkheCkqOClgeCkruCkvuCkqOCkv+CkpCDgpLjgpY3gpKXgpL7gpKggKOCkqOClh+Ckn+CkteCksOCljeCklS3gpIbgpKfgpL7gpLDgpL/gpKQpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSIyNTM4MjAwMTg0MzczMzAyMjk1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpYHgpK7gpL7gpKjgpL/gpKQg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpYsg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CksiDgpJ/gpL7gpLXgpLAg4KSwIOCkteCkvuCkhy3gpKvgpL7gpIfgpJzgpLjgpY3gpKTgpL4g4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpLngpLDgpYLgpJXgpYsg4KSq4KWN4KSw4KWL4KSXIOCkl+CksOClgCDgpLjgpY3gpKXgpL7gpKgg4KS44KWH4KS14KS+4KS54KSw4KWC4KSs4KS+4KSfIOCkieCkpOCljeCkquCkqOCljeCkqCDgpJfgpLDgpL/gpI/gpJXgpYsg4KS54KWL4KWkIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpK/gpYAg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkueCksOClguCkleCliyDgpIngpKrgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpYAg4KS44KWH4KS14KS+4KS54KSw4KWCIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSa4KS+4KSy4KWBIOCksCDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWB4KSo4KWBIOCkhuCkteCktuCljeCkr+CklSDgpJvgpaQg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkqOClgeCkruCkvuCkqOCkv+CkpCDgpLDgpYLgpKrgpK7gpL4g4KSk4KSq4KS+4KSI4KSBIOCkleCkueCkvuCkgSDgpLngpYHgpKjgpYHgpLngpYHgpKjgpY3gpJsg4KSt4KSo4KWN4KSo4KWHIOCkqOCkv+CksOCljeCkp+CkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KSv4KS44KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjIzNjM5Njk2NDE3OTIzODg5NDciPiJTdXJmYWNlRmxpbmdlciDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iU3VyZmFjZUZsaW5nZXIg4KSV4KSuLeCkuOCljeCkpOCksCDgpLjgpYHgpLXgpL/gpKfgpL7gpLngpLDgpYIg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuCkq+CljeCksOClh+CkriDgpKzgpKvgpLAg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKvgpY3gpLDgpYfgpK4g4KSs4KSr4KSw4KSV4KWLIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IklucHV0RmxpbmdlciDgpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJJbnB1dEZsaW5nZXIg4KSV4KWLIOCkleCkri3gpLjgpY3gpKTgpLAg4KS44KWB4KS14KS/4KSn4KS+4KS54KSw4KWCIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKjgpLngpLDgpYLgpLLgpL7gpIgg4KS14KS/4KSo4KWN4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJXgpKjgpY3gpKvgpL/gpJfgpLAg4KSX4KSw4KWN4KSoIOCksCDgpLXgpL7gpIfgpKvgpL7gpIcg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSo4KS54KSw4KWC4KS44KSB4KSXIOCknOCli+CkoeCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSo4KS54KSw4KWCIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4i4KS14KS+4KSH4KSr4KS+4KSHIOCkquCljeCksOCkpuCksOCljeCktuCkqOClgOCkleCkviDgpKTgpLLgpY3gpLLgpYsg4KSk4KS5IOCkteCkv+Ckt+Clh+CktuCkpOCkvuCkueCksOClgiDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2ODU3MTM0NDk4NDAyMzQ2NzA4Ij4i4KSF4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYjgpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjIxMDU5Nzc1NDIxMjIwODg1MyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliOCkpiDgpJfgpLDgpY3gpKgg4KSwIOCksOCkv+CkoeCkvuCkh+CksOClh+CkleCljeCknyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjI0NjgyODc3MzU4OTA5NDAyMyI+IuCkreCkv+CkoeCkv+Ckr+CliyDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWI4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjM1OTQ4MTY1ODAzNDE0OTg2MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK3gpL/gpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliOCkpiDgpJfgpLDgpY3gpKgg4KSwIOCksOCkv+CkoeCkvuCkh+CksOClh+CkleCljeCknyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iNzgxNTM5ODk2OTMwMzM4MjAxNiI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpK3gpL/gpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliOCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyNzc5NzkzMDY0NzA5MzUwMjg5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpK3gpL/gpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliOCkpiDgpJfgpLDgpY3gpKgg4KSwIOCksOCkv+CkoeCkvuCkh+CksOClh+CkleCljeCknyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjYwOTU4NTk5MzcwNjkxNDYwODYiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KSF4KSh4KS/4KSv4KWLIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSX4KWN4KSy4KWL4KSs4KSyIOCkheCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpJngpY3gpLngpLDgpYIg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJzgpLjgpY3gpKTgpYgg4KSG4KS14KS+4KSc4KSV4KWLIOCkruCkvuCkpOCljeCksOCkviDgpLAg4KSG4KSJ4KSf4KSq4KWB4KSf4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpYHgpKgg4KS44KWN4KSq4KS/4KSV4KSwIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKjgpYfgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+IuCkheCkoeCkv+Ckr+CliyDgpLDgpYfgpJXgpLDgpY3gpKEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkruCkvuCkh+CkleCljeCksOCli+Ckq+Cli+CkqOCkleCliyDgpLjgpL7gpKUg4KSF4KSh4KS/4KSv4KWLIOCksOClh+CkleCksOCljeCkoSDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpKrgpYHgpLfgpY3gpJ/gpL/gpJXgpLDgpKMg4KSs4KS/4KSo4KS+IOCkleClgeCkqOCliCDgpKrgpKjgpL8g4KS44KSu4KSv4KSu4KS+IOCkheCkoeCkv+Ckr+CliyDgpLDgpYfgpJXgpLDgpY3gpKEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLgpKTgpLjgpY3gpKzgpL/gpLDgpLngpLDgpYIg4KSwIOCkreCkv+CkoeCkv+Ckr+Cli+CkueCksOClgiDgpLLgpL/gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCljeCkr+CkvuCkruClh+CksOCkvuCkuOCkgeCklyDgpKTgpLjgpY3gpKzgpL/gpLAg4KSwIOCkreCkv+CkoeCkv+Ckr+Cli+CkueCksOClgiDgpLLgpL/gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSq4KWB4KS34KWN4KSf4KS/4KSV4KSw4KSjIOCkrOCkv+CkqOCkviDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkuOCkruCkr+CkruCkviDgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpY3gpLXgpYDgpJXgpYPgpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+IOCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpLngpYHgpIHgpKbgpL4g4KS44KWC4KSa4KSVIExFRCDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjQ3NjQ1ODU0NjU0ODAyOTUzNDEiPiLgpKrgpYLgpLDgpY3gpLUt4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkquCljeCksOCko+CkvuCksuClgCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpLjgpYLgpJrgpJUgTEVEIOCkheCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI5NjEyOTIyMDU3NjQ0ODgzMDQiPiLgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpIXgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgzMzc4MTcwOTMzMjYzNzA1MzciPiLgpKvgpYvgpKjgpLLgpL7gpIgg4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSo4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMzQ4MTg4MDgwMDE2OTk1MzAiPiLgpKrgpYHgpLDgpYgg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpYsg4KSo4KS/4KSV4KWIIOCkluCkpOCksOCkqOCkvuCklSDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3ODg5MDMyOTc2MjcyODMwOTkiPiLgpLjgpK7gpY3gpKrgpYLgpLDgpY3gpKMg4KSr4KWL4KSo4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpYsg4KSn4KWH4KSw4KWIIOCkluCkpOCksOCkqOCkvuCklSDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQzNjYzNDk3MjU2MTc5NTAwMiI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSoIOCknOCli+CkoSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4OTg1NjA4NzI0NjI2MzgyNDIiPiLgpKvgpYvgpKgg4KSq4KWB4KSo4KSD4KSs4KWB4KSfIOCkl+CksOCljeCkqOClgSDgpJzgpYvgpKEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MTcyMDU2MTgwMDYzNzAwNzQxIj4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkrOCksuCkquClguCksOCljeCkteCklSDgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiLgpKvgpYvgpKjgpLLgpL7gpIgg4KSs4KSy4KSq4KWB4KSw4KWN4KS14KSVIOCkquClgeCkqOCkg+CkrOClgeCknyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkq+CkvuCkh+CksiDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSr4KS+4KSH4KSyIOCkquCljeCksOCko+CkvuCksuClgCDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgbXNnaWQ9IjE4MjkyOTA3MDE2NTg5OTIzNDciPiLgpLngpJ/gpL7gpIngpKgg4KSu4KS/4KSy4KWN4KSo4KWHIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSr4KS+4KSH4KSyIOCkquCljeCksOCko+CkvuCksuClgOCkueCksOClgiDgpK7gpL7gpIngpKjgpY3gpJ8g4KSwIOCkheCkqOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+IlNEIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIG1zZ2lkPSI4Nzg0MjY4MjQ2Nzc5MTk4NjI3Ij4i4KS54KSf4KS+4KSJ4KSoIOCkruCkv+CksuCljeCkqOClhyDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSr4KSw4KWN4KSu4KWN4KSv4KS+4KSfIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzQxMTMzODYzMjAwMjE5Mzg0NiI+IuCkhuCkqOCljeCkpOCksOCkv+CklSDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KS44KWC4KSa4KSo4KS+IOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2FjY2VzcyIgbXNnaWQ9IjMwOTQ1NjM4NDQ1OTM4Nzg1NDgiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSu4KS+IOCkuOClguCkmuCkqOCkviDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2NyZWF0ZSIgbXNnaWQ9IjY0MTQ3NTcyMzQ3ODkzMzYzMjciPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2NyZWF0ZSIgbXNnaWQ9IjQ1NTg4NjkyNzM1ODU4NTY4NzYiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI1MjY5MjgzMjgzMDE2MTgwMjIiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkp+CljeCkteCkuOCljeCkpCDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI3MjE4NzQ5Mjg2MTQ1NTI2NTM3Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSn4KWN4KS14KS44KWN4KSkIOCkquCkvuCksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSI4ODc3OTk4MTAxOTQ0OTk5Mzg2Ij4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCko+CksuCkvuCkiCDgpK7gpL7gpIngpKjgpY3gpJ8v4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9IjM0NTEzNjAxMTQ5MDI0OTA5MjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCkoyDgpK7gpL7gpIngpKjgpY3gpJ8v4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX3JlbmFtZSIgbXNnaWQ9Ijc0OTY2MzM5NTQwODA0NzI0MTciPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSV4KWLIOCkquClgeCkqDrgpKjgpL7gpK7gpL7gpJXgpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19yZW5hbWUiIG1zZ2lkPSIxNzk0NzU3NTg4NDcyMTI3Njc1Ij4i4KSG4KSo4KWN4KSk4KSw4KWA4KSVIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpKrgpYHgpKjgpKjgpL7gpK7gpL7gpJXgpLDgpKMg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgpJXgpK7gpY3gpKrgpKgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkreCkvuCkh+CkrOCljeCksOClh+Ckn+CksCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4KSr4KWN4KSy4KWN4KSv4KS+4KS44KSy4KS+4KSI4KSfIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuCkq+CljeCksuCljeCkr+CkvuCkuCDgpKrgpY3gpLDgpJXgpL7gpLbgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNiIiBtc2dpZD0iMTExMzQ1MzQzMDY0NTQwMjcyMyI+IlVTQiDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkquCljeCksOCkvuCkpeCkruCkv+CkleCkpOCkvuCkueCksOClgiDgpLAg4KSF4KSo4KWB4KSu4KSk4KS/4KS54KSw4KWCIOCkquCljeCksOCkrOCkqOCljeCkpyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2IiIG1zZ2lkPSI3Nzc2MTU1NDMwMjE4MjM5ODMzIj4iVVNCIOCkieCkquCkleCksOCko+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KS+4KSl4KSu4KS/4KSV4KSk4KS+4KS54KSw4KWCIOCksCDgpIXgpKjgpYHgpK7gpKTgpL/gpLngpLDgpYLgpLLgpL7gpIgg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc010cCIgbXNnaWQ9IjQ5NTM0Njg2NzY3OTU5MTcwNDIiPiJNVFAg4KSq4KWN4KSw4KWL4KSf4KWL4KSV4KSyIOCkleCkvuCksOCljeCkr+CkvuCkqOCljeCkteCkr+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4iTVRQIFVTQiDgpKrgpY3gpLDgpYvgpJ/gpYvgpJXgpLIg4KSV4KS+4KSw4KWN4KSv4KS+4KSo4KWN4KS14KSv4KSoIOCkl+CksOCljeCkqCDgpJXgpYfgpLDgpY3gpKjgpLIgTVRQIOCkoeCljeCksOCkvuCkh+CkreCksOCkleCliyDgpKrgpLngpYHgpIHgpJrgpJXgpYsg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjQxNDgyOTA4NjA0MDA2NTkxNDYiPiLgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLAg4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI2NTk3OTY0MTkxMjA4MDE2NjA1Ij4i4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwIOCkquCksOClgOCkleCljeCkt+Cko+CkleCliyDgpIngpKbgpY3gpKbgpYfgpLbgpY3gpK/gpJXgpL4g4KSy4KS+4KSX4KS/IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKrgpLDgpL/gpKfgpYDgpK/gpLngpLDgpYLgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYLgpK7gpL4g4KS44KS/4KSn4KWIIOCkleCksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpKzgpYfgpJfgpLDgpYgg4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksCDgpJXgpLIg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpKrgpYfgpJXgpY3gpLfgpL/gpKQg4KS24KWB4KSy4KWN4KSVIOCkteCkviDgpJXgpLLgpLngpLDgpYIg4KSX4KSw4KS+4KSJ4KSoIOCkuOCkleCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYIg4KSV4KSyIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSB4KSm4KWI4KSoIOCkteCkv+CkmuCkvuCksCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkrOCkv+CkqOCkviDgpJXgpLLgpLngpLDgpYIg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpKzgpKLgpYAg4KSq4KWI4KS44KS+IOCkpOCkv+CksOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksOCkueCksOClgiDgpLjgpL/gpKfgpYgg4KSV4KSyIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iMTY4OTAyNDkwMTUwOTk5NjgxMCI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksOCkruCkviwg4KSG4KSV4KS44KWN4KSu4KS/4KSVIOCkqOCkruCljeCkrOCksCDgpLjgpLngpL/gpKQsIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLngpLjgpY3gpKTgpJXgpY3gpLfgpYfgpKog4KSs4KS/4KSo4KS+IOCkleCksiDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSF4KSo4KS+4KS14KS24KWN4KSv4KSVIOCksCDgpJfgpYjgpLAg4KSV4KS+4KSo4KWB4KSo4KWAIOCkleCksuCkueCksOClguCksuCkvuCkiCDgpIbgpJXgpLjgpY3gpK7gpL/gpJXgpK7gpL4g4KS44KWN4KSl4KS+4KSo4KS+4KSo4KWN4KSk4KSw4KSjIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4iQ0RNQSDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KS44KWH4KSf4KSF4KSrIOCkuOCkv+Ckp+CliCDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiJDRE1BIOCkq+Cli+CkqCDgpLjgpYfgpJ/gpIXgpKog4KS44KS/4KSn4KWIIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgbXNnaWQ9IjE5OTQxOTM1Mzg4MDIzMTQxODYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIggQ0RNQSDgpKrgpY3gpLDgpL7gpLXgpKfgpL7gpKgg4KS44KWB4KSwdSDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkqOCkvuCkteCktuCljeCkr+CklSDgpLDgpYLgpKrgpK7gpL4gQ0RNQSDgpKrgpY3gpLDgpL7gpLXgpKfgpL7gpKgg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9Ijc3ODU0MDgyNTMzNjQzMzU3NDAiPiLgpLjgpY3gpKXgpL7gpKgg4KSF4KSq4KSh4KWH4KSfIOCkuOClguCkmuCkqOCkvuCkueCksOClgiDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iMTEyMDc0MTU1Nzg5MTQzODg3NiI+IuCksOClh+CkoeCkv+Ckr+Cli+CkrOCkvuCknyDgpLjgpY3gpKXgpL7gpKgg4KSF4KSm4KWN4KSv4KS+4KS14KSn4KS/4KSVIOCkuOClguCkmuCkqOCkvuCkueCksOClguCksuCkvuCkiCDgpLjgpJXgpY3gpLfgpK4v4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSs4KS+4KSfIOCkquCljeCksOCkr+Cli+CklyDgpKjgpLngpYHgpKjgpYfgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpLXgpL/gpLbgpYfgpLfgpKTgpL7gpLngpLDgpYIg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNDAyNDUyNjk2ODYzMDE5NDEyOCI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpLjgpYfgpLXgpL7gpKbgpY3gpLXgpL7gpLDgpL4g4KS14KS/4KS24KWH4KS34KSk4KS+IOCkheCkquCksuCli+CkoSDgpK3gpI/gpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkquCkouCljeCkqC/gpLLgpYfgpJbgpY3igI3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEdhZGdldCIgbXNnaWQ9Ijc3NjkwNTMzOTAxNTg2MzQ3MSI+IuCkteCkv+CknOClh+Ckn+CkueCksOClguCkleCliyDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEdhZGdldCIgbXNnaWQ9IjgyNjEzMjY5Mzg1OTkwNDkyOTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSy4KS+4KSIIOCkleClgeCkqCDgpLXgpL/gpJzgpYfgpJ8g4KSV4KWB4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCkv+CkqOCljeCkmyDgpK3gpKjgpYfgpLAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KS44KS54KS/4KSk4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpKHgpYfgpJ/gpL7gpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkpuCkv+CkqCDgpLjgpJXgpY3gpKbgpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9Ijg0MjM5MjM3Nzc2NTkyOTIyMjgiPiLgpKvgpYvgpKjgpJXgpYsg4KS44KWN4KSl4KS/4KSk4KS/IOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IuCkieCkquCkleCksOCko+CkleCkviDgpKvgpYvgpKgg4KS14KS/4KS24KWH4KS34KSk4KS+4KS54KSw4KWC4KSy4KS+4KSIIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkICDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkj+CkieCkn+CkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCljeCkteCkv+CkmiDgpJfgpLDgpY3gpKgsIOCkq+Cli+CkqCDgpLDgpYfgpKHgpL/gpK/gpYsg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpLAg4KSW4KWL4KSy4KWN4KSoIOCksCDgpJzgpLjgpY3gpKTgpYgg4KSk4KSq4KS+4KSI4KSBIOCkuOCkp+CliCDgpLjgpYLgpJrgpL/gpKQg4KSo4KSX4KSw4KWAIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iOTE3ODIyODUyNDUwNzYxMDQ4NiI+IuCkq+Cli+CkqCDgpLjgpY3gpKXgpL/gpKTgpL8g4KSwIOCkquCkueCkv+CkmuCkvuCkqCDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjE2MzkyMTI3NzE4MjYxMjU1MjgiPiLgpIngpKrgpJXgpLDgpKPgpJXgpYsg4KSr4KWL4KSoIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClguCkleCliyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuCDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksCDgpLAg4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIElEcywg4KSV4KSyIOCkuOCkleCljeCkt+CkriDgpJsg4KSV4KS/IOCkm+CliOCkqCDgpLAg4KSV4KSy4KSm4KWN4KS14KS+4KSw4KS+IOCknOCli+CkoeCkv+Ckj+CkleCliyDgpJ/gpL7gpKLgpL7gpJXgpYsg4KSo4KSu4KWN4KSs4KSwIOCkqOCkv+CksOCljeCkp+CkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSo4KS/4KSo4KWN4KSm4KWN4KSw4KS+4KSu4KS+IOCknOCkvuCkqOCkrOCkvuCknyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTczNDgwMTg3OTQxNDk2MTMwIj4i4KSr4KWL4KSo4KSy4KS+4KSIIOCkqOCkv+CkpuCkvuCkieCkqOCkrOCkvuCknyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpKjgpL/gpLjgpY3gpJXgpY3gpLDgpL/gpK8g4KS54KWB4KSo4KSs4KS+4KSfIOCksOCli+CkleCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg1NTkxMDA2NzczNzI5Mjg3NTQiPiLgpKvgpYvgpKjgpLLgpL7gpIgg4KSo4KS/4KS44KWN4KSV4KWN4KSw4KS/4KSvIOCkueClgeCkqOCkrOCkvuCknyDgpLDgpYvgpJXgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc4NzAzNDcyMjYxNjM1MDQxNyI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpKrgpL7gpLXgpLAg4KSW4KWL4KSy4KWN4KSoIOCksCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5Mjg2MjI0NzA5ODA5NDMyMDYiPiLgpKvgpYvgpKgg4KSW4KWL4KSy4KWN4KSoIOCkteCkviDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkieCksOCljeCknOCkviDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSW4KWL4KSy4KWN4KSoIOCksCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2MDM3MDU3MzQ4NDYzMTMxMDMyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkq+Cli+CkqCDgpJbgpYvgpLLgpY3gpKgg4KSwIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmFjdG9yeVRlc3QiIG1zZ2lkPSIzNzE1MjI1NDkyNjk2NDE2MTg3Ij4i4KSr4KWN4KSv4KS+4KSV4KWN4KSf4KWN4KSw4KS/IOCkquCksOClgOCkleCljeCkt+CkoyDgpK7gpYvgpKHgpK7gpL4g4KSa4KS+4KSy4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZhY3RvcnlUZXN0IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTUyMDU5MzE4MzU5NjUzMDkxIj4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksOCksuCkvuCkiCDgpKrgpYHgpLDgpL4g4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqCDgpKbgpL/gpIHgpKbgpYgg4KSk4KSy4KWN4KSy4KWLIOCkuOCljeCkpOCksCDgpIngpKTgpY3gpKTgpY3gpKrgpL7gpKbgpJUg4KSq4KSw4KWA4KSV4KWN4KS34KSj4KSV4KWLIOCksOClguCkquCkruCkviDgpJrgpLLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkieCkpOCljeCkpOCljeCkquCkvuCkpuCklSDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSu4KWL4KSh4KSu4KS+IOCkmuCksuCkv+CksOCkueClh+CkleCliyDgpKzgpYfgpLLgpL4g4KSu4KS+4KSk4KWN4KSwIOCkieCkquCksuCkrOCljeCkpyDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiLgpKTgpLLgpY3gpLLgpYsg4KS44KWN4KSk4KSwIOCkieCkpOCljeCkpOCljeCkquCkvuCkpuCklSDgpJzgpLjgpY3gpKTgpYgg4KSa4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNLCDgpKrgpYHgpLDgpL4g4KSq4KS54KWB4KSB4KSaIOCkpuCkv+CkqCDgpKvgpYvgpKgg4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSw4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpLngpYHgpKjgpY3gpJvgpaQg4KSr4KWL4KSoIOCkieCkpOCljeCkquCkvuCkpuCklSDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSu4KWL4KSh4KSu4KS+IOCkmuCksuCkv+CksOCkueClh+CkleCliyDgpKzgpYfgpLLgpL4g4KSu4KS+4KSk4KWN4KSwIOCkieCkquCksuCkrOCljeCkpyDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlciIgbXNnaWQ9IjY2MjcxOTIzMzMzNzM0NjUxNDMiPiLgpLXgpL7gpLLgpKrgpYfgpKrgpLAg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlciIgbXNnaWQ9IjczNzM0NDc5MjA5Nzc2MjQ3NDUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkteCkvuCksuCkquClh+CkquCksCDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iMzI3ODYwODE2NTk3NzczNjUzOCI+IuCkpOCkquCkvuCkiOCkguCkleCliyDgpLXgpL7gpLLgpKrgpYfgpKrgpLAg4KSG4KSV4KS+4KSwIOCkuOCkruCkvuCkr+Cli+CknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjgyMzU3ODQzODQyMjM3MzAwOTEiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KS14KS+4KSy4KSq4KWH4KSq4KSw4KSV4KWLIOCkhuCkleCkvuCksCDgpLjgpJngpY3gpJXgpYfgpKTgpLngpLDgpYIg4KSu4KS/4KSy4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXN0ZXJDbGVhciIgbXNnaWQ9IjIzMTU3NTA0MjMxMzk2OTczOTciPiLgpJXgpL7gpLDgpY3gpK/gpLbgpL7gpLLgpL4g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hc3RlckNsZWFyIiBtc2dpZD0iMzY2NTM4MDQ5MjYzMzkxMDIyNiI+IuCkr+CkuOCkleCkviDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCLCDgpJXgpKjgpY3gpKvgpL/gpJfgpLDgpYfgpLjgpKgg4KSwIOCkuOCljeCkpeCkvuCkquCkv+CkpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSu4KS+IOCkquClgeCksOCliCDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZSIgbXNnaWQ9IjIwMjE2MTQ4Mjk1OTE3NzU2NDYiPiLgpLjgpK7gpK8g4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE4OTYzNDE0MzgxNTExNTI4ODEiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpJXgpYsg4KSY4KSh4KWA4KSV4KWLIOCkuOCkruCkryDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg1NTcwMjczMDczODAyMCI+IuCkq+Cli+CkqOCkleCliyDgpJjgpKHgpYDgpJXgpYsg4KS44KSu4KSvIOCkrOCkpuCksuCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZVpvbmUiIG1zZ2lkPSIyOTQ1MDc5ODAxMDEzMDc3MzQwIj4i4KS44KSu4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE2NzY5ODM3MTIzMTU4Mjc2NDUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSV4KWLIOCkuOCkruCkryDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDk5OTQzNDg4NDM2NjMzMzk4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkq+Cli+CkqOCkleCliyDgpLjgpK7gpK8g4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+IkFjY291bnRNYW5hZ2VyU2VydmljZSDgpJXgpYsg4KSw4KWC4KSq4KSu4KS+IOCkleCkvuCksOCljeCkryDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSIxOTQ4NDU1NTUyMzMzNjE1OTU0Ij4i4KSW4KS+4KSk4KS+IOCkheCkp+Ckv+CkleCkvuCksOClgOCkueCksOClguCksuCkvuCkiCDgpJXgpLIg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QWNjb3VudHMiIG1zZ2lkPSIxMDg2Nzk1NDY3NzYwMTIyMTE0Ij4i4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkluCkvuCkpOCkvuCkueCksOClgiDgpK3gpYfgpJ/gpY3gpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc0MTQ5NjUzNDc2OTY2MDAyNyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KWN4KSe4KS+4KSkIOCkluCkvuCkpOCkvuCkueCksOClguCkleCliyDgpLjgpYLgpJrgpYAg4KSq4KS+4KSJ4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkpuCljeCkteCkvuCksOCkviDgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCliyDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkluCkvuCkpOCkvuCkueCksOClgiDgpLjgpK7gpL7gpLXgpYfgpLYg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ0ODMxNjgyMjQ1MTgwNzM4MiI+IuCkq+Cli+CkqOCksuCkvuCkiCDgpKXgpL7gpLngpL4g4KSt4KSP4KSV4KS+IOCkluCkvuCkpOCkvuCkueCksOClguCkleCliyDgpLjgpYLgpJrgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkuOCljeCkpeCkvuCkquCkqOCkviDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkrOCkvuCknyDgpLjgpYPgpJzgpL/gpKQg4KSV4KWB4KSo4KWIIOCkluCkvuCkpOCkvuCkueCksOClgiDgpLjgpK7gpL7gpLXgpYfgpLYg4KS54KWB4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4i4KSW4KS+4KSk4KS+IOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSwIOCkquCkvuCkuOCkteCksOCljeCkoSDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1NDcyMTI0Mjk2OTA4OTc3MjYwIj4i4KSW4KS+4KSk4KS+4KS54KSw4KWC4KSV4KWLIOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKjgpYcg4KSwIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYcg4KSwIOCkieCkqOClgOCkueCksOClguCkleCliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKHgpLngpLDgpYLgpJXgpYsg4KS44KWH4KSf4KS/4KSZIOCkl+CksOCljeCkqOClhyDgpLjgpLngpL/gpKQg4KSW4KS+4KSk4KS+IOCkquCljeCksOCkrOCkqOCljeCkp+CkleCkleCliyDgpJbgpL7gpKTgpL4g4KSG4KSn4KS/4KSV4KS+4KSw4KWAIOCkuOCkleCljeCkt+CkruCkpOCkvuCkueCksOClgiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9IjQ5ODMxMjYzMDQ3NTcxNzczMDUiPiLgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiLgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KSl4KSq4KWN4KSo4KWHIOCksCDgpLngpJ/gpL7gpIngpKjgpYcg4KSc4KS44KWN4KSk4KS+IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkueCksOClgiDgpLjgpK7gpY3gpKrgpKjgpY3gpKgg4KSX4KSw4KWN4KSoLCDgpLAg4KSJ4KSo4KWA4KS54KSw4KWC4KSV4KWLIOCkquCkvuCkuOCkteCksOCljeCkoSDgpK7gpYfgpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iMjM1NDgxMzk2MTYzODc3NjQyIj4i4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkluCkvuCkpOCkvuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSI3OTg0MjI3MTQ3NDAzMzQ2NDIyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCljeCksOCkruCkvuCko+ClgOCkleCksOCkoyDgpJ/gpYvgpJXgpKjgpLngpLDgpYIg4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCknOCkoeCkvuCkqOCkueCksOClgiDgpLngpYfgpLDgpY3gpKjgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI4MzE4OTY0NDI0Njc1OTYwOTc1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJzgpKHgpL7gpKjgpLngpLDgpYIg4KSc4KS44KWN4KSk4KWIIOCkleClgeCkqCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYIg4KSF4KS14KS44KWN4KSl4KS/4KSkIOCkueClgeCkqOCljeCkm+CkqOCljSDgpLAg4KSc4KSh4KS/4KSkIOCkm+CkqOCljSDgpJzgpLjgpLLgpYcg4KS54KWH4KSw4KWN4KSo4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iODAxODc1ODEzNjQwNDMyMzY1OCI+IuCkquClguCksOCljeCkoyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KS54KWB4KSB4KSaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSIzNDAzMDYyMTg3Nzc5NzI0MTg1Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCkleClh+Ckn+CkueCksOClgiDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSoIOCksCDgpJXgpLjgpY3gpJ/gpK4g4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCljeCksOCli+Ckn+Cli+CkleCksiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkrOCljeCksOCkvuCkieCknOCksCDgpLAg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIfgpKjgpY3gpJ/gpLDgpKjgpYfgpJ/gpK7gpL4g4KSh4KWH4KSf4KS+IOCkquCkoOCkvuCkieCkqOClhyDgpK7gpL7gpKfgpY3gpK/gpK4g4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkm+CkqOCljSwg4KSk4KWN4KSv4KS44KWI4KSy4KWHIOCkh+CkqOCljeCkn+CksOCkqOClh+Ckn+CkruCkviDgpKHgpYfgpJ/gpL4g4KSq4KSg4KS+4KSJ4KSoIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpJXgpYsg4KSG4KS14KS24KWN4KSv4KSV4KSk4KS+IOCkquCksOCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUwNTY2MDE1OTY3NTc1MTg5NiI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSwIOCkn+CljeCksOCkvuCkq+Ckv+CklSDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIC8g4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUzMzM3OTg4ODY0MTI3MTQxOTMiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCksCDgpLjgpKzgpYgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkn+CljeCksOCkvuCkq+Ckv+CklSDgpLDgpYvgpJXgpY3gpKgg4KSwIOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSJ4KSm4KS+4KS54KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IEFQTiDgpJXgpYsg4KSq4KWN4KSw4KWL4KSV4KWN4KS44KWAIOCksCDgpKrgpYvgpLDgpY3gpJ8g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpJzgpY3gpJ7gpL7gpKgg4KSs4KS/4KSo4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpY3gpK/gpL7gpJXgpYfgpJ/gpLngpLDgpYIg4KSu4KWL4KSo4KS/4KSf4KSwIOCkl+CksOCljeCkqCwg4KSq4KWB4KSoOuCkqOCkv+CksOCljeCkpuClh+CktuCkv+CkpCDgpJfgpLDgpY3gpKgsIOCkteCkviDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iOTU4ODg0MjkxNDU0MzI3MzA5Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCknOCkoeCkvuCkqCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSc4KSh4KS+4KSo4KSV4KWLIOCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iNTk1MjU4NDk2NDM3MzAxNzk2MCI+IuCkn+Clh+CkpeCksOCljeCkoSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSc4KSh4KS+4KSoIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjE1MjQ0NDEzNDQ0MTIzMTk3ODAiPiLgpJ/gpL/gpKXgpLAg4KSX4KSw4KWH4KSV4KWLIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJzgpKHgpL7gpKjgpJXgpYsg4KS44KWN4KSl4KS/4KSk4KS/IOCkrOCkpuCksuCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iMTQwMDY2NjAxMjY3MTY0ODc0MSI+IuCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpKHgpYfgpJ/gpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iNTM0NzcyOTU3ODQ2ODc0NDM3OSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSh4KWH4KSf4KS+IOCkieCkquCkr+Cli+CklyDgpLjgpYfgpJ/gpL/gpJkg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MjAyMDEyOTQ5MjQ3MDQwMDExIj4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpJzgpKHgpL7gpKjgpLngpLDgpYIg4KS54KWH4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTAwMjc5ODA3NzM4NzgwMzcyNiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL7gpIct4KSr4KS+4KSHIOCkqOClh+Ckn+CkteCksOCljeCkleCkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4g4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkueClh+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJzgpLjgpY3gpKTgpYgg4KSV4KS/IOCkteCkvuCkhy3gpKvgpL7gpIcg4KS44KSV4KWN4KS34KSuIOCkmyDgpJXgpL8g4KSb4KWI4KSoIOCksCDgpJzgpKHgpL7gpKgg4KSX4KSw4KS/4KSP4KSV4KWLIOCkteCkvuCkhy3gpKvgpL7gpIcg4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KSV4KWLIOCkqOCkvuCkruClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNjU1MDY0MTE4ODc0OTEyODAzNSI+IuCkteCkvuCkhy3gpKvgpL7gpIfgpLjgpIHgpJcg4KSc4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpJvgpYHgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI3MTM3OTUwMjk3Mzg2MTI3NTMzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkteCkvuCkhy3gpKvgpL7gpIcg4KSq4KS54KWB4KSB4KSaIOCkrOCkv+CkqOCljeCkpuClgeCkrOCkvuCknyDgpJzgpKHgpL7gpKgg4KSX4KSw4KWN4KSoIOCksCDgpLXgpL/gpJrgpY3gpJvgpYfgpKbgpKgg4KSX4KSw4KWN4KSoIOCksCDgpLXgpL7gpIct4KSr4KS+4KSHIOCkqOClh+Ckn+CkteCksOCljeCkleCkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSJ4KSq4KSV4KSw4KSjIOCkleCkqOCljeCkq+Ckv+Ckl+CksOClh+CkuOCkqOCkruCkviDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKjgpLngpLDgpYIg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgbXNnaWQ9IjEzNjgyNTM4NzE0ODMyNTQ3ODQiPiLgpLXgpL7gpIct4KSr4KS+4KSHIE11bHRpY2FzdCDgpLjgpY3gpLXgpL/gpJXgpYPgpKTgpL/gpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzk2OTc3NDAyMTI1NjMzNjU0OCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK7gpLLgpY3gpJ/gpL/gpJXgpL7gpLfgpY3gpJ8g4KSg4KWH4KSX4KS+4KSo4KS+4KS54KSw4KWCIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAg4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpK7gpL4g4KSq4KSg4KS+4KSH4KSP4KSV4KWLIOCkquCljeCkr+CkvuCkleClh+Ckn+CkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCkleClh+CkteCksiDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkruCkvuCkpOCljeCksCDgpLngpYvgpIfgpKjgpaQg4KSv4KS44KSy4KWHIOCkl+CliOCksC3gpK7gpLLgpY3gpJ/gpL/gpJXgpL7gpLfgpY3gpJ8g4KSu4KWL4KShIOCkreCkqOCljeCkpuCkviDgpKzgpKLgpYAg4KSJ4KSw4KWN4KSc4KS+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUxOTQ5NzA2MDI1MzQ5OTI2Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+Cli+CkqCDgpK7gpL7gpKTgpY3gpLAg4KS54KWL4KSH4KSoLCDgpK7gpLLgpY3gpJ/gpL/gpJXgpL7gpLjgpY3gpJ8g4KSg4KWH4KSX4KS+4KSo4KS+4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYcg4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpJXgpL4g4KS44KSs4KWIIOCkieCkquCkleCksOCko+CkueCksOClguCkruCkviDgpKrgpKDgpL7gpIfgpI/gpJXgpL4g4KSq4KWN4KSv4KS+4KSV4KWH4KSf4KS54KSw4KWCIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkl+CliOCksC3gpK7gpLLgpY3gpJ/gpL/gpJXgpL7gpLjgpY3gpJ8g4KSu4KWL4KSh4KSt4KSo4KWN4KSm4KS+IOCkrOCkouClgCDgpIngpLDgpY3gpJzgpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClguCkruCkviDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiLgpLjgpY3gpKXgpL7gpKjgpYDgpK8g4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpJXgpKjgpY3gpKvgpL/gpJfgpLAg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLAg4KSf4KS+4KSi4KS+4KSV4KS+IOCkieCkquCkleCksOCko+CkueCksOClguCksuCkvuCkiCDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCksCDgpJzgpYvgpKHgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTMxNjgyMTU5MzMxNTQyMTM3Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkqOClgOCkryDgpKzgpY3gpLLgpYHgpJ/gpYHgpKUg4KSr4KWL4KSoIOCkleCkqOCljeCkq+Ckv+Ckl+CksCDgpJfgpLDgpY3gpKgg4KSwIOCkn+CkvuCkouCkvuCkleCkviDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSW4KWL4KScIOCkl+CksOCljeCkqCDgpLAg4KSc4KWL4KSh4KWAIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+IldpTUFY4KS44KSB4KSXIOCknOCli+CkoeCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSb4KWB4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS+4KSH4KSu4KWN4KSv4KS+4KSV4KWN4KS4IOCkuOCkleCljeCkt+CkriDgpJsg4KSV4KS/IOCkm+CliOCkqCDgpLAg4KSc4KSh4KS+4KSoIOCkreCkj+CkleCliyDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYLgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCknOCkvuCkqOCkleCkvuCksOClgCDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpbWF4U3RhdGUiIG1zZ2lkPSIyNDA1MDQyMjY3MTMxNDk2NTc5Ij4i4KS14KS+4KSH4KSu4KWN4KSv4KS+4KSV4KWN4KS4IOCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzE1NjQ1NjUwNDA4NDIwMTgwNSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWC4KSs4KS+4KSfIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpJzgpKHgpL7gpKgg4KSX4KSw4KWN4KSoIOCksCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KS14KS/4KSa4KWN4KSb4KWH4KSm4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NzAyNTA0MzAwNDkyMzc5OCI+IuCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYLgpLjgpIHgpJcg4KSr4KWL4KSoIOCknOCli+CkoeCljeCkqCDgpLAg4KSb4KWB4KSf4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGgiIG1zZ2lkPSI2MTI3NzY5MzM2MzM5Mjc2ODI4Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkieCkquCkleCksOCko+CkueCksOClguCkuOCkgeCklyDgpJzgpYvgpKHgpYAg4KSu4KS/4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkrOCljeCksuClgeCkn+ClgeCkpeCkleCliyDgpJXgpKjgpY3gpKvgpL/gpJfgpYHgpLDgpYfgpLjgpKjgpLLgpL7gpIgg4KS54KWH4KSw4KWN4KSoIOCksCDgpKzgpKjgpL7gpIngpKgg4KSwIOCknOCli+CkoeClgCDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSc4KSh4KS+4KSo4KS54KSw4KWC4KSy4KS+4KSIIOCkuOCljeCkteClgOCkleCkvuCksCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkq+Cli+CkqOCkruCkviDgpKzgpY3gpLLgpYHgpJ/gpYHgpKXgpJXgpYsg4KSV4KSo4KWN4KSr4KS/4KSX4KSw4KWH4KS44KSoIOCkueClh+CksOCljeCkqCDgpLAg4KSc4KWL4KSh4KWAIOCkreCkj+CkleCkviDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSc4KSh4KS+4KSo4KS54KSw4KWCIOCkrOCkqOCkvuCkieCkqCDgpLAg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9uZmMiIG1zZ2lkPSI0NDIzMzUxMjc0NzU3ODc2OTUzIj4i4KSo4KSc4KS/4KSVIOCkleCljeCkt+Clh+CkpOCljeCksCDgpLjgpILgpJrgpL7gpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSj4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKjgpK/gpL7gpIEg4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkuOCkguCkmuCkvuCksCAoTkZDKSDgpJ/gpY3gpK/gpL7gpJfgpLngpLDgpYIsIOCkleCkvuCksOCljeCkoeCkueCksOClgiDgpLAg4KSq4KS+4KSg4KSV4KS54KSw4KWC4KS44KSB4KSXIOCkheCkqOCljeCkpOCksOCljeCkleCljeCksOCkv+Ckr+CkviDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpLLgpJUg4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjYwMzQyMDMwNjUwNzcxMjI5OTIiPiLgpJXgpYHgpKjgpYgg4KS44KSu4KWN4KSs4KSo4KWN4KSn4KS/4KSkIOCkquCkvuCkuOCkteCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSwIOCkleCkv+CksuCkleCksuCkvuCkiCDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkieCkpuCkvuCkueCksOCko+CkleCliyDgpLLgpL7gpJfgpL8sIOCkheCkqOCljeCkpOCksOCljeCkl+CkruCkqCDgpKvgpYvgpKgg4KSV4KSyIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKbgpL4g4KSr4KWL4KSo4KSy4KWHIOCkleCkv+CksuCkleCksuCkvuCkiCDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSbLCDgpKTgpY3gpK/gpLjgpKrgpJvgpL8g4KSV4KSyIOCkuOCkleCkv+Ckj+CkleCliyDgpKzgpYfgpLLgpL4g4KSV4KS/4KSy4KSVIOCkquClgeCkqOCkg+CkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSI2MjAxODEwMDA4MjMwNTAzMDUyIj4i4KS44KSu4KWA4KSV4KSw4KSjIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iMjcwNjc0NTY3NDU2OTY3ODY0NCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJbgpL7gpKTgpL7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkv+CkmeCljeCklSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSJ4KSm4KS+4KS54KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpLjgpLLgpYcg4KS14KWN4KSv4KSV4KWN4KSk4KS/4KS54KSw4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpJbgpL7gpKTgpL7gpLjgpIHgpJcg4KS44KS/4KSZ4KWN4KSVIOCkreCkj+CkleCliyDgpKjgpK3gpI/gpJXgpYsg4KSo4KS/4KSw4KWN4KSn4KS+4KSw4KSjIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU3luY1NldHRpbmdzIiBtc2dpZD0iNTQwODY5NDg3NTc5Mzk0NTMxNCI+IuCkn+Ckl+CksiDgpLjgpL/gpJngpY3gpJUg4KSW4KWB4KSy4KS+IOCksCDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9Ijg5NTYyNjI1OTEzMDYzNjk4NjgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSW4KS+4KSk4KS+4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpL/gpJngpY3gpJUg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpIngpKbgpL7gpLngpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/LCDgpK/gpYsg4KSW4KS+4KSk4KS+4KS44KSB4KSXIOCkteCljeCkr+CkleCljeCkpOCkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KS44KS/4KSZ4KWN4KSVIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSI3Mzk2NTc3NDUxMzYwMjAyNDQ4Ij4i4KS44KS/4KSZ4KWN4KSVIOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1N0YXRzIiBtc2dpZD0iMTUxMDE0Mzc2MTc1NzYwNjE1NiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJbgpL7gpKTgpL7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkruClgOCkleCksOCko+CkleCliyDgpIbgpIHgpJXgpKHgpL4g4KS44KSu4KWA4KSV4KSw4KSjIOCkmOCkn+CkqOCkvuCkueCksOClguCkleCliyAg4KSH4KSk4KS/4KS54KS+4KS4IOCksCDgpLjgpK7gpYDgpJXgpLDgpKMg4KSX4KSw4KS/4KSP4KSV4KWLIOCkoeClh+Ckn+CkvuCkleCliyDgpK7gpL7gpKrgpKgg4KS44KSu4KWH4KSkLCDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjQ3NTY2MDk2MzcwNTMzNTMzMTgiPiLgpLjgpKbgpLjgpY3gpK8g4KSs4KSo4KS+4KSH4KSV4KS+IOCkq+Ckv+CkoeCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNTU1NzA1ODkwNzkwNjE0NDUwNSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpLngpL/gpLLgpYfgpJXgpYsg4KS44KSu4KWA4KSV4KSw4KSjIOCkl+CksOCkv+Ckj+CkleCkviDgpLjgpYLgpJrgpJXgpLngpLDgpYIg4KSs4KS+4KSw4KWHIOCkteCkv+CkteCksOCko+CkueCksOClgiDgpLLgpL/gpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI5MDE1MjQ2MzI1NDA4MjA5Mjk2Ij4i4KS44KSm4KS44KWN4KSvIOCkrOCkqOCkvuCkh+CkleCkviDgpKvgpL/gpKHgpLngpLDgpYIg4KSy4KWH4KSW4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI2OTI4OTMwMTg4ODI2MDg5NDEzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkreCksOCljeCkluCksOCliCDgpLjgpL/gpJngpY3gpJUg4KSr4KS/4KSh4KS54KSw4KWC4KSy4KS+4KSIIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpL/gpJngpY3gpJUg4KSr4KS/4KSh4KS54KSw4KWC4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkr+CkuOCksuClhyAg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI0MTA3MTAxNTI1NzQ2MDM1NzE4Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCktuCkrOCljeCkpuCkleCli+CktuCkruCkviDgpKXgpKrgpYfgpJXgpL4g4KS24KSs4KWN4KSm4KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNjU5NjE0NjAwMzM4OTA0MjQzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCksuClhyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS24KSs4KWN4KSm4KSV4KWL4KS24KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpJfgpLDgpYfgpJXgpL4g4KS54KWB4KSoIOCkuOCkleCljeCkqOClhyDgpLjgpKzgpYgg4KS24KSs4KWN4KSm4KS54KSw4KWCLCDgpKjgpL7gpK7gpLngpLDgpYIg4KSwIOCkquCkpuCkvuCkteCksuClgOCkueCksOClgiDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjE4MzExMDQwMjMxNDQ0MTEwNiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvi3gpKrgpLDgpL/gpK3gpL7gpLfgpL/gpKQg4KS24KSs4KWN4KSm4KSV4KWL4KS24KSu4KS+IOCktuCkrOCljeCkpuCkueCksOClgiDgpKXgpKrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MTg1Mzg1NzE2MjU1MDY1MjkxIj4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktuCkruCkviDgpKjgpK/gpL7gpIEg4KS24KSs4KWN4KSmIOCksuClh+CkluCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkl+CksOCkv+Ckj+CkleCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSq4KS54KWB4KSB4KSa4KSV4KWLIOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkl+CksOCkv+Ckj+CkleCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSq4KS54KWB4KSB4KSa4KSV4KWLIOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM2NDI0NzMyOTIzNDgxMzIwNzIiPiLgpK3gpLXgpL/gpLfgpY3gpK8g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KSu4KS+IOCkieCkquCksuCkrOCljeCkpyDgpLngpYHgpKjgpYcgVVNCIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTkxNDQwMjY4NDY4NTg0ODgyOCI+IuCkreCkteCkv+Ckt+CljeCkryDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpK7gpL4g4KSJ4KSq4KSy4KSs4KWN4KSnIOCkueClgeCkqOClhyBTRCDgpJXgpL7gpLDgpY3gpKHgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4NDg1OTc5MDYyMjU0NjY2NzQ4Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KS54KSw4KWC4KSy4KS+4KSIIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4ODA1NjkzNjMwMDUwNDU4NzYzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFNEIOCkleCkvuCksOCljeCkoeCkleCliyDgpLXgpL/gpLfgpK/gpLjgpYLgpJrgpYAg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpK7gpL4g4KSy4KWH4KSW4KWN4oCN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCBTRCDgpJXgpL7gpLDgpY3gpKHgpK7gpL4g4KSy4KWH4KSW4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+IuCkhuCkqOCljeCkpOCksOCkv+CklSDgpK7gpL/gpKHgpL/gpK/gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkuOCkvuCkruCkl+CljeCksOClgOCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNL+CkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODE4OTE2MDU5NzY5ODUyOTE4NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSu4KS/4KSh4KS/4KSv4KS+IOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpLjgpL7gpK7gpJfgpY3gpLDgpYDgpLngpLDgpYIg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+IuCkleCkvuCkl+CknOCkvuCkpCDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NzA0MzIzMTc2OTE0MTIxNDg0Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkvuCkl+CknOCkvuCkpCDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KS44KSu4KS+4KSv4KWL4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSI4MTUwNjEzODIzOTAwNDYwNTc2Ij4i4KS44KSs4KWIIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkueCksOClguCkleCliyDgpKzgpL7gpLngpY3gpK8g4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSV4KWLIOCkquCkueClgeCkgeCkmiDgpLDgpL7gpJbgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSIzMjE1MjA4MzU3NDE1ODkxMzIwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkrOCliCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkrOCkvuCkueCljeCkryDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpK7gpL7gpKXgpL8g4KSq4KS54KWB4KSB4KSaIOCksOCkvuCkluCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTY1NjQ4NzI2NDgxOTY2OTgyNCI+IuCkleCljeCkr+CkvuCkuCDgpKvgpL7gpIfgpLIg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTU3ODk2NzY0MjI2NTU1MDk1NSI+IuCkleClh+CkuCDgpKvgpL7gpIfgpLIg4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSy4KS+4KSIIOCkquCkouCljeCkqCDgpLAg4KSy4KWH4KSW4KWN4oCN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiLgpIfgpKjgpY3gpJ/gpLDgpKjgpYfgpJ8g4KSV4KSy4KS54KSw4KWCIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZV9zaXAiIG1zZ2lkPSI0NzE3NjMyMDAwMDYyNjc0Mjk0Ij4i4KSH4KSo4KWN4KSf4KSw4KSo4KWH4KSfIOCkleCksiDgpJfgpLDgpY3gpKgv4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCBTSVAg4KS44KWH4KS14KS+4KSy4KS+4KSIIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc4NjI1OTMyODM2MTE0OTMyMzIiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSX4KSV4KWLIOCkh+CkpOCkv+CkueCkvuCkuCDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiLgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkkOCkpOCkv+CkueCkvuCkuOCkv+CklSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkquCkouCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSIyNTYyMDUzNTkyMzM5ODU5OTkwIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkqOClgOCkpOCkvyDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSo4KWA4KSk4KS/4KS54KSw4KWCIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkqCDgpJfgpLDgpY3gpKgg4KSwIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckly3gpLXgpL/gpLbgpYfgpLcg4KSo4KS/4KSv4KSu4KS54KSw4KWCIOCkquCksOCkv+CkreCkvuCkt+Ckv+CkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTA4ODIxNzMwOTA4ODcyOTY1MCI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpIngpKrgpK/gpYvgpJcg4KSy4KWH4KSW4KS+4KSy4KS+4KSIIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KS44KSw4KWAIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLXgpL/gpLDgpYLgpKbgpY3gpKfgpK7gpL4g4KSV4KS44KSw4KWAIOCkqOClh+Ckn+CkteCksOCljeCklSDgpIngpKrgpK/gpYvgpJfgpYAg4KSF4KSV4KS+4KSJ4KSo4KWN4KSf4KWH4KShIOCkmyDgpK3gpKjgpYfgpLAg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iMzY1ODUyNzIxNDkxNDk1OTc0OSI+IuCkuOCkleClh+Ckn+CkleCliyDgpKjgpL/gpLbgpL7gpKjgpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iNzY1NTU2ODQzMzY5NjM1NjU3OCI+IuCkruCkvuCksOCljeCklyDgpKbgpLDgpY3gpLbgpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpJXgpYfgpJ/gpJXgpYsg4KSo4KS/4KS24KS+4KSo4KS54KSw4KWCIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9Ijc2NzM0MTY0ODc4NzM0MzIyNjgiPiLgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYIg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI0NTg0NTc3NDI2ODM0MzEzODciPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSs4KS+4KSfIOCkquCli+CkuOCljeCknyDgpJfgpLDgpL/gpI/gpJXgpL7gpLjgpLngpL/gpKQg4KSq4KWB4KSo4KSD4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCwg4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqCDgpLAg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkueCkn+CkvuCkieCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9IjcwNTc3NjQ3NDIyMTE2NTY2NTQiPiLgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS24KWN4KSw4KWL4KSk4KS+IOCkuOClh+CkteCkvuCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iOTg1Njk3OTE4NTc2OTAyOTg2Ij4i4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkuOClguCkmuCkqOCkviDgpLbgpY3gpLDgpYvgpKTgpL4g4KS44KWH4KS14KS+4KSV4KWLIOCktuClgOCksOCljeCkty3gpLjgpY3gpKTgpLDgpJXgpYsg4KSH4KSo4KWN4KSf4KSw4KSr4KWH4KS4IOCkrOCkvuCkgeCkp+CljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iMzY5OTYwMDgzMzk3NTExNzQ3OCI+IuCkteCkvuCkueCklS3gpKrgpY3gpLDgpKbgpL7gpKgg4KS14KS/4KSo4KWN4KSv4KS+4KS4IOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iNDE1OTU0OTE1MjUyOTExMTkyMCI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCksuCkvuCkiCDgpLXgpL7gpLngpJUt4KSq4KWN4KSw4KSm4KS+4KSoIOCkteCkv+CkqOCljeCkr+CkvuCkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjgyMDYwNzc0NDc4Mzg5MDk1MTYiPiLgpLjgpJ7gpY3gpJzgpL7gpLIg4KSF4KS14KS44KWN4KSl4KS+4KSV4KS+IOCkquCksOCljeCkr+CkteClh+CkleCljeCkt+Cko+CkleCkviDgpLLgpL7gpJfgpL8g4KS44KWB4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI2ODk5MTAyMDc1ODI1MjcyMjExIj4i4KS44KSe4KWN4KSc4KS+4KSyIOCkheCkteCkuOCljeCkpeCkvuCkleCkviDgpKrgpLDgpY3gpK/gpLXgpYfgpJXgpY3gpLfgpKMg4KS44KWB4KSo4KWN4KSo4KSV4KS+IOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSa4KS+4KSB4KS54KS/4KSm4KWIIOCkqOCkmuCkvuCkgeCkueCkv+CkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSo4KS/4KSv4KSu4KS54KSw4KWCIOCkruCkv+CksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjMyNTIxMTQyMDM5MTk1MTAzOTQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgt4KSF4KSo4KSy4KSVIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClguCkruCkviDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSH4KSP4KSV4KWLIOCksuCkruCljeCkrOCkvuCkhyDgpLAg4KSF4KSV4KWN4KS34KSw4KS54KSw4KWCIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2F0Y2hMb2dpbiIgbXNnaWQ9IjkxNDEzMDY0Njk0MjE5OTUwMyI+IuCkruCli+CkqOCkv+Ckn+CksCDgpLjgpY3gpJXgpY3gpLDgpL/gpKgt4KSF4KSo4KSy4KSVIOCkquCljeCksOCkr+CkpOCljeCkqOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSm4KS+IOCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkreCkj+CkleCliyDgpLjgpILgpJbgpY3gpK/gpL4g4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSv4KSm4KS/IOCkqOCkv+CkleCliCDgpKfgpYfgpLDgpYgg4KSX4KSy4KSkIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClgiDgpJ/gpL7gpIfgpKog4KSt4KSP4KSV4KS+IOCkm+CkqCDgpK3gpKjgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkleCkviDgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSm4KS+IOCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkreCkj+CkleCliyDgpLjgpILgpJbgpY3gpK/gpL4g4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSv4KSm4KS/IOCkqOCkv+CkleCliCDgpKfgpYfgpLDgpYgg4KSX4KSy4KSkIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClgiDgpJ/gpL7gpIfgpKog4KSt4KSP4KSV4KS+IOCkm+CkqCDgpK3gpKjgpYcg4KSr4KWL4KSoIOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkq+Cli+CkqOCkleCkviDgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+IuCkuOCljeCkleCljeCksOCkv+CkqC3gpIXgpKjgpLLgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkpuCksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjYwNTk2Mzk2MjMwMTkwNDQ1OCI+IuCkuOCljeCkleCljeCksOCkv+CkqC3gpIXgpKjgpLLgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZm9yY2VMb2NrIiBtc2dpZD0iMjI3NDA4NTM4NDcwNDI0ODQzMSI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpLLgpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19mb3JjZUxvY2siIG1zZ2lkPSIxMTQxNzk3NTg4NDAzODI3MTM4Ij4i4KSV4KS44KSw4KWAIOCksCDgpJXgpLngpL/gpLLgpYcg4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93aXBlRGF0YSIgbXNnaWQ9IjM5MTA1NDU0NDY3NTg2Mzk3MTMiPiLgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGEiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMDYxODQwOTYwNjc3NTY4NzYiPiLgpI/gpIngpJ/gpL4g4KSr4KWN4KSv4KS+4KSV4KWN4KSf4KWN4KSw4KS/IOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KWH4KSwIOCkmuClh+CkpOCkvuCkteCkqOClgCDgpKjgpIbgpIngpIHgpKbgpYgg4KSf4KWN4KSv4KS+4KSs4KSy4KWN4KSf4KSV4KWLIOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTA5Njg5NTYwNDU3NDE4ODM5MSI+IuCkj+CkieCkn+CkviDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSh4KWH4KSf4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpYfgpLAg4KSa4KWH4KSk4KS+4KS14KSo4KWAIOCkqOCkhuCkieCkgeCkpuCliCDgpKvgpYvgpKjgpJXgpYsg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9zZXRHbG9iYWxQcm94eSIgbXNnaWQ9IjI3ODQ4MjgyOTM3NDc3OTE0NDYiPiLgpIngpKrgpJXgpLDgpKMg4KS14KS/4KS24KWN4KS14KS14KWN4KSv4KS+4KSq4KWAIOCkquCljeCksOCli+CkleCljeCkuOClgCDgpK7gpL/gpLLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+IuCkqOClgOCkpOCkvyDgpLjgpJXgpY3gpLfgpK4g4KS54KWB4KSB4KSm4KS+IOCkquCljeCksOCkr+Cli+CklyDgpLngpYHgpKjgpYcg4KSJ4KSq4KSV4KSw4KSjICDgpLXgpL/gpLbgpY3gpLXgpLXgpY3gpK/gpL7gpKrgpYAg4KSq4KWN4KSw4KWL4KSV4KWN4KS44KWAIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSq4KWN4KSw4KSl4KSuIOCkieCkquCkleCksOCkoyDgpKrgpY3gpLDgpLbgpL7gpLjgpLbgpKjgpLLgpYcg4KSu4KS+4KSk4KWN4KSwIOCkquCljeCksOCkreCkvuCkteCkleCkvuCksOClgCDgpLXgpL/gpLbgpY3gpLXgpLXgpY3gpK/gpL7gpKrgpYAg4KSq4KWN4KSw4KWL4KSV4KWN4KS44KWAIOCkuOClh+CknyDgpJfgpLDgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSI4ODUyNzkxNTE4NDcyNTQwNTYiPiLgpLLgpJUt4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpIXgpKjgpY3gpKQg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSIxNzI5NzI1MjI2MzE0NjkxNTkxIj4i4KSq4KWN4KSw4KS+4KSv4KSDIOCkleCkpOCkvyDgpJvgpL/gpJ/gpYsg4KSy4KSVLeCkuOCljeCkleCljeCksOCkv+CkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSs4KSm4KSy4KWN4KSo4KWBIOCkquCksOCljeCkmyDgpK/gpLjgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iODkwMTMyNjE5OTkwOTEzMjkxNSI+IuCkreCko+CljeCkoeCkvuCksOCkoyDgpIfgpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpLjgpKgg4KSu4KS/4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+IuCkreCko+CljeCkoeCkvuCksCDgpJfgpLDgpL/gpI/gpJXgpYsg4KSh4KWH4KSf4KS+IOCkh+CkqOCljeCkleCljeCksOCkv+CkquCljeCknyDgpLngpYHgpKjgpYEg4KSG4KS14KS24KWN4KSv4KSVIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iNjM5NTMwMTAyMzE1MjI5NzgyNiI+IuCkleCljeCkr+CkvuCkruClh+CksOCkvuCksuCkvuCkiCDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+IuCkuOCkrOCliCDgpIngpKrgpJXgpLDgpKMg4KSV4KWN4KSv4KS+4KSu4KSw4KS+4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiLgpJXgpL/gpJfgpL7gpLDgpY3gpKHgpK7gpL4g4KSt4KSP4KSV4KS+IOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClgiDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiLgpJXgpYfgpLngpYAg4KSV4KS/4KSX4KS+4KSw4KWN4KShIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBob25lVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI4OTAxMDk4MzM2NjU4NzEwMzU5Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY5OTIzNjUwNTI3MTM2NjE1Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg5NzU0NDY1NDI0Mjg3NDU0MyI+IuCkleCkvuCkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMTAzNjAxNDMzMzgyMTU4MTU1Ij4i4KSV4KS+4KSw4KWN4KSvIOCkq+CljeCkr+CkvuCkleCljeCkuCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MzUxNzcxNDQ5NDgzMjkzNzAiPiLgpJjgpLDgpJXgpYsg4KSr4KWN4KSv4KS+4KSV4KWN4KS4IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjAzODc4Njc0NDc3MjA3Mzk0Ij4i4KSq4KWH4KSc4KSwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+IuCkheCkqOCljeCkryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJlbWFpbEFkZHJlc3NUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjgwNzM5OTQzNTI5NTYxMjkxMjciPiLgpJfgpYPgpLkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3MDg0MjM3MzU2NjAyNjI1NjA0Ij4i4KSV4KS+4KSuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+IuCkheCkqOCljeCkryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIzNzQ5MTM5NTI4NzAxMTA2MTgiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwb3N0YWxBZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI2ODgwMjU3NjI2NzQwMDQ3Mjg2Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTYyOTE1Mzk1NjA0NTEwOTI1MSI+IuCkleCkvuCkriI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0OTMyNjgyODQ3NTk1Mjk5MzY5Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1BZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSIxNzM4NTg1MTk0NjAxNDc2Njk0Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM1OTY0NDU2NTY0NzM4MzcwOCI+IuCkleCkvuCkriI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JnYW5pemF0aW9uVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NTQ2MzM1NjEyMTg5MTE1NjE1Ij4i4KSV4KS+4KSuIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQzNzgwNzQxMjkwNDk1MjAzNzMiPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNDU1MDQ3NDY4NTgzOTY1MTA0Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1Qcm90b2NvbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI4NTk1MjYxMzYzNTE4NDU5NTY1Ij4iQUlNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzM5MDQ3MzYyODI3NTQ5MDcwMCI+IldpbmRvd3MgTGl2ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4ODI4NzcxMzQ5MzE0NTgyMTciPiJZYWhvbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjUwMzUzNzYzMTMyMDA1ODUyNDIiPiLgpLjgpY3gpJXgpL7gpIfgpKoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3NTMyMzYzMTc4NDU5NDQ0OTQzIj4iUVEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNzEzNDQxMDM0Mjk5NjYwNzQ5Ij4iR29vZ2xlIFRhbGsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNTA2ODU3MzEyNzE4NjMwODIzIj4iSUNRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY0ODc5NzkwMzc4NTI3OTM1MyI+IkphYmJlciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ3VzdG9tIiBtc2dpZD0iMTY0NDczODA1OTA1MzM1NTgyMCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUhvbWUiIG1zZ2lkPSIyNTcwOTIzNDYzMDMzOTg1ODg3Ij4i4KSX4KWD4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW9iaWxlIiBtc2dpZD0iNjUwMTQ2MzU1Nzc1NDc1MTAzNyI+IuCkruCli+CkrOCkvuCkh+CksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmsiIG1zZ2lkPSI4ODYzOTM5NjY3MDU5OTExNjMzIj4i4KSV4KS+4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4V29yayIgbXNnaWQ9IjM1MTc3OTIxNjAwMDg4OTA5MTIiPiLgpJXgpL7gpLDgpY3gpK8g4KSr4KWN4KSv4KS+4KSV4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4SG9tZSIgbXNnaWQ9IjIwNjcyNjU5NzIzMjI5NzE0NjciPiLgpJjgpLDgpJXgpYsg4KSr4KWN4KSv4KS+4KSV4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlUGFnZXIiIG1zZ2lkPSI3NTgyMzU5OTU1Mzk0OTIxNzMyIj4i4KSq4KWH4KSc4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXIiIG1zZ2lkPSIxNTQ0NDI1ODQ3ODY4NzY1OTkwIj4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FsbGJhY2siIG1zZ2lkPSIyNzEyMTc1MjAzMDY1Njc4MjA2Ij4i4KSV4KSy4KSs4KWN4KSv4KS+4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FyIiBtc2dpZD0iODczODM2MDY4OTYxNjcxNjk4MiI+IuCkleCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNvbXBhbnlNYWluIiBtc2dpZD0iNTQwNDM0MzU2NDYxNDc4OTE2Ij4i4KSV4KSu4KWN4KSq4KSo4KWAIOCkruClgeCkluCljeCkryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4i4KSu4KWB4KSW4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXJGYXgiIG1zZ2lkPSI4NTg3NjU3MTQ1MDcyNDQ2NTY1Ij4i4KSF4KSo4KWN4KSvIOCkq+CljeCkr+CkvuCkleCljeCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+IuCksOClh+CkoeCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVRlbGV4IiBtc2dpZD0iMzM2Nzg3OTk1MjQ3NjI1MDUxMiI+IuCkn+Clh+CksuClh+CkleCljeCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVR0eVRkZCIgbXNnaWQ9Ijg2MDY1MTQzNzg1ODUwMDAwNDQiPiJUVFkgVEREIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya01vYmlsZSIgbXNnaWQ9IjEzMTE0MjY5ODkxODQwNjU3MDkiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KSs4KS+4KSH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya1BhZ2VyIiBtc2dpZD0iNjQ5OTM4NzMxMjMxMTU3MDU2Ij4i4KSV4KS+4KSw4KWN4KSvIOCkquClh+CknOCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjU1OTY3NzI2MzYxMjg1NjI4ODQiPiLgpLjgpLngpL7gpK/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNbXMiIG1zZ2lkPSI3MjU0NDkyMjc1NTAyNzY4OTkyIj4iTU1TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQ3VzdG9tIiBtc2dpZD0iNzgzNzU4NjE5ODQ1ODA3MzQwNCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUJpcnRoZGF5IiBtc2dpZD0iMjgxMzM3OTg0NDIxMTM5MDc0MCI+IuCknOCkqOCljeCkruCkpuCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUFubml2ZXJzYXJ5IiBtc2dpZD0iMzg3Njc3OTc0NDUxODI4NDAwMCI+IuCkteCkvuCksOCljeCkt+Ckv+CklSDgpLjgpK7gpL7gpLDgpYvgpLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVPdGhlciIgbXNnaWQ9IjczODgxNzg5MzkwMTAxNDMwNzciPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVDdXN0b20iIG1zZ2lkPSI4NTI1OTYwMjU3ODA0MjEzODQ2Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlSG9tZSIgbXNnaWQ9IjQ0OTIyNzIzNjE0MDQzMzkxOSI+IuCkl+Clg+CkuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4i4KSV4KS+4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlT3RoZXIiIG1zZ2lkPSIyOTIzMDA4Njk1MjcyNjM5NTQ5Ij4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlTW9iaWxlIiBtc2dpZD0iMTE5OTE5MDA1MzIxMTY2MjA1Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlSG9tZSIgbXNnaWQ9IjgxNjU3NTY5NzcxODQ0ODMwOTciPiLgpJfgpYPgpLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlV29yayIgbXNnaWQ9IjUyNjgxNzI3NzIzODc2OTQ0OTUiPiLgpJXgpL7gpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlQ3VzdG9tIiBtc2dpZD0iMjA3NDAyODc1NTUyNzgyNjA0NiI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUhvbWUiIG1zZ2lkPSI2MjQxMTgxMDMyOTU0MjYzODkyIj4i4KSX4KWD4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlV29yayIgbXNnaWQ9IjEzNzE0ODkyOTAyNDI0MzMwOTAiPiLgpJXgpL7gpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVPdGhlciIgbXNnaWQ9IjUzNzcwMDc0OTU3MzU5MTU0NzgiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQ3VzdG9tIiBtc2dpZD0iNjkxOTQ1MzgzNjYxODc0OTk5MiI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xBaW0iIG1zZ2lkPSI3MDUwMzYwNjEyMzY4MzgzNDE3Ij4iQUlNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE1zbiIgbXNnaWQ9IjE0NDU1NjU0NTQyMDc2OTQ0MiI+IldpbmRvd3MgTGl2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xZYWhvbyIgbXNnaWQ9IjgyNzE0Mzk0MDg0NjkwMjEyNzMiPiJZYWhvbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xTa3lwZSIgbXNnaWQ9IjkwMTkyOTY3NDQ2MjI4MzI5NTEiPiLgpLjgpY3gpJXgpL7gpIfgpKoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sUXEiIG1zZ2lkPSI4ODg3NDg0Mzc5NDk0MTExODg0Ij4iUVEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IuCkueCljeCkr+CkvuCkmeCkhuCkieCkn+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZVdvcmsiIG1zZ2lkPSIyOTI2ODg3MDUwNTM2Mzg3MiI+IuCkleCkvuCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVPdGhlciIgbXNnaWQ9IjM5NTE3ODExMzE1NzAxMjQwODIiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlQ3VzdG9tIiBtc2dpZD0iMjI1NTIzNDE1MzcyMDg4MzIyIj4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ3VzdG9tIiBtc2dpZD0iMzU0MjQwMzY3OTgyNzI5NzMwMCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjYyNzQzMzQ4MjUxOTUzNzkwNzYiPiLgpLjgpLngpL7gpK/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVCcm90aGVyIiBtc2dpZD0iODc1NzkxMzUwNjc4NDA2NzcxMyI+IuCkreCkvuCkhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUNoaWxkIiBtc2dpZD0iMTg5MDc0NjI3NzI3Njg4MTYyNiI+IuCkrOCkmuCljeCkmuCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZURvbWVzdGljUGFydG5lciIgbXNnaWQ9IjY5MDQ4MDcxMTIxMjExMjIxMzMiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KS44KS+4KSd4KWH4KSm4KS+4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRmF0aGVyIiBtc2dpZD0iNTIyODAzNDY4NzA4MjA1MDcyNSI+IuCkrOClgeCkrOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZyaWVuZCIgbXNnaWQ9IjczMTMxMDY3NjI0ODMzOTEyNjIiPiLgpK7gpL/gpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNYW5hZ2VyIiBtc2dpZD0iNjM2NTY3Nzg2MTYxMDEzNzg5NSI+IuCkrOCljeCkr+CkteCkuOCljeCkpeCkvuCkquCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZU1vdGhlciIgbXNnaWQ9IjQ1Nzg1NzEzNTI5NjI3NTgzMDQiPiLgpIbgpK7gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVQYXJlbnQiIG1zZ2lkPSI0NzU1NjM1NTY3NTYyOTI1MjI2Ij4i4KSF4KSt4KS/4KSt4KS+4KS14KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFydG5lciIgbXNnaWQ9IjcyNjY0OTAyODUxMjAyNjI3ODEiPiLgpKrgpL7gpLDgpY3gpJ/gpKjgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWZlcnJlZEJ5IiBtc2dpZD0iMTAxNTczMDU5ODQ0MTM1NTI0Ij4i4KSm4KWN4KS14KS+4KSw4KS+IOCkieCksuCljeCksuCkv+CkluCkv+CkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlbGF0aXZlIiBtc2dpZD0iMTc5OTgxOTkzMDA4NTYxMDI3MSI+IuCkhuCkq+CkqOCljeCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNpc3RlciIgbXNnaWQ9IjE3MzU5ODM1NTQ0NzkwNzY0ODEiPiLgpKzgpLngpL/gpKjgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTcG91c2UiIG1zZ2lkPSIzOTQxMzY5Mzk0Mjg2OTgxMTciPiLgpKrgpKTgpL8t4KSq4KSk4KWN4KSo4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVDdXN0b20iIG1zZ2lkPSIyNDczNTgwNTkzMTExNTkwOTQ1Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IuCkl+Clg+CkuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLgpJXgpL7gpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsg4KSwIOCkqOCkr+CkvuCkgSBQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDgpJXgpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IuCkqOCkr+CkvuCkgSBQSU4g4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggUElOIOCkleCli+CkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4KSX4KSy4KSkIFBJTiDgpJXgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpK7gpYfgpKjgpYEg4KSl4KS/4KSa4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpKTgpY3gpK/gpLjgpKrgpJvgpL8g4KWmIOCkpeCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsX2RpYWxvZ19udW1iZXJfZm9yX2Rpc3BsYXkiIG1zZ2lkPSI2OTYxOTIxMDMxOTUwOTA5NzAiPiLgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSo4KSu4KWN4KSs4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4OTYzODM5MjQyNTY1NjUzMTkyIj4i4KS44KWH4KS14KS+IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2NyZWVuX2xvY2tlZCIgbXNnaWQ9IjcyODg0NDMwNzQ4MDY4MzI5MDQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSy4KSVIOCkl+CksOCkv+Ckj+CkleCli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5faW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9lbmFibGVkIiBtc2dpZD0iNDYxNTQwNTE2MTQxMjYwNDkiPiLgpIXgpKjgpLLgpJUg4KS14KS+IOCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpJXgpLIg4KSX4KSw4KWN4KSoIOCkruClh+CkqOClgSDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSI2ODYyNjAwMjg3OTcxNTgzNjQiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkruClh+CkqOClgSDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNzQ3ODcwMzI1NDk2NDgxMDMwMiI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYEg4KSi4KS+4KSB4KSa4KS+IOCkluCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZW1lcmdlbmN5X2NhbGwiIG1zZ2lkPSI1MzQ3NjMzNzg0NDAxMjg1MjI1Ij4i4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkleCksuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4i4KSV4KSy4KSu4KS+IOCkq+CksOCljeCkleCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9jb3JyZWN0IiBtc2dpZD0iOTAzOTAwODY1MDM2MjI2MTIzNyI+IuCkuOCkueClgCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fd3JvbmciIG1zZ2lkPSI0MzE3OTU1MDE0OTQ4MTA4Nzk0Ij4i4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Bhc3N3b3JkX3dyb25nIiBtc2dpZD0iNTczNzgxNTM5MzI1MzE2NTMwMSI+IuCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IuCkheCkpOCljeCkr+CkvuCkp+Ckv+CklSDgpK7gpYvgpLngpKHgpL4g4KSW4KWL4KSy4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClgiDgpKzgpKLgpYAg4KSt4KSP4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wbHVnZ2VkX2luIiBtc2dpZD0iODA1Nzc2MjgyODM1NTU3MjMxNSI+IuCkmuCkvuCksOCljeCknCDgpLngpYHgpIHgpKbgpYgsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiLgpJrgpL7gpLDgpY3gpJwg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9iYXR0ZXJ5X3Nob3J0IiBtc2dpZD0iNDQ3NzI2NDg0OTM4Njg1MDI2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2xvd19iYXR0ZXJ5IiBtc2dpZD0iMTQ4Mjg3Mzk4MTkxOTI0OTc0MCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpJrgpL7gpLDgpY3gpJzgpLAg4KSc4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpK7gpL4gU0lNIOCkleCkvuCksOCljeCkoSDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4i4KSr4KWL4KSo4KSu4KS+IFNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4iU0lNIOCkleCkvuCksOCljeCkoSDgpJjgpYHgpLjgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSoIOCkteCkviDgpKrgpKLgpY3gpKgg4KSu4KS/4KSy4KWN4KSm4KWI4KSo4KWkIFNJTSDgpJXgpL7gpLDgpY3gpKEg4KS54KS+4KSy4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4i4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpK/gpYvgpJfgpY3gpK8gU0lNIOCkleCkvuCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsgU0lNIOCkleCkvuCksOCljeCkoSDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkheCkleCljeCkt+CkriDgpK3gpK/gpYvgpaRcbiDgpIXgpLDgpY3gpJXgpYsgU0lNIOCkleCkvuCksOCljeCkoeCkleCliyDgpLLgpL7gpJfgpL8g4KSG4KSr4KSo4KWLIOCkpOCkvuCksOCksOCkueCkv+CkpCDgpLjgpYfgpLXgpL4g4KSq4KWN4KSw4KSm4KS+4KSv4KSV4KS44KSB4KSXIOCkuOCkruCljeCkquCksOCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjAxNTk0OTA1MTUyNzQ2ODg2Ij4i4KSF4KSY4KS/4KSy4KWN4KSy4KWLIOCkn+CljeCksOCkr+CkvuCklSDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjA4OTI5NzY1MDQ4MTI5MjM2MyI+IuCkheCksOCljeCkleCliyDgpJ/gpY3gpLDgpK/gpL7gpJUg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU5MDg4Nzg2NzgwMTI4MDAxIj4i4KSw4KWL4KSV4KWN4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI1ODg4NDIyOTM4MzUxMDE5NDI2Ij4i4KSs4KSc4KS+4KSJ4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTYyMzE4Mzc4NzY2OTg3NjAxIj4i4KSs4KSf4KSoIOCksOCli+CkleCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsc19vbmx5IiBtc2dpZD0iNjczMzk3ODMwNDM4NjM2NTQwNyI+IuCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpJXgpLLgpLngpLDgpYIg4KSu4KS+4KSk4KWN4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMTQzMzg5MjI0OTg2MDI4NTAxIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCksuCklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4iU0lNIOCkleCkvuCksOCljeCkoSBQVUst4KSy4KSVIOCkl+CksOCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSo4KS/4KSw4KWN4KSm4KWH4KS24KSVIOCkteCkviDgpJfgpY3gpLDgpL7gpLngpJUg4KS44KWH4KS14KS+IOCkuOCkruCljeCkquCksOCljeCklSDgpLngpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCksuCklSDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4iU0lNIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpLLgpJUg4KSX4KSw4KS/4KSB4KSm4KWILi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2NDgxNjIzODMwMzQ0MTA3MjIyIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpLLgpJUg4KSi4KS+4KSB4KSa4KS+IOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkluCkv+CkmuCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSIyNzI1OTczMjg2MjM5MzQ0NTU1Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkquCkvuCkuOCkteCksOCljeCkoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJbgpL/gpJrgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCDgpKrgpJvgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSl4KSqIOCkheCkuOCkq+CksiDgpJXgpYvgpLjgpL/gpLjgpLngpLDgpYIsIOCkpOCkquCkvuCkiOCkgeCkleCliyBHb29nbGUg4KS44KS+4KSH4KSoIOCkh+CkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWAIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpK3gpKjgpL/gpKjgpYcg4KSb4KWkXG5cbiAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL7gpLLgpL7gpIgg4KSV4KWL4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQg4KSq4KSb4KS/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkheCksOClgiDgpKfgpYfgpLDgpYgg4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClguCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKggR29vZ2xlIOCkuOCkvuCkh+CkqCDgpIfgpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CksCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxMjgxMDYzOTk3NDU3NTU2MDQiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkleCli+CktuCkv+CkuCDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpYsg4KSb4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkheCksOClgiDgpKfgpYfgpLDgpYgg4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClguCkquCkm+Ckvywg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkq+CljeCkr+CkvuCkn+CljeCksOCkvyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkueClgeCkqOClhyDgpJsg4KSwIOCkuOCkrOCliCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSh4KWH4KSf4KS+IOCkueCksOCkvuCkieCkqOClhyDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSr4KWL4KSoIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKzgpKLgpYAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkpOCljeCkqOCkueCksOClgiDgpKrgpJvgpL8sIOCkq+Cli+CkqCDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpLngpYHgpKjgpYcg4KSbIOCksCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjgwODczNTE2NDkzOTM0MzY1Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkn+CljeCkr+CkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQg4KSF4KSsIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpKvgpYvgpKggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJfgpLDgpY3gpKjgpYHgpK3gpK/gpYvgpaQg4KSF4KSsIOCkq+Cli+CkqCDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjI1MTQ4MDM0MzM5NDM4OTY2NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+IuCkouCkvuCkgeCkmuCkviDgpKzgpL/gpLDgpY3gpLjgpKjgpYEg4KSt4KSv4KWLPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+IuCkluCkvuCkpOCkviDgpIXgpKjgpLLgpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiLgpKjgpL/gpJXgpYgg4KSn4KWH4KSw4KWIIOCkleCli+CkuOCkv+CkuOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIEdvb2dsZSDgpJbgpL7gpKTgpL7gpLjgpIHgpJcg4KS44KS+4KSH4KSoIOCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iODg0Njg4MTQyNDEwNjQ4NDQ0NyI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkqOCkvuCkriAo4KSH4KSu4KWH4KSyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI1OTU4MDI4MzgzOTU0NzM4NTI4Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4i4KS44KS+4KSH4KSoIOCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iMTM2NDA1MTQ3MzM0NzQ4NTkwOCI+IuCkheCkruCkvuCkqOCljeCkryDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpKjgpL7gpK4g4KS14KS+IOCkquCkvuCkuOCkteCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkv+CksOCljeCkuOCkqOClgeCkreCkr+Cliz9cbiDgpK3gpY3gpLDgpK7gpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS4IjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iNzExNDYyNzM1MTI4NjkzMzg2NyI+IuCknOCkvuCkgeCkmiDgpJfgpLDgpY3gpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+IuCkluCli+CksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4i4KSG4KS14KS+4KScIOCkmuCkvuCksuClgSDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29mZl9sYWJlbCIgbXNnaWQ9Ijk5NjgyMjgyNTE1NDMxOTAyNiI+IuCkp+CljeCkteCkqOCkvyDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX3N0YXJ0IiBtc2dpZD0iMzk0MTA0NTUwMjkzMzE0Mjg0NyI+IuCkouCkvuCkgeCkmuCkviDgpLjgpYHgpLDgpYEg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+IuCkouCkvuCkgeCkmuCkviDgpLngpJ/gpL7gpIfgpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NlbGxfYWRkZWQiIG1zZ2lkPSI2NzU2MDMxMjA4MzU5MjkyNDg3Ij4i4KS44KWH4KSyIOCkpeCkqiDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2RldGVjdGVkIiBtc2dpZD0iNDk4ODczMDg5NTU1NDA1NzA1OCI+IuCkouCkvuCkgeCkmuCkviDgpKrgpYHgpLDgpL4g4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDgpLXgpL/gpJzgpYfgpJ8gJTIkZCBvZiAlMyRk4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuCkteCkv+CknOClh+CknyDgpKXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLgpJbgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KS14KS/4KS44KWN4KSk4KS+4KSwIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSt4KSk4KWN4KSV4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4KS14KS/4KSc4KWH4KSf4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJvgpKjgpYzgpJ/gpJXgpLDgpY3gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLgpLjgpY3gpKXgpL/gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i4KSu4KS/4KSh4KS/4KSv4KS+IOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCko+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i4KS14KS/4KSc4KWH4KSfIOCkquClgeCkqOCkg+CkleCljeCksOCkriDgpJfgpLDgpY3gpKjgpYcg4KS44KWB4KSw4KWBIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IuCkteCkv+CknOClh+CknyDgpKrgpYHgpKjgpIPgpJXgpY3gpLDgpK4g4KS44KSu4KS+4KSq4KWN4KSkIOCkreCkj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IuCkteCkv+CknOClh+CknyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgpK7gpYfgpJ/gpL7gpIfgpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLgpIXgpKjgpLLgpJUg4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IuCkuOCljeCksuCkvuCkh+CkoSDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IuCkouCkvuCkgeCkmuCkviDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuCkq+Clh+CkuCDgpIXgpKjgpLLgpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUGluIOCkheCkqOCksuCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IuCkquCkvuCkuOCkteCksOCljeCkoSDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLgpKLgpL7gpIHgpJrgpL4g4KSV4KWN4KS34KWH4KSk4KWN4KSw4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IuCkuOCljeCksuCkvuCkh+CkoSDgpJXgpY3gpLfgpYfgpKTgpY3gpLDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iP+Clp+ClqOClqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2NoYXJhY3RlciIgbXNnaWQ9IjczMzY0NzA1MzUzODUwMDk1MjMiPiLgpIXgpJXgpY3gpLfgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF93b3JkIiBtc2dpZD0iNzA3NTU3MDMyODM3NDkxODY2MCI+IuCktuCkrOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmsiIG1zZ2lkPSI1ODE1NTA4ODgwNzgyNDg4MjY3Ij4i4KSy4KS/4KSZ4KWN4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluZSIgbXNnaWQ9IjU3NjQyNjcyMzUwMjYxMjA4ODgiPiLgpLLgpL7gpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX2FtcG0iIG1zZ2lkPSI0NTg0MzM4MDgzNTI5MzU1OTgyIj4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JVA8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9jYXBfYW1wbSIgbXNnaWQ9IjIwODM0NjU5OTI5NDA0NDQzNjYiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4i4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+IOCkquCksOClgOCkleCljeCkt+CkoyDgpIXgpLjgpKvgpLIg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiJGQUNUT1JZX1RFU1Qg4KSV4KS+4KSw4KWN4KSw4KS14KS+4KSH4KSy4KWHIC9zeXN0ZW0vYXBwIOCkruCkviDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSq4KWN4KSv4KS+4KSV4KWH4KSc4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpL7gpKTgpY3gpLAg4KS44KSu4KSw4KWN4KSl4KSoIOCkl+CksOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+IuCkleClgeCkqOCliCDgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KSr4KWH4KSy4KS+IOCkquCkvuCksOCljeCkqCDgpLjgpJXgpL/gpI/gpKgg4KSc4KS44KSy4KWHIEZBQ1RPUllfVEVTVCDgpJXgpL7gpLDgpY3gpK8g4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiLgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTk4NzQ4Mzk3NzgzNDYwMzg3MiI+IuCkr+CkuCBcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+XCIg4KSu4KS+IOCkreCkj+CkleCliyDgpKrgpYPgpLfgpY3gpKDgpLLgpYcg4KSs4KSk4KS+4KSJ4KSB4KSbOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+IuCknOCkvuCkreCkvuCkuOCljeCkleCljeCksOCkv+CkquCljeCknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3RpdGxlIiBtc2dpZD0iMjYxOTM3NjU1NTUyNTExNjU5MyI+IuCkruCkvuCksOCljeCkl+CkqOCkv+CksOCljeCkpuClh+CktuCkqCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfcG9zaXRpdmVfYnV0dG9uIiBtc2dpZD0iMzExMjc1MjAxMDYwMDQ4NDEzMCI+IuCkr+CkuCDgpKrgpYPgpLfgpY3gpKDgpLLgpL7gpIgg4KSb4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfbmVnYXRpdmVfYnV0dG9uIiBtc2dpZD0iNTYxNDg2MTI5MzAyNjA5OTcxNSI+IuCkr+CkueClgCDgpKrgpYPgpLfgpY3gpKDgpK7gpL4g4KSw4KS54KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWQiIG1zZ2lkPSIzNDY4ODE2MzU3MDk1Mzc4NTkwIj4iPHhsaWZmOmcgaWQ9Ik1FU1NBR0UiPiVzPC94bGlmZjpnPlxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CliyDgpKrgpYfgpJzgpKzgpL7gpJ8g4KSo4KWH4KSt4KS/4KSX4KWH4KSfIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbIOCkreCkqOCljeCkqOClhyDgpKjgpL/gpLbgpY3gpJrgpKQg4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbGFiZWwiIG1zZ2lkPSI2ODYwMjYxNzU4NjY1ODI1MDY5Ij4i4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvdWJsZV90YXBfdG9hc3QiIG1zZ2lkPSI0NTk1MDQ2NTE1NDAwMjY4ODgxIj4i4KSc4KWB4KSV4KWN4KSk4KS/OiDgpJzgpYHgpK7gpLLgpL7gpIgg4KSg4KWC4KSy4KWLIOCksCDgpLjgpL7gpKjgpYsg4KSq4KS+4KSw4KWN4KSoIOCkpuClgeCkiCDgpKrgpJ/gpJUg4KS54KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+IuCkuOCljeCkteCkpOCkgyDgpK3gpLDgpY3gpKjgpYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXR1cF9hdXRvZmlsbCIgbXNnaWQ9IjcxMDM0OTUwNzAxODA1OTA4MTQiPiLgpIXgpJ/gpYvgpKvgpL/gpLIg4KS44KWH4KSf4KSF4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3NfbmFtZV9zZXBhcmF0b3IiIG1zZ2lkPSI2MzUwMTQ1MTU0Nzc5NzA2NzcyIj4iICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9uYW1lX2Zvcm1hdCIgbXNnaWQ9IjMyNjgwNDEwNTQ4OTkyMTQ5NDUiPiIk4KWnJOClqCTgpakiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfc2VwYXJhdG9yIiBtc2dpZD0iNzQ4MzMwNzg5MzE3MDMyNDEyOSI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X2Zvcm1hdCIgbXNnaWQ9IjQ4NzQ0NTk0NTU3ODY4MjczNDQiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcm92aW5jZSIgbXNnaWQ9IjIyMzE4MDY1NTM4NjM0MjIzMDAiPiLgpKrgpY3gpLDgpL7gpKjgpY3gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wb3N0YWxfY29kZSIgbXNnaWQ9IjQ2OTY0MzA0MDc2ODkzNzcxMDgiPiLgpLngpYHgpLLgpL7gpJXgpYAg4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfc3RhdGUiIG1zZ2lkPSI2OTg4ODk0MTk1NTIwMDQ0NjEzIj4i4KSw4KS+4KSc4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfemlwX2NvZGUiIG1zZ2lkPSI4Njk3NTQ0NTkyNjI3MzIyOTQ2Ij4iWklQIOCkleCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2NvdW50eSIgbXNnaWQ9IjIzNzA3Mzc3MTAyMDM2Mjg5MSI+IuCkleCkvuCkieCkqOCljeCkn+ClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiLgpJ/gpL7gpKrgpYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kaXN0cmljdCIgbXNnaWQ9Ijg0MDA3MzUwNzMzOTIyNjc2NzIiPiLgpJzgpL/gpLLgpY3gpLLgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kZXBhcnRtZW50IiBtc2dpZD0iNTM0MzI3OTQ2MjU2NDQ1MzMwOSI+IuCkteCkv+CkreCkvuCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ByZWZlY3R1cmUiIG1zZ2lkPSIyMDI4NDk5NDg1MDY1ODAwNDE5Ij4i4KSq4KWN4KSw4KS24KS+4KS44KSV4KWA4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3BhcmlzaCIgbXNnaWQ9IjgyMDIyMDYxMDU0Njg4MjAwNTciPiLgpKrgpYfgpLDgpL/gpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+IuCkleCljeCkt+Clh+CkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2VtaXJhdGUiIG1zZ2lkPSIyODkzODgwOTc4ODM1Njk4ODE4Ij4i4KSH4KSu4KS/4KSw4KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3NzUyNjU3NzU0MDUxMDY5ODMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpIfgpKTgpL/gpLngpL7gpLgg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4i4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSy4KWHIOCkreCljeCksOCkruCkoyDgpJfgpLDgpYfgpJXgpYsg4KS44KSs4KWIIFVSTCDgpLngpLDgpYLgpJXgpYsg4KSH4KSk4KS/4KS54KS+4KS4IOCksCDgpKzgpY3gpLDgpL7gpIngpJzgpLDgpJXgpL4g4KS44KSs4KWIIOCkrOClgeCkleCkruCkvuCksOCljeCkleCkueCksOClgiDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkqOCli+Cknzog4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuCkvuCkiCDgpKTgpYfgpLjgpY3gpLDgpYsg4KSq4KSV4KWN4KS3IOCkrOCljeCksOCkvuCkieCknOCksOCkueCksOClguCkpuCljeCkteCkvuCksOCkviDgpLXgpL4g4KS14KWH4KSsIOCkrOCljeCksOCkvuCkieCknCDgpJfgpLDgpY3gpKjgpYcg4KSV4KWN4KS34KSu4KSk4KS+4KSm4KWN4KS14KS+4KSw4KS+IOCkrOCksuCkquClguCksOCljeCkteCklSDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KS/4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzE0Nzg1MTY1MjczMzE0NDkwIj4i4KS14KWH4KSsIOCkrOClgeCkleCkruCkvuCksOCljeCkleCkueCksOClgiDgpLAg4KSH4KSk4KS/4KS54KS+4KS4IOCksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkreCko+CljeCkoeCkvuCksCDgpJfgpLDgpL/gpI/gpJXgpYsg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSV4KWLIOCkh+CkpOCkv+CkueCkvuCkuCDgpLXgpL4g4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkrOCljeCksOCkvuCknOCksCDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KS+4KSJ4KSoIOCkteCkviDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KS44KSV4KWN4KSm4KSb4KWkIOCkn+Ckv+CkquCljeCkquCko+ClgDog4KSv4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KScIOCkl+CksOCljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KS44KS+4KSlIOCkpOClh+CkuOCljeCksOCliy3gpKrgpL7gpLDgpY3gpJ/gpYAg4KSs4KWN4KSw4KS+4KSJ4KSc4KSwIOCkteCkviDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+IOCksuCkvuCkl+ClgiDgpJfgpLDgpL/gpI/gpJXgpYsg4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ5NzM4OTUzMTAxNDE4NTUwOSI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKjgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkreCkj+CkleCliyDgpKzgpY3gpLDgpL7gpIngpJzgpLDgpJXgpYsg4KSH4KSk4KS/4KS54KS+4KS4IOCkteCkviDgpKzgpYHgpJXgpK7gpL7gpLDgpY3gpJXgpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkuOCkvuCkr+CkpiDgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkruClh+Ckn+CljeCkqCDgpLXgpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSo4KWL4KSfOiDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KScIOCkl+CksOCljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL7gpLjgpLngpL/gpKTgpJXgpL4g4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLXgpL4g4KSk4KWH4KS44KWN4KSw4KWLLSDgpKrgpJXgpY3gpLcg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSm4KWN4KS14KS+4KSw4KS+IOCkuOCkvuCkr+CkpiDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KS+4KSIIOCksuCkvuCkl+ClgSDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSC4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiLgpI/gpIngpJ/gpL4g4KSG4KSy4KSw4KWN4KSuIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+IuCkuOCljeCkpeCkvuCkquCkqOCkviDgpJfgpLDgpL/gpI/gpJXgpYsg4KS44KSZ4KWN4KSV4KWH4KSkIOCkmOCkoeClgCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KS44KSZ4KWN4KSV4KWH4KSkIOCkuOCkruCkryDgpK7gpL/gpLLgpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSV4KWH4KS54KWAIOCkuOCkmeCljeCkleClh+CkpCDgpJjgpKHgpYAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpLjgpYHgpLXgpL/gpKfgpL4g4KSV4KS+4KSw4KWN4KSv4KS+4KSo4KWN4KS14KSv4KSoIOCkqOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiLgpK3gpY3gpLXgpL7gpIfgpLjgpK7gpYfgpLIg4KSl4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSt4KWN4KS14KS+4KSH4KS44KSu4KWH4KSyIOCkh+CkqOCkrOCkleCljeCkuOCkruCkviDgpLjgpKjgpY3gpKbgpYfgpLYg4KSl4KSq4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iNTk2MjIyNDE1ODk1NTI3MzkzMiI+IuCkreClguCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpK7gpKTgpL/gpLngpLDgpYIg4KSs4KWN4KSw4KS+4KSJ4KSc4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSIxMDgzNzQzMjM0NTIyNjM4NzQ3Ij4i4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSV4KWLIOCkreClgi3gpLjgpY3gpKXgpL7gpKgg4KSF4KSo4KWB4KSu4KSk4KS/4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyAg4KS44KWN4KSl4KS+4KSoIOCkuOClguCkmuCkqOCkviDgpK7gpKjgpKrgpLDgpYAg4KS14KWH4KSsIOCkuOCkvuCkh+Ckn+CkueCksOClguCkruCkviDgpKrgpKDgpL7gpIngpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpLjgpLLgpL7gpIgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9IjU1NjgxMzkxMDA2NDU4MjkxMTciPiLgpKrgpY3gpK/gpJXgpYfgpJzgpLngpLDgpYLgpJXgpYsg4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9Ijg0Mzc1OTAxOTA5OTA4NDMzODEiPiLgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkr+Cli+Ckl+CljeCkryDgpJsg4KSV4KS/IOCkreCkqOClh+CksCDgpLDgpYHgpJzgpYEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iNDE4Nzc4Njc5MzM2MDMyNjY1NCI+IuCkj+CkieCkn+CkviDgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KSw4KWB4KSc4KWB4KSV4KSw4KWN4KSk4KS+4KSu4KS+IOCkrOCkvuCkgeCkp+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4i4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkquCljeCkr+CkvuCkleClh+CknCDgpKrgpY3gpLDgpK7gpL7gpKPgpL/gpKTgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSF4KSo4KWB4KSw4KWL4KSn4KS54KSw4KWCIOCkrOCkqOCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VyaWFsUG9ydCIgbXNnaWQ9IjU0NjA4MzMyNzY1NDYzMTA3NiI+IuCkquCkueClgeCkgeCkmiDgpLjgpL/gpLDgpL/gpK/gpLIg4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiLgpLngpYvgpLLgpY3gpKHgpLDgpLLgpL7gpIggU2VyaWFsTWFuYWdlciBBUEkg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CksCDgpLjgpL/gpLDgpL/gpK/gpLIg4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI1MDc3Nzc0Mjk3OTQzNDA5Mjg1Ij4i4KS14KS/4KS34KSv4KS44KWC4KSa4KWAIOCkquCljeCksOCkpuCkvuCkpOCkvuCksuCkvuCkiCDgpKzgpL7gpLngpY3gpK8g4KSw4KWC4KSq4KSu4KS+IOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiLgpLjgpYfgpLLgpKzgpL7gpJ8g4KSn4KS+4KSw4KSV4KSy4KWHIOCkteCkv+Ckt+Ckr+CkteCkuOCljeCkpOClgSDgpKrgpY3gpLDgpKbgpL7gpK/gpJXgpLngpLDgpYLgpLjgpK7gpY3gpK7gpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkquCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKbgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4i4KS44KWN4KS14KSa4KS+4KSy4KS/4KSkIOCkieCkquCkleCksOCkoyDgpIXgpKrgpKHgpYfgpJ/gpLngpLDgpYIg4KS54KSk4KWL4KSk4KWN4KS44KS+4KS54KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUxvY2siIG1zZ2lkPSIxNjU1NjI1ODMyMTY2Nzc4NDkyIj4i4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkieCkquCkleCksOCkoyDgpIXgpKrgpJfgpY3gpLDgpYfgpKEg4KSX4KSw4KWN4KSoIOCkl+CliOCksCDgpKrgpL7gpLDgpLjgpY3gpKrgpLDgpL/gpJUg4KSq4KWB4KSo4KSD4KSs4KWB4KSf4KSV4KWLIOCksuCkvuCkl+CkvyDgpIngpJrgpL/gpKQg4KS44KSu4KSv4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpK7gpL4g4KSc4KS+4KSo4KS+4KSV4KS+4KSw4KWAIOCkquCljeCksOCkuOCljeCkpOCkvuCkteCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbWVzc2FnZSIgbXNnaWQ9Ijc2NzM0NDY4NzEzOTE5NTc5MCI+IuCkleClhyDgpKTgpKrgpL7gpIjgpIIg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSy4KWHIOCkr+CliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KS44KSu4KWN4KSd4KWH4KSV4KWLIOCkmuCkvuCkueCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25vdG5vdyIgbXNnaWQ9IjYzODk2NzUzMTY3MDY2OTk3NTgiPiLgpIXgpLngpL/gpLLgpYcg4KS54KWL4KSH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiLgpLjgpK7gpY3gpJ3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25ldmVyIiBtc2dpZD0iODI3NDMzMDI5Njc4NTg1NTEwNSI+IuCkleCkueCkv+CksuCljeCkr+CliCDgpKrgpKjgpL8g4KS54KWL4KSH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4i4KSv4KWLIOCkquClg+Ckt+CljeCkoCDgpJbgpYvgpLLgpY3gpKgg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0X2NvcGllZCIgbXNnaWQ9IjQ5ODU3Mjk1MjQ2NzAxMzEzODUiPiLgpJXgpY3gpLLgpL/gpKrgpKzgpYvgpLDgpY3gpKHgpK7gpL4g4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSqIOCkl+CksOCkv+Ckj+CkleCliyDgpKrgpL7gpKDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb3JlX2l0ZW1fbGFiZWwiIG1zZ2lkPSI0NjUwOTE4OTIzMDgzMzIwNDk1Ij4i4KSs4KSi4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcGVuZF9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI1NzIyMTQ0NjE2NzYwMTU2NDIiPiLgpK7gpYfgpKjgpYErIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiLgpKDgpL7gpIngpIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2VudGVyX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjc0MzM2Mjc4NTExMTMwOTY2OCI+IuCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiLgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2hfZ28iIG1zZ2lkPSI4Mjk4MDE2NjY5ODIyMTQxNzE5Ij4i4KSW4KWL4KSc4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zZWFyY2giIG1zZ2lkPSI2NzQ5ODI2NjM5MDk4NTEyMTIwIj4i4KSW4KWL4KSc4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9xdWVyeSIgbXNnaWQ9IjU5MTE3Nzg1OTMxMjUzNTUxMjQiPiLgpJzgpL/gpJzgpY3gpJ7gpL7gpLjgpL4g4KSW4KWL4KScIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4i4KSq4KWN4KSw4KS24KWN4oCN4KSoIOCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc3VibWl0IiBtc2dpZD0iMjY4ODQ1MDEzMzI5Nzk4MzU0MiI+IuCknOCkv+CknOCljeCknuCkvuCkuOCkviDgpKrgpYfgpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl92b2ljZSIgbXNnaWQ9IjI0NTMyMDM2OTU2NzQ5OTQ0NDAiPiLgpK3gpY3gpLXgpL7gpIfgpLgg4KSW4KWL4KSc4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ190aXRsZSIgbXNnaWQ9Ijc0NjA2OTQwNzAzMDk3MzAxNDkiPiLgpJvgpYvgpI/gpLAg4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkl+CksOCljeCkqOClhyDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPuCksuClhyDgpLjgpY3gpKrgpLDgpY3gpLfgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWN4KSb4KWkIOCkuOCljeCkquCksOCljeCkt+CkpuCljeCkteCkvuCksOCkviDgpIXgpKjgpY3gpLXgpYfgpLfgpKMg4KS44KSV4KWN4KS34KSuIOCkreCkj+CkleCliyDgpKzgpYfgpLLgpL4sIOCkpOCkquCkvuCkiOCkgSDgpIbgpKvgpY3gpKjgpYsg4KSU4KSB4KSy4KS+4KSV4KWLIOCkruClgeCkqOCkvyDgpK3gpI/gpJXgpL4g4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpLjgpYHgpKjgpY3gpKgg4KS14KS+IOCkteCkv+CkteCksOCkoyDgpLngpYfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkteCkviDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLjgpIHgpJcg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIfgpLbgpL7gpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjcwODE5OTY3Mjg1MjM3MzE5NSI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz7gpLLgpYcg4KS44KWN4KSq4KSw4KWN4KS34KSm4KWN4KS14KS+4KSw4KS+IOCkheCkqOCljeCkteClh+Ckt+CkoyDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOCljeCkm+ClpCDgpLjgpY3gpKrgpLDgpY3gpLfgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkuOCkleCljeCkt+CkriDgpK3gpI/gpJXgpYsg4KSs4KWH4KSy4KS+IOCkpOCkquCkvuCkiOCkgSDgpIbgpKvgpY3gpKjgpYsg4KSU4KSB4KSy4KS+4KSV4KWLIOCkruClgeCkqOCkvyDgpK3gpI/gpJXgpL4g4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpLjgpYHgpKjgpY3gpKgg4KS14KS+IOCkteCkv+CkteCksOCkoyDgpLngpYfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkteCkviDgpKvgpYvgpKjgpLjgpIHgpJcg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIfgpLbgpL7gpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4i4KWnIOCkruCkueCkv+CkqOCkviDgpIXgpJjgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IuClpyDgpK7gpLngpL/gpKjgpL4g4KSF4KSY4KS/Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJudW1fc2Vjb25kc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0ODY5ODcwMDU2NTQ3ODk2MDExIj4i4KWnIOCkuOClh+CkleClh+CkqOCljeCkoSDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM5MDM3MDY4MDQzNDk1NTYzNzkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKEg4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJudW1fbWludXRlc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMzA2Nzg3NDMzMDg4ODEwMTkxIj4i4KWnIOCkruCkv+CkqOClh+CknyDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIxNzY5NDIwMDg5MTU0NTUxMTYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL/gpKjgpYfgpJ8g4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJudW1faG91cnNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iOTE1MDc5Nzk0NDYxMDgyMTg0OSI+IuClpyDgpJjgpKjgpY3gpJ/gpL4g4KSF4KSY4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDY3MjczMjM5NTg3NTg3NTY5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSY4KSo4KWN4KSf4KS+IOCkheCkmOCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibGFzdF9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzA2OTk5MjgwODE2NDMxODI2OCI+IuCkheCkqOCljeCkpOCkv+CkriA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpKbgpL/gpKgiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJsYXN0X21vbnRoIiBtc2dpZD0iMzk1OTM0NjczOTk3OTA1NTQzMiI+IuCkheCkqOCljeCkpOCkv+CkriDgpK7gpLngpL/gpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRlciIgbXNnaWQ9IjUyMTE5NzUwMjI4MTU1NTQ4NDAiPiLgpKrgpYHgpLDgpL7gpKjgpYsiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9kYXlzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg2MTM1ODUzNDM5ODExNTgyMCI+IuCkueCkv+CknOCliyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ3OTU4NjQ2NjE1MzMxNDYzMyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkpuCkv+CkqCDgpIXgpJjgpL8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9zZWNvbmRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjcyOTc0NTU2MDk1NDkwNTEwMiI+IuClpyDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEyNDE5MjYxMTY0NDM5NzQ2ODciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+IuClpyDgpK7gpL/gpKjgpYfgpJ/gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMzMzA3MTM5MzYzOTk0NDg3NDkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPuCkruCkv+CkqOClh+Ckn+CkruCkviI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNzE2NDM1MzM0MjQ3Nzc2OTk5OSI+IuClpyDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzI5MDY3NzM1MzcyNzM4OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkmOCkqOCljeCkn+CkvuCkruCkviI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NDEzMDg4NzQzMDA5ODM5NTE4Ij4i4KSt4KWL4KSy4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1MTA5NDQ5Mzc1MTAwOTUzMjQ3Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSm4KS/4KSo4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX3NlY29uZHNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTg0OTAzNjg0MDIwMDA2OTExOCI+IuClpyDgpLjgpYfgpJXgpYfgpKjgpY3gpKEg4KSF4KSY4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNjk5MTY5MzY2NjUwOTMwNDE1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KShIOCkheCkl+CkvuCkoeCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9taW51dGVzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjYzNjE0OTAxNDcxMTM4NzE1NDUiPiLgpacg4KSu4KS/4KSo4KWH4KSfIOCkheCkmOCkvyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODUxMTY0OTY4NTk3MTUwNzEwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSu4KS/4KSo4KWH4KSfIOCkheCkmOCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9ob3Vyc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0Nzk2MjEyMDM5NzI0NzIyMTE2Ij4i4KWnIOCkmOCkqOCljeCkn+CkviDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY4ODk5NzA3NDU3NDg1Mzg5MDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL4g4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2RheXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODQ2MzE2MTcxMTQ5MjY4MDMwOSI+IuCkueCkv+CknOCliyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzQ1MzM0MjYzOTYxNjQ4MTE5MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkpuCkv+CkqCDgpIXgpJjgpL8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NDIyMjUzNzA3OTUwNjYyOTkiPiLgpacg4KS44KWH4KSV4KSo4KWN4KShIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDk1ODgwMTA4ODI1ODA1MTA4Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NjI3ODYxNDk5MjgyODQ4NzgiPiLgpacg4KSu4KS/4KSo4KWH4KSf4KSu4KS+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MjE2MTEzMjkyNzA2NTY4NzI2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSu4KS/4KSo4KWH4KSf4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI3NDcwODExODEyNDA0NTI0NiI+IuClpyDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM3MDUzNzM3NjY3OTgwMTM0MDYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjIxNzg1NzYyNTQzODU3Mzk4NTUiPiLgpK3gpYvgpLLgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI5NzMwNjI5NjgwMzgzNTU5OTEiPiLgpKbgpL/gpKg8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfZGF0ZSIgbXNnaWQ9IjkwOTM5NDk3NTc3NTc0NDUxMTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JXM8L3hsaWZmOmc+IOCkruCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl90aW1lIiBtc2dpZD0iNTUwNjgzMTI0NDI2MzA4Mzc5MyI+Ijx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4g4KSu4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3llYXIiIG1zZ2lkPSI1MDQwMzk1NjQwNzExODY3MTc3Ij4iPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiDgpK7gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXkiIG1zZ2lkPSI4MTQ0MTk1Nzc2MDU4MTE5NDI0Ij4i4KSm4KS/4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5cyIgbXNnaWQ9IjQ3NzQ1NDc2NjEwMjEzNDQ2MDIiPiLgpKbgpL/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyIiBtc2dpZD0iMjEyNjc3MTkxNjQyNjE4OTQ4MSI+IuCkmOCkqOCljeCkn+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJzIiBtc2dpZD0iODk0NDI0MDA1MjY2ODUyOTkzIj4i4KSY4KSo4KWN4KSf4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlIiBtc2dpZD0iOTE0ODg3ODY1NzcwMzc2OTg2OCI+IuCkruCkv+CkqOClh+CknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZXMiIG1zZ2lkPSI1NjQ2MDAxMDA1ODI3MDM0NTA5Ij4i4KSu4KS/4KSo4KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kIiBtc2dpZD0iMzE4NDIzNTgwODAyMTQ3OCI+IuCkuOClh+CkleClh+CkqOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlY29uZHMiIG1zZ2lkPSIzMTYxNTE1MzQ3MjE2NTg5MjM1Ij4i4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiLgpLngpKrgpY3gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiLgpLngpKrgpY3gpKTgpL7gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyIiBtc2dpZD0iNDAwMTExODIyMTAxMzg5MjA3NiI+IuCkteCksOCljeCktyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJzIiBtc2dpZD0iNjg4MTU3NzcxNzk5MzIxMzUyMiI+IuCkteCksOCljeCkt+CkueCksOClgiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY5NjIwMTU1MjgzNzI5Njk0ODEiPiLgpacg4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxODg2MTA3NzY2NTc3MTY2Nzg2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJkdXJhdGlvbl9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDkxNTQxNDAwMjU0NjA4NTYxNyI+IuClpyDgpK7gpL/gpKjgpYfgpJ8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMxNjUxODcxNjkyMjQ5MDg3NzUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL/gpKjgpYfgpJ8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODkxNzQ2NzQ5MTI0ODgwOTk3MiI+IuClpyDgpJjgpKjgpY3gpJ/gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM4NjM5NjI4NTQyNDY3NzM5MzAiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGl0bGUiIG1zZ2lkPSIzNTM0NTA5MTM1NDM4MzUzMDc3Ij4i4KSt4KS/4KSh4KS/4KSv4KWLIOCkuOCkruCkuOCljeCkr+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X2ludmFsaWRfcHJvZ3Jlc3NpdmVfcGxheWJhY2siIG1zZ2lkPSIzMTg2NjcwMzM1OTM4NjcwNDQ0Ij4i4KSv4KWLIOCkreCkv+CkoeCkv+Ckr+CliyDgpK/gpLgg4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpY3gpJ/gpY3gpLDgpL/gpK7gpL/gpJkg4KSX4KSw4KWN4KSoIOCkruCkvuCkqOCljeCkryDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF91bmtub3duIiBtc2dpZD0iMzQ1MDQzOTE1NTE4NzgxMDA4NSI+IuCkr+CliyDgpK3gpL/gpKHgpL/gpK/gpYsg4KSa4KSy4KS+4KSJ4KSoIOCkuOCkleCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iIG1zZ2lkPSIyODIyMjM4MjE1MTAwNjc5NTkyIj4i4KSg4KWA4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aXZlX3RpbWUiIG1zZ2lkPSIxODE4NTU3MTc3ODI5NDExNDE3Ij4iPHhsaWZmOmcgaWQ9IkRBVEUiPiUxJHM8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub29uIiBtc2dpZD0iNzI0NTM1MzUyODgxODU4NzkwOCI+IuCkruCkp+CljeCkr+CkvuCkqOCljeCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Ik5vb24iIG1zZ2lkPSIzMzQyMTI3NzQ1MjMwMDEzMTI3Ij4i4KSu4KSn4KWN4KSv4KS+4KSo4KWN4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWlkbmlnaHQiIG1zZ2lkPSI3MTY2MjU5NTA4ODUwNDU3NTk1Ij4i4KSu4KSn4KWN4KSv4KSw4KS+4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTWlkbmlnaHQiIG1zZ2lkPSI1NjMwODA2OTA2ODk3ODkyMjAxIj4i4KSu4KSn4KWN4KSv4KSw4KS+4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9tbV9zcyIgbXNnaWQ9IjQ0MzE1NTU5NDM4Mjg3MTE0NzMiPiI8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTEkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTIkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfaF9tbV9zcyIgbXNnaWQ9IjE4NDYwNzE5OTc2MTY2NTQxMjQiPiI8eGxpZmY6ZyBpZD0iSE9VUlMiPiUxJGQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMiQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMyQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0QWxsIiBtc2dpZD0iNjg3NjUxODkyNTg0NDEyOTMzMSI+IuCkuOCkrOCliOCksuCkvuCkiCDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCkleCkvuCkn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSq4KS/IOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCkn+CkvuCkgeCkuOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4KS14KS/4KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgpJXgpYsg4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuCkquCkvuCkoCDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuCkquCkvuCkoCDgpJrgpK/gpKjgpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4KS24KSs4KWN4KSm4KSV4KWL4KS24KSu4KS+IOCkpeCkquCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRNZXRob2QiIG1zZ2lkPSIxNjUzNjMwMDYyMzA0NTY3ODc5Ij4i4KSo4KS/4KS14KWH4KS2IOCkteCkv+Ckp+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+IuCkquCkvuCkoCDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RpdGxlIiBtc2dpZD0iNTU3NjI3MjQ5NjM2NTY4NDgzNCI+IuCkreCko+CljeCkoeCkvuCksOCkoyDgpKDgpL7gpIngpIEg4KS44KSV4KS/4KSB4KSm4KWIIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGV4dCIgbXNnaWQ9IjY2NDA1MDU4MTc2MTc0MTQzNzEiPiLgpLjgpL7gpK/gpKYg4KSV4KWH4KS54KWAIOCkquCljeCksOCko+CkvuCksuClgCDgpJXgpL7gpLDgpY3gpK/gpJXgpY3gpLDgpK7gpLngpLDgpYLgpLLgpYcg4KSV4KS+4KSuIOCkl+CksOCljeCkpuCliOCkqOCkqOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg3MTgzMzUxMjEwNjA3ODc5MTQiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkmuCksuCkv+CksOCkueClh+CkleCliyDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiLgpKXgpKog4KS44KWC4KSa4KSo4KS+4KSV4KWLIOCksuCkvuCkl+CkvyDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2siIG1zZ2lkPSI1OTcwMDYwNDMwNTYyNTI0OTEwIj4i4KSg4KS/4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVzIiBtc2dpZD0iNTM2Mjk4MjMwMzMzNzk2OTMxMiI+IuCkoOCkv+CklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJubyIgbXNnaWQ9IjUxNDE1MzEwNDQ5MzU1NDE0OTciPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlhbG9nX2FsZXJ0X3RpdGxlIiBtc2dpZD0iMjA0OTY1ODcwODYwOTA0MzEwMyI+IuCkuOCkvuCkteCkp+CkvuCkqOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvYWRpbmciIG1zZ2lkPSI3OTMzNjgxMjYwMjk2MDIxMTgwIj4i4KSy4KWL4KShIOCkueClgeCkgeCkpuCliC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb24iIG1zZ2lkPSIxNTQ0NjgyNzU1NTE0NDk0Mjk4Ij4i4KSa4KS+4KSy4KWBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vZmYiIG1zZ2lkPSI2ODE1ODcwMzg2OTcyODA1ODMyIj4i4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2hpY2hBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ1MzMxODU5NDcwNjQ3NzMzODYiPiLgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkleCkvuCksOCkrOCkvuCkueClgCDgpKrgpYHgpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IuCkr+CkuCDgpJXgpL7gpLDgpY3gpK/gpJXgpYsg4KSy4KS+4KSX4KS/IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWC4KSu4KS+IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCksuCkvuCkiCDgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0gJmd0OyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIgJmd0OyDgpKHgpL7gpIngpKjgpLLgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiLgpI/gpIngpJ/gpL4g4KSV4KS+4KSw4KWN4KSv4KSV4KWLIOCkmuCkr+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiJVU0Ig4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpI/gpIngpJ/gpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpJXgpL7gpLDgpY3gpK8g4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCliOCkqOCkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiLgpKbgpYHgpLDgpY3gpK3gpL7gpJfgpY3gpK/gpLXgpLYsIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz7gpLLgpYcg4KSw4KWL4KSV4KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiLgpKbgpYHgpLDgpY3gpK3gpL7gpJfgpY3gpK/gpLXgpLYsIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkviA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g4KSs4KSo4KWN4KSmIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl90aXRsZSIgbXNnaWQ9IjQzNTE5NDg0ODE0NTkxMzU3MDkiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X2FwcGxpY2F0aW9uIiBtc2dpZD0iMTkwNDQ3NzE4OTA1NzE5OTA2NiI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz7gpLLgpYcg4KSV4KS+4KSw4KWN4KSvIOCkl+CksOCkv+CksOCkueClh+CkleCliyDgpJvgpYjgpKjgpaRcblxu4KSV4KWHIOCkpOCkquCkvuCkiOCkgSDgpK/gpLjgpLLgpL7gpIgg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOCksuClhyDgpKrgpY3gpLDgpKTgpL/gpJXgpY3gpLDgpL/gpK/gpL4g4KSm4KWH4KSW4KS+4KSH4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSCIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgpJzgpLXgpL7gpKsg4KSm4KS/4KSH4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpCDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX3Byb2Nlc3MiIG1zZ2lkPSI2NTEzMjA5ODc0ODgwNTE3MTI1Ij4i4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPuCksuClhyDgpJXgpL7gpLDgpY3gpK8g4KSX4KSw4KS/4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfY2xvc2UiIG1zZ2lkPSI4MzQ2MDcyMDk0NTIxMjY1NjA1Ij4i4KSg4KS/4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcG9ydCIgbXNnaWQ9IjQwNjAyMTgyNjA5ODQ3OTU3MDYiPiLgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FpdCIgbXNnaWQ9IjcxNDcxMTgyMTcyMjYzMTc3MzIiPiLgpKrgpY3gpLDgpKTgpYDgpJXgpY3gpLfgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4i4KSq4KWD4KS34KWN4KSgIOCkl+CliOCksCDgpJzgpL/gpK7gpY3gpK7gpYfgpLXgpL7gpLDgpYAg4KSt4KSP4KSV4KWLIOCkm+ClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSCIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE1NDc5OTc3ODA1MDY3MTM1ODEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSq4KWB4KSo4KSDIOCkqOCkv+CksOCljeCkpuClh+CktuClgOCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3JlcGxhY2UiIG1zZ2lkPSI2MjAyNDk4OTQ5OTcwMjgxNDEyIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpIXgpLngpL/gpLLgpYcg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpLXgpL7gpLjgpY3gpKTgpLXgpL/gpJUg4KS44KWB4KSw4KWB4KS14KS+4KSkIOCkreCkj+CkleCliyDgpKXgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2NhbGUiIG1zZ2lkPSIzMjAyOTU1NjY3Njc1OTQ0NDk5Ij4i4KS44KWN4KSV4KWH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4i4KS44KSn4KWI4KSBIOCkpuClh+CkluCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IuCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpK7gpL4g4KSv4KS44KSy4KS+4KSIIOCkquClgeCkqOCkg+CkuOCkleCljeCkt+CkriDgpJfgpLDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0gJmd0OyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIgJmd0OyDgpKHgpL7gpIngpKjgpLLgpYvgpKEg4KSX4KSw4KWH4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+ICjgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSDgpLLgpYcg4KSv4KS44KSV4KWLIOCkuOCljeCkteCkr+Ckgi3gpLLgpL7gpJfgpYEg4KSX4KSw4KS/4KSP4KSV4KWLIOCkuOCljeCkn+CljeCksOCkv+Ckn+CkruCli+CkoSDgpKjgpYDgpKTgpL8g4KSJ4KSy4KSZ4KWN4KSY4KSoIOCkl+CksOClh+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IOCkr+CkuOCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KSV4KSh4KS+4KSu4KWL4KShIOCkqOClgOCkpOCkv+CkleCkviDgpJXgpL7gpLDgpKMg4KSJ4KSy4KWN4KSy4KSZ4KWN4KSY4KSoIOCkl+CksOCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ190aXRsZSIgbXNnaWQ9IjE1ODQxOTIyODU0NDE0MDU3NDYiPiLgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKEg4KSF4KSq4KSX4KWN4KSw4KWH4KShIOCkueClgeCkgeCkpuCliOCkm+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSF4KSo4KWB4KSV4KWB4KSyIOCkueClgeCkgeCkpuCliCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCkleCliyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IuCkuOClgeCksOClgeCkteCkvuCkpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19jb21wbGV0ZSIgbXNnaWQ9IjE0MDU5NTQ3NTQxMTI5OTkyMjkiPiLgpKzgpYHgpJ8g4KSq4KWB4KSw4KS+IOCkueClgeCkgeCkpuCliOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb24iIG1zZ2lkPSI5MDg3MDYzOTg1Nzc2NjI2MTY2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz4g4KSa4KSy4KS/4KSw4KS54KWH4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb25fZGV0YWlsIiBtc2dpZD0iMTcyMTY4MTc0MTYxNzg5ODg2NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpLjgpY3gpLXgpL/gpJog4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90aXRsZSIgbXNnaWQ9IjcxNTMxNjcwODU0MDMyOTgxNjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KS44KWN4KS14KS/4KSaIOCkl+CksOCljeCkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RleHQiIG1zZ2lkPSI3MDIyNjMxOTI0NTM0NDA2NDAzIj4i4KSF4KSw4KWN4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKrgpLngpL/gpLLgpYcg4KSo4KWIIOCkmuCkvuCksuClgSDgpJsg4KSc4KWB4KSoIOCkpOCkquCkvuCkiOCkguCksuClhyDgpI/gpIngpJ/gpL4g4KSo4KSv4KS+4KSBIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYEg4KSF4KSY4KS/IOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9hY3Rpb24iIG1zZ2lkPSI0OTMxMjkxNzIyMzg1NjYyODIiPiI8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4g4KSu4KS+IOCkq+CksOCljeCkleCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDgyMDk0Mjc1NTgwMzU4MDQ5Ij4i4KSo4KSv4KS+4KSBIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpYHgpLDgpYEg4KSo4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9hY3Rpb24iIG1zZ2lkPSI1NDcyNzU2OTI2OTQ1NDQwNzA2Ij4iPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+IOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IuCkrOCkmuCkpCDgpKjgpJfgpLDgpYAg4KSq4KWB4KSw4KS+4KSo4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZW5kVGV4dCIgbXNnaWQ9IjUyMDk4NzQ1NzE5NTk0NjkxNDIiPiLgpKrgpL7gpKDgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CkieCkn+CkviDgpKrgpY3gpLDgpJXgpL7gpLDgpY3gpK8g4KSb4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+IuCkrOCknOCkvuCkieCkqOClhyDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWMiIG1zZ2lkPSI1NDIxNjUxMTU3MTM4NjI4MTcxIj4i4KSu4KS/4KSh4KS/4KSv4KS+4KSV4KWLIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSl4KSV4KWLIOCkruCkvuCkp+CljeCkr+CkruCkpuCljeCkteCkvuCksOCkviDgpKzgpJzgpL7gpIfgpKbgpYgg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+IuCktuCkvuCkqOCljeCkpCDgpLDgpL/gpJngpY3gpJfgpJ/gpYvgpKgg4KS44KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2NhbGwiIG1zZ2lkPSIzOTQxNjgwMDQxMjgyNzg4NzExIj4i4KSH4KSoLeCkleCksiDgpK3gpYvgpLLgpY3gpK/gpYHgpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYmx1ZXRvb3RoX2NhbGwiIG1zZ2lkPSIyMDAyODkxOTI2MzUxMTUxNTM0Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkreCkv+CkpOCljeCksOClgC3gpJXgpLIg4KSu4KS+4KSk4KWN4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IuCkhuCksuCksOCljeCkriDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMjQyMjI2NTY1Njc0NDI3NjcxNSI+IuCkuOClguCkmuCkqOCkviDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfdW5rbm93biIgbXNnaWQ9IjE0MDAyMTk2Njk3NzA0NDU5MDIiPiLgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkreCli+CksuCljeCkr+ClgeCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX3JpbmdlciIgbXNnaWQ9IjMzMjYwMDM4NDcwMDYxNjI0OTYiPiLgpJjgpKjgpY3gpJ/gpL/gpJXgpYsg4KSG4KS14KS+4KScIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiLgpJXgpLLgpL4g4KSu4KS+4KSk4KWN4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbWVkaWEiIG1zZ2lkPSI0MjE3MzExNzE5NjY1MTk0MjE1Ij4i4KSu4KS/4KSh4KS/4KSv4KS+4KSV4KWLIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjcwNDQ5ODY1NDY0NzcyODIyNzQiPiLgpLjgpYLgpJrgpKjgpL4g4KSt4KWL4KSy4KWN4KSv4KWB4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdCIgbXNnaWQ9IjM3ODk3NTg5ODAzNTc2OTY5MzYiPiLgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSw4KS/4KSZ4KSf4KWL4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdF93aXRoX2FjdHVhbCIgbXNnaWQ9IjgxMjk1NjM0ODA4OTU5OTAzNzIiPiLgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSw4KS/4KSZ4KSf4KWL4KSoICg8eGxpZmY6ZyBpZD0iQUNUVUFMX1JJTkdUT05FIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9zaWxlbnQiIG1zZ2lkPSI3OTM3NjM0MzkyNDA4OTc3MDYyIj4i4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLngpYvgpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4i4KSY4KSo4KWN4KSf4KWA4KSV4KS+IOCkuOCljeCkteCksOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4i4KSF4KSc4KWN4KSe4KS+4KSkIOCksOCkv+CkmeCkn+Cli+CkqCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NjU0MTIzOTg3NDE4MTY4NjkzIj4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkmyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWCIOCkieCkquCksuCkrOCljeCkpyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGVfZGV0YWlsZWQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4i4KSW4KWB4KSy4KWN4KSy4KS+IOCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCksuCkrOCljeCkpyDgpJsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc5MTU4OTUzMjM2NDQyOTI3NjgiPiLgpJbgpYHgpLLgpY3gpLLgpL4g4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkmyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpK7gpL4g4KS44KS+4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSV4KSu4KS+IOCkuOCkvuCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbmV0d29ya19hdmFpbGFibGVfc2lnbl9pbl9kZXRhaWxlZCAoODAwMDA4MTk0MTQ0Nzk3NjExOCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiLgpLXgpL7gpIct4KSr4KS+4KSH4KS44KSB4KSXIOCknOCkoeCkvuCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiDgpJXgpK7gpJzgpYvgpLAg4KSH4KSo4KWN4KSf4KSw4KSo4KWH4KSfIOCknOCkoeCkvuCkqCDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSq4KWN4KSw4KSk4KWN4KSv4KSV4KWN4KS3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpLjgpL/gpKfgpL4g4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpK/gpLjgpLLgpYcg4KS14KS+4KSHLeCkq+CkvuCkhyDgpJfgpY3gpLDgpL7gpLngpJUv4KS54KSf4KWN4KS44KWN4KSq4KSf4KSy4KS+4KSIIOCkrOCkqOCljeCkpiDgpJfgpLDgpL7gpIngpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpLjgpL/gpKfgpL4g4KS44KWB4KSw4KWBIOCkueClgeCkqCDgpLjgpJXgpYfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiLgpLXgpL7gpIct4KSr4KS+4KSHIOCkquCljeCksOCkpOCljeCkr+CkleCljeCktyDgpJbgpYHgpLLgpY3gpLLgpL4g4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiLgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiLgpLjgpY3gpLXgpYDgpJXgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWNsaW5lIiBtc2dpZD0iMjExMjIyNTQ1MTcwNjEzNzg5NCI+IuCkheCkuOCljeCkteClgOCkleCkvuCksCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUiIG1zZ2lkPSIxMzE4OTc1MTg1MTEyMDcwNzM0Ij4i4KSo4KS/4KSu4KSo4KWN4KSk4KWN4KSw4KSj4KS+IOCkquCkoOCkvuCkh+Ckj+CkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ludml0YXRpb25fdG9fY29ubmVjdF90aXRsZSIgbXNnaWQ9IjQ5NTg4MDM5NDg2NTg1MzM2MzciPiLgpJzgpKHgpL7gpKjgpK7gpL4g4KSo4KS/4KSu4KSo4KWN4KSk4KWN4KSw4KSj4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJvbV9tZXNzYWdlIiBtc2dpZD0iNTcwMzg5MTc0NzMxOTUxNzY5Ij4i4KSs4KS+4KSfOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3RvX21lc3NhZ2UiIG1zZ2lkPSIyNDg5Njg5NzQ1MjIwNDQwOTkiPiLgpKrgpY3gpLDgpL7gpKrgpJU6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4i4KSG4KS14KS24KWN4KSv4KSVIFBJTiDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4iUElOOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4i4KSv4KWLIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz7gpLjgpIHgpJcg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkrOClh+CksuCkviDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpLXgpL7gpIct4KSr4KS+4KSH4KSs4KS+4KSfIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpJfgpLDgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4i4KSc4KSsIOCkr+CliyA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkuOCkgeCklyDgpJzgpKHgpL/gpKQg4KS54KWB4KSo4KWN4KSbLCDgpKvgpYvgpKgg4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpLXgpL7gpIct4KSr4KS+4KSH4KSs4KS+4KSfIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpLngpYHgpKjgpYcg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiLgpIXgpJXgpY3gpLfgpLDgpLngpLDgpYIg4KSq4KWN4KSw4KS14KWH4KS2IOCkl+CksOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+IlNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KSg4KS+4KSH4KSB4KSm4KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDgpLLgpYcg4KSn4KSw4KWIIOCkuOCkguCkluCljeCkr+CkvuCkruCkviBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkieCkgeCkpuCliOCkm+ClpCDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkieCkqCDgpLjgpYHgpJrgpL7gpLDgpYEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KSa4KS+4KS54KSo4KWBIOCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4i4KSF4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkuOCkqOCljeCkpuClh+CktiDgpKrgpKDgpL7gpIngpKgg4KSa4KS+4KS54KWB4KSo4KWBIOCkueClgeCkqOCljeCkmyAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjM0OTIwMjU3MTk4NjgwNzg0NTciPiLgpK/gpLjgpLLgpYcgIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IiDgpLbgpYHgpLLgpY3gpJUg4KSy4KSX4KS+4KSJ4KSoIOCkuOCkleCljeCkmyI8L2ZvbnQ+IiDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkluCkvuCkpOCkvuCkruCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19wcmVtaXVtX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjU1MjM4MjYzNDkxMDUxMjM2ODciPjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IuCkr+CkuOCksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkluCkvuCkpOCkvuCkruCkviDgpJrgpL7gpLDgpY3gpJzgpLngpLDgpYIg4KSJ4KSk4KWN4KSq4KSo4KWN4KSoIOCkl+CksOCljeCkpuCkm+ClpCI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2FsbG93IiBtc2dpZD0iNDQ1ODg3ODYzNzExMTAyMzQxMyI+IuCkquCkoOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+IuCkruClh+CksOCliyDgpJvgpKjgpYzgpJ8g4KSv4KS+4KSmIOCksOCkvuCkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4i4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKrgpJvgpL8g4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWC4KSu4KS+IOCkrOCkpuCksuCljeCkqCDgpLjgpJXgpY3gpKjgpYEg4KS54KWB4KSo4KWN4KSbICZndDsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbHdheXNfYWxsb3ciIG1zZ2lkPSIzMjQxMTgxMTU0ODY5NDkzMzY4Ij4i4KS44KSn4KWI4KSBIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4i4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkheCkqOClgeCkruCkpOCkvyDgpKjgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkh+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4i4KSP4KSJ4KSf4KS+IOCkruCkvuCkqOCljeCkryBTSU0g4KSV4KS+4KSw4KWN4KShIOCksOCkvuCkluClh+CksCDgpKrgpYHgpKjgpIPgpLjgpY3gpJ/gpL7gpLDgpY3gpJ8g4KSo4KSX4KSw4KWH4KS44KSu4KWN4KSuIOCkruCli+CkrOCkvuCkh+CksiDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkueClgeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiLgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpKXgpKog4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX21lc3NhZ2UiIG1zZ2lkPSI2NTk5OTQ1MzAxMTQxMDUwMjE2Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSoIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSq4KWB4KSo4KSD4KS44KWN4KSf4KS+4KSw4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiLgpKrgpYHgpKjgpIPgpLjgpY3gpJ/gpL7gpLDgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODM0OTM2MjYyMzA2ODgxOTI5NSI+IuCkuOCkruCkryDgpK7gpL/gpLLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI1ODc5NDUwNjU5NDUzNzgyMjc4Ij4i4KSu4KS/4KSk4KS/IOCkruCkv+CksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9zZXQiIG1zZ2lkPSI1Nzc3MDc1NjE0MzIxMDg3NzU4Ij4i4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9kb25lIiBtc2dpZD0iMjUwNzY4Mzc1MTc1OTMwODgyOCI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1zX25ld19wZXJtX3ByZWZpeCIgbXNnaWQ9IjgyNTc3NDA3MTA3NTQzMDE0MDciPjxmb250IHNpemU9IjEyIiBmZ2NvbG9yPSIjZmYzM2I1ZTUiPiLgpKjgpK/gpL7gpIE6ICI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtc19kZXNjcmlwdGlvbl9hcHAiIG1zZ2lkPSI1MTM5ODM2MTQzMjkzMjk5NDE3Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPuCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcGVybWlzc2lvbnMiIG1zZ2lkPSI3MjgzMzU3NzI4MjE5MzM4MTEyIj4i4KSV4KWB4KSo4KWIIOCkheCkqOClgeCkruCkpOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiLgpLjgpL7gpK/gpKYg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkquCliOCkuOCkviDgpKrgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4iVVNCIOCkoOClguCksuCliyDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiJVU0Ig4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IuCkpOCkquCkvuCkiOCkgiDgpIbgpKvgpY3gpKjgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSu4KS+IFVTQiDgpK7gpL7gpLDgpY3gpKvgpKQg4KSc4KSh4KS+4KSoIOCkueClgeCkqOClgeCkreCkr+Cli+ClpCDgpKTgpLLgpJXgpYsg4KSs4KSf4KSoIOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSv4KSm4KS/IOCkpOCkquCkvuCkiOCkgiDgpIbgpKvgpY3gpKjgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSwIOCksCDgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKHgpJXgpYsgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpYDgpJog4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkquCljeCksOCkpOCkv+CksuCkv+CkquCkvyDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkreCkqOClh+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiLgpKTgpKrgpL7gpIjgpIIg4KSG4KSr4KWN4KSo4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkruCkviBVU0Ig4KSu4KS+4KSw4KWN4KSr4KSkIOCknOCkoeCkvuCkqCDgpLngpYHgpKjgpYHgpK3gpK/gpYvgpaQg4KSk4KSy4KSV4KWLIOCkrOCkn+CkqCDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIIg4KSG4KSr4KWN4KSo4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksCDgpLAg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KSh4KSV4KWLIFNEIOCkleCkvuCksOCljeCkoSDgpKzgpYDgpJog4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkquCljeCksOCkpOCkv+CksuCkv+CkquCkvyDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkreCkqOClh+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkmuCkvuCksuClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiJVU0Ig4KSG4KSuIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4iVVNCIOCkhuCkriDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkpOCkquCkvuCkiOCkgeCkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0Ig4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkrOCkvuCknyDgpLXgpL4g4KSk4KS/4KSwIOCkq+CkvuCkh+CksuCkueCksOClgiDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKog4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkueClgeCkqOClgeCkreCkqOCljeCkpuCkviDgpKrgpLngpYDgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkrOCkvuCknyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIChcIuCkneCkv+CkleCljeCkqOClgeCkueCli+CkuOCljVwiKSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkheCkmOCkvyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSs4KS+4KSfIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKHgpJXgpYsgU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyAoXCLgpKjgpL/gpJXgpL7gpLLgpYfgpJXgpYtcIikg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9idXR0b25fbW91bnQiIG1zZ2lkPSI3MDYwMjE4MDM0OTAwNjk2MDI5Ij4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkueCli+CkuOCljeCknyDgpIXgpKjgpK7gpL7gpIngpKjgpY3gpJ8g4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJzgpL7gpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNLCDgpKTgpY3gpK/gpLjgpKrgpJvgpL8g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkluCli+CksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+IuCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpYvgpLLgpY3gpKjgpYEg4KSt4KSv4KWLIOCkreCkqOClhyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpL4g4KSV4KWH4KS54KWAIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLDgpYvgpJXgpL/gpKjgpYcg4KSb4KSo4KWNIOCksCDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSo4KSX4KSw4KWH4KS44KSu4KWN4KSuIOCkheCkqOClgeCkquCksuCkrOCljeCkpyDgpLngpYHgpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+IlVTQiDgpLjgpILgpJrgpL7gpLLgpKgg4KSF4KS44KSr4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX29rIiBtc2dpZD0iNzM3Njk1MzE2NzAzOTg2NTcwMSI+IuCkoOCkv+CklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLgpK7gpL/gpKHgpL/gpK/gpL4g4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksOClguCkquCkruCkviDgpJzgpKHgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL7gpJXgpYsg4KSw4KWC4KSq4KSu4KS+IOCknOCkoeCkvuCkqCDgpK3gpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfY2RfaW5zdGFsbGVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3NzQ3MTI4Mjc4OTIwOTA3NTQiPiLgpI/gpIngpJ/gpL4g4KS44KWN4KSl4KS+4KSq4KSo4KSV4KSw4KWN4KSk4KS+4KSV4KWLIOCksOClguCkquCkruCkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4iVVNCIOCkuOCkueCkvuCkr+CkleCkruCkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IuCkheCkqOCljeCkryBVU0Ig4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSy4KS+4KSIIOCkq+CksOCljeCkruCljeCkr+CkvuCknyAg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IlNEIOCkleCkvuCksOCljeCkoSDgpKvgpLDgpY3gpK7gpY3gpK/gpL7gpJ8g4KSX4KSw4KWN4KSo4KWHPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsgVVNC4KSu4KS+IOCkuOCkmeCljeCkl+CljeCksOCkuSDgpK3gpI/gpJXgpL4g4KS44KSs4KWIIOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL/gpKjgpYcg4KSb4KSo4KWN4KWkIOCkr+CliyDgpJXgpL7gpLDgpY3gpK8g4KSJ4KSy4KWN4KSf4KS+4KSJ4KSoIOCkuOCkleCkv+CkgeCkpuCliOCkqCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpI/gpJXgpL4g4KS44KSs4KWIIOCkoeClh+Ckn+CkvuCkueCksOClgiDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X2J1dHRvbl9mb3JtYXQiIG1zZ2lkPSI0MTMxMDY0NTYwMTI3NDc4Njk1Ij4i4KSr4KSw4KWN4KSu4KWN4KSv4KS+4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IlVTQiDgpKHgpL/gpKzgpJcg4KSX4KSw4KWN4KSo4KWHIOCknOCkoeCkv+CkpCDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+IlVTQiDgpKHgpL/gpKzgpJcg4KSX4KSw4KWN4KSo4KWHIOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2lucHV0X21ldGhvZCIgbXNnaWQ9IjQ2NTMzODczMzY3OTEyMjI5NzgiPiLgpKjgpL/gpLXgpYfgpLYg4KS14KS/4KSn4KS/IOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iOTA5MTY1MjE1NzcyMjQ5NTExNiI+IuCkh+CkqOCkquClgeCknyDgpLXgpL/gpKfgpL/gpLngpLDgpYIg4KS44KWH4KSf4KSF4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiLgpK3gpYzgpKTgpL/gpJUg4KSV4KS/4KSs4KWL4KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGFyZHdhcmUiIG1zZ2lkPSI3NTE3ODIxMDg2ODg4OTkwMjc4Ij4i4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxNDA3MzY3MDE3MjYzMDMwNzczIj4i4KSV4KS/4KSs4KWL4KSw4KWN4KShIOCksOClguCkquCksOClh+CkluCkviDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0NjU5MDc3MDA0NDkyNTcwNjMiPiLgpJXgpL/gpKzgpYvgpLDgpY3gpKEg4KSw4KWC4KSq4KSw4KWH4KSW4KS+IOCkmuCkr+CkqCDgpJfgpLDgpY3gpKgg4KSf4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX2FscGhhYmV0IiBtc2dpZD0iNTQzMzI3NTQ4NTQ5OTAzOTE5OSI+IiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmRpZGF0ZXNfc3R5bGUiIG1zZ2lkPSI0MzMzOTEzMDg5NjM3MDYyMjU3Ij48dT4i4KSJ4KSu4KWN4KSu4KWH4KSm4KS14KS+4KSwIjwvdT48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSk4KSv4KS+4KSw4KWAIOCkueClgeCkgeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDU3NjAzNDE4OTcwOTk0MDUwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkpOCkr+CkvuCksCDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4i4KSk4KWN4KSw4KWB4KSf4KS/4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJzgpL7gpIHgpJog4KSX4KSw4KWN4KSm4KWI4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLgpLDgpL/gpJXgpY3gpKQgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IuCkluCkvuCksuClgCBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpL7gpLLgpYAg4KS14KS+IOCkheCkuOCkruCksOCljeCkpeCkv+CkpCDgpKvgpL7gpIfgpLIg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+IlNEIOCkleCkvuCksOCljeCkoSDgpJbgpL7gpLLgpYAg4KSbIOCkheCkpeCkteCkviDgpLjgpK7gpLDgpY3gpKXgpKgg4KSo4KSX4KSw4KS/4KSP4KSV4KWLIOCkq+CkvuCkh+CksiDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i4KSs4KS/4KSX4KWN4KSw4KS/4KSP4KSV4KWLIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+IuCkrOCkv+Ckl+CljeCksOCkv+Ckj+CkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KS/4KSX4KWN4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCDgpK/gpLjgpLLgpL7gpIgg4KSq4KWB4KSo4KSD4KSr4KSw4KWN4KSu4KWN4KSv4KS+4KSfIOCkl+CksOCljeCkqCDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+IlNEIOCkleCkvuCksOCljeCkoSDgpKzgpL/gpJfgpY3gpLDgpL/gpI/gpJXgpYsg4KSb4KWkIOCkr+CkuOCksuCkvuCkiCDgpKrgpYHgpKjgpIPgpKvgpLDgpY3gpK7gpY3gpK/gpL7gpJ8g4KSX4KSw4KWN4KSoIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSq4KWN4KSw4KSk4KWN4KSv4KS+4KS24KS/4KSkIOCksOClguCkquCkruCkviDgpLngpJ/gpL7gpIfgpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+IlNEIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpKrgpYfgpJXgpY3gpLfgpL/gpKQg4KSw4KWC4KSq4KSu4KS+IOCkueCkn+CkvuCkh+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiLgpKHgpYfgpJ/gpL4g4KSX4KWB4KSu4KWN4KSo4KSs4KS+4KSfIOCksOCli+CkleCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8gVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIngpKjgpYHgpIXgpJjgpL8g4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IuCkoeClh+Ckn+CkviDgpKjgpL7gpLYg4KS54KWB4KSo4KSs4KS+4KSfIOCkrOCkmuCljeCkqCBTRCDgpJXgpL7gpLDgpY3gpKHgpLLgpL7gpIgg4KSo4KS/4KSV4KS+4KSy4KWN4KSo4KWB4KSt4KSo4KWN4KSm4KS+IOCkquCkueCkv+CksuCkviDgpIXgpKjgpK7gpL7gpIngpKjgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KS54KSf4KS+4KSJ4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkieCkqCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4i4KSk4KSq4KS+4KSI4KSCIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLDgpYLgpKrgpK7gpL4gVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIngpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiLgpKTgpKrgpL7gpIjgpIEgU0Qg4KSV4KS+4KSw4KWN4KShIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLDgpYLgpKrgpK7gpL4g4KS54KSf4KS+4KSJ4KSoIOCkuOCkleCljeCkqOClgSDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDQ4NjM3NzIzMDE0MDIyNzY1MSI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KS54KSf4KS+4KSH4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+IuCkueCkn+CkvuCkh+Ckj+CkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iVVNEIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIfgpK/gpYvgpaQg4KSo4KSv4KS+4KSBIOCkruCkv+CkoeCkv+Ckr+CkviDgpJjgpYHgpLjgpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KS54KSf4KS+4KSH4KSv4KWL4KWkIOCkj+CkieCkn+CkviDgpKjgpK/gpL7gpIEg4KSb4KS/4KSw4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiLgpJXgpYHgpKjgpYgg4KSu4KS/4KSy4KWN4KSo4KWHIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpKrgpL7gpIfgpI/gpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSI4Nzg3MzUyMDc0MzI2NzQ4ODkyIj4i4KSW4KSj4KWN4KShIOCkquCljeCksOCkr+Cli+CklyDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpJXgpLngpLDgpYIg4KSF4KSq4KSh4KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSIxMTA2NjEyNDI0MjU0Mjc3NjMwIj4i4KSc4KSu4KWN4KSu4KS+IOCkl+CksOCkv+Ckj+CkleCliyDgpJjgpJ/gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+IuCkuOCkvuCkruCkvuCkl+CljeCksOClgOCkleCliyDgpKjgpJXgpLIg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKrgpL8g4KSX4KSw4KWN4KSoIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpKjgpY3gpJ/gpYfgpKjgpLAg4KS44KWH4KS14KS+IOCkhuCkueCljeCkteCkvuCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSIxNjQyMDI0NDU1NzUwNDE0Njk0Ij4i4KSu4KS/4KSh4KS/4KSv4KS+IOCkquCksOCkv+Cko+CkvuCkriDgpKbgpL/gpLbgpL7gpKjgpL/gpLDgpY3gpKbgpYfgpLYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNDkzMjgxODc0OTU0NzI0NDM0NiI+IuCkruCkv+CkoeCkv+Ckr+CkviDgpKrgpLDgpL/gpKPgpL7gpK7gpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkrOCkvuCkueCkv+CksOClgCDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSy4KWI4KSc4KS+4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNzU2NTU1MjIzNzk3NzgxNTA0NyI+IuCkleCkv+Ckl+CkvuCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI1ODY2MjQ1NDg0MzAzMjg1NzYyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkv+Ckl+CkvuCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjE3MjE5NTE4NDIwNzgyODM4NyI+IuCkleCkv+Ckl+CkvuCksOCljeCkoSDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSX4KSw4KWN4KSo4KWHIOCksCDgpLLgpYHgpJXgpL7gpIngpKjgpYcg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIzMDQzNzMyMjkwNTE4NjI5MDYxIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkv+Ckl+CkvuCksOCljeCkoSDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiLgpJzgpYHgpK4g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpKbgpYHgpIgg4KSa4KWL4KSf4KS/IOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnYWRnZXRfaG9zdF9lcnJvcl9pbmZsYXRpbmciIG1zZ2lkPSI0ODgyMDA0MzE0OTA2NDY2MTYyIj4i4KS14KS/4KSc4KWH4KSfIOCkpeCkqiDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9nbyIgbXNnaWQ9IjgzMjA4NDU2NTE3MzczNjkwMjciPiLgpJzgpL7gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlYXJjaCIgbXNnaWQ9IjY1ODExMDI3MTgyMjgwNzgxMSI+IuCkluCli+CknOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VuZCIgbXNnaWQ9IjIzMTYxNjY1NTYzNDkzMTQ0MjQiPiLgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX25leHQiIG1zZ2lkPSIzMTM4ODQzOTA0MDA5ODEzODM0Ij4i4KSF4KSw4KWN4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kb25lIiBtc2dpZD0iODk3MTUxNjExNzkxMDkzNDYwNSI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4i4KSF4KSY4KS/4KSy4KWN4KSy4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kZWZhdWx0IiBtc2dpZD0iMjg0MDkyMTg4NTU1ODA0NTcyMSI+IuCkmuCksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxfbnVtYmVyX3VzaW5nIiBtc2dpZD0iNTc4OTE3NjQyNTE2NzU3MzU4NiI+XG4i4KSo4KSu4KWN4KSs4KSwIOCkoeCkvuCkr+CksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiLgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljVxu4KSv4KWLIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiLgpKjgpL/gpK7gpY3gpKgg4KSP4KSJ4KSf4KS+IOCkteCkviDgpKfgpYfgpLDgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJbgpL7gpKTgpL7gpK7gpL4g4KSq4KS54KWB4KSB4KSa4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSF4KS54KS/4KSy4KWHIOCksCDgpK3gpLXgpL/gpLfgpY3gpK/gpK7gpL4g4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9mb290ZXIiIG1zZ2lkPSIzMTI1MjExMzQzMzc5Mzc2NTYxIj4i4KSV4KWHIOCkpOCkquCkvuCkiOCkgSDgpK/gpLgg4KSF4KSo4KWB4KSw4KWL4KSn4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X3Blcm1pc3Npb25zX2hlYWRlcl90ZXh0IiBtc2dpZD0iNjg3NDQ5NzQwODIwMTgyNjcwOCI+IuCkheCkqOClgeCksOCli+CkpyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4i4KSF4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NDg2NzU5Nzk1OTI2MjM3OTA3Ij4i4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCkv+Ckj+CkleCliyDgpIXgpKjgpYHgpK7gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij5cbiLgpJbgpL7gpKTgpL4gPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiVzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCkv+Ckj+CkleCliyDgpIXgpKjgpYHgpK7gpKTgpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnB1dF9tZXRob2RfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyODM1NTcxNzk5NDQ5OTI2NDkiPiLgpIfgpKjgpKrgpYHgpJ8g4KS14KS/4KSn4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IuCkuOCkv+CkmeCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI0MTQ4MTIwNzQyMDk2NDc0NjQxIj4i4KSJ4KSq4KSy4KSs4KWN4KSn4KSk4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgpLjgpYLgpJrgpKjgpL4g4KS44KWB4KSo4KWN4KSo4KWH4KS14KS+4KSy4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4KS44KSV4KWN4KSw4KS/4KSvIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7gpKbgpY3gpLXgpL7gpLDgpL4g4KS44KSV4KWN4KSw4KS/4KSvIOCkl+CksOCkv+Ckj+CkleCliyDgpLngpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dF9sb25nIiBtc2dpZD0iNjQwNzM1MTAwNjI0OTE3NDQ3MyI+Ijx4bGlmZjpnIGlkPSJTRVNTSU9OIj4lczwveGxpZmY6Zz7gpLjgpIHgpJcg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkm+ClpCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDQzNDM4OTY0NDQwOTYwNzQ1Ij4iVlBOIOCknOCkoeCkvuCkqCDgpLjgpKfgpYgg4KSc4KWL4KSh4KWN4KSm4KWI4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLgpLjgpKfgpYjgpIEg4KSW4KWB4KSy4KWN4KSy4KS+IOCkueClgeCkqOClhyBWUE4g4KSc4KWL4KSh4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Vycm9yIiBtc2dpZD0iNjAwOTI0OTgxNDAzNDcwODE3NSI+IuCkuOCkp+CliOCkgSDgpK3gpLDgpL8gVlBOIOCkpOCljeCksOClgeCkn+Ckv+CkruCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25maWciIG1zZ2lkPSI2NDE1ODk5MTUwNjcxNTM3OTcwIj4i4KSV4KSo4KWN4KSr4KS/4KSX4KSwIOCkl+CksOCljeCkqCDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXBsb2FkX2ZpbGUiIG1zZ2lkPSIyODk3OTU3MTcyMzY2NzMwNDE2Ij4i4KSr4KS+4KSH4KSyIOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2ZpbGVfY2hvc2VuIiBtc2dpZD0iNjM2MzY0ODU2MjE3MDc1OTQ2NSI+IuCkleClgeCkqOCliCDgpKvgpL7gpIfgpLIg4KSb4KS+4KSo4KS/4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc2V0IiBtc2dpZD0iMjQ0ODE2ODA4MDk2NDIwOTkwOCI+IuCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpY3gpKjgpYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdWJtaXQiIG1zZ2lkPSIxNjAyMzM1NTcyMDg5OTExOTQxIj4i4KSq4KWH4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+IuCkleCkvuCksCDgpK7gpYvgpKEg4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4MDM1MjMwNTM3NTYzNTAzMjYyIj4i4KSV4KS+4KSwIOCkruCli+CkoeCkrOCkvuCknyDgpKjgpL/gpLjgpY3gpJXgpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE0NjY5NDIzNDM5ODIwMjYwMSI+IuCkn+Clh+CkpeCksCDgpJfgpLDgpY3gpKjgpYcg4KS14KS+IOCkueCkn+CkuOCljeCkquCknyDgpLjgpJXgpY3gpLDgpL/gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjY4NTcwMzE3NjAxMDMwNjI5ODIiPiLgpLjgpYfgpJ/gpIXgpKog4KSX4KSw4KWN4KSoIOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiLgpKrgpJvgpL7gpKHgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXh0X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEwODA1NTUxMDQ2Nzc5OTI0MDgiPiLgpIXgpLDgpY3gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJza2lwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEyNzUzNjIyOTk0NzE2MzE4MTkiPiLgpJvgpYvgpKHgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ4OTA4OTQyNjc0NTQ4NjcyNzYiPiLgpIngpJrgpY3gpJog4KSu4KWL4KSs4KS+4KSH4KSyIOCkoeClh+Ckn+CkviDgpKrgpY3gpLDgpK/gpYvgpJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMzM0MDgyMjIyODU5OTMzNzc0MyI+IuCkruCli+CkrOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpIXgpLDgpYIg4KSl4KSqIOCknOCkvuCkqOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8gIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2MjY5NTQxODk3NzI5NzgxMzMyIj4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkoeClh+Ckn+CkviDgpLjgpYDgpK7gpL4g4KSq4KS+4KSwIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjU0NDM0NTczMjEzNTQ5MDcxODEiPiLgpK7gpYvgpKzgpL7gpIfgpLIg4KSh4KWH4KSf4KS+IOCkquCljeCksOCkr+Cli+CklyDgpKzgpL7gpLDgpYcg4KSl4KSqIOCkuOCkv+CkleCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19tYXRjaGVzIiBtc2dpZD0iODEyOTQyMTkwODkxNTg0MDczNyI+IuCkleClgeCkqOCliCDgpK7gpL/gpLLgpYfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX29uX3BhZ2UiIG1zZ2lkPSIxOTQ2Nzk5MjMzODIyODIwMzg0Ij4i4KSq4KWD4KS34KWN4KSg4KSu4KS+IOCkq+Clh+CksuCkviDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTY3MTQ3MDgxMTM2NTc5NDM5Ij4i4KWnIOCkruClh+CksiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDY0MTg3Mjc5NzA2NzYwOTE3NyI+Ijx4bGlmZjpnIGlkPSJUT1RBTCI+JWQ8L3hsaWZmOmc+IOCkleCliyA8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tb2RlX2RvbmUiIG1zZ2lkPSI3MjE3NTgxNjQwNDYxOTIyMjg5Ij4i4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4iVVNCICDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkpuCliC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkruClh+Ckn+CkvuCkieCkgeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkruClh+Ckn+CkvuCkieCkgeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4iVVNCIOCkreCko+CljeCkoeCkvuCksOCko+CksuCkvuCkiCDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IlNEIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyDgpLngpYHgpKjgpYHgpK3gpKjgpY3gpKbgpL4g4KSq4KS54KS/4KSy4KS+IOCkqOCkv+CkleCkvuCksuCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IuCkheCkueCkv+CksuClhyBVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCknOCkvuCkgeCkmiDgpK3gpIfgpLDgpLngpYfgpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzM0NzYyNTAzOTA0ODI3NDgxIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkueCkv+CksuClhyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSt4KSH4KSw4KS54KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkh+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkpuCljeCkteCkvuCksOCkviDgpIXgpLngpL/gpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSX4KSu4KS+IOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MDYxMzA1NjgxMzM1NDA0MzUiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSF4KS54KS/4KSy4KWHIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfdW5rbm93bl9zdGF0ZSIgbXNnaWQ9IjcyOTE5Mjc4MjE5NzI5MDM4NSI+IuCkrOCkvuCkueCljeCkryDgpK7gpL/gpKHgpL/gpK/gpL4g4KSF4KSc4KWN4KSe4KS+4KSkIOCkheCkteCkuOCljeCkpeCkvuCkruCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlIiBtc2dpZD0iMTc3ODY4NjYxODIzMDAxMTk2NCI+IuCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kIiBtc2dpZD0iNDgwODI3MDkwMDMyMjk4NTk2MCI+IuCkquCkpOCljeCkpOCkviDgpLLgpJfgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWJzZWFyY2giIG1zZ2lkPSI0MzM3MTU3OTc3NDAwMjExNTg5Ij4i4KS14KWH4KSsIOCkluCli+CknOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfbmV4dCIgbXNnaWQ9IjU3NDIxMjQ2MTg5NDIxOTM5NzgiPiLgpIXgpLDgpY3gpJXgpYsg4KSt4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZF9wcmV2aW91cyIgbXNnaWQ9IjIxOTY3MjM2NjkzODgzNjA1MDYiPiLgpIXgpJjgpL/gpLLgpY3gpLLgpYsg4KSr4KWH4KSy4KS+IOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGlja2VyIiBtc2dpZD0iNTYyMjY4MzkxMjYxNjQ5NjE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4g4KSs4KS+4KSfIOCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpLDgpYvgpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZlRpdGxlIiBtc2dpZD0iNTQ0Njg1ODcxNzE1NzQxNjgzOSI+IuCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpLDgpYvgpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZk1lc3NhZ2UiIG1zZ2lkPSIxMzc0NzE4MDIzMjI0MDAwNzAyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+ICg8eGxpZmY6ZyBpZD0iU0VSVklDRSI+JTIkczwveGxpZmY6Zz4pIOCkpuCljeCkteCkvuCksOCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZZZXMiIG1zZ2lkPSIyMzQ2NTY2MDcyODY3MjEzNTYzIj4i4KS54KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiLgpLngpYvgpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXMiIG1zZ2lkPSI1Mjk2MzIxODUwNjYyNzQ2ODkwIj4i4KS44KWA4KSu4KS+IOCkqOCkvuCkmOClh+CkleCkvuCkueCksOClgiDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+IuCkpOCljeCkr+CkueCkvuCkgSA8eGxpZmY6ZyBpZD0iTlVNQkVSX09GX0RFTEVURURfSVRFTVMiPiUxJGQ8L3hsaWZmOmc+IOCkruClh+Ckn+CkvuCkh+Ckj+CkleCkviDgpIbgpIfgpJ/gpK7gpLngpLDgpYIg4KSb4KSo4KWNIDx4bGlmZjpnIGlkPSJUWVBFX09GX1NZTkMiPiUyJHM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSW4KS+4KSk4KS+IDx4bGlmZjpnIGlkPSJBQ0NPVU5UX05BTUUiPiUzJHM8L3hsaWZmOmc+4KWkIOCkpOCkquCkvuCkiOCkgiDgpJXgpYcg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19yZWFsbHlfZGVsZXRlIiBtc2dpZD0iMjU3MjYwMDEwMzEyMjU5NjI0MyI+IuCkteCkuOCljeCkpOClgeCkueCksOClgiDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3VuZG9fZGVsZXRlcyIgbXNnaWQ9IjI5NDEzMTczNjA2MDAzMzg2MDIiPiLgpK7gpYfgpJ/gpL/gpI/gpJXgpL7gpLngpLDgpYIg4KSq4KWC4KSw4KWN4KS14KS14KSkIOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfZG9fbm90aGluZyIgbXNnaWQ9IjM3NDM3NjQ3NDA0MzA4MjE4NDUiPiLgpIXgpLngpL/gpLLgpYfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleClh+CkueClgCDgpKjgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfYWNjb3VudF9sYWJlbCIgbXNnaWQ9IjU2NTUyMDMwODk3NDY0MjM5MjciPiLgpI/gpIngpJ/gpL4g4KSW4KS+4KSk4KS+IOCkm+CkvuCkqOCljeKAjeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+IuCkj+CkieCkn+CkviDgpJbgpL7gpKTgpL4g4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzYxMTk4Mjg5NDg1MzQzNTg3NCI+IuCkluCkvuCkpOCkviDgpKXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iMjQxMjA3MjI3MjgzMjI4NDMxMyI+IuCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfZGVjcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjQ3NjA1MDc3ODM4Njc3OTA2NyI+IuCkmOCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9tb2RlIiBtc2dpZD0iMzA3MzEwMTA2NzQ0MTYzODQyOCI+Ijx4bGlmZjpnIGlkPSJWQUxVRSI+JXM8L3hsaWZmOmc+4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpLjgpK7gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfYWN0aW9uIiBtc2dpZD0iOTEwMTQ3MzA0NTg5MTgzNTQ5MCI+IuCkrOCkouCkvuCkieCkqCDgpK7gpL7gpKXgpL8g4KSwIOCkmOCkn+CkvuCkieCkqCDgpKTgpLIg4KS44KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X21pbnV0ZV9idXR0b24iIG1zZ2lkPSI4ODY1ODg1MTE0MDI4NjE0MzIxIj4i4KSu4KS/4KSo4KWH4KSfIOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iNjI0NjgzNDkzNzA4MDY4NDc5MSI+IuCkruCkv+CkqOClh+CknyDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIzNjUyMDU2MDU1ODEwMjIzMTM5Ij4i4KSY4KSo4KWN4KSf4KS+IOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjEzNzc0Nzk4NjM0MjkyMTQ3OTIiPiLgpJjgpKjgpY3gpJ/gpL4g4KSY4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X3NldF9wbV9idXR0b24iIG1zZ2lkPSI0MTQ3NTkwNjk2MTUxMjMwODYzIj4iUE0g4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uIiBtc2dpZD0iODMwMjE0MDM1MzUzOTQ4Njc1MiI+IkFNIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+IuCkruCkueCkv+CkqOCkviDgpKzgpKLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iMTgzMjY5ODk5NTU0MTcyNjAxOSI+IuCkruCkueCkv+CkqOCkviDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpY3gpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfZGF5X2J1dHRvbiIgbXNnaWQ9IjcxMzA0NjU0MTIzMDgxNzM5MDMiPiLgpKbgpL/gpKgg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI0MTMxODgxNTIxODE4NzUwMDMxIj4i4KSm4KS/4KSoIOCkmOCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjYzMTg2OTczODQzMTA4MDg4OTkiPiLgpLXgpLDgpY3gpLcg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNDQ4MjAyMTgxMzQ5MTEyMTcxNyI+IuCkteCksOCljeCktyDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLgpK7gpYvgpKEg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IuCkj+CkieCkn+CkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSb4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IOCkuOCkgeCklyDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IuCkp+Ckv+CkuOCkvuCksOCljeCkqOClhyDgpLngpY3gpK/gpL7gpKjgpY3gpKHgpLLgpaQg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNICZhbXA7IOCkuOCkruCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkruCkvuCkpeCkvyDgpKfgpL/gpLjgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4KSV4KWLIOCksuCkvuCkl+CkvyDgpKTgpLIg4KS44KWN4KSy4KS+4KSH4KShIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuCkuOCljeCksuCkvuCkh+CkoSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkrOCkvuCkr+CkvuCkgeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLgpLjgpY3gpLLgpL7gpIfgpKEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpKbgpL7gpK/gpL7gpIHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuCkruCljOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLgpIbgpLXgpL7gpJwg4KSa4KS+4KSy4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLgpJbgpYvgpLLgpY3gpKjgpLLgpL7gpIcg4KS54KWB4KSk4KWN4KSk4KWN4KSv4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IuCkrOCli+CksuCkv+Ckj+CkleCliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSV4KWB4KSe4KWN4KSc4KWA4KS54KSw4KWCIOCkuOClgeCkqOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS54KWH4KSh4KS44KWH4KSfIOCkquCljeCksuCklyDgpIfgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i4KSh4KSf4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTI5MzYwMDQ5NjYwMTQ5MDIxNiI+IuCkl+Clg+CkuSDgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjIzNzQ5NjU2Mjk1MjE1MjU4OSI+IuCkruCkvuCkpeCkvyDgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbWVudV9vdmVyZmxvd19kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyOTU2NTkwMzc1MDkwMDg0NTMiPiLgpKXgpKog4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9Ijc5NjU5ODQzNjA5MDM2OTM5MDMiPiIlMSRzLCAlMiRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX3N1YnRpdGxlX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9IjY5ODU1NDY1MzA0NzE3ODA3MjciPiIlMSRzLCAlMiRzLCAlMyRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9pbnRlcm5hbCIgbXNnaWQ9IjQ4OTE5MTY4MzM2NTc5MjkyNjMiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9zZF9jYXJkIiBtc2dpZD0iMzI4Mjk0ODg2MTM3ODI4Njc0NSI+IlNEIOCkleCkvuCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRyYWN0X2VkaXRfbWVudV9idXR0b24iIG1zZ2lkPSI4OTQwNDc4NzMwNDk2NjEwMTM3Ij4i4KS44KSu4KWN4KSq4KS+4KSm4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE5NTU2Mzg4NjIxMjIyMzIzNDIiPiLgpKHgpYfgpJ/gpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkmuClh+CkpOCkvuCkteCkqOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ19ib2R5IiBtc2dpZD0iMjgxNDY3MzU1MTQ3MTk2OTk1NCI+IuCkieCkquCkr+Cli+CklyDgpLAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkueClh+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+IjJHLTNHIOCkoeClh+Ckn+CkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF90aXRsZSIgbXNnaWQ9Ijc2MzY0ODk0MzY4MTk0NzA3NjEiPiI0RyDgpKHgpYfgpJ/gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+IuCkruCli+CkrOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiLgpLXgpL7gpIct4KSr4KS+4KSHIOCkoeClh+Ckn+CkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+IuCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iNzAyNjczOTEyMTEzODAwNTIzMSI+IjJHLTNHIOCkoeClh+Ckn+CkviDgpLjgpYDgpK7gpL4g4KSt4KSo4KWN4KSm4KS+IOCkquCkvuCksCDgpK3gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMTEwNjU2Mjc3OTMxMTIwOTAzOSI+IjRHIOCkoeClh+Ckn+CkviBTSU3gpL4g4KSo4KS+4KSY4KWN4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjI3OTI0MDU3MjE2NTQxMjE2OCI+IuCkruCli+CkteCkvuCkh+CksiDgpKHgpYfgpJ/gpL4gU0lN4KS+IOCkqOCkvuCkmOCljeCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSh4KWH4KSf4KS+IFNJTeCkviDgpKjgpL7gpJjgpY3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X3Nub296ZWRfYm9keSIgbXNnaWQ9IjcwMzU0OTAyNzgyOTg0NDE3NjciPiI8eGxpZmY6ZyBpZD0iU0laRSI+JXM8L3hsaWZmOmc+IOCkieCksuCljeCksuClh+CkluCkv+CkpCDgpLjgpYDgpK7gpL4g4KSt4KSo4KWN4KSm4KS+IOCkrOCkouClgCDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4i4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/4KSV4KS+IOCkoeClh+Ckn+CkviDgpKrgpY3gpLDgpKTgpL/gpKzgpKjgpY3gpKfgpL/gpKQg4KSX4KSw4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+IuCkheCkteCksOCli+CkpyDgpLngpJ/gpL7gpIngpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlIiBtc2dpZD0iNjUxMDA0MDQ4NjA0OTIzNzYzOSI+IuCkuOClgeCksOCkleCljeCkt+CkviDgpKrgpY3gpLDgpK7gpL7gpKPgpKrgpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGVfaXNfdmFsaWQiIG1zZ2lkPSI2ODI1MjYzMjUwNzc0NTY5MzczIj4i4KSq4KWN4KSw4KSu4KS+4KSj4KSq4KSk4KWN4KSwIOCkruCkvuCkqOCljeCkryDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfdG8iIG1zZ2lkPSI0NTQyMzk0ODAyNzQ5MjEwMzIiPiLgpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KS+4KSw4KWAIOCkl+CksOCkv+Ckj+CkleClizoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21tb25fbmFtZSIgbXNnaWQ9IjIyMzMyMDkyOTk0MzQxNzI2NDYiPiLgpLjgpL7gpKfgpL7gpLDgpKMg4KSo4KS+4KSuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ19uYW1lIiBtc2dpZD0iNjk3MzU2MTE5MDc2MjA4NTIzNiI+IuCkuOCkguCkl+CkoOCkqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdfdW5pdCIgbXNnaWQ9IjcyNjU5ODE4OTA0MjIwNzAzODMiPiLgpLjgpILgpJfgpKDgpKjgpL7gpKTgpY3gpK7gpJUg4KSP4KSV4KS+4KSHOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9ieSIgbXNnaWQ9IjI2NDc1ODQ5ODgwNTc0ODE1NjYiPiLgpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KS+4KSw4KWAIOCkl+CksOCkv+Ckj+CkleClizoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2YWxpZGl0eV9wZXJpb2QiIG1zZ2lkPSI4ODE4ODg2MTM3NTQ1OTgzMTEwIj4i4KSu4KS+4KSo4KWN4KSv4KSk4KS+OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9vbiIgbXNnaWQ9IjU4OTUwMTc0MDQzNjEzOTcyMzIiPiLgpJzgpL7gpLDgpYAg4KSX4KSw4KS/4KSP4KSV4KWLOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4cGlyZXNfb24iIG1zZ2lkPSIzNjc2MjQyOTQ5OTE1OTU5ODIxIj4i4KSF4KS14KSn4KS/IOCkuOCkruCkvuCkquCljeCkpDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4i4KSV4KWN4KSw4KSuIOCkuOCkguCkluCljeCkr+CkvjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludHMiIG1zZ2lkPSI0NTE2MDE5NjE5ODUwNzYzMDQ5Ij4i4KSU4KSB4KSg4KS+4KSb4KS+4KSq4KS54KSw4KWCOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiJTSEEt4KWo4KWr4KWsIOCklOCkguCkoOCkvuCkm+CkvuCkqjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IlNIQS0xIOCklOCkguCksuCkvuCkm+CkvuCkqjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfc2VlX2FsbCIgbXNnaWQ9IjQyOTI1NjkzODM5NzY2MzYyMDAiPiLgpLjgpKzgpYgg4KS54KWH4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNDcxMDAxMzg2NDk3NDA0MDYxNSI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpJvgpKjgpYzgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfYWN0aW9uX3Byb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI1MjQ3Njg0NDM1OTc5MTQ5MjE2Ij4i4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfZGV2aWNlX2xvY2tlZCIgbXNnaWQ9IjMwOTI3MDM0NDg2OTA2Njk3NjgiPiLgpIngpKrgpJXgpLDgpKMg4KSy4KSVIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxpc3RfZGVsaW1ldGVyIiBtc2dpZD0iMzk3NTExNzU3MjE4NTQ5NDE1MiI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VuZGluZyIgbXNnaWQ9IjMyNDU2NTM2ODEwMDgyMTgwMzAiPiLgpKrgpKDgpL7gpIngpIHgpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hCcm93c2VyRGVmYXVsdCIgbXNnaWQ9IjIwNTc5NTE5NDcyOTc2MTQ3MjUiPiLgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iU2V0dXBDYWxsRGVmYXVsdCIgbXNnaWQ9IjU4MzQ5NDg0NjkyNTM3NTg1NzUiPiLgpJXgpLIg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2VfYWx3YXlzIiBtc2dpZD0iODAxNzc3MDc0NzgwMTQ5NDkzMyI+IuCkuOCkp+CliOCkgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9vbmNlIiBtc2dpZD0iMjQwNDY0NDc5NzE0OTE3Mzc1OCI+IuCkj+CkieCkn+CkviDgpK7gpL7gpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MTcwNTM4OTgxNjcxMjc0NzEiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjM5MjkxMjczNDIwMTQwMTIzIj4i4KSr4KWL4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2hlYWRwaG9uZXMiIG1zZ2lkPSI4MTE5OTcxODQzODAzNDM5MTEwIj4i4KS54KWH4KSh4KSr4KWL4KSo4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2RvY2tfc3BlYWtlcnMiIG1zZ2lkPSI2MjQwNjAyOTgyMjc2NTkxODY0Ij4i4KSh4KSVIOCkuOCljeCkquCkv+CkleCksOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUg4KSF4KSh4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLgpKTgpL7gpLDgpLDgpLngpL/gpKQg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IuCkruCkv+CkoeCkv+Ckr+CkvuCkleCliyDgpIngpKTgpY3gpKrgpL7gpKbgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i4KS44KWN4KSV4KWN4KSv4KS+4KSoIOCkl+CksOCljeCkpuCliCAuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLgpJzgpKHgpL7gpKgg4KS54KWB4KSB4KSm4KWILi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLgpIngpKrgpLLgpKzgpY3gpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9IjY3Mzk4OTk5NjI2ODE4ODY0MDEiPiLgpIngpKrgpLLgpKzgpY3gpKcg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2J1aWx0X2luX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjI1ODMxMzQyOTQyOTI1NjM5NDEiPiLgpKrgpYLgpLDgpY3gpLUt4KSo4KS/4KSw4KWN4KSu4KS/4KSkIOCkuOCljeCkleCljeCksOCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9oZG1pX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjE1NTUyNjQ1NTkyMjc0NzAxMDkiPiJIRE1JIOCkuOCljeCkleCljeCksOCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLgpIbgpLXgpLDgpKMgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuCkpOCkvuCksOCksOCkueCkv+CkpCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLgpIXgpLDgpY3gpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkr+CliyDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLLgpYcg4KSm4KWH4KSW4KS+4KSH4KSw4KS54KWH4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLgpLXgpL/gpJrgpY3gpJvgpYfgpKbgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSV4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4KSi4KS+4KSB4KSa4KS+IOCkrOCkv+CksOCljeCkuOCkqOClgSDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IuCkl+CksuCkpCDgpKLgpL7gpIHgpJrgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiLgpJfgpLLgpKQg4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IuCkl+CksuCkpCBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJGQ8L3hsaWZmOmc+4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLgpIbgpKvgpY3gpKjgpYsg4KSi4KS+4KSB4KSa4KS+IOCkleCli+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4g4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUElOIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkheCkueCkv+CksuClhyDgpIXgpLjgpJXgpY3gpLfgpK4g4KSb4KWkIOCkuOClgeCkmuCkvuCksOClgSDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IFBVSyDgpJXgpYvgpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCAg4KS14KS/4KS14KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpLXgpL7gpLngpJXgpLLgpL7gpIgg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLgpIfgpJrgpY3gpJvgpL/gpKQgUElOIOCkleCli+CkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuCkruCkqOCkquCksOCljeCkpuCliyBQSU4g4KSV4KWL4KShIOCkqOCkv+CktuCljeCkmuCkv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuCkl+CksuCkpCBQSU4g4KSV4KWL4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4KWqIOCkpuClh+CkluCkvyDgpa4g4KS14KS+4KSfIOCkqOCkruCljeCkrOCksCDgpK3gpI/gpJXgpYsg4KSP4KSJ4KSf4KS+IFBJTiDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIOCkleCli+CkoSDgpa4g4KS14KSf4KS+IOCkqOCkruCljeCkrOCksCDgpLXgpL4g4KS44KWLIOCkreCkqOCljeCkpuCkviDgpKzgpKLgpYAg4KS54KWB4KSo4KWB4KSq4KSw4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUFVLIOCkleCli+CkoSDgpKrgpYHgpKg64KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpKfgpYfgpLDgpYgg4KSq4KWB4KSoOuCkquCljeCksOCkr+CkvuCkuOCkueCksOClguCksuClhyBTSU3gpLLgpL7gpIgg4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpKjgpL/gpLfgpY3gpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KS/4KSm4KS/4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4g4KSV4KWL4KSh4KS54KSw4KWCIOCkruClh+CksiDgpJbgpL7gpI/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLgpKjgpL/gpJXgpYgg4KSn4KWH4KSw4KWIIOCkouCkvuCkgeCkmuCkviDgpJXgpYvgpLjgpL/gpLjgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8sIOCkpOCkquCkvuCkiOCkgeCkleCliyBHb29nbGUg4KSW4KS+4KSk4KS+4KSV4KWLIOCkuOCkvuCkpSDgpLjgpL7gpIfgpKgg4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriAo4KSH4KSu4KWH4KSyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLgpLjgpL7gpIfgpKgg4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4KSF4KSu4KS+4KSo4KWN4KSvIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuCkleClhyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkv+CksOCljeCkuOCkqOClgeCkreCkr+Cliz9cbiI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgpK7gpL4g4KSc4KS+4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i4KSW4KS+4KSk4KS+IOCknOCkvuCkgeCkmiDgpLngpYHgpIHgpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJfgpLLgpKQg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCliyDgpJvgpaQgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpLLgpJUg4KSi4KS+4KSB4KSa4KS+IOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkluCkv+CkmuCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKrgpJvgpL8g4KSl4KSqIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYIsIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSbIOCksCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkoeClh+Ckn+CkviDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKTgpLjgpIHgpJcg4KSr4KWL4KSo4KSy4KS+4KSIIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSv4KWL4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkquCkm+CkvyDgpKXgpKog4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClgiwg4KSr4KWL4KSo4KSy4KS+4KSIIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpL7gpLDgpY3gpK/gpLbgpL7gpLLgpL7gpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCkv+CkqOClhyDgpJsg4KSwIOCkuOCkrOCliCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSh4KWH4KSf4KS+IOCkueCksOCkvuCkieCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJ/gpY3gpK/gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIOCkheCkrCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCkvuCksOCljeCkr+CktuCkvuCksuCkvuCkruCkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KS/4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkq+Cli+CkqCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCDgpIXgpKwg4KSr4KWL4KSoIOCkq+CljeCkr+CkvuCkleCljeCkn+CljeCksOCkvyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkueClgeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CksOCljeCkqOClgeCkreCkr+Cli+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLXgpL/gpKvgpLIg4KSq4KWN4KSw4KSv4KSk4KWN4KSo4KS54KSw4KWCIOCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSC4KSy4KS+4KSIIOCkhuCkq+CljeCkqOCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KS44KWL4KSn4KS/4KSo4KWHIOCkm+ClpFxuXG4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KS54KSw4KWC4KSu4KS+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4g4KSX4KSy4KSkIOCksOClguCkquCkruCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSk4KS+4KSo4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSn4KWH4KSw4KWIIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8sIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpI/gpIngpJ/gpL4g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkvuCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkXG5cbiDgpKvgpYfgpLDgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlX21lZGlhX3ZvbHVtZV93YXJuaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMyNDE2MTkzOTQ3NTQ3ODA2NiI+IuCkhuCkteCkvuCknCDgpLjgpLLgpY3gpLLgpL7gpLkg4KSm4KS/4KSP4KSV4KWLIOCkpOCkueCkreCkqOCljeCkpuCkviDgpK7gpL7gpKXgpL8gIOCkrOCkouCkvuCkieCkqOClhyDgpLngpYs/XG7gpKDgpYLgpLLgpYsg4KSG4KS14KS+4KSc4KSu4KS+IOCkuOClgeCkqOCljeCkpuCkviDgpLLgpL7gpK7gpYsg4KS44KSu4KSv4KSV4KWLIOCksuCkvuCkl+CkvyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWB4KSo4KWN4KSo4KWHIOCktuCkleCljeCkpOClgOCksuCkvuCkiCDgpJbgpKTgpY3gpKTgpK4g4KSq4KS+4KSw4KWN4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRpbnVlX3RvX2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTYyNjQyNzM3MjMxNjA3MDI1OCI+IuCkieCkquCksuCkrOCljeCkp+CkpOCkviDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkpuClgeCkiOCkteCkn+CkviDgpJTgpILgpLLgpL7gpLngpLDgpYLgpLLgpYcg4KSl4KS/4KSa4KS/4KSw4KS54KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9lbmFibGVkIiBtc2dpZD0iMTM4MTk3MjA0ODU2NDU0NzY4NSI+IuCkquCkueClgeCkgeCkmiDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2FjY2Vzc2liaWxpdHlfY2FuY2VsZWQiIG1zZ2lkPSIzODMzOTIzMjU3OTY2NjM1NjczIj4i4KSq4KS54KWB4KSB4KSa4KSv4KWL4KSX4KWN4KSv4KSk4KS+IOCksOCkpuCljeCkpiDgpJfgpLDgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuCkheCkueCkv+CksuClh+CkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiLgpK7gpL7gpLLgpL/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IuCkpOCljeCksOClgeCkn+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub19yZXN0cmljdGVkX2FjY291bnRzIiBtc2dpZD0iNTczOTQ2MzI0OTY3MzcyNzczNiI+IuCkquCljeCksOCkpOCkv+CkrOCkqOCljeCkp+Ckv+CkpCDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLLgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSW4KS+4KSk4KS+4KS54KSw4KWCIOCkuOCkruCksOCljeCkpeCkqCDgpJfgpLDgpY3gpKbgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm90X2ZvdW5kIiBtc2dpZD0iMzQyOTE0MTg1MzQ5ODkyNzM3OSI+IuCkr+CkuCDgpJXgpL7gpLDgpY3gpK8g4KS44KSu4KWN4KS54KS+4KSy4KSo4KWHIOCkleClgeCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSt4KWH4KSf4KS/4KSP4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IuCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EwIiBtc2dpZD0iNzg3NTQyNzQ4OTQyMDgyMTc5MyI+IklTTyBBMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEiIG1zZ2lkPSIzNzYwNzM0NDk5MDUwODc1MzU2Ij4iSVNPIEExIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMiIgbXNnaWQ9IjU5NzMyNjYzNzgwMjAxNDQzODIiPiJJU08gQTIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EzIiBtc2dpZD0iMTM3MzQwNzEwNTY4NzMwMDg4NCI+IklTTyBBMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTQiIG1zZ2lkPSI2Njg5NzcyODA3OTgyNTk3MjU0Ij4iSVNPIEE0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNSIgbXNnaWQ9IjUzNTM1NDk2NTIwMTU3NDEwNDAiPiJJU08gQTUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E2IiBtc2dpZD0iODU4NTAzODA0ODY3NDkxMTkwNyI+IklTTyBBNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTciIG1zZ2lkPSI2NjQxODM2NzE2OTYzODM5MTE5Ij4iSVNPIEE3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOCIgbXNnaWQ9Ijc1NzExMzk0Mzc0NjU2OTMzNTUiPiJJU08gQTgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E5IiBtc2dpZD0iMTM3ODQ1NTg5MTk1NzExNTA3OSI+IklTTyBBOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEwIiBtc2dpZD0iMjQ4MDc0NzQ1NzQyOTQ3NTM0NCI+IklTTyBBMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IwIiBtc2dpZD0iMzk2NTkzNTA5NzY2MTEwODAzOSI+IklTTyBCMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEiIG1zZ2lkPSIyNTA1NzUzMjg1MDEwMTE1NDM3Ij4iSVNPIEIxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMiIgbXNnaWQ9Ijg3NjM4NzQ3MDk4NTk0NTg0NTMiPiJJU08gQjIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IzIiBtc2dpZD0iNDIxMDUwNjY4ODE5MTc2NDA3NiI+IklTTyBCMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjQiIG1zZ2lkPSI1NzQ5NDA0MTY1ODg4NTI2MDM0Ij4iSVNPIEI0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNSIgbXNnaWQ9Ijc2NDA2Mjc0MTQ2MjE5MDQ3MzMiPiJJU08gQjUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I2IiBtc2dpZD0iNzM0Mjk4ODg2NDcxMjc0ODU0NCI+IklTTyBCNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjciIG1zZ2lkPSI1MDY5ODQ0MDY1MjM1MzgyNDI5Ij4iSVNPIEI3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOCIgbXNnaWQ9IjczMTY4MTg5MjIyNzg3Nzk3NzQiPiJJU08gQjgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I5IiBtc2dpZD0iNTQxNDcyNzA5NDAyNjUzMjM0MSI+IklTTyBCOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEwIiBtc2dpZD0iNTI1MTI1MzczMTgzMjA0ODE4NSI+IklTTyBCMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MwIiBtc2dpZD0iNDAwMzEzODM0MjY3MTk2NDIxNyI+IklTTyBDMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEiIG1zZ2lkPSIxOTM1MTg4MDYzMzkzNTUzMDA4Ij4iSVNPIEMxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMiIgbXNnaWQ9IjMxOTczMDc5Njk3MTIwNjk5MDQiPiJJU08gQzIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MzIiBtc2dpZD0iNDMzNTgyNjA4NzMyMTkxMzUwOCI+IklTTyBDMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzQiIG1zZ2lkPSIzNzQ1NjM5NTk4MjgxMDE1MDA1Ij4iSVNPIEM0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNSIgbXNnaWQ9IjgyNjk0NTc3NjU4MjI3OTEwMTMiPiJJU08gQzUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M2IiBtc2dpZD0iNTY2NjY2MTA1MjYwMzQ2OTMwIj4iSVNPIEM2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNyIgbXNnaWQ9Ijg2Nzg0MTMxODA3ODI2MDg0OTgiPiJJU08gQzciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M4IiBtc2dpZD0iODM5MjM3NjIwNjYyNzA0MTczMCI+IklTTyBDOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzkiIG1zZ2lkPSI5MTkxNjEzMzcyMzI0ODQ1NDA1Ij4iSVNPIEM5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMTAiIG1zZ2lkPSI3MzI3NzA5Njk5MTg0OTIwODIyIj4iSVNPIEMxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZXR0ZXIiIG1zZ2lkPSI0MTkxODA1NjE1ODI5NDcyOTUzIj4i4KSq4KSk4KWN4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2d2cm5tdF9sZXR0ZXIiIG1zZ2lkPSI3ODUzMzgyMTkyNjQ5NDA1NTA3Ij4i4KS44KSw4KSV4KS+4KSw4KWAIOCkquCkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWdhbCIgbXNnaWQ9IjY2OTc5ODI5ODgyODM4MjMxNTAiPiLgpJXgpL7gpKjgpYLgpKjgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfanVuaW9yX2xlZ2FsIiBtc2dpZD0iMzcyNzc0Mzk2OTkwMjc1ODk0OCI+Ikp1bmlvciBMZWdhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWRnZXIiIG1zZ2lkPSIyODE4NzE0NjQ4OTY2MDEyMzYiPiJMZWRnZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfdGFibG9pZCIgbXNnaWQ9IjU3NzU5NjY0MTYzMzM1NzgxMjciPiJUYWJsb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id3JpdGVfZmFpbF9yZWFzb25fY2FuY2VsbGVkIiBtc2dpZD0iNzA5MTI1ODM3ODEyMTYyNzYyNCI+IuCksOCkpuCljeCkpiDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5ub3Rfd3JpdGUiIG1zZ2lkPSI4MTMyNTA1NDE3OTM1MzM3NzI0Ij4i4KS44KS+4KSu4KS+4KSX4KWN4KSw4KWAIOCksuClh+CkluCkqOCkruCkviDgpKTgpY3gpLDgpYHgpJ/gpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfcGluIiBtc2dpZD0iMzM5NTk1MzQyMTM2ODQ3NjEwMyI+IlBJTiDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX29sZF9waW4iIG1zZ2lkPSIxNDYyMjA2MjI1NTEyOTEwNzU3Ij4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+IuCkqOCkr+CkvuCkgSBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY29uZmlybV9waW4iIG1zZ2lkPSI4NTAxNTIzODI5NjMzMTQ2MjM5Ij4i4KSo4KSv4KS+4KSBIFBJTiDgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4i4KSq4KWN4KSw4KSk4KS/4KSs4KSo4KWN4KSn4KS54KSw4KWC4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CkieCkn+CkviBQSU4g4KSs4KSo4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiJQSU4g4KS54KSw4KWCIOCkruClh+CksiDgpJbgpL7gpI/gpKjgpKjgpY3gpaQg4KSq4KWB4KSo4KSDIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0IiBtc2dpZD0iODE3Mzk4Mjc1NjI2NTc3Nzc5MiI+IlBJTiDgpIXgpKTgpL8g4KSb4KWL4KSf4KWLIOCkreCkr+Cli+ClpCDgpJXgpK7gpY3gpKTgpYDgpK7gpL4g4KWqIOCkheCkmeCljeCklSDgpLngpYHgpKgg4KSG4KS14KS24KWN4KSv4KSVIOCkm+ClpCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icmVzdHJfcGluX2NvdW50ZG93biI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4MzU2Mzk5Njk1MDM3Mjk4NzQiPiLgpJfgpLLgpKQgUElOIOClpCDgpacg4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4MDMwNjA3MzQzMjIzMjg3NjU0Ij4i4KSX4KSy4KSkIFBJTiDgpaQgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0idHJhbnNpZW50X25hdmlnYXRpb25fY29uZmlybWF0aW9uIiBtc2dpZD0iNDkwNzg0NDA0MzYxMTEyMzQyNiI+IuCkquCkn+CljeCkn+CkvyDgpKbgpYfgpJbgpL/gpKjgpYcg4KSs4KSo4KS+4KSJ4KSoIOCkuOCljeCkleCljeCksOCkv+CkqOCkleCliyDgpJvgpYfgpIngpK7gpL4g4KS44KWN4KS14KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRyYW5zaWVudF9uYXZpZ2F0aW9uX2NvbmZpcm1hdGlvbl9sb25nIiBtc2dpZD0iODA2MTY4NTkyMDUwODA4NjY5NyI+IuCkquCljeCksOCko+CkvuCksuClgCDgpKrgpJ/gpY3gpJ/gpL8g4KSm4KWH4KSW4KS/4KSo4KWHIOCkrOCkqOCkvuCkieCkqCDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpJXgpYsg4KSb4KWH4KSJ4KSs4KS+4KSfIOCkuOCljeCkteCkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCmluZGV4IDMwYWZlYTcuLjQ4YWRmNTUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iVHlwIGVlbiBQVUstY29kZSBkaWUgOCBjaWpmZXJzIG9mIGxhbmdlciBpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iVXcgU0lNLWthYXJ0IGlzIHZlcmdyZW5kZWxkIG1ldCBkZSBQVUstY29kZS4gVHlwIGRlIFBVSy1jb2RlIG9tIHRlIG9udGdyZW5kZWxlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJWb2VyIGRlIFBVSzItY29kZSBpbiBvbSBkZSBTSU0ta2FhcnQgdGUgb250Z3JlbmRlbGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+Ik1pc2x1a3QuIFNjaGFrZWwgU0lNL1JVSU0tdmVyZ3JlbmRlbGluZyBpbi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJVIGhlZWZ0IG5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9naW5nIG92ZXIgdm9vcmRhdCBkZSBzaW1rYWFydCB3b3JkdCB2ZXJncmVuZGVsZC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJVIGhlZWZ0IG5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9naW5nZW4gb3ZlciB2b29yZGF0IGRlIHNpbWthYXJ0IHdvcmR0IHZlcmdyZW5kZWxkLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSW5rb21lbmRlIGJlbGxlci1pZCI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iU3RhYXQgZGUgaG91ZGVyIHRvZSB2ZXJiaW5kaW5nIHRlIG1ha2VuIG1ldCBkZSBob29mZGludGVyZmFjZSB2YW4gZWVuIFZQTi1zZXJ2aWNlLiBOb29pdCB2ZXJlaXN0IHZvb3Igbm9ybWFsZSBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJ2ZXJiaW5kZW4gbWV0IGVlbiBhY2h0ZXJncm9uZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iSGllcm1lZSB3b3JkdCBkZSBob3VkZXIgdG9lZ2VzdGFhbiB6aWNoIHRlIHZlcmJpbmRlbiBtZXQgZGUgaG9vZmRpbnRlcmZhY2UgdmFuIGVlbiBhY2h0ZXJncm9uZC4gTm9vaXQgdmVyZWlzdCB2b29yIG5vcm1hbGUgYXBwcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InZlcmJpbmRpbmcgbWFrZW4gbWV0IGVlbiBleHRlcm4gZGlzcGxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IkhpZXJtZWUgd29yZHQgZGUgaG91ZGVyIHRvZWdlc3RhYW4gdmVyYmluZGluZyB0ZSBtYWtlbiBtZXQgZGUgaG9vZmRpbnRlcmZhY2UgdmFuIGVlbiBleHRlcm4gZGlzcGxheS4gTm9vaXQgdmVyZWlzdCB2b29yIG5vcm1hbGUgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJ2ZXJiaW5kZW4gbWV0IGVlbiB3aWRnZXRzZXJ2aWNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkhpZXJtZWUgd29yZHQgZGUgaG91ZGVyIHRvZWdlc3RhYW4gdmVyYmluZGluZyB0ZSBtYWtlbiBtZXQgZGUgaG9vZmRpbnRlcmZhY2UgdmFuIGVlbiB3aWRnZXRzZXJ2aWNlLiBOb29pdCB2ZXJlaXN0IHZvb3Igbm9ybWFsZSBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImludGVyYWN0aWUgbWV0IGFwcGFyYWF0YmVoZWVyIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJIaWVybWVlIGthbiBkZSBhcHAgU3VyZmFjZUZsaW5nZXItZnVuY3RpZXMgb3AgbGFhZyBuaXZlYXUgZ2VicnVpa2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImZyYW1lYnVmZmVyIGxlemVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IkhpZXJtZWUga2FuIGRlIGFwcCBkZSBpbmhvdWQgdmFuIGRlIGZyYW1lYnVmZmVyIGxlemVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+InRvZWdhbmcga3JpamdlbiB0b3QgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkhpZXJtZWUga2FuIGRlIGFwcCBJbnB1dEZsaW5nZXItZnVuY3RpZXMgb3AgbGFhZyBuaXZlYXUgZ2VicnVpa2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4id2lmaS1kaXNwbGF5cyBjb25maWd1cmVyZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJEZSBhcHAgdG9lc3RhYW4gd2lmaS1kaXNwbGF5cyB0ZSBjb25maWd1cmVyZW4gZW4gaGllcm1lZSB2ZXJiaW5kaW5nIHRlIG1ha2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4id2lmaS1kaXNwbGF5cyBiZWhlcmVuIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IkhpZXJtZWUga2FuIGRlIGFwcCBhbGdlbWVuZSBhdWRpby1pbnN0ZWxsaW5nZW4gd2lqemlnZW4gem9hbHMgaGV0IHZvbHVtZSBlbiB3ZWxrZSBsdWlkc3ByZWtlciB3b3JkdCBnZWJydWlrdCB2b29yIGRlIHVpdHZvZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJhdWRpbyBvcG5lbWVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iSGllcm1lZSBrYW4gZGUgYXBwIGF1ZGlvIG9wbmVtZW4gbWV0IGRlIG1pY3JvZm9vbi4gTWV0IGRlemUgdG9lc3RlbW1pbmcga2FuIGRlIGFwcCBvcCBlbGsgbW9tZW50IGF1ZGlvIG9wbmVtZW4sIHpvbmRlciBvbSB1dyBiZXZlc3RpZ2luZyB0ZSB2cmFnZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJzaW0tY29tbXVuaWNhdGllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4iSGllcm1lZSBrYW4gZGUgYXBwIG9wZHJhY2h0ZW4gdmVyemVuZGVuIG5hYXIgZGUgc2lta2FhcnQuIERpdCBpcyBlcmcgZ2V2YWFybGlqay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJmb3RvXCdzIGVuIHZpZGVvXCdzIG1ha2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkhpZXJtZWUga2FuIGRlIGFwcCBmb3RvXCdzIGVuIHZpZGVvXCdzIG1ha2VuIG1ldCBkZSBjYW1lcmEuIE1ldCBkZXplIHRvZXN0ZW1taW5nIGthbiBkZSBhcHAgZGUgY2FtZXJhIGFsdGlqZCBnZWJydWlrZW4sIHpvbmRlciB1dyBiZXZlc3RpZ2luZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiJpbmRpY2F0aWVsYW1wamUgdWl0c2NoYWtlbGVuIHdhbm5lZXIgY2FtZXJhIHdvcmR0IGdlYnJ1aWt0Ijwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iU3RhcnRwYWdpbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iV2VyayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iT3ZlcmlnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IkVyIGlzIGdlZW4gYXBwIGdldm9uZGVuIG9tIGRpdCBjb250YWN0IHRlIGJla2lqa2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBpbmNvZGUgdHlwZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJHZWVmIGRlIFBVSy1jb2RlIGVuIGRlIG5pZXV3ZSBwaW5jb2RlIG9wIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUstY29kZSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJFZW4gYXBwIHNlbGVjdGVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJLYW4gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiBuaWV0IHN0YXJ0ZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJEZWxlbiBtZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iRGVsZW4gbWV0IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iU2NodWlmZ3JlZXAuIFRpa2tlbiBlbiBibGlqdmVuIGFhbnJha2VuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJWZWVnIG9taG9vZyB2b29yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJWZWVnIG9tbGFhZyB2b29yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJWZWVnIG5hYXIgbGlua3Mgdm9vciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IlZlZWcgbmFhciByZWNodHMgdm9vciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJPbnRncmVuZGVsZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iQ2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlN0aWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iR2VsdWlkIGFhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iWm9la2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iVmVnZW4gb20gdGUgb250Z3JlbmRlbGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlNsdWl0IGVlbiBoZWFkc2V0IGFhbiBvbSB3YWNodHdvb3JkdG9ldHNlbiB0ZSBsYXRlbiB2b29ybGV6ZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iU3RpcC4iPC9zdHJpbmc+CkBAIC0xNDgyLDkgKzE0ODYsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3lzdGVlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoLWF1ZGlvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJEcmFhZGxvemUgZGlzcGxheSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJHZXJlZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IkRyYWFkbG96ZSB3ZWVyZ2F2ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik1lZGlhLXVpdHZvZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IlZlcmJpbmRpbmcgbWFrZW4gbWV0IGFwcGFyYWF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iU2NoZXJtIHN0dXJlbiBuYWFyIGFwcGFyYWF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iWm9la2VuIG5hYXIgYXBwYXJhdGVu4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iSW5zdGVsbGluZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IlZlcmJpbmRpbmcgdmVyYnJla2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNjYW5uZW4uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJWZXJiaW5kZW4uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkJlc2NoaWtiYWFyIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iT3ZlcmxheSA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IiwgYmV2ZWlsaWdkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJEcmFhZGxvemUgZGlzcGxheSBpcyBhYW5nZXNsb3RlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJEaXQgc2NoZXJtIHdvcmR0IG9wIGVlbiBhbmRlciBhcHBhcmFhdCB3ZWVyZ2VnZXZlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJTY2hlcm0gc3R1cmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iVmVyYmluZGVuIG1ldCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJTY2hlcm0gc3R1cmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJWZXJib25kZW4gbWV0IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJWZXJiaW5kaW5nIHZlcmJyZWtlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iTm9vZG9wcm9lcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlBhdHJvb24gdmVyZ2V0ZW4iPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlByb2JlZXIgaGV0IGxhdGVyIG9wbmlldXciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iVmVlZyBvbWxhYWcgdmFuYWYgZGUgYm92ZW5rYW50IG9tIGhldCB2b2xsZWRpZ2Ugc2NoZXJtIHRlIHNsdWl0ZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJHZXJlZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJSb25kZSBzY2h1aWZyZWdlbGFhciB2b29yIHVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IlJvbmRlIHNjaHVpZnJlZ2VsYWFyIHZvb3IgbWludXRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJVcmVuIHNlbGVjdGVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJNaW51dGVuIHNlbGVjdGVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+Ik1hYW5kcmFzdGVyIHZhbiBkYWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IkphYXJsaWpzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iTWFhbmQgZW4gZGFnIHNlbGVjdGVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJKYWFyIHNlbGVjdGVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IGdlc2VsZWN0ZWVyZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IHZlcndpamRlcmQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCmluZGV4IDBlMWJlZTkuLjI3NzlkZTggMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iV3Bpc3oga29kIFBVSyBza8WCYWRhasSFY3kgc2nEmSB6IGNvIG5ham1uaWVqIDggY3lmci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iS2FydGEgU0lNIGplc3QgemFibG9rb3dhbmEga29kZW0gUFVLLiBXcHJvd2Fkxboga29kIFBVSywgYWJ5IG9kYmxva293YcSHIGthcnTEmS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJXcHJvd2Fkxboga29kIFBVSzIsIGFieSBvZGJsb2tvd2HEhyBrYXJ0xJkgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+Ik5pZSB1ZGHFgm8gc2nEmS4gV8WCxIVjeiBibG9rYWTEmSBrYXJ0eSBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJNYXN6IGplc3pjemUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHByw7NixJksIHphbmltIGthcnRhIFNJTSB6b3N0YW5pZSB6YWJsb2tvd2FuYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJNYXN6IGplc3pjemUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHByw7NiKHkpLCB6YW5pbSBrYXJ0YSBTSU0gem9zdGFuaWUgemFibG9rb3dhbmEuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJOYXp3YSByb3ptw7N3Y3kgcHJ6eSBwb8WCxIVjemVuaWFjaCBwcnp5Y2hvZHrEhWN5Y2giPC9zdHJpbmc+CkBAIC0yNTgsOCArMjYzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVNbXMiIG1zZ2lkPSI1MzMwMTk0MzcyNjMyMTIyNjAiPiJQb3p3YWxhIGFwbGlrYWNqaSBuYSBvZGJpZXJhbmllIGkgcHJ6ZXR3YXJ6YW5pZSBNTVMtw7N3LiBUbyBvem5hY3phLCDFvGUgYXBsaWthY2phIGLEmWR6aWUgbW9nxYJhIGJleiBUd29qZWogd2llZHp5IG1vbml0b3Jvd2HEhyBpIHVzdXdhxIcgd2lhZG9tb8WbY2kgd3lzecWCYW5lIGRvIFR3b2plZ28gdXJ6xIVkemVuaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iMTgwMzQ3NzY2MDg0NjI4ODA4OSI+Im9kYmnDs3IgZW1pc2ppIGFsYXJtb3d5Y2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iODQ4NTI0MDcwMjYyNDMxOTc0Ij4iUG96d2FsYSBhcGxpa2FjamkgbmEgb2RiaWVyYW5pZSBpIHByemV0d2FyemFuaWUga29tdW5pa2F0w7N3IHRyYW5zbWlzamkgYWxhcm1vd3ljaC4gVG8gcG96d29sZW5pZSBqZXN0IGRvc3TEmXBuZSB0eWxrbyBkbGEgYXBsaWthY2ppIHN5c3RlbW93eWNoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+Im9kY3p5dCB3aWFkb21vxZtjaSB6IHNpZWNpIGtvbcOzcmtvd2VqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iNjM2MTk3Mjc3NjA4MDQ1ODk3OSI+IlplendhbGEgYXBsaWthY2ppIG5hIG9kY3p5dCB3aWFkb21vxZtjaSB6IHNpZWNpIGtvbcOzcmtvd2VqIG9kZWJyYW55Y2ggbmEgdXJ6xIVkemVuaXUuIEFsZXJ0eSBzaWVjaSBrb23Ds3Jrb3dlaiBzxIUgZG9zdGFyY3phbmUgdyBuaWVrdMOzcnljaCBsb2thbGl6YWNqYWNoIHcgY2VsdSBvc3RyemXFvGVuaWEgQ2nEmSBvIHN5dHVhY2phY2ggYWxhcm1vd3ljaC4gWsWCb8WbbGl3ZSBhcGxpa2FjamUgbW9nxIUgd3DFgnl3YcSHIG5hIHd5ZGFqbm/Fm8SHIGx1YiB6YWvFgsOzY2HEhyBkemlhxYJhbmllIHVyesSFZHplbmlhIHBvIG9kZWJyYW5pdSB3aWFkb21vxZtjaSBhbGFybW93ZWogeiBzaWVjaSBrb23Ds3Jrb3dlai4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjE1OTgzMjg4NDM2MTk2NDYxNjYiPiJvZGN6eXQga29tdW5pa2F0w7N3IHogc2llY2kga29tw7Nya293ZWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4iWmV6d2FsYSBhcGxpa2FjamkgbmEgb2Rjenl0IGtvbXVuaWthdMOzdyB6IHNpZWNpIGtvbcOzcmtvd2VqIG9kZWJyYW55Y2ggbmEgdXJ6xIVkemVuaXUuIEtvbXVuaWthdHkgYWxhcm1vd2UgeiBzaWVjaSBrb23Ds3Jrb3dlaiBzxIUgZG9zdGFyY3phbmUgdyBuaWVrdMOzcnljaCBsb2thbGl6YWNqYWNoIHcgY2VsdSBvc3RyemXFvGVuaWEgQ2nEmSBvIHN5dHVhY2phY2ggemFncm/FvGVuaWEuIFrFgm/Fm2xpd2UgYXBsaWthY2plIG1vZ8SFIHdwxYJ5d2HEhyBuYSB3eWRham5vxZvEhyBsdWIgemFrxYLDs2NhxIcgZHppYcWCYW5pZSB1cnrEhWR6ZW5pYSBwbyBvZGVicmFuaXUga29tdW5pa2F0dSBhbGFybW93ZWdvIHogc2llY2kga29tw7Nya293ZWouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kU21zIiBtc2dpZD0iNTYwMDgzMDYxMjE0NzY3MTUyOSI+Ind5c3nFgmFuaWUgd2lhZG9tb8WbY2kgU01TIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiJQb3p3YWxhIGFwbGlrYWNqaSBuYSB3eXN5xYJhbmllIFNNUy3Ds3cuIE1vxbxlIHRvIHNrdXRrb3dhxIcgbmllb2N6ZWtpd2FueW1pIG9wxYJhdGFtaS4gWsWCb8WbbGl3ZSBhcGxpa2FjamUgbW9nxIUgZ2VuZXJvd2HEhyBrb3N6dHksIHd5c3nFgmFqxIVjIHdpYWRvbW/Fm2NpIGJleiBUd29qZWdvIHBvdHdpZXJkemVuaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iODcxMzg4OTEwNTMwNTk0MzIwMCI+Ind5c3nFgmFuaWUgemRhcnplxYQgb2Rwb3dpZWR6aSBwcnpleiBTTVMiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlBvendhbGEgbmEgdHdvcnplbmllIHBvd2nEhXphbmlhIHogaW50ZXJmZWpzZW0gbmFqd3nFvHN6ZWdvIHBvemlvbXUgdXPFgnVnaSBWUE4uIE5pZSBwb3dpbm5vIGJ5xIcgbmlnZHkgcG90cnplYm5lIHcgcHJ6eXBhZGt1IHp3eWvFgnljaCBhcGxpa2FjamkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InBvd2nEhXphbmllIHogdGFwZXTEhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iUG96d2FsYSBuYSB0d29yemVuaWUgcG93acSFemFuaWEgeiBpbnRlcmZlanNlbSBuYWp3ecW8c3plZ28gcG96aW9tdSB0YXBldHkuIE5pZXByemV6bmFjem9uZSBkbGEgend5a8WCeWNoIGFwbGlrYWNqaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InBvd2nEhXphbmllIHogd3nFm3dpZXRsYWN6ZW0gemRhbG55bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IlplendhbGEgbmEgdHdvcnplbmllIHBvd2nEhXphbmlhIHogaW50ZXJmZWpzZW0gbmFqd3nFvHN6ZWdvIHBvemlvbXUgd3nFm3dpZXRsYWN6YSB6ZGFsbmVnby4gTmllcHJ6ZXpuYWN6b25lIGRsYSB6d3lrxYJ5Y2ggYXBsaWthY2ppLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InBvd2nEhXphbmllIHogdXPFgnVnxIUgd2lkxbxldMOzdyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJaZXp3YWxhIG5hIHR3b3J6ZW5pZSBwb3dpxIV6YW5pYSB6IGludGVyZmVqc2VtIG5hand5xbxzemVnbyBwb3ppb211IHVzxYJ1Z2kgd2lkxbxldMOzdy4gTmllIHBvd2lubm8gYnnEhyBuaWdkeSBwb3RyemVibmUgdyBwcnp5cGFka3Ugend5a8WCeWNoIGFwbGlrYWNqaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJpbnRlcmFrY2phIHogYWRtaW5pc3RyYXRvcmVtIHVyesSFZHplbmlhIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJQb3p3YWxhIGFwbGlrYWNqaSBuYSB3eWtvcnp5c3RhbmllIGZ1bmtjamkgbmlza2llZ28gcG96aW9tdSB1c8WCdWdpIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImN6eXRhbmllIGJ1Zm9yYSByYW1raSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQb3p3YWxhIGFwbGlrYWNqaSBuYSBvZGN6eXQgemF3YXJ0b8WbY2kgYnVmb3JhIHJhbWtpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImRvc3TEmXAgZG8gSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IlplendhbGEgYXBsaWthY2ppIG5hIHd5a29yenlzdGFuaWUgbmlza29wb3ppb21vd3ljaCBmdW5rY2ppIHVzxYJ1Z2kgSW5wdXRGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ia29uZmlndXJvd2FuaWUgd3nFm3dpZXRsYWN6eSBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IlplendhbGEgYXBsaWthY2ppIG5hIGtvbmZpZ3VyYWNqxJkgd3nFm3dpZXRsYWN6eSBXaS1GaSBpIMWCxIVjemVuaWUgeiBuaW1pLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iemFyesSFZHphbmllIHd5xZt3aWV0bGFjemFtaSBXaS1GaSI8L3N0cmluZz4KQEAgLTQ5NSw2ICs1MDQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiJQb3p3YWxhIGFwbGlrYWNqaSBuYSBtb2R5Zmlrb3dhbmllIGdsb2JhbG55Y2ggdXN0YXdpZcWEIGTFundpxJlrdSwgdGFraWNoIGphayBnxYJvxZtub8WbxIcgb3JheiB1cnrEhWR6ZW5pZSB3eWrFm2Npb3dlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4ibmFncnl3YW5pZSBkxbp3acSZa3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiJQb3p3YWxhIGFwbGlrYWNqaSBuYSBuYWdyeXdhbmllIGTFundpxJlrdSBwcnpleiBtaWtyb2Zvbi4gQXBsaWthY2phIHogdHltIHVwcmF3bmllbmllbSBtb8W8ZSBuYWdyeXdhxIcgZMW6d2nEmWsgdyBkb3dvbG55bSBtb21lbmNpZSBiZXogVHdvamVnbyBwb3R3aWVyZHplbmlhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4ia29tdW5pa2FjamEgeiBrYXJ0xIUgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4iUG96d2FsYSBhcGxpa2FjamkgbmEgd3lzecWCYW5pZSBwb2xlY2XFhCBkbyBrYXJ0eSBTSU0uIFRvIGJhcmR6byBuaWViZXpwaWVjem5lLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+Ind5a29ueXdhbmllIHpkasSZxIcgaSBmaWxtw7N3IHdpZGVvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBvendhbGEgYXBsaWthY2ppIG5hIHJvYmllbmllIHpkasSZxIcgaSBuYWdyeXdhbmllIGZpbG3Ds3cgcHJ6eSB1xbx5Y2l1IGFwYXJhdHUuIEFwbGlrYWNqYSB6IHR5bSB1cHJhd25pZW5pZW0gbW/FvGUgdcW8ecSHIGFwYXJhdHUgdyBkb3dvbG55bSBtb21lbmNpZSBiZXogVHdvamVnbyBwb3R3aWVyZHplbmlhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+Ind5xYLEhWN6IHdza2HFum5payBMRUQgdHJhbnNtaXNqaSwgZ2R5IGFwYXJhdCBqZXN0IHcgdcW8eWNpdSI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IkRvbW93eSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiJTxYJ1xbxib3d5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJJbm55Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IkJyYWsgYXBsaWthY2ppIGRvIHd5xZt3aWV0bGVuaWEgdGVnbyBrb250YWt0dS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJXcGlzeiBrb2QgUElOLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IldwaXN6IGtvZCBQVUsgaSBub3d5IGtvZCBQSU4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJLb2QgUFVLIjwvc3RyaW5nPgpAQCAtMTIwNCw3ICsxMjE2LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+Ik5hIGN6YXMgcG/FgsSFY3plbmlhIHogPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiB0ZWxlZm9uIHpvc3RhbmllIHR5bWN6YXNvd28gb2TFgsSFY3pvbnkgb2QgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfY2hhcmFjdGVyIiBtc2dpZD0iMzM2NTU1MDEyMDYxNzcwMTc0NSI+IldzdGF3IHpuYWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiJXeXN5xYJhbmllIHdpYWRvbW/Fm2NpIFNNUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsgd3lzecWCYSB3aWVsZSBTTVMtw7N3LiBDaGNlc3ogcG96d29sacSHIHRlaiBhcGxpa2FjamkgZGFsZWogd3lzecWCYcSHIFNNUy15PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4iQXBsaWthY2phICZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IHd5c3nFgmEgd2llbGUgU01TLcOzdy4gQ2hjZXN6IHBvendvbGnEhyB0ZWogYXBsaWthY2ppIGRhbGVqIHd5c3nFgmHEhyBTTVMteT8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4iUG96d8OzbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4iT2Rtw7N3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IGNoY2Ugd3lzxYJhxIcgd2lhZG9tb8WbxIcgZG8gJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7LiI8L3N0cmluZz4KQEAgLTEzNDksOSArMTM2MSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJuZXh0X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEwODA1NTUxMDQ2Nzc5OTI0MDgiPiJEYWxlaiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNraXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTI3NTM2MjI5OTQ3MTYzMTgxOSI+IlBvbWnFhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlX3dhcm5pbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDg5MDg5NDI2NzQ1NDg2NzI3NiI+Ild5c29raSBwb3ppb20gdcW8eWNpYSBkYW55Y2giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMzM0MDgyMjIyODU5OTMzNzc0MyI+IkRvdGtuaWosIGFieSB1enlza2HEhyB3acSZY2VqIGluZm9ybWFjamkgbmEgdGVtYXQgdcW8eXdhbmlhIGRhbnljaCBrb23Ds3Jrb3d5Y2guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjMzNDA4MjIyMjg1OTkzMzc3NDMiPiJEb3RrbmlqLCBhYnkgdXp5c2thxIcgd2nEmWNlaiBpbmZvcm1hY2ppIG5hIHRlbWF0IHXFvHl3YW5pYSBkYW55Y2ggbW9iaWxueWNoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2MjY5NTQxODk3NzI5NzgxMzMyIj4iUHJ6ZWtyb2N6b25vIGxpbWl0IGRhbnljaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjU0NDM0NTczMjEzNTQ5MDcxODEiPiJEb3RrbmlqLCBhYnkgdXp5c2thxIcgd2nEmWNlaiBpbmZvcm1hY2ppIG5hIHRlbWF0IHXFvHl3YW5pYSBkYW55Y2gga29tw7Nya293eWNoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjU0NDM0NTczMjEzNTQ5MDcxODEiPiJEb3RrbmlqLCBhYnkgdXp5c2thxIcgd2nEmWNlaiBpbmZvcm1hY2ppIG5hIHRlbWF0IHXFvHl3YW5pYSBkYW55Y2ggbW9iaWxueWNoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX21hdGNoZXMiIG1zZ2lkPSI4MTI5NDIxOTA4OTE1ODQwNzM3Ij4iQnJhayB3eW5pa8OzdyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZpbmRfb25fcGFnZSIgbXNnaWQ9IjE5NDY3OTkyMzM4MjI4MjAzODQiPiJabmFqZMW6IG5hIHN0cm9uaWUiPC9zdHJpbmc+CiAgIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+Ild5YmllcnogYXBsaWthY2rEmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ik5pZSB1ZGHFgm8gc2nEmSB1cnVjaG9tacSHIGFwbGlrYWNqaSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iVWRvc3TEmXBuaWogcHJ6ZXoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iVWRvc3TEmXBuaWogcHJ6ZXogPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJVY2h3eXQgcHJ6ZXN1d255LiBEb3RrbmlqIGkgcHJ6eXRyenltYWouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlByemVzdcWEIHcgZ8OzcsSZOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iUHJ6ZXN1xYQgdyBkw7PFgjogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlByemVzdcWEIHcgbGV3bzogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJQcnplc3XFhCB3IHByYXdvOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJPZGJsb2t1aiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJBcGFyYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iV3ljaXN6ZW5pZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJXxYLEhWN6IGTFundpxJlrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTenVrYWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJQcnplc3XFhCwgYWJ5IG9kYmxva293YcSHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJQb2TFgsSFY3ogemVzdGF3IHPFgnVjaGF3a293eSwgYWJ5IHd5c8WCdWNoYcSHIHpuYWvDs3cgaGFzxYJhIHd5cG93aWFkYW55Y2ggbmEgZ8WCb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iS3JvcGthIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJExbp3acSZayBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+Ild5xZt3aWV0bGFjeiBiZXpwcnpld29kb3d5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IkdvdG93ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ild5asWbY2llIG11bHRpbWVkacOzdyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iUG/FgsSFY3ogeiB1cnrEhWR6ZW5pZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJQcmV6ZW50dWogZWtyYW4gbmEgdXJ6xIVkemVuaXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJTenVrYW0gdXJ6xIVkemXFhOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IlVzdGF3aWVuaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iUm96xYLEhWN6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNrYW51asSZLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4ixYHEhWN6xJkuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRvc3TEmXBuZSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Ik5ha8WCYWRrYSBuciA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBiZXpwaWVjem55Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJQb2TFgsSFY3pvbnkgamVzdCB3ecWbd2lldGxhY3ogYmV6cHJ6ZXdvZG93eSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJUZW4gZWtyYW4gamVzdCB3ecWbd2lldGxhbnkgbmEgaW5ueW0gdXJ6xIVkemVuaXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iUm96cG9jenluYW0gcHJlemVudG93YW5pZSBla3JhbnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLFgcSFY3rEmSB6IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IlRyd2EgcHJlemVudG93YW5pZSBla3JhbnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IlBvxYLEhWN6b25vIHogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IlJvesWCxIVjeiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iUG/FgsSFY3plbmllIGFsYXJtb3dlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iTmllIHBhbWnEmXRhbSB3em9ydSI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY2MCwxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iU3Byw7NidWogcG9ub3duaWUgcMOzxbpuaWVqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlByemVzdcWEIHogZ8OzcnkgdyBkw7PFgiwgYnkgemFta27EhcSHIHBlxYJueSBla3Jhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkdvdG93ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IktvxYJvd3kgc3V3YWsgZ29kemluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJLb8WCb3d5IHN1d2FrIG1pbnV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+Ild5YmllcnogZ29kemlueSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+Ild5YmllcnogbWludXR5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJTaWF0a2EgbWllc2nEmWN6bmEgeiBkbmlhbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJMaXN0YSBsYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+Ild5YmllcnogbWllc2nEhWMgaSBkemllxYQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJXeWJpZXJ6IHJvayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiJXeWJyYcWCZcWbIDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IHVzdW5pxJl0ZSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAppbmRleCBmM2M0MDIwLi4wYTYzOGNjIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iSW50cm9kdXphIHVtIFBVSyBxdWUgdGVuaGEgOCBvdSBtYWlzIGFsZ2FyaXNtb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+Ik8gc2V1IGNhcnTDo28gU0lNIGVzdMOhIGJsb3F1ZWFkbyBjb20gUFVLLiBJbnRyb2R1emEgbyBjw7NkaWdvIFBVSyBwYXJhIGRlc2Jsb3F1ZcOhLWxvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkludHJvZHV6YSBvIFBVSzIgcGFyYSBkZXNibG9xdWVhciBvIGNhcnTDo28gU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IkHDp8OjbyBzZW0gw6p4aXRvLiBBdGl2ZSBvIGJsb3F1ZWlvIGRvIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IlRlbSBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmEgYW50ZXMgZGUgbyBjYXJ0w6NvIFNJTSBmaWNhciBibG9xdWVhZG8uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iVGVtIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgYW50ZXMgZGUgbyBjYXJ0w6NvIFNJTSBmaWNhciBibG9xdWVhZG8uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJRCBkbyBBdXRvciBkYSBDaGFtYWRhIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJQZXJtaXRlIHF1ZSBvIHRpdHVsYXIgc2UgdmluY3VsZSDDoCBpbnRlcmZhY2UgZGUgbsOtdmVsIHN1cGVyaW9yIGRlIHVtIHNlcnZpw6dvIGRlIFZQTi4gTnVuY2EgZGV2ZXLDoSBzZXIgbmVjZXNzw6FyaW8gcGFyYSBhcGxpY2HDp8O1ZXMgbm9ybWFpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4idmluY3VsYXIgYSB1bWEgaW1hZ2VtIGRlIGZ1bmRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJQZXJtaXRlIGFvIHRpdHVsYXIgdmluY3VsYXItc2Ugw6AgaW50ZXJmYWNlIGRlIG7DrXZlbCBzdXBlcmlvciBkZSB1bWEgaW1hZ2VtIGRlIGZ1bmRvLiBOdW5jYSBkZXZlcsOhIHNlciBuZWNlc3PDoXJpbyBwYXJhIGFwbGljYcOnw7VlcyBub3JtYWlzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iYXNzb2NpYXIgYSB1bSBlY3LDoyByZW1vdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJQZXJtaXRlIGFvIGRldGVudG9yIGFzc29jaWFyIGEgaW50ZXJmYWNlIGRlIG7DrXZlbCBzdXBlcmlvciBhIHVtIGVjcsOjIHJlbW90by4gTnVuY2EgZGV2ZSBzZXIgbmVjZXNzw6FyaW8gcGFyYSBhcGxpY2HDp8O1ZXMgbm9ybWFpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJ2aW5jdWxhciBhIHVtIHNlcnZpw6dvIGRlIHdpZGdldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJQZXJtaXRlIHF1ZSBvIHRpdHVsYXIgdmluY3VsZSBhIGludGVyZmFjZSBkZSBuw612ZWwgc3VwZXJpb3IgZGUgdW0gc2VydmnDp28gZGUgd2lkZ2V0LiBOdW5jYSBkZXZlcsOhIHNlciBuZWNlc3PDoXJpbyBwYXJhIGFwbGljYcOnw7VlcyBub3JtYWlzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImludGVyYWdpciBjb20gdW0gYWRtaW5pc3RyYWRvciBkbyBkaXNwb3NpdGl2byI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iUGVybWl0ZSDDoCBhcGxpY2HDp8OjbyB1dGlsaXphciBmdW5jaW9uYWxpZGFkZXMgZGUgU3VyZmFjZUZsaW5nZXIgZGUgbsOtdmVsIGluZmVyaW9yLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImxlciBtZW3Ds3JpYSBpbnRlcm3DqWRpYSBkZSBmb3RvZ3JhbWFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IlBlcm1pdGUgw6AgYXBsaWNhw6fDo28gbGVyIG8gY29udGXDumRvIGRhIG1lbcOzcmlhIGludGVybcOpZGlhIGRlIGZvdG9ncmFtYXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iYWNlZGVyIGEgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IlBlcm1pdGUgcXVlIGEgYXBsaWNhw6fDo28gdXRpbGl6ZSBmdW5jaW9uYWxpZGFkZXMgZGUgSW5wdXRGbGluZ2VyIGRlIG7DrXZlbCBpbmZlcmlvci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ImNvbmZpZ3VyYXIgdmlzb3JlcyBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IlBlcm1pdGUgcXVlIGEgYXBsaWNhw6fDo28gc2UgY29uZmlndXJlIGUgc2UgbGlndWUgYSB2aXNvcmVzIFdpLUZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iY29udHJvbGFyIHZpc29yZXMgV2ktRmkiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4iUGVybWl0ZSBxdWUgYSBhcGxpY2HDp8OjbyBtb2RpZmlxdWUgZGVmaW5pw6fDtWVzIGRlIMOhdWRpbyBnbG9iYWlzLCB0YWlzIGNvbW8gbyB2b2x1bWUgZSBxdWFsIG8gYWx0aWZhbGFudGUgdXRpbGl6YWRvIHBhcmEgYSBzYcOtZGEgZGUgc29tLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4iZ3JhdmFyIMOhdWRpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IlBlcm1pdGUgcXVlIGEgYXBsaWNhw6fDo28gZ3JhdmUgw6F1ZGlvIGNvbSBvIG1pY3JvZm9uZS4gRXN0YSBhdXRvcml6YcOnw6NvIHBlcm1pdGUgcXVlIGEgYXBsaWNhw6fDo28gZ3JhdmUgw6F1ZGlvIGVtIHF1YWxxdWVyIGFsdHVyYSBzZW0gYSBjb25maXJtYcOnw6NvIGRvIHV0aWxpemFkb3IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJjb211bmljYcOnw6NvIGNvbSBvIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IlBlcm1pdGUgcXVlIGEgYXBsaWNhw6fDo28gZW52aWUgY29tYW5kb3MgcGFyYSBvIFNJTS4gRXN0YSBhw6fDo28gw6kgbXVpdG8gcGVyaWdvc2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4idGlyYXIgZm90b2dyYWZpYXMgZSB2w61kZW9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBlcm1pdGUgcXVlIGEgYXBsaWNhw6fDo28gdGlyZSBmb3RvZ3JhZmlhcyBlIGdyYXZlIHbDrWRlb3MgY29tIGEgY8OibWFyYS4gRXN0YSBhdXRvcml6YcOnw6NvIHBlcm1pdGUgcXVlIGEgYXBsaWNhw6fDo28gdXRpbGl6ZSBhIGPDom1hcmEgc2VtIGEgc3VhIGNvbmZpcm1hw6fDo28gZW0gcXVhbHF1ZXIgYWx0dXJhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImRlc2F0aXZhciBMRUQgaW5kaWNhZG9yIGRlIHRyYW5zbWlzc8OjbyBjb20gYSBjw6JtYXJhIGVtIHV0aWxpemHDp8OjbyI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IkNhc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iRW1wcmVnbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iT3V0cm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4iTsOjbyBmb3JhbSBlbmNvbnRyYWRhcyBhcGxpY2HDp8O1ZXMgcGFyYSB2aXN1YWxpemFyIGVzdGUgY29udGFjdG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iRXNjcmV2YSBvIGPDs2RpZ28gUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iRXNjcmV2YSBvIFBVSyBlIG8gbm92byBjw7NkaWdvIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iQ8OzZGlnbyBQVUsiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iRXNjb2xoZXIgdW1hIGFwbGljYcOnw6NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iTsOjbyBmb2kgcG9zc8OtdmVsIGluaWNpYXIgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IlBhcnRpbGhhciBjb206Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkNvbXBhcnRpbGhhciBjb20gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJCYXJyYSBkZXNsaXphbnRlLiBUb3F1ZSAmYW1wOyBuw6NvIHNvbHRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJEZXNsaXplIHBhcmEgY2ltYSBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iRGVzbGl6ZSBwYXJhIGJhaXhvIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJEZXNsaXplIHBhcmEgYSBlc3F1ZXJkYSBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkRlc2xpemUgcGFyYSBhIGRpcmVpdGEgcGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iRGVzYmxvcXVlYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iQ8OibWFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTaWxlbmNpb3NvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlNvbSBhdGl2YWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJQZXNxdWlzYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJEZXNsaXphciByYXBpZGFtZW50ZSBwYXJhIGRlc2Jsb3F1ZWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJMaWd1ZSBvcyBhdXNjdWx0YWRvcmVzIGNvbSBtaWNyb2ZvbmUgaW50ZWdyYWRvIHBhcmEgb3V2aXIgYXMgdGVjbGFzIGRhIHBhbGF2cmEtcGFzc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUG9udG8uIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iw4F1ZGlvIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iVmlzdWFsaXphw6fDo28gc2VtIGZpb3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iQ29uY2x1w61kbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IlNhw61kYSBkZSBzb20gbXVsdGltw6lkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IkxpZ2FyIGFvIGRpc3Bvc2l0aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iVHJhbnNtaXRpciBlY3LDoyBwYXJhIG8gZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJBIHBlc3F1aXNhciBkaXNwb3NpdGl2b3PigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJEZWZpbmnDp8O1ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iRGVzbGlnYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iQSBwcm9jdXJhci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IkEgbGlnYXIuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRpc3BvbsOtdmVsIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iU29icmVwb3Npw6fDo28gIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBwcHAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBwcm90ZWdpZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+Ik8gRGlzcGxheSBzZW0gZmlvcyBlc3TDoSBsaWdhZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iRXN0ZSBlY3LDoyBlc3TDoSBhIHNlciBhcHJlc2VudGFkbyBub3V0cm8gZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iQSB0cmFuc21pdGlyIG8gZWNyw6MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJBIGxpZ2FyIGEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iQSB0cmFuc21pdGlyIG8gZWNyw6MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IkxpZ2FkbyBhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJEZXNsaWdhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iQ2hhbWFkYSBkZSBlbWVyZ8OqbmNpYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IkVzcXVlY2V1LXNlIGRhIFNlcXXDqm5jaWEiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlRlbnRlIG5vdmFtZW50ZSBtYWlzIHRhcmRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkRlc2xpemUgcmFwaWRhbWVudGUgcGFyYSBiYWl4byBwYXJhIHNhaXIgZG8gZWNyw6MgaW50ZWlyby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkNvbmNsdcOtZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJDb250cm9sbyBkZSBkZXNsaXplIGNpcmN1bGFyIGRhcyBob3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iQ29udHJvbG8gZGUgZGVzbGl6ZSBjaXJjdWxhciBkb3MgbWludXRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJTZWxlY2lvbmFyIGhvcmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iU2VsZWNpb25hciBtaW51dG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJHcmVsaGEgZGUgZGlhcyBkbyBtw6pzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTGlzdGEgZGUgYW5vcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iU2VsZWNpb25hciBtw6pzIGUgZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iU2VsZWNpb25hciBhbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IHNlbGVjaW9uYWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gZWxpbWluYWRvIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAppbmRleCAxNWE2MTMwLi5kZGRlZDBmIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IkRpZ2l0ZSB1bSBQVUsgY29tIG9pdG8gbsO6bWVyb3Mgb3UgbWFpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iTyBzZXUgY2FydMOjbyBTSU0gZXN0w6EgYmxvcXVlYWRvIHBvciB1bSBQVUsuIERpZ2l0ZSBvIGPDs2RpZ28gUFVLIHBhcmEgZGVzYmxvcXVlw6EtbG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iRGlnaXRlIG8gUFVLMiBwYXJhIGRlc2Jsb3F1ZWFyIG8gY2FydMOjbyBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iRmFsaGEuIEF0aXZlIG8gYmxvcXVlaW8gZG8gU0lNL1ItVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IlRlbnRhdGl2YXMgcmVzdGFudGVzOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIENhc28gbyBjw7NkaWdvIGNvcnJldG8gbsOjbyBzZWphIGRpZ2l0YWRvLCBvIFNJTSBzZXLDoSBibG9xdWVhZG8uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iVGVudGF0aXZhcyByZXN0YW50ZXM6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4gQ2FzbyBvIGPDs2RpZ28gY29ycmV0byBuw6NvIHNlamEgZGlnaXRhZG8sIG8gU0lNIHNlcsOhIGJsb3F1ZWFkby4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IklEIGRvIGNoYW1hZG9yIGRlIGVudHJhZGEiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlBlcm1pdGUgcXVlIHNldSBwcm9wcmlldMOhcmlvIHN1amVpdGUgYSBpbnRlcmZhY2UgZGUgYWx0byBuw612ZWwgZGUgdW0gc2VydmnDp28gZGUgVlBOLiBOdW5jYSBkZXZlIHNlciBuZWNlc3PDoXJpbyBwYXJhIGFwbGljYXRpdm9zIG5vcm1haXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InN1amVpdGFyLXNlIGEgdW0gcGxhbm8gZGUgZnVuZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IlBlcm1pdGUgcXVlIG8gcHJvcHJpZXTDoXJpbyB1dGlsaXplIGludGVyZmFjZSBkZSBuw612ZWwgc3VwZXJpb3IgZGUgdW0gcGxhbm8gZGUgZnVuZG8uIE51bmNhIGRldmUgc2VyIG5lY2Vzc8OhcmlvIHBhcmEgYXBsaWNhdGl2b3Mgbm9ybWFpcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InVzYXIgdW1hIHRlbGEgcmVtb3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iUGVybWl0ZSBxdWUgbyBwcm9wcmlldMOhcmlvIHVzZSBhIGludGVyZmFjZSBkZSBuw612ZWwgc3VwZXJpb3IgZGUgdW1hIHRlbGEgcmVtb3RhLiBOw6NvIGRldmUgc2VyIG5lY2Vzc8OhcmlvIHBhcmEgYXBsaWNhdGl2b3MgY29tdW5zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InN1amVpdGFyLXNlIGEgdW0gc2VydmnDp28gZGUgd2lkZ2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlBlcm1pdGUgcXVlIG8gcHJvcHJpZXTDoXJpbyB1dGlsaXplIGEgaW50ZXJmYWNlIGRlIG7DrXZlbCBzdXBlcmlvciBkZSB1bSBzZXJ2acOnbyBkZSB3aWRnZXQuIE51bmNhIGRldmUgc2VyIG5lY2Vzc8OhcmlvIHBhcmEgYXBsaWNhdGl2b3Mgbm9ybWFpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJpbnRlcmFnaXIgY29tIG8gYWRtaW5pc3RyYWRvciBkZSB1bSBkaXNwb3NpdGl2byI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iUGVybWl0ZSBxdWUgbyBhcGxpY2F0aXZvIHVzZSByZWN1cnNvcyBjb20gYmFpeG9zIG7DrXZlaXMgZGUgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ibGVyIG8gYnVmZmVyIGRvIGZyYW1lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IlBlcm1pdGUgcXVlIG8gYXBsaWNhdGl2byBsZWlhIG8gY29udGXDumRvIGRvIGJ1ZmZlciBkZSBmcmFtZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJhY2Vzc2FyIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJQZXJtaXRlIHF1ZSBvIGFwbGljYXRpdm8gdXNlIHJlY3Vyc29zIGNvbSBiYWl4b3MgbsOtdmVpcyBkZSBJbnB1dEZpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ImNvbmZpZ3VyYXIgbW9uaXRvcmVzIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iUGVybWl0ZSBxdWUgbyBhcGxpY2F0aXZvIGNvbmZpZ3VyZSBlIGNvbmVjdGUgYSBtb25pdG9yZXMgV2ktRmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJjb250cm9sYXIgbW9uaXRvcmVzIFdpLUZpIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IlBlcm1pdGUgcXVlIG8gYXBsaWNhdGl2byBtb2RpZmlxdWUgY29uZmlndXJhw6fDtWVzIGRlIMOhdWRpbyBnbG9iYWlzIGNvbW8gdm9sdW1lIGUgYWx0by1mYWxhbnRlcyBkZSBzYcOtZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJncmF2YXIgw6F1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iUGVybWl0ZSBxdWUgbyBhcGxpY2F0aXZvIGdyYXZlIMOhdWRpbyBjb20gbyBtaWNyb2ZvbmUuIEVzdGEgcGVybWlzc8OjbyBhdXRvcml6YSBvIGFwbGljYXRpdm8gYSBncmF2YXIgw6F1ZGlvIGEgcXVhbHF1ZXIgbW9tZW50bywgc2VtIHN1YSBjb25maXJtYcOnw6NvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4iY29tdW5pY2HDp8OjbyBjb20gc2ltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4iUGVybWl0ZSBxdWUgbyBhcGxpY2F0aXZvIGVudmllIGNvbWFuZG9zIGFvIFNJTS4gTXVpdG8gcGVyaWdvc28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4idGlyYXIgZm90b3MgZSBncmF2YXIgdsOtZGVvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQZXJtaXRlIHF1ZSBvIGFwbGljYXRpdm8gdGlyZSBmb3RvcyBlIGZpbG1lIHbDrWRlb3MgY29tIGEgY8OibWVyYS4gRXN0YSBwZXJtaXNzw6NvIGF1dG9yaXphIG8gYXBsaWNhdGl2byBhIHVzYXIgYSBjw6JtZXJhIGEgcXVhbHF1ZXIgbW9tZW50byBzZW0gc3VhIGNvbmZpcm1hw6fDo28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4iZGVzYXRpdmFyIGEgdHJhbnNtaXNzw6NvIGRvIExFRCBpbmRpY2Fkb3IgcXVhbmRvIGEgY8OibWVyYSBlc3RpdmVyIGVtIHVzbyI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IlDDoWdpbmEgaW5pY2lhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiJDb21lcmNpYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+Ik91dHJvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJOZW5odW0gYXBsaWNhdGl2byBlbmNvbnRyYWRvIHBhcmEgdmlzdWFsaXphciBlc3RlIGNvbnRhdG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iSW5zaXJhIG8gY8OzZGlnbyBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJJbnNpcmEgbyBQVUsgZSBvIG5vdm8gY8OzZGlnbyBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IkPDs2RpZ28gUFVLIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlNlbGVjaW9uZSB1bSBhcGxpY2F0aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iTsOjbyBmb2kgcG9zc8OtdmVsIGluaWNpYXIgbyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iQ29tcGFydGlsaGFyIGNvbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJDb21wYXJ0aWxoYXIgY29tIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iUmVjdXJzbyBkZXNsaXphbnRlLiBUb3F1ZSBlIHNlZ3VyZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iUGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4sIGRlc2xpemUgcGFyYSBjaW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IlBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LCBkZXNsaXplIHBhcmEgYmFpeG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iUGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4sIGRlc2xpemUgcGFyYSBhIGVzcXVlcmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJQYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiwgZGVzbGl6ZSBwYXJhIGEgZGlyZWl0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkRlc2Jsb3F1ZWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkPDom1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2lsZW5jaW9zbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJTb20gYXRpdmFkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iUGVzcXVpc2FyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iRGVzbGl6ZSBwYXJhIGRlc2Jsb3F1ZWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJDb25lY3RlIHVtIGZvbmUgZGUgb3V2aWRvIHBhcmEgb3V2aXIgYXMgdGVjbGFzIGRhIHNlbmhhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlBvbnRvIGZpbmFsLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlNpc3RlbWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IsOBdWRpbyBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IkRpc3BsYXkgc2VtIGZpbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJDb25jbHXDrWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iU2HDrWRhIGRlIG3DrWRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iQ29uZWN0YXIgYW8gZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJUcmFuc21pdGlyIHRlbGEgcGFyYSBkaXNwb3NpdGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlByb2N1cmFuZG8gZGlzcG9zaXRpdm9z4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iQ29uZmlndXJhw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkRlc2NvbmVjdGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlZlcmlmaWNhbmRvLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iQ29uZWN0YW5kby4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iRGlzcG9uw612ZWwiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJTb2JyZXBvc2nDp8OjbyBuwrogPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHNlZ3VybyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iTyBEaXNwbGF5IHNlbSBmaW8gZXN0w6EgY29uZWN0YWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IlRlbGEgZXhpYmlkYSBlbSBvdXRybyBkaXNwb3NpdGl2by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iVHJhbnNtaXRpbmRvIGEgdGVsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkNvbmVjdGFuZG8gYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJUcmFuc21pdGluZG8gYSB0ZWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJDb25lY3RhZG8gYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iRGVzY29uZWN0YXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IkNoYW1hZGEgZGUgZW1lcmfDqm5jaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJFc3F1ZWNpIG8gcGFkcsOjbyI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1OSwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiJUZW50ZSBub3ZhbWVudGUgZW0gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iVGVudGUgbm92YW1lbnRlIG1haXMgdGFyZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iRGVzbGl6ZSBwYXJhIGJhaXhvIHBhcmEgc2FpciBkYSB0ZWxhIGludGVpcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iRGVzbGl6ZSBkZSBjaW1hIHBhcmEgYmFpeG8gcGFyYSBzYWlyIGRhIHRlbGEgaW50ZWlyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iQ29uY2x1w61kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkNvbnRyb2xlIGRlc2xpemFudGUgY2lyY3VsYXIgZGFzIGhvcmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJDb250cm9sZSBkZXNsaXphbnRlIGNpcmN1bGFyIGRvcyBtaW51dG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlNlbGVjaW9uZSBhcyBob3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IlNlbGVjaW9uZSBvcyBtaW51dG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJHcmFkZSBtZW5zYWwgZGUgZGlhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+Ikxpc3RhIGRlIGFub3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlNlbGVjaW9uZSBvIG3DqnMgZSBvIGRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlNlbGVjaW9uZSBvIGFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gc2VsZWNpb25hZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBleGNsdcOtZG8iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcm0vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJtL3N0cmluZ3MueG1sCmluZGV4IDkxNTQ2MjEuLmE1NjBkMTggMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcm0vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ybS9zdHJpbmdzLnhtbApAQCAtNTcsNiArNTcsMTAgQEAKICAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlZvc3NhIGNhcnRhIFNJTSDDqCBibG9jY2FkYSBjdW4gaW4gUFVLLiBFbmRhdGFpIGlsIFBVSyBwZXIgZGVibG9jY2FyIGVsbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iRW5kYXRhaSBpbCBQVUsyIHBlciBkZWJsb2NjYXIgbGEgY2FydGEgU0lNLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVQaW4gKDIwOTQxMjAyMDkwNzIwNzk1MCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwaW5wdWtfYXR0ZW1wdHM6b25lICg2NTk2MjQ1Mjg1ODA5NzkwMTQyKSAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwaW5wdWtfYXR0ZW1wdHM6b3RoZXIgKDc1MzA1OTc4MDgzNTg3NzQ3NDApIC0tPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGltZWkgKDI2MjU0Mjk4OTA4NjkwMDU3ODIpIC0tPgogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVpZCAoNDg0MTIyMTIzNzY4MTI1NDE5NSkgLS0+CkBAIC01OTQsNiArNTk4LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4ic2EgZml4YXIgdmlkIGluIGZ1bmQgZGF2b3MiPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfYmluZFdhbGxwYXBlciAoNzEwODQyODY5MjU5NTQ5MTY2OCkgLS0+CiAgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5ICgxNzgyOTIzOTM4MDI5OTQxOTYwKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5ICgxMjYxMjQyNzE4NzI3Mjk1OTgxKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfYmluZFJlbW90ZVZpZXdzICg1Njk3OTg3NzU5ODk3MzY3MDk5KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyAoNDcxNzk4NzgxMDEzNzY5MjU3MikgLS0+CkBAIC03ODMsNiArNzkxLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJsZWdlciBpbCBwYXJhY3VscCBkYSBmcmFtZSI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIgKDQ5Mzc0MDU1MjE4MDk0NTQ2ODApIC0tPgogICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIgKDUzNDg2MzUyNzA2ODk1NTM4NTcpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyICgyMTA0ODY0OTQxMjAxMjI2NjE2KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkgKDU1OTU2NjE2OTQ3NDY3NDIxNjgpIC0tPgogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkgKDc5MTY4MTUxNTg2OTAyMTgwNjUpIC0tPgpAQCAtODE3LDYgKzgyOSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJyZWdpc3RyYXIgYXVkaW8iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfcmVjb3JkQXVkaW8gKDQ5MDY4MzkzMDEwODc5ODA2ODApIC0tPgogICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiAoMTE4MDI2NTg3OTQ2NDg5MzAyOSkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiAoNTcyNTE1OTY1NDI3OTYzOTQ5OCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+ImZvdG9ncmFmYXIgZSByZWdpc3RyYXIgdmlkZW9zIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2NhbWVyYSAoODQ5NzIxNjUyNDczNTUzNTAwOSkgLS0+CiAgICAgPHNraXAgLz4KQEAgLTEzMjIsNiArMTMzOCw4IEBACiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzaXBBZGRyZXNzVHlwZU90aGVyICg0NDA4NDM2MTYyOTUwMTE5ODQ5KSAtLT4KICAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUgKDc0NjA5ODAwNzgyODU3OTY4OCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSAoMzAzNzY4NTc5NjA1ODQ5NTAxNykgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSAoNDgwMDcyNTI2NjkyNTg0NTMzMykgLS0+CkBAIC0yMjY3LDMwICsyMjg1LDE0IEBACiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiAoMjEyNTE2ODA1NzE5OTk0MTE5OSkgLS0+CiAgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciAoODYyNDYxODM2NTQ4MTEyNjY2OCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGggKDgwNjY4ODA1NjE0MTEzMTgxOSkgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24gKDU2Mjc0MTEzODQ2MzgzODk3MzgpIC0tPgogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSAoNDE1OTc1MDU2MTU5MjYyMjQ4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCAoNzE2OTAzMjQ3ODI1OTQ4NTE4MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biAoNTA4NzczOTcyODYzOTAxNDU5NSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCAoNzIwNzQ3ODcxOTgwNTU2MjE2NSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQgKDgwMzQ0MzMyNDI1Nzk2MDA5ODApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayAoMjIyODUyNDkwMDQzOTgwMTQ1MykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhICg5NjkwNzE5OTc1NTI0ODY4MTQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCAoODkzNTUxMjg3NzQ2NTIyMTgyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uICgzMDA1MjQ2NjY3NTUwMDE3MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoICgzMDkxNTg3MjQ5Nzc2MDMzMTM5KSAtLT4KLSAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0ICgzODMzMTk1MzM1NjI5Nzk1MDU1KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCAoNzAxMTkyNzM1MjI2NzY2ODY1NykgLS0+CkBAIC0yNDA1LDEwICsyNDA3LDE4IEBACiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciB3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uICg5MDcwMzQ2NDI1MDIzOTc5NjUxKSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSAoNzk2NjQzODMwNzcyMzMxNzE2OSkgLS0+Ci0gICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiAoNTc1ODU1MzU2NzA2NTE0NTI3NikgLS0+CiAgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlICgxNzUxNjE4NTU0NTM5MDg3NjIyKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5ICgzMzk1NTQxNzQ1ODcyMDE3NTgzKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nICg0Nzc2MjM2MjAyNjEwODI4NzA2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MgKDg3MDE1NTM0MjM2NzAxNjA0KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCAoODk2NjEyMDI4NjM3NDE1ODY0OSkgLS0+CisgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmcgKDcyNzk5MDg3NjE3NTgyOTM3ODMpIC0tPgogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmcgKDY0MjI1NzE3MTYwMDc4MjU0NDApIC0tPgpAQCAtMjQyOSw5ICsyNDM5LDEzIEBACiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXggKDYwMjIxMTk3MDI2Mjg1NzIwODApIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igd2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSAoMjIyMzA1MDY0OTI0MDMyNjU1NykgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igd2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlICgyODM4NjQ2NDcxMDUwMzU5NzA2KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHdpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSAoNDQ5ODgwMjAxMjQ2NDE3MDY4NSkgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igd2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UgKDU4MzczNTA5OTM3NTI4NDEzODkpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igd2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUgKDg1NjczMDgwNjU5MTI2NzYyODUpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igd2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSAoMjU4NzIwOTMyNTcwMTEwOTcxNSkgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciB3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QgKDYxODM3NTQ0NjM1NjExNTMzNzIpIC0tPgogICAgIDxza2lwIC8+CkBAIC0yNzM1LDQgKzI3NDksMjYgQEAKICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24gKDcyMjc0MTY4OTQ5NzkwNDc0NjcpIC0tPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiAoODU1NDk5MTQ4ODA5NjY2MjUwOCkgLS0+CiAgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkb25lX2xhYmVsICgyMDkzNzI2MDk5NTA1ODkyMzk4KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uICg2Njk4MTk5MTg2ODU5NzM2NTEyKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24gKDg2MDYwMTA5NjY4NzM3OTExOTApIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X2hvdXJzICg2MDQzMDc5NTExNzY2MDA4MjQ1KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF9taW51dGVzICgzOTc0MzQ1NjE1OTIwMzM2MDg3KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRheV9waWNrZXJfZGVzY3JpcHRpb24gKDg5OTA4NDc5MjU5NjEyOTc5NjgpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgeWVhcl9waWNrZXJfZGVzY3JpcHRpb24gKDU1MjQzMzEyMDc0MzYwNTI0MDMpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X2RheSAoNzc3NDc1OTYwNDcwMTc3MzMzMikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3RfeWVhciAoNzk1MjA1Mjg2Njk5NDE5NjE3MCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBpdGVtX2lzX3NlbGVjdGVkICg5NDk2ODc0MDE2ODI0NzY2MDgpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZGVsZXRlZF9rZXkgKDc2NTk0Nzc4ODY2MjU1NjY1OTApIC0tPgorICAgIDxza2lwIC8+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCmluZGV4IGRjNWEyMTEuLjI2OTQyMGYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iSW50cm9kdWNlxaNpIHVuIGNvZCBQVUsgY2FyZSBzxIMgYWlixIMgOCBjaWZyZSBzYXUgbWFpIG11bHQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IkNhcmR1bCBTSU0gZXN0ZSBibG9jYXQgY3UgY29kdWwgUFVLLiBJbnRyb2R1Y2XFo2kgY29kdWwgUFVLIHBlbnRydSBhLWwgZGVibG9jYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJJbnRyb2R1Y2XFo2kgY29kdWwgUFVLMiBwZW50cnUgYSBkZWJsb2NhIGNhcmR1bCBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iT3BlcmHIm2l1bmVhIG51IGEgcmV1yJlpdC4gQWN0aXZhyJtpIGJsb2NhcmVhIGNhcmR1bHVpIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IlYtYSBtYWkgcsSDbWFzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDDrm5jZXJjYXJlIHDDom7EgyBsYSBibG9jYXJlYSBjYXJkdWx1aSBTSU0uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iVi1hdSBtYWkgcsSDbWFzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBww6JuxIMgbGEgYmxvY2FyZWEgY2FyZHVsdWkgU0lNLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSUQgYXBlbGFudCBkZSBwcmltaXJlIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJQZXJtaXRlIHByb3ByaWV0YXJ1bHVpIHPEgyBzZSBjb25lY3RlemUgbGEgaW50ZXJmYcWjYSBkZSBuaXZlbCBzdXBlcmlvciBhIHVudWkgc2VydmljaXUgVlBOLiBOdSBhciB0cmVidWkgc8SDIGZpZSBuaWNpb2RhdMSDIG5lY2VzYXLEgyBwZW50cnUgYXBsaWNhxaNpaWxlIG9iacWfbnVpdGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ImNvbmVjdGFyZSBsYSBvIGltYWdpbmUgZGUgZnVuZGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJQZXJtaXRlIHByb3ByaWV0YXJ1bHVpIHPEgyBzZSBjb25lY3RlemUgbGEgaW50ZXJmYcWjYSBkZSBuaXZlbCBzdXBlcmlvciBhIHVuZWkgaW1hZ2luaSBkZSBmdW5kYWwuIE51IGFyIHRyZWJ1aSBzxIMgZmllIG5pY2lvZGF0xIMgbmVjZXNhcsSDIHBlbnRydSBhcGxpY2HFo2lpbGUgb2JpxZ9udWl0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+ImNvbmVjdGFyZSBsYSB1biBlY3JhbiBsYSBkaXN0YW7Im8SDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iUGVybWl0ZSBwcm9wcmlldGFydWx1aSBzxIMgc2UgY29uZWN0ZXplIGxhIGludGVyZmHIm2EgZGUgbml2ZWwgc3VwZXJpb3IgYSB1bnVpIGVjcmFuIGxhIGRpc3RhbsibxIMuIE51IGFyIHRyZWJ1aSBzxIMgZmllIG5pY2lvZGF0xIMgbmVjZXNhcsSDIHBlbnRydSBhcGxpY2HIm2lpbGUgb2JpyJludWl0ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJjb25lY3RhcmUgbGEgdW4gc2VydmljaXUgd2lkZ2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlBlcm1pdGUgcHJvcHJpZXRhcnVsdWkgc8SDIHNlIGNvbmVjdGV6ZSBsYSBpbnRlcmZhxaNhIGRlIG5pdmVsIHN1cGVyaW9yIGEgdW51aSBzZXJ2aWNpdSB3aWRnZXQuIE51IGFyIHRyZWJ1aSBzxIMgZmllIG5pY2lvZGF0xIMgbmVjZXNhcsSDIHBlbnRydSBhcGxpY2HFo2lpbGUgb2JpxZ9udWl0ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJpbnRlcmFjxaNpb25hcmUgY3UgYWRtaW5pc3RyYXRvcnVsIHVudWkgZGlzcG96aXRpdiI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iUGVybWl0ZSBhcGxpY2HFo2llaSBzxIMgdXRpbGl6ZXplIGZ1bmPFo2lpbGUgZGUgbml2ZWwgcmVkdXMgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4iY2l0aXJlIHpvbsSDIHRhbXBvbiBkZSBjYWRyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQZXJtaXRlIGFwbGljYcWjaWVpIHPEgyBjaXRlYXNjxIMgY29uxaNpbnV0dWwgem9uZWktdGFtcG9uIGEgY2FkcnVsdWkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iYWNjZXMgbGEgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IlBlcm1pdGUgYXBsaWNhyJtpZWkgc8SDIHV0aWxpemV6ZSBmdW5jyJtpaWxlIGRlIG5pdmVsIHJlZHVzIElucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ImNvbmZpZ3VyZWF6xIMgYWZpxZ9hamUgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJQZXJtaXRlIGFwbGljYcWjaWVpIHPEgyBjb25maWd1cmV6ZSDFn2kgc8SDIHNlIGNvbmVjdGV6ZSBsYSBhZmnFn2FqZSBXaS1GaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ImNvbnRyb2xlYXrEgyBhZmnFn2FqZSBXaS1GaSI8L3N0cmluZz4KQEAgLTQ5NSw2ICs1MDQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiJQZXJtaXRlIGFwbGljYcWjaWVpIHPEgyBtb2RpZmljZSBzZXTEg3JpbGUgYXVkaW8gZ2xvYmFsZSwgY3VtIGFyIGZpIHZvbHVtdWwgxZ9pIGRpZnV6b3J1bCBjYXJlIGVzdGUgdXRpbGl6YXQgcGVudHJ1IGllxZ9pcmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLDrm5yZWdpc3RyYXJlIGF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iUGVybWl0ZSBhcGxpY2HFo2llaSBzxIMgZWZlY3R1ZXplIMOubnJlZ2lzdHLEg3JpIGF1ZGlvIGN1IGFqdXRvcnVsIG1pY3JvZm9udWx1aS4gQ3UgYWNlYXN0xIMgcGVybWlzaXVuZSBhcGxpY2HFo2lhIGVmZWN0dWVhesSDIG9yaWPDom5kIMOubnJlZ2lzdHLEg3JpIGF1ZGlvIGbEg3LEgyBjb25maXJtYXJlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4iY29tdW5pY2FyZSBjdSBjYXJkdWwgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4iUGVybWl0ZSBhcGxpY2HIm2llaSBzxIMgdHJpbWl0xIMgY29tZW56aSBwZSBjYXJkdWwgU0lNLiBBY2Vhc3TEgyBwZXJtaXNpdW5lIGVzdGUgZm9hcnRlIHBlcmljdWxvYXPEgy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJyZWFsaXphcmVhIGRlIGZvdG9ncmFmaWkgxZ9pIHZpZGVvY2xpcHVyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQZXJtaXRlIGFwbGljYcWjaWVpIHPEgyByZWFsaXplemUgZm90b2dyYWZpaSDFn2kgdmlkZW9jbGlwdXJpIGN1IGNhbWVyYSBmb3RvLiBDdSBhY2Vhc3TEgyBwZXJtaXNpdW5lIGFwbGljYcWjaWEgdXRpbGl6ZWF6xIMgY2FtZXJhIGZvdG8gb3JpY8OibmQgxZ9pIGbEg3LEgyBjb25maXJtYXJlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImRlemFjdGl2ZWF6xIMgbGVkdWwgY2FyZSBpbmRpY8SDIGPDom5kIGVzdGUgdXRpbGl6YXTEgyBjYW1lcmEgZm90byI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IkVjcmFuIHBvcm5pcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iU2VydmljaXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IkFsdHVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+Ik51IHMtYSBnxINzaXQgbmljaW8gYXBsaWNhyJtpZSBwZW50cnUgYSBhZmnImWEgYWNlYXN0xIMgcGVyc29hbsSDIGRlIGNvbnRhY3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iSW50cm9kdWNlxaNpIGNvZHVsIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IkludHJvZHVjZcWjaSBjb2R1bCBQVUsgxZ9pIG5vdWwgY29kIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iQ29kdWwgUFVLIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IkFsZWdlxaNpIG8gYXBsaWNhxaNpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ik51IHMtYSBwdXR1dCBsYW5zYSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iUGVybWl0ZcWjaSBhY2Nlc3VsIHBlbnRydSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJQZXJtaXRlxaNpIGFjY2VzdWwgcGVudHJ1IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iTcOibmVyIGdsaXNhbnQuIEF0aW5nZcWjaSDFn2kgxaNpbmXFo2kgYXDEg3NhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iR2xpc2HFo2kgw65uIHN1cyBwZW50cnUgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkdsaXNhxaNpIMOubiBqb3MgcGVudHJ1IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJHbGlzYcWjaSBzcHJlIHN0w6JuZ2EgcGVudHJ1IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iR2xpc2HFo2kgc3ByZSBkcmVhcHRhIHBlbnRydSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJEZWJsb2NhxaNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkNhbWVyxIMgZm90byI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTaWxlbsWjaW9zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlN1bmV0IGFjdGl2YXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkPEg3V0YcWjaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkdsaXNhxaNpIHBlbnRydSBhIGRlYmxvY2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IkNvbmVjdGHFo2kgdW4gc2V0IGPEg8WfdGktbWljcm9mb24gcGVudHJ1IGEgYXV6aSB0YXN0ZWxlIGFwxINzYXRlIGPDom5kIGludHJvZHVjZcWjaSBwYXJvbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUHVuY3QuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJBdWRpbyBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IkVjcmFuIHdpcmVsZXNzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IlRlcm1pbmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iUmV6dWx0YXRlIG1lZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJDb25lY3RhyJtpLXbEgyBsYSBkaXNwb3ppdGl2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iVHJpbWl0ZcibaSBlY3JhbnVsIHBlIGRpc3Bveml0aXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJTZSBjYXV0xIMgZGlzcG96aXRpdmUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJTZXTEg3JpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkRlY29uZWN0YcibaS12xIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iU2Ugc2NhbmVhesSDLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iU2UgY29uZWN0ZWF6xIMuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRpc3BvbmliaWzEgyI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlN1cHJhcHVuZXJlYSA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc2VjdXJpemF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJFY3JhbnVsIHdpcmVsZXNzIGVzdGUgY29uZWN0YXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iQWNlc3QgZWNyYW4gZXN0ZSBhZmnFn2F0IHBlIGFsdCBnYWRnZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iU2UgdHJpbWl0ZSBlY3JhbnVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iU2UgY29uZWN0ZWF6xIMgbGEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iU2UgdHJpbWl0ZSBlY3JhbnVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJDb25lY3RhdCBsYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iRGVjb25lY3RhxaNpLXbEgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iQXBlbCBkZSB1cmdlbsWjxIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJNb2RlbCB1aXRhdCI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY2MCwxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iUmXDrm5jZXJjYcibaSBtYWkgdMOicnppdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJHbGlzYcibaSDDrm4gam9zIHBlbnRydSBhIGllyJlpIGRpbiBlY3JhbiBjb21wbGV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iVGVybWluYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJTZWxlY3RvciBjaXJjdWxhciBwZW50cnUgb3JlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJTZWxlY3RvciBjaXJjdWxhciBwZW50cnUgbWludXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlNlbGVjdGHIm2kgb3JlbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTZWxlY3RhyJtpIG1pbnV0ZWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJBZmnImWFyZSBwZSBsdW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTGlzdMSDIGRlIGFuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iU2VsZWN0YcibaSBsdW5hIMiZaSB6aXVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iU2VsZWN0YcibaSBhbnVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBzZWxlY3RhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IGEgZm9zdCDImXRlcnMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCmluZGV4IDUzNDgwODQuLjIzZWNjYjggMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4i0JLQstC10LTQuNGC0LUgUFVLLdC60L7QtCDQuNC3IDgg0LjQu9C4INCx0L7Qu9C10LUg0YbQuNGE0YAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlNJTS3QutCw0YDRgtCwINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwINGBINC/0L7QvNC+0YnRjNGOINC60L7QtNCwIFBVSy4g0JTQu9GPINGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQutC4INCy0LLQtdC00LjRgtC1INC60L7QtCBQVUsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i0JTQu9GPINGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQutC4IFNJTS3QutCw0YDRgtGLINCy0LLQtdC00LjRgtC1IFBVSzIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsC4g0JLQutC70Y7Rh9C40YLQtSDQsdC70L7QutC40YDQvtCy0LrRgyBTSU0t0LrQsNGA0YLRiyDQuNC70Lgg0LrQsNGA0YLRiyBSLVVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLQntGB0YLQsNC70L7RgdGMINC/0L7Qv9GL0YLQvtC6OiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uINCf0L7RgdC70LUg0Y3RgtC+0LPQviBTSU0t0LrQsNGA0YLQsCDQsdGD0LTQtdGCINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+ItCe0YHRgtCw0LvQvtGB0Ywg0L/QvtC/0YvRgtC+0Lo6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4g0J/QvtGB0LvQtSDRjdGC0L7Qs9C+IFNJTS3QutCw0YDRgtCwINCx0YPQtNC10YIg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC90LAuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLQmNC00LXQvdGC0LjRhNC40LrQsNGG0LjRjyDQstGL0LfRi9Cy0LDRjtGJ0LXQs9C+INCw0LHQvtC90LXQvdGC0LAiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+ItCf0YDQuNC70L7QttC10L3QuNC1INGB0LzQvtC20LXRgiDQv9C+0LTQutC70Y7Rh9Cw0YLRjNGB0Y8g0Log0LHQsNC30L7QstC+0LzRgyDQuNC90YLQtdGA0YTQtdC50YHRgyDRgdC70YPQttCx0YsgVlBOLiDQrdGC0L4g0YDQsNC30YDQtdGI0LXQvdC40LUg0L3QtSDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0L7QsdGL0YfQvdGL0LzQuCDQv9GA0LjQu9C+0LbQtdC90LjRj9C80LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ItCf0YDQuNCy0Y/Qt9C60LAg0Log0YTQvtC90L7QstC+0LzRgyDRgNC40YHRg9C90LrRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINC/0L7QtNC60LvRjtGH0LDRgtGM0YHRjyDQuiDQsdCw0LfQvtCy0L7QvNGDINC40L3RgtC10YDRhNC10LnRgdGDINGB0LvRg9C20LHRiyDQvtCx0L7QtdCyLiDQrdGC0L4g0YDQsNC30YDQtdGI0LXQvdC40LUg0L3QtSDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0L7QsdGL0YfQvdGL0LzQuCDQv9GA0LjQu9C+0LbQtdC90LjRj9C80LguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLQn9C+0LTQutC70Y7Rh9C10L3QuNC1INC6INGD0LTQsNC70LXQvdC90L7QvNGDINC00LjRgdC/0LvQtdGOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINC/0L7QtNC60LvRjtGH0LDRgtGM0YHRjyDQuiDQsdCw0LfQvtCy0L7QvNGDINC40L3RgtC10YDRhNC10LnRgdGDINGD0LTQsNC70LXQvdC90L7Qs9C+INC00LjRgdC/0LvQtdGPLiDQrdGC0L4g0YDQsNC30YDQtdGI0LXQvdC40LUg0L7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDRgtC+0LvRjNC60L4g0YHQv9C10YbQuNCw0LvRjNC90YvQvNC4INC/0YDQuNC70L7QttC10L3QuNGP0LzQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLQn9C+0LTQutC70Y7Rh9C10L3QuNC1INC6INGB0LvRg9C20LHQtSDQstC40LTQttC10YLQvtCyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+ItCf0YDQuNC70L7QttC10L3QuNC1INGB0LzQvtC20LXRgiDQv9C+0LTQutC70Y7Rh9Cw0YLRjNGB0Y8g0Log0LHQsNC30L7QstC+0LzRgyDQuNC90YLQtdGA0YTQtdC50YHRgyDRgdC70YPQttCx0Ysg0LLQuNC00LbQtdGC0L7Qsi4g0K3RgtC+INGA0LDQt9GA0LXRiNC10L3QuNC1INC90LUg0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC+0LHRi9GH0L3Ri9C80Lgg0L/RgNC40LvQvtC20LXQvdC40Y/QvNC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ItCS0LfQsNC40LzQvtC00LXQudGB0YLQstC40LUg0YEg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQvtC8INGD0YHRgtGA0L7QudGB0YLQstCwIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLQn9GA0LjQu9C+0LbQtdC90LjQtSDRgdC80L7QttC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC90LjQt9C60L7Rg9GA0L7QstC90LXQstGL0LUg0YTRg9C90LrRhtC40LggU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4i0KfRgtC10L3QuNC1INC00LDQvdC90YvRhSDQsiDQsdGD0YTQtdGA0LUg0LrQsNC00YDQvtCyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+ItCf0YDQuNC70L7QttC10L3QuNC1INGB0LzQvtC20LXRgiDRgdGH0LjRgtGL0LLQsNGC0Ywg0YHQvtC00LXRgNC20LDQvdC40LUg0LHRg9GE0LXRgNCwINGE0YDQtdC50LzQvtCyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ItCU0L7RgdGC0YPQvyDQuiBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvdC40LfQutC+0YPRgNC+0LLQvdC10LLRi9C1INGE0YPQvdC60YbQuNC4IElucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ItC90LDRgdGC0YDQsNC40LLQsNGC0Ywg0Y3QutGA0LDQvdGLLCDQv9C+0LTQutC70Y7Rh9C10L3QvdGL0LUg0YfQtdGA0LXQtyBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+ItCf0YDQuNC70L7QttC10L3QuNC1INGB0LzQvtC20LXRgiDQv9C+0LTQutC70Y7Rh9Cw0YLRjNGB0Y8g0Log0Y3QutGA0LDQvdCw0Lwg0YEg0L/QvtC80L7RidGM0Y4gV2ktRmkg0Lgg0L3QsNGB0YLRgNCw0LjQstCw0YLRjCDQuNGFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i0KPQv9GA0LDQstC70LXQvdC40LUg0LzQvtC90LjRgtC+0YDQsNC80LgsINC/0L7QtNC60LvRjtGH0LXQvdC90YvQvNC4INGH0LXRgNC10LcgV2ktRmkiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINC40LfQvNC10L3Rj9GC0Ywg0YHQuNGB0YLQtdC80L3Ri9C1INC90LDRgdGC0YDQvtC50LrQuCDQt9Cy0YPQutCwLCDQvdCw0L/RgNC40LzQtdGAINGD0YDQvtCy0LXQvdGMINCz0YDQvtC80LrQvtGB0YLQuCDQuCDQsNC60YLQuNCy0L3Ri9C5INC00LjQvdCw0LzQuNC6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4i0JfQsNC/0LjRgdGMINCw0YPQtNC40L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiLQn9GA0LjQu9C+0LbQtdC90LjQtSDRgdC80L7QttC10YIg0LfQsNC/0LjRgdGL0LLQsNGC0Ywg0LDRg9C00LjQviDRgSDQv9C+0LzQvtGJ0YzRjiDQvNC40LrRgNC+0YTQvtC90LAg0LIg0LvRjtCx0L7QtSDQstGA0LXQvNGPINCx0LXQtyDRg9Cy0LXQtNC+0LzQu9C10L3QuNGPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4i0J7QsdGA0LDRidC10L3QuNC1INC6IFNJTS3QutCw0YDRgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINC+0YLQv9GA0LDQstC70Y/RgtGMINC60L7QvNCw0L3QtNGLIFNJTS3QutCw0YDRgtC1ICjQtNCw0L3QvdC+0LUg0YDQsNC30YDQtdGI0LXQvdC40LUg0L/RgNC10LTRgdGC0LDQstC70Y/QtdGCINCx0L7Qu9GM0YjRg9GOINGD0LPRgNC+0LfRgykuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i0KTQvtGC0L4tINC4INCy0LjQtNC10L7RgdGK0LXQvNC60LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINGB0L3QuNC80LDRgtGMINGE0L7RgtC+0LPRgNCw0YTQuNC4INC4INCy0LjQtNC10L7RgNC+0LvQuNC60Lgg0YEg0L/QvtC80L7RidGM0Y4g0LrQsNC80LXRgNGLINCyINC70Y7QsdC+0LUg0LLRgNC10LzRjyDQsdC10Lcg0LLQsNGI0LXQs9C+INGA0LDQt9GA0LXRiNC10L3QuNGPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ItCe0YLQutC70Y7Rh9Cw0YLRjCDRgdCy0LXRgtC+0LTQuNC+0LTQvdGL0Lkg0LjQvdC00LjQutCw0YLQvtGAINCy0L4g0LLRgNC10LzRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDQutCw0LzQtdGA0YsiPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiLQlNC+0LzQsNGI0L3QuNC5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+ItCg0LDQsdC+0YfQuNC5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiLQlNGA0YPQs9C+0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4i0J3QtSDQvdCw0LnQtNC10L3QviDQv9GA0LjQu9C+0LbQtdC90LjQtSDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINC60L7QvdGC0LDQutGC0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLQktCy0LXQtNC40YLQtSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i0JLQstC10LTQuNGC0LUgUFVLLdC60L7QtCDQuCDQvdC+0LLRi9C5IFBJTi3QutC+0LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSy3QutC+0LQiPC9zdHJpbmc+CkBAIC0xMTAyLDggKzExMTQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLQo9C00LDQu9C40YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImlucHV0TWV0aG9kIiBtc2dpZD0iMTY1MzYzMDA2MjMwNDU2Nzg3OSI+ItCh0L/QvtGB0L7QsSDQstCy0L7QtNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZWRpdFRleHRNZW51VGl0bGUiIG1zZ2lkPSI0OTA5MTM1NTY0OTQxODE1NDk0Ij4i0J7Qv9C10YDQsNGG0LjQuCDRgSDRgtC10LrRgdGC0L7QvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGl0bGUiIG1zZ2lkPSI1NTc2MjcyNDk2MzY1Njg0ODM0Ij4i0JfQsNC60LDQvdGH0LjQstCw0LXRgtGB0Y8g0YHQstC+0LHQvtC00L3QvtC1INC80LXRgdGC0L4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RleHQiIG1zZ2lkPSI2NjQwNTA1ODE3NjE3NDE0MzcxIj4i0J3QtdC60L7RgtC+0YDRi9C1INGB0LjRgdGC0LXQvNC90YvQtSDRhNGD0L3QutGG0LjQuCDQvNC+0LPRg9GCINC90LUg0YDQsNCx0L7RgtCw0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGl0bGUiIG1zZ2lkPSI1NTc2MjcyNDk2MzY1Njg0ODM0Ij4i0J3QtdC00L7RgdGC0LDRgtC+0YfQvdC+INC/0LDQvNGP0YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGV4dCIgbXNnaWQ9IjY2NDA1MDU4MTc2MTc0MTQzNzEiPiLQndC10LrQvtGC0L7RgNGL0LUg0YTRg9C90LrRhtC40Lgg0LzQvtCz0YPRgiDQvdC1INGA0LDQsdC+0YLQsNGC0YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4NzE4MzM1MTIxMDYwNzg3OTE0Ij4i0J/RgNC40LvQvtC20LXQvdC40LUgXCI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+XCIg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iNDY1MzU4Njk0Nzc0NzMzMDA1OCI+ItCd0LDQttC80LjRgtC1LCDRh9GC0L7QsdGLINC/0L7Qu9GD0YfQuNGC0Ywg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQtNCw0L3QvdGL0LUg0LjQu9C4INCy0YvQutC70Y7Rh9C40YLRjCDQv9GA0LjQu9C+0LbQtdC90LjQtS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvayIgbXNnaWQ9IjU5NzAwNjA0MzA1NjI1MjQ5MTAiPiLQntCaIjwvc3RyaW5nPgpAQCAtMTM0Myw3ICsxMzU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InN1Ym1pdCIgbXNnaWQ9IjE2MDIzMzU1NzIwODk5MTE5NDEiPiLQntGC0L/RgNCw0LLQuNGC0YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXJfbW9kZV9kaXNhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNjQ3NjgyMTIwMDM4NjQzMTYiPiLQktC60LvRjtGH0LXQvSDRgNC10LbQuNC8IFwi0KjRgtGD0YDQvNCw0L1cIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4MDM1MjMwNTM3NTYzNTAzMjYyIj4i0KfRgtC+0LHRiyDQstGL0LnRgtC4LCDQvdCw0LbQvNC40YLQtSDQt9C00LXRgdGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNDY2OTQyMzQzOTgyMDI2MDEiPiJVU0It0LzQvtC00LXQvC/RgtC+0YfQutCwINC00L7RgdGC0YPQv9CwIFdpLUZpINC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNDY2OTQyMzQzOTgyMDI2MDEiPiLQktC60LvRjtGH0LXQvSDRgNC10LbQuNC8INC80L7QtNC10LzQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNjg1NzAzMTc2MDEwMzA2Mjk4MiI+ItCd0LDQttC80LjRgtC1INC00LvRjyDQvdCw0YHRgtGA0L7QudC60LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmFja19idXR0b25fbGFiZWwiIG1zZ2lkPSIyMzAwNDcwMDA0NTAzMzQzNDM5Ij4i0J3QsNC30LDQtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5leHRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTA4MDU1NTEwNDY3Nzk5MjQwOCI+ItCU0LDQu9C10LUiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiLQmtC70LDQstC40YjQsCDRgdC80LXQvdGLINGA0LXQs9C40YHRgtGA0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLQmtC70LDQstC40YjQsCDQstCy0L7QtNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i0JLRi9Cx0LXRgNC40YLQtSDQv9GA0LjQu9C+0LbQtdC90LjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0YPRgdGC0LjRgtGMINC/0YDQuNC70L7QttC10L3QuNC1IFwiPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPlwiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i0J7RgtC60YDRi9GC0Ywg0LTQvtGB0YLRg9C/OiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLQntGC0LrRgNGL0YLRjCDQtNC+0YHRgtGD0L8g0L/RgNC40LvQvtC20LXQvdC40Y4gXCI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+XCIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i0J/QtdGA0LXRgtCw0YHQutC40LLQsNC10LzRi9C5INC30L3QsNGH0L7QuiDQsdC70L7QutC40YDQvtCy0LrQuC4g0J3QsNC20LzQuNGC0LUg0Lgg0YPQtNC10YDQttC40LLQsNC50YLQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i0J/RgNC+0LLQtdC00LjRgtC1INCy0LLQtdGA0YUsINGH0YLQvtCx0YsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+ItCf0YDQvtCy0LXQtNC40YLQtSDQstC90LjQtywg0YfRgtC+0LHRiyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i0J/RgNC+0LLQtdC00LjRgtC1INCy0LvQtdCy0L4sINGH0YLQvtCx0YsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLQn9GA0L7QstC10LTQuNGC0LUg0LLQv9GA0LDQstC+LCDRh9GC0L7QsdGLIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+ItCg0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i0JrQsNC80LXRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+ItCR0LXQtyDQt9Cy0YPQutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+ItCS0LrQu9GO0YfQuNGC0Ywg0LfQstGD0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+ItCf0L7QuNGB0LoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLQn9GA0L7QstC10LTQuNGC0LUg0L/QviDRjdC60YDQsNC90YMsINGH0YLQvtCx0Ysg0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCDRg9GB0YLRgNC+0LnRgdGC0LLQvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i0J/QvtC00LrQu9GO0YfQuNGC0LUg0LPQsNGA0L3QuNGC0YPRgNGDLCDRh9GC0L7QsdGLINGD0YHQu9GL0YjQsNGC0Ywg0L/QsNGA0L7Qu9GMLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+ItCi0L7Rh9C60LAiPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLQodC40YHRgtC10LzQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i0JLQvtGB0L/RgNC+0LjQt9Cy0LXQtNC10L3QuNC1INC30LLRg9C60LAg0YfQtdGA0LXQtyBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+ItCR0LXRgdC/0YDQvtCy0L7QtNC90L7QuSDQvNC+0L3QuNGC0L7RgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLQn9C10YDQtdC90LDQv9GA0LDQstC70Y/RgtGMINC/0L7RgtC+0Log0LzRg9C70YzRgtC40LzQtdC00LjQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i0J/QvtC00LrQu9GO0YfQtdC90LjQtSDQuiDRg9GB0YLRgNC+0LnRgdGC0LLRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+ItCf0L7QtNC60LvRjtGH0LXQvdC40LUg0Log0YPQtNCw0LvQtdC90L3QvtC80YMg0LTQuNGB0L/Qu9C10Y4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLQn9C+0LjRgdC6INGD0YHRgtGA0L7QudGB0YLQsuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+ItCd0LDRgdGC0YDQvtC50LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLQntGC0LrQu9GO0YfQuNGC0YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i0KHQutCw0L3QuNGA0L7QstCw0L3QuNC1Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i0J/QvtC00LrQu9GO0YfQtdC90LjQtS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i0JTQvtGB0YLRg9C/0LXQvSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+ItCd0LDQu9C+0LbQtdC90LjQtSDihJYgPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4g0YUgPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+INGC0YfQui/QtNGO0LnQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsINCx0LXQt9C+0L/QsNGB0L3Ri9C5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLQkdC10YHQv9GA0L7QstC+0LTQvdC+0Lkg0L/RgNC+0LXQutGC0L7RgCDQv9C+0LTQutC70Y7Rh9C10L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i0JjQt9C+0LHRgNCw0LbQtdC90LjQtSDQv9C10YDQtdC00LDQtdGC0YHRjyDQvdCwINC00YDRg9Cz0L7QtSDRg9GB0YLRgNC+0LnRgdGC0LLQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiLQn9C+0LTQutC70Y7Rh9C10L3QuNC1INC6INGD0LTQsNC70LXQvdC90L7QvNGDINC00LjRgdC/0LvQtdGOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4i0J/QvtC00LrQu9GO0YfQtdC90LjQtSDQuiA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLQo9C00LDQu9C10L3QvdGL0Lkg0LTQuNGB0L/Qu9C10Lkg0L/QvtC00LrQu9GO0YfQtdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiLQn9C+0LTQutC70Y7Rh9C10L3QviDQuiA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i0J7RgtC60LvRjtGH0LjRgtGMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLQrdC60YHRgtGA0LXQvdC90YvQuSDQstGL0LfQvtCyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i0JfQsNCx0YvQu9C4INCz0YDQsNGE0LjRh9C10YHQutC40Lkg0LrQu9GO0Yc/Ijwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU5LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+ItCf0L7QstGC0L7RgCDRh9C10YDQtdC3IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+wqDRgdC10LouIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+ItCf0L7QstGC0L7RgNC40YLQtSDQv9C+0L/Ri9GC0LrRgyDQv9C+0LfQttC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLQp9GC0L7QsdGLINCy0LXRgNC90YPRgtGM0YHRjyDQsiDQvtCx0YvRh9C90YvQuSDRgNC10LbQuNC8LCDQv9GA0L7QstC10LTQuNGC0LUg0L/QsNC70YzRhtC10Lwg0LLQvdC40LciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i0KfRgtC+0LHRiyDQstC10YDQvdGD0YLRjNGB0Y8g0LIg0L7QsdGL0YfQvdGL0Lkg0YDQtdC20LjQvCwg0L/RgNC+0LLQtdC00LjRgtC1INC/0LDQu9GM0YbQtdC8INCy0L3QuNC3LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i0JPQvtGC0L7QstC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4i0JLRi9Cx0L7RgCDRh9Cw0YHQvtCyINC90LAg0YbQuNGE0LXRgNCx0LvQsNGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+ItCS0YvQsdC+0YAg0LzQuNC90YPRgiDQvdCwINGG0LjRhNC10YDQsdC70LDRgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+ItCS0YvQsdC10YDQuNGC0LUg0YfQsNGB0YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLQktGL0LHQtdGA0LjRgtC1INC80LjQvdGD0YLRiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i0J7QutC90L4g0LLRi9Cx0L7RgNCwINC00LDRgtGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i0JzQtdC90Y4g0LLRi9Cx0L7RgNCwINCz0L7QtNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLQktGL0LHQtdGA0LjRgtC1INC80LXRgdGP0YYg0Lgg0YfQuNGB0LvQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+ItCS0YvQsdC10YDQuNGC0LUg0LPQvtC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+ItCS0YvQsdGA0LDQvSDRjdC70LXQvNC10L3RgiA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiLQptC40YTRgNCwIDx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+INGD0LTQsNC70LXQvdCwIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYmNkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1OTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYnl0ZVNob3J0IiBtc2dpZD0iODM0MDk3Mzg5Mjc0MjAxOTEwMSI+IkIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJraWxvYnl0ZVNob3J0IiBtc2dpZD0iNTk3Mzc4OTc4MzUwNDc3MTg3OCI+IktCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVnYWJ5dGVTaG9ydCIgbXNnaWQ9IjYzNTU4NTE1NzY3NzA0Mjg5MjIiPiJNQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdpZ2FieXRlU2hvcnQiIG1zZ2lkPSIzMjU5ODgyNDU1MjEyMTkzMjE0Ij4iR0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXJhYnl0ZVNob3J0IiBtc2dpZD0iMjMxNjEzMDE4MTU5MTg2OTYyIj4iVEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXRhYnl0ZVNob3J0IiBtc2dpZD0iNTYzNzgxNjY4MDE0NDk5MDIxOSI+IlBCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmlsZVNpemVTdWZmaXgiIG1zZ2lkPSI5MTY0MjkyNzkxNTAwNTMxOTQ5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkczwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iVU5JVCI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bnRpdGxlZCIgbXNnaWQ9IjQ2Mzg5NTY5NTQ4NTI3ODI1NzYiPiImbHQ74Lax4La44LeKIOC2uuC3nOC2r+C3jyDgtrHgt5Dgtq0mZ3Q7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXMiIG1zZ2lkPSI3ODk5ODI5NTE2MDQ4ODEzMjM3Ij4i4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXNfdHdvX2RvdHMiIG1zZ2lkPSIxMjI4MDc4OTk0ODY2MDMwNzM2Ij4i4oClIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIgbXNnaWQ9Ijc2OTQwNjMwNDIwNzk2NzY1MTciPiIo4Lav4LeU4La74Laa4Lau4LaxIOC2heC2guC2muC2uuC2muC3iiDgtrHgt5zgtrjgt5Dgtq0pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5rbm93bk5hbWUiIG1zZ2lkPSIyMjc3NTU2NTQ2NzQyNzQ2NTIyIj4iKOC2seC3nOC2r+C2seC3kykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0Vm9pY2VNYWlsQWxwaGFUYWciIG1zZ2lkPSIyNjYwMDIwOTkwMDk3NzMzMDc3Ij4i4Laa4Lan4LeE4LasIOC2reC3kOC2tOC3keC2vSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRNc2lzZG5BbHBoYVRhZyIgbXNnaWQ9IjI4NTA4ODk3NTQ5MTk1ODQ2NzQiPiJNU0lTRE4xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pRXJyb3IiIG1zZ2lkPSI1MTU0NDk5NDU3NzM5MDUyOTA3Ij4i4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2nOC3kOC2p+C3heC3lOC3gOC2muC3iiDgt4Tgt50g4LaF4LeA4La94LaC4Lac4LeUIE1NSSDgtprgt5rgtq3gtrrgtprgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pRmRuRXJyb3IiIG1zZ2lkPSI1MjI0Mzk4MjE2Mzg1MzE2NDcxIj4i4LeD4LeK4Lau4LeP4LeA4La7IOC2h+C2uOC2reC3k+C2uOC3iiDgtoXgtoLgtpog4LeA4La94LanIOC2tOC2uOC2q+C2muC3iiDgtrjgt5ngt4Tgt5ngtrrgt5Tgtrgg4LeD4LeT4La44LeP4Laa4La7IOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZCIgbXNnaWQ9IjgxNDcyNzgzNDY0MTQ3MTQzMTUiPiLgt4Pgt5rgt4Dgt4/gt4Ag4LeD4La24La9IOC2muC2u+C2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWRGb3IiIG1zZ2lkPSI2ODU2MjI4MTQwNDUzNDcxMDQxIj4i4LeD4Lea4LeA4LeP4LeAIOC3g+C2tuC2veC2uuC3kiwg4LeD4Laz4LeE4LePOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VEaXNhYmxlZCIgbXNnaWQ9IjE5Mzc1NTMyMjY1OTI1MTY0MTEiPiLgt4Pgt5rgt4Dgt4/gt4Ag4LaF4La24La9IOC2muC2u+C2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZVJlZ2lzdGVyZWQiIG1zZ2lkPSI2Mjc1MDE5MDgyNTk4MTAyNDkzIj4i4La94LeS4La64LeP4La04Lav4LeS4LaC4Lag4LeSIOC3gOC3k+C2uCDgt4Pgt4/gtrvgt4rgtq7gtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiLgtrjgt5Dgtprgt5Pgtrgg4LeD4LeP4La74LeK4Lau4LaaIOC3gOC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZEluY29ycmVjdCIgbXNnaWQ9Ijc2MTIyMDg4Mzk0NTAxMjg3MTUiPiLgt4Dgt5Dgtrvgtq/gt5Ig4La44LeU4La74La04Lav4La64Laa4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUNvbXBsZXRlIiBtc2dpZD0iODIzMjUyNzQ5NTQxMTY5ODM1OSI+Ik1NSSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUGluIiBtc2dpZD0iOTAxNTI3NzY0NTU0NjcxMDAxNCI+IuC2lOC2tiDgtqfgtrrgt5LgtrTgt4og4Laa4La74LaxIOC2veC2ryDgtrTgtrvgtqsgUElOIOC2keC2miDgt4Dgt5Dgtrvgtq/gt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUHVrIiBtc2dpZD0iNTQ4NzI1NzY0NzA4MTEzMjIwMSI+IuC2lOC2tiDgtqfgtrrgt5LgtrTgt4og4Laa4La74LaxIOC2veC2ryBQVUsg4LaR4LaaIOC3gOC3kOC2u+C2r+C3kuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IuC2lOC2tiDgtqfgtrrgt5LgtrTgt4og4Laa4La9IFBJTiDgtrHgt5zgtpzgt5Dgt4XgtrTgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFBpbiIgbXNnaWQ9IjM4NTAwMTg0NDUxODc0NzUzNzciPiI0IOC3g+C3kuC2pyA4IOC2r+C2muC3iuC3gOC3jyDgtoXgtoLgtpog4LeD4LeE4LeS4LatIFBJTiDgtpHgtprgtprgt4og4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IuC2heC2guC2miA4IOC2muC3iiDgt4Tgt50g4LaK4LanIOC3gOC3kOC2qeC3kiBQVUsg4LaR4Laa4Laa4LeKIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IuC2lOC2tuC2nOC3miBTSU0g4La04LatIOC2tOC2reC2pyBQVUsg4LaF4Lac4LeU4LeF4LeUIOC3gOC3kOC2p+C3kyDgtofgtq0uIOC2keC2uCDgtoXgtpzgt5Tgtr0g4LaH4La74LeT4La44LanIFBVSyDgtprgt5rgtq3gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJTSU0g4La04Lat4LeaIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrjgtqcgUFVLMiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i4La04LeQ4La44LeS4Lar4LeZ4LaxIOC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNsaXJNbWkiIG1zZ2lkPSI3Nzg0NjczNjczNDQ2ODMzMDkxIj4i4La04LeS4Lan4Lat4LanIOC2uuC2sSDgtoXgtrjgtq3gtrHgt4rgtrHgt4/gtpzgt5ogSUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDZk1taSIgbXNnaWQ9IjUxMjMyMTg5ODkxNDE1NzM1MTUiPiLgtofgtrjgtq3gt5Tgtrgg4LaJ4Lav4LeS4La74LeS4La64LanIOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+IuC2h+C2uOC2reC3lOC2uOC3iiDgtrvgt5DgtrPgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJCYU1taSIgbXNnaWQ9IjQ1NTE5MzA2NzkyNjc3MDU4MSI+IuC2h+C2uOC2reC3lOC2uCDgtoXgt4Dgt4Tgt5Lgtrsg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUHdkTW1pIiBtc2dpZD0iNzA0MzcxNTY4NzkwNTI1NDE5OSI+IuC2uOC3lOC2u+C2tOC2r+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+IlBJTiDgt4Dgt5ngtrHgt4Pgt4og4LeA4LeTIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuaXBNbWkiIG1zZ2lkPSIzMTEwNTM0NjgwNTU3ODU3MTYyIj4i4LaH4La44Lat4LeU4La44LeKIOC2heC2guC2muC2uiDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+IuC2h+C2uOC2reC3lOC2uOC3iiDgtoXgtoLgtprgtrog4LeD4LeT4La44LePIOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJUaHJlZVdDTW1pIiBtc2dpZD0iOTA1MTA0NzE3MDMyMTE5MDM2OCI+IuC2reC3lOC2seC3iiDgtrjgt4/gtrvgt4rgtpwg4LaH4La44Lat4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUnVhY01taSIgbXNnaWQ9Ijc4Mjc4ODc0NTkxMzgzMDg4ODYiPiLgtoXgtrHgt4Dgt4Hgt4rigI3gtrog4LeE4LeS4La74LeS4LeE4LeQ4La74Lav4LeP4La64LaaIOC2h+C2uOC2reC3lOC2uOC3iiDgtrTgt4rigI3gtrvgtq3gt5Lgtprgt4rgt4Lgt5rgtrQg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ25kTW1pIiBtc2dpZD0iMzExNjQ0NjIzNzA4MTU3NTgwOCI+IuC2h+C2uOC2reC3k+C2uOC3miDgtoXgtoLgtprgtrog4La34LeP4La74Lav4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iRG5kTW1pIiBtc2dpZD0iMTI2NTQ3ODkzMjQxODMzNDMzMSI+IuC2tuC3j+C2sOC3jyDgtrHgt5zgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPbiIgbXNnaWQ9IjQyOTQxNTQwOTE0NTc4MTkyMyI+IuC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq8g4LaF4Lax4LeU4LeAIOC3g+C3k+C2uOC3jyDgt4Dgt5Mg4LaH4LatLiDgtrjgt5Pgt4Xgtp8g4LaH4La44Lat4LeU4La4OiDgt4Pgt5Pgtrjgt48g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T25OZXh0Q2FsbE9mZiIgbXNnaWQ9IjMwOTI5MTgwMDYwNzc4NjQ2MjQiPiLgtoXgtrjgtq3gtrHgt4rgtrHgt4/gtpzgt5ogSUQg4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2heC2seC3lOC3gCDgt4Pgt5Pgtrjgt48g4LeA4LeTIOC2h+C2rS4g4La44LeT4LeF4LafIOC2h+C2uOC2reC3lOC2uDog4LeD4LeT4La44LePIOC2muC2uyDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT24iIG1zZ2lkPSI2MTc5NDI1MTgyODU2NDE4NDY1Ij4i4LaF4La44Lat4Lax4LeK4Lax4LeP4Lac4LeaIElEIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3lCDgtoXgtrHgt5Tgt4Ag4LeD4LeT4La44LePIOC3gOC3kyDgtrHgt5Dgtq0uIOC2uOC3k+C3heC2nyDgtofgtrjgtq3gt5Tgtrg6IOC3g+C3k+C2uOC3jyDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9mZiIgbXNnaWQ9IjI1Njc5OTg2MzMxMjQ0MDg1NTIiPiLgtoXgtrjgtq3gtrHgt4rgtrHgt4/gtpzgt5ogSUQg4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2heC2seC3lOC3gCDgt4Pgt5Pgtrjgt48g4LeA4LeTIOC2seC3kOC2rS4g4La44LeT4LeF4LafIOC2h+C2uOC2reC3lOC2uDog4LeD4LeT4La44LePIOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlTm90UHJvdmlzaW9uZWQiIG1zZ2lkPSI4NjE0ODMwMTgwNTA4Njg2NjY2Ij4i4LeD4Lea4LeA4LeP4LeA4Lax4LeKIOC3g+C2tOC2uuC3jyDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUlBlcm1hbmVudCIgbXNnaWQ9IjMzNzczNzExNDU5MjY4MzU2NzEiPiLgtoXgtrjgtq3gtrHgt4rgtrHgt4/gtpzgt5ogSUQg4LeD4LeQ4Laa4LeD4LeT4La4IOC2lOC2tuC2pyDgt4Dgt5ngtrHgt4Pgt4rgtprgtr0g4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRDaGFuZ2VkVGl0bGUiIG1zZ2lkPSI1NTkyMTg5Mzk4OTU2MTg3NDk4Ij4i4LeD4LeT4La44LeS4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeZ4La74LeS4Lar4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRGF0YSIgbXNnaWQ9Ijg2NTM3OTQ3ODQ2OTAwNjU1NDAiPiLgtq/gtq3gt4rgtq0g4LeD4Lea4LeA4LeP4LeAIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkVtZXJnZW5jeSIgbXNnaWQ9IjY1ODExNjM3NzkwNzI4MzM2NjUiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LeD4Lea4LeA4LeP4LeAIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbk5vcm1hbCIgbXNnaWQ9IjQ5NTM4NjcwMTEzODk3NTA2NzMiPiLgt4Tgtqwg4LeD4Lea4LeA4LeP4LeAIOC2tuC3j+C2sOC3jyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbFZvaWNlIiBtc2dpZD0iMzM5Njk2MzY1MjEwODE1MTI2MCI+IuC3g+C3kuC2uuC2veC3lCDgt4Tgtqwg4LeD4Lea4LeA4LePIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblNtcyIgbXNnaWQ9IjgzMTQzNTIzMjc0NjE2Mzg4OTciPiJTTVMg4LeD4Lea4LeA4LeP4LeAIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlRGF0YSIgbXNnaWQ9Ijk5NjYzNjQ4NzEwNjE3MTMyMCI+IuC3hOC2rC/gtq/gtq3gt4rgtq0g4LeD4Lea4LeA4LePIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IuC3hOC2rC9TTVMg4LeD4Lea4LeA4LePIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbCIgbXNnaWQ9IjU2NDMwMjgyNjQ0NjYwOTI4MjEiPiLgt4Pgt5Lgtrrgtr3gt5Tgtrgg4LeE4LasL+C2r+C2reC3iuC2rS9TTVMg4LeD4Lea4LeA4LeP4LeA4Lax4LeKIOC2tuC3j+C2sOC3jyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1ZvaWNlIiBtc2dpZD0iMTI1ODM5MzgxMjMzNTI1ODAxOSI+IuC3hOC2rCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGEiIG1zZ2lkPSI4NzI0NTY3ODIwNzc5Mzc4OTMiPiLgtq/gtq3gt4rgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NGQVgiIG1zZ2lkPSI1NTY2NjI0OTk4ODQwNDg2NDc1Ij4i4LeG4LeQ4Laa4LeK4LeD4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzU01TIiBtc2dpZD0iMjAxNTQ2MDM3MzcwMTUyNzQ4OSI+IlNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFBc3luYyIgbXNnaWQ9IjQ1MjM0NTQ3ODM0OTg1NTE0NjgiPiLgtoXgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YVN5bmMiIG1zZ2lkPSI3NTMwMDAwNTE5NjQ2MDU0Nzc2Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BhY2tldCIgbXNnaWQ9IjY5OTEwMDY1NTc5OTM0MjM0NTMiPiLgtrTgt5Dgtprgt5Dgtqfgt4rgtqfgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQQUQiIG1zZ2lkPSIzMjM1MjU5MDg1NjQ4MjcxMDM3Ij4iUEFEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQwIiBtc2dpZD0iNzE3MDMzNTQ3MjE5ODY5NDk0NSI+IuC2u+C3neC2uOC3kuC2giDgtq/gtrvgt4rgt4Hgtprgtrog4LeD4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxIiBtc2dpZD0iNTMxNDg2MTUxOTc1MjUzODkyMiI+IuC2u+C3neC2uOC3kuC2giDgtq/gtrvgt4rgt4Hgtprgtrog4LaF4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQyIiBtc2dpZD0iODk2OTkyOTA0OTA4MTI2ODExNSI+IuC2u+C3neC2uOC3kuC2giDgtq/gtrvgt4rgt4Hgtprgtrog4LeD4LeQ4Lar4LeZ4La94LeSIOC3gOC3meC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MyIgbXNnaWQ9IjUxNDgyNTUwMjcwNDM5NDMzMTciPiLgt4DgtqfgtrTgt5Lgtqfgt4/gt4Dgt5ngtrHgt4og4LaJ4LeA4Lat4LeK4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ0IiBtc2dpZD0iODgwODQ1NjY4MjU1MDc5NjUzMCI+IuC2nOC3nOC2qeC2seC3kOC2nOC3kuC2veC3iuC2veC3meC2seC3iiDgtrTgt5Lgtqfgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDUiIG1zZ2lkPSI3NjA0MDYzMjUyODUwMzU0MzUwIj4i4La74Led4La44LeS4LaCICAtIOC2muC3kOC2uOC2reC3kiDgtrTgtq/gt4rgtrDgtq3gt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDYiIG1zZ2lkPSIyMDU5NDQwODI1NzgyODcxNTEzIj4i4La74Led4La44LeS4LaCICAtIOC2veC2tuC3j+C2nOC2rSDgt4Tgt5Dgtprgt5Ig4La04Lav4LeK4Law4Lat4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ3IiBtc2dpZD0iNzExMjA3ODcyNDA5NzIzMzYwNSI+IuC2u+C3neC2uOC3kuC2giAtIOC2uOC3kuC2reC3iuKAjeC2uyDgt4Tgt4Dgt5Tgtr3gt4rgtprgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDgiIG1zZ2lkPSI1OTg5NTY5Nzc4NjA0MDg5MjkxIj4i4La74Led4La44LeS4LaCIC0g4LaF4Law4LeS4La44LeS4La9IOC3hOC3gOC3lOC2veC3iuC2muC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OSIgbXNnaWQ9Ijc5NjkyOTY4MTEzNTUxNTI0OTEiPiLgtrvgt53gtrjgt5LgtoIgIC0g4LeD4La44LeK4La04LeW4La74LeK4LarIOC3g+C3muC3gOC3jyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Lgtq3gt4rgt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEwIiBtc2dpZD0iMzk5MjkwNjk5OTgxNTMxNjQxNyI+IuC2u+C3neC2uOC3kuC2giAtIOC2heC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgt4Pgt5rgt4Dgt48g4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeT4Lat4LeK4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMSIgbXNnaWQ9IjQxNTQ0NzY4NTQ0MjY5MjA5NzAiPiLgtrvgt53gtrjgt5LgtoIgIOC2tuC3kOC2seC2u+C2uiDgt4Pgtprgt4rigI3gtrvgt5Pgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEyIiBtc2dpZD0iMTE4OTA3MTExOTk5MjcyNjMyMCI+IuC2u+C3neC2uOC3kuC2giDgtrbgt5DgtrHgtrvgtrog4LaF4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHRTZWFyY2hpbmciIG1zZ2lkPSI4MzYwMTQxODg1OTcyMjc5OTYzIj4i4LeD4Lea4LeA4LeP4LeAIOC3g+C2s+C3hOC3jyDgt4Pgt5zgtrrgtrjgt5LgtrHgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlTm90Rm9yd2FyZGVkIiBtc2dpZD0iMTY4MzY4NTg4Mzg0MTI3MjU2MCI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4Lax4Lec4La64LeA4LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWQiIG1zZ2lkPSIxMzAyOTIyMTE3NDk4NTkwNTIxIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWRUaW1lIiBtc2dpZD0iOTIwNjI1MTczNjUyNzA4NTI1NiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9IlRJTUVfREVMQVkiPnsyfTwveGxpZmY6Zz4g4LanIOC2tOC3g+C3lOC3gCA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlUmVnaXN0ZXJlZCIgbXNnaWQ9IjUwNzMyMzc4Mjc2MjAxNjYyODUiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjog4LaJ4Lav4LeS4La74LeS4La64LanIOC2seC3nOC2uuC3gOC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlUmVnaXN0ZXJlZFRpbWUiIG1zZ2lkPSI2NzgxNjIxOTY0MzIwNjM1MTcyIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IOC2ieC2r+C3kuC2u+C3kuC2uuC2pyDgtrHgt5zgtrrgt4DgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmNDb21wbGV0ZSIgbXNnaWQ9IjMxMTg4NDgyMzA5NjY4ODY1NzUiPiLgtoXgtoLgtpwg4Laa4Lea4Lat4La6IOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2q+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmY0Vycm9yIiBtc2dpZD0iMzMyNzU2MDEyNjU4ODUwMDc3NyI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtpzgt5Dgtqfgt4Xgt5Tgt4Dgtprgt4og4LeE4LedIOC2heC3gOC2veC2guC2nOC3lCDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwg4Laa4Lea4Lat4La64Laa4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvck9rIiBtc2dpZD0iMTE5MTkxOTM3ODA4MzQ3MjIwNCI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvciIgbXNnaWQ9Ijc5NTYzOTI1MTExNDY2OTg1MjIiPiLgtqLgt4/gtr0g4Lav4Led4LeC4La64Laa4LeKIOC2reC3kuC2tuC3lOC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JMb29rdXAiIG1zZ2lkPSI0NzExNjg3NDU2MTExOTYzMTYzIj4iVVJMIOC2uiDgt4Pgt5ngt4Dgt5Lgtrog4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiLgtoXgtqngt4Dgt5Lgtrrgt5og4LeD4Lat4LeK4oCN4La64LeP4La04LaxIOC2tOC2p+C3kuC2tOC3j+C2p+C3kuC2uiDgt4Dgt5ngtq0g4LeD4LeE4La6IOC2seC3nOC2r+C2muC3iuC3gOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+IuC3g+C2reC3iuKAjeC2uuC3j+C2tOC2seC2uiDgtprgt4Ug4Lax4Lec4LeE4LeQ4LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUHJveHlBdXRoIiBtc2dpZD0iMTc4ODIwNzAxMDU1OTA4MTMzMSI+IuC2tOC3iuKAjeC2u+C3nOC2muC3iuC3g+C3kiDgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtprgtrog4LeE4La74LeE4LePIOC3g+C2reC3iuKAjeC2uuC3j+C2tOC2seC2uiDgtoXgt4Pgt4/gtrvgt4rgtq7gtprgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQ29ubmVjdCIgbXNnaWQ9Ijg3MTQyNzMyMzYzNjQ2NDA1NDkiPiLgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtprgtrrgt4/gtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9ySU8iIG1zZ2lkPSIyMzQwNTU4MTk3NDg5MzAyMTg4Ij4i4LeD4Lea4LeA4LeP4Lav4LeP4La64Laa4La64LePIOC3g+C2uOC2nCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeT4La44LanIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRpbWVvdXQiIG1zZ2lkPSI0NzQzNDAzNzAzNzYyODgzOTU0Ij4i4LeD4Lea4LeA4LeP4Lav4LeP4La64Laa4La6IOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Dgtrog4Laa4La94LeKIOC2ieC2muC3lOC2reC3iiDgt4Dgt5Lgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUmVkaXJlY3RMb29wIiBtc2dpZD0iODY3OTU5NjA5MDM5Mjc3OTUxNiI+IuC2tOC3kuC2p+C3lOC3gOC3miDgtrbgt5zgt4Tgt50g4LeD4Lea4LeA4LeP4Lav4LeP4La64LaaIOC2seC3kOC3gOC2rSDgt4Tgtrvgt4Dgt48g4La64LeQ4LeA4LeT4La44LeKIOC2heC2qeC2guC2nOC3lCDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRTY2hlbWUiIG1zZ2lkPSI1MDE1NzMwODEyOTA2MTkyMjA4Ij4i4La04LeK4oCN4La74Lec4Lan4Led4Laa4Led4La94La6IOC3gOC3meC2rSDgt4Pgt4Tgtrog4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZhaWxlZFNzbEhhbmRzaGFrZSIgbXNnaWQ9Ijk2NTQ5NjA2MDAwNjU4NjQxIj4i4LeD4LeU4La74Laa4LeK4LeC4LeS4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC2muC3iiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4iVVJMIOC3gOC2veC2guC2nOC3lCDgtrHgt5zgt4DgtrEg4Lax4LeS4LeD4LePIOC2tOC3kuC2p+C3lOC3gCDgt4Dgt5Lgt4Dgt5jgtq0g4Laa4LeS4La74LeT4La44LanIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiLgtpzgt5zgtrHgt5Tgt4Ag4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZU5vdEZvdW5kIiBtc2dpZD0iNjIwMzg1NjYxMjA0MjY1NTA4NCI+IuC2ieC2veC3iuC2veC2sSDgtr3gtq8g4Lac4Lec4Lax4LeUIOC3g+C3meC3gOC3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVG9vTWFueVJlcXVlc3RzIiBtc2dpZD0iMTIzNTM5NjkyNzA4NzE4ODI1MyI+IuC2ieC2veC3iuC2veC3k+C2uOC3iiDgt4Dgt5Lgt4Hgt4/gtr0g4La04LeK4oCN4La74La44LeP4Lar4La64Laa4LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgt4Dgt5ngtrjgt5LgtrHgt4og4La04LeA4Lat4LeS4La64LeSLiDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODk2NzcxMDAyNTAzNjE2MzgyMiI+Ijx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lMSRzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4La04LeU4La74Lax4La6IOC3gOC3k+C2uOC3miDgtq/gt53gt4Lgtrrgtprgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVN5bmMiIG1zZ2lkPSI4MzUzNTIzMDYwMjY5MzM1NjY3Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luY05vdGlmaWNhdGlvblRpdGxlIiBtc2dpZD0iMzk3NzQzMzQ5MTkxOTAxNDU4Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlVG9vTWFueURlbGV0ZXNOb3RpZmljYXRpb25EZXNjIiBtc2dpZD0iODEwMDk4MTQzNTA4MDY5NjQzMSI+Ijx4bGlmZjpnIGlkPSJDT05URU5UX1RZUEUiPiVzPC94bGlmZjpnPiDgtrjgt5Dgtprgt5Pgtrjgt4og4LeA4LeQ4Lap4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjQ5NDAxOTIzNDEwMjE1NDg5NiI+IuC2p+C3kOC2tuC3iuC2veC2p+C3iiDgtobgtqDgtrrgtrHgtrog4La04LeS4La74LeSIOC2h+C2rS4g4LaJ4LapIOC2seC3kuC2r+C3hOC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4La44LeE4La7IOC2nOC3nOC2seC3lCDgtrjgtprgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NzU5OTkyODY2ODAwMDA1NDEiPiLgtq/gt5Tgtrvgtprgtq7gtrEg4LaG4Lag4La64Lax4La6IOC2tOC3kuC2u+C3kyDgtofgtq0uIOC2ieC2qSDgtrHgt5Lgtq/gt4Tgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C2uOC3hOC2uyDgtpzgt5zgtrHgt5Qg4La44Laa4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lIiBtc2dpZD0iNjU0NTY5NjAwNzYzMTQwNDI5MiI+IuC2uOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODU0NTM1MTQyMDg2NTIwMjg1MyI+IuC2p+C3kOC2tuC3iuC2veC2pyDgt4Dgt5Lgtprgtr3gt4rgtrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzE5OTE5MDc1NDYzOTg4NjM4Ij4i4Lav4LeU4La74Laa4Lau4LaxIOC3gOC3kuC2muC2veC3iuC2tOC2uuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlIiBtc2dpZD0iNzE2NzcwMzM4OTgwMjYxODY2MyI+IuC2seC3kuC3hOC2rCDgtobgtprgt4/gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXJuX29uX3JhZGlvIiBtc2dpZD0iMzkxMjc5MzA5MjMzOTk2MjM3MSI+IuC2seC3nOC2u+C3kOC3hOC2seC3iiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHVybl9vZmZfcmFkaW8iIG1zZ2lkPSI4MTk4Nzg0OTQ5OTg3MDYyMzQ2Ij4i4Lax4Lec4La74LeQ4LeE4LeQ4Lax4LeKIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fbG9jayIgbXNnaWQ9Ijc5OTA5NDY1NTQ5NjA5ODE1MyI+IuC2reC3kuC2uyDgtoXgtpzgt5Tgtr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9vZmYiIG1zZ2lkPSI0MjY2NjE0MTA3NDEyODY1MDQ4Ij4i4La24La94La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9zaWxlbnQiIG1zZ2lkPSIzMTkyOTgxNjMwMTg0NzMwNzgiPiLgt4Tgtqwg4Lax4Laf4Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3ZpYnJhdGUiIG1zZ2lkPSI3MDcyMDQzMzg4NTgxNTUxMzk1Ij4i4LeE4LasIOC2seC2n+C2seC2uiDgtprgtrjgt4rgtrTgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9yaW5nIiBtc2dpZD0iODU5MjI0MTgxNjE5NDA3NDM1MyI+IuC3hOC2rCDgtrHgtp/gtrHgtrog4LeD4Laa4LeK4oCN4La74LeT4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fcHJvZ3Jlc3MiIG1zZ2lkPSIyMjgxMDc5MjU3MzI5OTgxMjAzIj4i4LeA4LeD4LePIOC2r+C2uOC2uOC3kuC2seC3iuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMzODU3NDUxNzk1NTU3MzE0NzAiPiLgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La6IOC3gOC3kOC3g+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQ5NzkyMTc1MjQyODIxMzUzIj4i4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgt4Dgt5Dgt4Pgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybV9xdWVzdGlvbiIgbXNnaWQ9IjI5MDY1NDQ3Njg4ODExMzYxODMiPiLgtpTgtrbgtqcg4LeA4LeD4LePIOC2r+C3kOC2uOC3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX3RpdGxlIiBtc2dpZD0iNzA1NDUwOTkxNDUwMDE0MDM2MSI+IuC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtobgtprgt4/gtrvgtrrgtqcg4Lax4LeQ4LeA4LatIOC2tOC2qyDgtpzgtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfY29uZmlybSIgbXNnaWQ9IjU1MjkzOTQ0NTAyNzg0NjY4Ij4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2huC2muC3j+C2u+C2uuC2pyDgtrHgt5Dgt4Dgtq0g4La04LarIOC2nOC3kOC2seC3iuC3gOC3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4LaU4La2IOC3g+C3iuC2ruC3j+C2tOC3kuC2rSDgtprgtrsg4LaH4Lat4LeSIOC3g+C3kuC2uuC2veC3lOC2uCDgtq3gt5ngt4DgtrEg4La04LeP4La74LeK4LeB4LeA4LeT4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgt5Lgtrrgtr3gt4rgtr0g4LaF4La24La9IOC3gOC3kyDgtrrgtrrgt5IuIOC2lOC2tiDgtrHgt5Dgt4Dgtq0g4La04LarIOC2nOC2seC3iuC3gOC2sSDgt4Dgt5Lgtqcg4LaS4LeA4LePIOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4LeD4LeS4Lav4LeUIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRfdGFza3NfdGl0bGUiIG1zZ2lkPSIzNjkxNzY0NjIzNjM4MTI3ODg4Ij4i4La44LeR4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+IuC2uOC3keC2rSDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MDg0NzcxNDAwODgwNTM2NjUiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgt4og4LeA4LeS4Laa4La94LeK4La0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNDA2NDE2ODMxNTQxNjE1MjU4Ij4i4Lav4LeU4La74Laa4Lau4LaxIOC3gOC3kuC2muC2veC3iuC2tCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9jayIgbXNnaWQ9IjI4NDQ5NDUxOTE3OTIxMTk3MTIiPiLgtq3gt5Lgtrsg4LaF4Lac4LeU4La9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9wb3dlcl9vZmYiIG1zZ2lkPSI0NDcxODc5NDQwODM5ODc5NzIyIj4i4La24La94La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2J1Z19yZXBvcnQiIG1zZ2lkPSI3OTM0MDEwNTc4OTIyMzA0Nzk5Ij4i4Lav4Led4LeCIOC3gOC2u+C3iuC2reC3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF90aXRsZSIgbXNnaWQ9IjI2Njc0OTQ4MDM3NDI1NDg1MzMiPiLgtq/gt53gt4Ig4LeA4LeP4La74LeK4Lat4LeP4LeA4Laa4LeKIOC2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9tZXNzYWdlIiBtc2dpZD0iMzk4NDQ3MDQ4NzUwMzUwNDU2Ij4i4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtrTgtqvgt5Lgt4Dgt5Lgtqngtrrgtprgt4og4La94LeZ4LeDIOC2uuC3kOC3gOC3k+C2uOC2pyDgtrjgt5ngtrog4LaU4La24Lac4LeaIOC3gOC2reC3iuC2uOC2seC3iiDgtovgtrTgt4/gtoLgtpwg4Lat4Lat4LeK4LeA4La6IOC2nOC3kOC2sSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3lCDgtofgtq0uIOC2r+C3neC3giDgt4Dgt4/gtrvgt4rgtq3gt4/gt4Ag4LaG4La74La44LeK4La3IOC2muC2uyDgtpHgtrog4La64LeQ4LeA4LeT4La44LanIOC3g+C3luC2r+C3j+C2seC2uOC3iiDgtprgtrvgtrEg4Lat4LeZ4Laa4LeKIOC2keC2uuC2pyDgtprgt5Lgt4Pgt5Lgtrrgtrjgt4og4Laa4LeP4La94La64Laa4LeKIOC2nOC2reC3gOC2seC3lCDgtofgtq07IOC2muC2u+C3lOC2q+C3j+C2muC2uyDgtongt4Dgt4PgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl90b2dnbGVfc2lsZW50X21vZGUiIG1zZ2lkPSI4MjE5NTI1MzQ0MjQ2ODEwOTI1Ij4i4Lax4LeS4LeE4LasIOC2huC2muC3j+C2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMzI4OTg0MTkzNzAwMzc1ODgwNiI+IuC3geC2tuC3iuC2r+C2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSIxNTA2MDQ2NTc5MTc3MDY2NDE5Ij4i4LeE4LasIOC3g+C2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX3RvZ2dsZV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iNTg4NDMzMDMwNjkyNjMwNzQ1NiI+IuC2heC3hOC3g+C3iuC2uuC3j+C2seC3jyDgtobgtprgt4/gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjI3MTk1NTc5ODI2MDg5MTk3NTAiPiLgtoXgt4Tgt4Pgt4rgtrrgt4/gtrHgt48g4LaG4Laa4LeP4La74La6IOC3g+C2muC3iuKAjeC2u+C3k+C2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4i4LaF4LeE4LeD4LeK4La64LeP4Lax4LePIOC2heC2muC3j+C2u+C2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LaG4Laa4LeP4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDgtrTgtq/gt4rgtrDgtq3gt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY29zdE1vbmV5IiBtc2dpZD0iNTQyOTgwODIxNzg2MTQ2MDQwMSI+IuC2lOC2tuC2nOC3miDgtrjgt5Tgtq/gtr3gt4og4LeA4LeQ4La64LeA4LaxIOC3g+C3muC3gOC3j+C3gOC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+IuC2lOC2tuC2nOC3meC2seC3iiDgtrjgt5Tgtq/gtr3gt4og4La64LaxIOC2r+C3muC3gOC2veC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21lc3NhZ2VzIiBtc2dpZD0iNzUyMTI0OTE0ODQ0NTQ1NjY2MiI+IuC2lOC2tuC2nOC3miDgtrTgtqvgt5Lgt4Dgt5LgtqkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21lc3NhZ2VzIiBtc2dpZD0iNzgyMTk5OTA3MTAwMzY5OTIzNiI+IuC2lOC2tuC2nOC3miBTTVMsIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4osIOC3g+C3hCDgt4Dgt5ngtrHgtq3gt4og4La04Lar4LeS4LeA4LeS4LapIOC2muC3kuC2uuC3gOC2seC3iuC2sSDgt4Pgt4Qg4La94LeS4La64Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9wZXJzb25hbEluZm8iIG1zZ2lkPSIzNTE5MTYzMTQxMDcwNTMzNDc0Ij4i4LaU4La24Lac4LeaIOC2tOC3nuC2r+C3iuC2nOC2veC3kuC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3BlcnNvbmFsSW5mbyIgbXNnaWQ9Ijg0MjY0NTMxMjk3ODg4NjEzMzgiPiLgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2tOC2reC3miDgtobgtqDgtrrgtrHgtrog4Laa4La74LaxIOC2veC2rywg4LaU4La2IOC2nOC3kOC2sSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeA4La94LanIOC2jeC2ouC3lCDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NvY2lhbEluZm8iIG1zZ2lkPSI1Nzk5MDk2NjIzNDEyMDQzNzkxIj4i4LaU4La24Lac4LeaIOC3g+C2uOC3j+C2ouC2uuC3k+C2uiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NvY2lhbEluZm8iIG1zZ2lkPSI3MTI5ODQyNDU3NjExNjQzNDkzIj4i4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgt4Pgt4Qg4LeD4LeP4La44LeP4LaiIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2uuC2seC3iiDgtpzgt5DgtrEg4Lat4Lec4La74Lat4LeU4La74LeUIOC3gOC3meC2rSDgto3gtqLgt5Qg4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9sb2NhdGlvbiIgbXNnaWQ9IjYzNTE0OTc0MjQzNjY5MjA0OSI+IuC2lOC2tuC2nOC3miDgt4Pgt4rgtq7gt4/gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2xvY2F0aW9uIiBtc2dpZD0iNTcwNDY3OTc2MzEyNDE3MDEwMCI+IuC2lOC2tuC2nOC3miDgtrfgt57gtq3gt5Lgtpog4La04LeS4LeE4LeS4Lan4LeU4La4IOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX25ldHdvcmsiIG1zZ2lkPSI1ODA4OTgzMzc3NzI3MTA5ODMxIj4i4Lai4LeP4La9IOC3g+C2seC3iuC2seC3kuC3gOC3muC2r+C2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbmV0d29yayIgbXNnaWQ9IjQ0NzgyOTk0MTMyNDE4NjE5ODciPiLgt4Dgt5Lgt4Dgt5LgtrAg4Lai4LeP4La9IOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iMTU4NTQwMzU0NDE2MjEyODEwOSI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjU2MjUyODg1NzcxNjQyODIzOTEiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LaU4LeD4LeK4LeD4LeaIOC2i+C2tOC3j+C2guC2nCDgt4Pgt4Qg4Lai4LeP4La9IOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI4MzI5MjYxNjcwMTUxODcxMjM1Ij4i4LeB4LeK4oCN4La74LeA4LeK4oCN4La6IOC3g+C3kOC2muC3g+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjI2NDE1MTU0MDMzNDc1NjgxMzAiPiLgt4Hgt4rigI3gtrvgt4Dgt4rigI3gtrog4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjIwOTI0NjY1MzQyNDc5ODAzMyI+IuC2tuC3kOC2p+C2u+C3kuC2uiDgt4Dgt5ngtq0g4La24La94La04LeP4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjY0NDEyNzUzMjA2Mzg5MTY5NDciPiLgtrbgt5Dgtqfgtrvgt5Lgtrrgt5og4La24La94La6IOC2muC3iuC3guC2q+C3kuC2muC3gCDgtoXgtqngt5Qg4LeA4LaxIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jYWxlbmRhciIgbXNnaWQ9IjU4NjM1MDg0Mzc3ODM2ODM5MDIiPiLgtq/gt5LgtrEg4Lav4La74LeK4LeB4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jYWxlbmRhciIgbXNnaWQ9IjU3Nzc1MzQzMTY5ODIxODQ0MTYiPiLgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC3g+C3kuC2r+C3iuC2sOC3kuC2seC3iuC2pyDgt4Pgt5jgtqLgt5Tgt4Ag4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGljdGlvbmFyeSIgbXNnaWQ9IjQxNDg1OTcxMjg4NDM2NDEzNzkiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LeB4La24LeK4LavIOC2muC3neC3guC2uiDgtprgt5Lgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RpY3Rpb25hcnkiIG1zZ2lkPSI3OTIxMTY2MzU1OTY0NzY0NDkwIj4i4La04La74LeS4LeB4LeT4La94LaaIOC3geC2tuC3iuC2ryDgtprgt53gt4Lgtrrgt5og4LeA4Lag4LaxIOC2muC3kuC2uuC3gOC3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODA5MDIzNzcwMjQzMjU3Njc4OCI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgt4Hgtrbgt4rgtq/gtprgt53gt4Lgtrrgtqcg4La94LeS4LeA4LeS4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyNzExNTYxOTk0NDk3MzYxNjQ2Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC3geC2tuC3iuC2r+C2muC3neC3guC2uuC2pyDgt4DgtqDgtrEg4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYm9va21hcmtzIiBtc2dpZD0iMTk0OTUxOTY3MzEwMzk2ODIyOSI+IuC2tOC3kuC2p+C3lOC3g+C2seC3iiDgt4Pgt4Qg4LaJ4Lat4LeS4LeE4LeP4LeD4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ib29rbWFya3MiIG1zZ2lkPSI0MTY5NzcxNjA2MjU3OTYzMDI4Ij4i4La04LeS4Lan4LeU4LeD4Lax4LeKIOC3g+C3hCDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrsg4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC3gOC3meC2rSDgto3gtqLgt5Qg4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kZXZpY2VBbGFybXMiIG1zZ2lkPSI2MTE3NzA0NjI5NzI4ODI0MTAxIj4i4LeD4LeT4Lax4LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZpY2VBbGFybXMiIG1zZ2lkPSI0NzY5MzU2MzYyMjUxNjQxMTc1Ij4i4LeD4LeT4Lax4LeU4LeAIOC3g+C2muC3g+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfdm9pY2VtYWlsIiBtc2dpZD0iNDE2MjIzNzE0NTAyNzU5MjEzMyI+IuC3hOC2rCDgtq3gt5DgtrTgt5Hgtr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3ZvaWNlbWFpbCIgbXNnaWQ9IjI0OTg0MDM5Njk4NjI5NTEzOTMiPiLgt4Tgtqwg4Lat4LeQ4La04LeR4La9IOC3gOC3meC2rSDgto3gtqLgt5Qg4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9taWNyb3Bob25lIiBtc2dpZD0iMTcxNTM5OTAwMjUwMDQzNDY0Ij4i4La44La64LeS4Laa4LeK4oCN4La74Lec4LeG4Led4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19taWNyb3Bob25lIiBtc2dpZD0iNzEwNjYxODI4NjkwNTczODQwOCI+IuC3geC2tuC3iuC2r+C2uiDgtrTgtqfgt5Lgtpzgtq0g4Laa4LeS4La74LeT4La44LanIOC2uOC2uuC3kuC2muC3iuKAjeC2u+C3nOC3huC3neC2seC2uiDgt4Dgt5ngtq0g4LaN4Lai4LeUIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FtZXJhIiBtc2dpZD0iNDgyMDM3MjQ5NTg5NDU4NjYxNSI+IuC2muC3kOC2uOC2u+C3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+IuC2oeC3j+C2uuC3j+C2u+C3luC2tCDgt4Tgt50g4LeA4LeT4Lap4LeS4La64LedIOC2nOC3iuKAjeC2u+C3hOC2q+C2uiDgt4PgtrPgt4Tgt48g4Laa4LeQ4La44La74LeP4LeAIOC3gOC3meC2rSDgto3gtqLgt5Qg4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zY3JlZW5sb2NrIiBtc2dpZD0iODI3NTUwMDE3MzMzMDcxODE2OCI+IuC2heC2nOC3lOC3heC3lCDgtq3gt5LgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NjcmVlbmxvY2siIG1zZ2lkPSI3MDY3NDk3MTI4OTI1NDk5NDAxIj4i4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uuC3miDgtoXgtpzgt5Tgt4Xgt5Qg4Lat4LeS4La74La64LeaIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gOC2uuC2pyDgtrbgtr3gtrTgt4/gtrEg4LeE4LeQ4Laa4LeS4La64LeP4LeALiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hcHBJbmZvIiBtc2dpZD0iODAyODc4OTc2MjYzNDE0NzcyNSI+IuC2lOC2tuC2nOC3miDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2reC3nOC2u+C2reC3lOC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXBwSW5mbyIgbXNnaWQ9IjM5NTAzNzg1MzgwNDk2MjU5MDciPiLgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LeaIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gOC2uuC2pyDgtrbgtr3gtrTgt5Hgtrjgt4og4Laa4LeFIOC3hOC3kOC2muC3kiDgtrbgt4AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dhbGxwYXBlciIgbXNnaWQ9IjM4NTAyODAxNTgwNDExNzU5OTgiPiLgtrbgt5Lgtq3gt5TgtrTgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dhbGxwYXBlciIgbXNnaWQ9IjU2MzA0MTc4NTQ3NTA1NDAxNTQiPiLgtovgtrTgt4/gtoLgtpwg4La24LeS4Lat4LeU4La04Lat4LeaIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1DbG9jayIgbXNnaWQ9IjQwNjUzNTc1OTIzNjYxMjk5MiI+IuC2lOC2u+C2veC3neC3g+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3lzdGVtQ2xvY2siIG1zZ2lkPSIzOTQ0MzU5ODMzNjI0MDk0OTkyIj4i4LaL4La04LeP4LaC4LacIOC2muC3j+C2vSDgt4Tgt50g4Laa4LeP4La9IOC2muC2veC3j+C2tCDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdGF0dXNCYXIiIG1zZ2lkPSIyMDk1ODYyNTY4MTEzOTQ1Mzk4Ij4i4Lat4Lat4LeK4LeAIOC2reC3k+C2u+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iNjI0MjU5MzQzMjIyNjgwNzE3MSI+IuC2i+C2tOC3j+C2guC2nCDgtq3gtq3gt4rgt4Ag4Lat4LeT4La74LeUIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeW5jU2V0dGluZ3MiIG1zZ2lkPSIzMzQxOTkwOTg2MTQ3ODI2NTQxIj4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C3kOC2muC3g+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3luY1NldHRpbmdzIiBtc2dpZD0iNzYwMzE5NTI2NTEyOTAzMTc5NyI+IuC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjb3VudHMiIG1zZ2lkPSIzMzU5NjQ2MjkxMTI1MzI1NTE5Ij4i4LaU4La24Lac4LeaIOC2nOC3kuC2q+C3lOC2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjb3VudHMiIG1zZ2lkPSI0OTQ4NzMyNjQxODI3MDkxMzEyIj4i4La94La24LeP4Lac4LatIOC3hOC3kOC2muC3kiDgtpzgt5Lgtqvgt5Tgtrjgt4og4LeA4La94LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2hhcmR3YXJlQ29udHJvbHMiIG1zZ2lkPSI3OTk4MjE0OTY4NzkxNTk5MzI2Ij4i4Lav4LeY4Lap4LeP4LaC4LacIOC2tOC3j+C2veC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9IjQzNTcwNTc4NjEyMjU0NjI3MDIiPiLgt4Tgt5HgtrHgt4rgtqngt4rgt4Pgt5ngtqfgtrrgt5og4Lav4LeY4Lap4LeP4LaC4LacIOC3gOC2veC2pyDgt4Pgt5jgtqLgt5Tgt4Dgtrgg4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfcGhvbmVDYWxscyIgbXNnaWQ9IjkwNjcxNzM5ODgzMjU4NjU5MjMiPiLgtq/gt5Tgtrvgtprgtq7gtrEg4LaH4La44Lat4LeU4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19waG9uZUNhbGxzIiBtc2dpZD0iNzQ4OTcwMTYyMDQ0NjE4Mzc3MCI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtofgtrjgtq3gt5Tgtrjgt4og4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2seC3iuC2sSwg4La04Lan4LeS4Lac4LatIOC2muC2u+C2seC3iuC2sSDgt4Pgt4Qg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3lzdGVtVG9vbHMiIG1zZ2lkPSI0NjUyMTkxNjQ0MDgyNzE0MDQ4Ij4i4La04Lav4LeK4Law4Lat4LeSIOC2uOC3meC3gOC2veC2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3lzdGVtVG9vbHMiIG1zZ2lkPSI4MTYyMTAyNjAyMTkwNzM0MzA1Ij4i4La04Lav4LeK4Law4Lat4LeS4La64LeaIOC2tOC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt4og4La04LeK4oCN4La74LeA4Lea4LeB4La6IOC3g+C3hCDgtrTgt4/gtr3gtrHgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSIzNDQ2MTY0NTg0NzEwNTk2NTEzIj4i4LeD4LaC4LeA4La74LeK4Law4LaaIOC2uOC3meC3gOC2veC2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjcwNTg4MjgwMzIzNTgxNDIwMTgiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4LaC4LeA4La74LeK4Law4Laa4La64Lax4LeKIOC3g+C2s+C3hOC3jyDgtrTgtrjgtqvgtprgt4og4LaF4LeA4LeB4LeK4oCN4La6IOC3gOC3kuC3geC3muC3guC3j+C2guC2nC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaXNwbGF5IiBtc2dpZD0iNjA1MTAwMjAzMTkzMzAxMzcxNCI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0gVUkg4LeD4Laz4LeE4LePIOC2tuC2veC2tOC3j+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RvcmFnZSIgbXNnaWQ9IjE5NzExMTg3NzA1NDYzMzY5NjYiPiLgtobgtqDgtrrgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzQ0MjMxODUwMjQ0Njg3NDk5OSI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI5MjAzMzAyMjE0OTE1MzU1Nzc0Ij4iU0Qg4La04LatIOC3gOC3meC2rSDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiLgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt48g4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI0MjA1MTk2ODgxNjc4MTQ0MzM1Ij4i4LaL4La04Laa4LeP4La74LeT4LeA4LaxIOC2reC3j+C2muC3iuC3guC2qyDgtongtr3gt4rgtr3gt5Pgtrjgt4og4Laa4LeFIOC3hOC3kOC2muC3kiDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzOTAxNzE3OTM2OTMwMTcwMzIwIj4i4Laa4LeA4LeU4LeF4LeUIOC2heC2seC3iuC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtr3gtrbgt4/gtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzc3MjIyNTAwODYwNTMxMDY3MiI+IuC2lOC2tiDgtoXgtrHgt4rgtq3gtrvgt4rgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4LaxIOC2muC3gOC3lOC3heC3lOC3gOC3miDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4La04La74LeT4Laa4LeK4LeC4LePIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+IuC3g+C3iuC2tOC2u+C3iuC3geC2uuC3meC2seC3iiDgtpzgt4Dgt5rgt4Lgtqvgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiLgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74LaxIOC2heC2uuC3kuC2reC2uCDgt4Tgtqwg4Lax4Lac4LePIOC2muC2reC3jyDgtprgt5ngtrvgt5ngtrHgt5Qg4LaH4Lat4LeSIOC2heC2reC2uyDgtongtoLgtpzgt5Lgtq3gt5Ig4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2reC3kuC2u+C2uiDgtpzgt4Dgt5rgt4Lgtqvgtrog4Laa4LeS4La74LeT4La44LanIOC2tOC3lOC3heC3lOC3gOC2seC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNzM5ODgxNzY2NTIyNTk0MDczIj4i4LaL4LeD4LeD4LeKIOC3gOC3meC2tuC3iiDgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Ag4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iNzg4MTA2Mzk2MTUwNzUxMTc2NSI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrrgtqcg4La04LeK4oCN4La74LeA4Lea4LeB4LeK4oCN4La64Lat4LeP4LeA4La6IOC3gOC3kOC2qeC3kuC3gOC2sSDgtr3gt5ngt4Mg4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtofgtq3gt5Dgtrjgt4og4LeA4LeS4LanIOC3g+C3iuC2muC3iuKAjeC2u+C3kuC2tOC3iuC2p+C3iiDgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4La7IOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSIyMTAzNDQwMzkxOTAyNDEyMTc0Ij4i4LaU4La2IOC2p+C2uuC3kuC2tOC3iiDgtprgt4Ug4La04LeZ4LeFIOC2tuC2veC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IuC2q+C2uuC3gOC2u+C2tOC2reC3iiDgtoXgtoLgtpog4LeD4LeEIOC2uOC3lOC2u+C2tOC2ryDgt4Dgt5DgtrHgt5Ig4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC2r+C2reC3iuC2rSDgtofgtq3gt5Tgt4Xgtq3gt4og4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+IuC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4Ag4LaF4La24La9IOC2muC2u+C2seC3iuC2sSDgt4Tgt50g4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLgtq3gtq3gt4rgt4Ag4Lat4LeT4La74LeU4LeAIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4LedIOC2tOC2r+C3iuC2sOC2reC3kiDgtrHgt5Lgtrvgt5bgtrTgtpog4LaR4Laa4Lat4LeUIOC3hOC3nSDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcyNDcyODE5MTEzODc5MzE0ODUiPiLgtq3gtq3gt4rgt4Ag4Lat4LeT4La74LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcxNjExMzY2MDc5NTk3NjA2MCI+IuC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4Ag4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iMTE0ODE5ODc4NTkzNzQ4OTI2NCI+IuC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4Ag4Lav4LeS4LacIOC3hOC3kOC2u+C3k+C2uC/gt4Tgt5Dgtprgt5Lgtr3gt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSI2OTE3NTQ5NDM3MTI5NDAxMTMyIj4i4Lat4Lat4LeK4LeAIOC2reC3k+C2u+C3lOC3gCDgtq/gt5Lgtpwg4LeE4LeQ4La74LeT4La44LanIOC3hOC3nSDgt4Tgt5Dgtprgt5Lgt4Xgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiLgtrTgt5Lgtqfgt4DgtrEg4LaH4La44Lat4LeU4La44LeKIOC3gOC2vSDgtrjgtpwg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iNTMzMTMxODkzMTkzNzQwMjA0MCI+IuC2tOC3kuC2p+C3gOC2sSDgtofgtrjgtq3gt5Tgtrjgt4og4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4Qg4LaH4La44Lat4LeT4La44LanIOC2seC3kuC2uuC2uOC3kuC2rSDgtoXgtoLgtprgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uuC3meC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4La04LeS4Lan4LeA4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgtrHgt5Lgtrvgt5Pgtprgt4rgt4LgtqvgtrosIOC2seC3kOC3gOC2rSDgt4Tgt5Dgtrvgt4Dgt5Pgtrgg4LeE4LedIOC3gOC3kOC3heC2muC3iuC3gOC3k+C2uCDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVNtcyIgbXNnaWQ9Ijg2NzM0NzE3Njg5NDc4OTUwODIiPiLgtprgt5ngtqfgt5Ig4La04Lar4LeS4LeA4LeS4LapIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCAoU01TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVTbXMiIG1zZ2lkPSI2NDI0Mzg3NzU0MjI4NzY2OTM5Ij4iU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtr3gt5Dgtrbgt5Pgtrjgtqcg4LeD4LeEIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC3hOC3kiDgtq3gt5rgtrvgt5Tgtrgg4La64LeZ4Lav4LeU4La44LanIOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4La94LeQ4La24LeZ4LaxIOC2tOC2q+C3kuC3gOC3kuC2qSDgtoXgtrDgt5Pgtprgt4rgt4Lgtqvgtrog4Laa4LeS4La74LeT4La44LanIOC3hOC3kOC2muC3kuC3gOC3k+C2uCDgt4DgtrEg4LaF4Lat4La7LCDgtpLgt4Dgt48g4LaU4La24LanIOC2seC3nOC2tOC3meC2seC3iuC3gOC3jyDgtrjgtprgt48g4Lav4LeQ4La44LeT4La44Lan4LavIOC3hOC3kOC2muC3kiDgt4Dgt5Pgtrjgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlTW1zIiBtc2dpZD0iMTgyMTMxNzM0NDY2ODI1NzA5OCI+IuC2tOC3meC3hSDgtrTgtqvgt5Lgt4Dgt5Tgtqkg4La94La24LeP4Lac4Lax4LeK4LaxIChNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+Ik1NUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LeD4Lec4La64LePIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgt4Pgt4Qg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La64LeZ4Lav4LeU4La4IOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgtprgtrvgtrHgt5Qg4La94La24LaxIOC2heC2reC2uyDgtpTgtrbgtqcg4La94LeQ4La24LeU4LaxIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrTgt5ngtrHgt4rgt4Dgt5Pgtrjgt5ngtrHgt4og4Lat4Lec4La74LeA4La4IOC2uOC2muC3jyDgtq/gt5Dgtrjgt5Lgtrog4LeE4LeQ4Laa4LeSIOC2tuC3gCDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4LaF4Lav4LeE4LeD4LeKIOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4i4LeE4Lav4LeS4LeD4LeSIOC3gOC3kuC2muC3j+C3geC2sSDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9Ijg0ODUyNDA3MDI2MjQzMTk3NCI+IuC3hOC2r+C3kuC3g+C3kiDgt4Dgt5Lgtprgt4/gt4Eg4La04Lar4LeS4LeA4LeS4LapIOC2veC3kOC2tuC3k+C2uOC2pyDgt4Pgt4Qg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La04Lav4LeK4Law4Lat4LeSIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gtqcg4La04La44Lar4Laa4LeKIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LaF4Lav4LeP4LeFIOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjE1OTgzMjg4NDM2MTk2NDYxNjYiPiLgt4Pgt5ngtr3gt4og4La04LeK4oCN4La74Lag4LeP4La74LarIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4i4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtr3gt5Dgtrbgt5Tgtqvgt5Qg4LeD4LeZ4La94LeKIOC3gOC3kuC2muC3j+C3geC2sSDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtqcg4LeE4Lav4LeS4LeD4LeSIOC2heC3gOC3g+C3iuC2ruC3j+C3gOC2seC3iiDgtrTgt5Lgt4Xgt5LgtrbgtrMg4LaF4Lax4Lat4LeU4La74LeUIOC2h+C2n+C3gOC3k+C2uOC2pyDgt4Pgt5ngtr3gt4og4LeA4LeS4Laa4LeP4LeB4LaxIOC2tOC2q+C3kuC3gOC3kuC2qSDgtofgtq3gt5Dgtrjgt4og4LeD4LeK4Lau4LeP4Lax4LeA4La9IOC3g+C3kuC2pyDgtrrgt4DgtrHgt5Qg4La94La24La64LeSLiDgt4Tgtq/gt5Lgt4Pgt5Ig4LeD4LeZ4La94LeKIOC3gOC3kuC2muC3j+C3geC2sSDgtr3gt5Dgtrbgt5ngtrEg4LaF4LeA4LeD4LeK4Lau4LeP4LeA4Laa4Lav4LeTLCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC2n+C3kuC2seC3iiDgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LanIOC2muC3j+C2u+C3iuC2uiDgt4Pgt4/gtrDgtrHgtrrgtqcg4LeE4LedIOC2muC3iuKAjeC2u+C3kuC2uuC2muC2u+C2q+C2uuC2pyDgtrbgt4/gtrDgt48g4LeD4LeS4Lav4LeU4LeA4LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRTbXMiIG1zZ2lkPSI1NjAwODMwNjEyMTQ3NjcxNTI5Ij4iU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrrgt5Dgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IlNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeQ4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4La24La94LeP4La04Lec4La74Lec4Lat4LeK4Lat4LeUIOC2seC3nOC3gOC3liDgtrTgt4rigI3gtrvgtq3gt5LgtrXgtr0g4LaF4Lat4LeKIOC3gOC3kuC2uiDgt4Tgt5DgtpouIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaU4La24Lac4LeaIOC2reC3hOC3gOC3lOC2u+C3lOC3gOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4La04Lar4LeS4LeA4LeS4LapIOC2uuC3kOC3gOC3k+C2uCDgtrjgtp/gt5LgtrHgt4og4LaU4La24Lac4LeaIOC2uOC3lOC2r+C2veC3iiDgt4Dgt5Dgtrog4Laa4La9IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4i4La04Lar4LeS4LeA4LeS4LapIOC3g+C3kuC2r+C3lOC3gOC3k+C2uCDgt4Tgtrvgt4Tgt48g4La04LeK4oCN4La74Lat4LeS4Lag4LeP4La7IOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4i4La04LeQ4La44LeS4Lar4LeZ4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4La04Lar4LeS4LeA4LeS4LapIOC2lOC3g+C3iuC3g+C3miDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC3hOC3g+C3lOC2u+C3lOC3gOC3k+C2uOC2pyDgt4Dgt5ngtrHgtq3gt4og4La04Lar4LeS4LeA4LeS4LapIOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4LaJ4La94LeK4La94LeT4La44LeKIOC2uuC3kOC3gOC3k+C2uOC2pywg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+IuC2lOC2tuC2nOC3miDgtrTgt5ngt4Ug4La04Lar4LeS4LeA4LeU4LapIOC2muC3kuC2uuC3gOC2seC3iuC2sSAoU01TIOC3hOC3nSBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LeE4LedIFNJTSDgtrTgtq3gt5og4LaG4Lag4La64Lax4La6IOC2muC2uyDgtofgtq3gt5IgU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgt4Tgt50g4LeA4LeS4LeB4LeA4LeP4LeD4Lav4La64LeSIOC2tuC3gOC3kuC2seC3iiDgtq3gt5zgtrvgt4Dgtrgg4LeD4LeS4La64La94LeUIFNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4Laa4LeS4La64LeA4LeT4La44LanIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY5NTk2NzUzMzQ1NzI0MDU1MCI+IuC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LeE4LedIFNJTSDgtrTgtq3gt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8gU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgt4Tgt50g4LeA4LeS4LeB4LeK4LeA4LeP4LeD4Lav4LeP4La64LeTIOC2tuC3gOC3kuC2seC3iiDgtq3gt5zgtrvgt4Dgtrgg4LeD4LeS4La64La94LeUIFNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4Laa4LeS4La64LeA4LeT4La44LanIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+IuC2lOC2tuC2nOC3miDgtprgt5ngtqfgt5Ig4La04Lar4LeS4LeA4LeS4LapIOC3g+C2guC3g+C3iuC2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5PgtrggKFNNUyDgt4Tgt50gTU1TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgt4Tgt50gU0lNIOC2tOC2reC3miDgtpzgtrbgtqngt48g4Laa4La7IOC2h+C2reC3kiBTTVMg4La04Lar4LeS4LeA4LeS4LapIOC3gOC3meC2rSDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaU4La24Lac4LeaIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrjgtprgt48g4Lav4LeQ4La44LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiLgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC3hOC3nSBTSU0g4La04Lat4LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavIFNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La94LeS4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2lOC2tuC2nOC3miDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La44Laa4LePIOC2r+C3kOC2uOC3kuC2uiDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9IjU5OTEzOTg3MTE5MzY1OTA0MTAiPiLgtrTgt5ngt4Ug4La04Lar4LeS4LeA4LeS4LapIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCAoV0FQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4iV0FQIOC2tOC2q+C3kuC3gOC3kuC2qSDgtr3gt5Dgtrbgt5Pgtrjgtqcg4LeD4LeEIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrrgt5ngt4Tgt5Ig4LaU4La24LeAIOC2kuC3gOC3j+C2pyDgtrTgt5ngtrHgt4rgt4Dgt5Pgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2lOC2tuC2pyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La64LanIOC3hOC3nSDgtrjgt5Dgtprgt5Pgtrjgtqcg4LeE4LeQ4Laa4LeS4La64LeP4LeAIOC2h+C2reC3lOC3heC2reC3iiDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUYXNrcyIgbXNnaWQ9IjY0NjYwOTUzOTY2MjM5MzM5MDYiPiLgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgtr3gtrbgt4/gtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUYXNrcyIgbXNnaWQ9Ijc0NTQyMTU5OTU4NDc2NTgxMDIiPiLgtq/gt5DgtrHgtqcg4LeD4LeEIOC2uOC3keC2rSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4LeP4La74LeK4La64La64Lax4LeKIOC2tOC3kuC3heC3kuC2tuC2syDgt4Dgt5Lgt4Pgt4rgtq3gtrvgt4/gtq3gt4rgtrjgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3nOC2uuC3jyDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uiDgtprgt5TgtrjgtrEg4La64LeZ4Lav4LeU4La44LeKIOC2i+C2tOC3j+C2guC2nOC2uuC3miDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74Lax4LeK4Lax4Lea4LavIOC2uuC2sSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC3g+C3nOC2uuC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LaJ4LapIOC2r+C3kuC2uiDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+IuC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgtoXgtq3gtrsg4LaF4Lax4LeK4Lat4La74LeK4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeTIOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSIzNjQ2NzA5NjM2MjMzODU3ODYiPiLgtovgtrTgt4/gtoLgtpzgtrrgt5og4LeA4LeS4LeA4LeS4LawIOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgt4Tgtrvgt4Tgt48g4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Lax4LeKIOC2r+C3kOC2muC3iuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC2heC2reC2uyDgtobgtrvgtprgt4rgt4Lgt4/gt4Ag4Laa4Lap4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjI1Njc3MzQyODU1NDUwNzQxMDUiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4LaF4Lat4La7IOC2heC2seC3iuC2reC2u+C3iiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4LeT4La44LanIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtrbgtr3gtrTgtq3gt4rigI3gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjM3Njg0MTM2ODM5NTUwMjM2NiI+IuC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgt4Tgtrvgt4Tgt48g4LeD4LeS4Lav4LeUIOC2muC3hSDgt4Tgt5Dgtprgt5Ig4LeD4LeS4La64La94LeUIOC2heC2seC3iuC2reC2u+C3iiDgtprgt4rigI3gtrvgt5Lgtrrgt48g4LeA4La94LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2VycyIgbXNnaWQ9IjE2NzYxNTA5MTE2NzIyODI0MjgiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+IuC3gOC3kuC3g+C3iuC2reC2uyDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La4LCDgtrHgt5Lgtrvgt4rgtrjgt4/gtqvgtprgtrvgtqvgtrosIOC2uOC2muC3j+C2r+C3kOC2uOC3k+C2uCDgtofgtq3gt5Tgt4Xgt5Qg4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4i4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjE1MzgyNDc0MTQ0MDcxNzU5OSI+IuC2r+C3kOC2seC2pyDgt4Pgt4Qg4La44LeR4Lat4LaaIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgt4/gtrvgt4rgtrrgtrrgtrHgt4og4La04LeS4LeF4LeS4La24LazIOC3gOC3kuC3g+C3iuC2reC2u+C3j+C2reC3iuC2uOC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtrTgt5Lgt4Xgt5LgtrbgtrMg4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Pgt5zgtrrgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2ieC2qSDgtq3gt5Lgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4i4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeQ4LeA4LatIOC2heC2seC3lOC2tOC3kuC3heC3kuC3gOC3meC2veC2pyDgt4Pgt5Dgtprgt4Pgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW9yZGVyVGFza3MiIG1zZ2lkPSI3NzM0MjE3NzU0ODc3NDM5MzUxIj4i4La04LeZ4La74La24LeS4La44LanIOC3hOC3nSDgtrTgt4Pgt5Tgtrbgt5Lgtrjgtqcg4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC2nOC3meC2seC2uuC3j+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2huC2r+C3j+C2seC2uuC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4La64LeZ4Lav4LeU4La4IOC2uOC3meC2uiDgt4Pgt5Lgtq/gt5Tgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW1vdmVUYXNrcyIgbXNnaWQ9IjY4MjE1MTM0MDE4NzAzNzc0MDMiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4Law4LeP4LeA4Lax4La6IOC2seC3gOC2reC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlbW92ZVRhc2tzIiBtc2dpZD0iMTM5NDcxNDM1MjA2MjYzNTQ5MyI+IuC2muC3j+C2u+C3iuC2uuC2uuC2seC3iiDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgtpLgt4Dgt4/gtrrgt5ngt4Tgt5Ig4La64LeZ4Lav4LeU4La44LeKIOC2seC3kOC2reC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeE4LeQ4LeD4LeS4La74LeT4La4IOC2tuC3j+C2sOC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSI3MzkxMTkxMzg0MDI3MzAzMDY1Ij4i4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2heC2p+C3iuC2p+C3kiDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSIxNjE1ODgxOTMzMDM0MDg0NDQwIj4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C2muC2uOC3iiDgtoXgtqfgt4rgtqfgt5Ig4LeA4La94LanIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5PgtrjgtqcsIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5PgtrjgtqcsIOC3g+C3hCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC3hOC3kOC3g+C3kuC2u+C3k+C2uCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC2nOC3kuC2seC3iiDgtrbgt4/gtrDgt48g4LeA4LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSIyOTE4NzY4MjM4MDQ1MjA2NDU2Ij4i4LaV4Lax4LeR4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2muC3iiDgtoXgtrvgtrngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iOTk3ODIzNjk1MzQzNTg0MDAxIj4i4LaF4LeA4LeD4La7IOC2huC2u+C2muC3iuC3guC3j+C3gCDgt4Tgt50g4La64LeQ4LeA4LeU4La44LeKIOC2reC2reC3iuC3gOC2uuC3meC2seC3iiDgtq3gt5zgtrvgt4Dgtrgg4LaV4Lax4LeR4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2muC3iiDgtobgtrvgtrjgt4rgtrcg4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiLgtq3gt5Lgtrsg4Lac4LeQ4LeF4La04LeU4La4IOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTIwNDM2MTg2OTM5MTczNzQiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC2reC3kuC2uyDgtpzgt5Dgtr3gtrTgt5Tgtrjgt4og4La44LeP4Lav4LeS4La94LeS4La6IOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgt4Tgt5Dgt4Pgt5Lgtrvgt5Pgtrgg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtprgt5Dgtqngt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0RGVidWdBcHAiIG1zZ2lkPSIzMDIyMTA3MTk4Njg2NTg0MDUyIj4i4La64LeZ4Lav4LeU4La44LeKIOC2seC3kuC2r+C3nOC3g+C3iuC2muC2u+C2q+C2uiDgt4Pgtrbgtr0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0RGVidWdBcHAiIG1zZ2lkPSI0NDc0NTEyNDE2Mjk5MDEzMjU2Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC2muC3iiDgt4PgtrPgt4Tgt48g4Lax4LeS4Lav4Lec4LeD4LeK4Laa4La74Lar4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4Lax4LeP4LeBIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MTYyMDkyMTg1MTI0MjM0NDgwIj4i4La04Lav4LeK4Law4Lat4LeSIOC3g+C2guC2r+C2u+C3iuC3geC2miDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4i4La04LeZ4Lav4LeZ4LeD4LeS4La6IOC3hOC3nSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LaF4Laa4LeU4La74LeUIOC2tOC3iuKAjeC2u+C2uOC3j+C2q+C2uiDgt4Dgt5DgtrHgt5Ig4La04LeA4Lat4LeS4LaxIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3g+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjU2ODQ1MDQwNTgxOTI5MjEwOTgiPiLgtrjgt53gtqfgtrvgt4og4La74LauIOC2huC2muC3j+C2u+C2uiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiLgtprgt4/gtrvgt4og4LaG4Laa4LeP4La74La6IOC3g+C2tuC2vSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjM5MTQwMjY2ODc0MjAxNzcyMDIiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kOC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iNDU5MzM1MzIzNTk1OTczMzExOSI+IuC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4La04LeD4LeU4La24LeS4La44LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kiDgtoXgt4Dgt4PgtrHgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeKIOC2sOC3j+C3gOC2seC2uiDgtrHgt5Dgt4Dgtq3gt5Pgtrjgtqcg4La44LeZ4La6IOC3hOC3muC2reC3lOC3gOC2muC3iiDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjIzMjk2Mjc0Mjg4MzIwNjc3MDAiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2tuC2veC3meC2seC3iiDgtrHgt4Dgtq3gt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjUyNTMxNTcyOTYxODM5NDA4MTIiPiLgtrrgt5ngtq/gt5Tgtrjgtqcg4La24La94LeZ4Lax4LeKIOC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeQ4LeA4Lat4LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZUJhY2siIG1zZ2lkPSI2NTI5MzUyMDQwNzI1ODQ2MTYiPiLgtrrgt5ngtq/gt5Tgtrgg4LeA4LeQ4LeD4LeT4La44LanIOC2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZUJhY2siIG1zZ2lkPSIzODkyMjk1ODMwNDE5NTEzNjIzIj4i4Lax4LeQ4LeA4Lat4LeT4La44LanIOC2tOC3meC2u+C2tuC3kuC2uOC3miDgtofgtq3gt5Ig4LaV4Lax4LeR4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2muC3iiDgtrbgtr3gt5ngtrHgt4og4Lax4LeQ4LeA4Lat4LeT4La44LanIOC3g+C3hCDgtrTgt5Lgtqfgt5TgtrTgt4Pgtqcg4La64LeP4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2R1bXAiIG1zZ2lkPSIxNjgxNzk5ODYyNDM4OTU0NzUyIj4i4La04Lav4LeK4Law4Lat4LeSIOC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtq3gtq3gt4rgt4Dgtrog4LeD4Lec4La64LePIOC2veC2tuC3jyDgtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uuC3miDgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4Lat4Lat4LeK4LeA4La6IOC2veC3kOC2tuC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4LeA4LeU4Lax4LeKIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uuC2uuC3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq0g4Lax4Lec4Laa4La74LaxIOC3gOC3kuC3gOC3kuC2sOC2reC3iuC3gOC2uuC2muC3kuC2seC3iiDgtrrgt5Tgtq3gt4og4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC3g+C3hCDgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4Lat4Lec4La74Lat4LeU4La74LeUIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Lec4La64LePIOC2veC2tuC3jyDgtpzgtq0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSI4MDIyNTg4NjA4OTk0NTg5OTM4Ij4i4Lat4LeS4La7IOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSIzMTkzMjY5MDY5NDY5NzAwMjY1Ij4i4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeTIOC2muC3gOC3lOC3heC3lOC3gOC2miDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4Laa4LeA4LeU4LeF4LeUIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrgg4LeD4LeEIOC2uOC3lOC2u+C2tOC2r+C2uiDgt4Tgt5Dgtrsg4LaS4LeA4LeP4La64LeZ4LeE4LeSIOC2tOC3meC3hSDgtrTgtrvgt5Lgtprgt4rgt4Lgt48g4Laa4LeS4La74LeT4La4IOC3g+C3kuC2r+C3lOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjIzMTI2MTIxMzUxMjczMTAyNTQiPiLgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Dgtrog4Lat4LeP4LeA4Laa4LeP4La94LeS4Laa4LeAIOC3g+C2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4i4LaL4La04LeP4LaC4Lac4La6IOC3gOC3meC2rSDgtrTigI3gt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Ag4Lat4LeP4LeA4Laa4LeP4La94LeS4Laa4LeAIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtoXgt4DgtrDgt4/gtrHgtrrgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La04oCN4LeK4oCN4La74LeA4Lea4LeB4LeK4oCN4La64Lat4LeP4LeAIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI4NTMyMjk1MTk5MTEyNTE5Mzc4Ij4i4Lat4LeS4La7IOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI0OTk4ODM2MzcwNDI0MTg2ODQ5Ij4i4Laa4LeA4LeU4LeF4LeUIOC2muC3heC2uOC2seC3j+C2muC2u+C3lCDgtrjgtpzgt5LgtrHgt4og4Laa4LeA4LeU4LeF4LeU4LeAIOC2nOC3kOC2sSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeD4Lec4La64LePIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2tOC2r+C3iuC2sOC2reC3kiDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2muC3kOC2uOC2reC3kiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La94La24LePIOC2nOC2rSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODY3NTUzNTY0ODgwNzQyNzM4OSI+IuC3g+C3kuC2r+C3lOC3gOC3k+C2uOC3iiDgtrTgt5ngtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODAwNjIzNjMxNTg4ODM0NzY4MCI+IuC2tOC3kuC2p+C2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeZ4La7IOC3g+C3kuC2uuC2veC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LeD4LeS4Lav4LeU4LeA4LeT4La44LeK4LeA4La9IOC2tOC3iuKAjeC2u+C3gOC3j+C3hOC2uuC2muC3iiDgtrTgt5ngtrvgt5Pgtrjgtqcg4La64Lec4Lav4LePIOC2nOC2seC3iuC2seC3jyDgtobgtq/gt4/gtrEg4La04LeZ4La74LeT4La44Laa4LeKIOC2veC3kuC2uuC3j+C2tOC2r+C3kuC2guC2oOC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtrjgt5Dgtq/gt5Lgt4Tgtq3gt4og4LeA4LeT4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtrTgtq/gt4rgtrDgtq3gt5IgVUkg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrTgt4/gtr3gtrHgtrog4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNTk3MzYyNjczODE3MDYxODc3NSI+IuC2r+C2u+C3iuC3geC2seC2uiDgt4Dgt5Lgt4Hgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNzEyMTIzNTY4NDUxNTAwMzc5MiI+IuC2r+C3g+C3lOC2seC3miDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4LeA4LeS4LeB4LeP4La9IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaH4Lat4LeQ4La44LeKIOC3gOC3kuC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKLCDgtovgtrTgt4/gtoLgtpzgtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3hSDgtrHgt5zgt4Tgt5Dgtprgt5Ig4La24LeA4LanIOC2tOC2reC3iiDgtprgtrvgtrjgt5LgtrHgt4og4Lav4LeD4LeU4Lax4LeaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NodXRkb3duIiBtc2dpZD0iNzE4NTc0NzgyNDAzODkwOTAxNiI+IuC2heC2qSDgt4Dgt4Hgtrrgt5ngtrHgt4og4LeA4LeQ4LeE4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2h1dGRvd24iIG1zZ2lkPSI3MDQ2NTAwODM4NzQ2MjkxNzc1Ij4i4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2muC3heC2uOC2seC3j+C2muC2u+C3lCDgt4Dgt5Dgt4Tgt5Pgtrjgt5og4Lat4Lat4LeK4LeA4La64LanIOC2r+C2uOC2seC3iuC2sS4g4LeD4La44LeK4La04LeW4La74LeK4LarIOC3gOC3kOC3hOC3k+C2uOC2muC2pyDgtrTgtq3gt4og4Lax4Lec4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iNDEzODYwODYxMDcxNzQyNTU3MyI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt4/gtrvgt5Qg4LeA4LeT4La4IOC3gOC3kOC3heC2muC3iuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjgyNjIxOTU4MDI1ODIyNTUwMjEiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44Laa4LeKIOC3gOC3meC2rSDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgt4/gt4Ag4La44LeP4La74LeUIOC3gOC3k+C2uCDgt4Dgt4Xgtprgt4rgt4Dgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSIyNTM3OTIyMzExNDExNTQ2MDE2Ij4i4La04LeA4Lat4LeS4LaxIOC2uuC3meC2r+C3lOC2uOC3miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La94La24LeP4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iODE1MzY1MTQzNDE0NTEzMjUwNSI+IuC2reC3kuC2u+C2uuC3miDgtrTgt5ngtrvgtrbgt5Lgtrgg4Lat4LeU4LeFIOC2reC3kuC2tuC3meC2sSDgtq/gt5DgtrHgt4og4La04LeA4Lat4LeK4Lax4LePIOC2uuC3meC2r+C3lOC2uOC3miDgt4Pgt4Qg4LeD4Lea4LeA4LeP4LeA4La9IOC2tOC3nuC2r+C3iuC2nOC2veC3kuC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2r+C2u+C2seC3iuC2seC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iODkyMjM5MDk0ODY3MTgyNjU2Ij4i4LeD4LeS4La64La94LeUIOC2uuC3meC2r+C3lOC2uOC3iiDgtq/gt5Lgtrrgtq3gt4og4Laa4LeS4La74LeT4La44LeKIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgt4Pgt4Qg4La04LeP4La94Lax4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrog4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2r+C3kuC2uuC2reC3iiDgtprgtrvgtrHgt4rgtrHgt5og4Laa4LeZ4LeD4Lea4Lav4LeQ4La64LeSIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uuC2pyDgt4Pgt4Qg4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC2nOC3kuC2seC3iiDgtrTgtq/gt4rgtrDgtq3gt5Lgtrog4LeD4La44LeK4La04LeW4La74LeK4Lar4La64LeZ4Lax4LeK4La4IOC3g+C2uOC3iuC2uOC3lOC2reC3kuC2uuC2muC2pyDgtpHgt4Xgtrngt5Lgtrog4LeE4LeQ4LaaLiDgt4Dgtrvgt4rgtrDgtrHgtrog4LeD4Laz4LeE4LePIOC2tOC2uOC2q+C2muC3iiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2heC3gOC3geC3iuKAjeC2uiDgt4Dgt5ngtrrgt5IsIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kiDgt4Dgt5Lgtqfgt5ngtprgtq3gt4og4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iMjU3NjMzMzQzNDg5MzUzMjQ3NSI+IuC2tOC3kOC2muC3muC2oiDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LeaIOC2tOC3iuKAjeC2u+C2oOC3j+C2u+C2q+C2uuC2muC3iiDgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjY2MjE5MDEyMTYyMDc5MzEwODkiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4La04LeQ4Laa4Lea4Lai4La64Laa4LeKIOC2ieC3gOC2reC3iuC2muC3nOC2pyDgtofgtq3gt5Ig4La24LeA4LanIOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC2muC3iiDgt4Dgt5Lgtprgt4/gt4HgtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIOC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC2muC3iiDgtrHgt5Dgtq3gt5Ig4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNTY4OTA5NTAwOTAzMDMzNjU5MyI+IlNNUy3gtr3gt5Dgtrbgt5Pgtrgg4LeA4LeS4Laa4LeP4LeB4LaxIOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IlNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqngtrrgtprgt4og4LeE4La74LeE4LePIOC2veC3kOC2tuC3lOC2q+C3lCDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgtprgt4og4La04LeK4oCN4La74Lag4LeP4La74Lar4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEgU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgt4DgtoLgtqDgt48g4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjMxNDUzNDc0MTMwMjg1ODIzNzEiPiJXQVAtUFVTSC3gtr3gt5Dgtrbgt5Pgtrgg4LeA4LeS4Laa4LeP4LeB4LaxIOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4iV0FQIFBVU0gg4La04Lar4LeS4LeA4LeU4Lap4La64Laa4LeKIOC2veC3kOC2tuC3kyDgtofgtq3gt5Ig4La24LeA4LanIOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC2muC3iiDgt4Dgt5Lgtprgt4/gt4HgtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4DgtoLgtqDgt4/gtprgt4/gtrvgt5MgTU1TIOC2tOC2q+C3kuC3gOC3lOC2qSDgtr3gt5Dgtrbgt5Pgtrjgt4og4LeE4LedIOC2seC3kuC3hOC2rOC3gCDgtpXgtrHgt5Hgtrgg4LeA4LeZ4La24LeKIOC2tOC3kuC2p+C3lOC3gOC2miDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4LaF4Lax4LeS4LeC4LeK4LanIOC3gOC3kuC2oOC2veC3iuKAjeC2uuC3gOC2veC3kuC2seC3iiDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanLCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iMjQ1MTg3MzY2NDM2MzY2MjY2NiI+IuC2sOC3j+C3gOC2sSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Ig4Lac4Lar4LaxIOC3g+C3k+C2uOC3jyDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4i4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtovgtrTgtrvgt5Lgtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeSIOC2nOC2q+C2sSDgtrTgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9IjU1MDk1ODUwNzc5ODc5Njk2NSI+IuC2tOC3g+C3lOC2tuC3kuC2uOC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LanIOC3gOC3kOC3g+C3k+C2uOC2pyDgtrbgtr3gtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI3NDcxMzEwNjUyODY4ODQxNDk5Ij4i4La04LeD4LeU4La24LeS4La44LanIOC2tOC3kuC3gOC3kuC3g+C3meC2seC3gOC3j+C2reC3iiDgt4Pgtrjgtp/gtrgg4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2seC3kOC3gOC2reC3k+C2uCDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeS4LeD4Lea4Lat4LeKIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIyNzg5NjEwNjczNTE0MTAzMzY0Ij4i4La24LeQ4Lan4La74LeSIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2sSDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI1ODk3MzQ2NTgyODgyOTE1MTE0Ij4i4LeA4La74LeK4Lat4La44LeP4LaxIOC2tOC3hOC3hSDgtrjgtqfgt4rgtqfgtrjgt5og4La24LeQ4Lan4La74LeS4La6IOC2t+C3j+C3gOC3kuC2reC3jyDgtq/gtq3gt4rgtq0g4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrYg4La34LeP4LeA4LeS4LatIOC2muC2u+C2sSDgtrrgt5ngtq/gt5Tgtrjgt4og4La44Lec4Lax4LeA4LePIOC2r+C3kOC2uuC3kiDgtpzgt5DgtrEg4LeA4LeS4LeD4LeK4Lat4La74LeP4Lat4LeK4La44LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtpzgt5DgtrEg4Lav4LeQ4LaxIOC2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjM3MTk2ODk3NjQ1MzYzNzk1NTciPiLgtrbgt5Dgtqfgtrvgt5Ig4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4i4LaR4Laa4Lat4LeUIOC2muC2u+C2nOC2seC3iuC2seC3jyDgtr3gtq8g4La24LeQ4Lan4La74LeSIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3gOC2vSDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSIxNTA4Nzc5Njg3NDM2NTg1NzQ0Ij4i4La64LeZ4Lav4LeU4La44LeaIOC3gOC3kuC2muC2veC3iuC2tCDgt4PgtoLgtpvgt4rigI3gtrrgt4/gtoLgtpog4LeD4Lec4La64LePIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iNjI0Mzg4NzA0MTU3NzkxMjg3NyI+IuC2keC2muC2reC3lCDgtprgtrvgtpzgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gCDgt4PgtoLgtpvgt4rigI3gtrrgt48g4La94Lea4Lab4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaL4La04LeP4LaC4Lac4La64LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtovgtrTgt4/gtoLgtpwg4La34LeP4LeA4LeS4Lat4La6IOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9Ijg4MjkwOTczNzM4NTE1MjE1MDUiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4Laa4La94LeK4La0IOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2guC2miDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI1MDc4NDU5NjU5NDQwMzQ4MyI+IuC2keC2muC2reC3lCDgtprgtrvgtpzgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gCDgt4PgtoLgtpvgt4rigI3gtrrgt48g4La94Lea4Lab4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4La34LeP4LeA4LeS4Lat4La6IOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYWNrdXAiIG1zZ2lkPSI0NzAwMTMwMjI4NjU0NTM5MjAiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LaL4La04LeD4LeK4LauIOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEg4LeD4LeEIOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYWNrdXAiIG1zZ2lkPSI2OTEyMjMwNTI1MTQwNTg5ODkxIj4i4La04Lav4LeK4Law4Lat4LeS4La64LeaIOC2i+C2tOC3g+C3iuC2ruC2uiDgt4Pgt4Qg4LaL4La04Laa4LeK4oCN4La74La4IOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3gOC2vSDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSI1NTU3MDcxMzI1ODA0NDY5MTAyIj4i4LeD4La44LeK4La04LeW4La74LeK4LarIOC2i+C2tOC3g+C3iuC2ruC2uiDgt4Tgt50g4La44LeZ4LeE4LeZ4La64LeU4La44LeKIOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4LeD4Lax4LeP4LauIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4i4La04LeW4La74LeK4LarIOC2i+C2tOC3g+C3iuC2riDgtq3gt4Tgt4Dgt5Tgtrvgt5Tgtprgt5Lgtrvgt5Pgtrjgt4ogVUkg4La04LeU4La74Lax4LeK4Lax4LanIOC2i+C2tOC2muC2u+C2q+C2uuC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiDgtprgt5Lgt4Pgt5Lgtrgg4La64LeZ4Lav4LeU4La44Laa4LeKIOC2t+C3j+C3gOC3kuC2reC3jyDgtrHgt5zgtprgtrvgtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSIyMTQ4NTYzNjI4MTQwMTkzMjMxIj4i4LaF4LeA4LeD4La7IOC2seC3nOC2veC2reC3iiDgtprgt4Dgt5Tgt4Xgt5Tgt4Ag4Lav4La74LeK4LeB4Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iNzQ1ODM4Nzc1OTQ2MTQ2NjM5NyI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtrTgtq/gt4rgtrDgtq3gt5Ig4La04La74LeS4LeB4LeT4La94LaaIOC2heC2reC3lOC2u+C3lOC2uOC3lOC3hOC3lOC2q+C2reC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtrbgtr3gt4/gtrTgt5zgtrvgt5zgtq3gt4rgtq3gt5Qg4LeA4LaxIOC2muC3gOC3lOC3heC3lCDgtrHgt5Lgtrvgt4rgtrjgt4/gtqvgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtovgtqngt5LgtrHgt4og4LaF4Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSI4NTg0Njc4MzgxOTcyODIwMTE4Ij4i4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgtq0g4LeE4LedIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtoXgtq3gt5Tgtrvgt5Qg4La44LeU4LeE4LeU4Lar4Lat4LeKIOC2muC3nOC2p+C3g+C3iuC3gOC2vSDgtofgtrPgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2keC2uiDgtpTgtrbgt5og4La34LeP4LeA4LeS4Lat4La64LeaIOC2h+C2reC3kiDgtpXgtrHgt5Hgtrgg4La64LeZ4Lav4LeU4La44LaaIOC2uOC3lOC3hOC3lOC2q+C2rSDgt4Pgtrjgtpwg4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3k+C2uOC2pyDgt4Tgt50g4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtpzgt5DgtrEg4LaU4La24LanIOC2tOC3meC2seC3meC2sSDgtobgtprgt4/gtrvgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSIyODA1MTAzMjQxMTUzOTA3MTc0Ij4i4Lac4Led4La94LeT4La6IOC3g+C2ouC3k+C3gOC2sSDgt4Dgt5rgtpzgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iNzY5MDA2MzQyODkyNDM0MzU3MSI+IuC2leC2seC3keC2uCDgt4Dgt5ngtr3gt4/gt4Dgtpog4La04Lec4Lav4LeUIOC3g+C2ouC3k+C3gOC3k+C2muC2u+C2qyDgt4Dgt5rgtpzgtrogKOC3gOC3muC2nOC3gOC2reC3iiDgt4Tgt50g4La44Lax4LeK4Lav4Lac4LeP4La44LeTIOC3g+C2ouC3k+C3gOC3k+C2muC2u+C2qykg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjEyODY1MDU3MTcwNTAxMjEzNzAiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4Lan4Led4Laa4LaxIOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSI4MDQzNDMxNzEzMDE0Mzk1NjcxIj4i4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IFog4La04Lan4LeS4La04LeP4Lan4LeS4La6IOC2uOC2n+C3hOC3kOC2u+C2uuC2uOC3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaF4La64LeS4Lat4LeSIOC2p+C3neC2muC2seC3iiDgtrTgtq3gt4og4Lax4LeS4La74LeK4La44LeP4Lar4La64LanIOC3g+C3hCDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrrgtqcg4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeS4LeD4Lea4Lat4LeKIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mcmVlemVTY3JlZW4iIG1zZ2lkPSI0NzA4MTgxMTg0NDQxODgwMTc1Ij4i4Lat4LeS4La74La6IOC2seC3kuC3geC3iuC2oOC2vSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mcmVlemVTY3JlZW4iIG1zZ2lkPSI4NTU4OTIzNzg5MjIyNjcwMDY0Ij4i4LeD4La44LeK4La04LeW4La74LeK4LarIOC2reC3kuC2uyDgt4PgtoLgtprgt4rigI3gtrvgtrjgtqvgtrog4LeD4Laz4LeE4LePIOC2reC3kuC2u+C2uiDgtq3gt4/gt4Dgtprgt4/gtr3gt5Lgtprgt4Ag4La44LeU4Lav4LeA4LeS4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5qZWN0RXZlbnRzIiBtc2dpZD0iMTM3ODc0NjU4NDAyMzU4NjYwMCI+IuC2uuC2reC3lOC2u+C3lCDgt4Pgt4Qg4La04LeP4La94LaxIOC2tuC3nOC2reC3iuC2reC2uOC3iiDgtpTgtrbgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNjM1MjU2NTU5OTk2ODYzMiI+IuC2reC2uOC2seC3iuC2nOC3miDgtobgtq/gt4/gtrEg4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKICjgtrrgtq3gt5Tgtrvgt5Qg4LaR4La24LeS4La44LeKICwg4LaG4Lav4LeTICkg4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtrfgt4/gtrvgtq/gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LapIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTMxMjgwNTc1NzIzMjYyNTMiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2keC3hOC3kiDgtobgtq/gt4/gtrEg4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKICjgtrrgtq3gt5Tgtrvgt5Qg4LaR4La24LeT4La44LeKLCDgtrrgtrHgt4/gtq/gt5LgtrouKSDgtobgtq/gt5Lgtrog4La64LeQ4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lat4LeK4Laa4La7IOC2nOC3kOC2seC3k+C2uCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI0Njk0Mjg5MDAwNDEyNDkyMzQiPiLgtpTgtrYg4Lan4La64LeS4La04LeKIOC2muC2u+C2sSDgtq/gt5ngtrog4LeD4LeEIOC2lOC2tiDgtpzgtrHgt4rgtrHgt48g4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Lax4LeKIOC2tOC2p+C3kuC2nOC2rSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjgzODc3NTQ5MDE2ODg3MjgwNDMiPiLgtrjgt5TgtrvgtrTgtq/gtrog4Lan4La64LeS4La04LeKIOC2muC3kuC2u+C3k+C2uCDgt4Dgt5DgtrHgt5Ig4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgtrjgtp8g4LaF4Lax4LeK4Lat4La74LeK4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeTIOC3gOC2seC3gOC3kuC2pyDgtrrgtrHgt4/gtq/gt5Mg4LaU4La2IOC2lOC2tuC2sSDgtrrgtq3gt5Tgtrvgt5Qg4Lav4LeQ4Laa4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgt4Pgt5rgtq3gt4og4LaF4Lav4LeP4LeFIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMzNjAwNjQ2MjAyMzA1MTU3NzYiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La44La64Laa4LeKIOC3gOC3meC2rSDgtrbgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMjUwNDQwMzIyODA3Mjg2MzMxIj4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uOC2uiDgtongt4Tgtr0g4La44Lan4LeK4Lan4La44LeaIOC2heC2reC3lOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq3gtprgt4og4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5Pgtrjgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2miDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNTM1NzczMzk0MjU1NjAzMTU5MyI+IuC2tOKAjeC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3jyDgt4Pgt5rgt4Dgt4/gt4Dgtprgt4og4LeA4LeZ4LatIOC2tuC2r+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjcwMzQ2MTU5Mjg2MDkzMzEzNjgiPiLgtrTigI3gt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt48g4LeD4Lea4LeA4LeP4LeA4LeaIOC2ieC3hOC3hSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeU4La44LeU4LeE4LeU4Lar4Lat4LanIOC2tuC3kOC2s+C3k+C2uOC2pyDgtq/gtrvgtrHgt4rgtrHgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3mi4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4LeA4LeS4Lan4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iODQ2MjgxNTE3OTU3Mjc0ODc2MSI+IuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgt4Pgt5rgt4Dgt4/gt4Dgtprgtqcg4La24Lav4LeK4LawIOC3gOC3kyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+IuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgt4Pgt5rgt4Dgt4/gt4Ag4LaJ4LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Qg4La44LeU4LeE4LeU4Lar4Lat4Laa4LeKIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC2sOC3j+C2u+C2muC2uuC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2muC3kuC3g+C3kiDgt4Dgt5Lgtqfgt5ngtpog4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iNjgwNzc2Mjc4Mzc0NDEyNTk1NCI+IuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgt4Pgt5rgt4Dgt4/gt4Dgtprgtqcg4La24Lav4LeK4LawIOC3gOC3kyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTcG9vbGVyU2VydmljZSIgbXNnaWQ9IjM2ODA1NTIyODU5MzMzMTgzNzIiPiLgtrjgt5Tgtq/gt4rigI3gtrvgtqsg4LeD4Lea4LeA4LeP4LeAIOC2ieC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeUIOC2uOC3lOC3hOC3lOC2q+C2reC2muC3iiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC3kuC2u+C3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Ig4LeA4LeS4Lan4LeZ4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjI3NTI3MzEzMDA0MTk0MTA3MjQiPiJORkMg4LeD4Lea4LeA4LeP4LeAIOC3gOC3meC2rSDgtrbgt5DgtrPgt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiJORkMg4Laa4LeP4Lap4LeKIOC2tOC2reC3iiDgtobgtq/gtrvgt4rgt4HgtrHgtrog4Laa4La74LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgtrvgtrPgt4DgtrHgtrrgtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3k+C2uOC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjczNTgzNzg0MDE5MTUyODc5MzgiPiLgtrTgt5ngt4Ug4LeD4Lea4LeA4LeP4LeA4Laa4LanIOC2tuC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLgtprgt5ngtqfgt5Ig4La04Lar4LeS4LeA4LeS4LapIOC3g+C3muC3gOC3j+C3gOC2miAo4LaL4Lav4LePLiBTcGVsbENoZWNrZXJTZXJ2aWNlKSDgtongt4Tgtr0g4La44Lan4LeK4Lan4La44LeaIOC2heC2reC3lOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq3gtprgt4og4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5Pgtrjgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2miDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4iVlBOIOC3g+C3muC3gOC3j+C3gOC2muC2pyDgtrbgt5DgtrPgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJWUE4g4LeD4Lea4LeA4LeP4LeAIOC2ieC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeUIOC2uOC3lOC3hOC3lOC2q+C2reC2muC3iiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC3kuC2u+C3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Ig4LeA4LeS4Lan4LeZ4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+IuC2tuC3kuC2reC3lOC2tOC2rSDgt4Dgt5ngtq0g4La24Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLgtrbgt5Lgtq3gt5TgtrTgtq0g4LaJ4LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Qg4La44LeU4LeE4LeU4Lar4Lat4Laa4LeKIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC2sOC3j+C2u+C2muC2uuC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2muC3kuC3g+C3kiDgt4Dgt5Lgtqfgt5ngtpog4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLgt4Dgt5LgtqLgtqcg4LeD4Lea4LeA4LeP4LeA4Laa4LanIOC2tuC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLgt4Dgt5LgtqLgtqfgt4og4LeD4Lea4LeA4LeP4LeAIOC2ieC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeUIOC2uOC3lOC3hOC3lOC2q+C2reC2muC3iiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC3kuC2u+C3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Ig4LeA4LeS4Lan4LeZ4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4LaL4La04LeP4LaC4LacIOC2tOC2u+C3kuC2tOC3j+C2veC2miDgt4Pgtrjgtp8g4LaF4Lax4LeK4Lat4La74LeK4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeTIOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9IjU2OTcxNTQxOTU0MzkwNzkzMCI+IuC2i+C2tOC3j+C2guC2nCDgtrTgt4/gtr3gtprgtrrgt48g4LeA4LeZ4Lat4LanIOC2heC2t+C3kuC2tOC3iuKAjeC2u+C3j+C2uuC2uuC2seC3iiDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2miDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNDI0ODgyODkwMDA0NTgwODcyMiI+IuC2i+C2tOC3j+C2guC2nCDgtrTgtrvgt5LgtrTgt4/gtr3gtprgtrrgt5ngtprgt4og4LaR4Laa4LeKIOC2muC3kuC2u+C3k+C2uCDgt4Tgt50g4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURldmljZUFkbWlucyIgbXNnaWQ9IjUwMjU2MDgxNjc3MDk5NDI0ODUiPiLgtq/gtrvgtrHgt4rgtrHgt4/gtqcg4LaL4La04LeP4LaC4LacIOC2tOC2u+C3kuC2tOC3j+C2veC2muC2uuC3kuC2seC3iiDgtpHgtprgt4og4Laa4LeS4La74LeT4La44LanIOC3hOC3nSDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LanIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMzY1OTQ3NzE3MTYzODY2ODQ0Ij4i4Lat4LeS4La7IOC2r+C3kuC3geC3j+C2seC2reC3kuC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMDQ2MTI2NjE5MzE2NjcxNDc2Ij4i4Lat4LeS4La74La64LeaIOC2t+C3iuKAjeC2u+C2uOC2q+C2uiDgtpXgtrHgt5Hgtrgg4LeA4Lea4La94LeP4LeA4LaaIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4Lax4LeUIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjkxNzUzNzE2MTMzMjI1NjI5MzQiPiLgtq/gtrvgt4rgt4Hgtprgtrrgt5og4LeA4Lea4Lac4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI2ODY2NTYzMjM0Mjc0MTA0MjMzIj4i4La44LeW4LeD4LeS4Laa4La64LeaIOC3hOC3nSDgtqfgt4rigI3gtrvgt5Dgtprgt4rgtrTgt5Hgtqngtrrgt5og4LeA4Lea4Lac4La6IOC2leC2seC3keC2uCDgtrjgt5zgt4Tgt5zgtq3gtpog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2i+C2tOC3j+C2guC2nOC2uuC2seC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4Lav4LePIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4DgtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI0Nzc4NzMxNzAzNjAwOTA5MzQwIj4i4La64Lat4LeU4La74LeUIOC2tOC3lOC3gOC2u+C3lCDgtrTgt5Lgtrvgt5Lgt4Pgt5Dgtr3gt5Dgt4Pgt4rgtrgg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iODQ4MDAxNjc3MTEzNDE3NTg3OSI+IuC2uuC2reC3lOC2u+C3lOC2tOC3lOC3gOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4Lav4LePIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+IuC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5ngtq0gTGludXgg4LeD4LaC4Lal4LePIOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0ODk2OTkyMDc5MTgyNjQ5MTQxIj4i4La04LeA4Lat4LeS4LaxIOC3g+C3kuC2uuC2veC3lCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Ig4LeA4LeZ4LatIOC3g+C3kOC2tOC2uuC3lOC2uOC3iiDgt4PgtoLgtqXgt48g4LaJ4La94LeK4La94LeA4LeS4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyc2lzdGVudEFjdGl2aXR5IiBtc2dpZD0iODg0MTExMzYyNzk1NTU2MzkzOCI+IuC2uuC3meC2r+C3lOC2uCDgt4Pgt5Dgtrjgt4Dgt5Lgtqfgtrgg4Law4LeP4LeA4Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+IuC2uOC2reC2muC2uuC3miDgtrTgt4Dgtq3gt5LgtrEg4LaR4LeE4LeSIOC2muC3nOC2p+C3g+C3iiDgtrHgt5zgtrHgt5Dgt4Pgt5Mg4La04LeQ4LeA4Lat4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC3gOC2veC2pyDgtrjgtq3gtprgtrog4LeD4LeT4La44LePIOC2muC3kuC2u+C3k+C2uOC3meC2seC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4La04La44LePIOC2muC3kuC2u+C3k+C2uCDgtrjgtpzgt5LgtrHgt4ogIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzODQ3NjAwNDc1MDgyNzgyNzIiPiLgtrrgt5ngtq/gt5Tgtrjgtqcg4Lat4La4IOC2muC3nOC2p+C3g+C3iiDgtrjgtq3gtprgtrog4Lat4LeU4La9IOC2seC3nOC2tuC3kuC2s+C3k+C3gCDgtrvgtrPgt48g4La04LeA4Lat4LeK4LeA4LeP4Lac4LeZ4LaxIOC2uuC3j+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrog4Lav4LeU4La74Laa4Lau4Lax4La6IOC2uOC2seC3iuC2r+C2nOC3j+C2uOC3kyDgtprgtrvgtrjgt5LgtrHgt4og4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2i+C2tOC3j+C2guC2nOC2uuC2seC3iiDgt4PgtrPgt4Tgt48g4LaJ4Lat4LeS4La74LeSIOC2uOC2reC2muC2uiDgt4Pgt5Pgtrjgt48g4Laa4LeS4La74LeT4La44LanIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iMTg0Mzg1MTI5NTM3NzA1OTM4Ij4i4La64LeZ4Lav4LeU4La44LeKIOC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+IkFuZHJvaWQg4La04LeQ4Laa4Lea4LaiIOC2uOC3kOC2muC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeA4LeQ4Lav4Lac4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5Dgtprgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LapIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiLgtrrgt5ngtq/gt5Tgtrjgt5og4LeA4LeZ4Lax4Lat4LeKIOC2r+C2reC3iuC2rSDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iNDYyNTMyMzY4NDEyNTQ1OTQ4OCI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgtq/gtq3gt4rgtq0g4LeE4LeS4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4LaJ4LapIOC2r+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgt4Tgt5Dgtrngt5Lgtr3gt5Ig4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiLgt4Tgt5Dgtrngt5Lgtr3gt5Ig4Lac4Lec4Lax4LeUIOC2uOC3kOC2muC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9Ijc0NzI5MjE3NjgzNTc5ODE5ODYiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4LaG4Lag4La64Lax4La64LeaIOC2ieC2qSDgtrTgt4rigI3gtrvgtrjgt4/gtqvgtrog4La44LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4i4La64LeZ4Lav4LeU4La44Laa4LanIOC2keC3hOC3kiDgtprgt5rgtq3gtrosIOC2r+C2reC3iuC2rSDgt4Pgt4Qg4LeE4LeQ4La54LeS4La94LeSIOC2tOC3iuKAjeC2u+C2uOC3j+C2qyDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjIxOTkxMjg0ODI4MjAzMDY5MjQiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4Laa4LeZ4LeF4LeS4Lax4LeK4La4IOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSI1NjI4NTMwOTcyNTQ4MDcxMjg0Ij4i4Lax4LeAIOC3hOC3nSDgtrrgt4/gt4Dgtq3gt4rgtprgt4/gtr3gt5LgtrEg4Laa4La74LaxIOC2veC2ryBBbmRyb2lkIOC2tOC3kOC2muC3muC2ouC2uuC2seC3iiDgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2tuC2veC3g+C3hOC3kuC2rSDgtoXgt4Dgt4Pgtrsg4Lat4LeT4Lax4LeK4Lav4LeUIOC3g+C2uOC2nCDgtrHgt4Ag4La64LeZ4Lav4LeU4La44LeKIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4Lat4LeS4La24LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiLgtrrgt5ngtq/gt5Tgtrjgt5og4LeD4LeS4La64La94LeU4La4IOC3hOC3kOC2ueC3kuC2veC3kiDgtq/gtq3gt4rgtq0g4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3NDY0MDg3MTk0NTQzNDU2NSI+IuC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4LeE4LeQ4La54LeS4La94LeSIOC2seC3j+C2uOC3j+C3gOC2veC3kiDgtq3gt5Tgt4Ug4LaH4Lat4LeSIOC2nOC3nOC2seC3lCDgtrjgt5Dgtprgt5Pgtrjgt5ngtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC2p+C3kOC2tuC3iuC2veC2pyDgtobgtqDgtrrgtrHgtrog4Lax4LeS4Lav4LeE4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrjgtpzgt5LgtrHgt4og4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtpLgt4Dgt4/gtrrgt5og4Lav4Lat4LeK4LatIOC2seC3kOC3gOC2rSDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uiDgt4DgtrEg4Lax4LeS4LeD4LePLCDgtpLgt4Dgt4/gtrrgt5og4LaG4La74La44LeK4La34La6IOC2reC3gOC2reC3iiDgt4Pgt5ngtrjgt5LgtrHgt4og4LeD4LeS4Lav4LeU4LeA4LeT4La44LanIOC2ieC2qSDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC3hOC3kOC2ueC3kuC2veC3kiDgtrHgt4/gtrjgt4/gt4Dgtr3gt5Ig4Lat4LeU4LeFIOC2h+C2reC3kiDgtpzgt5zgtrHgt5Qg4La44LeQ4Laa4LeT4La44LeZ4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtq/gt5Tgtrvgtprgtq7gtrEg4LaG4Lag4La64Lax4La6IOC2seC3kuC2r+C3hOC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La44Laf4LeS4Lax4LeKIOC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaS4LeA4LeP4La64LeaIOC2r+C2reC3iuC2rSDgtrHgt5Dgt4Dgtq0g4La94La24LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrog4LeA4LaxIOC2seC3kuC3g+C3jywg4LaS4LeA4LeP4La64LeaIOC2huC2u+C2uOC3iuC2t+C2uiDgtq3gt4Dgtq3gt4og4LeD4LeZ4La44LeS4Lax4LeKIOC3g+C3kuC2r+C3lOC3gOC3k+C2uOC2pyDgtongtqkg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMjg5ODkwMjcxNjQ1OTIxNDExIj4i4La64LeZ4Lav4LeU4La44LeKIOC3g+C2uOC3iuC2tOC2reC3iiDgtpzgt5ngtrEg4La64LeP4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMTk1NjIyMTc3NzgyNDQ1MjQiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LeD4LeEIOC2tuC3j+C3hOC3kuC2uyDgtrjgt4/gtrDgt4rigI3gtrrgtrrgtrHgt4rgtpzgt5ngtrHgt4og4La64LeZ4Lav4LeU4La44LeaIOC3g+C2uOC3iuC2tOC2reC3iiDgtpzgt5ngtrHgtrrgt4/gtrjgtqcg4LeD4LeEIOC2uuC3meC2r+C3lOC2uOC3miDgt4Pgtrjgt4rgtrTgtq3gt4og4LeA4La94LeS4Lax4LeKIOC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgt4Pgt4Qg4La24LeP4LeE4LeS4La7IOC2uOC3j+C2sOC3iuKAjeC2uuC2uuC2seC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt5og4LeD4La44LeK4La04Lat4LeKIOC2nOC3meC2seC2uuC3j+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRMb2dzIiBtc2dpZD0iNjYxNTc3ODU0MzE5ODk2NzYxNCI+IuC3g+C2guC3gOC3muC2r+C3kyDgtr3gt5zgtpzgt4og4Lav4Lat4LeK4LatIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MjA2MTMxMzI5MzQ1NTE1MSI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uuC3miDgt4Dgt5Lgt4Dgt5LgtrAg4La94Lec4Lac4LeKIOC2nOC3nOC2seC3lCDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgt4Pgt4Qg4La04Lee4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4LaU4La2IOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3meC2seC3iiDgtprgt5Tgtrjgtprgt4og4Laa4La74Lax4LeK4Lax4LeZ4LeE4LeS4LavIOC2uuC2seC3j+C2r+C3kyDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3meC3gOC3k+C2uOC2pyDgtrjgt5ngtrrgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIwNjM0MzgxNDAyNDE1NjA0NDMiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgt5og4LeA4LeS4LeA4LeS4LawIOC2veC3nOC2nOC3iiDgtpzgt5zgtrHgt5Qg4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4LeD4LeEIOC2tOC3nuC2r+C3iuC2nOC2veC3kuC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaH4Lat4LeU4LeF4Lat4LeK4LeAIOC2lOC2tiDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5ngtrHgt4og4Laa4LeU4La44Laa4LeKIOC2muC2u+C2seC3iuC2seC3meC3hOC3kuC2ryDgtrrgtrHgt4/gtq/gt5Mg4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Pgt5ngt4Dgt5Pgtrjgtqcg4La44LeZ4La64LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i4Lax4LeQ4LeA4LatIOC2sOC3j+C3gOC2seC2uiDgt4PgtrPgt4Tgt48g4LaV4Lax4LeR4La4IOC2uOC3j+C2sOC3iuKAjeC2uiDgt4Dgt5Lgtprgt5rgtq3gtprgtrrgtprgt4og4LeE4LeP4LeA4LeS4Lat4LePIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI4MjgzOTEyNDg4NDMzMTg5MDEwIj4i4Lax4LeQ4LeA4LatIOC2sOC3j+C3gOC2seC2uiDgt4PgtrPgt4Tgt48g4LeA4LeS4Laa4Lea4Lat4Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtpXgtrHgt5Hgtrgg4LeD4LeK4Lau4LeP4La04LeS4LatIOC2uOC3j+C2sOC3iuKAjeC2uiDgt4Dgt5Lgtprgt5rgtq3gtprgtrrgtprgt4og4La34LeP4LeA4LeS4Lat4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMiIG1zZ2lkPSIxNjc4MzkxODk2Nzg2ODgyMDE0Ij4i4LeA4LeS4LeB4LeK4LeA4LeP4LeD4Lav4LeP4La64LeTIOC2heC2muC3iuC2reC2tOC2reC3iuKAjeC2uyDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjQwMTU2NDQwNDcxOTY5MzcwMTQiPiLgtrrgt5ngtq/gt5TgtrjgtqcgQ0Eg4LeD4LeE4Lat4LeS4LaaIOC3gOC3kuC3geC3iuC3gOC3j+C3g+C2r+C3j+C2uuC3kyDgtoXgtprgt4rgtq3gtrTgtq3gt4rigI3gtrsg4La94LeZ4LeDIOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgt4Pgt4Qg4LaF4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiJEaWFnIOC3gOC3kuC3g+C3kuC2seC3iiDgt4Tgt5Lgtrjgt5Lgtprgt4/gtrvgtq3gt4rgt4Dgtrog4Lav4La74LarIOC3g+C2uOC3iuC2tOC2reC3iuC3gOC2veC2pyDgtprgt5Lgtrrgt4Dgt5PgtrgvIOC2veC3kuC3gOC3kuC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RpYWdub3N0aWMiIG1zZ2lkPSI2NjA4Mjk1NjkyMDAyNDUyMjgzIj4iRGlhZyDgtprgtqvgt4rgtqngt4/gtrrgtrjgtqcg4LaF4La64LeS4Lat4LeSIOC2leC2seC3keC2uCDgt4Pgtrjgt4rgtrTgtq3gtprgt4og4Laa4LeS4La64LeA4LeT4La44LanIOC3g+C3hCDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2i+C2r+C3j+C3hOC2u+C2q+C2uuC2muC3iiDgtr3gt5ngt4MgL2RldiDgtq3gt5Tgtr0g4LaH4Lat4LeSIOC2nOC3nOC2seC3lC4g4La44LeZ4La64LanIOC2tOC2r+C3iuC2sOC2reC3kiDgt4Pgt4rgtq7gt4/gtrrgt5Lgtq3gt4/gt4Dgtqcg4LeD4LeEIOC2huC2u+C2muC3iuC3guC3j+C3gOC2pyDgtrbgtr3gtrTgt5Hgtrjgt4og4Laa4LeS4La74LeT4La44LanIOC3hOC3kOC2muC3kuC2uuC3j+C3gOC2muC3iiDgtofgtq0uIOC2seC3kuC3guC3iuC2tOC3j+C2r+C2miDgt4Tgt50g4Laa4LeK4oCN4La74LeS4La64LeP4Laa4La74LeUIOC3gOC3kuC3g+C3kuC2seC3iiDgtq/gt5jgtqngt4/gtoLgtpwt4LeA4LeS4LeB4Lea4LeC4LeS4LatIOC2r+C3neC3giDgtrHgt5Lgtrvgt4rgtqvgtrog4LeD4Laz4LeE4LePIOC2tOC2uOC2q+C2muC3iiDgtrjgt5ngtrog4La64Lec4Lav4LeP4Lac4LatIOC2uuC3lOC2reC3lOC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBtc2dpZD0iNjMzNTU3Njc3NTcxMTA5NTkzMSI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtoXgtoLgtpwg4LeD4La24La9IOC3hOC3nSDgtoXgtrbgtr0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LaaIOC2heC2guC2nOC2uuC2muC3iiDgt4Pgtrbgtr0g4LavIOC2seC3kOC2r+C3iuC2ryDgtrrgtrHgt4rgtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeA4LeQ4Lav4Lac4Lat4LeKIOC2p+C3kOC2tuC3iuC2veC2p+C3iiDgtoXgt4Dgt4Hgt4rigI3gtrrgtq3gt48g4LaF4La24La9IOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeFIOC3hOC3kOC2mi4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgt4Pgt5Dgtr3gtprgt5Lgtr3gt4rgtr3gt5ngtrHgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC3hSDgtrrgt5Tgtq3gt5TgtrosIOC2t+C3j+C3gOC3kuC2rSDgtrHgt5zgtprgtrvgtrEsIOC2heC3g+C3iuC2ruC3kuC2uyDgt4Tgt50g4LaF4LeD4LeK4Lau4LeP4La64LeSIOC2reC2reC3iuC3gOC2uuC2pyDgtrrgt5ngtq/gt5Tgtrgg4La04Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtpHgtrrgtqcg4LeE4LeQ4Laa4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTgyNzIzMjQ4NDQxNjUwNTYxNSI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgtpog4LaF4LaC4Lac4La64Laa4LeKIOC3g+C2tuC2vSDgtq8g4Lax4LeQ4Lav4LeK4LavIOC2uuC2seC3iuC2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5Dgtq/gtpzgtq3gt4og4Lav4LeU4La74Laa4Lau4LaxIOC2heC3gOC3geC3iuKAjeC2uuC2reC3jyDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4LaaLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC3g+C3kOC2veC2muC3kuC2veC3iuC2veC3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeFIOC2uuC3lOC2reC3lOC2uiwg4La34LeP4LeA4LeS4LatIOC2seC3nOC2muC2u+C2sSwg4LaF4LeD4LeK4Lau4LeS4La7IOC3hOC3nSDgtoXgt4Pgt4rgtq7gt4/gtrrgt5Ig4Lat4Lat4LeK4LeA4La64LanIOC2uuC3meC2r+C3lOC2uCDgtrTgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC2keC2uuC2pyDgt4Tgt5Dgtprgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDYyNzMxNTM1MTA5MzUwODc5NSI+IuC2heC3gOC3g+C2uyDgtrTgt4rigI3gtrvgtq/gt4/gtrHgtrog4Laa4LeS4La74LeT4La4IOC3hOC3nSDgtoXgt4Tgt53gt4Pgt5Ig4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQwODg2NDI2NTQwODU4NTA2NjIiPiLgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4LaR4La64LanIOC3hOC3nSDgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeKIOC3gOC2veC2pyDgt4Dgt5Lgt4Hgt5rgt4Lgt5Lgtq0g4LaF4LeA4LeD4La7IOC2tOC3iuKAjeC2u+C2r+C3j+C2seC2uuC2pyDgt4Tgt50g4LaF4LeE4Led4LeD4LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKLCDgtpLgt4Dgt4/gtqcg4LaF4LeA4LeD4La7IOC2tOC3iuKAjeC2u+C2r+C3j+C2seC2uiDgtrHgt5zgtprgt4Ug4Lac4LeU4Lar4LeP4LaC4LacIOC3gOC2veC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9Ijg0NjMxODE2Mjg2OTUzOTYzOTEiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5Ig4La64LeZ4Lav4LeU4La44LeKIOC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9IjQ5NzM5ODY3NjIyNDE3ODM3MTIiPiLgtpTgtrbgtpzgt5og4LaF4La34LeS4La74LeU4Lag4LeSIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCwg4La04LeA4Lat4LeS4LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gt5LgtrHgt4og4Lav4Lat4LeK4LatIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5PgtrgsIOC2tOC3iuKAjeC2u+C3neC2qeC3jyDgtprgt5Lgtrvgt5Pgtrgg4LeA4LeQ4Lax4LeSIOC2r+C3miDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2seC3kuC3geC3iuC3geC2tuC2r+C3gOC2uCDgt4Pgt5Lgtq/gt5Qg4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9IjIyMjYxOTUyOTA5NTUyMjQ3MzAiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNldHRpbmdzIiBtc2dpZD0iNzc3NTcyMzQ0MTU1ODkwNzE4MSI+IuC2tOC2r+C3iuC2sOC2reC3kiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4Lav4Lat4LeK4LatIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaU4La24Lac4LeaIOC2tOC2r+C3iuC2sOC2reC3kiDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Lav4Led4LeCIOC2nOC3kOC2seC3iuC3gOC3kuC2uiDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iMjA0Njc2MjUxODc2NzE4Mjg4Ij4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2tOC2r+C3iuC2sOC2reC3kiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4i4La04Lav4LeK4Law4Lat4LeS4La64LeaIOC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtq/gtq3gt4rgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2i+C2tOC3j+C2guC2nCDgt4PgtrPgt4Tgt48g4La34LeP4LeA4LeS4Lat4La64LanIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMjE0OTQyNjY2NDIyNjE1MjE4NSI+Ikdvb2dsZSDgt4Pgt5rgt4Dgt48g4LeD4LeS4Lat4LeS4La64La4IOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiJHb29nbGUg4LeD4Lea4LeA4LePIOC3g+C3kuC2reC3kuC2uuC2uCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4i4LaG4La74La44LeK4La34La64Lea4Lav4LeTIOC2sOC3j+C3gOC2seC2uiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzM5MDMwNDY2NDExNjg4MDcwNCI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uiDgtofgtrvgtrngt5Tgtrgg4LaF4LeA4LeD4Lax4LeKIOC3gOC3liDgt4Dgt4Tgt4/gtrgg4La64LeZ4Lav4LeU4La4IOC2huC2u+C2uOC3iuC2tyDgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtobgtrvgtrjgt4rgtrcg4Laa4LeS4La74LeT4La44LanIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtrTgtrjgt48g4Laa4LeFIOC3hOC3kOC2muC3kiDgtoXgtq3gtrsg4LeD4LeQ4La44LeA4LeS4Lan4La4IOC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4Lax4LeS4LeD4LePIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgtrgg4La04LeK4oCN4La74La44LeP4LavIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUxMzk1MDU4OTEwMjYxNzUwNCI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uiDgtofgtrvgtrngt5Tgtrgg4LaF4LeA4LeD4Lax4LeKIOC3gOC3liDgt4Dgt4Tgt4/gtrgg4La64LeZ4Lav4LeU4La4IOC2huC2u+C2uOC3iuC2tyDgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtobgtrvgtrjgt4rgtrcg4Laa4LeS4La74LeT4La44LanIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtrTgtrjgt48g4Laa4LeFIOC3hOC3kOC2muC3kiDgtoXgtq3gtrsg4LeD4LeQ4La44LeA4LeS4Lan4La4IOC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4Lax4LeS4LeD4LePIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5rgtrgg4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeS4Lat4LeK4LeA4La6IOC2tOC3iuKAjeC2u+C2uOC3j+C2ryDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTdGlja3kiIG1zZ2lkPSI3OTE5MTI2MzcyNjA2ODgxNjE0Ij4i4La24LeQ4Laz4LeU4Lar4LeUIOC3gOC3kuC2muC3j+C3geC2seC2uiDgtrrgt5Dgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc3NDk3NjA0OTQzOTk5MTU2NTEiPiLgtrTgt4rigI3gtrvgtqDgt4/gtrvgtqvgtrrgtqcg4La04LeD4LeU4LeA4LavIOC2tOC3gOC2reC3kuC2sSwg4La04LeK4oCN4La74Lag4LeP4La74Lar4La64Lax4LeKIOC2uuC3kOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeA4LeQ4Lap4LeS4La04LeU4La7IOC2uOC2reC2muC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeE4Lea4Lat4LeUIOC2muC3nOC2pywg4LaF4Law4LeS4LaaIOC2t+C3j+C3gOC3kuC2reC2uiDgtrjgtp/gt5LgtrHgt4og4Lan4LeQ4La24LeK4La94Lan4La6IOC2tOC2uOC3jyDgtprgt5Lgtrvgt5Pgtrgg4LeE4LedIOC2heC3g+C3iuC2ruC3kuC2uyDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4MjU4MDM3NjQyMzI0NDUwOTEiPiLgtrTgt4rigI3gtrvgtqDgt4/gtrvgtqvgtrrgtqcg4La04LeD4LeU4LeA4LavIOC2tOC3gOC2reC3kuC2sSwg4La04LeK4oCN4La74Lag4LeP4La74Lar4La64Lax4LeKIOC2uuC3kOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeA4LeQ4Lap4LeS4La04LeU4La7IOC2uOC2reC2muC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeE4Lea4Lat4LeUIOC2muC3nOC2pywg4LaF4Law4LeS4LaaIOC2t+C3j+C3gOC3kuC2reC2uiDgtrjgtp/gt5LgtrHgt4og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2tOC2uOC3jyDgtprgt5Lgtrvgt5Pgtrgg4LeE4LedIOC2heC3g+C3iuC2ruC3kuC2uyDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENvbnRhY3RzIiBtc2dpZD0iODM0ODQ4MTEzMTg5OTg4NjEzMSI+IuC2lOC2tuC2nOC3miDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1Mjk0ODY2ODU2OTQxMTQ5NjM5Ij4i4LeD4Laz4LeE4Lax4LeKIOC2tOC3lOC2r+C3iuC2nOC2veC2uuC2seC3iiDgt4Tgtqcg4LaU4La2IOC2h+C2uOC2reC3lOC2uOC3iiDgtpzgtq3gt4osIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4osIOC3hOC3nSAg4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2huC2muC3j+C2uyDgt4Dgtr3gt5LgtrHgt4og4LeD4Lax4LeK4Lax4LeS4LeA4Lea4Lav4Lax4La6IOC2muC2u+C2nOC2reC3iiDgt4PgtoLgtpvgt4rigI3gtrrgtq3gtq8g4LaH4Lat4LeU4LeF4LeU4LeALCDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2nOC2tuC2qeC3j+C3gOC3kyDgtofgtq3gt5Ig4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2tOC3kuC3heC3kuC2tuC2syDgtq/gtq3gt4rgtq0g4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2uOC2n+C3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtrTgt5Lgt4Xgt5LgtrbgtrMg4Lav4Lat4LeK4LatIOC3g+C3lOC2u+C3kOC2muC3k+C2uOC2pyDgtongtqkg4La94La24LePIOC2r+C3meC2sSDgtoXgtq3gtrssIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2lOC2tiDgtrHgt5zgtq/gt5DgtrHgt5Tgt4Dgtq3gt4rgt4Dgtrgg4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2r+C2reC3iuC2rSDgtrbgt5ngtq/gt48g4Lac4LeQ4Lax4LeT4La44LanIOC2ieC2qSDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ0MDY1NDE1MjQ1NzMwMDY2MiI+IuC2seC3kuC2uuC2uOC3kuC2rSDgtrTgt5Tgtq/gt4rgtpzgtr3gtrrgtrHgt4og4LeD4La44LacIOC2lOC2tiDgtofgtrjgtq3gt5QsIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4og4Laa4LeFIOC3hOC3nSDgt4Dgt5ngtrHgtq3gt4og4LaG4Laa4LeP4La74La64Laa4LeS4Lax4LeKIOC3g+C2seC3iuC2seC3kuC3gOC3muC2r+C2seC2uiDgtprgt4Ug4LeD4LaC4Lab4LeK4oCN4La64LeP4Lat4La6IOC2h+C2reC3lOC2veC2reC3iiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavIOC2lOC2tuC2nOC3miDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lac4LeQ4LaxIOC2r+C2reC3iuC2rSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tuC2nOC3miDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lav4Lat4LeK4LatIOC2i+C2tOC3g+C3iuC2riDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2sSDgtoXgtq3gtrsg4LaU4La24Lac4LeaIOC2r+C3kOC2seC3lOC2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lav4Lat4LeK4LatIOC2tuC3meC2r+C3j+C2nOC3kOC2seC3k+C2uCDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDb250YWN0cyIgbXNnaWQ9IjUxMDc0OTIwODY0MTY3OTM1NDQiPiLgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiLgtrHgt5Lgtrrgtrjgt5Lgtq0g4La04LeU4Lav4LeK4Lac4La94La64Lax4LeK4LanIOC2lOC2tiDgtofgtrjgtq3gt5YsIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4og4Laa4LeFIOC3hOC3nSDgtofgtrjgtq3gt5Tgtrjgt4og4Laa4LeFIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2rSDgtofgtq3gt5Tgtr3gtq3gt4og4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtobgtqDgtrrgtrHgtrog4Laa4La74LaxIOC2veC2ryDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48gKOC2veC3kuC2tOC3kuC2sSkg4Lav4Lat4LeK4LatIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrrgt5ngtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtq/gtq3gt4rgtq0g4La44LeQ4Laa4LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU4OTg2OTIyNDYyNTE2MzU1OCI+IuC3g+C2s+C3hOC2seC3iiDgtrTgt5Tgtq/gt4rgtpzgtr3gtrrgtrHgt4rgtqcg4LaU4La2IOC2h+C2uOC2reC3liwg4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtprgt4Ug4LeE4LedIOC2h+C2uOC2reC3lOC2uOC3iiDgtprgt4Ug4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC2h+C2reC3lOC2veC2reC3iiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyAo4La94LeS4La04LeS4LaxKSDgtq/gtq3gt4rgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uuC3meC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2r+C2reC3iuC2rSDgtrjgt5Dgtprgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxsTG9nIiBtc2dpZD0iMzQ3ODEzMzE4NDYyNDEwMjczOSI+IuC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpzgtrog4Laa4LeS4La64LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM3MDA2NDUxODQ4NzA3NjAyODUiPiLgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEg4LeD4LeEIOC2tOC3kuC2p+C3gOC2sSDgtofgtrjgtq3gt5Tgtrjgt4og4Lac4LeQ4LaxIOC2r+C2reC3iuC2rSDgtofgtq3gt5Tgt4Xgtq3gt4osIOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nCDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tuC2nOC3miDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4LacIOC2r+C2reC3iuC2rSDgt4Pgt5Tgtrvgtprgt4rgt4Lgt5Lgtq0g4Laa4LeS4La74LeT4La44LanIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5Ig4LeD4LeEIOC2lOC2tuC2nOC3miDgtq/gt5DgtrHgt5Tgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpwg4Lav4Lat4LeK4LatIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La24LeZ4Lav4LePIOC2nOC3kOC2seC3k+C2uCDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3NzcyNTc5NjgxMzIxNzI0NCI+IuC2veC3kOC2tuC3meC2sSDgt4Pgt4Qg4La04LeS4Lan4LeA4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgtrTgt5Lgt4Xgt5LgtrbgtrMg4Lav4Lat4LeK4LatIOC2h+C2reC3lOC3heC2reC3iuC3gCDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpzgt4og4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2lOC2tuC2nOC3miDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4Lac4LeKIOC2r+C2reC3iuC2rSDgtovgtrTgt4Pgt4rgtq4g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtongtqngtq/gt5ngtrEg4LaF4Lat4La7IOC2lOC2tuC2nOC3miDgtoXgtrHgt5Tgtq/gt5DgtrHgt5Tgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpzgt4og4Lav4Lat4LeK4LatIOC2tuC3meC2r+C3j+C2nOC3kOC2seC3k+C2uCDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDYWxsTG9nIiBtc2dpZD0iODU1MjA0NTY2NDc0MzQ5OTM1NCI+IuC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpzgtrog4La94LeS4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4i4La94LeQ4La24LeZ4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgt4Pgt4Qg4La04LeS4Lan4LeA4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgtq/gtq3gt4rgtq0g4LaH4Lat4LeU4LeF4Lat4LeK4LeAIOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC2uiDgtrjgt5Dgtprgt5Pgtrjgtqcg4LeE4LedIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3meC2u+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODM5NDE3MzYzNTI3ODc4NDIiPiLgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEg4LeD4LeEIOC2tOC3kuC2p+C3gOC3meC2sSDgtofgtrjgtq3gt5Tgtrjgt4og4Lav4Lat4LeK4LatIOC2h+C2reC3lOC3heC3lOC3gCDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpzgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpzgtrog4La44LeQ4Laa4LeT4La44LanIOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgtr0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFByb2ZpbGUiIG1zZ2lkPSI0NzAxODg5ODUyNjEyNzE2Njc4Ij4i4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtrTgtq0g4Laa4LeS4La64LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDYyNDc1MTUxODQ5ODg4ODQ4Ij4i4LaU4La24Lac4LeaIOC2seC2uCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lat4Lec4La74Lat4LeU4La74LeUIOC2huC2r+C3kyDgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LeaIOC2nOC2tuC2qeC3jyDgt4Dgt5Mg4LaH4Lat4LeSIOC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgtrTgt5Dgtq3gt5Lgtprgtqkg4Lat4Lec4La74Lat4LeU4La74LeUIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4LeE4LeSIOC2reC3muC2u+C3lOC2uCDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaU4La24LeAIOC3hOC2s+C3lOC2seC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LeE4LeQ4Laa4LeSIOC3gOC2sSDgtrbgt4Ag4LeD4LeEIOC2lOC2tuC2nOC3miDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC2heC2seC3meC2muC3iiDgtoXgtrrgtqcg4La64LeQ4LeA4LeT4La44LanIOC2ryDgt4Tgt5Dgtprgt5Ig4LeA4LeT4La44La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVQcm9maWxlIiBtc2dpZD0iOTA3NzkzNjI4Nzc3Mzk3NjQzIj4i4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtrTgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiLgtpTgtrbgtpzgt5og4Lax4La4IOC3g+C3hCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lat4Lec4La74Lat4LeU4La74LeUIOC3gOC3kOC2seC3kiDgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavIOC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgtrTgt5Dgtq3gt5Lgtprgtqkg4Lat4Lec4La74Lat4LeU4La74LeUIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4LedIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaU4La24LeAIOC3hOC2s+C3lOC2seC3jyDgtpzgtq0g4LeE4LeQ4Laa4LeSIOC2heC2reC2uyDgtoXgtrHgt5ngtprgt4og4LaF4La64LanIOC2lOC2tuC2nOC3miDgtrTgt5Dgtq3gt5Lgtprgtqkg4Lat4Lec4La74Lat4LeU4La74LeUIOC2uuC3kOC3gOC3kuC2uiDgt4Tgt5Dgtprgt5Ig4La24LeAIOC2muC3kuC2uuC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMjY4OTIwOTU2MTUyNDE5MTcwIj4i4LaU4La24Lac4LeaIOC3g+C2uOC3j+C2oiDgtrTgt4rigI3gtrvgt4Dgt4/gt4Tgtrog4Laa4LeS4La64LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQyNTU3MDYwMjcxNzIwNTA4NzIiPiLgtpTgtrbgtpzgt5og4LeD4LeEIOC2lOC2tuC2nOC3miDgtrrgt4Tgt4Xgt5Tgt4DgtrHgt4rgtpzgt5og4LeD4La44LeP4LaiIOC2uuC3j+C3gOC2reC3iuC2muC3j+C2veC3k+C2seC2uuC2seC3iiDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeT4La44LanIOC3hOC3nSDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La24LeZ4Lav4LePIOC2nOC3kOC2seC3k+C2uOC3miDgtq/gt5Mg4LeD4LeQ4La94Laa4LeS4La94LeS4La44Lat4LeKIOC3gOC2seC3iuC2sSAtLSDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Pgtrrgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC3g+C2uOC3j+C2oiDgtqLgt4/gtr3gt4Dgtr0g4LaU4La24Lac4LeaIOC3g+C3hCDgtpTgtrbgtpzgt5og4La64LeE4LeF4LeU4LeA4Lax4LeKIOC2heC2reC2uyDgt4PgtrHgt4rgtrHgt5Lgt4Dgt5rgtq/gtrEg4Laa4LeS4La64LeA4LeT4La44LanIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4g4LeD4Lan4LeE4LaxOiDgt4Pgt5Lgtrrgtr3gt5Qg4LeD4La44LeP4LaiIOC2ouC3j+C2veC3gOC2vSDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2tuC2vSDgtrHgt5zgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM1MDQxNzkyMjI0OTMyMzU2NDUiPiLgtpTgtrbgtpzgt5og4LeD4La44LeP4LaiIOC2tOC3iuKAjeC2u+C3gOC3j+C3hOC2uiDgt4Dgt5ngtq0g4La94LeS4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4i4LaU4La24Lac4LeaIOC2uuC3hOC3heC3lOC3gOC2seC3iuC2nOC3miDgt4Pgtrjgt4/gtqIg4La64LeP4LeA4Lat4LeK4Laa4LeP4La94LeT4Lax4La64Lax4LeKIOC2tOC3meC2seC3iuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4Lat4Lec4La74Lat4LeU4La74LeUIOC2tuC3meC2r+C3jyDgtpzgt5DgtrHgt5Pgtrjgt5rgtq/gt5Mg4LeD4LeQ4La94Laa4LeS4La94LeS4La44Lat4LeKIOC3gOC2seC3iuC2sSAtLSDgtrrgt4Tgt4Xgt5Tgt4Dgt5ngtprgt4rgtpzgt5ngtrHgt4og4La04LeQ4La44LeS4Lar4LeZ4LaxIOC2veC3meC3gyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4Lax4LeS4La04Lav4LeA4LeT4La44LanIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4Lan4LeE4LaxIDog4LeD4LeS4La64La94LeUIOC3g+C2uOC3j+C2oiDgtqLgt4/gtr0g4LeD4Laz4LeE4LePIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La24La9IOC2seC3nOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxlbmRhciIgbXNnaWQ9IjU5NzI3Mjc1NjAyNTc2MTIzOTgiPiLgtq/gt5LgtrEg4Lav4La74LeK4LeB4Lax4La64LeaIOC3g+C3kuC2r+C3lOC3gOC3k+C2uOC3iiDgt4Pgt4Qg4La74LeE4LeD4LeS4Lac4LatIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQyMTY0NjIwNDkwNTc2NTg3MjMiPiLgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La6IOC2reC3lOC2vSDgtpzgtrbgtqngt48gIOC2muC2uyDgtofgtq3gt5Ig4La44LeS4Lat4LeU4La74Lax4LeK4Lac4LeaIOC3g+C3hCDgtpHgtprgt4rgt4Ag4Laa4LeK4oCN4La74LeS4La64LeP4Laa4La74Lax4LeK4Lax4Lax4LeK4Lac4LeaIOC2ryDgtofgtq3gt5Tgt4Xgt5Tgt4Ag4LeD4LeS4La64La94LeU4La4IOC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrEg4LeD4LeS4Lav4LeK4Law4LeSIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La6IOC2u+C3hOC3g+C3iuKAjeC2uuC2t+C3j+C3gOC2uiDgt4Tgt50g4LeD4LaC4LeA4Lea4Lav4LeT4Lat4LeP4LeA4La6IOC2seC3nOC3g+C2veC2muC3jyDgtpTgtrbgtpzgt5og4Lav4LeS4LaxIOC2r+C2u+C3iuC3geC2sSDgtq/gtq3gt4rgtq0g4La24LeZ4Lav4LePIOC2nOC3kOC2seC3k+C2uOC2pyDgt4Tgt50g4LeD4LeU4La74LeQ4Laa4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc0MzQ1NDg2ODI0NzA4NTE1ODMiPiLgtrrgt4Tgt4Xgt5Tgt4DgtrHgt4og4LeD4LeEIOC3g+C2uOC2muC3j+C2veC3kuC2seC2uuC2seC3iiDgtofgtq3gt5Tgtr3gtq3gt4og4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtobgtqDgtrrgtrHgtrog4Laa4La74LaxIOC2veC2ryDgt4Pgt5Lgtrrgtr3gt5Qg4Lav4LeS4LaxIOC2r+C2u+C3iuC3geC2sSDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4og4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Pgtrrgtprgt5LgtrHgt4og4LeE4LedIOC3g+C2guC3gOC3muC2r+C3k+C2reC3j+C3gOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaU4La24Lac4LeaIOC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrEg4Lav4Lat4LeK4LatIOC2tuC3meC2r+C3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LeE4LedIOC2i+C2tOC3g+C3iuC2riDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La44Lac4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDYWxlbmRhciIgbXNnaWQ9Ijg0Mzg4NzQ3NTUxOTM4MjU2NDciPiLgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC3g+C3kuC2r+C3iuC2sOC3kiDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La4IOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44Laa4LeKIOC3g+C3kuC2r+C3lOC2muC2uyDgt4Tgt5Lgtrjgt5Lgtprgtrvgt5Tgtpzgt5og4Lav4LeQ4Lax4LeT4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtoXgtrjgt5Tgtq3gt4rgtq3gtrHgt4rgtqcg4LaKLeC2reC3kOC2tOC3keC2veC2muC3iiDgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njc5MDM1NTIwMTEzNjY4NTI4Ij4i4La64LeE4LeF4LeU4LeA4Lax4LeKIOC3hOC3nSDgtpHgtprgtqct4LeA4LeQ4Lap4Laa4La74Lax4LeK4Lax4Lax4LeKIOC2h+C2reC3lOC3heC2reC3iuC3gCDgtpTgtrbgtqcg4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC3gOC3meC2seC3g+C3iiDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC3g+C3kuC2r+C3iuC2sOC3kiDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La44LanLCDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanLCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4Lav4LeS4LaxIOC2r+C2u+C3iuC3geC2sSDgt4Tgt5Lgtrjgt5Lgtprgtrvgt5Tgt4DgtrHgt4rgtpzgt5ngtrHgt4og4La04Lar4LeS4LeA4LeS4LapIOC2uuC3gOC2sSDgtrTgtrvgt5Lgtq/gt5Ig4La44LeZ4Lax4LeKIOC2uOC3gOC3j+C2tOC3keC2uOC2pyDgt4Tgt50g4LeE4LeS4La44LeS4Laa4La74LeU4Lac4LeaIOC2heC2seC3lOC2r+C3kOC2seC3lOC2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LeD4LeS4Lav4LeK4Law4LeSIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtr3gt5Dgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIzMjQ0Njk0OTYzMjcyNDkzNzYiPiLgtpTgtrbgtpzgt5og4La64LeE4LeF4LeU4LeA4Lax4LeKIOC3hOC3nSDgt4Pgtrjgtprgt4/gtr3gt5PgtrHgtrrgtrHgt4og4LaH4Lat4LeU4LeF4Lat4LeKIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LaU4La24LanIOC3gOC3meC2seC3g+C3iiDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC3g+C3kuC2r+C3lCDgt4Dgt5Pgtrjgt4og4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pywg4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pywg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La44Lac4LeS4Lax4LeKIOC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrEg4LeE4LeS4La44LeS4Laa4La74LeU4LeA4Lax4LeK4Lac4LeZ4Lax4LeKIOC2tOC3kOC2uOC3kuC2q+C3meC2sSDgt4Pgt5og4La04LeZ4Lax4LeZ4LaxIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LeE4LedIOC3hOC3kuC2uOC3kuC2muC2u+C3lOC2nOC3miDgtq/gt5DgtrHgt5Tgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC3g+C3kuC2r+C3lOC3gOC3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iODY4ODMzNDk3NDAzNjgyMzMzMCI+IuC2tOC2u+C3k+C2muC3iuC3guC2qyDgt4PgtrPgt4Tgt48g4LaG4Lav4La74LeK4LeBIOC3g+C3iuC2ruC3j+C2sSDgtrjgt5bgtr3gt4/gt4Hgt4rigI3gtrsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI1ODA4NzExMDM5NDgyMDUxODI0Ij4i4La04La74LeT4Laa4LeK4LeC4Lar4La64LanIOC3gOC3iuKAjeC2uuC3j+C2oiDgt4Pgt4rgtq7gt4/gtrEg4La44LeW4La94LeP4LeB4LeK4oCN4La7IOC3g+C3j+C2r+C2seC3iuC2sSDgt4Tgt50g4Lax4LeAIOC3g+C3iuC2ruC3j+C2sSDgt4Pgt5DgtrTgtrrgt5Tgtrjgt4rgtprgtrvgt5Tgt4Dgt5ngtprgt5Qg4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC2u+C2seC3iuC2sS4gR1BTIOC3hOC3nSDgt4Pgt4rgtq7gt4/gtrEg4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeU4LeA4Lax4LeKIOC2huC2r+C3kyDgt4Dgt5ngtrHgtq3gt4og4LeD4LeK4Lau4LeP4LaxIOC2uOC3luC2veC3j+C3geC3iuKAjeC2uyDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La94La24LePIOC2r+C3meC2sSDgt4Pgt4rgtq7gt4/gtrHgtrog4LeD4LeEL+C3hOC3nSDgtq3gtq3gt4rgt4Dgtrog4La04LeK4oCN4La74Lat4LeS4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4La44LeZ4La6IOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSIyODM2MzA4MDc2NzIwNTUzODM3Ij4i4LaF4La44Lat4La7IOC3g+C3iuC2ruC3j+C2sSDgt4Pgt5DgtrTgtrrgt5Tgtrjgt4rgtprgtrvgt5Qg4LeA4LeS4Law4LeP4LaxIOC3gOC3meC2rSDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iNTk0NTE2NjY0MjMzNTgwMDc2MyI+IuC2heC2uOC2reC2uyDgt4Pgt4rgtq7gt4/gtrEg4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeUIOC3gOC3kuC2sOC3j+C2sSDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiBHUFMg4LeE4LedIOC3gOC3meC2seC2reC3iiDgt4Pgt4rgtq7gt4/gtrEg4La44LeW4La94LeP4LeB4LeK4oCN4La7IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kiDgt4Dgt5ngtq0g4La24LeP4Law4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtrjgt5ngtrog4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+IuC3g+C3iuC2ruC3j+C2sSDgt4Pgt5DgtrTgtrrgt5Tgtrjgt4rgtprgtrvgt5Tgt4Dgt5ngtprgt5Qg4LeD4LeK4Lau4LeP4La04Lax4La64LanIOC2heC3gOC3g+C2u+C2uiDgtq/gt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjkwNjYxNDYxMjA0NzA1OTE1MDkiPiLgtrTgtrvgt5Pgtprgt4rgt4Lgtqvgtrrgtqcg4LeA4LeK4oCN4La64LeP4LaiIOC3g+C3iuC2ruC3j+C2sSDgtrjgt5bgtr3gt4/gt4Hgt4rigI3gtrsg4LeD4LeP4Lav4Lax4LeK4LaxIOC3hOC3nSDgtrHgt4Ag4LeD4LeK4Lau4LeP4LaxIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lOC3gOC3meC2muC3lCDgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4La74Lax4LeK4LaxLiBHUFMg4LeE4LedIOC3g+C3iuC2ruC3j+C2sSDgt4Pgt5DgtrTgtrrgt5Tgtrjgt4rgtprgtrvgt5Tgt4DgtrHgt4og4LaG4Lav4LeTIOC3gOC3meC2seC2reC3iiDgt4Pgt4rgtq7gt4/gtrEg4La44LeW4La94LeP4LeB4LeK4oCN4La7IOC3gOC3kuC3g+C3kuC2seC3iiDgtr3gtrbgt48g4Lav4LeZ4LaxIOC3g+C3iuC2ruC3j+C2seC2uiDgt4Pgt4Qv4LeE4LedIOC2reC2reC3iuC2reC3iuC3gOC2uiDgtrTgt4rigI3gtrvgtq3gt5Lgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtrjgt5ngtrog4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiLgtrHgt5Lgt4Dgt5Dgtrvgtq/gt5Ig4LeD4LeK4Lau4LeP4Lax4La6IChHUFMg4LeD4LeEIOC2ouC3j+C2veC2uiDgtrTgtq/gtrHgtrjgt4og4Laa4La74Lac4Lat4LeKKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjUyOTUwNDc1NjM1NjQ5ODEyNTAiPiLgtpzgt53gtr3gt5Pgtrog4LeD4LeK4Lau4LeP4Lax4LeT4La6IOC2tOC2r+C3iuC2sOC2reC3kuC2uiAoR1BTKSDgt4Tgt50g4LeD4LeZ4La94LeKIOC2muC3lOC3heC3lOC2q+C3lCDgt4Pgt4QgV2ktRmkg4LeA4LeQ4Lax4LeSIOC2ouC3j+C2vSDgt4Pgt4rgtq7gt4/gtrHgt5Pgtrog4La04LeK4oCN4La74La34LeAIOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtpTgtrbgtpzgt5og4Lax4LeS4LeA4LeQ4La74Lav4LeSIOC3g+C3iuC2ruC3j+C2seC2uiDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La4IOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gtqcg4LeD4LeK4Lau4LeP4Lax4LeT4La6IOC3g+C3muC3gOC3jyDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanICDgtpLgt4Dgt48g4LeD4Laa4LeK4oCN4La74LeS4La6IOC3gOC3kuC2uiDgtrrgt5Tgtq3gt5Qg4LeA4LeaLiDgtpTgtrbgt4Ag4LeD4Lec4La64LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgtrvgtrEg4LaF4Lat4La7IOC2heC2uOC2reC2uyDgtrbgt5Dgtqfgtrvgt5Ig4La24La94La64Laa4LeK4LavIOC2tOC2u+C3kuC2t+C3neC2ouC2seC2uiDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjQ4ODc4OTUzNjIzNTQyMzk2MjgiPiLgtobgt4PgtrHgt4rgtrHgtq3gtrgg4LeD4LeK4Lau4LeP4Lax4La6ICjgtqLgt4/gtr3gtrot4La04LeP4Lav4LaaIOC3gOC3likiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjI1MzgyMDAxODQzNzMzMDIyOTUiPiLgtpTgtrbgtpzgt5og4Lav4LeFIOC3g+C3iuC2ruC3j+C2seC2uiDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C2seC3iuC2seC3muC3gOC3muC2r+C2sSDgtprgt5Tgt4Xgt5Tgtqvgt5Qg4LeD4LeEIFdpLUZpIOC2huC2r+C3kyDgtqLgt4/gtr0g4LeD4LeK4Lau4LeP4LaxIOC2uOC3luC2veC3j+C3geC3iuKAjeC2uyDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La74LaxIOC3g+C3iuC2ruC3j+C2sSDgt4Pgt5rgt4Dgt48g4LeA4LeS4LeD4LeS4Lax4LeKIOC2uOC3meC2uCDgt4Pgt4rgtq7gt4/gtrHgtrog4LeA4LeK4oCN4La64LeU4Lat4LeK4La04Lax4LeK4LaxIOC2muC2uyDgtofgtq0uIOC2uuC3meC2r+C3lOC2uOC2pyDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2uOC3meC2uCDgt4Pgt4rgtq7gt4/gtrEg4LeD4Lea4LeA4LePIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgt4Ug4La64LeU4Lat4LeUIOC2heC2reC2uyDgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La6IOC3g+C2s+C3hOC3jyDgtrTgt5Dgt4Dgtq3gt5Lgtrog4La64LeU4Lat4LeU4La6LiDgtpTgtrYg4LeD4LeS4Lan4LeS4LaxIOC2reC3kOC2sSDgtq/gt4Xgt4Ag4LeE4Laz4LeU4Lax4LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LanIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeFIOC3hOC3kOC2muC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMjM2Mzk2OTY0MTc5MjM4ODk0NyI+IlN1cmZhY2VGbGluZ2VyIOC3gOC3meC2rSDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJTdXJmYWNlRmxpbmdlciDgtrTgt4Tgtr0g4La44Lan4LeK4Lan4La44LeaIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4i4La74LeP4La44LeUIOC2heC2seC3iuC2reC2u+C3j+C2oOC2uiDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4i4La74LeP4La44LeUIOC2heC2seC3iuC2reC2u+C3j+C2oOC2uuC2seC2uuC3meC2seC3iiDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrrgtrHgt4og4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IklucHV0RmxpbmdlciDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IklucHV0RmxpbmdlciDgtrTgt4Tgtr0g4La44Lan4LeK4Lan4La44LeaIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJXaWZpIOC3g+C2guC2r+C2u+C3iuC3geC2miDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4i4LeA4LeS4Lax4LeK4oCN4La64LeP4LeDIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4QgV2lmaSDgt4PgtoLgtq/gtrvgt4rgt4Hgtpog4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJXaWZpIOC3g+C2guC2r+C2u+C3iuC3geC2miDgtrTgt4/gtr3gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4iV2lmaSDgt4PgtoLgtq/gtrvgt4rgt4Hgtprgtrrgt5og4La04LeE4LeFIOC2uOC2p+C3iuC2p+C2uOC3miDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwg4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjg1NzEzNDQ5ODQwMjM0NjcwOCI+IuC3geC2tuC3iuC2ryDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtrog4Lac4LeK4oCN4La74LeE4Lar4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjIxMDU5Nzc1NDIxMjIwODg1MyI+IuC2uuC3meC2r+C3lOC2uOC2pyDgt4Hgtrbgt4rgtq8g4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6IOC2nOC3iuKAjeC2u+C3hOC2q+C2uiDgtprgtrsg4LeE4La74LeA4LePIOC2uuC3kOC3gOC3k+C2uOC2pyDgtongtqkg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjI0NjgyODc3MzU4OTA5NDAyMyI+IuC3gOC3k+C2qeC3kuC2uuC3nSDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIzNTk0ODE2NTgwMzQxNDk4NjAiPiLgtrrgt5ngtq/gt5Tgtrjgtqcg4LeA4LeT4Lap4LeS4La64LedIOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uiDgtpzgt4rigI3gtrvgt4Tgtqvgtrog4Laa4La7IOC3hOC2u+C3gOC3jyDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LaJ4LapIOC2r+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9Ijc4MTUzOTg5NjkzMDMzODIwMTYiPiLgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LeA4LeT4Lap4LeS4La64LedIOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjI3Nzk3OTMwNjQ3MDkzNTAyODkiPiLgtrrgt5ngtq/gt5Tgtrjgtqcg4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC3gOC3k+C2qeC3kuC2uuC3nSDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtrog4Lac4LeK4oCN4La74LeE4Lar4La6IOC2muC2uyDgt4Tgtrvgt4Dgt48g4La64LeQ4LeA4LeT4La44LanIOC2ieC2qSDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iNjA5NTg1OTkzNzA2OTE0NjA4NiI+IuC2lOC2tuC2nOC3miDgt4Hgt4rigI3gtrvgt4Dgt4rigI3gtrog4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IuC3geC2tuC3iuC2r+C2uiDgtobgtq/gt5Mg4Lac4Led4La94LeT4La6IOC3geC2tuC3iuC2ryDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4Qg4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6IOC3g+C2s+C3hOC3jyDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La74Lax4LeK4Lax4LeaIOC2muC3lOC2uOC2sSDgtrHgt4/gtq/gtprgtrog4Lav4LeQ4La64LeSIOC2reC3muC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+IuC3geC2tuC3iuC2ryDgtrTgtqfgt5Lgtpzgtq0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i4La44La64LeS4Laa4LeK4oCN4La74Lec4LeG4Led4Lax4La6IOC2uOC2n+C3kuC2seC3iiDgt4Hgtrbgt4rgtq8g4La04Lan4LeS4Lac4LatIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtrjgtp/gt5LgtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC2leC2seC3keC2uCDgt4Dgt5rgtr3gt4/gt4Dgtpog4LaU4La24Lac4LeaIOC2heC2seC3lOC2r+C3kOC2seC3lOC2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LeB4La24LeK4LavIOC2tOC2p+C3kuC2nOC2rSDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LapIOC2veC2tuC3jyDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i4La04LeS4Lax4LeK4Lat4LeW4La7IOC3g+C3hCDgt4Dgt5Pgtqngt5Lgtrrgt50g4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuC2muC3kOC2uOC2u+C3j+C3gOC3meC2seC3iiDgtrTgt5LgtrHgt4rgtq3gt5bgtrsg4Lac4LeQ4Lax4LeT4La44LanIOC3g+C3hCDgt4Dgt5Pgtqngt5Lgtrrgt50g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2uOC2n+C3kuC2seC3iiDgtpTgtrbgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtpXgtrHgt5Hgtrgg4LeA4Lea4La94LeP4LeA4Laa4Lav4LeTIOC2muC3kOC2uOC2u+C3j+C3gCDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IuC2muC3kOC2uOC2u+C3j+C3gCDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5rgtq/gt5MgTEVEIOC2r+C2u+C3iuC3geC2miDgt4Pgtrjgt4rgtrTgt4rigI3gtrvgt5rgt4Lgtqvgtrog4LaF4La24La9IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjQ3NjQ1ODU0NjU0ODAyOTUzNDEiPiLgtprgt5Dgtrjgtrvgt48g4La34LeP4LeA4LeS4Lat4La6IOC2tOC3kuC3heC3kuC2tuC2syBMRUQg4Lav4La74LeK4LeB4Laa4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5PgtrjgtqcsIOC2muC2veC3kuC2seC3iiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt48g4LaH4Lat4LeSIOC2tOC2r+C3iuC2sOC2reC3kiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyOTYxMjkyMjA1NzY0NDg4MzA0Ij4i4Lan4LeQ4La24LeK4La94Lan4La6IOC3g+C3iuC2ruC3kuC2u+C3gOC2uCDgtoXgtrbgtr0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgzMzc4MTcwOTMzMjYzNzA1MzciPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LeD4LeK4Lau4LeS4La74LeAIOC2heC2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMzNDgxODgwODAwMTY5OTUzMCI+IuC2uOC3lOC3heC3lCDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgtrgg4LeD4LeK4Lau4LeS4La74LeA4La4IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uiDgtongtq3gt48g4La34La64LeP4Lax4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc4ODkwMzI5NzYyNzI4MzA5OSI+IuC2uOC3lOC3heC3lCDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgtrgg4LeD4LeK4Lau4LeS4La74LeA4La4IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uiDgtongtq3gt48g4La34La64LeP4Lax4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDM2NjM0OTcyNTYxNzk1MDAyIj4i4Lan4LeQ4La24LeK4La94Lan4LeKIOC2seC3kOC3gOC2rSDgtrTgtqsg4Lac4LeQ4Lax4LeK4LeA4LeT4La44LanIOC2tuC2vSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4OTg1NjA4NzI0NjI2MzgyNDIiPiLgtq/gt5Tgtrvgtprgtq7gtrEg4Lax4LeQ4LeA4LatIOC2tOC2qyDgtpzgt5DgtrHgt4rgt4Dgt5Pgtrjgtqcg4La24La9IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtrHgt5Dgt4Dgtq0g4La24La9IOC2nOC3kOC2seC3iuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MzI2MDA4MTI0Mjg5OTg5OTY5Ij4i4Lan4LeQ4La24LeK4La94Lan4La6IOC2seC3kOC3gOC2rSDgtofgtrvgtrngt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2nOC3nOC2seC3lCDgtrTgtq/gt4rgtrDgtq3gt5Lgtrog4La04LeK4oCN4La74LeA4Lea4LeBIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiJTRCDgtrTgtq3gt4og4Lac4Lec4Lax4LeUIOC2tOC2r+C3iuC2sOC2reC3kuC2uiDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgbXNnaWQ9IjE4MjkyOTA3MDE2NTg5OTIzNDciPiLgtongt4Dgtq3gt4og4Laa4LeFIOC3hOC3kOC2muC3kiDgtobgtqDgtrrgtrHgtrog4LeD4Laz4LeE4LePIOC2nOC3nOC2seC3lCDgtrTgtq/gt4rgtrDgtq3gt5Ig4LaI4Laz4LeT4La44LanIOC3g+C3hCDgtpzgt5Dgtr3gt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+IlVTQiDgtobgtqDgtrrgtrHgtrog4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiJTRCDgtrTgtq0g4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iODc4NDI2ODI0Njc3OTE5ODYyNyI+IuC2ieC3gOC2reC3iiDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC2huC2oOC2uuC2sSDgt4bgt53gtrjgt5Dgtqfgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzNDExMzM4NjMyMDAyMTkzODQ2Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgtrTgt5Lgt4Xgt5LgtrbgtrMg4Lat4Lec4La74Lat4LeU4La74LeUIOC2veC2tuC3jyDgtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2FjY2VzcyIgbXNnaWQ9IjMwOTQ1NjM4NDQ1OTM4Nzg1NDgiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La64LeaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2NyZWF0ZSIgbXNnaWQ9IjY0MTQ3NTcyMzQ3ODkzMzYzMjciPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC2seC3kuC2u+C3iuC2uOC3j+C2q+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfY3JlYXRlIiBtc2dpZD0iNDU1ODg2OTI3MzU4NTg1Njg3NiI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4LeD4LeQ4Lav4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19kZXN0cm95IiBtc2dpZD0iNTI2OTI4MzI4MzAxNjE4MDIyIj4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgt4Dgt5LgtrHgt4/gt4Eg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19kZXN0cm95IiBtc2dpZD0iNzIxODc0OTI4NjE0NTUyNjUzNyI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4LeA4LeS4Lax4LeP4LeBIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9Ijg4Nzc5OTgxMDE5NDQ5OTkzODYiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC2seC2guC3gOC3k+C2uC/gtpzgt5Dgtr3gt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSIzNDUxMzYwMTE0OTAyNDkwOTI5Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgt4Pgt4Dgt5Ig4Laa4LeS4La74LeT4La44LanL+C2nOC3kOC2veC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfcmVuYW1lIiBtc2dpZD0iNzQ5NjYzMzk1NDA4MDQ3MjQxNyI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4Lax4LeQ4LeA4LatIOC2seC2uOC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX3JlbmFtZSIgbXNnaWQ9IjE3OTQ3NTc1ODg0NzIxMjc2NzUiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC2seC3kOC3gOC2rSDgtrHgtrjgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgtprgtrjgt4rgtrTgtrHgtrog4La04LeP4La94Lax4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4Laa4La44LeK4La04Laa4La6IOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4LeD4LeQ4Lar4LeZ4LeF4LeSIOC2huC2veC3neC2muC2uiDgtrTgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLgt4Pgt5Dgtqvgt5ngt4Xgt5Lgtrog4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNiIiBtc2dpZD0iMTExMzQ1MzQzMDY0NTQwMjcyMyI+IlVTQiDgtovgtrTgt4/gtoLgtpwg4LeD4Laz4LeE4LePIOC2muC3kOC2uOC3kOC2reC3iuC2rSDgt4Pgt4Qg4LaF4LeA4LeD4La7IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2IiIG1zZ2lkPSI3Nzc2MTU1NDMwMjE4MjM5ODMzIj4iVVNCIOC2i+C2tOC3j+C2guC2nCDgt4PgtrPgt4Tgt48g4LaF4La34LeS4La74LeU4Lag4LeSIOC3g+C3hCDgtoXgt4Dgt4Pgtrsg4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTXRwIiBtc2dpZD0iNDk1MzQ2ODY3Njc5NTkxNzA0MiI+Ik1UUCDgtrTgt4rigI3gtrvgt5zgtqfgt5zgtprgt53gtr3gtrog4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc010cCIgbXNnaWQ9IjY1MzI5NjEyMDA0ODY3OTE1NzAiPiJNVFAgVVNCIOC2tOC3iuKAjeC2u+C3nOC2p+C3neC2muC3neC2veC2uiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4LeS4La74LeT4La44LanIOC2muC2u+C3iuC2seC2vSBNVFAg4Law4LeP4LeA4Laa4La64LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI0MTQ4MjkwODYwNDAwNjU5MTQ2Ij4i4Lav4LeY4Lap4LeP4LaC4LacIOC2tOC2u+C3k+C2muC3iuC3guC2q+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNjU5Nzk2NDE5MTIwODAxNjYwNSI+IuC2r+C3mOC2qeC3j+C2guC2nCDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4LeS4La74LeT4La44LeaIOC2heC2u+C2uOC3lOC2qyDgt4PgtrPgt4Tgt48g4La64LeZ4Lav4LeU4La44LanIOC3gOC3kuC3gOC3kuC2sCDgtrTgtrvgt4rgtrrgtrHgt4rgtq0g4La04LeP4La94Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtoXgtoLgtpog4LeA4LeZ4LatIOC2jeC2ouC3lOC3gOC2uCDgtoXgtrjgtq3gtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4LaU4La24Lac4LeaIOC2uOC3kOC2r+C3kuC3hOC2reC3iiDgt4Dgt5Pgtrjgtprgt4og4Lax4Lec4La44LeQ4Lat4LeS4LeAIOC2r+C3lOC2u+C2muC2ruC2sSDgtoXgtoLgtpog4LaH4La44Lat4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngt4Tgt5Ig4La04LeK4oCN4La74Lat4LeS4LaR4La94La6IOC3gOC2seC3iuC2seC3miDgtoXgtrHgtrTgt5rgtprgt4rgt4Lgt5Lgtq0g4LaF4La64Laa4LeS4La74LeT4La44LeKIOC3hOC3nSDgtofgtrjgtq3gt5Tgtrjgt4og4LaH4Lat4LeS4LeA4LeT4La44La64LeSLiDgtrjgt5ngtrrgtrHgt4og4LeE4Lav4LeS4LeD4LeSIOC2heC2guC2miDgt4Dgtr3gtqcg4LaH4La44Lat4LeU4La44LeKIOC2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2seC3nOC2r+C3meC2sSDgtrbgt4Dgtqcg4LeD4Lan4LeE4Lax4LeKIOC2muC2u+C2nOC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2heC2seC3lOC2r+C3kOC2seC3lOC2uOC2muC3iiDgtrHgt5zgtrjgt5Dgtq3gt5Lgt4Ag4LaH4La44Lat4LeU4La44LeKIOC2nOC3kOC2seC3k+C2uOC3meC2seC3iiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2lOC2tuC2nOC3miDgtrjgt5Tgtq/gtr3gt4og4Lax4LeS4Laa4La74LeU4Lar4LeaIOC3gOC3kOC2uiDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjQxOTgzNDkyMTExMDg0OTc4NzkiPiLgtpXgtrHgt5Hgtrgg4Lav4LeU4La74Laa4Lau4LaxIOC2heC2guC2muC2uuC2muC2pyDgto3gtqLgt5Tgt4Dgtrgg4LaF4La44Lat4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSIxNjg5MDI0OTAxNTA5OTk2ODEwIj4i4LaU4La24Lac4LeaIOC2uOC3kOC2r+C3kuC3hOC2reC3iuC3gOC3k+C2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LeE4Lav4LeS4LeD4LeSIOC2heC2guC2miDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4LaV4Lax4LeR4La4IOC2r+C3lOC2u+C2muC2ruC2sSDgtoXgtoLgtprgtrrgtprgtqcg4LaH4La44Lat4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Tgtq/gt5Lgt4Pgt5Ig4LeD4Lea4LeA4LePIOC3gOC3meC2rSDgtoXgtrHgt4Dgt4Hgt4rigI3gtrog4LeD4LeEIOC2seC3k+C2reC3kuC2uOC2uiDgtrHgt5zgt4DgtrEg4LaH4La44Lat4LeU4La4IOC2veC3kOC2tuC3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La4IOC3g+C3kuC2r+C3lCDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ4NDI1NzY5OTQxNDQ2MDQ4MjEiPiJDRE1BIOC2p+C3kOC2tuC3iuC2veC2pyDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgtrgg4LeD4LeY4Lai4LeU4LeAIOC2h+C2u+C2ueC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NjA0ODQ4MDk1MzE1NDIxNDI1Ij4iQ0RNQSDgtq/gt5Tgtrvgtprgtq7gtrEg4La04LeS4LeE4LeS4Lan4LeU4La4IOC3g+C3mOC2ouC3lOC3gCDgtofgtrvgtrngt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgbXNnaWQ9IjE5OTQxOTM1Mzg4MDIzMTQxODYiPiLgtrrgt5ngtq/gt5TgtrjgtqcgQ0RNQSDgtrTgt4rigI3gtrvgtq3gt5LgtrTgt4/gtq/gtrEg4LaG4La74La44LeK4La3IOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqngtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaF4Lax4LeA4LeB4LeK4oCN4La6IOC2veC3meC3gyBDRE1BIOC2tOC3iuKAjeC2u+C2reC3kuC2tOC3j+C2r+C2sSDgtobgtrvgtrjgt4rgtrcg4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9Ijc3ODU0MDgyNTMzNjQzMzU3NDAiPiLgt4Pgt4rgtq7gt4/gtrEg4La64LeP4LeA4Lat4LeK4Laa4LeP4La94LeT4LaxIOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiDgtrTgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iMTEyMDc0MTU1Nzg5MTQzODg3NiI+IuC3g+C3iuC2ruC3j+C2seC3k+C2uiDgtrrgt4/gt4Dgtq3gt4rgtprgt4/gtr3gt5LgtrEg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2u+C3muC2qeC3kuC2uuC3neC3gOC3meC2seC3iiDgt4Pgtrbgtr0v4LaF4La24La9IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+IuC2tOC3kuC2u+C3kuC2muC3iuC3g+C3lOC2uOC3iiDgtpzgt5Tgtqvgt4/gtoLgtpwg4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNDAyNDUyNjk2ODYzMDE5NDEyOCI+IuC2tOC3kuC2u+C3kuC2muC3iuC3g+C3lOC2uOC3iiDgt4Pgt5rgt4Dgt4/gt4Ag4La44Lac4LeS4Lax4LeKIOC2i+C2reC3iuC3geC3iuKAjeC2u+C3muC2q+C3kiDgtprgt4Ug4Lac4LeU4Lar4LeP4LaC4LacIOC3gOC3meC2rSDgtprgt5Lgtrrgt4Dgt5Pgtrjgt4ov4La94LeS4LeA4LeT4La44LeKIOC2tOC3kuC3gOC3kuC3g+C3lOC2uCDgt4PgtrPgt4Tgt48g4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kR2FkZ2V0IiBtc2dpZD0iNzc2OTA1MzM5MDE1ODYzNDcxIj4i4LeA4LeS4Lai4Lan4LeKIOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4i4Laa4LeU4La44LaxIOC3gOC3kuC2ouC2p+C2uiDgtprgt5TgtrjgtrEg4La64LeZ4Lav4LeU4La44LeZ4Lax4LeKIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgtr0g4LeE4LeQ4Laa4LeS4LavIOC2uuC2seC3iuC2sSDgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgtqcg4La04LeQ4LeA4LeD4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2h+C2reC3kiDgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4Lav4Lat4LeK4LatIOC3gOC2veC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgtrog4La94La24LePIOC2r+C3kuC2uiDgt4Tgt5DgtpouIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iODQyMzkyMzc3NzY1OTI5MjIyOCI+IuC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtq3gtq3gt4rgt4Dgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSIxMDI5ODc3NTI5MDA3Njg2NzMyIj4i4LaL4La04LeP4LaC4Lac4La64LeaIOC2r+C3lOC2u+C2muC2ruC2sSDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwg4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2h+C2reC3kiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaU4La24LanIOC2seC3kuC3gOC3muC2r+C2seC2uuC3meC2seC3iiDgtq3gt5zgtrvgt4Ag4Lai4LeP4La9IOC2uOC3j+C2u+C3lCDgtprgt5Lgtrvgt5PgtrgsIOC2r+C3lOC2u+C2muC2ruC2sSDgtrvgt5rgtqngt5Lgtrrgt53gt4Ag4LeD4Laa4LeK4oCN4La74LeS4La6IOC3g+C3hCDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La4IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjkxNzgyMjg1MjQ1MDc2MTA0ODYiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4Lat4Lat4LeK4LeA4La6IOC3g+C3hCDgtoXgtrHgtrHgt4rigI3gtrrgtq3gt4/gt4Dgtrog4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSIxNjM5MjEyNzcxODI2MTI1NTI4Ij4i4LaL4La04LeP4LaC4Lac4La64LeaIOC2r+C3lOC2u+C2muC2ruC2sSDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwg4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaH4La44Lat4LeU4La4IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Dgt5Tgt4Dgtq3gt4og4LeD4LeEIOC2h+C2uOC2reC3lOC2uOC2muC3kuC2seC3iiDgtq/gt5Tgtrvgt4Pgt4rgtq4g4LaF4LaC4Laa4La6IOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Tgt4Dgtq3gt4og4Lav4LeU4La74Laa4Lau4LaxIOC2heC2guC2muC2uiDgt4Pgt4Qg4LaL4La04LeP4LaC4LacIElEIOC3hOC2s+C3lOC2seC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTMxNzMxNDM1MDExNDk1MDE1Ij4i4Lan4LeQ4La24LeK4La94Lan4La6IOC2seC3kuC2seC3iuC2r+C3meC2seC3iiDgt4Dgt5Dgt4Xgtprgt4rgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTczNDgwMTg3OTQxNDk2MTMwIj4i4Lav4LeU4La74Laa4Lau4Lax4La6IOC2seC3kuC2seC3iuC2r+C2pyDgtrrgt4/gtrjgt5ngtrHgt4og4LeA4LeF4Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczMTEzMTk4MjQ0MDA0NDc4NjgiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Lax4LeS4Lax4LeK4Lav4LanIOC2uuC3j+C2uOC3meC2seC3iiDgt4Dgt5Dgtr3gt5Dgtprgt4rgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NTU5MTAwNjc3MzcyOTI4NzU0Ij4i4Lav4LeU4La74Laa4Lau4Lax4La6IOC2seC3kuC2seC3iuC2r+C2pyDgtrrgt4/gtrjgt5ngtrHgt4og4LeA4LeQ4La94LeQ4Laa4LeK4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3ODcwMzQ3MjI2MTYzNTA0MTciPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC3hOC3nSDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5Mjg2MjI0NzA5ODA5NDMyMDYiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4La24La9IOC2nOC3kOC2seC3iuC3gOC3k+C2uCDgt4Tgt50g4LeA4LeQ4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC3hOC3nSDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjAzNzA1NzM0ODQ2MzEzMTAzMiI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeD4LeEIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mYWN0b3J5VGVzdCIgbXNnaWQ9IjM3MTUyMjU0OTI2OTY0MTYxODciPiLgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq3gt4Hgt4/gtr3gt48g4La04La74LeT4Laa4LeK4LeC4LarIOC2huC2muC3j+C2u+C2uiDgtq3gt5Tgt4Ug4Law4LeP4LeA4Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZhY3RvcnlUZXN0IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTUyMDU5MzE4MzU5NjUzMDkxIj4i4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2r+C3mOC2qeC3j+C2guC2nCDgt4Dgt5ngtq0g4LeD4La44LeK4La04LeW4La74LeK4LarIOC2tOC3kuC3gOC3kuC3g+C3lOC2uCDgt4PgtrPgt4Tgt48g4LaF4LeA4LeD4La7IOC2r+C3k+C2uOC3meC2seC3iiDgtrTgt4Tgt4Ug4La44Lan4LeK4Lan4La44LeaIOC2seC3kuC2tOC3kOC3gOC3lOC2uOC3iuC2muC2u+C3lCDgtrTgtrvgt5Pgtprgt4rgt4Lgtqvgtrrgtprgt4og4La94LeZ4LeDIOC2sOC3j+C3gOC2seC2uiDgtprgtrvgtrHgt4rgtrEuIOC2seC3kuC2tOC3kOC3gOC3lOC2uOC3iuC2muC2u+C3lCDgtrTgtrvgt5Pgtprgt4rgt4Lgtqsg4LaG4Laa4LeP4La74La64LeZ4Lax4LeKIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC3gOC3kuC2pyDgtrTgtrjgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTM2NjQ0OTkwMzE5MjQ0ODAyIj4i4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2r+C3mOC2qeC3j+C2guC2nCDgt4Dgt5ngtq0g4LeD4La44LeK4La04LeW4La74LeK4LarIOC2tOC3kuC3gOC3kuC3g+C3lOC2uCDgt4PgtrPgt4Tgt48g4LaF4LeA4LeD4La7IOC2r+C3k+C2uOC3meC2seC3iiDgtrTgt4Tgt4Ug4La44Lan4LeK4Lan4La44LeaIOC2seC3kuC2tOC3kOC3gOC3lOC2uOC3iuC2muC2u+C3lCDgtrTgtrvgt5Pgtprgt4rgt4Lgtqvgtrrgtprgt4og4La94LeZ4LeDIOC2sOC3j+C3gOC2seC2uiDgtprgtrvgtrHgt4rgtrEuIOC2seC3kuC2tOC3kOC3gOC3lOC2uOC3iuC2muC2u+C3lCDgtrTgtrvgt5Pgtprgt4rgt4Lgtqsg4LaG4Laa4LeP4La74La64LeZ4Lax4LeKIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC3gOC3kuC2pyDgtrTgtrjgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXIiIG1zZ2lkPSI2NjI3MTkyMzMzMzczNDY1MTQzIj4i4La24LeS4Lat4LeU4La04LatIOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlciIgbXNnaWQ9IjczNzM0NDc5MjA5Nzc2MjQ3NDUiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4La24LeS4Lat4LeU4La04LatIOC3g+C3kOC2muC3g+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iMzI3ODYwODE2NTk3NzczNjUzOCI+IuC2lOC2tuC2nOC3miDgtrbgt5Lgtq3gt5TgtrTgtq3gt5og4La04LeK4oCN4La74La44LeP4Lar4La6IOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iODIzNTc4NDM4NDIyMzczMDA5MSI+IuC2tOC2r+C3iuC2sOC2reC3kiDgtrbgt5Lgtq3gt5TgtrTgtq3gt5og4La04LeK4oCN4La74La44LeP4LarIOC2ieC2n+C3kiDgt4Pgtprgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIyMzE1NzUwNDIzMTM5Njk3Mzk3Ij4i4Laa4La74LeK4La44LeP4Lax4LeK4Lat4LeB4LeP4La94LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C2pyDgtrTgtq/gt4rgtrDgtq3gt5Lgtrog4Lax4LeQ4LeA4LatIOC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXN0ZXJDbGVhciIgbXNnaWQ9IjM2NjUzODA0OTI2MzM5MTAyMjYiPiLgt4Pgt5Lgtrrgtr3gt5Qg4Lav4Lat4LeK4LatIOC2uOC3kOC2muC3k+C2uOC3meC2seC3iiwg4LeA4LeS4Lax4LeK4oCN4La64LeP4LeDIOC2muC3kuC2u+C3k+C2uOC3meC2seC3iiDgt4Pgt4Qg4La64LeZ4Lav4LeU4La44LeKIOC3g+C3iuC2ruC3j+C2tOC2seC2uuC3meC2seC3iiDgtpHgt4Tgt5Ig4Laa4La74LeK4La44LeP4Lax4LeK4LatIOC3geC3j+C2veC3jyDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4LatIOC2tOC2r+C3iuC2sOC2reC3kuC2uiDgtrHgt5Dgt4Dgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZSIgbXNnaWQ9IjIwMjE2MTQ4Mjk1OTE3NzU2NDYiPiLgt4Dgt5rgtr3gt4/gt4Ag4LeD4LeQ4Laa4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTg5NjM0MTQzODE1MTE1Mjg4MSI+IuC2p+C3kOC2tuC3iuC2veC2pyDgtpTgtrvgtr3gt53gt4Pgt5Tgt4Dgt5og4LeA4Lea4La94LeP4LeAIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NTU3MDI3MzA3MzgwMjAiPiLgtq/gt5Tgtrvgtprgtq7gtrEg4LaU4La74La94Led4LeD4LeU4LeA4LeaIOC3gOC3muC2veC3j+C3gCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2muC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZVpvbmUiIG1zZ2lkPSIyOTQ1MDc5ODAxMDEzMDc3MzQwIj4i4LeA4Lea4La94LePIOC2muC2veC3j+C2tOC2uiDgt4Pgt5Dgtprgt4Pgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTY3Njk4MzcxMjMxNTgyNzY0NSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtprgt4/gtr0g4Laa4La94LeP4La04La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDk5OTQzNDg4NDM2NjMzMzk4Ij4i4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC3gOC3muC2veC3jyDgtprgtr3gt4/gtrTgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjQ4MjkyNjIzNDk2OTEzODY5ODYiPiJBY2NvdW50TWFuYWdlclNlcnZpY2Ug4La94LeZ4LeDIOC2tOC3meC2seC3kyDgt4Pgt5Lgtqfgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSIxOTQ4NDU1NTUyMzMzNjE1OTU0Ij4iQWNjb3VudEF1dGhlbnRpY2F0b3JzIOC3gOC3meC2rSDgtofgtrjgtq3gt5Tgtrjgt4og4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QWNjb3VudHMiIG1zZ2lkPSIxMDg2Nzk1NDY3NzYwMTIyMTE0Ij4i4LaL4La04LeP4LaC4Lac4La64LeaIOC2h+C2reC3kiDgtpzgt5Lgtqvgt5Tgtrjgt4og4LeD4Lec4La64Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LeA4LeS4LeD4LeS4Lax4LeKIOC2r+C2seC3iuC2seC3jyDgtpzgt5Lgtqvgt5Tgtrjgt4og4La94LeQ4La64LeS4LeD4LeK4Lat4LeU4LeA4Laa4LeKIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La2IOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgt5zgtqcg4LaH4Lat4LeSIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LeD4LeP4Lav4LePIOC2h+C2reC3kiDgtpzgt5Lgtqvgt5Tgtrjgt4og4La44LeT4LanIOC2h+C2reC3lOC3heC2reC3iiDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDQ4MzE2ODIyNDUxODA3MzgyIj4i4Lav4LeU4La74Laa4Lau4Lax4La6IOC3gOC3kuC3g+C3kuC2seC3iiDgtq/gtrHgt4rgtrHgt48g4Lac4LeS4Lar4LeU4La44LeKIOC2veC3kOC2uuC3kuC3g+C3iuC2reC3lOC3gOC2muC3iiDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tiDgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4Lec4LanIOC2h+C2reC3kiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC3g+C3j+C2r+C3jyDgtofgtq3gt5Ig4Lac4LeS4Lar4LeU4La44LeKIOC2uOC3k+C2pyDgtofgtq3gt5Tgt4Xgtq3gt4og4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4i4Lac4LeS4Lar4LeU4La44LeKIOC3g+C3j+C2r+C2seC3iuC2sSDgt4Pgt4Qg4La44LeU4La74La04LavIOC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTQ3MjEyNDI5NjkwODk3NzI2MCI+IuC2nOC3kuC2q+C3lOC2uOC3iiDgt4Pgt5Dgtq/gt5Pgtrjgtqcg4LeD4LeEIOC2u+C3hOC3g+C3iiDgtrTgtq8g4La94La24LeP4Lac4LeQ4Lax4LeT4La4IOC3g+C3hCDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4Laa4LeS4La74LeT4La4IOC2h+C2reC3lOC3heC2reC3iuC3gCBBY2NvdW50TWFuYWdlciDgtpzgt5og4Lac4LeS4Lar4LeU4La44LeKIOC3g+C2reC3iuKAjeC2uuC3j+C2tOC2sSDgt4Tgt5Dgtprgt5Lgtrrgt4/gt4DgtrHgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjY291bnRzIiBtc2dpZD0iNDk4MzEyNjMwNDc1NzE3NzMwNSI+IuC2nOC3kuC2q+C3lOC2uOC3iiDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxIOC3hOC3nSDgtongt4Dgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI4Njk4Mjk1NjI1NDg4MjkyNTA2Ij4i4Lac4LeS4Lar4LeU4La44LeKIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5PgtrgsIOC3g+C3hCDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La4IOC3g+C3hCDgtpTgt4Dgt5TgtrHgt4rgtpzgt5og4La44LeU4La74La04LavIOC2uOC3kOC2muC3k+C2uCDgtobgtq/gt5Mg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeSIOC3g+C3kuC2r+C3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2VDcmVkZW50aWFscyIgbXNnaWQ9IjIzNTQ4MTM5NjE2Mzg3NzY0MiI+IuC2i+C2tOC3j+C2guC2nOC2uuC3miDgtofgtq3gt5Ig4Lac4LeS4Lar4LeU4La44LeKIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2VDcmVkZW50aWFscyIgbXNnaWQ9Ijc5ODQyMjcxNDc0MDMzNDY0MjIiPiLgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtrEg4Lan4Led4Laa4LaxIOC2ieC2veC3iuC2veC3k+C2uCDgt4PgtrPgt4Tgt48g4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4i4Lai4LeP4La9IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC2seC3iiDgtrbgt5Dgtr3gt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI4MzE4OTY0NDI0Njc1OTYwOTc1Ij4i4Laa4LeU4La44LaxIOC2ouC3j+C2vSDgtrTgt4Dgtq3gt5LgtrHgt4rgtrHgt5og4LavIOC3g+C3hCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq0g4LavIOC2huC2r+C3kyDgtqLgt4/gtr0g4LeD4La24Laz4Lat4LePIOC2nOC3kOC2sSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La24LeQ4La94LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSI4MDE4NzU4MTM2NDA0MzIzNjU4Ij4i4LeD4La44LeK4La04LeW4La74LeK4LarIOC2ouC3j+C2vSDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjM0MDMwNjIxODc3Nzk3MjQxODUiPiLgtovgtrTgtprgtrvgtqvgtrrgtqcg4Lai4LeP4La9IOC2muC3meC3gOC2seC3kuC2uuC2seC3iiDgt4Pgt5Dgtq/gt5Pgtrjgtqcg4LeD4LeEIOC2ouC3j+C2vSDgtrTgt4rigI3gtrvgt5zgtqfgt53gtprgt53gtr0g4LaF4La34LeS4La74LeU4Lag4LeSIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaL4La04Laa4La74Lar4La64LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3iuC2reC2u+C3iuC2ouC3j+C2veC2uuC2pyDgtq/gtq3gt4rgtq0g4La64LeQ4LeA4LeT4La44LanIOC3gOC3kuC2sOC3kuC2uuC2seC3iiDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrvgtrog4LeD4LeEIOC2heC2seC3meC2muC3lOC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4La04La64La64LeSLCDgtpHgtrHgt5Lgt4Pgt48g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtq/gtq3gt4rgtq0g4LaF4Lax4LeK4Lat4La74LeK4Lai4LeP4La94La64LanIOC2uuC3kOC3gOC3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUwNTY2MDE1OTY3NTc1MTg5NiI+IuC2ouC3j+C2veC2uuC3miDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeD4LeEIOC2nOC2uOC2seC3j+C2nOC2uOC2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxL+C2heC2veC3iuC2veC3jyDgtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+IuC2leC2seC3keC2uCBBUE4g4LaR4Laa4LaaIOC2seC3kuC2uuC3lOC2reC3lOC3gCDgt4Pgt4Qg4Lat4Lec4LanIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrgg4LeA4LeQ4Lax4LeSIOC2ouC3j+C2vSDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4Qg4LeD4LeS4La64La94LeU4La4IOC2ouC3j+C2vSDgtoXgtq3gt5Tgtrvgt5Qg4LaH4La74LeT4La44LanIOC3g+C3hCDgt4Pgt53gtq/gt5Lgt4Pgt5Ig4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtofgtq3gt5Dgtrjgt4rgt4Dgt5Lgtqcg4LaU4La24Lac4LeaIOC2heC2seC3lOC2r+C3kOC2seC3lOC2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaF4Lax4LeS4LeC4LeK4LanIOC2i+C2tOC3j+C2guC2nCDgtqLgt4/gtr0g4La04LeQ4Laa4LeQ4Lan4LeK4Lan4LeUIOC2heC2sOC3k+C2muC3iuC3guC2q+C2uizgtobgtrTgt4Pgt5Qg4Lav4LeS4LeB4LeP4Lac4LatIOC2muC3kuC2u+C3k+C2uCDgt4Tgt50g4LeA4LeZ4Lax4LeD4LeK4Laa4LeS4La74LeT4La4IOC3g+C3kuC2r+C3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LapIOC2reC3kuC2tuC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9Ijk1ODg4NDI5MTQ1NDMyNzMwOSI+IuC2ouC3j+C2vSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Ag4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9IjY3ODkxMjM5MTI0NzY0MTYyMTQiPiLgtqLgt4/gtr0g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64LeaIOC2reC2reC3iuC3gOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSI1OTUyNTg0OTY0MzczMDE3OTYwIj4i4Lan4LeZ4Lav4La74LeKIOC2muC2u+C2sSDgtr3gtq8g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjE1MjQ0NDEzNDQ0MTIzMTk3ODAiPiLgtqfgt5ngtq/gtrvgt4og4Laa4LeFIOC2ouC3j+C2vSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Dgtrrgt5og4Lat4Lat4LeK4LeA4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSIxNDAwNjY2MDEyNjcxNjQ4NzQxIj4i4La04LeD4LeU4La24LeS4La44LeKIOC2r+C2reC3iuC2rSDgtrfgt4/gt4Dgt5Lgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSI1MzQ3NzI5NTc4NDY4NzQ0Mzc5Ij4i4La04LeD4LeU4La24LeS4La44LeKIOC2r+C2reC3iuC2rSDgtrfgt4/gt4Dgt5Lgtq3gt48g4LeD4LeQ4Laa4LeD4LeT4La4IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MjAyMDEyOTQ5MjQ3MDQwMDExIj4iV2ktRmkg4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4Lax4LeKIOC2tuC3kOC2veC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiJXaS1GaSDgt4Pgtrbgtr0g4La24LeAIOC3g+C3hCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq0gV2ktRmkg4LaL4La04LeP4LaC4LacIOC3gOC2vSDgtrHgtrjgt4og4LaG4Lav4LeTIFdpLUZpIOC2ouC3j+C2veC2muC2u+C2q+C2uuC3miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La24LeQ4La94LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNjU1MDY0MTE4ODc0OTEyODAzNSI+IldpLUZpIOC3gOC2veC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeS4La4IOC3g+C3hCDgt4Dgt5Lgt4PgtrHgt4rgtrDgt5Ig4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+IldpLUZpIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Pgt4rgtq7gt4/gtrHgtrrgtrHgt4og4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Pgtrjgtqcg4LeD4LeEIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgt4Dgt5Pgtrjgtqcg4LeD4LeELCBXaS1GaSDgtqLgt4/gtr0g4LeD4Laz4LeE4LePIOC2i+C2tOC3j+C2guC2nOC2uuC3miDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Pgtrrgtqcg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgbXNnaWQ9IjEzNjgyNTM4NzE0ODMyNTQ3ODQiPiJXaS1GaSDgtrbgt4Tgt5Tgt4Dgt5Lgtprgt4/gt4HgtrEg4La04LeS4LeF4LeS4Lac4LeQ4Lax4LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiLgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LanIOC2tOC2uOC2q+C2muC3iiDgtrHgt5zgt4AgV2ktRmkg4Lai4LeP4La94La64LeaIOC2h+C2reC3kiDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4LaL4La04LeP4LaC4Lac4LeA4La94LanIOC2uuC3kOC3gOC3liDgtrTgt5Dgtprgt5Dgtqfgt4rgtqfgt5Qg4La24LeE4LeUIOC3gOC3kuC2muC3j+C3gSDgtr3gt5LgtrTgt5LgtrEg4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4gbm9uLW11bHRpY2FzdCDgtobgtprgt4/gtrvgtrrgtqcg4LeA4Lap4LePIOC3gOC3kOC2qeC3kiDgtrbgtr3gtrrgtprgt4og4La44LeZ4LeE4LeS4Lav4LeTIOC2t+C3j+C3gOC3kuC2reC3jyDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+IuC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgtqcg4La04La44Lar4Laa4LeKIOC2seC3nOC3gCBXaS1GaSDgtqLgt4/gtr3gtrrgt5og4LaH4Lat4LeSIOC3g+C3kuC2uuC2veC3lOC2uCDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4La64LeQ4LeA4LeWIOC2tOC3kOC2muC3kOC2p+C3iuC2p+C3lCDgtrbgt4Tgt5Tgt4Dgt4/gt4Tgtpog4La94LeS4La04LeS4LaxIOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtr3gt5Dgtrbgt5ouIOC2tuC3hOC3lOC3gOC3j+C3hOC2miDgtrHgt5Dgtq3gt5Ig4LaG4Laa4LeP4La74La64LanIOC3gOC2qeC3jyDgt4Dgt5Dgtqngt5Ig4La24La94La64Laa4LeKIOC2uOC3meC3hOC3kuC2r+C3kyDgtrfgt4/gt4Dgt5Lgtq3gt48g4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjkyMTE3NzQ3MTc0ODg4MjEzNyI+IuC3g+C3iuC2ruC3j+C2seC3k+C2uiDgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4Lan4LeQ4La24LeK4La94Lan4LeK4La64Laa4LeKIOC3g+C3kOC2muC3g+C3k+C2uOC2pyDgt4Pgt4Qg4LeA4LeS4Lax4LeK4oCN4La64LeP4LeDIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4Qg4Lav4LeU4La74LeD4LeK4LauIOC2i+C2tOC3j+C2guC2nCDgt4Pgtrjgtpwg4La64LeU4Lac4LeFIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MzE2ODIxNTkzMzE1NDIxMzciPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4La04LeZ4Lav4LeZ4LeD4LeSIOC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4LeS4La74LeT4La44LanLCDgt4Pgt4Qg4Lav4LeU4La74LeD4LeK4LauIOC2i+C2tOC3j+C2guC2nCDgtpzgt4Dgt5rgt4Lgtqvgtrrgtqcg4LeD4LeEIOC2uuC3lOC2nOC2vSDgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+IldpTUFYIOC3gOC3meC2reC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lax4LeK4LaxIOC3hOC3nSDgt4Dgt5Lgt4PgtrHgt4rgtrDgt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiJXaU1BWCDgt4Pgtrbgtr0g4La24LeAIOC3g+C3hCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq0g4LaV4Lax4LeR4La4IFdpTUFYIOC2ouC3j+C2veC2uuC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4Lax4LeS4LeB4LeK4Lag4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpbWF4U3RhdGUiIG1zZ2lkPSIyNDA1MDQyMjY3MTMxNDk2NTc5Ij4iV2lNQVgg4Lat4Lat4LeK4LeA4La6IOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMTU2NDU2NTA0MDg0MjAxODA1Ij4i4Lan4LeQ4La24LeK4La94Lan4La6IFdpTUFYIOC2ouC3j+C2vSDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4Qg4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk3MDI1MDQzMDA0OTIzNzk4Ij4iV2lNQVgg4Lai4LeP4La94La64Lax4LeK4LanIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgt4Dgt5Lgt4PgtrHgt4rgtrDgt5Ig4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoIiBtc2dpZD0iNjEyNzc2OTMzNjMzOTI3NjgyOCI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtovgtrTgt4/gtoLgtpwg4LeD4La44LafIOC2uuC3lOC2nOC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM0ODA3MjIxODE4NTI0Mzg2MjgiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3g+C2uiDgtrbgt5Dgtr3gt5LgtrjgtqcsIOC3g+C3kOC2muC3g+C3k+C2uOC2pyDgt4Pgt4Qg4La64LeU4Lac4La9IOC2muC3hSDgtovgtrTgt4/gtoLgtpwg4LeD4La44LafIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2seC3iiDgtrTgt5Lgt4Xgt5Lgtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzIwNzEwNjMyNDQ1MjMxMjczOSI+IuC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeA4LeS4Lax4LeK4oCN4La64LeP4LeD4La6IOC2r+C3kOC2muC3k+C2uOC2pywg4La64LeU4Lac4La9IOC2i+C2tOC3j+C2guC2nCDgt4Pgtrjgtp8g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4Lax4LeKIOC3g+C3kOC2muC3g+C3k+C2uOC2pyDgt4Pgt4Qg4La34LeP4La74Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbmZjIiBtc2dpZD0iNDQyMzM1MTI3NDc1Nzg3Njk1MyI+IuC2huC3g+C2seC3iuC2sSDgtprgt4rgt4Lgt5rgtq3gt4rigI3gtrsg4LeD4Lax4LeK4Lax4LeS4LeA4Lea4Lav4Lax4La6IOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19uZmMiIG1zZ2lkPSI3MTIwNjExODE5NDAxNzg5OTA3Ij4i4LaG4LeD4Lax4LeK4LaxIOC2muC3iuC3guC3muC2reC3iuKAjeC2uyDgt4PgtrHgt4rgtrHgt5Lgt4Dgt5rgtq/gtrEgKE5GQykg4Lan4LeQ4Lac4LeKLCDgtrTgtq3gt4osIOC3g+C3hCDgtprgt5Lgtrrgt4DgtrHgt4rgtrHgtrHgt4og4LeD4La44LafIOC3g+C2seC3iuC2seC3kuC3gOC3muC2r+C2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSIzNTk4NDk2MzAxNDg2NDM5MjU4Ij4i4LaU4La24Lac4LeaIOC2reC3kuC2u+C2uuC3miDgtoXgtpzgt5Tgtr0g4LaF4La24La9IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjYwMzQyMDMwNjUwNzcxMjI5OTIiPiLgtrrgtq3gt5Tgtrvgt5Qg4LaF4Lac4LeU4La9IOC3g+C3hCDgtpXgtrHgt5Hgtrgg4LeD4La44LeK4La24Lax4LeK4Law4LeS4LatIOC2uOC3lOC2u+C2tOC2ryDgtobgtrvgtprgt4rgt4Lgt4/gt4Dgtprgt4og4LaF4La24La9IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4LeE4LeSIOC2i+C2r+C3j+C3hOC2u+C2q+C2uuC2muC3iiDgt4DgtrHgt4rgtrHgt5og4La04LeQ4La44LeS4Lar4LeZ4LaxIOC2h+C2uOC2reC3lOC2uOC2muC3iiDgtr3gt5Dgtrbgt5ngtq/gt4rgtq/gt5MsIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrog4LeA4LaxIOC2heC2reC2uyDgtofgtrjgtq3gt5Tgtrgg4LaF4LeA4LeD4LeP4LaxIOC3gOC2sSDgt4Dgt5Lgtqcg4La64Lat4LeU4La74LeUIOC2heC2nOC3lOC2vSDgtrHgt5Dgt4Dgtq0g4LeD4Laa4LeK4oCN4La74LeS4La6IOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSI2MjAxODEwMDA4MjMwNTAzMDUyIj4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtprgt5Lgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iMjcwNjc0NTY3NDU2OTY3ODY0NCI+IuC2nOC3kuC2q+C3lOC2uCDgt4PgtrPgt4Tgt48g4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2i+C2r+C3j+C3hOC2u+C2q+C2uuC2muC3iiDgtr3gt5ngt4MsIOC2nOC3kuC2q+C3lOC2uOC2muC3iiDgt4Pgtrjgtp8g4La04LeU4Lav4LeK4Lac4La9IOC2uuC3meC2r+C3lOC2uCDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Lav4LeQ4La64LeSIOC2uOC3meC2uuC2pyDgt4TgtrPgt5TgtrHgt48g4Lac4LatIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU3luY1NldHRpbmdzIiBtc2dpZD0iNTQwODY5NDg3NTc5Mzk0NTMxNCI+IuC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtprgt5Lgtrvgt5Pgtrgg4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSDgt4Pgt4Qg4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU3luY1NldHRpbmdzIiBtc2dpZD0iODk1NjI2MjU5MTMwNjM2OTg2OCI+IuC2nOC3kuC2q+C3lOC2uCDgt4PgtrPgt4Tgt48g4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtovgtq/gt4/gt4Tgtrvgtqvgtrrgtprgt4og4La94LeZ4LeDLCDgtpzgt5Lgtqvgt5Tgtrgg4LeD4La44LafIOC2tOC3lOC2r+C3iuC2nOC2vSDgtrrgt5ngtq/gt5Tgtrgg4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uCDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La44LanIOC2t+C3j+C3gOC3kuC2rSDgtprgtr0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjczOTY1Nzc0NTEzNjAyMDI0NDgiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4LeS4La74LeT4La44LeaIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2sSDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1N0YXRzIiBtc2dpZD0iMTUxMDE0Mzc2MTc1NzYwNjE1NiI+IuC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtprgt5Lgtrvgt5Pgtrjgt5og4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC2ieC2reC3kuC3hOC3j+C3g+C2uiDgt4Pgt4Qg4Laa4LeZ4Lat4La74La44LeKIOC2r+C2reC3iuC2rSDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeA4LeTIOC2h+C2reC3kuC2r+C3kOC2uuC3kiDgtofgtq3gt5Tgtr3gtq3gt4og4Lac4LeS4Lar4LeU4La4IOC3g+C2s+C3hOC3jyDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4LeS4La74LeT4La44LeaIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2sSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNDc1NjYwOTYzNzA1MzM1MzMxOCI+IuC2r+C3j+C2uuC2miDgt4Dgt5Yg4LeD4LaC4Lac4LeK4oCN4La74LeEIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI1NTU3MDU4OTA3OTA2MTQ0NTA1Ij4i4LeA4La74LeK4Lat4La44LeP4LaxIOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgt4PgtoLgtpzgt4rigI3gtrvgt4Qg4Lac4LeQ4LaxIOC3gOC3kuC3g+C3iuC2reC2uyDgtr3gt5Dgtrbgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjkwMTUyNDYzMjU0MDgyMDkyOTYiPiLgtq/gt4/gtrrgtpog4LeA4LeWIOC3g+C2guC2nOC3iuKAjeC2u+C3hCDgtr3gt5Lgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjY5Mjg5MzAxODg4MjYwODk0MTMiPiLgtpTgtrbgtpzgt5og4LeA4La74LeK4Lat4La44LeP4LaxIOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgt4PgtoLgtpzgt4rigI3gtrvgt4Qg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgt4PgtoLgtpzgt4rigI3gtrvgt4Qg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC3kuC2seC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La9IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNDEwNzEwMTUyNTc0NjAzNTcxOCI+IuC2lOC2tiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LeB4La24LeK4Lav4Laa4Led4LeC4La64LanIOC2h+C2reC3lOC3heC2reC3iuC2muC3nOC2pyDgtofgtq3gt5Ig4Laa4Lec4Lax4LeK4Lav4Lea4LeD4LeSIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNjU5NjE0NjAwMzM4OTA0MjQzIj4i4La04La74LeS4LeB4LeT4La94LaaIOC3geC2tuC3iuC2ryDgtprgt53gt4Lgtrrgt5og4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtpzgtrbgtqngt48g4Laa4La7IOC2reC3kuC2tuC3kuC2uiDgt4Tgt5Dgtprgt5Ig4LeA4Lag4LaxLCDgtrHgtrjgt4osIOC3gOC3j+C2muC3iuKAjeC2uuC2guC3gSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4i4La04La74LeS4LeB4LeT4La94Laa4La64LeS4Lax4LeKIOC2heC2u+C3iuC2riDgtq/gt5Dgtprgt4rgt4Dgt5Yg4LeB4La24LeK4LavIOC2muC3neC3guC2uuC2pyDgt4DgtqDgtrEg4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LeB4La24LeK4Lav4Laa4Led4LeC4La6IOC2reC3lOC3heC2pyDgtoXgtr3gt5Tgtq3gt4og4LeA4Lag4LaxIOC2veC3kuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+IuC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtobgtqDgtrrgtrHgtrog4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+IuC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtobgtqDgtrrgtrHgtrog4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjQyNDczMjkyMzQ4MTMyMDcyIj4i4LaF4Lax4LeP4Lac4LatIOC2i+C2tOC3j+C2guC2nOC3gOC2vSDgtr3gtrbgt4/gtpzgtq0g4LeE4LeQ4Laa4LeSIFVTQiDgtobgtqDgtrrgtrHgtrog4LeD4Laz4LeE4LePIOC2heC3gOC3g+C2u+C2uuC2muC3iiDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1OTE0NDAyNjg0Njg1ODQ4ODI4Ij4i4LaF4Lax4LeP4Lac4LatIOC2i+C2tOC3j+C2guC2nOC3gOC2vSDgtrTgt5Dgt4Dgtq3gt5ngtrEgU0Qg4Laa4LeP4Lap4LeKIOC2tOC2rSDgt4PgtrPgt4Tgt48g4LaF4LeA4LeD4La74La64Laa4LeKIOC2tOC3kuC2u+C3kuC2muC3iuC3g+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijg0ODU5NzkwNjIyNTQ2NjY3NDgiPiLgtpTgtrbgtpzgt5ogVVNCIOC2huC2oOC2uuC2seC2uuC3miDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCDgt4Tgt50g4La44LeQ4Laa4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiLgtpTgtrbgtpzgt5ogU0Qg4La04Lat4LeaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4IOC3hOC3nSDgtrjgt5Dgtprgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTc1NDA2Mjk5NDQ1NzEwODg4Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgt4Dgt5ngtq0g4La94LeS4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+IlNEIOC2tOC2rSDgt4Dgt5ngtq0g4La94LeS4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODU5ODM5MTk5NzA2ODc5MDE1Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2uOC3j+C2sOC3iuKAjeC2uiDgtobgtqDgtrrgtrHgtrog4LaF4Lax4LeK4Lat4La74LeK4Lac4LatIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEvIOC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODE4OTE2MDU5NzY5ODUyOTE4NSI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtrjgt4/gtrDgt4rigI3gtrog4LaG4Lag4La64Lax4La64LeaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3NzgzMTg1OTg0NDg4NDk4MjkiPiLgtr3gt5rgtpvgtrEg4LaG4Lag4La64Lax4La6IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODcwNDMyMzE3NjkxNDEyMTQ4NCI+IuC2veC3muC2m+C2sSDgtobgtqDgtrrgtrHgtrog4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjgxNTA2MTM4MjM5MDA0NjA1NzYiPiLgt4Pgt5Lgtrrgtr3gt5Tgtrgg4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeK4Lac4LeaIOC2tuC3j+C3hOC3kuC2uyDgtobgtqDgtrrgtrEg4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjMyMTUyMDgzNTc0MTU4OTEzMjAiPiLgt4Pgt5Lgtrrgtr3gt5Qg4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC3g+C2s+C3hOC3jyDgtrbgt4/gt4Tgt5Lgtrsg4LaG4Lag4La64Lax4La6IOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTY1NjQ4NzI2NDgxOTY2OTgyNCI+IuC3hOC3kOC2ueC3kuC2veC3kiDgtpzgt5zgtrHgt5Qg4La04Lav4LeK4Law4Lat4LeS4La64LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTU3ODk2NzY0MjI2NTU1MDk1NSI+IuC3hOC3kOC2ueC3kuC2veC3kiDgtpzgt5zgtrHgt5Qg4La04Lav4LeK4Law4Lat4LeSIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgt4Pgt4Qg4La94LeS4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiLgtoXgtrHgt4rgtq3gtrvgt4rgtqLgt4/gtr0g4LaH4La44Lat4LeU4La44LeKIOC2nOC2seC3iuC2sS/gtr3gtrbgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+IuC2heC2seC3iuC2reC2u+C3iuC2ouC3j+C2vSDgtofgtrjgtq3gt5Tgtrjgt4og4Lac4LeQ4Lax4LeT4La44LanL+C2veC3kOC2tuC3k+C2uOC2pyBTSVAg4LeD4Lea4LeA4LeP4LeAIOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWROZXR3b3JrVXNhZ2VIaXN0b3J5IiBtc2dpZD0iNzg2MjU5MzI4MzYxMTQ5MzIzMiI+IuC2ieC2reC3kuC3hOC3j+C3g+C2nOC2rSDgtqLgt4/gtr0g4La34LeP4LeA4LeS4Lat4La6IOC2muC3kuC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWROZXR3b3JrVXNhZ2VIaXN0b3J5IiBtc2dpZD0iNzY4OTA2MDc0OTgxOTEyNjQ3MiI+IuC3gOC3kuC3geC3muC3guC3kuC2rSDgtqLgt4/gtr0g4LeD4LeEIOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4LaJ4Lat4LeS4LeE4LeP4LeD4Lac4LatIOC2ouC3j+C2vSDgtrfgt4/gt4Dgt5Lgtq3gtrog4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9IjI1NjIwNTM1OTIzMzk4NTk5OTAiPiLgtqLgt4/gtr0g4La04LeK4oCN4La74Lat4LeS4La04Lat4LeK4Lat4LeS4La6IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iNzUzNzU4Njc3MTU1OTM3MDY2OCI+IuC2ouC3j+C2vSDgtprgt5zgtrHgt4rgtq/gt5rgt4Pgt5Ig4LeD4LeEIOC3g+C2s+C3hOC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeB4Lea4LeC4LeT4LatIOC2u+C3k+C2reC3kiDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1MDg4MjE3MzA5MDg4NzI5NjUwIj4i4Lai4LeP4La9IOC2t+C3j+C3gOC3kuC2rSDgtpzgt5Lgtqvgt5Tgtrjgt4og4Laa4LeS4La74LeT4La4IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiLgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Lai4LeP4La9IOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgt4DgtrEg4La24La94La04LeR4La4IOC2muC3meC3g+C3muC2ryDgtrrgtrHgt4rgtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iMzY1ODUyNzIxNDkxNDk1OTc0OSI+IuC2muC3meC3gOC3meC2seC3kiDgtr3gtprgt5Tgtqvgt5Qg4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iNzY1NTU2ODQzMzY5NjM1NjU3OCI+IuC2uOC3j+C2u+C3iuC2nOC2nOC2rSDgt4Dgt5Pgtrgg4LeD4Laz4LeE4LePIOC2muC3meC3gOC3meC2seC3kuC2uuC3miDgtr3gtprgt5Tgtqvgt5Qg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9Ijc2NzM0MTY0ODc4NzM0MzIyNjgiPiLgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9IjQ1ODQ1Nzc0MjY4MzQzMTM4NyI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2muC3hSDgtrTgtr0g4Laa4LeS4La74LeT4La44LeK4LavIOC2h+C2reC3lOC3heC2reC3iuC3gCDgtq/gt5DgtrHgt4rgt4Dgt5Pgtrjgt4og4La94La24LePIOC2nOC3kOC2seC3k+C2uOC2pywg4La04La74LeT4Laa4LeK4LeC4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4Qg4LeE4LeS4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI3MDU3NzY0NzQyMjExNjU2NjU0Ij4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La4IOC2h+C3hOC3lOC2uOC3iuC2muC2seC3iiDgtq/gt5Pgtrjgt4og4LeD4Lea4LeA4LeP4LeA4Laa4LeKIOC3gOC3meC2rSDgtrbgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iOTg1Njk3OTE4NTc2OTAyOTg2Ij4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2heC3g+C2seC3iuC2seC3j+C2nOC3miDgt4Pgt5rgt4Dgt4/gt4Dgt5og4LaJ4LeE4LeFIOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Tgtrjgt5Tgt4Tgt5Tgtqvgtq3gtqcg4La24LeQ4Laz4LeT4La44LanIOC2r+C2u+C2seC3iuC2seC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgt4Pgt5rgtq3gt4og4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjM2OTk2MDA4MzM5NzUxMTc0NzgiPiLgt4Dgt4/gt4Tgtprgtrog4LeD4LeQ4La04La64LeUIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3g+C2uiDgtrrgt5ngtq/gt5Tgtrgg4LaJ4La94LeK4La94LePIOC3g+C3kuC2p+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjQxNTk1NDkxNTI1MjkxMTE5MjAiPiLgt4Dgt4/gt4Tgtprgtrrgt48g4La94La24LeP4Lav4LeU4Lax4LeKIOC3g+C3kOC2muC3g+C3lOC2uOC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LaL4Lat4LeK4La04LeP4Lav4Lax4La64LanIOC2sOC3j+C2u+C2muC2uuC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtDb25kaXRpb25zIiBtc2dpZD0iODIwNjA3NzQ0NzgzODkwOTUxNiI+IuC2ouC3j+C2vSDgtq3gtq3gt4rgt4Ag4La44LatIOC2seC3kuC2u+C3k+C2muC3iuC3guC2qyDgt4Dgt5ngtq0g4LaH4LeE4LeU4La44LeK4Laa4Lax4LeKIOC2r+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtDb25kaXRpb25zIiBtc2dpZD0iNjg5OTEwMjA3NTgyNTI3MjIxMSI+IuC2uuC3meC2r+C3lOC2uOC2muC2pyDgtqLgt4/gtr0g4Lat4Lat4LeK4LeAIOC2uOC2rSDgtrHgt5Lgtrvgt5Pgtprgt4rgt4Lgtqsg4LeA4LeZ4LatIOC2h+C3hOC3lOC2uOC3iuC2muC2seC3iiDgtq/gt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3mi4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4Lav4LePIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ob3R3b3JkUmVjb2duaXRpb24iIG1zZ2lkPSIzMjI1MDgwNDA4NzQ2MzYxMzEzIj4i4LaF4Lar4LeA4Lav4LaxIOC3hOC2s+C3lOC2seC3j+C2nOC3kOC2seC3k+C2uCDgtongtr3gt4rgtr3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ob3R3b3JkUmVjb2duaXRpb24iIG1zZ2lkPSIzNzE2NzQxMjYwMTk1MzY0MjUyIj4i4LaF4Lar4LeA4Lav4LaxIOC3hOC2s+C3lOC2seC3j+C2nOC3kOC2seC3k+C2uCDgt4PgtrPgt4Tgt48g4LaJ4La94LeK4La94LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiLgtrjgt5TgtrvgtrTgtq8g4Lax4LeT4Lat4LeSIOC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSIzMjUyMTE0MjAzOTE5NTEwMzk0Ij4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgt5og4La44LeU4La74La04Lav4La64LanIOC2heC2seC3lOC2uOC2rSDgtoXgtprgt5Tgtrvgt5Qg4LeD4LeEIOC2r+C3kuC2nCDgtrTgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93YXRjaExvZ2luIiBtc2dpZD0iOTE0MTMwNjQ2OTQyMTk5NTAzIj4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgt5og4LaL4Lat4LeK4LeD4LeP4LeE4La64Lax4LeKIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyMTU3MjkyOTQyMTUwNzAwNzIiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC3hSDgtrjgt5TgtrvgtrTgtq8g4Lac4Lar4LaxIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgtprgtrvgtrHgt4rgtrEg4LeD4LeEIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44Lax4LeK4LaxIOC3hOC3nSDgt4Dgt5Dgtrvgtq/gt5Ig4La44LeU4La74La04LavIOC2tuC3nOC3hOC3nSDgtpzgtqvgtrHgtprgt4og4Lan4La64LeS4La04LeKIOC2muC2uyDgtofgtq3gt5Ig4Lax4La44LeKIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgt4Pgt5Lgtrrgtr3gt5Qg4Lav4Lat4LeK4LatIOC2uOC2muC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzEyMzIzMDkxODQ2NzYxMDczIj4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5rgtq/gt5Mg4LeA4LeQ4La74Lav4LeS4La64LanIOC2p+C2uuC3kuC2tOC3iiDgtprgt4Ug4La44LeU4La74La04LavIOC2nOC2q+C2sSDgtrHgt5Lgtrvgt5Pgtprgt4rgt4Lgtqvgtrog4Laa4La74Lax4LeK4LaxIOC3g+C3hCDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC2seC3iuC2sSDgt4Tgt50g4LeA4LeQ4La74Lav4LeSIOC2uOC3lOC2u+C2tOC2ryDgtrbgt5zgt4Tgt50g4Lac4Lar4Lax4Laa4LeKIOC2p+C2uuC3kuC2tOC3iiDgtprgtrsg4LaH4Lat4LeSIOC2seC2uOC3iiDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LeD4LeS4La64La94LeUIOC2r+C2reC3iuC2rSDgtrjgtprgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSIyNjIwMDc3MTkxMjQyNjg4OTU1Ij4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgt5og4La44LeU4La74La04Lav4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtrjgt5TgtrvgtrTgtq/gtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZm9yY2VMb2NrIiBtc2dpZD0iMjI3NDA4NTM4NDcwNDI0ODQzMSI+IuC2reC3kuC2u+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4LeQ4La44LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19mb3JjZUxvY2siIG1zZ2lkPSIxMTQxNzk3NTg4NDAzODI3MTM4Ij4i4Lat4LeS4La74La64LanIOC2heC2nOC3lOC3heC3lCDgt4Dgt5Dgtqfgt5Pgtrgg4LeD4LeS4Lav4LeU4LeA4Lax4LeK4Lax4LeaIOC2muC3meC3g+C3muC2ryDgt4Pgt4Qg4Laa4LeA4Lav4LeP4LavIOC2uuC2seC3iuC2sSDgtrTgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93aXBlRGF0YSIgbXNnaWQ9IjM5MTA1NDU0NDY3NTg2Mzk3MTMiPiLgt4Pgt5Lgtrrgtr3gt5Qg4Lav4Lat4LeK4LatIOC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGEiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMDYxODQwOTYwNjc3NTY4NzYiPiLgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC2r+C2reC3iuC2rSDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La44LeZ4Lax4LeKIOC2tOC3g+C3lOC3gCDgtoXgtrHgtq3gt5Tgtrvgt5Qg4LaH4Laf4LeA4LeS4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gOC2uCDgtqfgt5Dgtrbgt4rgtr3gtqfgt4og4Lav4Lat4LeK4LatIOC2uOC2muC3jyDgtq/gtrjgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUwOTY4OTU2MDQ1NzQxODgzOTEiPiLgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC2r+C2reC3iuC2rSDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La44LeZ4Lax4LeKIOC2tOC3g+C3lOC3gCDgtoXgtrHgtq3gt5Tgtrvgt5Qg4LaH4Laf4LeA4LeS4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gOC2uCDgtq/gt5Tgtrvgtprgtq7gtrEg4Lav4Lat4LeK4LatIOC2uOC2muC3jyDgtq/gtrjgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iMjc4NDgyODI5Mzc0Nzc5MTQ0NiI+IuC2i+C2tOC3j+C2guC2nCDgtpzgt53gtr3gt5Pgtrog4Lax4LeS4La64LeU4Lat4LeU4LeAIOC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+IuC2muC3nOC2seC3iuC2r+C3muC3g+C3kiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeA4LeS4LanIOC2tOC3nOC2r+C3lCDgtrHgt5Lgtrrgt5Tgtq3gt5Qg4LaR4Laa4Laa4LeKIOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrEg4La94LeZ4LeDIOC2i+C2tOC3j+C2guC2nOC2uiDgt4Pgtprgt4PgtrHgt4rgtrEuIOC2tOC3heC2uOC3lCDgtovgtrTgt4/gtoLgtpwg4La04La74LeS4La04LeP4La94Laa4La64LePIOC2tOC2uOC2q+C2muC3iiDgtrXgtr3gtq/gt4/gtrrgt5Ig4La04Lec4Lav4LeUIOC2seC3kuC2uuC3lOC2reC3lOC3gCDgt4Pgtprgt4Pgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iODg1Mjc5MTUxODQ3MjU0MDU2Ij4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgtq/gt5Dgtrjgt5Pgtrjgt5og4La44LeU4La74La04Lav4La6IOC2muC2veC3iiDgtongtprgt5Tgtq3gt4rgt4Dgt5Pgtrgg4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19leHBpcmVQYXNzd29yZCIgbXNnaWQ9IjE3Mjk3MjUyMjYzMTQ2OTE1OTEiPiLgtq3gt5Lgtrst4LaF4Lac4LeU4LeF4LeaIOC2uOC3lOC2u+C2tOC2r+C2uiDgt4Dgt5ngtrHgt4Pgt4rgt4Dgt5Pgtrgg4Laa4Lec4La04La44LarIOC2muC3j+C2vSDgtrTgtrvgt4/gt4Pgtrrgtprgt5LgtrHgt4og4LeD4LeS4Lav4LeU4LeA4LeS4La6IOC2uuC3lOC2reC3lOC2ryDgtrrgtrHgt4rgtrEg4La04LeP4La94Lax4La6IOC2muC3kuC2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9Ijg5MDEzMjYxOTk5MDkxMzI5MTUiPiLgtobgtqDgtrrgtrHgtrrgt5og4LeD4LaC4Laa4Lea4Lat4Lax4La6IOC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSIyNjM3NzMyMTE1MzI1MzE2OTkyIj4i4LaG4Lag4La64Lax4La6IOC2muC3hSDgtrrgt5ngtq/gt5Tgtrjgt4og4Lav4Lat4LeK4LatIOC3g+C2guC2muC3muC2reC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La64La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iNjM5NTMwMTAyMzE1MjI5NzgyNiI+IuC2muC3kOC2uOC2u+C3jyDgtoXgtrbgtr0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+IuC3g+C3kuC2uuC2veC3lCDgtovgtrTgt4/gtoLgtpwg4Laa4LeQ4La44La74LeP4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgt4Dgtr3gtprgt4rgt4DgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVLZXlndWFyZEZlYXR1cmVzIiBtc2dpZD0iMjY2MzI5MTA0NTQyNjM4ODAyIj4i4La64Lat4LeU4La74LeUIOC2huC2u+C2muC3iuC3guC3j+C3gOC3miDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwg4LaF4La24La9IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIzNDY3MDgyMjcyMTg2NTM0NjE0Ij4i4La64Lat4LeU4La74LeUIOC2huC2u+C2muC3iuC3guC3j+C3gCDgt4Tgt5Ig4LeD4La44LeE4La7IOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeA4LeF4Laa4LeK4LeA4La64LeSLiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwaG9uZVR5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iODkwMTA5ODMzNjY1ODcxMDM1OSI+IuC2seC3kuC3gOC3gyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2OTkyMzY1MDUyNzEzNjYxNSI+IuC2ouC2guC2nOC2uCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4OTc1NDQ2NTQyNDI4NzQ1NDMiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMTAzNjAxNDMzMzgyMTU4MTU1Ij4i4Laa4LeP4La74LeK4La64LeP4La9IOC3huC3kOC2muC3iuC3g+C3iiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MzUxNzcxNDQ5NDgzMjkzNzAiPiLgtrHgt5Lgt4Dgt4Pgt5og4LeG4LeQ4Laa4LeK4LeD4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjAzODc4Njc0NDc3MjA3Mzk0Ij4i4La04Lea4Lai4La74La6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+IuC3gOC3meC2seC2reC3iiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJlbWFpbEFkZHJlc3NUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjgwNzM5OTQzNTI5NTYxMjkxMjciPiLgtrjgt5Tgtr3gt4og4La04LeS4Lan4LeU4LeAIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzA4NDIzNzM1NjYwMjYyNTYwNCI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjExMTIwNDQ0MTA2NTkwMTEwMjMiPiLgt4Dgt5ngtrHgtq3gt4oiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMzc0OTEzOTUyODcwMTEwNjE4Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icG9zdGFsQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iNjg4MDI1NzYyNjc0MDA0NzI4NiI+IuC2seC3kuC3gOC3gyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU2MjkxNTM5NTYwNDUxMDkyNTEiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0OTY2NjA0MjY0NTAwMzQzNDY5Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDkzMjY4Mjg0NzU5NTI5OTM2OSI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImltQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iMTczODU4NTE5NDYwMTQ3NjY5NCI+IuC2seC3kuC3gOC3gyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNTk2NDQ1NjU2NDczODM3MDgiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3ODY4NTQ5NDAxMDUzNjE1Njc3Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE0NTExODk0NDYzOTg2OTgwOSI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yZ2FuaXphdGlvblR5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzU0NjMzNTYxMjE4OTExNTYxNSI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQzNzgwNzQxMjkwNDk1MjAzNzMiPiLgt4Dgt5ngtrHgtq3gt4oiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNDU1MDQ3NDY4NTgzOTY1MTA0Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1Qcm90b2NvbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI4NTk1MjYxMzYzNTE4NDU5NTY1Ij4iQUlNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzM5MDQ3MzYyODI3NTQ5MDcwMCI+IldpbmRvd3MgTGl2ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4ODI4NzcxMzQ5MzE0NTgyMTciPiJZYWhvbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjUwMzUzNzYzMTMyMDA1ODUyNDIiPiJTa3lwZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc1MzIzNjMxNzg0NTk0NDQ5NDMiPiJRUSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM3MTM0NDEwMzQyOTk2NjA3NDkiPiJHb29nbGUgVGFsayI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI1MDY4NTczMTI3MTg2MzA4MjMiPiJJQ1EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNjQ4Nzk3OTAzNzg1Mjc5MzUzIj4iSmFiYmVyIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDdXN0b20iIG1zZ2lkPSIxNjQ0NzM4MDU5MDUzMzU1ODIwIj4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlSG9tZSIgbXNnaWQ9IjI1NzA5MjM0NjMwMzM5ODU4ODciPiLgtrHgt5Lgt4Dgt4MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNb2JpbGUiIG1zZ2lkPSI2NTAxNDYzNTU3NzU0NzUxMDM3Ij4i4Lai4LaC4Lac4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29yayIgbXNnaWQ9Ijg4NjM5Mzk2NjcwNTk5MTE2MzMiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhXb3JrIiBtc2dpZD0iMzUxNzc5MjE2MDAwODg5MDkxMiI+IuC2muC3j+C2u+C3iuC2uuC3j+C2vSDgt4bgt5Dgtprgt4rgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhIb21lIiBtc2dpZD0iMjA2NzI2NTk3MjMyMjk3MTQ2NyI+IuC2seC3kuC3gOC3g+C3miDgt4bgt5Dgtprgt4rgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVQYWdlciIgbXNnaWQ9Ijc1ODIzNTk5NTUzOTQ5MjE3MzIiPiLgtrTgt5rgtqLgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVPdGhlciIgbXNnaWQ9IjE1NDQ0MjU4NDc4Njg3NjU5OTAiPiLgt4Dgt5ngtrHgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDYWxsYmFjayIgbXNnaWQ9IjI3MTIxNzUyMDMwNjU2NzgyMDYiPiLgtrrgt4Xgt5Ig4LaH4La44Lat4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FyIiBtc2dpZD0iODczODM2MDY4OTYxNjcxNjk4MiI+IuC2uOC3neC2p+C2u+C3iiDgtrvgtq7gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDb21wYW55TWFpbiIgbXNnaWQ9IjU0MDQzNDM1NjQ2MTQ3ODkxNiI+IuC2huC2uuC2reC2seC2uuC3miDgtrjgt5bgtr3gt5LgtprgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVJc2RuIiBtc2dpZD0iODAyMjQ1MzE5MzE3MTM3MDMzNyI+IklTRE4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNYWluIiBtc2dpZD0iNjc2NjEzNzAxMDYyODMyNjkxNiI+IuC2uOC3luC2veC3kuC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU90aGVyRmF4IiBtc2dpZD0iODU4NzY1NzE0NTA3MjQ0NjU2NSI+IuC3gOC3meC2seC2reC3iiDgt4bgt5Dgtprgt4rgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVSYWRpbyIgbXNnaWQ9IjQwOTM3MzgwNzk5MDg2Njc1MTMiPiLgtrvgt5rgtqngt5Lgtrrgt53gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVUZWxleCIgbXNnaWQ9IjMzNjc4Nzk5NTI0NzYyNTA1MTIiPiLgtqfgt5ngtr3gt5ngtprgt4rgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVUdHlUZGQiIG1zZ2lkPSI4NjA2NTE0Mzc4NTg1MDAwMDQ0Ij4iVFRZIFRERCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmtNb2JpbGUiIG1zZ2lkPSIxMzExNDI2OTg5MTg0MDY1NzA5Ij4i4Laa4LeP4La74LeK4La64LeP4La9IOC2ouC2guC2nOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmtQYWdlciIgbXNnaWQ9IjY0OTkzODczMTIzMTE1NzA1NiI+IuC2muC3j+C2u+C3iuC2uuC3j+C2vSDgtrTgt5rgtqLgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI1NTk2NzcyNjM2MTI4NTYyODg0Ij4i4LeD4LeE4LeP4La64LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW1zIiBtc2dpZD0iNzI1NDQ5MjI3NTUwMjc2ODk5MiI+Ik1NUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUN1c3RvbSIgbXNnaWQ9Ijc4Mzc1ODYxOTg0NTgwNzM0MDQiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVCaXJ0aGRheSIgbXNnaWQ9IjI4MTMzNzk4NDQyMTEzOTA3NDAiPiLgtovgtrTgtrHgt4rgtq/gt5LgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVBbm5pdmVyc2FyeSIgbXNnaWQ9IjM4NzY3Nzk3NDQ1MTgyODQwMDAiPiLgt4PgtoLgt4Dgtq3gt4rgt4PgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVPdGhlciIgbXNnaWQ9IjczODgxNzg5MzkwMTAxNDMwNzciPiLgt4Dgt5ngtrHgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVDdXN0b20iIG1zZ2lkPSI4NTI1OTYwMjU3ODA0MjEzODQ2Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlSG9tZSIgbXNnaWQ9IjQ0OTIyNzIzNjE0MDQzMzkxOSI+IuC2seC3kuC3gOC3gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4i4Laa4LeP4La74LeK4La64LeP4La94La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlT3RoZXIiIG1zZ2lkPSIyOTIzMDA4Njk1MjcyNjM5NTQ5Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlTW9iaWxlIiBtc2dpZD0iMTE5OTE5MDA1MzIxMTY2MjA1Ij4i4Lai4LaC4Lac4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlSG9tZSIgbXNnaWQ9IjgxNjU3NTY5NzcxODQ0ODMwOTciPiLgtrHgt5Lgt4Dgt4MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlV29yayIgbXNnaWQ9IjUyNjgxNzI3NzIzODc2OTQ0OTUiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4i4LeA4LeZ4Lax4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlQ3VzdG9tIiBtc2dpZD0iMjA3NDAyODc1NTUyNzgyNjA0NiI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUhvbWUiIG1zZ2lkPSI2MjQxMTgxMDMyOTU0MjYzODkyIj4i4La44LeU4La94LeKIOC2tOC3kuC2p+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZVdvcmsiIG1zZ2lkPSIxMzcxNDg5MjkwMjQyNDMzMDkwIj4i4Laa4LeP4La74LeK4La64LeP4La94La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlT3RoZXIiIG1zZ2lkPSI1Mzc3MDA3NDk1NzM1OTE1NDc4Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEN1c3RvbSIgbXNnaWQ9IjY5MTk0NTM4MzY2MTg3NDk5OTIiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQWltIiBtc2dpZD0iNzA1MDM2MDYxMjM2ODM4MzQxNyI+IkFJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xNc24iIG1zZ2lkPSIxNDQ1NTY1NDU0MjA3Njk0NDIiPiJXaW5kb3dzIExpdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sWWFob28iIG1zZ2lkPSI4MjcxNDM5NDA4NDY5MDIxMjczIj4iWWFob28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sU2t5cGUiIG1zZ2lkPSI5MDE5Mjk2NzQ0NjIyODMyOTUxIj4iU2t5cGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sUXEiIG1zZ2lkPSI4ODg3NDg0Mzc5NDk0MTExODg0Ij4iUVEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IkhhbmdvdXRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEljcSIgbXNnaWQ9IjE1NzQ4NzA0MzM2MDY1MTczMTUiPiJJQ1EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSmFiYmVyIiBtc2dpZD0iMjI3OTkxNzYzMDg3NTc3MTcyMiI+IkphYmJlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xOZXRNZWV0aW5nIiBtc2dpZD0iODI4NzYyNTY1NTk4NjgyNzk3MSI+Ik5ldE1lZXRpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlV29yayIgbXNnaWQ9IjI5MjY4ODcwNTA1MzYzODcyIj4i4Laa4LeP4La74LeK4La64LeP4La94La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZU90aGVyIiBtc2dpZD0iMzk1MTc4MTEzMTU3MDEyNDA4MiI+IuC3gOC3meC2seC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVDdXN0b20iIG1zZ2lkPSIyMjU1MjM0MTUzNzIwODgzMjIiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVDdXN0b20iIG1zZ2lkPSIzNTQyNDAzNjc5ODI3Mjk3MzAwIj4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQXNzaXN0YW50IiBtc2dpZD0iNjI3NDMzNDgyNTE5NTM3OTA3NiI+IuC3g+C3hOC3j+C2uuC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUJyb3RoZXIiIG1zZ2lkPSI4NzU3OTEzNTA2Nzg0MDY3NzEzIj4i4LeD4LeE4Led4Lav4La74La64LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ2hpbGQiIG1zZ2lkPSIxODkwNzQ2Mjc3Mjc2ODgxNjI2Ij4i4Lav4La74LeU4LeA4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRG9tZXN0aWNQYXJ0bmVyIiBtc2dpZD0iNjkwNDgwNzExMjEyMTEyMjEzMyI+IuC2r+C3muC3geC3k+C2uiDgt4Tgt4Dgt5Tgtr3gt4rgtprgtrvgt5Tgt4Dgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGYXRoZXIiIG1zZ2lkPSI1MjI4MDM0Njg3MDgyMDUwNzI1Ij4i4La04LeS4La64LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRnJpZW5kIiBtc2dpZD0iNzMxMzEwNjc2MjQ4MzM5MTI2MiI+IuC2uOC3kuC2reC3iuKAjeC2u+C2uuC3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZU1hbmFnZXIiIG1zZ2lkPSI2MzY1Njc3ODYxNjEwMTM3ODk1Ij4i4Laa4LeF4La44Lax4LeP4Laa4La74LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTW90aGVyIiBtc2dpZD0iNDU3ODU3MTM1Mjk2Mjc1ODMwNCI+IuC2uOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcmVudCIgbXNnaWQ9IjQ3NTU2MzU1Njc1NjI5MjUyMjYiPiLgtrjgt4Dgt4rgtrTgt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVQYXJ0bmVyIiBtc2dpZD0iNzI2NjQ5MDI4NTEyMDI2Mjc4MSI+IuC3hOC3gOC3lOC2veC3iuC2muC2u+C3lOC3gOC3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlZmVycmVkQnkiIG1zZ2lkPSIxMDE1NzMwNTk4NDQxMzU1MjQiPiLgtrrgt5zgtrjgt5TgtprgtrvgtrEg4La94Lav4LeK4Lav4LeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVsYXRpdmUiIG1zZ2lkPSIxNzk5ODE5OTMwMDg1NjEwMjcxIj4i4Lax4LeR4La64LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlU2lzdGVyIiBtc2dpZD0iMTczNTk4MzU1NDQ3OTA3NjQ4MSI+IuC3g+C3hOC3neC2r+C2u+C3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNwb3VzZSIgbXNnaWQ9IjM5NDEzNjkzOTQyODY5ODExNyI+IuC2t+C3j+C2u+C3iuC2uuC3j+C3gCDgt4Tgt50g4LeD4LeK4LeA4LeP4La44LeS4La04LeU4La74LeU4LeC4La64LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVDdXN0b20iIG1zZ2lkPSIyNDczNTgwNTkzMTExNTkwOTQ1Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IuC2seC3kuC3gOC3gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IuC3gOC3meC2seC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTiDgtprgt5rgtq3gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyDgt4Pgt4Qg4Lax4LeAIFBJTiDgtprgt5rgtq3gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4Lax4LeAIFBJTiDgtprgt5rgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLgtrjgt5TgtrvgtrTgtq/gtrog4Lan4La64LeS4La04LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtrjgt5TgtrvgtrTgtq/gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcgUElOIOC2keC2miDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4LeA4LeQ4La74Lav4LeSIFBJTiDgtprgt5rgtq3gtrrgtprgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IuC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrjgtqcsIOC2uOC3meC2seC3lOC3gCDgtpTgtrbgt48g4La04LeD4LeU4LeAIDAg4LavIOC2lOC2tuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbF9kaWFsb2dfbnVtYmVyX2Zvcl9kaXNwbGF5IiBtc2dpZD0iNjk2MTkyMTAzMTk1MDkwOTcwIj4i4LeE4Lav4LeS4LeD4LeSIOC2h+C2uOC2reC3lOC2uOC3iiDgtoXgtoLgtprgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg5NjM4MzkyNDI1NjU2NTMxOTIiPiLgt4Pgt5rgt4Dgt4/gt4Ag4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2NyZWVuX2xvY2tlZCIgbXNnaWQ9IjcyODg0NDMwNzQ4MDY4MzI5MDQiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2VuYWJsZWQiIG1zZ2lkPSI0NjE1NDA1MTYxNDEyNjA0OSI+IuC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4La44LeZ4Lax4LeU4LeAIOC2lOC2tuC2seC3iuC2sSDgt4Tgt50g4LeE4Lav4LeS4LeD4LeSIOC2h+C2uOC2reC3lOC2uCDgtr3gtrbgt4/gtpzgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iNjg2MjYwMDI4Nzk3MTU4MzY0Ij4i4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyDgtrjgt5ngtrHgt5Qg4LaU4La24Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI3NDc4NzAzMjU0OTY0ODEwMzAyIj4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtrvgtqfgt4/gt4Ag4LaF4Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9lbWVyZ2VuY3lfY2FsbCIgbXNnaWQ9IjUzNDc2MzM3ODQ0MDEyODUyMjUiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9yZXR1cm5fdG9fY2FsbCIgbXNnaWQ9IjUyNDQyNTk3ODU1MDAwNDAwMjEiPiLgtofgtrjgtq3gt5Tgtrgg4LeA4LeZ4LatIOC2seC3kOC3gOC2rSDgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fY29ycmVjdCIgbXNnaWQ9IjkwMzkwMDg2NTAzNjIyNjEyMzciPiLgtrHgt5Lgt4Dgt5Dgtrvgtq/gt5Lgtrrgt5IhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX3dyb25nIiBtc2dpZD0iNDMxNzk1NTAxNDk0ODEwODc5NCI+IuC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXNzd29yZF93cm9uZyIgbXNnaWQ9IjU3Mzc4MTUzOTMyNTMxNjUzMDEiPiLgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLgtrjgt5Tgt4Tgt5Tgtqsg4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2heC2n+C3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5og4LaL4La04La74LeS4La4IOC2tOC3iuKAjeC2u+C2uuC2seC3iuC2reC2uuC2seC3iiDgtpzgtqvgtrEg4LaJ4Laa4LeK4La44LeA4LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGx1Z2dlZF9pbiIgbXNnaWQ9IjgwNTc3NjI4MjgzNTU1NzIzMTUiPiLgtobgtrvgt53gtrTgtqvgtrog4LeA4LeZ4La44LeS4Lax4LeKLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jaGFyZ2VkIiBtc2dpZD0iMzIxNjM1NzQ1Njg0MDYwNjI0Ij4i4LaF4La74Led4La04LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9iYXR0ZXJ5X3Nob3J0IiBtc2dpZD0iNDQ3NzI2NDg0OTM4Njg1MDI2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2xvd19iYXR0ZXJ5IiBtc2dpZD0iMTQ4Mjg3Mzk4MTkxOTI0OTc0MCI+IuC2lOC2tuC2nOC3miDgtobgtrvgt53gtrTgtprgtrrgtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk5NDM5Mjc3ODE5MjE1Mzk5Ij4iU0lNIOC2tOC2rSDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MTY1OTE5NjA5NTc5MTQ3NCI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miBTSU0g4La04LatIOC2seC3nOC2uOC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4i4Lav4LeU4La74Laa4Lau4Lax4La6IOC2reC3lOC3hSBTSU0g4La04LatIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUzNzI3ODcxMzgwMjMyNzI2MTUiPiJTSU0g4La04Lat4Laa4LeKIOC2h+C2reC3lOC2veC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjM1MjY1NzMwOTkwMTkzMTk0NzIiPiJTSU0g4La04LatIOC2seC3nOC2uOC3kOC2rSDgt4Tgt50g4Laa4LeS4La64LeA4LeS4La6IOC2seC3nOC3hOC3kOC2mi4gU0lNIOC2tOC2reC2muC3iiDgtofgtq3gt5Tgtr3gtq3gt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5NjE0OTY2NTEzODkxNjE4NCI+IuC2t+C3j+C3gOC3kuC2reC3jyDgtprgt4Ug4Lax4Lec4LeE4LeQ4Laa4LeSIFNJTSDgtrTgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjkxMDkwNDY0MzQzMzE1MTM3MSI+IuC2lOC2tuC2nOC3miBTSU0g4La04LatIOC3g+C3iuC2ruC3kuC2u+C3gCDgtoXgtrbgtr0g4Laa4La7IOC2reC3kuC2tuC3mi5cbiDgt4Dgt5ngtrHgtq3gt4ogU0lNIOC2tOC2reC2muC3iiDgt4PgtrPgt4Tgt48g4LaU4La24Lac4LeaIOC3g+C3muC3gOC3j+C2r+C3j+C2uuC2muC2uuC3jyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lac4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDE1OTQ5MDUxNTI3NDY4ODYiPiLgtrTgt5ngtrsg4Lac4LeT4LatIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI2MDg5Mjk3NjUwNDgxMjkyMzYzIj4i4LaK4LeF4LafIOC2nOC3k+C2rSDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTkwODg3ODY3ODAxMjgwMDEiPiLgt4Dgt5Lgtrvgt4/gtrgg4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU4ODg0MjI5MzgzNTEwMTk0MjYiPiLgtrDgt4/gt4Dgtpog4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1NjIzMTgzNzg3NjY5ODc2MDEiPiLgtrHgt5Dgt4Dgtq3gt5Pgtrjgt5og4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxzX29ubHkiIG1zZ2lkPSI2NzMzOTc4MzA0Mzg2MzY1NDA3Ij4i4LeE4Lav4LeS4LeD4LeSIOC2h+C2uOC2reC3lOC2uOC3iiDgtrTgtrjgtqvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIxNDMzODkyMjQ5ODYwMjg1MDEiPiLgtqLgt4/gtr3gtrog4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4iU0lNIOC2tOC2rSBQVUsg4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI4MTI3OTE2MjU1MjQ1MTgxMDYzIj4i4La04La74LeS4LeB4LeT4La94LaaIOC2i+C2tOC2r+C3muC3geC2uiDgtrbgtr3gtrHgt4rgtrEg4LeE4LedIOC2tOC2u+C3kuC2t+C3neC2nOC3kuC2miDgt4Pgt5rgt4Dgt4/gt4Ag4LaF4La44Lat4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+IlNJTSDgtrTgtq0g4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4iU0lNIOC2tOC2rSDgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2NDgxNjIzODMwMzQ0MTA3MjIyIj4i4LaU4La2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LeaIOC2u+C2p+C3j+C3gCDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaH4LazIOC2h+C2rS4gXG5cbuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+IuC2lOC2tiDgtrjgt5TgtrvgtrTgtq/gtrog4LeA4LeP4La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeK4Laa4Lec4LanIOC2h+C2rS4gXG5cbuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IuC2lOC2tiBQSU4g4LaF4LaC4Laa4La6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC3nOC2pyDgtofgtq0uXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2h+C2reC3lOC3heC2rSDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI5MTkxNjExOTg0NjI1NDYwODIwIj4i4LaU4La2IOC3gOC3kOC2u+C2r+C3kuC2uuC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LaU4La24Lac4LeaIOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5og4La74Lan4LeP4LeAIOC2h+C2syDgtofgtq0uIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtovgtq3gt4rgt4Pgt4Qg4Laa4LeS4La74LeT4La44LeKIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2lOC2tuC2nOC3miBHb29nbGUg4La04LeU4La74Lax4La6IOC3gOC3k+C2uOC3iiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC2lOC2tuC2nOC3meC2seC3iiDgtoXgt4Pgtrrgt5IuXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNTkwMjI3NTU5NzYzNzYyNzUxIj4i4LaU4La2IOC3gOC3kOC2u+C2r+C3kuC2uuC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LaU4La24Lac4LeaIOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5og4La74Lan4LeP4LeAIOC2h+C2syDgtofgtq0uIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtovgtq3gt4rgt4Pgt4Qg4Laa4LeS4La74LeT4La44LeKIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2lOC2tuC2nOC3miBHb29nbGUg4La04LeU4La74Lax4La6IOC3gOC3k+C2uCDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC2lOC2tuC2nOC3meC2seC3iiDgtoXgt4PgtrHgt5Qg4LaH4LatLlxuXG4g4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjEyODEwNjM5OTc0NTc1NTYwNCI+IuC2lOC2tiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaF4LeA4LeD4LeK4Lau4LePIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La7IOC2h+C2rS4g4LaF4LeA4LeD4LeK4Lau4LePIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtprgt4Ag4LaL4Lat4LeK4LeD4LeEIOC2muC3kuC2u+C3k+C2uOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC2uOC3lOC2veC3iiDgtq3gtq3gt4rgt4Dgtrrgtqcg4Lax4LeQ4LeA4LatIOC2tOC2reC3iiDgt4DgtrEg4LaF4Lat4La7IOC3g+C3kuC2uuC2veC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjAzNTY1MTQyMTU2ODI2NTY1Ij4i4LaU4La2IOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC3gOC3j+C2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgtprgtq/gt5Mg4LeA4LeQ4La74Lav4LeTIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2seC2uuC2seC3iiDgtpzgt5ngtrEg4Lat4LeS4La24LeaLiDgtq3gt4Dgtq3gt4og4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2sSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Laa4La74LeK4La44LeP4Lax4LeK4Lat4LeB4LeP4La94LeP4LeA4LeaIOC2tOC3meC2u+C2seC3kuC2uOC3kuC2uuC2pyDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LaxIOC2heC2reC2uyDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4La04La74LeS4LeB4LeT4La94LaaIOC2r+C2reC3iuC2rSDgtrHgt5Dgtq3gt5Ig4LeA4LeTIOC2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyODA4NzM1MTY0OTM5MzQzNjUiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtpTgtrYg4LeA4LeQ4La74Lav4LeSIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2sSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC2nOC3meC2sSDgtofgtq0uIOC2r+C3kOC2seC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Laa4La74LeK4La44LeP4Lax4LeK4Lat4LeB4LeP4La94LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2ryDgt4Dgt5ngtq0g4La64LeF4LeSIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgtprgt5ngtrvgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiLgtpTgtrYg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LeA4LeP4La7IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgtprgtq/gt5Mg4LeA4LeQ4La74Lav4LeTIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2seC2uuC2seC3iiDgtpzgt5ngtrEg4Lat4LeS4La24LeaLiDgtq/gt5DgtrHgt4og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2reC3geC3j+C2veC3jyDgtrTgt5ngtrvgtrHgt5Lgtrjgt5Lgtrrgtqcg4La04LeS4LeE4LeS4Lan4LeU4LeA4Lax4LeUIOC2veC2tuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MjUxNDgwMzQzMzk0Mzg5NjY1Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiLgtrvgtqfgt4/gt4Ag4LaF4La44Lat4Laa4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+IuC2nOC3kuC2q+C3lOC2uOC3miDgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSIyNzUxMzY4NjA1Mjg3Mjg4ODA4Ij4i4La74Lan4LePIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4og4LeA4LeQ4Lap4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzkzMTgxNjI1NjEwMDcwNzc4NCI+IuC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcsIOC2lOC2tuC2nOC3miBHb29nbGUg4Lac4LeS4Lar4LeU4La4IOC3g+C2uOC2nCDgtrTgt5TgtrvgtrHgtrog4LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI4ODQ2ODgxNDI0MTA2NDg0NDQ3Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC2seC3j+C2uOC2uiAo4LaKLeC2reC3kOC2tOC3keC2vSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iNTk1ODAyODM4Mzk1NDczODUyOCI+IuC2uOC3lOC2u+C2tOC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4i4La04LeU4La74Lax4La6IOC3gOC3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSIxMzY0MDUxNDczMzQ3NDg1OTA4Ij4i4LeA4La94LaC4Lac4LeUIOC2seC3nOC3gOC2sSDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La64Laa4LeKIOC3hOC3nSDgtrjgt5TgtrvgtrTgtq/gtrrgtprgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iMTY5NjkyNDc2MzY5MDM3OTA3MyI+IuC2lOC2tuC2nOC3miDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La6IOC3hOC3nSDgtrjgt5TgtrvgtrTgtq/gtrog4LaF4La44Lat4Laa4LavP1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgt4Dgt5ngtq0g4La64Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iNzExNDYyNzM1MTI4NjkzMzg2NyI+IuC2tOC2u+C3kuC2muC3iuC3guC3jyDgtprgtrvgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+IuC2heC2n+C3lOC2vSDgtoXgtrvgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29uX2xhYmVsIiBtc2dpZD0iOTA2ODg3NzU3NjUxMzQyNTk3MCI+IuC3geC2tuC3iuC2r+C2uiDgt4Pgtprgt4rigI3gtrvgt5Pgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zb3VuZF9vZmZfbGFiZWwiIG1zZ2lkPSI5OTY4MjI4MjUxNTQzMTkwMjYiPiLgt4Hgt4rigI3gtrvgt4Dgt4rigI3gtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fc3RhcnQiIG1zZ2lkPSIzOTQxMDQ1NTAyOTMzMTQyODQ3Ij4i4La74Lan4LeP4LeAIOC2heC2u+C2ueC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NsZWFyZWQiIG1zZ2lkPSI1NTgzNDc5NzIxMDAxNjM5NTc5Ij4i4La74Lan4LeP4LeAIOC3hOC3kuC3g+C3iiDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jZWxsX2FkZGVkIiBtc2dpZD0iNjc1NjAzMTIwODM1OTI5MjQ4NyI+IuC2muC3nOC2p+C3lOC3gOC2muC3iiDgtpHgtprgtq3gt5Qg4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fZGV0ZWN0ZWQiIG1zZ2lkPSI0OTg4NzMwODk1NTU0MDU3MDU4Ij4i4La74Lan4LeP4LeAIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2q+C2uuC3kiI8L3N0cmluZz4KKyAgICA8IS0tIFN0cmluZy5mb3JtYXQgZmFpbGVkIGZvciB0cmFuc2xhdGlvbiAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkICg1Njc4NjI0NjI0NjgxNDAwMTkxKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuC3gOC3kuC2ouC2p+C2uiDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i4LeE4LeS4LeD4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4LaxIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2uiDgt4Dgt5Lgtq/gt4Tgt48g4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IuC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5LgtrEg4La04LeK4oCN4La74Lav4Lea4LeB4La6IOC3hOC3kOC2muC3kuC2veC3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4LeA4LeS4Lai4Lan4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lat4Led4La74Lax4LeK4Lax4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4i4Lat4Lat4LeK4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i4Laa4LeQ4La44La74LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+IuC2uOC3j+C2sOC3iuKAjeC2uiDgtrTgt4/gtr3gtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+IuC3gOC3kuC2ouC2p+C2uiDgtrHgt5Dgt4Dgtq0g4LaF4Lax4LeU4La04LeS4LeF4LeS4LeA4LeZ4LeF4LanIOC3g+C3kOC2muC3g+C3kuC2uCDgtofgtrvgtrngt5Tgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i4LeA4LeS4Lai4Lan4LeKIOC2seC3kOC3gOC2rSDgtoXgtrHgt5TgtrTgt5Lgt4Xgt5Lgt4Dgt5ngtr3gtqcg4LeD4LeQ4Laa4LeD4LeT4La4IOC2heC3gOC3g+C3j+C2seC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOC3gOC3kuC2ouC2p+C2uiDgtrjgt5Dgtprgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IuC2heC2nOC3lOC3heC3lCDgtrHgt5zgtq/gt5Dgtrjgt5Yg4La04LeK4oCN4La74Lav4Lea4LeB4La6IOC2tOC3lOC3heC3lOC2veC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i4LeD4La74LeK4La04LarIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLgtrvgtqfgt48g4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuC2uOC3lOC3hOC3lOC2qyDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaF4Laf4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUElOIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i4La44LeU4La74La04LavIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i4La74Lan4LePIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i4LeD4La74LeK4La04LarIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2NoYXJhY3RlciIgbXNnaWQ9IjczMzY0NzA1MzUzODUwMDk1MjMiPiLgtoXgtprgt4rgt4LgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF93b3JkIiBtc2dpZD0iNzA3NTU3MDMyODM3NDkxODY2MCI+IuC3gOC2oOC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmsiIG1zZ2lkPSI1ODE1NTA4ODgwNzgyNDg4MjY3Ij4i4LeD4La24LeQ4Laz4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluZSIgbXNnaWQ9IjU3NjQyNjcyMzUwMjYxMjA4ODgiPiLgtrvgt5rgtpvgt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX2FtcG0iIG1zZ2lkPSI0NTg0MzM4MDgzNTI5MzU1OTgyIj4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JVA8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9jYXBfYW1wbSIgbXNnaWQ9IjIwODM0NjU5OTI5NDA0NDQzNjYiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4i4Laa4La74LeK4La44LeP4Lax4LeK4LatIOC3geC3j+C2veC3jyDgtrTgtrvgt5Pgtprgt4rgt4Lgtqvgtrog4LaF4LeD4LeP4La74LeK4Lau4Laa4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiJGQUNUT1JZX1RFU1Qg4Laa4LeK4oCN4La74LeS4La64LeP4LeAIC9zeXN0ZW0vYXBwIOC3hOC3kiDgt4Pgt4rgtq7gt4/gtrTgt5Lgtq0g4La04LeQ4Laa4Lea4LaiIOC3g+C2s+C3hOC3jyDgtrTgtrjgtqvgtprgt4og4LeD4LeE4La6IOC2r+C2muC3iuC3gOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub19hY3Rpb24iIG1zZ2lkPSI4NzI5OTE4NzQ3OTk5OTg1NjEiPiJGQUNUT1JZX1RFU1Qg4Laa4LeK4oCN4La74LeS4La64LeP4LeAIOC2veC2tuC3j+C2r+C3meC2sSDgtrTgt5Dgtprgt5rgtqLgtrrgtprgt4og4LeD4Lec4La64LeP4Lac4LatIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfcmVib290IiBtc2dpZD0iNjMyMDE2ODIwMzA1MDc5MTY0MyI+IuC2tOC3lOC2seC2u+C3j+C2u+C2uOC3iuC2tyDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIxOTg3NDgzOTc3ODM0NjAzODcyIj4iXCI8eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPlwiIOC3hOC3kiDgtofgtq3gt5Ig4La04LeS4Lan4LeU4LeAIOC2muC3kuC2uuC2seC3iuC2seC3mjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjY5NjE5MDMyMTM3Mjk2Njc1NzMiPiLgtqLgt4/gt4Dgt4/gt4Pgt4rgtprgt4rigI3gtrvgt5LgtrTgt4rgtqfgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF90aXRsZSIgbXNnaWQ9IjI2MTkzNzY1NTU1MjUxMTY1OTMiPiLgt4PgtoLgtqDgtr3gtrHgtrog4Lat4LeE4LeA4LeU4La74LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3Bvc2l0aXZlX2J1dHRvbiIgbXNnaWQ9IjMxMTI3NTIwMTA2MDA0ODQxMzAiPiLgtrjgt5ngtrgg4La04LeS4Lan4LeU4LeA4LeZ4Lax4LeKIOC2ieC3gOC2reC3iiDgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF9uZWdhdGl2ZV9idXR0b24iIG1zZ2lkPSI1NjE0ODYxMjkzMDI2MDk5NzE1Ij4i4La44LeZ4La4IOC2tOC3kuC2p+C3lOC3gOC3meC3hOC3kiDgtongtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZCIgbXNnaWQ9IjM0Njg4MTYzNTcwOTUzNzg1OTAiPiI8eGxpZmY6ZyBpZD0iTUVTU0FHRSI+JXM8L3hsaWZmOmc+XG5cbuC2lOC2tuC2pyDgtrjgt5ngtrgg4La04LeS4Lan4LeU4LeA4LeZ4Lax4LeKIOC3g+C2guC2oOC2veC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La6IOC2tuC3gOC2pyDgtpTgtrbgtqcg4LeA4LeS4LeB4LeK4LeA4LeP4LeD4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbGFiZWwiIG1zZ2lkPSI2ODYwMjYxNzU4NjY1ODI1MDY5Ij4i4Lat4LeE4LeA4LeU4La74LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvdWJsZV90YXBfdG9hc3QiIG1zZ2lkPSI0NTk1MDQ2NTE1NDAwMjY4ODgxIj4i4LaL4La04Lav4LeZ4LeDOiDgt4Dgt5Lgt4Hgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgtprgt5Tgtqngt48g4Laa4LeS4La74LeT4La44LanIOC2r+C3meC3gOC2u+C2muC3iiDgtq3gtqfgt4rgtqfgt5Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3RoaXNfZm9ybSIgbXNnaWQ9IjQ2MTY3NTg4NDExNTc4MTY2NzYiPiLgt4Pgt4rgt4DgtrrgtoLgtprgt4rigI3gtrvgt5Lgtrog4La04LeS4La74LeA4LeU4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2V0dXBfYXV0b2ZpbGwiIG1zZ2lkPSI3MTAzNDk1MDcwMTgwNTkwODE0Ij4i4LeD4LeK4LeA4La64LaC4Laa4LeK4oCN4La74LeS4La6IOC2tOC3kuC2u+C3gOC3lOC2uCDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX25hbWVfc2VwYXJhdG9yIiBtc2dpZD0iNjM1MDE0NTE1NDc3OTcwNjc3MiI+IiAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfbmFtZV9mb3JtYXQiIG1zZ2lkPSIzMjY4MDQxMDU0ODk5MjE0OTQ1Ij4iJDEkMiQzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X3NlcGFyYXRvciIgbXNnaWQ9Ijc0ODMzMDc4OTMxNzAzMjQxMjkiPiIsICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9mb3JtYXQiIG1zZ2lkPSI0ODc0NDU5NDU1Nzg2ODI3MzQ0Ij4iJDEkMiQzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcHJvdmluY2UiIG1zZ2lkPSIyMjMxODA2NTUzODYzNDIyMzAwIj4i4La04LeF4LeP4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcG9zdGFsX2NvZGUiIG1zZ2lkPSI0Njk2NDMwNDA3Njg5Mzc3MTA4Ij4i4Lat4LeQ4La04LeQ4La94LeKIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3N0YXRlIiBtc2dpZD0iNjk4ODg5NDE5NTUyMDA0NDYxMyI+IuC2ouC2seC2tOC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ppcF9jb2RlIiBtc2dpZD0iODY5NzU0NDU5MjYyNzMyMjk0NiI+IlpJUCDgtprgt5rgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9jb3VudHkiIG1zZ2lkPSIyMzcwNzM3NzEwMjAzNjI4OTEiPiLgtrTgt4rigI3gtrvgt4/gtrHgt4rgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9pc2xhbmQiIG1zZ2lkPSI0MDIwMTAwODc1OTg0NjY3MDI1Ij4i4Lav4LeW4La04LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZGlzdHJpY3QiIG1zZ2lkPSI4NDAwNzM1MDczMzkyMjY3NjcyIj4i4Lav4LeS4LeD4LeK4Lat4LeK4oCN4La74LeS4Laa4LeK4Laa4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZGVwYXJ0bWVudCIgbXNnaWQ9IjUzNDMyNzk0NjI1NjQ0NTMzMDkiPiLgtq/gt5ngtrTgt4/gtrvgt4rgtq3gtrjgt5rgtrHgt4rgtq3gt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcmVmZWN0dXJlIiBtc2dpZD0iMjAyODQ5OTQ4NTA2NTgwMDQxOSI+IuC2tOC3iuKAjeC2u+C3j+C2seC3iuC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3BhcmlzaCIgbXNnaWQ9IjgyMDIyMDYxMDU0Njg4MjAwNTciPiLgtprgt53gtrvgtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+IuC2tOC3iuKAjeC2u+C2r+C3muC3geC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2VtaXJhdGUiIG1zZ2lkPSIyODkzODgwOTc4ODM1Njk4ODE4Ij4i4LaR4La44LeS4La74Lea4Lan4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3NzUyNjU3NzU0MDUxMDY5ODMiPiLgtpTgtrbgtpzgt5og4LeA4LeZ4La24LeKIOC2tOC3kuC2p+C3lOC3g+C2seC3iiDgt4Pgt4Qg4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iODQ2MjM3ODIyNjYwMDQzOTY1OCI+IuC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2u+C2uiDgtrHgt5Dgtrvgtrngt5Yg4LeD4LeS4La64La94LeUIFVSTCDgt4Pgt4Qg4LeD4LeS4La64La94LeUIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtrTgt5Lgtqfgt5Tgt4PgtrHgt4og4LeA4La9IOC2ieC2reC3kuC3hOC3j+C3g+C2uiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C2p+C3hOC2sTog4LeA4LeZ4La24LeKIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq3gt48g4LeD4La44LacIOC2reC3meC3gOC3meC2seC3kiDgtrTgt4/gtrvgt4rgt4Hgt4Ag4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC3gOC2veC2pyDgt4Tgt50g4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2tuC2vSDgtrHgt5zgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzE0Nzg1MTY1MjczMzE0NDkwIj4i4LeA4LeZ4La24LeKIOC2tOC3kuC2p+C3lOC3g+C2seC3iiDgt4Pgt4Qg4LaJ4Lat4LeS4LeE4LeP4LeD4La64LanIOC2veC3kuC3gOC3kuC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4Lac4La24Lap4LePIOC2muC2uyDgtofgtq3gt5Ig4La24LeK4oCN4La74LeA4LeK4LeD4La74La64LeaIOC2ieC2reC3kuC3hOC3j+C3g+C2uiDgt4Tgt50g4La04LeS4Lan4LeU4LeD4Lax4LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtq/gtq3gt4rgtq0g4La44LeQ4Laa4LeT4La44LanIOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4g4LeD4Lan4LeE4LaxOiDgt4Dgt5ngtrbgt4og4Lac4LeA4Lea4LeC4LarIOC3hOC3kOC2muC3kuC2uuC3j+C3gCDgt4Pgt4Tgt5Lgtq0g4Lat4LeZ4LeA4LeZ4Lax4LeSIOC2tOC3j+C2u+C3iuC3geC3gCDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrsg4LeE4LedIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LeS4Lax4LeKIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrrgtqcg4La24La9IOC2seC3nOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4i4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtobgtqDgtrrgtrHgtrog4Laa4La74LaxIOC2veC2ryDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrsg4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC3hOC3nSDgtrTgt5Lgtqfgt5Tgt4PgtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtq/gtq3gt4rgtq0g4La44LeQ4Laa4LeT4La44LanIOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrrgt5IuIOC3g+C2p+C3hOC2sTog4LeA4LeZ4La24LeKIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq3gt4/gt4Dgtrog4LeD4La44LacIOC2reC3meC3gOC3meC2seC3kiDgtrTgt4/gtrvgt4rgt4Hgt4Ag4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC3hOC3nSDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2tuC2vSDgtpzgt5DgtrHgt4rgt4Dgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWxhcm0iIG1zZ2lkPSIxMzc5Mjk0NTU2MzYyMDkxODE0Ij4i4LeD4LeT4Lax4LeU4LeA4Laa4LeKIOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsYXJtIiBtc2dpZD0iMzE2MzkyMDM5MTU3NDczODQ4Ij4i4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC2u+C2sSDgtr3gtq8g4LeD4LeT4Lax4LeUIOC2lOC2u+C2veC3neC3g+C3lCDgtrrgt5ngtq/gt5Tgtrjgt5og4LeD4LeT4Lax4LeU4LeAIOC3g+C2muC3g+C3iiDgtprgtrvgtrHgt4rgtrHgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2h+C2reC3kOC2uOC3iiDgt4Pgt5PgtrHgt5Qg4LaU4La74La94Led4LeD4LeUIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrgg4LaF4LaC4Lac4La6IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2pyDgtrHgtoLgt4Dgt48g4Lax4Lec4Lat4LeS4La24LeT4La44LanIOC2ieC2qSDgtq3gt5Lgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hZGRWb2ljZW1haWwiIG1zZ2lkPSI1NTI1NjYwMDI2MDkwOTU5MDQ0Ij4i4LeE4LasIOC2reC3kOC2tOC3keC2vSDgtpHgtprgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWRkVm9pY2VtYWlsIiBtc2dpZD0iNjYwNDUwODY1MTQyODI1MjQzNyI+IuC2lOC2tuC2nOC3miDgt4Tgtqwg4Lat4LeQ4La04LeR4La94LeaIOC2keC2sSDgtr3gt5LgtrTgt5Ig4LeA4LeZ4LatIOC2keC2sSDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjU5NjIyMjQxNTg5NTUyNzM5MzIiPiLgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrvgtrrgt5og4La34LeWIOC2heC3gOC3g+C2uyDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+IuC2tuC3iuKAjeC2u+C3gOC3lOC3g+C2u+C2uuC3miDgtrfgt5Yg4LeD4LeK4Lau4LeP4Lax4LeT4La6IOC2heC3gOC3g+C2uyDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrfgt5Lgtrjgtq0g4LeA4LeZ4La24LeKIOC2heC2qeC3gOC3kiDgt4Dgtr3gtqcg4LeD4LeK4Lau4LeP4Lax4LeT4La6IOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3meC2u+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9IjU1NjgxMzkxMDA2NDU4MjkxMTciPiLgtrTgt5Dgtprgt5rgtqIg4LeD4Lat4LeK4oCN4La64LeP4La04Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9Ijg0Mzc1OTAxOTA5OTA4NDMzODEiPiLgt4Pgt4rgtq7gt4/gtrTgt5Lgtq0g4Laa4Lec4LanIOC2h+C2reC3kiDgtrTgt5Dgtprgt5rgtqLgtrrgtprgt4og4LeD4Lat4LeK4oCN4La64LeP4La04Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjQxODc3ODY3OTMzNjAzMjY2NTQiPiLgtrTgt5Dgtprgt5rgtqIg4LeD4Lat4LeK4oCN4La64LeP4La04Laa4La64Laa4LeKIOC3gOC3meC2rSDgtrbgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iMzE4MDc0MTc3MzIzMzg2MjEyNiI+IuC2tOC3kOC2muC3muC2oiDgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtpog4LaJ4La94LeK4La94LeT4La44LeKIOC3gOC2veC2pyDgtq/gtrvgtrHgt4rgtrHgt4/gtqcg4LaJ4LapIOC2veC2tuC3jyDgtq/gt5ouIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC3g+C3muC2reC3iiDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VyaWFsUG9ydCIgbXNnaWQ9IjU0NjA4MzMyNzY1NDYzMTA3NiI+IuC3geC3iuKAjeC2u+C3muC2q+C3kuC2nOC2rSDgtrTgt5zgtqcg4La04LeK4oCN4La74LeA4Lea4LeBIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlcmlhbFBvcnQiIG1zZ2lkPSIyOTkxNjM5OTg1MjI0NTk4MTkzIj4iU2VyaWFsTWFuYWdlciBBUEkg4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2heC2seC3lOC2muC3iuKAjeC2u+C2uCDgtq3gt5zgtqcg4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4La74Laz4LeA4Lax4La64LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjUwNzc3NzQyOTc5NDM0MDkyODUiPiLgtrbgt4/gt4Tgt5Lgtrsg4LaF4Lax4LeK4Lat4La74LeK4Lac4LatIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lOC3gOC2seC3iiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI0NTQ0MzQ2NDg2Njk3ODUzNjg1Ij4i4LaF4Lax4LeK4Lat4La74LeK4Lac4LatIOC3g+C2tOC2uuC2seC3iuC2seC2seC3iuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanIOC2r+C2u+C2seC3iuC2seC2seC3iuC2pyDgt4Lgt5ngtr3gt4og4LaR4Laa4LeaIOC3g+C3kuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC3g+C3muC2reC3iiDgtoXgtq/gt4/gt4Ug4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlTG9jayIgbXNnaWQ9IjM1Mjc1NTgzNjY2MTY2ODA4ODkiPiLgt4Pgt4rgt4DgtrrgtoLgtprgt4rigI3gtrvgt5Pgtrog4LaL4La04LeP4LaC4LacIOC2uuC3gOC2reC3iuC2muC3j+C2vSDgtprgt5Lgtrvgt5Pgtrjgt4og4La04LeD4LeU4La24LanIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUxvY2siIG1zZ2lkPSIxNjU1NjI1ODMyMTY2Nzc4NDkyIj4i4LaL4La04LeP4LaC4Lac4La6IOC2i+C2reC3iuC3geC3iuKAjeC2u+C3muC2q+C3kuC2muC2u+C2q+C2uuC2pyDgtoXgtrHgt4rgtq3gtrvgt4rgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4Lax4Lec4LeA4LaxIOC2uuC3heC3kiDgtofgtrvgtrngt5Pgtrjgtprgt4og4LeD4Laz4LeE4LePIOC3g+C3lOC2r+C3lOC3g+C3lCDgt4Dgt5ngtr3gt4/gt4Ag4Laa4LeU4La44Laa4LeK4LavIOC2uuC2seC3iuC2sSDgtpzgt5DgtrEg4La04Lav4LeK4Law4Lat4LeS4La64LanIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtr3gtrbgt4/gtq/gt5Pgtrjgtqcg4Lav4La74Lax4LeK4Lax4LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9tZXNzYWdlIiBtc2dpZD0iNzY3MzQ0Njg3MTM5MTk1NzkwIj4i4La24LeK4oCN4La74LeA4LeK4LeD4La74La64LanIOC2uOC3meC2uCDgtrjgt5TgtrvgtrTgtq/gtrog4La44Lat4LaaIOC2reC2tuC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LaU4La24LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25vdG5vdyIgbXNnaWQ9IjYzODk2NzUzMTY3MDY2OTk3NTgiPiLgtq/gt5DgtrHgt4og4Lax4Lec4LeA4LeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiLgtrjgtq3gtpog4Lat4La24LePIOC2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbmV2ZXIiIG1zZ2lkPSI4Mjc0MzMwMjk2Nzg1ODU1MTA1Ij4i4Laa4LeA4Lav4LeP4LeA4Lat4LeKIOC2seC3nOC3gOC3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9wZW5fcGVybWlzc2lvbl9kZW55IiBtc2dpZD0iNzM3NDAzNjcwODMxNjYyOTgwMCI+IuC2uOC3meC2uCDgtrTgt5Lgtqfgt5Tgt4Ag4LeA4LeS4LeA4LeY4LatIOC2muC3kuC2u+C3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeD4La7IOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0X2NvcGllZCIgbXNnaWQ9IjQ5ODU3Mjk1MjQ2NzAxMzEzODUiPiLgtrTgt5ngt4Ug4La04LeD4LeU4La74LeUIOC2tOC3lOC3gOC2u+C3lOC3gOC2pyDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4La74LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb3JlX2l0ZW1fbGFiZWwiIG1zZ2lkPSI0NjUwOTE4OTIzMDgzMzIwNDk1Ij4i4Lat4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcGVuZF9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI1NzIyMTQ0NjE2NzYwMTU2NDIiPiLgtrjgt5ngtrHgt5Tgt4ArIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiJzcGFjZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZW50ZXJfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNzQzMzYyNzg1MTExMzA5NjY4Ij4i4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMzY1ODE3ODAwNzIwMjc0ODE2NCI+IuC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaF9nbyIgbXNnaWQ9IjgyOTgwMTY2Njk4MjIxNDE3MTkiPiLgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3NlYXJjaCIgbXNnaWQ9IjY3NDk4MjY2MzkwOTg1MTIxMjAiPiLgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3F1ZXJ5IiBtc2dpZD0iNTkxMTc3ODU5MzEyNTM1NTEyNCI+IuC3g+C3meC3gOC3lOC2uOC3iiDgt4Dgt5Lgtrjgt4Pgt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX2NsZWFyIiBtc2dpZD0iMTMzMDI4MTk5MDk1MTgzMzAzMyI+IuC3gOC3kuC2uOC3g+C3lOC2uCDgt4Tgt5Lgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zdWJtaXQiIG1zZ2lkPSIyNjg4NDUwMTMzMjk3OTgzNTQyIj4i4LeA4LeS4La44LeD4LeU4La4IOC2uuC3nOC2uOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3ZvaWNlIiBtc2dpZD0iMjQ1MzIwMzY5NTY3NDk5NDQ0MCI+IuC3hOC2rCDgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iNzQ2MDY5NDA3MDMwOTczMDE0OSI+IuC3g+C3iuC2tOC2u+C3iuC3gSDgtprgt5Lgtrvgt5Pgtrjgt5ngtrHgt4og4Lac4LeA4Lea4LeC4Lar4La6IOC3g+C2tuC2vSDgtprgtrvgtrHgt4rgtrEg4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODY1NTg4NzUzOTA4OTkxMDU3NyI+IuC3g+C3iuC2tOC2u+C3iuC3geC2uiDgt4Dgt5ngtq3gt5LgtrHgt4og4Lac4LeA4Lea4LeC4Lar4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDgtqcg4LaF4LeA4LeB4LeK4oCN4La64La6LiDgt4Pgt4rgtrTgtrvgt4rgt4Hgtrog4LeA4LeZ4Lat4LeS4Lax4LeKIOC2nOC3gOC3muC3guC2q+C2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeA4LeS4LanLCDgtpTgtrbgtpzgt5og4LaH4Laf4LeS4La94LeS4LeA4La94LanIOC2tOC3hOC3hSDgt4Dgt5Lgt4Pgt4rgtq3gtrsg4LaH4LeD4LeS4La6IOC3hOC3nSDgtrbgt5Dgtr3gt5Lgtrog4LeE4LeQ4LaaIOC3hOC3nSDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LeD4La44LacIOC2heC2seC3iuC2reC2u+C3iiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4LeT4La44LanIOC2ieC2guC2nOC3kuC2reC3kiDgt4Pgt5Lgtq/gt5Qg4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNzA4MTk5NjcyODUyMzczMTk1Ij4i4LeD4LeK4La04La74LeK4LeB4La6IOC3gOC3meC2reC3kuC2seC3iiDgtpzgt4Dgt5rgt4Lgtqvgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtrrgt5IuIOC3g+C3iuC2tOC2u+C3iuC3geC2uiDgt4Dgt5ngtq3gt5LgtrHgt4og4Lac4LeA4Lea4LeC4Lar4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Dgt5LgtqcsIOC2lOC2tuC2nOC3miDgtofgtp/gt5Lgtr3gt5Lgt4Dgtr3gtqcg4La04LeE4LeFIOC3gOC3kuC3g+C3iuC2reC2uyDgtofgt4Pgt5Lgtrog4LeE4LedIOC2tuC3kOC2veC3kuC2uiDgt4Tgt5Dgtpog4LeE4LedIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgt4Pgtrjgtpwg4LaF4Lax4LeK4Lat4La74LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kyDgt4Dgt5Pgtrjgtqcg4LaJ4LaC4Lac4LeS4Lat4LeSIOC3g+C3kuC2r+C3lCDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iNzM5NjM4NDUwODk1Mzc3OTkyNSI+IuC2uOC3j+C3gyAxIOC2muC2pyDgtrTgt5ngtrsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IuC2uOC3j+C3gyAxIOC2muC2pyDgtrTgt5ngtrsiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9zZWNvbmRzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4Njk4NzAwNTY1NDc4OTYwMTEiPiLgtq3gtq3gt4rgtrTgtrsgMSDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzOTAzNzA2ODA0MzQ5NTU2Mzc5Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9taW51dGVzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMzMDY3ODc0MzMwODg4MTAxOTEiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgMSDgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMTc2OTQyMDA4OTE1NDU1MTE2Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9ob3Vyc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI5MTUwNzk3OTQ0NjEwODIxODQ5Ij4i4La04LeQ4La6IDEg4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ2NzI3MzIzOTU4NzU4NzU2OSI+IuC2tOC3kOC2uiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJsYXN0X251bV9kYXlzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMDY5OTkyODA4MTY0MzE4MjY4Ij4i4LaF4Lax4LeK4Lat4LeS4La4IOC2r+C3gOC3g+C3iiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9Imxhc3RfbW9udGgiIG1zZ2lkPSIzOTU5MzQ2NzM5OTc5MDU1NDMyIj4i4LaF4LeA4LeD4LeP4LaxIOC2uOC3j+C3g+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZGVyIiBtc2dpZD0iNTIxMTk3NTAyMjgxNTU1NDg0MCI+IuC2tOC2u+C2qyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX2RheXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODYxMzU4NTM0Mzk4MTE1ODIwIj4i4LaK4La64LeaIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDc5NTg2NDY2MTUzMzE0NjMzIj4i4Lav4LeS4LaxIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9zZWNvbmRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjcyOTc0NTU2MDk1NDkwNTEwMiI+IuC2reC2reC3iuC2tOC2uyAxIOC2muC3kuC2seC3iiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTI0MTkyNjExNjQ0Mzk3NDY4NyI+IuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgtq/gt5MiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCAxIOC2muC2r+C3kyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzMzMDcxMzkzNjM5OTQ0ODc0OSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJpbl9udW1faG91cnMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI3MTY0MzUzMzQyNDc3NzY5OTk5Ij4i4La04LeQ4La6IDEg4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3MjkwNjc3MzUzNzI3Mzg5Ij4i4La04LeQ4La6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9kYXlzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTQxMzA4ODc0MzAwOTgzOTUxOCI+IuC3hOC3meC2pyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTEwOTQ0OTM3NTEwMDk1MzI0NyI+IuC2r+C3kuC2sSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX3NlY29uZHNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTg0OTAzNjg0MDIwMDA2OTExOCI+IuC2reC2reC3iuC2tOC2uyAxIOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM2OTkxNjkzNjY2NTA5MzA0MTUiPiLgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9taW51dGVzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjYzNjE0OTAxNDcxMTM4NzE1NDUiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgMSDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NTExNjQ5Njg1OTcxNTA3MTAiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9ob3Vyc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0Nzk2MjEyMDM5NzI0NzIyMTE2Ij4i4La04LeQ4La6IDEg4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjg4OTk3MDc0NTc0ODUzODkwMSI+IuC2tOC3kOC2uiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2RheXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODQ2MzE2MTcxMTQ5MjY4MDMwOSI+IuC2iuC2uuC3miI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzQ1MzM0MjYzOTYxNjQ4MTE5MSI+IuC2r+C3kuC2sSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX3NlY29uZHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODQyMjI1MzcwNzk1MDY2Mjk5Ij4i4Lat4Lat4LeK4La04La7IDEg4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ5NTg4MDEwODgyNTgwNTEwOCI+IuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NjI3ODYxNDk5MjgyODQ4NzgiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgMSDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MjE2MTEzMjkyNzA2NTY4NzI2Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1faG91cnMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjc0NzA4MTE4MTI0MDQ1MjQ2Ij4i4La04LeQ4La6IDEg4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzcwNTM3Mzc2Njc5ODAxMzQwNiI+IuC2tOC3kOC2uiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIyMTc4NTc2MjU0Mzg1NzM5ODU1Ij4i4LeE4LeZ4LanIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyOTczMDYyOTY4MDM4MzU1OTkxIj4i4Lav4LeS4LaxIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfZGF0ZSIgbXNnaWQ9IjkwOTM5NDk3NTc3NTc0NDUxMTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JXM8L3hsaWZmOmc+IOC3gOC2sSDgtq/gt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfdGltZSIgbXNnaWQ9IjU1MDY4MzEyNDQyNjMwODM3OTMiPiI8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+IOC2pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl95ZWFyIiBtc2dpZD0iNTA0MDM5NTY0MDcxMTg2NzE3NyI+Ijx4bGlmZjpnIGlkPSJZRUFSIj4lczwveGxpZmY6Zz4g4Lat4LeU4LeFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5IiBtc2dpZD0iODE0NDE5NTc3NjA1ODExOTQyNCI+IuC2r+C3gOC3gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheXMiIG1zZ2lkPSI0Nzc0NTQ3NjYxMDIxMzQ0NjAyIj4i4Lav4LeS4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91ciIgbXNnaWQ9IjIxMjY3NzE5MTY0MjYxODk0ODEiPiLgtrTgt5DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VycyIgbXNnaWQ9Ijg5NDQyNDAwNTI2Njg1Mjk5MyI+IuC2tOC3kOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZSIgbXNnaWQ9IjkxNDg4Nzg2NTc3MDM3Njk4NjgiPiJtaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVzIiBtc2dpZD0iNTY0NjAwMTAwNTgyNzAzNDUwOSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlY29uZCIgbXNnaWQ9IjMxODQyMzU4MDgwMjE0NzgiPiLgtq3gtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWNvbmRzIiBtc2dpZD0iMzE2MTUxNTM0NzIxNjU4OTIzNSI+IuC2reC2reC3iuC2tOC2uyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlZWsiIG1zZ2lkPSI1NjE3OTYxNTM3MTczMDYxNTgzIj4i4LeD4Lat4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2Vla3MiIG1zZ2lkPSI2NTA5NjIzODM0NTgzOTQ0NTE4Ij4i4LeD4Lat4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhciIgbXNnaWQ9IjQwMDExMTgyMjEwMTM4OTIwNzYiPiLgtoXgt4Dgt5Tgtrvgt5Tgtq/gt4rgtq8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFycyIgbXNnaWQ9IjY4ODE1Nzc3MTc5OTMyMTM1MjIiPiLgtoXgt4Dgt5Tgtrvgt5Tgtq/gt5QiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX3NlY29uZHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2OTYyMDE1NTI4MzcyOTY5NDgxIj4i4Lat4Lat4LeK4La04La7IDEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjE4ODYxMDc3NjY1NzcxNjY3ODYiPiLgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0OTE1NDE0MDAyNTQ2MDg1NjE3Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIDEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMxNjUxODcxNjkyMjQ5MDg3NzUiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODkxNzQ2NzQ5MTI0ODgwOTk3MiI+IuC2tOC3kOC2uiAxIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzODYzOTYyODU0MjQ2NzczOTMwIj4i4La04LeQ4La6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90aXRsZSIgbXNnaWQ9IjM1MzQ1MDkxMzU0MzgzNTMwNzciPiLgt4Dgt5Pgtqngt5Lgtrrgt50g4Lac4LeQ4Lan4La94LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RleHRfaW52YWxpZF9wcm9ncmVzc2l2ZV9wbGF5YmFjayIgbXNnaWQ9IjMxODY2NzAzMzU5Mzg2NzA0NDQiPiLgtrjgt5og4LeA4LeT4Lap4LeS4La64Led4LeAIOC2uOC3meC2uCDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4La04LeK4oCN4La74LeA4LeP4LeE4Lax4La6IOC3g+C2s+C3hOC3jyDgt4Dgtr3gtoLgtpzgt5Qg4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X3Vua25vd24iIG1zZ2lkPSIzNDUwNDM5MTU1MTg3ODEwMDg1Ij4i4La44LeZ4La4IOC3gOC3k+C2qeC3kuC2uuC3neC3gCDgtrDgt4/gt4DgtrHgtrog4Laa4LeFIOC2seC3nOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfYnV0dG9uIiBtc2dpZD0iMjgyMjIzODIxNTEwMDY3OTU5MiI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aXZlX3RpbWUiIG1zZ2lkPSIxODE4NTU3MTc3ODI5NDExNDE3Ij4iPHhsaWZmOmcgaWQ9IkRBVEUiPiUxJHM8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub29uIiBtc2dpZD0iNzI0NTM1MzUyODgxODU4NzkwOCI+IuC2uOC2sOC3iuKAjeC2uuC3hOC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Ik5vb24iIG1zZ2lkPSIzMzQyMTI3NzQ1MjMwMDEzMTI3Ij4i4La44Law4LeK4oCN4La64LeP4LeE4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWlkbmlnaHQiIG1zZ2lkPSI3MTY2MjU5NTA4ODUwNDU3NTk1Ij4i4La44Law4LeK4oCN4La64La4IOC2u+C3j+C2reC3iuKAjeC2u+C3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Ik1pZG5pZ2h0IiBtc2dpZD0iNTYzMDgwNjkwNjg5Nzg5MjIwMSI+IuC2uOC2sOC3iuKAjeC2uuC2uCDgtrvgt4/gtq3gt4rigI3gtrvgt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGFwc2VkX3RpbWVfc2hvcnRfZm9ybWF0X21tX3NzIiBtc2dpZD0iNDQzMTU1NTk0MzgyODcxMTQ3MyI+Ijx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMSQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMiQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9oX21tX3NzIiBtc2dpZD0iMTg0NjA3MTk5NzYxNjY1NDEyNCI+Ijx4bGlmZjpnIGlkPSJIT1VSUyI+JTEkZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUyJDAyZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUzJDAyZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RBbGwiIG1zZ2lkPSI2ODc2NTE4OTI1ODQ0MTI5MzMxIj4i4LeD4LeS4La64La94LeK4La9IOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLgtprgtrTgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuC2tOC3kuC2p+C2tOC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLgtoXgtr3gt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuC2tOC3iuKAjeC2u+C2reC3kuC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgtrvgtrHgt4rgtrEuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg4La04LeS4Lan4La04Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuC2tOC3meC3hSDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4La04LeZ4LeFIOC2reC3muC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgt4Hgtrbgt4rgtq8g4Laa4Led4LeC4La64LanIOC2keC2muC2reC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImlucHV0TWV0aG9kIiBtc2dpZD0iMTY1MzYzMDA2MjMwNDU2Nzg3OSI+IuC2huC2r+C3j+C2sSDgtprgt4rigI3gtrvgtrjgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlZGl0VGV4dE1lbnVUaXRsZSIgbXNnaWQ9IjQ5MDkxMzU1NjQ5NDE4MTU0OTQiPiLgtrTgt5ngt4Ug4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190aXRsZSIgbXNnaWQ9IjU1NzYyNzI0OTYzNjU2ODQ4MzQiPiLgtobgtqDgtrrgtrHgtrog4LaJ4LapIOC2tOC3iuKAjeC2u+C2uOC3j+C2q+C2uiDgtoXgtqngt5Qg4LeA4LeTIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGV4dCIgbXNnaWQ9IjY2NDA1MDU4MTc2MTc0MTQzNzEiPiLgt4Pgtrjgt4Tgtrsg4La04Lav4LeK4Law4Lat4LeSIOC2muC3j+C2u+C3iuC2uuC2uuC2seC3iiDgtprgt4rigI3gtrvgt5Lgtrrgt48g4Lax4Lec4Laa4La74Lax4LeUIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg3MTgzMzUxMjEwNjA3ODc5MTQiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC2sOC3j+C3gOC2seC2uiDgt4Dgt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiLgt4Dgt5Dgtqngt5LgtrTgt5Tgtrsg4Lat4Lec4La74Lat4LeU4La74LeUIOC3hOC3nSDgtrrgt5ngtq/gt5Tgtrgg4Lax4LeQ4LeA4Lat4LeT4La4IOC3g+C2s+C3hOC3jyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9rIiBtc2dpZD0iNTk3MDA2MDQzMDU2MjUyNDkxMCI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiLgtoXgt4Dgtr3gtoLgtpzgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVzIiBtc2dpZD0iNTM2Mjk4MjMwMzMzNzk2OTMxMiI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vIiBtc2dpZD0iNTE0MTUzMTA0NDkzNTU0MTQ5NyI+IuC2heC3gOC2veC2guC2nOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaWFsb2dfYWxlcnRfdGl0bGUiIG1zZ2lkPSIyMDQ5NjU4NzA4NjA5MDQzMTAzIj4i4LaF4LeA4Law4LeP4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9hZGluZyIgbXNnaWQ9Ijc5MzM2ODEyNjAyOTYwMjExODAiPiLgtrTgt5bgtrvgtqvgtrog4LeA4LeZ4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vbiIgbXNnaWQ9IjE1NDQ2ODI3NTU1MTQ0OTQyOTgiPiLgt4Pgtprgt4rigI3gtrvgt5Pgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29mZiIgbXNnaWQ9IjY4MTU4NzAzODY5NzI4MDU4MzIiPiLgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2hpY2hBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ1MzMxODU5NDcwNjQ3NzMzODYiPiLgtrTgt4Tgtq0g4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gCDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IuC2uOC3meC2uCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Ag4LeD4Laz4LeE4LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4i4La04Lav4LeK4Law4Lat4LeSIOC3g+C3kOC2muC3g+C3k+C2uOC3iiAmZ3Q7IOC2uuC3meC2r+C3lOC2uOC3iiAmZ3Q7IOC2tuC3j+C2nOC3kOC2seC3k+C2uOC3iiDgtq3gt5Tgt4Ug4LaH4Lat4LeSIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2ryDgt4Tgt5Lgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZUFjdGl2aXR5IiBtc2dpZD0iNzQ4Njg3NjE0Nzc1MTgwMzMzMyI+IuC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2muC3iiDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiJVU0Ig4LaL4La04LeP4LaC4Lac4La6IOC3g+C2s+C3hOC3jyDgtrrgt5ngtq/gt5Tgtrjgtprgt4og4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9BcHBsaWNhdGlvbnMiIG1zZ2lkPSIyOTkxODE0MjczOTM2NTA0Njg5Ij4i4La44LeZ4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gCDgt4Pgt5Lgtq/gt5Qg4Laa4LeS4La74LeT4La44LanIOC2muC3kuC3g+C3kuC2r+C3lCDgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4Lax4Lec4LeE4LeQ4Laa4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiLgtoXgt4Dgt4/gt4PgtrHgt4/gt4DgtrHgt4rgtq0g4La94LeZ4LeDIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4Lax4LeQ4LeA4Lat4LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZXJyX3Byb2Nlc3MiIG1zZ2lkPSI0NTA3MDU4OTk3MDM1Njk3NTc5Ij4i4LaF4LeA4LeP4LeD4Lax4LeP4LeA4Lax4LeK4LatIOC2veC3meC3gywgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kuC2uiDgtrHgtq3gtrsg4LeA4LeS4Lar4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl90aXRsZSIgbXNnaWQ9IjQzNTE5NDg0ODE0NTkxMzU3MDkiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X2FwcGxpY2F0aW9uIiBtc2dpZD0iMTkwNDQ3NzE4OTA1NzE5OTA2NiI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz4g4La04LeK4oCN4La74Lat4LeS4Lag4LeP4La7IOC2seC3nOC2r+C2muC3iuC3gOC2uuC3ki5cblxu4LaU4La24LanIOC2keC2uiDgtrHgtq3gtrsg4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfYWN0aXZpdHlfcHJvY2VzcyIgbXNnaWQ9IjU3NzYyMDk4ODMyOTkwODk3NjciPiI8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C2muC2uCDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLlxuXG7gtpHgtrog4LeA4LeD4LePIOC2r+C3kOC2uOC3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hcHBsaWNhdGlvbl9wcm9jZXNzIiBtc2dpZD0iODk0MTc1NzYwNzM0MDQ4MTA1NyI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4La04LeK4oCN4La74Lat4LeS4Lag4LeP4La7IOC2seC3nOC2r+C2muC3iuC3gOC2uuC3ki4g4LaR4La6IOC3gOC3g+C3jyDgtq/gt5Dgtrjgt5Pgtrjgtqcg4LaU4La24LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfcHJvY2VzcyIgbXNnaWQ9IjY1MTMyMDk4NzQ4ODA1MTcxMjUiPiI8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La6IOC2tOC3iuKAjeC2u+C2reC3kuC2oOC3j+C2uyDgtrHgt5zgtq/gtprgt4rgt4Dgtrrgt5IuXG5cbuC2lOC2tuC2pyDgtpHgtrog4Lax4Lat4La7IOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfY2xvc2UiIG1zZ2lkPSI4MzQ2MDcyMDk0NTIxMjY1NjA1Ij4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVwb3J0IiBtc2dpZD0iNDA2MDIxODI2MDk4NDc5NTcwNiI+IuC3gOC3j+C2u+C3iuC2reC3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndhaXQiIG1zZ2lkPSI3MTQ3MTE4MjE3MjI2MzE3NzMyIj4i4La74LeQ4Laz4LeTIOC3g+C3kuC2p+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlYnBhZ2VfdW5yZXNwb25zaXZlIiBtc2dpZD0iMzI3Mjc1ODM1MTEzODEyMjUwMyI+IuC2tOC3kuC2p+C3lOC3gCDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4Lax4Lec4Lav4Laa4LeK4LeA4LaxIOC2reC2reC3iuC3gOC2uuC2pyDgtrTgtq3gt4rgt4Dgt5Mg4LaH4LatLlxuXG7gtpTgtrbgtqcg4LaR4La6IOC3gOC3kOC3g+C3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIxNTQ3OTk3NzgwNTA2NzEzNTgxIj4i4La64LeZ4Lav4LeU4La4IOC2seC3kOC3gOC2rSDgt4Tgtrvgt4Dgt48g4La64LeA4LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3JlcGxhY2UiIG1zZ2lkPSI2MjAyNDk4OTQ5OTcwMjgxNDEyIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgtq/gt5DgtrHgt4og4Law4LeP4LeA4Lax4La6IOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19vcmlnaW5hbCIgbXNnaWQ9IjE4ODEwMjAyMzAyMTY2ODY4MyI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g4La44LeU4La94LeS4Lax4LeK4La4IOC2heC2u+C2ueC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3NjYWxlIiBtc2dpZD0iMzIwMjk1NTY2NzY3NTk0NDQ5OSI+IuC2tOC2u+C3kuC2uOC3j+C2q+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zaG93IiBtc2dpZD0iNDAxMzg3ODg3NjQ4NjY1NTg5MiI+IuC3g+C3kOC2uOC3gOC3kuC2p+C2uCDgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfaGludCIgbXNnaWQ9IjEwNjQ1MjQwODQ1NDMzMDQ0NTkiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2reC3lOC3hSDgtrjgt5ngtrog4Lax4LeQ4LeA4LatIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgtrvgtrHgt4rgtrEgJmd0OyDgtrrgt5ngtq/gt5Tgtrjgt4ogJmd0OyDgtrbgt4/gtpzgtrHgt4rgtrHgt48g4La94Lav4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjMzMDcyMDkxOTIxNTU0NDI4MjkiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOC2uuC3meC2r+C3lOC2uCAoPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kuC2uikg4LaR4LeE4LeSIFN0cmljdE1vZGUg4Laa4Lec4Lax4LeK4Lav4Lea4LeD4LeS4La6IOC2i+C2veC3iuC2veC2guC2neC2seC2uiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9wcm9jZXNzIiBtc2dpZD0iNTEyMDM5NzAxMjA0NzQ2MjQ0NiI+Ijx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Lgtrog4LaR4LeE4LeSIFN0cmljdE1vZGUg4Laa4Lec4Lax4LeK4Lav4Lea4LeD4LeS4La6IOC2i+C2veC3iuC2veC2guC2neC2seC2uiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+IkFuZHJvaWQg4LaL4Lat4LeK4LeB4LeK4oCN4La74Lea4Lar4LeSIOC3gOC3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5MuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19hcGsiIG1zZ2lkPSI3OTA0MDQyNjgyMTExNTI2MTY5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgtprgt5LgtrHgt4ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgt4Dgt5DgtrHgt5Ig4La64LeZ4Lav4LeU4La44La04LeK4oCNIOC2u+C3geC3g+C3iuC2rSDgtprgtrvgtrjgt5LgtrHgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtobgtrvgtrjgt4rgtrcg4Laa4La74La44LeS4Lax4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2NvbXBsZXRlIiBtc2dpZD0iMTQwNTk1NDc1NDExMjk5OTIyOSI+IuC2h+C2u+C2ueC3lOC2uCDgtoXgt4Dgt4Pgt4/gtrEg4Laa4La74La44LeS4Lax4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb24iIG1zZ2lkPSI5MDg3MDYzOTg1Nzc2NjI2MTY2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz4g4Law4LeP4LeA4Lax4La6IOC3gOC3meC2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb25fZGV0YWlsIiBtc2dpZD0iMTcyMTY4MTc0MTYxNzg5ODg2NSI+IuC2uuC3meC2r+C3lOC2uOC2pyDgtrjgt4/gtrvgt5Qg4LeA4LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGl0bGUiIG1zZ2lkPSI3MTUzMTY3MDg1NDAzMjk4MTY5Ij4i4La64LeZ4Lav4LeU4La44LeKIOC2uOC3j+C2u+C3lCDgt4DgtrHgt4Dgt4/gtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RleHQiIG1zZ2lkPSI3MDIyNjMxOTI0NTM0NDA2NDAzIj4i4LaF4La94LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC2muC3iiDgtobgtrvgtrjgt4rgtrcg4Laa4LeS4La74LeT4La44LanIOC2tOC3meC2uyDgtq3gt4Dgtrjgtq3gt4og4Laa4LeK4oCN4La74LeS4La64LeP4LeA4LeZ4LeE4LeSIOC2uuC3meC2r+C3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5LgtrEg4La64LeZ4Lav4LeU4La4IOC2seC3kOC3gOC3kOC2reC3iuC3gOC3kuC2uiDgtrrgt5Tgtq3gt5Tgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9hY3Rpb24iIG1zZ2lkPSI0OTMxMjkxNzIyMzg1NjYyODIiPiI8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4g4LeA4LeZ4LatIOC2huC2tOC3g+C3lCDgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjA4MjA5NDI3NTU4MDM1ODA0OSI+IuC2seC3gCDgtrrgt5ngtq/gt5Tgtrgg4LaG4La74La44LeK4La3IOC2seC3nOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2FjdGlvbiIgbXNnaWQ9IjU0NzI3NTY5MjY5NDU0NDA3MDYiPiI8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4g4LaF4La74La54Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5MzIxNDM1OTgzNzE1MzczNDAiPiLgt4Pgt5Tgtrvgt5Dgtprgt5Pgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2tOC2u+C2qyDgtrrgt5ngtq/gt5Tgtrgg4Lax4LeA4Lat4LeK4LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbmRUZXh0IiBtc2dpZD0iNTIwOTg3NDU3MTk1OTQ2OTE0MiI+IuC2tOC3meC3hSDgt4PgtrPgt4Tgt48g4Laa4LeK4oCN4La74LeS4La64LeP4LeAIOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9yaW5ndG9uZSIgbXNnaWQ9IjY4ODU0MjE0MDY4NDU3MzQ2NTAiPiLgt4Tgtqwg4Lax4Laf4Lax4La64LeaIOC3geC2tuC3iuC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpYyIgbXNnaWQ9IjU0MjE2NTExNTcxMzg2MjgxNzEiPiLgtrjgt4/gtrDgt4rigI3gtrog4LeB4La24LeK4Lav4La6IOC2reC3iuKAjeC2u+C3k+C3gOC2reC3j+C3gOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3hOC2u+C3hOC3jyDgtrDgt4/gt4DgtrHgtrog4LeA4LeZ4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+IuC2seC3kuC3hOC2rCDgtrvgt5Lgtpzgt5LgtrHgt4og4Lan4Led4Lax4La64Laa4LeKIOC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9jYWxsIiBtc2dpZD0iMzk0MTY4MDA0MTI4Mjc4ODcxMSI+IuC2h+C2uOC2reC3lOC2uC3gtq3gt5Tgt4Ug4LeB4La24LeK4LavIOC2reC3iuKAjeC2u+C3k+C3gOC2reC3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ibHVldG9vdGhfY2FsbCIgbXNnaWQ9IjIwMDI4OTE5MjYzNTExNTE1MzQiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LaH4La44Lat4LeU4La4LeC2reC3lOC3hSDgt4Hgtrbgt4rgtq8g4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IuC3g+C3k+C2seC3lOC3gOC3miDgt4Hgtrbgt4rgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMjQyMjI2NTY1Njc0NDI3NjcxNSI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3miDgt4Hgtrbgt4rgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfdW5rbm93biIgbXNnaWQ9IjE0MDAyMTk2Njk3NzA0NDU5MDIiPiLgt4Hgtrbgt4rgtq/gtrog4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fYmx1ZXRvb3RoIiBtc2dpZD0iNjUzODg5NDE3NzI1NTk2NDM0MCI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgt4Hgtrbgt4rgtq8g4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fcmluZ2VyIiBtc2dpZD0iMzMyNjAwMzg0NzAwNjE2MjQ5NiI+IuC2u+C3kuC2seC3iuC2p+C3neC2seC2uuC3miDgt4Hgtrbgt4rgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9pbmNhbGwiIG1zZ2lkPSI4ODkwMDczMjE4MTU0NTQzMzk3Ij4i4LaH4La44Lat4LeU4La44LeKIOC3geC2tuC3iuC2r+C2uiDgtq3gt4rigI3gtrvgt5Pgt4Dgtq3gt4/gt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9tZWRpYSIgbXNnaWQ9IjQyMTczMTE3MTk2NjUxOTQyMTUiPiLgtrjgt4/gtrDgt4rigI3gtrog4LeB4La24LeK4Lav4La6IOC2reC3iuKAjeC2u+C3k+C3gOC2reC3j+C3gOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjcwNDQ5ODY1NDY0NzcyODIyNzQiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt5og4LeB4La24LeK4LavIOC2reC3iuKAjeC2u+C3k+C3gOC2reC3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX2RlZmF1bHQiIG1zZ2lkPSIzNzg5NzU4OTgwMzU3Njk2OTM2Ij4i4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2u+C3kuC2seC3iuC2p+C3neC2seC2uiDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9kZWZhdWx0X3dpdGhfYWN0dWFsIiBtc2dpZD0iODEyOTU2MzQ4MDg5NTk5MDM3MiI+IuC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3lCDgtrvgt5LgtrHgt4rgtqfgt53gtrHgtrogKDx4bGlmZjpnIGlkPSJBQ1RVQUxfUklOR1RPTkUiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3NpbGVudCIgbXNnaWQ9Ijc5Mzc2MzQzOTI0MDg5NzcwNjIiPiLgtprgt5Lgt4Pgt5Lgt4Dgtprgt4og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfcGlja2VyX3RpdGxlIiBtc2dpZD0iMzUxNTE0MzkzOTE3NTExOTA5NCI+IuC2u+C3kuC2nOC3kuC2seC3iuC2p+C3neC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4i4Lax4Lec4Lav4Lax4LeK4Lax4LePIOC2u+C3kuC2seC3iuC2p+C3neC2seC2uiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NjU0MTIzOTg3NDE4MTY4NjkzIj4iV2ktRmkg4Lai4LeP4La94La64Laa4LeKIOC2reC3kuC2tuC3miI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IldpLUZpIOC2ouC3j+C2vSDgtofgtq0iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlX2RldGFpbGVkIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTYzNDEwMTQ1MDM0MzI3NzM0NSI+IuC3gOC3kuC3gOC3mOC2rSBXaS1GaSDgtqLgt4/gtr3gtrog4La94La24LeP4Lac4LatIOC3hOC3kOC2miI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzkxNTg5NTMyMzY0NDI5Mjc2OCI+IuC3gOC3kuC3gOC3mOC2rSBXaS1GaSDgtqLgt4/gtr0g4Lat4LeS4La24LeaIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9IjQwMjk0ODk3MTY2MDUyNTUzODYiPiJXaS1GaSDgtqLgtr3gtrrgtqcg4La04LeU4La74Lax4La6IOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4i4Lai4LeP4La94La64LanIOC2tOC3lOC2u+C2seC2uiDgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbmV0d29ya19hdmFpbGFibGVfc2lnbl9pbl9kZXRhaWxlZCAoODAwMDA4MTk0MTQ0Nzk3NjExOCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiJXaS1GaSDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kuC2uiDgtrHgt5zgt4Tgt5DgtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3dhdGNoZG9nX25ldHdvcmtfZGlzYWJsZWRfZGV0YWlsZWQiIG1zZ2lkPSI1NTQ4NzgwNzc2NDE4MzMyNjc1Ij4iIOC2r+C3lOC2tuC2vSDgtoXgtrHgt4rgtq3gtrvgt4rgtqLgt4/gtr0g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64Laa4LeKIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IuC2jeC2ouC3lCBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3R1cm5vbl9tZXNzYWdlIiBtc2dpZD0iMjkwOTI1MDk0MjI5OTYyNzI0NCI+IuC2jeC2ouC3lCBXaS1GaSDgtobgtrvgtrjgt4rgtrcg4Laa4La74Lax4LeK4LaxLiDgtrjgt5ngtrogV2ktRmkg4LeD4Lea4LeA4LeP4Lav4LeP4La64LaaL+C3hOC3nOC2p+C3iuC3g+C3iuC2tOC3nOC2p+C3iiDgtpHgtpog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3lCDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4i4LaN4Lai4LeUIFdpLUZpIOC2huC2u+C2uOC3iuC2tyDgtprgt4Ug4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+IldpLUZpIOC2jeC2ouC3lCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Ag4LeD4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiLgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeD4Laz4LeE4LePIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIxNjQ1MjY3MjU5MjcyODI5NTU5Ij4i4La04LeS4LeF4LeS4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVjbGluZSIgbXNnaWQ9IjIxMTIyMjU0NTE3MDYxMzc4OTQiPiLgtrTgt4rigI3gtrvgtq3gt5Lgtprgt4rgt4Lgt5rgtrQg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl9zZW50X3RpdGxlIiBtc2dpZD0iMTMxODk3NTE4NTExMjA3MDczNCI+IuC2huC2u+C3j+C2sOC2seC3j+C3gCDgtrrgt4DgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl90b19jb25uZWN0X3RpdGxlIiBtc2dpZD0iNDk1ODgwMzk0ODY1ODUzMzYzNyI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC2pyDgtofgtrvgtrrgt5Tgtrjgtprgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcm9tX21lc3NhZ2UiIG1zZ2lkPSI1NzAzODkxNzQ3MzE5NTE3NjkiPiLgt4Dgt5ngtq3gt5LgtrHgt4o6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdG9fbWVzc2FnZSIgbXNnaWQ9IjI0ODk2ODk3NDUyMjA0NDA5OSI+IuC3gOC3meC2rToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbnRlcl9waW5fbWVzc2FnZSIgbXNnaWQ9IjU5MjA5Mjk1NTAzNjc4Mjg5NzAiPiLgtoXgt4Dgt4Hgt4rigI3gtrogUElOIOC2keC2miDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4iUElOOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4i4Lan4LeQ4La24LeK4La94Lan4La6IDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4g4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4DgtrEg4LaF4Lat4La74Lat4LeU4La7IOC2keC2uiBXaS1GaSDgt4Dgtr3gt5LgtrHgt4og4Lat4LeP4LeA4Laa4LeP4La94LeS4Laa4LeAIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgt5ngtrvgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4i4Lav4LeU4La74Laa4Lau4Lax4La6IDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4g4LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Mg4La04LeA4Lat4LeS4LaxIOC3gOC3kuC2pyBXaS1GaSDgt4Dgtr3gt5LgtrHgt4og4LaR4La6IOC2reC3j+C3gOC2muC3j+C2veC3kuC2muC3gCDgt4Dgt5Lgt4PgtrHgt4rgtrDgt5Ig4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9jaGFyYWN0ZXIiIG1zZ2lkPSIzMzY1NTUwMTIwNjE3NzAxNzQ1Ij4i4LaF4Laa4LeU4La7IOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiJTTVMg4La04Lar4LeS4LeA4LeS4LapIOC2uuC3gOC2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsgU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgt4Dgt5Lgt4Hgt4/gtr0g4Lac4Lar4Lax4Laa4LeKIOC2uuC3gOC2uuC3ki4g4La44LeZ4La4IOC2uuC3meC2r+C3lOC2uOC2pyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeQ4LeA4LeT4La4IOC2seC3nOC2seC3kOC3gOC2reC3kyDgtprgtrvgtpzgt5ngtrEg4La64LeP4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5Pgtrjgtqcg4LaU4La24LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4i4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4i4La04LeK4oCN4La74Lat4LeS4Laa4LeK4LeC4Lea4La0IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDtiJmd0OyDgt4Dgt5ngtq0g4Laa4LeZ4Lan4LeSIOC2tOC2q+C3kuC3gOC3k+C2qeC2uuC2muC3iiDgtrrgt5Dgt4Dgt5PgtrjgtqcgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDtiJmd0OyDgtprgt5Dgtrjgtq3gt5LgtrouIjwvc3RyaW5nPgorICAgIDwhLS0gc3ludGF4IGVycm9yIGluIHRyYW5zbGF0aW9uIGZvciBzbXNfc2hvcnRfY29kZV9kZXRhaWxzICgzNDkyMDI1NzE5ODY4MDc4NDU3KSBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOiBleHBlY3RlZDogL3N0cmluZyByZWFkOiBmb250IChwb3NpdGlvbjpFTkRfVEFHIDwvZm9udD5AMTo4MyBpbiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iMzQ5MjAyNTcxOTg2ODA3ODQ1NyI+IuC2uOC3meC2uiAiPC9mb250PiLgtpTgtrbgtpzgt5og4Lai4LaC4Lac4La4IOC2nOC3kuC2q+C3lOC2uOC3miI8Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiIg4LaF4La6IOC3gOC3k+C2uOC3iiDgt4Dgtr3gtqcg4LeE4Lea4Lat4LeU4LeA4Laa4LeKIOC3gOC3mi4iPC9zdHJpbmc+CispICAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19wcmVtaXVtX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjU1MjM4MjYzNDkxMDUxMjM2ODciPjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IuC2uOC3meC2uiDgtpTgtrbgtpzgt5og4Lai4LaC4Lac4La4IOC2nOC3kuC2q+C3lOC2uOC3meC2seC3iiDgtoXgtrrgt4Dgt5Pgtrjgtqcg4LeE4Lea4Lat4LeUIOC3gOC3mi4iPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbGxvdyIgbXNnaWQ9IjQ0NTg4Nzg2MzcxMTEwMjM0MTMiPiLgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2RlbnkiIG1zZ2lkPSIyOTI3Mzg5ODQwMjA5MTcwNzA2Ij4i4LaF4LeA4La94LaC4Lac4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX2Nob2ljZSIgbXNnaWQ9IjUyODk1Mzg1OTIyNzIyMTgxMzYiPiLgtrjgtpzgt5og4Lat4Lea4La74LeT4La4IOC2uOC2reC2miDgtq3gtrbgt4/gtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl91bmRvX2luc3RydWN0aW9uIiBtc2dpZD0iNDk2MDk0NDEzMzA1MjI4NzQ4NCI+IuC2lOC2tuC2pyDgtrjgt5ngtrog4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2reC3lOC3hSDgt4Dgt5ngtrHgt4Pgt4rgtprgtrsg4Lac4LeQ4Lax4LeT4La4IOC2tOC3g+C3lOC3gCDgtprgt4Ug4LeE4LeQ4LaawqAmZ3Q7wqDgtrrgt5ngtq/gt5Tgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2Fsd2F5c19hbGxvdyIgbXNnaWQ9IjMyNDExODExNTQ4Njk0OTMzNjgiPiLgt4Pgt5Dgtrjgt4Dgt5Lgtqfgtrgg4LaJ4LapIOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbmV2ZXJfYWxsb3ciIG1zZ2lkPSI0NDY5OTI3NjU3NzQyNjk2NzMiPiLgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeD4La7IOC2seC3nOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX3RpdGxlIiBtc2dpZD0iNjIyNzcxMjMxOTIyMzIyNjE4NSI+IlNJTSDgtrTgtq0g4LaJ4LeA4Lat4LeKIOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF9tZXNzYWdlIiBtc2dpZD0iMjMzMzE2NDU1OTk3MDk1ODY0NSI+IuC2lOC2tiDgtofgtq3gt5Tgt4Xgtq3gt4og4Laa4La74LaxIOC2veC2ryDgt4Dgtr3gtoLgtpzgt5QgU0lNIOC2tOC2rSDgt4Pgtrjgtp8g4Lax4LeQ4LeA4LatIOC2h+C2u+C2ueC3k+C2uCDgtprgtrvgtrEg4Lat4LeU4La74LeUIOC2ouC2guC2nOC2uCDgtqLgt4/gtr3gtrog4Lax4Lec4Lat4LeS4La24LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9kb25lX2J1dHRvbiIgbXNnaWQ9IjgyNzk0OTk4OTM2OTk2Mzc3NSI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiJTSU0g4La04Lat4Laa4LeKIOC2keC2muC2reC3lCDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX21lc3NhZ2UiIG1zZ2lkPSI2NTk5OTQ1MzAxMTQxMDUwMjE2Ij4i4Lai4LaC4Lac4La4IOC2ouC3j+C2veC2uuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanIOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrog4Lax4LeQ4LeA4LatIOC2heC2u+C2ueC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVzdGFydF9idXR0b24iIG1zZ2lkPSI0NzIyNDA3ODQyODE1MjMyMzQ3Ij4i4La64LeF4LeSIOC2heC2u+C2ueC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjgzNDkzNjI2MjMwNjg4MTkyOTUiPiLgt4Dgt5rgtr3gt4/gt4Ag4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNTg3OTQ1MDY1OTQ1Mzc4MjI3OCI+IuC2r+C3kuC2seC2uiDgt4Pgt5Dgtprgt4Pgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfc2V0IiBtc2dpZD0iNTc3NzA3NTYxNDMyMTA4Nzc1OCI+IuC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9kb25lIiBtc2dpZD0iMjUwNzY4Mzc1MTc1OTMwODgyOCI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1zX25ld19wZXJtX3ByZWZpeCIgbXNnaWQ9IjgyNTc3NDA3MTA3NTQzMDE0MDciPjxmb250IHNpemU9IjEyIiBmZ2NvbG9yPSIjZmYzM2I1ZTUiPiLgtoXgtr3gt5Tgtq3gt4o6ICI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtc19kZXNjcmlwdGlvbl9hcHAiIG1zZ2lkPSI1MTM5ODM2MTQzMjkzMjk5NDE3Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LeD4La04La64LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19wZXJtaXNzaW9ucyIgbXNnaWQ9IjcyODMzNTc3MjgyMTkzMzgxMTIiPiLgtoXgt4Dgt4Pgtrsg4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC2uOC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1fY29zdHNfbW9uZXkiIG1zZ2lkPSI0OTAyNDcwMzI0MTQyMTUxMTE2Ij4i4La44LeZ4La44Laf4LeS4Lax4LeKIOC2lOC2tuC2pyDgtrjgt5Tgtq/gtr3gt4og4LeA4LeQ4La6IOC3gOC3kuC2uiDgt4Tgt5DgtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9hY3Rpdml0eV90aXRsZSIgbXNnaWQ9IjQ0NjUwNTUxNTcyMDk2NDg2NDEiPiJVU0Ig4La44LeE4LePIOC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+IlVTQiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMzMDg1MzgwOTQzMTY0Nzc4MzkiPiLgtpTgtrYg4LaU4La24Lac4LeaIOC2tOC2u+C3kuC2nOC2q+C2muC2uuC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeTIOC2h+C2reC3iuC2reC3miBVU0Ig4LeD4LeK4La04La74LeK4LeB4La6IOC3hOC2u+C3hOC3j+C2ui4g4LaU4La24LanIOC2lOC2tuC3miDgtrTgtrvgt5Lgtpzgtqvgtprgtrog4LeE4LePIOC2lOC2tuC2nOC3miBBbmRyb2lkIFVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Lat4La7IOC2nOC3nOC2seC3lCDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgtrjgt4og4La04LeE4LatIOC2tuC3nOC2reC3iuC2reC2uCDgtpTgtrbgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNTM1MTAwMDQ0NjAzNzgxMSI+IuC2lOC2tiDgtpTgtrbgtpzgt5og4La04La74LeS4Lac4Lar4Laa4La64LanIFVTQiDgt4Tgtrvgt4Tgt48g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kyDgtofgtq0uIOC2lOC2tuC2pyDgtpTgtrbgt5og4La04La74LeS4Lac4Lar4Laa4La6IOC3hOC3jyDgtpTgtrbgtpzgt5ogQW5kcm9pZCBTRCDgtrTgtq0g4LaF4Lat4La7IOC2nOC3nOC2seC3lCDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgtrjgt4og4La04LeE4LatIOC2tuC3nOC2reC3iuC2reC2uCDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiJVU0Ig4La44LeE4LePIOC2huC2oOC2uuC2seC2uiDgt4PgtrPgt4Tgt48g4LaU4La24Lac4LeaIFVTQiDgtobgtqDgtrrgtrHgtrog4La34LeP4LeA4LeS4Lat4La64Lea4Lav4LeTIOC2nOC3kOC2p+C3heC3lOC3gOC2muC3iiDgtq3gt5Lgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4NzYwMTg1MTI3MTY5NzAzMTMiPiJVU0Ig4La44LeE4LePIOC2huC2oOC2uuC2seC2uiDgt4PgtrPgt4Tgt48g4LaU4La24Lac4LeaIFNEIOC2tOC2rSDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5rgtq/gt5Mg4Lac4LeQ4Lan4LeF4LeU4LeA4Laa4LeKIOC2reC3kuC2tuC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4MTc1ODkyNTU0NzU3MjE2NTI1Ij4iVVNCIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4i4LaU4La24Lac4LeaIOC2tOC2u+C3kuC2nOC2q+C2muC2uiDgt4Dgt5ngtq3gtqcv4LeA4LeZ4Lat4LeS4Lax4LeKIOC2nOC3nOC2seC3lCDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzM2MDU4Mzk2NjYzNTE2MDE3Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2NTY4NTIwOTg1NTU2MjM4MjIiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX3RpdGxlIiBtc2dpZD0iNjYwMTI5ODUxNzA4Nzc1ODUzIj4iVVNCIOC2huC2oOC2uuC2seC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5og4La04LeA4Lat4LeTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeZ4La7LCDgtpTgtrbgtpzgt5og4La04La74LeS4Lac4Lar4Laa4La64LeZ4Lax4LeKIEFuZHJvaWQgVVNCIOC2huC2oOC2uuC2seC2uiDgtpzgtr3gt4Dgt48g4Lav4La44Lax4LeK4LaxIChcIuC2tOC3kuC2pyDgtprgtrvgtrHgt4rgtrFcIikuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt5ngtrssIOC2lOC2tuC2nOC3miBBbmRyb2lkIFNEIOC2tOC2rSDgtrTgtrvgt5Lgtpzgtqvgtprgtrrgt5ngtrHgt4og4Lac4La94LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfYnV0dG9uX21vdW50IiBtc2dpZD0iNzA2MDIxODAzNDkwMDY5NjAyOSI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgt5rgtq/gt5Mg4Lac4LeQ4Lan4LeF4LeU4LeA4Laa4LeKIOC2h+C2reC3kuC3gOC3kuC2ui4gVVNCIOC3g+C2guC2nOC3iuKAjeC2u+C3j+C3hOC2muC2uiDgtpzgtr3gt4Dgt48g4LaH4Lat4LeSIOC2r+C3kOC2uuC3kiDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4La74Lax4LeK4LaxLCDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4Lat4Lat4LeKIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RpdGxlIiBtc2dpZD0iOTYzMDM5MDMzNDcwNDc4Njk3Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4i4LaU4La2IFVTQiDgtobgtqDgtrrgtrHgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2seC2uOC3iiwg4LaU4La2IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgtrvgtrEg4LeD4La44LeE4La7IOC2uuC3meC2r+C3lOC2uOC3iiDgtrHgt5Dgt4Dgtq3gt5Pgtrgg4LeD4LeEIOC2lOC2tiBVU0Ig4LaG4Lag4La64Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrEg4Lat4LeU4La74LeUIOC2seC3nOC2reC3kuC2tuC3muC3gOC3ky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfZXJyb3JfdGl0bGUiIG1zZ2lkPSI3MzIzNjU4NDY5NjI2NTE0MjA3Ij4iVVNCIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kuC2uiDgtoXgt4Pgt4/gtrvgt4rgtq7gtprgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX210cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzNjk5OTEzMDk3MzkxNTUwMzk0Ij4i4La44LeP4Law4LeK4oCN4La6IOC2i+C2tOC3j+C2guC2nOC2uuC2muC3iiDgtr3gt5ngt4Mg4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3B0cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxOTYwODE3MTkyMjE2MDY0ODMzIj4i4Laa4LeQ4La44La74LeP4LeA4Laa4LeKIOC2veC3meC3gyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9jZF9pbnN0YWxsZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjc3NDcxMjgyNzg5MjA5MDc1NCI+IuC3g+C3iuC2ruC3j+C2tOC3kuC2reC2uuC2muC3iiDgtr3gt5ngt4Mg4LeD4La44LeK4La24Lax4LeK4Law4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4iVVNCIOC2uOC3meC3gOC2veC2uOC2muC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIyMjkwODU5Mzk5OTgzNzIwMjcxIj4i4LaF4Lax4LeZ4Laa4LeKIFVTQiDgt4Dgt5Lgtprgtr3gt4rgtrTgtrog4LeD4Laz4LeE4LePIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC3huC3neC2uOC3kOC2p+C3iiDgtprgtrvgtrHgt4rgtrHgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IlNEIOC2tOC2rSDgt4bgt53gtrjgt5Dgtqfgt4og4Laa4La74Lax4LeK4Lax4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiLgtpTgtrbgtpzgt5ogVVNCIOC2huC2oOC2uuC2seC2uuC3miDgtofgtq3gt5Ig4LeD4LeS4La64La94LeU4La4IOC2nOC3nOC2seC3lCDgtrjgt5Dgtprgt5Mg4La64Lax4LeUIOC2h+C2rS4g4La44LeZ4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gCDgtobgtrTgt4Pgt5Qg4LeE4LeQ4La74LeA4LeS4La6IOC2seC3nOC3hOC3kOC2miEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4i4LaU4La24Lac4LeaIOC2tOC2reC3miDgt4Pgt5Lgtrrgtr3gt5Qg4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4DgtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9idXR0b25fZm9ybWF0IiBtc2dpZD0iNDEzMTA2NDU2MDEyNzQ3ODY5NSI+IuC3huC3neC2uOC3kOC2p+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IlVTQiDgtrHgt5Lgtq/gt5zgt4Pgt4rgtprgtrvgtqvgtrog4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjEwMTY2NTQ2Mjc2MjY0NzYxNDIiPiJVU0Ig4Lax4LeS4Lav4Lec4LeD4LeK4Laa4La74Lar4La6IOC2heC2tuC2vSDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaW5wdXRfbWV0aG9kIiBtc2dpZD0iNDY1MzM4NzMzNjc5MTIyMjk3OCI+IuC2huC2r+C3j+C2sSDgtprgt4rigI3gtrvgtrjgtrrgtprgt4og4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSI5MDkxNjUyMTU3NzIyNDk1MTE2Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uCDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI2MjAzMTEyNDc4MDk1MTE3NjI1Ij4i4La34Lee4Lat4LeS4LaaIOC2uuC2reC3lOC2u+C3lCDgtrTgt5Tgt4Dgtrvgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoYXJkd2FyZSIgbXNnaWQ9Ijc1MTc4MjEwODY4ODg5OTAyNzgiPiLgtq/gt5jgtqjgt4/gtoLgtpwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfa2V5Ym9hcmRfbGF5b3V0X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE0MDczNjcwMTcyNjMwMzA3NzMiPiLgtrrgtq3gt5Tgtrvgt5Qg4La04LeU4LeA4La74LeU4LeA4LanIOC2tOC3kuC2u+C3kuC3g+C3kOC2veC3kOC3g+C3iuC2uCDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfa2V5Ym9hcmRfbGF5b3V0X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ2NTkwNzcwMDQ0OTI1NzA2MyI+IuC2uuC2reC3lOC2u+C3lCDgtrTgt5Tgt4Dgtrvgt5Tgt4Dgtqcg4La04LeS4La74LeS4LeD4LeQ4La94LeQ4LeD4LeK4La44Laa4LeKIOC2reC3muC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX2FscGhhYmV0IiBtc2dpZD0iNTQzMzI3NTQ4NTQ5OTAzOTE5OSI+IiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmRpZGF0ZXNfc3R5bGUiIG1zZ2lkPSI0MzMzOTEzMDg5NjM3MDYyMjU3Ij48dT4i4LaF4La04Lea4Laa4LeK4LeC4Laa4La64Lax4LeKIjwvdT48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LeD4Laa4LeD4La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NTc2MDM0MTg5NzA5OTQwNTAiPiJTRCDgtrTgtq0g4LeD4LeU4Lav4LeP4Lax4La44LeKIOC2muC2u+C2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgyODczMTk4ODI5MjY3MzcwNTMiPiLgt4Dgt5Dgtrvgtq/gt5Ig4LeD4Laz4LeE4LePIOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgtrvgtrjgt5LgtrHgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLgt4Tgt5Lgt4Pgt4ogVVNCIOC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IuC3hOC3kuC3g+C3iiBTRCDgtrTgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4iU0Qg4La04LatIOC3hOC3kuC3g+C3iiDgt4Tgt50g4LeD4LeE4LeP4La6IOC2seC3nOC2r+C2muC3iuC3gOC2sSDgtpzgt5zgtrHgt5Qg4La04Lav4LeK4Law4Lat4LeS4La64Laa4LeKIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2NDEwNjU2NDE3ODY5MjM2MDQiPiJTRCDgtrTgtq0g4LeE4LeS4LeD4LeKIOC3hOC3nSDgt4Pgt4Tgtrog4Lax4Lec4Lav4Laa4LeK4LeA4LaxIOC2nOC3nOC2seC3lCDgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgtprgt4og4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i4LeE4LeP4Lax4LeSIOC3gOC3liBVU0Ig4LaG4Lag4La64Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0MTA3MjM5MDYwMTkxMDAxODkiPiLgt4Tgt4/gtrHgt5Ig4LeA4LeWIFNEIOC2tOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNzk1OTE3NTc4Mzk1MzMzMjgwIj4iVVNCIOC2huC2oOC2uuC2seC2uuC2pyDgt4Tgt4/gtrHgt5Ig4LeA4LeTIOC2h+C2rS4g4LaR4La6IOC2seC3kOC3gOC2rSDgt4bgt53gtrjgt5Dgtqfgt4og4Lac4LeQ4Lax4LeK4LeA4LeT4La44LanIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+IlNEIOC2tOC2reC2pyDgt4Tgt4/gtrHgt5Ig4LeA4LeTIOC2h+C2rS4g4LaR4La6IOC2seC3kOC3gOC2rSDgt4bgt53gtrjgt5Dgtqfgt4og4Lac4LeQ4Lax4LeK4LeA4LeT4La44LanIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE2NjE2ODMwMzEzMzA5NTEwNzMiPiLgtrbgtr3gt4/gtrTgt5zgtrvgt5zgtq3gt4rgtq3gt5Qg4Lax4Lec4LeA4LeWIOC2veC3meC3gyBVU0Ig4LaG4Lag4La64Lax4La6IOC2ieC3gOC2reC3iiDgtprgt5ngtrvgt5Lgtqvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODcyMTUyODgyNjA0NDA3ODM3Ij4iU0Qg4La04LatIOC2tuC2veC3j+C2tOC3nOC2u+C3nOC2reC3iuC2reC3lCDgtrvgt4Tgt5Lgtq3gt4Ag4LaJ4LeA4Lat4LeKIOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MzI5ODQ4ODE5ODY1NTk0MjQxIj4i4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kuC3gOC3k+C2uCDgt4Dgt5Dgt4Xgtprgt4rgt4Dgt5PgtrjgtqcgVVNCIOC2huC2oOC2uuC2seC2uiDgtongt4Dgtq3gt4rgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeZ4La7IOC2nOC2veC3gOC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjAxODMyOTM3NDc0NDgyNDEiPiLgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeS4LeA4LeT4La4IOC3gOC3kOC3heC2muC3iuC3gOC3k+C2uOC2pyDgtpzgt5Dgtr3gt4Dgt5Pgtrjgtqcg4Laa4La94LeS4Lax4LeKIFNEIOC2tOC2rSDgtongt4Dgtq3gt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5Njc5NzM4OTMyNzAzNjAyMzAiPiLgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanIFVTQiDgtobgtqDgtrrgtrHgtrog4LaG4La74Laa4LeK4LeC4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4iU0Qg4La04LatIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeU4La74Laa4LeK4LeC4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4i4LaU4La24LanIFVTQiDgtobgtqDgtrrgtrHgtrog4LaG4La74Laa4LeK4LeC4LeS4Lat4LeAIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeU4LeF4LeU4LeA4Lax4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiLgtpTgtrbgtqcg4LaG4La74Laa4LeK4LeC4LeS4Lat4LeAIFNEIOC2tOC2rSDgtongt4Dgtq3gt4og4Laa4LeFIOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NDg2Mzc3MjMwMTQwMjI3NjUxIj4iVVNCIOC2huC2oOC2uuC2seC2uiDgtongt4Dgtq3gt4og4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiJTRCDgtrTgtq0g4LaJ4LeA4Lat4LeKIOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iVVNCIOC2huC2oOC2uuC2seC2uiDgtongt4Dgtq3gt4rgtprgt5zgtqcg4LaH4LatLiDgtoXgtr3gt5Tgtq3gt4og4La44LeP4Law4LeK4oCN4La64La64Laa4LeKIOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzODcwMTIwNjUyOTgzNjU5NjQxIj4iU0Qg4La04LatIOC2ieC3gOC2reC3iiDgtprgtrvgtrEg4La94Lav4LeSLiDgtoXgtr3gt5Tgtq3gt4og4LaR4Laa4Laa4LeKIOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiLgtpzgt5Dgtr3gtrTgt5ngtrEg4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC3hOC2uOC3lCDgtrHgt5zgt4Dgt5Tgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wa2dVc2FnZVN0YXRzIiBtc2dpZD0iODc4NzM1MjA3NDMyNjc0ODg5MiI+IuC3g+C2guC2u+C2oOC2muC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeS4La74LeT4La44LeaIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2sSDgtrrgt4/gt4Dgtq3gt4rgtprgt4/gtr3gt5PgtrEg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9IjExMDY2MTI0MjQyNTQyNzc2MzAiPiLgtpHgtprgtq3gt5Qg4Laa4La74LaxIOC2veC2ryDgt4PgtoLgtrvgtqDgtprgtrog4La34LeP4LeA4LeS4Lat4LePIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzNDEwMzYzMTEyMTE0MDY2OTIiPiLgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4La04LeS4Lan4La04Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM5MDY5NzEyNDI4ODMxNzgzMSI+IuC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3lCDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq0g4LeD4Lea4LeA4LeP4LeAIOC2ieC2veC3iuC3gOC3jyDgt4Pgt5Lgtqfgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4La34LeP4LeA4LeS4Lat4La6IOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSIxNjQyMDI0NDU1NzUwNDE0Njk0Ij4i4La44LeP4Law4LeK4oCN4La6IOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uuC3miDgtrjgt4/gtrvgt4rgtpzgtpzgtq0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNDkzMjgxODc0OTU0NzI0NDM0NiI+IuC3gOC3meC2seC2reC3iiDgtrbgt4/gt4Tgt5Lgtrsg4LaL4La04LeP4LaC4LacIOC3gOC3meC2rSDgtrjgt4/gtrDgt4rigI3gtrog4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6IOC2uuC3kOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9Ijc1NjU1NTIyMzc5Nzc4MTUwNDciPiLgtrrgtq3gt5Tgtrvgt5Qg4La04LeP4La94LaaIOC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtobgtqDgtrrgtrHgtrog4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9IjU4NjYyNDU0ODQzMDMyODU3NjIiPiLgtrrgtq3gt5Tgtrvgt5Qg4LaG4La74Laa4LeK4LeC4LaaIOC2huC2oOC2uuC2seC2uuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sX2tleWd1YXJkIiBtc2dpZD0iMTcyMTk1MTg0MjA3ODI4Mzg3Ij4i4La04LeZ4Lax4LeK4LeA4LeT4La44LeaIOC3hOC3jyDgt4Pgt5Dgtp/gt4Dgt5Pgtrjgt5og4La64Lat4LeU4La74LeUIOC2huC2u+C2muC3iuC3guC2muC2uiDgtrTgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjMwNDM3MzIyOTA1MTg2MjkwNjEiPiLgtrrgtq3gt5Tgtrvgt5Qg4LaG4La74Laa4LeK4LeC4Laa4La6IOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiLgt4Dgt5Lgt4Hgt4/gtr3gtrEg4La04LeP4La94Lax4La6IOC3g+C2s+C3hOC3jyDgtq/gt5ngt4Dgtrvgtprgt4og4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdhZGdldF9ob3N0X2Vycm9yX2luZmxhdGluZyIgbXNnaWQ9IjQ4ODIwMDQzMTQ5MDY0NjYxNjIiPiLgt4Dgt5LgtqLgtqfgtrog4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtrHgt5zgt4Tgt5Dgtprgt5Ig4LeA4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZ28iIG1zZ2lkPSI4MzIwODQ1NjUxNzM3MzY5MDI3Ij4i4La64Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9zZWFyY2giIG1zZ2lkPSI2NTgxMTAyNzE4MjI4MDc4MTEiPiLgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlbmQiIG1zZ2lkPSIyMzE2MTY2NTU2MzQ5MzE0NDI0Ij4i4La64LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9uZXh0IiBtc2dpZD0iMzEzODg0MzkwNDAwOTgxMzgzNCI+IuC2uOC3k+C2veC2nyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZG9uZSIgbXNnaWQ9Ijg5NzE1MTYxMTc5MTA5MzQ2MDUiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3ByZXZpb3VzIiBtc2dpZD0iMTQ0MzU1MDAzOTI1MDEwNTk0OCI+IuC2tOC3meC2uyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZGVmYXVsdCIgbXNnaWQ9IjI4NDA5MjE4ODU1NTgwNDU3MjEiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgtrvgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaWFsX251bWJlcl91c2luZyIgbXNnaWQ9IjU3ODkxNzY0MjUxNjc1NzM1ODYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4g4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKXG7gtoXgtoLgtprgtrog4LaF4La44Lat4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2NvbnRhY3RfdXNpbmciIG1zZ2lkPSI0OTQ3NDA1MjI2Nzg4MTA0NTM4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+IOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3ilxu4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64Laa4LeKIOC2seC3kuC2u+C3iuC2uOC3j+C2q+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9jcmVkZW50aWFsc19wZXJtaXNzaW9uX21lc3NhZ2VfaGVhZGVyIiBtc2dpZD0iMjEwNjEwMzgxNzkzNzg1OTY2MiI+IuC2tOC3hOC2rSDgtq/gt5Dgtprgt4rgt4Dgt5ngtrEg4LaR4Laa4Laa4LeKIOC3hOC3nSDgtorgtqcg4LeA4LeQ4Lap4LeSIOC2uuC3meC2r+C3lOC2uOC3iiDgtpzgtqvgtrHgtprgt4og4LaU4La24Lac4LeaIOC2nOC3kuC2q+C3lOC2uOC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanLCDgtq/gt5DgtrHgt4og4LeD4LeEIOC2ieC2r+C3kuC2u+C3kuC2uuC3muC2r+C3kyDgtoXgt4Dgt4Pgtrsg4LaJ4La94LeK4La94La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9mb290ZXIiIG1zZ2lkPSIzMTI1MjExMzQzMzc5Mzc2NTYxIj4i4La44LeZ4La4IOC2ieC2veC3iuC2veC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeT4La44LanIOC2lOC2tuC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfcGVybWlzc2lvbnNfaGVhZGVyX3RleHQiIG1zZ2lkPSI2ODc0NDk3NDA4MjAxODI2NzA4Ij4i4La04LeK4oCN4La74LeA4Lea4LeB4La6IOC2ieC2veC3iuC2veC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93IiBtc2dpZD0iNzIyNTk0ODgxMTI5NjM4NjU1MSI+IuC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55IiBtc2dpZD0iMjA4MTg3OTg4NTc1NTQzNDUwNiI+IuC2tOC3iuKAjeC2u+C2reC3kuC2muC3iuC3guC3muC2tCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjQ4Njc1OTc5NTkyNjIzNzkwNyI+IuC2heC3gOC3g+C2uyDgtongtr3gt4rgtr3gt48g4LeD4LeS4Lan4LeTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWlzc2lvbl9yZXF1ZXN0X25vdGlmaWNhdGlvbl93aXRoX3N1YnRpdGxlIiBtc2dpZD0iODUzMDM5MzEzOTYzOTU2MDE4OSI+Ijx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lczwveGxpZmY6Zz4g4Lac4LeS4Lar4LeU4La4IOC3g+C2s+C3hOC3j1xu4LaF4LeA4LeD4La7IOC2ieC2veC3iuC2veC2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRfbWV0aG9kX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjgzNTU3MTc5OTQ0OTkyNjQ5Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjM2ODc5NjkxMzgzNzUwOTI0MjMiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI0MTQ4MTIwNzQyMDk2NDc0NjQxIj4i4La04LeK4oCN4La74LeA4Lea4LeB4LeK4oCN4La64Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4i4La24LeS4Lat4LeU4La04LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4La24LeS4Lat4LeU4La04LatIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4LaF4LeD4Lax4LeK4Lax4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44Laa4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC2uOC2n+C3kuC2seC3iiBWUE4g4LeD4Laa4LeK4oCN4La74LeT4La6IOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLgtqLgt4/gtr3gtrog4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0X2xvbmciIG1zZ2lkPSI2NDA3MzUxMDA2MjQ5MTc0NDczIj4iPHhsaWZmOmcgaWQ9IlNFU1NJT04iPiVzPC94bGlmZjpnPiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3lOC2q+C3ki4g4Lai4LeP4La94La6IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiLgt4Pgt5Dgtrjgt4Dgt5LgtqfgtrggVlBOIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5ngtrjgt5LgtrHgt4rigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGVkIiBtc2dpZD0iODIwMjY3OTY3NDgxOTIxMzkzMSI+IuC2seC3kuC2u+C2reC3lOC2u+C3lOC3gOC2uCBWUE4g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fZXJyb3IiIG1zZ2lkPSI2MDA5MjQ5ODE0MDM0NzA4MTc1Ij4i4LeD4LeQ4La44LeA4LeS4LanIOC3g+C2muC3iuKAjeC2u+C3kuC2uiBWUE4g4Lav4Led4LeC4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2NvbmZpZyIgbXNnaWQ9IjY0MTU4OTkxNTA2NzE1Mzc5NzAiPiLgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1cGxvYWRfZmlsZSIgbXNnaWQ9IjI4OTc5NTcxNzIzNjY3MzA0MTYiPiLgtpzgt5zgtrHgt5Tgt4Ag4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fZmlsZV9jaG9zZW4iIG1zZ2lkPSI2MzYzNjQ4NTYyMTcwNzU5NDY1Ij4i4Lac4Lec4Lax4LeU4LeA4Laa4LeKIOC2reC3neC2u+C3j+C2nOC3meC2sSDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXNldCIgbXNnaWQ9IjI0NDgxNjgwODA5NjQyMDk5MDgiPiLgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3VibWl0IiBtc2dpZD0iMTYwMjMzNTU3MjA4OTkxMTk0MSI+IuC2uuC3nOC2uOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXJfbW9kZV9kaXNhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNjQ3NjgyMTIwMDM4NjQzMTYiPiLgtrjgt53gtqfgtrvgt4og4La74LauIOC2huC2muC3j+C2u+C2uiDgt4Pgtrbgtr0g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4MDM1MjMwNTM3NTYzNTAzMjYyIj4i4La44Led4Lan4La74LeKIOC2u+C2riDgtobgtprgt4/gtrvgtrrgt5ngtrHgt4og4La04LeS4Lan4LeA4LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE0NjY5NDIzNDM5ODIwMjYwMSI+IuC2p+C3meC2r+C2u+C3kuC2seC3iiDgt4Tgt50g4LeE4Lec4Lan4LeK4LeD4LeK4La04Lec4Lan4LeKIOC3g+C2muC3iuKAjeC2u+C3k+C2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNjg1NzAzMTc2MDEwMzA2Mjk4MiI+IuC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiLgtobgtrTgt4Pgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXh0X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEwODA1NTUxMDQ2Nzc5OTI0MDgiPiLgtrjgt5Pgtr3gtp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJza2lwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEyNzUzNjIyOTk0NzE2MzE4MTkiPiLgtrjgtp8g4LeE4La74LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0ODkwODk0MjY3NDU0ODY3Mjc2Ij4i4LaJ4LeE4LeFIOC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4La34LeP4LeA4LeS4Lat4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjMzNDA4MjIyMjg1OTkzMzc3NDMiPiLgtqLgtoLgtpzgtrgg4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2reC2uiDgtpzgt5DgtrEg4Lat4LeAIOC2r+C3kOC2seC2nOC3kOC2seC3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2MjY5NTQxODk3NzI5NzgxMzMyIj4i4Lai4LaC4Lac4La4IOC2r+C2reC3iuC2rSDgt4Pgt5Pgtrjgt4/gt4Ag4LaJ4Laa4LeK4La44LeA4LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjU0NDM0NTczMjEzNTQ5MDcxODEiPiLgtqLgtoLgtpzgtrgg4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2reC2uiDgtpzgt5DgtrEg4Lat4LeAIOC2r+C3kOC2seC2nOC3kOC2seC3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX21hdGNoZXMiIG1zZ2lkPSI4MTI5NDIxOTA4OTE1ODQwNzM3Ij4i4Lac4LeQ4La94La04LeT4La44LeKIOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfb25fcGFnZSIgbXNnaWQ9IjE5NDY3OTkyMzM4MjI4MjAzODQiPiLgtrTgt5Lgtqfgt5Tgt4Dgt5ngt4Tgt5Ig4LeD4LeZ4LeA4LeT4La4Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJtYXRjaGVzX2ZvdW5kIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODE2NzE0NzA4MTEzNjU3OTQzOSI+IuC2nOC3kOC3heC2tOC3k+C2uOC3iiAxIOC2uuC3kiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDY0MTg3Mjc5NzA2NzYwOTE3NyI+Ijx4bGlmZjpnIGlkPSJUT1RBTCI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiA8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tb2RlX2RvbmUiIG1zZ2lkPSI3MjE3NTgxNjQwNDYxOTIyMjg5Ij4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgtpzgt5Dgtr3gt4Dgt5PgtrguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMyNzg5NDk5ODQwOTUzNzE5MCI+IlNEIOC2tOC2rSDgtpzgtr3gt4Dgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2uOC2muC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4iU0Qg4La04LatIOC2uOC2muC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgtrjgt5Dgtprgt5Lgtrog4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMTUyNDg2OTY2NDQ1MTA5MzUiPiJTRCDgtrTgtq0g4La44LeQ4Laa4LeT4La44LanIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4i4Lac4LeQ4La94LeA4LeT4La44LanIOC2tOC3meC2uyBTRCDgtrTgtq0g4LaJ4LeA4Lat4LeK4Laa4La7IOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2uOC3miDgt4DgtrHgt4Dgt5Lgtqcg4La04La74LeT4Laa4LeK4LeC4LePIOC2muC2u+C2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzM0NzYyNTAzOTA0ODI3NDgxIj4iU0Qg4La04LatIOC2r+C3kOC2seC3iiDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4La74La44LeS4Lax4LeKIOC2tOC3gOC2reC3ky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yZW1vdmVkIiBtc2dpZD0iNzAwMTUyNjkwNTA1Nzk1MjA5NyI+IlNEIOC2tOC2rSDgtongt4Dgtq3gt4og4Laa4La7IOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNTgzMDgxNDM0OTI1MDgzNDIyNSI+IuC2tOC2u+C3kuC2nOC2q+C2muC2uuC2muC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4Lav4LeQ4Lax4LeKIFVTQiDgtobgtqDgtrrgtrHgtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzA2MTMwNTY4MTMzNTQwNDM1Ij4iU0Qg4La04LatIOC2r+C3kOC2seC2pyDgtrTgtrvgt5Lgtpzgtqvgtprgtrrgtprgt5LgtrHgt4og4La04LeP4LeA4LeS4Lag4LeK4Lag4LeSIOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV91bmtub3duX3N0YXRlIiBtc2dpZD0iNzI5MTkyNzgyMTk3MjkwMzg1Ij4i4La24LeP4LeE4LeS4La7IOC2uOC3j+C2sOC3iuKAjeC2uuC2uiDgtrHgt5zgtq/gtrHgt4rgtrHgt48g4LaF4LeA4LeD4LeK4Lau4LeP4LeA4LeaIOC2tOC3gOC2reC3kuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZSIgbXNnaWQ9IjE3Nzg2ODY2MTgyMzAwMTE5NjQiPiLgtrbgt5ngtq/gt4/gtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kIiBtc2dpZD0iNDgwODI3MDkwMDMyMjk4NTk2MCI+IuC3g+C3nOC2uuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlYnNlYXJjaCIgbXNnaWQ9IjQzMzcxNTc5Nzc0MDAyMTE1ODkiPiLgt4Dgt5ngtrbgt4og4LeD4LeZ4LeA4LeU4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZF9uZXh0IiBtc2dpZD0iNTc0MjEyNDYxODk0MjE5Mzk3OCI+IuC2uOC3k+C3heC2nyDgt4Pgt5zgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX3ByZXZpb3VzIiBtc2dpZD0iMjE5NjcyMzY2OTM4ODM2MDUwNiI+IuC2tOC3meC2uyDgtpHgtpog4LeD4Lec4La64Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaWNrZXIiIG1zZ2lkPSI1NjIyNjgzOTEyNjE2NDk2MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiDgtpzgt5ngtrHgt4og4LeD4LeK4Lau4LeP4Lax4La6IOC2ieC2veC3iuC2veC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGl0bGUiIG1zZ2lkPSI1NDQ2ODU4NzE3MTU3NDE2ODM5Ij4i4LeD4LeK4Lau4LeP4LaxIOC2ieC2veC3iuC2veC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmTWVzc2FnZSIgbXNnaWQ9IjEzNzQ3MTgwMjMyMjQwMDA3MDIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4gKDx4bGlmZjpnIGlkPSJTRVJWSUNFIj4lMiRzPC94bGlmZjpnPikg4LeA4LeS4LeD4LeS4Lax4LeKIOC2ieC2veC3iuC2veC2sSDgtr3gtq8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNWZXJpZlllcyIgbXNnaWQ9IjIzNDY1NjYwNzI4NjcyMTM1NjMiPiLgtpTgt4Dgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNWZXJpZk5vIiBtc2dpZD0iMTE0NjU2NDkzNzM0NjQ1NDg2NSI+IuC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlcyIgbXNnaWQ9IjUyOTYzMjE4NTA2NjI3NDY4OTAiPiLgtrjgt5Dgtprgt5Pgtrjgt5og4LeD4LeT4La44LeP4LeAIOC2ieC2muC3iuC2uOC3gOC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+Ijx4bGlmZjpnIGlkPSJUWVBFX09GX1NZTkMiPiUyJHM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyA8eGxpZmY6ZyBpZD0iQUNDT1VOVF9OQU1FIj4lMyRzPC94bGlmZjpnPiDgtpzgt5Lgtqvgt5Tgtrjgt5og4La44Laa4LaxIOC2veC2ryDgtoXgtrrgt5Lgtq3gtrggPHhsaWZmOmcgaWQ9Ik5VTUJFUl9PRl9ERUxFVEVEX0lURU1TIj4lMSRkPC94bGlmZjpnPiDgtprgt4og4LaH4LatLiDgtpTgtrbgtqcg4Laa4LeU4La44Laa4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19yZWFsbHlfZGVsZXRlIiBtc2dpZD0iMjU3MjYwMDEwMzEyMjU5NjI0MyI+IuC2heC2uuC3kuC2reC2uCDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3VuZG9fZGVsZXRlcyIgbXNnaWQ9IjI5NDEzMTczNjA2MDAzMzg2MDIiPiLgtrjgt5Dgtprgt5Pgtrjgt4og4LaF4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfZG9fbm90aGluZyIgbXNnaWQ9IjM3NDM3NjQ3NDA0MzA4MjE4NDUiPiLgtq/gt5DgtrHgtqcg4Laa4LeS4LeD4LeS4LeA4Laa4LeKIOC2seC3nOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9hY2NvdW50X2xhYmVsIiBtc2dpZD0iNTY1NTIwMzA4OTc0NjQyMzkyNyI+IuC2nOC3kuC2q+C3lOC2uOC2muC3iiDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfYWNjb3VudF9sYWJlbCIgbXNnaWQ9IjI5MzUyNjczNDQ4NDk5OTM1NTMiPiLgtpzgt5Lgtqvgt5Tgtrjgtprgt4og4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjM2MTE5ODI4OTQ4NTM0MzU4NzQiPiLgtpzgt5Lgtqvgt5Tgtrjgtprgt4og4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjI0MTIwNzIyNzI4MzIyODQzMTMiPiLgt4Dgt5Dgtqngt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9kZWNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iNDc2MDUwNzc4Mzg2Nzc5MDY3Ij4i4LaF4Lap4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9tb2RlIiBtc2dpZD0iMzA3MzEwMTA2NzQ0MTYzODQyOCI+Ijx4bGlmZjpnIGlkPSJWQUxVRSI+JXM8L3hsaWZmOmc+IOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrsg4La74Laz4LeA4LePIOC3g+C3kuC2p+C3kuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfYWN0aW9uIiBtc2dpZD0iOTEwMTQ3MzA0NTg5MTgzNTQ5MCI+IuC3gOC3kOC2qeC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LeE4La94LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEg4LeD4LeEIOC2heC2qeC3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeE4La94LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X21pbnV0ZV9idXR0b24iIG1zZ2lkPSI4ODY1ODg1MTE0MDI4NjE0MzIxIj4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeU4LeA4Laa4LeKIOC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9IjYyNDY4MzQ5MzcwODA2ODQ3OTEiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5Tgt4Ag4LaF4Lap4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjM2NTIwNTYwNTU4MTAyMjMxMzkiPiLgtrTgt5Dgtrog4LeA4LeQ4Lap4LeS4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X2hvdXJfYnV0dG9uIiBtc2dpZD0iMTM3NzQ3OTg2MzQyOTIxNDc5MiI+IuC2tOC3kOC2uiDgtoXgtqngt5TgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfc2V0X3BtX2J1dHRvbiIgbXNnaWQ9IjQxNDc1OTA2OTYxNTEyMzA4NjMiPiLgtrQu4LeALuC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uIiBtc2dpZD0iODMwMjE0MDM1MzUzOTQ4Njc1MiI+IuC2tOC3mS7gt4AuIOC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+IuC2uOC3j+C3g+C2uiDgt4Dgt5Dgtqngt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X21vbnRoX2J1dHRvbiIgbXNnaWQ9IjE4MzI2OTg5OTU1NDE3MjYwMTkiPiLgtrjgt4/gt4Pgtrrgtprgt4og4LaF4Lap4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNzEzMDQ2NTQxMjMwODE3MzkwMyI+IuC2r+C3gOC3gyDgt4Dgt5Dgtqngt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI0MTMxODgxNTIxODE4NzUwMDMxIj4i4Lav4LeA4LeDIOC2heC2qeC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI2MzE4Njk3Mzg0MzEwODA4ODk5Ij4i4LeA4LeD4La7IOC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI0NDgyMDIxODEzNDkxMTIxNzE3Ij4i4LeA4LeD4La7IOC2heC2qeC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuC2heC3gOC2veC2guC2nOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLgtobgtprgt4/gtrvgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IuC2uuC3meC2r+C3lOC2uOC2muC3iiDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLgt4Pgtrjgtp8g4La24LeZ4Lav4LeP4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4g4LeD4La44Laf4LeS4Lax4LeKIOC2tuC3meC2r+C3jyDgtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i4LeD4La74LeK4La04LarIOC3hOC3kOC2qeC2veC2ui4g4LeD4LeK4La04La74LeK4LeBIOC2muC2uyDgtrvgtrPgt4Dgt48g4LeD4LeS4Lan4LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC2i+C2qeC2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4La04LeE4La94LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgt4Dgtrjgtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgtq/gtprgt5Tgtqvgtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuC2heC2n+C3lOC2vSDgtoXgtrvgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4Laa4LeQ4La44La74LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuC2seC3kuC3hOC2rCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLgt4Hgtrbgt4rgtq8g4LeD4Laa4LeK4oCN4La74LeT4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4LeD4LeZ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgt4Pgt4rgt4Dgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLgtrjgt5TgtrvgtrTgtq8g4La64Lat4LeU4La74LeUIOC2muC3kuC2uuC3gOC2seC3lCDgtofgt4Pgt5Pgtrjgtqcg4LaJ4LeD4LeKIOC2tuC2q+C3lOC3gOC2muC3iiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IuC2seC3kOC3gOC2reC3lOC2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MjkzNjAwNDk2NjAxNDkwMjE2Ij4i4La44LeU4La94LeKIOC2tOC3kuC2p+C3lOC3gOC2pyDgt4PgtoLgtqDgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl91cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyMzc0OTY1NjI5NTIxNTI1ODkiPiLgtongt4Tgtr3gtqcg4LeD4LaC4Lag4LeP4La94Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tZW51X292ZXJmbG93X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjI5NTY1OTAzNzUwOTAwODQ1MyI+IuC2reC3gOC2reC3iiDgt4Dgt5Lgtprgtr3gt4rgtrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNzk2NTk4NDM2MDkwMzY5MzkwMyI+IiUxJHMsICUyJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfc3VidGl0bGVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNjk4NTU0NjUzMDQ3MTc4MDcyNyI+IiUxJHMsICUyJHMsICUzJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX2ludGVybmFsIiBtc2dpZD0iNDg5MTkxNjgzMzY1NzkyOTI2MyI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4iU0Qg4La04LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2IiIG1zZ2lkPSIzMDE3OTU0MDU5NTM4NTE3Mjc4Ij4iVVNCIOC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dHJhY3RfZWRpdF9tZW51X2J1dHRvbiIgbXNnaWQ9Ijg5NDA0Nzg3MzA0OTY2MTAxMzciPiLgt4PgtoLgt4Pgt4rgtprgtrvgtqvgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTk1NTYzODg2MjEyMjIzMjM0MiI+IuC2r+C2reC3iuC2rSDgtrfgt4/gt4Dgt5Lgtq3gt48g4LaF4LeA4LeA4LeP4Lav4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX2JvZHkiIG1zZ2lkPSIyODE0NjczNTUxNDcxOTY5OTU0Ij4i4La34LeP4LeA4LeS4Lat4La6IOC3g+C3hCDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4La24LeQ4La94LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF90aXRsZSIgbXNnaWQ9IjcwOTMzMzQ0MTk1MTg3MDY2ODYiPiIyRy0zRyDgtq/gtq3gt4rgtq0g4LaF4La24La94La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF90aXRsZSIgbXNnaWQ9Ijc2MzY0ODk0MzY4MTk0NzA3NjEiPiI0RyDgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF90aXRsZSIgbXNnaWQ9Ijc4Njk0MDI1MTkzOTE2MzE4ODQiPiLgtqLgtoLgtpzgtrgg4Lav4Lat4LeK4LatIOC2heC2tuC2vSDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3RpdGxlIiBtc2dpZD0iODk5MjE1NDczNjQ0MTI4NDg2NSI+IldpLUZpIOC2r+C2reC3iuC2rSDgtoXgtrbgtr0g4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfYm9keSIgbXNnaWQ9IjMzMTc5NjQ3MDY5NzM2MDEzODYiPiLgt4Pgtrbgtr0g4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iNzAyNjczOTEyMTEzODAwNTIzMSI+IjJHLTNHIOC2r+C2reC3iuC2rSDgt4Pgt5Pgtrjgt4/gt4Ag4LaJ4Laa4LeK4La44LeA4LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiI0RyDgtq/gtq3gt4rgtq0g4LeD4LeT4La44LeP4LeAIOC2ieC2muC3iuC2uOC3gOC3jyDgtrrgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjI3OTI0MDU3MjE2NTQxMjE2OCI+IuC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4LeD4LeT4La44LeP4LeAIOC2ieC2muC3iuC2uOC3gOC3jyDgtrrgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI4NzQzODU2MDA2Mzg0ODI1OTc0Ij4iV2ktRmkg4Lav4Lat4LeK4LatIOC3g+C3k+C2uOC3j+C3gCDgtongtprgt4rgtrjgt4Dgt48g4La64LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfc25vb3plZF9ib2R5IiBtc2dpZD0iNzAzNTQ5MDI3ODI5ODQ0MTc2NyI+IuC3g+C2s+C3hOC2seC3iiDgtprgt4Ug4LeD4LeT4La44LeP4LeA4LanIOC3gOC2qeC3jyA8eGxpZmY6ZyBpZD0iU0laRSI+JXM8L3hsaWZmOmc+IOC3gOC3kOC2qeC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4i4La04LeD4LeU4La24LeS4La44LeKIOC2r+C2reC3iuC2rSDgt4Pgt5Lgtrjgt48g4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+IuC3g+C3k+C2uOC3jyDgtprgt5Lgtrvgt5Pgtrgg4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlIiBtc2dpZD0iNjUxMDA0MDQ4NjA0OTIzNzYzOSI+IuC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgt4Pgt4Tgtq3gt5LgtprgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGVfaXNfdmFsaWQiIG1zZ2lkPSI2ODI1MjYzMjUwNzc0NTY5MzczIj4i4La44LeZ4La4IOC3g+C3hOC2reC3kuC2muC2uiDgt4Dgtr3gtoLgtpzgt5Tgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX3RvIiBtc2dpZD0iNDU0MjM5NDgwMjc0OTIxMDMyIj4i4La94La24LeP4Lav4LeU4Lax4LeK4Lax4LeaOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbW1vbl9uYW1lIiBtc2dpZD0iMjIzMzIwOTI5OTQzNDE3MjY0NiI+IuC2tOC3nOC2r+C3lCDgtrHgt4/gtrjgtro6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnX25hbWUiIG1zZ2lkPSI2OTczNTYxMTkwNzYyMDg1MjM2Ij4i4LeD4LaC4LeA4LeS4Law4LeP4Lax4La6OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ191bml0IiBtc2dpZD0iNzI2NTk4MTg5MDQyMjA3MDM4MyI+IuC3g+C2guC3gOC3kuC2sOC3j+C2seC3j+C2reC3iuC2uOC2miDgtpLgtprgtprgtro6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX2J5IiBtc2dpZD0iMjY0NzU4NDk4ODA1NzQ4MTU2NiI+IuC2veC2tuC3j+C2r+C3meC2sSDgtr3gtq/gt4rgtq/gt5o6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idmFsaWRpdHlfcGVyaW9kIiBtc2dpZD0iODgxODg4NjEzNzU0NTk4MzExMCI+IuC3gOC2veC2guC2nOC3lOC2reC3j+C3gOC2ujoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfb24iIG1zZ2lkPSI1ODk1MDE3NDA0MzYxMzk3MjMyIj4i4Lax4LeS4Laa4LeU4Lat4LeKIOC2muC2u+C2sSDgtr3gtq/gt4rgtq/gt5o6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXhwaXJlc19vbiIgbXNnaWQ9IjM2NzYyNDI5NDk5MTU5NTk4MjEiPiLgtprgtr3gt4og4LaJ4Laa4LeU4Lat4LeKIOC3gOC2seC3iuC2seC3mjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4i4LaF4Lax4LeU4Laa4LeK4oCN4La74La44LeP4LaC4Laa4La6OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50cyIgbXNnaWQ9IjQ1MTYwMTk2MTk4NTA3NjMwNDkiPiLgtofgtp/gt5Lgtr3gt5Ig4LeD4La94Laa4LeU4Lar4LeUOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiJTSEEtMjU2IOC2h+C2n+C3kuC2veC3kuC3g+C2veC2muC3lOC2qzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IlNIQS0xIOC2h+C2n+C3kuC2veC3kiDgt4Pgtr3gtprgt5Tgtqs6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X3NlZV9hbGwiIG1zZ2lkPSI0MjkyNTY5MzgzOTc2NjM2MjAwIj4i4LeD4LeS4La64La94LeK4La9IOC2tuC2veC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjQ3MTAwMTM4NjQ5NzQwNDA2MTUiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrgg4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfYWN0aW9uX3Byb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI1MjQ3Njg0NDM1OTc5MTQ5MjE2Ij4i4LeD4La44LafIOC2tuC3meC2r+C3j+C2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxpc3RfZGVsaW1ldGVyIiBtc2dpZD0iMzk3NTExNzU3MjE4NTQ5NDE1MiI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VuZGluZyIgbXNnaWQ9IjMyNDU2NTM2ODEwMDgyMTgwMzAiPiLgtrrgt4Dgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hCcm93c2VyRGVmYXVsdCIgbXNnaWQ9IjIwNTc5NTE5NDcyOTc2MTQ3MjUiPiLgtrbgt4rigI3gtrvgt4Dgt5Tgt4Pgtrvgtrog4Lav4LeS4La64Lat4LeKIOC2muC2u+C2seC3iuC2seC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJTZXR1cENhbGxEZWZhdWx0IiBtc2dpZD0iNTgzNDk0ODQ2OTI1Mzc1ODU3NSI+IuC2h+C2uOC2reC3lOC2uCDgtrTgt5Lgt4Xgt5LgtpzgtrHgt4rgtrHgt4Dgt4/gtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX2Fsd2F5cyIgbXNnaWQ9IjgwMTc3NzA3NDc4MDE0OTQ5MzMiPiLgt4Pgt5Dgtrgg4LeA4LeS4Lan4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX29uY2UiIG1zZ2lkPSIyNDA0NjQ0Nzk3MTQ5MTczNzU4Ij4i4LaR4Laa4LeKIOC3gOC3j+C2u+C2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYxNzA1Mzg5ODE2NzEyNzQ3MSI+IuC2p+C3kOC2tuC3iuC2veC2p+C3iuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQyMzkyOTEyNzM0MjAxNDAxMjMiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWVfaGVhZHBob25lcyIgbXNnaWQ9IjgxMTk5NzE4NDM4MDM0MzkxMTAiPiLgtongt4Pgt4og4La24Lar4LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2RvY2tfc3BlYWtlcnMiIG1zZ2lkPSI2MjQwNjAyOTgyMjc2NTkxODY0Ij4i4Lax4LeP4Lav4LaaIOC2qeC3nOC2muC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X21lZGlhX3JvdXRlX25hbWVfaGRtaSIgbXNnaWQ9IjI0NTA5NzAzOTkwMjM0NzgwNTUiPiJIRE1JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3geC3iuKAjeC2u+C3gOC3iuKAjeC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i4La74LeQ4LeE4LeQ4Lax4LeKIOC2u+C3hOC3kuC2rSDgtq/gtrvgt4rgt4HgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i4La44LeP4Law4LeK4oCN4La6IOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLgtrTgtrvgt5Lgtr3gt53gtprgtrHgtrog4Laa4La74La44LeS4Lax4LeK4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3meC2uOC3kuC2seC3iuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i4La94La24LeP4Lac4LatIOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNjczOTg5OTk2MjY4MTg4NjQwMSI+IuC2veC2tuC3j+C2nOC2rSDgtrHgt5zgt4Tgt5DgtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfaW5fdXNlIiBtc2dpZD0iNDUzMzc4NjAzMTA5MDE5ODA2MyI+IuC2t+C3j+C3gOC3kuC2reC2uuC3miDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfYnVpbHRfaW5fZGlzcGxheV9uYW1lIiBtc2dpZD0iMjU4MzEzNDI5NDI5MjU2Mzk0MSI+IuC2reC3kuC3heC3kOC2veC3kiDgtq3gt5LgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfaGRtaV9kaXNwbGF5X25hbWUiIG1zZ2lkPSIxNTU1MjY0NTU5MjI3NDcwMTA5Ij4iSERNSSDgtq3gt5LgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i4LaL4Lap4LeQ4Lat4LeS4La74LeS4La6ICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwg4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLgtrHgt5zgtrvgt5Dgt4Tgt5DgtrHgt4og4LeD4LaC4Lav4La74LeK4LeB4Laa4La6IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLgt4Dgt5ngtrHgtq3gt4og4LaL4La04LeP4LaC4Lac4La64Laa4LeKIOC2uOC2rSDgtrjgt5ngtrgg4Lat4LeS4La74La6IOC2tOC3meC2seC3iuC3gOC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLgt4Dgt5Lgt4PgtrHgt4rgtrDgt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4La74Lan4LeP4LeAIOC2heC2uOC2reC2muC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i4LeA4LeQ4La74Lav4LeSIOC2u+C2p+C3j+C3gOC2muC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IuC3gOC3kOC2u+C2r+C3kiDgtrjgt5TgtrvgtrTgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIOC2keC2miDgt4Dgt5Dgtrvgtq/gt5Lgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+IuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRkPC94bGlmZjpnPiDgtqcg4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i4LaU4La24Lac4LeaIOC2u+C2p+C3j+C3gCDgtoXgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJTSU0gUElOIOC2h+C2reC3lOC2veC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IlBJTiDgtpHgtpog4LaH4Lat4LeU4LeF4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiLgtrjgt5TgtrvgtrTgtq/gtrog4LaH4Lat4LeU4LeF4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IuC2r+C3kOC2seC3iiBTSU0g4LaR4LaaIOC2heC2tuC2vSDgtprgtrsg4LaH4LatLiDgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4La64LeP4La44LanIFBVSyDgtprgt5rgtq3gtrog4La64Lec4Lav4Lax4LeK4LaxLiDgt4Dgt5Lgt4Pgt4rgtq3gtrsg4LeD4Laz4LeE4LePIOC3gOC3j+C3hOC2muC2uuC3jyDgtoXgtrjgtq3gtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuC2heC2tOC3muC2muC3iuC3guC3kuC2rSBQSU4g4Laa4Lea4Lat4La6IOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4LaF4La04Lea4Laa4LeK4LeC4LeS4LatIFBJTiDgtprgt5rgtq3gtrog4LeD4LeK4Lau4LeS4La7IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNIOC2tOC2rSDgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i4LeA4LeQ4La74Lav4LeSIFBJTiDgtprgt5rgtq3gtrrgtprgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4LaF4LaC4LaaIDQg4LeD4LeS4LanIDgg4LaF4Lat4La7IOC3gOC2sSBQSU4g4LaR4Laa4Laa4LeKIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIOC2muC3muC2reC2uiDgt4PgtoLgtpvgt4rigI3gtrrgt48gOCDgtprgt4og4LeE4LedIOC3gOC3kOC2qeC3kiDgt4Dgt5Lgtrog4La64LeU4Lat4LeU4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuC2seC3kuC3gOC3kOC2u+C2r+C3kiBQVUsg4Laa4Lea4Lat4La6IOC2seC3kOC3gOC2rSDgtofgtq3gt5Tgtr3gtq3gt4og4Laa4La74Lax4LeK4LaxLiDgtrHgt5Dgt4Dgtq0g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgt5Lgtrvgt5Pgtrjgt5ngtrHgt4ogU0lNIOC2keC2miDgt4Pgt4rgtq7gt5Lgtrvgt4Dgtrgg4LaF4La24La9IOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIOC2muC3muC2rSDgtpzgt5Dgtr3gtrTgt5Mg4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4La74Lan4LePIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4og4LeA4LeQ4Lap4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrjgtqcsIOC2lOC2tuC2nOC3miBHb29nbGUg4Lac4LeS4Lar4LeU4La4IOC3g+C2uOC2nCDgtrTgt5TgtrvgtrHgtrog4LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC2seC3j+C2uOC2uiAo4LaKLeC2reC3kOC2tOC3keC2vSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IuC2uOC3lOC2u+C2tOC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i4La04LeU4La74Lax4La6IOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4LeA4La94LaC4Lac4LeUIOC2seC3nOC3gOC2sSDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La64Laa4LeKIOC3hOC3nSDgtrjgt5TgtrvgtrTgtq/gtrrgtprgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuC2lOC2tuC2nOC3miDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La6IOC3hOC3nSDgtrjgt5TgtrvgtrTgtq/gtrog4LaF4La44Lat4Laa4LavP1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgt4Dgt5ngtq0g4La64Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IuC2nOC3kuC2q+C3lOC2uCDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4La74La44LeS4Lax4LeK4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLgtpTgtrYgUElOIOC2heC2guC2muC2uiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4LeA4LeQ4La74Lav4LeS4La64LanIOC2p+C2uuC3kuC2tOC3iiDgtprgt5zgtqcg4LaH4LatLlxuXG4g4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtofgtq3gt5Tgt4Xgtq0g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4La44LeU4La74La04Lav4La6IOC2lOC2tiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC2uyDgtofgtq0uIFxuXG7gtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LanIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4LaU4La2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LeaIOC2u+C2p+C3j+C3gCDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaH4LazIOC2h+C2rS4gXG5cbuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IuC2lOC2tiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaF4LeA4LeD4LeK4Lau4LePIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La7IOC2h+C2rS4g4LaF4LeA4LeD4LeK4Lau4LePIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtprgt4Ag4LaL4Lat4LeK4LeD4LeEIOC2muC3kuC2u+C3k+C2uOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4La44LeU4La94LeKIOC2reC2reC3iuC3gOC2uuC2pyDgtrHgt5Dgt4Dgtq0g4La04Lat4LeKIOC3gOC2sSDgtoXgtq3gtrsg4LeD4LeS4La64La94LeUIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeSIOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i4LaU4La2IOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC3gOC3j+C2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgtprgtq/gt5Mg4LeA4LeQ4La74Lav4LeTIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2seC2uuC2seC3iiDgtpzgt5ngtrEg4Lat4LeS4La24LeaLiDgtq3gt4Dgtq3gt4og4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2sSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Laa4La74LeK4La44LeP4Lax4LeK4LatIOC3geC3j+C2veC3j+C3gOC3miDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq/gtqcg4La64LeF4LeSIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC2sSDgtoXgtq3gtrsg4LeD4LeS4La64La94LeU4La4IOC2tOC2u+C3kuC3geC3k+C2veC2miDgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeSIOC3gOC3kyDgtrrgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtpTgtrYg4LeA4LeQ4La74Lav4LeSIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2sSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC2nOC3meC2sSDgtofgtq0uIOC2r+C3kOC2seC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Laa4La74LeK4La44LeP4Lax4LeK4LatIOC3geC3j+C2veC3jyDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq8g4LeA4LeZ4LatIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4Laa4LeZ4La74LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IuC2lOC2tiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgt4Dgt4/gtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC2muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Mg4La04LeK4oCN4La74La64Lax4LeK4Lat4La64Lax4LeKIOC2nOC3meC2sSDgtq3gt5Lgtrbgt5ouIOC2r+C3kOC2seC3iiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Laa4La74LeK4La44LeP4Lax4LeK4Lat4LeB4LeP4La94LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C2pyDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt5Qg4La94La24La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgtpTgtrYg4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3kuC2uOC3miDgtrvgtqfgt4/gt4AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4Lat4LeP4LeA4Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtofgtrMg4LaH4LatLiDgtq3gt4Dgtq3gt4og4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3j+C3hCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2nOC3kuC2q+C3lOC2uCDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74La44LeS4Lax4LeKIOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtpTgtrbgtqcg4La04LeA4LeD4Lax4LeUIOC2h+C2rS5cblxuIOC2seC3kOC3gOC2rSDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LaH4LazIOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaU4La24Lac4LeaIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4og4La94LeS4La04LeS4Lax4La6IOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LaU4La24Lac4LeZ4Lax4LeKIOC2heC3g+C2uuC3ki5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgtrHgt4og4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IuC2ieC3gOC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlX21lZGlhX3ZvbHVtZV93YXJuaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMyNDE2MTkzOTQ3NTQ3ODA2NiI+IuC2seC3kuC2u+C3iuC2r+C3muC3geC3kuC2rSDgtrjgtqfgt4rgtqfgtrjgt5ngtrHgt4og4LaJ4LeE4LeF4LanIOC3geC2tuC3iuC2r+C2uiDgt4Dgt5Dgtqngt5Ig4Laa4La74Lax4LeA4LavP1xu4LeA4LeQ4Lap4LeSIOC2muC3j+C2veC2uuC2muC3iiDgtongt4Tgt4Ug4LeB4La24LeK4Lav4La64Laa4LeKIOC3geC3iuKAjeC2u+C3gOC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgt5ngtrHgt4og4LaU4La24Lac4LeaIOC3geC3iuKAjeC2u+C3gOC2seC2uuC2pyDgt4Tgt4/gtrHgt5Ig4LeA4LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250aW51ZV90b19lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE2MjY0MjczNzIzMTYwNzAyNTgiPiLgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Dgtrog4LeD4La24La9IOC2muC3kuC2u+C3k+C2uOC2pyDgtofgtp/gt5Lgtr3gt5Ig4Lav4LeZ4Laa4Laa4LeKIOC2tOC3hOC3heC2pyDgtrvgtrPgt4Dgt48g4LeD4LeS4Lan4LeS4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZW5hYmxlZCIgbXNnaWQ9IjEzODE5NzIwNDg1NjQ1NDc2ODUiPiLgtrTigI3gt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Ag4LeD4La24La9IOC2muC2u+C2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2FjY2Vzc2liaWxpdHlfY2FuY2VsZWQiIG1zZ2lkPSIzODMzOTIzMjU3OTY2NjM1NjczIj4i4La04oCN4LeK4oCN4La74LeA4Lea4LeB4LeK4oCN4La64Lat4LeP4LeAIOC2heC3gOC2veC2guC2nOC3lCDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4i4Lav4LeQ4Lax4LanIOC3g+C3kuC2p+C3kuC2sSDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgt48gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im93bmVyX25hbWUiIG1zZ2lkPSIyNzE2NzU1NDYwMzc2MDI4MTU0Ij4i4LeE4LeS4La44LeS4Laa4La74LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXJyb3JfbWVzc2FnZV90aXRsZSIgbXNnaWQ9IjQ1MTAzNzMwODMwODI1MDAxOTUiPiLgtq/gt53gt4LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm9fcmVzdHJpY3RlZF9hY2NvdW50cyIgbXNnaWQ9IjU3Mzk0NjMyNDk2NzM3Mjc3MzYiPiLgt4Pgt5Pgtrjgt48g4LeD4LeE4LeS4LatIOC2tOC3kOC2reC3kuC2muC2qSDgt4PgtrPgt4Tgt48g4LeA4LaxIOC2nOC3kuC2q+C3lOC2uOC3iiDgt4Dgt5ngtq0g4La44LeZ4La4IOC2uuC3meC2r+C3lOC2uCDgt4Pgt4Tgtrog4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX25vdF9mb3VuZCIgbXNnaWQ9IjM0MjkxNDE4NTM0OTg5MjczNzkiPiLgtrjgt5ngtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeAIOC3hOC3g+C3lOC2u+C3lOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtprgt4og4LeD4Lec4La64LeP4Lac4Lat4LeK4Lat4LeaIOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJldm9rZSIgbXNnaWQ9IjU0MDQ0NzkxODUyMjgyNzE1ODYiPiLgtoXgt4Tgt53gt4Pgt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMCIgbXNnaWQ9Ijc4NzU0Mjc0ODk0MjA4MjE3OTMiPiJJU08gQTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExIiBtc2dpZD0iMzc2MDczNDQ5OTA1MDg3NTM1NiI+IklTTyBBMSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTIiIG1zZ2lkPSI1OTczMjY2Mzc4MDIwMTQ0MzgyIj4iSVNPIEEyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMyIgbXNnaWQ9IjEzNzM0MDcxMDU2ODczMDA4ODQiPiJJU08gQTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E0IiBtc2dpZD0iNjY4OTc3MjgwNzk4MjU5NzI1NCI+IklTTyBBNCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTUiIG1zZ2lkPSI1MzUzNTQ5NjUyMDE1NzQxMDQwIj4iSVNPIEE1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNiIgbXNnaWQ9Ijg1ODUwMzgwNDg2NzQ5MTE5MDciPiJJU08gQTYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E3IiBtc2dpZD0iNjY0MTgzNjcxNjk2MzgzOTExOSI+IklTTyBBNyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTgiIG1zZ2lkPSI3NTcxMTM5NDM3NDY1NjkzMzU1Ij4iSVNPIEE4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOSIgbXNnaWQ9IjEzNzg0NTU4OTE5NTcxMTUwNzkiPiJJU08gQTkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExMCIgbXNnaWQ9IjI0ODA3NDc0NTc0Mjk0NzUzNDQiPiJJU08gQTEwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMCIgbXNnaWQ9IjM5NjU5MzUwOTc2NjExMDgwMzkiPiJJU08gQjAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxIiBtc2dpZD0iMjUwNTc1MzI4NTAxMDExNTQzNyI+IklTTyBCMSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjIiIG1zZ2lkPSI4NzYzODc0NzA5ODU5NDU4NDUzIj4iSVNPIEIyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMyIgbXNnaWQ9IjQyMTA1MDY2ODgxOTE3NjQwNzYiPiJJU08gQjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I0IiBtc2dpZD0iNTc0OTQwNDE2NTg4ODUyNjAzNCI+IklTTyBCNCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjUiIG1zZ2lkPSI3NjQwNjI3NDE0NjIxOTA0NzMzIj4iSVNPIEI1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNiIgbXNnaWQ9IjczNDI5ODg4NjQ3MTI3NDg1NDQiPiJJU08gQjYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I3IiBtc2dpZD0iNTA2OTg0NDA2NTIzNTM4MjQyOSI+IklTTyBCNyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjgiIG1zZ2lkPSI3MzE2ODE4OTIyMjc4Nzc5Nzc0Ij4iSVNPIEI4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOSIgbXNnaWQ9IjU0MTQ3MjcwOTQwMjY1MzIzNDEiPiJJU08gQjkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxMCIgbXNnaWQ9IjUyNTEyNTM3MzE4MzIwNDgxODUiPiJJU08gQjEwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMCIgbXNnaWQ9IjQwMDMxMzgzNDI2NzE5NjQyMTciPiJJU08gQzAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MxIiBtc2dpZD0iMTkzNTE4ODA2MzM5MzU1MzAwOCI+IklTTyBDMSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzIiIG1zZ2lkPSIzMTk3MzA3OTY5NzEyMDY5OTA0Ij4iSVNPIEMyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMyIgbXNnaWQ9IjQzMzU4MjYwODczMjE5MTM1MDgiPiJJU08gQzMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M0IiBtc2dpZD0iMzc0NTYzOTU5ODI4MTAxNTAwNSI+IklTTyBDNCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzUiIG1zZ2lkPSI4MjY5NDU3NzY1ODIyNzkxMDEzIj4iSVNPIEM1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNiIgbXNnaWQ9IjU2NjY2NjEwNTI2MDM0NjkzMCI+IklTTyBDNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzciIG1zZ2lkPSI4Njc4NDEzMTgwNzgyNjA4NDk4Ij4iSVNPIEM3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jOCIgbXNnaWQ9IjgzOTIzNzYyMDY2MjcwNDE3MzAiPiJJU08gQzgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M5IiBtc2dpZD0iOTE5MTYxMzM3MjMyNDg0NTQwNSI+IklTTyBDOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEwIiBtc2dpZD0iNzMyNzcwOTY5OTE4NDkyMDgyMiI+IklTTyBDMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGV0dGVyIiBtc2dpZD0iNDE5MTgwNTYxNTgyOTQ3Mjk1MyI+IuC2heC2muC3lOC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9ndnJubXRfbGV0dGVyIiBtc2dpZD0iNzg1MzM4MjE5MjY0OTQwNTUwNyI+IuC2u+C2ouC2uuC3miDgtr3gt5LgtrTgt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVnYWwiIG1zZ2lkPSI2Njk3OTgyOTg4MjgzODIzMTUwIj4i4Lax4LeT4Lat4LeK4oCN4La64Lax4LeU4Laa4LeW4La9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2p1bmlvcl9sZWdhbCIgbXNnaWQ9IjM3Mjc3NDM5Njk5MDI3NTg5NDgiPiLgtrTgt4rigI3gtrvgt4/gtq7gtrjgt5Lgtpog4Lax4LeT4Lat4LeS4La44La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2xlZGdlciIgbXNnaWQ9IjI4MTg3MTQ2NDg5NjYwMTIzNiI+IuC2veC3meC2ouC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV90YWJsb2lkIiBtc2dpZD0iNTc3NTk2NjQxNjMzMzU3ODEyNyI+IuC2muC3lOC2qeC3jyDgtrTgt5Tgt4Dgtq3gt4rgtrTgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5jZWxsZWQiIG1zZ2lkPSI3MDkxMjU4Mzc4MTIxNjI3NjI0Ij4i4LaF4LeA4La94LaC4Lac4LeUIOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5ub3Rfd3JpdGUiIG1zZ2lkPSI4MTMyNTA1NDE3OTM1MzM3NzI0Ij4i4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC2veC3kuC3gOC3k+C2uOC3muC2r+C3kyDgtq/gt53gt4Lgtrrgtprgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjYwNDg5MTM4ODAxODQ2MjgxMTkiPiLgtrHgt5zgtq/gtrHgt5MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfYWRtaW5fcGluIiBtc2dpZD0iNzgzNjQzNzMxODk1MTQzOTcwIj4i4La04La74LeS4La04LeP4La94Laa4La64LeP4Lac4LeaIFBJTiDgtpHgtpog4LaH4Lat4LeU4LeF4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9waW4iIG1zZ2lkPSIzMzk1OTUzNDIxMzY4NDc2MTAzIj4iUElOIOC2keC2miDgtofgtq3gt5Tgt4Xgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2luY29ycmVjdCIgbXNnaWQ9Ijg1NzE1MTIwMDM5NTUwNzc5MjQiPiLgt4Dgt5Dgtrvgtq/gt5Lgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfb2xkX3BpbiIgbXNnaWQ9IjE0NjIyMDYyMjU1MTI5MTA3NTciPiLgt4Dgtq3gt4rgtrjgtrHgt4ogUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX25ld19waW4iIG1zZ2lkPSI1OTU5NjA2NjkxNjE5OTU5MTg0Ij4i4Lax4LeAIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jb25maXJtX3BpbiIgbXNnaWQ9Ijg1MDE1MjM4Mjk2MzMxNDYyMzkiPiLgtrHgt4AgUElOIOC2reC3hOC3gOC3lOC2u+C3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY3JlYXRlX3BpbiIgbXNnaWQ9IjgwMTc2MDAwMDAyNjM0NTAzMzciPiLgt4Pgt5Lgtrjgt48g4LeA4LeQ4Lap4LeS4Lav4LeS4La64LeU4Lar4LeUIOC2muC3kuC2u+C3k+C2uOC2pyBQSU4g4LeD4LeP4Lav4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiJQSU4g4Lax4Lec4Lac4LeQ4LeF4La04LeZ4La64LeSLiDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0IiBtc2dpZD0iODE3Mzk4Mjc1NjI2NTc3Nzc5MiI+IlBJTiDgtprgt5Tgtqngt48g4LeA4LeQ4Lap4LeS4La6LiDgtongtr3gtprgt4rgtprgtrjgt4ogNCDgt4Dgtq3gt4og4LeA4LeS4La6IOC2uuC3lOC2reC3lOC2ui4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InJlc3RyX3Bpbl9jb3VudGRvd24iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMTEwNTA5OTUxOTg1NDg2NzUiPiLgtq3gt4Dgtq3gt4og4Lat4Lat4LeK4La04La7IDEg4Laa4LeS4Lax4LeKIOC2uuC3heC3kiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0cmFuc2llbnRfbmF2aWdhdGlvbl9jb25maXJtYXRpb24iIG1zZ2lkPSI0OTA3ODQ0MDQzNjExMTIzNDI2Ij4i4Lat4LeT4La74LeU4LeAIOC2heC2seC3j+C3gOC2u+C2q+C2uuC2pyDgtq3gt5Lgtrvgtrrgt5og4Laa4LeZ4La94LeA4La7IOC2heC2r+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRyYW5zaWVudF9uYXZpZ2F0aW9uX2NvbmZpcm1hdGlvbl9sb25nIiBtc2dpZD0iODA2MTY4NTkyMDUwODA4NjY5NyI+IuC2tOC2r+C3iuC2sOC2reC3kiDgtq3gt5Pgtrvgt5Tgt4Ag4LaF4Lax4LeP4LeA4La74Lar4La64LanIOC2reC3kuC2u+C2uuC3miDgtprgt5ngtr3gt4Dgtrvgt5LgtrHgt4og4LaF4Lav4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjUxNjNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1OTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYnl0ZVNob3J0IiBtc2dpZD0iODM0MDk3Mzg5Mjc0MjAxOTEwMSI+IkIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJraWxvYnl0ZVNob3J0IiBtc2dpZD0iNTk3Mzc4OTc4MzUwNDc3MTg3OCI+IktCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVnYWJ5dGVTaG9ydCIgbXNnaWQ9IjYzNTU4NTE1NzY3NzA0Mjg5MjIiPiJNQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdpZ2FieXRlU2hvcnQiIG1zZ2lkPSIzMjU5ODgyNDU1MjEyMTkzMjE0Ij4iR0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXJhYnl0ZVNob3J0IiBtc2dpZD0iMjMxNjEzMDE4MTU5MTg2OTYyIj4iVEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXRhYnl0ZVNob3J0IiBtc2dpZD0iNTYzNzgxNjY4MDE0NDk5MDIxOSI+IlBCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmlsZVNpemVTdWZmaXgiIG1zZ2lkPSI5MTY0MjkyNzkxNTAwNTMxOTQ5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkczwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iVU5JVCI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bnRpdGxlZCIgbXNnaWQ9IjQ2Mzg5NTY5NTQ4NTI3ODI1NzYiPiImbHQ74Lax4La44LeKIOC2uuC3nOC2r+C3jyDgtrHgt5Dgtq0mZ3Q7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXMiIG1zZ2lkPSI3ODk5ODI5NTE2MDQ4ODEzMjM3Ij4i4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXNfdHdvX2RvdHMiIG1zZ2lkPSIxMjI4MDc4OTk0ODY2MDMwNzM2Ij4i4oClIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIgbXNnaWQ9Ijc2OTQwNjMwNDIwNzk2NzY1MTciPiIo4Lav4LeU4La74Laa4Lau4LaxIOC2heC2guC2muC2uuC2muC3iiDgtrHgt5zgtrjgt5Dgtq0pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5rbm93bk5hbWUiIG1zZ2lkPSIyMjc3NTU2NTQ2NzQyNzQ2NTIyIj4iKOC2seC3nOC2r+C2seC3kykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0Vm9pY2VNYWlsQWxwaGFUYWciIG1zZ2lkPSIyNjYwMDIwOTkwMDk3NzMzMDc3Ij4i4Laa4Lan4LeE4LasIOC2reC3kOC2tOC3keC2vSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRNc2lzZG5BbHBoYVRhZyIgbXNnaWQ9IjI4NTA4ODk3NTQ5MTk1ODQ2NzQiPiJNU0lTRE4xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pRXJyb3IiIG1zZ2lkPSI1MTU0NDk5NDU3NzM5MDUyOTA3Ij4i4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2nOC3kOC2p+C3heC3lOC3gOC2muC3iiDgt4Tgt50g4LaF4LeA4La94LaC4Lac4LeUIE1NSSDgtprgt5rgtq3gtrrgtprgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pRmRuRXJyb3IiIG1zZ2lkPSI1MjI0Mzk4MjE2Mzg1MzE2NDcxIj4i4LeD4LeK4Lau4LeP4LeA4La7IOC2h+C2uOC2reC3k+C2uOC3iiDgtoXgtoLgtpog4LeA4La94LanIOC2tOC2uOC2q+C2muC3iiDgtrjgt5ngt4Tgt5ngtrrgt5Tgtrgg4LeD4LeT4La44LeP4Laa4La7IOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZCIgbXNnaWQ9IjgxNDcyNzgzNDY0MTQ3MTQzMTUiPiLgt4Pgt5rgt4Dgt4/gt4Ag4LeD4La24La9IOC2muC2u+C2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWRGb3IiIG1zZ2lkPSI2ODU2MjI4MTQwNDUzNDcxMDQxIj4i4LeD4Lea4LeA4LeP4LeAIOC3g+C2tuC2veC2uuC3kiwg4LeD4Laz4LeE4LePOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VEaXNhYmxlZCIgbXNnaWQ9IjE5Mzc1NTMyMjY1OTI1MTY0MTEiPiLgt4Pgt5rgt4Dgt4/gt4Ag4LaF4La24La9IOC2muC2u+C2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZVJlZ2lzdGVyZWQiIG1zZ2lkPSI2Mjc1MDE5MDgyNTk4MTAyNDkzIj4i4La94LeS4La64LeP4La04Lav4LeS4LaC4Lag4LeSIOC3gOC3k+C2uCDgt4Pgt4/gtrvgt4rgtq7gtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiLgtrjgt5Dgtprgt5Pgtrgg4LeD4LeP4La74LeK4Lau4LaaIOC3gOC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZEluY29ycmVjdCIgbXNnaWQ9Ijc2MTIyMDg4Mzk0NTAxMjg3MTUiPiLgt4Dgt5Dgtrvgtq/gt5Ig4La44LeU4La74La04Lav4La64Laa4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUNvbXBsZXRlIiBtc2dpZD0iODIzMjUyNzQ5NTQxMTY5ODM1OSI+Ik1NSSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUGluIiBtc2dpZD0iOTAxNTI3NzY0NTU0NjcxMDAxNCI+IuC2lOC2tiDgtqfgtrrgt5LgtrTgt4og4Laa4La74LaxIOC2veC2ryDgtrTgtrvgtqsgUElOIOC2keC2miDgt4Dgt5Dgtrvgtq/gt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUHVrIiBtc2dpZD0iNTQ4NzI1NzY0NzA4MTEzMjIwMSI+IuC2lOC2tiDgtqfgtrrgt5LgtrTgt4og4Laa4La74LaxIOC2veC2ryBQVUsg4LaR4LaaIOC3gOC3kOC2u+C2r+C3kuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IuC2lOC2tiDgtqfgtrrgt5LgtrTgt4og4Laa4La9IFBJTiDgtrHgt5zgtpzgt5Dgt4XgtrTgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFBpbiIgbXNnaWQ9IjM4NTAwMTg0NDUxODc0NzUzNzciPiI0IOC3g+C3kuC2pyA4IOC2r+C2muC3iuC3gOC3jyDgtoXgtoLgtpog4LeD4LeE4LeS4LatIFBJTiDgtpHgtprgtprgt4og4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IuC2heC2guC2miA4IOC2muC3iiDgt4Tgt50g4LaK4LanIOC3gOC3kOC2qeC3kiBQVUsg4LaR4Laa4Laa4LeKIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IuC2lOC2tuC2nOC3miBTSU0g4La04LatIOC2tOC2reC2pyBQVUsg4LaF4Lac4LeU4LeF4LeUIOC3gOC3kOC2p+C3kyDgtofgtq0uIOC2keC2uCDgtoXgtpzgt5Tgtr0g4LaH4La74LeT4La44LanIFBVSyDgtprgt5rgtq3gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJTSU0g4La04Lat4LeaIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrjgtqcgUFVLMiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i4La04LeQ4La44LeS4Lar4LeZ4LaxIOC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNsaXJNbWkiIG1zZ2lkPSI3Nzg0NjczNjczNDQ2ODMzMDkxIj4i4La04LeS4Lan4Lat4LanIOC2uuC2sSDgtoXgtrjgtq3gtrHgt4rgtrHgt4/gtpzgt5ogSUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDZk1taSIgbXNnaWQ9IjUxMjMyMTg5ODkxNDE1NzM1MTUiPiLgtofgtrjgtq3gt5Tgtrgg4LaJ4Lav4LeS4La74LeS4La64LanIOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+IuC2h+C2uOC2reC3lOC2uOC3iiDgtrvgt5DgtrPgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJCYU1taSIgbXNnaWQ9IjQ1NTE5MzA2NzkyNjc3MDU4MSI+IuC2h+C2uOC2reC3lOC2uCDgtoXgt4Dgt4Tgt5Lgtrsg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUHdkTW1pIiBtc2dpZD0iNzA0MzcxNTY4NzkwNTI1NDE5OSI+IuC2uOC3lOC2u+C2tOC2r+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+IlBJTiDgt4Dgt5ngtrHgt4Pgt4og4LeA4LeTIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuaXBNbWkiIG1zZ2lkPSIzMTEwNTM0NjgwNTU3ODU3MTYyIj4i4LaH4La44Lat4LeU4La44LeKIOC2heC2guC2muC2uiDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+IuC2h+C2uOC2reC3lOC2uOC3iiDgtoXgtoLgtprgtrog4LeD4LeT4La44LePIOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJUaHJlZVdDTW1pIiBtc2dpZD0iOTA1MTA0NzE3MDMyMTE5MDM2OCI+IuC2reC3lOC2seC3iiDgtrjgt4/gtrvgt4rgtpwg4LaH4La44Lat4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUnVhY01taSIgbXNnaWQ9Ijc4Mjc4ODc0NTkxMzgzMDg4ODYiPiLgtoXgtrHgt4Dgt4Hgt4rigI3gtrog4LeE4LeS4La74LeS4LeE4LeQ4La74Lav4LeP4La64LaaIOC2h+C2uOC2reC3lOC2uOC3iiDgtrTgt4rigI3gtrvgtq3gt5Lgtprgt4rgt4Lgt5rgtrQg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ25kTW1pIiBtc2dpZD0iMzExNjQ0NjIzNzA4MTU3NTgwOCI+IuC2h+C2uOC2reC3k+C2uOC3miDgtoXgtoLgtprgtrog4La34LeP4La74Lav4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iRG5kTW1pIiBtc2dpZD0iMTI2NTQ3ODkzMjQxODMzNDMzMSI+IuC2tuC3j+C2sOC3jyDgtrHgt5zgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPbiIgbXNnaWQ9IjQyOTQxNTQwOTE0NTc4MTkyMyI+IuC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq8g4LaF4Lax4LeU4LeAIOC3g+C3k+C2uOC3jyDgt4Dgt5Mg4LaH4LatLiDgtrjgt5Pgt4Xgtp8g4LaH4La44Lat4LeU4La4OiDgt4Pgt5Pgtrjgt48g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T25OZXh0Q2FsbE9mZiIgbXNnaWQ9IjMwOTI5MTgwMDYwNzc4NjQ2MjQiPiLgtoXgtrjgtq3gtrHgt4rgtrHgt4/gtpzgt5ogSUQg4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2heC2seC3lOC3gCDgt4Pgt5Pgtrjgt48g4LeA4LeTIOC2h+C2rS4g4La44LeT4LeF4LafIOC2h+C2uOC2reC3lOC2uDog4LeD4LeT4La44LePIOC2muC2uyDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT24iIG1zZ2lkPSI2MTc5NDI1MTgyODU2NDE4NDY1Ij4i4LaF4La44Lat4Lax4LeK4Lax4LeP4Lac4LeaIElEIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3lCDgtoXgtrHgt5Tgt4Ag4LeD4LeT4La44LePIOC3gOC3kyDgtrHgt5Dgtq0uIOC2uOC3k+C3heC2nyDgtofgtrjgtq3gt5Tgtrg6IOC3g+C3k+C2uOC3jyDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9mZiIgbXNnaWQ9IjI1Njc5OTg2MzMxMjQ0MDg1NTIiPiLgtoXgtrjgtq3gtrHgt4rgtrHgt4/gtpzgt5ogSUQg4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2heC2seC3lOC3gCDgt4Pgt5Pgtrjgt48g4LeA4LeTIOC2seC3kOC2rS4g4La44LeT4LeF4LafIOC2h+C2uOC2reC3lOC2uDog4LeD4LeT4La44LePIOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlTm90UHJvdmlzaW9uZWQiIG1zZ2lkPSI4NjE0ODMwMTgwNTA4Njg2NjY2Ij4i4LeD4Lea4LeA4LeP4LeA4Lax4LeKIOC3g+C2tOC2uuC3jyDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUlBlcm1hbmVudCIgbXNnaWQ9IjMzNzczNzExNDU5MjY4MzU2NzEiPiLgtoXgtrjgtq3gtrHgt4rgtrHgt4/gtpzgt5ogSUQg4LeD4LeQ4Laa4LeD4LeT4La4IOC2lOC2tuC2pyDgt4Dgt5ngtrHgt4Pgt4rgtprgtr0g4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRDaGFuZ2VkVGl0bGUiIG1zZ2lkPSI1NTkyMTg5Mzk4OTU2MTg3NDk4Ij4i4LeD4LeT4La44LeS4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeZ4La74LeS4Lar4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRGF0YSIgbXNnaWQ9Ijg2NTM3OTQ3ODQ2OTAwNjU1NDAiPiLgtq/gtq3gt4rgtq0g4LeD4Lea4LeA4LeP4LeAIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkVtZXJnZW5jeSIgbXNnaWQ9IjY1ODExNjM3NzkwNzI4MzM2NjUiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LeD4Lea4LeA4LeP4LeAIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbk5vcm1hbCIgbXNnaWQ9IjQ5NTM4NjcwMTEzODk3NTA2NzMiPiLgt4Tgtqwg4LeD4Lea4LeA4LeP4LeAIOC2tuC3j+C2sOC3jyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbFZvaWNlIiBtc2dpZD0iMzM5Njk2MzY1MjEwODE1MTI2MCI+IuC3g+C3kuC2uuC2veC3lCDgt4Tgtqwg4LeD4Lea4LeA4LePIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblNtcyIgbXNnaWQ9IjgzMTQzNTIzMjc0NjE2Mzg4OTciPiJTTVMg4LeD4Lea4LeA4LeP4LeAIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlRGF0YSIgbXNnaWQ9Ijk5NjYzNjQ4NzEwNjE3MTMyMCI+IuC3hOC2rC/gtq/gtq3gt4rgtq0g4LeD4Lea4LeA4LePIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IuC3hOC2rC9TTVMg4LeD4Lea4LeA4LePIOC2heC3gOC3hOC3kuC2uyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbCIgbXNnaWQ9IjU2NDMwMjgyNjQ0NjYwOTI4MjEiPiLgt4Pgt5Lgtrrgtr3gt5Tgtrgg4LeE4LasL+C2r+C2reC3iuC2rS9TTVMg4LeD4Lea4LeA4LeP4LeA4Lax4LeKIOC2tuC3j+C2sOC3jyDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1ZvaWNlIiBtc2dpZD0iMTI1ODM5MzgxMjMzNTI1ODAxOSI+IuC3hOC2rCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGEiIG1zZ2lkPSI4NzI0NTY3ODIwNzc5Mzc4OTMiPiLgtq/gtq3gt4rgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NGQVgiIG1zZ2lkPSI1NTY2NjI0OTk4ODQwNDg2NDc1Ij4i4LeG4LeQ4Laa4LeK4LeD4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzU01TIiBtc2dpZD0iMjAxNTQ2MDM3MzcwMTUyNzQ4OSI+IlNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFBc3luYyIgbXNnaWQ9IjQ1MjM0NTQ3ODM0OTg1NTE0NjgiPiLgtoXgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YVN5bmMiIG1zZ2lkPSI3NTMwMDAwNTE5NjQ2MDU0Nzc2Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BhY2tldCIgbXNnaWQ9IjY5OTEwMDY1NTc5OTM0MjM0NTMiPiLgtrTgt5Dgtprgt5Dgtqfgt4rgtqfgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQQUQiIG1zZ2lkPSIzMjM1MjU5MDg1NjQ4MjcxMDM3Ij4iUEFEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQwIiBtc2dpZD0iNzE3MDMzNTQ3MjE5ODY5NDk0NSI+IuC2u+C3neC2uOC3kuC2giDgtq/gtrvgt4rgt4Hgtprgtrog4LeD4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxIiBtc2dpZD0iNTMxNDg2MTUxOTc1MjUzODkyMiI+IuC2u+C3neC2uOC3kuC2giDgtq/gtrvgt4rgt4Hgtprgtrog4LaF4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQyIiBtc2dpZD0iODk2OTkyOTA0OTA4MTI2ODExNSI+IuC2u+C3neC2uOC3kuC2giDgtq/gtrvgt4rgt4Hgtprgtrog4LeD4LeQ4Lar4LeZ4La94LeSIOC3gOC3meC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MyIgbXNnaWQ9IjUxNDgyNTUwMjcwNDM5NDMzMTciPiLgt4DgtqfgtrTgt5Lgtqfgt4/gt4Dgt5ngtrHgt4og4LaJ4LeA4Lat4LeK4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ0IiBtc2dpZD0iODgwODQ1NjY4MjU1MDc5NjUzMCI+IuC2nOC3nOC2qeC2seC3kOC2nOC3kuC2veC3iuC2veC3meC2seC3iiDgtrTgt5Lgtqfgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDUiIG1zZ2lkPSI3NjA0MDYzMjUyODUwMzU0MzUwIj4i4La74Led4La44LeS4LaCICAtIOC2muC3kOC2uOC2reC3kiDgtrTgtq/gt4rgtrDgtq3gt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDYiIG1zZ2lkPSIyMDU5NDQwODI1NzgyODcxNTEzIj4i4La74Led4La44LeS4LaCICAtIOC2veC2tuC3j+C2nOC2rSDgt4Tgt5Dgtprgt5Ig4La04Lav4LeK4Law4Lat4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ3IiBtc2dpZD0iNzExMjA3ODcyNDA5NzIzMzYwNSI+IuC2u+C3neC2uOC3kuC2giAtIOC2uOC3kuC2reC3iuKAjeC2uyDgt4Tgt4Dgt5Tgtr3gt4rgtprgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDgiIG1zZ2lkPSI1OTg5NTY5Nzc4NjA0MDg5MjkxIj4i4La74Led4La44LeS4LaCIC0g4LaF4Law4LeS4La44LeS4La9IOC3hOC3gOC3lOC2veC3iuC2muC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OSIgbXNnaWQ9Ijc5NjkyOTY4MTEzNTUxNTI0OTEiPiLgtrvgt53gtrjgt5LgtoIgIC0g4LeD4La44LeK4La04LeW4La74LeK4LarIOC3g+C3muC3gOC3jyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Lgtq3gt4rgt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEwIiBtc2dpZD0iMzk5MjkwNjk5OTgxNTMxNjQxNyI+IuC2u+C3neC2uOC3kuC2giAtIOC2heC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgt4Pgt5rgt4Dgt48g4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeT4Lat4LeK4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMSIgbXNnaWQ9IjQxNTQ0NzY4NTQ0MjY5MjA5NzAiPiLgtrvgt53gtrjgt5LgtoIgIOC2tuC3kOC2seC2u+C2uiDgt4Pgtprgt4rigI3gtrvgt5Pgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEyIiBtc2dpZD0iMTE4OTA3MTExOTk5MjcyNjMyMCI+IuC2u+C3neC2uOC3kuC2giDgtrbgt5DgtrHgtrvgtrog4LaF4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHRTZWFyY2hpbmciIG1zZ2lkPSI4MzYwMTQxODg1OTcyMjc5OTYzIj4i4LeD4Lea4LeA4LeP4LeAIOC3g+C2s+C3hOC3jyDgt4Pgt5zgtrrgtrjgt5LgtrHgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlTm90Rm9yd2FyZGVkIiBtc2dpZD0iMTY4MzY4NTg4Mzg0MTI3MjU2MCI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4Lax4Lec4La64LeA4LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWQiIG1zZ2lkPSIxMzAyOTIyMTE3NDk4NTkwNTIxIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWRUaW1lIiBtc2dpZD0iOTIwNjI1MTczNjUyNzA4NTI1NiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9IlRJTUVfREVMQVkiPnsyfTwveGxpZmY6Zz4g4LanIOC2tOC3g+C3lOC3gCA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlUmVnaXN0ZXJlZCIgbXNnaWQ9IjUwNzMyMzc4Mjc2MjAxNjYyODUiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjog4LaJ4Lav4LeS4La74LeS4La64LanIOC2seC3nOC2uuC3gOC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlUmVnaXN0ZXJlZFRpbWUiIG1zZ2lkPSI2NzgxNjIxOTY0MzIwNjM1MTcyIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IOC2ieC2r+C3kuC2u+C3kuC2uuC2pyDgtrHgt5zgtrrgt4DgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmNDb21wbGV0ZSIgbXNnaWQ9IjMxMTg4NDgyMzA5NjY4ODY1NzUiPiLgtoXgtoLgtpwg4Laa4Lea4Lat4La6IOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2q+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmY0Vycm9yIiBtc2dpZD0iMzMyNzU2MDEyNjU4ODUwMDc3NyI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtpzgt5Dgtqfgt4Xgt5Tgt4Dgtprgt4og4LeE4LedIOC2heC3gOC2veC2guC2nOC3lCDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwg4Laa4Lea4Lat4La64Laa4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvck9rIiBtc2dpZD0iMTE5MTkxOTM3ODA4MzQ3MjIwNCI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvciIgbXNnaWQ9Ijc5NTYzOTI1MTExNDY2OTg1MjIiPiLgtqLgt4/gtr0g4Lav4Led4LeC4La64Laa4LeKIOC2reC3kuC2tuC3lOC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JMb29rdXAiIG1zZ2lkPSI0NzExNjg3NDU2MTExOTYzMTYzIj4iVVJMIOC2uiDgt4Pgt5ngt4Dgt5Lgtrog4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiLgtoXgtqngt4Dgt5Lgtrrgt5og4LeD4Lat4LeK4oCN4La64LeP4La04LaxIOC2tOC2p+C3kuC2tOC3j+C2p+C3kuC2uiDgt4Dgt5ngtq0g4LeD4LeE4La6IOC2seC3nOC2r+C2muC3iuC3gOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+IuC3g+C2reC3iuKAjeC2uuC3j+C2tOC2seC2uiDgtprgt4Ug4Lax4Lec4LeE4LeQ4LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUHJveHlBdXRoIiBtc2dpZD0iMTc4ODIwNzAxMDU1OTA4MTMzMSI+IuC2tOC3iuKAjeC2u+C3nOC2muC3iuC3g+C3kiDgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtprgtrog4LeE4La74LeE4LePIOC3g+C2reC3iuKAjeC2uuC3j+C2tOC2seC2uiDgtoXgt4Pgt4/gtrvgt4rgtq7gtprgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQ29ubmVjdCIgbXNnaWQ9Ijg3MTQyNzMyMzYzNjQ2NDA1NDkiPiLgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtprgtrrgt4/gtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9ySU8iIG1zZ2lkPSIyMzQwNTU4MTk3NDg5MzAyMTg4Ij4i4LeD4Lea4LeA4LeP4Lav4LeP4La64Laa4La64LePIOC3g+C2uOC2nCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeT4La44LanIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRpbWVvdXQiIG1zZ2lkPSI0NzQzNDAzNzAzNzYyODgzOTU0Ij4i4LeD4Lea4LeA4LeP4Lav4LeP4La64Laa4La6IOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Dgtrog4Laa4La94LeKIOC2ieC2muC3lOC2reC3iiDgt4Dgt5Lgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUmVkaXJlY3RMb29wIiBtc2dpZD0iODY3OTU5NjA5MDM5Mjc3OTUxNiI+IuC2tOC3kuC2p+C3lOC3gOC3miDgtrbgt5zgt4Tgt50g4LeD4Lea4LeA4LeP4Lav4LeP4La64LaaIOC2seC3kOC3gOC2rSDgt4Tgtrvgt4Dgt48g4La64LeQ4LeA4LeT4La44LeKIOC2heC2qeC2guC2nOC3lCDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRTY2hlbWUiIG1zZ2lkPSI1MDE1NzMwODEyOTA2MTkyMjA4Ij4i4La04LeK4oCN4La74Lec4Lan4Led4Laa4Led4La94La6IOC3gOC3meC2rSDgt4Pgt4Tgtrog4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZhaWxlZFNzbEhhbmRzaGFrZSIgbXNnaWQ9Ijk2NTQ5NjA2MDAwNjU4NjQxIj4i4LeD4LeU4La74Laa4LeK4LeC4LeS4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC2muC3iiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4iVVJMIOC3gOC2veC2guC2nOC3lCDgtrHgt5zgt4DgtrEg4Lax4LeS4LeD4LePIOC2tOC3kuC2p+C3lOC3gCDgt4Dgt5Lgt4Dgt5jgtq0g4Laa4LeS4La74LeT4La44LanIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiLgtpzgt5zgtrHgt5Tgt4Ag4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZU5vdEZvdW5kIiBtc2dpZD0iNjIwMzg1NjYxMjA0MjY1NTA4NCI+IuC2ieC2veC3iuC2veC2sSDgtr3gtq8g4Lac4Lec4Lax4LeUIOC3g+C3meC3gOC3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVG9vTWFueVJlcXVlc3RzIiBtc2dpZD0iMTIzNTM5NjkyNzA4NzE4ODI1MyI+IuC2ieC2veC3iuC2veC3k+C2uOC3iiDgt4Dgt5Lgt4Hgt4/gtr0g4La04LeK4oCN4La74La44LeP4Lar4La64Laa4LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgt4Dgt5ngtrjgt5LgtrHgt4og4La04LeA4Lat4LeS4La64LeSLiDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODk2NzcxMDAyNTAzNjE2MzgyMiI+Ijx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lMSRzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4La04LeU4La74Lax4La6IOC3gOC3k+C2uOC3miDgtq/gt53gt4Lgtrrgtprgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVN5bmMiIG1zZ2lkPSI4MzUzNTIzMDYwMjY5MzM1NjY3Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luY05vdGlmaWNhdGlvblRpdGxlIiBtc2dpZD0iMzk3NzQzMzQ5MTkxOTAxNDU4Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlVG9vTWFueURlbGV0ZXNOb3RpZmljYXRpb25EZXNjIiBtc2dpZD0iODEwMDk4MTQzNTA4MDY5NjQzMSI+Ijx4bGlmZjpnIGlkPSJDT05URU5UX1RZUEUiPiVzPC94bGlmZjpnPiDgtrjgt5Dgtprgt5Pgtrjgt4og4LeA4LeQ4Lap4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjQ5NDAxOTIzNDEwMjE1NDg5NiI+IuC2p+C3kOC2tuC3iuC2veC2p+C3iiDgtobgtqDgtrrgtrHgtrog4La04LeS4La74LeSIOC2h+C2rS4g4LaJ4LapIOC2seC3kuC2r+C3hOC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4La44LeE4La7IOC2nOC3nOC2seC3lCDgtrjgtprgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NzU5OTkyODY2ODAwMDA1NDEiPiLgtq/gt5Tgtrvgtprgtq7gtrEg4LaG4Lag4La64Lax4La6IOC2tOC3kuC2u+C3kyDgtofgtq0uIOC2ieC2qSDgtrHgt5Lgtq/gt4Tgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C2uOC3hOC2uyDgtpzgt5zgtrHgt5Qg4La44Laa4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lIiBtc2dpZD0iNjU0NTY5NjAwNzYzMTQwNDI5MiI+IuC2uOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODU0NTM1MTQyMDg2NTIwMjg1MyI+IuC2p+C3kOC2tuC3iuC2veC2pyDgt4Dgt5Lgtprgtr3gt4rgtrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzE5OTE5MDc1NDYzOTg4NjM4Ij4i4Lav4LeU4La74Laa4Lau4LaxIOC3gOC3kuC2muC2veC3iuC2tOC2uuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlIiBtc2dpZD0iNzE2NzcwMzM4OTgwMjYxODY2MyI+IuC2seC3kuC3hOC2rCDgtobgtprgt4/gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXJuX29uX3JhZGlvIiBtc2dpZD0iMzkxMjc5MzA5MjMzOTk2MjM3MSI+IuC2seC3nOC2u+C3kOC3hOC2seC3iiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHVybl9vZmZfcmFkaW8iIG1zZ2lkPSI4MTk4Nzg0OTQ5OTg3MDYyMzQ2Ij4i4Lax4Lec4La74LeQ4LeE4LeQ4Lax4LeKIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fbG9jayIgbXNnaWQ9Ijc5OTA5NDY1NTQ5NjA5ODE1MyI+IuC2reC3kuC2uyDgtoXgtpzgt5Tgtr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9vZmYiIG1zZ2lkPSI0MjY2NjE0MTA3NDEyODY1MDQ4Ij4i4La24La94La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9zaWxlbnQiIG1zZ2lkPSIzMTkyOTgxNjMwMTg0NzMwNzgiPiLgt4Tgtqwg4Lax4Laf4Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3ZpYnJhdGUiIG1zZ2lkPSI3MDcyMDQzMzg4NTgxNTUxMzk1Ij4i4LeE4LasIOC2seC2n+C2seC2uiDgtprgtrjgt4rgtrTgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9yaW5nIiBtc2dpZD0iODU5MjI0MTgxNjE5NDA3NDM1MyI+IuC3hOC2rCDgtrHgtp/gtrHgtrog4LeD4Laa4LeK4oCN4La74LeT4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fcHJvZ3Jlc3MiIG1zZ2lkPSIyMjgxMDc5MjU3MzI5OTgxMjAzIj4i4LeA4LeD4LePIOC2r+C2uOC2uOC3kuC2seC3iuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMzODU3NDUxNzk1NTU3MzE0NzAiPiLgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La6IOC3gOC3kOC3g+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQ5NzkyMTc1MjQyODIxMzUzIj4i4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgt4Dgt5Dgt4Pgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybV9xdWVzdGlvbiIgbXNnaWQ9IjI5MDY1NDQ3Njg4ODExMzYxODMiPiLgtpTgtrbgtqcg4LeA4LeD4LePIOC2r+C3kOC2uOC3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX3RpdGxlIiBtc2dpZD0iNzA1NDUwOTkxNDUwMDE0MDM2MSI+IuC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtobgtprgt4/gtrvgtrrgtqcg4Lax4LeQ4LeA4LatIOC2tOC2qyDgtpzgtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfY29uZmlybSIgbXNnaWQ9IjU1MjkzOTQ0NTAyNzg0NjY4Ij4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2huC2muC3j+C2u+C2uuC2pyDgtrHgt5Dgt4Dgtq0g4La04LarIOC2nOC3kOC2seC3iuC3gOC3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4LaU4La2IOC3g+C3iuC2ruC3j+C2tOC3kuC2rSDgtprgtrsg4LaH4Lat4LeSIOC3g+C3kuC2uuC2veC3lOC2uCDgtq3gt5ngt4DgtrEg4La04LeP4La74LeK4LeB4LeA4LeT4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgt5Lgtrrgtr3gt4rgtr0g4LaF4La24La9IOC3gOC3kyDgtrrgtrrgt5IuIOC2lOC2tiDgtrHgt5Dgt4Dgtq0g4La04LarIOC2nOC2seC3iuC3gOC2sSDgt4Dgt5Lgtqcg4LaS4LeA4LePIOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4LeD4LeS4Lav4LeUIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRfdGFza3NfdGl0bGUiIG1zZ2lkPSIzNjkxNzY0NjIzNjM4MTI3ODg4Ij4i4La44LeR4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+IuC2uOC3keC2rSDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MDg0NzcxNDAwODgwNTM2NjUiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgt4og4LeA4LeS4Laa4La94LeK4La0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNDA2NDE2ODMxNTQxNjE1MjU4Ij4i4Lav4LeU4La74Laa4Lau4LaxIOC3gOC3kuC2muC2veC3iuC2tCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9jayIgbXNnaWQ9IjI4NDQ5NDUxOTE3OTIxMTk3MTIiPiLgtq3gt5Lgtrsg4LaF4Lac4LeU4La9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9wb3dlcl9vZmYiIG1zZ2lkPSI0NDcxODc5NDQwODM5ODc5NzIyIj4i4La24La94La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2J1Z19yZXBvcnQiIG1zZ2lkPSI3OTM0MDEwNTc4OTIyMzA0Nzk5Ij4i4Lav4Led4LeCIOC3gOC2u+C3iuC2reC3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF90aXRsZSIgbXNnaWQ9IjI2Njc0OTQ4MDM3NDI1NDg1MzMiPiLgtq/gt53gt4Ig4LeA4LeP4La74LeK4Lat4LeP4LeA4Laa4LeKIOC2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9tZXNzYWdlIiBtc2dpZD0iMzk4NDQ3MDQ4NzUwMzUwNDU2Ij4i4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtrTgtqvgt5Lgt4Dgt5Lgtqngtrrgtprgt4og4La94LeZ4LeDIOC2uuC3kOC3gOC3k+C2uOC2pyDgtrjgt5ngtrog4LaU4La24Lac4LeaIOC3gOC2reC3iuC2uOC2seC3iiDgtovgtrTgt4/gtoLgtpwg4Lat4Lat4LeK4LeA4La6IOC2nOC3kOC2sSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3lCDgtofgtq0uIOC2r+C3neC3giDgt4Dgt4/gtrvgt4rgtq3gt4/gt4Ag4LaG4La74La44LeK4La3IOC2muC2uyDgtpHgtrog4La64LeQ4LeA4LeT4La44LanIOC3g+C3luC2r+C3j+C2seC2uOC3iiDgtprgtrvgtrEg4Lat4LeZ4Laa4LeKIOC2keC2uuC2pyDgtprgt5Lgt4Pgt5Lgtrrgtrjgt4og4Laa4LeP4La94La64Laa4LeKIOC2nOC2reC3gOC2seC3lCDgtofgtq07IOC2muC2u+C3lOC2q+C3j+C2muC2uyDgtongt4Dgt4PgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl90b2dnbGVfc2lsZW50X21vZGUiIG1zZ2lkPSI4MjE5NTI1MzQ0MjQ2ODEwOTI1Ij4i4Lax4LeS4LeE4LasIOC2huC2muC3j+C2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMzI4OTg0MTkzNzAwMzc1ODgwNiI+IuC3geC2tuC3iuC2r+C2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSIxNTA2MDQ2NTc5MTc3MDY2NDE5Ij4i4LeE4LasIOC3g+C2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX3RvZ2dsZV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iNTg4NDMzMDMwNjkyNjMwNzQ1NiI+IuC2heC3hOC3g+C3iuC2uuC3j+C2seC3jyDgtobgtprgt4/gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjI3MTk1NTc5ODI2MDg5MTk3NTAiPiLgtoXgt4Tgt4Pgt4rgtrrgt4/gtrHgt48g4LaG4Laa4LeP4La74La6IOC3g+C2muC3iuKAjeC2u+C3k+C2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4i4LaF4LeE4LeD4LeK4La64LeP4Lax4LePIOC2heC2muC3j+C2u+C2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LaG4Laa4LeP4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDgtrTgtq/gt4rgtrDgtq3gt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY29zdE1vbmV5IiBtc2dpZD0iNTQyOTgwODIxNzg2MTQ2MDQwMSI+IuC2lOC2tuC2nOC3miDgtrjgt5Tgtq/gtr3gt4og4LeA4LeQ4La64LeA4LaxIOC3g+C3muC3gOC3j+C3gOC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+IuC2lOC2tuC2nOC3meC2seC3iiDgtrjgt5Tgtq/gtr3gt4og4La64LaxIOC2r+C3muC3gOC2veC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21lc3NhZ2VzIiBtc2dpZD0iNzUyMTI0OTE0ODQ0NTQ1NjY2MiI+IuC2lOC2tuC2nOC3miDgtrTgtqvgt5Lgt4Dgt5LgtqkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21lc3NhZ2VzIiBtc2dpZD0iNzgyMTk5OTA3MTAwMzY5OTIzNiI+IuC2lOC2tuC2nOC3miBTTVMsIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4osIOC3g+C3hCDgt4Dgt5ngtrHgtq3gt4og4La04Lar4LeS4LeA4LeS4LapIOC2muC3kuC2uuC3gOC2seC3iuC2sSDgt4Pgt4Qg4La94LeS4La64Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9wZXJzb25hbEluZm8iIG1zZ2lkPSIzNTE5MTYzMTQxMDcwNTMzNDc0Ij4i4LaU4La24Lac4LeaIOC2tOC3nuC2r+C3iuC2nOC2veC3kuC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3BlcnNvbmFsSW5mbyIgbXNnaWQ9Ijg0MjY0NTMxMjk3ODg4NjEzMzgiPiLgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2tOC2reC3miDgtobgtqDgtrrgtrHgtrog4Laa4La74LaxIOC2veC2rywg4LaU4La2IOC2nOC3kOC2sSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeA4La94LanIOC2jeC2ouC3lCDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NvY2lhbEluZm8iIG1zZ2lkPSI1Nzk5MDk2NjIzNDEyMDQzNzkxIj4i4LaU4La24Lac4LeaIOC3g+C2uOC3j+C2ouC2uuC3k+C2uiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NvY2lhbEluZm8iIG1zZ2lkPSI3MTI5ODQyNDU3NjExNjQzNDkzIj4i4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgt4Pgt4Qg4LeD4LeP4La44LeP4LaiIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2uuC2seC3iiDgtpzgt5DgtrEg4Lat4Lec4La74Lat4LeU4La74LeUIOC3gOC3meC2rSDgto3gtqLgt5Qg4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9sb2NhdGlvbiIgbXNnaWQ9IjYzNTE0OTc0MjQzNjY5MjA0OSI+IuC2lOC2tuC2nOC3miDgt4Pgt4rgtq7gt4/gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2xvY2F0aW9uIiBtc2dpZD0iNTcwNDY3OTc2MzEyNDE3MDEwMCI+IuC2lOC2tuC2nOC3miDgtrfgt57gtq3gt5Lgtpog4La04LeS4LeE4LeS4Lan4LeU4La4IOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX25ldHdvcmsiIG1zZ2lkPSI1ODA4OTgzMzc3NzI3MTA5ODMxIj4i4Lai4LeP4La9IOC3g+C2seC3iuC2seC3kuC3gOC3muC2r+C2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbmV0d29yayIgbXNnaWQ9IjQ0NzgyOTk0MTMyNDE4NjE5ODciPiLgt4Dgt5Lgt4Dgt5LgtrAg4Lai4LeP4La9IOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iMTU4NTQwMzU0NDE2MjEyODEwOSI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjU2MjUyODg1NzcxNjQyODIzOTEiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LaU4LeD4LeK4LeD4LeaIOC2i+C2tOC3j+C2guC2nCDgt4Pgt4Qg4Lai4LeP4La9IOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI4MzI5MjYxNjcwMTUxODcxMjM1Ij4i4LeB4LeK4oCN4La74LeA4LeK4oCN4La6IOC3g+C3kOC2muC3g+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjI2NDE1MTU0MDMzNDc1NjgxMzAiPiLgt4Hgt4rigI3gtrvgt4Dgt4rigI3gtrog4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjIwOTI0NjY1MzQyNDc5ODAzMyI+IuC2tuC3kOC2p+C2u+C3kuC2uiDgt4Dgt5ngtq0g4La24La94La04LeP4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjY0NDEyNzUzMjA2Mzg5MTY5NDciPiLgtrbgt5Dgtqfgtrvgt5Lgtrrgt5og4La24La94La6IOC2muC3iuC3guC2q+C3kuC2muC3gCDgtoXgtqngt5Qg4LeA4LaxIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jYWxlbmRhciIgbXNnaWQ9IjU4NjM1MDg0Mzc3ODM2ODM5MDIiPiLgtq/gt5LgtrEg4Lav4La74LeK4LeB4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jYWxlbmRhciIgbXNnaWQ9IjU3Nzc1MzQzMTY5ODIxODQ0MTYiPiLgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC3g+C3kuC2r+C3iuC2sOC3kuC2seC3iuC2pyDgt4Pgt5jgtqLgt5Tgt4Ag4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGljdGlvbmFyeSIgbXNnaWQ9IjQxNDg1OTcxMjg4NDM2NDEzNzkiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LeB4La24LeK4LavIOC2muC3neC3guC2uiDgtprgt5Lgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RpY3Rpb25hcnkiIG1zZ2lkPSI3OTIxMTY2MzU1OTY0NzY0NDkwIj4i4La04La74LeS4LeB4LeT4La94LaaIOC3geC2tuC3iuC2ryDgtprgt53gt4Lgtrrgt5og4LeA4Lag4LaxIOC2muC3kuC2uuC3gOC3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODA5MDIzNzcwMjQzMjU3Njc4OCI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgt4Hgtrbgt4rgtq/gtprgt53gt4Lgtrrgtqcg4La94LeS4LeA4LeS4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyNzExNTYxOTk0NDk3MzYxNjQ2Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC3geC2tuC3iuC2r+C2muC3neC3guC2uuC2pyDgt4DgtqDgtrEg4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYm9va21hcmtzIiBtc2dpZD0iMTk0OTUxOTY3MzEwMzk2ODIyOSI+IuC2tOC3kuC2p+C3lOC3g+C2seC3iiDgt4Pgt4Qg4LaJ4Lat4LeS4LeE4LeP4LeD4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ib29rbWFya3MiIG1zZ2lkPSI0MTY5NzcxNjA2MjU3OTYzMDI4Ij4i4La04LeS4Lan4LeU4LeD4Lax4LeKIOC3g+C3hCDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrsg4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC3gOC3meC2rSDgto3gtqLgt5Qg4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kZXZpY2VBbGFybXMiIG1zZ2lkPSI2MTE3NzA0NjI5NzI4ODI0MTAxIj4i4LeD4LeT4Lax4LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZpY2VBbGFybXMiIG1zZ2lkPSI0NzY5MzU2MzYyMjUxNjQxMTc1Ij4i4LeD4LeT4Lax4LeU4LeAIOC3g+C2muC3g+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfdm9pY2VtYWlsIiBtc2dpZD0iNDE2MjIzNzE0NTAyNzU5MjEzMyI+IuC3hOC2rCDgtq3gt5DgtrTgt5Hgtr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3ZvaWNlbWFpbCIgbXNnaWQ9IjI0OTg0MDM5Njk4NjI5NTEzOTMiPiLgt4Tgtqwg4Lat4LeQ4La04LeR4La9IOC3gOC3meC2rSDgto3gtqLgt5Qg4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9taWNyb3Bob25lIiBtc2dpZD0iMTcxNTM5OTAwMjUwMDQzNDY0Ij4i4La44La64LeS4Laa4LeK4oCN4La74Lec4LeG4Led4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19taWNyb3Bob25lIiBtc2dpZD0iNzEwNjYxODI4NjkwNTczODQwOCI+IuC3geC2tuC3iuC2r+C2uiDgtrTgtqfgt5Lgtpzgtq0g4Laa4LeS4La74LeT4La44LanIOC2uOC2uuC3kuC2muC3iuKAjeC2u+C3nOC3huC3neC2seC2uiDgt4Dgt5ngtq0g4LaN4Lai4LeUIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FtZXJhIiBtc2dpZD0iNDgyMDM3MjQ5NTg5NDU4NjYxNSI+IuC2muC3kOC2uOC2u+C3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+IuC2oeC3j+C2uuC3j+C2u+C3luC2tCDgt4Tgt50g4LeA4LeT4Lap4LeS4La64LedIOC2nOC3iuKAjeC2u+C3hOC2q+C2uiDgt4PgtrPgt4Tgt48g4Laa4LeQ4La44La74LeP4LeAIOC3gOC3meC2rSDgto3gtqLgt5Qg4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zY3JlZW5sb2NrIiBtc2dpZD0iODI3NTUwMDE3MzMzMDcxODE2OCI+IuC2heC2nOC3lOC3heC3lCDgtq3gt5LgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NjcmVlbmxvY2siIG1zZ2lkPSI3MDY3NDk3MTI4OTI1NDk5NDAxIj4i4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uuC3miDgtoXgtpzgt5Tgt4Xgt5Qg4Lat4LeS4La74La64LeaIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gOC2uuC2pyDgtrbgtr3gtrTgt4/gtrEg4LeE4LeQ4Laa4LeS4La64LeP4LeALiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hcHBJbmZvIiBtc2dpZD0iODAyODc4OTc2MjYzNDE0NzcyNSI+IuC2lOC2tuC2nOC3miDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2reC3nOC2u+C2reC3lOC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXBwSW5mbyIgbXNnaWQ9IjM5NTAzNzg1MzgwNDk2MjU5MDciPiLgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LeaIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gOC2uuC2pyDgtrbgtr3gtrTgt5Hgtrjgt4og4Laa4LeFIOC3hOC3kOC2muC3kiDgtrbgt4AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dhbGxwYXBlciIgbXNnaWQ9IjM4NTAyODAxNTgwNDExNzU5OTgiPiLgtrbgt5Lgtq3gt5TgtrTgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dhbGxwYXBlciIgbXNnaWQ9IjU2MzA0MTc4NTQ3NTA1NDAxNTQiPiLgtovgtrTgt4/gtoLgtpwg4La24LeS4Lat4LeU4La04Lat4LeaIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1DbG9jayIgbXNnaWQ9IjQwNjUzNTc1OTIzNjYxMjk5MiI+IuC2lOC2u+C2veC3neC3g+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3lzdGVtQ2xvY2siIG1zZ2lkPSIzOTQ0MzU5ODMzNjI0MDk0OTkyIj4i4LaL4La04LeP4LaC4LacIOC2muC3j+C2vSDgt4Tgt50g4Laa4LeP4La9IOC2muC2veC3j+C2tCDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdGF0dXNCYXIiIG1zZ2lkPSIyMDk1ODYyNTY4MTEzOTQ1Mzk4Ij4i4Lat4Lat4LeK4LeAIOC2reC3k+C2u+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iNjI0MjU5MzQzMjIyNjgwNzE3MSI+IuC2i+C2tOC3j+C2guC2nCDgtq3gtq3gt4rgt4Ag4Lat4LeT4La74LeUIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeW5jU2V0dGluZ3MiIG1zZ2lkPSIzMzQxOTkwOTg2MTQ3ODI2NTQxIj4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C3kOC2muC3g+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3luY1NldHRpbmdzIiBtc2dpZD0iNzYwMzE5NTI2NTEyOTAzMTc5NyI+IuC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjb3VudHMiIG1zZ2lkPSIzMzU5NjQ2MjkxMTI1MzI1NTE5Ij4i4LaU4La24Lac4LeaIOC2nOC3kuC2q+C3lOC2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjb3VudHMiIG1zZ2lkPSI0OTQ4NzMyNjQxODI3MDkxMzEyIj4i4La94La24LeP4Lac4LatIOC3hOC3kOC2muC3kiDgtpzgt5Lgtqvgt5Tgtrjgt4og4LeA4La94LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2hhcmR3YXJlQ29udHJvbHMiIG1zZ2lkPSI3OTk4MjE0OTY4NzkxNTk5MzI2Ij4i4Lav4LeY4Lap4LeP4LaC4LacIOC2tOC3j+C2veC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9IjQzNTcwNTc4NjEyMjU0NjI3MDIiPiLgt4Tgt5HgtrHgt4rgtqngt4rgt4Pgt5ngtqfgtrrgt5og4Lav4LeY4Lap4LeP4LaC4LacIOC3gOC2veC2pyDgt4Pgt5jgtqLgt5Tgt4Dgtrgg4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfcGhvbmVDYWxscyIgbXNnaWQ9IjkwNjcxNzM5ODgzMjU4NjU5MjMiPiLgtq/gt5Tgtrvgtprgtq7gtrEg4LaH4La44Lat4LeU4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19waG9uZUNhbGxzIiBtc2dpZD0iNzQ4OTcwMTYyMDQ0NjE4Mzc3MCI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtofgtrjgtq3gt5Tgtrjgt4og4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2seC3iuC2sSwg4La04Lan4LeS4Lac4LatIOC2muC2u+C2seC3iuC2sSDgt4Pgt4Qg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3lzdGVtVG9vbHMiIG1zZ2lkPSI0NjUyMTkxNjQ0MDgyNzE0MDQ4Ij4i4La04Lav4LeK4Law4Lat4LeSIOC2uOC3meC3gOC2veC2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3lzdGVtVG9vbHMiIG1zZ2lkPSI4MTYyMTAyNjAyMTkwNzM0MzA1Ij4i4La04Lav4LeK4Law4Lat4LeS4La64LeaIOC2tOC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt4og4La04LeK4oCN4La74LeA4Lea4LeB4La6IOC3g+C3hCDgtrTgt4/gtr3gtrHgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSIzNDQ2MTY0NTg0NzEwNTk2NTEzIj4i4LeD4LaC4LeA4La74LeK4Law4LaaIOC2uOC3meC3gOC2veC2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjcwNTg4MjgwMzIzNTgxNDIwMTgiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4LaC4LeA4La74LeK4Law4Laa4La64Lax4LeKIOC3g+C2s+C3hOC3jyDgtrTgtrjgtqvgtprgt4og4LaF4LeA4LeB4LeK4oCN4La6IOC3gOC3kuC3geC3muC3guC3j+C2guC2nC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaXNwbGF5IiBtc2dpZD0iNjA1MTAwMjAzMTkzMzAxMzcxNCI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0gVUkg4LeD4Laz4LeE4LePIOC2tuC2veC2tOC3j+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RvcmFnZSIgbXNnaWQ9IjE5NzExMTg3NzA1NDYzMzY5NjYiPiLgtobgtqDgtrrgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzQ0MjMxODUwMjQ0Njg3NDk5OSI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI5MjAzMzAyMjE0OTE1MzU1Nzc0Ij4iU0Qg4La04LatIOC3gOC3meC2rSDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiLgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt48g4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI0MjA1MTk2ODgxNjc4MTQ0MzM1Ij4i4LaL4La04Laa4LeP4La74LeT4LeA4LaxIOC2reC3j+C2muC3iuC3guC2qyDgtongtr3gt4rgtr3gt5Pgtrjgt4og4Laa4LeFIOC3hOC3kOC2muC3kiDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzOTAxNzE3OTM2OTMwMTcwMzIwIj4i4Laa4LeA4LeU4LeF4LeUIOC2heC2seC3iuC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtr3gtrbgt4/gtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzc3MjIyNTAwODYwNTMxMDY3MiI+IuC2lOC2tiDgtoXgtrHgt4rgtq3gtrvgt4rgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4LaxIOC2muC3gOC3lOC3heC3lOC3gOC3miDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4La04La74LeT4Laa4LeK4LeC4LePIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+IuC3g+C3iuC2tOC2u+C3iuC3geC2uuC3meC2seC3iiDgtpzgt4Dgt5rgt4Lgtqvgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiLgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74LaxIOC2heC2uuC3kuC2reC2uCDgt4Tgtqwg4Lax4Lac4LePIOC2muC2reC3jyDgtprgt5ngtrvgt5ngtrHgt5Qg4LaH4Lat4LeSIOC2heC2reC2uyDgtongtoLgtpzgt5Lgtq3gt5Ig4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2reC3kuC2u+C2uiDgtpzgt4Dgt5rgt4Lgtqvgtrog4Laa4LeS4La74LeT4La44LanIOC2tOC3lOC3heC3lOC3gOC2seC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNzM5ODgxNzY2NTIyNTk0MDczIj4i4LaL4LeD4LeD4LeKIOC3gOC3meC2tuC3iiDgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Ag4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iNzg4MTA2Mzk2MTUwNzUxMTc2NSI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrrgtqcg4La04LeK4oCN4La74LeA4Lea4LeB4LeK4oCN4La64Lat4LeP4LeA4La6IOC3gOC3kOC2qeC3kuC3gOC2sSDgtr3gt5ngt4Mg4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtofgtq3gt5Dgtrjgt4og4LeA4LeS4LanIOC3g+C3iuC2muC3iuKAjeC2u+C3kuC2tOC3iuC2p+C3iiDgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4La7IOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSIyMTAzNDQwMzkxOTAyNDEyMTc0Ij4i4LaU4La2IOC2p+C2uuC3kuC2tOC3iiDgtprgt4Ug4La04LeZ4LeFIOC2tuC2veC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IuC2q+C2uuC3gOC2u+C2tOC2reC3iiDgtoXgtoLgtpog4LeD4LeEIOC2uOC3lOC2u+C2tOC2ryDgt4Dgt5DgtrHgt5Ig4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC2r+C2reC3iuC2rSDgtofgtq3gt5Tgt4Xgtq3gt4og4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+IuC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4Ag4LaF4La24La9IOC2muC2u+C2seC3iuC2sSDgt4Tgt50g4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLgtq3gtq3gt4rgt4Ag4Lat4LeT4La74LeU4LeAIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4LedIOC2tOC2r+C3iuC2sOC2reC3kiDgtrHgt5Lgtrvgt5bgtrTgtpog4LaR4Laa4Lat4LeUIOC3hOC3nSDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcyNDcyODE5MTEzODc5MzE0ODUiPiLgtq3gtq3gt4rgt4Ag4Lat4LeT4La74LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcxNjExMzY2MDc5NTk3NjA2MCI+IuC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4Ag4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iMTE0ODE5ODc4NTkzNzQ4OTI2NCI+IuC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4Ag4Lav4LeS4LacIOC3hOC3kOC2u+C3k+C2uC/gt4Tgt5Dgtprgt5Lgtr3gt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSI2OTE3NTQ5NDM3MTI5NDAxMTMyIj4i4Lat4Lat4LeK4LeAIOC2reC3k+C2u+C3lOC3gCDgtq/gt5Lgtpwg4LeE4LeQ4La74LeT4La44LanIOC3hOC3nSDgt4Tgt5Dgtprgt5Lgt4Xgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiLgtrTgt5Lgtqfgt4DgtrEg4LaH4La44Lat4LeU4La44LeKIOC3gOC2vSDgtrjgtpwg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iNTMzMTMxODkzMTkzNzQwMjA0MCI+IuC2tOC3kuC2p+C3gOC2sSDgtofgtrjgtq3gt5Tgtrjgt4og4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4Qg4LaH4La44Lat4LeT4La44LanIOC2seC3kuC2uuC2uOC3kuC2rSDgtoXgtoLgtprgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uuC3meC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4La04LeS4Lan4LeA4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgtrHgt5Lgtrvgt5Pgtprgt4rgt4LgtqvgtrosIOC2seC3kOC3gOC2rSDgt4Tgt5Dgtrvgt4Dgt5Pgtrgg4LeE4LedIOC3gOC3kOC3heC2muC3iuC3gOC3k+C2uCDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVNtcyIgbXNnaWQ9Ijg2NzM0NzE3Njg5NDc4OTUwODIiPiLgtprgt5ngtqfgt5Ig4La04Lar4LeS4LeA4LeS4LapIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCAoU01TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVTbXMiIG1zZ2lkPSI2NDI0Mzg3NzU0MjI4NzY2OTM5Ij4iU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtr3gt5Dgtrbgt5Pgtrjgtqcg4LeD4LeEIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC3hOC3kiDgtq3gt5rgtrvgt5Tgtrgg4La64LeZ4Lav4LeU4La44LanIOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4La94LeQ4La24LeZ4LaxIOC2tOC2q+C3kuC3gOC3kuC2qSDgtoXgtrDgt5Pgtprgt4rgt4Lgtqvgtrog4Laa4LeS4La74LeT4La44LanIOC3hOC3kOC2muC3kuC3gOC3k+C2uCDgt4DgtrEg4LaF4Lat4La7LCDgtpLgt4Dgt48g4LaU4La24LanIOC2seC3nOC2tOC3meC2seC3iuC3gOC3jyDgtrjgtprgt48g4Lav4LeQ4La44LeT4La44Lan4LavIOC3hOC3kOC2muC3kiDgt4Dgt5Pgtrjgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlTW1zIiBtc2dpZD0iMTgyMTMxNzM0NDY2ODI1NzA5OCI+IuC2tOC3meC3hSDgtrTgtqvgt5Lgt4Dgt5Tgtqkg4La94La24LeP4Lac4Lax4LeK4LaxIChNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+Ik1NUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LeD4Lec4La64LePIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgt4Pgt4Qg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La64LeZ4Lav4LeU4La4IOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgtprgtrvgtrHgt5Qg4La94La24LaxIOC2heC2reC2uyDgtpTgtrbgtqcg4La94LeQ4La24LeU4LaxIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrTgt5ngtrHgt4rgt4Dgt5Pgtrjgt5ngtrHgt4og4Lat4Lec4La74LeA4La4IOC2uOC2muC3jyDgtq/gt5Dgtrjgt5Lgtrog4LeE4LeQ4Laa4LeSIOC2tuC3gCDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4LaF4Lav4LeE4LeD4LeKIOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4i4LeE4Lav4LeS4LeD4LeSIOC3gOC3kuC2muC3j+C3geC2sSDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9Ijg0ODUyNDA3MDI2MjQzMTk3NCI+IuC3hOC2r+C3kuC3g+C3kiDgt4Dgt5Lgtprgt4/gt4Eg4La04Lar4LeS4LeA4LeS4LapIOC2veC3kOC2tuC3k+C2uOC2pyDgt4Pgt4Qg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La04Lav4LeK4Law4Lat4LeSIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gtqcg4La04La44Lar4Laa4LeKIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LaF4Lav4LeP4LeFIOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjE1OTgzMjg4NDM2MTk2NDYxNjYiPiLgt4Pgt5ngtr3gt4og4La04LeK4oCN4La74Lag4LeP4La74LarIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4i4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtr3gt5Dgtrbgt5Tgtqvgt5Qg4LeD4LeZ4La94LeKIOC3gOC3kuC2muC3j+C3geC2sSDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtqcg4LeE4Lav4LeS4LeD4LeSIOC2heC3gOC3g+C3iuC2ruC3j+C3gOC2seC3iiDgtrTgt5Lgt4Xgt5LgtrbgtrMg4LaF4Lax4Lat4LeU4La74LeUIOC2h+C2n+C3gOC3k+C2uOC2pyDgt4Pgt5ngtr3gt4og4LeA4LeS4Laa4LeP4LeB4LaxIOC2tOC2q+C3kuC3gOC3kuC2qSDgtofgtq3gt5Dgtrjgt4og4LeD4LeK4Lau4LeP4Lax4LeA4La9IOC3g+C3kuC2pyDgtrrgt4DgtrHgt5Qg4La94La24La64LeSLiDgt4Tgtq/gt5Lgt4Pgt5Ig4LeD4LeZ4La94LeKIOC3gOC3kuC2muC3j+C3geC2sSDgtr3gt5Dgtrbgt5ngtrEg4LaF4LeA4LeD4LeK4Lau4LeP4LeA4Laa4Lav4LeTLCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC2n+C3kuC2seC3iiDgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LanIOC2muC3j+C2u+C3iuC2uiDgt4Pgt4/gtrDgtrHgtrrgtqcg4LeE4LedIOC2muC3iuKAjeC2u+C3kuC2uuC2muC2u+C2q+C2uuC2pyDgtrbgt4/gtrDgt48g4LeD4LeS4Lav4LeU4LeA4LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRTbXMiIG1zZ2lkPSI1NjAwODMwNjEyMTQ3NjcxNTI5Ij4iU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrrgt5Dgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IlNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeQ4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4La24La94LeP4La04Lec4La74Lec4Lat4LeK4Lat4LeUIOC2seC3nOC3gOC3liDgtrTgt4rigI3gtrvgtq3gt5LgtrXgtr0g4LaF4Lat4LeKIOC3gOC3kuC2uiDgt4Tgt5DgtpouIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaU4La24Lac4LeaIOC2reC3hOC3gOC3lOC2u+C3lOC3gOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4La04Lar4LeS4LeA4LeS4LapIOC2uuC3kOC3gOC3k+C2uCDgtrjgtp/gt5LgtrHgt4og4LaU4La24Lac4LeaIOC2uOC3lOC2r+C2veC3iiDgt4Dgt5Dgtrog4Laa4La9IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4i4La04Lar4LeS4LeA4LeS4LapIOC3g+C3kuC2r+C3lOC3gOC3k+C2uCDgt4Tgtrvgt4Tgt48g4La04LeK4oCN4La74Lat4LeS4Lag4LeP4La7IOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4i4La04LeQ4La44LeS4Lar4LeZ4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4La04Lar4LeS4LeA4LeS4LapIOC2lOC3g+C3iuC3g+C3miDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC3hOC3g+C3lOC2u+C3lOC3gOC3k+C2uOC2pyDgt4Dgt5ngtrHgtq3gt4og4La04Lar4LeS4LeA4LeS4LapIOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4LaJ4La94LeK4La94LeT4La44LeKIOC2uuC3kOC3gOC3k+C2uOC2pywg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+IuC2lOC2tuC2nOC3miDgtrTgt5ngt4Ug4La04Lar4LeS4LeA4LeU4LapIOC2muC3kuC2uuC3gOC2seC3iuC2sSAoU01TIOC3hOC3nSBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LeE4LedIFNJTSDgtrTgtq3gt5og4LaG4Lag4La64Lax4La6IOC2muC2uyDgtofgtq3gt5IgU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgt4Tgt50g4LeA4LeS4LeB4LeA4LeP4LeD4Lav4La64LeSIOC2tuC3gOC3kuC2seC3iiDgtq3gt5zgtrvgt4Dgtrgg4LeD4LeS4La64La94LeUIFNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4Laa4LeS4La64LeA4LeT4La44LanIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY5NTk2NzUzMzQ1NzI0MDU1MCI+IuC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LeE4LedIFNJTSDgtrTgtq3gt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8gU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgt4Tgt50g4LeA4LeS4LeB4LeK4LeA4LeP4LeD4Lav4LeP4La64LeTIOC2tuC3gOC3kuC2seC3iiDgtq3gt5zgtrvgt4Dgtrgg4LeD4LeS4La64La94LeUIFNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4Laa4LeS4La64LeA4LeT4La44LanIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+IuC2lOC2tuC2nOC3miDgtprgt5ngtqfgt5Ig4La04Lar4LeS4LeA4LeS4LapIOC3g+C2guC3g+C3iuC2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5PgtrggKFNNUyDgt4Tgt50gTU1TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgt4Tgt50gU0lNIOC2tOC2reC3miDgtpzgtrbgtqngt48g4Laa4La7IOC2h+C2reC3kiBTTVMg4La04Lar4LeS4LeA4LeS4LapIOC3gOC3meC2rSDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaU4La24Lac4LeaIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrjgtprgt48g4Lav4LeQ4La44LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiLgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC3hOC3nSBTSU0g4La04Lat4LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavIFNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La94LeS4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2lOC2tuC2nOC3miDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La44Laa4LePIOC2r+C3kOC2uOC3kuC2uiDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9IjU5OTEzOTg3MTE5MzY1OTA0MTAiPiLgtrTgt5ngt4Ug4La04Lar4LeS4LeA4LeS4LapIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCAoV0FQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4iV0FQIOC2tOC2q+C3kuC3gOC3kuC2qSDgtr3gt5Dgtrbgt5Pgtrjgtqcg4LeD4LeEIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrrgt5ngt4Tgt5Ig4LaU4La24LeAIOC2kuC3gOC3j+C2pyDgtrTgt5ngtrHgt4rgt4Dgt5Pgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2lOC2tuC2pyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La64LanIOC3hOC3nSDgtrjgt5Dgtprgt5Pgtrjgtqcg4LeE4LeQ4Laa4LeS4La64LeP4LeAIOC2h+C2reC3lOC3heC2reC3iiDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUYXNrcyIgbXNnaWQ9IjY0NjYwOTUzOTY2MjM5MzM5MDYiPiLgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgtr3gtrbgt4/gtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUYXNrcyIgbXNnaWQ9Ijc0NTQyMTU5OTU4NDc2NTgxMDIiPiLgtq/gt5DgtrHgtqcg4LeD4LeEIOC2uOC3keC2rSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4LeP4La74LeK4La64La64Lax4LeKIOC2tOC3kuC3heC3kuC2tuC2syDgt4Dgt5Lgt4Pgt4rgtq3gtrvgt4/gtq3gt4rgtrjgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3nOC2uuC3jyDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uiDgtprgt5TgtrjgtrEg4La64LeZ4Lav4LeU4La44LeKIOC2i+C2tOC3j+C2guC2nOC2uuC3miDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74Lax4LeK4Lax4Lea4LavIOC2uuC2sSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC3g+C3nOC2uuC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LaJ4LapIOC2r+C3kuC2uiDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+IuC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgtoXgtq3gtrsg4LaF4Lax4LeK4Lat4La74LeK4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeTIOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSIzNjQ2NzA5NjM2MjMzODU3ODYiPiLgtovgtrTgt4/gtoLgtpzgtrrgt5og4LeA4LeS4LeA4LeS4LawIOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgt4Tgtrvgt4Tgt48g4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Lax4LeKIOC2r+C3kOC2muC3iuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC2heC2reC2uyDgtobgtrvgtprgt4rgt4Lgt4/gt4Ag4Laa4Lap4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjI1Njc3MzQyODU1NDUwNzQxMDUiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4LaF4Lat4La7IOC2heC2seC3iuC2reC2u+C3iiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4LeT4La44LanIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtrbgtr3gtrTgtq3gt4rigI3gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjM3Njg0MTM2ODM5NTUwMjM2NiI+IuC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgt4Tgtrvgt4Tgt48g4LeD4LeS4Lav4LeUIOC2muC3hSDgt4Tgt5Dgtprgt5Ig4LeD4LeS4La64La94LeUIOC2heC2seC3iuC2reC2u+C3iiDgtprgt4rigI3gtrvgt5Lgtrrgt48g4LeA4La94LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2VycyIgbXNnaWQ9IjE2NzYxNTA5MTE2NzIyODI0MjgiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+IuC3gOC3kuC3g+C3iuC2reC2uyDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La4LCDgtrHgt5Lgtrvgt4rgtrjgt4/gtqvgtprgtrvgtqvgtrosIOC2uOC2muC3j+C2r+C3kOC2uOC3k+C2uCDgtofgtq3gt5Tgt4Xgt5Qg4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4i4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjE1MzgyNDc0MTQ0MDcxNzU5OSI+IuC2r+C3kOC2seC2pyDgt4Pgt4Qg4La44LeR4Lat4LaaIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgt4/gtrvgt4rgtrrgtrrgtrHgt4og4La04LeS4LeF4LeS4La24LazIOC3gOC3kuC3g+C3iuC2reC2u+C3j+C2reC3iuC2uOC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtrTgt5Lgt4Xgt5LgtrbgtrMg4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Pgt5zgtrrgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2ieC2qSDgtq3gt5Lgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4i4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeQ4LeA4LatIOC2heC2seC3lOC2tOC3kuC3heC3kuC3gOC3meC2veC2pyDgt4Pgt5Dgtprgt4Pgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW9yZGVyVGFza3MiIG1zZ2lkPSI3NzM0MjE3NzU0ODc3NDM5MzUxIj4i4La04LeZ4La74La24LeS4La44LanIOC3hOC3nSDgtrTgt4Pgt5Tgtrbgt5Lgtrjgtqcg4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC2nOC3meC2seC2uuC3j+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2huC2r+C3j+C2seC2uuC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4La64LeZ4Lav4LeU4La4IOC2uOC3meC2uiDgt4Pgt5Lgtq/gt5Tgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW1vdmVUYXNrcyIgbXNnaWQ9IjY4MjE1MTM0MDE4NzAzNzc0MDMiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4Law4LeP4LeA4Lax4La6IOC2seC3gOC2reC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlbW92ZVRhc2tzIiBtc2dpZD0iMTM5NDcxNDM1MjA2MjYzNTQ5MyI+IuC2muC3j+C2u+C3iuC2uuC2uuC2seC3iiDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgtpLgt4Dgt4/gtrrgt5ngt4Tgt5Ig4La64LeZ4Lav4LeU4La44LeKIOC2seC3kOC2reC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeE4LeQ4LeD4LeS4La74LeT4La4IOC2tuC3j+C2sOC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSI3MzkxMTkxMzg0MDI3MzAzMDY1Ij4i4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2heC2p+C3iuC2p+C3kiDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSIxNjE1ODgxOTMzMDM0MDg0NDQwIj4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C2muC2uOC3iiDgtoXgtqfgt4rgtqfgt5Ig4LeA4La94LanIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5PgtrjgtqcsIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5PgtrjgtqcsIOC3g+C3hCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC3hOC3kOC3g+C3kuC2u+C3k+C2uCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC2nOC3kuC2seC3iiDgtrbgt4/gtrDgt48g4LeA4LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSIyOTE4NzY4MjM4MDQ1MjA2NDU2Ij4i4LaV4Lax4LeR4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2muC3iiDgtoXgtrvgtrngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iOTk3ODIzNjk1MzQzNTg0MDAxIj4i4LaF4LeA4LeD4La7IOC2huC2u+C2muC3iuC3guC3j+C3gCDgt4Tgt50g4La64LeQ4LeA4LeU4La44LeKIOC2reC2reC3iuC3gOC2uuC3meC2seC3iiDgtq3gt5zgtrvgt4Dgtrgg4LaV4Lax4LeR4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2muC3iiDgtobgtrvgtrjgt4rgtrcg4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiLgtq3gt5Lgtrsg4Lac4LeQ4LeF4La04LeU4La4IOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTIwNDM2MTg2OTM5MTczNzQiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC2reC3kuC2uyDgtpzgt5Dgtr3gtrTgt5Tgtrjgt4og4La44LeP4Lav4LeS4La94LeS4La6IOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgt4Tgt5Dgt4Pgt5Lgtrvgt5Pgtrgg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtprgt5Dgtqngt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0RGVidWdBcHAiIG1zZ2lkPSIzMDIyMTA3MTk4Njg2NTg0MDUyIj4i4La64LeZ4Lav4LeU4La44LeKIOC2seC3kuC2r+C3nOC3g+C3iuC2muC2u+C2q+C2uiDgt4Pgtrbgtr0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0RGVidWdBcHAiIG1zZ2lkPSI0NDc0NTEyNDE2Mjk5MDEzMjU2Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC2muC3iiDgt4PgtrPgt4Tgt48g4Lax4LeS4Lav4Lec4LeD4LeK4Laa4La74Lar4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4Lax4LeP4LeBIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MTYyMDkyMTg1MTI0MjM0NDgwIj4i4La04Lav4LeK4Law4Lat4LeSIOC3g+C2guC2r+C2u+C3iuC3geC2miDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4i4La04LeZ4Lav4LeZ4LeD4LeS4La6IOC3hOC3nSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LaF4Laa4LeU4La74LeUIOC2tOC3iuKAjeC2u+C2uOC3j+C2q+C2uiDgt4Dgt5DgtrHgt5Ig4La04LeA4Lat4LeS4LaxIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3g+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjU2ODQ1MDQwNTgxOTI5MjEwOTgiPiLgtrjgt53gtqfgtrvgt4og4La74LauIOC2huC2muC3j+C2u+C2uiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiLgtprgt4/gtrvgt4og4LaG4Laa4LeP4La74La6IOC3g+C2tuC2vSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjM5MTQwMjY2ODc0MjAxNzcyMDIiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kOC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iNDU5MzM1MzIzNTk1OTczMzExOSI+IuC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4La04LeD4LeU4La24LeS4La44LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kiDgtoXgt4Dgt4PgtrHgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeKIOC2sOC3j+C3gOC2seC2uiDgtrHgt5Dgt4Dgtq3gt5Pgtrjgtqcg4La44LeZ4La6IOC3hOC3muC2reC3lOC3gOC2muC3iiDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjIzMjk2Mjc0Mjg4MzIwNjc3MDAiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2tuC2veC3meC2seC3iiDgtrHgt4Dgtq3gt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjUyNTMxNTcyOTYxODM5NDA4MTIiPiLgtrrgt5ngtq/gt5Tgtrjgtqcg4La24La94LeZ4Lax4LeKIOC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeQ4LeA4Lat4LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZUJhY2siIG1zZ2lkPSI2NTI5MzUyMDQwNzI1ODQ2MTYiPiLgtrrgt5ngtq/gt5Tgtrgg4LeA4LeQ4LeD4LeT4La44LanIOC2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZUJhY2siIG1zZ2lkPSIzODkyMjk1ODMwNDE5NTEzNjIzIj4i4Lax4LeQ4LeA4Lat4LeT4La44LanIOC2tOC3meC2u+C2tuC3kuC2uOC3miDgtofgtq3gt5Ig4LaV4Lax4LeR4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2muC3iiDgtrbgtr3gt5ngtrHgt4og4Lax4LeQ4LeA4Lat4LeT4La44LanIOC3g+C3hCDgtrTgt5Lgtqfgt5TgtrTgt4Pgtqcg4La64LeP4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2R1bXAiIG1zZ2lkPSIxNjgxNzk5ODYyNDM4OTU0NzUyIj4i4La04Lav4LeK4Law4Lat4LeSIOC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtq3gtq3gt4rgt4Dgtrog4LeD4Lec4La64LePIOC2veC2tuC3jyDgtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uuC3miDgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4Lat4Lat4LeK4LeA4La6IOC2veC3kOC2tuC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4LeA4LeU4Lax4LeKIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uuC2uuC3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq0g4Lax4Lec4Laa4La74LaxIOC3gOC3kuC3gOC3kuC2sOC2reC3iuC3gOC2uuC2muC3kuC2seC3iiDgtrrgt5Tgtq3gt4og4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC3g+C3hCDgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4Lat4Lec4La74Lat4LeU4La74LeUIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Lec4La64LePIOC2veC2tuC3jyDgtpzgtq0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSI4MDIyNTg4NjA4OTk0NTg5OTM4Ij4i4Lat4LeS4La7IOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSIzMTkzMjY5MDY5NDY5NzAwMjY1Ij4i4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeTIOC2muC3gOC3lOC3heC3lOC3gOC2miDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4Laa4LeA4LeU4LeF4LeUIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrgg4LeD4LeEIOC2uOC3lOC2u+C2tOC2r+C2uiDgt4Tgt5Dgtrsg4LaS4LeA4LeP4La64LeZ4LeE4LeSIOC2tOC3meC3hSDgtrTgtrvgt5Lgtprgt4rgt4Lgt48g4Laa4LeS4La74LeT4La4IOC3g+C3kuC2r+C3lOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjIzMTI2MTIxMzUxMjczMTAyNTQiPiLgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Dgtrog4Lat4LeP4LeA4Laa4LeP4La94LeS4Laa4LeAIOC3g+C2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4i4LaL4La04LeP4LaC4Lac4La6IOC3gOC3meC2rSDgtrTigI3gt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Ag4Lat4LeP4LeA4Laa4LeP4La94LeS4Laa4LeAIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtoXgt4DgtrDgt4/gtrHgtrrgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La04oCN4LeK4oCN4La74LeA4Lea4LeB4LeK4oCN4La64Lat4LeP4LeAIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI4NTMyMjk1MTk5MTEyNTE5Mzc4Ij4i4Lat4LeS4La7IOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI0OTk4ODM2MzcwNDI0MTg2ODQ5Ij4i4Laa4LeA4LeU4LeF4LeUIOC2muC3heC2uOC2seC3j+C2muC2u+C3lCDgtrjgtpzgt5LgtrHgt4og4Laa4LeA4LeU4LeF4LeU4LeAIOC2nOC3kOC2sSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeD4Lec4La64LePIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2tOC2r+C3iuC2sOC2reC3kiDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2muC3kOC2uOC2reC3kiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La94La24LePIOC2nOC2rSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODY3NTUzNTY0ODgwNzQyNzM4OSI+IuC3g+C3kuC2r+C3lOC3gOC3k+C2uOC3iiDgtrTgt5ngtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODAwNjIzNjMxNTg4ODM0NzY4MCI+IuC2tOC3kuC2p+C2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeZ4La7IOC3g+C3kuC2uuC2veC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LeD4LeS4Lav4LeU4LeA4LeT4La44LeK4LeA4La9IOC2tOC3iuKAjeC2u+C3gOC3j+C3hOC2uuC2muC3iiDgtrTgt5ngtrvgt5Pgtrjgtqcg4La64Lec4Lav4LePIOC2nOC2seC3iuC2seC3jyDgtobgtq/gt4/gtrEg4La04LeZ4La74LeT4La44Laa4LeKIOC2veC3kuC2uuC3j+C2tOC2r+C3kuC2guC2oOC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtrjgt5Dgtq/gt5Lgt4Tgtq3gt4og4LeA4LeT4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtrTgtq/gt4rgtrDgtq3gt5IgVUkg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrTgt4/gtr3gtrHgtrog4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNTk3MzYyNjczODE3MDYxODc3NSI+IuC2r+C2u+C3iuC3geC2seC2uiDgt4Dgt5Lgt4Hgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNzEyMTIzNTY4NDUxNTAwMzc5MiI+IuC2r+C3g+C3lOC2seC3miDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4LeA4LeS4LeB4LeP4La9IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaH4Lat4LeQ4La44LeKIOC3gOC3kuC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKLCDgtovgtrTgt4/gtoLgtpzgtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3hSDgtrHgt5zgt4Tgt5Dgtprgt5Ig4La24LeA4LanIOC2tOC2reC3iiDgtprgtrvgtrjgt5LgtrHgt4og4Lav4LeD4LeU4Lax4LeaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NodXRkb3duIiBtc2dpZD0iNzE4NTc0NzgyNDAzODkwOTAxNiI+IuC2heC2qSDgt4Dgt4Hgtrrgt5ngtrHgt4og4LeA4LeQ4LeE4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2h1dGRvd24iIG1zZ2lkPSI3MDQ2NTAwODM4NzQ2MjkxNzc1Ij4i4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2muC3heC2uOC2seC3j+C2muC2u+C3lCDgt4Dgt5Dgt4Tgt5Pgtrjgt5og4Lat4Lat4LeK4LeA4La64LanIOC2r+C2uOC2seC3iuC2sS4g4LeD4La44LeK4La04LeW4La74LeK4LarIOC3gOC3kOC3hOC3k+C2uOC2muC2pyDgtrTgtq3gt4og4Lax4Lec4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iNDEzODYwODYxMDcxNzQyNTU3MyI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt4/gtrvgt5Qg4LeA4LeT4La4IOC3gOC3kOC3heC2muC3iuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjgyNjIxOTU4MDI1ODIyNTUwMjEiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44Laa4LeKIOC3gOC3meC2rSDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgt4/gt4Ag4La44LeP4La74LeUIOC3gOC3k+C2uCDgt4Dgt4Xgtprgt4rgt4Dgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSIyNTM3OTIyMzExNDExNTQ2MDE2Ij4i4La04LeA4Lat4LeS4LaxIOC2uuC3meC2r+C3lOC2uOC3miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La94La24LeP4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iODE1MzY1MTQzNDE0NTEzMjUwNSI+IuC2reC3kuC2u+C2uuC3miDgtrTgt5ngtrvgtrbgt5Lgtrgg4Lat4LeU4LeFIOC2reC3kuC2tuC3meC2sSDgtq/gt5DgtrHgt4og4La04LeA4Lat4LeK4Lax4LePIOC2uuC3meC2r+C3lOC2uOC3miDgt4Pgt4Qg4LeD4Lea4LeA4LeP4LeA4La9IOC2tOC3nuC2r+C3iuC2nOC2veC3kuC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2r+C2u+C2seC3iuC2seC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iODkyMjM5MDk0ODY3MTgyNjU2Ij4i4LeD4LeS4La64La94LeUIOC2uuC3meC2r+C3lOC2uOC3iiDgtq/gt5Lgtrrgtq3gt4og4Laa4LeS4La74LeT4La44LeKIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgt4Pgt4Qg4La04LeP4La94Lax4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrog4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2r+C3kuC2uuC2reC3iiDgtprgtrvgtrHgt4rgtrHgt5og4Laa4LeZ4LeD4Lea4Lav4LeQ4La64LeSIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uuC2pyDgt4Pgt4Qg4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC2nOC3kuC2seC3iiDgtrTgtq/gt4rgtrDgtq3gt5Lgtrog4LeD4La44LeK4La04LeW4La74LeK4Lar4La64LeZ4Lax4LeK4La4IOC3g+C2uOC3iuC2uOC3lOC2reC3kuC2uuC2muC2pyDgtpHgt4Xgtrngt5Lgtrog4LeE4LeQ4LaaLiDgt4Dgtrvgt4rgtrDgtrHgtrog4LeD4Laz4LeE4LePIOC2tOC2uOC2q+C2muC3iiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2heC3gOC3geC3iuKAjeC2uiDgt4Dgt5ngtrrgt5IsIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kiDgt4Dgt5Lgtqfgt5ngtprgtq3gt4og4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iMjU3NjMzMzQzNDg5MzUzMjQ3NSI+IuC2tOC3kOC2muC3muC2oiDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LeaIOC2tOC3iuKAjeC2u+C2oOC3j+C2u+C2q+C2uuC2muC3iiDgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjY2MjE5MDEyMTYyMDc5MzEwODkiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4La04LeQ4Laa4Lea4Lai4La64Laa4LeKIOC2ieC3gOC2reC3iuC2muC3nOC2pyDgtofgtq3gt5Ig4La24LeA4LanIOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC2muC3iiDgt4Dgt5Lgtprgt4/gt4HgtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIOC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC2muC3iiDgtrHgt5Dgtq3gt5Ig4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNTY4OTA5NTAwOTAzMDMzNjU5MyI+IlNNUy3gtr3gt5Dgtrbgt5Pgtrgg4LeA4LeS4Laa4LeP4LeB4LaxIOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IlNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqngtrrgtprgt4og4LeE4La74LeE4LePIOC2veC3kOC2tuC3lOC2q+C3lCDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgtprgt4og4La04LeK4oCN4La74Lag4LeP4La74Lar4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEgU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgt4DgtoLgtqDgt48g4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjMxNDUzNDc0MTMwMjg1ODIzNzEiPiJXQVAtUFVTSC3gtr3gt5Dgtrbgt5Pgtrgg4LeA4LeS4Laa4LeP4LeB4LaxIOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4iV0FQIFBVU0gg4La04Lar4LeS4LeA4LeU4Lap4La64Laa4LeKIOC2veC3kOC2tuC3kyDgtofgtq3gt5Ig4La24LeA4LanIOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC2muC3iiDgt4Dgt5Lgtprgt4/gt4HgtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4DgtoLgtqDgt4/gtprgt4/gtrvgt5MgTU1TIOC2tOC2q+C3kuC3gOC3lOC2qSDgtr3gt5Dgtrbgt5Pgtrjgt4og4LeE4LedIOC2seC3kuC3hOC2rOC3gCDgtpXgtrHgt5Hgtrgg4LeA4LeZ4La24LeKIOC2tOC3kuC2p+C3lOC3gOC2miDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4LaF4Lax4LeS4LeC4LeK4LanIOC3gOC3kuC2oOC2veC3iuKAjeC2uuC3gOC2veC3kuC2seC3iiDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanLCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iMjQ1MTg3MzY2NDM2MzY2MjY2NiI+IuC2sOC3j+C3gOC2sSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Ig4Lac4Lar4LaxIOC3g+C3k+C2uOC3jyDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4i4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtovgtrTgtrvgt5Lgtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeSIOC2nOC2q+C2sSDgtrTgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9IjU1MDk1ODUwNzc5ODc5Njk2NSI+IuC2tOC3g+C3lOC2tuC3kuC2uOC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LanIOC3gOC3kOC3g+C3k+C2uOC2pyDgtrbgtr3gtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI3NDcxMzEwNjUyODY4ODQxNDk5Ij4i4La04LeD4LeU4La24LeS4La44LanIOC2tOC3kuC3gOC3kuC3g+C3meC2seC3gOC3j+C2reC3iiDgt4Pgtrjgtp/gtrgg4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2seC3kOC3gOC2reC3k+C2uCDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeS4LeD4Lea4Lat4LeKIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIyNzg5NjEwNjczNTE0MTAzMzY0Ij4i4La24LeQ4Lan4La74LeSIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2sSDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI1ODk3MzQ2NTgyODgyOTE1MTE0Ij4i4LeA4La74LeK4Lat4La44LeP4LaxIOC2tOC3hOC3hSDgtrjgtqfgt4rgtqfgtrjgt5og4La24LeQ4Lan4La74LeS4La6IOC2t+C3j+C3gOC3kuC2reC3jyDgtq/gtq3gt4rgtq0g4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrYg4La34LeP4LeA4LeS4LatIOC2muC2u+C2sSDgtrrgt5ngtq/gt5Tgtrjgt4og4La44Lec4Lax4LeA4LePIOC2r+C3kOC2uuC3kiDgtpzgt5DgtrEg4LeA4LeS4LeD4LeK4Lat4La74LeP4Lat4LeK4La44LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtpzgt5DgtrEg4Lav4LeQ4LaxIOC2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjM3MTk2ODk3NjQ1MzYzNzk1NTciPiLgtrbgt5Dgtqfgtrvgt5Ig4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4i4LaR4Laa4Lat4LeUIOC2muC2u+C2nOC2seC3iuC2seC3jyDgtr3gtq8g4La24LeQ4Lan4La74LeSIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3gOC2vSDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSIxNTA4Nzc5Njg3NDM2NTg1NzQ0Ij4i4La64LeZ4Lav4LeU4La44LeaIOC3gOC3kuC2muC2veC3iuC2tCDgt4PgtoLgtpvgt4rigI3gtrrgt4/gtoLgtpog4LeD4Lec4La64LePIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iNjI0Mzg4NzA0MTU3NzkxMjg3NyI+IuC2keC2muC2reC3lCDgtprgtrvgtpzgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gCDgt4PgtoLgtpvgt4rigI3gtrrgt48g4La94Lea4Lab4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaL4La04LeP4LaC4Lac4La64LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtovgtrTgt4/gtoLgtpwg4La34LeP4LeA4LeS4Lat4La6IOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9Ijg4MjkwOTczNzM4NTE1MjE1MDUiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4Laa4La94LeK4La0IOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2guC2miDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI1MDc4NDU5NjU5NDQwMzQ4MyI+IuC2keC2muC2reC3lCDgtprgtrvgtpzgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gCDgt4PgtoLgtpvgt4rigI3gtrrgt48g4La94Lea4Lab4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4La34LeP4LeA4LeS4Lat4La6IOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYWNrdXAiIG1zZ2lkPSI0NzAwMTMwMjI4NjU0NTM5MjAiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LaL4La04LeD4LeK4LauIOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEg4LeD4LeEIOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYWNrdXAiIG1zZ2lkPSI2OTEyMjMwNTI1MTQwNTg5ODkxIj4i4La04Lav4LeK4Law4Lat4LeS4La64LeaIOC2i+C2tOC3g+C3iuC2ruC2uiDgt4Pgt4Qg4LaL4La04Laa4LeK4oCN4La74La4IOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3gOC2vSDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSI1NTU3MDcxMzI1ODA0NDY5MTAyIj4i4LeD4La44LeK4La04LeW4La74LeK4LarIOC2i+C2tOC3g+C3iuC2ruC2uiDgt4Tgt50g4La44LeZ4LeE4LeZ4La64LeU4La44LeKIOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4LeD4Lax4LeP4LauIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4i4La04LeW4La74LeK4LarIOC2i+C2tOC3g+C3iuC2riDgtq3gt4Tgt4Dgt5Tgtrvgt5Tgtprgt5Lgtrvgt5Pgtrjgt4ogVUkg4La04LeU4La74Lax4LeK4Lax4LanIOC2i+C2tOC2muC2u+C2q+C2uuC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiDgtprgt5Lgt4Pgt5Lgtrgg4La64LeZ4Lav4LeU4La44Laa4LeKIOC2t+C3j+C3gOC3kuC2reC3jyDgtrHgt5zgtprgtrvgtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSIyMTQ4NTYzNjI4MTQwMTkzMjMxIj4i4LaF4LeA4LeD4La7IOC2seC3nOC2veC2reC3iiDgtprgt4Dgt5Tgt4Xgt5Tgt4Ag4Lav4La74LeK4LeB4Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iNzQ1ODM4Nzc1OTQ2MTQ2NjM5NyI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtrTgtq/gt4rgtrDgtq3gt5Ig4La04La74LeS4LeB4LeT4La94LaaIOC2heC2reC3lOC2u+C3lOC2uOC3lOC3hOC3lOC2q+C2reC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtrbgtr3gt4/gtrTgt5zgtrvgt5zgtq3gt4rgtq3gt5Qg4LeA4LaxIOC2muC3gOC3lOC3heC3lCDgtrHgt5Lgtrvgt4rgtrjgt4/gtqvgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtovgtqngt5LgtrHgt4og4LaF4Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSI4NTg0Njc4MzgxOTcyODIwMTE4Ij4i4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgtq0g4LeE4LedIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtoXgtq3gt5Tgtrvgt5Qg4La44LeU4LeE4LeU4Lar4Lat4LeKIOC2muC3nOC2p+C3g+C3iuC3gOC2vSDgtofgtrPgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2keC2uiDgtpTgtrbgt5og4La34LeP4LeA4LeS4Lat4La64LeaIOC2h+C2reC3kiDgtpXgtrHgt5Hgtrgg4La64LeZ4Lav4LeU4La44LaaIOC2uOC3lOC3hOC3lOC2q+C2rSDgt4Pgtrjgtpwg4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3k+C2uOC2pyDgt4Tgt50g4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtpzgt5DgtrEg4LaU4La24LanIOC2tOC3meC2seC3meC2sSDgtobgtprgt4/gtrvgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSIyODA1MTAzMjQxMTUzOTA3MTc0Ij4i4Lac4Led4La94LeT4La6IOC3g+C2ouC3k+C3gOC2sSDgt4Dgt5rgtpzgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iNzY5MDA2MzQyODkyNDM0MzU3MSI+IuC2leC2seC3keC2uCDgt4Dgt5ngtr3gt4/gt4Dgtpog4La04Lec4Lav4LeUIOC3g+C2ouC3k+C3gOC3k+C2muC2u+C2qyDgt4Dgt5rgtpzgtrogKOC3gOC3muC2nOC3gOC2reC3iiDgt4Tgt50g4La44Lax4LeK4Lav4Lac4LeP4La44LeTIOC3g+C2ouC3k+C3gOC3k+C2muC2u+C2qykg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjEyODY1MDU3MTcwNTAxMjEzNzAiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4Lan4Led4Laa4LaxIOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSI4MDQzNDMxNzEzMDE0Mzk1NjcxIj4i4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IFog4La04Lan4LeS4La04LeP4Lan4LeS4La6IOC2uOC2n+C3hOC3kOC2u+C2uuC2uOC3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaF4La64LeS4Lat4LeSIOC2p+C3neC2muC2seC3iiDgtrTgtq3gt4og4Lax4LeS4La74LeK4La44LeP4Lar4La64LanIOC3g+C3hCDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrrgtqcg4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeS4LeD4Lea4Lat4LeKIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mcmVlemVTY3JlZW4iIG1zZ2lkPSI0NzA4MTgxMTg0NDQxODgwMTc1Ij4i4Lat4LeS4La74La6IOC2seC3kuC3geC3iuC2oOC2vSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mcmVlemVTY3JlZW4iIG1zZ2lkPSI4NTU4OTIzNzg5MjIyNjcwMDY0Ij4i4LeD4La44LeK4La04LeW4La74LeK4LarIOC2reC3kuC2uyDgt4PgtoLgtprgt4rigI3gtrvgtrjgtqvgtrog4LeD4Laz4LeE4LePIOC2reC3kuC2u+C2uiDgtq3gt4/gt4Dgtprgt4/gtr3gt5Lgtprgt4Ag4La44LeU4Lav4LeA4LeS4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5qZWN0RXZlbnRzIiBtc2dpZD0iMTM3ODc0NjU4NDAyMzU4NjYwMCI+IuC2uuC2reC3lOC2u+C3lCDgt4Pgt4Qg4La04LeP4La94LaxIOC2tuC3nOC2reC3iuC2reC2uOC3iiDgtpTgtrbgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNjM1MjU2NTU5OTk2ODYzMiI+IuC2reC2uOC2seC3iuC2nOC3miDgtobgtq/gt4/gtrEg4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKICjgtrrgtq3gt5Tgtrvgt5Qg4LaR4La24LeS4La44LeKICwg4LaG4Lav4LeTICkg4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtrfgt4/gtrvgtq/gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LapIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTMxMjgwNTc1NzIzMjYyNTMiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2keC3hOC3kiDgtobgtq/gt4/gtrEg4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKICjgtrrgtq3gt5Tgtrvgt5Qg4LaR4La24LeT4La44LeKLCDgtrrgtrHgt4/gtq/gt5LgtrouKSDgtobgtq/gt5Lgtrog4La64LeQ4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lat4LeK4Laa4La7IOC2nOC3kOC2seC3k+C2uCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI0Njk0Mjg5MDAwNDEyNDkyMzQiPiLgtpTgtrYg4Lan4La64LeS4La04LeKIOC2muC2u+C2sSDgtq/gt5ngtrog4LeD4LeEIOC2lOC2tiDgtpzgtrHgt4rgtrHgt48g4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Lax4LeKIOC2tOC2p+C3kuC2nOC2rSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjgzODc3NTQ5MDE2ODg3MjgwNDMiPiLgtrjgt5TgtrvgtrTgtq/gtrog4Lan4La64LeS4La04LeKIOC2muC3kuC2u+C3k+C2uCDgt4Dgt5DgtrHgt5Ig4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgtrjgtp8g4LaF4Lax4LeK4Lat4La74LeK4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeTIOC3gOC2seC3gOC3kuC2pyDgtrrgtrHgt4/gtq/gt5Mg4LaU4La2IOC2lOC2tuC2sSDgtrrgtq3gt5Tgtrvgt5Qg4Lav4LeQ4Laa4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgt4Pgt5rgtq3gt4og4LaF4Lav4LeP4LeFIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMzNjAwNjQ2MjAyMzA1MTU3NzYiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La44La64Laa4LeKIOC3gOC3meC2rSDgtrbgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMjUwNDQwMzIyODA3Mjg2MzMxIj4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uOC2uiDgtongt4Tgtr0g4La44Lan4LeK4Lan4La44LeaIOC2heC2reC3lOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq3gtprgt4og4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5Pgtrjgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2miDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNTM1NzczMzk0MjU1NjAzMTU5MyI+IuC2tOKAjeC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3jyDgt4Pgt5rgt4Dgt4/gt4Dgtprgt4og4LeA4LeZ4LatIOC2tuC2r+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjcwMzQ2MTU5Mjg2MDkzMzEzNjgiPiLgtrTigI3gt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt48g4LeD4Lea4LeA4LeP4LeA4LeaIOC2ieC3hOC3hSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeU4La44LeU4LeE4LeU4Lar4Lat4LanIOC2tuC3kOC2s+C3k+C2uOC2pyDgtq/gtrvgtrHgt4rgtrHgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3mi4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4LeA4LeS4Lan4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iODQ2MjgxNTE3OTU3Mjc0ODc2MSI+IuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgt4Pgt5rgt4Dgt4/gt4Dgtprgtqcg4La24Lav4LeK4LawIOC3gOC3kyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+IuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgt4Pgt5rgt4Dgt4/gt4Ag4LaJ4LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Qg4La44LeU4LeE4LeU4Lar4Lat4Laa4LeKIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC2sOC3j+C2u+C2muC2uuC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2muC3kuC3g+C3kiDgt4Dgt5Lgtqfgt5ngtpog4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0FsbFByaW50Sm9icyIgbXNnaWQ9IjExMjA3OTI0Njg0NjU3MTExNTkiPiLgt4Pgt5Lgtrrgtr3gt5Qg4La44LeU4Lav4LeK4oCN4La74LarIOC2muC3j+C2u+C3iuC2uuC2uuC2seC3iiDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQWxsUHJpbnRKb2JzIiBtc2dpZD0iMjk3ODE4NTMxMTA0MTg2NDc2MiI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgtprgt5LgtrHgt4og4LeD4LeR4Lav4LeUIOC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgtprgt4/gtrvgt4rgtrog4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4Lav4LePIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjI3NTI3MzEzMDA0MTk0MTA3MjQiPiJORkMg4LeD4Lea4LeA4LeP4LeAIOC3gOC3meC2rSDgtrbgt5DgtrPgt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiJORkMg4Laa4LeP4Lap4LeKIOC2tOC2reC3iiDgtobgtq/gtrvgt4rgt4HgtrHgtrog4Laa4La74LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgtrvgtrPgt4DgtrHgtrrgtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3k+C2uOC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjczNTgzNzg0MDE5MTUyODc5MzgiPiLgtrTgt5ngt4Ug4LeD4Lea4LeA4LeP4LeA4Laa4LanIOC2tuC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLgtprgt5ngtqfgt5Ig4La04Lar4LeS4LeA4LeS4LapIOC3g+C3muC3gOC3j+C3gOC2miAo4LaL4Lav4LePLiBTcGVsbENoZWNrZXJTZXJ2aWNlKSDgtongt4Tgtr0g4La44Lan4LeK4Lan4La44LeaIOC2heC2reC3lOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq3gtprgt4og4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5Pgtrjgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2miDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4iVlBOIOC3g+C3muC3gOC3j+C3gOC2muC2pyDgtrbgt5DgtrPgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJWUE4g4LeD4Lea4LeA4LeP4LeAIOC2ieC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeUIOC2uOC3lOC3hOC3lOC2q+C2reC2muC3iiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC3kuC2u+C3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Ig4LeA4LeS4Lan4LeZ4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+IuC2tuC3kuC2reC3lOC2tOC2rSDgt4Dgt5ngtq0g4La24Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLgtrbgt5Lgtq3gt5TgtrTgtq0g4LaJ4LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Qg4La44LeU4LeE4LeU4Lar4Lat4Laa4LeKIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC2sOC3j+C2u+C2muC2uuC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2muC3kuC3g+C3kiDgt4Dgt5Lgtqfgt5ngtpog4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLgt4Dgt5LgtqLgtqcg4LeD4Lea4LeA4LeP4LeA4Laa4LanIOC2tuC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLgt4Dgt5LgtqLgtqfgt4og4LeD4Lea4LeA4LeP4LeAIOC2ieC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeUIOC2uOC3lOC3hOC3lOC2q+C2reC2muC3iiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC3kuC2u+C3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Ig4LeA4LeS4Lan4LeZ4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4LaL4La04LeP4LaC4LacIOC2tOC2u+C3kuC2tOC3j+C2veC2miDgt4Pgtrjgtp8g4LaF4Lax4LeK4Lat4La74LeK4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeTIOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9IjU2OTcxNTQxOTU0MzkwNzkzMCI+IuC2i+C2tOC3j+C2guC2nCDgtrTgt4/gtr3gtprgtrrgt48g4LeA4LeZ4Lat4LanIOC2heC2t+C3kuC2tOC3iuKAjeC2u+C3j+C2uuC2uuC2seC3iiDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2miDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNDI0ODgyODkwMDA0NTgwODcyMiI+IuC2i+C2tOC3j+C2guC2nCDgtrTgtrvgt5LgtrTgt4/gtr3gtprgtrrgt5ngtprgt4og4LaR4Laa4LeKIOC2muC3kuC2u+C3k+C2uCDgt4Tgt50g4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURldmljZUFkbWlucyIgbXNnaWQ9IjUwMjU2MDgxNjc3MDk5NDI0ODUiPiLgtq/gtrvgtrHgt4rgtrHgt4/gtqcg4LaL4La04LeP4LaC4LacIOC2tOC2u+C3kuC2tOC3j+C2veC2muC2uuC3kuC2seC3iiDgtpHgtprgt4og4Laa4LeS4La74LeT4La44LanIOC3hOC3nSDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LanIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMzY1OTQ3NzE3MTYzODY2ODQ0Ij4i4Lat4LeS4La7IOC2r+C3kuC3geC3j+C2seC2reC3kuC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMDQ2MTI2NjE5MzE2NjcxNDc2Ij4i4Lat4LeS4La74La64LeaIOC2t+C3iuKAjeC2u+C2uOC2q+C2uiDgtpXgtrHgt5Hgtrgg4LeA4Lea4La94LeP4LeA4LaaIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4Lax4LeUIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjkxNzUzNzE2MTMzMjI1NjI5MzQiPiLgtq/gtrvgt4rgt4Hgtprgtrrgt5og4LeA4Lea4Lac4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI2ODY2NTYzMjM0Mjc0MTA0MjMzIj4i4La44LeW4LeD4LeS4Laa4La64LeaIOC3hOC3nSDgtqfgt4rigI3gtrvgt5Dgtprgt4rgtrTgt5Hgtqngtrrgt5og4LeA4Lea4Lac4La6IOC2leC2seC3keC2uCDgtrjgt5zgt4Tgt5zgtq3gtpog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2i+C2tOC3j+C2guC2nOC2uuC2seC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4Lav4LePIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4DgtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI0Nzc4NzMxNzAzNjAwOTA5MzQwIj4i4La64Lat4LeU4La74LeUIOC2tOC3lOC3gOC2u+C3lCDgtrTgt5Lgtrvgt5Lgt4Pgt5Dgtr3gt5Dgt4Pgt4rgtrgg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iODQ4MDAxNjc3MTEzNDE3NTg3OSI+IuC2uuC2reC3lOC2u+C3lOC2tOC3lOC3gOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4Lav4LePIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+IuC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5ngtq0gTGludXgg4LeD4LaC4Lal4LePIOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0ODk2OTkyMDc5MTgyNjQ5MTQxIj4i4La04LeA4Lat4LeS4LaxIOC3g+C3kuC2uuC2veC3lCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Ig4LeA4LeZ4LatIOC3g+C3kOC2tOC2uuC3lOC2uOC3iiDgt4PgtoLgtqXgt48g4LaJ4La94LeK4La94LeA4LeS4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyc2lzdGVudEFjdGl2aXR5IiBtc2dpZD0iODg0MTExMzYyNzk1NTU2MzkzOCI+IuC2uuC3meC2r+C3lOC2uCDgt4Pgt5Dgtrjgt4Dgt5Lgtqfgtrgg4Law4LeP4LeA4Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+IuC2uOC2reC2muC2uuC3miDgtrTgt4Dgtq3gt5LgtrEg4LaR4LeE4LeSIOC2muC3nOC2p+C3g+C3iiDgtrHgt5zgtrHgt5Dgt4Pgt5Mg4La04LeQ4LeA4Lat4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC3gOC2veC2pyDgtrjgtq3gtprgtrog4LeD4LeT4La44LePIOC2muC3kuC2u+C3k+C2uOC3meC2seC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4La04La44LePIOC2muC3kuC2u+C3k+C2uCDgtrjgtpzgt5LgtrHgt4ogIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzODQ3NjAwNDc1MDgyNzgyNzIiPiLgtrrgt5ngtq/gt5Tgtrjgtqcg4Lat4La4IOC2muC3nOC2p+C3g+C3iiDgtrjgtq3gtprgtrog4Lat4LeU4La9IOC2seC3nOC2tuC3kuC2s+C3k+C3gCDgtrvgtrPgt48g4La04LeA4Lat4LeK4LeA4LeP4Lac4LeZ4LaxIOC2uuC3j+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrog4Lav4LeU4La74Laa4Lau4Lax4La6IOC2uOC2seC3iuC2r+C2nOC3j+C2uOC3kyDgtprgtrvgtrjgt5LgtrHgt4og4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2i+C2tOC3j+C2guC2nOC2uuC2seC3iiDgt4PgtrPgt4Tgt48g4LaJ4Lat4LeS4La74LeSIOC2uOC2reC2muC2uiDgt4Pgt5Pgtrjgt48g4Laa4LeS4La74LeT4La44LanIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iMTg0Mzg1MTI5NTM3NzA1OTM4Ij4i4La64LeZ4Lav4LeU4La44LeKIOC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+IkFuZHJvaWQg4La04LeQ4Laa4Lea4LaiIOC2uOC3kOC2muC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeA4LeQ4Lav4Lac4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5Dgtprgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LapIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiLgtrrgt5ngtq/gt5Tgtrjgt5og4LeA4LeZ4Lax4Lat4LeKIOC2r+C2reC3iuC2rSDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iNDYyNTMyMzY4NDEyNTQ1OTQ4OCI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgtq/gtq3gt4rgtq0g4LeE4LeS4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4LaJ4LapIOC2r+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgt4Tgt5Dgtrngt5Lgtr3gt5Ig4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiLgt4Tgt5Dgtrngt5Lgtr3gt5Ig4Lac4Lec4Lax4LeUIOC2uOC3kOC2muC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9Ijc0NzI5MjE3NjgzNTc5ODE5ODYiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4LaG4Lag4La64Lax4La64LeaIOC2ieC2qSDgtrTgt4rigI3gtrvgtrjgt4/gtqvgtrog4La44LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4i4La64LeZ4Lav4LeU4La44Laa4LanIOC2keC3hOC3kiDgtprgt5rgtq3gtrosIOC2r+C2reC3iuC2rSDgt4Pgt4Qg4LeE4LeQ4La54LeS4La94LeSIOC2tOC3iuKAjeC2u+C2uOC3j+C2qyDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjIxOTkxMjg0ODI4MjAzMDY5MjQiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4Laa4LeZ4LeF4LeS4Lax4LeK4La4IOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSI1NjI4NTMwOTcyNTQ4MDcxMjg0Ij4i4Lax4LeAIOC3hOC3nSDgtrrgt4/gt4Dgtq3gt4rgtprgt4/gtr3gt5LgtrEg4Laa4La74LaxIOC2veC2ryBBbmRyb2lkIOC2tOC3kOC2muC3muC2ouC2uuC2seC3iiDgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2tuC2veC3g+C3hOC3kuC2rSDgtoXgt4Dgt4Pgtrsg4Lat4LeT4Lax4LeK4Lav4LeUIOC3g+C2uOC2nCDgtrHgt4Ag4La64LeZ4Lav4LeU4La44LeKIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4Lat4LeS4La24LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiLgtrrgt5ngtq/gt5Tgtrjgt5og4LeD4LeS4La64La94LeU4La4IOC3hOC3kOC2ueC3kuC2veC3kiDgtq/gtq3gt4rgtq0g4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3NDY0MDg3MTk0NTQzNDU2NSI+IuC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4LeE4LeQ4La54LeS4La94LeSIOC2seC3j+C2uOC3j+C3gOC2veC3kiDgtq3gt5Tgt4Ug4LaH4Lat4LeSIOC2nOC3nOC2seC3lCDgtrjgt5Dgtprgt5Pgtrjgt5ngtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC2p+C3kOC2tuC3iuC2veC2pyDgtobgtqDgtrrgtrHgtrog4Lax4LeS4Lav4LeE4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrjgtpzgt5LgtrHgt4og4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtpLgt4Dgt4/gtrrgt5og4Lav4Lat4LeK4LatIOC2seC3kOC3gOC2rSDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uiDgt4DgtrEg4Lax4LeS4LeD4LePLCDgtpLgt4Dgt4/gtrrgt5og4LaG4La74La44LeK4La34La6IOC2reC3gOC2reC3iiDgt4Pgt5ngtrjgt5LgtrHgt4og4LeD4LeS4Lav4LeU4LeA4LeT4La44LanIOC2ieC2qSDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC3hOC3kOC2ueC3kuC2veC3kiDgtrHgt4/gtrjgt4/gt4Dgtr3gt5Ig4Lat4LeU4LeFIOC2h+C2reC3kiDgtpzgt5zgtrHgt5Qg4La44LeQ4Laa4LeT4La44LeZ4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtq/gt5Tgtrvgtprgtq7gtrEg4LaG4Lag4La64Lax4La6IOC2seC3kuC2r+C3hOC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La44Laf4LeS4Lax4LeKIOC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaS4LeA4LeP4La64LeaIOC2r+C2reC3iuC2rSDgtrHgt5Dgt4Dgtq0g4La94La24LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrog4LeA4LaxIOC2seC3kuC3g+C3jywg4LaS4LeA4LeP4La64LeaIOC2huC2u+C2uOC3iuC2t+C2uiDgtq3gt4Dgtq3gt4og4LeD4LeZ4La44LeS4Lax4LeKIOC3g+C3kuC2r+C3lOC3gOC3k+C2uOC2pyDgtongtqkg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMjg5ODkwMjcxNjQ1OTIxNDExIj4i4La64LeZ4Lav4LeU4La44LeKIOC3g+C2uOC3iuC2tOC2reC3iiDgtpzgt5ngtrEg4La64LeP4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMTk1NjIyMTc3NzgyNDQ1MjQiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LeD4LeEIOC2tuC3j+C3hOC3kuC2uyDgtrjgt4/gtrDgt4rigI3gtrrgtrrgtrHgt4rgtpzgt5ngtrHgt4og4La64LeZ4Lav4LeU4La44LeaIOC3g+C2uOC3iuC2tOC2reC3iiDgtpzgt5ngtrHgtrrgt4/gtrjgtqcg4LeD4LeEIOC2uuC3meC2r+C3lOC2uOC3miDgt4Pgtrjgt4rgtrTgtq3gt4og4LeA4La94LeS4Lax4LeKIOC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgt4Pgt4Qg4La24LeP4LeE4LeS4La7IOC2uOC3j+C2sOC3iuKAjeC2uuC2uuC2seC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt5og4LeD4La44LeK4La04Lat4LeKIOC2nOC3meC2seC2uuC3j+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRMb2dzIiBtc2dpZD0iNjYxNTc3ODU0MzE5ODk2NzYxNCI+IuC3g+C2guC3gOC3muC2r+C3kyDgtr3gt5zgtpzgt4og4Lav4Lat4LeK4LatIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MjA2MTMxMzI5MzQ1NTE1MSI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uuC3miDgt4Dgt5Lgt4Dgt5LgtrAg4La94Lec4Lac4LeKIOC2nOC3nOC2seC3lCDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgt4Pgt4Qg4La04Lee4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4LaU4La2IOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3meC2seC3iiDgtprgt5Tgtrjgtprgt4og4Laa4La74Lax4LeK4Lax4LeZ4LeE4LeS4LavIOC2uuC2seC3j+C2r+C3kyDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3meC3gOC3k+C2uOC2pyDgtrjgt5ngtrrgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIwNjM0MzgxNDAyNDE1NjA0NDMiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgt5og4LeA4LeS4LeA4LeS4LawIOC2veC3nOC2nOC3iiDgtpzgt5zgtrHgt5Qg4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4LeD4LeEIOC2tOC3nuC2r+C3iuC2nOC2veC3kuC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaH4Lat4LeU4LeF4Lat4LeK4LeAIOC2lOC2tiDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5ngtrHgt4og4Laa4LeU4La44Laa4LeKIOC2muC2u+C2seC3iuC2seC3meC3hOC3kuC2ryDgtrrgtrHgt4/gtq/gt5Mg4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Pgt5ngt4Dgt5Pgtrjgtqcg4La44LeZ4La64LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i4Lax4LeQ4LeA4LatIOC2sOC3j+C3gOC2seC2uiDgt4PgtrPgt4Tgt48g4LaV4Lax4LeR4La4IOC2uOC3j+C2sOC3iuKAjeC2uiDgt4Dgt5Lgtprgt5rgtq3gtprgtrrgtprgt4og4LeE4LeP4LeA4LeS4Lat4LePIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI4MjgzOTEyNDg4NDMzMTg5MDEwIj4i4Lax4LeQ4LeA4LatIOC2sOC3j+C3gOC2seC2uiDgt4PgtrPgt4Tgt48g4LeA4LeS4Laa4Lea4Lat4Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtpXgtrHgt5Hgtrgg4LeD4LeK4Lau4LeP4La04LeS4LatIOC2uOC3j+C2sOC3iuKAjeC2uiDgt4Dgt5Lgtprgt5rgtq3gtprgtrrgtprgt4og4La34LeP4LeA4LeS4Lat4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX21hbmFnZUNhQ2VydGlmaWNhdGVzICgxNjc4MzkxODk2Nzg2ODgyMDE0KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzICg0MDE1NjQ0MDQ3MTk2OTM3MDE0KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaWFnbm9zdGljIiBtc2dpZD0iODA3Njc0Mzk1MzkwODAwMDM0MiI+IkRpYWcg4LeA4LeS4LeD4LeS4Lax4LeKIOC3hOC3kuC2uOC3kuC2muC3j+C2u+C2reC3iuC3gOC2uiDgtq/gtrvgtqsg4LeD4La44LeK4La04Lat4LeK4LeA4La94LanIOC2muC3kuC2uuC3gOC3k+C2uC8g4La94LeS4LeA4LeS4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlhZ25vc3RpYyIgbXNnaWQ9IjY2MDgyOTU2OTIwMDI0NTIyODMiPiJEaWFnIOC2muC2q+C3iuC2qeC3j+C2uuC2uOC2pyDgtoXgtrrgt5Lgtq3gt5Ig4LaV4Lax4LeR4La4IOC3g+C2uOC3iuC2tOC2reC2muC3iiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4LeD4LeEIOC2veC3kuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaL4Lav4LeP4LeE4La74Lar4La64Laa4LeKIOC2veC3meC3gyAvZGV2IOC2reC3lOC2vSDgtofgtq3gt5Ig4Lac4Lec4Lax4LeULiDgtrjgt5ngtrrgtqcg4La04Lav4LeK4Law4Lat4LeSIOC3g+C3iuC2ruC3j+C2uuC3kuC2reC3j+C3gOC2pyDgt4Pgt4Qg4LaG4La74Laa4LeK4LeC4LeP4LeA4LanIOC2tuC2veC2tOC3keC2uOC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4LeQ4Laa4LeS4La64LeP4LeA4Laa4LeKIOC2h+C2rS4g4Lax4LeS4LeC4LeK4La04LeP4Lav4LaaIOC3hOC3nSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgtrvgt5Qg4LeA4LeS4LeD4LeS4Lax4LeKIOC2r+C3mOC2qeC3j+C2guC2nC3gt4Dgt5Lgt4Hgt5rgt4Lgt5Lgtq0g4Lav4Led4LeCIOC2seC3kuC2u+C3iuC2q+C2uiDgt4PgtrPgt4Tgt48g4La04La44Lar4Laa4LeKIOC2uOC3meC2uiDgtrrgt5zgtq/gt4/gtpzgtq0g4La64LeU4Lat4LeU4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29tcG9uZW50U3RhdGUiIG1zZ2lkPSI2MzM1NTc2Nzc1NzExMDk1OTMxIj4i4La64LeZ4Lav4LeU4La44LeKIOC2heC2guC2nCDgt4Pgtrbgtr0g4LeE4LedIOC2heC2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODg4NzQzNTc0MDk4MjIzNzI5NCI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgtpog4LaF4LaC4Lac4La64Laa4LeKIOC3g+C2tuC2vSDgtq8g4Lax4LeQ4Lav4LeK4LavIOC2uuC2seC3iuC2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5Dgtq/gtpzgtq3gt4og4Lan4LeQ4La24LeK4La94Lan4LeKIOC2heC3gOC3geC3iuKAjeC2uuC2reC3jyDgtoXgtrbgtr0g4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4LaaLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC3g+C3kOC2veC2muC3kuC2veC3iuC2veC3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeFIOC2uuC3lOC2reC3lOC2uiwg4La34LeP4LeA4LeS4LatIOC2seC3nOC2muC2u+C2sSwg4LaF4LeD4LeK4Lau4LeS4La7IOC3hOC3nSDgtoXgt4Pgt4rgtq7gt4/gtrrgt5Ig4Lat4Lat4LeK4LeA4La64LanIOC2uuC3meC2r+C3lOC2uCDgtrTgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC2keC2uuC2pyDgt4Tgt5Dgtprgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODI3MjMyNDg0NDE2NTA1NjE1Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC2miDgtoXgtoLgtpzgtrrgtprgt4og4LeD4La24La9IOC2ryDgtrHgt5Dgtq/gt4rgtq8g4La64Lax4LeK4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3kOC2r+C2nOC2reC3iiDgtq/gt5Tgtrvgtprgtq7gtrEg4LaF4LeA4LeB4LeK4oCN4La64Lat4LePIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4LatIOC2muC3hSDgt4Tgt5DgtpouIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LeD4LeQ4La94Laa4LeS4La94LeK4La94LeZ4Lax4LeKIOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4La64LeU4Lat4LeU4La6LCDgtrfgt4/gt4Dgt5Lgtq0g4Lax4Lec4Laa4La74LaxLCDgtoXgt4Pgt4rgtq7gt5Lgtrsg4LeE4LedIOC2heC3g+C3iuC2ruC3j+C2uuC3kiDgtq3gtq3gt4rgt4Dgtrrgtqcg4La64LeZ4Lav4LeU4La4IOC2tOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaR4La64LanIOC3hOC3kOC2muC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0NjI3MzE1MzUxMDkzNTA4Nzk1Ij4i4LaF4LeA4LeD4La7IOC2tOC3iuKAjeC2u+C2r+C3j+C2seC2uiDgtprgt5Lgtrvgt5Pgtrgg4LeE4LedIOC2heC3hOC3neC3g+C3kiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDA4ODY0MjY1NDA4NTg1MDY2MiI+IuC2uuC3meC2r+C3lOC2uOC2muC2pyDgtpHgtrrgtqcg4LeE4LedIOC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LanIOC3gOC3kuC3geC3muC3guC3kuC2rSDgtoXgt4Dgt4Pgtrsg4La04LeK4oCN4La74Lav4LeP4Lax4La64LanIOC3hOC3nSDgtoXgt4Tgt53gt4Pgt5Ig4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4osIOC2kuC3gOC3j+C2pyDgtoXgt4Dgt4Pgtrsg4La04LeK4oCN4La74Lav4LeP4Lax4La6IOC2seC3nOC2muC3hSDgtpzgt5Tgtqvgt4/gtoLgtpwg4LeA4La94LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iODQ2MzE4MTYyODY5NTM5NjM5MSI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iNDk3Mzk4Njc2MjI0MTc4MzcxMiI+IuC2lOC2tuC2nOC3miDgtoXgtrfgt5Lgtrvgt5TgtqDgt5Ig4La64LeZ4Lav4LeU4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tuC2nOC3miDgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4LCDgtrTgt4Dgtq3gt5LgtrEg4La64LeZ4Lav4LeU4La44LeKIOC3gOC2veC3kuC2seC3iiDgtq/gtq3gt4rgtq0g4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uCwg4La04LeK4oCN4La74Led4Lap4LePIOC2muC3kuC2u+C3k+C2uCDgt4Dgt5DgtrHgt5Ig4Lav4LeaIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeS4LeB4LeK4LeB4La24Lav4LeA4La4IOC3g+C3kuC2r+C3lCDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNldHRpbmdzIiBtc2dpZD0iMjIyNjE5NTI5MDk1NTIyNDczMCI+IuC2tOC2r+C3iuC2sOC2reC3kiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4i4La04Lav4LeK4Law4Lat4LeSIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtq/gtq3gt4rgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtpTgtrbgtpzgt5og4La04Lav4LeK4Law4Lat4LeSIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtq/gt53gt4Ig4Lac4LeQ4Lax4LeK4LeA4LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiLgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4La04Lav4LeK4Law4Lat4LeSIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjgxNTk1MzU2MTMwMjAxMzczOTEiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgt5og4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2r+C2reC3iuC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4LaL4La04LeP4LaC4LacIOC3g+C2s+C3hOC3jyDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIyMTQ5NDI2NjY0MjI2MTUyMTg1Ij4iR29vZ2xlIOC3g+C3muC3gOC3jyDgt4Pgt5Lgtq3gt5Lgtrrgtrgg4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMTI4NzMwOTQzNzYzODM4MDIyOSI+Ikdvb2dsZSDgt4Pgt5rgt4Dgt48g4LeD4LeS4Lat4LeS4La64La4IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlQm9vdENvbXBsZXRlZCIgbXNnaWQ9IjUzMTI5NjU1NjU5ODc4MDAwMjUiPiLgtobgtrvgtrjgt4rgtrfgtrrgt5rgtq/gt5Mg4Law4LeP4LeA4Lax4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4i4La04Lav4LeK4Law4Lat4LeS4La6IOC2h+C2u+C2ueC3lOC2uCDgtoXgt4Dgt4PgtrHgt4og4LeA4LeWIOC3gOC3hOC3j+C2uCDgtrrgt5ngtq/gt5Tgtrgg4LaG4La74La44LeK4La3IOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4Lan4LeQ4La24LeK4La94Lan4La6IOC2huC2u+C2uOC3iuC2tyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La44Laf4LeS4Lax4LeKIOC2tOC2uOC3jyDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC2heC2reC2uyDgt4Pgt5Dgtrjgt4Dgt5Lgtqfgtrgg4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtrHgt5Lgt4Pgt48g4LeD4La44LeK4La04LeW4La74LeK4LarIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC2uCDgtrTgt4rigI3gtrvgtrjgt4/gtq8g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4i4La04Lav4LeK4Law4Lat4LeS4La6IOC2h+C2u+C2ueC3lOC2uCDgtoXgt4Dgt4PgtrHgt4og4LeA4LeWIOC3gOC3hOC3j+C2uCDgtrrgt5ngtq/gt5Tgtrgg4LaG4La74La44LeK4La3IOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4Lav4LeU4La74Laa4Lau4Lax4La6IOC2huC2u+C2uOC3iuC2tyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La44Laf4LeS4Lax4LeKIOC2tOC2uOC3jyDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC2heC2reC2uyDgt4Pgt5Dgtrjgt4Dgt5Lgtqfgtrgg4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtrHgt5Lgt4Pgt48g4LeD4La44LeK4La04LeW4La74LeK4LarIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3muC2uCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Lgtq3gt4rgt4Dgtrog4La04LeK4oCN4La74La44LeP4LavIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiLgtrbgt5DgtrPgt5Tgtqvgt5Qg4LeA4LeS4Laa4LeP4LeB4Lax4La6IOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IuC2tOC3iuKAjeC2u+C2oOC3j+C2u+C2q+C2uuC2pyDgtrTgt4Pgt5Tgt4Dgtq8g4La04LeA4Lat4LeS4LaxLCDgtrTgt4rigI3gtrvgtqDgt4/gtrvgtqvgtrrgtrHgt4og4La64LeQ4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5Dgtqngt5LgtrTgt5Tgtrsg4La44Lat4Laa4La6IOC2t+C3j+C3gOC3kuC2reC2uiDgt4Tgt5rgtq3gt5Qg4Laa4Lec4LanLCDgtoXgtrDgt5Lgtpog4La34LeP4LeA4LeS4Lat4La6IOC2uOC2n+C3kuC2seC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4La04La44LePIOC2muC3kuC2u+C3k+C2uCDgt4Tgt50g4LaF4LeD4LeK4Lau4LeS4La7IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjgyNTgwMzc2NDIzMjQ0NTA5MSI+IuC2tOC3iuKAjeC2u+C2oOC3j+C2u+C2q+C2uuC2pyDgtrTgt4Pgt5Tgt4Dgtq8g4La04LeA4Lat4LeS4LaxLCDgtrTgt4rigI3gtrvgtqDgt4/gtrvgtqvgtrrgtrHgt4og4La64LeQ4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5Dgtqngt5LgtrTgt5Tgtrsg4La44Lat4Laa4La6IOC2t+C3j+C3gOC3kuC2reC2uiDgt4Tgt5rgtq3gt5Qg4Laa4Lec4LanLCDgtoXgtrDgt5Lgtpog4La34LeP4LeA4LeS4Lat4La6IOC2uOC2n+C3kuC2seC3iiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4La04La44LePIOC2muC3kuC2u+C3k+C2uCDgt4Tgt50g4LaF4LeD4LeK4Lau4LeS4La7IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ29udGFjdHMiIG1zZ2lkPSI4MzQ4NDgxMTMxODk5ODg2MTMxIj4i4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiLgt4PgtrPgt4TgtrHgt4og4La04LeU4Lav4LeK4Lac4La94La64Lax4LeKIOC3hOC2pyDgtpTgtrYg4LaH4La44Lat4LeU4La44LeKIOC2nOC2reC3iiwg4LaKLeC2reC3kOC2tOC3kOC2veC3iiwg4LeE4LedICDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4LaG4Laa4LeP4La7IOC3gOC2veC3kuC2seC3iiDgt4PgtrHgt4rgtrHgt5Lgt4Dgt5rgtq/gtrHgtrog4Laa4La74Lac4Lat4LeKIOC3g+C2guC2m+C3iuKAjeC2uuC2reC2ryDgtofgtq3gt5Tgt4Xgt5Tgt4AsIOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4Lac4La24Lap4LeP4LeA4LeTIOC2h+C2reC3kiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4La04LeS4LeF4LeS4La24LazIOC2r+C2reC3iuC2rSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La44Laf4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2tOC3kuC3heC3kuC2tuC2syDgtq/gtq3gt4rgtq0g4LeD4LeU4La74LeQ4Laa4LeT4La44LanIOC2ieC2qSDgtr3gtrbgt48g4Lav4LeZ4LaxIOC2heC2reC2uywg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LaU4La2IOC2seC3nOC2r+C3kOC2seC3lOC3gOC2reC3iuC3gOC2uCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lav4Lat4LeK4LatIOC2tuC3meC2r+C3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LaJ4LapIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDQwNjU0MTUyNDU3MzAwNjYyIj4i4Lax4LeS4La64La44LeS4LatIOC2tOC3lOC2r+C3iuC2nOC2veC2uuC2seC3iiDgt4Pgtrjgtpwg4LaU4La2IOC2h+C2uOC2reC3lCwg4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtprgt4Ug4LeE4LedIOC3gOC3meC2seC2reC3iiDgtobgtprgt4/gtrvgtrrgtprgt5LgtrHgt4og4LeD4Lax4LeK4Lax4LeS4LeA4Lea4Lav4Lax4La6IOC2muC3hSDgt4PgtoLgtpvgt4rigI3gtrrgt4/gtq3gtrog4LaH4Lat4LeU4La94Lat4LeKIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8g4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtpzgt5DgtrEg4Lav4Lat4LeK4LatIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtq/gtq3gt4rgtq0g4LaL4La04LeD4LeK4LauIOC2muC3kuC2u+C3k+C2uOC2pyDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4LaxIOC2heC2reC2uyDgtpTgtrbgtpzgt5og4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtq/gtq3gt4rgtq0g4La24LeZ4Lav4LeP4Lac4LeQ4Lax4LeT4La4IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNvbnRhY3RzIiBtc2dpZD0iNTEwNzQ5MjA4NjQxNjc5MzU0NCI+IuC2lOC2tuC2nOC3miDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzI0MzkzMjUyMTk1MzYwMiI+IuC2seC3kuC2uuC2uOC3kuC2rSDgtrTgt5Tgtq/gt4rgtpzgtr3gtrrgtrHgt4rgtqcg4LaU4La2IOC2h+C2uOC2reC3liwg4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtprgt4Ug4LeE4LedIOC2h+C2uOC2reC3lOC2uOC3iiDgtprgt4Ug4LeD4LaC4Lab4LeK4oCN4La64LeP4LatIOC2h+C2reC3lOC2veC2reC3iiDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyAo4La94LeS4La04LeS4LaxKSDgtq/gtq3gt4rgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uuC3meC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2r+C2reC3iuC2rSDgtrjgt5Dgtprgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTg5ODY5MjI0NjI1MTYzNTU4Ij4i4LeD4Laz4LeE4Lax4LeKIOC2tOC3lOC2r+C3iuC2nOC2veC2uuC2seC3iuC2pyDgtpTgtrYg4LaH4La44Lat4LeWLCDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2muC3hSDgt4Tgt50g4LaH4La44Lat4LeU4La44LeKIOC2muC3hSDgt4PgtoLgtpvgt4rigI3gtrrgt4/gtrEg4LaH4Lat4LeU4La94Lat4LeKIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePICjgtr3gt5LgtrTgt5LgtrEpIOC2r+C2reC3iuC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La64LeZ4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lav4Lat4LeK4LatIOC2uOC3kOC2muC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGxMb2ciIG1zZ2lkPSIzNDc4MTMzMTg0NjI0MTAyNzM5Ij4i4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC2uiDgtprgt5Lgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzcwMDY0NTE4NDg3MDc2MDI4NSI+IuC2tOC3kOC2uOC3kuC2q+C3meC2sSDgt4Pgt4Qg4La04LeS4Lan4LeA4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgtpzgt5DgtrEg4Lav4Lat4LeK4LatIOC2h+C2reC3lOC3heC2reC3iiwg4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4LacIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpwg4Lav4Lat4LeK4LatIOC3g+C3lOC2u+C2muC3iuC3guC3kuC2rSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3kiDgt4Pgt4Qg4LaU4La24Lac4LeaIOC2r+C3kOC2seC3lOC2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nCDgtq/gtq3gt4rgtq0g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrbgt5ngtq/gt48g4Lac4LeQ4Lax4LeT4La4IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4i4La94LeQ4La24LeZ4LaxIOC3g+C3hCDgtrTgt5Lgtqfgt4DgtrEg4LaH4La44Lat4LeU4La44LeKIOC2tOC3kuC3heC3kuC2tuC2syDgtq/gtq3gt4rgtq0g4LaH4Lat4LeU4LeF4Lat4LeK4LeAIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC3iiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LaU4La24Lac4LeaIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpzgt4og4Lav4Lat4LeK4LatIOC2i+C2tOC3g+C3iuC2riDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qeC2r+C3meC2sSDgtoXgtq3gtrsg4LaU4La24Lac4LeaIOC2heC2seC3lOC2r+C3kOC2seC3lOC2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC3iiDgtq/gtq3gt4rgtq0g4La24LeZ4Lav4LeP4Lac4LeQ4Lax4LeT4La4IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4i4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC2uiDgtr3gt5Lgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NjE4MDYwNjIyNzQxMTkyNDUiPiLgtr3gt5Dgtrbgt5ngtrEg4LaH4La44Lat4LeU4La44LeKIOC3g+C3hCDgtrTgt5Lgtqfgt4DgtrEg4LaH4La44Lat4LeU4La44LeKIOC2r+C2reC3iuC2rSDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4Lac4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tuC2nOC3miDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4Lac4La6IOC2uOC3kOC2muC3k+C2uOC2pyDgt4Tgt50g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeZ4La74LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4Mzk0MTczNjM1Mjc4Nzg0MiI+IuC2tOC3kOC2uOC3kuC2q+C3meC2sSDgt4Pgt4Qg4La04LeS4Lan4LeA4LeZ4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgtq/gtq3gt4rgtq0g4LaH4Lat4LeU4LeF4LeU4LeAIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC2uiDgtrjgt5Dgtprgt5Pgtrjgtqcg4LeE4LedIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4LatIOC2muC2vSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUHJvZmlsZSIgbXNnaWQ9IjQ3MDE4ODk4NTI2MTI3MTY2NzgiPiLgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2tOC2rSDgtprgt5Lgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NjI0NzUxNTE4NDk4ODg4NDgiPiLgtpTgtrbgtpzgt5og4Lax4La4IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaG4Lav4LeTIOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgt5og4Lac4La24Lap4LePIOC3gOC3kyDgtofgtq3gt5Ig4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC2tOC3kOC2reC3kuC2muC2qSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngt4Tgt5Ig4Lat4Lea4La74LeU4La4IOC2uuC3meC2r+C3lOC2uOC2pyDgtpTgtrbgt4Ag4LeE4Laz4LeU4Lax4LePIOC2nOC3kOC2seC3k+C2uOC2pyDgt4Tgt5Dgtprgt5Ig4LeA4LaxIOC2tuC3gCDgt4Pgt4Qg4LaU4La24Lac4LeaIOC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaF4Lax4LeZ4Laa4LeKIOC2heC2uuC2pyDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LavIOC3hOC3kOC2muC3kiDgt4Dgt5Pgtrjgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiLgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2tOC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTU1MjA4NDI5NDU5ODQ2NTg5OSI+IuC2lOC2tuC2nOC3miDgtrHgtrgg4LeD4LeEIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeA4LeQ4Lax4LeSIOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8g4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC2tOC3kOC2reC3kuC2muC2qSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt50g4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La44Lac4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtpTgtrbgt4Ag4LeE4Laz4LeU4Lax4LePIOC2nOC2rSDgt4Tgt5Dgtprgt5Ig4LaF4Lat4La7IOC2heC2seC3meC2muC3iiDgtoXgtrrgtqcg4LaU4La24Lac4LeaIOC2tOC3kOC2reC3kuC2muC2qSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La64LeQ4LeA4LeS4La6IOC3hOC3kOC2muC3kiDgtrbgt4Ag4Laa4LeS4La64LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiLgtpTgtrbgtpzgt5og4LeD4La44LeP4LaiIOC2tOC3iuKAjeC2u+C3gOC3j+C3hOC2uiDgtprgt5Lgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDI1NTcwNjAyNzE3MjA1MDg3MiI+IuC2lOC2tuC2nOC3miDgt4Pgt4Qg4LaU4La24Lac4LeaIOC2uuC3hOC3heC3lOC3gOC2seC3iuC2nOC3miDgt4Pgtrjgt4/gtqIg4La64LeP4LeA4Lat4LeK4Laa4LeP4La94LeT4Lax4La64Lax4LeKIOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5Pgtrjgtqcg4LeE4LedIOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrbgt5ngtq/gt48g4Lac4LeQ4Lax4LeT4La44LeaIOC2r+C3kyDgt4Pgt5Dgtr3gtprgt5Lgtr3gt5Lgtrjgtq3gt4og4LeA4Lax4LeK4LaxIC0tIOC3gOC3kuC3geC3iuC3gOC3j+C3g+C2uuC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LeD4La44LeP4LaiIOC2ouC3j+C2veC3gOC2vSDgtpTgtrbgtpzgt5og4LeD4LeEIOC2lOC2tuC2nOC3miDgtrrgt4Tgt4Xgt5Tgt4DgtrHgt4og4LaF4Lat4La7IOC3g+C2seC3iuC2seC3kuC3gOC3muC2r+C2sSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La44LeZ4La44Lac4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiDgt4Pgtqfgt4TgtrE6IOC3g+C3kuC2uuC2veC3lCDgt4Pgtrjgt4/gtqIg4Lai4LeP4La94LeA4La9IOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La24La9IOC2seC3nOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzUwNDE3OTIyMjQ5MzIzNTY0NSI+IuC2lOC2tuC2nOC3miDgt4Pgtrjgt4/gtqIg4La04LeK4oCN4La74LeA4LeP4LeE4La6IOC3gOC3meC2rSDgtr3gt5Lgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwODY1NTc1NTIyMDQxMTQ4NDkiPiLgtpTgtrbgtpzgt5og4La64LeE4LeF4LeU4LeA4Lax4LeK4Lac4LeaIOC3g+C2uOC3j+C2oiDgtrrgt4/gt4Dgtq3gt4rgtprgt4/gtr3gt5PgtrHgtrrgtrHgt4og4La04LeZ4Lax4LeK4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La24LeZ4Lav4LePIOC2nOC3kOC2seC3k+C2uOC3muC2r+C3kyDgt4Pgt5Dgtr3gtprgt5Lgtr3gt5Lgtrjgtq3gt4og4LeA4Lax4LeK4LaxIC0tIOC2uuC3hOC3heC3lOC3gOC3meC2muC3iuC2nOC3meC2seC3iiDgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEg4La94LeZ4LeDIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrHgt5LgtrTgtq/gt4Dgt5Pgtrjgtqcg4La44LeZ4La44Laf4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgtqfgt4TgtrEgOiDgt4Pgt5Lgtrrgtr3gt5Qg4LeD4La44LeP4LaiIOC2ouC3j+C2vSDgt4PgtrPgt4Tgt48g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtrbgtr0g4Lax4Lec4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGVuZGFyIiBtc2dpZD0iNTk3MjcyNzU2MDI1NzYxMjM5OCI+IuC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrHgtrrgt5og4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC3g+C3hCDgtrvgt4Tgt4Pgt5Lgtpzgtq0g4Lat4Lec4La74Lat4LeU4La74LeUIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Lat4LeU4La9IOC2nOC2tuC2qeC3jyAg4Laa4La7IOC2h+C2reC3kiDgtrjgt5Lgtq3gt5TgtrvgtrHgt4rgtpzgt5og4LeD4LeEIOC2keC2muC3iuC3gCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgtrvgtrHgt4rgtrHgtrHgt4rgtpzgt5og4LavIOC2h+C2reC3lOC3heC3lOC3gCDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4Lav4LeS4LaxIOC2r+C2u+C3iuC3geC2sSDgt4Pgt5Lgtq/gt4rgtrDgt5Ig4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrog4La74LeE4LeD4LeK4oCN4La64La34LeP4LeA4La6IOC3hOC3nSDgt4PgtoLgt4Dgt5rgtq/gt5Pgtq3gt4/gt4Dgtrog4Lax4Lec4LeD4La94Laa4LePIOC2lOC2tuC2nOC3miDgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC2r+C2reC3iuC2rSDgtrbgt5ngtq/gt48g4Lac4LeQ4Lax4LeT4La44LanIOC3hOC3nSDgt4Pgt5Tgtrvgt5Dgtprgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzQzNDU0ODY4MjQ3MDg1MTU4MyI+IuC2uuC3hOC3heC3lOC3gOC2seC3iiDgt4Pgt4Qg4LeD4La44Laa4LeP4La94LeS4Lax4La64Lax4LeKIOC2h+C2reC3lOC2veC2reC3iiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavIOC3g+C3kuC2uuC2veC3lCDgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC3g+C3kuC2r+C3lOC3gOC3k+C2uOC3iiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3kuC3geC3iuC3gOC3j+C3g+C2uuC2muC3kuC2seC3iiDgt4Tgt50g4LeD4LaC4LeA4Lea4Lav4LeT4Lat4LeP4LeA4Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtpTgtrbgtpzgt5og4Lav4LeS4LaxIOC2r+C2u+C3iuC3geC2sSDgtq/gtq3gt4rgtq0g4La24LeZ4Lav4LePIOC2nOC3kOC2seC3k+C2uOC2pyDgt4Tgt50g4LaL4La04LeD4LeK4LauIOC2muC3kuC2u+C3k+C2uOC2pyDgtrjgt5ngtrjgtpzgt5LgtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+IuC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrEg4LeD4LeS4Lav4LeK4Law4LeSIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5Pgtrgg4LeE4LedIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtprgt4og4LeD4LeS4Lav4LeU4Laa4La7IOC3hOC3kuC2uOC3kuC2muC2u+C3lOC2nOC3miDgtq/gt5DgtrHgt5Pgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2heC2uOC3lOC2reC3iuC2reC2seC3iuC2pyDgtoot4Lat4LeQ4La04LeR4La94Laa4LeKIOC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NzkwMzU1MjAxMTM2Njg1MjgiPiLgtrrgt4Tgt4Xgt5Tgt4DgtrHgt4og4LeE4LedIOC2keC2muC2py3gt4Dgt5DgtqngtprgtrvgtrHgt4rgtrHgtrHgt4og4LaH4Lat4LeU4LeF4Lat4LeK4LeAIOC2lOC2tuC2pyDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LeA4LeZ4Lax4LeD4LeKIOC2muC3hSDgt4Tgt5Dgtprgt5Ig4LeD4LeS4Lav4LeK4Law4LeSIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5PgtrjgtqcsIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5PgtrjgtqcsIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC3hOC3kuC2uOC3kuC2muC2u+C3lOC3gOC2seC3iuC2nOC3meC2seC3iiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeA4LaxIOC2tOC2u+C3kuC2r+C3kiDgtrjgt5ngtrHgt4og4La44LeA4LeP4La04LeR4La44LanIOC3hOC3nSDgt4Tgt5Lgtrjgt5Lgtprgtrvgt5Tgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgt4Pgt5Lgtq/gt4rgtrDgt5Ig4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2veC3kOC2tuC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+IuC2lOC2tuC2nOC3miDgtrrgt4Tgt4Xgt5Tgt4DgtrHgt4og4LeE4LedIOC3g+C2uOC2muC3j+C2veC3k+C2seC2uuC2seC3iiDgtofgtq3gt5Tgt4Xgtq3gt4og4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtpTgtrbgtqcg4LeA4LeZ4Lax4LeD4LeKIOC2muC3hSDgt4Tgt5Dgtprgt5Ig4LeD4LeS4Lav4LeUIOC3gOC3k+C2uOC3iiDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La44LanLCDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanLCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrjgtpzgt5LgtrHgt4og4Lav4LeS4LaxIOC2r+C2u+C3iuC3geC2sSDgt4Tgt5Lgtrjgt5Lgtprgtrvgt5Tgt4DgtrHgt4rgtpzgt5ngtrHgt4og4La04LeQ4La44LeS4Lar4LeZ4LaxIOC3g+C3miDgtrTgt5ngtrHgt5ngtrEg4La04Lar4LeS4LeA4LeS4LapIOC2uuC3kOC3gOC3k+C2uOC2pyDgt4Tgt50g4LeE4LeS4La44LeS4Laa4La74LeU4Lac4LeaIOC2r+C3kOC2seC3lOC2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI4Njg4MzM0OTc0MDM2ODIzMzMwIj4i4La04La74LeT4Laa4LeK4LeC4LarIOC3g+C2s+C3hOC3jyDgtobgtq/gtrvgt4rgt4Eg4LeD4LeK4Lau4LeP4LaxIOC2uOC3luC2veC3j+C3geC3iuKAjeC2uyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiLgtrTgtrvgt5Pgtprgt4rgt4Lgtqvgtrrgtqcg4LeA4LeK4oCN4La64LeP4LaiIOC3g+C3iuC2ruC3j+C2sSDgtrjgt5bgtr3gt4/gt4Hgt4rigI3gtrsg4LeD4LeP4Lav4Lax4LeK4LaxIOC3hOC3nSDgtrHgt4Ag4LeD4LeK4Lau4LeP4LaxIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lOC3gOC3meC2muC3lCDgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4La74Lax4LeK4LaxLiBHUFMg4LeE4LedIOC3g+C3iuC2ruC3j+C2sSDgt4Pgt5DgtrTgtrrgt5Tgtrjgt4rgtprgtrvgt5Tgt4DgtrHgt4og4LaG4Lav4LeTIOC3gOC3meC2seC2reC3iiDgt4Pgt4rgtq7gt4/gtrEg4La44LeW4La94LeP4LeB4LeK4oCN4La7IOC3gOC3kuC3g+C3kuC2seC3iiDgtr3gtrbgt48g4Lav4LeZ4LaxIOC3g+C3iuC2ruC3j+C2seC2uiDgt4Pgt4Qv4LeE4LedIOC2reC2reC3iuC3gOC2uiDgtrTgt4rigI3gtrvgtq3gt5Lgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtrjgt5ngtrog4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLgtoXgtrjgtq3gtrsg4LeD4LeK4Lau4LeP4LaxIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lCDgt4Dgt5LgtrDgt4/gtrEg4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSI1OTQ1MTY2NjQyMzM1ODAwNzYzIj4i4LaF4La44Lat4La7IOC3g+C3iuC2ruC3j+C2sSDgt4Pgt5DgtrTgtrrgt5Tgtrjgt4rgtprgtrvgt5Qg4LeA4LeS4Law4LeP4LaxIOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIEdQUyDgt4Tgt50g4LeA4LeZ4Lax4Lat4LeKIOC3g+C3iuC2ruC3j+C2sSDgtrjgt5bgtr3gt4/gt4Hgt4rigI3gtrsg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeSIOC3gOC3meC2rSDgtrbgt4/gtrDgt48g4Laa4LeS4La74LeT4La44LanIOC2uOC3meC2uiDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI2NTc4MTAxMTk5ODI1MTkzODczIj4i4LeD4LeK4Lau4LeP4LaxIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lOC3gOC3meC2muC3lCDgt4Pgt4rgtq7gt4/gtrTgtrHgtrrgtqcg4LaF4LeA4LeD4La74La6IOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IuC2tOC2u+C3k+C2muC3iuC3guC2q+C2uuC2pyDgt4Dgt4rigI3gtrrgt4/gtqIg4LeD4LeK4Lau4LeP4LaxIOC2uOC3luC2veC3j+C3geC3iuKAjeC2uyDgt4Pgt4/gtq/gtrHgt4rgtrEg4LeE4LedIOC2seC3gCDgt4Pgt4rgtq7gt4/gtrEg4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeU4LeA4LeZ4Laa4LeUIOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgtrvgtrHgt4rgtrEuIEdQUyDgt4Tgt50g4LeD4LeK4Lau4LeP4LaxIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lOC3gOC2seC3iiDgtobgtq/gt5Mg4LeA4LeZ4Lax4Lat4LeKIOC3g+C3iuC2ruC3j+C2sSDgtrjgt5bgtr3gt4/gt4Hgt4rigI3gtrsg4LeA4LeS4LeD4LeS4Lax4LeKIOC2veC2tuC3jyDgtq/gt5ngtrEg4LeD4LeK4Lau4LeP4Lax4La6IOC3g+C3hC/gt4Tgt50g4Lat4Lat4LeK4Lat4LeK4LeA4La6IOC2tOC3iuKAjeC2u+C2reC3kuC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2uOC3meC2uiDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iMTE5MTg5ODA2MTk2NTI3MzM3MiI+IuC2seC3kuC3gOC3kOC2u+C2r+C3kiDgt4Pgt4rgtq7gt4/gtrHgtrogKEdQUyDgt4Pgt4Qg4Lai4LeP4La94La6IOC2tOC2r+C2seC2uOC3iiDgtprgtrvgtpzgtq3gt4opIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+IuC2nOC3neC2veC3k+C2uiDgt4Pgt4rgtq7gt4/gtrHgt5Pgtrog4La04Lav4LeK4Law4Lat4LeS4La6IChHUFMpIOC3hOC3nSDgt4Pgt5ngtr3gt4og4Laa4LeU4LeF4LeU4Lar4LeUIOC3g+C3hCBXaS1GaSDgt4Dgt5DgtrHgt5Ig4Lai4LeP4La9IOC3g+C3iuC2ruC3j+C2seC3k+C2uiDgtrTgt4rigI3gtrvgtrfgt4Ag4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2lOC2tuC2nOC3miDgtrHgt5Lgt4Dgt5Dgtrvgtq/gt5Ig4LeD4LeK4Lau4LeP4Lax4La6IOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrgg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La64LeZ4Lav4LeU4La44LeKIOC3gOC2veC2pyDgt4Pgt4rgtq7gt4/gtrHgt5Pgtrog4LeD4Lea4LeA4LePIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5PgtrjgtqcgIOC2kuC3gOC3jyDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeA4LeS4La6IOC2uuC3lOC2reC3lCDgt4Dgt5ouIOC2lOC2tuC3gCDgt4Pgt5zgtrrgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2sSDgtoXgtq3gtrsg4LaF4La44Lat4La7IOC2tuC3kOC2p+C2u+C3kiDgtrbgtr3gtrrgtprgt4rgtq8g4La04La74LeS4La34Led4Lai4Lax4La6IOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iNDg4Nzg5NTM2MjM1NDIzOTYyOCI+IuC2huC3g+C2seC3iuC2seC2reC2uCDgt4Pgt4rgtq7gt4/gtrHgtrogKOC2ouC3j+C2veC2ui3gtrTgt4/gtq/gtpog4LeA4LeWKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+IuC2lOC2tuC2nOC3miDgtq/gt4Ug4LeD4LeK4Lau4LeP4Lax4La6IOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4Lax4LeK4Lax4Lea4LeA4Lea4Lav4LaxIOC2muC3lOC3heC3lOC2q+C3lCDgt4Pgt4QgV2ktRmkg4LaG4Lav4LeTIOC2ouC3j+C2vSDgt4Pgt4rgtq7gt4/gtrEg4La44LeW4La94LeP4LeB4LeK4oCN4La7IOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrEg4LeD4LeK4Lau4LeP4LaxIOC3g+C3muC3gOC3jyDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La44LeZ4La4IOC3g+C3iuC2ruC3j+C2seC2uiDgt4Dgt4rigI3gtrrgt5Tgtq3gt4rgtrTgtrHgt4rgtrEg4Laa4La7IOC2h+C2rS4g4La64LeZ4Lav4LeU4La44LanIOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4La44LeZ4La4IOC3g+C3iuC2ruC3j+C2sSDgt4Pgt5rgt4Dgt48g4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3hSDgtrrgt5Tgtq3gt5Qg4LaF4Lat4La7IOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrog4LeD4Laz4LeE4LePIOC2tOC3kOC3gOC2reC3kuC2uiDgtrrgt5Tgtq3gt5TgtrouIOC2lOC2tiDgt4Pgt5Lgtqfgt5LgtrEg4Lat4LeQ4LaxIOC2r+C3heC3gCDgt4TgtrPgt5TgtrHgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gtqcg4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4Laa4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4iU3VyZmFjZUZsaW5nZXIg4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlN1cmZhY2VGbGluZ2VyIOC2tOC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLgtrvgt4/gtrjgt5Qg4LaF4Lax4LeK4Lat4La74LeP4Lag4La6IOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLgtrvgt4/gtrjgt5Qg4LaF4Lax4LeK4Lat4La74LeP4Lag4La64Lax4La64LeZ4Lax4LeKIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uuC2seC3iiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iSW5wdXRGbGluZ2VyIOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iSW5wdXRGbGluZ2VyIOC2tOC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IldpZmkg4LeD4LaC4Lav4La74LeK4LeB4LaaIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4LeS4La74LeT4La44LanIOC3g+C3hCBXaWZpIOC3g+C2guC2r+C2u+C3iuC3geC2miDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IldpZmkg4LeD4LaC4Lav4La74LeK4LeB4LaaIOC2tOC3j+C2veC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjQ1NDM5MTIyOTI2ODE4MjY5ODYiPiJXaWZpIOC3g+C2guC2r+C2u+C3iuC3geC2muC2uuC3miDgtrTgt4Tgt4Ug4La44Lan4LeK4Lan4La44LeaIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2ODU3MTM0NDk4NDAyMzQ2NzA4Ij4i4LeB4La24LeK4LavIOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uiDgtpzgt4rigI3gtrvgt4TgtqvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2MjEwNTk3NzU0MjEyMjA4ODUzIj4i4La64LeZ4Lav4LeU4La44LanIOC3geC2tuC3iuC2ryDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtrog4Lac4LeK4oCN4La74LeE4Lar4La6IOC2muC2uyDgt4Tgtrvgt4Dgt48g4La64LeQ4LeA4LeT4La44LanIOC2ieC2qSDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyMjQ2ODI4NzczNTg5MDk0MDIzIj4i4LeA4LeT4Lap4LeS4La64LedIOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjM1OTQ4MTY1ODAzNDE0OTg2MCI+IuC2uuC3meC2r+C3lOC2uOC2pyDgt4Dgt5Pgtqngt5Lgtrrgt50g4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6IOC2nOC3iuKAjeC2u+C3hOC2q+C2uiDgtprgtrsg4LeE4La74LeA4LePIOC2uuC3kOC3gOC3k+C2uOC2pyDgtongtqkg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iNzgxNTM5ODk2OTMwMzM4MjAxNiI+IuC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgt4Dgt5Pgtqngt5Lgtrrgt50g4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjc3OTc5MzA2NDcwOTM1MDI4OSI+IuC2uuC3meC2r+C3lOC2uOC2pyDgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LeA4LeT4Lap4LeS4La64LedIOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uiDgtpzgt4rigI3gtrvgt4Tgtqvgtrog4Laa4La7IOC3hOC2u+C3gOC3jyDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LaJ4LapIOC2r+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4i4LaU4La24Lac4LeaIOC3geC3iuKAjeC2u+C3gOC3iuKAjeC2uiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i4LeB4La24LeK4Lav4La6IOC2huC2r+C3kyDgtpzgt53gtr3gt5Pgtrog4LeB4La24LeK4LavIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtrog4LeD4Laz4LeE4LePIOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrHgt4rgtrHgt5og4Laa4LeU4La44LaxIOC2seC3j+C2r+C2muC2uiDgtq/gt5Dgtrrgt5Ig4Lat4Lea4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4i4LeB4La24LeK4LavIOC2tOC2p+C3kuC2nOC2rSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiLgtrjgtrrgt5Lgtprgt4rigI3gtrvgt5zgt4bgt53gtrHgtrog4La44Laf4LeS4Lax4LeKIOC3geC2tuC3iuC2ryDgtrTgtqfgt5Lgtpzgtq0g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2uOC2n+C3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaV4Lax4LeR4La4IOC3gOC3muC2veC3j+C3gOC2miDgtpTgtrbgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgt4Hgtrbgt4rgtq8g4La04Lan4LeS4Lac4LatIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4La94La24LePIOC2r+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLgtrTgt5LgtrHgt4rgtq3gt5bgtrsg4LeD4LeEIOC3gOC3k+C2qeC3kuC2uuC3nSDgtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4Laa4LeQ4La44La74LeP4LeA4LeZ4Lax4LeKIOC2tOC3kuC2seC3iuC2reC3luC2uyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LeD4LeEIOC3gOC3k+C2qeC3kuC2uuC3nSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La44Laf4LeS4Lax4LeKIOC2lOC2tuC2nOC3miDgtoXgtrHgt5Tgtq/gt5DgtrHgt5Tgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2leC2seC3keC2uCDgt4Dgt5rgtr3gt4/gt4Dgtprgtq/gt5Mg4Laa4LeQ4La44La74LeP4LeAIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i4Laa4LeQ4La44La74LeP4LeAIOC2t+C3j+C3gOC3kuC2reC2uuC3muC2r+C3kyBMRUQg4Lav4La74LeK4LeB4LaaIOC3g+C2uOC3iuC2tOC3iuKAjeC2u+C3muC3guC2q+C2uiDgtoXgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iNDc2NDU4NTQ2NTQ4MDI5NTM0MSI+IuC2muC3kOC2uOC2u+C3jyDgtrfgt4/gt4Dgt5Lgtq3gtrog4La04LeS4LeF4LeS4La24LazIExFRCDgtq/gtrvgt4rgt4Hgtprgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pywg4Laa4La94LeS4Lax4LeKIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3jyDgtofgtq3gt5Ig4La04Lav4LeK4Law4Lat4LeSIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI5NjEyOTIyMDU3NjQ0ODgzMDQiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LeD4LeK4Lau4LeS4La74LeA4La4IOC2heC2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODMzNzgxNzA5MzMyNjM3MDUzNyI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgt4Pgt4rgtq7gt5Lgtrvgt4Ag4LaF4La24La9IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4i4La44LeU4LeF4LeUIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC2uCDgt4Pgt4rgtq7gt5Lgtrvgt4Dgtrgg4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La6IOC2ieC2reC3jyDgtrfgtrrgt4/gtrHgtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzg4OTAzMjk3NjI3MjgzMDk5Ij4i4La44LeU4LeF4LeUIOC2r+C3lOC2u+C2muC2ruC2seC2uuC2uCDgt4Pgt4rgtq7gt5Lgtrvgt4Dgtrgg4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La6IOC2ieC2reC3jyDgtrfgtrrgt4/gtrHgtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM0MzY2MzQ5NzI1NjE3OTUwMDIiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgt4og4Lax4LeQ4LeA4LatIOC2tOC2qyDgtpzgt5DgtrHgt4rgt4Dgt5Pgtrjgtqcg4La24La9IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg5ODU2MDg3MjQ2MjYzODI0MiI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtrHgt5Dgt4Dgtq0g4La04LarIOC2nOC3kOC2seC3iuC3gOC3k+C2uOC2pyDgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MTcyMDU2MTgwMDYzNzAwNzQxIj4i4Lan4LeQ4La24LeK4La94Lan4La6IOC2seC3kOC3gOC2rSDgtrbgtr0g4Lac4LeQ4Lax4LeK4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Lax4LeQ4LeA4LatIOC2h+C2u+C2ueC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+IlVTQiDgtobgtqDgtrrgtrHgtrog4Lac4Lec4Lax4LeUIOC2tOC2r+C3iuC2sOC2reC3kuC2uiDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQwMjMwNTA0OTg5MDk1MzgxMCI+IlNEIOC2tOC2reC3iiDgtpzgt5zgtrHgt5Qg4La04Lav4LeK4Law4Lat4LeS4La6IOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iMTgyOTI5MDcwMTY1ODk5MjM0NyI+IuC2ieC3gOC2reC3iiDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC2huC2oOC2uuC2seC2uiDgt4PgtrPgt4Tgt48g4Lac4Lec4Lax4LeUIOC2tOC2r+C3iuC2sOC2reC3kiDgtojgtrPgt5Pgtrjgtqcg4LeD4LeEIOC2nOC3kOC2veC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4iVVNCIOC2huC2oOC2uuC2seC2uiDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+IlNEIOC2tOC2rSDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIG1zZ2lkPSI4Nzg0MjY4MjQ2Nzc5MTk4NjI3Ij4i4LaJ4LeA4Lat4LeKIOC2muC3hSDgt4Tgt5Dgtprgt5Ig4LaG4Lag4La64LaxIOC3huC3neC2uOC3kOC2p+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2FjY2VzcyIgbXNnaWQ9IjM0MTEzMzg2MzIwMDIxOTM4NDYiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC2tOC3kuC3heC3kuC2tuC2syDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La94La24LePIOC2nOC3kOC2seC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrrgt5og4Lat4Lec4La74Lat4LeU4La74LeUIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfY3JlYXRlIiBtc2dpZD0iNjQxNDc1NzIzNDc4OTMzNjMyNyI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4Lax4LeS4La74LeK4La44LeP4Lar4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19jcmVhdGUiIG1zZ2lkPSI0NTU4ODY5MjczNTg1ODU2ODc2Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgt4Pgt5Dgtq/gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI1MjY5MjgzMjgzMDE2MTgwMjIiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC3gOC3kuC2seC3j+C3gSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI3MjE4NzQ5Mjg2MTQ1NTI2NTM3Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgt4Dgt5LgtrHgt4/gt4Eg4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iODg3Nzk5ODEwMTk0NDk5OTM4NiI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4Lax4LaC4LeA4LeT4La4L+C2nOC3kOC2veC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9IjM0NTEzNjAxMTQ5MDI0OTA5MjkiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC3g+C3gOC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcv4Lac4LeQ4La94LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19yZW5hbWUiIG1zZ2lkPSI3NDk2NjMzOTU0MDgwNDcyNDE3Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgtrHgt5Dgt4Dgtq0g4Lax4La44LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4Lax4LeQ4LeA4LatIOC2seC2uOC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuC2muC2uOC3iuC2tOC2seC2uiDgtrTgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLgtprgtrjgt4rgtrTgtprgtrog4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLgt4Pgt5Dgtqvgt5ngt4Xgt5Ig4LaG4La94Led4Laa4La6IOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuC3g+C3kOC2q+C3meC3heC3kuC2uiDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4iVVNCIOC2i+C2tOC3j+C2guC2nCDgt4PgtrPgt4Tgt48g4Laa4LeQ4La44LeQ4Lat4LeK4LatIOC3g+C3hCDgtoXgt4Dgt4Pgtrsg4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiJVU0Ig4LaL4La04LeP4LaC4LacIOC3g+C2s+C3hOC3jyDgtoXgtrfgt5Lgtrvgt5TgtqDgt5Ig4LeD4LeEIOC2heC3gOC3g+C2uyDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4iTVRQIOC2tOC3iuKAjeC2u+C3nOC2p+C3nOC2muC3neC2veC2uiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTXRwIiBtc2dpZD0iNjUzMjk2MTIwMDQ4Njc5MTU3MCI+Ik1UUCBVU0Ig4La04LeK4oCN4La74Lec4Lan4Led4Laa4Led4La94La6IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgt5Lgtrvgt5Pgtrjgtqcg4Laa4La74LeK4Lax4La9IE1UUCDgtrDgt4/gt4Dgtprgtrrgtqcg4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjQxNDgyOTA4NjA0MDA2NTkxNDYiPiLgtq/gt5jgtqngt4/gtoLgtpwg4La04La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI2NTk3OTY0MTkxMjA4MDE2NjA1Ij4i4Lav4LeY4Lap4LeP4LaC4LacIOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgt5Lgtrvgt5Pgtrjgt5og4LaF4La74La44LeU4LarIOC3g+C2s+C3hOC3jyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LeA4LeS4LeA4LeS4LawIOC2tOC2u+C3iuC2uuC2seC3iuC2rSDgtrTgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4Lav4LeU4La74Laa4Lau4LaxIOC2heC2guC2miDgt4Dgt5ngtq0g4LaN4Lai4LeU4LeA4La4IOC2heC2uOC2reC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLgtpTgtrbgtpzgt5og4La44LeQ4Lav4LeS4LeE4Lat4LeKIOC3gOC3k+C2uOC2muC3iiDgtrHgt5zgtrjgt5Dgtq3gt5Lgt4Ag4Lav4LeU4La74Laa4Lau4LaxIOC2heC2guC2miDgtofgtrjgtq3gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC3hOC3kiDgtrTgt4rigI3gtrvgtq3gt5LgtpHgtr3gtrog4LeA4Lax4LeK4Lax4LeaIOC2heC2seC2tOC3muC2muC3iuC3guC3kuC2rSDgtoXgtrrgtprgt5Lgtrvgt5Pgtrjgt4og4LeE4LedIOC2h+C2uOC2reC3lOC2uOC3iiDgtofgtq3gt5Lgt4Dgt5Pgtrjgtrrgt5IuIOC2uOC3meC2uuC2seC3iiDgt4Tgtq/gt5Lgt4Pgt5Ig4LaF4LaC4LaaIOC3gOC2veC2pyDgtofgtrjgtq3gt5Tgtrjgt4og4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lax4Lec4Lav4LeZ4LaxIOC2tuC3gOC2pyDgt4Pgtqfgt4TgtrHgt4og4Laa4La74Lac4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeKIOC2seC3nOC2uOC3kOC2reC3kuC3gCDgtofgtrjgtq3gt5Tgtrjgt4og4Lac4LeQ4Lax4LeT4La44LeZ4Lax4LeKIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaU4La24Lac4LeaIOC2uOC3lOC2r+C2veC3iiDgtrHgt5Lgtprgtrvgt5Tgtqvgt5og4LeA4LeQ4La6IOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+IuC2leC2seC3keC2uCDgtq/gt5Tgtrvgtprgtq7gtrEg4LaF4LaC4Laa4La64Laa4LanIOC2jeC2ouC3lOC3gOC2uCDgtoXgtrjgtq3gtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiLgtpTgtrbgtpzgt5og4La44LeQ4Lav4LeS4LeE4Lat4LeK4LeA4LeT4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgt4Tgtq/gt5Lgt4Pgt5Ig4LaF4LaC4LaaIOC2h+C2reC3lOC3heC2reC3iuC3gCDgtpXgtrHgt5Hgtrgg4Lav4LeU4La74Laa4Lau4LaxIOC2heC2guC2muC2uuC2muC2pyDgtofgtrjgtq3gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3hOC2r+C3kuC3g+C3kiDgt4Pgt5rgt4Dgt48g4LeA4LeZ4LatIOC2heC2seC3gOC3geC3iuKAjeC2uiDgt4Pgt4Qg4Lax4LeT4Lat4LeS4La44La6IOC2seC3nOC3gOC2sSDgtofgtrjgtq3gt5Tgtrgg4La94LeQ4La24LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrgg4LeD4LeS4Lav4LeUIOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+IkNETUEg4Lan4LeQ4La24LeK4La94LanIOC2tOC3kuC3hOC3kuC2p+C3lOC2uCDgt4Pgt5jgtqLgt5Tgt4Ag4LaH4La74La54LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiJDRE1BIOC2r+C3lOC2u+C2muC2ruC2sSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgtrgg4LeD4LeY4Lai4LeU4LeAIOC2h+C2u+C2ueC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+IuC2uuC3meC2r+C3lOC2uOC2pyBDRE1BIOC2tOC3iuKAjeC2u+C2reC3kuC2tOC3j+C2r+C2sSDgtobgtrvgtrjgt4rgtrcg4Laa4LeS4La74LeT4La44LanIOC2ieC2qeC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtoXgtrHgt4Dgt4Hgt4rigI3gtrog4La94LeZ4LeDIENETUEg4La04LeK4oCN4La74Lat4LeS4La04LeP4Lav4LaxIOC2huC2u+C2uOC3iuC2tyDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+IuC3g+C3iuC2ruC3j+C2sSDgtrrgt4/gt4Dgtq3gt4rgtprgt4/gtr3gt5PgtrEg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4i4LeD4LeK4Lau4LeP4Lax4LeT4La6IOC2uuC3j+C3gOC2reC3iuC2muC3j+C2veC3kuC2sSDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4La74Lea4Lap4LeS4La64Led4LeA4LeZ4Lax4LeKIOC3g+C2tuC2vS/gtoXgtrbgtr0g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI3ODU1MjU5NDYxMjY4NzM0OTE0Ij4i4La04LeS4La74LeS4Laa4LeK4LeD4LeU4La44LeKIOC2nOC3lOC2q+C3j+C2guC2nCDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI0MDI0NTI2OTY4NjMwMTk0MTI4Ij4i4La04LeS4La74LeS4Laa4LeK4LeD4LeU4La44LeKIOC3g+C3muC3gOC3j+C3gCDgtrjgtpzgt5LgtrHgt4og4LaL4Lat4LeK4LeB4LeK4oCN4La74Lea4Lar4LeSIOC2muC3hSDgtpzgt5Tgtqvgt4/gtoLgtpwg4LeA4LeZ4LatIOC2muC3kuC2uuC3gOC3k+C2uOC3ii/gtr3gt5Lgt4Dgt5Pgtrjgt4og4La04LeS4LeA4LeS4LeD4LeU4La4IOC3g+C2s+C3hOC3jyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr0g4La34LeP4LeA4LeS4Lat4La64LanIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiLgt4Dgt5LgtqLgtqfgt4og4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEdhZGdldCIgbXNnaWQ9IjgyNjEzMjY5Mzg1OTkwNDkyOTAiPiLgtprgt5TgtrjgtrEg4LeA4LeS4Lai4Lan4La6IOC2muC3lOC2uOC2sSDgtrrgt5ngtq/gt5Tgtrjgt5ngtrHgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC2vSDgt4Tgt5Dgtprgt5Lgtq8g4La64Lax4LeK4LaxIOC2tOC2r+C3iuC2sOC2reC3kuC2uuC2pyDgtrTgt5Dgt4Dgt4Pgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LaH4Lat4LeSIOC2uuC3meC2r+C3lOC2uOC2muC2pyDgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgtq/gtq3gt4rgtq0g4LeA4La94LanIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiDgtr3gtrbgt48g4Lav4LeS4La6IOC3hOC3kOC2mi4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr0g4La34LeP4LeA4LeS4Lat4La64LanIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSI4NDIzOTIzNzc3NjU5MjkyMjI4Ij4i4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2reC2reC3iuC3gOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9IjEwMjk4Nzc1MjkwMDc2ODY3MzIiPiLgtovgtrTgt4/gtoLgtpzgtrrgt5og4Lav4LeU4La74Laa4Lau4LaxIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LaH4Lat4LeSIOC2uuC3meC2r+C3lOC2uOC2pyDgtpTgtrbgtqcg4Lax4LeS4LeA4Lea4Lav4Lax4La64LeZ4Lax4LeKIOC2reC3nOC2u+C3gCDgtqLgt4/gtr0g4La44LeP4La74LeUIOC2muC3kuC2u+C3k+C2uCwg4Lav4LeU4La74Laa4Lau4LaxIOC2u+C3muC2qeC3kuC2uuC3neC3gCDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeD4LeEIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrgg4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iOTE3ODIyODUyNDUwNzYxMDQ4NiI+IuC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtq3gtq3gt4rgt4Dgtrog4LeD4LeEIOC2heC2seC2seC3iuKAjeC2uuC2reC3j+C3gOC2uiDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjE2MzkyMTI3NzE4MjYxMjU1MjgiPiLgtovgtrTgt4/gtoLgtpzgtrrgt5og4Lav4LeU4La74Laa4Lau4LaxIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtofgtrjgtq3gt5Tgtrgg4LeD4Laa4LeK4oCN4La74LeS4La6IOC3gOC3lOC3gOC2reC3iiDgt4Pgt4Qg4LaH4La44Lat4LeU4La44Laa4LeS4Lax4LeKIOC2r+C3lOC2u+C3g+C3iuC2riDgtoXgtoLgtprgtrog4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3lOC3gOC2reC3iiDgtq/gt5Tgtrvgtprgtq7gtrEg4LaF4LaC4Laa4La6IOC3g+C3hCDgtovgtrTgt4/gtoLgtpwgSUQg4LeE4Laz4LeU4Lax4LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Lax4LeS4Lax4LeK4Lav4LeZ4Lax4LeKIOC3gOC3kOC3heC2muC3iuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lax4LeS4Lax4LeK4Lav4LanIOC2uuC3j+C2uOC3meC2seC3iiDgt4Dgt4XgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtrHgt5LgtrHgt4rgtq/gtqcg4La64LeP4La44LeZ4Lax4LeKIOC3gOC3kOC2veC3kOC2muC3iuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg1NTkxMDA2NzczNzI5Mjg3NTQiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lax4LeS4Lax4LeK4Lav4LanIOC2uuC3j+C2uOC3meC2seC3iiDgt4Dgt5Dgtr3gt5Dgtprgt4rgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc4NzAzNDcyMjYxNjM1MDQxNyI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeE4LedIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RldmljZVBvd2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDkyODYyMjQ3MDk4MDk0MzIwNiI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtrbgtr0g4Lac4LeQ4Lax4LeK4LeA4LeT4La4IOC3hOC3nSDgt4Dgt5Dgt4Pgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY4OTg2Mjg3ODk4NDYzMTgzMSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeE4LedIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2MDM3MDU3MzQ4NDYzMTMxMDMyIj4i4Lav4LeU4La74Laa4Lau4Lax4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Pgt4Qg4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZhY3RvcnlUZXN0IiBtc2dpZD0iMzcxNTIyNTQ5MjY5NjQxNjE4NyI+IuC2muC2u+C3iuC2uOC3j+C2seC3iuC2reC3geC3j+C2veC3jyDgtrTgtrvgt5Pgtprgt4rgt4Lgtqsg4LaG4Laa4LeP4La74La6IOC2reC3lOC3hSDgtrDgt4/gt4DgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NTIwNTkzMTgzNTk2NTMwOTEiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4Lav4LeY4Lap4LeP4LaC4LacIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4La04LeS4LeA4LeS4LeD4LeU4La4IOC3g+C2s+C3hOC3jyDgtoXgt4Dgt4Pgtrsg4Lav4LeT4La44LeZ4Lax4LeKIOC2tOC3hOC3hSDgtrjgtqfgt4rgtqfgtrjgt5og4Lax4LeS4La04LeQ4LeA4LeU4La44LeK4Laa4La74LeUIOC2tOC2u+C3k+C2muC3iuC3guC2q+C2uuC2muC3iiDgtr3gt5ngt4Mg4Law4LeP4LeA4Lax4La6IOC2muC2u+C2seC3iuC2sS4g4Lax4LeS4La04LeQ4LeA4LeU4La44LeK4Laa4La74LeUIOC2tOC2u+C3k+C2muC3iuC3guC2qyDgtobgtprgt4/gtrvgtrrgt5ngtrHgt4og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4LeA4LeS4LanIOC2tOC2uOC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4Lav4LeY4Lap4LeP4LaC4LacIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4La04LeS4LeA4LeS4LeD4LeU4La4IOC3g+C2s+C3hOC3jyDgtoXgt4Dgt4Pgtrsg4Lav4LeT4La44LeZ4Lax4LeKIOC2tOC3hOC3hSDgtrjgtqfgt4rgtqfgtrjgt5og4Lax4LeS4La04LeQ4LeA4LeU4La44LeK4Laa4La74LeUIOC2tOC2u+C3k+C2muC3iuC3guC2q+C2uuC2muC3iiDgtr3gt5ngt4Mg4Law4LeP4LeA4Lax4La6IOC2muC2u+C2seC3iuC2sS4g4Lax4LeS4La04LeQ4LeA4LeU4La44LeK4Laa4La74LeUIOC2tOC2u+C3k+C2muC3iuC3guC2qyDgtobgtprgt4/gtrvgtrrgt5ngtrHgt4og4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4LeA4LeS4LanIOC2tOC2uOC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlciIgbXNnaWQ9IjY2MjcxOTIzMzMzNzM0NjUxNDMiPiLgtrbgt5Lgtq3gt5TgtrTgtq0g4LeD4LeQ4Laa4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNzM3MzQ0NzkyMDk3NzYyNDc0NSI+IuC2tOC2r+C3iuC2sOC2reC3kiDgtrbgt5Lgtq3gt5TgtrTgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSIzMjc4NjA4MTY1OTc3NzM2NTM4Ij4i4LaU4La24Lac4LeaIOC2tuC3kuC2reC3lOC2tOC2reC3miDgtrTgt4rigI3gtrvgtrjgt4/gtqvgtrog4LeD4LeQ4Laa4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSI4MjM1Nzg0Mzg0MjIzNzMwMDkxIj4i4La04Lav4LeK4Law4Lat4LeSIOC2tuC3kuC2reC3lOC2tOC2reC3miDgtrTgt4rigI3gtrvgtrjgt4/gtqsg4LaJ4Laf4LeSIOC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXN0ZXJDbGVhciIgbXNnaWQ9IjIzMTU3NTA0MjMxMzk2OTczOTciPiLgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq3gt4Hgt4/gtr3gt48g4LeD4LeU4La04LeU4La74LeU4Lav4LeK4Lav4LanIOC2tOC2r+C3iuC2sOC2reC3kuC2uiDgtrHgt5Dgt4Dgtq0g4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hc3RlckNsZWFyIiBtc2dpZD0iMzY2NTM4MDQ5MjYzMzkxMDIyNiI+IuC3g+C3kuC2uuC2veC3lCDgtq/gtq3gt4rgtq0g4La44LeQ4Laa4LeT4La44LeZ4Lax4LeKLCDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4LeS4La74LeT4La44LeZ4Lax4LeKIOC3g+C3hCDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4LeK4Lau4LeP4La04Lax4La64LeZ4Lax4LeKIOC2keC3hOC3kiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtq0g4La04Lav4LeK4Law4Lat4LeS4La6IOC2seC3kOC3gOC2rSDgt4Pgt5Dgtprgt4Pgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lIiBtc2dpZD0iMjAyMTYxNDgyOTU5MTc3NTY0NiI+IuC3gOC3muC2veC3j+C3gCDgt4Pgt5Dgtprgt4Pgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxODk2MzQxNDM4MTUxMTUyODgxIj4i4Lan4LeQ4La24LeK4La94LanIOC2lOC2u+C2veC3neC3g+C3lOC3gOC3miDgt4Dgt5rgtr3gt4/gt4Ag4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg1NTcwMjczMDczODAyMCI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtpTgtrvgtr3gt53gt4Pgt5Tgt4Dgt5og4LeA4Lea4La94LeP4LeAIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44Laa4LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lWm9uZSIgbXNnaWQ9IjI5NDUwNzk4MDEwMTMwNzczNDAiPiLgt4Dgt5rgtr3gt48g4Laa4La94LeP4La04La6IOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4i4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2muC3j+C2vSDgtprgtr3gt4/gtrTgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0OTk5NDM0ODg0MzY2MzMzOTgiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LeA4Lea4La94LePIOC2muC2veC3j+C2tOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+IkFjY291bnRNYW5hZ2VyU2VydmljZSDgtr3gt5ngt4Mg4La04LeZ4Lax4LeTIOC3g+C3kuC2p+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiJBY2NvdW50QXV0aGVudGljYXRvcnMg4LeA4LeZ4LatIOC2h+C2uOC2reC3lOC2uOC3iiDgtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBY2NvdW50cyIgbXNnaWQ9IjEwODY3OTU0Njc3NjAxMjIxMTQiPiLgtovgtrTgt4/gtoLgtpzgtrrgt5og4LaH4Lat4LeSIOC2nOC3kuC2q+C3lOC2uOC3iiDgt4Pgt5zgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc0MTQ5NjUzNDc2OTY2MDAyNyI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4Lav4Lax4LeK4Lax4LePIOC2nOC3kuC2q+C3lOC2uOC3iiDgtr3gt5Dgtrrgt5Lgt4Pgt4rgtq3gt5Tgt4Dgtprgt4og4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrYg4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC3nOC2pyDgtofgtq3gt5Ig4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgt4Pgt4/gtq/gt48g4LaH4Lat4LeSIOC2nOC3kuC2q+C3lOC2uOC3iiDgtrjgt5Pgtqcg4LaH4Lat4LeU4LeF4Lat4LeKIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LeA4LeS4LeD4LeS4Lax4LeKIOC2r+C2seC3iuC2seC3jyDgtpzgt5Lgtqvgt5Tgtrjgt4og4La94LeQ4La64LeS4LeD4LeK4Lat4LeU4LeA4Laa4LeKIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La2IOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgt5zgtqcg4LaH4Lat4LeSIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LeD4LeP4Lav4LePIOC2h+C2reC3kiDgtpzgt5Lgtqvgt5Tgtrjgt4og4La44LeT4LanIOC2h+C2reC3lOC3heC2reC3iiDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjUyNjU5MDg0ODExNzI3MzY5MzMiPiLgtpzgt5Lgtqvgt5Tgtrjgt4og4LeD4LeP4Lav4Lax4LeK4LaxIOC3g+C3hCDgtrjgt5TgtrvgtrTgtq8g4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1NDcyMTI0Mjk2OTA4OTc3MjYwIj4i4Lac4LeS4Lar4LeU4La44LeKIOC3g+C3kOC2r+C3k+C2uOC2pyDgt4Pgt4Qg4La74LeE4LeD4LeKIOC2tOC2ryDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrgg4LeD4LeEIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtprgt5Lgtrvgt5Pgtrgg4LaH4Lat4LeU4LeF4Lat4LeK4LeAIEFjY291bnRNYW5hZ2VyIOC2nOC3miDgtpzgt5Lgtqvgt5Tgtrjgt4og4LeD4Lat4LeK4oCN4La64LeP4La04LaxIOC3hOC3kOC2muC3kuC2uuC3j+C3gOC2seC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2muC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4i4Lac4LeS4Lar4LeU4La44LeKIOC2keC2muC2reC3lCDgtprgtrvgtrHgt4rgtrEg4LeE4LedIOC2ieC3gOC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiLgtpzgt5Lgtqvgt5Tgtrjgt4og4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uCwg4LeD4LeEIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrgg4LeD4LeEIOC2lOC3gOC3lOC2seC3iuC2nOC3miDgtrjgt5TgtrvgtrTgtq8g4La44LeQ4Laa4LeT4La4IOC2huC2r+C3kyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Ig4LeD4LeS4Lav4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iMjM1NDgxMzk2MTYzODc3NjQyIj4i4LaL4La04LeP4LaC4Lac4La64LeaIOC2h+C2reC3kiDgtpzgt5Lgtqvgt5Tgtrjgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+IuC3g+C2reC3iuKAjeC2uuC3j+C2tOC2sSDgtqfgt53gtprgtrEg4LaJ4La94LeK4La94LeT4La4IOC3g+C2s+C3hOC3jyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiLgtqLgt4/gtr0g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64Lax4LeKIOC2tuC3kOC2veC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiLgtprgt5TgtrjgtrEg4Lai4LeP4La9IOC2tOC3gOC2reC3kuC2seC3iuC2seC3miDgtq8g4LeD4LeEIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2rSDgtq8g4LaG4Lav4LeTIOC2ouC3j+C2vSDgt4PgtrbgtrPgtq3gt48g4Lac4LeQ4LaxIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrbgt5Dgtr3gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiLgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4Lai4LeP4La9IOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+IuC2i+C2tOC2muC2u+C2q+C2uuC2pyDgtqLgt4/gtr0g4Laa4LeZ4LeA4Lax4LeS4La64Lax4LeKIOC3g+C3kOC2r+C3k+C2uOC2pyDgt4Pgt4Qg4Lai4LeP4La9IOC2tOC3iuKAjeC2u+C3nOC2p+C3neC2muC3neC2vSDgtoXgtrfgt5Lgtrvgt5TgtqDgt5Ig4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtovgtrTgtprgtrvgtqvgtrrgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeK4Lat4La74LeK4Lai4LeP4La94La64LanIOC2r+C2reC3iuC2rSDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LeA4LeS4Law4LeS4La64Lax4LeKIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2u+C2uiDgt4Pgt4Qg4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrTgtrrgtrrgt5IsIOC2keC2seC3kuC3g+C3jyDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2r+C2reC3iuC2rSDgtoXgtrHgt4rgtq3gtrvgt4rgtqLgt4/gtr3gtrrgtqcg4La64LeQ4LeA4LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTA1NjYwMTU5Njc1NzUxODk2Ij4i4Lai4LeP4La94La64LeaIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Pgt4Qg4Lac4La44Lax4LeP4Lac4La44LaxIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEv4LaF4La94LeK4La94LePIOC2nOC3kOC2seC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MzMzNzk4ODg2NDEyNzE0MTkzIj4i4LaV4Lax4LeR4La4IEFQTiDgtpHgtprgtpog4Lax4LeS4La64LeU4Lat4LeU4LeAIOC3g+C3hCDgtq3gt5zgtqcg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCDgt4Dgt5DgtrHgt5Ig4Lai4LeP4La9IOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4Lai4LeP4La9IOC2heC2reC3lOC2u+C3lCDgtofgtrvgt5Pgtrjgtqcg4LeD4LeEIOC3g+C3neC2r+C3kuC3g+C3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2h+C2reC3kOC2uOC3iuC3gOC3kuC2pyDgtpTgtrbgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4LaL4La04LeP4LaC4LacIOC2ouC3j+C2vSDgtrTgt5Dgtprgt5Dgtqfgt4rgtqfgt5Qg4LaF4Law4LeT4Laa4LeK4LeC4Lar4La6LOC2huC2tOC3g+C3lCDgtq/gt5Lgt4Hgt4/gtpzgtq0g4Laa4LeS4La74LeT4La4IOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4rgtprgt5Lgtrvgt5Pgtrgg4LeD4LeS4Lav4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4Lat4LeS4La24LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iOTU4ODg0MjkxNDU0MzI3MzA5Ij4i4Lai4LeP4La9IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+IuC2ouC3j+C2vSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Dgtrrgt5og4Lat4Lat4LeK4LeA4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjU5NTI1ODQ5NjQzNzMwMTc5NjAiPiLgtqfgt5ngtq/gtrvgt4og4Laa4La74LaxIOC2veC2ryDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+IuC2p+C3meC2r+C2u+C3iiDgtprgt4Ug4Lai4LeP4La9IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC3miDgtq3gtq3gt4rgt4Dgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiLgtrTgt4Pgt5Tgtrbgt5Lgtrjgt4og4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2rSDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiLgtrTgt4Pgt5Tgtrbgt5Lgtrjgt4og4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2reC3jyDgt4Pgt5Dgtprgt4Pgt5Pgtrgg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiJXaS1GaSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4DgtrHgt4og4La24LeQ4La94LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTAwMjc5ODA3NzM4NzgwMzcyNiI+IldpLUZpIOC3g+C2tuC2vSDgtrbgt4Ag4LeD4LeEIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2rSBXaS1GaSDgtovgtrTgt4/gtoLgtpwg4LeA4La9IOC2seC2uOC3iiDgtobgtq/gt5MgV2ktRmkg4Lai4LeP4La94Laa4La74Lar4La64LeaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrbgt5Dgtr3gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4iV2ktRmkg4LeA4La94LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Lgtrgg4LeD4LeEIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI3MTM3OTUwMjk3Mzg2MTI3NTMzIj4iV2ktRmkg4La04LeK4oCN4La74LeA4Lea4LeBIOC3g+C3iuC2ruC3j+C2seC2uuC2seC3iiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3k+C2uOC2pyDgt4Pgt4Qg4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC3gOC3k+C2uOC2pyDgt4Pgt4QsIFdpLUZpIOC2ouC3j+C2vSDgt4PgtrPgt4Tgt48g4LaL4La04LeP4LaC4Lac4La64LeaIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3g+C2uuC2pyDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBtc2dpZD0iMTM2ODI1Mzg3MTQ4MzI1NDc4NCI+IldpLUZpIOC2tuC3hOC3lOC3gOC3kuC2muC3j+C3geC2sSDgtrTgt5Lgt4Xgt5Lgtpzgt5DgtrHgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzk2OTc3NDAyMTI1NjMzNjU0OCI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgtqcg4La04La44Lar4Laa4LeKIOC2seC3nOC3gCBXaS1GaSDgtqLgt4/gtr3gtrrgt5og4LaH4Lat4LeSIOC3g+C3kuC2uuC2veC3lOC2uCDgtovgtrTgt4/gtoLgtpzgt4Dgtr3gtqcg4La64LeQ4LeA4LeWIOC2tOC3kOC2muC3kOC2p+C3iuC2p+C3lCDgtrbgt4Tgt5Qg4LeA4LeS4Laa4LeP4LeBIOC2veC3kuC2tOC3kuC2sSDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiBub24tbXVsdGljYXN0IOC2huC2muC3j+C2u+C2uuC2pyDgt4Dgtqngt48g4LeA4LeQ4Lap4LeSIOC2tuC2veC2uuC2muC3iiDgtrjgt5ngt4Tgt5Lgtq/gt5Mg4La34LeP4LeA4LeS4Lat4LePIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUxOTQ5NzA2MDI1MzQ5OTI2Ij4i4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC2pyDgtrTgtrjgtqvgtprgt4og4Lax4Lec4LeAIFdpLUZpIOC2ouC3j+C2veC2uuC3miDgtofgtq3gt5Ig4LeD4LeS4La64La94LeU4La4IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtrrgt5Dgt4Dgt5Yg4La04LeQ4Laa4LeQ4Lan4LeK4Lan4LeUIOC2tuC3hOC3lOC3gOC3j+C3hOC2miDgtr3gt5LgtrTgt5LgtrEg4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2veC3kOC2tuC3mi4g4La24LeE4LeU4LeA4LeP4LeE4LaaIOC2seC3kOC2reC3kiDgtobgtprgt4/gtrvgtrrgtqcg4LeA4Lap4LePIOC3gOC3kOC2qeC3kiDgtrbgtr3gtrrgtprgt4og4La44LeZ4LeE4LeS4Lav4LeTIOC2t+C3j+C3gOC3kuC2reC3jyDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhBZG1pbiIgbXNnaWQ9IjYwMDY5NjczNzM5MzU5MjY2NTkiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4i4LeD4LeK4Lau4LeP4Lax4LeT4La6IOC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgt4rgtrrgtprgt4og4LeD4LeQ4Laa4LeD4LeT4La44LanIOC3g+C3hCDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgtq/gt5Tgtrvgt4Pgt4rgtq4g4LaL4La04LeP4LaC4LacIOC3g+C2uOC2nCDgtrrgt5Tgtpzgt4Ug4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+IuC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtrTgt5ngtq/gt5ngt4Pgt5Ig4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtprgt5Lgtrvgt5PgtrjgtqcsIOC3g+C3hCDgtq/gt5Tgtrvgt4Pgt4rgtq4g4LaL4La04LeP4LaC4LacIOC2nOC3gOC3muC3guC2q+C2uuC2pyDgt4Pgt4Qg4La64LeU4Lac4La9IOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI0MTk1OTA3MDEwNjEwMjA1NzAzIj4iV2lNQVgg4LeA4LeZ4Lat4LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrvgtrHgt4rgtrEg4LeE4LedIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+IldpTUFYIOC3g+C2tuC2vSDgtrbgt4Ag4LeD4LeEIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2rSDgtpXgtrHgt5HgtrggV2lNQVgg4Lai4LeP4La94La64LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrHgt5Lgt4Hgt4rgtqDgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2ltYXhTdGF0ZSIgbXNnaWQ9IjI0MDUwNDIyNjcxMzE0OTY1NzkiPiJXaU1BWCDgtq3gtq3gt4rgt4Dgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrogV2lNQVgg4Lai4LeP4La9IOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgt4Dgt5Lgt4PgtrHgt4rgtrDgt5Ig4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiJXaU1BWCDgtqLgt4/gtr3gtrrgtrHgt4rgtqcg4Lav4LeU4La74Laa4Lau4Lax4La6IOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGgiIG1zZ2lkPSI2MTI3NzY5MzM2MzM5Mjc2ODI4Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC2i+C2tOC3j+C2guC2nCDgt4Pgtrjgtp8g4La64LeU4Lac4La9IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeA4LeS4Lax4LeK4oCN4La64LeP4LeD4La6IOC2tuC3kOC2veC3kuC2uOC2pywg4LeD4LeQ4Laa4LeD4LeT4La44LanIOC3g+C3hCDgtrrgt5Tgtpzgtr0g4Laa4LeFIOC2i+C2tOC3j+C2guC2nCDgt4Pgtrjgtp8g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4Lax4LeKIOC2tOC3kuC3heC3kuC2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4i4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Pgtrog4Lav4LeQ4Laa4LeT4La44LanLCDgtrrgt5Tgtpzgtr0g4LaL4La04LeP4LaC4LacIOC3g+C2uOC2nyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4DgtrHgt4og4LeD4LeQ4Laa4LeD4LeT4La44LanIOC3g+C3hCDgtrfgt4/gtrvgtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9uZmMiIG1zZ2lkPSI0NDIzMzUxMjc0NzU3ODc2OTUzIj4i4LaG4LeD4Lax4LeK4LaxIOC2muC3iuC3guC3muC2reC3iuKAjeC2uyDgt4PgtrHgt4rgtrHgt5Lgt4Dgt5rgtq/gtrHgtrog4La04LeP4La94Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLgtobgt4PgtrHgt4rgtrEg4Laa4LeK4LeC4Lea4Lat4LeK4oCN4La7IOC3g+C2seC3iuC2seC3kuC3gOC3muC2r+C2sSAoTkZDKSDgtqfgt5Dgtpzgt4osIOC2tOC2reC3iiwg4LeD4LeEIOC2muC3kuC2uuC3gOC2seC3iuC2seC2seC3iiDgt4Pgtrjgtp8g4LeD4Lax4LeK4Lax4LeS4LeA4Lea4Lav4Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjM1OTg0OTYzMDE0ODY0MzkyNTgiPiLgtpTgtrbgtpzgt5og4Lat4LeS4La74La64LeaIOC2heC2nOC3lOC2vSDgtoXgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iNjAzNDIwMzA2NTA3NzEyMjk5MiI+IuC2uuC2reC3lOC2u+C3lCDgtoXgtpzgt5Tgtr0g4LeD4LeEIOC2leC2seC3keC2uCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq0g4La44LeU4La74La04LavIOC2huC2u+C2muC3iuC3guC3j+C3gOC2muC3iiDgtoXgtrbgtr0g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngt4Tgt5Ig4LaL4Lav4LeP4LeE4La74Lar4La64Laa4LeKIOC3gOC2seC3iuC2seC3miDgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEg4LaH4La44Lat4LeU4La44Laa4LeKIOC2veC3kOC2tuC3meC2r+C3iuC2r+C3kywg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgt4DgtrEg4LaF4Lat4La7IOC2h+C2uOC2reC3lOC2uCDgtoXgt4Dgt4Pgt4/gtrEg4LeA4LaxIOC3gOC3kuC2pyDgtrrgtq3gt5Tgtrvgt5Qg4LaF4Lac4LeU4La9IOC2seC3kOC3gOC2rSDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjYyMDE4MTAwMDgyMzA1MDMwNTIiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2muC3kuC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSIyNzA2NzQ1Njc0NTY5Njc4NjQ0Ij4i4Lac4LeS4Lar4LeU4La4IOC3g+C2s+C3hOC3jyDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaL4Lav4LeP4LeE4La74Lar4La64Laa4LeKIOC2veC3meC3gywg4Lac4LeS4Lar4LeU4La44Laa4LeKIOC3g+C2uOC2nyDgtrTgt5Tgtq/gt4rgtpzgtr0g4La64LeZ4Lav4LeU4La4IOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtq/gt5Dgtrrgt5Ig4La44LeZ4La64LanIOC3hOC2s+C3lOC2seC3jyDgtpzgtq0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI1NDA4Njk0ODc1NzkzOTQ1MzE0Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uCDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIOC3g+C3hCDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI4OTU2MjYyNTkxMzA2MzY5ODY4Ij4i4Lac4LeS4Lar4LeU4La4IOC3g+C2s+C3hOC3jyDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2i+C2r+C3j+C3hOC2u+C2q+C2uuC2muC3iiDgtr3gt5ngt4MsIOC2nOC3kuC2q+C3lOC2uCDgt4Pgtrjgtp8g4La04LeU4Lav4LeK4Lac4La9IOC2uuC3meC2r+C3lOC2uCDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4LeS4La74LeT4La4IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La34LeP4LeA4LeS4LatIOC2muC2vSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1N0YXRzIiBtc2dpZD0iNzM5NjU3NzQ1MTM2MDIwMjQ0OCI+IuC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtprgt5Lgtrvgt5Pgtrjgt5og4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSIxNTEwMTQzNzYxNzU3NjA2MTU2Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uOC3miDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4og4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC3g+C3hCDgtprgt5ngtq3gtrvgtrjgt4og4Lav4Lat4LeK4LatIOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgt4Dgt5Mg4LaH4Lat4LeS4Lav4LeQ4La64LeSIOC2h+C2reC3lOC2veC2reC3iiDgtpzgt5Lgtqvgt5Tgtrgg4LeD4Laz4LeE4LePIOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtprgt5Lgtrvgt5Pgtrjgt5og4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI0NzU2NjA5NjM3MDUzMzUzMzE4Ij4i4Lav4LeP4La64LaaIOC3gOC3liDgt4PgtoLgtpzgt4rigI3gtrvgt4Qg4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjU1NTcwNTg5MDc5MDYxNDQ1MDUiPiLgt4Dgtrvgt4rgtq3gtrjgt4/gtrEg4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C2guC2nOC3iuKAjeC2u+C3hCDgtpzgt5DgtrEg4LeA4LeS4LeD4LeK4Lat4La7IOC2veC3kOC2tuC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iOTAxNTI0NjMyNTQwODIwOTI5NiI+IuC2r+C3j+C2uuC2miDgt4Dgt5Yg4LeD4LaC4Lac4LeK4oCN4La74LeEIOC2veC3kuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iNjkyODkzMDE4ODgyNjA4OTQxMyI+IuC2lOC2tuC2nOC3miDgt4Dgtrvgt4rgtq3gtrjgt4/gtrEg4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C2guC2nOC3iuKAjeC2u+C3hCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C2guC2nOC3iuKAjeC2u+C3hCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeK4LeA4La94LeS4Lax4LeKIOC3gOC3meC2seC3g+C3iiDgtprgtr0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI0MTA3MTAxNTI1NzQ2MDM1NzE4Ij4i4LaU4La2IOC3gOC3kuC3g+C3kuC2seC3iiDgt4Hgtrbgt4rgtq/gtprgt53gt4Lgtrrgtqcg4LaH4Lat4LeU4LeF4Lat4LeK4Laa4Lec4LanIOC2h+C2reC3kiDgtprgt5zgtrHgt4rgtq/gt5rgt4Pgt5Ig4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI2NTk2MTQ2MDAzMzg5MDQyNDMiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LeB4La24LeK4LavIOC2muC3neC3guC2uuC3miDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2nOC2tuC2qeC3jyDgtprgtrsg4Lat4LeS4La24LeS4La6IOC3hOC3kOC2muC3kiDgt4DgtqDgtrEsIOC2seC2uOC3iiwg4LeA4LeP4Laa4LeK4oCN4La64LaC4LeBIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjIxODMxMTA0MDIzMTQ0NDExMDYiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgt5LgtrHgt4og4LaF4La74LeK4LauIOC2r+C3kOC2muC3iuC3gOC3liDgt4Hgtrbgt4rgtq8g4Laa4Led4LeC4La64LanIOC3gOC2oOC2sSDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODE4NTM4NTcxNjI1NTA2NTI5MSI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgt4Hgtrbgt4rgtq/gtprgt53gt4Lgtrog4Lat4LeU4LeF4LanIOC2heC2veC3lOC2reC3iiDgt4DgtqDgtrEg4La94LeS4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2huC2oOC2uuC2seC2uiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6IOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2huC2oOC2uuC2seC2uiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6IOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM2NDI0NzMyOTIzNDgxMzIwNzIiPiLgtoXgtrHgt4/gtpzgtq0g4LaL4La04LeP4LaC4Lac4LeA4La9IOC2veC2tuC3j+C2nOC2rSDgt4Tgt5Dgtprgt5IgVVNCIOC2huC2oOC2uuC2seC2uiDgt4PgtrPgt4Tgt48g4LaF4LeA4LeD4La74La64Laa4LeKIOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU5MTQ0MDI2ODQ2ODU4NDg4MjgiPiLgtoXgtrHgt4/gtpzgtq0g4LaL4La04LeP4LaC4Lac4LeA4La9IOC2tOC3kOC3gOC2reC3meC2sSBTRCDgtprgt4/gtqngt4og4La04LatIOC3g+C2s+C3hOC3jyDgtoXgt4Dgt4Pgtrvgtrrgtprgt4og4La04LeS4La74LeS4Laa4LeK4LeD4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+IuC2lOC2tuC2nOC3miBVU0Ig4LaG4Lag4La64Lax4La64LeaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4IOC3hOC3nSDgtrjgt5Dgtprgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODgwNTY5MzYzMDA1MDQ1ODc2MyI+IuC2lOC2tuC2nOC3miBTRCDgtrTgtq3gt5og4LaF4Lax4LeK4Lat4La74LeK4Lac4LatIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrgg4LeE4LedIOC2uOC3kOC2muC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC3gOC3meC2rSDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MzM3NDE3NzkwOTM2NjMyMDkwIj4iU0Qg4La04LatIOC3gOC3meC2rSDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTk4MzkxOTk3MDY4NzkwMTUiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4La44LeP4Law4LeK4oCN4La6IOC2huC2oOC2uuC2seC2uiDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sS8g4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTg5MTYwNTk3Njk4NTI5MTg1Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2uOC3j+C2sOC3iuKAjeC2uiDgtobgtqDgtrrgtrHgtrrgt5og4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaL4La04LeP4LaC4Lac4La64LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+IuC2veC3muC2m+C2sSDgtobgtqDgtrrgtrHgtrog4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NzA0MzIzMTc2OTE0MTIxNDg0Ij4i4La94Lea4Lab4LaxIOC2huC2oOC2uuC2seC2uiDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iODE1MDYxMzgyMzkwMDQ2MDU3NiI+IuC3g+C3kuC2uuC2veC3lOC2uCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4rgtpzgt5og4La24LeP4LeE4LeS4La7IOC2huC2oOC2uuC2sSDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iMzIxNTIwODM1NzQxNTg5MTMyMCI+IuC3g+C3kuC2uuC2veC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4LeD4Laz4LeE4LePIOC2tuC3j+C3hOC3kuC2uyDgtobgtqDgtrrgtrHgtrog4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NjU2NDg3MjY0ODE5NjY5ODI0Ij4i4LeE4LeQ4La54LeS4La94LeSIOC2nOC3nOC2seC3lCDgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgtqcg4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NTc4OTY3NjQyMjY1NTUwOTU1Ij4i4LeE4LeQ4La54LeS4La94LeSIOC2nOC3nOC2seC3lCDgtrTgtq/gt4rgtrDgtq3gt5Ig4Laa4LeS4La64LeA4LeT4La44LanIOC3g+C3hCDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2Vfc2lwIiBtc2dpZD0iNTk4Njk1MjM2Mjc5NTg3MDUwMiI+IuC2heC2seC3iuC2reC2u+C3iuC2ouC3j+C2vSDgtofgtrjgtq3gt5Tgtrjgt4og4Lac4Lax4LeK4LaxL+C2veC2tuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZV9zaXAiIG1zZ2lkPSI0NzE3NjMyMDAwMDYyNjc0Mjk0Ij4i4LaF4Lax4LeK4Lat4La74LeK4Lai4LeP4La9IOC2h+C2uOC2reC3lOC2uOC3iiDgtpzgt5DgtrHgt5Pgtrjgtqcv4La94LeQ4La24LeT4La44LanIFNJUCDgt4Pgt5rgt4Dgt4/gt4Ag4La34LeP4LeA4LeS4Lat4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4i4LaJ4Lat4LeS4LeE4LeP4LeD4Lac4LatIOC2ouC3j+C2vSDgtrfgt4/gt4Dgt5Lgtq3gtrog4Laa4LeS4La64LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3Njg5MDYwNzQ5ODE5MTI2NDcyIj4i4LeA4LeS4LeB4Lea4LeC4LeS4LatIOC2ouC3j+C2vSDgt4Pgt4Qg4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtongtq3gt5Lgt4Tgt4/gt4Pgtpzgtq0g4Lai4LeP4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iMjU2MjA1MzU5MjMzOTg1OTk5MCI+IuC2ouC3j+C2vSDgtrTgt4rigI3gtrvgtq3gt5LgtrTgtq3gt4rgtq3gt5Lgtrog4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSI3NTM3NTg2NzcxNTU5MzcwNjY4Ij4i4Lai4LeP4La9IOC2muC3nOC2seC3iuC2r+C3muC3g+C3kiDgt4Pgt4Qg4LeD4Laz4LeE4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Hgt5rgt4Lgt5Pgtq0g4La74LeT4Lat4LeSIOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjUwODgyMTczMDkwODg3Mjk2NTAiPiLgtqLgt4/gtr0g4La34LeP4LeA4LeS4LatIOC2nOC3kuC2q+C3lOC2uOC3iiDgtprgt5Lgtrvgt5Pgtrgg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTQ0MzQxMjg2Njc0NjE5ODEyMyI+IuC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtqLgt4/gtr0g4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC3gOC2sSDgtrbgtr3gtrTgt5Hgtrgg4Laa4LeZ4LeD4Lea4LavIOC2uuC2seC3iuC2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4i4Laa4LeZ4LeA4LeZ4Lax4LeSIOC2veC2muC3lOC2q+C3lCDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSI3NjU1NTY4NDMzNjk2MzU2NTc4Ij4i4La44LeP4La74LeK4Lac4Lac4LatIOC3gOC3k+C2uCDgt4PgtrPgt4Tgt48g4Laa4LeZ4LeA4LeZ4Lax4LeS4La64LeaIOC2veC2muC3lOC2q+C3lCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNzY3MzQxNjQ4Nzg3MzQzMjI2OCI+IuC2tOC3iuKAjeC2u+C3gOC3muC3gSDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNDU4NDU3NzQyNjgzNDMxMzg3Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4Laa4LeFIOC2tOC2vSDgtprgt5Lgtrvgt5Pgtrjgt4rgtq8g4LaH4Lat4LeU4LeF4Lat4LeK4LeAIOC2r+C3kOC2seC3iuC3gOC3k+C2uOC3iiDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La44LanLCDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgt4Tgt5Lgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9IjcwNTc3NjQ3NDIyMTE2NTY2NTQiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrgg4LaH4LeE4LeU4La44LeK4Laa4Lax4LeKIOC2r+C3k+C2uOC3iiDgt4Pgt5rgt4Dgt4/gt4Dgtprgt4og4LeA4LeZ4LatIOC2tuC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI5ODU2OTc5MTg1NzY5MDI5ODYiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4LaF4LeD4Lax4LeK4Lax4LeP4Lac4LeaIOC3g+C3muC3gOC3j+C3gOC3miDgtongt4Tgt4Ug4La44Lan4LeK4Lan4La44LeaIOC2heC2reC3lOC2u+C3lOC2uOC3lOC3hOC3lOC2q+C2reC2pyDgtrbgt5DgtrPgt5Pgtrjgtqcg4Lav4La74Lax4LeK4Lax4LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC3g+C3muC2reC3iiDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iMzY5OTYwMDgzMzk3NTExNzQ3OCI+IuC3gOC3j+C3hOC2muC2uiDgt4Pgt5DgtrTgtrrgt5Qg4LeA4LeS4Lax4LeK4oCN4La64LeP4LeD4La6IOC2uuC3meC2r+C3lOC2uCDgtongtr3gt4rgtr3gt48g4LeD4LeS4Lan4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iNDE1OTU0OTE1MjUyOTExMTkyMCI+IuC3gOC3j+C3hOC2muC2uuC3jyDgtr3gtrbgt4/gtq/gt5TgtrHgt4og4LeD4LeQ4Laa4LeD4LeU4La44LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtovgtq3gt4rgtrTgt4/gtq/gtrHgtrrgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI4MjA2MDc3NDQ3ODM4OTA5NTE2Ij4i4Lai4LeP4La9IOC2reC2reC3iuC3gCDgtrjgtq0g4Lax4LeS4La74LeT4Laa4LeK4LeC4LarIOC3gOC3meC2rSDgtofgt4Tgt5Tgtrjgt4rgtprgtrHgt4og4Lav4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI2ODk5MTAyMDc1ODI1MjcyMjExIj4i4La64LeZ4Lav4LeU4La44Laa4LanIOC2ouC3j+C2vSDgtq3gtq3gt4rgt4Ag4La44LatIOC2seC3kuC2u+C3k+C2muC3iuC3guC2qyDgt4Dgt5ngtq0g4LaH4LeE4LeU4La44LeK4Laa4Lax4LeKIOC2r+C3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiLgtrjgt5TgtrvgtrTgtq8g4Lax4LeT4Lat4LeSIOC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSIzMjUyMTE0MjAzOTE5NTEwMzk0Ij4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgt5og4La44LeU4La74La04Lav4La64LanIOC2heC2seC3lOC2uOC2rSDgtoXgtprgt5Tgtrvgt5Qg4LeD4LeEIOC2r+C3kuC2nCDgtrTgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93YXRjaExvZ2luIiBtc2dpZD0iOTE0MTMwNjQ2OTQyMTk5NTAzIj4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgt5og4LaL4Lat4LeK4LeD4LeP4LeE4La64Lax4LeKIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyMTU3MjkyOTQyMTUwNzAwNzIiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC3hSDgtrjgt5TgtrvgtrTgtq8g4Lac4Lar4LaxIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgtprgtrvgtrHgt4rgtrEg4LeD4LeEIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44Lax4LeK4LaxIOC3hOC3nSDgt4Dgt5Dgtrvgtq/gt5Ig4La44LeU4La74La04LavIOC2tuC3nOC3hOC3nSDgtpzgtqvgtrHgtprgt4og4Lan4La64LeS4La04LeKIOC2muC2uyDgtofgtq3gt5Ig4Lax4La44LeKIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgt4Pgt5Lgtrrgtr3gt5Qg4Lav4Lat4LeK4LatIOC2uOC2muC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzEyMzIzMDkxODQ2NzYxMDczIj4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5rgtq/gt5Mg4LeA4LeQ4La74Lav4LeS4La64LanIOC2p+C2uuC3kuC2tOC3iiDgtprgt4Ug4La44LeU4La74La04LavIOC2nOC2q+C2sSDgtrHgt5Lgtrvgt5Pgtprgt4rgt4Lgtqvgtrog4Laa4La74Lax4LeK4LaxIOC3g+C3hCDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC2seC3iuC2sSDgt4Tgt50g4LeA4LeQ4La74Lav4LeSIOC2uOC3lOC2u+C2tOC2ryDgtrbgt5zgt4Tgt50g4Lac4Lar4Lax4Laa4LeKIOC2p+C2uuC3kuC2tOC3iiDgtprgtrsg4LaH4Lat4LeSIOC2seC2uOC3iiDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LeD4LeS4La64La94LeUIOC2r+C2reC3iuC2rSDgtrjgtprgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSIyNjIwMDc3MTkxMjQyNjg4OTU1Ij4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgt5og4La44LeU4La74La04Lav4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtrjgt5TgtrvgtrTgtq/gtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZm9yY2VMb2NrIiBtc2dpZD0iMjI3NDA4NTM4NDcwNDI0ODQzMSI+IuC2reC3kuC2u+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4LeQ4La44LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19mb3JjZUxvY2siIG1zZ2lkPSIxMTQxNzk3NTg4NDAzODI3MTM4Ij4i4Lat4LeS4La74La64LanIOC2heC2nOC3lOC3heC3lCDgt4Dgt5Dgtqfgt5Pgtrgg4LeD4LeS4Lav4LeU4LeA4Lax4LeK4Lax4LeaIOC2muC3meC3g+C3muC2ryDgt4Pgt4Qg4Laa4LeA4Lav4LeP4LavIOC2uuC2seC3iuC2sSDgtrTgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93aXBlRGF0YSIgbXNnaWQ9IjM5MTA1NDU0NDY3NTg2Mzk3MTMiPiLgt4Pgt5Lgtrrgtr3gt5Qg4Lav4Lat4LeK4LatIOC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGEiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMDYxODQwOTYwNjc3NTY4NzYiPiLgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC2r+C2reC3iuC2rSDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La44LeZ4Lax4LeKIOC2tOC3g+C3lOC3gCDgtoXgtrHgtq3gt5Tgtrvgt5Qg4LaH4Laf4LeA4LeS4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gOC2uCDgtqfgt5Dgtrbgt4rgtr3gtqfgt4og4Lav4Lat4LeK4LatIOC2uOC2muC3jyDgtq/gtrjgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUwOTY4OTU2MDQ1NzQxODgzOTEiPiLgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC2r+C2reC3iuC2rSDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La44LeZ4Lax4LeKIOC2tOC3g+C3lOC3gCDgtoXgtrHgtq3gt5Tgtrvgt5Qg4LaH4Laf4LeA4LeS4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gOC2uCDgtq/gt5Tgtrvgtprgtq7gtrEg4Lav4Lat4LeK4LatIOC2uOC2muC3jyDgtq/gtrjgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iMjc4NDgyODI5Mzc0Nzc5MTQ0NiI+IuC2i+C2tOC3j+C2guC2nCDgtpzgt53gtr3gt5Pgtrog4Lax4LeS4La64LeU4Lat4LeU4LeAIOC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+IuC2muC3nOC2seC3iuC2r+C3muC3g+C3kiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeA4LeS4LanIOC2tOC3nOC2r+C3lCDgtrHgt5Lgtrrgt5Tgtq3gt5Qg4LaR4Laa4Laa4LeKIOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrEg4La94LeZ4LeDIOC2i+C2tOC3j+C2guC2nOC2uiDgt4Pgtprgt4PgtrHgt4rgtrEuIOC2tOC3heC2uOC3lCDgtovgtrTgt4/gtoLgtpwg4La04La74LeS4La04LeP4La94Laa4La64LePIOC2tOC2uOC2q+C2muC3iiDgtrXgtr3gtq/gt4/gtrrgt5Ig4La04Lec4Lav4LeUIOC2seC3kuC2uuC3lOC2reC3lOC3gCDgt4Pgtprgt4Pgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iODg1Mjc5MTUxODQ3MjU0MDU2Ij4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgtq/gt5Dgtrjgt5Pgtrjgt5og4La44LeU4La74La04Lav4La6IOC2muC2veC3iiDgtongtprgt5Tgtq3gt4rgt4Dgt5Pgtrgg4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19leHBpcmVQYXNzd29yZCIgbXNnaWQ9IjE3Mjk3MjUyMjYzMTQ2OTE1OTEiPiLgtq3gt5Lgtrst4LaF4Lac4LeU4LeF4LeaIOC2uOC3lOC2u+C2tOC2r+C2uiDgt4Dgt5ngtrHgt4Pgt4rgt4Dgt5Pgtrgg4Laa4Lec4La04La44LarIOC2muC3j+C2vSDgtrTgtrvgt4/gt4Pgtrrgtprgt5LgtrHgt4og4LeD4LeS4Lav4LeU4LeA4LeS4La6IOC2uuC3lOC2reC3lOC2ryDgtrrgtrHgt4rgtrEg4La04LeP4La94Lax4La6IOC2muC3kuC2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9Ijg5MDEzMjYxOTk5MDkxMzI5MTUiPiLgtobgtqDgtrrgtrHgtrrgt5og4LeD4LaC4Laa4Lea4Lat4Lax4La6IOC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSIyNjM3NzMyMTE1MzI1MzE2OTkyIj4i4LaG4Lag4La64Lax4La6IOC2muC3hSDgtrrgt5ngtq/gt5Tgtrjgt4og4Lav4Lat4LeK4LatIOC3g+C2guC2muC3muC2reC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La64La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iNjM5NTMwMTAyMzE1MjI5NzgyNiI+IuC2muC3kOC2uOC2u+C3jyDgtoXgtrbgtr0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+IuC3g+C3kuC2uuC2veC3lCDgtovgtrTgt4/gtoLgtpwg4Laa4LeQ4La44La74LeP4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgt4Dgtr3gtprgt4rgt4DgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVLZXlndWFyZEZlYXR1cmVzIiBtc2dpZD0iMjY2MzI5MTA0NTQyNjM4ODAyIj4i4La64Lat4LeU4La74LeUIOC2huC2u+C2muC3iuC3guC3j+C3gOC3miDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwg4LaF4La24La9IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIzNDY3MDgyMjcyMTg2NTM0NjE0Ij4i4La64Lat4LeU4La74LeUIOC2huC2u+C2muC3iuC3guC3j+C3gCDgt4Tgt5Ig4LeD4La44LeE4La7IOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeA4LeF4Laa4LeK4LeA4La64LeSLiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwaG9uZVR5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iODkwMTA5ODMzNjY1ODcxMDM1OSI+IuC2seC3kuC3gOC3gyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2OTkyMzY1MDUyNzEzNjYxNSI+IuC2ouC2guC2nOC2uCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4OTc1NDQ2NTQyNDI4NzQ1NDMiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMTAzNjAxNDMzMzgyMTU4MTU1Ij4i4Laa4LeP4La74LeK4La64LeP4La9IOC3huC3kOC2muC3iuC3g+C3iiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MzUxNzcxNDQ5NDgzMjkzNzAiPiLgtrHgt5Lgt4Dgt4Pgt5og4LeG4LeQ4Laa4LeK4LeD4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjAzODc4Njc0NDc3MjA3Mzk0Ij4i4La04Lea4Lai4La74La6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+IuC3gOC3meC2seC2reC3iiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJlbWFpbEFkZHJlc3NUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjgwNzM5OTQzNTI5NTYxMjkxMjciPiLgtrjgt5Tgtr3gt4og4La04LeS4Lan4LeU4LeAIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzA4NDIzNzM1NjYwMjYyNTYwNCI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjExMTIwNDQ0MTA2NTkwMTEwMjMiPiLgt4Dgt5ngtrHgtq3gt4oiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMzc0OTEzOTUyODcwMTEwNjE4Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icG9zdGFsQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iNjg4MDI1NzYyNjc0MDA0NzI4NiI+IuC2seC3kuC3gOC3gyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU2MjkxNTM5NTYwNDUxMDkyNTEiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0OTY2NjA0MjY0NTAwMzQzNDY5Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDkzMjY4Mjg0NzU5NTI5OTM2OSI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImltQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iMTczODU4NTE5NDYwMTQ3NjY5NCI+IuC2seC3kuC3gOC3gyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNTk2NDQ1NjU2NDczODM3MDgiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3ODY4NTQ5NDAxMDUzNjE1Njc3Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE0NTExODk0NDYzOTg2OTgwOSI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yZ2FuaXphdGlvblR5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzU0NjMzNTYxMjE4OTExNTYxNSI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQzNzgwNzQxMjkwNDk1MjAzNzMiPiLgt4Dgt5ngtrHgtq3gt4oiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNDU1MDQ3NDY4NTgzOTY1MTA0Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1Qcm90b2NvbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI4NTk1MjYxMzYzNTE4NDU5NTY1Ij4iQUlNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzM5MDQ3MzYyODI3NTQ5MDcwMCI+IldpbmRvd3MgTGl2ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4ODI4NzcxMzQ5MzE0NTgyMTciPiJZYWhvbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjUwMzUzNzYzMTMyMDA1ODUyNDIiPiJTa3lwZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc1MzIzNjMxNzg0NTk0NDQ5NDMiPiJRUSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM3MTM0NDEwMzQyOTk2NjA3NDkiPiJHb29nbGUgVGFsayI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI1MDY4NTczMTI3MTg2MzA4MjMiPiJJQ1EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNjQ4Nzk3OTAzNzg1Mjc5MzUzIj4iSmFiYmVyIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDdXN0b20iIG1zZ2lkPSIxNjQ0NzM4MDU5MDUzMzU1ODIwIj4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlSG9tZSIgbXNnaWQ9IjI1NzA5MjM0NjMwMzM5ODU4ODciPiLgtrHgt5Lgt4Dgt4MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNb2JpbGUiIG1zZ2lkPSI2NTAxNDYzNTU3NzU0NzUxMDM3Ij4i4Lai4LaC4Lac4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29yayIgbXNnaWQ9Ijg4NjM5Mzk2NjcwNTk5MTE2MzMiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhXb3JrIiBtc2dpZD0iMzUxNzc5MjE2MDAwODg5MDkxMiI+IuC2muC3j+C2u+C3iuC2uuC3j+C2vSDgt4bgt5Dgtprgt4rgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhIb21lIiBtc2dpZD0iMjA2NzI2NTk3MjMyMjk3MTQ2NyI+IuC2seC3kuC3gOC3g+C3miDgt4bgt5Dgtprgt4rgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVQYWdlciIgbXNnaWQ9Ijc1ODIzNTk5NTUzOTQ5MjE3MzIiPiLgtrTgt5rgtqLgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVPdGhlciIgbXNnaWQ9IjE1NDQ0MjU4NDc4Njg3NjU5OTAiPiLgt4Dgt5ngtrHgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDYWxsYmFjayIgbXNnaWQ9IjI3MTIxNzUyMDMwNjU2NzgyMDYiPiLgtrrgt4Xgt5Ig4LaH4La44Lat4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FyIiBtc2dpZD0iODczODM2MDY4OTYxNjcxNjk4MiI+IuC2uOC3neC2p+C2u+C3iiDgtrvgtq7gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDb21wYW55TWFpbiIgbXNnaWQ9IjU0MDQzNDM1NjQ2MTQ3ODkxNiI+IuC2huC2uuC2reC2seC2uuC3miDgtrjgt5bgtr3gt5LgtprgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVJc2RuIiBtc2dpZD0iODAyMjQ1MzE5MzE3MTM3MDMzNyI+IklTRE4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNYWluIiBtc2dpZD0iNjc2NjEzNzAxMDYyODMyNjkxNiI+IuC2uOC3luC2veC3kuC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU90aGVyRmF4IiBtc2dpZD0iODU4NzY1NzE0NTA3MjQ0NjU2NSI+IuC3gOC3meC2seC2reC3iiDgt4bgt5Dgtprgt4rgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVSYWRpbyIgbXNnaWQ9IjQwOTM3MzgwNzk5MDg2Njc1MTMiPiLgtrvgt5rgtqngt5Lgtrrgt53gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVUZWxleCIgbXNnaWQ9IjMzNjc4Nzk5NTI0NzYyNTA1MTIiPiLgtqfgt5ngtr3gt5ngtprgt4rgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVUdHlUZGQiIG1zZ2lkPSI4NjA2NTE0Mzc4NTg1MDAwMDQ0Ij4iVFRZIFRERCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmtNb2JpbGUiIG1zZ2lkPSIxMzExNDI2OTg5MTg0MDY1NzA5Ij4i4Laa4LeP4La74LeK4La64LeP4La9IOC2ouC2guC2nOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmtQYWdlciIgbXNnaWQ9IjY0OTkzODczMTIzMTE1NzA1NiI+IuC2muC3j+C2u+C3iuC2uuC3j+C2vSDgtrTgt5rgtqLgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI1NTk2NzcyNjM2MTI4NTYyODg0Ij4i4LeD4LeE4LeP4La64LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW1zIiBtc2dpZD0iNzI1NDQ5MjI3NTUwMjc2ODk5MiI+Ik1NUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUN1c3RvbSIgbXNnaWQ9Ijc4Mzc1ODYxOTg0NTgwNzM0MDQiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVCaXJ0aGRheSIgbXNnaWQ9IjI4MTMzNzk4NDQyMTEzOTA3NDAiPiLgtovgtrTgtrHgt4rgtq/gt5LgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVBbm5pdmVyc2FyeSIgbXNnaWQ9IjM4NzY3Nzk3NDQ1MTgyODQwMDAiPiLgt4PgtoLgt4Dgtq3gt4rgt4PgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVPdGhlciIgbXNnaWQ9IjczODgxNzg5MzkwMTAxNDMwNzciPiLgt4Dgt5ngtrHgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVDdXN0b20iIG1zZ2lkPSI4NTI1OTYwMjU3ODA0MjEzODQ2Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlSG9tZSIgbXNnaWQ9IjQ0OTIyNzIzNjE0MDQzMzkxOSI+IuC2seC3kuC3gOC3gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4i4Laa4LeP4La74LeK4La64LeP4La94La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlT3RoZXIiIG1zZ2lkPSIyOTIzMDA4Njk1MjcyNjM5NTQ5Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlTW9iaWxlIiBtc2dpZD0iMTE5OTE5MDA1MzIxMTY2MjA1Ij4i4Lai4LaC4Lac4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlSG9tZSIgbXNnaWQ9IjgxNjU3NTY5NzcxODQ0ODMwOTciPiLgtrHgt5Lgt4Dgt4MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlV29yayIgbXNnaWQ9IjUyNjgxNzI3NzIzODc2OTQ0OTUiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4i4LeA4LeZ4Lax4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlQ3VzdG9tIiBtc2dpZD0iMjA3NDAyODc1NTUyNzgyNjA0NiI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUhvbWUiIG1zZ2lkPSI2MjQxMTgxMDMyOTU0MjYzODkyIj4i4La44LeU4La94LeKIOC2tOC3kuC2p+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZVdvcmsiIG1zZ2lkPSIxMzcxNDg5MjkwMjQyNDMzMDkwIj4i4Laa4LeP4La74LeK4La64LeP4La94La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlT3RoZXIiIG1zZ2lkPSI1Mzc3MDA3NDk1NzM1OTE1NDc4Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEN1c3RvbSIgbXNnaWQ9IjY5MTk0NTM4MzY2MTg3NDk5OTIiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQWltIiBtc2dpZD0iNzA1MDM2MDYxMjM2ODM4MzQxNyI+IkFJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xNc24iIG1zZ2lkPSIxNDQ1NTY1NDU0MjA3Njk0NDIiPiJXaW5kb3dzIExpdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sWWFob28iIG1zZ2lkPSI4MjcxNDM5NDA4NDY5MDIxMjczIj4iWWFob28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sU2t5cGUiIG1zZ2lkPSI5MDE5Mjk2NzQ0NjIyODMyOTUxIj4iU2t5cGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sUXEiIG1zZ2lkPSI4ODg3NDg0Mzc5NDk0MTExODg0Ij4iUVEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IkhhbmdvdXRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEljcSIgbXNnaWQ9IjE1NzQ4NzA0MzM2MDY1MTczMTUiPiJJQ1EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSmFiYmVyIiBtc2dpZD0iMjI3OTkxNzYzMDg3NTc3MTcyMiI+IkphYmJlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xOZXRNZWV0aW5nIiBtc2dpZD0iODI4NzYyNTY1NTk4NjgyNzk3MSI+Ik5ldE1lZXRpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlV29yayIgbXNnaWQ9IjI5MjY4ODcwNTA1MzYzODcyIj4i4Laa4LeP4La74LeK4La64LeP4La94La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZU90aGVyIiBtc2dpZD0iMzk1MTc4MTEzMTU3MDEyNDA4MiI+IuC3gOC3meC2seC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVDdXN0b20iIG1zZ2lkPSIyMjU1MjM0MTUzNzIwODgzMjIiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVDdXN0b20iIG1zZ2lkPSIzNTQyNDAzNjc5ODI3Mjk3MzAwIj4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQXNzaXN0YW50IiBtc2dpZD0iNjI3NDMzNDgyNTE5NTM3OTA3NiI+IuC3g+C3hOC3j+C2uuC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUJyb3RoZXIiIG1zZ2lkPSI4NzU3OTEzNTA2Nzg0MDY3NzEzIj4i4LeD4LeE4Led4Lav4La74La64LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ2hpbGQiIG1zZ2lkPSIxODkwNzQ2Mjc3Mjc2ODgxNjI2Ij4i4Lav4La74LeU4LeA4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRG9tZXN0aWNQYXJ0bmVyIiBtc2dpZD0iNjkwNDgwNzExMjEyMTEyMjEzMyI+IuC2r+C3muC3geC3k+C2uiDgt4Tgt4Dgt5Tgtr3gt4rgtprgtrvgt5Tgt4Dgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGYXRoZXIiIG1zZ2lkPSI1MjI4MDM0Njg3MDgyMDUwNzI1Ij4i4La04LeS4La64LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRnJpZW5kIiBtc2dpZD0iNzMxMzEwNjc2MjQ4MzM5MTI2MiI+IuC2uOC3kuC2reC3iuKAjeC2u+C2uuC3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZU1hbmFnZXIiIG1zZ2lkPSI2MzY1Njc3ODYxNjEwMTM3ODk1Ij4i4Laa4LeF4La44Lax4LeP4Laa4La74LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTW90aGVyIiBtc2dpZD0iNDU3ODU3MTM1Mjk2Mjc1ODMwNCI+IuC2uOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcmVudCIgbXNnaWQ9IjQ3NTU2MzU1Njc1NjI5MjUyMjYiPiLgtrjgt4Dgt4rgtrTgt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVQYXJ0bmVyIiBtc2dpZD0iNzI2NjQ5MDI4NTEyMDI2Mjc4MSI+IuC3hOC3gOC3lOC2veC3iuC2muC2u+C3lOC3gOC3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlZmVycmVkQnkiIG1zZ2lkPSIxMDE1NzMwNTk4NDQxMzU1MjQiPiLgtrrgt5zgtrjgt5TgtprgtrvgtrEg4La94Lav4LeK4Lav4LeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVsYXRpdmUiIG1zZ2lkPSIxNzk5ODE5OTMwMDg1NjEwMjcxIj4i4Lax4LeR4La64LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlU2lzdGVyIiBtc2dpZD0iMTczNTk4MzU1NDQ3OTA3NjQ4MSI+IuC3g+C3hOC3neC2r+C2u+C3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNwb3VzZSIgbXNnaWQ9IjM5NDEzNjkzOTQyODY5ODExNyI+IuC2t+C3j+C2u+C3iuC2uuC3j+C3gCDgt4Tgt50g4LeD4LeK4LeA4LeP4La44LeS4La04LeU4La74LeU4LeC4La64LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVDdXN0b20iIG1zZ2lkPSIyNDczNTgwNTkzMTExNTkwOTQ1Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IuC2seC3kuC3gOC3gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IuC3gOC3meC2seC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTiDgtprgt5rgtq3gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyDgt4Pgt4Qg4Lax4LeAIFBJTiDgtprgt5rgtq3gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4Lax4LeAIFBJTiDgtprgt5rgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLgtrjgt5TgtrvgtrTgtq/gtrog4Lan4La64LeS4La04LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtrjgt5TgtrvgtrTgtq/gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcgUElOIOC2keC2miDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4LeA4LeQ4La74Lav4LeSIFBJTiDgtprgt5rgtq3gtrrgtprgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IuC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrjgtqcsIOC2uOC3meC2seC3lOC3gCDgtpTgtrbgt48g4La04LeD4LeU4LeAIDAg4LavIOC2lOC2tuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbF9kaWFsb2dfbnVtYmVyX2Zvcl9kaXNwbGF5IiBtc2dpZD0iNjk2MTkyMTAzMTk1MDkwOTcwIj4i4LeE4Lav4LeS4LeD4LeSIOC2h+C2uOC2reC3lOC2uOC3iiDgtoXgtoLgtprgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg5NjM4MzkyNDI1NjU2NTMxOTIiPiLgt4Pgt5rgt4Dgt4/gt4Ag4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2NyZWVuX2xvY2tlZCIgbXNnaWQ9IjcyODg0NDMwNzQ4MDY4MzI5MDQiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2VuYWJsZWQiIG1zZ2lkPSI0NjE1NDA1MTYxNDEyNjA0OSI+IuC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4La44LeZ4Lax4LeU4LeAIOC2lOC2tuC2seC3iuC2sSDgt4Tgt50g4LeE4Lav4LeS4LeD4LeSIOC2h+C2uOC2reC3lOC2uCDgtr3gtrbgt4/gtpzgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iNjg2MjYwMDI4Nzk3MTU4MzY0Ij4i4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyDgtrjgt5ngtrHgt5Qg4LaU4La24Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI3NDc4NzAzMjU0OTY0ODEwMzAyIj4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtrvgtqfgt4/gt4Ag4LaF4Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9lbWVyZ2VuY3lfY2FsbCIgbXNnaWQ9IjUzNDc2MzM3ODQ0MDEyODUyMjUiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9yZXR1cm5fdG9fY2FsbCIgbXNnaWQ9IjUyNDQyNTk3ODU1MDAwNDAwMjEiPiLgtofgtrjgtq3gt5Tgtrgg4LeA4LeZ4LatIOC2seC3kOC3gOC2rSDgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fY29ycmVjdCIgbXNnaWQ9IjkwMzkwMDg2NTAzNjIyNjEyMzciPiLgtrHgt5Lgt4Dgt5Dgtrvgtq/gt5Lgtrrgt5IhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX3dyb25nIiBtc2dpZD0iNDMxNzk1NTAxNDk0ODEwODc5NCI+IuC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXNzd29yZF93cm9uZyIgbXNnaWQ9IjU3Mzc4MTUzOTMyNTMxNjUzMDEiPiLgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLgtrjgt5Tgt4Tgt5Tgtqsg4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2heC2n+C3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5og4LaL4La04La74LeS4La4IOC2tOC3iuKAjeC2u+C2uuC2seC3iuC2reC2uuC2seC3iiDgtpzgtqvgtrEg4LaJ4Laa4LeK4La44LeA4LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGx1Z2dlZF9pbiIgbXNnaWQ9IjgwNTc3NjI4MjgzNTU1NzIzMTUiPiLgtobgtrvgt53gtrTgtqvgtrog4LeA4LeZ4La44LeS4Lax4LeKLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jaGFyZ2VkIiBtc2dpZD0iMzIxNjM1NzQ1Njg0MDYwNjI0Ij4i4LaF4La74Led4La04LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9iYXR0ZXJ5X3Nob3J0IiBtc2dpZD0iNDQ3NzI2NDg0OTM4Njg1MDI2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2xvd19iYXR0ZXJ5IiBtc2dpZD0iMTQ4Mjg3Mzk4MTkxOTI0OTc0MCI+IuC2lOC2tuC2nOC3miDgtobgtrvgt53gtrTgtprgtrrgtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk5NDM5Mjc3ODE5MjE1Mzk5Ij4iU0lNIOC2tOC2rSDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MTY1OTE5NjA5NTc5MTQ3NCI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miBTSU0g4La04LatIOC2seC3nOC2uOC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4i4Lav4LeU4La74Laa4Lau4Lax4La6IOC2reC3lOC3hSBTSU0g4La04LatIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUzNzI3ODcxMzgwMjMyNzI2MTUiPiJTSU0g4La04Lat4Laa4LeKIOC2h+C2reC3lOC2veC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjM1MjY1NzMwOTkwMTkzMTk0NzIiPiJTSU0g4La04LatIOC2seC3nOC2uOC3kOC2rSDgt4Tgt50g4Laa4LeS4La64LeA4LeS4La6IOC2seC3nOC3hOC3kOC2mi4gU0lNIOC2tOC2reC2muC3iiDgtofgtq3gt5Tgtr3gtq3gt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5NjE0OTY2NTEzODkxNjE4NCI+IuC2t+C3j+C3gOC3kuC2reC3jyDgtprgt4Ug4Lax4Lec4LeE4LeQ4Laa4LeSIFNJTSDgtrTgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjkxMDkwNDY0MzQzMzE1MTM3MSI+IuC2lOC2tuC2nOC3miBTSU0g4La04LatIOC3g+C3iuC2ruC3kuC2u+C3gCDgtoXgtrbgtr0g4Laa4La7IOC2reC3kuC2tuC3mi5cbiDgt4Dgt5ngtrHgtq3gt4ogU0lNIOC2tOC2reC2muC3iiDgt4PgtrPgt4Tgt48g4LaU4La24Lac4LeaIOC3g+C3muC3gOC3j+C2r+C3j+C2uuC2muC2uuC3jyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lac4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDE1OTQ5MDUxNTI3NDY4ODYiPiLgtrTgt5ngtrsg4Lac4LeT4LatIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI2MDg5Mjk3NjUwNDgxMjkyMzYzIj4i4LaK4LeF4LafIOC2nOC3k+C2rSDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTkwODg3ODY3ODAxMjgwMDEiPiLgt4Dgt5Lgtrvgt4/gtrgg4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU4ODg0MjI5MzgzNTEwMTk0MjYiPiLgtrDgt4/gt4Dgtpog4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1NjIzMTgzNzg3NjY5ODc2MDEiPiLgtrHgt5Dgt4Dgtq3gt5Pgtrjgt5og4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxzX29ubHkiIG1zZ2lkPSI2NzMzOTc4MzA0Mzg2MzY1NDA3Ij4i4LeE4Lav4LeS4LeD4LeSIOC2h+C2uOC2reC3lOC2uOC3iiDgtrTgtrjgtqvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIxNDMzODkyMjQ5ODYwMjg1MDEiPiLgtqLgt4/gtr3gtrog4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4iU0lNIOC2tOC2rSBQVUsg4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI4MTI3OTE2MjU1MjQ1MTgxMDYzIj4i4La04La74LeS4LeB4LeT4La94LaaIOC2i+C2tOC2r+C3muC3geC2uiDgtrbgtr3gtrHgt4rgtrEg4LeE4LedIOC2tOC2u+C3kuC2t+C3neC2nOC3kuC2miDgt4Pgt5rgt4Dgt4/gt4Ag4LaF4La44Lat4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+IlNJTSDgtrTgtq0g4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4iU0lNIOC2tOC2rSDgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2NDgxNjIzODMwMzQ0MTA3MjIyIj4i4LaU4La2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LeaIOC2u+C2p+C3j+C3gCDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaH4LazIOC2h+C2rS4gXG5cbuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+IuC2lOC2tiDgtrjgt5TgtrvgtrTgtq/gtrog4LeA4LeP4La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeK4Laa4Lec4LanIOC2h+C2rS4gXG5cbuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IuC2lOC2tiBQSU4g4LaF4LaC4Laa4La6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC3nOC2pyDgtofgtq0uXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2h+C2reC3lOC3heC2rSDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI5MTkxNjExOTg0NjI1NDYwODIwIj4i4LaU4La2IOC3gOC3kOC2u+C2r+C3kuC2uuC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LaU4La24Lac4LeaIOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5og4La74Lan4LeP4LeAIOC2h+C2syDgtofgtq0uIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtovgtq3gt4rgt4Pgt4Qg4Laa4LeS4La74LeT4La44LeKIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2lOC2tuC2nOC3miBHb29nbGUg4La04LeU4La74Lax4La6IOC3gOC3k+C2uOC3iiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC2lOC2tuC2nOC3meC2seC3iiDgtoXgt4Pgtrrgt5IuXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNTkwMjI3NTU5NzYzNzYyNzUxIj4i4LaU4La2IOC3gOC3kOC2u+C2r+C3kuC2uuC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LaU4La24Lac4LeaIOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5og4La74Lan4LeP4LeAIOC2h+C2syDgtofgtq0uIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtovgtq3gt4rgt4Pgt4Qg4Laa4LeS4La74LeT4La44LeKIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2lOC2tuC2nOC3miBHb29nbGUg4La04LeU4La74Lax4La6IOC3gOC3k+C2uCDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC2lOC2tuC2nOC3meC2seC3iiDgtoXgt4PgtrHgt5Qg4LaH4LatLlxuXG4g4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjEyODEwNjM5OTc0NTc1NTYwNCI+IuC2lOC2tiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaF4LeA4LeD4LeK4Lau4LePIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La7IOC2h+C2rS4g4LaF4LeA4LeD4LeK4Lau4LePIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtprgt4Ag4LaL4Lat4LeK4LeD4LeEIOC2muC3kuC2u+C3k+C2uOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC2uOC3lOC2veC3iiDgtq3gtq3gt4rgt4Dgtrrgtqcg4Lax4LeQ4LeA4LatIOC2tOC2reC3iiDgt4DgtrEg4LaF4Lat4La7IOC3g+C3kuC2uuC2veC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjAzNTY1MTQyMTU2ODI2NTY1Ij4i4LaU4La2IOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC3gOC3j+C2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgtprgtq/gt5Mg4LeA4LeQ4La74Lav4LeTIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2seC2uuC2seC3iiDgtpzgt5ngtrEg4Lat4LeS4La24LeaLiDgtq3gt4Dgtq3gt4og4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2sSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Laa4La74LeK4La44LeP4Lax4LeK4Lat4LeB4LeP4La94LeP4LeA4LeaIOC2tOC3meC2u+C2seC3kuC2uOC3kuC2uuC2pyDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LaxIOC2heC2reC2uyDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4La04La74LeS4LeB4LeT4La94LaaIOC2r+C2reC3iuC2rSDgtrHgt5Dgtq3gt5Ig4LeA4LeTIOC2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyODA4NzM1MTY0OTM5MzQzNjUiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtpTgtrYg4LeA4LeQ4La74Lav4LeSIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2sSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC2nOC3meC2sSDgtofgtq0uIOC2r+C3kOC2seC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Laa4La74LeK4La44LeP4Lax4LeK4Lat4LeB4LeP4La94LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2ryDgt4Dgt5ngtq0g4La64LeF4LeSIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgtprgt5ngtrvgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiLgtpTgtrYg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LeA4LeP4La7IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgtprgtq/gt5Mg4LeA4LeQ4La74Lav4LeTIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2seC2uuC2seC3iiDgtpzgt5ngtrEg4Lat4LeS4La24LeaLiDgtq/gt5DgtrHgt4og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2reC3geC3j+C2veC3jyDgtrTgt5ngtrvgtrHgt5Lgtrjgt5Lgtrrgtqcg4La04LeS4LeE4LeS4Lan4LeU4LeA4Lax4LeUIOC2veC2tuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MjUxNDgwMzQzMzk0Mzg5NjY1Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiLgtrvgtqfgt4/gt4Ag4LaF4La44Lat4Laa4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+IuC2nOC3kuC2q+C3lOC2uOC3miDgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSIyNzUxMzY4NjA1Mjg3Mjg4ODA4Ij4i4La74Lan4LePIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4og4LeA4LeQ4Lap4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzkzMTgxNjI1NjEwMDcwNzc4NCI+IuC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcsIOC2lOC2tuC2nOC3miBHb29nbGUg4Lac4LeS4Lar4LeU4La4IOC3g+C2uOC2nCDgtrTgt5TgtrvgtrHgtrog4LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI4ODQ2ODgxNDI0MTA2NDg0NDQ3Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC2seC3j+C2uOC2uiAo4LaKLeC2reC3kOC2tOC3keC2vSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iNTk1ODAyODM4Mzk1NDczODUyOCI+IuC2uOC3lOC2u+C2tOC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4i4La04LeU4La74Lax4La6IOC3gOC3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSIxMzY0MDUxNDczMzQ3NDg1OTA4Ij4i4LeA4La94LaC4Lac4LeUIOC2seC3nOC3gOC2sSDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La64Laa4LeKIOC3hOC3nSDgtrjgt5TgtrvgtrTgtq/gtrrgtprgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iMTY5NjkyNDc2MzY5MDM3OTA3MyI+IuC2lOC2tuC2nOC3miDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La6IOC3hOC3nSDgtrjgt5TgtrvgtrTgtq/gtrog4LaF4La44Lat4Laa4LavP1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgt4Dgt5ngtq0g4La64Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iNzExNDYyNzM1MTI4NjkzMzg2NyI+IuC2tOC2u+C3kuC2muC3iuC3guC3jyDgtprgtrvgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+IuC2heC2n+C3lOC2vSDgtoXgtrvgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29uX2xhYmVsIiBtc2dpZD0iOTA2ODg3NzU3NjUxMzQyNTk3MCI+IuC3geC2tuC3iuC2r+C2uiDgt4Pgtprgt4rigI3gtrvgt5Pgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zb3VuZF9vZmZfbGFiZWwiIG1zZ2lkPSI5OTY4MjI4MjUxNTQzMTkwMjYiPiLgt4Hgt4rigI3gtrvgt4Dgt4rigI3gtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fc3RhcnQiIG1zZ2lkPSIzOTQxMDQ1NTAyOTMzMTQyODQ3Ij4i4La74Lan4LeP4LeAIOC2heC2u+C2ueC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NsZWFyZWQiIG1zZ2lkPSI1NTgzNDc5NzIxMDAxNjM5NTc5Ij4i4La74Lan4LeP4LeAIOC3hOC3kuC3g+C3iiDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jZWxsX2FkZGVkIiBtc2dpZD0iNjc1NjAzMTIwODM1OTI5MjQ4NyI+IuC2muC3nOC2p+C3lOC3gOC2muC3iiDgtpHgtprgtq3gt5Qg4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fZGV0ZWN0ZWQiIG1zZ2lkPSI0OTg4NzMwODk1NTU0MDU3MDU4Ij4i4La74Lan4LeP4LeAIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2q+C2uuC3kiI8L3N0cmluZz4KKyAgICA8IS0tIFN0cmluZy5mb3JtYXQgZmFpbGVkIGZvciB0cmFuc2xhdGlvbiAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkICg1Njc4NjI0NjI0NjgxNDAwMTkxKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuC3gOC3kuC2ouC2p+C2uiDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i4LeE4LeS4LeD4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4LaxIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2uiDgt4Dgt5Lgtq/gt4Tgt48g4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IuC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5LgtrEg4La04LeK4oCN4La74Lav4Lea4LeB4La6IOC3hOC3kOC2muC3kuC2veC3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4LeA4LeS4Lai4Lan4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lat4Led4La74Lax4LeK4Lax4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4i4Lat4Lat4LeK4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i4Laa4LeQ4La44La74LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+IuC2uOC3j+C2sOC3iuKAjeC2uiDgtrTgt4/gtr3gtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+IuC3gOC3kuC2ouC2p+C2uiDgtrHgt5Dgt4Dgtq0g4LaF4Lax4LeU4La04LeS4LeF4LeS4LeA4LeZ4LeF4LanIOC3g+C3kOC2muC3g+C3kuC2uCDgtofgtrvgtrngt5Tgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i4LeA4LeS4Lai4Lan4LeKIOC2seC3kOC3gOC2rSDgtoXgtrHgt5TgtrTgt5Lgt4Xgt5Lgt4Dgt5ngtr3gtqcg4LeD4LeQ4Laa4LeD4LeT4La4IOC2heC3gOC3g+C3j+C2seC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOC3gOC3kuC2ouC2p+C2uiDgtrjgt5Dgtprgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IuC2heC2nOC3lOC3heC3lCDgtrHgt5zgtq/gt5Dgtrjgt5Yg4La04LeK4oCN4La74Lav4Lea4LeB4La6IOC2tOC3lOC3heC3lOC2veC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i4LeD4La74LeK4La04LarIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLgtrvgtqfgt48g4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuC2uOC3lOC3hOC3lOC2qyDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaF4Laf4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUElOIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i4La44LeU4La74La04LavIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i4La74Lan4LePIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i4LeD4La74LeK4La04LarIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2NoYXJhY3RlciIgbXNnaWQ9IjczMzY0NzA1MzUzODUwMDk1MjMiPiLgtoXgtprgt4rgt4LgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF93b3JkIiBtc2dpZD0iNzA3NTU3MDMyODM3NDkxODY2MCI+IuC3gOC2oOC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmsiIG1zZ2lkPSI1ODE1NTA4ODgwNzgyNDg4MjY3Ij4i4LeD4La24LeQ4Laz4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluZSIgbXNnaWQ9IjU3NjQyNjcyMzUwMjYxMjA4ODgiPiLgtrvgt5rgtpvgt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX2FtcG0iIG1zZ2lkPSI0NTg0MzM4MDgzNTI5MzU1OTgyIj4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JVA8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9jYXBfYW1wbSIgbXNnaWQ9IjIwODM0NjU5OTI5NDA0NDQzNjYiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4i4Laa4La74LeK4La44LeP4Lax4LeK4LatIOC3geC3j+C2veC3jyDgtrTgtrvgt5Pgtprgt4rgt4Lgtqvgtrog4LaF4LeD4LeP4La74LeK4Lau4Laa4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiJGQUNUT1JZX1RFU1Qg4Laa4LeK4oCN4La74LeS4La64LeP4LeAIC9zeXN0ZW0vYXBwIOC3hOC3kiDgt4Pgt4rgtq7gt4/gtrTgt5Lgtq0g4La04LeQ4Laa4Lea4LaiIOC3g+C2s+C3hOC3jyDgtrTgtrjgtqvgtprgt4og4LeD4LeE4La6IOC2r+C2muC3iuC3gOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub19hY3Rpb24iIG1zZ2lkPSI4NzI5OTE4NzQ3OTk5OTg1NjEiPiJGQUNUT1JZX1RFU1Qg4Laa4LeK4oCN4La74LeS4La64LeP4LeAIOC2veC2tuC3j+C2r+C3meC2sSDgtrTgt5Dgtprgt5rgtqLgtrrgtprgt4og4LeD4Lec4La64LeP4Lac4LatIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfcmVib290IiBtc2dpZD0iNjMyMDE2ODIwMzA1MDc5MTY0MyI+IuC2tOC3lOC2seC2u+C3j+C2u+C2uOC3iuC2tyDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIxOTg3NDgzOTc3ODM0NjAzODcyIj4iXCI8eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPlwiIOC3hOC3kiDgtofgtq3gt5Ig4La04LeS4Lan4LeU4LeAIOC2muC3kuC2uuC2seC3iuC2seC3mjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjY5NjE5MDMyMTM3Mjk2Njc1NzMiPiLgtqLgt4/gt4Dgt4/gt4Pgt4rgtprgt4rigI3gtrvgt5LgtrTgt4rgtqfgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF90aXRsZSIgbXNnaWQ9IjI2MTkzNzY1NTU1MjUxMTY1OTMiPiLgt4PgtoLgtqDgtr3gtrHgtrog4Lat4LeE4LeA4LeU4La74LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3Bvc2l0aXZlX2J1dHRvbiIgbXNnaWQ9IjMxMTI3NTIwMTA2MDA0ODQxMzAiPiLgtrjgt5ngtrgg4La04LeS4Lan4LeU4LeA4LeZ4Lax4LeKIOC2ieC3gOC2reC3iiDgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF9uZWdhdGl2ZV9idXR0b24iIG1zZ2lkPSI1NjE0ODYxMjkzMDI2MDk5NzE1Ij4i4La44LeZ4La4IOC2tOC3kuC2p+C3lOC3gOC3meC3hOC3kiDgtongtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZCIgbXNnaWQ9IjM0Njg4MTYzNTcwOTUzNzg1OTAiPiI8eGxpZmY6ZyBpZD0iTUVTU0FHRSI+JXM8L3hsaWZmOmc+XG5cbuC2lOC2tuC2pyDgtrjgt5ngtrgg4La04LeS4Lan4LeU4LeA4LeZ4Lax4LeKIOC3g+C2guC2oOC2veC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La6IOC2tuC3gOC2pyDgtpTgtrbgtqcg4LeA4LeS4LeB4LeK4LeA4LeP4LeD4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbGFiZWwiIG1zZ2lkPSI2ODYwMjYxNzU4NjY1ODI1MDY5Ij4i4Lat4LeE4LeA4LeU4La74LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvdWJsZV90YXBfdG9hc3QiIG1zZ2lkPSI0NTk1MDQ2NTE1NDAwMjY4ODgxIj4i4LaL4La04Lav4LeZ4LeDOiDgt4Dgt5Lgt4Hgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgtprgt5Tgtqngt48g4Laa4LeS4La74LeT4La44LanIOC2r+C3meC3gOC2u+C2muC3iiDgtq3gtqfgt4rgtqfgt5Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3RoaXNfZm9ybSIgbXNnaWQ9IjQ2MTY3NTg4NDExNTc4MTY2NzYiPiLgt4Pgt4rgt4DgtrrgtoLgtprgt4rigI3gtrvgt5Lgtrog4La04LeS4La74LeA4LeU4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2V0dXBfYXV0b2ZpbGwiIG1zZ2lkPSI3MTAzNDk1MDcwMTgwNTkwODE0Ij4i4LeD4LeK4LeA4La64LaC4Laa4LeK4oCN4La74LeS4La6IOC2tOC3kuC2u+C3gOC3lOC2uCDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX25hbWVfc2VwYXJhdG9yIiBtc2dpZD0iNjM1MDE0NTE1NDc3OTcwNjc3MiI+IiAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfbmFtZV9mb3JtYXQiIG1zZ2lkPSIzMjY4MDQxMDU0ODk5MjE0OTQ1Ij4iJDEkMiQzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X3NlcGFyYXRvciIgbXNnaWQ9Ijc0ODMzMDc4OTMxNzAzMjQxMjkiPiIsICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9mb3JtYXQiIG1zZ2lkPSI0ODc0NDU5NDU1Nzg2ODI3MzQ0Ij4iJDEkMiQzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcHJvdmluY2UiIG1zZ2lkPSIyMjMxODA2NTUzODYzNDIyMzAwIj4i4La04LeF4LeP4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcG9zdGFsX2NvZGUiIG1zZ2lkPSI0Njk2NDMwNDA3Njg5Mzc3MTA4Ij4i4Lat4LeQ4La04LeQ4La94LeKIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3N0YXRlIiBtc2dpZD0iNjk4ODg5NDE5NTUyMDA0NDYxMyI+IuC2ouC2seC2tOC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ppcF9jb2RlIiBtc2dpZD0iODY5NzU0NDU5MjYyNzMyMjk0NiI+IlpJUCDgtprgt5rgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9jb3VudHkiIG1zZ2lkPSIyMzcwNzM3NzEwMjAzNjI4OTEiPiLgtrTgt4rigI3gtrvgt4/gtrHgt4rgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9pc2xhbmQiIG1zZ2lkPSI0MDIwMTAwODc1OTg0NjY3MDI1Ij4i4Lav4LeW4La04LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZGlzdHJpY3QiIG1zZ2lkPSI4NDAwNzM1MDczMzkyMjY3NjcyIj4i4Lav4LeS4LeD4LeK4Lat4LeK4oCN4La74LeS4Laa4LeK4Laa4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZGVwYXJ0bWVudCIgbXNnaWQ9IjUzNDMyNzk0NjI1NjQ0NTMzMDkiPiLgtq/gt5ngtrTgt4/gtrvgt4rgtq3gtrjgt5rgtrHgt4rgtq3gt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcmVmZWN0dXJlIiBtc2dpZD0iMjAyODQ5OTQ4NTA2NTgwMDQxOSI+IuC2tOC3iuKAjeC2u+C3j+C2seC3iuC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3BhcmlzaCIgbXNnaWQ9IjgyMDIyMDYxMDU0Njg4MjAwNTciPiLgtprgt53gtrvgtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+IuC2tOC3iuKAjeC2u+C2r+C3muC3geC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2VtaXJhdGUiIG1zZ2lkPSIyODkzODgwOTc4ODM1Njk4ODE4Ij4i4LaR4La44LeS4La74Lea4Lan4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3NzUyNjU3NzU0MDUxMDY5ODMiPiLgtpTgtrbgtpzgt5og4LeA4LeZ4La24LeKIOC2tOC3kuC2p+C3lOC3g+C2seC3iiDgt4Pgt4Qg4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iODQ2MjM3ODIyNjYwMDQzOTY1OCI+IuC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2u+C2uiDgtrHgt5Dgtrvgtrngt5Yg4LeD4LeS4La64La94LeUIFVSTCDgt4Pgt4Qg4LeD4LeS4La64La94LeUIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtrTgt5Lgtqfgt5Tgt4PgtrHgt4og4LeA4La9IOC2ieC2reC3kuC3hOC3j+C3g+C2uiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C2p+C3hOC2sTog4LeA4LeZ4La24LeKIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq3gt48g4LeD4La44LacIOC2reC3meC3gOC3meC2seC3kiDgtrTgt4/gtrvgt4rgt4Hgt4Ag4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC3gOC2veC2pyDgt4Tgt50g4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2tuC2vSDgtrHgt5zgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzE0Nzg1MTY1MjczMzE0NDkwIj4i4LeA4LeZ4La24LeKIOC2tOC3kuC2p+C3lOC3g+C2seC3iiDgt4Pgt4Qg4LaJ4Lat4LeS4LeE4LeP4LeD4La64LanIOC2veC3kuC3gOC3kuC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4Lac4La24Lap4LePIOC2muC2uyDgtofgtq3gt5Ig4La24LeK4oCN4La74LeA4LeK4LeD4La74La64LeaIOC2ieC2reC3kuC3hOC3j+C3g+C2uiDgt4Tgt50g4La04LeS4Lan4LeU4LeD4Lax4LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtq/gtq3gt4rgtq0g4La44LeQ4Laa4LeT4La44LanIOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4g4LeD4Lan4LeE4LaxOiDgt4Dgt5ngtrbgt4og4Lac4LeA4Lea4LeC4LarIOC3hOC3kOC2muC3kuC2uuC3j+C3gCDgt4Pgt4Tgt5Lgtq0g4Lat4LeZ4LeA4LeZ4Lax4LeSIOC2tOC3j+C2u+C3iuC3geC3gCDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrsg4LeE4LedIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LeS4Lax4LeKIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrrgtqcg4La24La9IOC2seC3nOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4i4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtobgtqDgtrrgtrHgtrog4Laa4La74LaxIOC2veC2ryDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrsg4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC3hOC3nSDgtrTgt5Lgtqfgt5Tgt4PgtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtq/gtq3gt4rgtq0g4La44LeQ4Laa4LeT4La44LanIOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrrgt5IuIOC3g+C2p+C3hOC2sTog4LeA4LeZ4La24LeKIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq3gt4/gt4Dgtrog4LeD4La44LacIOC2reC3meC3gOC3meC2seC3kiDgtrTgt4/gtrvgt4rgt4Hgt4Ag4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC3hOC3nSDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2tuC2vSDgtpzgt5DgtrHgt4rgt4Dgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWxhcm0iIG1zZ2lkPSIxMzc5Mjk0NTU2MzYyMDkxODE0Ij4i4LeD4LeT4Lax4LeU4LeA4Laa4LeKIOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsYXJtIiBtc2dpZD0iMzE2MzkyMDM5MTU3NDczODQ4Ij4i4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC2u+C2sSDgtr3gtq8g4LeD4LeT4Lax4LeUIOC2lOC2u+C2veC3neC3g+C3lCDgtrrgt5ngtq/gt5Tgtrjgt5og4LeD4LeT4Lax4LeU4LeAIOC3g+C2muC3g+C3iiDgtprgtrvgtrHgt4rgtrHgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2h+C2reC3kOC2uOC3iiDgt4Pgt5PgtrHgt5Qg4LaU4La74La94Led4LeD4LeUIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrgg4LaF4LaC4Lac4La6IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2pyDgtrHgtoLgt4Dgt48g4Lax4Lec4Lat4LeS4La24LeT4La44LanIOC2ieC2qSDgtq3gt5Lgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hZGRWb2ljZW1haWwiIG1zZ2lkPSI1NTI1NjYwMDI2MDkwOTU5MDQ0Ij4i4LeE4LasIOC2reC3kOC2tOC3keC2vSDgtpHgtprgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWRkVm9pY2VtYWlsIiBtc2dpZD0iNjYwNDUwODY1MTQyODI1MjQzNyI+IuC2lOC2tuC2nOC3miDgt4Tgtqwg4Lat4LeQ4La04LeR4La94LeaIOC2keC2sSDgtr3gt5LgtrTgt5Ig4LeA4LeZ4LatIOC2keC2sSDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjU5NjIyMjQxNTg5NTUyNzM5MzIiPiLgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrvgtrrgt5og4La34LeWIOC2heC3gOC3g+C2uyDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+IuC2tuC3iuKAjeC2u+C3gOC3lOC3g+C2u+C2uuC3miDgtrfgt5Yg4LeD4LeK4Lau4LeP4Lax4LeT4La6IOC2heC3gOC3g+C2uyDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrfgt5Lgtrjgtq0g4LeA4LeZ4La24LeKIOC2heC2qeC3gOC3kiDgt4Dgtr3gtqcg4LeD4LeK4Lau4LeP4Lax4LeT4La6IOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3meC2u+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9IjU1NjgxMzkxMDA2NDU4MjkxMTciPiLgtrTgt5Dgtprgt5rgtqIg4LeD4Lat4LeK4oCN4La64LeP4La04Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9Ijg0Mzc1OTAxOTA5OTA4NDMzODEiPiLgt4Pgt4rgtq7gt4/gtrTgt5Lgtq0g4Laa4Lec4LanIOC2h+C2reC3kiDgtrTgt5Dgtprgt5rgtqLgtrrgtprgt4og4LeD4Lat4LeK4oCN4La64LeP4La04Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjQxODc3ODY3OTMzNjAzMjY2NTQiPiLgtrTgt5Dgtprgt5rgtqIg4LeD4Lat4LeK4oCN4La64LeP4La04Laa4La64Laa4LeKIOC3gOC3meC2rSDgtrbgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iMzE4MDc0MTc3MzIzMzg2MjEyNiI+IuC2tOC3kOC2muC3muC2oiDgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtpog4LaJ4La94LeK4La94LeT4La44LeKIOC3gOC2veC2pyDgtq/gtrvgtrHgt4rgtrHgt4/gtqcg4LaJ4LapIOC2veC2tuC3jyDgtq/gt5ouIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC3g+C3muC2reC3iiDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VyaWFsUG9ydCIgbXNnaWQ9IjU0NjA4MzMyNzY1NDYzMTA3NiI+IuC3geC3iuKAjeC2u+C3muC2q+C3kuC2nOC2rSDgtrTgt5zgtqcg4La04LeK4oCN4La74LeA4Lea4LeBIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlcmlhbFBvcnQiIG1zZ2lkPSIyOTkxNjM5OTg1MjI0NTk4MTkzIj4iU2VyaWFsTWFuYWdlciBBUEkg4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2heC2seC3lOC2muC3iuKAjeC2u+C2uCDgtq3gt5zgtqcg4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4La74Laz4LeA4Lax4La64LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjUwNzc3NzQyOTc5NDM0MDkyODUiPiLgtrbgt4/gt4Tgt5Lgtrsg4LaF4Lax4LeK4Lat4La74LeK4Lac4LatIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lOC3gOC2seC3iiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI0NTQ0MzQ2NDg2Njk3ODUzNjg1Ij4i4LaF4Lax4LeK4Lat4La74LeK4Lac4LatIOC3g+C2tOC2uuC2seC3iuC2seC2seC3iuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanIOC2r+C2u+C2seC3iuC2seC2seC3iuC2pyDgt4Lgt5ngtr3gt4og4LaR4Laa4LeaIOC3g+C3kuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC3g+C3muC2reC3iiDgtoXgtq/gt4/gt4Ug4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlTG9jayIgbXNnaWQ9IjM1Mjc1NTgzNjY2MTY2ODA4ODkiPiLgt4Pgt4rgt4DgtrrgtoLgtprgt4rigI3gtrvgt5Pgtrog4LaL4La04LeP4LaC4LacIOC2uuC3gOC2reC3iuC2muC3j+C2vSDgtprgt5Lgtrvgt5Pgtrjgt4og4La04LeD4LeU4La24LanIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUxvY2siIG1zZ2lkPSIxNjU1NjI1ODMyMTY2Nzc4NDkyIj4i4LaL4La04LeP4LaC4Lac4La6IOC2i+C2reC3iuC3geC3iuKAjeC2u+C3muC2q+C3kuC2muC2u+C2q+C2uuC2pyDgtoXgtrHgt4rgtq3gtrvgt4rgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4Lax4Lec4LeA4LaxIOC2uuC3heC3kiDgtofgtrvgtrngt5Pgtrjgtprgt4og4LeD4Laz4LeE4LePIOC3g+C3lOC2r+C3lOC3g+C3lCDgt4Dgt5ngtr3gt4/gt4Ag4Laa4LeU4La44Laa4LeK4LavIOC2uuC2seC3iuC2sSDgtpzgt5DgtrEg4La04Lav4LeK4Law4Lat4LeS4La64LanIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtr3gtrbgt4/gtq/gt5Pgtrjgtqcg4Lav4La74Lax4LeK4Lax4LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9tZXNzYWdlIiBtc2dpZD0iNzY3MzQ0Njg3MTM5MTk1NzkwIj4i4La24LeK4oCN4La74LeA4LeK4LeD4La74La64LanIOC2uOC3meC2uCDgtrjgt5TgtrvgtrTgtq/gtrog4La44Lat4LaaIOC2reC2tuC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LaU4La24LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25vdG5vdyIgbXNnaWQ9IjYzODk2NzUzMTY3MDY2OTk3NTgiPiLgtq/gt5DgtrHgt4og4Lax4Lec4LeA4LeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiLgtrjgtq3gtpog4Lat4La24LePIOC2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbmV2ZXIiIG1zZ2lkPSI4Mjc0MzMwMjk2Nzg1ODU1MTA1Ij4i4Laa4LeA4Lav4LeP4LeA4Lat4LeKIOC2seC3nOC3gOC3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9wZW5fcGVybWlzc2lvbl9kZW55IiBtc2dpZD0iNzM3NDAzNjcwODMxNjYyOTgwMCI+IuC2uOC3meC2uCDgtrTgt5Lgtqfgt5Tgt4Ag4LeA4LeS4LeA4LeY4LatIOC2muC3kuC2u+C3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeD4La7IOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0X2NvcGllZCIgbXNnaWQ9IjQ5ODU3Mjk1MjQ2NzAxMzEzODUiPiLgtrTgt5ngt4Ug4La04LeD4LeU4La74LeUIOC2tOC3lOC3gOC2u+C3lOC3gOC2pyDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4La74LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb3JlX2l0ZW1fbGFiZWwiIG1zZ2lkPSI0NjUwOTE4OTIzMDgzMzIwNDk1Ij4i4Lat4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcGVuZF9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI1NzIyMTQ0NjE2NzYwMTU2NDIiPiLgtrjgt5ngtrHgt5Tgt4ArIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiJzcGFjZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZW50ZXJfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNzQzMzYyNzg1MTExMzA5NjY4Ij4i4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMzY1ODE3ODAwNzIwMjc0ODE2NCI+IuC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaF9nbyIgbXNnaWQ9IjgyOTgwMTY2Njk4MjIxNDE3MTkiPiLgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3NlYXJjaCIgbXNnaWQ9IjY3NDk4MjY2MzkwOTg1MTIxMjAiPiLgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3F1ZXJ5IiBtc2dpZD0iNTkxMTc3ODU5MzEyNTM1NTEyNCI+IuC3g+C3meC3gOC3lOC2uOC3iiDgt4Dgt5Lgtrjgt4Pgt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX2NsZWFyIiBtc2dpZD0iMTMzMDI4MTk5MDk1MTgzMzAzMyI+IuC3gOC3kuC2uOC3g+C3lOC2uCDgt4Tgt5Lgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zdWJtaXQiIG1zZ2lkPSIyNjg4NDUwMTMzMjk3OTgzNTQyIj4i4LeA4LeS4La44LeD4LeU4La4IOC2uuC3nOC2uOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3ZvaWNlIiBtc2dpZD0iMjQ1MzIwMzY5NTY3NDk5NDQ0MCI+IuC3hOC2rCDgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iNzQ2MDY5NDA3MDMwOTczMDE0OSI+IuC3g+C3iuC2tOC2u+C3iuC3gSDgtprgt5Lgtrvgt5Pgtrjgt5ngtrHgt4og4Lac4LeA4Lea4LeC4Lar4La6IOC3g+C2tuC2vSDgtprgtrvgtrHgt4rgtrEg4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODY1NTg4NzUzOTA4OTkxMDU3NyI+IuC3g+C3iuC2tOC2u+C3iuC3geC2uiDgt4Dgt5ngtq3gt5LgtrHgt4og4Lac4LeA4Lea4LeC4Lar4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDgtqcg4LaF4LeA4LeB4LeK4oCN4La64La6LiDgt4Pgt4rgtrTgtrvgt4rgt4Hgtrog4LeA4LeZ4Lat4LeS4Lax4LeKIOC2nOC3gOC3muC3guC2q+C2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeA4LeS4LanLCDgtpTgtrbgtpzgt5og4LaH4Laf4LeS4La94LeS4LeA4La94LanIOC2tOC3hOC3hSDgt4Dgt5Lgt4Pgt4rgtq3gtrsg4LaH4LeD4LeS4La6IOC3hOC3nSDgtrbgt5Dgtr3gt5Lgtrog4LeE4LeQ4LaaIOC3hOC3nSDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LeD4La44LacIOC2heC2seC3iuC2reC2u+C3iiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4LeT4La44LanIOC2ieC2guC2nOC3kuC2reC3kiDgt4Pgt5Lgtq/gt5Qg4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNzA4MTk5NjcyODUyMzczMTk1Ij4i4LeD4LeK4La04La74LeK4LeB4La6IOC3gOC3meC2reC3kuC2seC3iiDgtpzgt4Dgt5rgt4Lgtqvgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtrrgt5IuIOC3g+C3iuC2tOC2u+C3iuC3geC2uiDgt4Dgt5ngtq3gt5LgtrHgt4og4Lac4LeA4Lea4LeC4Lar4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Dgt5LgtqcsIOC2lOC2tuC2nOC3miDgtofgtp/gt5Lgtr3gt5Lgt4Dgtr3gtqcg4La04LeE4LeFIOC3gOC3kuC3g+C3iuC2reC2uyDgtofgt4Pgt5Lgtrog4LeE4LedIOC2tuC3kOC2veC3kuC2uiDgt4Tgt5Dgtpog4LeE4LedIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgt4Pgtrjgtpwg4LaF4Lax4LeK4Lat4La74LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kyDgt4Dgt5Pgtrjgtqcg4LaJ4LaC4Lac4LeS4Lat4LeSIOC3g+C3kuC2r+C3lCDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iNzM5NjM4NDUwODk1Mzc3OTkyNSI+IuC2uOC3j+C3gyAxIOC2muC2pyDgtrTgt5ngtrsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IuC2uOC3j+C3gyAxIOC2muC2pyDgtrTgt5ngtrsiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9zZWNvbmRzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4Njk4NzAwNTY1NDc4OTYwMTEiPiLgtq3gtq3gt4rgtrTgtrsgMSDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzOTAzNzA2ODA0MzQ5NTU2Mzc5Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9taW51dGVzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMzMDY3ODc0MzMwODg4MTAxOTEiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgMSDgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMTc2OTQyMDA4OTE1NDU1MTE2Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9ob3Vyc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI5MTUwNzk3OTQ0NjEwODIxODQ5Ij4i4La04LeQ4La6IDEg4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ2NzI3MzIzOTU4NzU4NzU2OSI+IuC2tOC3kOC2uiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJsYXN0X251bV9kYXlzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMDY5OTkyODA4MTY0MzE4MjY4Ij4i4LaF4Lax4LeK4Lat4LeS4La4IOC2r+C3gOC3g+C3iiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9Imxhc3RfbW9udGgiIG1zZ2lkPSIzOTU5MzQ2NzM5OTc5MDU1NDMyIj4i4LaF4LeA4LeD4LeP4LaxIOC2uOC3j+C3g+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZGVyIiBtc2dpZD0iNTIxMTk3NTAyMjgxNTU1NDg0MCI+IuC2tOC2u+C2qyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX2RheXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODYxMzU4NTM0Mzk4MTE1ODIwIj4i4LaK4La64LeaIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDc5NTg2NDY2MTUzMzE0NjMzIj4i4Lav4LeS4LaxIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9zZWNvbmRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjcyOTc0NTU2MDk1NDkwNTEwMiI+IuC2reC2reC3iuC2tOC2uyAxIOC2muC3kuC2seC3iiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTI0MTkyNjExNjQ0Mzk3NDY4NyI+IuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgtq/gt5MiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCAxIOC2muC2r+C3kyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzMzMDcxMzkzNjM5OTQ0ODc0OSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJpbl9udW1faG91cnMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI3MTY0MzUzMzQyNDc3NzY5OTk5Ij4i4La04LeQ4La6IDEg4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3MjkwNjc3MzUzNzI3Mzg5Ij4i4La04LeQ4La6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9kYXlzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTQxMzA4ODc0MzAwOTgzOTUxOCI+IuC3hOC3meC2pyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTEwOTQ0OTM3NTEwMDk1MzI0NyI+IuC2r+C3kuC2sSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX3NlY29uZHNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTg0OTAzNjg0MDIwMDA2OTExOCI+IuC2reC2reC3iuC2tOC2uyAxIOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM2OTkxNjkzNjY2NTA5MzA0MTUiPiLgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9taW51dGVzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjYzNjE0OTAxNDcxMTM4NzE1NDUiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgMSDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NTExNjQ5Njg1OTcxNTA3MTAiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9ob3Vyc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0Nzk2MjEyMDM5NzI0NzIyMTE2Ij4i4La04LeQ4La6IDEg4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjg4OTk3MDc0NTc0ODUzODkwMSI+IuC2tOC3kOC2uiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2RheXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODQ2MzE2MTcxMTQ5MjY4MDMwOSI+IuC2iuC2uuC3miI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzQ1MzM0MjYzOTYxNjQ4MTE5MSI+IuC2r+C3kuC2sSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX3NlY29uZHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODQyMjI1MzcwNzk1MDY2Mjk5Ij4i4Lat4Lat4LeK4La04La7IDEg4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ5NTg4MDEwODgyNTgwNTEwOCI+IuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NjI3ODYxNDk5MjgyODQ4NzgiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgMSDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MjE2MTEzMjkyNzA2NTY4NzI2Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1faG91cnMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjc0NzA4MTE4MTI0MDQ1MjQ2Ij4i4La04LeQ4La6IDEg4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzcwNTM3Mzc2Njc5ODAxMzQwNiI+IuC2tOC3kOC2uiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIyMTc4NTc2MjU0Mzg1NzM5ODU1Ij4i4LeE4LeZ4LanIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyOTczMDYyOTY4MDM4MzU1OTkxIj4i4Lav4LeS4LaxIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfZGF0ZSIgbXNnaWQ9IjkwOTM5NDk3NTc3NTc0NDUxMTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JXM8L3hsaWZmOmc+IOC3gOC2sSDgtq/gt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfdGltZSIgbXNnaWQ9IjU1MDY4MzEyNDQyNjMwODM3OTMiPiI8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+IOC2pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl95ZWFyIiBtc2dpZD0iNTA0MDM5NTY0MDcxMTg2NzE3NyI+Ijx4bGlmZjpnIGlkPSJZRUFSIj4lczwveGxpZmY6Zz4g4Lat4LeU4LeFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5IiBtc2dpZD0iODE0NDE5NTc3NjA1ODExOTQyNCI+IuC2r+C3gOC3gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheXMiIG1zZ2lkPSI0Nzc0NTQ3NjYxMDIxMzQ0NjAyIj4i4Lav4LeS4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91ciIgbXNnaWQ9IjIxMjY3NzE5MTY0MjYxODk0ODEiPiLgtrTgt5DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VycyIgbXNnaWQ9Ijg5NDQyNDAwNTI2Njg1Mjk5MyI+IuC2tOC3kOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZSIgbXNnaWQ9IjkxNDg4Nzg2NTc3MDM3Njk4NjgiPiJtaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVzIiBtc2dpZD0iNTY0NjAwMTAwNTgyNzAzNDUwOSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlY29uZCIgbXNnaWQ9IjMxODQyMzU4MDgwMjE0NzgiPiLgtq3gtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWNvbmRzIiBtc2dpZD0iMzE2MTUxNTM0NzIxNjU4OTIzNSI+IuC2reC2reC3iuC2tOC2uyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlZWsiIG1zZ2lkPSI1NjE3OTYxNTM3MTczMDYxNTgzIj4i4LeD4Lat4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2Vla3MiIG1zZ2lkPSI2NTA5NjIzODM0NTgzOTQ0NTE4Ij4i4LeD4Lat4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhciIgbXNnaWQ9IjQwMDExMTgyMjEwMTM4OTIwNzYiPiLgtoXgt4Dgt5Tgtrvgt5Tgtq/gt4rgtq8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFycyIgbXNnaWQ9IjY4ODE1Nzc3MTc5OTMyMTM1MjIiPiLgtoXgt4Dgt5Tgtrvgt5Tgtq/gt5QiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX3NlY29uZHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2OTYyMDE1NTI4MzcyOTY5NDgxIj4i4Lat4Lat4LeK4La04La7IDEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjE4ODYxMDc3NjY1NzcxNjY3ODYiPiLgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0OTE1NDE0MDAyNTQ2MDg1NjE3Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIDEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMxNjUxODcxNjkyMjQ5MDg3NzUiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODkxNzQ2NzQ5MTI0ODgwOTk3MiI+IuC2tOC3kOC2uiAxIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzODYzOTYyODU0MjQ2NzczOTMwIj4i4La04LeQ4La6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90aXRsZSIgbXNnaWQ9IjM1MzQ1MDkxMzU0MzgzNTMwNzciPiLgt4Dgt5Pgtqngt5Lgtrrgt50g4Lac4LeQ4Lan4La94LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RleHRfaW52YWxpZF9wcm9ncmVzc2l2ZV9wbGF5YmFjayIgbXNnaWQ9IjMxODY2NzAzMzU5Mzg2NzA0NDQiPiLgtrjgt5og4LeA4LeT4Lap4LeS4La64Led4LeAIOC2uOC3meC2uCDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4La04LeK4oCN4La74LeA4LeP4LeE4Lax4La6IOC3g+C2s+C3hOC3jyDgt4Dgtr3gtoLgtpzgt5Qg4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X3Vua25vd24iIG1zZ2lkPSIzNDUwNDM5MTU1MTg3ODEwMDg1Ij4i4La44LeZ4La4IOC3gOC3k+C2qeC3kuC2uuC3neC3gCDgtrDgt4/gt4DgtrHgtrog4Laa4LeFIOC2seC3nOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfYnV0dG9uIiBtc2dpZD0iMjgyMjIzODIxNTEwMDY3OTU5MiI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aXZlX3RpbWUiIG1zZ2lkPSIxODE4NTU3MTc3ODI5NDExNDE3Ij4iPHhsaWZmOmcgaWQ9IkRBVEUiPiUxJHM8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub29uIiBtc2dpZD0iNzI0NTM1MzUyODgxODU4NzkwOCI+IuC2uOC2sOC3iuKAjeC2uuC3hOC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Ik5vb24iIG1zZ2lkPSIzMzQyMTI3NzQ1MjMwMDEzMTI3Ij4i4La44Law4LeK4oCN4La64LeP4LeE4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWlkbmlnaHQiIG1zZ2lkPSI3MTY2MjU5NTA4ODUwNDU3NTk1Ij4i4La44Law4LeK4oCN4La64La4IOC2u+C3j+C2reC3iuKAjeC2u+C3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Ik1pZG5pZ2h0IiBtc2dpZD0iNTYzMDgwNjkwNjg5Nzg5MjIwMSI+IuC2uOC2sOC3iuKAjeC2uuC2uCDgtrvgt4/gtq3gt4rigI3gtrvgt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGFwc2VkX3RpbWVfc2hvcnRfZm9ybWF0X21tX3NzIiBtc2dpZD0iNDQzMTU1NTk0MzgyODcxMTQ3MyI+Ijx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMSQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMiQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9oX21tX3NzIiBtc2dpZD0iMTg0NjA3MTk5NzYxNjY1NDEyNCI+Ijx4bGlmZjpnIGlkPSJIT1VSUyI+JTEkZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUyJDAyZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUzJDAyZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RBbGwiIG1zZ2lkPSI2ODc2NTE4OTI1ODQ0MTI5MzMxIj4i4LeD4LeS4La64La94LeK4La9IOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLgtprgtrTgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuC2tOC3kuC2p+C2tOC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLgtoXgtr3gt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuC2tOC3iuKAjeC2u+C2reC3kuC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgtrvgtrHgt4rgtrEuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg4La04LeS4Lan4La04Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuC2tOC3meC3hSDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4La04LeZ4LeFIOC2reC3muC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgt4Hgtrbgt4rgtq8g4Laa4Led4LeC4La64LanIOC2keC2muC2reC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImlucHV0TWV0aG9kIiBtc2dpZD0iMTY1MzYzMDA2MjMwNDU2Nzg3OSI+IuC2huC2r+C3j+C2sSDgtprgt4rigI3gtrvgtrjgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlZGl0VGV4dE1lbnVUaXRsZSIgbXNnaWQ9IjQ5MDkxMzU1NjQ5NDE4MTU0OTQiPiLgtrTgt5ngt4Ug4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190aXRsZSIgbXNnaWQ9IjU1NzYyNzI0OTYzNjU2ODQ4MzQiPiLgtobgtqDgtrrgtrHgtrog4LaJ4LapIOC2tOC3iuKAjeC2u+C2uOC3j+C2q+C2uiDgtoXgtqngt5Qg4LeA4LeTIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGV4dCIgbXNnaWQ9IjY2NDA1MDU4MTc2MTc0MTQzNzEiPiLgt4Pgtrjgt4Tgtrsg4La04Lav4LeK4Law4Lat4LeSIOC2muC3j+C2u+C3iuC2uuC2uuC2seC3iiDgtprgt4rigI3gtrvgt5Lgtrrgt48g4Lax4Lec4Laa4La74Lax4LeUIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg3MTgzMzUxMjEwNjA3ODc5MTQiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC2sOC3j+C3gOC2seC2uiDgt4Dgt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiLgt4Dgt5Dgtqngt5LgtrTgt5Tgtrsg4Lat4Lec4La74Lat4LeU4La74LeUIOC3hOC3nSDgtrrgt5ngtq/gt5Tgtrgg4Lax4LeQ4LeA4Lat4LeT4La4IOC3g+C2s+C3hOC3jyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9rIiBtc2dpZD0iNTk3MDA2MDQzMDU2MjUyNDkxMCI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiLgtoXgt4Dgtr3gtoLgtpzgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVzIiBtc2dpZD0iNTM2Mjk4MjMwMzMzNzk2OTMxMiI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vIiBtc2dpZD0iNTE0MTUzMTA0NDkzNTU0MTQ5NyI+IuC2heC3gOC2veC2guC2nOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaWFsb2dfYWxlcnRfdGl0bGUiIG1zZ2lkPSIyMDQ5NjU4NzA4NjA5MDQzMTAzIj4i4LaF4LeA4Law4LeP4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9hZGluZyIgbXNnaWQ9Ijc5MzM2ODEyNjAyOTYwMjExODAiPiLgtrTgt5bgtrvgtqvgtrog4LeA4LeZ4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vbiIgbXNnaWQ9IjE1NDQ2ODI3NTU1MTQ0OTQyOTgiPiLgt4Pgtprgt4rigI3gtrvgt5Pgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29mZiIgbXNnaWQ9IjY4MTU4NzAzODY5NzI4MDU4MzIiPiLgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2hpY2hBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ1MzMxODU5NDcwNjQ3NzMzODYiPiLgtrTgt4Tgtq0g4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gCDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IuC2uOC3meC2uCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Ag4LeD4Laz4LeE4LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4i4La04Lav4LeK4Law4Lat4LeSIOC3g+C3kOC2muC3g+C3k+C2uOC3iiAmZ3Q7IOC2uuC3meC2r+C3lOC2uOC3iiAmZ3Q7IOC2tuC3j+C2nOC3kOC2seC3k+C2uOC3iiDgtq3gt5Tgt4Ug4LaH4Lat4LeSIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2ryDgt4Tgt5Lgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZUFjdGl2aXR5IiBtc2dpZD0iNzQ4Njg3NjE0Nzc1MTgwMzMzMyI+IuC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2muC3iiDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiJVU0Ig4LaL4La04LeP4LaC4Lac4La6IOC3g+C2s+C3hOC3jyDgtrrgt5ngtq/gt5Tgtrjgtprgt4og4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9BcHBsaWNhdGlvbnMiIG1zZ2lkPSIyOTkxODE0MjczOTM2NTA0Njg5Ij4i4La44LeZ4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gCDgt4Pgt5Lgtq/gt5Qg4Laa4LeS4La74LeT4La44LanIOC2muC3kuC3g+C3kuC2r+C3lCDgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4Lax4Lec4LeE4LeQ4Laa4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiLgtoXgt4Dgt4/gt4PgtrHgt4/gt4DgtrHgt4rgtq0g4La94LeZ4LeDIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4Lax4LeQ4LeA4Lat4LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZXJyX3Byb2Nlc3MiIG1zZ2lkPSI0NTA3MDU4OTk3MDM1Njk3NTc5Ij4i4LaF4LeA4LeP4LeD4Lax4LeP4LeA4Lax4LeK4LatIOC2veC3meC3gywgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kuC2uiDgtrHgtq3gtrsg4LeA4LeS4Lar4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl90aXRsZSIgbXNnaWQ9IjQzNTE5NDg0ODE0NTkxMzU3MDkiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X2FwcGxpY2F0aW9uIiBtc2dpZD0iMTkwNDQ3NzE4OTA1NzE5OTA2NiI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz4g4La04LeK4oCN4La74Lat4LeS4Lag4LeP4La7IOC2seC3nOC2r+C2muC3iuC3gOC2uuC3ki5cblxu4LaU4La24LanIOC2keC2uiDgtrHgtq3gtrsg4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfYWN0aXZpdHlfcHJvY2VzcyIgbXNnaWQ9IjU3NzYyMDk4ODMyOTkwODk3NjciPiI8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C2muC2uCDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLlxuXG7gtpHgtrog4LeA4LeD4LePIOC2r+C3kOC2uOC3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hcHBsaWNhdGlvbl9wcm9jZXNzIiBtc2dpZD0iODk0MTc1NzYwNzM0MDQ4MTA1NyI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4La04LeK4oCN4La74Lat4LeS4Lag4LeP4La7IOC2seC3nOC2r+C2muC3iuC3gOC2uuC3ki4g4LaR4La6IOC3gOC3g+C3jyDgtq/gt5Dgtrjgt5Pgtrjgtqcg4LaU4La24LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfcHJvY2VzcyIgbXNnaWQ9IjY1MTMyMDk4NzQ4ODA1MTcxMjUiPiI8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La6IOC2tOC3iuKAjeC2u+C2reC3kuC2oOC3j+C2uyDgtrHgt5zgtq/gtprgt4rgt4Dgtrrgt5IuXG5cbuC2lOC2tuC2pyDgtpHgtrog4Lax4Lat4La7IOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfY2xvc2UiIG1zZ2lkPSI4MzQ2MDcyMDk0NTIxMjY1NjA1Ij4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVwb3J0IiBtc2dpZD0iNDA2MDIxODI2MDk4NDc5NTcwNiI+IuC3gOC3j+C2u+C3iuC2reC3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndhaXQiIG1zZ2lkPSI3MTQ3MTE4MjE3MjI2MzE3NzMyIj4i4La74LeQ4Laz4LeTIOC3g+C3kuC2p+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlYnBhZ2VfdW5yZXNwb25zaXZlIiBtc2dpZD0iMzI3Mjc1ODM1MTEzODEyMjUwMyI+IuC2tOC3kuC2p+C3lOC3gCDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4Lax4Lec4Lav4Laa4LeK4LeA4LaxIOC2reC2reC3iuC3gOC2uuC2pyDgtrTgtq3gt4rgt4Dgt5Mg4LaH4LatLlxuXG7gtpTgtrbgtqcg4LaR4La6IOC3gOC3kOC3g+C3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIxNTQ3OTk3NzgwNTA2NzEzNTgxIj4i4La64LeZ4Lav4LeU4La4IOC2seC3kOC3gOC2rSDgt4Tgtrvgt4Dgt48g4La64LeA4LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3JlcGxhY2UiIG1zZ2lkPSI2MjAyNDk4OTQ5OTcwMjgxNDEyIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgtq/gt5DgtrHgt4og4Law4LeP4LeA4Lax4La6IOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19vcmlnaW5hbCIgbXNnaWQ9IjE4ODEwMjAyMzAyMTY2ODY4MyI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g4La44LeU4La94LeS4Lax4LeK4La4IOC2heC2u+C2ueC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3NjYWxlIiBtc2dpZD0iMzIwMjk1NTY2NzY3NTk0NDQ5OSI+IuC2tOC2u+C3kuC2uOC3j+C2q+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zaG93IiBtc2dpZD0iNDAxMzg3ODg3NjQ4NjY1NTg5MiI+IuC3g+C3kOC2uOC3gOC3kuC2p+C2uCDgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfaGludCIgbXNnaWQ9IjEwNjQ1MjQwODQ1NDMzMDQ0NTkiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2reC3lOC3hSDgtrjgt5ngtrog4Lax4LeQ4LeA4LatIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgtrvgtrHgt4rgtrEgJmd0OyDgtrrgt5ngtq/gt5Tgtrjgt4ogJmd0OyDgtrbgt4/gtpzgtrHgt4rgtrHgt48g4La94Lav4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjMzMDcyMDkxOTIxNTU0NDI4MjkiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOC2uuC3meC2r+C3lOC2uCAoPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kuC2uikg4LaR4LeE4LeSIFN0cmljdE1vZGUg4Laa4Lec4Lax4LeK4Lav4Lea4LeD4LeS4La6IOC2i+C2veC3iuC2veC2guC2neC2seC2uiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9wcm9jZXNzIiBtc2dpZD0iNTEyMDM5NzAxMjA0NzQ2MjQ0NiI+Ijx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Lgtrog4LaR4LeE4LeSIFN0cmljdE1vZGUg4Laa4Lec4Lax4LeK4Lav4Lea4LeD4LeS4La6IOC2i+C2veC3iuC2veC2guC2neC2seC2uiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+IkFuZHJvaWQg4LaL4Lat4LeK4LeB4LeK4oCN4La74Lea4Lar4LeSIOC3gOC3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5MuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19hcGsiIG1zZ2lkPSI3OTA0MDQyNjgyMTExNTI2MTY5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgtprgt5LgtrHgt4ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgt4Dgt5DgtrHgt5Ig4La64LeZ4Lav4LeU4La44La04LeK4oCNIOC2u+C3geC3g+C3iuC2rSDgtprgtrvgtrjgt5LgtrHgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtobgtrvgtrjgt4rgtrcg4Laa4La74La44LeS4Lax4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2NvbXBsZXRlIiBtc2dpZD0iMTQwNTk1NDc1NDExMjk5OTIyOSI+IuC2h+C2u+C2ueC3lOC2uCDgtoXgt4Dgt4Pgt4/gtrEg4Laa4La74La44LeS4Lax4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb24iIG1zZ2lkPSI5MDg3MDYzOTg1Nzc2NjI2MTY2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz4g4Law4LeP4LeA4Lax4La6IOC3gOC3meC2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb25fZGV0YWlsIiBtc2dpZD0iMTcyMTY4MTc0MTYxNzg5ODg2NSI+IuC2uuC3meC2r+C3lOC2uOC2pyDgtrjgt4/gtrvgt5Qg4LeA4LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGl0bGUiIG1zZ2lkPSI3MTUzMTY3MDg1NDAzMjk4MTY5Ij4i4La64LeZ4Lav4LeU4La44LeKIOC2uOC3j+C2u+C3lCDgt4DgtrHgt4Dgt4/gtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RleHQiIG1zZ2lkPSI3MDIyNjMxOTI0NTM0NDA2NDAzIj4i4LaF4La94LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC2muC3iiDgtobgtrvgtrjgt4rgtrcg4Laa4LeS4La74LeT4La44LanIOC2tOC3meC2uyDgtq3gt4Dgtrjgtq3gt4og4Laa4LeK4oCN4La74LeS4La64LeP4LeA4LeZ4LeE4LeSIOC2uuC3meC2r+C3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5LgtrEg4La64LeZ4Lav4LeU4La4IOC2seC3kOC3gOC3kOC2reC3iuC3gOC3kuC2uiDgtrrgt5Tgtq3gt5Tgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9hY3Rpb24iIG1zZ2lkPSI0OTMxMjkxNzIyMzg1NjYyODIiPiI8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4g4LeA4LeZ4LatIOC2huC2tOC3g+C3lCDgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjA4MjA5NDI3NTU4MDM1ODA0OSI+IuC2seC3gCDgtrrgt5ngtq/gt5Tgtrgg4LaG4La74La44LeK4La3IOC2seC3nOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2FjdGlvbiIgbXNnaWQ9IjU0NzI3NTY5MjY5NDU0NDA3MDYiPiI8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4g4LaF4La74La54Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5MzIxNDM1OTgzNzE1MzczNDAiPiLgt4Pgt5Tgtrvgt5Dgtprgt5Pgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2tOC2u+C2qyDgtrrgt5ngtq/gt5Tgtrgg4Lax4LeA4Lat4LeK4LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbmRUZXh0IiBtc2dpZD0iNTIwOTg3NDU3MTk1OTQ2OTE0MiI+IuC2tOC3meC3hSDgt4PgtrPgt4Tgt48g4Laa4LeK4oCN4La74LeS4La64LeP4LeAIOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9yaW5ndG9uZSIgbXNnaWQ9IjY4ODU0MjE0MDY4NDU3MzQ2NTAiPiLgt4Tgtqwg4Lax4Laf4Lax4La64LeaIOC3geC2tuC3iuC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpYyIgbXNnaWQ9IjU0MjE2NTExNTcxMzg2MjgxNzEiPiLgtrjgt4/gtrDgt4rigI3gtrog4LeB4La24LeK4Lav4La6IOC2reC3iuKAjeC2u+C3k+C3gOC2reC3j+C3gOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3hOC2u+C3hOC3jyDgtrDgt4/gt4DgtrHgtrog4LeA4LeZ4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+IuC2seC3kuC3hOC2rCDgtrvgt5Lgtpzgt5LgtrHgt4og4Lan4Led4Lax4La64Laa4LeKIOC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9jYWxsIiBtc2dpZD0iMzk0MTY4MDA0MTI4Mjc4ODcxMSI+IuC2h+C2uOC2reC3lOC2uC3gtq3gt5Tgt4Ug4LeB4La24LeK4LavIOC2reC3iuKAjeC2u+C3k+C3gOC2reC3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ibHVldG9vdGhfY2FsbCIgbXNnaWQ9IjIwMDI4OTE5MjYzNTExNTE1MzQiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LaH4La44Lat4LeU4La4LeC2reC3lOC3hSDgt4Hgtrbgt4rgtq8g4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IuC3g+C3k+C2seC3lOC3gOC3miDgt4Hgtrbgt4rgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMjQyMjI2NTY1Njc0NDI3NjcxNSI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3miDgt4Hgtrbgt4rgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfdW5rbm93biIgbXNnaWQ9IjE0MDAyMTk2Njk3NzA0NDU5MDIiPiLgt4Hgtrbgt4rgtq/gtrog4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fYmx1ZXRvb3RoIiBtc2dpZD0iNjUzODg5NDE3NzI1NTk2NDM0MCI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgt4Hgtrbgt4rgtq8g4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fcmluZ2VyIiBtc2dpZD0iMzMyNjAwMzg0NzAwNjE2MjQ5NiI+IuC2u+C3kuC2seC3iuC2p+C3neC2seC2uuC3miDgt4Hgtrbgt4rgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9pbmNhbGwiIG1zZ2lkPSI4ODkwMDczMjE4MTU0NTQzMzk3Ij4i4LaH4La44Lat4LeU4La44LeKIOC3geC2tuC3iuC2r+C2uiDgtq3gt4rigI3gtrvgt5Pgt4Dgtq3gt4/gt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9tZWRpYSIgbXNnaWQ9IjQyMTczMTE3MTk2NjUxOTQyMTUiPiLgtrjgt4/gtrDgt4rigI3gtrog4LeB4La24LeK4Lav4La6IOC2reC3iuKAjeC2u+C3k+C3gOC2reC3j+C3gOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjcwNDQ5ODY1NDY0NzcyODIyNzQiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt5og4LeB4La24LeK4LavIOC2reC3iuKAjeC2u+C3k+C3gOC2reC3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX2RlZmF1bHQiIG1zZ2lkPSIzNzg5NzU4OTgwMzU3Njk2OTM2Ij4i4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2u+C3kuC2seC3iuC2p+C3neC2seC2uiDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9kZWZhdWx0X3dpdGhfYWN0dWFsIiBtc2dpZD0iODEyOTU2MzQ4MDg5NTk5MDM3MiI+IuC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3lCDgtrvgt5LgtrHgt4rgtqfgt53gtrHgtrogKDx4bGlmZjpnIGlkPSJBQ1RVQUxfUklOR1RPTkUiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3NpbGVudCIgbXNnaWQ9Ijc5Mzc2MzQzOTI0MDg5NzcwNjIiPiLgtprgt5Lgt4Pgt5Lgt4Dgtprgt4og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfcGlja2VyX3RpdGxlIiBtc2dpZD0iMzUxNTE0MzkzOTE3NTExOTA5NCI+IuC2u+C3kuC2nOC3kuC2seC3iuC2p+C3neC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4i4Lax4Lec4Lav4Lax4LeK4Lax4LePIOC2u+C3kuC2seC3iuC2p+C3neC2seC2uiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NjU0MTIzOTg3NDE4MTY4NjkzIj4iV2ktRmkg4Lai4LeP4La94La64Laa4LeKIOC2reC3kuC2tuC3miI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IldpLUZpIOC2ouC3j+C2vSDgtofgtq0iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlX2RldGFpbGVkIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTYzNDEwMTQ1MDM0MzI3NzM0NSI+IuC3gOC3kuC3gOC3mOC2rSBXaS1GaSDgtqLgt4/gtr3gtrog4La94La24LeP4Lac4LatIOC3hOC3kOC2miI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzkxNTg5NTMyMzY0NDI5Mjc2OCI+IuC3gOC3kuC3gOC3mOC2rSBXaS1GaSDgtqLgt4/gtr0g4Lat4LeS4La24LeaIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9IjQwMjk0ODk3MTY2MDUyNTUzODYiPiJXaS1GaSDgtqLgtr3gtrrgtqcg4La04LeU4La74Lax4La6IOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4i4Lai4LeP4La94La64LanIOC2tOC3lOC2u+C2seC2uiDgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbmV0d29ya19hdmFpbGFibGVfc2lnbl9pbl9kZXRhaWxlZCAoODAwMDA4MTk0MTQ0Nzk3NjExOCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiJXaS1GaSDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kuC2uiDgtrHgt5zgt4Tgt5DgtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3dhdGNoZG9nX25ldHdvcmtfZGlzYWJsZWRfZGV0YWlsZWQiIG1zZ2lkPSI1NTQ4NzgwNzc2NDE4MzMyNjc1Ij4iIOC2r+C3lOC2tuC2vSDgtoXgtrHgt4rgtq3gtrvgt4rgtqLgt4/gtr0g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64Laa4LeKIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IuC2jeC2ouC3lCBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3R1cm5vbl9tZXNzYWdlIiBtc2dpZD0iMjkwOTI1MDk0MjI5OTYyNzI0NCI+IuC2jeC2ouC3lCBXaS1GaSDgtobgtrvgtrjgt4rgtrcg4Laa4La74Lax4LeK4LaxLiDgtrjgt5ngtrogV2ktRmkg4LeD4Lea4LeA4LeP4Lav4LeP4La64LaaL+C3hOC3nOC2p+C3iuC3g+C3iuC2tOC3nOC2p+C3iiDgtpHgtpog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3lCDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4i4LaN4Lai4LeUIFdpLUZpIOC2huC2u+C2uOC3iuC2tyDgtprgt4Ug4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+IldpLUZpIOC2jeC2ouC3lCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Ag4LeD4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiLgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeD4Laz4LeE4LePIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIxNjQ1MjY3MjU5MjcyODI5NTU5Ij4i4La04LeS4LeF4LeS4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVjbGluZSIgbXNnaWQ9IjIxMTIyMjU0NTE3MDYxMzc4OTQiPiLgtrTgt4rigI3gtrvgtq3gt5Lgtprgt4rgt4Lgt5rgtrQg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl9zZW50X3RpdGxlIiBtc2dpZD0iMTMxODk3NTE4NTExMjA3MDczNCI+IuC2huC2u+C3j+C2sOC2seC3j+C3gCDgtrrgt4DgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl90b19jb25uZWN0X3RpdGxlIiBtc2dpZD0iNDk1ODgwMzk0ODY1ODUzMzYzNyI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC2pyDgtofgtrvgtrrgt5Tgtrjgtprgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcm9tX21lc3NhZ2UiIG1zZ2lkPSI1NzAzODkxNzQ3MzE5NTE3NjkiPiLgt4Dgt5ngtq3gt5LgtrHgt4o6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdG9fbWVzc2FnZSIgbXNnaWQ9IjI0ODk2ODk3NDUyMjA0NDA5OSI+IuC3gOC3meC2rToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbnRlcl9waW5fbWVzc2FnZSIgbXNnaWQ9IjU5MjA5Mjk1NTAzNjc4Mjg5NzAiPiLgtoXgt4Dgt4Hgt4rigI3gtrogUElOIOC2keC2miDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4iUElOOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4i4Lan4LeQ4La24LeK4La94Lan4La6IDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4g4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4DgtrEg4LaF4Lat4La74Lat4LeU4La7IOC2keC2uiBXaS1GaSDgt4Dgtr3gt5LgtrHgt4og4Lat4LeP4LeA4Laa4LeP4La94LeS4Laa4LeAIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgt5ngtrvgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4i4Lav4LeU4La74Laa4Lau4Lax4La6IDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4g4LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Mg4La04LeA4Lat4LeS4LaxIOC3gOC3kuC2pyBXaS1GaSDgt4Dgtr3gt5LgtrHgt4og4LaR4La6IOC2reC3j+C3gOC2muC3j+C2veC3kuC2muC3gCDgt4Dgt5Lgt4PgtrHgt4rgtrDgt5Ig4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9jaGFyYWN0ZXIiIG1zZ2lkPSIzMzY1NTUwMTIwNjE3NzAxNzQ1Ij4i4LaF4Laa4LeU4La7IOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiJTTVMg4La04Lar4LeS4LeA4LeS4LapIOC2uuC3gOC2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsgU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgt4Dgt5Lgt4Hgt4/gtr0g4Lac4Lar4Lax4Laa4LeKIOC2uuC3gOC2uuC3ki4g4La44LeZ4La4IOC2uuC3meC2r+C3lOC2uOC2pyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeQ4LeA4LeT4La4IOC2seC3nOC2seC3kOC3gOC2reC3kyDgtprgtrvgtpzgt5ngtrEg4La64LeP4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5Pgtrjgtqcg4LaU4La24LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4i4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4i4La04LeK4oCN4La74Lat4LeS4Laa4LeK4LeC4Lea4La0IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDtiJmd0OyDgt4Dgt5ngtq0g4Laa4LeZ4Lan4LeSIOC2tOC2q+C3kuC3gOC3k+C2qeC2uuC2muC3iiDgtrrgt5Dgt4Dgt5PgtrjgtqcgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDtiJmd0OyDgtprgt5Dgtrjgtq3gt5LgtrouIjwvc3RyaW5nPgorICAgIDwhLS0gc3ludGF4IGVycm9yIGluIHRyYW5zbGF0aW9uIGZvciBzbXNfc2hvcnRfY29kZV9kZXRhaWxzICgzNDkyMDI1NzE5ODY4MDc4NDU3KSBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOiBleHBlY3RlZDogL3N0cmluZyByZWFkOiBmb250IChwb3NpdGlvbjpFTkRfVEFHIDwvZm9udD5AMTo4MyBpbiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iMzQ5MjAyNTcxOTg2ODA3ODQ1NyI+IuC2uOC3meC2uiAiPC9mb250PiLgtpTgtrbgtpzgt5og4Lai4LaC4Lac4La4IOC2nOC3kuC2q+C3lOC2uOC3miI8Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiIg4LaF4La6IOC3gOC3k+C2uOC3iiDgt4Dgtr3gtqcg4LeE4Lea4Lat4LeU4LeA4Laa4LeKIOC3gOC3mi4iPC9zdHJpbmc+CispICAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19wcmVtaXVtX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjU1MjM4MjYzNDkxMDUxMjM2ODciPjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IuC2uOC3meC2uiDgtpTgtrbgtpzgt5og4Lai4LaC4Lac4La4IOC2nOC3kuC2q+C3lOC2uOC3meC2seC3iiDgtoXgtrrgt4Dgt5Pgtrjgtqcg4LeE4Lea4Lat4LeUIOC3gOC3mi4iPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbGxvdyIgbXNnaWQ9IjQ0NTg4Nzg2MzcxMTEwMjM0MTMiPiLgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2RlbnkiIG1zZ2lkPSIyOTI3Mzg5ODQwMjA5MTcwNzA2Ij4i4LaF4LeA4La94LaC4Lac4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX2Nob2ljZSIgbXNnaWQ9IjUyODk1Mzg1OTIyNzIyMTgxMzYiPiLgtrjgtpzgt5og4Lat4Lea4La74LeT4La4IOC2uOC2reC2miDgtq3gtrbgt4/gtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl91bmRvX2luc3RydWN0aW9uIiBtc2dpZD0iNDk2MDk0NDEzMzA1MjI4NzQ4NCI+IuC2lOC2tuC2pyDgtrjgt5ngtrog4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2reC3lOC3hSDgt4Dgt5ngtrHgt4Pgt4rgtprgtrsg4Lac4LeQ4Lax4LeT4La4IOC2tOC3g+C3lOC3gCDgtprgt4Ug4LeE4LeQ4LaawqAmZ3Q7wqDgtrrgt5ngtq/gt5Tgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2Fsd2F5c19hbGxvdyIgbXNnaWQ9IjMyNDExODExNTQ4Njk0OTMzNjgiPiLgt4Pgt5Dgtrjgt4Dgt5Lgtqfgtrgg4LaJ4LapIOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbmV2ZXJfYWxsb3ciIG1zZ2lkPSI0NDY5OTI3NjU3NzQyNjk2NzMiPiLgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeD4La7IOC2seC3nOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX3RpdGxlIiBtc2dpZD0iNjIyNzcxMjMxOTIyMzIyNjE4NSI+IlNJTSDgtrTgtq0g4LaJ4LeA4Lat4LeKIOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF9tZXNzYWdlIiBtc2dpZD0iMjMzMzE2NDU1OTk3MDk1ODY0NSI+IuC2lOC2tiDgtofgtq3gt5Tgt4Xgtq3gt4og4Laa4La74LaxIOC2veC2ryDgt4Dgtr3gtoLgtpzgt5QgU0lNIOC2tOC2rSDgt4Pgtrjgtp8g4Lax4LeQ4LeA4LatIOC2h+C2u+C2ueC3k+C2uCDgtprgtrvgtrEg4Lat4LeU4La74LeUIOC2ouC2guC2nOC2uCDgtqLgt4/gtr3gtrog4Lax4Lec4Lat4LeS4La24LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9kb25lX2J1dHRvbiIgbXNnaWQ9IjgyNzk0OTk4OTM2OTk2Mzc3NSI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiJTSU0g4La04Lat4Laa4LeKIOC2keC2muC2reC3lCDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX21lc3NhZ2UiIG1zZ2lkPSI2NTk5OTQ1MzAxMTQxMDUwMjE2Ij4i4Lai4LaC4Lac4La4IOC2ouC3j+C2veC2uuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanIOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrog4Lax4LeQ4LeA4LatIOC2heC2u+C2ueC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVzdGFydF9idXR0b24iIG1zZ2lkPSI0NzIyNDA3ODQyODE1MjMyMzQ3Ij4i4La64LeF4LeSIOC2heC2u+C2ueC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjgzNDkzNjI2MjMwNjg4MTkyOTUiPiLgt4Dgt5rgtr3gt4/gt4Ag4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNTg3OTQ1MDY1OTQ1Mzc4MjI3OCI+IuC2r+C3kuC2seC2uiDgt4Pgt5Dgtprgt4Pgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfc2V0IiBtc2dpZD0iNTc3NzA3NTYxNDMyMTA4Nzc1OCI+IuC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9kb25lIiBtc2dpZD0iMjUwNzY4Mzc1MTc1OTMwODgyOCI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1zX25ld19wZXJtX3ByZWZpeCIgbXNnaWQ9IjgyNTc3NDA3MTA3NTQzMDE0MDciPjxmb250IHNpemU9IjEyIiBmZ2NvbG9yPSIjZmYzM2I1ZTUiPiLgtoXgtr3gt5Tgtq3gt4o6ICI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtc19kZXNjcmlwdGlvbl9hcHAiIG1zZ2lkPSI1MTM5ODM2MTQzMjkzMjk5NDE3Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LeD4La04La64LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19wZXJtaXNzaW9ucyIgbXNnaWQ9IjcyODMzNTc3MjgyMTkzMzgxMTIiPiLgtoXgt4Dgt4Pgtrsg4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC2uOC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1fY29zdHNfbW9uZXkiIG1zZ2lkPSI0OTAyNDcwMzI0MTQyMTUxMTE2Ij4i4La44LeZ4La44Laf4LeS4Lax4LeKIOC2lOC2tuC2pyDgtrjgt5Tgtq/gtr3gt4og4LeA4LeQ4La6IOC3gOC3kuC2uiDgt4Tgt5DgtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9hY3Rpdml0eV90aXRsZSIgbXNnaWQ9IjQ0NjUwNTUxNTcyMDk2NDg2NDEiPiJVU0Ig4La44LeE4LePIOC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+IlVTQiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMzMDg1MzgwOTQzMTY0Nzc4MzkiPiLgtpTgtrYg4LaU4La24Lac4LeaIOC2tOC2u+C3kuC2nOC2q+C2muC2uuC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeTIOC2h+C2reC3iuC2reC3miBVU0Ig4LeD4LeK4La04La74LeK4LeB4La6IOC3hOC2u+C3hOC3j+C2ui4g4LaU4La24LanIOC2lOC2tuC3miDgtrTgtrvgt5Lgtpzgtqvgtprgtrog4LeE4LePIOC2lOC2tuC2nOC3miBBbmRyb2lkIFVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Lat4La7IOC2nOC3nOC2seC3lCDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgtrjgt4og4La04LeE4LatIOC2tuC3nOC2reC3iuC2reC2uCDgtpTgtrbgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNTM1MTAwMDQ0NjAzNzgxMSI+IuC2lOC2tiDgtpTgtrbgtpzgt5og4La04La74LeS4Lac4Lar4Laa4La64LanIFVTQiDgt4Tgtrvgt4Tgt48g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kyDgtofgtq0uIOC2lOC2tuC2pyDgtpTgtrbgt5og4La04La74LeS4Lac4Lar4Laa4La6IOC3hOC3jyDgtpTgtrbgtpzgt5ogQW5kcm9pZCBTRCDgtrTgtq0g4LaF4Lat4La7IOC2nOC3nOC2seC3lCDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgtrjgt4og4La04LeE4LatIOC2tuC3nOC2reC3iuC2reC2uCDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiJVU0Ig4La44LeE4LePIOC2huC2oOC2uuC2seC2uiDgt4PgtrPgt4Tgt48g4LaU4La24Lac4LeaIFVTQiDgtobgtqDgtrrgtrHgtrog4La34LeP4LeA4LeS4Lat4La64Lea4Lav4LeTIOC2nOC3kOC2p+C3heC3lOC3gOC2muC3iiDgtq3gt5Lgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4NzYwMTg1MTI3MTY5NzAzMTMiPiJVU0Ig4La44LeE4LePIOC2huC2oOC2uuC2seC2uiDgt4PgtrPgt4Tgt48g4LaU4La24Lac4LeaIFNEIOC2tOC2rSDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5rgtq/gt5Mg4Lac4LeQ4Lan4LeF4LeU4LeA4Laa4LeKIOC2reC3kuC2tuC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4MTc1ODkyNTU0NzU3MjE2NTI1Ij4iVVNCIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4i4LaU4La24Lac4LeaIOC2tOC2u+C3kuC2nOC2q+C2muC2uiDgt4Dgt5ngtq3gtqcv4LeA4LeZ4Lat4LeS4Lax4LeKIOC2nOC3nOC2seC3lCDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzM2MDU4Mzk2NjYzNTE2MDE3Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2NTY4NTIwOTg1NTU2MjM4MjIiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX3RpdGxlIiBtc2dpZD0iNjYwMTI5ODUxNzA4Nzc1ODUzIj4iVVNCIOC2huC2oOC2uuC2seC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5og4La04LeA4Lat4LeTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeZ4La7LCDgtpTgtrbgtpzgt5og4La04La74LeS4Lac4Lar4Laa4La64LeZ4Lax4LeKIEFuZHJvaWQgVVNCIOC2huC2oOC2uuC2seC2uiDgtpzgtr3gt4Dgt48g4Lav4La44Lax4LeK4LaxIChcIuC2tOC3kuC2pyDgtprgtrvgtrHgt4rgtrFcIikuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt5ngtrssIOC2lOC2tuC2nOC3miBBbmRyb2lkIFNEIOC2tOC2rSDgtrTgtrvgt5Lgtpzgtqvgtprgtrrgt5ngtrHgt4og4Lac4La94LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfYnV0dG9uX21vdW50IiBtc2dpZD0iNzA2MDIxODAzNDkwMDY5NjAyOSI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgt5rgtq/gt5Mg4Lac4LeQ4Lan4LeF4LeU4LeA4Laa4LeKIOC2h+C2reC3kuC3gOC3kuC2ui4gVVNCIOC3g+C2guC2nOC3iuKAjeC2u+C3j+C3hOC2muC2uiDgtpzgtr3gt4Dgt48g4LaH4Lat4LeSIOC2r+C3kOC2uuC3kiDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4La74Lax4LeK4LaxLCDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4Lat4Lat4LeKIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RpdGxlIiBtc2dpZD0iOTYzMDM5MDMzNDcwNDc4Njk3Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4i4LaU4La2IFVTQiDgtobgtqDgtrrgtrHgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2seC2uOC3iiwg4LaU4La2IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgtrvgtrEg4LeD4La44LeE4La7IOC2uuC3meC2r+C3lOC2uOC3iiDgtrHgt5Dgt4Dgtq3gt5Pgtrgg4LeD4LeEIOC2lOC2tiBVU0Ig4LaG4Lag4La64Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrEg4Lat4LeU4La74LeUIOC2seC3nOC2reC3kuC2tuC3muC3gOC3ky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfZXJyb3JfdGl0bGUiIG1zZ2lkPSI3MzIzNjU4NDY5NjI2NTE0MjA3Ij4iVVNCIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kuC2uiDgtoXgt4Pgt4/gtrvgt4rgtq7gtprgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX210cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzNjk5OTEzMDk3MzkxNTUwMzk0Ij4i4La44LeP4Law4LeK4oCN4La6IOC2i+C2tOC3j+C2guC2nOC2uuC2muC3iiDgtr3gt5ngt4Mg4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3B0cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxOTYwODE3MTkyMjE2MDY0ODMzIj4i4Laa4LeQ4La44La74LeP4LeA4Laa4LeKIOC2veC3meC3gyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9jZF9pbnN0YWxsZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjc3NDcxMjgyNzg5MjA5MDc1NCI+IuC3g+C3iuC2ruC3j+C2tOC3kuC2reC2uuC2muC3iiDgtr3gt5ngt4Mg4LeD4La44LeK4La24Lax4LeK4Law4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4iVVNCIOC2uOC3meC3gOC2veC2uOC2muC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIyMjkwODU5Mzk5OTgzNzIwMjcxIj4i4LaF4Lax4LeZ4Laa4LeKIFVTQiDgt4Dgt5Lgtprgtr3gt4rgtrTgtrog4LeD4Laz4LeE4LePIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC3huC3neC2uOC3kOC2p+C3iiDgtprgtrvgtrHgt4rgtrHgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IlNEIOC2tOC2rSDgt4bgt53gtrjgt5Dgtqfgt4og4Laa4La74Lax4LeK4Lax4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiLgtpTgtrbgtpzgt5ogVVNCIOC2huC2oOC2uuC2seC2uuC3miDgtofgtq3gt5Ig4LeD4LeS4La64La94LeU4La4IOC2nOC3nOC2seC3lCDgtrjgt5Dgtprgt5Mg4La64Lax4LeUIOC2h+C2rS4g4La44LeZ4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gCDgtobgtrTgt4Pgt5Qg4LeE4LeQ4La74LeA4LeS4La6IOC2seC3nOC3hOC3kOC2miEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4i4LaU4La24Lac4LeaIOC2tOC2reC3miDgt4Pgt5Lgtrrgtr3gt5Qg4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4DgtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9idXR0b25fZm9ybWF0IiBtc2dpZD0iNDEzMTA2NDU2MDEyNzQ3ODY5NSI+IuC3huC3neC2uOC3kOC2p+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IlVTQiDgtrHgt5Lgtq/gt5zgt4Pgt4rgtprgtrvgtqvgtrog4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjEwMTY2NTQ2Mjc2MjY0NzYxNDIiPiJVU0Ig4Lax4LeS4Lav4Lec4LeD4LeK4Laa4La74Lar4La6IOC2heC2tuC2vSDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaW5wdXRfbWV0aG9kIiBtc2dpZD0iNDY1MzM4NzMzNjc5MTIyMjk3OCI+IuC2huC2r+C3j+C2sSDgtprgt4rigI3gtrvgtrjgtrrgtprgt4og4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSI5MDkxNjUyMTU3NzIyNDk1MTE2Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uCDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI2MjAzMTEyNDc4MDk1MTE3NjI1Ij4i4La34Lee4Lat4LeS4LaaIOC2uuC2reC3lOC2u+C3lCDgtrTgt5Tgt4Dgtrvgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoYXJkd2FyZSIgbXNnaWQ9Ijc1MTc4MjEwODY4ODg5OTAyNzgiPiLgtq/gt5jgtqjgt4/gtoLgtpwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfa2V5Ym9hcmRfbGF5b3V0X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE0MDczNjcwMTcyNjMwMzA3NzMiPiLgtrrgtq3gt5Tgtrvgt5Qg4La04LeU4LeA4La74LeU4LeA4LanIOC2tOC3kuC2u+C3kuC3g+C3kOC2veC3kOC3g+C3iuC2uCDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfa2V5Ym9hcmRfbGF5b3V0X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ2NTkwNzcwMDQ0OTI1NzA2MyI+IuC2uuC2reC3lOC2u+C3lCDgtrTgt5Tgt4Dgtrvgt5Tgt4Dgtqcg4La04LeS4La74LeS4LeD4LeQ4La94LeQ4LeD4LeK4La44Laa4LeKIOC2reC3muC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX2FscGhhYmV0IiBtc2dpZD0iNTQzMzI3NTQ4NTQ5OTAzOTE5OSI+IiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmRpZGF0ZXNfc3R5bGUiIG1zZ2lkPSI0MzMzOTEzMDg5NjM3MDYyMjU3Ij48dT4i4LaF4La04Lea4Laa4LeK4LeC4Laa4La64Lax4LeKIjwvdT48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LeD4Laa4LeD4La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NTc2MDM0MTg5NzA5OTQwNTAiPiJTRCDgtrTgtq0g4LeD4LeU4Lav4LeP4Lax4La44LeKIOC2muC2u+C2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgyODczMTk4ODI5MjY3MzcwNTMiPiLgt4Dgt5Dgtrvgtq/gt5Ig4LeD4Laz4LeE4LePIOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgtrvgtrjgt5LgtrHgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLgt4Tgt5Lgt4Pgt4ogVVNCIOC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IuC3hOC3kuC3g+C3iiBTRCDgtrTgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4iU0Qg4La04LatIOC3hOC3kuC3g+C3iiDgt4Tgt50g4LeD4LeE4LeP4La6IOC2seC3nOC2r+C2muC3iuC3gOC2sSDgtpzgt5zgtrHgt5Qg4La04Lav4LeK4Law4Lat4LeS4La64Laa4LeKIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2NDEwNjU2NDE3ODY5MjM2MDQiPiJTRCDgtrTgtq0g4LeE4LeS4LeD4LeKIOC3hOC3nSDgt4Pgt4Tgtrog4Lax4Lec4Lav4Laa4LeK4LeA4LaxIOC2nOC3nOC2seC3lCDgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgtprgt4og4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i4LeE4LeP4Lax4LeSIOC3gOC3liBVU0Ig4LaG4Lag4La64Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0MTA3MjM5MDYwMTkxMDAxODkiPiLgt4Tgt4/gtrHgt5Ig4LeA4LeWIFNEIOC2tOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNzk1OTE3NTc4Mzk1MzMzMjgwIj4iVVNCIOC2huC2oOC2uuC2seC2uuC2pyDgt4Tgt4/gtrHgt5Ig4LeA4LeTIOC2h+C2rS4g4LaR4La6IOC2seC3kOC3gOC2rSDgt4bgt53gtrjgt5Dgtqfgt4og4Lac4LeQ4Lax4LeK4LeA4LeT4La44LanIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+IlNEIOC2tOC2reC2pyDgt4Tgt4/gtrHgt5Ig4LeA4LeTIOC2h+C2rS4g4LaR4La6IOC2seC3kOC3gOC2rSDgt4bgt53gtrjgt5Dgtqfgt4og4Lac4LeQ4Lax4LeK4LeA4LeT4La44LanIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE2NjE2ODMwMzEzMzA5NTEwNzMiPiLgtrbgtr3gt4/gtrTgt5zgtrvgt5zgtq3gt4rgtq3gt5Qg4Lax4Lec4LeA4LeWIOC2veC3meC3gyBVU0Ig4LaG4Lag4La64Lax4La6IOC2ieC3gOC2reC3iiDgtprgt5ngtrvgt5Lgtqvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODcyMTUyODgyNjA0NDA3ODM3Ij4iU0Qg4La04LatIOC2tuC2veC3j+C2tOC3nOC2u+C3nOC2reC3iuC2reC3lCDgtrvgt4Tgt5Lgtq3gt4Ag4LaJ4LeA4Lat4LeKIOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MzI5ODQ4ODE5ODY1NTk0MjQxIj4i4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kuC3gOC3k+C2uCDgt4Dgt5Dgt4Xgtprgt4rgt4Dgt5PgtrjgtqcgVVNCIOC2huC2oOC2uuC2seC2uiDgtongt4Dgtq3gt4rgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeZ4La7IOC2nOC2veC3gOC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjAxODMyOTM3NDc0NDgyNDEiPiLgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeS4LeA4LeT4La4IOC3gOC3kOC3heC2muC3iuC3gOC3k+C2uOC2pyDgtpzgt5Dgtr3gt4Dgt5Pgtrjgtqcg4Laa4La94LeS4Lax4LeKIFNEIOC2tOC2rSDgtongt4Dgtq3gt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5Njc5NzM4OTMyNzAzNjAyMzAiPiLgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanIFVTQiDgtobgtqDgtrrgtrHgtrog4LaG4La74Laa4LeK4LeC4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4iU0Qg4La04LatIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeU4La74Laa4LeK4LeC4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4i4LaU4La24LanIFVTQiDgtobgtqDgtrrgtrHgtrog4LaG4La74Laa4LeK4LeC4LeS4Lat4LeAIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeU4LeF4LeU4LeA4Lax4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiLgtpTgtrbgtqcg4LaG4La74Laa4LeK4LeC4LeS4Lat4LeAIFNEIOC2tOC2rSDgtongt4Dgtq3gt4og4Laa4LeFIOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NDg2Mzc3MjMwMTQwMjI3NjUxIj4iVVNCIOC2huC2oOC2uuC2seC2uiDgtongt4Dgtq3gt4og4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiJTRCDgtrTgtq0g4LaJ4LeA4Lat4LeKIOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iVVNCIOC2huC2oOC2uuC2seC2uiDgtongt4Dgtq3gt4rgtprgt5zgtqcg4LaH4LatLiDgtoXgtr3gt5Tgtq3gt4og4La44LeP4Law4LeK4oCN4La64La64Laa4LeKIOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzODcwMTIwNjUyOTgzNjU5NjQxIj4iU0Qg4La04LatIOC2ieC3gOC2reC3iiDgtprgtrvgtrEg4La94Lav4LeSLiDgtoXgtr3gt5Tgtq3gt4og4LaR4Laa4Laa4LeKIOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiLgtpzgt5Dgtr3gtrTgt5ngtrEg4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC3hOC2uOC3lCDgtrHgt5zgt4Dgt5Tgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wa2dVc2FnZVN0YXRzIiBtc2dpZD0iODc4NzM1MjA3NDMyNjc0ODg5MiI+IuC3g+C2guC2u+C2oOC2muC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeS4La74LeT4La44LeaIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2sSDgtrrgt4/gt4Dgtq3gt4rgtprgt4/gtr3gt5PgtrEg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9IjExMDY2MTI0MjQyNTQyNzc2MzAiPiLgtpHgtprgtq3gt5Qg4Laa4La74LaxIOC2veC2ryDgt4PgtoLgtrvgtqDgtprgtrog4La34LeP4LeA4LeS4Lat4LePIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzNDEwMzYzMTEyMTE0MDY2OTIiPiLgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4La04LeS4Lan4La04Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM5MDY5NzEyNDI4ODMxNzgzMSI+IuC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3lCDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq0g4LeD4Lea4LeA4LeP4LeAIOC2ieC2veC3iuC3gOC3jyDgt4Pgt5Lgtqfgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4La34LeP4LeA4LeS4Lat4La6IOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSIxNjQyMDI0NDU1NzUwNDE0Njk0Ij4i4La44LeP4Law4LeK4oCN4La6IOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uuC3miDgtrjgt4/gtrvgt4rgtpzgtpzgtq0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNDkzMjgxODc0OTU0NzI0NDM0NiI+IuC3gOC3meC2seC2reC3iiDgtrbgt4/gt4Tgt5Lgtrsg4LaL4La04LeP4LaC4LacIOC3gOC3meC2rSDgtrjgt4/gtrDgt4rigI3gtrog4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6IOC2uuC3kOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9Ijc1NjU1NTIyMzc5Nzc4MTUwNDciPiLgtrrgtq3gt5Tgtrvgt5Qg4La04LeP4La94LaaIOC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtobgtqDgtrrgtrHgtrog4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9IjU4NjYyNDU0ODQzMDMyODU3NjIiPiLgtrrgtq3gt5Tgtrvgt5Qg4LaG4La74Laa4LeK4LeC4LaaIOC2huC2oOC2uuC2seC2uuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sX2tleWd1YXJkIiBtc2dpZD0iMTcyMTk1MTg0MjA3ODI4Mzg3Ij4i4La04LeZ4Lax4LeK4LeA4LeT4La44LeaIOC3hOC3jyDgt4Pgt5Dgtp/gt4Dgt5Pgtrjgt5og4La64Lat4LeU4La74LeUIOC2huC2u+C2muC3iuC3guC2muC2uiDgtrTgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjMwNDM3MzIyOTA1MTg2MjkwNjEiPiLgtrrgtq3gt5Tgtrvgt5Qg4LaG4La74Laa4LeK4LeC4Laa4La6IOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiLgt4Dgt5Lgt4Hgt4/gtr3gtrEg4La04LeP4La94Lax4La6IOC3g+C2s+C3hOC3jyDgtq/gt5ngt4Dgtrvgtprgt4og4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdhZGdldF9ob3N0X2Vycm9yX2luZmxhdGluZyIgbXNnaWQ9IjQ4ODIwMDQzMTQ5MDY0NjYxNjIiPiLgt4Dgt5LgtqLgtqfgtrog4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtrHgt5zgt4Tgt5Dgtprgt5Ig4LeA4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZ28iIG1zZ2lkPSI4MzIwODQ1NjUxNzM3MzY5MDI3Ij4i4La64Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9zZWFyY2giIG1zZ2lkPSI2NTgxMTAyNzE4MjI4MDc4MTEiPiLgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlbmQiIG1zZ2lkPSIyMzE2MTY2NTU2MzQ5MzE0NDI0Ij4i4La64LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9uZXh0IiBtc2dpZD0iMzEzODg0MzkwNDAwOTgxMzgzNCI+IuC2uOC3k+C2veC2nyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZG9uZSIgbXNnaWQ9Ijg5NzE1MTYxMTc5MTA5MzQ2MDUiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3ByZXZpb3VzIiBtc2dpZD0iMTQ0MzU1MDAzOTI1MDEwNTk0OCI+IuC2tOC3meC2uyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZGVmYXVsdCIgbXNnaWQ9IjI4NDA5MjE4ODU1NTgwNDU3MjEiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgtrvgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaWFsX251bWJlcl91c2luZyIgbXNnaWQ9IjU3ODkxNzY0MjUxNjc1NzM1ODYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4g4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKXG7gtoXgtoLgtprgtrog4LaF4La44Lat4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2NvbnRhY3RfdXNpbmciIG1zZ2lkPSI0OTQ3NDA1MjI2Nzg4MTA0NTM4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+IOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3ilxu4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64Laa4LeKIOC2seC3kuC2u+C3iuC2uOC3j+C2q+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9jcmVkZW50aWFsc19wZXJtaXNzaW9uX21lc3NhZ2VfaGVhZGVyIiBtc2dpZD0iMjEwNjEwMzgxNzkzNzg1OTY2MiI+IuC2tOC3hOC2rSDgtq/gt5Dgtprgt4rgt4Dgt5ngtrEg4LaR4Laa4Laa4LeKIOC3hOC3nSDgtorgtqcg4LeA4LeQ4Lap4LeSIOC2uuC3meC2r+C3lOC2uOC3iiDgtpzgtqvgtrHgtprgt4og4LaU4La24Lac4LeaIOC2nOC3kuC2q+C3lOC2uOC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanLCDgtq/gt5DgtrHgt4og4LeD4LeEIOC2ieC2r+C3kuC2u+C3kuC2uuC3muC2r+C3kyDgtoXgt4Dgt4Pgtrsg4LaJ4La94LeK4La94La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9mb290ZXIiIG1zZ2lkPSIzMTI1MjExMzQzMzc5Mzc2NTYxIj4i4La44LeZ4La4IOC2ieC2veC3iuC2veC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeT4La44LanIOC2lOC2tuC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfcGVybWlzc2lvbnNfaGVhZGVyX3RleHQiIG1zZ2lkPSI2ODc0NDk3NDA4MjAxODI2NzA4Ij4i4La04LeK4oCN4La74LeA4Lea4LeB4La6IOC2ieC2veC3iuC2veC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93IiBtc2dpZD0iNzIyNTk0ODgxMTI5NjM4NjU1MSI+IuC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55IiBtc2dpZD0iMjA4MTg3OTg4NTc1NTQzNDUwNiI+IuC2tOC3iuKAjeC2u+C2reC3kuC2muC3iuC3guC3muC2tCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjQ4Njc1OTc5NTkyNjIzNzkwNyI+IuC2heC3gOC3g+C2uyDgtongtr3gt4rgtr3gt48g4LeD4LeS4Lan4LeTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWlzc2lvbl9yZXF1ZXN0X25vdGlmaWNhdGlvbl93aXRoX3N1YnRpdGxlIiBtc2dpZD0iODUzMDM5MzEzOTYzOTU2MDE4OSI+Ijx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lczwveGxpZmY6Zz4g4Lac4LeS4Lar4LeU4La4IOC3g+C2s+C3hOC3j1xu4LaF4LeA4LeD4La7IOC2ieC2veC3iuC2veC2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRfbWV0aG9kX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjgzNTU3MTc5OTQ0OTkyNjQ5Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjM2ODc5NjkxMzgzNzUwOTI0MjMiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI0MTQ4MTIwNzQyMDk2NDc0NjQxIj4i4La04LeK4oCN4La74LeA4Lea4LeB4LeK4oCN4La64Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4i4La24LeS4Lat4LeU4La04LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4La24LeS4Lat4LeU4La04LatIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4LaF4LeD4Lax4LeK4Lax4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44Laa4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC2uOC2n+C3kuC2seC3iiBWUE4g4LeD4Laa4LeK4oCN4La74LeT4La6IOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLgtqLgt4/gtr3gtrog4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0X2xvbmciIG1zZ2lkPSI2NDA3MzUxMDA2MjQ5MTc0NDczIj4iPHhsaWZmOmcgaWQ9IlNFU1NJT04iPiVzPC94bGlmZjpnPiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3lOC2q+C3ki4g4Lai4LeP4La94La6IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiLgt4Pgt5Dgtrjgt4Dgt5LgtqfgtrggVlBOIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5ngtrjgt5LgtrHgt4rigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGVkIiBtc2dpZD0iODIwMjY3OTY3NDgxOTIxMzkzMSI+IuC2seC3kuC2u+C2reC3lOC2u+C3lOC3gOC2uCBWUE4g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fZXJyb3IiIG1zZ2lkPSI2MDA5MjQ5ODE0MDM0NzA4MTc1Ij4i4LeD4LeQ4La44LeA4LeS4LanIOC3g+C2muC3iuKAjeC2u+C3kuC2uiBWUE4g4Lav4Led4LeC4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2NvbmZpZyIgbXNnaWQ9IjY0MTU4OTkxNTA2NzE1Mzc5NzAiPiLgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1cGxvYWRfZmlsZSIgbXNnaWQ9IjI4OTc5NTcxNzIzNjY3MzA0MTYiPiLgtpzgt5zgtrHgt5Tgt4Ag4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fZmlsZV9jaG9zZW4iIG1zZ2lkPSI2MzYzNjQ4NTYyMTcwNzU5NDY1Ij4i4Lac4Lec4Lax4LeU4LeA4Laa4LeKIOC2reC3neC2u+C3j+C2nOC3meC2sSDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXNldCIgbXNnaWQ9IjI0NDgxNjgwODA5NjQyMDk5MDgiPiLgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3VibWl0IiBtc2dpZD0iMTYwMjMzNTU3MjA4OTkxMTk0MSI+IuC2uuC3nOC2uOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXJfbW9kZV9kaXNhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNjQ3NjgyMTIwMDM4NjQzMTYiPiLgtrjgt53gtqfgtrvgt4og4La74LauIOC2huC2muC3j+C2u+C2uiDgt4Pgtrbgtr0g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4MDM1MjMwNTM3NTYzNTAzMjYyIj4i4La44Led4Lan4La74LeKIOC2u+C2riDgtobgtprgt4/gtrvgtrrgt5ngtrHgt4og4La04LeS4Lan4LeA4LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE0NjY5NDIzNDM5ODIwMjYwMSI+IuC2p+C3meC2r+C2u+C3kuC2seC3iiDgt4Tgt50g4LeE4Lec4Lan4LeK4LeD4LeK4La04Lec4Lan4LeKIOC3g+C2muC3iuKAjeC2u+C3k+C2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNjg1NzAzMTc2MDEwMzA2Mjk4MiI+IuC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiLgtobgtrTgt4Pgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXh0X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEwODA1NTUxMDQ2Nzc5OTI0MDgiPiLgtrjgt5Pgtr3gtp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJza2lwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEyNzUzNjIyOTk0NzE2MzE4MTkiPiLgtrjgtp8g4LeE4La74LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0ODkwODk0MjY3NDU0ODY3Mjc2Ij4i4LaJ4LeE4LeFIOC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4La34LeP4LeA4LeS4Lat4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjMzNDA4MjIyMjg1OTkzMzc3NDMiPiLgtqLgtoLgtpzgtrgg4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2reC2uiDgtpzgt5DgtrEg4Lat4LeAIOC2r+C3kOC2seC2nOC3kOC2seC3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2MjY5NTQxODk3NzI5NzgxMzMyIj4i4Lai4LaC4Lac4La4IOC2r+C2reC3iuC2rSDgt4Pgt5Pgtrjgt4/gt4Ag4LaJ4Laa4LeK4La44LeA4LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjU0NDM0NTczMjEzNTQ5MDcxODEiPiLgtqLgtoLgtpzgtrgg4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2reC2uiDgtpzgt5DgtrEg4Lat4LeAIOC2r+C3kOC2seC2nOC3kOC2seC3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX21hdGNoZXMiIG1zZ2lkPSI4MTI5NDIxOTA4OTE1ODQwNzM3Ij4i4Lac4LeQ4La94La04LeT4La44LeKIOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfb25fcGFnZSIgbXNnaWQ9IjE5NDY3OTkyMzM4MjI4MjAzODQiPiLgtrTgt5Lgtqfgt5Tgt4Dgt5ngt4Tgt5Ig4LeD4LeZ4LeA4LeT4La4Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJtYXRjaGVzX2ZvdW5kIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODE2NzE0NzA4MTEzNjU3OTQzOSI+IuC2nOC3kOC3heC2tOC3k+C2uOC3iiAxIOC2uuC3kiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDY0MTg3Mjc5NzA2NzYwOTE3NyI+Ijx4bGlmZjpnIGlkPSJUT1RBTCI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiA8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tb2RlX2RvbmUiIG1zZ2lkPSI3MjE3NTgxNjQwNDYxOTIyMjg5Ij4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgtpzgt5Dgtr3gt4Dgt5PgtrguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMyNzg5NDk5ODQwOTUzNzE5MCI+IlNEIOC2tOC2rSDgtpzgtr3gt4Dgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2uOC2muC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4iU0Qg4La04LatIOC2uOC2muC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgtrjgt5Dgtprgt5Lgtrog4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMTUyNDg2OTY2NDQ1MTA5MzUiPiJTRCDgtrTgtq0g4La44LeQ4Laa4LeT4La44LanIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4i4Lac4LeQ4La94LeA4LeT4La44LanIOC2tOC3meC2uyBTRCDgtrTgtq0g4LaJ4LeA4Lat4LeK4Laa4La7IOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2uOC3miDgt4DgtrHgt4Dgt5Lgtqcg4La04La74LeT4Laa4LeK4LeC4LePIOC2muC2u+C2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzM0NzYyNTAzOTA0ODI3NDgxIj4iU0Qg4La04LatIOC2r+C3kOC2seC3iiDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4La74La44LeS4Lax4LeKIOC2tOC3gOC2reC3ky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yZW1vdmVkIiBtc2dpZD0iNzAwMTUyNjkwNTA1Nzk1MjA5NyI+IlNEIOC2tOC2rSDgtongt4Dgtq3gt4og4Laa4La7IOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNTgzMDgxNDM0OTI1MDgzNDIyNSI+IuC2tOC2u+C3kuC2nOC2q+C2muC2uuC2muC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4Lav4LeQ4Lax4LeKIFVTQiDgtobgtqDgtrrgtrHgtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzA2MTMwNTY4MTMzNTQwNDM1Ij4iU0Qg4La04LatIOC2r+C3kOC2seC2pyDgtrTgtrvgt5Lgtpzgtqvgtprgtrrgtprgt5LgtrHgt4og4La04LeP4LeA4LeS4Lag4LeK4Lag4LeSIOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV91bmtub3duX3N0YXRlIiBtc2dpZD0iNzI5MTkyNzgyMTk3MjkwMzg1Ij4i4La24LeP4LeE4LeS4La7IOC2uOC3j+C2sOC3iuKAjeC2uuC2uiDgtrHgt5zgtq/gtrHgt4rgtrHgt48g4LaF4LeA4LeD4LeK4Lau4LeP4LeA4LeaIOC2tOC3gOC2reC3kuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZSIgbXNnaWQ9IjE3Nzg2ODY2MTgyMzAwMTE5NjQiPiLgtrbgt5ngtq/gt4/gtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kIiBtc2dpZD0iNDgwODI3MDkwMDMyMjk4NTk2MCI+IuC3g+C3nOC2uuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlYnNlYXJjaCIgbXNnaWQ9IjQzMzcxNTc5Nzc0MDAyMTE1ODkiPiLgt4Dgt5ngtrbgt4og4LeD4LeZ4LeA4LeU4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZF9uZXh0IiBtc2dpZD0iNTc0MjEyNDYxODk0MjE5Mzk3OCI+IuC2uOC3k+C3heC2nyDgt4Pgt5zgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX3ByZXZpb3VzIiBtc2dpZD0iMjE5NjcyMzY2OTM4ODM2MDUwNiI+IuC2tOC3meC2uyDgtpHgtpog4LeD4Lec4La64Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaWNrZXIiIG1zZ2lkPSI1NjIyNjgzOTEyNjE2NDk2MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiDgtpzgt5ngtrHgt4og4LeD4LeK4Lau4LeP4Lax4La6IOC2ieC2veC3iuC2veC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGl0bGUiIG1zZ2lkPSI1NDQ2ODU4NzE3MTU3NDE2ODM5Ij4i4LeD4LeK4Lau4LeP4LaxIOC2ieC2veC3iuC2veC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmTWVzc2FnZSIgbXNnaWQ9IjEzNzQ3MTgwMjMyMjQwMDA3MDIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4gKDx4bGlmZjpnIGlkPSJTRVJWSUNFIj4lMiRzPC94bGlmZjpnPikg4LeA4LeS4LeD4LeS4Lax4LeKIOC2ieC2veC3iuC2veC2sSDgtr3gtq8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNWZXJpZlllcyIgbXNnaWQ9IjIzNDY1NjYwNzI4NjcyMTM1NjMiPiLgtpTgt4Dgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNWZXJpZk5vIiBtc2dpZD0iMTE0NjU2NDkzNzM0NjQ1NDg2NSI+IuC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlcyIgbXNnaWQ9IjUyOTYzMjE4NTA2NjI3NDY4OTAiPiLgtrjgt5Dgtprgt5Pgtrjgt5og4LeD4LeT4La44LeP4LeAIOC2ieC2muC3iuC2uOC3gOC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+Ijx4bGlmZjpnIGlkPSJUWVBFX09GX1NZTkMiPiUyJHM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyA8eGxpZmY6ZyBpZD0iQUNDT1VOVF9OQU1FIj4lMyRzPC94bGlmZjpnPiDgtpzgt5Lgtqvgt5Tgtrjgt5og4La44Laa4LaxIOC2veC2ryDgtoXgtrrgt5Lgtq3gtrggPHhsaWZmOmcgaWQ9Ik5VTUJFUl9PRl9ERUxFVEVEX0lURU1TIj4lMSRkPC94bGlmZjpnPiDgtprgt4og4LaH4LatLiDgtpTgtrbgtqcg4Laa4LeU4La44Laa4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19yZWFsbHlfZGVsZXRlIiBtc2dpZD0iMjU3MjYwMDEwMzEyMjU5NjI0MyI+IuC2heC2uuC3kuC2reC2uCDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3VuZG9fZGVsZXRlcyIgbXNnaWQ9IjI5NDEzMTczNjA2MDAzMzg2MDIiPiLgtrjgt5Dgtprgt5Pgtrjgt4og4LaF4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfZG9fbm90aGluZyIgbXNnaWQ9IjM3NDM3NjQ3NDA0MzA4MjE4NDUiPiLgtq/gt5DgtrHgtqcg4Laa4LeS4LeD4LeS4LeA4Laa4LeKIOC2seC3nOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9hY2NvdW50X2xhYmVsIiBtc2dpZD0iNTY1NTIwMzA4OTc0NjQyMzkyNyI+IuC2nOC3kuC2q+C3lOC2uOC2muC3iiDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfYWNjb3VudF9sYWJlbCIgbXNnaWQ9IjI5MzUyNjczNDQ4NDk5OTM1NTMiPiLgtpzgt5Lgtqvgt5Tgtrjgtprgt4og4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjM2MTE5ODI4OTQ4NTM0MzU4NzQiPiLgtpzgt5Lgtqvgt5Tgtrjgtprgt4og4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjI0MTIwNzIyNzI4MzIyODQzMTMiPiLgt4Dgt5Dgtqngt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9kZWNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iNDc2MDUwNzc4Mzg2Nzc5MDY3Ij4i4LaF4Lap4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9tb2RlIiBtc2dpZD0iMzA3MzEwMTA2NzQ0MTYzODQyOCI+Ijx4bGlmZjpnIGlkPSJWQUxVRSI+JXM8L3hsaWZmOmc+IOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrsg4La74Laz4LeA4LePIOC3g+C3kuC2p+C3kuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfYWN0aW9uIiBtc2dpZD0iOTEwMTQ3MzA0NTg5MTgzNTQ5MCI+IuC3gOC3kOC2qeC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LeE4La94LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEg4LeD4LeEIOC2heC2qeC3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeE4La94LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X21pbnV0ZV9idXR0b24iIG1zZ2lkPSI4ODY1ODg1MTE0MDI4NjE0MzIxIj4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeU4LeA4Laa4LeKIOC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9IjYyNDY4MzQ5MzcwODA2ODQ3OTEiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5Tgt4Ag4LaF4Lap4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjM2NTIwNTYwNTU4MTAyMjMxMzkiPiLgtrTgt5Dgtrog4LeA4LeQ4Lap4LeS4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X2hvdXJfYnV0dG9uIiBtc2dpZD0iMTM3NzQ3OTg2MzQyOTIxNDc5MiI+IuC2tOC3kOC2uiDgtoXgtqngt5TgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfc2V0X3BtX2J1dHRvbiIgbXNnaWQ9IjQxNDc1OTA2OTYxNTEyMzA4NjMiPiLgtrQu4LeALuC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uIiBtc2dpZD0iODMwMjE0MDM1MzUzOTQ4Njc1MiI+IuC2tOC3mS7gt4AuIOC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+IuC2uOC3j+C3g+C2uiDgt4Dgt5Dgtqngt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X21vbnRoX2J1dHRvbiIgbXNnaWQ9IjE4MzI2OTg5OTU1NDE3MjYwMTkiPiLgtrjgt4/gt4Pgtrrgtprgt4og4LaF4Lap4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNzEzMDQ2NTQxMjMwODE3MzkwMyI+IuC2r+C3gOC3gyDgt4Dgt5Dgtqngt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI0MTMxODgxNTIxODE4NzUwMDMxIj4i4Lav4LeA4LeDIOC2heC2qeC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI2MzE4Njk3Mzg0MzEwODA4ODk5Ij4i4LeA4LeD4La7IOC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI0NDgyMDIxODEzNDkxMTIxNzE3Ij4i4LeA4LeD4La7IOC2heC2qeC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuC2heC3gOC2veC2guC2nOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLgtobgtprgt4/gtrvgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IuC2uuC3meC2r+C3lOC2uOC2muC3iiDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLgt4Pgtrjgtp8g4La24LeZ4Lav4LeP4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4g4LeD4La44Laf4LeS4Lax4LeKIOC2tuC3meC2r+C3jyDgtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i4LeD4La74LeK4La04LarIOC3hOC3kOC2qeC2veC2ui4g4LeD4LeK4La04La74LeK4LeBIOC2muC2uyDgtrvgtrPgt4Dgt48g4LeD4LeS4Lan4LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC2i+C2qeC2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4La04LeE4La94LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgt4Dgtrjgtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgtq/gtprgt5Tgtqvgtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuC2heC2n+C3lOC2vSDgtoXgtrvgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4Laa4LeQ4La44La74LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuC2seC3kuC3hOC2rCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLgt4Hgtrbgt4rgtq8g4LeD4Laa4LeK4oCN4La74LeT4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4LeD4LeZ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgt4Pgt4rgt4Dgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLgtrjgt5TgtrvgtrTgtq8g4La64Lat4LeU4La74LeUIOC2muC3kuC2uuC3gOC2seC3lCDgtofgt4Pgt5Pgtrjgtqcg4LaJ4LeD4LeKIOC2tuC2q+C3lOC3gOC2muC3iiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IuC2seC3kOC3gOC2reC3lOC2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MjkzNjAwNDk2NjAxNDkwMjE2Ij4i4La44LeU4La94LeKIOC2tOC3kuC2p+C3lOC3gOC2pyDgt4PgtoLgtqDgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl91cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyMzc0OTY1NjI5NTIxNTI1ODkiPiLgtongt4Tgtr3gtqcg4LeD4LaC4Lag4LeP4La94Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tZW51X292ZXJmbG93X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjI5NTY1OTAzNzUwOTAwODQ1MyI+IuC2reC3gOC2reC3iiDgt4Dgt5Lgtprgtr3gt4rgtrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNzk2NTk4NDM2MDkwMzY5MzkwMyI+IiUxJHMsICUyJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfc3VidGl0bGVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNjk4NTU0NjUzMDQ3MTc4MDcyNyI+IiUxJHMsICUyJHMsICUzJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX2ludGVybmFsIiBtc2dpZD0iNDg5MTkxNjgzMzY1NzkyOTI2MyI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4iU0Qg4La04LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2IiIG1zZ2lkPSIzMDE3OTU0MDU5NTM4NTE3Mjc4Ij4iVVNCIOC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dHJhY3RfZWRpdF9tZW51X2J1dHRvbiIgbXNnaWQ9Ijg5NDA0Nzg3MzA0OTY2MTAxMzciPiLgt4PgtoLgt4Pgt4rgtprgtrvgtqvgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTk1NTYzODg2MjEyMjIzMjM0MiI+IuC2r+C2reC3iuC2rSDgtrfgt4/gt4Dgt5Lgtq3gt48g4LaF4LeA4LeA4LeP4Lav4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX2JvZHkiIG1zZ2lkPSIyODE0NjczNTUxNDcxOTY5OTU0Ij4i4La34LeP4LeA4LeS4Lat4La6IOC3g+C3hCDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4La24LeQ4La94LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF90aXRsZSIgbXNnaWQ9IjcwOTMzMzQ0MTk1MTg3MDY2ODYiPiIyRy0zRyDgtq/gtq3gt4rgtq0g4LaF4La24La94La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF90aXRsZSIgbXNnaWQ9Ijc2MzY0ODk0MzY4MTk0NzA3NjEiPiI0RyDgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF90aXRsZSIgbXNnaWQ9Ijc4Njk0MDI1MTkzOTE2MzE4ODQiPiLgtqLgtoLgtpzgtrgg4Lav4Lat4LeK4LatIOC2heC2tuC2vSDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3RpdGxlIiBtc2dpZD0iODk5MjE1NDczNjQ0MTI4NDg2NSI+IldpLUZpIOC2r+C2reC3iuC2rSDgtoXgtrbgtr0g4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfYm9keSIgbXNnaWQ9IjMzMTc5NjQ3MDY5NzM2MDEzODYiPiLgt4Pgtrbgtr0g4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iNzAyNjczOTEyMTEzODAwNTIzMSI+IjJHLTNHIOC2r+C2reC3iuC2rSDgt4Pgt5Pgtrjgt4/gt4Ag4LaJ4Laa4LeK4La44LeA4LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiI0RyDgtq/gtq3gt4rgtq0g4LeD4LeT4La44LeP4LeAIOC2ieC2muC3iuC2uOC3gOC3jyDgtrrgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjI3OTI0MDU3MjE2NTQxMjE2OCI+IuC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4LeD4LeT4La44LeP4LeAIOC2ieC2muC3iuC2uOC3gOC3jyDgtrrgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI4NzQzODU2MDA2Mzg0ODI1OTc0Ij4iV2ktRmkg4Lav4Lat4LeK4LatIOC3g+C3k+C2uOC3j+C3gCDgtongtprgt4rgtrjgt4Dgt48g4La64LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfc25vb3plZF9ib2R5IiBtc2dpZD0iNzAzNTQ5MDI3ODI5ODQ0MTc2NyI+IuC3g+C2s+C3hOC2seC3iiDgtprgt4Ug4LeD4LeT4La44LeP4LeA4LanIOC3gOC2qeC3jyA8eGxpZmY6ZyBpZD0iU0laRSI+JXM8L3hsaWZmOmc+IOC3gOC3kOC2qeC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4i4La04LeD4LeU4La24LeS4La44LeKIOC2r+C2reC3iuC2rSDgt4Pgt5Lgtrjgt48g4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+IuC3g+C3k+C2uOC3jyDgtprgt5Lgtrvgt5Pgtrgg4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlIiBtc2dpZD0iNjUxMDA0MDQ4NjA0OTIzNzYzOSI+IuC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgt4Pgt4Tgtq3gt5LgtprgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGVfaXNfdmFsaWQiIG1zZ2lkPSI2ODI1MjYzMjUwNzc0NTY5MzczIj4i4La44LeZ4La4IOC3g+C3hOC2reC3kuC2muC2uiDgt4Dgtr3gtoLgtpzgt5Tgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX3RvIiBtc2dpZD0iNDU0MjM5NDgwMjc0OTIxMDMyIj4i4La94La24LeP4Lav4LeU4Lax4LeK4Lax4LeaOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbW1vbl9uYW1lIiBtc2dpZD0iMjIzMzIwOTI5OTQzNDE3MjY0NiI+IuC2tOC3nOC2r+C3lCDgtrHgt4/gtrjgtro6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnX25hbWUiIG1zZ2lkPSI2OTczNTYxMTkwNzYyMDg1MjM2Ij4i4LeD4LaC4LeA4LeS4Law4LeP4Lax4La6OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ191bml0IiBtc2dpZD0iNzI2NTk4MTg5MDQyMjA3MDM4MyI+IuC3g+C2guC3gOC3kuC2sOC3j+C2seC3j+C2reC3iuC2uOC2miDgtpLgtprgtprgtro6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX2J5IiBtc2dpZD0iMjY0NzU4NDk4ODA1NzQ4MTU2NiI+IuC2veC2tuC3j+C2r+C3meC2sSDgtr3gtq/gt4rgtq/gt5o6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idmFsaWRpdHlfcGVyaW9kIiBtc2dpZD0iODgxODg4NjEzNzU0NTk4MzExMCI+IuC3gOC2veC2guC2nOC3lOC2reC3j+C3gOC2ujoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfb24iIG1zZ2lkPSI1ODk1MDE3NDA0MzYxMzk3MjMyIj4i4Lax4LeS4Laa4LeU4Lat4LeKIOC2muC2u+C2sSDgtr3gtq/gt4rgtq/gt5o6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXhwaXJlc19vbiIgbXNnaWQ9IjM2NzYyNDI5NDk5MTU5NTk4MjEiPiLgtprgtr3gt4og4LaJ4Laa4LeU4Lat4LeKIOC3gOC2seC3iuC2seC3mjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4i4LaF4Lax4LeU4Laa4LeK4oCN4La74La44LeP4LaC4Laa4La6OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50cyIgbXNnaWQ9IjQ1MTYwMTk2MTk4NTA3NjMwNDkiPiLgtofgtp/gt5Lgtr3gt5Ig4LeD4La94Laa4LeU4Lar4LeUOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiJTSEEtMjU2IOC2h+C2n+C3kuC2veC3kuC3g+C2veC2muC3lOC2qzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IlNIQS0xIOC2h+C2n+C3kuC2veC3kiDgt4Pgtr3gtprgt5Tgtqs6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X3NlZV9hbGwiIG1zZ2lkPSI0MjkyNTY5MzgzOTc2NjM2MjAwIj4i4LeD4LeS4La64La94LeK4La9IOC2tuC2veC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjQ3MTAwMTM4NjQ5NzQwNDA2MTUiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrgg4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfYWN0aW9uX3Byb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI1MjQ3Njg0NDM1OTc5MTQ5MjE2Ij4i4LeD4La44LafIOC2tuC3meC2r+C3j+C2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfZGV2aWNlX2xvY2tlZCIgbXNnaWQ9IjMwOTI3MDM0NDg2OTA2Njk3NjgiPiLgtovgtrTgt4/gtoLgtpzgtrrgtqcg4LaF4Lac4LeU4LeF4LeUIOC3gOC3kOC2p+C3kiDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGlzdF9kZWxpbWV0ZXIiIG1zZ2lkPSIzOTc1MTE3NTcyMTg1NDk0MTUyIj4iLCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZW5kaW5nIiBtc2dpZD0iMzI0NTY1MzY4MTAwODIxODAzMCI+IuC2uuC3gOC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaEJyb3dzZXJEZWZhdWx0IiBtc2dpZD0iMjA1Nzk1MTk0NzI5NzYxNDcyNSI+IuC2tuC3iuKAjeC2u+C3gOC3lOC3g+C2u+C2uiDgtq/gt5Lgtrrgtq3gt4og4Laa4La74Lax4LeK4Lax4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlNldHVwQ2FsbERlZmF1bHQiIG1zZ2lkPSI1ODM0OTQ4NDY5MjUzNzU4NTc1Ij4i4LaH4La44Lat4LeU4La4IOC2tOC3kuC3heC3kuC2nOC2seC3iuC2seC3gOC3j+C2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2VfYWx3YXlzIiBtc2dpZD0iODAxNzc3MDc0NzgwMTQ5NDkzMyI+IuC3g+C3kOC2uCDgt4Dgt5LgtqfgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2Vfb25jZSIgbXNnaWQ9IjI0MDQ2NDQ3OTcxNDkxNzM3NTgiPiLgtpHgtprgt4og4LeA4LeP4La74La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjE3MDUzODk4MTY3MTI3NDcxIj4i4Lan4LeQ4La24LeK4La94Lan4LeK4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDIzOTI5MTI3MzQyMDE0MDEyMyI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9oZWFkcGhvbmVzIiBtc2dpZD0iODExOTk3MTg0MzgwMzQzOTExMCI+IuC2ieC3g+C3iiDgtrbgtqvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWVfZG9ja19zcGVha2VycyIgbXNnaWQ9IjYyNDA2MDI5ODIyNzY1OTE4NjQiPiLgtrHgt4/gtq/gtpog4Lap4Lec4Laa4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i4La04Lav4LeK4Law4Lat4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeB4LeK4oCN4La74LeA4LeK4oCN4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLgtrvgt5Dgt4Tgt5DgtrHgt4og4La74LeE4LeS4LatIOC2r+C2u+C3iuC3geC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLgtrjgt4/gtrDgt4rigI3gtrog4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IuC2tOC2u+C3kuC2veC3neC2muC2seC2uiDgtprgtrvgtrjgt5LgtrHgt4rigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeZ4La44LeS4Lax4LeK4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLgtr3gtrbgt4/gtpzgtq0g4LeE4LeQ4LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI2NzM5ODk5OTYyNjgxODg2NDAxIj4i4La94La24LeP4Lac4LatIOC2seC3nOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19pbl91c2UiIG1zZ2lkPSI0NTMzNzg2MDMxMDkwMTk4MDYzIj4i4La34LeP4LeA4LeS4Lat4La64LeaIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9idWlsdF9pbl9kaXNwbGF5X25hbWUiIG1zZ2lkPSIyNTgzMTM0Mjk0MjkyNTYzOTQxIj4i4Lat4LeS4LeF4LeQ4La94LeSIOC2reC3kuC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9oZG1pX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjE1NTUyNjQ1NTkyMjc0NzAxMDkiPiJIRE1JIOC2reC3kuC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLgtovgtqngt5Dgtq3gt5Lgtrvgt5LgtrogIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuC2seC3nOC2u+C3kOC3hOC3kOC2seC3iiDgt4PgtoLgtq/gtrvgt4rgt4Hgtprgtrog4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IuC3gOC3meC2seC2reC3iiDgtovgtrTgt4/gtoLgtpzgtrrgtprgt4og4La44LatIOC2uOC3meC2uCDgtq3gt5Lgtrvgtrog4La04LeZ4Lax4LeK4LeA4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IuC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuC3hOC2r+C3kuC3g+C3kiDgtofgtrjgtq3gt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLgtrvgtqfgt4/gt4Ag4LaF4La44Lat4Laa4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLgt4Dgt5Dgtrvgtq/gt5Ig4La74Lan4LeP4LeA4Laa4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i4LeA4LeQ4La74Lav4LeSIOC2uOC3lOC2u+C2tOC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJQSU4g4LaR4LaaIOC3gOC3kOC2u+C2r+C3kuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJGQ8L3hsaWZmOmc+IOC2pyDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLgtpTgtrbgtpzgt5og4La74Lan4LeP4LeAIOC2heC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4g4LaH4Lat4LeU4La94LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUElOIOC2keC2miDgtofgtq3gt5Tgt4Xgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IuC2uOC3lOC2u+C2tOC2r+C2uiDgtofgtq3gt5Tgt4Xgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i4Lav4LeQ4Lax4LeKIFNJTSDgtpHgtpog4LaF4La24La9IOC2muC2uyDgtofgtq0uIOC2ieC2r+C3kuC2u+C3kuC2uuC2pyDgtrrgt4/gtrjgtqcgUFVLIOC2muC3muC2reC2uiDgtrrgt5zgtq/gtrHgt4rgtrEuIOC3gOC3kuC3g+C3iuC2reC2uyDgt4PgtrPgt4Tgt48g4LeA4LeP4LeE4Laa4La64LePIOC2heC2uOC2reC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i4LaF4La04Lea4Laa4LeK4LeC4LeS4LatIFBJTiDgtprgt5rgtq3gtrog4LaH4Lat4LeU4LeF4Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLgtoXgtrTgt5rgtprgt4rgt4Lgt5Lgtq0gUElOIOC2muC3muC2reC2uiDgt4Pgt4rgtq7gt5Lgtrsg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTSU0g4La04LatIOC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5Lgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiLgt4Dgt5Dgtrvgtq/gt5IgUElOIOC2muC3muC2reC2uuC2muC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLgtoXgtoLgtpogNCDgt4Pgt5LgtqcgOCDgtoXgtq3gtrsg4LeA4LaxIFBJTiDgtpHgtprgtprgt4og4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsg4Laa4Lea4Lat4La6IOC3g+C2guC2m+C3iuKAjeC2uuC3jyA4IOC2muC3iiDgt4Tgt50g4LeA4LeQ4Lap4LeSIOC3gOC3kuC2uiDgtrrgt5Tgtq3gt5TgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4Lax4LeS4LeA4LeQ4La74Lav4LeSIFBVSyDgtprgt5rgtq3gtrog4Lax4LeQ4LeA4LatIOC2h+C2reC3lOC2veC2reC3iiDgtprgtrvgtrHgt4rgtrEuIOC2seC3kOC3gOC2rSDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC3kuC2u+C3k+C2uOC3meC2seC3iiBTSU0g4LaR4LaaIOC3g+C3iuC2ruC3kuC2u+C3gOC2uCDgtoXgtrbgtr0g4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4g4Laa4Lea4LatIOC2nOC3kOC2veC2tOC3kyDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLgtrvgtqfgt48g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC3kuC2u+C3k+C2uOC3iiDgt4Dgt5Dgtqngt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pywg4LaU4La24Lac4LeaIEdvb2dsZSDgtpzgt5Lgtqvgt5Tgtrgg4LeD4La44LacIOC2tOC3lOC2u+C2seC2uiDgt4DgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La6ICjgtoot4Lat4LeQ4La04LeR4La9KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i4La44LeU4La74La04Lav4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLgtrTgt5TgtrvgtrHgtrog4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLgt4Dgtr3gtoLgtpzgt5Qg4Lax4Lec4LeA4LaxIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtrHgt4/gtrjgtrrgtprgt4og4LeE4LedIOC2uOC3lOC2u+C2tOC2r+C2uuC2muC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4LaU4La24Lac4LeaIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtrHgt4/gtrjgtrog4LeE4LedIOC2uOC3lOC2u+C2tOC2r+C2uiDgtoXgtrjgtq3gtprgtq8/XG4gIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iIOC3gOC3meC2rSDgtrrgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i4Lac4LeS4Lar4LeU4La4IOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgtrvgtrjgt5LgtrHgt4rigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuC2lOC2tiBQSU4g4LaF4LaC4Laa4La6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC3nOC2pyDgtofgtq0uXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2h+C2reC3lOC3heC2rSDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4Lat4LeP4LeA4Laa4LeKIOC2lOC2tuC2nOC3miDgtrjgt5TgtrvgtrTgtq/gtrog4LaU4La2IOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4og4Laa4La7IOC2h+C2rS4gXG5cbuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtqcg4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgtpTgtrYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgt5og4La74Lan4LeP4LeAIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtofgtrMg4LaH4LatLiBcblxu4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtofgtq3gt5Tgt4Xgtq0g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i4LaU4La2IOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtoXgt4Dgt4Pgt4rgtq7gt48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgtoXgt4Dgt4Pgt4rgtq7gt48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2heC3g+C3j+C2u+C3iuC2ruC2muC3gCDgtovgtq3gt4rgt4Pgt4Qg4Laa4LeS4La74LeT4La44Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4Laa4La74LeK4La44LeP4Lax4LeK4LatIOC3geC3j+C2veC3jyDgtrjgt5Tgtr3gt4og4Lat4Lat4LeK4LeA4La64LanIOC2seC3kOC3gOC2rSDgtrTgtq3gt4og4LeA4LaxIOC2heC2reC2uyDgt4Pgt5Lgtrrgtr3gt5Qg4La04La74LeS4LeB4LeT4La94LaaIOC2r+C2reC3iuC2rSDgtrHgt5Dgtq3gt5Ig4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiLgtpTgtrYg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LeA4LeP4La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC2muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Mg4La04LeK4oCN4La74La64Lat4LeK4Lax4La64Lax4LeKIOC2nOC3meC2sSDgtq3gt5Lgtrbgt5ouIOC2reC3gOC2reC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4La04LeK4oCN4La74La64Lat4LeK4LaxIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LeP4LeA4LeaIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C2pyDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LaxIOC2heC2reC2uyDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4La04La74LeS4LeB4LeT4La94LaaIOC2r+C2reC3iuC2rSDgtrHgt5Dgtq3gt5Ig4LeA4LeTIOC2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2lOC2tiDgt4Dgt5Dgtrvgtq/gt5Ig4La04LeK4oCN4La74La64Lat4LeK4LaxIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4Lac4LeZ4LaxIOC2h+C2rS4g4Lav4LeQ4Lax4LeKIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2ryDgt4Dgt5ngtq0g4La64LeF4LeSIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgtprgt5ngtrvgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4i4LaU4La2IOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC3gOC3j+C2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Laa4Lav4LeTIOC3gOC3kOC2u+C2r+C3kyDgtrTgt4rigI3gtrvgtrrgtrHgt4rgtq3gtrrgtrHgt4og4Lac4LeZ4LaxIOC2reC3kuC2tuC3mi4g4Lav4LeQ4Lax4LeKIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq3gt4Hgt4/gtr3gt48g4LeD4LeU4La04LeU4La74LeU4Lav4LeK4Lav4LanIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC2seC3lCDgtr3gtrbgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuC2lOC2tiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeS4La44LeaIOC2u+C2p+C3j+C3gCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LeA4LeQ4La74Lav4LeS4La64LanIOC2h+C2syDgtofgtq0uIOC2reC3gOC2reC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeP4LeEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4og4Lac4LeS4Lar4LeU4La4IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgtrvgtrjgt5LgtrHgt4og4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2lOC2tuC2pyDgtrTgt4Dgt4PgtrHgt5Qg4LaH4LatLlxuXG4g4Lax4LeQ4LeA4LatIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuC2lOC2tiDgt4Dgt5Dgtrvgtq/gt5LgtrrgtqcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4Lat4LeP4LeA4Laa4LeKIOC2lOC2tuC2nOC3miDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LeaIOC2u+C2p+C3j+C3gCDgtofgtrMg4LaH4LatLiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeEIOC2muC3kuC2u+C3k+C2uOC3iiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtrHgt4og4La04LeD4LeU4LeALCDgtpTgtrbgtpzgt5og4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtr3gt5LgtrTgt5LgtrHgtrog4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyDgtpTgtrbgtpzgt5ngtrHgt4og4LaF4LeD4La64LeSLlxuXG4g4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC2seC3iiDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i4LaJ4LeA4Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhZmVfbWVkaWFfdm9sdW1lX3dhcm5pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzI0MTYxOTM5NDc1NDc4MDY2Ij4i4Lax4LeS4La74LeK4Lav4Lea4LeB4LeS4LatIOC2uOC2p+C3iuC2p+C2uOC3meC2seC3iiDgtongt4Tgt4Xgtqcg4LeB4La24LeK4Lav4La6IOC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4Dgtq8/XG7gt4Dgt5Dgtqngt5Ig4Laa4LeP4La94La64Laa4LeKIOC2ieC3hOC3hSDgt4Hgtrbgt4rgtq/gtrrgtprgt4og4LeB4LeK4oCN4La74LeA4Lax4La6IOC2muC3kuC2u+C3k+C2uOC3meC2seC3iiDgtpTgtrbgtpzgt5og4LeB4LeK4oCN4La74LeA4Lax4La64LanIOC3hOC3j+C2seC3kiDgt4Dgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRpbnVlX3RvX2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTYyNjQyNzM3MjMxNjA3MDI1OCI+IuC2tOC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3j+C3gOC2uiDgt4Pgtrbgtr0g4Laa4LeS4La74LeT4La44LanIOC2h+C2n+C3kuC2veC3kiDgtq/gt5ngtprgtprgt4og4La04LeE4LeF4LanIOC2u+C2s+C3gOC3jyDgt4Pgt5Lgtqfgt5LgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9lbmFibGVkIiBtc2dpZD0iMTM4MTk3MjA0ODU2NDU0NzY4NSI+IuC2tOKAjeC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3j+C3gCDgt4Pgtrbgtr0g4Laa4La74LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYWNjZXNzaWJpbGl0eV9jYW5jZWxlZCIgbXNnaWQ9IjM4MzM5MjMyNTc5NjY2MzU2NzMiPiLgtrTigI3gt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Ag4LaF4LeA4La94LaC4Lac4LeUIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiLgtq/gt5DgtrHgtqcg4LeD4LeS4Lan4LeS4LaxIOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC3jyA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiLgt4Tgt5Lgtrjgt5Lgtprgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IuC2r+C3neC3guC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub19yZXN0cmljdGVkX2FjY291bnRzIiBtc2dpZD0iNTczOTQ2MzI0OTY3MzcyNzczNiI+IuC3g+C3k+C2uOC3jyDgt4Pgt4Tgt5Lgtq0g4La04LeQ4Lat4LeS4Laa4LapIOC3g+C2s+C3hOC3jyDgt4DgtrEg4Lac4LeS4Lar4LeU4La44LeKIOC3gOC3meC2rSDgtrjgt5ngtrgg4La64LeZ4Lav4LeU4La4IOC3g+C3hOC2uiDgtrHgt5zgtq/gtprgt4rgt4Dgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm90X2ZvdW5kIiBtc2dpZD0iMzQyOTE0MTg1MzQ5ODkyNzM3OSI+IuC2uOC3meC2uCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Ag4LeE4LeD4LeU4La74LeU4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2muC3iiDgt4Pgt5zgtrrgt4/gtpzgtq3gt4rgtq3gt5og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IuC2heC3hOC3neC3g+C3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EwIiBtc2dpZD0iNzg3NTQyNzQ4OTQyMDgyMTc5MyI+IklTTyBBMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEiIG1zZ2lkPSIzNzYwNzM0NDk5MDUwODc1MzU2Ij4iSVNPIEExIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMiIgbXNnaWQ9IjU5NzMyNjYzNzgwMjAxNDQzODIiPiJJU08gQTIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EzIiBtc2dpZD0iMTM3MzQwNzEwNTY4NzMwMDg4NCI+IklTTyBBMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTQiIG1zZ2lkPSI2Njg5NzcyODA3OTgyNTk3MjU0Ij4iSVNPIEE0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNSIgbXNnaWQ9IjUzNTM1NDk2NTIwMTU3NDEwNDAiPiJJU08gQTUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E2IiBtc2dpZD0iODU4NTAzODA0ODY3NDkxMTkwNyI+IklTTyBBNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTciIG1zZ2lkPSI2NjQxODM2NzE2OTYzODM5MTE5Ij4iSVNPIEE3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOCIgbXNnaWQ9Ijc1NzExMzk0Mzc0NjU2OTMzNTUiPiJJU08gQTgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E5IiBtc2dpZD0iMTM3ODQ1NTg5MTk1NzExNTA3OSI+IklTTyBBOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEwIiBtc2dpZD0iMjQ4MDc0NzQ1NzQyOTQ3NTM0NCI+IklTTyBBMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IwIiBtc2dpZD0iMzk2NTkzNTA5NzY2MTEwODAzOSI+IklTTyBCMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEiIG1zZ2lkPSIyNTA1NzUzMjg1MDEwMTE1NDM3Ij4iSVNPIEIxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMiIgbXNnaWQ9Ijg3NjM4NzQ3MDk4NTk0NTg0NTMiPiJJU08gQjIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IzIiBtc2dpZD0iNDIxMDUwNjY4ODE5MTc2NDA3NiI+IklTTyBCMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjQiIG1zZ2lkPSI1NzQ5NDA0MTY1ODg4NTI2MDM0Ij4iSVNPIEI0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNSIgbXNnaWQ9Ijc2NDA2Mjc0MTQ2MjE5MDQ3MzMiPiJJU08gQjUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I2IiBtc2dpZD0iNzM0Mjk4ODg2NDcxMjc0ODU0NCI+IklTTyBCNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjciIG1zZ2lkPSI1MDY5ODQ0MDY1MjM1MzgyNDI5Ij4iSVNPIEI3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOCIgbXNnaWQ9IjczMTY4MTg5MjIyNzg3Nzk3NzQiPiJJU08gQjgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I5IiBtc2dpZD0iNTQxNDcyNzA5NDAyNjUzMjM0MSI+IklTTyBCOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEwIiBtc2dpZD0iNTI1MTI1MzczMTgzMjA0ODE4NSI+IklTTyBCMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MwIiBtc2dpZD0iNDAwMzEzODM0MjY3MTk2NDIxNyI+IklTTyBDMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEiIG1zZ2lkPSIxOTM1MTg4MDYzMzkzNTUzMDA4Ij4iSVNPIEMxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMiIgbXNnaWQ9IjMxOTczMDc5Njk3MTIwNjk5MDQiPiJJU08gQzIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MzIiBtc2dpZD0iNDMzNTgyNjA4NzMyMTkxMzUwOCI+IklTTyBDMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzQiIG1zZ2lkPSIzNzQ1NjM5NTk4MjgxMDE1MDA1Ij4iSVNPIEM0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNSIgbXNnaWQ9IjgyNjk0NTc3NjU4MjI3OTEwMTMiPiJJU08gQzUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M2IiBtc2dpZD0iNTY2NjY2MTA1MjYwMzQ2OTMwIj4iSVNPIEM2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNyIgbXNnaWQ9Ijg2Nzg0MTMxODA3ODI2MDg0OTgiPiJJU08gQzciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M4IiBtc2dpZD0iODM5MjM3NjIwNjYyNzA0MTczMCI+IklTTyBDOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzkiIG1zZ2lkPSI5MTkxNjEzMzcyMzI0ODQ1NDA1Ij4iSVNPIEM5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMTAiIG1zZ2lkPSI3MzI3NzA5Njk5MTg0OTIwODIyIj4iSVNPIEMxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZXR0ZXIiIG1zZ2lkPSI0MTkxODA1NjE1ODI5NDcyOTUzIj4i4LaF4Laa4LeU4La74LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2d2cm5tdF9sZXR0ZXIiIG1zZ2lkPSI3ODUzMzgyMTkyNjQ5NDA1NTA3Ij4i4La74Lai4La64LeaIOC2veC3kuC2tOC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWdhbCIgbXNnaWQ9IjY2OTc5ODI5ODgyODM4MjMxNTAiPiLgtrHgt5Pgtq3gt4rigI3gtrrgtrHgt5Tgtprgt5bgtr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfanVuaW9yX2xlZ2FsIiBtc2dpZD0iMzcyNzc0Mzk2OTkwMjc1ODk0OCI+IuC2tOC3iuKAjeC2u+C3j+C2ruC2uOC3kuC2miDgtrHgt5Pgtq3gt5LgtrjgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVkZ2VyIiBtc2dpZD0iMjgxODcxNDY0ODk2NjAxMjM2Ij4i4La94LeZ4Lai4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX3RhYmxvaWQiIG1zZ2lkPSI1Nzc1OTY2NDE2MzMzNTc4MTI3Ij4i4Laa4LeU4Lap4LePIOC2tOC3lOC3gOC2reC3iuC2tOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndyaXRlX2ZhaWxfcmVhc29uX2NhbmNlbGxlZCIgbXNnaWQ9IjcwOTEyNTgzNzgxMjE2Mjc2MjQiPiLgtoXgt4Dgtr3gtoLgtpzgt5Qg4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndyaXRlX2ZhaWxfcmVhc29uX2Nhbm5vdF93cml0ZSIgbXNnaWQ9IjgxMzI1MDU0MTc5MzUzMzc3MjQiPiLgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4La94LeS4LeA4LeT4La44Lea4Lav4LeTIOC2r+C3neC3guC2uuC2muC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9waW4iIG1zZ2lkPSIzMzk1OTUzNDIxMzY4NDc2MTAzIj4iUElOIOC2keC2miDgtofgtq3gt5Tgt4Xgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX29sZF9waW4iIG1zZ2lkPSIxNDYyMjA2MjI1NTEyOTEwNzU3Ij4i4LeA4Lat4LeK4La44Lax4LeKIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+IuC2seC3gCBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY29uZmlybV9waW4iIG1zZ2lkPSI4NTAxNTIzODI5NjMzMTQ2MjM5Ij4i4Lax4LeAIFBJTiDgtq3gt4Tgt4Dgt5Tgtrvgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4i4LeD4LeS4La44LePIOC3gOC3kOC2qeC3kuC2r+C3kuC2uuC3lOC2q+C3lCDgtprgt5Lgtrvgt5PgtrjgtqcgUElOIOC3g+C3j+C2r+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lcnJvcl9kb2VzbnRfbWF0Y2giIG1zZ2lkPSIyMjI0MjE0MTkwOTA2OTk0NTQ4Ij4iUElOIOC2seC3nOC2nOC3kOC3heC2tOC3meC2uuC3ki4g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX3Rvb19zaG9ydCIgbXNnaWQ9IjgxNzM5ODI3NTYyNjU3Nzc3OTIiPiJQSU4g4Laa4LeU4Lap4LePIOC3gOC3kOC2qeC3kuC2ui4g4LaJ4La94Laa4LeK4Laa4La44LeKIDQg4LeA4Lat4LeKIOC3gOC3kuC2uiDgtrrgt5Tgtq3gt5TgtrouIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJyZXN0cl9waW5fY291bnRkb3duIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDgzNTYzOTk2OTUwMzcyOTg3NCI+IuC3gOC3kOC2u+C2r+C3kiBQSU4uIOC2reC2reC3iuC2tOC2u+C2uuC2muC3kuC2seC3iiDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjgwMzA2MDczNDMyMjMyODc2NTQiPiLgt4Dgt5Dgtrvgtq/gt5IgUElOLiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InRyYW5zaWVudF9uYXZpZ2F0aW9uX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjQ5MDc4NDQwNDM2MTExMjM0MjYiPiLgtq3gt5Pgtrvgt5Tgt4Ag4LaF4Lax4LeP4LeA4La74Lar4La64LanIOC2reC3kuC2u+C2uuC3miDgtprgt5ngtr3gt4Dgtrsg4LaF4Lav4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHJhbnNpZW50X25hdmlnYXRpb25fY29uZmlybWF0aW9uX2xvbmciIG1zZ2lkPSI4MDYxNjg1OTIwNTA4MDg2Njk3Ij4i4La04Lav4LeK4Law4Lat4LeSIOC2reC3k+C2u+C3lOC3gCDgtoXgtrHgt4/gt4Dgtrvgtqvgtrrgtqcg4Lat4LeS4La74La64LeaIOC2muC3meC2veC3gOC2u+C3kuC2seC3iiDgtoXgtq/gt5LgtrHgt4rgtrEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCmluZGV4IGNkODY1YWEuLmQ0YjdjYzYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iWmFkYWp0ZSBrw7NkIFBVSywga3RvcsO9IG3DoSA4IGFsZWJvIHZpYWMgxI3DrXNlbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iS2FydGEgU0lNIGplIHV6YW1rbnV0w6EgcG9tb2NvdSBrw7NkdSBQVUsuIE9kb21rbml0ZSBqdSB6YWRhbsOtbSBrw7NkdSBQVUsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iQWsgY2hjZXRlIG9kYmxva292YcWlIGthcnR1IFNJTSwgemFkYWp0ZSBrw7NkIFBVSzIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iTmXDunNwZcWhbsOpLCBwb3ZvxL50ZSB1emFta251dGllIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+Ilpvc3TDoXZhIHbDoW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBva3VzLCBuZcW+IHNhIHZhxaFhIGthcnRhIFNJTSB1emFta25lLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IlBvxI1ldCB6b3N0w6F2YWrDumNpY2ggcG9rdXNvdiBwcmVkIHV6YW1rbnV0w61tIGthcnR5IFNJTTogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iUHJpY2jDoWR6YWrDumNhIGlkZW50aWZpa8OhY2lhIHZvbGFqw7pjZWhvIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJVbW/FvsWIdWplIGRyxb5pdGXEvm92aSB2aWF6YcWlIHNhIG5hIG5hanZ5xaHFoWl1IMO6cm92ZcWIIHJvemhyYW5pYSBzbHXFvmJ5IFZQTi4gQmXFvm7DqSBhcGxpa8OhY2llIGJ5IHRvdG8gbmFzdGF2ZW5pZSBuZW1hbGkgbmlrZHkgcG90cmVib3ZhxaUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InbDpHpiYSBuYSB0YXBldHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IlVtb8W+xYh1amUgZHLFvml0ZcS+b3ZpIHZpYXphxaUgc2EgbmEgbmFqdnnFocWhaXUgw7pyb3ZlxYggcm96aHJhbmlhIHRhcGV0eS4gQmXFvm7DqSBhcGxpa8OhY2llIGJ5IHRvdG8gbmFzdGF2ZW5pZSBuZW1hbGkgbmlrZHkgcG90cmVib3ZhxaUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJ2aWF6YcWlIG5hIHZ6ZGlhbGVuw70gZGlzcGxlaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IlVtb8W+xYh1amUgZHLFvml0ZcS+b3ZpIHZpYXphxaUgc2EgbmEgbmFqdnnFocWhaXUgw7pyb3ZlxYggcm96aHJhbmlhIHZ6ZGlhbGVuw6lobyBkaXNwbGVqYS4gQmXFvm7DqSBhcGxpa8OhY2llIGJ5IHRvdG8gbmFzdGF2ZW5pZSBuZW1hbGkgbmlrZHkgcG90cmVib3ZhxaUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4idmlhemHFpSBzYSBrIHNsdcW+YmUgbWluaWFwbGlrw6FjaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iVW1vxb7FiHVqZSBkcsW+aXRlxL5vdmkgdmlhemHFpSBzYSBuYSBuYWp2ecWhxaFpdSDDunJvdmXFiCByb3pocmFuaWEgc2x1xb5ieSBtaW5pYXBsaWvDoWNpw60uIEJlxb5uw6kgYXBsaWvDoWNpZSBieSB0b3RvIG5hc3RhdmVuaWUgbmVtYWxpIG5pa2R5IHBvdHJlYm92YcWlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImtvbXVuaWtvdmHFpSBzbyBzcHLDoXZjb20gemFyaWFkZW5pYSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iVW1vxb7FiHVqZSBhcGxpa8OhY2lpIHBvdcW+w612YcWlIGZ1bmtjaWUgbsOtemtlaiDDunJvdm5lIGFwbGlrw6FjaWUgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ixI3DrXRhbmllIHZ5cm92bsOhdmFjZWogcGFtw6R0ZSBzbsOtbW9rIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IlVtb8W+xYh1amUgYXBsaWvDoWNpaSDEjcOtdGHFpSBvYnNhaCB2eXJvdm7DoXZhY2VqIHBhbcOkdGUgc27DrW1vay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJwcsOtc3R1cCBrIGFwbGlrw6FjaWkgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IlVtb8W+xYh1amUgYXBsaWvDoWNpaSBwb3XFvsOtdmHFpSBmdW5rY2llIG7DrXprZWogw7pyb3ZuZSBhcGxpa8OhY2llIElucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ImtvbmZpZ3Vyb3ZhxaUgZGlzcGxlamUgY2V6IHNpZcWlIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iVW1vxb7FiHVqZSBhcGxpa8OhY2lpIGtvbmZpZ3Vyb3ZhxaUgZGlzcGxlamUgYSBwcmlwb2ppxaUgc2EgayBuaW0gY2V6IHNpZXRlIFdpLUZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4ib3Zsw6FkYcWlIGRpc3BsZWplIGNleiBzaWXFpSBXaS1GaSI8L3N0cmluZz4KQEAgLTQ5NSw2ICs1MDQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiJVbW/FvsWIdWplIGFwbGlrw6FjaWkgdXByYXZpxaUgZ2xvYsOhbG5lIG5hc3RhdmVuaWEgenZ1a3UsIGFrbyBqZSBobGFzaXRvc8WlLCBhbGVibyB1csSNacWlLCB6IGt0b3LDqWhvIHJlcHJvZHVrdG9yYSBidWRlIHp2dWsgdnljaMOhZHphxaUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJ6w6F6bmFtIHp2dWt1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iVW1vxb7FiHVqZSBhcGxpa8OhY2lpIHphem5hbWVuw6F2YcWlIHp2dWsgcG9tb2NvdSBtaWtyb2bDs251LiBUb3RvIHBvdm9sZW5pZSB1bW/FvsWIdWplIGFwbGlrw6FjaWkgemF6bmFtZW7DoXZhxaUgenZ1ayBrZWR5a2/EvnZlayBiZXogdsOhxaFobyBwb3R2cmRlbmlhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4ia29tdW5pa8OhY2lhIHMga2FydG91IFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IlVtb8W+xYh1amUgYXBsaWvDoWNpaSBvZG9zaWVsYcWlIHByw61rYXp5IG5hIGthcnR1IFNJTS4gVG90byBqZSB2ZcS+bWkgbmViZXpwZcSNbsOpIHBvdm9sZW5pZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJzbsOtbWFuaWUgZm90b2dyYWZpw60gYSBuYXTDocSNYW5pZSB2aWRlw60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iVW1vxb7FiHVqZSBhcGxpa8OhY2lpIGZvdG9ncmFmb3ZhxaUgYSBuYWhyw6F2YcWlIHZpZGXDoSBwb21vY291IGZvdG9hcGFyw6F0dS4gVG90byBwb3ZvbGVuaWUgdW1vxb7FiHVqZSBhcGxpa8OhY2lpIHBvdcW+w612YcWlIGZvdG9hcGFyw6F0IGtlZHlrb8S+dmVrIGEgYmV6IHbDocWhaG8gcG90dnJkZW5pYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiJaYWvDoXphxaUgaW5kaWvDoXRvciBMRUQgcHJlbm9zdSBwcmkgcG91xb7DrXZhbsOtIGZvdG9hcGFyw6F0dSI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IkRvbW92Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IlByw6FjYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iSW7DqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJOZWJvbGEgbsOhamRlbsOhIMW+aWFkbmEgYXBsaWvDoWNpYSwgcG9tb2NvdSBrdG9yZWogYnkgYm9sbyBtb8W+bsOpIHpvYnJhemnFpSB0ZW50byBrb250YWt0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlphZGFqdGUga8OzZCBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJaYWRhanRlIGvDs2QgUFVLIGEgbm92w70ga8OzZCBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IkvDs2QgUFVLIjwvc3RyaW5nPgpAQCAtMTExNyw3ICsxMTI5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4iRG9rb27EjWnFpSBha2NpdSBwb21vY291IGFwbGlrw6FjaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aGljaEhvbWVBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ2MTY0MjAxNzI3MjczMjY3ODIiPiJWeWJlcnRlIGRvbW92c2vDuiBhcGxpa8OhY2l1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IlBvdcW+acWlIGFrbyBwcmVkdm9sZW7DqSBuYXN0YXZlbmllIHByZSB0w7p0byBha2NpdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjbGVhckRlZmF1bHRIaW50TXNnIiBtc2dpZD0iMzI1MjU4NDY4OTUxMjA3NzI1NyI+IlZ5bWF6YcWlIHByZWR2b2xlbsOpIG5hc3RhdmVuaWEgdiBzZWtjaWkgTmFzdGF2ZW5pYSBzeXN0w6ltdSAmZ3Q7IEFwbGlrw6FjaWUgJmd0OyBQcmV2emF0w6kgcG9sb8W+a3kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiJWeW1hemHFpSBwcmVkdm9sZW7DqSBuYXN0YXZlbmlhIHYgc2VrY2lpIE5hc3RhdmVuaWEgc3lzdMOpbXUgJmd0OyBBcGxpa8OhY2llICZndDsgU3RpYWhudXTDqSBwb2xvxb5reS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiJadm/EvnRlIGFrY2l1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4iWnZvxL50ZSBhcGxpa8OhY2l1IHByZSB6YXJpYWRlbmllIFVTQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+IlTDunRvIGFrY2l1IG5lbcO0xb51IHZ5a29uw6F2YcWlIMW+aWFkbmUgYXBsaWvDoWNpZS4iPC9zdHJpbmc+CkBAIC0xMTM4LDcgKzExNTAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfb3JpZ2luYWwiIG1zZ2lkPSIxODgxMDIwMjMwMjE2Njg2ODMiPiJQw7R2b2RuZSBib2xhIHNwdXN0ZW7DoSBhcGxpa8OhY2lhIDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3NjYWxlIiBtc2dpZD0iMzIwMjk1NTY2NzY3NTk0NDQ5OSI+IlByaXNww7Rzb2JpxaUgdmXEvmtvc8WlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4iVsW+ZHkgem9icmF6acWlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4iUG92b8S+dGUgdG8gem5vdmEgdiBzZWtjaWkgTmFzdGF2ZW5pYSBzeXN0w6ltdSAmZ3Q7IEFwbGlrw6FjaWUgJmd0OyBQcmV2emF0w6kgc8O6Ym9yeS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfaGludCIgbXNnaWQ9IjEwNjQ1MjQwODQ1NDMzMDQ0NTkiPiJQb3ZvxL50ZSB0byB6bm92YSB2IHNla2NpaSBOYXN0YXZlbmlhIHN5c3TDqW11ICZndDsgQXBsaWvDoWNpZSAmZ3Q7IFN0aWFobnV0w6kgc8O6Ym9yeS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4iQXBsaWvDoWNpYSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IChwcm9jZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSBwb3J1xaFpbGEgc3ZvamUgdmxhc3Ruw6kgdnluw7p0ZW7DqSBwcmF2aWRsw6EgU3RyaWN0TW9kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiJQcm9jZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IHBvcnXFoWlsIHN2b2plIHZsYXN0bsOpIHZ5bsO6dGVuw6kgcHJhdmlkbMOhIFN0cmljdE1vZGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4iUHJlYmllaGEgaW5vdsOhY2lhIHN5c3TDqW11IEFuZHJvaWQuLi4iPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iWnZvxL50ZSBhcGxpa8OhY2l1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iQXBsaWvDoWNpdSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IG5pZSBqZSBtb8W+bsOpIHNwdXN0acWlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iWmRpZcS+YcWlIHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iWmRpZcS+YcWlIHMgYXBsaWvDoWNpb3UgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJQb3N1dm7DqSB0bGHEjWlkbG8uIERvdGtuaXRlIHNhIGEgcG9kcsW+dGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlByZWpkaXRlIHByc3RvbSBuYWhvcjogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IlByZWpkaXRlIHByc3RvbSBuYWRvbDogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlByZWpkaXRlIHByc3RvbSBkb8S+YXZhOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IlByZWpkaXRlIHByc3RvbSBkb3ByYXZhOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJPZG9ta27DusWlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkZvdG9hcGFyw6F0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlRpY2jDvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJaYXBuw7rFpSB6dnVrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJWeWjEvmFkw6F2YW5pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IlBvc3Vub20gb2RvbWtuw7rFpS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iQWsgc2kgY2hjZXRlIHZ5cG/EjXXFpSB2eXNsb3ZlbsOpIGtsw6F2ZXN5IGhlc2xhLCBwcmlwb2p0ZSBuw6FobGF2bsO6IHPDunByYXZ1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IkJvZGthLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlN5c3TDqW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aCBhdWRpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iQmV6ZHLDtHRvdsO9IGRpc3BsZWoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iSG90b3ZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iVsO9c3R1cCBtw6lkacOtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJQcmlwb2plbmllIGsgemFyaWFkZW5pdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+Ik9kb3Z6ZGFuaWUgb2JyYXouIG5hIHByZWhyYXRpZSB2IHphcmlhZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJQcmViaWVoYSB2eWjEvmFkw6F2YW5pZSB6YXJpYWRlbsOt4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iTmFzdGF2ZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJPZHBvamnFpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJQcmViaWVoYSB2eWjEvmFkw6F2YW5pZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IlByZWJpZWhhIHByaXDDoWphbmll4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJLIGRpc3BvesOtY2lpIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iUHJla3J5dGllIMSNLiA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCB6YWJlenBlxI1lbsOpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJCZXpkcsO0dG92w70gZGlzcGxlaiBqZSBwcmlwb2plbsO9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IlTDoXRvIG9icmF6b3ZrYSBzYSB6b2JyYXp1amUgbmEgaW5vbSB6YXJpYWRlbsOtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+Ik9kb3Z6ZMOhdmFuaWUgb2JyYXpvdmt5IG5hIHByZWhyYXRpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IlByZWJpZWhhIHByaXDDoWphbmllIGsgb2JyYXpvdmtlIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+Ik9kb3Z6ZMOhdmFuaWUgb2JyYXpvdmt5IG5hIHByZWhyYXRpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iUHJpcG9qZW7DqSBrIG9icmF6b3ZrZSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iT2Rwb2ppxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IlRpZXPFiG92w6kgdm9sYW5pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+Ik5lcGFtw6R0w6FtIHNpIHZ6b3IiPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTksMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iU2vDunN0ZSB0byB6YXMgbyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlNrw7pzdGUgdG8gem5vdmEgbmVza8O0ciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJSZcW+aW0gY2VsZWogb2JyYXouIHVrb27EjcOtdGUgcG9zdW51dMOtbSBuYWRvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJSZcW+aW0gY2VsZWogb2JyYXpvdmt5IHVrb27EjcOtdGUgcG9zdW51dMOtbSBuYWRvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkhvdG92byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IktydWhvdsO9IHBvc8O6dmHEjSBob2TDrW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IktydWhvdsO9IHBvc8O6dmHEjSBtaW7DunQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iVnliZXJ0ZSBob2RpbnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJWeWJlcnRlIG1pbsO6dHkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IlRhYnXEvmthIGRuw60gdiBtZXNpYWNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iWm96bmFtIHJva292Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJWeWJlcnRlIG1lc2lhYyBhIGRlxYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJWeWJlcnRlIHJvayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiJCb2xhIHZ5YnJhdMOhIHBvbG/FvmthIDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+IsSMw61zbG8gPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gYm9sbyBvZHN0csOhbmVuw6kiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCmluZGV4IDQzZGE4MTEuLjkzODRmMDEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iVm5lc2l0ZSA4LSBhbGkgdmXEjSBtZXN0bmkgUFVLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJLYXJ0aWNhIFNJTSBqZSB6YWtsZW5qZW5hIHMga29kbyBQVUsuIMSMZSBqbyDFvmVsaXRlIG9ka2xlbml0aSwgdm5lc2l0ZSBrb2RvIFBVSy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLEjGUgxb5lbGl0ZSBvZHN0cmFuaXRpIGJsb2tpcmFuamUga2FydGljZSBTSU0sIHZuZXNpdGUgUFVLMi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJOaSB1c3BlbG8uIE9tb2dvxI1pdGUgemFrbGVwYW5qZSBrYXJ0aWNlIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+Ik5hIHZvbGpvIGltYXRlIMWhZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9za3VzLiBQb3RlbSBzZSBibyBrYXJ0aWNhIFNJTSB6YWtsZW5pbGEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iUG9za3VzaXRlIGxhaGtvIMWhZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ta3JhdC4gUG90ZW0gc2UgYm8ga2FydGljYSBTSU0gemFrbGVuaWxhLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSUQgZG9ob2RuZWdhIGtsaWNhdGVsamEiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+Ikxhc3RuaWt1IG9tb2dvxI1hIHBvdmV6b3ZhbmplIHogdm1lc25pa29tIHN0b3JpdHZlIG5hdmlkZXpuZWdhIHphc2VibmVnYSBvbXJlxb5qYSBuYWp2acWhamUgcmF2bmkuIE5lIHVwb3JhYmxqYWp0ZSB6YSBuYXZhZG5lIHByb2dyYW1lLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJwb3Zlem92YW5qZSB6IG96YWRqZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkltZXRuaWt1IG9tb2dvxI1hIHBvdmV6YXZvIHogdm1lc25pa29tIG96YWRqYSBuYWp2acWhamUgcmF2bmkuIFRlZ2Egbmlrb2xpIG5pIHRyZWJhIHVwb3JhYml0aSB6YSBuYXZhZG5lIHByb2dyYW1lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4icG92ZXphdmEgeiBvZGRhbGplbmltIHByaWthem9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iSW1ldG5pa3Ugb21vZ2/EjWEgcG92ZXpvdmFuamUgeiB2bWVzbmlrb20gb2RkYWxqZW5lZ2EgcHJpa2F6YSBuYWp2acWhamUgcmF2bmkuIFRlZ2EgbmkgdHJlYmEgbmlrb2xpIHVwb3JhYml0aSB6YSBuYXZhZG5lIGFwbGlrYWNpamUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4icG92ZcW+aSBzIHN0b3JpdHZpam8gcHJpcG9tb8SNa2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iTGFzdG5pa3Ugb21vZ2/EjWEgcG92ZXpvdmFuamUgeiB2bWVzbmlrb20gc3Rvcml0dmUgcHJpcG9tb8SNa2EgbmFqdmnFoWplIHJhdm5pLiBUZWdhIG5pIHRyZWJhIG5pa29saSB1cG9yYWJpdGkgemEgbmF2YWRuZSBwcm9ncmFtZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJpbnRlcmFrY2lqYSBzIHNrcmJuaWtvbSBuYXByYXZlIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJQcm9ncmFtdSBvbW9nb8SNYSB1cG9yYWJvIGZ1bmtjaWogbml6a2UgcmF2bmkgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4iYnJhbmplIGdyYWZpxI1uZWdhL3NsaWtvdm5lZ2EgbWVkcG9tbmlsbmlrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQcm9ncmFtdSBvbW9nb8SNYSBicmFuamUgdnNlYmluZSBncmFmacSNbmVnYS9zbGlrb3ZuZWdhIG1lZHBvbW5pbG5pa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iZG9zdG9wIGRvIGZ1bmtjaWogSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkFwbGlrYWNpamkgZG92b2xqdWplIHVwb3JhYm8gZnVua2NpaiBJbnB1dEZsaW5nZXIgbml6a2UgcmF2bmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJrb25maWd1cmlyYW5qZSB6YXNsb25vdiBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+Ik9tb2dvxI1hIGFwbGlrYWNpamkga29uZmlndXJpcmFuamUgemFzbG9ub3YgV2ktRmkgaW4gcG92ZXpvdmFuamUgeiBuamltaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+Im5hZHpvciB6YXNsb25vdiBXaS1GaSI8L3N0cmluZz4KQEAgLTQ5NSw2ICs1MDQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiJBcGxpa2FjaWppIG9tb2dvxI1hIHNwcmVtaW5qYW5qZSBzcGxvxaFuaWggenZvxI1uaWggbmFzdGF2aXRldiwgbmEgcHJpbWVyIGdsYXNub3N0IGluIGthdGVyaSB6dm/EjW5payBzZSB1cG9yYWJsamEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJzbmVtYW5qZSB6dm9rYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IkFwbGlrYWNpamkgb21vZ2/EjWEgc25lbWFuamUgenZva2EgeiBtaWtyb2Zvbm9tLiBTIHRlbSBkb3ZvbGplbmplbSBsYWhrbyBhcGxpa2FjaWphIGthZGFyIGtvbGkgc25lbWEgenZvayBicmV6IHZhxaFlIHBvdHJkaXR2ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+ImtvbXVuaWNpcmFuamUgcyBrYXJ0aWNvIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IkFwbGlrYWNpamkgZG92b2xpIHBvxaFpbGphbmplIHVrYXpvdiBrYXJ0aWNpIFNJTS4gVG8gamUgbGFoa28gemVsbyBuZXZhcm5vLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+ImZvdG9ncmFmaXJhbmplIGluIHNuZW1hbmplIHZpZGVvcG9zbmV0a292Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkFwbGlrYWNpamkgb21vZ2/EjWEgZm90b2dyYWZpcmFuamUgaW4gc25lbWFuamUgdmlkZW9wb3NuZXRrb3YgcyBrYW1lcm8uIFMgdGVtIGRvdm9samVuamVtIGxhaGtvIGFwbGlrYWNpamEga2FkYXIga29saSB1cG9yYWJsamEga2FtZXJvIGJyZXogdmHFoWUgcG90cmRpdHZlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+Im9uZW1vZ2/EjWkgTEVELWluZGlrYXRvciBwcmVuYcWhYW5qYSwga28gamUgZm90b2FwYXJhdCB2IHVwb3JhYmkiPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiJEb21vdiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiJTbHXFvmJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJEcnVnbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJOaSBhcGxpa2FjaWplIHphIG9nbGVkIHRlZ2Egc3Rpa2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iVm5lc2l0ZSBrb2RvIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlZuZXNpdGUga29kbyBQVUsgaW4gbm92byBrb2RvIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iS29kYSBQVUsiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJUaXBrYSBTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IlRpcGthIEVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iSXpiZXJpdGUgcHJvZ3JhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IkFwbGlrYWNpamUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiBuaSBiaWxvIG1vZ2/EjWUgemFnbmF0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkRlbGl0ZSB6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkRlbGl0ZSBzIHByb2dyYW1vbSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IkRyc25hIHJvxI1pY2EuIERvdGFrbml0ZSBzZSBpbiBwcmlkcsW+aXRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJQb3ZsZWNpdGUgbmF2emdvciB6YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iUG92bGVjaXRlIG5hdnpkb2wgemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlBvdmxlY2l0ZSB2IGxldm8gemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iUG92bGVjaXRlIHYgZGVzbm8gemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iT2RrbGVuaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJGb3RvYXBhcmF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlRpaG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iVmtsb3BsamVuIHp2b2siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Iklza2FuamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJQb3ZsZWNpdGUsIMSNZSDFvmVsaXRlIG9ka2xlbml0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUHJpa2xqdcSNaXRlIHNsdcWhYWxrZSwgxI1lIMW+ZWxpdGUgc2xpxaFhdGkgaXpnb3ZvcmplbmUgdGlwa2UgZ2VzbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUGlrYS4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTaXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+Ilp2b2sgcHJlayBCbHVldG9vdGhhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJCcmV6xb5pxI1uaSBwcmlrYXoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iS29uxI1hbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJJemhvZCBwcmVkc3Rhdm5vc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJQb3Zlem92YW5qZSB6IG5hcHJhdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJQcmVkdmFqYW5qZSB6YXNsb25hIHYgbmFwcmF2aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Iklza2FuamUgbmFwcmF2IOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+Ik5hc3Rhdml0dmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iUHJla2luaXRldiBwb3ZlemF2ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJQcmVnbGVkb3ZhbmplIC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IlZ6cG9zdGF2bGphbmplIHBvdmV6YXZlIC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iTmEgdm9sam8iPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJQcmVrcml2YW5qZSAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gcGlrIG5hIHBhbGVjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IiwgdmFyZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkJyZXrFvmnEjW5pIHphc2xvbiBqZSBwb3ZlemFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IlRhIHphc2xvbiBqZSBwcmlrYXphbiB2IGRydWdpIG5hcHJhdmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iUHJlZHZhamFuamUgemFzbG9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IlBvdmV6b3ZhbmplIHogemFzbG9ub20gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iUHJlZHZhamFuamUgemFzbG9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iVnpwb3N0YXZsamVuYSBwb3ZlemF2YSB6IHphc2xvbm9tIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJQcmVraW5pIHBvdmV6YXZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJLbGljIHYgc2lsaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlBvemFibGplbiB2em9yZWMiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlBvc2t1c2l0ZSB6bm92YSBwb3puZWplIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlBvdmxlY2l0ZSB6IHZyaGEsIGRhIHphcHJldGUgY2Vsb3phc2xvbnNraSBuYcSNaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJEb2tvbsSNYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iT2tyb2dsaSBkcnNuaWsgemEgdXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJPa3JvZ2xpIGRyc25payB6YSBtaW51dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iSXpiZXJpdGUgdXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iSXpiZXJpdGUgbWludXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJNZXNlxI1uYSBtcmXFvmEgZG5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iU2V6bmFtIGxldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iSXpiZXJpdGUgbWVzZWMgaW4gZGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iSXpiZXJpdGUgbGV0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiJJemJyYW5vOiA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiLFoHRldmlsa2EgPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gamUgaXpicmlzYW5hIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbAppbmRleCAxNGIyMmNjLi5jNmMzY2UxIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+ItCj0L3QtdGB0LjRgtC1IFBVSyDQutC+0ZjQuCDRgdC1INGB0LDRgdGC0L7RmNC4INC+0LQgOCDRhtC40YTQsNGA0LAg0LjQu9C4INCy0LjRiNC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0g0LrQsNGA0YLQuNGG0LAg0ZjQtSDQt9Cw0LrRmdGD0YfQsNC90LAgUFVLINC60L7QtNC+0LwuINCj0L3QtdGB0LjRgtC1IFBVSyDQusO00LQg0LTQsCDQsdC40YHRgtC1INGY0LUg0L7RgtC60ZnRg9GH0LDQu9C4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+ItCj0L3QtdGB0LjRgtC1IFBVSzIg0LTQsCDQsdC40YHRgtC1INC00LXQsdC70L7QutC40YDQsNC70LggU0lNINC60LDRgNGC0LjRhtGDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+ItCd0LjRmNC1INGD0YHQv9C10LvQvi4g0J7QvNC+0LPRg9Gb0LjRgtC1INC30LDQutGZ0YPRh9Cw0LLQsNGa0LUgU0lNL1JVSU0g0LrQsNGA0YLQuNGG0LUuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC/0L7QutGD0YjQsNGYINC/0YDQtSDQvdC10LPQviDRiNGC0L4g0YHQtSBTSU0g0LrQsNGA0YLQuNGG0LAg0LfQsNC60ZnRg9GH0LAuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4i0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC/0L7QutGD0YjQsNGY0LAg0L/RgNC1INC90LXQs9C+INGI0YLQviDRgdC1IFNJTSDQutCw0YDRgtC40YbQsCDQt9Cw0LrRmdGD0YfQsC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+ItCU0L7Qu9Cw0LfQvdC4INCY0JQg0L/QvtC30LjQstCw0L7RhtCwIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLQlNC+0LfQstC+0ZnQsNCy0LAg0LLQu9Cw0YHQvdC40LrRgyDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LjQvdGC0LXRgNGE0LXRmNGB0L7QvCBWUE4g0YPRgdC70YPQs9C1INC90LDRmNCy0LjRiNC10LMg0L3QuNCy0L7QsC4g0KPQvtCx0LjRh9Cw0ZjQtdC90LUg0LDQv9C70LjQutCw0YbQuNGY0LUg0L3QuNC60LDQtNCwINC90LUg0LHQuCDRgtGA0LXQsdCw0LvQviDQtNCwINGY0LUg0LrQvtGA0LjRgdGC0LUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ItC+0LHQsNCy0LXQt9C40LLQsNGa0LUg0L3QsCDQv9C+0LfQsNC00LjQvdGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLQlNC+0LfQstC+0ZnQsNCy0LAg0LLQu9Cw0YHQvdC40LrRgyDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LjQvdGC0LXRgNGE0LXRmNGB0L7QvCDQv9C+0LfQsNC00LjQvdC1INC90LDRmNCy0LjRiNC10LMg0L3QuNCy0L7QsC4g0KPQvtCx0LjRh9Cw0ZjQtdC90LUg0LDQv9C70LjQutCw0YbQuNGY0LUg0L3QuNC60LDQtNCwINC90LUg0LHQuCDRgtGA0LXQsdCw0LvQviDQtNCwINGY0LUg0LrQvtGA0LjRgdGC0LUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLQv9C+0LLQtdC30LjQstCw0ZrQtSDRgdCwINGD0LTQsNGZ0LXQvdC40Lwg0LXQutGA0LDQvdC+0LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLQlNC+0LfQstC+0ZnQsNCy0LAg0LLQu9Cw0YHQvdC40LrRgyDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LjQvdGC0LXRgNGE0LXRmNGB0L7QvCDRg9C00LDRmdC10L3QvtCzINC10LrRgNCw0L3QsCDQvdCw0ZjQstC40YjQtdCzINC90LjQstC+0LAuINCj0L7QsdC40YfQsNGY0LXQvdC1INCw0L/Qu9C40LrQsNGG0LjRmNC1INC90LjQutCw0LTQsCDQvdC1INCx0Lgg0YLRgNC10LHQsNC70L4g0LTQsCDRmNC1INC60L7RgNC40YHRgtC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ItC+0LHQsNCy0LXQt9C40LLQsNGa0LUg0L3QsCDRg9GB0LvRg9Cz0YMg0LLQuNGf0LXRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+ItCU0L7Qt9Cy0L7RmdCw0LLQsCDQstC70LDRgdC90LjQutGDINC00LAg0YHQtSDQvtCx0LDQstC10LbQtSDQvdCwINC40L3RgtC10YDRhNC10ZjRgSDRg9GB0LvRg9Cz0LUg0LLQuNGf0LXRgtCwINC90LDRmNCy0LjRiNC10LMg0L3QuNCy0L7QsC4g0KPQvtCx0LjRh9Cw0ZjQtdC90LUg0LDQv9C70LjQutCw0YbQuNGY0LUg0L3QuNC60LDQtNCwINC90LUg0LHQuCDRgtGA0LXQsdCw0LvQviDQtNCwINGY0LUg0LrQvtGA0LjRgdGC0LUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i0LjQvdGC0LXRgNCw0LrRhtC40ZjQsCDRgdCwINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0L7QvCDRg9GA0LXRktCw0ZjQsCI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i0JTQvtC30LLQvtGZ0LDQstCwINCw0L/Qu9C40LrQsNGG0LjRmNC4INC00LAg0LrQvtGA0LjRgdGC0LggU3VyZmFjZUZsaW5nZXIg0YTRg9C90LrRhtC40ZjQtSDQvdC40YHQutC+0LMg0L3QuNCy0L7QsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLRh9C40YLQsNGa0LUg0LHQsNGE0LXRgNCwINC60LDQtNGA0L7QstCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+ItCU0L7Qt9Cy0L7RmdCw0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQuCDQtNCwINGH0LjRgtCwINGB0LDQtNGA0LbQsNGYINC80LXRktGD0LzQtdC80L7RgNC40ZjQtSDQutCw0LTRgNC+0LLQsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiLQv9GA0LjRgdGC0YPQvyBJbnB1dEZsaW5nZXIg0YTRg9C90LrRhtC40ZjQsNC80LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i0JTQvtC30LLQvtGZ0LDQstCwINCw0L/Qu9C40LrQsNGG0LjRmNC4INC00LAg0LrQvtGA0LjRgdGC0LggSW5wdXRGbGluZ2VyINGE0YPQvdC60YbQuNGY0LUg0L3QuNGB0LrQvtCzINC90LjQstC+0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLQutC+0L3RhNC40LPRg9GA0LjRgdCw0ZrQtSBXaS1GaSDQtdC60YDQsNC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLQlNC+0LfQstC+0ZnQsNCy0LAg0LDQv9C70LjQutCw0YbQuNGY0Lgg0LTQsCDQutC+0L3RhNC40LPRg9GA0LjRiNC1IFdpLUZpINC10LrRgNCw0L3QtSDQuCDQv9C+0LLQtdC30YPRmNC1INGB0LUg0YHQsCDRmtC40LzQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ItC60L7QvdGC0YDQvtC70LAgV2ktRmkg0LXQutGA0LDQvdCwIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+ItCU0L7Qt9Cy0L7RmdCw0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQuCDQtNCwINC80LXRmtCwINCz0LvQvtCx0LDQu9C90LAg0LDRg9C00LjQviDQv9C+0LTQtdGI0LDQstCw0ZrQsCDQutCw0L4g0YjRgtC+INGB0YMg0ZjQsNGH0LjQvdCwINC30LLRg9C60LAg0Lgg0LjQt9Cx0L7RgCDQt9Cy0YPRh9C90LjQutCwINC60L7RmNC4INGB0LUg0LrQvtGA0LjRgdGC0Lgg0LrQsNC+INC40LfQu9Cw0LcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLRgdC90LjQvNCw0ZrQtSDQsNGD0LTQuNC+INC30LDQv9C40YHQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+ItCU0L7Qt9Cy0L7RmdCw0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQuCDQtNCwINGB0L3QuNC80LAg0LfQstGD0Log0L/QvtC80L7Rm9GDINC80LjQutGA0L7RhNC+0L3QsC4g0J7QstCwINC00L7Qt9Cy0L7Qu9CwINC+0LzQvtCz0YPRm9Cw0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQuCDQtNCwINGB0L3QuNC80LAg0LfQstGD0Log0YMg0LHQuNC70L4g0LrQvtC8INGC0YDQtdC90YPRgtC60YMg0LHQtdC3INCy0LDRiNC1INC/0L7RgtCy0YDQtNC1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4i0JrQvtC80YPQvdC40LrQsNGG0LjRmNCwINGB0LAgU0lNINC60LDRgNGC0LjRhtC+0LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiLQntC80L7Qs9GD0ZvQsNCy0LAg0LDQv9C70LjQutCw0YbQuNGY0Lgg0LTQsCDRiNCw0ZnQtSDQutC+0LzQsNC90LTQtSBTSU0g0LrQsNGA0YLQuNGG0LguINCi0L4g0ZjQtSDQstC10L7QvNCwINC+0L/QsNGB0L3Qvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLRgdC90LjQvNCw0ZrQtSDRhNC+0YLQvtCz0YDQsNGE0LjRmNCwINC4INCy0LjQtNC10L4g0YHQvdC40LzQsNC60LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i0JTQvtC30LLQvtGZ0LDQstCwINCw0L/Qu9C40LrQsNGG0LjRmNC4INC00LAg0YHQvdC40LzQsCDRgdC70LjQutC1INC4INCy0LjQtNC10L4g0YHQvdC40LzQutC1INC60LDQvNC10YDQvtC8LiDQntCy0LAg0LTQvtC30LLQvtC70LAg0L7QvNC+0LPRg9Gb0LDQstCwINCw0L/Qu9C40LrQsNGG0LjRmNC4INC00LAg0YMg0LHQuNC70L4g0LrQvtC8INGC0YDQtdC90YPRgtC60YMg0LrQvtGA0LjRgdGC0Lgg0LrQsNC80LXRgNGDINCx0LXQtyDQstCw0YjQtSDQv9C+0YLQstGA0LTQtS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiLQvtC90LXQvNC+0LPRg9Gb0Lgg0L/RgNC10L3QvtGBIExFRCDQvtGB0LLQtdGC0ZnQtdGa0LAg0LjQvdC00LjQutCw0YLQvtGA0LAg0LTQvtC6INGB0LUg0LrQsNC80LXRgNCwINC60L7RgNC40YHRgtC4Ijwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4i0J/QvtGH0LXRgtC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4i0J/QvtGB0LDQviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i0JTRgNGD0LPQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiLQndC40ZjQtSDQv9GA0L7QvdCw0ZLQtdC90LAg0L3QuNGY0LXQtNC90LAg0LDQv9C70LjQutCw0YbQuNGY0LAg0LfQsCDQv9GA0LjQutCw0Lcg0L7QstC+0LMg0LrQvtC90YLQsNC60YLQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLQo9C90LXRgdC40YLQtSBQSU4g0LrDtNC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i0KPQvdC10YHQuNGC0LUgUFVLINC4INC90L7QstC4IFBJTiDQusO00LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDQusO00LQiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i0JjQt9Cw0LHQtdGA0LjRgtC1INCw0L/Qu9C40LrQsNGG0LjRmNGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4i0J3QuNGY0LUg0LzQvtCz0YPRm9C1INC/0L7QutGA0LXQvdGD0YLQuCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i0JTQtdC70Lgg0YHQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLQlNC10LvQuCDRgdCwINCw0L/Qu9C40LrQsNGG0LjRmNC+0LwgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLQmtC70LjQt9C90LAg0YDRg9GH0LjRhtCwLiDQlNC+0LTQuNGA0L3QuNGC0LUg0Lgg0LfQsNC00YDQttC40YLQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i0J/RgNC10LLRg9GG0LjRgtC1INC90LDQs9C+0YDQtSDQt9CwIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLQn9GA0LXQstGD0YbQuNGC0LUg0L3QsNC00L7Qu9C1INC30LAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+ItCf0YDQtdCy0YPRhtC40YLQtSDRg9C70LXQstC+INC30LAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLQn9GA0LXQstGD0YbQuNGC0LUg0YPQtNC10YHQvdC+INC30LAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i0J7RgtC60ZnRg9GH0LDRmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLQmtCw0LzQtdGA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i0J3QtdGH0YPRmNC90L4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i0KPQutGZ0YPRh9C4INC30LLRg9C6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLQn9GA0LXRgtGA0LDQs9CwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4i0J/RgNC10LLRg9GG0LjRgtC1INC00LAg0LHQuNGB0YLQtSDQvtGC0LrRmdGD0YfQsNC70LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+ItCf0YDQuNC60ZnRg9GH0LjRgtC1INGB0LvRg9GI0LDQu9C40YbQtSDQtNCwINCx0LjRgdGC0LUg0YfRg9C70Lgg0LjQt9Cz0L7QstC+0YDQtdC90LUg0YLQsNGB0YLQtdGA0LUg0LfQsCDQu9C+0LfQuNC90LrRgy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLQotCw0YfQutCwLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+ItCh0LjRgdGC0LXQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoINCw0YPQtNC40L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+ItCR0LXQttC40YfQvdC4INC10LrRgNCw0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i0JPQvtGC0L7QstC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i0JjQt9C70LDQtyDQvNC10LTQuNGY0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+ItCf0L7QstC10LbQuNGC0LUg0YHQsCDRg9GA0LXRktCw0ZjQtdC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4i0J/RgNC10LHQsNGG0LjRgtC1INC10LrRgNCw0L0g0L3QsCDRg9GA0LXRktCw0ZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLQotGA0LDQttC10ZrQtSDRg9GA0LXRktCw0ZjQsOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+ItCf0L7QtNC10YjQsNCy0LDRmtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+ItCf0YDQtdC60LjQvdC4INCy0LXQt9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+ItCh0LrQtdC90LjRgNCw0ZrQtS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+ItCf0L7QstC10LfQuNCy0LDRmtC1Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLQlNC+0YHRgtGD0L/QvdCwIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i0J/QvtGB0YLQsNCy0ZnQtdC90Lgg0LXQu9C10LzQtdC90YIg0LHRgC4gPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz7Dlzx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDQsdC10LfQsdC10LTQvdC+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLQkdC10LbQuNGH0L3QuCDQtdC60YDQsNC9INGY0LUg0L/QvtCy0LXQt9Cw0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i0J7QstCw0Zgg0LXQutGA0LDQvSDRgdC1INC/0YDQuNC60LDQt9GD0ZjQtSDQvdCwINC00YDRg9Cz0L7QvCDRg9GA0LXRktCw0ZjRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiLQn9GA0LXQsdCw0YbQuNCy0LDRmtC1INC10LrRgNCw0L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+ItCf0L7QstC10LfQuNCy0LDRmtC1INGB0LAgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4i0J/RgNC10LHQsNGG0LjQstCw0ZrQtSDQtdC60YDQsNC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+ItCf0L7QstC10LfQsNC90L4g0ZjQtSDRgdCwIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLQn9GA0LXQutC40L3QuCDQstC10LfRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i0KXQuNGC0L3QuCDQv9C+0LfQuNCyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i0JfQsNCx0L7RgNCw0LLRmdC10L3QuCDRiNCw0LHQu9C+0L0iPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NjAsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+ItCf0L7QutGD0YjQsNGY0YLQtSDQv9C+0L3QvtCy0L4g0LrQsNGB0L3QuNGY0LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i0J/RgNC10LLRg9GG0LjRgtC1INC/0YDRgdGC0L7QvCDQvtC00L7Qt9Cz0L4g0L3QsNC00L7Qu9C1INC00LAg0LHQuNGB0YLQtSDQuNC30LDRiNC70Lgg0LjQtyDRhtC10LvQvtCzINC10LrRgNCw0L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+ItCT0L7RgtC+0LLQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+ItCa0YDRg9C20L3QuCDQutC70LjQt9Cw0Ycg0LfQsCDRgdCw0YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4i0JrRgNGD0LbQvdC4INC60LvQuNC30LDRhyDQt9CwINC80LjQvdGD0YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLQmNC30LDQsdC10YDQuNGC0LUg0YHQsNGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLQmNC30LDQsdC10YDQuNGC0LUg0LzQuNC90YPRgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLQn9GA0LjQutCw0Lcg0LTQsNC90LAg0YMg0LzQtdGB0LXRhtGDINGDINCy0LjQtNGDINC80YDQtdC20LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLQm9C40YHRgtCwINCz0L7QtNC40L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i0JjQt9Cw0LHQtdGA0LjRgtC1INC80LXRgdC10YYg0Lgg0LTQsNC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4i0JjQt9Cw0LHQtdGA0LjRgtC1INCz0L7QtNC40L3RgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiLQmNC30LDQsdGA0LDQu9C4INGB0YLQtSA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiLQmNC30LHRgNC40YHQsNC70Lgg0YHRgtC1IDx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAppbmRleCBhYTIwYTY0Li40YjA3NmE4IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IkFuZ2UgZW4gUFVLLWtvZCBtZWQgbWluc3QgOCBzaWZmcm9yLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJEaXR0IFNJTS1rb3J0IMOkciBQVUstbMOlc3QuIEFuZ2UgUFVLLWtvZGVuIG9tIGR1IHZpbGwgbMOlc2EgdXBwIGRldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJBbmdlIFBVSzIta29kZW4gZsO2ciBhdHQgaMOkdmEgc3DDpHJyZW4gYXYgU0lNLWtvcnRldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJGw7Zyc8O2a2V0IG1pc3NseWNrYWRlcy4gQWt0aXZlcmEgU0lNLS9SVUlNLWzDpXMuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iRHUgaGFyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmw7Zyc8O2ayBrdmFyIGlubmFuIFNJTS1rb3J0ZXQgbMOlc2VzLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IkR1IGhhciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZsO2cnPDtmsga3ZhciBpbm5hbiBTSU0ta29ydGV0IGzDpXNlcy4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkta29kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJOdW1tZXJwcmVzZW50YXTDtnIgZsO2ciBpbmtvbW1hbmRlIHNhbXRhbCI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iSW5uZWhhdmFyZW4gdGlsbMOldHMgYXR0IGJpbmRhIHRpbGwgZGVuIMO2dmVyc3RhIG5pdsOlbnMgZ3LDpG5zc25pdHQgZsO2ciBlbiBWUE4tdGrDpG5zdC4gU2thIGludGUgYmVow7Z2YXMgZsO2ciB2YW5saWdhIGFwcGFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJiaW5kYSB0aWxsIGVuIGJha2dydW5kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJJbm5laGF2YXJlbiBrYW4gYmluZGEgdGlsbCBkZW4gw7Z2ZXJzdGEgbml2w6VucyBncsOkbnNzbml0dCBmw7ZyIGVuIGJha2dydW5kLiBTa2EgaW50ZSBiZWjDtnZhcyBmw7ZyIHZhbmxpZ2EgYXBwYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJiaW5kIHRpbGwgZW4gZmrDpHJyc2vDpHJtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iSW5uZWhhdmFyZW4gdGlsbMOldHMgYXR0IGJpbmRhIHRpbGwgZGVuIMO2dmVyc3RhIG5pdsOlbnMgZ3LDpG5zc25pdHQgZsO2ciBlbiBmasOkcnJza8Okcm0uIFNrYSBpbnRlIGJlaMO2dmFzIGbDtnIgdmFubGlnYSBhcHBhci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJiaW5kIHRpbGwgZW4gd2lkZ2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IklubmVoYXZhcmVuIHRpbGzDpXRzIGF0dCBiaW5kYSB0aWxsIGRlbiDDtnZlcnN0YSBuaXbDpW5zIGdyw6Ruc3NuaXR0IGbDtnIgZW4gd2lkZ2V0LiBTa2EgaW50ZSBiZWjDtnZhcyBmw7ZyIHZhbmxpZ2EgYXBwYXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iYXJiZXRhIG1lZCBlbiBlbmhldHNhZG1pbmlzdHJhdMO2ciI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iVGlsbMOldGVyIGF0dCBhcHBlbiBhbnbDpG5kZXIgbMOlZ25pdsOlZnVua3Rpb25lciBpIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImzDpHNhIHJhbWJ1ZmZlcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iVGlsbMOldGVyIGF0dCBhcHBlbiBsw6RzZXIgaW5uZWjDpWxsZXQgaSByYW1idWZmZXJ0ZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iZsOlIHRpbGxnw6VuZyB0aWxsIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJUaWxsw6V0ZXIgYXR0IGFwcGVuIGFudsOkbmRlciBsw6Vnbml2w6VmdW5rdGlvbmVyIGkgSW5wdXRGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ia29uZmlndXJlcmFyIFdpLUZpLXNrw6RybWFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iVGlsbMOldGVyIGF0dCBhcHBlbiBrb25maWd1cmVyYXIgb2NoIGFuc2x1dGVyIHRpbGwgV2ktRmktc2vDpHJtYXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJrb250cm9sbGVyYXIgV2ktRmktc2vDpHJtYXIiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4iVGlsbMOldGVyIGF0dCBhcHBlbiDDpG5kcmFyIGdsb2JhbGEgbGp1ZGluc3TDpGxsbmluZ2FyIHNvbSB2b2x5bSBvY2ggdmlsa2VuIGjDtmd0YWxhcnV0Z8Olbmcgc29tIGFudsOkbmRzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4ic3BlbGEgaW4gbGp1ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IlRpbGzDpXRlciBhdHQgYXBwZW4gc3BlbGFyIGluIGxqdWQgbWVkIG1pa3JvZm9uZW4uIE1lZCBkZW4gaMOkciBiZWjDtnJpZ2hldGVuIHRpbGzDpXRzIGFwcGVuIGF0dCBzcGVsYSBpbiBsanVkIG7DpHIgc29tIGhlbHN0IHV0YW4gZGl0dCBnb2Rrw6RubmFuZGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJTSU0ta29tbXVuaWthdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IlRpbGzDpXRlciBhdHQgYXBwZW4gc2tpY2thciBrb21tYW5kb24gdGlsbCBTSU0ta29ydGV0LiBEZXR0YSDDpHIgbXlja2V0IGZhcmxpZ3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4idGEgYmlsZGVyIG9jaCBzcGVsYSBpbiB2aWRlb2tsaXBwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlRpbGzDpXRlciBhdHQgYXBwZW4gdGFyIGJpbGRlciBvY2ggc3BlbGFyIGluIHZpZGVvciBtZWQga2FtZXJhbi4gTWVkIGRlbiBow6RyIGJlaMO2cmlnaGV0ZW4gdGlsbMOldHMgYXBwZW4gYXR0IGFudsOkbmRhIGthbWVyYW4gbsOkciBzb20gaGVsc3QgdXRhbiBkaXR0IGdvZGvDpG5uYW5kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiJpbmFrdGl2ZXJhIExFRC1zw6RuZG5pbmdzaW5kaWthdG9yIG7DpHIga2FtZXJhbiBhbnbDpG5kcyI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IkhlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiJBcmJldGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IsOWdnJpZ3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4iSW5nZW4gYXBwIGbDtnIgYXR0IHZpc2EgZGVuIGjDpHIga29udGFrdGVuIGhpdHRhZGVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkFuZ2UgUElOLWtvZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IkFuZ2UgUFVLLWtvZGVuIG9jaCBlbiBueSBQSU4ta29kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsta29kIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2tpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJSZXR1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlbDpGxqIGVuIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IkRldCBnaWNrIGludGUgYXR0IHN0YXJ0YSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iRGVsYSBtZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iRGVsYSBtZWQgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJTa8Okcm1sw6VzZnVua3Rpb24uIFRyeWNrIG9jaCBkcmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkRyYSB1cHDDpXQgZsO2ciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkRyYSBuZWTDpXQgZsO2ciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRHJhIMOldCB2w6Ruc3RlciBmw7ZyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkRyYSDDpXQgaMO2Z2VyIGbDtnIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkzDpXMgdXBwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJUeXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkxqdWQgcMOlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTw7ZrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iTMOlcyB1cHAgZ2Vub20gYXR0IGRyYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iQW5zbHV0IG1pa3JvZm9ubHVyYXIgb20gZHUgdmlsbCBhdHQgbMO2c2Vub3JkZXQgc2thIGzDpHNhcyB1cHAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUHVua3QuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGgtbGp1ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iVHLDpWRsw7ZzIHNrw6RybSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJLbGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iTWVkaWV1cHBzcGVsbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iQW5zbHV0IHRpbGwgZW5oZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLDlnZlcmbDtnIgc2vDpHJtZW4gdGlsbCBlbmhldGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iU8O2a2VyIGVmdGVyIGVuaGV0ZXIgLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iSW5zdMOkbGxuaW5nYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iS29wcGxhIGZyw6VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNrYW5uYXLigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJBbnNsdXRlciAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IlRpbGxnw6RuZ2xpZ2EiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLDlnZlcmxhZ3JpbmcgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+IHggPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHPDpGtlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iVHLDpWRsw7ZzIGFuc2x1dG5pbmcgdGlsbCBza8Okcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iRGVuIGjDpHIgc2vDpHJtZW4gdmlzYXMgcMOlIGVuIGFubmFuIGVuaGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IsOWdmVyZsO2ciBza8Okcm1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkFuc2x1dGVyIHRpbGwgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iw5Z2ZXJmw7ZyIHNrw6RybWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJBbnNsdXRlbiB0aWxsIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJLb3BwbGEgZnLDpW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Ik7DtmRzYW10YWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJIYXIgZHUgZ2zDtm10IGRpdHQgZ3JhZmlza2EgbMO2c2Vub3JkPyI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY2MCwxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iRsO2cnPDtmsgaWdlbiBzZW5hcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iRHJhIG5lZMOldCBvbSBkdSB2aWxsIGF2YnJ5dGEgZnVsbHNrw6RybXNsw6RnZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJLbGFydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkNpcmtlbHJlZ2xhZ2UgZsO2ciB0aW1tYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IkNpcmtlbHJlZ2xhZ2UgZsO2ciBtaW51dGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlbDpGxqIHRpbW1hciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IlbDpGxqIG1pbnV0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IlJ1dG7DpHQgZsO2ciBtw6VuYWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJMaXN0YSDDtnZlciDDpXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlbDpGxqIG3DpW5hZCBvY2ggZGFnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iVsOkbGogw6VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBoYXIgbWFya2VyYXRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gaGFyIHRhZ2l0cyBib3J0Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAppbmRleCBiMDY2NzU4Li4yODEyMWIzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IkFuZGlrYSBQVUsgYW1iYXlvIGluYSB1cmVmdSB3YSBuYW1iYXJpIDggYXUgemFpZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IkthZGkgeWFrbyB5YSBTSU0gaW1lZnVuZ3dhIG5hIFBVSy4gQW5pa2EgbXNpbWJvIHdhIFBVSyBpbGkga3VpZnVuZ3VhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkNoYXBpc2hhIFBVSzIgaWxpIGt1ZnVuZ3VhIFNJTSBrYWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IkltZXNoaW5kd2EswqB3YXNoYSB1ZnVuZ2FqaSB3YSBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJVbWVzYWxpYSBuYSBtYWphcmliaW/CoDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWJsYSB5YSBTSU0ga3VmdW5nd2EuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iVW1lc2FsaWEgbmEgbWFqYXJpYmlvwqA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FibGEgeWEgU0lNIGt1ZnVuZ3dhLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iS2l0YW1idWxpc2hvIGNoYSBNcGlnYWppIHdhIFNpbXUgSW5heW9pbmdpYSI8L3N0cmluZz4KQEAgLTM0NSw3ICszNTAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYWNrdXAiIG1zZ2lkPSI0NzAwMTMwMjI4NjU0NTM5MjAiPiJEaGliaXRpIGt1aGlmYWRoaSBuYWthbGEgbmEga3VyZWplc2hhIGt3YSBtZnVtbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhY2t1cCIgbXNnaWQ9IjY5MTIyMzA1MjUxNDA1ODk4OTEiPiJJbmFydWh1c3UgcHJvZ3JhbXUga3VkaGliaXRpIHV0YXJhdGlidSB3YSBrdWNoZWxlemEgbmEga3VyZWplc2hhIHdhIG1mdW1vLiBTaSBrd2EgbWF0dW1pemkgbmEgcHJvZ3JhbXUgemEga2F3YWlkYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSI1NTU3MDcxMzI1ODA0NDY5MTAyIj4idGhpYml0aXNoYSBjaGVsZXpvIGthbWlsaWZ1IGF1IHJlamVzaGEgdXB5YSB1ZW5kZXNoYWppIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjE3NDg3NjIxNzE2Mzc2OTk1NjIiPiJJbmFydWh1c3UgcHJvZ3JhbXUga3V6aW5kdWEgVUkgeWEga3V0aGliaXRpc2hhIGNoZWxlem8ga2FtaWxpLiBTaSB5YSBrdXR1bWl3YSBuYSBwcm9ncmFtdSB5b3lvdGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjE3NDg3NjIxNzE2Mzc2OTk1NjIiPiJIdXJ1aHVzdSBwcm9ncmFtdSBrdXppbmR1YSBraW9sZXN1cmEgY2hhIGt1dGhpYml0aXNoYSBrdWhpZmFkaGl3YSBrd2EgbmFrYWxhIHJ1ZHVmdSBrYW1pbGkuIEhhaXR1bWl3aSBuYSBwcm9ncmFtdSB5b3lvdGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9IjIxNDg1NjM2MjgxNDAxOTMyMzEiPiJvbnllc2hhIG1hZGlyaXNoYSB5YXNpeW9pZGhpbmlzaHdhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4iSHVydWh1c3UgcHJvZ3JhbXUga3V1bmRhIG1hZGlyaXNoYSBhbWJheW8geWFuYW51aXdhIGt1dHVtaXdhIG5hIGt1c2FubyB5YSBtdHVtaWFqaSB5YSBtZnVtbyB3YSBuZGFuaS4gU2lvIHlhIG1hdHVtaXppIG5hIHByb2dyYW11IHphIGthd2FpZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9IjM1NDMzNDc5ODA4Mzk1MTg2MTMiPiJjaG9yYSBqdXUgeWEgcHJvZ3JhbXUgemluZ2luZSI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iSW5hcnVodXN1IGtpc2hpa2lsaWFqaSBrdXNodXJ1dGlzaGEga3VzYW5vIHlhIGtpd2FuZ28gY2hhIGp1dSBjaGEgaHVkdW1hIHlhIFZwbi4gSGFpcGFzd2kga3VoaXRhamlrYSBrd2EgcHJvZ3JhbXUgemEga2F3YWlkYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iZnVuZ2Ega3dhIG1hbmRoYXJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJJbmFydWh1c3Uga2lzaGlraWxpYWppIGt1c2h1cnV0aXNoYSBrd2Ega3VzYW5vIHlhIGtpd2FuZ28gY2hhIGp1dSBjaGEgbWFuZGhhcmkuIEhhaXBhc3dpIGthbXdlIGt1aGl0YWppa2Ega3dhIHByb2dyYW11IHphIGthd2FpZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJmdW5naXNoYSBrd2VueWUgbXdvbmVrYW5vIHdhIG1iYWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iSHVydWh1c3UgbXR1bWlhamkga3VqaWZ1bmdpYSBraW9sZXN1cmEgY2hhIGtpd2FuZ28gY2hhIGp1dSBjaGEgbXdvbmVrYW5vIHdhIG1iYWxpLiBIYWlwYXN3aSBrdWhpdGFqaWthIGt3YSBwcm9ncmFtdSB6YSBrYXdhaWRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ImZ1bmdhIGt3ZW55ZSBodWR1bWEgeWEgd2lkZ2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkluYXJ1aHVzdSBtbWlsaWtpIGt1c2h1cnV0aXNoYSBrdXNhbm8geWEga2l3YW5nbyBjaGEganV1IHlhIGh1ZHVtYSB5YSB3aWpldGkuIEhhaXBhc3dpIGt1aGl0YWppa2Ega3dhIHByb2dyYW11IHphIGthd2FpZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaml1bmdlIG5hIG1zaW1hbWl6aSB3YSBraWZhYSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iSW5hcnVodXN1IHByb2dyYW11IGt1dHVtaWEgdmlwZW5nZWUgdnlhIGtpd2FuZ28gY2hhIGNoaW5pIHZ5YSBTdXJmYWNlRmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJzb21hIGJhZmEgeWEgZnJlbXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iSW5hcnVodXN1IHByb2dyYW11IGt1c29tYSBtYXVkaHVpIHlhIGZyZW11IHlhIGJhZmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iZmlraWEgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdXR1bWlhIHZpcGVuZ2VsZSB2eWEgY2hpbmkgdnlhIElucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+InNhbmlkaSBtYW9ueWVzaG8geWEgV2lmaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdXNhbmlkaSBuYSBrdXVuZ2FuaWthIGt3ZW55ZSBtYW9ueWVzaG8geWEgV2lmaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ImRoaWJpdGkgbWFvbnllc2hvIHlhIFdpZmkiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4iSW5hcnVodXN1IHByb2dyYW11IGt1cmVrZWJpc2hhIG1pcGFuZ2lsaW8geWEgc2F1dGkga2lsYSBtYWhhbGkga2FtYSB2aWxlIHNhdXRpIG5hIG5pIGtpcGF6YSBzYXV0aSBraXBpIGFtYmFjaG8ga2luYXR1bWlrYSBrd2Ega3V0b2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiJrdXJla29kaSBzYXV0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdXJla29kaSBzYXV0aSBrd2Ega2luYXNhIHNhdXRpLiBJZGhpbmkgaGlpIGluYXJ1aHVzdSBwcm9ncmFtdSBrdXJla29kaSBzYXV0aSB3YWthdGkgd293b3RlIGJpbGEgeWEgdXRoaWJpdGlzaG8gd2Frby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+Im1hd2FzaWxpYW5vIHlhIHNpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+Ikh1cnVodXN1IHByb2dyYW11IGt1dHVtYSBhbXJpIGt3YSBTSU0uIEhpaSBuaSBoYXRhcmkgc2FuYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJLdXBpZ2EgcGljaGEgbmEga3VyZWtvZGkgdmlkZW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iSW5hcnVodXN1IHByb2dyYW11IGt1cGlnYSBwaWNoYSBuYSB2aWRlbyBrd2Ega2FtZXJhLiBLaWJhbGkgaGlraSBraW5hcnVodXN1IHByb2dyYW11IGt1dHVtaWEga2FtZXJhIGt3YSB3YWthdGkgd293b3RlIGJpbGEgdXRoaWJpdGlzaG8gd2Frby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiJ6aW1hIExFRCB5YSBraXNhbWJhemEga2lhc2hpcmlvIHdha2F0aSBrYW1lcmEgaW5hdHVtaWthIjwvc3RyaW5nPgpAQCAtNTUxLDcgKzU2Miw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iOTE3ODIyODUyNDUwNzYxMDQ4NiI+Imt1c29tYSBoYWxpIG5hIGtpdGFtYnVsaXNobyBjaGEgc2ltdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iMTYzOTIxMjc3MTgyNjEyNTUyOCI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdWZpa2lhIHZpcGVuZ2VsZSB2eWEgc2ltdSB2eWEga2lmYWEuIElkaGluaSBoaWkgaW5hcnVodXN1IHByb2dyYW11IGt1dGFtYnVhIG5hbWJhcmkgeWEgc2ltdSBuYSBraWZhYSwga2FtYSBzaW11IG5pIGFtaWxpZnUsIG5hIG5hbWJhcmkgeWEgbWJhbGkgaWxpeW91bmdhbmlzaHdhIGt3YSBzaW11LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiJ6dWlhIGtvbXB5dXRhIG5kb2dvIGRoaWRpIHlhIGt1bGFsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiJ6dWlhIHNpbXUgZGhpZGkgeWEga3VsYWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MzQ4MDE4Nzk0MTQ5NjEzMCI+Imt1enVpYSBzaW11IGlzaWxhbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdXp1aWEga29tcHl1dGEga2liYW8gIGt3ZW5kYSBrdWxhbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NTU5MTAwNjc3MzcyOTI4NzU0Ij4iSW5hcnVodXN1IHByb2dyYW11IGt1enVpYSBzaW11IGlzaWVuZGUga3VsYWxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdHJhbnNtaXRJciIgbXNnaWQ9Ijc1NDU4NTg1MDQyMzg1MzAxMDUiPiJzYW1iYXphIGluZnJhcmVkIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iTnl1bWJhbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iS2F6aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iTnlpbmdpbmV6byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJIYWt1bmEgcHJvZ3JhbXUgaWxpeW9wYXRpa2FuYSBpbGkga3VvbmEgYW53YW5pIGhpaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJbmdpemEgbXNpbWJvIHdhIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IkluZ2l6YSBQVUsgbmEgbXNpbWJvIG1weWEgd2EgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJNc2ltYm8gd2EgUFVLIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU29uZ2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IkNoYWd1YSBwcm9ncmFtdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IkhhaWt1d2V6YSBrdXppbmR1YSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iU2hpcmlraSBuYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJTaGlyaWtpIG5hIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iVXRhbWJvIHVuYW9zb25nYS4gR3VzYSAmYW1wOyBzaGlrYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJTb2dlemEganV1IGt3YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IlNvZ2V6YSBjaGluaSBrd2EgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlNvZ2V6YSBrdXNob3RvIGt3YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJTb2dlemEga3VsaWthIGt3YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iRnVuZ3VhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJLaW15YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJTYXV0aSBpbWV3YXNod2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlRhZnV0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IlBpdGlzaGEgaWxpIGt1ZnVuZ3VhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJDaG9tZWthIGtpZmFhIGNoYSBzYXV0aSBpbGkga3VzaWtpbGl6YSB2aWJvbnllIHZ5YSBuZW5vc2lyaSB2aWtpenVuZ3VtendhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+Ik51a3RhLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+Ik1mdW1vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJTYXV0aSB5YSBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlVvbnllc2hhamkgdXNpb3R1bWlhIHdheWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iTmltZW1hbGl6YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IlRvd2UgbGEgbWlkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IlVuZ2FuaXNoYSBrd2VueWUga2lmYWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJUdW1hIHNrcmluaSBrd2VueWUga2lmYWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJJbmF0YWZ1dGEgdmlmYWEuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJNaXBhbmdpbGlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+Ik9uZG9hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IkluYXRhbWJhemEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJJbmF1bmdhbmlzaGEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkluYXBhdGlrYW5hIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iVXdla2VsZWFqaSAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHNhbGFtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iT255ZXNobyBwYXNpd2F5YSBsaW1ldW5nYW5pc2h3YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJTa3JpbmkgaGlpIGluYW9ueWVzaGEga3dlbnllIGtpZmFhIGtpbmdpbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iSW5hdHVtYSBza3JpbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJJbmF1bmdhbmlzaHdhIG5hIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkluYXR1bWEgc2tyaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJJbWV1bmd3YW5pc2h3YSBuYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iVGVuZ2FuaXNoYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iU2ltdSB5YSBkaGFydXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iVW1lc2FoYXUgUnV3YXphIjwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU5LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+IkphcmlidSB0ZW5hIGJhYWRhIHlhIHNla3VuZGUgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iSmFyaWJ1IHRlbmEgYmFhZGF5ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJUZWxlemVzaGEga2lkb2xlIGt3YSBrYXNpIGNoaW5pIGt1YW56aWEganV1IGlsaSB1b25kb2tlIGt3ZW55ZSBza3Jpbmkga2FtaWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlRlbGV6ZXNoYSBraWRvbGUga3dhIGthc2kgY2hpbmkga3VhbnppYSBqdXUgaWxpIHVvbmRva2Uga3dlbnllIHNrcmluaSB6aW1hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iSW1la2FtaWxpa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJLaXRlbGV6aSBjaGEgbXZpcmluZ28gd2Egc2FhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJLaXRlbGV6aSBjaGEgbXZpcmluZ28gd2EgZGFraWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IkNoYWd1YSBzYWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJDaGFndWEgZGFraWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJHcmlkaSB5YSBtd2V6aSB5YSBzaWt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iT3JvZGhhIHlhIG1pYWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJDaGFndWEgbXdlemkgbmEgc2lrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IkNoYWd1YSBtd2FrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4ga2ltZWNoYWd1bGl3YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IGtpbWVmdXR3YSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKaW5kZXggNThmNTI2OC4uNjA5Y2JjMiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLguJ7guLTguKHguJ7guYzguKPguKvguLHguKogUFVLIOC4i+C4tuC5iOC4h+C4leC5ieC4reC4h+C5gOC4m+C5h+C4meC4leC4seC4p+C5gOC4peC4guC4reC4ouC5iOC4suC4h+C4meC5ieC4reC4oiA4IOC4q+C4peC4seC4gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLguIvguLTguKHguIHguLLguKPguYzguJTguILguK3guIfguITguLjguJPguJbguLnguIHguKXguYfguK3guIHguJTguYnguKfguKIgUFVLIOC4nuC4tOC4oeC4nuC5jOC4o+C4q+C4seC4qiBQVUsg4LmA4Lie4Li34LmI4Lit4Lib4Lil4LiU4Lil4LmH4Lit4LiBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i4Lie4Li04Lih4Lie4LmMIFBVSzIg4LmA4Lie4Li34LmI4Lit4Lii4LiB4LmA4Lil4Li04LiB4LiB4Liy4Lij4Lib4Li04LiU4LiB4Lix4LmJ4LiZ4LiL4Li04Lih4LiB4Liy4Lij4LmM4LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i4LmE4Lih4LmI4Liq4Liz4LmA4Lij4LmH4LiIIOC5gOC4m+C4tOC4lOC5g+C4iuC5ieC4geC4suC4o+C4peC5h+C4reC4geC4i+C4tOC4oS9SVUlNIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i4LiE4Li44LiT4Lie4Lii4Liy4Lii4Liy4Lih4LmE4LiU4LmJ4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDguITguKPguLHguYnguIfguIHguYjguK3guJnguJfguLXguYjguIvguLTguKHguIjguLDguJbguLnguIHguKXguYfguK3guIEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLguITguLjguJPguJ7guKLguLLguKLguLLguKHguYTguJTguYnguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4h+C4geC5iOC4reC4meC4l+C4teC5iOC4i+C4tOC4oeC4iOC4sOC4luC4ueC4geC4peC5h+C4reC4gSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i4Lir4Lih4Liy4Lii4LmA4Lil4LiC4Lic4Li54LmJ4LmC4LiX4Lij4LmA4LiC4LmJ4LiyIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLguK3guJnguLjguI3guLLguJXguYPguKvguYnguYDguIjguYnguLLguILguK3guIfguYDguIrguLfguYjguK3guKHguYLguKLguIfguIHguLHguJrguKrguYjguKfguJnguJXguLTguJTguJXguYjguK3guJzguLnguYnguYPguIrguYnguKPguLDguJTguLHguJrguKrguLnguIfguKrguLjguJTguILguK3guIfguJrguKPguLTguIHguLLguKMgVlBOIOC5hOC4oeC5iOC4hOC4p+C4o+C4leC5ieC4reC4h+C5g+C4iuC5ieC4quC4s+C4q+C4o+C4seC4muC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4l+C4seC5iOC4p+C5hOC4myI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLguYDguIrguLfguYjguK3guKHguYLguKLguIfguIHguLHguJrguKfguK3guKXguYDguJvguYDguJvguK3guKPguYwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuC4reC4meC4uOC4jeC4suC4leC5g+C4q+C5ieC4nOC4ueC5ieC5g+C4iuC5ieC5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C4geC4seC4muC4quC5iOC4p+C4meC4leC4tOC4lOC4leC5iOC4reC4nOC4ueC5ieC5g+C4iuC5ieC4o+C4sOC4lOC4seC4muC4quC4ueC4h+C4quC4uOC4lOC4guC4reC4h+C4p+C4reC4peC5gOC4m+C5gOC4m+C4reC4o+C5jCDguYTguKHguYjguITguKfguKPguJXguYnguK3guIfguYPguIrguYnguKrguLPguKvguKPguLHguJrguYHguK3guJvguJ7guKXguLTguYDguITguIrguLHguJnguJfguLHguYjguKfguYTguJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuC4nOC4ueC4geC4geC4seC4muC4iOC4reC5geC4quC4lOC4h+C4nOC4peC4o+C4sOC4ouC4sOC5hOC4geC4pSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IuC4reC4meC4uOC4jeC4suC4leC5g+C4q+C5ieC4nOC4ueC5ieC5g+C4iuC5ieC4nOC4ueC4geC4geC4seC4muC4reC4tOC4meC5gOC4l+C4reC4o+C5jOC5gOC4n+C4i+C4o+C4sOC4lOC4seC4muC4quC4ueC4h+C4quC4uOC4lOC4guC4reC4h+C4iOC4reC5geC4quC4lOC4h+C4nOC4peC4o+C4sOC4ouC4sOC5hOC4geC4pSDguIvguLbguYjguIfguYHguK3guJvguJ7guKXguLTguYDguITguIrguLHguJnguJfguLHguYjguKfguYTguJvguYTguKHguYjguIjguLPguYDguJvguYfguJnguJXguYnguK3guIfguYPguIrguYkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLguYDguIrguLfguYjguK3guKHguYLguKLguIfguIHguLHguJrguJrguKPguLTguIHguLLguKPguKfguLTguJTguYDguIjguYfguJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4Lic4Li54LmJ4LmD4LiK4LmJ4LmA4LiK4Li34LmI4Lit4Lih4LmC4Lii4LiH4LiB4Lix4Lia4Liq4LmI4Lin4LiZ4LiV4Li04LiU4LiV4LmI4Lit4Lic4Li54LmJ4LmD4LiK4LmJ4Lij4Liw4LiU4Lix4Lia4Liq4Li54LiH4Liq4Li44LiU4LiC4Lit4LiH4Lia4Lij4Li04LiB4Liy4Lij4Lin4Li04LiU4LmA4LiI4LmH4LiVIOC5hOC4oeC5iOC4hOC4p+C4o+C4leC5ieC4reC4h+C5g+C4iuC5ieC4quC4s+C4q+C4o+C4seC4muC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4l+C4seC5iOC4p+C5hOC4myI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+IuC4leC4tOC4lOC4leC5iOC4reC4geC4seC4muC4nOC4ueC5ieC4lOC4ueC5geC4peC4reC4uOC4m+C4geC4o+C4k+C5jCI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4LmD4LiK4LmJ4LiE4Li44LiT4Lil4Lix4LiB4Lip4LiT4Liw4Lij4Liw4LiU4Lix4Lia4LiV4LmI4Liz4LiC4Lit4LiHIFN1cmZhY2VGbGluZ2VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4i4Lit4LmI4Liy4LiZ4LmA4Lif4Lij4Lih4Lia4Lix4Lif4LmA4Lif4Lit4Lij4LmMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuC4reC4meC4uOC4jeC4suC4leC5g+C4q+C5ieC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4reC5iOC4suC4meC5gOC4meC4t+C5ieC4reC4q+C4suC5g+C4meC5gOC4n+C4o+C4oeC4muC4seC4n+C5gOC4n+C4reC4o+C5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IuC5gOC4guC5ieC4suC4luC4tuC4hyBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4LmB4Lit4Lib4LmD4LiK4LmJ4LiE4Li44LiT4Lil4Lix4LiB4Lip4LiT4Liw4Lij4Liw4LiU4Lix4Lia4LiV4LmI4Liz4LiC4Lit4LiHIElucHV0RmxpbmdlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LiB4Liy4Lij4LmB4Liq4LiU4LiH4Lic4Lil4LiU4LmJ4Lin4LiiIFdpRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLguK3guJnguLjguI3guLLguJXguYPguKvguYnguYHguK3guJvguIHguLPguKvguJnguJTguITguYjguLLguYHguKXguLDguYDguIrguLfguYjguK3guKHguJXguYjguK3guIHguLHguJrguIjguK3guYHguKrguJTguIfguJzguKUgV2lGaSDguYTguJTguYkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IuC4hOC4p+C4muC4hOC4uOC4oeC4geC4suC4o+C5geC4quC4lOC4h+C4nOC4peC4lOC5ieC4p+C4oiBXaUZpIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IuC4reC4meC4uOC4jeC4suC4leC5g+C4q+C5ieC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4m+C4o+C4seC4muC5gOC4m+C4peC4teC5iOC4ouC4meC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC5gOC4quC4teC4ouC4h+C4l+C4seC5ieC4h+C4q+C4oeC4lOC5hOC4lOC5iSDguYDguIrguYjguJkg4Lij4Liw4LiU4Lix4Lia4LmA4Liq4Li14Lii4LiH4LmB4Lil4Liw4Lil4Liz4LmC4Lie4LiH4LiX4Li14LmI4LiI4Liw4LmD4LiK4LmJ4LiH4Liy4LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLguJrguLHguJnguJfguLbguIHguYDguKrguLXguKLguIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiLguK3guJnguLjguI3guLLguJXguYPguKvguYnguYHguK3guJvguJ7guKXguLTguYDguITguIrguLHguJnguJrguLHguJnguJfguLbguIHguYDguKrguLXguKLguIfguJTguYnguKfguKLguYTguKHguYLguITguKPguYLguJ/guJkg4LiB4Liy4Lij4Lit4LiZ4Li44LiN4Liy4LiV4LiZ4Li14LmJ4LiX4Liz4LmD4Lir4LmJ4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4Liq4Liy4Lih4Liy4Lij4LiW4Lia4Lix4LiZ4LiX4Li24LiB4LmA4Liq4Li14Lii4LiH4LmE4LiU4LmJ4LiX4Li44LiB4LmA4Lih4Li34LmI4Lit4LmC4LiU4Lii4LmE4Lih4LmI4LiV4LmJ4Lit4LiH4Lij4Lit4LiB4Liy4Lij4Lii4Li34LiZ4Lii4Lix4LiZ4LiI4Liy4LiB4LiE4Li44LiTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiLguIHguLLguKPguKrguLfguYjguK3guKrguLLguKPguIHguLHguJogU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSI1NzI1MTU5NjU0Mjc5NjM5NDk4Ij4i4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4LmB4Lit4Lib4Liq4LmI4LiH4LiE4Liz4Liq4Lix4LmI4LiH4LmE4Lib4Lii4Lix4LiHIFNJTSDguIvguLbguYjguIfguK3guLHguJnguJXguKPguLLguKLguKHguLLguIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLguJbguYjguLLguKLguKDguLLguJ7guYHguKXguLDguKfguLTguJTguLXguYLguK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4LiW4LmI4Liy4Lii4Lig4Liy4Lie4LmB4Lil4Liw4Lin4Li04LiU4Li14LmC4Lit4LiU4LmJ4Lin4Lii4LiB4Lil4LmJ4Lit4LiH4LiW4LmI4Liy4Lii4Lij4Li54Lib4LiZ4Li14LmJIOC4geC4suC4o+C4reC4meC4uOC4jeC4suC4leC4meC4teC5ieC4iOC4sOC4l+C4s+C5g+C4q+C5ieC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4quC4suC4oeC4suC4o+C4luC5g+C4iuC5ieC4geC4peC5ieC4reC4h+C4luC5iOC4suC4ouC4o+C4ueC4m+C5hOC4lOC5ieC4l+C4uOC4geC5gOC4oeC4t+C5iOC4reC5guC4lOC4ouC5hOC4oeC5iOC4leC5ieC4reC4h+C4o+C4reC4geC4suC4o+C4ouC4t+C4meC4ouC4seC4meC4iOC4suC4geC4hOC4uOC4kyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IuC4m+C4tOC4lOC5hOC4n+C4quC4seC4jeC4jeC4suC4kyBMRUQg4LmA4Lih4Li34LmI4Lit4LmD4LiK4LmJ4LiH4Liy4LiZ4LiB4Lil4LmJ4Lit4LiHIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4i4Lir4LiZ4LmJ4Liy4LmB4Lij4LiBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IuC4l+C4teC5iOC4l+C4s+C4h+C4suC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i4Lit4Li34LmI4LiZ4LmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IuC5hOC4oeC5iOC4nuC4muC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4l+C4teC5iOC5g+C4iuC5ieC4lOC4ueC4l+C4teC5iOC4reC4ouC4ueC5iOC4leC4tOC4lOC4leC5iOC4reC4meC4teC5iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IuC4nuC4tOC4oeC4nuC5jOC4o+C4q+C4seC4qiBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLguJ7guLTguKHguJ7guYwgUFVLIOC5geC4peC4sOC4o+C4q+C4seC4qiBQSU4g4LmD4Lir4Lih4LmIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLguKPguKvguLHguKogUFVLIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLguJvguYnguK3guJkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLguYDguKXguLfguK3guIHguYHguK3guJvguJ7guKXguLTguYDguITguIrguLHguJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiLguYTguKHguYjguKrguLLguKHguLLguKPguJbguYDguJvguLTguJQgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IuC5geC4muC5iOC4h+C4m+C4seC4meC4geC4seC4miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLguYHguJrguYjguIfguJvguLHguJnguJTguYnguKfguKIgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLguJfguLXguYjguIjguLHguJrguKrguLPguKvguKPguLHguJrguYDguKXguLfguYjguK3guJkg4LmB4LiV4Liw4LiE4LmJ4Liy4LiH4LmE4Lin4LmJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuC5gOC4peC4t+C5iOC4reC4meC4guC4tuC5ieC4meC5gOC4nuC4t+C5iOC4rSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLguYDguKXguLfguYjguK3guJnguKXguIfguYDguJ7guLfguYjguK0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i4LmA4Lil4Li34LmI4Lit4LiZ4LmE4Lib4LiX4Liy4LiH4LiL4LmJ4Liy4Lii4LmA4Lie4Li34LmI4LitIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLguYDguKXguLfguYjguK3guJnguYTguJvguJfguLLguIfguILguKfguLLguYDguJ7guLfguYjguK0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLguJvguKXguJTguKXguYfguK3guIEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4LiB4Lil4LmJ4Lit4LiHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuC4m+C4tOC4lOC5gOC4quC4teC4ouC4hyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLguYDguJvguLTguJTguYDguKrguLXguKLguIciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuC4hOC5ieC4meC4q+C4siI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IuC4geC4p+C4suC4lOC5gOC4nuC4t+C5iOC4reC4m+C4peC4lOC4peC5h+C4reC4gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLguYDguKrguLXguKLguJrguIrguLjguJTguKvguLnguJ/guLHguIfguYDguJ7guLfguYjguK3guJ/guLHguIfguYDguKrguLXguKLguIfguYDguKHguLfguYjguK3guJ7guLTguKHguJ7guYzguKPguKvguLHguKrguJzguYjguLLguJkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLguYDguITguKPguLfguYjguK3guIfguKvguKHguLLguKLguIjguLjguJQiPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLguKPguLDguJrguJoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IuC5gOC4quC4teC4ouC4h+C4muC4peC4ueC4l+C4ueC4mCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i4LiB4Liy4Lij4LmB4Liq4LiU4LiH4Lic4Lil4LmB4Lia4Lia4LmE4Lij4LmJ4Liq4Liy4LiiIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IuC5gOC4quC4o+C5h+C4iOC4quC4tOC5ieC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IuC5gOC4reC4suC4leC5jOC4nuC4uOC4leC4quC4t+C5iOC4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i4LmA4LiK4Li34LmI4Lit4Lih4LiV4LmI4Lit4LiB4Lix4Lia4Lit4Li44Lib4LiB4Lij4LiT4LmMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4i4Liq4LmI4LiH4Lir4LiZ4LmJ4Liy4LiI4Lit4LmE4Lib4Lii4Lix4LiH4Lit4Li44Lib4LiB4Lij4LiT4LmMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i4LiB4Liz4Lil4Lix4LiH4LiE4LmJ4LiZ4Lir4Liy4Lit4Li44Lib4LiB4Lij4LiT4LmM4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4LiyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IuC4ouC4geC5gOC4peC4tOC4geC4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLguIHguLPguKXguLHguIfguKrguYHguIHguJkuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLguIHguLPguKXguLHguIfguYDguIrguLfguYjguK3guKHguJXguYjguK0uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IuC4nuC4o+C5ieC4reC4oeC5g+C4iuC5ieC4h+C4suC4mSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IuC4geC4suC4o+C4p+C4suC4h+C4i+C5ieC4reC4mSAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIOC4m+C4peC4reC4lOC4oOC4seC4oiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i4LmA4LiK4Li34LmI4Lit4Lih4LiV4LmI4Lit4LiB4Liy4Lij4LmB4Liq4LiU4LiH4Lic4Lil4LmB4Lia4Lia4LmE4Lij4LmJ4Liq4Liy4Lii4Lit4Lii4Li54LmIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IuC4q+C4meC5ieC4suC4iOC4reC4meC4teC5ieC4geC4s+C4peC4seC4h+C5geC4quC4lOC4h+C4muC4meC4reC4uOC4m+C4geC4o+C4k+C5jOC4reC4t+C5iOC4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiLguIHguLPguKXguLHguIfguKrguYjguIfguKvguJnguYnguLLguIjguK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLguIHguLPguKXguLHguIfguYDguIrguLfguYjguK3guKHguJXguYjguK3guYTguJvguKLguLHguIcgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4i4LiB4Liz4Lil4Lix4LiH4Liq4LmI4LiH4Lir4LiZ4LmJ4Liy4LiI4LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiLguYDguIrguLfguYjguK3guKHguJXguYjguK3guIHguLHguJogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+IOC5geC4peC5ieC4pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLguKvguKLguLjguJTguYDguIrguLfguYjguK3guKHguJXguYjguK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuC4q+C4oeC4suC4ouC5gOC4peC4guC4ieC4uOC4geC5gOC4ieC4tOC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IuC4peC4t+C4oeC4o+C4ueC4m+C5geC4muC4muC5g+C4iuC5iOC4q+C4o+C4t+C4reC5hOC4oeC5iCI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY2MCwxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiH4LmD4LiZ4Lig4Liy4Lii4Lir4Lil4Lix4LiHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IuC4geC4p+C4suC4lOC4meC4tOC5ieC4p+C4iOC4suC4geC4muC4meC4peC4h+C4peC5iOC4suC4h+C5gOC4nuC4t+C5iOC4reC4reC4reC4geC4iOC4suC4geC5guC4q+C4oeC4lOC5gOC4leC5h+C4oeC4q+C4meC5ieC4suC4iOC4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i4LmA4Liq4Lij4LmH4LiI4Liq4Li04LmJ4LiZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4i4LiV4Lix4Lin4LmA4Lil4Li34LmI4Lit4LiZ4Lir4Lih4Li44LiZ4Lij4Liw4Lia4Li44LiK4Lix4LmI4Lin4LmC4Lih4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLguJXguLHguKfguYDguKXguLfguYjguK3guJnguKvguKHguLjguJnguKPguLDguJrguLjguJnguLLguJfguLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i4LmA4Lil4Li34Lit4LiB4LiK4Lix4LmI4Lin4LmC4Lih4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4i4LmA4Lil4Li34Lit4LiB4LiZ4Liy4LiX4Li1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLguJXguLLguKPguLLguIfguYDguJTguLfguK3guJnguILguK3guIfguKfguLHguJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLguKPguLLguKLguIHguLLguKPguJvguLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IuC5gOC4peC4t+C4reC4geC5gOC4lOC4t+C4reC4meC5geC4peC4sOC4p+C4seC4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IuC5gOC4peC4t+C4reC4geC4m+C4tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiLguYDguKXguLfguK3guIEgPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4i4Lil4LiaIDx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IOC5geC4peC5ieC4pyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKaW5kZXggYmMzOTZlZC4uYmU1NGY3YSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJNYWctdHlwZSBuZyBQVUsgbmEgbWF5IDggbnVtYmVybyBvIG1hcyBtYWhhYmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+Ik5hLVBVSy1sb2NrIGFuZyBpeW9uZyBTSU0gY2FyZC4gSS10eXBlIGFuZyBQVUsgY29kZSB1cGFuZyBpLXVubG9jayBpdG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iSS10eXBlIGFuZyBQVUsyIHVwYW5nIGktdW5ibG9jayBhbmcgU0lNIGNhcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iSGluZGkgbWF0YWd1bXBheSwgaS1lbmFibGUgYW5nIFNJTS9SVUlNIExvY2suIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iTWF5cm9vbiBrYW5nIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiAobmEpIG5hdGl0aXJhbmcgcGFnc3Vib2sgYmFnbyBtYS1sb2NrIGFuZyBTSU0uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iTWF5cm9vbiBrYW5nIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiAobmEpIG5hdGl0aXJhbmcgcGFnc3Vib2sgYmFnbyBtYS1sb2NrIGFuZyBTSU0uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJQYXBhc29rIG5hIENhbGxlciBJRCI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iUGluYXBheWFnYW4gYW5nIG1heS1oYXdhayBuYSBzdW1haWxhbGltIHNhIG5hbmd1bmd1bmFuZyBpbnRlcmZhY2Ugbmcgc2VyYmlzeW8gbmcgVnBuLiBIaW5kaSBrYWlsYW5tYW4gZGFwYXQgbmEga2FpbGFuZ2FuaW4gcGFyYSBzYSBub3JtYWwgbmEgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4ic3VtYWlsYWxpbSBzYSB3YWxscGFwZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IlBpbmFwYXlhZ2FuIGFuZyBtYXktaGF3YWsgbmEgc3VtYWlsYWxpbSBzYSBuYW5ndW5ndW5hbmcgaW50ZXJmYWNlIG5nIGlzYW5nIHdhbGxwYXBlci4gSGluZGkga2FpbGFubWFuIGRhcGF0IG5hIGthaWxhbmdhbmluIHBhcmEgc2Egbm9ybWFsIG5hIGFwcHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJtYWdwYXNha2xhdyBzYSBpc2FuZyByZW1vdGUgbmEgZGlzcGxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IkJpbmliaWd5YW5nLWRhYW4gYW5nIG1heS1oYXdhayBuYSBtYXNha2xhdyBhbmcgcGluYWthbWF0YWFzIG5hIGFudGFzIG5nIGludGVyZmFjZSBuZyBpc2FuZyByZW1vdGUgbmEgZGlzcGxheS4gSGluZGkgZGFwYXQga2FpbGFubWFuIGthaWxhbmdhbmluIG5nIG5vcm1hbCBuYSBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+Iml0YWxpIHNhIHNlcmJpc3lvIG5nIHdpZGdldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJQaW5hcGF5YWdhbiBhbmcgbWF5LWhhd2FrIG5hIHN1bWFpbGFsaW0gc2EgbmFuZ3VuZ3VuYW5nIGludGVyZmFjZSBuZyBzZXJiaXN5byBuZyB3aWRnZXQuIEhpbmRpIGthaWxhbm1hbiBkYXBhdCBuYSBrYWlsYW5nYW5pbiBwYXJhIHNhIG5vcm1hbCBuYSBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+Im1ha2lwYWctdWduYXkgc2EgdGFnYXBhbmdhc2l3YSBuZyBkZXZpY2UiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlBpbmFwYXlhZ2FuIGFuZyBhcHAgbmEgZ2FtaXRpbiBhbmcgbWFiYWJhbmcgYW50YXMgbmEgbWdhIHRhbXBvayBuZyBTdXJmYWNlRmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJiYXNhaGluIGFuZyBidWZmZXIgbmcgZnJhbWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iUGluYXBheWFnYW4gYW5nIGFwcCBuYSBiYXNhaGluIGFuZyBuaWxhbGFtYW4gbmcgYnVmZmVyIG5nIGZyYW1lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImktYWNjZXNzIGFuZyBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iTmFnYmliaWdheS1kYWFuIHNhIGFwcCBuYSBndW1hbWl0IG5nIG1nYSB0YW1wb2sgbmcgSW5wdXRGbGluZ2VyIHNhIG1hYmFiYW5nIGFudGFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ibWFnLWNvbmZpZ3VyZSBuZyBtZ2EgV2lmaSBkaXNwbGF5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iUGluYXBheWFnYW4gYW5nIGFwcCBuYSBtYWctY29uZmlndXJlIGF0IGt1bW9uZWt0YSBzYSBtZ2EgV2lmaSBkaXNwbGF5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4ibWFna29udHJvbCBuZyBtZ2EgV2lmaSBkaXNwbGF5Ijwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IlBpbmFwYXlhZ2FuIGFuZyBhcHAgbmEgYmFndWhpbiBhbmcgbWdhIHBhbmRhaWdkaWdhbmcgc2V0dGluZyBuZyBhdWRpbyBnYXlhIG5nIHZvbHVtZSBhdCBrdW5nIGFsaW5nIHNwZWFrZXIgYW5nIGdpbmFnYW1pdCBwYXJhIHNhIG91dHB1dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+Im1hZy1yZWNvcmQgbmcgYXVkaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiJQaW5hcGF5YWdhbiBhbmcgYXBwIG5hIG1hZy1yZWNvcmQgbmcgYXVkaW8gZ2FtaXQgYW5nIG1pa3JvcG9uby4gUGluYXBheWFnYW4gbmcgcGFoaW50dWxvdCBuYSBpdG8gYW5nIGFwcCBuYSBtYWctcmVjb3JkIG5nIGF1ZGlvIGFudW1hbmcgb3JhcyBuYW5nIHdhbGEgbmcgaXlvbmcga3VtcGlybWFzeW9uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4icGFnLXV1c2FwIHNhIHNpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IlBpbmFwYWhpbnR1bHV0YW5nIG1hZ3BhZGFsYSBhbmcgYXBwIG5nIG1nYSBjb21tYW5kIHNhIFNJTS4gTmFwYWthcGFuZ2FuaWIgbml0by4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJrdW11aGEgbmcgbWdhIGxhcmF3YW4gYXQgdmlkZW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iUGluYXBheWFnYW4gYW5nIGFwcCBuYSBrdW11aGEgbmcgbWdhIGxhcmF3YW4gYXQgdmlkZW8gZ2FtaXQgYW5nIGNhbWVyYS4gUGluYXBheWFnYW4gbmcgcGFoaW50dWxvdCBuYSBpdG8gYW5nIGFwcCBuYSBnYW1pdGluIGFuZyBjYW1lcmEgYW51bWFuZyBvcmFzIG5hbmcgd2FsYSBuZyBpeW9uZyBrdW1waXJtYXN5b24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4iaS1kaXNhYmxlIGFuZyBMRUQgbmEgdGFnYXBhZ3BhaGl3YXRpZyBrYXBhZyBnaW5hZ2FtaXQgYW5nIGNhbWVyYSI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IkhvbWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iVHJhYmFobyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iSWJhIHBhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IldhbGFuZyBuYWtpdGFuZyBhcHBsaWNhdGlvbiB1cGFuZyBtYXRpbmduYW4gYW5nIGNvbnRhY3QgbmEgaXRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkktdHlwZSBhbmcgUElOIGNvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJJLXR5cGUgYW5nIFBVSyBhdCBiYWdvbmcgUElOIGNvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyBjb2RlIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlB1bWlsaSBuZyBpc2FuZyBhcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJIaW5kaSBtYWlsdW5zYWQgYW5nIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJJYmFoYWdpIHNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkliYWhhZ2kgc2EgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJIYXdha2FuIHNhIHBhZy1zbGlkZS4gUGluZHV0aW4gbmFuZyBtYXRhZ2FsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJNYWctc2xpZGUgcGF0YWFzIHBhcmEgc2EgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ik1hZy1zbGlkZSBwYWJhYmEgcGFyYSBzYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iTWFnLXNsaWRlIHBha2FsaXdhIHBhcmEgc2EgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJNYWctc2xpZGUgcGFrYW5hbiBwYXJhIHNhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkktdW5sb2NrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkNhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJUYWhpbWlrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+Ikktb24gYW5nIHR1bm9nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJNYWdoYW5hcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+Ik1hZy1zd2lwZSB1cGFuZyBpLXVubG9jay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iTWFnLXBsdWcgaW4gbmcgaXNhbmcgaGVhZHNldCB1cGFuZyBtYXJpbmlnIGFuZyBtZ2EgcGFzc3dvcmQga2V5IG5hIGJpbmFiYW5nZ2l0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IkRvdC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTeXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkF1ZGlvIHNhIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iV2lyZWxlc3MgZGlzcGxheSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJUYXBvcyBuYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik91dHB1dCBuZyBtZWRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iS3Vtb25la3RhIHNhIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IkktY2FzdCBhbmcgc2NyZWVuIHNhIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Ik5hZ2hhaGFuYXAgbmcgbWdhIGRldmljZeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+Ik1nYSBTZXR0aW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IklkaXNrb25la3RhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+Ik5hZ3NhLXNjYW4uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJLdW11a29uZWt0YS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iQXZhaWxhYmxlIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iT3ZlcmxheSAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHNlY3VyZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iTmFrYWtvbmVrdGEgYW5nIHdpcmVsZXNzIG5hIGRpc3BsYXkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iTHVtYWxhYmFzIGFuZyBzY3JlZW4gbmEgaXRvIHNhIGlzYSBwYW5nIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJLaW5hLWNhc3QgYW5nIHNjcmVlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Ikt1bW9rb25la3RhIHNhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IktpbmEtY2FzdCBhbmcgc2NyZWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJOYWtha29uZWt0YSBzYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iQWxpc2luIHNhIHBhZ2tha2Frb25la3RhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJFbWVyZ2VuY3kgbmEgdGF3YWciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJOYWthbGltdXRhbiBhbmcgUGF0dGVybiI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1OSwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiJTdWJ1a2FuIG11bGkgc2EgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2VnIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlN1YnVrYW5nIG11bGkgc2EgaWJhbmcgcGFna2FrYXRhb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iTWFnLXN3aXBlIHBhYmFiYSB1cGFuZyBsdW1hYmFzIHNhIGZ1bGwgc2NyZWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+Ik1hZy1zd2lwZSBwYWJhYmEgbXVsYSBzYSBpdGFhcyB1cGFuZyBsdW1hYmFzIHNhIGZ1bGwgc2NyZWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iVGFwb3MgbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJQYWJpbG9nIG5hIHNsaWRlciBuZyBtZ2Egb3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iUGFiaWxvZyBuYSBzbGlkZXIgbmcgbWdhIG1pbnV0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJQdW1pbGkgbmcgbWdhIG9yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJQdW1pbGkgbmcgbWdhIG1pbnV0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iR3JpZCBuZyBtZ2EgYXJhdyBheW9uIHNhIGJ1d2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTGlzdGFoYW4gbmcgdGFvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iUHVtaWxpIG5nIGJ1d2FuIGF0IGFyYXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJQdW1pbGkgbmcgdGFvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiJOYXBpbGkgYW5nIDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+IlRpbmFuZ2dhbCBhbmcgPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCmluZGV4IDk5YTEzN2IuLjM4M2JhNjIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iOCB2ZXlhIGRhaGEgdXp1biBiYXNhbWFrbMSxIGJpciBQVUsga29kdSB5YXrEsW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlNJTSBrYXJ0xLFuxLF6xLFuIFBVSyBraWxpZGkgZGV2cmVkZS4gS2lsaWRpIGHDp21hayBpw6dpbiBQVUsga29kdW51IHlhesSxbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJFbmdlbGxlbmVuIFNJTSBrYXJ0xLEgYcOnbWFrIGnDp2luIFBVSzIga29kdW51IHlhesSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJCYcWfYXLEsXPEsXouIFNJTS9SVUlNIEtpbGlkaW5pIGV0a2lubGXFn3RpcmluLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IlNJTSBraWxpdGxlbm1lZGVuIMO2bmNlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBkZW5lbWUgaGFra8SxbsSxeiBrYWxkxLEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iU0lNIGtpbGl0bGVubWVkZW4gw7ZuY2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGRlbmVtZSBoYWtrxLFuxLF6IGthbGTEsS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IkdlbGVuIMOHYcSfcsSxIEtpbWxpxJ9pIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJDaWhhesSxbiBzYWhpYmluZSBiaXIgVlBOIGhpem1ldGluaW4gZW4gw7xzdCBkw7x6ZXkgYXJhecO8esO8bmUgYmHEn2xhbm1hIGl6bmkgdmVyaXIuIE5vcm1hbCB1eWd1bGFtYWxhcmRhIGhpw6diaXIgemFtYW4gZ2VyZWsgZHV5dWxtYXouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ImJpciBkdXZhciBrYcSfxLFkxLFuYSB0YWJpIGvEsWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkNpaGF6xLFuIHNhaGliaW5lLCBkdXZhciBrYcSfxLFkxLFuxLFuIGVuIMO8c3QgZMO8emV5IGFyYXnDvHrDvG5lIGJhxJ9sYW5tYSBpem5pIHZlcmlyLiBOb3JtYWwgdXlndWxhbWFsYXJkYSBoacOnYmlyIHphbWFuIGdlcmVrIGR1eXVsbWF6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4idXphayBla3JhbmEgYmHEn2xhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IsSwemluIHNhaGliaW5lLCBiaXIgdXphayBla3JhbsSxbiBlbiDDvHN0IGTDvHpleSBhcmF5w7x6w7xuZSBiYcSfbGFubWEgaXpuaSB2ZXJpci4gTm9ybWFsIHV5Z3VsYW1hbGFyZGEgaGnDp2JpciB6YW1hbiBnZXJlayBkdXl1bG1hei4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJiaXIgd2lkZ2V0IGhpem1ldGluZSBiYcSfbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iQ2loYXrEsW4gc2FoaWJpbmUgYmlyIHdpZGdldCBoaXptZXRpbmluIGVuIMO8c3QgZMO8emV5IGFyYXnDvHrDvG5lIGJhxJ9sYW5tYSBpem5pIHZlcmlyLiBOb3JtYWwgdXlndWxhbWFsYXJkYSBoacOnYmlyIHphbWFuIGdlcmVrIGR1eXVsbWF6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImJpciBjaWhheiB5w7ZuZXRpY2lzaSBpbGUgZXRraWxlxZ9pbWRlIGJ1bHVuIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJVeWd1bGFtYXlhLCBTdXJmYWNlRmxpbmdlclwnYSBhaXQgZMO8xZ/DvGsgZMO8emV5IMO2emVsbGlrbGVyaSBrdWxsYW5tYSBpem5pIHZlcmlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IsOnZXLDp2V2ZSBhcmFiZWxsZcSfaW5pIG9rdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJVeWd1bGFtYXlhLCDDp2Vyw6dldmUgYXJhYmVsbGXEn2luaW4gacOnZXJpxJ9pbmkgb2t1bWEgaXpuaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXJcJ2EgZXJpxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iVXlndWxhbWF5YSwgYWx0IGTDvHpleSBJbnB1dEZsaW5nZXIgw7Z6ZWxsaWtsZXJpbmkga3VsbGFubWEgaXpuaSB2ZXJpci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IkthYmxvc3V6IGVrcmFubGFyxLEgeWFwxLFsYW5kxLFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iVXlndWxhbWF5YSBrYWJsb3N1eiBla3JhbmxhcsSxIHlhcMSxbGFuZMSxcm1hIHZlIGJ1bmxhcmEgYmHEn2xhbm1hIGl6bmkgdmVyaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJLYWJsb3N1eiBla3JhbmxhcsSxIGRlbmV0bGUiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4iVXlndWxhbWF5YSBzZXMgZMO8emV5aSB2ZSBzZXMgw6fEsWvEscWfxLEgacOnaW4ga3VsbGFuxLFsYW4gaG9wYXJsw7ZyIGdpYmkgZ2VuZWwgc2VzIGF5YXJsYXLEsW7EsSBkZcSfacWfdGlybWUgaXpuaSB2ZXJpci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+InNlcyBrYXlkZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiJVeWd1bGFtYXlhIG1pa3JvZm9ubGEgc2VzIGtheWRldG1lIGl6bmkgdmVyaXIuIEJ1IGl6aW4sIHV5Z3VsYW1hbsSxbiBpc3RlZGnEn2kgemFtYW4gb25hecSxbsSxeiBvbG1hZGFuIHNlcyBrYXlkZXRtZXNpbmUgb2xhbmFrIHNhxJ9sYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiJzaW0gaWxldGnFn2ltaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IlV5Z3VsYW1hbsSxbiBTSU0ga2FydGEga29tdXQgZ8O2bmRlcm1lc2luZSBpemluIHZlcmlyLiBCdSBpemluIMOnb2sgdGVobGlrZWxpZGlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+InJlc2ltIMOnZWttZSB2ZSBnw7Zyw7xudMO8IGtheWRldG1lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlV5Z3VsYW1heWEga2FtZXJheWxhIGZvdG/En3JhZiB2ZSB2aWRlbyDDp2VrbWUgaXpuaSB2ZXJpci4gQnUgaXppbiwgdXlndWxhbWFuxLFuIHNpemluIG9uYXnEsW7EsXogb2xtYWRhbiBpc3RlZGnEn2kgemFtYW4ga2FtZXJhecSxIGt1bGxhbm1hc8SxbmEgb2xhbmFrIHNhxJ9sYXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4iS2FtZXJhIGt1bGxhbsSxbWRhIGlrZW4gaWxldGltIGfDtnN0ZXJnZXNpIExFRFwnaW5pIGRldnJlIGTEscWfxLEgYsSxcmFrIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iRXYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4ixLDFnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iRGnEn2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IkJ1IGtpxZ9peWkgZ8O2csO8bnTDvGxleWVjZWsgdXlndWxhbWEgYnVsdW5hbWFkxLEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iUElOIGtvZHVudSB5YXrEsW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsgdmUgeWVuaSBQSU4ga29kdW51IHlhesSxbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIGtvZHUiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiLDnHN0S3JrdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkdpcmnFnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IkJpciB1eWd1bGFtYSBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IGJhxZ9sYXTEsWxhbWFkxLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLFnnVudW5sYSBwYXlsYcWfOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IGlsZSBwYXlsYcWfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IktheWFuIHR1dG1hIHllcmkuIERva3VudW4gdmUgYmFzxLFsxLEgdHV0dW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiBpw6dpbiB5dWthcsSxIGtheWTEsXLEsW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IGnDp2luIGHFn2HEn8SxIGtheWTEsXLEsW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IGnDp2luIHNvbGEga2F5ZMSxcsSxbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IGnDp2luIHNhxJ9hIGtheWTEsXLEsW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJLaWxpZGkgYcOnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTZXNzaXoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU2VzIGHDp8SxayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iQXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iS2lsaWRpIGHDp21hayBpw6dpbiBrYXlkxLFyxLFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLFnmlmcmUgdHXFn2xhcsSxbsSxbiBzZXNsaSBva3VubWFzxLFuxLEgZGlubGVtZWsgacOnaW4gbWlrcm9mb25sdSBrdWxha2zEsWsgdGFrxLFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+Ik5va3RhLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlNpc3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoIHNlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iS2FibG9zdXogZWtyYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iVGFtYW1sYW5kxLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNZWR5YSDDp8Sxa8SxxZ/EsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iQ2loYXphIGJhxJ9sYW7EsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJFa3JhbsSxIGNpaGF6YSB5YXnEsW5sYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJDaWhheiBhcmFuxLF5b3LigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJBeWFybGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkJhxJ9sYW50xLF5xLEga2VzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlRhcmFuxLF5b3IuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJCYcSfbGFuxLFsxLF5b3IuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+Ikt1bGxhbsSxbGFiaWxpciI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlllciBQYXlsYcWfxLFtxLEgTm8uIDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBnw7x2ZW5saSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iS2FibG9zdXogZWtyYW5hIGJhxJ9sYW5kxLEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iQnUgZWtyYW4gYmHFn2thIGJpciBjaWhhemRhIGfDtnN0ZXJpbGl5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iRWtyYW4geWF5xLFubGFuxLF5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4gYmHEn2xhbnTEsXPEsSB5YXDEsWzEsXlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkVrcmFuIHlhecSxbmxhbsSxeW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4gYmHEn2xhbnTEsXPEsSB5YXDEsWxkxLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iQmHEn2xhbnTEsXnEsSBrZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IkFjaWwgZHVydW0gw6dhxJ9yxLFzxLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJEZXNlbmkgVW51dHR1bnV6IG11PyI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1OSwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYW5peWUgacOnaW5kZSB0ZWtyYXIgZGVuZXlpbiI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJEYWhhIHNvbnJhIHRla3JhciBkZW5leWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlRhbSBla3JhbmRhbiDDp8Sxa21hayBpw6dpbiBhxZ9hxJ/EsXlhIGjEsXpsxLFjYSBrYXlkxLFyxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlRhbSBla3JhbmRhbiDDp8Sxa21hayBpw6dpbiB5dWthcsSxZGFuIGHFn2HEn8SxeWEgaMSxemzEsWNhIGtheWTEsXLEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJCaXR0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IlNhYXQga2F5ZMSxcm1hIMOnZW1iZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJEYWtpa2Ega2F5ZMSxcm1hIMOnZW1iZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlNhYXRpIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IkRha2lrYXnEsSBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IkF5xLFuIGfDvG5sZXJpIHRhYmxvc3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJZxLFsIGxpc3Rlc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IkF5xLEgdmUgZ8O8bsO8IHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlnEsWzEsSBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IHNlw6dpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gc2lsaW5kaSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKaW5kZXggNjFmNDVlYy4uNjMzNmFiNiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLQktCy0LXQtNGW0YLRjCBQVUst0LrQvtC0INGW0LcgOCDQsNCx0L4g0LHRltC70YzRiNC1INGG0LjRhNGALiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0t0LrQsNGA0YLQsCDQt9Cw0LHQu9C+0LouIFBVSy3QutC+0LTQvtC8LiDQktCy0LXQtNGW0YLRjCBQVUst0LrQvtC0LCDRidC+0LEg0ZfRlyDRgNC+0LfQsdC70L7Qui4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLQktCy0LXQtC4gUFVLMiwg0YnQvtCxINGA0L7Qt9Cx0LsuIFNJTS3QutCw0YDRgtGDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+ItCf0L7QvNC40LvQutCwLiDQo9Cy0ZbQvNC60L3RltGC0Ywg0LHQu9C+0LrRg9Cy0LDQvdC90Y8gU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i0KMg0LLQsNGBINC30LDQu9C40YjQuNC70LDRgdGMIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRgdC/0YDQvtCx0LAuINCf0ZbRgdC70Y8g0YbRjNC+0LPQviBTSU0t0LrQsNGA0YLRgyDQsdGD0LTQtSDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC+LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+ItCjINCy0LDRgSDQt9Cw0LvQuNGI0LjQu9C+0YHRjyDRgdGC0ZbQu9GM0LrQuCDRgdC/0YDQvtCxOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uINCf0ZbRgdC70Y8g0YbRjNC+0LPQviBTSU0t0LrQsNGA0YLRgyDQsdGD0LTQtSDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i0JLRhdGW0LTQvS4g0ZbQtC4g0LDQsdC+0L3QtdC90YLQsCI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i0JTQvtC30LLQvtC70Y/RlCDQstC70LDRgdC90LjQutC+0LLRliDQv9GA0LjQsuKAmdGP0LfRg9Cy0LDRgtC40YHRjyDQtNC+INGW0L3RgtC10YDRhNC10LnRgdGDINCy0LXRgNGF0L3RjNC+0LPQviDRgNGW0LLQvdGPINGB0LvRg9C20LHQuCBWUE4uINCd0ZbQutC+0LvQuCDQvdC1INC30LDRgdGC0L7RgdC+0LLRg9GU0YLRjNGB0Y8g0LTQu9GPINC30LLQuNGH0LDQudC90LjRhSDQv9GA0L7Qs9GA0LDQvC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i0L/RgNC40LLigJnRj9C30LDRgtC4INC00L4g0YTQvtC90L7QstC+0LPQviDQvNCw0LvRjtC90LrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i0JTQvtC30LLQvtC70Y/RlCDQstC70LDRgdC90LjQutGDINC/0YDQuNCy4oCZ0Y/Qt9GD0LLQsNGC0LjRgdGPINC00L4g0ZbQvdGC0LXRgNGE0LXQudGB0YMg0LLQtdGA0YXQvdGM0L7Qs9C+INGA0ZbQstC90Y8g0YTQvtC90L7QstC+0LPQviDQvNCw0LvRjtC90LrQsC4g0J3RltC60L7Qu9C4INC90LUg0LfQsNGB0YLQvtGB0L7QstGD0ZTRgtGM0YHRjyDQtNC70Y8g0LfQstC40YfQsNC50L3QuNGFINC/0YDQvtCz0YDQsNC8LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4i0L/RgNC40LLigJnRj9C30YPQstCw0YLQuNGB0Y8g0LTQviDQstGW0LTQtNCw0LvQtdC90L7Qs9C+INC10LrRgNCw0L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+ItCU0L7Qt9Cy0L7Qu9GP0ZQg0LLQu9Cw0YHQvdC40LrQvtCy0ZYg0L/RgNC40LLigJnRj9C30YPQstCw0YLQuNGB0Y8g0LTQviDRltC90YLQtdGA0YTQtdC50YHRgyDQstC10YDRhdC90YzQvtCz0L4g0YDRltCy0L3RjyDQstGW0LTQtNCw0LvQtdC90L7Qs9C+INC10LrRgNCw0L3QsC4g0J3RltC60L7Qu9C4INC90LUg0LfQsNGB0YLQvtGB0L7QstGD0ZTRgtGM0YHRjyDQtNC70Y8g0LfQstC40YfQsNC50L3QuNGFINC/0YDQvtCz0YDQsNC8LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ItC/0YDQuNCyXCfRj9C30YPQstCw0YLQuCDQtNC+INGB0LvRg9C20LHQuCDQstGW0LTQttC10YLRltCyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+ItCU0L7Qt9Cy0L7Qu9GP0ZQg0LLQu9Cw0YHQvdC40LrQvtCy0ZYg0L/RgNC40LLigJnRj9C30YPQstCw0YLQuNGB0Y8g0LTQviDRltC90YLQtdGA0YTQtdC50YHRgyDQstC10YDRhdC90YzQvtCz0L4g0YDRltCy0L3RjyDRgdC70YPQttCx0Lgg0LLRltC00LbQtdGC0ZbQsi4g0J3RltC60L7Qu9C4INC90LUg0LfQsNGB0YLQvtGB0L7QstGD0ZTRgtGM0YHRjyDQtNC70Y8g0LfQstC40YfQsNC50L3QuNGFINC/0YDQvtCz0YDQsNC8LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ItCy0LfQsNGU0LzQvtC00ZbRj9GC0Lgg0Lcg0LDQtNC80ZbQvS4g0L/RgNC40YHRgtGA0L7RjiI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i0JTQvtC30LLQvtC70Y/RlCDQv9GA0L7Qs9GA0LDQvNGWINCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuCDQvdC40LfRjNC60L7RgNGW0LLQvdC10LLRliDRhNGD0L3QutGG0ZbRlyBTdXJmYWNlRmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLRh9C40YLQsNGC0Lgg0YTRgNC10LnQvC3QsdGD0YTQtdGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+ItCU0L7Qt9Cy0L7Qu9GP0ZQg0L/RgNC+0LPRgNCw0LzRliDRh9C40YLQsNGC0Lgg0LLQvNGW0YHRgiDQsdGD0YTQtdGA0LAg0LrQsNC00YDRltCyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ItC+0YLRgNC40LzRg9Cy0LDRgtC4INC00L7RgdGC0YPQvyDQtNC+IElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLQlNC+0LfQstC+0LvRj9GUINC/0YDQvtCz0YDQsNC80ZYg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC90LjQt9GM0LrQvtGA0ZbQstC90LXQstGWINGE0YPQvdC60YbRltGXIElucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ItC90LDQu9Cw0YjRgtGD0LLQsNGC0Lgg0LXQutGA0LDQvdC4IFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4i0JTQvtC30LLQvtC70Y/RlCDQv9GA0L7Qs9GA0LDQvNGWINC90LDQu9Cw0YjRgtC+0LLRg9Cy0LDRgtC4INC10LrRgNCw0L3QuCBXaS1GaSDRliDQv9GW0LTigJnRlNC00L3Rg9Cy0LDRgtC40YHRjyDQtNC+INC90LjRhS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ItC60LXRgNGD0LLQsNGC0Lgg0LXQutGA0LDQvdCw0LzQuCBXaS1GaSI8L3N0cmluZz4KQEAgLTQ5NSw2ICs1MDQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLQlNC+0LfQstC+0LvRj9GUINC/0YDQvtCz0YDQsNC80ZYg0LfQvNGW0L3RjtCy0LDRgtC4INC30LDQs9Cw0LvRjNC90ZYg0L3QsNC70LDRiNGC0YPQstCw0L3QvdGPINC30LLRg9C60YMsINGP0Lot0L7RgiDQs9GD0YfQvdGW0YHRgtGMINGWINC00LjQvdCw0LzRltC6LCDRj9C60LjQuSDQstC40LrQvtGA0LjRgdGC0L7QstGD0ZTRgtGM0YHRjyDQtNC70Y8g0LLQuNCy0L7QtNGDINGB0LjQs9C90LDQu9GDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4i0LfQsNC/0LjRgS3RgtC4INCw0YPQtNGW0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiLQlNC+0LfQstC+0LvRj9GUINC/0YDQvtCz0YDQsNC80ZYg0LfQsNC/0LjRgdGD0LLQsNGC0Lgg0LfQstGD0Log0LfQsCDQtNC+0L/QvtC80L7Qs9C+0Y4g0LzRltC60YDQvtGE0L7QvdCwLiDQotCw0LrQuNC5INC00L7Qt9Cy0ZbQuyDQtNCw0ZQg0L/RgNC+0LPRgNCw0LzRliDQt9C80L7Qs9GDINCx0YPQtNGMLdC60L7Qu9C4INC30LDQv9C40YHRg9Cy0LDRgtC4INC30LLRg9C6INCx0LXQtyDQstCw0YjQvtCz0L4g0L/RltC00YLQstC10YDQtNC20LXQvdC90Y8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjExODAyNjU4Nzk0NjQ4OTMwMjkiPiLQutC+0LzRg9C90ZbQutCw0YbRltGPINGW0LcgU0lNLdC60LDRgNGC0L7RjiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+ItCU0L7Qt9Cy0L7Qu9GP0ZQg0L/RgNC+0LPRgNCw0LzRliDQvdCw0LTRgdC40LvQsNGC0Lgg0LrQvtC80LDQvdC00Lgg0L3QsCBTSU0t0LrQsNGA0YLRgy4g0KbQtSDQtNGD0LbQtSDQvdC10LHQtdC30L/QtdGH0L3Qvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLRhNC+0YLQvtCz0YDQsNGELiDRgtCwINC30L3RltC80LDRgtC4INCy0ZbQtNC10L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i0JTQvtC30LLQvtC70Y/RlCDQv9GA0L7Qs9GA0LDQvNGWINGE0L7RgtC+0LPRgNCw0YTRg9Cy0LDRgtC4INGC0LAg0LfQvdGW0LzQsNGC0Lgg0LLRltC00LXQviDQt9CwINC00L7Qv9C+0LzQvtCz0L7RjiDQutCw0LzQtdGA0LguINCi0LDQutC40Lkg0LTQvtC30LLRltC7INC00LDRlCDQv9GA0L7Qs9GA0LDQvNGWINC30LzQvtCz0YMg0LHRg9C00Ywt0LrQvtC70Lgg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC60LDQvNC10YDRgyDQsdC10Lcg0LLQsNGI0L7Qs9C+INC/0ZbQtNGC0LLQtdGA0LTQttC10L3QvdGPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ItCy0LjQvNC40LrQsNGC0Lgg0YHQstGW0YLQu9C+0LTRltC+0LTQvdC40Lkg0ZbQvdC00LjQutCw0YLQvtGAINC/0LXRgNC10LTQsNCy0LDQvdC90Y8sINC60L7Qu9C4INCy0LjQutC+0YDQuNGB0YLQvtCy0YPRlNGC0YzRgdGPINC60LDQvNC10YDQsCI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+ItCT0L7Qu9C+0LLQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+ItCg0L7QsdC+0YfQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i0IbQvdGI0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4i0J3QtSDQt9C90LDQudC00LXQvdC+INC/0YDQvtCz0YDQsNC80YMg0LTQu9GPINC/0LXRgNC10LPQu9GP0LTRgyDRhtGM0L7Qs9C+INC60L7QvdGC0LDQutGC0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i0JLQstC10LTRltGC0YwgUElOLdC60L7QtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+ItCS0LLQtdC00ZbRgtGMIFBVSy3QutC+0LQg0ZYg0L3QvtCy0LjQuSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUst0LrQvtC0Ijwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+ItCS0LjQsdGA0LDRgtC4INC/0YDQvtCz0YDQsNC80YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiLQndC1INCy0LTQsNC70L7RgdGPINC30LDQv9GD0YHRgtC40YLQuCDQv9GA0L7Qs9GA0LDQvNGDIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLQndCw0LTRltGB0LvQsNGC0Lgg0YfQtdGA0LXQtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLQndCw0LTRltGB0LvQsNGC0Lgg0YfQtdGA0LXQtyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+ItCS0LrQsNC30ZbQstC90LjQui3Qv9C+0LLQt9GD0L3QvtC6LiDQotC+0YDQutC90ZbRgtGM0YHRjyDQuSDRg9GC0YDQuNC80YPQudGC0LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+ItCf0YDQvtCy0LXQtNGW0YLRjCDQv9Cw0LvRjNGG0LXQvCDRg9Cz0L7RgNGDLCDRidC+0LEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+ItCf0YDQvtCy0LXQtNGW0YLRjCDQv9Cw0LvRjNGG0LXQvCDRg9C90LjQtywg0YnQvtCxIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLQn9GA0L7QstC10LTRltGC0Ywg0L/QsNC70YzRhtC10Lwg0LvRltCy0L7RgNGD0YcsINGJ0L7QsSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+ItCf0YDQvtCy0LXQtNGW0YLRjCDQv9Cw0LvRjNGG0LXQvCDQv9GA0LDQstC+0YDRg9GHLCDRidC+0LEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i0KDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+ItCa0LDQvNC10YDQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLQkdC10Lcg0LfQstGD0LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLQo9Cy0ZbQvNC60L3Rg9GC0Lgg0LfQstGD0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+ItCf0L7RiNGD0LoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLQk9C+0YDRgtCw0LnRgtC1LCDRidC+0LEg0YDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLQn9GW0LTQutC70Y7Rh9GW0YLRjCDQs9Cw0YDQvdGW0YLRg9GA0YMsINGJ0L7QsSDQv9GA0L7RgdC70YPRhdCw0YLQuCDQstGW0LTRgtCy0L7RgNC10L3RliDQstCz0L7Qu9C+0YEg0YHQuNC80LLQvtC70Lgg0L/QsNGA0L7Qu9GPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+ItCa0YDQsNC/0LrQsC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLQodC40YHRgtC10LzQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i0JDRg9C00ZbQviBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+ItCR0LXQt9C00YDQvtGC0L7QstC40Lkg0LXQutGA0LDQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLQktC40LLRltC0INC80LXQtNGW0LAt0LTQsNC90LjRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i0J/RltC04oCZ0ZTQtNC90LDRgtC40YHRjyDQtNC+INC/0YDQuNGB0YLRgNC+0Y4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLQotGA0LDQvdGB0LvRjtCy0LDRgtC4INC10LrRgNCw0L0g0L3QsCDQv9GA0LjRgdGC0YDRltC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i0J/QvtGI0YPQuiDQv9GA0LjRgdGC0YDQvtGX0LLigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLQndCw0LvQsNGI0YLRg9Cy0LDQvdC90Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i0JLRltC04oCZ0ZTQtNC90LDRgtC40YHRjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLQodC60LDQvdGD0LLQsNC90L3Rjy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+ItCX4oCZ0ZTQtNC90LDQvdC90Y8uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+ItCU0L7RgdGC0YPQv9C90L4iPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLQndCw0LrQu9Cw0LTQsNC90L3RjyDihJY8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPtGFPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsINCx0LXQt9C/0LXRh9C90LjQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i0JHQtdC30LTRgNC+0YLQvtCy0LjQuSDQtdC60YDQsNC9INC/0ZbQtOKAmdGU0LTQvdCw0L3QviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLQptC10Lkg0LXQutGA0LDQvSDQstGW0LTQvtCx0YDQsNC20LDRlNGC0YzRgdGPINC90LAg0ZbQvdGI0L7QvNGDINC/0YDQuNGB0YLRgNC+0ZciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4i0KLRgNCw0L3RgdC70Y7QstCw0L3QvdGPINC10LrRgNCw0L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiDigJMg0L/RltC04oCZ0ZTQtNC90LDQvdC90Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLQotGA0LDQvdGB0LvRjtCy0LDQvdC90Y8g0LXQutGA0LDQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTINC/0ZbQtOKAmdGU0LTQvdCw0L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLQktGW0LTigJnRlNC00L3QsNGC0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+ItCV0LrRgdGC0YDQtdC90LjQuSDQstC40LrQu9C40LoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLQndC1INC/0LDQvOKAmdGP0YLQsNGOINC60LvRjtGHIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjYwLDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLQodC/0YDQvtCx0YPQudGC0LUg0L/RltC30L3RltGI0LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i0J/RgNC+0LLQtdC00ZbRgtGMINC/0LDQu9GM0YbQtdC8INC30LLQtdGA0YXRgyDQstC90LjQtywg0YnQvtCxINCy0LjQudGC0Lgg0Lcg0L/QvtCy0L3QvtC10LrRgNCw0L3QvdC+0LPQviDRgNC10LbQuNC80YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLQktC40LHRltGAINCz0L7QtNC40L0g0L3QsCDRhtC40YTQtdGA0LHQu9Cw0YLRliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4i0JLQuNCx0ZbRgCDRhdCy0LjQu9C40L0g0L3QsCDRhtC40YTQtdGA0LHQu9Cw0YLRliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLQktC40LHQtdGA0ZbRgtGMINCz0L7QtNC40L3QuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+ItCS0LjQsdC10YDRltGC0Ywg0YXQstC40LvQuNC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+ItCS0ZbQutC90L4g0LLQuNCx0L7RgNGDINC00LDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i0JzQtdC90Y4g0LLQuNCx0L7RgNGDINGA0L7QutGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLQktC40LHQtdGA0ZbRgtGMINC80ZbRgdGP0YbRjCDRliDQtNC10L3RjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+ItCS0LjQsdC10YDRltGC0Ywg0YDRltC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+ItCS0LjQsdGA0LDQvdC+OiA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDQstC40LTQsNC70LXQvdC+Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAppbmRleCA4Mjc1MmI3Li4zZmIxMGE5IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+Ik5o4bqtcCBQVUsgY8OzIHThu6sgOCBz4buRIHRy4bufIGzDqm4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlRo4bq7IFNJTSBj4bunYSBi4bqhbiDEkcOjIGLhu4sga2jDs2EgUFVLLiBOaOG6rXAgbcOjIFBVSyDEkeG7gyBt4bufIGtow7NhIHRo4bq7IFNJTSDEkcOzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+Ik5o4bqtcCBtw6MgUFVLMiDEkeG7gyBi4buPIGNo4bq3biB0aOG6uyBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iS2jDtG5nIHRow6BuaCBjw7RuZywga8OtY2ggaG/huqF0IHTDrW5oIG7Eg25nIGtow7NhIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IkLhuqFuIGPDsm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGzhuqduIHRo4butIHRyxrDhu5tjIGtoaSBTSU0gYuG7iyBraMOzYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJC4bqhbiBjw7JuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBs4bqnbiB0aOG7rSB0csaw4bubYyBraGkgU0lNIGLhu4sga2jDs2EuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJT4buRIGfhu41pIMSR4bq/biI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iQ2hvIHBow6lwIGNo4bunIHPhu58gaOG7r3UgbGnDqm4ga+G6v3QgduG7m2kgZ2lhbyBkaeG7h24gY+G6pXAgY2FvIG5o4bqldCBj4bunYSBk4buLY2ggduG7pSBWcG4uIEtow7RuZyBj4bqnbiB0aGnhur90IGNobyBjw6FjIOG7qW5nIGThu6VuZyB0aMO0bmcgdGjGsOG7nW5nLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJsacOqbiBr4bq/dCB24bubaSBow6xuaCBu4buBbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iQ2hvIHBow6lwIGNo4bunIHPhu58gaOG7r3UgbGnDqm4ga+G6v3QgduG7m2kgZ2lhbyBkaeG7h24gY+G6pXAgY2FvIG5o4bqldCBj4bunYSBow6xuaCBu4buBbi4gS2jDtG5nIGPhuqduIHRoaeG6v3QgY2hvIGPDoWMg4bupbmcgZOG7pW5nIHRow7RuZyB0aMaw4budbmcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJsacOqbiBr4bq/dCB24bubaSBtw6BuIGjDrG5oIHThu6sgeGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJDaG8gcGjDqXAgY2jhu6cgc+G7nyBo4buvdSBsacOqbiBr4bq/dCB24bubaSBnaWFvIGRp4buHbiBj4bqlcCBjYW8gbmjhuqV0IGPhu6dhIG3DoG4gaMOsbmggdOG7qyB4YS4gS2jDtG5nIGPhuqduIHRoaeG6v3QgY2hvIGPDoWMg4bupbmcgZOG7pW5nIHRow7RuZyB0aMaw4budbmcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4ibGnDqm4ga+G6v3QgduG7m2kgZOG7i2NoIHbhu6UgdGnhu4duIMOtY2ggY29uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkNobyBwaMOpcCBjaOG7pyBz4bufIGjhu691IGxpw6puIGvhur90IHbhu5tpIGdpYW8gZGnhu4duIGPhuqVwIGNhbyBuaOG6pXQgY+G7p2EgZOG7i2NoIHbhu6UgdGnhu4duIMOtY2ggY29uLiBLaMO0bmcgY+G6p24gdGhp4bq/dCBjaG8gY8OhYyDhu6luZyBk4bulbmcgdGjDtG5nIHRoxrDhu51uZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJ0xrDGoW5nIHTDoWMgduG7m2kgcXXhuqNuIHRy4buLIHZpw6puIHRoaeG6v3QgYuG7iyI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iQ2hvIHBow6lwIOG7qW5nIGThu6VuZyBz4butIGThu6VuZyBjw6FjIHTDrW5oIG7Eg25nIFN1cmZhY2VGbGluZ2VyIGPhuqVwIMSR4buZIHRo4bqlcC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLEkeG7jWMgYuG7mSDEkeG7h20ga2h1bmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iQ2hvIHBow6lwIOG7qW5nIGThu6VuZyDEkeG7jWMgbuG7mWkgZHVuZyBj4bunYSBi4buZIMSR4buHbSBraHVuZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJ0cnV5IGPhuq1wIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJDaG8gcGjDqXAg4bupbmcgZOG7pW5nIHPhu60gZOG7pW5nIGPDoWMgdMOtbmggbsSDbmcgSW5wdXRGbGluZ2VyIGPhuqVwIMSR4buZIHRo4bqlcC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IsSR4buLbmggY+G6pXUgaMOsbmggbcOgbiBow6xuaCBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IkNobyBwaMOpcCDhu6luZyBk4bulbmcgxJHhu4tuaCBj4bqldSBow6xuaCB2w6Aga+G6v3QgbuG7kWkgduG7m2kgbcOgbiBow6xuaCBXaS1GaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+Imtp4buDbSBzb8OhdCBtw6BuIGjDrG5oIFdpLUZpIjwvc3RyaW5nPgpAQCAtNDk1LDYgKzUwNCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IkNobyBwaMOpcCDhu6luZyBk4bulbmcgc+G7rWEgxJHhu5VpIGPDoGkgxJHhurd0IMOibSB0aGFuaCBjaHVuZyBjaOG6s25nIGjhuqFuIG5oxrAgw6JtIGzGsOG7o25nIHbDoCBsb2EgbsOgbyDEkcaw4bujYyBz4butIGThu6VuZyBjaG8gdGhp4bq/dCBi4buLIHJhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4iZ2hpIMOibSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IkNobyBwaMOpcCDhu6luZyBk4bulbmcgZ2hpIMOibSBi4bqxbmcgbWljcsO0LiBRdXnhu4FuIG7DoHkgY2hvIHBow6lwIOG7qW5nIGThu6VuZyBnaGkgw6JtIGLhuqV0IGvhu7MgbMO6YyBuw6BvIG3DoCBraMO0bmcgY+G6p24gc+G7sSB4w6FjIG5o4bqtbiBj4bunYSBi4bqhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+Imxpw6puIGzhuqFjIHF1YSBzaW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJDaG8gcGjDqXAg4bupbmcgZOG7pW5nIGfhu61pIGzhu4duaCDEkeG6v24gU0lNLiBWaeG7h2MgbsOgeSBy4bqldCBuZ3V5IGhp4buDbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJjaOG7pXAg4bqjbmggdsOgIHF1YXkgdmlkZW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iQ2hvIHBow6lwIOG7qW5nIGThu6VuZyBjaOG7pXAg4bqjbmggdsOgIHF1YXkgdmlkZW8gYuG6sW5nIG3DoXkg4bqjbmguIFF1eeG7gW4gbsOgeSBjaG8gcGjDqXAg4bupbmcgZOG7pW5nIHPhu60gZOG7pW5nIG3DoXkg4bqjbmggYuG6pXQga+G7syBsw7pjIG7DoG8gbcOgIGtow7RuZyBj4bqnbiBz4buxIHjDoWMgbmjhuq1uIGPhu6dhIGLhuqFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+InbDtCBoaeG7h3UgaMOzYSB0w61uaCBuxINuZyBwaMOhdCDEkcOobiBMRUQgY2jhu4kgYsOhbyBraGkgbcOheSDhuqNuaCDEkWFuZyDEkcaw4bujYyBz4butIGThu6VuZyI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+Ik5ow6AgcmnDqm5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IkPGoSBxdWFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJLaMOhYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiJLaMO0bmcgdMOsbSB0aOG6pXkg4bupbmcgZOG7pW5nIG7DoG8gxJHhu4MgeGVtIGxpw6puIGjhu4cgbsOgeS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJOaOG6rXAgbcOjIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+Ik5o4bqtcCBQVUsgdsOgIG3DoyBQSU4gbeG7m2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+Ik3DoyBQVUsiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iQ2jhu41uIG3hu5l0IOG7qW5nIGThu6VuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Iktow7RuZyB0aOG7gyBraOG7n2kgY2jhuqF5IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJDaGlhIHPhursgduG7m2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iQ2hpYSBz4bq7IHbhu5tpIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iVGF5IHRyxrDhu6N0LiBDaOG6oW0gJmFtcDsgZ2nhu68uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlRyxrDhu6N0IGzDqm4gxJHhu4MgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IlRyxrDhu6N0IHh14buRbmcgxJHhu4MgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlRyxrDhu6N0IHNhbmcgdHLDoWkgxJHhu4MgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJUcsaw4bujdCBzYW5nIHBo4bqjaSDEkeG7gyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJN4bufIGtow7NhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+Ik3DoXkg4bqjbmgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iSW0gbOG6t25nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkLhuq10IMOibSB0aGFuaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iVMOsbSBraeG6v20iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJUcsaw4bujdCDEkeG7gyBt4bufIGtow7NhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJD4bqvbSB0YWkgbmdoZSDEkeG7gyBuZ2hlIGPDoWMga2jDs2EgbeG6rXQga2jhuql1IMSRxrDhu6NjIMSR4buNYy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJE4bqldSBjaOG6pW0uIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iSOG7hyB0aOG7kW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLDgm0gdGhhbmggQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJIaeG7g24gdGjhu4sga2jDtG5nIGTDonkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iWG9uZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IsSQ4bqndSByYSBwaMawxqFuZyB0aeG7h24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+Ikvhur90IG7hu5FpIHbhu5tpIHRoaeG6v3QgYuG7iyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IlRydXnhu4FuIG3DoG4gaMOsbmggdOG7m2kgdGhp4bq/dCBi4buLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4ixJBhbmcgdMOsbSBraeG6v20gdGhp4bq/dCBi4buL4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iQ8OgaSDEkeG6t3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iTmfhuq90IGvhur90IG7hu5FpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IsSQYW5nIHF1w6l0Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4ixJBhbmcga+G6v3QgbuG7kWkuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+Ikto4bqjIGThu6VuZyI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Ikzhu5twIHBo4bunICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IiwgYW4gdG/DoG4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+Ikhp4buDbiB0aOG7iyBraMO0bmcgZMOieSDEkcOjIMSRxrDhu6NjIGvhur90IG7hu5FpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+Ik3DoG4gaMOsbmggbsOgeSDEkWFuZyBoaeG7g24gdGjhu4sgdHLDqm4gdGhp4bq/dCBi4buLIGtow6FjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IlRydXnhu4FuIG3DoG4gaMOsbmgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLEkGFuZyBr4bq/dCBu4buRaSB24bubaSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJUcnV54buBbiBtw6BuIGjDrG5oIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiLEkMOjIGvhur90IG7hu5FpIHbhu5tpIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJOZ+G6r3Qga+G6v3QgbuG7kWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IkN14buZYyBn4buNaSBraOG6qW4gY+G6pXAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLEkMOjIHF1w6puIGjDrG5oIjwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU5LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+IkjDo3kgdGjhu60gbOG6oWkgc2F1IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGdpw6J5IjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IkjDo3kgdGjhu60gbOG6oWkgc2F1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlZ14buRdCB04burIHRyw6puIHh14buRbmcgxJHhu4MgdGhvw6F0IHRvw6BuIG3DoG4gaMOsbmgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iVnXhu5F0IHThu6sgdHLDqm4geHXhu5FuZyDEkeG7gyB0aG/DoXQgdG/DoG4gbcOgbiBow6xuaC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IlhvbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJUaGFuaCB0csaw4bujdCBnaeG7nSBow6xuaCB0csOybiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iVGhhbmggdHLGsOG7o3QgcGjDunQgaMOsbmggdHLDsm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iQ2jhu41uIGdp4budIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iQ2jhu41uIHBow7p0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJMxrDhu5tpIG5nw6B5IHRoZW8gdGjDoW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iRGFuaCBzw6FjaCBuxINtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJDaOG7jW4gdGjDoW5nIHbDoCBuZ8OgeSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IkNo4buNbiBuxINtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+IsSQw6MgY2jhu41uIDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+IsSQw6MgeMOzYSA8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAppbmRleCBkYmZkMDM5Li5kNGQ0YzUxIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4i6K+36ZSu5YWl6Iez5bCRIDgg5L2N5pWw5a2X55qEIFBVSyDnoIHjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i5bey5a+5IFNJTSDljaHov5vooYwgUFVLIOeggemUgeWumuOAgumUruWFpSBQVUsg56CB5bCG5YW26Kej6ZSB44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i6L6T5YWlIFBVSzIg56CB5Lul6Kej6ZSBIFNJTSDljaHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiLlpLHotKXvvIzor7flkK/nlKggU0lNL1JVSU0g5Y2h6ZSB5a6a6K6+572u44CCIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i5oKo6L+Y5pyJPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+5qyh5bCd6K+V5py65Lya44CC5aaC5p6c5LuN54S25aSx6LSl77yMU0lNIOWNoeWwhuiiq+mUgeWumuOAgiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IuaCqOi/mOaciTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuasoeWwneivleacuuS8muOAguWmguaenOS7jeeEtuWksei0pe+8jFNJTSDljaHlsIbooqvplIHlrprjgIIiPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IuadpeeUteaYvuekuiI8L3N0cmluZz4KQEAgLTEyMiw3ICsxMjcsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRTY2hlbWUiIG1zZ2lkPSI1MDE1NzMwODEyOTA2MTkyMjA4Ij4i5LiN5pSv5oyB6K+l5Y2P6K6u44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmFpbGVkU3NsSGFuZHNoYWtlIiBtc2dpZD0iOTY1NDk2MDYwMDA2NTg2NDEiPiLml6Dms5Xlu7rnq4vlronlhajov57mjqXjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4i5peg5rOV5omT5byA572R6aG177yM5Zug5Li66K+l572R5Z2A5piv5peg5pWI55qE44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiLml6Dms5Xorr/pl67or6Xmlofku7bjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlIiBtc2dpZD0iMjE3MDc4ODUxNTA1MjU1ODY3NiI+IuaXoOazleS9v+eUqOivpeaWh+S7tuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZpbGVOb3RGb3VuZCIgbXNnaWQ9IjYyMDM4NTY2MTIwNDI2NTUwODQiPiLmib7kuI3liLDor7fmsYLnmoTmlofku7bjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUb29NYW55UmVxdWVzdHMiIG1zZ2lkPSIxMjM1Mzk2OTI3MDg3MTg4MjUzIj4i5q2j5Zyo5aSE55CG55qE6K+35rGC5aSq5aSa77yM6K+356iN5ZCO6YeN6K+V44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODk2NzcxMDAyNTAzNjE2MzgyMiI+IueZu+W9lSA8eGxpZmY6ZyBpZD0iQUNDT1VOVCI+JTEkczwveGxpZmY6Zz4g5pe25Ye66ZSZIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLlhYHorrjnlKjmiLfnu5HlrprliLAgVlBOIOacjeWKoeeahOmhtue6p+aOpeWPo+OAguaZrumAmuW6lOeUqOe7neS4jemcgOimgeatpOadg+mZkOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLnu5HlrprliLDlo4HnurgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuWFgeiuuOeUqOaIt+e7keWumuWIsOWjgee6uOeahOmhtue6p+aOpeWPo+OAguaZrumAmuW6lOeUqOe7neS4jemcgOimgeatpOadg+mZkOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4i57uR5a6a6Iez6L+c56iL5pi+56S65bGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i5YWB6K645bqU55So57uR5a6a6Iez6L+c56iL5pi+56S65bGP55qE6aG257qn5o6l5Y+j44CC5pmu6YCa5bqU55So57ud5LiN6ZyA6KaB5q2k5p2D6ZmQ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i57uR5a6a5Yiw5bCP6YOo5Lu25pyN5YqhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IuWFgeiuuOW6lOeUqOe7keWumuWIsOWwj+mDqOS7tuacjeWKoeeahOmhtue6p+aOpeWPo+OAguaZrumAmuW6lOeUqOe7neS4jemcgOimgeatpOadg+mZkOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+IuS4juiuvuWkh+euoeeQhuWZqOS6pOS6kiI8L3N0cmluZz4KQEAgLTQ3NywxNCArNDg0LDE2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLlhYHorrjlupTnlKjkvb/nlKggU3VyZmFjZUZsaW5nZXIg5L2O57qn5Yqf6IO944CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4i6K+75Y+W5bin57yT5Yay5Yy6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuWFgeiuuOW6lOeUqOivu+WPluW4p+e8k+WGsuWMuueahOWGheWuueOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IuS9v+eUqCBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i5YWB6K645bqU55So5L2/55SoIElucHV0RmxpbmdlciDlupXlsYLlip/og73jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IumFjee9riBXTEFOIOaYvuekuuiuvuWkhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuWFgeiuuOW6lOeUqOmFjee9ruW5tui/nuaOpeWIsCBXTEFOIOaYvuekuuiuvuWkh+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i5o6n5Yi2IFdMQU4g5pi+56S66K6+5aSHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+IuWFgeiuuOW6lOeUqOaOp+WItiBXTEFOIOaYvuekuuiuvuWkh+eahOWfuuehgOWKn+iDveOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjg1NzEzNDQ5ODQwMjM0NjcwOCI+IuaNleiOt+mfs+mikei+k+WHuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiLlhYHorrjor6XlupTnlKjmjZXojrflkozph43lrprlkJHpn7PpopHovpPlh7rjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb0hvdHdvcmQiIG1zZ2lkPSIxODkwNTUzOTM1NjUwMzQ5ODA4Ij4i5qOA5rWL5YWz6ZSu6K+NIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjkxNTE4MDc5NTgxNTMwNTY4MTAiPiLlhYHorrjlupTnlKjmjZXojrfpn7PpopHku6Xkvr/mo4DmtYvor63pn7PmjIfku6TnmoTlhbPplK7or43jgILmjZXojrfmk43kvZzkvJrlnKjlkI7lj7Dov5vooYzvvIzkvYbkuI3kvJrlpqjnoo3lhbbku5bpn7PpopHmjZXojrflt6XlhbfvvIjkvovlpoLmkYTlg4/mnLrvvInjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb0hvdHdvcmQiIG1zZ2lkPSIxODkwNTUzOTM1NjUwMzQ5ODA4Ij4i5ZCv5Yqo5oyH5Luk5qOA5rWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjkxNTE4MDc5NTgxNTMwNTY4MTAiPiLlhYHorrjlupTnlKjmjZXojrfpn7PpopHku6Xkvr/mo4DmtYvor63pn7PlkK/liqjmjIfku6TjgILmjZXojrfmk43kvZzkvJrlnKjlkI7lj7Dov5vooYzvvIzkvYbkuI3kvJrlpqjnoo3lhbbku5bpn7PpopHmjZXojrflt6XlhbfvvIjkvovlpoLmkYTlg4/mnLrvvInjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjIyNDY4Mjg3NzM1ODkwOTQwMjMiPiLmjZXojrfop4bpopHovpPlh7oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIzNTk0ODE2NTgwMzQxNDk4NjAiPiLlhYHorrjor6XlupTnlKjmjZXojrflkozph43lrprlkJHop4bpopHovpPlh7rjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9Ijc4MTUzOTg5NjkzMDMzODIwMTYiPiLmjZXojrflronlhajop4bpopHovpPlh7oiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i5YWB6K646K+l5bqU55So5L+u5pS55YWo5bGA6Z+z6aKR6K6+572u77yM5L6L5aaC6Z+z6YeP5ZKM55So5LqO6L6T5Ye655qE5oms5aOw5Zmo44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLlvZXpn7MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiLlhYHorrjor6XlupTnlKjkvb/nlKjpuqblhYvpo47lvZXliLbpn7PpopHjgILmraTmnYPpmZDlj6/orqnor6XlupTnlKjkuI3nu4/mgqjnmoTnoa7orqTljbPlj6/pmo/ml7blvZXliLbpn7PpopHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+IlNJTeWNoemAmuS/oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IuWFgeiuuOW6lOeUqOWQkVNJTeWNoeWPkemAgeWRveS7pO+8iOatpOadg+mZkOWFt+acieW+iOmrmOeahOWNsemZqeaAp++8ieOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+IuaLjeaRhOeFp+eJh+WSjOinhumikSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLlhYHorrjor6XlupTnlKjkvb/nlKjnm7jmnLrmi43mkYTnhafniYflkozop4bpopHjgILmraTmnYPpmZDlj6/orqnor6XlupTnlKjpmo/ml7bkvb/nlKjnm7jmnLrvvIzogIzml6DpnIDmgqjnmoTnoa7orqTjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiLlnKjnm7jmnLrkvb/nlKjov4fnqIvkuK3lgZznlKjkvKDovpPmjIfnpLrnga8gTEVEIjwvc3RyaW5nPgpAQCAtNTQ1LDcgKzU1Niw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+Iuiuv+mXruajgOWFpeWxnuaApyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNDAyNDUyNjk2ODYzMDE5NDEyOCI+IuWFgeiuuOW6lOeUqOWvueeZu+iusOacjeWKoeS4iuS8oOeahOWxnuaAp+aLpeacieivu+WPli/lhpnlhaXmnYPpmZDjgILmma7pgJrlupTnlKjkuI3lupTkvb/nlKjmraTmnYPpmZDjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiLpgInmi6nlsI/pg6jku7YiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kR2FkZ2V0IiBtc2dpZD0iODI2MTMyNjkzODU5OTA0OTI5MCI+IuWFgeiuuOW6lOeUqOWRiuefpeezu+e7n+WTquS6m+Wwj+mDqOS7tuWPr+S+m+WTquS4quW6lOeUqOS9v+eUqOOAguaLpeacieatpOadg+mZkOeahOW6lOeUqOWPr+WQkeWFtuS7luW6lOeUqOaOiOS6iOWvueS4quS6uui1hOaWmeeahOiuv+mXruadg+mZkOOAguaZrumAmuW6lOeUqOS4jeW6lOS9v+eUqOatpOadg+mZkOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4i5YWB6K645bqU55So5ZGK55+l57O757uf5ZOq5Lqb5bCP6YOo5Lu25Y+v5L6b5ZOq5Liq5bqU55So5L2/55So44CC5oul5pyJ5q2k5p2D6ZmQ55qE5bqU55So5Y+v5ZCR5YW25LuW5bqU55So5o6I5LqI5a+55Liq5Lq65pWw5o2u55qE6K6/6Zeu5p2D6ZmQ44CC5pmu6YCa5bqU55So5LiN5bqU5L2/55So5q2k5p2D6ZmQ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iODQyMzkyMzc3NzY1OTI5MjIyOCI+IuS/ruaUueaJi+acuueKtuaAgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSIxMDI5ODc3NTI5MDA3Njg2NzMyIj4i5YWB6K645bqU55So5o6n5Yi26K6+5aSH55qE55S16K+d5Yqf6IO944CC5oul5pyJ5q2k5p2D6ZmQ55qE5bqU55So5Y+v5Zyo5LiN6YCa55+l5oKo55qE5oOF5Ya15LiL5omn6KGM5YiH5o2i572R57uc44CB5byA5YWz5omL5py65peg57q/6KOF572u562J5q2k57G75pON5L2c44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjkxNzgyMjg1MjQ1MDc2MTA0ODYiPiLor7vlj5bmiYvmnLrnirbmgIHlkozouqvku70iPC9zdHJpbmc+CkBAIC02MjEsNyArNjMyLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IuWFgeiuuOivpeW6lOeUqOafpeeci+W5s+adv+eUteiEkeS4iueahOiTneeJmemFjee9ru+8jOS7peWPiuW7uueri+WSjOaOpeWPl+S4jumFjeWvueiuvuWkh+eahOi/nuaOpeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiLlhYHorrjor6XlupTnlKjmn6XnnIvmiYvmnLrkuIrnmoTok53niZnphY3nva7vvIzku6Xlj4rlu7rnq4vlkozmjqXlj5fkuI7phY3lr7norr7lpIfnmoTov57mjqXjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX25mYyIgbXNnaWQ9IjQ0MjMzNTEyNzQ3NTc4NzY5NTMiPiLmjqfliLbov5Hot53nprvpgJrkv6EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19uZmMiIG1zZ2lkPSI3MTIwNjExODE5NDAxNzg5OTA3Ij4i5YWB6K645bqU55So5LiO6L+R6Led56a75peg57q/6YCa5L+hIChORkMpIOagh+iusOOAgeWNoeWSjOmYheivu+WZqOi/m+ihjOmAmuS/oeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLlhYHorrjlupTnlKjkuI7ov5Hot53nprvml6Dnur/pgJrkv6EoTkZDKeagh+etvuOAgeWNoeWSjOivu+WPluWZqOmAmuS/oeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+IuWBnOeUqOWxj+W5lemUgeWumiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjYwMzQyMDMwNjUwNzcxMjI5OTIiPiLlhYHorrjor6XlupTnlKjlgZznlKjplK7plIHku6Xlj4rku7vkvZXlhbPogZTnmoTlr4bnoIHlronlhajmjqrmlr3jgILkvovlpoLvvIzorqnmiYvmnLrlnKjmjqXlkKzmnaXnlLXml7blgZznlKjplK7plIHvvIzlnKjpgJror53nu5PmnZ/lkI7ph43mlrDlkK/nlKjplK7plIHjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSI2MjAxODEwMDA4MjMwNTAzMDUyIj4i6K+75Y+W5ZCM5q2l6K6+572uIjwvc3RyaW5nPgpAQCAtODA5LDYgKzgyMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4i5L2P5a6FIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IuWNleS9jSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i5YW25LuWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+IuaJvuS4jeWIsOWPr+eUqOadpeafpeeci+atpOiBlOezu+S6uueahOW6lOeUqOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+Iui+k+WFpSBQSU4g56CBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i6K+36L6T5YWlIFBVSyDnoIHlkozmlrDnmoQgUElOIOeggSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIOeggSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLpgInmi6nlupTnlKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiLml6Dms5XlkK/liqjigJw8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+4oCdIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i5YiG5Lqr5pa55byPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IuS9v+eUqDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz7liIbkuqsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i5ruR5Yqo5omL5p+E44CC6Kem5pG45bm25oyJ5L2P44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuWQkeS4iua7keWKqOS7pTx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IuWQkeS4i+a7keWKqOS7pTx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuWQkeW3pua7keWKqOS7pTx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLlkJHlj7Pmu5Hliqjku6U8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Iuino+mUgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLnm7jmnLoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i6Z2Z6Z+zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuaJk+W8gOWjsOmfsyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i5pCc57SiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4i5ruR5Yqo6Kej6ZSB44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IumcgOimgeaPkuWFpeiAs+acuuaJjeiDveWQrOWIsOWvhueggeeahOaMiemUruWjsOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IueCueOAgiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NywxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+Iuezu+e7nyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i6JOd54mZ6Z+z6aKRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLml6Dnur/mmL7npLoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i5a6M5oiQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i5aqS5L2T6L6T5Ye657q/6LevIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLov57mjqXliLDorr7lpIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLlsIblsY/luZXmipXlsITliLDorr7lpIfkuIoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLmraPlnKjmkJzntKLorr7lpIfigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLorr7nva4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i5pat5byA6L+e5o6lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+Iuato+WcqOaJq+aPjy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+Iuato+WcqOi/nuaOpS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i5Y+v6L+e5o6lIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i5Y+g5Yqg6KeG5Zu+ICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPu+8mjx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz7vvIw8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4i77yM5a6J5YWoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLlt7Lov57mjqXliLDml6Dnur/mmL7npLrorr7lpIciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i5q2k5bGP5bmV55qE5YaF5a655q2j5pi+56S65Zyo5Y+m5LiA5Y+w6K6+5aSH5LiKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+Iuato+WcqOaKleWwhOWxj+W5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Iuato+WcqOi/nuaOpeWIsOKAnDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuKAnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+Iuato+WcqOaKleWwhOWxj+W5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4i5bey6L+e5o6l5Yiw4oCcPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+4oCdIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IuaWreW8gOi/nuaOpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i57Sn5oCl5ZG85pWRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i5b+Y6K6w5LqG5Zu+5qGIIjwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU5LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+56eS5ZCO6YeN6K+VIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IueojeWQjumHjeivlSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLku47pobbpg6jlkJHkuIvmu5HliqjljbPlj6/pgIDlh7rlhajlsY/mqKHlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i5LuO6aG26YOo5ZCR5LiL5ruR5Yqo5Y2z5Y+v6YCA5Ye65YWo5bGP5qih5byP44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLlrozmiJAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLlsI/ml7bovaznm5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IuWIhumSn+i9rOebmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLpgInmi6nlsI/ml7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLpgInmi6nliIbpkp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IuaMieaciOS7veWIkuWIhueahOaXpeacn+e9keagvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IuW5tOS7veWIl+ihqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i6YCJ5oup5pyI5Lu95ZKM5pel5pyfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4i6YCJ5oup5bm05Lu9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+IuW3sumAieaLqTx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+IuW3suWIoOmZpDx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCmluZGV4IDJkMmU3N2UuLjM0MDAzYzggMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLovLjlhaUgOCDkvY3mlbjku6XkuIrnmoQgUFVL44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IuaCqOeahCBTSU0g5Y2h5bey6Y6W5a6aIFBVS++8jOiri+i8uOWFpSBQVUsg56K85Lul6Kej6Zmk6Y6W5a6a44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i6Ly45YWlIFBVSzIg54K6IFNJTSDljaHop6PpmaTlsIHpjpbjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiLmk43kvZzlpLHmlZfvvIzoq4vllZ/nlKjjgIxTSU0vUlVJTSDpjpblrprjgI3jgIIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLmgqjliankuIsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoeapn+acg+i8uOWFpeOAguWmguaenOS7jeeEtui8uOWFpemMr+iqpO+8jFNJTSDlsIfmnIPooqvpjpblrprjgIIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLmgqjliankuIsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoeapn+acg+i8uOWFpeOAguWmguaenOS7jeeEtui8uOWFpemMr+iqpO+8jFNJTSDlsIfmnIPooqvpjpblrprjgIIiPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IuS+humbu+mhr+ekuiI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i5YWB6Kix5oeJ55So56iL5byP57mr57WQ6IezIFZQTiDmnI3li5nnmoTpoILlsaTku4vpnaIgKOS4jeW7uuitsOS4gOiIrOaHieeUqOeoi+W8j+S9v+eUqCnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i57mr57WQ6Iez5qGM5biDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLlhYHoqLHmh4nnlKjnqIvlvI/nuavntZDoh7PmoYzluIPnmoTpoILlsaTku4vpnaIgKOS4jeW7uuitsOS4gOiIrOaHieeUqOeoi+W8j+S9v+eUqCnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+Iue5q+e1kOiHs+mBoOerr+ieouW5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IuWFgeioseaHieeUqOeoi+W8j+e5q+e1kOiHs+mBoOerr+Wxj+ieoueahOmgguWxpOS7i+mdoiAo5LiN5bu66K2w5LiA6Iis5oeJ55So56iL5byP5L2/55SoKeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+Iue5q+e1kOiHs+Wwj+W3peWFt+acjeWLmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLlhYHoqLHmh4nnlKjnqIvlvI/nuavntZDoh7PlsI/lt6XlhbfmnI3li5nnmoTpoILlsaTku4vpnaLjgIAo5LiN5bu66K2w5LiA6Iis5oeJ55So56iL5byP5L2/55SoKeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+IuiIh+ijnee9rueuoeeQhuWToeS6kuWLlSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i5YWB6Kix5oeJ55So56iL5byP5L2/55SoIFN1cmZhY2VGbGluZ2VyIOeahOS9juWxpOWKn+iDveOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuiugOWPluahhuaetue3qeihneWNgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLlhYHoqLHmh4nnlKjnqIvlvI/oroDlj5bnlavpnaLnt6nooZ3ljYDnmoTlhaflrrnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiLlrZjlj5YgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IuWFgeioseaHieeUqOeoi+W8j+S9v+eUqCBJbnB1dEZsaW5nZXIg55qE5L2O6ZqO5Yqf6IO944CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLoqK3lrpogV2lGaSBEaXNwbGF5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4i5YWB6Kix5oeJ55So56iL5byP6Kit5a6a5Y+K6YCj5o6lIFdpRmkgRGlzcGxheeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i5o6n5Yi2IFdpRmkgRGlzcGxheSI8L3N0cmluZz4KQEAgLTQ5NSw2ICs1MDQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLlhYHoqLHmh4nnlKjnqIvlvI/kv67mlLnlhajln5/pn7PpoLvoqK3lrprvvIzkvovlpoLpn7Pph4/lkoznlKjmlrzovLjlh7rnmoTlloflj63jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+IumMhOijvemfs+aViCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IuWFgeioseaHieeUqOeoi+W8j+S9v+eUqOm6peWFi+miqOmMhOmfs+OAgumAmemgheasiumZkOWFgeioseaHieeUqOeoi+W8j+maqOaZgumMhOmfs++8jOiAjOS4jemcgOe2k+aCqOeiuuiqjeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4iU0lNIOWNoemAmuioiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IuWFgeioseaHieeUqOeoi+W8j+WCs+mAgeaMh+S7pOWIsCBTSU0g5Y2h44CC6YCZ6aCF5pON5L2c5YW35pyJ6auY5Y2x6Zqq5oCn44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i5ouN54Wn5ZKM5ouN5pSd5b2x54mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuWFgeioseaHieeUqOeoi+W8j+S9v+eUqOebuOapn+aLjeeFp+WSjOmMhOW9seOAgumAmemgheasiumZkOWFgeioseaHieeUqOeoi+W8j+maqOaZguS9v+eUqOebuOapn++8jOiAjOS4jemcgOe2k+aCqOeiuuiqjeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IuS9v+eUqOebuOapn+aZguWBnOeUqOWCs+i8uOaMh+ekuueHiCI8L3N0cmluZz4KQEAgLTgwOSw2ICs4MjAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IuWutueUqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLlt6XkvZwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IuWFtuS7liI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3NDYwOTgwMDc4Mjg1Nzk2ODgiPiLmib7kuI3liLDlj6/ku6Xmn6XnnIvpgJnkvY3oga/ntaHkurrnmoTmh4nnlKjnqIvlvI/jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLovLjlhaUgUElOIOeivCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+Iui8uOWFpSBQVUsg56K85ZKM5pawIFBJTiDnorwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDnorwiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDI2LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCDpjbUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciDpjbUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLpgbjmk4fmh4nnlKjnqIvlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiLnhKHms5XllZ/li5UgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IuWIhuS6q+e1piI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLoiIfjgIw8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+44CN5YiG5LqrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+Iua7keWLleaOp+WItuOAguaMgee6jOi8leinuOOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLlkJHkuIrmu5Hli5XljbPlj688eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLlkJHkuIvmu5Hli5XljbPlj688eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLlkJHlt6bmu5Hli5XljbPlj688eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4i5ZCR5Y+z5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLop6PpjpYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i55u45qmfIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IumdnOmfsyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLpn7PmlYjlt7LplovllZ8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuaQnOWwiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+Iua7keWLleWNs+WPr+ino+mOluOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLmj5LkuIrogLPmqZ/ljbPlj6/ogb3liLDns7vntbHmnJforoDlr4bnorzpjbXjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLpu57jgIIiPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODcsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLns7vntbEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IuiXjeeJmemfs+mguyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i54Sh57ea6J6i5bmV5YiG5LqrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IuWujOaIkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IuWqkumrlOi8uOWHuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i6YCj5o6l6KOd572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4i5Zyo6KOd572u5LiK5pS+6YCB6J6i5bmVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i5q2j5Zyo5pCc5bCL6KOd572u4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IuWBnOatoumAo+aOpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLmraPlnKjmjoPmj4/igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLmraPlnKjpgKPnt5ouLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IuWPr+eUqCI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IumHjeeWiuaViOaenCAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7vvJo8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+77yMPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IijlronlhagpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLlt7LpgKPmjqXnhKHnt5rpoa/npLroo53nva4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i6YCZ5YCL55Wr6Z2i5q2j5Zyo5Y+m5LiA6YOo6KOd572u5LiK6aGv56S6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+Iuato+WcqOatpOaUvumAgeieouW5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Iuato+WcqOmAo+e3muWIsOOAjDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuOAjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+Iuato+WcqOatpOaUvumAgeieouW5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4i5bey6YCj57ea5Yiw44CMPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+44CNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IuS4reaWt+mAo+e3miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i57eK5oCl6Zu76KmxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i5b+Y6KiY5ZyW5qGIIjwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU5LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoSI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLnqI3lvozlho3oqaYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i5b6e6aCC56uv5b6A5LiL5ruR5YuV5Y2z5Y+v57WQ5p2f5YWo6J6i5bmV44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IueUsemgguerr+W+gOS4i+W/q+mAn+a7keWLleWNs+WPr+mboumWi+WFqOieouW5leOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i5a6M5oiQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4i5bCP5pmC55Kw5b2i5ruR5qG/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLliIbpkJjnkrDlvaLmu5Hmob8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i6YG45Y+W5bCP5pmCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4i6YG45Y+W5YiG6ZCYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLpoa/npLrmr4/ml6XnmoTmnIjmm4bmlrnmoLwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLlubTku73muIXllq4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IumBuOWPluaciOS7veWSjOaXpeacnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IumBuOWPluW5tOS7vSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiLlt7Lpgbjlj5Y8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDlt7LliKrpmaQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKaW5kZXggM2VjOGQ0Yy4uYmZiMGM3YyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+Iui8uOWFpSA4IOS9jeaVuOS7peS4iueahCBQVUvjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iU0lNIOWNoeeahCBQVUsg5bey6Y6W5a6a44CC6KuL6Ly45YWlIFBVSyDnorzop6PpmaTpjpblrprjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLoq4vovLjlhaUgUFVLMiDku6Xop6PpjpYgU0lNIOWNoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuaTjeS9nOWkseaVl++8jOiri+WVn+eUqCBTSU0vUlVJTSDpjpblrprjgIIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLmgqjpgoTlj6/ku6Xlho3oqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoeOAguWmguaenOS7jeeEtuWkseaVl++8jFNJTSDljaHlsIfooqvpjpbkvY/jgIIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLmgqjpgoTlj6/ku6Xlho3oqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoeOAguWmguaenOS7jeeEtuWkseaVl++8jFNJTSDljaHlsIfooqvpjpbkvY/jgIIiPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IuS+humbu+mhr+ekuiI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i5YWB6Kix5oeJ55So56iL5byP6IGv57mr6IezIFZQTiDmnI3li5nnmoTpoILlsaTku4vpnaIgKOS4gOiIrOaHieeUqOeoi+W8j+S4jemcgOS9v+eUqCnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i6YCj57WQ6Iez5qGM5biDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLlhYHoqLHmh4nnlKjnqIvlvI/nuavntZDoh7PmoYzluIPnmoTpoILlsaTku4vpnaIgKOS4gOiIrOaHieeUqOeoi+W8j+S4jemcgOS9v+eUqCnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+Iue5q+e1kOiHs+mBoOerr+ieouW5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IuWFgeioseaHieeUqOeoi+W8j+e5q+e1kOiHs+mBoOerr+ieouW5leeahOmgguWxpOS7i+mdoiAo5LiA6Iis5oeJ55So56iL5byP5LiN6ZyA5L2/55SoKeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+Iue5q+e1kOiHs+Wwj+W3peWFt+acjeWLmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLlhYHoqLHmh4nnlKjnqIvlvI/nuavntZDoh7PlsI/lt6XlhbfmnI3li5nnmoTpoILlsaTku4vpnaIgKOS4gOiIrOaHieeUqOeoi+W8j+S4jemcgOS9v+eUqCnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLoiIfoo53nva7nrqHnkIblk6HkupLli5UiPC9zdHJpbmc+CkBAIC00NzcsMTQgKzQ4NCwxNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i5YWB6Kix5oeJ55So56iL5byP5L2/55SoIFN1cmZhY2VGbGluZ2VyIOeahOS9jumajuWKn+iDveOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuiugOWPluahhuaetue3qeihnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLlhYHoqLHmh4nnlKjnqIvlvI/oroDlj5bnlavpnaLnt6nooZ3ljYDnmoTlhaflrrnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiLlrZjlj5YgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IuWFgeioseaHieeUqOeoi+W8j+S9v+eUqCBJbnB1dEZsaW5nZXIg55qE5L2O6ZqO5Yqf6IO944CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLoqK3lrpogV2ktRmkg6aGv56S66KOd572uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4i5YWB6Kix5oeJ55So56iL5byP6Kit5a6a5Y+K6YCj5o6lIFdpLUZpIOmhr+ekuuijnee9ruOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i5o6n5Yi2IFdpLUZpIOmhr+ekuuijnee9riI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjQ1NDM5MTIyOTI2ODE4MjY5ODYiPiLlhYHoqLHmh4nnlKjnqIvlvI/mjqfliLYgV2ktRmkg6aGv56S66KOd572u55qE5L2O6ZqO5Yqf6IO944CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2ODU3MTM0NDk4NDAyMzQ2NzA4Ij4i5pO35Y+W6Z+z6KiK6Ly45Ye6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjIxMDU5Nzc1NDIxMjIwODg1MyI+IuWFgeioseaHieeUqOeoi+W8j+aTt+WPluWPiumHjeaWsOWwjuWQkemfs+ioiui8uOWHuuOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjE4OTA1NTM5MzU2NTAzNDk4MDgiPiLnhrHploDlrZfoqZ7lgbXmuKwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlQXVkaW9Ib3R3b3JkIiBtc2dpZD0iOTE1MTgwNzk1ODE1MzA1NjgxMCI+IuWFgeioseaHieeUqOeoi+W8j+aTt+WPlumfs+ioiueUqOaWvOeGsemWgOWtl+ipnuWBtea4rOOAguaTt+WPluS9nOalreWPr+WcqOiDjOaZr+Wft+ihjO+8jOS9huS4puacquemgeatouS9v+eUqOWFtuS7lumfs+ioiuaTt+WPluW3peWFtyAo5L6L5aaC5pSd6YyE5b2x5qmfKeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjE4OTA1NTM5MzU2NTAzNDk4MDgiPiLllZ/li5XlrZfoqZ7lgbXmuKwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlQXVkaW9Ib3R3b3JkIiBtc2dpZD0iOTE1MTgwNzk1ODE1MzA1NjgxMCI+IuWFgeioseaHieeUqOeoi+W8j+aTt+WPlumfs+ioiueUqOaWvOWVn+WLleWtl+ipnuWBtea4rOOAguaTt+WPluS9nOalreWPr+WcqOiDjOaZr+Wft+ihjO+8jOS9huS4puacquemgeatouS9v+eUqOWFtuS7lumfs+ioiuaTt+WPluW3peWFtyAo5L6L5aaC5pSd6YyE5b2x5qmfKeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjI0NjgyODc3MzU4OTA5NDAyMyI+IuaTt+WPluimluioiui8uOWHuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjM1OTQ4MTY1ODAzNDE0OTg2MCI+IuWFgeioseaHieeUqOeoi+W8j+aTt+WPluWPiumHjeaWsOWwjuWQkeimluioiui8uOWHuuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iNzgxNTM5ODk2OTMwMzM4MjAxNiI+IuaTt+WPluWuieWFqOimluioiui8uOWHuiI8L3N0cmluZz4KQEAgLTQ5NSw2ICs1MDQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLlhYHoqLHmh4nnlKjnqIvlvI/kv67mlLnlhajln5/pn7PoqIroqK3lrprvvIzkvovlpoLpn7Pph4/lkoznlKjkvobovLjlh7rnmoTlloflj63jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+IumMhOijvemfs+ioiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IuWFgeioseaHieeUqOeoi+W8j+S9v+eUqOm6peWFi+miqOmMhOmfs+OAgumAmemgheasiumZkOWPr+iuk+aHieeUqOeoi+W8j+maqOaZgumMhOmfs++8jOS4jemcgOe2k+mBjuaCqOeahOeiuuiqjeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iIG1zZ2lkPSIxMTgwMjY1ODc5NDY0ODkzMDI5Ij4iU0lNIOWNoemAmuioiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+IuWFgeioseaHieeUqOeoi+W8j+WCs+mAgeaMh+S7pOWIsCBTSU0g5Y2h44CC6YCZ6bq85YGa6Z2e5bi45Y2x6Zqq44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i5ouN5pSd55u454mH5ZKM5b2x54mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuWFgeioseaHieeUqOeoi+W8j+S9v+eUqOebuOapn+aLjeeFp+WSjOmMhOW9seOAgumAmemgheasiumZkOWPr+iuk+aHieeUqOeoi+W8j+maqOaZguS9v+eUqOebuOapn++8jOiAjOS4jemcgOiri+axguaCqOmAsuihjOeiuuiqjeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IuS9v+eUqOaUneW9seapn+aZguWBnOeUqOWCs+i8uOaMh+ekuuWZqCBMRUQiPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiLkvY/lrrYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4i5YWs5Y+4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiLlhbbku5YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4i5om+5LiN5Yiw5Y+v55So5L6G5p+l55yL6YCZ5L2N6IGv57Wh5Lq655qE5oeJ55So56iL5byP44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i6Ly45YWlIFBJTiDnorwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLovLjlhaUgUFVLIOeivOWSjOaWsCBQSU4g56K8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsg56K8Ijwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyNiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQg6Y21Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIg6Y21Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i6YG45pOH5oeJ55So56iL5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4i54Sh5rOV5ZWf5YuVIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLliIbkuqvlsI3osaHvvJoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i6IiH44CMPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPuOAjeWIhuS6qyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLmu5Hli5XmjqfliLbjgILmjIHnuozovJXop7jjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i5ZCR5LiK5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i5ZCR5LiL5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i5ZCR5bem5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuWQkeWPs+a7keWLleWNs+WPrzx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i6Kej6Zmk6Y6W5a6aIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuebuOapnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLpnZzpn7MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i6ZaL5ZWf6Z+z5pWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLmkJzlsIsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLmu5Hli5XljbPlj6/op6PpjpbjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i6YCj5o6l6ICz5qmf5Y2z5Y+v6IG95Y+W57O757Wx5pyX6K6A5a+G56K85oyJ6Y2144CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i6bue44CCIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i57O757WxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLol43niZnpn7PoqIoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IueEoee3muieouW5leWIhuS6qyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLlrozmiJAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLlqpLpq5TovLjlh7oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IumAo+e3muiHs+ijnee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IuWwh+ieouW5leaKleaUvuWIsOijnee9ruS4iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Iuato+WcqOaQnOWwi+ijnee9ri4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IuioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLkuK3mlrfpgKPnt5oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i5o6D5o+P5LitLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i6YCj57ea5Lit4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLlj6/ku6Xkvb/nlKgiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLnrKwgPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiDlgIvph43nlormlYjmnpwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+77yaPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPu+8jDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIo5a6J5YWoKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i5bey6YCj5o6l54Sh57ea6aGv56S65ZmoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IuWFtuS7luijnee9ruato+WcqOmhr+ekuumAmeWAi+eVq+mdoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiLmraPlnKjmipXmlL7onqLluZUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLmraPlnKjpgKPnt5roh7PjgIw8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7jgI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLmraPlnKjmipXmlL7onqLluZUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IuW3sumAo+e3muiHs+OAjDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuOAjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLkuK3mlrfpgKPnt5oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Iue3iuaApembu+ipsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IuW/mOiomOWcluW9oiI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1OSwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKEiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i56iN5b6M5YaN6KmmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IuW+numgguerr+W+gOS4i+a7keWLleWNs+WPr+e1kOadn+WFqOieouW5leOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLlvp7poILnq6/lvoDkuIvmu5Hli5XljbPlj6/pgIDlh7rlhajonqLluZXmqKHlvI/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IuWujOaIkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IuWwj+aZguaVuOeSsOeLgOa7keahvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4i5YiG6ZCY5pW455Kw54uA5ruR5qG/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IumBuOWPluWwj+aZguaVuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IumBuOWPluWIhumQmOaVuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i5pel5pyf57ay5qC8ICjmjInmnIjpoa/npLopIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i5bm05Lu95riF5ZauIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLpgbjlj5bmnIjku73lkozml6XmnJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLpgbjlj5blubTku70iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4i5bey6YG45Y+WIDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+IuW3suWIqumZpCA8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKaW5kZXggNTdkNTljMy4uMmNmNzkwNSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJUaGF5aXBoYSBpLVBVSyBlbmV6aW5vbWJvbG8gZXppbmd1LTggbm9tYSBuZ2FwaGV6dS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iSWtoYWRpIGxha2hvIGxlLVNJTSBsaXZhbHdlIG5nZS1QVUsuIFRoYXlpcGhhIGlraG9kaSB5ZS1QVUsgdWt1bGl2dWxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlRoYXlpcGhhIGktUFVLMiB1a3V6ZSB1dnVsZSBpa2hhZGkgbGUtU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IkFrdXBodW1lbGVsYW5nYSwgbmlrYSBhbWFuZGxhIHVraGl5ZSB3ZS1TSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJVbmVtaXphbW8gZW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbmdhcGhhbWJpIGtva3ViYSBpLVNJTSBpa2hpeXdlLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IlVuZW1pemFtbyBlbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBuZ2FwaGFtYmkga29rdWJhIGktU0lNIGlraGl5d2UuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJLUlEIFlvY2luZ28gT2x1bmdlbmF5byI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iSXZ1bWVsYSB1bW5pbmkgdWt1dGhpIGFib3BoZWxlIGt3aXNzZWtlbG8gZXNpbmdhcGhlenVsdSBzZXNldmlzaSB5ZS1WcG0uIEF5aWRpbmdha2VsaSBpemluaGxlbG8gem9rdXNlYmVuemEgZXplandheWVsZWtpbGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ImhsYW5nYW5pc2Ega3dpcGhlcGhhZG9uZ2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+Ikl2dW1lbGEgdW1iYW1iaSB1a3VobGFuZ2FuaXNhIHV4aHVtYW5vIG5vbXNlYmVuemlzaSBrd2V6aW5nYSBlbGlwaGV6dWx1IGx3ZXBoZXBoYWRvbmdhLiBBa3Vzb3plIGt3YWRpbmdla2Ega3dlemluaGxlbG8gem9rdXNlYmVuemEgZXppdmFtaWxlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iYm9waGV6ZWxhIGt1c2lib25pc2kgc2VzaWxhd3VsaSBrdWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iSXZ1bWVsYSB1bWJhbWJpIHVrdWhsYW5nYW5pc2EgaXNpeGh1bWkgZXNpYm9uYWthbGF5byBlc2lzZXppbmdlbmkgZWxpcGhlenVsdSBzZXNpYm9uaXNpIHNlc2lsYXd1bGkga3VkZS4gQWt1bWVsZSBpZGluZ2Vsd2UgaXppbmhsZWxvIHpva3VzZWJlbnphIGV6aWp3YXllbGVraWxlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ImJvcGhlemVsYSBrdWJlIGlzZXZpc2kgeWVzaW5xdW5qYW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+Ikl2dW1lbGEgdW1iYW1iaSB1a3VobGFuZ2FuaXNhIHV4aHVtYW5vIG5vbXNlYmVuemlzaSBrd2V6aW5nYSBlbGlwaGV6dWx1IGxlbnNpemFrYWxvIHllc2lucXVuandhbmEuIEFrdXNvemUga3dhZGluZ2VrYSBrd2V6aW5obGVsbyB6b2t1c2ViZW56YSBleml2YW1pbGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4ieGh1bWFuYSBub21waGF0aGkgd2VkaXZheXNpIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJJdnVtZWxhIHVobGVsbyBsb2t1c2ViZW56YSB1a3V0aGkgaXNlYmVuemlzZSBva3VxdWtldGh3ZSBpLVN1cmZhY2VGbGluZ2VyIG9rdXNlemluZ2VuaSBlbGlwaGFuc2kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4iZnVuZGEgaXNpa2h1bWJ1bGkgc2VzaWtoYXNoYW5hIHNlbmRpa2ltYmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iSXZ1bWVsYSB1aGxlbG8gbG9rdXNlYmVuemEgdWt1dGhpIGlmdW5kZSBva3VxdWtldGh3ZSBpZnJleWltdSB5ZWJoYWZhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImZpbnllbGVsYSBrdS1JbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iSXZ1bWVsYSB1aGxlbG8gbG9rdXNlYmVuemEgdWt1dGhpIGx1c2ViZW56aXNlIGl6aWNpIHplemluZ2EgZWxpcGhhbnNpIHplLUlucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+Imx1bmdpc2EgdWt1YnVrd2Ega3dlLVdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iSXZ1bWVsYSB1aGxlbG8gbG9rdXNlYmVuemEgdWt1bHVuZ2lzYSBub2t1eGh1bWEgZWt1YnVraXN3ZW5pIGt3ZS1XaS1GaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+Imxhd3VsYSB1a3VidWt3YSBrd2UtV2ktRmkiPC9zdHJpbmc+CkBAIC00OTUsNiArNTA0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4iSXZ1bWVsYSB1aGxlbG8gbG9rdXNlYmVuemEgdWt1c2hpbnRzaGEgaXppbHVuZ2lzZWxlbG8gem9tc2luZG8gd2UtZ2xvYmFsIG5qZW5nZXZvbG9tdSBub2t1dGhpIGlzaXBoaSBpc2lwaWthIGVzaXNldHNoZW56aXNlbHdhIG9rdWtoaXBoYXlvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4icW9waGEgdW1zaW5kbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+Ikl2dW1lbGEgdWhsZWxvIGxva3VzZWJlbnphIHVrdXJla2hvZGEgdW1zaW5kbyBuZ2UtbWljcm9waG9uZS4gTGUgbXZ1bWUgaXZ1bWVsYSB1aGxlbG8gbG9rdXNlYmVuemEgdWt1cW9waGEgdW1zaW5kbyBub21hIGt1bmluaSBuZ2FwaGFuZGxlIGtva3VxaW5pc2VraXNhIGt3YWtoby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iMTE4MDI2NTg3OTQ2NDg5MzAyOSI+InV4aHVtYW5vIGxlLXNpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpbV9jb21tdW5pY2F0aW9uIiBtc2dpZD0iNTcyNTE1OTY1NDI3OTYzOTQ5OCI+Ikl2dW1lbGEgdWhsZWxvIGxva3VzZWJlbnphIHVrdXRodW1lbGEgaW1peWFsbyBrdS1TSU0uIExva2h1IGt1eWluZ296aSBrYWtodWx1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+InRoYXRoYSBpeml0aG9tYmUgbmFtYXZpZGl5byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJJdnVtZWxhIHVobGVsbyBsb2t1c2ViZW56YSB1a3V0aGF0aGEgaXppdGhvbWJlIG5hbWF2aWRpeW8gbmdla2hhbWVyYS4gTGUgbXZ1bWUgaXZ1bWVsYSB1aGxlbG8gbG9rdXNlYmVuemEgdWt1c2ViZW56aXNhIGlraGFtZXJhIG5nYW5vbWEgaXNpcGhpIGlzaWtoYXRoaSBuZ2FwaGFuZGxlIGt3ZW12dW1lIHlha2hvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImtodWJhemEgaS1MRUQgeWVzaWtob21iaSBzb2t1ZGx1bGlzYSB1bWEgaWtoYW1lcmEgaXNlYmVuemEiPC9zdHJpbmc+CkBAIC04MDksNiArODIwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlSG9tZSIgbXNnaWQ9IjYwOTM1OTgxODEwNjkzNTkyOTUiPiJFa2hheWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iVW1zZWJlbnppIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiJPa3VueWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzQ2MDk4MDA3ODI4NTc5Njg4Ij4iQWx1a2hvIHVobGVsbyBsb2t1c2ViZW56YSBvbHV0aG9sYWtlbGUgbG9rdWJ1a2EgbG9uYSBveGh1bWFuYSBuYXllLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkZha2EgaWtob2RpIHllLVBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IkZha2EgaS1QVUsgbmVwaGluaWtob2RpIGVudHNoYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iSWtob2RpIGxlLVBVSyI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IkJla2Ega3dlbnllIGluZGF3byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkZha2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJLaGV0aGEgdWhsZWxvIGxva3VzZWJlbnphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iQXlpa3dhemFuZ2EgdWt1cWFsaXNhIGktPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IllhYmVsYW5hIG5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IllhYmVsYW5hIG5vIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iSWhhYW1iaXMgaXNpYmFtYm8uIFRoaW50YSAmYW1wOyB1YmFtYmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlNoZWxlbGlzZWxhIG5nZW5obGEga3UtPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IlNoZWxlbGlzZWxhIG5nZXphbnNpIGt1LTx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJTaGVsZWxpc2VsYSBuZ2Frd2Vzb2t1bnhlbGUga3UtPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJTaGVsZWxpc2VsYSBuZ2Frd2Vzb2t1ZGxhIGt1LTx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IlZ1bGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iSWtoYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iVGh1bGlsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJVbXNpbmRvIHV2dWxpd2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlNlc2hhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iU3dheWlwaGEgdWt1emUgdXZ1bGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlBsYWthIGt1LWhlYWRzZXQgdWt1emUgdXp3ZSBva2hpeWUgYmVwaGFzaXdlZGkgZXppbmRsZWJlbmkgemFraG8gYmV6d2FrYWxhIGtha2h1bHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iSWNhc2hhemkuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg3LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iSXNpc3RpbXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IlVtc2luZG8gd2UtQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJVa3Vib25pc2Egb2t1bmdlbmF6aW50YW1ibyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJRZWRpbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJPa3VraGlwaGF5byBrd2VtaWRpeWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IlhodW1hIGt1ZGl2YXlpc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJMaW5naXNhIGlzaWtyaW5pIGt1ZGl2YXlpc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJJc2VzaGEgYW1hZGl2YXlpc2nigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJJemlsdW5naXNlbGVsbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJOcWFtdWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+Ikl5YXNrZW5hLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iSXlheGh1bWEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+Ikt1eWF0aG9sYWthbGEiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJJc2VuZGxhbGVsbyAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIGt1cGhlcGhpbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IlVrdWJ1a2VrYSBva3VuZ2VuYW50YW1ibyBrdXhodW55aXdlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+Ikxlc2kgc2lrcmluaSBzaXlhYm9uYWthbGEga3dlbnllIGlkaXZheWlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJJc2lrcmluaSBzb2t1bGluZ2lzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Ikl4aHVtYSBrdS08eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJJc2lrcmluaSBzb2t1bGluZ2lzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iS3V4aHVueXdlIGt1LTx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJOcWFtdWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJVY2luZ28gbHdlemltbyBlemlwaHV0aHVtYXlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iVWtob2hsd2UgaXBoZXRoaW5pPyI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY2MCwxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iWmFtYSBmdXRoaSBlbXZhIGt3ZXNpa2hhdGhpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlN3YXlpcGhlbGEgcGhhbnNpIGt1c3VrZWxhIHBoZXp1bHUgdWt1emUgdXBodW1lIGt1c2lrcmluaSBlc2lnY3dlbGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJLd2Vueml3ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkFtYWhvcmEgd2VzbGF5aWRpIGVzaXlpbmRpbmdpbGl6aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iQW1hbWluaXRoaSB3ZXNsYXlpZGkgZXNpeWluZGluZ2lsaXppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IktoZXRoYSBhbWFob3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iS2hldGhhIGFtYW1pbml0aGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IklncmlkaSB5ZW55YW5nYSB5ZXppbnN1a3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJVaGx1IGxvbnlha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IktoZXRoYSBpbnlhbmdhIG5vc3VrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IktoZXRoYSB1bnlha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iSS08eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gZWtoZXRoaXdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iSS08eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBpc3VzaXdlIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2FycmF5cy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2FycmF5cy54bWwKaW5kZXggOTFhZjUwYS4uOTU3OTJiYSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9hcnJheXMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbApAQCAtNzcsNiArNzcsNyBAQAogICAgICAgIDxpdGVtPkBkcmF3YWJsZS9idG5fZGVmYXVsdF9kaXNhYmxlZF9mb2N1c2VkX2hvbG9fZGFyazwvaXRlbT4KICAgICAgICA8aXRlbT5AZHJhd2FibGUvYnRuX2RlZmF1bHRfaG9sb19kYXJrPC9pdGVtPgogICAgICAgIDxpdGVtPkBkcmF3YWJsZS9idG5fZGVmYXVsdF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgIDxpdGVtPkBkcmF3YWJsZS9idG5fZGVmYXVsdF9xdWFudHVtPC9pdGVtPgogICAgICAgIDxpdGVtPkBkcmF3YWJsZS9idG5fc3Rhcl9vZmZfbm9ybWFsX2hvbG9fbGlnaHQ8L2l0ZW0+CiAgICAgICAgPGl0ZW0+QGRyYXdhYmxlL2J0bl9zdGFyX29uX25vcm1hbF9ob2xvX2xpZ2h0PC9pdGVtPgogICAgICAgIDxpdGVtPkBkcmF3YWJsZS9idG5fc3Rhcl9vbl9kaXNhYmxlZF9ob2xvX2xpZ2h0PC9pdGVtPgpAQCAtMTM0LDYgKzEzNSw3IEBACiAgICAgICAgPGl0ZW0+QGRyYXdhYmxlL2V4cGFuZGVyX2dyb3VwX2hvbG9fbGlnaHQ8L2l0ZW0+CiAgICAgICAgPGl0ZW0+QGRyYXdhYmxlL2xpc3Rfc2VsZWN0b3JfaG9sb19kYXJrPC9pdGVtPgogICAgICAgIDxpdGVtPkBkcmF3YWJsZS9saXN0X3NlbGVjdG9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgPGl0ZW0+QGRyYXdhYmxlL2xpc3Rfc2VsZWN0b3JfcXVhbnR1bTwvaXRlbT4KICAgICAgICA8aXRlbT5AZHJhd2FibGUvbGlzdF9zZWN0aW9uX2RpdmlkZXJfaG9sb19saWdodDwvaXRlbT4KICAgICAgICA8aXRlbT5AZHJhd2FibGUvbGlzdF9zZWN0aW9uX2RpdmlkZXJfaG9sb19kYXJrPC9pdGVtPgogICAgICAgIDxpdGVtPkBkcmF3YWJsZS9tZW51X2hhcmRrZXlfcGFuZWxfaG9sb19kYXJrPC9pdGVtPgpAQCAtMjU3LDYgKzI1OSw3IEBACiAgICAgICAgPGl0ZW0+QGRyYXdhYmxlL2FiX3NvbGlkX3NoYWRvd19ob2xvPC9pdGVtPgogICAgICAgIDxpdGVtPkBkcmF3YWJsZS9pdGVtX2JhY2tncm91bmRfaG9sb19kYXJrPC9pdGVtPgogICAgICAgIDxpdGVtPkBkcmF3YWJsZS9pdGVtX2JhY2tncm91bmRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICA8aXRlbT5AZHJhd2FibGUvaXRlbV9iYWNrZ3JvdW5kX3F1YW50dW08L2l0ZW0+CiAgICAgICAgPGl0ZW0+QGRyYXdhYmxlL2Zhc3RzY3JvbGxfdGh1bWJfaG9sbzwvaXRlbT4KICAgICAgICA8aXRlbT5AZHJhd2FibGUvZmFzdHNjcm9sbF90aHVtYl9wcmVzc2VkX2hvbG88L2l0ZW0+CiAgICAgICAgPGl0ZW0+QGRyYXdhYmxlL2Zhc3RzY3JvbGxfdGh1bWJfZGVmYXVsdF9ob2xvPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9hdHRycy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2F0dHJzLnhtbAppbmRleCA0MmUzYjUwLi5jNjAzNDE4IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2F0dHJzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2F0dHJzLnhtbApAQCAtNDQ3LDYgKzQ0NywxNSBAQAogICAgICAgICAgICAgIHRvIHtAbGluayBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMjRkxBR19UUkFOU0xVQ0VOVF9OQVZJR0FUSU9OfS4gLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9IndpbmRvd1RyYW5zbHVjZW50TmF2aWdhdGlvbiIgZm9ybWF0PSJib29sZWFuIiAvPgogCisgICAgICAgIDwhLS0gRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyB3aW5kb3cgcmVxdWVzdHMgdGhhdCBjb250ZW50IGNoYW5nZXMgYmUgcGVyZm9ybWVkCisgICAgICAgICAgICAgYXMgc2NlbmUgY2hhbmdlcyB3aXRoIHRyYW5zaXRpb25zLiBDb3JyZXNwb25kcyB0bworICAgICAgICAgICAgIHtAbGluayBhbmRyb2lkLnZpZXcuV2luZG93I0ZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OU30uIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJ3aW5kb3dDb250ZW50VHJhbnNpdGlvbnMiIGZvcm1hdD0iYm9vbGVhbiIgLz4KKworICAgICAgICA8IS0tIFJlZmVyZW5jZSB0byBhIFRyYW5zaXRpb25NYW5hZ2VyIFhNTCByZXNvdXJjZSBkZWZpbmluZyB0aGUgZGVzaXJlZAorICAgICAgICAgICAgIHRyYW5zaXRpb25zIGJldHdlZW4gZGlmZmVyZW50IHdpbmRvdyBjb250ZW50LiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0id2luZG93Q29udGVudFRyYW5zaXRpb25NYW5hZ2VyIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKwogICAgICAgICA8IS0tID09PT09PT09PT09PSAtLT4KICAgICAgICAgPCEtLSBBbGVydCBEaWFsb2cgc3R5bGVzIC0tPgogICAgICAgICA8IS0tID09PT09PT09PT09PSAtLT4KQEAgLTYwNyw2ICs2MTYsOCBAQAogICAgICAgICA8YXR0ciBuYW1lPSJwb3B1cE1lbnVTdHlsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+CiAgICAgICAgIDwhLS0gRGVmYXVsdCBTdGFja1ZpZXcgc3R5bGUuIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJzdGFja1ZpZXdTdHlsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gRGVmYXVsdCBzdHlsZSBmb3IgdGhlIEZyYWdtZW50QnJlYWRDcnVtYnMgd2lkZ2V0LiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iZnJhZ21lbnRCcmVhZENydW1ic1N0eWxlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KIAogICAgICAgICA8IS0tIE51bWJlclBpY2tlciBzdHlsZS4gLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9Im51bWJlclBpY2tlclN0eWxlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KQEAgLTYxNyw2ICs2MjgsMTggQEAKICAgICAgICAgPCEtLSBUaGUgVGltZVBpY2tlciBzdHlsZS4gLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9InRpbWVQaWNrZXJTdHlsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+CiAKKyAgICAgICAgPCEtLSBUaGUgVGltZVBpY2tlciBIZWFkZXIgYmFja2dyb3VuZCBjb2xvciAuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJ0aW1lUGlja2VySGVhZGVyQmFja2dyb3VuZENvbG9yIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKworICAgICAgICA8IS0tIFRoZSBUaW1lUGlja2VyIEhlYWRlciB0aW1lIGxhYmVsIHRleHQgYXBwZWFyYW5jZSAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0idGltZVBpY2tlckhlYWRlclRpbWVMYWJlbFRleHRBcHBlYXJhbmNlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKworICAgICAgICA8IS0tIFRpbWVQaWNrZXIgSGVhZGVyIGFtIHBtIGxhYmVsIHRleHQgYXBwZWFyYW5jZSAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0idGltZVBpY2tlckhlYWRlckFtUG1MYWJlbFRleHRBcHBlYXJhbmNlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKworICAgICAgICA8IS0tIFRoZSBUaW1lUGlja2VyIGRpYWxvZyB0aGVtZS4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9InRpbWVQaWNrZXJEaWFsb2dUaGVtZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+CisKICAgICAgICAgPCEtLSBUaGUgRGF0ZVBpY2tlciBzdHlsZS4gLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9ImRhdGVQaWNrZXJTdHlsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+CiAKQEAgLTE2MDQsNiArMTYyNyw5IEBACiAgICAgICAgIDxhdHRyIG5hbWU9IndpbmRvd0Nsb3NlT25Ub3VjaE91dHNpZGUiIC8+CiAgICAgICAgIDxhdHRyIG5hbWU9IndpbmRvd1RyYW5zbHVjZW50U3RhdHVzIiAvPgogICAgICAgICA8YXR0ciBuYW1lPSJ3aW5kb3dUcmFuc2x1Y2VudE5hdmlnYXRpb24iIC8+CisgICAgICAgIDxhdHRyIG5hbWU9IndpbmRvd0NvbnRlbnRUcmFuc2l0aW9ucyIgLz4KKyAgICAgICAgPGF0dHIgbmFtZT0id2luZG93Q29udGVudFRyYW5zaXRpb25NYW5hZ2VyIiAvPgorCiAgICAgICAgIDwhLS0gVGhlIG1pbmltdW0gd2lkdGggdGhlIHdpbmRvdyBpcyBhbGxvd2VkIHRvIGJlLCBhbG9uZyB0aGUgbWFqb3IKICAgICAgICAgICAgICBheGlzIG9mIHRoZSBzY3JlZW4uICBUaGF0IGlzLCB3aGVuIGluIGxhbmRzY2FwZS4gIENhbiBiZSBlaXRoZXIKICAgICAgICAgICAgICBhbiBhYnNvbHV0ZSBkaW1lbnNpb24gb3IgYSBmcmFjdGlvbiBvZiB0aGUgc2NyZWVuIHNpemUgaW4gdGhhdApAQCAtMjA2NywxMCArMjA5MywxMyBAQAogICAgICAgICAgICAgIHByb3BlcnR5IG9mIHRoZSB2aWV3LCB3aGljaCBpcyBzZXQgYnkgaXRzIGxheW91dC4gLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9InRyYW5zbGF0aW9uWCIgZm9ybWF0PSJkaW1lbnNpb24iIC8+CiAKLSAgICAgICAgPCEtLSB0cmFuc2xhdGlvbiBpbiB5IG9mIHRoZSB2aWV3LiBUaGlzIHZhbHVlIGlzIGFkZGVkIHBvc3QtbGF5b3V0IHRvIHRoZSBsZWZ0CisgICAgICAgIDwhLS0gdHJhbnNsYXRpb24gaW4geSBvZiB0aGUgdmlldy4gVGhpcyB2YWx1ZSBpcyBhZGRlZCBwb3N0LWxheW91dCB0byB0aGUgdG9wCiAgICAgICAgICAgICAgcHJvcGVydHkgb2YgdGhlIHZpZXcsIHdoaWNoIGlzIHNldCBieSBpdHMgbGF5b3V0LiAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0idHJhbnNsYXRpb25ZIiBmb3JtYXQ9ImRpbWVuc2lvbiIgLz4KIAorICAgICAgICA8IS0tIHRyYW5zbGF0aW9uIGluIHogb2YgdGhlIHZpZXcuIFRoaXMgdmFsdWUgaXMgYWRkZWQgcG9zdC1sYXlvdXQgdG8gaXRzIHBvc2l0aW9uLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0idHJhbnNsYXRpb25aIiBmb3JtYXQ9ImRpbWVuc2lvbiIgLz4KKwogICAgICAgICA8IS0tIHggbG9jYXRpb24gb2YgdGhlIHBpdm90IHBvaW50IGFyb3VuZCB3aGljaCB0aGUgdmlldyB3aWxsIHJvdGF0ZSBhbmQgc2NhbGUuCiAgICAgICAgICAgICAgVGhpcyB4bWwgYXR0cmlidXRlIHNldHMgdGhlIHBpdm90WCBwcm9wZXJ0eSBvZiB0aGUgVmlldy4gLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9InRyYW5zZm9ybVBpdm90WCIgZm9ybWF0PSJkaW1lbnNpb24iIC8+CkBAIC0yNzI1LDYgKzI3NTQsOCBAQAogICAgICAgICA8IS0tIEVuYWJsZXMgdGhlIGZhc3Qgc2Nyb2xsIHRodW1iIHRoYXQgY2FuIGJlIGRyYWdnZWQgdG8gcXVpY2tseSBzY3JvbGwgdGhyb3VnaAogICAgICAgICAgICAgIHRoZSBsaXN0LiAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0iZmFzdFNjcm9sbEVuYWJsZWQiIGZvcm1hdD0iYm9vbGVhbiIgLz4KKyAgICAgICAgPCEtLSBTcGVjaWZpZXMgdGhlIHN0eWxlIG9mIHRoZSBmYXN0IHNjcm9sbCBkZWNvcmF0aW9ucy4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImZhc3RTY3JvbGxTdHlsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+CiAgICAgICAgIDwhLS0gV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIGxpc3Qgd2lsbCB1c2UgYSBtb3JlIHJlZmluZWQgY2FsY3VsYXRpb24KICAgICAgICAgICAgICBtZXRob2QgYmFzZWQgb24gdGhlIHBpeGVscyBoZWlnaHQgb2YgdGhlIGl0ZW1zIHZpc2libGUgb24gc2NyZWVuLiBUaGlzCiAgICAgICAgICAgICAgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUgYnkgZGVmYXVsdCBidXQgc2hvdWxkIGJlIHNldCB0byBmYWxzZSBpZiB5b3VyIGFkYXB0ZXIKQEAgLTI3OTMsNiArMjgyNCwzNiBAQAogICAgIDwvZGVjbGFyZS1zdHlsZWFibGU+CiAgICAgPGRlY2xhcmUtc3R5bGVhYmxlIG5hbWU9IkVkaXRUZXh0Ij4KICAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgorICAgIDxkZWNsYXJlLXN0eWxlYWJsZSBuYW1lPSJGYXN0U2Nyb2xsIj4KKyAgICAgICAgPCEtLSBEcmF3YWJsZSB1c2VkIGZvciB0aGUgc2Nyb2xsIGJhciB0aHVtYi4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9InRodW1iRHJhd2FibGUiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgorICAgICAgICA8IS0tIE1pbmltdW0gd2lkdGggb2YgdGhlIHRodW1iLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0idGh1bWJNaW5XaWR0aCIgZm9ybWF0PSJkaW1lbnNpb24iIC8+CisgICAgICAgIDwhLS0gTWluaW11bSBoZWlnaHQgb2YgdGhlIHRodW1iLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0idGh1bWJNaW5IZWlnaHQiIGZvcm1hdD0iZGltZW5zaW9uIiAvPgorICAgICAgICA8IS0tIERyYXdhYmxlIHVzZWQgZm9yIHRoZSBzY3JvbGwgYmFyIHRyYWNrLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0idHJhY2tEcmF3YWJsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gRHJhd2FibGUgdXNlZCBmb3IgdGhlIHNlY3Rpb24gaGVhZGVyIHByZXZpZXcgd2hlbiByaWdodC1hbGlnbmVkLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iYmFja2dyb3VuZFJpZ2h0IiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKyAgICAgICAgPCEtLSBEcmF3YWJsZSB1c2VkIGZvciB0aGUgc2VjdGlvbiBoZWFkZXIgcHJldmlldyB3aGVuIGxlZnQtYWxpZ25lZC4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImJhY2tncm91bmRMZWZ0IiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKyAgICAgICAgPCEtLSBQb3NpdGlvbiBvZiBzZWN0aW9uIGhlYWRlciBwcmV2aWV3LiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0icG9zaXRpb24iPgorICAgICAgICAgICAgPCEtLSBGbG9hdGluZyBhdCB0aGUgdG9wIG9mIHRoZSBjb250ZW50LiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9ImZsb2F0aW5nIiB2YWx1ZT0iMCIgLz4KKyAgICAgICAgICAgIDwhLS0gUGlubmVkIGFsb25nc2lkZSB0aGUgdGh1bWIuIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0iYXRUaHVtYiIgdmFsdWU9IjEiIC8+CisgICAgICAgIDwvYXR0cj4KKyAgICAgICAgPGF0dHIgbmFtZT0idGV4dEFwcGVhcmFuY2UiIC8+CisgICAgICAgIDxhdHRyIG5hbWU9InRleHRDb2xvciIgLz4KKyAgICAgICAgPGF0dHIgbmFtZT0idGV4dFNpemUiIC8+CisgICAgICAgIDwhLS0gTWluaW11bSB3aWR0aCBvZiB0aGUgc2VjdGlvbiBoZWFkZXIgcHJldmlldy4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9Im1pbldpZHRoIiAvPgorICAgICAgICA8IS0tIE1pbmltdW0gaGVpZ2h0IG9mIHRoZSBzZWN0aW9uIGhlYWRlciBwcmV2aWV3LiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0ibWluSGVpZ2h0IiAvPgorICAgICAgICA8IS0tIFBhZGRpbmcgZm9yIHRoZSBzZWN0aW9uIGhlYWRlciBwcmV2aWV3LiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0icGFkZGluZyIgLz4KKyAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgogICAgIDxkZWNsYXJlLXN0eWxlYWJsZSBuYW1lPSJGcmFtZUxheW91dCI+CiAgICAgICAgIDwhLS0gRGVmaW5lcyB0aGUgZHJhd2FibGUgdG8gZHJhdyBvdmVyIHRoZSBjb250ZW50LiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuIG92ZXJsYXkuCiAgICAgICAgICAgICAgVGhlIGZvcmVncm91bmQgZHJhd2FibGUgcGFydGljaXBhdGVzIGluIHRoZSBwYWRkaW5nIG9mIHRoZSBjb250ZW50IGlmIHRoZSBncmF2aXR5CkBAIC0zOTU4LDYgKzQwMTksMzAgQEAKICAgICA8ZGVjbGFyZS1zdHlsZWFibGUgbmFtZT0iVGltZVBpY2tlciI+CiAgICAgICAgIDwhLS0gQGhpZGUgVGhlIGxheW91dCBvZiB0aGUgdGltZSBwaWNrZXIuIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJpbnRlcm5hbExheW91dCIgLz4KKyAgICAgICAgPCEtLSBAaGlkZSBUaGUgbGF5b3V0IG9mIHRoZSBsZWdhY3kgdGltZSBwaWNrZXIuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJsZWdhY3lMYXlvdXQiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgorICAgICAgICA8IS0tIEBoaWRlIEVuYWJsZXMgb3IgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBsZWdhY3kgbGF5b3V0IGZvciB0aGUgVGltZVBpY2tlci4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImxlZ2FjeU1vZGUiIGZvcm1hdD0iYm9vbGVhbiIgLz4KKyAgICAgICAgPCEtLSBAaGlkZSBUaGUgY29sb3Igd2hlbiB0aGUgbm9uIGxlZ2FjeSBUaW1lUGlja2VyIGlzIGRpc2FibGVkLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iZGlzYWJsZWRDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gQGhpZGUgVGhlIGNvbG9yIGZvciBzZWxlY3RlZCB0ZXh0IG9mIHRoZSBub24gbGVnYWN5IFRpbWVQaWNrZXIuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJoZWFkZXJTZWxlY3RlZFRleHRDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gQGhpZGUgVGhlIGNvbG9yIGZvciB1bnNlbGVjdGVkIHRleHQgb2YgdGhlIG5vbiBsZWdhY3kgVGltZVBpY2tlci4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImhlYWRlclVuc2VsZWN0ZWRUZXh0Q29sb3IiIGZvcm1hdD0iY29sb3J8cmVmZXJlbmNlIiAvPgorICAgICAgICA8IS0tIEBoaWRlIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgaGVhZGVyIG9mIHRoZSBub24gbGVnYWN5IFRpbWVQaWNrZXIuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJoZWFkZXJCYWNrZ3JvdW5kQ29sb3IiIGZvcm1hdD0iY29sb3J8cmVmZXJlbmNlIiAvPgorICAgICAgICA8IS0tIEBoaWRlIFRoZSBjb2xvciBmb3IgdGhlIGhvdXJzL21pbnV0ZXMgbnVtYmVycyBvZiB0aGUgbm9uIGxlZ2FjeSBUaW1lUGlja2VyLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0ibnVtYmVyc1RleHRDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gQGhpZGUgVGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBob3Vycy9taW51dGVzIG51bWJlcnMgb2YgdGhlIG5vbiBsZWdhY3kgVGltZVBpY2tlci4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9Im51bWJlcnNCYWNrZ3JvdW5kQ29sb3IiIGZvcm1hdD0iY29sb3J8cmVmZXJlbmNlIiAvPgorICAgICAgICA8IS0tIEBoaWRlIFRoZSBjb2xvciBmb3IgdGhlIEFNL1BNIHNlbGVjdG9ycyBvZiB0aGUgbm9uIGxlZ2FjeSBUaW1lUGlja2VyLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iYW1QbVRleHRDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gQGhpZGUgVGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBBTS9QTSBzZWxlY3RvcnMgb2YgdGhlIG5vbiBsZWdhY3kgVGltZVBpY2tlciB3aGVuIHVuc2VsZWN0ZWQuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJhbVBtVW5zZWxlY3RlZEJhY2tncm91bmRDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gQGhpZGUgVGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBBTS9QTSBzZWxlY3RvcnMgb2YgdGhlIG5vbiBsZWdhY3kgVGltZVBpY2tlciB3aGVuIHNlbGVjdGVkLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iYW1QbVNlbGVjdGVkQmFja2dyb3VuZENvbG9yIiBmb3JtYXQ9ImNvbG9yfHJlZmVyZW5jZSIgLz4KKyAgICAgICAgPCEtLSBAaGlkZSBUaGUgY29sb3IgZm9yIHRoZSBob3Vycy9taW51dGVzIHNlbGVjdG9yIG9mIHRoZSBub24gbGVnYWN5IFRpbWVQaWNrZXIuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJudW1iZXJzU2VsZWN0b3JDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CiAgICAgPC9kZWNsYXJlLXN0eWxlYWJsZT4KIAogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTM5NzUsNiArNDA2MCwxOSBAQAogICAgICAgICAgICAgIFJUTCAocmlnaHQtdG8tbGVmdCkuICBTZWUKICAgICAgICAgICAgICB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSNzZXRBdXRvTWlycm9yZWR9LiAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0iYXV0b01pcnJvcmVkIiBmb3JtYXQ9ImJvb2xlYW4iIC8+CisgICAgICAgIDwhLS0gSWYgc2V0LCBzcGVjaWZpZXMgdGhlIGNvbG9yIHRvIGFwcGx5IHRvIHRoZSBkcmF3YWJsZSBhcyBhIGNvbG9yIGZpbHRlci4gQnkKKyAgICAgICAgICAgICBkZWZhdWx0LCBubyBjb2xvciBmaWx0ZXIgaXMgYXBwbGllZC4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImNvbG9yRmlsdGVyQ29sb3IiIGZvcm1hdD0iY29sb3IiIC8+CisgICAgICAgIDwhLS0gV2hlbiBhIGNvbG9yIGZpbHRlciBjb2xvciBpcyBzZXQsIHNwZWNpZmllcyBpdHMgUG9ydGVyLUR1ZmYgYmxlbmRpbmcgbW9kZS4KKyAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBtdWx0aXBseS4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImNvbG9yRmlsdGVyTW9kZSI+CisgICAgICAgICAgICA8IS0tIFtTYSAqIERhLCBTYyAqIERjXSAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9Im11bHRpcGx5IiB2YWx1ZT0iMTQiIC8+CisgICAgICAgICAgICA8IS0tIFtTYSArIERhIC0gU2EgKiBEYSwgU2MgKyBEYyAtIFNjICogRGNdIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0ic2NyZWVuIiB2YWx1ZT0iMTUiIC8+CisgICAgICAgICAgICA8IS0tIFtEYSwgU2MgKiBEYSArICgxIC0gU2EpICogRGNdIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0ic3JjX2F0b3AiIHZhbHVlPSI5IiAvPgorICAgICAgICA8L2F0dHI+CiAgICAgPC9kZWNsYXJlLXN0eWxlYWJsZT4KIAogICAgIDwhLS0gRHJhd2FibGUgdXNlZCB0byByZW5kZXIgc2V2ZXJhbCBzdGF0ZXMuIEVhY2ggc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnkKQEAgLTQxNTksNiArNDI1NywxNCBAQAogICAgICAgICA8IS0tIEluZGljYXRlcyBpZiB0aGUgZHJhd2FibGUgbmVlZHMgdG8gYmUgbWlycm9yZWQgd2hlbiBpdHMgbGF5b3V0IGRpcmVjdGlvbiBpcwogICAgICAgICAgICAgIFJUTCAocmlnaHQtdG8tbGVmdCkuIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJhdXRvTWlycm9yZWQiIC8+CisgICAgICAgIDwhLS0gSW5kaWNhdGVzIGhvdyBsYXllciBwYWRkaW5nIHNob3VsZCBhZmZlY3QgdGhlIGJvdW5kcyBvZiBzdWJzZXF1ZW50IGxheWVycy4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5lc3QuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJwYWRkaW5nTW9kZSI+CisgICAgICAgICAgICA8IS0tIE5lc3QgZWFjaCBsYXllciBpbnNpZGUgdGhlIHBhZGRpbmcgb2YgdGhlIHByZXZpb3VzIGxheWVyLiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9Im5lc3QiIHZhbHVlPSIwIiAvPgorICAgICAgICAgICAgPCEtLSBTdGFjayBlYWNoIGxheWVyIGRpcmVjdGx5IGF0b3AgdGhlIHByZXZpb3VzIGxheWVyLiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9InN0YWNrIiB2YWx1ZT0iMSIgLz4KKyAgICAgICAgPC9hdHRyPgogICAgIDwvZGVjbGFyZS1zdHlsZWFibGU+CiAKICAgICA8IS0tIERlc2NyaWJlcyBhbiBpdGVtIChvciBjaGlsZCkgb2YgYSBMYXllckRyYXdhYmxlLiAtLT4KQEAgLTQxNzQsNyArNDI4MCw3IEBACiAgICAgICAgIDwhLS0gRHJhd2FibGUgdXNlZCB0byByZW5kZXIgdGhlIGxheWVyLiAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0iZHJhd2FibGUiIC8+CiAgICAgICAgIDwhLS0gSWRlbnRpZmllciBvZiB0aGUgbGF5ZXIuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIGxheWVyCi0gICAgICAgICAgICAgZnJvbSBhIGRyYXdiYWJsZSBjb250YWluZXIuIC0tPgorICAgICAgICAgICAgIGZyb20gYSBkcmF3YWJsZSBjb250YWluZXIuIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJpZCIgLz4KICAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgogCkBAIC00MjUxLDYgKzQzNTcsOCBAQAogICAgICAgICA8IS0tIEluZGljYXRlcyBpZiB0aGUgZHJhd2FibGUgbmVlZHMgdG8gYmUgbWlycm9yZWQgd2hlbiBpdHMgbGF5b3V0IGRpcmVjdGlvbiBpcwogICAgICAgICAgICAgIFJUTCAocmlnaHQtdG8tbGVmdCkuIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJhdXRvTWlycm9yZWQiIC8+CisgICAgICAgIDxhdHRyIG5hbWU9ImNvbG9yRmlsdGVyQ29sb3IiIC8+CisgICAgICAgIDxhdHRyIG5hbWU9ImNvbG9yRmlsdGVyTW9kZSIgLz4KICAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgogCiAgICAgPCEtLSBEcmF3YWJsZSB1c2VkIHRvIGRyYXcgOS1wYXRjaGVzLiAtLT4KQEAgLTQyNjQsNiArNDM3Miw4IEBACiAgICAgICAgIDwhLS0gSW5kaWNhdGVzIGlmIHRoZSBkcmF3YWJsZSBuZWVkcyB0byBiZSBtaXJyb3JlZCB3aGVuIGl0cyBsYXlvdXQgZGlyZWN0aW9uIGlzCiAgICAgICAgICAgICAgUlRMIChyaWdodC10by1sZWZ0KS4gLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9ImF1dG9NaXJyb3JlZCIgLz4KKyAgICAgICAgPGF0dHIgbmFtZT0iY29sb3JGaWx0ZXJDb2xvciIgLz4KKyAgICAgICAgPGF0dHIgbmFtZT0iY29sb3JGaWx0ZXJNb2RlIiAvPgogICAgIDwvZGVjbGFyZS1zdHlsZWFibGU+CiAKICAgICA8IS0tIERyYXdhYmxlIHVzZWQgdG8gZHJhdyBhIHNpbmdsZSBjb2xvci4gLS0+CkBAIC00NjA1LDYgKzQ3MTUsMTQgQEAKICAgICAgICAgPGF0dHIgbmFtZT0iZnJvbVNjZW5lIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KICAgICAgICAgPCEtLSBUaGUgZGVzdGluYXRpb24gc2NlbmUgaW4gdGhpcyBzY2VuZSBjaGFuZ2UuIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJ0b1NjZW5lIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKyAgICAgICAgPCEtLSBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYXRpbmcgc2NlbmUgaW4gdGhpcyBzY2VuZSBjaGFuZ2UuCisgICAgICAgICAgICAgQXBwcyBzaG91bGQgdHJlYXQgdGhpcyBuYW1lIGFzIGFuIEFQSSBpbiB0aGUgc2FtZSBzZW5zZQorICAgICAgICAgICAgIHRoYXQgYW4gSW50ZW50IGFjdGlvbiBvciBleHRyYSBrZXkgaXMuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJmcm9tU2NlbmVOYW1lIiBmb3JtYXQ9InN0cmluZyIgLz4KKyAgICAgICAgPCEtLSBUaGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gc2NlbmUgaW4gdGhpcyBzY2VuZSBjaGFuZ2UuCisgICAgICAgICAgICAgQXBwcyBzaG91bGQgdHJlYXQgdGhpcyBuYW1lIGFzIGFuIEFQSSBpbiB0aGUgc2FtZSBzZW5zZQorICAgICAgICAgICAgIHRoYXQgYW4gSW50ZW50IGFjdGlvbiBvciBleHRyYSBrZXkgaXMuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJ0b1NjZW5lTmFtZSIgZm9ybWF0PSJzdHJpbmciIC8+CiAgICAgPC9kZWNsYXJlLXN0eWxlYWJsZT4KIAogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2NvbG9ycy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2NvbG9ycy54bWwKaW5kZXggMjhlN2FmNy4uNTViYWJmYSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9jb2xvcnMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29sb3JzLnhtbApAQCAtMjIsOCArMjIsNiBAQAogICAgIDxkcmF3YWJsZSBuYW1lPSJzY3JlZW5fYmFja2dyb3VuZF9kYXJrIj4jZmYwMDAwMDA8L2RyYXdhYmxlPgogICAgIDxkcmF3YWJsZSBuYW1lPSJzdGF0dXNfYmFyX2Nsb3NlZF9kZWZhdWx0X2JhY2tncm91bmQiPiNmZjAwMDAwMDwvZHJhd2FibGU+CiAgICAgPGRyYXdhYmxlIG5hbWU9InN0YXR1c19iYXJfb3BlbmVkX2RlZmF1bHRfYmFja2dyb3VuZCI+I2ZmMDAwMDAwPC9kcmF3YWJsZT4KLSAgICA8ZHJhd2FibGUgbmFtZT0ibm90aWZpY2F0aW9uX2l0ZW1fYmFja2dyb3VuZF9jb2xvciI+I2ZmMTExMTExPC9kcmF3YWJsZT4KLSAgICA8ZHJhd2FibGUgbmFtZT0ibm90aWZpY2F0aW9uX2l0ZW1fYmFja2dyb3VuZF9jb2xvcl9wcmVzc2VkIj4jZmY0NTQ1NDU8L2RyYXdhYmxlPgogICAgIDxkcmF3YWJsZSBuYW1lPSJzZWFyY2hfYmFyX2RlZmF1bHRfY29sb3IiPiNmZjAwMDAwMDwvZHJhd2FibGU+CiAgICAgPGRyYXdhYmxlIG5hbWU9InNhZmVfbW9kZV9iYWNrZ3JvdW5kIj4jNjAwMDAwMDA8L2RyYXdhYmxlPgogICAgIDwhLS0gQmFja2dyb3VuZCBkcmF3YWJsZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBhIHRyYW5zcGFyZW50IGFjdGl2aXR5IHRvCkBAIC0yMDIsNSArMjAwLDIyIEBACiAgICAgPGNvbG9yIG5hbWU9ImtleWd1YXJkX2F2YXRhcl9mcmFtZV9wcmVzc2VkX2NvbG9yIj4jZmYzNWI1ZTU8L2NvbG9yPgogCiAgICAgPGNvbG9yIG5hbWU9ImFjY2Vzc2liaWxpdHlfZm9jdXNfaGlnaGxpZ2h0Ij4jODBmZmZmMDA8L2NvbG9yPgorCisgICAgPCEtLSBOZXcgVGltZVBpY2tlciBjb2xvcnMgLS0+CisgICAgPGNvbG9yIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF9iYWNrZ3JvdW5kX2hvbG9fbGlnaHQiPkBhbmRyb2lkOmNvbG9yL3doaXRlPC9jb2xvcj4KKyAgICA8Y29sb3IgbmFtZT0idGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19kYXJrIj4jZmYzMDMwMzA8L2NvbG9yPgorCisgICAgPGNvbG9yIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fbGlnaHQiPiM4YzhjOGM8L2NvbG9yPgorICAgIDxjb2xvciBuYW1lPSJ0aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2RhcmsiPkBhbmRyb2lkOmNvbG9yL3doaXRlPC9jb2xvcj4KKworICAgIDxjb2xvciBuYW1lPSJ0aW1lcGlja2VyX2RlZmF1bHRfZGlzYWJsZWRfY29sb3JfaG9sb19saWdodCI+IzdmMDAwMDAwPC9jb2xvcj4KKyAgICA8Y29sb3IgbmFtZT0idGltZXBpY2tlcl9kZWZhdWx0X2Rpc2FibGVkX2NvbG9yX2hvbG9fZGFyayI+IzdmMDhjOGM4PC9jb2xvcj4KKworICAgIDxjb2xvciBuYW1lPSJ0aW1lcGlja2VyX2RlZmF1bHRfYW1wbV9zZWxlY3RlZF9iYWNrZ3JvdW5kX2NvbG9yX2hvbG9fbGlnaHQiPkBhbmRyb2lkOmNvbG9yL2hvbG9fYmx1ZV9saWdodDwvY29sb3I+CisgICAgPGNvbG9yIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF9hbXBtX3NlbGVjdGVkX2JhY2tncm91bmRfY29sb3JfaG9sb19kYXJrIj5AYW5kcm9pZDpjb2xvci9ob2xvX2JsdWVfbGlnaHQ8L2NvbG9yPgorCisgICAgPGNvbG9yIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF9hbXBtX3Vuc2VsZWN0ZWRfYmFja2dyb3VuZF9jb2xvcl9ob2xvX2xpZ2h0Ij5AYW5kcm9pZDpjb2xvci93aGl0ZTwvY29sb3I+CisgICAgPGNvbG9yIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF9hbXBtX3Vuc2VsZWN0ZWRfYmFja2dyb3VuZF9jb2xvcl9ob2xvX2RhcmsiPkBhbmRyb2lkOmNvbG9yL3RyYW5zcGFyZW50PC9jb2xvcj4KKwogPC9yZXNvdXJjZXM+CiAKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29uZmlnLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29uZmlnLnhtbAppbmRleCBiMzRjNzkyLi5iMWIxZjQyIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2NvbmZpZy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9jb25maWcueG1sCkBAIC01MDgsNiArNTA4LDEyIEBACiAgICAgICAgIDxpdGVtPjQwPC9pdGVtPgogICAgIDwvaW50ZWdlci1hcnJheT4KIAorICAgIDwhLS0gVmlicmF0b3IgcGF0dGVybiBmb3IgZmVlZGJhY2sgd2hlbiBzZWxlY3RpbmcgYW4gaG91ci9taW51dGUgdGljayBvZiBhIENsb2NrIC0tPgorICAgIDxpbnRlZ2VyLWFycmF5IG5hbWU9ImNvbmZpZ19jbG9ja1RpY2tWaWJlUGF0dGVybiI+CisgICAgICAgIDxpdGVtPjEyNTwvaXRlbT4KKyAgICAgICAgPGl0ZW0+NTwvaXRlbT4KKyAgICA8L2ludGVnZXItYXJyYXk+CisKICAgICA8IS0tIFZpYnJhdG9yIHBhdHRlcm4gZm9yIGZlZWRiYWNrIGFib3V0IGJvb3Rpbmcgd2l0aCBzYWZlIG1vZGUgZGlzYWJsZWQgLS0+CiAgICAgPGludGVnZXItYXJyYXkgbmFtZT0iY29uZmlnX3NhZmVNb2RlRGlzYWJsZWRWaWJlUGF0dGVybiI+CiAgICAgICAgIDxpdGVtPjA8L2l0ZW0+CkBAIC0xMzA0LDQgKzEzMTAsMTIgQEAKICAgICAgICAgPGl0ZW0+MzMzPC9pdGVtPgogICAgICAgICA8aXRlbT4zNTM8L2l0ZW0+CiAgICAgPC9zdHJpbmctYXJyYXk+CisKKyAgICA8IS0tIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGRldGVjdGlvbiBiZWhhdmlvciBmb3IgdGhlIGZyYW1ld29yayBtZXRob2QKKyAgICAgICAgIGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbiNoYXNQZXJtYW5lbnRNZW51S2V5KCkuCisgICAgICAgICBWYWxpZCBzZXR0aW5ncyBhcmU6CisgICAgICAgICAwIC0gTm8gY2hhbmdlLiBVc2UgdGhlIGRlZmF1bHQgYXV0b2RldGVjdGlvbiBiZWhhdmlvci4KKyAgICAgICAgIDEgLSBUaGUgZGV2aWNlIERPRVMgaGF2ZSBhIHBlcm1hbmVudCBtZW51IGtleTsgaWdub3JlIGF1dG9kZXRlY3Rpb24uCisgICAgICAgICAyIC0gVGhlIGRldmljZSBET0VTIE5PVCBoYXZlIGEgcGVybWFuZW50IG1lbnUga2V5OyBpZ25vcmUgYXV0b2RldGVjdGlvbi4gLS0+CisgICAgPGludGVnZXIgbmFtZT0iY29uZmlnX292ZXJyaWRlSGFzUGVybWFuZW50TWVudUtleSI+MDwvaW50ZWdlcj4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9kaW1lbnMueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9kaW1lbnMueG1sCmluZGV4IGY5NjE5NWMuLjhjOGMzMjIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvZGltZW5zLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2RpbWVucy54bWwKQEAgLTUwLDE2ICs1MCw2IEBACiAgICAgPCEtLSBNYXJnaW4gYXQgdGhlIGVkZ2Ugb2YgdGhlIHNjcmVlbiB0byBpZ25vcmUgdG91Y2ggZXZlbnRzIGZvciBpbiB0aGUgd2luZG93c2hhZGUuIC0tPgogICAgIDxkaW1lbiBuYW1lPSJzdGF0dXNfYmFyX2VkZ2VfaWdub3JlIj41ZHA8L2RpbWVuPgogCi0gICAgPCEtLSBNaW5pbXVtIHNpemUgb2YgdGhlIGZhc3RzY3JvbGwgb3ZlcmxheSAtLT4KLSAgICA8ZGltZW4gbmFtZT0iZmFzdHNjcm9sbF9vdmVybGF5X3NpemUiPjEwNGRwPC9kaW1lbj4KLSAgICA8IS0tIFRleHQgc2l6ZSBvZiB0aGUgZmFzdHNjcm9sbCBvdmVybGF5IC0tPgotICAgIDxkaW1lbiBuYW1lPSJmYXN0c2Nyb2xsX292ZXJsYXlfdGV4dF9zaXplIj41MnNwPC9kaW1lbj4KLSAgICA8IS0tIFBhZGRpbmcgb2YgdGhlIGZhc3RzY3JvbGwgb3ZlcmxheSAtLT4KLSAgICA8ZGltZW4gbmFtZT0iZmFzdHNjcm9sbF9vdmVybGF5X3BhZGRpbmciPjE2ZHA8L2RpbWVuPgotICAgIDwhLS0gV2lkdGggb2YgdGhlIGZhc3RzY3JvbGwgdGh1bWIgLS0+Ci0gICAgPGRpbWVuIG5hbWU9ImZhc3RzY3JvbGxfdGh1bWJfd2lkdGgiPjY0ZHA8L2RpbWVuPgotICAgIDwhLS0gSGVpZ2h0IG9mIHRoZSBmYXN0c2Nyb2xsIHRodW1iIC0tPgotICAgIDxkaW1lbiBuYW1lPSJmYXN0c2Nyb2xsX3RodW1iX2hlaWdodCI+NTJkcDwvZGltZW4+CiAgICAgPCEtLSBNaW4gd2lkdGggZm9yIGEgdGFibGV0IGRldmljZSAtLT4KICAgICA8ZGltZW4gbmFtZT0ibWluX3hsYXJnZV9zY3JlZW5fd2lkdGgiPjgwMGRwPC9kaW1lbj4KIApAQCAtNzcsMTggKzY3LDYgQEAKICAgICA8IS0tIFNpemUgb2YgbG9ja3NjcmVlbiBvdXRlcnJpbmcgb24gdW5zZWN1cmUgdW5sb2NrIExvY2tTY3JlZW4gLS0+CiAgICAgPGRpbWVuIG5hbWU9ImtleWd1YXJkX2xvY2tzY3JlZW5fb3V0ZXJyaW5nX2RpYW1ldGVyIj4yNzBkcDwvZGltZW4+CiAKLSAgICA8IS0tIERlZmF1bHQgdGFyZ2V0IHBsYWNlbWVudCByYWRpdXMgZm9yIEdsb3dQYWRWaWV3LiBTaG91bGQgYmUgMS8yIG9mIG91dGVycmluZyBkaWFtZXRlci4gLS0+Ci0gICAgPGRpbWVuIG5hbWU9Imdsb3dwYWR2aWV3X3RhcmdldF9wbGFjZW1lbnRfcmFkaXVzIj4xMzVkaXA8L2RpbWVuPgotCi0gICAgPCEtLSBEZWZhdWx0IGdsb3cgcmFkaXVzIGZvciBHbG93UGFkVmlldyAtLT4KLSAgICA8ZGltZW4gbmFtZT0iZ2xvd3BhZHZpZXdfZ2xvd19yYWRpdXMiPjc1ZGlwPC9kaW1lbj4KLQotICAgIDwhLS0gRGVmYXVsdCBkaXN0YW5jZSBiZXlvbmQgd2hpY2ggR2xvd1BhZFZpZXcgc25hcHMgdG8gdGhlIG1hdGNoaW5nIHRhcmdldCAtLT4KLSAgICA8ZGltZW4gbmFtZT0iZ2xvd3BhZHZpZXdfc25hcF9tYXJnaW4iPjQwZGlwPC9kaW1lbj4KLQotICAgIDwhLS0gRGVmYXVsdCBkaXN0YW5jZSBmcm9tIGVhY2ggc25hcCB0YXJnZXQgdGhhdCBHbG93UGFkVmlldyBjb25zaWRlcnMgYSAiaGl0IiAtLT4KLSAgICA8ZGltZW4gbmFtZT0iZ2xvd3BhZHZpZXdfaW5uZXJfcmFkaXVzIj4xNWRpcDwvZGltZW4+Ci0KICAgICA8IS0tIFByZWZlcmVuY2UgYWN0aXZpdHkgc2lkZSBtYXJnaW5zIC0tPgogICAgIDxkaW1lbiBuYW1lPSJwcmVmZXJlbmNlX3NjcmVlbl9zaWRlX21hcmdpbiI+MGRwPC9kaW1lbj4KICAgICA8IS0tIFByZWZlcmVuY2UgYWN0aXZpdHkgc2lkZSBtYXJnaW5zIG5lZ2F0aXZlLS0+CkBAIC0zNTYsNiArMzM0LDMyIEBACiAgICAgPCEtLSBPdXRsaW5lIHdpZHRoIGZvciB2aWRlbyBzdWJ0aXRsZXMuIC0tPgogICAgIDxkaW1lbiBuYW1lPSJzdWJ0aXRsZV9vdXRsaW5lX3dpZHRoIj4yZHA8L2RpbWVuPgogCisgICAgPCEtLSBOZXcgVGltZVBpY2tlciBkaW1lbnNpb25zLiAtLT4KKyAgICA8aXRlbSBuYW1lPSJ0aW1lcGlja2VyX2NpcmNsZV9yYWRpdXNfbXVsdGlwbGllciIgZm9ybWF0PSJmbG9hdCIgdHlwZT0ic3RyaW5nIj4wLjgyPC9pdGVtPgorICAgIDxpdGVtIG5hbWU9InRpbWVwaWNrZXJfY2lyY2xlX3JhZGl1c19tdWx0aXBsaWVyXzI0SG91ck1vZGUiIGZvcm1hdD0iZmxvYXQiIHR5cGU9InN0cmluZyI+MC44NTwvaXRlbT4KKyAgICA8aXRlbSBuYW1lPSJ0aW1lcGlja2VyX3NlbGVjdGlvbl9yYWRpdXNfbXVsdGlwbGllciIgZm9ybWF0PSJmbG9hdCIgdHlwZT0ic3RyaW5nIj4wLjE2PC9pdGVtPgorICAgIDxpdGVtIG5hbWU9InRpbWVwaWNrZXJfYW1wbV9jaXJjbGVfcmFkaXVzX211bHRpcGxpZXIiIGZvcm1hdD0iZmxvYXQiIHR5cGU9InN0cmluZyI+MC4xOTwvaXRlbT4KKyAgICA8aXRlbSBuYW1lPSJ0aW1lcGlja2VyX251bWJlcnNfcmFkaXVzX211bHRpcGxpZXJfbm9ybWFsIiBmb3JtYXQ9ImZsb2F0IiB0eXBlPSJzdHJpbmciPjAuODE8L2l0ZW0+CisgICAgPGl0ZW0gbmFtZT0idGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX2lubmVyIiBmb3JtYXQ9ImZsb2F0IiB0eXBlPSJzdHJpbmciPjAuNjA8L2l0ZW0+CisgICAgPGl0ZW0gbmFtZT0idGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX291dGVyIiBmb3JtYXQ9ImZsb2F0IiB0eXBlPSJzdHJpbmciPjAuODM8L2l0ZW0+CisgICAgPGl0ZW0gbmFtZT0idGltZXBpY2tlcl90ZXh0X3NpemVfbXVsdGlwbGllcl9ub3JtYWwiIGZvcm1hdD0iZmxvYXQiIHR5cGU9InN0cmluZyI+MC4xNzwvaXRlbT4KKyAgICA8aXRlbSBuYW1lPSJ0aW1lcGlja2VyX3RleHRfc2l6ZV9tdWx0aXBsaWVyX2lubmVyIiBmb3JtYXQ9ImZsb2F0IiB0eXBlPSJzdHJpbmciPjAuMTQ8L2l0ZW0+CisgICAgPGl0ZW0gbmFtZT0idGltZXBpY2tlcl90ZXh0X3NpemVfbXVsdGlwbGllcl9vdXRlciIgZm9ybWF0PSJmbG9hdCIgdHlwZT0ic3RyaW5nIj4wLjExPC9pdGVtPgorICAgIDxpdGVtIG5hbWU9InRpbWVwaWNrZXJfdHJhbnNpdGlvbl9taWRfcmFkaXVzX211bHRpcGxpZXIiIGZvcm1hdD0iZmxvYXQiIHR5cGU9InN0cmluZyI+MC45NTwvaXRlbT4KKyAgICA8aXRlbSBuYW1lPSJ0aW1lcGlja2VyX3RyYW5zaXRpb25fZW5kX3JhZGl1c19tdWx0aXBsaWVyIiBmb3JtYXQ9ImZsb2F0IiB0eXBlPSJzdHJpbmciPjEuMzwvaXRlbT4KKworICAgIDxkaW1lbiBuYW1lPSJ0aW1lcGlja2VyX3RpbWVfbGFiZWxfc2l6ZSI+NjBzcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9InRpbWVwaWNrZXJfZXh0cmFfdGltZV9sYWJlbF9tYXJnaW4iPi0zMGRwPC9kaW1lbj4KKyAgICA8ZGltZW4gbmFtZT0idGltZXBpY2tlcl9hbXBtX2xhYmVsX3NpemUiPjE2c3A8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJ0aW1lcGlja2VyX2RvbmVfbGFiZWxfc2l6ZSI+MTRzcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9InRpbWVwaWNrZXJfYW1wbV9sZWZ0X3BhZGRpbmciPjZkaXA8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJ0aW1lcGlja2VyX3NlcGFyYXRvcl9wYWRkaW5nIj40ZGlwPC9kaW1lbj4KKyAgICA8ZGltZW4gbmFtZT0idGltZXBpY2tlcl9oZWFkZXJfaGVpZ2h0Ij45NmRpcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9InRpbWVwaWNrZXJfbWluaW11bV9tYXJnaW5fc2lkZXMiPjQ4ZGlwPC9kaW1lbj4KKyAgICA8ZGltZW4gbmFtZT0idGltZXBpY2tlcl9taW5pbXVtX21hcmdpbl90b3BfYm90dG9tIj4yNGRpcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9InRpbWVwaWNrZXJfcmFkaWFsX3BpY2tlcl9kaW1lbiI+MjcwZGlwPC9kaW1lbj4KKwogICAgIDwhLS0gd2lkdGggb2YgSW1tZXJzaXZlTW9kZUNvbmZpcm1hdGlvbiAoLTEgZm9yIG1hdGNoX3BhcmVudCkgLS0+CiAgICAgPGRpbWVuIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NsaW5nX3dpZHRoIj4tMXB4PC9kaW1lbj4KKwogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3B1YmxpYy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3B1YmxpYy54bWwKaW5kZXggODE4NzkzOS4uNjk2OWQyYyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9wdWJsaWMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvcHVibGljLnhtbApAQCAtMjA4Nyw0ICsyMDg3LDIxOSBAQAogICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5EZXZpY2VEZWZhdWx0Lk5vQWN0aW9uQmFyLlRyYW5zbHVjZW50RGVjb3IiIGlkPSIweDAxMDMwMWUzIiAvPgogICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5EZXZpY2VEZWZhdWx0LkxpZ2h0Lk5vQWN0aW9uQmFyLlRyYW5zbHVjZW50RGVjb3IiIGlkPSIweDAxMDMwMWU0IiAvPgogCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICBSZXNvdXJjZXMgYWRkZWQgaW4gdmVyc2lvbiAyMCBvZiB0aGUgcGxhdGZvcm0KKyAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorICA8ZWF0LWNvbW1lbnQgLz4KKworICA8cHVibGljIHR5cGU9ImF0dHIiIG5hbWU9ImZyYWdtZW50QnJlYWRDcnVtYnNTdHlsZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJhdHRyIiBuYW1lPSJmYXN0U2Nyb2xsU3R5bGUiIC8+CisgIDxwdWJsaWMgdHlwZT0iYXR0ciIgbmFtZT0id2luZG93Q29udGVudFRyYW5zaXRpb25zIiAvPgorICA8cHVibGljIHR5cGU9ImF0dHIiIG5hbWU9IndpbmRvd0NvbnRlbnRUcmFuc2l0aW9uTWFuYWdlciIgLz4KKyAgPHB1YmxpYyB0eXBlPSJhdHRyIiBuYW1lPSJ0cmFuc2xhdGlvbloiIC8+CisgIDxwdWJsaWMgdHlwZT0iYXR0ciIgbmFtZT0iY29sb3JGaWx0ZXJDb2xvciIgLz4KKyAgPHB1YmxpYyB0eXBlPSJhdHRyIiBuYW1lPSJjb2xvckZpbHRlck1vZGUiIC8+CisKKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LkhvbG8uRnJhZ21lbnRCcmVhZENydW1icyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LkhvbG8uTGlnaHQuRnJhZ21lbnRCcmVhZENydW1icyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LkRldmljZURlZmF1bHQuRnJhZ21lbnRCcmVhZENydW1icyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LkRldmljZURlZmF1bHQuTGlnaHQuRnJhZ21lbnRCcmVhZENydW1icyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LkZhc3RTY3JvbGwiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5Ib2xvLkZhc3RTY3JvbGwiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5Ib2xvLkxpZ2h0LkZhc3RTY3JvbGwiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5EZXZpY2VEZWZhdWx0LkZhc3RTY3JvbGwiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5EZXZpY2VEZWZhdWx0LkxpZ2h0LkZhc3RTY3JvbGwiIC8+CisKKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5EaWFsb2dXaW5kb3dUaXRsZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5JbnZlcnNlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxhcmdlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxhcmdlLkludmVyc2UiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTWVkaXVtIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLk1lZGl1bS5JbnZlcnNlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLlNlYXJjaFJlc3VsdC5TdWJ0aXRsZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5TZWFyY2hSZXN1bHQuVGl0bGUiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uU21hbGwiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uU21hbGwuSW52ZXJzZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaW5kb3dUaXRsZSIgLz4KKworICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uQmFyLk1lbnUiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbkJhci5TdWJ0aXRsZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uQmFyLlN1YnRpdGxlLkludmVyc2UiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbkJhci5UaXRsZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uQmFyLlRpdGxlLkludmVyc2UiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbk1vZGUuU3VidGl0bGUiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbk1vZGUuU3VidGl0bGUuSW52ZXJzZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uTW9kZS5UaXRsZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uTW9kZS5UaXRsZS5JbnZlcnNlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5CdXR0b24iIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkRyb3BEb3duSGludCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuRHJvcERvd25JdGVtIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5FZGl0VGV4dCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuSWNvbk1lbnUuSXRlbSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuUG9wdXBNZW51IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5Qb3B1cE1lbnUuTGFyZ2UiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LlBvcHVwTWVudS5TbWFsbCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuVGFiV2lkZ2V0IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5UZXh0VmlldyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuVGV4dFZpZXcuUG9wdXBNZW51IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5UZXh0Vmlldy5TcGlubmVySXRlbSIgLz4KKworICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5RdWFudHVtIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5RdWFudHVtLkRpYWxvZyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuUXVhbnR1bS5EaWFsb2cuTWluV2lkdGgiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLlF1YW50dW0uRGlhbG9nLk5vQWN0aW9uQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5RdWFudHVtLkRpYWxvZy5Ob0FjdGlvbkJhci5NaW5XaWR0aCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuUXVhbnR1bS5EaWFsb2dXaGVuTGFyZ2UiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLlF1YW50dW0uRGlhbG9nV2hlbkxhcmdlLk5vQWN0aW9uQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5RdWFudHVtLklucHV0TWV0aG9kIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5RdWFudHVtLk5vQWN0aW9uQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5RdWFudHVtLk5vQWN0aW9uQmFyLkZ1bGxzY3JlZW4iIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLlF1YW50dW0uTm9BY3Rpb25CYXIuT3ZlcnNjYW4iIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLlF1YW50dW0uTm9BY3Rpb25CYXIuVHJhbnNsdWNlbnREZWNvciIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuUXVhbnR1bS5QYW5lbCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuUXVhbnR1bS5XYWxscGFwZXIiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLlF1YW50dW0uV2FsbHBhcGVyLk5vVGl0bGVCYXIiIC8+CisKKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5EYXJrQWN0aW9uQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5RdWFudHVtLkxpZ2h0LkRpYWxvZyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2cuTWluV2lkdGgiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLlF1YW50dW0uTGlnaHQuRGlhbG9nLk5vQWN0aW9uQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5RdWFudHVtLkxpZ2h0LkRpYWxvZy5Ob0FjdGlvbkJhci5NaW5XaWR0aCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2dXaGVuTGFyZ2UiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLlF1YW50dW0uTGlnaHQuRGlhbG9nV2hlbkxhcmdlLk5vQWN0aW9uQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5RdWFudHVtLkxpZ2h0Lk5vQWN0aW9uQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5RdWFudHVtLkxpZ2h0Lk5vQWN0aW9uQmFyLkZ1bGxzY3JlZW4iIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLlF1YW50dW0uTGlnaHQuTm9BY3Rpb25CYXIuT3ZlcnNjYW4iIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLlF1YW50dW0uTGlnaHQuTm9BY3Rpb25CYXIuVHJhbnNsdWNlbnREZWNvciIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5QYW5lbCIgLz4KKworICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQWN0aW9uQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5BY3Rpb25CYXIuU29saWQiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkFjdGlvbkJhci5UYWJCYXIiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkFjdGlvbkJhci5UYWJUZXh0IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5BY3Rpb25CYXIuVGFiVmlldyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQWN0aW9uQnV0dG9uIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5BY3Rpb25CdXR0b24uQ2xvc2VNb2RlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5BY3Rpb25CdXR0b24uT3ZlcmZsb3ciIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkFjdGlvbkJ1dHRvbi5UZXh0QnV0dG9uIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5BY3Rpb25Nb2RlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5BdXRvQ29tcGxldGVUZXh0VmlldyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQnV0dG9uIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5CdXR0b24uQm9yZGVybGVzcyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQnV0dG9uLkJvcmRlcmxlc3MuU21hbGwiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkJ1dHRvbi5JbnNldCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQnV0dG9uLlNtYWxsIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5CdXR0b24uVG9nZ2xlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5DYWxlbmRhclZpZXciIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkNoZWNrZWRUZXh0VmlldyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQ29tcG91bmRCdXR0b24uQ2hlY2tCb3giIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkNvbXBvdW5kQnV0dG9uLlJhZGlvQnV0dG9uIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5Db21wb3VuZEJ1dHRvbi5TdGFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5EYXRlUGlja2VyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5Ecm9wRG93bkl0ZW0iIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkRyb3BEb3duSXRlbS5TcGlubmVyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5FZGl0VGV4dCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uRXhwYW5kYWJsZUxpc3RWaWV3IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5GYXN0U2Nyb2xsIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5GcmFnbWVudEJyZWFkQ3J1bWJzIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5HcmlkVmlldyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uSG9yaXpvbnRhbFNjcm9sbFZpZXciIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkltYWdlQnV0dG9uIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaXN0UG9wdXBXaW5kb3ciIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpc3RWaWV3IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaXN0Vmlldy5Ecm9wRG93biIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTWVkaWFSb3V0ZUJ1dHRvbiIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUG9wdXBNZW51IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5Qb3B1cFdpbmRvdyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUHJvZ3Jlc3NCYXIiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLlByb2dyZXNzQmFyLkhvcml6b250YWwiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLlByb2dyZXNzQmFyLkxhcmdlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5TbWFsbCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUHJvZ3Jlc3NCYXIuU21hbGwuVGl0bGUiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLlJhdGluZ0JhciIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUmF0aW5nQmFyLkluZGljYXRvciIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUmF0aW5nQmFyLlNtYWxsIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5TY3JvbGxWaWV3IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5TZWVrQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5TcGlubmVyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5UYWIiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLlRhYldpZGdldCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uVGV4dFZpZXciIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLlRleHRWaWV3LlNwaW5uZXJJdGVtIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5XZWJUZXh0VmlldyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uV2ViVmlldyIgLz4KKworICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuU29saWQiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkFjdGlvbkJhci5Tb2xpZC5JbnZlcnNlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuVGFiQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuVGFiQmFyLkludmVyc2UiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkFjdGlvbkJhci5UYWJUZXh0IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuVGFiVGV4dC5JbnZlcnNlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuVGFiVmlldyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQmFyLlRhYlZpZXcuSW52ZXJzZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQnV0dG9uIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CdXR0b24uQ2xvc2VNb2RlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CdXR0b24uT3ZlcmZsb3ciIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkFjdGlvbk1vZGUuSW52ZXJzZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uTW9kZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQXV0b0NvbXBsZXRlVGV4dFZpZXciIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkJ1dHRvbiIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQnV0dG9uLkJvcmRlcmxlc3MuU21hbGwiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkJ1dHRvbi5JbnNldCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQnV0dG9uLlNtYWxsIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5CdXR0b24uVG9nZ2xlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5DYWxlbmRhclZpZXciIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkNoZWNrZWRUZXh0VmlldyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQ29tcG91bmRCdXR0b24uQ2hlY2tCb3giIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkNvbXBvdW5kQnV0dG9uLlJhZGlvQnV0dG9uIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5Db21wb3VuZEJ1dHRvbi5TdGFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5Ecm9wRG93bkl0ZW0iIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkRyb3BEb3duSXRlbS5TcGlubmVyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5FZGl0VGV4dCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuRXhwYW5kYWJsZUxpc3RWaWV3IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5GYXN0U2Nyb2xsIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5GcmFnbWVudEJyZWFkQ3J1bWJzIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5HcmlkVmlldyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuSG9yaXpvbnRhbFNjcm9sbFZpZXciIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkltYWdlQnV0dG9uIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5MaXN0UG9wdXBXaW5kb3ciIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0Lkxpc3RWaWV3IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5MaXN0Vmlldy5Ecm9wRG93biIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuTWVkaWFSb3V0ZUJ1dHRvbiIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUG9wdXBNZW51IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5Qb3B1cFdpbmRvdyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUHJvZ3Jlc3NCYXIiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlByb2dyZXNzQmFyLkhvcml6b250YWwiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlByb2dyZXNzQmFyLkludmVyc2UiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlByb2dyZXNzQmFyLkxhcmdlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5Qcm9ncmVzc0Jhci5MYXJnZS5JbnZlcnNlIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5Qcm9ncmVzc0Jhci5TbWFsbCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUHJvZ3Jlc3NCYXIuU21hbGwuSW52ZXJzZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUHJvZ3Jlc3NCYXIuU21hbGwuVGl0bGUiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlJhdGluZ0JhciIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUmF0aW5nQmFyLkluZGljYXRvciIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUmF0aW5nQmFyLlNtYWxsIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5TY3JvbGxWaWV3IiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5TZWVrQmFyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5TcGlubmVyIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5UYWIiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlRhYldpZGdldCIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuVGV4dFZpZXciIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlRleHRWaWV3LlNwaW5uZXJJdGVtIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5XZWJUZXh0VmlldyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuV2ViVmlldyIgLz4KKworICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJRdWFudHVtLkJ1dHRvbkJhci5BbGVydERpYWxvZyIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iUXVhbnR1bS5CdXR0b25CYXIiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlF1YW50dW0uU2VnbWVudGVkQnV0dG9uIiAvPgorCisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlF1YW50dW0uTGlnaHQuQnV0dG9uQmFyLkFsZXJ0RGlhbG9nIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJRdWFudHVtLkxpZ2h0LkJ1dHRvbkJhciIgLz4KKyAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iUXVhbnR1bS5MaWdodC5TZWdtZW50ZWRCdXR0b24iIC8+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmluZGV4IDkwMjU0MDBhLi5hYmFlODYzNiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC05MzIsMTMgKzkzMiwxMyBAQAogICAgIDwhLS0gW0NIQVIgTElNSVQ9Tk9ORV0gRGVzY3JpcHRpb24gb2YgYW4gYXBwbGljYXRpb24gcGVybWlzc2lvbiwgbGlzdGVkIHNvIHRoZSB1c2VyIGNhbiBjaG9vc2Ugd2hldGhlciB0aGV5IHdhbnQgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRvIHRoaXMuIC0tPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiPkFsbG93cyB0aGUgYXBwIHRvIHJldHJpZXZlCiAgICAgICAgIGNvbGxlY3RlZCBhcHBsaWNhdGlvbiBvcGVyYXRpb24gc3RhdGlzdGljcy4gTm90IGZvciB1c2UgYnkgbm9ybWFsIGFwcHMuPC9zdHJpbmc+Ci0gICAgCisKICAgICA8IS0tIFtDSEFSIExJTUlUPU5PTkVdIFRpdGxlIG9mIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb24sIGxpc3RlZCBzbyB0aGUgdXNlciBjYW4gY2hvb3NlIHdoZXRoZXIgdGhleSB3YW50IHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkbyB0aGlzLiAtLT4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQXBwT3BzU3RhdHMiPm1vZGlmeSBhcHAgb3BzIHN0YXRpc3RpY3M8L3N0cmluZz4KICAgICA8IS0tIFtDSEFSIExJTUlUPU5PTkVdIERlc2NyaXB0aW9uIG9mIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb24sIGxpc3RlZCBzbyB0aGUgdXNlciBjYW4gY2hvb3NlIHdoZXRoZXIgdGhleSB3YW50IHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkbyB0aGlzLiAtLT4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUFwcE9wc1N0YXRzIj5BbGxvd3MgdGhlIGFwcCB0byBtb2RpZnkKICAgICAgICAgY29sbGVjdGVkIGFwcGxpY2F0aW9uIG9wZXJhdGlvbiBzdGF0aXN0aWNzLiBOb3QgZm9yIHVzZSBieSBub3JtYWwgYXBwcy48L3N0cmluZz4KLSAgICAKKwogICAgIDwhLS0gVGl0bGUgb2YgYW4gYXBwbGljYXRpb24gcGVybWlzc2lvbiwgbGlzdGVkIHNvIHRoZSB1c2VyIGNhbiBjaG9vc2Ugd2hldGhlciB0aGV5IHdhbnQgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRvIHRoaXMuIC0tPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYWNrdXAiPmNvbnRyb2wgc3lzdGVtIGJhY2t1cCBhbmQgcmVzdG9yZTwvc3RyaW5nPgogICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgYW4gYXBwbGljYXRpb24gcGVybWlzc2lvbiwgbGlzdGVkIHNvIHRoZSB1c2VyIGNhbiBjaG9vc2Ugd2hldGhlciB0aGV5IHdhbnQgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRvIHRoaXMuIC0tPgpAQCAtMTQzMSw2ICsxNDMxLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiPkFsbG93cyB0aGUgYXBwIHRvIHJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIGZyYW1lIGJ1ZmZlci48L3N0cmluZz4KIAogICAgIDwhLS0gVGl0bGUgb2YgYW4gYXBwbGljYXRpb24gcGVybWlzc2lvbiwgbGlzdGVkIHNvIHRoZSB1c2VyIGNhbiBjaG9vc2Ugd2hldGhlciB0aGV5IHdhbnQgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRvIHRoaXMuIC0tPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiPmFjY2VzcyBJbnB1dEZsaW5nZXI8L3N0cmluZz4KKyAgICA8IS0tIERlc2NyaXB0aW9uIG9mIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb24sIGxpc3RlZCBzbyB0aGUgdXNlciBjYW4gY2hvb3NlIHdoZXRoZXIgdGhleSB3YW50IHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkbyB0aGlzLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciI+QWxsb3dzIHRoZSBhcHAgdG8gdXNlIElucHV0RmxpbmdlciBsb3ctbGV2ZWwgZmVhdHVyZXMuPC9zdHJpbmc+CisKKyAgICA8IS0tIFRpdGxlIG9mIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb24sIGxpc3RlZCBzbyB0aGUgdXNlciBjYW4gY2hvb3NlIHdoZXRoZXIgdGhleSB3YW50IHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkbyB0aGlzLiAtLT4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiPmNvbmZpZ3VyZSBXaWZpIGRpc3BsYXlzPC9zdHJpbmc+CiAgICAgPCEtLSBEZXNjcmlwdGlvbiBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSI+QWxsb3dzIHRoZSBhcHAgdG8gY29uZmlndXJlIGFuZCBjb25uZWN0IHRvIFdpZmkgZGlzcGxheXMuPC9zdHJpbmc+CkBAIC0xNDc5LDYgKzE0ODQsMTEgQEAKICAgICAgIHdpdGhvdXQgeW91ciBjb25maXJtYXRpb24uPC9zdHJpbmc+CiAKICAgICA8IS0tIFRpdGxlIG9mIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb24sIGxpc3RlZCBzbyB0aGUgdXNlciBjYW4gY2hvb3NlIHdoZXRoZXIgdGhleSB3YW50IHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkbyB0aGlzLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2ltX2NvbW11bmljYXRpb24iPnNpbSBjb21tdW5pY2F0aW9uPC9zdHJpbmc+CisgICAgPCEtLSBEZXNjcmlwdGlvbiBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiI+QWxsb3dzIHRoZSBhcHAgdG8gc2VuZCBjb21tYW5kcyB0byB0aGUgU0lNLiBUaGlzIGlzIHZlcnkgZGFuZ2Vyb3VzLjwvc3RyaW5nPgorCisgICAgPCEtLSBUaXRsZSBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSI+dGFrZSBwaWN0dXJlcyBhbmQgdmlkZW9zPC9zdHJpbmc+CiAgICAgPCEtLSBEZXNjcmlwdGlvbiBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiPkFsbG93cyB0aGUgYXBwIHRvIHRha2UgcGljdHVyZXMgYW5kIHZpZGVvcwpAQCAtMjI0Nyw2ICsyMjU3LDEwIEBACiAgICAgPCEtLSBPdGhlciBTSVAgYWRkcmVzcyB0eXBlLiBTYW1lIGNvbnRleHQgYXMgT3RoZXIgcGhvbmUgdHlwZS4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIj5PdGhlcjwvc3RyaW5nPgogCisgICAgPCEtLSBFcnJvciBtZXNzYWdlIHRoYXQgaXMgZGlzcGxheWVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIGEgcXVpY2sgY29udGFjdHMgYmFkZ2UsIGJ1dAorICAgICAgICAgdGhlcmUgaXMgbm8gY29udGFjdHMgYXBwbGljYXRpb24gaW5zdGFsbGVkIHRoYXQgY2FuIGRpc3BsYXkgdGhlIHF1aWNrIGNvbnRhY3QgLS0+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIj5ObyBhcHBsaWNhdGlvbiBmb3VuZCB0byB2aWV3IHRoaXMgY29udGFjdC48L3N0cmluZz4KKwogICAgIDwhLS0gSW5zdHJ1Y3Rpb25zIHRlbGxpbmcgdGhlIHVzZXIgdG8gZW50ZXIgdGhlaXIgU0lNIFBJTiB0byB1bmxvY2sgdGhlIGtleWd1YXJkLgogICAgICAgICAgRGlzcGxheWVkIGluIG9uZSBsaW5lIGluIGEgbGFyZ2UgZm9udC4gIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiPlR5cGUgUElOIGNvZGU8L3N0cmluZz4KQEAgLTM2MzAsNiArMzY0NCwxMSBAQAogICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgYW4gYXBwbGljYXRpb24gcGVybWlzc2lvbiB0aGF0IGxldHMgaXQgY29udHJvbCBrZXlndWFyZC4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sX2tleWd1YXJkIj5BbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gY29udHJvbCBrZWd1YXJkLjwvc3RyaW5nPgogCisgICAgPCEtLSBUaXRsZSBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uIHRoYXQgbGV0cyBpdCBpbnRlcmFjdCB3aXRoIHJlY292ZXJ5LiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3ZlcnkiPkludGVyYWN0IHdpdGggdXBkYXRlIGFuZCByZWNvdmVyeSBzeXN0ZW08L3N0cmluZz4KKyAgICA8IS0tIERlc2NyaXB0aW9uIG9mIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb24gdGhhdCBsZXRzIGl0IGNvbnRyb2wga2V5Z3VhcmQuIC0tPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3ZlcnkiPkFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBpbnRlcmFjdCB3aXRoIHRoZSByZWNvdmVyeSBzeXN0ZW0gYW5kIHN5c3RlbSB1cGRhdGVzLjwvc3RyaW5nPgorCiAgICAgPCEtLSBTaG93biBpbiB0aGUgdHV0b3JpYWwgZm9yIHRhcCB0d2ljZSBmb3Igem9vbSBjb250cm9sLiAtLT4KICAgICA8c3RyaW5nIG5hbWU9InR1dG9yaWFsX2RvdWJsZV90YXBfdG9fem9vbV9tZXNzYWdlX3Nob3J0Ij5Ub3VjaCB0d2ljZSBmb3Igem9vbSBjb250cm9sPC9zdHJpbmc+CiAKQEAgLTM5MjEsMjYgKzM5NDAsNiBAQAogICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgdGhlIHNsaWRpbmcgaGFuZGxlIGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiPiJTbGlkaW5nIGhhbmRsZS4gVG91Y2ggJmFtcDsgaG9sZC4iPC9zdHJpbmc+CiAKLSAgICA8IS0tIERlc2NyaXB0aW9uIG9mIHRoZSB1cCBkaXJlY3Rpb24gaW4gd2hpY2ggb25lIGNhbiB0byBzbGlkZSB0aGUgaGFuZGxlIGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCI+U2xpZGUgdXAgZm9yIDx4bGlmZjpnIGlkPSJ0YXJnZXRfZGVzY3JpcHRpb24iIGV4YW1wbGU9IlVubG9jayI+JXM8L3hsaWZmOmc+Ljwvc3RyaW5nPgotICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgdGhlIGRvd24gZGlyZWN0aW9uIGluIHdoaWNoIG9uZSBjYW4gdG8gc2xpZGUgdGhlIGhhbmRsZSBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biI+U2xpZGUgZG93biBmb3IgPHhsaWZmOmcgaWQ9InRhcmdldF9kZXNjcmlwdGlvbiIgZXhhbXBsZT0iVW5sb2NrIj4lczwveGxpZmY6Zz4uPC9zdHJpbmc+Ci0gICAgPCEtLSBEZXNjcmlwdGlvbiBvZiB0aGUgbGVmdCBkaXJlY3Rpb24gaW4gd2hpY2ggb25lIGNhbiB0byBzbGlkZSB0aGUgaGFuZGxlIGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0Ij4iU2xpZGUgbGVmdCBmb3IgPHhsaWZmOmcgaWQ9InRhcmdldF9kZXNjcmlwdGlvbiIgZXhhbXBsZT0iVW5sb2NrIj4lczwveGxpZmY6Zz4uPC9zdHJpbmc+Ci0gICAgPCEtLSBEZXNjcmlwdGlvbiBvZiB0aGUgcmlnaHQgZGlyZWN0aW9uIGluIHdoaWNoIG9uZSBjYW4gdG8gc2xpZGUgdGhlIGhhbmRsZSBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiPlNsaWRlIHJpZ2h0IGZvciA8eGxpZmY6ZyBpZD0idGFyZ2V0X2Rlc2NyaXB0aW9uIiBleGFtcGxlPSJVbmxvY2siPiVzPC94bGlmZjpnPi48L3N0cmluZz4KLQotICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgdGhlIHVubG9jayB0YXJnZXQgaW4gdGhlIFNsaWRlIHVubG9jayBzY3JlZW4uIFtDSEFSIExJTUlUPU5PTkVdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayI+VW5sb2NrPC9zdHJpbmc+Ci0gICAgPCEtLSBEZXNjcmlwdGlvbiBvZiB0aGUgY2FtZXJhIHRhcmdldCBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIj5DYW1lcmE8L3N0cmluZz4KLSAgICA8IS0tIERlc2NyaXB0aW9uIG9mIHRoZSBzaWxlbnQgdGFyZ2V0IGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiPlNpbGVudDwvc3RyaW5nPgotICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgdGhlIHNvdW5kIG9uIHRhcmdldCBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiI+U291bmQgb248L3N0cmluZz4KLSAgICA8IS0tIERlc2NyaXB0aW9uIG9mIHRoZSB1bmxvY2sgdGFyZ2V0IGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giPlNlYXJjaDwvc3RyaW5nPgotCiAgICAgPCEtLSBEZXNjcmlwdGlvbiBvZiB0aGUgdW5sb2NrIGhhbmRsZSBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbiBmb3IgdGFibGV0cy4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCI+U3dpcGUgdG8gdW5sb2NrLjwvc3RyaW5nPgogCkBAIC00NTIxLDQgKzQ1MjAsNTUgQEAKICAgICA8IS0tIENsaW5nIGhlbHAgbWVzc2FnZSB3aGVuIGhpZGluZyB0aGUgbmF2aWdhdGlvbiBiYXIgZW50ZXJpbmcgaW1tZXJzaXZlIG1vZGUgW0NIQVIgTElNSVQ9bm9uZV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI4NTU0OTkxNDg4MDk2NjYyNTA4Ij5Td2lwZSBkb3duIGZyb20gdGhlIHRvcCB0byBleGl0IGZ1bGwgc2NyZWVuLjwvc3RyaW5nPgogCisgICAgPCEtLSBMYWJlbCBmb3IgYnV0dG9uIHRvIGNvbmZpcm0gY2hvc2VuIGRhdGUgb3IgdGltZSBbQ0hBUiBMSU1JVD0zMF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIj5Eb25lPC9zdHJpbmc+CisgICAgPCEtLQorICAgICAgICAgQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgdGhlIGhvdXIgc2VsZWN0b3IgaW4gdGhlIHRpbWUgcGlja2VyLCB3aGljaCBkaXNwbGF5cworICAgICAgICAgc2VsZWN0YWJsZSBob3VycyBvZiB0aGUgZGF5IGFsb25nIHRoZSBpbnNpZGUgZWRnZSBvZiBhIGNpcmNsZSwgYXMgaW4gYW4gYW5hbG9nIGNsb2NrLgorICAgICAgICAgW0NIQVIgTElNSVQ9NTBdCisgICAgLS0+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiI+SG91cnMgY2lyY3VsYXIgc2xpZGVyPC9zdHJpbmc+CisgICAgPCEtLQorICAgICAgICAgQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgdGhlIG1pbnV0ZSBzZWxlY3RvciBpbiB0aGUgdGltZSBwaWNrZXIsIHdoaWNoIGRpc3BsYXlzCisgICAgICAgICBzZWxlY3RhYmxlIGZpdmUtbWludXRlIGludGVydmFscyBhbG9uZyB0aGUgaW5zaWRlIGVkZ2Ugb2YgYSBjaXJjbGUsIGFzIGluIGFuIGFuYWxvZyBjbG9jay4KKyAgICAgICAgIFtDSEFSIExJTUlUPTUwXQorICAgIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiI+TWludXRlcyBjaXJjdWxhciBzbGlkZXI8L3N0cmluZz4KKyAgICA8IS0tIEFjY2Vzc2liaWxpdHkgYW5ub3VuY2VtZW50IGZvciBob3VyIGNpcmN1bGFyIHBpY2tlciBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyI+U2VsZWN0IGhvdXJzPC9zdHJpbmc+CisgICAgPCEtLSBBY2Nlc3NpYmlsaXR5IGFubm91bmNlbWVudCBmb3IgbWludXRlIGNpcmN1bGFyIHBpY2tlciBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIj5TZWxlY3QgbWludXRlczwvc3RyaW5nPgorCisgICAgPCEtLQorICAgICAgICBDb250ZW50IGRlc2NyaXB0aW9uIGZvciB0aGUgbW9udGggYW5kIGRheSBzZWxlY3RvciBpbiB0aGUgZGF0ZSBwaWNrZXIsIHdoaWNoIGRpc3BsYXlzCisgICAgICAgIGEgc2VsZWN0YWJsZSBncmlkIG9mIGRheXMgbGFpZCBvdXQgYnkgbW9udGguCisgICAgICAgIFtDSEFSIExJTUlUPTUwXQorICAgICAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iPk1vbnRoIGdyaWQgb2YgZGF5czwvc3RyaW5nPgorICAgIDwhLS0KKyAgICAgICAgQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgdGhlIHllYXIgc2VsZWN0b3IgaW4gdGhlIGRhdGUgcGlja2VyLCB3aGljaCBkaXNwbGF5cworICAgICAgICBhIHNjcm9sbGluZywgdmVydGljYWwgbGlzdCBvZiB5ZWFycy4KKyAgICAgICAgW0NIQVIgTElNSVQ9NTBdCisgICAgIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iPlllYXIgbGlzdDwvc3RyaW5nPgorICAgIDwhLS0gQWNjZXNzaWJpbGl0eSBhbm5vdW5jZW1lbnQgZm9yIHRoZSBkYXkgcGlja2VyIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSI+U2VsZWN0IG1vbnRoIGFuZCBkYXk8L3N0cmluZz4KKyAgICA8IS0tIEFjY2Vzc2liaWxpdHkgYW5ub3VuY2VtZW50IGZvciB0aGUgeWVhciBwaWNrZXIgW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciI+U2VsZWN0IHllYXI8L3N0cmluZz4KKyAgICA8IS0tIEFjY2Vzc2liaWxpdHkgZGVzY3JpcHRpb24gZm9yIHRoZSBpdGVtIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiPjx4bGlmZjpnIGlkPSJpdGVtIiBleGFtcGxlPSIyMDEzIj4lMSRzPC94bGlmZjpnPiBzZWxlY3RlZDwvc3RyaW5nPgorICAgIDwhLS0gQWNjZXNzaWJpbGl0eSBhbm5vdW5jZW1lbnQgd2hlbiBhIG51bWJlciB0aGF0IGhhZCBiZWVuIHR5cGVkIGluIGlzIGRlbGV0ZWQgW0NIQVJfTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSI+PHhsaWZmOmcgaWQ9ImtleSIgZXhhbXBsZT0iNCI+JTEkczwveGxpZmY6Zz4gZGVsZXRlZDwvc3RyaW5nPgorCisgICAgPCEtLSBETyBOT1QgVFJBTlNMQVRFIC0tPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9wbGFjZWhvbGRlciI+LS08L3N0cmluZz4KKworICAgIDwhLS0gRE8gTk9UIFRSQU5TTEFURSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InJhZGlhbF9udW1iZXJzX3R5cGVmYWNlIj5zYW5zLXNlcmlmPC9zdHJpbmc+CisgICAgPCEtLSBETyBOT1QgVFJBTlNMQVRFIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ic2Fuc19zZXJpZiI+c2Fucy1zZXJpZjwvc3RyaW5nPgorCisgICAgPCEtLSBETyBOT1QgVFJBTlNMQVRFIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X29mX3dlZWtfbGFiZWxfdHlwZWZhY2UiPnNhbnMtc2VyaWY8L3N0cmluZz4KKwogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlcy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlcy54bWwKaW5kZXggY2IyZmQ2ZC4uMWE2ZWFjZCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzLnhtbApAQCAtMjkyLDYgKzI5Miw3IEBACiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5BYnNMaXN0VmlldyI+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2Nyb2xsYmFycyI+dmVydGljYWw8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZmFkaW5nRWRnZSI+dmVydGljYWw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZmFzdFNjcm9sbFN0eWxlIj4/YW5kcm9pZDphdHRyL2Zhc3RTY3JvbGxTdHlsZTwvaXRlbT4KICAgICA8L3N0eWxlPgogCiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5HZXN0dXJlT3ZlcmxheVZpZXciPgpAQCAtNTEwLDYgKzUxMSwxMSBAQAogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmNoaWxkRGl2aWRlciI+QGFuZHJvaWQ6ZHJhd2FibGUvZGl2aWRlcl9ob3Jpem9udGFsX2JyaWdodF9vcGFxdWU8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAorICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuRnJhZ21lbnRCcmVhZENydW1icyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZyI+NGRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFuaW1hdGVMYXlvdXRDaGFuZ2VzIj50cnVlPC9pdGVtPgorICAgIDwvc3R5bGU+CisKICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkltYWdlV2VsbCI+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvcGFuZWxfcGljdHVyZV9mcmFtZV9iYWNrZ3JvdW5kPC9pdGVtPgogICAgIDwvc3R5bGU+CkBAIC01NDQsNyArNTUwLDcgQEAKICAgICA8L3N0eWxlPgogCiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5UaW1lUGlja2VyIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbnRlcm5hbExheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3RpbWVfcGlja2VyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxlZ2FjeUxheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3RpbWVfcGlja2VyX2xlZ2FjeTwvaXRlbT4KICAgICA8L3N0eWxlPgogCiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5EYXRlUGlja2VyIj4KQEAgLTY4MSwxMiArNjg3LDYgQEAKICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwb3B1cEFuaW1hdGlvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9BbmltYXRpb24uUG9wdXBXaW5kb3c8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAotICAgIDwhLS0gRGVmYXVsdCBzdHlsZSBmb3Ige0BsaW5rIGFuZHJvaWQuYXBwLkZyYWdtZW50QnJlYWRDcnVtYnN9IHZpZXcuIC0tPgotICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuRnJhZ21lbnRCcmVhZENydW1icyI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZyI+NGRwPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFuaW1hdGVMYXlvdXRDaGFuZ2VzIj50cnVlPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LktleWJvYXJkVmlldyIgcGFyZW50PSJhbmRyb2lkOldpZGdldCI+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUva2V5Ym9hcmRfYmFja2dyb3VuZDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDprZXlCYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9idG5fa2V5Ym9hcmRfa2V5PC9pdGVtPgpAQCAtMTY2Miw2ICsxNjYyLDkgQEAKICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkhvbG8uRXhwYW5kYWJsZUxpc3RWaWV3LldoaXRlIj4KICAgICA8L3N0eWxlPgogCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5Ib2xvLkZyYWdtZW50QnJlYWRDcnVtYnMiIHBhcmVudD0iV2lkZ2V0LkZyYWdtZW50QnJlYWRDcnVtYnMiPgorICAgIDwvc3R5bGU+CisKICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkhvbG8uR2FsbGVyeSIgcGFyZW50PSJXaWRnZXQuR2FsbGVyeSI+CiAgICAgPC9zdHlsZT4KIApAQCAtMTY5OCw3ICsxNzAxLDE4IEBACiAgICAgPC9zdHlsZT4KIAogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5UaW1lUGlja2VyIiBwYXJlbnQ9IldpZGdldC5UaW1lUGlja2VyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsZWdhY3lMYXlvdXQiPkBhbmRyb2lkOmxheW91dC90aW1lX3BpY2tlcl9sZWdhY3lfaG9sbzwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbnRlcm5hbExheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3RpbWVfcGlja2VyX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZGlzYWJsZWRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2Rpc2FibGVkX2NvbG9yX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpoZWFkZXJTZWxlY3RlZFRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmhlYWRlclVuc2VsZWN0ZWRUZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpoZWFkZXJCYWNrZ3JvdW5kQ29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF9iYWNrZ3JvdW5kX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpudW1iZXJzVGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bnVtYmVyc0JhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFtUG1UZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDphbVBtVW5zZWxlY3RlZEJhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFtUG1TZWxlY3RlZEJhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm51bWJlcnNTZWxlY3RvckNvbG9yIj5AYW5kcm9pZDpjb2xvci9ob2xvX2JsdWVfbGlnaHQ8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5EYXRlUGlja2VyIiBwYXJlbnQ9IldpZGdldC5EYXRlUGlja2VyIj4KQEAgLTIwOTEsNiArMjEwNSw5IEBACiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5Ib2xvLkxpZ2h0LkV4cGFuZGFibGVMaXN0Vmlldy5XaGl0ZSI+CiAgICAgPC9zdHlsZT4KIAorICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5MaWdodC5GcmFnbWVudEJyZWFkQ3J1bWJzIiBwYXJlbnQ9IldpZGdldC5GcmFnbWVudEJyZWFkQ3J1bWJzIj4KKyAgICA8L3N0eWxlPgorCiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5Ib2xvLkxpZ2h0LkdhbGxlcnkiIHBhcmVudD0iV2lkZ2V0LkdhbGxlcnkiPgogICAgIDwvc3R5bGU+CiAKQEAgLTIxMTYsNyArMjEzMywxOSBAQAogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5MaWdodC5OdW1iZXJQaWNrZXIiIHBhcmVudD0iV2lkZ2V0LkhvbG8uTnVtYmVyUGlja2VyIj4KICAgICA8L3N0eWxlPgogCi0gICAgPHN0eWxlIG5hbWU9IldpZGdldC5Ib2xvLkxpZ2h0LlRpbWVQaWNrZXIiIHBhcmVudD0iV2lkZ2V0LkhvbG8uVGltZVBpY2tlciI+CisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5Ib2xvLkxpZ2h0LlRpbWVQaWNrZXIiIHBhcmVudD0iV2lkZ2V0LlRpbWVQaWNrZXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxlZ2FjeUxheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3RpbWVfcGlja2VyX2xlZ2FjeV9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmludGVybmFsTGF5b3V0Ij5AYW5kcm9pZDpsYXlvdXQvdGltZV9waWNrZXJfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkaXNhYmxlZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfZGlzYWJsZWRfY29sb3JfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpoZWFkZXJTZWxlY3RlZFRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmhlYWRlclVuc2VsZWN0ZWRUZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aGVhZGVyQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfYmFja2dyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm51bWJlcnNUZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bnVtYmVyc0JhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDphbVBtVGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFtUG1VbnNlbGVjdGVkQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfYmFja2dyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFtUG1TZWxlY3RlZEJhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm51bWJlcnNTZWxlY3RvckNvbG9yIj5AYW5kcm9pZDpjb2xvci9ob2xvX2JsdWVfbGlnaHQ8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5MaWdodC5EYXRlUGlja2VyIiBwYXJlbnQ9IldpZGdldC5Ib2xvLkRhdGVQaWNrZXIiPgpAQCAtMjQ5NSwxMyArMjUyNCw4IEBACiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uIj5AYW5kcm9pZDpzdHJpbmcvbWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb248L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAotICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5MaWdodC5NZWRpYVJvdXRlQnV0dG9uIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj4/YW5kcm9pZDphdHRyL3NlbGVjdGFibGVJdGVtQmFja2dyb3VuZDwvaXRlbT4KKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkhvbG8uTGlnaHQuTWVkaWFSb3V0ZUJ1dHRvbiIgcGFyZW50PSJXaWRnZXQuSG9sby5NZWRpYVJvdXRlQnV0dG9uIj4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpleHRlcm5hbFJvdXRlRW5hYmxlZERyYXdhYmxlIj5AZHJhd2FibGUvaWNfbWVkaWFfcm91dGVfaG9sb19saWdodDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptaW5XaWR0aCI+NTZkcDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptaW5IZWlnaHQiPjQ4ZHA8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Zm9jdXNhYmxlIj50cnVlPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbiI+QGFuZHJvaWQ6c3RyaW5nL21lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uPC9pdGVtPgogICAgIDwvc3R5bGU+CiAKICAgICA8IS0tIEtleWd1YXJkIFBJTiBwYWQgc3R5bGVzIC0tPgpAQCAtMjUzMSw0ICsyNTU1LDU3IEBACiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj4jODBmZmZmZmY8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAorICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5UaW1lUGlja2VyLlRpbWVMYWJlbCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZSI+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5UaW1lUGlja2VyLkFtUG1MYWJlbCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZSI+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5Ib2xvLlRpbWVQaWNrZXIuVGltZUxhYmVsIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLkhvbG8iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj5AZGltZW4vdGltZXBpY2tlcl90aW1lX2xhYmVsX3NpemU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2Rhcms8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5Ib2xvLlRpbWVQaWNrZXIuQW1QbUxhYmVsIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLkhvbG8iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj5AZGltZW4vdGltZXBpY2tlcl9hbXBtX2xhYmVsX3NpemU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dEFsbENhcHMiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFN0eWxlIj5ib2xkPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuSG9sby5MaWdodC5UaW1lUGlja2VyLlRpbWVMYWJlbCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5Ib2xvLkxpZ2h0Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+QGRpbWVuL3RpbWVwaWNrZXJfdGltZV9sYWJlbF9zaXplPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+QGNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5Ib2xvLkxpZ2h0LlRpbWVQaWNrZXIuQW1QbUxhYmVsIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLkhvbG8uTGlnaHQiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj5AZGltZW4vdGltZXBpY2tlcl9hbXBtX2xhYmVsX3NpemU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dEFsbENhcHMiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AY29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X3RleHRfY29sb3JfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U3R5bGUiPmJvbGQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuRmFzdFNjcm9sbCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGh1bWJEcmF3YWJsZSI+P2FuZHJvaWQ6YXR0ci9mYXN0U2Nyb2xsVGh1bWJEcmF3YWJsZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0cmFja0RyYXdhYmxlIj4/YW5kcm9pZDphdHRyL2Zhc3RTY3JvbGxUcmFja0RyYXdhYmxlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmRMZWZ0Ij4/YW5kcm9pZDphdHRyL2Zhc3RTY3JvbGxQcmV2aWV3QmFja2dyb3VuZExlZnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZFJpZ2h0Ij4/YW5kcm9pZDphdHRyL2Zhc3RTY3JvbGxQcmV2aWV3QmFja2dyb3VuZFJpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBvc2l0aW9uIj4/YW5kcm9pZDphdHRyL2Zhc3RTY3JvbGxPdmVybGF5UG9zaXRpb248L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj4/YW5kcm9pZDphdHRyL2Zhc3RTY3JvbGxUZXh0Q29sb3I8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGh1bWJNaW5XaWR0aCI+NjRkcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0aHVtYk1pbkhlaWdodCI+NTJkcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+NTJzcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptaW5XaWR0aCI+NzJkcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptaW5IZWlnaHQiPjcyZHA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZyI+MTZkcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5Ib2xvLkZhc3RTY3JvbGwiIHBhcmVudD0iV2lkZ2V0LkZhc3RTY3JvbGwiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRodW1iTWluV2lkdGgiPjBkcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0aHVtYk1pbkhlaWdodCI+MGRwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkhvbG8uTGlnaHQuRmFzdFNjcm9sbCIgcGFyZW50PSJXaWRnZXQuSG9sby5GYXN0U2Nyb2xsIj4KKyAgICA8L3N0eWxlPgorCiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzX2RldmljZV9kZWZhdWx0cy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlc19kZXZpY2VfZGVmYXVsdHMueG1sCmluZGV4IGVkZWJhMDIuLjUxMmM5YjggMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzX2RldmljZV9kZWZhdWx0cy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXNfZGV2aWNlX2RlZmF1bHRzLnhtbApAQCAtMjA2LDYgKzIwNiwxMiBAQAogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuRGV2aWNlRGVmYXVsdC5FeHBhbmRhYmxlTGlzdFZpZXcuV2hpdGUiIHBhcmVudD0iV2lkZ2V0LkhvbG8uRXhwYW5kYWJsZUxpc3RWaWV3LldoaXRlIj4KIAogICAgIDwvc3R5bGU+CisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5EZXZpY2VEZWZhdWx0LkZhc3RTY3JvbGwiIHBhcmVudD0iV2lkZ2V0LkhvbG8uRmFzdFNjcm9sbCI+CisKKyAgICA8L3N0eWxlPgorICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuRGV2aWNlRGVmYXVsdC5GcmFnbWVudEJyZWFkQ3J1bWJzIiBwYXJlbnQ9IldpZGdldC5Ib2xvLkZyYWdtZW50QnJlYWRDcnVtYnMiPgorCisgICAgPC9zdHlsZT4KICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkRldmljZURlZmF1bHQuR2FsbGVyeSIgcGFyZW50PSJXaWRnZXQuSG9sby5HYWxsZXJ5Ij4KIAogICAgIDwvc3R5bGU+CkBAIC0zMDksNiArMzE1LDEyIEBACiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5EZXZpY2VEZWZhdWx0LkxpZ2h0LkV4cGFuZGFibGVMaXN0VmlldyIgcGFyZW50PSJXaWRnZXQuSG9sby5MaWdodC5FeHBhbmRhYmxlTGlzdFZpZXciID4KIAogICAgIDwvc3R5bGU+CisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5EZXZpY2VEZWZhdWx0LkxpZ2h0LkZhc3RTY3JvbGwiIHBhcmVudD0iV2lkZ2V0LkhvbG8uTGlnaHQuRmFzdFNjcm9sbCI+CisKKyAgICA8L3N0eWxlPgorICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuRGV2aWNlRGVmYXVsdC5MaWdodC5GcmFnbWVudEJyZWFkQ3J1bWJzIiBwYXJlbnQ9IldpZGdldC5Ib2xvLkxpZ2h0LkZyYWdtZW50QnJlYWRDcnVtYnMiPgorCisgICAgPC9zdHlsZT4KICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkRldmljZURlZmF1bHQuTGlnaHQuR3JpZFZpZXciIHBhcmVudD0iV2lkZ2V0LkhvbG8uTGlnaHQuR3JpZFZpZXciID4KIAogICAgIDwvc3R5bGU+CkBAIC03MjksNCArNzQxLDIyIEBACiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5EZXZpY2VEZWZhdWx0Lk1lZGlhUm91dGVCdXR0b24iIHBhcmVudD0iV2lkZ2V0LkhvbG8uTWVkaWFSb3V0ZUJ1dHRvbiIgLz4KICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkRldmljZURlZmF1bHQuTGlnaHQuTWVkaWFSb3V0ZUJ1dHRvbiIgcGFyZW50PSJXaWRnZXQuSG9sby5MaWdodC5NZWRpYVJvdXRlQnV0dG9uIiAvPgogCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLkRldmljZURlZmF1bHQuVGltZVBpY2tlci5UaW1lTGFiZWwiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuSG9sby5UaW1lUGlja2VyLlRpbWVMYWJlbCI+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5EZXZpY2VEZWZhdWx0LkxpZ2h0LlRpbWVQaWNrZXIuVGltZUxhYmVsIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLkhvbG8uTGlnaHQuVGltZVBpY2tlci5UaW1lTGFiZWwiPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuRGV2aWNlRGVmYXVsdC5UaW1lUGlja2VyLkFtUG1MYWJlbCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5Ib2xvLlRpbWVQaWNrZXIuQW1QbUxhYmVsIj4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLkRldmljZURlZmF1bHQuTGlnaHQuVGltZVBpY2tlci5BbVBtTGFiZWwiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuSG9sby5MaWdodC5UaW1lUGlja2VyLkFtUG1MYWJlbCI+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5EZXZpY2VEZWZhdWx0LkRpYWxvZy5UaW1lUGlja2VyIiBwYXJlbnQ9IlRoZW1lLkhvbG8uRGlhbG9nLlRpbWVQaWNrZXIiPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuRGV2aWNlRGVmYXVsdC5MaWdodC5EaWFsb2cuVGltZVBpY2tlciIgcGFyZW50PSJUaGVtZS5Ib2xvLkxpZ2h0LkRpYWxvZy5UaW1lUGlja2VyIj4KKyAgICA8L3N0eWxlPgorCiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzX3F1YW50dW0ueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXNfcXVhbnR1bS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmMTFjZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzX3F1YW50dW0ueG1sCkBAIC0wLDAgKzEsMTI0MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPCEtLQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAgICAgICAgICBQTEVBU0UgUkVBRAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBRdWFudHVtIHRoZW1lcyBtdXN0IG5vdCBiZSBtb2RpZmllZCBpbiBvcmRlciB0byBwYXNzIENUUy4KK01hbnkgcmVsYXRlZCB0aGVtZXMgYW5kIHN0eWxlcyBkZXBlbmQgb24gb3RoZXIgdmFsdWVzIGRlZmluZWQgaW4gdGhpcyBmaWxlLgorSWYgeW91IHdvdWxkIGxpa2UgdG8gcHJvdmlkZSBjdXN0b20gdGhlbWVzIGFuZCBzdHlsZXMgZm9yIHlvdXIgZGV2aWNlLAorcGxlYXNlIHNlZSBzdHlsZXNfZGV2aWNlX2RlZmF1bHRzLnhtbC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAgICAgICAgICBQTEVBU0UgUkVBRAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgLS0+Cis8cmVzb3VyY2VzPgorICAgIDwhLS0gUHJlZmVyZW5jZSBzdHlsZXMgLS0+CisgICAgPGVhdC1jb21tZW50IC8+CisKKyAgICA8c3R5bGUgbmFtZT0iUHJlZmVyZW5jZS5RdWFudHVtIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXQiPkBhbmRyb2lkOmxheW91dC9wcmVmZXJlbmNlX2hvbG88L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJQcmVmZXJlbmNlRnJhZ21lbnQuUXVhbnR1bSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZ1N0YXJ0Ij5AZGltZW4vcHJlZmVyZW5jZV9mcmFnbWVudF9wYWRkaW5nX3NpZGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZ0VuZCI+QGRpbWVuL3ByZWZlcmVuY2VfZnJhZ21lbnRfcGFkZGluZ19zaWRlPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iUHJlZmVyZW5jZS5RdWFudHVtLkluZm9ybWF0aW9uIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXQiPkBhbmRyb2lkOmxheW91dC9wcmVmZXJlbmNlX2luZm9ybWF0aW9uX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZW5hYmxlZCI+ZmFsc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2hvdWxkRGlzYWJsZVZpZXciPmZhbHNlPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iUHJlZmVyZW5jZS5RdWFudHVtLkNhdGVnb3J5Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXQiPkBhbmRyb2lkOmxheW91dC9wcmVmZXJlbmNlX2NhdGVnb3J5X2hvbG88L2l0ZW0+CisgICAgICAgIDwhLS0gVGhlIHRpdGxlIHNob3VsZCBub3QgZGltIGlmIHRoZSBjYXRlZ29yeSBpcyBkaXNhYmxlZCwgaW5zdGVhZCBvbmx5IHRoZSBwcmVmZXJlbmNlIGNoaWxkcmVuIHNob3VsZCBkaW0uIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNob3VsZERpc2FibGVWaWV3Ij5mYWxzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzZWxlY3RhYmxlIj5mYWxzZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlByZWZlcmVuY2UuUXVhbnR1bS5DaGVja0JveFByZWZlcmVuY2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpZGdldExheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3ByZWZlcmVuY2Vfd2lkZ2V0X2NoZWNrYm94PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iUHJlZmVyZW5jZS5RdWFudHVtLlN3aXRjaFByZWZlcmVuY2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpZGdldExheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3ByZWZlcmVuY2Vfd2lkZ2V0X3N3aXRjaDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzd2l0Y2hUZXh0T24iPkBhbmRyb2lkOnN0cmluZy9jYXBpdGFsX29uPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnN3aXRjaFRleHRPZmYiPkBhbmRyb2lkOnN0cmluZy9jYXBpdGFsX29mZjwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlByZWZlcmVuY2UuUXVhbnR1bS5QcmVmZXJlbmNlU2NyZWVuIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iUHJlZmVyZW5jZS5RdWFudHVtLkRpYWxvZ1ByZWZlcmVuY2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBvc2l0aXZlQnV0dG9uVGV4dCI+QGFuZHJvaWQ6c3RyaW5nL29rPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm5lZ2F0aXZlQnV0dG9uVGV4dCI+QGFuZHJvaWQ6c3RyaW5nL2NhbmNlbDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlByZWZlcmVuY2UuUXVhbnR1bS5EaWFsb2dQcmVmZXJlbmNlLlllc05vUHJlZmVyZW5jZSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cG9zaXRpdmVCdXR0b25UZXh0Ij5AYW5kcm9pZDpzdHJpbmcveWVzPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm5lZ2F0aXZlQnV0dG9uVGV4dCI+QGFuZHJvaWQ6c3RyaW5nL25vPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iUHJlZmVyZW5jZS5RdWFudHVtLkRpYWxvZ1ByZWZlcmVuY2UuRWRpdFRleHRQcmVmZXJlbmNlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkaWFsb2dMYXlvdXQiPkBhbmRyb2lkOmxheW91dC9wcmVmZXJlbmNlX2RpYWxvZ19lZGl0dGV4dDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlByZWZlcmVuY2UuUXVhbnR1bS5SaW5ndG9uZVByZWZlcmVuY2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnJpbmd0b25lVHlwZSI+cmluZ3RvbmU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2hvd1NpbGVudCI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzaG93RGVmYXVsdCI+dHJ1ZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBCZWdpbiBRdWFudHVtIHRoZW1lIHN0eWxlcyAtLT4KKworICAgIDwhLS0gVGV4dCBTdHlsZXMgLS0+CisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0iIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UiLz4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkludmVyc2UiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuSW52ZXJzZSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj4/dGV4dENvbG9yUHJpbWFyeUludmVyc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9ySGludCI+P3RleHRDb2xvckhpbnRJbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvckhpZ2hsaWdodCI+P3RleHRDb2xvckhpZ2hsaWdodEludmVyc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yTGluayI+P3RleHRDb2xvckxpbmtJbnZlcnNlPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MYXJnZSIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5MYXJnZSIvPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTWVkaXVtIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLk1lZGl1bSIvPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uU21hbGwiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuU21hbGwiLz4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxhcmdlLkludmVyc2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+P3RleHRDb2xvclByaW1hcnlJbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvckhpbnQiPj90ZXh0Q29sb3JIaW50SW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JIaWdobGlnaHQiPj90ZXh0Q29sb3JIaWdobGlnaHRJbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvckxpbmsiPj90ZXh0Q29sb3JMaW5rSW52ZXJzZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTWVkaXVtLkludmVyc2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+P3RleHRDb2xvclByaW1hcnlJbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvckhpbnQiPj90ZXh0Q29sb3JIaW50SW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JIaWdobGlnaHQiPj90ZXh0Q29sb3JIaWdobGlnaHRJbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvckxpbmsiPj90ZXh0Q29sb3JMaW5rSW52ZXJzZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uU21hbGwuSW52ZXJzZSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj4/dGV4dENvbG9yU2Vjb25kYXJ5SW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JIaW50Ij4/dGV4dENvbG9ySGludEludmVyc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9ySGlnaGxpZ2h0Ij4/dGV4dENvbG9ySGlnaGxpZ2h0SW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JMaW5rIj4/dGV4dENvbG9yTGlua0ludmVyc2U8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLlNlYXJjaFJlc3VsdCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFN0eWxlIj5ub3JtYWw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj4/dGV4dENvbG9yUHJpbWFyeTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JIaW50Ij4/dGV4dENvbG9ySGludDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uU2VhcmNoUmVzdWx0LlRpdGxlIj4KKyAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFNpemUiPjE4c3A8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLlNlYXJjaFJlc3VsdC5TdWJ0aXRsZSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFNpemUiPjE0c3A8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj4/dGV4dENvbG9yU2Vjb25kYXJ5PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuV2lkZ2V0Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQnV0dG9uIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uU21hbGwuSW52ZXJzZSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci9wcmltYXJ5X3RleHRfbGlnaHRfbm9kaXNhYmxlPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuSWNvbk1lbnUuSXRlbSIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLlNtYWxsIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPj90ZXh0Q29sb3JQcmltYXJ5PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFRoaXMgc3R5bGUgaXMgZm9yIHNtYWxsZXIgc2NyZWVuczsgdmFsdWVzLXhsYXJnZSBkZWZpbmVzIGEgdmVyc2lvbgorICAgICAgICAgZm9yIGxhcmdlciBzY3JlZW5zLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuVGFiV2lkZ2V0Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+MTRzcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U3R5bGUiPm5vcm1hbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RhYl9pbmRpY2F0b3JfdGV4dDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LlRleHRWaWV3Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPj90ZXh0Q29sb3JQcmltYXJ5RGlzYWJsZU9ubHk8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9ySGludCI+P3RleHRDb2xvckhpbnQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5UZXh0Vmlldy5Qb3B1cE1lbnUiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj4xOHNwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+P3RleHRDb2xvclByaW1hcnlEaXNhYmxlT25seTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JIaW50Ij4/dGV4dENvbG9ySGludDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkRyb3BEb3duSGludCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj4/dGV4dENvbG9yUHJpbWFyeTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+MTRzcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkRyb3BEb3duSXRlbSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj4/dGV4dENvbG9yUHJpbWFyeURpc2FibGVPbmx5PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuVGV4dFZpZXcuU3Bpbm5lckl0ZW0iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+P3RleHRDb2xvclByaW1hcnlEaXNhYmxlT25seTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkVkaXRUZXh0Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL2JyaWdodF9mb3JlZ3JvdW5kX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvckhpbnQiPkBhbmRyb2lkOmNvbG9yL2hpbnRfZm9yZWdyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuUG9wdXBNZW51IiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLldpZGdldC5Qb3B1cE1lbnUiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+P2FuZHJvaWQ6YXR0ci90ZXh0Q29sb3JQcmltYXJ5PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuUG9wdXBNZW51LkxhcmdlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+MThzcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LlBvcHVwTWVudS5TbWFsbCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFNpemUiPjE0c3A8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5BY3Rpb25CYXIuVGl0bGUiCisgICAgICAgICAgIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5NZWRpdW0iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj5AYW5kcm9pZDpkaW1lbi9hY3Rpb25fYmFyX3RpdGxlX3RleHRfc2l6ZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbkJhci5TdWJ0aXRsZSIKKyAgICAgICAgICAgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLlNtYWxsIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+QGFuZHJvaWQ6ZGltZW4vYWN0aW9uX2Jhcl9zdWJ0aXRsZV90ZXh0X3NpemU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5BY3Rpb25CYXIuVGl0bGUuSW52ZXJzZSIKKyAgICAgICAgICAgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLk1lZGl1bS5JbnZlcnNlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+QGFuZHJvaWQ6ZGltZW4vYWN0aW9uX2Jhcl90aXRsZV90ZXh0X3NpemU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5BY3Rpb25CYXIuU3VidGl0bGUuSW52ZXJzZSIKKyAgICAgICAgICAgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLlNtYWxsLkludmVyc2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj5AYW5kcm9pZDpkaW1lbi9hY3Rpb25fYmFyX3N1YnRpdGxlX3RleHRfc2l6ZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbkJhci5NZW51IgorICAgICAgICAgICBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uU21hbGwiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj4xMnNwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTdHlsZSI+Ym9sZDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPj9hbmRyb2lkOmF0dHIvYWN0aW9uTWVudVRleHRDb2xvcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0QWxsQ2FwcyI+QGFuZHJvaWQ6Ym9vbC9jb25maWdfYWN0aW9uTWVudUl0ZW1BbGxDYXBzPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uTW9kZSIvPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbk1vZGUuVGl0bGUiCisgICAgICAgICAgIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5NZWRpdW0iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj5AYW5kcm9pZDpkaW1lbi9hY3Rpb25fYmFyX3RpdGxlX3RleHRfc2l6ZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbk1vZGUuU3VidGl0bGUiCisgICAgICAgICAgIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5TbWFsbCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFNpemUiPkBhbmRyb2lkOmRpbWVuL2FjdGlvbl9iYXJfc3VidGl0bGVfdGV4dF9zaXplPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uTW9kZS5UaXRsZS5JbnZlcnNlIgorICAgICAgICAgICBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTWVkaXVtLkludmVyc2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj5AYW5kcm9pZDpkaW1lbi9hY3Rpb25fYmFyX3RpdGxlX3RleHRfc2l6ZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbk1vZGUuU3VidGl0bGUuSW52ZXJzZSIKKyAgICAgICAgICAgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLlNtYWxsLkludmVyc2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj5AYW5kcm9pZDpkaW1lbi9hY3Rpb25fYmFyX3N1YnRpdGxlX3RleHRfc2l6ZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LlN3aXRjaCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLlNtYWxsIj4KKyAgICAgICAgPCEtLSBTd2l0Y2ggdGh1bWIgYXNzZXQgcHJlc2VudHMgYSBkYXJrIGJhY2tncm91bmQuIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3Ivc2Vjb25kYXJ5X3RleHRfaG9sb19kYXJrPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5XaWRnZXQuU3dpdGNoIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uU21hbGwiPgorICAgICAgICA8IS0tIFN3aXRjaCB0aHVtYiBhc3NldCBwcmVzZW50cyBhIGRhcmsgYmFja2dyb3VuZC4gLS0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci9wcmltYXJ5X3RleHRfaG9sb19kYXJrPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaW5kb3dUaXRsZSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj4jZmZmPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj4xNHNwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTdHlsZSI+Ym9sZDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uRGlhbG9nV2luZG93VGl0bGUiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj4yMnNwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5DYWxlbmRhclZpZXdXZWVrRGF5VmlldyIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5TbWFsbC5DYWxlbmRhclZpZXdXZWVrRGF5VmlldyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj4jNTA1MDUwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIExpZ2h0IHRleHQgc3R5bGVzIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0IiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0iLz4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0LkludmVyc2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+P3RleHRDb2xvclByaW1hcnlJbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvckhpbnQiPj90ZXh0Q29sb3JIaW50SW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JIaWdobGlnaHQiPj90ZXh0Q29sb3JIaWdobGlnaHRJbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvckxpbmsiPj90ZXh0Q29sb3JMaW5rSW52ZXJzZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuTGFyZ2UiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MYXJnZSIvPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuTWVkaXVtIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTWVkaXVtIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5TbWFsbCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLlNtYWxsIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5MYXJnZS5JbnZlcnNlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPj90ZXh0Q29sb3JQcmltYXJ5SW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JIaW50Ij4/dGV4dENvbG9ySGludEludmVyc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9ySGlnaGxpZ2h0Ij4/dGV4dENvbG9ySGlnaGxpZ2h0SW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JMaW5rIj4/dGV4dENvbG9yTGlua0ludmVyc2U8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0Lk1lZGl1bS5JbnZlcnNlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPj90ZXh0Q29sb3JQcmltYXJ5SW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JIaW50Ij4/dGV4dENvbG9ySGludEludmVyc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9ySGlnaGxpZ2h0Ij4/dGV4dENvbG9ySGlnaGxpZ2h0SW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JMaW5rIj4/dGV4dENvbG9yTGlua0ludmVyc2U8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0LlNtYWxsLkludmVyc2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+P3RleHRDb2xvclByaW1hcnlJbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvckhpbnQiPj90ZXh0Q29sb3JIaW50SW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3JIaWdobGlnaHQiPj90ZXh0Q29sb3JIaWdobGlnaHRJbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvckxpbmsiPj90ZXh0Q29sb3JMaW5rSW52ZXJzZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuU2VhcmNoUmVzdWx0IiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uU2VhcmNoUmVzdWx0Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPj90ZXh0Q29sb3JQcmltYXJ5PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvckhpbnQiPj90ZXh0Q29sb3JIaW50PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5TZWFyY2hSZXN1bHQuVGl0bGUiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj4xOHNwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5TZWFyY2hSZXN1bHQuU3VidGl0bGUiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj4xNHNwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+P3RleHRDb2xvclNlY29uZGFyeTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuV2lkZ2V0IiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLldpZGdldCIvPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuV2lkZ2V0LkJ1dHRvbiIvPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuV2lkZ2V0LkVkaXRUZXh0Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL2JyaWdodF9mb3JlZ3JvdW5kX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9ySGludCI+QGFuZHJvaWQ6Y29sb3IvaGludF9mb3JlZ3JvdW5kX2hvbG9fZGFyazwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuV2lkZ2V0LlBvcHVwTWVudSIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5Qb3B1cE1lbnUiLz4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0LldpZGdldC5Qb3B1cE1lbnUuTGFyZ2UiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuUG9wdXBNZW51LkxhcmdlIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5XaWRnZXQuUG9wdXBNZW51LlNtYWxsIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LlBvcHVwTWVudS5TbWFsbCIvPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuV2lkZ2V0LkRyb3BEb3duSGludCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5Ecm9wRG93bkhpbnQiLz4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0LldpZGdldC5BY3Rpb25Nb2RlLlRpdGxlIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLldpZGdldC5BY3Rpb25Nb2RlLlRpdGxlIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5XaWRnZXQuQWN0aW9uTW9kZS5TdWJ0aXRsZSIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5XaWRnZXQuQWN0aW9uTW9kZS5TdWJ0aXRsZSIvPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuV2luZG93VGl0bGUiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+I2ZmZjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+MTRzcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U3R5bGUiPmJvbGQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0LkRpYWxvZ1dpbmRvd1RpdGxlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+MjJzcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL2hvbG9fYmx1ZV9saWdodDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuQ2FsZW5kYXJWaWV3V2Vla0RheVZpZXciIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuU21hbGwuQ2FsZW5kYXJWaWV3V2Vla0RheVZpZXciLz4KKworICAgIDwhLS0gV2lkZ2V0IFN0eWxlcyAtLT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bSIgcGFyZW50PSJXaWRnZXQiLz4KKworICAgIDxzdHlsZSBuYW1lPSJRdWFudHVtIiAvPgorICAgIDxzdHlsZSBuYW1lPSJRdWFudHVtLkxpZ2h0IiAvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkJ1dHRvbiIgcGFyZW50PSJXaWRnZXQuQnV0dG9uIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9idG5fZGVmYXVsdF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dEFwcGVhcmFuY2UiPj9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VNZWRpdW08L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci9wcmltYXJ5X3RleHRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbkhlaWdodCI+NDhkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bWluV2lkdGgiPjY0ZGlwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uU3RhY2tWaWV3Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpyZXNPdXRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmNsaWNrQ29sb3IiPkBhbmRyb2lkOmNvbG9yL2hvbG9fYmx1ZV9saWdodDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkJ1dHRvbi5Cb3JkZXJsZXNzIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj4/YW5kcm9pZDphdHRyL3NlbGVjdGFibGVJdGVtQmFja2dyb3VuZDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwYWRkaW5nU3RhcnQiPjRkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZ0VuZCI+NGRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkJ1dHRvbi5Cb3JkZXJsZXNzLlNtYWxsIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+MTRzcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkJ1dHRvbi5TbWFsbCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvYnRuX2RlZmF1bHRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRBcHBlYXJhbmNlIj4/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlU21hbGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci9wcmltYXJ5X3RleHRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbkhlaWdodCI+NDhkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bWluV2lkdGgiPjQ4ZGlwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQnV0dG9uLkluc2V0Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9idXR0b25faW5zZXQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5CdXR0b24uVG9nZ2xlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9idG5fdG9nZ2xlX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0T24iPkBhbmRyb2lkOnN0cmluZy9jYXBpdGFsX29uPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRPZmYiPkBhbmRyb2lkOnN0cmluZy9jYXBpdGFsX29mZjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkaXNhYmxlZEFscGhhIj4/YW5kcm9pZDphdHRyL2Rpc2FibGVkQWxwaGE8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dEFwcGVhcmFuY2UiPj9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VTbWFsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptaW5IZWlnaHQiPjQ4ZGlwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iUXVhbnR1bS5CdXR0b25CYXIiIHBhcmVudD0iQnV0dG9uQmFyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwYWRkaW5nVG9wIj4wZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdTdGFydCI+MGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwYWRkaW5nRW5kIj4wZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdCb3R0b20iPjBkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRpdmlkZXIiPj9hbmRyb2lkOmF0dHIvZGl2aWRlclZlcnRpY2FsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJzaG93RGl2aWRlcnMiPm1pZGRsZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZGl2aWRlclBhZGRpbmciPjEyZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJiYWNrZ3JvdW5kIj5AbnVsbDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlF1YW50dW0uU2VnbWVudGVkQnV0dG9uIiBwYXJlbnQ9IlNlZ21lbnRlZEJ1dHRvbiI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvYnRuX2dyb3VwX2hvbG9fZGFyazwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlF1YW50dW0uQnV0dG9uQmFyLkFsZXJ0RGlhbG9nIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkaXZpZGVyUGFkZGluZyI+MGRwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uVGV4dFZpZXciIHBhcmVudD0iV2lkZ2V0LlRleHRWaWV3Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQ2hlY2tlZFRleHRWaWV3IiBwYXJlbnQ9IldpZGdldC5DaGVja2VkVGV4dFZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5UZXh0Vmlldy5MaXN0U2VwYXJhdG9yIiBwYXJlbnQ9IldpZGdldC5UZXh0Vmlldy5MaXN0U2VwYXJhdG9yIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9saXN0X3NlY3Rpb25fZGl2aWRlcl9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dEFsbENhcHMiPnRydWU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5UZXh0U2VsZWN0SGFuZGxlIiBwYXJlbnQ9IldpZGdldC5UZXh0U2VsZWN0SGFuZGxlIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uVGV4dFN1Z2dlc3Rpb25zUG9wdXBXaW5kb3ciIHBhcmVudD0iV2lkZ2V0LlRleHRTdWdnZXN0aW9uc1BvcHVwV2luZG93Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQWJzTGlzdFZpZXciIHBhcmVudD0iV2lkZ2V0LkFic0xpc3RWaWV3Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQXV0b0NvbXBsZXRlVGV4dFZpZXciIHBhcmVudD0iV2lkZ2V0LkF1dG9Db21wbGV0ZVRleHRWaWV3Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkcm9wRG93blNlbGVjdG9yIj5AYW5kcm9pZDpkcmF3YWJsZS9saXN0X3NlbGVjdG9yX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwb3B1cEJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL21lbnVfZHJvcGRvd25fcGFuZWxfaG9sb19kYXJrPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQ29tcG91bmRCdXR0b24iIHBhcmVudD0iV2lkZ2V0LkNvbXBvdW5kQnV0dG9uIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQ29tcG91bmRCdXR0b24uQ2hlY2tCb3giIHBhcmVudD0iV2lkZ2V0LkNvbXBvdW5kQnV0dG9uLkNoZWNrQm94Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlzdFZpZXcuRHJvcERvd24iLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5FZGl0VGV4dCIgcGFyZW50PSJXaWRnZXQuRWRpdFRleHQiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5FeHBhbmRhYmxlTGlzdFZpZXciIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uTGlzdFZpZXciPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmdyb3VwSW5kaWNhdG9yIj5AYW5kcm9pZDpkcmF3YWJsZS9leHBhbmRlcl9ncm91cF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aW5kaWNhdG9yTGVmdCI+P2FuZHJvaWQ6YXR0ci9leHBhbmRhYmxlTGlzdFByZWZlcnJlZEl0ZW1JbmRpY2F0b3JMZWZ0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmluZGljYXRvclJpZ2h0Ij4/YW5kcm9pZDphdHRyL2V4cGFuZGFibGVMaXN0UHJlZmVycmVkSXRlbUluZGljYXRvclJpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmNoaWxkRGl2aWRlciI+P2FuZHJvaWQ6YXR0ci9saXN0RGl2aWRlcjwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkV4cGFuZGFibGVMaXN0Vmlldy5XaGl0ZSIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkZyYWdtZW50QnJlYWRDcnVtYnMiIHBhcmVudD0iV2lkZ2V0LkZyYWdtZW50QnJlYWRDcnVtYnMiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5HYWxsZXJ5IiBwYXJlbnQ9IldpZGdldC5HYWxsZXJ5Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uR2VzdHVyZU92ZXJsYXlWaWV3IiBwYXJlbnQ9IldpZGdldC5HZXN0dXJlT3ZlcmxheVZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5HcmlkVmlldyIgcGFyZW50PSJXaWRnZXQuR3JpZFZpZXciPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxpc3RTZWxlY3RvciI+P2FuZHJvaWQ6YXR0ci9zZWxlY3RhYmxlSXRlbUJhY2tncm91bmQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5DYWxlbmRhclZpZXciIHBhcmVudD0iV2lkZ2V0LkNhbGVuZGFyVmlldyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yIj4jMzMwMDk5RkY8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Zm9jdXNlZE1vbnRoRGF0ZUNvbG9yIj4jRkZGRkZGRkY8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dW5mb2N1c2VkTW9udGhEYXRlQ29sb3IiPiM2NkZGRkZGRjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3ZWVrTnVtYmVyQ29sb3IiPiMzM0ZGRkZGRjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3ZWVrU2VwYXJhdG9yTGluZUNvbG9yIj4jMTlGRkZGRkY8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2VsZWN0ZWREYXRlVmVydGljYWxCYXIiPkBhbmRyb2lkOmRyYXdhYmxlL2RheV9waWNrZXJfd2Vla192aWV3X2RheWxpbmVfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3ZWVrRGF5VGV4dEFwcGVhcmFuY2UiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uQ2FsZW5kYXJWaWV3V2Vla0RheVZpZXc8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5JbWFnZUJ1dHRvbiIgcGFyZW50PSJXaWRnZXQuSW1hZ2VCdXR0b24iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2J0bl9kZWZhdWx0X2hvbG9fZGFyazwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLk51bWJlclBpY2tlciIgcGFyZW50PSJXaWRnZXQuTnVtYmVyUGlja2VyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbnRlcm5hbExheW91dCI+QGFuZHJvaWQ6bGF5b3V0L251bWJlcl9waWNrZXJfd2l0aF9zZWxlY3Rvcl93aGVlbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzb2xpZENvbG9yIj5AYW5kcm9pZDpjb2xvci90cmFuc3BhcmVudDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzZWxlY3Rpb25EaXZpZGVyIj5AYW5kcm9pZDpkcmF3YWJsZS9udW1iZXJwaWNrZXJfc2VsZWN0aW9uX2RpdmlkZXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2VsZWN0aW9uRGl2aWRlckhlaWdodCI+MmRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzZWxlY3Rpb25EaXZpZGVyc0Rpc3RhbmNlIj40OGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbnRlcm5hbE1pbldpZHRoIj42NGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbnRlcm5hbE1heEhlaWdodCI+MTgwZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ2aXJ0dWFsQnV0dG9uUHJlc3NlZERyYXdhYmxlIj4/YW5kcm9pZDphdHRyL3NlbGVjdGFibGVJdGVtQmFja2dyb3VuZDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLlRpbWVQaWNrZXIiIHBhcmVudD0iV2lkZ2V0LlRpbWVQaWNrZXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxlZ2FjeUxheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3RpbWVfcGlja2VyX2xlZ2FjeV9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmludGVybmFsTGF5b3V0Ij5AYW5kcm9pZDpsYXlvdXQvdGltZV9waWNrZXJfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkaXNhYmxlZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfZGlzYWJsZWRfY29sb3JfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmhlYWRlclNlbGVjdGVkVGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci9ob2xvX2JsdWVfbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aGVhZGVyVW5zZWxlY3RlZFRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X3RleHRfY29sb3JfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmhlYWRlckJhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm51bWJlcnNUZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpudW1iZXJzQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfYmFja2dyb3VuZF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YW1QbVRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X3RleHRfY29sb3JfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFtUG1VbnNlbGVjdGVkQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfYmFja2dyb3VuZF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YW1QbVNlbGVjdGVkQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci9ob2xvX2JsdWVfbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bnVtYmVyc1NlbGVjdG9yQ29sb3IiPkBhbmRyb2lkOmNvbG9yL2hvbG9fYmx1ZV9saWdodDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkRhdGVQaWNrZXIiIHBhcmVudD0iV2lkZ2V0LkRhdGVQaWNrZXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmludGVybmFsTGF5b3V0Ij5AYW5kcm9pZDpsYXlvdXQvZGF0ZV9waWNrZXJfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjYWxlbmRhclZpZXdTaG93biI+dHJ1ZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkFjdGl2aXR5Q2hvb3NlclZpZXciIHBhcmVudD0iV2lkZ2V0LkFjdGl2aXR5Q2hvb3NlclZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5JbWFnZVdlbGwiIHBhcmVudD0iV2lkZ2V0LkltYWdlV2VsbCIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpc3RWaWV3IiBwYXJlbnQ9IldpZGdldC5MaXN0VmlldyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZGl2aWRlciI+P2FuZHJvaWQ6YXR0ci9saXN0RGl2aWRlcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsaXN0U2VsZWN0b3IiPj9hbmRyb2lkOmF0dHIvbGlzdENob2ljZUJhY2tncm91bmRJbmRpY2F0b3I8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaXN0Vmlldy5XaGl0ZSIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLlBvcHVwV2luZG93IiBwYXJlbnQ9IldpZGdldC5Qb3B1cFdpbmRvdyIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLlBvcHVwV2luZG93LkFjdGlvbk1vZGUiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBvcHVwQmFja2dyb3VuZCI+QGFuZHJvaWQ6Y29sb3IvYmxhY2s8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cG9wdXBBbmltYXRpb25TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvQW5pbWF0aW9uLlBvcHVwV2luZG93LkFjdGlvbk1vZGU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0JhciIgcGFyZW50PSJXaWRnZXQuUHJvZ3Jlc3NCYXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmluZGV0ZXJtaW5hdGVEcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvcHJvZ3Jlc3NfbWVkaXVtX2hvbG88L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5Ib3Jpem9udGFsIiBwYXJlbnQ9IldpZGdldC5Qcm9ncmVzc0Jhci5Ib3Jpem9udGFsIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwcm9ncmVzc0RyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9wcm9ncmVzc19ob3Jpem9udGFsX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbmRldGVybWluYXRlRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL3Byb2dyZXNzX2luZGV0ZXJtaW5hdGVfaG9yaXpvbnRhbF9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbkhlaWdodCI+MTZkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bWF4SGVpZ2h0Ij4xNmRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLlByb2dyZXNzQmFyLlNtYWxsIiBwYXJlbnQ9IldpZGdldC5Qcm9ncmVzc0Jhci5TbWFsbCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aW5kZXRlcm1pbmF0ZURyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9wcm9ncmVzc19zbWFsbF9ob2xvPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUHJvZ3Jlc3NCYXIuU21hbGwuVGl0bGUiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5MYXJnZSIgcGFyZW50PSJXaWRnZXQuUHJvZ3Jlc3NCYXIuTGFyZ2UiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmluZGV0ZXJtaW5hdGVEcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvcHJvZ3Jlc3NfbGFyZ2VfaG9sbzwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLlByb2dyZXNzQmFyLkludmVyc2UiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5TbWFsbC5JbnZlcnNlIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUHJvZ3Jlc3NCYXIuTGFyZ2UuSW52ZXJzZSIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLlNlZWtCYXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmluZGV0ZXJtaW5hdGVPbmx5Ij5mYWxzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwcm9ncmVzc0RyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9zY3J1YmJlcl9wcm9ncmVzc19ob3Jpem9udGFsX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbmRldGVybWluYXRlRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL3NjcnViYmVyX3Byb2dyZXNzX2hvcml6b250YWxfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbkhlaWdodCI+MTNkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bWF4SGVpZ2h0Ij4xM2RpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0aHVtYiI+QGFuZHJvaWQ6ZHJhd2FibGUvc2NydWJiZXJfY29udHJvbF9zZWxlY3Rvcl9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRodW1iT2Zmc2V0Ij4xNmRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpmb2N1c2FibGUiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZ1N0YXJ0Ij4xNmRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwYWRkaW5nRW5kIj4xNmRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptaXJyb3JGb3JSdGwiPnRydWU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5SYXRpbmdCYXIiIHBhcmVudD0iV2lkZ2V0LlJhdGluZ0JhciI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cHJvZ3Jlc3NEcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvcmF0aW5nYmFyX2Z1bGxfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmluZGV0ZXJtaW5hdGVEcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvcmF0aW5nYmFyX2Z1bGxfaG9sb19kYXJrPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUmF0aW5nQmFyLkluZGljYXRvciIgcGFyZW50PSJXaWRnZXQuUmF0aW5nQmFyLkluZGljYXRvciI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cHJvZ3Jlc3NEcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvcmF0aW5nYmFyX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbmRldGVybWluYXRlRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL3JhdGluZ2Jhcl9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bWluSGVpZ2h0Ij4zNWRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptYXhIZWlnaHQiPjM1ZGlwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUmF0aW5nQmFyLlNtYWxsIiBwYXJlbnQ9IldpZGdldC5SYXRpbmdCYXIuU21hbGwiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnByb2dyZXNzRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL3JhdGluZ2Jhcl9zbWFsbF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aW5kZXRlcm1pbmF0ZURyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9yYXRpbmdiYXJfc21hbGxfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbkhlaWdodCI+MTZkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bWF4SGVpZ2h0Ij4xNmRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkNvbXBvdW5kQnV0dG9uLlJhZGlvQnV0dG9uIiBwYXJlbnQ9IldpZGdldC5Db21wb3VuZEJ1dHRvbi5SYWRpb0J1dHRvbiIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLlNjcm9sbFZpZXciIHBhcmVudD0iV2lkZ2V0LlNjcm9sbFZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5Ib3Jpem9udGFsU2Nyb2xsVmlldyIgcGFyZW50PSJXaWRnZXQuSG9yaXpvbnRhbFNjcm9sbFZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5TcGlubmVyIiBwYXJlbnQ9IldpZGdldC5TcGlubmVyLkRyb3BEb3duIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9zcGlubmVyX2JhY2tncm91bmRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRyb3BEb3duU2VsZWN0b3IiPkBhbmRyb2lkOmRyYXdhYmxlL2xpc3Rfc2VsZWN0b3JfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBvcHVwQmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvbWVudV9kcm9wZG93bl9wYW5lbF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZHJvcERvd25WZXJ0aWNhbE9mZnNldCI+MGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkcm9wRG93bkhvcml6b250YWxPZmZzZXQiPjBkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZHJvcERvd25XaWR0aCI+d3JhcF9jb250ZW50PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBvcHVwUHJvbXB0VmlldyI+QGFuZHJvaWQ6bGF5b3V0L3NpbXBsZV9kcm9wZG93bl9oaW50PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmdyYXZpdHkiPnN0YXJ0fGNlbnRlcl92ZXJ0aWNhbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkaXNhYmxlQ2hpbGRyZW5XaGVuRGlzYWJsZWQiPnRydWU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5TcGlubmVyLkRyb3BEb3duIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uU3Bpbm5lci5Ecm9wRG93bi5BY3Rpb25CYXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL3NwaW5uZXJfYWJfaG9sb19kYXJrPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQ29tcG91bmRCdXR0b24uU3RhciIgcGFyZW50PSJXaWRnZXQuQ29tcG91bmRCdXR0b24uU3RhciI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YnV0dG9uIj5AYW5kcm9pZDpkcmF3YWJsZS9idG5fc3Rhcl9ob2xvX2Rhcms8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5UYWJXaWRnZXQiIHBhcmVudD0iV2lkZ2V0LlRhYldpZGdldCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGFiU3RyaXBMZWZ0Ij5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0YWJTdHJpcFJpZ2h0Ij5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0YWJTdHJpcEVuYWJsZWQiPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRpdmlkZXIiPj9hbmRyb2lkOmF0dHIvZGl2aWRlclZlcnRpY2FsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNob3dEaXZpZGVycyI+bWlkZGxlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRpdmlkZXJQYWRkaW5nIj44ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1lYXN1cmVXaXRoTGFyZ2VzdENoaWxkIj50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRhYkxheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3RhYl9pbmRpY2F0b3JfaG9sbzwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLlRhYiIgcGFyZW50PSJXaWRnZXQuUXVhbnR1bS5BY3Rpb25CYXIuVGFiVmlldyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvdGFiX2luZGljYXRvcl9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+MGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfd2VpZ2h0Ij4xPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbldpZHRoIj44MGRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLlRhYlRleHQiIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uQWN0aW9uQmFyLlRhYlRleHQiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1heFdpZHRoIj4xODBkaXA8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5XZWJUZXh0VmlldyIgcGFyZW50PSJXaWRnZXQuV2ViVGV4dFZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5XZWJWaWV3IiBwYXJlbnQ9IldpZGdldC5XZWJWaWV3Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uRHJvcERvd25JdGVtIiBwYXJlbnQ9IldpZGdldC5Ecm9wRG93bkl0ZW0iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRBcHBlYXJhbmNlIj5Ac3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuRHJvcERvd25JdGVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdTdGFydCI+OGRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdFbmQiPjhkcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkRyb3BEb3duSXRlbS5TcGlubmVyIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uVGV4dFZpZXcuU3Bpbm5lckl0ZW0iIHBhcmVudD0iV2lkZ2V0LlRleHRWaWV3LlNwaW5uZXJJdGVtIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LlRleHRWaWV3LlNwaW5uZXJJdGVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdTdGFydCI+OGRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdFbmQiPjhkcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLktleWJvYXJkVmlldyIgcGFyZW50PSJXaWRnZXQuS2V5Ym9hcmRWaWV3Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUXVpY2tDb250YWN0QmFkZ2UuV2luZG93U21hbGwiIHBhcmVudD0iV2lkZ2V0LlF1aWNrQ29udGFjdEJhZGdlLldpbmRvd1NtYWxsIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUXVpY2tDb250YWN0QmFkZ2UuV2luZG93TWVkaXVtIiBwYXJlbnQ9IldpZGdldC5RdWlja0NvbnRhY3RCYWRnZS5XaW5kb3dNZWRpdW0iLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5RdWlja0NvbnRhY3RCYWRnZS5XaW5kb3dMYXJnZSIgcGFyZW50PSJXaWRnZXQuUXVpY2tDb250YWN0QmFkZ2UuV2luZG93TGFyZ2UiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5RdWlja0NvbnRhY3RCYWRnZVNtYWxsLldpbmRvd1NtYWxsIiBwYXJlbnQ9IldpZGdldC5RdWlja0NvbnRhY3RCYWRnZVNtYWxsLldpbmRvd1NtYWxsIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUXVpY2tDb250YWN0QmFkZ2VTbWFsbC5XaW5kb3dNZWRpdW0iIHBhcmVudD0iV2lkZ2V0LlF1aWNrQ29udGFjdEJhZGdlU21hbGwuV2luZG93TWVkaXVtIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUXVpY2tDb250YWN0QmFkZ2VTbWFsbC5XaW5kb3dMYXJnZSIgcGFyZW50PSJXaWRnZXQuUXVpY2tDb250YWN0QmFkZ2VTbWFsbC5XaW5kb3dMYXJnZSIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpc3RQb3B1cFdpbmRvdyIgcGFyZW50PSJXaWRnZXQuTGlzdFBvcHVwV2luZG93Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkcm9wRG93blNlbGVjdG9yIj5AYW5kcm9pZDpkcmF3YWJsZS9saXN0X3NlbGVjdG9yX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwb3B1cEJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL21lbnVfcGFuZWxfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRyb3BEb3duVmVydGljYWxPZmZzZXQiPjBkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZHJvcERvd25Ib3Jpem9udGFsT2Zmc2V0Ij4wZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRyb3BEb3duV2lkdGgiPndyYXBfY29udGVudDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLlBvcHVwTWVudSIgcGFyZW50PSJXaWRnZXQuUXVhbnR1bS5MaXN0UG9wdXBXaW5kb3ciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5CdXR0b25CYXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRpdmlkZXIiPj9hbmRyb2lkOmF0dHIvZGl2aWRlclZlcnRpY2FsPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQnV0dG9uQmFyLkJ1dHRvbiIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkFjdGlvbkJ1dHRvbiIgcGFyZW50PSJXaWRnZXQuQWN0aW9uQnV0dG9uIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptaW5XaWR0aCI+QGFuZHJvaWQ6ZGltZW4vYWN0aW9uX2J1dHRvbl9taW5fd2lkdGg8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Z3Jhdml0eSI+Y2VudGVyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdTdGFydCI+MTJkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZ0VuZCI+MTJkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2NhbGVUeXBlIj5jZW50ZXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bWF4TGluZXMiPjI8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5BY3Rpb25CdXR0b24uT3ZlcmZsb3ciPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNyYyI+QGFuZHJvaWQ6ZHJhd2FibGUvaWNfbWVudV9tb3Jlb3ZlcmZsb3dfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPj9hbmRyb2lkOmF0dHIvYWN0aW9uQmFySXRlbUJhY2tncm91bmQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uIj5Ac3RyaW5nL2FjdGlvbl9tZW51X292ZXJmbG93X2Rlc2NyaXB0aW9uPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQWN0aW9uQnV0dG9uLlRleHRCdXR0b24iIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uQnV0dG9uQmFyLkJ1dHRvbiIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkFjdGlvbkJhci5UYWJWaWV3IiBwYXJlbnQ9IldpZGdldC5BY3Rpb25CYXIuVGFiVmlldyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGRyYXdhYmxlL3RhYl9pbmRpY2F0b3JfYWJfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwYWRkaW5nU3RhcnQiPjE2ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdFbmQiPjE2ZGlwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQWN0aW9uQmFyLlRhYkJhciIgcGFyZW50PSJXaWRnZXQuQWN0aW9uQmFyLlRhYkJhciI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZGl2aWRlciI+P2FuZHJvaWQ6YXR0ci9hY3Rpb25CYXJEaXZpZGVyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNob3dEaXZpZGVycyI+bWlkZGxlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRpdmlkZXJQYWRkaW5nIj4xMmRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkFjdGlvbkJhci5UYWJUZXh0IiBwYXJlbnQ9IldpZGdldC5BY3Rpb25CYXIuVGFiVGV4dCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dEFwcGVhcmFuY2UiPkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLk1lZGl1bTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPj9hbmRyb2lkOmF0dHIvdGV4dENvbG9yUHJpbWFyeTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+MTJzcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U3R5bGUiPmJvbGQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dEFsbENhcHMiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZWxsaXBzaXplIj5tYXJxdWVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1heExpbmVzIj4yPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uQWN0aW9uTW9kZSIgcGFyZW50PSJXaWRnZXQuQWN0aW9uTW9kZSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGl0bGVUZXh0U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbk1vZGUuVGl0bGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c3VidGl0bGVUZXh0U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbk1vZGUuU3VidGl0bGU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5BY3Rpb25CdXR0b24uQ2xvc2VNb2RlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AZHJhd2FibGUvYnRuX2NhYl9kb25lX2hvbG9fZGFyazwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkFjdGlvbkJhciIgcGFyZW50PSJXaWRnZXQuQWN0aW9uQmFyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0aXRsZVRleHRTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uQmFyLlRpdGxlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnN1YnRpdGxlVGV4dFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5BY3Rpb25CYXIuU3VidGl0bGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvYWJfdHJhbnNwYXJlbnRfZGFya19ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmRTdGFja2VkIj5AYW5kcm9pZDpkcmF3YWJsZS9hYl9zdGFja2VkX3RyYW5zcGFyZW50X2RhcmtfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kU3BsaXQiPkBhbmRyb2lkOmRyYXdhYmxlL2FiX2JvdHRvbV90cmFuc3BhcmVudF9kYXJrX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZGl2aWRlciI+P2FuZHJvaWQ6YXR0ci9kaXZpZGVyVmVydGljYWw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cHJvZ3Jlc3NCYXJTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUHJvZ3Jlc3NCYXIuSG9yaXpvbnRhbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbmRldGVybWluYXRlUHJvZ3Jlc3NTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUHJvZ3Jlc3NCYXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cHJvZ3Jlc3NCYXJQYWRkaW5nIj4zMmRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppdGVtUGFkZGluZyI+OGRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkFjdGlvbkJhci5Tb2xpZCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGl0bGVUZXh0U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbkJhci5UaXRsZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzdWJ0aXRsZVRleHRTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uQmFyLlN1YnRpdGxlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2FiX3NvbGlkX2RhcmtfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kU3RhY2tlZCI+QGFuZHJvaWQ6ZHJhd2FibGUvYWJfc3RhY2tlZF9zb2xpZF9kYXJrX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZFNwbGl0Ij5AYW5kcm9pZDpkcmF3YWJsZS9hYl9ib3R0b21fc29saWRfZGFya19ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRpdmlkZXIiPj9hbmRyb2lkOmF0dHIvZGl2aWRlclZlcnRpY2FsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnByb2dyZXNzQmFyU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlByb2dyZXNzQmFyLkhvcml6b250YWw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aW5kZXRlcm1pbmF0ZVByb2dyZXNzU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlByb2dyZXNzQmFyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnByb2dyZXNzQmFyUGFkZGluZyI+MzJkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aXRlbVBhZGRpbmciPjhkaXA8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5Db21wb3VuZEJ1dHRvbi5Td2l0Y2giPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRyYWNrIj5AYW5kcm9pZDpkcmF3YWJsZS9zd2l0Y2hfdHJhY2tfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRodW1iIj5AYW5kcm9pZDpkcmF3YWJsZS9zd2l0Y2hfaW5uZXJfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnN3aXRjaFRleHRBcHBlYXJhbmNlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5Td2l0Y2g8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dE9uIj5AYW5kcm9pZDpzdHJpbmcvY2FwaXRhbF9vbjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0T2ZmIj5AYW5kcm9pZDpzdHJpbmcvY2FwaXRhbF9vZmY8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGh1bWJUZXh0UGFkZGluZyI+MTJkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c3dpdGNoTWluV2lkdGgiPjk2ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnN3aXRjaFBhZGRpbmciPjE2ZGlwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIExpZ2h0IHdpZGdldCBzdHlsZXMgLS0+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5CdXR0b24iIHBhcmVudD0iV2lkZ2V0LkJ1dHRvbiI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvYnRuX2RlZmF1bHRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZSI+P2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZU1lZGl1bUludmVyc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci9wcmltYXJ5X3RleHRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptaW5IZWlnaHQiPjQ4ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbldpZHRoIj42NGRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkJ1dHRvbi5Cb3JkZXJsZXNzIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj4/YW5kcm9pZDphdHRyL3NlbGVjdGFibGVJdGVtQmFja2dyb3VuZDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwYWRkaW5nU3RhcnQiPjRkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZ0VuZCI+NGRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkJ1dHRvbi5Cb3JkZXJsZXNzLlNtYWxsIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+MTRzcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkJ1dHRvbi5TbWFsbCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvYnRuX2RlZmF1bHRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZSI+P2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZVNtYWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bWluSGVpZ2h0Ij40OGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptaW5XaWR0aCI+NDhkaXA8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5CdXR0b24uSW5zZXQiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5CdXR0b24uVG9nZ2xlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9idG5fdG9nZ2xlX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dE9uIj5AYW5kcm9pZDpzdHJpbmcvY2FwaXRhbF9vbjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0T2ZmIj5AYW5kcm9pZDpzdHJpbmcvY2FwaXRhbF9vZmY8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZGlzYWJsZWRBbHBoYSI+P2FuZHJvaWQ6YXR0ci9kaXNhYmxlZEFscGhhPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRBcHBlYXJhbmNlIj4/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlU21hbGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bWluSGVpZ2h0Ij40OGRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlF1YW50dW0uTGlnaHQuQnV0dG9uQmFyIiBwYXJlbnQ9IlF1YW50dW0uQnV0dG9uQmFyIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iUXVhbnR1bS5MaWdodC5CdXR0b25CYXIuQWxlcnREaWFsb2ciPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBudWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRpdmlkZXJQYWRkaW5nIj4wZHA8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJRdWFudHVtLkxpZ2h0LlNlZ21lbnRlZEJ1dHRvbiIgcGFyZW50PSJTZWdtZW50ZWRCdXR0b24iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2J0bl9ncm91cF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuVGV4dFZpZXciIHBhcmVudD0iV2lkZ2V0LlRleHRWaWV3Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQ2hlY2tlZFRleHRWaWV3IiBwYXJlbnQ9IldpZGdldC5DaGVja2VkVGV4dFZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5UZXh0Vmlldy5MaXN0U2VwYXJhdG9yIiBwYXJlbnQ9IldpZGdldC5UZXh0Vmlldy5MaXN0U2VwYXJhdG9yIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9saXN0X3NlY3Rpb25fZGl2aWRlcl9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRBbGxDYXBzIj50cnVlPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuVGV4dFNlbGVjdEhhbmRsZSIgcGFyZW50PSJXaWRnZXQuVGV4dFNlbGVjdEhhbmRsZSIvPgorCisgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuVGV4dFN1Z2dlc3Rpb25zUG9wdXBXaW5kb3ciIHBhcmVudD0iV2lkZ2V0LlRleHRTdWdnZXN0aW9uc1BvcHVwV2luZG93Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWJzTGlzdFZpZXciIHBhcmVudD0iV2lkZ2V0LkFic0xpc3RWaWV3Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQXV0b0NvbXBsZXRlVGV4dFZpZXciIHBhcmVudD0iV2lkZ2V0LkF1dG9Db21wbGV0ZVRleHRWaWV3Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkcm9wRG93blNlbGVjdG9yIj5AYW5kcm9pZDpkcmF3YWJsZS9saXN0X3NlbGVjdG9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cG9wdXBCYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9tZW51X2Ryb3Bkb3duX3BhbmVsX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5Db21wb3VuZEJ1dHRvbi5DaGVja0JveCIgcGFyZW50PSJXaWRnZXQuQ29tcG91bmRCdXR0b24uQ2hlY2tCb3giLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5MaXN0Vmlldy5Ecm9wRG93biIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkVkaXRUZXh0IiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLkVkaXRUZXh0Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuRXhwYW5kYWJsZUxpc3RWaWV3IiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLkxpZ2h0Lkxpc3RWaWV3Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpncm91cEluZGljYXRvciI+QGFuZHJvaWQ6ZHJhd2FibGUvZXhwYW5kZXJfZ3JvdXBfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbmRpY2F0b3JMZWZ0Ij4/YW5kcm9pZDphdHRyL2V4cGFuZGFibGVMaXN0UHJlZmVycmVkSXRlbUluZGljYXRvckxlZnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aW5kaWNhdG9yUmlnaHQiPj9hbmRyb2lkOmF0dHIvZXhwYW5kYWJsZUxpc3RQcmVmZXJyZWRJdGVtSW5kaWNhdG9yUmlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y2hpbGREaXZpZGVyIj4/YW5kcm9pZDphdHRyL2xpc3REaXZpZGVyPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuRXhwYW5kYWJsZUxpc3RWaWV3LldoaXRlIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuRnJhZ21lbnRCcmVhZENydW1icyIgcGFyZW50PSJXaWRnZXQuRnJhZ21lbnRCcmVhZENydW1icyIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkdhbGxlcnkiIHBhcmVudD0iV2lkZ2V0LkdhbGxlcnkiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5HZXN0dXJlT3ZlcmxheVZpZXciIHBhcmVudD0iV2lkZ2V0Lkdlc3R1cmVPdmVybGF5VmlldyIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkdyaWRWaWV3IiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLkdyaWRWaWV3Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuSW1hZ2VCdXR0b24iIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uSW1hZ2VCdXR0b24iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2J0bl9kZWZhdWx0X2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5DYWxlbmRhclZpZXciIHBhcmVudD0iV2lkZ2V0LkNhbGVuZGFyVmlldyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yIj4jMzMwMDY2ZmY8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Zm9jdXNlZE1vbnRoRGF0ZUNvbG9yIj4jRkYwMDAwMDA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dW5mb2N1c2VkTW9udGhEYXRlQ29sb3IiPiM3RjA4MDAyQjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3ZWVrTnVtYmVyQ29sb3IiPiM3RjA4MDAyMTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3ZWVrU2VwYXJhdG9yTGluZUNvbG9yIj4jN0YwODAwMkE8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2Vla0RheVRleHRBcHBlYXJhbmNlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0LkNhbGVuZGFyVmlld1dlZWtEYXlWaWV3PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuTnVtYmVyUGlja2VyIiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLk51bWJlclBpY2tlciIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlRpbWVQaWNrZXIiIHBhcmVudD0iV2lkZ2V0LlRpbWVQaWNrZXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxlZ2FjeUxheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3RpbWVfcGlja2VyX2xlZ2FjeV9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmludGVybmFsTGF5b3V0Ij5AYW5kcm9pZDpsYXlvdXQvdGltZV9waWNrZXJfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkaXNhYmxlZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfZGlzYWJsZWRfY29sb3JfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpoZWFkZXJTZWxlY3RlZFRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmhlYWRlclVuc2VsZWN0ZWRUZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aGVhZGVyQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfYmFja2dyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm51bWJlcnNUZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bnVtYmVyc0JhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDphbVBtVGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFtUG1VbnNlbGVjdGVkQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfYmFja2dyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFtUG1TZWxlY3RlZEJhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm51bWJlcnNTZWxlY3RvckNvbG9yIj5AYW5kcm9pZDpjb2xvci9ob2xvX2JsdWVfbGlnaHQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5EYXRlUGlja2VyIiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLkRhdGVQaWNrZXIiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpdml0eUNob29zZXJWaWV3IiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLkFjdGl2aXR5Q2hvb3NlclZpZXciPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2FiX3NoYXJlX3BhY2tfaG9sb19saWdodDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkltYWdlV2VsbCIgcGFyZW50PSJXaWRnZXQuSW1hZ2VXZWxsIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuTGlzdFZpZXciIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uTGlzdFZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5MaXN0Vmlldy5XaGl0ZSIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlBvcHVwV2luZG93IiBwYXJlbnQ9IldpZGdldC5Qb3B1cFdpbmRvdyIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlBvcHVwV2luZG93LkFjdGlvbk1vZGUiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBvcHVwQmFja2dyb3VuZCI+QGFuZHJvaWQ6Y29sb3Ivd2hpdGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cG9wdXBBbmltYXRpb25TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvQW5pbWF0aW9uLlBvcHVwV2luZG93LkFjdGlvbk1vZGU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5Qcm9ncmVzc0JhciIgcGFyZW50PSJXaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0JhciIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlByb2dyZXNzQmFyLkhvcml6b250YWwiIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uUHJvZ3Jlc3NCYXIuSG9yaXpvbnRhbCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cHJvZ3Jlc3NEcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvcHJvZ3Jlc3NfaG9yaXpvbnRhbF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUHJvZ3Jlc3NCYXIuU21hbGwiIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uUHJvZ3Jlc3NCYXIuU21hbGwiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5Qcm9ncmVzc0Jhci5TbWFsbC5UaXRsZSIgcGFyZW50PSJXaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5TbWFsbC5UaXRsZSIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlByb2dyZXNzQmFyLkxhcmdlIiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLlByb2dyZXNzQmFyLkxhcmdlIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUHJvZ3Jlc3NCYXIuSW52ZXJzZSIgcGFyZW50PSJXaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5JbnZlcnNlIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUHJvZ3Jlc3NCYXIuU21hbGwuSW52ZXJzZSIgcGFyZW50PSJXaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5TbWFsbC5JbnZlcnNlIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUHJvZ3Jlc3NCYXIuTGFyZ2UuSW52ZXJzZSIgcGFyZW50PSJXaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5MYXJnZS5JbnZlcnNlIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuU2Vla0JhciIgcGFyZW50PSJXaWRnZXQuUXVhbnR1bS5TZWVrQmFyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwcm9ncmVzc0RyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9zY3J1YmJlcl9wcm9ncmVzc19ob3Jpem9udGFsX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aW5kZXRlcm1pbmF0ZURyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9zY3J1YmJlcl9wcm9ncmVzc19ob3Jpem9udGFsX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5SYXRpbmdCYXIiIHBhcmVudD0iV2lkZ2V0LlJhdGluZ0JhciI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cHJvZ3Jlc3NEcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvcmF0aW5nYmFyX2Z1bGxfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbmRldGVybWluYXRlRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL3JhdGluZ2Jhcl9mdWxsX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5SYXRpbmdCYXIuSW5kaWNhdG9yIiBwYXJlbnQ9IldpZGdldC5SYXRpbmdCYXIuSW5kaWNhdG9yIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwcm9ncmVzc0RyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9yYXRpbmdiYXJfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbmRldGVybWluYXRlRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL3JhdGluZ2Jhcl9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbkhlaWdodCI+MzVkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bWF4SGVpZ2h0Ij4zNWRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlJhdGluZ0Jhci5TbWFsbCIgcGFyZW50PSJXaWRnZXQuUmF0aW5nQmFyLlNtYWxsIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwcm9ncmVzc0RyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9yYXRpbmdiYXJfc21hbGxfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbmRldGVybWluYXRlRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL3JhdGluZ2Jhcl9zbWFsbF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbkhlaWdodCI+MTZkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bWF4SGVpZ2h0Ij4xNmRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkNvbXBvdW5kQnV0dG9uLlJhZGlvQnV0dG9uIiBwYXJlbnQ9IldpZGdldC5Db21wb3VuZEJ1dHRvbi5SYWRpb0J1dHRvbiIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlNjcm9sbFZpZXciIHBhcmVudD0iV2lkZ2V0LlNjcm9sbFZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5Ib3Jpem9udGFsU2Nyb2xsVmlldyIgcGFyZW50PSJXaWRnZXQuSG9yaXpvbnRhbFNjcm9sbFZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5TcGlubmVyIiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLlNwaW5uZXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL3NwaW5uZXJfYmFja2dyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRyb3BEb3duU2VsZWN0b3IiPkBhbmRyb2lkOmRyYXdhYmxlL2xpc3Rfc2VsZWN0b3JfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwb3B1cEJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL21lbnVfZHJvcGRvd25fcGFuZWxfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkcm9wRG93blZlcnRpY2FsT2Zmc2V0Ij4wZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRyb3BEb3duSG9yaXpvbnRhbE9mZnNldCI+MGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkcm9wRG93bldpZHRoIj53cmFwX2NvbnRlbnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cG9wdXBQcm9tcHRWaWV3Ij5AYW5kcm9pZDpsYXlvdXQvc2ltcGxlX2Ryb3Bkb3duX2hpbnQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5TcGlubmVyLkRyb3BEb3duIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuU3Bpbm5lci5Ecm9wRG93bi5BY3Rpb25CYXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL3NwaW5uZXJfYWJfaG9sb19saWdodDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkNvbXBvdW5kQnV0dG9uLlN0YXIiIHBhcmVudD0iV2lkZ2V0LkNvbXBvdW5kQnV0dG9uLlN0YXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJ1dHRvbiI+QGFuZHJvaWQ6ZHJhd2FibGUvYnRuX3N0YXJfaG9sb19saWdodDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlRhYldpZGdldCIgcGFyZW50PSJXaWRnZXQuUXVhbnR1bS5UYWJXaWRnZXQiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5XZWJUZXh0VmlldyIgcGFyZW50PSJXaWRnZXQuV2ViVGV4dFZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5XZWJWaWV3IiBwYXJlbnQ9IldpZGdldC5XZWJWaWV3Ii8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuRHJvcERvd25JdGVtIiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLkRyb3BEb3duSXRlbSIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkRyb3BEb3duSXRlbS5TcGlubmVyIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuVGV4dFZpZXcuU3Bpbm5lckl0ZW0iIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uVGV4dFZpZXcuU3Bpbm5lckl0ZW0iLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5LZXlib2FyZFZpZXciIHBhcmVudD0iV2lkZ2V0LktleWJvYXJkVmlldyIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlF1aWNrQ29udGFjdEJhZGdlLldpbmRvd1NtYWxsIiBwYXJlbnQ9IldpZGdldC5RdWlja0NvbnRhY3RCYWRnZS5XaW5kb3dTbWFsbCIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlF1aWNrQ29udGFjdEJhZGdlLldpbmRvd01lZGl1bSIgcGFyZW50PSJXaWRnZXQuUXVpY2tDb250YWN0QmFkZ2UuV2luZG93TWVkaXVtIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUXVpY2tDb250YWN0QmFkZ2UuV2luZG93TGFyZ2UiIHBhcmVudD0iV2lkZ2V0LlF1aWNrQ29udGFjdEJhZGdlLldpbmRvd0xhcmdlIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuUXVpY2tDb250YWN0QmFkZ2VTbWFsbC5XaW5kb3dTbWFsbCIgcGFyZW50PSJXaWRnZXQuUXVpY2tDb250YWN0QmFkZ2VTbWFsbC5XaW5kb3dTbWFsbCIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlF1aWNrQ29udGFjdEJhZGdlU21hbGwuV2luZG93TWVkaXVtIiBwYXJlbnQ9IldpZGdldC5RdWlja0NvbnRhY3RCYWRnZVNtYWxsLldpbmRvd01lZGl1bSIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlF1aWNrQ29udGFjdEJhZGdlU21hbGwuV2luZG93TGFyZ2UiIHBhcmVudD0iV2lkZ2V0LlF1aWNrQ29udGFjdEJhZGdlU21hbGwuV2luZG93TGFyZ2UiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5MaXN0UG9wdXBXaW5kb3ciIHBhcmVudD0iV2lkZ2V0Lkxpc3RQb3B1cFdpbmRvdyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZHJvcERvd25TZWxlY3RvciI+QGFuZHJvaWQ6ZHJhd2FibGUvbGlzdF9zZWxlY3Rvcl9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBvcHVwQmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvbWVudV9wYW5lbF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRyb3BEb3duVmVydGljYWxPZmZzZXQiPjBkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZHJvcERvd25Ib3Jpem9udGFsT2Zmc2V0Ij4wZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRyb3BEb3duV2lkdGgiPndyYXBfY29udGVudDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LlBvcHVwTWVudSIgcGFyZW50PSJXaWRnZXQuUXVhbnR1bS5MaWdodC5MaXN0UG9wdXBXaW5kb3ciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CdXR0b24iIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uQWN0aW9uQnV0dG9uIi8+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQnV0dG9uLk92ZXJmbG93Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzcmMiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfbW9yZW92ZXJmbG93X2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uIj5Ac3RyaW5nL2FjdGlvbl9tZW51X292ZXJmbG93X2Rlc2NyaXB0aW9uPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQmFyLlRhYlZpZXciIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uQWN0aW9uQmFyLlRhYlZpZXciLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5UYWIiIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQmFyLlRhYlZpZXciPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL3RhYl9pbmRpY2F0b3JfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfd2lkdGgiPjBkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dlaWdodCI+MTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptaW5XaWR0aCI+ODBkaXA8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuVGFiQmFyIiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLkFjdGlvbkJhci5UYWJCYXIiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuVGFiVGV4dCIgcGFyZW50PSJXaWRnZXQuUXVhbnR1bS5BY3Rpb25CYXIuVGFiVGV4dCIvPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkFjdGlvbkJhci5UYWJWaWV3LkludmVyc2UiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuVGFiQmFyLkludmVyc2UiLz4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuVGFiVGV4dC5JbnZlcnNlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPj9hbmRyb2lkOmF0dHIvdGV4dENvbG9yUHJpbWFyeUludmVyc2U8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25Nb2RlIiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLkFjdGlvbk1vZGUiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRpdGxlVGV4dFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5BY3Rpb25Nb2RlLlRpdGxlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnN1YnRpdGxlVGV4dFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5BY3Rpb25Nb2RlLlN1YnRpdGxlPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uTW9kZS5JbnZlcnNlIiBwYXJlbnQ9IldpZGdldC5BY3Rpb25Nb2RlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0aXRsZVRleHRTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uTW9kZS5UaXRsZS5JbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnN1YnRpdGxlVGV4dFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5BY3Rpb25Nb2RlLlN1YnRpdGxlLkludmVyc2U8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CdXR0b24uQ2xvc2VNb2RlIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AZHJhd2FibGUvYnRuX2NhYl9kb25lX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIiIHBhcmVudD0iV2lkZ2V0LlF1YW50dW0uQWN0aW9uQmFyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0aXRsZVRleHRTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uQmFyLlRpdGxlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnN1YnRpdGxlVGV4dFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5BY3Rpb25CYXIuU3VidGl0bGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvYWJfdHJhbnNwYXJlbnRfbGlnaHRfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kU3RhY2tlZCI+QGFuZHJvaWQ6ZHJhd2FibGUvYWJfc3RhY2tlZF90cmFuc3BhcmVudF9saWdodF9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmRTcGxpdCI+QGFuZHJvaWQ6ZHJhd2FibGUvYWJfYm90dG9tX3RyYW5zcGFyZW50X2xpZ2h0X2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aG9tZUFzVXBJbmRpY2F0b3IiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX2FiX2JhY2tfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwcm9ncmVzc0JhclN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5Qcm9ncmVzc0Jhci5Ib3Jpem9udGFsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmluZGV0ZXJtaW5hdGVQcm9ncmVzc1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5Qcm9ncmVzc0JhcjwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5RdWFudHVtLkxpZ2h0LkFjdGlvbkJhci5Tb2xpZCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGl0bGVUZXh0U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbkJhci5UaXRsZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzdWJ0aXRsZVRleHRTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuQWN0aW9uQmFyLlN1YnRpdGxlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2FiX3NvbGlkX2xpZ2h0X2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZFN0YWNrZWQiPkBhbmRyb2lkOmRyYXdhYmxlL2FiX3N0YWNrZWRfc29saWRfbGlnaHRfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kU3BsaXQiPkBhbmRyb2lkOmRyYXdhYmxlL2FiX2JvdHRvbV9zb2xpZF9saWdodF9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmRpdmlkZXIiPj9hbmRyb2lkOmF0dHIvZGl2aWRlclZlcnRpY2FsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnByb2dyZXNzQmFyU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LlByb2dyZXNzQmFyLkhvcml6b250YWw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aW5kZXRlcm1pbmF0ZVByb2dyZXNzU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LlByb2dyZXNzQmFyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnByb2dyZXNzQmFyUGFkZGluZyI+MzJkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aXRlbVBhZGRpbmciPjhkaXA8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuU29saWQuSW52ZXJzZSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGl0bGVUZXh0U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uV2lkZ2V0LkFjdGlvbkJhci5UaXRsZS5JbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnN1YnRpdGxlVGV4dFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5BY3Rpb25CYXIuU3VidGl0bGUuSW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9hYl9zb2xpZF9kYXJrX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZFN0YWNrZWQiPkBhbmRyb2lkOmRyYXdhYmxlL2FiX3N0YWNrZWRfc29saWRfZGFya19ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJhY2tncm91bmRTcGxpdCI+QGFuZHJvaWQ6ZHJhd2FibGUvYWJfYm90dG9tX3NvbGlkX2ludmVyc2VfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkaXZpZGVyIj5AYW5kcm9pZDpkcmF3YWJsZS9saXN0X2RpdmlkZXJfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnByb2dyZXNzQmFyU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlByb2dyZXNzQmFyLkhvcml6b250YWw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aW5kZXRlcm1pbmF0ZVByb2dyZXNzU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlByb2dyZXNzQmFyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnByb2dyZXNzQmFyUGFkZGluZyI+MzJkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aXRlbVBhZGRpbmciPjhkaXA8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5Db21wb3VuZEJ1dHRvbi5Td2l0Y2giIHBhcmVudD0iV2lkZ2V0LkNvbXBvdW5kQnV0dG9uLlN3aXRjaCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dHJhY2siPkBhbmRyb2lkOmRyYXdhYmxlL3N3aXRjaF90cmFja19ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRodW1iIj5AYW5kcm9pZDpkcmF3YWJsZS9zd2l0Y2hfaW5uZXJfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzd2l0Y2hUZXh0QXBwZWFyYW5jZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5XaWRnZXQuU3dpdGNoPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRPbiI+QGFuZHJvaWQ6c3RyaW5nL2NhcGl0YWxfb248L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dE9mZiI+QGFuZHJvaWQ6c3RyaW5nL2NhcGl0YWxfb2ZmPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRodW1iVGV4dFBhZGRpbmciPjEyZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnN3aXRjaE1pbldpZHRoIj45NmRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzd2l0Y2hQYWRkaW5nIj4xNmRpcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBBbmltYXRpb24gU3R5bGVzIC0tPgorCisgICAgPHN0eWxlIG5hbWU9IkFuaW1hdGlvbi5RdWFudHVtIiBwYXJlbnQ9IkFuaW1hdGlvbiIvPgorCisgICAgPHN0eWxlIG5hbWU9IkFuaW1hdGlvbi5RdWFudHVtLkFjdGl2aXR5IiBwYXJlbnQ9IkFuaW1hdGlvbi5BY3Rpdml0eSIvPgorCisgICAgPHN0eWxlIG5hbWU9IkFuaW1hdGlvbi5RdWFudHVtLkRpYWxvZyIgcGFyZW50PSJBbmltYXRpb24uRGlhbG9nIi8+CisKKyAgICA8IS0tIERpYWxvZyBzdHlsZXMgLS0+CisKKyAgICA8c3R5bGUgbmFtZT0iQWxlcnREaWFsb2cuUXVhbnR1bSIgcGFyZW50PSJBbGVydERpYWxvZyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImZ1bGxEYXJrIj5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfZnVsbF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRvcERhcmsiPkBhbmRyb2lkOmRyYXdhYmxlL2RpYWxvZ190b3BfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJjZW50ZXJEYXJrIj5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfbWlkZGxlX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYm90dG9tRGFyayI+QGFuZHJvaWQ6ZHJhd2FibGUvZGlhbG9nX2JvdHRvbV9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImZ1bGxCcmlnaHQiPkBhbmRyb2lkOmRyYXdhYmxlL2RpYWxvZ19mdWxsX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idG9wQnJpZ2h0Ij5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfdG9wX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY2VudGVyQnJpZ2h0Ij5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfbWlkZGxlX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYm90dG9tQnJpZ2h0Ij5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfYm90dG9tX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYm90dG9tTWVkaXVtIj5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfYm90dG9tX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY2VudGVyTWVkaXVtIj5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfbWlkZGxlX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ibGF5b3V0Ij5AYW5kcm9pZDpsYXlvdXQvYWxlcnRfZGlhbG9nX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RMYXlvdXQiPkBhbmRyb2lkOmxheW91dC9zZWxlY3RfZGlhbG9nX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InByb2dyZXNzTGF5b3V0Ij5AYW5kcm9pZDpsYXlvdXQvcHJvZ3Jlc3NfZGlhbG9nX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imhvcml6b250YWxQcm9ncmVzc0xheW91dCI+QGFuZHJvaWQ6bGF5b3V0L2FsZXJ0X2RpYWxvZ19wcm9ncmVzc19ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0SXRlbUxheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3NlbGVjdF9kaWFsb2dfaXRlbV9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJtdWx0aUNob2ljZUl0ZW1MYXlvdXQiPkBhbmRyb2lkOmxheW91dC9zZWxlY3RfZGlhbG9nX211bHRpY2hvaWNlX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNpbmdsZUNob2ljZUl0ZW1MYXlvdXQiPkBhbmRyb2lkOmxheW91dC9zZWxlY3RfZGlhbG9nX3NpbmdsZWNob2ljZV9ob2xvPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iQWxlcnREaWFsb2cuUXVhbnR1bS5MaWdodCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImZ1bGxEYXJrIj5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfZnVsbF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0b3BEYXJrIj5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfdG9wX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImNlbnRlckRhcmsiPkBhbmRyb2lkOmRyYXdhYmxlL2RpYWxvZ19taWRkbGVfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYm90dG9tRGFyayI+QGFuZHJvaWQ6ZHJhd2FibGUvZGlhbG9nX2JvdHRvbV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJmdWxsQnJpZ2h0Ij5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfZnVsbF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0b3BCcmlnaHQiPkBhbmRyb2lkOmRyYXdhYmxlL2RpYWxvZ190b3BfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY2VudGVyQnJpZ2h0Ij5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfbWlkZGxlX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImJvdHRvbUJyaWdodCI+QGFuZHJvaWQ6ZHJhd2FibGUvZGlhbG9nX2JvdHRvbV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJib3R0b21NZWRpdW0iPkBhbmRyb2lkOmRyYXdhYmxlL2RpYWxvZ19ib3R0b21faG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY2VudGVyTWVkaXVtIj5AYW5kcm9pZDpkcmF3YWJsZS9kaWFsb2dfbWlkZGxlX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gV2luZG93IHRpdGxlIC0tPgorICAgIDxzdHlsZSBuYW1lPSJXaW5kb3dUaXRsZUJhY2tncm91bmQuUXVhbnR1bSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QG51bGw8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaW5kb3dUaXRsZS5RdWFudHVtIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzaW5nbGVMaW5lIj50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRBcHBlYXJhbmNlIj5Ac3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaW5kb3dUaXRsZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzaGFkb3dDb2xvciI+I0JCMDAwMDAwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNoYWRvd1JhZGl1cyI+Mi43NTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IkRpYWxvZ1dpbmRvd1RpdGxlLlF1YW50dW0iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1heExpbmVzIj4xPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnNjcm9sbEhvcml6b250YWxseSI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uRGlhbG9nV2luZG93VGl0bGU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJEaWFsb2dXaW5kb3dUaXRsZS5RdWFudHVtLkxpZ2h0Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDptYXhMaW5lcyI+MTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzY3JvbGxIb3Jpem9udGFsbHkiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dEFwcGVhcmFuY2UiPkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0LkRpYWxvZ1dpbmRvd1RpdGxlPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uUHJlZmVyZW5jZUZyYW1lTGF5b3V0Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpib3JkZXJUb3AiPjBkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Ym9yZGVyQm90dG9tIj5AZGltZW4vcHJlZmVyZW5jZV9mcmFnbWVudF9wYWRkaW5nX2JvdHRvbTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpib3JkZXJMZWZ0Ij4/YXR0ci9wcmVmZXJlbmNlRnJhZ21lbnRQYWRkaW5nU2lkZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpib3JkZXJSaWdodCI+P2F0dHIvcHJlZmVyZW5jZUZyYWdtZW50UGFkZGluZ1NpZGU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5NZWRpYVJvdXRlQnV0dG9uIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj4/YW5kcm9pZDphdHRyL3NlbGVjdGFibGVJdGVtQmFja2dyb3VuZDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpleHRlcm5hbFJvdXRlRW5hYmxlZERyYXdhYmxlIj5AZHJhd2FibGUvaWNfbWVkaWFfcm91dGVfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbldpZHRoIj41NmRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbkhlaWdodCI+NDhkcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpmb2N1c2FibGUiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uIj5AYW5kcm9pZDpzdHJpbmcvbWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb248L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5NZWRpYVJvdXRlQnV0dG9uIiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLk1lZGlhUm91dGVCdXR0b24iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmV4dGVybmFsUm91dGVFbmFibGVkRHJhd2FibGUiPkBkcmF3YWJsZS9pY19tZWRpYV9yb3V0ZV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5UaW1lUGlja2VyLlRpbWVMYWJlbCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+QGRpbWVuL3RpbWVwaWNrZXJfdGltZV9sYWJlbF9zaXplPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X3RleHRfY29sb3JfaG9sb19kYXJrPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5UaW1lUGlja2VyLkFtUG1MYWJlbCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+QGRpbWVuL3RpbWVwaWNrZXJfYW1wbV9sYWJlbF9zaXplPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRBbGxDYXBzIj50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X3RleHRfY29sb3JfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTdHlsZSI+Ym9sZDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuVGltZVBpY2tlci5UaW1lTGFiZWwiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFNpemUiPkBkaW1lbi90aW1lcGlja2VyX3RpbWVfbGFiZWxfc2l6ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPkBjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5UaW1lUGlja2VyLkFtUG1MYWJlbCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+QGRpbWVuL3RpbWVwaWNrZXJfYW1wbV9sYWJlbF9zaXplPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRBbGxDYXBzIj50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+QGNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFN0eWxlIj5ib2xkPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LlF1YW50dW0uRmFzdFNjcm9sbCIgcGFyZW50PSJXaWRnZXQuRmFzdFNjcm9sbCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGh1bWJNaW5XaWR0aCI+MGRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRodW1iTWluSGVpZ2h0Ij4wZHA8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuUXVhbnR1bS5MaWdodC5GYXN0U2Nyb2xsIiBwYXJlbnQ9IldpZGdldC5RdWFudHVtLkZhc3RTY3JvbGwiLz4KKworPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N5bWJvbHMueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9zeW1ib2xzLnhtbAppbmRleCA2ZDkwOTczLi4zYWM3NjJmIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N5bWJvbHMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3ltYm9scy54bWwKQEAgLTIyNCw2ICsyMjQsNyBAQAogCiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJhY3Rpb25Nb2RlU2hhcmVEcmF3YWJsZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImF0dHIiIG5hbWU9ImFsZXJ0RGlhbG9nQ2VudGVyQnV0dG9ucyIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImF0dHIiIG5hbWU9ImZyYWdtZW50QnJlYWRDcnVtYnNTdHlsZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImF0dHIiIG5hbWU9Imdlc3R1cmVPdmVybGF5Vmlld1N0eWxlIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0ia2V5Ym9hcmRWaWV3U3R5bGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJudW1iZXJQaWNrZXJTdHlsZSIgLz4KQEAgLTMxOSw2ICszMjAsNyBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0iaW50ZWdlciIgbmFtZT0iY29uZmlnX21vYmlsZV9tdHUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJpbnRlZ2VyIiBuYW1lPSJjb25maWdfdm9sdGVfcmVwbGFjZW1lbnRfcmF0Ii8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJpbnRlZ2VyIiBuYW1lPSJjb25maWdfdmFsaWRfd2FwcHVzaF9pbmRleCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImludGVnZXIiIG5hbWU9ImNvbmZpZ19vdmVycmlkZUhhc1Blcm1hbmVudE1lbnVLZXkiIC8+CiAKICAgPGphdmEtc3ltYm9sIHR5cGU9ImNvbG9yIiBuYW1lPSJ0YWJfaW5kaWNhdG9yX3RleHRfdjQiIC8+CiAKQEAgLTMzMiwxMSArMzM0LDYgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJkZWZhdWx0X2dhcCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJkcm9wZG93bml0ZW1faWNvbl93aWR0aCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJkcm9wZG93bml0ZW1fdGV4dF9wYWRkaW5nX2xlZnQiIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0iZmFzdHNjcm9sbF9vdmVybGF5X3NpemUiIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0iZmFzdHNjcm9sbF9vdmVybGF5X3RleHRfc2l6ZSIgLz4KLSAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJmYXN0c2Nyb2xsX292ZXJsYXlfcGFkZGluZyIgLz4KLSAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJmYXN0c2Nyb2xsX3RodW1iX2hlaWdodCIgLz4KLSAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJmYXN0c2Nyb2xsX3RodW1iX3dpZHRoIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX3NwYWNlYmFyX3ZlcnRpY2FsX2NvcnJlY3Rpb24iIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0ic2VhcmNoX3ZpZXdfcHJlZmVycmVkX3dpZHRoIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9InRleHR2aWV3X2Vycm9yX3BvcHVwX2RlZmF1bHRfd2lkdGgiIC8+CkBAIC02OTAsNiArNjg3LDcgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ibW9iaWxlX3Byb3Zpc2lvbmluZ19hcG4iIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Im1vYmlsZV9wcm92aXNpb25pbmdfdXJsIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJtb2JpbGVfcmVkaXJlY3RlZF9wcm92aXNpb25pbmdfdXJsIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfY29uZmlybSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0icmVib290X3NhZmVtb2RlX3RpdGxlIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJyZWxhdGlvblR5cGVBc3Npc3RhbnQiIC8+CkBAIC0xMDkxLDcgKzEwODksNiBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0iZHJhd2FibGUiIG5hbWU9InVubG9ja19oYWxvIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZHJhd2FibGUiIG5hbWU9InVubG9ja19yaW5nIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZHJhd2FibGUiIG5hbWU9InVubG9ja193YXZlIiAvPgotICA8amF2YS1zeW1ib2wgdHlwZT0iZHJhd2FibGUiIG5hbWU9ImljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJub3RpZmljYXRpb25fYmciIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkcmF3YWJsZSIgbmFtZT0ibm90aWZpY2F0aW9uX2JnX2xvdyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJub3RpZmljYXRpb25fdGVtcGxhdGVfaWNvbl9iZyIgLz4KQEAgLTExNzksNyArMTE3Niw3IEBACiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJsYXlvdXQiIG5hbWU9InRhYl9jb250ZW50IiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ibGF5b3V0IiBuYW1lPSJ0YWJfaW5kaWNhdG9yX2hvbG8iIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJsYXlvdXQiIG5hbWU9InRleHR2aWV3X2hpbnQiIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJsYXlvdXQiIG5hbWU9InRpbWVfcGlja2VyIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ibGF5b3V0IiBuYW1lPSJ0aW1lX3BpY2tlcl9sZWdhY3kiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJsYXlvdXQiIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0idHJhbnNpZW50X25vdGlmaWNhdGlvbiIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0idm9sdW1lX2FkanVzdCIgLz4KQEAgLTE3NTcsNCArMTc1NCw1NSBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9InN1YnRpdGxlX3NoYWRvd19yYWRpdXMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0ic3VidGl0bGVfc2hhZG93X29mZnNldCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJzdWJ0aXRsZV9vdXRsaW5lX3dpZHRoIiAvPgorCisgIDwhLS0gRnJvbSB0aGUgbmV3IFRpbWVQaWNrZXIgLS0+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJ0aW1lUGlja2VySGVhZGVyQmFja2dyb3VuZENvbG9yIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0idGltZVBpY2tlckRpYWxvZ1RoZW1lIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0iaGVhZGVyU2VsZWN0ZWRUZXh0Q29sb3IiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJoZWFkZXJVbnNlbGVjdGVkVGV4dENvbG9yIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0ibnVtYmVyc1RleHRDb2xvciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImF0dHIiIG5hbWU9Im51bWJlcnNCYWNrZ3JvdW5kQ29sb3IiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJhbVBtVGV4dENvbG9yIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0iYW1QbVVuc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3IiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJhbVBtU2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3IiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJudW1iZXJzU2VsZWN0b3JDb2xvciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImF0dHIiIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJUaW1lTGFiZWxUZXh0QXBwZWFyYW5jZSIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0eWxlIiBuYW1lPSJUZXh0QXBwZWFyYW5jZS5Ib2xvLlRpbWVQaWNrZXIuVGltZUxhYmVsIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ibGF5b3V0IiBuYW1lPSJ0aW1lX3BpY2tlcl9ob2xvIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ibGF5b3V0IiBuYW1lPSJ0aW1lX2hlYWRlcl9sYWJlbCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJ0aW1lX2hlYWRlciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJob3VycyIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJtaW51dGVzIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9ImFtcG1fbGFiZWwiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0icmFkaWFsX3BpY2tlciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJzZXBhcmF0b3IiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0ibGF5b3V0X2J1dHRvbnMiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0iZG9uZV9idXR0b24iIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImRvbmVfbGFiZWwiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJzZWxlY3RfaG91cnMiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InNlbGVjdF9taW51dGVzIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJ0aW1lX3BsYWNlaG9sZGVyIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJ0aW1lcGlja2VyX2NpcmNsZV9yYWRpdXNfbXVsdGlwbGllciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl9jaXJjbGVfcmFkaXVzX211bHRpcGxpZXJfMjRIb3VyTW9kZSIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl9hbXBtX2NpcmNsZV9yYWRpdXNfbXVsdGlwbGllciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iZGVsZXRlZF9rZXkiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InNhbnNfc2VyaWYiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InJhZGlhbF9udW1iZXJzX3R5cGVmYWNlIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJ0aW1lcGlja2VyX3RleHRfc2l6ZV9tdWx0aXBsaWVyX2lubmVyIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJ0aW1lcGlja2VyX3RleHRfc2l6ZV9tdWx0aXBsaWVyX291dGVyIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJ0aW1lcGlja2VyX3RleHRfc2l6ZV9tdWx0aXBsaWVyX25vcm1hbCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX291dGVyIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJ0aW1lcGlja2VyX3NlbGVjdGlvbl9yYWRpdXNfbXVsdGlwbGllciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX2lubmVyIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJ0aW1lcGlja2VyX251bWJlcnNfcmFkaXVzX211bHRpcGxpZXJfbm9ybWFsIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJ0aW1lcGlja2VyX3RyYW5zaXRpb25fbWlkX3JhZGl1c19tdWx0aXBsaWVyIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJ0aW1lcGlja2VyX3RyYW5zaXRpb25fZW5kX3JhZGl1c19tdWx0aXBsaWVyIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iY29sb3IiIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fbGlnaHQiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJjb2xvciIgbmFtZT0idGltZXBpY2tlcl9kZWZhdWx0X2Rpc2FibGVkX2NvbG9yX2hvbG9fbGlnaHQiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJjb2xvciIgbmFtZT0idGltZXBpY2tlcl9kZWZhdWx0X2FtcG1fdW5zZWxlY3RlZF9iYWNrZ3JvdW5kX2NvbG9yX2hvbG9fbGlnaHQiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJjb2xvciIgbmFtZT0idGltZXBpY2tlcl9kZWZhdWx0X2FtcG1fc2VsZWN0ZWRfYmFja2dyb3VuZF9jb2xvcl9ob2xvX2xpZ2h0IiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iYXJyYXkiIG5hbWU9ImNvbmZpZ19jbG9ja1RpY2tWaWJlUGF0dGVybiIgLz4KKwogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3RoZW1lcy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3RoZW1lcy54bWwKaW5kZXggYzhkOWZjNi4uNzZmYmRlZCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy90aGVtZXMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvdGhlbWVzLnhtbApAQCAtMjQ5LDYgKzI0OSw3IEBACiAgICAgICAgIDxpdGVtIG5hbWU9ImVkaXRUZXh0U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5FZGl0VGV4dDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZXhwYW5kYWJsZUxpc3RWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5FeHBhbmRhYmxlTGlzdFZpZXc8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImV4cGFuZGFibGVMaXN0Vmlld1doaXRlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5FeHBhbmRhYmxlTGlzdFZpZXcuV2hpdGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImZhc3RTY3JvbGxTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkZhc3RTY3JvbGw8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImdhbGxlcnlTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkdhbGxlcnk8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9Imdlc3R1cmVPdmVybGF5Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuR2VzdHVyZU92ZXJsYXlWaWV3PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJncmlkVmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuR3JpZFZpZXc8L2l0ZW0+CkBAIC0yOTYsOCArMjk3LDggQEAKICAgICAgICAgPGl0ZW0gbmFtZT0ibGlzdFBvcHVwV2luZG93U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5MaXN0UG9wdXBXaW5kb3c8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9InBvcHVwTWVudVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUG9wdXBNZW51PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpdml0eUNob29zZXJWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5BY3Rpdml0eUNob29zZXJWaWV3PC9pdGVtPgotCiAgICAgICAgIDxpdGVtIG5hbWU9Im1lZGlhUm91dGVCdXR0b25TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkRldmljZURlZmF1bHQuTWVkaWFSb3V0ZUJ1dHRvbjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZnJhZ21lbnRCcmVhZENydW1ic1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuRnJhZ21lbnRCcmVhZENydW1iczwvaXRlbT4KIAogICAgICAgICA8IS0tIFByZWZlcmVuY2Ugc3R5bGVzIC0tPgogICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlU2NyZWVuU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1ByZWZlcmVuY2UuUHJlZmVyZW5jZVNjcmVlbjwvaXRlbT4KQEAgLTM4Miw2ICszODMsMTggQEAKICAgICAgICAgPCEtLSBUaW1lUGlja2VyIHN0eWxlIC0tPgogICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VyU3R5bGUiPkBzdHlsZS9XaWRnZXQuVGltZVBpY2tlcjwvaXRlbT4KIAorICAgICAgICA8IS0tIFRpbWVQaWNrZXIgYmFja2dyb3VuZCBjb2xvciAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckhlYWRlckJhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvZGFya2VyX2dyYXk8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciB0aW1lIGxhYmVsIHRleHQgYXBwZWFyYW5jZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckhlYWRlclRpbWVMYWJlbFRleHRBcHBlYXJhbmNlIj5Ac3R5bGUvVGV4dEFwcGVhcmFuY2UuVGltZVBpY2tlci5UaW1lTGFiZWw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciBhbSBwbSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJBbVBtTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLlRpbWVQaWNrZXIuQW1QbUxhYmVsPC9pdGVtPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBkaWFsb2cgdGhlbWUgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJEaWFsb2dUaGVtZSI+QGFuZHJvaWQ6c3R5bGUvVGhlbWUuRGlhbG9nLlRpbWVQaWNrZXI8L2l0ZW0+CisKICAgICAgICAgPCEtLSBEYXRlUGlja2VyIHN0eWxlIC0tPgogICAgICAgICA8aXRlbSBuYW1lPSJkYXRlUGlja2VyU3R5bGUiPkBzdHlsZS9XaWRnZXQuRGF0ZVBpY2tlcjwvaXRlbT4KIApAQCAtMzkxLDcgKzQwNCw2IEBACiAgICAgICAgIDxpdGVtIG5hbWU9ImZhc3RTY3JvbGxQcmV2aWV3QmFja2dyb3VuZExlZnQiPkBhbmRyb2lkOmRyYXdhYmxlL21lbnVfc3VibWVudV9iYWNrZ3JvdW5kPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJmYXN0U2Nyb2xsT3ZlcmxheVBvc2l0aW9uIj5mbG9hdGluZzwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZmFzdFNjcm9sbFRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X2Rhcms8L2l0ZW0+Ci0KICAgICAgICAgPCEtLSBQb2ludGVyIHN0eWxlIC0tPgogICAgICAgICA8aXRlbSBuYW1lPSJwb2ludGVyU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1BvaW50ZXI8L2l0ZW0+CiAKQEAgLTY4OCw3ICs3MDAsMTUgQEAKICAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VMaXN0SXRlbSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuTGFyZ2UuSW52ZXJzZTwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VMaXN0SXRlbVNtYWxsIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5MYXJnZS5JbnZlcnNlPC9pdGVtPgogICAgIDwvc3R5bGU+Ci0gICAgCisKKyAgICA8IS0tIERlZmF1bHQgaGVtZSBmb3IgdGhlIFRpbWVQaWNrZXIgZGlhbG9nIHdpbmRvd3MsIHdoaWNoIGlzIHVzZWQgYnkgdGhlCisgICAgICAgICB7QGxpbmsgYW5kcm9pZC5hcHAuVGltZVBpY2tlckRpYWxvZ30gY2xhc3MuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5EaWFsb2cuVGltZVBpY2tlciI+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0JhY2tncm91bmQiPkBhbmRyb2lkOmNvbG9yL3RyYW5zcGFyZW50PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dUaXRsZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9EaWFsb2dXaW5kb3dUaXRsZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Q29udGVudE92ZXJsYXkiPkBudWxsPC9pdGVtPgorICAgIDwvc3R5bGU+CisKICAgICA8IS0tIERlZmF1bHQgZGFyayB0aGVtZSBmb3IgcGFuZWwgd2luZG93cyAob24gQVBJIGxldmVsIDEwIGFuZCBsb3dlcikuICBUaGlzIHJlbW92ZXMgYWxsCiAgICAgICAgICBleHRyYW5lb3VzIHdpbmRvdyBkZWNvcmF0aW9ucywgc28geW91IGJhc2ljYWxseSBoYXZlIGFuIGVtcHR5IHJlY3RhbmdsZSBpbiB3aGljaAogICAgICAgICAgdG8gcGxhY2UgeW91ciBjb250ZW50LiAgSXQgbWFrZXMgdGhlIHdpbmRvdyBmbG9hdGluZywgd2l0aCBhIHRyYW5zcGFyZW50CkBAIC0xMDg4LDYgKzExMDgsNyBAQAogICAgICAgICA8aXRlbSBuYW1lPSJlZGl0VGV4dFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5FZGl0VGV4dDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZXhwYW5kYWJsZUxpc3RWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkV4cGFuZGFibGVMaXN0VmlldzwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZXhwYW5kYWJsZUxpc3RWaWV3V2hpdGVTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uRXhwYW5kYWJsZUxpc3RWaWV3LldoaXRlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJmYXN0U2Nyb2xsU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkZhc3RTY3JvbGw8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImdhbGxlcnlTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uR2FsbGVyeTwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZ2VzdHVyZU92ZXJsYXlWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkdlc3R1cmVPdmVybGF5VmlldzwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZ3JpZFZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uR3JpZFZpZXc8L2l0ZW0+CkBAIC0xMTM1LDYgKzExNTYsNyBAQAogICAgICAgICA8aXRlbSBuYW1lPSJwb3B1cE1lbnVTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uUG9wdXBNZW51PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJzdGFja1ZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uU3RhY2tWaWV3PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpdml0eUNob29zZXJWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkFjdGl2aXR5Q2hvb3NlclZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImZyYWdtZW50QnJlYWRDcnVtYnNTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uRnJhZ21lbnRCcmVhZENydW1iczwvaXRlbT4KIAogICAgICAgICA8IS0tIFByZWZlcmVuY2Ugc3R5bGVzIC0tPgogICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlU2NyZWVuU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1ByZWZlcmVuY2UuSG9sby5QcmVmZXJlbmNlU2NyZWVuPC9pdGVtPgpAQCAtMTIwMiw2ICsxMjI0LDE4IEBACiAgICAgICAgIDwhLS0gVGltZVBpY2tlciBzdHlsZSAtLT4KICAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlclN0eWxlIj5Ac3R5bGUvV2lkZ2V0LkhvbG8uVGltZVBpY2tlcjwvaXRlbT4KIAorICAgICAgICA8IS0tIFRpbWVQaWNrZXIgYmFja2dyb3VuZCBjb2xvciAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckhlYWRlckJhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19kYXJrPC9pdGVtPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBIZWFkZXIgdGltZSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJUaW1lTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLkhvbG8uVGltZVBpY2tlci5UaW1lTGFiZWw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciBhbSBwbSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJBbVBtTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLkhvbG8uVGltZVBpY2tlci5BbVBtTGFiZWw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIGRpYWxvZyB0aGVtZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckRpYWxvZ1RoZW1lIj5AYW5kcm9pZDpzdHlsZS9UaGVtZS5Ib2xvLkRpYWxvZy5UaW1lUGlja2VyPC9pdGVtPgorCiAgICAgICAgIDwhLS0gRGF0ZVBpY2tlciBzdHlsZSAtLT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZGF0ZVBpY2tlclN0eWxlIj5Ac3R5bGUvV2lkZ2V0LkhvbG8uRGF0ZVBpY2tlcjwvaXRlbT4KIApAQCAtMTQwMyw2ICsxNDM3LDcgQEAKICAgICAgICAgPGl0ZW0gbmFtZT0iZWRpdFRleHRTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uTGlnaHQuRWRpdFRleHQ8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImV4cGFuZGFibGVMaXN0Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5MaWdodC5FeHBhbmRhYmxlTGlzdFZpZXc8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImV4cGFuZGFibGVMaXN0Vmlld1doaXRlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkxpZ2h0LkV4cGFuZGFibGVMaXN0Vmlldy5XaGl0ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZmFzdFNjcm9sbFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5MaWdodC5GYXN0U2Nyb2xsPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJnYWxsZXJ5U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkxpZ2h0LkdhbGxlcnk8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9Imdlc3R1cmVPdmVybGF5Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5MaWdodC5HZXN0dXJlT3ZlcmxheVZpZXc8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImdyaWRWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkxpZ2h0LkdyaWRWaWV3PC9pdGVtPgpAQCAtMTQ1MCw2ICsxNDg1LDcgQEAKICAgICAgICAgPGl0ZW0gbmFtZT0icG9wdXBNZW51U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkxpZ2h0LlBvcHVwTWVudTwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0ic3RhY2tWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLlN0YWNrVmlldzwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aXZpdHlDaG9vc2VyVmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5MaWdodC5BY3Rpdml0eUNob29zZXJWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJmcmFnbWVudEJyZWFkQ3J1bWJzU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkxpZ2h0LkZyYWdtZW50QnJlYWRDcnVtYnM8L2l0ZW0+CiAKICAgICAgICAgPCEtLSBQcmVmZXJlbmNlIHN0eWxlcyAtLT4KICAgICAgICAgPGl0ZW0gbmFtZT0icHJlZmVyZW5jZVNjcmVlblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9QcmVmZXJlbmNlLkhvbG8uUHJlZmVyZW5jZVNjcmVlbjwvaXRlbT4KQEAgLTE1MTcsNiArMTU1MywxOCBAQAogICAgICAgICA8IS0tIFRpbWVQaWNrZXIgc3R5bGUgLS0+CiAgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJTdHlsZSI+QHN0eWxlL1dpZGdldC5Ib2xvLkxpZ2h0LlRpbWVQaWNrZXI8L2l0ZW0+CiAKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciBiYWNrZ3JvdW5kIGNvbG9yIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VySGVhZGVyQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfYmFja2dyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBIZWFkZXIgdGltZSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJUaW1lTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLkhvbG8uTGlnaHQuVGltZVBpY2tlci5UaW1lTGFiZWw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciBhbSBwbSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJBbVBtTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLkhvbG8uTGlnaHQuVGltZVBpY2tlci5BbVBtTGFiZWw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIGRpYWxvZyB0aGVtZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckRpYWxvZ1RoZW1lIj5AYW5kcm9pZDpzdHlsZS9UaGVtZS5Ib2xvLkxpZ2h0LkRpYWxvZy5UaW1lUGlja2VyPC9pdGVtPgorCiAgICAgICAgIDwhLS0gRGF0ZVBpY2tlciBzdHlsZSAtLT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZGF0ZVBpY2tlclN0eWxlIj5Ac3R5bGUvV2lkZ2V0LkhvbG8uTGlnaHQuRGF0ZVBpY2tlcjwvaXRlbT4KIApAQCAtMTcyOSw2ICsxNzc3LDE0IEBACiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93TWluV2lkdGhNaW5vciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX21pbl93aWR0aF9taW5vcjwvaXRlbT4KICAgICA8L3N0eWxlPgogCisgICAgPCEtLSBIb2xvIHRoZW1lIGZvciB0aGUgVGltZVBpY2tlciBkaWFsb2cgd2luZG93cywgd2hpY2ggaXMgdXNlZCBieSB0aGUKKyAgICAgICAgIHtAbGluayBhbmRyb2lkLmFwcC5UaW1lUGlja2VyRGlhbG9nfSBjbGFzcy4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLkhvbG8uRGlhbG9nLlRpbWVQaWNrZXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dCYWNrZ3JvdW5kIj5AYW5kcm9pZDpjb2xvci90cmFuc3BhcmVudDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93VGl0bGVTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvRGlhbG9nV2luZG93VGl0bGUuSG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Q29udGVudE92ZXJsYXkiPkBudWxsPC9pdGVtPgorICAgIDwvc3R5bGU+CisKICAgICA8IS0tIFRoZW1lIGZvciBhIHdpbmRvdyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGVpdGhlciBmdWxsLXNjcmVlbiBvbgogICAgICAgICAgc21hbGxlciBzY3JlZW5zIChzbWFsbCwgbm9ybWFsKSBvciBhcyBhIGRpYWxvZyBvbiBsYXJnZXIgc2NyZWVucwogICAgICAgICAgKGxhcmdlLCB4bGFyZ2UpLiAtLT4KQEAgLTE4NDQsNiArMTkwMCwxNCBAQAogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd01pbldpZHRoTWlub3IiPkBhbmRyb2lkOmRpbWVuL2RpYWxvZ19taW5fd2lkdGhfbWlub3I8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAorICAgIDwhLS0gSG9sbyBMaWdodCB0aGVtZSBmb3IgdGhlIFRpbWVQaWNrZXIgZGlhbG9nIHdpbmRvd3MsIHdoaWNoIGlzIHVzZWQgYnkgdGhlCisgICAgICAgICB7QGxpbmsgYW5kcm9pZC5hcHAuVGltZVBpY2tlckRpYWxvZ30gY2xhc3MuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5Ib2xvLkxpZ2h0LkRpYWxvZy5UaW1lUGlja2VyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93QmFja2dyb3VuZCI+QGFuZHJvaWQ6Y29sb3IvdHJhbnNwYXJlbnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd1RpdGxlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL0RpYWxvZ1dpbmRvd1RpdGxlLkhvbG8uTGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0NvbnRlbnRPdmVybGF5Ij5AbnVsbDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCiAgICAgPCEtLSBUaGVtZSBmb3IgYSBwcmVzZW50YXRpb24gd2luZG93IG9uIGEgc2Vjb25kYXJ5IGRpc3BsYXkuIC0tPgogICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5Ib2xvLkxpZ2h0LkRpYWxvZy5QcmVzZW50YXRpb24iIHBhcmVudD0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuSG9sby5MaWdodC5Ob0FjdGlvbkJhci5GdWxsc2NyZWVuIiA+CiAgICAgPC9zdHlsZT4KQEAgLTE4NjEsNCArMTkyNSw1IEBACiAgICAgPHN0eWxlIG5hbWU9IlRoZW1lLkhvbG8uV2FsbHBhcGVyLk5vVGl0bGVCYXIiPgogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd05vVGl0bGUiPnRydWU8L2l0ZW0+CiAgICAgPC9zdHlsZT4KKwogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3RoZW1lc19kZXZpY2VfZGVmYXVsdHMueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy90aGVtZXNfZGV2aWNlX2RlZmF1bHRzLnhtbAppbmRleCA3MjFjNmIwLi4xOTU1NmExIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3RoZW1lc19kZXZpY2VfZGVmYXVsdHMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvdGhlbWVzX2RldmljZV9kZWZhdWx0cy54bWwKQEAgLTE5NCw2ICsxOTQsMTUgQEAKICAgICAgICAgPCEtLSBUaW1lUGlja2VyIHN0eWxlIC0tPgogICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VyU3R5bGUiPkBzdHlsZS9XaWRnZXQuRGV2aWNlRGVmYXVsdC5UaW1lUGlja2VyPC9pdGVtPgogCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBIZWFkZXIgdGltZSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJUaW1lTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLkRldmljZURlZmF1bHQuVGltZVBpY2tlci5UaW1lTGFiZWw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciBhbSBwbSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJBbVBtTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLkRldmljZURlZmF1bHQuVGltZVBpY2tlci5BbVBtTGFiZWw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIGRpYWxvZyB0aGVtZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckRpYWxvZ1RoZW1lIj5AYW5kcm9pZDpzdHlsZS9UaGVtZS5EZXZpY2VEZWZhdWx0LkRpYWxvZy5UaW1lUGlja2VyPC9pdGVtPgorCiAgICAgICAgIDwhLS0gRGF0ZVBpY2tlciBzdHlsZSAtLT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZGF0ZVBpY2tlclN0eWxlIj5Ac3R5bGUvV2lkZ2V0LkRldmljZURlZmF1bHQuRGF0ZVBpY2tlcjwvaXRlbT4KIApAQCAtMzYzLDYgKzM3MiwxNSBAQAogICAgICAgICA8IS0tIFRpbWVQaWNrZXIgc3R5bGUgLS0+CiAgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJTdHlsZSI+QHN0eWxlL1dpZGdldC5EZXZpY2VEZWZhdWx0LkxpZ2h0LlRpbWVQaWNrZXI8L2l0ZW0+CiAKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciB0aW1lIGxhYmVsIHRleHQgYXBwZWFyYW5jZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckhlYWRlclRpbWVMYWJlbFRleHRBcHBlYXJhbmNlIj5Ac3R5bGUvVGV4dEFwcGVhcmFuY2UuRGV2aWNlRGVmYXVsdC5MaWdodC5UaW1lUGlja2VyLlRpbWVMYWJlbDwvaXRlbT4KKworICAgICAgICA8IS0tIFRpbWVQaWNrZXIgSGVhZGVyIGFtIHBtIGxhYmVsIHRleHQgYXBwZWFyYW5jZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckhlYWRlckFtUG1MYWJlbFRleHRBcHBlYXJhbmNlIj5Ac3R5bGUvVGV4dEFwcGVhcmFuY2UuRGV2aWNlRGVmYXVsdC5MaWdodC5UaW1lUGlja2VyLkFtUG1MYWJlbDwvaXRlbT4KKworICAgICAgICA8IS0tIFRpbWVQaWNrZXIgZGlhbG9nIHRoZW1lIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VyRGlhbG9nVGhlbWUiPkBhbmRyb2lkOnN0eWxlL1RoZW1lLkRldmljZURlZmF1bHQuTGlnaHQuRGlhbG9nLlRpbWVQaWNrZXI8L2l0ZW0+CisKICAgICAgICAgPCEtLSBEYXRlUGlja2VyIHN0eWxlIC0tPgogICAgICAgICA8aXRlbSBuYW1lPSJkYXRlUGlja2VyU3R5bGUiPkBzdHlsZS9XaWRnZXQuRGV2aWNlRGVmYXVsdC5MaWdodC5EYXRlUGlja2VyPC9pdGVtPgogCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3RoZW1lc19xdWFudHVtLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvdGhlbWVzX3F1YW50dW0ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMTk3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3RoZW1lc19xdWFudHVtLnhtbApAQCAtMCwwICsxLDExMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzwhLS0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICAgUExFQVNFIFJFQUQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgUXVhbnR1bSB0aGVtZXMgbXVzdCBub3QgYmUgbW9kaWZpZWQgaW4gb3JkZXIgdG8gcGFzcyBDVFMuCitNYW55IHJlbGF0ZWQgdGhlbWVzIGFuZCBzdHlsZXMgZGVwZW5kIG9uIG90aGVyIHZhbHVlcyBkZWZpbmVkIGluIHRoaXMgZmlsZS4KK0lmIHlvdSB3b3VsZCBsaWtlIHRvIHByb3ZpZGUgY3VzdG9tIHRoZW1lcyBhbmQgc3R5bGVzIGZvciB5b3VyIGRldmljZSwKK3BsZWFzZSBzZWUgdGhlbWVzX2RldmljZV9kZWZhdWx0cy54bWwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICAgUExFQVNFIFJFQUQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIC0tPgorPHJlc291cmNlcz4KKworICAgIDwhLS0gUXVhbnR1bSBQYXBlciB0aGVtZSAoZGFyayB2ZXJzaW9uKS4KKyAgICAgICAgIDxwPklmIHlvdSB3YW50IHRvIGVuc3VyZSB0aGF0IHlvdXIKKyAgICAgICAgIGFwcCBjb25zaXN0ZW50bHkgdXNlcyB0aGUgUXVhbnR1bSB0aGVtZSBhdCBhbGwgdGltZXMsIHlvdSBtdXN0IGV4cGxpY2l0bHkgZGVjbGFyZSBpdCBpbiB5b3VyCisgICAgICAgICBtYW5pZmVzdC4gRm9yIGV4YW1wbGUsIHtAY29kZSAmbHQ7YXBwbGljYXRpb24gYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuUXVhbnR1bSImZ3Q7fS4KKworICAgICAgICAgPHA+U3R5bGVzIHVzZWQgYnkgdGhlIFF1YW50dW0gdGhlbWUgYXJlIG5hbWVkIHVzaW5nIHRoZSBjb252ZW50aW9uIFR5cGUuUXVhbnR1bS5FdGMKKyAgICAgICAgIChmb3IgZXhhbXBsZSwge0Bjb2RlIFdpZGdldC5RdWFudHVtLkJ1dHRvbn0gYW5kIHtAY29kZQorICAgICAgICAgVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuUG9wdXBNZW51LkxhcmdlfSkuCisgICAgICAgICBTcGVjaWZpYyByZXNvdXJjZXMgdXNlZCBieSBRdWFudHVtIGFyZSBuYW1lZCB1c2luZyB0aGUgY29udmVudGlvbiBAdHlwZS9mb29fYmFyX2Jhel9xdWFudHVtCisgICAgICAgICB3aXRoIHRyYWlsaW5nIF9kYXJrIG9yIF9saWdodCBzcGVjaWZpZXJzIGlmIHRoZXkgYXJlIG5vdCBzaGFyZWQgYmV0d2VlbiBib3RoIGxpZ2h0IGFuZAorICAgICAgICAgZGFyayB2ZXJzaW9ucyBvZiB0aGUgdGhlbWUuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY29sb3JGb3JlZ3JvdW5kIj5AYW5kcm9pZDpjb2xvci9icmlnaHRfZm9yZWdyb3VuZF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImNvbG9yRm9yZWdyb3VuZEludmVyc2UiPkBhbmRyb2lkOmNvbG9yL2JyaWdodF9mb3JlZ3JvdW5kX2ludmVyc2VfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJjb2xvckJhY2tncm91bmQiPkBhbmRyb2lkOmNvbG9yL2JhY2tncm91bmRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJjb2xvckJhY2tncm91bmRDYWNoZUhpbnQiPkBhbmRyb2lkOmRyYXdhYmxlL2JhY2tncm91bmRfY2FjaGVfaGludF9zZWxlY3Rvcl9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRpc2FibGVkQWxwaGEiPjAuNTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYmFja2dyb3VuZERpbUFtb3VudCI+MC42PC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9ImNvbG9yUHJlc3NlZEhpZ2hsaWdodCI+QGNvbG9yL2hvbG9fZ3JheV9saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY29sb3JMb25nUHJlc3NlZEhpZ2hsaWdodCI+QGNvbG9yL2hvbG9fZ3JheV9icmlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImNvbG9yRm9jdXNlZEhpZ2hsaWdodCI+QGNvbG9yL2hvbG9fYmx1ZV9kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJjb2xvck11bHRpU2VsZWN0SGlnaGxpZ2h0Ij5AY29sb3IvaG9sb19ncmVlbl9saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY29sb3JBY3RpdmF0ZWRIaWdobGlnaHQiPkBjb2xvci9ob2xvX2JsdWVfZGFyazwvaXRlbT4KKworICAgICAgICA8IS0tIFRleHQgc3R5bGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0QXBwZWFyYW5jZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VJbnZlcnNlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLkludmVyc2U8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yUHJpbWFyeSI+QGFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yU2Vjb25kYXJ5Ij5AYW5kcm9pZDpjb2xvci9zZWNvbmRhcnlfdGV4dF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvclRlcnRpYXJ5Ij5AYW5kcm9pZDpjb2xvci90ZXJ0aWFyeV90ZXh0X2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yUHJpbWFyeUludmVyc2UiPkBhbmRyb2lkOmNvbG9yL3ByaW1hcnlfdGV4dF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JTZWNvbmRhcnlJbnZlcnNlIj5AYW5kcm9pZDpjb2xvci9zZWNvbmRhcnlfdGV4dF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JUZXJ0aWFyeUludmVyc2UiPkBhbmRyb2lkOmNvbG9yL3RlcnRpYXJ5X3RleHRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yUHJpbWFyeURpc2FibGVPbmx5Ij5AYW5kcm9pZDpjb2xvci9wcmltYXJ5X3RleHRfZGlzYWJsZV9vbmx5X2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yUHJpbWFyeUludmVyc2VEaXNhYmxlT25seSI+QGFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X2Rpc2FibGVfb25seV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JQcmltYXJ5Tm9EaXNhYmxlIj5AYW5kcm9pZDpjb2xvci9wcmltYXJ5X3RleHRfbm9kaXNhYmxlX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yU2Vjb25kYXJ5Tm9EaXNhYmxlIj5AYW5kcm9pZDpjb2xvci9zZWNvbmRhcnlfdGV4dF9ub2Rpc2FibGVfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JQcmltYXJ5SW52ZXJzZU5vRGlzYWJsZSI+QGFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X25vZGlzYWJsZV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JTZWNvbmRhcnlJbnZlcnNlTm9EaXNhYmxlIj5AYW5kcm9pZDpjb2xvci9zZWNvbmRhcnlfdGV4dF9ub2Rpc2FibGVfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9ySGludCI+QGFuZHJvaWQ6Y29sb3IvaGludF9mb3JlZ3JvdW5kX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9ySGludEludmVyc2UiPkBhbmRyb2lkOmNvbG9yL2hpbnRfZm9yZWdyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JTZWFyY2hVcmwiPkBhbmRyb2lkOmNvbG9yL3NlYXJjaF91cmxfdGV4dF9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JIaWdobGlnaHQiPkBhbmRyb2lkOmNvbG9yL2hpZ2hsaWdodGVkX3RleHRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JIaWdobGlnaHRJbnZlcnNlIj5AYW5kcm9pZDpjb2xvci9oaWdobGlnaHRlZF90ZXh0X2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvckxpbmsiPkBhbmRyb2lkOmNvbG9yL2hvbG9fYmx1ZV9saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yTGlua0ludmVyc2UiPkBhbmRyb2lkOmNvbG9yL2hvbG9fYmx1ZV9saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yQWxlcnREaWFsb2dMaXN0SXRlbSI+QGFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X2hvbG9fZGFyazwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0QXBwZWFyYW5jZUxhcmdlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxhcmdlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0QXBwZWFyYW5jZU1lZGl1bSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5NZWRpdW08L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlU21hbGwiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uU21hbGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlTGFyZ2VJbnZlcnNlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxhcmdlLkludmVyc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlTWVkaXVtSW52ZXJzZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5NZWRpdW0uSW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VTbWFsbEludmVyc2UiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uU21hbGwuSW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VTZWFyY2hSZXN1bHRUaXRsZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5TZWFyY2hSZXN1bHQuVGl0bGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlU2VhcmNoUmVzdWx0U3VidGl0bGUiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uU2VhcmNoUmVzdWx0LlN1YnRpdGxlPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlQnV0dG9uIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5CdXR0b248L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iZWRpdFRleHRDb2xvciI+P2FuZHJvaWQ6YXR0ci90ZXh0Q29sb3JQcmltYXJ5PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJlZGl0VGV4dEJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2VkaXRfdGV4dF9ob2xvX2Rhcms8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iY2FuZGlkYXRlc1RleHRTdHlsZVNwYW5zIj5AYW5kcm9pZDpzdHJpbmcvY2FuZGlkYXRlc19zdHlsZTwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q2hlY2tNYXJrIj5AYW5kcm9pZDpkcmF3YWJsZS9pbmRpY2F0b3JfY2hlY2tfbWFya19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q2hlY2tNYXJrSW52ZXJzZSI+QGFuZHJvaWQ6ZHJhd2FibGUvaW5kaWNhdG9yX2NoZWNrX21hcmtfbGlnaHQ8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VMYXJnZVBvcHVwTWVudSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5XaWRnZXQuUG9wdXBNZW51LkxhcmdlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0QXBwZWFyYW5jZVNtYWxsUG9wdXBNZW51Ij5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5Qb3B1cE1lbnUuU21hbGw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBCdXR0b24gc3R5bGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJidXR0b25TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uQnV0dG9uPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9ImJ1dHRvblN0eWxlU21hbGwiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkJ1dHRvbi5TbWFsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYnV0dG9uU3R5bGVJbnNldCI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uQnV0dG9uLkluc2V0PC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9ImJ1dHRvblN0eWxlVG9nZ2xlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5CdXR0b24uVG9nZ2xlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJzd2l0Y2hTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uQ29tcG91bmRCdXR0b24uU3dpdGNoPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlQnV0dG9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLk1lZGlhUm91dGVCdXR0b248L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0ic2VsZWN0YWJsZUl0ZW1CYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9pdGVtX2JhY2tncm91bmRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJib3JkZXJsZXNzQnV0dG9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkJ1dHRvbi5Cb3JkZXJsZXNzPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJob21lQXNVcEluZGljYXRvciI+QGFuZHJvaWQ6ZHJhd2FibGUvaWNfYWJfYmFja19ob2xvX2Rhcms8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBMaXN0IGF0dHJpYnV0ZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RQcmVmZXJyZWRJdGVtSGVpZ2h0Ij42NGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1IZWlnaHRTbWFsbCI+NDhkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RQcmVmZXJyZWRJdGVtSGVpZ2h0TGFyZ2UiPjgwZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJkcm9wZG93bkxpc3RQcmVmZXJyZWRJdGVtSGVpZ2h0Ij4/YW5kcm9pZDphdHRyL2xpc3RQcmVmZXJyZWRJdGVtSGVpZ2h0U21hbGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlTGlzdEl0ZW1TbWFsbCI+P2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZU1lZGl1bTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nTGVmdCI+OGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nUmlnaHQiPjhkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RQcmVmZXJyZWRJdGVtUGFkZGluZ1N0YXJ0Ij44ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0UHJlZmVycmVkSXRlbVBhZGRpbmdFbmQiPjhkaXA8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBAaGlkZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic2VhcmNoUmVzdWx0TGlzdEl0ZW1IZWlnaHQiPjU4ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0RGl2aWRlciI+QGRyYXdhYmxlL2xpc3RfZGl2aWRlcl9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RTZXBhcmF0b3JUZXh0Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5UZXh0Vmlldy5MaXN0U2VwYXJhdG9yPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RDaG9pY2VJbmRpY2F0b3JTaW5nbGUiPkBhbmRyb2lkOmRyYXdhYmxlL2J0bl9yYWRpb19ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RDaG9pY2VJbmRpY2F0b3JNdWx0aXBsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvYnRuX2NoZWNrX2hvbG9fZGFyazwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJsaXN0Q2hvaWNlQmFja2dyb3VuZEluZGljYXRvciI+QGFuZHJvaWQ6ZHJhd2FibGUvbGlzdF9zZWxlY3Rvcl9ob2xvX2Rhcms8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aXZhdGVkQmFja2dyb3VuZEluZGljYXRvciI+QGFuZHJvaWQ6ZHJhd2FibGUvYWN0aXZhdGVkX2JhY2tncm91bmRfaG9sb19kYXJrPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3REaXZpZGVyQWxlcnREaWFsb2ciPkBhbmRyb2lkOmRyYXdhYmxlL2xpc3RfZGl2aWRlcl9ob2xvX2Rhcms8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iZXhwYW5kYWJsZUxpc3RQcmVmZXJyZWRJdGVtUGFkZGluZ0xlZnQiPjQwZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJleHBhbmRhYmxlTGlzdFByZWZlcnJlZENoaWxkUGFkZGluZ0xlZnQiPj9hbmRyb2lkOmF0dHIvZXhwYW5kYWJsZUxpc3RQcmVmZXJyZWRJdGVtUGFkZGluZ0xlZnQ8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iZXhwYW5kYWJsZUxpc3RQcmVmZXJyZWRJdGVtSW5kaWNhdG9yTGVmdCI+M2RpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZXhwYW5kYWJsZUxpc3RQcmVmZXJyZWRJdGVtSW5kaWNhdG9yUmlnaHQiPjBkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImV4cGFuZGFibGVMaXN0UHJlZmVycmVkQ2hpbGRJbmRpY2F0b3JMZWZ0Ij4/YW5kcm9pZDphdHRyL2V4cGFuZGFibGVMaXN0UHJlZmVycmVkSXRlbUluZGljYXRvckxlZnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImV4cGFuZGFibGVMaXN0UHJlZmVycmVkQ2hpbGRJbmRpY2F0b3JSaWdodCI+P2FuZHJvaWQ6YXR0ci9leHBhbmRhYmxlTGlzdFByZWZlcnJlZEl0ZW1JbmRpY2F0b3JSaWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZmluZE9uUGFnZU5leHREcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvaWNfZmluZF9uZXh0X2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZmluZE9uUGFnZVByZXZpb3VzRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX2ZpbmRfcHJldmlvdXNfaG9sb19kYXJrPC9pdGVtPgorCisgICAgICAgIDwhLS0gR2FsbGVyeSBhdHRyaWJ1dGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJnYWxsZXJ5SXRlbUJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2dhbGxlcnlfaXRlbV9iYWNrZ3JvdW5kPC9pdGVtPgorCisgICAgICAgIDwhLS0gV2luZG93IGF0dHJpYnV0ZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0ZyYW1lIj5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Tm9UaXRsZSI+ZmFsc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0Z1bGxzY3JlZW4iPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dPdmVyc2NhbiI+ZmFsc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0lzRmxvYXRpbmciPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dDb250ZW50T3ZlcmxheSI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd1Nob3dXYWxscGFwZXIiPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dUaXRsZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaW5kb3dUaXRsZS5RdWFudHVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dUaXRsZVNpemUiPjI1ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dUaXRsZUJhY2tncm91bmRTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2luZG93VGl0bGVCYWNrZ3JvdW5kLlF1YW50dW08L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0NvbnRlbnRUcmFuc2l0aW9ucyI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93QW5pbWF0aW9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL0FuaW1hdGlvbi5RdWFudHVtLkFjdGl2aXR5PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dTb2Z0SW5wdXRNb2RlIj5zdGF0ZVVuc3BlY2lmaWVkfGFkanVzdFVuc3BlY2lmaWVkPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dBY3Rpb25CYXIiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0FjdGlvbk1vZGVPdmVybGF5Ij5mYWxzZTwvaXRlbT4KKworICAgICAgICA8IS0tIERpYWxvZyBhdHRyaWJ1dGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJkaWFsb2dUaGVtZSI+QGFuZHJvaWQ6c3R5bGUvVGhlbWUuUXVhbnR1bS5EaWFsb2c8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRpYWxvZ1RpdGxlSWNvbnNEZWNvckxheW91dCI+QGxheW91dC9kaWFsb2dfdGl0bGVfaWNvbnNfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZGlhbG9nQ3VzdG9tVGl0bGVEZWNvckxheW91dCI+QGxheW91dC9kaWFsb2dfY3VzdG9tX3RpdGxlX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRpYWxvZ1RpdGxlRGVjb3JMYXlvdXQiPkBsYXlvdXQvZGlhbG9nX3RpdGxlX2hvbG88L2l0ZW0+CisKKyAgICAgICAgPCEtLSBBbGVydERpYWxvZyBhdHRyaWJ1dGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJhbGVydERpYWxvZ1RoZW1lIj5AYW5kcm9pZDpzdHlsZS9UaGVtZS5RdWFudHVtLkRpYWxvZy5BbGVydDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWxlcnREaWFsb2dTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvQWxlcnREaWFsb2cuUXVhbnR1bTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWxlcnREaWFsb2dDZW50ZXJCdXR0b25zIj5mYWxzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWxlcnREaWFsb2dJY29uIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19kaWFsb2dfYWxlcnRfaG9sb19kYXJrPC9pdGVtPgorCisgICAgICAgIDwhLS0gUHJlc2VudGF0aW9uIGF0dHJpYnV0ZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InByZXNlbnRhdGlvblRoZW1lIj5AYW5kcm9pZDpzdHlsZS9UaGVtZS5RdWFudHVtLkRpYWxvZy5QcmVzZW50YXRpb248L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUb2FzdCBhdHRyaWJ1dGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0b2FzdEZyYW1lQmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvdG9hc3RfZnJhbWU8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBQYW5lbCBhdHRyaWJ1dGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJwYW5lbEJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL21lbnVfaGFyZGtleV9wYW5lbF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InBhbmVsRnVsbEJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL21lbnVfYmFja2dyb3VuZF9maWxsX3BhcmVudF93aWR0aDwvaXRlbT4KKyAgICAgICAgPCEtLSBUaGVzZSB0aHJlZSBhdHRyaWJ1dGVzIGRvIG5vdCBzZWVtcyB0byBiZSB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsuIERlY2xhcmVkIHB1YmxpYyB0aG91Z2ggLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InBhbmVsQ29sb3JCYWNrZ3JvdW5kIj4jMDAwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwYW5lbENvbG9yRm9yZWdyb3VuZCI+P2FuZHJvaWQ6YXR0ci90ZXh0Q29sb3JQcmltYXJ5PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwYW5lbFRleHRBcHBlYXJhbmNlIj4/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9InBhbmVsTWVudUlzQ29tcGFjdCI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icGFuZWxNZW51TGlzdFdpZHRoIj4yNTBkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InBhbmVsTWVudUxpc3RUaGVtZSI+QGFuZHJvaWQ6c3R5bGUvVGhlbWUuUXVhbnR1bS5Db21wYWN0TWVudTwvaXRlbT4KKworICAgICAgICA8IS0tIFNjcm9sbGJhciBhdHRyaWJ1dGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJzY3JvbGxiYXJGYWRlRHVyYXRpb24iPjI1MDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic2Nyb2xsYmFyRGVmYXVsdERlbGF5QmVmb3JlRmFkZSI+MzAwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJzY3JvbGxiYXJTaXplIj4xMGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic2Nyb2xsYmFyVGh1bWJIb3Jpem9udGFsIj5AYW5kcm9pZDpkcmF3YWJsZS9zY3JvbGxiYXJfaGFuZGxlX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic2Nyb2xsYmFyVGh1bWJWZXJ0aWNhbCI+QGFuZHJvaWQ6ZHJhd2FibGUvc2Nyb2xsYmFyX2hhbmRsZV9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNjcm9sbGJhclRyYWNrSG9yaXpvbnRhbCI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNjcm9sbGJhclRyYWNrVmVydGljYWwiPkBudWxsPC9pdGVtPgorCisgICAgICAgIDwhLS0gVGV4dCBzZWxlY3Rpb24gaGFuZGxlIGF0dHJpYnV0ZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRTZWxlY3RIYW5kbGVMZWZ0Ij5AYW5kcm9pZDpkcmF3YWJsZS90ZXh0X3NlbGVjdF9oYW5kbGVfbGVmdDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dFNlbGVjdEhhbmRsZVJpZ2h0Ij5AYW5kcm9pZDpkcmF3YWJsZS90ZXh0X3NlbGVjdF9oYW5kbGVfcmlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRTZWxlY3RIYW5kbGUiPkBhbmRyb2lkOmRyYXdhYmxlL3RleHRfc2VsZWN0X2hhbmRsZV9taWRkbGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRTZWxlY3RIYW5kbGVXaW5kb3dTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uVGV4dFNlbGVjdEhhbmRsZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dFN1Z2dlc3Rpb25zV2luZG93U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlRleHRTdWdnZXN0aW9uc1BvcHVwV2luZG93PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q3Vyc29yRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL3RleHRfY3Vyc29yX2hvbG9fZGFyazwvaXRlbT4KKworICAgICAgICA8IS0tIFdpZGdldCBzdHlsZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFic0xpc3RWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkFic0xpc3RWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhdXRvQ29tcGxldGVUZXh0Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5BdXRvQ29tcGxldGVUZXh0VmlldzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY2hlY2tib3hTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uQ29tcG91bmRCdXR0b24uQ2hlY2tCb3g8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImNoZWNrZWRUZXh0Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5DaGVja2VkVGV4dFZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRyb3BEb3duTGlzdFZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlzdFZpZXcuRHJvcERvd248L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImVkaXRUZXh0U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkVkaXRUZXh0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJleHBhbmRhYmxlTGlzdFZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uRXhwYW5kYWJsZUxpc3RWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJleHBhbmRhYmxlTGlzdFZpZXdXaGl0ZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5FeHBhbmRhYmxlTGlzdFZpZXcuV2hpdGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImZhc3RTY3JvbGxTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uRmFzdFNjcm9sbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZ2FsbGVyeVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5HYWxsZXJ5PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJnZXN0dXJlT3ZlcmxheVZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uR2VzdHVyZU92ZXJsYXlWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJncmlkVmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5HcmlkVmlldzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iaW1hZ2VCdXR0b25TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uSW1hZ2VCdXR0b248L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImltYWdlV2VsbFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5JbWFnZVdlbGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpc3RWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0Vmlld1doaXRlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpc3RWaWV3LldoaXRlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwb3B1cFdpbmRvd1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5Qb3B1cFdpbmRvdzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icHJvZ3Jlc3NCYXJTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUHJvZ3Jlc3NCYXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InByb2dyZXNzQmFyU3R5bGVIb3Jpem9udGFsIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5Ib3Jpem9udGFsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcm9ncmVzc0JhclN0eWxlU21hbGwiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlByb2dyZXNzQmFyLlNtYWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcm9ncmVzc0JhclN0eWxlU21hbGxUaXRsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUHJvZ3Jlc3NCYXIuU21hbGwuVGl0bGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InByb2dyZXNzQmFyU3R5bGVMYXJnZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUHJvZ3Jlc3NCYXIuTGFyZ2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InByb2dyZXNzQmFyU3R5bGVJbnZlcnNlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5JbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcm9ncmVzc0JhclN0eWxlU21hbGxJbnZlcnNlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5TbWFsbC5JbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcm9ncmVzc0JhclN0eWxlTGFyZ2VJbnZlcnNlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5Qcm9ncmVzc0Jhci5MYXJnZS5JbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJzZWVrQmFyU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlNlZWtCYXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InJhdGluZ0JhclN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5SYXRpbmdCYXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InJhdGluZ0JhclN0eWxlSW5kaWNhdG9yIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5SYXRpbmdCYXIuSW5kaWNhdG9yPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJyYXRpbmdCYXJTdHlsZVNtYWxsIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5SYXRpbmdCYXIuU21hbGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InJhZGlvQnV0dG9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkNvbXBvdW5kQnV0dG9uLlJhZGlvQnV0dG9uPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJzY3JvbGxWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlNjcm9sbFZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imhvcml6b250YWxTY3JvbGxWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkhvcml6b250YWxTY3JvbGxWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJzcGlubmVyU3R5bGUiPj9hbmRyb2lkOmF0dHIvZHJvcERvd25TcGlubmVyU3R5bGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRyb3BEb3duU3Bpbm5lclN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5TcGlubmVyLkRyb3BEb3duPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJzdGFyU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkNvbXBvdW5kQnV0dG9uLlN0YXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRhYldpZGdldFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5UYWJXaWRnZXQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlRleHRWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJlcnJvck1lc3NhZ2VCYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9wb3B1cF9pbmxpbmVfZXJyb3JfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJlcnJvck1lc3NhZ2VBYm92ZUJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL3BvcHVwX2lubGluZV9lcnJvcl9hYm92ZV9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndlYlRleHRWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLldlYlRleHRWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3ZWJWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLldlYlZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRyb3BEb3duSXRlbVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5Ecm9wRG93bkl0ZW08L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNwaW5uZXJEcm9wRG93bkl0ZW1TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uRHJvcERvd25JdGVtLlNwaW5uZXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNwaW5uZXJJdGVtU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlRleHRWaWV3LlNwaW5uZXJJdGVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJkcm9wRG93bkhpbnRBcHBlYXJhbmNlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5Ecm9wRG93bkhpbnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImtleWJvYXJkVmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5LZXlib2FyZFZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InF1aWNrQ29udGFjdEJhZGdlU3R5bGVXaW5kb3dTbWFsbCI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUXVpY2tDb250YWN0QmFkZ2UuV2luZG93U21hbGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InF1aWNrQ29udGFjdEJhZGdlU3R5bGVXaW5kb3dNZWRpdW0iPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlF1aWNrQ29udGFjdEJhZGdlLldpbmRvd01lZGl1bTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icXVpY2tDb250YWN0QmFkZ2VTdHlsZVdpbmRvd0xhcmdlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5RdWlja0NvbnRhY3RCYWRnZS5XaW5kb3dMYXJnZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icXVpY2tDb250YWN0QmFkZ2VTdHlsZVNtYWxsV2luZG93U21hbGwiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlF1aWNrQ29udGFjdEJhZGdlU21hbGwuV2luZG93U21hbGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InF1aWNrQ29udGFjdEJhZGdlU3R5bGVTbWFsbFdpbmRvd01lZGl1bSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUXVpY2tDb250YWN0QmFkZ2VTbWFsbC5XaW5kb3dNZWRpdW08L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InF1aWNrQ29udGFjdEJhZGdlU3R5bGVTbWFsbFdpbmRvd0xhcmdlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5RdWlja0NvbnRhY3RCYWRnZVNtYWxsLldpbmRvd0xhcmdlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0UG9wdXBXaW5kb3dTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlzdFBvcHVwV2luZG93PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwb3B1cE1lbnVTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUG9wdXBNZW51PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJzdGFja1ZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uU3RhY2tWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpdml0eUNob29zZXJWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkFjdGl2aXR5Q2hvb3NlclZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImZyYWdtZW50QnJlYWRDcnVtYnNTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uRnJhZ21lbnRCcmVhZENydW1iczwvaXRlbT4KKworICAgICAgICA8IS0tIFByZWZlcmVuY2Ugc3R5bGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlU2NyZWVuU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1ByZWZlcmVuY2UuUXVhbnR1bS5QcmVmZXJlbmNlU2NyZWVuPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlRnJhZ21lbnRTdHlsZSI+QHN0eWxlL1ByZWZlcmVuY2VGcmFnbWVudC5RdWFudHVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlQ2F0ZWdvcnlTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvUHJlZmVyZW5jZS5RdWFudHVtLkNhdGVnb3J5PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1ByZWZlcmVuY2UuUXVhbnR1bTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icHJlZmVyZW5jZUluZm9ybWF0aW9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1ByZWZlcmVuY2UuUXVhbnR1bS5JbmZvcm1hdGlvbjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY2hlY2tCb3hQcmVmZXJlbmNlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1ByZWZlcmVuY2UuUXVhbnR1bS5DaGVja0JveFByZWZlcmVuY2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InN3aXRjaFByZWZlcmVuY2VTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvUHJlZmVyZW5jZS5RdWFudHVtLlN3aXRjaFByZWZlcmVuY2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Inllc05vUHJlZmVyZW5jZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9QcmVmZXJlbmNlLlF1YW50dW0uRGlhbG9nUHJlZmVyZW5jZS5ZZXNOb1ByZWZlcmVuY2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRpYWxvZ1ByZWZlcmVuY2VTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvUHJlZmVyZW5jZS5RdWFudHVtLkRpYWxvZ1ByZWZlcmVuY2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImVkaXRUZXh0UHJlZmVyZW5jZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9QcmVmZXJlbmNlLlF1YW50dW0uRGlhbG9nUHJlZmVyZW5jZS5FZGl0VGV4dFByZWZlcmVuY2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InJpbmd0b25lUHJlZmVyZW5jZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9QcmVmZXJlbmNlLlF1YW50dW0uUmluZ3RvbmVQcmVmZXJlbmNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlTGF5b3V0Q2hpbGQiPkBhbmRyb2lkOmxheW91dC9wcmVmZXJlbmNlX2NoaWxkX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRldGFpbHNFbGVtZW50QmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvcGFuZWxfYmdfaG9sb19kYXJrPC9pdGVtPgorCisgICAgICAgIDwhLS0gU2VhcmNoIHdpZGdldCBzdHlsZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InNlYXJjaFdpZGdldENvcnB1c0l0ZW1CYWNrZ3JvdW5kIj5AYW5kcm9pZDpjb2xvci9zZWFyY2hfd2lkZ2V0X2NvcnB1c19pdGVtX2JhY2tncm91bmQ8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBBY3Rpb24gYmFyIHN0eWxlcyAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uRHJvcERvd25TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uU3Bpbm5lci5Ecm9wRG93bi5BY3Rpb25CYXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbkJ1dHRvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5BY3Rpb25CdXR0b248L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk92ZXJmbG93QnV0dG9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkFjdGlvbkJ1dHRvbi5PdmVyZmxvdzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZUJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2NhYl9iYWNrZ3JvdW5kX3RvcF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVTcGxpdEJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2NhYl9iYWNrZ3JvdW5kX2JvdHRvbV9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVDbG9zZURyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19jYWJfZG9uZV9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbkJhclRhYlN0eWxlIj5Ac3R5bGUvV2lkZ2V0LlF1YW50dW0uQWN0aW9uQmFyLlRhYlZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbkJhclRhYkJhclN0eWxlIj5Ac3R5bGUvV2lkZ2V0LlF1YW50dW0uQWN0aW9uQmFyLlRhYkJhcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uQmFyVGFiVGV4dFN0eWxlIj5Ac3R5bGUvV2lkZ2V0LlF1YW50dW0uQWN0aW9uQmFyLlRhYlRleHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVTdHlsZSI+QHN0eWxlL1dpZGdldC5RdWFudHVtLkFjdGlvbk1vZGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVDbG9zZUJ1dHRvblN0eWxlIj5Ac3R5bGUvV2lkZ2V0LlF1YW50dW0uQWN0aW9uQnV0dG9uLkNsb3NlTW9kZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uQmFyU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkFjdGlvbkJhcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uQmFyU2l6ZSI+QGRpbWVuL2FjdGlvbl9iYXJfZGVmYXVsdF9oZWlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVQb3B1cFdpbmRvd1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5Qb3B1cFdpbmRvdy5BY3Rpb25Nb2RlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25CYXJXaWRnZXRUaGVtZSI+QG51bGw8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZUN1dERyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19tZW51X2N1dF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVDb3B5RHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfY29weV9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVQYXN0ZURyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19tZW51X3Bhc3RlX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZVNlbGVjdEFsbERyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19tZW51X3NlbGVjdGFsbF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVTaGFyZURyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19tZW51X3NoYXJlX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZUZpbmREcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvaWNfbWVudV9maW5kX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZVdlYlNlYXJjaERyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19tZW51X3NlYXJjaF9ob2xvX2Rhcms8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iZGl2aWRlclZlcnRpY2FsIj4/YW5kcm9pZDphdHRyL2xpc3REaXZpZGVyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJkaXZpZGVySG9yaXpvbnRhbCI+P2FuZHJvaWQ6YXR0ci9saXN0RGl2aWRlcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYnV0dG9uQmFyU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1F1YW50dW0uQnV0dG9uQmFyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJidXR0b25CYXJCdXR0b25TdHlsZSI+P2FuZHJvaWQ6YXR0ci9ib3JkZXJsZXNzQnV0dG9uU3R5bGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNlZ21lbnRlZEJ1dHRvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9RdWFudHVtLlNlZ21lbnRlZEJ1dHRvbjwvaXRlbT4KKworICAgICAgICA8IS0tIFNlYXJjaFZpZXcgYXR0cmlidXRlcyAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic2VhcmNoRHJvcGRvd25CYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9zZWFyY2hfZHJvcGRvd25fZGFyazwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJzZWFyY2hEaWFsb2dUaGVtZSI+QHN0eWxlL1RoZW1lLlF1YW50dW0uU2VhcmNoQmFyPC9pdGVtPgorCisgICAgICAgIDwhLS0gUHJlZmVyZW5jZUZyYW1lTGF5b3V0IGF0dHJpYnV0ZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InByZWZlcmVuY2VGcmFtZUxheW91dFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5QcmVmZXJlbmNlRnJhbWVMYXlvdXQ8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBOdW1iZXJQaWNrZXIgc3R5bGUtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ibnVtYmVyUGlja2VyU3R5bGUiPkBzdHlsZS9XaWRnZXQuUXVhbnR1bS5OdW1iZXJQaWNrZXI8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBDYWxlbmRhclZpZXcgc3R5bGUtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY2FsZW5kYXJWaWV3U3R5bGUiPkBzdHlsZS9XaWRnZXQuUXVhbnR1bS5DYWxlbmRhclZpZXc8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIHN0eWxlIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VyU3R5bGUiPkBzdHlsZS9XaWRnZXQuUXVhbnR1bS5UaW1lUGlja2VyPC9pdGVtPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBiYWNrZ3JvdW5kIGNvbG9yIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VySGVhZGVyQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfYmFja2dyb3VuZF9ob2xvX2Rhcms8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciB0aW1lIGxhYmVsIHRleHQgYXBwZWFyYW5jZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckhlYWRlclRpbWVMYWJlbFRleHRBcHBlYXJhbmNlIj5Ac3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5UaW1lUGlja2VyLlRpbWVMYWJlbDwvaXRlbT4KKworICAgICAgICA8IS0tIFRpbWVQaWNrZXIgSGVhZGVyIGFtIHBtIGxhYmVsIHRleHQgYXBwZWFyYW5jZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckhlYWRlckFtUG1MYWJlbFRleHRBcHBlYXJhbmNlIj5Ac3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5UaW1lUGlja2VyLkFtUG1MYWJlbDwvaXRlbT4KKworICAgICAgICA8IS0tIFRpbWVQaWNrZXIgZGlhbG9nIHRoZW1lIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VyRGlhbG9nVGhlbWUiPkBhbmRyb2lkOnN0eWxlL1RoZW1lLlF1YW50dW0uRGlhbG9nLlRpbWVQaWNrZXI8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBEYXRlUGlja2VyIHN0eWxlIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJkYXRlUGlja2VyU3R5bGUiPkBzdHlsZS9XaWRnZXQuUXVhbnR1bS5EYXRlUGlja2VyPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9ImZhc3RTY3JvbGxUaHVtYkRyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9mYXN0c2Nyb2xsX3RodW1iX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImZhc3RTY3JvbGxQcmV2aWV3QmFja2dyb3VuZExlZnQiPkBhbmRyb2lkOmRyYXdhYmxlL2Zhc3RzY3JvbGxfbGFiZWxfbGVmdF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImZhc3RTY3JvbGxQcmV2aWV3QmFja2dyb3VuZFJpZ2h0Ij5AYW5kcm9pZDpkcmF3YWJsZS9mYXN0c2Nyb2xsX2xhYmVsX3JpZ2h0X2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZmFzdFNjcm9sbFRyYWNrRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2Zhc3RzY3JvbGxfdHJhY2tfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJmYXN0U2Nyb2xsT3ZlcmxheVBvc2l0aW9uIj5hdFRodW1iPC9pdGVtPgorCisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gUXVhbnR1bSBQYXBlciB0aGVtZSAobGlnaHQgdmVyc2lvbikuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLkxpZ2h0IiBwYXJlbnQ9IlRoZW1lLkxpZ2h0Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY29sb3JGb3JlZ3JvdW5kIj5AYW5kcm9pZDpjb2xvci9icmlnaHRfZm9yZWdyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJjb2xvckZvcmVncm91bmRJbnZlcnNlIj5AYW5kcm9pZDpjb2xvci9icmlnaHRfZm9yZWdyb3VuZF9pbnZlcnNlX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImNvbG9yQmFja2dyb3VuZCI+QGFuZHJvaWQ6Y29sb3IvYmFja2dyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJjb2xvckJhY2tncm91bmRDYWNoZUhpbnQiPkBhbmRyb2lkOmRyYXdhYmxlL2JhY2tncm91bmRfY2FjaGVfaGludF9zZWxlY3Rvcl9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJkaXNhYmxlZEFscGhhIj4wLjU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImJhY2tncm91bmREaW1BbW91bnQiPjAuNjwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJjb2xvclByZXNzZWRIaWdobGlnaHQiPkBjb2xvci9ob2xvX2dyYXlfbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImNvbG9yTG9uZ1ByZXNzZWRIaWdobGlnaHQiPkBjb2xvci9ob2xvX2dyYXlfYnJpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJjb2xvckZvY3VzZWRIaWdobGlnaHQiPkBjb2xvci9ob2xvX2JsdWVfZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY29sb3JNdWx0aVNlbGVjdEhpZ2hsaWdodCI+QGNvbG9yL2hvbG9fZ3JlZW5fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImNvbG9yQWN0aXZhdGVkSGlnaGxpZ2h0Ij5AY29sb3IvaG9sb19ibHVlX2Rhcms8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUZXh0IHN0eWxlcyAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2UiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlSW52ZXJzZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5JbnZlcnNlPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvclByaW1hcnkiPkBhbmRyb2lkOmNvbG9yL3ByaW1hcnlfdGV4dF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JTZWNvbmRhcnkiPkBhbmRyb2lkOmNvbG9yL3NlY29uZGFyeV90ZXh0X2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvclRlcnRpYXJ5Ij5AYW5kcm9pZDpjb2xvci90ZXJ0aWFyeV90ZXh0X2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvclByaW1hcnlJbnZlcnNlIj5AYW5kcm9pZDpjb2xvci9wcmltYXJ5X3RleHRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JTZWNvbmRhcnlJbnZlcnNlIj5AYW5kcm9pZDpjb2xvci9zZWNvbmRhcnlfdGV4dF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvclRlcnRpYXJ5SW52ZXJzZSI+QGFuZHJvaWQ6Y29sb3IvdGVydGlhcnlfdGV4dF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvclByaW1hcnlEaXNhYmxlT25seSI+QGFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X2Rpc2FibGVfb25seV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JQcmltYXJ5SW52ZXJzZURpc2FibGVPbmx5Ij5AYW5kcm9pZDpjb2xvci9wcmltYXJ5X3RleHRfZGlzYWJsZV9vbmx5X2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yUHJpbWFyeU5vRGlzYWJsZSI+QGFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X25vZGlzYWJsZV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JTZWNvbmRhcnlOb0Rpc2FibGUiPkBhbmRyb2lkOmNvbG9yL3NlY29uZGFyeV90ZXh0X25vZGlzYWJsZV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JQcmltYXJ5SW52ZXJzZU5vRGlzYWJsZSI+QGFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X25vZGlzYWJsZV9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvclNlY29uZGFyeUludmVyc2VOb0Rpc2FibGUiPkBhbmRyb2lkOmNvbG9yL3NlY29uZGFyeV90ZXh0X25vZGlzYWJsZV9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvckhpbnQiPkBhbmRyb2lkOmNvbG9yL2hpbnRfZm9yZWdyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JIaW50SW52ZXJzZSI+QGFuZHJvaWQ6Y29sb3IvaGludF9mb3JlZ3JvdW5kX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yU2VhcmNoVXJsIj5AYW5kcm9pZDpjb2xvci9zZWFyY2hfdXJsX3RleHRfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9ySGlnaGxpZ2h0Ij5AYW5kcm9pZDpjb2xvci9oaWdobGlnaHRlZF90ZXh0X2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvckhpZ2hsaWdodEludmVyc2UiPkBhbmRyb2lkOmNvbG9yL2hpZ2hsaWdodGVkX3RleHRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q29sb3JMaW5rIj5AYW5kcm9pZDpjb2xvci9ob2xvX2JsdWVfbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvckxpbmtJbnZlcnNlIj5AYW5kcm9pZDpjb2xvci9ob2xvX2JsdWVfbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvckFsZXJ0RGlhbG9nTGlzdEl0ZW0iPkBhbmRyb2lkOmNvbG9yL3ByaW1hcnlfdGV4dF9ob2xvX2xpZ2h0PC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlTGFyZ2UiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuTGFyZ2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlTWVkaXVtIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0Lk1lZGl1bTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VTbWFsbCI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5TbWFsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VMYXJnZUludmVyc2UiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuTGFyZ2UuSW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VNZWRpdW1JbnZlcnNlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0Lk1lZGl1bS5JbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0QXBwZWFyYW5jZVNtYWxsSW52ZXJzZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5TbWFsbC5JbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0QXBwZWFyYW5jZVNlYXJjaFJlc3VsdFRpdGxlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0LlNlYXJjaFJlc3VsdC5UaXRsZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VTZWFyY2hSZXN1bHRTdWJ0aXRsZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5TZWFyY2hSZXN1bHQuU3VidGl0bGU8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VCdXR0b24iPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuV2lkZ2V0LkJ1dHRvbjwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJlZGl0VGV4dENvbG9yIj4/YW5kcm9pZDphdHRyL3RleHRDb2xvclByaW1hcnk8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImVkaXRUZXh0QmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvZWRpdF90ZXh0X2hvbG9fbGlnaHQ8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iY2FuZGlkYXRlc1RleHRTdHlsZVNwYW5zIj5AYW5kcm9pZDpzdHJpbmcvY2FuZGlkYXRlc19zdHlsZTwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q2hlY2tNYXJrIj5AYW5kcm9pZDpkcmF3YWJsZS9pbmRpY2F0b3JfY2hlY2tfbWFya19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENoZWNrTWFya0ludmVyc2UiPkBhbmRyb2lkOmRyYXdhYmxlL2luZGljYXRvcl9jaGVja19tYXJrX2Rhcms8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VMYXJnZVBvcHVwTWVudSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bS5MaWdodC5XaWRnZXQuUG9wdXBNZW51LkxhcmdlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0QXBwZWFyYW5jZVNtYWxsUG9wdXBNZW51Ij5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0LldpZGdldC5Qb3B1cE1lbnUuU21hbGw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBCdXR0b24gc3R5bGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJidXR0b25TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuQnV0dG9uPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9ImJ1dHRvblN0eWxlU21hbGwiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkJ1dHRvbi5TbWFsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYnV0dG9uU3R5bGVJbnNldCI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuQnV0dG9uLkluc2V0PC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9ImJ1dHRvblN0eWxlVG9nZ2xlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5CdXR0b24uVG9nZ2xlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJzd2l0Y2hTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuQ29tcG91bmRCdXR0b24uU3dpdGNoPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlQnV0dG9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0Lk1lZGlhUm91dGVCdXR0b248L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0ic2VsZWN0YWJsZUl0ZW1CYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9pdGVtX2JhY2tncm91bmRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYm9yZGVybGVzc0J1dHRvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5CdXR0b24uQm9yZGVybGVzczwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iaG9tZUFzVXBJbmRpY2F0b3IiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX2FiX2JhY2tfaG9sb19saWdodDwvaXRlbT4KKworICAgICAgICA8IS0tIExpc3QgYXR0cmlidXRlcyAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1IZWlnaHQiPjY0ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0UHJlZmVycmVkSXRlbUhlaWdodFNtYWxsIj40OGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1IZWlnaHRMYXJnZSI+ODBkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRyb3Bkb3duTGlzdFByZWZlcnJlZEl0ZW1IZWlnaHQiPj9hbmRyb2lkOmF0dHIvbGlzdFByZWZlcnJlZEl0ZW1IZWlnaHRTbWFsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VMaXN0SXRlbVNtYWxsIj4/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0UHJlZmVycmVkSXRlbVBhZGRpbmdMZWZ0Ij44ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0UHJlZmVycmVkSXRlbVBhZGRpbmdSaWdodCI+OGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nU3RhcnQiPjhkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RQcmVmZXJyZWRJdGVtUGFkZGluZ0VuZCI+OGRpcDwvaXRlbT4KKworICAgICAgICA8IS0tIEBoaWRlIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJzZWFyY2hSZXN1bHRMaXN0SXRlbUhlaWdodCI+NThkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3REaXZpZGVyIj5AZHJhd2FibGUvbGlzdF9kaXZpZGVyX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RTZXBhcmF0b3JUZXh0Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5UZXh0Vmlldy5MaXN0U2VwYXJhdG9yPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RDaG9pY2VJbmRpY2F0b3JTaW5nbGUiPkBhbmRyb2lkOmRyYXdhYmxlL2J0bl9yYWRpb19ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0Q2hvaWNlSW5kaWNhdG9yTXVsdGlwbGUiPkBhbmRyb2lkOmRyYXdhYmxlL2J0bl9jaGVja19ob2xvX2xpZ2h0PC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RDaG9pY2VCYWNrZ3JvdW5kSW5kaWNhdG9yIj5AYW5kcm9pZDpkcmF3YWJsZS9saXN0X3NlbGVjdG9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aXZhdGVkQmFja2dyb3VuZEluZGljYXRvciI+QGFuZHJvaWQ6ZHJhd2FibGUvYWN0aXZhdGVkX2JhY2tncm91bmRfaG9sb19saWdodDwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJleHBhbmRhYmxlTGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nTGVmdCI+NDBkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImV4cGFuZGFibGVMaXN0UHJlZmVycmVkQ2hpbGRQYWRkaW5nTGVmdCI+P2FuZHJvaWQ6YXR0ci9leHBhbmRhYmxlTGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nTGVmdDwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJleHBhbmRhYmxlTGlzdFByZWZlcnJlZEl0ZW1JbmRpY2F0b3JMZWZ0Ij4zZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJleHBhbmRhYmxlTGlzdFByZWZlcnJlZEl0ZW1JbmRpY2F0b3JSaWdodCI+MGRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZXhwYW5kYWJsZUxpc3RQcmVmZXJyZWRDaGlsZEluZGljYXRvckxlZnQiPj9hbmRyb2lkOmF0dHIvZXhwYW5kYWJsZUxpc3RQcmVmZXJyZWRJdGVtSW5kaWNhdG9yTGVmdDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZXhwYW5kYWJsZUxpc3RQcmVmZXJyZWRDaGlsZEluZGljYXRvclJpZ2h0Ij4/YW5kcm9pZDphdHRyL2V4cGFuZGFibGVMaXN0UHJlZmVycmVkSXRlbUluZGljYXRvclJpZ2h0PC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3REaXZpZGVyQWxlcnREaWFsb2ciPkBhbmRyb2lkOmRyYXdhYmxlL2xpc3RfZGl2aWRlcl9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJmaW5kT25QYWdlTmV4dERyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19maW5kX25leHRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZmluZE9uUGFnZVByZXZpb3VzRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX2ZpbmRfcHJldmlvdXNfaG9sb19saWdodDwvaXRlbT4KKworICAgICAgICA8IS0tIEdhbGxlcnkgYXR0cmlidXRlcyAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZ2FsbGVyeUl0ZW1CYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9nYWxsZXJ5X2l0ZW1fYmFja2dyb3VuZDwvaXRlbT4KKworICAgICAgICA8IS0tIFdpbmRvdyBhdHRyaWJ1dGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dGcmFtZSI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd05vVGl0bGUiPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dGdWxsc2NyZWVuIj5mYWxzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93T3ZlcnNjYW4iPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dJc0Zsb2F0aW5nIj5mYWxzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dDb250ZW50T3ZlcmxheSI+QGFuZHJvaWQ6ZHJhd2FibGUvYWJfc29saWRfc2hhZG93X2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd1Nob3dXYWxscGFwZXIiPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dUaXRsZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaW5kb3dUaXRsZS5RdWFudHVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dUaXRsZVNpemUiPjI1ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dUaXRsZUJhY2tncm91bmRTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2luZG93VGl0bGVCYWNrZ3JvdW5kLlF1YW50dW08L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QW5pbWF0aW9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL0FuaW1hdGlvbi5RdWFudHVtLkFjdGl2aXR5PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd1NvZnRJbnB1dE1vZGUiPnN0YXRlVW5zcGVjaWZpZWR8YWRqdXN0VW5zcGVjaWZpZWQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0FjdGlvbkJhciI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93QWN0aW9uTW9kZU92ZXJsYXkiPmZhbHNlPC9pdGVtPgorCisgICAgICAgIDwhLS0gRGlhbG9nIGF0dHJpYnV0ZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRpYWxvZ1RoZW1lIj5AYW5kcm9pZDpzdHlsZS9UaGVtZS5RdWFudHVtLkxpZ2h0LkRpYWxvZzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZGlhbG9nVGl0bGVJY29uc0RlY29yTGF5b3V0Ij5AbGF5b3V0L2RpYWxvZ190aXRsZV9pY29uc19ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJkaWFsb2dDdXN0b21UaXRsZURlY29yTGF5b3V0Ij5AbGF5b3V0L2RpYWxvZ19jdXN0b21fdGl0bGVfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZGlhbG9nVGl0bGVEZWNvckxheW91dCI+QGxheW91dC9kaWFsb2dfdGl0bGVfaG9sbzwvaXRlbT4KKworICAgICAgICA8IS0tIEFsZXJ0RGlhbG9nIGF0dHJpYnV0ZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFsZXJ0RGlhbG9nVGhlbWUiPkBhbmRyb2lkOnN0eWxlL1RoZW1lLlF1YW50dW0uTGlnaHQuRGlhbG9nLkFsZXJ0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbGVydERpYWxvZ1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9BbGVydERpYWxvZy5RdWFudHVtLkxpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbGVydERpYWxvZ0NlbnRlckJ1dHRvbnMiPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbGVydERpYWxvZ0ljb24iPkBhbmRyb2lkOmRyYXdhYmxlL2ljX2RpYWxvZ19hbGVydF9ob2xvX2xpZ2h0PC9pdGVtPgorCisgICAgICAgIDwhLS0gUHJlc2VudGF0aW9uIGF0dHJpYnV0ZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InByZXNlbnRhdGlvblRoZW1lIj5AYW5kcm9pZDpzdHlsZS9UaGVtZS5RdWFudHVtLkxpZ2h0LkRpYWxvZy5QcmVzZW50YXRpb248L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUb2FzdCBhdHRyaWJ1dGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0b2FzdEZyYW1lQmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvdG9hc3RfZnJhbWU8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBQYW5lbCBhdHRyaWJ1dGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJwYW5lbEJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL21lbnVfaGFyZGtleV9wYW5lbF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwYW5lbEZ1bGxCYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9tZW51X2JhY2tncm91bmRfZmlsbF9wYXJlbnRfd2lkdGg8L2l0ZW0+CisgICAgICAgIDwhLS0gVGhlc2UgdGhyZWUgYXR0cmlidXRlcyBkbyBub3Qgc2VlbXMgdG8gYmUgdXNlZCBieSB0aGUgZnJhbWV3b3JrLiBEZWNsYXJlZCBwdWJsaWMgdGhvdWdoIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJwYW5lbENvbG9yQmFja2dyb3VuZCI+IzAwMDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icGFuZWxDb2xvckZvcmVncm91bmQiPj9hbmRyb2lkOmF0dHIvdGV4dENvbG9yUHJpbWFyeTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icGFuZWxUZXh0QXBwZWFyYW5jZSI+P2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZTwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJwYW5lbE1lbnVJc0NvbXBhY3QiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InBhbmVsTWVudUxpc3RXaWR0aCI+MjUwZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwYW5lbE1lbnVMaXN0VGhlbWUiPkBhbmRyb2lkOnN0eWxlL1RoZW1lLlF1YW50dW0uTGlnaHQuQ29tcGFjdE1lbnU8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBTY3JvbGxiYXIgYXR0cmlidXRlcyAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic2Nyb2xsYmFyRmFkZUR1cmF0aW9uIj4yNTA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNjcm9sbGJhckRlZmF1bHREZWxheUJlZm9yZUZhZGUiPjMwMDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic2Nyb2xsYmFyU2l6ZSI+MTBkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNjcm9sbGJhclRodW1iSG9yaXpvbnRhbCI+QGFuZHJvaWQ6ZHJhd2FibGUvc2Nyb2xsYmFyX2hhbmRsZV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJzY3JvbGxiYXJUaHVtYlZlcnRpY2FsIj5AYW5kcm9pZDpkcmF3YWJsZS9zY3JvbGxiYXJfaGFuZGxlX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNjcm9sbGJhclRyYWNrSG9yaXpvbnRhbCI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNjcm9sbGJhclRyYWNrVmVydGljYWwiPkBudWxsPC9pdGVtPgorCisgICAgICAgIDwhLS0gVGV4dCBzZWxlY3Rpb24gaGFuZGxlIGF0dHJpYnV0ZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRTZWxlY3RIYW5kbGVMZWZ0Ij5AYW5kcm9pZDpkcmF3YWJsZS90ZXh0X3NlbGVjdF9oYW5kbGVfbGVmdDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dFNlbGVjdEhhbmRsZVJpZ2h0Ij5AYW5kcm9pZDpkcmF3YWJsZS90ZXh0X3NlbGVjdF9oYW5kbGVfcmlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRTZWxlY3RIYW5kbGUiPkBhbmRyb2lkOmRyYXdhYmxlL3RleHRfc2VsZWN0X2hhbmRsZV9taWRkbGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRTZWxlY3RIYW5kbGVXaW5kb3dTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uVGV4dFNlbGVjdEhhbmRsZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dFN1Z2dlc3Rpb25zV2luZG93U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LlRleHRTdWdnZXN0aW9uc1BvcHVwV2luZG93PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Q3Vyc29yRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL3RleHRfY3Vyc29yX2hvbG9fbGlnaHQ8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBXaWRnZXQgc3R5bGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJhYnNMaXN0Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5BYnNMaXN0VmlldzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYXV0b0NvbXBsZXRlVGV4dFZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuQXV0b0NvbXBsZXRlVGV4dFZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImNoZWNrYm94U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkNvbXBvdW5kQnV0dG9uLkNoZWNrQm94PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJjaGVja2VkVGV4dFZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuQ2hlY2tlZFRleHRWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJkcm9wRG93bkxpc3RWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpc3RWaWV3LkRyb3BEb3duPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJlZGl0VGV4dFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5FZGl0VGV4dDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZXhwYW5kYWJsZUxpc3RWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkV4cGFuZGFibGVMaXN0VmlldzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZXhwYW5kYWJsZUxpc3RWaWV3V2hpdGVTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuRXhwYW5kYWJsZUxpc3RWaWV3LldoaXRlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJmYXN0U2Nyb2xsU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkZhc3RTY3JvbGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImdhbGxlcnlTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuR2FsbGVyeTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZ2VzdHVyZU92ZXJsYXlWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0Lkdlc3R1cmVPdmVybGF5VmlldzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZ3JpZFZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuR3JpZFZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImltYWdlQnV0dG9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkltYWdlQnV0dG9uPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJpbWFnZVdlbGxTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuSW1hZ2VXZWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5MaXN0VmlldzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ibGlzdFZpZXdXaGl0ZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5MaXN0Vmlldy5XaGl0ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icG9wdXBXaW5kb3dTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuUG9wdXBXaW5kb3c8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InByb2dyZXNzQmFyU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LlByb2dyZXNzQmFyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcm9ncmVzc0JhclN0eWxlSG9yaXpvbnRhbCI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuUHJvZ3Jlc3NCYXIuSG9yaXpvbnRhbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icHJvZ3Jlc3NCYXJTdHlsZVNtYWxsIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5Qcm9ncmVzc0Jhci5TbWFsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icHJvZ3Jlc3NCYXJTdHlsZVNtYWxsVGl0bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LlByb2dyZXNzQmFyLlNtYWxsLlRpdGxlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcm9ncmVzc0JhclN0eWxlTGFyZ2UiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LlByb2dyZXNzQmFyLkxhcmdlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcm9ncmVzc0JhclN0eWxlSW52ZXJzZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuUHJvZ3Jlc3NCYXIuSW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icHJvZ3Jlc3NCYXJTdHlsZVNtYWxsSW52ZXJzZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuUHJvZ3Jlc3NCYXIuU21hbGwuSW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icHJvZ3Jlc3NCYXJTdHlsZUxhcmdlSW52ZXJzZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuUHJvZ3Jlc3NCYXIuTGFyZ2UuSW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic2Vla0JhclN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5TZWVrQmFyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJyYXRpbmdCYXJTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuUmF0aW5nQmFyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJyYXRpbmdCYXJTdHlsZUluZGljYXRvciI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuUmF0aW5nQmFyLkluZGljYXRvcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icmF0aW5nQmFyU3R5bGVTbWFsbCI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuUmF0aW5nQmFyLlNtYWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJyYWRpb0J1dHRvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5Db21wb3VuZEJ1dHRvbi5SYWRpb0J1dHRvbjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic2Nyb2xsVmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5TY3JvbGxWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJob3Jpem9udGFsU2Nyb2xsVmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5Ib3Jpem9udGFsU2Nyb2xsVmlldzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic3Bpbm5lclN0eWxlIj4/YW5kcm9pZDphdHRyL2Ryb3BEb3duU3Bpbm5lclN0eWxlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJkcm9wRG93blNwaW5uZXJTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuU3Bpbm5lci5Ecm9wRG93bjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic3RhclN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5Db21wb3VuZEJ1dHRvbi5TdGFyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0YWJXaWRnZXRTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuVGFiV2lkZ2V0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5UZXh0VmlldzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZXJyb3JNZXNzYWdlQmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvcG9wdXBfaW5saW5lX2Vycm9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImVycm9yTWVzc2FnZUFib3ZlQmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvcG9wdXBfaW5saW5lX2Vycm9yX2Fib3ZlX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndlYlRleHRWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LldlYlRleHRWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3ZWJWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LldlYlZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRyb3BEb3duSXRlbVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5Ecm9wRG93bkl0ZW08L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNwaW5uZXJEcm9wRG93bkl0ZW1TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuRHJvcERvd25JdGVtLlNwaW5uZXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNwaW5uZXJJdGVtU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlRleHRWaWV3LlNwaW5uZXJJdGVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJkcm9wRG93bkhpbnRBcHBlYXJhbmNlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLldpZGdldC5Ecm9wRG93bkhpbnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImtleWJvYXJkVmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5LZXlib2FyZFZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InF1aWNrQ29udGFjdEJhZGdlU3R5bGVXaW5kb3dTbWFsbCI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUXVpY2tDb250YWN0QmFkZ2UuV2luZG93U21hbGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InF1aWNrQ29udGFjdEJhZGdlU3R5bGVXaW5kb3dNZWRpdW0iPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlF1aWNrQ29udGFjdEJhZGdlLldpbmRvd01lZGl1bTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icXVpY2tDb250YWN0QmFkZ2VTdHlsZVdpbmRvd0xhcmdlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5RdWlja0NvbnRhY3RCYWRnZS5XaW5kb3dMYXJnZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icXVpY2tDb250YWN0QmFkZ2VTdHlsZVNtYWxsV2luZG93U21hbGwiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLlF1aWNrQ29udGFjdEJhZGdlU21hbGwuV2luZG93U21hbGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InF1aWNrQ29udGFjdEJhZGdlU3R5bGVTbWFsbFdpbmRvd01lZGl1bSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUXVpY2tDb250YWN0QmFkZ2VTbWFsbC5XaW5kb3dNZWRpdW08L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InF1aWNrQ29udGFjdEJhZGdlU3R5bGVTbWFsbFdpbmRvd0xhcmdlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5RdWlja0NvbnRhY3RCYWRnZVNtYWxsLldpbmRvd0xhcmdlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0UG9wdXBXaW5kb3dTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuTGlzdFBvcHVwV2luZG93PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwb3B1cE1lbnVTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuUG9wdXBNZW51PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJzdGFja1ZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uU3RhY2tWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpdml0eUNob29zZXJWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkFjdGl2aXR5Q2hvb3NlclZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImZyYWdtZW50QnJlYWRDcnVtYnNTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuRnJhZ21lbnRCcmVhZENydW1iczwvaXRlbT4KKworICAgICAgICA8IS0tIFByZWZlcmVuY2Ugc3R5bGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlU2NyZWVuU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1ByZWZlcmVuY2UuUXVhbnR1bS5QcmVmZXJlbmNlU2NyZWVuPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlRnJhZ21lbnRTdHlsZSI+QHN0eWxlL1ByZWZlcmVuY2VGcmFnbWVudC5RdWFudHVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlQ2F0ZWdvcnlTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvUHJlZmVyZW5jZS5RdWFudHVtLkNhdGVnb3J5PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1ByZWZlcmVuY2UuUXVhbnR1bTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0icHJlZmVyZW5jZUluZm9ybWF0aW9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1ByZWZlcmVuY2UuUXVhbnR1bS5JbmZvcm1hdGlvbjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY2hlY2tCb3hQcmVmZXJlbmNlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1ByZWZlcmVuY2UuUXVhbnR1bS5DaGVja0JveFByZWZlcmVuY2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InN3aXRjaFByZWZlcmVuY2VTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvUHJlZmVyZW5jZS5RdWFudHVtLlN3aXRjaFByZWZlcmVuY2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Inllc05vUHJlZmVyZW5jZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9QcmVmZXJlbmNlLlF1YW50dW0uRGlhbG9nUHJlZmVyZW5jZS5ZZXNOb1ByZWZlcmVuY2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRpYWxvZ1ByZWZlcmVuY2VTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvUHJlZmVyZW5jZS5RdWFudHVtLkRpYWxvZ1ByZWZlcmVuY2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImVkaXRUZXh0UHJlZmVyZW5jZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9QcmVmZXJlbmNlLlF1YW50dW0uRGlhbG9nUHJlZmVyZW5jZS5FZGl0VGV4dFByZWZlcmVuY2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InJpbmd0b25lUHJlZmVyZW5jZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9QcmVmZXJlbmNlLlF1YW50dW0uUmluZ3RvbmVQcmVmZXJlbmNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlTGF5b3V0Q2hpbGQiPkBhbmRyb2lkOmxheW91dC9wcmVmZXJlbmNlX2NoaWxkX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImRldGFpbHNFbGVtZW50QmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvcGFuZWxfYmdfaG9sb19saWdodDwvaXRlbT4KKworICAgICAgICA8IS0tIFByZWZlcmVuY2VGcmFtZUxheW91dCBhdHRyaWJ1dGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlRnJhbWVMYXlvdXRTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUHJlZmVyZW5jZUZyYW1lTGF5b3V0PC9pdGVtPgorCisgICAgICAgIDwhLS0gU2VhcmNoIHdpZGdldCBzdHlsZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InNlYXJjaFdpZGdldENvcnB1c0l0ZW1CYWNrZ3JvdW5kIj5AYW5kcm9pZDpjb2xvci9zZWFyY2hfd2lkZ2V0X2NvcnB1c19pdGVtX2JhY2tncm91bmQ8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBBY3Rpb24gYmFyIHN0eWxlcyAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uRHJvcERvd25TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuU3Bpbm5lci5Ecm9wRG93bi5BY3Rpb25CYXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbkJ1dHRvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CdXR0b248L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk92ZXJmbG93QnV0dG9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkFjdGlvbkJ1dHRvbi5PdmVyZmxvdzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZUJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2NhYl9iYWNrZ3JvdW5kX3RvcF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25Nb2RlU3BsaXRCYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9jYWJfYmFja2dyb3VuZF9ib3R0b21faG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZUNsb3NlRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX2NhYl9kb25lX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbkJhclRhYlN0eWxlIj5Ac3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQmFyLlRhYlZpZXc8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbkJhclRhYkJhclN0eWxlIj5Ac3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQmFyLlRhYkJhcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uQmFyVGFiVGV4dFN0eWxlIj5Ac3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQmFyLlRhYlRleHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVTdHlsZSI+QHN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkFjdGlvbk1vZGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVDbG9zZUJ1dHRvblN0eWxlIj5Ac3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQnV0dG9uLkNsb3NlTW9kZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDphY3Rpb25CYXJTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQmFyLlNvbGlkPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25CYXJTaXplIj5AZGltZW4vYWN0aW9uX2Jhcl9kZWZhdWx0X2hlaWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZVBvcHVwV2luZG93U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LlBvcHVwV2luZG93LkFjdGlvbk1vZGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbkJhcldpZGdldFRoZW1lIj5AbnVsbDwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25Nb2RlQ3V0RHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfY3V0X2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVDb3B5RHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfY29weV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25Nb2RlUGFzdGVEcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvaWNfbWVudV9wYXN0ZV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25Nb2RlU2VsZWN0QWxsRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfc2VsZWN0YWxsX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVTaGFyZURyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19tZW51X3NoYXJlX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVGaW5kRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfZmluZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25Nb2RlV2ViU2VhcmNoRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfc2VhcmNoX2hvbG9fbGlnaHQ8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iZGl2aWRlclZlcnRpY2FsIj4/YW5kcm9pZDphdHRyL2xpc3REaXZpZGVyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJkaXZpZGVySG9yaXpvbnRhbCI+P2FuZHJvaWQ6YXR0ci9saXN0RGl2aWRlcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYnV0dG9uQmFyU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1F1YW50dW0uTGlnaHQuQnV0dG9uQmFyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJidXR0b25CYXJCdXR0b25TdHlsZSI+P2FuZHJvaWQ6YXR0ci9ib3JkZXJsZXNzQnV0dG9uU3R5bGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InNlZ21lbnRlZEJ1dHRvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9RdWFudHVtLkxpZ2h0LlNlZ21lbnRlZEJ1dHRvbjwvaXRlbT4KKworICAgICAgICA8IS0tIFNlYXJjaFZpZXcgYXR0cmlidXRlcyAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ic2VhcmNoRHJvcGRvd25CYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9zZWFyY2hfZHJvcGRvd25fbGlnaHQ8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0ic2VhcmNoRGlhbG9nVGhlbWUiPkBzdHlsZS9UaGVtZS5RdWFudHVtLkxpZ2h0LlNlYXJjaEJhcjwvaXRlbT4KKworICAgICAgICA8IS0tIE51bWJlclBpY2tlciBzdHlsZS0tPgorICAgICAgICA8aXRlbSBuYW1lPSJudW1iZXJQaWNrZXJTdHlsZSI+QHN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0Lk51bWJlclBpY2tlcjwvaXRlbT4KKworICAgICAgICA8IS0tIENhbGVuZGFyVmlldyBzdHlsZS0tPgorICAgICAgICA8aXRlbSBuYW1lPSJjYWxlbmRhclZpZXdTdHlsZSI+QHN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkNhbGVuZGFyVmlldzwvaXRlbT4KKworICAgICAgICA8IS0tIFRpbWVQaWNrZXIgc3R5bGUgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJTdHlsZSI+QHN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LlRpbWVQaWNrZXI8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciBiYWNrZ3JvdW5kIGNvbG9yIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VySGVhZGVyQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfYmFja2dyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBIZWFkZXIgdGltZSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJUaW1lTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuVGltZVBpY2tlci5UaW1lTGFiZWw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciBhbSBwbSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJBbVBtTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuVGltZVBpY2tlci5BbVBtTGFiZWw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIGRpYWxvZyB0aGVtZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckRpYWxvZ1RoZW1lIj5AYW5kcm9pZDpzdHlsZS9UaGVtZS5RdWFudHVtLkxpZ2h0LkRpYWxvZy5UaW1lUGlja2VyPC9pdGVtPgorCisgICAgICAgIDwhLS0gRGF0ZVBpY2tlciBzdHlsZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZGF0ZVBpY2tlclN0eWxlIj5Ac3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuRGF0ZVBpY2tlcjwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJmYXN0U2Nyb2xsVGh1bWJEcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvZmFzdHNjcm9sbF90aHVtYl9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJmYXN0U2Nyb2xsUHJldmlld0JhY2tncm91bmRMZWZ0Ij5AYW5kcm9pZDpkcmF3YWJsZS9mYXN0c2Nyb2xsX2xhYmVsX2xlZnRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZmFzdFNjcm9sbFByZXZpZXdCYWNrZ3JvdW5kUmlnaHQiPkBhbmRyb2lkOmRyYXdhYmxlL2Zhc3RzY3JvbGxfbGFiZWxfcmlnaHRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZmFzdFNjcm9sbFRyYWNrRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2Zhc3RzY3JvbGxfdHJhY2tfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZmFzdFNjcm9sbE92ZXJsYXlQb3NpdGlvbiI+YXRUaHVtYjwvaXRlbT4KKworICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFZhcmlhbnQgb2YgdGhlIHF1YW50dW0gKGxpZ2h0KSB0aGVtZSB0aGF0IGhhcyBhIHNvbGlkIChvcGFxdWUpIGFjdGlvbiBiYXIKKyAgICAgICAgIHdpdGggYW4gaW52ZXJzZSBjb2xvciBwcm9maWxlLiBUaGUgZGFyayBhY3Rpb24gYmFyIHNoYXJwbHkgc3RhbmRzIG91dCBhZ2FpbnN0CisgICAgICAgICB0aGUgbGlnaHQgY29udGVudC4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uTGlnaHQuRGFya0FjdGlvbkJhciI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93Q29udGVudE92ZXJsYXkiPkBhbmRyb2lkOmRyYXdhYmxlL2FiX3NvbGlkX3NoYWRvd19ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFjdGlvbkJhclN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuU29saWQuSW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uQmFyV2lkZ2V0VGhlbWUiPkBhbmRyb2lkOnN0eWxlL1RoZW1lLlF1YW50dW08L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uRHJvcERvd25TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uU3Bpbm5lci5Ecm9wRG93bi5BY3Rpb25CYXI8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbkJ1dHRvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5BY3Rpb25CdXR0b248L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk92ZXJmbG93QnV0dG9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkFjdGlvbkJ1dHRvbi5PdmVyZmxvdzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZUJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2NhYl9iYWNrZ3JvdW5kX3RvcF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVTcGxpdEJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2NhYl9iYWNrZ3JvdW5kX2JvdHRvbV9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVDbG9zZURyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19jYWJfZG9uZV9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImhvbWVBc1VwSW5kaWNhdG9yIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19hYl9iYWNrX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uQmFyVGFiU3R5bGUiPkBzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5BY3Rpb25CYXIuVGFiVmlldy5JbnZlcnNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25CYXJUYWJCYXJTdHlsZSI+QHN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkFjdGlvbkJhci5UYWJCYXIuSW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uQmFyVGFiVGV4dFN0eWxlIj5Ac3R5bGUvV2lkZ2V0LlF1YW50dW0uTGlnaHQuQWN0aW9uQmFyLlRhYlRleHQuSW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uQmFyRGl2aWRlciI+QGFuZHJvaWQ6ZHJhd2FibGUvbGlzdF9kaXZpZGVyX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uQmFySXRlbUJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2l0ZW1fYmFja2dyb3VuZF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1lbnVUZXh0Q29sb3IiPj9hbmRyb2lkOmF0dHIvdGV4dENvbG9yUHJpbWFyeUludmVyc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVTdHlsZSI+QHN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkFjdGlvbk1vZGUuSW52ZXJzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZUNsb3NlQnV0dG9uU3R5bGUiPkBzdHlsZS9XaWRnZXQuUXVhbnR1bS5BY3Rpb25CdXR0b24uQ2xvc2VNb2RlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25Nb2RlUG9wdXBXaW5kb3dTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlF1YW50dW0uUG9wdXBXaW5kb3cuQWN0aW9uTW9kZTwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25Nb2RlQ3V0RHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfY3V0X2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZUNvcHlEcmF3YWJsZSI+QGFuZHJvaWQ6ZHJhd2FibGUvaWNfbWVudV9jb3B5X2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZVBhc3RlRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfcGFzdGVfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25Nb2RlU2VsZWN0QWxsRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfc2VsZWN0YWxsX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZVNoYXJlRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfc2hhcmVfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25Nb2RlRmluZERyYXdhYmxlIj5AYW5kcm9pZDpkcmF3YWJsZS9pY19tZW51X2ZpbmRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25Nb2RlV2ViU2VhcmNoRHJhd2FibGUiPkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfc2VhcmNoX2hvbG9fZGFyazwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBWYXJpYW50IG9mIHRoZSBxdWFudHVtIChkYXJrKSB0aGVtZSB3aXRoIG5vIGFjdGlvbiBiYXIuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLk5vQWN0aW9uQmFyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dBY3Rpb25CYXIiPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd05vVGl0bGUiPnRydWU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gVmFyaWFudCBvZiB0aGUgcXVhbnR1bSAoZGFyaykgdGhlbWUgdGhhdCBoYXMgbm8gdGl0bGUgYmFyIGFuZCBmaWxscworICAgICAgICAgdGhlIGVudGlyZSBzY3JlZW4uICBUaGlzIHRoZW1lCisgICAgICAgICBzZXRzIHtAbGluayBhbmRyb2lkLlIuYXR0ciN3aW5kb3dGdWxsc2NyZWVufSB0byB0cnVlLiAgLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uTm9BY3Rpb25CYXIuRnVsbHNjcmVlbiI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93RnVsbHNjcmVlbiI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dDb250ZW50T3ZlcmxheSI+QG51bGw8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gVmFyaWFudCBvZiB0aGUgcXVhbnR1bSAoZGFyaykgdGhlbWUgdGhhdCBoYXMgbm8gdGl0bGUgYmFyIGFuZCBmaWxscworICAgICAgICAgdGhlIGVudGlyZSBzY3JlZW4gYW5kIGV4dGVuZHMgaW50byB0aGUgZGlzcGxheSBvdmVyc2NhbiByZWdpb24uICBUaGlzIHRoZW1lCisgICAgICAgICBzZXRzIHtAbGluayBhbmRyb2lkLlIuYXR0ciN3aW5kb3dGdWxsc2NyZWVufSBhbmQge0BsaW5rIGFuZHJvaWQuUi5hdHRyI3dpbmRvd092ZXJzY2FufQorICAgICAgICAgdG8gdHJ1ZS4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uTm9BY3Rpb25CYXIuT3ZlcnNjYW4iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0Z1bGxzY3JlZW4iPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93T3ZlcnNjYW4iPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93Q29udGVudE92ZXJsYXkiPkBudWxsPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFZhcmlhbnQgb2YgdGhlIHF1YW50dW0gKGRhcmspIHRoZW1lIHRoYXQgaGFzIG5vIHRpdGxlIGJhciBhbmQgdHJhbnNsdWNlbnQKKyAgICAgICAgIHN5c3RlbSBkZWNvci4gIFRoaXMgdGhlbWUgc2V0cyB7QGxpbmsgYW5kcm9pZC5SLmF0dHIjd2luZG93VHJhbnNsdWNlbnRTdGF0dXN9IGFuZAorICAgICAgICAge0BsaW5rIGFuZHJvaWQuUi5hdHRyI3dpbmRvd1RyYW5zbHVjZW50TmF2aWdhdGlvbn0gdG8gdHJ1ZS4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uTm9BY3Rpb25CYXIuVHJhbnNsdWNlbnREZWNvciI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93VHJhbnNsdWNlbnRTdGF0dXMiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93VHJhbnNsdWNlbnROYXZpZ2F0aW9uIj50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0NvbnRlbnRPdmVybGF5Ij5AbnVsbDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBWYXJpYW50IG9mIHRoZSBxdWFudHVtIChsaWdodCkgdGhlbWUgd2l0aCBubyBhY3Rpb24gYmFyLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5Ob0FjdGlvbkJhciI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QWN0aW9uQmFyIj5mYWxzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dOb1RpdGxlIj50cnVlPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFZhcmlhbnQgb2YgdGhlIHF1YW50dW0gKGxpZ2h0KSB0aGVtZSB0aGF0IGhhcyBubyB0aXRsZSBiYXIgYW5kIGZpbGxzCisgICAgICAgICB0aGUgZW50aXJlIHNjcmVlbi4gIFRoaXMgdGhlbWUKKyAgICAgICAgIHNldHMge0BsaW5rIGFuZHJvaWQuUi5hdHRyI3dpbmRvd0Z1bGxzY3JlZW59IHRvIHRydWUuICAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5Ob0FjdGlvbkJhci5GdWxsc2NyZWVuIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dGdWxsc2NyZWVuIj50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0NvbnRlbnRPdmVybGF5Ij5AbnVsbDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBWYXJpYW50IG9mIHRoZSBxdWFudHVtIChsaWdodCkgdGhlbWUgdGhhdCBoYXMgbm8gdGl0bGUgYmFyIGFuZCBmaWxscworICAgICAgICAgdGhlIGVudGlyZSBzY3JlZW4gYW5kIGV4dGVuZHMgaW50byB0aGUgZGlzcGxheSBvdmVyc2NhbiByZWdpb24uICBUaGlzIHRoZW1lCisgICAgICAgICBzZXRzIHtAbGluayBhbmRyb2lkLlIuYXR0ciN3aW5kb3dGdWxsc2NyZWVufSBhbmQge0BsaW5rIGFuZHJvaWQuUi5hdHRyI3dpbmRvd092ZXJzY2FufQorICAgICAgICAgdG8gdHJ1ZS4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uTGlnaHQuTm9BY3Rpb25CYXIuT3ZlcnNjYW4iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0Z1bGxzY3JlZW4iPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93T3ZlcnNjYW4iPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93Q29udGVudE92ZXJsYXkiPkBudWxsPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFZhcmlhbnQgb2YgdGhlIHF1YW50dW0gKGxpZ2h0KSB0aGVtZSB0aGF0IGhhcyBubyB0aXRsZSBiYXIgYW5kIHRyYW5zbHVjZW50CisgICAgICAgICBzeXN0ZW0gZGVjb3IuICBUaGlzIHRoZW1lIHNldHMge0BsaW5rIGFuZHJvaWQuUi5hdHRyI3dpbmRvd1RyYW5zbHVjZW50U3RhdHVzfSBhbmQKKyAgICAgICAgIHtAbGluayBhbmRyb2lkLlIuYXR0ciN3aW5kb3dUcmFuc2x1Y2VudE5hdmlnYXRpb259IHRvIHRydWUuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLkxpZ2h0Lk5vQWN0aW9uQmFyLlRyYW5zbHVjZW50RGVjb3IiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd1RyYW5zbHVjZW50U3RhdHVzIj50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd1RyYW5zbHVjZW50TmF2aWdhdGlvbiI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dDb250ZW50T3ZlcmxheSI+QG51bGw8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gRGVmYXVsdCBxdWFudHVtIGRhcmsgdGhlbWUgZm9yIHBhbmVsIHdpbmRvd3MuICBUaGlzIHJlbW92ZXMgYWxsIGV4dHJhbmVvdXMKKyAgICAgICAgIHdpbmRvdyBkZWNvcmF0aW9ucywgc28geW91IGJhc2ljYWxseSBoYXZlIGFuIGVtcHR5IHJlY3RhbmdsZSBpbiB3aGljaAorICAgICAgICAgdG8gcGxhY2UgeW91ciBjb250ZW50LiAgSXQgbWFrZXMgdGhlIHdpbmRvdyBmbG9hdGluZywgd2l0aCBhIHRyYW5zcGFyZW50CisgICAgICAgICBiYWNrZ3JvdW5kLCBhbmQgdHVybnMgb2ZmIGRpbW1pbmcgYmVoaW5kIHRoZSB3aW5kb3cuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLlBhbmVsIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dCYWNrZ3JvdW5kIj5AYW5kcm9pZDpjb2xvci90cmFuc3BhcmVudDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb2xvckJhY2tncm91bmRDYWNoZUhpbnQiPkBudWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0ZyYW1lIj5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dDb250ZW50T3ZlcmxheSI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QW5pbWF0aW9uU3R5bGUiPkBudWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0lzRmxvYXRpbmciPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZERpbUVuYWJsZWQiPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0lzVHJhbnNsdWNlbnQiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93Tm9UaXRsZSI+dHJ1ZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBEZWZhdWx0IHF1YW50dW0gbGlnaHQgdGhlbWUgZm9yIHBhbmVsIHdpbmRvd3MuICBUaGlzIHJlbW92ZXMgYWxsIGV4dHJhbmVvdXMKKyAgICAgICAgIHdpbmRvdyBkZWNvcmF0aW9ucywgc28geW91IGJhc2ljYWxseSBoYXZlIGFuIGVtcHR5IHJlY3RhbmdsZSBpbiB3aGljaAorICAgICAgICAgdG8gcGxhY2UgeW91ciBjb250ZW50LiAgSXQgbWFrZXMgdGhlIHdpbmRvdyBmbG9hdGluZywgd2l0aCBhIHRyYW5zcGFyZW50CisgICAgICAgICBiYWNrZ3JvdW5kLCBhbmQgdHVybnMgb2ZmIGRpbW1pbmcgYmVoaW5kIHRoZSB3aW5kb3cuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLkxpZ2h0LlBhbmVsIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dCYWNrZ3JvdW5kIj5AYW5kcm9pZDpjb2xvci90cmFuc3BhcmVudDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb2xvckJhY2tncm91bmRDYWNoZUhpbnQiPkBudWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0ZyYW1lIj5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dDb250ZW50T3ZlcmxheSI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QW5pbWF0aW9uU3R5bGUiPkBudWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0lzRmxvYXRpbmciPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZERpbUVuYWJsZWQiPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0lzVHJhbnNsdWNlbnQiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93Tm9UaXRsZSI+dHJ1ZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBEZWZhdWx0IHRoZW1lIGZvciBxdWFudHVtIHN0eWxlIGlucHV0IG1ldGhvZHMsIHdoaWNoIGlzIHVzZWQgYnkgdGhlCisgICAgICAgICB7QGxpbmsgYW5kcm9pZC5pbnB1dG1ldGhvZHNlcnZpY2UuSW5wdXRNZXRob2RTZXJ2aWNlfSBjbGFzcy4KKyAgICAgICAgIHRoaXMgaW5oZXJpdHMgZnJvbSBUaGVtZS5QYW5lbCwgYnV0IHNldHMgdXAgSU1FIGFwcHJvcHJpYXRlIGFuaW1hdGlvbnMKKyAgICAgICAgIGFuZCBhIGZldyBjdXN0b20gYXR0cmlidXRlcy4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uSW5wdXRNZXRob2QiIHBhcmVudD0iVGhlbWUuUXVhbnR1bS5MaWdodC5QYW5lbCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QW5pbWF0aW9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL0FuaW1hdGlvbi5JbnB1dE1ldGhvZDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbWVGdWxsc2NyZWVuQmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvc2NyZWVuX2JhY2tncm91bmRfc2VsZWN0b3JfbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aW1lRXh0cmFjdEVudGVyQW5pbWF0aW9uIj5AYW5kcm9pZDphbmltL2lucHV0X21ldGhvZF9leHRyYWN0X2VudGVyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmltZUV4dHJhY3RFeGl0QW5pbWF0aW9uIj5AYW5kcm9pZDphbmltL2lucHV0X21ldGhvZF9leHRyYWN0X2V4aXQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gVGhlbWUgZm9yIHRoZSBzZWFyY2ggaW5wdXQgYmFyLiAtLT4KKworICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLlNlYXJjaEJhciIgcGFyZW50PSJUaGVtZS5RdWFudHVtLlBhbmVsIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZUJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2NhYl9iYWNrZ3JvdW5kX3RvcF9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVTcGxpdEJhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2NhYl9iYWNrZ3JvdW5kX2JvdHRvbV9ob2xvX2xpZ2h0PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5TZWFyY2hCYXIiIHBhcmVudD0iVGhlbWUuUXVhbnR1bS5MaWdodC5QYW5lbCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbk1vZGVCYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9jYWJfYmFja2dyb3VuZF90b3BfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uTW9kZVNwbGl0QmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvY2FiX2JhY2tncm91bmRfYm90dG9tX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gTWVudSBUaGVtZXMgLS0+CisgICAgPGVhdC1jb21tZW50IC8+CisKKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5Db21wYWN0TWVudSI+CisgICAgICAgIDwhLS0gTWVudS9pdGVtIGF0dHJpYnV0ZXMgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aXRlbVRleHRBcHBlYXJhbmNlIj4/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxpc3RWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpc3RWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0FuaW1hdGlvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9BbmltYXRpb24uRHJvcERvd25VcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kIj5AbnVsbDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uTGlnaHQuQ29tcGFjdE1lbnUiPgorICAgICAgICA8IS0tIE1lbnUvaXRlbSBhdHRyaWJ1dGVzIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOml0ZW1UZXh0QXBwZWFyYW5jZSI+P2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZU1lZGl1bTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsaXN0Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5MaWdodC5MaXN0VmlldzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dBbmltYXRpb25TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvQW5pbWF0aW9uLkRyb3BEb3duVXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QG51bGw8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gRGlhbG9nIHRoZW1lcyBmb3IgUXVhbnR1bSAtLT4KKyAgICA8ZWF0LWNvbW1lbnQgLz4KKworICAgIDwhLS0gUXVhbnR1bSB0aGVtZSBmb3IgZGlhbG9nIHdpbmRvd3MgYW5kIGFjdGl2aXRpZXMsIHdoaWNoIGlzIHVzZWQgYnkgdGhlCisgICAgICAgICB7QGxpbmsgYW5kcm9pZC5hcHAuRGlhbG9nfSBjbGFzcy4gIFRoaXMgY2hhbmdlcyB0aGUgd2luZG93IHRvIGJlCisgICAgICAgICBmbG9hdGluZyAobm90IGZpbGwgdGhlIGVudGlyZSBzY3JlZW4pLCBhbmQgcHV0cyBhIGZyYW1lIGFyb3VuZCBpdHMKKyAgICAgICAgIGNvbnRlbnRzLiAgWW91IGNhbiBzZXQgdGhpcyB0aGVtZSBvbiBhbiBhY3Rpdml0eSBpZiB5b3Ugd291bGQgbGlrZSB0bworICAgICAgICAgbWFrZSBhbiBhY3Rpdml0eSB0aGF0IGxvb2tzIGxpa2UgYSBEaWFsb2cuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLkRpYWxvZyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93RnJhbWUiPkBudWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd1RpdGxlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL0RpYWxvZ1dpbmRvd1RpdGxlLlF1YW50dW08L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvZGlhbG9nX2Z1bGxfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0lzRmxvYXRpbmciPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93Q29udGVudE92ZXJsYXkiPkBudWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0FuaW1hdGlvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9BbmltYXRpb24uUXVhbnR1bS5EaWFsb2c8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93U29mdElucHV0TW9kZSI+c3RhdGVVbnNwZWNpZmllZHxhZGp1c3RQYW48L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QWN0aW9uQmFyIj5mYWxzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dBY3Rpb25Nb2RlT3ZlcmxheSI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dDbG9zZU9uVG91Y2hPdXRzaWRlIj5AYm9vbC9jb25maWdfY2xvc2VEaWFsb2dXaGVuVG91Y2hPdXRzaWRlPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29sb3JCYWNrZ3JvdW5kQ2FjaGVIaW50Ij5AbnVsbDwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmJ1dHRvbkJhclN0eWxlIj5AYW5kcm9pZDpzdHlsZS9RdWFudHVtLkJ1dHRvbkJhci5BbGVydERpYWxvZzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYm9yZGVybGVzc0J1dHRvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuUXVhbnR1bS5CdXR0b24uQm9yZGVybGVzcy5TbWFsbDwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0QXBwZWFyYW5jZSI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuUXVhbnR1bTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGV4dEFwcGVhcmFuY2VJbnZlcnNlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLkludmVyc2U8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nTGVmdCI+MTZkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RQcmVmZXJyZWRJdGVtUGFkZGluZ1JpZ2h0Ij4xNmRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nU3RhcnQiPjE2ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0UHJlZmVycmVkSXRlbVBhZGRpbmdFbmQiPjE2ZGlwPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9InByZWZlcmVuY2VQYW5lbFN0eWxlIj5Ac3R5bGUvUHJlZmVyZW5jZVBhbmVsLkRpYWxvZzwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBWYXJpYW50IG9mIFRoZW1lLlF1YW50dW0uRGlhbG9nIHRoYXQgaGFzIGEgbmljZSBtaW5pbXVtIHdpZHRoIGZvcgorICAgICAgICAgYSByZWd1bGFyIGRpYWxvZy4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uRGlhbG9nLk1pbldpZHRoIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dNaW5XaWR0aE1ham9yIj5AYW5kcm9pZDpkaW1lbi9kaWFsb2dfbWluX3dpZHRoX21ham9yPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd01pbldpZHRoTWlub3IiPkBhbmRyb2lkOmRpbWVuL2RpYWxvZ19taW5fd2lkdGhfbWlub3I8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gVmFyaWFudCBvZiBUaGVtZS5RdWFudHVtLkRpYWxvZyB0aGF0IGRvZXMgbm90IGluY2x1ZGUgYSB0aXRsZSBiYXIuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLkRpYWxvZy5Ob0FjdGlvbkJhciI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QWN0aW9uQmFyIj5mYWxzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dOb1RpdGxlIj50cnVlPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFZhcmlhbnQgb2YgVGhlbWUuUXVhbnR1bS5EaWFsb2cuTm9BY3Rpb25CYXIgdGhhdCBoYXMgYSBuaWNlIG1pbmltdW0gd2lkdGggZm9yCisgICAgICAgICBhIHJlZ3VsYXIgZGlhbG9nLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5EaWFsb2cuTm9BY3Rpb25CYXIuTWluV2lkdGgiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd01pbldpZHRoTWFqb3IiPkBhbmRyb2lkOmRpbWVuL2RpYWxvZ19taW5fd2lkdGhfbWFqb3I8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93TWluV2lkdGhNaW5vciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX21pbl93aWR0aF9taW5vcjwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBWYXJpYW50IG9mIFRoZW1lLlF1YW50dW0uRGlhbG9nIHRoYXQgaGFzIGEgZml4ZWQgc2l6ZS4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uRGlhbG9nLkZpeGVkU2l6ZSI+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0ZpeGVkV2lkdGhNYWpvciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX2ZpeGVkX3dpZHRoX21ham9yPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dGaXhlZFdpZHRoTWlub3IiPkBhbmRyb2lkOmRpbWVuL2RpYWxvZ19maXhlZF93aWR0aF9taW5vcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Rml4ZWRIZWlnaHRNYWpvciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX2ZpeGVkX2hlaWdodF9tYWpvcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Rml4ZWRIZWlnaHRNaW5vciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX2ZpeGVkX2hlaWdodF9taW5vcjwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBWYXJpYW50IG9mIFRoZW1lLlF1YW50dW0uRGlhbG9nLk5vQWN0aW9uQmFyIHRoYXQgaGFzIGEgZml4ZWQgc2l6ZS4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uRGlhbG9nLk5vQWN0aW9uQmFyLkZpeGVkU2l6ZSI+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0ZpeGVkV2lkdGhNYWpvciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX2ZpeGVkX3dpZHRoX21ham9yPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dGaXhlZFdpZHRoTWlub3IiPkBhbmRyb2lkOmRpbWVuL2RpYWxvZ19maXhlZF93aWR0aF9taW5vcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Rml4ZWRIZWlnaHRNYWpvciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX2ZpeGVkX2hlaWdodF9tYWpvcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Rml4ZWRIZWlnaHRNaW5vciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX2ZpeGVkX2hlaWdodF9taW5vcjwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBWYXJpYW50IG9mIFRoZW1lLlF1YW50dW0uRGlhbG9nIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBhIGZyYW1lIChvciBiYWNrZ3JvdW5kKS4KKyAgICAgICAgIFRoZSB2aWV3IGhpZXJhcmNoeSBvZiB0aGUgZGlhbG9nIGlzIHJlc3BvbnNpYmxlIGZvciBkcmF3aW5nIGFsbCBvZgorICAgICAgICAgaXRzIHBpeGVscy4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uRGlhbG9nLk5vRnJhbWUiPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dCYWNrZ3JvdW5kIj5AYW5kcm9pZDpjb2xvci90cmFuc3BhcmVudDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dGcmFtZSI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0NvbnRlbnRPdmVybGF5Ij5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dBbmltYXRpb25TdHlsZSI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZERpbUVuYWJsZWQiPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0lzVHJhbnNsdWNlbnQiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93Tm9UaXRsZSI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dDbG9zZU9uVG91Y2hPdXRzaWRlIj5mYWxzZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBRdWFudHVtIHRoZW1lIGZvciBhbGVydCBkaWFsb2cgd2luZG93cywgd2hpY2ggaXMgdXNlZCBieSB0aGUKKyAgICAgICAgIHtAbGluayBhbmRyb2lkLmFwcC5BbGVydERpYWxvZ30gY2xhc3MuICBUaGlzIGlzIGJhc2ljYWxseSBhIGRpYWxvZworICAgICAgICAgYnV0IHNldHMgdGhlIGJhY2tncm91bmQgdG8gZW1wdHkgc28gaXQgY2FuIGRvIHR3by10b25lIGJhY2tncm91bmRzLgorICAgICAgICAgRm9yIGFwcGxpY2F0aW9ucyB0YXJnZXRpbmcgSG9uZXljb21iIG9yIG5ld2VyLCB0aGlzIGlzIHRoZSBkZWZhdWx0CisgICAgICAgICBBbGVydERpYWxvZyB0aGVtZS4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uRGlhbG9nLkFsZXJ0Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93QmFja2dyb3VuZCI+QGFuZHJvaWQ6Y29sb3IvdHJhbnNwYXJlbnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd1RpdGxlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL0RpYWxvZ1dpbmRvd1RpdGxlLlF1YW50dW08L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0NvbnRlbnRPdmVybGF5Ij5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dNaW5XaWR0aE1ham9yIj5AYW5kcm9pZDpkaW1lbi9kaWFsb2dfbWluX3dpZHRoX21ham9yPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd01pbldpZHRoTWlub3IiPkBhbmRyb2lkOmRpbWVuL2RpYWxvZ19taW5fd2lkdGhfbWlub3I8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gUXVhbnR1bSB0aGVtZSBmb3IgdGhlIFRpbWVQaWNrZXIgZGlhbG9nIHdpbmRvd3MsIHdoaWNoIGlzIHVzZWQgYnkgdGhlCisgICAgICAgICB7QGxpbmsgYW5kcm9pZC5hcHAuVGltZVBpY2tlckRpYWxvZ30gY2xhc3MuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLkRpYWxvZy5UaW1lUGlja2VyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93QmFja2dyb3VuZCI+QGFuZHJvaWQ6Y29sb3IvdHJhbnNwYXJlbnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd1RpdGxlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL0RpYWxvZ1dpbmRvd1RpdGxlLlF1YW50dW08L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0NvbnRlbnRPdmVybGF5Ij5AbnVsbDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBUaGVtZSBmb3IgYSB3aW5kb3cgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBlaXRoZXIgZnVsbC1zY3JlZW4gb24KKyAgICAgICAgIHNtYWxsZXIgc2NyZWVucyAoc21hbGwsIG5vcm1hbCkgb3IgYXMgYSBkaWFsb2cgb24gbGFyZ2VyIHNjcmVlbnMKKyAgICAgICAgIChsYXJnZSwgeGxhcmdlKS4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uRGlhbG9nV2hlbkxhcmdlIiBwYXJlbnQ9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLlF1YW50dW0iPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFRoZW1lIGZvciBhIHdpbmRvdyB3aXRob3V0IGEgdGl0bGUgYmFyIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgZWl0aGVyCisgICAgICAgICBmdWxsLXNjcmVlbiBvbiBzbWFsbGVyIHNjcmVlbnMgKHNtYWxsLCBub3JtYWwpIG9yIGFzIGEgZGlhbG9nIG9uIGxhcmdlciBzY3JlZW5zCisgICAgICAgICAobGFyZ2UsIHhsYXJnZSkuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLkRpYWxvZ1doZW5MYXJnZS5Ob0FjdGlvbkJhciIgcGFyZW50PSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5RdWFudHVtLk5vQWN0aW9uQmFyIj4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBUaGVtZSBmb3IgYSBwcmVzZW50YXRpb24gd2luZG93IG9uIGEgc2Vjb25kYXJ5IGRpc3BsYXkuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLkRpYWxvZy5QcmVzZW50YXRpb24iIHBhcmVudD0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuUXVhbnR1bS5Ob0FjdGlvbkJhci5GdWxsc2NyZWVuIj4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBMaWdodCBxdWFudHVtIGRpYWxvZyB0aGVtZXMgLS0+CisKKyAgICA8IS0tIFF1YW50dW0gbGlnaHQgdGhlbWUgZm9yIGRpYWxvZyB3aW5kb3dzIGFuZCBhY3Rpdml0aWVzLCB3aGljaCBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAge0BsaW5rIGFuZHJvaWQuYXBwLkRpYWxvZ30gY2xhc3MuICBUaGlzIGNoYW5nZXMgdGhlIHdpbmRvdyB0byBiZQorICAgICAgICAgZmxvYXRpbmcgKG5vdCBmaWxsIHRoZSBlbnRpcmUgc2NyZWVuKSwgYW5kIHB1dHMgYSBmcmFtZSBhcm91bmQgaXRzCisgICAgICAgICBjb250ZW50cy4gIFlvdSBjYW4gc2V0IHRoaXMgdGhlbWUgb24gYW4gYWN0aXZpdHkgaWYgeW91IHdvdWxkIGxpa2UgdG8KKyAgICAgICAgIG1ha2UgYW4gYWN0aXZpdHkgdGhhdCBsb29rcyBsaWtlIGEgRGlhbG9nLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2ciPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0ZyYW1lIj5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dUaXRsZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9EaWFsb2dXaW5kb3dUaXRsZS5RdWFudHVtLkxpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0JhY2tncm91bmQiPkBhbmRyb2lkOmRyYXdhYmxlL2RpYWxvZ19mdWxsX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93SXNGbG9hdGluZyI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dDb250ZW50T3ZlcmxheSI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QW5pbWF0aW9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL0FuaW1hdGlvbi5RdWFudHVtLkRpYWxvZzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dTb2Z0SW5wdXRNb2RlIj5zdGF0ZVVuc3BlY2lmaWVkfGFkanVzdFBhbjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dBY3Rpb25CYXIiPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0FjdGlvbk1vZGVPdmVybGF5Ij50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0Nsb3NlT25Ub3VjaE91dHNpZGUiPkBib29sL2NvbmZpZ19jbG9zZURpYWxvZ1doZW5Ub3VjaE91dHNpZGU8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb2xvckJhY2tncm91bmRDYWNoZUhpbnQiPkBudWxsPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YnV0dG9uQmFyU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1F1YW50dW0uTGlnaHQuQnV0dG9uQmFyLkFsZXJ0RGlhbG9nPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJib3JkZXJsZXNzQnV0dG9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5RdWFudHVtLkxpZ2h0LkJ1dHRvbi5Cb3JkZXJsZXNzLlNtYWxsPC9pdGVtPgorCisgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlIj5AYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5RdWFudHVtLkxpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0QXBwZWFyYW5jZUludmVyc2UiPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLlF1YW50dW0uTGlnaHQuSW52ZXJzZTwvaXRlbT4KKworICAgICAgICA8aXRlbSBuYW1lPSJsaXN0UHJlZmVycmVkSXRlbVBhZGRpbmdMZWZ0Ij4xNmRpcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nUmlnaHQiPjE2ZGlwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJsaXN0UHJlZmVycmVkSXRlbVBhZGRpbmdTdGFydCI+MTZkaXA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RQcmVmZXJyZWRJdGVtUGFkZGluZ0VuZCI+MTZkaXA8L2l0ZW0+CisKKyAgICAgICAgPGl0ZW0gbmFtZT0icHJlZmVyZW5jZVBhbmVsU3R5bGUiPkBzdHlsZS9QcmVmZXJlbmNlUGFuZWwuRGlhbG9nPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFZhcmlhbnQgb2YgVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2cgdGhhdCBoYXMgYSBuaWNlIG1pbmltdW0gd2lkdGggZm9yCisgICAgICAgICBhIHJlZ3VsYXIgZGlhbG9nLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2cuTWluV2lkdGgiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd01pbldpZHRoTWFqb3IiPkBhbmRyb2lkOmRpbWVuL2RpYWxvZ19taW5fd2lkdGhfbWFqb3I8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93TWluV2lkdGhNaW5vciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX21pbl93aWR0aF9taW5vcjwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBWYXJpYW50IG9mIFRoZW1lLlF1YW50dW0uTGlnaHQuRGlhbG9nIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBhIHRpdGxlIGJhci4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uTGlnaHQuRGlhbG9nLk5vQWN0aW9uQmFyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dBY3Rpb25CYXIiPmZhbHNlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd05vVGl0bGUiPnRydWU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gVmFyaWFudCBvZiBUaGVtZS5RdWFudHVtLkxpZ2h0LkRpYWxvZy5Ob0FjdGlvbkJhciB0aGF0IGhhcyBhIG5pY2UgbWluaW11bSB3aWR0aCBmb3IKKyAgICAgICAgIGEgcmVndWxhciBkaWFsb2cuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtLkxpZ2h0LkRpYWxvZy5Ob0FjdGlvbkJhci5NaW5XaWR0aCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93TWluV2lkdGhNYWpvciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX21pbl93aWR0aF9tYWpvcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dNaW5XaWR0aE1pbm9yIj5AYW5kcm9pZDpkaW1lbi9kaWFsb2dfbWluX3dpZHRoX21pbm9yPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFZhcmlhbnQgb2YgVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2cgdGhhdCBoYXMgYSBmaXhlZCBzaXplLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2cuRml4ZWRTaXplIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Rml4ZWRXaWR0aE1ham9yIj5AYW5kcm9pZDpkaW1lbi9kaWFsb2dfZml4ZWRfd2lkdGhfbWFqb3I8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0ZpeGVkV2lkdGhNaW5vciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX2ZpeGVkX3dpZHRoX21pbm9yPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dGaXhlZEhlaWdodE1ham9yIj5AYW5kcm9pZDpkaW1lbi9kaWFsb2dfZml4ZWRfaGVpZ2h0X21ham9yPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dGaXhlZEhlaWdodE1pbm9yIj5AYW5kcm9pZDpkaW1lbi9kaWFsb2dfZml4ZWRfaGVpZ2h0X21pbm9yPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFZhcmlhbnQgb2YgVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2cuTm9BY3Rpb25CYXIgdGhhdCBoYXMgYSBmaXhlZCBzaXplLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2cuTm9BY3Rpb25CYXIuRml4ZWRTaXplIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Rml4ZWRXaWR0aE1ham9yIj5AYW5kcm9pZDpkaW1lbi9kaWFsb2dfZml4ZWRfd2lkdGhfbWFqb3I8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0ZpeGVkV2lkdGhNaW5vciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX2ZpeGVkX3dpZHRoX21pbm9yPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dGaXhlZEhlaWdodE1ham9yIj5AYW5kcm9pZDpkaW1lbi9kaWFsb2dfZml4ZWRfaGVpZ2h0X21ham9yPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dGaXhlZEhlaWdodE1pbm9yIj5AYW5kcm9pZDpkaW1lbi9kaWFsb2dfZml4ZWRfaGVpZ2h0X21pbm9yPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFRoZW1lIGZvciBhIHdpbmRvdyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGVpdGhlciBmdWxsLXNjcmVlbiBvbgorICAgICAgICAgc21hbGxlciBzY3JlZW5zIChzbWFsbCwgbm9ybWFsKSBvciBhcyBhIGRpYWxvZyBvbiBsYXJnZXIgc2NyZWVucworICAgICAgICAgKGxhcmdlLCB4bGFyZ2UpLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2dXaGVuTGFyZ2UiIHBhcmVudD0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuUXVhbnR1bS5MaWdodCI+CisgICAgPC9zdHlsZT4KKworICAgIDwhLS0gVGhlbWUgZm9yIGEgd2luZG93IHdpdGhvdXQgYW4gYWN0aW9uIGJhciB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGVpdGhlciBmdWxsLXNjcmVlbgorICAgICAgICAgb24gc21hbGxlciBzY3JlZW5zIChzbWFsbCwgbm9ybWFsKSBvciBhcyBhIGRpYWxvZyBvbiBsYXJnZXIgc2NyZWVucworICAgICAgICAgKGxhcmdlLCB4bGFyZ2UpLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2dXaGVuTGFyZ2UuTm9BY3Rpb25CYXIiCisgICAgICAgICAgICBwYXJlbnQ9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLlF1YW50dW0uTGlnaHQuTm9BY3Rpb25CYXIiPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFF1YW50dW0gbGlnaHQgdGhlbWUgZm9yIGFsZXJ0IGRpYWxvZyB3aW5kb3dzLCB3aGljaCBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAge0BsaW5rIGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nfSBjbGFzcy4gIFRoaXMgaXMgYmFzaWNhbGx5IGEgZGlhbG9nCisgICAgICAgICBidXQgc2V0cyB0aGUgYmFja2dyb3VuZCB0byBlbXB0eSBzbyBpdCBjYW4gZG8gdHdvLXRvbmUgYmFja2dyb3VuZHMuCisgICAgICAgICBGb3IgYXBwbGljYXRpb25zIHRhcmdldGluZyBIb25leWNvbWIgb3IgbmV3ZXIsIHRoaXMgaXMgdGhlIGRlZmF1bHQKKyAgICAgICAgIEFsZXJ0RGlhbG9nIHRoZW1lLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5MaWdodC5EaWFsb2cuQWxlcnQiPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dCYWNrZ3JvdW5kIj5AYW5kcm9pZDpjb2xvci90cmFuc3BhcmVudDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93VGl0bGVTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvRGlhbG9nV2luZG93VGl0bGUuUXVhbnR1bS5MaWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Q29udGVudE92ZXJsYXkiPkBudWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd01pbldpZHRoTWFqb3IiPkBhbmRyb2lkOmRpbWVuL2RpYWxvZ19taW5fd2lkdGhfbWFqb3I8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93TWluV2lkdGhNaW5vciI+QGFuZHJvaWQ6ZGltZW4vZGlhbG9nX21pbl93aWR0aF9taW5vcjwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBRdWFudHVtIExpZ2h0IHRoZW1lIGZvciB0aGUgVGltZVBpY2tlciBkaWFsb2cgd2luZG93cywgd2hpY2ggaXMgdXNlZCBieSB0aGUKKyAgICAgICAgIHtAbGluayBhbmRyb2lkLmFwcC5UaW1lUGlja2VyRGlhbG9nfSBjbGFzcy4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uTGlnaHQuRGlhbG9nLlRpbWVQaWNrZXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dCYWNrZ3JvdW5kIj5AYW5kcm9pZDpjb2xvci90cmFuc3BhcmVudDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93VGl0bGVTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvRGlhbG9nV2luZG93VGl0bGUuUXVhbnR1bS5MaWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Q29udGVudE92ZXJsYXkiPkBudWxsPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8IS0tIFRoZW1lIGZvciBhIHByZXNlbnRhdGlvbiB3aW5kb3cgb24gYSBzZWNvbmRhcnkgZGlzcGxheS4gLS0+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLlF1YW50dW0uTGlnaHQuRGlhbG9nLlByZXNlbnRhdGlvbiIgcGFyZW50PSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5RdWFudHVtLkxpZ2h0Lk5vQWN0aW9uQmFyLkZ1bGxzY3JlZW4iID4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLSBEZWZhdWx0IHF1YW50dW0gKGRhcmspIGZvciB3aW5kb3dzIHRoYXQgd2FudCB0byBoYXZlIHRoZSB1c2VyJ3Mgc2VsZWN0ZWQKKyAgICAgICAgIHdhbGxwYXBlciBhcHBlYXIgYmVoaW5kIHRoZW0uICAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5XYWxscGFwZXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0JhY2tncm91bmQiPkBhbmRyb2lkOmNvbG9yL3RyYW5zcGFyZW50PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmNvbG9yQmFja2dyb3VuZENhY2hlSGludCI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93U2hvd1dhbGxwYXBlciI+dHJ1ZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPCEtLURlZmF1bHQgcXVhbnR1bSAoZGFyaykgZm9yIHdpbmRvd3MgdGhhdCB3YW50IHRvIGhhdmUgdGhlIHVzZXIncyBzZWxlY3RlZAorICAgICAgICAgd2FsbHBhcGVyIGFwcGVhciBiZWhpbmQgdGhlbSBhbmQgd2l0aG91dCBhbiBhY3Rpb24gYmFyLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuUXVhbnR1bS5XYWxscGFwZXIuTm9UaXRsZUJhciI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93Tm9UaXRsZSI+dHJ1ZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL0FuZHJvaWQubWsgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9BbmRyb2lkLm1rCmluZGV4IGJlNTU0NDQuLjczYTUzY2IgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL0FuZHJvaWQubWsKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvQW5kcm9pZC5tawpAQCAtMjIsNiArMjIsNyBAQAogCSQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlciwgRW5hYmxlZFRlc3RBcHAvc3JjKQogCiBMT0NBTF9EWF9GTEFHUyA6PSAtLWNvcmUtbGlicmFyeQorTE9DQUxfQUFQVF9GTEFHUyA9IC0wIGRhdCAtMCBnbGQKIExPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyA6PSBjb3JlLXRlc3RzLXN1cHBvcnQgYW5kcm9pZC1jb21tb24gZnJhbWV3b3Jrcy1jb3JlLXV0aWwtbGliIG1vY2t3ZWJzZXJ2ZXIgZ3VhdmEgbGl0dGxlbW9jawogTE9DQUxfSkFWQV9MSUJSQVJJRVMgOj0gYW5kcm9pZC50ZXN0LnJ1bm5lciBjb25zY3J5cHQgdGVsZXBob255LWNvbW1vbgogTE9DQUxfUEFDS0FHRV9OQU1FIDo9IEZyYW1ld29ya3NDb3JlVGVzdHMKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL2Fzc2V0cy9iYWNrdXBfbW9jay5kYXQgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX21vY2suZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MGI1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX21vY2suZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL2Fzc2V0cy9iYWNrdXBfbW9jay5nbGQgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX21vY2suZ2xkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTdjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX21vY2suZ2xkCkBAIC0wLDAgKzEsNCBAQAora2V5MToKK2tleTJhOllXSmpaR1ZtWnc9PQora2V5M2JjOllXSmpaR1ZtWjJnPQora2V5NGRhZDoKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL2Fzc2V0cy9iYWNrdXBfcmVhbC5kYXQgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX3JlYWwuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNjI1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX3JlYWwuZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL2Fzc2V0cy9iYWNrdXBfcmVhbC5nbGQgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX3JlYWwuZ2xkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMjhmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX3JlYWwuZ2xkCkBAIC0wLDAgKzEsMyBAQAorQ0FFWUx3OkNDOFFBQm9JUjBWTUlGTjBkV0lnblAvLy8vLy8vLy8vQVNnQk1BSkFBVWdCYXBnQkkwbHVkR1Z1ZER0aFkzUnBiMjQ5WVc1a2NtOXBaQzVwYm5SbGJuUXVZV04wYVc5dUxrMUJTVTQ3WTJGMFpXZHZjbms5WVc1a2NtOXBaQzVwYm5SbGJuUXVZMkYwWldkdmNua3VURUZWVGtOSVJWSTdiR0YxYm1Ob1JteGhaM005TUhneE1ESXdNREF3TUR0amIyMXdiMjVsYm5ROVkyOXRMbWR2YjJkc1pTNWhibVJ5YjJsa0xtZGxiQzh1VTNSMVlrRndjRHRsYm1RPQorQ0FFWUxROgorQ0FFWUxBOgpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBEYXRhVGVzdC5qYXZhIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBEYXRhVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMjA0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC9hcHAvYmFja3VwL0JhY2t1cERhdGFUZXN0LmphdmEKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYXBwLmJhY2t1cDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLmJhY2t1cC5CYWNrdXBEYXRhSW5wdXQ7CitpbXBvcnQgYW5kcm9pZC5hcHAuYmFja3VwLkJhY2t1cERhdGFPdXRwdXQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldEZpbGVEZXNjcmlwdG9yOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKK2ltcG9ydCBhbmRyb2lkLnRlc3QuQW5kcm9pZFRlc3RDYXNlOworaW1wb3J0IGFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQmFzZTY0OworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgb3JnLmpzb24uSlNPTk9iamVjdDsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS5sYW5nLkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOworCitwdWJsaWMgY2xhc3MgQmFja3VwRGF0YVRlc3QgZXh0ZW5kcyBBbmRyb2lkVGVzdENhc2UgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVkxID0gImtleTEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVkyID0gImtleTJhIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZMyA9ICJrZXkzYmMiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVk0ID0gImtleTRkYWQiOyAgLy8gdmFyaWFibGUga2V5IGxlbmd0aHMgdG8gdGVzdCBwYWRkaW5nCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gS0VZUyA9IHtLRVkxLCBLRVkyLCBLRVkzLCBLRVk0fTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBMSA9ICJhYmNkZWYiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBMiA9ICJhYmNkZWZnIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQTMgPSAiYWJjZGVmZ2giOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBNCA9ICJhYmNkZWZmaGkiOyAvL3ZhcmlhYmxlIGRhdGEgbGVuZ3RocyB0byB0ZXN0IHBhZGRpbmcKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBEQVRBID0ge0RBVEExLCBEQVRBMiwgREFUQTMsIERBVEE0fTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkJhY2t1cERhdGFUZXN0IjsKKworICAgIHByaXZhdGUgRmlsZSBtRmlsZTsKKyAgICBwcml2YXRlIFBhcmNlbEZpbGVEZXNjcmlwdG9yIG1EYXRhRmlsZTsKKyAgICBwcml2YXRlIEZpbGUgbURpcmVjdG9yeTsKKyAgICBwcml2YXRlIEJ1bmRsZSBtU3RhdHVzQnVuZGxlOworICAgIHByaXZhdGUgQXNzZXRNYW5hZ2VyIG1Bc3NldHM7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlci5zZXRVcCgpOworICAgICAgICBtRGlyZWN0b3J5ID0gbmV3IEZpbGUoRW52aXJvbm1lbnQuZ2V0RXh0ZXJuYWxTdG9yYWdlRGlyZWN0b3J5KCksICJ0ZXN0X2RhdGEiKTsKKyAgICAgICAgbURpcmVjdG9yeS5ta2RpcnMoKTsKKyAgICAgICAgbUFzc2V0cyA9IG1Db250ZXh0LmdldEFzc2V0cygpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyLnRlYXJEb3duKCk7CisgICAgICAgIGlmIChtRGF0YUZpbGUgIT0gbnVsbCkgeworICAgICAgICAgICAgbURhdGFGaWxlLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2luZ2xlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgbUZpbGUgPSBuZXcgRmlsZShtRGlyZWN0b3J5LCAiYmFja3VwX21peGVkX3NpbmxnZS5kYXQiKTsKKyAgICAgICAgb3BlbkZvcldyaXRpbmcoKTsKKyAgICAgICAgQmFja3VwRGF0YU91dHB1dCBiZG8gPSBuZXcgQmFja3VwRGF0YU91dHB1dChtRGF0YUZpbGUuZ2V0RmlsZURlc2NyaXB0b3IoKSk7CisKKyAgICAgICAgd3JpdGVFbnRpdHkoYmRvLCBLRVkxLCBEQVRBMS5nZXRCeXRlcygpKTsKKworICAgICAgICBtRGF0YUZpbGUuY2xvc2UoKTsKKyAgICAgICAgb3BlbkZvclJlYWRpbmcoKTsKKworICAgICAgICBCYWNrdXBEYXRhSW5wdXQgYmRpID0gbmV3IEJhY2t1cERhdGFJbnB1dChtRGF0YUZpbGUuZ2V0RmlsZURlc2NyaXB0b3IoKSk7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChiZGkucmVhZE5leHRIZWFkZXIoKSkgeworICAgICAgICAgICAgcmVhZEFuZFZlcmlmeUVudGl0eShiZGksIEtFWTEsIERBVEExLmdldEJ5dGVzKCkpOworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnRFcXVhbHMoIm9ubHkgb25lIGVudGl0eSBpbiB0aGlzIHN0cmVhbSIsIDEsIGNvdW50KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBtRmlsZSA9IG5ldyBGaWxlKG1EaXJlY3RvcnksICJiYWNrdXBfbXVsdGlwbGVfdGVzdC5kYXQiKTsKKyAgICAgICAgb3BlbkZvcldyaXRpbmcoKTsKKyAgICAgICAgQmFja3VwRGF0YU91dHB1dCBiZG8gPSBuZXcgQmFja3VwRGF0YU91dHB1dChtRGF0YUZpbGUuZ2V0RmlsZURlc2NyaXB0b3IoKSk7CisKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IEtFWVMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHdyaXRlRW50aXR5KGJkbywgS0VZU1tpXSwgREFUQVtpXS5nZXRCeXRlcygpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EYXRhRmlsZS5jbG9zZSgpOworICAgICAgICBvcGVuRm9yUmVhZGluZygpOworCisgICAgICAgIEJhY2t1cERhdGFJbnB1dCBiZGkgPSBuZXcgQmFja3VwRGF0YUlucHV0KG1EYXRhRmlsZS5nZXRGaWxlRGVzY3JpcHRvcigpKTsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgKGJkaS5yZWFkTmV4dEhlYWRlcigpKSB7CisgICAgICAgICAgICByZWFkQW5kVmVyaWZ5RW50aXR5KGJkaSwgS0VZU1tjb3VudF0sIERBVEFbY291bnRdLmdldEJ5dGVzKCkpOworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnRFcXVhbHMoImZvdXIgZW50aXRpZXMgaW4gdGhpcyBzdHJlYW0iLCBLRVlTLmxlbmd0aCwgY291bnQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3REZWxldGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBtRmlsZSA9IG5ldyBGaWxlKG1EaXJlY3RvcnksICJiYWNrdXBfZGVsZXRlX3Rlc3QuZGF0Iik7CisgICAgICAgIG9wZW5Gb3JXcml0aW5nKCk7CisgICAgICAgIEJhY2t1cERhdGFPdXRwdXQgYmRvID0gbmV3IEJhY2t1cERhdGFPdXRwdXQobURhdGFGaWxlLmdldEZpbGVEZXNjcmlwdG9yKCkpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBLRVlTLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBkZWxldGVFbnRpdHkoYmRvLCBLRVlTW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EYXRhRmlsZS5jbG9zZSgpOworICAgICAgICBvcGVuRm9yUmVhZGluZygpOworCisgICAgICAgIEJhY2t1cERhdGFJbnB1dCBiZGkgPSBuZXcgQmFja3VwRGF0YUlucHV0KG1EYXRhRmlsZS5nZXRGaWxlRGVzY3JpcHRvcigpKTsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgKGJkaS5yZWFkTmV4dEhlYWRlcigpKSB7CisgICAgICAgICAgICByZWFkQW5kVmVyaWZ5RGVsZXRlZEVudGl0eShiZGksIEtFWVNbY291bnRdKTsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJmb3VyIGRlbGV0ZXMgaW4gdGhpcyBzdHJlYW0iLCBLRVlTLmxlbmd0aCwgY291bnQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RNaXhlZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIG1GaWxlID0gbmV3IEZpbGUobURpcmVjdG9yeSwgImJhY2t1cF9taXhlZF90ZXN0LmRhdCIpOworICAgICAgICBvcGVuRm9yV3JpdGluZygpOworCisgICAgICAgIEJhY2t1cERhdGFPdXRwdXQgYmRvID0gbmV3IEJhY2t1cERhdGFPdXRwdXQobURhdGFGaWxlLmdldEZpbGVEZXNjcmlwdG9yKCkpOworCisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgZGVsZXRlRW50aXR5KGJkbywgS0VZU1tpXSk7IGkrKzsKKyAgICAgICAgd3JpdGVFbnRpdHkoYmRvLCBLRVlTW2ldLCBEQVRBW2ldLmdldEJ5dGVzKCkpOyBpKys7CisgICAgICAgIHdyaXRlRW50aXR5KGJkbywgS0VZU1tpXSwgREFUQVtpXS5nZXRCeXRlcygpKTsgaSsrOworICAgICAgICBkZWxldGVFbnRpdHkoYmRvLCBLRVlTW2ldKTsgaSsrOworCisgICAgICAgIG1EYXRhRmlsZS5jbG9zZSgpOworICAgICAgICBvcGVuRm9yUmVhZGluZygpOworCisgICAgICAgIEJhY2t1cERhdGFJbnB1dCBiZGkgPSBuZXcgQmFja3VwRGF0YUlucHV0KG1EYXRhRmlsZS5nZXRGaWxlRGVzY3JpcHRvcigpKTsKKyAgICAgICAgaW50IG91dCA9IDA7CisgICAgICAgIGFzc2VydFRydWUoYmRpLnJlYWROZXh0SGVhZGVyKCkpOworICAgICAgICByZWFkQW5kVmVyaWZ5RGVsZXRlZEVudGl0eShiZGksIEtFWVNbb3V0XSk7IG91dCsrOworICAgICAgICBhc3NlcnRUcnVlKGJkaS5yZWFkTmV4dEhlYWRlcigpKTsKKyAgICAgICAgcmVhZEFuZFZlcmlmeUVudGl0eShiZGksIEtFWVNbb3V0XSwgREFUQVtvdXRdLmdldEJ5dGVzKCkpOyBvdXQrKzsKKyAgICAgICAgYXNzZXJ0VHJ1ZShiZGkucmVhZE5leHRIZWFkZXIoKSk7CisgICAgICAgIHJlYWRBbmRWZXJpZnlFbnRpdHkoYmRpLCBLRVlTW291dF0sIERBVEFbb3V0XS5nZXRCeXRlcygpKTsgb3V0Kys7CisgICAgICAgIGFzc2VydFRydWUoYmRpLnJlYWROZXh0SGVhZGVyKCkpOworICAgICAgICByZWFkQW5kVmVyaWZ5RGVsZXRlZEVudGl0eShiZGksIEtFWVNbb3V0XSk7IG91dCsrOworICAgICAgICBhc3NlcnRGYWxzZSgiZm91ciBpdGVtcyBpbiB0aGlzIHN0cmVhbSIsCisgICAgICAgICAgICAgICAgYmRpLnJlYWROZXh0SGVhZGVyKCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RSZWFkTW9ja0RhdGEoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBjb3B5QXNzZXRUb0ZpbGUoImJhY2t1cF9tb2NrLmRhdCIsICJiYWNrdXBfcmVhZF9tb2NrX3Rlc3QuZGF0Iik7CisKKyAgICAgICAgb3BlbkZvclJlYWRpbmcoKTsKKyAgICAgICAgQmFja3VwRGF0YUlucHV0IGJkaSA9IG5ldyBCYWNrdXBEYXRhSW5wdXQobURhdGFGaWxlLmdldEZpbGVEZXNjcmlwdG9yKCkpOworICAgICAgICBCdWZmZXJlZFJlYWRlciB0cnV0aCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCisgICAgICAgICAgICAgICAgbUFzc2V0cy5vcGVuRmQoImJhY2t1cF9tb2NrLmdsZCIpLmNyZWF0ZUlucHV0U3RyZWFtKCkpKTsKKyAgICAgICAgd2hpbGUoIGJkaS5yZWFkTmV4dEhlYWRlcigpKSB7CisgICAgICAgICAgICBTdHJpbmdbXSBleHBlY3RlZCA9IHRydXRoLnJlYWRMaW5lKCkuc3BsaXQoIjoiKTsKKyAgICAgICAgICAgIGJ5dGVbXSBleHBlY3RlZEJ5dGVzID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRCeXRlcyA9IEJhc2U2NC5kZWNvZGUoZXhwZWN0ZWRbMV0sIEJhc2U2NC5ERUZBVUxUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBiZGkuZ2V0S2V5KCk7CisgICAgICAgICAgICBpbnQgZGF0YVNpemUgPSBiZGkuZ2V0RGF0YVNpemUoKTsKKworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3cm9uZyBrZXkiLCBleHBlY3RlZFswXSwga2V5KTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygid3JvbmcgbGVuZ3RoIGZvciBrZXkgIiArIGtleSwKKyAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkQnl0ZXMgPT0gbnVsbCA/IC0xOiBleHBlY3RlZEJ5dGVzLmxlbmd0aCksIGRhdGFTaXplKTsKKyAgICAgICAgICAgIGlmIChkYXRhU2l6ZSAhPSAtMSkgeworICAgICAgICAgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVtkYXRhU2l6ZV07CisgICAgICAgICAgICAgICAgYmRpLnJlYWRFbnRpdHlEYXRhKGJ1ZmZlciwgMCwgZGF0YVNpemUpOworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygid3JvbmcgZGF0YSBmb3Iga2V5ICIgKyBrZXksIGV4cGVjdGVkWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgQmFzZTY0LmVuY29kZVRvU3RyaW5nKGJ1ZmZlciwgMCwgZGF0YVNpemUsIEJhc2U2NC5OT19XUkFQKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0TnVsbCgidGhlcmUgYXJlIHVudXNlZCBlbnRyaWVzIGluIHRoZSBnb2xkZW4gZmlsZSIsIHRydXRoLnJlYWRMaW5lKCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RSZWFkUmVhbERhdGEoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBjb3B5QXNzZXRUb0ZpbGUoImJhY2t1cF9yZWFsLmRhdCIsICJiYWNrdXBfcmVhZF9yZWFsX3Rlc3QuZGF0Iik7CisKKyAgICAgICAgb3BlbkZvclJlYWRpbmcoKTsKKyAgICAgICAgQmFja3VwRGF0YUlucHV0IGJkaSA9IG5ldyBCYWNrdXBEYXRhSW5wdXQobURhdGFGaWxlLmdldEZpbGVEZXNjcmlwdG9yKCkpOworICAgICAgICBCdWZmZXJlZFJlYWRlciB0cnV0aCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCisgICAgICAgICAgICAgICAgbUFzc2V0cy5vcGVuRmQoImJhY2t1cF9yZWFsLmdsZCIpLmNyZWF0ZUlucHV0U3RyZWFtKCkpKTsKKworICAgICAgICB3aGlsZShiZGkucmVhZE5leHRIZWFkZXIoKSkgeworICAgICAgICAgICAgU3RyaW5nW10gZXhwZWN0ZWQgPSB0cnV0aC5yZWFkTGluZSgpLnNwbGl0KCI6Iik7CisgICAgICAgICAgICBieXRlW10gZXhwZWN0ZWRCeXRlcyA9IG51bGw7CisgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgIGV4cGVjdGVkQnl0ZXMgPSBCYXNlNjQuZGVjb2RlKGV4cGVjdGVkWzFdLCBCYXNlNjQuREVGQVVMVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcga2V5ID0gYmRpLmdldEtleSgpOworICAgICAgICAgICAgaW50IGRhdGFTaXplID0gYmRpLmdldERhdGFTaXplKCk7CisKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygid3Jvbmcga2V5IiwgZXhwZWN0ZWRbMF0sIGtleSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIndyb25nIGxlbmd0aCBmb3Iga2V5ICIgKyBrZXksCisgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZEJ5dGVzID09IG51bGwgPyAtMTogZXhwZWN0ZWRCeXRlcy5sZW5ndGgpLCBkYXRhU2l6ZSk7CisgICAgICAgICAgICBpZiAoZGF0YVNpemUgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbZGF0YVNpemVdOworICAgICAgICAgICAgICAgIGJkaS5yZWFkRW50aXR5RGF0YShidWZmZXIsIDAsIGRhdGFTaXplKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIndyb25nIGRhdGEgZm9yIGtleSAiICsga2V5LCBleHBlY3RlZFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2U2NC5lbmNvZGVUb1N0cmluZyhidWZmZXIsIDAsIGRhdGFTaXplLCBCYXNlNjQuTk9fV1JBUCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydE51bGwoInRoZXJlIGFyZSB1bnVzZWQgZW50cmllcyBpbiB0aGUgZ29sZGVuIGZpbGUiLCB0cnV0aC5yZWFkTGluZSgpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29weUFzc2V0VG9GaWxlKFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZXN0aW5hdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgbUZpbGUgPSBuZXcgRmlsZShtRGlyZWN0b3J5LCBkZXN0aW5hdGlvbik7CisgICAgICAgIG9wZW5Gb3JXcml0aW5nKCk7CisgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaWxlSW5wdXRTdHJlYW0gPSBtQXNzZXRzLm9wZW5GZChzb3VyY2UpLmNyZWF0ZUlucHV0U3RyZWFtKCk7CisgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZmlsZU91dHB1dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKG1EYXRhRmlsZS5nZXRGaWxlRGVzY3JpcHRvcigpKTsKKyAgICAgICAgYnl0ZVtdIGNvcHlidWZmZXIgPSBuZXcgYnl0ZVsxMDI0XTsKKyAgICAgICAgaW50IG51bUJ5dGVzID0gZmlsZUlucHV0U3RyZWFtLnJlYWQoY29weWJ1ZmZlcik7CisgICAgICAgIGZpbGVPdXRwdXRTdHJlYW0ud3JpdGUoY29weWJ1ZmZlciwgMCwgbnVtQnl0ZXMpOworICAgICAgICBmaWxlT3V0cHV0U3RyZWFtLmNsb3NlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG9wZW5Gb3JXcml0aW5nKCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIG1EYXRhRmlsZSA9IFBhcmNlbEZpbGVEZXNjcmlwdG9yLm9wZW4obUZpbGUsCisgICAgICAgICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3IuTU9ERV9XUklURV9PTkxZIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfQ1JFQVRFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfVFJVTkNBVEUpOyAgLy8gTWFrZSBhbiBlbXB0eSBmaWxlIGlmIG5lY2Vzc2FyeQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBvcGVuRm9yUmVhZGluZygpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICBtRGF0YUZpbGUgPSBQYXJjZWxGaWxlRGVzY3JpcHRvci5vcGVuKG1GaWxlLAorICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfUkVBRF9PTkxZIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfQ1JFQVRFKTsgIC8vIE1ha2UgYW4gZW1wdHkgZmlsZSBpZiBuZWNlc3NhcnkKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgd3JpdGVFbnRpdHkoQmFja3VwRGF0YU91dHB1dCBiZG8sIFN0cmluZyBrZXksIGJ5dGVbXSBkYXRhKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpbnQgc3RhdHVzID0gYmRvLndyaXRlRW50aXR5SGVhZGVyKGtleSwgZGF0YS5sZW5ndGgpOworICAgICAgICAvLyBkb2N1bWVudGF0aW9uIHNheXMgIm51bWJlciBvZiBieXRlcyB3cml0dGVuIiBidXQgdGhhdCdzIG5vdCB3aGF0IHdlIGdldDoKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHN0YXR1cyk7CisKKyAgICAgICAgc3RhdHVzID0gYmRvLndyaXRlRW50aXR5RGF0YShkYXRhLCBkYXRhLmxlbmd0aCk7CisgICAgICAgIC8vIGRvY3VtZW50YXRpb24gc2F5cyAibnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4iIGJ1dCB0aGF0J3Mgbm90IHdoYXQgd2UgZ2V0OgorICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc3RhdHVzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlRW50aXR5KEJhY2t1cERhdGFPdXRwdXQgYmRvLCBTdHJpbmcga2V5KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpbnQgc3RhdHVzID0gYmRvLndyaXRlRW50aXR5SGVhZGVyKGtleSwgLTEpOworICAgICAgICAvLyBkb2N1bWVudGF0aW9uIHNheXMgIm51bWJlciBvZiBieXRlcyB3cml0dGVuIiBidXQgdGhhdCdzIG5vdCB3aGF0IHdlIGdldDoKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHN0YXR1cyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHJlYWRBbmRWZXJpZnlFbnRpdHkoQmFja3VwRGF0YUlucHV0IGJkaSwgU3RyaW5nIGV4cGVjdGVkS2V5LCBieXRlW10gZXhwZWN0ZWREYXRhKQorICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJLZXkgbWlzbWF0Y2giLAorICAgICAgICAgICAgICAgIGV4cGVjdGVkS2V5LCBiZGkuZ2V0S2V5KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImRhdGEgc2l6ZSBtaXNtYXRjaCIsCisgICAgICAgICAgICAgICAgZXhwZWN0ZWREYXRhLmxlbmd0aCwgYmRpLmdldERhdGFTaXplKCkpOworICAgICAgICBieXRlW10gZGF0YSA9IG5ldyBieXRlW2JkaS5nZXREYXRhU2l6ZSgpXTsKKyAgICAgICAgYmRpLnJlYWRFbnRpdHlEYXRhKGRhdGEsIDAsIGJkaS5nZXREYXRhU2l6ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJwYXlsb2FkIHNpemUgaXMgd3JvbmciLAorICAgICAgICAgICAgICAgIGV4cGVjdGVkRGF0YS5sZW5ndGgsIGRhdGEubGVuZ3RoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInBheWxvYWQgbWlzbWF0Y2giLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZERhdGFbaV0sIGRhdGFbaV0pOworICAgICAgICB9CisgICAgfQorICAgIHByaXZhdGUgdm9pZCByZWFkQW5kVmVyaWZ5RGVsZXRlZEVudGl0eShCYWNrdXBEYXRhSW5wdXQgYmRpLCBTdHJpbmcgZXhwZWN0ZWRLZXkpCisgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBhc3NlcnRFcXVhbHMoIktleSBtaXNtYXRjaCIsCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRLZXksIGJkaS5nZXRLZXkoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiZGVsZXRpb24gbWlzLXJlcG9ydGVkIiwKKyAgICAgICAgICAgICAgICAtMSwgYmRpLmdldERhdGFTaXplKCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL25ldC9TU0xTZXNzaW9uQ2FjaGVUZXN0LmphdmEgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC9uZXQvU1NMU2Vzc2lvbkNhY2hlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTkzMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC9uZXQvU1NMU2Vzc2lvbkNhY2hlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UKKyAqLworCitwYWNrYWdlIGFuZHJvaWQubmV0OworCitpbXBvcnQgY29tLmFuZHJvaWQub3JnLmNvbnNjcnlwdC5DbGllbnRTZXNzaW9uQ29udGV4dDsKK2ltcG9ydCBjb20uYW5kcm9pZC5vcmcuY29uc2NyeXB0LlNTTENsaWVudFNlc3Npb25DYWNoZTsKKworaW1wb3J0IGNvbS5nb29nbGUudGVzdGluZy5saXR0bGVtb2NrLkxpdHRsZU1vY2s7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LktleU1hbmFnZW1lbnRFeGNlcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5TZWN1cmVSYW5kb207CisKK2ltcG9ydCBqYXZheC5uZXQuc3NsLktleU1hbmFnZXI7CitpbXBvcnQgamF2YXgubmV0LnNzbC5TU0xDb250ZXh0OworaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMQ29udGV4dFNwaTsKK2ltcG9ydCBqYXZheC5uZXQuc3NsLlNTTEVuZ2luZTsKK2ltcG9ydCBqYXZheC5uZXQuc3NsLlNTTFNlcnZlclNvY2tldEZhY3Rvcnk7CitpbXBvcnQgamF2YXgubmV0LnNzbC5TU0xTZXNzaW9uQ29udGV4dDsKK2ltcG9ydCBqYXZheC5uZXQuc3NsLlNTTFNvY2tldEZhY3Rvcnk7CitpbXBvcnQgamF2YXgubmV0LnNzbC5UcnVzdE1hbmFnZXI7CisKK3B1YmxpYyBjbGFzcyBTU0xTZXNzaW9uQ2FjaGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisgICAgcHVibGljIHZvaWQgdGVzdEluc3RhbGxfY29tcGF0aWJsZUNvbnRleHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU1NMQ29udGV4dCBjdHggPSBTU0xDb250ZXh0LmdldERlZmF1bHQoKTsKKyAgICAgICAgZmluYWwgU1NMQ2xpZW50U2Vzc2lvbkNhY2hlIG1vY2sgPSBMaXR0bGVNb2NrLm1vY2soU1NMQ2xpZW50U2Vzc2lvbkNhY2hlLmNsYXNzKTsKKyAgICAgICAgZmluYWwgQ2xpZW50U2Vzc2lvbkNvbnRleHQgY2xpZW50Q3R4ID0gKENsaWVudFNlc3Npb25Db250ZXh0KSBjdHguZ2V0Q2xpZW50U2Vzc2lvbkNvbnRleHQoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgU1NMU2Vzc2lvbkNhY2hlLmluc3RhbGwobmV3IFNTTFNlc3Npb25DYWNoZShtb2NrKSwgY3R4KTsKKyAgICAgICAgICAgIGNsaWVudEN0eC5nZXRTZXNzaW9uKCJ3d3cuZm9vZ2xlLmNvbSIsIDQ0Myk7CisgICAgICAgICAgICBMaXR0bGVNb2NrLnZlcmlmeShtb2NrKS5nZXRTZXNzaW9uRGF0YShMaXR0bGVNb2NrLmFueVN0cmluZygpLCBMaXR0bGVNb2NrLmFueUludCgpKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgY2FjaGVsZXNzIGJlaGF2aW91ci4KKyAgICAgICAgICAgIFNTTFNlc3Npb25DYWNoZS5pbnN0YWxsKG51bGwsIGN0eCk7CisgICAgICAgICAgICBjbGllbnRDdHguZ2V0U2Vzc2lvbigid3d3LmZvb2dsZS5jb20iLCA0NDMpOworICAgICAgICAgICAgTGl0dGxlTW9jay52ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnMobW9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW5zdGFsbF9pbmNvbXBhdGlibGVDb250ZXh0KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgU1NMU2Vzc2lvbkNhY2hlLmluc3RhbGwoCisgICAgICAgICAgICAgICAgICAgIG5ldyBTU0xTZXNzaW9uQ2FjaGUoTGl0dGxlTW9jay5tb2NrKFNTTENsaWVudFNlc3Npb25DYWNoZS5jbGFzcykpLAorICAgICAgICAgICAgICAgICAgICBuZXcgRmFrZVNTTENvbnRleHQoKSk7CisgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleHBlY3RlZCkge30KKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgY2xhc3MgRmFrZVNTTENvbnRleHQgZXh0ZW5kcyBTU0xDb250ZXh0IHsKKyAgICAgICAgcHJvdGVjdGVkIEZha2VTU0xDb250ZXh0KCkgeworICAgICAgICAgICAgc3VwZXIobmV3IEZha2VTU0xDb250ZXh0U3BpKCksIG51bGwsICJ0ZXN0Iik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgY2xhc3MgRmFrZVNTTENvbnRleHRTcGkgZXh0ZW5kcyBTU0xDb250ZXh0U3BpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIGVuZ2luZUluaXQoS2V5TWFuYWdlcltdIGtleU1hbmFnZXJzLCBUcnVzdE1hbmFnZXJbXSB0cnVzdE1hbmFnZXJzLAorICAgICAgICAgICAgICAgIFNlY3VyZVJhbmRvbSBzZWN1cmVSYW5kb20pIHRocm93cyBLZXlNYW5hZ2VtZW50RXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgU1NMU29ja2V0RmFjdG9yeSBlbmdpbmVHZXRTb2NrZXRGYWN0b3J5KCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIFNTTFNlcnZlclNvY2tldEZhY3RvcnkgZW5naW5lR2V0U2VydmVyU29ja2V0RmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBTU0xFbmdpbmUgZW5naW5lQ3JlYXRlU1NMRW5naW5lKFN0cmluZyBzLCBpbnQgaSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIFNTTEVuZ2luZSBlbmdpbmVDcmVhdGVTU0xFbmdpbmUoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgU1NMU2Vzc2lvbkNvbnRleHQgZW5naW5lR2V0U2VydmVyU2Vzc2lvbkNvbnRleHQoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgU1NMU2Vzc2lvbkNvbnRleHQgZW5naW5lR2V0Q2xpZW50U2Vzc2lvbkNvbnRleHQoKSB7CisgICAgICAgICAgICByZXR1cm4gTGl0dGxlTW9jay5tb2NrKFNTTFNlc3Npb25Db250ZXh0LmNsYXNzKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL29zL0ZpbGVVdGlsc1Rlc3QuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL29zL0ZpbGVVdGlsc1Rlc3QuamF2YQppbmRleCAwZjJiODAzLi42MTZmNWFiNCAxMDA2NDQKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvb3MvRmlsZVV0aWxzVGVzdC5qYXZhCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL29zL0ZpbGVVdGlsc1Rlc3QuamF2YQpAQCAtMjYsNiArMjYsOCBAQAogCiBpbXBvcnQgY29tLmdvb2dsZS5hbmRyb2lkLmNvbGxlY3QuU2V0czsKIAoraW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKKwogaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKQEAgLTMzLDggKzM1LDYgQEAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogCi1pbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOwotCiBATWVkaXVtVGVzdAogcHVibGljIGNsYXNzIEZpbGVVdGlsc1Rlc3QgZXh0ZW5kcyBBbmRyb2lkVGVzdENhc2UgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0RBVEEgPQpAQCAtMTEyLDYgKzExMiwyMyBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoIiIsIEZpbGVVdGlscy5yZWFkVGV4dEZpbGUobVRlc3RGaWxlLCAtMTAsICI8PiIpKTsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q29udGFpbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgYXNzZXJ0VHJ1ZShGaWxlVXRpbHMuY29udGFpbnMobmV3IEZpbGUoIi8iKSwgbmV3IEZpbGUoIi9tb28udHh0IikpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShGaWxlVXRpbHMuY29udGFpbnMobmV3IEZpbGUoIi8iKSwgbmV3IEZpbGUoIi8iKSkpOworCisgICAgICAgIGFzc2VydFRydWUoRmlsZVV0aWxzLmNvbnRhaW5zKG5ldyBGaWxlKCIvc2RjYXJkIiksIG5ldyBGaWxlKCIvc2RjYXJkIikpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShGaWxlVXRpbHMuY29udGFpbnMobmV3IEZpbGUoIi9zZGNhcmQvIiksIG5ldyBGaWxlKCIvc2RjYXJkLyIpKSk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZShGaWxlVXRpbHMuY29udGFpbnMobmV3IEZpbGUoIi9zZGNhcmQiKSwgbmV3IEZpbGUoIi9zZGNhcmQvbW9vLnR4dCIpKSk7CisgICAgICAgIGFzc2VydFRydWUoRmlsZVV0aWxzLmNvbnRhaW5zKG5ldyBGaWxlKCIvc2RjYXJkLyIpLCBuZXcgRmlsZSgiL3NkY2FyZC9tb28udHh0IikpKTsKKworICAgICAgICBhc3NlcnRGYWxzZShGaWxlVXRpbHMuY29udGFpbnMobmV3IEZpbGUoIi9zZGNhcmQiKSwgbmV3IEZpbGUoIi9tb28udHh0IikpKTsKKyAgICAgICAgYXNzZXJ0RmFsc2UoRmlsZVV0aWxzLmNvbnRhaW5zKG5ldyBGaWxlKCIvc2RjYXJkLyIpLCBuZXcgRmlsZSgiL21vby50eHQiKSkpOworCisgICAgICAgIGFzc2VydEZhbHNlKEZpbGVVdGlscy5jb250YWlucyhuZXcgRmlsZSgiL3NkY2FyZCIpLCBuZXcgRmlsZSgiL3NkY2FyZC50eHQiKSkpOworICAgICAgICBhc3NlcnRGYWxzZShGaWxlVXRpbHMuY29udGFpbnMobmV3IEZpbGUoIi9zZGNhcmQvIiksIG5ldyBGaWxlKCIvc2RjYXJkLnR4dCIpKSk7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgdGVzdERlbGV0ZU9sZGVyRW1wdHlEaXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgRmlsZVV0aWxzLmRlbGV0ZU9sZGVyRmlsZXMobURpciwgMTAsIFdFRUtfSU5fTUlMTElTKTsKICAgICAgICAgYXNzZXJ0RGlyQ29udGVudHMoKTsKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3RleHQvSHRtbFRlc3QuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3RleHQvSHRtbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIyOThmNy4uMDAwMDAwMAotLS0gYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC90ZXh0L0h0bWxUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC50ZXh0OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlR5cGVmYWNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLkZvcmVncm91bmRDb2xvclNwYW47Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlF1b3RlU3BhbjsKLWltcG9ydCBhbmRyb2lkLnRleHQuc3R5bGUuU3RyaWtldGhyb3VnaFNwYW47Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlN0eWxlU3BhbjsKLWltcG9ydCBhbmRyb2lkLnRleHQuc3R5bGUuU3Vic2NyaXB0U3BhbjsKLWltcG9ydCBhbmRyb2lkLnRleHQuc3R5bGUuU3VwZXJzY3JpcHRTcGFuOwotaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5UZXh0QXBwZWFyYW5jZVNwYW47Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlR5cGVmYWNlU3BhbjsKLWltcG9ydCBhbmRyb2lkLnRleHQuc3R5bGUuVVJMU3BhbjsKLWltcG9ydCBhbmRyb2lkLnRleHQuc3R5bGUuVW5kZXJsaW5lU3BhbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIEh0bWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0gICAgQFNtYWxsVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RTaW5nbGVUYWdPbldoaWxlU3RyaW5nKCkgewotICAgICAgICBTcGFubmVkIHNwYW5uZWQgPSBIdG1sLmZyb21IdG1sKCI8Yj5oZWxsbzwvYj4iKTsKLSAgICAgICAgT2JqZWN0W10gc3BhbnMgPSBzcGFubmVkLmdldFNwYW5zKC0xLCAxMDAsIE9iamVjdC5jbGFzcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzcGFucy5sZW5ndGgpOwotICAgICAgICBPYmplY3Qgc3BhbiA9IHNwYW5zWzBdOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc3Bhbm5lZC5nZXRTcGFuU3RhcnQoc3BhbikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNSwgc3Bhbm5lZC5nZXRTcGFuRW5kKHNwYW4pKTsKLSAgICB9Ci0KLSAgICBAU21hbGxUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEVtcHR5Rm9udFRhZygpIHsKLSAgICAgICAgU3Bhbm5lZCBzcGFubmVkID0gSHRtbC5mcm9tSHRtbCgiSGVsbG8gPGZvbnQgY29sb3I9XCIjZmYwMGZmMDBcIj48L2ZvbnQ+Iik7Ci0gICAgICAgIE9iamVjdFtdIHNwYW5zID0gc3Bhbm5lZC5nZXRTcGFucygwLCAxMDAsIE9iamVjdC5jbGFzcyk7Ci0gICAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgd2hhdCB0aGUgc3BhbnMgc2hvdWxkIGJlIGFmdGVyIHRoZSBjcmFzaGVzIGFyZSBmaXhlZCBhbmQgYXNzZXJ0IHRoZW0uCi0gICAgfQotCi0gICAgLyoqIFRlc3RzIHRoYXQgdGhlIHBhcnNlciBjYW4gaGFuZGxlIG1hbC1mb3JtZWQgSFRNTC4gKi8KLSAgICBAU21hbGxUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEJhZEh0bWwoKSB7Ci0gICAgICAgIFNwYW5uZWQgc3Bhbm5lZCA9IEh0bWwuZnJvbUh0bWwoIkhlbGxvIDxiPmI8aT5iaTwvYj5pPC9pPiIpOwotICAgICAgICBPYmplY3RbXSBzcGFucyA9IHNwYW5uZWQuZ2V0U3BhbnMoMCwgMTAwLCBPYmplY3QuY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoVHlwZWZhY2UuSVRBTElDLCAoKFN0eWxlU3Bhbikgc3BhbnNbMF0pLmdldFN0eWxlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNywgc3Bhbm5lZC5nZXRTcGFuU3RhcnQoc3BhbnNbMF0pKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDksIHNwYW5uZWQuZ2V0U3BhbkVuZChzcGFuc1swXSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoVHlwZWZhY2UuQk9MRCwgKChTdHlsZVNwYW4pIHNwYW5zWzFdKS5nZXRTdHlsZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIHNwYW5uZWQuZ2V0U3BhblN0YXJ0KHNwYW5zWzFdKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg5LCBzcGFubmVkLmdldFNwYW5FbmQoc3BhbnNbMV0pKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFR5cGVmYWNlLklUQUxJQywgKChTdHlsZVNwYW4pIHNwYW5zWzJdKS5nZXRTdHlsZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDksIHNwYW5uZWQuZ2V0U3BhblN0YXJ0KHNwYW5zWzJdKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMCwgc3Bhbm5lZC5nZXRTcGFuRW5kKHNwYW5zWzJdKSk7Ci0gICAgfQotCi0gICAgQFNtYWxsVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RTeW1ib2xzKCkgewotICAgICAgICBTdHJpbmcgc3Bhbm5lZCA9IEh0bWwuZnJvbUh0bWwoIiZjb3B5OyAmZ3Q7ICZsdCIpLnRvU3RyaW5nKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiXHUwMGE5ID4gPCIsIHNwYW5uZWQpOwotICAgIH0KLSAgICAKLSAgICBAU21hbGxUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdENvbG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFNwYW5uZWQgczsKLSAgICAgICAgRm9yZWdyb3VuZENvbG9yU3BhbltdIGNvbG9yczsKLQotICAgICAgICBzID0gSHRtbC5mcm9tSHRtbCgiPGZvbnQgY29sb3I9XCIjMDBGRjAwXCI+c29tZXRoaW5nPC9mb250PiIpOwotICAgICAgICBjb2xvcnMgPSBzLmdldFNwYW5zKDAsIHMubGVuZ3RoKCksIEZvcmVncm91bmRDb2xvclNwYW4uY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29sb3JzLmxlbmd0aCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygweEZGMDBGRjAwLCBjb2xvcnNbMF0uZ2V0Rm9yZWdyb3VuZENvbG9yKCkpOwotCi0gICAgICAgIHMgPSBIdG1sLmZyb21IdG1sKCI8Zm9udCBjb2xvcj1cIm5hdnlcIj5zb21ldGhpbmc8L2ZvbnQ+Iik7Ci0gICAgICAgIGNvbG9ycyA9IHMuZ2V0U3BhbnMoMCwgcy5sZW5ndGgoKSwgRm9yZWdyb3VuZENvbG9yU3Bhbi5jbGFzcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb2xvcnMubGVuZ3RoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDB4RkYwMDAwODAsIGNvbG9yc1swXS5nZXRGb3JlZ3JvdW5kQ29sb3IoKSk7Ci0KLSAgICAgICAgcyA9IEh0bWwuZnJvbUh0bWwoIjxmb250IGNvbG9yPVwiZ2liYmVyaXNoXCI+c29tZXRoaW5nPC9mb250PiIpOwotICAgICAgICBjb2xvcnMgPSBzLmdldFNwYW5zKDAsIHMubGVuZ3RoKCksIEZvcmVncm91bmRDb2xvclNwYW4uY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgY29sb3JzLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgQFNtYWxsVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RSZXNvdXJjZUNvbG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIENvbG9yU3RhdGVMaXN0IGMgPQotICAgICAgICAgICAgICAgIFJlc291cmNlcy5nZXRTeXN0ZW0oKS5nZXRDb2xvclN0YXRlTGlzdChhbmRyb2lkLlIuY29sb3IucHJpbWFyeV90ZXh0X2RhcmspOwotICAgICAgICBTcGFubmVkIHM7Ci0gICAgICAgIFRleHRBcHBlYXJhbmNlU3BhbltdIGNvbG9yczsKLQotICAgICAgICBzID0gSHRtbC5mcm9tSHRtbCgiPGZvbnQgY29sb3I9XCJAYW5kcm9pZDpjb2xvci9wcmltYXJ5X3RleHRfZGFya1wiPnNvbWV0aGluZzwvZm9udD4iKTsKLSAgICAgICAgY29sb3JzID0gcy5nZXRTcGFucygwLCBzLmxlbmd0aCgpLCBUZXh0QXBwZWFyYW5jZVNwYW4uY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29sb3JzLmxlbmd0aCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjLnRvU3RyaW5nKCksIGNvbG9yc1swXS5nZXRUZXh0Q29sb3IoKS50b1N0cmluZygpKTsKLQotICAgICAgICBzID0gSHRtbC5mcm9tSHRtbCgiPGZvbnQgY29sb3I9XCJAYW5kcm9pZDpwcmltYXJ5X3RleHRfZGFya1wiPnNvbWV0aGluZzwvZm9udD4iKTsKLSAgICAgICAgY29sb3JzID0gcy5nZXRTcGFucygwLCBzLmxlbmd0aCgpLCBUZXh0QXBwZWFyYW5jZVNwYW4uY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29sb3JzLmxlbmd0aCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjLnRvU3RyaW5nKCksIGNvbG9yc1swXS5nZXRUZXh0Q29sb3IoKS50b1N0cmluZygpKTsKLQotICAgICAgICBzID0gSHRtbC5mcm9tSHRtbCgiPGZvbnQgY29sb3I9XCJAY29sb3IvcHJpbWFyeV90ZXh0X2RhcmtcIj5zb21ldGhpbmc8L2ZvbnQ+Iik7Ci0gICAgICAgIGNvbG9ycyA9IHMuZ2V0U3BhbnMoMCwgcy5sZW5ndGgoKSwgVGV4dEFwcGVhcmFuY2VTcGFuLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbG9ycy5sZW5ndGgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoYy50b1N0cmluZygpLCBjb2xvcnNbMF0uZ2V0VGV4dENvbG9yKCkudG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgcyA9IEh0bWwuZnJvbUh0bWwoIjxmb250IGNvbG9yPVwiQHByaW1hcnlfdGV4dF9kYXJrXCI+c29tZXRoaW5nPC9mb250PiIpOwotICAgICAgICBjb2xvcnMgPSBzLmdldFNwYW5zKDAsIHMubGVuZ3RoKCksIFRleHRBcHBlYXJhbmNlU3Bhbi5jbGFzcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb2xvcnMubGVuZ3RoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGMudG9TdHJpbmcoKSwgY29sb3JzWzBdLmdldFRleHRDb2xvcigpLnRvU3RyaW5nKCkpOwotCi0gICAgICAgIHMgPSBIdG1sLmZyb21IdG1sKCI8Zm9udCBjb2xvcj1cIkAiICsgYW5kcm9pZC5SLmNvbG9yLnByaW1hcnlfdGV4dF9kYXJrCi0gICAgICAgICAgICAgICAgKyAiXCI+c29tZXRoaW5nPC9mb250PiIpOwotICAgICAgICBjb2xvcnMgPSBzLmdldFNwYW5zKDAsIHMubGVuZ3RoKCksIFRleHRBcHBlYXJhbmNlU3Bhbi5jbGFzcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb2xvcnMubGVuZ3RoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGMudG9TdHJpbmcoKSwgY29sb3JzWzBdLmdldFRleHRDb2xvcigpLnRvU3RyaW5nKCkpOwotCi0gICAgICAgIHMgPSBIdG1sLmZyb21IdG1sKCI8Zm9udCBjb2xvcj1cImdpYmJlcmlzaFwiPnNvbWV0aGluZzwvZm9udD4iKTsKLSAgICAgICAgY29sb3JzID0gcy5nZXRTcGFucygwLCBzLmxlbmd0aCgpLCBUZXh0QXBwZWFyYW5jZVNwYW4uY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoY29sb3JzLmxlbmd0aCwgMCk7Ci0gICAgfQotCi0gICAgQFNtYWxsVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RQYXJhZ3JhcGhzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFNwYW5uYWJsZVN0cmluZyBzOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyB3b3JsZCIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksICI8cD5IZWxsbyB3b3JsZDwvcD5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyB3b3JsZFxub3Igc29tZXRoaW5nIik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhIdG1sLnRvSHRtbChzKSwgIjxwPkhlbGxvIHdvcmxkPGJyPlxub3Igc29tZXRoaW5nPC9wPlxuIik7Ci0KLSAgICAgICAgcyA9IG5ldyBTcGFubmFibGVTdHJpbmcoIkhlbGxvIHdvcmxkXG5cbm9yIHNvbWV0aGluZyIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksICI8cD5IZWxsbyB3b3JsZDwvcD5cbjxwPm9yIHNvbWV0aGluZzwvcD5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyB3b3JsZFxuXG5cbm9yIHNvbWV0aGluZyIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksICI8cD5IZWxsbyB3b3JsZDxicj48L3A+XG48cD5vciBzb21ldGhpbmc8L3A+XG4iKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoImZvb1xuYmFyIiwgSHRtbC5mcm9tSHRtbCgiZm9vPGJyPmJhciIpLnRvU3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImZvb1xuYmFyIiwgSHRtbC5mcm9tSHRtbCgiZm9vPGJyPlxuYmFyIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZm9vXG5iYXIiLCBIdG1sLmZyb21IdG1sKCJmb288YnI+XG4gXG5iYXIiKS50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICBAU21hbGxUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEJsb2NrcXVvdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3Bhbm5hYmxlU3RyaW5nIHM7Ci0KLSAgICAgICAgcyA9IG5ldyBTcGFubmFibGVTdHJpbmcoIkhlbGxvIHdvcmxkIik7Ci0gICAgICAgIHMuc2V0U3BhbihuZXcgUXVvdGVTcGFuKCksIDAsIHMubGVuZ3RoKCksIFNwYW5uYWJsZS5TUEFOX1BBUkFHUkFQSCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhIdG1sLnRvSHRtbChzKSwgIjxibG9ja3F1b3RlPjxwPkhlbGxvIHdvcmxkPC9wPlxuPC9ibG9ja3F1b3RlPlxuIik7Ci0KLSAgICAgICAgcyA9IG5ldyBTcGFubmFibGVTdHJpbmcoIkhlbGxvXG5cbndvcmxkIik7Ci0gICAgICAgIHMuc2V0U3BhbihuZXcgUXVvdGVTcGFuKCksIDAsIDcsIFNwYW5uYWJsZS5TUEFOX1BBUkFHUkFQSCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhIdG1sLnRvSHRtbChzKSwgIjxibG9ja3F1b3RlPjxwPkhlbGxvPC9wPlxuPC9ibG9ja3F1b3RlPlxuPHA+d29ybGQ8L3A+XG4iKTsKLSAgICB9Ci0KLSAgICBAU21hbGxUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEVudGl0aWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFNwYW5uYWJsZVN0cmluZyBzOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyA8Jj4gd29ybGQiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8gJmx0OyZhbXA7Jmd0OyB3b3JsZDwvcD5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyBcdTAzRDUgd29ybGQiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8gJiM5ODE7IHdvcmxkPC9wPlxuIik7Ci0KLSAgICAgICAgcyA9IG5ldyBTcGFubmFibGVTdHJpbmcoIkhlbGxvICB3b3JsZCIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksICI8cD5IZWxsbyZuYnNwOyB3b3JsZDwvcD5cbiIpOwotICAgIH0KLQotICAgIEBTbWFsbFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0TWFya3VwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFNwYW5uYWJsZVN0cmluZyBzOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyBib2xkIHdvcmxkIik7Ci0gICAgICAgIHMuc2V0U3BhbihuZXcgU3R5bGVTcGFuKFR5cGVmYWNlLkJPTEQpLCA2LCBzLmxlbmd0aCgpIC0gNiwKLSAgICAgICAgICAgICAgICAgIFNwYW5uYWJsZS5TUEFOX0VYQ0xVU0lWRV9JTkNMVVNJVkUpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksICI8cD5IZWxsbyA8Yj5ib2xkPC9iPiB3b3JsZDwvcD5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyBpdGFsaWMgd29ybGQiKTsKLSAgICAgICAgcy5zZXRTcGFuKG5ldyBTdHlsZVNwYW4oVHlwZWZhY2UuSVRBTElDKSwgNiwgcy5sZW5ndGgoKSAtIDYsCi0gICAgICAgICAgICAgICAgICBTcGFubmFibGUuU1BBTl9FWENMVVNJVkVfSU5DTFVTSVZFKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8gPGk+aXRhbGljPC9pPiB3b3JsZDwvcD5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyBtb25vc3BhY2Ugd29ybGQiKTsKLSAgICAgICAgcy5zZXRTcGFuKG5ldyBUeXBlZmFjZVNwYW4oIm1vbm9zcGFjZSIpLCA2LCBzLmxlbmd0aCgpIC0gNiwKLSAgICAgICAgICAgICAgICAgIFNwYW5uYWJsZS5TUEFOX0VYQ0xVU0lWRV9JTkNMVVNJVkUpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksICI8cD5IZWxsbyA8dHQ+bW9ub3NwYWNlPC90dD4gd29ybGQ8L3A+XG4iKTsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gc3VwZXJzY3JpcHQgd29ybGQiKTsKLSAgICAgICAgcy5zZXRTcGFuKG5ldyBTdXBlcnNjcmlwdFNwYW4oKSwgNiwgcy5sZW5ndGgoKSAtIDYsCi0gICAgICAgICAgICAgICAgICBTcGFubmFibGUuU1BBTl9FWENMVVNJVkVfSU5DTFVTSVZFKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8gPHN1cD5zdXBlcnNjcmlwdDwvc3VwPiB3b3JsZDwvcD5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyBzdWJzY3JpcHQgd29ybGQiKTsKLSAgICAgICAgcy5zZXRTcGFuKG5ldyBTdWJzY3JpcHRTcGFuKCksIDYsIHMubGVuZ3RoKCkgLSA2LAotICAgICAgICAgICAgICAgICAgU3Bhbm5hYmxlLlNQQU5fRVhDTFVTSVZFX0lOQ0xVU0lWRSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhIdG1sLnRvSHRtbChzKSwgIjxwPkhlbGxvIDxzdWI+c3Vic2NyaXB0PC9zdWI+IHdvcmxkPC9wPlxuIik7Ci0KLSAgICAgICAgcyA9IG5ldyBTcGFubmFibGVTdHJpbmcoIkhlbGxvIHVuZGVybGluZSB3b3JsZCIpOwotICAgICAgICBzLnNldFNwYW4obmV3IFVuZGVybGluZVNwYW4oKSwgNiwgcy5sZW5ndGgoKSAtIDYsCi0gICAgICAgICAgICAgICAgICBTcGFubmFibGUuU1BBTl9FWENMVVNJVkVfSU5DTFVTSVZFKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8gPHU+dW5kZXJsaW5lPC91PiB3b3JsZDwvcD5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyBzdHJ1Y2sgd29ybGQiKTsKLSAgICAgICAgcy5zZXRTcGFuKG5ldyBTdHJpa2V0aHJvdWdoU3BhbigpLCA2LCBzLmxlbmd0aCgpIC0gNiwKLSAgICAgICAgICAgICAgICAgIFNwYW5uYWJsZS5TUEFOX0VYQ0xVU0lWRV9JTkNMVVNJVkUpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksICI8cD5IZWxsbyA8c3RyaWtlPnN0cnVjazwvc3RyaWtlPiB3b3JsZDwvcD5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyBsaW5reSB3b3JsZCIpOwotICAgICAgICBzLnNldFNwYW4obmV3IFVSTFNwYW4oImh0dHA6Ly93d3cuZ29vZ2xlLmNvbSIpLCA2LCBzLmxlbmd0aCgpIC0gNiwKLSAgICAgICAgICAgICAgICAgIFNwYW5uYWJsZS5TUEFOX0VYQ0xVU0lWRV9JTkNMVVNJVkUpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksCi0gICAgICAgICAgICAgICAgICAgICAiPHA+SGVsbG8gPGEgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwiPmxpbmt5PC9hPiB3b3JsZDwvcD5cbiIpOwotICAgIH0KLQotICAgIEBTbWFsbFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0SW1nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFNwYW5uZWQgczsKLQotICAgICAgICBzID0gSHRtbC5mcm9tSHRtbCgieWVzPGltZyBzcmM9XCJodHRwOi8vZXhhbXBsZS5jb20vZm9vLmdpZlwiPm5vIik7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCI8cD55ZXM8aW1nIHNyYz1cImh0dHA6Ly9leGFtcGxlLmNvbS9mb28uZ2lmXCI+bm88L3A+XG4iLAotICAgICAgICAgICAgICAgICAgICAgSHRtbC50b0h0bWwocykpOwotICAgIH0KLQotICAgIEBTbWFsbFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0VXRmOCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTcGFubmVkIHM7Ci0KLSAgICAgICAgcyA9IEh0bWwuZnJvbUh0bWwoIjxwPlx1MDEyNFx1MDBlYlx1MDE0Mlx1MDE0Mm8sIHdvcmxkITwvcD4iKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCI8cD4mIzI5MjsmIzIzNTsmIzMyMjsmIzMyMjtvLCB3b3JsZCE8L3A+XG4iLCBIdG1sLnRvSHRtbChzKSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9kYXRhL2tleWJvYXJkcy9BVlJDUC5rbCBiL2RhdGEva2V5Ym9hcmRzL0FWUkNQLmtsCmluZGV4IDRjOTFlY2UuLjczNmI0M2MgMTAwNjQ0Ci0tLSBhL2RhdGEva2V5Ym9hcmRzL0FWUkNQLmtsCisrKyBiL2RhdGEva2V5Ym9hcmRzL0FWUkNQLmtsCkBAIC0xNCw4ICsxNCw4IEBACiAKICMgS2V5IGxheW91dCB1c2VkIGZvciBCbHVldG9vdGggQVZSQ1Agc3VwcG9ydC4KIAota2V5IDIwMCAgIE1FRElBX1BMQVlfUEFVU0UgICAgV0FLRQota2V5IDIwMSAgIE1FRElBX1BMQVlfUEFVU0UgICAgV0FLRQora2V5IDIwMCAgIE1FRElBX1BMQVkgICAgICAgICAgV0FLRQora2V5IDIwMSAgIE1FRElBX1BBVVNFICAgICAgICAgV0FLRQoga2V5IDE2NiAgIE1FRElBX1NUT1AgICAgICAgICAgV0FLRQoga2V5IDE2MyAgIE1FRElBX05FWFQgICAgICAgICAgV0FLRQoga2V5IDE2NSAgIE1FRElBX1BSRVZJT1VTICAgICAgV0FLRQpkaWZmIC0tZ2l0IGEvZGF0YS9rZXlib2FyZHMvR2VuZXJpYy5rbCBiL2RhdGEva2V5Ym9hcmRzL0dlbmVyaWMua2wKaW5kZXggMTQxMzMxOS4uMjA0MjM0NSAxMDA2NDQKLS0tIGEvZGF0YS9rZXlib2FyZHMvR2VuZXJpYy5rbAorKysgYi9kYXRhL2tleWJvYXJkcy9HZW5lcmljLmtsCkBAIC00MjMsMyArNDIzLDE2IEBACiBheGlzIDB4MGEgQlJBS0UKIGF4aXMgMHgxMCBIQVRfWAogYXhpcyAweDExIEhBVF9ZCisKKyMgTEVEcworbGVkIDB4MDAgTlVNX0xPQ0sKK2xlZCAweDAxIENBUFNfTE9DSworbGVkIDB4MDIgU0NST0xMX0xPQ0sKK2xlZCAweDAzIENPTVBPU0UKK2xlZCAweDA0IEtBTkEKK2xlZCAweDA1IFNMRUVQCitsZWQgMHgwNiBTVVNQRU5ECitsZWQgMHgwNyBNVVRFCitsZWQgMHgwOCBNSVNDCitsZWQgMHgwOSBNQUlMCitsZWQgMHgwYSBDSEFSR0lORwpkaWZmIC0tZ2l0IGEvZGF0YS9rZXlib2FyZHMvVmVuZG9yXzBhNWNfUHJvZHVjdF84NTAyLmtsIGIvZGF0YS9rZXlib2FyZHMvVmVuZG9yXzBhNWNfUHJvZHVjdF84NTAyLmtsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZGJmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kYXRhL2tleWJvYXJkcy9WZW5kb3JfMGE1Y19Qcm9kdWN0Xzg1MDIua2wKQEAgLTAsMCArMSw0MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBSaG9kaQorCitrZXkgMzA0IEJVVFRPTl9BCitrZXkgMzA1IEJVVFRPTl9CCitrZXkgMzA3IEJVVFRPTl9YCitrZXkgMzA4IEJVVFRPTl9ZCitrZXkgMzEwIEJVVFRPTl9MMQora2V5IDMxMSBCVVRUT05fUjEKK2tleSAzMTYgQlVUVE9OX01PREUKK2tleSAzMTcgQlVUVE9OX1RIVU1CTAora2V5IDMxOCBCVVRUT05fVEhVTUJSCisKK2tleSAxNTggQkFDSyAgICAgICAgICAgIFdBS0VfRFJPUFBFRAora2V5IDE3MiBIT01FCisKK2F4aXMgMHgwMCBYCitheGlzIDB4MDEgWQorYXhpcyAweDAyIFoKK2F4aXMgMHgwNSBSWgorYXhpcyAweDA5IFJUUklHR0VSCitheGlzIDB4MGEgTFRSSUdHRVIKK2F4aXMgMHgxMCBIQVRfWAorYXhpcyAweDExIEhBVF9ZCisKK2xlZCAweDAwIENPTlRST0xMRVJfMQorbGVkIDB4MDEgQ09OVFJPTExFUl8yCitsZWQgMHgwMiBDT05UUk9MTEVSXzMKK2xlZCAweDAzIENPTlRST0xMRVJfNApkaWZmIC0tZ2l0IGEvZGF0YS9zb3VuZHMvZWZmZWN0cy9vZ2cvS2V5cHJlc3NJbnZhbGlkXzQ4ay5vZ2cgYi9kYXRhL3NvdW5kcy9lZmZlY3RzL29nZy9LZXlwcmVzc0ludmFsaWRfNDhrLm9nZwppbmRleCAyNDkzNWFkLi5kMTg0M2E3IDEwMDY0NAotLS0gYS9kYXRhL3NvdW5kcy9lZmZlY3RzL29nZy9LZXlwcmVzc0ludmFsaWRfNDhrLm9nZworKysgYi9kYXRhL3NvdW5kcy9lZmZlY3RzL29nZy9LZXlwcmVzc0ludmFsaWRfNDhrLm9nZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9idXR0b25zLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvYnV0dG9ucy5qZAppbmRleCAxZjdlMjVkLi4yYTc3ZTI0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9idXR0b25zLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL2J1dHRvbnMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUJ1dHRvbnMKLXBhZ2UudGFncz0iYnV0dG9uIiwiaW5wdXQiCitwYWdlLnRhZ3M9YnV0dG9uLGlucHV0CiBAamQ6Ym9keQogCiA8YSBjbGFzcz0ibm90aWNlLWRldmVsb3BlcnMiIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvdWkvY29udHJvbHMvYnV0dG9uLmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvZGlhbG9ncy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL2RpYWxvZ3MuamQKaW5kZXggZjRiYjg3ZS4uZjk4OTdmNCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvZGlhbG9ncy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9kaWFsb2dzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1EaWFsb2dzCi1wYWdlLnRhZ3M9ImRpYWxvZyIsImFsZXJ0IiwicG9wdXAiLCJ0b2FzdCIKK3BhZ2UudGFncz1kaWFsb2csYWxlcnQscG9wdXAsdG9hc3QKIEBqZDpib2R5CiAKIDxhIGNsYXNzPSJub3RpY2UtZGV2ZWxvcGVycyIgaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy91aS9kaWFsb2dzLmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvZ3JpZC1saXN0cy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL2dyaWQtbGlzdHMuamQKaW5kZXggMWEwOWVmNS4uY2VmNzUxNCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvZ3JpZC1saXN0cy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9ncmlkLWxpc3RzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1HcmlkIExpc3RzCi1wYWdlLnRhZ3M9ImdyaWR2aWV3IiwibGF5b3V0IiwibGlzdHZpZXciCitwYWdlLnRhZ3M9Z3JpZHZpZXcsbGF5b3V0LGxpc3R2aWV3CiBAamQ6Ym9keQogCiA8aW1nIHNyYz0ie0Bkb2NSb290fWRlc2lnbi9tZWRpYS9ncmlkdmlld19vdmVydmlldy5wbmciPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvbGlzdHMuamQgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9saXN0cy5qZAppbmRleCA1NTE0ODI0Li41NGZhNDQyIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9saXN0cy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9saXN0cy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TGlzdHMKLXBhZ2UudGFncz0ibGlzdHZpZXciLCJsYXlvdXQiCitwYWdlLnRhZ3M9bGlzdHZpZXcsbGF5b3V0CiBAamQ6Ym9keQogCiA8YSBjbGFzcz0ibm90aWNlLWRldmVsb3BlcnMiIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvdWkvbGF5b3V0L2xpc3R2aWV3Lmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvcGlja2Vycy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3BpY2tlcnMuamQKaW5kZXggNmRkNzJiYS4uODYwYTEyNiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvcGlja2Vycy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9waWNrZXJzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1QaWNrZXJzCi1wYWdlLnRhZ3M9ImRhdGVwaWNrZXIiLCJ0aW1lcGlja2VyIgorcGFnZS50YWdzPWRhdGVwaWNrZXIsdGltZXBpY2tlcgogQGpkOmJvZHkKIAogPGEgY2xhc3M9Im5vdGljZS1kZXZlbG9wZXJzIiBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3BpY2tlcnMuaHRtbCI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9wcm9ncmVzcy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3Byb2dyZXNzLmpkCmluZGV4IDkwNzMyZjQuLjY5NDZhNzUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3Byb2dyZXNzLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3Byb2dyZXNzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Qcm9ncmVzcyAmYW1wOyBBY3Rpdml0eQotcGFnZS50YWdzPSJwcm9ncmVzc2JhciIsImRvd25sb2FkIiwibmV0d29yayIKK3BhZ2UudGFncz1wcm9ncmVzc2Jhcixkb3dubG9hZCxuZXR3b3JrCiBAamQ6Ym9keQogCiA8cD5Qcm9ncmVzcyBiYXJzIGFuZCBhY3Rpdml0eSBpbmRpY2F0b3JzIHNpZ25hbCB0byB1c2VycyB0aGF0IHNvbWV0aGluZyBpcyBoYXBwZW5pbmcgdGhhdCB3aWxsIHRha2UgYSBtb21lbnQuPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc2Nyb2xsaW5nLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc2Nyb2xsaW5nLmpkCmluZGV4IDEzYjNiMDkuLjQxZTdjZWMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3Njcm9sbGluZy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zY3JvbGxpbmcuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNjcm9sbGluZwotcGFnZS50YWdzPSJzY3JvbGx2aWV3IiwibGlzdHZpZXciCitwYWdlLnRhZ3M9c2Nyb2xsdmlldyxsaXN0dmlldwogQGpkOmJvZHkKIAogPHA+U2Nyb2xsaW5nIGFsbG93cyB0aGUgdXNlciB0byBuYXZpZ2F0ZSB0byBjb250ZW50IGluIHRoZSBvdmVyZmxvdyB1c2luZyBhIHN3aXBlIGdlc3R1cmUuIFRoZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc2Vlay1iYXJzLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc2Vlay1iYXJzLmpkCmluZGV4IDlkMzhlMzYuLjE0NjU2ODggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3NlZWstYmFycy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zZWVrLWJhcnMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNlZWsgQmFycyBhbmQgU2xpZGVycwotcGFnZS50YWdzPSJzZWVrYmFyIiwicHJvZ3Jlc3NiYXIiCitwYWdlLnRhZ3M9c2Vla2Jhcixwcm9ncmVzc2JhcgogQGpkOmJvZHkKIAogPHA+SW50ZXJhY3RpdmUgc2xpZGVycyBtYWtlIGl0IHBvc3NpYmxlIHRvIHNlbGVjdCBhIHZhbHVlIGZyb20gYSBjb250aW51b3VzIG9yIGRpc2NyZXRlIHJhbmdlIG9mIHZhbHVlcwpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc3Bpbm5lcnMuamQgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zcGlubmVycy5qZAppbmRleCBjMDBiNjM5Li5mOGQ5MmQ0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zcGlubmVycy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zcGlubmVycy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U3Bpbm5lcnMKLXBhZ2UudGFncz0ic3Bpbm5lciIsImRyb3Bkb3duIgorcGFnZS50YWdzPXNwaW5uZXIsZHJvcGRvd24KIEBqZDpib2R5CiAKIDxhIGNsYXNzPSJub3RpY2UtZGV2ZWxvcGVycyIgaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy91aS9jb250cm9scy9zcGlubmVyLmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc3dpdGNoZXMuamQgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zd2l0Y2hlcy5qZAppbmRleCA3NGNhYjVhLi5iMjk0Njg5IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zd2l0Y2hlcy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zd2l0Y2hlcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U3dpdGNoZXMKLXBhZ2UudGFncz0ic3dpdGNoIiwiY2hlY2tib3giLCJyYWRpb2J1dHRvbiIsImJ1dHRvbiIKK3BhZ2UudGFncz1zd2l0Y2gsY2hlY2tib3gscmFkaW9idXR0b24sYnV0dG9uCiBAamQ6Ym9keQogCiA8cD5Td2l0Y2hlcyBhbGxvdyB0aGUgdXNlciB0byBzZWxlY3Qgb3B0aW9ucy4gVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIHN3aXRjaGVzOiBjaGVja2JveGVzLCByYWRpbwpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvdGFicy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3RhYnMuamQKaW5kZXggNWE1ZGE1ZDguLjFmYTM0NjEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3RhYnMuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvdGFicy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VGFicwotcGFnZS50YWdzPSJ0YWJzIiwiYWN0aW9uYmFyIiwibmF2aWdhdGlvbiIsInZpZXdwYWdlciIKK3BhZ2UudGFncz10YWJzLGFjdGlvbmJhcixuYXZpZ2F0aW9uLHZpZXdwYWdlcgogQGpkOmJvZHkKIAogPGltZyBzcmM9IntAZG9jUm9vdH1kZXNpZ24vbWVkaWEvdGFic19vdmVydmlldy5wbmciPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvdGV4dC1maWVsZHMuamQgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy90ZXh0LWZpZWxkcy5qZAppbmRleCAzODM1MzFiLi40NTQ1YmZiIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy90ZXh0LWZpZWxkcy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy90ZXh0LWZpZWxkcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VGV4dCBGaWVsZHMKLXBhZ2UudGFncz0idGV4dCIsImVkaXR0ZXh0IiwiaW5wdXQiCitwYWdlLnRhZ3M9dGV4dCxlZGl0dGV4dCxpbnB1dAogQGpkOmJvZHkKIAogPGEgY2xhc3M9Im5vdGljZS1kZXZlbG9wZXJzIiBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3RleHQuaHRtbCI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL2Rvd25sb2Fkcy9pbmRleC5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vZG93bmxvYWRzL2luZGV4LmpkCmluZGV4IDE2ZjU1MDkuLmRkZWRhNWMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vZG93bmxvYWRzL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vZG93bmxvYWRzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Eb3dubG9hZHMKLXBhZ2UgdGFncz0iSWNvbnMiLCAic3RlbmNpbHMiLCAiY29sb3Igc3dhdGNoZXMiCitwYWdlLnRhZ3M9SWNvbnMsc3RlbmNpbHMsY29sb3Igc3dhdGNoZXMKIEBqZDpib2R5CiAKIDxkaXYgY2xhc3M9ImxheW91dC1jb250ZW50LXJvdyI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2FjY2Vzc2liaWxpdHkuamQgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2FjY2Vzc2liaWxpdHkuamQKaW5kZXggNTMyOTAwZS4uNTBjODJmZSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9hY2Nlc3NpYmlsaXR5LmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvYWNjZXNzaWJpbGl0eS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QWNjZXNzaWJpbGl0eQotcGFnZS50YWdzPSJhY2Nlc3NpYmlsaXR5IiwibmF2aWdhdGlvbiIsImlucHV0IgorcGFnZS50YWdzPWFjY2Vzc2liaWxpdHksbmF2aWdhdGlvbixpbnB1dAogQGpkOmJvZHkKIAogPGEgY2xhc3M9Im5vdGljZS1kZXZlbG9wZXJzIiBocmVmPSJ7QGRvY1Jvb3R9dHJhaW5pbmcvYWNjZXNzaWJpbGl0eS9pbmRleC5odG1sIj4KQEAgLTg2LDQgKzg2LDQgQEAKICAgPGxpPlByb3ZpZGUgYWx0ZXJuYXRpdmVzIHRvIGFmZm9yZGFuY2VzIHRoYXQgdGltZSBvdXQ8L2xpPgogICA8bGk+VXNlIHN0YW5kYXJkIGZyYW1ld29yayBjb250cm9scyBvciBlbmFibGUgVGFsa0JhY2sgZm9yIGN1c3RvbSBjb250cm9sczwvbGk+CiAgIDxsaT5UcnkgaXQgb3V0IHlvdXJzZWxmPC9saT4KLTwvdWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC91bD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvYWN0aW9uYmFyLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9hY3Rpb25iYXIuamQKaW5kZXggYjZlM2ExNi4uZjAxMDRiNSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9hY3Rpb25iYXIuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9hY3Rpb25iYXIuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFjdGlvbiBCYXIKLXBhZ2UudGFncz0iYWN0aW9uYmFyIiwibmF2aWdhdGlvbiIKK3BhZ2UudGFncz1hY3Rpb25iYXIsbmF2aWdhdGlvbgogQGpkOmJvZHkKIAogPGltZyBzcmM9IntAZG9jUm9vdH1kZXNpZ24vbWVkaWEvYWN0aW9uX2Jhcl9wYXR0ZXJuX292ZXJ2aWV3LnBuZyI+CkBAIC0yNzcsNCArMjc3LDQgQEAKIDxwPlNvbWV0aW1lcyBpdCBpcyBpbXBvcnRhbnQgdG8gZGlzcGxheSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGZvciB5b3VyIGFwcCB0aGF0J3MgYWx3YXlzIHZpc2libGUuCiBFeGFtcGxlcyBhcmUgdGhlIG51bWJlciBvZiB1bnJlYWQgbWVzc2FnZXMgaW4gYSBtZXNzYWdpbmcgaW5ib3ggdmlldyBvciB0aGUgTm93IFBsYXlpbmcgaW5mb3JtYXRpb24KIGluIGEgbXVzaWMgcGxheWVyLiBDYXJlZnVsbHkgcGxhbiB3aGljaCBpbXBvcnRhbnQgaW5mb3JtYXRpb24geW91IHdvdWxkIGxpa2UgdG8gZGlzcGxheSBhbmQKLXN0cnVjdHVyZSB5b3VyIGFjdGlvbiBiYXJzIGFjY29yZGluZ2x5LjwvcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitzdHJ1Y3R1cmUgeW91ciBhY3Rpb24gYmFycyBhY2NvcmRpbmdseS48L3A+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2FwcC1zdHJ1Y3R1cmUuamQgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2FwcC1zdHJ1Y3R1cmUuamQKaW5kZXggMTQ0N2Q0ZS4uZTBhMTFlZCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9hcHAtc3RydWN0dXJlLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvYXBwLXN0cnVjdHVyZS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QXBwIFN0cnVjdHVyZQotcGFnZS50YWdzPSJuYXZpZ2F0aW9uIiwibGF5b3V0IiwidGFibGV0IgorcGFnZS50YWdzPW5hdmlnYXRpb24sbGF5b3V0LHRhYmxldAogQGpkOmJvZHkKIAogICAgIDxwPkFwcHMgY29tZSBpbiBtYW55IHZhcmlldGllcyB0aGF0IGFkZHJlc3MgdmVyeSBkaWZmZXJlbnQgbmVlZHMuIEZvciBleGFtcGxlOjwvcD4KQEAgLTMwNyw0ICszMDcsNCBAQAogPGxpPgogPHA+QWxsb3cgZm9yIHF1aWNrIG5hdmlnYXRpb24gYmV0d2VlbiBkZXRhaWwgaXRlbXMgd2l0aCBzd2lwZSB2aWV3cy48L3A+CiA8L2xpPgotPC91bD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L3VsPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9idXR0b25zLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9idXR0b25zLmpkCmluZGV4IDQ2ZTQxYzguLjJkNjViMmQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvYnV0dG9ucy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2J1dHRvbnMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUJ1dHRvbnMKLXBhZ2UudGFncz0iYnV0dG9ucyIKK3BhZ2UudGFncz1idXR0b25zCiBAamQ6Ym9keQogCiA8cD4KQEAgLTE0OCw0ICsxNDgsNCBAQAogICBSZXBsYWNlIHByZXZpb3VzIGltcGxlbWVudGF0aW9ucyBvZiBMaWdodHMgT3V0IG1vZGUgd2l0aCB0aGUgTGVhbiBCYWNrIG9yCiAgIEltbWVyc2l2ZSBhcHByb2FjaGVzLiBDb250aW51ZSB0byB1c2UgTGlnaHRzIE91dCBtb2RlIGZvciBpbXBsZW1lbnRhdGlvbnMgb2YKICAgeW91ciBhcHAgdGFyZ2V0ZWQgZm9yIGVhcmxpZXIgcmVsZWFzZXMuCi08L3A+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9jb21wYXRpYmlsaXR5LmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9jb21wYXRpYmlsaXR5LmpkCmluZGV4IDVjYTZkOGIuLjVhMTU2MmMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvY29tcGF0aWJpbGl0eS5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2NvbXBhdGliaWxpdHkuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUJhY2t3YXJkcyBDb21wYXRpYmlsaXR5Ci1wYWdlLnRhZ3M9InN1cHBvcnQiCitwYWdlLnRhZ3M9c3VwcG9ydAogQGpkOmJvZHkKIAogPGEgY2xhc3M9Im5vdGljZS1kZXZlbG9wZXJzIiBocmVmPSJ7QGRvY1Jvb3R9dHJhaW5pbmcvYmFzaWNzL3N1cHBvcnRpbmctZGV2aWNlcy9pbmRleC5odG1sIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvY29uZmlybWluZy1hY2tub3dsZWRnaW5nLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9jb25maXJtaW5nLWFja25vd2xlZGdpbmcuamQKaW5kZXggZTM0NzIzMS4uZDM5ZDMyZCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9jb25maXJtaW5nLWFja25vd2xlZGdpbmcuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9jb25maXJtaW5nLWFja25vd2xlZGdpbmcuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUNvbmZpcm1pbmcgJmFtcDsgQWNrbm93bGVkZ2luZwotcGFnZS50YWdzPSJkaWFsb2ciLCJ0b2FzdCIsIm5vdGlmaWNhdGlvbiIKK3BhZ2UudGFncz1kaWFsb2csdG9hc3Qsbm90aWZpY2F0aW9uCiBAamQ6Ym9keQogCiA8cD5JbiBzb21lIHNpdHVhdGlvbnMsIHdoZW4gYSB1c2VyIGludm9rZXMgYW4gYWN0aW9uIGluIHlvdXIgYXBwLCBpdCdzIGEgZ29vZCBpZGVhIHRvIDxlbT5jb25maXJtPC9lbT4gb3IgPGVtPmFja25vd2xlZGdlPC9lbT4gdGhhdCBhY3Rpb24gdGhyb3VnaCB0ZXh0LjwvcD4KQEAgLTY3LDQgKzY3LDQgQEAKICAgICA8cD48c3Ryb25nPkFja25vd2xlZGdtZW50IGlzIHVubmVjZXNzYXJ5PC9zdHJvbmc+LiBUaGUgdXNlciB3aWxsIGtub3cgdGhlIGFwcCBpcyBnb25lIGZyb20gdGhlIEhvbWUgU2NyZWVuIGJlY2F1c2UgdGhleSBtYWRlIGl0IGRpc2FwcGVhciBieSBkcmFnZ2luZyBpdCBhd2F5LjwvcD4KIAogICA8L2Rpdj4KLTwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvZGl2PgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9mdWxsc2NyZWVuLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9mdWxsc2NyZWVuLmpkCmluZGV4IGRlMDE2ZmUuLjYyNGQ0NGMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvZnVsbHNjcmVlbi5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2Z1bGxzY3JlZW4uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUZ1bGwgU2NyZWVuCi1wYWdlLnRhZ3M9ImZ1bGwgc2NyZWVuIiwiaW1tZXJzaXZlIiwgImxlYW5iYWNrIgorcGFnZS50YWdzPWZ1bGwgc2NyZWVuLGltbWVyc2l2ZSxsZWFuYmFjawogQGpkOmJvZHkKIAogPHA+CkBAIC0xNDgsNCArMTQ4LDQgQEAKICAgUmVwbGFjZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbnMgb2YgTGlnaHRzIE91dCBtb2RlIHdpdGggdGhlIExlYW4gQmFjayBvcgogICBJbW1lcnNpdmUgYXBwcm9hY2hlcy4gQ29udGludWUgdG8gdXNlIExpZ2h0cyBPdXQgbW9kZSBmb3IgaW1wbGVtZW50YXRpb25zIG9mCiAgIHlvdXIgYXBwIHRhcmdldGVkIGZvciBlYXJsaWVyIHJlbGVhc2VzLgotPC9wPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvcD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvZ2VzdHVyZXMuamQgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2dlc3R1cmVzLmpkCmluZGV4IDIxMzkwMmYuLjFlYzcwOTQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvZ2VzdHVyZXMuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9nZXN0dXJlcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9R2VzdHVyZXMKLXBhZ2UudGFncz0iZ2VzdHVyZSIsImlucHV0IiwidG91Y2giCitwYWdlLnRhZ3M9Z2VzdHVyZSxpbnB1dCx0b3VjaAogQGpkOmJvZHkKIAogPHA+R2VzdHVyZXMgYWxsb3cgdXNlcnMgdG8gaW50ZXJhY3Qgd2l0aCB5b3VyIGFwcCBieSBtYW5pcHVsYXRpbmcgdGhlIHNjcmVlbiBvYmplY3RzIHlvdSBwcm92aWRlLiBUaGUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvaGVscC5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvaGVscC5qZAppbmRleCBhZDU3NDJkLi5iZjcwOGIxIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2hlbHAuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9oZWxwLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1IZWxwCi1wYWdlLnRhZ3M9InNldHRpbmdzIiwicHJlZmVyZW5jZXMiCitwYWdlLnRhZ3M9c2V0dGluZ3MscHJlZmVyZW5jZXMKIEBqZDpib2R5CiAKIDxwPldlIHdpc2ggd2UgY291bGQgZ3VhcmFudGVlIHRoYXQgaWYgeW91IGZvbGxvdyBldmVyeSBwaWVjZSBvZiBhZHZpY2Ugb24gdGhpcyB3ZWJzaXRlLCBldmVyeW9uZSB3aWxsIGJlIGFibGUgdG8gbGVhcm4gYW5kIHVzZSB5b3VyIGFwcCB3aXRob3V0IGEgaGl0Y2guIFNhZGx5LCB0aGF0J3Mgbm90IHRoZSBjYXNlLjwvcD4KQEAgLTExMCw0ICsxMTAsNCBAQAogPHA+UGVvcGxlIGRvbid0IHJlYWQgaGVscCBmcm9tIHN0YXJ0IHRvIGZpbmlzaC4gVGhleSBzY2FuIGFyb3VuZCwgbG9va2luZyBmb3IgYSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBjb250YWluaW5nIHRoZSBhbnN3ZXIgdGhleSBuZWVkLiBNYWtlIGl0IGxlc3MgYnVyZGVuc29tZSB3aXRoIGZyaWVuZGx5IGZvcm1hdHRpbmcgYW5kIGxheW91dCBjaG9pY2VzIGxpa2UgYm9sZCBoZWFkaW5ncywgYnVsbGV0ZWQgYW5kIG51bWJlcmVkIGxpc3RzLCB0YWJsZXMsIGFuZCB3aGl0ZSBzcGFjZSBiZXR3ZWVuIHBhcmFncmFwaHMuIEFuZCBpZiB5b3UgaGF2ZSBhIGxhcmdlIGFtb3VudCBvZiBjb250ZW50LCBkaXZpZGUgaXQgaW50byBtdWx0aXBsZSBzY3JlZW5zIHRvIGN1dCBkb3duIG9uIHNjcm9sbGluZy48L3A+CiAKIDxoND5UYWtlIG1lIHN0cmFpZ2h0IHRvIHRoZSBhbnN3ZXI8L2g0PgotPHA+V2hhdCdzIGJldHRlciB0aGFuIGEgc2NyZWVuIHRoYXQncyBlYXN5IHRvIHNjYW4/IEEgc2NyZWVuIHRoYXQgcmVxdWlyZXMgbm8gc2Nhbm5pbmcgYXQgYWxsIGJlY2F1c2UgdGhlIGFuc3dlcidzIHJpZ2h0IHRoZXJlLiBDb25zaWRlciBoYXZpbmcgZWFjaCBzY3JlZW4gaW4geW91ciBhcHAgbmF2aWdhdGUgdG8gaGVscCB0aGF0J3MgcmVsZXZhbnQganVzdCB0byB0aGF0IHNjcmVlbi4gV2UgY2FsbCB0aGlzIDxlbT5jb250ZXh0dWFsIGhlbHA8L2VtPiwgYW5kIGl0J3MgdGhlIGhvbHkgZ3JhaWwgb2YgdXNlciBhc3Npc3RhbmNlLiBJZiB5b3UgdGFrZSB0aGlzIGFwcHJvYWNoLCBiZSBzdXJlIHRvIGFsc28gcHJvdmlkZSBhIHdheSB0byBnZXQgdG8gdGhlIHJlc3Qgb2YgdGhlIGhlbHAgY29udGVudC48L3A+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPHA+V2hhdCdzIGJldHRlciB0aGFuIGEgc2NyZWVuIHRoYXQncyBlYXN5IHRvIHNjYW4/IEEgc2NyZWVuIHRoYXQgcmVxdWlyZXMgbm8gc2Nhbm5pbmcgYXQgYWxsIGJlY2F1c2UgdGhlIGFuc3dlcidzIHJpZ2h0IHRoZXJlLiBDb25zaWRlciBoYXZpbmcgZWFjaCBzY3JlZW4gaW4geW91ciBhcHAgbmF2aWdhdGUgdG8gaGVscCB0aGF0J3MgcmVsZXZhbnQganVzdCB0byB0aGF0IHNjcmVlbi4gV2UgY2FsbCB0aGlzIDxlbT5jb250ZXh0dWFsIGhlbHA8L2VtPiwgYW5kIGl0J3MgdGhlIGhvbHkgZ3JhaWwgb2YgdXNlciBhc3Npc3RhbmNlLiBJZiB5b3UgdGFrZSB0aGlzIGFwcHJvYWNoLCBiZSBzdXJlIHRvIGFsc28gcHJvdmlkZSBhIHdheSB0byBnZXQgdG8gdGhlIHJlc3Qgb2YgdGhlIGhlbHAgY29udGVudC48L3A+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL211bHRpLXBhbmUtbGF5b3V0cy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvbXVsdGktcGFuZS1sYXlvdXRzLmpkCmluZGV4IDA2YzgxODkuLmZmMmRkNGUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvbXVsdGktcGFuZS1sYXlvdXRzLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvbXVsdGktcGFuZS1sYXlvdXRzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1NdWx0aS1wYW5lIExheW91dHMKLXBhZ2UudGFncz0idGFibGV0IiwibmF2aWdhdGlvbiIsImxheW91dCIsImZyYWdtZW50IgorcGFnZS50YWdzPXRhYmxldCxuYXZpZ2F0aW9uLGxheW91dCxmcmFnbWVudAogQGpkOmJvZHkKIAogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25hdmlnYXRpb24tZHJhd2VyLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9uYXZpZ2F0aW9uLWRyYXdlci5qZAppbmRleCBiZjY2MDllLi43ZTYzYmE2YyAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9uYXZpZ2F0aW9uLWRyYXdlci5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25hdmlnYXRpb24tZHJhd2VyLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1OYXZpZ2F0aW9uIERyYXdlcgotcGFnZS50YWdzPSJEcmF3ZXJMYXlvdXQiLCJTbGlkaW5nUGFuZUxheW91dCIKK3BhZ2UudGFncz1EcmF3ZXJMYXlvdXQsU2xpZGluZ1BhbmVMYXlvdXQKIEBqZDpib2R5CiAKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9uYXZpZ2F0aW9uLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9uYXZpZ2F0aW9uLmpkCmluZGV4IDZmMjIxNWEuLjA4ODI4ZTggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvbmF2aWdhdGlvbi5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25hdmlnYXRpb24uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU5hdmlnYXRpb24gd2l0aCBCYWNrIGFuZCBVcAotcGFnZS50YWdzPSJuYXZpZ2F0aW9uIiwiYWN0aXZpdHkiLCJ0YXNrIiwidXAgbmF2aWdhdGlvbiIsImJhY2sgbmF2aWdhdGlvbiIKK3BhZ2UudGFncz1uYXZpZ2F0aW9uLGFjdGl2aXR5LHRhc2ssdXAgbmF2aWdhdGlvbixiYWNrIG5hdmlnYXRpb24KIEBqZDpib2R5CiAKIDxhIGNsYXNzPSJub3RpY2UtZGV2ZWxvcGVycyIgaHJlZj0ie0Bkb2NSb290fXRyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL2luZGV4Lmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9uZXcuamQgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25ldy5qZAppbmRleCA1MGNiOTUwLi5kNjcyZTQ2IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25ldy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25ldy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TmV3IGluIEFuZHJvaWQKLXBhZ2UudGFncz0iS2l0S2F0IiwgIkFuZHJvaWQgNC40IgorcGFnZS50YWdzPUtpdEthdCxBbmRyb2lkIDQuNAogQGpkOmJvZHkKIAogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL3NlbGVjdGlvbi5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc2VsZWN0aW9uLmpkCmluZGV4IDk3M2ZmZGUuLmVlNDY3OTUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc2VsZWN0aW9uLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc2VsZWN0aW9uLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TZWxlY3Rpb24KLXBhZ2UudGFncz0iYWN0aW9ubW9kZSIsIm5hdmlnYXRpb24iLCJjb250ZXh0dWFsIgorcGFnZS50YWdzPWFjdGlvbm1vZGUsbmF2aWdhdGlvbixjb250ZXh0dWFsCiBAamQ6Ym9keQogCiA8YSBjbGFzcz0ibm90aWNlLWRldmVsb3BlcnMiIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvdWkvbWVudXMuaHRtbCNjb250ZXh0LW1lbnUiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9zZXR0aW5ncy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc2V0dGluZ3MuamQKaW5kZXggZmEzZTUzOC4uYTA5MTkzZCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9zZXR0aW5ncy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL3NldHRpbmdzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TZXR0aW5ncwotcGFnZS50YWdzPSJwcmVmZXJlbmNlcyIsInNoYXJlZHByZWZlcmVuY2VzIgorcGFnZS50YWdzPXByZWZlcmVuY2VzLHNoYXJlZHByZWZlcmVuY2VzCiBAamQ6Ym9keQogCiA8YSBjbGFzcz0ibm90aWNlLWRldmVsb3BlcnMiIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvdWkvc2V0dGluZ3MuaHRtbCI+CkBAIC02OTYsNCArNjk2LDQgQEAKIDxsaT48cD5Vc2UgZGVzaWduIHBhdHRlcm5zIHdoZXJldmVyIGFwcGxpY2FibGUgc28gdXNlcnMgZG9uJ3QgZmFjZSBhIGxlYXJuaW5nIGN1cnZlLjwvcD48L2xpPgogPGxpPjxwPkNob29zZSBkZWZhdWx0cyB0aGF0IGFyZSBzYWZlLCBuZXV0cmFsLCBhbmQgZml0IHRoZSBtYWpvcml0eSBvZiB1c2Vycy48L3A+PC9saT4KIDxsaT48cD5HaXZlIGVhY2ggc2V0dGluZyBhIGNsZWFyLCBjb25jaXNlIGxhYmVsIGFuZCB1c2Ugc2Vjb25kYXJ5IHRleHQgYXBwcm9wcmlhdGVseS48L3A+PC9saT4KLTwvdWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC91bD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc3dpcGUtdmlld3MuamQgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL3N3aXBlLXZpZXdzLmpkCmluZGV4IDRjOWZiODguLjg5Mzk3YWUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc3dpcGUtdmlld3MuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9zd2lwZS12aWV3cy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U3dpcGUgVmlld3MKLXBhZ2UudGFncz0idmlld3BhZ2VyIiwibmF2aWdhdGlvbiIsInRhYnMiCitwYWdlLnRhZ3M9dmlld3BhZ2VyLG5hdmlnYXRpb24sdGFicwogQGpkOmJvZHkKIAogPGEgY2xhc3M9Im5vdGljZS1kZXZlbG9wZXJzIiBocmVmPSJ7QGRvY1Jvb3R9dHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vbGF0ZXJhbC5odG1sIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvd2lkZ2V0cy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvd2lkZ2V0cy5qZAppbmRleCA4N2ViYmI5Li45NTNjMTI1IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL3dpZGdldHMuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy93aWRnZXRzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1XaWRnZXRzCi1wYWdlLnRhZ3M9ImFwcHdpZGdldCIsImhvbWUiCitwYWdlLnRhZ3M9YXBwd2lkZ2V0LGhvbWUKIEBqZDpib2R5CiAKIDxhIGNsYXNzPSJub3RpY2UtZGV2ZWxvcGVycyIgaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9hcHB3aWRnZXRzL2luZGV4Lmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS9icmFuZGluZy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvYnJhbmRpbmcuamQKaW5kZXggMmVhNGQ0Ny4uMjM1M2E5MyAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS9icmFuZGluZy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL2JyYW5kaW5nLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Zb3VyIEJyYW5kaW5nCi1wYWdlLnRhZ3M9ImJyYW5kaW5nIiwibG9nbyIKK3BhZ2UudGFncz1icmFuZGluZyxsb2dvCiBAamQ6Ym9keQogCiA8cD5Gb2xsb3dpbmcgQW5kcm9pZCBkZXNpZ24gcGF0dGVybnMgZG9lc24ndCBtZWFuIHRoYXQgeW91ciBhcHAgaGFzIHRvIGxvb2sgdGhlIHNhbWUgYXMKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvaWNvbm9ncmFwaHkuamQgYi9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL2ljb25vZ3JhcGh5LmpkCmluZGV4IGZlNGEzZjkuLjVkZGU2MDAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvaWNvbm9ncmFwaHkuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS9pY29ub2dyYXBoeS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9SWNvbm9ncmFwaHkKLXBhZ2UudGFncz0iaWNvbnMiCitwYWdlLnRhZ3M9aWNvbnMKIEBqZDpib2R5CiAKIDxpbWcgc3JjPSJ7QGRvY1Jvb3R9ZGVzaWduL21lZGlhL2ljb25vZ3JhcGh5X292ZXJ2aWV3LnBuZyI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL21ldHJpY3MtZ3JpZHMuamQgYi9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL21ldHJpY3MtZ3JpZHMuamQKaW5kZXggYzM3NTYzMS4uYTU1MzQ3NSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS9tZXRyaWNzLWdyaWRzLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvbWV0cmljcy1ncmlkcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TWV0cmljcyBhbmQgR3JpZHMKLXBhZ2UudGFncz0ibGF5b3V0Iiwic2NyZWVucyIKK3BhZ2UudGFncz1sYXlvdXQsc2NyZWVucwogQGpkOmJvZHkKIAogPHA+RGV2aWNlcyB2YXJ5IG5vdCBvbmx5IGluIHBoeXNpY2FsIHNpemUsIGJ1dCBhbHNvIGluIHNjcmVlbiBkZW5zaXR5ICg8YWNyb255bSB0aXRsZT0iRG90cyBwZXIKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvdG91Y2gtZmVlZGJhY2suamQgYi9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL3RvdWNoLWZlZWRiYWNrLmpkCmluZGV4IDIwMTdkOGUuLjlmMzZmZWQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvdG91Y2gtZmVlZGJhY2suamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS90b3VjaC1mZWVkYmFjay5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VG91Y2ggRmVlZGJhY2sKLXBhZ2UudGFncz0iaW5wdXQiLCJidXR0b24iCitwYWdlLnRhZ3M9aW5wdXQsYnV0dG9uCiBAamQ6Ym9keQogCiAgICAgPGRpdiBjbGFzcz0ibGF5b3V0LWNvbnRlbnQtcm93IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogLTEwMHB4Ij4KQEAgLTgzLDQgKzgzLDQgQEAKICAgd2lkZ2V0cywgbGlrZSBsaXN0cyBhbmQgZ3JpZCBsaXN0cywgaGF2ZSBzdXBwb3J0IGZvciBib3VuZGFyeSBmZWVkYmFjayBidWlsdAogICBpbi4gSWYgeW914oCZcmUgYnVpbGRpbmcgY3VzdG9tIHdpZGdldHMsIGtlZXAgYm91bmRhcnkgZmVlZGJhY2sgaW4gbWluZCBhbmQKICAgcHJvdmlkZSBpdCBmcm9tIHdpdGhpbiB5b3VyIGFwcC4KLTwvcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L3A+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL3R5cG9ncmFwaHkuamQgYi9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL3R5cG9ncmFwaHkuamQKaW5kZXggM2MyMDFmNy4uZWM2ZmJhMiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS90eXBvZ3JhcGh5LmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvdHlwb2dyYXBoeS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VHlwb2dyYXBoeQotcGFnZS50YWdzPSJ0ZXh0dmlldyIsImZvbnQiCitwYWdlLnRhZ3M9dGV4dHZpZXcsZm9udAogQGpkOmJvZHkKIAogPGRpdiBjbGFzcz0ibGF5b3V0LWNvbnRlbnQtcm93Ij4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvd3JpdGluZy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvd3JpdGluZy5qZAppbmRleCBjZGExN2ViLi40ZjYyMjUzIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL3dyaXRpbmcuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS93cml0aW5nLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Xcml0aW5nIFN0eWxlCi1wYWdlLnRhZ3M9ImRpYWxvZyIsInRvYXN0Iiwibm90aWZpY2F0aW9uIgorcGFnZS50YWdzPWRpYWxvZyx0b2FzdCxub3RpZmljYXRpb24KIEBqZDpib2R5CiAKIDxoMiBpZD0idm9hIj5BbmRyb2lkJ3MgVm9pY2U8L2gyPgpAQCAtMzE5LDQgKzMxOSw0IEBACiAgICAgICAgIGVsbGlwc2lzLiA8L2xpPgogICAgIDwvdWw+CiAgIDwvbGk+Ci08L3VsPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvdWw+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGlzdHJpYnV0ZS9nb29nbGVwbGF5L2VkdS9pbmRleC5qZCBiL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvZWR1L2luZGV4LmpkCmluZGV4IDQ4NzAyOGYuLmEyN2Y4MmYgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvZWR1L2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvZWR1L2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Hb29nbGUgUGxheSBmb3IgRWR1Y2F0aW9uCi1wYWdlLnRhZ3M9Ikdvb2dsZSBQbGF5IiwiZWR1Y2F0aW9uIiwic2Nob29scyIsICJkaXN0cmlidXRpb24iCitwYWdlLnRhZ3M9R29vZ2xlIFBsYXksZWR1Y2F0aW9uLHNjaG9vbHMsZGlzdHJpYnV0aW9uCiBoZWFkZXIuaGlkZT0xCiAKIEBqZDpib2R5CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvbG9jYWxpemluZy5qZCBiL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvcHVibGlzaC9sb2NhbGl6aW5nLmpkCmluZGV4IDFhNWYzYzEuLjMwZjEwYjcgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvcHVibGlzaC9sb2NhbGl6aW5nLmpkCisrKyBiL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvcHVibGlzaC9sb2NhbGl6aW5nLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Mb2NhbGl6YXRpb24gQ2hlY2tsaXN0Ci1wYWdlLnRhZ3M9ImxvY2FsaXplIiwibG9jYWxpemF0aW9uIiwicmVzb3VyY2VzIiwgImZvcm1hdHMiLCAibDEwbiIKK3BhZ2UudGFncz1sb2NhbGl6ZSxsb2NhbGl6YXRpb24scmVzb3VyY2VzLGZvcm1hdHMsbDEwbgogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+PGRpdiBpZD0icXYiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rpc3RyaWJ1dGUvZ29vZ2xlcGxheS9wdWJsaXNoL3ByZXBhcmluZy5qZCBiL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvcHVibGlzaC9wcmVwYXJpbmcuamQKaW5kZXggYjlkZDBlMC4uNmFmM2VlYSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rpc3RyaWJ1dGUvZ29vZ2xlcGxheS9wdWJsaXNoL3ByZXBhcmluZy5qZAorKysgYi9kb2NzL2h0bWwvZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvcHJlcGFyaW5nLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1MYXVuY2ggQ2hlY2tsaXN0Ci1wYWdlLnRhZ3M9InB1Ymxpc2hpbmciLCJsYXVuY2giLCJHb29nbGUgUGxheSIsICJEZXZlbG9wZXIgQ29uc29sZSIKK3BhZ2UudGFncz1wdWJsaXNoaW5nLGxhdW5jaCxHb29nbGUgUGxheSxEZXZlbG9wZXIgQ29uc29sZQogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+PGRpdiBpZD0icXYiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2dvb2dsZS9nY20vY2xpZW50LmpkIGIvZG9jcy9odG1sL2dvb2dsZS9nY20vY2xpZW50LmpkCmluZGV4IGVlNzY0ZWYuLjkxNmVjZWUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2NsaWVudC5qZAorKysgYi9kb2NzL2h0bWwvZ29vZ2xlL2djbS9jbGllbnQuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUltcGxlbWVudGluZyBHQ00gQ2xpZW50Ci1wYWdlLnRhZ3M9ImNsb3VkIiwicHVzaCIsIm1lc3NhZ2luZyIKK3BhZ2UudGFncz1jbG91ZCxwdXNoLG1lc3NhZ2luZwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ29vZ2xlL2djbS9ncy5qZCBiL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2dzLmpkCmluZGV4IDhiYzE5MzYuLmQyZTY1ZDQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2dzLmpkCisrKyBiL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2dzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1HZXR0aW5nIFN0YXJ0ZWQKLXBhZ2UudGFncz0iY2xvdWQiLCJwdXNoIiwibWVzc2FnaW5nIgorcGFnZS50YWdzPWNsb3VkLHB1c2gsbWVzc2FnaW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2hlbHBlci5qZCBiL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2hlbHBlci5qZAppbmRleCBlN2YyZjczLi4xOWRjZGM1IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ29vZ2xlL2djbS9oZWxwZXIuamQKKysrIGIvZG9jcy9odG1sL2dvb2dsZS9nY20vaGVscGVyLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Vc2luZyB0aGUgR0NNIEhlbHBlciBMaWJyYXJpZXMKLXBhZ2UudGFncz0iY2xvdWQiLCJwdXNoIiwibWVzc2FnaW5nIgorcGFnZS50YWdzPWNsb3VkLHB1c2gsbWVzc2FnaW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJkZXByZWNhdGVkU3RpY2tlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ29vZ2xlL2djbS9pbmRleC5qZCBiL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2luZGV4LmpkCmluZGV4IDhmMzI1YjguLjcwZjdhOWMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Hb29nbGUgQ2xvdWQgTWVzc2FnaW5nIGZvciBBbmRyb2lkCi1wYWdlLnRhZ3M9ImdjbSIKK3BhZ2UudGFncz1nY20KIGhlYWRlci5oaWRlPTEKIEBqZDpib2R5CiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9hZHMuamQgYi9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvYWRzLmpkCmluZGV4IDE4NTc5YzcuLmVkMzQ2YzYgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9hZHMuamQKKysrIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL2Fkcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9R29vZ2xlIE1vYmlsZSBBZHMKLXBhZ2UudGFncz0iQWRzIiwibW9uZXRpemF0aW9uIiwgIkFkTW9iIiwgIkdvb2dsZSBQbGF5IHNlcnZpY2VzIgorcGFnZS50YWdzPUFkcyxtb25ldGl6YXRpb24sQWRNb2IsR29vZ2xlIFBsYXkgc2VydmljZXMKIGhlYWRlci5oaWRlPTEKIAogQGpkOmJvZHkKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9hdXRoLmpkIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL2F1dGguamQKaW5kZXggN2FjYWYxYy4uZGRlZDU5OTggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9hdXRoLmpkCisrKyBiL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9hdXRoLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1BdXRob3JpemF0aW9uCi1wYWdlLnRhZ3M9IkFjY291bnRNYW5hZ2VyIiwib2F1dGgyIgorcGFnZS50YWdzPUFjY291bnRNYW5hZ2VyLG9hdXRoMgogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CkBAIC0yMzYsNCArMjM2LDQgQEAKICAgICBjYXNlLCBvYnRhaW4gYSBuZXcgdG9rZW4gdXNpbmcgPGEKIGhyZWY9IntAZG9jUm9vdH1yZWZlcmVuY2UvY29tL2dvb2dsZS9hbmRyb2lkL2dtcy9hdXRoL0dvb2dsZUF1dGhVdGlsLmh0bWwjZ2V0VG9rZW4oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIgogPntAY29kZSBHb29nbGVBdXRoVXRpbC5nZXRUb2tlbigpfTwvYT4uCi08L3A+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL2lkLmpkIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL2lkLmpkCmluZGV4IDQ2NmRmZWYuLmRiNTBjN2YgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9pZC5qZAorKysgYi9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvaWQuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFkdmVydGlzaW5nIElECi1wYWdlLnRhZ3M9IkFkcyIsIkFkdmVydGlzaW5nIElEIiwgIklEIgorcGFnZS50YWdzPUFkcyxBZHZlcnRpc2luZyBJRCxJRAogaGVhZGVyLmhpZGU9MQogCiBAamQ6Ym9keQpAQCAtMTk1LDQgKzE5NSw0IEBACiAgIH0KICAgZmluYWwgU3RyaW5nIGlkID0gYWRJbmZvLmdldElkKCk7CiAgIGZpbmFsIGJvb2xlYW4gaXNMQVQgPSBhZEluZm8uaXNMaW1pdEFkVHJhY2tpbmdFbmFibGVkKCk7Ci19PC9wcmU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfTwvcHJlPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL2xvY2F0aW9uLmpkIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL2xvY2F0aW9uLmpkCmluZGV4IDFjZGQyNDcuLjNmYmYwMGUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9sb2NhdGlvbi5qZAorKysgYi9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvbG9jYXRpb24uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUxvY2F0aW9uIEFQSXMKLXBhZ2UudGFncz0ibG9jYXRpb24iLCJnZW9mZW5jZSIsICJnZW9mZW5jaW5nIiwgImdwcyIKK3BhZ2UudGFncz1sb2NhdGlvbixnZW9mZW5jZSxnZW9mZW5jaW5nLGdwcwogaGVhZGVyLmhpZGU9MQogQGpkOmJvZHkKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL21hcHMuamQgYi9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvbWFwcy5qZAppbmRleCBiNjExZjM2Li4xZGQzYTcyIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvbWFwcy5qZAorKysgYi9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvbWFwcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9R29vZ2xlIE1hcHMgQW5kcm9pZCBBUEkKLXBhZ2UudGFncz0ibWFwdmlldyIsImxvY2F0aW9uIgorcGFnZS50YWdzPW1hcHZpZXcsbG9jYXRpb24KIGhlYWRlci5oaWRlPTEKIAogQGpkOmJvZHkKQEAgLTg4LDQgKzg4LDQgQEAKICAgICA8L3A+CiAgIDwvZGl2PgogCi08L2Rpdj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L2Rpdj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9wbHVzLmpkIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL3BsdXMuamQKaW5kZXggMTY1MGVjMi4uNTNjMmFjZSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL3BsdXMuamQKKysrIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL3BsdXMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUdvb2dsZSsgUGxhdGZvcm0gZm9yIEFuZHJvaWQKLXBhZ2UudGFncz0iYXV0aGVudGljYXRpb24iLCJzaWduaW4iLCJzb2NpYWwiCitwYWdlLnRhZ3M9YXV0aGVudGljYXRpb24sc2lnbmluLHNvY2lhbAogaGVhZGVyLmhpZGU9MQogCiBAamQ6Ym9keQpAQCAtODcsNCArODcsNCBAQAogICAgIEdvb2dsZSsgZGV2ZWxvcGVyIGRvY3VtZW50cyBhdCA8YSBjbGFzcz0iZXh0ZXJuYWwtbGluayIKICAgICBocmVmPSJodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS8rL21vYmlsZS9hbmRyb2lkLyI+ZGV2ZWxvcGVycy5nb29nbGUuY29tLys8L2E+LjwvcD4KICAgPC9kaXY+Ci08L2Rpdj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L2Rpdj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy93YWxsZXQuamQgYi9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvd2FsbGV0LmpkCmluZGV4IDZjMGRkNGMuLjlmMmI0ZGQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy93YWxsZXQuamQKKysrIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL3dhbGxldC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9R29vZ2xlIFdhbGxldCBJbnN0YW50IEJ1eSBmb3IgQW5kcm9pZAotcGFnZS50YWdzPSJXYWxsZXQiLCJwYXltZW50cyIsIkluc3RhbnQgQnV5IgorcGFnZS50YWdzPVdhbGxldCxwYXltZW50cyxJbnN0YW50IEJ1eQogaGVhZGVyLmhpZGU9MQogCiBAamQ6Ym9keQpAQCAtODMsNCArODMsNCBAQAogCiAKICAgPC9kaXY+Ci08L2Rpdj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L2Rpdj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS9iaWxsaW5nL2dwLXB1cmNoYXNlLXN0YXR1cy1hcGkuamQgYi9kb2NzL2h0bWwvZ29vZ2xlL3BsYXkvYmlsbGluZy9ncC1wdXJjaGFzZS1zdGF0dXMtYXBpLmpkCmluZGV4IDRjZmFjZWUuLmQyNzIzMDEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS9iaWxsaW5nL2dwLXB1cmNoYXNlLXN0YXR1cy1hcGkuamQKKysrIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5L2JpbGxpbmcvZ3AtcHVyY2hhc2Utc3RhdHVzLWFwaS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9UHVyY2hhc2UgU3RhdHVzIEFQSQotcGFnZS50YWdzPSJJbi1hcHAgQmlsbGluZyIsICJHb29nbGUgUGxheSIsICJpbmFwcCBiaWxsaW5nIiwgImluIGFwcCBiaWxsaW5nIiwgImlhYiIsICJiaWxsaW5nIgorcGFnZS50YWdzPUluLWFwcCBCaWxsaW5nLEdvb2dsZSBQbGF5LGluYXBwIGJpbGxpbmcsaW4gYXBwIGJpbGxpbmcsaWFiLGJpbGxpbmcKIAogQGpkOmJvZHkKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL2FwcGVuZGl4L21lZGlhLWZvcm1hdHMuamQgYi9kb2NzL2h0bWwvZ3VpZGUvYXBwZW5kaXgvbWVkaWEtZm9ybWF0cy5qZAppbmRleCA3YzZjMTQ1Li4xOWY1MTBhIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvYXBwZW5kaXgvbWVkaWEtZm9ybWF0cy5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvYXBwZW5kaXgvbWVkaWEtZm9ybWF0cy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U3VwcG9ydGVkIE1lZGlhIEZvcm1hdHMKLXBhZ2UudGFncz0idmlkZW8iLCJhdWRpbyIsIm1wZWciLCJtcDQiLCJtNGEiLCJtcDMiLCIzZ3AiLCIzZ3BwIiwiZmxhYyIsIndhdmUiLCJ3YXYiCitwYWdlLnRhZ3M9dmlkZW8sYXVkaW8sbXBlZyxtcDQsbTRhLG1wMywzZ3AsM2dwcCxmbGFjLHdhdmUsd2F2CiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS9jb21wb25lbnRzL2FjdGl2aXRpZXMuamQgYi9kb2NzL2h0bWwvZ3VpZGUvY29tcG9uZW50cy9hY3Rpdml0aWVzLmpkCmluZGV4IDFjYmFhNzkuLmI0NjE3ZmIgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS9jb21wb25lbnRzL2FjdGl2aXRpZXMuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL2NvbXBvbmVudHMvYWN0aXZpdGllcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QWN0aXZpdGllcwotcGFnZS50YWdzPSJhY3Rpdml0eSIsImludGVudCIKK3BhZ2UudGFncz1hY3Rpdml0eSxpbnRlbnQKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL2NvbXBvbmVudHMvcHJvY2Vzc2VzLWFuZC10aHJlYWRzLmpkIGIvZG9jcy9odG1sL2d1aWRlL2NvbXBvbmVudHMvcHJvY2Vzc2VzLWFuZC10aHJlYWRzLmpkCmluZGV4IDFmZWQ3MTJjLi5jOGMzNzY0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvY29tcG9uZW50cy9wcm9jZXNzZXMtYW5kLXRocmVhZHMuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL2NvbXBvbmVudHMvcHJvY2Vzc2VzLWFuZC10aHJlYWRzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Qcm9jZXNzZXMgYW5kIFRocmVhZHMKLXBhZ2UudGFncz0ibGlmZWN5Y2xlIiwiYmFja2dyb3VuZCIKK3BhZ2UudGFncz1saWZlY3ljbGUsYmFja2dyb3VuZAogCiBAamQ6Ym9keQogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvZmFxL3NlY3VyaXR5LmpkIGIvZG9jcy9odG1sL2d1aWRlL2ZhcS9zZWN1cml0eS5qZAppbmRleCA5NmZjN2Y1Li44Y2NmMjFmIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvZmFxL3NlY3VyaXR5LmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS9mYXEvc2VjdXJpdHkuamQKQEAgLTQ3LDggKzQ3LDcgQEAKIDxhIG5hbWU9Imlzc3VlIiBpZD0iaXNzdWUiPjwvYT48aDI+SSB0aGluayBJIGZvdW5kIGEgc2VjdXJpdHkgZmxhdy4gSG93IGRvIEkKIHJlcG9ydCBpdD88L2gyPgogCi08cD5Zb3UgY2FuIHJlYWNoIHRoZSBBbmRyb2lkIHNlY3VyaXR5IHRlYW0gYXQgPGEKLWhyZWY9Im1haWx0bzpzZWN1cml0eUBhbmRyb2lkLmNvbSI+c2VjdXJpdHlAYW5kcm9pZC5jb208L2E+LiBJZiB5b3UgbGlrZSwgeW91Cis8cD5Zb3UgY2FuIHJlYWNoIHRoZSBBbmRyb2lkIHNlY3VyaXR5IHRlYW0gYXQgc2VjdXJpdHlAYW5kcm9pZC5jb20uIElmIHlvdSBsaWtlLCB5b3UKIGNhbiBwcm90ZWN0IHlvdXIgbWVzc2FnZSB1c2luZyBvdXIgPGEKIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYW5kcm9pZC9zZWN1cml0eV9hdF9hbmRyb2lkX2RvdF9jb20udHh0Ij5QR1AKIGtleTwvYT4uPC9wPgpAQCAtNTgsNiArNTcsMTUgQEAKIHVzZXJzIGFyZSBhdCByaXNrLiBJbiByZXR1cm4sIHdlIHdpbGwgbWFrZSBzdXJlIHRvIGtlZXAgdGhlIHJlc2VhcmNoZXIgaW5mb3JtZWQKIG9mIG91ciBwcm9ncmVzcyBpbiBpc3N1aW5nIGEgZml4LiA8L3A+CiAKKzxwPlZ1bG5lcmFiaWxpdGllcyBzcGVjaWZpYyB0byBBbmRyb2lkIE9FTXMgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIHRoZSByZWxldmFudAordmVuZG9yLiBBbiBpbmNvbXBsZXRlIGxpc3Qgb2YgQW5kcm9pZCB2ZW5kb3Igc2VjdXJpdHkgY29udGFjdHMgY2FuIGJlIGZvdW5kIGJlbG93LgorVG8gYmUgYWRkZWQgdG8gdGhpcyBsaXN0LCBwbGVhc2UgY29udGFjdCBzZWN1cml0eUBhbmRyb2lkLmNvbS48L3A+CisKKzx1bD4KKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuaHRjLmNvbS93d3cvdGVybXMvcHJvZHVjdC1zZWN1cml0eS8iPkhUQzwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5tb3Rvcm9sYXNvbHV0aW9ucy5jb20vVVMtRU4vQWJvdXQvU2VjdXJpdHklMjBWdWxuZXJhYmlsaXR5Ij5Nb3Rvcm9sYTwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5zYW1zdW5nLmNvbS9ub3RpY2UvSG93LXRvLVVzZS10aGUtRm9ydW0iPlNhbXN1bmc8L2E+IC0gbS5zZWN1cml0eUBzYW1zdW5nLmNvbTwvbGk+Cis8L3VsPgogCiA8YSBuYW1lPSJpbmZvcm1lZCIgaWQ9ImluZm9ybWVkIj48L2E+PGgyPkhvdyBjYW4gSSBzdGF5IGluZm9ybWVkIGFib3V0IEFuZHJvaWQgc2VjdXJpdHk/PC9oMj4KIApAQCAtOTEsOCArOTksOCBAQAogPHA+TGlrZSBhbnkgb3RoZXIgcGxhdGZvcm0sIGl0IHdpbGwgYmUgcG9zc2libGUgZm9yIHVuZXRoaWNhbCBkZXZlbG9wZXJzCiB0byBjcmVhdGUgbWFsaWNpb3VzIHNvZnR3YXJlLCBrbm93biBhcyA8YQogaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWx3YXJlIj5tYWx3YXJlPC9hPiwgZm9yIEFuZHJvaWQuIElmIHlvdQotdGhpbmsgc29tZWJvZHkgaXMgdHJ5aW5nIHRvIHNwcmVhZCBtYWx3YXJlLCBwbGVhc2UgbGV0IHVzIGtub3cgYXQgPGEKLWhyZWY9Im1haWx0bzpzZWN1cml0eUBhbmRyb2lkLmNvbSI+c2VjdXJpdHlAYW5kcm9pZC5jb208L2E+LiBQbGVhc2UgaW5jbHVkZSBhcwordGhpbmsgc29tZWJvZHkgaXMgdHJ5aW5nIHRvIHNwcmVhZCBtYWx3YXJlLCBwbGVhc2UgbGV0IHVzIGtub3cgYXQKK3NlY3VyaXR5QGFuZHJvaWQuY29tLiBQbGVhc2UgaW5jbHVkZSBhcwogbXVjaCBkZXRhaWwgYWJvdXQgdGhlIGFwcGxpY2F0aW9uIGFzIHBvc3NpYmxlLCB3aXRoIHRoZSBsb2NhdGlvbiBpdCBpcwogYmVpbmcgZGlzdHJpYnV0ZWQgZnJvbSBhbmQgd2h5IHlvdSBzdXNwZWN0IGl0IG9mIGJlaW5nIG1hbGljaW91cyBzb2Z0d2FyZS48L3A+CiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvYWRtaW4vZGV2aWNlLWFkbWluLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hZG1pbi9kZXZpY2UtYWRtaW4uamQKaW5kZXggYTQ3NDQ5OC4uZWU2YjgxNCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hZG1pbi9kZXZpY2UtYWRtaW4uamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hZG1pbi9kZXZpY2UtYWRtaW4uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPURldmljZSBBZG1pbmlzdHJhdGlvbgotcGFnZS50YWdzPSJkZXZpY2Vwb2xpY3ltYW5hZ2VyIiwicG9saWN5Iiwic2VjdXJpdHkiCitwYWdlLnRhZ3M9ZGV2aWNlcG9saWN5bWFuYWdlcixwb2xpY3ksc2VjdXJpdHkKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hcHB3aWRnZXRzL2hvc3QuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2FwcHdpZGdldHMvaG9zdC5qZAppbmRleCBkYTc0MDhmLi4xNjllMzg4IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2FwcHdpZGdldHMvaG9zdC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2FwcHdpZGdldHMvaG9zdC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QXBwIFdpZGdldCBIb3N0Ci1wYWdlLnRhZ3M9IkFwcFdpZGdldEhvc3QiLCJob21lIHNjcmVlbiIsImxhdW5jaGVyIgorcGFnZS50YWdzPUFwcFdpZGdldEhvc3QsaG9tZSBzY3JlZW4sbGF1bmNoZXIKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hcHB3aWRnZXRzL2luZGV4LmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hcHB3aWRnZXRzL2luZGV4LmpkCmluZGV4IGQ4YWQ4NDQuLmE3ODNhZDEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvYXBwd2lkZ2V0cy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2FwcHdpZGdldHMvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFwcCBXaWRnZXRzCi1wYWdlLnRhZ3M9ImhvbWUiLCJBcHBXaWRnZXRQcm92aWRlciIKK3BhZ2UudGFncz1ob21lLEFwcFdpZGdldFByb3ZpZGVyCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L2JsdWV0b290aC1sZS5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L2JsdWV0b290aC1sZS5qZAppbmRleCA0NDljODkyLi41YzMyZTU2IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2Nvbm5lY3Rpdml0eS9ibHVldG9vdGgtbGUuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvYmx1ZXRvb3RoLWxlLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1CbHVldG9vdGggTG93IEVuZXJneQotcGFnZS50YWdzPSJ3aXJlbGVzcyIsImJsdWV0b290aGFkYXB0ZXIiLCJibHVldG9vdGhkZXZpY2UiLCJCTEUiLCJCVExFIgorcGFnZS50YWdzPXdpcmVsZXNzLGJsdWV0b290aGFkYXB0ZXIsYmx1ZXRvb3RoZGV2aWNlLEJMRSxCVExFCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L2JsdWV0b290aC5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L2JsdWV0b290aC5qZAppbmRleCBiNTdmM2UyLi45NjAwOGM1IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2Nvbm5lY3Rpdml0eS9ibHVldG9vdGguamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvYmx1ZXRvb3RoLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1CbHVldG9vdGgKLXBhZ2UudGFncz0id2lyZWxlc3MiLCJibHVldG9vdGhhZGFwdGVyIiwiYmx1ZXRvb3RoZGV2aWNlIgorcGFnZS50YWdzPXdpcmVsZXNzLGJsdWV0b290aGFkYXB0ZXIsYmx1ZXRvb3RoZGV2aWNlCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L25mYy9oY2UuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2Nvbm5lY3Rpdml0eS9uZmMvaGNlLmpkCmluZGV4IGQ2ZWZhYTcuLjllYzFhOGQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L25mYy9oY2UuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvbmZjL2hjZS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9SG9zdC1iYXNlZCBDYXJkIEVtdWxhdGlvbgotcGFnZS50YWdzPSJob3N0IGNhcmQgZW11bGF0aW9uIiwgImhjZSIsIkhvc3RBcGR1U2VydmljZSIsIk9mZkhvc3RBcGR1U2VydmljZSIsInRhcCBhbmQgcGF5IgorcGFnZS50YWdzPWhvc3QgY2FyZCBlbXVsYXRpb24saGNlLEhvc3RBcGR1U2VydmljZSxPZmZIb3N0QXBkdVNlcnZpY2UsdGFwIGFuZCBwYXkKIAogQGpkOmJvZHkKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvc2lwLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvc2lwLmpkCmluZGV4IDUyNmViODMuLjUxNTQ3NjcgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L3NpcC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2Nvbm5lY3Rpdml0eS9zaXAuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNlc3Npb24gSW5pdGlhdGlvbiBQcm90b2NvbAotcGFnZS50YWdzPSJzaXBtYW5hZ2VyIiwic2lwcHJvZmlsZSIsInNpcGF1ZGlvY2FsbCIsInRlbGVwaG9ueSIKK3BhZ2UudGFncz1zaXBtYW5hZ2VyLHNpcHByb2ZpbGUsc2lwYXVkaW9jYWxsLHRlbGVwaG9ueQogQGpkOmJvZHkKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgogPGRpdiBpZD0icXYiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvd2lmaXAycC5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L3dpZmlwMnAuamQKaW5kZXggN2NhZGRlMS4uZDdlMTI2OSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvd2lmaXAycC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2Nvbm5lY3Rpdml0eS93aWZpcDJwLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1XaS1GaSBQZWVyLXRvLVBlZXIKLXBhZ2UudGFncz0id2lyZWxlc3MiLCJXaWZpUDJwTWFuYWdlciIsIldpLUZpIERpcmVjdCIsIldpRmkgRGlyZWN0IiwiUDJQIiwiV2ktRmkgUDJQIiwiV2lGaSBQMlAiCitwYWdlLnRhZ3M9d2lyZWxlc3MsV2lmaVAycE1hbmFnZXIsV2ktRmkgRGlyZWN0LFdpRmkgRGlyZWN0LFAyUCxXaS1GaSBQMlAsV2lGaSBQMlAKIAogQGpkOmJvZHkKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9kYXRhL2RhdGEtc3RvcmFnZS5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvZGF0YS9kYXRhLXN0b3JhZ2UuamQKaW5kZXggNGI4YTY0Ny4uMjRlN2Y1NCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9kYXRhL2RhdGEtc3RvcmFnZS5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2RhdGEvZGF0YS1zdG9yYWdlLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TdG9yYWdlIE9wdGlvbnMKLXBhZ2UudGFncz0iZGF0YWJhc2UiLCJzaGFyZWRwcmVmZXJlbmNlcyIsInNkY2FyZCIKK3BhZ2UudGFncz1kYXRhYmFzZSxzaGFyZWRwcmVmZXJlbmNlcyxzZGNhcmQKIEBqZDpib2R5CiAKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9kYXRhL2luc3RhbGwtbG9jYXRpb24uamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2RhdGEvaW5zdGFsbC1sb2NhdGlvbi5qZAppbmRleCAyZWMwZDVhLi5jYzU4YjQ2IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2RhdGEvaW5zdGFsbC1sb2NhdGlvbi5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2RhdGEvaW5zdGFsbC1sb2NhdGlvbi5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QXBwIEluc3RhbGwgTG9jYXRpb24KLXBhZ2UudGFncz0ic2RjYXJkIiwiZXh0ZXJuYWwiCitwYWdlLnRhZ3M9c2RjYXJkLGV4dGVybmFsCiBAamQ6Ym9keQogCiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvZ3JhcGhpY3Mvb3BlbmdsLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9ncmFwaGljcy9vcGVuZ2wuamQKaW5kZXggZjQ2MTEzZC4uZDE5NDA4MiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9ncmFwaGljcy9vcGVuZ2wuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9ncmFwaGljcy9vcGVuZ2wuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU9wZW5HTCBFUwotcGFnZS50YWdzPSJnYW1lcyIKK3BhZ2UudGFncz1nYW1lcwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2dyYXBoaWNzL3Byb3AtYW5pbWF0aW9uLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9ncmFwaGljcy9wcm9wLWFuaW1hdGlvbi5qZAppbmRleCAyMmJmNzY5Ni4uZTQ1NTQ5NiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9ncmFwaGljcy9wcm9wLWFuaW1hdGlvbi5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2dyYXBoaWNzL3Byb3AtYW5pbWF0aW9uLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Qcm9wZXJ0eSBBbmltYXRpb24KLXBhZ2UudGFncz0idmFsdWVhbmltYXRvciIsIm9iamVjdGFuaW1hdG9yIiwibGF5b3V0dHJhbnNpdGlvbiIsIlZpZXdQcm9wZXJ0eUFuaW1hdG9yIgorcGFnZS50YWdzPXZhbHVlYW5pbWF0b3Isb2JqZWN0YW5pbWF0b3IsbGF5b3V0dHJhbnNpdGlvbixWaWV3UHJvcGVydHlBbmltYXRvcgogQGpkOmJvZHkKIAogICA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWFuaWZlc3QvdXNlcy1mZWF0dXJlLWVsZW1lbnQuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21hbmlmZXN0L3VzZXMtZmVhdHVyZS1lbGVtZW50LmpkCmluZGV4IGNiOTJmNmRlLi44ODRlZWI1IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21hbmlmZXN0L3VzZXMtZmVhdHVyZS1lbGVtZW50LmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWFuaWZlc3QvdXNlcy1mZWF0dXJlLWVsZW1lbnQuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPSZsdDt1c2VzLWZlYXR1cmUmZ3Q7Ci1wYWdlLnRhZ3M9ImZpbHRlcmluZyIsImZlYXR1cmVzIiwiZ29vZ2xlIHBsYXkgZmlsdGVycyIsInBlcm1pc3Npb25zIgorcGFnZS50YWdzPWZpbHRlcmluZyxmZWF0dXJlcyxnb29nbGUgcGxheSBmaWx0ZXJzLHBlcm1pc3Npb25zCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTEwNzEsNCArMTA3MSw0IEBACiAgIDx0ZD48Y29kZT5hbmRyb2lkLmhhcmR3YXJlLndpZmk8L2NvZGU+PC90ZD4KIDwhLS0gIDx0ZD48L3RkPiAtLT4KIDwvdHI+Ci08L3RhYmxlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvdGFibGU+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21hbmlmZXN0L3VzZXMtc2RrLWVsZW1lbnQuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21hbmlmZXN0L3VzZXMtc2RrLWVsZW1lbnQuamQKaW5kZXggOGRlNDczOS4uYzg4ZTZiZSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9tYW5pZmVzdC91c2VzLXNkay1lbGVtZW50LmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWFuaWZlc3QvdXNlcy1zZGstZWxlbWVudC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Jmx0O3VzZXMtc2RrJmd0OwotcGFnZS50YWdzPSJhcGkgbGV2ZWxzIiwic2RrIHZlcnNpb24iLCJtaW5zZGt2ZXJzaW9uIiwidGFyZ2V0c2RrdmVyc2lvbiIsIm1heHNka3ZlcnNpb24iCitwYWdlLnRhZ3M9YXBpIGxldmVscyxzZGsgdmVyc2lvbixtaW5zZGt2ZXJzaW9uLHRhcmdldHNka3ZlcnNpb24sbWF4c2RrdmVyc2lvbgogQGpkOmJvZHkKIAogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21lZGlhL2F1ZGlvLWNhcHR1cmUuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21lZGlhL2F1ZGlvLWNhcHR1cmUuamQKaW5kZXggNDRjNjE4Zi4uOGU2MGM4ZiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9tZWRpYS9hdWRpby1jYXB0dXJlLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWVkaWEvYXVkaW8tY2FwdHVyZS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QXVkaW8gQ2FwdHVyZQotcGFnZS50YWdzPSJtZWRpYXJlY29yZGVyIgorcGFnZS50YWdzPW1lZGlhcmVjb3JkZXIKIEBqZDpib2R5CiAKICAgICA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTI0OSw0ICsyNDksNCBAQAogICAgICAgICB9CiAgICAgfQogfQotPC9wcmU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9wcmU+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21lZGlhL2NhbWVyYS5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWVkaWEvY2FtZXJhLmpkCmluZGV4IGU0ODEwOWEuLjU2ZWY2MjQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWVkaWEvY2FtZXJhLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWVkaWEvY2FtZXJhLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1DYW1lcmEKLXBhZ2UudGFncz0icGhvdG8iLCJ2aWRlbyIsInBpY3R1cmUiLCJtZWRpYXJlY29yZGVyIgorcGFnZS50YWdzPXBob3RvLHZpZGVvLHBpY3R1cmUsbWVkaWFyZWNvcmRlcgogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21lZGlhL21lZGlhcGxheWVyLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9tZWRpYS9tZWRpYXBsYXllci5qZAppbmRleCBkYzc4OWQyLi42ZDAzYWY2IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21lZGlhL21lZGlhcGxheWVyLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWVkaWEvbWVkaWFwbGF5ZXIuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU1lZGlhIFBsYXliYWNrCi1wYWdlLnRhZ3M9Im1lZGlhcGxheWVyIiwic291bmRwb29sIiwiYXVkaW9tYW5hZ2VyIgorcGFnZS50YWdzPW1lZGlhcGxheWVyLHNvdW5kcG9vbCxhdWRpb21hbmFnZXIKIEBqZDpib2R5CiAKICAgICA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTc0Myw0ICs3NDMsNCBAQAogbU1lZGlhUGxheWVyLnNldERhdGFTb3VyY2UoZ2V0QXBwbGljYXRpb25Db250ZXh0KCksIGNvbnRlbnRVcmkpOwogCiAvLyAuLi5wcmVwYXJlIGFuZCBzdGFydC4uLgotPC9wcmU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9wcmU+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3Jlc291cmNlcy9sb2NhbGl6YXRpb24uamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3Jlc291cmNlcy9sb2NhbGl6YXRpb24uamQKaW5kZXggNzI4OGFlYi4uM2JiOWFiNSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9yZXNvdXJjZXMvbG9jYWxpemF0aW9uLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvcmVzb3VyY2VzL2xvY2FsaXphdGlvbi5qZApAQCAtMSw0ODcgKzEsNDg1IEBACi1wYWdlLnRpdGxlPUxvY2FsaXppbmcgd2l0aCBSZXNvdXJjZXMNCi1wYXJlbnQudGl0bGU9QXBwbGljYXRpb24gUmVzb3VyY2VzDQotcGFnZS50YWdzPSJsb2NhbGl6aW5nIiwibG9jYWxpemF0aW9uIiwicmVzb3VyY2VzIiwgImZvcm1hdHMiLCAibDEwbiINCi1wYXJlbnQubGluaz1pbmRleC5odG1sDQotQGpkOmJvZHkNCi0NCi08ZGl2IGlkPSJxdi13cmFwcGVyIj4NCi0gICAgPGRpdiBpZD0icXYiPg0KLQ0KLTxoMj5RdWlja3ZpZXc8L2gyPg0KLQ0KLTx1bD4NCi0gIDxsaT5Vc2UgcmVzb3VyY2Ugc2V0cyB0byBjcmVhdGUgYSBsb2NhbGl6ZWQgYXBwLjwvbGk+DQotICA8bGk+QW5kcm9pZCBsb2FkcyB0aGUgY29ycmVjdCByZXNvdXJjZSBzZXQgZm9yIHRoZSB1c2VyJ3MgbGFuZ3VhZ2UgYW5kIGxvY2FsZS48L2xpPg0KLSAgPGxpPklmIGxvY2FsaXplZCByZXNvdXJjZXMgYXJlIG5vdCBhdmFpbGFibGUsIEFuZHJvaWQgbG9hZHMgeW91ciBkZWZhdWx0IHJlc291cmNlcy48L2xpPg0KLTwvdWw+DQotDQotPGgyPkluIHRoaXMgZG9jdW1lbnQ8L2gyPg0KLTxvbD4NCi0gIDxsaT48YSBocmVmPSIjcmVzb3VyY2Utc3dpdGNoaW5nIj5PdmVydmlldzogUmVzb3VyY2UtU3dpdGNoaW5nIGluIEFuZHJvaWQ8L2E+PC9saT4NCi08bGk+PGEgaHJlZj0iI3VzaW5nLWZyYW1ld29yayI+VXNpbmcgUmVzb3VyY2VzIGZvciBMb2NhbGl6YXRpb248L2E+PC9saT4NCi08bGk+PGEgaHJlZj0iI3N0cmF0ZWdpZXMiPkxvY2FsaXphdGlvbiBUaXBzPC9hPjwvbGk+DQotPGxpPjxhIGhyZWY9IiN0ZXN0aW5nIj5UZXN0aW5nIExvY2FsaXplZCBBcHBsaWNhdGlvbnM8L2E+PC9saT4NCi08L29sPg0KLQ0KLTxoMj5TZWUgYWxzbzwvaDI+DQotICA8b2w+DQotICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9ZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvbG9jYWxpemluZy5odG1sIj5Mb2NhbGl6YXRpb24gQ2hlY2tsaXN0PC9hPjwvbGk+DQotICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3Jlc291cmNlcy9wcm92aWRpbmctcmVzb3VyY2VzLmh0bWwiPlByb3ZpZGluZyBSZXNvdXJjZXM8L2E+PC9saT4NCi0gICAgPGxpPjxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvdWkvZGVjbGFyaW5nLWxheW91dC5odG1sIj5MYXlvdXRzPC9hPjwvbGk+DQotICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9cmVmZXJlbmNlL2FuZHJvaWQvYXBwL0FjdGl2aXR5Lmh0bWwjQWN0aXZpdHlMaWZlY3ljbGUiPkFjdGl2aXR5IExpZmVjeWNsZTwvYT48L2xpPg0KLTwvb2w+DQotPC9kaXY+DQotPC9kaXY+DQotDQotPHA+QW5kcm9pZCB3aWxsIHJ1biBvbiBtYW55ICBkZXZpY2VzIGluIG1hbnkgIHJlZ2lvbnMuIFRvIHJlYWNoIHRoZSBtb3N0IHVzZXJzLA0KLXlvdXIgYXBwbGljYXRpb24gc2hvdWxkIGhhbmRsZSB0ZXh0LCBhdWRpbyBmaWxlcywgbnVtYmVycywgY3VycmVuY3ksIGFuZA0KLWdyYXBoaWNzIGluIHdheXMgYXBwcm9wcmlhdGUgdG8gdGhlIGxvY2FsZXMgd2hlcmUgeW91ciBhcHBsaWNhdGlvbiB3aWxsIGJlIHVzZWQuDQotPC9wPg0KLQ0KLTxwPlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGJlc3QgcHJhY3RpY2VzIGZvciBsb2NhbGl6aW5nIEFuZHJvaWQNCi1hcHBsaWNhdGlvbnMuIFRoZSBwcmluY2lwbGVzIGFwcGx5IHdoZXRoZXIgeW91IGFyZSBkZXZlbG9waW5nIHlvdXIgYXBwbGljYXRpb24gIA0KLXVzaW5nIEFEVCB3aXRoIEVjbGlwc2UsIEFudC1iYXNlZCB0b29scywgb3IgYW55IG90aGVyIElERS4gPC9wPg0KLQ0KLTxwPllvdSBzaG91bGQgYWxyZWFkeSBoYXZlIGEgd29ya2luZyBrbm93bGVkZ2Ugb2YgSmF2YSBhbmQgYmUgIGZhbWlsaWFyIHdpdGgNCi1BbmRyb2lkIHJlc291cmNlIGxvYWRpbmcsIHRoZSBkZWNsYXJhdGlvbiBvZiB1c2VyIGludGVyZmFjZSBlbGVtZW50cyBpbiBYTUwsDQotZGV2ZWxvcG1lbnQgY29uc2lkZXJhdGlvbnMgc3VjaCBhcyBBY3Rpdml0eSBsaWZlY3ljbGUsIGFuZCBnZW5lcmFsIHByaW5jaXBsZXMgb2YNCi1pbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbG9jYWxpemF0aW9uLiA8L3A+DQotDQotPHA+SXQgaXMgZ29vZCBwcmFjdGljZSB0byB1c2UgdGhlIEFuZHJvaWQgcmVzb3VyY2UgZnJhbWV3b3JrIHRvIHNlcGFyYXRlIHRoZQ0KLWxvY2FsaXplZCBhc3BlY3RzIG9mIHlvdXIgYXBwbGljYXRpb24gYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIHRoZSBjb3JlIEphdmENCi1mdW5jdGlvbmFsaXR5OjwvcD4NCi0NCi08dWw+DQotICA8bGk+WW91IGNhbiBwdXQgbW9zdCBvciBhbGwgb2YgdGhlIDxlbT5jb250ZW50czwvZW0+IG9mIHlvdXIgYXBwbGljYXRpb24ncw0KLXVzZXIgaW50ZXJmYWNlIGludG8gcmVzb3VyY2UgZmlsZXMsIGFzIGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50IGFuZCBpbiA8YQ0KLWhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCI+UHJvdmlkaW5nIFJlc291cmNlczwvYT4uPC9saT4NCi0gIDxsaT5UaGUgPGVtPmJlaGF2aW9yPC9lbT4gb2YgdGhlIHVzZXIgaW50ZXJmYWNlLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgZHJpdmVuDQotYnkgeW91ciBKYXZhIGNvZGUuIA0KLSAgICBGb3IgZXhhbXBsZSwgaWYgdXNlcnMgaW5wdXQgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIGZvcm1hdHRlZCBvciBzb3J0ZWQNCi1kaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gbG9jYWxlLCB0aGVuIHlvdSB3b3VsZCB1c2UgSmF2YSB0byBoYW5kbGUgdGhlIGRhdGENCi1wcm9ncmFtbWF0aWNhbGx5LiBUaGlzIGRvY3VtZW50IGRvZXMgbm90IGNvdmVyIGhvdyB0byAgbG9jYWxpemUgeW91ciBKYXZhIGNvZGUuDQotPC9saT4NCi08L3VsPg0KLQ0KLTxwPkZvciBhIHNob3J0IGd1aWRlIHRvIGxvY2FsaXppbmcgc3RyaW5ncyBpbiB5b3VyIGFwcCwgc2VlIHRoZSB0cmFpbmluZyBsZXNzb24sIDxhDQotaHJlZj0ie0Bkb2NSb290fXRyYWluaW5nL2Jhc2ljcy9zdXBwb3J0aW5nLWRldmljZXMvbGFuZ3VhZ2VzLmh0bWwiPlN1cHBvcnRpbmcgRGlmZmVyZW50IExhbmd1YWdlczwvYT4uIDwvcD4NCi0NCi0NCi08aDIgaWQ9InJlc291cmNlLXN3aXRjaGluZyI+T3ZlcnZpZXc6IFJlc291cmNlLVN3aXRjaGluZyBpbiBBbmRyb2lkPC9oMj4NCi0NCi08cD5SZXNvdXJjZXMgYXJlIHRleHQgc3RyaW5ncywgbGF5b3V0cywgc291bmRzLCBncmFwaGljcywgYW5kIGFueSBvdGhlciBzdGF0aWMNCi1kYXRhIHRoYXQgeW91ciAgQW5kcm9pZCBhcHBsaWNhdGlvbiAgbmVlZHMuIEFuIGFwcGxpY2F0aW9uIGNhbiBpbmNsdWRlIG11bHRpcGxlDQotc2V0cyBvZiByZXNvdXJjZXMsIGVhY2ggY3VzdG9taXplZCBmb3IgYSBkaWZmZXJlbnQgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIFdoZW4gYQ0KLXVzZXIgcnVucyB0aGUgYXBwbGljYXRpb24sICBBbmRyb2lkICAgIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyBhbmQgbG9hZHMgdGhlIA0KLXJlc291cmNlcyB0aGF0IGJlc3QgbWF0Y2ggdGhlIGRldmljZS48L3A+DQotDQotPHA+KFRoaXMgZG9jdW1lbnQgZm9jdXNlcyBvbiBsb2NhbGl6YXRpb24gYW5kIGxvY2FsZS4gRm9yIGEgY29tcGxldGUgZGVzY3JpcHRpb24NCi1vZiByZXNvdXJjZS1zd2l0Y2hpbmcgYW5kIGFsbCB0aGUgdHlwZXMgb2YgY29uZmlndXJhdGlvbnMgdGhhdCB5b3UgY2FuDQotc3BlY2lmeSAmIzgyMTI7IHNjcmVlbiBvcmllbnRhdGlvbiwgdG91Y2hzY3JlZW4gdHlwZSwgYW5kIHNvIG9uICYjODIxMjsgc2VlIDxhDQotaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZXNvdXJjZXMvcHJvdmlkaW5nLXJlc291cmNlcy5odG1sI0FsdGVybmF0aXZlUmVzb3VyY2VzIj5Qcm92aWRpbmcNCi1BbHRlcm5hdGl2ZSBSZXNvdXJjZXM8L2E+Lik8L3A+DQotDQotPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4NCi0gIDx0ciBib3JkZXI9IjAiPg0KLSAgICA8dGQgd2lkdGg9IjE4MCIgc3R5bGU9ImJvcmRlcjogMHB0IG5vbmUgOyI+PHAgY2xhc3M9InNwZWNpYWwtbm90ZSI+DQotICAgIDxzdHJvbmc+V2hlbiB5b3Ugd3JpdGUgeW91ciBhcHBsaWNhdGlvbjo8L3N0cm9uZz4NCi0gICAgPGJyPjxicj4NCi0gICAgWW91IGNyZWF0ZSBhIHNldCBvZiBkZWZhdWx0IHJlc291cmNlcywgcGx1cyBhbHRlcm5hdGl2ZXMgdG8gYmUgdXNlZCBpbg0KLSAgICBkaWZmZXJlbnQgbG9jYWxlcy48L3A+PC90ZD4NCi0gICAgPHRkIHN0eWxlPSJib3JkZXI6IDBwdCBub25lOyBwYWRkaW5nOjAiPg0KLSAgICA8cCBzdHlsZT0iYm9yZGVyOjA7IHBhZGRpbmc6MCI+PGltZyBzcmM9Ii4uLy4uLy4uL2ltYWdlcy9yZXNvdXJjZXMvcmlnaHQtYXJyb3cucG5nIiBhbHQ9InJpZ2h0LWFycm93IiANCi0gICAgd2lkdGg9IjUxIiBoZWlnaHQ9IjE3Ij48L3A+PC90ZD4NCi0gICAgPHRkIHdpZHRoPSIxODAiIHN0eWxlPSJib3JkZXI6IDBwdCBub25lIDsiPjxwIGNsYXNzPSJzcGVjaWFsLW5vdGUiPg0KLSAgICA8c3Ryb25nPldoZW4gYSB1c2VyIHJ1bnMgeW91ciBhcHBsaWNhdGlvbjo8L3N0cm9uZz4NCi0gICAgPGJyPjxicj5UaGUgQW5kcm9pZCBzeXN0ZW0gc2VsZWN0cyB3aGljaCByZXNvdXJjZXMgdG8gbG9hZCwgYmFzZWQgb24gdGhlDQotICAgIGRldmljZSdzIGxvY2FsZS48L3A+PC90ZD4NCi0gIDwvdHI+DQotPC90YWJsZT4NCi0NCi08cD5XaGVuIHlvdSB3cml0ZSB5b3VyIGFwcGxpY2F0aW9uLCB5b3UgY3JlYXRlIGRlZmF1bHQgYW5kIGFsdGVybmF0aXZlIHJlc291cmNlcw0KLWZvciB5b3VyIGFwcGxpY2F0aW9uIHRvIHVzZS4gVG8gY3JlYXRlICByZXNvdXJjZXMsIHlvdSBwbGFjZSBmaWxlcyB3aXRoaW4NCi1zcGVjaWFsbHkgbmFtZWQgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIHByb2plY3QncyA8Y29kZT5yZXMvPC9jb2RlPiBkaXJlY3RvcnkuDQotPC9wPg0KLQ0KLQ0KLQ0KLTxoMyBpZD0iZGVmYXVsdHMtci1pbXBvcnRhbnQiPldoeSBEZWZhdWx0IFJlc291cmNlcyBBcmUgSW1wb3J0YW50PC9oMz4NCi0NCi08cD5XaGVuZXZlciB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBhIGxvY2FsZSBmb3Igd2hpY2ggeW91IGhhdmUgbm90IHByb3ZpZGVkDQotbG9jYWxlLXNwZWNpZmljIHRleHQsICBBbmRyb2lkIHdpbGwgbG9hZCB0aGUgZGVmYXVsdCBzdHJpbmdzIGZyb20NCi08Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPi4gSWYgdGhpcyBkZWZhdWx0ICBmaWxlIGlzIGFic2VudCwgb3IgaWYgaXQgDQotaXMgbWlzc2luZyBhIHN0cmluZyB0aGF0IHlvdXIgYXBwbGljYXRpb24gbmVlZHMsIHRoZW4geW91ciBhcHBsaWNhdGlvbiB3aWxsIG5vdCBydW4gDQotYW5kIHdpbGwgc2hvdyBhbiBlcnJvci4gDQotVGhlIGV4YW1wbGUgYmVsb3cgaWxsdXN0cmF0ZXMgd2hhdCBjYW4gaGFwcGVuIHdoZW4gdGhlIGRlZmF1bHQgdGV4dCBmaWxlIGlzIGluY29tcGxldGUuIDwvcD4NCi0NCi08cD48ZW0+RXhhbXBsZTo8L2VtPg0KLTxwPkFuIGFwcGxpY2F0aW9uJ3MgSmF2YSBjb2RlIHJlZmVycyB0byBqdXN0IHR3byBzdHJpbmdzLCA8Y29kZT50ZXh0X2E8L2NvZGU+IGFuZCANCi0JPGNvZGU+dGV4dF9iPC9jb2RlPi4gVGhpcyBhcHBsaWNhdGlvbiBpbmNsdWRlcyBhIGxvY2FsaXplZCByZXNvdXJjZSBmaWxlIA0KLQkoPGNvZGU+cmVzL3ZhbHVlcy1lbi9zdHJpbmdzLnhtbDwvY29kZT4pIHRoYXQgZGVmaW5lcyA8Y29kZT50ZXh0X2E8L2NvZGU+IGFuZCANCi0JPGNvZGU+dGV4dF9iPC9jb2RlPiBpbiBFbmdsaXNoLiBUaGlzIGFwcGxpY2F0aW9uIGFsc28gaW5jbHVkZXMgYSBkZWZhdWx0IA0KLQlyZXNvdXJjZSBmaWxlICg8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPikgdGhhdCBpbmNsdWRlcyBhDQotZGVmaW5pdGlvbiBmb3IgPGNvZGU+dGV4dF9hPC9jb2RlPiwgYnV0IG5vdCBmb3IgPGNvZGU+dGV4dF9iPC9jb2RlPjoNCi08dWw+DQotICA8bGk+VGhpcyBhcHBsaWNhdGlvbiBtaWdodCBjb21waWxlIHdpdGhvdXQgYSBwcm9ibGVtLiBBbiBJREUgc3VjaCBhcyBFY2xpcHNlIA0KLSAgCXdpbGwgbm90IGhpZ2hsaWdodCBhbnkgZXJyb3JzIGlmIGEgcmVzb3VyY2UgaXMgbWlzc2luZy48L2xpPg0KLSAgPGxpPldoZW4gdGhpcyBhcHBsaWNhdGlvbiBpcyBsYXVuY2hlZCBvbiBhIGRldmljZSB3aXRoIGxvY2FsZSBzZXQgdG8gRW5nbGlzaCwgDQotICAJdGhlIGFwcGxpY2F0aW9uICBtaWdodCBydW4gd2l0aG91dCBhIHByb2JsZW0sIGJlY2F1c2UgDQotICAJPGNvZGU+cmVzL3ZhbHVlcy1lbi9zdHJpbmdzLnhtbDwvY29kZT4gY29udGFpbnMgYm90aCBvZiB0aGUgbmVlZGVkIHRleHQgDQotICAJc3RyaW5ncy48L2xpPg0KLSAgPGxpPkhvd2V2ZXIsIDxzdHJvbmc+dGhlIHVzZXIgIHdpbGwgc2VlIGFuIGVycm9yIG1lc3NhZ2UgYW5kIGEgRm9yY2UgQ2xvc2UgDQotICAJYnV0dG9uPC9zdHJvbmc+IHdoZW4gdGhpcyBhcHBsaWNhdGlvbiBpcyBsYXVuY2hlZCBvbiBhIGRldmljZSBzZXQgdG8gYSANCi0gIAlsYW5ndWFnZSBvdGhlciB0aGFuIEVuZ2xpc2guIFRoZSBhcHBsaWNhdGlvbiB3aWxsIG5vdCBsb2FkLjwvbGk+DQotPC91bD4NCi0NCi0NCi08cD5UbyBwcmV2ZW50IHRoaXMgc2l0dWF0aW9uLCBtYWtlIHN1cmUgdGhhdCBhIDxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+IA0KLQlmaWxlIGV4aXN0cyBhbmQgdGhhdCBpdCBkZWZpbmVzIGV2ZXJ5IG5lZWRlZCBzdHJpbmcuIFRoZSBzaXR1YXRpb24gYXBwbGllcyB0byANCi0JYWxsIHR5cGVzIG9mIHJlc291cmNlcywgbm90IGp1c3Qgc3RyaW5nczogWW91IA0KLQluZWVkIHRvIGNyZWF0ZSBhICBzZXQgb2YgZGVmYXVsdCByZXNvdXJjZSBmaWxlcyBjb250YWluaW5nIGFsbCANCi0JdGhlIHJlc291cmNlcyB0aGF0IHlvdXIgYXBwbGljYXRpb24gY2FsbHMgdXBvbiAmIzgyMTI7IGxheW91dHMsIGRyYXdhYmxlcywgDQotCWFuaW1hdGlvbnMsIGV0Yy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IHRlc3RpbmcsIHNlZSA8YSBocmVmPSIjdGVzdC1mb3ItZGVmYXVsdCI+DQotCVRlc3RpbmcgZm9yIERlZmF1bHQgUmVzb3VyY2VzPC9hPi48L3A+DQotDQotPGgyIGlkPSJ1c2luZy1mcmFtZXdvcmsiPlVzaW5nIFJlc291cmNlcyBmb3IgTG9jYWxpemF0aW9uPC9oMj4NCi0NCi08aDMgaWQ9ImNyZWF0aW5nLWRlZmF1bHRzIj5Ib3cgdG8gQ3JlYXRlIERlZmF1bHQgUmVzb3VyY2VzPC9oMz4NCi0NCi08cD5QdXQgdGhlIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCB0ZXh0IGluDQotYSBmaWxlIHdpdGggdGhlIGZvbGxvd2luZyBsb2NhdGlvbiBhbmQgbmFtZTo8L3A+DQotPHA+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4gKHJlcXVpcmVkIGRpcmVjdG9yeSk8L3A+DQotDQotPHA+VGhlIHRleHQgc3RyaW5ncyBpbiA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBzaG91bGQgIHVzZSB0aGUNCi1kZWZhdWx0IGxhbmd1YWdlLCB3aGljaCBpcyB0aGUgbGFuZ3VhZ2UgdGhhdCB5b3UgZXhwZWN0IG1vc3Qgb2YgeW91ciBhcHBsaWNhdGlvbidzIHVzZXJzIHRvDQotc3BlYWsuICA8L3A+DQotDQotPHA+VGhlIGRlZmF1bHQgcmVzb3VyY2Ugc2V0IG11c3QgYWxzbyBpbmNsdWRlIGFueSBkZWZhdWx0IGRyYXdhYmxlcyBhbmQgbGF5b3V0cywgDQotCWFuZCBjYW4gaW5jbHVkZSBvdGhlciB0eXBlcyBvZiByZXNvdXJjZXMgc3VjaCBhcyBhbmltYXRpb25zLiANCi08YnI+DQotICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvZHJhd2FibGUvPC9jb2RlPihyZXF1aXJlZCBkaXJlY3RvcnkgaG9sZGluZyBhdCBsZWFzdA0KLSAgb25lIGdyYXBoaWMgZmlsZSwgZm9yIHRoZSBhcHBsaWNhdGlvbidzIGljb24gb24gR29vZ2xlIFBsYXkpPGJyPg0KLSAgPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzL2xheW91dC88L2NvZGU+IChyZXF1aXJlZCBkaXJlY3RvcnkgaG9sZGluZyBhbiBYTUwNCi0gIGZpbGUgdGhhdCBkZWZpbmVzIHRoZSBkZWZhdWx0IGxheW91dCk8YnI+DQotICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvYW5pbS88L2NvZGU+IChyZXF1aXJlZCBpZiB5b3UgaGF2ZSBhbnkgDQotICA8Y29kZT5yZXMvYW5pbS08ZW0+Jmx0O3F1YWxpZmllcnMmZ3Q7PC9lbT48L2NvZGU+IGZvbGRlcnMpPGJyPg0KLSAgPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzL3htbC88L2NvZGU+IChyZXF1aXJlZCBpZiB5b3UgaGF2ZSBhbnkgDQotICA8Y29kZT5yZXMveG1sLTxlbT4mbHQ7cXVhbGlmaWVycyZndDs8L2VtPjwvY29kZT4gZm9sZGVycyk8YnI+DQotICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvcmF3LzwvY29kZT4gKHJlcXVpcmVkIGlmIHlvdSBoYXZlIGFueSANCi0gIDxjb2RlPnJlcy9yYXctPGVtPiZsdDtxdWFsaWZpZXJzJmd0OzwvZW0+PC9jb2RlPiBmb2xkZXJzKQ0KLTwvcD4NCi0NCi08cCBjbGFzcz0ibm90ZSI+PHN0cm9uZz5UaXA6PC9zdHJvbmc+IEluIHlvdXIgY29kZSwgZXhhbWluZSBlYWNoIHJlZmVyZW5jZSB0byANCi0JYW4gQW5kcm9pZCByZXNvdXJjZS4gTWFrZSBzdXJlIHRoYXQgYSBkZWZhdWx0IHJlc291cmNlIGlzIGRlZmluZWQgZm9yIGVhY2gNCi0Jb25lLiBBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHN0cmluZyBmaWxlIGlzIGNvbXBsZXRlOiBBIDxlbT4NCi0JbG9jYWxpemVkPC9lbT4gc3RyaW5nIGZpbGUgY2FuIGNvbnRhaW4gYSBzdWJzZXQgb2YgdGhlIHN0cmluZ3MsIGJ1dCB0aGUgDQotCTxlbT5kZWZhdWx0PC9lbT4gc3RyaW5nIGZpbGUgbXVzdCBjb250YWluIHRoZW0gYWxsLiANCi08L3A+DQotDQotPGgzIGlkPSJjcmVhdGluZy1hbHRlcm5hdGl2ZXMiPkhvdyB0byBDcmVhdGUgQWx0ZXJuYXRpdmUgUmVzb3VyY2VzPC9oMz4NCi0NCi08cD5BIGxhcmdlIHBhcnQgb2YgbG9jYWxpemluZyBhbiBhcHBsaWNhdGlvbiBpcyBwcm92aWRpbmcgYWx0ZXJuYXRpdmUgdGV4dCBmb3INCi1kaWZmZXJlbnQgbGFuZ3VhZ2VzLiBJbiBzb21lIGNhc2VzIHlvdSB3aWxsIGFsc28gcHJvdmlkZSBhbHRlcm5hdGl2ZSBncmFwaGljcywNCi1zb3VuZHMsIGxheW91dHMsIGFuZCBvdGhlciBsb2NhbGUtc3BlY2lmaWMgcmVzb3VyY2VzLiA8L3A+DQotDQotPHA+QW4gYXBwbGljYXRpb24gY2FuIHNwZWNpZnkgbWFueSA8Y29kZT5yZXMvPGVtPiZsdDtxdWFsaWZpZXJzJmd0OzwvZW0+LzwvY29kZT4NCi1kaXJlY3RvcmllcywgZWFjaCB3aXRoIGRpZmZlcmVudCBxdWFsaWZpZXJzLiBUbyBjcmVhdGUgYW4gYWx0ZXJuYXRpdmUgcmVzb3VyY2UgZm9yDQotYSBkaWZmZXJlbnQgbG9jYWxlLCB5b3UgdXNlIGEgcXVhbGlmaWVyIHRoYXQgc3BlY2lmaWVzIGEgbGFuZ3VhZ2Ugb3IgYSANCi1sYW5ndWFnZS1yZWdpb24gY29tYmluYXRpb24uIChUaGUgbmFtZSBvZiBhIHJlc291cmNlIGRpcmVjdG9yeSBtdXN0IGNvbmZvcm0gDQotdG8gdGhlIG5hbWluZyBzY2hlbWUgZGVzY3JpYmVkIGluIA0KLTxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCNBbHRlcm5hdGl2ZVJlc291cmNlcyI+UHJvdmlkaW5nDQotQWx0ZXJuYXRpdmUgUmVzb3VyY2VzPC9hPiwNCi1vciBlbHNlIGl0IHdpbGwgbm90IGNvbXBpbGUuKTwvcD4NCi0NCi08cD48ZW0+RXhhbXBsZTo8L2VtPjwvcD4NCi0NCi08cD5TdXBwb3NlIHRoYXQgeW91ciBhcHBsaWNhdGlvbidzIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgRW5nbGlzaC4gU3VwcG9zZSBhbHNvDQotdGhhdCB5b3Ugd2FudCB0byBsb2NhbGl6ZSBhbGwgdGhlIHRleHQgaW4geW91ciBhcHBsaWNhdGlvbiB0byBGcmVuY2gsIGFuZCBtb3N0DQotb2YgdGhlIHRleHQgaW4geW91ciBhcHBsaWNhdGlvbiAoZXZlcnl0aGluZyBleGNlcHQgdGhlIGFwcGxpY2F0aW9uJ3MgdGl0bGUpIHRvDQotSmFwYW5lc2UuIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIGNyZWF0ZSB0aHJlZSBhbHRlcm5hdGl2ZSA8Y29kZT5zdHJpbmdzLnhtbDwvY29kZT4NCi1maWxlcywgZWFjaCBzdG9yZWQgaW4gYSBsb2NhbGUtc3BlY2lmaWMgcmVzb3VyY2UgZGlyZWN0b3J5OjwvcD4NCi0NCi08b2w+DQotICA8bGk+PGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT48YnI+DQotICAgIENvbnRhaW5zICBFbmdsaXNoIHRleHQgZm9yIGFsbCAgdGhlIHN0cmluZ3MgdGhhdCB0aGUgYXBwbGljYXRpb24gdXNlcywNCi1pbmNsdWRpbmcgdGV4dCBmb3IgYSBzdHJpbmcgbmFtZWQgPGNvZGU+dGl0bGU8L2NvZGU+LjwvbGk+DQotICA8bGk+PGNvZGU+cmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbDwvY29kZT48YnI+DQotICAgIENvbnRhaW4gRnJlbmNoIHRleHQgZm9yIGFsbCAgdGhlIHN0cmluZ3MsIGluY2x1ZGluZyA8Y29kZT50aXRsZTwvY29kZT4uPC9saT4NCi0gIDxsaT48Y29kZT5yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sPC9jb2RlPjxicj4NCi0gICAgQ29udGFpbiBKYXBhbmVzZSB0ZXh0IGZvciBhbGwgIHRoZSBzdHJpbmdzIDxlbT5leGNlcHQ8L2VtPg0KLTxjb2RlPnRpdGxlPC9jb2RlPi48YnI+DQotICA8Y29kZT48L2NvZGU+PC9saT4NCi08L29sPg0KLQ0KLTxwPklmIHlvdXIgSmF2YSBjb2RlIHJlZmVycyB0byA8Y29kZT5SLnN0cmluZy50aXRsZTwvY29kZT4sICBoZXJlIGlzIHdoYXQgd2lsbA0KLWhhcHBlbiBhdCBydW50aW1lOjwvcD4NCi0NCi08dWw+DQotICA8bGk+SWYgdGhlIGRldmljZSBpcyBzZXQgdG8gYW55IGxhbmd1YWdlIG90aGVyIHRoYW4gRnJlbmNoLCBBbmRyb2lkIHdpbGwgbG9hZA0KLTxjb2RlPnRpdGxlPC9jb2RlPiBmcm9tIHRoZSA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlLjwvbGk+DQotICA8bGk+SWYgdGhlIGRldmljZSBpcyBzZXQgdG8gRnJlbmNoLCBBbmRyb2lkIHdpbGwgbG9hZCA8Y29kZT50aXRsZTwvY29kZT4gZnJvbQ0KLXRoZSA8Y29kZT5yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlLjwvbGk+DQotPC91bD4NCi0NCi08cD5Ob3RpY2UgdGhhdCBpZiB0aGUgZGV2aWNlIGlzIHNldCB0byBKYXBhbmVzZSwgQW5kcm9pZCB3aWxsIGxvb2sgZm9yDQotPGNvZGU+dGl0bGU8L2NvZGU+IGluIHRoZSA8Y29kZT5yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlLiBCdXQNCi1iZWNhdXNlIG5vIHN1Y2ggc3RyaW5nIGlzIGluY2x1ZGVkIGluIHRoYXQgZmlsZSwgQW5kcm9pZCB3aWxsIGZhbGwgYmFjayB0byB0aGUNCi1kZWZhdWx0LCBhbmQgd2lsbCBsb2FkICA8Y29kZT50aXRsZTwvY29kZT4gaW4gRW5nbGlzaCBmcm9tIHRoZQ0KLTxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+IGZpbGUuICA8L3A+DQotDQotPGgzIGlkPSJyZXNvdXJjZS1wcmVjZWRlbmNlIj5XaGljaCBSZXNvdXJjZXMgVGFrZSBQcmVjZWRlbmNlPzwvaDM+DQotDQotPHA+IElmIG11bHRpcGxlIHJlc291cmNlIGZpbGVzIG1hdGNoIGEgZGV2aWNlJ3MgY29uZmlndXJhdGlvbiwgQW5kcm9pZCBmb2xsb3dzIGENCi1zZXQgb2YgcnVsZXMgaW4gZGVjaWRpbmcgd2hpY2ggZmlsZSB0byB1c2UuIEFtb25nIHRoZSBxdWFsaWZpZXJzIHRoYXQgY2FuIGJlDQotc3BlY2lmaWVkIGluIGEgcmVzb3VyY2UgZGlyZWN0b3J5IG5hbWUsIDxzdHJvbmc+bG9jYWxlIGFsbW9zdCBhbHdheXMgdGFrZXMNCi1wcmVjZWRlbmNlPC9zdHJvbmc+LiA8L3A+DQotPHA+PGVtPkV4YW1wbGU6PC9lbT48L3A+DQotDQotPHA+QXNzdW1lIHRoYXQgYW4gYXBwbGljYXRpb24gIGluY2x1ZGVzIGEgZGVmYXVsdCBzZXQgb2YgZ3JhcGhpY3MgYW5kIHR3byBvdGhlcg0KLXNldHMgb2YgZ3JhcGhpY3MsIGVhY2ggb3B0aW1pemVkIGZvciBhIGRpZmZlcmVudCBkZXZpY2Ugc2V0dXA6PC9wPg0KLQ0KLTx1bD4NCi0gIDxsaT48Y29kZT5yZXMvZHJhd2FibGUvPC9jb2RlPjxicj4NCi0gICAgQ29udGFpbnMNCi0gIGRlZmF1bHQgZ3JhcGhpY3MuPC9saT4NCi0gIDxsaT48Y29kZT5yZXMvZHJhd2FibGUtc21hbGwtbGFuZC1zdHlsdXMvPC9jb2RlPjxicj4NCi0gIENvbnRhaW5zICBncmFwaGljcyBvcHRpbWl6ZWQgZm9yIHVzZSB3aXRoIGEgZGV2aWNlIHRoYXQgZXhwZWN0cyBpbnB1dCBmcm9tIGEgDQotICBzdHlsdXMgYW5kIGhhcyBhIFFWR0EgbG93LWRlbnNpdHkgc2NyZWVuIGluIGxhbmRzY2FwZSBvcmllbnRhdGlvbi48L2xpPg0KLSAgPGxpPjxjb2RlPnJlcy9kcmF3YWJsZS1qYS88L2NvZGU+IDxicj4NCi0gIENvbnRhaW5zICBncmFwaGljcyBvcHRpbWl6ZWQgZm9yIHVzZSB3aXRoIEphcGFuZXNlLjwvbGk+DQotPC91bD4NCi0NCi08cD5JZiB0aGUgYXBwbGljYXRpb24gcnVucyBvbiBhIGRldmljZSB0aGF0IGlzIGNvbmZpZ3VyZWQgdG8gdXNlIEphcGFuZXNlLA0KLUFuZHJvaWQgd2lsbCBsb2FkIGdyYXBoaWNzIGZyb20gIDxjb2RlPnJlcy9kcmF3YWJsZS1qYS88L2NvZGU+LCBldmVuIGlmIHRoZQ0KLWRldmljZSBoYXBwZW5zIHRvIGJlIG9uZSB0aGF0IGV4cGVjdHMgaW5wdXQgZnJvbSBhIHN0eWx1cyBhbmQgaGFzIGEgUVZHQSANCi1sb3ctZGVuc2l0eSBzY3JlZW4gaW4gbGFuZHNjYXBlIG9yaWVudGF0aW9uLjwvcD4NCi0NCi08cCBjbGFzcz0ibm90ZSI+PHN0cm9uZz5FeGNlcHRpb246PC9zdHJvbmc+IFRoZSBvbmx5IHF1YWxpZmllcnMgdGhhdCB0YWtlDQotcHJlY2VkZW5jZSBvdmVyIGxvY2FsZSBpbiB0aGUgc2VsZWN0aW9uIHByb2Nlc3MgYXJlIE1DQyBhbmQgTU5DIChtb2JpbGUgY291bnRyeQ0KLWNvZGUgYW5kIG1vYmlsZSBuZXR3b3JrIGNvZGUpLiA8L3A+DQotDQotPHA+PGVtPkV4YW1wbGU6PC9lbT48L3A+DQotDQotPHA+QXNzdW1lIHRoYXQgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBzaXR1YXRpb246PC9wPg0KLQ0KLTx1bD4NCi0gIDxsaT5UaGUgYXBwbGljYXRpb24gY29kZSBjYWxscyBmb3IgPGNvZGU+Ui5zdHJpbmcudGV4dF9hPC9jb2RlPjwvbGk+DQotICA8bGk+VHdvIHJlbGV2YW50IHJlc291cmNlIGZpbGVzIGFyZSBhdmFpbGFibGU6DQotICAgIDx1bD4NCi0gICAgICA8bGk+PGNvZGU+cmVzL3ZhbHVlcy1tY2M0MDQvc3RyaW5ncy54bWw8L2NvZGU+LCB3aGljaCBpbmNsdWRlcw0KLTxjb2RlPnRleHRfYTwvY29kZT4gaW4gdGhlIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCBsYW5ndWFnZSwgaW4gdGhpcyBjYXNlDQotRW5nbGlzaC48L2xpPg0KLSAgICAgIDxsaT48Y29kZT5yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sPC9jb2RlPiwgd2hpY2ggaW5jbHVkZXMNCi08Y29kZT50ZXh0X2E8L2NvZGU+IGluIEhpbmRpLjwvbGk+DQotICAgIDwvdWw+DQotICA8L2xpPg0KLSAgPGxpPlRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIG9uIGEgZGV2aWNlIHRoYXQgaGFzIHRoZSBmb2xsb3dpbmcNCi1jb25maWd1cmF0aW9uOg0KLSAgICA8dWw+DQotICAgICAgPGxpPlRoZSBTSU0gY2FyZCBpcyBjb25uZWN0ZWQgdG8gYSBtb2JpbGUgbmV0d29yayBpbiBJbmRpYSAoTUNDIDQwNCkuPC9saT4NCi0gICAgICA8bGk+VGhlIGxhbmd1YWdlIGlzIHNldCB0byBIaW5kaSAoPGNvZGU+aGk8L2NvZGU+KS48L2xpPg0KLSAgICA8L3VsPg0KLSAgPC9saT4NCi08L3VsPg0KLQ0KLTxwPkFuZHJvaWQgd2lsbCBsb2FkIDxjb2RlPnRleHRfYTwvY29kZT4gZnJvbQ0KLTxjb2RlPnJlcy92YWx1ZXMtbWNjNDA0L3N0cmluZ3MueG1sPC9jb2RlPiAoaW4gRW5nbGlzaCksIGV2ZW4gaWYgdGhlIGRldmljZSBpcw0KLWNvbmZpZ3VyZWQgZm9yIEhpbmRpLiBUaGF0IGlzIGJlY2F1c2UgaW4gdGhlIHJlc291cmNlLXNlbGVjdGlvbiBwcm9jZXNzLCBBbmRyb2lkDQotd2lsbCBwcmVmZXIgYW4gTUNDIG1hdGNoIG92ZXIgYSBsYW5ndWFnZSBtYXRjaC4gPC9wPg0KLQ0KLTxwPlRoZSBzZWxlY3Rpb24gcHJvY2VzcyBpcyBub3QgYWx3YXlzIGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcyB0aGVzZSBleGFtcGxlcw0KLXN1Z2dlc3QuIFBsZWFzZSByZWFkICA8YQ0KLWhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCNCZXN0TWF0Y2giPkhvdyBBbmRyb2lkIEZpbmRzDQotdGhlIEJlc3QtbWF0Y2hpbmcgUmVzb3VyY2U8L2E+IGZvciBhIG1vcmUgbnVhbmNlZCBkZXNjcmlwdGlvbiBvZiB0aGUNCi1wcm9jZXNzLiBBbGwgdGhlIHF1YWxpZmllcnMgYXJlIGRlc2NyaWJlZCBhbmQgbGlzdGVkIGluIG9yZGVyIG9mDQotcHJlY2VkZW5jZSBpbiA8YQ0KLWhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCN0YWJsZTIiPlRhYmxlIDIgb2YgUHJvdmlkaW5nDQotQWx0ZXJuYXRpdmUgUmVzb3VyY2VzPC9hPi48L3A+DQotDQotPGgzIGlkPSJyZWZlcnJpbmctdG8tcmVzb3VyY2VzIj5SZWZlcnJpbmcgdG8gUmVzb3VyY2VzIGluIEphdmE8L2gzPg0KLQ0KLTxwPkluIHlvdXIgYXBwbGljYXRpb24ncyBKYXZhIGNvZGUsIHlvdSByZWZlciB0byAgcmVzb3VyY2VzIHVzaW5nIHRoZSBzeW50YXgNCi08Y29kZT5SLjxlbT5yZXNvdXJjZV90eXBlPC9lbT4uPGVtPnJlc291cmNlX25hbWU8L2VtPjwvY29kZT4gb3INCi08Y29kZT5hbmRyb2lkLlIuPGVtPnJlc291cmNlX3R5cGU8L2VtPi48ZW0+cmVzb3VyY2VfbmFtZTwvZW0+PC9jb2RlPjxlbT4uPC9lbT4NCi1Gb3IgbW9yZSBhYm91dCB0aGlzLCBzZWUgPGENCi1ocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3Jlc291cmNlcy9hY2Nlc3NpbmctcmVzb3VyY2VzLmh0bWwiPkFjY2Vzc2luZyBSZXNvdXJjZXM8L2E+LjwvcD4NCi0NCi08aDIgaWQ9ImNoZWNrbGlzdCI+TG9jYWxpemF0aW9uIENoZWNrbGlzdDwvaDI+DQotDQotPHA+Rm9yIGEgY29tcGxldGUgb3ZlcnZpZXcgb2YgdGhlIHByb2Nlc3Mgb2YgbG9jYWxpemluZyBhbmQgZGlzdHJpYnV0aW5nIGFuIEFuZHJvaWQgYXBwbGljYXRpb24sDQotc2VlIHRoZSA8YSBocmVmPSJ7QGRvY1Jvb3R9ZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvbG9jYWxpemluZy5odG1sIj5Mb2NhbGl6YXRpb24NCi1DaGVja2xpc3Q8L2E+IGRvY3VtZW50LjwvcD4NCi0NCi08aDIgaWQ9InN0cmF0ZWdpZXMiPkxvY2FsaXphdGlvbiBUaXBzPC9oMj4NCi0NCi08aDQgaWQ9ImZhaWxpbmcyIj5EZXNpZ24geW91ciBhcHBsaWNhdGlvbiAgdG8gd29yayBpbiBhbnkgbG9jYWxlPC9oND4NCi0NCi08cD5Zb3UgY2Fubm90IGFzc3VtZSBhbnl0aGluZyBhYm91dCB0aGUgZGV2aWNlIG9uIHdoaWNoIGEgdXNlciB3aWxsDQotcnVuIHlvdXIgYXBwbGljYXRpb24uIFRoZSBkZXZpY2UgbWlnaHQgaGF2ZSBoYXJkd2FyZSB0aGF0IHlvdSB3ZXJlIG5vdA0KLWFudGljaXBhdGluZywgb3IgaXQgbWlnaHQgYmUgc2V0IHRvIGEgbG9jYWxlIHRoYXQgeW91IGRpZCBub3QgcGxhbiBmb3Igb3IgdGhhdCANCi15b3UgY2Fubm90IHRlc3QuIERlc2lnbiB5b3VyIGFwcGxpY2F0aW9uIHNvIHRoYXQgaXQgd2lsbCBmdW5jdGlvbiBub3JtYWxseSBvciBmYWlsIGdyYWNlZnVsbHkgbm8gDQotbWF0dGVyIHdoYXQgZGV2aWNlIGl0IHJ1bnMgb24uPC9wPg0KLQ0KLTxwIGNsYXNzPSJub3RlIj48c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gTWFrZSBzdXJlIHRoYXQgeW91ciBhcHBsaWNhdGlvbg0KLWluY2x1ZGVzIGEgZnVsbCBzZXQgb2YgZGVmYXVsdCByZXNvdXJjZXMuPC9wPiA8cD5NYWtlIHN1cmUgdG8gaW5jbHVkZQ0KLTxjb2RlPnJlcy9kcmF3YWJsZS88L2NvZGU+IGFuZCBhIDxjb2RlPnJlcy92YWx1ZXMvPC9jb2RlPiBmb2xkZXJzICh3aXRob3V0IGFueQ0KLWFkZGl0aW9uYWwgbW9kaWZpZXJzIGluIHRoZSBmb2xkZXIgbmFtZXMpIHRoYXQgY29udGFpbiBhbGwgdGhlIGltYWdlcyBhbmQgdGV4dA0KLXRoYXQgeW91ciBhcHBsaWNhdGlvbiB3aWxsIG5lZWQuIDwvcD4NCi0NCi08cD5JZiBhbiBhcHBsaWNhdGlvbiBpcyBtaXNzaW5nIGV2ZW4gb25lIGRlZmF1bHQgcmVzb3VyY2UsIGl0IHdpbGwgbm90IHJ1biBvbiBhIA0KLQlkZXZpY2UgdGhhdCBpcyBzZXQgdG8gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlLiBGb3IgZXhhbXBsZSwgdGhlIA0KLQk8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBkZWZhdWx0IGZpbGUgbWlnaHQgbGFjayBvbmUgc3RyaW5nIHRoYXQgDQotCXRoZSBhcHBsaWNhdGlvbiBuZWVkczogV2hlbiB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgYW5kIA0KLQlhdHRlbXB0cyB0byBsb2FkIDxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+LCB0aGUgdXNlciB3aWxsIHNlZSBhbiANCi0JZXJyb3IgbWVzc2FnZSBhbmQgYSBGb3JjZSBDbG9zZSBidXR0b24uIEFuIElERSBzdWNoIGFzIEVjbGlwc2Ugd2lsbCBub3QgDQotCWhpZ2hsaWdodCB0aGlzIGtpbmQgb2YgZXJyb3IsIGFuZCB5b3Ugd2lsbCBub3Qgc2VlIHRoZSBwcm9ibGVtIHdoZW4geW91IA0KLQl0ZXN0IHRoZSBhcHBsaWNhdGlvbiBvbiBhIGRldmljZSBvciBlbXVsYXRvciB0aGF0IGlzIHNldCB0byBhIHN1cHBvcnRlZCBsb2NhbGUuPC9wPg0KLQ0KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj0iI3Rlc3QtZm9yLWRlZmF1bHQiPlRlc3RpbmcgZm9yIERlZmF1bHQgUmVzb3VyY2VzPC9hPi48L3A+DQotDQotPGg0PkRlc2lnbiBhIGZsZXhpYmxlIGxheW91dDwvaDQ+DQotDQotPHA+IElmIHlvdSBuZWVkIHRvIHJlYXJyYW5nZSB5b3VyIGxheW91dCB0byBmaXQgYSBjZXJ0YWluIGxhbmd1YWdlIChmb3IgZXhhbXBsZQ0KLUdlcm1hbiB3aXRoIGl0cyBsb25nIHdvcmRzKSwgeW91IGNhbiBjcmVhdGUgYW4gYWx0ZXJuYXRpdmUgbGF5b3V0IGZvciB0aGF0DQotbGFuZ3VhZ2UgKGZvciBleGFtcGxlIDxjb2RlPnJlcy9sYXlvdXQtZGUvbWFpbi54bWw8L2NvZGU+KS4gSG93ZXZlciwgZG9pbmcgdGhpcw0KLWNhbiBtYWtlIHlvdXIgYXBwbGljYXRpb24gaGFyZGVyIHRvIG1haW50YWluLiAgSXQgaXMgYmV0dGVyIHRvIGNyZWF0ZSBhIHNpbmdsZQ0KLWxheW91dCB0aGF0IGlzIG1vcmUgZmxleGlibGUuPC9wPg0KLQ0KLTxwPkFub3RoZXIgdHlwaWNhbCBzaXR1YXRpb24gaXMgYSBsYW5ndWFnZSB0aGF0IHJlcXVpcmVzIHNvbWV0aGluZyBkaWZmZXJlbnQgaW4NCi1pdHMgbGF5b3V0LiBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IGhhdmUgYSBjb250YWN0IGZvcm0gdGhhdCBzaG91bGQgaW5jbHVkZSAgdHdvDQotbmFtZSBmaWVsZHMgd2hlbiB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBKYXBhbmVzZSwgYnV0IHRocmVlIG5hbWUgZmllbGRzIHdoZW4NCi10aGUgYXBwbGljYXRpb24gIHJ1bnMgaW4gc29tZSBvdGhlciBsYW5ndWFnZS4gWW91IGNvdWxkIGhhbmRsZSB0aGlzIGluIGVpdGhlciBvZg0KLXR3byB3YXlzOjwvcD4NCi0NCi08dWw+DQotICA8bGk+Q3JlYXRlICBvbmUgIGxheW91dCB3aXRoIGEgZmllbGQgdGhhdCB5b3UgY2FuIHByb2dyYW1tYXRpY2FsbHkgZW5hYmxlIG9yDQotZGlzYWJsZSwgYmFzZWQgb24gdGhlIGxhbmd1YWdlLCBvcjwvbGk+DQotICA8bGk+SGF2ZSB0aGUgbWFpbiBsYXlvdXQgaW5jbHVkZSBhbm90aGVyIGxheW91dCB0aGF0ICBpbmNsdWRlcyB0aGUgY2hhbmdlYWJsZQ0KLWZpZWxkLiBUaGUgc2Vjb25kIGxheW91dCBjYW4gaGF2ZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgZm9yIGRpZmZlcmVudA0KLWxhbmd1YWdlcy48L2xpPg0KLTwvdWw+DQotDQotPGg0PkF2b2lkIGNyZWF0aW5nIG1vcmUgcmVzb3VyY2UgZmlsZXMgYW5kIHRleHQgc3RyaW5ncyB0aGFuIHlvdSBuZWVkPC9oND4NCi0NCi08cD5Zb3UgcHJvYmFibHkgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGEgbG9jYWxlLXNwZWNpZmljDQotYWx0ZXJuYXRpdmUgZm9yIGV2ZXJ5IHJlc291cmNlIGluIHlvdXIgYXBwbGljYXRpb24uIEZvciBleGFtcGxlLCB0aGUgbGF5b3V0DQotZGVmaW5lZCBpbiB0aGUgPGNvZGU+cmVzL2xheW91dC9tYWluLnhtbDwvY29kZT4gZmlsZSBtaWdodCB3b3JrIGluIGFueSBsb2NhbGUsDQotaW4gd2hpY2ggY2FzZSB0aGVyZSB3b3VsZCBiZSBubyBuZWVkIHRvIGNyZWF0ZSBhbnkgYWx0ZXJuYXRpdmUgbGF5b3V0IGZpbGVzLg0KLTwvcD4NCi0NCi08cD5BbHNvLCB5b3UgbWlnaHQgbm90IG5lZWQgdG8gY3JlYXRlIGFsdGVybmF0aXZlIHRleHQgZm9yIGV2ZXJ5DQotc3RyaW5nLiBGb3IgZXhhbXBsZSwgYXNzdW1lIHRoZSBmb2xsb3dpbmc6PC9wPg0KLQ0KLTx1bD4NCi0gIDxsaT5Zb3VyIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCBsYW5ndWFnZSBpcyBBbWVyaWNhbg0KLUVuZ2xpc2guIEV2ZXJ5IHN0cmluZyB0aGF0IHRoZSBhcHBsaWNhdGlvbiB1c2VzIGlzIGRlZmluZWQsIHVzaW5nIEFtZXJpY2FuDQotRW5nbGlzaCBzcGVsbGluZ3MsIGluIDxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+LiA8L2xpPg0KLQ0KLSAgPGxpPkZvciAgYSBmZXcgaW1wb3J0YW50IHBocmFzZXMsIHlvdSB3YW50IHRvIHByb3ZpZGUNCi1Ccml0aXNoIEVuZ2xpc2ggc3BlbGxpbmcuIFlvdSB3YW50IHRoZXNlIGFsdGVybmF0aXZlIHN0cmluZ3MgdG8gYmUgdXNlZCB3aGVuIHlvdXINCi1hcHBsaWNhdGlvbiBydW5zIG9uIGEgZGV2aWNlIGluIHRoZSBVbml0ZWQgS2luZ2RvbS4gPC9saT4NCi08L3VsPg0KLQ0KLTxwPlRvIGRvIHRoaXMsIHlvdSBjb3VsZCBjcmVhdGUgYSBzbWFsbCBmaWxlIGNhbGxlZA0KLTxjb2RlPnJlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sPC9jb2RlPiB0aGF0IGluY2x1ZGVzIG9ubHkgdGhlIHN0cmluZ3MgdGhhdA0KLXNob3VsZCBiZSBkaWZmZXJlbnQgd2hlbiB0aGUgYXBwbGljYXRpb24gIHJ1bnMgaW4gdGhlIFUuSy4gRm9yIGFsbCB0aGUgcmVzdCBvZg0KLXRoZSBzdHJpbmdzLCB0aGUgYXBwbGljYXRpb24gd2lsbCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHRzIGFuZCB1c2Ugd2hhdCBpcw0KLWRlZmluZWQgaW4gPGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4uPC9wPg0KLQ0KLTxoND5Vc2UgdGhlIEFuZHJvaWQgQ29udGV4dCBvYmplY3QgZm9yIG1hbnVhbCBsb2NhbGUgbG9va3VwPC9oND4NCi0NCi08cD5Zb3UgY2FuIGxvb2sgdXAgdGhlIGxvY2FsZSB1c2luZyB0aGUge0BsaW5rIGFuZHJvaWQuY29udGVudC5Db250ZXh0fSBvYmplY3QNCi10aGF0IEFuZHJvaWQgbWFrZXMgYXZhaWxhYmxlOjwvcD4NCi0NCi08cHJlPlN0cmluZyBsb2NhbGUgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldENvbmZpZ3VyYXRpb24oKS5sb2NhbGUuZ2V0RGlzcGxheU5hbWUoKTs8L3ByZT4NCi0NCi08aDIgaWQ9InRlc3RpbmciPlRlc3RpbmcgTG9jYWxpemVkIEFwcGxpY2F0aW9uczwvaDI+DQotDQotPGgzIGlkPSJkZXZpY2UiPlRlc3Rpbmcgb24gYSBEZXZpY2U8L2gzPg0KLTxwPktlZXAgaW4gbWluZCB0aGF0IHRoZSBkZXZpY2UgeW91IGFyZSB0ZXN0aW5nIG1heSBiZSBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBmcm9tIA0KLQl0aGUgZGV2aWNlcyBhdmFpbGFibGUgdG8gY29uc3VtZXJzIGluIG90aGVyIGdlb2dyYXBoaWVzLiBUaGUgbG9jYWxlcyBhdmFpbGFibGUgDQotCW9uIHlvdXIgZGV2aWNlIG1heSBkaWZmZXIgZnJvbSB0aG9zZSBhdmFpbGFibGUgb24gb3RoZXIgZGV2aWNlcy4gQWxzbywgdGhlIA0KLQlyZXNvbHV0aW9uIGFuZCBkZW5zaXR5IG9mIHRoZSBkZXZpY2Ugc2NyZWVuIG1heSBkaWZmZXIsIHdoaWNoIGNvdWxkIGFmZmVjdCANCi0JdGhlIGRpc3BsYXkgb2Ygc3RyaW5ncyBhbmQgZHJhd2FibGVzIGluIHlvdXIgVUkuPC9wPg0KLQ0KLTxwPlRvIGNoYW5nZSB0aGUgbG9jYWxlIG9uIGEgZGV2aWNlLCB1c2UgIHRoZSBTZXR0aW5ncyBhcHBsaWNhdGlvbiAgKEhvbWUgJmd0Ow0KLU1lbnUgJmd0OyBTZXR0aW5ncyAmZ3Q7IExvY2FsZSAmYW1wOyB0ZXh0ICZndDsgU2VsZWN0IGxvY2FsZSkuIDwvcD4NCi0NCi08aDMgaWQ9ImVtdWxhdG9yIj5UZXN0aW5nIG9uIGFuIEVtdWxhdG9yPC9oMz4NCi0NCi08cD5Gb3IgZGV0YWlscyBhYm91dCB1c2luZyB0aGUgZW11bGF0b3IsIHNlZSBTZWUgPGENCi1ocmVmPSJ7QGRvY1Jvb3R9dG9vbHMvaGVscC9lbXVsYXRvci5odG1sIj5BbmRyb2lkIEVtdWxhdG9yPC9hPi48L3A+DQotPGg0PkNyZWF0aW5nIGFuZCB1c2luZyBhIGN1c3RvbSBsb2NhbGU8L2g0Pg0KLQ0KLTxwPkEgJnF1b3Q7Y3VzdG9tJnF1b3Q7IGxvY2FsZSBpcyBhIGxhbmd1YWdlL3JlZ2lvbiBjb21iaW5hdGlvbiB0aGF0IHRoZSBBbmRyb2lkDQotc3lzdGVtIGltYWdlIGRvZXMgbm90IGV4cGxpY2l0bHkgc3VwcG9ydC4gKEZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGxvY2FsZXMgaW4NCi1BbmRyb2lkIHBsYXRmb3JtcyBzZWUgdGhlIFZlcnNpb24gTm90ZXMgaW4gdGhlIDxhDQotaHJlZj0ie0Bkb2NSb290fXNkay9pbmRleC5odG1sIj5TREs8L2E+IHRhYikuIFlvdSBjYW4gdGVzdA0KLWhvdyB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgcnVuIGluIGEgY3VzdG9tIGxvY2FsZSBieSBjcmVhdGluZyBhIGN1c3RvbSBsb2NhbGUgaW4NCi10aGUgZW11bGF0b3IuIFRoZXJlIGFyZSB0d28gd2F5cyB0byBkbyB0aGlzOjwvcD4NCi0NCi08dWw+DQotICA8bGk+VXNlIHRoZSBDdXN0b20gTG9jYWxlIGFwcGxpY2F0aW9uLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdGhlDQotQXBwbGljYXRpb24gdGFiLiAoQWZ0ZXIgeW91IGNyZWF0ZSBhIGN1c3RvbSBsb2NhbGUsIHN3aXRjaCB0byBpdCBieSANCi1wcmVzc2luZyBhbmQgaG9sZGluZyB0aGUgbG9jYWxlIG5hbWUuKTwvbGk+DQotICA8bGk+Q2hhbmdlIHRvIGEgY3VzdG9tIGxvY2FsZSBmcm9tIHRoZSBhZGIgc2hlbGwsIGFzIGRlc2NyaWJlZCBiZWxvdy48L2xpPg0KLTwvdWw+DQotDQotPHA+V2hlbiB5b3Ugc2V0IHRoZSBlbXVsYXRvciB0byBhIGxvY2FsZSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIEFuZHJvaWQNCi1zeXN0ZW0gaW1hZ2UsIHRoZSBzeXN0ZW0gaXRzZWxmIHdpbGwgZGlzcGxheSBpbiBpdHMgZGVmYXVsdCBsYW5ndWFnZS4gWW91cg0KLWFwcGxpY2F0aW9uLCBob3dldmVyLCBzaG91bGQgbG9jYWxpemUgcHJvcGVybHkuPC9wPg0KLQ0KLTxoND5DaGFuZ2luZyB0aGUgZW11bGF0b3IgbG9jYWxlIGZyb20gdGhlIGFkYiBzaGVsbDwvaDQ+DQotDQotPHA+VG8gY2hhbmdlIHRoZSBsb2NhbGUgaW4gdGhlIGVtdWxhdG9yIGJ5IHVzaW5nIHRoZSBhZGIgc2hlbGwuIDwvcD4NCi0NCi08b2w+DQotICA8bGk+UGljayB0aGUgbG9jYWxlIHlvdSB3YW50IHRvIHRlc3QgYW5kIGRldGVybWluZSBpdHMgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBjb2RlcywgZm9yDQotZXhhbXBsZSA8Y29kZT5mcjwvY29kZT4gZm9yIEZyZW5jaCBhbmQgPGNvZGU+Q0E8L2NvZGU+IGZvciBDYW5hZGEuPGJyPg0KLSAgPC9saT4NCi0gIDxsaT5MYXVuY2ggYW4gZW11bGF0b3IuPC9saT4NCi0gIDxsaT5Gcm9tIGEgY29tbWFuZC1saW5lIHNoZWxsIG9uIHRoZSBob3N0IGNvbXB1dGVyLCBydW4gdGhlIGZvbGxvd2luZw0KLWNvbW1hbmQ6PGJyPg0KLSAgICA8Y29kZT5hZGIgc2hlbGw8L2NvZGU+PGJyPg0KLSAgb3IgaWYgeW91IGhhdmUgYSBkZXZpY2UgYXR0YWNoZWQsIHNwZWNpZnkgdGhhdCB5b3Ugd2FudCB0aGUgZW11bGF0b3IgYnkgYWRkaW5nDQotdGhlIDxjb2RlPi1lPC9jb2RlPiBvcHRpb246PGJyPg0KLSAgPGNvZGU+YWRiIC1lIHNoZWxsPC9jb2RlPjwvbGk+DQotICA8bGk+QXQgIHRoZSAgYWRiIHNoZWxsIHByb21wdCAoPGNvZGU+IzwvY29kZT4pLCBydW4gdGhpcyBjb21tYW5kOiA8YnI+DQotICAgIDxjb2RlPnNldHByb3AgcGVyc2lzdC5zeXMubGFuZ3VhZ2UgIFs8ZW0+bGFuZ3VhZ2UgY29kZTwvZW0+XTtzZXRwcm9wDQotcGVyc2lzdC5zeXMuY291bnRyeSBbPGVtPmNvdW50cnkgIGNvZGU8L2VtPl07c3RvcDtzbGVlcCA1O3N0YXJ0IDxicj4NCi0gICAgPC9jb2RlPlJlcGxhY2UgYnJhY2tldGVkIHNlY3Rpb25zIHdpdGggdGhlICBhcHByb3ByaWF0ZSBjb2RlcyBmcm9tIFN0ZXANCi0xLjwvbGk+DQotPC9vbD4NCi0NCi08cD5Gb3IgaW5zdGFuY2UsIHRvIHRlc3QgaW4gQ2FuYWRpYW4gRnJlbmNoOjwvcD4NCi0NCi08cD48Y29kZT5zZXRwcm9wIHBlcnNpc3Quc3lzLmxhbmd1YWdlICBmcjtzZXRwcm9wIHBlcnNpc3Quc3lzLmNvdW50cnkNCi1DQTtzdG9wO3NsZWVwIDU7c3RhcnQgPC9jb2RlPjwvcD4NCi0NCi08cD5UaGlzIHdpbGwgY2F1c2UgdGhlIGVtdWxhdG9yICB0byByZXN0YXJ0LiAoSXQgd2lsbCBsb29rIGxpa2UgYSBmdWxsIHJlYm9vdCwNCi1idXQgaXQgaXMgbm90LikgT25jZSB0aGUgSG9tZSBzY3JlZW4gYXBwZWFycyBhZ2FpbiwgcmUtbGF1bmNoIHlvdXIgYXBwbGljYXRpb24gKGZvcg0KLWV4YW1wbGUsIGNsaWNrIHRoZSBSdW4gaWNvbiBpbiBFY2xpcHNlKSwgYW5kIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGxhdW5jaCB3aXRoDQotdGhlIG5ldyBsb2NhbGUuIDwvcD4NCi0NCi08aDMgaWQ9InRlc3QtZm9yLWRlZmF1bHQiPlRlc3RpbmcgZm9yIERlZmF1bHQgUmVzb3VyY2VzPC9oMz4NCi08cD5IZXJlJ3MgaG93IHRvIHRlc3Qgd2hldGhlciBhbiBhcHBsaWNhdGlvbiBpbmNsdWRlcyBldmVyeSBzdHJpbmcgcmVzb3VyY2UgdGhhdCBpdCBuZWVkczogIDwvcD4NCi08b2w+PGxpPlNldCB0aGUgZW11bGF0b3Igb3IgZGV2aWNlIHRvIGEgbGFuZ3VhZ2UgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIGRvZXMgbm90IA0KLQlzdXBwb3J0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFwcGxpY2F0aW9uIGhhcyBGcmVuY2ggc3RyaW5ncyBpbiANCi0JPGNvZGU+cmVzL3ZhbHVlcy1mci88L2NvZGU+IGJ1dCBkb2VzIG5vdCBoYXZlIGFueSBTcGFuaXNoIHN0cmluZ3MgaW4gDQotCTxjb2RlPnJlcy92YWx1ZXMtZXMvPC9jb2RlPiwgdGhlbiBzZXQgdGhlIGVtdWxhdG9yJ3MgbG9jYWxlIHRvIFNwYW5pc2guIA0KLQkoWW91IGNhbiB1c2UgdGhlIEN1c3RvbSBMb2NhbGUgYXBwbGljYXRpb24gdG8gc2V0IHRoZSBlbXVsYXRvciB0byBhbiANCi0JdW5zdXBwb3J0ZWQgbG9jYWxlLik8L2xpPg0KLQk8bGk+UnVuIHRoZSBhcHBsaWNhdGlvbi48L2xpPiAgDQotPGxpPklmIHRoZSBhcHBsaWNhdGlvbiBzaG93cyBhbiBlcnJvciBtZXNzYWdlIGFuZCBhIEZvcmNlIENsb3NlIGJ1dHRvbiwgaXQgbWlnaHQgDQotCWJlIGxvb2tpbmcgZm9yIGEgc3RyaW5nIHRoYXQgaXMgbm90IGF2YWlsYWJsZS4gTWFrZSBzdXJlIHRoYXQgeW91ciANCi0JPGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4gZmlsZSBpbmNsdWRlcyBhIGRlZmluaXRpb24gZm9yIA0KLQlldmVyeSBzdHJpbmcgdGhhdCB0aGUgYXBwbGljYXRpb24gdXNlcy48L2xpPg0KLTwvb2w+IA0KLTwvcD4gDQotDQotPHA+SWYgdGhlIHRlc3QgaXMgc3VjY2Vzc2Z1bCwgcmVwZWF0IGl0IGZvciBvdGhlciB0eXBlcyBvZiANCi0JY29uZmlndXJhdGlvbnMuIEZvciBleGFtcGxlLCBpZiB0aGUgYXBwbGljYXRpb24gaGFzIGEgbGF5b3V0IGZpbGUgY2FsbGVkIA0KLQk8Y29kZT5yZXMvbGF5b3V0LWxhbmQvbWFpbi54bWw8L2NvZGU+IGJ1dCBkb2VzIG5vdCBjb250YWluIGEgZmlsZSBjYWxsZWQgDQotCTxjb2RlPnJlcy9sYXlvdXQtcG9ydC9tYWluLnhtbDwvY29kZT4sIHRoZW4gc2V0IHRoZSBlbXVsYXRvciBvciBkZXZpY2UgdG8gDQotCXBvcnRyYWl0IG9yaWVudGF0aW9uIGFuZCBzZWUgaWYgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcnVuLiANCi0NCi0NCi0NCitwYWdlLnRpdGxlPUxvY2FsaXppbmcgd2l0aCBSZXNvdXJjZXMKK3BhcmVudC50aXRsZT1BcHBsaWNhdGlvbiBSZXNvdXJjZXMKK3BhZ2UudGFncz1sb2NhbGl6aW5nLGxvY2FsaXphdGlvbixyZXNvdXJjZXMsZm9ybWF0cyxsMTBuCitwYXJlbnQubGluaz1pbmRleC5odG1sCitAamQ6Ym9keQorCis8ZGl2IGlkPSJxdi13cmFwcGVyIj4KKyAgICA8ZGl2IGlkPSJxdiI+CisKKzxoMj5RdWlja3ZpZXc8L2gyPgorCis8dWw+CisgIDxsaT5Vc2UgcmVzb3VyY2Ugc2V0cyB0byBjcmVhdGUgYSBsb2NhbGl6ZWQgYXBwLjwvbGk+CisgIDxsaT5BbmRyb2lkIGxvYWRzIHRoZSBjb3JyZWN0IHJlc291cmNlIHNldCBmb3IgdGhlIHVzZXIncyBsYW5ndWFnZSBhbmQgbG9jYWxlLjwvbGk+CisgIDxsaT5JZiBsb2NhbGl6ZWQgcmVzb3VyY2VzIGFyZSBub3QgYXZhaWxhYmxlLCBBbmRyb2lkIGxvYWRzIHlvdXIgZGVmYXVsdCByZXNvdXJjZXMuPC9saT4KKzwvdWw+CisKKzxoMj5JbiB0aGlzIGRvY3VtZW50PC9oMj4KKzxvbD4KKyAgPGxpPjxhIGhyZWY9IiNyZXNvdXJjZS1zd2l0Y2hpbmciPk92ZXJ2aWV3OiBSZXNvdXJjZS1Td2l0Y2hpbmcgaW4gQW5kcm9pZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IiN1c2luZy1mcmFtZXdvcmsiPlVzaW5nIFJlc291cmNlcyBmb3IgTG9jYWxpemF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iI3N0cmF0ZWdpZXMiPkxvY2FsaXphdGlvbiBUaXBzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iI3Rlc3RpbmciPlRlc3RpbmcgTG9jYWxpemVkIEFwcGxpY2F0aW9uczwvYT48L2xpPgorPC9vbD4KKworPGgyPlNlZSBhbHNvPC9oMj4KKyAgPG9sPgorICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9ZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvbG9jYWxpemluZy5odG1sIj5Mb2NhbGl6YXRpb24gQ2hlY2tsaXN0PC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCI+UHJvdmlkaW5nIFJlc291cmNlczwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3VpL2RlY2xhcmluZy1sYXlvdXQuaHRtbCI+TGF5b3V0czwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9cmVmZXJlbmNlL2FuZHJvaWQvYXBwL0FjdGl2aXR5Lmh0bWwjQWN0aXZpdHlMaWZlY3ljbGUiPkFjdGl2aXR5IExpZmVjeWNsZTwvYT48L2xpPgorPC9vbD4KKzwvZGl2PgorPC9kaXY+CisKKzxwPkFuZHJvaWQgd2lsbCBydW4gb24gbWFueSAgZGV2aWNlcyBpbiBtYW55ICByZWdpb25zLiBUbyByZWFjaCB0aGUgbW9zdCB1c2VycywKK3lvdXIgYXBwbGljYXRpb24gc2hvdWxkIGhhbmRsZSB0ZXh0LCBhdWRpbyBmaWxlcywgbnVtYmVycywgY3VycmVuY3ksIGFuZAorZ3JhcGhpY3MgaW4gd2F5cyBhcHByb3ByaWF0ZSB0byB0aGUgbG9jYWxlcyB3aGVyZSB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgYmUgdXNlZC4KKzwvcD4KKworPHA+VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgYmVzdCBwcmFjdGljZXMgZm9yIGxvY2FsaXppbmcgQW5kcm9pZAorYXBwbGljYXRpb25zLiBUaGUgcHJpbmNpcGxlcyBhcHBseSB3aGV0aGVyIHlvdSBhcmUgZGV2ZWxvcGluZyB5b3VyIGFwcGxpY2F0aW9uCit1c2luZyBBRFQgd2l0aCBFY2xpcHNlLCBBbnQtYmFzZWQgdG9vbHMsIG9yIGFueSBvdGhlciBJREUuIDwvcD4KKworPHA+WW91IHNob3VsZCBhbHJlYWR5IGhhdmUgYSB3b3JraW5nIGtub3dsZWRnZSBvZiBKYXZhIGFuZCBiZSAgZmFtaWxpYXIgd2l0aAorQW5kcm9pZCByZXNvdXJjZSBsb2FkaW5nLCB0aGUgZGVjbGFyYXRpb24gb2YgdXNlciBpbnRlcmZhY2UgZWxlbWVudHMgaW4gWE1MLAorZGV2ZWxvcG1lbnQgY29uc2lkZXJhdGlvbnMgc3VjaCBhcyBBY3Rpdml0eSBsaWZlY3ljbGUsIGFuZCBnZW5lcmFsIHByaW5jaXBsZXMgb2YKK2ludGVybmF0aW9uYWxpemF0aW9uIGFuZCBsb2NhbGl6YXRpb24uIDwvcD4KKworPHA+SXQgaXMgZ29vZCBwcmFjdGljZSB0byB1c2UgdGhlIEFuZHJvaWQgcmVzb3VyY2UgZnJhbWV3b3JrIHRvIHNlcGFyYXRlIHRoZQorbG9jYWxpemVkIGFzcGVjdHMgb2YgeW91ciBhcHBsaWNhdGlvbiBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGNvcmUgSmF2YQorZnVuY3Rpb25hbGl0eTo8L3A+CisKKzx1bD4KKyAgPGxpPllvdSBjYW4gcHV0IG1vc3Qgb3IgYWxsIG9mIHRoZSA8ZW0+Y29udGVudHM8L2VtPiBvZiB5b3VyIGFwcGxpY2F0aW9uJ3MKK3VzZXIgaW50ZXJmYWNlIGludG8gcmVzb3VyY2UgZmlsZXMsIGFzIGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50IGFuZCBpbiA8YQoraHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZXNvdXJjZXMvcHJvdmlkaW5nLXJlc291cmNlcy5odG1sIj5Qcm92aWRpbmcgUmVzb3VyY2VzPC9hPi48L2xpPgorICA8bGk+VGhlIDxlbT5iZWhhdmlvcjwvZW0+IG9mIHRoZSB1c2VyIGludGVyZmFjZSwgb24gdGhlIG90aGVyIGhhbmQsIGlzIGRyaXZlbgorYnkgeW91ciBKYXZhIGNvZGUuCisgICAgRm9yIGV4YW1wbGUsIGlmIHVzZXJzIGlucHV0IGRhdGEgdGhhdCBuZWVkcyB0byBiZSBmb3JtYXR0ZWQgb3Igc29ydGVkCitkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gbG9jYWxlLCB0aGVuIHlvdSB3b3VsZCB1c2UgSmF2YSB0byBoYW5kbGUgdGhlIGRhdGEKK3Byb2dyYW1tYXRpY2FsbHkuIFRoaXMgZG9jdW1lbnQgZG9lcyBub3QgY292ZXIgaG93IHRvICBsb2NhbGl6ZSB5b3VyIEphdmEgY29kZS4KKzwvbGk+Cis8L3VsPgorCis8cD5Gb3IgYSBzaG9ydCBndWlkZSB0byBsb2NhbGl6aW5nIHN0cmluZ3MgaW4geW91ciBhcHAsIHNlZSB0aGUgdHJhaW5pbmcgbGVzc29uLCA8YQoraHJlZj0ie0Bkb2NSb290fXRyYWluaW5nL2Jhc2ljcy9zdXBwb3J0aW5nLWRldmljZXMvbGFuZ3VhZ2VzLmh0bWwiPlN1cHBvcnRpbmcgRGlmZmVyZW50IExhbmd1YWdlczwvYT4uIDwvcD4KKworCis8aDIgaWQ9InJlc291cmNlLXN3aXRjaGluZyI+T3ZlcnZpZXc6IFJlc291cmNlLVN3aXRjaGluZyBpbiBBbmRyb2lkPC9oMj4KKworPHA+UmVzb3VyY2VzIGFyZSB0ZXh0IHN0cmluZ3MsIGxheW91dHMsIHNvdW5kcywgZ3JhcGhpY3MsIGFuZCBhbnkgb3RoZXIgc3RhdGljCitkYXRhIHRoYXQgeW91ciAgQW5kcm9pZCBhcHBsaWNhdGlvbiAgbmVlZHMuIEFuIGFwcGxpY2F0aW9uIGNhbiBpbmNsdWRlIG11bHRpcGxlCitzZXRzIG9mIHJlc291cmNlcywgZWFjaCBjdXN0b21pemVkIGZvciBhIGRpZmZlcmVudCBkZXZpY2UgY29uZmlndXJhdGlvbi4gV2hlbiBhCit1c2VyIHJ1bnMgdGhlIGFwcGxpY2F0aW9uLCAgQW5kcm9pZCAgICBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYW5kIGxvYWRzIHRoZQorcmVzb3VyY2VzIHRoYXQgYmVzdCBtYXRjaCB0aGUgZGV2aWNlLjwvcD4KKworPHA+KFRoaXMgZG9jdW1lbnQgZm9jdXNlcyBvbiBsb2NhbGl6YXRpb24gYW5kIGxvY2FsZS4gRm9yIGEgY29tcGxldGUgZGVzY3JpcHRpb24KK29mIHJlc291cmNlLXN3aXRjaGluZyBhbmQgYWxsIHRoZSB0eXBlcyBvZiBjb25maWd1cmF0aW9ucyB0aGF0IHlvdSBjYW4KK3NwZWNpZnkgJiM4MjEyOyBzY3JlZW4gb3JpZW50YXRpb24sIHRvdWNoc2NyZWVuIHR5cGUsIGFuZCBzbyBvbiAmIzgyMTI7IHNlZSA8YQoraHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZXNvdXJjZXMvcHJvdmlkaW5nLXJlc291cmNlcy5odG1sI0FsdGVybmF0aXZlUmVzb3VyY2VzIj5Qcm92aWRpbmcKK0FsdGVybmF0aXZlIFJlc291cmNlczwvYT4uKTwvcD4KKworPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KKyAgPHRyIGJvcmRlcj0iMCI+CisgICAgPHRkIHdpZHRoPSIxODAiIHN0eWxlPSJib3JkZXI6IDBwdCBub25lIDsiPjxwIGNsYXNzPSJzcGVjaWFsLW5vdGUiPgorICAgIDxzdHJvbmc+V2hlbiB5b3Ugd3JpdGUgeW91ciBhcHBsaWNhdGlvbjo8L3N0cm9uZz4KKyAgICA8YnI+PGJyPgorICAgIFlvdSBjcmVhdGUgYSBzZXQgb2YgZGVmYXVsdCByZXNvdXJjZXMsIHBsdXMgYWx0ZXJuYXRpdmVzIHRvIGJlIHVzZWQgaW4KKyAgICBkaWZmZXJlbnQgbG9jYWxlcy48L3A+PC90ZD4KKyAgICA8dGQgc3R5bGU9ImJvcmRlcjogMHB0IG5vbmU7IHBhZGRpbmc6MCI+CisgICAgPHAgc3R5bGU9ImJvcmRlcjowOyBwYWRkaW5nOjAiPjxpbWcgc3JjPSIuLi8uLi8uLi9pbWFnZXMvcmVzb3VyY2VzL3JpZ2h0LWFycm93LnBuZyIgYWx0PSJyaWdodC1hcnJvdyIKKyAgICB3aWR0aD0iNTEiIGhlaWdodD0iMTciPjwvcD48L3RkPgorICAgIDx0ZCB3aWR0aD0iMTgwIiBzdHlsZT0iYm9yZGVyOiAwcHQgbm9uZSA7Ij48cCBjbGFzcz0ic3BlY2lhbC1ub3RlIj4KKyAgICA8c3Ryb25nPldoZW4gYSB1c2VyIHJ1bnMgeW91ciBhcHBsaWNhdGlvbjo8L3N0cm9uZz4KKyAgICA8YnI+PGJyPlRoZSBBbmRyb2lkIHN5c3RlbSBzZWxlY3RzIHdoaWNoIHJlc291cmNlcyB0byBsb2FkLCBiYXNlZCBvbiB0aGUKKyAgICBkZXZpY2UncyBsb2NhbGUuPC9wPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8cD5XaGVuIHlvdSB3cml0ZSB5b3VyIGFwcGxpY2F0aW9uLCB5b3UgY3JlYXRlIGRlZmF1bHQgYW5kIGFsdGVybmF0aXZlIHJlc291cmNlcworZm9yIHlvdXIgYXBwbGljYXRpb24gdG8gdXNlLiBUbyBjcmVhdGUgIHJlc291cmNlcywgeW91IHBsYWNlIGZpbGVzIHdpdGhpbgorc3BlY2lhbGx5IG5hbWVkIHN1YmRpcmVjdG9yaWVzIG9mIHRoZSBwcm9qZWN0J3MgPGNvZGU+cmVzLzwvY29kZT4gZGlyZWN0b3J5LgorPC9wPgorCisKKworPGgzIGlkPSJkZWZhdWx0cy1yLWltcG9ydGFudCI+V2h5IERlZmF1bHQgUmVzb3VyY2VzIEFyZSBJbXBvcnRhbnQ8L2gzPgorCis8cD5XaGVuZXZlciB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBhIGxvY2FsZSBmb3Igd2hpY2ggeW91IGhhdmUgbm90IHByb3ZpZGVkCitsb2NhbGUtc3BlY2lmaWMgdGV4dCwgIEFuZHJvaWQgd2lsbCBsb2FkIHRoZSBkZWZhdWx0IHN0cmluZ3MgZnJvbQorPGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4uIElmIHRoaXMgZGVmYXVsdCAgZmlsZSBpcyBhYnNlbnQsIG9yIGlmIGl0CitpcyBtaXNzaW5nIGEgc3RyaW5nIHRoYXQgeW91ciBhcHBsaWNhdGlvbiBuZWVkcywgdGhlbiB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgbm90IHJ1bgorYW5kIHdpbGwgc2hvdyBhbiBlcnJvci4KK1RoZSBleGFtcGxlIGJlbG93IGlsbHVzdHJhdGVzIHdoYXQgY2FuIGhhcHBlbiB3aGVuIHRoZSBkZWZhdWx0IHRleHQgZmlsZSBpcyBpbmNvbXBsZXRlLiA8L3A+CisKKzxwPjxlbT5FeGFtcGxlOjwvZW0+Cis8cD5BbiBhcHBsaWNhdGlvbidzIEphdmEgY29kZSByZWZlcnMgdG8ganVzdCB0d28gc3RyaW5ncywgPGNvZGU+dGV4dF9hPC9jb2RlPiBhbmQKKyAgPGNvZGU+dGV4dF9iPC9jb2RlPi4gVGhpcyBhcHBsaWNhdGlvbiBpbmNsdWRlcyBhIGxvY2FsaXplZCByZXNvdXJjZSBmaWxlCisgICg8Y29kZT5yZXMvdmFsdWVzLWVuL3N0cmluZ3MueG1sPC9jb2RlPikgdGhhdCBkZWZpbmVzIDxjb2RlPnRleHRfYTwvY29kZT4gYW5kCisgIDxjb2RlPnRleHRfYjwvY29kZT4gaW4gRW5nbGlzaC4gVGhpcyBhcHBsaWNhdGlvbiBhbHNvIGluY2x1ZGVzIGEgZGVmYXVsdAorICByZXNvdXJjZSBmaWxlICg8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPikgdGhhdCBpbmNsdWRlcyBhCitkZWZpbml0aW9uIGZvciA8Y29kZT50ZXh0X2E8L2NvZGU+LCBidXQgbm90IGZvciA8Y29kZT50ZXh0X2I8L2NvZGU+OgorPHVsPgorICA8bGk+VGhpcyBhcHBsaWNhdGlvbiBtaWdodCBjb21waWxlIHdpdGhvdXQgYSBwcm9ibGVtLiBBbiBJREUgc3VjaCBhcyBFY2xpcHNlCisgICAgd2lsbCBub3QgaGlnaGxpZ2h0IGFueSBlcnJvcnMgaWYgYSByZXNvdXJjZSBpcyBtaXNzaW5nLjwvbGk+CisgIDxsaT5XaGVuIHRoaXMgYXBwbGljYXRpb24gaXMgbGF1bmNoZWQgb24gYSBkZXZpY2Ugd2l0aCBsb2NhbGUgc2V0IHRvIEVuZ2xpc2gsCisgICAgdGhlIGFwcGxpY2F0aW9uICBtaWdodCBydW4gd2l0aG91dCBhIHByb2JsZW0sIGJlY2F1c2UKKyAgICA8Y29kZT5yZXMvdmFsdWVzLWVuL3N0cmluZ3MueG1sPC9jb2RlPiBjb250YWlucyBib3RoIG9mIHRoZSBuZWVkZWQgdGV4dAorICAgIHN0cmluZ3MuPC9saT4KKyAgPGxpPkhvd2V2ZXIsIDxzdHJvbmc+dGhlIHVzZXIgIHdpbGwgc2VlIGFuIGVycm9yIG1lc3NhZ2UgYW5kIGEgRm9yY2UgQ2xvc2UKKyAgICBidXR0b248L3N0cm9uZz4gd2hlbiB0aGlzIGFwcGxpY2F0aW9uIGlzIGxhdW5jaGVkIG9uIGEgZGV2aWNlIHNldCB0byBhCisgICAgbGFuZ3VhZ2Ugb3RoZXIgdGhhbiBFbmdsaXNoLiBUaGUgYXBwbGljYXRpb24gd2lsbCBub3QgbG9hZC48L2xpPgorPC91bD4KKworCis8cD5UbyBwcmV2ZW50IHRoaXMgc2l0dWF0aW9uLCBtYWtlIHN1cmUgdGhhdCBhIDxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+CisgIGZpbGUgZXhpc3RzIGFuZCB0aGF0IGl0IGRlZmluZXMgZXZlcnkgbmVlZGVkIHN0cmluZy4gVGhlIHNpdHVhdGlvbiBhcHBsaWVzIHRvCisgIGFsbCB0eXBlcyBvZiByZXNvdXJjZXMsIG5vdCBqdXN0IHN0cmluZ3M6IFlvdQorICBuZWVkIHRvIGNyZWF0ZSBhICBzZXQgb2YgZGVmYXVsdCByZXNvdXJjZSBmaWxlcyBjb250YWluaW5nIGFsbAorICB0aGUgcmVzb3VyY2VzIHRoYXQgeW91ciBhcHBsaWNhdGlvbiBjYWxscyB1cG9uICYjODIxMjsgbGF5b3V0cywgZHJhd2FibGVzLAorICBhbmltYXRpb25zLCBldGMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0ZXN0aW5nLCBzZWUgPGEgaHJlZj0iI3Rlc3QtZm9yLWRlZmF1bHQiPgorICBUZXN0aW5nIGZvciBEZWZhdWx0IFJlc291cmNlczwvYT4uPC9wPgorCis8aDIgaWQ9InVzaW5nLWZyYW1ld29yayI+VXNpbmcgUmVzb3VyY2VzIGZvciBMb2NhbGl6YXRpb248L2gyPgorCis8aDMgaWQ9ImNyZWF0aW5nLWRlZmF1bHRzIj5Ib3cgdG8gQ3JlYXRlIERlZmF1bHQgUmVzb3VyY2VzPC9oMz4KKworPHA+UHV0IHRoZSBhcHBsaWNhdGlvbidzIGRlZmF1bHQgdGV4dCBpbgorYSBmaWxlIHdpdGggdGhlIGZvbGxvd2luZyBsb2NhdGlvbiBhbmQgbmFtZTo8L3A+Cis8cD48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiAocmVxdWlyZWQgZGlyZWN0b3J5KTwvcD4KKworPHA+VGhlIHRleHQgc3RyaW5ncyBpbiA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBzaG91bGQgIHVzZSB0aGUKK2RlZmF1bHQgbGFuZ3VhZ2UsIHdoaWNoIGlzIHRoZSBsYW5ndWFnZSB0aGF0IHlvdSBleHBlY3QgbW9zdCBvZiB5b3VyIGFwcGxpY2F0aW9uJ3MgdXNlcnMgdG8KK3NwZWFrLiAgPC9wPgorCis8cD5UaGUgZGVmYXVsdCByZXNvdXJjZSBzZXQgbXVzdCBhbHNvIGluY2x1ZGUgYW55IGRlZmF1bHQgZHJhd2FibGVzIGFuZCBsYXlvdXRzLAorICBhbmQgY2FuIGluY2x1ZGUgb3RoZXIgdHlwZXMgb2YgcmVzb3VyY2VzIHN1Y2ggYXMgYW5pbWF0aW9ucy4KKzxicj4KKyAgPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzL2RyYXdhYmxlLzwvY29kZT4ocmVxdWlyZWQgZGlyZWN0b3J5IGhvbGRpbmcgYXQgbGVhc3QKKyAgb25lIGdyYXBoaWMgZmlsZSwgZm9yIHRoZSBhcHBsaWNhdGlvbidzIGljb24gb24gR29vZ2xlIFBsYXkpPGJyPgorICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvbGF5b3V0LzwvY29kZT4gKHJlcXVpcmVkIGRpcmVjdG9yeSBob2xkaW5nIGFuIFhNTAorICBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgZGVmYXVsdCBsYXlvdXQpPGJyPgorICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvYW5pbS88L2NvZGU+IChyZXF1aXJlZCBpZiB5b3UgaGF2ZSBhbnkKKyAgPGNvZGU+cmVzL2FuaW0tPGVtPiZsdDtxdWFsaWZpZXJzJmd0OzwvZW0+PC9jb2RlPiBmb2xkZXJzKTxicj4KKyAgPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzL3htbC88L2NvZGU+IChyZXF1aXJlZCBpZiB5b3UgaGF2ZSBhbnkKKyAgPGNvZGU+cmVzL3htbC08ZW0+Jmx0O3F1YWxpZmllcnMmZ3Q7PC9lbT48L2NvZGU+IGZvbGRlcnMpPGJyPgorICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvcmF3LzwvY29kZT4gKHJlcXVpcmVkIGlmIHlvdSBoYXZlIGFueQorICA8Y29kZT5yZXMvcmF3LTxlbT4mbHQ7cXVhbGlmaWVycyZndDs8L2VtPjwvY29kZT4gZm9sZGVycykKKzwvcD4KKworPHAgY2xhc3M9Im5vdGUiPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBJbiB5b3VyIGNvZGUsIGV4YW1pbmUgZWFjaCByZWZlcmVuY2UgdG8KKyAgYW4gQW5kcm9pZCByZXNvdXJjZS4gTWFrZSBzdXJlIHRoYXQgYSBkZWZhdWx0IHJlc291cmNlIGlzIGRlZmluZWQgZm9yIGVhY2gKKyAgb25lLiBBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHN0cmluZyBmaWxlIGlzIGNvbXBsZXRlOiBBIDxlbT4KKyAgbG9jYWxpemVkPC9lbT4gc3RyaW5nIGZpbGUgY2FuIGNvbnRhaW4gYSBzdWJzZXQgb2YgdGhlIHN0cmluZ3MsIGJ1dCB0aGUKKyAgPGVtPmRlZmF1bHQ8L2VtPiBzdHJpbmcgZmlsZSBtdXN0IGNvbnRhaW4gdGhlbSBhbGwuCis8L3A+CisKKzxoMyBpZD0iY3JlYXRpbmctYWx0ZXJuYXRpdmVzIj5Ib3cgdG8gQ3JlYXRlIEFsdGVybmF0aXZlIFJlc291cmNlczwvaDM+CisKKzxwPkEgbGFyZ2UgcGFydCBvZiBsb2NhbGl6aW5nIGFuIGFwcGxpY2F0aW9uIGlzIHByb3ZpZGluZyBhbHRlcm5hdGl2ZSB0ZXh0IGZvcgorZGlmZmVyZW50IGxhbmd1YWdlcy4gSW4gc29tZSBjYXNlcyB5b3Ugd2lsbCBhbHNvIHByb3ZpZGUgYWx0ZXJuYXRpdmUgZ3JhcGhpY3MsCitzb3VuZHMsIGxheW91dHMsIGFuZCBvdGhlciBsb2NhbGUtc3BlY2lmaWMgcmVzb3VyY2VzLiA8L3A+CisKKzxwPkFuIGFwcGxpY2F0aW9uIGNhbiBzcGVjaWZ5IG1hbnkgPGNvZGU+cmVzLzxlbT4mbHQ7cXVhbGlmaWVycyZndDs8L2VtPi88L2NvZGU+CitkaXJlY3RvcmllcywgZWFjaCB3aXRoIGRpZmZlcmVudCBxdWFsaWZpZXJzLiBUbyBjcmVhdGUgYW4gYWx0ZXJuYXRpdmUgcmVzb3VyY2UgZm9yCithIGRpZmZlcmVudCBsb2NhbGUsIHlvdSB1c2UgYSBxdWFsaWZpZXIgdGhhdCBzcGVjaWZpZXMgYSBsYW5ndWFnZSBvciBhCitsYW5ndWFnZS1yZWdpb24gY29tYmluYXRpb24uIChUaGUgbmFtZSBvZiBhIHJlc291cmNlIGRpcmVjdG9yeSBtdXN0IGNvbmZvcm0KK3RvIHRoZSBuYW1pbmcgc2NoZW1lIGRlc2NyaWJlZCBpbgorPGEgaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZXNvdXJjZXMvcHJvdmlkaW5nLXJlc291cmNlcy5odG1sI0FsdGVybmF0aXZlUmVzb3VyY2VzIj5Qcm92aWRpbmcKK0FsdGVybmF0aXZlIFJlc291cmNlczwvYT4sCitvciBlbHNlIGl0IHdpbGwgbm90IGNvbXBpbGUuKTwvcD4KKworPHA+PGVtPkV4YW1wbGU6PC9lbT48L3A+CisKKzxwPlN1cHBvc2UgdGhhdCB5b3VyIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCBsYW5ndWFnZSBpcyBFbmdsaXNoLiBTdXBwb3NlIGFsc28KK3RoYXQgeW91IHdhbnQgdG8gbG9jYWxpemUgYWxsIHRoZSB0ZXh0IGluIHlvdXIgYXBwbGljYXRpb24gdG8gRnJlbmNoLCBhbmQgbW9zdAorb2YgdGhlIHRleHQgaW4geW91ciBhcHBsaWNhdGlvbiAoZXZlcnl0aGluZyBleGNlcHQgdGhlIGFwcGxpY2F0aW9uJ3MgdGl0bGUpIHRvCitKYXBhbmVzZS4gSW4gdGhpcyBjYXNlLCB5b3UgY291bGQgY3JlYXRlIHRocmVlIGFsdGVybmF0aXZlIDxjb2RlPnN0cmluZ3MueG1sPC9jb2RlPgorZmlsZXMsIGVhY2ggc3RvcmVkIGluIGEgbG9jYWxlLXNwZWNpZmljIHJlc291cmNlIGRpcmVjdG9yeTo8L3A+CisKKzxvbD4KKyAgPGxpPjxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+PGJyPgorICAgIENvbnRhaW5zICBFbmdsaXNoIHRleHQgZm9yIGFsbCAgdGhlIHN0cmluZ3MgdGhhdCB0aGUgYXBwbGljYXRpb24gdXNlcywKK2luY2x1ZGluZyB0ZXh0IGZvciBhIHN0cmluZyBuYW1lZCA8Y29kZT50aXRsZTwvY29kZT4uPC9saT4KKyAgPGxpPjxjb2RlPnJlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWw8L2NvZGU+PGJyPgorICAgIENvbnRhaW4gRnJlbmNoIHRleHQgZm9yIGFsbCAgdGhlIHN0cmluZ3MsIGluY2x1ZGluZyA8Y29kZT50aXRsZTwvY29kZT4uPC9saT4KKyAgPGxpPjxjb2RlPnJlcy92YWx1ZXMtamEvc3RyaW5ncy54bWw8L2NvZGU+PGJyPgorICAgIENvbnRhaW4gSmFwYW5lc2UgdGV4dCBmb3IgYWxsICB0aGUgc3RyaW5ncyA8ZW0+ZXhjZXB0PC9lbT4KKzxjb2RlPnRpdGxlPC9jb2RlPi48YnI+CisgIDxjb2RlPjwvY29kZT48L2xpPgorPC9vbD4KKworPHA+SWYgeW91ciBKYXZhIGNvZGUgcmVmZXJzIHRvIDxjb2RlPlIuc3RyaW5nLnRpdGxlPC9jb2RlPiwgIGhlcmUgaXMgd2hhdCB3aWxsCitoYXBwZW4gYXQgcnVudGltZTo8L3A+CisKKzx1bD4KKyAgPGxpPklmIHRoZSBkZXZpY2UgaXMgc2V0IHRvIGFueSBsYW5ndWFnZSBvdGhlciB0aGFuIEZyZW5jaCwgQW5kcm9pZCB3aWxsIGxvYWQKKzxjb2RlPnRpdGxlPC9jb2RlPiBmcm9tIHRoZSA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlLjwvbGk+CisgIDxsaT5JZiB0aGUgZGV2aWNlIGlzIHNldCB0byBGcmVuY2gsIEFuZHJvaWQgd2lsbCBsb2FkIDxjb2RlPnRpdGxlPC9jb2RlPiBmcm9tCit0aGUgPGNvZGU+cmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbDwvY29kZT4gZmlsZS48L2xpPgorPC91bD4KKworPHA+Tm90aWNlIHRoYXQgaWYgdGhlIGRldmljZSBpcyBzZXQgdG8gSmFwYW5lc2UsIEFuZHJvaWQgd2lsbCBsb29rIGZvcgorPGNvZGU+dGl0bGU8L2NvZGU+IGluIHRoZSA8Y29kZT5yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlLiBCdXQKK2JlY2F1c2Ugbm8gc3VjaCBzdHJpbmcgaXMgaW5jbHVkZWQgaW4gdGhhdCBmaWxlLCBBbmRyb2lkIHdpbGwgZmFsbCBiYWNrIHRvIHRoZQorZGVmYXVsdCwgYW5kIHdpbGwgbG9hZCAgPGNvZGU+dGl0bGU8L2NvZGU+IGluIEVuZ2xpc2ggZnJvbSB0aGUKKzxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+IGZpbGUuICA8L3A+CisKKzxoMyBpZD0icmVzb3VyY2UtcHJlY2VkZW5jZSI+V2hpY2ggUmVzb3VyY2VzIFRha2UgUHJlY2VkZW5jZT88L2gzPgorCis8cD4gSWYgbXVsdGlwbGUgcmVzb3VyY2UgZmlsZXMgbWF0Y2ggYSBkZXZpY2UncyBjb25maWd1cmF0aW9uLCBBbmRyb2lkIGZvbGxvd3MgYQorc2V0IG9mIHJ1bGVzIGluIGRlY2lkaW5nIHdoaWNoIGZpbGUgdG8gdXNlLiBBbW9uZyB0aGUgcXVhbGlmaWVycyB0aGF0IGNhbiBiZQorc3BlY2lmaWVkIGluIGEgcmVzb3VyY2UgZGlyZWN0b3J5IG5hbWUsIDxzdHJvbmc+bG9jYWxlIGFsbW9zdCBhbHdheXMgdGFrZXMKK3ByZWNlZGVuY2U8L3N0cm9uZz4uIDwvcD4KKzxwPjxlbT5FeGFtcGxlOjwvZW0+PC9wPgorCis8cD5Bc3N1bWUgdGhhdCBhbiBhcHBsaWNhdGlvbiAgaW5jbHVkZXMgYSBkZWZhdWx0IHNldCBvZiBncmFwaGljcyBhbmQgdHdvIG90aGVyCitzZXRzIG9mIGdyYXBoaWNzLCBlYWNoIG9wdGltaXplZCBmb3IgYSBkaWZmZXJlbnQgZGV2aWNlIHNldHVwOjwvcD4KKworPHVsPgorICA8bGk+PGNvZGU+cmVzL2RyYXdhYmxlLzwvY29kZT48YnI+CisgICAgQ29udGFpbnMKKyAgZGVmYXVsdCBncmFwaGljcy48L2xpPgorICA8bGk+PGNvZGU+cmVzL2RyYXdhYmxlLXNtYWxsLWxhbmQtc3R5bHVzLzwvY29kZT48YnI+CisgIENvbnRhaW5zICBncmFwaGljcyBvcHRpbWl6ZWQgZm9yIHVzZSB3aXRoIGEgZGV2aWNlIHRoYXQgZXhwZWN0cyBpbnB1dCBmcm9tIGEKKyAgc3R5bHVzIGFuZCBoYXMgYSBRVkdBIGxvdy1kZW5zaXR5IHNjcmVlbiBpbiBsYW5kc2NhcGUgb3JpZW50YXRpb24uPC9saT4KKyAgPGxpPjxjb2RlPnJlcy9kcmF3YWJsZS1qYS88L2NvZGU+IDxicj4KKyAgQ29udGFpbnMgIGdyYXBoaWNzIG9wdGltaXplZCBmb3IgdXNlIHdpdGggSmFwYW5lc2UuPC9saT4KKzwvdWw+CisKKzxwPklmIHRoZSBhcHBsaWNhdGlvbiBydW5zIG9uIGEgZGV2aWNlIHRoYXQgaXMgY29uZmlndXJlZCB0byB1c2UgSmFwYW5lc2UsCitBbmRyb2lkIHdpbGwgbG9hZCBncmFwaGljcyBmcm9tICA8Y29kZT5yZXMvZHJhd2FibGUtamEvPC9jb2RlPiwgZXZlbiBpZiB0aGUKK2RldmljZSBoYXBwZW5zIHRvIGJlIG9uZSB0aGF0IGV4cGVjdHMgaW5wdXQgZnJvbSBhIHN0eWx1cyBhbmQgaGFzIGEgUVZHQQorbG93LWRlbnNpdHkgc2NyZWVuIGluIGxhbmRzY2FwZSBvcmllbnRhdGlvbi48L3A+CisKKzxwIGNsYXNzPSJub3RlIj48c3Ryb25nPkV4Y2VwdGlvbjo8L3N0cm9uZz4gVGhlIG9ubHkgcXVhbGlmaWVycyB0aGF0IHRha2UKK3ByZWNlZGVuY2Ugb3ZlciBsb2NhbGUgaW4gdGhlIHNlbGVjdGlvbiBwcm9jZXNzIGFyZSBNQ0MgYW5kIE1OQyAobW9iaWxlIGNvdW50cnkKK2NvZGUgYW5kIG1vYmlsZSBuZXR3b3JrIGNvZGUpLiA8L3A+CisKKzxwPjxlbT5FeGFtcGxlOjwvZW0+PC9wPgorCis8cD5Bc3N1bWUgdGhhdCB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbjo8L3A+CisKKzx1bD4KKyAgPGxpPlRoZSBhcHBsaWNhdGlvbiBjb2RlIGNhbGxzIGZvciA8Y29kZT5SLnN0cmluZy50ZXh0X2E8L2NvZGU+PC9saT4KKyAgPGxpPlR3byByZWxldmFudCByZXNvdXJjZSBmaWxlcyBhcmUgYXZhaWxhYmxlOgorICAgIDx1bD4KKyAgICAgIDxsaT48Y29kZT5yZXMvdmFsdWVzLW1jYzQwNC9zdHJpbmdzLnhtbDwvY29kZT4sIHdoaWNoIGluY2x1ZGVzCis8Y29kZT50ZXh0X2E8L2NvZGU+IGluIHRoZSBhcHBsaWNhdGlvbidzIGRlZmF1bHQgbGFuZ3VhZ2UsIGluIHRoaXMgY2FzZQorRW5nbGlzaC48L2xpPgorICAgICAgPGxpPjxjb2RlPnJlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWw8L2NvZGU+LCB3aGljaCBpbmNsdWRlcworPGNvZGU+dGV4dF9hPC9jb2RlPiBpbiBIaW5kaS48L2xpPgorICAgIDwvdWw+CisgIDwvbGk+CisgIDxsaT5UaGUgYXBwbGljYXRpb24gaXMgcnVubmluZyBvbiBhIGRldmljZSB0aGF0IGhhcyB0aGUgZm9sbG93aW5nCitjb25maWd1cmF0aW9uOgorICAgIDx1bD4KKyAgICAgIDxsaT5UaGUgU0lNIGNhcmQgaXMgY29ubmVjdGVkIHRvIGEgbW9iaWxlIG5ldHdvcmsgaW4gSW5kaWEgKE1DQyA0MDQpLjwvbGk+CisgICAgICA8bGk+VGhlIGxhbmd1YWdlIGlzIHNldCB0byBIaW5kaSAoPGNvZGU+aGk8L2NvZGU+KS48L2xpPgorICAgIDwvdWw+CisgIDwvbGk+Cis8L3VsPgorCis8cD5BbmRyb2lkIHdpbGwgbG9hZCA8Y29kZT50ZXh0X2E8L2NvZGU+IGZyb20KKzxjb2RlPnJlcy92YWx1ZXMtbWNjNDA0L3N0cmluZ3MueG1sPC9jb2RlPiAoaW4gRW5nbGlzaCksIGV2ZW4gaWYgdGhlIGRldmljZSBpcworY29uZmlndXJlZCBmb3IgSGluZGkuIFRoYXQgaXMgYmVjYXVzZSBpbiB0aGUgcmVzb3VyY2Utc2VsZWN0aW9uIHByb2Nlc3MsIEFuZHJvaWQKK3dpbGwgcHJlZmVyIGFuIE1DQyBtYXRjaCBvdmVyIGEgbGFuZ3VhZ2UgbWF0Y2guIDwvcD4KKworPHA+VGhlIHNlbGVjdGlvbiBwcm9jZXNzIGlzIG5vdCBhbHdheXMgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIHRoZXNlIGV4YW1wbGVzCitzdWdnZXN0LiBQbGVhc2UgcmVhZCAgPGEKK2hyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCNCZXN0TWF0Y2giPkhvdyBBbmRyb2lkIEZpbmRzCit0aGUgQmVzdC1tYXRjaGluZyBSZXNvdXJjZTwvYT4gZm9yIGEgbW9yZSBudWFuY2VkIGRlc2NyaXB0aW9uIG9mIHRoZQorcHJvY2Vzcy4gQWxsIHRoZSBxdWFsaWZpZXJzIGFyZSBkZXNjcmliZWQgYW5kIGxpc3RlZCBpbiBvcmRlciBvZgorcHJlY2VkZW5jZSBpbiA8YQoraHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZXNvdXJjZXMvcHJvdmlkaW5nLXJlc291cmNlcy5odG1sI3RhYmxlMiI+VGFibGUgMiBvZiBQcm92aWRpbmcKK0FsdGVybmF0aXZlIFJlc291cmNlczwvYT4uPC9wPgorCis8aDMgaWQ9InJlZmVycmluZy10by1yZXNvdXJjZXMiPlJlZmVycmluZyB0byBSZXNvdXJjZXMgaW4gSmF2YTwvaDM+CisKKzxwPkluIHlvdXIgYXBwbGljYXRpb24ncyBKYXZhIGNvZGUsIHlvdSByZWZlciB0byAgcmVzb3VyY2VzIHVzaW5nIHRoZSBzeW50YXgKKzxjb2RlPlIuPGVtPnJlc291cmNlX3R5cGU8L2VtPi48ZW0+cmVzb3VyY2VfbmFtZTwvZW0+PC9jb2RlPiBvcgorPGNvZGU+YW5kcm9pZC5SLjxlbT5yZXNvdXJjZV90eXBlPC9lbT4uPGVtPnJlc291cmNlX25hbWU8L2VtPjwvY29kZT48ZW0+LjwvZW0+CitGb3IgbW9yZSBhYm91dCB0aGlzLCBzZWUgPGEKK2hyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL2FjY2Vzc2luZy1yZXNvdXJjZXMuaHRtbCI+QWNjZXNzaW5nIFJlc291cmNlczwvYT4uPC9wPgorCis8aDIgaWQ9ImNoZWNrbGlzdCI+TG9jYWxpemF0aW9uIENoZWNrbGlzdDwvaDI+CisKKzxwPkZvciBhIGNvbXBsZXRlIG92ZXJ2aWV3IG9mIHRoZSBwcm9jZXNzIG9mIGxvY2FsaXppbmcgYW5kIGRpc3RyaWJ1dGluZyBhbiBBbmRyb2lkIGFwcGxpY2F0aW9uLAorc2VlIHRoZSA8YSBocmVmPSJ7QGRvY1Jvb3R9ZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvbG9jYWxpemluZy5odG1sIj5Mb2NhbGl6YXRpb24KK0NoZWNrbGlzdDwvYT4gZG9jdW1lbnQuPC9wPgorCis8aDIgaWQ9InN0cmF0ZWdpZXMiPkxvY2FsaXphdGlvbiBUaXBzPC9oMj4KKworPGg0IGlkPSJmYWlsaW5nMiI+RGVzaWduIHlvdXIgYXBwbGljYXRpb24gIHRvIHdvcmsgaW4gYW55IGxvY2FsZTwvaDQ+CisKKzxwPllvdSBjYW5ub3QgYXNzdW1lIGFueXRoaW5nIGFib3V0IHRoZSBkZXZpY2Ugb24gd2hpY2ggYSB1c2VyIHdpbGwKK3J1biB5b3VyIGFwcGxpY2F0aW9uLiBUaGUgZGV2aWNlIG1pZ2h0IGhhdmUgaGFyZHdhcmUgdGhhdCB5b3Ugd2VyZSBub3QKK2FudGljaXBhdGluZywgb3IgaXQgbWlnaHQgYmUgc2V0IHRvIGEgbG9jYWxlIHRoYXQgeW91IGRpZCBub3QgcGxhbiBmb3Igb3IgdGhhdAoreW91IGNhbm5vdCB0ZXN0LiBEZXNpZ24geW91ciBhcHBsaWNhdGlvbiBzbyB0aGF0IGl0IHdpbGwgZnVuY3Rpb24gbm9ybWFsbHkgb3IgZmFpbCBncmFjZWZ1bGx5IG5vCittYXR0ZXIgd2hhdCBkZXZpY2UgaXQgcnVucyBvbi48L3A+CisKKzxwIGNsYXNzPSJub3RlIj48c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gTWFrZSBzdXJlIHRoYXQgeW91ciBhcHBsaWNhdGlvbgoraW5jbHVkZXMgYSBmdWxsIHNldCBvZiBkZWZhdWx0IHJlc291cmNlcy48L3A+IDxwPk1ha2Ugc3VyZSB0byBpbmNsdWRlCis8Y29kZT5yZXMvZHJhd2FibGUvPC9jb2RlPiBhbmQgYSA8Y29kZT5yZXMvdmFsdWVzLzwvY29kZT4gZm9sZGVycyAod2l0aG91dCBhbnkKK2FkZGl0aW9uYWwgbW9kaWZpZXJzIGluIHRoZSBmb2xkZXIgbmFtZXMpIHRoYXQgY29udGFpbiBhbGwgdGhlIGltYWdlcyBhbmQgdGV4dAordGhhdCB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgbmVlZC4gPC9wPgorCis8cD5JZiBhbiBhcHBsaWNhdGlvbiBpcyBtaXNzaW5nIGV2ZW4gb25lIGRlZmF1bHQgcmVzb3VyY2UsIGl0IHdpbGwgbm90IHJ1biBvbiBhCisgIGRldmljZSB0aGF0IGlzIHNldCB0byBhbiB1bnN1cHBvcnRlZCBsb2NhbGUuIEZvciBleGFtcGxlLCB0aGUKKyAgPGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4gZGVmYXVsdCBmaWxlIG1pZ2h0IGxhY2sgb25lIHN0cmluZyB0aGF0CisgIHRoZSBhcHBsaWNhdGlvbiBuZWVkczogV2hlbiB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgYW5kCisgIGF0dGVtcHRzIHRvIGxvYWQgPGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4sIHRoZSB1c2VyIHdpbGwgc2VlIGFuCisgIGVycm9yIG1lc3NhZ2UgYW5kIGEgRm9yY2UgQ2xvc2UgYnV0dG9uLiBBbiBJREUgc3VjaCBhcyBFY2xpcHNlIHdpbGwgbm90CisgIGhpZ2hsaWdodCB0aGlzIGtpbmQgb2YgZXJyb3IsIGFuZCB5b3Ugd2lsbCBub3Qgc2VlIHRoZSBwcm9ibGVtIHdoZW4geW91CisgIHRlc3QgdGhlIGFwcGxpY2F0aW9uIG9uIGEgZGV2aWNlIG9yIGVtdWxhdG9yIHRoYXQgaXMgc2V0IHRvIGEgc3VwcG9ydGVkIGxvY2FsZS48L3A+CisKKzxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj0iI3Rlc3QtZm9yLWRlZmF1bHQiPlRlc3RpbmcgZm9yIERlZmF1bHQgUmVzb3VyY2VzPC9hPi48L3A+CisKKzxoND5EZXNpZ24gYSBmbGV4aWJsZSBsYXlvdXQ8L2g0PgorCis8cD4gSWYgeW91IG5lZWQgdG8gcmVhcnJhbmdlIHlvdXIgbGF5b3V0IHRvIGZpdCBhIGNlcnRhaW4gbGFuZ3VhZ2UgKGZvciBleGFtcGxlCitHZXJtYW4gd2l0aCBpdHMgbG9uZyB3b3JkcyksIHlvdSBjYW4gY3JlYXRlIGFuIGFsdGVybmF0aXZlIGxheW91dCBmb3IgdGhhdAorbGFuZ3VhZ2UgKGZvciBleGFtcGxlIDxjb2RlPnJlcy9sYXlvdXQtZGUvbWFpbi54bWw8L2NvZGU+KS4gSG93ZXZlciwgZG9pbmcgdGhpcworY2FuIG1ha2UgeW91ciBhcHBsaWNhdGlvbiBoYXJkZXIgdG8gbWFpbnRhaW4uICBJdCBpcyBiZXR0ZXIgdG8gY3JlYXRlIGEgc2luZ2xlCitsYXlvdXQgdGhhdCBpcyBtb3JlIGZsZXhpYmxlLjwvcD4KKworPHA+QW5vdGhlciB0eXBpY2FsIHNpdHVhdGlvbiBpcyBhIGxhbmd1YWdlIHRoYXQgcmVxdWlyZXMgc29tZXRoaW5nIGRpZmZlcmVudCBpbgoraXRzIGxheW91dC4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBoYXZlIGEgY29udGFjdCBmb3JtIHRoYXQgc2hvdWxkIGluY2x1ZGUgIHR3bworbmFtZSBmaWVsZHMgd2hlbiB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBKYXBhbmVzZSwgYnV0IHRocmVlIG5hbWUgZmllbGRzIHdoZW4KK3RoZSBhcHBsaWNhdGlvbiAgcnVucyBpbiBzb21lIG90aGVyIGxhbmd1YWdlLiBZb3UgY291bGQgaGFuZGxlIHRoaXMgaW4gZWl0aGVyIG9mCit0d28gd2F5czo8L3A+CisKKzx1bD4KKyAgPGxpPkNyZWF0ZSAgb25lICBsYXlvdXQgd2l0aCBhIGZpZWxkIHRoYXQgeW91IGNhbiBwcm9ncmFtbWF0aWNhbGx5IGVuYWJsZSBvcgorZGlzYWJsZSwgYmFzZWQgb24gdGhlIGxhbmd1YWdlLCBvcjwvbGk+CisgIDxsaT5IYXZlIHRoZSBtYWluIGxheW91dCBpbmNsdWRlIGFub3RoZXIgbGF5b3V0IHRoYXQgIGluY2x1ZGVzIHRoZSBjaGFuZ2VhYmxlCitmaWVsZC4gVGhlIHNlY29uZCBsYXlvdXQgY2FuIGhhdmUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGZvciBkaWZmZXJlbnQKK2xhbmd1YWdlcy48L2xpPgorPC91bD4KKworPGg0PkF2b2lkIGNyZWF0aW5nIG1vcmUgcmVzb3VyY2UgZmlsZXMgYW5kIHRleHQgc3RyaW5ncyB0aGFuIHlvdSBuZWVkPC9oND4KKworPHA+WW91IHByb2JhYmx5IGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBhIGxvY2FsZS1zcGVjaWZpYworYWx0ZXJuYXRpdmUgZm9yIGV2ZXJ5IHJlc291cmNlIGluIHlvdXIgYXBwbGljYXRpb24uIEZvciBleGFtcGxlLCB0aGUgbGF5b3V0CitkZWZpbmVkIGluIHRoZSA8Y29kZT5yZXMvbGF5b3V0L21haW4ueG1sPC9jb2RlPiBmaWxlIG1pZ2h0IHdvcmsgaW4gYW55IGxvY2FsZSwKK2luIHdoaWNoIGNhc2UgdGhlcmUgd291bGQgYmUgbm8gbmVlZCB0byBjcmVhdGUgYW55IGFsdGVybmF0aXZlIGxheW91dCBmaWxlcy4KKzwvcD4KKworPHA+QWxzbywgeW91IG1pZ2h0IG5vdCBuZWVkIHRvIGNyZWF0ZSBhbHRlcm5hdGl2ZSB0ZXh0IGZvciBldmVyeQorc3RyaW5nLiBGb3IgZXhhbXBsZSwgYXNzdW1lIHRoZSBmb2xsb3dpbmc6PC9wPgorCis8dWw+CisgIDxsaT5Zb3VyIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCBsYW5ndWFnZSBpcyBBbWVyaWNhbgorRW5nbGlzaC4gRXZlcnkgc3RyaW5nIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHVzZXMgaXMgZGVmaW5lZCwgdXNpbmcgQW1lcmljYW4KK0VuZ2xpc2ggc3BlbGxpbmdzLCBpbiA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPi4gPC9saT4KKworICA8bGk+Rm9yICBhIGZldyBpbXBvcnRhbnQgcGhyYXNlcywgeW91IHdhbnQgdG8gcHJvdmlkZQorQnJpdGlzaCBFbmdsaXNoIHNwZWxsaW5nLiBZb3Ugd2FudCB0aGVzZSBhbHRlcm5hdGl2ZSBzdHJpbmdzIHRvIGJlIHVzZWQgd2hlbiB5b3VyCithcHBsaWNhdGlvbiBydW5zIG9uIGEgZGV2aWNlIGluIHRoZSBVbml0ZWQgS2luZ2RvbS4gPC9saT4KKzwvdWw+CisKKzxwPlRvIGRvIHRoaXMsIHlvdSBjb3VsZCBjcmVhdGUgYSBzbWFsbCBmaWxlIGNhbGxlZAorPGNvZGU+cmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWw8L2NvZGU+IHRoYXQgaW5jbHVkZXMgb25seSB0aGUgc3RyaW5ncyB0aGF0CitzaG91bGQgYmUgZGlmZmVyZW50IHdoZW4gdGhlIGFwcGxpY2F0aW9uICBydW5zIGluIHRoZSBVLksuIEZvciBhbGwgdGhlIHJlc3Qgb2YKK3RoZSBzdHJpbmdzLCB0aGUgYXBwbGljYXRpb24gd2lsbCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHRzIGFuZCB1c2Ugd2hhdCBpcworZGVmaW5lZCBpbiA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPi48L3A+CisKKzxoND5Vc2UgdGhlIEFuZHJvaWQgQ29udGV4dCBvYmplY3QgZm9yIG1hbnVhbCBsb2NhbGUgbG9va3VwPC9oND4KKworPHA+WW91IGNhbiBsb29rIHVwIHRoZSBsb2NhbGUgdXNpbmcgdGhlIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dH0gb2JqZWN0Cit0aGF0IEFuZHJvaWQgbWFrZXMgYXZhaWxhYmxlOjwvcD4KKworPHByZT5TdHJpbmcgbG9jYWxlID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkubG9jYWxlLmdldERpc3BsYXlOYW1lKCk7PC9wcmU+CisKKzxoMiBpZD0idGVzdGluZyI+VGVzdGluZyBMb2NhbGl6ZWQgQXBwbGljYXRpb25zPC9oMj4KKworPGgzIGlkPSJkZXZpY2UiPlRlc3Rpbmcgb24gYSBEZXZpY2U8L2gzPgorPHA+S2VlcCBpbiBtaW5kIHRoYXQgdGhlIGRldmljZSB5b3UgYXJlIHRlc3RpbmcgbWF5IGJlIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGZyb20KKyAgdGhlIGRldmljZXMgYXZhaWxhYmxlIHRvIGNvbnN1bWVycyBpbiBvdGhlciBnZW9ncmFwaGllcy4gVGhlIGxvY2FsZXMgYXZhaWxhYmxlCisgIG9uIHlvdXIgZGV2aWNlIG1heSBkaWZmZXIgZnJvbSB0aG9zZSBhdmFpbGFibGUgb24gb3RoZXIgZGV2aWNlcy4gQWxzbywgdGhlCisgIHJlc29sdXRpb24gYW5kIGRlbnNpdHkgb2YgdGhlIGRldmljZSBzY3JlZW4gbWF5IGRpZmZlciwgd2hpY2ggY291bGQgYWZmZWN0CisgIHRoZSBkaXNwbGF5IG9mIHN0cmluZ3MgYW5kIGRyYXdhYmxlcyBpbiB5b3VyIFVJLjwvcD4KKworPHA+VG8gY2hhbmdlIHRoZSBsb2NhbGUgb24gYSBkZXZpY2UsIHVzZSAgdGhlIFNldHRpbmdzIGFwcGxpY2F0aW9uICAoSG9tZSAmZ3Q7CitNZW51ICZndDsgU2V0dGluZ3MgJmd0OyBMb2NhbGUgJmFtcDsgdGV4dCAmZ3Q7IFNlbGVjdCBsb2NhbGUpLiA8L3A+CisKKzxoMyBpZD0iZW11bGF0b3IiPlRlc3Rpbmcgb24gYW4gRW11bGF0b3I8L2gzPgorCis8cD5Gb3IgZGV0YWlscyBhYm91dCB1c2luZyB0aGUgZW11bGF0b3IsIHNlZSBTZWUgPGEKK2hyZWY9IntAZG9jUm9vdH10b29scy9oZWxwL2VtdWxhdG9yLmh0bWwiPkFuZHJvaWQgRW11bGF0b3I8L2E+LjwvcD4KKzxoND5DcmVhdGluZyBhbmQgdXNpbmcgYSBjdXN0b20gbG9jYWxlPC9oND4KKworPHA+QSAmcXVvdDtjdXN0b20mcXVvdDsgbG9jYWxlIGlzIGEgbGFuZ3VhZ2UvcmVnaW9uIGNvbWJpbmF0aW9uIHRoYXQgdGhlIEFuZHJvaWQKK3N5c3RlbSBpbWFnZSBkb2VzIG5vdCBleHBsaWNpdGx5IHN1cHBvcnQuIChGb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBsb2NhbGVzIGluCitBbmRyb2lkIHBsYXRmb3JtcyBzZWUgdGhlIFZlcnNpb24gTm90ZXMgaW4gdGhlIDxhCitocmVmPSJ7QGRvY1Jvb3R9c2RrL2luZGV4Lmh0bWwiPlNESzwvYT4gdGFiKS4gWW91IGNhbiB0ZXN0Citob3cgeW91ciBhcHBsaWNhdGlvbiB3aWxsIHJ1biBpbiBhIGN1c3RvbSBsb2NhbGUgYnkgY3JlYXRpbmcgYSBjdXN0b20gbG9jYWxlIGluCit0aGUgZW11bGF0b3IuIFRoZXJlIGFyZSB0d28gd2F5cyB0byBkbyB0aGlzOjwvcD4KKworPHVsPgorICA8bGk+VXNlIHRoZSBDdXN0b20gTG9jYWxlIGFwcGxpY2F0aW9uLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdGhlCitBcHBsaWNhdGlvbiB0YWIuIChBZnRlciB5b3UgY3JlYXRlIGEgY3VzdG9tIGxvY2FsZSwgc3dpdGNoIHRvIGl0IGJ5CitwcmVzc2luZyBhbmQgaG9sZGluZyB0aGUgbG9jYWxlIG5hbWUuKTwvbGk+CisgIDxsaT5DaGFuZ2UgdG8gYSBjdXN0b20gbG9jYWxlIGZyb20gdGhlIGFkYiBzaGVsbCwgYXMgZGVzY3JpYmVkIGJlbG93LjwvbGk+Cis8L3VsPgorCis8cD5XaGVuIHlvdSBzZXQgdGhlIGVtdWxhdG9yIHRvIGEgbG9jYWxlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgQW5kcm9pZAorc3lzdGVtIGltYWdlLCB0aGUgc3lzdGVtIGl0c2VsZiB3aWxsIGRpc3BsYXkgaW4gaXRzIGRlZmF1bHQgbGFuZ3VhZ2UuIFlvdXIKK2FwcGxpY2F0aW9uLCBob3dldmVyLCBzaG91bGQgbG9jYWxpemUgcHJvcGVybHkuPC9wPgorCis8aDQ+Q2hhbmdpbmcgdGhlIGVtdWxhdG9yIGxvY2FsZSBmcm9tIHRoZSBhZGIgc2hlbGw8L2g0PgorCis8cD5UbyBjaGFuZ2UgdGhlIGxvY2FsZSBpbiB0aGUgZW11bGF0b3IgYnkgdXNpbmcgdGhlIGFkYiBzaGVsbC4gPC9wPgorCis8b2w+CisgIDxsaT5QaWNrIHRoZSBsb2NhbGUgeW91IHdhbnQgdG8gdGVzdCBhbmQgZGV0ZXJtaW5lIGl0cyBsYW5ndWFnZSBhbmQgcmVnaW9uIGNvZGVzLCBmb3IKK2V4YW1wbGUgPGNvZGU+ZnI8L2NvZGU+IGZvciBGcmVuY2ggYW5kIDxjb2RlPkNBPC9jb2RlPiBmb3IgQ2FuYWRhLjxicj4KKyAgPC9saT4KKyAgPGxpPkxhdW5jaCBhbiBlbXVsYXRvci48L2xpPgorICA8bGk+RnJvbSBhIGNvbW1hbmQtbGluZSBzaGVsbCBvbiB0aGUgaG9zdCBjb21wdXRlciwgcnVuIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQ6PGJyPgorICAgIDxjb2RlPmFkYiBzaGVsbDwvY29kZT48YnI+CisgIG9yIGlmIHlvdSBoYXZlIGEgZGV2aWNlIGF0dGFjaGVkLCBzcGVjaWZ5IHRoYXQgeW91IHdhbnQgdGhlIGVtdWxhdG9yIGJ5IGFkZGluZwordGhlIDxjb2RlPi1lPC9jb2RlPiBvcHRpb246PGJyPgorICA8Y29kZT5hZGIgLWUgc2hlbGw8L2NvZGU+PC9saT4KKyAgPGxpPkF0ICB0aGUgIGFkYiBzaGVsbCBwcm9tcHQgKDxjb2RlPiM8L2NvZGU+KSwgcnVuIHRoaXMgY29tbWFuZDogPGJyPgorICAgIDxjb2RlPnNldHByb3AgcGVyc2lzdC5zeXMubGFuZ3VhZ2UgIFs8ZW0+bGFuZ3VhZ2UgY29kZTwvZW0+XTtzZXRwcm9wCitwZXJzaXN0LnN5cy5jb3VudHJ5IFs8ZW0+Y291bnRyeSAgY29kZTwvZW0+XTtzdG9wO3NsZWVwIDU7c3RhcnQgPGJyPgorICAgIDwvY29kZT5SZXBsYWNlIGJyYWNrZXRlZCBzZWN0aW9ucyB3aXRoIHRoZSAgYXBwcm9wcmlhdGUgY29kZXMgZnJvbSBTdGVwCisxLjwvbGk+Cis8L29sPgorCis8cD5Gb3IgaW5zdGFuY2UsIHRvIHRlc3QgaW4gQ2FuYWRpYW4gRnJlbmNoOjwvcD4KKworPHA+PGNvZGU+c2V0cHJvcCBwZXJzaXN0LnN5cy5sYW5ndWFnZSAgZnI7c2V0cHJvcCBwZXJzaXN0LnN5cy5jb3VudHJ5CitDQTtzdG9wO3NsZWVwIDU7c3RhcnQgPC9jb2RlPjwvcD4KKworPHA+VGhpcyB3aWxsIGNhdXNlIHRoZSBlbXVsYXRvciAgdG8gcmVzdGFydC4gKEl0IHdpbGwgbG9vayBsaWtlIGEgZnVsbCByZWJvb3QsCitidXQgaXQgaXMgbm90LikgT25jZSB0aGUgSG9tZSBzY3JlZW4gYXBwZWFycyBhZ2FpbiwgcmUtbGF1bmNoIHlvdXIgYXBwbGljYXRpb24gKGZvcgorZXhhbXBsZSwgY2xpY2sgdGhlIFJ1biBpY29uIGluIEVjbGlwc2UpLCBhbmQgdGhlIGFwcGxpY2F0aW9uIHdpbGwgbGF1bmNoIHdpdGgKK3RoZSBuZXcgbG9jYWxlLiA8L3A+CisKKzxoMyBpZD0idGVzdC1mb3ItZGVmYXVsdCI+VGVzdGluZyBmb3IgRGVmYXVsdCBSZXNvdXJjZXM8L2gzPgorPHA+SGVyZSdzIGhvdyB0byB0ZXN0IHdoZXRoZXIgYW4gYXBwbGljYXRpb24gaW5jbHVkZXMgZXZlcnkgc3RyaW5nIHJlc291cmNlIHRoYXQgaXQgbmVlZHM6ICA8L3A+Cis8b2w+PGxpPlNldCB0aGUgZW11bGF0b3Igb3IgZGV2aWNlIHRvIGEgbGFuZ3VhZ2UgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIGRvZXMgbm90CisgIHN1cHBvcnQuIEZvciBleGFtcGxlLCBpZiB0aGUgYXBwbGljYXRpb24gaGFzIEZyZW5jaCBzdHJpbmdzIGluCisgIDxjb2RlPnJlcy92YWx1ZXMtZnIvPC9jb2RlPiBidXQgZG9lcyBub3QgaGF2ZSBhbnkgU3BhbmlzaCBzdHJpbmdzIGluCisgIDxjb2RlPnJlcy92YWx1ZXMtZXMvPC9jb2RlPiwgdGhlbiBzZXQgdGhlIGVtdWxhdG9yJ3MgbG9jYWxlIHRvIFNwYW5pc2guCisgIChZb3UgY2FuIHVzZSB0aGUgQ3VzdG9tIExvY2FsZSBhcHBsaWNhdGlvbiB0byBzZXQgdGhlIGVtdWxhdG9yIHRvIGFuCisgIHVuc3VwcG9ydGVkIGxvY2FsZS4pPC9saT4KKyAgPGxpPlJ1biB0aGUgYXBwbGljYXRpb24uPC9saT4KKzxsaT5JZiB0aGUgYXBwbGljYXRpb24gc2hvd3MgYW4gZXJyb3IgbWVzc2FnZSBhbmQgYSBGb3JjZSBDbG9zZSBidXR0b24sIGl0IG1pZ2h0CisgIGJlIGxvb2tpbmcgZm9yIGEgc3RyaW5nIHRoYXQgaXMgbm90IGF2YWlsYWJsZS4gTWFrZSBzdXJlIHRoYXQgeW91cgorICA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlIGluY2x1ZGVzIGEgZGVmaW5pdGlvbiBmb3IKKyAgZXZlcnkgc3RyaW5nIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHVzZXMuPC9saT4KKzwvb2w+Cis8L3A+CisKKzxwPklmIHRoZSB0ZXN0IGlzIHN1Y2Nlc3NmdWwsIHJlcGVhdCBpdCBmb3Igb3RoZXIgdHlwZXMgb2YKKyAgY29uZmlndXJhdGlvbnMuIEZvciBleGFtcGxlLCBpZiB0aGUgYXBwbGljYXRpb24gaGFzIGEgbGF5b3V0IGZpbGUgY2FsbGVkCisgIDxjb2RlPnJlcy9sYXlvdXQtbGFuZC9tYWluLnhtbDwvY29kZT4gYnV0IGRvZXMgbm90IGNvbnRhaW4gYSBmaWxlIGNhbGxlZAorICA8Y29kZT5yZXMvbGF5b3V0LXBvcnQvbWFpbi54bWw8L2NvZGU+LCB0aGVuIHNldCB0aGUgZW11bGF0b3Igb3IgZGV2aWNlIHRvCisgIHBvcnRyYWl0IG9yaWVudGF0aW9uIGFuZCBzZWUgaWYgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcnVuLgorCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3Jlc291cmNlcy9ydW50aW1lLWNoYW5nZXMuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3Jlc291cmNlcy9ydW50aW1lLWNoYW5nZXMuamQKaW5kZXggNDVhNTQ4YS4uNjk1NjQ3YiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9yZXNvdXJjZXMvcnVudGltZS1jaGFuZ2VzLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3J1bnRpbWUtY2hhbmdlcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9SGFuZGxpbmcgUnVudGltZSBDaGFuZ2VzCi1wYWdlLnRhZ3M9ImFjdGl2aXR5IiwibGlmZWN5Y2xlIgorcGFnZS50YWdzPWFjdGl2aXR5LGxpZmVjeWNsZQogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlYXJjaC9hZGRpbmctY3VzdG9tLXN1Z2dlc3Rpb25zLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZWFyY2gvYWRkaW5nLWN1c3RvbS1zdWdnZXN0aW9ucy5qZAppbmRleCA0N2FkMmZlLi42ZWJlZjA4IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlYXJjaC9hZGRpbmctY3VzdG9tLXN1Z2dlc3Rpb25zLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2VhcmNoL2FkZGluZy1jdXN0b20tc3VnZ2VzdGlvbnMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFkZGluZyBDdXN0b20gU3VnZ2VzdGlvbnMKLXBhZ2UudGFncz0iU2VhcmNoUmVjZW50U3VnZ2VzdGlvbnNQcm92aWRlciIsCitwYWdlLnRhZ3M9U2VhcmNoUmVjZW50U3VnZ2VzdGlvbnNQcm92aWRlciwKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZWFyY2gvYWRkaW5nLXJlY2VudC1xdWVyeS1zdWdnZXN0aW9ucy5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2VhcmNoL2FkZGluZy1yZWNlbnQtcXVlcnktc3VnZ2VzdGlvbnMuamQKaW5kZXggYzFkNTlkNC4uZTEwMjBkZCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZWFyY2gvYWRkaW5nLXJlY2VudC1xdWVyeS1zdWdnZXN0aW9ucy5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlYXJjaC9hZGRpbmctcmVjZW50LXF1ZXJ5LXN1Z2dlc3Rpb25zLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1BZGRpbmcgUmVjZW50IFF1ZXJ5IFN1Z2dlc3Rpb25zCi1wYWdlLnRhZ3M9IlNlYXJjaFJlY2VudFN1Z2dlc3Rpb25zIiwiU2VhcmNoUmVjZW50U3VnZ2VzdGlvbnNQcm92aWRlciIKK3BhZ2UudGFncz1TZWFyY2hSZWNlbnRTdWdnZXN0aW9ucyxTZWFyY2hSZWNlbnRTdWdnZXN0aW9uc1Byb3ZpZGVyCiAKIEBqZDpib2R5CiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2VhcmNoL3NlYXJjaC1kaWFsb2cuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlYXJjaC9zZWFyY2gtZGlhbG9nLmpkCmluZGV4IGZjNzIyYjIuLmZjYWFlZDM2IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlYXJjaC9zZWFyY2gtZGlhbG9nLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2VhcmNoL3NlYXJjaC1kaWFsb2cuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUNyZWF0aW5nIGEgU2VhcmNoIEludGVyZmFjZQotcGFnZS50YWdzPSJzZWFyY2h2aWV3IgorcGFnZS50YWdzPXNlYXJjaHZpZXcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL2luZGV4LmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL2luZGV4LmpkCmluZGV4IDY1NTYwZTYuLjA5ZDI3ZTcgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2Vuc29ycy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlbnNvcnMvaW5kZXguamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUxvY2F0aW9uIGFuZCBTZW5zb3JzIEFQSXMKIHBhZ2UubGFuZGluZz10cnVlCi1wYWdlLnRhZ3M9ImxvY2F0aW9uIiwic2Vuc29ycyIKK3BhZ2UudGFncz1sb2NhdGlvbixzZW5zb3JzCiBwYWdlLmxhbmRpbmcuaW50cm89VXNlIHNlbnNvcnMgb24gdGhlIGRldmljZSB0byBhZGQgcmljaCBsb2NhdGlvbiBhbmQgbW90aW9uIGNhcGFiaWxpdGllcyB0byB5b3VyIGFwcCwgZnJvbSBHUFMgb3IgbmV0d29yayBsb2NhdGlvbiB0byBhY2NlbGVyb21ldGVyLCBneXJvc2NvcGUsIHRlbXBlcmF0dXJlLCBiYXJvbWV0ZXIsIGFuZCBtb3JlLiAKIHBhZ2UubGFuZGluZy5pbWFnZT0KIApAQCAtMzgsNCArMzgsNCBAQAogICAgIDwvYT4KICAgPC9kaXY+CiAKLTwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvZGl2PgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL3NlbnNvcnNfbW90aW9uLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL3NlbnNvcnNfbW90aW9uLmpkCmluZGV4IDI4OWM2MzkuLjk5YjY4OWYgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2Vuc29ycy9zZW5zb3JzX21vdGlvbi5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlbnNvcnMvc2Vuc29yc19tb3Rpb24uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU1vdGlvbiBTZW5zb3JzCi1wYWdlLnRhZ3M9InNlbnNvcmV2ZW50IiwiYWNjZWxlcm9tZXRlciIsImd5cm9zY29wZSIsImdyYXZpdHkiLCJyb3RhdGlvbiIKK3BhZ2UudGFncz1zZW5zb3JldmVudCxhY2NlbGVyb21ldGVyLGd5cm9zY29wZSxncmF2aXR5LHJvdGF0aW9uCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTQ1MCw0ICs0NTAsNCBAQAogPHA+VGhlIEFuZHJvaWQgU0RLIHByb3ZpZGVzIGEgc2FtcGxlIGFwcGxpY2F0aW9uIHRoYXQgc2hvd3MgaG93IHRvIHVzZSB0aGUgcm90YXRpb24gdmVjdG9yIHNlbnNvci4KIFRoZSBzYW1wbGUgYXBwbGljYXRpb24gaXMgbG9jYXRlZCBpbiB0aGUgQVBJIERlbW9zIGNvZGUgKDxhCiBocmVmPSJ7QGRvY1Jvb3R9cmVzb3VyY2VzL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9vcy9Sb3RhdGlvblZlY3RvckRlbW8uaHRtbCI+Ci1PUyAtIFJvdGF0aW9uVmVjdG9yRGVtbzwvYT4pLjwvcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitPUyAtIFJvdGF0aW9uVmVjdG9yRGVtbzwvYT4pLjwvcD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2Vuc29ycy9zZW5zb3JzX3Bvc2l0aW9uLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL3NlbnNvcnNfcG9zaXRpb24uamQKaW5kZXggNTViMjgyYi4uNjViOTM1MCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL3NlbnNvcnNfcG9zaXRpb24uamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL3NlbnNvcnNfcG9zaXRpb24uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVBvc2l0aW9uIFNlbnNvcnMKLXBhZ2UudGFncz0ic2Vuc29yZXZlbnQiLCJvcmllbnRhdGlvbiIsInByb3hpbWl0eSIKK3BhZ2UudGFncz1zZW5zb3JldmVudCxvcmllbnRhdGlvbixwcm94aW1pdHkKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpAQCAtMzEzLDQgKzMxMyw0IEBACiAibmVhciIgb3IgImZhci4iIEluIHRoaXMgY2FzZSwgdGhlIHNlbnNvciB1c3VhbGx5IHJlcG9ydHMgaXRzIG1heGltdW0gcmFuZ2UgdmFsdWUgaW4gdGhlIGZhciBzdGF0ZQogYW5kIGEgbGVzc2VyIHZhbHVlIGluIHRoZSBuZWFyIHN0YXRlLiBUeXBpY2FsbHksIHRoZSBmYXIgdmFsdWUgaXMgYSB2YWx1ZSA+IDUgY20sIGJ1dCB0aGlzIGNhbiB2YXJ5CiBmcm9tIHNlbnNvciB0byBzZW5zb3IuIFlvdSBjYW4gZGV0ZXJtaW5lIGEgc2Vuc29yJ3MgbWF4aW11bSByYW5nZSBieSB1c2luZyB0aGUge0BsaW5rCi1hbmRyb2lkLmhhcmR3YXJlLlNlbnNvciNnZXRNYXhpbXVtUmFuZ2V9IG1ldGhvZC48L3A+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorYW5kcm9pZC5oYXJkd2FyZS5TZW5zb3IjZ2V0TWF4aW11bVJhbmdlfSBtZXRob2QuPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy90ZXh0L2NvcHktcGFzdGUuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3RleHQvY29weS1wYXN0ZS5qZAppbmRleCBiMzRmMGZhLi44Zjg5OGU0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3RleHQvY29weS1wYXN0ZS5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3RleHQvY29weS1wYXN0ZS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Q29weSBhbmQgUGFzdGUKLXBhZ2UudGFncz0iY2xpcGJvYXJkbWFuYWdlciIsImNsaXBkYXRhIiwiaW5wdXQiCitwYWdlLnRhZ3M9Y2xpcGJvYXJkbWFuYWdlcixjbGlwZGF0YSxpbnB1dAogQGpkOmJvZHkKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgogICAgIDxkaXYgaWQ9InF2Ij4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdGV4dC9jcmVhdGluZy1pbnB1dC1tZXRob2QuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3RleHQvY3JlYXRpbmctaW5wdXQtbWV0aG9kLmpkCmluZGV4IDcyNTQ1OTQuLjIwNWZkOTYgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdGV4dC9jcmVhdGluZy1pbnB1dC1tZXRob2QuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy90ZXh0L2NyZWF0aW5nLWlucHV0LW1ldGhvZC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Q3JlYXRpbmcgYW4gSW5wdXQgTWV0aG9kCi1wYWdlLnRhZ3M9ImltZSIsImtleWJvYXJkIiwiaW5wdXRtZXRob2RzZXJ2aWNlIgorcGFnZS50YWdzPWltZSxrZXlib2FyZCxpbnB1dG1ldGhvZHNlcnZpY2UKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy90ZXh0L3NwZWxsLWNoZWNrZXItZnJhbWV3b3JrLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy90ZXh0L3NwZWxsLWNoZWNrZXItZnJhbWV3b3JrLmpkCmluZGV4IDM2NmY5Y2MuLmE1ZDk5MzIgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdGV4dC9zcGVsbC1jaGVja2VyLWZyYW1ld29yay5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3RleHQvc3BlbGwtY2hlY2tlci1mcmFtZXdvcmsuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNwZWxsaW5nIENoZWNrZXIgRnJhbWV3b3JrCi1wYWdlLnRhZ3M9ImlucHV0Iiwic3BlbGxjaGVja2Vyc2VydmljZSIKK3BhZ2UudGFncz1pbnB1dCxzcGVsbGNoZWNrZXJzZXJ2aWNlCiBAamQ6Ym9keQogPGRpdiBpZD0icXYtd3JhcHBlciI+CiA8ZGl2IGlkPSJxdiI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2FjdGlvbmJhci5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvYWN0aW9uYmFyLmpkCmluZGV4IDMxNzNmZjEuLmExMjI0NDMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvYWN0aW9uYmFyLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvYWN0aW9uYmFyLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1BY3Rpb24gQmFyCi1wYWdlLnRhZ3M9ImFjdGlvbmJhciIsIm1lbnUiLCJ0YWJzIgorcGFnZS50YWdzPWFjdGlvbmJhcixtZW51LHRhYnMKIAogQGpkOmJvZHkKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9idXR0b24uamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL2J1dHRvbi5qZAppbmRleCA0MWI2N2I3Zi4uMDI1OTdjOCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9idXR0b24uamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9idXR0b24uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUJ1dHRvbnMKLXBhZ2UudGFncz0iYnV0dG9uIiwiaW1hZ2VidXR0b24iCitwYWdlLnRhZ3M9YnV0dG9uLGltYWdlYnV0dG9uCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTI0MSw0ICsyNDEsNCBAQAogICA8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIFhNTCBzeW50YXgsIGluY2x1ZGluZyBob3cgdG8gZGVmaW5lIGEgZGlzYWJsZWQsIGhvdmVyZWQsIG9yCiBvdGhlciBidXR0b24gc3RhdGVzLCByZWFkIGFib3V0IDxhCiBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3Jlc291cmNlcy9kcmF3YWJsZS1yZXNvdXJjZS5odG1sI1N0YXRlTGlzdCI+U3RhdGUgTGlzdAotRHJhd2FibGU8L2E+LjwvcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitEcmF3YWJsZTwvYT4uPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9waWNrZXJzLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9waWNrZXJzLmpkCmluZGV4IDRjNTU4NDAuLjMxZTRkM2Y1IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3BpY2tlcnMuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9waWNrZXJzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1QaWNrZXJzCi1wYWdlLnRhZ3M9ImRhdGVwaWNrZXIiLCJ0aW1lcGlja2VyIgorcGFnZS50YWdzPWRhdGVwaWNrZXIsdGltZXBpY2tlcgogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3JhZGlvYnV0dG9uLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9yYWRpb2J1dHRvbi5qZAppbmRleCBkMGM0OGVkLi5iMjU1NmUxOSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9yYWRpb2J1dHRvbi5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3JhZGlvYnV0dG9uLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1SYWRpbyBCdXR0b25zCi1wYWdlLnRhZ3M9InJhZGlvYnV0dG9uIiwicmFkaW9ncm91cCIKK3BhZ2UudGFncz1yYWRpb2J1dHRvbixyYWRpb2dyb3VwCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvY29udHJvbHMvc3Bpbm5lci5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvY29udHJvbHMvc3Bpbm5lci5qZAppbmRleCA4NTcxNGI2Li5kMmRiN2E0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3NwaW5uZXIuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9zcGlubmVyLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TcGlubmVycwotcGFnZS50YWdzPSJhZGFwdGVydmlldyIsInNwaW5uZXJhZGFwdGVyIgorcGFnZS50YWdzPWFkYXB0ZXJ2aWV3LHNwaW5uZXJhZGFwdGVyCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTE0Myw0ICsxNDMsNCBAQAogPHA+SWYgeW91IGltcGxlbWVudCB0aGUge0BsaW5rCiBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5Pbkl0ZW1TZWxlY3RlZExpc3RlbmVyfSBpbnRlcmZhY2Ugd2l0aCB5b3VyIHtAbGluawogYW5kcm9pZC5hcHAuQWN0aXZpdHl9IG9yIHtAbGluayBhbmRyb2lkLmFwcC5GcmFnbWVudH0gKHN1Y2ggYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUpLCB5b3UgY2FuIHBhc3MKLTxjb2RlPnRoaXM8L2NvZGU+IGFzIHRoZSBpbnRlcmZhY2UgaW5zdGFuY2UuPC9wPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzxjb2RlPnRoaXM8L2NvZGU+IGFzIHRoZSBpbnRlcmZhY2UgaW5zdGFuY2UuPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy90ZXh0LmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy90ZXh0LmpkCmluZGV4IGMwYjk4NzMuLjk0NzRkZWUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvY29udHJvbHMvdGV4dC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3RleHQuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVRleHQgRmllbGRzCi1wYWdlLnRhZ3M9ImVkaXR0ZXh0IiwiYXV0b2NvbXBsZXRldGV4dHZpZXciCitwYWdlLnRhZ3M9ZWRpdHRleHQsYXV0b2NvbXBsZXRldGV4dHZpZXcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy90b2dnbGVidXR0b24uamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3RvZ2dsZWJ1dHRvbi5qZAppbmRleCAzMTE5Y2Q5Li5jNTdiNTEwIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3RvZ2dsZWJ1dHRvbi5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3RvZ2dsZWJ1dHRvbi5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VG9nZ2xlIEJ1dHRvbnMKLXBhZ2UudGFncz0ic3dpdGNoIiwidG9nZ2xlYnV0dG9uIgorcGFnZS50YWdzPXN3aXRjaCx0b2dnbGVidXR0b24KIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jdXN0b20tY29tcG9uZW50cy5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvY3VzdG9tLWNvbXBvbmVudHMuamQKaW5kZXggNzAzYTVjZS4uYjE0NjA5OCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jdXN0b20tY29tcG9uZW50cy5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2N1c3RvbS1jb21wb25lbnRzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1DdXN0b20gQ29tcG9uZW50cwotcGFnZS50YWdzPSJ2aWV3Iiwid2lkZ2V0IgorcGFnZS50YWdzPXZpZXcsd2lkZ2V0CiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZGVjbGFyaW5nLWxheW91dC5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZGVjbGFyaW5nLWxheW91dC5qZAppbmRleCA2NTg2YzJmLi42MTY5NDliIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2RlY2xhcmluZy1sYXlvdXQuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9kZWNsYXJpbmctbGF5b3V0LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1MYXlvdXRzCi1wYWdlLnRhZ3M9InZpZXciLCJ2aWV3Z3JvdXAiCitwYWdlLnRhZ3M9dmlldyx2aWV3Z3JvdXAKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9kaWFsb2dzLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9kaWFsb2dzLmpkCmluZGV4IDA0Mzg3OWMuLjBjNmVjODQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZGlhbG9ncy5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2RpYWxvZ3MuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPURpYWxvZ3MKLXBhZ2UudGFncz0iYWxlcnRkaWFsb2ciLCJkaWFsb2dmcmFnbWVudCIKK3BhZ2UudGFncz1hbGVydGRpYWxvZyxkaWFsb2dmcmFnbWVudAogCiBAamQ6Ym9keQogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2RyYWctZHJvcC5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZHJhZy1kcm9wLmpkCmluZGV4IDlhNmIwZTkuLjlkOGFhOWIgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZHJhZy1kcm9wLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZHJhZy1kcm9wLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1EcmFnIGFuZCBEcm9wCi1wYWdlLnRhZ3M9ImNsaXBkYXRhIiwiZHJhZ2V2ZW50Iiwib25sb25nY2xpY2tsaXN0ZW5lciIKK3BhZ2UudGFncz1jbGlwZGF0YSxkcmFnZXZlbnQsb25sb25nY2xpY2tsaXN0ZW5lcgogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9ncmlkdmlldy5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvbGF5b3V0L2dyaWR2aWV3LmpkCmluZGV4IGJjMTg5YzQuLmI4ZDI0YjYwIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9ncmlkdmlldy5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9ncmlkdmlldy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9R3JpZCBWaWV3Ci1wYWdlLnRhZ3M9ImdyaWR2aWV3IgorcGFnZS50YWdzPWdyaWR2aWV3CiBAamQ6Ym9keQogPGRpdiBpZD0icXYtd3JhcHBlciI+CiA8ZGl2IGlkPSJxdiI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9saW5lYXIuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9saW5lYXIuamQKaW5kZXggNDQ0ZGM3MS4uOTAyZjIyZiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9sYXlvdXQvbGluZWFyLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvbGF5b3V0L2xpbmVhci5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TGluZWFyIExheW91dAotcGFnZS50YWdzPSJsaW5lYXJsYXlvdXQiCitwYWdlLnRhZ3M9bGluZWFybGF5b3V0CiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvbGF5b3V0L2xpc3R2aWV3LmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9sYXlvdXQvbGlzdHZpZXcuamQKaW5kZXggZjgzMTVjNS4uM2M2ZTMyYyAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9sYXlvdXQvbGlzdHZpZXcuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9sYXlvdXQvbGlzdHZpZXcuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUxpc3QgVmlldwotcGFnZS50YWdzPSJsaXN0dmlldyIKK3BhZ2UudGFncz1saXN0dmlldwogQGpkOmJvZHkKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgogPGRpdiBpZD0icXYiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9sYXlvdXQvcmVsYXRpdmUuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9yZWxhdGl2ZS5qZAppbmRleCA2NWM1NjE3Li42OWY1YzBhIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9yZWxhdGl2ZS5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9yZWxhdGl2ZS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9UmVsYXRpdmUgTGF5b3V0Ci1wYWdlLnRhZ3M9InJlbGF0aXZlbGF5b3V0IgorcGFnZS50YWdzPXJlbGF0aXZlbGF5b3V0CiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTExNCw0ICsxMTQsNCBAQAogPC9wcmU+CiAKIDxwPkZvciBkZXRhaWxzIGFib3V0IGFsbCB0aGUgbGF5b3V0IGF0dHJpYnV0ZXMgYXZhaWxhYmxlIHRvIGVhY2ggY2hpbGQgdmlldyBvZiBhIHtAbGluawotYW5kcm9pZC53aWRnZXQuUmVsYXRpdmVMYXlvdXR9LCBzZWUge0BsaW5rIGFuZHJvaWQud2lkZ2V0LlJlbGF0aXZlTGF5b3V0LkxheW91dFBhcmFtc30uPC9wPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2FuZHJvaWQud2lkZ2V0LlJlbGF0aXZlTGF5b3V0fSwgc2VlIHtAbGluayBhbmRyb2lkLndpZGdldC5SZWxhdGl2ZUxheW91dC5MYXlvdXRQYXJhbXN9LjwvcD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvc2V0dGluZ3MuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL3NldHRpbmdzLmpkCmluZGV4IGQ5NjQ0N2QuLjFkMzY0MzAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvc2V0dGluZ3MuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9zZXR0aW5ncy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U2V0dGluZ3MKLXBhZ2UudGFncz0icHJlZmVyZW5jZSIsInByZWZlcmVuY2VhY3Rpdml0eSIsInByZWZlcmVuY2VmcmFnbWVudCIKK3BhZ2UudGFncz1wcmVmZXJlbmNlLHByZWZlcmVuY2VhY3Rpdml0eSxwcmVmZXJlbmNlZnJhZ21lbnQKIAogQGpkOmJvZHkKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9ibHVlX3NoYWRpbmcucG5nIGIvZG9jcy9odG1sL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9ibHVlX3NoYWRpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTBmNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2h0bWwvaW1hZ2VzL2NhbWVyYTIvbWV0YWRhdGEvYW5kcm9pZC5zdGF0aXN0aWNzLmxlbnNTaGFkaW5nTWFwL2JsdWVfc2hhZGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9ncmVlbl9lX3NoYWRpbmcucG5nIGIvZG9jcy9odG1sL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9ncmVlbl9lX3NoYWRpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOTcyY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2h0bWwvaW1hZ2VzL2NhbWVyYTIvbWV0YWRhdGEvYW5kcm9pZC5zdGF0aXN0aWNzLmxlbnNTaGFkaW5nTWFwL2dyZWVuX2Vfc2hhZGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9ncmVlbl9vX3NoYWRpbmcucG5nIGIvZG9jcy9odG1sL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9ncmVlbl9vX3NoYWRpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjYwMGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2h0bWwvaW1hZ2VzL2NhbWVyYTIvbWV0YWRhdGEvYW5kcm9pZC5zdGF0aXN0aWNzLmxlbnNTaGFkaW5nTWFwL2dyZWVuX29fc2hhZGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9pbnZfc2hhZGluZy5wbmcgYi9kb2NzL2h0bWwvaW1hZ2VzL2NhbWVyYTIvbWV0YWRhdGEvYW5kcm9pZC5zdGF0aXN0aWNzLmxlbnNTaGFkaW5nTWFwL2ludl9zaGFkaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTcyMDhlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9odG1sL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9pbnZfc2hhZGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9yZWRfc2hhZGluZy5wbmcgYi9kb2NzL2h0bWwvaW1hZ2VzL2NhbWVyYTIvbWV0YWRhdGEvYW5kcm9pZC5zdGF0aXN0aWNzLmxlbnNTaGFkaW5nTWFwL3JlZF9zaGFkaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2VmM2FlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9odG1sL2ltYWdlcy9jYW1lcmEyL21ldGFkYXRhL2FuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcC9yZWRfc2hhZGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3NhbXBsZXMvaW5kZXguamQgYi9kb2NzL2h0bWwvc2FtcGxlcy9pbmRleC5qZAppbmRleCBjMTIxM2I2Li5hYjE1ZTMyIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvc2FtcGxlcy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvc2FtcGxlcy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U2FtcGxlcwotcGFnZS50YWdzPSJzYW1wbGVzIiwiZXhhbXBsZXMiLCJjb2RlIgorcGFnZS50YWdzPXNhbXBsZXMsZXhhbXBsZXMsY29kZQogCiBAamQ6Ym9keQogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvc2RrL2luZGV4LmpkIGIvZG9jcy9odG1sL3Nkay9pbmRleC5qZAppbmRleCBhNzdjZGZiLi5iYzIyNDE2IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvc2RrL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC9zZGsvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFuZHJvaWQgU0RLCi1wYWdlLnRhZ3M9ImRvd25sb2FkIgorcGFnZS50YWdzPWRvd25sb2FkCiBwYWdlLnRlbXBsYXRlPXNkawogaGVhZGVyLmhpZGU9MQogcGFnZS5tZXRhRGVzY3JpcHRpb249RG93bmxvYWQgdGhlIG9mZmljaWFsIEFuZHJvaWQgU0RLIHRvIGRldmVsb3AgYXBwcyBmb3IgQW5kcm9pZC1wb3dlcmVkIGRldmljZXMuCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvc2RrL2luc3RhbGxpbmcvc3R1ZGlvLmpkIGIvZG9jcy9odG1sL3Nkay9pbnN0YWxsaW5nL3N0dWRpby5qZAppbmRleCBmMTllOGJjLi5mMzAyN2E5IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvc2RrL2luc3RhbGxpbmcvc3R1ZGlvLmpkCisrKyBiL2RvY3MvaHRtbC9zZGsvaW5zdGFsbGluZy9zdHVkaW8uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUdldHRpbmcgU3RhcnRlZCB3aXRoIEFuZHJvaWQgU3R1ZGlvCi1wYWdlLnRhZ3M9InN0dWRpbyIKK3BhZ2UudGFncz1zdHVkaW8KIEBqZDpib2R5CiAKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3Rvb2xzL2Fkay9hZGsuamQgYi9kb2NzL2h0bWwvdG9vbHMvYWRrL2Fkay5qZAppbmRleCAxNjUxNzQ3Li43ZTc1YzExIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdG9vbHMvYWRrL2Fkay5qZAorKysgYi9kb2NzL2h0bWwvdG9vbHMvYWRrL2Fkay5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QWNjZXNzb3J5IERldmVsb3BtZW50IEtpdCAyMDExIEd1aWRlCi1wYWdlLnRhZ3M9ImFkayIKK3BhZ2UudGFncz1hZGsKIEBqZDpib2R5CiAKICAgPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdG9vbHMvYWRrL2FkazIuamQgYi9kb2NzL2h0bWwvdG9vbHMvYWRrL2FkazIuamQKaW5kZXggYzYwZTkyMDMuLmQ2OTEyNWEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90b29scy9hZGsvYWRrMi5qZAorKysgYi9kb2NzL2h0bWwvdG9vbHMvYWRrL2FkazIuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFjY2Vzc29yeSBEZXZlbG9wbWVudCBLaXQgMjAxMiBHdWlkZQotcGFnZS50YWdzPSJhZGsiCitwYWdlLnRhZ3M9YWRrCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90b29scy9hZGsvaW5kZXguamQgYi9kb2NzL2h0bWwvdG9vbHMvYWRrL2luZGV4LmpkCmluZGV4IGUwMzUxMTUuLmUwODc0OGZjIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdG9vbHMvYWRrL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90b29scy9hZGsvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFjY2Vzc29yeSBEZXZlbG9wbWVudCBLaXQKLXBhZ2UudGFncz0iYWRrIgorcGFnZS50YWdzPWFkawogQGpkOmJvZHkKIAogPHA+VGhlIEFjY2Vzc29yeSBEZXZlbG9wbWVudCBLaXQgKEFESykgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZm9yIGhhcmR3YXJlIG1hbnVmYWN0dXJlcnMgYW5kCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdG9vbHMvZGVidWdnaW5nL2RlYnVnZ2luZy1tZW1vcnkuamQgYi9kb2NzL2h0bWwvdG9vbHMvZGVidWdnaW5nL2RlYnVnZ2luZy1tZW1vcnkuamQKaW5kZXggYTdmNDQzYy4uZmNjYjY3ZSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3Rvb2xzL2RlYnVnZ2luZy9kZWJ1Z2dpbmctbWVtb3J5LmpkCisrKyBiL2RvY3MvaHRtbC90b29scy9kZWJ1Z2dpbmcvZGVidWdnaW5nLW1lbW9yeS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9SW52ZXN0aWdhdGluZyBZb3VyIFJBTSBVc2FnZQotcGFnZS50YWdzPSJtZW1vcnkiLCJPdXRPZk1lbW9yeUVycm9yIgorcGFnZS50YWdzPW1lbW9yeSxPdXRPZk1lbW9yeUVycm9yCiBAamQ6Ym9keQogCiAgPGRpdiBpZD0icXYtd3JhcHBlciI+CkBAIC00OTIsNCArNDkyLDQgQEAKIDxwIGNsYXNzPSJub3RlIj48c3Ryb25nPlRpcDo8L3N0cm9uZz4gWW91IGNhbiBhbHNvIHBlcmZvcm0gdGhlIGFib3ZlIHN0ZXBzIGJ5IHVzaW5nIHRoZSAibW9ua2V5IgogdGVzdCBmcmFtZXdvcmsuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHJ1bm5pbmcgdGhlIG1vbmtleSB0ZXN0IGZyYW1ld29yaywgcmVhZCB0aGUgPGEgaHJlZj0KICJ7QGRvY1Jvb3R9dG9vbHMvaGVscC9tb25rZXlydW5uZXJfY29uY2VwdHMuaHRtbCI+bW9ua2V5cnVubmVyPC9hPgotZG9jdW1lbnRhdGlvbi48L3A+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZG9jdW1lbnRhdGlvbi48L3A+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdG9vbHMvaGVscC9hZGIuamQgYi9kb2NzL2h0bWwvdG9vbHMvaGVscC9hZGIuamQKaW5kZXggYzI1OTkwZi4uMTg1MDEyMyAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3Rvb2xzL2hlbHAvYWRiLmpkCisrKyBiL2RvY3MvaHRtbC90b29scy9oZWxwL2FkYi5qZApAQCAtMSw3ICsxLDcgQEAKIHBhZ2UudGl0bGU9QW5kcm9pZCBEZWJ1ZyBCcmlkZ2UKIHBhcmVudC50aXRsZT1Ub29scwogcGFyZW50Lmxpbms9aW5kZXguaHRtbAotcGFnZS50YWdzPSJhZGIiCitwYWdlLnRhZ3M9YWRiCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90b29scy9oZWxwL2FkdC5qZCBiL2RvY3MvaHRtbC90b29scy9oZWxwL2FkdC5qZAppbmRleCA0ZGFjNTc0Li4xYmIzMDE1IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdG9vbHMvaGVscC9hZHQuamQKKysrIGIvZG9jcy9odG1sL3Rvb2xzL2hlbHAvYWR0LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1BbmRyb2lkIERldmVsb3BlciBUb29scwotcGFnZS50YWdzPSJhZHQiCitwYWdlLnRhZ3M9YWR0CiBAamQ6Ym9keQogCiAgIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3Rvb2xzL2hlbHAvZHJhdzlwYXRjaC5qZCBiL2RvY3MvaHRtbC90b29scy9oZWxwL2RyYXc5cGF0Y2guamQKaW5kZXggZWJmMmM2Yy4uODU5YjFjZiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3Rvb2xzL2hlbHAvZHJhdzlwYXRjaC5qZAorKysgYi9kb2NzL2h0bWwvdG9vbHMvaGVscC9kcmF3OXBhdGNoLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1EcmF3IDktcGF0Y2gKLXBhZ2UudGFncz0iTmluZVBhdGNoIgorcGFnZS50YWdzPU5pbmVQYXRjaAogQGpkOmJvZHkKIAogPHA+VGhlIERyYXcgOS1wYXRjaCB0b29sIGFsbG93cyB5b3UgdG8gZWFzaWx5IGNyZWF0ZSBhIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3Rvb2xzL3NhbXBsZXMvaW5kZXguamQgYi9kb2NzL2h0bWwvdG9vbHMvc2FtcGxlcy9pbmRleC5qZAppbmRleCA3NmJhMzdhLi5hMGQxMWU5IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdG9vbHMvc2FtcGxlcy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdG9vbHMvc2FtcGxlcy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U2FtcGxlcwotcGFnZS50YWdzPSJleGFtcGxlIiwiY29kZSIKK3BhZ2UudGFncz1leGFtcGxlLGNvZGUKIEBqZDpib2R5CiAKIDxwPlRvIGhlbHAgeW91IHVuZGVyc3RhbmQgc29tZSBmdW5kYW1lbnRhbCBBbmRyb2lkIEFQSXMgYW5kIGNvZGluZyBwcmFjdGljZXMsIGEgdmFyaWV0eSBvZiBzYW1wbGUKQEAgLTI5LDQgKzI5LDQgQEAKICAgPGEgaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9tYW5pZmVzdC91c2VzLXNkay1lbGVtZW50Lmh0bWwjQXBpTGV2ZWxzIj5BUEkgbGV2ZWw8L2E+LjwvcD4KIAogPHA+WW91IGNhbiBlYXNpbHkgY3JlYXRlIG5ldyBBbmRyb2lkIHByb2plY3RzIHdpdGggdGhlIGRvd25sb2FkZWQgc2FtcGxlcywgbW9kaWZ5IHRoZW0KLWlmIHlvdSdkIGxpa2UsIGFuZCB0aGVuIHJ1biB0aGVtIG9uIGFuIGVtdWxhdG9yIG9yIGRldmljZS48L3A+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoraWYgeW91J2QgbGlrZSwgYW5kIHRoZW4gcnVuIHRoZW0gb24gYW4gZW11bGF0b3Igb3IgZGV2aWNlLjwvcD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9hY2Nlc3NpYmlsaXR5L2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2FjY2Vzc2liaWxpdHkvaW5kZXguamQKaW5kZXggMGFmMWQ4Ny4uZWE1NGRjNCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2FjY2Vzc2liaWxpdHkvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2FjY2Vzc2liaWxpdHkvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUltcGxlbWVudGluZyBBY2Nlc3NpYmlsaXR5Ci1wYWdlLnRhZ3M9Im5hdmlnYXRpb24iLCJpbnB1dCIKK3BhZ2UudGFncz1uYXZpZ2F0aW9uLGlucHV0CiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvYWN0aXZpdHktdGVzdGluZy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9hY3Rpdml0eS10ZXN0aW5nL2luZGV4LmpkCmluZGV4IGRkZWRlNzEuLmI5NTQyYjYgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9hY3Rpdml0eS10ZXN0aW5nL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9hY3Rpdml0eS10ZXN0aW5nL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1UZXN0aW5nIFlvdXIgQW5kcm9pZCBBY3Rpdml0eQotcGFnZS50YWdzPSJ0ZXN0aW5nIgorcGFnZS50YWdzPXRlc3RpbmcKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9hbmltYXRpb24vaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYW5pbWF0aW9uL2luZGV4LmpkCmluZGV4IGI2OTQwZjguLjRmMzc3ODggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9hbmltYXRpb24vaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2FuaW1hdGlvbi9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QWRkaW5nIEFuaW1hdGlvbnMKLXBhZ2UudGFncz0iQW5pbWF0b3IiLCJ2aWV3cyIsImxheW91dCIsInVzZXIgaW50ZXJmYWNlIgorcGFnZS50YWdzPUFuaW1hdG9yLHZpZXdzLGxheW91dCx1c2VyIGludGVyZmFjZQogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKIApAQCAtODQsNCArODQsNCBAQAogICAgICAgPGRkPgogICAgICAgICBMZWFybiBob3cgdG8gZW5hYmxlIGJ1aWx0LWluIGFuaW1hdGlvbnMgd2hlbiBhZGRpbmcsIHJlbW92aW5nLCBvciB1cGRhdGluZyBjaGlsZCB2aWV3cyBpbiBhIGxheW91dC4KICAgICAgIDwvZGQ+Ci0gICAgPC9kbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisgICAgPC9kbD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9tZW1vcnkuamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvbWVtb3J5LmpkCmluZGV4IGNkYzBjZDQuLmYxNWFmNjggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9tZW1vcnkuamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2FydGljbGVzL21lbW9yeS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TWFuYWdpbmcgWW91ciBBcHAncyBNZW1vcnkKLXBhZ2UudGFncz0icmFtIiwibG93IG1lbW9yeSIsIk91dE9mTWVtb3J5RXJyb3IiLCJvblRyaW1NZW1vcnkiCitwYWdlLnRhZ3M9cmFtLGxvdyBtZW1vcnksT3V0T2ZNZW1vcnlFcnJvcixvblRyaW1NZW1vcnkKIHBhZ2UuYXJ0aWNsZT10cnVlCiBAamQ6Ym9keQogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvcGVyZi1hbnIuamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvcGVyZi1hbnIuamQKaW5kZXggODdjZmMxYy4uYjMyY2M0ZiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2FydGljbGVzL3BlcmYtYW5yLmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9wZXJmLWFuci5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9S2VlcGluZyBZb3VyIEFwcCBSZXNwb25zaXZlCi1wYWdlLnRhZ3M9InRocmVhZHMiLCJhc3luY3Rhc2siCitwYWdlLnRhZ3M9dGhyZWFkcyxhc3luY3Rhc2sKIAogcGFnZS5hcnRpY2xlPXRydWUKIEBqZDpib2R5CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvcGVyZi1qbmkuamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvcGVyZi1qbmkuamQKaW5kZXggOWY4ODBlYy4uMWE0MGY2MiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2FydGljbGVzL3BlcmYtam5pLmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9wZXJmLWpuaS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Sk5JIFRpcHMKLXBhZ2UudGFncz0ibmRrIiwibmF0aXZlIgorcGFnZS50YWdzPW5kayxuYXRpdmUKIAogcGFnZS5hcnRpY2xlPXRydWUKIEBqZDpib2R5CkBAIC00NDQsNyArNDQ0LDkgQEAKIAogPHByZT5EIExhdGUtZW5hYmxpbmcgQ2hlY2tKTkk8L3ByZT4KIAotCis8cD5Zb3UgY2FuIGFsc28gc2V0IHRoZSA8Y29kZT5hbmRyb2lkOmRlYnVnZ2FibGU8L2NvZGU+IGF0dHJpYnV0ZSBpbiB5b3VyIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3QgdG8KK3R1cm4gb24gQ2hlY2tKTkkganVzdCBmb3IgeW91ciBhcHAuIE5vdGUgdGhhdCB0aGUgQW5kcm9pZCBidWlsZCB0b29scyB3aWxsIGRvIHRoaXMgYXV0b21hdGljYWxseSBmb3IKK2NlcnRhaW4gYnVpbGQgdHlwZXMuCiAKIAogPGEgbmFtZT0ibmF0aXZlX2xpYnJhcmllcyIgaWQ9Im5hdGl2ZV9saWJyYXJpZXMiPjwvYT4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9zZWN1cml0eS1zc2wuamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvc2VjdXJpdHktc3NsLmpkCmluZGV4IGY1Mjg2NWEuLjA2MzlmYjAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9zZWN1cml0eS1zc2wuamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2FydGljbGVzL3NlY3VyaXR5LXNzbC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU977u/U2VjdXJpdHkgd2l0aCBIVFRQUyBhbmQgU1NMCi1wYWdlLnRhZ3M9Im5ldHdvcmsiLCJjZXJ0aWZpY2F0ZXMiCitwYWdlLnRhZ3M9bmV0d29yayxjZXJ0aWZpY2F0ZXMKIAogcGFnZS5hcnRpY2xlPXRydWUKIEBqZDpib2R5CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvc21wLmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2FydGljbGVzL3NtcC5qZAppbmRleCA3MjQwZWVjLi4wYjQ1OTg3IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvc21wLmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9zbXAuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNNUCBQcmltZXIgZm9yIEFuZHJvaWQKLXBhZ2UudGFncz0ibmRrIiwibmF0aXZlIgorcGFnZS50YWdzPW5kayxuYXRpdmUKIAogcGFnZS5hcnRpY2xlPXRydWUKIEBqZDpib2R5CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvYmFja3dhcmQtY29tcGF0aWJsZS11aS9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9iYWNrd2FyZC1jb21wYXRpYmxlLXVpL2luZGV4LmpkCmluZGV4IDRiYWE1NWMuLmM4YjZlY2MgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9iYWNrd2FyZC1jb21wYXRpYmxlLXVpL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9iYWNrd2FyZC1jb21wYXRpYmxlLXVpL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1DcmVhdGluZyBCYWNrd2FyZC1Db21wYXRpYmxlIFVJcwotcGFnZS50YWdzPSJ3aWRnZXRzIiwic3VwcG9ydCIKK3BhZ2UudGFncz13aWRnZXRzLHN1cHBvcnQKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvYWN0aW9uYmFyL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9hY3Rpb25iYXIvaW5kZXguamQKaW5kZXggZjBkZTc1ODYuLjAzMDMwNDMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvYWN0aW9uYmFyL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvYWN0aW9uYmFyL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1BZGRpbmcgdGhlIEFjdGlvbiBCYXIKLXBhZ2UudGFncz0iYWN0aW9uYmFyIgorcGFnZS50YWdzPWFjdGlvbmJhcgogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9kYXRhLXN0b3JhZ2UvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2RhdGEtc3RvcmFnZS9pbmRleC5qZAppbmRleCA0Y2NhZDc1Li5mYzBjOGI1IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2RhdGEtc3RvcmFnZS9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2RhdGEtc3RvcmFnZS9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U2F2aW5nIERhdGEKLXBhZ2UudGFncz0iZGF0YSBzdG9yYWdlIiwiZmlsZXMiLCJzcWwiLCJkYXRhYmFzZSIsInByZWZlcmVuY2VzIgorcGFnZS50YWdzPWRhdGEgc3RvcmFnZSxmaWxlcyxzcWwsZGF0YWJhc2UscHJlZmVyZW5jZXMKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvZnJhZ21lbnRzL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9mcmFnbWVudHMvaW5kZXguamQKaW5kZXggOTg3ZGVjZi4uZTc4YjY5NCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9mcmFnbWVudHMvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9mcmFnbWVudHMvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUJ1aWxkaW5nIGEgRHluYW1pYyBVSSB3aXRoIEZyYWdtZW50cwotcGFnZS50YWdzPSJmcmFnbWVudHMiLCAidXNlciBpbnRlcmZhY2UiLCAic3VwcG9ydCBsaWJyYXJ5IgorcGFnZS50YWdzPWZyYWdtZW50cyx1c2VyIGludGVyZmFjZSxzdXBwb3J0IGxpYnJhcnkKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvZnJhZ21lbnRzL3N1cHBvcnQtbGliLmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9mcmFnbWVudHMvc3VwcG9ydC1saWIuamQKaW5kZXggZDk0OTI2Ny4uMWQ1MzhhZiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9mcmFnbWVudHMvc3VwcG9ydC1saWIuamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9mcmFnbWVudHMvc3VwcG9ydC1saWIuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVVzaW5nIHRoZSBTdXBwb3J0IExpYnJhcnkKLXBhZ2UudGFncz0ic3VwcG9ydCBsaWJyYXJ5IgorcGFnZS50YWdzPXN1cHBvcnQgbGlicmFyeQogCiB0cmFpbmluZ25hdnRvcD10cnVlCiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvaW50ZW50cy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvaW50ZW50cy9pbmRleC5qZAppbmRleCA1OWJhMTFmLi5hYTAyMzJhIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2ludGVudHMvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9pbnRlbnRzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1JbnRlcmFjdGluZyB3aXRoIE90aGVyIEFwcHMKLXBhZ2UudGFncz0iaW50ZW50cyIsImFjdGl2aXR5IgorcGFnZS50YWdzPWludGVudHMsYWN0aXZpdHkKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvbmV0d29yay1vcHMvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL25ldHdvcmstb3BzL2luZGV4LmpkCmluZGV4IGNiM2EzOTAuLjg5YWI1MzkgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvbmV0d29yay1vcHMvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9uZXR3b3JrLW9wcy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9UGVyZm9ybWluZyBOZXR3b3JrIE9wZXJhdGlvbnMKLXBhZ2UudGFncz0ibmV0d29yayIsIndpcmVsZXNzIgorcGFnZS50YWdzPW5ldHdvcmssd2lyZWxlc3MKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3Mvc3VwcG9ydGluZy1kZXZpY2VzL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9zdXBwb3J0aW5nLWRldmljZXMvaW5kZXguamQKaW5kZXggMWUzZWI0Mi4uNmYzMzlmNCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9zdXBwb3J0aW5nLWRldmljZXMvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9zdXBwb3J0aW5nLWRldmljZXMvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVN1cHBvcnRpbmcgRGlmZmVyZW50IERldmljZXMKLXBhZ2UudGFncz0icmVzb3VyY2VzIiwic2NyZWVucyIsInZlcnNpb25zIiwibG9jYWxpemF0aW9uIgorcGFnZS50YWdzPXJlc291cmNlcyxzY3JlZW5zLHZlcnNpb25zLGxvY2FsaXphdGlvbgogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9zdXBwb3J0aW5nLWRldmljZXMvbGFuZ3VhZ2VzLmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9zdXBwb3J0aW5nLWRldmljZXMvbGFuZ3VhZ2VzLmpkCmluZGV4IDEzMDg0OGUuLjVhMTUwN2MgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3Mvc3VwcG9ydGluZy1kZXZpY2VzL2xhbmd1YWdlcy5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL3N1cHBvcnRpbmctZGV2aWNlcy9sYW5ndWFnZXMuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPVN1cHBvcnRpbmcgRGlmZmVyZW50IExhbmd1YWdlcwogcGFyZW50LnRpdGxlPVN1cHBvcnRpbmcgRGlmZmVyZW50IERldmljZXMKLXBhZ2UudGFncz0ibG9jYWxpemluZyIsImxvY2FsaXphdGlvbiIsInJlc291cmNlcyIsICJmb3JtYXRzIiwgImwxMG4iCitwYWdlLnRhZ3M9bG9jYWxpemluZyxsb2NhbGl6YXRpb24scmVzb3VyY2VzLGZvcm1hdHMsbDEwbgogcGFyZW50Lmxpbms9aW5kZXguaHRtbAogCiB0cmFpbmluZ25hdnRvcD10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvYmVhbS1maWxlcy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9iZWFtLWZpbGVzL2luZGV4LmpkCmluZGV4IGU0YmFjMmUuLjkxMGZhMzggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9iZWFtLWZpbGVzL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9iZWFtLWZpbGVzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TaGFyaW5nIEZpbGVzIHdpdGggTkZDCi1wYWdlLnRhZ3M9Ik5mY0FkYXB0ZXIiLCJBbmRyb2lkIEJlYW0iLCJzaGFyZSIsImZpbGUgdHJhbnNmZXIiCitwYWdlLnRhZ3M9TmZjQWRhcHRlcixBbmRyb2lkIEJlYW0sc2hhcmUsZmlsZSB0cmFuc2ZlcgogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2NhbWVyYS9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9jYW1lcmEvaW5kZXguamQKaW5kZXggYzZiNDljZi4uNTUwMWFiMCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2NhbWVyYS9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvY2FtZXJhL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1DYXB0dXJpbmcgUGhvdG9zCi1wYWdlLnRhZ3M9ImNhbWVyYSIsInZpZGVvIiwicGljdHVyZSIKK3BhZ2UudGFncz1jYW1lcmEsdmlkZW8scGljdHVyZQogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2Nsb3Vkc2F2ZS9jb25mbGljdC1yZXMuamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvY2xvdWRzYXZlL2NvbmZsaWN0LXJlcy5qZAppbmRleCAwZmY1MGUyLi43M2U3NWRiIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvY2xvdWRzYXZlL2NvbmZsaWN0LXJlcy5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvY2xvdWRzYXZlL2NvbmZsaWN0LXJlcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9UmVzb2x2aW5nIENsb3VkIFNhdmUgQ29uZmxpY3RzCi1wYWdlLnRhZ3M9ImNsb3VkIgorcGFnZS50YWdzPWNsb3VkCiAKIHBhZ2UuYXJ0aWNsZT10cnVlCiBAamQ6Ym9keQpAQCAtNTk0LDQgKzU5NCw0IEBACiBsaW1pdGVkLiBEZXBlbmRpbmcgb24geW91ciBpbXBsZW1lbnRhdGlvbiwgaXQgbWlnaHQgbWFrZSBzZW5zZSB0byBzdG9yZSB0aGUKIHRpbWVzdGFtcCBmb3Igd2hlbiBlYWNoIGVudHJ5IGluIHRoZSBkaWN0aW9uYXJ5IHdhcyBtb2RpZmllZC4gV2hlbiB5b3UgZGV0ZWN0IHRoYXQgYQogZ2l2ZW4gZW50cnkgaGFzIG5vdCBiZWVuIG1vZGlmaWVkIGluIHRoZSBsYXN0IHNldmVyYWwgd2Vla3Mgb3IgbW9udGhzLCBpdCBpcwotcHJvYmFibHkgc2FmZSB0byB0cmFuc2ZlciB0aGUgY29pbnMgaW50byBhbm90aGVyIGVudHJ5IGFuZCBkZWxldGUgdGhlIG9sZCBlbnRyeS48L3A+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorcHJvYmFibHkgc2FmZSB0byB0cmFuc2ZlciB0aGUgY29pbnMgaW50byBhbm90aGVyIGVudHJ5IGFuZCBkZWxldGUgdGhlIG9sZCBlbnRyeS48L3A+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvY2xvdWRzeW5jL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2Nsb3Vkc3luYy9pbmRleC5qZAppbmRleCA1NWIyNzViLi5lYjdkZjNkIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvY2xvdWRzeW5jL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9jbG91ZHN5bmMvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVN5bmNpbmcgdG8gdGhlIENsb3VkCi1wYWdlLnRhZ3M9ImNsb3VkIiwic3luYyIsImJhY2t1cCIKK3BhZ2UudGFncz1jbG91ZCxzeW5jLGJhY2t1cAogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2Nvbm5lY3QtZGV2aWNlcy13aXJlbGVzc2x5L2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2Nvbm5lY3QtZGV2aWNlcy13aXJlbGVzc2x5L2luZGV4LmpkCmluZGV4IGFhZGExZmQuLjMyMDZkN2YgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9jb25uZWN0LWRldmljZXMtd2lyZWxlc3NseS9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvY29ubmVjdC1kZXZpY2VzLXdpcmVsZXNzbHkvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUNvbm5lY3RpbmcgRGV2aWNlcyBXaXJlbGVzc2x5Ci1wYWdlLnRhZ3M9IndpZmkiLCJuZXR3b3JrIiwid2lyZWxlc3MiCitwYWdlLnRhZ3M9d2lmaSxuZXR3b3JrLHdpcmVsZXNzCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvY3VzdG9tLXZpZXdzL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2N1c3RvbS12aWV3cy9pbmRleC5qZAppbmRleCAxYzA5ZTY2Li44N2NkMGIwIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvY3VzdG9tLXZpZXdzL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9jdXN0b20tdmlld3MvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUNyZWF0aW5nIEN1c3RvbSBWaWV3cwotcGFnZS50YWdzPSJ3aWRnZXRzIiwidWkiLCJsYXlvdXQiCitwYWdlLnRhZ3M9d2lkZ2V0cyx1aSxsYXlvdXQKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9kaXNwbGF5aW5nLWJpdG1hcHMvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvZGlzcGxheWluZy1iaXRtYXBzL2luZGV4LmpkCmluZGV4IGZiYTlmYzUuLjcwMDM1ODUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9kaXNwbGF5aW5nLWJpdG1hcHMvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2Rpc3BsYXlpbmctYml0bWFwcy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9RGlzcGxheWluZyBCaXRtYXBzIEVmZmljaWVudGx5Ci1wYWdlLnRhZ3M9ImJpdG1hcHMiLCJpbWFnZXMiLCJncmFwaGljcyIKK3BhZ2UudGFncz1iaXRtYXBzLGltYWdlcyxncmFwaGljcwogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2VmZmljaWVudC1kb3dubG9hZHMvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvZWZmaWNpZW50LWRvd25sb2Fkcy9pbmRleC5qZAppbmRleCAyYWI5M2FlLi5kOWQ3ZWYwIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvZWZmaWNpZW50LWRvd25sb2Fkcy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvZWZmaWNpZW50LWRvd25sb2Fkcy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VHJhbnNmZXJyaW5nIERhdGEgV2l0aG91dCBEcmFpbmluZyB0aGUgQmF0dGVyeQotcGFnZS50YWdzPSJiYXR0ZXJ5IiwibmV0d29yayIsIndpcmVsZXNzIgorcGFnZS50YWdzPWJhdHRlcnksbmV0d29yayx3aXJlbGVzcwogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2VudGVycHJpc2UvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvZW50ZXJwcmlzZS9pbmRleC5qZAppbmRleCBhYzFiNTY1Li4yOTI2ZjcxIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvZW50ZXJwcmlzZS9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvZW50ZXJwcmlzZS9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9RGV2ZWxvcGluZyBmb3IgRW50ZXJwcmlzZQotcGFnZS50YWdzPSJwb2xpY3kiLCJwcml2YWN5IgorcGFnZS50YWdzPXBvbGljeSxwcml2YWN5CiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvZ2VzdHVyZXMvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvZ2VzdHVyZXMvaW5kZXguamQKaW5kZXggOWQyMWIwOC4uMjYwY2ZmZiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2dlc3R1cmVzL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9nZXN0dXJlcy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VXNpbmcgVG91Y2ggR2VzdHVyZXMKLXBhZ2UudGFncz0iaW5wdXQiLCJuYXZpZ2F0aW9uIiwiZ2VzdHVyZWRldGVjdG9yIiwic2Nyb2xsZXIiCitwYWdlLnRhZ3M9aW5wdXQsbmF2aWdhdGlvbixnZXN0dXJlZGV0ZWN0b3Isc2Nyb2xsZXIKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9ncmFwaGljcy9vcGVuZ2wvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvZ3JhcGhpY3Mvb3BlbmdsL2luZGV4LmpkCmluZGV4IGNmMzNkODAuLjM1NDlmOTUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9ncmFwaGljcy9vcGVuZ2wvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2dyYXBoaWNzL29wZW5nbC9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9RGlzcGxheWluZyBHcmFwaGljcyB3aXRoIE9wZW5HTCBFUwotcGFnZT10YWdzPSJvcGVuIGdsIiwiZ3JhcGhpY3MiCitwYWdlLnRhZ3M9b3BlbiBnbCxncmFwaGljcwogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogCiBAamQ6Ym9keQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2lkLWF1dGgvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvaWQtYXV0aC9pbmRleC5qZAppbmRleCAyYmFlOWM0Li5mMTVlZTI5IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvaWQtYXV0aC9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvaWQtYXV0aC9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9UmVtZW1iZXJpbmcgVXNlcnMKLXBhZ2UudGFncz0icHJpdmFjeSIsIm9hdXRoIiwiYWNjb3VudHMiCitwYWdlLnRhZ3M9cHJpdmFjeSxvYXV0aCxhY2NvdW50cwogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL2FuY2VzdHJhbC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9pbXBsZW1lbnRpbmctbmF2aWdhdGlvbi9hbmNlc3RyYWwuamQKaW5kZXggMTJkNTAwNS4uNTcyNTFjMSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL2FuY2VzdHJhbC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vYW5jZXN0cmFsLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Qcm92aWRpbmcgVXAgTmF2aWdhdGlvbgotcGFnZS50YWdzPSJ1cCBuYXZpZ2F0aW9uIiwiTmF2VXRpbHMiLCJUYXNrU3RhY2tCdWlsZGVyIgorcGFnZS50YWdzPXVwIG5hdmlnYXRpb24sTmF2VXRpbHMsVGFza1N0YWNrQnVpbGRlcgogCiB0cmFpbmluZ25hdnRvcD10cnVlCiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9pbXBsZW1lbnRpbmctbmF2aWdhdGlvbi9sYXRlcmFsLmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL2xhdGVyYWwuamQKaW5kZXggYmI5ZDc4Yy4uOWM4MzQ3OSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL2xhdGVyYWwuamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL2xhdGVyYWwuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUNyZWF0aW5nIFN3aXBlIFZpZXdzIHdpdGggVGFicwotcGFnZS50YWdzPSJ2aWV3cGFnZXIiLCJob3Jpem9udGFsIiwicGFnaW5nIiwic3dpcGUgdmlldyIsInRhYnMiCitwYWdlLnRhZ3M9dmlld3BhZ2VyLGhvcml6b250YWwscGFnaW5nLHN3aXBlIHZpZXcsdGFicwogCiB0cmFpbmluZ25hdnRvcD10cnVlCiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9pbXBsZW1lbnRpbmctbmF2aWdhdGlvbi9uYXYtZHJhd2VyLmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL25hdi1kcmF3ZXIuamQKaW5kZXggZjdmNzkxNjYuLjY3OWMyNDAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9pbXBsZW1lbnRpbmctbmF2aWdhdGlvbi9uYXYtZHJhd2VyLmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9pbXBsZW1lbnRpbmctbmF2aWdhdGlvbi9uYXYtZHJhd2VyLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1DcmVhdGluZyBhIE5hdmlnYXRpb24gRHJhd2VyCi1wYWdlLnRhZ3M9IkRyYXdlckxheW91dCIsICJuYXZpZ2F0aW9uIgorcGFnZS50YWdzPURyYXdlckxheW91dCxuYXZpZ2F0aW9uCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL3RlbXBvcmFsLmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL3RlbXBvcmFsLmpkCmluZGV4IDNhYmFiNTMuLmU3MzY2NDggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9pbXBsZW1lbnRpbmctbmF2aWdhdGlvbi90ZW1wb3JhbC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vdGVtcG9yYWwuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVByb3ZpZGluZyBQcm9wZXIgQmFjayBOYXZpZ2F0aW9uCi1wYWdlLnRhZ3M9ImJhY2sgbmF2aWdhdGlvbiIsIk5hdlV0aWxzIiwiVGFza1N0YWNrQnVpbGRlciIKK3BhZ2UudGFncz1iYWNrIG5hdmlnYXRpb24sTmF2VXRpbHMsVGFza1N0YWNrQnVpbGRlcgogCiB0cmFpbmluZ25hdnRvcD10cnVlCiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9pbXByb3ZpbmctbGF5b3V0cy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9pbXByb3ZpbmctbGF5b3V0cy9pbmRleC5qZAppbmRleCA4Y2IyMjU4Li5hMmFiN2ExIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wcm92aW5nLWxheW91dHMvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2ltcHJvdmluZy1sYXlvdXRzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1JbXByb3ZpbmcgTGF5b3V0IFBlcmZvcm1hbmNlCi1wYWdlLnRhZ3M9ImluY2x1ZGUiLCJtZXJnZSIsInZpZXdzdHViIiwibGlzdHZpZXciCitwYWdlLnRhZ3M9aW5jbHVkZSxtZXJnZSx2aWV3c3R1YixsaXN0dmlldwogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpAQCAtNjMsNCArNjMsNCBAQAogICAgIDxkZD5JZiB5b3UndmUgYnVpbHQgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIGFuZHJvaWQud2lkZ2V0Lkxpc3RWaWV3fSB0aGF0IGNvbnRhaW5zIGNvbXBsZXggb3IKIGRhdGEtaGVhdnkgY29udGVudCBpbiBlYWNoIGxpc3QgaXRlbSwgdGhlIHNjcm9sbCBwZXJmb3JtYW5jZSBvZiB0aGUgbGlzdCBtaWdodCBzdWZmZXIuIFRoaXMKIGxlc3NvbiBwcm92aWRlcyBzb21lIHRpcHMgYWJvdXQgaG93IHlvdSBjYW4gbWFrZSB5b3VyIHNjcm9sbGluZyBwZXJmb3JtYW5jZSBtb3JlIHNtb290aC48L2RkPgotPC9kbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L2RsPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2luLWFwcC1iaWxsaW5nL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2luLWFwcC1iaWxsaW5nL2luZGV4LmpkCmluZGV4IDk0NzA4YjguLjRhNDQ2ZjMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9pbi1hcHAtYmlsbGluZy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvaW4tYXBwLWJpbGxpbmcvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNlbGxpbmcgSW4tYXBwIFByb2R1Y3RzCi1wYWdlLnRhZ3M9ImJpbGxpbmciCitwYWdlLnRhZ3M9YmlsbGluZwogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2tleWJvYXJkLWlucHV0L2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2tleWJvYXJkLWlucHV0L2luZGV4LmpkCmluZGV4IDdhYzc5ZTYuLjQ2Nzk1YzQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9rZXlib2FyZC1pbnB1dC9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcva2V5Ym9hcmQtaW5wdXQvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUhhbmRsaW5nIEtleWJvYXJkIElucHV0Ci1wYWdlLnRhZ3M9ImVkaXR0ZXh0IiwiYWNjZXNzaWJpbGl0eSIKK3BhZ2UudGFncz1lZGl0dGV4dCxhY2Nlc3NpYmlsaXR5CiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCkBAIC01Miw0ICs1Miw0IEBACiAgICAgPGRkPkxlYXJuIGhvdyB0byByZXNwb25kIGRpcmVjdGx5IHRvIGtleWJvYXJkIGlucHV0IGZvciB1c2VyIGFjdGlvbnMuCiAgICAgPC9kZD4KICAKLTwvZGw+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvZGw+IApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2xvYWQtZGF0YS1iYWNrZ3JvdW5kL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2xvYWQtZGF0YS1iYWNrZ3JvdW5kL2luZGV4LmpkCmluZGV4IDI5MTA4ZTguLmU5OTEwMDMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9sb2FkLWRhdGEtYmFja2dyb3VuZC9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvbG9hZC1kYXRhLWJhY2tncm91bmQvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUxvYWRpbmcgRGF0YSBpbiB0aGUgQmFja2dyb3VuZAotcGFnZS50YWdzPSJjdXJzb3Jsb2FkZXIiCitwYWdlLnRhZ3M9Y3Vyc29ybG9hZGVyCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvbG9jYXRpb24vaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvbG9jYXRpb24vaW5kZXguamQKaW5kZXggZTAzZWFjNi4uMjQ5YzQyZCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2xvY2F0aW9uL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9sb2NhdGlvbi9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TWFraW5nIFlvdXIgQXBwIExvY2F0aW9uLUF3YXJlCi1wYWdlLnRhZ3M9ImxvY2F0aW9uIiwiZ2VvZmVuY2UiLCAiZ2VvZmVuY2luZyIsICJhY3Rpdml0eSByZWNvZ25pdGlvbiIsICJhY3Rpdml0eSBkZXRlY3Rpb24iLCAiZ3BzIgorcGFnZS50YWdzPWxvY2F0aW9uLGdlb2ZlbmNlLGdlb2ZlbmNpbmcsYWN0aXZpdHkgcmVjb2duaXRpb24sYWN0aXZpdHkgZGV0ZWN0aW9uLGdwcwogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL21hbmFnaW5nLWF1ZGlvL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL21hbmFnaW5nLWF1ZGlvL2luZGV4LmpkCmluZGV4IDNlM2JjZjAuLjkzOTE0NDkgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9tYW5hZ2luZy1hdWRpby9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvbWFuYWdpbmctYXVkaW8vaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU1hbmFnaW5nIEF1ZGlvIFBsYXliYWNrCi1wYWdlLnRhZ3M9ImF1ZGlvIiwibWVkaWEiCitwYWdlLnRhZ3M9YXVkaW8sbWVkaWEKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKQEAgLTU4LDQgKzU4LDQgQEAKICAgPGR0PjxiPjxhIGhyZWY9ImF1ZGlvLW91dHB1dC5odG1sIj5EZWFsaW5nIHdpdGggQXVkaW8gT3V0cHV0IEhhcmR3YXJlPC9hPjwvYj48L2R0PgogICA8ZGQ+QXVkaW8gY2FuIGJlIHBsYXllZCBmcm9tIGEgbnVtYmVyIG9mIHNvdXJjZXMuIExlYXJuIGhvdyB0byBmaW5kIG91dCB3aGVyZSB0aGUgYXVkaW8gaXMgYmVpbmcKIHBsYXllZCBhbmQgaG93IHRvIGhhbmRsZSBhIGhlYWRzZXQgYmVpbmcgZGlzY29ubmVjdGVkIGR1cmluZyBwbGF5YmFjay48L2RkPiAKLSA8L2RsPiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisgPC9kbD4gCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvbW9uaXRvcmluZy1kZXZpY2Utc3RhdGUvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvbW9uaXRvcmluZy1kZXZpY2Utc3RhdGUvaW5kZXguamQKaW5kZXggYzNkNzAwYS4uOTQ5YzFkYSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL21vbml0b3JpbmctZGV2aWNlLXN0YXRlL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9tb25pdG9yaW5nLWRldmljZS1zdGF0ZS9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9T3B0aW1pemluZyBCYXR0ZXJ5IExpZmUKLXBhZ2UudGFncz0ibmV0d29yayIsImludGVybmV0IgorcGFnZS50YWdzPW5ldHdvcmssaW50ZXJuZXQKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKQEAgLTU5LDQgKzU5LDQgQEAKIHRob3NlIHRoYXQgYXJlbid0IG5lY2Vzc2FyeSBkdWUgdG8gdGhlIGN1cnJlbnQgZGV2aWNlIHN0YXRlLiBMZWFybiB0byBpbXByb3ZlCiBlZmZpY2llbmN5IGJ5IHRvZ2dsaW5nIGFuZCBjYXNjYWRpbmcgc3RhdGUgY2hhbmdlIHJlY2VpdmVycyBhbmQgZGVsYXkgYWN0aW9ucyB1bnRpbCB0aGUgZGV2aWNlIGlzIGluCiBhIHNwZWNpZmljIHN0YXRlLjwvZGQ+Ci08L2RsPiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L2RsPiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9tdWx0aXBsZS1hcGtzL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL211bHRpcGxlLWFwa3MvaW5kZXguamQKaW5kZXggNTc1NGRhOS4uNDBhMjZiOSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL211bHRpcGxlLWFwa3MvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL211bHRpcGxlLWFwa3MvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU1haW50YWluaW5nIE11bHRpcGxlIEFQS3MKLXBhZ2UudGFncz0ic3VwcG9ydCIKK3BhZ2UudGFncz1zdXBwb3J0CiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvbXVsdGlwbGUtdGhyZWFkcy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9tdWx0aXBsZS10aHJlYWRzL2luZGV4LmpkCmluZGV4IGNiZDQyYjQuLjEzNmYwYWYgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9tdWx0aXBsZS10aHJlYWRzL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9tdWx0aXBsZS10aHJlYWRzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TZW5kaW5nIE9wZXJhdGlvbnMgdG8gTXVsdGlwbGUgVGhyZWFkcwotcGFnZS50YWdzPSJ0aHJlYWRwb29sIiwicnVubmFibGUiCitwYWdlLnRhZ3M9dGhyZWFkcG9vbCxydW5uYWJsZQogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL211bHRpc2NyZWVuL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL211bHRpc2NyZWVuL2luZGV4LmpkCmluZGV4IDJkMzRiMjguLjQ1YjYxNjEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9tdWx0aXNjcmVlbi9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvbXVsdGlzY3JlZW4vaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPURlc2lnbmluZyBmb3IgTXVsdGlwbGUgU2NyZWVucwotcGFnZS50YWdzPSJ0YWJsZXQiLCJ0diIsImZyYWdtZW50cyIsInN1cHBvcnQiCitwYWdlLnRhZ3M9dGFibGV0LHR2LGZyYWdtZW50cyxzdXBwb3J0CiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvbm90aWZ5LXVzZXIvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvbm90aWZ5LXVzZXIvaW5kZXguamQKaW5kZXggNTFmMDU4Zi4uZjdkMGY4NyAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL25vdGlmeS11c2VyL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9ub3RpZnktdXNlci9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Tm90aWZ5aW5nIHRoZSBVc2VyCi1wYWdlLnRhZ3M9Im5vdGlmaWNhdGlvbnMiCitwYWdlLnRhZ3M9bm90aWZpY2F0aW9ucwogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL3ByaW50aW5nL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL3ByaW50aW5nL2luZGV4LmpkCmluZGV4IDgxNjFiNmIuLmUzM2U1ZTggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9wcmludGluZy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvcHJpbnRpbmcvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVByaW50aW5nIENvbnRlbnQKLXBhZ2UudGFncz0icHJpbnQiLCJuYXZpZ2F0aW9uIiwiZ2VzdHVyZWRldGVjdG9yIiwic2Nyb2xsZXIiCitwYWdlLnRhZ3M9cHJpbnQsbmF2aWdhdGlvbixnZXN0dXJlZGV0ZWN0b3Isc2Nyb2xsZXIKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9ydW4tYmFja2dyb3VuZC1zZXJ2aWNlL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL3J1bi1iYWNrZ3JvdW5kLXNlcnZpY2UvaW5kZXguamQKaW5kZXggMzM2MGRmNS4uMjJmM2ZjOCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL3J1bi1iYWNrZ3JvdW5kLXNlcnZpY2UvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL3J1bi1iYWNrZ3JvdW5kLXNlcnZpY2UvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVJ1bm5pbmcgaW4gYSBCYWNrZ3JvdW5kIFNlcnZpY2UKLXBhZ2UudGFncz0iaW50ZW50c2VydmljZSIKK3BhZ2UudGFncz1pbnRlbnRzZXJ2aWNlCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvc2NoZWR1bGluZy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9zY2hlZHVsaW5nL2luZGV4LmpkCmluZGV4IDlmZmJjMTYuLjRkMmRiNjAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9zY2hlZHVsaW5nL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9zY2hlZHVsaW5nL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1NYW5hZ2luZyBEZXZpY2UgQXdha2UgU3RhdGUKLXBhZ2UudGFncz0iIgorcGFnZS50YWdzPQogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL3NlYXJjaC9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9zZWFyY2gvaW5kZXguamQKaW5kZXggNDA3MDM3Mi4uNjEyZThlOCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL3NlYXJjaC9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvc2VhcmNoL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1BZGRpbmcgU2VhcmNoIEZ1bmN0aW9uYWxpdHkKLXBhZ2UudGFncz0ic2VhcmNodmlldyIsImRhdGFiYXNlIgorcGFnZS50YWdzPXNlYXJjaHZpZXcsZGF0YWJhc2UKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKQEAgLTUwLDQgKzUwLDQgQEAKICAgICA8ZHQ+PGI+PGEgaHJlZj0iYmFja3dhcmQtY29tcGF0Lmh0bWwiPlJlbWFpbmluZyBCYWNrd2FyZCBDb21wYXRpYmxlPC9hPjwvYj48L2R0PgogCiAgICAgPGRkPkxlYXJuIGhvdyB0byBrZWVwIHNlYXJjaCBmZWF0dXJlcyBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggb2xkZXIgZGV2aWNlcyBieSB1c2luZy48L2RkPgotICA8L2RsPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgPC9kbD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9zZWN1cmUtZmlsZS1zaGFyaW5nL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL3NlY3VyZS1maWxlLXNoYXJpbmcvaW5kZXguamQKaW5kZXggYWEwMDlmYy4uNGFkYzFjMCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL3NlY3VyZS1maWxlLXNoYXJpbmcvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL3NlY3VyZS1maWxlLXNoYXJpbmcvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNoYXJpbmcgRmlsZXMKLXBhZ2UudGFncz0iRmlsZVByb3ZpZGVyIiwic2hhcmUiLCJDb250ZW50UHJvdmlkZXIiCitwYWdlLnRhZ3M9RmlsZVByb3ZpZGVyLHNoYXJlLENvbnRlbnRQcm92aWRlcgogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL3NoYXJpbmcvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvc2hhcmluZy9pbmRleC5qZAppbmRleCAwNmQ0MmZjLi41OGE2OWZjIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvc2hhcmluZy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvc2hhcmluZy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U2hhcmluZyBTaW1wbGUgRGF0YQotcGFnZS50YWdzPSJpbnRlbnRzIiwic2hhcmUiCitwYWdlLnRhZ3M9aW50ZW50cyxzaGFyZQogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL3N5c3RlbS11aS9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9zeXN0ZW0tdWkvaW5kZXguamQKaW5kZXggYzQ1MzI3Zi4uNTZmYTU0YiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL3N5c3RlbS11aS9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvc3lzdGVtLXVpL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1NYW5hZ2luZyB0aGUgU3lzdGVtIFVJCi1wYWdlLnRhZ3M9IiIKK3BhZ2UudGFncz0KIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKQEAgLTEyMCw0ICsxMjAsNCBAQAogICAgICAgICBzbyB0aGF0IHlvdSBjYW4gYWRqdXN0IHlvdXIgYXBwJ3MgVUkgYWNjb3JkaW5nbHkuCiAgICAgPC9kZD4KIAotPC9kbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L2RsPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL3R2L2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL3R2L2luZGV4LmpkCmluZGV4IDU0ZjcwMTYuLmE5OWUzNzggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy90di9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvdHYvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPURlc2lnbmluZyBmb3IgVFYKLXBhZ2UudGFncz0iaW5wdXQiLCJzY3JlZW5zIgorcGFnZS50YWdzPWlucHV0LHNjcmVlbnMKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RybS9qYXZhL2FuZHJvaWQvZHJtL0RybVV0aWxzLmphdmEgYi9kcm0vamF2YS9hbmRyb2lkL2RybS9Ecm1VdGlscy5qYXZhCmluZGV4IDRmN2NiMjIuLjJhODY5OTYgMTAwNjQ0Ci0tLSBhL2RybS9qYXZhL2FuZHJvaWQvZHJtL0RybVV0aWxzLmphdmEKKysrIGIvZHJtL2phdmEvYW5kcm9pZC9kcm0vRHJtVXRpbHMuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAuamF2YQppbmRleCAzYzI0NjgzLi41MzZjNGI2IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcC5qYXZhCkBAIC02Nyw2ICs2NywxNiBAQAogICAgICAqIHNldFByZW11bHRpcGxpZWQoKSBhcmVuJ3Qgb3JkZXIgZGVwZW5kZW50LCBkZXNwaXRlIGJlaW5nIHNldHRlcnMuCiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc1ByZW11bHRpcGxpZWQ7CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIHRoZSBCaXRtYXAncyBjb250ZW50IGlzIGV4cGVjdGVkIHRvIGhhdmUgYWxwaGEuIE5vdGUgdGhhdCBoYXNBbHBoYSgpCisgICAgICogZG9lcyBub3QgZGlyZWN0bHkgcmV0dXJuIHRoaXMgdmFsdWUsIGJlY2F1c2UgaGFzQWxwaGEoKSBtYXkgbmV2ZXIgcmV0dXJuIHRydWUKKyAgICAgKiBmb3IgYSA1NjUgQml0bWFwLgorICAgICAqCisgICAgICogQW55IHRpbWUgdGhpcyBvciBtSXNQcmVtdWx0aXBsaWVkIGlzIGNoYW5nZWQsIGJvdGggYXJlIHBhc3NlZCB0byBuYXRpdmUgc28gdGhleQorICAgICAqIGFyZSBub3Qgb3JkZXIgZGVwZW5kZW50LgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzQWxwaGE7CiAgICAgcHJpdmF0ZSBieXRlW10gbU5pbmVQYXRjaENodW5rOyAgIC8vIG1heSBiZSBudWxsCiAgICAgcHJpdmF0ZSBpbnRbXSBtTGF5b3V0Qm91bmRzOyAgIC8vIG1heSBiZSBudWxsCiAgICAgcHJpdmF0ZSBpbnQgbVdpZHRoOwpAQCAtNTU0LDcgKzU2NCw3IEBACiAgICAgICAgIGNoZWNrUmVjeWNsZWQoIkNhbid0IGNvcHkgYSByZWN5Y2xlZCBiaXRtYXAiKTsKICAgICAgICAgQml0bWFwIGIgPSBuYXRpdmVDb3B5KG1OYXRpdmVCaXRtYXAsIGNvbmZpZy5uYXRpdmVJbnQsIGlzTXV0YWJsZSk7CiAgICAgICAgIGlmIChiICE9IG51bGwpIHsKLSAgICAgICAgICAgIGIubUlzUHJlbXVsdGlwbGllZCA9IG1Jc1ByZW11bHRpcGxpZWQ7CisgICAgICAgICAgICBiLnNldEFscGhhQW5kUHJlbXVsdGlwbGllZChtSGFzQWxwaGEsIG1Jc1ByZW11bHRpcGxpZWQpOwogICAgICAgICAgICAgYi5tRGVuc2l0eSA9IG1EZW5zaXR5OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBiOwpAQCAtNzI3LDEyICs3MzcsMTIgQEAKICAgICAgICAgICAgICAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gVGhlIG5ldyBiaXRtYXAgd2FzIGNyZWF0ZWQgZnJvbSBhIGtub3duIGJpdG1hcCBzb3VyY2Ugc28gYXNzdW1lIHRoYXQKICAgICAgICAgLy8gdGhleSB1c2UgdGhlIHNhbWUgZGVuc2l0eQogICAgICAgICBiaXRtYXAubURlbnNpdHkgPSBzb3VyY2UubURlbnNpdHk7Ci0gICAgICAgIGJpdG1hcC5tSXNQcmVtdWx0aXBsaWVkID0gc291cmNlLm1Jc1ByZW11bHRpcGxpZWQ7Ci0gICAgICAgIAorICAgICAgICBiaXRtYXAuc2V0QWxwaGFBbmRQcmVtdWx0aXBsaWVkKHNvdXJjZS5tSGFzQWxwaGEsIHNvdXJjZS5tSXNQcmVtdWx0aXBsaWVkKTsKKwogICAgICAgICBjYW52YXMuc2V0Qml0bWFwKGJpdG1hcCk7CiAgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKHNvdXJjZSwgc3JjUiwgZHN0UiwgcGFpbnQpOwogICAgICAgICBjYW52YXMuc2V0Qml0bWFwKG51bGwpOwpAQCAtODEwLDkgKzgyMCw5IEBACiAgICAgICAgIGlmIChkaXNwbGF5ICE9IG51bGwpIHsKICAgICAgICAgICAgIGJtLm1EZW5zaXR5ID0gZGlzcGxheS5kZW5zaXR5RHBpOwogICAgICAgICB9CisgICAgICAgIGJtLnNldEhhc0FscGhhKGhhc0FscGhhKTsKICAgICAgICAgaWYgKGNvbmZpZyA9PSBDb25maWcuQVJHQl84ODg4ICYmICFoYXNBbHBoYSkgewogICAgICAgICAgICAgbmF0aXZlRXJhc2UoYm0ubU5hdGl2ZUJpdG1hcCwgMHhmZjAwMDAwMCk7Ci0gICAgICAgICAgICBuYXRpdmVTZXRIYXNBbHBoYShibS5tTmF0aXZlQml0bWFwLCBoYXNBbHBoYSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gTm8gbmVlZCB0byBpbml0aWFsaXplIHRoZSBiaXRtYXAgdG8gemVyb2VzIHdpdGggb3RoZXIgY29uZmlnczsKICAgICAgICAgLy8gaXQgaXMgYmFja2VkIGJ5IGEgVk0gYnl0ZSBhcnJheSB3aGljaCBpcyBieSBkZWZpbml0aW9uIHByZWluaXRpYWxpemVkCkBAIC04ODQsNiArODk0LDcgQEAKICAgICAgICAgaWYgKGRpc3BsYXkgIT0gbnVsbCkgewogICAgICAgICAgICAgYm0ubURlbnNpdHkgPSBkaXNwbGF5LmRlbnNpdHlEcGk7CiAgICAgICAgIH0KKyAgICAgICAgYm0ubUhhc0FscGhhID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGJtOwogICAgIH0KIApAQCAtMTA0MSwxMSArMTA1MiwyNCBAQAogICAgICAqIDxwPlRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgYSBiaXRtYXAgd2l0aG91dCBhbiBhbHBoYQogICAgICAqIGNoYW5uZWwsIG9yIGlmIHtAbGluayAjaGFzQWxwaGEoKX0gcmV0dXJucyBmYWxzZS48L3A+CiAgICAgICoKKyAgICAgKiA8cD5DYWxsaW5nIGNyZWF0ZUJpdG1hcCgpIG9yIGNyZWF0ZVNjYWxlZEJpdG1hcCgpIHdpdGggYSBzb3VyY2UKKyAgICAgKiBCaXRtYXAgd2hvc2UgY29sb3JzIGFyZSBub3QgcHJlLW11bHRpcGxpZWQgbWF5IHJlc3VsdCBpbiBhIFJ1bnRpbWVFeGNlcHRpb24sCisgICAgICogc2luY2UgdGhvc2UgZnVuY3Rpb25zIHJlcXVpcmUgZHJhd2luZyB0aGUgc291cmNlLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvcgorICAgICAqIHVuLXByZS1tdWx0aXBsaWVkIEJpdG1hcHMuPC9wPgorICAgICAqCiAgICAgICogQHNlZSBCaXRtYXAjaXNQcmVtdWx0aXBsaWVkKCkKICAgICAgKiBAc2VlIEJpdG1hcEZhY3RvcnkuT3B0aW9ucyNpblByZW11bHRpcGxpZWQKICAgICAgKi8KICAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRQcmVtdWx0aXBsaWVkKGJvb2xlYW4gcHJlbXVsdGlwbGllZCkgewogICAgICAgICBtSXNQcmVtdWx0aXBsaWVkID0gcHJlbXVsdGlwbGllZDsKKyAgICAgICAgbmF0aXZlU2V0QWxwaGFBbmRQcmVtdWx0aXBsaWVkKG1OYXRpdmVCaXRtYXAsIG1IYXNBbHBoYSwgcHJlbXVsdGlwbGllZCk7CisgICAgfQorCisgICAgLyoqIEhlbHBlciBmdW5jdGlvbiB0byBzZXQgYm90aCBhbHBoYSBhbmQgcHJlbXVsdGlwbGllZC4gKiovCisgICAgcHJpdmF0ZSBmaW5hbCB2b2lkIHNldEFscGhhQW5kUHJlbXVsdGlwbGllZChib29sZWFuIGhhc0FscGhhLCBib29sZWFuIHByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgbUhhc0FscGhhID0gaGFzQWxwaGE7CisgICAgICAgIG1Jc1ByZW11bHRpcGxpZWQgPSBwcmVtdWx0aXBsaWVkOworICAgICAgICBuYXRpdmVTZXRBbHBoYUFuZFByZW11bHRpcGxpZWQobU5hdGl2ZUJpdG1hcCwgaGFzQWxwaGEsIHByZW11bHRpcGxpZWQpOwogICAgIH0KIAogICAgIC8qKiBSZXR1cm5zIHRoZSBiaXRtYXAncyB3aWR0aCAqLwpAQCAtMTIwNiw3ICsxMjMwLDggQEAKICAgICAgKiBub24tb3BhcXVlIHBlci1waXhlbCBhbHBoYSB2YWx1ZXMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0SGFzQWxwaGEoYm9vbGVhbiBoYXNBbHBoYSkgewotICAgICAgICBuYXRpdmVTZXRIYXNBbHBoYShtTmF0aXZlQml0bWFwLCBoYXNBbHBoYSk7CisgICAgICAgIG1IYXNBbHBoYSA9IGhhc0FscGhhOworICAgICAgICBuYXRpdmVTZXRBbHBoYUFuZFByZW11bHRpcGxpZWQobU5hdGl2ZUJpdG1hcCwgaGFzQWxwaGEsIG1Jc1ByZW11bHRpcGxpZWQpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTYxMSw3ICsxNjM2LDggQEAKIAogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVByZXBhcmVUb0RyYXcoaW50IG5hdGl2ZUJpdG1hcCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlSGFzQWxwaGEoaW50IG5hdGl2ZUJpdG1hcCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlU2V0SGFzQWxwaGEoaW50IG5CaXRtYXAsIGJvb2xlYW4gaGFzQWxwaGEpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVNldEFscGhhQW5kUHJlbXVsdGlwbGllZChpbnQgbkJpdG1hcCwgYm9vbGVhbiBoYXNBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc1ByZW11bCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlSGFzTWlwTWFwKGludCBuYXRpdmVCaXRtYXApOwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVNldEhhc01pcE1hcChpbnQgbkJpdG1hcCwgYm9vbGVhbiBoYXNNaXBNYXApOwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVNhbWVBcyhpbnQgbmIwLCBpbnQgbmIxKTsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5qYXZhCmluZGV4IDQyOWJlNDkuLjJiNjlhMTUgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkuamF2YQpAQCAtMTUzLDggKzE1MywxMiBAQAogICAgICAgICAgKgogICAgICAgICAgKiA8cD5UaGlzIGRvZXMgbm90IGFmZmVjdCBiaXRtYXBzIHdpdGhvdXQgYW4gYWxwaGEgY2hhbm5lbC48L3A+CiAgICAgICAgICAqCisgICAgICAgICAqIDxwPlNldHRpbmcgdGhpcyBmbGFnIHRvIGZhbHNlIHdoaWxlIHNldHRpbmcge0BsaW5rICNpblNjYWxlZH0gdG8gdHJ1ZQorICAgICAgICAgKiBtYXkgcmVzdWx0IGluIGluY29ycmVjdCBjb2xvcnMuPC9wPgorICAgICAgICAgKgogICAgICAgICAgKiBAc2VlIEJpdG1hcCNoYXNBbHBoYSgpCiAgICAgICAgICAqIEBzZWUgQml0bWFwI2lzUHJlbXVsdGlwbGllZCgpCisgICAgICAgICAqIEBzZWUgI2luU2NhbGVkCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgYm9vbGVhbiBpblByZW11bHRpcGxpZWQ7CiAKQEAgLTI0OSw2ICsyNTMsOSBAQAogICAgICAgICAgKiA8cD5UaGlzIGZsYWcgaXMgdHVybmVkIG9uIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBiZSB0dXJuZWQgb2ZmIGlmIHlvdSBuZWVkCiAgICAgICAgICAqIGEgbm9uLXNjYWxlZCB2ZXJzaW9uIG9mIHRoZSBiaXRtYXAuICBOaW5lLXBhdGNoIGJpdG1hcHMgaWdub3JlIHRoaXMKICAgICAgICAgICogZmxhZyBhbmQgYXJlIGFsd2F5cyBzY2FsZWQuCisgICAgICAgICAqCisgICAgICAgICAqIDxwPklmIHtAbGluayAjaW5QcmVtdWx0aXBsaWVkfSBpcyBzZXQgdG8gZmFsc2UsIGFuZCB0aGUgaW1hZ2UgaGFzIGFscGhhLAorICAgICAgICAgKiBzZXR0aW5nIHRoaXMgZmxhZyB0byB0cnVlIG1heSByZXN1bHQgaW4gaW5jb3JyZWN0IGNvbG9ycy4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGluU2NhbGVkOwogCkBAIC0zMDAsMTcgKzMwNywyMiBAQAogICAgICAgICBwdWJsaWMgYm9vbGVhbiBpblByZWZlclF1YWxpdHlPdmVyU3BlZWQ7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSByZXN1bHRpbmcgd2lkdGggb2YgdGhlIGJpdG1hcCwgc2V0IGluZGVwZW5kZW50IG9mIHRoZSBzdGF0ZSBvZgotICAgICAgICAgKiBpbkp1c3REZWNvZGVCb3VuZHMuIEhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIGVycm9yIHRyeWluZyB0byBkZWNvZGUsCi0gICAgICAgICAqIG91dFdpZHRoIHdpbGwgYmUgc2V0IHRvIC0xLgorICAgICAgICAgKiBUaGUgcmVzdWx0aW5nIHdpZHRoIG9mIHRoZSBiaXRtYXAuIElmIHtAbGluayAjaW5KdXN0RGVjb2RlQm91bmRzfSBpcworICAgICAgICAgKiBzZXQgdG8gZmFsc2UsIHRoaXMgd2lsbCBiZSB3aWR0aCBvZiB0aGUgb3V0cHV0IGJpdG1hcCBhZnRlciBhbnkKKyAgICAgICAgICogc2NhbGluZyBpcyBhcHBsaWVkLiBJZiB0cnVlLCBpdCB3aWxsIGJlIHRoZSB3aWR0aCBvZiB0aGUgaW5wdXQgaW1hZ2UKKyAgICAgICAgICogd2l0aG91dCBhbnkgYWNjb3VudGluZyBmb3Igc2NhbGluZy4KKyAgICAgICAgICoKKyAgICAgICAgICogPHA+b3V0V2lkdGggd2lsbCBiZSBzZXQgdG8gLTEgaWYgdGhlcmUgaXMgYW4gZXJyb3IgdHJ5aW5nIHRvIGRlY29kZS48L3A+CiAgICAgICAgICAqLwotCiAgICAgICAgIHB1YmxpYyBpbnQgb3V0V2lkdGg7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSByZXN1bHRpbmcgaGVpZ2h0IG9mIHRoZSBiaXRtYXAsIHNldCBpbmRlcGVuZGVudCBvZiB0aGUgc3RhdGUgb2YKLSAgICAgICAgICogaW5KdXN0RGVjb2RlQm91bmRzLiBIb3dldmVyLCBpZiB0aGVyZSBpcyBhbiBlcnJvciB0cnlpbmcgdG8gZGVjb2RlLAotICAgICAgICAgKiBvdXRIZWlnaHQgd2lsbCBiZSBzZXQgdG8gLTEuIAorICAgICAgICAgKiBUaGUgcmVzdWx0aW5nIGhlaWdodCBvZiB0aGUgYml0bWFwLiBJZiB7QGxpbmsgI2luSnVzdERlY29kZUJvdW5kc30gaXMKKyAgICAgICAgICogc2V0IHRvIGZhbHNlLCB0aGlzIHdpbGwgYmUgaGVpZ2h0IG9mIHRoZSBvdXRwdXQgYml0bWFwIGFmdGVyIGFueQorICAgICAgICAgKiBzY2FsaW5nIGlzIGFwcGxpZWQuIElmIHRydWUsIGl0IHdpbGwgYmUgdGhlIGhlaWdodCBvZiB0aGUgaW5wdXQgaW1hZ2UKKyAgICAgICAgICogd2l0aG91dCBhbnkgYWNjb3VudGluZyBmb3Igc2NhbGluZy4KKyAgICAgICAgICoKKyAgICAgICAgICogPHA+b3V0SGVpZ2h0IHdpbGwgYmUgc2V0IHRvIC0xIGlmIHRoZXJlIGlzIGFuIGVycm9yIHRyeWluZyB0byBkZWNvZGUuPC9wPgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIGludCBvdXRIZWlnaHQ7CiAKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuamF2YQppbmRleCBkNDYyMzhmLi4xM2Y0Mjk5IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhcy5qYXZhCkBAIC0xNDAzLDcgKzE0MDMsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgICAgICBuYXRpdmVfZHJhd1RleHQobU5hdGl2ZUNhbnZhcywgdGV4dCwgaW5kZXgsIGNvdW50LCB4LCB5LCBwYWludC5tQmlkaUZsYWdzLAotICAgICAgICAgICAgICAgIHBhaW50Lm1OYXRpdmVQYWludCk7CisgICAgICAgICAgICAgICAgcGFpbnQubU5hdGl2ZVBhaW50LCBwYWludC5tTmF0aXZlVHlwZWZhY2UpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTQxNyw3ICsxNDE3LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkcmF3VGV4dChTdHJpbmcgdGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgUGFpbnQgcGFpbnQpIHsKICAgICAgICAgbmF0aXZlX2RyYXdUZXh0KG1OYXRpdmVDYW52YXMsIHRleHQsIDAsIHRleHQubGVuZ3RoKCksIHgsIHksIHBhaW50Lm1CaWRpRmxhZ3MsCi0gICAgICAgICAgICAgICAgcGFpbnQubU5hdGl2ZVBhaW50KTsKKyAgICAgICAgICAgICAgICBwYWludC5tTmF0aXZlUGFpbnQsIHBhaW50Lm1OYXRpdmVUeXBlZmFjZSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNDM2LDcgKzE0MzYsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgICAgICBuYXRpdmVfZHJhd1RleHQobU5hdGl2ZUNhbnZhcywgdGV4dCwgc3RhcnQsIGVuZCwgeCwgeSwgcGFpbnQubUJpZGlGbGFncywKLSAgICAgICAgICAgICAgICBwYWludC5tTmF0aXZlUGFpbnQpOworICAgICAgICAgICAgICAgIHBhaW50Lm1OYXRpdmVQYWludCwgcGFpbnQubU5hdGl2ZVR5cGVmYWNlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE0NTYsNyArMTQ1Niw3IEBACiAgICAgICAgIGlmICh0ZXh0IGluc3RhbmNlb2YgU3RyaW5nIHx8IHRleHQgaW5zdGFuY2VvZiBTcGFubmVkU3RyaW5nIHx8CiAgICAgICAgICAgICB0ZXh0IGluc3RhbmNlb2YgU3Bhbm5hYmxlU3RyaW5nKSB7CiAgICAgICAgICAgICBuYXRpdmVfZHJhd1RleHQobU5hdGl2ZUNhbnZhcywgdGV4dC50b1N0cmluZygpLCBzdGFydCwgZW5kLCB4LCB5LAotICAgICAgICAgICAgICAgICAgICBwYWludC5tQmlkaUZsYWdzLCBwYWludC5tTmF0aXZlUGFpbnQpOworICAgICAgICAgICAgICAgICAgICBwYWludC5tQmlkaUZsYWdzLCBwYWludC5tTmF0aXZlUGFpbnQsIHBhaW50Lm1OYXRpdmVUeXBlZmFjZSk7CiAgICAgICAgIH0gZWxzZSBpZiAodGV4dCBpbnN0YW5jZW9mIEdyYXBoaWNzT3BlcmF0aW9ucykgewogICAgICAgICAgICAgKChHcmFwaGljc09wZXJhdGlvbnMpIHRleHQpLmRyYXdUZXh0KHRoaXMsIHN0YXJ0LCBlbmQsIHgsIHksCiAgICAgICAgICAgICAgICAgICAgIHBhaW50KTsKQEAgLTE0NjQsNyArMTQ2NCw3IEBACiAgICAgICAgICAgICBjaGFyW10gYnVmID0gVGVtcG9yYXJ5QnVmZmVyLm9idGFpbihlbmQgLSBzdGFydCk7CiAgICAgICAgICAgICBUZXh0VXRpbHMuZ2V0Q2hhcnModGV4dCwgc3RhcnQsIGVuZCwgYnVmLCAwKTsKICAgICAgICAgICAgIG5hdGl2ZV9kcmF3VGV4dChtTmF0aXZlQ2FudmFzLCBidWYsIDAsIGVuZCAtIHN0YXJ0LCB4LCB5LAotICAgICAgICAgICAgICAgICAgICBwYWludC5tQmlkaUZsYWdzLCBwYWludC5tTmF0aXZlUGFpbnQpOworICAgICAgICAgICAgICAgICAgICBwYWludC5tQmlkaUZsYWdzLCBwYWludC5tTmF0aXZlUGFpbnQsIHBhaW50Lm1OYXRpdmVUeXBlZmFjZSk7CiAgICAgICAgICAgICBUZW1wb3JhcnlCdWZmZXIucmVjeWNsZShidWYpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTUwNyw3ICsxNTA3LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIG5hdGl2ZV9kcmF3VGV4dFJ1bihtTmF0aXZlQ2FudmFzLCB0ZXh0LCBpbmRleCwgY291bnQsCi0gICAgICAgICAgICAgICAgY29udGV4dEluZGV4LCBjb250ZXh0Q291bnQsIHgsIHksIGRpciwgcGFpbnQubU5hdGl2ZVBhaW50KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0SW5kZXgsIGNvbnRleHRDb3VudCwgeCwgeSwgZGlyLCBwYWludC5tTmF0aXZlUGFpbnQsIHBhaW50Lm1OYXRpdmVUeXBlZmFjZSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNTQ1LDcgKzE1NDUsNyBAQAogICAgICAgICBpZiAodGV4dCBpbnN0YW5jZW9mIFN0cmluZyB8fCB0ZXh0IGluc3RhbmNlb2YgU3Bhbm5lZFN0cmluZyB8fAogICAgICAgICAgICAgICAgIHRleHQgaW5zdGFuY2VvZiBTcGFubmFibGVTdHJpbmcpIHsKICAgICAgICAgICAgIG5hdGl2ZV9kcmF3VGV4dFJ1bihtTmF0aXZlQ2FudmFzLCB0ZXh0LnRvU3RyaW5nKCksIHN0YXJ0LCBlbmQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRTdGFydCwgY29udGV4dEVuZCwgeCwgeSwgZmxhZ3MsIHBhaW50Lm1OYXRpdmVQYWludCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRTdGFydCwgY29udGV4dEVuZCwgeCwgeSwgZmxhZ3MsIHBhaW50Lm1OYXRpdmVQYWludCwgcGFpbnQubU5hdGl2ZVR5cGVmYWNlKTsKICAgICAgICAgfSBlbHNlIGlmICh0ZXh0IGluc3RhbmNlb2YgR3JhcGhpY3NPcGVyYXRpb25zKSB7CiAgICAgICAgICAgICAoKEdyYXBoaWNzT3BlcmF0aW9ucykgdGV4dCkuZHJhd1RleHRSdW4odGhpcywgc3RhcnQsIGVuZCwKICAgICAgICAgICAgICAgICAgICAgY29udGV4dFN0YXJ0LCBjb250ZXh0RW5kLCB4LCB5LCBmbGFncywgcGFpbnQpOwpAQCAtMTU1NSw3ICsxNTU1LDcgQEAKICAgICAgICAgICAgIGNoYXJbXSBidWYgPSBUZW1wb3JhcnlCdWZmZXIub2J0YWluKGNvbnRleHRMZW4pOwogICAgICAgICAgICAgVGV4dFV0aWxzLmdldENoYXJzKHRleHQsIGNvbnRleHRTdGFydCwgY29udGV4dEVuZCwgYnVmLCAwKTsKICAgICAgICAgICAgIG5hdGl2ZV9kcmF3VGV4dFJ1bihtTmF0aXZlQ2FudmFzLCBidWYsIHN0YXJ0IC0gY29udGV4dFN0YXJ0LCBsZW4sCi0gICAgICAgICAgICAgICAgICAgIDAsIGNvbnRleHRMZW4sIHgsIHksIGZsYWdzLCBwYWludC5tTmF0aXZlUGFpbnQpOworICAgICAgICAgICAgICAgICAgICAwLCBjb250ZXh0TGVuLCB4LCB5LCBmbGFncywgcGFpbnQubU5hdGl2ZVBhaW50LCBwYWludC5tTmF0aXZlVHlwZWZhY2UpOwogICAgICAgICAgICAgVGVtcG9yYXJ5QnVmZmVyLnJlY3ljbGUoYnVmKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE4MTQsMTggKzE4MTQsMTggQEAKICAgICAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVfZHJhd1RleHQoaW50IG5hdGl2ZUNhbnZhcywgY2hhcltdIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwgaW50IGNvdW50LCBmbG9hdCB4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5LCBpbnQgZmxhZ3MsIGludCBwYWludCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHksIGludCBmbGFncywgaW50IHBhaW50LCBpbnQgdHlwZWZhY2UpOwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZV9kcmF3VGV4dChpbnQgbmF0aXZlQ2FudmFzLCBTdHJpbmcgdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBpbnQgZW5kLCBmbG9hdCB4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5LCBpbnQgZmxhZ3MsIGludCBwYWludCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHksIGludCBmbGFncywgaW50IHBhaW50LCBpbnQgdHlwZWZhY2UpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlX2RyYXdUZXh0UnVuKGludCBuYXRpdmVDYW52YXMsIFN0cmluZyB0ZXh0LAogICAgICAgICAgICAgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgY29udGV4dFN0YXJ0LCBpbnQgY29udGV4dEVuZCwKLSAgICAgICAgICAgIGZsb2F0IHgsIGZsb2F0IHksIGludCBmbGFncywgaW50IHBhaW50KTsKKyAgICAgICAgICAgIGZsb2F0IHgsIGZsb2F0IHksIGludCBmbGFncywgaW50IHBhaW50LCBpbnQgdHlwZWZhY2UpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlX2RyYXdUZXh0UnVuKGludCBuYXRpdmVDYW52YXMsIGNoYXJbXSB0ZXh0LAogICAgICAgICAgICAgaW50IHN0YXJ0LCBpbnQgY291bnQsIGludCBjb250ZXh0U3RhcnQsIGludCBjb250ZXh0Q291bnQsCi0gICAgICAgICAgICBmbG9hdCB4LCBmbG9hdCB5LCBpbnQgZmxhZ3MsIGludCBwYWludCk7CisgICAgICAgICAgICBmbG9hdCB4LCBmbG9hdCB5LCBpbnQgZmxhZ3MsIGludCBwYWludCwgaW50IHR5cGVmYWNlKTsKIAogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZV9kcmF3UG9zVGV4dChpbnQgbmF0aXZlQ2FudmFzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gdGV4dCwgaW50IGluZGV4LApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yRmlsdGVyLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JGaWx0ZXIuamF2YQppbmRleCBlNWNmODMwLi44ZTBhZjc3IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JGaWx0ZXIuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JGaWx0ZXIuamF2YQpAQCAtMjEsMjIgKzIxLDMwIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKIAotCisvKioKKyAqIEEgY29sb3IgZmlsdGVyIGNhbiBiZSB1c2VkIHdpdGggYSB7QGxpbmsgUGFpbnR9IHRvIG1vZGlmeSB0aGUgY29sb3Igb2YKKyAqIGVhY2ggcGl4ZWwgZHJhd24gd2l0aCB0aGF0IHBhaW50LiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQgc2hvdWxkCisgKiBuZXZlciBiZSB1c2VkIGRpcmVjdGx5LgorICovCiBwdWJsaWMgY2xhc3MgQ29sb3JGaWx0ZXIgeworICAgIC8vIEhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBuYXRpdmUgU2tDb2xvckZpbHRlciBpbnN0YW5jZQogICAgIGludCBuYXRpdmVfaW5zdGFuY2U7CiAKICAgICAvKioKKyAgICAgKiBIb2xkcyB0aGUgcG9pbnRlciB0byB0aGUgbmF0aXZlIFNraWFDb2xvckZpbHRlciBpbnN0YW5jZSwgZnJvbSBsaWJod3VpLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgaW50IG5hdGl2ZUNvbG9yRmlsdGVyOwogCisgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBmaW5hbGl6ZXIobmF0aXZlX2luc3RhbmNlLCBuYXRpdmVDb2xvckZpbHRlcik7CisgICAgICAgICAgICBkZXN0cm95RmlsdGVyKG5hdGl2ZV9pbnN0YW5jZSwgbmF0aXZlQ29sb3JGaWx0ZXIpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZmluYWxpemVyKGludCBuYXRpdmVfaW5zdGFuY2UsIGludCBuYXRpdmVDb2xvckZpbHRlcik7CisgICAgc3RhdGljIG5hdGl2ZSB2b2lkIGRlc3Ryb3lGaWx0ZXIoaW50IG5hdGl2ZV9pbnN0YW5jZSwgaW50IG5hdGl2ZUNvbG9yRmlsdGVyKTsKIH0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Db2xvck1hdHJpeC5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4LmphdmEKaW5kZXggZTM1OTZjOC4uMTI0MmViNSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4LmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4LmphdmEKQEAgLTE4LDIzICsxOCwyOSBAQAogCiBpbXBvcnQgYW5kcm9pZC51dGlsLkZsb2F0TWF0aDsKIAoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKIC8qKgogICogIDR4NSBtYXRyaXggZm9yIHRyYW5zZm9ybWluZyB0aGUgY29sb3IrYWxwaGEgY29tcG9uZW50cyBvZiBhIEJpdG1hcC4KICAqICBUaGUgbWF0cml4IGlzIHN0b3JlZCBpbiBhIHNpbmdsZSBhcnJheSwgYW5kIGl0cyB0cmVhdGVkIGFzIGZvbGxvd3M6CisgKiA8cHJlPgogICogIFsgYSwgYiwgYywgZCwgZSwKICAqICAgIGYsIGcsIGgsIGksIGosCiAgKiAgICBrLCBsLCBtLCBuLCBvLAogICogICAgcCwgcSwgciwgcywgdCBdCisgKiA8L3ByZT4KICAqCi0gKiBXaGVuIGFwcGxpZWQgdG8gYSBjb2xvciBbciwgZywgYiwgYV0sIHRoZSByZXN1bHRpbmcgY29sb3IgaXMgY29tcHV0ZWQgYXMKLSAqIChhZnRlciBjbGFtcGluZykKKyAqIFdoZW4gYXBwbGllZCB0byBhIGNvbG9yIDxjb2RlPltyLCBnLCBiLCBhXTwvY29kZT4sIHRoZSByZXN1bHRpbmcgY29sb3IKKyAqIGlzIGNvbXB1dGVkIGFzIChhZnRlciBjbGFtcGluZyk6CisgKiA8cHJlPgogICogICBSJyA9IGEqUiArIGIqRyArIGMqQiArIGQqQSArIGU7CiAgKiAgIEcnID0gZipSICsgZypHICsgaCpCICsgaSpBICsgajsKICAqICAgQicgPSBrKlIgKyBsKkcgKyBtKkIgKyBuKkEgKyBvOwogICogICBBJyA9IHAqUiArIHEqRyArIHIqQiArIHMqQSArIHQ7CisgKiA8L3ByZT4KICAqLworQFN1cHByZXNzV2FybmluZ3MoeyAiTWlzbWF0Y2hlZFJlYWRBbmRXcml0ZU9mQXJyYXkiLCAiUG9pbnRsZXNzQXJpdGhtZXRpY0V4cHJlc3Npb24iIH0pCiBwdWJsaWMgY2xhc3MgQ29sb3JNYXRyaXggewotCiAgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdFtdIG1BcnJheSA9IG5ldyBmbG9hdFsyMF07CiAKICAgICAvKioKQEAgLTY2LDE3ICs3MiwxNiBAQAogICAgIAogICAgIC8qKgogICAgICAqIFNldCB0aGlzIGNvbG9ybWF0cml4IHRvIGlkZW50aXR5OgorICAgICAqIDxwcmU+CiAgICAgICogWyAxIDAgMCAwIDAgICAtIHJlZCB2ZWN0b3IKICAgICAgKiAgIDAgMSAwIDAgMCAgIC0gZ3JlZW4gdmVjdG9yCiAgICAgICogICAwIDAgMSAwIDAgICAtIGJsdWUgdmVjdG9yCiAgICAgICogICAwIDAgMCAxIDAgXSAtIGFscGhhIHZlY3RvcgorICAgICAqIDwvcHJlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgewogICAgICAgICBmaW5hbCBmbG9hdFtdIGEgPSBtQXJyYXk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMTk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgICAgIGFbaV0gPSAwOwotICAgICAgICB9CisgICAgICAgIEFycmF5cy5maWxsKGEsIDApOwogICAgICAgICBhWzBdID0gYVs2XSA9IGFbMTJdID0gYVsxOF0gPSAxOwogICAgIH0KICAgICAKQEAgLTExMiw5ICsxMTcsOSBAQAogICAgIAogICAgIC8qKgogICAgICAqIFNldCB0aGUgcm90YXRpb24gb24gYSBjb2xvciBheGlzIGJ5IHRoZSBzcGVjaWZpZWQgdmFsdWVzLgotICAgICAqIGF4aXM9MCBjb3JyZXNwb25kIHRvIGEgcm90YXRpb24gYXJvdW5kIHRoZSBSRUQgY29sb3IKLSAgICAgKiBheGlzPTEgY29ycmVzcG9uZCB0byBhIHJvdGF0aW9uIGFyb3VuZCB0aGUgR1JFRU4gY29sb3IKLSAgICAgKiBheGlzPTIgY29ycmVzcG9uZCB0byBhIHJvdGF0aW9uIGFyb3VuZCB0aGUgQkxVRSBjb2xvcgorICAgICAqIDxjb2RlPmF4aXM9MDwvY29kZT4gY29ycmVzcG9uZCB0byBhIHJvdGF0aW9uIGFyb3VuZCB0aGUgUkVEIGNvbG9yCisgICAgICogPGNvZGU+YXhpcz0xPC9jb2RlPiBjb3JyZXNwb25kIHRvIGEgcm90YXRpb24gYXJvdW5kIHRoZSBHUkVFTiBjb2xvcgorICAgICAqIDxjb2RlPmF4aXM9MjwvY29kZT4gY29ycmVzcG9uZCB0byBhIHJvdGF0aW9uIGFyb3VuZCB0aGUgQkxVRSBjb2xvcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvdGF0ZShpbnQgYXhpcywgZmxvYXQgZGVncmVlcykgewogICAgICAgICByZXNldCgpOwpAQCAtMTQ0LDcgKzE0OSw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoaXMgY29sb3JtYXRyaXggdG8gdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHR3byBzcGVjaWZpZWQKICAgICAgKiBjb2xvcm1hdHJpY2VzLCBzdWNoIHRoYXQgdGhlIHJlc3VsdGluZyBjb2xvcm1hdHJpeCBoYXMgdGhlIHNhbWUgZWZmZWN0CkBAIC0xNTIsMTIgKzE1NywxMCBAQAogICAgICAqIG1hdEIgdG8gYmUgdGhlIHNhbWUgY29sb3JtYXRyaXggYXMgdGhpcy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDb25jYXQoQ29sb3JNYXRyaXggbWF0QSwgQ29sb3JNYXRyaXggbWF0QikgewotICAgICAgICBmbG9hdFtdIHRtcCA9IG51bGw7Ci0gICAgICAgIAorICAgICAgICBmbG9hdFtdIHRtcDsKICAgICAgICAgaWYgKG1hdEEgPT0gdGhpcyB8fCBtYXRCID09IHRoaXMpIHsKICAgICAgICAgICAgIHRtcCA9IG5ldyBmbG9hdFsyMF07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0bXAgPSBtQXJyYXk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xNzgsNyArMTgxLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodG1wLCAwLCBtQXJyYXksIDAsIDIwKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbmNhdCB0aGlzIGNvbG9ybWF0cml4IHdpdGggdGhlIHNwZWNpZmllZCBwcmVtYXRyaXguIFRoaXMgaXMgbG9naWNhbGx5CiAgICAgICogdGhlIHNhbWUgYXMgY2FsbGluZyBzZXRDb25jYXQodGhpcywgcHJlbWF0cml4KTsKQEAgLTE4Niw3ICsxODksNyBAQAogICAgIHB1YmxpYyB2b2lkIHByZUNvbmNhdChDb2xvck1hdHJpeCBwcmVtYXRyaXgpIHsKICAgICAgICAgc2V0Q29uY2F0KHRoaXMsIHByZW1hdHJpeCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uY2F0IHRoaXMgY29sb3JtYXRyaXggd2l0aCB0aGUgc3BlY2lmaWVkIHBvc3RtYXRyaXguIFRoaXMgaXMgbG9naWNhbGx5CiAgICAgICogdGhlIHNhbWUgYXMgY2FsbGluZyBzZXRDb25jYXQocG9zdG1hdHJpeCwgdGhpcyk7CkBAIC0xOTQsNyArMTk3LDcgQEAKICAgICBwdWJsaWMgdm9pZCBwb3N0Q29uY2F0KENvbG9yTWF0cml4IHBvc3RtYXRyaXgpIHsKICAgICAgICAgc2V0Q29uY2F0KHBvc3RtYXRyaXgsIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4Q29sb3JGaWx0ZXIuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Db2xvck1hdHJpeENvbG9yRmlsdGVyLmphdmEKaW5kZXggNGYzMjM0Mi4uOGRlMzJlYyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4Q29sb3JGaWx0ZXIuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JNYXRyaXhDb2xvckZpbHRlci5qYXZhCkBAIC0xNiwyNCArMTYsMzEgQEAKIAogcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwogCisvKioKKyAqIEEgY29sb3IgZmlsdGVyIHRoYXQgdHJhbnNmb3JtcyBjb2xvcnMgdGhyb3VnaCBhIDR4NSBjb2xvciBtYXRyaXguIFRoaXMgZmlsdGVyCisgKiBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIHNhdHVyYXRpb24gb2YgcGl4ZWxzLCBjb252ZXJ0IGZyb20gWVVWIHRvIFJHQiwgZXRjLgorICoKKyAqIEBzZWUgQ29sb3JNYXRyaXgKKyAqLwogcHVibGljIGNsYXNzIENvbG9yTWF0cml4Q29sb3JGaWx0ZXIgZXh0ZW5kcyBDb2xvckZpbHRlciB7CisgICAgcHJpdmF0ZSBmaW5hbCBDb2xvck1hdHJpeCBtTWF0cml4ID0gbmV3IENvbG9yTWF0cml4KCk7CisKICAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBjb2xvcmZpbHRlciB0aGF0IHRyYW5zZm9ybXMgY29sb3JzIHRocm91Z2ggYSA0eDUgY29sb3IgbWF0cml4LgorICAgICAqIENyZWF0ZSBhIGNvbG9yIGZpbHRlciB0aGF0IHRyYW5zZm9ybXMgY29sb3JzIHRocm91Z2ggYSA0eDUgY29sb3IgbWF0cml4LgogICAgICAqCiAgICAgICogQHBhcmFtIG1hdHJpeCA0eDUgbWF0cml4IHVzZWQgdG8gdHJhbnNmb3JtIGNvbG9ycy4gSXQgaXMgY29waWVkIGludG8KICAgICAgKiAgICAgICAgICAgICAgIHRoZSBmaWx0ZXIsIHNvIGNoYW5nZXMgbWFkZSB0byB0aGUgbWF0cml4IGFmdGVyIHRoZSBmaWx0ZXIKICAgICAgKiAgICAgICAgICAgICAgIGlzIGNvbnN0cnVjdGVkIHdpbGwgbm90IGJlIHJlZmxlY3RlZCBpbiB0aGUgZmlsdGVyLgogICAgICAqLwogICAgIHB1YmxpYyBDb2xvck1hdHJpeENvbG9yRmlsdGVyKENvbG9yTWF0cml4IG1hdHJpeCkgewotICAgICAgICBmaW5hbCBmbG9hdFtdIGNvbG9yTWF0cml4ID0gbWF0cml4LmdldEFycmF5KCk7Ci0gICAgICAgIG5hdGl2ZV9pbnN0YW5jZSA9IG5hdGl2ZUNvbG9yTWF0cml4RmlsdGVyKGNvbG9yTWF0cml4KTsKLSAgICAgICAgbmF0aXZlQ29sb3JGaWx0ZXIgPSBuQ29sb3JNYXRyaXhGaWx0ZXIobmF0aXZlX2luc3RhbmNlLCBjb2xvck1hdHJpeCk7CisgICAgICAgIG1NYXRyaXguc2V0KG1hdHJpeCk7CisgICAgICAgIHVwZGF0ZSgpOwogICAgIH0KIAogICAgIC8qKgotICAgICogQ3JlYXRlIGEgY29sb3JmaWx0ZXIgdGhhdCB0cmFuc2Zvcm1zIGNvbG9ycyB0aHJvdWdoIGEgNHg1IGNvbG9yIG1hdHJpeC4KKyAgICAgKiBDcmVhdGUgYSBjb2xvciBmaWx0ZXIgdGhhdCB0cmFuc2Zvcm1zIGNvbG9ycyB0aHJvdWdoIGEgNHg1IGNvbG9yIG1hdHJpeC4KICAgICAgKgotICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSBvZiBmbG9hdHMgdXNlZCB0byB0cmFuc2Zvcm0gY29sb3JzLCB0cmVhdGVkIGFzIGEgNHg1CisgICAgICogQHBhcmFtIGFycmF5IEFycmF5IG9mIGZsb2F0cyB1c2VkIHRvIHRyYW5zZm9ybSBjb2xvcnMsIHRyZWF0ZWQgYXMgYSA0eDUKICAgICAgKiAgICAgICAgICAgICAgbWF0cml4LiBUaGUgZmlyc3QgMjAgZW50cmllcyBvZiB0aGUgYXJyYXkgYXJlIGNvcGllZCBpbnRvCiAgICAgICogICAgICAgICAgICAgIHRoZSBmaWx0ZXIuIFNlZSBDb2xvck1hdHJpeC4KICAgICAgKi8KQEAgLTQxLDggKzQ4LDc1IEBACiAgICAgICAgIGlmIChhcnJheS5sZW5ndGggPCAyMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOwogICAgICAgICB9Ci0gICAgICAgIG5hdGl2ZV9pbnN0YW5jZSA9IG5hdGl2ZUNvbG9yTWF0cml4RmlsdGVyKGFycmF5KTsKLSAgICAgICAgbmF0aXZlQ29sb3JGaWx0ZXIgPSBuQ29sb3JNYXRyaXhGaWx0ZXIobmF0aXZlX2luc3RhbmNlLCBhcnJheSk7CisgICAgICAgIG1NYXRyaXguc2V0KGFycmF5KTsKKyAgICAgICAgdXBkYXRlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUge0BsaW5rIENvbG9yTWF0cml4fSB1c2VkIGJ5IHRoaXMgZmlsdGVyLiBUaGUgcmV0dXJuZWQKKyAgICAgKiB2YWx1ZSBpcyBuZXZlciBudWxsLiBNb2RpZnlpbmcgdGhlIHJldHVybmVkIG1hdHJpeCBkb2VzIG5vdCBoYXZlCisgICAgICogYW55IGVmZmVjdCB1bnRpbCB5b3UgY2FsbCB7QGxpbmsgI3NldENvbG9yTWF0cml4KENvbG9yTWF0cml4KX0uCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRDb2xvck1hdHJpeChDb2xvck1hdHJpeCkKKyAgICAgKi8KKyAgICBwdWJsaWMgQ29sb3JNYXRyaXggZ2V0Q29sb3JNYXRyaXgoKSB7CisgICAgICAgIHJldHVybiBtTWF0cml4OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGUgY29sb3IgbWF0cml4IHVzZWQgYnkgdGhpcyBmaWx0ZXIuIElmIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBjb2xvciBtYXRyaXggaXMgbnVsbCwgdGhpcyBmaWx0ZXIncyBjb2xvciBtYXRyaXggd2lsbCBiZSByZXNldCB0bworICAgICAqIHRoZSBpZGVudGl0eSBtYXRyaXguCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWF0cml4IEEge0BsaW5rIENvbG9yTWF0cml4fSBvciBudWxsCisgICAgICoKKyAgICAgKiBAc2VlICNnZXRDb2xvck1hdHJpeCgpCisgICAgICogQHNlZSBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yTWF0cml4I3Jlc2V0KCkKKyAgICAgKiBAc2VlICNzZXRDb2xvck1hdHJpeChmbG9hdFtdKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvbG9yTWF0cml4KENvbG9yTWF0cml4IG1hdHJpeCkgeworICAgICAgICBpZiAobWF0cml4ID09IG51bGwpIHsKKyAgICAgICAgICAgIG1NYXRyaXgucmVzZXQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRyaXggIT0gbU1hdHJpeCkgeworICAgICAgICAgICAgbU1hdHJpeC5zZXQobWF0cml4KTsKKyAgICAgICAgfQorICAgICAgICB1cGRhdGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhlIGNvbG9yIG1hdHJpeCB1c2VkIGJ5IHRoaXMgZmlsdGVyLiBJZiB0aGUgc3BlY2lmaWVkCisgICAgICogY29sb3IgbWF0cml4IGlzIG51bGwsIHRoaXMgZmlsdGVyJ3MgY29sb3IgbWF0cml4IHdpbGwgYmUgcmVzZXQgdG8KKyAgICAgKiB0aGUgaWRlbnRpdHkgbWF0cml4LgorICAgICAqCisgICAgICogQHBhcmFtIGFycmF5IEFycmF5IG9mIGZsb2F0cyB1c2VkIHRvIHRyYW5zZm9ybSBjb2xvcnMsIHRyZWF0ZWQgYXMgYSA0eDUKKyAgICAgKiAgICAgICAgICAgICAgbWF0cml4LiBUaGUgZmlyc3QgMjAgZW50cmllcyBvZiB0aGUgYXJyYXkgYXJlIGNvcGllZCBpbnRvCisgICAgICogICAgICAgICAgICAgIHRoZSBmaWx0ZXIuIFNlZSB7QGxpbmsgQ29sb3JNYXRyaXh9LgorICAgICAqCisgICAgICogQHNlZSAjZ2V0Q29sb3JNYXRyaXgoKQorICAgICAqIEBzZWUgYW5kcm9pZC5ncmFwaGljcy5Db2xvck1hdHJpeCNyZXNldCgpCisgICAgICogQHNlZSAjc2V0Q29sb3JNYXRyaXgoQ29sb3JNYXRyaXgpCisgICAgICoKKyAgICAgKiBAdGhyb3dzIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiB0aGUgc3BlY2lmaWVkIGFycmF5J3MKKyAgICAgKiAgICAgICAgIGxlbmd0aCBpcyA8IDIwCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q29sb3JNYXRyaXgoZmxvYXRbXSBhcnJheSkgeworICAgICAgICBpZiAoYXJyYXkgPT0gbnVsbCkgeworICAgICAgICAgICAgbU1hdHJpeC5yZXNldCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA8IDIwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTWF0cml4LnNldChhcnJheSk7CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZSgpIHsKKyAgICAgICAgZmluYWwgZmxvYXRbXSBjb2xvck1hdHJpeCA9IG1NYXRyaXguZ2V0QXJyYXkoKTsKKyAgICAgICAgZGVzdHJveUZpbHRlcihuYXRpdmVfaW5zdGFuY2UsIG5hdGl2ZUNvbG9yRmlsdGVyKTsKKyAgICAgICAgbmF0aXZlX2luc3RhbmNlID0gbmF0aXZlQ29sb3JNYXRyaXhGaWx0ZXIoY29sb3JNYXRyaXgpOworICAgICAgICBuYXRpdmVDb2xvckZpbHRlciA9IG5Db2xvck1hdHJpeEZpbHRlcihuYXRpdmVfaW5zdGFuY2UsIGNvbG9yTWF0cml4KTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgaW50IG5hdGl2ZUNvbG9yTWF0cml4RmlsdGVyKGZsb2F0W10gYXJyYXkpOwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0ltYWdlRm9ybWF0LmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VGb3JtYXQuamF2YQppbmRleCAxYmNmYzE4Li5lMDhlZDUwIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VGb3JtYXQuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VGb3JtYXQuamF2YQpAQCAtMTg3LDYgKzE4NywxMCBAQAogICAgICAqID09IHtAbGluayBhbmRyb2lkLm1lZGlhLkltYWdlLlBsYW5lI2dldFBpeGVsU3RyaWRlKCkgdlBsYW5lLmdldFBpeGVsU3RyaWRlKCl9OwogICAgICAqICkuPC9wPgogICAgICAqCisgICAgICogPHA+Rm9yIGV4YW1wbGUsIHRoZSB7QGxpbmsgYW5kcm9pZC5tZWRpYS5JbWFnZX0gb2JqZWN0IGNhbiBwcm92aWRlIGRhdGEKKyAgICAgKiBpbiB0aGlzIGZvcm1hdCBmcm9tIGEge0BsaW5rIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2V9CisgICAgICogdGhyb3VnaCBhIHtAbGluayBhbmRyb2lkLm1lZGlhLkltYWdlUmVhZGVyfSBvYmplY3QuPC9wPgorICAgICAqCiAgICAgICogQHNlZSBhbmRyb2lkLm1lZGlhLkltYWdlCiAgICAgICogQHNlZSBhbmRyb2lkLm1lZGlhLkltYWdlUmVhZGVyCiAgICAgICogQHNlZSBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlCkBAIC0yMDMsOCArMjA3LDYgQEAKICAgICAgKiBuZWVkZWQgaW5mb3JtYXRpb24gdG8gaW50ZXJwcmV0IGEgcmF3IHNlbnNvciBpbWFnZSBtdXN0IGJlIHF1ZXJpZWQgZnJvbQogICAgICAqIHRoZSB7QGxpbmsgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZX0gd2hpY2ggcHJvZHVjZWQgdGhlCiAgICAgICogaW1hZ2UuPC9wPgotICAgICAqCi0gICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSQVdfU0VOU09SID0gMHgyMDsKIApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0xhcmdlQml0bWFwLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvTGFyZ2VCaXRtYXAuamF2YQppbmRleCA2NjU2YjE3Li5jNzBjNzA5IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvTGFyZ2VCaXRtYXAuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvTGFyZ2VCaXRtYXAuamF2YQpAQCAtMTYsMTYgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwogCi1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLQotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmlvLkJ1ZmZlcjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLkludEJ1ZmZlcjsKLWltcG9ydCBqYXZhLm5pby5TaG9ydEJ1ZmZlcjsKLQogLyoqCiAgKiBMYXJnZUJpdG1hcCBjYW4gYmUgdXNlZCB0byBkZWNvZGUgYSByZWN0YW5nbGUgcmVnaW9uIGZyb20gYW4gaW1hZ2UuCiAgKiBMYXJnZUJpbWFwIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiBhbiBvcmlnaW5hbCBpbWFnZSBpcyBsYXJnZSBhbmQKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9MaWdodGluZ0NvbG9yRmlsdGVyLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvTGlnaHRpbmdDb2xvckZpbHRlci5qYXZhCmluZGV4IGM2MjFkZTYuLjc1ZjE4MjcgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9MaWdodGluZ0NvbG9yRmlsdGVyLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0xpZ2h0aW5nQ29sb3JGaWx0ZXIuamF2YQpAQCAtMjEsMTYgKzIxLDg3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKIAorLyoqCisgKiBBIGNvbG9yIGZpbHRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIHNpbXBsZSBsaWdodGluZyBlZmZlY3RzLgorICogQSA8Y29kZT5MaWdodGluZ0NvbG9yRmlsdGVyPC9jb2RlPiBpcyBkZWZpbmVkIGJ5IHR3byBwYXJhbWV0ZXJzLCBvbmUKKyAqIHVzZWQgdG8gbXVsdGlwbHkgdGhlIHNvdXJjZSBjb2xvciAoY2FsbGVkIDxjb2RlPmNvbG9yTXVsdGlwbHk8L2NvZGU+KQorICogYW5kIG9uZSB1c2VkIHRvIGFkZCB0byB0aGUgc291cmNlIGNvbG9yIChjYWxsZWQgPGNvZGU+Y29sb3JBZGQ8L2NvZGU+KS4KKyAqIFRoZSBhbHBoYSBjaGFubmVsIGlzIGxlZnQgdW50b3VjaGVkIGJ5IHRoaXMgY29sb3IgZmlsdGVyLgorICoKKyAqIEdpdmVuIGEgc291cmNlIGNvbG9yIFJHQiwgdGhlIHJlc3VsdGluZyBSJ0cnQicgY29sb3IgaXMgY29tcHV0ZWQgdGh1c2x5OgorICogPHByZT4KKyAqIFInID0gUiAqIGNvbG9yTXVsdGlwbHkuUiArIGNvbG9yQWRkLlIKKyAqIEcnID0gRyAqIGNvbG9yTXVsdGlwbHkuRyArIGNvbG9yQWRkLkcKKyAqIEInID0gQiAqIGNvbG9yTXVsdGlwbHkuQiArIGNvbG9yQWRkLkIKKyAqIDwvcHJlPgorICogVGhlIHJlc3VsdCBpcyBwaW5uZWQgdG8gdGhlIDxjb2RlPlswLi4yNTVdPC9jb2RlPiByYW5nZSBmb3IgZWFjaCBjaGFubmVsLgorICovCiBwdWJsaWMgY2xhc3MgTGlnaHRpbmdDb2xvckZpbHRlciBleHRlbmRzIENvbG9yRmlsdGVyIHsKKyAgICBwcml2YXRlIGludCBtTXVsOworICAgIHByaXZhdGUgaW50IG1BZGQ7CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBjb2xvcmZpbHRlciB0aGF0IG11bHRpcGxpZXMgdGhlIFJHQiBjaGFubmVscyBieSBvbmUgY29sb3IsIGFuZCB0aGVuIGFkZHMgYSBzZWNvbmQgY29sb3IsCi0gICAgICogcGlubmluZyB0aGUgcmVzdWx0IGZvciBlYWNoIGNvbXBvbmVudCB0byBbMC4uMjU1XS4gVGhlIGFscGhhIGNvbXBvbmVudHMgb2YgdGhlIG11bCBhbmQgYWRkIGFyZ3VtZW50cwotICAgICAqIGFyZSBpZ25vcmVkLgorICAgICAqIENyZWF0ZSBhIGNvbG9yZmlsdGVyIHRoYXQgbXVsdGlwbGllcyB0aGUgUkdCIGNoYW5uZWxzIGJ5IG9uZSBjb2xvciwKKyAgICAgKiBhbmQgdGhlbiBhZGRzIGEgc2Vjb25kIGNvbG9yLiBUaGUgYWxwaGEgY29tcG9uZW50cyBvZiB0aGUgbXVsIGFuZCBhZGQKKyAgICAgKiBhcmd1bWVudHMgYXJlIGlnbm9yZWQuCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRDb2xvck11bHRpcGx5KGludCkKKyAgICAgKiBAc2VlICNzZXRDb2xvckFkZChpbnQpCiAgICAgICovCiAgICAgcHVibGljIExpZ2h0aW5nQ29sb3JGaWx0ZXIoaW50IG11bCwgaW50IGFkZCkgewotICAgICAgICBuYXRpdmVfaW5zdGFuY2UgPSBuYXRpdmVfQ3JlYXRlTGlnaHRpbmdGaWx0ZXIobXVsLCBhZGQpOwotICAgICAgICBuYXRpdmVDb2xvckZpbHRlciA9IG5DcmVhdGVMaWdodGluZ0ZpbHRlcihuYXRpdmVfaW5zdGFuY2UsIG11bCwgYWRkKTsKKyAgICAgICAgbU11bCA9IG11bDsKKyAgICAgICAgbUFkZCA9IGFkZDsKKyAgICAgICAgdXBkYXRlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgUkdCIGNvbG9yIHVzZWQgdG8gbXVsdGlwbHkgdGhlIHNvdXJjZSBjb2xvciB3aGVuIHRoZQorICAgICAqIGNvbG9yIGZpbHRlciBpcyBhcHBsaWVkLgorICAgICAqCisgICAgICogQHNlZSAjc2V0Q29sb3JNdWx0aXBseShpbnQpCisgICAgICovCisgICAgcHVibGljIGludCBnZXRDb2xvck11bHRpcGx5KCkgeworICAgICAgICByZXR1cm4gbU11bDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhlIFJHQiBjb2xvciB1c2VkIHRvIG11bHRpcGx5IHRoZSBzb3VyY2UgY29sb3Igd2hlbiB0aGUKKyAgICAgKiBjb2xvciBmaWx0ZXIgaXMgYXBwbGllZC4KKyAgICAgKiBUaGUgYWxwaGEgY2hhbm5lbCBvZiB0aGlzIGNvbG9yIGlzIGlnbm9yZWQuCisgICAgICoKKyAgICAgKiBAc2VlICNnZXRDb2xvck11bHRpcGx5KCkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb2xvck11bHRpcGx5KGludCBtdWwpIHsKKyAgICAgICAgbU11bCA9IG11bDsKKyAgICAgICAgdXBkYXRlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgUkdCIGNvbG9yIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgc291cmNlIGNvbG9yCisgICAgICogd2hlbiB0aGUgY29sb3IgZmlsdGVyIGlzIGFwcGxpZWQuCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRDb2xvckFkZChpbnQpCisgICAgICovCisgICAgcHVibGljIGludCBnZXRDb2xvckFkZCgpIHsKKyAgICAgICAgcmV0dXJuIG1BZGQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHRoZSBSR0IgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzb3VyY2UgY29sb3Igd2hlbgorICAgICAqIHRoZSBjb2xvciBmaWx0ZXIgaXMgYXBwbGllZC4KKyAgICAgKiBUaGUgYWxwaGEgY2hhbm5lbCBvZiB0aGlzIGNvbG9yIGlzIGlnbm9yZWQuCisgICAgICoKKyAgICAgKiBAc2VlICNnZXRDb2xvckFkZCgpCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q29sb3JBZGQoaW50IGFkZCkgeworICAgICAgICBtQWRkID0gYWRkOworICAgICAgICB1cGRhdGUoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlKCkgeworICAgICAgICBkZXN0cm95RmlsdGVyKG5hdGl2ZV9pbnN0YW5jZSwgbmF0aXZlQ29sb3JGaWx0ZXIpOworICAgICAgICBuYXRpdmVfaW5zdGFuY2UgPSBuYXRpdmVfQ3JlYXRlTGlnaHRpbmdGaWx0ZXIobU11bCwgbUFkZCk7CisgICAgICAgIG5hdGl2ZUNvbG9yRmlsdGVyID0gbkNyZWF0ZUxpZ2h0aW5nRmlsdGVyKG5hdGl2ZV9pbnN0YW5jZSwgbU11bCwgbUFkZCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBuYXRpdmVfQ3JlYXRlTGlnaHRpbmdGaWx0ZXIoaW50IG11bCwgaW50IGFkZCk7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvUGFpbnQuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9QYWludC5qYXZhCmluZGV4IDVmYzI1ODguLmMyZDRkZjIgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9QYWludC5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9QYWludC5qYXZhCkBAIC0zMyw2ICszMywxMCBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIGludCBtTmF0aXZlUGFpbnQ7CisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG1OYXRpdmVUeXBlZmFjZTsKIAogICAgIHByaXZhdGUgQ29sb3JGaWx0ZXIgbUNvbG9yRmlsdGVyOwogICAgIHByaXZhdGUgTWFza0ZpbHRlciAgbU1hc2tGaWx0ZXI7CkBAIC00ODEsNiArNDg1LDcgQEAKICAgICAgICAgbVJhc3Rlcml6ZXIgPSBudWxsOwogICAgICAgICBtU2hhZGVyID0gbnVsbDsKICAgICAgICAgbVR5cGVmYWNlID0gbnVsbDsKKyAgICAgICAgbU5hdGl2ZVR5cGVmYWNlID0gMDsKICAgICAgICAgbVhmZXJtb2RlID0gbnVsbDsKIAogICAgICAgICBtSGFzQ29tcGF0U2NhbGluZyA9IGZhbHNlOwpAQCAtNTI1LDYgKzUzMCw3IEBACiAgICAgICAgICAgICBtU2hhZGVyID0gbnVsbDsKICAgICAgICAgfQogICAgICAgICBtVHlwZWZhY2UgPSBwYWludC5tVHlwZWZhY2U7CisgICAgICAgIG1OYXRpdmVUeXBlZmFjZSA9IHBhaW50Lm1OYXRpdmVUeXBlZmFjZTsKICAgICAgICAgbVhmZXJtb2RlID0gcGFpbnQubVhmZXJtb2RlOwogCiAgICAgICAgIG1IYXNDb21wYXRTY2FsaW5nID0gcGFpbnQubUhhc0NvbXBhdFNjYWxpbmc7CkBAIC0xMDg3LDYgKzEwOTMsNyBAQAogICAgICAgICB9CiAgICAgICAgIG5hdGl2ZV9zZXRUeXBlZmFjZShtTmF0aXZlUGFpbnQsIHR5cGVmYWNlTmF0aXZlKTsKICAgICAgICAgbVR5cGVmYWNlID0gdHlwZWZhY2U7CisgICAgICAgIG1OYXRpdmVUeXBlZmFjZSA9IHR5cGVmYWNlTmF0aXZlOwogICAgICAgICByZXR1cm4gdHlwZWZhY2U7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1BhdGguamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9QYXRoLmphdmEKaW5kZXggNWIwNGE5MS4uNDc3NjA4OCAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1BhdGguamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aC5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKIAotaW1wb3J0IGFuZHJvaWQudmlldy5IYXJkd2FyZVJlbmRlcmVyOwotCiAvKioKICAqIFRoZSBQYXRoIGNsYXNzIGVuY2Fwc3VsYXRlcyBjb21wb3VuZCAobXVsdGlwbGUgY29udG91cikgZ2VvbWV0cmljIHBhdGhzCiAgKiBjb25zaXN0aW5nIG9mIHN0cmFpZ2h0IGxpbmUgc2VnbWVudHMsIHF1YWRyYXRpYyBjdXJ2ZXMsIGFuZCBjdWJpYyBjdXJ2ZXMuCkBAIC0zMCw2ICsyOCw3IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgZmluYWwgaW50IG1OYXRpdmVQYXRoOworICAgIHByaXZhdGUgaW50IG1OYXRpdmVQYXRoTWVhc3VyZTsKIAogICAgIC8qKgogICAgICAqIEBoaWRlCkBAIC0zOSw3ICszOCw2IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgUmVnaW9uIHJlY3RzOwotICAgIHByaXZhdGUgYm9vbGVhbiBtRGV0ZWN0U2ltcGxlUGF0aHM7CiAgICAgcHJpdmF0ZSBEaXJlY3Rpb24gbUxhc3REaXJlY3Rpb24gPSBudWxsOwogCiAgICAgLyoqCkBAIC00Nyw3ICs0NSw2IEBACiAgICAgICovCiAgICAgcHVibGljIFBhdGgoKSB7CiAgICAgICAgIG1OYXRpdmVQYXRoID0gaW5pdDEoKTsKLSAgICAgICAgbURldGVjdFNpbXBsZVBhdGhzID0gSGFyZHdhcmVSZW5kZXJlci5pc0F2YWlsYWJsZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNjUsNyArNjIsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG1OYXRpdmVQYXRoID0gaW5pdDIodmFsTmF0aXZlKTsKLSAgICAgICAgbURldGVjdFNpbXBsZVBhdGhzID0gSGFyZHdhcmVSZW5kZXJlci5pc0F2YWlsYWJsZSgpOwogICAgIH0KICAgICAKICAgICAvKioKQEAgLTc0LDE1ICs3MCwyMSBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgewogICAgICAgICBpc1NpbXBsZVBhdGggPSB0cnVlOwotICAgICAgICBpZiAobURldGVjdFNpbXBsZVBhdGhzKSB7Ci0gICAgICAgICAgICBtTGFzdERpcmVjdGlvbiA9IG51bGw7Ci0gICAgICAgICAgICBpZiAocmVjdHMgIT0gbnVsbCkgcmVjdHMuc2V0RW1wdHkoKTsKLSAgICAgICAgfQorICAgICAgICBtTGFzdERpcmVjdGlvbiA9IG51bGw7CisgICAgICAgIGlmIChyZWN0cyAhPSBudWxsKSByZWN0cy5zZXRFbXB0eSgpOwogICAgICAgICAvLyBXZSBwcm9taXNlZCBub3QgdG8gY2hhbmdlIHRoaXMsIHNvIHByZXNlcnZlIGl0IGFyb3VuZCB0aGUgbmF0aXZlCiAgICAgICAgIC8vIGNhbGwsIHdoaWNoIGRvZXMgbm93IHJlc2V0IGZpbGwgdHlwZS4KICAgICAgICAgZmluYWwgRmlsbFR5cGUgZmlsbFR5cGUgPSBnZXRGaWxsVHlwZSgpOwogICAgICAgICBuYXRpdmVfcmVzZXQobU5hdGl2ZVBhdGgpOwogICAgICAgICBzZXRGaWxsVHlwZShmaWxsVHlwZSk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjbGVhck1lYXN1cmUoKSB7CisgICAgICAgIGlmIChtTmF0aXZlUGF0aE1lYXN1cmUgIT0gMCkgeworICAgICAgICAgICAgbmF0aXZlX2Rlc3Ryb3lNZWFzdXJlKG1OYXRpdmVQYXRoTWVhc3VyZSk7CisgICAgICAgICAgICBtTmF0aXZlUGF0aE1lYXN1cmUgPSAwOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC05MSwxMSArOTMsMTAgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZXdpbmQoKSB7CiAgICAgICAgIGlzU2ltcGxlUGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChtRGV0ZWN0U2ltcGxlUGF0aHMpIHsKLSAgICAgICAgICAgIG1MYXN0RGlyZWN0aW9uID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChyZWN0cyAhPSBudWxsKSByZWN0cy5zZXRFbXB0eSgpOwotICAgICAgICB9CisgICAgICAgIG1MYXN0RGlyZWN0aW9uID0gbnVsbDsKKyAgICAgICAgaWYgKHJlY3RzICE9IG51bGwpIHJlY3RzLnNldEVtcHR5KCk7CiAgICAgICAgIG5hdGl2ZV9yZXdpbmQobU5hdGl2ZVBhdGgpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICAvKiogUmVwbGFjZSB0aGUgY29udGVudHMgb2YgdGhpcyB3aXRoIHRoZSBjb250ZW50cyBvZiBzcmMuCkBAIC0xMDQsNiArMTA1LDcgQEAKICAgICAgICAgaWYgKHRoaXMgIT0gc3JjKSB7CiAgICAgICAgICAgICBpc1NpbXBsZVBhdGggPSBzcmMuaXNTaW1wbGVQYXRoOwogICAgICAgICAgICAgbmF0aXZlX3NldChtTmF0aXZlUGF0aCwgc3JjLm1OYXRpdmVQYXRoKTsKKyAgICAgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMzIsNiArMjM0LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRGaWxsVHlwZShGaWxsVHlwZSBmdCkgewogICAgICAgICBuYXRpdmVfc2V0RmlsbFR5cGUobU5hdGl2ZVBhdGgsIGZ0Lm5hdGl2ZUludCk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KICAgICAKICAgICAvKioKQEAgLTI1MSw2ICsyNTQsNyBAQAogICAgICAgICBpbnQgZnQgPSBuYXRpdmVfZ2V0RmlsbFR5cGUobU5hdGl2ZVBhdGgpOwogICAgICAgICBmdCBePSAyOwogICAgICAgICBuYXRpdmVfc2V0RmlsbFR5cGUobU5hdGl2ZVBhdGgsIGZ0KTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogICAgIAogICAgIC8qKgpAQCAtMzA3LDYgKzMxMSw3IEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgbW92ZVRvKGZsb2F0IHgsIGZsb2F0IHkpIHsKICAgICAgICAgbmF0aXZlX21vdmVUbyhtTmF0aXZlUGF0aCwgeCwgeSk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzIxLDYgKzMyNiw3IEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgck1vdmVUbyhmbG9hdCBkeCwgZmxvYXQgZHkpIHsKICAgICAgICAgbmF0aXZlX3JNb3ZlVG8obU5hdGl2ZVBhdGgsIGR4LCBkeSk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzM0LDYgKzM0MCw3IEBACiAgICAgcHVibGljIHZvaWQgbGluZVRvKGZsb2F0IHgsIGZsb2F0IHkpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9saW5lVG8obU5hdGl2ZVBhdGgsIHgsIHkpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTM0OSw2ICszNTYsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJMaW5lVG8oZmxvYXQgZHgsIGZsb2F0IGR5KSB7CiAgICAgICAgIGlzU2ltcGxlUGF0aCA9IGZhbHNlOwogICAgICAgICBuYXRpdmVfckxpbmVUbyhtTmF0aXZlUGF0aCwgZHgsIGR5KTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zNjQsNiArMzcyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBxdWFkVG8oZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9xdWFkVG8obU5hdGl2ZVBhdGgsIHgxLCB5MSwgeDIsIHkyKTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zODMsNiArMzkyLDcgQEAKICAgICBwdWJsaWMgdm9pZCByUXVhZFRvKGZsb2F0IGR4MSwgZmxvYXQgZHkxLCBmbG9hdCBkeDIsIGZsb2F0IGR5MikgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX3JRdWFkVG8obU5hdGl2ZVBhdGgsIGR4MSwgZHkxLCBkeDIsIGR5Mik7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDAxLDYgKzQxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4MywgZmxvYXQgeTMpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9jdWJpY1RvKG1OYXRpdmVQYXRoLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MTIsNiArNDIzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4MywgZmxvYXQgeTMpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9yQ3ViaWNUbyhtTmF0aXZlUGF0aCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5Myk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDMxLDYgKzQ0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmb3JjZU1vdmVUbykgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX2FyY1RvKG1OYXRpdmVQYXRoLCBvdmFsLCBzdGFydEFuZ2xlLCBzd2VlcEFuZ2xlLCBmb3JjZU1vdmVUbyk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KICAgICAKICAgICAvKioKQEAgLTQ0Nyw2ICs0NjAsNyBAQAogICAgIHB1YmxpYyB2b2lkIGFyY1RvKFJlY3RGIG92YWwsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IHN3ZWVwQW5nbGUpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9hcmNUbyhtTmF0aXZlUGF0aCwgb3ZhbCwgc3RhcnRBbmdsZSwgc3dlZXBBbmdsZSwgZmFsc2UpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAgICAgCiAgICAgLyoqCkBAIC00NTYsNiArNDcwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9jbG9zZShtTmF0aXZlUGF0aCk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDc1LDE2ICs0OTAsMTQgQEAKICAgICB9CiAgICAgCiAgICAgcHJpdmF0ZSB2b2lkIGRldGVjdFNpbXBsZVBhdGgoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBEaXJlY3Rpb24gZGlyKSB7Ci0gICAgICAgIGlmIChtRGV0ZWN0U2ltcGxlUGF0aHMpIHsKLSAgICAgICAgICAgIGlmIChtTGFzdERpcmVjdGlvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUxhc3REaXJlY3Rpb24gPSBkaXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobUxhc3REaXJlY3Rpb24gIT0gZGlyKSB7Ci0gICAgICAgICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChyZWN0cyA9PSBudWxsKSByZWN0cyA9IG5ldyBSZWdpb24oKTsKLSAgICAgICAgICAgICAgICByZWN0cy5vcCgoaW50KSBsZWZ0LCAoaW50KSB0b3AsIChpbnQpIHJpZ2h0LCAoaW50KSBib3R0b20sIFJlZ2lvbi5PcC5VTklPTik7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChtTGFzdERpcmVjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICBtTGFzdERpcmVjdGlvbiA9IGRpcjsKKyAgICAgICAgfQorICAgICAgICBpZiAobUxhc3REaXJlY3Rpb24gIT0gZGlyKSB7CisgICAgICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChyZWN0cyA9PSBudWxsKSByZWN0cyA9IG5ldyBSZWdpb24oKTsKKyAgICAgICAgICAgIHJlY3RzLm9wKChpbnQpIGxlZnQsIChpbnQpIHRvcCwgKGludCkgcmlnaHQsIChpbnQpIGJvdHRvbSwgUmVnaW9uLk9wLlVOSU9OKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTAwLDYgKzUxMyw3IEBACiAgICAgICAgIH0KICAgICAgICAgZGV0ZWN0U2ltcGxlUGF0aChyZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSwgZGlyKTsKICAgICAgICAgbmF0aXZlX2FkZFJlY3QobU5hdGl2ZVBhdGgsIHJlY3QsIGRpci5uYXRpdmVJbnQpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTUxNCw2ICs1MjgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGFkZFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBEaXJlY3Rpb24gZGlyKSB7CiAgICAgICAgIGRldGVjdFNpbXBsZVBhdGgobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBkaXIpOwogICAgICAgICBuYXRpdmVfYWRkUmVjdChtTmF0aXZlUGF0aCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBkaXIubmF0aXZlSW50KTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC01MjgsNiArNTQzLDcgQEAKICAgICAgICAgfQogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX2FkZE92YWwobU5hdGl2ZVBhdGgsIG92YWwsIGRpci5uYXRpdmVJbnQpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTU0MSw2ICs1NTcsNyBAQAogICAgIHB1YmxpYyB2b2lkIGFkZENpcmNsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCByYWRpdXMsIERpcmVjdGlvbiBkaXIpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9hZGRDaXJjbGUobU5hdGl2ZVBhdGgsIHgsIHksIHJhZGl1cywgZGlyLm5hdGl2ZUludCk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTU2LDYgKzU3Myw3IEBACiAgICAgICAgIH0KICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9hZGRBcmMobU5hdGl2ZVBhdGgsIG92YWwsIHN0YXJ0QW5nbGUsIHN3ZWVwQW5nbGUpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTU3Miw2ICs1OTAsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlzU2ltcGxlUGF0aCA9IGZhbHNlOwogICAgICAgICBuYXRpdmVfYWRkUm91bmRSZWN0KG1OYXRpdmVQYXRoLCByZWN0LCByeCwgcnksIGRpci5uYXRpdmVJbnQpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAgICAgCiAgICAgLyoqCkBAIC01OTIsNiArNjExLDcgQEAKICAgICAgICAgfQogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX2FkZFJvdW5kUmVjdChtTmF0aXZlUGF0aCwgcmVjdCwgcmFkaWksIGRpci5uYXRpdmVJbnQpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAgICAgCiAgICAgLyoqCkBAIC02MDMsNiArNjIzLDcgQEAKICAgICBwdWJsaWMgdm9pZCBhZGRQYXRoKFBhdGggc3JjLCBmbG9hdCBkeCwgZmxvYXQgZHkpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9hZGRQYXRoKG1OYXRpdmVQYXRoLCBzcmMubU5hdGl2ZVBhdGgsIGR4LCBkeSk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNjEzLDYgKzYzNCw3IEBACiAgICAgcHVibGljIHZvaWQgYWRkUGF0aChQYXRoIHNyYykgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX2FkZFBhdGgobU5hdGl2ZVBhdGgsIHNyYy5tTmF0aXZlUGF0aCk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNjIzLDYgKzY0NSw3IEBACiAgICAgcHVibGljIHZvaWQgYWRkUGF0aChQYXRoIHNyYywgTWF0cml4IG1hdHJpeCkgewogICAgICAgICBpZiAoIXNyYy5pc1NpbXBsZVBhdGgpIGlzU2ltcGxlUGF0aCA9IGZhbHNlOwogICAgICAgICBuYXRpdmVfYWRkUGF0aChtTmF0aXZlUGF0aCwgc3JjLm1OYXRpdmVQYXRoLCBtYXRyaXgubmF0aXZlX2luc3RhbmNlKTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02NDAsNiArNjYzLDExIEBACiAgICAgICAgICAgICBkc3QuaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgbmF0aXZlX29mZnNldChtTmF0aXZlUGF0aCwgZHgsIGR5LCBkc3ROYXRpdmUpOworICAgICAgICBpZiAoZHN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGRzdC5jbGVhck1lYXN1cmUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNsZWFyTWVhc3VyZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC02NTEsNiArNjc5LDcgQEAKICAgICBwdWJsaWMgdm9pZCBvZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KSB7CiAgICAgICAgIGlzU2ltcGxlUGF0aCA9IGZhbHNlOwogICAgICAgICBuYXRpdmVfb2Zmc2V0KG1OYXRpdmVQYXRoLCBkeCwgZHkpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTY2Miw2ICs2OTEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNldExhc3RQb2ludChmbG9hdCBkeCwgZmxvYXQgZHkpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9zZXRMYXN0UG9pbnQobU5hdGl2ZVBhdGgsIGR4LCBkeSk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNjc5LDYgKzcwOSwxMSBAQAogICAgICAgICAgICAgZHN0TmF0aXZlID0gZHN0Lm1OYXRpdmVQYXRoOwogICAgICAgICB9CiAgICAgICAgIG5hdGl2ZV90cmFuc2Zvcm0obU5hdGl2ZVBhdGgsIG1hdHJpeC5uYXRpdmVfaW5zdGFuY2UsIGRzdE5hdGl2ZSk7CisgICAgICAgIGlmIChkc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgZHN0LmNsZWFyTWVhc3VyZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2xlYXJNZWFzdXJlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTY4OSwxMCArNzI0LDE0IEBACiAgICAgcHVibGljIHZvaWQgdHJhbnNmb3JtKE1hdHJpeCBtYXRyaXgpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV90cmFuc2Zvcm0obU5hdGl2ZVBhdGgsIG1hdHJpeC5uYXRpdmVfaW5zdGFuY2UpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgewogICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKG1OYXRpdmVQYXRoTWVhc3VyZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgbmF0aXZlX2Rlc3Ryb3lNZWFzdXJlKG1OYXRpdmVQYXRoTWVhc3VyZSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaW5hbGl6ZXIobU5hdGl2ZVBhdGgpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgc3VwZXIuZmluYWxpemUoKTsKQEAgLTcwMyw2ICs3NDIsOTIgQEAKICAgICAgICAgcmV0dXJuIG1OYXRpdmVQYXRoOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIEFwcHJveGltYXRlIHRoZSA8Y29kZT5QYXRoPC9jb2RlPiB3aXRoIGEgc2VyaWVzIG9mIGxpbmUgc2VnbWVudHMuCisgICAgICogVGhpcyByZXR1cm5zIGZsb2F0W10gd2l0aCB0aGUgYXJyYXkgY29udGFpbmluZyBwb2ludCBjb21wb25lbnRzLgorICAgICAqIFRoZXJlIGFyZSB0aHJlZSBjb21wb25lbnRzIGZvciBlYWNoIHBvaW50LCBpbiBvcmRlcjoKKyAgICAgKiA8dWw+CisgICAgICogICAgIDxsaT5GcmFjdGlvbiBhbG9uZyB0aGUgbGVuZ3RoIG9mIHRoZSBwYXRoIHRoYXQgdGhlIHBvaW50IHJlc2lkZXM8L2xpPgorICAgICAqICAgICA8bGk+VGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQ8L2xpPgorICAgICAqICAgICA8bGk+VGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQ8L2xpPgorICAgICAqIDwvdWw+CisgICAgICogPHA+VHdvIHBvaW50cyBtYXkgc2hhcmUgdGhlIHNhbWUgZnJhY3Rpb24gYWxvbmcgaXRzIGxlbmd0aCB3aGVuIHRoZXJlIGlzCisgICAgICogYSBtb3ZlIGFjdGlvbiB3aXRoaW4gdGhlIFBhdGguPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGFjY2VwdGFibGVFcnJvciBUaGUgYWNjZXB0YWJsZSBlcnJvciBmb3IgYSBsaW5lIG9uIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgUGF0aC4gVHlwaWNhbGx5IHRoaXMgd291bGQgYmUgMC41IHNvIHRoYXQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBlcnJvciBpcyBsZXNzIHRoYW4gaGFsZiBhIHBpeGVsLgorICAgICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgY29tcG9uZW50cyBmb3IgcG9pbnRzIGFwcHJveGltYXRpbmcgdGhlIFBhdGguCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgZmxvYXRbXSBhcHByb3hpbWF0ZShmbG9hdCBhY2NlcHRhYmxlRXJyb3IpIHsKKyAgICAgICAgcmV0dXJuIG5hdGl2ZV9hcHByb3hpbWF0ZShtTmF0aXZlUGF0aCwgYWNjZXB0YWJsZUVycm9yKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNb2RpZmllcyB0aGUgPGNvZGU+UGF0aDwvY29kZT4gYnkgZXh0cmFjdGluZyBhIHBvcnRpb24gb2YgaXQuCisgICAgICogVGhlIHBvcnRpb24gb2YgdGhlIDxjb2RlPlBhdGg8L2NvZGU+IHVzZWQgaXMgYmV0d2VlbiA8Y29kZT50cmltU3RhcnQ8L2NvZGU+IGFuZAorICAgICAqIDxjb2RlPnRyaW1FbmQ8L2NvZGU+IHdpdGggdGhlIHZhbHVlIG9mZnNldCBieSA8Y29kZT50cmltT2Zmc2V0PC9jb2RlPi4gV2hlbgorICAgICAqIDxjb2RlPnRyaW1PZmZzZXQ8L2NvZGU+IGFkZGVkIHRvIDxjb2RlPnRyaW1FbmQ8L2NvZGU+IGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGUKKyAgICAgKiB0cmltbWVkIHBvcnRpb24gIndyYXBzIiB0byB0aGUgc3RhcnQgb2YgdGhlIDxjb2RlPlBhdGg8L2NvZGU+LgorICAgICAqIDxwPkZvciBleGFtcGxlLCBpZiA8Y29kZT5QYXRoPC9jb2RlPiBpcyBhIGNpcmNsZSBhbmQgPGNvZGU+dHJpbVN0YXJ0PC9jb2RlPiBpcyAwCisgICAgICogYW5kIDxjb2RlPnRyaW1FbmQ8L2NvZGU+IGlzIDAuNSwgdGhlIHJlc3VsdGluZyA8Y29kZT5QYXRoPC9jb2RlPiBpcyB0aGUgYXJjIG9mCisgICAgICogYSBzZW1pY2lyY2xlLiBJZiA8Y29kZT50cmltT2Zmc2V0PC9jb2RlPiBpcyBzZXQgdG8gMC43NSwgdGhlIGFyYyB3aWxsIHN0YXJ0IGF0CisgICAgICogMy80IG9mIHRoZSBjaXJjbGUgYW5kIGNvbnRpbnVlIHRvIHRoZSBlbmQgb2YgdGhlIGNpcmNsZSwgdGhlbiBzdGFydCBhZ2FpbiBhdCB0aGUKKyAgICAgKiBiZWdpbm5pbmcgb2YgdGhlIGNpcmNsZSBhbmQgZW5kIGF0IDEvNCBvZiB0aGUgd2F5IGFyb3VuZC4gSXQgd2lsbCBhcHBlYXIgYXMgaWYKKyAgICAgKiB0aGUgc2VtaWNpcmNsZSBhcmMgd3JhcHBlZCBhcm91bmQgdGhlIDxjb2RlPlBhdGg8L2NvZGU+IHN0YXJ0IGFuZCBlbmQuPC9wPgorICAgICAqIEBwYXJhbSB0cmltU3RhcnQgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCA8Y29kZT50cmltRW5kPC9jb2RlPiBpbmRpY2F0aW5nIHRoZSBmcmFjdGlvbiBvZiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgIDxjb2RlPlBhdGg8L2NvZGU+IHRvIHN0YXJ0LiBBIHZhbHVlIG9mIDAgdHJpbXMgbm90aGluZyBmcm9tIHRoZSBzdGFydC4KKyAgICAgKiBAcGFyYW0gdHJpbUVuZCBBIG51bWJlciBiZXR3ZWVuIDxjb2RlPnRyaW1TdGFydDwvY29kZT4gYW5kIDEgaW5kaWNhdGluZyB0aGUgZnJhY3Rpb24gb2YgdGhlCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+UGF0aDwvY29kZT4gdG8gZW5kLiBBIHZhbHVlIG9mIDEgdHJpbXMgbm90aGluZyBmcm9tIHRoZSBlbmQuCisgICAgICogQHBhcmFtIHRyaW1PZmZzZXQgQSBmcmFjdGlvbiBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyB0aGUgb2Zmc2V0IG9mIHRoZSB0cmltbWVkCisgICAgICogICAgICAgICAgICAgICAgICAgcG9ydGlvbiBvZiB0aGUgPGNvZGU+UGF0aDwvY29kZT4uCisgICAgICogQHNlZSAjdHJpbShmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXRoKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHRyaW0oZmxvYXQgdHJpbVN0YXJ0LCBmbG9hdCB0cmltRW5kLCBmbG9hdCB0cmltT2Zmc2V0KSB7CisgICAgICAgIHRyaW0odHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltT2Zmc2V0LCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFeHRyYWN0cyBhIHBvcnRpb24gb2YgdGhlIDxjb2RlPlBhdGg8L2NvZGU+IGFuZCB3cml0ZXMgaXQgdG8gPGNvZGU+ZHN0PC9jb2RlPi4KKyAgICAgKiBUaGUgcG9ydGlvbiBvZiB0aGUgPGNvZGU+UGF0aDwvY29kZT4gdXNlZCBpcyBiZXR3ZWVuIDxjb2RlPnRyaW1TdGFydDwvY29kZT4gYW5kCisgICAgICogPGNvZGU+dHJpbUVuZDwvY29kZT4gd2l0aCB0aGUgdmFsdWUgb2Zmc2V0IGJ5IDxjb2RlPnRyaW1PZmZzZXQ8L2NvZGU+LiBXaGVuCisgICAgICogPGNvZGU+dHJpbU9mZnNldDwvY29kZT4gYWRkZWQgdG8gPGNvZGU+dHJpbUVuZDwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIDEsIHRoZQorICAgICAqIHRyaW1tZWQgcG9ydGlvbiAid3JhcHMiIHRvIHRoZSBzdGFydCBvZiB0aGUgPGNvZGU+UGF0aDwvY29kZT4uCisgICAgICogPHA+Rm9yIGV4YW1wbGUsIGlmIDxjb2RlPlBhdGg8L2NvZGU+IGlzIGEgY2lyY2xlIGFuZCA8Y29kZT50cmltU3RhcnQ8L2NvZGU+IGlzIDAKKyAgICAgKiBhbmQgPGNvZGU+dHJpbUVuZDwvY29kZT4gaXMgMC41LCB0aGUgcmVzdWx0aW5nIDxjb2RlPlBhdGg8L2NvZGU+IGlzIHRoZSBhcmMgb2YKKyAgICAgKiBhIHNlbWljaXJjbGUuIElmIDxjb2RlPnRyaW1PZmZzZXQ8L2NvZGU+IGlzIHNldCB0byAwLjc1LCB0aGUgYXJjIHdpbGwgc3RhcnQgYXQKKyAgICAgKiAzLzQgb2YgdGhlIGNpcmNsZSBhbmQgY29udGludWUgdG8gdGhlIGVuZCBvZiB0aGUgY2lyY2xlLCB0aGVuIHN0YXJ0IGFnYWluIGF0IHRoZQorICAgICAqIGJlZ2lubmluZyBvZiB0aGUgY2lyY2xlIGFuZCBlbmQgYXQgMS80IG9mIHRoZSB3YXkgYXJvdW5kLiBJdCB3aWxsIGFwcGVhciBhcyBpZgorICAgICAqIHRoZSBzZW1pY2lyY2xlIGFyYyB3cmFwcGVkIGFyb3VuZCB0aGUgPGNvZGU+UGF0aDwvY29kZT4gc3RhcnQgYW5kIGVuZC48L3A+CisgICAgICogQHBhcmFtIHRyaW1TdGFydCBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDxjb2RlPnRyaW1FbmQ8L2NvZGU+IGluZGljYXRpbmcgdGhlIGZyYWN0aW9uIG9mIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgPGNvZGU+UGF0aDwvY29kZT4gdG8gc3RhcnQuIEEgdmFsdWUgb2YgMCB0cmltcyBub3RoaW5nIGZyb20gdGhlIHN0YXJ0LgorICAgICAqIEBwYXJhbSB0cmltRW5kIEEgbnVtYmVyIGJldHdlZW4gPGNvZGU+dHJpbVN0YXJ0PC9jb2RlPiBhbmQgMSBpbmRpY2F0aW5nIHRoZSBmcmFjdGlvbiBvZiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5QYXRoPC9jb2RlPiB0byBlbmQuIEEgdmFsdWUgb2YgMSB0cmltcyBub3RoaW5nIGZyb20gdGhlIGVuZC4KKyAgICAgKiBAcGFyYW0gdHJpbU9mZnNldCBBIGZyYWN0aW9uIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIHRoZSBvZmZzZXQgb2YgdGhlIHRyaW1tZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICBwb3J0aW9uIG9mIHRoZSA8Y29kZT5QYXRoPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gZHN0IFRoZSB0cmltbWVkIDxjb2RlPlBhdGg8L2NvZGU+IGlzIHdyaXR0ZW4gaGVyZS4gSWYgPGNvZGU+ZHN0PC9jb2RlPiBpcyBudWxsLAorICAgICAqICAgICAgICAgICAgdGhlbiB0aGUgb3JpZ2luYWwgPGNvZGU+UGF0aDwvY29kZT4gaXMgbW9kaWZpZWQuCisgICAgICogQHNlZSAjdHJpbShmbG9hdCwgZmxvYXQsIGZsb2F0KQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHRyaW0oZmxvYXQgdHJpbVN0YXJ0LCBmbG9hdCB0cmltRW5kLCBmbG9hdCB0cmltT2Zmc2V0LCBQYXRoIGRzdCkgeworICAgICAgICBpZiAodHJpbVN0YXJ0ID4gMSB8fCB0cmltRW5kID4gMSB8fCB0cmltT2Zmc2V0ID4gMQorICAgICAgICAgICAgICAgIHx8IHRyaW1TdGFydCA8IDAgfHwgdHJpbUVuZCA8IDAgfHwgdHJpbU9mZnNldCA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRyaW0gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHJpbVN0YXJ0ID4gdHJpbUVuZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidHJpbSBlbmQgY2Fubm90IGJlIGxlc3MgdGhhbiBzdGFydCIpOworICAgICAgICB9CisgICAgICAgIGludCBkc3ROYXRpdmUgPSAwOworICAgICAgICBpZiAoZHN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGRzdE5hdGl2ZSA9IGRzdC5tTmF0aXZlUGF0aDsKKyAgICAgICAgICAgIGRzdC5pc1NpbXBsZVBhdGggPSBmYWxzZTsKKyAgICAgICAgICAgIGRzdC5jbGVhck1lYXN1cmUoKTsKKyAgICAgICAgfQorICAgICAgICBtTmF0aXZlUGF0aE1lYXN1cmUgPSBuYXRpdmVfdHJpbShtTmF0aXZlUGF0aCwgZHN0TmF0aXZlLCBtTmF0aXZlUGF0aE1lYXN1cmUsCisgICAgICAgICAgICAgICAgdHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltT2Zmc2V0KTsKKyAgICB9CisKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgaW50IGluaXQxKCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBpbml0MihpbnQgblBhdGgpOwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZV9yZXNldChpbnQgblBhdGgpOwpAQCAtNzQ5LDQgKzg3NCw4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlX3RyYW5zZm9ybShpbnQgblBhdGgsIGludCBtYXRyaXgpOwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZV9vcChpbnQgcGF0aDEsIGludCBwYXRoMiwgaW50IG9wLCBpbnQgcmVzdWx0KTsKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBmaW5hbGl6ZXIoaW50IG5QYXRoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXRbXSBuYXRpdmVfYXBwcm94aW1hdGUoaW50IG5QYXRoLCBmbG9hdCBlcnJvcik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBuYXRpdmVfdHJpbShpbnQgblBhdGgsIGludCBuVGFyZ2V0UGF0aCwgaW50IG5QYXRoTWVhc3VyZSwKKyAgICAgICAgICAgIGZsb2F0IHRyaW1TdGFydCwgZmxvYXQgdHJpbUVuZCwgZmxvYXQgdHJpbU9mZnNldCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlX2Rlc3Ryb3lNZWFzdXJlKGludCBuUGF0aE1lYXN1cmUpOwogfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1BhdGhNZWFzdXJlLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aE1lYXN1cmUuamF2YQppbmRleCBlNTY3MTZmLi5iYTIyMjhjIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aE1lYXN1cmUuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aE1lYXN1cmUuamF2YQpAQCAtMTEzLDkgKzExMywxNSBAQAogICAgICAqIHNlZ21lbnQocykuIElmIHRoZSBzZWdtZW50IGlzIHplcm8tbGVuZ3RoLCByZXR1cm4gZmFsc2UsIGVsc2UgcmV0dXJuCiAgICAgICogdHJ1ZS4gc3RhcnREIGFuZCBzdG9wRCBhcmUgcGlubmVkIHRvIGxlZ2FsIHZhbHVlcyAoMC4uZ2V0TGVuZ3RoKCkpLgogICAgICAqIElmIHN0YXJ0RCA8PSBzdG9wRCB0aGVuIHJldHVybiBmYWxzZSAoYW5kIGxlYXZlIGRzdCB1bnRvdWNoZWQpLgotICAgICAqIEJlZ2luIHRoZSBzZWdtZW50IHdpdGggYSBtb3ZlVG8gaWYgc3RhcnRXaXRoTW92ZVRvIGlzIHRydWUKKyAgICAgKiBCZWdpbiB0aGUgc2VnbWVudCB3aXRoIGEgbW92ZVRvIGlmIHN0YXJ0V2l0aE1vdmVUbyBpcyB0cnVlLgorICAgICAqCisgICAgICogPHA+T24ge0BsaW5rIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUyNLSVRLQVR9IGFuZCBlYXJsaWVyCisgICAgICogcmVsZWFzZXMsIHRoZSByZXN1bHRpbmcgcGF0aCBtYXkgbm90IGRpc3BsYXkgb24gYSBoYXJkd2FyZS1hY2NlbGVyYXRlZAorICAgICAqIENhbnZhcy4gQSBzaW1wbGUgd29ya2Fyb3VuZCBpcyB0byBhZGQgYSBzaW5nbGUgb3BlcmF0aW9uIHRvIHRoaXMgcGF0aCwKKyAgICAgKiBzdWNoIGFzIDxjb2RlPmRzdC5yTGluZVRvKDAsIDApPC9jb2RlPi48L3A+CiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0U2VnbWVudChmbG9hdCBzdGFydEQsIGZsb2F0IHN0b3BELCBQYXRoIGRzdCwgYm9vbGVhbiBzdGFydFdpdGhNb3ZlVG8pIHsKKyAgICAgICAgZHN0LmlzU2ltcGxlUGF0aCA9IGZhbHNlOwogICAgICAgICByZXR1cm4gbmF0aXZlX2dldFNlZ21lbnQobmF0aXZlX2luc3RhbmNlLCBzdGFydEQsIHN0b3BELCBkc3QubmkoKSwgc3RhcnRXaXRoTW92ZVRvKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmQ29sb3JGaWx0ZXIuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmQ29sb3JGaWx0ZXIuamF2YQppbmRleCBlY2M3YzI0Li45ODcwYWQyIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZkNvbG9yRmlsdGVyLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmZDb2xvckZpbHRlci5qYXZhCkBAIC0xNiwxNyArMTYsODQgQEAKIAogcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwogCisvKioKKyAqIEEgY29sb3IgZmlsdGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGludCB0aGUgc291cmNlIHBpeGVscyB1c2luZyBhIHNpbmdsZQorICogY29sb3IgYW5kIGEgc3BlY2lmaWMge0BsaW5rIFBvcnRlckR1ZmYgUG9ydGVyLUR1ZmYgY29tcG9zaXRlIG1vZGV9LgorICovCiBwdWJsaWMgY2xhc3MgUG9ydGVyRHVmZkNvbG9yRmlsdGVyIGV4dGVuZHMgQ29sb3JGaWx0ZXIgeworICAgIHByaXZhdGUgaW50IG1Db2xvcjsKKyAgICBwcml2YXRlIFBvcnRlckR1ZmYuTW9kZSBtTW9kZTsKKwogICAgIC8qKgotICAgICAqIENyZWF0ZSBhIGNvbG9yZmlsdGVyIHRoYXQgdXNlcyB0aGUgc3BlY2lmaWVkIGNvbG9yIGFuZCBwb3J0ZXItZHVmZiBtb2RlLgorICAgICAqIENyZWF0ZSBhIGNvbG9yIGZpbHRlciB0aGF0IHVzZXMgdGhlIHNwZWNpZmllZCBjb2xvciBhbmQgUG9ydGVyLUR1ZmYgbW9kZS4KICAgICAgKgotICAgICAqIEBwYXJhbSBzcmNDb2xvciAgICAgICBUaGUgc291cmNlIGNvbG9yIHVzZWQgd2l0aCB0aGUgc3BlY2lmaWVkCi0gICAgICogICAgICAgICAgICAgICAgICAgICAgIHBvcnRlci1kdWZmIG1vZGUKLSAgICAgKiBAcGFyYW0gbW9kZSAgICAgICAgICAgVGhlIHBvcnRlci1kdWZmIG1vZGUgdGhhdCBpcyBhcHBsaWVkCisgICAgICogQHBhcmFtIGNvbG9yIFRoZSBBUkdCIHNvdXJjZSBjb2xvciB1c2VkIHdpdGggdGhlIHNwZWNpZmllZCBQb3J0ZXItRHVmZiBtb2RlCisgICAgICogQHBhcmFtIG1vZGUgVGhlIHBvcnRlci1kdWZmIG1vZGUgdGhhdCBpcyBhcHBsaWVkCisgICAgICoKKyAgICAgKiBAc2VlIENvbG9yCisgICAgICogQHNlZSAjc2V0Q29sb3IoaW50KQorICAgICAqIEBzZWUgI3NldE1vZGUoYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmLk1vZGUpCiAgICAgICovCi0gICAgcHVibGljIFBvcnRlckR1ZmZDb2xvckZpbHRlcihpbnQgc3JjQ29sb3IsIFBvcnRlckR1ZmYuTW9kZSBtb2RlKSB7Ci0gICAgICAgIG5hdGl2ZV9pbnN0YW5jZSA9IG5hdGl2ZV9DcmVhdGVQb3J0ZXJEdWZmRmlsdGVyKHNyY0NvbG9yLCBtb2RlLm5hdGl2ZUludCk7Ci0gICAgICAgIG5hdGl2ZUNvbG9yRmlsdGVyID0gbkNyZWF0ZVBvcnRlckR1ZmZGaWx0ZXIobmF0aXZlX2luc3RhbmNlLCBzcmNDb2xvciwgbW9kZS5uYXRpdmVJbnQpOworICAgIHB1YmxpYyBQb3J0ZXJEdWZmQ29sb3JGaWx0ZXIoaW50IGNvbG9yLCBQb3J0ZXJEdWZmLk1vZGUgbW9kZSkgeworICAgICAgICBtQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgbU1vZGUgPSBtb2RlOworICAgICAgICB1cGRhdGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBBUkdCIGNvbG9yIHVzZWQgdG8gdGludCB0aGUgc291cmNlIHBpeGVscyB3aGVuIHRoaXMgZmlsdGVyCisgICAgICogaXMgYXBwbGllZC4KKyAgICAgKgorICAgICAqIEBzZWUgQ29sb3IKKyAgICAgKiBAc2VlICNzZXRDb2xvcihpbnQpCisgICAgICovCisgICAgcHVibGljIGludCBnZXRDb2xvcigpIHsKKyAgICAgICAgcmV0dXJuIG1Db2xvcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhlIGNvbG9yIHRvIHRpbnQgdGhlIHNvdXJjZSBwaXhlbHMgd2l0aCB3aGVuIHRoaXMgY29sb3IKKyAgICAgKiBmaWx0ZXIgaXMgYXBwbGllZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb2xvciBBbiBBUkdCIHtAbGluayBDb2xvciBjb2xvcn0KKyAgICAgKgorICAgICAqIEBzZWUgQ29sb3IKKyAgICAgKiBAc2VlICNnZXRDb2xvcigpCisgICAgICogQHNlZSAjZ2V0TW9kZSgpCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q29sb3IoaW50IGNvbG9yKSB7CisgICAgICAgIG1Db2xvciA9IGNvbG9yOworICAgICAgICB1cGRhdGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBQb3J0ZXItRHVmZiBtb2RlIHVzZWQgdG8gY29tcG9zaXRlIHRoaXMgY29sb3IgZmlsdGVyJ3MKKyAgICAgKiBjb2xvciB3aXRoIHRoZSBzb3VyY2UgcGl4ZWwgd2hlbiB0aGlzIGZpbHRlciBpcyBhcHBsaWVkLgorICAgICAqCisgICAgICogQHNlZSBQb3J0ZXJEdWZmCisgICAgICogQHNlZSAjc2V0TW9kZShhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmYuTW9kZSkKKyAgICAgKi8KKyAgICBwdWJsaWMgUG9ydGVyRHVmZi5Nb2RlIGdldE1vZGUoKSB7CisgICAgICAgIHJldHVybiBtTW9kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhlIFBvcnRlci1EdWZmIG1vZGUgdG8gdXNlIHdoZW4gY29tcG9zaXRpbmcgdGhpcyBjb2xvcgorICAgICAqIGZpbHRlcidzIGNvbG9yIHdpdGggdGhlIHNvdXJjZSBwaXhlbCBhdCBkcmF3IHRpbWUuCisgICAgICoKKyAgICAgKiBAc2VlIFBvcnRlckR1ZmYKKyAgICAgKiBAc2VlICNnZXRNb2RlKCkKKyAgICAgKiBAc2VlICNnZXRDb2xvcigpCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TW9kZShQb3J0ZXJEdWZmLk1vZGUgbW9kZSkgeworICAgICAgICBtTW9kZSA9IG1vZGU7CisgICAgICAgIHVwZGF0ZSgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGUoKSB7CisgICAgICAgIGRlc3Ryb3lGaWx0ZXIobmF0aXZlX2luc3RhbmNlLCBuYXRpdmVDb2xvckZpbHRlcik7CisgICAgICAgIG5hdGl2ZV9pbnN0YW5jZSA9IG5hdGl2ZV9DcmVhdGVQb3J0ZXJEdWZmRmlsdGVyKG1Db2xvciwgbU1vZGUubmF0aXZlSW50KTsKKyAgICAgICAgbmF0aXZlQ29sb3JGaWx0ZXIgPSBuQ3JlYXRlUG9ydGVyRHVmZkZpbHRlcihuYXRpdmVfaW5zdGFuY2UsIG1Db2xvciwgbU1vZGUubmF0aXZlSW50KTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgaW50IG5hdGl2ZV9DcmVhdGVQb3J0ZXJEdWZmRmlsdGVyKGludCBzcmNDb2xvciwgaW50IHBvcnRlckR1ZmZNb2RlKTsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlLmphdmEKaW5kZXggYzY4YzlmNy4uYWVhM2VlNSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlLmphdmEKQEAgLTQ4LDcgKzQ4LDEwIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3BhcnNlQXJyYXk8U3BhcnNlQXJyYXk8VHlwZWZhY2U+PiBzVHlwZWZhY2VDYWNoZSA9CiAgICAgICAgICAgICBuZXcgU3BhcnNlQXJyYXk8U3BhcnNlQXJyYXk8VHlwZWZhY2U+PigzKTsKIAotICAgIGludCBuYXRpdmVfaW5zdGFuY2U7CisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG5hdGl2ZV9pbnN0YW5jZTsKIAogICAgIC8vIFN0eWxlCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9STUFMID0gMDsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9BbmltYXRpb25EcmF3YWJsZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FuaW1hdGlvbkRyYXdhYmxlLmphdmEKaW5kZXggYmRlOTc4ZC4uMDJiMjU4OCAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FuaW1hdGlvbkRyYXdhYmxlLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FuaW1hdGlvbkRyYXdhYmxlLmphdmEKQEAgLTgxLDYgKzgxLDcgQEAKIHB1YmxpYyBjbGFzcyBBbmltYXRpb25EcmF3YWJsZSBleHRlbmRzIERyYXdhYmxlQ29udGFpbmVyIGltcGxlbWVudHMgUnVubmFibGUsIEFuaW1hdGFibGUgewogICAgIHByaXZhdGUgZmluYWwgQW5pbWF0aW9uU3RhdGUgbUFuaW1hdGlvblN0YXRlOwogICAgIHByaXZhdGUgaW50IG1DdXJGcmFtZSA9IC0xOworICAgIHByaXZhdGUgYm9vbGVhbiBtQW5pbWF0aW5nOwogICAgIHByaXZhdGUgYm9vbGVhbiBtTXV0YXRlZDsKIAogICAgIHB1YmxpYyBBbmltYXRpb25EcmF3YWJsZSgpIHsKQEAgLTEzNyw3ICsxMzgsNyBAQAogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIGlzIHJ1bm5pbmcsIGZhbHNlIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUnVubmluZygpIHsKLSAgICAgICAgcmV0dXJuIG1DdXJGcmFtZSA+IC0xOworICAgICAgICByZXR1cm4gbUFuaW1hdGluZzsKICAgICB9CiAKICAgICAvKioKQEAgLTE1Myw2ICsxNTQsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHVuc2NoZWR1bGVTZWxmKFJ1bm5hYmxlIHdoYXQpIHsKICAgICAgICAgbUN1ckZyYW1lID0gLTE7CisgICAgICAgIG1BbmltYXRpbmcgPSBmYWxzZTsKICAgICAgICAgc3VwZXIudW5zY2hlZHVsZVNlbGYod2hhdCk7CiAgICAgfQogCkBAIC0yMjIsMTIgKzIyNCwxMyBAQAogICAgICAgICB9CiAgICAgICAgIG1DdXJGcmFtZSA9IGZyYW1lOwogICAgICAgICBzZWxlY3REcmF3YWJsZShmcmFtZSk7Ci0gICAgICAgIGlmICh1bnNjaGVkdWxlKSB7CisgICAgICAgIGlmICh1bnNjaGVkdWxlIHx8IGFuaW1hdGUpIHsKICAgICAgICAgICAgIHVuc2NoZWR1bGVTZWxmKHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIGlmIChhbmltYXRlKSB7Ci0gICAgICAgICAgICAvLyBVbnNjaGVkdWxpbmcgbWF5IGhhdmUgY2xvYmJlcmVkIHRoaXMgdmFsdWU7IHJlc3RvcmUgaXQgdG8gcmVjb3JkIHRoYXQgd2UncmUgYW5pbWF0aW5nCisgICAgICAgICAgICAvLyBVbnNjaGVkdWxpbmcgbWF5IGhhdmUgY2xvYmJlcmVkIHRoZXNlIHZhbHVlczsgcmVzdG9yZSB0aGVtCiAgICAgICAgICAgICBtQ3VyRnJhbWUgPSBmcmFtZTsKKyAgICAgICAgICAgIG1BbmltYXRpbmcgPSB0cnVlOwogICAgICAgICAgICAgc2NoZWR1bGVTZWxmKHRoaXMsIFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpICsgbUFuaW1hdGlvblN0YXRlLm1EdXJhdGlvbnNbZnJhbWVdKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9CaXRtYXBEcmF3YWJsZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0JpdG1hcERyYXdhYmxlLmphdmEKaW5kZXggOThlMzM4Ni4uNTJlNWI1YiAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0JpdG1hcERyYXdhYmxlLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0JpdG1hcERyYXdhYmxlLmphdmEKQEAgLTI2LDYgKzI2LDggQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGl4ZWxGb3JtYXQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZi5Nb2RlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlNoYWRlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlhmZXJtb2RlOwpAQCAtMzMsNiArMzUsNyBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTGF5b3V0RGlyZWN0aW9uOwogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OworCiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwogCkBAIC00NTMsNyArNDU2LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkRyYXcoQ2FudmFzIGNhbnZhcykgewogICAgICAgICBCaXRtYXAgYml0bWFwID0gbUJpdG1hcDsKICAgICAgICAgaWYgKGJpdG1hcCAhPSBudWxsKSB7CiAgICAgICAgICAgICBmaW5hbCBCaXRtYXBTdGF0ZSBzdGF0ZSA9IG1CaXRtYXBTdGF0ZTsKQEAgLTU3OSw2ICs1ODIsMTggQEAKICAgICAgICAgc2V0QXV0b01pcnJvcmVkKGEuZ2V0Qm9vbGVhbihjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5CaXRtYXBEcmF3YWJsZV9hdXRvTWlycm9yZWQsCiAgICAgICAgICAgICAgICAgZmFsc2UpKTsKIAorICAgICAgICBpZiAoYS5oYXNWYWx1ZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5CaXRtYXBEcmF3YWJsZV9jb2xvckZpbHRlckNvbG9yKSkgeworICAgICAgICAgICAgZmluYWwgaW50IGNvbG9yRmlsdGVyQ29sb3IgPSBhLmdldENvbG9yKAorICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5CaXRtYXBEcmF3YWJsZV9jb2xvckZpbHRlckNvbG9yLCAwKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBtb2RlVmFsdWUgPSBhLmdldEludCgKKyAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQml0bWFwRHJhd2FibGVfY29sb3JGaWx0ZXJNb2RlLAorICAgICAgICAgICAgICAgICAgICBNb2RlLk1VTFRJUExZLm9yZGluYWwoKSk7CisgICAgICAgICAgICBmaW5hbCBNb2RlIG1vZGUgPSBEcmF3YWJsZS5wYXJzZUNvbG9yRmlsdGVyTW9kZShtb2RlVmFsdWUpOworICAgICAgICAgICAgaWYgKG1vZGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNldENvbG9yRmlsdGVyKGNvbG9yRmlsdGVyQ29sb3IsIG1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgZmluYWwgUGFpbnQgcGFpbnQgPSBtQml0bWFwU3RhdGUubVBhaW50OwogICAgICAgICBwYWludC5zZXRBbnRpQWxpYXMoYS5nZXRCb29sZWFuKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkJpdG1hcERyYXdhYmxlX2FudGlhbGlhcywKICAgICAgICAgICAgICAgICBwYWludC5pc0FudGlBbGlhcygpKSk7CkBAIC02NDcsNyArNjYyLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIEJpdG1hcFN0YXRlKEJpdG1hcFN0YXRlIGJpdG1hcFN0YXRlKSB7Ci0gICAgICAgICAgICB0aGlzKGJpdG1hcFN0YXRlLm1CaXRtYXApOworICAgICAgICAgICAgbUJpdG1hcCA9IGJpdG1hcFN0YXRlLm1CaXRtYXA7CiAgICAgICAgICAgICBtQ2hhbmdpbmdDb25maWd1cmF0aW9ucyA9IGJpdG1hcFN0YXRlLm1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwogICAgICAgICAgICAgbUdyYXZpdHkgPSBiaXRtYXBTdGF0ZS5tR3Jhdml0eTsKICAgICAgICAgICAgIG1UaWxlTW9kZVggPSBiaXRtYXBTdGF0ZS5tVGlsZU1vZGVYOwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUuamF2YQppbmRleCA5MzczOGIwLi5jZmIxOTgzIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUuamF2YQpAQCAtMzksNiArMzksMTAgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3RhdGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheUxpc3Q7CitpbXBvcnQgYW5kcm9pZC52aWV3LkhhcmR3YXJlQ2FudmFzOworaW1wb3J0IGFuZHJvaWQudmlldy5IYXJkd2FyZVJlbmRlcmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwpAQCAtODIsNyArODYsNyBAQAogICogICAgIHRocm91Z2ggdGhlIHtAbGluayBDYWxsYmFja30gaW50ZXJmYWNlLiAgQWxsIGNsaWVudHMgc2hvdWxkIHN1cHBvcnQgdGhpcwogICogICAgIGludGVyZmFjZSAodmlhIHtAbGluayAjc2V0Q2FsbGJhY2t9KSBzbyB0aGF0IGFuaW1hdGlvbnMgd2lsbCB3b3JrLiAgQQogICogICAgIHNpbXBsZSB3YXkgdG8gZG8gdGhpcyBpcyB0aHJvdWdoIHRoZSBzeXN0ZW0gZmFjaWxpdGllcyBzdWNoIGFzCi0gKiAgICAge0BsaW5rIGFuZHJvaWQudmlldy5WaWV3I3NldEJhY2tncm91bmREcmF3YWJsZShEcmF3YWJsZSl9IGFuZAorICogICAgIHtAbGluayBhbmRyb2lkLnZpZXcuVmlldyNzZXRCYWNrZ3JvdW5kKERyYXdhYmxlKX0gYW5kCiAgKiAgICAge0BsaW5rIGFuZHJvaWQud2lkZ2V0LkltYWdlVmlld30uCiAgKiA8L3VsPgogICoKQEAgLTExNiw2ICsxMjAsMjAgQEAKICAqIGRvY3VtZW50LjwvcD48L2Rpdj4KICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIERyYXdhYmxlIHsKKyAgICAvKioKKyAgICAgKiBIb3RzcG90IGlkZW50aWZpZXIgbWFzayBmb3IgdHJhY2tpbmcgdG91Y2ggcG9pbnRzLgorICAgICAqCisgICAgICogQGhpZGUgdW50aWwgaG90c3BvdCBBUElzIGFyZSBmaW5hbGl6ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIT1RTUE9UX1RPVUNIX01BU0sgPSAweEZGOworCisgICAgLyoqCisgICAgICogSG90c3BvdCBpZGVudGlmaWVyIGZvciB0cmFja2luZyBrZXlib2FyZCBmb2N1cy4KKyAgICAgKgorICAgICAqIEBoaWRlIHVudGlsIGhvdHNwb3QgQVBJcyBhcmUgZmluYWxpemVkCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSE9UU1BPVF9GT0NVUyA9IDB4MTAwOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVjdCBaRVJPX0JPVU5EU19SRUNUID0gbmV3IFJlY3QoKTsKIAogICAgIHByaXZhdGUgaW50W10gbVN0YXRlU2V0ID0gU3RhdGVTZXQuV0lMRF9DQVJEOwpAQCAtMTI0LDE2ICsxNDIsOTYgQEAKICAgICBwcml2YXRlIFJlY3QgbUJvdW5kcyA9IFpFUk9fQk9VTkRTX1JFQ1Q7ICAvLyBsYXppbHkgYmVjb21lcyBhIG5ldyBSZWN0KCkKICAgICBwcml2YXRlIFdlYWtSZWZlcmVuY2U8Q2FsbGJhY2s+IG1DYWxsYmFjayA9IG51bGw7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1WaXNpYmxlID0gdHJ1ZTsKKyAgICBwcml2YXRlIERpc3BsYXlMaXN0IG1EaXNwbGF5TGlzdDsKIAogICAgIHByaXZhdGUgaW50IG1MYXlvdXREaXJlY3Rpb247CiAKICAgICAvKioKICAgICAgKiBEcmF3IGluIGl0cyBib3VuZHMgKHNldCB2aWEgc2V0Qm91bmRzKSByZXNwZWN0aW5nIG9wdGlvbmFsIGVmZmVjdHMgc3VjaAogICAgICAqIGFzIGFscGhhIChzZXQgdmlhIHNldEFscGhhKSBhbmQgY29sb3IgZmlsdGVyIChzZXQgdmlhIHNldENvbG9yRmlsdGVyKS4KKyAgICAgKiA8cD4KKyAgICAgKiBPdmVycmlkaW5nIHRoaXMgbWV0aG9kIHdpbGwgcHJldmVudCBjYWNoaW5nIG9wdGltaXphdGlvbnMuIFRvIGVuYWJsZQorICAgICAqIG9wdGltaXphdGlvbnMsIG92ZXJyaWRlIHtAbGluayAjb25EcmF3fSBpbnN0ZWFkLgogICAgICAqCiAgICAgICogQHBhcmFtIGNhbnZhcyBUaGUgY2FudmFzIHRvIGRyYXcgaW50bwogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGRyYXcoQ2FudmFzIGNhbnZhcyk7CisgICAgcHVibGljIHZvaWQgZHJhdyhDYW52YXMgY2FudmFzKSB7CisgICAgICAgIGlmIChjYW52YXMgIT0gbnVsbCAmJiBjYW52YXMuaXNIYXJkd2FyZUFjY2VsZXJhdGVkKCkpIHsKKyAgICAgICAgICAgIGZpbmFsIEhhcmR3YXJlQ2FudmFzIGhhcmR3YXJlQ2FudmFzID0gKEhhcmR3YXJlQ2FudmFzKSBjYW52YXM7CisgICAgICAgICAgICBmaW5hbCBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCA9IGdldERpc3BsYXlMaXN0KGhhcmR3YXJlQ2FudmFzKTsKKyAgICAgICAgICAgIGlmIChkaXNwbGF5TGlzdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IHJlc3RvcmVDb3VudCA9IGhhcmR3YXJlQ2FudmFzLnNhdmUoQ2FudmFzLk1BVFJJWF9TQVZFX0ZMQUcpOworICAgICAgICAgICAgICAgIGhhcmR3YXJlQ2FudmFzLnRyYW5zbGF0ZShtQm91bmRzLmxlZnQsIG1Cb3VuZHMudG9wKTsKKyAgICAgICAgICAgICAgICBoYXJkd2FyZUNhbnZhcy5kcmF3RGlzcGxheUxpc3QoZGlzcGxheUxpc3QpOworICAgICAgICAgICAgICAgIGhhcmR3YXJlQ2FudmFzLnJlc3RvcmVUb0NvdW50KHJlc3RvcmVDb3VudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb25EcmF3KGNhbnZhcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRHJhdyBpbiBpdHMgYm91bmRzIChzZXQgdmlhIHNldEJvdW5kcykgcmVzcGVjdGluZyBvcHRpb25hbCBlZmZlY3RzIHN1Y2gKKyAgICAgKiBhcyBhbHBoYSAoc2V0IHZpYSBzZXRBbHBoYSkgYW5kIGNvbG9yIGZpbHRlciAoc2V0IHZpYSBzZXRDb2xvckZpbHRlcikuCisgICAgICogPHA+CisgICAgICogT3ZlcnJpZGluZyB0aGlzIG1ldGhvZCwgcmF0aGVyIHRoYW4ge0BsaW5rICNkcmF3fSwgZW5hYmxlcyBjYWNoaW5nCisgICAgICogb3B0aW1pemF0aW9ucyB0aGF0IGF2b2lkIHJlLWRyYXdpbmcgd2hlbiB1bm5lY2Vzc2FyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjYW52YXMgVGhlIGNhbnZhcyB0byBkcmF3IGludG8KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkRyYXcoQ2FudmFzIGNhbnZhcykgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkRyYXdhYmxlIHN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgZWl0aGVyIGRyYXcgb3Igb25EcmF3Iik7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyBhIGRpc3BsYXkgbGlzdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGRyYXcgdGhpcyBkcmF3YWJsZSBhZ2FpbiB3aXRob3V0CisgICAgICogaW52b2tpbmcgaXRzIGRyYXcgbWV0aG9kLgorICAgICAqCisgICAgICogQHBhcmFtIGhhcmR3YXJlQ2FudmFzIFRoZSBoYXJkd2FyZSBjYW52YXMuCisgICAgICogQHJldHVybiBBIERpc3BsYXlMaXN0IHJlYWR5IHRvIHJlcGxheSwgb3IgbnVsbCBpZiBjYWNoaW5nIGlzIG5vdCBlbmFibGVkLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHJpdmF0ZSBEaXNwbGF5TGlzdCBnZXREaXNwbGF5TGlzdChIYXJkd2FyZUNhbnZhcyBoYXJkd2FyZUNhbnZhcykgeworICAgICAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCA9IG1EaXNwbGF5TGlzdDsKKyAgICAgICAgaWYgKGRpc3BsYXlMaXN0ICE9IG51bGwgJiYgZGlzcGxheUxpc3QuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSBkaXNwbGF5IGxpc3QgcHJldmlvdXNseSBnZW5lcmF0ZWQKKyAgICAgICAgICAgIC8vIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gaGFyZHdhcmUgY2FudmFzLiAgVGhhdCBtaWdodCBub3QgYmUgdHJ1ZQorICAgICAgICAgICAgLy8gaWYgd2Ugc3RhcnQgdXNpbmcgbXVsdGlwbGUgZGlmZmVyZW50IHR5cGVzIG9mIGhhcmR3YXJlIGNhbnZhcworICAgICAgICAgICAgLy8gaW4gdGhlIHN5c3RlbSBzb21lZGF5LgorICAgICAgICAgICAgcmV0dXJuIGRpc3BsYXlMaXN0OworICAgICAgICB9CisKKyAgICAgICAgZGlzcGxheUxpc3QgPSBEaXNwbGF5TGlzdC5jcmVhdGUoZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworICAgICAgICBtRGlzcGxheUxpc3QgPSBkaXNwbGF5TGlzdDsKKworICAgICAgICBmaW5hbCBSZWN0IGJvdW5kcyA9IG1Cb3VuZHM7CisgICAgICAgIGZpbmFsIGludCB3aWR0aCA9IGJvdW5kcy53aWR0aCgpOworICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCgpOworICAgICAgICBmaW5hbCBIYXJkd2FyZUNhbnZhcyBjYW52YXMgPSBkaXNwbGF5TGlzdC5zdGFydCh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgY2FudmFzLm9uUHJlRHJhdyhudWxsKTsKKworICAgICAgICAvLyBEcmF3IHRoZSBkaXNwbGF5IGxpc3Qgd2l0aCBvcmlnaW4gKDAsMCkgc28gdGhhdCBpZiB0aGUgcG9zaXRpb24KKyAgICAgICAgLy8gY2hhbmdlcyB0aGVuIHdlIGNhbiB0cmFuc2xhdGUgd2l0aG91dCByZWNyZWF0aW5nIHRoZSBkaXNwbGF5IGxpc3QuCisgICAgICAgIGZpbmFsIGludCByZXN0b3JlQ291bnQgPSBjYW52YXMuc2F2ZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgtYm91bmRzLmxlZnQsIC1ib3VuZHMudG9wKTsKKyAgICAgICAgICAgIG9uRHJhdyhjYW52YXMpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgY2FudmFzLnJlc3RvcmVUb0NvdW50KHJlc3RvcmVDb3VudCk7CisgICAgICAgICAgICBjYW52YXMub25Qb3N0RHJhdygpOworICAgICAgICAgICAgZGlzcGxheUxpc3QuZW5kKCk7CisgICAgICAgIH0KKworICAgICAgICBkaXNwbGF5TGlzdC5zZXRMZWZ0VG9wUmlnaHRCb3R0b20oMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGRpc3BsYXlMaXN0LnNldENsaXBUb0JvdW5kcyhmYWxzZSk7CisgICAgICAgIHJldHVybiBkaXNwbGF5TGlzdDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaW52YWxpZGF0ZURpc3BsYXlMaXN0KCkgeworICAgICAgICBtRGlzcGxheUxpc3QgPSBudWxsOworICAgIH0KIAogICAgIC8qKgogICAgICAqIFNwZWNpZnkgYSBib3VuZGluZyByZWN0YW5nbGUgZm9yIHRoZSBEcmF3YWJsZS4gVGhpcyBpcyB3aGVyZSB0aGUgZHJhd2FibGUKQEAgLTE0OCwxMCArMjQ2LDExIEBACiAKICAgICAgICAgaWYgKG9sZEJvdW5kcy5sZWZ0ICE9IGxlZnQgfHwgb2xkQm91bmRzLnRvcCAhPSB0b3AgfHwKICAgICAgICAgICAgICAgICBvbGRCb3VuZHMucmlnaHQgIT0gcmlnaHQgfHwgb2xkQm91bmRzLmJvdHRvbSAhPSBib3R0b20pIHsKLSAgICAgICAgICAgIGlmICghb2xkQm91bmRzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIC8vIGZpcnN0IGludmFsaWRhdGUgdGhlIHByZXZpb3VzIGJvdW5kcwotICAgICAgICAgICAgICAgIGludmFsaWRhdGVTZWxmKCk7CisgICAgICAgICAgICBpZiAob2xkQm91bmRzLnJpZ2h0IC0gb2xkQm91bmRzLmxlZnQgIT0gcmlnaHQgLSBsZWZ0CisgICAgICAgICAgICAgICAgICAgIHx8IG9sZEJvdW5kcy5ib3R0b20gLSBvbGRCb3VuZHMudG9wICE9IGJvdHRvbSAtIHRvcCkgeworICAgICAgICAgICAgICAgIGludmFsaWRhdGVEaXNwbGF5TGlzdCgpOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBtQm91bmRzLnNldChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgICAgICAgICAgb25Cb3VuZHNDaGFuZ2UobUJvdW5kcyk7CiAgICAgICAgIH0KQEAgLTMzOSw2ICs0MzgsOCBAQAogICAgICAqIEBzZWUgI3NldENhbGxiYWNrKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUuQ2FsbGJhY2spIAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGVTZWxmKCkgeworICAgICAgICBpbnZhbGlkYXRlRGlzcGxheUxpc3QoKTsKKwogICAgICAgICBmaW5hbCBDYWxsYmFjayBjYWxsYmFjayA9IGdldENhbGxiYWNrKCk7CiAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7CiAgICAgICAgICAgICBjYWxsYmFjay5pbnZhbGlkYXRlRHJhd2FibGUodGhpcyk7CkBAIC0zOTksNyArNTAwLDcgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TGF5b3V0RGlyZWN0aW9uKGludCBsYXlvdXREaXJlY3Rpb24pIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRMYXlvdXREaXJlY3Rpb24oQFZpZXcuUmVzb2x2ZWRMYXlvdXREaXIgaW50IGxheW91dERpcmVjdGlvbikgewogICAgICAgICBpZiAoZ2V0TGF5b3V0RGlyZWN0aW9uKCkgIT0gbGF5b3V0RGlyZWN0aW9uKSB7CiAgICAgICAgICAgICBtTGF5b3V0RGlyZWN0aW9uID0gbGF5b3V0RGlyZWN0aW9uOwogICAgICAgICB9CkBAIC00MjMsOSArNTI0LDkgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTcGVjaWZ5IGFuIG9wdGlvbmFsIGNvbG9yRmlsdGVyIGZvciB0aGUgZHJhd2FibGUuIFBhc3MgbnVsbCB0byByZW1vdmUKLSAgICAgKiBhbnkgZmlsdGVycy4KLSAgICAqLworICAgICAqIFNwZWNpZnkgYW4gb3B0aW9uYWwgY29sb3IgZmlsdGVyIGZvciB0aGUgZHJhd2FibGUuIFBhc3MgbnVsbCB0byByZW1vdmUKKyAgICAgKiBhbnkgZXhpc3RpbmcgY29sb3IgZmlsdGVyLgorICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldENvbG9yRmlsdGVyKENvbG9yRmlsdGVyIGNmKTsKIAogICAgIC8qKgpAQCAtNDM4LDE4ICs1MzksNjEgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTcGVjaWZ5IGEgY29sb3IgYW5kIHBvcnRlcmR1ZmYgbW9kZSB0byBiZSB0aGUgY29sb3JmaWx0ZXIgZm9yIHRoaXMKKyAgICAgKiBTcGVjaWZ5IGEgY29sb3IgYW5kIFBvcnRlci1EdWZmIG1vZGUgdG8gYmUgdGhlIGNvbG9yIGZpbHRlciBmb3IgdGhpcwogICAgICAqIGRyYXdhYmxlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbG9yRmlsdGVyKGludCBjb2xvciwgUG9ydGVyRHVmZi5Nb2RlIG1vZGUpIHsKICAgICAgICAgc2V0Q29sb3JGaWx0ZXIobmV3IFBvcnRlckR1ZmZDb2xvckZpbHRlcihjb2xvciwgbW9kZSkpOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGhlIGNvbG9yIGZpbHRlciBmb3IgdGhpcyBkcmF3YWJsZS4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhckNvbG9yRmlsdGVyKCkgewogICAgICAgICBzZXRDb2xvckZpbHRlcihudWxsKTsKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZHJhd2FibGUgc3VwcG9ydHMgaG90c3BvdHMuIEhvdHNwb3RzIGFyZSB1bmlxdWVseQorICAgICAqIGlkZW50aWZpYWJsZSBjb29yZGluYXRlcyB0aGUgbWF5IGJlIGFkZGVkLCB1cGRhdGVkIGFuZCByZW1vdmVkIHdpdGhpbiB0aGUKKyAgICAgKiBkcmF3YWJsZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBob3RzcG90cyBhcmUgc3VwcG9ydGVkCisgICAgICogQHNlZSAjc2V0SG90c3BvdChpbnQsIGZsb2F0LCBmbG9hdCkKKyAgICAgKiBAc2VlICNyZW1vdmVIb3RzcG90KGludCkKKyAgICAgKiBAc2VlICNjbGVhckhvdHNwb3RzKCkKKyAgICAgKiBAaGlkZSB1bnRpbCBob3RzcG90IEFQSXMgYXJlIGZpbmFsaXplZAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzSG90c3BvdHMoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgYSBob3RzcG90J3MgbG9jYXRpb24gd2l0aGluIHRoZSBkcmF3YWJsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpZCB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGhvdHNwb3QKKyAgICAgKiBAcGFyYW0geCB4LWNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0geSB5LWNvb3JkaW5hdGUKKyAgICAgKiBAaGlkZSB1bnRpbCBob3RzcG90IEFQSXMgYXJlIGZpbmFsaXplZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEhvdHNwb3QoaW50IGlkLCBmbG9hdCB4LCBmbG9hdCB5KSB7fQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGhvdHNwb3QgZnJvbSB0aGUgZHJhd2FibGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaWQgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBob3RzcG90CisgICAgICogQGhpZGUgdW50aWwgaG90c3BvdCBBUElzIGFyZSBmaW5hbGl6ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZW1vdmVIb3RzcG90KGludCBpZCkge30KKworICAgIC8qKgorICAgICAqIFJlbW92ZXMgYWxsIGhvdHNwb3RzIGZyb20gdGhlIGRyYXdhYmxlLgorICAgICAqCisgICAgICogQGhpZGUgdW50aWwgaG90c3BvdCBBUElzIGFyZSBmaW5hbGl6ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjbGVhckhvdHNwb3RzKCkge30KKworICAgIC8qKgogICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgdmlldyB3aWxsIGNoYW5nZSBpdHMgYXBwZWFyYW5jZSBiYXNlZCBvbiBzdGF0ZS4KICAgICAgKiBDbGllbnRzIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpcyBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlCiAgICAgICogdGhlaXIgc3RhdGUgYW5kIGNhbGwgc2V0U3RhdGUuCkBAIC05MDIsNiArMTA0Niw4IEBACiAgICAgICAgICAgICBkcmF3YWJsZSA9IG5ldyBMYXllckRyYXdhYmxlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInRyYW5zaXRpb24iKSkgewogICAgICAgICAgICAgZHJhd2FibGUgPSBuZXcgVHJhbnNpdGlvbkRyYXdhYmxlKCk7CisgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInJldmVhbCIpKSB7CisgICAgICAgICAgICBkcmF3YWJsZSA9IG5ldyBSZXZlYWxEcmF3YWJsZSgpOwogICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJjb2xvciIpKSB7CiAgICAgICAgICAgICBkcmF3YWJsZSA9IG5ldyBDb2xvckRyYXdhYmxlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInNoYXBlIikpIHsKQEAgLTEwMzIsNyArMTE3OCw3IEBACiAKICAgICAvKioKICAgICAgKiBSZXR1cm4gYSB7QGxpbmsgQ29uc3RhbnRTdGF0ZX0gaW5zdGFuY2UgdGhhdCBob2xkcyB0aGUgc2hhcmVkIHN0YXRlIG9mIHRoaXMgRHJhd2FibGUuCi0gICAgICpxCisgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBDb25zdGFudFN0YXRlIGFzc29jaWF0ZWQgdG8gdGhhdCBEcmF3YWJsZS4KICAgICAgKiBAc2VlIENvbnN0YW50U3RhdGUKICAgICAgKiBAc2VlIERyYXdhYmxlI211dGF0ZSgpCkBAIC0xMDUwLDUgKzExOTYsMTcgQEAKIAogICAgICAgICByZXR1cm4gbmV3IEJpdG1hcERyYXdhYmxlKHJlcywgYm0pOwogICAgIH0KKworICAgIC8qKgorICAgICAqIFBhcnNlcyBhIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmYuTW9kZX0gZnJvbSBhIGNvbG9yRmlsdGVyTW9kZQorICAgICAqIGF0dHJpYnV0ZSdzIGVudW0gdmFsdWUuCisgICAgICovCisgICAgc3RhdGljIFBvcnRlckR1ZmYuTW9kZSBwYXJzZUNvbG9yRmlsdGVyTW9kZShpbnQgdmFsdWUpIHsKKyAgICAgICAgZmluYWwgUG9ydGVyRHVmZi5Nb2RlW10gbW9kZXMgPSBQb3J0ZXJEdWZmLk1vZGUudmFsdWVzKCk7CisgICAgICAgIGlmICh2YWx1ZSA+PSAwICYmIHZhbHVlIDwgbW9kZXMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gbW9kZXNbdmFsdWVdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlQ29udGFpbmVyLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGVDb250YWluZXIuamF2YQppbmRleCBhYWM3ODc2Li42MTQ0ZTY5IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGVDb250YWluZXIuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGVDb250YWluZXIuamF2YQpAQCAtNDksNyArNDksOSBAQAogICAgIHByaXZhdGUgRHJhd2FibGVDb250YWluZXJTdGF0ZSBtRHJhd2FibGVDb250YWluZXJTdGF0ZTsKICAgICBwcml2YXRlIERyYXdhYmxlIG1DdXJyRHJhd2FibGU7CiAgICAgcHJpdmF0ZSBpbnQgbUFscGhhID0gMHhGRjsKLSAgICBwcml2YXRlIENvbG9yRmlsdGVyIG1Db2xvckZpbHRlcjsKKworICAgIC8qKiBXaGV0aGVyIHNldEFscGhhKCkgaGFzIGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UuICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNBbHBoYTsKIAogICAgIHByaXZhdGUgaW50IG1DdXJJbmRleCA9IC0xOwogICAgIHByaXZhdGUgYm9vbGVhbiBtTXV0YXRlZDsKQEAgLTExOCw3ICsxMjAsOCBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0QWxwaGEoaW50IGFscGhhKSB7Ci0gICAgICAgIGlmIChtQWxwaGEgIT0gYWxwaGEpIHsKKyAgICAgICAgaWYgKCFtSGFzQWxwaGEgfHwgbUFscGhhICE9IGFscGhhKSB7CisgICAgICAgICAgICBtSGFzQWxwaGEgPSB0cnVlOwogICAgICAgICAgICAgbUFscGhhID0gYWxwaGE7CiAgICAgICAgICAgICBpZiAobUN1cnJEcmF3YWJsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1FbnRlckFuaW1hdGlvbkVuZCA9PSAwKSB7CkBAIC0xNDcsOCArMTUwLDExIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRDb2xvckZpbHRlcihDb2xvckZpbHRlciBjZikgewotICAgICAgICBpZiAobUNvbG9yRmlsdGVyICE9IGNmKSB7Ci0gICAgICAgICAgICBtQ29sb3JGaWx0ZXIgPSBjZjsKKyAgICAgICAgbURyYXdhYmxlQ29udGFpbmVyU3RhdGUubUhhc0NvbG9yRmlsdGVyID0gdHJ1ZTsKKworICAgICAgICBpZiAobURyYXdhYmxlQ29udGFpbmVyU3RhdGUubUNvbG9yRmlsdGVyICE9IGNmKSB7CisgICAgICAgICAgICBtRHJhd2FibGVDb250YWluZXJTdGF0ZS5tQ29sb3JGaWx0ZXIgPSBjZjsKKwogICAgICAgICAgICAgaWYgKG1DdXJyRHJhd2FibGUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1DdXJyRHJhd2FibGUubXV0YXRlKCkuc2V0Q29sb3JGaWx0ZXIoY2YpOwogICAgICAgICAgICAgfQpAQCAtMTkwLDkgKzE5NiwxMSBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0QXV0b01pcnJvcmVkKGJvb2xlYW4gbWlycm9yZWQpIHsKLSAgICAgICAgbURyYXdhYmxlQ29udGFpbmVyU3RhdGUubUF1dG9NaXJyb3JlZCA9IG1pcnJvcmVkOwotICAgICAgICBpZiAobUN1cnJEcmF3YWJsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQ3VyckRyYXdhYmxlLm11dGF0ZSgpLnNldEF1dG9NaXJyb3JlZChtRHJhd2FibGVDb250YWluZXJTdGF0ZS5tQXV0b01pcnJvcmVkKTsKKyAgICAgICAgaWYgKG1EcmF3YWJsZUNvbnRhaW5lclN0YXRlLm1BdXRvTWlycm9yZWQgIT0gbWlycm9yZWQpIHsKKyAgICAgICAgICAgIG1EcmF3YWJsZUNvbnRhaW5lclN0YXRlLm1BdXRvTWlycm9yZWQgPSBtaXJyb3JlZDsKKyAgICAgICAgICAgIGlmIChtQ3VyckRyYXdhYmxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtQ3VyckRyYXdhYmxlLm11dGF0ZSgpLnNldEF1dG9NaXJyb3JlZChtRHJhd2FibGVDb250YWluZXJTdGF0ZS5tQXV0b01pcnJvcmVkKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMjExLDcgKzIxOSw5IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKG1DdXJyRHJhd2FibGUgIT0gbnVsbCkgewogICAgICAgICAgICAgbUN1cnJEcmF3YWJsZS5qdW1wVG9DdXJyZW50U3RhdGUoKTsKLSAgICAgICAgICAgIG1DdXJyRHJhd2FibGUubXV0YXRlKCkuc2V0QWxwaGEobUFscGhhKTsKKyAgICAgICAgICAgIGlmIChtSGFzQWxwaGEpIHsKKyAgICAgICAgICAgICAgICBtQ3VyckRyYXdhYmxlLm11dGF0ZSgpLnNldEFscGhhKG1BbHBoYSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1FeGl0QW5pbWF0aW9uRW5kICE9IDApIHsKICAgICAgICAgICAgIG1FeGl0QW5pbWF0aW9uRW5kID0gMDsKQEAgLTM1NCwxMiArMzY0LDE0IEBACiAgICAgICAgICAgICAgICAgZC5tdXRhdGUoKTsKICAgICAgICAgICAgICAgICBpZiAobURyYXdhYmxlQ29udGFpbmVyU3RhdGUubUVudGVyRmFkZUR1cmF0aW9uID4gMCkgewogICAgICAgICAgICAgICAgICAgICBtRW50ZXJBbmltYXRpb25FbmQgPSBub3cgKyBtRHJhd2FibGVDb250YWluZXJTdGF0ZS5tRW50ZXJGYWRlRHVyYXRpb247Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1IYXNBbHBoYSkgewogICAgICAgICAgICAgICAgICAgICBkLnNldEFscGhhKG1BbHBoYSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtRHJhd2FibGVDb250YWluZXJTdGF0ZS5tSGFzQ29sb3JGaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRDb2xvckZpbHRlcihtRHJhd2FibGVDb250YWluZXJTdGF0ZS5tQ29sb3JGaWx0ZXIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkLnNldFZpc2libGUoaXNWaXNpYmxlKCksIHRydWUpOwogICAgICAgICAgICAgICAgIGQuc2V0RGl0aGVyKG1EcmF3YWJsZUNvbnRhaW5lclN0YXRlLm1EaXRoZXIpOwotICAgICAgICAgICAgICAgIGQuc2V0Q29sb3JGaWx0ZXIobUNvbG9yRmlsdGVyKTsKICAgICAgICAgICAgICAgICBkLnNldFN0YXRlKGdldFN0YXRlKCkpOwogICAgICAgICAgICAgICAgIGQuc2V0TGV2ZWwoZ2V0TGV2ZWwoKSk7CiAgICAgICAgICAgICAgICAgZC5zZXRCb3VuZHMoZ2V0Qm91bmRzKCkpOwpAQCAtMzk1LDYgKzQwNyw4IEBACiAgICAgfQogCiAgICAgdm9pZCBhbmltYXRlKGJvb2xlYW4gc2NoZWR1bGUpIHsKKyAgICAgICAgbUhhc0FscGhhID0gdHJ1ZTsKKwogICAgICAgICBmaW5hbCBsb25nIG5vdyA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOwogICAgICAgICBib29sZWFuIGFuaW1hdGluZyA9IGZhbHNlOwogICAgICAgICBpZiAobUN1cnJEcmF3YWJsZSAhPSBudWxsKSB7CkBAIC01MDcsNiArNTIxLDkgQEAKIAogICAgICAgICBib29sZWFuIG1BdXRvTWlycm9yZWQ7CiAKKyAgICAgICAgQ29sb3JGaWx0ZXIgbUNvbG9yRmlsdGVyOworICAgICAgICBib29sZWFuIG1IYXNDb2xvckZpbHRlcjsKKwogICAgICAgICBEcmF3YWJsZUNvbnRhaW5lclN0YXRlKERyYXdhYmxlQ29udGFpbmVyU3RhdGUgb3JpZywgRHJhd2FibGVDb250YWluZXIgb3duZXIsCiAgICAgICAgICAgICAgICAgUmVzb3VyY2VzIHJlcykgewogICAgICAgICAgICAgbU93bmVyID0gb3duZXI7CkBAIC01MjcsNiArNTQ0LDggQEAKICAgICAgICAgICAgICAgICBtRW50ZXJGYWRlRHVyYXRpb24gPSBvcmlnLm1FbnRlckZhZGVEdXJhdGlvbjsKICAgICAgICAgICAgICAgICBtRXhpdEZhZGVEdXJhdGlvbiA9IG9yaWcubUV4aXRGYWRlRHVyYXRpb247CiAgICAgICAgICAgICAgICAgbUF1dG9NaXJyb3JlZCA9IG9yaWcubUF1dG9NaXJyb3JlZDsKKyAgICAgICAgICAgICAgICBtQ29sb3JGaWx0ZXIgPSBvcmlnLm1Db2xvckZpbHRlcjsKKyAgICAgICAgICAgICAgICBtSGFzQ29sb3JGaWx0ZXIgPSBvcmlnLm1IYXNDb2xvckZpbHRlcjsKIAogICAgICAgICAgICAgICAgIC8vIENsb25pbmcgdGhlIGZvbGxvd2luZyB2YWx1ZXMgbWF5IHJlcXVpcmUgY3JlYXRpbmcgZnV0dXJlcy4KICAgICAgICAgICAgICAgICBtQ29uc3RhbnRQYWRkaW5nID0gb3JpZy5nZXRDb25zdGFudFBhZGRpbmcoKTsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9HcmFkaWVudERyYXdhYmxlLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvR3JhZGllbnREcmF3YWJsZS5qYXZhCmluZGV4IGIzNDA3NzcuLjZhOTQ1NGMgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9HcmFkaWVudERyYXdhYmxlLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0dyYWRpZW50RHJhd2FibGUuamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGU7CiAKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKQEAgLTI0LDEyICsyNSwxMiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuRGFzaFBhdGhFZmZlY3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5MaW5lYXJHcmFkaWVudDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGF0aDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpeGVsRm9ybWF0OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmFkaWFsR3JhZGllbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TaGFkZXI7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYXRoOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmFkaWFsR3JhZGllbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Td2VlcEdyYWRpZW50OwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKQEAgLTIzMyw2ICsyMzQsMjMgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiA8cD5TZXQgdGhlIHN0cm9rZSB3aWR0aCBhbmQgY29sb3Igc3RhdGUgbGlzdCBmb3IgdGhlIGRyYXdhYmxlLiBJZiB3aWR0aAorICAgICAqIGlzIHplcm8sIHRoZW4gbm8gc3Ryb2tlIGlzIGRyYXduLjwvcD4KKyAgICAgKiA8cD48c3Ryb25nPk5vdGU8L3N0cm9uZz46IGNoYW5naW5nIHRoaXMgcHJvcGVydHkgd2lsbCBhZmZlY3QgYWxsIGluc3RhbmNlcworICAgICAqIG9mIGEgZHJhd2FibGUgbG9hZGVkIGZyb20gYSByZXNvdXJjZS4gSXQgaXMgcmVjb21tZW5kZWQgdG8gaW52b2tlCisgICAgICoge0BsaW5rICNtdXRhdGUoKX0gYmVmb3JlIGNoYW5naW5nIHRoaXMgcHJvcGVydHkuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHdpZHRoIFRoZSB3aWR0aCBpbiBwaXhlbHMgb2YgdGhlIHN0cm9rZQorICAgICAqIEBwYXJhbSBjb2xvclN0YXRlTGlzdCBUaGUgY29sb3Igc3RhdGUgbGlzdCBvZiB0aGUgc3Ryb2tlCisgICAgICoKKyAgICAgKiBAc2VlICNtdXRhdGUoKQorICAgICAqIEBzZWUgI3NldFN0cm9rZShpbnQsIENvbG9yU3RhdGVMaXN0LCBmbG9hdCwgZmxvYXQpCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U3Ryb2tlKGludCB3aWR0aCwgQ29sb3JTdGF0ZUxpc3QgY29sb3JTdGF0ZUxpc3QpIHsKKyAgICAgICAgc2V0U3Ryb2tlKHdpZHRoLCBjb2xvclN0YXRlTGlzdCwgMCwgMCk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogPHA+U2V0IHRoZSBzdHJva2Ugd2lkdGggYW5kIGNvbG9yIGZvciB0aGUgZHJhd2FibGUuIElmIHdpZHRoIGlzIHplcm8sCiAgICAgICogdGhlbiBubyBzdHJva2UgaXMgZHJhd24uIFRoaXMgbWV0aG9kIGNhbiBhbHNvIGJlIHVzZWQgdG8gZGFzaCB0aGUgc3Ryb2tlLjwvcD4KICAgICAgKiA8cD48c3Ryb25nPk5vdGU8L3N0cm9uZz46IGNoYW5naW5nIHRoaXMgcHJvcGVydHkgd2lsbCBhZmZlY3QgYWxsIGluc3RhbmNlcwpAQCAtMjQ5LDcgKzI2NywzOSBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFN0cm9rZShpbnQgd2lkdGgsIGludCBjb2xvciwgZmxvYXQgZGFzaFdpZHRoLCBmbG9hdCBkYXNoR2FwKSB7CiAgICAgICAgIG1HcmFkaWVudFN0YXRlLnNldFN0cm9rZSh3aWR0aCwgY29sb3IsIGRhc2hXaWR0aCwgZGFzaEdhcCk7CisgICAgICAgIHNldFN0cm9rZUludGVybmFsKHdpZHRoLCBjb2xvciwgZGFzaFdpZHRoLCBkYXNoR2FwKTsKKyAgICB9CiAKKyAgICAvKioKKyAgICAgKiA8cD5TZXQgdGhlIHN0cm9rZSB3aWR0aCBhbmQgY29sb3Igc3RhdGUgbGlzdCBmb3IgdGhlIGRyYXdhYmxlLiBJZiB3aWR0aAorICAgICAqIGlzIHplcm8sIHRoZW4gbm8gc3Ryb2tlIGlzIGRyYXduLiBUaGlzIG1ldGhvZCBjYW4gYWxzbyBiZSB1c2VkIHRvIGRhc2gKKyAgICAgKiB0aGUgc3Ryb2tlLjwvcD4KKyAgICAgKiA8cD48c3Ryb25nPk5vdGU8L3N0cm9uZz46IGNoYW5naW5nIHRoaXMgcHJvcGVydHkgd2lsbCBhZmZlY3QgYWxsIGluc3RhbmNlcworICAgICAqIG9mIGEgZHJhd2FibGUgbG9hZGVkIGZyb20gYSByZXNvdXJjZS4gSXQgaXMgcmVjb21tZW5kZWQgdG8gaW52b2tlCisgICAgICoge0BsaW5rICNtdXRhdGUoKX0gYmVmb3JlIGNoYW5naW5nIHRoaXMgcHJvcGVydHkuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHdpZHRoIFRoZSB3aWR0aCBpbiBwaXhlbHMgb2YgdGhlIHN0cm9rZQorICAgICAqIEBwYXJhbSBjb2xvclN0YXRlTGlzdCBUaGUgY29sb3Igc3RhdGUgbGlzdCBvZiB0aGUgc3Ryb2tlCisgICAgICogQHBhcmFtIGRhc2hXaWR0aCBUaGUgbGVuZ3RoIGluIHBpeGVscyBvZiB0aGUgZGFzaGVzLCBzZXQgdG8gMCB0byBkaXNhYmxlIGRhc2hlcworICAgICAqIEBwYXJhbSBkYXNoR2FwIFRoZSBnYXAgaW4gcGl4ZWxzIGJldHdlZW4gZGFzaGVzCisgICAgICoKKyAgICAgKiBAc2VlICNtdXRhdGUoKQorICAgICAqIEBzZWUgI3NldFN0cm9rZShpbnQsIENvbG9yU3RhdGVMaXN0KQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFN0cm9rZSgKKyAgICAgICAgICAgIGludCB3aWR0aCwgQ29sb3JTdGF0ZUxpc3QgY29sb3JTdGF0ZUxpc3QsIGZsb2F0IGRhc2hXaWR0aCwgZmxvYXQgZGFzaEdhcCkgeworICAgICAgICBpZiAoY29sb3JTdGF0ZUxpc3QgPT0gbnVsbCkgeworICAgICAgICAgICAgc2V0U3Ryb2tlKHdpZHRoLCBDb2xvci5UUkFOU1BBUkVOVCwgZGFzaFdpZHRoLCBkYXNoR2FwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1HcmFkaWVudFN0YXRlLnNldFN0cm9rZSh3aWR0aCwgY29sb3JTdGF0ZUxpc3QsIGRhc2hXaWR0aCwgZGFzaEdhcCk7CisKKyAgICAgICAgICAgIGZpbmFsIGludFtdIHN0YXRlU2V0ID0gZ2V0U3RhdGUoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBjb2xvciA9IGNvbG9yU3RhdGVMaXN0LmdldENvbG9yRm9yU3RhdGUoc3RhdGVTZXQsIDApOworICAgICAgICAgICAgc2V0U3Ryb2tlSW50ZXJuYWwod2lkdGgsIGNvbG9yLCBkYXNoV2lkdGgsIGRhc2hHYXApOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldFN0cm9rZUludGVybmFsKGludCB3aWR0aCwgaW50IGNvbG9yLCBmbG9hdCBkYXNoV2lkdGgsIGZsb2F0IGRhc2hHYXApIHsKICAgICAgICAgaWYgKG1TdHJva2VQYWludCA9PSBudWxsKSAgewogICAgICAgICAgICAgbVN0cm9rZVBhaW50ID0gbmV3IFBhaW50KFBhaW50LkFOVElfQUxJQVNfRkxBRyk7CiAgICAgICAgICAgICBtU3Ryb2tlUGFpbnQuc2V0U3R5bGUoUGFpbnQuU3R5bGUuU1RST0tFKTsKQEAgLTQyMiw3ICs0NzIsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRyYXcoQ2FudmFzIGNhbnZhcykgeworICAgIHByb3RlY3RlZCB2b2lkIG9uRHJhdyhDYW52YXMgY2FudmFzKSB7CiAgICAgICAgIGlmICghZW5zdXJlVmFsaWRSZWN0KCkpIHsKICAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZHJhdwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDc5LDcgKzUyOSw4IEBACiAgICAgICAgICAgICBtRmlsbFBhaW50LnNldEFscGhhKGN1cnJGaWxsQWxwaGEpOwogICAgICAgICAgICAgbUZpbGxQYWludC5zZXREaXRoZXIobURpdGhlcik7CiAgICAgICAgICAgICBtRmlsbFBhaW50LnNldENvbG9yRmlsdGVyKG1Db2xvckZpbHRlcik7Ci0gICAgICAgICAgICBpZiAobUNvbG9yRmlsdGVyICE9IG51bGwgJiYgIW1HcmFkaWVudFN0YXRlLm1IYXNTb2xpZENvbG9yKSB7CisgICAgICAgICAgICBpZiAobUNvbG9yRmlsdGVyICE9IG51bGwgJiYgIW1HcmFkaWVudFN0YXRlLm1IYXNTb2xpZENvbG9yCisgICAgICAgICAgICAgICAgICAgICYmIG1HcmFkaWVudFN0YXRlLm1Db2xvclN0YXRlTGlzdCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbUZpbGxQYWludC5zZXRDb2xvcihtQWxwaGEgPDwgMjQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGhhdmVTdHJva2UpIHsKQEAgLTYxMCw3ICs2NjEsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIDxwPkNoYW5nZXMgdGhpcyBkcmF3YmFsZSB0byB1c2UgYSBzaW5nbGUgY29sb3IgaW5zdGVhZCBvZiBhIGdyYWRpZW50LjwvcD4KKyAgICAgKiA8cD5DaGFuZ2VzIHRoaXMgZHJhd2FibGUgdG8gdXNlIGEgc2luZ2xlIGNvbG9yIGluc3RlYWQgb2YgYSBncmFkaWVudC48L3A+CiAgICAgICogPHA+PHN0cm9uZz5Ob3RlPC9zdHJvbmc+OiBjaGFuZ2luZyBjb2xvciB3aWxsIGFmZmVjdCBhbGwgaW5zdGFuY2VzCiAgICAgICogb2YgYSBkcmF3YWJsZSBsb2FkZWQgZnJvbSBhIHJlc291cmNlLiBJdCBpcyByZWNvbW1lbmRlZCB0byBpbnZva2UKICAgICAgKiB7QGxpbmsgI211dGF0ZSgpfSBiZWZvcmUgY2hhbmdpbmcgdGhlIGNvbG9yLjwvcD4KQEAgLTYyNiw2ICs2NzcsNzQgQEAKICAgICAgICAgaW52YWxpZGF0ZVNlbGYoKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBDaGFuZ2VzIHRoaXMgZHJhd2FibGUgdG8gdXNlIGEgc2luZ2xlIGNvbG9yIHN0YXRlIGxpc3QgaW5zdGVhZCBvZiBhCisgICAgICogZ3JhZGllbnQuIENhbGxpbmcgdGhpcyBtZXRob2Qgd2l0aCBhIG51bGwgYXJndW1lbnQgd2lsbCBjbGVhciB0aGUgY29sb3IKKyAgICAgKiBhbmQgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIHtAbGluayAjc2V0Q29sb3IoaW50KX0gd2l0aCB0aGUgYXJndW1lbnQKKyAgICAgKiB7QGxpbmsgQ29sb3IjVFJBTlNQQVJFTlR9LgorICAgICAqIDxwPgorICAgICAqIDxzdHJvbmc+Tm90ZTwvc3Ryb25nPjogY2hhbmdpbmcgY29sb3Igd2lsbCBhZmZlY3QgYWxsIGluc3RhbmNlcyBvZiBhCisgICAgICogZHJhd2FibGUgbG9hZGVkIGZyb20gYSByZXNvdXJjZS4gSXQgaXMgcmVjb21tZW5kZWQgdG8gaW52b2tlCisgICAgICoge0BsaW5rICNtdXRhdGUoKX0gYmVmb3JlIGNoYW5naW5nIHRoZSBjb2xvci48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gY29sb3JTdGF0ZUxpc3QgVGhlIGNvbG9yIHN0YXRlIGxpc3QgdXNlZCB0byBmaWxsIHRoZSBzaGFwZQorICAgICAqIEBzZWUgI211dGF0ZSgpCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q29sb3IoQ29sb3JTdGF0ZUxpc3QgY29sb3JTdGF0ZUxpc3QpIHsKKyAgICAgICAgaWYgKGNvbG9yU3RhdGVMaXN0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHNldENvbG9yKENvbG9yLlRSQU5TUEFSRU5UKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBjb2xvciA9IGNvbG9yU3RhdGVMaXN0LmdldENvbG9yRm9yU3RhdGUoZ2V0U3RhdGUoKSwgMCk7CisgICAgICAgICAgICBtR3JhZGllbnRTdGF0ZS5zZXRDb2xvclN0YXRlTGlzdChjb2xvclN0YXRlTGlzdCk7CisgICAgICAgICAgICBtRmlsbFBhaW50LnNldENvbG9yKGNvbG9yKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTZWxmKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBvblN0YXRlQ2hhbmdlKGludFtdIHN0YXRlU2V0KSB7CisgICAgICAgIGJvb2xlYW4gaW52YWxpZGF0ZVNlbGYgPSBmYWxzZTsKKworICAgICAgICBmaW5hbCBHcmFkaWVudFN0YXRlIHMgPSBtR3JhZGllbnRTdGF0ZTsKKyAgICAgICAgZmluYWwgQ29sb3JTdGF0ZUxpc3Qgc3RhdGVMaXN0ID0gcy5tQ29sb3JTdGF0ZUxpc3Q7CisgICAgICAgIGlmIChzdGF0ZUxpc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgZmluYWwgaW50IG5ld0NvbG9yID0gc3RhdGVMaXN0LmdldENvbG9yRm9yU3RhdGUoc3RhdGVTZXQsIDApOworICAgICAgICAgICAgZmluYWwgaW50IG9sZENvbG9yID0gbUZpbGxQYWludC5nZXRDb2xvcigpOworICAgICAgICAgICAgaWYgKG9sZENvbG9yICE9IG5ld0NvbG9yKSB7CisgICAgICAgICAgICAgICAgbUZpbGxQYWludC5zZXRDb2xvcihuZXdDb2xvcik7CisgICAgICAgICAgICAgICAgaW52YWxpZGF0ZVNlbGYgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgUGFpbnQgc3Ryb2tlUGFpbnQgPSBtU3Ryb2tlUGFpbnQ7CisgICAgICAgIGlmIChzdHJva2VQYWludCAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBDb2xvclN0YXRlTGlzdCBzdHJva2VTdGF0ZUxpc3QgPSBzLm1TdHJva2VDb2xvclN0YXRlTGlzdDsKKyAgICAgICAgICAgIGlmIChzdHJva2VTdGF0ZUxpc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBuZXdTdHJva2VDb2xvciA9IHN0cm9rZVN0YXRlTGlzdC5nZXRDb2xvckZvclN0YXRlKHN0YXRlU2V0LCAwKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgb2xkU3Ryb2tlQ29sb3IgPSBzdHJva2VQYWludC5nZXRDb2xvcigpOworICAgICAgICAgICAgICAgIGlmIChvbGRTdHJva2VDb2xvciAhPSBuZXdTdHJva2VDb2xvcikgeworICAgICAgICAgICAgICAgICAgICBzdHJva2VQYWludC5zZXRDb2xvcihuZXdTdHJva2VDb2xvcik7CisgICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGVTZWxmID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW52YWxpZGF0ZVNlbGYpIHsKKyAgICAgICAgICAgIGludmFsaWRhdGVTZWxmKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRlZnVsKCkgeworICAgICAgICBmaW5hbCBHcmFkaWVudFN0YXRlIHMgPSBtR3JhZGllbnRTdGF0ZTsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmlzU3RhdGVmdWwoKQorICAgICAgICAgICAgICAgIHx8IChzLm1Db2xvclN0YXRlTGlzdCAhPSBudWxsICYmIHMubUNvbG9yU3RhdGVMaXN0LmlzU3RhdGVmdWwoKSkKKyAgICAgICAgICAgICAgICB8fCAocy5tU3Ryb2tlQ29sb3JTdGF0ZUxpc3QgIT0gbnVsbCAmJiBzLm1TdHJva2VDb2xvclN0YXRlTGlzdC5pc1N0YXRlZnVsKCkpOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0Q2hhbmdpbmdDb25maWd1cmF0aW9ucygpIHsKICAgICAgICAgcmV0dXJuIHN1cGVyLmdldENoYW5naW5nQ29uZmlndXJhdGlvbnMoKSB8IG1HcmFkaWVudFN0YXRlLm1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwpAQCAtNzkxLDcgKzkxMCw3IEBACiAKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgc29saWQgY29sb3IsIHRoZSBhbHBoYSBjaGFubmVsIG11c3QgYmUKICAgICAgICAgICAgICAgICAvLyBtYXhlZCBvdXQgc28gdGhhdCBhbHBoYSBtb2R1bGF0aW9uIHdvcmtzIGNvcnJlY3RseS4KLSAgICAgICAgICAgICAgICBpZiAoIXN0Lm1IYXNTb2xpZENvbG9yKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdC5tSGFzU29saWRDb2xvciAmJiBzdC5tQ29sb3JTdGF0ZUxpc3QgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtRmlsbFBhaW50LnNldENvbG9yKENvbG9yLkJMQUNLKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05NjcsMjUgKzEwODYsMjUgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInNvbGlkIikpIHsKICAgICAgICAgICAgICAgICBhID0gci5vYnRhaW5BdHRyaWJ1dGVzKGF0dHJzLAogICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuR3JhZGllbnREcmF3YWJsZVNvbGlkKTsKLSAgICAgICAgICAgICAgICBpbnQgYXJnYiA9IGEuZ2V0Q29sb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5HcmFkaWVudERyYXdhYmxlU29saWRfY29sb3IsIDApOworICAgICAgICAgICAgICAgIGZpbmFsIENvbG9yU3RhdGVMaXN0IGNvbG9yU3RhdGVMaXN0ID0gYS5nZXRDb2xvclN0YXRlTGlzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdyYWRpZW50RHJhd2FibGVTb2xpZF9jb2xvcik7CiAgICAgICAgICAgICAgICAgYS5yZWN5Y2xlKCk7Ci0gICAgICAgICAgICAgICAgc2V0Q29sb3IoYXJnYik7CisgICAgICAgICAgICAgICAgc2V0Q29sb3IoY29sb3JTdGF0ZUxpc3QpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygic3Ryb2tlIikpIHsKICAgICAgICAgICAgICAgICBhID0gci5vYnRhaW5BdHRyaWJ1dGVzKGF0dHJzLAogICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuR3JhZGllbnREcmF3YWJsZVN0cm9rZSk7Ci0gICAgICAgICAgICAgICAgaW50IHdpZHRoID0gYS5nZXREaW1lbnNpb25QaXhlbFNpemUoCisgICAgICAgICAgICAgICAgZmluYWwgaW50IHdpZHRoID0gYS5nZXREaW1lbnNpb25QaXhlbFNpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5HcmFkaWVudERyYXdhYmxlU3Ryb2tlX3dpZHRoLCAwKTsKLSAgICAgICAgICAgICAgICBpbnQgY29sb3IgPSBhLmdldENvbG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuR3JhZGllbnREcmF3YWJsZVN0cm9rZV9jb2xvciwgMCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgZGFzaFdpZHRoID0gYS5nZXREaW1lbnNpb24oCisgICAgICAgICAgICAgICAgZmluYWwgQ29sb3JTdGF0ZUxpc3QgY29sb3JTdGF0ZUxpc3QgPSBhLmdldENvbG9yU3RhdGVMaXN0KAorICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuR3JhZGllbnREcmF3YWJsZVN0cm9rZV9jb2xvcik7CisgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgZGFzaFdpZHRoID0gYS5nZXREaW1lbnNpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5HcmFkaWVudERyYXdhYmxlU3Ryb2tlX2Rhc2hXaWR0aCwgMCk7CiAgICAgICAgICAgICAgICAgaWYgKGRhc2hXaWR0aCAhPSAwLjBmKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGRhc2hHYXAgPSBhLmdldERpbWVuc2lvbigKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgZGFzaEdhcCA9IGEuZ2V0RGltZW5zaW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdyYWRpZW50RHJhd2FibGVTdHJva2VfZGFzaEdhcCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZSh3aWR0aCwgY29sb3IsIGRhc2hXaWR0aCwgZGFzaEdhcCk7CisgICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZSh3aWR0aCwgY29sb3JTdGF0ZUxpc3QsIGRhc2hXaWR0aCwgZGFzaEdhcCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0U3Ryb2tlKHdpZHRoLCBjb2xvcik7CisgICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZSh3aWR0aCwgY29sb3JTdGF0ZUxpc3QpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBhLnJlY3ljbGUoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImNvcm5lcnMiKSkgewpAQCAtMTA3Nyw2ICsxMTk2LDggQEAKICAgICAgICAgcHVibGljIGludCBtU2hhcGUgPSBSRUNUQU5HTEU7CiAgICAgICAgIHB1YmxpYyBpbnQgbUdyYWRpZW50ID0gTElORUFSX0dSQURJRU5UOwogICAgICAgICBwdWJsaWMgT3JpZW50YXRpb24gbU9yaWVudGF0aW9uOworICAgICAgICBwdWJsaWMgQ29sb3JTdGF0ZUxpc3QgbUNvbG9yU3RhdGVMaXN0OworICAgICAgICBwdWJsaWMgQ29sb3JTdGF0ZUxpc3QgbVN0cm9rZUNvbG9yU3RhdGVMaXN0OwogICAgICAgICBwdWJsaWMgaW50W10gbUNvbG9yczsKICAgICAgICAgcHVibGljIGludFtdIG1UZW1wQ29sb3JzOyAvLyBubyBuZWVkIHRvIGNvcHkKICAgICAgICAgcHVibGljIGZsb2F0W10gbVRlbXBQb3NpdGlvbnM7IC8vIG5vIG5lZWQgdG8gY29weQpAQCAtMTExMyw2ICsxMjM0LDcgQEAKICAgICAgICAgICAgIG1TaGFwZSA9IHN0YXRlLm1TaGFwZTsKICAgICAgICAgICAgIG1HcmFkaWVudCA9IHN0YXRlLm1HcmFkaWVudDsKICAgICAgICAgICAgIG1PcmllbnRhdGlvbiA9IHN0YXRlLm1PcmllbnRhdGlvbjsKKyAgICAgICAgICAgIG1Db2xvclN0YXRlTGlzdCA9IHN0YXRlLm1Db2xvclN0YXRlTGlzdDsKICAgICAgICAgICAgIGlmIChzdGF0ZS5tQ29sb3JzICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtQ29sb3JzID0gc3RhdGUubUNvbG9ycy5jbG9uZSgpOwogICAgICAgICAgICAgfQpAQCAtMTE3OCwxMyArMTMwMCwyMiBAQAogICAgICAgICBwdWJsaWMgdm9pZCBzZXRDb2xvcnMoaW50W10gY29sb3JzKSB7CiAgICAgICAgICAgICBtSGFzU29saWRDb2xvciA9IGZhbHNlOwogICAgICAgICAgICAgbUNvbG9ycyA9IGNvbG9yczsKKyAgICAgICAgICAgIG1Db2xvclN0YXRlTGlzdCA9IG51bGw7CiAgICAgICAgICAgICBjb21wdXRlT3BhY2l0eSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBwdWJsaWMgdm9pZCBzZXRTb2xpZENvbG9yKGludCBhcmdiKSB7Ci0gICAgICAgICAgICBtSGFzU29saWRDb2xvciA9IHRydWU7CisgICAgICAgICAgICBtSGFzU29saWRDb2xvciA9IGFyZ2IgIT0gQ29sb3IuVFJBTlNQQVJFTlQ7CiAgICAgICAgICAgICBtU29saWRDb2xvciA9IGFyZ2I7CiAgICAgICAgICAgICBtQ29sb3JzID0gbnVsbDsKKyAgICAgICAgICAgIG1Db2xvclN0YXRlTGlzdCA9IG51bGw7CisgICAgICAgICAgICBjb21wdXRlT3BhY2l0eSgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0Q29sb3JTdGF0ZUxpc3QoQ29sb3JTdGF0ZUxpc3QgY29sb3JTdGF0ZUxpc3QpIHsKKyAgICAgICAgICAgIG1IYXNTb2xpZENvbG9yID0gZmFsc2U7CisgICAgICAgICAgICBtQ29sb3JzID0gbnVsbDsKKyAgICAgICAgICAgIG1Db2xvclN0YXRlTGlzdCA9IGNvbG9yU3RhdGVMaXN0OwogICAgICAgICAgICAgY29tcHV0ZU9wYWNpdHkoKTsKICAgICAgICAgfQogCkBAIC0xMTk5LDExICsxMzMwLDIzIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAobVN0cm9rZVdpZHRoID4gMCAmJiAhaXNPcGFxdWUobVN0cm9rZUNvbG9yKSkgeworICAgICAgICAgICAgaWYgKG1TdHJva2VXaWR0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAobVN0cm9rZUNvbG9yU3RhdGVMaXN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtU3Ryb2tlQ29sb3JTdGF0ZUxpc3QuaXNPcGFxdWUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbU9wYXF1ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNPcGFxdWUobVN0cm9rZUNvbG9yKSkgeworICAgICAgICAgICAgICAgICAgICBtT3BhcXVlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtQ29sb3JTdGF0ZUxpc3QgIT0gbnVsbCAmJiAhbUNvbG9yU3RhdGVMaXN0LmlzT3BhcXVlKCkpIHsKICAgICAgICAgICAgICAgICBtT3BhcXVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChtSGFzU29saWRDb2xvcikgewogICAgICAgICAgICAgICAgIG1PcGFxdWUgPSBpc09wYXF1ZShtU29saWRDb2xvcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIyOCwxMiArMTM3MSwyMyBAQAogICAgICAgICBwdWJsaWMgdm9pZCBzZXRTdHJva2UoaW50IHdpZHRoLCBpbnQgY29sb3IpIHsKICAgICAgICAgICAgIG1TdHJva2VXaWR0aCA9IHdpZHRoOwogICAgICAgICAgICAgbVN0cm9rZUNvbG9yID0gY29sb3I7CisgICAgICAgICAgICBtU3Ryb2tlQ29sb3JTdGF0ZUxpc3QgPSBudWxsOwogICAgICAgICAgICAgY29tcHV0ZU9wYWNpdHkoKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFN0cm9rZShpbnQgd2lkdGgsIGludCBjb2xvciwgZmxvYXQgZGFzaFdpZHRoLCBmbG9hdCBkYXNoR2FwKSB7CiAgICAgICAgICAgICBtU3Ryb2tlV2lkdGggPSB3aWR0aDsKICAgICAgICAgICAgIG1TdHJva2VDb2xvciA9IGNvbG9yOworICAgICAgICAgICAgbVN0cm9rZUNvbG9yU3RhdGVMaXN0ID0gbnVsbDsKKyAgICAgICAgICAgIG1TdHJva2VEYXNoV2lkdGggPSBkYXNoV2lkdGg7CisgICAgICAgICAgICBtU3Ryb2tlRGFzaEdhcCA9IGRhc2hHYXA7CisgICAgICAgICAgICBjb21wdXRlT3BhY2l0eSgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0U3Ryb2tlKAorICAgICAgICAgICAgICAgIGludCB3aWR0aCwgQ29sb3JTdGF0ZUxpc3QgY29sb3JTdGF0ZUxpc3QsIGZsb2F0IGRhc2hXaWR0aCwgZmxvYXQgZGFzaEdhcCkgeworICAgICAgICAgICAgbVN0cm9rZVdpZHRoID0gd2lkdGg7CisgICAgICAgICAgICBtU3Ryb2tlQ29sb3JTdGF0ZUxpc3QgPSBjb2xvclN0YXRlTGlzdDsKICAgICAgICAgICAgIG1TdHJva2VEYXNoV2lkdGggPSBkYXNoV2lkdGg7CiAgICAgICAgICAgICBtU3Ryb2tlRGFzaEdhcCA9IGRhc2hHYXA7CiAgICAgICAgICAgICBjb21wdXRlT3BhY2l0eSgpOwpAQCAtMTI3NCw2ICsxNDI4LDEwIEBACiAgICAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVXaXRoU3RhdGUoR3JhZGllbnRTdGF0ZSBzdGF0ZSkgewogICAgICAgICBpZiAoc3RhdGUubUhhc1NvbGlkQ29sb3IpIHsKICAgICAgICAgICAgIG1GaWxsUGFpbnQuc2V0Q29sb3Ioc3RhdGUubVNvbGlkQ29sb3IpOworICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLm1Db2xvclN0YXRlTGlzdCAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBpbnRbXSBjdXJyZW50U3RhdGUgPSBnZXRTdGF0ZSgpOworICAgICAgICAgICAgZmluYWwgaW50IHN0YXRlQ29sb3IgPSBzdGF0ZS5tQ29sb3JTdGF0ZUxpc3QuZ2V0Q29sb3JGb3JTdGF0ZShjdXJyZW50U3RhdGUsIDApOworICAgICAgICAgICAgbUZpbGxQYWludC5zZXRDb2xvcihzdGF0ZUNvbG9yKTsKICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5tQ29sb3JzID09IG51bGwpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzb2xpZCBjb2xvciBhbmQgd2UgZG9uJ3QgaGF2ZSBhIGdyYWRpZW50LAogICAgICAgICAgICAgLy8gdGhlIGFwcCBpcyBzdHJva2luZyB0aGUgc2hhcGUsIHNldCB0aGUgY29sb3IgdG8gdGhlIGRlZmF1bHQKQEAgLTEyODgsNyArMTQ0NiwxNCBAQAogICAgICAgICAgICAgbVN0cm9rZVBhaW50ID0gbmV3IFBhaW50KFBhaW50LkFOVElfQUxJQVNfRkxBRyk7CiAgICAgICAgICAgICBtU3Ryb2tlUGFpbnQuc2V0U3R5bGUoUGFpbnQuU3R5bGUuU1RST0tFKTsKICAgICAgICAgICAgIG1TdHJva2VQYWludC5zZXRTdHJva2VXaWR0aChzdGF0ZS5tU3Ryb2tlV2lkdGgpOwotICAgICAgICAgICAgbVN0cm9rZVBhaW50LnNldENvbG9yKHN0YXRlLm1TdHJva2VDb2xvcik7CisgICAgICAgICAgICBpZiAoc3RhdGUubVN0cm9rZUNvbG9yU3RhdGVMaXN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnRbXSBjdXJyZW50U3RhdGUgPSBnZXRTdGF0ZSgpOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBzdHJva2VTdGF0ZUNvbG9yID0gc3RhdGUubVN0cm9rZUNvbG9yU3RhdGVMaXN0LmdldENvbG9yRm9yU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUsIDApOworICAgICAgICAgICAgICAgIG1TdHJva2VQYWludC5zZXRDb2xvcihzdHJva2VTdGF0ZUNvbG9yKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVN0cm9rZVBhaW50LnNldENvbG9yKHN0YXRlLm1TdHJva2VDb2xvcik7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChzdGF0ZS5tU3Ryb2tlRGFzaFdpZHRoICE9IDAuMGYpIHsKICAgICAgICAgICAgICAgICBEYXNoUGF0aEVmZmVjdCBlID0gbmV3IERhc2hQYXRoRWZmZWN0KApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0xheWVyRHJhd2FibGUuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9MYXllckRyYXdhYmxlLmphdmEKaW5kZXggODFjYzExYi4uZThiM2Y2NCAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0xheWVyRHJhd2FibGUuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvTGF5ZXJEcmF3YWJsZS5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogCi0vKiogCisvKioKICAqIEEgRHJhd2FibGUgdGhhdCBtYW5hZ2VzIGFuIGFycmF5IG9mIG90aGVyIERyYXdhYmxlcy4gVGhlc2UgYXJlIGRyYXduIGluIGFycmF5CiAgKiBvcmRlciwgc28gdGhlIGVsZW1lbnQgd2l0aCB0aGUgbGFyZ2VzdCBpbmRleCB3aWxsIGJlIGRyYXduIG9uIHRvcC4KICAqIDxwPgpAQCAtNDcsNiArNDcsMTUgQEAKICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0xheWVyRHJhd2FibGVJdGVtX2lkCiAqLwogcHVibGljIGNsYXNzIExheWVyRHJhd2FibGUgZXh0ZW5kcyBEcmF3YWJsZSBpbXBsZW1lbnRzIERyYXdhYmxlLkNhbGxiYWNrIHsKKyAgICAvKioKKyAgICAgKiBQYWRkaW5nIG1vZGUgdXNlZCB0byBuZXN0IGVhY2ggbGF5ZXIgaW5zaWRlIHRoZSBwYWRkaW5nIG9mIHRoZSBwcmV2aW91cworICAgICAqIGxheWVyLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBRERJTkdfTU9ERV9ORVNUID0gMDsKKworICAgIC8qKiBQYWRkaW5nIG1vZGUgdXNlZCB0byBzdGFjayBlYWNoIGxheWVyIGRpcmVjdGx5IGF0b3AgdGhlIHByZXZpb3VzIGxheWVyLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBRERJTkdfTU9ERV9TVEFDSyA9IDE7CisKICAgICBMYXllclN0YXRlIG1MYXllclN0YXRlOwogCiAgICAgcHJpdmF0ZSBpbnQgbU9wYWNpdHlPdmVycmlkZSA9IFBpeGVsRm9ybWF0LlVOS05PV047CkBAIC05MCw3ICs5OSw3IEBACiAKICAgICAgICAgZW5zdXJlUGFkZGluZygpOwogICAgIH0KLSAgICAKKwogICAgIExheWVyRHJhd2FibGUoKSB7CiAgICAgICAgIHRoaXMoKExheWVyU3RhdGUpIG51bGwsIG51bGwpOwogICAgIH0KQEAgLTEyMiw2ICsxMzEsOSBAQAogICAgICAgICBzZXRBdXRvTWlycm9yZWQoYS5nZXRCb29sZWFuKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkxheWVyRHJhd2FibGVfYXV0b01pcnJvcmVkLAogICAgICAgICAgICAgICAgIGZhbHNlKSk7CiAKKyAgICAgICAgbUxheWVyU3RhdGUubVBhZGRpbmdNb2RlID0gYS5nZXRJbnRlZ2VyKAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkxheWVyRHJhd2FibGVJdGVtX2RyYXdhYmxlLCBQQURESU5HX01PREVfTkVTVCk7CisKICAgICAgICAgYS5yZWN5Y2xlKCk7CiAKICAgICAgICAgZmluYWwgaW50IGlubmVyRGVwdGggPSBwYXJzZXIuZ2V0RGVwdGgoKSArIDE7CkBAIC0xODcsMTkgKzE5OSwyMCBAQAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBhZGRMYXllcihEcmF3YWJsZSBsYXllciwgaW50IGlkLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7CiAgICAgICAgIGZpbmFsIExheWVyU3RhdGUgc3QgPSBtTGF5ZXJTdGF0ZTsKLSAgICAgICAgaW50IE4gPSBzdC5tQ2hpbGRyZW4gIT0gbnVsbCA/IHN0Lm1DaGlsZHJlbi5sZW5ndGggOiAwOwotICAgICAgICBpbnQgaSA9IHN0Lm1OdW07CisgICAgICAgIGZpbmFsIGludCBOID0gc3QubUNoaWxkcmVuICE9IG51bGwgPyBzdC5tQ2hpbGRyZW4ubGVuZ3RoIDogMDsKKyAgICAgICAgZmluYWwgaW50IGkgPSBzdC5tTnVtOwogICAgICAgICBpZiAoaSA+PSBOKSB7Ci0gICAgICAgICAgICBDaGlsZERyYXdhYmxlW10gbnUgPSBuZXcgQ2hpbGREcmF3YWJsZVtOICsgMTBdOworICAgICAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZVtdIG51ID0gbmV3IENoaWxkRHJhd2FibGVbTiArIDEwXTsKICAgICAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3QubUNoaWxkcmVuLCAwLCBudSwgMCwgaSk7CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHN0Lm1DaGlsZHJlbiA9IG51OwogICAgICAgICB9CiAKICAgICAgICAgbUxheWVyU3RhdGUubUNoaWxkcmVuQ2hhbmdpbmdDb25maWd1cmF0aW9ucyB8PSBsYXllci5nZXRDaGFuZ2luZ0NvbmZpZ3VyYXRpb25zKCk7Ci0gICAgICAgIAotICAgICAgICBDaGlsZERyYXdhYmxlIGNoaWxkRHJhd2FibGUgPSBuZXcgQ2hpbGREcmF3YWJsZSgpOworCisgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgY2hpbGREcmF3YWJsZSA9IG5ldyBDaGlsZERyYXdhYmxlKCk7CiAgICAgICAgIHN0Lm1DaGlsZHJlbltpXSA9IGNoaWxkRHJhd2FibGU7CiAgICAgICAgIGNoaWxkRHJhd2FibGUubUlkID0gaWQ7CiAgICAgICAgIGNoaWxkRHJhd2FibGUubURyYXdhYmxlID0gbGF5ZXI7CkBAIC0yMTQsMzMgKzIyNywzNiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIExvb2sgZm9yIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gaWQsIGFuZCByZXR1cm5zIGl0cyB7QGxpbmsgRHJhd2FibGV9LgorICAgICAqIExvb2tzIGZvciBhIGxheWVyIHdpdGggdGhlIGdpdmVuIElEIGFuZCByZXR1cm5zIGl0cyB7QGxpbmsgRHJhd2FibGV9LgorICAgICAqIDxwPgorICAgICAqIElmIG11bHRpcGxlIGxheWVycyBhcmUgZm91bmQgZm9yIHRoZSBnaXZlbiBJRCwgcmV0dXJucyB0aGUKKyAgICAgKiB7QGxpbmsgRHJhd2FibGV9IGZvciB0aGUgbWF0Y2hpbmcgbGF5ZXIgYXQgdGhlIGhpZ2hlc3QgaW5kZXguCiAgICAgICoKICAgICAgKiBAcGFyYW0gaWQgVGhlIGxheWVyIElEIHRvIHNlYXJjaCBmb3IuCi0gICAgICogQHJldHVybiBUaGUge0BsaW5rIERyYXdhYmxlfSBvZiB0aGUgbGF5ZXIgdGhhdCBoYXMgdGhlIGdpdmVuIGlkIGluIHRoZSBoaWVyYXJjaHkgb3IgbnVsbC4KKyAgICAgKiBAcmV0dXJuIFRoZSB7QGxpbmsgRHJhd2FibGV9IGZvciB0aGUgaGlnaGVzdC1pbmRleGVkIGxheWVyIHRoYXQgaGFzIHRoZQorICAgICAqICAgICAgICAgZ2l2ZW4gSUQsIG9yIG51bGwgaWYgbm90IGZvdW5kLgogICAgICAqLwogICAgIHB1YmxpYyBEcmF3YWJsZSBmaW5kRHJhd2FibGVCeUxheWVySWQoaW50IGlkKSB7CiAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBsYXllcnMgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47Ci0gICAgICAgIAogICAgICAgICBmb3IgKGludCBpID0gbUxheWVyU3RhdGUubU51bSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICBpZiAobGF5ZXJzW2ldLm1JZCA9PSBpZCkgewogICAgICAgICAgICAgICAgIHJldHVybiBsYXllcnNbaV0ubURyYXdhYmxlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIElEIG9mIGEgbGF5ZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgbGF5ZXIgd2hpY2ggd2lsbCByZWNlaXZlZCB0aGUgSUQuIAorICAgICAqCisgICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgbGF5ZXIgd2hpY2ggd2lsbCByZWNlaXZlZCB0aGUgSUQuCiAgICAgICogQHBhcmFtIGlkIFRoZSBJRCB0byBhc3NpZ24gdG8gdGhlIGxheWVyLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldElkKGludCBpbmRleCwgaW50IGlkKSB7CiAgICAgICAgIG1MYXllclN0YXRlLm1DaGlsZHJlbltpbmRleF0ubUlkID0gaWQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxheWVycyBjb250YWluZWQgd2l0aGluIHRoaXMuCiAgICAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGxheWVycy4KQEAgLTI2NSwxNSArMjgxLDE1IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBsYXllci4KICAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIGlkIG9mIHRoZSBsYXllciBvciB7QGxpbmsgYW5kcm9pZC52aWV3LlZpZXcjTk9fSUR9IGlmIHRoZSBsYXllciBoYXMgbm8gaWQuIAorICAgICAqIEByZXR1cm4gVGhlIGlkIG9mIHRoZSBsYXllciBvciB7QGxpbmsgYW5kcm9pZC52aWV3LlZpZXcjTk9fSUR9IGlmIHRoZSBsYXllciBoYXMgbm8gaWQuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRJZChpbnQgaW5kZXgpIHsKICAgICAgICAgcmV0dXJuIG1MYXllclN0YXRlLm1DaGlsZHJlbltpbmRleF0ubUlkOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgKG9yIHJlcGxhY2VzKSB0aGUge0BsaW5rIERyYXdhYmxlfSBmb3IgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIGlkLgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGlkIFRoZSBsYXllciBJRCB0byBzZWFyY2ggZm9yLgogICAgICAqIEBwYXJhbSBkcmF3YWJsZSBUaGUgcmVwbGFjZW1lbnQge0BsaW5rIERyYXdhYmxlfS4KICAgICAgKiBAcmV0dXJuIFdoZXRoZXIgdGhlIHtAbGluayBEcmF3YWJsZX0gd2FzIHJlcGxhY2VkIChjb3VsZCByZXR1cm4gZmFsc2UgaWYKQEAgLTI4MSw3MSArMjk3LDkxIEBACiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0RHJhd2FibGVCeUxheWVySWQoaW50IGlkLCBEcmF3YWJsZSBkcmF3YWJsZSkgewogICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gbGF5ZXJzID0gbUxheWVyU3RhdGUubUNoaWxkcmVuOwotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IG1MYXllclN0YXRlLm1OdW0gLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgaWYgKGxheWVyc1tpXS5tSWQgPT0gaWQpIHsKLSAgICAgICAgICAgICAgICBpZiAobGF5ZXJzW2ldLm1EcmF3YWJsZSAhPSBudWxsKSB7CisgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgY2hpbGREcmF3YWJsZSA9IGxheWVyc1tpXTsKKyAgICAgICAgICAgIGlmIChjaGlsZERyYXdhYmxlLm1JZCA9PSBpZCkgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZERyYXdhYmxlLm1EcmF3YWJsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChkcmF3YWJsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWN0IGJvdW5kcyA9IGxheWVyc1tpXS5tRHJhd2FibGUuZ2V0Qm91bmRzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZWN0IGJvdW5kcyA9IGNoaWxkRHJhd2FibGUubURyYXdhYmxlLmdldEJvdW5kcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgZHJhd2FibGUuc2V0Qm91bmRzKGJvdW5kcyk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbGF5ZXJzW2ldLm1EcmF3YWJsZS5zZXRDYWxsYmFjayhudWxsKTsKKworICAgICAgICAgICAgICAgICAgICBjaGlsZERyYXdhYmxlLm1EcmF3YWJsZS5zZXRDYWxsYmFjayhudWxsKTsKICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAoZHJhd2FibGUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBkcmF3YWJsZS5zZXRDYWxsYmFjayh0aGlzKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGF5ZXJzW2ldLm1EcmF3YWJsZSA9IGRyYXdhYmxlOworCisgICAgICAgICAgICAgICAgY2hpbGREcmF3YWJsZS5tRHJhd2FibGUgPSBkcmF3YWJsZTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIC8qKiBTcGVjaWZ5IG1vZGlmaWVycyB0byB0aGUgYm91bmRzIGZvciB0aGUgZHJhd2FibGVbaW5kZXhdLgotICAgICAgICBsZWZ0ICs9IGwKLSAgICAgICAgdG9wICs9IHQ7Ci0gICAgICAgIHJpZ2h0IC09IHI7Ci0gICAgICAgIGJvdHRvbSAtPSBiOwotICAgICovCisKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhlIGluc2V0cyBpbiBwaXhlbHMgZm9yIHRoZSBkcmF3YWJsZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LgorICAgICAqCisgICAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgZHJhd2FibGUgdG8gYWRqdXN0CisgICAgICogQHBhcmFtIGwgbnVtYmVyIG9mIHBpeGVscyB0byBhZGQgdG8gdGhlIGxlZnQgYm91bmQKKyAgICAgKiBAcGFyYW0gdCBudW1iZXIgb2YgcGl4ZWxzIHRvIGFkZCB0byB0aGUgdG9wIGJvdW5kCisgICAgICogQHBhcmFtIHIgbnVtYmVyIG9mIHBpeGVscyB0byBzdWJ0cmFjdCBmcm9tIHRoZSByaWdodCBib3VuZAorICAgICAqIEBwYXJhbSBiIG51bWJlciBvZiBwaXhlbHMgdG8gc3VidHJhY3QgZnJvbSB0aGUgYm90dG9tIGJvdW5kCisgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TGF5ZXJJbnNldChpbnQgaW5kZXgsIGludCBsLCBpbnQgdCwgaW50IHIsIGludCBiKSB7Ci0gICAgICAgIENoaWxkRHJhd2FibGUgY2hpbGREcmF3YWJsZSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbltpbmRleF07CisgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgY2hpbGREcmF3YWJsZSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbltpbmRleF07CiAgICAgICAgIGNoaWxkRHJhd2FibGUubUluc2V0TCA9IGw7CiAgICAgICAgIGNoaWxkRHJhd2FibGUubUluc2V0VCA9IHQ7CiAgICAgICAgIGNoaWxkRHJhd2FibGUubUluc2V0UiA9IHI7CiAgICAgICAgIGNoaWxkRHJhd2FibGUubUluc2V0QiA9IGI7CiAgICAgfQogCi0gICAgLy8gb3ZlcnJpZGVzIGZyb20gRHJhd2FibGUuQ2FsbGJhY2sKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgaG93IGxheWVyIHBhZGRpbmcgc2hvdWxkIGFmZmVjdCB0aGUgYm91bmRzIG9mIHN1YnNlcXVlbnQKKyAgICAgKiBsYXllcnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHtAbGluayAjUEFERElOR19NT0RFX05FU1R9LgorICAgICAqCisgICAgICogQHBhcmFtIG1vZGUgcGFkZGluZyBtb2RlLCBvbmUgb2Y6CisgICAgICogICAgICAgICAgICA8dWw+CisgICAgICogICAgICAgICAgICA8bGk+e0BsaW5rICNQQURESU5HX01PREVfTkVTVH0gPGxpPntAbGluayAjUEFERElOR19NT0RFX1NUQUNLfQorICAgICAqICAgICAgICAgICAgPC91bD4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQYWRkaW5nTW9kZShpbnQgbW9kZSkgeworICAgICAgICBpZiAobUxheWVyU3RhdGUubVBhZGRpbmdNb2RlICE9IG1vZGUpIHsKKyAgICAgICAgICAgIG1MYXllclN0YXRlLm1QYWRkaW5nTW9kZSA9IG1vZGU7CisgICAgICAgIH0KKyAgICB9CiAKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHRoZSBjdXJyZW50IHBhZGRpbmcgbW9kZQorICAgICAqIEBzZWUgI3NldFBhZGRpbmdNb2RlKGludCkKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFBhZGRpbmdNb2RlKCkgeworICAgICAgcmV0dXJuIG1MYXllclN0YXRlLm1QYWRkaW5nTW9kZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlRHJhd2FibGUoRHJhd2FibGUgd2hvKSB7Ci0gICAgICAgIGZpbmFsIENhbGxiYWNrIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2soKTsKLSAgICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrLmludmFsaWRhdGVEcmF3YWJsZSh0aGlzKTsKLSAgICAgICAgfQorICAgICAgICBpbnZhbGlkYXRlU2VsZigpOwogICAgIH0KIAorICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNjaGVkdWxlRHJhd2FibGUoRHJhd2FibGUgd2hvLCBSdW5uYWJsZSB3aGF0LCBsb25nIHdoZW4pIHsKLSAgICAgICAgZmluYWwgQ2FsbGJhY2sgY2FsbGJhY2sgPSBnZXRDYWxsYmFjaygpOwotICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgY2FsbGJhY2suc2NoZWR1bGVEcmF3YWJsZSh0aGlzLCB3aGF0LCB3aGVuKTsKLSAgICAgICAgfQorICAgICAgICBzY2hlZHVsZVNlbGYod2hhdCwgd2hlbik7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgdW5zY2hlZHVsZURyYXdhYmxlKERyYXdhYmxlIHdobywgUnVubmFibGUgd2hhdCkgewotICAgICAgICBmaW5hbCBDYWxsYmFjayBjYWxsYmFjayA9IGdldENhbGxiYWNrKCk7Ci0gICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjYWxsYmFjay51bnNjaGVkdWxlRHJhd2FibGUodGhpcywgd2hhdCk7Ci0gICAgICAgIH0KKyAgICAgICAgdW5zY2hlZHVsZVNlbGYod2hhdCk7CiAgICAgfQogCi0gICAgLy8gb3ZlcnJpZGVzIGZyb20gRHJhd2FibGUKLQogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGRyYXcoQ2FudmFzIGNhbnZhcykgewogICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47CiAgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgYXJyYXlbaV0ubURyYXdhYmxlLmRyYXcoY2FudmFzKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM1NiwzNiArMzkyLDY1IEBACiAgICAgICAgICAgICAgICAgfCBtTGF5ZXJTdGF0ZS5tQ2hhbmdpbmdDb25maWd1cmF0aW9ucwogICAgICAgICAgICAgICAgIHwgbUxheWVyU3RhdGUubUNoaWxkcmVuQ2hhbmdpbmdDb25maWd1cmF0aW9uczsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBnZXRQYWRkaW5nKFJlY3QgcGFkZGluZykgewotICAgICAgICAvLyBBcmJpdHJhcmlseSBnZXQgdGhlIHBhZGRpbmcgZnJvbSB0aGUgZmlyc3QgaW1hZ2UuCi0gICAgICAgIC8vIFRlY2huaWNhbGx5IHdlIHNob3VsZCBtYXliZSBkbyBzb21ldGhpbmcgbW9yZSBpbnRlbGxpZ2VudCwKLSAgICAgICAgLy8gbGlrZSB0YWtlIHRoZSBtYXggcGFkZGluZyBvZiBhbGwgdGhlIGltYWdlcy4KKyAgICAgICAgaWYgKG1MYXllclN0YXRlLm1QYWRkaW5nTW9kZSA9PSBQQURESU5HX01PREVfTkVTVCkgeworICAgICAgICAgICAgY29tcHV0ZU5lc3RlZFBhZGRpbmcocGFkZGluZyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb21wdXRlU3RhY2tlZFBhZGRpbmcocGFkZGluZyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcGFkZGluZy5sZWZ0ICE9IDAgfHwgcGFkZGluZy50b3AgIT0gMCB8fCBwYWRkaW5nLnJpZ2h0ICE9IDAgfHwgcGFkZGluZy5ib3R0b20gIT0gMDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29tcHV0ZU5lc3RlZFBhZGRpbmcoUmVjdCBwYWRkaW5nKSB7CiAgICAgICAgIHBhZGRpbmcubGVmdCA9IDA7CiAgICAgICAgIHBhZGRpbmcudG9wID0gMDsKICAgICAgICAgcGFkZGluZy5yaWdodCA9IDA7CiAgICAgICAgIHBhZGRpbmcuYm90dG9tID0gMDsKKworICAgICAgICAvLyBBZGQgYWxsIHRoZSBwYWRkaW5nLgogICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47CiAgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgcmVhcHBseVBhZGRpbmcoaSwgYXJyYXlbaV0pOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgICAgcmVmcmVzaENoaWxkUGFkZGluZyhpLCBhcnJheVtpXSk7CisKICAgICAgICAgICAgIHBhZGRpbmcubGVmdCArPSBtUGFkZGluZ0xbaV07CiAgICAgICAgICAgICBwYWRkaW5nLnRvcCArPSBtUGFkZGluZ1RbaV07CiAgICAgICAgICAgICBwYWRkaW5nLnJpZ2h0ICs9IG1QYWRkaW5nUltpXTsKICAgICAgICAgICAgIHBhZGRpbmcuYm90dG9tICs9IG1QYWRkaW5nQltpXTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29tcHV0ZVN0YWNrZWRQYWRkaW5nKFJlY3QgcGFkZGluZykgeworICAgICAgICBwYWRkaW5nLmxlZnQgPSAwOworICAgICAgICBwYWRkaW5nLnRvcCA9IDA7CisgICAgICAgIHBhZGRpbmcucmlnaHQgPSAwOworICAgICAgICBwYWRkaW5nLmJvdHRvbSA9IDA7CisKKyAgICAgICAgLy8gVGFrZSB0aGUgbWF4IHBhZGRpbmcuCisgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKKyAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgICAgcmVmcmVzaENoaWxkUGFkZGluZyhpLCBhcnJheVtpXSk7CisKKyAgICAgICAgICAgIHBhZGRpbmcubGVmdCA9IE1hdGgubWF4KHBhZGRpbmcubGVmdCwgbVBhZGRpbmdMW2ldKTsKKyAgICAgICAgICAgIHBhZGRpbmcudG9wID0gTWF0aC5tYXgocGFkZGluZy50b3AsIG1QYWRkaW5nVFtpXSk7CisgICAgICAgICAgICBwYWRkaW5nLnJpZ2h0ID0gTWF0aC5tYXgocGFkZGluZy5yaWdodCwgbVBhZGRpbmdSW2ldKTsKKyAgICAgICAgICAgIHBhZGRpbmcuYm90dG9tID0gTWF0aC5tYXgocGFkZGluZy5ib3R0b20sIG1QYWRkaW5nQltpXSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSwgYm9vbGVhbiByZXN0YXJ0KSB7Ci0gICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IHN1cGVyLnNldFZpc2libGUodmlzaWJsZSwgcmVzdGFydCk7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gY2hhbmdlZCA9IHN1cGVyLnNldFZpc2libGUodmlzaWJsZSwgcmVzdGFydCk7CiAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKICAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICBhcnJheVtpXS5tRHJhd2FibGUuc2V0VmlzaWJsZSh2aXNpYmxlLCByZXN0YXJ0KTsKICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KIApAQCAtMzkzLDcgKzQ1OCw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0RGl0aGVyKGJvb2xlYW4gZGl0aGVyKSB7CiAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKICAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICBhcnJheVtpXS5tRHJhd2FibGUuc2V0RGl0aGVyKGRpdGhlcik7CiAgICAgICAgIH0KICAgICB9CkBAIC00MDIsNyArNDY3LDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRBbHBoYShpbnQgYWxwaGEpIHsKICAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZVtdIGFycmF5ID0gbUxheWVyU3RhdGUubUNoaWxkcmVuOwogICAgICAgICBmaW5hbCBpbnQgTiA9IG1MYXllclN0YXRlLm1OdW07Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIGFycmF5W2ldLm1EcmF3YWJsZS5zZXRBbHBoYShhbHBoYSk7CiAgICAgICAgIH0KICAgICB9CkBAIC00MjIsNyArNDg3LDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRDb2xvckZpbHRlcihDb2xvckZpbHRlciBjZikgewogICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47CiAgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgYXJyYXlbaV0ubURyYXdhYmxlLnNldENvbG9yRmlsdGVyKGNmKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ0Miw3ICs1MDcsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNldE9wYWNpdHkoaW50IG9wYWNpdHkpIHsKICAgICAgICAgbU9wYWNpdHlPdmVycmlkZSA9IG9wYWNpdHk7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRPcGFjaXR5KCkgewogICAgICAgICBpZiAobU9wYWNpdHlPdmVycmlkZSAhPSBQaXhlbEZvcm1hdC5VTktOT1dOKSB7CkBAIC00NTQsOSArNTE5LDEwIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0QXV0b01pcnJvcmVkKGJvb2xlYW4gbWlycm9yZWQpIHsKICAgICAgICAgbUxheWVyU3RhdGUubUF1dG9NaXJyb3JlZCA9IG1pcnJvcmVkOworCiAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKICAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICBhcnJheVtpXS5tRHJhd2FibGUuc2V0QXV0b01pcnJvcmVkKG1pcnJvcmVkKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ3MCwxMDUgKzUzNiwxMzcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRlZnVsKCkgewogICAgICAgICByZXR1cm4gbUxheWVyU3RhdGUuaXNTdGF0ZWZ1bCgpOwogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCBib29sZWFuIG9uU3RhdGVDaGFuZ2UoaW50W10gc3RhdGUpIHsKLSAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZVtdIGFycmF5ID0gbUxheWVyU3RhdGUubUNoaWxkcmVuOwotICAgICAgICBmaW5hbCBpbnQgTiA9IG1MYXllclN0YXRlLm1OdW07CiAgICAgICAgIGJvb2xlYW4gcGFkZGluZ0NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKworICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47CisgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgciA9IGFycmF5W2ldOwogICAgICAgICAgICAgaWYgKHIubURyYXdhYmxlLnNldFN0YXRlKHN0YXRlKSkgewogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlYXBwbHlQYWRkaW5nKGksIHIpKSB7CisKKyAgICAgICAgICAgIGlmIChyZWZyZXNoQ2hpbGRQYWRkaW5nKGksIHIpKSB7CiAgICAgICAgICAgICAgICAgcGFkZGluZ0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgaWYgKHBhZGRpbmdDaGFuZ2VkKSB7CiAgICAgICAgICAgICBvbkJvdW5kc0NoYW5nZShnZXRCb3VuZHMoKSk7CiAgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBvbkxldmVsQ2hhbmdlKGludCBsZXZlbCkgewotICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47Ci0gICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKICAgICAgICAgYm9vbGVhbiBwYWRkaW5nQ2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBib29sZWFuIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgeworCisgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKKyAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZSByID0gYXJyYXlbaV07CiAgICAgICAgICAgICBpZiAoci5tRHJhd2FibGUuc2V0TGV2ZWwobGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVhcHBseVBhZGRpbmcoaSwgcikpIHsKKworICAgICAgICAgICAgaWYgKHJlZnJlc2hDaGlsZFBhZGRpbmcoaSwgcikpIHsKICAgICAgICAgICAgICAgICBwYWRkaW5nQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBpZiAocGFkZGluZ0NoYW5nZWQpIHsKICAgICAgICAgICAgIG9uQm91bmRzQ2hhbmdlKGdldEJvdW5kcygpKTsKICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIG9uQm91bmRzQ2hhbmdlKFJlY3QgYm91bmRzKSB7CisgICAgICAgIGludCBwYWRMID0gMDsKKyAgICAgICAgaW50IHBhZFQgPSAwOworICAgICAgICBpbnQgcGFkUiA9IDA7CisgICAgICAgIGludCBwYWRCID0gMDsKKworICAgICAgICBmaW5hbCBib29sZWFuIG5lc3QgPSBtTGF5ZXJTdGF0ZS5tUGFkZGluZ01vZGUgPT0gUEFERElOR19NT0RFX05FU1Q7CiAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKICAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOwotICAgICAgICBpbnQgcGFkTD0wLCBwYWRUPTAsIHBhZFI9MCwgcGFkQj0wOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlIHIgPSBhcnJheVtpXTsKLSAgICAgICAgICAgIHIubURyYXdhYmxlLnNldEJvdW5kcyhib3VuZHMubGVmdCArIHIubUluc2V0TCArIHBhZEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCArIHIubUluc2V0VCArIHBhZFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnJpZ2h0IC0gci5tSW5zZXRSIC0gcGFkUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMuYm90dG9tIC0gci5tSW5zZXRCIC0gcGFkQik7Ci0gICAgICAgICAgICBwYWRMICs9IG1QYWRkaW5nTFtpXTsKLSAgICAgICAgICAgIHBhZFIgKz0gbVBhZGRpbmdSW2ldOwotICAgICAgICAgICAgcGFkVCArPSBtUGFkZGluZ1RbaV07Ci0gICAgICAgICAgICBwYWRCICs9IG1QYWRkaW5nQltpXTsKKyAgICAgICAgICAgIHIubURyYXdhYmxlLnNldEJvdW5kcyhib3VuZHMubGVmdCArIHIubUluc2V0TCArIHBhZEwsIGJvdW5kcy50b3AgKyByLm1JbnNldFQgKyBwYWRULAorICAgICAgICAgICAgICAgICAgICBib3VuZHMucmlnaHQgLSByLm1JbnNldFIgLSBwYWRSLCBib3VuZHMuYm90dG9tIC0gci5tSW5zZXRCIC0gcGFkQik7CisKKyAgICAgICAgICAgIGlmIChuZXN0KSB7CisgICAgICAgICAgICAgICAgcGFkTCArPSBtUGFkZGluZ0xbaV07CisgICAgICAgICAgICAgICAgcGFkUiArPSBtUGFkZGluZ1JbaV07CisgICAgICAgICAgICAgICAgcGFkVCArPSBtUGFkZGluZ1RbaV07CisgICAgICAgICAgICAgICAgcGFkQiArPSBtUGFkZGluZ0JbaV07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGdldEludHJpbnNpY1dpZHRoKCkgewogICAgICAgICBpbnQgd2lkdGggPSAtMTsKKyAgICAgICAgaW50IHBhZEwgPSAwOworICAgICAgICBpbnQgcGFkUiA9IDA7CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBuZXN0ID0gbUxheWVyU3RhdGUubVBhZGRpbmdNb2RlID09IFBBRERJTkdfTU9ERV9ORVNUOwogICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47CiAgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKLSAgICAgICAgaW50IHBhZEw9MCwgcGFkUj0wOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlIHIgPSBhcnJheVtpXTsKLSAgICAgICAgICAgIGludCB3ID0gci5tRHJhd2FibGUuZ2V0SW50cmluc2ljV2lkdGgoKQotICAgICAgICAgICAgICAgICAgKyByLm1JbnNldEwgKyByLm1JbnNldFIgKyBwYWRMICsgcGFkUjsKKyAgICAgICAgICAgIGZpbmFsIGludCB3ID0gci5tRHJhd2FibGUuZ2V0SW50cmluc2ljV2lkdGgoKSArIHIubUluc2V0TCArIHIubUluc2V0UiArIHBhZEwgKyBwYWRSOwogICAgICAgICAgICAgaWYgKHcgPiB3aWR0aCkgewogICAgICAgICAgICAgICAgIHdpZHRoID0gdzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhZEwgKz0gbVBhZGRpbmdMW2ldOwotICAgICAgICAgICAgcGFkUiArPSBtUGFkZGluZ1JbaV07CisKKyAgICAgICAgICAgIGlmIChuZXN0KSB7CisgICAgICAgICAgICAgICAgcGFkTCArPSBtUGFkZGluZ0xbaV07CisgICAgICAgICAgICAgICAgcGFkUiArPSBtUGFkZGluZ1JbaV07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gd2lkdGg7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRJbnRyaW5zaWNIZWlnaHQoKSB7CiAgICAgICAgIGludCBoZWlnaHQgPSAtMTsKKyAgICAgICAgaW50IHBhZFQgPSAwOworICAgICAgICBpbnQgcGFkQiA9IDA7CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBuZXN0ID0gbUxheWVyU3RhdGUubVBhZGRpbmdNb2RlID09IFBBRERJTkdfTU9ERV9ORVNUOwogICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47CiAgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKLSAgICAgICAgaW50IHBhZFQ9MCwgcGFkQj0wOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlIHIgPSBhcnJheVtpXTsKLSAgICAgICAgICAgIGludCBoID0gci5tRHJhd2FibGUuZ2V0SW50cmluc2ljSGVpZ2h0KCkgKyByLm1JbnNldFQgKyByLm1JbnNldEIgKyArIHBhZFQgKyBwYWRCOworICAgICAgICAgICAgaW50IGggPSByLm1EcmF3YWJsZS5nZXRJbnRyaW5zaWNIZWlnaHQoKSArIHIubUluc2V0VCArIHIubUluc2V0QiArIHBhZFQgKyBwYWRCOwogICAgICAgICAgICAgaWYgKGggPiBoZWlnaHQpIHsKICAgICAgICAgICAgICAgICBoZWlnaHQgPSBoOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFkVCArPSBtUGFkZGluZ1RbaV07Ci0gICAgICAgICAgICBwYWRCICs9IG1QYWRkaW5nQltpXTsKKworICAgICAgICAgICAgaWYgKG5lc3QpIHsKKyAgICAgICAgICAgICAgICBwYWRUICs9IG1QYWRkaW5nVFtpXTsKKyAgICAgICAgICAgICAgICBwYWRCICs9IG1QYWRkaW5nQltpXTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBoZWlnaHQ7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBib29sZWFuIHJlYXBwbHlQYWRkaW5nKGludCBpLCBDaGlsZERyYXdhYmxlIHIpIHsKKyAgICAvKioKKyAgICAgKiBSZWZyZXNoZXMgdGhlIGNhY2hlZCBwYWRkaW5nIHZhbHVlcyBmb3IgdGhlIHNwZWNpZmllZCBjaGlsZC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY2hpbGQncyBwYWRkaW5nIGhhcyBjaGFuZ2VkCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIHJlZnJlc2hDaGlsZFBhZGRpbmcoaW50IGksIENoaWxkRHJhd2FibGUgcikgewogICAgICAgICBmaW5hbCBSZWN0IHJlY3QgPSBtVG1wUmVjdDsKICAgICAgICAgci5tRHJhd2FibGUuZ2V0UGFkZGluZyhyZWN0KTsKICAgICAgICAgaWYgKHJlY3QubGVmdCAhPSBtUGFkZGluZ0xbaV0gfHwgcmVjdC50b3AgIT0gbVBhZGRpbmdUW2ldIHx8CkBAIC01ODIsMTEgKzY4MCwxNSBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgLyoqCisgICAgICogRW5zdXJlcyB0aGUgY2hpbGQgcGFkZGluZyBjYWNoZXMgYXJlIGxhcmdlIGVub3VnaC4KKyAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgZW5zdXJlUGFkZGluZygpIHsKICAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOwogICAgICAgICBpZiAobVBhZGRpbmdMICE9IG51bGwgJiYgbVBhZGRpbmdMLmxlbmd0aCA+PSBOKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBtUGFkZGluZ0wgPSBuZXcgaW50W05dOwogICAgICAgICBtUGFkZGluZ1QgPSBuZXcgaW50W05dOwogICAgICAgICBtUGFkZGluZ1IgPSBuZXcgaW50W05dOwpAQCAtNjM5LDcgKzc0MSw3IEBACiAKICAgICAgICAgaW50IG1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwogICAgICAgICBpbnQgbUNoaWxkcmVuQ2hhbmdpbmdDb25maWd1cmF0aW9uczsKLSAgICAgICAgCisKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXZlT3BhY2l0eSA9IGZhbHNlOwogICAgICAgICBwcml2YXRlIGludCBtT3BhY2l0eTsKIApAQCAtNjUxLDYgKzc1Myw4IEBACiAKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1BdXRvTWlycm9yZWQ7CiAKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVBhZGRpbmdNb2RlID0gUEFERElOR19NT0RFX05FU1Q7CisKICAgICAgICAgTGF5ZXJTdGF0ZShMYXllclN0YXRlIG9yaWcsIExheWVyRHJhd2FibGUgb3duZXIsIFJlc291cmNlcyByZXMpIHsKICAgICAgICAgICAgIGlmIChvcmlnICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gb3JpZ0NoaWxkRHJhd2FibGUgPSBvcmlnLm1DaGlsZHJlbjsKQEAgLTY2MSw3ICs3NjUsNyBAQAogCiAgICAgICAgICAgICAgICAgbUNoYW5naW5nQ29uZmlndXJhdGlvbnMgPSBvcmlnLm1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwogICAgICAgICAgICAgICAgIG1DaGlsZHJlbkNoYW5naW5nQ29uZmlndXJhdGlvbnMgPSBvcmlnLm1DaGlsZHJlbkNoYW5naW5nQ29uZmlndXJhdGlvbnM7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlIHIgPSBtQ2hpbGRyZW5baV0gPSBuZXcgQ2hpbGREcmF3YWJsZSgpOwogICAgICAgICAgICAgICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlIG9yID0gb3JpZ0NoaWxkRHJhd2FibGVbaV07CkBAIC02ODUsNiArNzg5LDcgQEAKICAgICAgICAgICAgICAgICBtU3RhdGVmdWwgPSBvcmlnLm1TdGF0ZWZ1bDsKICAgICAgICAgICAgICAgICBtQ2hlY2tlZENvbnN0YW50U3RhdGUgPSBtQ2FuQ29uc3RhbnRTdGF0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgbUF1dG9NaXJyb3JlZCA9IG9yaWcubUF1dG9NaXJyb3JlZDsKKyAgICAgICAgICAgICAgICBtUGFkZGluZ01vZGUgPSBvcmlnLm1QYWRkaW5nTW9kZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbU51bSA9IDA7CiAgICAgICAgICAgICAgICAgbUNoaWxkcmVuID0gbnVsbDsKQEAgLTY5NSwxMiArODAwLDEyIEBACiAgICAgICAgIHB1YmxpYyBEcmF3YWJsZSBuZXdEcmF3YWJsZSgpIHsKICAgICAgICAgICAgIHJldHVybiBuZXcgTGF5ZXJEcmF3YWJsZSh0aGlzLCBudWxsKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIERyYXdhYmxlIG5ld0RyYXdhYmxlKFJlc291cmNlcyByZXMpIHsKICAgICAgICAgICAgIHJldHVybiBuZXcgTGF5ZXJEcmF3YWJsZSh0aGlzLCByZXMpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgaW50IGdldENoYW5naW5nQ29uZmlndXJhdGlvbnMoKSB7CiAgICAgICAgICAgICByZXR1cm4gbUNoYW5naW5nQ29uZmlndXJhdGlvbnM7CkBAIC03MjAsMTIgKzgyNSwxMiBAQAogICAgICAgICAgICAgbUhhdmVPcGFjaXR5ID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBvcDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1N0YXRlZnVsKCkgewogICAgICAgICAgICAgaWYgKG1IYXZlU3RhdGVmdWwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVN0YXRlZnVsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGJvb2xlYW4gc3RhdGVmdWwgPSBmYWxzZTsKICAgICAgICAgICAgIGZpbmFsIGludCBOID0gbU51bTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CkBAIC03MzQsNyArODM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG1TdGF0ZWZ1bCA9IHN0YXRlZnVsOwogICAgICAgICAgICAgbUhhdmVTdGF0ZWZ1bCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGVmdWw7CkBAIC03NDQsNyArODQ5LDcgQEAKICAgICAgICAgICAgIGlmICghbUNoZWNrZWRDb25zdGFudFN0YXRlICYmIG1DaGlsZHJlbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbUNhbkNvbnN0YW50U3RhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgIGZpbmFsIGludCBOID0gbU51bTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5tRHJhd2FibGUuZ2V0Q29uc3RhbnRTdGF0ZSgpID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1DYW5Db25zdGFudFN0YXRlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9OaW5lUGF0Y2hEcmF3YWJsZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL05pbmVQYXRjaERyYXdhYmxlLmphdmEKaW5kZXggOWM1N2EyYy4uZWU2NGQ3YSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL05pbmVQYXRjaERyYXdhYmxlLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL05pbmVQYXRjaERyYXdhYmxlLmphdmEKQEAgLTI2LDEyICsyNiwxNSBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTmluZVBhdGNoOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QaXhlbEZvcm1hdDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmZDb2xvckZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWdpb247CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmLk1vZGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxheW91dERpcmVjdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKKwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7CiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKIApAQCAtMTMzLDYgKzEzNiw5IEBACiAgICAgICAgICAgICAvLyBsYXp5IGFsbG9jYXRpb24gb2YgYSBwYWludAogICAgICAgICAgICAgc2V0RGl0aGVyKHN0YXRlLm1EaXRoZXIpOwogICAgICAgICB9CisgICAgICAgIGlmIChzdGF0ZS5tQ29sb3JGaWx0ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgc2V0Q29sb3JGaWx0ZXIoc3RhdGUubUNvbG9yRmlsdGVyKTsKKyAgICAgICAgfQogICAgICAgICBzZXRBdXRvTWlycm9yZWQoc3RhdGUubUF1dG9NaXJyb3JlZCk7CiAgICAgICAgIGlmIChtTmluZVBhdGNoICE9IG51bGwpIHsKICAgICAgICAgICAgIGNvbXB1dGVCaXRtYXBTaXplKCk7CkBAIC0yMTcsNyArMjIzLDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkRyYXcoQ2FudmFzIGNhbnZhcykgewogICAgICAgICBmaW5hbCBSZWN0IGJvdW5kcyA9IGdldEJvdW5kcygpOwogICAgICAgICBmaW5hbCBib29sZWFuIG5lZWRzTWlycm9yaW5nID0gbmVlZHNNaXJyb3JpbmcoKTsKICAgICAgICAgaWYgKG5lZWRzTWlycm9yaW5nKSB7CkBAIC0zNjYsOSArMzcyLDI1IEBACiAKICAgICAgICAgZmluYWwgYm9vbGVhbiBhdXRvbWlycm9yZWQgPSBhLmdldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTmluZVBhdGNoRHJhd2FibGVfYXV0b01pcnJvcmVkLCBmYWxzZSk7CisgICAgICAgIGZpbmFsIE5pbmVQYXRjaFN0YXRlIG5pbmVQYXRjaFN0YXRlID0gbmV3IE5pbmVQYXRjaFN0YXRlKAorICAgICAgICAgICAgICAgIG5ldyBOaW5lUGF0Y2goYml0bWFwLCBiaXRtYXAuZ2V0TmluZVBhdGNoQ2h1bmsoKSksIHBhZGRpbmcsIG9wdGljYWxJbnNldHMsIGRpdGhlciwKKyAgICAgICAgICAgICAgICBhdXRvbWlycm9yZWQpOwogCi0gICAgICAgIHNldE5pbmVQYXRjaFN0YXRlKG5ldyBOaW5lUGF0Y2hTdGF0ZShuZXcgTmluZVBhdGNoKGJpdG1hcCwgYml0bWFwLmdldE5pbmVQYXRjaENodW5rKCkpLAotICAgICAgICAgICAgICAgIHBhZGRpbmcsIG9wdGljYWxJbnNldHMsIGRpdGhlciwgYXV0b21pcnJvcmVkKSwgcik7CisgICAgICAgIGlmIChhLmhhc1ZhbHVlKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk5pbmVQYXRjaERyYXdhYmxlX2NvbG9yRmlsdGVyQ29sb3IpKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgY29sb3JGaWx0ZXJDb2xvciA9IGEuZ2V0Q29sb3IoCisgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk5pbmVQYXRjaERyYXdhYmxlX2NvbG9yRmlsdGVyQ29sb3IsIDApOworICAgICAgICAgICAgZmluYWwgaW50IG1vZGVWYWx1ZSA9IGEuZ2V0SW50KAorICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5OaW5lUGF0Y2hEcmF3YWJsZV9jb2xvckZpbHRlck1vZGUsCisgICAgICAgICAgICAgICAgICAgIE1vZGUuTVVMVElQTFkub3JkaW5hbCgpKTsKKyAgICAgICAgICAgIGZpbmFsIE1vZGUgbW9kZSA9IERyYXdhYmxlLnBhcnNlQ29sb3JGaWx0ZXJNb2RlKG1vZGVWYWx1ZSk7CisgICAgICAgICAgICBpZiAobW9kZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBhaW50IGJ5IHNldE5pbmVQYXRjaFN0YXRlKCkuCisgICAgICAgICAgICAgICAgbmluZVBhdGNoU3RhdGUubUNvbG9yRmlsdGVyID0gbmV3IFBvcnRlckR1ZmZDb2xvckZpbHRlcihjb2xvckZpbHRlckNvbG9yLCBtb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNldE5pbmVQYXRjaFN0YXRlKG5pbmVQYXRjaFN0YXRlLCByKTsKKwogICAgICAgICBtTmluZVBhdGNoU3RhdGUubVRhcmdldERlbnNpdHkgPSBtVGFyZ2V0RGVuc2l0eTsKIAogICAgICAgICBhLnJlY3ljbGUoKTsKQEAgLTQ0Nyw2ICs0NjksNyBAQAogICAgICAgICBpbnQgbUNoYW5naW5nQ29uZmlndXJhdGlvbnM7CiAgICAgICAgIGludCBtVGFyZ2V0RGVuc2l0eSA9IERpc3BsYXlNZXRyaWNzLkRFTlNJVFlfREVGQVVMVDsKICAgICAgICAgYm9vbGVhbiBtQXV0b01pcnJvcmVkOworICAgICAgICBDb2xvckZpbHRlciBtQ29sb3JGaWx0ZXI7CiAKICAgICAgICAgTmluZVBhdGNoU3RhdGUoTmluZVBhdGNoIG5pbmVQYXRjaCwgUmVjdCBwYWRkaW5nKSB7CiAgICAgICAgICAgICB0aGlzKG5pbmVQYXRjaCwgcGFkZGluZywgbmV3IFJlY3QoKSwgREVGQVVMVF9ESVRIRVIsIGZhbHNlKTsKQEAgLTQ3Nyw2ICs1MDAsNyBAQAogICAgICAgICAgICAgbUNoYW5naW5nQ29uZmlndXJhdGlvbnMgPSBzdGF0ZS5tQ2hhbmdpbmdDb25maWd1cmF0aW9uczsKICAgICAgICAgICAgIG1UYXJnZXREZW5zaXR5ID0gc3RhdGUubVRhcmdldERlbnNpdHk7CiAgICAgICAgICAgICBtQXV0b01pcnJvcmVkID0gc3RhdGUubUF1dG9NaXJyb3JlZDsKKyAgICAgICAgICAgIG1Db2xvckZpbHRlciA9IHN0YXRlLm1Db2xvckZpbHRlcjsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1BpY3R1cmVEcmF3YWJsZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1BpY3R1cmVEcmF3YWJsZS5qYXZhCmluZGV4IDFmNWQ0ZDguLjIxMThiMjMgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9QaWN0dXJlRHJhd2FibGUuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvUGljdHVyZURyYXdhYmxlLmphdmEKQEAgLTE2LDE2ICsxNiwxMiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGU7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yRmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4LlNjYWxlVG9GaXQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpY3R1cmU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QaXhlbEZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CiAKIC8qKgogICogRHJhd2FibGUgc3ViY2xhc3MgdGhhdCB3cmFwcyBhIFBpY3R1cmUsIGFsbG93aW5nIHRoZSBwaWN0dXJlIHRvIGJlIHVzZWQKQEAgLTY0LDcgKzYwLDcgQEAKICAgICB9CiAgICAgCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZHJhdyhDYW52YXMgY2FudmFzKSB7CisgICAgcHJvdGVjdGVkIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKICAgICAgICAgaWYgKG1QaWN0dXJlICE9IG51bGwpIHsKICAgICAgICAgICAgIFJlY3QgYm91bmRzID0gZ2V0Qm91bmRzKCk7CiAgICAgICAgICAgICBjYW52YXMuc2F2ZSgpOwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1JldmVhbERyYXdhYmxlLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvUmV2ZWFsRHJhd2FibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzU3YWUxCi0tLSAvZGV2L251bGwKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1JldmVhbERyYXdhYmxlLmphdmEKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGU7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZi5Nb2RlOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZlhmZXJtb2RlOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOworaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKKworaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7CitpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworLyoqCisgKiBBbiBleHRlbnNpb24gb2YgTGF5ZXJEcmF3YWJsZSB0aGF0IGlzIGludGVuZGVkIHRvIHJlYWN0IHRvIHRvdWNoIGhvdHNwb3RzCisgKiBhbmQgcmV2ZWFsIHRoZSBzZWNvbmQgbGF5ZXIgYXRvcCB0aGUgZmlyc3QuCisgKiA8cD4KKyAqIEl0IGNhbiBiZSBkZWZpbmVkIGluIGFuIFhNTCBmaWxlIHdpdGggdGhlIDxjb2RlPiZsdDtyZXZlYWwmZ3Q7PC9jb2RlPiBlbGVtZW50LgorICogRWFjaCBEcmF3YWJsZSBpbiB0aGUgdHJhbnNpdGlvbiBpcyBkZWZpbmVkIGluIGEgbmVzdGVkIDxjb2RlPiZsdDtpdGVtJmd0OzwvY29kZT4uCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBndWlkZSB0byA8YSBocmVmPSJ7QGRvY1Jvb3R9CisgKiBndWlkZS90b3BpY3MvcmVzb3VyY2VzL2RyYXdhYmxlLXJlc291cmNlLmh0bWwiPkRyYXdhYmxlIFJlc291cmNlczwvYT4uCisgKgorICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjTGF5ZXJEcmF3YWJsZUl0ZW1fbGVmdAorICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjTGF5ZXJEcmF3YWJsZUl0ZW1fdG9wCisgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNMYXllckRyYXdhYmxlSXRlbV9yaWdodAorICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjTGF5ZXJEcmF3YWJsZUl0ZW1fYm90dG9tCisgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNMYXllckRyYXdhYmxlSXRlbV9kcmF3YWJsZQorICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjTGF5ZXJEcmF3YWJsZUl0ZW1faWQKKyAqLworcHVibGljIGNsYXNzIFJldmVhbERyYXdhYmxlIGV4dGVuZHMgTGF5ZXJEcmF3YWJsZSB7CisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1UZW1wUmVjdCA9IG5ldyBSZWN0KCk7CisKKyAgICAvKiogTGF6aWx5LWNyZWF0ZWQgbWFwIG9mIHRvdWNoIGhvdHNwb3QgSURzIHRvIHJpcHBsZXMuICovCisgICAgcHJpdmF0ZSBTcGFyc2VBcnJheTxSaXBwbGU+IG1Ub3VjaGVkUmlwcGxlczsKKworICAgIC8qKiBMYXppbHktY3JlYXRlZCBsaXN0IG9mIGFjdGl2ZWx5IGFuaW1hdGluZyByaXBwbGVzLiAqLworICAgIHByaXZhdGUgQXJyYXlMaXN0PFJpcHBsZT4gbUFjdGl2ZVJpcHBsZXM7CisKKyAgICAvKiogTGF6aWx5LWNyZWF0ZWQgcnVubmFibGUgZm9yIHNjaGVkdWxpbmcgaW52YWxpZGF0aW9uLiAqLworICAgIHByaXZhdGUgUnVubmFibGUgbUFuaW1hdGlvblJ1bm5hYmxlOworCisgICAgLyoqIFdoZXRoZXIgdGhlIGFuaW1hdGlvbiBydW5uYWJsZSBoYXMgYmVlbiBwb3N0ZWQuICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1BbmltYXRpbmc7CisKKyAgICAvKiogVGFyZ2V0IGRlbnNpdHksIHVzZWQgdG8gc2NhbGUgZGVuc2l0eS1pbmRlcGVuZGVudCBwaXhlbHMuICovCisgICAgcHJpdmF0ZSBmbG9hdCBtRGVuc2l0eSA9IDEuMGY7CisKKyAgICAvKiogUGFpbnQgdXNlZCB0byBjb250cm9sIGFwcGVhcmFuY2Ugb2YgcmlwcGxlcy4gKi8KKyAgICBwcml2YXRlIFBhaW50IG1SaXBwbGVQYWludDsKKworICAgIC8qKiBQYWludCB1c2VkIHRvIGNvbnRyb2wgcmV2ZWFsIGxheWVyIG1hc2tpbmcuICovCisgICAgcHJpdmF0ZSBQYWludCBtTWFza2luZ1BhaW50OworCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IHJldmVhbCBkcmF3YWJsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbGlzdCBvZiBsYXllcnMuIEF0IGxlYXN0CisgICAgICogdHdvIGxheWVycyBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgZHJhd2FibGUgdG8gd29yayBwcm9wZXJseS4KKyAgICAgKi8KKyAgICBwdWJsaWMgUmV2ZWFsRHJhd2FibGUoRHJhd2FibGVbXSBsYXllcnMpIHsKKyAgICAgICAgdGhpcyhuZXcgUmV2ZWFsU3RhdGUobnVsbCwgbnVsbCwgbnVsbCksIGxheWVycyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IHJldmVhbCBkcmF3YWJsZSB3aXRoIG5vIGxheWVycy4gVG8gd29yayBjb3JyZWN0bHksIGF0IGxlYXN0CisgICAgICogdHdvIGxheWVycyBtdXN0IGJlIGFkZGVkIHRvIHRoaXMgZHJhd2FibGUuCisgICAgICoKKyAgICAgKiBAc2VlICNSZXZlYWxEcmF3YWJsZShEcmF3YWJsZVtdKQorICAgICAqLworICAgIFJldmVhbERyYXdhYmxlKCkgeworICAgICAgICB0aGlzKG5ldyBSZXZlYWxTdGF0ZShudWxsLCBudWxsLCBudWxsKSwgKFJlc291cmNlcykgbnVsbCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBSZXZlYWxEcmF3YWJsZShSZXZlYWxTdGF0ZSBzdGF0ZSwgUmVzb3VyY2VzIHJlcykgeworICAgICAgICBzdXBlcihzdGF0ZSwgcmVzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFJldmVhbERyYXdhYmxlKFJldmVhbFN0YXRlIHN0YXRlLCBEcmF3YWJsZVtdIGxheWVycykgeworICAgICAgICBzdXBlcihsYXllcnMsIHN0YXRlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBpbmZsYXRlKFJlc291cmNlcyByLCBYbWxQdWxsUGFyc2VyIHBhcnNlciwgQXR0cmlidXRlU2V0IGF0dHJzKQorICAgICAgICAgICAgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuaW5mbGF0ZShyLCBwYXJzZXIsIGF0dHJzKTsKKworICAgICAgICBzZXRUYXJnZXREZW5zaXR5KHIuZ2V0RGlzcGxheU1ldHJpY3MoKSk7CisgICAgICAgIHNldFBhZGRpbmdNb2RlKFBBRERJTkdfTU9ERV9TVEFDSyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgTGF5ZXJTdGF0ZSBjcmVhdGVDb25zdGFudFN0YXRlKExheWVyU3RhdGUgc3RhdGUsIFJlc291cmNlcyByZXMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXZlYWxTdGF0ZSgoUmV2ZWFsU3RhdGUpIHN0YXRlLCB0aGlzLCByZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgZGVuc2l0eSBhdCB3aGljaCB0aGlzIGRyYXdhYmxlIHdpbGwgYmUgcmVuZGVyZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWV0cmljcyBUaGUgZGlzcGxheSBtZXRyaWNzIGZvciB0aGlzIGRyYXdhYmxlLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBzZXRUYXJnZXREZW5zaXR5KERpc3BsYXlNZXRyaWNzIG1ldHJpY3MpIHsKKyAgICAgICAgaWYgKG1EZW5zaXR5ICE9IG1ldHJpY3MuZGVuc2l0eSkgeworICAgICAgICAgICAgbURlbnNpdHkgPSBtZXRyaWNzLmRlbnNpdHk7CisgICAgICAgICAgICBpbnZhbGlkYXRlU2VsZigpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUgdW50aWwgaG90c3BvdCBBUElzIGFyZSBmaW5hbGl6ZWQKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0hvdHNwb3RzKCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZSB1bnRpbCBob3RzcG90IEFQSXMgYXJlIGZpbmFsaXplZAorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldEhvdHNwb3QoaW50IGlkLCBmbG9hdCB4LCBmbG9hdCB5KSB7CisgICAgICAgIGlmIChtVG91Y2hlZFJpcHBsZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgbVRvdWNoZWRSaXBwbGVzID0gbmV3IFNwYXJzZUFycmF5PFJpcHBsZT4oKTsKKyAgICAgICAgICAgIG1BY3RpdmVSaXBwbGVzID0gbmV3IEFycmF5TGlzdDxSaXBwbGU+KCk7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBSaXBwbGUgcmlwcGxlID0gbVRvdWNoZWRSaXBwbGVzLmdldChpZCk7CisgICAgICAgIGlmIChyaXBwbGUgPT0gbnVsbCkgeworICAgICAgICAgICAgZmluYWwgUmVjdCBwYWRkaW5nID0gbVRlbXBSZWN0OworICAgICAgICAgICAgZ2V0UGFkZGluZyhwYWRkaW5nKTsKKworICAgICAgICAgICAgZmluYWwgUmlwcGxlIG5ld1JpcHBsZSA9IG5ldyBSaXBwbGUoZ2V0Qm91bmRzKCksIHBhZGRpbmcsIHgsIHksIG1EZW5zaXR5KTsKKyAgICAgICAgICAgIG5ld1JpcHBsZS5lbnRlcigpOworCisgICAgICAgICAgICBtQWN0aXZlUmlwcGxlcy5hZGQobmV3UmlwcGxlKTsKKyAgICAgICAgICAgIG1Ub3VjaGVkUmlwcGxlcy5wdXQoaWQsIG5ld1JpcHBsZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaXBwbGUubW92ZSh4LCB5KTsKKyAgICAgICAgfQorCisgICAgICAgIHNjaGVkdWxlQW5pbWF0aW9uKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUgdW50aWwgaG90c3BvdCBBUElzIGFyZSBmaW5hbGl6ZWQKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVIb3RzcG90KGludCBpZCkgeworICAgICAgICBpZiAobVRvdWNoZWRSaXBwbGVzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIFJpcHBsZSByaXBwbGUgPSBtVG91Y2hlZFJpcHBsZXMuZ2V0KGlkKTsKKyAgICAgICAgaWYgKHJpcHBsZSAhPSBudWxsKSB7CisgICAgICAgICAgICByaXBwbGUuZXhpdCgpOworCisgICAgICAgICAgICBtVG91Y2hlZFJpcHBsZXMucmVtb3ZlKGlkKTsKKyAgICAgICAgICAgIHNjaGVkdWxlQW5pbWF0aW9uKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZSB1bnRpbCBob3RzcG90IEFQSXMgYXJlIGZpbmFsaXplZAorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGNsZWFySG90c3BvdHMoKSB7CisgICAgICAgIGlmIChtVG91Y2hlZFJpcHBsZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgaW50IG4gPSBtVG91Y2hlZFJpcHBsZXMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgZmluYWwgUmlwcGxlIHJpcHBsZSA9IG1Ub3VjaGVkUmlwcGxlcy52YWx1ZUF0KGkpOworICAgICAgICAgICAgcmlwcGxlLmV4aXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuID4gMCkgeworICAgICAgICAgICAgbVRvdWNoZWRSaXBwbGVzLmNsZWFyKCk7CisgICAgICAgICAgICBzY2hlZHVsZUFuaW1hdGlvbigpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2NoZWR1bGVzIHRoZSBuZXh0IGFuaW1hdGlvbiwgaWYgbmVjZXNzYXJ5LgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIHsKKyAgICAgICAgaWYgKG1BY3RpdmVSaXBwbGVzID09IG51bGwgfHwgbUFjdGl2ZVJpcHBsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtQW5pbWF0aW5nID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoIW1BbmltYXRpbmcpIHsKKyAgICAgICAgICAgIG1BbmltYXRpbmcgPSB0cnVlOworCisgICAgICAgICAgICBpZiAobUFuaW1hdGlvblJ1bm5hYmxlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtQW5pbWF0aW9uUnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtQW5pbWF0aW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZUFuaW1hdGlvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZVNlbGYoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNjaGVkdWxlU2VsZihtQW5pbWF0aW9uUnVubmFibGUsIFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpICsgMTAwMCAvIDYwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGRyYXcoQ2FudmFzIGNhbnZhcykgeworICAgICAgICBmaW5hbCBpbnQgbGF5ZXJDb3VudCA9IGdldE51bWJlck9mTGF5ZXJzKCk7CisgICAgICAgIGlmIChsYXllckNvdW50ID09IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdldERyYXdhYmxlKDApLmRyYXcoY2FudmFzKTsKKworICAgICAgICBmaW5hbCBBcnJheUxpc3Q8UmlwcGxlPiBhY3RpdmVSaXBwbGVzID0gbUFjdGl2ZVJpcHBsZXM7CisgICAgICAgIGlmIChsYXllckNvdW50ID09IDEgfHwgYWN0aXZlUmlwcGxlcyA9PSBudWxsIHx8IGFjdGl2ZVJpcHBsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIHJldmVhbCwgd2UncmUgZG9uZSBoZXJlLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgUmVjdCBib3VuZHMgPSBnZXRCb3VuZHMoKTsKKyAgICAgICAgZmluYWwgaW50IHdpZHRoID0gYm91bmRzLndpZHRoKCk7CisgICAgICAgIGZpbmFsIGludCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0KCk7CisKKyAgICAgICAgaWYgKG1SaXBwbGVQYWludCA9PSBudWxsKSB7CisgICAgICAgICAgICBtUmlwcGxlUGFpbnQgPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgICAgIG1SaXBwbGVQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBEcmF3IHJpcHBsZSBtYXNrIGludG8gYSBidWZmZXIgdGhhdCBtZXJnZXMgdXNpbmcgU1JDX09WRVIuCisgICAgICAgIGludCBsYXllclNhdmVDb3VudCA9IC0xOworICAgICAgICBpbnQgbiA9IGFjdGl2ZVJpcHBsZXMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgZmluYWwgUmlwcGxlIHJpcHBsZSA9IGFjdGl2ZVJpcHBsZXMuZ2V0KGkpOworICAgICAgICAgICAgaWYgKCFyaXBwbGUuYWN0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBhY3RpdmVSaXBwbGVzLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICAgICAgbi0tOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobGF5ZXJTYXZlQ291bnQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxheWVyU2F2ZUNvdW50ID0gY2FudmFzLnNhdmVMYXllcigwLCAwLCB3aWR0aCwgaGVpZ2h0LCBudWxsLCAwKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByaXBwbGUuZHJhdyhjYW52YXMsIG1SaXBwbGVQYWludCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBhIGxheWVyIHdhcyBzYXZlZCwgaXQgY29udGFpbnMgdGhlIHJpcHBsZSBtYXNrLiBEcmF3IHRoZSByZXZlYWwKKyAgICAgICAgLy8gaW50byBhbm90aGVyIGxheWVyIGFuZCBjb21wb3NpdGUgdXNpbmcgU1JDX0lOLCB0aGVuIGNvbXBvc2l0ZSBvbnRvCisgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBjYW52YXMuCisgICAgICAgIGlmIChsYXllclNhdmVDb3VudCA+PSAwKSB7CisgICAgICAgICAgICBpZiAobU1hc2tpbmdQYWludCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbU1hc2tpbmdQYWludCA9IG5ldyBQYWludCgpOworICAgICAgICAgICAgICAgIG1NYXNraW5nUGFpbnQuc2V0WGZlcm1vZGUobmV3IFBvcnRlckR1ZmZYZmVybW9kZShNb2RlLlNSQ19JTikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUT0RPOiBXaGVuIERyYXdhYmxlLnNldFhmZXJtb2RlKCkgaXMgc3VwcG9ydGVkIGJ5IGFsbCBkcmF3YWJsZXMsCisgICAgICAgICAgICAvLyB3ZSB3b24ndCBuZWVkIGFuIGV4dHJhIGxheWVyLgorICAgICAgICAgICAgY2FudmFzLnNhdmVMYXllcigwLCAwLCB3aWR0aCwgaGVpZ2h0LCBtTWFza2luZ1BhaW50LCAwKTsKKyAgICAgICAgICAgIGdldERyYXdhYmxlKDEpLmRyYXcoY2FudmFzKTsKKyAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChsYXllclNhdmVDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBSZXZlYWxTdGF0ZSBleHRlbmRzIExheWVyU3RhdGUgeworICAgICAgICBwdWJsaWMgUmV2ZWFsU3RhdGUoUmV2ZWFsU3RhdGUgb3JpZywgUmV2ZWFsRHJhd2FibGUgb3duZXIsIFJlc291cmNlcyByZXMpIHsKKyAgICAgICAgICAgIHN1cGVyKG9yaWcsIG93bmVyLCByZXMpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBEcmF3YWJsZSBuZXdEcmF3YWJsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXdEcmF3YWJsZShudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgRHJhd2FibGUgbmV3RHJhd2FibGUoUmVzb3VyY2VzIHJlcykgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXZlYWxEcmF3YWJsZSh0aGlzLCByZXMpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1JpcHBsZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1JpcHBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNzhjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvUmlwcGxlLmphdmEKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGU7CisKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5UaW1lSW50ZXJwb2xhdG9yOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludC5TdHlsZTsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CitpbXBvcnQgYW5kcm9pZC51dGlsLk1hdGhVdGlsczsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvblV0aWxzOworaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uRGVjZWxlcmF0ZUludGVycG9sYXRvcjsKKworLyoqCisgKiBEcmF3cyBhIFF1YW50dW0gUGFwZXIgcmlwcGxlLgorICovCitjbGFzcyBSaXBwbGUgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRpbWVJbnRlcnBvbGF0b3IgSU5URVJQT0xBVE9SID0gbmV3IERlY2VsZXJhdGVJbnRlcnBvbGF0b3IoMi4wZik7CisKKyAgICAvKiogU3RhcnRpbmcgcmFkaXVzIGZvciBhIHJpcHBsZS4gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBUlRJTkdfUkFESVVTX0RQID0gNDA7CisKKyAgICAvKiogUmFkaXVzIHdoZW4gZmluZ2VyIGlzIG91dHNpZGUgdmlldyBib3VuZHMuICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9VVFNJREVfUkFESVVTX0RQID0gNDA7CisKKyAgICAvKiogTWFyZ2luIHdoZW4gY29uc3RyYWluaW5nIG91dHNpZGUgdG91Y2hlcyAoZnJhY3Rpb24gb2Ygb3V0ZXIgcmFkaXVzKS4gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBPVVRTSURFX01BUkdJTiA9IDAuOGY7CisKKyAgICAvKiogUmVzaXN0YW5jZSBmYWN0b3Igd2hlbiBjb25zdHJhaW5pbmcgb3V0c2lkZSB0b3VjaGVzLiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0IE9VVFNJREVfUkVTSVNUQU5DRSA9IDAuN2Y7CisKKyAgICAvKiogRHVyYXRpb24gZm9yIGFuaW1hdGluZyB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgcmlwcGxlLiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFWElUX0RVUkFUSU9OID0gNjAwOworCisgICAgLyoqIER1cmF0aW9uIGZvciBhbmltYXRpbmcgdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgcmlwcGxlLiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFTlRFUl9EVVJBVElPTiA9IDQwMDsKKworICAgIC8qKiBNaW5pbXVtIGVsYXBzZWQgdGltZSBiZXR3ZWVuIHN0YXJ0IG9mIGVudGVyIGFuZCBleGl0IGFuaW1hdGlvbnMuICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYSVRfTUlOX0RFTEFZID0gMjAwOworCisgICAgLyoqIER1cmF0aW9uIGZvciBhbmltYXRpbmcgYmV0d2VlbiBpbnNpZGUgYW5kIG91dHNpZGUgdG91Y2guICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9VVFNJREVfRFVSQVRJT04gPSAzMDA7CisKKyAgICAvKiogRHVyYXRpb24gZm9yIGFuaW1hdGluZyBwdWxzZXMuICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBVTFNFX0RVUkFUSU9OID0gNDAwOworCisgICAgLyoqIEludGVydmFsIGJldHdlZW4gcHVsc2VzIHdoaWxlIGluc2lkZSBhbmQgZnVsbHkgZW50ZXJlZC4gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFVMU0VfSU5URVJWQUwgPSA0MDA7CisKKyAgICAvKiogTWluaW11bSBhbHBoYSB2YWx1ZSBkdXJpbmcgYSBwdWxzZSBhbmltYXRpb24uICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBVTFNFX01JTl9BTFBIQSA9IDEyODsKKworICAgIC8qKiBEZWxheSBiZWZvcmUgcHVsc2VzIHN0YXJ0LiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQVUxTRV9ERUxBWSA9IDUwMDsKKworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtQm91bmRzOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtUGFkZGluZzsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtTWluUmFkaXVzOworICAgIHByaXZhdGUgZmluYWwgaW50IG1PdXRzaWRlUmFkaXVzOworCisgICAgLyoqIENlbnRlciB4LWNvb3JkaW5hdGUuICovCisgICAgcHJpdmF0ZSBmbG9hdCBtWDsKKworICAgIC8qKiBDZW50ZXIgeS1jb29yZGluYXRlLiAqLworICAgIHByaXZhdGUgZmxvYXQgbVk7CisKKyAgICAvKiogV2hldGhlciB0aGUgY2VudGVyIGlzIHdpdGhpbiB0aGUgcGFyZW50IGJvdW5kcy4gKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gbUluc2lkZTsKKworICAgIC8qKiBXaGVuIHRoZSByaXBwbGUgc3RhcnRlZCBhcHBlYXJpbmcuICovCisgICAgcHJpdmF0ZSBsb25nIG1FbnRlclRpbWUgPSAtMTsKKworICAgIC8qKiBXaGVuIHRoZSByaXBwbGUgc3RhcnRlZCB2YW5pc2hpbmcuICovCisgICAgcHJpdmF0ZSBsb25nIG1FeGl0VGltZSA9IC0xOworCisgICAgLyoqIFdoZW4gdGhlIHJpcHBsZSBsYXN0IHRyYW5zaXRpb25lZCBiZXR3ZWVuIGluc2lkZSBhbmQgb3V0c2lkZSB0b3VjaC4gKi8KKyAgICBwcml2YXRlIGxvbmcgbU91dHNpZGVUaW1lID0gLTE7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHJpcHBsZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyZW50IGJvdW5kcywgcGFkZGluZywgaW5pdGlhbAorICAgICAqIHBvc2l0aW9uLCBhbmQgc2NyZWVuIGRlbnNpdHkuCisgICAgICovCisgICAgcHVibGljIFJpcHBsZShSZWN0IGJvdW5kcywgUmVjdCBwYWRkaW5nLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBkZW5zaXR5KSB7CisgICAgICAgIG1Cb3VuZHMgPSBib3VuZHM7CisgICAgICAgIG1QYWRkaW5nID0gcGFkZGluZzsKKyAgICAgICAgbUluc2lkZSA9IG1Cb3VuZHMuY29udGFpbnMoKGludCkgeCwgKGludCkgeSk7CisKKyAgICAgICAgbVggPSB4OworICAgICAgICBtWSA9IHk7CisKKyAgICAgICAgbU1pblJhZGl1cyA9IChpbnQpIChkZW5zaXR5ICogU1RBUlRJTkdfUkFESVVTX0RQICsgMC41Zik7CisgICAgICAgIG1PdXRzaWRlUmFkaXVzID0gKGludCkgKGRlbnNpdHkgKiBPVVRTSURFX1JBRElVU19EUCArIDAuNWYpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGNlbnRlciBjb29yZGluYXRlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtb3ZlKGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgbVggPSB4OworICAgICAgICBtWSA9IHk7CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBpbnNpZGUgPSBtQm91bmRzLmNvbnRhaW5zKChpbnQpIHgsIChpbnQpIHkpOworICAgICAgICBpZiAobUluc2lkZSAhPSBpbnNpZGUpIHsKKyAgICAgICAgICAgIG1PdXRzaWRlVGltZSA9IEFuaW1hdGlvblV0aWxzLmN1cnJlbnRBbmltYXRpb25UaW1lTWlsbGlzKCk7CisgICAgICAgICAgICBtSW5zaWRlID0gaW5zaWRlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RhcnRzIHRoZSBlbnRlciBhbmltYXRpb24uCisgICAgICovCisgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgIG1FbnRlclRpbWUgPSBBbmltYXRpb25VdGlscy5jdXJyZW50QW5pbWF0aW9uVGltZU1pbGxpcygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0cyB0aGUgZXhpdCBhbmltYXRpb24uIElmIHtAbGluayAjZW50ZXIoKX0gd2FzIGNhbGxlZCByZWNlbnRseSwgdGhlCisgICAgICogYW5pbWF0aW9uIG1heSBiZSBwb3N0cG9uZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKKyAgICAgICAgZmluYWwgbG9uZyBtaW5UaW1lID0gbUVudGVyVGltZSArIEVYSVRfTUlOX0RFTEFZOworICAgICAgICBtRXhpdFRpbWUgPSBNYXRoLm1heChtaW5UaW1lLCBBbmltYXRpb25VdGlscy5jdXJyZW50QW5pbWF0aW9uVGltZU1pbGxpcygpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyByaXBwbGUgaXMgY3VycmVudGx5IGFuaW1hdGluZy4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBhY3RpdmUoKSB7CisgICAgICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWUgPSBBbmltYXRpb25VdGlscy5jdXJyZW50QW5pbWF0aW9uVGltZU1pbGxpcygpOworICAgICAgICByZXR1cm4gbUVudGVyVGltZSA+PSAwICYmIG1FbnRlclRpbWUgPD0gY3VycmVudFRpbWUKKyAgICAgICAgICAgICAgICAmJiAobUV4aXRUaW1lIDwgMCB8fCBjdXJyZW50VGltZSA8PSBtRXhpdFRpbWUgKyBFWElUX0RVUkFUSU9OKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJhaW5zIGEgdmFsdWUgd2l0aGluIGEgc3BlY2lmaWVkIGFzeW1wdG90aWMgbWFyZ2luIG91dHNpZGUgYSBtaW5pbXVtCisgICAgICogYW5kIG1heGltdW0uCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgbG9vc2VDb25zdHJhaW4oZmxvYXQgdmFsdWUsIGZsb2F0IG1pbiwgZmxvYXQgbWF4LCBmbG9hdCBtYXJnaW4sCisgICAgICAgICAgICBmbG9hdCBmYWN0b3IpIHsKKyAgICAgICAgaWYgKHZhbHVlIDwgbWluKSB7CisgICAgICAgICAgICByZXR1cm4gbWluIC0gTWF0aC5taW4obWFyZ2luLCAoZmxvYXQpIE1hdGgucG93KG1pbiAtIHZhbHVlLCBmYWN0b3IpKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+IG1heCkgeworICAgICAgICAgICAgcmV0dXJuIG1heCArIE1hdGgubWluKG1hcmdpbiwgKGZsb2F0KSBNYXRoLnBvdyh2YWx1ZSAtIG1heCwgZmFjdG9yKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBkcmF3KENhbnZhcyBjLCBQYWludCBwKSB7CisgICAgICAgIGZpbmFsIFJlY3QgYm91bmRzID0gbUJvdW5kczsKKyAgICAgICAgZmluYWwgUmVjdCBwYWRkaW5nID0gbVBhZGRpbmc7CisgICAgICAgIGZpbmFsIGZsb2F0IGRYID0gTWF0aC5tYXgobVgsIGJvdW5kcy5yaWdodCAtIG1YKTsKKyAgICAgICAgZmluYWwgZmxvYXQgZFkgPSBNYXRoLm1heChtWSwgYm91bmRzLmJvdHRvbSAtIG1ZKTsKKyAgICAgICAgZmluYWwgaW50IG1heFJhZGl1cyA9IChpbnQpIE1hdGguY2VpbChNYXRoLnNxcnQoZFggKiBkWCArIGRZICogZFkpKTsKKworICAgICAgICAvLyBUcmFjayB0aHJlZSBzdGF0ZXM6CisgICAgICAgIC8vIC0gRW50ZXI6IHRvdWNoIGJlZ2lucywgYWZmZWN0cyBvdXRlciByYWRpdXMKKyAgICAgICAgLy8gLSBPdXRzaWRlOiB0b3VjaCBtb3ZlcyBvdXRzaWRlIGJvdW5kcywgYWZmZWN0cyBtYXhpbXVtIG91dGVyIHJhZGl1cworICAgICAgICAvLyAtIEV4aXQ6IHRvdWNoIGVuZHMsIGFmZmVjdHMgaW5uZXIgcmFkaXVzCisgICAgICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWUgPSBBbmltYXRpb25VdGlscy5jdXJyZW50QW5pbWF0aW9uVGltZU1pbGxpcygpOworICAgICAgICBmaW5hbCBmbG9hdCBlbnRlclN0YXRlID0gbUVudGVyVGltZSA8IDAgPyAwIDogSU5URVJQT0xBVE9SLmdldEludGVycG9sYXRpb24oCisgICAgICAgICAgICAgICAgTWF0aFV0aWxzLmNvbnN0cmFpbigoY3VycmVudFRpbWUgLSBtRW50ZXJUaW1lKSAvIChmbG9hdCkgRU5URVJfRFVSQVRJT04sIDAsIDEpKTsKKyAgICAgICAgZmluYWwgZmxvYXQgb3V0c2lkZVN0YXRlID0gbU91dHNpZGVUaW1lIDwgMCA/IDEgOiBJTlRFUlBPTEFUT1IuZ2V0SW50ZXJwb2xhdGlvbigKKyAgICAgICAgICAgICAgICBNYXRoVXRpbHMuY29uc3RyYWluKChjdXJyZW50VGltZSAtIG1PdXRzaWRlVGltZSkgLyAoZmxvYXQpIE9VVFNJREVfRFVSQVRJT04sIDAsIDEpKTsKKyAgICAgICAgZmluYWwgZmxvYXQgZXhpdFN0YXRlID0gbUV4aXRUaW1lIDwgMCA/IDAgOiBJTlRFUlBPTEFUT1IuZ2V0SW50ZXJwb2xhdGlvbigKKyAgICAgICAgICAgICAgICBNYXRoVXRpbHMuY29uc3RyYWluKChjdXJyZW50VGltZSAtIG1FeGl0VGltZSkgLyAoZmxvYXQpIEVYSVRfRFVSQVRJT04sIDAsIDEpKTsKKyAgICAgICAgZmluYWwgZmxvYXQgaW5zaWRlUmFkaXVzID0gTWF0aFV0aWxzLmxlcnAobU1pblJhZGl1cywgbWF4UmFkaXVzLCBlbnRlclN0YXRlKTsKKyAgICAgICAgZmluYWwgZmxvYXQgb3V0ZXJSYWRpdXMgPSBNYXRoVXRpbHMubGVycChtT3V0c2lkZVJhZGl1cywgaW5zaWRlUmFkaXVzLAorICAgICAgICAgICAgICAgIG1JbnNpZGUgPyBvdXRzaWRlU3RhdGUgOiAxIC0gb3V0c2lkZVN0YXRlKTsKKworICAgICAgICAvLyBBcHBseSByZXNpc3RhbmNlIGVmZmVjdCB3aGVuIG91dHNpZGUgYm91bmRzLgorICAgICAgICBmaW5hbCBmbG9hdCB4ID0gbG9vc2VDb25zdHJhaW4obVgsIGJvdW5kcy5sZWZ0ICsgcGFkZGluZy5sZWZ0LCBib3VuZHMucmlnaHQgLSBwYWRkaW5nLnJpZ2h0LAorICAgICAgICAgICAgICAgIG91dGVyUmFkaXVzICogT1VUU0lERV9NQVJHSU4sIE9VVFNJREVfUkVTSVNUQU5DRSk7CisgICAgICAgIGZpbmFsIGZsb2F0IHkgPSBsb29zZUNvbnN0cmFpbihtWSwgYm91bmRzLnRvcCArIHBhZGRpbmcudG9wLCBib3VuZHMuYm90dG9tIC0gcGFkZGluZy5ib3R0b20sCisgICAgICAgICAgICAgICAgb3V0ZXJSYWRpdXMgKiBPVVRTSURFX01BUkdJTiwgT1VUU0lERV9SRVNJU1RBTkNFKTsKKworICAgICAgICAvLyBDb21wdXRlIG1heGltdW0gYWxwaGEsIHRha2luZyBwdWxzZSBpbnRvIGFjY291bnQgd2hlbiBhY3RpdmUuCisgICAgICAgIGZpbmFsIGxvbmcgcHVsc2VUaW1lID0gKGN1cnJlbnRUaW1lIC0gbUVudGVyVGltZSAtIEVOVEVSX0RVUkFUSU9OIC0gUFVMU0VfREVMQVkpOworICAgICAgICBmaW5hbCBpbnQgbWF4QWxwaGE7CisgICAgICAgIGlmIChwdWxzZVRpbWUgPCAwKSB7CisgICAgICAgICAgICBtYXhBbHBoYSA9IDI1NTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IHB1bHNlU3RhdGUgPSAocHVsc2VUaW1lICUgKFBVTFNFX0lOVEVSVkFMICsgUFVMU0VfRFVSQVRJT04pKQorICAgICAgICAgICAgICAgICAgICAvIChmbG9hdCkgUFVMU0VfRFVSQVRJT047CisgICAgICAgICAgICBpZiAocHVsc2VTdGF0ZSA+PSAxKSB7CisgICAgICAgICAgICAgICAgbWF4QWxwaGEgPSAyNTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IHB1bHNlQWxwaGE7CisgICAgICAgICAgICAgICAgaWYgKHB1bHNlU3RhdGUgPiAwLjUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUHVsc2luZyBpbiB0byBtYXggYWxwaGEuCisgICAgICAgICAgICAgICAgICAgIHB1bHNlQWxwaGEgPSBNYXRoVXRpbHMubGVycChQVUxTRV9NSU5fQUxQSEEsIDI1NSwgKHB1bHNlU3RhdGUgLSAuNWYpICogMik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUHVsc2luZyBvdXQgdG8gbWluIGFscGhhLgorICAgICAgICAgICAgICAgICAgICBwdWxzZUFscGhhID0gTWF0aFV0aWxzLmxlcnAoMjU1LCBQVUxTRV9NSU5fQUxQSEEsIHB1bHNlU3RhdGUgKiAyZik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGV4aXRTdGF0ZSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQW5pbWF0aW5nIGV4aXQsIGludGVycG9sYXRlIHB1bHNlIHdpdGggZXhpdCBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgbWF4QWxwaGEgPSAoaW50KSAoTWF0aFV0aWxzLmxlcnAoMjU1LCBwdWxzZUFscGhhLCBleGl0U3RhdGUpICsgMC41Zik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtSW5zaWRlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vIGFuaW1hdGlvbiwgbm8gbmVlZCB0byBpbnRlcnBvbGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgbWF4QWxwaGEgPSAoaW50KSAocHVsc2VBbHBoYSArIDAuNWYpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFuaW1hdGluZyBpbnNpZGUsIGludGVycG9sYXRlIHB1bHNlIHdpdGggaW5zaWRlIHN0YXRlLgorICAgICAgICAgICAgICAgICAgICBtYXhBbHBoYSA9IChpbnQpIChNYXRoVXRpbHMubGVycChwdWxzZUFscGhhLCAyNTUsIG91dHNpZGVTdGF0ZSkgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXhpdFN0YXRlIDw9IDApIHsKKyAgICAgICAgICAgIC8vIEV4aXQgc3RhdGUgaXNuJ3Qgc2hvd2luZywgc28gd2UgY2FuIHNpbXBsaWZ5IHRvIGEgc29saWQKKyAgICAgICAgICAgIC8vIGNpcmNsZS4KKyAgICAgICAgICAgIGlmIChvdXRlclJhZGl1cyA+IDApIHsKKyAgICAgICAgICAgICAgICBwLnNldEFscGhhKG1heEFscGhhKTsKKyAgICAgICAgICAgICAgICBwLnNldFN0eWxlKFN0eWxlLkZJTEwpOworICAgICAgICAgICAgICAgIGMuZHJhd0NpcmNsZSh4LCB5LCBvdXRlclJhZGl1cywgcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCb3RoIHN0YXRlcyBhcmUgc2hvd2luZywgc28gd2UgbmVlZCBhIGNpcmN1bGFyIHN0cm9rZS4KKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IGlubmVyUmFkaXVzID0gTWF0aFV0aWxzLmxlcnAoMCwgb3V0ZXJSYWRpdXMsIGV4aXRTdGF0ZSk7CisgICAgICAgICAgICBmaW5hbCBmbG9hdCBzdHJva2VXaWR0aCA9IG91dGVyUmFkaXVzIC0gaW5uZXJSYWRpdXM7CisgICAgICAgICAgICBpZiAoc3Ryb2tlV2lkdGggPiAwKSB7CisgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgc3Ryb2tlUmFkaXVzID0gaW5uZXJSYWRpdXMgKyBzdHJva2VXaWR0aCAvIDJmOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBhbHBoYSA9IChpbnQpIChNYXRoVXRpbHMubGVycChtYXhBbHBoYSwgMCwgZXhpdFN0YXRlKSArIDAuNWYpOworICAgICAgICAgICAgICAgIHAuc2V0QWxwaGEoYWxwaGEpOworICAgICAgICAgICAgICAgIHAuc2V0U3R5bGUoU3R5bGUuU1RST0tFKTsKKyAgICAgICAgICAgICAgICBwLnNldFN0cm9rZVdpZHRoKHN0cm9rZVdpZHRoKTsKKyAgICAgICAgICAgICAgICBjLmRyYXdDaXJjbGUoeCwgeSwgc3Ryb2tlUmFkaXVzLCBwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9TaGFwZURyYXdhYmxlLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvU2hhcGVEcmF3YWJsZS5qYXZhCmluZGV4IDkzZjJkYzYwLi45Y2EzYmJmIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvU2hhcGVEcmF3YWJsZS5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9TaGFwZURyYXdhYmxlLmphdmEKQEAgLTIxMCw3ICsyMTAsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRyYXcoQ2FudmFzIGNhbnZhcykgeworICAgIHByb3RlY3RlZCB2b2lkIG9uRHJhdyhDYW52YXMgY2FudmFzKSB7CiAgICAgICAgIFJlY3QgciA9IGdldEJvdW5kcygpOwogICAgICAgICBQYWludCBwYWludCA9IG1TaGFwZVN0YXRlLm1QYWludDsKIApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL3NoYXBlcy9BcmNTaGFwZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL3NoYXBlcy9BcmNTaGFwZS5qYXZhCmluZGV4IGI5MGU4NTMuLjg0NzMxYjAgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvQXJjU2hhcGUuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvc2hhcGVzL0FyY1NoYXBlLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0RjsKIAogLyoqCiAgKiBDcmVhdGVzIGFuIGFyYyBzaGFwZS4gVGhlIGFyYyBzaGFwZSBzdGFydHMgYXQgYSBzcGVjaWZpZWQKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbi5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYTkzNGYuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldE1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLm9zLlRyYWNlOwotCi0vKioKLSAqIDxwPiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBwcmltYXJ5IG1ldGhvZCB0aHJvdWdoIHdoaWNoIGRhdGEgaXMgcGFzc2VkIHRvCi0gKiBhbmQgZnJvbSBSZW5kZXJTY3JpcHQga2VybmVscy4gIEFuIEFsbG9jYXRpb24gcHJvdmlkZXMgdGhlIGJhY2tpbmcgc3RvcmUgZm9yCi0gKiBhIGdpdmVuIHtAbGluayBhbmRyb2lkLnJlbmRlcnNjcmlwdC5UeXBlfS4gIDwvcD4KLSAqCi0gKiA8cD5BbiBBbGxvY2F0aW9uIGFsc28gY29udGFpbnMgYSBzZXQgb2YgdXNhZ2UgZmxhZ3MgdGhhdCBkZW5vdGUgaG93IHRoZQotICogQWxsb2NhdGlvbiBjb3VsZCBiZSB1c2VkLiBGb3IgZXhhbXBsZSwgYW4gQWxsb2NhdGlvbiBtYXkgaGF2ZSB1c2FnZSBmbGFncwotICogc3BlY2lmeWluZyB0aGF0IGl0IGNhbiBiZSB1c2VkIGZyb20gYSBzY3JpcHQgYXMgd2VsbCBhcyBpbnB1dCB0byBhIHtAbGluawotICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2FtcGxlcn0uIEEgZGV2ZWxvcGVyIG11c3Qgc3luY2hyb25pemUgYWNyb3NzIHRoZXNlCi0gKiBkaWZmZXJlbnQgdXNhZ2VzIHVzaW5nIHtAbGluayBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uI3N5bmNBbGx9IGluCi0gKiBvcmRlciB0byBlbnN1cmUgdGhhdCBkaWZmZXJlbnQgdXNlcnMgb2YgdGhlIEFsbG9jYXRpb24gaGF2ZSBhIGNvbnNpc3RlbnQgdmlldwotICogb2YgbWVtb3J5LiBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugd2hlcmUgYW4gQWxsb2NhdGlvbiBpcyB1c2VkIGFzIHRoZSBvdXRwdXQKLSAqIG9mIG9uZSBrZXJuZWwgYW5kIGFzIFNhbXBsZXIgaW5wdXQgaW4gYSBsYXRlciBrZXJuZWwsIGEgZGV2ZWxvcGVyIG11c3QgY2FsbAotICoge0BsaW5rICNzeW5jQWxsIHN5bmNBbGwoQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpfSBwcmlvciB0byBsYXVuY2hpbmcgdGhlCi0gKiBzZWNvbmQga2VybmVsIHRvIGVuc3VyZSBjb3JyZWN0bmVzcy4KLSAqCi0gKiA8cD5BbiBBbGxvY2F0aW9uIGNhbiBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUge0BsaW5rICNjb3B5RnJvbX0gcm91dGluZXMuIEZvcgotICogbW9yZSBjb21wbGV4IEVsZW1lbnQgdHlwZXMsIHRoZSB7QGxpbmsgI2NvcHlGcm9tVW5jaGVja2VkfSBtZXRob2RzIGNhbiBiZQotICogdXNlZCB0byBjb3B5IGZyb20gYnl0ZSBhcnJheXMgb3Igc2ltaWxhciBjb25zdHJ1Y3RzLjwvcD4KLSAqCi0gKiA8ZGl2IGNsYXNzPSJzcGVjaWFsIHJlZmVyZW5jZSI+Ci0gKiA8aDM+RGV2ZWxvcGVyIEd1aWRlczwvaDM+Ci0gKiA8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjcmVhdGluZyBhbiBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgUmVuZGVyU2NyaXB0LCByZWFkIHRoZQotICogPGEgaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZW5kZXJzY3JpcHQvaW5kZXguaHRtbCI+UmVuZGVyU2NyaXB0PC9hPiBkZXZlbG9wZXIgZ3VpZGUuPC9wPgotICogPC9kaXY+Ci0gKiovCi1wdWJsaWMgY2xhc3MgQWxsb2NhdGlvbiBleHRlbmRzIEJhc2VPYmogewotICAgIFR5cGUgbVR5cGU7Ci0gICAgQml0bWFwIG1CaXRtYXA7Ci0gICAgaW50IG1Vc2FnZTsKLSAgICBBbGxvY2F0aW9uIG1BZGFwdGVkQWxsb2NhdGlvbjsKLSAgICBpbnQgbVNpemU7Ci0KLSAgICBib29sZWFuIG1Db25zdHJhaW5lZExPRDsKLSAgICBib29sZWFuIG1Db25zdHJhaW5lZEZhY2U7Ci0gICAgYm9vbGVhbiBtQ29uc3RyYWluZWRZOwotICAgIGJvb2xlYW4gbUNvbnN0cmFpbmVkWjsKLSAgICBib29sZWFuIG1SZWFkQWxsb3dlZCA9IHRydWU7Ci0gICAgYm9vbGVhbiBtV3JpdGVBbGxvd2VkID0gdHJ1ZTsKLSAgICBpbnQgbVNlbGVjdGVkWTsKLSAgICBpbnQgbVNlbGVjdGVkWjsKLSAgICBpbnQgbVNlbGVjdGVkTE9EOwotICAgIFR5cGUuQ3ViZW1hcEZhY2UgbVNlbGVjdGVkRmFjZSA9IFR5cGUuQ3ViZW1hcEZhY2UuUE9TSVRJVkVfWDsKLQotICAgIGludCBtQ3VycmVudERpbVg7Ci0gICAgaW50IG1DdXJyZW50RGltWTsKLSAgICBpbnQgbUN1cnJlbnREaW1aOwotICAgIGludCBtQ3VycmVudENvdW50OwotICAgIHN0YXRpYyBIYXNoTWFwPEludGVnZXIsIEFsbG9jYXRpb24+IG1BbGxvY2F0aW9uTWFwID0KLSAgICAgICAgICAgIG5ldyBIYXNoTWFwPEludGVnZXIsIEFsbG9jYXRpb24+KCk7Ci0gICAgT25CdWZmZXJBdmFpbGFibGVMaXN0ZW5lciBtQnVmZmVyTm90aWZpZXI7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgdXNhZ2Ugb2YgdGhlIEFsbG9jYXRpb24uICBUaGVzZSBzaWduYWwgdG8gUmVuZGVyU2NyaXB0IHdoZXJlIHRvIHBsYWNlCi0gICAgICogdGhlIEFsbG9jYXRpb24gaW4gbWVtb3J5LgotICAgICAqCi0gICAgICovCi0KLSAgICAvKioKLSAgICAgKiBUaGUgQWxsb2NhdGlvbiB3aWxsIGJlIGJvdW5kIHRvIGFuZCBhY2Nlc3NlZCBieSBzY3JpcHRzLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTQUdFX1NDUklQVCA9IDB4MDAwMTsKLQotICAgIC8qKgotICAgICAqIFRoZSBBbGxvY2F0aW9uIHdpbGwgYmUgdXNlZCBhcyBhIHRleHR1cmUgc291cmNlIGJ5IG9uZSBvciBtb3JlIGdyYXBoaWNzCi0gICAgICogcHJvZ3JhbXMuCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0FHRV9HUkFQSElDU19URVhUVVJFID0gMHgwMDAyOwotCi0gICAgLyoqCi0gICAgICogVGhlIEFsbG9jYXRpb24gd2lsbCBiZSB1c2VkIGFzIGEgZ3JhcGhpY3MgbWVzaC4KLSAgICAgKgotICAgICAqIFRoaXMgd2FzIGRlcHJlY2F0ZWQgaW4gQVBJIGxldmVsIDE2LgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNBR0VfR1JBUEhJQ1NfVkVSVEVYID0gMHgwMDA0OwotCi0KLSAgICAvKioKLSAgICAgKiBUaGUgQWxsb2NhdGlvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiBzaGFkZXIgY29uc3RhbnRzIGJ5IG9uZSBvcgotICAgICAqIG1vcmUgcHJvZ3JhbXMuCi0gICAgICoKLSAgICAgKiBUaGlzIHdhcyBkZXByZWNhdGVkIGluIEFQSSBsZXZlbCAxNi4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTQUdFX0dSQVBISUNTX0NPTlNUQU5UUyA9IDB4MDAwODsKLQotICAgIC8qKgotICAgICAqIFRoZSBBbGxvY2F0aW9uIHdpbGwgYmUgdXNlZCBhcyBhIHRhcmdldCBmb3Igb2Zmc2NyZWVuIHJlbmRlcmluZwotICAgICAqCi0gICAgICogVGhpcyB3YXMgZGVwcmVjYXRlZCBpbiBBUEkgbGV2ZWwgMTYuCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0FHRV9HUkFQSElDU19SRU5ERVJfVEFSR0VUID0gMHgwMDEwOwotCi0gICAgLyoqCi0gICAgICogVGhlIEFsbG9jYXRpb24gd2lsbCBiZSB1c2VkIGFzIGEge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmV9Ci0gICAgICogY29uc3VtZXIuICBUaGlzIHVzYWdlIHdpbGwgY2F1c2UgdGhlIEFsbG9jYXRpb24gdG8gYmUgY3JlYXRlZCBhcwotICAgICAqIHJlYWQtb25seS4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTQUdFX0lPX0lOUFVUID0gMHgwMDIwOwotCi0gICAgLyoqCi0gICAgICogVGhlIEFsbG9jYXRpb24gd2lsbCBiZSB1c2VkIGFzIGEge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmV9Ci0gICAgICogcHJvZHVjZXIuICBUaGUgZGltZW5zaW9ucyBhbmQgZm9ybWF0IG9mIHRoZSB7QGxpbmsKLSAgICAgKiBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlfSB3aWxsIGJlIGZvcmNlZCB0byB0aG9zZSBvZiB0aGUKLSAgICAgKiBBbGxvY2F0aW9uLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNBR0VfSU9fT1VUUFVUID0gMHgwMDQwOwotCi0gICAgLyoqCi0gICAgICogVGhlIEFsbG9jYXRpb24ncyBiYWNraW5nIHN0b3JlIHdpbGwgYmUgaW5oZXJpdGVkIGZyb20gYW5vdGhlciBvYmplY3QKLSAgICAgKiAodXN1YWxseSBhIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcH0pOyBjb3B5aW5nIHRvIG9yIGZyb20gdGhlCi0gICAgICogb3JpZ2luYWwgc291cmNlIEJpdG1hcCB3aWxsIGNhdXNlIGEgc3luY2hyb25pemF0aW9uIHJhdGhlciB0aGFuIGEgZnVsbAotICAgICAqIGNvcHkuICB7QGxpbmsgI3N5bmNBbGx9IG1heSBhbHNvIGJlIHVzZWQgdG8gc3luY2hyb25pemUgdGhlIEFsbG9jYXRpb24KLSAgICAgKiBhbmQgdGhlIHNvdXJjZSBCaXRtYXAuCi0gICAgICoKLSAgICAgKiA8cD5UaGlzIGlzIHNldCBieSBkZWZhdWx0IGZvciBhbGxvY2F0aW9ucyBjcmVhdGVkIHdpdGgge0BsaW5rCi0gICAgICogI2NyZWF0ZUZyb21CaXRtYXB9IGluIEFQSSB2ZXJzaW9uIDE4IGFuZCBoaWdoZXIuPC9wPgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNBR0VfU0hBUkVEID0gMHgwMDgwOwotCi0gICAgLyoqCi0gICAgICogQ29udHJvbHMgbWlwbWFwIGJlaGF2aW9yIHdoZW4gdXNpbmcgdGhlIGJpdG1hcCBjcmVhdGlvbiBhbmQgdXBkYXRlCi0gICAgICogZnVuY3Rpb25zLgotICAgICAqLwotICAgIHB1YmxpYyBlbnVtIE1pcG1hcENvbnRyb2wgewotICAgICAgICAvKioKLSAgICAgICAgICogTm8gbWlwbWFwcyB3aWxsIGJlIGdlbmVyYXRlZCBhbmQgdGhlIHR5cGUgZ2VuZXJhdGVkIGZyb20gdGhlIGluY29taW5nCi0gICAgICAgICAqIGJpdG1hcCB3aWxsIG5vdCBjb250YWluIGFkZGl0aW9uYWwgTE9Ecy4KLSAgICAgICAgICovCi0gICAgICAgIE1JUE1BUF9OT05FKDApLAotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBIGZ1bGwgbWlwbWFwIGNoYWluIHdpbGwgYmUgY3JlYXRlZCBpbiBzY3JpcHQgbWVtb3J5LiAgVGhlIFR5cGUgb2YKLSAgICAgICAgICogdGhlIEFsbG9jYXRpb24gd2lsbCBjb250YWluIGEgZnVsbCBtaXBtYXAgY2hhaW4uICBPbiB1cGxvYWQsIHRoZSBmdWxsCi0gICAgICAgICAqIGNoYWluIHdpbGwgYmUgdHJhbnNmZXJyZWQuCi0gICAgICAgICAqLwotICAgICAgICBNSVBNQVBfRlVMTCgxKSwKLQotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIFR5cGUgb2YgdGhlIEFsbG9jYXRpb24gd2lsbCBiZSB0aGUgc2FtZSBhcyBNSVBNQVBfTk9ORS4gIEl0IHdpbGwKLSAgICAgICAgICogbm90IGNvbnRhaW4gbWlwbWFwcy4gIE9uIHVwbG9hZCwgdGhlIGFsbG9jYXRpb24gZGF0YSB3aWxsIGNvbnRhaW4gYQotICAgICAgICAgKiBmdWxsIG1pcG1hcCBjaGFpbiBnZW5lcmF0ZWQgZnJvbSB0aGUgdG9wIGxldmVsIGluIHNjcmlwdCBtZW1vcnkuCi0gICAgICAgICAqLwotICAgICAgICBNSVBNQVBfT05fU1lOQ19UT19URVhUVVJFKDIpOwotCi0gICAgICAgIGludCBtSUQ7Ci0gICAgICAgIE1pcG1hcENvbnRyb2woaW50IGlkKSB7Ci0gICAgICAgICAgICBtSUQgPSBpZDsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBpbnQgZ2V0SURTYWZlKCkgewotICAgICAgICBpZiAobUFkYXB0ZWRBbGxvY2F0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtQWRhcHRlZEFsbG9jYXRpb24uZ2V0SUQobVJTKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZ2V0SUQobVJTKTsKLSAgICB9Ci0KLQotICAgLyoqCi0gICAgICogR2V0IHRoZSB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gb2YgdGhlIHtAbGluawotICAgICAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LlR5cGV9IG9mIHRoZSBBbGxvY2F0aW9uLgotICAgICAqCi0gICAgICogQHJldHVybiBFbGVtZW50Ci0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCkgewotICAgICAgICByZXR1cm4gbVR5cGUuZ2V0RWxlbWVudCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCB0aGUgdXNhZ2UgZmxhZ3Mgb2YgdGhlIEFsbG9jYXRpb24uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHVzYWdlIHRoaXMgQWxsb2NhdGlvbidzIHNldCBvZiB0aGUgVVNBR0VfKiBmbGFncyBPUidkIHRvZ2V0aGVyCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFVzYWdlKCkgewotICAgICAgICByZXR1cm4gbVVzYWdlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgQWxsb2NhdGlvbiBpbiBieXRlcy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gc2l6ZSBvZiB0aGUgQWxsb2NhdGlvbiBpbiBieXRlcy4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0Qnl0ZXNTaXplKCkgewotICAgICAgICByZXR1cm4gbVR5cGUuZ2V0Q291bnQoKSAqIG1UeXBlLmdldEVsZW1lbnQoKS5nZXRCeXRlc1NpemUoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlQ2FjaGVJbmZvKFR5cGUgdCkgewotICAgICAgICBtQ3VycmVudERpbVggPSB0LmdldFgoKTsKLSAgICAgICAgbUN1cnJlbnREaW1ZID0gdC5nZXRZKCk7Ci0gICAgICAgIG1DdXJyZW50RGltWiA9IHQuZ2V0WigpOwotICAgICAgICBtQ3VycmVudENvdW50ID0gbUN1cnJlbnREaW1YOwotICAgICAgICBpZiAobUN1cnJlbnREaW1ZID4gMSkgewotICAgICAgICAgICAgbUN1cnJlbnRDb3VudCAqPSBtQ3VycmVudERpbVk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1DdXJyZW50RGltWiA+IDEpIHsKLSAgICAgICAgICAgIG1DdXJyZW50Q291bnQgKj0gbUN1cnJlbnREaW1aOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldEJpdG1hcChCaXRtYXAgYikgewotICAgICAgICBtQml0bWFwID0gYjsKLSAgICB9Ci0KLSAgICBBbGxvY2F0aW9uKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzLCBUeXBlIHQsIGludCB1c2FnZSkgewotICAgICAgICBzdXBlcihpZCwgcnMpOwotICAgICAgICBpZiAoKHVzYWdlICYgfihVU0FHRV9TQ1JJUFQgfAotICAgICAgICAgICAgICAgICAgICAgICBVU0FHRV9HUkFQSElDU19URVhUVVJFIHwKLSAgICAgICAgICAgICAgICAgICAgICAgVVNBR0VfR1JBUEhJQ1NfVkVSVEVYIHwKLSAgICAgICAgICAgICAgICAgICAgICAgVVNBR0VfR1JBUEhJQ1NfQ09OU1RBTlRTIHwKLSAgICAgICAgICAgICAgICAgICAgICAgVVNBR0VfR1JBUEhJQ1NfUkVOREVSX1RBUkdFVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgIFVTQUdFX0lPX0lOUFVUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgVVNBR0VfSU9fT1VUUFVUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgVVNBR0VfU0hBUkVEKSkgIT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3duIHVzYWdlIHNwZWNpZmllZC4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgodXNhZ2UgJiBVU0FHRV9JT19JTlBVVCkgIT0gMCkgewotICAgICAgICAgICAgbVdyaXRlQWxsb3dlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoKHVzYWdlICYgfihVU0FHRV9JT19JTlBVVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FHRV9HUkFQSElDU19URVhUVVJFIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQUdFX1NDUklQVCkpICE9IDApIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgdXNhZ2UgY29tYmluYXRpb24uIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtVHlwZSA9IHQ7Ci0gICAgICAgIG1Vc2FnZSA9IHVzYWdlOwotCi0gICAgICAgIGlmICh0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIFRPRE86IEEzRCBkb2Vzbid0IGhhdmUgVHlwZSBpbmZvIGR1cmluZyBjcmVhdGlvbiwgc28gd2UgY2FuJ3QKLSAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBhaGVhZCBvZiB0aW1lLiBXZSBjYW4gcG9zc2libHkgYWRkIGEgbWV0aG9kCi0gICAgICAgICAgICAvLyB0byB1cGRhdGUgdGhlIHNpemUgaW4gdGhlIGZ1dHVyZSBpZiBpdCBzZWVtcyByZWFzb25hYmxlLgotICAgICAgICAgICAgbVNpemUgPSBtVHlwZS5nZXRDb3VudCgpICogbVR5cGUuZ2V0RWxlbWVudCgpLmdldEJ5dGVzU2l6ZSgpOwotICAgICAgICAgICAgdXBkYXRlQ2FjaGVJbmZvKHQpOwotICAgICAgICB9Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBSZW5kZXJTY3JpcHQucmVnaXN0ZXJOYXRpdmVBbGxvY2F0aW9uLmludm9rZShSZW5kZXJTY3JpcHQuc1J1bnRpbWUsIG1TaXplKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy5lKFJlbmRlclNjcmlwdC5MT0dfVEFHLCAiQ291bGRuJ3QgaW52b2tlIHJlZ2lzdGVyTmF0aXZlQWxsb2NhdGlvbjoiICsgZSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJDb3VsZG4ndCBpbnZva2UgcmVnaXN0ZXJOYXRpdmVBbGxvY2F0aW9uOiIgKyBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgdGhyb3dzIFRocm93YWJsZSB7Ci0gICAgICAgIFJlbmRlclNjcmlwdC5yZWdpc3Rlck5hdGl2ZUZyZWUuaW52b2tlKFJlbmRlclNjcmlwdC5zUnVudGltZSwgbVNpemUpOwotICAgICAgICBzdXBlci5maW5hbGl6ZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUlzSW50MzIoKSB7Ci0gICAgICAgIGlmICgobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMzIpIHx8Ci0gICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5VTlNJR05FRF8zMikpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAiMzIgYml0IGludGVnZXIgc291cmNlIGRvZXMgbm90IG1hdGNoIGFsbG9jYXRpb24gdHlwZSAiICsgbVR5cGUubUVsZW1lbnQubVR5cGUpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUlzSW50MTYoKSB7Ci0gICAgICAgIGlmICgobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMTYpIHx8Ci0gICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5VTlNJR05FRF8xNikpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAiMTYgYml0IGludGVnZXIgc291cmNlIGRvZXMgbm90IG1hdGNoIGFsbG9jYXRpb24gdHlwZSAiICsgbVR5cGUubUVsZW1lbnQubVR5cGUpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUlzSW50OCgpIHsKLSAgICAgICAgaWYgKChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF84KSB8fAotICAgICAgICAgICAgKG1UeXBlLm1FbGVtZW50Lm1UeXBlID09IEVsZW1lbnQuRGF0YVR5cGUuVU5TSUdORURfOCkpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAiOCBiaXQgaW50ZWdlciBzb3VyY2UgZG9lcyBub3QgbWF0Y2ggYWxsb2NhdGlvbiB0eXBlICIgKyBtVHlwZS5tRWxlbWVudC5tVHlwZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlSXNGbG9hdDMyKCkgewotICAgICAgICBpZiAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5GTE9BVF8zMikgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICIzMiBiaXQgZmxvYXQgc291cmNlIGRvZXMgbm90IG1hdGNoIGFsbG9jYXRpb24gdHlwZSAiICsgbVR5cGUubUVsZW1lbnQubVR5cGUpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUlzT2JqZWN0KCkgewotICAgICAgICBpZiAoKG1UeXBlLm1FbGVtZW50Lm1UeXBlID09IEVsZW1lbnQuRGF0YVR5cGUuUlNfRUxFTUVOVCkgfHwKLSAgICAgICAgICAgIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlJTX1RZUEUpIHx8Ci0gICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5SU19BTExPQ0FUSU9OKSB8fAotICAgICAgICAgICAgKG1UeXBlLm1FbGVtZW50Lm1UeXBlID09IEVsZW1lbnQuRGF0YVR5cGUuUlNfU0FNUExFUikgfHwKLSAgICAgICAgICAgIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlJTX1NDUklQVCkgfHwKLSAgICAgICAgICAgIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlJTX01FU0gpIHx8Ci0gICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5SU19QUk9HUkFNX0ZSQUdNRU5UKSB8fAotICAgICAgICAgICAgKG1UeXBlLm1FbGVtZW50Lm1UeXBlID09IEVsZW1lbnQuRGF0YVR5cGUuUlNfUFJPR1JBTV9WRVJURVgpIHx8Ci0gICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5SU19QUk9HUkFNX1JBU1RFUikgfHwKLSAgICAgICAgICAgIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlJTX1BST0dSQU1fU1RPUkUpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgIk9iamVjdCBzb3VyY2UgZG9lcyBub3QgbWF0Y2ggYWxsb2NhdGlvbiB0eXBlICIgKyBtVHlwZS5tRWxlbWVudC5tVHlwZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgdm9pZCB1cGRhdGVGcm9tTmF0aXZlKCkgewotICAgICAgICBzdXBlci51cGRhdGVGcm9tTmF0aXZlKCk7Ci0gICAgICAgIGludCB0eXBlSUQgPSBtUlMubkFsbG9jYXRpb25HZXRUeXBlKGdldElEKG1SUykpOwotICAgICAgICBpZih0eXBlSUQgIT0gMCkgewotICAgICAgICAgICAgbVR5cGUgPSBuZXcgVHlwZSh0eXBlSUQsIG1SUyk7Ci0gICAgICAgICAgICBtVHlwZS51cGRhdGVGcm9tTmF0aXZlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDYWNoZUluZm8obVR5cGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IHRoZSB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuVHlwZX0gb2YgdGhlIEFsbG9jYXRpb24uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFR5cGUKLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBUeXBlIGdldFR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBtVHlwZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcm9wYWdhdGUgY2hhbmdlcyBmcm9tIG9uZSB1c2FnZSBvZiB0aGUgQWxsb2NhdGlvbiB0byB0aGUKLSAgICAgKiBvdGhlciB1c2FnZXMgb2YgdGhlIEFsbG9jYXRpb24uCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzeW5jQWxsKGludCBzcmNMb2NhdGlvbikgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJzeW5jQWxsIik7Ci0gICAgICAgIHN3aXRjaCAoc3JjTG9jYXRpb24pIHsKLSAgICAgICAgY2FzZSBVU0FHRV9HUkFQSElDU19URVhUVVJFOgotICAgICAgICBjYXNlIFVTQUdFX1NDUklQVDoKLSAgICAgICAgICAgIGlmICgobVVzYWdlICYgVVNBR0VfU0hBUkVEKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgY29weUZyb20obUJpdG1hcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVU0FHRV9HUkFQSElDU19DT05TVEFOVFM6Ci0gICAgICAgIGNhc2UgVVNBR0VfR1JBUEhJQ1NfVkVSVEVYOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVVNBR0VfU0hBUkVEOgotICAgICAgICAgICAgaWYgKChtVXNhZ2UgJiBVU0FHRV9TSEFSRUQpICE9IDApIHsKLSAgICAgICAgICAgICAgICBjb3B5VG8obUJpdG1hcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU291cmNlIG11c3QgYmUgZXhhY3RseSBvbmUgdXNhZ2UgdHlwZS4iKTsKLSAgICAgICAgfQotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uU3luY0FsbChnZXRJRFNhZmUoKSwgc3JjTG9jYXRpb24pOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZW5kIGEgYnVmZmVyIHRvIHRoZSBvdXRwdXQgc3RyZWFtLiAgVGhlIGNvbnRlbnRzIG9mIHRoZSBBbGxvY2F0aW9uIHdpbGwKLSAgICAgKiBiZSB1bmRlZmluZWQgYWZ0ZXIgdGhpcyBvcGVyYXRpb24uIFRoaXMgb3BlcmF0aW9uIGlzIG9ubHkgdmFsaWQgaWYge0BsaW5rCi0gICAgICogI1VTQUdFX0lPX09VVFBVVH0gaXMgc2V0IG9uIHRoZSBBbGxvY2F0aW9uLgotICAgICAqCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBpb1NlbmQoKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImlvU2VuZCIpOwotICAgICAgICBpZiAoKG1Vc2FnZSAmIFVTQUdFX0lPX09VVFBVVCkgPT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJDYW4gb25seSBzZW5kIGJ1ZmZlciBpZiBJT19PVVRQVVQgdXNhZ2Ugc3BlY2lmaWVkLiIpOwotICAgICAgICB9Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25Jb1NlbmQoZ2V0SUQobVJTKSk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlbGV0ZSBvbmNlIGNvZGUgaXMgdXBkYXRlZC4KLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGlvU2VuZE91dHB1dCgpIHsKLSAgICAgICAgaW9TZW5kKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVjZWl2ZSB0aGUgbGF0ZXN0IGlucHV0IGludG8gdGhlIEFsbG9jYXRpb24uIFRoaXMgb3BlcmF0aW9uCi0gICAgICogaXMgb25seSB2YWxpZCBpZiB7QGxpbmsgI1VTQUdFX0lPX0lOUFVUfSBpcyBzZXQgb24gdGhlIEFsbG9jYXRpb24uCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBpb1JlY2VpdmUoKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImlvUmVjZWl2ZSIpOwotICAgICAgICBpZiAoKG1Vc2FnZSAmIFVTQUdFX0lPX0lOUFVUKSA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgIkNhbiBvbmx5IHJlY2VpdmUgaWYgSU9fSU5QVVQgdXNhZ2Ugc3BlY2lmaWVkLiIpOwotICAgICAgICB9Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25Jb1JlY2VpdmUoZ2V0SUQobVJTKSk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgYW4gYXJyYXkgb2YgUlMgb2JqZWN0cyB0byB0aGUgQWxsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkIFNvdXJjZSBhcnJheS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbShCYXNlT2JqW10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbSIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgdmFsaWRhdGVJc09iamVjdCgpOwotICAgICAgICBpZiAoZC5sZW5ndGggIT0gbUN1cnJlbnRDb3VudCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBcnJheSBzaXplIG1pc21hdGNoLCBhbGxvY2F0aW9uIHNpemVYID0gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRDb3VudCArICIsIGFycmF5IGxlbmd0aCA9ICIgKyBkLmxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGlbXSA9IG5ldyBpbnRbZC5sZW5ndGhdOwotICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IGQubGVuZ3RoOyBjdCsrKSB7Ci0gICAgICAgICAgICBpW2N0XSA9IGRbY3RdLmdldElEKG1SUyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKDAsIG1DdXJyZW50Q291bnQsIGkpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVCaXRtYXBGb3JtYXQoQml0bWFwIGIpIHsKLSAgICAgICAgQml0bWFwLkNvbmZpZyBiYyA9IGIuZ2V0Q29uZmlnKCk7Ci0gICAgICAgIGlmIChiYyA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkJpdG1hcCBoYXMgYW4gdW5zdXBwb3J0ZWQgZm9ybWF0IGZvciB0aGlzIG9wZXJhdGlvbiIpOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoYmMpIHsKLSAgICAgICAgY2FzZSBBTFBIQV84OgotICAgICAgICAgICAgaWYgKG1UeXBlLmdldEVsZW1lbnQoKS5tS2luZCAhPSBFbGVtZW50LkRhdGFLaW5kLlBJWEVMX0EpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFsbG9jYXRpb24ga2luZCBpcyAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVR5cGUuZ2V0RWxlbWVudCgpLm1LaW5kICsgIiwgdHlwZSAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVR5cGUuZ2V0RWxlbWVudCgpLm1UeXBlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvZiAiICsgbVR5cGUuZ2V0RWxlbWVudCgpLmdldEJ5dGVzU2l6ZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBieXRlcywgcGFzc2VkIGJpdG1hcCB3YXMgIiArIGJjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFSR0JfODg4ODoKLSAgICAgICAgICAgIGlmICgobVR5cGUuZ2V0RWxlbWVudCgpLm1LaW5kICE9IEVsZW1lbnQuRGF0YUtpbmQuUElYRUxfUkdCQSkgfHwKLSAgICAgICAgICAgICAgICAobVR5cGUuZ2V0RWxlbWVudCgpLmdldEJ5dGVzU2l6ZSgpICE9IDQpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBbGxvY2F0aW9uIGtpbmQgaXMgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UeXBlLmdldEVsZW1lbnQoKS5tS2luZCArICIsIHR5cGUgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UeXBlLmdldEVsZW1lbnQoKS5tVHlwZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb2YgIiArIG1UeXBlLmdldEVsZW1lbnQoKS5nZXRCeXRlc1NpemUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYnl0ZXMsIHBhc3NlZCBiaXRtYXAgd2FzICIgKyBiYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSR0JfNTY1OgotICAgICAgICAgICAgaWYgKChtVHlwZS5nZXRFbGVtZW50KCkubUtpbmQgIT0gRWxlbWVudC5EYXRhS2luZC5QSVhFTF9SR0IpIHx8Ci0gICAgICAgICAgICAgICAgKG1UeXBlLmdldEVsZW1lbnQoKS5nZXRCeXRlc1NpemUoKSAhPSAyKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQWxsb2NhdGlvbiBraW5kIGlzICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHlwZS5nZXRFbGVtZW50KCkubUtpbmQgKyAiLCB0eXBlICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHlwZS5nZXRFbGVtZW50KCkubVR5cGUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG9mICIgKyBtVHlwZS5nZXRFbGVtZW50KCkuZ2V0Qnl0ZXNTaXplKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGJ5dGVzLCBwYXNzZWQgYml0bWFwIHdhcyAiICsgYmMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVJHQl80NDQ0OgotICAgICAgICAgICAgaWYgKChtVHlwZS5nZXRFbGVtZW50KCkubUtpbmQgIT0gRWxlbWVudC5EYXRhS2luZC5QSVhFTF9SR0JBKSB8fAotICAgICAgICAgICAgICAgIChtVHlwZS5nZXRFbGVtZW50KCkuZ2V0Qnl0ZXNTaXplKCkgIT0gMikpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFsbG9jYXRpb24ga2luZCBpcyAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVR5cGUuZ2V0RWxlbWVudCgpLm1LaW5kICsgIiwgdHlwZSAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVR5cGUuZ2V0RWxlbWVudCgpLm1UeXBlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvZiAiICsgbVR5cGUuZ2V0RWxlbWVudCgpLmdldEJ5dGVzU2l6ZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBieXRlcywgcGFzc2VkIGJpdG1hcCB3YXMgIiArIGJjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVCaXRtYXBTaXplKEJpdG1hcCBiKSB7Ci0gICAgICAgIGlmKChtQ3VycmVudERpbVggIT0gYi5nZXRXaWR0aCgpKSB8fCAobUN1cnJlbnREaW1ZICE9IGIuZ2V0SGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNhbm5vdCB1cGRhdGUgYWxsb2NhdGlvbiBmcm9tIGJpdG1hcCwgc2l6ZXMgbWlzbWF0Y2giKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgaW50byB0aGlzIEFsbG9jYXRpb24gZnJvbSBhbiBhcnJheS4gVGhpcyBtZXRob2QgZG9lcyBub3QgZ3VhcmFudGVlCi0gICAgICogdGhhdCB0aGUgQWxsb2NhdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGlucHV0IGJ1ZmZlcjsgaXQgY29waWVzIG1lbW9yeQotICAgICAqIHdpdGhvdXQgcmVpbnRlcnByZXRhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tVW5jaGVja2VkKGludFtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weUZyb21VbmNoZWNrZWQiKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChtQ3VycmVudERpbVogPiAwKSB7Ci0gICAgICAgICAgICBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoMCwgMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIG1DdXJyZW50RGltWiwgZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobUN1cnJlbnREaW1ZID4gMCkgewotICAgICAgICAgICAgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKDAsIDAsIG1DdXJyZW50RGltWCwgbUN1cnJlbnREaW1ZLCBkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCBtQ3VycmVudENvdW50LCBkKTsKLSAgICAgICAgfQotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb3B5IGludG8gdGhpcyBBbGxvY2F0aW9uIGZyb20gYW4gYXJyYXkuIFRoaXMgbWV0aG9kIGRvZXMgbm90IGd1YXJhbnRlZQotICAgICAqIHRoYXQgdGhlIEFsbG9jYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnB1dCBidWZmZXI7IGl0IGNvcGllcyBtZW1vcnkKLSAgICAgKiB3aXRob3V0IHJlaW50ZXJwcmV0YXRpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbVVuY2hlY2tlZChzaG9ydFtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weUZyb21VbmNoZWNrZWQiKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChtQ3VycmVudERpbVogPiAwKSB7Ci0gICAgICAgICAgICBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoMCwgMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIG1DdXJyZW50RGltWiwgZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobUN1cnJlbnREaW1ZID4gMCkgewotICAgICAgICAgICAgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKDAsIDAsIG1DdXJyZW50RGltWCwgbUN1cnJlbnREaW1ZLCBkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCBtQ3VycmVudENvdW50LCBkKTsKLSAgICAgICAgfQotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb3B5IGludG8gdGhpcyBBbGxvY2F0aW9uIGZyb20gYW4gYXJyYXkuIFRoaXMgbWV0aG9kIGRvZXMgbm90IGd1YXJhbnRlZQotICAgICAqIHRoYXQgdGhlIEFsbG9jYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnB1dCBidWZmZXI7IGl0IGNvcGllcyBtZW1vcnkKLSAgICAgKiB3aXRob3V0IHJlaW50ZXJwcmV0YXRpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbVVuY2hlY2tlZChieXRlW10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbVVuY2hlY2tlZCIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGltWiA+IDApIHsKLSAgICAgICAgICAgIGNvcHkzRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCAwLCAwLCBtQ3VycmVudERpbVgsIG1DdXJyZW50RGltWSwgbUN1cnJlbnREaW1aLCBkKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERpbVkgPiAwKSB7Ci0gICAgICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIGQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKDAsIG1DdXJyZW50Q291bnQsIGQpOwotICAgICAgICB9Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgaW50byB0aGlzIEFsbG9jYXRpb24gZnJvbSBhbiBhcnJheS4gVGhpcyBtZXRob2QgZG9lcyBub3QgZ3VhcmFudGVlCi0gICAgICogdGhhdCB0aGUgQWxsb2NhdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGlucHV0IGJ1ZmZlcjsgaXQgY29waWVzIG1lbW9yeQotICAgICAqIHdpdGhvdXQgcmVpbnRlcnByZXRhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tVW5jaGVja2VkKGZsb2F0W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbVVuY2hlY2tlZCIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGltWiA+IDApIHsKLSAgICAgICAgICAgIGNvcHkzRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCAwLCAwLCBtQ3VycmVudERpbVgsIG1DdXJyZW50RGltWSwgbUN1cnJlbnREaW1aLCBkKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERpbVkgPiAwKSB7Ci0gICAgICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIGQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKDAsIG1DdXJyZW50Q291bnQsIGQpOwotICAgICAgICB9Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogQ29weSBpbnRvIHRoaXMgQWxsb2NhdGlvbiBmcm9tIGFuIGFycmF5LiAgVGhpcyB2YXJpYW50IGlzIHR5cGUgY2hlY2tlZAotICAgICAqIGFuZCB3aWxsIGdlbmVyYXRlIGV4Y2VwdGlvbnMgaWYgdGhlIEFsbG9jYXRpb24ncyB7QGxpbmsKLSAgICAgKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50fSBpcyBub3QgYSAzMiBiaXQgaW50ZWdlciB0eXBlLgotICAgICAqCi0gICAgICogQHBhcmFtIGQgdGhlIHNvdXJjZSBkYXRhIGFycmF5Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weUZyb20oaW50W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbSIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGltWiA+IDApIHsKLSAgICAgICAgICAgIGNvcHkzRFJhbmdlRnJvbSgwLCAwLCAwLCBtQ3VycmVudERpbVgsIG1DdXJyZW50RGltWSwgbUN1cnJlbnREaW1aLCBkKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERpbVkgPiAwKSB7Ci0gICAgICAgICAgICBjb3B5MkRSYW5nZUZyb20oMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIGQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29weTFEUmFuZ2VGcm9tKDAsIG1DdXJyZW50Q291bnQsIGQpOwotICAgICAgICB9Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgaW50byB0aGlzIEFsbG9jYXRpb24gZnJvbSBhbiBhcnJheS4gIFRoaXMgdmFyaWFudCBpcyB0eXBlIGNoZWNrZWQKLSAgICAgKiBhbmQgd2lsbCBnZW5lcmF0ZSBleGNlcHRpb25zIGlmIHRoZSBBbGxvY2F0aW9uJ3Mge0BsaW5rCi0gICAgICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gaXMgbm90IGEgMTYgYml0IGludGVnZXIgdHlwZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKHNob3J0W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbSIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGltWiA+IDApIHsKLSAgICAgICAgICAgIGNvcHkzRFJhbmdlRnJvbSgwLCAwLCAwLCBtQ3VycmVudERpbVgsIG1DdXJyZW50RGltWSwgbUN1cnJlbnREaW1aLCBkKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERpbVkgPiAwKSB7Ci0gICAgICAgICAgICBjb3B5MkRSYW5nZUZyb20oMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIGQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29weTFEUmFuZ2VGcm9tKDAsIG1DdXJyZW50Q291bnQsIGQpOwotICAgICAgICB9Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgaW50byB0aGlzIEFsbG9jYXRpb24gZnJvbSBhbiBhcnJheS4gIFRoaXMgdmFyaWFudCBpcyB0eXBlIGNoZWNrZWQKLSAgICAgKiBhbmQgd2lsbCBnZW5lcmF0ZSBleGNlcHRpb25zIGlmIHRoZSBBbGxvY2F0aW9uJ3Mge0BsaW5rCi0gICAgICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gaXMgbm90IGFuIDggYml0IGludGVnZXIgdHlwZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKGJ5dGVbXSBkKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHlGcm9tIik7Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICBpZiAobUN1cnJlbnREaW1aID4gMCkgewotICAgICAgICAgICAgY29weTNEUmFuZ2VGcm9tKDAsIDAsIDAsIG1DdXJyZW50RGltWCwgbUN1cnJlbnREaW1ZLCBtQ3VycmVudERpbVosIGQpOwotICAgICAgICB9IGVsc2UgaWYgKG1DdXJyZW50RGltWSA+IDApIHsKLSAgICAgICAgICAgIGNvcHkyRFJhbmdlRnJvbSgwLCAwLCBtQ3VycmVudERpbVgsIG1DdXJyZW50RGltWSwgZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb3B5MURSYW5nZUZyb20oMCwgbUN1cnJlbnRDb3VudCwgZCk7Ci0gICAgICAgIH0KLSAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29weSBpbnRvIHRoaXMgQWxsb2NhdGlvbiBmcm9tIGFuIGFycmF5LiAgVGhpcyB2YXJpYW50IGlzIHR5cGUgY2hlY2tlZAotICAgICAqIGFuZCB3aWxsIGdlbmVyYXRlIGV4Y2VwdGlvbnMgaWYgdGhlIEFsbG9jYXRpb24ncyB7QGxpbmsKLSAgICAgKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50fSBpcyBub3QgYSAzMiBiaXQgZmxvYXQgdHlwZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKGZsb2F0W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbSIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGltWiA+IDApIHsKLSAgICAgICAgICAgIGNvcHkzRFJhbmdlRnJvbSgwLCAwLCAwLCBtQ3VycmVudERpbVgsIG1DdXJyZW50RGltWSwgbUN1cnJlbnREaW1aLCBkKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERpbVkgPiAwKSB7Ci0gICAgICAgICAgICBjb3B5MkRSYW5nZUZyb20oMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIGQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29weTFEUmFuZ2VGcm9tKDAsIG1DdXJyZW50Q291bnQsIGQpOwotICAgICAgICB9Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgaW50byBhbiBBbGxvY2F0aW9uIGZyb20gYSB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXB9LiAgVGhlCi0gICAgICogaGVpZ2h0LCB3aWR0aCwgYW5kIGZvcm1hdCBvZiB0aGUgYml0bWFwIG11c3QgbWF0Y2ggdGhlIGV4aXN0aW5nCi0gICAgICogYWxsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIDxwPklmIHRoZSB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXB9IGlzIHRoZSBzYW1lIGFzIHRoZSB7QGxpbmsKLSAgICAgKiBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcH0gdXNlZCB0byBjcmVhdGUgdGhlIEFsbG9jYXRpb24gd2l0aCB7QGxpbmsKLSAgICAgKiAjY3JlYXRlRnJvbUJpdG1hcH0gYW5kIHtAbGluayAjVVNBR0VfU0hBUkVEfSBpcyBzZXQgb24gdGhlIEFsbG9jYXRpb24sCi0gICAgICogdGhpcyB3aWxsIHN5bmNocm9uaXplIHRoZSBBbGxvY2F0aW9uIHdpdGggdGhlIGxhdGVzdCBkYXRhIGZyb20gdGhlIHtAbGluawotICAgICAqIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwfSwgcG90ZW50aWFsbHkgYXZvaWRpbmcgdGhlIGFjdHVhbCBjb3B5LjwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSBiIHRoZSBzb3VyY2UgYml0bWFwCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weUZyb20oQml0bWFwIGIpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weUZyb20iKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChiLmdldENvbmZpZygpID09IG51bGwpIHsKLSAgICAgICAgICAgIEJpdG1hcCBuZXdCaXRtYXAgPSBCaXRtYXAuY3JlYXRlQml0bWFwKGIuZ2V0V2lkdGgoKSwgYi5nZXRIZWlnaHQoKSwgQml0bWFwLkNvbmZpZy5BUkdCXzg4ODgpOwotICAgICAgICAgICAgQ2FudmFzIGMgPSBuZXcgQ2FudmFzKG5ld0JpdG1hcCk7Ci0gICAgICAgICAgICBjLmRyYXdCaXRtYXAoYiwgMCwgMCwgbnVsbCk7Ci0gICAgICAgICAgICBjb3B5RnJvbShuZXdCaXRtYXApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHZhbGlkYXRlQml0bWFwU2l6ZShiKTsKLSAgICAgICAgdmFsaWRhdGVCaXRtYXBGb3JtYXQoYik7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwKGdldElEKG1SUyksIGIpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb3B5IGFuIEFsbG9jYXRpb24gZnJvbSBhbiBBbGxvY2F0aW9uLiAgVGhlIHR5cGVzIG9mIGJvdGggYWxsb2NhdGlvbnMKLSAgICAgKiBtdXN0IGJlIGlkZW50aWNhbC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhIHRoZSBzb3VyY2UgYWxsb2NhdGlvbgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKEFsbG9jYXRpb24gYSkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbSIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKCFtVHlwZS5lcXVhbHMoYS5nZXRUeXBlKCkpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlR5cGVzIG9mIGFsbG9jYXRpb25zIG11c3QgbWF0Y2guIik7Ci0gICAgICAgIH0KLSAgICAgICAgY29weTJEUmFuZ2VGcm9tKDAsIDAsIG1DdXJyZW50RGltWCwgbUN1cnJlbnREaW1ZLCBhLCAwLCAwKTsKLSAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgYnkgYXV0by1nZW5lcmF0ZWQgY29kZSByZWZsZWN0ZWQgZnJvbQotICAgICAqIHRoZSBSZW5kZXJTY3JpcHQgc2NyaXB0IGZpbGVzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgZGV2ZWxvcGVycy4KLSAgICAgKgotICAgICAqIEBwYXJhbSB4b2ZmCi0gICAgICogQHBhcmFtIGZwCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RnJvbUZpZWxkUGFja2VyKGludCB4b2ZmLCBGaWVsZFBhY2tlciBmcCkgewotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaW50IGVTaXplID0gbVR5cGUubUVsZW1lbnQuZ2V0Qnl0ZXNTaXplKCk7Ci0gICAgICAgIGZpbmFsIGJ5dGVbXSBkYXRhID0gZnAuZ2V0RGF0YSgpOwotCi0gICAgICAgIGludCBjb3VudCA9IGRhdGEubGVuZ3RoIC8gZVNpemU7Ci0gICAgICAgIGlmICgoZVNpemUgKiBjb3VudCkgIT0gZGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRmllbGQgcGFja2VyIGxlbmd0aCAiICsgZGF0YS5sZW5ndGggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG5vdCBkaXZpc2libGUgYnkgZWxlbWVudCBzaXplICIgKyBlU2l6ZSArICIuIik7Ci0gICAgICAgIH0KLSAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKHhvZmYsIGNvdW50LCBkYXRhKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBhdXRvLWdlbmVyYXRlZCBjb2RlIHJlZmxlY3RlZCBmcm9tCi0gICAgICogdGhlIFJlbmRlclNjcmlwdCBzY3JpcHQgZmlsZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0geG9mZgotICAgICAqIEBwYXJhbSBjb21wb25lbnRfbnVtYmVyCi0gICAgICogQHBhcmFtIGZwCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RnJvbUZpZWxkUGFja2VyKGludCB4b2ZmLCBpbnQgY29tcG9uZW50X251bWJlciwgRmllbGRQYWNrZXIgZnApIHsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChjb21wb25lbnRfbnVtYmVyID49IG1UeXBlLm1FbGVtZW50Lm1FbGVtZW50cy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29tcG9uZW50X251bWJlciAiICsgY29tcG9uZW50X251bWJlciArICIgb3V0IG9mIHJhbmdlLiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmKHhvZmYgPCAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk9mZnNldCBtdXN0IGJlID49IDAuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBieXRlW10gZGF0YSA9IGZwLmdldERhdGEoKTsKLSAgICAgICAgaW50IGVTaXplID0gbVR5cGUubUVsZW1lbnQubUVsZW1lbnRzW2NvbXBvbmVudF9udW1iZXJdLmdldEJ5dGVzU2l6ZSgpOwotICAgICAgICBlU2l6ZSAqPSBtVHlwZS5tRWxlbWVudC5tQXJyYXlTaXplc1tjb21wb25lbnRfbnVtYmVyXTsKLQotICAgICAgICBpZiAoZGF0YS5sZW5ndGggIT0gZVNpemUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRmllbGQgcGFja2VyIHNpemVsZW5ndGggIiArIGRhdGEubGVuZ3RoICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkb2VzIG5vdCBtYXRjaCBjb21wb25lbnQgc2l6ZSAiICsgZVNpemUgKyAiLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uRWxlbWVudERhdGExRChnZXRJRFNhZmUoKSwgeG9mZiwgbVNlbGVjdGVkTE9ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudF9udW1iZXIsIGRhdGEsIGRhdGEubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZGF0YTFEQ2hlY2tzKGludCBvZmYsIGludCBjb3VudCwgaW50IGxlbiwgaW50IGRhdGFTaXplKSB7Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICBpZihvZmYgPCAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk9mZnNldCBtdXN0IGJlID49IDAuIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoY291bnQgPCAxKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNvdW50IG11c3QgYmUgPj0gMS4iKTsKLSAgICAgICAgfQotICAgICAgICBpZigob2ZmICsgY291bnQpID4gbUN1cnJlbnRDb3VudCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPdmVyZmxvdywgQXZhaWxhYmxlIGNvdW50ICIgKyBtQ3VycmVudENvdW50ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgZ290ICIgKyBjb3VudCArICIgYXQgb2Zmc2V0ICIgKyBvZmYgKyAiLiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmKGxlbiA8IGRhdGFTaXplKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFycmF5IHRvbyBzbWFsbCBmb3IgYWxsb2NhdGlvbiB0eXBlLiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2VuZXJhdGUgYSBtaXBtYXAgY2hhaW4uIFRoaXMgaXMgb25seSB2YWxpZCBpZiB0aGUgVHlwZSBvZiB0aGUgQWxsb2NhdGlvbgotICAgICAqIGluY2x1ZGVzIG1pcG1hcHMuCi0gICAgICoKLSAgICAgKiA8cD5UaGlzIGZ1bmN0aW9uIHdpbGwgZ2VuZXJhdGUgYSBjb21wbGV0ZSBzZXQgb2YgbWlwbWFwcyBmcm9tIHRoZSB0b3AKLSAgICAgKiBsZXZlbCBMT0QgYW5kIHBsYWNlIHRoZW0gaW50byB0aGUgc2NyaXB0IG1lbW9yeSBzcGFjZS48L3A+Ci0gICAgICoKLSAgICAgKiA8cD5JZiB0aGUgQWxsb2NhdGlvbiBpcyBhbHNvIHVzaW5nIG90aGVyIG1lbW9yeSBzcGFjZXMsIGEgY2FsbCB0byB7QGxpbmsKLSAgICAgKiAjc3luY0FsbCBzeW5jQWxsKEFsbG9jYXRpb24uVVNBR0VfU0NSSVBUKX0gaXMgcmVxdWlyZWQuPC9wPgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGdlbmVyYXRlTWlwbWFwcygpIHsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uR2VuZXJhdGVNaXBtYXBzKGdldElEKG1SUykpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgYW4gYXJyYXkgaW50byBwYXJ0IG9mIHRoaXMgQWxsb2NhdGlvbi4gIFRoaXMgbWV0aG9kIGRvZXMgbm90Ci0gICAgICogZ3VhcmFudGVlIHRoYXQgdGhlIEFsbG9jYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnB1dCBidWZmZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gb2ZmIFRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG8gYmUgY29waWVkLgotICAgICAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGNvcGllZC4KLSAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoaW50IG9mZiwgaW50IGNvdW50LCBpbnRbXSBkKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCIpOwotICAgICAgICBpbnQgZGF0YVNpemUgPSBtVHlwZS5tRWxlbWVudC5nZXRCeXRlc1NpemUoKSAqIGNvdW50OwotICAgICAgICBkYXRhMURDaGVja3Mob2ZmLCBjb3VudCwgZC5sZW5ndGggKiA0LCBkYXRhU2l6ZSk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvbkRhdGExRChnZXRJRFNhZmUoKSwgb2ZmLCBtU2VsZWN0ZWRMT0QsIGNvdW50LCBkLCBkYXRhU2l6ZSk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgYW4gYXJyYXkgaW50byBwYXJ0IG9mIHRoaXMgQWxsb2NhdGlvbi4gIFRoaXMgbWV0aG9kIGRvZXMgbm90Ci0gICAgICogZ3VhcmFudGVlIHRoYXQgdGhlIEFsbG9jYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnB1dCBidWZmZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gb2ZmIFRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG8gYmUgY29waWVkLgotICAgICAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGNvcGllZC4KLSAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoaW50IG9mZiwgaW50IGNvdW50LCBzaG9ydFtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkIik7Ci0gICAgICAgIGludCBkYXRhU2l6ZSA9IG1UeXBlLm1FbGVtZW50LmdldEJ5dGVzU2l6ZSgpICogY291bnQ7Ci0gICAgICAgIGRhdGExRENoZWNrcyhvZmYsIGNvdW50LCBkLmxlbmd0aCAqIDIsIGRhdGFTaXplKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTFEKGdldElEU2FmZSgpLCBvZmYsIG1TZWxlY3RlZExPRCwgY291bnQsIGQsIGRhdGFTaXplKTsKLSAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29weSBhbiBhcnJheSBpbnRvIHBhcnQgb2YgdGhpcyBBbGxvY2F0aW9uLiAgVGhpcyBtZXRob2QgZG9lcyBub3QKLSAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgQWxsb2NhdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGlucHV0IGJ1ZmZlci4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvZmYgVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb3BpZWQuCi0gICAgICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgY29waWVkLgotICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQgb2ZmLCBpbnQgY291bnQsIGJ5dGVbXSBkKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCIpOwotICAgICAgICBpbnQgZGF0YVNpemUgPSBtVHlwZS5tRWxlbWVudC5nZXRCeXRlc1NpemUoKSAqIGNvdW50OwotICAgICAgICBkYXRhMURDaGVja3Mob2ZmLCBjb3VudCwgZC5sZW5ndGgsIGRhdGFTaXplKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTFEKGdldElEU2FmZSgpLCBvZmYsIG1TZWxlY3RlZExPRCwgY291bnQsIGQsIGRhdGFTaXplKTsKLSAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29weSBhbiBhcnJheSBpbnRvIHBhcnQgb2YgdGhpcyBBbGxvY2F0aW9uLiAgVGhpcyBtZXRob2QgZG9lcyBub3QKLSAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgQWxsb2NhdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGlucHV0IGJ1ZmZlci4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvZmYgVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb3BpZWQuCi0gICAgICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgY29waWVkLgotICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQgb2ZmLCBpbnQgY291bnQsIGZsb2F0W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQiKTsKLSAgICAgICAgaW50IGRhdGFTaXplID0gbVR5cGUubUVsZW1lbnQuZ2V0Qnl0ZXNTaXplKCkgKiBjb3VudDsKLSAgICAgICAgZGF0YTFEQ2hlY2tzKG9mZiwgY291bnQsIGQubGVuZ3RoICogNCwgZGF0YVNpemUpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhMUQoZ2V0SURTYWZlKCksIG9mZiwgbVNlbGVjdGVkTE9ELCBjb3VudCwgZCwgZGF0YVNpemUpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb3B5IGFuIGFycmF5IGludG8gcGFydCBvZiB0aGlzIEFsbG9jYXRpb24uICBUaGlzIHZhcmlhbnQgaXMgdHlwZSBjaGVja2VkCi0gICAgICogYW5kIHdpbGwgZ2VuZXJhdGUgZXhjZXB0aW9ucyBpZiB0aGUgQWxsb2NhdGlvbiB0eXBlIGlzIG5vdCBhIDMyIGJpdAotICAgICAqIGludGVnZXIgdHlwZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvZmYgVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb3BpZWQuCi0gICAgICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgY29waWVkLgotICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbShpbnQgb2ZmLCBpbnQgY291bnQsIGludFtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTFEUmFuZ2VGcm9tIik7Ci0gICAgICAgIHZhbGlkYXRlSXNJbnQzMigpOwotICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgZCk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgYW4gYXJyYXkgaW50byBwYXJ0IG9mIHRoaXMgQWxsb2NhdGlvbi4gIFRoaXMgdmFyaWFudCBpcyB0eXBlIGNoZWNrZWQKLSAgICAgKiBhbmQgd2lsbCBnZW5lcmF0ZSBleGNlcHRpb25zIGlmIHRoZSBBbGxvY2F0aW9uIHR5cGUgaXMgbm90IGEgMTYgYml0Ci0gICAgICogaW50ZWdlciB0eXBlLgotICAgICAqCi0gICAgICogQHBhcmFtIG9mZiBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBlbGVtZW50IHRvIGJlIGNvcGllZC4KLSAgICAgKiBAcGFyYW0gY291bnQgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBiZSBjb3BpZWQuCi0gICAgICogQHBhcmFtIGQgdGhlIHNvdXJjZSBkYXRhIGFycmF5Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weTFEUmFuZ2VGcm9tKGludCBvZmYsIGludCBjb3VudCwgc2hvcnRbXSBkKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkxRFJhbmdlRnJvbSIpOwotICAgICAgICB2YWxpZGF0ZUlzSW50MTYoKTsKLSAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKG9mZiwgY291bnQsIGQpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb3B5IGFuIGFycmF5IGludG8gcGFydCBvZiB0aGlzIEFsbG9jYXRpb24uICBUaGlzIHZhcmlhbnQgaXMgdHlwZSBjaGVja2VkCi0gICAgICogYW5kIHdpbGwgZ2VuZXJhdGUgZXhjZXB0aW9ucyBpZiB0aGUgQWxsb2NhdGlvbiB0eXBlIGlzIG5vdCBhbiA4IGJpdAotICAgICAqIGludGVnZXIgdHlwZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvZmYgVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb3BpZWQuCi0gICAgICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgY29waWVkLgotICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbShpbnQgb2ZmLCBpbnQgY291bnQsIGJ5dGVbXSBkKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkxRFJhbmdlRnJvbSIpOwotICAgICAgICB2YWxpZGF0ZUlzSW50OCgpOwotICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgZCk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgYW4gYXJyYXkgaW50byBwYXJ0IG9mIHRoaXMgQWxsb2NhdGlvbi4gIFRoaXMgdmFyaWFudCBpcyB0eXBlIGNoZWNrZWQKLSAgICAgKiBhbmQgd2lsbCBnZW5lcmF0ZSBleGNlcHRpb25zIGlmIHRoZSBBbGxvY2F0aW9uIHR5cGUgaXMgbm90IGEgMzIgYml0IGZsb2F0Ci0gICAgICogdHlwZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvZmYgVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb3BpZWQuCi0gICAgICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgY29waWVkLgotICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50IG9mZiwgaW50IGNvdW50LCBmbG9hdFtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTFEUmFuZ2VGcm9tIik7Ci0gICAgICAgIHZhbGlkYXRlSXNGbG9hdDMyKCk7Ci0gICAgICAgIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChvZmYsIGNvdW50LCBkKTsKLSAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7Ci0gICAgfQotICAgICAvKioKLSAgICAgKiBDb3B5IHBhcnQgb2YgYW4gQWxsb2NhdGlvbiBpbnRvIHRoaXMgQWxsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvZmYgVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb3BpZWQuCi0gICAgICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgY29waWVkLgotICAgICAqIEBwYXJhbSBkYXRhIHRoZSBzb3VyY2UgZGF0YSBhbGxvY2F0aW9uLgotICAgICAqIEBwYXJhbSBkYXRhT2ZmIG9mZiBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIGRhdGEgdG8KLSAgICAgKiAgICAgICAgICBiZSBjb3BpZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weTFEUmFuZ2VGcm9tKGludCBvZmYsIGludCBjb3VudCwgQWxsb2NhdGlvbiBkYXRhLCBpbnQgZGF0YU9mZikgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MURSYW5nZUZyb20iKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTJEKGdldElEU2FmZSgpLCBvZmYsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRMT0QsIG1TZWxlY3RlZEZhY2UubUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsIDEsIGRhdGEuZ2V0SUQobVJTKSwgZGF0YU9mZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubVNlbGVjdGVkTE9ELCBkYXRhLm1TZWxlY3RlZEZhY2UubUlEKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGUyRFJhbmdlKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgIGlmIChtQWRhcHRlZEFsbG9jYXRpb24gIT0gbnVsbCkgewotCi0gICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgIGlmICh4b2ZmIDwgMCB8fCB5b2ZmIDwgMCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiT2Zmc2V0IGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoIDwgMCB8fCB3IDwgMCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSGVpZ2h0IG9yIHdpZHRoIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoKHhvZmYgKyB3KSA+IG1DdXJyZW50RGltWCkgfHwgKCh5b2ZmICsgaCkgPiBtQ3VycmVudERpbVkpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVcGRhdGVkIHJlZ2lvbiBsYXJnZXIgdGhhbiBhbGxvY2F0aW9uLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgdywgaW50IGgsIGJ5dGVbXSBkYXRhKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkyRFJhbmdlRnJvbVVuY2hlY2tlZCIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgdmFsaWRhdGUyRFJhbmdlKHhvZmYsIHlvZmYsIHcsIGgpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhMkQoZ2V0SURTYWZlKCksIHhvZmYsIHlvZmYsIG1TZWxlY3RlZExPRCwgbVNlbGVjdGVkRmFjZS5tSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBkYXRhLCBkYXRhLmxlbmd0aCk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIHZvaWQgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHcsIGludCBoLCBzaG9ydFtdIGRhdGEpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkIik7Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICB2YWxpZGF0ZTJEUmFuZ2UoeG9mZiwgeW9mZiwgdywgaCk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvbkRhdGEyRChnZXRJRFNhZmUoKSwgeG9mZiwgeW9mZiwgbVNlbGVjdGVkTE9ELCBtU2VsZWN0ZWRGYWNlLm1JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIGRhdGEsIGRhdGEubGVuZ3RoICogMik7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIHZvaWQgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHcsIGludCBoLCBpbnRbXSBkYXRhKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkyRFJhbmdlRnJvbVVuY2hlY2tlZCIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgdmFsaWRhdGUyRFJhbmdlKHhvZmYsIHlvZmYsIHcsIGgpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhMkQoZ2V0SURTYWZlKCksIHhvZmYsIHlvZmYsIG1TZWxlY3RlZExPRCwgbVNlbGVjdGVkRmFjZS5tSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBkYXRhLCBkYXRhLmxlbmd0aCAqIDQpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvcHkyRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQgeG9mZiwgaW50IHlvZmYsIGludCB3LCBpbnQgaCwgZmxvYXRbXSBkYXRhKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkyRFJhbmdlRnJvbVVuY2hlY2tlZCIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgdmFsaWRhdGUyRFJhbmdlKHhvZmYsIHlvZmYsIHcsIGgpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhMkQoZ2V0SURTYWZlKCksIHhvZmYsIHlvZmYsIG1TZWxlY3RlZExPRCwgbVNlbGVjdGVkRmFjZS5tSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBkYXRhLCBkYXRhLmxlbmd0aCAqIDQpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb3B5IGZyb20gYW4gYXJyYXkgaW50byBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBpbiB0aGlzIEFsbG9jYXRpb24uICBUaGUKLSAgICAgKiBhcnJheSBpcyBhc3N1bWVkIHRvIGJlIHRpZ2h0bHkgcGFja2VkLgotICAgICAqCi0gICAgICogQHBhcmFtIHhvZmYgWCBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCi0gICAgICogQHBhcmFtIHlvZmYgWSBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCi0gICAgICogQHBhcmFtIHcgV2lkdGggb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUKLSAgICAgKiBAcGFyYW0gaCBIZWlnaHQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUKLSAgICAgKiBAcGFyYW0gZGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgQWxsb2NhdGlvbgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHkyRFJhbmdlRnJvbShpbnQgeG9mZiwgaW50IHlvZmYsIGludCB3LCBpbnQgaCwgYnl0ZVtdIGRhdGEpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTJEUmFuZ2VGcm9tIik7Ci0gICAgICAgIHZhbGlkYXRlSXNJbnQ4KCk7Ci0gICAgICAgIGNvcHkyRFJhbmdlRnJvbVVuY2hlY2tlZCh4b2ZmLCB5b2ZmLCB3LCBoLCBkYXRhKTsKLSAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29weSBmcm9tIGFuIGFycmF5IGludG8gYSByZWN0YW5ndWxhciByZWdpb24gaW4gdGhpcyBBbGxvY2F0aW9uLiAgVGhlCi0gICAgICogYXJyYXkgaXMgYXNzdW1lZCB0byBiZSB0aWdodGx5IHBhY2tlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB4b2ZmIFggb2Zmc2V0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlIGluIHRoaXMgQWxsb2NhdGlvbgotICAgICAqIEBwYXJhbSB5b2ZmIFkgb2Zmc2V0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlIGluIHRoaXMgQWxsb2NhdGlvbgotICAgICAqIEBwYXJhbSB3IFdpZHRoIG9mIHRoZSByZWdpb24gdG8gdXBkYXRlCi0gICAgICogQHBhcmFtIGggSGVpZ2h0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlCi0gICAgICogQHBhcmFtIGRhdGEgdG8gYmUgcGxhY2VkIGludG8gdGhlIEFsbG9jYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5MkRSYW5nZUZyb20oaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgdywgaW50IGgsIHNob3J0W10gZGF0YSkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MkRSYW5nZUZyb20iKTsKLSAgICAgICAgdmFsaWRhdGVJc0ludDE2KCk7Ci0gICAgICAgIGNvcHkyRFJhbmdlRnJvbVVuY2hlY2tlZCh4b2ZmLCB5b2ZmLCB3LCBoLCBkYXRhKTsKLSAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29weSBmcm9tIGFuIGFycmF5IGludG8gYSByZWN0YW5ndWxhciByZWdpb24gaW4gdGhpcyBBbGxvY2F0aW9uLiAgVGhlCi0gICAgICogYXJyYXkgaXMgYXNzdW1lZCB0byBiZSB0aWdodGx5IHBhY2tlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB4b2ZmIFggb2Zmc2V0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlIGluIHRoaXMgQWxsb2NhdGlvbgotICAgICAqIEBwYXJhbSB5b2ZmIFkgb2Zmc2V0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlIGluIHRoaXMgQWxsb2NhdGlvbgotICAgICAqIEBwYXJhbSB3IFdpZHRoIG9mIHRoZSByZWdpb24gdG8gdXBkYXRlCi0gICAgICogQHBhcmFtIGggSGVpZ2h0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlCi0gICAgICogQHBhcmFtIGRhdGEgdG8gYmUgcGxhY2VkIGludG8gdGhlIEFsbG9jYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5MkRSYW5nZUZyb20oaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgdywgaW50IGgsIGludFtdIGRhdGEpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTJEUmFuZ2VGcm9tIik7Ci0gICAgICAgIHZhbGlkYXRlSXNJbnQzMigpOwotICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgeW9mZiwgdywgaCwgZGF0YSk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgZnJvbSBhbiBhcnJheSBpbnRvIGEgcmVjdGFuZ3VsYXIgcmVnaW9uIGluIHRoaXMgQWxsb2NhdGlvbi4gIFRoZQotICAgICAqIGFycmF5IGlzIGFzc3VtZWQgdG8gYmUgdGlnaHRseSBwYWNrZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0geG9mZiBYIG9mZnNldCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZSBpbiB0aGlzIEFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0geW9mZiBZIG9mZnNldCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZSBpbiB0aGlzIEFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0gdyBXaWR0aCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZQotICAgICAqIEBwYXJhbSBoIEhlaWdodCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZQotICAgICAqIEBwYXJhbSBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBBbGxvY2F0aW9uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weTJEUmFuZ2VGcm9tKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHcsIGludCBoLCBmbG9hdFtdIGRhdGEpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTJEUmFuZ2VGcm9tIik7Ci0gICAgICAgIHZhbGlkYXRlSXNGbG9hdDMyKCk7Ci0gICAgICAgIGNvcHkyRFJhbmdlRnJvbVVuY2hlY2tlZCh4b2ZmLCB5b2ZmLCB3LCBoLCBkYXRhKTsKLSAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29weSBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBmcm9tIGFuIEFsbG9jYXRpb24gaW50byBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBpbgotICAgICAqIHRoaXMgQWxsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSB4b2ZmIFggb2Zmc2V0IG9mIHRoZSByZWdpb24gaW4gdGhpcyBBbGxvY2F0aW9uCi0gICAgICogQHBhcmFtIHlvZmYgWSBvZmZzZXQgb2YgdGhlIHJlZ2lvbiBpbiB0aGlzIEFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0gdyBXaWR0aCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZS4KLSAgICAgKiBAcGFyYW0gaCBIZWlnaHQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUuCi0gICAgICogQHBhcmFtIGRhdGEgc291cmNlIEFsbG9jYXRpb24uCi0gICAgICogQHBhcmFtIGRhdGFYb2ZmIFggb2Zmc2V0IGluIHNvdXJjZSBBbGxvY2F0aW9uCi0gICAgICogQHBhcmFtIGRhdGFZb2ZmIFkgb2Zmc2V0IGluIHNvdXJjZSBBbGxvY2F0aW9uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weTJEUmFuZ2VGcm9tKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHcsIGludCBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uIGRhdGEsIGludCBkYXRhWG9mZiwgaW50IGRhdGFZb2ZmKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkyRFJhbmdlRnJvbSIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgdmFsaWRhdGUyRFJhbmdlKHhvZmYsIHlvZmYsIHcsIGgpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhMkQoZ2V0SURTYWZlKCksIHhvZmYsIHlvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRMT0QsIG1TZWxlY3RlZEZhY2UubUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdywgaCwgZGF0YS5nZXRJRChtUlMpLCBkYXRhWG9mZiwgZGF0YVlvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1TZWxlY3RlZExPRCwgZGF0YS5tU2VsZWN0ZWRGYWNlLm1JRCk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgYSB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXB9IGludG8gYW4gQWxsb2NhdGlvbi4gIFRoZSBoZWlnaHQKLSAgICAgKiBhbmQgd2lkdGggb2YgdGhlIHVwZGF0ZSB3aWxsIHVzZSB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBvZiB0aGUge0BsaW5rCi0gICAgICogYW5kcm9pZC5ncmFwaGljcy5CaXRtYXB9LgotICAgICAqCi0gICAgICogQHBhcmFtIHhvZmYgWCBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCi0gICAgICogQHBhcmFtIHlvZmYgWSBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCi0gICAgICogQHBhcmFtIGRhdGEgdGhlIEJpdG1hcCB0byBiZSBjb3BpZWQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5MkRSYW5nZUZyb20oaW50IHhvZmYsIGludCB5b2ZmLCBCaXRtYXAgZGF0YSkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MkRSYW5nZUZyb20iKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChkYXRhLmdldENvbmZpZygpID09IG51bGwpIHsKLSAgICAgICAgICAgIEJpdG1hcCBuZXdCaXRtYXAgPSBCaXRtYXAuY3JlYXRlQml0bWFwKGRhdGEuZ2V0V2lkdGgoKSwgZGF0YS5nZXRIZWlnaHQoKSwgQml0bWFwLkNvbmZpZy5BUkdCXzg4ODgpOwotICAgICAgICAgICAgQ2FudmFzIGMgPSBuZXcgQ2FudmFzKG5ld0JpdG1hcCk7Ci0gICAgICAgICAgICBjLmRyYXdCaXRtYXAoZGF0YSwgMCwgMCwgbnVsbCk7Ci0gICAgICAgICAgICBjb3B5MkRSYW5nZUZyb20oeG9mZiwgeW9mZiwgbmV3Qml0bWFwKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB2YWxpZGF0ZUJpdG1hcEZvcm1hdChkYXRhKTsKLSAgICAgICAgdmFsaWRhdGUyRFJhbmdlKHhvZmYsIHlvZmYsIGRhdGEuZ2V0V2lkdGgoKSwgZGF0YS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvbkRhdGEyRChnZXRJRFNhZmUoKSwgeG9mZiwgeW9mZiwgbVNlbGVjdGVkTE9ELCBtU2VsZWN0ZWRGYWNlLm1JRCwgZGF0YSk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZTNEUmFuZ2UoaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IHcsIGludCBoLCBpbnQgZCkgewotICAgICAgICBpZiAobUFkYXB0ZWRBbGxvY2F0aW9uICE9IG51bGwpIHsKLQotICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICBpZiAoeG9mZiA8IDAgfHwgeW9mZiA8IDAgfHwgem9mZiA8IDApIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk9mZnNldCBjYW5ub3QgYmUgbmVnYXRpdmUuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaCA8IDAgfHwgdyA8IDAgfHwgZCA8IDApIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkhlaWdodCBvciB3aWR0aCBjYW5ub3QgYmUgbmVnYXRpdmUuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKCh4b2ZmICsgdykgPiBtQ3VycmVudERpbVgpIHx8ICgoeW9mZiArIGgpID4gbUN1cnJlbnREaW1ZKSB8fCAoKHpvZmYgKyBkKSA+IG1DdXJyZW50RGltWikpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVwZGF0ZWQgcmVnaW9uIGxhcmdlciB0aGFuIGFsbG9jYXRpb24uIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAaGlkZQotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IHcsIGludCBoLCBpbnQgZCwgYnl0ZVtdIGRhdGEpIHsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIHZhbGlkYXRlM0RSYW5nZSh4b2ZmLCB5b2ZmLCB6b2ZmLCB3LCBoLCBkKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTNEKGdldElEU2FmZSgpLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtU2VsZWN0ZWRMT0QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBkLCBkYXRhLCBkYXRhLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGhpZGUKLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgY29weTNEUmFuZ2VGcm9tVW5jaGVja2VkKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCB3LCBpbnQgaCwgaW50IGQsIHNob3J0W10gZGF0YSkgewotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgdmFsaWRhdGUzRFJhbmdlKHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhM0QoZ2V0SURTYWZlKCksIHhvZmYsIHlvZmYsIHpvZmYsIG1TZWxlY3RlZExPRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIGQsIGRhdGEsIGRhdGEubGVuZ3RoICogMik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGhpZGUKLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgY29weTNEUmFuZ2VGcm9tVW5jaGVja2VkKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCB3LCBpbnQgaCwgaW50IGQsIGludFtdIGRhdGEpIHsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIHZhbGlkYXRlM0RSYW5nZSh4b2ZmLCB5b2ZmLCB6b2ZmLCB3LCBoLCBkKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTNEKGdldElEU2FmZSgpLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtU2VsZWN0ZWRMT0QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBkLCBkYXRhLCBkYXRhLmxlbmd0aCAqIDQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIGNvcHkzRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQgeG9mZiwgaW50IHlvZmYsIGludCB6b2ZmLCBpbnQgdywgaW50IGgsIGludCBkLCBmbG9hdFtdIGRhdGEpIHsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIHZhbGlkYXRlM0RSYW5nZSh4b2ZmLCB5b2ZmLCB6b2ZmLCB3LCBoLCBkKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTNEKGdldElEU2FmZSgpLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtU2VsZWN0ZWRMT0QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBkLCBkYXRhLCBkYXRhLmxlbmd0aCAqIDQpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogQGhpZGUKLSAgICAgKiBDb3B5IGEgcmVjdGFuZ3VsYXIgcmVnaW9uIGZyb20gdGhlIGFycmF5IGludG8gdGhlIGFsbG9jYXRpb24uCi0gICAgICogVGhlIGFycmF5IGlzIGFzc3VtZWQgdG8gYmUgdGlnaHRseSBwYWNrZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0geG9mZiBYIG9mZnNldCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZSBpbiB0aGlzIEFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0geW9mZiBZIG9mZnNldCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZSBpbiB0aGlzIEFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0gem9mZiBaIG9mZnNldCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZSBpbiB0aGlzIEFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0gdyBXaWR0aCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZQotICAgICAqIEBwYXJhbSBoIEhlaWdodCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZQotICAgICAqIEBwYXJhbSBkIERlcHRoIG9mIHRoZSByZWdpb24gdG8gdXBkYXRlCi0gICAgICogQHBhcmFtIGRhdGEgdG8gYmUgcGxhY2VkIGludG8gdGhlIGFsbG9jYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5M0RSYW5nZUZyb20oaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IHcsIGludCBoLCBpbnQgZCwgYnl0ZVtdIGRhdGEpIHsKLSAgICAgICAgdmFsaWRhdGVJc0ludDgoKTsKLSAgICAgICAgY29weTNEUmFuZ2VGcm9tVW5jaGVja2VkKHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQsIGRhdGEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5M0RSYW5nZUZyb20oaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IHcsIGludCBoLCBpbnQgZCwgc2hvcnRbXSBkYXRhKSB7Ci0gICAgICAgIHZhbGlkYXRlSXNJbnQxNigpOwotICAgICAgICBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgeW9mZiwgem9mZiwgdywgaCwgZCwgZGF0YSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGhpZGUKLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHkzRFJhbmdlRnJvbShpbnQgeG9mZiwgaW50IHlvZmYsIGludCB6b2ZmLCBpbnQgdywgaW50IGgsIGludCBkLCBpbnRbXSBkYXRhKSB7Ci0gICAgICAgIHZhbGlkYXRlSXNJbnQzMigpOwotICAgICAgICBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgeW9mZiwgem9mZiwgdywgaCwgZCwgZGF0YSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGhpZGUKLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHkzRFJhbmdlRnJvbShpbnQgeG9mZiwgaW50IHlvZmYsIGludCB6b2ZmLCBpbnQgdywgaW50IGgsIGludCBkLCBmbG9hdFtdIGRhdGEpIHsKLSAgICAgICAgdmFsaWRhdGVJc0Zsb2F0MzIoKTsKLSAgICAgICAgY29weTNEUmFuZ2VGcm9tVW5jaGVja2VkKHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQsIGRhdGEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICogQ29weSBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBpbnRvIHRoZSBhbGxvY2F0aW9uIGZyb20gYW5vdGhlcgotICAgICAqIGFsbG9jYXRpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0geG9mZiBYIG9mZnNldCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZSBpbiB0aGlzIEFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0geW9mZiBZIG9mZnNldCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZSBpbiB0aGlzIEFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0gem9mZiBaIG9mZnNldCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZSBpbiB0aGlzIEFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0gdyBXaWR0aCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZS4KLSAgICAgKiBAcGFyYW0gaCBIZWlnaHQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUuCi0gICAgICogQHBhcmFtIGQgRGVwdGggb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUuCi0gICAgICogQHBhcmFtIGRhdGEgc291cmNlIGFsbG9jYXRpb24uCi0gICAgICogQHBhcmFtIGRhdGFYb2ZmIFggb2Zmc2V0IG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBBbGxvY2F0aW9uCi0gICAgICogQHBhcmFtIGRhdGFZb2ZmIFkgb2Zmc2V0IG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBBbGxvY2F0aW9uCi0gICAgICogQHBhcmFtIGRhdGFab2ZmIFogb2Zmc2V0IG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBBbGxvY2F0aW9uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weTNEUmFuZ2VGcm9tKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCB3LCBpbnQgaCwgaW50IGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRpb24gZGF0YSwgaW50IGRhdGFYb2ZmLCBpbnQgZGF0YVlvZmYsIGludCBkYXRhWm9mZikgewotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgdmFsaWRhdGUzRFJhbmdlKHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhM0QoZ2V0SURTYWZlKCksIHhvZmYsIHlvZmYsIHpvZmYsIG1TZWxlY3RlZExPRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIGQsIGRhdGEuZ2V0SUQobVJTKSwgZGF0YVhvZmYsIGRhdGFZb2ZmLCBkYXRhWm9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubVNlbGVjdGVkTE9EKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIENvcHkgZnJvbSB0aGUgQWxsb2NhdGlvbiBpbnRvIGEge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwfS4gIFRoZQotICAgICAqIGJpdG1hcCBtdXN0IG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBBbGxvY2F0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIGIgVGhlIGJpdG1hcCB0byBiZSBzZXQgZnJvbSB0aGUgQWxsb2NhdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5VG8oQml0bWFwIGIpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weVRvIik7Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICB2YWxpZGF0ZUJpdG1hcEZvcm1hdChiKTsKLSAgICAgICAgdmFsaWRhdGVCaXRtYXBTaXplKGIpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25Db3B5VG9CaXRtYXAoZ2V0SUQobVJTKSwgYik7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgZnJvbSB0aGUgQWxsb2NhdGlvbiBpbnRvIGEgYnl0ZSBhcnJheS4gIFRoZSBhcnJheSBtdXN0IGJlIGF0IGxlYXN0Ci0gICAgICogYXMgbGFyZ2UgYXMgdGhlIEFsbG9jYXRpb24uICBUaGUgYWxsb2NhdGlvbiBtdXN0IGJlIG9mIGFuIDggYml0IGludGVnZXIKLSAgICAgKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gdHlwZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkIFRoZSBhcnJheSB0byBiZSBzZXQgZnJvbSB0aGUgQWxsb2NhdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5VG8oYnl0ZVtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weVRvIik7Ci0gICAgICAgIHZhbGlkYXRlSXNJbnQ4KCk7Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25SZWFkKGdldElEKG1SUyksIGQpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb3B5IGZyb20gdGhlIEFsbG9jYXRpb24gaW50byBhIHNob3J0IGFycmF5LiAgVGhlIGFycmF5IG11c3QgYmUgYXQgbGVhc3QKLSAgICAgKiBhcyBsYXJnZSBhcyB0aGUgQWxsb2NhdGlvbi4gIFRoZSBhbGxvY2F0aW9uIG11c3QgYmUgb2YgYW4gMTYgYml0IGludGVnZXIKLSAgICAgKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gdHlwZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkIFRoZSBhcnJheSB0byBiZSBzZXQgZnJvbSB0aGUgQWxsb2NhdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5VG8oc2hvcnRbXSBkKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHlUbyIpOwotICAgICAgICB2YWxpZGF0ZUlzSW50MTYoKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvblJlYWQoZ2V0SUQobVJTKSwgZCk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcHkgZnJvbSB0aGUgQWxsb2NhdGlvbiBpbnRvIGEgaW50IGFycmF5LiAgVGhlIGFycmF5IG11c3QgYmUgYXQgbGVhc3QgYXMKLSAgICAgKiBsYXJnZSBhcyB0aGUgQWxsb2NhdGlvbi4gIFRoZSBhbGxvY2F0aW9uIG11c3QgYmUgb2YgYW4gMzIgYml0IGludGVnZXIKLSAgICAgKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gdHlwZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkIFRoZSBhcnJheSB0byBiZSBzZXQgZnJvbSB0aGUgQWxsb2NhdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5VG8oaW50W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5VG8iKTsKLSAgICAgICAgdmFsaWRhdGVJc0ludDMyKCk7Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25SZWFkKGdldElEKG1SUyksIGQpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb3B5IGZyb20gdGhlIEFsbG9jYXRpb24gaW50byBhIGZsb2F0IGFycmF5LiAgVGhlIGFycmF5IG11c3QgYmUgYXQgbGVhc3QKLSAgICAgKiBhcyBsYXJnZSBhcyB0aGUgQWxsb2NhdGlvbi4gIFRoZSBhbGxvY2F0aW9uIG11c3QgYmUgb2YgYW4gMzIgYml0IGZsb2F0Ci0gICAgICoge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnR9IHR5cGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZCBUaGUgYXJyYXkgdG8gYmUgc2V0IGZyb20gdGhlIEFsbG9jYXRpb24uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weVRvKGZsb2F0W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5VG8iKTsKLSAgICAgICAgdmFsaWRhdGVJc0Zsb2F0MzIoKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvblJlYWQoZ2V0SUQobVJTKSwgZCk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlc2l6ZSBhIDFEIGFsbG9jYXRpb24uICBUaGUgY29udGVudHMgb2YgdGhlIGFsbG9jYXRpb24gYXJlIHByZXNlcnZlZC4KLSAgICAgKiBJZiBuZXcgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCBvYmplY3RzIGFyZSBjcmVhdGVkIHdpdGggbnVsbCBjb250ZW50cyBhbmQKLSAgICAgKiB0aGUgbmV3IHJlZ2lvbiBpcyBvdGhlcndpc2UgdW5kZWZpbmVkLgotICAgICAqCi0gICAgICogPHA+SWYgdGhlIG5ldyByZWdpb24gaXMgc21hbGxlciB0aGUgcmVmZXJlbmNlcyBvZiBhbnkgb2JqZWN0cyBvdXRzaWRlIHRoZQotICAgICAqIG5ldyByZWdpb24gd2lsbCBiZSByZWxlYXNlZC48L3A+Ci0gICAgICoKLSAgICAgKiA8cD5BIG5ldyB0eXBlIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZSBuZXcgZGltZW5zaW9uLjwvcD4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkaW1YIFRoZSBuZXcgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIEBkZXByZWNhdGVkIFJlbmRlclNjcmlwdCBvYmplY3RzIHNob3VsZCBiZSBpbW11dGFibGUgb25jZSBjcmVhdGVkLiAgVGhlCi0gICAgICogcmVwbGFjZW1lbnQgaXMgdG8gY3JlYXRlIGEgbmV3IGFsbG9jYXRpb24gYW5kIGNvcHkgdGhlIGNvbnRlbnRzLgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNpemUoaW50IGRpbVgpIHsKLSAgICAgICAgaWYgKChtVHlwZS5nZXRZKCkgPiAwKXx8IChtVHlwZS5nZXRaKCkgPiAwKSB8fCBtVHlwZS5oYXNGYWNlcygpIHx8IG1UeXBlLmhhc01pcG1hcHMoKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJSZXNpemUgb25seSBzdXBwb3J0IGZvciAxRCBhbGxvY2F0aW9ucyBhdCB0aGlzIHRpbWUuIik7Ci0gICAgICAgIH0KLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uUmVzaXplMUQoZ2V0SUQobVJTKSwgZGltWCk7Ci0gICAgICAgIG1SUy5maW5pc2goKTsgIC8vIE5lY2Vzc2FyeSBiZWNhdXNlIHJlc2l6ZSBpcyBmaWZvZWQgYW5kIHVwZGF0ZSBpcyBhc3luYy4KLQotICAgICAgICBpbnQgdHlwZUlEID0gbVJTLm5BbGxvY2F0aW9uR2V0VHlwZShnZXRJRChtUlMpKTsKLSAgICAgICAgbVR5cGUgPSBuZXcgVHlwZSh0eXBlSUQsIG1SUyk7Ci0gICAgICAgIG1UeXBlLnVwZGF0ZUZyb21OYXRpdmUoKTsKLSAgICAgICAgdXBkYXRlQ2FjaGVJbmZvKG1UeXBlKTsKLSAgICB9Ci0KLQotICAgIC8vIGNyZWF0aW9uCi0KLSAgICBzdGF0aWMgQml0bWFwRmFjdG9yeS5PcHRpb25zIG1CaXRtYXBPcHRpb25zID0gbmV3IEJpdG1hcEZhY3RvcnkuT3B0aW9ucygpOwotICAgIHN0YXRpYyB7Ci0gICAgICAgIG1CaXRtYXBPcHRpb25zLmluU2NhbGVkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBBbGxvY2F0aW9uIHdpdGggdGhlIGdpdmVuIHtAbGluawotICAgICAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LlR5cGV9LCBtaXBtYXAgZmxhZywgYW5kIHVzYWdlIGZsYWdzLgotICAgICAqCi0gICAgICogQHBhcmFtIHR5cGUgUmVuZGVyU2NyaXB0IHR5cGUgZGVzY3JpYmluZyBkYXRhIGxheW91dAotICAgICAqIEBwYXJhbSBtaXBzIHNwZWNpZmllcyBkZXNpcmVkIG1pcG1hcCBiZWhhdmlvdXIgZm9yIHRoZQotICAgICAqICAgICAgICAgICAgIGFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0gdXNhZ2UgYml0IGZpZWxkIHNwZWNpZnlpbmcgaG93IHRoZSBBbGxvY2F0aW9uIGlzCi0gICAgICogICAgICAgICAgICAgIHV0aWxpemVkCi0gICAgICovCi0gICAgc3RhdGljIHB1YmxpYyBBbGxvY2F0aW9uIGNyZWF0ZVR5cGVkKFJlbmRlclNjcmlwdCBycywgVHlwZSB0eXBlLCBNaXBtYXBDb250cm9sIG1pcHMsIGludCB1c2FnZSkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjcmVhdGVUeXBlZCIpOwotICAgICAgICBycy52YWxpZGF0ZSgpOwotICAgICAgICBpZiAodHlwZS5nZXRJRChycykgPT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJCYWQgVHlwZSIpOwotICAgICAgICB9Ci0gICAgICAgIGludCBpZCA9IHJzLm5BbGxvY2F0aW9uQ3JlYXRlVHlwZWQodHlwZS5nZXRJRChycyksIG1pcHMubUlELCB1c2FnZSwgMCk7Ci0gICAgICAgIGlmIChpZCA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJBbGxvY2F0aW9uIGNyZWF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgfQotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICAgICAgcmV0dXJuIG5ldyBBbGxvY2F0aW9uKGlkLCBycywgdHlwZSwgdXNhZ2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW4gQWxsb2NhdGlvbiB3aXRoIHRoZSBzaXplIHNwZWNpZmllZCBieSB0aGUgdHlwZSBhbmQgbm8gbWlwbWFwcwotICAgICAqIGdlbmVyYXRlZCBieSBkZWZhdWx0Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJlbG9uZy4KLSAgICAgKiBAcGFyYW0gdHlwZSByZW5kZXJzY3JpcHQgdHlwZSBkZXNjcmliaW5nIGRhdGEgbGF5b3V0Ci0gICAgICogQHBhcmFtIHVzYWdlIGJpdCBmaWVsZCBzcGVjaWZ5aW5nIGhvdyB0aGUgYWxsb2NhdGlvbiBpcwotICAgICAqICAgICAgICAgICAgICB1dGlsaXplZAotICAgICAqCi0gICAgICogQHJldHVybiBhbGxvY2F0aW9uCi0gICAgICovCi0gICAgc3RhdGljIHB1YmxpYyBBbGxvY2F0aW9uIGNyZWF0ZVR5cGVkKFJlbmRlclNjcmlwdCBycywgVHlwZSB0eXBlLCBpbnQgdXNhZ2UpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVkKHJzLCB0eXBlLCBNaXBtYXBDb250cm9sLk1JUE1BUF9OT05FLCB1c2FnZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbiBBbGxvY2F0aW9uIGZvciB1c2UgYnkgc2NyaXB0cyB3aXRoIGEgZ2l2ZW4ge0BsaW5rCi0gICAgICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuVHlwZX0gYW5kIG5vIG1pcG1hcHMKLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBBbGxvY2F0aW9uIHdpbGwgYmVsb25nLgotICAgICAqIEBwYXJhbSB0eXBlIFJlbmRlclNjcmlwdCBUeXBlIGRlc2NyaWJpbmcgZGF0YSBsYXlvdXQKLSAgICAgKgotICAgICAqIEByZXR1cm4gYWxsb2NhdGlvbgotICAgICAqLwotICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbiBjcmVhdGVUeXBlZChSZW5kZXJTY3JpcHQgcnMsIFR5cGUgdHlwZSkgewotICAgICAgICByZXR1cm4gY3JlYXRlVHlwZWQocnMsIHR5cGUsIE1pcG1hcENvbnRyb2wuTUlQTUFQX05PTkUsIFVTQUdFX1NDUklQVCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbiBBbGxvY2F0aW9uIHdpdGggYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGdpdmVuIGVsZW1lbnRzCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgQWxsb2NhdGlvbiB3aWxsIGJlbG9uZy4KLSAgICAgKiBAcGFyYW0gZSBFbGVtZW50IHRvIHVzZSBpbiB0aGUgQWxsb2NhdGlvbgotICAgICAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIEVsZW1lbnRzIGluIHRoZSBBbGxvY2F0aW9uCi0gICAgICogQHBhcmFtIHVzYWdlIGJpdCBmaWVsZCBzcGVjaWZ5aW5nIGhvdyB0aGUgQWxsb2NhdGlvbiBpcwotICAgICAqICAgICAgICAgICAgICB1dGlsaXplZAotICAgICAqCi0gICAgICogQHJldHVybiBhbGxvY2F0aW9uCi0gICAgICovCi0gICAgc3RhdGljIHB1YmxpYyBBbGxvY2F0aW9uIGNyZWF0ZVNpemVkKFJlbmRlclNjcmlwdCBycywgRWxlbWVudCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCB1c2FnZSkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjcmVhdGVTaXplZCIpOwotICAgICAgICBycy52YWxpZGF0ZSgpOwotICAgICAgICBUeXBlLkJ1aWxkZXIgYiA9IG5ldyBUeXBlLkJ1aWxkZXIocnMsIGUpOwotICAgICAgICBiLnNldFgoY291bnQpOwotICAgICAgICBUeXBlIHQgPSBiLmNyZWF0ZSgpOwotCi0gICAgICAgIGludCBpZCA9IHJzLm5BbGxvY2F0aW9uQ3JlYXRlVHlwZWQodC5nZXRJRChycyksIE1pcG1hcENvbnRyb2wuTUlQTUFQX05PTkUubUlELCB1c2FnZSwgMCk7Ci0gICAgICAgIGlmIChpZCA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJBbGxvY2F0aW9uIGNyZWF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgfQotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICAgICAgcmV0dXJuIG5ldyBBbGxvY2F0aW9uKGlkLCBycywgdCwgdXNhZ2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW4gQWxsb2NhdGlvbiB3aXRoIGEgc3BlY2lmaWVkIG51bWJlciBvZiBnaXZlbiBlbGVtZW50cwotICAgICAqCi0gICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIEFsbG9jYXRpb24gd2lsbCBiZWxvbmcuCi0gICAgICogQHBhcmFtIGUgRWxlbWVudCB0byB1c2UgaW4gdGhlIEFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiBFbGVtZW50cyBpbiB0aGUgQWxsb2NhdGlvbgotICAgICAqCi0gICAgICogQHJldHVybiBhbGxvY2F0aW9uCi0gICAgICovCi0gICAgc3RhdGljIHB1YmxpYyBBbGxvY2F0aW9uIGNyZWF0ZVNpemVkKFJlbmRlclNjcmlwdCBycywgRWxlbWVudCBlLCBpbnQgY291bnQpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVNpemVkKHJzLCBlLCBjb3VudCwgVVNBR0VfU0NSSVBUKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgRWxlbWVudCBlbGVtZW50RnJvbUJpdG1hcChSZW5kZXJTY3JpcHQgcnMsIEJpdG1hcCBiKSB7Ci0gICAgICAgIGZpbmFsIEJpdG1hcC5Db25maWcgYmMgPSBiLmdldENvbmZpZygpOwotICAgICAgICBpZiAoYmMgPT0gQml0bWFwLkNvbmZpZy5BTFBIQV84KSB7Ci0gICAgICAgICAgICByZXR1cm4gRWxlbWVudC5BXzgocnMpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiYyA9PSBCaXRtYXAuQ29uZmlnLkFSR0JfNDQ0NCkgewotICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnQuUkdCQV80NDQ0KHJzKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYmMgPT0gQml0bWFwLkNvbmZpZy5BUkdCXzg4ODgpIHsKLSAgICAgICAgICAgIHJldHVybiBFbGVtZW50LlJHQkFfODg4OChycyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJjID09IEJpdG1hcC5Db25maWcuUkdCXzU2NSkgewotICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnQuUkdCXzU2NShycyk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJCYWQgYml0bWFwIHR5cGU6ICIgKyBiYyk7Ci0gICAgfQotCi0gICAgc3RhdGljIFR5cGUgdHlwZUZyb21CaXRtYXAoUmVuZGVyU2NyaXB0IHJzLCBCaXRtYXAgYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pcG1hcENvbnRyb2wgbWlwKSB7Ci0gICAgICAgIEVsZW1lbnQgZSA9IGVsZW1lbnRGcm9tQml0bWFwKHJzLCBiKTsKLSAgICAgICAgVHlwZS5CdWlsZGVyIHRiID0gbmV3IFR5cGUuQnVpbGRlcihycywgZSk7Ci0gICAgICAgIHRiLnNldFgoYi5nZXRXaWR0aCgpKTsKLSAgICAgICAgdGIuc2V0WShiLmdldEhlaWdodCgpKTsKLSAgICAgICAgdGIuc2V0TWlwbWFwcyhtaXAgPT0gTWlwbWFwQ29udHJvbC5NSVBNQVBfRlVMTCk7Ci0gICAgICAgIHJldHVybiB0Yi5jcmVhdGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuIEFsbG9jYXRpb24gZnJvbSBhIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcH0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJlbG9uZy4KLSAgICAgKiBAcGFyYW0gYiBCaXRtYXAgc291cmNlIGZvciB0aGUgYWxsb2NhdGlvbiBkYXRhCi0gICAgICogQHBhcmFtIG1pcHMgc3BlY2lmaWVzIGRlc2lyZWQgbWlwbWFwIGJlaGF2aW91ciBmb3IgdGhlCi0gICAgICogICAgICAgICAgICAgYWxsb2NhdGlvbgotICAgICAqIEBwYXJhbSB1c2FnZSBiaXQgZmllbGQgc3BlY2lmeWluZyBob3cgdGhlIGFsbG9jYXRpb24gaXMKLSAgICAgKiAgICAgICAgICAgICAgdXRpbGl6ZWQKLSAgICAgKgotICAgICAqIEByZXR1cm4gQWxsb2NhdGlvbiBjb250YWluaW5nIGJpdG1hcCBkYXRhCi0gICAgICoKLSAgICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEFsbG9jYXRpb24gY3JlYXRlRnJvbUJpdG1hcChSZW5kZXJTY3JpcHQgcnMsIEJpdG1hcCBiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pcG1hcENvbnRyb2wgbWlwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNhZ2UpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY3JlYXRlRnJvbUJpdG1hcCIpOwotICAgICAgICBycy52YWxpZGF0ZSgpOwotCi0gICAgICAgIC8vIFdBUiB1bmRvY3VtZW50ZWQgY29sb3IgZm9ybWF0cwotICAgICAgICBpZiAoYi5nZXRDb25maWcoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoKHVzYWdlICYgVVNBR0VfU0hBUkVEKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVU0FHRV9TSEFSRUQgY2Fubm90IGJlIHVzZWQgd2l0aCBhIEJpdG1hcCB0aGF0IGhhcyBhIG51bGwgY29uZmlnLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQml0bWFwIG5ld0JpdG1hcCA9IEJpdG1hcC5jcmVhdGVCaXRtYXAoYi5nZXRXaWR0aCgpLCBiLmdldEhlaWdodCgpLCBCaXRtYXAuQ29uZmlnLkFSR0JfODg4OCk7Ci0gICAgICAgICAgICBDYW52YXMgYyA9IG5ldyBDYW52YXMobmV3Qml0bWFwKTsKLSAgICAgICAgICAgIGMuZHJhd0JpdG1hcChiLCAwLCAwLCBudWxsKTsKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVGcm9tQml0bWFwKHJzLCBuZXdCaXRtYXAsIG1pcHMsIHVzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIFR5cGUgdCA9IHR5cGVGcm9tQml0bWFwKHJzLCBiLCBtaXBzKTsKLQotICAgICAgICAvLyBlbmFibGUgb3B0aW1pemVkIGJpdG1hcCBwYXRoIG9ubHkgd2l0aCBubyBtaXBtYXAgYW5kIHNjcmlwdC1vbmx5IHVzYWdlCi0gICAgICAgIGlmIChtaXBzID09IE1pcG1hcENvbnRyb2wuTUlQTUFQX05PTkUgJiYKLSAgICAgICAgICAgIHQuZ2V0RWxlbWVudCgpLmlzQ29tcGF0aWJsZShFbGVtZW50LlJHQkFfODg4OChycykpICYmCi0gICAgICAgICAgICB1c2FnZSA9PSAoVVNBR0VfU0hBUkVEIHwgVVNBR0VfU0NSSVBUIHwgVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRSkpIHsKLSAgICAgICAgICAgIGludCBpZCA9IHJzLm5BbGxvY2F0aW9uQ3JlYXRlQml0bWFwQmFja2VkQWxsb2NhdGlvbih0LmdldElEKHJzKSwgbWlwcy5tSUQsIGIsIHVzYWdlKTsKLSAgICAgICAgICAgIGlmIChpZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiTG9hZCBmYWlsZWQuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIEJpdG1hcCBhcm91bmQgdG8gcHJldmVudCBHQwotICAgICAgICAgICAgQWxsb2NhdGlvbiBhbGxvYyA9IG5ldyBBbGxvY2F0aW9uKGlkLCBycywgdCwgdXNhZ2UpOwotICAgICAgICAgICAgYWxsb2Muc2V0Qml0bWFwKGIpOwotICAgICAgICAgICAgcmV0dXJuIGFsbG9jOwotICAgICAgICB9Ci0KLQotICAgICAgICBpbnQgaWQgPSBycy5uQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAodC5nZXRJRChycyksIG1pcHMubUlELCBiLCB1c2FnZSk7Ci0gICAgICAgIGlmIChpZCA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJMb2FkIGZhaWxlZC4iKTsKLSAgICAgICAgfQotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKLSAgICAgICAgcmV0dXJuIG5ldyBBbGxvY2F0aW9uKGlkLCBycywgdCwgdXNhZ2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGhhbmRsZSB0byBhIHJhdyBidWZmZXIgdGhhdCBpcyBiZWluZyBtYW5hZ2VkIGJ5IHRoZSBzY3JlZW4KLSAgICAgKiBjb21wb3NpdG9yLiBUaGlzIG9wZXJhdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBBbGxvY2F0aW9ucyB3aXRoIHtAbGluawotICAgICAqICNVU0FHRV9JT19JTlBVVH0uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFN1cmZhY2Ugb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBhbGxvY2F0aW9uCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgU3VyZmFjZSBnZXRTdXJmYWNlKCkgewotICAgICAgICBpZiAoKG1Vc2FnZSAmIFVTQUdFX0lPX0lOUFVUKSA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkFsbG9jYXRpb24gaXMgbm90IGEgc3VyZmFjZSB0ZXh0dXJlLiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtUlMubkFsbG9jYXRpb25HZXRTdXJmYWNlKGdldElEKG1SUykpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0U3VyZmFjZVRleHR1cmUoU3VyZmFjZVRleHR1cmUgc3QpIHsKLSAgICAgICAgc2V0U3VyZmFjZShuZXcgU3VyZmFjZShzdCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFzc29jaWF0ZSBhIHtAbGluayBhbmRyb2lkLnZpZXcuU3VyZmFjZX0gd2l0aCB0aGlzIEFsbG9jYXRpb24uIFRoaXMKLSAgICAgKiBvcGVyYXRpb24gaXMgb25seSB2YWxpZCBmb3IgQWxsb2NhdGlvbnMgd2l0aCB7QGxpbmsgI1VTQUdFX0lPX09VVFBVVH0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc3VyIFN1cmZhY2UgdG8gYXNzb2NpYXRlIHdpdGggYWxsb2NhdGlvbgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFN1cmZhY2UoU3VyZmFjZSBzdXIpIHsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmICgobVVzYWdlICYgVVNBR0VfSU9fT1VUUFVUKSA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkFsbG9jYXRpb24gaXMgbm90IFVTQUdFX0lPX09VVFBVVC4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1SUy5uQWxsb2NhdGlvblNldFN1cmZhY2UoZ2V0SUQobVJTKSwgc3VyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuIEFsbG9jYXRpb24gZnJvbSBhIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcH0uCi0gICAgICoKLSAgICAgKiA8cD5XaXRoIHRhcmdldCBBUEkgdmVyc2lvbiAxOCBvciBncmVhdGVyLCB0aGlzIEFsbG9jYXRpb24gd2lsbCBiZSBjcmVhdGVkCi0gICAgICogd2l0aCB7QGxpbmsgI1VTQUdFX1NIQVJFRH0sIHtAbGluayAjVVNBR0VfU0NSSVBUfSwgYW5kIHtAbGluawotICAgICAqICNVU0FHRV9HUkFQSElDU19URVhUVVJFfS4gV2l0aCB0YXJnZXQgQVBJIHZlcnNpb24gMTcgb3IgbG93ZXIsIHRoaXMKLSAgICAgKiBBbGxvY2F0aW9uIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHtAbGluayAjVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRX0uPC9wPgotICAgICAqCi0gICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIGFsbG9jYXRpb24gd2lsbCBiZWxvbmcuCi0gICAgICogQHBhcmFtIGIgYml0bWFwIHNvdXJjZSBmb3IgdGhlIGFsbG9jYXRpb24gZGF0YQotICAgICAqCi0gICAgICogQHJldHVybiBBbGxvY2F0aW9uIGNvbnRhaW5pbmcgYml0bWFwIGRhdGEKLSAgICAgKgotICAgICAqLwotICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbiBjcmVhdGVGcm9tQml0bWFwKFJlbmRlclNjcmlwdCBycywgQml0bWFwIGIpIHsKLSAgICAgICAgaWYgKHJzLmdldEFwcGxpY2F0aW9uQ29udGV4dCgpLmdldEFwcGxpY2F0aW9uSW5mbygpLnRhcmdldFNka1ZlcnNpb24gPj0gMTgpIHsKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVGcm9tQml0bWFwKHJzLCBiLCBNaXBtYXBDb250cm9sLk1JUE1BUF9OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBR0VfU0hBUkVEIHwgVVNBR0VfU0NSSVBUIHwgVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21CaXRtYXAocnMsIGIsIE1pcG1hcENvbnRyb2wuTUlQTUFQX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBjdWJlbWFwIEFsbG9jYXRpb24gZnJvbSBhIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcH0KLSAgICAgKiBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIGxpc3Qgb2YgY3ViZSBmYWNlcy4gRWFjaCBmYWNlIG11c3QgYmUgYSBzcXVhcmUsCi0gICAgICogaGF2ZSB0aGUgc2FtZSBzaXplIGFzIGFsbCBvdGhlciBmYWNlcywgYW5kIGhhdmUgYSB3aWR0aCB0aGF0IGlzIGEgcG93ZXIKLSAgICAgKiBvZiAyLgotICAgICAqCi0gICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIGFsbG9jYXRpb24gd2lsbCBiZWxvbmcuCi0gICAgICogQHBhcmFtIGIgQml0bWFwIHdpdGggY3ViZW1hcCBmYWNlcyBsYXllZCBvdXQgaW4gdGhlIGZvbGxvd2luZwotICAgICAqICAgICAgICAgIGZvcm1hdDogcmlnaHQsIGxlZnQsIHRvcCwgYm90dG9tLCBmcm9udCwgYmFjawotICAgICAqIEBwYXJhbSBtaXBzIHNwZWNpZmllcyBkZXNpcmVkIG1pcG1hcCBiZWhhdmlvdXIgZm9yIHRoZSBjdWJlbWFwCi0gICAgICogQHBhcmFtIHVzYWdlIGJpdCBmaWVsZCBzcGVjaWZ5aW5nIGhvdyB0aGUgY3ViZW1hcCBpcyB1dGlsaXplZAotICAgICAqCi0gICAgICogQHJldHVybiBhbGxvY2F0aW9uIGNvbnRhaW5pbmcgY3ViZW1hcCBkYXRhCi0gICAgICoKLSAgICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEFsbG9jYXRpb24gY3JlYXRlQ3ViZW1hcEZyb21CaXRtYXAoUmVuZGVyU2NyaXB0IHJzLCBCaXRtYXAgYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlwbWFwQ29udHJvbCBtaXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNhZ2UpIHsKLSAgICAgICAgcnMudmFsaWRhdGUoKTsKLQotICAgICAgICBpbnQgaGVpZ2h0ID0gYi5nZXRIZWlnaHQoKTsKLSAgICAgICAgaW50IHdpZHRoID0gYi5nZXRXaWR0aCgpOwotCi0gICAgICAgIGlmICh3aWR0aCAlIDYgIT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDdWJlbWFwIGhlaWdodCBtdXN0IGJlIG11bHRpcGxlIG9mIDYiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAod2lkdGggLyA2ICE9IGhlaWdodCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPbmx5IHNxdWFyZSBjdWJlIG1hcCBmYWNlcyBzdXBwb3J0ZWQiKTsKLSAgICAgICAgfQotICAgICAgICBib29sZWFuIGlzUG93MiA9IChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09IDA7Ci0gICAgICAgIGlmICghaXNQb3cyKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk9ubHkgcG93ZXIgb2YgMiBjdWJlIGZhY2VzIHN1cHBvcnRlZCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgRWxlbWVudCBlID0gZWxlbWVudEZyb21CaXRtYXAocnMsIGIpOwotICAgICAgICBUeXBlLkJ1aWxkZXIgdGIgPSBuZXcgVHlwZS5CdWlsZGVyKHJzLCBlKTsKLSAgICAgICAgdGIuc2V0WChoZWlnaHQpOwotICAgICAgICB0Yi5zZXRZKGhlaWdodCk7Ci0gICAgICAgIHRiLnNldEZhY2VzKHRydWUpOwotICAgICAgICB0Yi5zZXRNaXBtYXBzKG1pcHMgPT0gTWlwbWFwQ29udHJvbC5NSVBNQVBfRlVMTCk7Ci0gICAgICAgIFR5cGUgdCA9IHRiLmNyZWF0ZSgpOwotCi0gICAgICAgIGludCBpZCA9IHJzLm5BbGxvY2F0aW9uQ3ViZUNyZWF0ZUZyb21CaXRtYXAodC5nZXRJRChycyksIG1pcHMubUlELCBiLCB1c2FnZSk7Ci0gICAgICAgIGlmKGlkID09IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIkxvYWQgZmFpbGVkIGZvciBiaXRtYXAgIiArIGIgKyAiIGVsZW1lbnQgIiArIGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgQWxsb2NhdGlvbihpZCwgcnMsIHQsIHVzYWdlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbm9uLW1pcG1hcHBlZCBjdWJlbWFwIEFsbG9jYXRpb24gZm9yIHVzZSBhcyBhIGdyYXBoaWNzIHRleHR1cmUKLSAgICAgKiBmcm9tIGEge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwfSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIGxpc3Qgb2YKLSAgICAgKiBjdWJlIGZhY2VzLiBFYWNoIGZhY2UgbXVzdCBiZSBhIHNxdWFyZSwgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIGFsbCBvdGhlcgotICAgICAqIGZhY2VzLCBhbmQgaGF2ZSBhIHdpZHRoIHRoYXQgaXMgYSBwb3dlciBvZiAyLgotICAgICAqCi0gICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIGFsbG9jYXRpb24gd2lsbCBiZWxvbmcuCi0gICAgICogQHBhcmFtIGIgYml0bWFwIHdpdGggY3ViZW1hcCBmYWNlcyBsYXllZCBvdXQgaW4gdGhlIGZvbGxvd2luZwotICAgICAqICAgICAgICAgIGZvcm1hdDogcmlnaHQsIGxlZnQsIHRvcCwgYm90dG9tLCBmcm9udCwgYmFjawotICAgICAqCi0gICAgICogQHJldHVybiBhbGxvY2F0aW9uIGNvbnRhaW5pbmcgY3ViZW1hcCBkYXRhCi0gICAgICoKLSAgICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEFsbG9jYXRpb24gY3JlYXRlQ3ViZW1hcEZyb21CaXRtYXAoUmVuZGVyU2NyaXB0IHJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAgYikgewotICAgICAgICByZXR1cm4gY3JlYXRlQ3ViZW1hcEZyb21CaXRtYXAocnMsIGIsIE1pcG1hcENvbnRyb2wuTUlQTUFQX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FHRV9HUkFQSElDU19URVhUVVJFKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgY3ViZW1hcCBBbGxvY2F0aW9uIGZyb20gNiB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXB9Ci0gICAgICogb2JqZWN0cyBjb250YWluaW5nIHRoZSBjdWJlIGZhY2VzLiBFYWNoIGZhY2UgbXVzdCBiZSBhIHNxdWFyZSwgaGF2ZSB0aGUKLSAgICAgKiBzYW1lIHNpemUgYXMgYWxsIG90aGVyIGZhY2VzLCBhbmQgaGF2ZSBhIHdpZHRoIHRoYXQgaXMgYSBwb3dlciBvZiAyLgotICAgICAqCi0gICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIGFsbG9jYXRpb24gd2lsbCBiZWxvbmcuCi0gICAgICogQHBhcmFtIHhwb3MgY3ViZW1hcCBmYWNlIGluIHRoZSBwb3NpdGl2ZSB4IGRpcmVjdGlvbgotICAgICAqIEBwYXJhbSB4bmVnIGN1YmVtYXAgZmFjZSBpbiB0aGUgbmVnYXRpdmUgeCBkaXJlY3Rpb24KLSAgICAgKiBAcGFyYW0geXBvcyBjdWJlbWFwIGZhY2UgaW4gdGhlIHBvc2l0aXZlIHkgZGlyZWN0aW9uCi0gICAgICogQHBhcmFtIHluZWcgY3ViZW1hcCBmYWNlIGluIHRoZSBuZWdhdGl2ZSB5IGRpcmVjdGlvbgotICAgICAqIEBwYXJhbSB6cG9zIGN1YmVtYXAgZmFjZSBpbiB0aGUgcG9zaXRpdmUgeiBkaXJlY3Rpb24KLSAgICAgKiBAcGFyYW0gem5lZyBjdWJlbWFwIGZhY2UgaW4gdGhlIG5lZ2F0aXZlIHogZGlyZWN0aW9uCi0gICAgICogQHBhcmFtIG1pcHMgc3BlY2lmaWVzIGRlc2lyZWQgbWlwbWFwIGJlaGF2aW91ciBmb3IgdGhlIGN1YmVtYXAKLSAgICAgKiBAcGFyYW0gdXNhZ2UgYml0IGZpZWxkIHNwZWNpZnlpbmcgaG93IHRoZSBjdWJlbWFwIGlzIHV0aWxpemVkCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGFsbG9jYXRpb24gY29udGFpbmluZyBjdWJlbWFwIGRhdGEKLSAgICAgKgotICAgICAqLwotICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbiBjcmVhdGVDdWJlbWFwRnJvbUN1YmVGYWNlcyhSZW5kZXJTY3JpcHQgcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcCB4cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAgeG5lZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwIHlwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcCB5bmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAgenBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwIHpuZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pcG1hcENvbnRyb2wgbWlwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVzYWdlKSB7Ci0gICAgICAgIGludCBoZWlnaHQgPSB4cG9zLmdldEhlaWdodCgpOwotICAgICAgICBpZiAoeHBvcy5nZXRXaWR0aCgpICE9IGhlaWdodCB8fAotICAgICAgICAgICAgeG5lZy5nZXRXaWR0aCgpICE9IGhlaWdodCB8fCB4bmVnLmdldEhlaWdodCgpICE9IGhlaWdodCB8fAotICAgICAgICAgICAgeXBvcy5nZXRXaWR0aCgpICE9IGhlaWdodCB8fCB5cG9zLmdldEhlaWdodCgpICE9IGhlaWdodCB8fAotICAgICAgICAgICAgeW5lZy5nZXRXaWR0aCgpICE9IGhlaWdodCB8fCB5bmVnLmdldEhlaWdodCgpICE9IGhlaWdodCB8fAotICAgICAgICAgICAgenBvcy5nZXRXaWR0aCgpICE9IGhlaWdodCB8fCB6cG9zLmdldEhlaWdodCgpICE9IGhlaWdodCB8fAotICAgICAgICAgICAgem5lZy5nZXRXaWR0aCgpICE9IGhlaWdodCB8fCB6bmVnLmdldEhlaWdodCgpICE9IGhlaWdodCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPbmx5IHNxdWFyZSBjdWJlIG1hcCBmYWNlcyBzdXBwb3J0ZWQiKTsKLSAgICAgICAgfQotICAgICAgICBib29sZWFuIGlzUG93MiA9IChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09IDA7Ci0gICAgICAgIGlmICghaXNQb3cyKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk9ubHkgcG93ZXIgb2YgMiBjdWJlIGZhY2VzIHN1cHBvcnRlZCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgRWxlbWVudCBlID0gZWxlbWVudEZyb21CaXRtYXAocnMsIHhwb3MpOwotICAgICAgICBUeXBlLkJ1aWxkZXIgdGIgPSBuZXcgVHlwZS5CdWlsZGVyKHJzLCBlKTsKLSAgICAgICAgdGIuc2V0WChoZWlnaHQpOwotICAgICAgICB0Yi5zZXRZKGhlaWdodCk7Ci0gICAgICAgIHRiLnNldEZhY2VzKHRydWUpOwotICAgICAgICB0Yi5zZXRNaXBtYXBzKG1pcHMgPT0gTWlwbWFwQ29udHJvbC5NSVBNQVBfRlVMTCk7Ci0gICAgICAgIFR5cGUgdCA9IHRiLmNyZWF0ZSgpOwotICAgICAgICBBbGxvY2F0aW9uIGN1YmVtYXAgPSBBbGxvY2F0aW9uLmNyZWF0ZVR5cGVkKHJzLCB0LCBtaXBzLCB1c2FnZSk7Ci0KLSAgICAgICAgQWxsb2NhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IEFsbG9jYXRpb25BZGFwdGVyLmNyZWF0ZTJEKHJzLCBjdWJlbWFwKTsKLSAgICAgICAgYWRhcHRlci5zZXRGYWNlKFR5cGUuQ3ViZW1hcEZhY2UuUE9TSVRJVkVfWCk7Ci0gICAgICAgIGFkYXB0ZXIuY29weUZyb20oeHBvcyk7Ci0gICAgICAgIGFkYXB0ZXIuc2V0RmFjZShUeXBlLkN1YmVtYXBGYWNlLk5FR0FUSVZFX1gpOwotICAgICAgICBhZGFwdGVyLmNvcHlGcm9tKHhuZWcpOwotICAgICAgICBhZGFwdGVyLnNldEZhY2UoVHlwZS5DdWJlbWFwRmFjZS5QT1NJVElWRV9ZKTsKLSAgICAgICAgYWRhcHRlci5jb3B5RnJvbSh5cG9zKTsKLSAgICAgICAgYWRhcHRlci5zZXRGYWNlKFR5cGUuQ3ViZW1hcEZhY2UuTkVHQVRJVkVfWSk7Ci0gICAgICAgIGFkYXB0ZXIuY29weUZyb20oeW5lZyk7Ci0gICAgICAgIGFkYXB0ZXIuc2V0RmFjZShUeXBlLkN1YmVtYXBGYWNlLlBPU0lUSVZFX1opOwotICAgICAgICBhZGFwdGVyLmNvcHlGcm9tKHpwb3MpOwotICAgICAgICBhZGFwdGVyLnNldEZhY2UoVHlwZS5DdWJlbWFwRmFjZS5ORUdBVElWRV9aKTsKLSAgICAgICAgYWRhcHRlci5jb3B5RnJvbSh6bmVnKTsKLQotICAgICAgICByZXR1cm4gY3ViZW1hcDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbm9uLW1pcG1hcHBlZCBjdWJlbWFwIEFsbG9jYXRpb24gZm9yIHVzZSBhcyBhIHNhbXBsZXIgaW5wdXQKLSAgICAgKiBmcm9tIDYge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwfSBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIGN1YmUKLSAgICAgKiBmYWNlcy4gRWFjaCBmYWNlIG11c3QgYmUgYSBzcXVhcmUsIGhhdmUgdGhlIHNhbWUgc2l6ZSBhcyBhbGwgb3RoZXIgZmFjZXMsCi0gICAgICogYW5kIGhhdmUgYSB3aWR0aCB0aGF0IGlzIGEgcG93ZXIgb2YgMi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmVsb25nLgotICAgICAqIEBwYXJhbSB4cG9zIGN1YmVtYXAgZmFjZSBpbiB0aGUgcG9zaXRpdmUgeCBkaXJlY3Rpb24KLSAgICAgKiBAcGFyYW0geG5lZyBjdWJlbWFwIGZhY2UgaW4gdGhlIG5lZ2F0aXZlIHggZGlyZWN0aW9uCi0gICAgICogQHBhcmFtIHlwb3MgY3ViZW1hcCBmYWNlIGluIHRoZSBwb3NpdGl2ZSB5IGRpcmVjdGlvbgotICAgICAqIEBwYXJhbSB5bmVnIGN1YmVtYXAgZmFjZSBpbiB0aGUgbmVnYXRpdmUgeSBkaXJlY3Rpb24KLSAgICAgKiBAcGFyYW0genBvcyBjdWJlbWFwIGZhY2UgaW4gdGhlIHBvc2l0aXZlIHogZGlyZWN0aW9uCi0gICAgICogQHBhcmFtIHpuZWcgY3ViZW1hcCBmYWNlIGluIHRoZSBuZWdhdGl2ZSB6IGRpcmVjdGlvbgotICAgICAqCi0gICAgICogQHJldHVybiBhbGxvY2F0aW9uIGNvbnRhaW5pbmcgY3ViZW1hcCBkYXRhCi0gICAgICoKLSAgICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEFsbG9jYXRpb24gY3JlYXRlQ3ViZW1hcEZyb21DdWJlRmFjZXMoUmVuZGVyU2NyaXB0IHJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAgeHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwIHhuZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcCB5cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAgeW5lZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwIHpwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcCB6bmVnKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDdWJlbWFwRnJvbUN1YmVGYWNlcyhycywgeHBvcywgeG5lZywgeXBvcywgeW5lZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpwb3MsIHpuZWcsIE1pcG1hcENvbnRyb2wuTUlQTUFQX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FHRV9HUkFQSElDU19URVhUVVJFKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuIEFsbG9jYXRpb24gZnJvbSB0aGUgQml0bWFwIHJlZmVyZW5jZWQKLSAgICAgKiBieSByZXNvdXJjZSBJRC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmVsb25nLgotICAgICAqIEBwYXJhbSByZXMgYXBwbGljYXRpb24gcmVzb3VyY2VzCi0gICAgICogQHBhcmFtIGlkIHJlc291cmNlIGlkIHRvIGxvYWQgdGhlIGRhdGEgZnJvbQotICAgICAqIEBwYXJhbSBtaXBzIHNwZWNpZmllcyBkZXNpcmVkIG1pcG1hcCBiZWhhdmlvdXIgZm9yIHRoZQotICAgICAqICAgICAgICAgICAgIGFsbG9jYXRpb24KLSAgICAgKiBAcGFyYW0gdXNhZ2UgYml0IGZpZWxkIHNwZWNpZnlpbmcgaG93IHRoZSBhbGxvY2F0aW9uIGlzCi0gICAgICogICAgICAgICAgICAgIHV0aWxpemVkCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEFsbG9jYXRpb24gY29udGFpbmluZyByZXNvdXJjZSBkYXRhCi0gICAgICoKLSAgICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEFsbG9jYXRpb24gY3JlYXRlRnJvbUJpdG1hcFJlc291cmNlKFJlbmRlclNjcmlwdCBycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlcyByZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXBtYXBDb250cm9sIG1pcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNhZ2UpIHsKLQotICAgICAgICBycy52YWxpZGF0ZSgpOwotICAgICAgICBpZiAoKHVzYWdlICYgKFVTQUdFX1NIQVJFRCB8IFVTQUdFX0lPX0lOUFVUIHwgVVNBR0VfSU9fT1VUUFVUKSkgIT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCB1c2FnZSBzcGVjaWZpZWQuIik7Ci0gICAgICAgIH0KLSAgICAgICAgQml0bWFwIGIgPSBCaXRtYXBGYWN0b3J5LmRlY29kZVJlc291cmNlKHJlcywgaWQpOwotICAgICAgICBBbGxvY2F0aW9uIGFsbG9jID0gY3JlYXRlRnJvbUJpdG1hcChycywgYiwgbWlwcywgdXNhZ2UpOwotICAgICAgICBiLnJlY3ljbGUoKTsKLSAgICAgICAgcmV0dXJuIGFsbG9jOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBub24tbWlwbWFwcGVkIEFsbG9jYXRpb24gdG8gdXNlIGFzIGEgZ3JhcGhpY3MgdGV4dHVyZSBmcm9tIHRoZQotICAgICAqIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcH0gcmVmZXJlbmNlZCBieSByZXNvdXJjZSBJRC4KLSAgICAgKgotICAgICAqIDxwPldpdGggdGFyZ2V0IEFQSSB2ZXJzaW9uIDE4IG9yIGdyZWF0ZXIsIHRoaXMgYWxsb2NhdGlvbiB3aWxsIGJlIGNyZWF0ZWQKLSAgICAgKiB3aXRoIHtAbGluayAjVVNBR0VfU0NSSVBUfSBhbmQge0BsaW5rICNVU0FHRV9HUkFQSElDU19URVhUVVJFfS4gV2l0aAotICAgICAqIHRhcmdldCBBUEkgdmVyc2lvbiAxNyBvciBsb3dlciwgdGhpcyBhbGxvY2F0aW9uIHdpbGwgYmUgY3JlYXRlZCB3aXRoCi0gICAgICoge0BsaW5rICNVU0FHRV9HUkFQSElDU19URVhUVVJFfS48L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJlbG9uZy4KLSAgICAgKiBAcGFyYW0gcmVzIGFwcGxpY2F0aW9uIHJlc291cmNlcwotICAgICAqIEBwYXJhbSBpZCByZXNvdXJjZSBpZCB0byBsb2FkIHRoZSBkYXRhIGZyb20KLSAgICAgKgotICAgICAqIEByZXR1cm4gQWxsb2NhdGlvbiBjb250YWluaW5nIHJlc291cmNlIGRhdGEKLSAgICAgKgotICAgICAqLwotICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbiBjcmVhdGVGcm9tQml0bWFwUmVzb3VyY2UoUmVuZGVyU2NyaXB0IHJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VzIHJlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZCkgewotICAgICAgICBpZiAocnMuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkuZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbiA+PSAxOCkgewotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21CaXRtYXBSZXNvdXJjZShycywgcmVzLCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlwbWFwQ29udHJvbC5NSVBNQVBfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBR0VfU0NSSVBUIHwgVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21CaXRtYXBSZXNvdXJjZShycywgcmVzLCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXBtYXBDb250cm9sLk1JUE1BUF9OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW4gQWxsb2NhdGlvbiBjb250YWluaW5nIHN0cmluZyBkYXRhIGVuY29kZWQgaW4gVVRGLTggZm9ybWF0LgotICAgICAqCi0gICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIGFsbG9jYXRpb24gd2lsbCBiZWxvbmcuCi0gICAgICogQHBhcmFtIHN0ciBzdHJpbmcgdG8gY3JlYXRlIHRoZSBhbGxvY2F0aW9uIGZyb20KLSAgICAgKiBAcGFyYW0gdXNhZ2UgYml0IGZpZWxkIHNwZWNpZnlpbmcgaG93IHRoZSBhbGxvY2FpdG9uIGlzCi0gICAgICogICAgICAgICAgICAgIHV0aWxpemVkCi0gICAgICoKLSAgICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEFsbG9jYXRpb24gY3JlYXRlRnJvbVN0cmluZyhSZW5kZXJTY3JpcHQgcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNhZ2UpIHsKLSAgICAgICAgcnMudmFsaWRhdGUoKTsKLSAgICAgICAgYnl0ZVtdIGFsbG9jQXJyYXkgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgYWxsb2NBcnJheSA9IHN0ci5nZXRCeXRlcygiVVRGLTgiKTsKLSAgICAgICAgICAgIEFsbG9jYXRpb24gYWxsb2MgPSBBbGxvY2F0aW9uLmNyZWF0ZVNpemVkKHJzLCBFbGVtZW50LlU4KHJzKSwgYWxsb2NBcnJheS5sZW5ndGgsIHVzYWdlKTsKLSAgICAgICAgICAgIGFsbG9jLmNvcHlGcm9tKGFsbG9jQXJyYXkpOwotICAgICAgICAgICAgcmV0dXJuIGFsbG9jOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIHV0Zi04LiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW50ZXJmYWNlIHRvIGhhbmRsZSBub3RpZmljYXRpb24gd2hlbiBuZXcgYnVmZmVycyBhcmUgYXZhaWxhYmxlIHZpYQotICAgICAqIHtAbGluayAjVVNBR0VfSU9fSU5QVVR9LiBBbiBhcHBsaWNhdGlvbiB3aWxsIHJlY2VpdmUgb25lIG5vdGlmaWNhdGlvbgotICAgICAqIHdoZW4gYSBidWZmZXIgaXMgYXZhaWxhYmxlLiBBZGRpdGlvbmFsIGJ1ZmZlcnMgd2lsbCBub3QgdHJpZ2dlciBuZXcKLSAgICAgKiBub3RpZmljYXRpb25zIHVudGlsIGEgYnVmZmVyIGlzIHByb2Nlc3NlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50ZXJmYWNlIE9uQnVmZmVyQXZhaWxhYmxlTGlzdGVuZXIgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkJ1ZmZlckF2YWlsYWJsZShBbGxvY2F0aW9uIGEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldCBhIG5vdGlmaWNhdGlvbiBoYW5kbGVyIGZvciB7QGxpbmsgI1VTQUdFX0lPX0lOUFVUfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjYWxsYmFjayBpbnN0YW5jZSBvZiB0aGUgT25CdWZmZXJBdmFpbGFibGVMaXN0ZW5lcgotICAgICAqICAgICAgICAgICAgICAgICBjbGFzcyB0byBiZSBjYWxsZWQgd2hlbiBidWZmZXIgYXJyaXZlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE9uQnVmZmVyQXZhaWxhYmxlTGlzdGVuZXIoT25CdWZmZXJBdmFpbGFibGVMaXN0ZW5lciBjYWxsYmFjaykgewotICAgICAgICBzeW5jaHJvbml6ZWQobUFsbG9jYXRpb25NYXApIHsKLSAgICAgICAgICAgIG1BbGxvY2F0aW9uTWFwLnB1dChuZXcgSW50ZWdlcihnZXRJRChtUlMpKSwgdGhpcyk7Ci0gICAgICAgICAgICBtQnVmZmVyTm90aWZpZXIgPSBjYWxsYmFjazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHNlbmRCdWZmZXJOb3RpZmljYXRpb24oaW50IGlkKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZChtQWxsb2NhdGlvbk1hcCkgewotICAgICAgICAgICAgQWxsb2NhdGlvbiBhID0gbUFsbG9jYXRpb25NYXAuZ2V0KG5ldyBJbnRlZ2VyKGlkKSk7Ci0KLSAgICAgICAgICAgIGlmICgoYSAhPSBudWxsKSAmJiAoYS5tQnVmZmVyTm90aWZpZXIgIT0gbnVsbCkpIHsKLSAgICAgICAgICAgICAgICBhLm1CdWZmZXJOb3RpZmllci5vbkJ1ZmZlckF2YWlsYWJsZShhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotfQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb25BZGFwdGVyLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb25BZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NjQ1YmIuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwotaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwotCi0vKioKLSAqIE9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCi0gKgotICoqLwotcHVibGljIGNsYXNzIEFsbG9jYXRpb25BZGFwdGVyIGV4dGVuZHMgQWxsb2NhdGlvbiB7Ci0gICAgQWxsb2NhdGlvbkFkYXB0ZXIoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMsIEFsbG9jYXRpb24gYWxsb2MpIHsKLSAgICAgICAgc3VwZXIoaWQsIHJzLCBhbGxvYy5tVHlwZSwgYWxsb2MubVVzYWdlKTsKLSAgICAgICAgbUFkYXB0ZWRBbGxvY2F0aW9uID0gYWxsb2M7Ci0gICAgfQotCi0gICAgaW50IGdldElEKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oCi0gICAgICAgICAgICAiVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRoIGFkYXB0ZXJzIGF0IHRoaXMgdGltZS4iKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YkRhdGEoaW50IHhvZmYsIEZpZWxkUGFja2VyIGZwKSB7Ci0gICAgICAgIHN1cGVyLnNldEZyb21GaWVsZFBhY2tlcih4b2ZmLCBmcCk7Ci0gICAgfQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3ViRWxlbWVudERhdGEoaW50IHhvZmYsIGludCBjb21wb25lbnRfbnVtYmVyLCBGaWVsZFBhY2tlciBmcCkgewotICAgICAgICBzdXBlci5zZXRGcm9tRmllbGRQYWNrZXIoeG9mZiwgY29tcG9uZW50X251bWJlciwgZnApOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YkRhdGExRChpbnQgb2ZmLCBpbnQgY291bnQsIGludFtdIGQpIHsKLSAgICAgICAgc3VwZXIuY29weTFEUmFuZ2VGcm9tKG9mZiwgY291bnQsIGQpOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YkRhdGExRChpbnQgb2ZmLCBpbnQgY291bnQsIHNob3J0W10gZCkgewotICAgICAgICBzdXBlci5jb3B5MURSYW5nZUZyb20ob2ZmLCBjb3VudCwgZCk7Ci0gICAgfQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3ViRGF0YTFEKGludCBvZmYsIGludCBjb3VudCwgYnl0ZVtdIGQpIHsKLSAgICAgICAgc3VwZXIuY29weTFEUmFuZ2VGcm9tKG9mZiwgY291bnQsIGQpOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YkRhdGExRChpbnQgb2ZmLCBpbnQgY291bnQsIGZsb2F0W10gZCkgewotICAgICAgICBzdXBlci5jb3B5MURSYW5nZUZyb20ob2ZmLCBjb3VudCwgZCk7Ci0gICAgfQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3ViRGF0YTJEKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHcsIGludCBoLCBpbnRbXSBkKSB7Ci0gICAgICAgIHN1cGVyLmNvcHkyRFJhbmdlRnJvbSh4b2ZmLCB5b2ZmLCB3LCBoLCBkKTsKLSAgICB9Ci0gICAgLyoqCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdWJEYXRhMkQoaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgdywgaW50IGgsIGZsb2F0W10gZCkgewotICAgICAgICBzdXBlci5jb3B5MkRSYW5nZUZyb20oeG9mZiwgeW9mZiwgdywgaCwgZCk7Ci0gICAgfQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVhZERhdGEoaW50W10gZCkgewotICAgICAgICBzdXBlci5jb3B5VG8oZCk7Ci0gICAgfQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVhZERhdGEoZmxvYXRbXSBkKSB7Ci0gICAgICAgIHN1cGVyLmNvcHlUbyhkKTsKLSAgICB9Ci0KLSAgICB2b2lkIGluaXRMT0QoaW50IGxvZCkgewotICAgICAgICBpZiAobG9kIDwgMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBdHRlbXB0aW5nIHRvIHNldCBuZWdhdGl2ZSBsb2QgKCIgKyBsb2QgKyAiKS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCB0eCA9IG1BZGFwdGVkQWxsb2NhdGlvbi5tVHlwZS5nZXRYKCk7Ci0gICAgICAgIGludCB0eSA9IG1BZGFwdGVkQWxsb2NhdGlvbi5tVHlwZS5nZXRZKCk7Ci0gICAgICAgIGludCB0eiA9IG1BZGFwdGVkQWxsb2NhdGlvbi5tVHlwZS5nZXRaKCk7Ci0KLSAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBsb2Q7IGN0KyspIHsKLSAgICAgICAgICAgIGlmICgodHg9PTEpICYmICh0eSA9PSAxKSAmJiAodHogPT0gMSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkF0dGVtcHRpbmcgdG8gc2V0IGxvZCAoIiArIGxvZCArICIpIG91dCBvZiByYW5nZS4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHR4ID4gMSkgdHggPj49IDE7Ci0gICAgICAgICAgICBpZiAodHkgPiAxKSB0eSA+Pj0gMTsKLSAgICAgICAgICAgIGlmICh0eiA+IDEpIHR6ID4+PSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1cnJlbnREaW1YID0gdHg7Ci0gICAgICAgIG1DdXJyZW50RGltWSA9IHR5OwotICAgICAgICBtQ3VycmVudERpbVogPSB0ejsKLSAgICAgICAgbUN1cnJlbnRDb3VudCA9IG1DdXJyZW50RGltWDsKLSAgICAgICAgaWYgKG1DdXJyZW50RGltWSA+IDEpIHsKLSAgICAgICAgICAgIG1DdXJyZW50Q291bnQgKj0gbUN1cnJlbnREaW1ZOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtQ3VycmVudERpbVogPiAxKSB7Ci0gICAgICAgICAgICBtQ3VycmVudENvdW50ICo9IG1DdXJyZW50RGltWjsKLSAgICAgICAgfQotICAgICAgICBtU2VsZWN0ZWRZID0gMDsKLSAgICAgICAgbVNlbGVjdGVkWiA9IDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBhY3RpdmUgTE9ELiAgVGhlIExPRCBtdXN0IGJlIHdpdGhpbiB0aGUgcmFuZ2UgZm9yIHRoZQotICAgICAqIHR5cGUgYmVpbmcgYWRhcHRlZC4gIFRoZSBiYXNlIGFsbG9jYXRpb24gbXVzdCBoYXZlIG1pcG1hcHMuCi0gICAgICoKLSAgICAgKiBCZWNhdXNlIHRoaXMgY2hhbmdlcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgYWRhcHRlciB0aGUKLSAgICAgKiBjdXJyZW50IFkgYW5kIFogd2lsbCBiZSByZXNldC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb2QgVGhlIExPRCB0byBtYWtlIGFjdGl2ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRMT0QoaW50IGxvZCkgewotICAgICAgICBpZiAoIW1BZGFwdGVkQWxsb2NhdGlvbi5nZXRUeXBlKCkuaGFzTWlwbWFwcygpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBzZXQgTE9EIHdoZW4gdGhlIGFsbG9jYXRpb24gdHlwZSBkb2VzIG5vdCBpbmNsdWRlIG1pcG1hcHMuIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtQ29uc3RyYWluZWRMT0QpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IHNldCBMT0Qgd2hlbiB0aGUgYWRhcHRlciBpbmNsdWRlcyBtaXBtYXBzLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5pdExPRChsb2QpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldCB0aGUgYWN0aXZlIEZhY2UuICBUaGUgYmFzZSBhbGxvY2F0aW9uIG11c3QgYmUgb2YgYSB0eXBlCi0gICAgICogdGhhdCBpbmNsdWRlcyBmYWNlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjZiBUaGUgZmFjZSB0byBtYWtlIGFjdGl2ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRGYWNlKFR5cGUuQ3ViZW1hcEZhY2UgY2YpIHsKLSAgICAgICAgaWYgKCFtQWRhcHRlZEFsbG9jYXRpb24uZ2V0VHlwZSgpLmhhc0ZhY2VzKCkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IHNldCBGYWNlIHdoZW4gdGhlIGFsbG9jYXRpb24gdHlwZSBkb2VzIG5vdCBpbmNsdWRlIGZhY2VzLiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbUNvbnN0cmFpbmVkRmFjZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJDYW5ub3Qgc2V0IExPRCB3aGVuIHRoZSBhZGFwdGVyIGluY2x1ZGVzIG1pcG1hcHMuIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNmID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2Fubm90IHNldCBudWxsIGZhY2UuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2VsZWN0ZWRGYWNlID0gY2Y7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBhY3RpdmUgWS4gIFRoZSB5IHZhbHVlIG11c3QgYmUgd2l0aGluIHRoZSByYW5nZSBmb3IKLSAgICAgKiB0aGUgYWxsb2NhdGlvbiBiZWluZyBhZGFwdGVkLiAgVGhlIGJhc2UgYWxsb2NhdGlvbiBtdXN0Ci0gICAgICogY29udGFpbiB0aGUgWSBkaW1lbnNpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0geSBUaGUgeSB0byBtYWtlIGFjdGl2ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRZKGludCB5KSB7Ci0gICAgICAgIGlmIChtQWRhcHRlZEFsbG9jYXRpb24uZ2V0VHlwZSgpLmdldFkoKSA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBzZXQgWSB3aGVuIHRoZSBhbGxvY2F0aW9uIHR5cGUgZG9lcyBub3QgaW5jbHVkZSBZIGRpbS4iKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobUFkYXB0ZWRBbGxvY2F0aW9uLmdldFR5cGUoKS5nZXRZKCkgPD0geSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJDYW5ub3Qgc2V0IFkgZ3JlYXRlciB0aGFuIGRpbWVuc2lvbiBvZiBhbGxvY2F0aW9uLiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbUNvbnN0cmFpbmVkWSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJDYW5ub3Qgc2V0IFkgd2hlbiB0aGUgYWRhcHRlciBpbmNsdWRlcyBZLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNlbGVjdGVkWSA9IHk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBhY3RpdmUgWi4gIFRoZSB6IHZhbHVlIG11c3QgYmUgd2l0aGluIHRoZSByYW5nZSBmb3IKLSAgICAgKiB0aGUgYWxsb2NhdGlvbiBiZWluZyBhZGFwdGVkLiAgVGhlIGJhc2UgYWxsb2NhdGlvbiBtdXN0Ci0gICAgICogY29udGFpbiB0aGUgWiBkaW1lbnNpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0geiBUaGUgeiB0byBtYWtlIGFjdGl2ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRaKGludCB6KSB7Ci0gICAgICAgIGlmIChtQWRhcHRlZEFsbG9jYXRpb24uZ2V0VHlwZSgpLmdldFooKSA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBzZXQgWiB3aGVuIHRoZSBhbGxvY2F0aW9uIHR5cGUgZG9lcyBub3QgaW5jbHVkZSBaIGRpbS4iKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobUFkYXB0ZWRBbGxvY2F0aW9uLmdldFR5cGUoKS5nZXRaKCkgPD0geikgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJDYW5ub3Qgc2V0IFogZ3JlYXRlciB0aGFuIGRpbWVuc2lvbiBvZiBhbGxvY2F0aW9uLiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbUNvbnN0cmFpbmVkWikgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJDYW5ub3Qgc2V0IFogd2hlbiB0aGUgYWRhcHRlciBpbmNsdWRlcyBaLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNlbGVjdGVkWiA9IHo7Ci0gICAgfQotCi0gICAgc3RhdGljIHB1YmxpYyBBbGxvY2F0aW9uQWRhcHRlciBjcmVhdGUxRChSZW5kZXJTY3JpcHQgcnMsIEFsbG9jYXRpb24gYSkgewotICAgICAgICBycy52YWxpZGF0ZSgpOwotICAgICAgICBBbGxvY2F0aW9uQWRhcHRlciBhYSA9IG5ldyBBbGxvY2F0aW9uQWRhcHRlcigwLCBycywgYSk7Ci0gICAgICAgIGFhLm1Db25zdHJhaW5lZExPRCA9IHRydWU7Ci0gICAgICAgIGFhLm1Db25zdHJhaW5lZEZhY2UgPSB0cnVlOwotICAgICAgICBhYS5tQ29uc3RyYWluZWRZID0gdHJ1ZTsKLSAgICAgICAgYWEubUNvbnN0cmFpbmVkWiA9IHRydWU7Ci0gICAgICAgIGFhLmluaXRMT0QoMCk7Ci0gICAgICAgIHJldHVybiBhYTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHVibGljIEFsbG9jYXRpb25BZGFwdGVyIGNyZWF0ZTJEKFJlbmRlclNjcmlwdCBycywgQWxsb2NhdGlvbiBhKSB7Ci0gICAgICAgIGFuZHJvaWQudXRpbC5Mb2cuZSgicnMiLCAiY3JlYXRlMmQgIiArIGEpOwotICAgICAgICBycy52YWxpZGF0ZSgpOwotICAgICAgICBBbGxvY2F0aW9uQWRhcHRlciBhYSA9IG5ldyBBbGxvY2F0aW9uQWRhcHRlcigwLCBycywgYSk7Ci0gICAgICAgIGFhLm1Db25zdHJhaW5lZExPRCA9IHRydWU7Ci0gICAgICAgIGFhLm1Db25zdHJhaW5lZEZhY2UgPSB0cnVlOwotICAgICAgICBhYS5tQ29uc3RyYWluZWRZID0gZmFsc2U7Ci0gICAgICAgIGFhLm1Db25zdHJhaW5lZFogPSB0cnVlOwotICAgICAgICBhYS5pbml0TE9EKDApOwotICAgICAgICByZXR1cm4gYWE7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBPdmVycmlkZSB0aGUgQWxsb2NhdGlvbiByZXNpemUuICBSZXNpemluZyBhZGFwdGVycyBpcyBub3QKLSAgICAgKiBhbGxvd2VkIGFuZCB3aWxsIHRocm93IGEgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZGltWCBpZ25vcmVkLgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNpemUoaW50IGRpbVgpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJSZXNpemUgbm90IGFsbG93ZWQgZm9yIEFkYXB0ZXJzLiIpOwotICAgIH0KLQotfQotCi0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQmFzZU9iai5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxN2Q3OWEuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEJhc2VPYmogaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBSZW5kZXJTY3JpcHQgb2JqZWN0cyBvd25lZCBieSBhIFJTIGNvbnRleHQuCi0gKiBJdCBpcyByZXNwb25zaWJsZSBmb3IgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgdHJhY2tpbmcuIFRoaXMgY2xhc3MKLSAqIHNob3VsZCBub3QgYmUgdXNlZCBieSBhIHVzZXIgYXBwbGljYXRpb24uCi0gKgotICoqLwotcHVibGljIGNsYXNzIEJhc2VPYmogewotICAgIEJhc2VPYmooaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgcnMudmFsaWRhdGUoKTsKLSAgICAgICAgbVJTID0gcnM7Ci0gICAgICAgIG1JRCA9IGlkOwotICAgICAgICBtRGVzdHJveWVkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRJRChpbnQgaWQpIHsKLSAgICAgICAgaWYgKG1JRCAhPSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvciwgcmVzZXQgb2Ygb2JqZWN0IElELiIpOwotICAgICAgICB9Ci0gICAgICAgIG1JRCA9IGlkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIExvb2t1cCB0aGUgbmF0aXZlIG9iamVjdCBJRCBmb3IgdGhpcyBvYmplY3QuICBQcmltYXJpbHkgdXNlZCBieSB0aGUKLSAgICAgKiBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB2ZXJpZnkgYWdhaW5zdCBpbnRlcm5hbCBjb250ZXh0IGZvcgotICAgICAqICAgICAgICAgICBtYXRjaC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gaW50Ci0gICAgICovCi0gICAgaW50IGdldElEKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKG1EZXN0cm95ZWQpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigidXNpbmcgYSBkZXN0cm95ZWQgb2JqZWN0LiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtSUQgPT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IE9iamVjdCBpZCAwLiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgocnMgIT0gbnVsbCkgJiYgKHJzICE9IG1SUykpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigidXNpbmcgb2JqZWN0IHdpdGggbWlzbWF0Y2hlZCBjb250ZXh0LiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtSUQ7Ci0gICAgfQotCi0gICAgdm9pZCBjaGVja1ZhbGlkKCkgewotICAgICAgICBpZiAobUlEID09IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBvYmplY3QuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBtSUQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1EZXN0cm95ZWQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbU5hbWU7Ci0gICAgUmVuZGVyU2NyaXB0IG1SUzsKLQotICAgIC8qKgotICAgICAqIHNldE5hbWUgYXNzaWducyBhIG5hbWUgdG8gYW4gb2JqZWN0LiAgVGhpcyBvYmplY3QgY2FuIGxhdGVyIGJlIGxvb2tlZCB1cAotICAgICAqIGJ5IHRoaXMgbmFtZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRvIGFzc2lnbiB0byB0aGUgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJzZXROYW1lIHJlcXVpcmVzIGEgc3RyaW5nIG9mIG5vbi16ZXJvIGxlbmd0aC4iKTsKLSAgICAgICAgfQotICAgICAgICBpZihuYW1lLmxlbmd0aCgpIDwgMSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJzZXROYW1lIGRvZXMgbm90IGFjY2VwdCBhIHplcm8gbGVuZ3RoIHN0cmluZy4iKTsKLSAgICAgICAgfQotICAgICAgICBpZihtTmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgInNldE5hbWUgb2JqZWN0IGFscmVhZHkgaGFzIGEgbmFtZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBieXRlW10gYnl0ZXMgPSBuYW1lLmdldEJ5dGVzKCJVVEYtOCIpOwotICAgICAgICAgICAgbVJTLm5Bc3NpZ25OYW1lKG1JRCwgYnl0ZXMpOwotICAgICAgICAgICAgbU5hbWUgPSBuYW1lOwotICAgICAgICB9IGNhdGNoIChqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIG5hbWUgb2YgdGhlIHJlbmRlcnNjcmlwdCBvYmplY3QKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBtTmFtZTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgewotICAgICAgICBpZiAoIW1EZXN0cm95ZWQpIHsKLSAgICAgICAgICAgIGlmKG1JRCAhPSAwICYmIG1SUy5pc0FsaXZlKCkpIHsKLSAgICAgICAgICAgICAgICBtUlMubk9iakRlc3Ryb3kobUlEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1SUyA9IG51bGw7Ci0gICAgICAgICAgICBtSUQgPSAwOwotICAgICAgICAgICAgbURlc3Ryb3llZCA9IHRydWU7Ci0gICAgICAgICAgICAvL0xvZy52KFJlbmRlclNjcmlwdC5MT0dfVEFHLCBnZXRDbGFzcygpICsKLSAgICAgICAgICAgIC8vICIgYXV0byBmaW5hbGl6aW5nIG9iamVjdCB3aXRob3V0IGhhdmluZyByZWxlYXNlZCB0aGUgUlMgcmVmZXJlbmNlLiIpOwotICAgICAgICB9Ci0gICAgICAgIHN1cGVyLmZpbmFsaXplKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRnJlZXMgYW55IG5hdGl2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0LiAgVGhlCi0gICAgICogcHJpbWFyeSB1c2UgaXMgdG8gZm9yY2UgaW1tZWRpYXRlIGNsZWFudXAgb2YgcmVzb3VyY2VzIHdoZW4gaXQgaXMKLSAgICAgKiBiZWxpZXZlZCB0aGUgR0Mgd2lsbCBub3QgcmVzcG9uZCBxdWlja2x5IGVub3VnaC4KLSAgICAgKi8KLSAgICBzeW5jaHJvbml6ZWQgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICAgICAgaWYobURlc3Ryb3llZCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJPYmplY3QgYWxyZWFkeSBkZXN0cm95ZWQuIik7Ci0gICAgICAgIH0KLSAgICAgICAgbURlc3Ryb3llZCA9IHRydWU7Ci0gICAgICAgIG1SUy5uT2JqRGVzdHJveShtSUQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIElmIGFuIG9iamVjdCBjYW1lIGZyb20gYW4gYTNkIGZpbGUsIGphdmEgZmllbGRzIG5lZWQgdG8gYmUKLSAgICAgKiBjcmVhdGVkIHdpdGggb2JqZWN0cyBmcm9tIHRoZSBuYXRpdmUgbGF5ZXIKLSAgICAgKi8KLSAgICB2b2lkIHVwZGF0ZUZyb21OYXRpdmUoKSB7Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICBtTmFtZSA9IG1SUy5uR2V0TmFtZShnZXRJRChtUlMpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxjdWxhdGVzIHRoZSBoYXNoIGNvZGUgdmFsdWUgZm9yIGEgQmFzZU9iai4KLSAgICAgKgotICAgICAqIEByZXR1cm4gaW50Ci0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAgICAgcmV0dXJuIG1JRDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb21wYXJlIHRoZSBjdXJyZW50IEJhc2VPYmogd2l0aCBhbm90aGVyIEJhc2VPYmogZm9yIGVxdWFsaXR5LgotICAgICAqCi0gICAgICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIGNoZWNrIGVxdWFsaXR5IHdpdGguCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotICAgICAgICAvLyBFYXJseS1vdXQgY2hlY2sgdG8gc2VlIGlmIGJvdGggQmFzZU9ianMgYXJlIGFjdHVhbGx5IHRoZSBzYW1lCi0gICAgICAgIGlmICh0aGlzID09IG9iaikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmIChnZXRDbGFzcygpICE9IG9iai5nZXRDbGFzcygpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBCYXNlT2JqIGIgPSAoQmFzZU9iaikgb2JqOwotICAgICAgICByZXR1cm4gbUlEID09IGIubUlEOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlMi5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzk2ZGUzLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQotLyoqCi0gKiBDbGFzcyBmb3IgZXhwb3NpbmcgdGhlIG5hdGl2ZSBSZW5kZXJTY3JpcHQgYnl0ZTIgdHlwZSBiYWNrIHRvIHRoZSBBbmRyb2lkIHN5c3RlbS4KLSAqCi0gKiovCi1wdWJsaWMgY2xhc3MgQnl0ZTIgewotICAgIHB1YmxpYyBieXRlIHg7Ci0gICAgcHVibGljIGJ5dGUgeTsKLQotICAgIHB1YmxpYyBCeXRlMigpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQnl0ZTIoYnl0ZSBpbml0WCwgYnl0ZSBpbml0WSkgewotICAgICAgICB4ID0gaW5pdFg7Ci0gICAgICAgIHkgPSBpbml0WTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgQnl0ZTIoQnl0ZTIgc291cmNlKSB7Ci0gICAgICAgIHRoaXMueCA9IHNvdXJjZS54OwotICAgICAgICB0aGlzLnkgPSBzb3VyY2UueTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgYWRkCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZChCeXRlMiBhKSB7Ci0gICAgICAgIHRoaXMueCArPSBhLng7Ci0gICAgICAgIHRoaXMueSArPSBhLnk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGFkZAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJ5dGUyIGFkZChCeXRlMiBhLCBCeXRlMiBiKSB7Ci0gICAgICAgIEJ5dGUyIHJlc3VsdCA9IG5ldyBCeXRlMigpOwotICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggKyBiLngpOwotICAgICAgICByZXN1bHQueSA9IChieXRlKShhLnkgKyBiLnkpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGFkZAotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkKGJ5dGUgdmFsdWUpIHsKLSAgICAgICAgeCArPSB2YWx1ZTsKLSAgICAgICAgeSArPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgYWRkCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTIgYWRkKEJ5dGUyIGEsIGJ5dGUgYikgewotICAgICAgICBCeXRlMiByZXN1bHQgPSBuZXcgQnl0ZTIoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54ICsgYik7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSArIGIpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YihCeXRlMiBhKSB7Ci0gICAgICAgIHRoaXMueCAtPSBhLng7Ci0gICAgICAgIHRoaXMueSAtPSBhLnk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTIgc3ViKEJ5dGUyIGEsIEJ5dGUyIGIpIHsKLSAgICAgICAgQnl0ZTIgcmVzdWx0ID0gbmV3IEJ5dGUyKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCAtIGIueCk7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAtIGIueSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YihieXRlIHZhbHVlKSB7Ci0gICAgICAgIHggLT0gdmFsdWU7Ci0gICAgICAgIHkgLT0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTIgc3ViKEJ5dGUyIGEsIGJ5dGUgYikgewotICAgICAgICBCeXRlMiByZXN1bHQgPSBuZXcgQnl0ZTIoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54IC0gYik7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAtIGIpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG11bChCeXRlMiBhKSB7Ci0gICAgICAgIHRoaXMueCAqPSBhLng7Ci0gICAgICAgIHRoaXMueSAqPSBhLnk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTIgbXVsKEJ5dGUyIGEsIEJ5dGUyIGIpIHsKLSAgICAgICAgQnl0ZTIgcmVzdWx0ID0gbmV3IEJ5dGUyKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCAqIGIueCk7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAqIGIueSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG11bChieXRlIHZhbHVlKSB7Ci0gICAgICAgIHggKj0gdmFsdWU7Ci0gICAgICAgIHkgKj0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTIgbXVsKEJ5dGUyIGEsIGJ5dGUgYikgewotICAgICAgICBCeXRlMiByZXN1bHQgPSBuZXcgQnl0ZTIoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54ICogYik7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAqIGIpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRpdmlzaW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRpdihCeXRlMiBhKSB7Ci0gICAgICAgIHRoaXMueCAvPSBhLng7Ci0gICAgICAgIHRoaXMueSAvPSBhLnk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRpdmlzaW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTIgZGl2KEJ5dGUyIGEsIEJ5dGUyIGIpIHsKLSAgICAgICAgQnl0ZTIgcmVzdWx0ID0gbmV3IEJ5dGUyKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCAvIGIueCk7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAvIGIueSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRpdihieXRlIHZhbHVlKSB7Ci0gICAgICAgIHggLz0gdmFsdWU7Ci0gICAgICAgIHkgLz0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRpdmlzaW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTIgZGl2KEJ5dGUyIGEsIGJ5dGUgYikgewotICAgICAgICBCeXRlMiByZXN1bHQgPSBuZXcgQnl0ZTIoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54IC8gYik7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAvIGIpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogZ2V0IHZlY3RvciBsZW5ndGgKLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgYnl0ZSBsZW5ndGgoKSB7Ci0gICAgICAgIHJldHVybiAyOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB2ZWN0b3IgbmVnYXRlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgbmVnYXRlKCkgewotICAgICAgICB0aGlzLnggPSAoYnl0ZSkoLXgpOwotICAgICAgICB0aGlzLnkgPSAoYnl0ZSkoLXkpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIGJ5dGUgZG90UHJvZHVjdChCeXRlMiBhKSB7Ci0gICAgICAgIHJldHVybiAoYnl0ZSkoKHggKiBhLngpICsgKHkgKiBhLnkpKTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZG90IFByb2R1Y3QKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBieXRlIGRvdFByb2R1Y3QoQnl0ZTIgYSwgQnl0ZTIgYikgewotICAgICAgICByZXR1cm4gKGJ5dGUpKChiLnggKiBhLngpICsgKGIueSAqIGEueSkpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQgTXVsdGlwbGUKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGZhY3RvcgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZE11bHRpcGxlKEJ5dGUyIGEsIGJ5dGUgZmFjdG9yKSB7Ci0gICAgICAgIHggKz0gYS54ICogZmFjdG9yOwotICAgICAgICB5ICs9IGEueSAqIGZhY3RvcjsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBzZXQgdmVjdG9yIHZhbHVlIGJ5IEJ5dGUyCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldChCeXRlMiBhKSB7Ci0gICAgICAgIHRoaXMueCA9IGEueDsKLSAgICAgICAgdGhpcy55ID0gYS55OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IENoYXIKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRWYWx1ZXMoYnl0ZSBhLCBieXRlIGIpIHsKLSAgICAgICAgdGhpcy54ID0gYTsKLSAgICAgICAgdGhpcy55ID0gYjsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiByZXR1cm4gdGhlIGVsZW1lbnQgc3VtIG9mIHZlY3RvcgotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBieXRlIGVsZW1lbnRTdW0oKSB7Ci0gICAgICAgIHJldHVybiAoYnl0ZSkoeCArIHkpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIGdldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgYnl0ZSBnZXQoaW50IGkpIHsKLSAgICAgICAgc3dpdGNoIChpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICByZXR1cm4geTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogc2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKLSAgICAgKgotICAgICAqIEBwYXJhbSBpCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0QXQoaW50IGksIGJ5dGUgdmFsdWUpIHsKLSAgICAgICAgc3dpdGNoIChpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHggPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgeSA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBhZGQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBpbmRleAotICAgICAqCi0gICAgICogQHBhcmFtIGkKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRBdChpbnQgaSwgYnl0ZSB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeCArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgeSArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogY29weSB0aGUgdmVjdG9yIHRvIENoYXIgYXJyYXkKLSAgICAgKgotICAgICAqIEBwYXJhbSBkYXRhCi0gICAgICogQHBhcmFtIG9mZnNldAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHlUbyhieXRlW10gZGF0YSwgaW50IG9mZnNldCkgewotICAgICAgICBkYXRhW29mZnNldF0gPSB4OwotICAgICAgICBkYXRhW29mZnNldCArIDFdID0geTsKLSAgICB9Ci0KLX0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlMy5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmE5NWFjLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQotLyoqCi0gKiBDbGFzcyBmb3IgZXhwb3NpbmcgdGhlIG5hdGl2ZSBSZW5kZXJTY3JpcHQgYnl0ZTMgdHlwZSBiYWNrIHRvIHRoZSBBbmRyb2lkIHN5c3RlbS4KLSAqCi0gKiovCi1wdWJsaWMgY2xhc3MgQnl0ZTMgewotICAgIHB1YmxpYyBieXRlIHg7Ci0gICAgcHVibGljIGJ5dGUgeTsKLSAgICBwdWJsaWMgYnl0ZSB6OwotCi0gICAgcHVibGljIEJ5dGUzKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBCeXRlMyhieXRlIGluaXRYLCBieXRlIGluaXRZLCBieXRlIGluaXRaKSB7Ci0gICAgICAgIHggPSBpbml0WDsKLSAgICAgICAgeSA9IGluaXRZOwotICAgICAgICB6ID0gaW5pdFo7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIEJ5dGUzKEJ5dGUzIHNvdXJjZSkgewotICAgICAgICB0aGlzLnggPSBzb3VyY2UueDsKLSAgICAgICAgdGhpcy55ID0gc291cmNlLnk7Ci0gICAgICAgIHRoaXMueiA9IHNvdXJjZS56OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkKEJ5dGUzIGEpIHsKLSAgICAgICAgdGhpcy54ICs9IGEueDsKLSAgICAgICAgdGhpcy55ICs9IGEueTsKLSAgICAgICAgdGhpcy56ICs9IGEuejsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgYWRkCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTMgYWRkKEJ5dGUzIGEsIEJ5dGUzIGIpIHsKLSAgICAgICAgQnl0ZTMgcmVzdWx0ID0gbmV3IEJ5dGUzKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCArIGIueCk7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSArIGIueSk7Ci0gICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiArIGIueik7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgYWRkCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGQoYnl0ZSB2YWx1ZSkgewotICAgICAgICB4ICs9IHZhbHVlOwotICAgICAgICB5ICs9IHZhbHVlOwotICAgICAgICB6ICs9IHZhbHVlOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCeXRlMyBhZGQoQnl0ZTMgYSwgYnl0ZSBiKSB7Ci0gICAgICAgIEJ5dGUzIHJlc3VsdCA9IG5ldyBCeXRlMygpOwotICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggKyBiKTsKLSAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55ICsgYik7Ci0gICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiArIGIpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YihCeXRlMyBhKSB7Ci0gICAgICAgIHRoaXMueCAtPSBhLng7Ci0gICAgICAgIHRoaXMueSAtPSBhLnk7Ci0gICAgICAgIHRoaXMueiAtPSBhLno7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTMgc3ViKEJ5dGUzIGEsIEJ5dGUzIGIpIHsKLSAgICAgICAgQnl0ZTMgcmVzdWx0ID0gbmV3IEJ5dGUzKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCAtIGIueCk7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAtIGIueSk7Ci0gICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiAtIGIueik7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YihieXRlIHZhbHVlKSB7Ci0gICAgICAgIHggLT0gdmFsdWU7Ci0gICAgICAgIHkgLT0gdmFsdWU7Ci0gICAgICAgIHogLT0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTMgc3ViKEJ5dGUzIGEsIGJ5dGUgYikgewotICAgICAgICBCeXRlMyByZXN1bHQgPSBuZXcgQnl0ZTMoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54IC0gYik7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAtIGIpOwotICAgICAgICByZXN1bHQueiA9IChieXRlKShhLnogLSBiKTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtdWwoQnl0ZTMgYSkgewotICAgICAgICB0aGlzLnggKj0gYS54OwotICAgICAgICB0aGlzLnkgKj0gYS55OwotICAgICAgICB0aGlzLnogKj0gYS56OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJ5dGUzIG11bChCeXRlMyBhLCBCeXRlMyBiKSB7Ci0gICAgICAgIEJ5dGUzIHJlc3VsdCA9IG5ldyBCeXRlMygpOwotICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggKiBiLngpOwotICAgICAgICByZXN1bHQueSA9IChieXRlKShhLnkgKiBiLnkpOwotICAgICAgICByZXN1bHQueiA9IChieXRlKShhLnogKiBiLnopOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtdWwoYnl0ZSB2YWx1ZSkgewotICAgICAgICB4ICo9IHZhbHVlOwotICAgICAgICB5ICo9IHZhbHVlOwotICAgICAgICB6ICo9IHZhbHVlOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJ5dGUzIG11bChCeXRlMyBhLCBieXRlIGIpIHsKLSAgICAgICAgQnl0ZTMgcmVzdWx0ID0gbmV3IEJ5dGUzKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCAqIGIpOwotICAgICAgICByZXN1bHQueSA9IChieXRlKShhLnkgKiBiKTsKLSAgICAgICAgcmVzdWx0LnogPSAoYnl0ZSkoYS56ICogYik7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGl2KEJ5dGUzIGEpIHsKLSAgICAgICAgdGhpcy54IC89IGEueDsKLSAgICAgICAgdGhpcy55IC89IGEueTsKLSAgICAgICAgdGhpcy56IC89IGEuejsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCeXRlMyBkaXYoQnl0ZTMgYSwgQnl0ZTMgYikgewotICAgICAgICBCeXRlMyByZXN1bHQgPSBuZXcgQnl0ZTMoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54IC8gYi54KTsKLSAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55IC8gYi55KTsKLSAgICAgICAgcmVzdWx0LnogPSAoYnl0ZSkoYS56IC8gYi56KTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkaXZpc2lvbgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGl2KGJ5dGUgdmFsdWUpIHsKLSAgICAgICAgeCAvPSB2YWx1ZTsKLSAgICAgICAgeSAvPSB2YWx1ZTsKLSAgICAgICAgeiAvPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCeXRlMyBkaXYoQnl0ZTMgYSwgYnl0ZSBiKSB7Ci0gICAgICAgIEJ5dGUzIHJlc3VsdCA9IG5ldyBCeXRlMygpOwotICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggLyBiKTsKLSAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55IC8gYik7Ci0gICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiAvIGIpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogZ2V0IHZlY3RvciBsZW5ndGgKLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgYnl0ZSBsZW5ndGgoKSB7Ci0gICAgICAgIHJldHVybiAzOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB2ZWN0b3IgbmVnYXRlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgbmVnYXRlKCkgewotICAgICAgICB0aGlzLnggPSAoYnl0ZSkoLXgpOwotICAgICAgICB0aGlzLnkgPSAoYnl0ZSkoLXkpOwotICAgICAgICB0aGlzLnogPSAoYnl0ZSkoLXopOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIGJ5dGUgZG90UHJvZHVjdChCeXRlMyBhKSB7Ci0gICAgICAgIHJldHVybiAoYnl0ZSkoKGJ5dGUpKChieXRlKSh4ICogYS54KSArIChieXRlKSh5ICogYS55KSkgKyAoYnl0ZSkoeiAqIGEueikpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJ5dGUgZG90UHJvZHVjdChCeXRlMyBhLCBCeXRlMyBiKSB7Ci0gICAgICAgIHJldHVybiAoYnl0ZSkoKGJ5dGUpKChieXRlKShiLnggKiBhLngpICsgKGJ5dGUpKGIueSAqIGEueSkpICsgKGJ5dGUpKGIueiAqIGEueikpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQgTXVsdGlwbGUKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGZhY3RvcgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZE11bHRpcGxlKEJ5dGUzIGEsIGJ5dGUgZmFjdG9yKSB7Ci0gICAgICAgIHggKz0gYS54ICogZmFjdG9yOwotICAgICAgICB5ICs9IGEueSAqIGZhY3RvcjsKLSAgICAgICAgeiArPSBhLnogKiBmYWN0b3I7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogc2V0IHZlY3RvciB2YWx1ZSBieSBCeXRlMwotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXQoQnl0ZTMgYSkgewotICAgICAgICB0aGlzLnggPSBhLng7Ci0gICAgICAgIHRoaXMueSA9IGEueTsKLSAgICAgICAgdGhpcy56ID0gYS56OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IENoYXIKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcGFyYW0gYwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlcyhieXRlIGEsIGJ5dGUgYiwgYnl0ZSBjKSB7Ci0gICAgICAgIHRoaXMueCA9IGE7Ci0gICAgICAgIHRoaXMueSA9IGI7Ci0gICAgICAgIHRoaXMueiA9IGM7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogcmV0dXJuIHRoZSBlbGVtZW50IHN1bSBvZiB2ZWN0b3IKLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgYnl0ZSBlbGVtZW50U3VtKCkgewotICAgICAgICByZXR1cm4gKGJ5dGUpKHggKyB5ICsgeik7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogZ2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKLSAgICAgKgotICAgICAqIEBwYXJhbSBpCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBieXRlIGdldChpbnQgaSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybiB5OwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICByZXR1cm4gejsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogc2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKLSAgICAgKgotICAgICAqIEBwYXJhbSBpCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0QXQoaW50IGksIGJ5dGUgdmFsdWUpIHsKLSAgICAgICAgc3dpdGNoIChpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHggPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgeSA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICB6ID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIGFkZCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZEF0KGludCBpLCBieXRlIHZhbHVlKSB7Ci0gICAgICAgIHN3aXRjaCAoaSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICB4ICs9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICB5ICs9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICB6ICs9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBjb3B5IHRoZSB2ZWN0b3IgdG8gQ2hhciBhcnJheQotICAgICAqCi0gICAgICogQHBhcmFtIGRhdGEKLSAgICAgKiBAcGFyYW0gb2Zmc2V0Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weVRvKGJ5dGVbXSBkYXRhLCBpbnQgb2Zmc2V0KSB7Ci0gICAgICAgIGRhdGFbb2Zmc2V0XSA9IHg7Ci0gICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSB5OwotICAgICAgICBkYXRhW29mZnNldCArIDJdID0gejsKLSAgICB9Ci19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTQuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhhOGE2Yi4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGU0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0KLS8qKgotICogQ2xhc3MgZm9yIGV4cG9zaW5nIHRoZSBuYXRpdmUgUmVuZGVyU2NyaXB0IGJ5dGU0IHR5cGUgYmFjayB0byB0aGUgQW5kcm9pZCBzeXN0ZW0uCi0gKgotICoqLwotcHVibGljIGNsYXNzIEJ5dGU0IHsKLSAgICBwdWJsaWMgYnl0ZSB4OwotICAgIHB1YmxpYyBieXRlIHk7Ci0gICAgcHVibGljIGJ5dGUgejsKLSAgICBwdWJsaWMgYnl0ZSB3OwotCi0gICAgcHVibGljIEJ5dGU0KCkgewotICAgIH0KLQotICAgIHB1YmxpYyBCeXRlNChieXRlIGluaXRYLCBieXRlIGluaXRZLCBieXRlIGluaXRaLCBieXRlIGluaXRXKSB7Ci0gICAgICAgIHggPSBpbml0WDsKLSAgICAgICAgeSA9IGluaXRZOwotICAgICAgICB6ID0gaW5pdFo7Ci0gICAgICAgIHcgPSBpbml0VzsKLSAgICB9Ci0gICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIEJ5dGU0KEJ5dGU0IHNvdXJjZSkgewotICAgICAgICB0aGlzLnggPSBzb3VyY2UueDsKLSAgICAgICAgdGhpcy55ID0gc291cmNlLnk7Ci0gICAgICAgIHRoaXMueiA9IHNvdXJjZS56OwotICAgICAgICB0aGlzLncgPSBzb3VyY2UudzsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgYWRkCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZChCeXRlNCBhKSB7Ci0gICAgICAgIHRoaXMueCArPSBhLng7Ci0gICAgICAgIHRoaXMueSArPSBhLnk7Ci0gICAgICAgIHRoaXMueiArPSBhLno7Ci0gICAgICAgIHRoaXMudyArPSBhLnc7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGFkZAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJ5dGU0IGFkZChCeXRlNCBhLCBCeXRlNCBiKSB7Ci0gICAgICAgIEJ5dGU0IHJlc3VsdCA9IG5ldyBCeXRlNCgpOwotICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggKyBiLngpOwotICAgICAgICByZXN1bHQueSA9IChieXRlKShhLnkgKyBiLnkpOwotICAgICAgICByZXN1bHQueiA9IChieXRlKShhLnogKyBiLnopOwotICAgICAgICByZXN1bHQudyA9IChieXRlKShhLncgKyBiLncpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGFkZAotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkKGJ5dGUgdmFsdWUpIHsKLSAgICAgICAgeCArPSB2YWx1ZTsKLSAgICAgICAgeSArPSB2YWx1ZTsKLSAgICAgICAgeiArPSB2YWx1ZTsKLSAgICAgICAgdyArPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgYWRkCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTQgYWRkKEJ5dGU0IGEsIGJ5dGUgYikgewotICAgICAgICBCeXRlNCByZXN1bHQgPSBuZXcgQnl0ZTQoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54ICsgYik7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSArIGIpOwotICAgICAgICByZXN1bHQueiA9IChieXRlKShhLnogKyBiKTsKLSAgICAgICAgcmVzdWx0LncgPSAoYnl0ZSkoYS53ICsgYik7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3ViKEJ5dGU0IGEpIHsKLSAgICAgICAgdGhpcy54IC09IGEueDsKLSAgICAgICAgdGhpcy55IC09IGEueTsKLSAgICAgICAgdGhpcy56IC09IGEuejsKLSAgICAgICAgdGhpcy53IC09IGEudzsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCeXRlNCBzdWIoQnl0ZTQgYSwgQnl0ZTQgYikgewotICAgICAgICBCeXRlNCByZXN1bHQgPSBuZXcgQnl0ZTQoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54IC0gYi54KTsKLSAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55IC0gYi55KTsKLSAgICAgICAgcmVzdWx0LnogPSAoYnl0ZSkoYS56IC0gYi56KTsKLSAgICAgICAgcmVzdWx0LncgPSAoYnl0ZSkoYS53IC0gYi53KTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3ViKGJ5dGUgdmFsdWUpIHsKLSAgICAgICAgeCAtPSB2YWx1ZTsKLSAgICAgICAgeSAtPSB2YWx1ZTsKLSAgICAgICAgeiAtPSB2YWx1ZTsKLSAgICAgICAgdyAtPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCeXRlNCBzdWIoQnl0ZTQgYSwgYnl0ZSBiKSB7Ci0gICAgICAgIEJ5dGU0IHJlc3VsdCA9IG5ldyBCeXRlNCgpOwotICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggLSBiKTsKLSAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55IC0gYik7Ci0gICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiAtIGIpOwotICAgICAgICByZXN1bHQudyA9IChieXRlKShhLncgLSBiKTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtdWwoQnl0ZTQgYSkgewotICAgICAgICB0aGlzLnggKj0gYS54OwotICAgICAgICB0aGlzLnkgKj0gYS55OwotICAgICAgICB0aGlzLnogKj0gYS56OwotICAgICAgICB0aGlzLncgKj0gYS53OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJ5dGU0IG11bChCeXRlNCBhLCBCeXRlNCBiKSB7Ci0gICAgICAgIEJ5dGU0IHJlc3VsdCA9IG5ldyBCeXRlNCgpOwotICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggKiBiLngpOwotICAgICAgICByZXN1bHQueSA9IChieXRlKShhLnkgKiBiLnkpOwotICAgICAgICByZXN1bHQueiA9IChieXRlKShhLnogKiBiLnopOwotICAgICAgICByZXN1bHQudyA9IChieXRlKShhLncgKiBiLncpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtdWwoYnl0ZSB2YWx1ZSkgewotICAgICAgICB4ICo9IHZhbHVlOwotICAgICAgICB5ICo9IHZhbHVlOwotICAgICAgICB6ICo9IHZhbHVlOwotICAgICAgICB3ICo9IHZhbHVlOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJ5dGU0IG11bChCeXRlNCBhLCBieXRlIGIpIHsKLSAgICAgICAgQnl0ZTQgcmVzdWx0ID0gbmV3IEJ5dGU0KCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCAqIGIpOwotICAgICAgICByZXN1bHQueSA9IChieXRlKShhLnkgKiBiKTsKLSAgICAgICAgcmVzdWx0LnogPSAoYnl0ZSkoYS56ICogYik7Ci0gICAgICAgIHJlc3VsdC53ID0gKGJ5dGUpKGEudyAqIGIpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRpdmlzaW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRpdihCeXRlNCBhKSB7Ci0gICAgICAgIHRoaXMueCAvPSBhLng7Ci0gICAgICAgIHRoaXMueSAvPSBhLnk7Ci0gICAgICAgIHRoaXMueiAvPSBhLno7Ci0gICAgICAgIHRoaXMudyAvPSBhLnc7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRpdmlzaW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTQgZGl2KEJ5dGU0IGEsIEJ5dGU0IGIpIHsKLSAgICAgICAgQnl0ZTQgcmVzdWx0ID0gbmV3IEJ5dGU0KCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCAvIGIueCk7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAvIGIueSk7Ci0gICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiAvIGIueik7Ci0gICAgICAgIHJlc3VsdC53ID0gKGJ5dGUpKGEudyAvIGIudyk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRpdihieXRlIHZhbHVlKSB7Ci0gICAgICAgIHggLz0gdmFsdWU7Ci0gICAgICAgIHkgLz0gdmFsdWU7Ci0gICAgICAgIHogLz0gdmFsdWU7Ci0gICAgICAgIHcgLz0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRpdmlzaW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTQgZGl2KEJ5dGU0IGEsIGJ5dGUgYikgewotICAgICAgICBCeXRlNCByZXN1bHQgPSBuZXcgQnl0ZTQoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54IC8gYik7Ci0gICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAvIGIpOwotICAgICAgICByZXN1bHQueiA9IChieXRlKShhLnogLyBiKTsKLSAgICAgICAgcmVzdWx0LncgPSAoYnl0ZSkoYS53IC8gYik7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBnZXQgdmVjdG9yIGxlbmd0aAotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBieXRlIGxlbmd0aCgpIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogc2V0IHZlY3RvciBuZWdhdGUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBuZWdhdGUoKSB7Ci0gICAgICAgIHRoaXMueCA9IChieXRlKSgteCk7Ci0gICAgICAgIHRoaXMueSA9IChieXRlKSgteSk7Ci0gICAgICAgIHRoaXMueiA9IChieXRlKSgteik7Ci0gICAgICAgIHRoaXMudyA9IChieXRlKSgtdyk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRvdCBQcm9kdWN0Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgYnl0ZSBkb3RQcm9kdWN0KEJ5dGU0IGEpIHsKLSAgICAgICAgcmV0dXJuIChieXRlKSgoeCAqIGEueCkgKyAoeSAqIGEueSkgKyAoeiAqIGEueikgKyAodyAqIGEudykpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJ5dGUgZG90UHJvZHVjdChCeXRlNCBhLCBCeXRlNCBiKSB7Ci0gICAgICAgIHJldHVybiAoYnl0ZSkoKGIueCAqIGEueCkgKyAoYi55ICogYS55KSArIChiLnogKiBhLnopICsgKGIudyAqIGEudykpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQgTXVsdGlwbGUKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGZhY3RvcgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZE11bHRpcGxlKEJ5dGU0IGEsIGJ5dGUgZmFjdG9yKSB7Ci0gICAgICAgIHggKz0gYS54ICogZmFjdG9yOwotICAgICAgICB5ICs9IGEueSAqIGZhY3RvcjsKLSAgICAgICAgeiArPSBhLnogKiBmYWN0b3I7Ci0gICAgICAgIHcgKz0gYS53ICogZmFjdG9yOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB2ZWN0b3IgdmFsdWUgYnkgQnl0ZTQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0KEJ5dGU0IGEpIHsKLSAgICAgICAgdGhpcy54ID0gYS54OwotICAgICAgICB0aGlzLnkgPSBhLnk7Ci0gICAgICAgIHRoaXMueiA9IGEuejsKLSAgICAgICAgdGhpcy53ID0gYS53OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlcwotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEBwYXJhbSBjCi0gICAgICogQHBhcmFtIGQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRWYWx1ZXMoYnl0ZSBhLCBieXRlIGIsIGJ5dGUgYywgYnl0ZSBkKSB7Ci0gICAgICAgIHRoaXMueCA9IGE7Ci0gICAgICAgIHRoaXMueSA9IGI7Ci0gICAgICAgIHRoaXMueiA9IGM7Ci0gICAgICAgIHRoaXMudyA9IGQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogcmV0dXJuIHRoZSBlbGVtZW50IHN1bSBvZiB2ZWN0b3IKLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgYnl0ZSBlbGVtZW50U3VtKCkgewotICAgICAgICByZXR1cm4gKGJ5dGUpKHggKyB5ICsgeiArIHcpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIGdldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgYnl0ZSBnZXQoaW50IGkpIHsKLSAgICAgICAgc3dpdGNoIChpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICByZXR1cm4geTsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgcmV0dXJuIHo7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHJldHVybiB3OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBzZXQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBpbmRleAotICAgICAqCi0gICAgICogQHBhcmFtIGkKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRBdChpbnQgaSwgYnl0ZSB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeCA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICB5ID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHogPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgdyA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBhZGQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBpbmRleAotICAgICAqCi0gICAgICogQHBhcmFtIGkKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRBdChpbnQgaSwgYnl0ZSB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeCArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgeSArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgeiArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgdyArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogY29weSB0aGUgdmVjdG9yIHRvIENoYXIgYXJyYXkKLSAgICAgKgotICAgICAqIEBwYXJhbSBkYXRhCi0gICAgICogQHBhcmFtIG9mZnNldAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHlUbyhieXRlW10gZGF0YSwgaW50IG9mZnNldCkgewotICAgICAgICBkYXRhW29mZnNldF0gPSB4OwotICAgICAgICBkYXRhW29mZnNldCArIDFdID0geTsKLSAgICAgICAgZGF0YVtvZmZzZXQgKyAyXSA9IHo7Ci0gICAgICAgIGRhdGFbb2Zmc2V0ICsgM10gPSB3OwotICAgIH0KLX0KLQotCi0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudC5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YmFkZmEuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiA8cD5BbiBFbGVtZW50IHJlcHJlc2VudHMgb25lIGl0ZW0gd2l0aGluIGFuIHtAbGluawotICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbn0uICBBbiBFbGVtZW50IGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBhIEMKLSAqIHR5cGUgaW4gYSBSZW5kZXJTY3JpcHQga2VybmVsLiBFbGVtZW50cyBtYXkgYmUgYmFzaWMgb3IgY29tcGxleC4gU29tZSBiYXNpYwotICogZWxlbWVudHMgYXJlPC9wPiA8dWw+IDxsaT5BIHNpbmdsZSBmbG9hdCB2YWx1ZSAoZXF1aXZhbGVudCB0byBhIGZsb2F0IGluIGEKLSAqIGtlcm5lbCk8L2xpPiA8bGk+QSBmb3VyLWVsZW1lbnQgZmxvYXQgdmVjdG9yIChlcXVpdmFsZW50IHRvIGEgZmxvYXQ0IGluIGEKLSAqIGtlcm5lbCk8L2xpPiA8bGk+QW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgKGVxdWl2YWxlbnQgdG8gYW4gdW5zaWduZWQgaW50IGluCi0gKiBhIGtlcm5lbCk8L2xpPiA8bGk+QSBzaW5nbGUgc2lnbmVkIDgtYml0IGludGVnZXIgKGVxdWl2YWxlbnQgdG8gYSBjaGFyIGluIGEKLSAqIGtlcm5lbCk8L2xpPiA8L3VsPiA8cD5BIGNvbXBsZXggZWxlbWVudCBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYSBDIHN0cnVjdAotICogYW5kIGNvbnRhaW5zIGEgbnVtYmVyIG9mIGJhc2ljIG9yIGNvbXBsZXggRWxlbWVudHMuIEZyb20gSmF2YSBjb2RlLCBhIGNvbXBsZXgKLSAqIGVsZW1lbnQgY29udGFpbnMgYSBsaXN0IG9mIHN1Yi1lbGVtZW50cyBhbmQgbmFtZXMgdGhhdCByZXByZXNlbnRzIGEKLSAqIHBhcnRpY3VsYXIgZGF0YSBzdHJ1Y3R1cmUuIFN0cnVjdHMgdXNlZCBpbiBSUyBzY3JpcHRzIGFyZSBhdmFpbGFibGUgdG8gSmF2YQotICogY29kZSBieSB1c2luZyB0aGUge0Bjb2RlIFNjcmlwdEZpZWxkX3N0cnVjdG5hbWV9IGNsYXNzIHRoYXQgaXMgcmVmbGVjdGVkIGZyb20KLSAqIGEgcGFydGljdWxhciBzY3JpcHQuPC9wPgotICoKLSAqIDxwPkJhc2ljIEVsZW1lbnRzIGFyZSBjb21wcmlzZWQgb2YgYSB7QGxpbmsKLSAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQuRGF0YVR5cGV9IGFuZCBhIHtAbGluawotICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudC5EYXRhS2luZH0uIFRoZSBEYXRhVHlwZSBlbmNvZGVzIEMgdHlwZQotICogaW5mb3JtYXRpb24gb2YgYW4gRWxlbWVudCwgd2hpbGUgdGhlIERhdGFLaW5kIGVuY29kZXMgaG93IHRoYXQgRWxlbWVudCBzaG91bGQKLSAqIGJlIGludGVycHJldGVkIGJ5IGEge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNhbXBsZXJ9LiBOb3RlIHRoYXQge0BsaW5rCi0gKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9ufSBvYmplY3RzIHdpdGggRGF0YUtpbmQge0BsaW5rCi0gKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LkRhdGFLaW5kI1VTRVJ9IGNhbm5vdCBiZSB1c2VkIGFzIGlucHV0IGZvciBhCi0gKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2FtcGxlcn0uIEluIGdlbmVyYWwsIHtAbGluawotICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbn0gb2JqZWN0cyB0aGF0IGFyZSBpbnRlbmRlZCBmb3IgdXNlIHdpdGggYQotICoge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNhbXBsZXJ9IHNob3VsZCB1c2UgYml0bWFwLWRlcml2ZWQgRWxlbWVudHMgc3VjaAotICogYXMge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQjUkdCQV84ODg4fSBvciB7QGxpbmsKLSAqIGFuZHJvaWQucmVuZGVyc2NyaXB0I0VsZW1lbnQuQV84fS48L3A+Ci0gKgotICogPGRpdiBjbGFzcz0ic3BlY2lhbCByZWZlcmVuY2UiPgotICogPGgzPkRldmVsb3BlciBHdWlkZXM8L2gzPgotICogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIFJlbmRlclNjcmlwdCwgcmVhZCB0aGUKLSAqIDxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVuZGVyc2NyaXB0L2luZGV4Lmh0bWwiPlJlbmRlclNjcmlwdDwvYT4gZGV2ZWxvcGVyIGd1aWRlLjwvcD4KLSAqIDwvZGl2PgotICoqLwotcHVibGljIGNsYXNzIEVsZW1lbnQgZXh0ZW5kcyBCYXNlT2JqIHsKLSAgICBpbnQgbVNpemU7Ci0gICAgRWxlbWVudFtdIG1FbGVtZW50czsKLSAgICBTdHJpbmdbXSBtRWxlbWVudE5hbWVzOwotICAgIGludFtdIG1BcnJheVNpemVzOwotICAgIGludFtdIG1PZmZzZXRJbkJ5dGVzOwotCi0gICAgaW50W10gbVZpc2libGVFbGVtZW50TWFwOwotCi0gICAgRGF0YVR5cGUgbVR5cGU7Ci0gICAgRGF0YUtpbmQgbUtpbmQ7Ci0gICAgYm9vbGVhbiBtTm9ybWFsaXplZDsKLSAgICBpbnQgbVZlY3RvclNpemU7Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlVmlzaWJsZVN1YkVsZW1lbnRzKCkgewotICAgICAgICBpZiAobUVsZW1lbnRzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBub1BhZGRpbmdGaWVsZENvdW50ID0gMDsKLSAgICAgICAgaW50IGZpZWxkQ291bnQgPSBtRWxlbWVudE5hbWVzLmxlbmd0aDsKLSAgICAgICAgLy8gRmluZCBvdXQgaG93IG1hbnkgZWxlbWVudHMgYXJlIG5vdCBwYWRkaW5nCi0gICAgICAgIGZvciAoaW50IGN0ID0gMDsgY3QgPCBmaWVsZENvdW50OyBjdCArKykgewotICAgICAgICAgICAgaWYgKG1FbGVtZW50TmFtZXNbY3RdLmNoYXJBdCgwKSAhPSAnIycpIHsKLSAgICAgICAgICAgICAgICBub1BhZGRpbmdGaWVsZENvdW50ICsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1WaXNpYmxlRWxlbWVudE1hcCA9IG5ldyBpbnRbbm9QYWRkaW5nRmllbGRDb3VudF07Ci0KLSAgICAgICAgLy8gTWFrZSBhIG1hcCB0aGF0IHBvaW50cyB1cyBhdCBub24tcGFkZGluZyBlbGVtZW50cwotICAgICAgICBmb3IgKGludCBjdCA9IDAsIGN0Tm9QYWRkaW5nID0gMDsgY3QgPCBmaWVsZENvdW50OyBjdCArKykgewotICAgICAgICAgICAgaWYgKG1FbGVtZW50TmFtZXNbY3RdLmNoYXJBdCgwKSAhPSAnIycpIHsKLSAgICAgICAgICAgICAgICBtVmlzaWJsZUVsZW1lbnRNYXBbY3ROb1BhZGRpbmcgKytdID0gY3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIEByZXR1cm4gZWxlbWVudCBzaXplIGluIGJ5dGVzCi0gICAgKi8KLSAgICBwdWJsaWMgaW50IGdldEJ5dGVzU2l6ZSgpIHtyZXR1cm4gbVNpemU7fQotCi0gICAgLyoqCi0gICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdmVjdG9yIGNvbXBvbmVudHMuIDIgZm9yIGZsb2F0MiwgNCBmb3IKLSAgICAqIGZsb2F0NCwgZXRjLgotICAgICogQHJldHVybiBlbGVtZW50IHZlY3RvciBzaXplCi0gICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFZlY3RvclNpemUoKSB7cmV0dXJuIG1WZWN0b3JTaXplO30KLQotCi0gICAgLyoqCi0gICAgICogRGF0YVR5cGUgcmVwcmVzZW50cyB0aGUgYmFzaWMgdHlwZSBpbmZvcm1hdGlvbiBmb3IgYSBiYXNpYyBlbGVtZW50LiAgVGhlCi0gICAgICogbmFtaW5nIGNvbnZlbnRpb24gZm9sbG93cy4gIEZvciBudW1lcmljIHR5cGVzIGl0IGlzIEZMT0FULAotICAgICAqIFNJR05FRCwgb3IgVU5TSUdORUQgZm9sbG93ZWQgYnkgdGhlIF9CSVRTIHdoZXJlIEJJVFMgaXMgdGhlCi0gICAgICogc2l6ZSBvZiB0aGUgZGF0YS4gIEJPT0xFQU4gaXMgYSB0cnVlIC8gZmFsc2UgKDEsMCkKLSAgICAgKiByZXByZXNlbnRlZCBpbiBhbiA4IGJpdCBjb250YWluZXIuICBUaGUgVU5TSUdORUQgdmFyaWFudHMKLSAgICAgKiB3aXRoIG11bHRpcGxlIGJpdCBkZWZpbml0aW9ucyBhcmUgZm9yIHBhY2tlZCBncmFwaGljYWwgZGF0YQotICAgICAqIGZvcm1hdHMgYW5kIHJlcHJlc2VudCB2ZWN0b3JzIHdpdGggcGVyIHZlY3RvciBtZW1iZXIgc2l6ZXMKLSAgICAgKiB3aGljaCBhcmUgdHJlYXRlZCBhcyBhIHNpbmdsZSB1bml0IGZvciBwYWNraW5nIGFuZCBhbGlnbm1lbnQKLSAgICAgKiBwdXJwb3Nlcy4KLSAgICAgKgotICAgICAqIE1BVFJJWCB0aGUgdGhyZWUgbWF0cml4IHR5cGVzIGNvbnRhaW4gRkxPQVRfMzIgZWxlbWVudHMgYW5kIGFyZSB0cmVhdGVkCi0gICAgICogYXMgMzIgYml0cyBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgotICAgICAqCi0gICAgICogUlNfKiBvYmplY3RzLiAgMzIgYml0IG9wYXF1ZSBoYW5kbGVzLgotICAgICAqLwotICAgIHB1YmxpYyBlbnVtIERhdGFUeXBlIHsKLSAgICAgICAgTk9ORSAoMCwgMCksCi0gICAgICAgIC8vRkxPQVRfMTYgKDEsIDIpLAotICAgICAgICBGTE9BVF8zMiAoMiwgNCksCi0gICAgICAgIEZMT0FUXzY0ICgzLCA4KSwKLSAgICAgICAgU0lHTkVEXzggKDQsIDEpLAotICAgICAgICBTSUdORURfMTYgKDUsIDIpLAotICAgICAgICBTSUdORURfMzIgKDYsIDQpLAotICAgICAgICBTSUdORURfNjQgKDcsIDgpLAotICAgICAgICBVTlNJR05FRF84ICg4LCAxKSwKLSAgICAgICAgVU5TSUdORURfMTYgKDksIDIpLAotICAgICAgICBVTlNJR05FRF8zMiAoMTAsIDQpLAotICAgICAgICBVTlNJR05FRF82NCAoMTEsIDgpLAotCi0gICAgICAgIEJPT0xFQU4oMTIsIDEpLAotCi0gICAgICAgIFVOU0lHTkVEXzVfNl81ICgxMywgMiksCi0gICAgICAgIFVOU0lHTkVEXzVfNV81XzEgKDE0LCAyKSwKLSAgICAgICAgVU5TSUdORURfNF80XzRfNCAoMTUsIDIpLAotCi0gICAgICAgIE1BVFJJWF80WDQgKDE2LCA2NCksCi0gICAgICAgIE1BVFJJWF8zWDMgKDE3LCAzNiksCi0gICAgICAgIE1BVFJJWF8yWDIgKDE4LCAxNiksCi0KLSAgICAgICAgUlNfRUxFTUVOVCAoMTAwMCwgNCksCi0gICAgICAgIFJTX1RZUEUgKDEwMDEsIDQpLAotICAgICAgICBSU19BTExPQ0FUSU9OICgxMDAyLCA0KSwKLSAgICAgICAgUlNfU0FNUExFUiAoMTAwMywgNCksCi0gICAgICAgIFJTX1NDUklQVCAoMTAwNCwgNCksCi0gICAgICAgIFJTX01FU0ggKDEwMDUsIDQpLAotICAgICAgICBSU19QUk9HUkFNX0ZSQUdNRU5UICgxMDA2LCA0KSwKLSAgICAgICAgUlNfUFJPR1JBTV9WRVJURVggKDEwMDcsIDQpLAotICAgICAgICBSU19QUk9HUkFNX1JBU1RFUiAoMTAwOCwgNCksCi0gICAgICAgIFJTX1BST0dSQU1fU1RPUkUgKDEwMDksIDQpLAotICAgICAgICBSU19GT05UICgxMDEwLCA0KTsKLQotICAgICAgICBpbnQgbUlEOwotICAgICAgICBpbnQgbVNpemU7Ci0gICAgICAgIERhdGFUeXBlKGludCBpZCwgaW50IHNpemUpIHsKLSAgICAgICAgICAgIG1JRCA9IGlkOwotICAgICAgICAgICAgbVNpemUgPSBzaXplOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGRhdGEgaWYgcmVxdWlyZWQuICBUaGlzIGlzIHByaW1hcmx5Ci0gICAgICogdXNlZnVsIGZvciBncmFwaGljYWwgZGF0YS4gIFVTRVIgaW5kaWNhdGVzIG5vIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gaXMKLSAgICAgKiBleHBlY3RlZC4gIFBJWEVMIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgc3RhbmRhcmQgZGF0YSB0eXBlcyBmb3IKLSAgICAgKiByZXByZXNlbnRpbmcgdGV4dHVyZSBmb3JtYXRzLgotICAgICAqLwotICAgIHB1YmxpYyBlbnVtIERhdGFLaW5kIHsKLSAgICAgICAgVVNFUiAoMCksCi0KLSAgICAgICAgUElYRUxfTCAoNyksCi0gICAgICAgIFBJWEVMX0EgKDgpLAotICAgICAgICBQSVhFTF9MQSAoOSksCi0gICAgICAgIFBJWEVMX1JHQiAoMTApLAotICAgICAgICBQSVhFTF9SR0JBICgxMSksCi0gICAgICAgIFBJWEVMX0RFUFRIICgxMiksCi0gICAgICAgIFBJWEVMX1lVVigxMyk7Ci0KLSAgICAgICAgaW50IG1JRDsKLSAgICAgICAgRGF0YUtpbmQoaW50IGlkKSB7Ci0gICAgICAgICAgICBtSUQgPSBpZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiBpZiBhIGVsZW1lbnQgaXMgdG9vIGNvbXBsZXggZm9yIHVzZSBhcyBhIGRhdGEgc291cmNlIGZvciBhIE1lc2ggb3IKLSAgICAgKiBhIFByb2dyYW0uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXgoKSB7Ci0gICAgICAgIGlmIChtRWxlbWVudHMgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgbUVsZW1lbnRzLmxlbmd0aDsgY3QrKykgewotICAgICAgICAgICAgaWYgKG1FbGVtZW50c1tjdF0ubUVsZW1lbnRzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBFbGVtZW50cyBjb3VsZCBiZSBzaW1wbGUsIHN1Y2ggYXMgYW4gaW50IG9yIGEgZmxvYXQsIG9yIGEKLSAgICAqIHN0cnVjdHVyZSB3aXRoIG11bHRpcGxlIHN1YiBlbGVtZW50cywgc3VjaCBhcyBhIGNvbGxlY3Rpb24gb2YKLSAgICAqIGZsb2F0cywgZmxvYXQyLCBmbG9hdDQuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGZvciBzaW1wbGUKLSAgICAqIGVsZW1lbnRzIG9yIHRoZSBudW1iZXIgb2Ygc3ViLWVsZW1lbnRzIG90aGVyd2lzZS4KLSAgICAqIEByZXR1cm4gbnVtYmVyIG9mIHN1Yi1lbGVtZW50cyBpbiB0aGlzIGVsZW1lbnQKLSAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0U3ViRWxlbWVudENvdW50KCkgewotICAgICAgICBpZiAobVZpc2libGVFbGVtZW50TWFwID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtVmlzaWJsZUVsZW1lbnRNYXAubGVuZ3RoOwotICAgIH0KLQotICAgIC8qKgotICAgICogRm9yIGNvbXBsZXggZWxlbWVudHMsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlCi0gICAgKiBzdWItZWxlbWVudCBhdCBpbmRleAotICAgICogQHBhcmFtIGluZGV4IGluZGV4IG9mIHRoZSBzdWItZWxlbWVudCB0byByZXR1cm4KLSAgICAqIEByZXR1cm4gc3ViLWVsZW1lbnQgaW4gdGhpcyBlbGVtZW50IGF0IGdpdmVuIGluZGV4Ci0gICAgKi8KLSAgICBwdWJsaWMgRWxlbWVudCBnZXRTdWJFbGVtZW50KGludCBpbmRleCkgewotICAgICAgICBpZiAobVZpc2libGVFbGVtZW50TWFwID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBjb250YWlucyBubyBzdWItZWxlbWVudHMiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1WaXNpYmxlRWxlbWVudE1hcC5sZW5ndGgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBzdWItZWxlbWVudCBpbmRleCIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtRWxlbWVudHNbbVZpc2libGVFbGVtZW50TWFwW2luZGV4XV07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBGb3IgY29tcGxleCBlbGVtZW50cywgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUKLSAgICAqIHN1Yi1lbGVtZW50IG5hbWUgYXQgaW5kZXgKLSAgICAqIEBwYXJhbSBpbmRleCBpbmRleCBvZiB0aGUgc3ViLWVsZW1lbnQKLSAgICAqIEByZXR1cm4gc3ViLWVsZW1lbnQgaW4gdGhpcyBlbGVtZW50IGF0IGdpdmVuIGluZGV4Ci0gICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1YkVsZW1lbnROYW1lKGludCBpbmRleCkgewotICAgICAgICBpZiAobVZpc2libGVFbGVtZW50TWFwID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBjb250YWlucyBubyBzdWItZWxlbWVudHMiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1WaXNpYmxlRWxlbWVudE1hcC5sZW5ndGgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBzdWItZWxlbWVudCBpbmRleCIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtRWxlbWVudE5hbWVzW21WaXNpYmxlRWxlbWVudE1hcFtpbmRleF1dOwotICAgIH0KLQotICAgIC8qKgotICAgICogRm9yIGNvbXBsZXggZWxlbWVudHMsIHNvbWUgc3ViLWVsZW1lbnRzIGNvdWxkIGJlIHN0YXRpY2FsbHkKLSAgICAqIHNpemVkIGFycmF5cy4gVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgYXJyYXkgc2l6ZSBmb3IKLSAgICAqIHN1Yi1lbGVtZW50IGF0IGluZGV4Ci0gICAgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIHN1Yi1lbGVtZW50Ci0gICAgKiBAcmV0dXJuIGFycmF5IHNpemUgb2Ygc3ViLWVsZW1lbnQgaW4gdGhpcyBlbGVtZW50IGF0IGdpdmVuIGluZGV4Ci0gICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFN1YkVsZW1lbnRBcnJheVNpemUoaW50IGluZGV4KSB7Ci0gICAgICAgIGlmIChtVmlzaWJsZUVsZW1lbnRNYXAgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJFbGVtZW50IGNvbnRhaW5zIG5vIHN1Yi1lbGVtZW50cyIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVZpc2libGVFbGVtZW50TWFwLmxlbmd0aCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIHN1Yi1lbGVtZW50IGluZGV4Iik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1BcnJheVNpemVzW21WaXNpYmxlRWxlbWVudE1hcFtpbmRleF1dOwotICAgIH0KLQotICAgIC8qKgotICAgICogVGhpcyBmdW5jdGlvbiBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIGEgc3ViLWVsZW1lbnQgd2l0aGluCi0gICAgKiB0aGUgZWxlbWVudAotICAgICogQHBhcmFtIGluZGV4IGluZGV4IG9mIHRoZSBzdWItZWxlbWVudAotICAgICogQHJldHVybiBvZmZzZXQgaW4gYnl0ZXMgb2Ygc3ViLWVsZW1lbnQgaW4gdGhpcyBlbGVtZW50IGF0IGdpdmVuIGluZGV4Ci0gICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFN1YkVsZW1lbnRPZmZzZXRCeXRlcyhpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKG1WaXNpYmxlRWxlbWVudE1hcCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkVsZW1lbnQgY29udGFpbnMgbm8gc3ViLWVsZW1lbnRzIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtVmlzaWJsZUVsZW1lbnRNYXAubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgc3ViLWVsZW1lbnQgaW5kZXgiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbU9mZnNldEluQnl0ZXNbbVZpc2libGVFbGVtZW50TWFwW2luZGV4XV07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBAcmV0dXJuIGVsZW1lbnQgZGF0YSB0eXBlCi0gICAgKi8KLSAgICBwdWJsaWMgRGF0YVR5cGUgZ2V0RGF0YVR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBtVHlwZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIEByZXR1cm4gZWxlbWVudCBkYXRhIGtpbmQKLSAgICAqLwotICAgIHB1YmxpYyBEYXRhS2luZCBnZXREYXRhS2luZCgpIHsKLSAgICAgICAgcmV0dXJuIG1LaW5kOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHVybmluZyBhbiBFbGVtZW50IGNvbnRhaW5pbmcgYSBzaW5nbGUgQm9vbGVhbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBlbGVtZW50IHdpbGwgYmVsb25nLgotICAgICAqCi0gICAgICogQHJldHVybiBFbGVtZW50Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEJPT0xFQU4oUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0JPT0xFQU4gPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfQk9PTEVBTiA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLkJPT0xFQU4pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9CT09MRUFOOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHVybmluZyBhbiBFbGVtZW50IGNvbnRhaW5pbmcgYSBzaW5nbGUgVU5TSUdORURfOC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBlbGVtZW50IHdpbGwgYmVsb25nLgotICAgICAqCi0gICAgICogQHJldHVybiBFbGVtZW50Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFU4KFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9VOCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9VOCA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlVOU0lHTkVEXzgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VODsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXR1cm5pbmcgYW4gRWxlbWVudCBjb250YWluaW5nIGEgc2luZ2xlIFNJR05FRF84LgotICAgICAqCi0gICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIGVsZW1lbnQgd2lsbCBiZWxvbmcuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEVsZW1lbnQKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTgoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0k4ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0k4ID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuU0lHTkVEXzgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9JODsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVTE2KFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9VMTYgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfVTE2ID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuVU5TSUdORURfMTYpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VMTY7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEkxNihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfSTE2ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0kxNiA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlNJR05FRF8xNik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0kxNjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVTMyKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9VMzIgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfVTMyID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuVU5TSUdORURfMzIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VMzI7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEkzMihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfSTMyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0kzMiA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlNJR05FRF8zMik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0kzMjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVTY0KFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9VNjQgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfVTY0ID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuVU5TSUdORURfNjQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VNjQ7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEk2NChSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfSTY0ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0k2NCA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlNJR05FRF82NCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0k2NDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgRjMyKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9GMzIgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfRjMyID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuRkxPQVRfMzIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9GMzI7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEY2NChSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfRjY0ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0Y2NCA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLkZMT0FUXzY0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfRjY0OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBFTEVNRU5UKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9FTEVNRU5UID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0VMRU1FTlQgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5SU19FTEVNRU5UKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfRUxFTUVOVDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVFlQRShSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfVFlQRSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9UWVBFID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuUlNfVFlQRSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1RZUEU7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEFMTE9DQVRJT04oUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0FMTE9DQVRJT04gPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfQUxMT0NBVElPTiA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlJTX0FMTE9DQVRJT04pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9BTExPQ0FUSU9OOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBTQU1QTEVSKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9TQU1QTEVSID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X1NBTVBMRVIgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5SU19TQU1QTEVSKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfU0FNUExFUjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgU0NSSVBUKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9TQ1JJUFQgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfU0NSSVBUID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuUlNfU0NSSVBUKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfU0NSSVBUOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBNRVNIKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9NRVNIID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X01FU0ggPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5SU19NRVNIKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfTUVTSDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgUFJPR1JBTV9GUkFHTUVOVChSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfUFJPR1JBTV9GUkFHTUVOVCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9QUk9HUkFNX0ZSQUdNRU5UID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuUlNfUFJPR1JBTV9GUkFHTUVOVCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1BST0dSQU1fRlJBR01FTlQ7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFBST0dSQU1fVkVSVEVYKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9QUk9HUkFNX1ZFUlRFWCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9QUk9HUkFNX1ZFUlRFWCA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlJTX1BST0dSQU1fVkVSVEVYKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfUFJPR1JBTV9WRVJURVg7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFBST0dSQU1fUkFTVEVSKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9QUk9HUkFNX1JBU1RFUiA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9QUk9HUkFNX1JBU1RFUiA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlJTX1BST0dSQU1fUkFTVEVSKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfUFJPR1JBTV9SQVNURVI7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFBST0dSQU1fU1RPUkUoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X1BST0dSQU1fU1RPUkUgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfUFJPR1JBTV9TVE9SRSA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlJTX1BST0dSQU1fU1RPUkUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9QUk9HUkFNX1NUT1JFOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBGT05UKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9GT05UID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0ZPTlQgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5SU19GT05UKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfRk9OVDsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBBXzgoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0FfOCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9BXzggPSBjcmVhdGVQaXhlbChycywgRGF0YVR5cGUuVU5TSUdORURfOCwgRGF0YUtpbmQuUElYRUxfQSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0FfODsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgUkdCXzU2NShSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfUkdCXzU2NSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9SR0JfNTY1ID0gY3JlYXRlUGl4ZWwocnMsIERhdGFUeXBlLlVOU0lHTkVEXzVfNl81LCBEYXRhS2luZC5QSVhFTF9SR0IpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9SR0JfNTY1OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBSR0JfODg4KFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9SR0JfODg4ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X1JHQl84ODggPSBjcmVhdGVQaXhlbChycywgRGF0YVR5cGUuVU5TSUdORURfOCwgRGF0YUtpbmQuUElYRUxfUkdCKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfUkdCXzg4ODsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgUkdCQV81NTUxKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9SR0JBXzU1NTEgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfUkdCQV81NTUxID0gY3JlYXRlUGl4ZWwocnMsIERhdGFUeXBlLlVOU0lHTkVEXzVfNV81XzEsIERhdGFLaW5kLlBJWEVMX1JHQkEpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9SR0JBXzU1NTE7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFJHQkFfNDQ0NChSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfUkdCQV80NDQ0ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X1JHQkFfNDQ0NCA9IGNyZWF0ZVBpeGVsKHJzLCBEYXRhVHlwZS5VTlNJR05FRF80XzRfNF80LCBEYXRhS2luZC5QSVhFTF9SR0JBKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfUkdCQV80NDQ0OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBSR0JBXzg4ODgoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X1JHQkFfODg4OCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9SR0JBXzg4ODggPSBjcmVhdGVQaXhlbChycywgRGF0YVR5cGUuVU5TSUdORURfOCwgRGF0YUtpbmQuUElYRUxfUkdCQSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1JHQkFfODg4ODsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgRjMyXzIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0ZMT0FUXzIgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfRkxPQVRfMiA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuRkxPQVRfMzIsIDIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9GTE9BVF8yOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBGMzJfMyhSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfRkxPQVRfMyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9GTE9BVF8zID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5GTE9BVF8zMiwgMyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0ZMT0FUXzM7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEYzMl80KFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9GTE9BVF80ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0ZMT0FUXzQgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLkZMT0FUXzMyLCA0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfRkxPQVRfNDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgRjY0XzIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0RPVUJMRV8yID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0RPVUJMRV8yID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5GTE9BVF82NCwgMik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0RPVUJMRV8yOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBGNjRfMyhSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfRE9VQkxFXzMgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfRE9VQkxFXzMgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLkZMT0FUXzY0LCAzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfRE9VQkxFXzM7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEY2NF80KFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9ET1VCTEVfNCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9ET1VCTEVfNCA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuRkxPQVRfNjQsIDQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9ET1VCTEVfNDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVThfMihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfVUNIQVJfMiA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9VQ0hBUl8yID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5VTlNJR05FRF84LCAyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfVUNIQVJfMjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVThfMyhSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfVUNIQVJfMyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9VQ0hBUl8zID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5VTlNJR05FRF84LCAzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfVUNIQVJfMzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVThfNChSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfVUNIQVJfNCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9VQ0hBUl80ID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5VTlNJR05FRF84LCA0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfVUNIQVJfNDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSThfMihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfQ0hBUl8yID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0NIQVJfMiA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuU0lHTkVEXzgsIDIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9DSEFSXzI7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEk4XzMoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0NIQVJfMyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9DSEFSXzMgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlNJR05FRF84LCAzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfQ0hBUl8zOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJOF80KFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9DSEFSXzQgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfQ0hBUl80ID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5TSUdORURfOCwgNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0NIQVJfNDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVTE2XzIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X1VTSE9SVF8yID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X1VTSE9SVF8yID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5VTlNJR05FRF8xNiwgMik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1VTSE9SVF8yOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVMTZfMyhSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfVVNIT1JUXzMgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfVVNIT1JUXzMgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlVOU0lHTkVEXzE2LCAzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfVVNIT1JUXzM7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFUxNl80KFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9VU0hPUlRfNCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9VU0hPUlRfNCA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuVU5TSUdORURfMTYsIDQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VU0hPUlRfNDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTE2XzIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X1NIT1JUXzIgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfU0hPUlRfMiA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuU0lHTkVEXzE2LCAyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfU0hPUlRfMjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTE2XzMoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X1NIT1JUXzMgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfU0hPUlRfMyA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuU0lHTkVEXzE2LCAzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfU0hPUlRfMzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTE2XzQoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X1NIT1JUXzQgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfU0hPUlRfNCA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuU0lHTkVEXzE2LCA0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfU0hPUlRfNDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVTMyXzIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X1VJTlRfMiA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9VSU5UXzIgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlVOU0lHTkVEXzMyLCAyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfVUlOVF8yOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVMzJfMyhSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfVUlOVF8zID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X1VJTlRfMyA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuVU5TSUdORURfMzIsIDMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VSU5UXzM7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFUzMl80KFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9VSU5UXzQgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfVUlOVF80ID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5VTlNJR05FRF8zMiwgNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1VJTlRfNDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTMyXzIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0lOVF8yID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0lOVF8yID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5TSUdORURfMzIsIDIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9JTlRfMjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTMyXzMoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0lOVF8zID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0lOVF8zID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5TSUdORURfMzIsIDMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9JTlRfMzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTMyXzQoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0lOVF80ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X0lOVF80ID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5TSUdORURfMzIsIDQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9JTlRfNDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVTY0XzIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X1VMT05HXzIgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfVUxPTkdfMiA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuVU5TSUdORURfNjQsIDIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VTE9OR18yOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVNjRfMyhSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfVUxPTkdfMyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9VTE9OR18zID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5VTlNJR05FRF82NCwgMyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1VMT05HXzM7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFU2NF80KFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9VTE9OR180ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X1VMT05HXzQgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlVOU0lHTkVEXzY0LCA0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfVUxPTkdfNDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTY0XzIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0xPTkdfMiA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9MT05HXzIgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlNJR05FRF82NCwgMik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0xPTkdfMjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTY0XzMoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0xPTkdfMyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9MT05HXzMgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlNJR05FRF82NCwgMyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0xPTkdfMzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTY0XzQoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X0xPTkdfNCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9MT05HXzQgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlNJR05FRF82NCwgNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0xPTkdfNDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgWVVWKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZiAocnMubUVsZW1lbnRfWVVWID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X1lVViA9IGNyZWF0ZVBpeGVsKHJzLCBEYXRhVHlwZS5VTlNJR05FRF84LCBEYXRhS2luZC5QSVhFTF9ZVVYpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9ZVVY7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IE1BVFJJWF80WDQoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1FbGVtZW50X01BVFJJWF80WDQgPT0gbnVsbCkgewotICAgICAgICAgICAgcnMubUVsZW1lbnRfTUFUUklYXzRYNCA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLk1BVFJJWF80WDQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tRWxlbWVudF9NQVRSSVhfNFg0OwotICAgIH0KLQotICAgIC8qKiBAZGVwcmVjYXRlZCB1c2UgTUFUUklYXzRYNAotICAgICovCi0gICAgcHVibGljIHN0YXRpYyBFbGVtZW50IE1BVFJJWDRYNChSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgcmV0dXJuIE1BVFJJWF80WDQocnMpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBNQVRSSVhfM1gzKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tRWxlbWVudF9NQVRSSVhfM1gzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJzLm1FbGVtZW50X01BVFJJWF8zWDMgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5NQVRSSVhfM1gzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfTUFUUklYXzNYMzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgTUFUUklYXzJYMihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubUVsZW1lbnRfTUFUUklYXzJYMiA9PSBudWxsKSB7Ci0gICAgICAgICAgICBycy5tRWxlbWVudF9NQVRSSVhfMlgyID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuTUFUUklYXzJYMik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X01BVFJJWF8yWDI7Ci0gICAgfQotCi0gICAgRWxlbWVudChpbnQgaWQsIFJlbmRlclNjcmlwdCBycywgRWxlbWVudFtdIGUsIFN0cmluZ1tdIG4sIGludFtdIGFzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgICAgIG1TaXplID0gMDsKLSAgICAgICAgbVZlY3RvclNpemUgPSAxOwotICAgICAgICBtRWxlbWVudHMgPSBlOwotICAgICAgICBtRWxlbWVudE5hbWVzID0gbjsKLSAgICAgICAgbUFycmF5U2l6ZXMgPSBhczsKLSAgICAgICAgbVR5cGUgPSBEYXRhVHlwZS5OT05FOwotICAgICAgICBtS2luZCA9IERhdGFLaW5kLlVTRVI7Ci0gICAgICAgIG1PZmZzZXRJbkJ5dGVzID0gbmV3IGludFttRWxlbWVudHMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgY3QgPSAwOyBjdCA8IG1FbGVtZW50cy5sZW5ndGg7IGN0KysgKSB7Ci0gICAgICAgICAgICBtT2Zmc2V0SW5CeXRlc1tjdF0gPSBtU2l6ZTsKLSAgICAgICAgICAgIG1TaXplICs9IG1FbGVtZW50c1tjdF0ubVNpemUgKiBtQXJyYXlTaXplc1tjdF07Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlVmlzaWJsZVN1YkVsZW1lbnRzKCk7Ci0gICAgfQotCi0gICAgRWxlbWVudChpbnQgaWQsIFJlbmRlclNjcmlwdCBycywgRGF0YVR5cGUgZHQsIERhdGFLaW5kIGRrLCBib29sZWFuIG5vcm0sIGludCBzaXplKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgICAgIGlmICgoZHQgIT0gRGF0YVR5cGUuVU5TSUdORURfNV82XzUpICYmCi0gICAgICAgICAgICAoZHQgIT0gRGF0YVR5cGUuVU5TSUdORURfNF80XzRfNCkgJiYKLSAgICAgICAgICAgIChkdCAhPSBEYXRhVHlwZS5VTlNJR05FRF81XzVfNV8xKSkgewotICAgICAgICAgICAgaWYgKHNpemUgPT0gMykgewotICAgICAgICAgICAgICAgIG1TaXplID0gZHQubVNpemUgKiA0OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtU2l6ZSA9IGR0Lm1TaXplICogc2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1TaXplID0gZHQubVNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgbVR5cGUgPSBkdDsKLSAgICAgICAgbUtpbmQgPSBkazsKLSAgICAgICAgbU5vcm1hbGl6ZWQgPSBub3JtOwotICAgICAgICBtVmVjdG9yU2l6ZSA9IHNpemU7Ci0gICAgfQotCi0gICAgRWxlbWVudChpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBzdXBlcihpZCwgcnMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHZvaWQgdXBkYXRlRnJvbU5hdGl2ZSgpIHsKLSAgICAgICAgc3VwZXIudXBkYXRlRnJvbU5hdGl2ZSgpOwotCi0gICAgICAgIC8vIHdlIHdpbGwgcGFjayBtVHlwZTsgbUtpbmQ7IG1Ob3JtYWxpemVkOyBtVmVjdG9yU2l6ZTsgTnVtU3ViRWxlbWVudHMKLSAgICAgICAgaW50W10gZGF0YUJ1ZmZlciA9IG5ldyBpbnRbNV07Ci0gICAgICAgIG1SUy5uRWxlbWVudEdldE5hdGl2ZURhdGEoZ2V0SUQobVJTKSwgZGF0YUJ1ZmZlcik7Ci0KLSAgICAgICAgbU5vcm1hbGl6ZWQgPSBkYXRhQnVmZmVyWzJdID09IDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgICAgIG1WZWN0b3JTaXplID0gZGF0YUJ1ZmZlclszXTsKLSAgICAgICAgbVNpemUgPSAwOwotICAgICAgICBmb3IgKERhdGFUeXBlIGR0OiBEYXRhVHlwZS52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYoZHQubUlEID09IGRhdGFCdWZmZXJbMF0pewotICAgICAgICAgICAgICAgIG1UeXBlID0gZHQ7Ci0gICAgICAgICAgICAgICAgbVNpemUgPSBtVHlwZS5tU2l6ZSAqIG1WZWN0b3JTaXplOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAoRGF0YUtpbmQgZGs6IERhdGFLaW5kLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZihkay5tSUQgPT0gZGF0YUJ1ZmZlclsxXSl7Ci0gICAgICAgICAgICAgICAgbUtpbmQgPSBkazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludCBudW1TdWJFbGVtZW50cyA9IGRhdGFCdWZmZXJbNF07Ci0gICAgICAgIGlmKG51bVN1YkVsZW1lbnRzID4gMCkgewotICAgICAgICAgICAgbUVsZW1lbnRzID0gbmV3IEVsZW1lbnRbbnVtU3ViRWxlbWVudHNdOwotICAgICAgICAgICAgbUVsZW1lbnROYW1lcyA9IG5ldyBTdHJpbmdbbnVtU3ViRWxlbWVudHNdOwotICAgICAgICAgICAgbUFycmF5U2l6ZXMgPSBuZXcgaW50W251bVN1YkVsZW1lbnRzXTsKLSAgICAgICAgICAgIG1PZmZzZXRJbkJ5dGVzID0gbmV3IGludFtudW1TdWJFbGVtZW50c107Ci0KLSAgICAgICAgICAgIGludFtdIHN1YkVsZW1lbnRJZHMgPSBuZXcgaW50W251bVN1YkVsZW1lbnRzXTsKLSAgICAgICAgICAgIG1SUy5uRWxlbWVudEdldFN1YkVsZW1lbnRzKGdldElEKG1SUyksIHN1YkVsZW1lbnRJZHMsIG1FbGVtZW50TmFtZXMsIG1BcnJheVNpemVzKTsKLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1TdWJFbGVtZW50czsgaSArKykgewotICAgICAgICAgICAgICAgIG1FbGVtZW50c1tpXSA9IG5ldyBFbGVtZW50KHN1YkVsZW1lbnRJZHNbaV0sIG1SUyk7Ci0gICAgICAgICAgICAgICAgbUVsZW1lbnRzW2ldLnVwZGF0ZUZyb21OYXRpdmUoKTsKLSAgICAgICAgICAgICAgICBtT2Zmc2V0SW5CeXRlc1tpXSA9IG1TaXplOwotICAgICAgICAgICAgICAgIG1TaXplICs9IG1FbGVtZW50c1tpXS5tU2l6ZSAqIG1BcnJheVNpemVzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZVZpc2libGVTdWJFbGVtZW50cygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhIGN1c3RvbSBFbGVtZW50IG9mIHRoZSBzcGVjaWZpZWQgRGF0YVR5cGUuICBUaGUgRGF0YUtpbmQgd2lsbCBiZQotICAgICAqIHNldCB0byBVU0VSIGFuZCB0aGUgdmVjdG9yIHNpemUgdG8gMSBpbmRpY2F0aW5nIG5vbi12ZWN0b3IuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgVGhlIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXcgRWxlbWVudC4KLSAgICAgKiBAcGFyYW0gZHQgVGhlIERhdGFUeXBlIGZvciB0aGUgbmV3IGVsZW1lbnQuCi0gICAgICogQHJldHVybiBFbGVtZW50Ci0gICAgICovCi0gICAgc3RhdGljIEVsZW1lbnQgY3JlYXRlVXNlcihSZW5kZXJTY3JpcHQgcnMsIERhdGFUeXBlIGR0KSB7Ci0gICAgICAgIERhdGFLaW5kIGRrID0gRGF0YUtpbmQuVVNFUjsKLSAgICAgICAgYm9vbGVhbiBub3JtID0gZmFsc2U7Ci0gICAgICAgIGludCB2ZWNTaXplID0gMTsKLSAgICAgICAgaW50IGlkID0gcnMubkVsZW1lbnRDcmVhdGUoZHQubUlELCBkay5tSUQsIG5vcm0sIHZlY1NpemUpOwotICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnQoaWQsIHJzLCBkdCwgZGssIG5vcm0sIHZlY1NpemUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhIGN1c3RvbSB2ZWN0b3IgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIERhdGFUeXBlIGFuZCB2ZWN0b3Igc2l6ZS4KLSAgICAgKiBEYXRhS2luZCB3aWxsIGJlIHNldCB0byBVU0VSLiBPbmx5IHByaW1pdGl2ZSB0eXBlcyAoRkxPQVRfMzIsIEZMT0FUXzY0LAotICAgICAqIFNJR05FRF84LCBTSUdORURfMTYsIFNJR05FRF8zMiwgU0lHTkVEXzY0LCBVTlNJR05FRF84LCBVTlNJR05FRF8xNiwKLSAgICAgKiBVTlNJR05FRF8zMiwgVU5TSUdORURfNjQsIEJPT0xFQU4pIGFyZSBzdXBwb3J0ZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgVGhlIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXcgRWxlbWVudC4KLSAgICAgKiBAcGFyYW0gZHQgVGhlIERhdGFUeXBlIGZvciB0aGUgbmV3IEVsZW1lbnQuCi0gICAgICogQHBhcmFtIHNpemUgVmVjdG9yIHNpemUgZm9yIHRoZSBuZXcgRWxlbWVudC4gIFJhbmdlIDItNCBpbmNsdXNpdmUKLSAgICAgKiAgICAgICAgICAgICBzdXBwb3J0ZWQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEVsZW1lbnQKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgY3JlYXRlVmVjdG9yKFJlbmRlclNjcmlwdCBycywgRGF0YVR5cGUgZHQsIGludCBzaXplKSB7Ci0gICAgICAgIGlmIChzaXplIDwgMiB8fCBzaXplID4gNCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJWZWN0b3Igc2l6ZSBvdXQgb2YgcmFuZ2UgMi00LiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChkdCkgewotICAgICAgICAvLyBTdXBwb3J0IG9ubHkgcHJpbWl0aXZlIGludGVnZXIvZmxvYXQvYm9vbGVhbiB0eXBlcyBhcyB2ZWN0b3JzLgotICAgICAgICBjYXNlIEZMT0FUXzMyOgotICAgICAgICBjYXNlIEZMT0FUXzY0OgotICAgICAgICBjYXNlIFNJR05FRF84OgotICAgICAgICBjYXNlIFNJR05FRF8xNjoKLSAgICAgICAgY2FzZSBTSUdORURfMzI6Ci0gICAgICAgIGNhc2UgU0lHTkVEXzY0OgotICAgICAgICBjYXNlIFVOU0lHTkVEXzg6Ci0gICAgICAgIGNhc2UgVU5TSUdORURfMTY6Ci0gICAgICAgIGNhc2UgVU5TSUdORURfMzI6Ci0gICAgICAgIGNhc2UgVU5TSUdORURfNjQ6Ci0gICAgICAgIGNhc2UgQk9PTEVBTjogewotICAgICAgICAgICAgRGF0YUtpbmQgZGsgPSBEYXRhS2luZC5VU0VSOwotICAgICAgICAgICAgYm9vbGVhbiBub3JtID0gZmFsc2U7Ci0gICAgICAgICAgICBpbnQgaWQgPSBycy5uRWxlbWVudENyZWF0ZShkdC5tSUQsIGRrLm1JRCwgbm9ybSwgc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnQoaWQsIHJzLCBkdCwgZGssIG5vcm0sIHNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3QgY3JlYXRlIHZlY3RvciBvZiAiICsKLSAgICAgICAgICAgICAgICAibm9uLXByaW1pdGl2ZSB0eXBlLiIpOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBuZXcgcGl4ZWwgRWxlbWVudCB0eXBlLiAgQSBtYXRjaGluZyBEYXRhVHlwZSBhbmQgRGF0YUtpbmQgbXVzdAotICAgICAqIGJlIHByb3ZpZGVkLiAgVGhlIERhdGFUeXBlIGFuZCBEYXRhS2luZCBtdXN0IGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mCi0gICAgICogY29tcG9uZW50cy4gIFZlY3RvciBzaXplIHdpbGwgYmUgc2V0IHRvIDEuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgVGhlIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXcgRWxlbWVudC4KLSAgICAgKiBAcGFyYW0gZHQgVGhlIERhdGFUeXBlIGZvciB0aGUgbmV3IGVsZW1lbnQuCi0gICAgICogQHBhcmFtIGRrIFRoZSBEYXRhS2luZCB0byBzcGVjaWZ5IHRoZSBtYXBwaW5nIG9mIGVhY2ggY29tcG9uZW50IGluIHRoZQotICAgICAqICAgICAgICAgICBEYXRhVHlwZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gRWxlbWVudAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBjcmVhdGVQaXhlbChSZW5kZXJTY3JpcHQgcnMsIERhdGFUeXBlIGR0LCBEYXRhS2luZCBkaykgewotICAgICAgICBpZiAoIShkayA9PSBEYXRhS2luZC5QSVhFTF9MIHx8Ci0gICAgICAgICAgICAgIGRrID09IERhdGFLaW5kLlBJWEVMX0EgfHwKLSAgICAgICAgICAgICAgZGsgPT0gRGF0YUtpbmQuUElYRUxfTEEgfHwKLSAgICAgICAgICAgICAgZGsgPT0gRGF0YUtpbmQuUElYRUxfUkdCIHx8Ci0gICAgICAgICAgICAgIGRrID09IERhdGFLaW5kLlBJWEVMX1JHQkEgfHwKLSAgICAgICAgICAgICAgZGsgPT0gRGF0YUtpbmQuUElYRUxfREVQVEggfHwKLSAgICAgICAgICAgICAgZGsgPT0gRGF0YUtpbmQuUElYRUxfWVVWKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBEYXRhS2luZCIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghKGR0ID09IERhdGFUeXBlLlVOU0lHTkVEXzggfHwKLSAgICAgICAgICAgICAgZHQgPT0gRGF0YVR5cGUuVU5TSUdORURfMTYgfHwKLSAgICAgICAgICAgICAgZHQgPT0gRGF0YVR5cGUuVU5TSUdORURfNV82XzUgfHwKLSAgICAgICAgICAgICAgZHQgPT0gRGF0YVR5cGUuVU5TSUdORURfNF80XzRfNCB8fAotICAgICAgICAgICAgICBkdCA9PSBEYXRhVHlwZS5VTlNJR05FRF81XzVfNV8xKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBEYXRhVHlwZSIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkdCA9PSBEYXRhVHlwZS5VTlNJR05FRF81XzZfNSAmJiBkayAhPSBEYXRhS2luZC5QSVhFTF9SR0IpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQmFkIGtpbmQgYW5kIHR5cGUgY29tYm8iKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZHQgPT0gRGF0YVR5cGUuVU5TSUdORURfNV81XzVfMSAmJiBkayAhPSBEYXRhS2luZC5QSVhFTF9SR0JBKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkJhZCBraW5kIGFuZCB0eXBlIGNvbWJvIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGR0ID09IERhdGFUeXBlLlVOU0lHTkVEXzRfNF80XzQgJiYgZGsgIT0gRGF0YUtpbmQuUElYRUxfUkdCQSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCYWQga2luZCBhbmQgdHlwZSBjb21ibyIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkdCA9PSBEYXRhVHlwZS5VTlNJR05FRF8xNiAmJgotICAgICAgICAgICAgZGsgIT0gRGF0YUtpbmQuUElYRUxfREVQVEgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQmFkIGtpbmQgYW5kIHR5cGUgY29tYm8iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzaXplID0gMTsKLSAgICAgICAgc3dpdGNoIChkaykgewotICAgICAgICBjYXNlIFBJWEVMX0xBOgotICAgICAgICAgICAgc2l6ZSA9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQSVhFTF9SR0I6Ci0gICAgICAgICAgICBzaXplID0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBJWEVMX1JHQkE6Ci0gICAgICAgICAgICBzaXplID0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBJWEVMX0RFUFRIOgotICAgICAgICAgICAgc2l6ZSA9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gbm9ybSA9IHRydWU7Ci0gICAgICAgIGludCBpZCA9IHJzLm5FbGVtZW50Q3JlYXRlKGR0Lm1JRCwgZGsubUlELCBub3JtLCBzaXplKTsKLSAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGlkLCBycywgZHQsIGRrLCBub3JtLCBzaXplKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCBFbGVtZW50IGlzIGNvbXBhdGlibGUgd2l0aCBhbm90aGVyIEVsZW1lbnQuCi0gICAgICogUHJpbWl0aXZlIEVsZW1lbnRzIGFyZSBjb21wYXRpYmxlIGlmIHRoZXkgc2hhcmUgdGhlIHNhbWUgdW5kZXJseWluZwotICAgICAqIHNpemUgYW5kIHR5cGUgKGkuZS4gVTggaXMgY29tcGF0aWJsZSB3aXRoIEFfOCkuIFVzZXItZGVmaW5lZCBFbGVtZW50cwotICAgICAqIG11c3QgYmUgZXF1YWwgaW4gb3JkZXIgdG8gYmUgY29tcGF0aWJsZS4gVGhpcyByZXF1aXJlcyBzdHJpY3QgbmFtZQotICAgICAqIGVxdWl2YWxlbmNlIGZvciBhbGwgc3ViLUVsZW1lbnRzIChpbiBhZGRpdGlvbiB0byBzdHJ1Y3R1cmFsIGVxdWl2YWxlbmNlKS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBlIFRoZSBFbGVtZW50IHRvIGNoZWNrIGNvbXBhdGliaWxpdHkgd2l0aC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBFbGVtZW50cyBhcmUgY29tcGF0aWJsZSwgb3RoZXJ3aXNlIGZhbHNlLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzQ29tcGF0aWJsZShFbGVtZW50IGUpIHsKLSAgICAgICAgLy8gVHJ5IHN0cmljdCBCYXNlT2JqIGVxdWFsaXR5IHRvIHN0YXJ0IHdpdGguCi0gICAgICAgIGlmICh0aGlzLmVxdWFscyhlKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZ25vcmUgbUtpbmQgYmVjYXVzZSBpdCBpcyBhbGxvd2VkIHRvIGJlIGRpZmZlcmVudCAodXNlciB2cy4gcGl4ZWwpLgotICAgICAgICAvLyBXZSBhbHNvIGlnbm9yZSBtTm9ybWFsaXplZCBiZWNhdXNlIGl0IGNhbiBiZSBkaWZmZXJlbnQuIFRoZSBtVHlwZQotICAgICAgICAvLyBmaWVsZCBtdXN0IG5vdCBiZSBOT05FIHNpbmNlIHdlIHJlcXVpcmUgbmFtZSBlcXVpdmFsZW5jZSBmb3IKLSAgICAgICAgLy8gYWxsIHVzZXItY3JlYXRlZCBFbGVtZW50cy4KLSAgICAgICAgcmV0dXJuICgobVNpemUgPT0gZS5tU2l6ZSkgJiYKLSAgICAgICAgICAgICAgICAobVR5cGUgIT0gRGF0YVR5cGUuTk9ORSkgJiYKLSAgICAgICAgICAgICAgICAobVR5cGUgPT0gZS5tVHlwZSkgJiYKLSAgICAgICAgICAgICAgICAobVZlY3RvclNpemUgPT0gZS5tVmVjdG9yU2l6ZSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1aWxkZXIgY2xhc3MgZm9yIHByb2R1Y2luZyBjb21wbGV4IGVsZW1lbnRzIHdpdGggbWF0Y2hpbmcgZmllbGQgYW5kIG5hbWUKLSAgICAgKiBwYWlycy4gIFRoZSBidWlsZGVyIHN0YXJ0cyBlbXB0eS4gIFRoZSBvcmRlciBpbiB3aGljaCBlbGVtZW50cyBhcmUgYWRkZWQKLSAgICAgKiBpcyByZXRhaW5lZCBmb3IgdGhlIGxheW91dCBpbiBtZW1vcnkuCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOwotICAgICAgICBFbGVtZW50W10gbUVsZW1lbnRzOwotICAgICAgICBTdHJpbmdbXSBtRWxlbWVudE5hbWVzOwotICAgICAgICBpbnRbXSBtQXJyYXlTaXplczsKLSAgICAgICAgaW50IG1Db3VudDsKLSAgICAgICAgaW50IG1Ta2lwUGFkZGluZzsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlIGEgYnVpbGRlciBvYmplY3QuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBycwotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgICAgICBtUlMgPSByczsKLSAgICAgICAgICAgIG1Db3VudCA9IDA7Ci0gICAgICAgICAgICBtRWxlbWVudHMgPSBuZXcgRWxlbWVudFs4XTsKLSAgICAgICAgICAgIG1FbGVtZW50TmFtZXMgPSBuZXcgU3RyaW5nWzhdOwotICAgICAgICAgICAgbUFycmF5U2l6ZXMgPSBuZXcgaW50WzhdOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFkZCBhbiBhcnJheSBvZiBlbGVtZW50cyB0byB0aGlzIGVsZW1lbnQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBlbGVtZW50Ci0gICAgICAgICAqIEBwYXJhbSBuYW1lCi0gICAgICAgICAqIEBwYXJhbSBhcnJheVNpemUKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZChFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBuYW1lLCBpbnQgYXJyYXlTaXplKSB7Ci0gICAgICAgICAgICBpZiAoYXJyYXlTaXplIDwgMSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQXJyYXkgc2l6ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIDEuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNraXAgcGFkZGluZyBmaWVsZHMgYWZ0ZXIgYSB2ZWN0b3IgMyB0eXBlLgotICAgICAgICAgICAgaWYgKG1Ta2lwUGFkZGluZyAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgiI3BhZGRpbmdfIikpIHsKLSAgICAgICAgICAgICAgICAgICAgbVNraXBQYWRkaW5nID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZWxlbWVudC5tVmVjdG9yU2l6ZSA9PSAzKSB7Ci0gICAgICAgICAgICAgICAgbVNraXBQYWRkaW5nID0gMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbVNraXBQYWRkaW5nID0gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYobUNvdW50ID09IG1FbGVtZW50cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBFbGVtZW50W10gZSA9IG5ldyBFbGVtZW50W21Db3VudCArIDhdOwotICAgICAgICAgICAgICAgIFN0cmluZ1tdIHMgPSBuZXcgU3RyaW5nW21Db3VudCArIDhdOwotICAgICAgICAgICAgICAgIGludFtdIGFzID0gbmV3IGludFttQ291bnQgKyA4XTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1FbGVtZW50cywgMCwgZSwgMCwgbUNvdW50KTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1FbGVtZW50TmFtZXMsIDAsIHMsIDAsIG1Db3VudCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtQXJyYXlTaXplcywgMCwgYXMsIDAsIG1Db3VudCk7Ci0gICAgICAgICAgICAgICAgbUVsZW1lbnRzID0gZTsKLSAgICAgICAgICAgICAgICBtRWxlbWVudE5hbWVzID0gczsKLSAgICAgICAgICAgICAgICBtQXJyYXlTaXplcyA9IGFzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUVsZW1lbnRzW21Db3VudF0gPSBlbGVtZW50OwotICAgICAgICAgICAgbUVsZW1lbnROYW1lc1ttQ291bnRdID0gbmFtZTsKLSAgICAgICAgICAgIG1BcnJheVNpemVzW21Db3VudF0gPSBhcnJheVNpemU7Ci0gICAgICAgICAgICBtQ291bnQrKzsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFkZCBhIHNpbmdsZSBlbGVtZW50IHRvIHRoaXMgRWxlbWVudC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGVsZW1lbnQKLSAgICAgICAgICogQHBhcmFtIG5hbWUKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZChFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gYWRkKGVsZW1lbnQsIG5hbWUsIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENyZWF0ZSB0aGUgZWxlbWVudCBmcm9tIHRoaXMgYnVpbGRlci4KLSAgICAgICAgICoKLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBFbGVtZW50Ci0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgRWxlbWVudCBjcmVhdGUoKSB7Ci0gICAgICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgICAgIEVsZW1lbnRbXSBlaW4gPSBuZXcgRWxlbWVudFttQ291bnRdOwotICAgICAgICAgICAgU3RyaW5nW10gc2luID0gbmV3IFN0cmluZ1ttQ291bnRdOwotICAgICAgICAgICAgaW50W10gYXNpbiA9IG5ldyBpbnRbbUNvdW50XTsKLSAgICAgICAgICAgIGphdmEubGFuZy5TeXN0ZW0uYXJyYXljb3B5KG1FbGVtZW50cywgMCwgZWluLCAwLCBtQ291bnQpOwotICAgICAgICAgICAgamF2YS5sYW5nLlN5c3RlbS5hcnJheWNvcHkobUVsZW1lbnROYW1lcywgMCwgc2luLCAwLCBtQ291bnQpOwotICAgICAgICAgICAgamF2YS5sYW5nLlN5c3RlbS5hcnJheWNvcHkobUFycmF5U2l6ZXMsIDAsIGFzaW4sIDAsIG1Db3VudCk7Ci0KLSAgICAgICAgICAgIGludFtdIGlkcyA9IG5ldyBpbnRbZWluLmxlbmd0aF07Ci0gICAgICAgICAgICBmb3IgKGludCBjdCA9IDA7IGN0IDwgZWluLmxlbmd0aDsgY3QrKyApIHsKLSAgICAgICAgICAgICAgICBpZHNbY3RdID0gZWluW2N0XS5nZXRJRChtUlMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGlkID0gbVJTLm5FbGVtZW50Q3JlYXRlMihpZHMsIHNpbiwgYXNpbik7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnQoaWQsIG1SUywgZWluLCBzaW4sIGFzaW4pOwotICAgICAgICB9Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpZWxkUGFja2VyLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpZWxkUGFja2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZDk3ZDYuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWVsZFBhY2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBqYXZhLnV0aWwuQml0U2V0OwotCi0vKioKLSAqIFV0aWxpdHkgY2xhc3MgZm9yIHBhY2tpbmcgYXJndW1lbnRzIGFuZCBzdHJ1Y3R1cmVzIGZyb20gQW5kcm9pZCBzeXN0ZW0gb2JqZWN0cyB0bwotICogUmVuZGVyU2NyaXB0IG9iamVjdHMuCi0gKgotICogVGhpcyBjbGFzcyBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgdG8gc3VwcG9ydCB0aGUKLSAqIHJlZmxlY3RlZCBjb2RlIGdlbmVyYXRlZCBieSB0aGUgUlMgdG9vbCBjaGFpbi4gIEl0IHNob3VsZCBub3QKLSAqIGJlIGNhbGxlZCBkaXJlY3RseS4KLSAqCi0gKiovCi1wdWJsaWMgY2xhc3MgRmllbGRQYWNrZXIgewotICAgIHB1YmxpYyBGaWVsZFBhY2tlcihpbnQgbGVuKSB7Ci0gICAgICAgIG1Qb3MgPSAwOwotICAgICAgICBtTGVuID0gbGVuOwotICAgICAgICBtRGF0YSA9IG5ldyBieXRlW2xlbl07Ci0gICAgICAgIG1BbGlnbm1lbnQgPSBuZXcgQml0U2V0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIEZpZWxkUGFja2VyKGJ5dGVbXSBkYXRhKSB7Ci0gICAgICAgIG1Qb3MgPSAwOwotICAgICAgICBtTGVuID0gZGF0YS5sZW5ndGg7Ci0gICAgICAgIG1EYXRhID0gZGF0YTsKLSAgICAgICAgbUFsaWdubWVudCA9IG5ldyBCaXRTZXQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhbGlnbihpbnQgdikgewotICAgICAgICBpZiAoKHYgPD0gMCkgfHwgKCh2ICYgKHYgLSAxKSkgIT0gMCkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBub24temVybyBwb3dlciBvZiAyOiAiICsgdik7Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoKG1Qb3MgJiAodiAtIDEpKSAhPSAwKSB7Ci0gICAgICAgICAgICBtQWxpZ25tZW50LmZsaXAobVBvcyk7Ci0gICAgICAgICAgICBtRGF0YVttUG9zKytdID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN1YmFsaWduKGludCB2KSB7Ci0gICAgICAgIGlmICgodiAmICh2IC0gMSkpICE9IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBub24temVybyBwb3dlciBvZiAyOiAiICsgdik7Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoKG1Qb3MgJiAodiAtIDEpKSAhPSAwKSB7Ci0gICAgICAgICAgICBtUG9zLS07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVBvcyA+IDApIHsKLSAgICAgICAgICAgIHdoaWxlIChtQWxpZ25tZW50LmdldChtUG9zIC0gMSkgPT0gdHJ1ZSkgewotICAgICAgICAgICAgICAgIG1Qb3MtLTsKLSAgICAgICAgICAgICAgICBtQWxpZ25tZW50LmZsaXAobVBvcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgewotICAgICAgICBtUG9zID0gMDsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgcmVzZXQoaW50IGkpIHsKLSAgICAgICAgaWYgKChpIDwgMCkgfHwgKGkgPj0gbUxlbikpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigib3V0IG9mIHJhbmdlIGFyZ3VtZW50OiAiICsgaSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVBvcyA9IGk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2tpcChpbnQgaSkgewotICAgICAgICBpbnQgcmVzID0gbVBvcyArIGk7Ci0gICAgICAgIGlmICgocmVzIDwgMCkgfHwgKHJlcyA+IG1MZW4pKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm91dCBvZiByYW5nZSBhcmd1bWVudDogIiArIGkpOwotICAgICAgICB9Ci0gICAgICAgIG1Qb3MgPSByZXM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkSTgoYnl0ZSB2KSB7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSB2OwotICAgIH0KLQotICAgIHB1YmxpYyBieXRlIHN1Ykk4KCkgewotICAgICAgICBzdWJhbGlnbigxKTsKLSAgICAgICAgcmV0dXJuIG1EYXRhWy0tbVBvc107Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkSTE2KHNob3J0IHYpIHsKLSAgICAgICAgYWxpZ24oMik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkodiAmIDB4ZmYpOwotICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKHYgPj4gOCk7Ci0gICAgfQotCi0gICAgcHVibGljIHNob3J0IHN1YkkxNigpIHsKLSAgICAgICAgc3ViYWxpZ24oMik7Ci0gICAgICAgIHNob3J0IHYgPSAwOwotICAgICAgICB2ID0gKHNob3J0KSgobURhdGFbLS1tUG9zXSAmIDB4ZmYpIDw8IDgpOwotICAgICAgICB2ID0gKHNob3J0KSh2IHwgKHNob3J0KShtRGF0YVstLW1Qb3NdICYgMHhmZikpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyB2b2lkIGFkZEkzMihpbnQgdikgewotICAgICAgICBhbGlnbig0KTsKLSAgICAgICAgbURhdGFbbVBvcysrXSA9IChieXRlKSh2ICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gOCkgJiAweGZmKTsKLSAgICAgICAgbURhdGFbbVBvcysrXSA9IChieXRlKSgodiA+PiAxNikgJiAweGZmKTsKLSAgICAgICAgbURhdGFbbVBvcysrXSA9IChieXRlKSgodiA+PiAyNCkgJiAweGZmKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IHN1YkkzMigpIHsKLSAgICAgICAgc3ViYWxpZ24oNCk7Ci0gICAgICAgIGludCB2ID0gMDsKLSAgICAgICAgdiA9ICgobURhdGFbLS1tUG9zXSAmIDB4ZmYpIDw8IDI0KTsKLSAgICAgICAgdiA9IHYgfCAoKG1EYXRhWy0tbVBvc10gJiAweGZmKSA8PCAxNik7Ci0gICAgICAgIHYgPSB2IHwgKChtRGF0YVstLW1Qb3NdICYgMHhmZikgPDwgOCk7Ci0gICAgICAgIHYgPSB2IHwgKChtRGF0YVstLW1Qb3NdICYgMHhmZikpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyB2b2lkIGFkZEk2NChsb25nIHYpIHsKLSAgICAgICAgYWxpZ24oOCk7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkodiAmIDB4ZmYpOwotICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDgpICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gMTYpICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gMjQpICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gMzIpICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gNDApICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gNDgpICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gNTYpICYgMHhmZik7Ci0gICAgfQotCi0gICAgcHVibGljIGxvbmcgc3ViSTY0KCkgewotICAgICAgICBzdWJhbGlnbig4KTsKLSAgICAgICAgbG9uZyB2ID0gMDsKLSAgICAgICAgYnl0ZSB4ID0gMDsKLSAgICAgICAgeCA9ICgobURhdGFbLS1tUG9zXSkpOwotICAgICAgICB2ID0gKGxvbmcpKHYgfCAoKChsb25nKXgpICYgMHhmZikgPDwgNTZsKTsKLSAgICAgICAgeCA9ICgobURhdGFbLS1tUG9zXSkpOwotICAgICAgICB2ID0gKGxvbmcpKHYgfCAoKChsb25nKXgpICYgMHhmZikgPDwgNDhsKTsKLSAgICAgICAgeCA9ICgobURhdGFbLS1tUG9zXSkpOwotICAgICAgICB2ID0gKGxvbmcpKHYgfCAoKChsb25nKXgpICYgMHhmZikgPDwgNDBsKTsKLSAgICAgICAgeCA9ICgobURhdGFbLS1tUG9zXSkpOwotICAgICAgICB2ID0gKGxvbmcpKHYgfCAoKChsb25nKXgpICYgMHhmZikgPDwgMzJsKTsKLSAgICAgICAgeCA9ICgobURhdGFbLS1tUG9zXSkpOwotICAgICAgICB2ID0gKGxvbmcpKHYgfCAoKChsb25nKXgpICYgMHhmZikgPDwgMjRsKTsKLSAgICAgICAgeCA9ICgobURhdGFbLS1tUG9zXSkpOwotICAgICAgICB2ID0gKGxvbmcpKHYgfCAoKChsb25nKXgpICYgMHhmZikgPDwgMTZsKTsKLSAgICAgICAgeCA9ICgobURhdGFbLS1tUG9zXSkpOwotICAgICAgICB2ID0gKGxvbmcpKHYgfCAoKChsb25nKXgpICYgMHhmZikgPDwgOGwpOwotICAgICAgICB4ID0gKChtRGF0YVstLW1Qb3NdKSk7Ci0gICAgICAgIHYgPSAobG9uZykodiB8ICgoKGxvbmcpeCkgJiAweGZmKSk7Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZFU4KHNob3J0IHYpIHsKLSAgICAgICAgaWYgKCh2IDwgMCkgfHwgKHYgPiAweGZmKSkgewotICAgICAgICAgICAgYW5kcm9pZC51dGlsLkxvZy5lKCJycyIsICJGaWVsZFBhY2tlci5hZGRVOCggIiArIHYgKyAiICkiKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNhdmluZyB2YWx1ZSBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUiKTsKLSAgICAgICAgfQotICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpdjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRVMTYoaW50IHYpIHsKLSAgICAgICAgaWYgKCh2IDwgMCkgfHwgKHYgPiAweGZmZmYpKSB7Ci0gICAgICAgICAgICBhbmRyb2lkLnV0aWwuTG9nLmUoInJzIiwgIkZpZWxkUGFja2VyLmFkZFUxNiggIiArIHYgKyAiICkiKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNhdmluZyB2YWx1ZSBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUiKTsKLSAgICAgICAgfQotICAgICAgICBhbGlnbigyKTsKLSAgICAgICAgbURhdGFbbVBvcysrXSA9IChieXRlKSh2ICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkodiA+PiA4KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRVMzIobG9uZyB2KSB7Ci0gICAgICAgIGlmICgodiA8IDApIHx8ICh2ID4gMHhmZmZmZmZmZkwpKSB7Ci0gICAgICAgICAgICBhbmRyb2lkLnV0aWwuTG9nLmUoInJzIiwgIkZpZWxkUGFja2VyLmFkZFUzMiggIiArIHYgKyAiICkiKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNhdmluZyB2YWx1ZSBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUiKTsKLSAgICAgICAgfQotICAgICAgICBhbGlnbig0KTsKLSAgICAgICAgbURhdGFbbVBvcysrXSA9IChieXRlKSh2ICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gOCkgJiAweGZmKTsKLSAgICAgICAgbURhdGFbbVBvcysrXSA9IChieXRlKSgodiA+PiAxNikgJiAweGZmKTsKLSAgICAgICAgbURhdGFbbVBvcysrXSA9IChieXRlKSgodiA+PiAyNCkgJiAweGZmKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRVNjQobG9uZyB2KSB7Ci0gICAgICAgIGlmICh2IDwgMCkgewotICAgICAgICAgICAgYW5kcm9pZC51dGlsLkxvZy5lKCJycyIsICJGaWVsZFBhY2tlci5hZGRVNjQoICIgKyB2ICsgIiApIik7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTYXZpbmcgdmFsdWUgb3V0IG9mIHJhbmdlIGZvciB0eXBlIik7Ci0gICAgICAgIH0KLSAgICAgICAgYWxpZ24oOCk7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkodiAmIDB4ZmYpOwotICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDgpICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gMTYpICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gMjQpICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gMzIpICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gNDApICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gNDgpICYgMHhmZik7Ci0gICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gNTYpICYgMHhmZik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkRjMyKGZsb2F0IHYpIHsKLSAgICAgICAgYWRkSTMyKEZsb2F0LmZsb2F0VG9SYXdJbnRCaXRzKHYpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmxvYXQgc3ViRjMyKCkgewotICAgICAgICByZXR1cm4gRmxvYXQuaW50Qml0c1RvRmxvYXQoc3ViSTMyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZEY2NChkb3VibGUgdikgewotICAgICAgICBhZGRJNjQoRG91YmxlLmRvdWJsZVRvUmF3TG9uZ0JpdHModikpOwotICAgIH0KLQotICAgIHB1YmxpYyBkb3VibGUgc3ViRjY0KCkgewotICAgICAgICByZXR1cm4gRG91YmxlLmxvbmdCaXRzVG9Eb3VibGUoc3ViSTY0KCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZE9iaihCYXNlT2JqIG9iaikgewotICAgICAgICBpZiAob2JqICE9IG51bGwpIHsKLSAgICAgICAgICAgIGFkZEkzMihvYmouZ2V0SUQobnVsbCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWRkSTMyKDApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkRjMyKEZsb2F0MiB2KSB7Ci0gICAgICAgIGFkZEYzMih2LngpOwotICAgICAgICBhZGRGMzIodi55KTsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgYWRkRjMyKEZsb2F0MyB2KSB7Ci0gICAgICAgIGFkZEYzMih2LngpOwotICAgICAgICBhZGRGMzIodi55KTsKLSAgICAgICAgYWRkRjMyKHYueik7Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIGFkZEYzMihGbG9hdDQgdikgewotICAgICAgICBhZGRGMzIodi54KTsKLSAgICAgICAgYWRkRjMyKHYueSk7Ci0gICAgICAgIGFkZEYzMih2LnopOwotICAgICAgICBhZGRGMzIodi53KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRGNjQoRG91YmxlMiB2KSB7Ci0gICAgICAgIGFkZEY2NCh2LngpOwotICAgICAgICBhZGRGNjQodi55KTsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgYWRkRjY0KERvdWJsZTMgdikgewotICAgICAgICBhZGRGNjQodi54KTsKLSAgICAgICAgYWRkRjY0KHYueSk7Ci0gICAgICAgIGFkZEY2NCh2LnopOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBhZGRGNjQoRG91YmxlNCB2KSB7Ci0gICAgICAgIGFkZEY2NCh2LngpOwotICAgICAgICBhZGRGNjQodi55KTsKLSAgICAgICAgYWRkRjY0KHYueik7Ci0gICAgICAgIGFkZEY2NCh2LncpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZEk4KEJ5dGUyIHYpIHsKLSAgICAgICAgYWRkSTgodi54KTsKLSAgICAgICAgYWRkSTgodi55KTsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgYWRkSTgoQnl0ZTMgdikgewotICAgICAgICBhZGRJOCh2LngpOwotICAgICAgICBhZGRJOCh2LnkpOwotICAgICAgICBhZGRJOCh2LnopOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBhZGRJOChCeXRlNCB2KSB7Ci0gICAgICAgIGFkZEk4KHYueCk7Ci0gICAgICAgIGFkZEk4KHYueSk7Ci0gICAgICAgIGFkZEk4KHYueik7Ci0gICAgICAgIGFkZEk4KHYudyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkVTgoU2hvcnQyIHYpIHsKLSAgICAgICAgYWRkVTgodi54KTsKLSAgICAgICAgYWRkVTgodi55KTsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgYWRkVTgoU2hvcnQzIHYpIHsKLSAgICAgICAgYWRkVTgodi54KTsKLSAgICAgICAgYWRkVTgodi55KTsKLSAgICAgICAgYWRkVTgodi56KTsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgYWRkVTgoU2hvcnQ0IHYpIHsKLSAgICAgICAgYWRkVTgodi54KTsKLSAgICAgICAgYWRkVTgodi55KTsKLSAgICAgICAgYWRkVTgodi56KTsKLSAgICAgICAgYWRkVTgodi53KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRJMTYoU2hvcnQyIHYpIHsKLSAgICAgICAgYWRkSTE2KHYueCk7Ci0gICAgICAgIGFkZEkxNih2LnkpOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBhZGRJMTYoU2hvcnQzIHYpIHsKLSAgICAgICAgYWRkSTE2KHYueCk7Ci0gICAgICAgIGFkZEkxNih2LnkpOwotICAgICAgICBhZGRJMTYodi56KTsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgYWRkSTE2KFNob3J0NCB2KSB7Ci0gICAgICAgIGFkZEkxNih2LngpOwotICAgICAgICBhZGRJMTYodi55KTsKLSAgICAgICAgYWRkSTE2KHYueik7Ci0gICAgICAgIGFkZEkxNih2LncpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZFUxNihJbnQyIHYpIHsKLSAgICAgICAgYWRkVTE2KHYueCk7Ci0gICAgICAgIGFkZFUxNih2LnkpOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBhZGRVMTYoSW50MyB2KSB7Ci0gICAgICAgIGFkZFUxNih2LngpOwotICAgICAgICBhZGRVMTYodi55KTsKLSAgICAgICAgYWRkVTE2KHYueik7Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIGFkZFUxNihJbnQ0IHYpIHsKLSAgICAgICAgYWRkVTE2KHYueCk7Ci0gICAgICAgIGFkZFUxNih2LnkpOwotICAgICAgICBhZGRVMTYodi56KTsKLSAgICAgICAgYWRkVTE2KHYudyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkSTMyKEludDIgdikgewotICAgICAgICBhZGRJMzIodi54KTsKLSAgICAgICAgYWRkSTMyKHYueSk7Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIGFkZEkzMihJbnQzIHYpIHsKLSAgICAgICAgYWRkSTMyKHYueCk7Ci0gICAgICAgIGFkZEkzMih2LnkpOwotICAgICAgICBhZGRJMzIodi56KTsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgYWRkSTMyKEludDQgdikgewotICAgICAgICBhZGRJMzIodi54KTsKLSAgICAgICAgYWRkSTMyKHYueSk7Ci0gICAgICAgIGFkZEkzMih2LnopOwotICAgICAgICBhZGRJMzIodi53KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRVMzIoTG9uZzIgdikgewotICAgICAgICBhZGRVMzIodi54KTsKLSAgICAgICAgYWRkVTMyKHYueSk7Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIGFkZFUzMihMb25nMyB2KSB7Ci0gICAgICAgIGFkZFUzMih2LngpOwotICAgICAgICBhZGRVMzIodi55KTsKLSAgICAgICAgYWRkVTMyKHYueik7Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIGFkZFUzMihMb25nNCB2KSB7Ci0gICAgICAgIGFkZFUzMih2LngpOwotICAgICAgICBhZGRVMzIodi55KTsKLSAgICAgICAgYWRkVTMyKHYueik7Ci0gICAgICAgIGFkZFUzMih2LncpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZEk2NChMb25nMiB2KSB7Ci0gICAgICAgIGFkZEk2NCh2LngpOwotICAgICAgICBhZGRJNjQodi55KTsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgYWRkSTY0KExvbmczIHYpIHsKLSAgICAgICAgYWRkSTY0KHYueCk7Ci0gICAgICAgIGFkZEk2NCh2LnkpOwotICAgICAgICBhZGRJNjQodi56KTsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgYWRkSTY0KExvbmc0IHYpIHsKLSAgICAgICAgYWRkSTY0KHYueCk7Ci0gICAgICAgIGFkZEk2NCh2LnkpOwotICAgICAgICBhZGRJNjQodi56KTsKLSAgICAgICAgYWRkSTY0KHYudyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkVTY0KExvbmcyIHYpIHsKLSAgICAgICAgYWRkVTY0KHYueCk7Ci0gICAgICAgIGFkZFU2NCh2LnkpOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBhZGRVNjQoTG9uZzMgdikgewotICAgICAgICBhZGRVNjQodi54KTsKLSAgICAgICAgYWRkVTY0KHYueSk7Ci0gICAgICAgIGFkZFU2NCh2LnopOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBhZGRVNjQoTG9uZzQgdikgewotICAgICAgICBhZGRVNjQodi54KTsKLSAgICAgICAgYWRkVTY0KHYueSk7Ci0gICAgICAgIGFkZFU2NCh2LnopOwotICAgICAgICBhZGRVNjQodi53KTsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBGbG9hdDIgc3ViRmxvYXQyKCkgewotICAgICAgICBGbG9hdDIgdiA9IG5ldyBGbG9hdDIoKTsKLSAgICAgICAgdi55ID0gc3ViRjMyKCk7Ci0gICAgICAgIHYueCA9IHN1YkYzMigpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0gICAgcHVibGljIEZsb2F0MyBzdWJGbG9hdDMoKSB7Ci0gICAgICAgIEZsb2F0MyB2ID0gbmV3IEZsb2F0MygpOwotICAgICAgICB2LnogPSBzdWJGMzIoKTsKLSAgICAgICAgdi55ID0gc3ViRjMyKCk7Ci0gICAgICAgIHYueCA9IHN1YkYzMigpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0gICAgcHVibGljIEZsb2F0NCBzdWJGbG9hdDQoKSB7Ci0gICAgICAgIEZsb2F0NCB2ID0gbmV3IEZsb2F0NCgpOwotICAgICAgICB2LncgPSBzdWJGMzIoKTsKLSAgICAgICAgdi56ID0gc3ViRjMyKCk7Ci0gICAgICAgIHYueSA9IHN1YkYzMigpOwotICAgICAgICB2LnggPSBzdWJGMzIoKTsKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAgcHVibGljIERvdWJsZTIgc3ViRG91YmxlMigpIHsKLSAgICAgICAgRG91YmxlMiB2ID0gbmV3IERvdWJsZTIoKTsKLSAgICAgICAgdi55ID0gc3ViRjY0KCk7Ci0gICAgICAgIHYueCA9IHN1YkY2NCgpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0gICAgcHVibGljIERvdWJsZTMgc3ViRG91YmxlMygpIHsKLSAgICAgICAgRG91YmxlMyB2ID0gbmV3IERvdWJsZTMoKTsKLSAgICAgICAgdi56ID0gc3ViRjY0KCk7Ci0gICAgICAgIHYueSA9IHN1YkY2NCgpOwotICAgICAgICB2LnggPSBzdWJGNjQoKTsKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotICAgIHB1YmxpYyBEb3VibGU0IHN1YkRvdWJsZTQoKSB7Ci0gICAgICAgIERvdWJsZTQgdiA9IG5ldyBEb3VibGU0KCk7Ci0gICAgICAgIHYudyA9IHN1YkY2NCgpOwotICAgICAgICB2LnogPSBzdWJGNjQoKTsKLSAgICAgICAgdi55ID0gc3ViRjY0KCk7Ci0gICAgICAgIHYueCA9IHN1YkY2NCgpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQnl0ZTIgc3ViQnl0ZTIoKSB7Ci0gICAgICAgIEJ5dGUyIHYgPSBuZXcgQnl0ZTIoKTsKLSAgICAgICAgdi55ID0gc3ViSTgoKTsKLSAgICAgICAgdi54ID0gc3ViSTgoKTsKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotICAgIHB1YmxpYyBCeXRlMyBzdWJCeXRlMygpIHsKLSAgICAgICAgQnl0ZTMgdiA9IG5ldyBCeXRlMygpOwotICAgICAgICB2LnogPSBzdWJJOCgpOwotICAgICAgICB2LnkgPSBzdWJJOCgpOwotICAgICAgICB2LnggPSBzdWJJOCgpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0gICAgcHVibGljIEJ5dGU0IHN1YkJ5dGU0KCkgewotICAgICAgICBCeXRlNCB2ID0gbmV3IEJ5dGU0KCk7Ci0gICAgICAgIHYudyA9IHN1Ykk4KCk7Ci0gICAgICAgIHYueiA9IHN1Ykk4KCk7Ci0gICAgICAgIHYueSA9IHN1Ykk4KCk7Ci0gICAgICAgIHYueCA9IHN1Ykk4KCk7Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAgIHB1YmxpYyBTaG9ydDIgc3ViU2hvcnQyKCkgewotICAgICAgICBTaG9ydDIgdiA9IG5ldyBTaG9ydDIoKTsKLSAgICAgICAgdi55ID0gc3ViSTE2KCk7Ci0gICAgICAgIHYueCA9IHN1YkkxNigpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0gICAgcHVibGljIFNob3J0MyBzdWJTaG9ydDMoKSB7Ci0gICAgICAgIFNob3J0MyB2ID0gbmV3IFNob3J0MygpOwotICAgICAgICB2LnogPSBzdWJJMTYoKTsKLSAgICAgICAgdi55ID0gc3ViSTE2KCk7Ci0gICAgICAgIHYueCA9IHN1YkkxNigpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0gICAgcHVibGljIFNob3J0NCBzdWJTaG9ydDQoKSB7Ci0gICAgICAgIFNob3J0NCB2ID0gbmV3IFNob3J0NCgpOwotICAgICAgICB2LncgPSBzdWJJMTYoKTsKLSAgICAgICAgdi56ID0gc3ViSTE2KCk7Ci0gICAgICAgIHYueSA9IHN1YkkxNigpOwotICAgICAgICB2LnggPSBzdWJJMTYoKTsKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAgcHVibGljIEludDIgc3ViSW50MigpIHsKLSAgICAgICAgSW50MiB2ID0gbmV3IEludDIoKTsKLSAgICAgICAgdi55ID0gc3ViSTMyKCk7Ci0gICAgICAgIHYueCA9IHN1YkkzMigpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0gICAgcHVibGljIEludDMgc3ViSW50MygpIHsKLSAgICAgICAgSW50MyB2ID0gbmV3IEludDMoKTsKLSAgICAgICAgdi56ID0gc3ViSTMyKCk7Ci0gICAgICAgIHYueSA9IHN1YkkzMigpOwotICAgICAgICB2LnggPSBzdWJJMzIoKTsKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotICAgIHB1YmxpYyBJbnQ0IHN1YkludDQoKSB7Ci0gICAgICAgIEludDQgdiA9IG5ldyBJbnQ0KCk7Ci0gICAgICAgIHYudyA9IHN1YkkzMigpOwotICAgICAgICB2LnogPSBzdWJJMzIoKTsKLSAgICAgICAgdi55ID0gc3ViSTMyKCk7Ci0gICAgICAgIHYueCA9IHN1YkkzMigpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZzIgc3ViTG9uZzIoKSB7Ci0gICAgICAgIExvbmcyIHYgPSBuZXcgTG9uZzIoKTsKLSAgICAgICAgdi55ID0gc3ViSTY0KCk7Ci0gICAgICAgIHYueCA9IHN1Ykk2NCgpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0gICAgcHVibGljIExvbmczIHN1YkxvbmczKCkgewotICAgICAgICBMb25nMyB2ID0gbmV3IExvbmczKCk7Ci0gICAgICAgIHYueiA9IHN1Ykk2NCgpOwotICAgICAgICB2LnkgPSBzdWJJNjQoKTsKLSAgICAgICAgdi54ID0gc3ViSTY0KCk7Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLSAgICBwdWJsaWMgTG9uZzQgc3ViTG9uZzQoKSB7Ci0gICAgICAgIExvbmc0IHYgPSBuZXcgTG9uZzQoKTsKLSAgICAgICAgdi53ID0gc3ViSTY0KCk7Ci0gICAgICAgIHYueiA9IHN1Ykk2NCgpOwotICAgICAgICB2LnkgPSBzdWJJNjQoKTsKLSAgICAgICAgdi54ID0gc3ViSTY0KCk7Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLQotCi0KLSAgICBwdWJsaWMgdm9pZCBhZGRNYXRyaXgoTWF0cml4NGYgdikgewotICAgICAgICBmb3IgKGludCBpPTA7IGkgPCB2Lm1NYXQubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGFkZEYzMih2Lm1NYXRbaV0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIE1hdHJpeDRmIHN1Yk1hdHJpeDRmKCkgewotICAgICAgICBNYXRyaXg0ZiB2ID0gbmV3IE1hdHJpeDRmKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSB2Lm1NYXQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIHYubU1hdFtpXSA9IHN1YkYzMigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZE1hdHJpeChNYXRyaXgzZiB2KSB7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHYubU1hdC5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgYWRkRjMyKHYubU1hdFtpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgTWF0cml4M2Ygc3ViTWF0cml4M2YoKSB7Ci0gICAgICAgIE1hdHJpeDNmIHYgPSBuZXcgTWF0cml4M2YoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IHYubU1hdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgdi5tTWF0W2ldID0gc3ViRjMyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkTWF0cml4KE1hdHJpeDJmIHYpIHsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgdi5tTWF0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBhZGRGMzIodi5tTWF0W2ldKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBNYXRyaXgyZiBzdWJNYXRyaXgyZigpIHsKLSAgICAgICAgTWF0cml4MmYgdiA9IG5ldyBNYXRyaXgyZigpOwotICAgICAgICBmb3IgKGludCBpID0gdi5tTWF0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICB2Lm1NYXRbaV0gPSBzdWJGMzIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRCb29sZWFuKGJvb2xlYW4gdikgewotICAgICAgICBhZGRJOCgoYnl0ZSkodiA/IDEgOiAwKSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc3ViQm9vbGVhbigpIHsKLSAgICAgICAgYnl0ZSB2ID0gc3ViSTgoKTsKLSAgICAgICAgaWYgKHYgPT0gMSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBieXRlW10gZ2V0RGF0YSgpIHsKLSAgICAgICAgcmV0dXJuIG1EYXRhOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgYnl0ZSBtRGF0YVtdOwotICAgIHByaXZhdGUgaW50IG1Qb3M7Ci0gICAgcHJpdmF0ZSBpbnQgbUxlbjsKLSAgICBwcml2YXRlIEJpdFNldCBtQWxpZ25tZW50OwotCi19Ci0KLQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWxlQTNELmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpbGVBM0QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQxZjAyZC4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpbGVBM0QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwotCi0vKioKLSAqIEBoaWRlCi0gKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAqIEZpbGVBM0QgYWxsb3dzIHVzZXJzIHRvIGxvYWQgUmVuZGVyU2NyaXB0IG9iamVjdHMgZnJvbSBmaWxlcwotICogb3IgcmVzb3VyY2VzIHN0b3JlZCBvbiBkaXNrLiBJdCBjb3VsZCBiZSB1c2VkIHRvIGxvYWQgaXRlbXMKLSAqIHN1Y2ggYXMgM0QgZ2VvbWV0cnkgZGF0YSBjb252ZXJ0ZWQgdG8gYSBSZW5kZXJTY3JpcHQgZm9ybWF0IGZyb20KLSAqIGNvbnRlbnQgY3JlYXRpb24gdG9vbHMuIEN1cnJlbnRseSBvbmx5IG1lc2hlcyBhcmUgc3VwcG9ydGVkCi0gKiBpbiBGaWxlQTNELgotICoKLSAqIFdoZW4gc3VjY2Vzc2Z1bGx5IGxvYWRlZCwgRmlsZUEzRCB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mCi0gKiBpbmRleCBlbnRyaWVzIGZvciBhbGwgdGhlIG9iamVjdHMgc3RvcmVkIGluc2lkZSBpdC4KLSAqCi0gKiovCi1wdWJsaWMgY2xhc3MgRmlsZUEzRCBleHRlbmRzIEJhc2VPYmogewotCi0gICAgLyoqCi0gICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAqIFNwZWNpZmllcyB3aGF0IHJlbmRlcnNjcmlwdCBvYmplY3QgdHlwZSBpcyBjb250YWluZWQgd2l0aGluCi0gICAgKiB0aGUgRmlsZUEzRCBJbmRleEVudHJ5Ci0gICAgKiovCi0gICAgcHVibGljIGVudW0gRW50cnlUeXBlIHsKLQotICAgICAgICAvKioKLSAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgKiBVbmtub3duIG9yIG9yIGludmFsaWQgb2JqZWN0LCBub3RoaW5nIHdpbGwgYmUgbG9hZGVkCi0gICAgICAgICoqLwotICAgICAgICBVTktOT1dOICgwKSwKLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogUmVuZGVyU2NyaXB0IE1lc2ggb2JqZWN0Ci0gICAgICAgICoqLwotICAgICAgICBNRVNIICgxKTsKLQotICAgICAgICBpbnQgbUlEOwotICAgICAgICBFbnRyeVR5cGUoaW50IGlkKSB7Ci0gICAgICAgICAgICBtSUQgPSBpZDsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBFbnRyeVR5cGUgdG9FbnRyeVR5cGUoaW50IGludElEKSB7Ci0gICAgICAgICAgICByZXR1cm4gRW50cnlUeXBlLnZhbHVlcygpW2ludElEXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgKiBJbmRleEVudHJ5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9uZSBvZiB0aGUgUmVuZGVyU2NyaXB0Ci0gICAgKiBvYmplY3RzIGluc2lkZSB0aGUgZmlsZSdzIGluZGV4LiBJdCBjb3VsZCBiZSB1c2VkIHRvIHF1ZXJ5IHRoZQotICAgICogb2JqZWN0J3MgdHlwZSBhbmQgYWxzbyBuYW1lIGFuZCBsb2FkIHRoZSBvYmplY3QgaXRzZWxmIGlmCi0gICAgKiBuZWNlc3NhcnkuCi0gICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEluZGV4RW50cnkgewotICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOwotICAgICAgICBpbnQgbUluZGV4OwotICAgICAgICBpbnQgbUlEOwotICAgICAgICBTdHJpbmcgbU5hbWU7Ci0gICAgICAgIEVudHJ5VHlwZSBtRW50cnlUeXBlOwotICAgICAgICBCYXNlT2JqIG1Mb2FkZWRPYmo7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIHJlbmRlcnNjcmlwdCBvYmplY3QgdGhlIGluZGV4IGVudHJ5Ci0gICAgICAgICogZGVzY3JpYmVzCi0gICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuIG5hbWUgb2YgYSByZW5kZXJzY3JpcHQgb2JqZWN0IHRoZSBpbmRleCBlbnRyeQotICAgICAgICAqIGRlc2NyaWJlcwotICAgICAgICAqCi0gICAgICAgICovCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtTmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIFJldHVybnMgdGhlIHR5cGUgb2YgYSByZW5kZXJzY3JpcHQgb2JqZWN0IHRoZSBpbmRleCBlbnRyeQotICAgICAgICAqIGRlc2NyaWJlcwotICAgICAgICAqIEByZXR1cm4gdHlwZSBvZiBhIHJlbmRlcnNjcmlwdCBvYmplY3QgdGhlIGluZGV4IGVudHJ5Ci0gICAgICAgICogICAgICAgICBkZXNjcmliZXMKLSAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEVudHJ5VHlwZSBnZXRFbnRyeVR5cGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUVudHJ5VHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIFVzZWQgdG8gbG9hZCB0aGUgb2JqZWN0IGRlc2NyaWJlZCBieSB0aGUgaW5kZXggZW50cnkKLSAgICAgICAgKiBAcmV0dXJuIGJhc2UgcmVuZGVyc2NyaXB0IG9iamVjdCBkZXNjcmliZWQgYnkgdGhlIGVudHJ5Ci0gICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCYXNlT2JqIGdldE9iamVjdCgpIHsKLSAgICAgICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICAgICAgQmFzZU9iaiBvYmogPSBpbnRlcm5hbENyZWF0ZShtUlMsIHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIG9iajsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIFVzZWQgdG8gbG9hZCB0aGUgbWVzaCBkZXNjcmliZWQgYnkgdGhlIGluZGV4IGVudHJ5LCBvYmplY3QKLSAgICAgICAgKiBkZXNjcmliZWQgYnkgdGhlIGluZGV4IGVudHJ5IG11c3QgYmUgYSByZW5kZXJzY3JpcHQgbWVzaAotICAgICAgICAqCi0gICAgICAgICogQHJldHVybiByZW5kZXJzY3JpcHQgbWVzaCBvYmplY3QgZGVzY3JpYmVkIGJ5IHRoZSBlbnRyeQotICAgICAgICAqLwotICAgICAgICBwdWJsaWMgTWVzaCBnZXRNZXNoKCkgewotICAgICAgICAgICAgcmV0dXJuIChNZXNoKWdldE9iamVjdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHN5bmNocm9uaXplZCBCYXNlT2JqIGludGVybmFsQ3JlYXRlKFJlbmRlclNjcmlwdCBycywgSW5kZXhFbnRyeSBlbnRyeSkgewotICAgICAgICAgICAgaWYoZW50cnkubUxvYWRlZE9iaiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5Lm1Mb2FkZWRPYmo7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRvIGJlIHB1cmdlZCBvbiBjbGVhbnVwCi0gICAgICAgICAgICBpZihlbnRyeS5tRW50cnlUeXBlID09IEVudHJ5VHlwZS5VTktOT1dOKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBvYmplY3RJRCA9IHJzLm5GaWxlQTNER2V0RW50cnlCeUluZGV4KGVudHJ5Lm1JRCwgZW50cnkubUluZGV4KTsKLSAgICAgICAgICAgIGlmKG9iamVjdElEID09IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChlbnRyeS5tRW50cnlUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIE1FU0g6Ci0gICAgICAgICAgICAgICAgZW50cnkubUxvYWRlZE9iaiA9IG5ldyBNZXNoKG9iamVjdElELCBycyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVudHJ5Lm1Mb2FkZWRPYmoudXBkYXRlRnJvbU5hdGl2ZSgpOwotICAgICAgICAgICAgcmV0dXJuIGVudHJ5Lm1Mb2FkZWRPYmo7Ci0gICAgICAgIH0KLQotICAgICAgICBJbmRleEVudHJ5KFJlbmRlclNjcmlwdCBycywgaW50IGluZGV4LCBpbnQgaWQsIFN0cmluZyBuYW1lLCBFbnRyeVR5cGUgdHlwZSkgewotICAgICAgICAgICAgbVJTID0gcnM7Ci0gICAgICAgICAgICBtSW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIG1JRCA9IGlkOwotICAgICAgICAgICAgbU5hbWUgPSBuYW1lOwotICAgICAgICAgICAgbUVudHJ5VHlwZSA9IHR5cGU7Ci0gICAgICAgICAgICBtTG9hZGVkT2JqID0gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEluZGV4RW50cnlbXSBtRmlsZUVudHJpZXM7Ci0gICAgSW5wdXRTdHJlYW0gbUlucHV0U3RyZWFtOwotCi0gICAgRmlsZUEzRChpbnQgaWQsIFJlbmRlclNjcmlwdCBycywgSW5wdXRTdHJlYW0gc3RyZWFtKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgICAgIG1JbnB1dFN0cmVhbSA9IHN0cmVhbTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdEVudHJpZXMoKSB7Ci0gICAgICAgIGludCBudW1GaWxlRW50cmllcyA9IG1SUy5uRmlsZUEzREdldE51bUluZGV4RW50cmllcyhnZXRJRChtUlMpKTsKLSAgICAgICAgaWYobnVtRmlsZUVudHJpZXMgPD0gMCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbUZpbGVFbnRyaWVzID0gbmV3IEluZGV4RW50cnlbbnVtRmlsZUVudHJpZXNdOwotICAgICAgICBpbnRbXSBpZHMgPSBuZXcgaW50W251bUZpbGVFbnRyaWVzXTsKLSAgICAgICAgU3RyaW5nW10gbmFtZXMgPSBuZXcgU3RyaW5nW251bUZpbGVFbnRyaWVzXTsKLQotICAgICAgICBtUlMubkZpbGVBM0RHZXRJbmRleEVudHJpZXMoZ2V0SUQobVJTKSwgbnVtRmlsZUVudHJpZXMsIGlkcywgbmFtZXMpOwotCi0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1GaWxlRW50cmllczsgaSArKykgewotICAgICAgICAgICAgbUZpbGVFbnRyaWVzW2ldID0gbmV3IEluZGV4RW50cnkobVJTLCBpLCBnZXRJRChtUlMpLCBuYW1lc1tpXSwgRW50cnlUeXBlLnRvRW50cnlUeXBlKGlkc1tpXSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBvYmplY3RzIHN0b3JlZCBpbnNpZGUgdGhlIGEzZCBmaWxlCi0gICAgKgotICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgc3RvcmVkIGluc2lkZSB0aGUgYTNkIGZpbGUKLSAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXhFbnRyeUNvdW50KCkgewotICAgICAgICBpZihtRmlsZUVudHJpZXMgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1GaWxlRW50cmllcy5sZW5ndGg7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAqIFJldHVybnMgYW4gaW5kZXggZW50cnkgZnJvbSB0aGUgbGlzdCBvZiBhbGwgb2JqZWN0cyBpbnNpZGUKLSAgICAqIEZpbGVBM0QKLSAgICAqCi0gICAgKiBAcGFyYW0gaW5kZXggbnVtYmVyIG9mIHRoZSBlbnRyeSBmcm9tIHRoZSBsaXN0IHRvIHJldHVybgotICAgICoKLSAgICAqIEByZXR1cm4gZW50cnkgaW4gdGhlIGEzZCBmaWxlIGRlc2NyaWJlZCBieSB0aGUgaW5kZXgKLSAgICAqLwotICAgIHB1YmxpYyBJbmRleEVudHJ5IGdldEluZGV4RW50cnkoaW50IGluZGV4KSB7Ci0gICAgICAgIGlmKGdldEluZGV4RW50cnlDb3VudCgpID09IDAgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IG1GaWxlRW50cmllcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtRmlsZUVudHJpZXNbaW5kZXhdOwotICAgIH0KLQotICAgIC8qKgotICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgKiBDcmVhdGVzIGEgRmlsZUEzRCBvYmplY3QgZnJvbSBhbiBhc3NldCBzdG9yZWQgb24gZGlzawotICAgICoKLSAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBvYmplY3Qgd2lsbCBiZWxvbmcuCi0gICAgKiBAcGFyYW0gbWdyIGFzc2V0IG1hbmFnZXIgdXNlZCB0byBsb2FkIGFzc2V0Ci0gICAgKiBAcGFyYW0gcGF0aCBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0byBsb2FkCi0gICAgKgotICAgICogQHJldHVybiBhM2QgZmlsZSBjb250YWluaW5nIHJlbmRlcnNjcmlwdCBvYmplY3RzCi0gICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEZpbGVBM0QgY3JlYXRlRnJvbUFzc2V0KFJlbmRlclNjcmlwdCBycywgQXNzZXRNYW5hZ2VyIG1nciwgU3RyaW5nIHBhdGgpIHsKLSAgICAgICAgcnMudmFsaWRhdGUoKTsKLSAgICAgICAgaW50IGZpbGVJZCA9IHJzLm5GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0KG1nciwgcGF0aCk7Ci0KLSAgICAgICAgaWYoZmlsZUlkID09IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBjcmVhdGUgYTNkIGZpbGUgZnJvbSBhc3NldCAiICsgcGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgRmlsZUEzRCBmYTNkID0gbmV3IEZpbGVBM0QoZmlsZUlkLCBycywgbnVsbCk7Ci0gICAgICAgIGZhM2QuaW5pdEVudHJpZXMoKTsKLSAgICAgICAgcmV0dXJuIGZhM2Q7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAqIENyZWF0ZXMgYSBGaWxlQTNEIG9iamVjdCBmcm9tIGEgZmlsZSBzdG9yZWQgb24gZGlzawotICAgICoKLSAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBvYmplY3Qgd2lsbCBiZWxvbmcuCi0gICAgKiBAcGFyYW0gcGF0aCBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0byBsb2FkCi0gICAgKgotICAgICogQHJldHVybiBhM2QgZmlsZSBjb250YWluaW5nIHJlbmRlcnNjcmlwdCBvYmplY3RzCi0gICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEZpbGVBM0QgY3JlYXRlRnJvbUZpbGUoUmVuZGVyU2NyaXB0IHJzLCBTdHJpbmcgcGF0aCkgewotICAgICAgICBpbnQgZmlsZUlkID0gcnMubkZpbGVBM0RDcmVhdGVGcm9tRmlsZShwYXRoKTsKLQotICAgICAgICBpZihmaWxlSWQgPT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGNyZWF0ZSBhM2QgZmlsZSBmcm9tICIgKyBwYXRoKTsKLSAgICAgICAgfQotICAgICAgICBGaWxlQTNEIGZhM2QgPSBuZXcgRmlsZUEzRChmaWxlSWQsIHJzLCBudWxsKTsKLSAgICAgICAgZmEzZC5pbml0RW50cmllcygpOwotICAgICAgICByZXR1cm4gZmEzZDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICogQ3JlYXRlcyBhIEZpbGVBM0Qgb2JqZWN0IGZyb20gYSBmaWxlIHN0b3JlZCBvbiBkaXNrCi0gICAgKgotICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIG9iamVjdCB3aWxsIGJlbG9uZy4KLSAgICAqIEBwYXJhbSBwYXRoIGxvY2F0aW9uIG9mIHRoZSBmaWxlIHRvIGxvYWQKLSAgICAqCi0gICAgKiBAcmV0dXJuIGEzZCBmaWxlIGNvbnRhaW5pbmcgcmVuZGVyc2NyaXB0IG9iamVjdHMKLSAgICAqLwotICAgIHN0YXRpYyBwdWJsaWMgRmlsZUEzRCBjcmVhdGVGcm9tRmlsZShSZW5kZXJTY3JpcHQgcnMsIEZpbGUgcGF0aCkgewotICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUZpbGUocnMsIHBhdGguZ2V0QWJzb2x1dGVQYXRoKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgKiBDcmVhdGVzIGEgRmlsZUEzRCBvYmplY3QgZnJvbSBhbiBhcHBsaWNhdGlvbiByZXNvdXJjZQotICAgICoKLSAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBvYmplY3Qgd2lsbCBiZWxvbmcuCi0gICAgKiBAcGFyYW0gcmVzIHJlc291cmNlIG1hbmFnZXIgdXNlZCBmb3IgbG9hZGluZwotICAgICogQHBhcmFtIGlkIHJlc291cmNlIHRvIGNyZWF0ZSBGaWxlQTNEIGZyb20KLSAgICAqCi0gICAgKiBAcmV0dXJuIGEzZCBmaWxlIGNvbnRhaW5pbmcgcmVuZGVyc2NyaXB0IG9iamVjdHMKLSAgICAqLwotICAgIHN0YXRpYyBwdWJsaWMgRmlsZUEzRCBjcmVhdGVGcm9tUmVzb3VyY2UoUmVuZGVyU2NyaXB0IHJzLCBSZXNvdXJjZXMgcmVzLCBpbnQgaWQpIHsKLQotICAgICAgICBycy52YWxpZGF0ZSgpOwotICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpcyA9IHJlcy5vcGVuUmF3UmVzb3VyY2UoaWQpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIG9wZW4gcmVzb3VyY2UgIiArIGlkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBmaWxlSWQgPSAwOwotICAgICAgICBpZiAoaXMgaW5zdGFuY2VvZiBBc3NldE1hbmFnZXIuQXNzZXRJbnB1dFN0cmVhbSkgewotICAgICAgICAgICAgaW50IGFzc2V0ID0gKChBc3NldE1hbmFnZXIuQXNzZXRJbnB1dFN0cmVhbSkgaXMpLmdldEFzc2V0SW50KCk7Ci0gICAgICAgICAgICBmaWxlSWQgPSBycy5uRmlsZUEzRENyZWF0ZUZyb21Bc3NldFN0cmVhbShhc3NldCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBhc3NldCBzdHJlYW0iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKGZpbGVJZCA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gY3JlYXRlIGEzZCBmaWxlIGZyb20gcmVzb3VyY2UgIiArIGlkKTsKLSAgICAgICAgfQotICAgICAgICBGaWxlQTNEIGZhM2QgPSBuZXcgRmlsZUEzRChmaWxlSWQsIHJzLCBpcyk7Ci0gICAgICAgIGZhM2QuaW5pdEVudHJpZXMoKTsKLSAgICAgICAgcmV0dXJuIGZhM2Q7Ci0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0Mi5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYxOTNkMi4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi0vKioKLSAqIFZlY3RvciB2ZXJzaW9uIG9mIHRoZSBiYXNpYyBmbG9hdCB0eXBlLgotICogUHJvdmlkZXMgdHdvIGZsb2F0IGZpZWxkcyBwYWNrZWQuCi0gKi8KLXB1YmxpYyAgY2xhc3MgRmxvYXQyIHsKLSAgICBwdWJsaWMgZmxvYXQgeDsKLSAgICBwdWJsaWMgZmxvYXQgeTsKLQotICAgIHB1YmxpYyBGbG9hdDIoKSB7Ci0gICAgfQotICAgIC8qKiBAaGlkZSAqLyAKLSAgICBwdWJsaWMgRmxvYXQyKEZsb2F0MiBkYXRhKSB7Ci0gICAgICAgIHRoaXMueCA9IGRhdGEueDsKLSAgICAgICAgdGhpcy55ID0gZGF0YS55OwotICAgIH0KLQotICAgIHB1YmxpYyBGbG9hdDIoZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICB0aGlzLnggPSB4OwotICAgICAgICB0aGlzLnkgPSB5OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBGbG9hdDIgYWRkKEZsb2F0MiBhLCBGbG9hdDIgYikgewotICAgICAgICBGbG9hdDIgcmVzID0gbmV3IEZsb2F0MigpOwotICAgICAgICByZXMueCA9IGEueCArIGIueDsKLSAgICAgICAgcmVzLnkgPSBhLnkgKyBiLnk7Ci0KLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgYWRkCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGQoRmxvYXQyIHZhbHVlKSB7Ci0gICAgICAgIHggKz0gdmFsdWUueDsKLSAgICAgICAgeSArPSB2YWx1ZS55OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZChmbG9hdCB2YWx1ZSkgewotICAgICAgICB4ICs9IHZhbHVlOwotICAgICAgICB5ICs9IHZhbHVlOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBGbG9hdDIgYWRkKEZsb2F0MiBhLCBmbG9hdCBiKSB7Ci0gICAgICAgIEZsb2F0MiByZXMgPSBuZXcgRmxvYXQyKCk7Ci0gICAgICAgIHJlcy54ID0gYS54ICsgYjsKLSAgICAgICAgcmVzLnkgPSBhLnkgKyBiOwotCi0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdWIoRmxvYXQyIHZhbHVlKSB7Ci0gICAgICAgIHggLT0gdmFsdWUueDsKLSAgICAgICAgeSAtPSB2YWx1ZS55OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEZsb2F0MiBzdWIoRmxvYXQyIGEsIEZsb2F0MiBiKSB7Ci0gICAgICAgIEZsb2F0MiByZXMgPSBuZXcgRmxvYXQyKCk7Ci0gICAgICAgIHJlcy54ID0gYS54IC0gYi54OwotICAgICAgICByZXMueSA9IGEueSAtIGIueTsKLQotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3ViKGZsb2F0IHZhbHVlKSB7Ci0gICAgICAgIHggLT0gdmFsdWU7Ci0gICAgICAgIHkgLT0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgRmxvYXQyIHN1YihGbG9hdDIgYSwgZmxvYXQgYikgewotICAgICAgICBGbG9hdDIgcmVzID0gbmV3IEZsb2F0MigpOwotICAgICAgICByZXMueCA9IGEueCAtIGI7Ci0gICAgICAgIHJlcy55ID0gYS55IC0gYjsKLQotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgbXVsKEZsb2F0MiB2YWx1ZSkgewotICAgICAgICB4ICo9IHZhbHVlLng7Ci0gICAgICAgIHkgKj0gdmFsdWUueTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBGbG9hdDIgbXVsKEZsb2F0MiBhLCBGbG9hdDIgYikgewotICAgICAgICBGbG9hdDIgcmVzID0gbmV3IEZsb2F0MigpOwotICAgICAgICByZXMueCA9IGEueCAqIGIueDsKLSAgICAgICAgcmVzLnkgPSBhLnkgKiBiLnk7Ci0KLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG11bChmbG9hdCB2YWx1ZSkgewotICAgICAgICB4ICo9IHZhbHVlOwotICAgICAgICB5ICo9IHZhbHVlOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEZsb2F0MiBtdWwoRmxvYXQyIGEsIGZsb2F0IGIpIHsKLSAgICAgICAgRmxvYXQyIHJlcyA9IG5ldyBGbG9hdDIoKTsKLSAgICAgICAgcmVzLnggPSBhLnggKiBiOwotICAgICAgICByZXMueSA9IGEueSAqIGI7Ci0KLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRpdihGbG9hdDIgdmFsdWUpIHsKLSAgICAgICAgeCAvPSB2YWx1ZS54OwotICAgICAgICB5IC89IHZhbHVlLnk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRpdmlzaW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgRmxvYXQyIGRpdihGbG9hdDIgYSwgRmxvYXQyIGIpIHsKLSAgICAgICAgRmxvYXQyIHJlcyA9IG5ldyBGbG9hdDIoKTsKLSAgICAgICAgcmVzLnggPSBhLnggLyBiLng7Ci0gICAgICAgIHJlcy55ID0gYS55IC8gYi55OwotCi0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRpdmlzaW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBkaXYoZmxvYXQgdmFsdWUpIHsKLSAgICAgICAgeCAvPSB2YWx1ZTsKLSAgICAgICAgeSAvPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBGbG9hdDIgZGl2KEZsb2F0MiBhLCBmbG9hdCBiKSB7Ci0gICAgICAgIEZsb2F0MiByZXMgPSBuZXcgRmxvYXQyKCk7Ci0gICAgICAgIHJlcy54ID0gYS54IC8gYjsKLSAgICAgICAgcmVzLnkgPSBhLnkgLyBiOwotCi0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRvdCBQcm9kdWN0Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmxvYXQgZG90UHJvZHVjdChGbG9hdDIgYSkgewotICAgICAgICByZXR1cm4gKHggKiBhLngpICsgKHkgKiBhLnkpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZsb2F0IGRvdFByb2R1Y3QoRmxvYXQyIGEsIEZsb2F0MiBiKSB7Ci0gICAgICAgIHJldHVybiAoYi54ICogYS54KSArIChiLnkgKiBhLnkpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQgTXVsdGlwbGUKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGZhY3RvcgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZE11bHRpcGxlKEZsb2F0MiBhLCBmbG9hdCBmYWN0b3IpIHsKLSAgICAgICAgeCArPSBhLnggKiBmYWN0b3I7Ci0gICAgICAgIHkgKz0gYS55ICogZmFjdG9yOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB2ZWN0b3IgdmFsdWUgYnkgZmxvYXQyCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldChGbG9hdDIgYSkgewotICAgICAgICB0aGlzLnggPSBhLng7Ci0gICAgICAgIHRoaXMueSA9IGEueTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBzZXQgdmVjdG9yIG5lZ2F0ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG5lZ2F0ZSgpIHsKLSAgICAgICAgeCA9IC14OwotICAgICAgICB5ID0gLXk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogZ2V0IHZlY3RvciBsZW5ndGgKLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGxlbmd0aCgpIHsKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogcmV0dXJuIHRoZSBlbGVtZW50IHN1bSBvZiB2ZWN0b3IKLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmxvYXQgZWxlbWVudFN1bSgpIHsKLSAgICAgICAgcmV0dXJuIHggKyB5OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIGdldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmxvYXQgZ2V0KGludCBpKSB7Ci0gICAgICAgIHN3aXRjaCAoaSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgcmV0dXJuIHk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEF0KGludCBpLCBmbG9hdCB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeCA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICB5ID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIGFkZCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZEF0KGludCBpLCBmbG9hdCB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeCArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgeSArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogc2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUKLSAgICAgKgotICAgICAqIEBwYXJhbSB4Ci0gICAgICogQHBhcmFtIHkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRWYWx1ZXMoZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICB0aGlzLnggPSB4OwotICAgICAgICB0aGlzLnkgPSB5OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIGNvcHkgdGhlIHZlY3RvciB0byBmbG9hdCBhcnJheQotICAgICAqCi0gICAgICogQHBhcmFtIGRhdGEKLSAgICAgKiBAcGFyYW0gb2Zmc2V0Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weVRvKGZsb2F0W10gZGF0YSwgaW50IG9mZnNldCkgewotICAgICAgICBkYXRhW29mZnNldF0gPSB4OwotICAgICAgICBkYXRhW29mZnNldCArIDFdID0geTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ZvbnQuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRm9udC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzc1ZDJiLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRm9udC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldE1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKLQotLyoqCi0gKiBAaGlkZQotICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gKiA8cD5UaGlzIGNsYXNzIGdpdmVzIHVzZXJzIGEgc2ltcGxlIHdheSB0byBkcmF3IGhhcmR3YXJlIGFjY2VsZXJhdGVkIHRleHQuCi0gKiBJbnRlcm5hbGx5LCB0aGUgZ2x5cGhzIGFyZSByZW5kZXJlZCB1c2luZyB0aGUgRnJlZXR5cGUgbGlicmFyeSBhbmQgYW4gaW50ZXJuYWwgY2FjaGUgb2YKLSAqIHJlbmRlcmVkIGdseXBoIGJpdG1hcHMgaXMgbWFpbnRhaW5lZC4gRWFjaCBmb250IG9iamVjdCByZXByZXNlbnRzIGEgY29tYmluYXRpb24gb2YgYSB0eXBlZmFjZSwKLSAqIGFuZCBwb2ludCBzaXplLiBZb3UgY2FuIGNyZWF0ZSBtdWx0aXBsZSBmb250IG9iamVjdHMgdG8gcmVwcmVzZW50IHN0eWxlcyBzdWNoIGFzIGJvbGQgb3IgaXRhbGljIHRleHQsCi0gKiBmYWNlcywgYW5kIGRpZmZlcmVudCBmb250IHNpemVzLiBEdXJpbmcgY3JlYXRpb24sIHRoZSBBbmRyb2lkIHN5c3RlbSBxdWllcmllcyBkZXZpY2UncyBzY3JlZW4gRFBJIHRvCi0gKiBlbnN1cmUgcHJvcGVyIHNpemluZyBhY3Jvc3MgbXVsdGlwbGUgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLjwvcD4KLSAqIDxwPkZvbnRzIGFyZSByZW5kZXJlZCB1c2luZyBzY3JlZW4tc3BhY2UgcG9zaXRpb25zIGFuZCBubyBzdGF0ZSBzZXR1cCBiZXlvbmQgYmluZGluZyBhCi0gKiBmb250IHRvIHRoZSBSZW5kZXJTY3JpcHQgaXMgcmVxdWlyZWQuIEEgbm90ZSBvZiBjYXV0aW9uIG9uIHBlcmZvcm1hbmNlLCB0aG91Z2ggdGhlIHN0YXRlIGNoYW5nZXMKLSAqIGFyZSB0cmFuc3BhcmVudCB0byB0aGUgdXNlciwgdGhleSBkbyBoYXBwZW4gaW50ZXJuYWxseSwgYW5kIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvCi0gKiByZW5kZXIgbGFyZ2UgYmF0Y2hlcyBvZiB0ZXh0IGluIHNlcXVlbmNlLiBJdCBpcyBhbHNvIG1vcmUgZWZmaWNpZW50IHRvIHJlbmRlciBtdWx0aXBsZQotICogY2hhcmFjdGVycyBhdCBvbmNlIGluc3RlYWQgb2Ygb25lIGJ5IG9uZSB0byBpbXByb3ZlIGRyYXcgY2FsbCBiYXRjaGluZy48L3A+Ci0gKiA8cD5Gb250IGNvbG9yIGFuZCB0cmFuc3BhcmVuY3kgYXJlIG5vdCBwYXJ0IG9mIHRoZSBmb250IG9iamVjdCBhbmQgeW91IGNhbiBmcmVlbHkgbW9kaWZ5Ci0gKiB0aGVtIGluIHRoZSBzY3JpcHQgdG8gc3VpdCB0aGUgdXNlcidzIHJlbmRlcmluZyBuZWVkcy4gRm9udCBjb2xvcnMgd29yayBhcyBhIHN0YXRlIG1hY2hpbmUuCi0gKiBFdmVyeSBuZXcgY2FsbCB0byBkcmF3IHRleHQgdXNlcyB0aGUgbGFzdCBjb2xvciBzZXQgaW4gdGhlIHNjcmlwdC48L3A+Ci0gKiovCi1wdWJsaWMgY2xhc3MgRm9udCBleHRlbmRzIEJhc2VPYmogewotCi0gICAgLy9UaGVzZSBoZWxwIHVzIGNyZWF0ZSBhIGZvbnQgYnkgZmFtaWx5IG5hbWUKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzU2Fuc05hbWVzID0gewotICAgICAgICAic2Fucy1zZXJpZiIsICJhcmlhbCIsICJoZWx2ZXRpY2EiLCAidGFob21hIiwgInZlcmRhbmEiCi0gICAgfTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHNTZXJpZk5hbWVzID0gewotICAgICAgICAic2VyaWYiLCAidGltZXMiLCAidGltZXMgbmV3IHJvbWFuIiwgInBhbGF0aW5vIiwgImdlb3JnaWEiLCAiYmFza2VydmlsbGUiLAotICAgICAgICAiZ291ZHkiLCAiZmFudGFzeSIsICJjdXJzaXZlIiwgIklUQyBTdG9uZSBTZXJpZiIKLSAgICB9OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gc01vbm9OYW1lcyA9IHsKLSAgICAgICAgIm1vbm9zcGFjZSIsICJjb3VyaWVyIiwgImNvdXJpZXIgbmV3IiwgIm1vbmFjbyIKLSAgICB9OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRm9udEZhbWlseSB7Ci0gICAgICAgIFN0cmluZ1tdIG1OYW1lczsKLSAgICAgICAgU3RyaW5nIG1Ob3JtYWxGaWxlTmFtZTsKLSAgICAgICAgU3RyaW5nIG1Cb2xkRmlsZU5hbWU7Ci0gICAgICAgIFN0cmluZyBtSXRhbGljRmlsZU5hbWU7Ci0gICAgICAgIFN0cmluZyBtQm9sZEl0YWxpY0ZpbGVOYW1lOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIEZvbnRGYW1pbHk+IHNGb250RmFtaWx5TWFwOwotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICovCi0gICAgcHVibGljIGVudW0gU3R5bGUgewotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAqLwotICAgICAgICBOT1JNQUwsCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICovCi0gICAgICAgIEJPTEQsCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICovCi0gICAgICAgIElUQUxJQywKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKi8KLSAgICAgICAgQk9MRF9JVEFMSUM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRGYW1pbHlUb01hcChGb250RmFtaWx5IGZhbWlseSkgewotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZmFtaWx5Lm1OYW1lcy5sZW5ndGg7IGkgKyspIHsKLSAgICAgICAgICAgIHNGb250RmFtaWx5TWFwLnB1dChmYW1pbHkubU5hbWVzW2ldLCBmYW1pbHkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbml0Rm9udEZhbWlseU1hcCgpIHsKLSAgICAgICAgc0ZvbnRGYW1pbHlNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEZvbnRGYW1pbHk+KCk7Ci0KLSAgICAgICAgRm9udEZhbWlseSBzYW5zRmFtaWx5ID0gbmV3IEZvbnRGYW1pbHkoKTsKLSAgICAgICAgc2Fuc0ZhbWlseS5tTmFtZXMgPSBzU2Fuc05hbWVzOwotICAgICAgICBzYW5zRmFtaWx5Lm1Ob3JtYWxGaWxlTmFtZSA9ICJSb2JvdG8tUmVndWxhci50dGYiOwotICAgICAgICBzYW5zRmFtaWx5Lm1Cb2xkRmlsZU5hbWUgPSAiUm9ib3RvLUJvbGQudHRmIjsKLSAgICAgICAgc2Fuc0ZhbWlseS5tSXRhbGljRmlsZU5hbWUgPSAiUm9ib3RvLUl0YWxpYy50dGYiOwotICAgICAgICBzYW5zRmFtaWx5Lm1Cb2xkSXRhbGljRmlsZU5hbWUgPSAiUm9ib3RvLUJvbGRJdGFsaWMudHRmIjsKLSAgICAgICAgYWRkRmFtaWx5VG9NYXAoc2Fuc0ZhbWlseSk7Ci0KLSAgICAgICAgRm9udEZhbWlseSBzZXJpZkZhbWlseSA9IG5ldyBGb250RmFtaWx5KCk7Ci0gICAgICAgIHNlcmlmRmFtaWx5Lm1OYW1lcyA9IHNTZXJpZk5hbWVzOwotICAgICAgICBzZXJpZkZhbWlseS5tTm9ybWFsRmlsZU5hbWUgPSAiRHJvaWRTZXJpZi1SZWd1bGFyLnR0ZiI7Ci0gICAgICAgIHNlcmlmRmFtaWx5Lm1Cb2xkRmlsZU5hbWUgPSAiRHJvaWRTZXJpZi1Cb2xkLnR0ZiI7Ci0gICAgICAgIHNlcmlmRmFtaWx5Lm1JdGFsaWNGaWxlTmFtZSA9ICJEcm9pZFNlcmlmLUl0YWxpYy50dGYiOwotICAgICAgICBzZXJpZkZhbWlseS5tQm9sZEl0YWxpY0ZpbGVOYW1lID0gIkRyb2lkU2VyaWYtQm9sZEl0YWxpYy50dGYiOwotICAgICAgICBhZGRGYW1pbHlUb01hcChzZXJpZkZhbWlseSk7Ci0KLSAgICAgICAgRm9udEZhbWlseSBtb25vRmFtaWx5ID0gbmV3IEZvbnRGYW1pbHkoKTsKLSAgICAgICAgbW9ub0ZhbWlseS5tTmFtZXMgPSBzTW9ub05hbWVzOwotICAgICAgICBtb25vRmFtaWx5Lm1Ob3JtYWxGaWxlTmFtZSA9ICJEcm9pZFNhbnNNb25vLnR0ZiI7Ci0gICAgICAgIG1vbm9GYW1pbHkubUJvbGRGaWxlTmFtZSA9ICJEcm9pZFNhbnNNb25vLnR0ZiI7Ci0gICAgICAgIG1vbm9GYW1pbHkubUl0YWxpY0ZpbGVOYW1lID0gIkRyb2lkU2Fuc01vbm8udHRmIjsKLSAgICAgICAgbW9ub0ZhbWlseS5tQm9sZEl0YWxpY0ZpbGVOYW1lID0gIkRyb2lkU2Fuc01vbm8udHRmIjsKLSAgICAgICAgYWRkRmFtaWx5VG9NYXAobW9ub0ZhbWlseSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHsKLSAgICAgICAgaW5pdEZvbnRGYW1pbHlNYXAoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGdldEZvbnRGaWxlTmFtZShTdHJpbmcgZmFtaWx5TmFtZSwgU3R5bGUgc3R5bGUpIHsKLSAgICAgICAgRm9udEZhbWlseSBmYW1pbHkgPSBzRm9udEZhbWlseU1hcC5nZXQoZmFtaWx5TmFtZSk7Ci0gICAgICAgIGlmKGZhbWlseSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzd2l0Y2goc3R5bGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIE5PUk1BTDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbWlseS5tTm9ybWFsRmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgY2FzZSBCT0xEOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFtaWx5Lm1Cb2xkRmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgY2FzZSBJVEFMSUM6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYW1pbHkubUl0YWxpY0ZpbGVOYW1lOwotICAgICAgICAgICAgICAgIGNhc2UgQk9MRF9JVEFMSUM6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYW1pbHkubUJvbGRJdGFsaWNGaWxlTmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayBpZiB3ZSBjb3VsZCBub3QgZmluZCB0aGUgZGVzaXJlZCBmYW1pbHkKLSAgICAgICAgcmV0dXJuICJEcm9pZFNhbnMudHRmIjsKLSAgICB9Ci0KLSAgICBGb250KGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogVGFrZXMgYSBzcGVjaWZpYyBmaWxlIG5hbWUgYXMgYW4gYXJndW1lbnQKLSAgICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEZvbnQgY3JlYXRlRnJvbUZpbGUoUmVuZGVyU2NyaXB0IHJzLCBSZXNvdXJjZXMgcmVzLCBTdHJpbmcgcGF0aCwgZmxvYXQgcG9pbnRTaXplKSB7Ci0gICAgICAgIHJzLnZhbGlkYXRlKCk7Ci0gICAgICAgIGludCBkcGkgPSByZXMuZ2V0RGlzcGxheU1ldHJpY3MoKS5kZW5zaXR5RHBpOwotICAgICAgICBpbnQgZm9udElkID0gcnMubkZvbnRDcmVhdGVGcm9tRmlsZShwYXRoLCBwb2ludFNpemUsIGRwaSk7Ci0KLSAgICAgICAgaWYoZm9udElkID09IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBjcmVhdGUgZm9udCBmcm9tIGZpbGUgIiArIHBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIEZvbnQgcnNGb250ID0gbmV3IEZvbnQoZm9udElkLCBycyk7Ci0KLSAgICAgICAgcmV0dXJuIHJzRm9udDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEZvbnQgY3JlYXRlRnJvbUZpbGUoUmVuZGVyU2NyaXB0IHJzLCBSZXNvdXJjZXMgcmVzLCBGaWxlIHBhdGgsIGZsb2F0IHBvaW50U2l6ZSkgewotICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUZpbGUocnMsIHJlcywgcGF0aC5nZXRBYnNvbHV0ZVBhdGgoKSwgcG9pbnRTaXplKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEZvbnQgY3JlYXRlRnJvbUFzc2V0KFJlbmRlclNjcmlwdCBycywgUmVzb3VyY2VzIHJlcywgU3RyaW5nIHBhdGgsIGZsb2F0IHBvaW50U2l6ZSkgewotICAgICAgICBycy52YWxpZGF0ZSgpOwotICAgICAgICBBc3NldE1hbmFnZXIgbWdyID0gcmVzLmdldEFzc2V0cygpOwotICAgICAgICBpbnQgZHBpID0gcmVzLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eURwaTsKLQotICAgICAgICBpbnQgZm9udElkID0gcnMubkZvbnRDcmVhdGVGcm9tQXNzZXQobWdyLCBwYXRoLCBwb2ludFNpemUsIGRwaSk7Ci0gICAgICAgIGlmKGZvbnRJZCA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gY3JlYXRlIGZvbnQgZnJvbSBhc3NldCAiICsgcGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgRm9udCByc0ZvbnQgPSBuZXcgRm9udChmb250SWQsIHJzKTsKLSAgICAgICAgcmV0dXJuIHJzRm9udDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKi8KLSAgICBzdGF0aWMgcHVibGljIEZvbnQgY3JlYXRlRnJvbVJlc291cmNlKFJlbmRlclNjcmlwdCBycywgUmVzb3VyY2VzIHJlcywgaW50IGlkLCBmbG9hdCBwb2ludFNpemUpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAiUi4iICsgSW50ZWdlci50b1N0cmluZyhpZCk7Ci0KLSAgICAgICAgcnMudmFsaWRhdGUoKTsKLSAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgaXMgPSByZXMub3BlblJhd1Jlc291cmNlKGlkKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBvcGVuIHJlc291cmNlICIgKyBpZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgZHBpID0gcmVzLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eURwaTsKLQotICAgICAgICBpbnQgZm9udElkID0gMDsKLSAgICAgICAgaWYgKGlzIGluc3RhbmNlb2YgQXNzZXRNYW5hZ2VyLkFzc2V0SW5wdXRTdHJlYW0pIHsKLSAgICAgICAgICAgIGludCBhc3NldCA9ICgoQXNzZXRNYW5hZ2VyLkFzc2V0SW5wdXRTdHJlYW0pIGlzKS5nZXRBc3NldEludCgpOwotICAgICAgICAgICAgZm9udElkID0gcnMubkZvbnRDcmVhdGVGcm9tQXNzZXRTdHJlYW0obmFtZSwgcG9pbnRTaXplLCBkcGksIGFzc2V0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIlVuc3VwcG9ydGVkIGFzc2V0IHN0cmVhbSBjcmVhdGVkIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZihmb250SWQgPT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGNyZWF0ZSBmb250IGZyb20gcmVzb3VyY2UgIiArIGlkKTsKLSAgICAgICAgfQotICAgICAgICBGb250IHJzRm9udCA9IG5ldyBGb250KGZvbnRJZCwgcnMpOwotICAgICAgICByZXR1cm4gcnNGb250OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqIEFjY2VwdHMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmFtaWx5IG5hbWVzIGFzIGFuIGFyZ3VtZW50Ci0gICAgICogYW5kIHdpbGwgYXR0ZW1wdCB0byBwcm9kdWNlIHRoZSBiZXN0IG1hdGNoIHdpdGggYSBzeXN0ZW0gZm9udDoKLSAgICAgKgotICAgICAqICJzYW5zLXNlcmlmIiAiYXJpYWwiICJoZWx2ZXRpY2EiICJ0YWhvbWEiICJ2ZXJkYW5hIgotICAgICAqICJzZXJpZiIgInRpbWVzIiAidGltZXMgbmV3IHJvbWFuIiAicGFsYXRpbm8iICJnZW9yZ2lhIiAiYmFza2VydmlsbGUiCi0gICAgICogImdvdWR5IiAiZmFudGFzeSIgImN1cnNpdmUiICJJVEMgU3RvbmUgU2VyaWYiCi0gICAgICogIm1vbm9zcGFjZSIgImNvdXJpZXIiICJjb3VyaWVyIG5ldyIgIm1vbmFjbyIKLSAgICAgKgotICAgICAqIFJldHVybnMgZGVmYXVsdCBmb250IGlmIG5vIG1hdGNoIGNvdWxkIGJlIGZvdW5kLgotICAgICAqLwotICAgIHN0YXRpYyBwdWJsaWMgRm9udCBjcmVhdGUoUmVuZGVyU2NyaXB0IHJzLCBSZXNvdXJjZXMgcmVzLCBTdHJpbmcgZmFtaWx5TmFtZSwgU3R5bGUgZm9udFN0eWxlLCBmbG9hdCBwb2ludFNpemUpIHsKLSAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZ2V0Rm9udEZpbGVOYW1lKGZhbWlseU5hbWUsIGZvbnRTdHlsZSk7Ci0gICAgICAgIFN0cmluZyBmb250UGF0aCA9IEVudmlyb25tZW50LmdldFJvb3REaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgICAgZm9udFBhdGggKz0gIi9mb250cy8iICsgZmlsZU5hbWU7Ci0gICAgICAgIHJldHVybiBjcmVhdGVGcm9tRmlsZShycywgcmVzLCBmb250UGF0aCwgcG9pbnRTaXplKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvSW50My5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9JbnQzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NzAzOTUuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9JbnQzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLS8qKgotICogVmVjdG9yIHZlcnNpb24gb2YgdGhlIGJhc2ljIGludCB0eXBlLgotICogUHJvdmlkZXMgdGhyZWUgaW50IGZpZWxkcyBwYWNrZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBJbnQzIHsKLSAgICBwdWJsaWMgaW50IHg7Ci0gICAgcHVibGljIGludCB5OwotICAgIHB1YmxpYyBpbnQgejsKLQotICAgIHB1YmxpYyBJbnQzKCkgewotICAgIH0KLSAgICAKLSAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgSW50MyhpbnQgaSkgewotICAgICAgICB0aGlzLnggPSB0aGlzLnkgPSB0aGlzLnogPSBpOwotICAgIH0KLQotICAgIHB1YmxpYyBJbnQzKGludCB4LCBpbnQgeSwgaW50IHopIHsKLSAgICAgICAgdGhpcy54ID0geDsKLSAgICAgICAgdGhpcy55ID0geTsKLSAgICAgICAgdGhpcy56ID0gejsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgSW50MyhJbnQzIHNvdXJjZSkgewotICAgICAgICB0aGlzLnggPSBzb3VyY2UueDsKLSAgICAgICAgdGhpcy55ID0gc291cmNlLnk7Ci0gICAgICAgIHRoaXMueiA9IHNvdXJjZS56OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkKEludDMgYSkgewotICAgICAgICB0aGlzLnggKz0gYS54OwotICAgICAgICB0aGlzLnkgKz0gYS55OwotICAgICAgICB0aGlzLnogKz0gYS56OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBJbnQzIGFkZChJbnQzIGEsIEludDMgYikgewotICAgICAgICBJbnQzIHJlc3VsdCA9IG5ldyBJbnQzKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gYS54ICsgYi54OwotICAgICAgICByZXN1bHQueSA9IGEueSArIGIueTsKLSAgICAgICAgcmVzdWx0LnogPSBhLnogKyBiLno7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgYWRkCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGQoaW50IHZhbHVlKSB7Ci0gICAgICAgIHggKz0gdmFsdWU7Ci0gICAgICAgIHkgKz0gdmFsdWU7Ci0gICAgICAgIHogKz0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGFkZAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEludDMgYWRkKEludDMgYSwgaW50IGIpIHsKLSAgICAgICAgSW50MyByZXN1bHQgPSBuZXcgSW50MygpOwotICAgICAgICByZXN1bHQueCA9IGEueCArIGI7Ci0gICAgICAgIHJlc3VsdC55ID0gYS55ICsgYjsKLSAgICAgICAgcmVzdWx0LnogPSBhLnogKyBiOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YihJbnQzIGEpIHsKLSAgICAgICAgdGhpcy54IC09IGEueDsKLSAgICAgICAgdGhpcy55IC09IGEueTsKLSAgICAgICAgdGhpcy56IC09IGEuejsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBJbnQzIHN1YihJbnQzIGEsIEludDMgYikgewotICAgICAgICBJbnQzIHJlc3VsdCA9IG5ldyBJbnQzKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gYS54IC0gYi54OwotICAgICAgICByZXN1bHQueSA9IGEueSAtIGIueTsKLSAgICAgICAgcmVzdWx0LnogPSBhLnogLSBiLno7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YihpbnQgdmFsdWUpIHsKLSAgICAgICAgeCAtPSB2YWx1ZTsKLSAgICAgICAgeSAtPSB2YWx1ZTsKLSAgICAgICAgeiAtPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBJbnQzIHN1YihJbnQzIGEsIGludCBiKSB7Ci0gICAgICAgIEludDMgcmVzdWx0ID0gbmV3IEludDMoKTsKLSAgICAgICAgcmVzdWx0LnggPSBhLnggLSBiOwotICAgICAgICByZXN1bHQueSA9IGEueSAtIGI7Ci0gICAgICAgIHJlc3VsdC56ID0gYS56IC0gYjsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtdWwoSW50MyBhKSB7Ci0gICAgICAgIHRoaXMueCAqPSBhLng7Ci0gICAgICAgIHRoaXMueSAqPSBhLnk7Ci0gICAgICAgIHRoaXMueiAqPSBhLno7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgSW50MyBtdWwoSW50MyBhLCBJbnQzIGIpIHsKLSAgICAgICAgSW50MyByZXN1bHQgPSBuZXcgSW50MygpOwotICAgICAgICByZXN1bHQueCA9IGEueCAqIGIueDsKLSAgICAgICAgcmVzdWx0LnkgPSBhLnkgKiBiLnk7Ci0gICAgICAgIHJlc3VsdC56ID0gYS56ICogYi56OwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtdWwoaW50IHZhbHVlKSB7Ci0gICAgICAgIHggKj0gdmFsdWU7Ci0gICAgICAgIHkgKj0gdmFsdWU7Ci0gICAgICAgIHogKj0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgSW50MyBtdWwoSW50MyBhLCBpbnQgYikgewotICAgICAgICBJbnQzIHJlc3VsdCA9IG5ldyBJbnQzKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gYS54ICogYjsKLSAgICAgICAgcmVzdWx0LnkgPSBhLnkgKiBiOwotICAgICAgICByZXN1bHQueiA9IGEueiAqIGI7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGl2KEludDMgYSkgewotICAgICAgICB0aGlzLnggLz0gYS54OwotICAgICAgICB0aGlzLnkgLz0gYS55OwotICAgICAgICB0aGlzLnogLz0gYS56OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkaXZpc2lvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEludDMgZGl2KEludDMgYSwgSW50MyBiKSB7Ci0gICAgICAgIEludDMgcmVzdWx0ID0gbmV3IEludDMoKTsKLSAgICAgICAgcmVzdWx0LnggPSBhLnggLyBiLng7Ci0gICAgICAgIHJlc3VsdC55ID0gYS55IC8gYi55OwotICAgICAgICByZXN1bHQueiA9IGEueiAvIGIuejsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkaXZpc2lvbgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGl2KGludCB2YWx1ZSkgewotICAgICAgICB4IC89IHZhbHVlOwotICAgICAgICB5IC89IHZhbHVlOwotICAgICAgICB6IC89IHZhbHVlOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkaXZpc2lvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEludDMgZGl2KEludDMgYSwgaW50IGIpIHsKLSAgICAgICAgSW50MyByZXN1bHQgPSBuZXcgSW50MygpOwotICAgICAgICByZXN1bHQueCA9IGEueCAvIGI7Ci0gICAgICAgIHJlc3VsdC55ID0gYS55IC8gYjsKLSAgICAgICAgcmVzdWx0LnogPSBhLnogLyBiOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIE1vZHVsbwotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtb2QoSW50MyBhKSB7Ci0gICAgICAgIHRoaXMueCAlPSBhLng7Ci0gICAgICAgIHRoaXMueSAlPSBhLnk7Ci0gICAgICAgIHRoaXMueiAlPSBhLno7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIE1vZHVsbwotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEludDMgbW9kKEludDMgYSwgSW50MyBiKSB7Ci0gICAgICAgIEludDMgcmVzdWx0ID0gbmV3IEludDMoKTsKLSAgICAgICAgcmVzdWx0LnggPSBhLnggJSBiLng7Ci0gICAgICAgIHJlc3VsdC55ID0gYS55ICUgYi55OwotICAgICAgICByZXN1bHQueiA9IGEueiAlIGIuejsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBNb2R1bG8KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG1vZChpbnQgdmFsdWUpIHsKLSAgICAgICAgeCAlPSB2YWx1ZTsKLSAgICAgICAgeSAlPSB2YWx1ZTsKLSAgICAgICAgeiAlPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgTW9kdWxvCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgSW50MyBtb2QoSW50MyBhLCBpbnQgYikgewotICAgICAgICBJbnQzIHJlc3VsdCA9IG5ldyBJbnQzKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gYS54ICUgYjsKLSAgICAgICAgcmVzdWx0LnkgPSBhLnkgJSBiOwotICAgICAgICByZXN1bHQueiA9IGEueiAlIGI7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBnZXQgdmVjdG9yIGxlbmd0aAotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgbGVuZ3RoKCkgewotICAgICAgICByZXR1cm4gMzsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBzZXQgdmVjdG9yIG5lZ2F0ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG5lZ2F0ZSgpIHsKLSAgICAgICAgdGhpcy54ID0gLXg7Ci0gICAgICAgIHRoaXMueSA9IC15OwotICAgICAgICB0aGlzLnogPSAtejsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZG90IFByb2R1Y3QKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZG90UHJvZHVjdChJbnQzIGEpIHsKLSAgICAgICAgcmV0dXJuIChpbnQpKCh4ICogYS54KSArICh5ICogYS55KSArICh6ICogYS56KSk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRvdCBQcm9kdWN0Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgaW50IGRvdFByb2R1Y3QoSW50MyBhLCBJbnQzIGIpIHsKLSAgICAgICAgcmV0dXJuIChpbnQpKChiLnggKiBhLngpICsgKGIueSAqIGEueSkgKyAoYi56ICogYS56KSk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGFkZCBNdWx0aXBsZQotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gZmFjdG9yCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkTXVsdGlwbGUoSW50MyBhLCBpbnQgZmFjdG9yKSB7Ci0gICAgICAgIHggKz0gYS54ICogZmFjdG9yOwotICAgICAgICB5ICs9IGEueSAqIGZhY3RvcjsKLSAgICAgICAgeiArPSBhLnogKiBmYWN0b3I7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogc2V0IHZlY3RvciB2YWx1ZSBieSBJbnQzCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldChJbnQzIGEpIHsKLSAgICAgICAgdGhpcy54ID0gYS54OwotICAgICAgICB0aGlzLnkgPSBhLnk7Ci0gICAgICAgIHRoaXMueiA9IGEuejsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBzZXQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBJbnQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcGFyYW0gYwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlcyhpbnQgYSwgaW50IGIsIGludCBjKSB7Ci0gICAgICAgIHRoaXMueCA9IGE7Ci0gICAgICAgIHRoaXMueSA9IGI7Ci0gICAgICAgIHRoaXMueiA9IGM7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogcmV0dXJuIHRoZSBlbGVtZW50IHN1bSBvZiB2ZWN0b3IKLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGVsZW1lbnRTdW0oKSB7Ci0gICAgICAgIHJldHVybiAoaW50KSh4ICsgeSArIHopOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIGdldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldChpbnQgaSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgcmV0dXJuIChpbnQpKHgpOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICByZXR1cm4gKGludCkoeSk7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHJldHVybiAoaW50KSh6KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogc2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKLSAgICAgKgotICAgICAqIEBwYXJhbSBpCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0QXQoaW50IGksIGludCB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeCA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICB5ID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHogPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogYWRkIHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKLSAgICAgKgotICAgICAqIEBwYXJhbSBpCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkQXQoaW50IGksIGludCB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeCArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgeSArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgeiArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogY29weSB0aGUgdmVjdG9yIHRvIGludCBhcnJheQotICAgICAqCi0gICAgICogQHBhcmFtIGRhdGEKLSAgICAgKiBAcGFyYW0gb2Zmc2V0Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weVRvKGludFtdIGRhdGEsIGludCBvZmZzZXQpIHsKLSAgICAgICAgZGF0YVtvZmZzZXRdID0gKGludCkoeCk7Ci0gICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSAoaW50KSh5KTsKLSAgICAgICAgZGF0YVtvZmZzZXQgKyAyXSA9IChpbnQpKHopOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTG9uZzMuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTG9uZzMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhmZjg1NS4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0xvbmczLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLS8qKgotICogVmVjdG9yIHZlcnNpb24gb2YgdGhlIGJhc2ljIGxvbmcgdHlwZS4KLSAqIFByb3ZpZGVzIHRocmVlIGxvbmcgZmllbGRzIHBhY2tlZC4KLSAqLwotcHVibGljIGNsYXNzIExvbmczIHsKLSAgICBwdWJsaWMgbG9uZyB4OwotICAgIHB1YmxpYyBsb25nIHk7Ci0gICAgcHVibGljIGxvbmcgejsKLQotICAgIHB1YmxpYyBMb25nMygpIHsKLSAgICB9Ci0gICAgCi0gICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIExvbmczKGxvbmcgaSkgewotICAgICAgICB0aGlzLnggPSB0aGlzLnkgPSB0aGlzLnogPSBpOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nMyhsb25nIHgsIGxvbmcgeSwgbG9uZyB6KSB7Ci0gICAgICAgIHRoaXMueCA9IHg7Ci0gICAgICAgIHRoaXMueSA9IHk7Ci0gICAgICAgIHRoaXMueiA9IHo7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIExvbmczKExvbmczIHNvdXJjZSkgewotICAgICAgICB0aGlzLnggPSBzb3VyY2UueDsKLSAgICAgICAgdGhpcy55ID0gc291cmNlLnk7Ci0gICAgICAgIHRoaXMueiA9IHNvdXJjZS56OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkKExvbmczIGEpIHsKLSAgICAgICAgdGhpcy54ICs9IGEueDsKLSAgICAgICAgdGhpcy55ICs9IGEueTsKLSAgICAgICAgdGhpcy56ICs9IGEuejsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgYWRkCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTG9uZzMgYWRkKExvbmczIGEsIExvbmczIGIpIHsKLSAgICAgICAgTG9uZzMgcmVzdWx0ID0gbmV3IExvbmczKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gYS54ICsgYi54OwotICAgICAgICByZXN1bHQueSA9IGEueSArIGIueTsKLSAgICAgICAgcmVzdWx0LnogPSBhLnogKyBiLno7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgYWRkCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGQobG9uZyB2YWx1ZSkgewotICAgICAgICB4ICs9IHZhbHVlOwotICAgICAgICB5ICs9IHZhbHVlOwotICAgICAgICB6ICs9IHZhbHVlOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBMb25nMyBhZGQoTG9uZzMgYSwgbG9uZyBiKSB7Ci0gICAgICAgIExvbmczIHJlc3VsdCA9IG5ldyBMb25nMygpOwotICAgICAgICByZXN1bHQueCA9IGEueCArIGI7Ci0gICAgICAgIHJlc3VsdC55ID0gYS55ICsgYjsKLSAgICAgICAgcmVzdWx0LnogPSBhLnogKyBiOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YihMb25nMyBhKSB7Ci0gICAgICAgIHRoaXMueCAtPSBhLng7Ci0gICAgICAgIHRoaXMueSAtPSBhLnk7Ci0gICAgICAgIHRoaXMueiAtPSBhLno7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTG9uZzMgc3ViKExvbmczIGEsIExvbmczIGIpIHsKLSAgICAgICAgTG9uZzMgcmVzdWx0ID0gbmV3IExvbmczKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gYS54IC0gYi54OwotICAgICAgICByZXN1bHQueSA9IGEueSAtIGIueTsKLSAgICAgICAgcmVzdWx0LnogPSBhLnogLSBiLno7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1Yihsb25nIHZhbHVlKSB7Ci0gICAgICAgIHggLT0gdmFsdWU7Ci0gICAgICAgIHkgLT0gdmFsdWU7Ci0gICAgICAgIHogLT0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTG9uZzMgc3ViKExvbmczIGEsIGxvbmcgYikgewotICAgICAgICBMb25nMyByZXN1bHQgPSBuZXcgTG9uZzMoKTsKLSAgICAgICAgcmVzdWx0LnggPSBhLnggLSBiOwotICAgICAgICByZXN1bHQueSA9IGEueSAtIGI7Ci0gICAgICAgIHJlc3VsdC56ID0gYS56IC0gYjsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtdWwoTG9uZzMgYSkgewotICAgICAgICB0aGlzLnggKj0gYS54OwotICAgICAgICB0aGlzLnkgKj0gYS55OwotICAgICAgICB0aGlzLnogKj0gYS56OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIExvbmczIG11bChMb25nMyBhLCBMb25nMyBiKSB7Ci0gICAgICAgIExvbmczIHJlc3VsdCA9IG5ldyBMb25nMygpOwotICAgICAgICByZXN1bHQueCA9IGEueCAqIGIueDsKLSAgICAgICAgcmVzdWx0LnkgPSBhLnkgKiBiLnk7Ci0gICAgICAgIHJlc3VsdC56ID0gYS56ICogYi56OwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtdWwobG9uZyB2YWx1ZSkgewotICAgICAgICB4ICo9IHZhbHVlOwotICAgICAgICB5ICo9IHZhbHVlOwotICAgICAgICB6ICo9IHZhbHVlOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIExvbmczIG11bChMb25nMyBhLCBsb25nIGIpIHsKLSAgICAgICAgTG9uZzMgcmVzdWx0ID0gbmV3IExvbmczKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gYS54ICogYjsKLSAgICAgICAgcmVzdWx0LnkgPSBhLnkgKiBiOwotICAgICAgICByZXN1bHQueiA9IGEueiAqIGI7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGl2KExvbmczIGEpIHsKLSAgICAgICAgdGhpcy54IC89IGEueDsKLSAgICAgICAgdGhpcy55IC89IGEueTsKLSAgICAgICAgdGhpcy56IC89IGEuejsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBMb25nMyBkaXYoTG9uZzMgYSwgTG9uZzMgYikgewotICAgICAgICBMb25nMyByZXN1bHQgPSBuZXcgTG9uZzMoKTsKLSAgICAgICAgcmVzdWx0LnggPSBhLnggLyBiLng7Ci0gICAgICAgIHJlc3VsdC55ID0gYS55IC8gYi55OwotICAgICAgICByZXN1bHQueiA9IGEueiAvIGIuejsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkaXZpc2lvbgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGl2KGxvbmcgdmFsdWUpIHsKLSAgICAgICAgeCAvPSB2YWx1ZTsKLSAgICAgICAgeSAvPSB2YWx1ZTsKLSAgICAgICAgeiAvPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBMb25nMyBkaXYoTG9uZzMgYSwgbG9uZyBiKSB7Ci0gICAgICAgIExvbmczIHJlc3VsdCA9IG5ldyBMb25nMygpOwotICAgICAgICByZXN1bHQueCA9IGEueCAvIGI7Ci0gICAgICAgIHJlc3VsdC55ID0gYS55IC8gYjsKLSAgICAgICAgcmVzdWx0LnogPSBhLnogLyBiOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIE1vZHVsbwotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtb2QoTG9uZzMgYSkgewotICAgICAgICB0aGlzLnggJT0gYS54OwotICAgICAgICB0aGlzLnkgJT0gYS55OwotICAgICAgICB0aGlzLnogJT0gYS56OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBNb2R1bG8KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBMb25nMyBtb2QoTG9uZzMgYSwgTG9uZzMgYikgewotICAgICAgICBMb25nMyByZXN1bHQgPSBuZXcgTG9uZzMoKTsKLSAgICAgICAgcmVzdWx0LnggPSBhLnggJSBiLng7Ci0gICAgICAgIHJlc3VsdC55ID0gYS55ICUgYi55OwotICAgICAgICByZXN1bHQueiA9IGEueiAlIGIuejsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBNb2R1bG8KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG1vZChsb25nIHZhbHVlKSB7Ci0gICAgICAgIHggJT0gdmFsdWU7Ci0gICAgICAgIHkgJT0gdmFsdWU7Ci0gICAgICAgIHogJT0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIE1vZHVsbwotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIExvbmczIG1vZChMb25nMyBhLCBsb25nIGIpIHsKLSAgICAgICAgTG9uZzMgcmVzdWx0ID0gbmV3IExvbmczKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gYS54ICUgYjsKLSAgICAgICAgcmVzdWx0LnkgPSBhLnkgJSBiOwotICAgICAgICByZXN1bHQueiA9IGEueiAlIGI7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBnZXQgdmVjdG9yIGxlbmd0aAotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBsb25nIGxlbmd0aCgpIHsKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogc2V0IHZlY3RvciBuZWdhdGUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBuZWdhdGUoKSB7Ci0gICAgICAgIHRoaXMueCA9IC14OwotICAgICAgICB0aGlzLnkgPSAteTsKLSAgICAgICAgdGhpcy56ID0gLXo7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRvdCBQcm9kdWN0Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBkb3RQcm9kdWN0KExvbmczIGEpIHsKLSAgICAgICAgcmV0dXJuIChsb25nKSgoeCAqIGEueCkgKyAoeSAqIGEueSkgKyAoeiAqIGEueikpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGxvbmcgZG90UHJvZHVjdChMb25nMyBhLCBMb25nMyBiKSB7Ci0gICAgICAgIHJldHVybiAobG9uZykoKGIueCAqIGEueCkgKyAoYi55ICogYS55KSArIChiLnogKiBhLnopKTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgYWRkIE11bHRpcGxlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBmYWN0b3IKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRNdWx0aXBsZShMb25nMyBhLCBsb25nIGZhY3RvcikgewotICAgICAgICB4ICs9IGEueCAqIGZhY3RvcjsKLSAgICAgICAgeSArPSBhLnkgKiBmYWN0b3I7Ci0gICAgICAgIHogKz0gYS56ICogZmFjdG9yOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB2ZWN0b3IgdmFsdWUgYnkgTG9uZzMKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0KExvbmczIGEpIHsKLSAgICAgICAgdGhpcy54ID0gYS54OwotICAgICAgICB0aGlzLnkgPSBhLnk7Ci0gICAgICAgIHRoaXMueiA9IGEuejsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBzZXQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBMb25nCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHBhcmFtIGMKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRWYWx1ZXMobG9uZyBhLCBsb25nIGIsIGxvbmcgYykgewotICAgICAgICB0aGlzLnggPSBhOwotICAgICAgICB0aGlzLnkgPSBiOwotICAgICAgICB0aGlzLnogPSBjOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHJldHVybiB0aGUgZWxlbWVudCBzdW0gb2YgdmVjdG9yCi0gICAgICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIGxvbmcgZWxlbWVudFN1bSgpIHsKLSAgICAgICAgcmV0dXJuIChsb25nKSh4ICsgeSArIHopOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIGdldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBnZXQoaW50IGkpIHsKLSAgICAgICAgc3dpdGNoIChpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHJldHVybiAobG9uZykoeCk7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybiAobG9uZykoeSk7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHJldHVybiAobG9uZykoeik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEF0KGludCBpLCBsb25nIHZhbHVlKSB7Ci0gICAgICAgIHN3aXRjaCAoaSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICB4ID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHkgPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgeiA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBhZGQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBpbmRleAotICAgICAqCi0gICAgICogQHBhcmFtIGkKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRBdChpbnQgaSwgbG9uZyB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeCArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgeSArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgeiArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogY29weSB0aGUgdmVjdG9yIHRvIGxvbmcgYXJyYXkKLSAgICAgKgotICAgICAqIEBwYXJhbSBkYXRhCi0gICAgICogQHBhcmFtIG9mZnNldAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvcHlUbyhsb25nW10gZGF0YSwgaW50IG9mZnNldCkgewotICAgICAgICBkYXRhW29mZnNldF0gPSAobG9uZykoeCk7Ci0gICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSAobG9uZykoeSk7Ci0gICAgICAgIGRhdGFbb2Zmc2V0ICsgMl0gPSAobG9uZykoeik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgyZi5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgyZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzYyMWZhLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4MmYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgamF2YS5sYW5nLk1hdGg7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCi0vKioKLSAqIENsYXNzIGZvciBleHBvc2luZyB0aGUgbmF0aXZlIFJlbmRlclNjcmlwdCByc19tYXRyaXgyeDIgdHlwZSBiYWNrIHRvIHRoZSBBbmRyb2lkIHN5c3RlbS4KLSAqCi0gKiovCi1wdWJsaWMgY2xhc3MgTWF0cml4MmYgewotCi0gICAgLyoqCi0gICAgKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IDJ4MiBtYXRyaXgKLSAgICAqLwotICAgIHB1YmxpYyBNYXRyaXgyZigpIHsKLSAgICAgICAgbU1hdCA9IG5ldyBmbG9hdFs0XTsKLSAgICAgICAgbG9hZElkZW50aXR5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBDcmVhdGVzIGEgbmV3IG1hdHJpeCBhbmQgc2V0cyBpdHMgdmFsdWVzIGZyb20gdGhlIGdpdmVuCi0gICAgKiBwYXJhbWV0ZXIKLSAgICAqCi0gICAgKiBAcGFyYW0gZGF0YUFycmF5IHZhbHVlcyB0byBzZXQgdGhlIG1hdHJpeCB0bywgbXVzdCBiZSA0Ci0gICAgKiAgICAgICAgICAgICAgICAgIGZsb2F0cyBsb25nCi0gICAgKi8KLSAgICBwdWJsaWMgTWF0cml4MmYoZmxvYXRbXSBkYXRhQXJyYXkpIHsKLSAgICAgICAgbU1hdCA9IG5ldyBmbG9hdFs0XTsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShkYXRhQXJyYXksIDAsIG1NYXQsIDAsIG1NYXQubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgYXJyYXkgcmVwcmVzZW50aW5nIG1hdHJpeAotICAgICogdmFsdWVzLiBNb2RpZnlpbmcgdGhpcyBhcnJheSB3aWxsIGFsc28gY2hhbmdlIHRoZSBtYXRyaXgKLSAgICAqCi0gICAgKiBAcmV0dXJuIGludGVybmFsIGFycmF5IHJlcHJlc2VudGluZyB0aGUgbWF0cml4Ci0gICAgKi8KLSAgICBwdWJsaWMgZmxvYXRbXSBnZXRBcnJheSgpIHsKLSAgICAgICAgcmV0dXJuIG1NYXQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiByb3cgYW5kIGNvbHVtbgotICAgICoKLSAgICAqIEBwYXJhbSB4IGNvbHVtbiBvZiB0aGUgdmFsdWUgdG8gcmV0dXJuCi0gICAgKiBAcGFyYW0geSByb3cgb2YgdGhlIHZhbHVlIHRvIHJldHVybgotICAgICoKLSAgICAqIEByZXR1cm4gdmFsdWUgaW4gdGhlIHl0aCByb3cgYW5kIHh0aCBjb2x1bW4KLSAgICAqLwotICAgIHB1YmxpYyBmbG9hdCBnZXQoaW50IHgsIGludCB5KSB7Ci0gICAgICAgIHJldHVybiBtTWF0W3gqMiArIHldOwotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gcm93IGFuZCBjb2x1bW4KLSAgICAqCi0gICAgKiBAcGFyYW0geCBjb2x1bW4gb2YgdGhlIHZhbHVlIHRvIHNldAotICAgICogQHBhcmFtIHkgcm93IG9mIHRoZSB2YWx1ZSB0byBzZXQKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldChpbnQgeCwgaW50IHksIGZsb2F0IHYpIHsKLSAgICAgICAgbU1hdFt4KjIgKyB5XSA9IHY7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXRzIHRoZSBtYXRyaXggdmFsdWVzIHRvIGlkZW50aXR5Ci0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBsb2FkSWRlbnRpdHkoKSB7Ci0gICAgICAgIG1NYXRbMF0gPSAxOwotICAgICAgICBtTWF0WzFdID0gMDsKLQotICAgICAgICBtTWF0WzJdID0gMDsKLSAgICAgICAgbU1hdFszXSA9IDE7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIG1hdHJpeCB0byB0aG9zZSBvZiB0aGUgcGFyYW1ldGVyCi0gICAgKgotICAgICogQHBhcmFtIHNyYyBtYXRyaXggdG8gbG9hZCB0aGUgdmFsdWVzIGZyb20KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWQoTWF0cml4MmYgc3JjKSB7Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3JjLmdldEFycmF5KCksIDAsIG1NYXQsIDAsIG1NYXQubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgYSByb3RhdGlvbiBtYXRyaXggb2YgZ2l2ZW4gYW5nbGUKLSAgICAqCi0gICAgKiBAcGFyYW0gcm90IHJvdGF0aW9uIGFuZ2xlCi0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBsb2FkUm90YXRlKGZsb2F0IHJvdCkgewotICAgICAgICBmbG9hdCBjLCBzOwotICAgICAgICByb3QgKj0gKGZsb2F0KShqYXZhLmxhbmcuTWF0aC5QSSAvIDE4MC4wZik7Ci0gICAgICAgIGMgPSAoZmxvYXQpamF2YS5sYW5nLk1hdGguY29zKHJvdCk7Ci0gICAgICAgIHMgPSAoZmxvYXQpamF2YS5sYW5nLk1hdGguc2luKHJvdCk7Ci0gICAgICAgIG1NYXRbMF0gPSBjOwotICAgICAgICBtTWF0WzFdID0gLXM7Ci0gICAgICAgIG1NYXRbMl0gPSBzOwotICAgICAgICBtTWF0WzNdID0gYzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgYSBzY2FsZSBtYXRyaXggb2YgZ2l2ZW4gZGltZW5zaW9ucwotICAgICoKLSAgICAqIEBwYXJhbSB4IHNjYWxlIGNvbXBvbmVudCB4Ci0gICAgKiBAcGFyYW0geSBzY2FsZSBjb21wb25lbnQgeQotICAgICovCi0gICAgcHVibGljIHZvaWQgbG9hZFNjYWxlKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgbG9hZElkZW50aXR5KCk7Ci0gICAgICAgIG1NYXRbMF0gPSB4OwotICAgICAgICBtTWF0WzNdID0geTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgdGhlIHJlc3VsdCBvZiBtdWx0aXBseWluZyB0d28gZ2l2ZW4KLSAgICAqIG1hdHJpY2VzCi0gICAgKgotICAgICogQHBhcmFtIGxocyBsZWZ0IGhhbmQgc2lkZSBtYXRyaXgKLSAgICAqIEBwYXJhbSByaHMgcmlnaHQgaGFuZCBzaWRlIG1hdHJpeAotICAgICovCi0gICAgcHVibGljIHZvaWQgbG9hZE11bHRpcGx5KE1hdHJpeDJmIGxocywgTWF0cml4MmYgcmhzKSB7Ci0gICAgICAgIGZvciAoaW50IGk9MCA7IGk8MiA7IGkrKykgewotICAgICAgICAgICAgZmxvYXQgcmkwID0gMDsKLSAgICAgICAgICAgIGZsb2F0IHJpMSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqPTAgOyBqPDIgOyBqKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCByaHNfaWogPSByaHMuZ2V0KGksaik7Ci0gICAgICAgICAgICAgICAgcmkwICs9IGxocy5nZXQoaiwwKSAqIHJoc19pajsKLSAgICAgICAgICAgICAgICByaTEgKz0gbGhzLmdldChqLDEpICogcmhzX2lqOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0KGksMCwgcmkwKTsKLSAgICAgICAgICAgIHNldChpLDEsIHJpMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFBvc3QtbXVsdGlwbGllcyB0aGUgY3VycmVudCBtYXRyaXggYnkgYSBnaXZlbiBwYXJhbWV0ZXIKLSAgICAqCi0gICAgKiBAcGFyYW0gcmhzIHJpZ2h0IGhhbmQgc2lkZSB0byBtdWx0aXBseSBieQotICAgICovCi0gICAgcHVibGljIHZvaWQgbXVsdGlwbHkoTWF0cml4MmYgcmhzKSB7Ci0gICAgICAgIE1hdHJpeDJmIHRtcCA9IG5ldyBNYXRyaXgyZigpOwotICAgICAgICB0bXAubG9hZE11bHRpcGx5KHRoaXMsIHJocyk7Ci0gICAgICAgIGxvYWQodG1wKTsKLSAgICB9Ci0gICAgLyoqCi0gICAgKiBNb2RpZmllcyB0aGUgY3VycmVudCBtYXRyaXggYnkgcG9zdC1tdWx0aXBseWluZyBpdCB3aXRoIGEKLSAgICAqIHJvdGF0aW9uIG1hdHJpeCBvZiBnaXZlbiBhbmdsZQotICAgICoKLSAgICAqIEBwYXJhbSByb3QgYW5nbGUgb2Ygcm90YXRpb24KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJvdGF0ZShmbG9hdCByb3QpIHsKLSAgICAgICAgTWF0cml4MmYgdG1wID0gbmV3IE1hdHJpeDJmKCk7Ci0gICAgICAgIHRtcC5sb2FkUm90YXRlKHJvdCk7Ci0gICAgICAgIG11bHRpcGx5KHRtcCk7Ci0gICAgfQotICAgIC8qKgotICAgICogTW9kaWZpZXMgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHBvc3QtbXVsdGlwbHlpbmcgaXQgd2l0aCBhCi0gICAgKiBzY2FsZSBtYXRyaXggb2YgZ2l2ZW4gZGltZW5zaW9ucwotICAgICoKLSAgICAqIEBwYXJhbSB4IHNjYWxlIGNvbXBvbmVudCB4Ci0gICAgKiBAcGFyYW0geSBzY2FsZSBjb21wb25lbnQgeQotICAgICovCi0gICAgcHVibGljIHZvaWQgc2NhbGUoZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICBNYXRyaXgyZiB0bXAgPSBuZXcgTWF0cml4MmYoKTsKLSAgICAgICAgdG1wLmxvYWRTY2FsZSh4LCB5KTsKLSAgICAgICAgbXVsdGlwbHkodG1wKTsKLSAgICB9Ci0gICAgLyoqCi0gICAgKiBTZXRzIHRoZSBjdXJyZW50IG1hdHJpeCB0byBpdHMgdHJhbnNwb3NlCi0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCB0cmFuc3Bvc2UoKSB7Ci0gICAgICAgIGZsb2F0IHRlbXAgPSBtTWF0WzFdOwotICAgICAgICBtTWF0WzFdID0gbU1hdFsyXTsKLSAgICAgICAgbU1hdFsyXSA9IHRlbXA7Ci0gICAgfQotCi0gICAgZmluYWwgZmxvYXRbXSBtTWF0OwotfQotCi0KLQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgzZi5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgzZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzNjMzMwLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4M2YuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgamF2YS5sYW5nLk1hdGg7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCi0vKioKLSAqIENsYXNzIGZvciBleHBvc2luZyB0aGUgbmF0aXZlIFJlbmRlclNjcmlwdCByc19tYXRyaXgzeDMgdHlwZSBiYWNrIHRvIHRoZSBBbmRyb2lkIHN5c3RlbS4KLSAqCi0gKiovCi1wdWJsaWMgY2xhc3MgTWF0cml4M2YgewotCi0gICAgLyoqCi0gICAgKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IDN4MyBtYXRyaXgKLSAgICAqLwotICAgIHB1YmxpYyBNYXRyaXgzZigpIHsKLSAgICAgICAgbU1hdCA9IG5ldyBmbG9hdFs5XTsKLSAgICAgICAgbG9hZElkZW50aXR5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBDcmVhdGVzIGEgbmV3IG1hdHJpeCBhbmQgc2V0cyBpdHMgdmFsdWVzIGZyb20gdGhlIGdpdmVuCi0gICAgKiBwYXJhbWV0ZXIKLSAgICAqCi0gICAgKiBAcGFyYW0gZGF0YUFycmF5IHZhbHVlcyB0byBzZXQgdGhlIG1hdHJpeCB0bywgbXVzdCBiZSA5Ci0gICAgKiAgICAgICAgICAgICAgICAgIGZsb2F0cyBsb25nCi0gICAgKi8KLSAgICBwdWJsaWMgTWF0cml4M2YoZmxvYXRbXSBkYXRhQXJyYXkpIHsKLSAgICAgICAgbU1hdCA9IG5ldyBmbG9hdFs5XTsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShkYXRhQXJyYXksIDAsIG1NYXQsIDAsIG1NYXQubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgYXJyYXkgcmVwcmVzZW50aW5nIG1hdHJpeAotICAgICogdmFsdWVzLiBNb2RpZnlpbmcgdGhpcyBhcnJheSB3aWxsIGFsc28gY2hhbmdlIHRoZSBtYXRyaXgKLSAgICAqCi0gICAgKiBAcmV0dXJuIGludGVybmFsIGFycmF5IHJlcHJlc2VudGluZyB0aGUgbWF0cml4Ci0gICAgKi8KLSAgICBwdWJsaWMgZmxvYXRbXSBnZXRBcnJheSgpIHsKLSAgICAgICAgcmV0dXJuIG1NYXQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiByb3cgYW5kIGNvbHVtbgotICAgICoKLSAgICAqIEBwYXJhbSB4IGNvbHVtbiBvZiB0aGUgdmFsdWUgdG8gcmV0dXJuCi0gICAgKiBAcGFyYW0geSByb3cgb2YgdGhlIHZhbHVlIHRvIHJldHVybgotICAgICoKLSAgICAqIEByZXR1cm4gdmFsdWUgaW4gdGhlIHl0aCByb3cgYW5kIHh0aCBjb2x1bW4KLSAgICAqLwotICAgIHB1YmxpYyBmbG9hdCBnZXQoaW50IHgsIGludCB5KSB7Ci0gICAgICAgIHJldHVybiBtTWF0W3gqMyArIHldOwotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gcm93IGFuZCBjb2x1bW4KLSAgICAqCi0gICAgKiBAcGFyYW0geCBjb2x1bW4gb2YgdGhlIHZhbHVlIHRvIHNldAotICAgICogQHBhcmFtIHkgcm93IG9mIHRoZSB2YWx1ZSB0byBzZXQKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldChpbnQgeCwgaW50IHksIGZsb2F0IHYpIHsKLSAgICAgICAgbU1hdFt4KjMgKyB5XSA9IHY7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXRzIHRoZSBtYXRyaXggdmFsdWVzIHRvIGlkZW50aXR5Ci0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBsb2FkSWRlbnRpdHkoKSB7Ci0gICAgICAgIG1NYXRbMF0gPSAxOwotICAgICAgICBtTWF0WzFdID0gMDsKLSAgICAgICAgbU1hdFsyXSA9IDA7Ci0KLSAgICAgICAgbU1hdFszXSA9IDA7Ci0gICAgICAgIG1NYXRbNF0gPSAxOwotICAgICAgICBtTWF0WzVdID0gMDsKLQotICAgICAgICBtTWF0WzZdID0gMDsKLSAgICAgICAgbU1hdFs3XSA9IDA7Ci0gICAgICAgIG1NYXRbOF0gPSAxOwotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBtYXRyaXggdG8gdGhvc2Ugb2YgdGhlIHBhcmFtZXRlcgotICAgICoKLSAgICAqIEBwYXJhbSBzcmMgbWF0cml4IHRvIGxvYWQgdGhlIHZhbHVlcyBmcm9tCi0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBsb2FkKE1hdHJpeDNmIHNyYykgewotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHNyYy5nZXRBcnJheSgpLCAwLCBtTWF0LCAwLCBtTWF0Lmxlbmd0aCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXRzIGN1cnJlbnQgdmFsdWVzIHRvIGJlIGEgcm90YXRpb24gbWF0cml4IG9mIGNlcnRhaW4gYW5nbGUKLSAgICAqIGFib3V0IGEgZ2l2ZW4gYXhpcwotICAgICoKLSAgICAqIEBwYXJhbSByb3QgYW5nbGUgb2Ygcm90YXRpb24KLSAgICAqIEBwYXJhbSB4IHJvdGF0aW9uIGF4aXMgeAotICAgICogQHBhcmFtIHkgcm90YXRpb24gYXhpcyB5Ci0gICAgKiBAcGFyYW0geiByb3RhdGlvbiBheGlzIHoKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWRSb3RhdGUoZmxvYXQgcm90LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7Ci0gICAgICAgIGZsb2F0IGMsIHM7Ci0gICAgICAgIHJvdCAqPSAoZmxvYXQpKGphdmEubGFuZy5NYXRoLlBJIC8gMTgwLjBmKTsKLSAgICAgICAgYyA9IChmbG9hdClqYXZhLmxhbmcuTWF0aC5jb3Mocm90KTsKLSAgICAgICAgcyA9IChmbG9hdClqYXZhLmxhbmcuTWF0aC5zaW4ocm90KTsKLQotICAgICAgICBmbG9hdCBsZW4gPSAoZmxvYXQpamF2YS5sYW5nLk1hdGguc3FydCh4KnggKyB5KnkgKyB6KnopOwotICAgICAgICBpZiAoIShsZW4gIT0gMSkpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlY2lwTGVuID0gMS5mIC8gbGVuOwotICAgICAgICAgICAgeCAqPSByZWNpcExlbjsKLSAgICAgICAgICAgIHkgKj0gcmVjaXBMZW47Ci0gICAgICAgICAgICB6ICo9IHJlY2lwTGVuOwotICAgICAgICB9Ci0gICAgICAgIGZsb2F0IG5jID0gMS4wZiAtIGM7Ci0gICAgICAgIGZsb2F0IHh5ID0geCAqIHk7Ci0gICAgICAgIGZsb2F0IHl6ID0geSAqIHo7Ci0gICAgICAgIGZsb2F0IHp4ID0geiAqIHg7Ci0gICAgICAgIGZsb2F0IHhzID0geCAqIHM7Ci0gICAgICAgIGZsb2F0IHlzID0geSAqIHM7Ci0gICAgICAgIGZsb2F0IHpzID0geiAqIHM7Ci0gICAgICAgIG1NYXRbMF0gPSB4KngqbmMgKyAgYzsKLSAgICAgICAgbU1hdFszXSA9ICB4eSpuYyAtIHpzOwotICAgICAgICBtTWF0WzZdID0gIHp4Km5jICsgeXM7Ci0gICAgICAgIG1NYXRbMV0gPSAgeHkqbmMgKyB6czsKLSAgICAgICAgbU1hdFs0XSA9IHkqeSpuYyArICBjOwotICAgICAgICBtTWF0WzddID0gIHl6Km5jIC0geHM7Ci0gICAgICAgIG1NYXRbMl0gPSAgengqbmMgLSB5czsKLSAgICAgICAgbU1hdFs1XSA9ICB5eipuYyArIHhzOwotICAgICAgICBtTWF0WzhdID0geip6Km5jICsgIGM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBNYWtlcyB0aGUgdXBwZXIgMngyIGEgcm90YXRpb24gbWF0cml4IG9mIHRoZSBnaXZlbiBhbmdsZQotICAgICoKLSAgICAqIEBwYXJhbSByb3Qgcm90YXRpb24gYW5nbGUKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWRSb3RhdGUoZmxvYXQgcm90KSB7Ci0gICAgICAgIGxvYWRJZGVudGl0eSgpOwotICAgICAgICBmbG9hdCBjLCBzOwotICAgICAgICByb3QgKj0gKGZsb2F0KShqYXZhLmxhbmcuTWF0aC5QSSAvIDE4MC4wZik7Ci0gICAgICAgIGMgPSAoZmxvYXQpamF2YS5sYW5nLk1hdGguY29zKHJvdCk7Ci0gICAgICAgIHMgPSAoZmxvYXQpamF2YS5sYW5nLk1hdGguc2luKHJvdCk7Ci0gICAgICAgIG1NYXRbMF0gPSBjOwotICAgICAgICBtTWF0WzFdID0gLXM7Ci0gICAgICAgIG1NYXRbM10gPSBzOwotICAgICAgICBtTWF0WzRdID0gYzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIE1ha2VzIHRoZSB1cHBlciAyeDIgYSBzY2FsZSBtYXRyaXggb2YgZ2l2ZW4gZGltZW5zaW9ucwotICAgICoKLSAgICAqIEBwYXJhbSB4IHNjYWxlIGNvbXBvbmVudCB4Ci0gICAgKiBAcGFyYW0geSBzY2FsZSBjb21wb25lbnQgeQotICAgICovCi0gICAgcHVibGljIHZvaWQgbG9hZFNjYWxlKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgbG9hZElkZW50aXR5KCk7Ci0gICAgICAgIG1NYXRbMF0gPSB4OwotICAgICAgICBtTWF0WzRdID0geTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgYSBzY2FsZSBtYXRyaXggb2YgZ2l2ZW4gZGltZW5zaW9ucwotICAgICoKLSAgICAqIEBwYXJhbSB4IHNjYWxlIGNvbXBvbmVudCB4Ci0gICAgKiBAcGFyYW0geSBzY2FsZSBjb21wb25lbnQgeQotICAgICogQHBhcmFtIHogc2NhbGUgY29tcG9uZW50IHoKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWRTY2FsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7Ci0gICAgICAgIGxvYWRJZGVudGl0eSgpOwotICAgICAgICBtTWF0WzBdID0geDsKLSAgICAgICAgbU1hdFs0XSA9IHk7Ci0gICAgICAgIG1NYXRbOF0gPSB6OwotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0cyBjdXJyZW50IHZhbHVlcyB0byBiZSBhIHRyYW5zbGF0aW9uIG1hdHJpeCBvZiBnaXZlbgotICAgICogZGltZW5zaW9ucwotICAgICoKLSAgICAqIEBwYXJhbSB4IHRyYW5zbGF0aW9uIGNvbXBvbmVudCB4Ci0gICAgKiBAcGFyYW0geSB0cmFuc2xhdGlvbiBjb21wb25lbnQgeQotICAgICovCi0gICAgcHVibGljIHZvaWQgbG9hZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIGxvYWRJZGVudGl0eSgpOwotICAgICAgICBtTWF0WzZdID0geDsKLSAgICAgICAgbU1hdFs3XSA9IHk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXRzIGN1cnJlbnQgdmFsdWVzIHRvIGJlIHRoZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgdHdvIGdpdmVuCi0gICAgKiBtYXRyaWNlcwotICAgICoKLSAgICAqIEBwYXJhbSBsaHMgbGVmdCBoYW5kIHNpZGUgbWF0cml4Ci0gICAgKiBAcGFyYW0gcmhzIHJpZ2h0IGhhbmQgc2lkZSBtYXRyaXgKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWRNdWx0aXBseShNYXRyaXgzZiBsaHMsIE1hdHJpeDNmIHJocykgewotICAgICAgICBmb3IgKGludCBpPTAgOyBpPDMgOyBpKyspIHsKLSAgICAgICAgICAgIGZsb2F0IHJpMCA9IDA7Ci0gICAgICAgICAgICBmbG9hdCByaTEgPSAwOwotICAgICAgICAgICAgZmxvYXQgcmkyID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGo9MCA7IGo8MyA7IGorKykgewotICAgICAgICAgICAgICAgIGZsb2F0IHJoc19paiA9IHJocy5nZXQoaSxqKTsKLSAgICAgICAgICAgICAgICByaTAgKz0gbGhzLmdldChqLDApICogcmhzX2lqOwotICAgICAgICAgICAgICAgIHJpMSArPSBsaHMuZ2V0KGosMSkgKiByaHNfaWo7Ci0gICAgICAgICAgICAgICAgcmkyICs9IGxocy5nZXQoaiwyKSAqIHJoc19pajsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldChpLDAsIHJpMCk7Ci0gICAgICAgICAgICBzZXQoaSwxLCByaTEpOwotICAgICAgICAgICAgc2V0KGksMiwgcmkyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICogUG9zdC1tdWx0aXBsaWVzIHRoZSBjdXJyZW50IG1hdHJpeCBieSBhIGdpdmVuIHBhcmFtZXRlcgotICAgICoKLSAgICAqIEBwYXJhbSByaHMgcmlnaHQgaGFuZCBzaWRlIHRvIG11bHRpcGx5IGJ5Ci0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtdWx0aXBseShNYXRyaXgzZiByaHMpIHsKLSAgICAgICAgTWF0cml4M2YgdG1wID0gbmV3IE1hdHJpeDNmKCk7Ci0gICAgICAgIHRtcC5sb2FkTXVsdGlwbHkodGhpcywgcmhzKTsKLSAgICAgICAgbG9hZCh0bXApOwotICAgIH0KLQotICAgIC8qKgotICAgICogTW9kaWZpZXMgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHBvc3QtbXVsdGlwbHlpbmcgaXQgd2l0aCBhCi0gICAgKiByb3RhdGlvbiBtYXRyaXggb2YgY2VydGFpbiBhbmdsZSBhYm91dCBhIGdpdmVuIGF4aXMKLSAgICAqCi0gICAgKiBAcGFyYW0gcm90IGFuZ2xlIG9mIHJvdGF0aW9uCi0gICAgKiBAcGFyYW0geCByb3RhdGlvbiBheGlzIHgKLSAgICAqIEBwYXJhbSB5IHJvdGF0aW9uIGF4aXMgeQotICAgICogQHBhcmFtIHogcm90YXRpb24gYXhpcyB6Ci0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCByb3RhdGUoZmxvYXQgcm90LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7Ci0gICAgICAgIE1hdHJpeDNmIHRtcCA9IG5ldyBNYXRyaXgzZigpOwotICAgICAgICB0bXAubG9hZFJvdGF0ZShyb3QsIHgsIHksIHopOwotICAgICAgICBtdWx0aXBseSh0bXApOwotICAgIH0KLQotICAgIC8qKgotICAgICogTW9kaWZpZXMgdGhlIHVwcGVyIDJ4MiBvZiB0aGUgY3VycmVudCBtYXRyaXggYnkKLSAgICAqIHBvc3QtbXVsdGlwbHlpbmcgaXQgd2l0aCBhIHJvdGF0aW9uIG1hdHJpeCBvZiBnaXZlbiBhbmdsZQotICAgICoKLSAgICAqIEBwYXJhbSByb3QgYW5nbGUgb2Ygcm90YXRpb24KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJvdGF0ZShmbG9hdCByb3QpIHsKLSAgICAgICAgTWF0cml4M2YgdG1wID0gbmV3IE1hdHJpeDNmKCk7Ci0gICAgICAgIHRtcC5sb2FkUm90YXRlKHJvdCk7Ci0gICAgICAgIG11bHRpcGx5KHRtcCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBNb2RpZmllcyB0aGUgdXBwZXIgMngyIG9mIHRoZSBjdXJyZW50IG1hdHJpeCBieQotICAgICogcG9zdC1tdWx0aXBseWluZyBpdCB3aXRoIGEgc2NhbGUgbWF0cml4IG9mIGdpdmVuIGRpbWVuc2lvbnMKLSAgICAqCi0gICAgKiBAcGFyYW0geCBzY2FsZSBjb21wb25lbnQgeAotICAgICogQHBhcmFtIHkgc2NhbGUgY29tcG9uZW50IHkKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNjYWxlKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgTWF0cml4M2YgdG1wID0gbmV3IE1hdHJpeDNmKCk7Ci0gICAgICAgIHRtcC5sb2FkU2NhbGUoeCwgeSk7Ci0gICAgICAgIG11bHRpcGx5KHRtcCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBNb2RpZmllcyB0aGUgY3VycmVudCBtYXRyaXggYnkgcG9zdC1tdWx0aXBseWluZyBpdCB3aXRoIGEKLSAgICAqIHNjYWxlIG1hdHJpeCBvZiBnaXZlbiBkaW1lbnNpb25zCi0gICAgKgotICAgICogQHBhcmFtIHggc2NhbGUgY29tcG9uZW50IHgKLSAgICAqIEBwYXJhbSB5IHNjYWxlIGNvbXBvbmVudCB5Ci0gICAgKiBAcGFyYW0geiBzY2FsZSBjb21wb25lbnQgegotICAgICovCi0gICAgcHVibGljIHZvaWQgc2NhbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgewotICAgICAgICBNYXRyaXgzZiB0bXAgPSBuZXcgTWF0cml4M2YoKTsKLSAgICAgICAgdG1wLmxvYWRTY2FsZSh4LCB5LCB6KTsKLSAgICAgICAgbXVsdGlwbHkodG1wKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIE1vZGlmaWVzIHRoZSBjdXJyZW50IG1hdHJpeCBieSBwb3N0LW11bHRpcGx5aW5nIGl0IHdpdGggYQotICAgICogdHJhbnNsYXRpb24gbWF0cml4IG9mIGdpdmVuIGRpbWVuc2lvbnMKLSAgICAqCi0gICAgKiBAcGFyYW0geCB0cmFuc2xhdGlvbiBjb21wb25lbnQgeAotICAgICogQHBhcmFtIHkgdHJhbnNsYXRpb24gY29tcG9uZW50IHkKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIE1hdHJpeDNmIHRtcCA9IG5ldyBNYXRyaXgzZigpOwotICAgICAgICB0bXAubG9hZFRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgbXVsdGlwbHkodG1wKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgdGhlIGN1cnJlbnQgbWF0cml4IHRvIGl0cyB0cmFuc3Bvc2UKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHRyYW5zcG9zZSgpIHsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAgICAgICAgZm9yKGludCBqID0gaSArIDE7IGogPCAzOyArK2opIHsKLSAgICAgICAgICAgICAgICBmbG9hdCB0ZW1wID0gbU1hdFtpKjMgKyBqXTsKLSAgICAgICAgICAgICAgICBtTWF0W2kqMyArIGpdID0gbU1hdFtqKjMgKyBpXTsKLSAgICAgICAgICAgICAgICBtTWF0W2oqMyArIGldID0gdGVtcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpbmFsIGZsb2F0W10gbU1hdDsKLX0KLQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDRmLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDRmLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMThlMzAuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXg0Zi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0KLS8qKgotICogQ2xhc3MgZm9yIGV4cG9zaW5nIHRoZSBuYXRpdmUgUmVuZGVyU2NyaXB0IHJzX21hdHJpeDR4NCB0eXBlIGJhY2sgdG8gdGhlIEFuZHJvaWQgc3lzdGVtLgotICoKLSAqKi8KLXB1YmxpYyBjbGFzcyBNYXRyaXg0ZiB7Ci0KLSAgICAvKioKLSAgICAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgNHg0IG1hdHJpeAotICAgICovCi0gICAgcHVibGljIE1hdHJpeDRmKCkgewotICAgICAgICBtTWF0ID0gbmV3IGZsb2F0WzE2XTsKLSAgICAgICAgbG9hZElkZW50aXR5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBDcmVhdGVzIGEgbmV3IG1hdHJpeCBhbmQgc2V0cyBpdHMgdmFsdWVzIGZyb20gdGhlIGdpdmVuCi0gICAgKiBwYXJhbWV0ZXIKLSAgICAqCi0gICAgKiBAcGFyYW0gZGF0YUFycmF5IHZhbHVlcyB0byBzZXQgdGhlIG1hdHJpeCB0bywgbXVzdCBiZSAxNgotICAgICogICAgICAgICAgICAgICAgICBmbG9hdHMgbG9uZwotICAgICovCi0gICAgcHVibGljIE1hdHJpeDRmKGZsb2F0W10gZGF0YUFycmF5KSB7Ci0gICAgICAgIG1NYXQgPSBuZXcgZmxvYXRbMTZdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGRhdGFBcnJheSwgMCwgbU1hdCwgMCwgbU1hdC5sZW5ndGgpOwotICAgIH0KLQotICAgIC8qKgotICAgICogUmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnRlcm5hbCBhcnJheSByZXByZXNlbnRpbmcgbWF0cml4Ci0gICAgKiB2YWx1ZXMuIE1vZGlmeWluZyB0aGlzIGFycmF5IHdpbGwgYWxzbyBjaGFuZ2UgdGhlIG1hdHJpeAotICAgICoKLSAgICAqIEByZXR1cm4gaW50ZXJuYWwgYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBtYXRyaXgKLSAgICAqLwotICAgIHB1YmxpYyBmbG9hdFtdIGdldEFycmF5KCkgewotICAgICAgICByZXR1cm4gbU1hdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFJldHVybnMgdGhlIHZhbHVlIGZvciBhIGdpdmVuIHJvdyBhbmQgY29sdW1uCi0gICAgKgotICAgICogQHBhcmFtIHggY29sdW1uIG9mIHRoZSB2YWx1ZSB0byByZXR1cm4KLSAgICAqIEBwYXJhbSB5IHJvdyBvZiB0aGUgdmFsdWUgdG8gcmV0dXJuCi0gICAgKgotICAgICogQHJldHVybiB2YWx1ZSBpbiB0aGUgeXRoIHJvdyBhbmQgeHRoIGNvbHVtbgotICAgICovCi0gICAgcHVibGljIGZsb2F0IGdldChpbnQgeCwgaW50IHkpIHsKLSAgICAgICAgcmV0dXJuIG1NYXRbeCo0ICsgeV07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiByb3cgYW5kIGNvbHVtbgotICAgICoKLSAgICAqIEBwYXJhbSB4IGNvbHVtbiBvZiB0aGUgdmFsdWUgdG8gc2V0Ci0gICAgKiBAcGFyYW0geSByb3cgb2YgdGhlIHZhbHVlIHRvIHNldAotICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0KGludCB4LCBpbnQgeSwgZmxvYXQgdikgewotICAgICAgICBtTWF0W3gqNCArIHldID0gdjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgdGhlIG1hdHJpeCB2YWx1ZXMgdG8gaWRlbnRpdHkKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWRJZGVudGl0eSgpIHsKLSAgICAgICAgbU1hdFswXSA9IDE7Ci0gICAgICAgIG1NYXRbMV0gPSAwOwotICAgICAgICBtTWF0WzJdID0gMDsKLSAgICAgICAgbU1hdFszXSA9IDA7Ci0KLSAgICAgICAgbU1hdFs0XSA9IDA7Ci0gICAgICAgIG1NYXRbNV0gPSAxOwotICAgICAgICBtTWF0WzZdID0gMDsKLSAgICAgICAgbU1hdFs3XSA9IDA7Ci0KLSAgICAgICAgbU1hdFs4XSA9IDA7Ci0gICAgICAgIG1NYXRbOV0gPSAwOwotICAgICAgICBtTWF0WzEwXSA9IDE7Ci0gICAgICAgIG1NYXRbMTFdID0gMDsKLQotICAgICAgICBtTWF0WzEyXSA9IDA7Ci0gICAgICAgIG1NYXRbMTNdID0gMDsKLSAgICAgICAgbU1hdFsxNF0gPSAwOwotICAgICAgICBtTWF0WzE1XSA9IDE7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIG1hdHJpeCB0byB0aG9zZSBvZiB0aGUgcGFyYW1ldGVyCi0gICAgKgotICAgICogQHBhcmFtIHNyYyBtYXRyaXggdG8gbG9hZCB0aGUgdmFsdWVzIGZyb20KLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWQoTWF0cml4NGYgc3JjKSB7Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3JjLmdldEFycmF5KCksIDAsIG1NYXQsIDAsIG1NYXQubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgdGhlIHZhbHVlcyBvZiB0aGUgbWF0cml4IHRvIHRob3NlIG9mIHRoZSBwYXJhbWV0ZXIKLSAgICAqCi0gICAgKiBAcGFyYW0gc3JjIG1hdHJpeCB0byBsb2FkIHRoZSB2YWx1ZXMgZnJvbQotICAgICogQGhpZGUKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWQoTWF0cml4M2Ygc3JjKSB7Ci0gICAgICAgIG1NYXRbMF0gPSBzcmMubU1hdFswXTsKLSAgICAgICAgbU1hdFsxXSA9IHNyYy5tTWF0WzFdOwotICAgICAgICBtTWF0WzJdID0gc3JjLm1NYXRbMl07Ci0gICAgICAgIG1NYXRbM10gPSAwOwotCi0gICAgICAgIG1NYXRbNF0gPSBzcmMubU1hdFszXTsKLSAgICAgICAgbU1hdFs1XSA9IHNyYy5tTWF0WzRdOwotICAgICAgICBtTWF0WzZdID0gc3JjLm1NYXRbNV07Ci0gICAgICAgIG1NYXRbN10gPSAwOwotCi0gICAgICAgIG1NYXRbOF0gPSBzcmMubU1hdFs2XTsKLSAgICAgICAgbU1hdFs5XSA9IHNyYy5tTWF0WzddOwotICAgICAgICBtTWF0WzEwXSA9IHNyYy5tTWF0WzhdOwotICAgICAgICBtTWF0WzExXSA9IDA7Ci0KLSAgICAgICAgbU1hdFsxMl0gPSAwOwotICAgICAgICBtTWF0WzEzXSA9IDA7Ci0gICAgICAgIG1NYXRbMTRdID0gMDsKLSAgICAgICAgbU1hdFsxNV0gPSAxOwotICAgIH0KLQotICAgIC8qKgotICAgICogU2V0cyBjdXJyZW50IHZhbHVlcyB0byBiZSBhIHJvdGF0aW9uIG1hdHJpeCBvZiBjZXJ0YWluIGFuZ2xlCi0gICAgKiBhYm91dCBhIGdpdmVuIGF4aXMKLSAgICAqCi0gICAgKiBAcGFyYW0gcm90IGFuZ2xlIG9mIHJvdGF0aW9uCi0gICAgKiBAcGFyYW0geCByb3RhdGlvbiBheGlzIHgKLSAgICAqIEBwYXJhbSB5IHJvdGF0aW9uIGF4aXMgeQotICAgICogQHBhcmFtIHogcm90YXRpb24gYXhpcyB6Ci0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBsb2FkUm90YXRlKGZsb2F0IHJvdCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgewotICAgICAgICBmbG9hdCBjLCBzOwotICAgICAgICBtTWF0WzNdID0gMDsKLSAgICAgICAgbU1hdFs3XSA9IDA7Ci0gICAgICAgIG1NYXRbMTFdPSAwOwotICAgICAgICBtTWF0WzEyXT0gMDsKLSAgICAgICAgbU1hdFsxM109IDA7Ci0gICAgICAgIG1NYXRbMTRdPSAwOwotICAgICAgICBtTWF0WzE1XT0gMTsKLSAgICAgICAgcm90ICo9IChmbG9hdCkoamF2YS5sYW5nLk1hdGguUEkgLyAxODAuMGYpOwotICAgICAgICBjID0gKGZsb2F0KWphdmEubGFuZy5NYXRoLmNvcyhyb3QpOwotICAgICAgICBzID0gKGZsb2F0KWphdmEubGFuZy5NYXRoLnNpbihyb3QpOwotCi0gICAgICAgIGZsb2F0IGxlbiA9IChmbG9hdClqYXZhLmxhbmcuTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeik7Ci0gICAgICAgIGlmICghKGxlbiAhPSAxKSkgewotICAgICAgICAgICAgZmxvYXQgcmVjaXBMZW4gPSAxLmYgLyBsZW47Ci0gICAgICAgICAgICB4ICo9IHJlY2lwTGVuOwotICAgICAgICAgICAgeSAqPSByZWNpcExlbjsKLSAgICAgICAgICAgIHogKj0gcmVjaXBMZW47Ci0gICAgICAgIH0KLSAgICAgICAgZmxvYXQgbmMgPSAxLjBmIC0gYzsKLSAgICAgICAgZmxvYXQgeHkgPSB4ICogeTsKLSAgICAgICAgZmxvYXQgeXogPSB5ICogejsKLSAgICAgICAgZmxvYXQgenggPSB6ICogeDsKLSAgICAgICAgZmxvYXQgeHMgPSB4ICogczsKLSAgICAgICAgZmxvYXQgeXMgPSB5ICogczsKLSAgICAgICAgZmxvYXQgenMgPSB6ICogczsKLSAgICAgICAgbU1hdFsgMF0gPSB4KngqbmMgKyAgYzsKLSAgICAgICAgbU1hdFsgNF0gPSAgeHkqbmMgLSB6czsKLSAgICAgICAgbU1hdFsgOF0gPSAgengqbmMgKyB5czsKLSAgICAgICAgbU1hdFsgMV0gPSAgeHkqbmMgKyB6czsKLSAgICAgICAgbU1hdFsgNV0gPSB5KnkqbmMgKyAgYzsKLSAgICAgICAgbU1hdFsgOV0gPSAgeXoqbmMgLSB4czsKLSAgICAgICAgbU1hdFsgMl0gPSAgengqbmMgLSB5czsKLSAgICAgICAgbU1hdFsgNl0gPSAgeXoqbmMgKyB4czsKLSAgICAgICAgbU1hdFsxMF0gPSB6KnoqbmMgKyAgYzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgYSBzY2FsZSBtYXRyaXggb2YgZ2l2ZW4gZGltZW5zaW9ucwotICAgICoKLSAgICAqIEBwYXJhbSB4IHNjYWxlIGNvbXBvbmVudCB4Ci0gICAgKiBAcGFyYW0geSBzY2FsZSBjb21wb25lbnQgeQotICAgICogQHBhcmFtIHogc2NhbGUgY29tcG9uZW50IHoKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWRTY2FsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7Ci0gICAgICAgIGxvYWRJZGVudGl0eSgpOwotICAgICAgICBtTWF0WzBdID0geDsKLSAgICAgICAgbU1hdFs1XSA9IHk7Ci0gICAgICAgIG1NYXRbMTBdID0gejsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgYSB0cmFuc2xhdGlvbiBtYXRyaXggb2YgZ2l2ZW4KLSAgICAqIGRpbWVuc2lvbnMKLSAgICAqCi0gICAgKiBAcGFyYW0geCB0cmFuc2xhdGlvbiBjb21wb25lbnQgeAotICAgICogQHBhcmFtIHkgdHJhbnNsYXRpb24gY29tcG9uZW50IHkKLSAgICAqIEBwYXJhbSB6IHRyYW5zbGF0aW9uIGNvbXBvbmVudCB6Ci0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCBsb2FkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsKLSAgICAgICAgbG9hZElkZW50aXR5KCk7Ci0gICAgICAgIG1NYXRbMTJdID0geDsKLSAgICAgICAgbU1hdFsxM10gPSB5OwotICAgICAgICBtTWF0WzE0XSA9IHo7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXRzIGN1cnJlbnQgdmFsdWVzIHRvIGJlIHRoZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgdHdvIGdpdmVuCi0gICAgKiBtYXRyaWNlcwotICAgICoKLSAgICAqIEBwYXJhbSBsaHMgbGVmdCBoYW5kIHNpZGUgbWF0cml4Ci0gICAgKiBAcGFyYW0gcmhzIHJpZ2h0IGhhbmQgc2lkZSBtYXRyaXgKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWRNdWx0aXBseShNYXRyaXg0ZiBsaHMsIE1hdHJpeDRmIHJocykgewotICAgICAgICBmb3IgKGludCBpPTAgOyBpPDQgOyBpKyspIHsKLSAgICAgICAgICAgIGZsb2F0IHJpMCA9IDA7Ci0gICAgICAgICAgICBmbG9hdCByaTEgPSAwOwotICAgICAgICAgICAgZmxvYXQgcmkyID0gMDsKLSAgICAgICAgICAgIGZsb2F0IHJpMyA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqPTAgOyBqPDQgOyBqKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCByaHNfaWogPSByaHMuZ2V0KGksaik7Ci0gICAgICAgICAgICAgICAgcmkwICs9IGxocy5nZXQoaiwwKSAqIHJoc19pajsKLSAgICAgICAgICAgICAgICByaTEgKz0gbGhzLmdldChqLDEpICogcmhzX2lqOwotICAgICAgICAgICAgICAgIHJpMiArPSBsaHMuZ2V0KGosMikgKiByaHNfaWo7Ci0gICAgICAgICAgICAgICAgcmkzICs9IGxocy5nZXQoaiwzKSAqIHJoc19pajsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldChpLDAsIHJpMCk7Ci0gICAgICAgICAgICBzZXQoaSwxLCByaTEpOwotICAgICAgICAgICAgc2V0KGksMiwgcmkyKTsKLSAgICAgICAgICAgIHNldChpLDMsIHJpMyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldCBjdXJyZW50IHZhbHVlcyB0byBiZSBhbiBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBtYXRyaXgKLSAgICAqCi0gICAgKiBAcGFyYW0gbCBsb2NhdGlvbiBvZiB0aGUgbGVmdCB2ZXJ0aWNhbCBjbGlwcGluZyBwbGFuZQotICAgICogQHBhcmFtIHIgbG9jYXRpb24gb2YgdGhlIHJpZ2h0IHZlcnRpY2FsIGNsaXBwaW5nIHBsYW5lCi0gICAgKiBAcGFyYW0gYiBsb2NhdGlvbiBvZiB0aGUgYm90dG9tIGhvcml6b250YWwgY2xpcHBpbmcgcGxhbmUKLSAgICAqIEBwYXJhbSB0IGxvY2F0aW9uIG9mIHRoZSB0b3AgaG9yaXpvbnRhbCBjbGlwcGluZyBwbGFuZQotICAgICogQHBhcmFtIG4gbG9jYXRpb24gb2YgdGhlIG5lYXIgY2xpcHBpbmcgcGxhbmUKLSAgICAqIEBwYXJhbSBmIGxvY2F0aW9uIG9mIHRoZSBmYXIgY2xpcHBpbmcgcGxhbmUKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWRPcnRobyhmbG9hdCBsLCBmbG9hdCByLCBmbG9hdCBiLCBmbG9hdCB0LCBmbG9hdCBuLCBmbG9hdCBmKSB7Ci0gICAgICAgIGxvYWRJZGVudGl0eSgpOwotICAgICAgICBtTWF0WzBdID0gMiAvIChyIC0gbCk7Ci0gICAgICAgIG1NYXRbNV0gPSAyIC8gKHQgLSBiKTsKLSAgICAgICAgbU1hdFsxMF09IC0yIC8gKGYgLSBuKTsKLSAgICAgICAgbU1hdFsxMl09IC0ociArIGwpIC8gKHIgLSBsKTsKLSAgICAgICAgbU1hdFsxM109IC0odCArIGIpIC8gKHQgLSBiKTsKLSAgICAgICAgbU1hdFsxNF09IC0oZiArIG4pIC8gKGYgLSBuKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldCBjdXJyZW50IHZhbHVlcyB0byBiZSBhbiBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBtYXRyaXgKLSAgICAqIHdpdGggdGhlIHJpZ2h0IGFuZCBib3R0b20gY2xpcHBpbmcgcGxhbmVzIHNldCB0byB0aGUgZ2l2ZW4KLSAgICAqIHZhbHVlcy4gTGVmdCBhbmQgdG9wIGNsaXBwaW5nIHBsYW5lcyBhcmUgc2V0IHRvIDAuIE5lYXIgYW5kCi0gICAgKiBmYXIgYXJlIHNldCB0byAtMSwgMSByZXNwZWN0aXZlbHkKLSAgICAqCi0gICAgKiBAcGFyYW0gdyBsb2NhdGlvbiBvZiB0aGUgcmlnaHQgdmVydGljYWwgY2xpcHBpbmcgcGxhbmUKLSAgICAqIEBwYXJhbSBoIGxvY2F0aW9uIG9mIHRoZSBib3R0b20gaG9yaXpvbnRhbCBjbGlwcGluZyBwbGFuZQotICAgICoKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWRPcnRob1dpbmRvdyhpbnQgdywgaW50IGgpIHsKLSAgICAgICAgbG9hZE9ydGhvKDAsdywgaCwwLCAtMSwxKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeAotICAgICoKLSAgICAqIEBwYXJhbSBsIGxvY2F0aW9uIG9mIHRoZSBsZWZ0IHZlcnRpY2FsIGNsaXBwaW5nIHBsYW5lCi0gICAgKiBAcGFyYW0gciBsb2NhdGlvbiBvZiB0aGUgcmlnaHQgdmVydGljYWwgY2xpcHBpbmcgcGxhbmUKLSAgICAqIEBwYXJhbSBiIGxvY2F0aW9uIG9mIHRoZSBib3R0b20gaG9yaXpvbnRhbCBjbGlwcGluZyBwbGFuZQotICAgICogQHBhcmFtIHQgbG9jYXRpb24gb2YgdGhlIHRvcCBob3Jpem9udGFsIGNsaXBwaW5nIHBsYW5lCi0gICAgKiBAcGFyYW0gbiBsb2NhdGlvbiBvZiB0aGUgbmVhciBjbGlwcGluZyBwbGFuZSwgbXVzdCBiZSBwb3NpdGl2ZQotICAgICogQHBhcmFtIGYgbG9jYXRpb24gb2YgdGhlIGZhciBjbGlwcGluZyBwbGFuZSwgbXVzdCBiZSBwb3NpdGl2ZQotICAgICoKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWRGcnVzdHVtKGZsb2F0IGwsIGZsb2F0IHIsIGZsb2F0IGIsIGZsb2F0IHQsIGZsb2F0IG4sIGZsb2F0IGYpIHsKLSAgICAgICAgbG9hZElkZW50aXR5KCk7Ci0gICAgICAgIG1NYXRbMF0gPSAyICogbiAvIChyIC0gbCk7Ci0gICAgICAgIG1NYXRbNV0gPSAyICogbiAvICh0IC0gYik7Ci0gICAgICAgIG1NYXRbOF0gPSAociArIGwpIC8gKHIgLSBsKTsKLSAgICAgICAgbU1hdFs5XSA9ICh0ICsgYikgLyAodCAtIGIpOwotICAgICAgICBtTWF0WzEwXT0gLShmICsgbikgLyAoZiAtIG4pOwotICAgICAgICBtTWF0WzExXT0gLTE7Ci0gICAgICAgIG1NYXRbMTRdPSAtMipmKm4gLyAoZiAtIG4pOwotICAgICAgICBtTWF0WzE1XT0gMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeAotICAgICoKLSAgICAqIEBwYXJhbSBmb3Z5IHZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgYW5nbGUgaW4gZGVncmVlcwotICAgICogQHBhcmFtIGFzcGVjdCBhc3BlY3QgcmF0aW8gb2YgdGhlIHNjcmVlbgotICAgICogQHBhcmFtIG5lYXIgbmVhciBjbGlwaW5nIHBsYW5lLCBtdXN0IGJlIHBvc2l0aXZlCi0gICAgKiBAcGFyYW0gZmFyIGZhciBjbGlwcGluZyBwbGFuZSwgbXVzdCBiZSBwb3NpdGl2ZQotICAgICovCi0gICAgcHVibGljIHZvaWQgbG9hZFBlcnNwZWN0aXZlKGZsb2F0IGZvdnksIGZsb2F0IGFzcGVjdCwgZmxvYXQgbmVhciwgZmxvYXQgZmFyKSB7Ci0gICAgICAgIGZsb2F0IHRvcCA9IG5lYXIgKiAoZmxvYXQpTWF0aC50YW4oKGZsb2F0KSAoZm92eSAqIE1hdGguUEkgLyAzNjAuMGYpKTsKLSAgICAgICAgZmxvYXQgYm90dG9tID0gLXRvcDsKLSAgICAgICAgZmxvYXQgbGVmdCA9IGJvdHRvbSAqIGFzcGVjdDsKLSAgICAgICAgZmxvYXQgcmlnaHQgPSB0b3AgKiBhc3BlY3Q7Ci0gICAgICAgIGxvYWRGcnVzdHVtKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIEhlbHBlciBmdW5jdGlvbiB0byBzZXQgdGhlIGN1cnJlbnQgdmFsdWVzIHRvIGEgcGVyc3BlY3RpdmUKLSAgICAqIHByb2plY3Rpb24gbWF0cml4IHdpdGggYXNwZWN0IHJhdGlvIGRlZmluZWQgYnkgdGhlIHBhcmFtZXRlcnMKLSAgICAqIGFuZCAobmVhciwgZmFyKSwgKGJvdHRvbSwgdG9wKSBtYXBwaW5nIHRvICgtMSwgMSkgYXQgeiA9IDAKLSAgICAqCi0gICAgKiBAcGFyYW0gdyBzY3JlZW4gd2lkdGgKLSAgICAqIEBwYXJhbSBoIHNjcmVlbiBoZWlnaHQKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIGxvYWRQcm9qZWN0aW9uTm9ybWFsaXplZChpbnQgdywgaW50IGgpIHsKLSAgICAgICAgLy8gcmFuZ2UgLTEsMSBpbiB0aGUgbmFycm93IGF4aXMgYXQgeiA9IDAuCi0gICAgICAgIE1hdHJpeDRmIG0xID0gbmV3IE1hdHJpeDRmKCk7Ci0gICAgICAgIE1hdHJpeDRmIG0yID0gbmV3IE1hdHJpeDRmKCk7Ci0KLSAgICAgICAgaWYodyA+IGgpIHsKLSAgICAgICAgICAgIGZsb2F0IGFzcGVjdCA9ICgoZmxvYXQpdykgLyBoOwotICAgICAgICAgICAgbTEubG9hZEZydXN0dW0oLWFzcGVjdCxhc3BlY3QsICAtMSwxLCAgMSwxMDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmxvYXQgYXNwZWN0ID0gKChmbG9hdCloKSAvIHc7Ci0gICAgICAgICAgICBtMS5sb2FkRnJ1c3R1bSgtMSwxLCAtYXNwZWN0LGFzcGVjdCwgMSwxMDApOwotICAgICAgICB9Ci0KLSAgICAgICAgbTIubG9hZFJvdGF0ZSgxODAsIDAsIDEsIDApOwotICAgICAgICBtMS5sb2FkTXVsdGlwbHkobTEsIG0yKTsKLQotICAgICAgICBtMi5sb2FkU2NhbGUoLTIsIDIsIDEpOwotICAgICAgICBtMS5sb2FkTXVsdGlwbHkobTEsIG0yKTsKLQotICAgICAgICBtMi5sb2FkVHJhbnNsYXRlKDAsIDAsIDIpOwotICAgICAgICBtMS5sb2FkTXVsdGlwbHkobTEsIG0yKTsKLQotICAgICAgICBsb2FkKG0xKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFBvc3QtbXVsdGlwbGllcyB0aGUgY3VycmVudCBtYXRyaXggYnkgYSBnaXZlbiBwYXJhbWV0ZXIKLSAgICAqCi0gICAgKiBAcGFyYW0gcmhzIHJpZ2h0IGhhbmQgc2lkZSB0byBtdWx0aXBseSBieQotICAgICovCi0gICAgcHVibGljIHZvaWQgbXVsdGlwbHkoTWF0cml4NGYgcmhzKSB7Ci0gICAgICAgIE1hdHJpeDRmIHRtcCA9IG5ldyBNYXRyaXg0ZigpOwotICAgICAgICB0bXAubG9hZE11bHRpcGx5KHRoaXMsIHJocyk7Ci0gICAgICAgIGxvYWQodG1wKTsKLSAgICB9Ci0gICAgLyoqCi0gICAgKiBNb2RpZmllcyB0aGUgY3VycmVudCBtYXRyaXggYnkgcG9zdC1tdWx0aXBseWluZyBpdCB3aXRoIGEKLSAgICAqIHJvdGF0aW9uIG1hdHJpeCBvZiBjZXJ0YWluIGFuZ2xlIGFib3V0IGEgZ2l2ZW4gYXhpcwotICAgICoKLSAgICAqIEBwYXJhbSByb3QgYW5nbGUgb2Ygcm90YXRpb24KLSAgICAqIEBwYXJhbSB4IHJvdGF0aW9uIGF4aXMgeAotICAgICogQHBhcmFtIHkgcm90YXRpb24gYXhpcyB5Ci0gICAgKiBAcGFyYW0geiByb3RhdGlvbiBheGlzIHoKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJvdGF0ZShmbG9hdCByb3QsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsKLSAgICAgICAgTWF0cml4NGYgdG1wID0gbmV3IE1hdHJpeDRmKCk7Ci0gICAgICAgIHRtcC5sb2FkUm90YXRlKHJvdCwgeCwgeSwgeik7Ci0gICAgICAgIG11bHRpcGx5KHRtcCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBNb2RpZmllcyB0aGUgY3VycmVudCBtYXRyaXggYnkgcG9zdC1tdWx0aXBseWluZyBpdCB3aXRoIGEKLSAgICAqIHNjYWxlIG1hdHJpeCBvZiBnaXZlbiBkaW1lbnNpb25zCi0gICAgKgotICAgICogQHBhcmFtIHggc2NhbGUgY29tcG9uZW50IHgKLSAgICAqIEBwYXJhbSB5IHNjYWxlIGNvbXBvbmVudCB5Ci0gICAgKiBAcGFyYW0geiBzY2FsZSBjb21wb25lbnQgegotICAgICovCi0gICAgcHVibGljIHZvaWQgc2NhbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgewotICAgICAgICBNYXRyaXg0ZiB0bXAgPSBuZXcgTWF0cml4NGYoKTsKLSAgICAgICAgdG1wLmxvYWRTY2FsZSh4LCB5LCB6KTsKLSAgICAgICAgbXVsdGlwbHkodG1wKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIE1vZGlmaWVzIHRoZSBjdXJyZW50IG1hdHJpeCBieSBwb3N0LW11bHRpcGx5aW5nIGl0IHdpdGggYQotICAgICogdHJhbnNsYXRpb24gbWF0cml4IG9mIGdpdmVuIGRpbWVuc2lvbnMKLSAgICAqCi0gICAgKiBAcGFyYW0geCB0cmFuc2xhdGlvbiBjb21wb25lbnQgeAotICAgICogQHBhcmFtIHkgdHJhbnNsYXRpb24gY29tcG9uZW50IHkKLSAgICAqIEBwYXJhbSB6IHRyYW5zbGF0aW9uIGNvbXBvbmVudCB6Ci0gICAgKi8KLSAgICBwdWJsaWMgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgewotICAgICAgICBNYXRyaXg0ZiB0bXAgPSBuZXcgTWF0cml4NGYoKTsKLSAgICAgICAgdG1wLmxvYWRUcmFuc2xhdGUoeCwgeSwgeik7Ci0gICAgICAgIG11bHRpcGx5KHRtcCk7Ci0gICAgfQotICAgIHByaXZhdGUgZmxvYXQgY29tcHV0ZUNvZmFjdG9yKGludCBpLCBpbnQgaikgewotICAgICAgICBpbnQgYzAgPSAoaSsxKSAlIDQ7Ci0gICAgICAgIGludCBjMSA9IChpKzIpICUgNDsKLSAgICAgICAgaW50IGMyID0gKGkrMykgJSA0OwotICAgICAgICBpbnQgcjAgPSAoaisxKSAlIDQ7Ci0gICAgICAgIGludCByMSA9IChqKzIpICUgNDsKLSAgICAgICAgaW50IHIyID0gKGorMykgJSA0OwotCi0gICAgICAgIGZsb2F0IG1pbm9yID0gKG1NYXRbYzAgKyA0KnIwXSAqIChtTWF0W2MxICsgNCpyMV0gKiBtTWF0W2MyICsgNCpyMl0gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWF0W2MxICsgNCpyMl0gKiBtTWF0W2MyICsgNCpyMV0pKQotICAgICAgICAgICAgICAgICAgICAgLSAobU1hdFtjMCArIDQqcjFdICogKG1NYXRbYzEgKyA0KnIwXSAqIG1NYXRbYzIgKyA0KnIyXSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NYXRbYzEgKyA0KnIyXSAqIG1NYXRbYzIgKyA0KnIwXSkpCi0gICAgICAgICAgICAgICAgICAgICArIChtTWF0W2MwICsgNCpyMl0gKiAobU1hdFtjMSArIDQqcjBdICogbU1hdFtjMiArIDQqcjFdIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1hdFtjMSArIDQqcjFdICogbU1hdFtjMiArIDQqcjBdKSk7Ci0KLSAgICAgICAgZmxvYXQgY29mYWN0b3IgPSAoKGkraikgJiAxKSAhPSAwID8gLW1pbm9yIDogbWlub3I7Ci0gICAgICAgIHJldHVybiBjb2ZhY3RvcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgdGhlIGN1cnJlbnQgbWF0cml4IHRvIGl0cyBpbnZlcnNlCi0gICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpbnZlcnNlKCkgewotCi0gICAgICAgIE1hdHJpeDRmIHJlc3VsdCA9IG5ldyBNYXRyaXg0ZigpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7ICsraikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5tTWF0WzQqaSArIGpdID0gY29tcHV0ZUNvZmFjdG9yKGksIGopOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRG90IHByb2R1Y3Qgb2YgMHRoIGNvbHVtbiBvZiBzb3VyY2UgYW5kIDB0aCByb3cgb2YgcmVzdWx0Ci0gICAgICAgIGZsb2F0IGRldCA9IG1NYXRbMF0qcmVzdWx0Lm1NYXRbMF0gKyBtTWF0WzRdKnJlc3VsdC5tTWF0WzFdICsKLSAgICAgICAgICAgICAgICAgICAgIG1NYXRbOF0qcmVzdWx0Lm1NYXRbMl0gKyBtTWF0WzEyXSpyZXN1bHQubU1hdFszXTsKLQotICAgICAgICBpZiAoTWF0aC5hYnMoZGV0KSA8IDFlLTYpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGRldCA9IDEuMGYgLyBkZXQ7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7ICsraSkgewotICAgICAgICAgICAgbU1hdFtpXSA9IHJlc3VsdC5tTWF0W2ldICogZGV0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBTZXRzIHRoZSBjdXJyZW50IG1hdHJpeCB0byBpdHMgaW52ZXJzZSB0cmFuc3Bvc2UKLSAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGludmVyc2VUcmFuc3Bvc2UoKSB7Ci0KLSAgICAgICAgTWF0cml4NGYgcmVzdWx0ID0gbmV3IE1hdHJpeDRmKCk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm1NYXRbNCpqICsgaV0gPSBjb21wdXRlQ29mYWN0b3IoaSwgaik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBkZXQgPSBtTWF0WzBdKnJlc3VsdC5tTWF0WzBdICsgbU1hdFs0XSpyZXN1bHQubU1hdFs0XSArCi0gICAgICAgICAgICAgICAgICAgICBtTWF0WzhdKnJlc3VsdC5tTWF0WzhdICsgbU1hdFsxMl0qcmVzdWx0Lm1NYXRbMTJdOwotCi0gICAgICAgIGlmIChNYXRoLmFicyhkZXQpIDwgMWUtNikgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZGV0ID0gMS4wZiAvIGRldDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgKytpKSB7Ci0gICAgICAgICAgICBtTWF0W2ldID0gcmVzdWx0Lm1NYXRbaV0gKiBkZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldHMgdGhlIGN1cnJlbnQgbWF0cml4IHRvIGl0cyB0cmFuc3Bvc2UKLSAgICAqLwotICAgIHB1YmxpYyB2b2lkIHRyYW5zcG9zZSgpIHsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAgZm9yKGludCBqID0gaSArIDE7IGogPCA0OyArK2opIHsKLSAgICAgICAgICAgICAgICBmbG9hdCB0ZW1wID0gbU1hdFtpKjQgKyBqXTsKLSAgICAgICAgICAgICAgICBtTWF0W2kqNCArIGpdID0gbU1hdFtqKjQgKyBpXTsKLSAgICAgICAgICAgICAgICBtTWF0W2oqNCArIGldID0gdGVtcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpbmFsIGZsb2F0W10gbU1hdDsKLX0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaC5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYTRhYTMuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKLQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEBoaWRlCi0gKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAqIDxwPlRoaXMgY2xhc3MgaXMgYSBjb250YWluZXIgZm9yIGdlb21ldHJpYyBkYXRhIGRpc3BsYXllZCB3aXRoCi0gKiBSZW5kZXJTY3JpcHQuIEludGVybmFsbHksIGEgbWVzaCBpcyBhIGNvbGxlY3Rpb24gb2YgYWxsb2NhdGlvbnMgdGhhdAotICogcmVwcmVzZW50IHZlcnRleCBkYXRhIChwb3NpdGlvbnMsIG5vcm1hbHMsIHRleHR1cmUKLSAqIGNvb3JkaW5hdGVzKSBhbmQgaW5kZXggZGF0YSBzdWNoIGFzIHRyaWFuZ2xlcyBhbmQgbGluZXMuIDwvcD4KLSAqIDxwPgotICogVmVydGV4IGRhdGEgY291bGQgZWl0aGVyIGJlIGludGVybGVhdmVkIHdpdGhpbiBvbmUKLSAqIGFsbG9jYXRpb24gdGhhdCBpcyBwcm92aWRlZCBzZXBhcmF0ZWx5LCBhcyBtdWx0aXBsZSBhbGxvY2F0aW9uCi0gKiBvYmplY3RzLCBvciBkb25lIGFzIGEgY29tYmluYXRpb24gb2YgYm90aC4gV2hlbiBhCi0gKiB2ZXJ0ZXggY2hhbm5lbCBuYW1lIG1hdGNoZXMgYW4gaW5wdXQgaW4gdGhlIHZlcnRleCBwcm9ncmFtLAotICogUmVuZGVyU2NyaXB0IGF1dG9tYXRpY2FsbHkgY29ubmVjdHMgdGhlIHR3byB0b2dldGhlci4KLSAqIDwvcD4KLSAqIDxwPgotICogIFBhcnRzIG9mIHRoZSBtZXNoIGNhbiBiZSByZW5kZXJlZCB3aXRoIGVpdGhlciBleHBsaWNpdAotICogIGluZGV4IHNldHMgb3IgcHJpbWl0aXZlIHR5cGVzLgotICogPC9wPgotICoqLwotcHVibGljIGNsYXNzIE1lc2ggZXh0ZW5kcyBCYXNlT2JqIHsKLQotICAgIC8qKgotICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgKiBEZXNjcmliZXMgdGhlIHdheSBtZXNoIHZlcnRleCBkYXRhIGlzIGludGVycHJldGVkIHdoZW4gcmVuZGVyaW5nCi0gICAgKgotICAgICoqLwotICAgIHB1YmxpYyBlbnVtIFByaW1pdGl2ZSB7Ci0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIFZlcnRleCBkYXRhIHdpbGwgYmUgcmVuZGVyZWQgYXMgYSBzZXJpZXMgb2YgcG9pbnRzCi0gICAgICAgICovCi0gICAgICAgIFBPSU5UICgwKSwKLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogVmVydGV4IHBhaXJzIHdpbGwgYmUgcmVuZGVyZWQgYXMgbGluZXMKLSAgICAgICAgKi8KLSAgICAgICAgTElORSAoMSksCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIFZlcnRleCBkYXRhIHdpbGwgYmUgcmVuZGVyZWQgYXMgYSBjb25uZWN0ZWQgbGluZSBzdHJpcAotICAgICAgICAqLwotICAgICAgICBMSU5FX1NUUklQICgyKSwKLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogVmVydGljZXMgd2lsbCBiZSByZW5kZXJlZCBhcyBpbmRpdmlkdWFsIHRyaWFuZ2xlcwotICAgICAgICAqLwotICAgICAgICBUUklBTkdMRSAoMyksCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIFZlcnRpY2VzIHdpbGwgYmUgcmVuZGVyZWQgYXMgYSBjb25uZWN0ZWQgdHJpYW5nbGUgc3RyaXAKLSAgICAgICAgKiBkZWZpbmVkIGJ5IHRoZSBmaXJzdCB0aHJlZSB2ZXJ0aWNlcyB3aXRoIGVhY2ggYWRkaXRpb25hbAotICAgICAgICAqIHRyaWFuZ2xlIGRlZmluZWQgYnkgYSBuZXcgdmVydGV4Ci0gICAgICAgICovCi0gICAgICAgIFRSSUFOR0xFX1NUUklQICg0KSwKLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogVmVydGljZXMgd2lsbCBiZSByZW5kZXJlZCBhcyBhIHNlcXVlbmNlIG9mIHRyaWFuZ2xlcyB0aGF0IGFsbAotICAgICAgICAqIHNoYXJlIGZpcnN0IHZlcnRleCBhcyB0aGUgb3JpZ2luCi0gICAgICAgICovCi0gICAgICAgIFRSSUFOR0xFX0ZBTiAoNSk7Ci0KLSAgICAgICAgaW50IG1JRDsKLSAgICAgICAgUHJpbWl0aXZlKGludCBpZCkgewotICAgICAgICAgICAgbUlEID0gaWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBbGxvY2F0aW9uW10gbVZlcnRleEJ1ZmZlcnM7Ci0gICAgQWxsb2NhdGlvbltdIG1JbmRleEJ1ZmZlcnM7Ci0gICAgUHJpbWl0aXZlW10gbVByaW1pdGl2ZXM7Ci0KLSAgICBNZXNoKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAqIEByZXR1cm4gbnVtYmVyIG9mIGFsbG9jYXRpb25zIGNvbnRhaW5pbmcgdmVydGV4IGRhdGEKLSAgICAqCi0gICAgKiovCi0gICAgcHVibGljIGludCBnZXRWZXJ0ZXhBbGxvY2F0aW9uQ291bnQoKSB7Ci0gICAgICAgIGlmKG1WZXJ0ZXhCdWZmZXJzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtVmVydGV4QnVmZmVycy5sZW5ndGg7Ci0gICAgfQotICAgIC8qKgotICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgKiBAcGFyYW0gc2xvdCBpbmRleCBpbiB0aGUgbGlzdCBvZiBhbGxvY2F0aW9ucyB0byByZXR1cm4KLSAgICAqIEByZXR1cm4gdmVydGV4IGRhdGEgYWxsb2NhdGlvbiBhdCB0aGUgZ2l2ZW4gaW5kZXgKLSAgICAqCi0gICAgKiovCi0gICAgcHVibGljIEFsbG9jYXRpb24gZ2V0VmVydGV4QWxsb2NhdGlvbihpbnQgc2xvdCkgewotICAgICAgICByZXR1cm4gbVZlcnRleEJ1ZmZlcnNbc2xvdF07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAqIEByZXR1cm4gbnVtYmVyIG9mIHByaW1pdGl2ZXMgb3IgaW5kZXggc2V0cyBpbiB0aGUgbWVzaAotICAgICoKLSAgICAqKi8KLSAgICBwdWJsaWMgaW50IGdldFByaW1pdGl2ZUNvdW50KCkgewotICAgICAgICBpZihtSW5kZXhCdWZmZXJzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtSW5kZXhCdWZmZXJzLmxlbmd0aDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICogQHBhcmFtIHNsb3QgbG9jYXRvbiB3aXRoaW4gdGhlIGxpc3Qgb2YgaW5kZXggc2V0IGFsbG9jYXRpb24KLSAgICAqIEByZXR1cm4gYWxsb2NhdGlvbiBjb250YWluaW5nIHByaW10aXZlIGluZGV4IGRhdGEgb3IgbnVsbCBpZgotICAgICogICAgICAgICB0aGUgaW5kZXggZGF0YSBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHkKLSAgICAqCi0gICAgKiovCi0gICAgcHVibGljIEFsbG9jYXRpb24gZ2V0SW5kZXhTZXRBbGxvY2F0aW9uKGludCBzbG90KSB7Ci0gICAgICAgIHJldHVybiBtSW5kZXhCdWZmZXJzW3Nsb3RdOwotICAgIH0KLSAgICAvKioKLSAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICogQHBhcmFtIHNsb3QgbG9jYWl0b24gd2l0aGluIHRoZSBsaXN0IG9mIGluZGV4IHNldCBwcmltaXRpdmVzCi0gICAgKiBAcmV0dXJuIGluZGV4IHNldCBwcmltaXRpdmUgdHlwZQotICAgICoKLSAgICAqKi8KLSAgICBwdWJsaWMgUHJpbWl0aXZlIGdldFByaW1pdGl2ZShpbnQgc2xvdCkgewotICAgICAgICByZXR1cm4gbVByaW1pdGl2ZXNbc2xvdF07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgdm9pZCB1cGRhdGVGcm9tTmF0aXZlKCkgewotICAgICAgICBzdXBlci51cGRhdGVGcm9tTmF0aXZlKCk7Ci0gICAgICAgIGludCB2dHhDb3VudCA9IG1SUy5uTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50KGdldElEKG1SUykpOwotICAgICAgICBpbnQgaWR4Q291bnQgPSBtUlMubk1lc2hHZXRJbmRleENvdW50KGdldElEKG1SUykpOwotCi0gICAgICAgIGludFtdIHZ0eElEcyA9IG5ldyBpbnRbdnR4Q291bnRdOwotICAgICAgICBpbnRbXSBpZHhJRHMgPSBuZXcgaW50W2lkeENvdW50XTsKLSAgICAgICAgaW50W10gcHJpbWl0aXZlcyA9IG5ldyBpbnRbaWR4Q291bnRdOwotCi0gICAgICAgIG1SUy5uTWVzaEdldFZlcnRpY2VzKGdldElEKG1SUyksIHZ0eElEcywgdnR4Q291bnQpOwotICAgICAgICBtUlMubk1lc2hHZXRJbmRpY2VzKGdldElEKG1SUyksIGlkeElEcywgcHJpbWl0aXZlcywgaWR4Q291bnQpOwotCi0gICAgICAgIG1WZXJ0ZXhCdWZmZXJzID0gbmV3IEFsbG9jYXRpb25bdnR4Q291bnRdOwotICAgICAgICBtSW5kZXhCdWZmZXJzID0gbmV3IEFsbG9jYXRpb25baWR4Q291bnRdOwotICAgICAgICBtUHJpbWl0aXZlcyA9IG5ldyBQcmltaXRpdmVbaWR4Q291bnRdOwotCi0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB2dHhDb3VudDsgaSArKykgewotICAgICAgICAgICAgaWYodnR4SURzW2ldICE9IDApIHsKLSAgICAgICAgICAgICAgICBtVmVydGV4QnVmZmVyc1tpXSA9IG5ldyBBbGxvY2F0aW9uKHZ0eElEc1tpXSwgbVJTLCBudWxsLCBBbGxvY2F0aW9uLlVTQUdFX1NDUklQVCk7Ci0gICAgICAgICAgICAgICAgbVZlcnRleEJ1ZmZlcnNbaV0udXBkYXRlRnJvbU5hdGl2ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGlkeENvdW50OyBpICsrKSB7Ci0gICAgICAgICAgICBpZihpZHhJRHNbaV0gIT0gMCkgewotICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlcnNbaV0gPSBuZXcgQWxsb2NhdGlvbihpZHhJRHNbaV0sIG1SUywgbnVsbCwgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlcnNbaV0udXBkYXRlRnJvbU5hdGl2ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVByaW1pdGl2ZXNbaV0gPSBQcmltaXRpdmUudmFsdWVzKClbcHJpbWl0aXZlc1tpXV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICogTWVzaCBidWlsZGVyIG9iamVjdC4gSXQgc3RhcnRzIGVtcHR5IGFuZCByZXF1aXJlcyB5b3UgdG8KLSAgICAqIGFkZCB0aGUgdHlwZXMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSB2ZXJ0ZXggYW5kIGluZGV4Ci0gICAgKiBhbGxvY2F0aW9ucy4KLSAgICAqCi0gICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOwotICAgICAgICBpbnQgbVVzYWdlOwotCi0gICAgICAgIGNsYXNzIEVudHJ5IHsKLSAgICAgICAgICAgIFR5cGUgdDsKLSAgICAgICAgICAgIEVsZW1lbnQgZTsKLSAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgUHJpbWl0aXZlIHByaW07Ci0gICAgICAgICAgICBpbnQgdXNhZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgbVZlcnRleFR5cGVDb3VudDsKLSAgICAgICAgRW50cnlbXSBtVmVydGV4VHlwZXM7Ci0gICAgICAgIFZlY3RvciBtSW5kZXhUeXBlczsKLQotICAgICAgICAvKioKLSAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgKiBDcmVhdGVzIGJ1aWxkZXIgb2JqZWN0Ci0gICAgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIG1lc2ggd2lsbCBiZWxvbmcuCi0gICAgICAgICogQHBhcmFtIHVzYWdlIHNwZWNpZmllcyBob3cgdGhlIG1lc2ggYWxsb2NhdGlvbnMgYXJlIHRvIGJlCi0gICAgICAgICogICAgICAgICAgICAgIGhhbmRsZWQsIHdoZXRoZXIgdGhleSBuZWVkIHRvIGJlIHVwbG9hZGVkIHRvIGEKLSAgICAgICAgKiAgICAgICAgICAgICAgYnVmZmVyIG9uIHRoZSBncHUsIG1haW50YWluIGEgY3B1IGNvcHksIGV0YwotICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMsIGludCB1c2FnZSkgewotICAgICAgICAgICAgbVJTID0gcnM7Ci0gICAgICAgICAgICBtVXNhZ2UgPSB1c2FnZTsKLSAgICAgICAgICAgIG1WZXJ0ZXhUeXBlQ291bnQgPSAwOwotICAgICAgICAgICAgbVZlcnRleFR5cGVzID0gbmV3IEVudHJ5WzE2XTsKLSAgICAgICAgICAgIG1JbmRleFR5cGVzID0gbmV3IFZlY3RvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogQHJldHVybiBpbnRlcm5hbCBpbmRleCBvZiB0aGUgbGFzdCB2ZXJ0ZXggYnVmZmVyIHR5cGUgYWRkZWQgdG8KLSAgICAgICAgKiAgICAgICAgIGJ1aWxkZXIKLSAgICAgICAgKiovCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0Q3VycmVudFZlcnRleFR5cGVJbmRleCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtVmVydGV4VHlwZUNvdW50IC0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIEByZXR1cm4gaW50ZXJuYWwgaW5kZXggb2YgdGhlIGxhc3QgaW5kZXggc2V0IGFkZGVkIHRvIHRoZQotICAgICAgICAqICAgICAgICAgYnVpbGRlcgotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIGludCBnZXRDdXJyZW50SW5kZXhTZXRJbmRleCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtSW5kZXhUeXBlcy5zaXplKCkgLSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogQWRkcyBhIHZlcnRleCBkYXRhIHR5cGUgdG8gdGhlIGJ1aWxkZXIgb2JqZWN0Ci0gICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0gdCB0eXBlIG9mIHRoZSB2ZXJ0ZXggZGF0YSBhbGxvY2F0aW9uIHRvIGJlIGNyZWF0ZWQKLSAgICAgICAgKgotICAgICAgICAqIEByZXR1cm4gdGhpcwotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkVmVydGV4VHlwZShUeXBlIHQpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gewotICAgICAgICAgICAgaWYgKG1WZXJ0ZXhUeXBlQ291bnQgPj0gbVZlcnRleFR5cGVzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk1heCB2ZXJ0ZXggdHlwZXMgZXhjZWVkZWQuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1WZXJ0ZXhUeXBlc1ttVmVydGV4VHlwZUNvdW50XSA9IG5ldyBFbnRyeSgpOwotICAgICAgICAgICAgbVZlcnRleFR5cGVzW21WZXJ0ZXhUeXBlQ291bnRdLnQgPSB0OwotICAgICAgICAgICAgbVZlcnRleFR5cGVzW21WZXJ0ZXhUeXBlQ291bnRdLmUgPSBudWxsOwotICAgICAgICAgICAgbVZlcnRleFR5cGVDb3VudCsrOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgKiBBZGRzIGEgdmVydGV4IGRhdGEgdHlwZSB0byB0aGUgYnVpbGRlciBvYmplY3QKLSAgICAgICAgKgotICAgICAgICAqIEBwYXJhbSBlIGVsZW1lbnQgZGVzY3JpYmluZyB0aGUgdmVydGV4IGRhdGEgbGF5b3V0Ci0gICAgICAgICogQHBhcmFtIHNpemUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBidWZmZXIKLSAgICAgICAgKgotICAgICAgICAqIEByZXR1cm4gdGhpcwotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkVmVydGV4VHlwZShFbGVtZW50IGUsIGludCBzaXplKSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIGlmIChtVmVydGV4VHlwZUNvdW50ID49IG1WZXJ0ZXhUeXBlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJNYXggdmVydGV4IHR5cGVzIGV4Y2VlZGVkLiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtVmVydGV4VHlwZXNbbVZlcnRleFR5cGVDb3VudF0gPSBuZXcgRW50cnkoKTsKLSAgICAgICAgICAgIG1WZXJ0ZXhUeXBlc1ttVmVydGV4VHlwZUNvdW50XS50ID0gbnVsbDsKLSAgICAgICAgICAgIG1WZXJ0ZXhUeXBlc1ttVmVydGV4VHlwZUNvdW50XS5lID0gZTsKLSAgICAgICAgICAgIG1WZXJ0ZXhUeXBlc1ttVmVydGV4VHlwZUNvdW50XS5zaXplID0gc2l6ZTsKLSAgICAgICAgICAgIG1WZXJ0ZXhUeXBlQ291bnQrKzsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogQWRkcyBhbiBpbmRleCBzZXQgZGF0YSB0eXBlIHRvIHRoZSBidWlsZGVyIG9iamVjdAotICAgICAgICAqCi0gICAgICAgICogQHBhcmFtIHQgdHlwZSBvZiB0aGUgaW5kZXggc2V0IGRhdGEsIGNvdWxkIGJlIG51bGwKLSAgICAgICAgKiBAcGFyYW0gcCBwcmltaXRpdmUgdHlwZQotICAgICAgICAqCi0gICAgICAgICogQHJldHVybiB0aGlzCi0gICAgICAgICoqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRJbmRleFNldFR5cGUoVHlwZSB0LCBQcmltaXRpdmUgcCkgewotICAgICAgICAgICAgRW50cnkgaW5kZXhUeXBlID0gbmV3IEVudHJ5KCk7Ci0gICAgICAgICAgICBpbmRleFR5cGUudCA9IHQ7Ci0gICAgICAgICAgICBpbmRleFR5cGUuZSA9IG51bGw7Ci0gICAgICAgICAgICBpbmRleFR5cGUuc2l6ZSA9IDA7Ci0gICAgICAgICAgICBpbmRleFR5cGUucHJpbSA9IHA7Ci0gICAgICAgICAgICBtSW5kZXhUeXBlcy5hZGRFbGVtZW50KGluZGV4VHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIEFkZHMgYW4gaW5kZXggc2V0IHByaW1pdGl2ZSB0eXBlIHRvIHRoZSBidWlsZGVyIG9iamVjdAotICAgICAgICAqCi0gICAgICAgICogQHBhcmFtIHAgcHJpbWl0aXZlIHR5cGUKLSAgICAgICAgKgotICAgICAgICAqIEByZXR1cm4gdGhpcwotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkSW5kZXhTZXRUeXBlKFByaW1pdGl2ZSBwKSB7Ci0gICAgICAgICAgICBFbnRyeSBpbmRleFR5cGUgPSBuZXcgRW50cnkoKTsKLSAgICAgICAgICAgIGluZGV4VHlwZS50ID0gbnVsbDsKLSAgICAgICAgICAgIGluZGV4VHlwZS5lID0gbnVsbDsKLSAgICAgICAgICAgIGluZGV4VHlwZS5zaXplID0gMDsKLSAgICAgICAgICAgIGluZGV4VHlwZS5wcmltID0gcDsKLSAgICAgICAgICAgIG1JbmRleFR5cGVzLmFkZEVsZW1lbnQoaW5kZXhUeXBlKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogQWRkcyBhbiBpbmRleCBzZXQgZGF0YSB0eXBlIHRvIHRoZSBidWlsZGVyIG9iamVjdAotICAgICAgICAqCi0gICAgICAgICogQHBhcmFtIGUgZWxlbWVudCBkZXNjcmliaW5nIHRoZSBpbmRleCBzZXQgZGF0YSBsYXlvdXQKLSAgICAgICAgKiBAcGFyYW0gc2l6ZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGJ1ZmZlcgotICAgICAgICAqIEBwYXJhbSBwIHByaW1pdGl2ZSB0eXBlCi0gICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuIHRoaXMKLSAgICAgICAgKiovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZEluZGV4U2V0VHlwZShFbGVtZW50IGUsIGludCBzaXplLCBQcmltaXRpdmUgcCkgewotICAgICAgICAgICAgRW50cnkgaW5kZXhUeXBlID0gbmV3IEVudHJ5KCk7Ci0gICAgICAgICAgICBpbmRleFR5cGUudCA9IG51bGw7Ci0gICAgICAgICAgICBpbmRleFR5cGUuZSA9IGU7Ci0gICAgICAgICAgICBpbmRleFR5cGUuc2l6ZSA9IHNpemU7Ci0gICAgICAgICAgICBpbmRleFR5cGUucHJpbSA9IHA7Ci0gICAgICAgICAgICBtSW5kZXhUeXBlcy5hZGRFbGVtZW50KGluZGV4VHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIFR5cGUgbmV3VHlwZShFbGVtZW50IGUsIGludCBzaXplKSB7Ci0gICAgICAgICAgICBUeXBlLkJ1aWxkZXIgdGIgPSBuZXcgVHlwZS5CdWlsZGVyKG1SUywgZSk7Ci0gICAgICAgICAgICB0Yi5zZXRYKHNpemUpOwotICAgICAgICAgICAgcmV0dXJuIHRiLmNyZWF0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogQ3JlYXRlIGEgTWVzaCBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYnVpbGRlcgotICAgICAgICAqCi0gICAgICAgICoqLwotICAgICAgICBwdWJsaWMgTWVzaCBjcmVhdGUoKSB7Ci0gICAgICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgICAgIGludFtdIHZ0eCA9IG5ldyBpbnRbbVZlcnRleFR5cGVDb3VudF07Ci0gICAgICAgICAgICBpbnRbXSBpZHggPSBuZXcgaW50W21JbmRleFR5cGVzLnNpemUoKV07Ci0gICAgICAgICAgICBpbnRbXSBwcmltID0gbmV3IGludFttSW5kZXhUeXBlcy5zaXplKCldOwotCi0gICAgICAgICAgICBBbGxvY2F0aW9uW10gdmVydGV4QnVmZmVycyA9IG5ldyBBbGxvY2F0aW9uW21WZXJ0ZXhUeXBlQ291bnRdOwotICAgICAgICAgICAgQWxsb2NhdGlvbltdIGluZGV4QnVmZmVycyA9IG5ldyBBbGxvY2F0aW9uW21JbmRleFR5cGVzLnNpemUoKV07Ci0gICAgICAgICAgICBQcmltaXRpdmVbXSBwcmltaXRpdmVzID0gbmV3IFByaW1pdGl2ZVttSW5kZXhUeXBlcy5zaXplKCldOwotCi0gICAgICAgICAgICBmb3IoaW50IGN0ID0gMDsgY3QgPCBtVmVydGV4VHlwZUNvdW50OyBjdCArKykgewotICAgICAgICAgICAgICAgIEFsbG9jYXRpb24gYWxsb2MgPSBudWxsOwotICAgICAgICAgICAgICAgIEVudHJ5IGVudHJ5ID0gbVZlcnRleFR5cGVzW2N0XTsKLSAgICAgICAgICAgICAgICBpZiAoZW50cnkudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFsbG9jID0gQWxsb2NhdGlvbi5jcmVhdGVUeXBlZChtUlMsIGVudHJ5LnQsIG1Vc2FnZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmKGVudHJ5LmUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBhbGxvYyA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQobVJTLCBlbnRyeS5lLCBlbnRyeS5zaXplLCBtVXNhZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJzW2N0XSA9IGFsbG9jOwotICAgICAgICAgICAgICAgIHZ0eFtjdF0gPSBhbGxvYy5nZXRJRChtUlMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IoaW50IGN0ID0gMDsgY3QgPCBtSW5kZXhUeXBlcy5zaXplKCk7IGN0ICsrKSB7Ci0gICAgICAgICAgICAgICAgQWxsb2NhdGlvbiBhbGxvYyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgRW50cnkgZW50cnkgPSAoRW50cnkpbUluZGV4VHlwZXMuZWxlbWVudEF0KGN0KTsKLSAgICAgICAgICAgICAgICBpZiAoZW50cnkudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFsbG9jID0gQWxsb2NhdGlvbi5jcmVhdGVUeXBlZChtUlMsIGVudHJ5LnQsIG1Vc2FnZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmKGVudHJ5LmUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBhbGxvYyA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQobVJTLCBlbnRyeS5lLCBlbnRyeS5zaXplLCBtVXNhZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnQgYWxsb2NJRCA9IChhbGxvYyA9PSBudWxsKSA/IDAgOiBhbGxvYy5nZXRJRChtUlMpOwotICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyc1tjdF0gPSBhbGxvYzsKLSAgICAgICAgICAgICAgICBwcmltaXRpdmVzW2N0XSA9IGVudHJ5LnByaW07Ci0KLSAgICAgICAgICAgICAgICBpZHhbY3RdID0gYWxsb2NJRDsKLSAgICAgICAgICAgICAgICBwcmltW2N0XSA9IGVudHJ5LnByaW0ubUlEOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQgaWQgPSBtUlMubk1lc2hDcmVhdGUodnR4LCBpZHgsIHByaW0pOwotICAgICAgICAgICAgTWVzaCBuZXdNZXNoID0gbmV3IE1lc2goaWQsIG1SUyk7Ci0gICAgICAgICAgICBuZXdNZXNoLm1WZXJ0ZXhCdWZmZXJzID0gdmVydGV4QnVmZmVyczsKLSAgICAgICAgICAgIG5ld01lc2gubUluZGV4QnVmZmVycyA9IGluZGV4QnVmZmVyczsKLSAgICAgICAgICAgIG5ld01lc2gubVByaW1pdGl2ZXMgPSBwcmltaXRpdmVzOwotCi0gICAgICAgICAgICByZXR1cm4gbmV3TWVzaDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgKiBNZXNoIGJ1aWxkZXIgb2JqZWN0LiBJdCBzdGFydHMgZW1wdHkgYW5kIHJlcXVpcmVzIHRoZSB1c2VyIHRvCi0gICAgKiBhZGQgYWxsIHRoZSB2ZXJ0ZXggYW5kIGluZGV4IGFsbG9jYXRpb25zIHRoYXQgY29tcHJpc2UgdGhlCi0gICAgKiBtZXNoCi0gICAgKgotICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBBbGxvY2F0aW9uQnVpbGRlciB7Ci0gICAgICAgIFJlbmRlclNjcmlwdCBtUlM7Ci0KLSAgICAgICAgY2xhc3MgRW50cnkgewotICAgICAgICAgICAgQWxsb2NhdGlvbiBhOwotICAgICAgICAgICAgUHJpbWl0aXZlIHByaW07Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgbVZlcnRleFR5cGVDb3VudDsKLSAgICAgICAgRW50cnlbXSBtVmVydGV4VHlwZXM7Ci0KLSAgICAgICAgVmVjdG9yIG1JbmRleFR5cGVzOwotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIEFsbG9jYXRpb25CdWlsZGVyKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICAgICAgbVJTID0gcnM7Ci0gICAgICAgICAgICBtVmVydGV4VHlwZUNvdW50ID0gMDsKLSAgICAgICAgICAgIG1WZXJ0ZXhUeXBlcyA9IG5ldyBFbnRyeVsxNl07Ci0gICAgICAgICAgICBtSW5kZXhUeXBlcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIEByZXR1cm4gaW50ZXJuYWwgaW5kZXggb2YgdGhlIGxhc3QgdmVydGV4IGJ1ZmZlciB0eXBlIGFkZGVkIHRvCi0gICAgICAgICogICAgICAgICBidWlsZGVyCi0gICAgICAgICoqLwotICAgICAgICBwdWJsaWMgaW50IGdldEN1cnJlbnRWZXJ0ZXhUeXBlSW5kZXgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVZlcnRleFR5cGVDb3VudCAtIDE7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgKiBAcmV0dXJuIGludGVybmFsIGluZGV4IG9mIHRoZSBsYXN0IGluZGV4IHNldCBhZGRlZCB0byB0aGUKLSAgICAgICAgKiAgICAgICAgIGJ1aWxkZXIKLSAgICAgICAgKiovCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0Q3VycmVudEluZGV4U2V0SW5kZXgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUluZGV4VHlwZXMuc2l6ZSgpIC0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIEFkZHMgYW4gYWxsb2NhdGlvbiBjb250YWluaW5nIHZlcnRleCBidWZmZXIgZGF0YSB0byB0aGUKLSAgICAgICAgKiBidWlsZGVyCi0gICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0gYSB2ZXJ0ZXggZGF0YSBhbGxvY2F0aW9uCi0gICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuIHRoaXMKLSAgICAgICAgKiovCi0gICAgICAgIHB1YmxpYyBBbGxvY2F0aW9uQnVpbGRlciBhZGRWZXJ0ZXhBbGxvY2F0aW9uKEFsbG9jYXRpb24gYSkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBpZiAobVZlcnRleFR5cGVDb3VudCA+PSBtVmVydGV4VHlwZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTWF4IHZlcnRleCB0eXBlcyBleGNlZWRlZC4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVZlcnRleFR5cGVzW21WZXJ0ZXhUeXBlQ291bnRdID0gbmV3IEVudHJ5KCk7Ci0gICAgICAgICAgICBtVmVydGV4VHlwZXNbbVZlcnRleFR5cGVDb3VudF0uYSA9IGE7Ci0gICAgICAgICAgICBtVmVydGV4VHlwZUNvdW50Kys7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIEFkZHMgYW4gYWxsb2NhdGlvbiBjb250YWluaW5nIGluZGV4IGJ1ZmZlciBkYXRhIGFuZCBpbmRleCB0eXBlCi0gICAgICAgICogdG8gdGhlIGJ1aWxkZXIKLSAgICAgICAgKgotICAgICAgICAqIEBwYXJhbSBhIGluZGV4IHNldCBkYXRhIGFsbG9jYXRpb24sIGNvdWxkIGJlIG51bGwKLSAgICAgICAgKiBAcGFyYW0gcCBpbmRleCBzZXQgcHJpbWl0aXZlIHR5cGUKLSAgICAgICAgKgotICAgICAgICAqIEByZXR1cm4gdGhpcwotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIEFsbG9jYXRpb25CdWlsZGVyIGFkZEluZGV4U2V0QWxsb2NhdGlvbihBbGxvY2F0aW9uIGEsIFByaW1pdGl2ZSBwKSB7Ci0gICAgICAgICAgICBFbnRyeSBpbmRleFR5cGUgPSBuZXcgRW50cnkoKTsKLSAgICAgICAgICAgIGluZGV4VHlwZS5hID0gYTsKLSAgICAgICAgICAgIGluZGV4VHlwZS5wcmltID0gcDsKLSAgICAgICAgICAgIG1JbmRleFR5cGVzLmFkZEVsZW1lbnQoaW5kZXhUeXBlKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogQWRkcyBhbiBpbmRleCBzZXQgdHlwZSB0byB0aGUgYnVpbGRlcgotICAgICAgICAqCi0gICAgICAgICogQHBhcmFtIHAgaW5kZXggc2V0IHByaW1pdGl2ZSB0eXBlCi0gICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuIHRoaXMKLSAgICAgICAgKiovCi0gICAgICAgIHB1YmxpYyBBbGxvY2F0aW9uQnVpbGRlciBhZGRJbmRleFNldFR5cGUoUHJpbWl0aXZlIHApIHsKLSAgICAgICAgICAgIEVudHJ5IGluZGV4VHlwZSA9IG5ldyBFbnRyeSgpOwotICAgICAgICAgICAgaW5kZXhUeXBlLmEgPSBudWxsOwotICAgICAgICAgICAgaW5kZXhUeXBlLnByaW0gPSBwOwotICAgICAgICAgICAgbUluZGV4VHlwZXMuYWRkRWxlbWVudChpbmRleFR5cGUpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgKiBDcmVhdGUgYSBNZXNoIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBidWlsZGVyCi0gICAgICAgICoKLSAgICAgICAgKiovCi0gICAgICAgIHB1YmxpYyBNZXNoIGNyZWF0ZSgpIHsKLSAgICAgICAgICAgIG1SUy52YWxpZGF0ZSgpOwotCi0gICAgICAgICAgICBpbnRbXSB2dHggPSBuZXcgaW50W21WZXJ0ZXhUeXBlQ291bnRdOwotICAgICAgICAgICAgaW50W10gaWR4ID0gbmV3IGludFttSW5kZXhUeXBlcy5zaXplKCldOwotICAgICAgICAgICAgaW50W10gcHJpbSA9IG5ldyBpbnRbbUluZGV4VHlwZXMuc2l6ZSgpXTsKLQotICAgICAgICAgICAgQWxsb2NhdGlvbltdIGluZGV4QnVmZmVycyA9IG5ldyBBbGxvY2F0aW9uW21JbmRleFR5cGVzLnNpemUoKV07Ci0gICAgICAgICAgICBQcmltaXRpdmVbXSBwcmltaXRpdmVzID0gbmV3IFByaW1pdGl2ZVttSW5kZXhUeXBlcy5zaXplKCldOwotICAgICAgICAgICAgQWxsb2NhdGlvbltdIHZlcnRleEJ1ZmZlcnMgPSBuZXcgQWxsb2NhdGlvblttVmVydGV4VHlwZUNvdW50XTsKLQotICAgICAgICAgICAgZm9yKGludCBjdCA9IDA7IGN0IDwgbVZlcnRleFR5cGVDb3VudDsgY3QgKyspIHsKLSAgICAgICAgICAgICAgICBFbnRyeSBlbnRyeSA9IG1WZXJ0ZXhUeXBlc1tjdF07Ci0gICAgICAgICAgICAgICAgdmVydGV4QnVmZmVyc1tjdF0gPSBlbnRyeS5hOwotICAgICAgICAgICAgICAgIHZ0eFtjdF0gPSBlbnRyeS5hLmdldElEKG1SUyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvcihpbnQgY3QgPSAwOyBjdCA8IG1JbmRleFR5cGVzLnNpemUoKTsgY3QgKyspIHsKLSAgICAgICAgICAgICAgICBFbnRyeSBlbnRyeSA9IChFbnRyeSltSW5kZXhUeXBlcy5lbGVtZW50QXQoY3QpOwotICAgICAgICAgICAgICAgIGludCBhbGxvY0lEID0gKGVudHJ5LmEgPT0gbnVsbCkgPyAwIDogZW50cnkuYS5nZXRJRChtUlMpOwotICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyc1tjdF0gPSBlbnRyeS5hOwotICAgICAgICAgICAgICAgIHByaW1pdGl2ZXNbY3RdID0gZW50cnkucHJpbTsKLQotICAgICAgICAgICAgICAgIGlkeFtjdF0gPSBhbGxvY0lEOwotICAgICAgICAgICAgICAgIHByaW1bY3RdID0gZW50cnkucHJpbS5tSUQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBpZCA9IG1SUy5uTWVzaENyZWF0ZSh2dHgsIGlkeCwgcHJpbSk7Ci0gICAgICAgICAgICBNZXNoIG5ld01lc2ggPSBuZXcgTWVzaChpZCwgbVJTKTsKLSAgICAgICAgICAgIG5ld01lc2gubVZlcnRleEJ1ZmZlcnMgPSB2ZXJ0ZXhCdWZmZXJzOwotICAgICAgICAgICAgbmV3TWVzaC5tSW5kZXhCdWZmZXJzID0gaW5kZXhCdWZmZXJzOwotICAgICAgICAgICAgbmV3TWVzaC5tUHJpbWl0aXZlcyA9IHByaW1pdGl2ZXM7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXdNZXNoOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAqIEJ1aWxkZXIgdGhhdCBhbGxvd3MgY3JlYXRpb24gb2YgYSBtZXNoIG9iamVjdCBwb2ludCBieSBwb2ludAotICAgICogYW5kIHRyaWFuZ2xlIGJ5IHRyaWFuZ2xlCi0gICAgKgotICAgICoqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJpYW5nbGVNZXNoQnVpbGRlciB7Ci0gICAgICAgIGZsb2F0IG1WdHhEYXRhW107Ci0gICAgICAgIGludCBtVnR4Q291bnQ7Ci0gICAgICAgIGludCBtTWF4SW5kZXg7Ci0gICAgICAgIHNob3J0IG1JbmRleERhdGFbXTsKLSAgICAgICAgaW50IG1JbmRleENvdW50OwotICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOwotICAgICAgICBFbGVtZW50IG1FbGVtZW50OwotCi0gICAgICAgIGZsb2F0IG1OWCA9IDA7Ci0gICAgICAgIGZsb2F0IG1OWSA9IDA7Ci0gICAgICAgIGZsb2F0IG1OWiA9IC0xOwotICAgICAgICBmbG9hdCBtUzAgPSAwOwotICAgICAgICBmbG9hdCBtVDAgPSAwOwotICAgICAgICBmbG9hdCBtUiA9IDE7Ci0gICAgICAgIGZsb2F0IG1HID0gMTsKLSAgICAgICAgZmxvYXQgbUIgPSAxOwotICAgICAgICBmbG9hdCBtQSA9IDE7Ci0KLSAgICAgICAgaW50IG1WdHhTaXplOwotICAgICAgICBpbnQgbUZsYWdzOwotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1IgPSAweDAwMDE7Ci0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9STUFMID0gMHgwMDAyOwotICAgICAgICAvKioKLSAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgKiovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFWFRVUkVfMCA9IDB4MDEwMDsKLQotICAgICAgICAvKioKLSAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgbWVzaCB3aWxsIGJlbG9uZy4KLSAgICAgICAgKiBAcGFyYW0gdnR4U2l6ZSBzcGVjaWZpZXMgd2hldGhlciB0aGUgdmVydGV4IGlzIGEgZmxvYXQyIG9yCi0gICAgICAgICogICAgICAgICAgICAgICAgZmxvYXQzCi0gICAgICAgICogQHBhcmFtIGZsYWdzIGJpdGZpZWxkIHRoYXQgaXMgYSBjb21iaW5hdGlvbiBvZiBDT0xPUiwgTk9STUFMLAotICAgICAgICAqICAgICAgICAgICAgICBhbmQgVEVYVFVSRV8wIHRoYXQgc3BlY2lmaWVzIHdoYXQgdmVydGV4IGRhdGEKLSAgICAgICAgKiAgICAgICAgICAgICAgY2hhbm5lbHMgYXJlIHByZXNlbnQgaW4gdGhlIG1lc2gKLSAgICAgICAgKgotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIFRyaWFuZ2xlTWVzaEJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzLCBpbnQgdnR4U2l6ZSwgaW50IGZsYWdzKSB7Ci0gICAgICAgICAgICBtUlMgPSByczsKLSAgICAgICAgICAgIG1WdHhDb3VudCA9IDA7Ci0gICAgICAgICAgICBtTWF4SW5kZXggPSAwOwotICAgICAgICAgICAgbUluZGV4Q291bnQgPSAwOwotICAgICAgICAgICAgbVZ0eERhdGEgPSBuZXcgZmxvYXRbMTI4XTsKLSAgICAgICAgICAgIG1JbmRleERhdGEgPSBuZXcgc2hvcnRbMTI4XTsKLSAgICAgICAgICAgIG1WdHhTaXplID0gdnR4U2l6ZTsKLSAgICAgICAgICAgIG1GbGFncyA9IGZsYWdzOwotCi0gICAgICAgICAgICBpZiAodnR4U2l6ZSA8IDIgfHwgdnR4U2l6ZSA+IDMpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJWZXJ0ZXggc2l6ZSBvdXQgb2YgcmFuZ2UuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgbWFrZVNwYWNlKGludCBjb3VudCkgewotICAgICAgICAgICAgaWYgKChtVnR4Q291bnQgKyBjb3VudCkgPj0gbVZ0eERhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgdFtdID0gbmV3IGZsb2F0W21WdHhEYXRhLmxlbmd0aCAqIDJdOwotICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobVZ0eERhdGEsIDAsIHQsIDAsIG1WdHhEYXRhLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgbVZ0eERhdGEgPSB0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGxhdGNoKCkgewotICAgICAgICAgICAgaWYgKChtRmxhZ3MgJiBDT0xPUikgIT0gMCkgewotICAgICAgICAgICAgICAgIG1ha2VTcGFjZSg0KTsKLSAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtUjsKLSAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtRzsKLSAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtQjsKLSAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtQTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgobUZsYWdzICYgVEVYVFVSRV8wKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgbWFrZVNwYWNlKDIpOwotICAgICAgICAgICAgICAgIG1WdHhEYXRhW21WdHhDb3VudCsrXSA9IG1TMDsKLSAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtVDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKG1GbGFncyAmIE5PUk1BTCkgIT0gMCkgewotICAgICAgICAgICAgICAgIG1ha2VTcGFjZSg0KTsKLSAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtTlg7Ci0gICAgICAgICAgICAgICAgbVZ0eERhdGFbbVZ0eENvdW50KytdID0gbU5ZOwotICAgICAgICAgICAgICAgIG1WdHhEYXRhW21WdHhDb3VudCsrXSA9IG1OWjsKLSAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSAwLjBmOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbU1heEluZGV4ICsrOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogQWRkcyBhIGZsb2F0MiB2ZXJ0ZXggdG8gdGhlIG1lc2gKLSAgICAgICAgKgotICAgICAgICAqIEBwYXJhbSB4IHBvc2l0aW9uIHgKLSAgICAgICAgKiBAcGFyYW0geSBwb3NpdGlvbiB5Ci0gICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuIHRoaXMKLSAgICAgICAgKgotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIFRyaWFuZ2xlTWVzaEJ1aWxkZXIgYWRkVmVydGV4KGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgICAgIGlmIChtVnR4U2l6ZSAhPSAyKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiYWRkIG1pc3RtYXRjaCB3aXRoIGRlY2xhcmVkIGNvbXBvbmVudHMuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYWtlU3BhY2UoMik7Ci0gICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSB4OwotICAgICAgICAgICAgbVZ0eERhdGFbbVZ0eENvdW50KytdID0geTsKLSAgICAgICAgICAgIGxhdGNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIEFkZHMgYSBmbG9hdDMgdmVydGV4IHRvIHRoZSBtZXNoCi0gICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0geCBwb3NpdGlvbiB4Ci0gICAgICAgICogQHBhcmFtIHkgcG9zaXRpb24geQotICAgICAgICAqIEBwYXJhbSB6IHBvc2l0aW9uIHoKLSAgICAgICAgKgotICAgICAgICAqIEByZXR1cm4gdGhpcwotICAgICAgICAqCi0gICAgICAgICoqLwotICAgICAgICBwdWJsaWMgVHJpYW5nbGVNZXNoQnVpbGRlciBhZGRWZXJ0ZXgoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgewotICAgICAgICAgICAgaWYgKG1WdHhTaXplICE9IDMpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJhZGQgbWlzdG1hdGNoIHdpdGggZGVjbGFyZWQgY29tcG9uZW50cy4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1ha2VTcGFjZSg0KTsKLSAgICAgICAgICAgIG1WdHhEYXRhW21WdHhDb3VudCsrXSA9IHg7Ci0gICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSB5OwotICAgICAgICAgICAgbVZ0eERhdGFbbVZ0eENvdW50KytdID0gejsKLSAgICAgICAgICAgIG1WdHhEYXRhW21WdHhDb3VudCsrXSA9IDEuMGY7Ci0gICAgICAgICAgICBsYXRjaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgKiBTZXRzIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGUgZm9yIHRoZSB2ZXJ0aWNlcyB0aGF0IGFyZSBhZGRlZCBhZnRlciB0aGlzIG1ldGhvZCBjYWxsLgotICAgICAgICAqCi0gICAgICAgICogQHBhcmFtIHMgdGV4dHVyZSBjb29yZGluYXRlIHMKLSAgICAgICAgKiBAcGFyYW0gdCB0ZXh0dXJlIGNvb3JkaW5hdGUgdAotICAgICAgICAqCi0gICAgICAgICogQHJldHVybiB0aGlzCi0gICAgICAgICoqLwotICAgICAgICBwdWJsaWMgVHJpYW5nbGVNZXNoQnVpbGRlciBzZXRUZXh0dXJlKGZsb2F0IHMsIGZsb2F0IHQpIHsKLSAgICAgICAgICAgIGlmICgobUZsYWdzICYgVEVYVFVSRV8wKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiYWRkIG1pc3RtYXRjaCB3aXRoIGRlY2xhcmVkIGNvbXBvbmVudHMuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtUzAgPSBzOwotICAgICAgICAgICAgbVQwID0gdDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogU2V0cyB0aGUgbm9ybWFsIHZlY3RvciBmb3IgdGhlIHZlcnRpY2VzIHRoYXQgYXJlIGFkZGVkIGFmdGVyIHRoaXMgbWV0aG9kIGNhbGwuCi0gICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0geCBub3JtYWwgdmVjdG9yIHgKLSAgICAgICAgKiBAcGFyYW0geSBub3JtYWwgdmVjdG9yIHkKLSAgICAgICAgKiBAcGFyYW0geiBub3JtYWwgdmVjdG9yIHoKLSAgICAgICAgKgotICAgICAgICAqIEByZXR1cm4gdGhpcwotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIFRyaWFuZ2xlTWVzaEJ1aWxkZXIgc2V0Tm9ybWFsKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsKLSAgICAgICAgICAgIGlmICgobUZsYWdzICYgTk9STUFMKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiYWRkIG1pc3RtYXRjaCB3aXRoIGRlY2xhcmVkIGNvbXBvbmVudHMuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtTlggPSB4OwotICAgICAgICAgICAgbU5ZID0geTsKLSAgICAgICAgICAgIG1OWiA9IHo7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIFNldHMgdGhlIGNvbG9yIGZvciB0aGUgdmVydGljZXMgdGhhdCBhcmUgYWRkZWQgYWZ0ZXIgdGhpcyBtZXRob2QgY2FsbC4KLSAgICAgICAgKgotICAgICAgICAqIEBwYXJhbSByIHJlZCBjb21wb25lbnQKLSAgICAgICAgKiBAcGFyYW0gZyBncmVlbiBjb21wb25lbnQKLSAgICAgICAgKiBAcGFyYW0gYiBibHVlIGNvbXBvbmVudAotICAgICAgICAqIEBwYXJhbSBhIGFscGhhIGNvbXBvbmVudAotICAgICAgICAqCi0gICAgICAgICogQHJldHVybiB0aGlzCi0gICAgICAgICoqLwotICAgICAgICBwdWJsaWMgVHJpYW5nbGVNZXNoQnVpbGRlciBzZXRDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKSB7Ci0gICAgICAgICAgICBpZiAoKG1GbGFncyAmIENPTE9SKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiYWRkIG1pc3RtYXRjaCB3aXRoIGRlY2xhcmVkIGNvbXBvbmVudHMuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtUiA9IHI7Ci0gICAgICAgICAgICBtRyA9IGc7Ci0gICAgICAgICAgICBtQiA9IGI7Ci0gICAgICAgICAgICBtQSA9IGE7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIEFkZHMgYSBuZXcgdHJpYW5nbGUgdG8gdGhlIG1lc2ggYnVpbGRlcgotICAgICAgICAqCi0gICAgICAgICogQHBhcmFtIGlkeDEgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleCBpbiB0aGUgdHJpYW5nbGUKLSAgICAgICAgKiBAcGFyYW0gaWR4MiBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleCBpbiB0aGUgdHJpYW5nbGUKLSAgICAgICAgKiBAcGFyYW0gaWR4MyBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4IGluIHRoZSB0cmlhbmdsZQotICAgICAgICAqCi0gICAgICAgICogQHJldHVybiB0aGlzCi0gICAgICAgICoqLwotICAgICAgICBwdWJsaWMgVHJpYW5nbGVNZXNoQnVpbGRlciBhZGRUcmlhbmdsZShpbnQgaWR4MSwgaW50IGlkeDIsIGludCBpZHgzKSB7Ci0gICAgICAgICAgICBpZigoaWR4MSA+PSBtTWF4SW5kZXgpIHx8IChpZHgxIDwgMCkgfHwKLSAgICAgICAgICAgICAgIChpZHgyID49IG1NYXhJbmRleCkgfHwgKGlkeDIgPCAwKSB8fAotICAgICAgICAgICAgICAgKGlkeDMgPj0gbU1heEluZGV4KSB8fCAoaWR4MyA8IDApKSB7Ci0gICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJJbmRleCBwcm92aWRlZCBncmVhdGVyIHRoYW4gdmVydGV4IGNvdW50LiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChtSW5kZXhDb3VudCArIDMpID49IG1JbmRleERhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgc2hvcnQgdFtdID0gbmV3IHNob3J0W21JbmRleERhdGEubGVuZ3RoICogMl07Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtSW5kZXhEYXRhLCAwLCB0LCAwLCBtSW5kZXhEYXRhLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgbUluZGV4RGF0YSA9IHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtSW5kZXhEYXRhW21JbmRleENvdW50KytdID0gKHNob3J0KWlkeDE7Ci0gICAgICAgICAgICBtSW5kZXhEYXRhW21JbmRleENvdW50KytdID0gKHNob3J0KWlkeDI7Ci0gICAgICAgICAgICBtSW5kZXhEYXRhW21JbmRleENvdW50KytdID0gKHNob3J0KWlkeDM7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIENyZWF0ZXMgdGhlIG1lc2ggb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1aWxkZXIKLSAgICAgICAgKgotICAgICAgICAqIEBwYXJhbSB1cGxvYWRUb0J1ZmZlck9iamVjdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgdmVydGV4IGRhdGEKLSAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgdXBsb2FkZWQgaW50byB0aGUgYnVmZmVyCi0gICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpbmRpY2F0aW5nIHRoYXQgaXQncyBsaWtlbHkKLSAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGdvaW5nIHRvIGJlIG1vZGlmaWVkIGFuZAotICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCBtYW55IHRpbWVzLgotICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCBpdCBpbmRpY2F0ZXMgdGhlCi0gICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2ggZGF0YSB3aWxsIGJlIHVwZGF0ZWQKLSAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbnRseSBhbmQgcmVtYWluIGluIHNjcmlwdAotICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpYmxlIG1lbW9yeQotICAgICAgICAqCi0gICAgICAgICoqLwotICAgICAgICBwdWJsaWMgTWVzaCBjcmVhdGUoYm9vbGVhbiB1cGxvYWRUb0J1ZmZlck9iamVjdCkgewotICAgICAgICAgICAgRWxlbWVudC5CdWlsZGVyIGIgPSBuZXcgRWxlbWVudC5CdWlsZGVyKG1SUyk7Ci0gICAgICAgICAgICBiLmFkZChFbGVtZW50LmNyZWF0ZVZlY3RvcihtUlMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZ0eFNpemUpLCAicG9zaXRpb24iKTsKLSAgICAgICAgICAgIGlmICgobUZsYWdzICYgQ09MT1IpICE9IDApIHsKLSAgICAgICAgICAgICAgICBiLmFkZChFbGVtZW50LkYzMl80KG1SUyksICJjb2xvciIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChtRmxhZ3MgJiBURVhUVVJFXzApICE9IDApIHsKLSAgICAgICAgICAgICAgICBiLmFkZChFbGVtZW50LkYzMl8yKG1SUyksICJ0ZXh0dXJlMCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChtRmxhZ3MgJiBOT1JNQUwpICE9IDApIHsKLSAgICAgICAgICAgICAgICBiLmFkZChFbGVtZW50LkYzMl8zKG1SUyksICJub3JtYWwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1FbGVtZW50ID0gYi5jcmVhdGUoKTsKLQotICAgICAgICAgICAgaW50IHVzYWdlID0gQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQ7Ci0gICAgICAgICAgICBpZiAodXBsb2FkVG9CdWZmZXJPYmplY3QpIHsKLSAgICAgICAgICAgICAgICB1c2FnZSB8PSBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1ZFUlRFWDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQnVpbGRlciBzbWIgPSBuZXcgQnVpbGRlcihtUlMsIHVzYWdlKTsKLSAgICAgICAgICAgIHNtYi5hZGRWZXJ0ZXhUeXBlKG1FbGVtZW50LCBtTWF4SW5kZXgpOwotICAgICAgICAgICAgc21iLmFkZEluZGV4U2V0VHlwZShFbGVtZW50LlUxNihtUlMpLCBtSW5kZXhDb3VudCwgUHJpbWl0aXZlLlRSSUFOR0xFKTsKLQotICAgICAgICAgICAgTWVzaCBzbSA9IHNtYi5jcmVhdGUoKTsKLQotICAgICAgICAgICAgc20uZ2V0VmVydGV4QWxsb2NhdGlvbigwKS5jb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoMCwgbU1heEluZGV4LCBtVnR4RGF0YSk7Ci0gICAgICAgICAgICBpZih1cGxvYWRUb0J1ZmZlck9iamVjdCkgewotICAgICAgICAgICAgICAgIGlmICh1cGxvYWRUb0J1ZmZlck9iamVjdCkgewotICAgICAgICAgICAgICAgICAgICBzbS5nZXRWZXJ0ZXhBbGxvY2F0aW9uKDApLnN5bmNBbGwoQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc20uZ2V0SW5kZXhTZXRBbGxvY2F0aW9uKDApLmNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCBtSW5kZXhDb3VudCwgbUluZGV4RGF0YSk7Ci0gICAgICAgICAgICBpZiAodXBsb2FkVG9CdWZmZXJPYmplY3QpIHsKLSAgICAgICAgICAgICAgICBzbS5nZXRJbmRleFNldEFsbG9jYXRpb24oMCkuc3luY0FsbChBbGxvY2F0aW9uLlVTQUdFX1NDUklQVCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBzbTsKLSAgICAgICAgfQotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9QYXRoLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1BhdGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM0ZDQxYi4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1BhdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEBoaWRlCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUGF0aCBleHRlbmRzIEJhc2VPYmogewotCi0gICAgcHVibGljIGVudW0gUHJpbWl0aXZlIHsKLSAgICAgICAgUVVBRFJBVElDX0JFWklFUigwKSwKLSAgICAgICAgQ1VCSUNfQkVaSUVSKDEpOwotCi0gICAgICAgIGludCBtSUQ7Ci0gICAgICAgIFByaW1pdGl2ZShpbnQgaWQpIHsKLSAgICAgICAgICAgIG1JRCA9IGlkOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQWxsb2NhdGlvbiBtVmVydGV4QnVmZmVyOwotICAgIEFsbG9jYXRpb24gbUxvb3BCdWZmZXI7Ci0gICAgUHJpbWl0aXZlIG1QcmltaXRpdmU7Ci0gICAgZmxvYXQgbVF1YWxpdHk7Ci0gICAgYm9vbGVhbiBtQ292ZXJhZ2VUb0FscGhhOwotCi0gICAgUGF0aChpbnQgaWQsIFJlbmRlclNjcmlwdCBycywgUHJpbWl0aXZlIHAsIEFsbG9jYXRpb24gdnR4LCBBbGxvY2F0aW9uIGxvb3AsIGZsb2F0IHEpIHsKLSAgICAgICAgc3VwZXIoaWQsIHJzKTsKLSAgICAgICAgbVZlcnRleEJ1ZmZlciA9IHZ0eDsKLSAgICAgICAgbUxvb3BCdWZmZXIgPSBsb29wOwotICAgICAgICBtUHJpbWl0aXZlID0gcDsKLSAgICAgICAgbVF1YWxpdHkgPSBxOwotICAgIH0KLQotICAgIHB1YmxpYyBBbGxvY2F0aW9uIGdldFZlcnRleEFsbG9jYXRpb24oKSB7Ci0gICAgICAgIHJldHVybiBtVmVydGV4QnVmZmVyOwotICAgIH0KLQotICAgIHB1YmxpYyBBbGxvY2F0aW9uIGdldExvb3BBbGxvY2F0aW9uKCkgewotICAgICAgICByZXR1cm4gbUxvb3BCdWZmZXI7Ci0gICAgfQotCi0gICAgcHVibGljIFByaW1pdGl2ZSBnZXRQcmltaXRpdmUoKSB7Ci0gICAgICAgIHJldHVybiBtUHJpbWl0aXZlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHZvaWQgdXBkYXRlRnJvbU5hdGl2ZSgpIHsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBzdGF0aWMgUGF0aCBjcmVhdGVTdGF0aWNQYXRoKFJlbmRlclNjcmlwdCBycywgUHJpbWl0aXZlIHAsIGZsb2F0IHF1YWxpdHksIEFsbG9jYXRpb24gdnR4KSB7Ci0gICAgICAgIGludCBpZCA9IHJzLm5QYXRoQ3JlYXRlKHAubUlELCBmYWxzZSwgdnR4LmdldElEKHJzKSwgMCwgcXVhbGl0eSk7Ci0gICAgICAgIFBhdGggbmV3UGF0aCA9IG5ldyBQYXRoKGlkLCBycywgcCwgbnVsbCwgbnVsbCwgcXVhbGl0eSk7Ci0gICAgICAgIHJldHVybiBuZXdQYXRoOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUGF0aCBjcmVhdGVTdGF0aWNQYXRoKFJlbmRlclNjcmlwdCBycywgUHJpbWl0aXZlIHAsIGZsb2F0IHF1YWxpdHksIEFsbG9jYXRpb24gdnR4LCBBbGxvY2F0aW9uIGxvb3BzKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUGF0aCBjcmVhdGVEeW5hbWljUGF0aChSZW5kZXJTY3JpcHQgcnMsIFByaW1pdGl2ZSBwLCBmbG9hdCBxdWFsaXR5LCBBbGxvY2F0aW9uIHZ0eCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFBhdGggY3JlYXRlRHluYW1pY1BhdGgoUmVuZGVyU2NyaXB0IHJzLCBQcmltaXRpdmUgcCwgZmxvYXQgcXVhbGl0eSwgQWxsb2NhdGlvbiB2dHgsIEFsbG9jYXRpb24gbG9vcHMpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0KLX0KLQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW0uamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzJjYTM1Li4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCi0vKioKLSAqIEBoaWRlCi0gKgotICogUHJvZ3JhbSBpcyBhIGJhc2UgY2xhc3MgZm9yIGFsbCB0aGUgb2JqZWN0cyB0aGF0IG1vZGlmeQotICogdmFyaW91cyBzdGFnZXMgb2YgdGhlIGdyYXBoaWNzIHBpcGVsaW5lCi0gKgotICoqLwotcHVibGljIGNsYXNzIFByb2dyYW0gZXh0ZW5kcyBCYXNlT2JqIHsKLSAgICBzdGF0aWMgZmluYWwgaW50IE1BWF9JTlBVVCA9IDg7Ci0gICAgc3RhdGljIGZpbmFsIGludCBNQVhfT1VUUFVUID0gODsKLSAgICBzdGF0aWMgZmluYWwgaW50IE1BWF9DT05TVEFOVCA9IDg7Ci0gICAgc3RhdGljIGZpbmFsIGludCBNQVhfVEVYVFVSRSA9IDg7Ci0KLSAgICAvKioKLSAgICAgKgotICAgICAqIFRleHR1cmVUeXBlIHNwZWNpZmllcyB3aGF0IHRleHR1cmVzIGFyZSBhdHRhY2hlZCB0byBQcm9ncmFtCi0gICAgICogb2JqZWN0cwotICAgICAqCi0gICAgICoqLwotICAgIHB1YmxpYyBlbnVtIFRleHR1cmVUeXBlIHsKLSAgICAgICAgVEVYVFVSRV8yRCAoMCksCi0gICAgICAgIFRFWFRVUkVfQ1VCRSAoMSk7Ci0KLSAgICAgICAgaW50IG1JRDsKLSAgICAgICAgVGV4dHVyZVR5cGUoaW50IGlkKSB7Ci0gICAgICAgICAgICBtSUQgPSBpZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGVudW0gUHJvZ3JhbVBhcmFtIHsKLSAgICAgICAgSU5QVVQgKDApLAotICAgICAgICBPVVRQVVQgKDEpLAotICAgICAgICBDT05TVEFOVCAoMiksCi0gICAgICAgIFRFWFRVUkVfVFlQRSAoMyk7Ci0KLSAgICAgICAgaW50IG1JRDsKLSAgICAgICAgUHJvZ3JhbVBhcmFtKGludCBpZCkgewotICAgICAgICAgICAgbUlEID0gaWQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgRWxlbWVudCBtSW5wdXRzW107Ci0gICAgRWxlbWVudCBtT3V0cHV0c1tdOwotICAgIFR5cGUgbUNvbnN0YW50c1tdOwotICAgIFRleHR1cmVUeXBlIG1UZXh0dXJlc1tdOwotICAgIFN0cmluZyBtVGV4dHVyZU5hbWVzW107Ci0gICAgaW50IG1UZXh0dXJlQ291bnQ7Ci0gICAgU3RyaW5nIG1TaGFkZXI7Ci0KLSAgICBQcm9ncmFtKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJvZ3JhbSBvYmplY3QgY2FuIGhhdmUgemVybyBvciBtb3JlIGNvbnN0YW50IGFsbG9jYXRpb25zCi0gICAgICogYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0b3RhbCBjb3VudC4KLSAgICAgKiBAcmV0dXJuIG51bWJlciBvZiBjb25zdGFudCBpbnB1dCB0eXBlcwotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0Q29uc3RhbnRDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIG1Db25zdGFudHMgIT0gbnVsbCA/IG1Db25zdGFudHMubGVuZ3RoIDogMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBjb25zdGFudCBidWZmZXIgdXNlZCBpbiB0aGUgcHJvZ3JhbQotICAgICAqIG9iamVjdC4gSXQgY291bGQgYmUgdXNlZCB0byBxdWVyeSBpbnRlcm5hbCBlbGVtZW50cyBvciBjcmVhdGUKLSAgICAgKiBhbiBhbGxvY2F0aW9uIHRvIHN0b3JlIGNvbnN0YW50IGRhdGEuCi0gICAgICogQHBhcmFtIHNsb3QgaW5kZXggb2YgdGhlIGNvbnN0YW50IGlucHV0IHR5cGUgdG8gcmV0dXJuCi0gICAgICogQHJldHVybiBjb25zdGFudCBpbnB1dCB0eXBlCi0gICAgICovCi0gICAgcHVibGljIFR5cGUgZ2V0Q29uc3RhbnQoaW50IHNsb3QpIHsKLSAgICAgICAgaWYgKHNsb3QgPCAwIHx8IHNsb3QgPj0gbUNvbnN0YW50cy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNsb3QgSUQgb3V0IG9mIHJhbmdlLiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtQ29uc3RhbnRzW3Nsb3RdOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0ZXh0dXJlcyB1c2VkIGluIHRoaXMgcHJvZ3JhbSBvYmplY3QKLSAgICAgKiBAcmV0dXJuIG51bWJlciBvZiB0ZXh0dXJlIGlucHV0cwotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0VGV4dHVyZUNvdW50KCkgewotICAgICAgICByZXR1cm4gbVRleHR1cmVDb3VudDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRleHR1cmUgYXQgYSBnaXZlbiBzbG90LiBlLmcuIDJEIG9yIEN1YmUKLSAgICAgKiBAcGFyYW0gc2xvdCBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbnB1dAotICAgICAqIEByZXR1cm4gdGV4dHVyZSBpbnB1dCB0eXBlCi0gICAgICovCi0gICAgcHVibGljIFRleHR1cmVUeXBlIGdldFRleHR1cmVUeXBlKGludCBzbG90KSB7Ci0gICAgICAgIGlmICgoc2xvdCA8IDApIHx8IChzbG90ID49IG1UZXh0dXJlQ291bnQpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTbG90IElEIG91dCBvZiByYW5nZS4iKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbVRleHR1cmVzW3Nsb3RdOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHRleHR1cmUgaW5wdXQgYXQgYSBnaXZlbiBzbG90LiBlLmcuCi0gICAgICogdGV4MCwgZGlmZnVzZSwgc3BlYwotICAgICAqIEBwYXJhbSBzbG90IGluZGV4IG9mIHRoZSB0ZXh0dXJlIGlucHV0Ci0gICAgICogQHJldHVybiB0ZXh0dXJlIGlucHV0IG5hbWUKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRleHR1cmVOYW1lKGludCBzbG90KSB7Ci0gICAgICAgIGlmICgoc2xvdCA8IDApIHx8IChzbG90ID49IG1UZXh0dXJlQ291bnQpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTbG90IElEIG91dCBvZiByYW5nZS4iKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbVRleHR1cmVOYW1lc1tzbG90XTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCaW5kcyBhIGNvbnN0YW50IGJ1ZmZlciB0byBiZSB1c2VkIGFzIHVuaWZvcm0gaW5wdXRzIHRvIHRoZQotICAgICAqIHByb2dyYW0KLSAgICAgKgotICAgICAqIEBwYXJhbSBhIGFsbG9jYXRpb24gY29udGFpbmluZyB1bmlmb3JtIGRhdGEKLSAgICAgKiBAcGFyYW0gc2xvdCBpbmRleCB3aXRoaW4gdGhlIHByb2dyYW0ncyBsaXN0IG9mIGNvbnN0YW50Ci0gICAgICogICAgICAgICAgICAgYnVmZmVyIGFsbG9jYXRpb25zCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYmluZENvbnN0YW50cyhBbGxvY2F0aW9uIGEsIGludCBzbG90KSB7Ci0gICAgICAgIGlmIChzbG90IDwgMCB8fCBzbG90ID49IG1Db25zdGFudHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTbG90IElEIG91dCBvZiByYW5nZS4iKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYSAhPSBudWxsICYmCi0gICAgICAgICAgICBhLmdldFR5cGUoKS5nZXRJRChtUlMpICE9IG1Db25zdGFudHNbc2xvdF0uZ2V0SUQobVJTKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQWxsb2NhdGlvbiB0eXBlIGRvZXMgbm90IG1hdGNoIHNsb3QgdHlwZS4iKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgaWQgPSBhICE9IG51bGwgPyBhLmdldElEKG1SUykgOiAwOwotICAgICAgICBtUlMublByb2dyYW1CaW5kQ29uc3RhbnRzKGdldElEKG1SUyksIHNsb3QsIGlkKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCaW5kcyBhIHRleHR1cmUgdG8gYmUgdXNlZCBpbiB0aGUgcHJvZ3JhbQotICAgICAqCi0gICAgICogQHBhcmFtIHZhIGFsbG9jYXRpb24gY29udGFpbmluZyB0ZXh0dXJlIGRhdGEKLSAgICAgKiBAcGFyYW0gc2xvdCBpbmRleCB3aXRoaW4gdGhlIHByb2dyYW0ncyBsaXN0IG9mIHRleHR1cmVzCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBiaW5kVGV4dHVyZShBbGxvY2F0aW9uIHZhLCBpbnQgc2xvdCkKLSAgICAgICAgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICBpZiAoKHNsb3QgPCAwKSB8fCAoc2xvdCA+PSBtVGV4dHVyZUNvdW50KSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU2xvdCBJRCBvdXQgb2YgcmFuZ2UuIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhICE9IG51bGwgJiYgdmEuZ2V0VHlwZSgpLmhhc0ZhY2VzKCkgJiYKLSAgICAgICAgICAgIG1UZXh0dXJlc1tzbG90XSAhPSBUZXh0dXJlVHlwZS5URVhUVVJFX0NVQkUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNhbm5vdCBiaW5kIGN1YmVtYXAgdG8gMmQgdGV4dHVyZSBzbG90Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgaWQgPSB2YSAhPSBudWxsID8gdmEuZ2V0SUQobVJTKSA6IDA7Ci0gICAgICAgIG1SUy5uUHJvZ3JhbUJpbmRUZXh0dXJlKGdldElEKG1SUyksIHNsb3QsIGlkKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCaW5kcyBhbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgaG93IGEgdGV4dHVyZSBhdCB0aGUKLSAgICAgKiBjb3JyZXNwb25kaW5nIGxvY2F0aW9uIGlzIHNhbXBsZWQKLSAgICAgKgotICAgICAqIEBwYXJhbSB2cyBzYW1wbGVyIGZvciBhIGNvcnJlc3BvbmRpbmcgdGV4dHVyZQotICAgICAqIEBwYXJhbSBzbG90IGluZGV4IHdpdGhpbiB0aGUgcHJvZ3JhbSdzIGxpc3Qgb2YgdGV4dHVyZXMgdG8KLSAgICAgKiAgICAgICAgICAgICB1c2UgdGhlIHNhbXBsZXIgb24KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGJpbmRTYW1wbGVyKFNhbXBsZXIgdnMsIGludCBzbG90KQotICAgICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmICgoc2xvdCA8IDApIHx8IChzbG90ID49IG1UZXh0dXJlQ291bnQpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTbG90IElEIG91dCBvZiByYW5nZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBpZCA9IHZzICE9IG51bGwgPyB2cy5nZXRJRChtUlMpIDogMDsKLSAgICAgICAgbVJTLm5Qcm9ncmFtQmluZFNhbXBsZXIoZ2V0SUQobVJTKSwgc2xvdCwgaWQpOwotICAgIH0KLQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBCYXNlUHJvZ3JhbUJ1aWxkZXIgewotICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOwotICAgICAgICBFbGVtZW50IG1JbnB1dHNbXTsKLSAgICAgICAgRWxlbWVudCBtT3V0cHV0c1tdOwotICAgICAgICBUeXBlIG1Db25zdGFudHNbXTsKLSAgICAgICAgVHlwZSBtVGV4dHVyZXNbXTsKLSAgICAgICAgVGV4dHVyZVR5cGUgbVRleHR1cmVUeXBlc1tdOwotICAgICAgICBTdHJpbmcgbVRleHR1cmVOYW1lc1tdOwotICAgICAgICBpbnQgbUlucHV0Q291bnQ7Ci0gICAgICAgIGludCBtT3V0cHV0Q291bnQ7Ci0gICAgICAgIGludCBtQ29uc3RhbnRDb3VudDsKLSAgICAgICAgaW50IG1UZXh0dXJlQ291bnQ7Ci0gICAgICAgIFN0cmluZyBtU2hhZGVyOwotCi0KLSAgICAgICAgcHJvdGVjdGVkIEJhc2VQcm9ncmFtQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgICAgIG1SUyA9IHJzOwotICAgICAgICAgICAgbUlucHV0cyA9IG5ldyBFbGVtZW50W01BWF9JTlBVVF07Ci0gICAgICAgICAgICBtT3V0cHV0cyA9IG5ldyBFbGVtZW50W01BWF9PVVRQVVRdOwotICAgICAgICAgICAgbUNvbnN0YW50cyA9IG5ldyBUeXBlW01BWF9DT05TVEFOVF07Ci0gICAgICAgICAgICBtSW5wdXRDb3VudCA9IDA7Ci0gICAgICAgICAgICBtT3V0cHV0Q291bnQgPSAwOwotICAgICAgICAgICAgbUNvbnN0YW50Q291bnQgPSAwOwotICAgICAgICAgICAgbVRleHR1cmVDb3VudCA9IDA7Ci0gICAgICAgICAgICBtVGV4dHVyZVR5cGVzID0gbmV3IFRleHR1cmVUeXBlW01BWF9URVhUVVJFXTsKLSAgICAgICAgICAgIG1UZXh0dXJlTmFtZXMgPSBuZXcgU3RyaW5nW01BWF9URVhUVVJFXTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSBHTFNMIHNoYWRlciBjb2RlIHRvIGJlIHVzZWQgaW4gdGhlIHByb2dyYW0KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHMgR0xTTCBzaGFkZXIgc3RyaW5nCi0gICAgICAgICAqIEByZXR1cm4gIHNlbGYKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCYXNlUHJvZ3JhbUJ1aWxkZXIgc2V0U2hhZGVyKFN0cmluZyBzKSB7Ci0gICAgICAgICAgICBtU2hhZGVyID0gczsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldHMgdGhlIEdMU0wgc2hhZGVyIGNvZGUgdG8gYmUgdXNlZCBpbiB0aGUgcHJvZ3JhbQotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gcmVzb3VyY2VzIGFwcGxpY2F0aW9uIHJlc291cmNlcwotICAgICAgICAgKiBAcGFyYW0gcmVzb3VyY2VJRCBpZCBvZiB0aGUgZmlsZSBjb250YWluaW5nIEdMU0wgc2hhZGVyIGNvZGUKLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiAgc2VsZgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJhc2VQcm9ncmFtQnVpbGRlciBzZXRTaGFkZXIoUmVzb3VyY2VzIHJlc291cmNlcywgaW50IHJlc291cmNlSUQpIHsKLSAgICAgICAgICAgIGJ5dGVbXSBzdHI7Ci0gICAgICAgICAgICBpbnQgc3RyTGVuZ3RoOwotICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSByZXNvdXJjZXMub3BlblJhd1Jlc291cmNlKHJlc291cmNlSUQpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBzdHIgPSBuZXcgYnl0ZVsxMDI0XTsKLSAgICAgICAgICAgICAgICAgICAgc3RyTGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUodHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVzTGVmdCA9IHN0ci5sZW5ndGggLSBzdHJMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZXNMZWZ0ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10gYnVmMiA9IG5ldyBieXRlW3N0ci5sZW5ndGggKiAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHN0ciwgMCwgYnVmMiwgMCwgc3RyLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gYnVmMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc0xlZnQgPSBzdHIubGVuZ3RoIC0gc3RyTGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGlzLnJlYWQoc3RyLCBzdHJMZW5ndGgsIGJ5dGVzTGVmdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZXNSZWFkIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ckxlbmd0aCArPSBieXRlc1JlYWQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICBpcy5jbG9zZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtU2hhZGVyID0gbmV3IFN0cmluZyhzdHIsIDAsIHN0ckxlbmd0aCwgIlVURi04Iik7Ci0gICAgICAgICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cuZSgiUmVuZGVyU2NyaXB0IHNoYWRlciBjcmVhdGlvbiIsICJDb3VsZCBub3QgZGVjb2RlIHNoYWRlciBzdHJpbmciKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUXVlcmllcyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgYWRkZWQgY29uc3RhbnQgYnVmZmVyIHR5cGUKLSAgICAgICAgICoKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0Q3VycmVudENvbnN0YW50SW5kZXgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUNvbnN0YW50Q291bnQgLSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFF1ZXJpZXMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGFkZGVkIHRleHR1cmUgdHlwZQotICAgICAgICAgKgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBnZXRDdXJyZW50VGV4dHVyZUluZGV4KCkgewotICAgICAgICAgICAgcmV0dXJuIG1UZXh0dXJlQ291bnQgLSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFkZHMgY29uc3RhbnQgKHVuaWZvcm0pIGlucHV0cyB0byB0aGUgcHJvZ3JhbQotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gdCBUeXBlIHRoYXQgZGVzY3JpYmVzIHRoZSBsYXlvdXQgb2YgdGhlIEFsbG9jYXRpb24KLSAgICAgICAgICogICAgICAgICAgb2JqZWN0IHRvIGJlIHVzZWQgYXMgY29uc3RhbnQgaW5wdXRzIHRvIHRoZSBQcm9ncmFtCi0gICAgICAgICAqIEByZXR1cm4gIHNlbGYKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCYXNlUHJvZ3JhbUJ1aWxkZXIgYWRkQ29uc3RhbnQoVHlwZSB0KSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIC8vIFNob3VsZCBjaGVjayBmb3IgY29uc2lzdGFudCBhbmQgbm9uLWNvbmZsaWN0aW5nIG5hbWVzLi4uCi0gICAgICAgICAgICBpZihtQ29uc3RhbnRDb3VudCA+PSBNQVhfQ09OU1RBTlQpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk1heCBpbnB1dCBjb3VudCBleGNlZWRlZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0LmdldEVsZW1lbnQoKS5pc0NvbXBsZXgoKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29tcGxleCBlbGVtZW50cyBub3QgYWxsb3dlZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Db25zdGFudHNbbUNvbnN0YW50Q291bnRdID0gdDsKLSAgICAgICAgICAgIG1Db25zdGFudENvdW50Kys7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBZGRzIGEgdGV4dHVyZSBpbnB1dCB0byB0aGUgUHJvZ3JhbQotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gdGV4VHlwZSBkZXNjcmliZXMgdGhhdCB0aGUgdGV4dHVyZSB0byBhcHBlbmQgaXQgKDJELAotICAgICAgICAgKiAgICAgICAgICAgICAgICBDdWJlbWFwLCBldGMuKQotICAgICAgICAgKiBAcmV0dXJuICBzZWxmCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQmFzZVByb2dyYW1CdWlsZGVyIGFkZFRleHR1cmUoVGV4dHVyZVR5cGUgdGV4VHlwZSkgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBhZGRUZXh0dXJlKHRleFR5cGUsICJUZXgiICsgbVRleHR1cmVDb3VudCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBZGRzIGEgdGV4dHVyZSBpbnB1dCB0byB0aGUgUHJvZ3JhbQotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gdGV4VHlwZSBkZXNjcmliZXMgdGhhdCB0aGUgdGV4dHVyZSB0byBhcHBlbmQgaXQgKDJELAotICAgICAgICAgKiAgICAgICAgICAgICAgICBDdWJlbWFwLCBldGMuKQotICAgICAgICAgKiBAcGFyYW0gdGV4TmFtZSB3aGF0IHRoZSB0ZXh0dXJlIHNob3VsZCBiZSBjYWxsZWQgaW4gdGhlCi0gICAgICAgICAqICAgICAgICAgICAgICAgIHNoYWRlcgotICAgICAgICAgKiBAcmV0dXJuICBzZWxmCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQmFzZVByb2dyYW1CdWlsZGVyIGFkZFRleHR1cmUoVGV4dHVyZVR5cGUgdGV4VHlwZSwgU3RyaW5nIHRleE5hbWUpCi0gICAgICAgICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKLSAgICAgICAgICAgIGlmKG1UZXh0dXJlQ291bnQgPj0gTUFYX1RFWFRVUkUpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNYXggdGV4dHVyZSBjb3VudCBleGNlZWRlZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1UZXh0dXJlVHlwZXNbbVRleHR1cmVDb3VudF0gPSB0ZXhUeXBlOwotICAgICAgICAgICAgbVRleHR1cmVOYW1lc1ttVGV4dHVyZUNvdW50XSA9IHRleE5hbWU7Ci0gICAgICAgICAgICBtVGV4dHVyZUNvdW50ICsrOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBpbml0UHJvZ3JhbShQcm9ncmFtIHApIHsKLSAgICAgICAgICAgIHAubUlucHV0cyA9IG5ldyBFbGVtZW50W21JbnB1dENvdW50XTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobUlucHV0cywgMCwgcC5tSW5wdXRzLCAwLCBtSW5wdXRDb3VudCk7Ci0gICAgICAgICAgICBwLm1PdXRwdXRzID0gbmV3IEVsZW1lbnRbbU91dHB1dENvdW50XTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobU91dHB1dHMsIDAsIHAubU91dHB1dHMsIDAsIG1PdXRwdXRDb3VudCk7Ci0gICAgICAgICAgICBwLm1Db25zdGFudHMgPSBuZXcgVHlwZVttQ29uc3RhbnRDb3VudF07Ci0gICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1Db25zdGFudHMsIDAsIHAubUNvbnN0YW50cywgMCwgbUNvbnN0YW50Q291bnQpOwotICAgICAgICAgICAgcC5tVGV4dHVyZUNvdW50ID0gbVRleHR1cmVDb3VudDsKLSAgICAgICAgICAgIHAubVRleHR1cmVzID0gbmV3IFRleHR1cmVUeXBlW21UZXh0dXJlQ291bnRdOwotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtVGV4dHVyZVR5cGVzLCAwLCBwLm1UZXh0dXJlcywgMCwgbVRleHR1cmVDb3VudCk7Ci0gICAgICAgICAgICBwLm1UZXh0dXJlTmFtZXMgPSBuZXcgU3RyaW5nW21UZXh0dXJlQ291bnRdOwotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtVGV4dHVyZU5hbWVzLCAwLCBwLm1UZXh0dXJlTmFtZXMsIDAsIG1UZXh0dXJlQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi19Ci0KLQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnQuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbUZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YmEzZmQuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0KLS8qKgotICogQGhpZGUKLSAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICogPHA+VGhlIFJlbmRlclNjcmlwdCBmcmFnbWVudCBwcm9ncmFtLCBhbHNvIGtub3duIGFzIGZyYWdtZW50IHNoYWRlciBpcyByZXNwb25zaWJsZQotICogZm9yIG1hbmlwdWxhdGluZyBwaXhlbCBkYXRhIGluIGEgdXNlciBkZWZpbmVkIHdheS4gSXQncyBjb25zdHJ1Y3RlZCBmcm9tIGEgR0xTTAotICogc2hhZGVyIHN0cmluZyBjb250YWluaW5nIHRoZSBwcm9ncmFtIGJvZHksIHRleHR1cmVzIGlucHV0cywgYW5kIGEgVHlwZSBvYmplY3QKLSAqIHRoYXQgZGVzY3JpYmVzIHRoZSBjb25zdGFudHMgdXNlZCBieSB0aGUgcHJvZ3JhbS4gU2ltaWxhciB0byB0aGUgdmVydGV4IHByb2dyYW1zLAotICogd2hlbiBhbiBhbGxvY2F0aW9uIHdpdGggY29uc3RhbnQgaW5wdXQgdmFsdWVzIGlzIGJvdW5kIHRvIHRoZSBzaGFkZXIsIGl0cyB2YWx1ZXMKLSAqIGFyZSBzZW50IHRvIHRoZSBncmFwaGljcyBwcm9ncmFtIGF1dG9tYXRpY2FsbHkuPC9wPgotICogPHA+IFRoZSB2YWx1ZXMgaW5zaWRlIHRoZSBhbGxvY2F0aW9uIGFyZSBub3QgZXhwbGljaXRseSB0cmFja2VkLiBJZiB0aGV5IGNoYW5nZSBiZXR3ZWVuIHR3byBkcmF3Ci0gKiBjYWxscyB1c2luZyB0aGUgc2FtZSBwcm9ncmFtIG9iamVjdCwgdGhlIHJ1bnRpbWUgbmVlZHMgdG8gYmUgbm90aWZpZWQgb2YgdGhhdAotICogY2hhbmdlIGJ5IGNhbGxpbmcgcnNnQWxsb2NhdGlvblN5bmNBbGwgc28gaXQgY291bGQgc2VuZCB0aGUgbmV3IHZhbHVlcyB0byBoYXJkd2FyZS4KLSAqIENvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmVydGV4IGFuZCBmcmFnbWVudCBwcm9ncmFtcyBpcyBoYW5kbGVkIGludGVybmFsbHkgaW4gdGhlCi0gKiBHTFNMIGNvZGUuIEZvciBleGFtcGxlLCBpZiB0aGUgZnJhZ21lbnQgcHJvZ3JhbSBpcyBleHBlY3RpbmcgYSB2YXJ5aW5nIGlucHV0IGNhbGxlZAotICogdmFyVGV4MCwgdGhlIEdMU0wgY29kZSBpbnNpZGUgdGhlIHByb2dyYW0gdmVydGV4IG11c3QgcHJvdmlkZSBpdC4KLSAqIDwvcD4KLSAqCi0gKiovCi1wdWJsaWMgY2xhc3MgUHJvZ3JhbUZyYWdtZW50IGV4dGVuZHMgUHJvZ3JhbSB7Ci0gICAgUHJvZ3JhbUZyYWdtZW50KGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIGV4dGVuZHMgQmFzZVByb2dyYW1CdWlsZGVyIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKiBDcmVhdGUgYSBidWlsZGVyIG9iamVjdC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHByb2dyYW0gd2lsbCBiZWxvbmcuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgICAgIHN1cGVyKHJzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICogQ3JlYXRlcyBQcm9ncmFtRnJhZ21lbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYnVpbGRlcgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuICBQcm9ncmFtRnJhZ21lbnQKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBQcm9ncmFtRnJhZ21lbnQgY3JlYXRlKCkgewotICAgICAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICBpbnRbXSB0bXAgPSBuZXcgaW50WyhtSW5wdXRDb3VudCArIG1PdXRwdXRDb3VudCArIG1Db25zdGFudENvdW50ICsgbVRleHR1cmVDb3VudCkgKiAyXTsKLSAgICAgICAgICAgIFN0cmluZ1tdIHRleE5hbWVzID0gbmV3IFN0cmluZ1ttVGV4dHVyZUNvdW50XTsKLSAgICAgICAgICAgIGludCBpZHggPSAwOwotCi0gICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtSW5wdXRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5JTlBVVC5tSUQ7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IG1JbnB1dHNbaV0uZ2V0SUQobVJTKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1PdXRwdXRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5PVVRQVVQubUlEOwotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBtT3V0cHV0c1tpXS5nZXRJRChtUlMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbUNvbnN0YW50Q291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uQ09OU1RBTlQubUlEOwotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBtQ29uc3RhbnRzW2ldLmdldElEKG1SUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtVGV4dHVyZUNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLlRFWFRVUkVfVFlQRS5tSUQ7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IG1UZXh0dXJlVHlwZXNbaV0ubUlEOwotICAgICAgICAgICAgICAgIHRleE5hbWVzW2ldID0gbVRleHR1cmVOYW1lc1tpXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGlkID0gbVJTLm5Qcm9ncmFtRnJhZ21lbnRDcmVhdGUobVNoYWRlciwgdGV4TmFtZXMsIHRtcCk7Ci0gICAgICAgICAgICBQcm9ncmFtRnJhZ21lbnQgcGYgPSBuZXcgUHJvZ3JhbUZyYWdtZW50KGlkLCBtUlMpOwotICAgICAgICAgICAgaW5pdFByb2dyYW0ocGYpOwotICAgICAgICAgICAgcmV0dXJuIHBmOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFlMTc3Ny4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0KLS8qKgotICogQGhpZGUKLSAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICogPHA+UHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbiBpcyBhIGhlbHBlciBjbGFzcyB0aGF0IHByb3ZpZGVzCi0gKiBhIHdheSB0byBtYWtlIGEgc2ltcGxlIGZyYWdtZW50IHNoYWRlciB3aXRob3V0IHdyaXRpbmcgYW55Ci0gKiBHTFNMIGNvZGUuIFRoaXMgY2xhc3MgYWxsb3dzIGZvciBkaXNwbGF5IG9mIGNvbnN0YW50IGNvbG9yLCBpbnRlcnBvbGF0ZWQKLSAqIGNvbG9yIGZyb20gdGhlIHZlcnRleCBzaGFkZXIsIG9yIGNvbWJpbmF0aW9ucyBvZiB0aGUgYm90aAotICogYmxlbmRlZCB3aXRoIHJlc3VsdHMgb2YgdXAgdG8gdHdvIHRleHR1cmUgbG9va3Vwcy48L3AKLSAqCi0gKiovCi1wdWJsaWMgY2xhc3MgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbiBleHRlbmRzIFByb2dyYW1GcmFnbWVudCB7Ci0gICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbihpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBzdXBlcihpZCwgcnMpOwotICAgIH0KLQotICAgIHN0YXRpYyBjbGFzcyBJbnRlcm5hbEJ1aWxkZXIgZXh0ZW5kcyBCYXNlUHJvZ3JhbUJ1aWxkZXIgewotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgSW50ZXJuYWxCdWlsZGVyKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICAgICAgc3VwZXIocnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKiBDcmVhdGVzIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24gZnJvbSB0aGUgY3VycmVudCBzdGF0ZQotICAgICAgICAgKiBvZiB0aGUgYnVpbGRlcgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbiBjcmVhdGUoKSB7Ci0gICAgICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgICAgIGludFtdIHRtcCA9IG5ldyBpbnRbKG1JbnB1dENvdW50ICsgbU91dHB1dENvdW50ICsgbUNvbnN0YW50Q291bnQgKyBtVGV4dHVyZUNvdW50KSAqIDJdOwotICAgICAgICAgICAgU3RyaW5nW10gdGV4TmFtZXMgPSBuZXcgU3RyaW5nW21UZXh0dXJlQ291bnRdOwotICAgICAgICAgICAgaW50IGlkeCA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1JbnB1dENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLklOUFVULm1JRDsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gbUlucHV0c1tpXS5nZXRJRChtUlMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbU91dHB1dENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLk9VVFBVVC5tSUQ7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IG1PdXRwdXRzW2ldLmdldElEKG1SUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtQ29uc3RhbnRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5DT05TVEFOVC5tSUQ7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IG1Db25zdGFudHNbaV0uZ2V0SUQobVJTKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1UZXh0dXJlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uVEVYVFVSRV9UWVBFLm1JRDsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gbVRleHR1cmVUeXBlc1tpXS5tSUQ7Ci0gICAgICAgICAgICAgICAgdGV4TmFtZXNbaV0gPSBtVGV4dHVyZU5hbWVzW2ldOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQgaWQgPSBtUlMublByb2dyYW1GcmFnbWVudENyZWF0ZShtU2hhZGVyLCB0ZXhOYW1lcywgdG1wKTsKLSAgICAgICAgICAgIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24gcGYgPSBuZXcgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbihpZCwgbVJTKTsKLSAgICAgICAgICAgIGluaXRQcm9ncmFtKHBmKTsKLSAgICAgICAgICAgIHJldHVybiBwZjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlciB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9URVhUVVJFID0gMjsKLSAgICAgICAgaW50IG1OdW1UZXh0dXJlczsKLSAgICAgICAgYm9vbGVhbiBtUG9pbnRTcHJpdGVFbmFibGU7Ci0gICAgICAgIGJvb2xlYW4gbVZhcnlpbmdDb2xvckVuYWJsZTsKLSAgICAgICAgU3RyaW5nIG1TaGFkZXI7Ci0gICAgICAgIFJlbmRlclNjcmlwdCBtUlM7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKiBFbnZNb2RlIGRlc2NyaWJlcyBob3cgdGV4dHVyZXMgYXJlIGNvbWJpbmVkIHdpdGggdGhlIGV4aXN0aW5nCi0gICAgICAgICAqIGNvbG9yIGluIHRoZSBmaXhlZCBmdW5jdGlvbiBmcmFnbWVudCBzaGFkZXIKLSAgICAgICAgICoKLSAgICAgICAgICoqLwotICAgICAgICBwdWJsaWMgZW51bSBFbnZNb2RlIHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAgICAgKiovCi0gICAgICAgICAgICBSRVBMQUNFICgxKSwKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAgICAgKiovCi0gICAgICAgICAgICBNT0RVTEFURSAoMiksCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgICAgICoqLwotICAgICAgICAgICAgREVDQUwgKDMpOwotCi0gICAgICAgICAgICBpbnQgbUlEOwotICAgICAgICAgICAgRW52TW9kZShpbnQgaWQpIHsKLSAgICAgICAgICAgICAgICBtSUQgPSBpZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICogRm9ybWF0IGRlc2NyaWJlcyB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRleHR1cmVzIGluIHRoZSBmaXhlZAotICAgICAgICAgKiBmdW5jdGlvbiBmcmFnbWVudCBzaGFkZXIgYW5kIGhvdyB0aGV5IGFyZSBzYW1wbGVkCi0gICAgICAgICAqCi0gICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIGVudW0gRm9ybWF0IHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAgICAgKiovCi0gICAgICAgICAgICBBTFBIQSAoMSksCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgICAgICoqLwotICAgICAgICAgICAgTFVNSU5BTkNFX0FMUEhBICgyKSwKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAgICAgKiovCi0gICAgICAgICAgICBSR0IgKDMpLAotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICAgICAqKi8KLSAgICAgICAgICAgIFJHQkEgKDQpOwotCi0gICAgICAgICAgICBpbnQgbUlEOwotICAgICAgICAgICAgRm9ybWF0KGludCBpZCkgewotICAgICAgICAgICAgICAgIG1JRCA9IGlkOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBTbG90IHsKLSAgICAgICAgICAgIEVudk1vZGUgZW52OwotICAgICAgICAgICAgRm9ybWF0IGZvcm1hdDsKLSAgICAgICAgICAgIFNsb3QoRW52TW9kZSBfZW52LCBGb3JtYXQgX2ZtdCkgewotICAgICAgICAgICAgICAgIGVudiA9IF9lbnY7Ci0gICAgICAgICAgICAgICAgZm9ybWF0ID0gX2ZtdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBTbG90W10gbVNsb3RzOwotCi0gICAgICAgIHByaXZhdGUgdm9pZCBidWlsZFNoYWRlclN0cmluZygpIHsKLSAgICAgICAgICAgIG1TaGFkZXIgID0gIi8vcnNfc2hhZGVyX2ludGVybmFsXG4iOwotICAgICAgICAgICAgbVNoYWRlciArPSAidmFyeWluZyBsb3dwIHZlYzQgdmFyQ29sb3I7XG4iOwotICAgICAgICAgICAgbVNoYWRlciArPSAidmFyeWluZyB2ZWMyIHZhclRleDA7XG4iOwotCi0gICAgICAgICAgICBtU2hhZGVyICs9ICJ2b2lkIG1haW4oKSB7XG4iOwotICAgICAgICAgICAgaWYgKG1WYXJ5aW5nQ29sb3JFbmFibGUpIHsKLSAgICAgICAgICAgICAgICBtU2hhZGVyICs9ICIgIGxvd3AgdmVjNCBjb2wgPSB2YXJDb2xvcjtcbiI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgbG93cCB2ZWM0IGNvbCA9IFVOSV9Db2xvcjtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtTnVtVGV4dHVyZXMgIT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChtUG9pbnRTcHJpdGVFbmFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbVNoYWRlciArPSAiICB2ZWMyIHQwID0gZ2xfUG9pbnRDb29yZDtcbiI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbVNoYWRlciArPSAiICB2ZWMyIHQwID0gdmFyVGV4MC54eTtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbU51bVRleHR1cmVzOyBpICsrKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoKG1TbG90c1tpXS5lbnYpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFJFUExBQ0U6Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobVNsb3RzW2ldLmZvcm1hdCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEFMUEhBOgotICAgICAgICAgICAgICAgICAgICAgICAgbVNoYWRlciArPSAiICBjb2wuYSA9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLmE7XG4iOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICAgICAgICAgICAgbVNoYWRlciArPSAiICBjb2wucmdiYSA9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLnJnYmE7XG4iOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUkdCOgotICAgICAgICAgICAgICAgICAgICAgICAgbVNoYWRlciArPSAiICBjb2wucmdiID0gdGV4dHVyZTJEKFVOSV9UZXgwLCB0MCkucmdiO1xuIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFJHQkE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU2hhZGVyICs9ICIgIGNvbC5yZ2JhID0gdGV4dHVyZTJEKFVOSV9UZXgwLCB0MCkucmdiYTtcbiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIE1PRFVMQVRFOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1TbG90c1tpXS5mb3JtYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBTFBIQToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgY29sLmEgKj0gdGV4dHVyZTJEKFVOSV9UZXgwLCB0MCkuYTtcbiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU2hhZGVyICs9ICIgIGNvbC5yZ2JhICo9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLnJnYmE7XG4iOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUkdCOgotICAgICAgICAgICAgICAgICAgICAgICAgbVNoYWRlciArPSAiICBjb2wucmdiICo9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLnJnYjtcbiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBSR0JBOgotICAgICAgICAgICAgICAgICAgICAgICAgbVNoYWRlciArPSAiICBjb2wucmdiYSAqPSB0ZXh0dXJlMkQoVU5JX1RleDAsIHQwKS5yZ2JhO1xuIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgREVDQUw6Ci0gICAgICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgY29sID0gdGV4dHVyZTJEKFVOSV9UZXgwLCB0MCk7XG4iOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgZ2xfRnJhZ0NvbG9yID0gY29sO1xuIjsKLSAgICAgICAgICAgIG1TaGFkZXIgKz0gIn1cbiI7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQKLSAgICAgICAgICogQ3JlYXRlcyBhIGJ1aWxkZXIgZm9yIGZpeGVkIGZ1bmN0aW9uIGZyYWdtZW50IHByb2dyYW0KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHByb2dyYW0gd2lsbCBiZWxvbmcuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgICAgIG1SUyA9IHJzOwotICAgICAgICAgICAgbVNsb3RzID0gbmV3IFNsb3RbTUFYX1RFWFRVUkVdOwotICAgICAgICAgICAgbVBvaW50U3ByaXRlRW5hYmxlID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAqIEFkZHMgYSB0ZXh0dXJlIHRvIGJlIGZldGNoZWQgYXMgcGFydCBvZiB0aGUgZml4ZWQgZnVuY3Rpb24KLSAgICAgICAgICogZnJhZ21lbnQgcHJvZ3JhbQotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gZW52IHNwZWNpZmllcyBob3cgdGhlIHRleHR1cmUgaXMgY29tYmluZWQgd2l0aCB0aGUKLSAgICAgICAgICogICAgICAgICAgICBjdXJyZW50IGNvbG9yCi0gICAgICAgICAqIEBwYXJhbSBmbXQgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIHRleHR1cmUgYW5kIGhvdyBpdHMKLSAgICAgICAgICogICAgICAgICAgICBjb21wb25lbnRzIHdpbGwgYmUgdXNlZCB0byBjb21iaW5lIHdpdGggdGhlCi0gICAgICAgICAqICAgICAgICAgICAgY3VycmVudCBjb2xvcgotICAgICAgICAgKiBAcGFyYW0gc2xvdCBpbmRleCBvZiB0aGUgdGV4dHVyZSB0byBhcHBseSB0aGUgb3BlcmF0aW9ucyBvbgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIHRoaXMKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFRleHR1cmUoRW52TW9kZSBlbnYsIEZvcm1hdCBmbXQsIGludCBzbG90KQotICAgICAgICAgICAgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBpZigoc2xvdCA8IDApIHx8IChzbG90ID49IE1BWF9URVhUVVJFKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk1BWF9URVhUVVJFIGV4Y2VlZGVkLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVNsb3RzW3Nsb3RdID0gbmV3IFNsb3QoZW52LCBmbXQpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGUgcGFzc2VkIGZyb20gdGhlCi0gICAgICAgICAqIHZlcnRleCBwcm9ncmFtIGlzIHJlcGxhY2VkIHdpdGggYW4gb3BlbkdMIGludGVybmFsIHBvaW50Ci0gICAgICAgICAqIHNwcml0ZSB0ZXh0dXJlIGNvb3JkaW5hdGUKLSAgICAgICAgICoKLSAgICAgICAgICoqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRQb2ludFNwcml0ZVRleENvb3JkaW5hdGVSZXBsYWNlbWVudChib29sZWFuIGVuYWJsZSkgewotICAgICAgICAgICAgbVBvaW50U3ByaXRlRW5hYmxlID0gZW5hYmxlOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB2YXJ5aW5nIGNvbG9yIHBhc3NlZCBmcm9tIHRoZSB2ZXJ0ZXgKLSAgICAgICAgICogcHJvZ3JhbSBvciB0aGUgY29uc3RhbnQgY29sb3Igc2V0IG9uIHRoZSBmcmFnbWVudCBwcm9ncmFtIGlzCi0gICAgICAgICAqIHVzZWQgaW4gdGhlIGZpbmFsIGNvbG9yIGNhbGN1bGF0aW9uIGluIHRoZSBmaXhlZCBmdW5jdGlvbgotICAgICAgICAgKiBmcmFnbWVudCBzaGFkZXIKLSAgICAgICAgICoKLSAgICAgICAgICoqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRWYXJ5aW5nQ29sb3IoYm9vbGVhbiBlbmFibGUpIHsKLSAgICAgICAgICAgIG1WYXJ5aW5nQ29sb3JFbmFibGUgPSBlbmFibGU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgKiBDcmVhdGVzIHRoZSBmaXhlZCBmdW5jdGlvbiBmcmFnbWVudCBwcm9ncmFtIGZyb20gdGhlIGN1cnJlbnQKLSAgICAgICAgKiBzdGF0ZSBvZiB0aGUgYnVpbGRlci4KLSAgICAgICAgKgotICAgICAgICAqLwotICAgICAgICBwdWJsaWMgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbiBjcmVhdGUoKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEJ1aWxkZXIgc2IgPSBuZXcgSW50ZXJuYWxCdWlsZGVyKG1SUyk7Ci0gICAgICAgICAgICBtTnVtVGV4dHVyZXMgPSAwOwotICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IE1BWF9URVhUVVJFOyBpICsrKSB7Ci0gICAgICAgICAgICAgICAgaWYobVNsb3RzW2ldICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbU51bVRleHR1cmVzICsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJ1aWxkU2hhZGVyU3RyaW5nKCk7Ci0gICAgICAgICAgICBzYi5zZXRTaGFkZXIobVNoYWRlcik7Ci0KLSAgICAgICAgICAgIFR5cGUgY29uc3RUeXBlID0gbnVsbDsKLSAgICAgICAgICAgIGlmICghbVZhcnlpbmdDb2xvckVuYWJsZSkgewotICAgICAgICAgICAgICAgIEVsZW1lbnQuQnVpbGRlciBiID0gbmV3IEVsZW1lbnQuQnVpbGRlcihtUlMpOwotICAgICAgICAgICAgICAgIGIuYWRkKEVsZW1lbnQuRjMyXzQobVJTKSwgIkNvbG9yIik7Ci0gICAgICAgICAgICAgICAgVHlwZS5CdWlsZGVyIHR5cGVCdWlsZGVyID0gbmV3IFR5cGUuQnVpbGRlcihtUlMsIGIuY3JlYXRlKCkpOwotICAgICAgICAgICAgICAgIHR5cGVCdWlsZGVyLnNldFgoMSk7Ci0gICAgICAgICAgICAgICAgY29uc3RUeXBlID0gdHlwZUJ1aWxkZXIuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgc2IuYWRkQ29uc3RhbnQoY29uc3RUeXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU51bVRleHR1cmVzOyBpICsrKSB7Ci0gICAgICAgICAgICAgICAgc2IuYWRkVGV4dHVyZShUZXh0dXJlVHlwZS5URVhUVVJFXzJEKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbiBwZiA9IHNiLmNyZWF0ZSgpOwotICAgICAgICAgICAgcGYubVRleHR1cmVDb3VudCA9IE1BWF9URVhUVVJFOwotICAgICAgICAgICAgaWYgKCFtVmFyeWluZ0NvbG9yRW5hYmxlKSB7Ci0gICAgICAgICAgICAgICAgQWxsb2NhdGlvbiBjb25zdGFudERhdGEgPSBBbGxvY2F0aW9uLmNyZWF0ZVR5cGVkKG1SUyxjb25zdFR5cGUpOwotICAgICAgICAgICAgICAgIEZpZWxkUGFja2VyIGZwID0gbmV3IEZpZWxkUGFja2VyKDE2KTsKLSAgICAgICAgICAgICAgICBGbG9hdDQgZjQgPSBuZXcgRmxvYXQ0KDEuZiwgMS5mLCAxLmYsIDEuZik7Ci0gICAgICAgICAgICAgICAgZnAuYWRkRjMyKGY0KTsKLSAgICAgICAgICAgICAgICBjb25zdGFudERhdGEuc2V0RnJvbUZpZWxkUGFja2VyKDAsIGZwKTsKLSAgICAgICAgICAgICAgICBwZi5iaW5kQ29uc3RhbnRzKGNvbnN0YW50RGF0YSwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcGY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVJhc3Rlci5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtUmFzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNmNiNGUuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtUmFzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLQotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQotLyoqCi0gKiBAaGlkZQotICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gKiBQcm9ncmFtIHJhc3RlciBpcyBwcmltYXJpbHkgdXNlZCB0byBzcGVjaWZ5IHdoZXRoZXIgcG9pbnQgc3ByaXRlcyBhcmUgZW5hYmxlZCBhbmQgdG8gY29udHJvbAotICogdGhlIGN1bGxpbmcgbW9kZS4gQnkgZGVmYXVsdCwgYmFjayBmYWNlcyBhcmUgY3VsbGVkLgotICoqLwotcHVibGljIGNsYXNzIFByb2dyYW1SYXN0ZXIgZXh0ZW5kcyBCYXNlT2JqIHsKLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqKi8KLSAgICBwdWJsaWMgZW51bSBDdWxsTW9kZSB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICoqLwotICAgICAgICBCQUNLICgwKSwKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKiovCi0gICAgICAgIEZST05UICgxKSwKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKiovCi0gICAgICAgIE5PTkUgKDIpOwotCi0gICAgICAgIGludCBtSUQ7Ci0gICAgICAgIEN1bGxNb2RlKGludCBpZCkgewotICAgICAgICAgICAgbUlEID0gaWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sZWFuIG1Qb2ludFNwcml0ZTsKLSAgICBDdWxsTW9kZSBtQ3VsbE1vZGU7Ci0KLSAgICBQcm9ncmFtUmFzdGVyKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0KLSAgICAgICAgbVBvaW50U3ByaXRlID0gZmFsc2U7Ci0gICAgICAgIG1DdWxsTW9kZSA9IEN1bGxNb2RlLkJBQ0s7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdmVydGljZXMgYXJlIHJlbmRlcmVkIGFzIHNjcmVlbiBhbGlnbmVkCi0gICAgICogZWxlbWVudHMgb2YgYSBzcGVjaWZpZWQgc2l6ZQotICAgICAqIEByZXR1cm4gd2hldGhlciBwb2ludCBzcHJpdGVzIGFyZSBlbmFibGVkCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNQb2ludFNwcml0ZUVuYWJsZWQoKSB7Ci0gICAgICAgIHJldHVybiBtUG9pbnRTcHJpdGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogU3BlY2lmaWVzIGhvdyB0cmlhbmdsZXMgYXJlIGN1bGxlZCBiYXNlZCBvbiB0aGVpciBvcmllbnRhdGlvbgotICAgICAqIEByZXR1cm4gY3VsbCBtb2RlCi0gICAgICovCi0gICAgcHVibGljIEN1bGxNb2RlIGdldEN1bGxNb2RlKCkgewotICAgICAgICByZXR1cm4gbUN1bGxNb2RlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUHJvZ3JhbVJhc3RlciBDVUxMX0JBQ0soUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1Qcm9ncmFtUmFzdGVyX0NVTExfQkFDSyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBQcm9ncmFtUmFzdGVyLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBQcm9ncmFtUmFzdGVyLkJ1aWxkZXIocnMpOwotICAgICAgICAgICAgYnVpbGRlci5zZXRDdWxsTW9kZShDdWxsTW9kZS5CQUNLKTsKLSAgICAgICAgICAgIHJzLm1Qcm9ncmFtUmFzdGVyX0NVTExfQkFDSyA9IGJ1aWxkZXIuY3JlYXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1Qcm9ncmFtUmFzdGVyX0NVTExfQkFDSzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFByb2dyYW1SYXN0ZXIgQ1VMTF9GUk9OVChSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubVByb2dyYW1SYXN0ZXJfQ1VMTF9GUk9OVCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBQcm9ncmFtUmFzdGVyLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBQcm9ncmFtUmFzdGVyLkJ1aWxkZXIocnMpOwotICAgICAgICAgICAgYnVpbGRlci5zZXRDdWxsTW9kZShDdWxsTW9kZS5GUk9OVCk7Ci0gICAgICAgICAgICBycy5tUHJvZ3JhbVJhc3Rlcl9DVUxMX0ZST05UID0gYnVpbGRlci5jcmVhdGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubVByb2dyYW1SYXN0ZXJfQ1VMTF9GUk9OVDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFByb2dyYW1SYXN0ZXIgQ1VMTF9OT05FKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tUHJvZ3JhbVJhc3Rlcl9DVUxMX05PTkUgPT0gbnVsbCkgewotICAgICAgICAgICAgUHJvZ3JhbVJhc3Rlci5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJvZ3JhbVJhc3Rlci5CdWlsZGVyKHJzKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0Q3VsbE1vZGUoQ3VsbE1vZGUuTk9ORSk7Ci0gICAgICAgICAgICBycy5tUHJvZ3JhbVJhc3Rlcl9DVUxMX05PTkUgPSBidWlsZGVyLmNyZWF0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tUHJvZ3JhbVJhc3Rlcl9DVUxMX05PTkU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKLSAgICAgICAgUmVuZGVyU2NyaXB0IG1SUzsKLSAgICAgICAgYm9vbGVhbiBtUG9pbnRTcHJpdGU7Ci0gICAgICAgIEN1bGxNb2RlIG1DdWxsTW9kZTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgICAgIG1SUyA9IHJzOwotICAgICAgICAgICAgbVBvaW50U3ByaXRlID0gZmFsc2U7Ci0gICAgICAgICAgICBtQ3VsbE1vZGUgPSBDdWxsTW9kZS5CQUNLOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0UG9pbnRTcHJpdGVFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgICAgICAgICBtUG9pbnRTcHJpdGUgPSBlbmFibGU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEN1bGxNb2RlKEN1bGxNb2RlIG0pIHsKLSAgICAgICAgICAgIG1DdWxsTW9kZSA9IG07Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBQcm9ncmFtUmFzdGVyIGNyZWF0ZSgpIHsKLSAgICAgICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICAgICAgaW50IGlkID0gbVJTLm5Qcm9ncmFtUmFzdGVyQ3JlYXRlKG1Qb2ludFNwcml0ZSwgbUN1bGxNb2RlLm1JRCk7Ci0gICAgICAgICAgICBQcm9ncmFtUmFzdGVyIHByb2dyYW1SYXN0ZXIgPSBuZXcgUHJvZ3JhbVJhc3RlcihpZCwgbVJTKTsKLSAgICAgICAgICAgIHByb2dyYW1SYXN0ZXIubVBvaW50U3ByaXRlID0gbVBvaW50U3ByaXRlOwotICAgICAgICAgICAgcHJvZ3JhbVJhc3Rlci5tQ3VsbE1vZGUgPSBtQ3VsbE1vZGU7Ci0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbVJhc3RlcjsKLSAgICAgICAgfQotICAgIH0KLQotfQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVN0b3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYzllNzYuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKLQotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCi0vKioKLSAqIEBoaWRlCi0gKiA8cD5Qcm9ncmFtU3RvcmUgY29udGFpbnMgYSBzZXQgb2YgcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgaG93Ci0gKiB0aGUgZ3JhcGhpY3MgaGFyZHdhcmUgaGFuZGxlcyB3cml0ZXMgdG8gdGhlIGZyYW1lYnVmZmVyLgotICogSXQgY291bGQgYmUgdXNlZCB0bzo8L3A+Ci0gKiA8dWw+Ci0gKiAgIDxsaT5lbmFibGUvZGlzYWJsZSBkZXB0aCB0ZXN0aW5nPC9saT4KLSAqICAgPGxpPnNwZWNpZnkgd2hlYXRoZXIgZGVwdGggd3JpdGVzIGFyZSBwZXJmb3JtZWQ8L2xpPgotICogICA8bGk+c2V0dXAgdmFyaW91cyBibGVuZGluZyBtb2RlcyBmb3IgdXNlIGluIGVmZmVjdHMgbGlrZQotICogICAgIHRyYW5zcGFyZW5jeTwvbGk+Ci0gKiAgIDxsaT5kZWZpbmUgd3JpdGUgbWFza3MgZm9yIGNvbG9yIGNvbXBvbmVudHMgd3JpdHRlbiBpbnRvIHRoZQotICogICAgIGZyYW1lYnVmZmVyPC9saT4KLSAqICA8L3VsPgotICoKLSAqKi8KLXB1YmxpYyBjbGFzcyBQcm9ncmFtU3RvcmUgZXh0ZW5kcyBCYXNlT2JqIHsKLSAgICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGUgZnVuY3Rpb24gdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGZyYWdtZW50Ci0gICAgKiB3aWxsIGJlIGRyYXduIGR1cmluZyB0aGUgZGVwdGggdGVzdGluZyBzdGFnZSBpbiB0aGUgcmVuZGVyaW5nCi0gICAgKiBwaXBlbGluZSBieSBjb21wYXJpbmcgaXRzIHZhbHVlIHdpdGggdGhhdCBhbHJlYWR5IGluIHRoZSBkZXB0aAotICAgICogYnVmZmVyLiBEZXB0aEZ1bmMgaXMgb25seSB2YWxpZCB3aGVuIGRlcHRoIGJ1ZmZlciBpcyBwcmVzZW50Ci0gICAgKiBhbmQgZGVwdGggdGVzdGluZyBpcyBlbmFibGVkCi0gICAgKi8KLSAgICBwdWJsaWMgZW51bSBEZXB0aEZ1bmMgewotCi0gICAgICAgIC8qKgotICAgICAgICAqIEFsd2F5cyBkcmF3bgotICAgICAgICAqLwotICAgICAgICBBTFdBWVMgKDApLAotICAgICAgICAvKioKLSAgICAgICAgKiBEcmF3biBpZiB0aGUgaW5jb21pbmcgZGVwdGggdmFsdWUgaXMgbGVzcyB0aGFuIHRoYXQgaW4gdGhlCi0gICAgICAgICogZGVwdGggYnVmZmVyCi0gICAgICAgICovCi0gICAgICAgIExFU1MgKDEpLAotICAgICAgICAvKioKLSAgICAgICAgKiBEcmF3biBpZiB0aGUgaW5jb21pbmcgZGVwdGggdmFsdWUgaXMgbGVzcyBvciBlcXVhbCB0byB0aGF0IGluCi0gICAgICAgICogdGhlIGRlcHRoIGJ1ZmZlcgotICAgICAgICAqLwotICAgICAgICBMRVNTX09SX0VRVUFMICgyKSwKLSAgICAgICAgLyoqCi0gICAgICAgICogRHJhd24gaWYgdGhlIGluY29taW5nIGRlcHRoIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGF0IGluIHRoZQotICAgICAgICAqIGRlcHRoIGJ1ZmZlcgotICAgICAgICAqLwotICAgICAgICBHUkVBVEVSICgzKSwKLSAgICAgICAgLyoqCi0gICAgICAgICogRHJhd24gaWYgdGhlIGluY29taW5nIGRlcHRoIHZhbHVlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhhdAotICAgICAgICAqIGluIHRoZSBkZXB0aCBidWZmZXIKLSAgICAgICAgKi8KLSAgICAgICAgR1JFQVRFUl9PUl9FUVVBTCAoNCksCi0gICAgICAgIC8qKgotICAgICAgICAqIERyYXduIGlmIHRoZSBpbmNvbWluZyBkZXB0aCB2YWx1ZSBpcyBlcXVhbCB0byB0aGF0IGluIHRoZQotICAgICAgICAqIGRlcHRoIGJ1ZmZlcgotICAgICAgICAqLwotICAgICAgICBFUVVBTCAoNSksCi0gICAgICAgIC8qKgotICAgICAgICAqIERyYXduIGlmIHRoZSBpbmNvbWluZyBkZXB0aCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gdGhhdCBpbiB0aGUKLSAgICAgICAgKiBkZXB0aCBidWZmZXIKLSAgICAgICAgKi8KLSAgICAgICAgTk9UX0VRVUFMICg2KTsKLQotICAgICAgICBpbnQgbUlEOwotICAgICAgICBEZXB0aEZ1bmMoaW50IGlkKSB7Ci0gICAgICAgICAgICBtSUQgPSBpZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICogU3BlY2lmaWVzIHRoZSBmdW5jdGlvbnMgdXNlZCB0byBjb21iaW5lIGluY29taW5nIHBpeGVscyB3aXRoCi0gICAgKiB0aG9zZSBhbHJlYWR5IGluIHRoZSBmcmFtZSBidWZmZXIuCi0gICAgKgotICAgICogQmxlbmRTcmNGdW5jIGRlc2NyaWJlcyBob3cgdGhlIGNvZWZmaWNpZW50IHVzZWQgdG8gc2NhbGUgdGhlCi0gICAgKiBzb3VyY2UgcGl4ZWxzIGR1cmluZyB0aGUgYmxlbmRpbmcgb3BlcmF0aW9uIGlzIGNvbXB1dGVkCi0gICAgKgotICAgICovCi0gICAgcHVibGljIGVudW0gQmxlbmRTcmNGdW5jIHsKLSAgICAgICAgWkVSTyAoMCksCi0gICAgICAgIE9ORSAoMSksCi0gICAgICAgIERTVF9DT0xPUiAoMiksCi0gICAgICAgIE9ORV9NSU5VU19EU1RfQ09MT1IgKDMpLAotICAgICAgICBTUkNfQUxQSEEgKDQpLAotICAgICAgICBPTkVfTUlOVVNfU1JDX0FMUEhBICg1KSwKLSAgICAgICAgRFNUX0FMUEhBICg2KSwKLSAgICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAoNyksCi0gICAgICAgIFNSQ19BTFBIQV9TQVRVUkFURSAoOCk7Ci0KLSAgICAgICAgaW50IG1JRDsKLSAgICAgICAgQmxlbmRTcmNGdW5jKGludCBpZCkgewotICAgICAgICAgICAgbUlEID0gaWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNwZWNpZmllcyB0aGUgZnVuY3Rpb25zIHVzZWQgdG8gY29tYmluZSBpbmNvbWluZyBwaXhlbHMgd2l0aAotICAgICogdGhvc2UgYWxyZWFkeSBpbiB0aGUgZnJhbWUgYnVmZmVyLgotICAgICoKLSAgICAqIEJsZW5kRHN0RnVuYyBkZXNjcmliZXMgaG93IHRoZSBjb2VmZmljaWVudCB1c2VkIHRvIHNjYWxlIHRoZQotICAgICogcGl4ZWxzIGFscmVhZHkgaW4gdGhlIGZyYW1lYnVmZmVyIGlzIGNvbXB1dGVkIGR1cmluZyB0aGUKLSAgICAqIGJsZW5kaW5nIG9wZXJhdGlvbgotICAgICoKLSAgICAqLwotICAgIHB1YmxpYyBlbnVtIEJsZW5kRHN0RnVuYyB7Ci0gICAgICAgIFpFUk8gKDApLAotICAgICAgICBPTkUgKDEpLAotICAgICAgICBTUkNfQ09MT1IgKDIpLAotICAgICAgICBPTkVfTUlOVVNfU1JDX0NPTE9SICgzKSwKLSAgICAgICAgU1JDX0FMUEhBICg0KSwKLSAgICAgICAgT05FX01JTlVTX1NSQ19BTFBIQSAoNSksCi0gICAgICAgIERTVF9BTFBIQSAoNiksCi0gICAgICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgKDcpOwotCi0gICAgICAgIGludCBtSUQ7Ci0gICAgICAgIEJsZW5kRHN0RnVuYyhpbnQgaWQpIHsKLSAgICAgICAgICAgIG1JRCA9IGlkOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgRGVwdGhGdW5jIG1EZXB0aEZ1bmM7Ci0gICAgYm9vbGVhbiBtRGVwdGhNYXNrOwotICAgIGJvb2xlYW4gbUNvbG9yTWFza1I7Ci0gICAgYm9vbGVhbiBtQ29sb3JNYXNrRzsKLSAgICBib29sZWFuIG1Db2xvck1hc2tCOwotICAgIGJvb2xlYW4gbUNvbG9yTWFza0E7Ci0gICAgQmxlbmRTcmNGdW5jIG1CbGVuZFNyYzsKLSAgICBCbGVuZERzdEZ1bmMgbUJsZW5kRHN0OwotICAgIGJvb2xlYW4gbURpdGhlcjsKLQotICAgIFByb2dyYW1TdG9yZShpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBzdXBlcihpZCwgcnMpOwotICAgIH0KLQotICAgIC8qKgotICAgICogUmV0dXJucyB0aGUgZnVuY3Rpb24gdXNlZCB0byB0ZXN0IHdyaXRpbmcgaW50byB0aGUgZGVwdGgKLSAgICAqIGJ1ZmZlcgotICAgICogQHJldHVybiBkZXB0aCBmdW5jdGlvbgotICAgICovCi0gICAgcHVibGljIERlcHRoRnVuYyBnZXREZXB0aEZ1bmMoKSB7Ci0gICAgICAgIHJldHVybiBtRGVwdGhGdW5jOwotICAgIH0KLQotICAgIC8qKgotICAgICogUXVlcmllcyB3aGV0aGVyIHdyaXRlcyBhcmUgZW5hYmxlZCBpbnRvIHRoZSBkZXB0aCBidWZmZXIKLSAgICAqIEByZXR1cm4gZGVwdGggbWFzawotICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNEZXB0aE1hc2tFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gbURlcHRoTWFzazsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFF1ZXJpZXMgd2hldGhlciByZWQgY2hhbm5lbCBpcyB3cml0dGVuCi0gICAgKiBAcmV0dXJuIHJlZCBjb2xvciBjaGFubmVsIG1hc2sKLSAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzQ29sb3JNYXNrUmVkRW5hYmxlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1Db2xvck1hc2tSOwotICAgIH0KLQotICAgIC8qKgotICAgICogUXVlcmllcyB3aGV0aGVyIGdyZWVuIGNoYW5uZWwgaXMgd3JpdHRlbgotICAgICogQHJldHVybiBncmVlbiBjb2xvciBjaGFubmVsIG1hc2sKLSAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzQ29sb3JNYXNrR3JlZW5FbmFibGVkKCkgewotICAgICAgICByZXR1cm4gbUNvbG9yTWFza0c7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBRdWVyaWVzIHdoZXRoZXIgYmx1ZSBjaGFubmVsIGlzIHdyaXR0ZW4KLSAgICAqIEByZXR1cm4gYmx1ZSBjb2xvciBjaGFubmVsIG1hc2sKLSAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzQ29sb3JNYXNrQmx1ZUVuYWJsZWQoKSB7Ci0gICAgICAgIHJldHVybiBtQ29sb3JNYXNrQjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFF1ZXJpZXMgd2hldGhlciBhbHBoYSBjaGFubmVsIGlzIHdyaXR0ZW4KLSAgICAqIEByZXR1cm4gYWxwaGEgY2hhbm5lbCBtYXNrCi0gICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0NvbG9yTWFza0FscGhhRW5hYmxlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1Db2xvck1hc2tBOwotICAgIH0KLQotICAgIC8qKgotICAgICogU3BlY2lmaWVzIGhvdyB0aGUgc291cmNlIGJsZW5kaW5nIGZhY3RvciBpcyBjb21wdXRlZAotICAgICogQHJldHVybiBzb3VyY2UgYmxlbmQgZnVuY3Rpb24KLSAgICAqLwotICAgIHB1YmxpYyBCbGVuZFNyY0Z1bmMgZ2V0QmxlbmRTcmNGdW5jKCkgewotICAgICAgICByZXR1cm4gbUJsZW5kU3JjOwotICAgIH0KLQotICAgIC8qKgotICAgICogU3BlY2lmaWVzIGhvdyB0aGUgZGVzdGluYXRpb24gYmxlbmRpbmcgZmFjdG9yIGlzIGNvbXB1dGVkCi0gICAgKiBAcmV0dXJuIGRlc3RpbmF0aW9uIGJsZW5kIGZ1bmN0aW9uCi0gICAgKi8KLSAgICBwdWJsaWMgQmxlbmREc3RGdW5jIGdldEJsZW5kRHN0RnVuYygpIHsKLSAgICAgICAgcmV0dXJuIG1CbGVuZERzdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNwZWNpZmllcyB3aGV0aGVyIGNvbG9ycyBhcmUgZGl0aGVyZWQgYmVmb3JlIHdyaXRpbmcgaW50byB0aGUKLSAgICAqIGZyYW1lYnVmZmVyCi0gICAgKiBAcmV0dXJuIHdoZXRoZXIgZGl0aGVyIGlzIGVuYWJsZWQKLSAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzRGl0aGVyRW5hYmxlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1EaXRoZXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBSZXR1cm5zIGEgcHJlLWRlZmluZWQgcHJvZ3JhbSBzdG9yZSBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nCi0gICAgKiBjaGFyYWN0ZXJpc3RpY3M6Ci0gICAgKiAgLSBpbmNvbWluZyBwaXhlbHMgYXJlIGRyYXduIGlmIHRoZWlyIGRlcHRoIHZhbHVlIGlzIGxlc3MgdGhhbgotICAgICogICAgdGhlIHN0b3JlZCB2YWx1ZSBpbiB0aGUgZGVwdGggYnVmZmVyLiBJZiB0aGUgcGl4ZWwgaXMKLSAgICAqICAgIGRyYXduLCBpdHMgdmFsdWUgaXMgYWxzbyBzdG9yZWQgaW4gdGhlIGRlcHRoIGJ1ZmZlcgotICAgICogIC0gaW5jb21pbmcgcGl4ZWxzIG92ZXJyaWRlIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIGNvbG9yCi0gICAgKiAgICBidWZmZXIgaWYgaXQgcGFzc2VzIHRoZSBkZXB0aCB0ZXN0Ci0gICAgKgotICAgICogIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBwcm9ncmFtIHdpbGwgYmVsb25nLgotICAgICoqLwotICAgIHB1YmxpYyBzdGF0aWMgUHJvZ3JhbVN0b3JlIEJMRU5EX05PTkVfREVQVEhfVEVTVChSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubVByb2dyYW1TdG9yZV9CTEVORF9OT05FX0RFUFRIX1RFU1QgPT0gbnVsbCkgewotICAgICAgICAgICAgUHJvZ3JhbVN0b3JlLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBQcm9ncmFtU3RvcmUuQnVpbGRlcihycyk7Ci0gICAgICAgICAgICBidWlsZGVyLnNldERlcHRoRnVuYyhQcm9ncmFtU3RvcmUuRGVwdGhGdW5jLkxFU1MpOwotICAgICAgICAgICAgYnVpbGRlci5zZXRCbGVuZEZ1bmMoQmxlbmRTcmNGdW5jLk9ORSwgQmxlbmREc3RGdW5jLlpFUk8pOwotICAgICAgICAgICAgYnVpbGRlci5zZXREaXRoZXJFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0RGVwdGhNYXNrRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIHJzLm1Qcm9ncmFtU3RvcmVfQkxFTkRfTk9ORV9ERVBUSF9URVNUID0gYnVpbGRlci5jcmVhdGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubVByb2dyYW1TdG9yZV9CTEVORF9OT05FX0RFUFRIX1RFU1Q7Ci0gICAgfQotICAgIC8qKgotICAgICogUmV0dXJucyBhIHByZS1kZWZpbmVkIHByb2dyYW0gc3RvcmUgb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZwotICAgICogY2hhcmFjdGVyaXN0aWNzOgotICAgICogIC0gaW5jb21pbmcgcGl4ZWxzIGFsd2F5cyBwYXNzIHRoZSBkZXB0aCB0ZXN0IGFuZCB0aGVpciB2YWx1ZQotICAgICogICAgaXMgbm90IHN0b3JlZCBpbiB0aGUgZGVwdGggYnVmZmVyCi0gICAgKiAgLSBpbmNvbWluZyBwaXhlbHMgb3ZlcnJpZGUgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgY29sb3IKLSAgICAqICAgIGJ1ZmZlcgotICAgICoKLSAgICAqICBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgcHJvZ3JhbSB3aWxsIGJlbG9uZy4KLSAgICAqKi8KLSAgICBwdWJsaWMgc3RhdGljIFByb2dyYW1TdG9yZSBCTEVORF9OT05FX0RFUFRIX05PTkUoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1Qcm9ncmFtU3RvcmVfQkxFTkRfTk9ORV9ERVBUSF9OT19ERVBUSCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBQcm9ncmFtU3RvcmUuQnVpbGRlciBidWlsZGVyID0gbmV3IFByb2dyYW1TdG9yZS5CdWlsZGVyKHJzKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0RGVwdGhGdW5jKFByb2dyYW1TdG9yZS5EZXB0aEZ1bmMuQUxXQVlTKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0QmxlbmRGdW5jKEJsZW5kU3JjRnVuYy5PTkUsIEJsZW5kRHN0RnVuYy5aRVJPKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0RGl0aGVyRW5hYmxlZChmYWxzZSk7Ci0gICAgICAgICAgICBidWlsZGVyLnNldERlcHRoTWFza0VuYWJsZWQoZmFsc2UpOwotICAgICAgICAgICAgcnMubVByb2dyYW1TdG9yZV9CTEVORF9OT05FX0RFUFRIX05PX0RFUFRIID0gYnVpbGRlci5jcmVhdGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubVByb2dyYW1TdG9yZV9CTEVORF9OT05FX0RFUFRIX05PX0RFUFRIOwotICAgIH0KLSAgICAvKioKLSAgICAqIFJldHVybnMgYSBwcmUtZGVmaW5lZCBwcm9ncmFtIHN0b3JlIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcKLSAgICAqIGNoYXJhY3RlcmlzdGljczoKLSAgICAqICAtIGluY29taW5nIHBpeGVscyBhcmUgZHJhd24gaWYgdGhlaXIgZGVwdGggdmFsdWUgaXMgbGVzcyB0aGFuCi0gICAgKiAgICB0aGUgc3RvcmVkIHZhbHVlIGluIHRoZSBkZXB0aCBidWZmZXIuIElmIHRoZSBwaXhlbCBpcwotICAgICogICAgZHJhd24sIGl0cyB2YWx1ZSBpcyBhbHNvIHN0b3JlZCBpbiB0aGUgZGVwdGggYnVmZmVyCi0gICAgKiAgLSBpZiB0aGUgaW5jb21pbmcgKFNvdXJjZSkgcGl4ZWwgcGFzc2VzIGRlcHRoIHRlc3QsIGl0cyB2YWx1ZQotICAgICogICAgaXMgY29tYmluZWQgd2l0aCB0aGUgc3RvcmVkIGNvbG9yIChEZXN0KSB1c2luZyB0aGUKLSAgICAqICAgIGZvbGxvd2luZyBmb3JtdWxhCi0gICAgKiAgRmluYWwuUkdCID0gU291cmNlLlJHQiAqIFNvdXJjZS5BICsgRGVzdC5SR0IgKiAoMSAtIFNvdXJjZS5BKQotICAgICoKLSAgICAqICBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgcHJvZ3JhbSB3aWxsIGJlbG9uZy4KLSAgICAqKi8KLSAgICBwdWJsaWMgc3RhdGljIFByb2dyYW1TdG9yZSBCTEVORF9BTFBIQV9ERVBUSF9URVNUKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tUHJvZ3JhbVN0b3JlX0JMRU5EX0FMUEhBX0RFUFRIX1RFU1QgPT0gbnVsbCkgewotICAgICAgICAgICAgUHJvZ3JhbVN0b3JlLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBQcm9ncmFtU3RvcmUuQnVpbGRlcihycyk7Ci0gICAgICAgICAgICBidWlsZGVyLnNldERlcHRoRnVuYyhQcm9ncmFtU3RvcmUuRGVwdGhGdW5jLkxFU1MpOwotICAgICAgICAgICAgYnVpbGRlci5zZXRCbGVuZEZ1bmMoQmxlbmRTcmNGdW5jLlNSQ19BTFBIQSwgQmxlbmREc3RGdW5jLk9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICAgICAgYnVpbGRlci5zZXREaXRoZXJFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0RGVwdGhNYXNrRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIHJzLm1Qcm9ncmFtU3RvcmVfQkxFTkRfQUxQSEFfREVQVEhfVEVTVCA9IGJ1aWxkZXIuY3JlYXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1Qcm9ncmFtU3RvcmVfQkxFTkRfQUxQSEFfREVQVEhfVEVTVDsKLSAgICB9Ci0gICAgLyoqCi0gICAgKiBSZXR1cm5zIGEgcHJlLWRlZmluZWQgcHJvZ3JhbSBzdG9yZSBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nCi0gICAgKiBjaGFyYWN0ZXJpc3RpY3M6Ci0gICAgKiAgLSBpbmNvbWluZyBwaXhlbHMgYWx3YXlzIHBhc3MgdGhlIGRlcHRoIHRlc3QgYW5kIHRoZWlyIHZhbHVlCi0gICAgKiAgICBpcyBub3Qgc3RvcmVkIGluIHRoZSBkZXB0aCBidWZmZXIKLSAgICAqICAtIGluY29taW5nIHBpeGVsJ3MgdmFsdWUgaXMgY29tYmluZWQgd2l0aCB0aGUgc3RvcmVkIGNvbG9yCi0gICAgKiAgICAoRGVzdCkgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3JtdWxhCi0gICAgKiAgRmluYWwuUkdCID0gU291cmNlLlJHQiAqIFNvdXJjZS5BICsgRGVzdC5SR0IgKiAoMSAtIFNvdXJjZS5BKQotICAgICoKLSAgICAqICBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgcHJvZ3JhbSB3aWxsIGJlbG9uZy4KLSAgICAqKi8KLSAgICBwdWJsaWMgc3RhdGljIFByb2dyYW1TdG9yZSBCTEVORF9BTFBIQV9ERVBUSF9OT05FKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tUHJvZ3JhbVN0b3JlX0JMRU5EX0FMUEhBX0RFUFRIX05PX0RFUFRIID09IG51bGwpIHsKLSAgICAgICAgICAgIFByb2dyYW1TdG9yZS5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJvZ3JhbVN0b3JlLkJ1aWxkZXIocnMpOwotICAgICAgICAgICAgYnVpbGRlci5zZXREZXB0aEZ1bmMoUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYy5BTFdBWVMpOwotICAgICAgICAgICAgYnVpbGRlci5zZXRCbGVuZEZ1bmMoQmxlbmRTcmNGdW5jLlNSQ19BTFBIQSwgQmxlbmREc3RGdW5jLk9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICAgICAgYnVpbGRlci5zZXREaXRoZXJFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuc2V0RGVwdGhNYXNrRW5hYmxlZChmYWxzZSk7Ci0gICAgICAgICAgICBycy5tUHJvZ3JhbVN0b3JlX0JMRU5EX0FMUEhBX0RFUFRIX05PX0RFUFRIID0gYnVpbGRlci5jcmVhdGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubVByb2dyYW1TdG9yZV9CTEVORF9BTFBIQV9ERVBUSF9OT19ERVBUSDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIEJ1aWxkZXIgY2xhc3MgZm9yIFByb2dyYW1TdG9yZSBvYmplY3QuIElmIHRoZSBidWlsZGVyIGlzIGxlZnQKLSAgICAqIGVtcHR5LCB0aGUgZXF1aXZhbGVudCBvZiBCTEVORF9OT05FX0RFUFRIX05PTkUgd291bGQgYmUKLSAgICAqIHJldHVybmVkCi0gICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOwotICAgICAgICBEZXB0aEZ1bmMgbURlcHRoRnVuYzsKLSAgICAgICAgYm9vbGVhbiBtRGVwdGhNYXNrOwotICAgICAgICBib29sZWFuIG1Db2xvck1hc2tSOwotICAgICAgICBib29sZWFuIG1Db2xvck1hc2tHOwotICAgICAgICBib29sZWFuIG1Db2xvck1hc2tCOwotICAgICAgICBib29sZWFuIG1Db2xvck1hc2tBOwotICAgICAgICBCbGVuZFNyY0Z1bmMgbUJsZW5kU3JjOwotICAgICAgICBCbGVuZERzdEZ1bmMgbUJsZW5kRHN0OwotICAgICAgICBib29sZWFuIG1EaXRoZXI7Ci0KLSAgICAgICAgcHVibGljIEJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgICAgICBtUlMgPSByczsKLSAgICAgICAgICAgIG1EZXB0aEZ1bmMgPSBEZXB0aEZ1bmMuQUxXQVlTOwotICAgICAgICAgICAgbURlcHRoTWFzayA9IGZhbHNlOwotICAgICAgICAgICAgbUNvbG9yTWFza1IgPSB0cnVlOwotICAgICAgICAgICAgbUNvbG9yTWFza0cgPSB0cnVlOwotICAgICAgICAgICAgbUNvbG9yTWFza0IgPSB0cnVlOwotICAgICAgICAgICAgbUNvbG9yTWFza0EgPSB0cnVlOwotICAgICAgICAgICAgbUJsZW5kU3JjID0gQmxlbmRTcmNGdW5jLk9ORTsKLSAgICAgICAgICAgIG1CbGVuZERzdCA9IEJsZW5kRHN0RnVuYy5aRVJPOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogU3BlY2lmaWVzIHRoZSBkZXB0aCB0ZXN0aW5nIGJlaGF2aW9yCi0gICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0gZnVuYyBmdW5jdGlvbiB1c2VkIGZvciBkZXB0aCB0ZXN0aW5nCi0gICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuIHRoaXMKLSAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RGVwdGhGdW5jKERlcHRoRnVuYyBmdW5jKSB7Ci0gICAgICAgICAgICBtRGVwdGhGdW5jID0gZnVuYzsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogRW5hYmxlcyB3cml0ZXMgaW50byB0aGUgZGVwdGggYnVmZmVyCi0gICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0gZW5hYmxlIHNwZWNpZmllcyB3aGV0aGVyIGRlcHRoIHdyaXRlcyBhcmUKLSAgICAgICAgKiAgICAgICAgIGVuYWJsZWQgb3IgZGlzYWJsZWQKLSAgICAgICAgKgotICAgICAgICAqIEByZXR1cm4gdGhpcwotICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXREZXB0aE1hc2tFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgICAgICAgICBtRGVwdGhNYXNrID0gZW5hYmxlOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgKiBFbmFibGVzIHdyaXRlcyBpbnRvIHRoZSBjb2xvciBidWZmZXIKLSAgICAgICAgKgotICAgICAgICAqIEBwYXJhbSByIHNwZWNpZmllcyB3aGV0aGVyIHJlZCBjaGFubmVsIGlzIHdyaXR0ZW4KLSAgICAgICAgKiBAcGFyYW0gZyBzcGVjaWZpZXMgd2hldGhlciBncmVlbiBjaGFubmVsIGlzIHdyaXR0ZW4KLSAgICAgICAgKiBAcGFyYW0gYiBzcGVjaWZpZXMgd2hldGhlciBibHVlIGNoYW5uZWwgaXMgd3JpdHRlbgotICAgICAgICAqIEBwYXJhbSBhIHNwZWNpZmllcyB3aGV0aGVyIGFscGhhIGNoYW5uZWwgaXMgd3JpdHRlbgotICAgICAgICAqCi0gICAgICAgICogQHJldHVybiB0aGlzCi0gICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldENvbG9yTWFza0VuYWJsZWQoYm9vbGVhbiByLCBib29sZWFuIGcsIGJvb2xlYW4gYiwgYm9vbGVhbiBhKSB7Ci0gICAgICAgICAgICBtQ29sb3JNYXNrUiA9IHI7Ci0gICAgICAgICAgICBtQ29sb3JNYXNrRyA9IGc7Ci0gICAgICAgICAgICBtQ29sb3JNYXNrQiA9IGI7Ci0gICAgICAgICAgICBtQ29sb3JNYXNrQSA9IGE7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIFNwZWNpZmllcyBob3cgaW5jb21pbmcgcGl4ZWxzIGFyZSBjb21iaW5lZCB3aXRoIHRoZSBwaXhlbHMKLSAgICAgICAgKiBzdG9yZWQgaW4gdGhlIGZyYW1lYnVmZmVyCi0gICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0gc3JjIHNwZWNpZmllcyBob3cgdGhlIHNvdXJjZSBibGVuZGluZyBmYWN0b3IgaXMKLSAgICAgICAgKiAgICAgICAgICAgIGNvbXB1dGVkCi0gICAgICAgICogQHBhcmFtIGRzdCBzcGVjaWZpZXMgaG93IHRoZSBkZXN0aW5hdGlvbiBibGVuZGluZyBmYWN0b3IgaXMKLSAgICAgICAgKiAgICAgICAgICAgIGNvbXB1dGVkCi0gICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuIHRoaXMKLSAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0QmxlbmRGdW5jKEJsZW5kU3JjRnVuYyBzcmMsIEJsZW5kRHN0RnVuYyBkc3QpIHsKLSAgICAgICAgICAgIG1CbGVuZFNyYyA9IHNyYzsKLSAgICAgICAgICAgIG1CbGVuZERzdCA9IGRzdDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogRW5hYmxlcyBkaXRoZXJpbmcKLSAgICAgICAgKgotICAgICAgICAqIEBwYXJhbSBlbmFibGUgc3BlY2lmaWVzIHdoZXRoZXIgZGl0aGVyaW5nIGlzIGVuYWJsZWQgb3IKLSAgICAgICAgKiAgICAgICAgICAgICAgIGRpc2FibGVkCi0gICAgICAgICoKLSAgICAgICAgKiBAcmV0dXJuIHRoaXMKLSAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RGl0aGVyRW5hYmxlZChib29sZWFuIGVuYWJsZSkgewotICAgICAgICAgICAgbURpdGhlciA9IGVuYWJsZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQ3JlYXRlcyBhIHByb2dyYW0gc3RvcmUgZnJvbSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYnVpbGRlcgotICAgICAgICAqLwotICAgICAgICBwdWJsaWMgUHJvZ3JhbVN0b3JlIGNyZWF0ZSgpIHsKLSAgICAgICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICAgICAgaW50IGlkID0gbVJTLm5Qcm9ncmFtU3RvcmVDcmVhdGUobUNvbG9yTWFza1IsIG1Db2xvck1hc2tHLCBtQ29sb3JNYXNrQiwgbUNvbG9yTWFza0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGVwdGhNYXNrLCBtRGl0aGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUJsZW5kU3JjLm1JRCwgbUJsZW5kRHN0Lm1JRCwgbURlcHRoRnVuYy5tSUQpOwotICAgICAgICAgICAgUHJvZ3JhbVN0b3JlIHByb2dyYW1TdG9yZSA9IG5ldyBQcm9ncmFtU3RvcmUoaWQsIG1SUyk7Ci0gICAgICAgICAgICBwcm9ncmFtU3RvcmUubURlcHRoRnVuYyA9IG1EZXB0aEZ1bmM7Ci0gICAgICAgICAgICBwcm9ncmFtU3RvcmUubURlcHRoTWFzayA9IG1EZXB0aE1hc2s7Ci0gICAgICAgICAgICBwcm9ncmFtU3RvcmUubUNvbG9yTWFza1IgPSBtQ29sb3JNYXNrUjsKLSAgICAgICAgICAgIHByb2dyYW1TdG9yZS5tQ29sb3JNYXNrRyA9IG1Db2xvck1hc2tHOwotICAgICAgICAgICAgcHJvZ3JhbVN0b3JlLm1Db2xvck1hc2tCID0gbUNvbG9yTWFza0I7Ci0gICAgICAgICAgICBwcm9ncmFtU3RvcmUubUNvbG9yTWFza0EgPSBtQ29sb3JNYXNrQTsKLSAgICAgICAgICAgIHByb2dyYW1TdG9yZS5tQmxlbmRTcmMgPSBtQmxlbmRTcmM7Ci0gICAgICAgICAgICBwcm9ncmFtU3RvcmUubUJsZW5kRHN0ID0gbUJsZW5kRHN0OwotICAgICAgICAgICAgcHJvZ3JhbVN0b3JlLm1EaXRoZXIgPSBtRGl0aGVyOwotICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1TdG9yZTsKLSAgICAgICAgfQotICAgIH0KLQotfQotCi0KLQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1WZXJ0ZXguamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzVhMTkxLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBoaWRlCi0gKiA8cD5UaGUgUmVuZGVyU2NyaXB0IHZlcnRleCBwcm9ncmFtLCBhbHNvIGtub3duIGFzIGEgdmVydGV4IHNoYWRlciwgZGVzY3JpYmVzIGEgc3RhZ2UgaW4KLSAqIHRoZSBncmFwaGljcyBwaXBlbGluZSByZXNwb25zaWJsZSBmb3IgbWFuaXB1bGF0aW5nIGdlb21ldHJpYyBkYXRhIGluIGEgdXNlci1kZWZpbmVkIHdheS4KLSAqIFRoZSBvYmplY3QgaXMgY29uc3RydWN0ZWQgYnkgcHJvdmlkaW5nIHRoZSBSZW5kZXJTY3JpcHQgc3lzdGVtIHdpdGggdGhlIGZvbGxvd2luZyBkYXRhOjwvcD4KLSAqIDx1bD4KLSAqICAgPGxpPkVsZW1lbnQgZGVzY3JpYmluZyBpdHMgdmFyeWluZyBpbnB1dHMgb3IgYXR0cmlidXRlczwvbGk+Ci0gKiAgIDxsaT5HTFNMIHNoYWRlciBzdHJpbmcgdGhhdCBkZWZpbmVzIHRoZSBib2R5IG9mIHRoZSBwcm9ncmFtPC9saT4KLSAqICAgPGxpPmEgVHlwZSB0aGF0IGRlc2NyaWJlcyB0aGUgbGF5b3V0IG9mIGFuIEFsbG9jYXRpb24gY29udGFpbmluZyBjb25zdGFudCBvciB1bmlmb3JtIGlucHV0czwvbGk+Ci0gKiA8L3VsPgotICoKLSAqIDxwPk9uY2UgdGhlIHByb2dyYW0gaXMgY3JlYXRlZCwgeW91IGJpbmQgaXQgdG8gdGhlIGdyYXBoaWNzIGNvbnRleHQsIFJlbmRlclNjcmlwdEdMLCBhbmQgaXQgd2lsbCBiZSB1c2VkIGZvcgotICogYWxsIHN1YnNlcXVlbnQgZHJhdyBjYWxscyB1bnRpbCB5b3UgYmluZCBhIG5ldyBwcm9ncmFtLiBJZiB0aGUgcHJvZ3JhbSBoYXMgY29uc3RhbnQgaW5wdXRzLAotICogdGhlIHVzZXIgbmVlZHMgdG8gYmluZCBhbiBhbGxvY2F0aW9uIGNvbnRhaW5pbmcgdGhvc2UgaW5wdXRzLiBUaGUgYWxsb2NhdGlvbidzIHR5cGUgbXVzdCBtYXRjaAotICogdGhlIG9uZSBwcm92aWRlZCBkdXJpbmcgY3JlYXRpb24uIFRoZSBSZW5kZXJTY3JpcHQgbGlicmFyeSB0aGVuIGRvZXMgYWxsIHRoZSBuZWNlc3NhcnkgcGx1bWJpbmcKLSAqIHRvIHNlbmQgdGhvc2UgY29uc3RhbnRzIHRvIHRoZSBncmFwaGljcyBoYXJkd2FyZS4gVmFyeWluZyBpbnB1dHMgdG8gdGhlIHNoYWRlciwgc3VjaCBhcyBwb3NpdGlvbiwgbm9ybWFsLAotICogYW5kIHRleHR1cmUgY29vcmRpbmF0ZXMgYXJlIG1hdGNoZWQgYnkgbmFtZSBiZXR3ZWVuIHRoZSBpbnB1dCBFbGVtZW50IGFuZCB0aGUgTWVzaCBvYmplY3QgYmVpbmcgZHJhd24uCi0gKiBUaGUgc2lnbmF0dXJlcyBkb24ndCBoYXZlIHRvIGJlIGV4YWN0IG9yIGluIGFueSBzdHJpY3Qgb3JkZXIuIEFzIGxvbmcgYXMgdGhlIGlucHV0IG5hbWUgaW4gdGhlIHNoYWRlcgotICogbWF0Y2hlcyBhIGNoYW5uZWwgbmFtZSBhbmQgc2l6ZSBhdmFpbGFibGUgb24gdGhlIG1lc2gsIHRoZSBydW50aW1lIHRha2VzIGNhcmUgb2YgY29ubmVjdGluZyB0aGUKLSAqIHR3by4gVW5saWtlIE9wZW5HTCwgdGhlcmUgaXMgbm8gbmVlZCB0byBsaW5rIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHByb2dyYW1zLjwvcD4KLSAqCi0gKiovCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0KLS8qKgotICogQGhpZGUKLSAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICogUHJvZ3JhbVZlcnRleCwgYWxzbyBrbm93IGFzIGEgdmVydGV4IHNoYWRlciwgZGVzY3JpYmVzIGEKLSAqIHN0YWdlIGluIHRoZSBncmFwaGljcyBwaXBlbGluZSByZXNwb25zaWJsZSBmb3IgbWFuaXB1bGF0aW5nCi0gKiBnZW9tZXRyaWMgZGF0YSBpbiBhIHVzZXItZGVmaW5lZCB3YXkuCi0gKgotICoqLwotcHVibGljIGNsYXNzIFByb2dyYW1WZXJ0ZXggZXh0ZW5kcyBQcm9ncmFtIHsKLQotICAgIFByb2dyYW1WZXJ0ZXgoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgc3VwZXIoaWQsIHJzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBAcmV0dXJuIG51bWJlciBvZiBpbnB1dCBhdHRyaWJ1dGUgZWxlbWVudHMKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldElucHV0Q291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtSW5wdXRzICE9IG51bGwgPyBtSW5wdXRzLmxlbmd0aCA6IDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogQHBhcmFtIHNsb3QgbG9jYXRpb24gb2YgdGhlIGlucHV0IHRvIHJldHVybgotICAgICAqIEByZXR1cm4gaW5wdXQgYXR0cmlidXRlIGVsZW1lbnQKLSAgICAgKi8KLSAgICBwdWJsaWMgRWxlbWVudCBnZXRJbnB1dChpbnQgc2xvdCkgewotICAgICAgICBpZiAoc2xvdCA8IDAgfHwgc2xvdCA+PSBtSW5wdXRzLmxlbmd0aCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU2xvdCBJRCBvdXQgb2YgcmFuZ2UuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1JbnB1dHNbc2xvdF07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGhpZGUKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBCdWlsZGVyIGNsYXNzIGZvciBjcmVhdGluZyBQcm9ncmFtVmVydGV4IG9iamVjdHMuCi0gICAgICogVGhlIGJ1aWxkZXIgc3RhcnRzIGVtcHR5IGFuZCB0aGUgdXNlciBtdXN0IG1pbmltYWxseSBwcm92aWRlCi0gICAgICogdGhlIEdMU0wgc2hhZGVyIGNvZGUsIGFuZCB0aGUgdmFyeWluZyBpbnB1dHMuIENvbnN0YW50LCBvcgotICAgICAqIHVuaWZvcm0gcGFyYW1ldGVycyB0byB0aGUgc2hhZGVyIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGFzCi0gICAgICogd2VsbC4KLSAgICAgKgotICAgICAqKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgZXh0ZW5kcyBCYXNlUHJvZ3JhbUJ1aWxkZXIgewotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAqIENyZWF0ZSBhIGJ1aWxkZXIgb2JqZWN0LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgcHJvZ3JhbSB3aWxsIGJlbG9uZy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICAgICAgc3VwZXIocnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKiBBZGQgdmFyeWluZyBpbnB1dHMgdG8gdGhlIHByb2dyYW0KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGUgZWxlbWVudCBkZXNjcmliaW5nIHRoZSBsYXlvdXQgb2YgdGhlIHZhcnlpbmcgaW5wdXQKLSAgICAgICAgICogICAgICAgICAgc3RydWN0dXJlCi0gICAgICAgICAqIEByZXR1cm4gIHNlbGYKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZElucHV0KEVsZW1lbnQgZSkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBTaG91bGQgY2hlY2sgZm9yIGNvbnNpc3RhbnQgYW5kIG5vbi1jb25mbGljdGluZyBuYW1lcy4uLgotICAgICAgICAgICAgaWYobUlucHV0Q291bnQgPj0gTUFYX0lOUFVUKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNYXggaW5wdXQgY291bnQgZXhjZWVkZWQuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZS5pc0NvbXBsZXgoKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29tcGxleCBlbGVtZW50cyBub3QgYWxsb3dlZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1JbnB1dHNbbUlucHV0Q291bnQrK10gPSBlOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAqIENyZWF0ZXMgUHJvZ3JhbVZlcnRleCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBidWlsZGVyCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gIFByb2dyYW1WZXJ0ZXgKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBQcm9ncmFtVmVydGV4IGNyZWF0ZSgpIHsKLSAgICAgICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICAgICAgaW50W10gdG1wID0gbmV3IGludFsobUlucHV0Q291bnQgKyBtT3V0cHV0Q291bnQgKyBtQ29uc3RhbnRDb3VudCArIG1UZXh0dXJlQ291bnQpICogMl07Ci0gICAgICAgICAgICBTdHJpbmdbXSB0ZXhOYW1lcyA9IG5ldyBTdHJpbmdbbVRleHR1cmVDb3VudF07Ci0gICAgICAgICAgICBpbnQgaWR4ID0gMDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbUlucHV0Q291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uSU5QVVQubUlEOwotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBtSW5wdXRzW2ldLmdldElEKG1SUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtT3V0cHV0Q291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uT1VUUFVULm1JRDsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gbU91dHB1dHNbaV0uZ2V0SUQobVJTKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1Db25zdGFudENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLkNPTlNUQU5ULm1JRDsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gbUNvbnN0YW50c1tpXS5nZXRJRChtUlMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbVRleHR1cmVDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5URVhUVVJFX1RZUEUubUlEOwotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBtVGV4dHVyZVR5cGVzW2ldLm1JRDsKLSAgICAgICAgICAgICAgICB0ZXhOYW1lc1tpXSA9IG1UZXh0dXJlTmFtZXNbaV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBpZCA9IG1SUy5uUHJvZ3JhbVZlcnRleENyZWF0ZShtU2hhZGVyLCB0ZXhOYW1lcywgdG1wKTsKLSAgICAgICAgICAgIFByb2dyYW1WZXJ0ZXggcHYgPSBuZXcgUHJvZ3JhbVZlcnRleChpZCwgbVJTKTsKLSAgICAgICAgICAgIGluaXRQcm9ncmFtKHB2KTsKLSAgICAgICAgICAgIHJldHVybiBwdjsKLSAgICAgICAgfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDQ4NmYzLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0KLS8qKgotICogQGhpZGUKLSAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICogUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24gaXMgYSBoZWxwZXIgY2xhc3MgdGhhdCBwcm92aWRlcyBhCi0gKiBzaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIGZpeGVkIGZ1bmN0aW9uIGVtdWxhdGlvbiB2ZXJ0ZXggc2hhZGVyCi0gKiB3aXRob3V0IHdyaXRpbmcgYW55IEdMU0wgY29kZS4KLSAqCi0gKiovCi1wdWJsaWMgY2xhc3MgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24gZXh0ZW5kcyBQcm9ncmFtVmVydGV4IHsKLQotICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogQmluZHMgdGhlIGNvbnN0YW50IGJ1ZmZlciBjb250YWluaW5nIGZpeGVkIGZ1bmN0aW9uIGVtdWxhdGlvbgotICAgICAqIG1hdHJpY2VzCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmEgYWxsb2NhdGlvbiBjb250YWluaW5nIGZpeGVkIGZ1bmN0aW9uIG1hdHJpY2VzCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYmluZENvbnN0YW50cyhDb25zdGFudHMgdmEpIHsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGJpbmRDb25zdGFudHModmEuZ2V0QWxsb2NhdGlvbigpLCAwKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY2xhc3MgSW50ZXJuYWxCdWlsZGVyIGV4dGVuZHMgQmFzZVByb2dyYW1CdWlsZGVyIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEludGVybmFsQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgICAgIHN1cGVyKHJzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBJbnRlcm5hbEJ1aWxkZXIgYWRkSW5wdXQoRWxlbWVudCBlKSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIC8vIFNob3VsZCBjaGVjayBmb3IgY29uc2lzdGFudCBhbmQgbm9uLWNvbmZsaWN0aW5nIG5hbWVzLi4uCi0gICAgICAgICAgICBpZihtSW5wdXRDb3VudCA+PSBNQVhfSU5QVVQpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk1heCBpbnB1dCBjb3VudCBleGNlZWRlZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlLmlzQ29tcGxleCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb21wbGV4IGVsZW1lbnRzIG5vdCBhbGxvd2VkLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUlucHV0c1ttSW5wdXRDb3VudCsrXSA9IGU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICogQ3JlYXRlcyBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbiBmcm9tIHRoZSBjdXJyZW50IHN0YXRlIG9mCi0gICAgICAgICAqIHRoZSBidWlsZGVyCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24gY3JlYXRlKCkgewotICAgICAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICBpbnRbXSB0bXAgPSBuZXcgaW50WyhtSW5wdXRDb3VudCArIG1PdXRwdXRDb3VudCArIG1Db25zdGFudENvdW50ICsgbVRleHR1cmVDb3VudCkgKiAyXTsKLSAgICAgICAgICAgIFN0cmluZ1tdIHRleE5hbWVzID0gbmV3IFN0cmluZ1ttVGV4dHVyZUNvdW50XTsKLSAgICAgICAgICAgIGludCBpZHggPSAwOwotCi0gICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtSW5wdXRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5JTlBVVC5tSUQ7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IG1JbnB1dHNbaV0uZ2V0SUQobVJTKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1PdXRwdXRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5PVVRQVVQubUlEOwotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBtT3V0cHV0c1tpXS5nZXRJRChtUlMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbUNvbnN0YW50Q291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uQ09OU1RBTlQubUlEOwotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBtQ29uc3RhbnRzW2ldLmdldElEKG1SUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtVGV4dHVyZUNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLlRFWFRVUkVfVFlQRS5tSUQ7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IG1UZXh0dXJlVHlwZXNbaV0ubUlEOwotICAgICAgICAgICAgICAgIHRleE5hbWVzW2ldID0gbVRleHR1cmVOYW1lc1tpXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGlkID0gbVJTLm5Qcm9ncmFtVmVydGV4Q3JlYXRlKG1TaGFkZXIsIHRleE5hbWVzLCB0bXApOwotICAgICAgICAgICAgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24gcHYgPSBuZXcgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24oaWQsIG1SUyk7Ci0gICAgICAgICAgICBpbml0UHJvZ3JhbShwdik7Ci0gICAgICAgICAgICByZXR1cm4gcHY7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBib29sZWFuIG1UZXh0dXJlTWF0cml4RW5hYmxlOwotICAgICAgICBTdHJpbmcgbVNoYWRlcjsKLSAgICAgICAgUmVuZGVyU2NyaXB0IG1SUzsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAqIENyZWF0ZXMgYSBidWlsZGVyIGZvciBmaXhlZCBmdW5jdGlvbiB2ZXJ0ZXggcHJvZ3JhbQotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgcHJvZ3JhbSB3aWxsIGJlbG9uZy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICAgICAgbVJTID0gcnM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRleHR1cmUgbWF0cml4IGNhbGN1bGF0aW9ucyBhcmUgdG8gYmUgYWRkZWQKLSAgICAgICAgICogdG8gdGhlIHNoYWRlcgotICAgICAgICAgKgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0VGV4dHVyZU1hdHJpeEVuYWJsZShib29sZWFuIGVuYWJsZSkgewotICAgICAgICAgICAgbVRleHR1cmVNYXRyaXhFbmFibGUgPSBlbmFibGU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgVHlwZSBnZXRDb25zdGFudElucHV0VHlwZShSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgICAgIEVsZW1lbnQuQnVpbGRlciBiID0gbmV3IEVsZW1lbnQuQnVpbGRlcihycyk7Ci0gICAgICAgICAgICBiLmFkZChFbGVtZW50Lk1BVFJJWDRYNChycyksICJNViIpOwotICAgICAgICAgICAgYi5hZGQoRWxlbWVudC5NQVRSSVg0WDQocnMpLCAiUCIpOwotICAgICAgICAgICAgYi5hZGQoRWxlbWVudC5NQVRSSVg0WDQocnMpLCAiVGV4TWF0cml4Iik7Ci0gICAgICAgICAgICBiLmFkZChFbGVtZW50Lk1BVFJJWDRYNChycyksICJNVlAiKTsKLQotICAgICAgICAgICAgVHlwZS5CdWlsZGVyIHR5cGVCdWlsZGVyID0gbmV3IFR5cGUuQnVpbGRlcihycywgYi5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB0eXBlQnVpbGRlci5zZXRYKDEpOwotICAgICAgICAgICAgcmV0dXJuIHR5cGVCdWlsZGVyLmNyZWF0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGJ1aWxkU2hhZGVyU3RyaW5nKCkgewotCi0gICAgICAgICAgICBtU2hhZGVyICA9ICIvL3JzX3NoYWRlcl9pbnRlcm5hbFxuIjsKLSAgICAgICAgICAgIG1TaGFkZXIgKz0gInZhcnlpbmcgdmVjNCB2YXJDb2xvcjtcbiI7Ci0gICAgICAgICAgICBtU2hhZGVyICs9ICJ2YXJ5aW5nIHZlYzIgdmFyVGV4MDtcbiI7Ci0KLSAgICAgICAgICAgIG1TaGFkZXIgKz0gInZvaWQgbWFpbigpIHtcbiI7Ci0gICAgICAgICAgICBtU2hhZGVyICs9ICIgIGdsX1Bvc2l0aW9uID0gVU5JX01WUCAqIEFUVFJJQl9wb3NpdGlvbjtcbiI7Ci0gICAgICAgICAgICBtU2hhZGVyICs9ICIgIGdsX1BvaW50U2l6ZSA9IDEuMDtcbiI7Ci0KLSAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgdmFyQ29sb3IgPSBBVFRSSUJfY29sb3I7XG4iOwotICAgICAgICAgICAgaWYgKG1UZXh0dXJlTWF0cml4RW5hYmxlKSB7Ci0gICAgICAgICAgICAgICAgbVNoYWRlciArPSAiICB2YXJUZXgwID0gKFVOSV9UZXhNYXRyaXggKiB2ZWM0KEFUVFJJQl90ZXh0dXJlMCwgMC4wLCAxLjApKS54eTtcbiI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgdmFyVGV4MCA9IEFUVFJJQl90ZXh0dXJlMDtcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtU2hhZGVyICs9ICJ9XG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKiBDcmVhdGVzIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUgb2YKLSAgICAgICAgICogdGhlIGJ1aWxkZXIKLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBGaXhlZCBmdW5jdGlvbiBlbXVsYXRpb24gUHJvZ3JhbVZlcnRleAotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uIGNyZWF0ZSgpIHsKLSAgICAgICAgICAgIGJ1aWxkU2hhZGVyU3RyaW5nKCk7Ci0KLSAgICAgICAgICAgIEludGVybmFsQnVpbGRlciBzYiA9IG5ldyBJbnRlcm5hbEJ1aWxkZXIobVJTKTsKLSAgICAgICAgICAgIHNiLnNldFNoYWRlcihtU2hhZGVyKTsKLSAgICAgICAgICAgIHNiLmFkZENvbnN0YW50KGdldENvbnN0YW50SW5wdXRUeXBlKG1SUykpOwotCi0gICAgICAgICAgICBFbGVtZW50LkJ1aWxkZXIgYiA9IG5ldyBFbGVtZW50LkJ1aWxkZXIobVJTKTsKLSAgICAgICAgICAgIGIuYWRkKEVsZW1lbnQuRjMyXzQobVJTKSwgInBvc2l0aW9uIik7Ci0gICAgICAgICAgICBiLmFkZChFbGVtZW50LkYzMl80KG1SUyksICJjb2xvciIpOwotICAgICAgICAgICAgYi5hZGQoRWxlbWVudC5GMzJfMyhtUlMpLCAibm9ybWFsIik7Ci0gICAgICAgICAgICBiLmFkZChFbGVtZW50LkYzMl8yKG1SUyksICJ0ZXh0dXJlMCIpOwotICAgICAgICAgICAgc2IuYWRkSW5wdXQoYi5jcmVhdGUoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBzYi5jcmVhdGUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqIEhlbHBlciBjbGFzcyB0byBzdG9yZSBtb2RlbHZpZXcsIHByb2plY3Rpb24gYW5kIHRleHR1cmUKLSAgICAgKiBtYXRyaWNlcyBmb3IgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29uc3RhbnRzIHsKLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBNT0RFTFZJRVdfT0ZGU0VUID0gMDsKLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBQUk9KRUNUSU9OX09GRlNFVCA9IDE2OwotICAgICAgICBzdGF0aWMgZmluYWwgaW50IFRFWFRVUkVfT0ZGU0VUID0gMzI7Ci0KLSAgICAgICAgTWF0cml4NGYgbU1vZGVsOwotICAgICAgICBNYXRyaXg0ZiBtUHJvamVjdGlvbjsKLSAgICAgICAgTWF0cml4NGYgbVRleHR1cmU7Ci0KLSAgICAgICAgQWxsb2NhdGlvbiBtQWxsb2M7Ci0gICAgICAgIEFsbG9jYXRpb24gZ2V0QWxsb2NhdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBtQWxsb2M7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpdmF0ZSBGaWVsZFBhY2tlciBtSU9CdWZmZXI7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogQ3JlYXRlcyBhIGJ1ZmZlciB0byBzdG9yZSBmaXhlZCBmdW5jdGlvbiBlbXVsYXRpb24gbWF0cmljZXMKLSAgICAgICAgKgotICAgICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmVsb25nLgotICAgICAgICAqKi8KLSAgICAgICAgcHVibGljIENvbnN0YW50cyhSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgICAgIFR5cGUgY29uc3RJbnB1dFR5cGUgPSBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5CdWlsZGVyLmdldENvbnN0YW50SW5wdXRUeXBlKHJzKTsKLSAgICAgICAgICAgIG1BbGxvYyA9IEFsbG9jYXRpb24uY3JlYXRlVHlwZWQocnMsIGNvbnN0SW5wdXRUeXBlKTsKLSAgICAgICAgICAgIGludCBidWZmZXJTaXplID0gY29uc3RJbnB1dFR5cGUuZ2V0RWxlbWVudCgpLmdldEJ5dGVzU2l6ZSgpKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdElucHV0VHlwZS5nZXRDb3VudCgpOwotICAgICAgICAgICAgbUlPQnVmZmVyID0gbmV3IEZpZWxkUGFja2VyKGJ1ZmZlclNpemUpOwotICAgICAgICAgICAgbU1vZGVsID0gbmV3IE1hdHJpeDRmKCk7Ci0gICAgICAgICAgICBtUHJvamVjdGlvbiA9IG5ldyBNYXRyaXg0ZigpOwotICAgICAgICAgICAgbVRleHR1cmUgPSBuZXcgTWF0cml4NGYoKTsKLSAgICAgICAgICAgIHNldE1vZGVsdmlldyhuZXcgTWF0cml4NGYoKSk7Ci0gICAgICAgICAgICBzZXRQcm9qZWN0aW9uKG5ldyBNYXRyaXg0ZigpKTsKLSAgICAgICAgICAgIHNldFRleHR1cmUobmV3IE1hdHJpeDRmKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICogRm9yY2VzIGRlYWxsb2NhdGlvbiBvZiBtZW1vcnkgYmFja2luZyB0aGUgY29udGFudCBtYXRyaWNlcy4KLSAgICAgICAgKiBOb3JtYWxseSwgdGhpcyBpcyB1bm5lY2Vzc2FyeSBhbmQgd2lsbCBiZSBnYXJiYWdlIGNvbGxlY3RlZAotICAgICAgICAqCi0gICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0gICAgICAgICAgICBtQWxsb2MuZGVzdHJveSgpOwotICAgICAgICAgICAgbUFsbG9jID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBhZGRUb0J1ZmZlcihpbnQgb2Zmc2V0LCBNYXRyaXg0ZiBtKSB7Ci0gICAgICAgICAgICBtSU9CdWZmZXIucmVzZXQob2Zmc2V0KTsKLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxNjsgaSArKykgewotICAgICAgICAgICAgICAgIG1JT0J1ZmZlci5hZGRGMzIobS5tTWF0W2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1BbGxvYy5zZXRGcm9tRmllbGRQYWNrZXIoMCwgbUlPQnVmZmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIFNldHMgdGhlIG1vZGVsdmlldyBtYXRyaXggaW4gdGhlIGZpeGVkIGZ1bmN0aW9uIG1hdHJpeCBidWZmZXIKLSAgICAgICAgKgotICAgICAgICAqIEBwYXJhbSBtIG1vZGVsdmlldyBtYXRyaXgKLSAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc2V0TW9kZWx2aWV3KE1hdHJpeDRmIG0pIHsKLSAgICAgICAgICAgIG1Nb2RlbC5sb2FkKG0pOwotICAgICAgICAgICAgYWRkVG9CdWZmZXIoTU9ERUxWSUVXX09GRlNFVCo0LCBtKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIFNldHMgdGhlIHByb2plY3Rpb24gbWF0cml4IGluIHRoZSBmaXhlZCBmdW5jdGlvbiBtYXRyaXggYnVmZmVyCi0gICAgICAgICoKLSAgICAgICAgKiBAcGFyYW0gbSBwcm9qZWN0aW9uIG1hdHJpeAotICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0aW9uKE1hdHJpeDRmIG0pIHsKLSAgICAgICAgICAgIG1Qcm9qZWN0aW9uLmxvYWQobSk7Ci0gICAgICAgICAgICBhZGRUb0J1ZmZlcihQUk9KRUNUSU9OX09GRlNFVCo0LCBtKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAqIFNldHMgdGhlIHRleHR1cmUgbWF0cml4IGluIHRoZSBmaXhlZCBmdW5jdGlvbiBtYXRyaXggYnVmZmVyLgotICAgICAgICAqIFRleHR1cmUgbWF0cml4IG11c3QgYmUgZW5hYmxlZCBpbiB0aGUKLSAgICAgICAgKiBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbiBidWlsZGVyIGZvciB0aGUgc2hhZGVyIHRvIHV0aWxpemUKLSAgICAgICAgKiBpdC4KLSAgICAgICAgKgotICAgICAgICAqIEBwYXJhbSBtIG1vZGVsdmlldyBtYXRyaXgKLSAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc2V0VGV4dHVyZShNYXRyaXg0ZiBtKSB7Ci0gICAgICAgICAgICBtVGV4dHVyZS5sb2FkKG0pOwotICAgICAgICAgICAgYWRkVG9CdWZmZXIoVEVYVFVSRV9PRkZTRVQqNCwgbSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JTU3VyZmFjZVZpZXcuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNTdXJmYWNlVmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDhkOTdhLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNTdXJmYWNlVmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNlbWFwaG9yZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlVmlldzsKLQotLyoqCi0gKiBAaGlkZQotICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gKiBUaGUgU3VyZmFjZSBWaWV3IGZvciBhIGdyYXBoaWNzIHJlbmRlcnNjcmlwdCAoUmVuZGVyU2NyaXB0R0wpIHRvIGRyYXcgb24uCi0gKgotICogPGRpdiBjbGFzcz0ic3BlY2lhbCByZWZlcmVuY2UiPgotICogPGgzPkRldmVsb3BlciBHdWlkZXM8L2gzPgotICogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIFJlbmRlclNjcmlwdCwgcmVhZCB0aGUKLSAqIDxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVuZGVyc2NyaXB0L2luZGV4Lmh0bWwiPlJlbmRlclNjcmlwdDwvYT4gZGV2ZWxvcGVyIGd1aWRlLjwvcD4KLSAqIDwvZGl2PgotICovCi1wdWJsaWMgY2xhc3MgUlNTdXJmYWNlVmlldyBleHRlbmRzIFN1cmZhY2VWaWV3IGltcGxlbWVudHMgU3VyZmFjZUhvbGRlci5DYWxsYmFjayB7Ci0gICAgcHJpdmF0ZSBTdXJmYWNlSG9sZGVyIG1TdXJmYWNlSG9sZGVyOwotICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOwotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogU3RhbmRhcmQgVmlldyBjb25zdHJ1Y3Rvci4gSW4gb3JkZXIgdG8gcmVuZGVyIHNvbWV0aGluZywgeW91Ci0gICAgICogbXVzdCBjYWxsIHtAbGluayBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3I3NldFJlbmRlcmVyfSB0bwotICAgICAqIHJlZ2lzdGVyIGEgcmVuZGVyZXIuCi0gICAgICovCi0gICAgcHVibGljIFJTU3VyZmFjZVZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICBpbml0KCk7Ci0gICAgICAgIC8vTG9nLnYoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJSU1N1cmZhY2VWaWV3Iik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogU3RhbmRhcmQgVmlldyBjb25zdHJ1Y3Rvci4gSW4gb3JkZXIgdG8gcmVuZGVyIHNvbWV0aGluZywgeW91Ci0gICAgICogbXVzdCBjYWxsIHtAbGluayBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3I3NldFJlbmRlcmVyfSB0bwotICAgICAqIHJlZ2lzdGVyIGEgcmVuZGVyZXIuCi0gICAgICovCi0gICAgcHVibGljIFJTU3VyZmFjZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwotICAgICAgICBpbml0KCk7Ci0gICAgICAgIC8vTG9nLnYoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJSU1N1cmZhY2VWaWV3Iik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0gICAgICAgIC8vIEluc3RhbGwgYSBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrIHNvIHdlIGdldCBub3RpZmllZCB3aGVuIHRoZQotICAgICAgICAvLyB1bmRlcmx5aW5nIHN1cmZhY2UgaXMgY3JlYXRlZCBhbmQgZGVzdHJveWVkCi0gICAgICAgIFN1cmZhY2VIb2xkZXIgaG9sZGVyID0gZ2V0SG9sZGVyKCk7Ci0gICAgICAgIGhvbGRlci5hZGRDYWxsYmFjayh0aGlzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrIGludGVyZmFjZSwgYW5kIGlzCi0gICAgICogbm90IG5vcm1hbGx5IGNhbGxlZCBvciBzdWJjbGFzc2VkIGJ5IGNsaWVudHMgb2YgUlNTdXJmYWNlVmlldy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ3JlYXRlZChTdXJmYWNlSG9sZGVyIGhvbGRlcikgewotICAgICAgICBtU3VyZmFjZUhvbGRlciA9IGhvbGRlcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrIGludGVyZmFjZSwgYW5kIGlzCi0gICAgICogbm90IG5vcm1hbGx5IGNhbGxlZCBvciBzdWJjbGFzc2VkIGJ5IGNsaWVudHMgb2YgUlNTdXJmYWNlVmlldy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdXJmYWNlRGVzdHJveWVkKFN1cmZhY2VIb2xkZXIgaG9sZGVyKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgLy8gU3VyZmFjZSB3aWxsIGJlIGRlc3Ryb3llZCB3aGVuIHdlIHJldHVybgotICAgICAgICAgICAgaWYgKG1SUyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVJTLnNldFN1cmZhY2UobnVsbCwgMCwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrIGludGVyZmFjZSwgYW5kIGlzCi0gICAgICogbm90IG5vcm1hbGx5IGNhbGxlZCBvciBzdWJjbGFzc2VkIGJ5IGNsaWVudHMgb2YgUlNTdXJmYWNlVmlldy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChTdXJmYWNlSG9sZGVyIGhvbGRlciwgaW50IGZvcm1hdCwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgaWYgKG1SUyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVJTLnNldFN1cmZhY2UoaG9sZGVyLCB3LCBoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogSW5mb3JtIHRoZSB2aWV3IHRoYXQgdGhlIGFjdGl2aXR5IGlzIHBhdXNlZC4gVGhlIG93bmVyIG9mIHRoaXMgdmlldyBtdXN0Ci0gICAgICogY2FsbCB0aGlzIG1ldGhvZCB3aGVuIHRoZSBhY3Rpdml0eSBpcyBwYXVzZWQuIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbAotICAgICAqIHBhdXNlIHRoZSByZW5kZXJpbmcgdGhyZWFkLgotICAgICAqIE11c3Qgbm90IGJlIGNhbGxlZCBiZWZvcmUgYSByZW5kZXJlciBoYXMgYmVlbiBzZXQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcGF1c2UoKSB7Ci0gICAgICAgIGlmKG1SUyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUlMucGF1c2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqIEluZm9ybSB0aGUgdmlldyB0aGF0IHRoZSBhY3Rpdml0eSBpcyByZXN1bWVkLiBUaGUgb3duZXIgb2YgdGhpcyB2aWV3IG11c3QKLSAgICAgKiBjYWxsIHRoaXMgbWV0aG9kIHdoZW4gdGhlIGFjdGl2aXR5IGlzIHJlc3VtZWQuIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbAotICAgICAqIHJlY3JlYXRlIHRoZSBPcGVuR0wgZGlzcGxheSBhbmQgcmVzdW1lIHRoZSByZW5kZXJpbmcKLSAgICAgKiB0aHJlYWQuCi0gICAgICogTXVzdCBub3QgYmUgY2FsbGVkIGJlZm9yZSBhIHJlbmRlcmVyIGhhcyBiZWVuIHNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZXN1bWUoKSB7Ci0gICAgICAgIGlmKG1SUyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUlMucmVzdW1lKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiovCi0gICAgcHVibGljIFJlbmRlclNjcmlwdEdMIGNyZWF0ZVJlbmRlclNjcmlwdEdMKFJlbmRlclNjcmlwdEdMLlN1cmZhY2VDb25maWcgc2MpIHsKLSAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gbmV3IFJlbmRlclNjcmlwdEdMKHRoaXMuZ2V0Q29udGV4dCgpLCBzYyk7Ci0gICAgICAgIHNldFJlbmRlclNjcmlwdEdMKHJzKTsKLSAgICAgICAgcmV0dXJuIHJzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqKi8KLSAgICBwdWJsaWMgdm9pZCBkZXN0cm95UmVuZGVyU2NyaXB0R0woKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgbVJTLmRlc3Ryb3koKTsKLSAgICAgICAgICAgIG1SUyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiovCi0gICAgcHVibGljIHZvaWQgc2V0UmVuZGVyU2NyaXB0R0woUmVuZGVyU2NyaXB0R0wgcnMpIHsKLSAgICAgICAgbVJTID0gcnM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICoqLwotICAgIHB1YmxpYyBSZW5kZXJTY3JpcHRHTCBnZXRSZW5kZXJTY3JpcHRHTCgpIHsKLSAgICAgICAgcmV0dXJuIG1SUzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JTVGV4dHVyZVZpZXcuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNUZXh0dXJlVmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWVlZWFlLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNUZXh0dXJlVmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TZW1hcGhvcmU7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5UZXh0dXJlVmlldzsKLQotLyoqCi0gKiBAaGlkZQotICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gKiBUaGUgVGV4dHVyZSBWaWV3IGZvciBhIGdyYXBoaWNzIHJlbmRlcnNjcmlwdCAoUmVuZGVyU2NyaXB0R0wpCi0gKiB0byBkcmF3IG9uLgotICoKLSAqLwotcHVibGljIGNsYXNzIFJTVGV4dHVyZVZpZXcgZXh0ZW5kcyBUZXh0dXJlVmlldyBpbXBsZW1lbnRzIFRleHR1cmVWaWV3LlN1cmZhY2VUZXh0dXJlTGlzdGVuZXIgewotICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOwotICAgIHByaXZhdGUgU3VyZmFjZVRleHR1cmUgbVN1cmZhY2VUZXh0dXJlOwotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogU3RhbmRhcmQgVmlldyBjb25zdHJ1Y3Rvci4gSW4gb3JkZXIgdG8gcmVuZGVyIHNvbWV0aGluZywgeW91Ci0gICAgICogbXVzdCBjYWxsIHtAbGluayBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3I3NldFJlbmRlcmVyfSB0bwotICAgICAqIHJlZ2lzdGVyIGEgcmVuZGVyZXIuCi0gICAgICovCi0gICAgcHVibGljIFJTVGV4dHVyZVZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICBpbml0KCk7Ci0gICAgICAgIC8vTG9nLnYoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJSU1N1cmZhY2VWaWV3Iik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogU3RhbmRhcmQgVmlldyBjb25zdHJ1Y3Rvci4gSW4gb3JkZXIgdG8gcmVuZGVyIHNvbWV0aGluZywgeW91Ci0gICAgICogbXVzdCBjYWxsIHtAbGluayBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3I3NldFJlbmRlcmVyfSB0bwotICAgICAqIHJlZ2lzdGVyIGEgcmVuZGVyZXIuCi0gICAgICovCi0gICAgcHVibGljIFJTVGV4dHVyZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwotICAgICAgICBpbml0KCk7Ci0gICAgICAgIC8vTG9nLnYoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJSU1N1cmZhY2VWaWV3Iik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0gICAgICAgIHNldFN1cmZhY2VUZXh0dXJlTGlzdGVuZXIodGhpcyk7Ci0gICAgICAgIC8vYW5kcm9pZC51dGlsLkxvZy5lKCJycyIsICJnZXRTdXJmYWNlVGV4dHVyZUxpc3Rlcm5lciAiICsgZ2V0U3VyZmFjZVRleHR1cmVMaXN0ZW5lcigpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VUZXh0dXJlQXZhaWxhYmxlKFN1cmZhY2VUZXh0dXJlIHN1cmZhY2UsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICAvL0xvZy5lKFJlbmRlclNjcmlwdC5MT0dfVEFHLCAib25TdXJmYWNlVGV4dHVyZUF2YWlsYWJsZSIpOwotICAgICAgICBtU3VyZmFjZVRleHR1cmUgPSBzdXJmYWNlOwotCi0gICAgICAgIGlmIChtUlMgIT0gbnVsbCkgewotICAgICAgICAgICAgbVJTLnNldFN1cmZhY2VUZXh0dXJlKG1TdXJmYWNlVGV4dHVyZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VUZXh0dXJlU2l6ZUNoYW5nZWQoU3VyZmFjZVRleHR1cmUgc3VyZmFjZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICAgIC8vTG9nLmUoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJvblN1cmZhY2VUZXh0dXJlU2l6ZUNoYW5nZWQiKTsKLSAgICAgICAgbVN1cmZhY2VUZXh0dXJlID0gc3VyZmFjZTsKLQotICAgICAgICBpZiAobVJTICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1SUy5zZXRTdXJmYWNlVGV4dHVyZShtU3VyZmFjZVRleHR1cmUsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gb25TdXJmYWNlVGV4dHVyZURlc3Ryb3llZChTdXJmYWNlVGV4dHVyZSBzdXJmYWNlKSB7Ci0gICAgICAgIC8vTG9nLmUoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJvblN1cmZhY2VUZXh0dXJlRGVzdHJveWVkIik7Ci0gICAgICAgIG1TdXJmYWNlVGV4dHVyZSA9IHN1cmZhY2U7Ci0KLSAgICAgICAgaWYgKG1SUyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUlMuc2V0U3VyZmFjZVRleHR1cmUobnVsbCwgMCwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VUZXh0dXJlVXBkYXRlZChTdXJmYWNlVGV4dHVyZSBzdXJmYWNlKSB7Ci0gICAgICAgIC8vTG9nLmUoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJvblN1cmZhY2VUZXh0dXJlVXBkYXRlZCIpOwotICAgICAgICBtU3VyZmFjZVRleHR1cmUgPSBzdXJmYWNlOwotICAgIH0KLQotICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogSW5mb3JtIHRoZSB2aWV3IHRoYXQgdGhlIGFjdGl2aXR5IGlzIHBhdXNlZC4gVGhlIG93bmVyIG9mIHRoaXMgdmlldyBtdXN0Ci0gICAgICogY2FsbCB0aGlzIG1ldGhvZCB3aGVuIHRoZSBhY3Rpdml0eSBpcyBwYXVzZWQuIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbAotICAgICAqIHBhdXNlIHRoZSByZW5kZXJpbmcgdGhyZWFkLgotICAgICAqIE11c3Qgbm90IGJlIGNhbGxlZCBiZWZvcmUgYSByZW5kZXJlciBoYXMgYmVlbiBzZXQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcGF1c2UoKSB7Ci0gICAgICAgIGlmKG1SUyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUlMucGF1c2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqIEluZm9ybSB0aGUgdmlldyB0aGF0IHRoZSBhY3Rpdml0eSBpcyByZXN1bWVkLiBUaGUgb3duZXIgb2YgdGhpcyB2aWV3IG11c3QKLSAgICAgKiBjYWxsIHRoaXMgbWV0aG9kIHdoZW4gdGhlIGFjdGl2aXR5IGlzIHJlc3VtZWQuIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbAotICAgICAqIHJlY3JlYXRlIHRoZSBPcGVuR0wgZGlzcGxheSBhbmQgcmVzdW1lIHRoZSByZW5kZXJpbmcKLSAgICAgKiB0aHJlYWQuCi0gICAgICogTXVzdCBub3QgYmUgY2FsbGVkIGJlZm9yZSBhIHJlbmRlcmVyIGhhcyBiZWVuIHNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZXN1bWUoKSB7Ci0gICAgICAgIGlmKG1SUyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUlMucmVzdW1lKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBDcmVhdGUgYSBuZXcgUmVuZGVyU2NyaXB0R0wgb2JqZWN0IGFuZCBhdHRhY2ggaXQgdG8gdGhlCi0gICAgICogVGV4dHVyZVZpZXcgaWYgcHJlc2VudC4KLSAgICAgKgotICAgICAqCi0gICAgICogQHBhcmFtIHNjIFRoZSBSUyBzdXJmYWNlIGNvbmZpZyB0byBjcmVhdGUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFJlbmRlclNjcmlwdEdMIFRoZSBuZXcgb2JqZWN0IGNyZWF0ZWQuCi0gICAgICovCi0gICAgcHVibGljIFJlbmRlclNjcmlwdEdMIGNyZWF0ZVJlbmRlclNjcmlwdEdMKFJlbmRlclNjcmlwdEdMLlN1cmZhY2VDb25maWcgc2MpIHsKLSAgICAgICAgUmVuZGVyU2NyaXB0R0wgcnMgPSBuZXcgUmVuZGVyU2NyaXB0R0wodGhpcy5nZXRDb250ZXh0KCksIHNjKTsKLSAgICAgICAgc2V0UmVuZGVyU2NyaXB0R0wocnMpOwotICAgICAgICBpZiAobVN1cmZhY2VUZXh0dXJlICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1SUy5zZXRTdXJmYWNlVGV4dHVyZShtU3VyZmFjZVRleHR1cmUsIGdldFdpZHRoKCksIGdldEhlaWdodCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogRGVzdHJveSB0aGUgUmVuZGVyU2NyaXB0R0wgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICogVGV4dHVyZVZpZXcuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGVzdHJveVJlbmRlclNjcmlwdEdMKCkgewotICAgICAgICBtUlMuZGVzdHJveSgpOwotICAgICAgICBtUlMgPSBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqIFNldCBhIG5ldyBSZW5kZXJTY3JpcHRHTCBvYmplY3QuICBUaGlzIGFsc28gd2lsbCBhdHRhY2ggdGhlCi0gICAgICogbmV3IG9iamVjdCB0byB0aGUgVGV4dHVyZVZpZXcgaWYgcHJlc2VudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBUaGUgbmV3IFJTIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRSZW5kZXJTY3JpcHRHTChSZW5kZXJTY3JpcHRHTCBycykgewotICAgICAgICBtUlMgPSByczsKLSAgICAgICAgaWYgKG1TdXJmYWNlVGV4dHVyZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUlMuc2V0U3VyZmFjZVRleHR1cmUobVN1cmZhY2VUZXh0dXJlLCBnZXRXaWR0aCgpLCBnZXRIZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBSZXR1cm5zIHRoZSBwcmV2aW91c2x5IHNldCBSZW5kZXJTY3JpcHRHTCBvYmplY3QuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFJlbmRlclNjcmlwdEdMCi0gICAgICovCi0gICAgcHVibGljIFJlbmRlclNjcmlwdEdMIGdldFJlbmRlclNjcmlwdEdMKCkgewotICAgICAgICByZXR1cm4gbVJTOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNGE1YzQuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5UcmFjZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGFjY2VzcyB0byBhIFJlbmRlclNjcmlwdCBjb250ZXh0LCB3aGljaCBjb250cm9scyBSZW5kZXJTY3JpcHQKLSAqIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgdGVhcmRvd24uIEFuIGluc3RhbmNlIG9mIHRoZSBSZW5kZXJTY3JpcHQKLSAqIGNsYXNzIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUgYW55IG90aGVyIFJTIG9iamVjdHMgY2FuIGJlIGNyZWF0ZWQuCi0gKgotICogPGRpdiBjbGFzcz0ic3BlY2lhbCByZWZlcmVuY2UiPgotICogPGgzPkRldmVsb3BlciBHdWlkZXM8L2gzPgotICogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIFJlbmRlclNjcmlwdCwgcmVhZCB0aGUKLSAqIDxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVuZGVyc2NyaXB0L2luZGV4Lmh0bWwiPlJlbmRlclNjcmlwdDwvYT4gZGV2ZWxvcGVyIGd1aWRlLjwvcD4KLSAqIDwvZGl2PgotICoqLwotcHVibGljIGNsYXNzIFJlbmRlclNjcmlwdCB7Ci0gICAgc3RhdGljIGZpbmFsIGxvbmcgVFJBQ0VfVEFHID0gVHJhY2UuVFJBQ0VfVEFHX1JTOwotCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBMT0dfVEFHID0gIlJlbmRlclNjcmlwdF9qbmkiOwotICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHICA9IGZhbHNlOwotICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsiVW51c2VkRGVjbGFyYXRpb24iLCAiZGVwcmVjYXRpb24ifSkKLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBMT0dfRU5BQkxFRCA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBDb250ZXh0IG1BcHBsaWNhdGlvbkNvbnRleHQ7Ci0KLSAgICAvKgotICAgICAqIFdlIHVzZSBhIGNsYXNzIGluaXRpYWxpemVyIHRvIGFsbG93IHRoZSBuYXRpdmUgY29kZSB0byBjYWNoZSBzb21lCi0gICAgICogZmllbGQgb2Zmc2V0cy4KLSAgICAgKi8KLSAgICBAU3VwcHJlc3NXYXJuaW5ncyh7IkZpZWxkQ2FuQmVMb2NhbCIsICJVbnVzZWREZWNsYXJhdGlvbiJ9KSAvLyBUT0RPOiBub3cgdXNlZCBsb2NhbGx5OyByZW1vdmU/Ci0gICAgc3RhdGljIGJvb2xlYW4gc0luaXRpYWxpemVkOwotICAgIG5hdGl2ZSBzdGF0aWMgdm9pZCBfbkluaXQoKTsKLQotICAgIHN0YXRpYyBPYmplY3Qgc1J1bnRpbWU7Ci0gICAgc3RhdGljIE1ldGhvZCByZWdpc3Rlck5hdGl2ZUFsbG9jYXRpb247Ci0gICAgc3RhdGljIE1ldGhvZCByZWdpc3Rlck5hdGl2ZUZyZWU7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICBzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFTeXN0ZW1Qcm9wZXJ0aWVzLmdldEJvb2xlYW4oImNvbmZpZy5kaXNhYmxlX3JlbmRlcnNjcmlwdCIsIGZhbHNlKSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBDbGFzczw/PiB2bV9ydW50aW1lID0gQ2xhc3MuZm9yTmFtZSgiZGFsdmlrLnN5c3RlbS5WTVJ1bnRpbWUiKTsKLSAgICAgICAgICAgICAgICBNZXRob2QgZ2V0X3J1bnRpbWUgPSB2bV9ydW50aW1lLmdldERlY2xhcmVkTWV0aG9kKCJnZXRSdW50aW1lIik7Ci0gICAgICAgICAgICAgICAgc1J1bnRpbWUgPSBnZXRfcnVudGltZS5pbnZva2UobnVsbCk7Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJOYXRpdmVBbGxvY2F0aW9uID0gdm1fcnVudGltZS5nZXREZWNsYXJlZE1ldGhvZCgicmVnaXN0ZXJOYXRpdmVBbGxvY2F0aW9uIiwgSW50ZWdlci5UWVBFKTsKLSAgICAgICAgICAgICAgICByZWdpc3Rlck5hdGl2ZUZyZWUgPSB2bV9ydW50aW1lLmdldERlY2xhcmVkTWV0aG9kKCJyZWdpc3Rlck5hdGl2ZUZyZWUiLCBJbnRlZ2VyLlRZUEUpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiRXJyb3IgbG9hZGluZyBHQyBtZXRob2RzOiAiICsgZSk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiRXJyb3IgbG9hZGluZyBHQyBtZXRob2RzOiAiICsgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5sb2FkTGlicmFyeSgicnNfam5pIik7Ci0gICAgICAgICAgICAgICAgX25Jbml0KCk7Ci0gICAgICAgICAgICAgICAgc0luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFVuc2F0aXNmaWVkTGlua0Vycm9yIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiRXJyb3IgbG9hZGluZyBSUyBqbmkgbGlicmFyeTogIiArIGUpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIkVycm9yIGxvYWRpbmcgUlMgam5pIGxpYnJhcnk6ICIgKyBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vbi10aHJlYWRzYWZlIGZ1bmN0aW9ucy4KLSAgICBuYXRpdmUgaW50ICBuRGV2aWNlQ3JlYXRlKCk7Ci0gICAgbmF0aXZlIHZvaWQgbkRldmljZURlc3Ryb3koaW50IGRldik7Ci0gICAgbmF0aXZlIHZvaWQgbkRldmljZVNldENvbmZpZyhpbnQgZGV2LCBpbnQgcGFyYW0sIGludCB2YWx1ZSk7Ci0gICAgbmF0aXZlIGludCBuQ29udGV4dEdldFVzZXJNZXNzYWdlKGludCBjb24sIGludFtdIGRhdGEpOwotICAgIG5hdGl2ZSBTdHJpbmcgbkNvbnRleHRHZXRFcnJvck1lc3NhZ2UoaW50IGNvbik7Ci0gICAgbmF0aXZlIGludCAgbkNvbnRleHRQZWVrTWVzc2FnZShpbnQgY29uLCBpbnRbXSBzdWJJRCk7Ci0gICAgbmF0aXZlIHZvaWQgbkNvbnRleHRJbml0VG9DbGllbnQoaW50IGNvbik7Ci0gICAgbmF0aXZlIHZvaWQgbkNvbnRleHREZWluaXRUb0NsaWVudChpbnQgY29uKTsKLQotICAgIHN0YXRpYyBGaWxlIG1DYWNoZURpcjsKLQotICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBkaXJlY3RvcnkgdG8gdXNlIGFzIGEgcGVyc2lzdGVudCBzdG9yYWdlIGZvciB0aGUKLSAgICAgKiByZW5kZXJzY3JpcHQgb2JqZWN0IGZpbGUgY2FjaGUuCi0gICAgICoKLSAgICAgKiBAaGlkZQotICAgICAqIEBwYXJhbSBjYWNoZURpciBBIGRpcmVjdG9yeSB0aGUgY3VycmVudCBwcm9jZXNzIGNhbiB3cml0ZSB0bwotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXR1cERpc2tDYWNoZShGaWxlIGNhY2hlRGlyKSB7Ci0gICAgICAgIGlmICghc0luaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiUmVuZGVyU2NyaXB0LnNldHVwRGlza0NhY2hlKCkgY2FsbGVkIHdoZW4gZGlzYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERlZmVyIGNyZWF0aW9uIG9mIGNhY2hlIHBhdGggdG8gblNjcmlwdENDcmVhdGUoKS4KLSAgICAgICAgbUNhY2hlRGlyID0gY2FjaGVEaXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29udGV4dFR5cGUgc3BlY2lmaWVzIHRoZSBzcGVjaWZpYyB0eXBlIG9mIGNvbnRleHQgdG8gYmUgY3JlYXRlZC4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBlbnVtIENvbnRleHRUeXBlIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIE5PUk1BTCBjb250ZXh0LCB0aGlzIGlzIHRoZSBkZWZhdWx0IGFuZCB3aGF0IHNoaXBwaW5nIGFwcHMgc2hvdWxkCi0gICAgICAgICAqIHVzZS4KLSAgICAgICAgICovCi0gICAgICAgIE5PUk1BTCAoMCksCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIERFQlVHIGNvbnRleHQsIHBlcmZvcm0gZXh0cmEgcnVudGltZSBjaGVja3MgdG8gdmFsaWRhdGUgdGhlCi0gICAgICAgICAqIGtlcm5lbHMgYW5kIEFQSXMgYXJlIGJlaW5nIHVzZWQgYXMgaW50ZW5kZWQuICBHZXQgYW5kIFNldEVsZW1lbnRBdAotICAgICAgICAgKiB3aWxsIGJlIGJvdW5kcyBjaGVja2VkIGluIHRoaXMgbW9kZS4KLSAgICAgICAgICovCi0gICAgICAgIERFQlVHICgxKSwKLQotICAgICAgICAvKioKLSAgICAgICAgICogUFJPRklMRSBjb250ZXh0LCBJbnRlbmRlZCB0byBiZSB1c2VkIG9uY2UgdGhlIGZpcnN0IHRpbWUgYW4KLSAgICAgICAgICogYXBwbGljYXRpb24gaXMgcnVuIG9uIGEgbmV3IGRldmljZS4gIFRoaXMgbW9kZSBhbGxvd3MgdGhlIHJ1bnRpbWUgdG8KLSAgICAgICAgICogZG8gYWRkaXRpb25hbCB0ZXN0aW5nIGFuZCBwZXJmb3JtYW5jZSB0dW5pbmcuCi0gICAgICAgICAqLwotICAgICAgICBQUk9GSUxFICgyKTsKLQotICAgICAgICBpbnQgbUlEOwotICAgICAgICBDb250ZXh0VHlwZShpbnQgaWQpIHsKLSAgICAgICAgICAgIG1JRCA9IGlkOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ29udGV4dFR5cGUgbUNvbnRleHRUeXBlOwotCi0gICAgLy8gTWV0aG9kcyBiZWxvdyBhcmUgd3JhcHBlZCB0byBwcm90ZWN0IHRoZSBub24tdGhyZWFkc2FmZQotICAgIC8vIGxvY2tsZXNzIGZpZm8uCi0gICAgbmF0aXZlIGludCAgcnNuQ29udGV4dENyZWF0ZUdMKGludCBkZXYsIGludCB2ZXIsIGludCBzZGtWZXIsCi0gICAgICAgICAgICAgICAgIGludCBjb2xvck1pbiwgaW50IGNvbG9yUHJlZiwKLSAgICAgICAgICAgICAgICAgaW50IGFscGhhTWluLCBpbnQgYWxwaGFQcmVmLAotICAgICAgICAgICAgICAgICBpbnQgZGVwdGhNaW4sIGludCBkZXB0aFByZWYsCi0gICAgICAgICAgICAgICAgIGludCBzdGVuY2lsTWluLCBpbnQgc3RlbmNpbFByZWYsCi0gICAgICAgICAgICAgICAgIGludCBzYW1wbGVzTWluLCBpbnQgc2FtcGxlc1ByZWYsIGZsb2F0IHNhbXBsZXNRLCBpbnQgZHBpKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5Db250ZXh0Q3JlYXRlR0woaW50IGRldiwgaW50IHZlciwgaW50IHNka1ZlciwKLSAgICAgICAgICAgICAgICAgaW50IGNvbG9yTWluLCBpbnQgY29sb3JQcmVmLAotICAgICAgICAgICAgICAgICBpbnQgYWxwaGFNaW4sIGludCBhbHBoYVByZWYsCi0gICAgICAgICAgICAgICAgIGludCBkZXB0aE1pbiwgaW50IGRlcHRoUHJlZiwKLSAgICAgICAgICAgICAgICAgaW50IHN0ZW5jaWxNaW4sIGludCBzdGVuY2lsUHJlZiwKLSAgICAgICAgICAgICAgICAgaW50IHNhbXBsZXNNaW4sIGludCBzYW1wbGVzUHJlZiwgZmxvYXQgc2FtcGxlc1EsIGludCBkcGkpIHsKLSAgICAgICAgcmV0dXJuIHJzbkNvbnRleHRDcmVhdGVHTChkZXYsIHZlciwgc2RrVmVyLCBjb2xvck1pbiwgY29sb3JQcmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhTWluLCBhbHBoYVByZWYsIGRlcHRoTWluLCBkZXB0aFByZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlbmNpbE1pbiwgc3RlbmNpbFByZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlc01pbiwgc2FtcGxlc1ByZWYsIHNhbXBsZXNRLCBkcGkpOwotICAgIH0KLSAgICBuYXRpdmUgaW50ICByc25Db250ZXh0Q3JlYXRlKGludCBkZXYsIGludCB2ZXIsIGludCBzZGtWZXIsIGludCBjb250ZXh0VHlwZSk7Ci0gICAgc3luY2hyb25pemVkIGludCBuQ29udGV4dENyZWF0ZShpbnQgZGV2LCBpbnQgdmVyLCBpbnQgc2RrVmVyLCBpbnQgY29udGV4dFR5cGUpIHsKLSAgICAgICAgcmV0dXJuIHJzbkNvbnRleHRDcmVhdGUoZGV2LCB2ZXIsIHNka1ZlciwgY29udGV4dFR5cGUpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0RGVzdHJveShpbnQgY29uKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dERlc3Ryb3koKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkNvbnRleHREZXN0cm95KG1Db250ZXh0KTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dFNldFN1cmZhY2UoaW50IGNvbiwgaW50IHcsIGludCBoLCBTdXJmYWNlIHN1cik7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRTZXRTdXJmYWNlKGludCB3LCBpbnQgaCwgU3VyZmFjZSBzdXIpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQ29udGV4dFNldFN1cmZhY2UobUNvbnRleHQsIHcsIGgsIHN1cik7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRTZXRTdXJmYWNlVGV4dHVyZShpbnQgY29uLCBpbnQgdywgaW50IGgsIFN1cmZhY2VUZXh0dXJlIHN1cik7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRTZXRTdXJmYWNlVGV4dHVyZShpbnQgdywgaW50IGgsIFN1cmZhY2VUZXh0dXJlIHN1cikgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25Db250ZXh0U2V0U3VyZmFjZVRleHR1cmUobUNvbnRleHQsIHcsIGgsIHN1cik7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRTZXRQcmlvcml0eShpbnQgY29uLCBpbnQgcCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRTZXRQcmlvcml0eShpbnQgcCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25Db250ZXh0U2V0UHJpb3JpdHkobUNvbnRleHQsIHApOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0RHVtcChpbnQgY29uLCBpbnQgYml0cyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHREdW1wKGludCBiaXRzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkNvbnRleHREdW1wKG1Db250ZXh0LCBiaXRzKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dEZpbmlzaChpbnQgY29uKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dEZpbmlzaCgpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQ29udGV4dEZpbmlzaChtQ29udGV4dCk7Ci0gICAgfQotCi0gICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dFNlbmRNZXNzYWdlKGludCBjb24sIGludCBpZCwgaW50W10gZGF0YSk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRTZW5kTWVzc2FnZShpbnQgaWQsIGludFtdIGRhdGEpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQ29udGV4dFNlbmRNZXNzYWdlKG1Db250ZXh0LCBpZCwgZGF0YSk7Ci0gICAgfQotCi0gICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dEJpbmRSb290U2NyaXB0KGludCBjb24sIGludCBzY3JpcHQpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0QmluZFJvb3RTY3JpcHQoaW50IHNjcmlwdCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25Db250ZXh0QmluZFJvb3RTY3JpcHQobUNvbnRleHQsIHNjcmlwdCk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRCaW5kU2FtcGxlcihpbnQgY29uLCBpbnQgc2FtcGxlciwgaW50IHNsb3QpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0QmluZFNhbXBsZXIoaW50IHNhbXBsZXIsIGludCBzbG90KSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkNvbnRleHRCaW5kU2FtcGxlcihtQ29udGV4dCwgc2FtcGxlciwgc2xvdCk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlKGludCBjb24sIGludCBwZnMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0QmluZFByb2dyYW1TdG9yZShpbnQgcGZzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlKG1Db250ZXh0LCBwZnMpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0QmluZFByb2dyYW1GcmFnbWVudChpbnQgY29uLCBpbnQgcGYpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0QmluZFByb2dyYW1GcmFnbWVudChpbnQgcGYpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQ29udGV4dEJpbmRQcm9ncmFtRnJhZ21lbnQobUNvbnRleHQsIHBmKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dEJpbmRQcm9ncmFtVmVydGV4KGludCBjb24sIGludCBwdik7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleChpbnQgcHYpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQ29udGV4dEJpbmRQcm9ncmFtVmVydGV4KG1Db250ZXh0LCBwdik7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRCaW5kUHJvZ3JhbVJhc3RlcihpbnQgY29uLCBpbnQgcHIpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIoaW50IHByKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkNvbnRleHRCaW5kUHJvZ3JhbVJhc3RlcihtQ29udGV4dCwgcHIpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0UGF1c2UoaW50IGNvbik7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRQYXVzZSgpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQ29udGV4dFBhdXNlKG1Db250ZXh0KTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dFJlc3VtZShpbnQgY29uKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dFJlc3VtZSgpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQ29udGV4dFJlc3VtZShtQ29udGV4dCk7Ci0gICAgfQotCi0gICAgbmF0aXZlIHZvaWQgcnNuQXNzaWduTmFtZShpbnQgY29uLCBpbnQgb2JqLCBieXRlW10gbmFtZSk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFzc2lnbk5hbWUoaW50IG9iaiwgYnl0ZVtdIG5hbWUpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQXNzaWduTmFtZShtQ29udGV4dCwgb2JqLCBuYW1lKTsKLSAgICB9Ci0gICAgbmF0aXZlIFN0cmluZyByc25HZXROYW1lKGludCBjb24sIGludCBvYmopOwotICAgIHN5bmNocm9uaXplZCBTdHJpbmcgbkdldE5hbWUoaW50IG9iaikgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuR2V0TmFtZShtQ29udGV4dCwgb2JqKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuT2JqRGVzdHJveShpbnQgY29uLCBpbnQgaWQpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5PYmpEZXN0cm95KGludCBpZCkgewotICAgICAgICAvLyBUaGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIGhlcmUuICBUaGUgY2FsbGluZyBjb2RlIG1heSBiZSBydW4KLSAgICAgICAgLy8gYnkgdGhlIGdjIHdoaWxlIHRlYXJkb3duIGlzIG9jY3VyaW5nLiAgVGhpcyBwcm90ZWN0cyBhZ2FpbnRzCi0gICAgICAgIC8vIGRlbGV0aW5nIGRlYWQgb2JqZWN0cy4KLSAgICAgICAgaWYgKG1Db250ZXh0ICE9IDApIHsKLSAgICAgICAgICAgIHJzbk9iakRlc3Ryb3kobUNvbnRleHQsIGlkKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG5hdGl2ZSBpbnQgIHJzbkVsZW1lbnRDcmVhdGUoaW50IGNvbiwgaW50IHR5cGUsIGludCBraW5kLCBib29sZWFuIG5vcm0sIGludCB2ZWNTaXplKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5FbGVtZW50Q3JlYXRlKGludCB0eXBlLCBpbnQga2luZCwgYm9vbGVhbiBub3JtLCBpbnQgdmVjU2l6ZSkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuRWxlbWVudENyZWF0ZShtQ29udGV4dCwgdHlwZSwga2luZCwgbm9ybSwgdmVjU2l6ZSk7Ci0gICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzbkVsZW1lbnRDcmVhdGUyKGludCBjb24sIGludFtdIGVsZW1lbnRzLCBTdHJpbmdbXSBuYW1lcywgaW50W10gYXJyYXlTaXplcyk7Ci0gICAgc3luY2hyb25pemVkIGludCBuRWxlbWVudENyZWF0ZTIoaW50W10gZWxlbWVudHMsIFN0cmluZ1tdIG5hbWVzLCBpbnRbXSBhcnJheVNpemVzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25FbGVtZW50Q3JlYXRlMihtQ29udGV4dCwgZWxlbWVudHMsIG5hbWVzLCBhcnJheVNpemVzKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuRWxlbWVudEdldE5hdGl2ZURhdGEoaW50IGNvbiwgaW50IGlkLCBpbnRbXSBlbGVtZW50RGF0YSk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkVsZW1lbnRHZXROYXRpdmVEYXRhKGludCBpZCwgaW50W10gZWxlbWVudERhdGEpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuRWxlbWVudEdldE5hdGl2ZURhdGEobUNvbnRleHQsIGlkLCBlbGVtZW50RGF0YSk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkVsZW1lbnRHZXRTdWJFbGVtZW50cyhpbnQgY29uLCBpbnQgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIElEcywgU3RyaW5nW10gbmFtZXMsIGludFtdIGFycmF5U2l6ZXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5FbGVtZW50R2V0U3ViRWxlbWVudHMoaW50IGlkLCBpbnRbXSBJRHMsIFN0cmluZ1tdIG5hbWVzLCBpbnRbXSBhcnJheVNpemVzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkVsZW1lbnRHZXRTdWJFbGVtZW50cyhtQ29udGV4dCwgaWQsIElEcywgbmFtZXMsIGFycmF5U2l6ZXMpOwotICAgIH0KLQotICAgIG5hdGl2ZSBpbnQgcnNuVHlwZUNyZWF0ZShpbnQgY29uLCBpbnQgZWlkLCBpbnQgeCwgaW50IHksIGludCB6LCBib29sZWFuIG1pcHMsIGJvb2xlYW4gZmFjZXMsIGludCB5dXYpOwotICAgIHN5bmNocm9uaXplZCBpbnQgblR5cGVDcmVhdGUoaW50IGVpZCwgaW50IHgsIGludCB5LCBpbnQgeiwgYm9vbGVhbiBtaXBzLCBib29sZWFuIGZhY2VzLCBpbnQgeXV2KSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25UeXBlQ3JlYXRlKG1Db250ZXh0LCBlaWQsIHgsIHksIHosIG1pcHMsIGZhY2VzLCB5dXYpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25UeXBlR2V0TmF0aXZlRGF0YShpbnQgY29uLCBpbnQgaWQsIGludFtdIHR5cGVEYXRhKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuVHlwZUdldE5hdGl2ZURhdGEoaW50IGlkLCBpbnRbXSB0eXBlRGF0YSkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25UeXBlR2V0TmF0aXZlRGF0YShtQ29udGV4dCwgaWQsIHR5cGVEYXRhKTsKLSAgICB9Ci0KLSAgICBuYXRpdmUgaW50ICByc25BbGxvY2F0aW9uQ3JlYXRlVHlwZWQoaW50IGNvbiwgaW50IHR5cGUsIGludCBtaXAsIGludCB1c2FnZSwgaW50IHBvaW50ZXIpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbkFsbG9jYXRpb25DcmVhdGVUeXBlZChpbnQgdHlwZSwgaW50IG1pcCwgaW50IHVzYWdlLCBpbnQgcG9pbnRlcikgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkNyZWF0ZVR5cGVkKG1Db250ZXh0LCB0eXBlLCBtaXAsIHVzYWdlLCBwb2ludGVyKTsKLSAgICB9Ci0gICAgbmF0aXZlIGludCAgcnNuQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAoaW50IGNvbiwgaW50IHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSk7Ci0gICAgc3luY2hyb25pemVkIGludCBuQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAoaW50IHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAobUNvbnRleHQsIHR5cGUsIG1pcCwgYm1wLCB1c2FnZSk7Ci0gICAgfQotCi0gICAgbmF0aXZlIGludCAgcnNuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24oaW50IGNvbiwgaW50IHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSk7Ci0gICAgc3luY2hyb25pemVkIGludCBuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24oaW50IHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24obUNvbnRleHQsIHR5cGUsIG1pcCwgYm1wLCB1c2FnZSk7Ci0gICAgfQotCi0KLSAgICBuYXRpdmUgaW50ICByc25BbGxvY2F0aW9uQ3ViZUNyZWF0ZUZyb21CaXRtYXAoaW50IGNvbiwgaW50IHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSk7Ci0gICAgc3luY2hyb25pemVkIGludCBuQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwKGludCB0eXBlLCBpbnQgbWlwLCBCaXRtYXAgYm1wLCBpbnQgdXNhZ2UpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuIHJzbkFsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcChtQ29udGV4dCwgdHlwZSwgbWlwLCBibXAsIHVzYWdlKTsKLSAgICB9Ci0gICAgbmF0aXZlIGludCAgcnNuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcFJlZihpbnQgY29uLCBpbnQgdHlwZSwgQml0bWFwIGJtcCk7Ci0gICAgc3luY2hyb25pemVkIGludCBuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcFJlZihpbnQgdHlwZSwgQml0bWFwIGJtcCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcFJlZihtQ29udGV4dCwgdHlwZSwgYm1wKTsKLSAgICB9Ci0gICAgbmF0aXZlIGludCAgcnNuQWxsb2NhdGlvbkNyZWF0ZUZyb21Bc3NldFN0cmVhbShpbnQgY29uLCBpbnQgbWlwcywgaW50IGFzc2V0U3RyZWFtLCBpbnQgdXNhZ2UpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbkFsbG9jYXRpb25DcmVhdGVGcm9tQXNzZXRTdHJlYW0oaW50IG1pcHMsIGludCBhc3NldFN0cmVhbSwgaW50IHVzYWdlKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25BbGxvY2F0aW9uQ3JlYXRlRnJvbUFzc2V0U3RyZWFtKG1Db250ZXh0LCBtaXBzLCBhc3NldFN0cmVhbSwgdXNhZ2UpOwotICAgIH0KLQotICAgIG5hdGl2ZSB2b2lkICByc25BbGxvY2F0aW9uQ29weVRvQml0bWFwKGludCBjb24sIGludCBhbGxvYywgQml0bWFwIGJtcCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAoaW50IGFsbG9jLCBCaXRtYXAgYm1wKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAobUNvbnRleHQsIGFsbG9jLCBibXApOwotICAgIH0KLQotCi0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvblN5bmNBbGwoaW50IGNvbiwgaW50IGFsbG9jLCBpbnQgc3JjKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvblN5bmNBbGwoaW50IGFsbG9jLCBpbnQgc3JjKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25TeW5jQWxsKG1Db250ZXh0LCBhbGxvYywgc3JjKTsKLSAgICB9Ci0gICAgbmF0aXZlIFN1cmZhY2UgcnNuQWxsb2NhdGlvbkdldFN1cmZhY2UoaW50IGNvbiwgaW50IGFsbG9jKTsKLSAgICBzeW5jaHJvbml6ZWQgU3VyZmFjZSBuQWxsb2NhdGlvbkdldFN1cmZhY2UoaW50IGFsbG9jKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25BbGxvY2F0aW9uR2V0U3VyZmFjZShtQ29udGV4dCwgYWxsb2MpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uU2V0U3VyZmFjZShpbnQgY29uLCBpbnQgYWxsb2MsIFN1cmZhY2Ugc3VyKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvblNldFN1cmZhY2UoaW50IGFsbG9jLCBTdXJmYWNlIHN1cikgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uU2V0U3VyZmFjZShtQ29udGV4dCwgYWxsb2MsIHN1cik7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25Jb1NlbmQoaW50IGNvbiwgaW50IGFsbG9jKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbklvU2VuZChpbnQgYWxsb2MpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQWxsb2NhdGlvbklvU2VuZChtQ29udGV4dCwgYWxsb2MpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uSW9SZWNlaXZlKGludCBjb24sIGludCBhbGxvYyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25Jb1JlY2VpdmUoaW50IGFsbG9jKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25Jb1JlY2VpdmUobUNvbnRleHQsIGFsbG9jKTsKLSAgICB9Ci0KLQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25HZW5lcmF0ZU1pcG1hcHMoaW50IGNvbiwgaW50IGFsbG9jKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyhpbnQgYWxsb2MpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyhtQ29udGV4dCwgYWxsb2MpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCAgcnNuQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwKGludCBjb24sIGludCBhbGxvYywgQml0bWFwIGJtcCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25Db3B5RnJvbUJpdG1hcChpbnQgYWxsb2MsIEJpdG1hcCBibXApIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwKG1Db250ZXh0LCBhbGxvYywgYm1wKTsKLSAgICB9Ci0KLQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhMUQoaW50IGNvbiwgaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIGludFtdIGQsIGludCBzaXplQnl0ZXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRGF0YTFEKGludCBpZCwgaW50IG9mZiwgaW50IG1pcCwgaW50IGNvdW50LCBpbnRbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMUQobUNvbnRleHQsIGlkLCBvZmYsIG1pcCwgY291bnQsIGQsIHNpemVCeXRlcyk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhMUQoaW50IGNvbiwgaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIHNob3J0W10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMUQoaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIHNob3J0W10gZCwgaW50IHNpemVCeXRlcykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uRGF0YTFEKG1Db250ZXh0LCBpZCwgb2ZmLCBtaXAsIGNvdW50LCBkLCBzaXplQnl0ZXMpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTFEKGludCBjb24sIGludCBpZCwgaW50IG9mZiwgaW50IG1pcCwgaW50IGNvdW50LCBieXRlW10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMUQoaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIGJ5dGVbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMUQobUNvbnRleHQsIGlkLCBvZmYsIG1pcCwgY291bnQsIGQsIHNpemVCeXRlcyk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhMUQoaW50IGNvbiwgaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIGZsb2F0W10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMUQoaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIGZsb2F0W10gZCwgaW50IHNpemVCeXRlcykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uRGF0YTFEKG1Db250ZXh0LCBpZCwgb2ZmLCBtaXAsIGNvdW50LCBkLCBzaXplQnl0ZXMpOwotICAgIH0KLQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25FbGVtZW50RGF0YTFEKGludCBjb24sIGludCBpZCwgaW50IHhvZmYsIGludCBtaXAsIGludCBjb21wSWR4LCBieXRlW10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25FbGVtZW50RGF0YTFEKGludCBpZCwgaW50IHhvZmYsIGludCBtaXAsIGludCBjb21wSWR4LCBieXRlW10gZCwgaW50IHNpemVCeXRlcykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uRWxlbWVudERhdGExRChtQ29udGV4dCwgaWQsIHhvZmYsIG1pcCwgY29tcElkeCwgZCwgc2l6ZUJ5dGVzKTsKLSAgICB9Ci0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTJEKGludCBjb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0QWxsb2MsIGludCBkc3RYb2ZmLCBpbnQgZHN0WW9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkc3RNaXAsIGludCBkc3RGYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY0FsbG9jLCBpbnQgc3JjWG9mZiwgaW50IHNyY1lvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjTWlwLCBpbnQgc3JjRmFjZSk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMkQoaW50IGRzdEFsbG9jLCBpbnQgZHN0WG9mZiwgaW50IGRzdFlvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRzdE1pcCwgaW50IGRzdEZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNBbGxvYywgaW50IHNyY1hvZmYsIGludCBzcmNZb2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNNaXAsIGludCBzcmNGYWNlKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMkQobUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0QWxsb2MsIGRzdFhvZmYsIGRzdFlvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0TWlwLCBkc3RGYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjQWxsb2MsIHNyY1hvZmYsIHNyY1lvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTWlwLCBzcmNGYWNlKTsKLSAgICB9Ci0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTJEKGludCBjb24sIGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwgaW50IHcsIGludCBoLCBieXRlW10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMkQoaW50IGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCBtaXAsIGludCBmYWNlLCBpbnQgdywgaW50IGgsIGJ5dGVbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMkQobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCBtaXAsIGZhY2UsIHcsIGgsIGQsIHNpemVCeXRlcyk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhMkQoaW50IGNvbiwgaW50IGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCBtaXAsIGludCBmYWNlLCBpbnQgdywgaW50IGgsIHNob3J0W10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMkQoaW50IGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCBtaXAsIGludCBmYWNlLCBpbnQgdywgaW50IGgsIHNob3J0W10gZCwgaW50IHNpemVCeXRlcykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uRGF0YTJEKG1Db250ZXh0LCBpZCwgeG9mZiwgeW9mZiwgbWlwLCBmYWNlLCB3LCBoLCBkLCBzaXplQnl0ZXMpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTJEKGludCBjb24sIGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwgaW50IHcsIGludCBoLCBpbnRbXSBkLCBpbnQgc2l6ZUJ5dGVzKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkRhdGEyRChpbnQgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IG1pcCwgaW50IGZhY2UsIGludCB3LCBpbnQgaCwgaW50W10gZCwgaW50IHNpemVCeXRlcykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uRGF0YTJEKG1Db250ZXh0LCBpZCwgeG9mZiwgeW9mZiwgbWlwLCBmYWNlLCB3LCBoLCBkLCBzaXplQnl0ZXMpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTJEKGludCBjb24sIGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwgaW50IHcsIGludCBoLCBmbG9hdFtdIGQsIGludCBzaXplQnl0ZXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRGF0YTJEKGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwgaW50IHcsIGludCBoLCBmbG9hdFtdIGQsIGludCBzaXplQnl0ZXMpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQWxsb2NhdGlvbkRhdGEyRChtQ29udGV4dCwgaWQsIHhvZmYsIHlvZmYsIG1pcCwgZmFjZSwgdywgaCwgZCwgc2l6ZUJ5dGVzKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEyRChpbnQgY29uLCBpbnQgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IG1pcCwgaW50IGZhY2UsIEJpdG1hcCBiKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkRhdGEyRChpbnQgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IG1pcCwgaW50IGZhY2UsIEJpdG1hcCBiKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMkQobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCBtaXAsIGZhY2UsIGIpOwotICAgIH0KLQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhM0QoaW50IGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkc3RBbGxvYywgaW50IGRzdFhvZmYsIGludCBkc3RZb2ZmLCBpbnQgZHN0Wm9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkc3RNaXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNBbGxvYywgaW50IHNyY1hvZmYsIGludCBzcmNZb2ZmLCBpbnQgc3JjWm9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNNaXApOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRGF0YTNEKGludCBkc3RBbGxvYywgaW50IGRzdFhvZmYsIGludCBkc3RZb2ZmLCBpbnQgZHN0Wm9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0TWlwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNBbGxvYywgaW50IHNyY1hvZmYsIGludCBzcmNZb2ZmLCBpbnQgc3JjWm9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjTWlwKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhM0QobUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0QWxsb2MsIGRzdFhvZmYsIGRzdFlvZmYsIGRzdFpvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0TWlwLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNBbGxvYywgc3JjWG9mZiwgc3JjWW9mZiwgc3JjWm9mZiwgc3JjTWlwKTsKLSAgICB9Ci0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTNEKGludCBjb24sIGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IG1pcCwgaW50IHcsIGludCBoLCBpbnQgZGVwdGgsIGJ5dGVbXSBkLCBpbnQgc2l6ZUJ5dGVzKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkRhdGEzRChpbnQgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCBtaXAsIGludCB3LCBpbnQgaCwgaW50IGRlcHRoLCBieXRlW10gZCwgaW50IHNpemVCeXRlcykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uRGF0YTNEKG1Db250ZXh0LCBpZCwgeG9mZiwgeW9mZiwgem9mZiwgbWlwLCB3LCBoLCBkZXB0aCwgZCwgc2l6ZUJ5dGVzKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEzRChpbnQgY29uLCBpbnQgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCBtaXAsIGludCB3LCBpbnQgaCwgaW50IGRlcHRoLCBzaG9ydFtdIGQsIGludCBzaXplQnl0ZXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRGF0YTNEKGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IG1pcCwgaW50IHcsIGludCBoLCBpbnQgZGVwdGgsIHNob3J0W10gZCwgaW50IHNpemVCeXRlcykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uRGF0YTNEKG1Db250ZXh0LCBpZCwgeG9mZiwgeW9mZiwgem9mZiwgbWlwLCB3LCBoLCBkZXB0aCwgZCwgc2l6ZUJ5dGVzKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEzRChpbnQgY29uLCBpbnQgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCBtaXAsIGludCB3LCBpbnQgaCwgaW50IGRlcHRoLCBpbnRbXSBkLCBpbnQgc2l6ZUJ5dGVzKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkRhdGEzRChpbnQgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCBtaXAsIGludCB3LCBpbnQgaCwgaW50IGRlcHRoLCBpbnRbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhM0QobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtaXAsIHcsIGgsIGRlcHRoLCBkLCBzaXplQnl0ZXMpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTNEKGludCBjb24sIGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IG1pcCwgaW50IHcsIGludCBoLCBpbnQgZGVwdGgsIGZsb2F0W10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhM0QoaW50IGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCB6b2ZmLCBpbnQgbWlwLCBpbnQgdywgaW50IGgsIGludCBkZXB0aCwgZmxvYXRbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhM0QobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtaXAsIHcsIGgsIGRlcHRoLCBkLCBzaXplQnl0ZXMpOwotICAgIH0KLQotCi0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvblJlYWQoaW50IGNvbiwgaW50IGlkLCBieXRlW10gZCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25SZWFkKGludCBpZCwgYnl0ZVtdIGQpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQWxsb2NhdGlvblJlYWQobUNvbnRleHQsIGlkLCBkKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvblJlYWQoaW50IGNvbiwgaW50IGlkLCBzaG9ydFtdIGQpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uUmVhZChpbnQgaWQsIHNob3J0W10gZCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uUmVhZChtQ29udGV4dCwgaWQsIGQpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uUmVhZChpbnQgY29uLCBpbnQgaWQsIGludFtdIGQpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uUmVhZChpbnQgaWQsIGludFtdIGQpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQWxsb2NhdGlvblJlYWQobUNvbnRleHQsIGlkLCBkKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvblJlYWQoaW50IGNvbiwgaW50IGlkLCBmbG9hdFtdIGQpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uUmVhZChpbnQgaWQsIGZsb2F0W10gZCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uUmVhZChtQ29udGV4dCwgaWQsIGQpOwotICAgIH0KLSAgICBuYXRpdmUgaW50ICByc25BbGxvY2F0aW9uR2V0VHlwZShpbnQgY29uLCBpbnQgaWQpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbkFsbG9jYXRpb25HZXRUeXBlKGludCBpZCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkdldFR5cGUobUNvbnRleHQsIGlkKTsKLSAgICB9Ci0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uUmVzaXplMUQoaW50IGNvbiwgaW50IGlkLCBpbnQgZGltWCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25SZXNpemUxRChpbnQgaWQsIGludCBkaW1YKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25SZXNpemUxRChtQ29udGV4dCwgaWQsIGRpbVgpOwotICAgIH0KLQotICAgIG5hdGl2ZSBpbnQgIHJzbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXRTdHJlYW0oaW50IGNvbiwgaW50IGFzc2V0U3RyZWFtKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0U3RyZWFtKGludCBhc3NldFN0cmVhbSkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuRmlsZUEzRENyZWF0ZUZyb21Bc3NldFN0cmVhbShtQ29udGV4dCwgYXNzZXRTdHJlYW0pOwotICAgIH0KLSAgICBuYXRpdmUgaW50ICByc25GaWxlQTNEQ3JlYXRlRnJvbUZpbGUoaW50IGNvbiwgU3RyaW5nIHBhdGgpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbkZpbGVBM0RDcmVhdGVGcm9tRmlsZShTdHJpbmcgcGF0aCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuRmlsZUEzRENyZWF0ZUZyb21GaWxlKG1Db250ZXh0LCBwYXRoKTsKLSAgICB9Ci0gICAgbmF0aXZlIGludCAgcnNuRmlsZUEzRENyZWF0ZUZyb21Bc3NldChpbnQgY29uLCBBc3NldE1hbmFnZXIgbWdyLCBTdHJpbmcgcGF0aCk7Ci0gICAgc3luY2hyb25pemVkIGludCBuRmlsZUEzRENyZWF0ZUZyb21Bc3NldChBc3NldE1hbmFnZXIgbWdyLCBTdHJpbmcgcGF0aCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuRmlsZUEzRENyZWF0ZUZyb21Bc3NldChtQ29udGV4dCwgbWdyLCBwYXRoKTsKLSAgICB9Ci0gICAgbmF0aXZlIGludCAgcnNuRmlsZUEzREdldE51bUluZGV4RW50cmllcyhpbnQgY29uLCBpbnQgZmlsZUEzRCk7Ci0gICAgc3luY2hyb25pemVkIGludCBuRmlsZUEzREdldE51bUluZGV4RW50cmllcyhpbnQgZmlsZUEzRCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuRmlsZUEzREdldE51bUluZGV4RW50cmllcyhtQ29udGV4dCwgZmlsZUEzRCk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkZpbGVBM0RHZXRJbmRleEVudHJpZXMoaW50IGNvbiwgaW50IGZpbGVBM0QsIGludCBudW1FbnRyaWVzLCBpbnRbXSBJRHMsIFN0cmluZ1tdIG5hbWVzKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuRmlsZUEzREdldEluZGV4RW50cmllcyhpbnQgZmlsZUEzRCwgaW50IG51bUVudHJpZXMsIGludFtdIElEcywgU3RyaW5nW10gbmFtZXMpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuRmlsZUEzREdldEluZGV4RW50cmllcyhtQ29udGV4dCwgZmlsZUEzRCwgbnVtRW50cmllcywgSURzLCBuYW1lcyk7Ci0gICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXgoaW50IGNvbiwgaW50IGZpbGVBM0QsIGludCBpbmRleCk7Ci0gICAgc3luY2hyb25pemVkIGludCBuRmlsZUEzREdldEVudHJ5QnlJbmRleChpbnQgZmlsZUEzRCwgaW50IGluZGV4KSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25GaWxlQTNER2V0RW50cnlCeUluZGV4KG1Db250ZXh0LCBmaWxlQTNELCBpbmRleCk7Ci0gICAgfQotCi0gICAgbmF0aXZlIGludCAgcnNuRm9udENyZWF0ZUZyb21GaWxlKGludCBjb24sIFN0cmluZyBmaWxlTmFtZSwgZmxvYXQgc2l6ZSwgaW50IGRwaSk7Ci0gICAgc3luY2hyb25pemVkIGludCBuRm9udENyZWF0ZUZyb21GaWxlKFN0cmluZyBmaWxlTmFtZSwgZmxvYXQgc2l6ZSwgaW50IGRwaSkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuRm9udENyZWF0ZUZyb21GaWxlKG1Db250ZXh0LCBmaWxlTmFtZSwgc2l6ZSwgZHBpKTsKLSAgICB9Ci0gICAgbmF0aXZlIGludCAgcnNuRm9udENyZWF0ZUZyb21Bc3NldFN0cmVhbShpbnQgY29uLCBTdHJpbmcgbmFtZSwgZmxvYXQgc2l6ZSwgaW50IGRwaSwgaW50IGFzc2V0U3RyZWFtKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtKFN0cmluZyBuYW1lLCBmbG9hdCBzaXplLCBpbnQgZHBpLCBpbnQgYXNzZXRTdHJlYW0pIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuIHJzbkZvbnRDcmVhdGVGcm9tQXNzZXRTdHJlYW0obUNvbnRleHQsIG5hbWUsIHNpemUsIGRwaSwgYXNzZXRTdHJlYW0pOwotICAgIH0KLSAgICBuYXRpdmUgaW50ICByc25Gb250Q3JlYXRlRnJvbUFzc2V0KGludCBjb24sIEFzc2V0TWFuYWdlciBtZ3IsIFN0cmluZyBwYXRoLCBmbG9hdCBzaXplLCBpbnQgZHBpKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5Gb250Q3JlYXRlRnJvbUFzc2V0KEFzc2V0TWFuYWdlciBtZ3IsIFN0cmluZyBwYXRoLCBmbG9hdCBzaXplLCBpbnQgZHBpKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25Gb250Q3JlYXRlRnJvbUFzc2V0KG1Db250ZXh0LCBtZ3IsIHBhdGgsIHNpemUsIGRwaSk7Ci0gICAgfQotCi0KLSAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRCaW5kQWxsb2NhdGlvbihpbnQgY29uLCBpbnQgc2NyaXB0LCBpbnQgYWxsb2MsIGludCBzbG90KTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0QmluZEFsbG9jYXRpb24oaW50IHNjcmlwdCwgaW50IGFsbG9jLCBpbnQgc2xvdCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25TY3JpcHRCaW5kQWxsb2NhdGlvbihtQ29udGV4dCwgc2NyaXB0LCBhbGxvYywgc2xvdCk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFRpbWVab25lKGludCBjb24sIGludCBzY3JpcHQsIGJ5dGVbXSB0aW1lWm9uZSk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdFNldFRpbWVab25lKGludCBzY3JpcHQsIGJ5dGVbXSB0aW1lWm9uZSkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25TY3JpcHRTZXRUaW1lWm9uZShtQ29udGV4dCwgc2NyaXB0LCB0aW1lWm9uZSk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEludm9rZShpbnQgY29uLCBpbnQgaWQsIGludCBzbG90KTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0SW52b2tlKGludCBpZCwgaW50IHNsb3QpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuU2NyaXB0SW52b2tlKG1Db250ZXh0LCBpZCwgc2xvdCk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEZvckVhY2goaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCwgaW50IGFpbiwgaW50IGFvdXQsIGJ5dGVbXSBwYXJhbXMpOwotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEZvckVhY2goaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCwgaW50IGFpbiwgaW50IGFvdXQpOwotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEZvckVhY2hDbGlwcGVkKGludCBjb24sIGludCBpZCwgaW50IHNsb3QsIGludCBhaW4sIGludCBhb3V0LCBieXRlW10gcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4c3RhcnQsIGludCB4ZW5kLCBpbnQgeXN0YXJ0LCBpbnQgeWVuZCwgaW50IHpzdGFydCwgaW50IHplbmQpOwotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEZvckVhY2hDbGlwcGVkKGludCBjb24sIGludCBpZCwgaW50IHNsb3QsIGludCBhaW4sIGludCBhb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4c3RhcnQsIGludCB4ZW5kLCBpbnQgeXN0YXJ0LCBpbnQgeWVuZCwgaW50IHpzdGFydCwgaW50IHplbmQpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRGb3JFYWNoKGludCBpZCwgaW50IHNsb3QsIGludCBhaW4sIGludCBhb3V0LCBieXRlW10gcGFyYW1zKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChwYXJhbXMgPT0gbnVsbCkgewotICAgICAgICAgICAgcnNuU2NyaXB0Rm9yRWFjaChtQ29udGV4dCwgaWQsIHNsb3QsIGFpbiwgYW91dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByc25TY3JpcHRGb3JFYWNoKG1Db250ZXh0LCBpZCwgc2xvdCwgYWluLCBhb3V0LCBwYXJhbXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdEZvckVhY2hDbGlwcGVkKGludCBpZCwgaW50IHNsb3QsIGludCBhaW4sIGludCBhb3V0LCBieXRlW10gcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHN0YXJ0LCBpbnQgeGVuZCwgaW50IHlzdGFydCwgaW50IHllbmQsIGludCB6c3RhcnQsIGludCB6ZW5kKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChwYXJhbXMgPT0gbnVsbCkgewotICAgICAgICAgICAgcnNuU2NyaXB0Rm9yRWFjaENsaXBwZWQobUNvbnRleHQsIGlkLCBzbG90LCBhaW4sIGFvdXQsIHhzdGFydCwgeGVuZCwgeXN0YXJ0LCB5ZW5kLCB6c3RhcnQsIHplbmQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcnNuU2NyaXB0Rm9yRWFjaENsaXBwZWQobUNvbnRleHQsIGlkLCBzbG90LCBhaW4sIGFvdXQsIHBhcmFtcywgeHN0YXJ0LCB4ZW5kLCB5c3RhcnQsIHllbmQsIHpzdGFydCwgemVuZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRJbnZva2VWKGludCBjb24sIGludCBpZCwgaW50IHNsb3QsIGJ5dGVbXSBwYXJhbXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRJbnZva2VWKGludCBpZCwgaW50IHNsb3QsIGJ5dGVbXSBwYXJhbXMpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuU2NyaXB0SW52b2tlVihtQ29udGV4dCwgaWQsIHNsb3QsIHBhcmFtcyk7Ci0gICAgfQotCi0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFySShpbnQgY29uLCBpbnQgaWQsIGludCBzbG90LCBpbnQgdmFsKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFySShpbnQgaWQsIGludCBzbG90LCBpbnQgdmFsKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzblNjcmlwdFNldFZhckkobUNvbnRleHQsIGlkLCBzbG90LCB2YWwpOwotICAgIH0KLSAgICBuYXRpdmUgaW50IHJzblNjcmlwdEdldFZhckkoaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCk7Ci0gICAgc3luY2hyb25pemVkIGludCBuU2NyaXB0R2V0VmFySShpbnQgaWQsIGludCBzbG90KSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25TY3JpcHRHZXRWYXJJKG1Db250ZXh0LCBpZCwgc2xvdCk7Ci0gICAgfQotCi0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFySihpbnQgY29uLCBpbnQgaWQsIGludCBzbG90LCBsb25nIHZhbCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdFNldFZhckooaW50IGlkLCBpbnQgc2xvdCwgbG9uZyB2YWwpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuU2NyaXB0U2V0VmFySihtQ29udGV4dCwgaWQsIHNsb3QsIHZhbCk7Ci0gICAgfQotICAgIG5hdGl2ZSBsb25nIHJzblNjcmlwdEdldFZhckooaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCk7Ci0gICAgc3luY2hyb25pemVkIGxvbmcgblNjcmlwdEdldFZhckooaW50IGlkLCBpbnQgc2xvdCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuU2NyaXB0R2V0VmFySihtQ29udGV4dCwgaWQsIHNsb3QpOwotICAgIH0KLQotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFZhckYoaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCwgZmxvYXQgdmFsKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFyRihpbnQgaWQsIGludCBzbG90LCBmbG9hdCB2YWwpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuU2NyaXB0U2V0VmFyRihtQ29udGV4dCwgaWQsIHNsb3QsIHZhbCk7Ci0gICAgfQotICAgIG5hdGl2ZSBmbG9hdCByc25TY3JpcHRHZXRWYXJGKGludCBjb24sIGludCBpZCwgaW50IHNsb3QpOwotICAgIHN5bmNocm9uaXplZCBmbG9hdCBuU2NyaXB0R2V0VmFyRihpbnQgaWQsIGludCBzbG90KSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25TY3JpcHRHZXRWYXJGKG1Db250ZXh0LCBpZCwgc2xvdCk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFZhckQoaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCwgZG91YmxlIHZhbCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdFNldFZhckQoaW50IGlkLCBpbnQgc2xvdCwgZG91YmxlIHZhbCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25TY3JpcHRTZXRWYXJEKG1Db250ZXh0LCBpZCwgc2xvdCwgdmFsKTsKLSAgICB9Ci0gICAgbmF0aXZlIGRvdWJsZSByc25TY3JpcHRHZXRWYXJEKGludCBjb24sIGludCBpZCwgaW50IHNsb3QpOwotICAgIHN5bmNocm9uaXplZCBkb3VibGUgblNjcmlwdEdldFZhckQoaW50IGlkLCBpbnQgc2xvdCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuU2NyaXB0R2V0VmFyRChtQ29udGV4dCwgaWQsIHNsb3QpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRTZXRWYXJWKGludCBjb24sIGludCBpZCwgaW50IHNsb3QsIGJ5dGVbXSB2YWwpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRTZXRWYXJWKGludCBpZCwgaW50IHNsb3QsIGJ5dGVbXSB2YWwpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuU2NyaXB0U2V0VmFyVihtQ29udGV4dCwgaWQsIHNsb3QsIHZhbCk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEdldFZhclYoaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCwgYnl0ZVtdIHZhbCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdEdldFZhclYoaW50IGlkLCBpbnQgc2xvdCwgYnl0ZVtdIHZhbCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25TY3JpcHRHZXRWYXJWKG1Db250ZXh0LCBpZCwgc2xvdCwgdmFsKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFyVkUoaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCwgYnl0ZVtdIHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZSwgaW50W10gZGltcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdFNldFZhclZFKGludCBpZCwgaW50IHNsb3QsIGJ5dGVbXSB2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlLCBpbnRbXSBkaW1zKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzblNjcmlwdFNldFZhclZFKG1Db250ZXh0LCBpZCwgc2xvdCwgdmFsLCBlLCBkaW1zKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFyT2JqKGludCBjb24sIGludCBpZCwgaW50IHNsb3QsIGludCB2YWwpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRTZXRWYXJPYmooaW50IGlkLCBpbnQgc2xvdCwgaW50IHZhbCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25TY3JpcHRTZXRWYXJPYmoobUNvbnRleHQsIGlkLCBzbG90LCB2YWwpOwotICAgIH0KLQotICAgIG5hdGl2ZSBpbnQgIHJzblNjcmlwdENDcmVhdGUoaW50IGNvbiwgU3RyaW5nIHJlc05hbWUsIFN0cmluZyBjYWNoZURpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBzY3JpcHQsIGludCBsZW5ndGgpOwotICAgIHN5bmNocm9uaXplZCBpbnQgblNjcmlwdENDcmVhdGUoU3RyaW5nIHJlc05hbWUsIFN0cmluZyBjYWNoZURpciwgYnl0ZVtdIHNjcmlwdCwgaW50IGxlbmd0aCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuU2NyaXB0Q0NyZWF0ZShtQ29udGV4dCwgcmVzTmFtZSwgY2FjaGVEaXIsIHNjcmlwdCwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBuYXRpdmUgaW50ICByc25TY3JpcHRJbnRyaW5zaWNDcmVhdGUoaW50IGNvbiwgaW50IGlkLCBpbnQgZWlkKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoaW50IGlkLCBpbnQgZWlkKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25TY3JpcHRJbnRyaW5zaWNDcmVhdGUobUNvbnRleHQsIGlkLCBlaWQpOwotICAgIH0KLQotICAgIG5hdGl2ZSBpbnQgIHJzblNjcmlwdEtlcm5lbElEQ3JlYXRlKGludCBjb24sIGludCBzaWQsIGludCBzbG90LCBpbnQgc2lnKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5TY3JpcHRLZXJuZWxJRENyZWF0ZShpbnQgc2lkLCBpbnQgc2xvdCwgaW50IHNpZykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuU2NyaXB0S2VybmVsSURDcmVhdGUobUNvbnRleHQsIHNpZCwgc2xvdCwgc2lnKTsKLSAgICB9Ci0KLSAgICBuYXRpdmUgaW50ICByc25TY3JpcHRGaWVsZElEQ3JlYXRlKGludCBjb24sIGludCBzaWQsIGludCBzbG90KTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5TY3JpcHRGaWVsZElEQ3JlYXRlKGludCBzaWQsIGludCBzbG90KSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25TY3JpcHRGaWVsZElEQ3JlYXRlKG1Db250ZXh0LCBzaWQsIHNsb3QpOwotICAgIH0KLQotICAgIG5hdGl2ZSBpbnQgIHJzblNjcmlwdEdyb3VwQ3JlYXRlKGludCBjb24sIGludFtdIGtlcm5lbHMsIGludFtdIHNyYywgaW50W10gZHN0aywgaW50W10gZHN0ZiwgaW50W10gdHlwZXMpOwotICAgIHN5bmNocm9uaXplZCBpbnQgblNjcmlwdEdyb3VwQ3JlYXRlKGludFtdIGtlcm5lbHMsIGludFtdIHNyYywgaW50W10gZHN0aywgaW50W10gZHN0ZiwgaW50W10gdHlwZXMpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuIHJzblNjcmlwdEdyb3VwQ3JlYXRlKG1Db250ZXh0LCBrZXJuZWxzLCBzcmMsIGRzdGssIGRzdGYsIHR5cGVzKTsKLSAgICB9Ci0KLSAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRHcm91cFNldElucHV0KGludCBjb24sIGludCBncm91cCwgaW50IGtlcm5lbCwgaW50IGFsbG9jKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0R3JvdXBTZXRJbnB1dChpbnQgZ3JvdXAsIGludCBrZXJuZWwsIGludCBhbGxvYykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25TY3JpcHRHcm91cFNldElucHV0KG1Db250ZXh0LCBncm91cCwga2VybmVsLCBhbGxvYyk7Ci0gICAgfQotCi0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0R3JvdXBTZXRPdXRwdXQoaW50IGNvbiwgaW50IGdyb3VwLCBpbnQga2VybmVsLCBpbnQgYWxsb2MpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRHcm91cFNldE91dHB1dChpbnQgZ3JvdXAsIGludCBrZXJuZWwsIGludCBhbGxvYykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25TY3JpcHRHcm91cFNldE91dHB1dChtQ29udGV4dCwgZ3JvdXAsIGtlcm5lbCwgYWxsb2MpOwotICAgIH0KLQotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEdyb3VwRXhlY3V0ZShpbnQgY29uLCBpbnQgZ3JvdXApOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRHcm91cEV4ZWN1dGUoaW50IGdyb3VwKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzblNjcmlwdEdyb3VwRXhlY3V0ZShtQ29udGV4dCwgZ3JvdXApOwotICAgIH0KLQotICAgIG5hdGl2ZSBpbnQgIHJzblNhbXBsZXJDcmVhdGUoaW50IGNvbiwgaW50IG1hZ0ZpbHRlciwgaW50IG1pbkZpbHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3cmFwUywgaW50IHdyYXBULCBpbnQgd3JhcFIsIGZsb2F0IGFuaXNvKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5TYW1wbGVyQ3JlYXRlKGludCBtYWdGaWx0ZXIsIGludCBtaW5GaWx0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd3JhcFMsIGludCB3cmFwVCwgaW50IHdyYXBSLCBmbG9hdCBhbmlzbykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuU2FtcGxlckNyZWF0ZShtQ29udGV4dCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIHdyYXBTLCB3cmFwVCwgd3JhcFIsIGFuaXNvKTsKLSAgICB9Ci0KLSAgICBuYXRpdmUgaW50ICByc25Qcm9ncmFtU3RvcmVDcmVhdGUoaW50IGNvbiwgYm9vbGVhbiByLCBib29sZWFuIGcsIGJvb2xlYW4gYiwgYm9vbGVhbiBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGRlcHRoTWFzaywgYm9vbGVhbiBkaXRoZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNNb2RlLCBpbnQgZHN0TW9kZSwgaW50IGRlcHRoRnVuYyk7Ci0gICAgc3luY2hyb25pemVkIGludCBuUHJvZ3JhbVN0b3JlQ3JlYXRlKGJvb2xlYW4gciwgYm9vbGVhbiBnLCBib29sZWFuIGIsIGJvb2xlYW4gYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBkZXB0aE1hc2ssIGJvb2xlYW4gZGl0aGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjTW9kZSwgaW50IGRzdE1vZGUsIGludCBkZXB0aEZ1bmMpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuIHJzblByb2dyYW1TdG9yZUNyZWF0ZShtQ29udGV4dCwgciwgZywgYiwgYSwgZGVwdGhNYXNrLCBkaXRoZXIsIHNyY01vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0TW9kZSwgZGVwdGhGdW5jKTsKLSAgICB9Ci0KLSAgICBuYXRpdmUgaW50ICByc25Qcm9ncmFtUmFzdGVyQ3JlYXRlKGludCBjb24sIGJvb2xlYW4gcG9pbnRTcHJpdGUsIGludCBjdWxsTW9kZSk7Ci0gICAgc3luY2hyb25pemVkIGludCBuUHJvZ3JhbVJhc3RlckNyZWF0ZShib29sZWFuIHBvaW50U3ByaXRlLCBpbnQgY3VsbE1vZGUpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuIHJzblByb2dyYW1SYXN0ZXJDcmVhdGUobUNvbnRleHQsIHBvaW50U3ByaXRlLCBjdWxsTW9kZSk7Ci0gICAgfQotCi0gICAgbmF0aXZlIHZvaWQgcnNuUHJvZ3JhbUJpbmRDb25zdGFudHMoaW50IGNvbiwgaW50IHB2LCBpbnQgc2xvdCwgaW50IG1JRCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgblByb2dyYW1CaW5kQ29uc3RhbnRzKGludCBwdiwgaW50IHNsb3QsIGludCBtSUQpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuUHJvZ3JhbUJpbmRDb25zdGFudHMobUNvbnRleHQsIHB2LCBzbG90LCBtSUQpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25Qcm9ncmFtQmluZFRleHR1cmUoaW50IGNvbiwgaW50IHZwZiwgaW50IHNsb3QsIGludCBhKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuUHJvZ3JhbUJpbmRUZXh0dXJlKGludCB2cGYsIGludCBzbG90LCBpbnQgYSkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25Qcm9ncmFtQmluZFRleHR1cmUobUNvbnRleHQsIHZwZiwgc2xvdCwgYSk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzblByb2dyYW1CaW5kU2FtcGxlcihpbnQgY29uLCBpbnQgdnBmLCBpbnQgc2xvdCwgaW50IHMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5Qcm9ncmFtQmluZFNhbXBsZXIoaW50IHZwZiwgaW50IHNsb3QsIGludCBzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzblByb2dyYW1CaW5kU2FtcGxlcihtQ29udGV4dCwgdnBmLCBzbG90LCBzKTsKLSAgICB9Ci0gICAgbmF0aXZlIGludCAgcnNuUHJvZ3JhbUZyYWdtZW50Q3JlYXRlKGludCBjb24sIFN0cmluZyBzaGFkZXIsIFN0cmluZ1tdIHRleE5hbWVzLCBpbnRbXSBwYXJhbXMpOwotICAgIHN5bmNocm9uaXplZCBpbnQgblByb2dyYW1GcmFnbWVudENyZWF0ZShTdHJpbmcgc2hhZGVyLCBTdHJpbmdbXSB0ZXhOYW1lcywgaW50W10gcGFyYW1zKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25Qcm9ncmFtRnJhZ21lbnRDcmVhdGUobUNvbnRleHQsIHNoYWRlciwgdGV4TmFtZXMsIHBhcmFtcyk7Ci0gICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzblByb2dyYW1WZXJ0ZXhDcmVhdGUoaW50IGNvbiwgU3RyaW5nIHNoYWRlciwgU3RyaW5nW10gdGV4TmFtZXMsIGludFtdIHBhcmFtcyk7Ci0gICAgc3luY2hyb25pemVkIGludCBuUHJvZ3JhbVZlcnRleENyZWF0ZShTdHJpbmcgc2hhZGVyLCBTdHJpbmdbXSB0ZXhOYW1lcywgaW50W10gcGFyYW1zKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25Qcm9ncmFtVmVydGV4Q3JlYXRlKG1Db250ZXh0LCBzaGFkZXIsIHRleE5hbWVzLCBwYXJhbXMpOwotICAgIH0KLQotICAgIG5hdGl2ZSBpbnQgIHJzbk1lc2hDcmVhdGUoaW50IGNvbiwgaW50W10gdnR4LCBpbnRbXSBpZHgsIGludFtdIHByaW0pOwotICAgIHN5bmNocm9uaXplZCBpbnQgbk1lc2hDcmVhdGUoaW50W10gdnR4LCBpbnRbXSBpZHgsIGludFtdIHByaW0pIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuIHJzbk1lc2hDcmVhdGUobUNvbnRleHQsIHZ0eCwgaWR4LCBwcmltKTsKLSAgICB9Ci0gICAgbmF0aXZlIGludCAgcnNuTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50KGludCBjb24sIGludCBpZCk7Ci0gICAgc3luY2hyb25pemVkIGludCBuTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50KGludCBpZCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50KG1Db250ZXh0LCBpZCk7Ci0gICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzbk1lc2hHZXRJbmRleENvdW50KGludCBjb24sIGludCBpZCk7Ci0gICAgc3luY2hyb25pemVkIGludCBuTWVzaEdldEluZGV4Q291bnQoaW50IGlkKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiByc25NZXNoR2V0SW5kZXhDb3VudChtQ29udGV4dCwgaWQpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25NZXNoR2V0VmVydGljZXMoaW50IGNvbiwgaW50IGlkLCBpbnRbXSB2dHhJZHMsIGludCB2dHhJZENvdW50KTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuTWVzaEdldFZlcnRpY2VzKGludCBpZCwgaW50W10gdnR4SWRzLCBpbnQgdnR4SWRDb3VudCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25NZXNoR2V0VmVydGljZXMobUNvbnRleHQsIGlkLCB2dHhJZHMsIHZ0eElkQ291bnQpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25NZXNoR2V0SW5kaWNlcyhpbnQgY29uLCBpbnQgaWQsIGludFtdIGlkeElkcywgaW50W10gcHJpbWl0aXZlcywgaW50IHZ0eElkQ291bnQpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5NZXNoR2V0SW5kaWNlcyhpbnQgaWQsIGludFtdIGlkeElkcywgaW50W10gcHJpbWl0aXZlcywgaW50IHZ0eElkQ291bnQpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuTWVzaEdldEluZGljZXMobUNvbnRleHQsIGlkLCBpZHhJZHMsIHByaW1pdGl2ZXMsIHZ0eElkQ291bnQpOwotICAgIH0KLQotICAgIG5hdGl2ZSBpbnQgIHJzblBhdGhDcmVhdGUoaW50IGNvbiwgaW50IHByaW0sIGJvb2xlYW4gaXNTdGF0aWMsIGludCB2dHgsIGludCBsb29wLCBmbG9hdCBxKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5QYXRoQ3JlYXRlKGludCBwcmltLCBib29sZWFuIGlzU3RhdGljLCBpbnQgdnR4LCBpbnQgbG9vcCwgZmxvYXQgcSkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm4gcnNuUGF0aENyZWF0ZShtQ29udGV4dCwgcHJpbSwgaXNTdGF0aWMsIHZ0eCwgbG9vcCwgcSk7Ci0gICAgfQotCi0gICAgaW50ICAgICBtRGV2OwotICAgIGludCAgICAgbUNvbnRleHQ7Ci0gICAgQFN1cHByZXNzV2FybmluZ3MoeyJGaWVsZENhbkJlTG9jYWwifSkKLSAgICBNZXNzYWdlVGhyZWFkIG1NZXNzYWdlVGhyZWFkOwotCi0gICAgRWxlbWVudCBtRWxlbWVudF9VODsKLSAgICBFbGVtZW50IG1FbGVtZW50X0k4OwotICAgIEVsZW1lbnQgbUVsZW1lbnRfVTE2OwotICAgIEVsZW1lbnQgbUVsZW1lbnRfSTE2OwotICAgIEVsZW1lbnQgbUVsZW1lbnRfVTMyOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfSTMyOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfVTY0OwotICAgIEVsZW1lbnQgbUVsZW1lbnRfSTY0OwotICAgIEVsZW1lbnQgbUVsZW1lbnRfRjMyOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfRjY0OwotICAgIEVsZW1lbnQgbUVsZW1lbnRfQk9PTEVBTjsKLQotICAgIEVsZW1lbnQgbUVsZW1lbnRfRUxFTUVOVDsKLSAgICBFbGVtZW50IG1FbGVtZW50X1RZUEU7Ci0gICAgRWxlbWVudCBtRWxlbWVudF9BTExPQ0FUSU9OOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfU0FNUExFUjsKLSAgICBFbGVtZW50IG1FbGVtZW50X1NDUklQVDsKLSAgICBFbGVtZW50IG1FbGVtZW50X01FU0g7Ci0gICAgRWxlbWVudCBtRWxlbWVudF9QUk9HUkFNX0ZSQUdNRU5UOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfUFJPR1JBTV9WRVJURVg7Ci0gICAgRWxlbWVudCBtRWxlbWVudF9QUk9HUkFNX1JBU1RFUjsKLSAgICBFbGVtZW50IG1FbGVtZW50X1BST0dSQU1fU1RPUkU7Ci0gICAgRWxlbWVudCBtRWxlbWVudF9GT05UOwotCi0gICAgRWxlbWVudCBtRWxlbWVudF9BXzg7Ci0gICAgRWxlbWVudCBtRWxlbWVudF9SR0JfNTY1OwotICAgIEVsZW1lbnQgbUVsZW1lbnRfUkdCXzg4ODsKLSAgICBFbGVtZW50IG1FbGVtZW50X1JHQkFfNTU1MTsKLSAgICBFbGVtZW50IG1FbGVtZW50X1JHQkFfNDQ0NDsKLSAgICBFbGVtZW50IG1FbGVtZW50X1JHQkFfODg4ODsKLQotICAgIEVsZW1lbnQgbUVsZW1lbnRfRkxPQVRfMjsKLSAgICBFbGVtZW50IG1FbGVtZW50X0ZMT0FUXzM7Ci0gICAgRWxlbWVudCBtRWxlbWVudF9GTE9BVF80OwotCi0gICAgRWxlbWVudCBtRWxlbWVudF9ET1VCTEVfMjsKLSAgICBFbGVtZW50IG1FbGVtZW50X0RPVUJMRV8zOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfRE9VQkxFXzQ7Ci0KLSAgICBFbGVtZW50IG1FbGVtZW50X1VDSEFSXzI7Ci0gICAgRWxlbWVudCBtRWxlbWVudF9VQ0hBUl8zOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfVUNIQVJfNDsKLQotICAgIEVsZW1lbnQgbUVsZW1lbnRfQ0hBUl8yOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfQ0hBUl8zOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfQ0hBUl80OwotCi0gICAgRWxlbWVudCBtRWxlbWVudF9VU0hPUlRfMjsKLSAgICBFbGVtZW50IG1FbGVtZW50X1VTSE9SVF8zOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfVVNIT1JUXzQ7Ci0KLSAgICBFbGVtZW50IG1FbGVtZW50X1NIT1JUXzI7Ci0gICAgRWxlbWVudCBtRWxlbWVudF9TSE9SVF8zOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfU0hPUlRfNDsKLQotICAgIEVsZW1lbnQgbUVsZW1lbnRfVUlOVF8yOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfVUlOVF8zOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfVUlOVF80OwotCi0gICAgRWxlbWVudCBtRWxlbWVudF9JTlRfMjsKLSAgICBFbGVtZW50IG1FbGVtZW50X0lOVF8zOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfSU5UXzQ7Ci0KLSAgICBFbGVtZW50IG1FbGVtZW50X1VMT05HXzI7Ci0gICAgRWxlbWVudCBtRWxlbWVudF9VTE9OR18zOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfVUxPTkdfNDsKLQotICAgIEVsZW1lbnQgbUVsZW1lbnRfTE9OR18yOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfTE9OR18zOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfTE9OR180OwotCi0gICAgRWxlbWVudCBtRWxlbWVudF9ZVVY7Ci0KLSAgICBFbGVtZW50IG1FbGVtZW50X01BVFJJWF80WDQ7Ci0gICAgRWxlbWVudCBtRWxlbWVudF9NQVRSSVhfM1gzOwotICAgIEVsZW1lbnQgbUVsZW1lbnRfTUFUUklYXzJYMjsKLQotICAgIFNhbXBsZXIgbVNhbXBsZXJfQ0xBTVBfTkVBUkVTVDsKLSAgICBTYW1wbGVyIG1TYW1wbGVyX0NMQU1QX0xJTkVBUjsKLSAgICBTYW1wbGVyIG1TYW1wbGVyX0NMQU1QX0xJTkVBUl9NSVBfTElORUFSOwotICAgIFNhbXBsZXIgbVNhbXBsZXJfV1JBUF9ORUFSRVNUOwotICAgIFNhbXBsZXIgbVNhbXBsZXJfV1JBUF9MSU5FQVI7Ci0gICAgU2FtcGxlciBtU2FtcGxlcl9XUkFQX0xJTkVBUl9NSVBfTElORUFSOwotICAgIFNhbXBsZXIgbVNhbXBsZXJfTUlSUk9SRURfUkVQRUFUX05FQVJFU1Q7Ci0gICAgU2FtcGxlciBtU2FtcGxlcl9NSVJST1JFRF9SRVBFQVRfTElORUFSOwotICAgIFNhbXBsZXIgbVNhbXBsZXJfTUlSUk9SRURfUkVQRUFUX0xJTkVBUl9NSVBfTElORUFSOwotCi0gICAgUHJvZ3JhbVN0b3JlIG1Qcm9ncmFtU3RvcmVfQkxFTkRfTk9ORV9ERVBUSF9URVNUOwotICAgIFByb2dyYW1TdG9yZSBtUHJvZ3JhbVN0b3JlX0JMRU5EX05PTkVfREVQVEhfTk9fREVQVEg7Ci0gICAgUHJvZ3JhbVN0b3JlIG1Qcm9ncmFtU3RvcmVfQkxFTkRfQUxQSEFfREVQVEhfVEVTVDsKLSAgICBQcm9ncmFtU3RvcmUgbVByb2dyYW1TdG9yZV9CTEVORF9BTFBIQV9ERVBUSF9OT19ERVBUSDsKLQotICAgIFByb2dyYW1SYXN0ZXIgbVByb2dyYW1SYXN0ZXJfQ1VMTF9CQUNLOwotICAgIFByb2dyYW1SYXN0ZXIgbVByb2dyYW1SYXN0ZXJfQ1VMTF9GUk9OVDsKLSAgICBQcm9ncmFtUmFzdGVyIG1Qcm9ncmFtUmFzdGVyX0NVTExfTk9ORTsKLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8KLQotICAgIC8qKgotICAgICAqIFRoZSBiYXNlIGNsYXNzIGZyb20gd2hpY2ggYW4gYXBwbGljYXRpb24gc2hvdWxkIGRlcml2ZSBpbiBvcmRlcgotICAgICAqIHRvIHJlY2VpdmUgUlMgbWVzc2FnZXMgZnJvbSBzY3JpcHRzLiBXaGVuIGEgc2NyaXB0IGNhbGxzIHtAY29kZQotICAgICAqIHJzU2VuZFRvQ2xpZW50fSwgdGhlIGRhdGEgZmllbGRzIHdpbGwgYmUgZmlsbGVkLCBhbmQgdGhlIHJ1bgotICAgICAqIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBvbiBhIHNlcGFyYXRlIHRocmVhZC4gIFRoaXMgd2lsbCBvY2N1cgotICAgICAqIHNvbWUgdGltZSBhZnRlciB7QGNvZGUgcnNTZW5kVG9DbGllbnR9IGNvbXBsZXRlcyBpbiB0aGUgc2NyaXB0LAotICAgICAqIGFzIHtAY29kZSByc1NlbmRUb0NsaWVudH0gaXMgYXN5bmNocm9ub3VzLiBNZXNzYWdlIGhhbmRsZXJzIGFyZQotICAgICAqIG5vdCBndWFyYW50ZWVkIHRvIGhhdmUgY29tcGxldGVkIHdoZW4ge0BsaW5rCi0gICAgICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0I2ZpbmlzaH0gcmV0dXJucy4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUlNNZXNzYWdlSGFuZGxlciBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLSAgICAgICAgcHJvdGVjdGVkIGludFtdIG1EYXRhOwotICAgICAgICBwcm90ZWN0ZWQgaW50IG1JRDsKLSAgICAgICAgcHJvdGVjdGVkIGludCBtTGVuZ3RoOwotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyoqCi0gICAgICogSWYgYW4gYXBwbGljYXRpb24gaXMgZXhwZWN0aW5nIG1lc3NhZ2VzLCBpdCBzaG91bGQgc2V0IHRoaXMKLSAgICAgKiBmaWVsZCB0byBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgUlNNZXNzYWdlSGFuZGxlcn0uICBUaGlzCi0gICAgICogaW5zdGFuY2Ugd2lsbCByZWNlaXZlIGFsbCB0aGUgdXNlciBtZXNzYWdlcyBzZW50IGZyb20ge0Bjb2RlCi0gICAgICogc2VuZFRvQ2xpZW50fSBieSBzY3JpcHRzIGZyb20gdGhpcyBjb250ZXh0LgotICAgICAqCi0gICAgICovCi0gICAgUlNNZXNzYWdlSGFuZGxlciBtTWVzc2FnZUNhbGxiYWNrID0gbnVsbDsKLQotICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VIYW5kbGVyKFJTTWVzc2FnZUhhbmRsZXIgbXNnKSB7Ci0gICAgICAgIG1NZXNzYWdlQ2FsbGJhY2sgPSBtc2c7Ci0gICAgfQotICAgIHB1YmxpYyBSU01lc3NhZ2VIYW5kbGVyIGdldE1lc3NhZ2VIYW5kbGVyKCkgewotICAgICAgICByZXR1cm4gbU1lc3NhZ2VDYWxsYmFjazsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQbGFjZSBhIG1lc3NhZ2UgaW50byB0aGUgbWVzc2FnZSBxdWV1ZSB0byBiZSBzZW50IGJhY2sgdG8gdGhlIG1lc3NhZ2UKLSAgICAgKiBoYW5kbGVyIG9uY2UgYWxsIHByZXZpb3VzIGNvbW1hbmRzIGhhdmUgYmVlbiBleGVjdXRlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpZAotICAgICAqIEBwYXJhbSBkYXRhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoaW50IGlkLCBpbnRbXSBkYXRhKSB7Ci0gICAgICAgIG5Db250ZXh0U2VuZE1lc3NhZ2UoaWQsIGRhdGEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBydW50aW1lIGVycm9yIGhhbmRsZXIgYmFzZSBjbGFzcy4gIEFuIGFwcGxpY2F0aW9uIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzIGNsYXNzCi0gICAgICogaWYgaXQgd2lzaGVzIHRvIGluc3RhbGwgYW4gZXJyb3IgaGFuZGxlci4gIFdoZW4gZXJyb3JzIG9jY3VyIGF0IHJ1bnRpbWUsCi0gICAgICogdGhlIGZpZWxkcyBpbiB0aGlzIGNsYXNzIHdpbGwgYmUgZmlsbGVkLCBhbmQgdGhlIHJ1biBtZXRob2Qgd2lsbCBiZSBjYWxsZWQuCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFJTRXJyb3JIYW5kbGVyIGltcGxlbWVudHMgUnVubmFibGUgewotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIG1FcnJvck1lc3NhZ2U7Ci0gICAgICAgIHByb3RlY3RlZCBpbnQgbUVycm9yTnVtOwotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBcHBsaWNhdGlvbiBFcnJvciBoYW5kbGVyLiAgQWxsIHJ1bnRpbWUgZXJyb3JzIHdpbGwgYmUgZGlzcGF0Y2hlZCB0byB0aGUKLSAgICAgKiBpbnN0YW5jZSBvZiBSU0FzeW5jRXJyb3Igc2V0IGhlcmUuICBJZiB0aGlzIGZpZWxkIGlzIG51bGwgYQotICAgICAqIHtAbGluayBSU1J1bnRpbWVFeGNlcHRpb259IHdpbGwgaW5zdGVhZCBiZSB0aHJvd24gd2l0aCBkZXRhaWxzIGFib3V0IHRoZSBlcnJvci4KLSAgICAgKiBUaGlzIHdpbGwgY2F1c2UgcHJvZ3JhbSB0ZXJtYWluYXRpb24uCi0gICAgICoKLSAgICAgKi8KLSAgICBSU0Vycm9ySGFuZGxlciBtRXJyb3JDYWxsYmFjayA9IG51bGw7Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRFcnJvckhhbmRsZXIoUlNFcnJvckhhbmRsZXIgbXNnKSB7Ci0gICAgICAgIG1FcnJvckNhbGxiYWNrID0gbXNnOwotICAgIH0KLSAgICBwdWJsaWMgUlNFcnJvckhhbmRsZXIgZ2V0RXJyb3JIYW5kbGVyKCkgewotICAgICAgICByZXR1cm4gbUVycm9yQ2FsbGJhY2s7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVuZGVyU2NyaXB0IHdvcmtlciB0aHJlYWQgcHJpb3JpdHkgZW51bWVyYXRpb24uICBUaGUgZGVmYXVsdCB2YWx1ZSBpcwotICAgICAqIE5PUk1BTC4gIEFwcGxpY2F0aW9ucyB3aXNoaW5nIHRvIGRvIGJhY2tncm91bmQgcHJvY2Vzc2luZyBzaG91bGQgc2V0Ci0gICAgICogdGhlaXIgcHJpb3JpdHkgdG8gTE9XIHRvIGF2b2lkIHN0YXJ2aW5nIGZvcmdyb3VuZCBwcm9jZXNzZXMuCi0gICAgICovCi0gICAgcHVibGljIGVudW0gUHJpb3JpdHkgewotICAgICAgICBMT1cgKFByb2Nlc3MuVEhSRUFEX1BSSU9SSVRZX0JBQ0tHUk9VTkQgKyAoNSAqIFByb2Nlc3MuVEhSRUFEX1BSSU9SSVRZX0xFU1NfRkFWT1JBQkxFKSksCi0gICAgICAgIE5PUk1BTCAoUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfRElTUExBWSk7Ci0KLSAgICAgICAgaW50IG1JRDsKLSAgICAgICAgUHJpb3JpdHkoaW50IGlkKSB7Ci0gICAgICAgICAgICBtSUQgPSBpZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgdmFsaWRhdGUoKSB7Ci0gICAgICAgIGlmIChtQ29udGV4dCA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkNhbGxpbmcgUlMgd2l0aCBubyBDb250ZXh0IGFjdGl2ZS4iKTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogQ2hhbmdlIHRoZSBwcmlvcml0eSBvZiB0aGUgd29ya2VyIHRocmVhZHMgZm9yIHRoaXMgY29udGV4dC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwIE5ldyBwcmlvcml0eSB0byBiZSBzZXQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UHJpb3JpdHkoUHJpb3JpdHkgcCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICBuQ29udGV4dFNldFByaW9yaXR5KHAubUlEKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY2xhc3MgTWVzc2FnZVRocmVhZCBleHRlbmRzIFRocmVhZCB7Ci0gICAgICAgIFJlbmRlclNjcmlwdCBtUlM7Ci0gICAgICAgIGJvb2xlYW4gbVJ1biA9IHRydWU7Ci0gICAgICAgIGludFtdIG1BdXhEYXRhID0gbmV3IGludFsyXTsKLQotICAgICAgICBzdGF0aWMgZmluYWwgaW50IFJTX01FU1NBR0VfVE9fQ0xJRU5UX05PTkUgPSAwOwotICAgICAgICBzdGF0aWMgZmluYWwgaW50IFJTX01FU1NBR0VfVE9fQ0xJRU5UX0VYQ0VQVElPTiA9IDE7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgUlNfTUVTU0FHRV9UT19DTElFTlRfUkVTSVpFID0gMjsKLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBSU19NRVNTQUdFX1RPX0NMSUVOVF9FUlJPUiA9IDM7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgUlNfTUVTU0FHRV9UT19DTElFTlRfVVNFUiA9IDQ7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgUlNfTUVTU0FHRV9UT19DTElFTlRfTkVXX0JVRkZFUiA9IDU7Ci0KLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBSU19FUlJPUl9GQVRBTF9ERUJVRyA9IDB4MDgwMDsKLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBSU19FUlJPUl9GQVRBTF9VTktOT1dOID0gMHgxMDAwOwotCi0gICAgICAgIE1lc3NhZ2VUaHJlYWQoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgICAgICBzdXBlcigiUlNNZXNzYWdlVGhyZWFkIik7Ci0gICAgICAgICAgICBtUlMgPSByczsKLQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIHRlbXBvcmFyeSBzb2x1dGlvbi4gIFRoZSBmaW5hbCBzb2x1dGlvbiB3aWxsCi0gICAgICAgICAgICAvLyB1c2VkIHR5cGVkIGFsbG9jYXRpb25zIHdoZXJlIHRoZSBtZXNzYWdlIGlkIGlzIHRoZSB0eXBlIGluZGljYXRvci4KLSAgICAgICAgICAgIGludFtdIHJidWYgPSBuZXcgaW50WzE2XTsKLSAgICAgICAgICAgIG1SUy5uQ29udGV4dEluaXRUb0NsaWVudChtUlMubUNvbnRleHQpOwotICAgICAgICAgICAgd2hpbGUobVJ1bikgewotICAgICAgICAgICAgICAgIHJidWZbMF0gPSAwOwotICAgICAgICAgICAgICAgIGludCBtc2cgPSBtUlMubkNvbnRleHRQZWVrTWVzc2FnZShtUlMubUNvbnRleHQsIG1BdXhEYXRhKTsKLSAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IG1BdXhEYXRhWzFdOwotICAgICAgICAgICAgICAgIGludCBzdWJJRCA9IG1BdXhEYXRhWzBdOwotCi0gICAgICAgICAgICAgICAgaWYgKG1zZyA9PSBSU19NRVNTQUdFX1RPX0NMSUVOVF9VU0VSKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoc2l6ZT4+MikgPj0gcmJ1Zi5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJidWYgPSBuZXcgaW50WyhzaXplICsgMykgPj4gMl07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1SUy5uQ29udGV4dEdldFVzZXJNZXNzYWdlKG1SUy5tQ29udGV4dCwgcmJ1ZikgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgIFJTX01FU1NBR0VfVE9fQ0xJRU5UX1VTRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0RyaXZlckV4Y2VwdGlvbigiRXJyb3IgcHJvY2Vzc2luZyBtZXNzYWdlIGZyb20gUmVuZGVyU2NyaXB0LiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYobVJTLm1NZXNzYWdlQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVJTLm1NZXNzYWdlQ2FsbGJhY2subURhdGEgPSByYnVmOwotICAgICAgICAgICAgICAgICAgICAgICAgbVJTLm1NZXNzYWdlQ2FsbGJhY2subUlEID0gc3ViSUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUlMubU1lc3NhZ2VDYWxsYmFjay5tTGVuZ3RoID0gc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1SUy5tTWVzc2FnZUNhbGxiYWNrLnJ1bigpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJSZWNlaXZlZCBhIG1lc3NhZ2UgZnJvbSB0aGUgc2NyaXB0IHdpdGggbm8gbWVzc2FnZSBoYW5kbGVyIGluc3RhbGxlZC4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobXNnID09IFJTX01FU1NBR0VfVE9fQ0xJRU5UX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBlID0gbVJTLm5Db250ZXh0R2V0RXJyb3JNZXNzYWdlKG1SUy5tQ29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgUlNSdW50aW1lRXhjZXB0aW9uIHVuZGVyIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gMSkgSXQgaXMgYW4gdW5rbm93biBmYXRhbCBlcnJvci4KLSAgICAgICAgICAgICAgICAgICAgLy8gMikgSXQgaXMgYSBkZWJ1ZyBmYXRhbCBlcnJvciwgYW5kIHdlIGFyZSBub3QgaW4gYQotICAgICAgICAgICAgICAgICAgICAvLyAgICBkZWJ1ZyBjb250ZXh0LgotICAgICAgICAgICAgICAgICAgICAvLyAzKSBJdCBpcyBhIGRlYnVnIGZhdGFsIGVycm9yLCBhbmQgd2UgZG8gbm90IGhhdmUgYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgZXJyb3IgY2FsbGJhY2suCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdWJJRCA+PSBSU19FUlJPUl9GQVRBTF9VTktOT1dOIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoc3ViSUQgPj0gUlNfRVJST1JfRkFUQUxfREVCVUcgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAobVJTLm1Db250ZXh0VHlwZSAhPSBDb250ZXh0VHlwZS5ERUJVRyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICBtUlMubUVycm9yQ2FsbGJhY2sgPT0gbnVsbCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJGYXRhbCBlcnJvciAiICsgc3ViSUQgKyAiLCBkZXRhaWxzOiAiICsgZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZihtUlMubUVycm9yQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVJTLm1FcnJvckNhbGxiYWNrLm1FcnJvck1lc3NhZ2UgPSBlOwotICAgICAgICAgICAgICAgICAgICAgICAgbVJTLm1FcnJvckNhbGxiYWNrLm1FcnJvck51bSA9IHN1YklEOwotICAgICAgICAgICAgICAgICAgICAgICAgbVJTLm1FcnJvckNhbGxiYWNrLnJ1bigpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZC51dGlsLkxvZy5lKExPR19UQUcsICJub24gZmF0YWwgUlMgZXJyb3IsICIgKyBlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCB0aHJvdyBoZXJlLiBJbiB0aGVzZSBjYXNlcywgd2UgZG8gbm90IGhhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgZmF0YWwgZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1zZyA9PSBSU19NRVNTQUdFX1RPX0NMSUVOVF9ORVdfQlVGRkVSKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uc2VuZEJ1ZmZlck5vdGlmaWNhdGlvbihzdWJJRCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIDI6IHRlYXJkb3duLgotICAgICAgICAgICAgICAgIC8vIEJ1dCB3ZSB3YW50IHRvIGF2b2lkIHN0YXJ2aW5nIG90aGVyIHRocmVhZHMgZHVyaW5nCi0gICAgICAgICAgICAgICAgLy8gdGVhcmRvd24gYnkgeWllbGRpbmcgdW50aWwgdGhlIG5leHQgbGluZSBpbiB0aGUgZGVzdHJ1Y3RvcgotICAgICAgICAgICAgICAgIC8vIGNhbiBleGVjdXRlIHRvIHNldCBtUnVuID0gZmFsc2UKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBzbGVlcCgxLCAwKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvL0xvZy5kKExPR19UQUcsICJNZXNzYWdlVGhyZWFkIGV4aXRpbmcuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZW5kZXJTY3JpcHQoQ29udGV4dCBjdHgpIHsKLSAgICAgICAgbUNvbnRleHRUeXBlID0gQ29udGV4dFR5cGUuTk9STUFMOwotICAgICAgICBpZiAoY3R4ICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1BcHBsaWNhdGlvbkNvbnRleHQgPSBjdHguZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgUmVuZGVyU2NyaXB0IGNvbnRleHQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBhcHBsaWNhdGlvbiBjb250ZXh0LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBDb250ZXh0IGdldEFwcGxpY2F0aW9uQ29udGV4dCgpIHsKLSAgICAgICAgcmV0dXJuIG1BcHBsaWNhdGlvbkNvbnRleHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFJlbmRlclNjcmlwdCBjcmVhdGUoQ29udGV4dCBjdHgsIGludCBzZGtWZXJzaW9uKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGUoY3R4LCBzZGtWZXJzaW9uLCBDb250ZXh0VHlwZS5OT1JNQUwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhIFJlbmRlclNjcmlwdCBjb250ZXh0LgotICAgICAqCi0gICAgICogQGhpZGUKLSAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0LgotICAgICAqIEByZXR1cm4gUmVuZGVyU2NyaXB0Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBSZW5kZXJTY3JpcHQgY3JlYXRlKENvbnRleHQgY3R4LCBpbnQgc2RrVmVyc2lvbiwgQ29udGV4dFR5cGUgY3QpIHsKLSAgICAgICAgaWYgKCFzSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJSZW5kZXJTY3JpcHQuY3JlYXRlKCkgY2FsbGVkIHdoZW4gZGlzYWJsZWQ7IHNvbWVvbmUgaXMgbGlrZWx5IHRvIGNyYXNoIik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclNjcmlwdCBycyA9IG5ldyBSZW5kZXJTY3JpcHQoY3R4KTsKLQotICAgICAgICBycy5tRGV2ID0gcnMubkRldmljZUNyZWF0ZSgpOwotICAgICAgICBycy5tQ29udGV4dCA9IHJzLm5Db250ZXh0Q3JlYXRlKHJzLm1EZXYsIDAsIHNka1ZlcnNpb24sIGN0Lm1JRCk7Ci0gICAgICAgIHJzLm1Db250ZXh0VHlwZSA9IGN0OwotICAgICAgICBpZiAocnMubUNvbnRleHQgPT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTRHJpdmVyRXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRlIFJTIGNvbnRleHQuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcnMubU1lc3NhZ2VUaHJlYWQgPSBuZXcgTWVzc2FnZVRocmVhZChycyk7Ci0gICAgICAgIHJzLm1NZXNzYWdlVGhyZWFkLnN0YXJ0KCk7Ci0gICAgICAgIHJldHVybiByczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBSZW5kZXJTY3JpcHQgY29udGV4dC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQuCi0gICAgICogQHJldHVybiBSZW5kZXJTY3JpcHQKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFJlbmRlclNjcmlwdCBjcmVhdGUoQ29udGV4dCBjdHgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZShjdHgsIENvbnRleHRUeXBlLk5PUk1BTCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGEgUmVuZGVyU2NyaXB0IGNvbnRleHQuCi0gICAgICoKLSAgICAgKgotICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQuCi0gICAgICogQHBhcmFtIGN0IFRoZSB0eXBlIG9mIGNvbnRleHQgdG8gYmUgY3JlYXRlZC4KLSAgICAgKiBAcmV0dXJuIFJlbmRlclNjcmlwdAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUmVuZGVyU2NyaXB0IGNyZWF0ZShDb250ZXh0IGN0eCwgQ29udGV4dFR5cGUgY3QpIHsKLSAgICAgICAgaW50IHYgPSBjdHguZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbjsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZShjdHgsIHYsIGN0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcmludCB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mCi0gICAgICogdGhlIFJTIGNvbnRleHQgdG8gdGhlIGxvZy4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNvbnRleHREdW1wKCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICBuQ29udGV4dER1bXAoMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2FpdCBmb3IgYW55IHBlbmRpbmcgYXN5bmNocm9ub3VzIG9wZWF0aW9ucyAoc3VjaCBhcyBjb3BpZXMgdG8gYSBSUwotICAgICAqIGFsbG9jYXRpb24gb3IgUlMgc2NyaXB0IGV4ZWN1dGlvbnMpIHRvIGNvbXBsZXRlLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZmluaXNoKCkgewotICAgICAgICBuQ29udGV4dEZpbmlzaCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlc3Ryb3lzIHRoaXMgUmVuZGVyU2NyaXB0IGNvbnRleHQuICBPbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLAotICAgICAqIHVzaW5nIHRoaXMgY29udGV4dCBvciBhbnkgb2JqZWN0cyBiZWxvbmdpbmcgdG8gdGhpcyBjb250ZXh0IGlzCi0gICAgICogaWxsZWdhbC4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIG5Db250ZXh0RGVpbml0VG9DbGllbnQobUNvbnRleHQpOwotICAgICAgICBtTWVzc2FnZVRocmVhZC5tUnVuID0gZmFsc2U7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtTWVzc2FnZVRocmVhZC5qb2luKCk7Ci0gICAgICAgIH0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICB9Ci0KLSAgICAgICAgbkNvbnRleHREZXN0cm95KCk7Ci0gICAgICAgIG1Db250ZXh0ID0gMDsKLQotICAgICAgICBuRGV2aWNlRGVzdHJveShtRGV2KTsKLSAgICAgICAgbURldiA9IDA7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBpc0FsaXZlKCkgewotICAgICAgICByZXR1cm4gbUNvbnRleHQgIT0gMDsKLSAgICB9Ci0KLSAgICBpbnQgc2FmZUlEKEJhc2VPYmogbykgewotICAgICAgICBpZihvICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBvLmdldElEKHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0R0wuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0R0wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFjOWM2OC4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdEdMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGl4ZWxGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7Ci0KLS8qKgotICogQGhpZGUKLSAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICogVGhlIEdyYXBoaWNzIGRlcml2aXRpdmUgb2YgUmVuZGVyU2NyaXB0LiAgRXh0ZW5kcyB0aGUgYmFzaWMgY29udGV4dCB0byBhZGQgYQotICogcm9vdCBzY3JpcHQgd2hpY2ggaXMgdGhlIGRpc3BsYXkgd2luZG93IGZvciBncmFwaGljYWwgb3V0cHV0LiAgV2hlbiB0aGUKLSAqIHN5c3RlbSBuZWVkcyB0byB1cGRhdGUgdGhlIGRpc3BsYXkgdGhlIGN1cnJlbnRseSBib3VuZCByb290IHNjcmlwdCB3aWxsIGJlCi0gKiBjYWxsZWQuICBUaGlzIHNjcmlwdCBpcyBleHBlY3RlZCB0byBpc3N1ZSB0aGUgcmVuZGVyaW5nIGNvbW1hbmRzIHRvIHJlcGFpbnQKLSAqIHRoZSBzY3JlZW4uCi0gKgotICogPGRpdiBjbGFzcz0ic3BlY2lhbCByZWZlcmVuY2UiPgotICogPGgzPkRldmVsb3BlciBHdWlkZXM8L2gzPgotICogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIFJlbmRlclNjcmlwdCwgcmVhZCB0aGUKLSAqIDxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVuZGVyc2NyaXB0L2luZGV4Lmh0bWwiPlJlbmRlclNjcmlwdDwvYT4gZGV2ZWxvcGVyIGd1aWRlLjwvcD4KLSAqIDwvZGl2PgotICoqLwotcHVibGljIGNsYXNzIFJlbmRlclNjcmlwdEdMIGV4dGVuZHMgUmVuZGVyU2NyaXB0IHsKLSAgICBpbnQgbVdpZHRoOwotICAgIGludCBtSGVpZ2h0OwotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogQ2xhc3Mgd2hpY2ggaXMgdXNlZCB0byBkZXNjcmliZSBhIHBpeGVsIGZvcm1hdCBmb3IgYSBncmFwaGljYWwgYnVmZmVyLgotICAgICAqIFRoaXMgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgaW50ZW5kZWQgZm9ybWF0IG9mIHRoZSBkaXNwbGF5IHN1cmZhY2UuCi0gICAgICoKLSAgICAgKiBUaGUgY29uZmlndXJhdGlvbiBpcyBkZXNjcmliZWQgYnkgcGFpcnMgb2YgbWluaW11bSBhbmQgcHJlZmVycmVkIGJpdAotICAgICAqIGRlcHRocyBmb3IgZWFjaCBjb21wb25lbnQgd2l0aGluIHRoZSBjb25maWcgYW5kIGFkZGl0aW9uYWwgc3RydWN0dXJhbAotICAgICAqIGluZm9ybWF0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3VyZmFjZUNvbmZpZyB7Ci0gICAgICAgIGludCBtRGVwdGhNaW4gICAgICAgPSAwOwotICAgICAgICBpbnQgbURlcHRoUHJlZiAgICAgID0gMDsKLSAgICAgICAgaW50IG1TdGVuY2lsTWluICAgICA9IDA7Ci0gICAgICAgIGludCBtU3RlbmNpbFByZWYgICAgPSAwOwotICAgICAgICBpbnQgbUNvbG9yTWluICAgICAgID0gODsKLSAgICAgICAgaW50IG1Db2xvclByZWYgICAgICA9IDg7Ci0gICAgICAgIGludCBtQWxwaGFNaW4gICAgICAgPSAwOwotICAgICAgICBpbnQgbUFscGhhUHJlZiAgICAgID0gMDsKLSAgICAgICAgaW50IG1TYW1wbGVzTWluICAgICA9IDE7Ci0gICAgICAgIGludCBtU2FtcGxlc1ByZWYgICAgPSAxOwotICAgICAgICBmbG9hdCBtU2FtcGxlc1EgICAgID0gMS5mOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBTdXJmYWNlQ29uZmlnKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFN1cmZhY2VDb25maWcoU3VyZmFjZUNvbmZpZyBzYykgewotICAgICAgICAgICAgbURlcHRoTWluID0gc2MubURlcHRoTWluOwotICAgICAgICAgICAgbURlcHRoUHJlZiA9IHNjLm1EZXB0aFByZWY7Ci0gICAgICAgICAgICBtU3RlbmNpbE1pbiA9IHNjLm1TdGVuY2lsTWluOwotICAgICAgICAgICAgbVN0ZW5jaWxQcmVmID0gc2MubVN0ZW5jaWxQcmVmOwotICAgICAgICAgICAgbUNvbG9yTWluID0gc2MubUNvbG9yTWluOwotICAgICAgICAgICAgbUNvbG9yUHJlZiA9IHNjLm1Db2xvclByZWY7Ci0gICAgICAgICAgICBtQWxwaGFNaW4gPSBzYy5tQWxwaGFNaW47Ci0gICAgICAgICAgICBtQWxwaGFQcmVmID0gc2MubUFscGhhUHJlZjsKLSAgICAgICAgICAgIG1TYW1wbGVzTWluID0gc2MubVNhbXBsZXNNaW47Ci0gICAgICAgICAgICBtU2FtcGxlc1ByZWYgPSBzYy5tU2FtcGxlc1ByZWY7Ci0gICAgICAgICAgICBtU2FtcGxlc1EgPSBzYy5tU2FtcGxlc1E7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVSYW5nZShpbnQgdW1pbiwgaW50IHVwcmVmLCBpbnQgcm1pbiwgaW50IHJtYXgpIHsKLSAgICAgICAgICAgIGlmICh1bWluIDwgcm1pbiB8fCB1bWluID4gcm1heCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTWluaW11bSB2YWx1ZSBwcm92aWRlZCBvdXQgb2YgcmFuZ2UuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodXByZWYgPCB1bWluKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwcmVmZXJyZWQgbXVzdCBiZSA+PSBNaW5pbXVtLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKiBTZXQgdGhlIHBlci1jb21wb25lbnQgYml0IGRlcHRoIGZvciBjb2xvciAocmVkLCBncmVlbiwgYmx1ZSkuICBUaGlzCi0gICAgICAgICAqIGNvbmZpZ3VyZXMgdGhlIHN1cmZhY2UgZm9yIGFuIHVuc2lnbmVkIGludGVnZXIgYnVmZmVyIHR5cGUuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBtaW5pbXVtCi0gICAgICAgICAqIEBwYXJhbSBwcmVmZXJyZWQKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldENvbG9yKGludCBtaW5pbXVtLCBpbnQgcHJlZmVycmVkKSB7Ci0gICAgICAgICAgICB2YWxpZGF0ZVJhbmdlKG1pbmltdW0sIHByZWZlcnJlZCwgNSwgOCk7Ci0gICAgICAgICAgICBtQ29sb3JNaW4gPSBtaW5pbXVtOwotICAgICAgICAgICAgbUNvbG9yUHJlZiA9IHByZWZlcnJlZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgICAgICogU2V0IHRoZSBiaXQgZGVwdGggZm9yIGFscGhhLiBUaGlzIGNvbmZpZ3VyZXMgdGhlIHN1cmZhY2UgZm9yCi0gICAgICAgICAqIGFuIHVuc2lnbmVkIGludGVnZXIgYnVmZmVyIHR5cGUuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBtaW5pbXVtCi0gICAgICAgICAqIEBwYXJhbSBwcmVmZXJyZWQKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEFscGhhKGludCBtaW5pbXVtLCBpbnQgcHJlZmVycmVkKSB7Ci0gICAgICAgICAgICB2YWxpZGF0ZVJhbmdlKG1pbmltdW0sIHByZWZlcnJlZCwgMCwgOCk7Ci0gICAgICAgICAgICBtQWxwaGFNaW4gPSBtaW5pbXVtOwotICAgICAgICAgICAgbUFscGhhUHJlZiA9IHByZWZlcnJlZDsKLSAgICAgICAgfQotCi0gICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICAgICAqIFNldCB0aGUgYml0IGRlcHRoIGZvciB0aGUgZGVwdGggYnVmZmVyLiBUaGlzIGNvbmZpZ3VyZXMgdGhlCi0gICAgICAgICAqIHN1cmZhY2UgZm9yIGFuIHVuc2lnbmVkIGludGVnZXIgYnVmZmVyIHR5cGUuICBJZiBhIG1pbmltdW0gb2YgMAotICAgICAgICAgKiBpcyBzcGVjaWZpZWQgdGhlbiBpdHMgcG9zc2libGUgbm8gZGVwdGggYnVmZmVyIHdpbGwgYmUKLSAgICAgICAgICogYWxsb2NhdGVkLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gbWluaW11bQotICAgICAgICAgKiBAcGFyYW0gcHJlZmVycmVkCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBzZXREZXB0aChpbnQgbWluaW11bSwgaW50IHByZWZlcnJlZCkgewotICAgICAgICAgICAgdmFsaWRhdGVSYW5nZShtaW5pbXVtLCBwcmVmZXJyZWQsIDAsIDI0KTsKLSAgICAgICAgICAgIG1EZXB0aE1pbiA9IG1pbmltdW07Ci0gICAgICAgICAgICBtRGVwdGhQcmVmID0gcHJlZmVycmVkOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAgICAgKiBDb25maWd1cmUgdGhlIG11bHRpc2FtcGxlIHJlbmRlcmluZy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIG1pbmltdW0gVGhlIHJlcXVpcmVkIG51bWJlciBvZiBzYW1wbGVzLCBtdXN0IGJlIGF0IGxlYXN0IDEuCi0gICAgICAgICAqIEBwYXJhbSBwcmVmZXJyZWQgVGhlIHRhcmdlIG51bWJlciBvZiBzYW1wbGVzLCBtdXN0IGJlIGF0IGxlYXN0Ci0gICAgICAgICAqICAgICAgICAgICAgICAgICAgbWluaW11bQotICAgICAgICAgKiBAcGFyYW0gUSAgVGhlIHF1YWxpdHkgb2Ygc2FtcGxlcywgcmFuZ2UgMC0xLiAgVXNlZCB0byBkZWNpZGUgYmV0d2VlbgotICAgICAgICAgKiAgICAgICAgICAgZGlmZmVyZW50IGZvcm1hdHMgd2hpY2ggaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2Ygc2FtcGxlcyBidXQKLSAgICAgICAgICogICAgICAgICAgIGRpZmZlcmVudCByZW5kZXJpbmcgcXVhbGl0eS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFNhbXBsZXMoaW50IG1pbmltdW0sIGludCBwcmVmZXJyZWQsIGZsb2F0IFEpIHsKLSAgICAgICAgICAgIHZhbGlkYXRlUmFuZ2UobWluaW11bSwgcHJlZmVycmVkLCAxLCAzMik7Ci0gICAgICAgICAgICBpZiAoUSA8IDAuMGYgfHwgUSA+IDEuMGYpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlF1YWxpdHkgb3V0IG9mIDAtMSByYW5nZS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1TYW1wbGVzTWluID0gbWluaW11bTsKLSAgICAgICAgICAgIG1TYW1wbGVzUHJlZiA9IHByZWZlcnJlZDsKLSAgICAgICAgICAgIG1TYW1wbGVzUSA9IFE7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgU3VyZmFjZUNvbmZpZyBtU3VyZmFjZUNvbmZpZzsKLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqIENvbnN0cnVjdCBhIG5ldyBSZW5kZXJTY3JpcHRHTCBjb250ZXh0LgotICAgICAqCi0gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dC4KLSAgICAgKiBAcGFyYW0gc2MgVGhlIGRlc2lyZWQgZm9ybWF0IG9mIHRoZSBwcmltYXJ5IHJlbmRlcmluZyBzdXJmYWNlLgotICAgICAqLwotICAgIHB1YmxpYyBSZW5kZXJTY3JpcHRHTChDb250ZXh0IGN0eCwgU3VyZmFjZUNvbmZpZyBzYykgewotICAgICAgICBzdXBlcihjdHgpOwotICAgICAgICBtU3VyZmFjZUNvbmZpZyA9IG5ldyBTdXJmYWNlQ29uZmlnKHNjKTsKLQotICAgICAgICBpbnQgc2RrVmVyc2lvbiA9IGN0eC5nZXRBcHBsaWNhdGlvbkluZm8oKS50YXJnZXRTZGtWZXJzaW9uOwotCi0gICAgICAgIG1XaWR0aCA9IDA7Ci0gICAgICAgIG1IZWlnaHQgPSAwOwotICAgICAgICBtRGV2ID0gbkRldmljZUNyZWF0ZSgpOwotICAgICAgICBpbnQgZHBpID0gY3R4LmdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eURwaTsKLSAgICAgICAgbUNvbnRleHQgPSBuQ29udGV4dENyZWF0ZUdMKG1EZXYsIDAsIHNka1ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VyZmFjZUNvbmZpZy5tQ29sb3JNaW4sIG1TdXJmYWNlQ29uZmlnLm1Db2xvclByZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VyZmFjZUNvbmZpZy5tQWxwaGFNaW4sIG1TdXJmYWNlQ29uZmlnLm1BbHBoYVByZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VyZmFjZUNvbmZpZy5tRGVwdGhNaW4sIG1TdXJmYWNlQ29uZmlnLm1EZXB0aFByZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VyZmFjZUNvbmZpZy5tU3RlbmNpbE1pbiwgbVN1cmZhY2VDb25maWcubVN0ZW5jaWxQcmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1cmZhY2VDb25maWcubVNhbXBsZXNNaW4sIG1TdXJmYWNlQ29uZmlnLm1TYW1wbGVzUHJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXJmYWNlQ29uZmlnLm1TYW1wbGVzUSwgZHBpKTsKLSAgICAgICAgaWYgKG1Db250ZXh0ID09IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0RyaXZlckV4Y2VwdGlvbigiRmFpbGVkIHRvIGNyZWF0ZSBSUyBjb250ZXh0LiIpOwotICAgICAgICB9Ci0gICAgICAgIG1NZXNzYWdlVGhyZWFkID0gbmV3IE1lc3NhZ2VUaHJlYWQodGhpcyk7Ci0gICAgICAgIG1NZXNzYWdlVGhyZWFkLnN0YXJ0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogQmluZCBhbiBvcyBzdXJmYWNlCi0gICAgICoKLSAgICAgKgotICAgICAqIEBwYXJhbSB3Ci0gICAgICogQHBhcmFtIGgKLSAgICAgKiBAcGFyYW0gc3VyCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0U3VyZmFjZShTdXJmYWNlSG9sZGVyIHN1ciwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIFN1cmZhY2UgcyA9IG51bGw7Ci0gICAgICAgIGlmIChzdXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcyA9IHN1ci5nZXRTdXJmYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVdpZHRoID0gdzsKLSAgICAgICAgbUhlaWdodCA9IGg7Ci0gICAgICAgIG5Db250ZXh0U2V0U3VyZmFjZSh3LCBoLCBzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBCaW5kIGFuIG9zIHN1cmZhY2UKLSAgICAgKgotICAgICAqIEBwYXJhbSB3Ci0gICAgICogQHBhcmFtIGgKLSAgICAgKiBAcGFyYW0gc3VyCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0U3VyZmFjZVRleHR1cmUoU3VyZmFjZVRleHR1cmUgc3VyLCBpbnQgdywgaW50IGgpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgLy9hbmRyb2lkLnV0aWwuTG9nLnYoInJzIiwgInNldCBzdXJmYWNlICIgKyBzdXIgKyAiIHc9IiArIHcgKyAiLCBoPSIgKyBoKTsKLQotICAgICAgICBtV2lkdGggPSB3OwotICAgICAgICBtSGVpZ2h0ID0gaDsKLSAgICAgICAgbkNvbnRleHRTZXRTdXJmYWNlVGV4dHVyZSh3LCBoLCBzdXIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqIHJldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSBsYXN0IHNldCBzdXJmYWNlLgotICAgICAqCi0gICAgICogQHJldHVybiBpbnQKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldEhlaWdodCgpIHsKLSAgICAgICAgcmV0dXJuIG1IZWlnaHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogcmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgbGFzdCBzZXQgc3VyZmFjZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gaW50Ci0gICAgICovCi0gICAgcHVibGljIGludCBnZXRXaWR0aCgpIHsKLSAgICAgICAgcmV0dXJuIG1XaWR0aDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBUZW1wb3Jhcmx5IGhhbHQgY2FsbHMgdG8gdGhlIHJvb3QgcmVuZGVyaW5nIHNjcmlwdC4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHBhdXNlKCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICBuQ29udGV4dFBhdXNlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogUmVzdW1lIGNhbGxzIHRvIHRoZSByb290IHJlbmRlcmluZyBzY3JpcHQuCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZXN1bWUoKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIG5Db250ZXh0UmVzdW1lKCk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBTZXQgdGhlIHNjcmlwdCB0byBoYW5kbGUgY2FsbHMgdG8gcmVuZGVyIHRoZSBwcmltYXJ5IHN1cmZhY2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcyBHcmFwaGljcyBzY3JpcHQgdG8gcHJvY2VzcyByZW5kZXJpbmcgcmVxdWVzdHMuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYmluZFJvb3RTY3JpcHQoU2NyaXB0IHMpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgbkNvbnRleHRCaW5kUm9vdFNjcmlwdChzYWZlSUQocykpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgotICAgICAqIFNldCB0aGUgZGVmYXVsdCBQcm9ncmFtU3RvcmUgb2JqZWN0IHNlZW4gYXMgdGhlIHBhcmVudCBzdGF0ZSBieSB0aGUgcm9vdAotICAgICAqIHJlbmRlcmluZyBzY3JpcHQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGJpbmRQcm9ncmFtU3RvcmUoUHJvZ3JhbVN0b3JlIHApIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlKHNhZmVJRChwKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2Ci0gICAgICogU2V0IHRoZSBkZWZhdWx0IFByb2dyYW1GcmFnbWVudCBvYmplY3Qgc2VlbiBhcyB0aGUgcGFyZW50IHN0YXRlIGJ5IHRoZQotICAgICAqIHJvb3QgcmVuZGVyaW5nIHNjcmlwdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYmluZFByb2dyYW1GcmFnbWVudChQcm9ncmFtRnJhZ21lbnQgcCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICBuQ29udGV4dEJpbmRQcm9ncmFtRnJhZ21lbnQoc2FmZUlEKHApKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBTZXQgdGhlIGRlZmF1bHQgUHJvZ3JhbVJhc3RlciBvYmplY3Qgc2VlbiBhcyB0aGUgcGFyZW50IHN0YXRlIGJ5IHRoZQotICAgICAqIHJvb3QgcmVuZGVyaW5nIHNjcmlwdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYmluZFByb2dyYW1SYXN0ZXIoUHJvZ3JhbVJhc3RlciBwKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIG5Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIoc2FmZUlEKHApKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKLSAgICAgKiBTZXQgdGhlIGRlZmF1bHQgUHJvZ3JhbVZlcnRleCBvYmplY3Qgc2VlbiBhcyB0aGUgcGFyZW50IHN0YXRlIGJ5IHRoZQotICAgICAqIHJvb3QgcmVuZGVyaW5nIHNjcmlwdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYmluZFByb2dyYW1WZXJ0ZXgoUHJvZ3JhbVZlcnRleCBwKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIG5Db250ZXh0QmluZFByb2dyYW1WZXJ0ZXgoc2FmZUlEKHApKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2FtcGxlci5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMzA1NWZlLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2FtcGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwotCi0vKioKLSAqIFNhbXBsZXIgb2JqZWN0IHRoYXQgZGVmaW5lcyBob3cgQWxsb2NhdGlvbnMgY2FuIGJlIHJlYWQgYXMgdGV4dHVyZXMgd2l0aGluIGEKLSAqIGtlcm5lbC4gU2FtcGxlcnMgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUge0Bjb2RlIHJzU2FtcGxlfSBydW50aW1lCi0gKiBmdW5jdGlvbiB0byByZXR1cm4gdmFsdWVzIGZyb20gbm9ybWFsaXplZCBjb29yZGluYXRlcy4KLSAqCi0gKiBBbnkgQWxsb2NhdGlvbiB1c2VkIHdpdGggYSBTYW1wbGVyIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgd2l0aCB7QGxpbmsKLSAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24jVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRX07IHVzaW5nIGEgU2FtcGxlciBvbgotICogYW4ge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb259IHRoYXQgd2FzIG5vdCBjcmVhdGVkIHdpdGgge0BsaW5rCi0gKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uI1VTQUdFX0dSQVBISUNTX1RFWFRVUkV9IGlzIHVuZGVmaW5lZC4KLSAqKi8KLXB1YmxpYyBjbGFzcyBTYW1wbGVyIGV4dGVuZHMgQmFzZU9iaiB7Ci0gICAgcHVibGljIGVudW0gVmFsdWUgewotICAgICAgICBORUFSRVNUICgwKSwKLSAgICAgICAgTElORUFSICgxKSwKLSAgICAgICAgTElORUFSX01JUF9MSU5FQVIgKDIpLAotICAgICAgICBMSU5FQVJfTUlQX05FQVJFU1QgKDUpLAotICAgICAgICBXUkFQICgzKSwKLSAgICAgICAgQ0xBTVAgKDQpLAotICAgICAgICBNSVJST1JFRF9SRVBFQVQgKDYpOwotCi0gICAgICAgIGludCBtSUQ7Ci0gICAgICAgIFZhbHVlKGludCBpZCkgewotICAgICAgICAgICAgbUlEID0gaWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBWYWx1ZSBtTWluOwotICAgIFZhbHVlIG1NYWc7Ci0gICAgVmFsdWUgbVdyYXBTOwotICAgIFZhbHVlIG1XcmFwVDsKLSAgICBWYWx1ZSBtV3JhcFI7Ci0gICAgZmxvYXQgbUFuaXNvOwotCi0gICAgU2FtcGxlcihpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBzdXBlcihpZCwgcnMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gbWluaWZpY2F0aW9uIHNldHRpbmcgZm9yIHRoZSBzYW1wbGVyCi0gICAgICovCi0gICAgcHVibGljIFZhbHVlIGdldE1pbmlmaWNhdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIG1NaW47Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiBtYWduaWZpY2F0aW9uIHNldHRpbmcgZm9yIHRoZSBzYW1wbGVyCi0gICAgICovCi0gICAgcHVibGljIFZhbHVlIGdldE1hZ25pZmljYXRpb24oKSB7Ci0gICAgICAgIHJldHVybiBtTWFnOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gUyB3cmFwcGluZyBtb2RlIGZvciB0aGUgc2FtcGxlcgotICAgICAqLwotICAgIHB1YmxpYyBWYWx1ZSBnZXRXcmFwUygpIHsKLSAgICAgICAgcmV0dXJuIG1XcmFwUzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIFQgd3JhcHBpbmcgbW9kZSBmb3IgdGhlIHNhbXBsZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgVmFsdWUgZ2V0V3JhcFQoKSB7Ci0gICAgICAgIHJldHVybiBtV3JhcFQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiBhbmlzb3Ryb3B5IHNldHRpbmcgZm9yIHRoZSBzYW1wbGVyCi0gICAgICovCi0gICAgcHVibGljIGZsb2F0IGdldEFuaXNvdHJvcHkoKSB7Ci0gICAgICAgIHJldHVybiBtQW5pc287Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgYSBzYW1wbGVyIHdpdGggbWluIGFuZCBtYWcgc2V0IHRvIG5lYXJlc3QgYW5kIHdyYXAgbW9kZXMgc2V0IHRvCi0gICAgICogY2xhbXAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgc2FtcGxlciB3aWxsIGJlbG9uZy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2FtcGxlcgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2FtcGxlciBDTEFNUF9ORUFSRVNUKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpZihycy5tU2FtcGxlcl9DTEFNUF9ORUFSRVNUID09IG51bGwpIHsKLSAgICAgICAgICAgIEJ1aWxkZXIgYiA9IG5ldyBCdWlsZGVyKHJzKTsKLSAgICAgICAgICAgIGIuc2V0TWluaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOwotICAgICAgICAgICAgYi5zZXRNYWduaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOwotICAgICAgICAgICAgYi5zZXRXcmFwUyhWYWx1ZS5DTEFNUCk7Ci0gICAgICAgICAgICBiLnNldFdyYXBUKFZhbHVlLkNMQU1QKTsKLSAgICAgICAgICAgIHJzLm1TYW1wbGVyX0NMQU1QX05FQVJFU1QgPSBiLmNyZWF0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tU2FtcGxlcl9DTEFNUF9ORUFSRVNUOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIGEgc2FtcGxlciB3aXRoIG1pbiBhbmQgbWFnIHNldCB0byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgc2V0IHRvCi0gICAgICogY2xhbXAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgc2FtcGxlciB3aWxsIGJlbG9uZy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2FtcGxlcgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2FtcGxlciBDTEFNUF9MSU5FQVIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1TYW1wbGVyX0NMQU1QX0xJTkVBUiA9PSBudWxsKSB7Ci0gICAgICAgICAgICBCdWlsZGVyIGIgPSBuZXcgQnVpbGRlcihycyk7Ci0gICAgICAgICAgICBiLnNldE1pbmlmaWNhdGlvbihWYWx1ZS5MSU5FQVIpOwotICAgICAgICAgICAgYi5zZXRNYWduaWZpY2F0aW9uKFZhbHVlLkxJTkVBUik7Ci0gICAgICAgICAgICBiLnNldFdyYXBTKFZhbHVlLkNMQU1QKTsKLSAgICAgICAgICAgIGIuc2V0V3JhcFQoVmFsdWUuQ0xBTVApOwotICAgICAgICAgICAgcnMubVNhbXBsZXJfQ0xBTVBfTElORUFSID0gYi5jcmVhdGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubVNhbXBsZXJfQ0xBTVBfTElORUFSOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIGEgc2FtcGxlciB3aXRoIG1hZyBzZXQgdG8gbGluZWFyLCBtaW4gbGluZWFyIG1pcG1hcCBsaW5lYXIsIGFuZAotICAgICAqIHdyYXAgbW9kZXMgc2V0IHRvIGNsYW1wLgotICAgICAqCi0gICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHNhbXBsZXIgd2lsbCBiZWxvbmcuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNhbXBsZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNhbXBsZXIgQ0xBTVBfTElORUFSX01JUF9MSU5FQVIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1TYW1wbGVyX0NMQU1QX0xJTkVBUl9NSVBfTElORUFSID09IG51bGwpIHsKLSAgICAgICAgICAgIEJ1aWxkZXIgYiA9IG5ldyBCdWlsZGVyKHJzKTsKLSAgICAgICAgICAgIGIuc2V0TWluaWZpY2F0aW9uKFZhbHVlLkxJTkVBUl9NSVBfTElORUFSKTsKLSAgICAgICAgICAgIGIuc2V0TWFnbmlmaWNhdGlvbihWYWx1ZS5MSU5FQVIpOwotICAgICAgICAgICAgYi5zZXRXcmFwUyhWYWx1ZS5DTEFNUCk7Ci0gICAgICAgICAgICBiLnNldFdyYXBUKFZhbHVlLkNMQU1QKTsKLSAgICAgICAgICAgIHJzLm1TYW1wbGVyX0NMQU1QX0xJTkVBUl9NSVBfTElORUFSID0gYi5jcmVhdGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnMubVNhbXBsZXJfQ0xBTVBfTElORUFSX01JUF9MSU5FQVI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgYSBzYW1wbGVyIHdpdGggbWluIGFuZCBtYWcgc2V0IHRvIG5lYXJlc3QgYW5kIHdyYXAgbW9kZXMgc2V0IHRvCi0gICAgICogd3JhcC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBzYW1wbGVyIHdpbGwgYmVsb25nLgotICAgICAqCi0gICAgICogQHJldHVybiBTYW1wbGVyCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTYW1wbGVyIFdSQVBfTkVBUkVTVChSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubVNhbXBsZXJfV1JBUF9ORUFSRVNUID09IG51bGwpIHsKLSAgICAgICAgICAgIEJ1aWxkZXIgYiA9IG5ldyBCdWlsZGVyKHJzKTsKLSAgICAgICAgICAgIGIuc2V0TWluaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOwotICAgICAgICAgICAgYi5zZXRNYWduaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOwotICAgICAgICAgICAgYi5zZXRXcmFwUyhWYWx1ZS5XUkFQKTsKLSAgICAgICAgICAgIGIuc2V0V3JhcFQoVmFsdWUuV1JBUCk7Ci0gICAgICAgICAgICBycy5tU2FtcGxlcl9XUkFQX05FQVJFU1QgPSBiLmNyZWF0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tU2FtcGxlcl9XUkFQX05FQVJFU1Q7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgYSBzYW1wbGVyIHdpdGggbWluIGFuZCBtYWcgc2V0IHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyBzZXQgdG8KLSAgICAgKiB3cmFwLgotICAgICAqCi0gICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHNhbXBsZXIgd2lsbCBiZWxvbmcuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNhbXBsZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNhbXBsZXIgV1JBUF9MSU5FQVIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1TYW1wbGVyX1dSQVBfTElORUFSID09IG51bGwpIHsKLSAgICAgICAgICAgIEJ1aWxkZXIgYiA9IG5ldyBCdWlsZGVyKHJzKTsKLSAgICAgICAgICAgIGIuc2V0TWluaWZpY2F0aW9uKFZhbHVlLkxJTkVBUik7Ci0gICAgICAgICAgICBiLnNldE1hZ25pZmljYXRpb24oVmFsdWUuTElORUFSKTsKLSAgICAgICAgICAgIGIuc2V0V3JhcFMoVmFsdWUuV1JBUCk7Ci0gICAgICAgICAgICBiLnNldFdyYXBUKFZhbHVlLldSQVApOwotICAgICAgICAgICAgcnMubVNhbXBsZXJfV1JBUF9MSU5FQVIgPSBiLmNyZWF0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tU2FtcGxlcl9XUkFQX0xJTkVBUjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSBhIHNhbXBsZXIgd2l0aCBtYWcgc2V0IHRvIGxpbmVhciwgbWluIGxpbmVhciBtaXBtYXAgbGluZWFyLCBhbmQKLSAgICAgKiB3cmFwIG1vZGVzIHNldCB0byB3cmFwLgotICAgICAqCi0gICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHNhbXBsZXIgd2lsbCBiZWxvbmcuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNhbXBsZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNhbXBsZXIgV1JBUF9MSU5FQVJfTUlQX0xJTkVBUihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaWYocnMubVNhbXBsZXJfV1JBUF9MSU5FQVJfTUlQX0xJTkVBUiA9PSBudWxsKSB7Ci0gICAgICAgICAgICBCdWlsZGVyIGIgPSBuZXcgQnVpbGRlcihycyk7Ci0gICAgICAgICAgICBiLnNldE1pbmlmaWNhdGlvbihWYWx1ZS5MSU5FQVJfTUlQX0xJTkVBUik7Ci0gICAgICAgICAgICBiLnNldE1hZ25pZmljYXRpb24oVmFsdWUuTElORUFSKTsKLSAgICAgICAgICAgIGIuc2V0V3JhcFMoVmFsdWUuV1JBUCk7Ci0gICAgICAgICAgICBiLnNldFdyYXBUKFZhbHVlLldSQVApOwotICAgICAgICAgICAgcnMubVNhbXBsZXJfV1JBUF9MSU5FQVJfTUlQX0xJTkVBUiA9IGIuY3JlYXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1TYW1wbGVyX1dSQVBfTElORUFSX01JUF9MSU5FQVI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgYSBzYW1wbGVyIHdpdGggbWluIGFuZCBtYWcgc2V0IHRvIG5lYXJlc3QgYW5kIHdyYXAgbW9kZXMgc2V0IHRvCi0gICAgICogbWlycm9yZWQgcmVwZWF0LgotICAgICAqCi0gICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHNhbXBsZXIgd2lsbCBiZWxvbmcuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNhbXBsZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNhbXBsZXIgTUlSUk9SRURfUkVQRUFUX05FQVJFU1QoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9ORUFSRVNUID09IG51bGwpIHsKLSAgICAgICAgICAgIEJ1aWxkZXIgYiA9IG5ldyBCdWlsZGVyKHJzKTsKLSAgICAgICAgICAgIGIuc2V0TWluaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOwotICAgICAgICAgICAgYi5zZXRNYWduaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOwotICAgICAgICAgICAgYi5zZXRXcmFwUyhWYWx1ZS5NSVJST1JFRF9SRVBFQVQpOwotICAgICAgICAgICAgYi5zZXRXcmFwVChWYWx1ZS5NSVJST1JFRF9SRVBFQVQpOwotICAgICAgICAgICAgcnMubVNhbXBsZXJfTUlSUk9SRURfUkVQRUFUX05FQVJFU1QgPSBiLmNyZWF0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBycy5tU2FtcGxlcl9NSVJST1JFRF9SRVBFQVRfTkVBUkVTVDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSBhIHNhbXBsZXIgd2l0aCBtaW4gYW5kIG1hZyBzZXQgdG8gbGluZWFyIGFuZCB3cmFwIG1vZGVzIHNldCB0bwotICAgICAqIG1pcnJvcmVkIHJlcGVhdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBzYW1wbGVyIHdpbGwgYmVsb25nLgotICAgICAqCi0gICAgICogQHJldHVybiBTYW1wbGVyCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTYW1wbGVyIE1JUlJPUkVEX1JFUEVBVF9MSU5FQVIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9MSU5FQVIgPT0gbnVsbCkgewotICAgICAgICAgICAgQnVpbGRlciBiID0gbmV3IEJ1aWxkZXIocnMpOwotICAgICAgICAgICAgYi5zZXRNaW5pZmljYXRpb24oVmFsdWUuTElORUFSKTsKLSAgICAgICAgICAgIGIuc2V0TWFnbmlmaWNhdGlvbihWYWx1ZS5MSU5FQVIpOwotICAgICAgICAgICAgYi5zZXRXcmFwUyhWYWx1ZS5NSVJST1JFRF9SRVBFQVQpOwotICAgICAgICAgICAgYi5zZXRXcmFwVChWYWx1ZS5NSVJST1JFRF9SRVBFQVQpOwotICAgICAgICAgICAgcnMubVNhbXBsZXJfTUlSUk9SRURfUkVQRUFUX0xJTkVBUiA9IGIuY3JlYXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9MSU5FQVI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgYSBzYW1wbGVyIHdpdGggbWluIGFuZCBtYWcgc2V0IHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyBzZXQgdG8KLSAgICAgKiBtaXJyb3JlZCByZXBlYXQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgc2FtcGxlciB3aWxsIGJlbG9uZy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2FtcGxlcgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2FtcGxlciBNSVJST1JFRF9SRVBFQVRfTElORUFSX01JUF9MSU5FQVIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIGlmKHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9MSU5FQVJfTUlQX0xJTkVBUiA9PSBudWxsKSB7Ci0gICAgICAgICAgICBCdWlsZGVyIGIgPSBuZXcgQnVpbGRlcihycyk7Ci0gICAgICAgICAgICBiLnNldE1pbmlmaWNhdGlvbihWYWx1ZS5MSU5FQVJfTUlQX0xJTkVBUik7Ci0gICAgICAgICAgICBiLnNldE1hZ25pZmljYXRpb24oVmFsdWUuTElORUFSKTsKLSAgICAgICAgICAgIGIuc2V0V3JhcFMoVmFsdWUuTUlSUk9SRURfUkVQRUFUKTsKLSAgICAgICAgICAgIGIuc2V0V3JhcFQoVmFsdWUuTUlSUk9SRURfUkVQRUFUKTsKLSAgICAgICAgICAgIHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9MSU5FQVJfTUlQX0xJTkVBUiA9IGIuY3JlYXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9MSU5FQVJfTUlQX0xJTkVBUjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCdWlsZGVyIGZvciBjcmVhdGluZyBub24tc3RhbmRhcmQgc2FtcGxlcnMuICBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmCi0gICAgICogYSBTYW1wbGVyIHdpdGggZGlmZmVyZW50IG1pbiBhbmQgbWFnIG1vZGVzIGlzIGRlc2lyZWQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKLSAgICAgICAgUmVuZGVyU2NyaXB0IG1SUzsKLSAgICAgICAgVmFsdWUgbU1pbjsKLSAgICAgICAgVmFsdWUgbU1hZzsKLSAgICAgICAgVmFsdWUgbVdyYXBTOwotICAgICAgICBWYWx1ZSBtV3JhcFQ7Ci0gICAgICAgIFZhbHVlIG1XcmFwUjsKLSAgICAgICAgZmxvYXQgbUFuaXNvOwotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICAgICAgbVJTID0gcnM7Ci0gICAgICAgICAgICBtTWluID0gVmFsdWUuTkVBUkVTVDsKLSAgICAgICAgICAgIG1NYWcgPSBWYWx1ZS5ORUFSRVNUOwotICAgICAgICAgICAgbVdyYXBTID0gVmFsdWUuV1JBUDsKLSAgICAgICAgICAgIG1XcmFwVCA9IFZhbHVlLldSQVA7Ci0gICAgICAgICAgICBtV3JhcFIgPSBWYWx1ZS5XUkFQOwotICAgICAgICAgICAgbUFuaXNvID0gMS4wZjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldE1pbmlmaWNhdGlvbihWYWx1ZSB2KSB7Ci0gICAgICAgICAgICBpZiAodiA9PSBWYWx1ZS5ORUFSRVNUIHx8Ci0gICAgICAgICAgICAgICAgdiA9PSBWYWx1ZS5MSU5FQVIgfHwKLSAgICAgICAgICAgICAgICB2ID09IFZhbHVlLkxJTkVBUl9NSVBfTElORUFSIHx8Ci0gICAgICAgICAgICAgICAgdiA9PSBWYWx1ZS5MSU5FQVJfTUlQX05FQVJFU1QpIHsKLSAgICAgICAgICAgICAgICBtTWluID0gdjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0TWFnbmlmaWNhdGlvbihWYWx1ZSB2KSB7Ci0gICAgICAgICAgICBpZiAodiA9PSBWYWx1ZS5ORUFSRVNUIHx8IHYgPT0gVmFsdWUuTElORUFSKSB7Ci0gICAgICAgICAgICAgICAgbU1hZyA9IHY7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgdmFsdWUiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFdyYXBTKFZhbHVlIHYpIHsKLSAgICAgICAgICAgIGlmICh2ID09IFZhbHVlLldSQVAgfHwgdiA9PSBWYWx1ZS5DTEFNUCB8fCB2ID09IFZhbHVlLk1JUlJPUkVEX1JFUEVBVCkgewotICAgICAgICAgICAgICAgIG1XcmFwUyA9IHY7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgdmFsdWUiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFdyYXBUKFZhbHVlIHYpIHsKLSAgICAgICAgICAgIGlmICh2ID09IFZhbHVlLldSQVAgfHwgdiA9PSBWYWx1ZS5DTEFNUCB8fCB2ID09IFZhbHVlLk1JUlJPUkVEX1JFUEVBVCkgewotICAgICAgICAgICAgICAgIG1XcmFwVCA9IHY7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgdmFsdWUiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEFuaXNvdHJvcHkoZmxvYXQgdikgewotICAgICAgICAgICAgaWYodiA+PSAwLjBmKSB7Ci0gICAgICAgICAgICAgICAgbUFuaXNvID0gdjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFNhbXBsZXIgY3JlYXRlKCkgewotICAgICAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICBpbnQgaWQgPSBtUlMublNhbXBsZXJDcmVhdGUobU1hZy5tSUQsIG1NaW4ubUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XcmFwUy5tSUQsIG1XcmFwVC5tSUQsIG1XcmFwUi5tSUQsIG1Bbmlzbyk7Ci0gICAgICAgICAgICBTYW1wbGVyIHNhbXBsZXIgPSBuZXcgU2FtcGxlcihpZCwgbVJTKTsKLSAgICAgICAgICAgIHNhbXBsZXIubU1pbiA9IG1NaW47Ci0gICAgICAgICAgICBzYW1wbGVyLm1NYWcgPSBtTWFnOwotICAgICAgICAgICAgc2FtcGxlci5tV3JhcFMgPSBtV3JhcFM7Ci0gICAgICAgICAgICBzYW1wbGVyLm1XcmFwVCA9IG1XcmFwVDsKLSAgICAgICAgICAgIHNhbXBsZXIubVdyYXBSID0gbVdyYXBSOwotICAgICAgICAgICAgc2FtcGxlci5tQW5pc28gPSBtQW5pc287Ci0gICAgICAgICAgICByZXR1cm4gc2FtcGxlcjsKLSAgICAgICAgfQotICAgIH0KLQotfQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdC5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAyNmUwZS4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7Ci0KLS8qKgotICogVGhlIHBhcmVudCBjbGFzcyBmb3IgYWxsIGV4ZWN1dGFibGUgc2NyaXB0cy4gVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgYnkKLSAqIGFwcGxpY2F0aW9ucy4KLSAqKi8KLXB1YmxpYyBjbGFzcyBTY3JpcHQgZXh0ZW5kcyBCYXNlT2JqIHsKLQotICAgIC8qKgotICAgICAqIEtlcm5lbElEIGlzIGFuIGlkZW50aWZpZXIgZm9yIGEgU2NyaXB0ICsgcm9vdCBmdW5jdGlvbiBwYWlyLiBJdCBpcyB1c2VkCi0gICAgICogYXMgYW4gaWRlbnRpZmllciBmb3IgU2NyaXB0R3JvdXAgY3JlYXRpb24uCi0gICAgICoKLSAgICAgKiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgZGlyZWN0bHkgY3JlYXRlZC4gSW5zdGVhZCB1c2UgdGhlIG1ldGhvZCBpbiB0aGUKLSAgICAgKiByZWZsZWN0ZWQgb3IgaW50cmluc2ljIGNvZGUgImdldEtlcm5lbElEX2Z1bmNuYW1lKCkiLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBLZXJuZWxJRCBleHRlbmRzIEJhc2VPYmogewotICAgICAgICBTY3JpcHQgbVNjcmlwdDsKLSAgICAgICAgaW50IG1TbG90OwotICAgICAgICBpbnQgbVNpZzsKLSAgICAgICAgS2VybmVsSUQoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMsIFNjcmlwdCBzLCBpbnQgc2xvdCwgaW50IHNpZykgewotICAgICAgICAgICAgc3VwZXIoaWQsIHJzKTsKLSAgICAgICAgICAgIG1TY3JpcHQgPSBzOwotICAgICAgICAgICAgbVNsb3QgPSBzbG90OwotICAgICAgICAgICAgbVNpZyA9IHNpZzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8S2VybmVsSUQ+IG1LSURzID0gbmV3IFNwYXJzZUFycmF5PEtlcm5lbElEPigpOwotICAgIC8qKgotICAgICAqIE9ubHkgdG8gYmUgdXNlZCBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNsYXNzZXMuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIEtlcm5lbElEIGNyZWF0ZUtlcm5lbElEKGludCBzbG90LCBpbnQgc2lnLCBFbGVtZW50IGVpbiwgRWxlbWVudCBlb3V0KSB7Ci0gICAgICAgIEtlcm5lbElEIGsgPSBtS0lEcy5nZXQoc2xvdCk7Ci0gICAgICAgIGlmIChrICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBrOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGlkID0gbVJTLm5TY3JpcHRLZXJuZWxJRENyZWF0ZShnZXRJRChtUlMpLCBzbG90LCBzaWcpOwotICAgICAgICBpZiAoaWQgPT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTRHJpdmVyRXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRlIEtlcm5lbElEIik7Ci0gICAgICAgIH0KLQotICAgICAgICBrID0gbmV3IEtlcm5lbElEKGlkLCBtUlMsIHRoaXMsIHNsb3QsIHNpZyk7Ci0gICAgICAgIG1LSURzLnB1dChzbG90LCBrKTsKLSAgICAgICAgcmV0dXJuIGs7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmllbGRJRCBpcyBhbiBpZGVudGlmaWVyIGZvciBhIFNjcmlwdCArIGV4cG9ydGVkIGZpZWxkIHBhaXIuIEl0IGlzIHVzZWQKLSAgICAgKiBhcyBhbiBpZGVudGlmaWVyIGZvciBTY3JpcHRHcm91cCBjcmVhdGlvbi4KLSAgICAgKgotICAgICAqIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBkaXJlY3RseSBjcmVhdGVkLiBJbnN0ZWFkIHVzZSB0aGUgbWV0aG9kIGluIHRoZQotICAgICAqIHJlZmxlY3RlZCBvciBpbnRyaW5zaWMgY29kZSAiZ2V0RmllbGRJRF9mdW5jbmFtZSgpIi4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmllbGRJRCBleHRlbmRzIEJhc2VPYmogewotICAgICAgICBTY3JpcHQgbVNjcmlwdDsKLSAgICAgICAgaW50IG1TbG90OwotICAgICAgICBGaWVsZElEKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzLCBTY3JpcHQgcywgaW50IHNsb3QpIHsKLSAgICAgICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgICAgICAgICBtU2NyaXB0ID0gczsKLSAgICAgICAgICAgIG1TbG90ID0gc2xvdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8RmllbGRJRD4gbUZJRHMgPSBuZXcgU3BhcnNlQXJyYXkoKTsKLSAgICAvKioKLSAgICAgKiBPbmx5IHRvIGJlIHVzZWQgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjbGFzc2VzLgotICAgICAqLwotICAgIHByb3RlY3RlZCBGaWVsZElEIGNyZWF0ZUZpZWxkSUQoaW50IHNsb3QsIEVsZW1lbnQgZSkgewotICAgICAgICBGaWVsZElEIGYgPSBtRklEcy5nZXQoc2xvdCk7Ci0gICAgICAgIGlmIChmICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGlkID0gbVJTLm5TY3JpcHRGaWVsZElEQ3JlYXRlKGdldElEKG1SUyksIHNsb3QpOwotICAgICAgICBpZiAoaWQgPT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTRHJpdmVyRXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRlIEZpZWxkSUQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGYgPSBuZXcgRmllbGRJRChpZCwgbVJTLCB0aGlzLCBzbG90KTsKLSAgICAgICAgbUZJRHMucHV0KHNsb3QsIGYpOwotICAgICAgICByZXR1cm4gZjsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIE9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbnZva2UoaW50IHNsb3QpIHsKLSAgICAgICAgbVJTLm5TY3JpcHRJbnZva2UoZ2V0SUQobVJTKSwgc2xvdCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KLSAgICAgKgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGludm9rZShpbnQgc2xvdCwgRmllbGRQYWNrZXIgdikgewotICAgICAgICBpZiAodiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUlMublNjcmlwdEludm9rZVYoZ2V0SUQobVJTKSwgc2xvdCwgdi5nZXREYXRhKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVJTLm5TY3JpcHRJbnZva2UoZ2V0SUQobVJTKSwgc2xvdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgotICAgICAqCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgZm9yRWFjaChpbnQgc2xvdCwgQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCwgRmllbGRQYWNrZXIgdikgewotICAgICAgICBpZiAoYWluID09IG51bGwgJiYgYW91dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgIkF0IGxlYXN0IG9uZSBvZiBhaW4gb3IgYW91dCBpcyByZXF1aXJlZCB0byBiZSBub24tbnVsbC4iKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgaW5faWQgPSAwOwotICAgICAgICBpZiAoYWluICE9IG51bGwpIHsKLSAgICAgICAgICAgIGluX2lkID0gYWluLmdldElEKG1SUyk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IG91dF9pZCA9IDA7Ci0gICAgICAgIGlmIChhb3V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIG91dF9pZCA9IGFvdXQuZ2V0SUQobVJTKTsKLSAgICAgICAgfQotICAgICAgICBieXRlW10gcGFyYW1zID0gbnVsbDsKLSAgICAgICAgaWYgKHYgIT0gbnVsbCkgewotICAgICAgICAgICAgcGFyYW1zID0gdi5nZXREYXRhKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVJTLm5TY3JpcHRGb3JFYWNoKGdldElEKG1SUyksIHNsb3QsIGluX2lkLCBvdXRfaWQsIHBhcmFtcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KLSAgICAgKgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGZvckVhY2goaW50IHNsb3QsIEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQsIEZpZWxkUGFja2VyIHYsIExhdW5jaE9wdGlvbnMgc2MpIHsKLSAgICAgICAgaWYgKGFpbiA9PSBudWxsICYmIGFvdXQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJBdCBsZWFzdCBvbmUgb2YgYWluIG9yIGFvdXQgaXMgcmVxdWlyZWQgdG8gYmUgbm9uLW51bGwuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2MgPT0gbnVsbCkgewotICAgICAgICAgICAgZm9yRWFjaChzbG90LCBhaW4sIGFvdXQsIHYpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGludCBpbl9pZCA9IDA7Ci0gICAgICAgIGlmIChhaW4gIT0gbnVsbCkgewotICAgICAgICAgICAgaW5faWQgPSBhaW4uZ2V0SUQobVJTKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgb3V0X2lkID0gMDsKLSAgICAgICAgaWYgKGFvdXQgIT0gbnVsbCkgewotICAgICAgICAgICAgb3V0X2lkID0gYW91dC5nZXRJRChtUlMpOwotICAgICAgICB9Ci0gICAgICAgIGJ5dGVbXSBwYXJhbXMgPSBudWxsOwotICAgICAgICBpZiAodiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBwYXJhbXMgPSB2LmdldERhdGEoKTsKLSAgICAgICAgfQotICAgICAgICBtUlMublNjcmlwdEZvckVhY2hDbGlwcGVkKGdldElEKG1SUyksIHNsb3QsIGluX2lkLCBvdXRfaWQsIHBhcmFtcywgc2MueHN0YXJ0LCBzYy54ZW5kLCBzYy55c3RhcnQsIHNjLnllbmQsIHNjLnpzdGFydCwgc2MuemVuZCk7Ci0gICAgfQotCi0gICAgU2NyaXB0KGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYmluZEFsbG9jYXRpb24oQWxsb2NhdGlvbiB2YSwgaW50IHNsb3QpIHsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmICh2YSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUlMublNjcmlwdEJpbmRBbGxvY2F0aW9uKGdldElEKG1SUyksIHZhLmdldElEKG1SUyksIHNsb3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVJTLm5TY3JpcHRCaW5kQWxsb2NhdGlvbihnZXRJRChtUlMpLCAwLCBzbG90KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIE9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRWYXIoaW50IGluZGV4LCBmbG9hdCB2KSB7Ci0gICAgICAgIG1SUy5uU2NyaXB0U2V0VmFyRihnZXRJRChtUlMpLCBpbmRleCwgdik7Ci0gICAgfQotICAgIHB1YmxpYyBmbG9hdCBnZXRWYXJGKGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gbVJTLm5TY3JpcHRHZXRWYXJGKGdldElEKG1SUyksIGluZGV4KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0VmFyKGludCBpbmRleCwgZG91YmxlIHYpIHsKLSAgICAgICAgbVJTLm5TY3JpcHRTZXRWYXJEKGdldElEKG1SUyksIGluZGV4LCB2KTsKLSAgICB9Ci0gICAgcHVibGljIGRvdWJsZSBnZXRWYXJEKGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gbVJTLm5TY3JpcHRHZXRWYXJEKGdldElEKG1SUyksIGluZGV4KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0VmFyKGludCBpbmRleCwgaW50IHYpIHsKLSAgICAgICAgbVJTLm5TY3JpcHRTZXRWYXJJKGdldElEKG1SUyksIGluZGV4LCB2KTsKLSAgICB9Ci0gICAgcHVibGljIGludCBnZXRWYXJJKGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gbVJTLm5TY3JpcHRHZXRWYXJJKGdldElEKG1SUyksIGluZGV4KTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIE9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRWYXIoaW50IGluZGV4LCBsb25nIHYpIHsKLSAgICAgICAgbVJTLm5TY3JpcHRTZXRWYXJKKGdldElEKG1SUyksIGluZGV4LCB2KTsKLSAgICB9Ci0gICAgcHVibGljIGxvbmcgZ2V0VmFySihpbnQgaW5kZXgpIHsKLSAgICAgICAgcmV0dXJuIG1SUy5uU2NyaXB0R2V0VmFySihnZXRJRChtUlMpLCBpbmRleCk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0VmFyKGludCBpbmRleCwgYm9vbGVhbiB2KSB7Ci0gICAgICAgIG1SUy5uU2NyaXB0U2V0VmFySShnZXRJRChtUlMpLCBpbmRleCwgdiA/IDEgOiAwKTsKLSAgICB9Ci0gICAgcHVibGljIGJvb2xlYW4gZ2V0VmFyQihpbnQgaW5kZXgpIHsKLSAgICAgICAgcmV0dXJuIG1SUy5uU2NyaXB0R2V0VmFySShnZXRJRChtUlMpLCBpbmRleCkgPiAwID8gdHJ1ZSA6IGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRWYXIoaW50IGluZGV4LCBCYXNlT2JqIG8pIHsKLSAgICAgICAgbVJTLm5TY3JpcHRTZXRWYXJPYmooZ2V0SUQobVJTKSwgaW5kZXgsIChvID09IG51bGwpID8gMCA6IG8uZ2V0SUQobVJTKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFZhcihpbnQgaW5kZXgsIEZpZWxkUGFja2VyIHYpIHsKLSAgICAgICAgbVJTLm5TY3JpcHRTZXRWYXJWKGdldElEKG1SUyksIGluZGV4LCB2LmdldERhdGEoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFZhcihpbnQgaW5kZXgsIEZpZWxkUGFja2VyIHYsIEVsZW1lbnQgZSwgaW50W10gZGltcykgewotICAgICAgICBtUlMublNjcmlwdFNldFZhclZFKGdldElEKG1SUyksIGluZGV4LCB2LmdldERhdGEoKSwgZS5nZXRJRChtUlMpLCBkaW1zKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZ2V0VmFyVihpbnQgaW5kZXgsIEZpZWxkUGFja2VyIHYpIHsKLSAgICAgICAgbVJTLm5TY3JpcHRHZXRWYXJWKGdldElEKG1SUyksIGluZGV4LCB2LmdldERhdGEoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VGltZVpvbmUoU3RyaW5nIHRpbWVab25lKSB7Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgbVJTLm5TY3JpcHRTZXRUaW1lWm9uZShnZXRJRChtUlMpLCB0aW1lWm9uZS5nZXRCeXRlcygiVVRGLTgiKSk7Ci0gICAgICAgIH0gY2F0Y2ggKGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIE9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOwotCi0gICAgICAgIEJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgICAgICBtUlMgPSByczsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRmllbGRCYXNlIHsKLSAgICAgICAgcHJvdGVjdGVkIEVsZW1lbnQgbUVsZW1lbnQ7Ci0gICAgICAgIHByb3RlY3RlZCBBbGxvY2F0aW9uIG1BbGxvY2F0aW9uOwotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGluaXQoUmVuZGVyU2NyaXB0IHJzLCBpbnQgZGlteCkgewotICAgICAgICAgICAgbUFsbG9jYXRpb24gPSBBbGxvY2F0aW9uLmNyZWF0ZVNpemVkKHJzLCBtRWxlbWVudCwgZGlteCwgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgaW5pdChSZW5kZXJTY3JpcHQgcnMsIGludCBkaW14LCBpbnQgdXNhZ2VzKSB7Ci0gICAgICAgICAgICBtQWxsb2NhdGlvbiA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQocnMsIG1FbGVtZW50LCBkaW14LCBBbGxvY2F0aW9uLlVTQUdFX1NDUklQVCB8IHVzYWdlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgRmllbGRCYXNlKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtRWxlbWVudDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBUeXBlIGdldFR5cGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUFsbG9jYXRpb24uZ2V0VHlwZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEFsbG9jYXRpb24gZ2V0QWxsb2NhdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBtQWxsb2NhdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUFsbG9jYXRpb24oKSB7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIENsYXNzIHVzZWQgdG8gc3BlY2lmeSBjbGlwcGluZyBmb3IgYSBrZXJuZWwgbGF1bmNoLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBMYXVuY2hPcHRpb25zIHsKLSAgICAgICAgcHJpdmF0ZSBpbnQgeHN0YXJ0ID0gMDsKLSAgICAgICAgcHJpdmF0ZSBpbnQgeXN0YXJ0ID0gMDsKLSAgICAgICAgcHJpdmF0ZSBpbnQgeGVuZCA9IDA7Ci0gICAgICAgIHByaXZhdGUgaW50IHllbmQgPSAwOwotICAgICAgICBwcml2YXRlIGludCB6c3RhcnQgPSAwOwotICAgICAgICBwcml2YXRlIGludCB6ZW5kID0gMDsKLSAgICAgICAgcHJpdmF0ZSBpbnQgc3RyYXRlZ3k7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldCB0aGUgWCByYW5nZS4gIElmIHRoZSBlbmQgdmFsdWUgaXMgc2V0IHRvIDAgdGhlIFggZGltZW5zaW9uIGlzIG5vdAotICAgICAgICAgKiBjbGlwcGVkLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0geHN0YXJ0QXJnIE11c3QgYmUgPj0gMAotICAgICAgICAgKiBAcGFyYW0geGVuZEFyZyBNdXN0IGJlID49IHhzdGFydEFyZwotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIExhdW5jaE9wdGlvbnMKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBMYXVuY2hPcHRpb25zIHNldFgoaW50IHhzdGFydEFyZywgaW50IHhlbmRBcmcpIHsKLSAgICAgICAgICAgIGlmICh4c3RhcnRBcmcgPCAwIHx8IHhlbmRBcmcgPD0geHN0YXJ0QXJnKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHhzdGFydCA9IHhzdGFydEFyZzsKLSAgICAgICAgICAgIHhlbmQgPSB4ZW5kQXJnOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0IHRoZSBZIHJhbmdlLiAgSWYgdGhlIGVuZCB2YWx1ZSBpcyBzZXQgdG8gMCB0aGUgWSBkaW1lbnNpb24gaXMgbm90Ci0gICAgICAgICAqIGNsaXBwZWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB5c3RhcnRBcmcgTXVzdCBiZSA+PSAwCi0gICAgICAgICAqIEBwYXJhbSB5ZW5kQXJnIE11c3QgYmUgPj0geXN0YXJ0QXJnCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gTGF1bmNoT3B0aW9ucwotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIExhdW5jaE9wdGlvbnMgc2V0WShpbnQgeXN0YXJ0QXJnLCBpbnQgeWVuZEFyZykgewotICAgICAgICAgICAgaWYgKHlzdGFydEFyZyA8IDAgfHwgeWVuZEFyZyA8PSB5c3RhcnRBcmcpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeXN0YXJ0ID0geXN0YXJ0QXJnOwotICAgICAgICAgICAgeWVuZCA9IHllbmRBcmc7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXQgdGhlIFogcmFuZ2UuICBJZiB0aGUgZW5kIHZhbHVlIGlzIHNldCB0byAwIHRoZSBaIGRpbWVuc2lvbiBpcyBub3QKLSAgICAgICAgICogY2xpcHBlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHpzdGFydEFyZyBNdXN0IGJlID49IDAKLSAgICAgICAgICogQHBhcmFtIHplbmRBcmcgTXVzdCBiZSA+PSB6c3RhcnRBcmcKLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBMYXVuY2hPcHRpb25zCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgTGF1bmNoT3B0aW9ucyBzZXRaKGludCB6c3RhcnRBcmcsIGludCB6ZW5kQXJnKSB7Ci0gICAgICAgICAgICBpZiAoenN0YXJ0QXJnIDwgMCB8fCB6ZW5kQXJnIDw9IHpzdGFydEFyZykgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBkaW1lbnNpb25zIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB6c3RhcnQgPSB6c3RhcnRBcmc7Ci0gICAgICAgICAgICB6ZW5kID0gemVuZEFyZzsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBYIHN0YXJ0Ci0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gaW50IGN1cnJlbnQgdmFsdWUKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0WFN0YXJ0KCkgewotICAgICAgICAgICAgcmV0dXJuIHhzdGFydDsKLSAgICAgICAgfQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBYIGVuZAotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIGludCBjdXJyZW50IHZhbHVlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldFhFbmQoKSB7Ci0gICAgICAgICAgICByZXR1cm4geGVuZDsKLSAgICAgICAgfQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBZIHN0YXJ0Ci0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gaW50IGN1cnJlbnQgdmFsdWUKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0WVN0YXJ0KCkgewotICAgICAgICAgICAgcmV0dXJuIHlzdGFydDsKLSAgICAgICAgfQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBZIGVuZAotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIGludCBjdXJyZW50IHZhbHVlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldFlFbmQoKSB7Ci0gICAgICAgICAgICByZXR1cm4geWVuZDsKLSAgICAgICAgfQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBaIHN0YXJ0Ci0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gaW50IGN1cnJlbnQgdmFsdWUKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0WlN0YXJ0KCkgewotICAgICAgICAgICAgcmV0dXJuIHpzdGFydDsKLSAgICAgICAgfQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBaIGVuZAotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIGludCBjdXJyZW50IHZhbHVlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldFpFbmQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gemVuZDsKLSAgICAgICAgfQotCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEMuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0Qy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGE1NzU5Li4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0Qy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotCi0vKioKLSAqIFRoZSBzdXBlcmNsYXNzIGZvciBhbGwgdXNlci1kZWZpbmVkIHNjcmlwdHMuIFRoaXMgaXMgb25seQotICogaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB0aGUgZ2VuZXJhdGVkIGRlcml2ZWQgY2xhc3Nlcy4KLSAqKi8KLXB1YmxpYyBjbGFzcyBTY3JpcHRDIGV4dGVuZHMgU2NyaXB0IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlNjcmlwdEMiOwotCi0gICAgLyoqCi0gICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IHRoZSBnZW5lcmF0ZWQgZGVyaXZlZCBjbGFzc2VzLgotICAgICAqCi0gICAgICogQHBhcmFtIGlkCi0gICAgICogQHBhcmFtIHJzCi0gICAgICovCi0gICAgcHJvdGVjdGVkIFNjcmlwdEMoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgc3VwZXIoaWQsIHJzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgdGhlIGdlbmVyYXRlZCBkZXJpdmVkIGNsYXNzZXMuCi0gICAgICoKLSAgICAgKgotICAgICAqIEBwYXJhbSBycwotICAgICAqIEBwYXJhbSByZXNvdXJjZXMKLSAgICAgKiBAcGFyYW0gcmVzb3VyY2VJRAotICAgICAqLwotICAgIHByb3RlY3RlZCBTY3JpcHRDKFJlbmRlclNjcmlwdCBycywgUmVzb3VyY2VzIHJlc291cmNlcywgaW50IHJlc291cmNlSUQpIHsKLSAgICAgICAgc3VwZXIoMCwgcnMpOwotICAgICAgICBpbnQgaWQgPSBpbnRlcm5hbENyZWF0ZShycywgcmVzb3VyY2VzLCByZXNvdXJjZUlEKTsKLSAgICAgICAgaWYgKGlkID09IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIkxvYWRpbmcgb2YgU2NyaXB0QyBzY3JpcHQgZmFpbGVkLiIpOwotICAgICAgICB9Ci0gICAgICAgIHNldElEKGlkKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBOYW1lIG9mIHRoZSBmaWxlIHRoYXQgaG9sZHMgdGhlIG9iamVjdCBjYWNoZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FDSEVfUEFUSCA9ICJjb20uYW5kcm9pZC5yZW5kZXJzY3JpcHQuY2FjaGUiOwotCi0gICAgc3RhdGljIFN0cmluZyBtQ2FjaGVQYXRoOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgc3luY2hyb25pemVkIGludCBpbnRlcm5hbENyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIFJlc291cmNlcyByZXNvdXJjZXMsIGludCByZXNvdXJjZUlEKSB7Ci0gICAgICAgIGJ5dGVbXSBwZ207Ci0gICAgICAgIGludCBwZ21MZW5ndGg7Ci0gICAgICAgIElucHV0U3RyZWFtIGlzID0gcmVzb3VyY2VzLm9wZW5SYXdSZXNvdXJjZShyZXNvdXJjZUlEKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcGdtID0gbmV3IGJ5dGVbMTAyNF07Ci0gICAgICAgICAgICAgICAgcGdtTGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICB3aGlsZSh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBieXRlc0xlZnQgPSBwZ20ubGVuZ3RoIC0gcGdtTGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZXNMZWZ0ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBidWYyID0gbmV3IGJ5dGVbcGdtLmxlbmd0aCAqIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShwZ20sIDAsIGJ1ZjIsIDAsIHBnbS5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGdtID0gYnVmMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzTGVmdCA9IHBnbS5sZW5ndGggLSBwZ21MZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGlzLnJlYWQocGdtLCBwZ21MZW5ndGgsIGJ5dGVzTGVmdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChieXRlc1JlYWQgPD0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcGdtTGVuZ3RoICs9IGJ5dGVzUmVhZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHJlc05hbWUgPSByZXNvdXJjZXMuZ2V0UmVzb3VyY2VFbnRyeU5hbWUocmVzb3VyY2VJRCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIHRoZSBSUyBjYWNoZSBwYXRoIGlmIHdlIGhhdmVuJ3QgZG9uZSBzbyBhbHJlYWR5LgotICAgICAgICBpZiAobUNhY2hlUGF0aCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShycy5tQ2FjaGVEaXIsIENBQ0hFX1BBVEgpOwotICAgICAgICAgICAgbUNhY2hlUGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICAgICAgICBmLm1rZGlycygpOwotICAgICAgICB9Ci0gICAgICAgIC8vICAgICAgICBMb2cudihUQUcsICJDcmVhdGUgc2NyaXB0IGZvciByZXNvdXJjZSA9ICIgKyByZXNOYW1lKTsKLSAgICAgICAgcmV0dXJuIHJzLm5TY3JpcHRDQ3JlYXRlKHJlc05hbWUsIG1DYWNoZVBhdGgsIHBnbSwgcGdtTGVuZ3RoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTY2NDEuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRHcm91cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLS8qKgotICogU2NyaXB0R3JvdXAgY3JlYXRlcyBhIGdyb3VwIG9mIGtlcm5lbHMgdGhhdCBhcmUgZXhlY3V0ZWQKLSAqIHRvZ2V0aGVyIHdpdGggb25lIGV4ZWN1dGlvbiBjYWxsIGFzIGlmIHRoZXkgd2VyZSBhIHNpbmdsZSBrZXJuZWwuCi0gKiBUaGUga2VybmVscyBtYXkgYmUgY29ubmVjdGVkIGludGVybmFsbHkgb3IgdG8gYW4gZXh0ZXJuYWwgYWxsb2NhdGlvbi4KLSAqIFRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyBmb3IgaW50ZXJuYWwgY29ubmVjdGlvbnMgYXJlIG5vdCBvYnNlcnZhYmxlCi0gKiBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzY3JpcHQuCi0gKiA8cD4KLSAqIEV4dGVybmFsIGNvbm5lY3Rpb25zIGFyZSBncm91cGVkIGludG8gaW5wdXRzIGFuZCBvdXRwdXRzLgotICogQWxsIG91dHB1dHMgYXJlIHByb2R1Y2VkIGJ5IGEgc2NyaXB0IGtlcm5lbCBhbmQgcGxhY2VkIGludG8gYQotICogdXNlci1zdXBwbGllZCBhbGxvY2F0aW9uLiBJbnB1dHMgcHJvdmlkZSB0aGUgaW5wdXQgb2YgYSBrZXJuZWwuCi0gKiBJbnB1dHMgYm91bmQgdG8gc2NyaXB0IGdsb2JhbHMgYXJlIHNldCBkaXJlY3RseSB1cG9uIHRoZSBzY3JpcHQuCi0gKiA8cD4KLSAqIEEgU2NyaXB0R3JvdXAgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBrZXJuZWwuIEEgU2NyaXB0R3JvdXAKLSAqIG11c3QgY29udGFpbiBvbmx5IGEgc2luZ2xlIGRpcmVjdGVkIGFjeWNsaWMgZ3JhcGggKERBRykgb2YKLSAqIHNjcmlwdCBrZXJuZWxzIGFuZCBjb25uZWN0aW9ucy4gQXR0ZW1wdGluZyB0byBjcmVhdGUgYQotICogU2NyaXB0R3JvdXAgd2l0aCBtdWx0aXBsZSBEQUdzIG9yIGF0dGVtcHRpbmcgdG8gY3JlYXRlCi0gKiBhIGN5Y2xlIHdpdGhpbiBhIFNjcmlwdEdyb3VwIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLgotICogPHA+Ci0gKiBDdXJyZW50bHksIGFsbCBrZXJuZWxzIGluIGEgU2NyaXB0R3JvdXAgbXVzdCBiZSBmcm9tIHNlcGFyYXRlCi0gKiBTY3JpcHQgb2JqZWN0cy4gQXR0ZW1wdGluZyB0byB1c2UgbXVsdGlwbGUga2VybmVscyBmcm9tIHRoZSBzYW1lCi0gKiBTY3JpcHQgb2JqZWN0IHdpbGwgcmVzdWx0IGluIGFuIHtAbGluayBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbn0uCi0gKgotICoqLwotcHVibGljIGZpbmFsIGNsYXNzIFNjcmlwdEdyb3VwIGV4dGVuZHMgQmFzZU9iaiB7Ci0gICAgSU8gbU91dHB1dHNbXTsKLSAgICBJTyBtSW5wdXRzW107Ci0KLSAgICBzdGF0aWMgY2xhc3MgSU8gewotICAgICAgICBTY3JpcHQuS2VybmVsSUQgbUtJRDsKLSAgICAgICAgQWxsb2NhdGlvbiBtQWxsb2NhdGlvbjsKLQotICAgICAgICBJTyhTY3JpcHQuS2VybmVsSUQgcykgewotICAgICAgICAgICAgbUtJRCA9IHM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY2xhc3MgQ29ubmVjdExpbmUgewotICAgICAgICBDb25uZWN0TGluZShUeXBlIHQsIFNjcmlwdC5LZXJuZWxJRCBmcm9tLCBTY3JpcHQuS2VybmVsSUQgdG8pIHsKLSAgICAgICAgICAgIG1Gcm9tID0gZnJvbTsKLSAgICAgICAgICAgIG1Ub0sgPSB0bzsKLSAgICAgICAgICAgIG1BbGxvY2F0aW9uVHlwZSA9IHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBDb25uZWN0TGluZShUeXBlIHQsIFNjcmlwdC5LZXJuZWxJRCBmcm9tLCBTY3JpcHQuRmllbGRJRCB0bykgewotICAgICAgICAgICAgbUZyb20gPSBmcm9tOwotICAgICAgICAgICAgbVRvRiA9IHRvOwotICAgICAgICAgICAgbUFsbG9jYXRpb25UeXBlID0gdDsKLSAgICAgICAgfQotCi0gICAgICAgIFNjcmlwdC5GaWVsZElEIG1Ub0Y7Ci0gICAgICAgIFNjcmlwdC5LZXJuZWxJRCBtVG9LOwotICAgICAgICBTY3JpcHQuS2VybmVsSUQgbUZyb207Ci0gICAgICAgIFR5cGUgbUFsbG9jYXRpb25UeXBlOwotICAgIH0KLQotICAgIHN0YXRpYyBjbGFzcyBOb2RlIHsKLSAgICAgICAgU2NyaXB0IG1TY3JpcHQ7Ci0gICAgICAgIEFycmF5TGlzdDxTY3JpcHQuS2VybmVsSUQ+IG1LZXJuZWxzID0gbmV3IEFycmF5TGlzdDxTY3JpcHQuS2VybmVsSUQ+KCk7Ci0gICAgICAgIEFycmF5TGlzdDxDb25uZWN0TGluZT4gbUlucHV0cyA9IG5ldyBBcnJheUxpc3Q8Q29ubmVjdExpbmU+KCk7Ci0gICAgICAgIEFycmF5TGlzdDxDb25uZWN0TGluZT4gbU91dHB1dHMgPSBuZXcgQXJyYXlMaXN0PENvbm5lY3RMaW5lPigpOwotICAgICAgICBpbnQgZGFnTnVtYmVyOwotCi0gICAgICAgIE5vZGUgbU5leHQ7Ci0KLSAgICAgICAgTm9kZShTY3JpcHQgcykgewotICAgICAgICAgICAgbVNjcmlwdCA9IHM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIFNjcmlwdEdyb3VwKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBhbiBpbnB1dCBvZiB0aGUgU2NyaXB0R3JvdXAuIFRoaXMgc3BlY2lmaWVzIGFuCi0gICAgICogQWxsb2NhdGlvbiB0byBiZSB1c2VkIGZvciBrZXJuZWxzIHRoYXQgcmVxdWlyZSBhbiBpbnB1dAotICAgICAqIEFsbG9jYXRpb24gcHJvdmlkZWQgZnJvbSBvdXRzaWRlIG9mIHRoZSBTY3JpcHRHcm91cC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzIFRoZSBJRCBvZiB0aGUga2VybmVsIHdoZXJlIHRoZSBhbGxvY2F0aW9uIHNob3VsZCBiZQotICAgICAqICAgICAgICAgIGNvbm5lY3RlZC4KLSAgICAgKiBAcGFyYW0gYSBUaGUgYWxsb2NhdGlvbiB0byBjb25uZWN0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldElucHV0KFNjcmlwdC5LZXJuZWxJRCBzLCBBbGxvY2F0aW9uIGEpIHsKLSAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBtSW5wdXRzLmxlbmd0aDsgY3QrKykgewotICAgICAgICAgICAgaWYgKG1JbnB1dHNbY3RdLm1LSUQgPT0gcykgewotICAgICAgICAgICAgICAgIG1JbnB1dHNbY3RdLm1BbGxvY2F0aW9uID0gYTsKLSAgICAgICAgICAgICAgICBtUlMublNjcmlwdEdyb3VwU2V0SW5wdXQoZ2V0SUQobVJTKSwgcy5nZXRJRChtUlMpLCBtUlMuc2FmZUlEKGEpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTY3JpcHQgbm90IGZvdW5kIik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBhbiBvdXRwdXQgb2YgdGhlIFNjcmlwdEdyb3VwLiBUaGlzIHNwZWNpZmllcyBhbgotICAgICAqIEFsbG9jYXRpb24gdG8gYmUgdXNlZCBmb3IgdGhlIGtlcm5lbHMgdGhhdCByZXF1aXJlIGFuIG91dHB1dAotICAgICAqIEFsbG9jYXRpb24gdmlzaWJsZSBhZnRlciB0aGUgU2NyaXB0R3JvdXAgaXMgZXhlY3V0ZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcyBUaGUgSUQgb2YgdGhlIGtlcm5lbCB3aGVyZSB0aGUgYWxsb2NhdGlvbiBzaG91bGQgYmUKLSAgICAgKiAgICAgICAgICBjb25uZWN0ZWQuCi0gICAgICogQHBhcmFtIGEgVGhlIGFsbG9jYXRpb24gdG8gY29ubmVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRPdXRwdXQoU2NyaXB0Lktlcm5lbElEIHMsIEFsbG9jYXRpb24gYSkgewotICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IG1PdXRwdXRzLmxlbmd0aDsgY3QrKykgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRzW2N0XS5tS0lEID09IHMpIHsKLSAgICAgICAgICAgICAgICBtT3V0cHV0c1tjdF0ubUFsbG9jYXRpb24gPSBhOwotICAgICAgICAgICAgICAgIG1SUy5uU2NyaXB0R3JvdXBTZXRPdXRwdXQoZ2V0SUQobVJTKSwgcy5nZXRJRChtUlMpLCBtUlMuc2FmZUlEKGEpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTY3JpcHQgbm90IGZvdW5kIik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXhlY3V0ZSB0aGUgU2NyaXB0R3JvdXAuICBUaGlzIHdpbGwgcnVuIGFsbCB0aGUga2VybmVscyBpbgotICAgICAqIHRoZSBTY3JpcHRHcm91cC4gIE5vIGludGVybmFsIGNvbm5lY3Rpb24gcmVzdWx0cyB3aWxsIGJlIHZpc2libGUKLSAgICAgKiBhZnRlciBleGVjdXRpb24gb2YgdGhlIFNjcmlwdEdyb3VwLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB7Ci0gICAgICAgIG1SUy5uU2NyaXB0R3JvdXBFeGVjdXRlKGdldElEKG1SUykpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogSGVscGVyIGNsYXNzIHRvIGJ1aWxkIGEgU2NyaXB0R3JvdXAuIEEgU2NyaXB0R3JvdXAgaXMKLSAgICAgKiBjcmVhdGVkIGluIHR3byBzdGVwcy4KLSAgICAgKiA8cD4KLSAgICAgKiBGaXJzdCwgYWxsIGtlcm5lbHMgdG8gYmUgdXNlZCBieSB0aGUgU2NyaXB0R3JvdXAgc2hvdWxkIGJlIGFkZGVkLgotICAgICAqIDxwPgotICAgICAqIFNlY29uZCwgYWRkIGNvbm5lY3Rpb25zIGJldHdlZW4ga2VybmVscy4gVGhlcmUgYXJlIHR3byB0eXBlcwotICAgICAqIG9mIGNvbm5lY3Rpb25zOiBrZXJuZWwgdG8ga2VybmVsIGFuZCBrZXJuZWwgdG8gZmllbGQuCi0gICAgICogS2VybmVsIHRvIGtlcm5lbCBhbGxvd3MgYSBrZXJuZWwncyBvdXRwdXQgdG8gYmUgcGFzc2VkIHRvCi0gICAgICogYW5vdGhlciBrZXJuZWwgYXMgaW5wdXQuIEtlcm5lbCB0byBmaWVsZCBhbGxvd3MgdGhlIG91dHB1dCBvZgotICAgICAqIG9uZSBrZXJuZWwgdG8gYmUgYm91bmQgYXMgYSBzY3JpcHQgZ2xvYmFsLiBLZXJuZWwgdG8ga2VybmVsIGlzCi0gICAgICogaGlnaGVyIHBlcmZvcm1hbmNlIGFuZCBzaG91bGQgYmUgdXNlZCB3aGVyZSBwb3NzaWJsZS4KLSAgICAgKiA8cD4KLSAgICAgKiBBIFNjcmlwdEdyb3VwIG11c3QgY29udGFpbiBhIHNpbmdsZSBkaXJlY3RlZCBhY3ljbGljIGdyYXBoIChEQUcpOyBpdAotICAgICAqIGNhbm5vdCBjb250YWluIGN5Y2xlcy4gQ3VycmVudGx5LCBhbGwga2VybmVscyB1c2VkIGluIGEgU2NyaXB0R3JvdXAKLSAgICAgKiBtdXN0IGNvbWUgZnJvbSBkaWZmZXJlbnQgU2NyaXB0IG9iamVjdHMuIEFkZGl0aW9uYWxseSwgYWxsIGtlcm5lbHMKLSAgICAgKiBpbiBhIFNjcmlwdEdyb3VwIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgaW5wdXQsIG91dHB1dCwgb3IgaW50ZXJuYWwKLSAgICAgKiBjb25uZWN0aW9uLgotICAgICAqIDxwPgotICAgICAqIE9uY2UgYWxsIGNvbm5lY3Rpb25zIGFyZSBtYWRlLCBhIGNhbGwgdG8ge0BsaW5rICNjcmVhdGV9IHdpbGwKLSAgICAgKiByZXR1cm4gdGhlIFNjcmlwdEdyb3VwIG9iamVjdC4KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQnVpbGRlciB7Ci0gICAgICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0IG1SUzsKLSAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3Q8Tm9kZT4gbU5vZGVzID0gbmV3IEFycmF5TGlzdDxOb2RlPigpOwotICAgICAgICBwcml2YXRlIEFycmF5TGlzdDxDb25uZWN0TGluZT4gbUxpbmVzID0gbmV3IEFycmF5TGlzdDxDb25uZWN0TGluZT4oKTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUtlcm5lbENvdW50OwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDcmVhdGUgYSBCdWlsZGVyIGZvciBnZW5lcmF0aW5nIGEgU2NyaXB0R3JvdXAuCi0gICAgICAgICAqCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBycyBUaGUgUmVuZGVyU2NyaXB0IGNvbnRleHQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgICAgIG1SUyA9IHJzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZG8gYSBERlMgZnJvbSBvcmlnaW5hbCBub2RlLCBsb29raW5nIGZvciBvcmlnaW5hbCBub2RlCi0gICAgICAgIC8vIGFueSBjeWNsZSB0aGF0IGNvdWxkIGJlIGNyZWF0ZWQgbXVzdCBjb250YWluIG9yaWdpbmFsIG5vZGUKLSAgICAgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlQ3ljbGUoTm9kZSB0YXJnZXQsIE5vZGUgb3JpZ2luYWwpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGN0ID0gMDsgY3QgPCB0YXJnZXQubU91dHB1dHMuc2l6ZSgpOyBjdCsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgQ29ubmVjdExpbmUgY2wgPSB0YXJnZXQubU91dHB1dHMuZ2V0KGN0KTsKLSAgICAgICAgICAgICAgICBpZiAoY2wubVRvSyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUgdG4gPSBmaW5kTm9kZShjbC5tVG9LLm1TY3JpcHQpOwotICAgICAgICAgICAgICAgICAgICBpZiAodG4uZXF1YWxzKG9yaWdpbmFsKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJMb29wcyBpbiBncm91cCBub3QgYWxsb3dlZC4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUN5Y2xlKHRuLCBvcmlnaW5hbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjbC5tVG9GICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSB0biA9IGZpbmROb2RlKGNsLm1Ub0YubVNjcmlwdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bi5lcXVhbHMob3JpZ2luYWwpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkxvb3BzIGluIGdyb3VwIG5vdCBhbGxvd2VkLiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQ3ljbGUodG4sIG9yaWdpbmFsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgbWVyZ2VEQUdzKGludCB2YWx1ZVVzZWQsIGludCB2YWx1ZUtpbGxlZCkgewotICAgICAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBtTm9kZXMuc2l6ZSgpOyBjdCsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Ob2Rlcy5nZXQoY3QpLmRhZ051bWJlciA9PSB2YWx1ZUtpbGxlZCkKLSAgICAgICAgICAgICAgICAgICAgbU5vZGVzLmdldChjdCkuZGFnTnVtYmVyID0gdmFsdWVVc2VkOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlREFHUmVjdXJzZShOb2RlIG4sIGludCBkYWdOdW1iZXIpIHsKLSAgICAgICAgICAgIC8vIGNvbWJpbmUgREFHcyBpZiB0aGlzIG5vZGUgaGFzIGJlZW4gc2VlbiBhbHJlYWR5Ci0gICAgICAgICAgICBpZiAobi5kYWdOdW1iZXIgIT0gMCAmJiBuLmRhZ051bWJlciAhPSBkYWdOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICBtZXJnZURBR3Mobi5kYWdOdW1iZXIsIGRhZ051bWJlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuLmRhZ051bWJlciA9IGRhZ051bWJlcjsKLSAgICAgICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgbi5tT3V0cHV0cy5zaXplKCk7IGN0KyspIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBDb25uZWN0TGluZSBjbCA9IG4ubU91dHB1dHMuZ2V0KGN0KTsKLSAgICAgICAgICAgICAgICBpZiAoY2wubVRvSyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUgdG4gPSBmaW5kTm9kZShjbC5tVG9LLm1TY3JpcHQpOwotICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZURBR1JlY3Vyc2UodG4sIGRhZ051bWJlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjbC5tVG9GICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSB0biA9IGZpbmROb2RlKGNsLm1Ub0YubVNjcmlwdCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlREFHUmVjdXJzZSh0biwgZGFnTnVtYmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVEQUcoKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IG1Ob2Rlcy5zaXplKCk7IGN0KyspIHsKLSAgICAgICAgICAgICAgICBOb2RlIG4gPSBtTm9kZXMuZ2V0KGN0KTsKLSAgICAgICAgICAgICAgICBpZiAobi5tSW5wdXRzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuLm1PdXRwdXRzLnNpemUoKSA9PSAwICYmIG1Ob2Rlcy5zaXplKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkdyb3VwcyBjYW5ub3QgY29udGFpbiB1bmNvbm5lY3RlZCBzY3JpcHRzIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVEQUdSZWN1cnNlKG4sIGN0KzEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBkYWdOdW1iZXIgPSBtTm9kZXMuZ2V0KDApLmRhZ051bWJlcjsKLSAgICAgICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgbU5vZGVzLnNpemUoKTsgY3QrKykgewotICAgICAgICAgICAgICAgIGlmIChtTm9kZXMuZ2V0KGN0KS5kYWdOdW1iZXIgIT0gZGFnTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiTXVsdGlwbGUgREFHcyBpbiBncm91cCBub3QgYWxsb3dlZC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIE5vZGUgZmluZE5vZGUoU2NyaXB0IHMpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgbU5vZGVzLnNpemUoKTsgY3QrKykgewotICAgICAgICAgICAgICAgIGlmIChzID09IG1Ob2Rlcy5nZXQoY3QpLm1TY3JpcHQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1Ob2Rlcy5nZXQoY3QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBOb2RlIGZpbmROb2RlKFNjcmlwdC5LZXJuZWxJRCBrKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IG1Ob2Rlcy5zaXplKCk7IGN0KyspIHsKLSAgICAgICAgICAgICAgICBOb2RlIG4gPSBtTm9kZXMuZ2V0KGN0KTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBjdDI9MDsgY3QyIDwgbi5tS2VybmVscy5zaXplKCk7IGN0MisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrID09IG4ubUtlcm5lbHMuZ2V0KGN0MikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQWRkcyBhIEtlcm5lbCB0byB0aGUgZ3JvdXAuCi0gICAgICAgICAqCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBrIFRoZSBrZXJuZWwgdG8gYWRkLgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIEJ1aWxkZXIgUmV0dXJucyB0aGlzLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkS2VybmVsKFNjcmlwdC5LZXJuZWxJRCBrKSB7Ci0gICAgICAgICAgICBpZiAobUxpbmVzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAiS2VybmVscyBtYXkgbm90IGJlIGFkZGVkIG9uY2UgY29ubmVjdGlvbnMgZXhpc3QuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vYW5kcm9pZC51dGlsLkxvZy52KCJSU1IiLCAiYWRkS2VybmVsIDEgaz0iICsgayk7Ci0gICAgICAgICAgICBpZiAoZmluZE5vZGUoaykgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy9hbmRyb2lkLnV0aWwuTG9nLnYoIlJTUiIsICJhZGRLZXJuZWwgMiAiKTsKLSAgICAgICAgICAgIG1LZXJuZWxDb3VudCsrOwotICAgICAgICAgICAgTm9kZSBuID0gZmluZE5vZGUoay5tU2NyaXB0KTsKLSAgICAgICAgICAgIGlmIChuID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvL2FuZHJvaWQudXRpbC5Mb2cudigiUlNSIiwgImFkZEtlcm5lbCAzICIpOwotICAgICAgICAgICAgICAgIG4gPSBuZXcgTm9kZShrLm1TY3JpcHQpOwotICAgICAgICAgICAgICAgIG1Ob2Rlcy5hZGQobik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBuLm1LZXJuZWxzLmFkZChrKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFkZHMgYSBjb25uZWN0aW9uIHRvIHRoZSBncm91cC4KLSAgICAgICAgICoKLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHQgVGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgdXNlZCB0bwotICAgICAgICAgKiAgICAgICAgICBkZXRlcm1pbmUgdGhlIGtlcm5lbCBsYXVuY2ggc2l6ZXMgb24gdGhlIHNvdXJjZSBzaWRlCi0gICAgICAgICAqICAgICAgICAgIG9mIHRoaXMgY29ubmVjdGlvbi4KLSAgICAgICAgICogQHBhcmFtIGZyb20gVGhlIHNvdXJjZSBmb3IgdGhlIGNvbm5lY3Rpb24uCi0gICAgICAgICAqIEBwYXJhbSB0byBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGNvbm5lY3Rpb24uCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gQnVpbGRlciBSZXR1cm5zIHRoaXMKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZENvbm5lY3Rpb24oVHlwZSB0LCBTY3JpcHQuS2VybmVsSUQgZnJvbSwgU2NyaXB0LkZpZWxkSUQgdG8pIHsKLSAgICAgICAgICAgIC8vYW5kcm9pZC51dGlsLkxvZy52KCJSU1IiLCAiYWRkQ29ubmVjdGlvbiAiICsgdCArIiwgIiArIGZyb20gKyAiLCAiICsgdG8pOwotCi0gICAgICAgICAgICBOb2RlIG5mID0gZmluZE5vZGUoZnJvbSk7Ci0gICAgICAgICAgICBpZiAobmYgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiRnJvbSBzY3JpcHQgbm90IGZvdW5kLiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBOb2RlIG50ID0gZmluZE5vZGUodG8ubVNjcmlwdCk7Ci0gICAgICAgICAgICBpZiAobnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiVG8gc2NyaXB0IG5vdCBmb3VuZC4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ29ubmVjdExpbmUgY2wgPSBuZXcgQ29ubmVjdExpbmUodCwgZnJvbSwgdG8pOwotICAgICAgICAgICAgbUxpbmVzLmFkZChuZXcgQ29ubmVjdExpbmUodCwgZnJvbSwgdG8pKTsKLQotICAgICAgICAgICAgbmYubU91dHB1dHMuYWRkKGNsKTsKLSAgICAgICAgICAgIG50Lm1JbnB1dHMuYWRkKGNsKTsKLQotICAgICAgICAgICAgdmFsaWRhdGVDeWNsZShuZiwgbmYpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQWRkcyBhIGNvbm5lY3Rpb24gdG8gdGhlIGdyb3VwLgotICAgICAgICAgKgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gdCBUaGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbi4gVGhpcyBpcyB1c2VkIHRvCi0gICAgICAgICAqICAgICAgICAgIGRldGVybWluZSB0aGUga2VybmVsIGxhdW5jaCBzaXplcyBmb3IgYm90aCBzaWRlcyBvZgotICAgICAgICAgKiAgICAgICAgICB0aGlzIGNvbm5lY3Rpb24uCi0gICAgICAgICAqIEBwYXJhbSBmcm9tIFRoZSBzb3VyY2UgZm9yIHRoZSBjb25uZWN0aW9uLgotICAgICAgICAgKiBAcGFyYW0gdG8gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBjb25uZWN0aW9uLgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIEJ1aWxkZXIgUmV0dXJucyB0aGlzCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRDb25uZWN0aW9uKFR5cGUgdCwgU2NyaXB0Lktlcm5lbElEIGZyb20sIFNjcmlwdC5LZXJuZWxJRCB0bykgewotICAgICAgICAgICAgLy9hbmRyb2lkLnV0aWwuTG9nLnYoIlJTUiIsICJhZGRDb25uZWN0aW9uICIgKyB0ICsiLCAiICsgZnJvbSArICIsICIgKyB0byk7Ci0KLSAgICAgICAgICAgIE5vZGUgbmYgPSBmaW5kTm9kZShmcm9tKTsKLSAgICAgICAgICAgIGlmIChuZiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJGcm9tIHNjcmlwdCBub3QgZm91bmQuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE5vZGUgbnQgPSBmaW5kTm9kZSh0byk7Ci0gICAgICAgICAgICBpZiAobnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiVG8gc2NyaXB0IG5vdCBmb3VuZC4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ29ubmVjdExpbmUgY2wgPSBuZXcgQ29ubmVjdExpbmUodCwgZnJvbSwgdG8pOwotICAgICAgICAgICAgbUxpbmVzLmFkZChuZXcgQ29ubmVjdExpbmUodCwgZnJvbSwgdG8pKTsKLQotICAgICAgICAgICAgbmYubU91dHB1dHMuYWRkKGNsKTsKLSAgICAgICAgICAgIG50Lm1JbnB1dHMuYWRkKGNsKTsKLQotICAgICAgICAgICAgdmFsaWRhdGVDeWNsZShuZiwgbmYpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENyZWF0ZXMgdGhlIFNjcmlwdCBncm91cC4KLSAgICAgICAgICoKLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBTY3JpcHRHcm91cCBUaGUgbmV3IFNjcmlwdEdyb3VwCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgU2NyaXB0R3JvdXAgY3JlYXRlKCkgewotCi0gICAgICAgICAgICBpZiAobU5vZGVzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJFbXB0eSBzY3JpcHQgZ3JvdXBzIGFyZSBub3QgYWxsb3dlZCIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyByZXNldCBEQUcgbnVtYmVycyBpbiBjYXNlIHdlJ3JlIGJ1aWxkaW5nIGEgc2Vjb25kIGdyb3VwCi0gICAgICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IG1Ob2Rlcy5zaXplKCk7IGN0KyspIHsKLSAgICAgICAgICAgICAgICBtTm9kZXMuZ2V0KGN0KS5kYWdOdW1iZXIgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFsaWRhdGVEQUcoKTsKLQotICAgICAgICAgICAgQXJyYXlMaXN0PElPPiBpbnB1dHMgPSBuZXcgQXJyYXlMaXN0PElPPigpOwotICAgICAgICAgICAgQXJyYXlMaXN0PElPPiBvdXRwdXRzID0gbmV3IEFycmF5TGlzdDxJTz4oKTsKLQotICAgICAgICAgICAgaW50W10ga2VybmVscyA9IG5ldyBpbnRbbUtlcm5lbENvdW50XTsKLSAgICAgICAgICAgIGludCBpZHggPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBtTm9kZXMuc2l6ZSgpOyBjdCsrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSBuID0gbU5vZGVzLmdldChjdCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgY3QyPTA7IGN0MiA8IG4ubUtlcm5lbHMuc2l6ZSgpOyBjdDIrKykgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBTY3JpcHQuS2VybmVsSUQga2lkID0gbi5tS2VybmVscy5nZXQoY3QyKTsKLSAgICAgICAgICAgICAgICAgICAga2VybmVsc1tpZHgrK10gPSBraWQuZ2V0SUQobVJTKTsKLQotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGhhc0lucHV0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaGFzT3V0cHV0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGN0Mz0wOyBjdDMgPCBuLm1JbnB1dHMuc2l6ZSgpOyBjdDMrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4ubUlucHV0cy5nZXQoY3QzKS5tVG9LID09IGtpZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0lucHV0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjdDM9MDsgY3QzIDwgbi5tT3V0cHV0cy5zaXplKCk7IGN0MysrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobi5tT3V0cHV0cy5nZXQoY3QzKS5tRnJvbSA9PSBraWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNPdXRwdXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFzSW5wdXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0cy5hZGQobmV3IElPKGtpZCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFzT3V0cHV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFkZChuZXcgSU8oa2lkKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpZHggIT0gbUtlcm5lbENvdW50KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiQ291bnQgbWlzbWF0Y2gsIHNob3VsZCBub3QgaGFwcGVuLiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnRbXSBzcmMgPSBuZXcgaW50W21MaW5lcy5zaXplKCldOwotICAgICAgICAgICAgaW50W10gZHN0ayA9IG5ldyBpbnRbbUxpbmVzLnNpemUoKV07Ci0gICAgICAgICAgICBpbnRbXSBkc3RmID0gbmV3IGludFttTGluZXMuc2l6ZSgpXTsKLSAgICAgICAgICAgIGludFtdIHR5cGVzID0gbmV3IGludFttTGluZXMuc2l6ZSgpXTsKLQotICAgICAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBtTGluZXMuc2l6ZSgpOyBjdCsrKSB7Ci0gICAgICAgICAgICAgICAgQ29ubmVjdExpbmUgY2wgPSBtTGluZXMuZ2V0KGN0KTsKLSAgICAgICAgICAgICAgICBzcmNbY3RdID0gY2wubUZyb20uZ2V0SUQobVJTKTsKLSAgICAgICAgICAgICAgICBpZiAoY2wubVRvSyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRzdGtbY3RdID0gY2wubVRvSy5nZXRJRChtUlMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2wubVRvRiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRzdGZbY3RdID0gY2wubVRvRi5nZXRJRChtUlMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0eXBlc1tjdF0gPSBjbC5tQWxsb2NhdGlvblR5cGUuZ2V0SUQobVJTKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGlkID0gbVJTLm5TY3JpcHRHcm91cENyZWF0ZShrZXJuZWxzLCBzcmMsIGRzdGssIGRzdGYsIHR5cGVzKTsKLSAgICAgICAgICAgIGlmIChpZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiT2JqZWN0IGNyZWF0aW9uIGVycm9yLCBzaG91bGQgbm90IGhhcHBlbi4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU2NyaXB0R3JvdXAgc2cgPSBuZXcgU2NyaXB0R3JvdXAoaWQsIG1SUyk7Ci0gICAgICAgICAgICBzZy5tT3V0cHV0cyA9IG5ldyBJT1tvdXRwdXRzLnNpemUoKV07Ci0gICAgICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IG91dHB1dHMuc2l6ZSgpOyBjdCsrKSB7Ci0gICAgICAgICAgICAgICAgc2cubU91dHB1dHNbY3RdID0gb3V0cHV0cy5nZXQoY3QpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZy5tSW5wdXRzID0gbmV3IElPW2lucHV0cy5zaXplKCldOwotICAgICAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBpbnB1dHMuc2l6ZSgpOyBjdCsrKSB7Ci0gICAgICAgICAgICAgICAgc2cubUlucHV0c1tjdF0gPSBpbnB1dHMuZ2V0KGN0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHNnOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLQotfQotCi0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTYyNjhhLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKLQotLyoqCi0gKiBCYXNlIGNsYXNzIGZvciBhbGwgSW50cmluc2ljIHNjcmlwdHMuIEFuIGludHJpbnNpYyBhIHNjcmlwdAotICogd2hpY2ggaW1wbGVtZW50cyBhIHByZS1kZWZpbmVkIGZ1bmN0aW9uLiBJbnRyaW5zaWNzIGFyZQotICogcHJvdmlkZWQgdG8gcHJvdmlkZSBlZmZlY2llbnQgaW1wbGVtdGF0aW9ucyBvZiBjb21tb24KLSAqIG9wZXJhdGlvbnMuCi0gKgotICogTm90IGludGVuZGVkIGZvciBkaXJlY3QgdXNlLgotICoqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFNjcmlwdEludHJpbnNpYyBleHRlbmRzIFNjcmlwdCB7Ci0gICAgU2NyaXB0SW50cmluc2ljKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWMzRExVVC5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWMzRExVVC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDU0MGExLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljM0RMVVQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKLQotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLS8qKgotICoKLSAqIEludHJpbnNpYyBmb3IgY29udmVydGluZyBSR0IgdG8gUkdCQSBieSB1c2luZyBhIDNEIGxvb2t1cCB0YWJsZS4gIFRoZQotICogaW5jb21pbmcgcixnLGIgdmFsdWVzIGFyZSB1c2UgYXMgbm9ybWFsaXplZCB4LHkseiBjb29yZGluYXRlcyBpbnRvIGEgM0QKLSAqIGFsbG9jYXRpb24uICBUaGUgOCBuZWFyZXN0IHZhbHVlcyBhcmUgc2FtcGxlZCBhbmQgbGluZWFybHkgaW50ZXJwb2xhdGVkLiAgVGhlCi0gKiByZXN1bHQgaXMgcGxhY2VkIGluIHRoZSBvdXRwdXQuCi0gKgotICoqLwotcHVibGljIGZpbmFsIGNsYXNzIFNjcmlwdEludHJpbnNpYzNETFVUIGV4dGVuZHMgU2NyaXB0SW50cmluc2ljIHsKLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbUxVVDsKLSAgICBwcml2YXRlIEVsZW1lbnQgbUVsZW1lbnQ7Ci0KLSAgICBwcml2YXRlIFNjcmlwdEludHJpbnNpYzNETFVUKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUpIHsKLSAgICAgICAgc3VwZXIoaWQsIHJzKTsKLSAgICAgICAgbUVsZW1lbnQgPSBlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN1cHBvcnRlZCBlbGVtZW50cyB0eXBlcyBhcmUge0BsaW5rIEVsZW1lbnQjVThfNH0KLSAgICAgKgotICAgICAqIFRoZSBkZWZhdWx0cyB0YWJsZXMgYXJlIGlkZW50aXR5LgotICAgICAqCi0gICAgICogQHBhcmFtIHJzIFRoZSBSZW5kZXJTY3JpcHQgY29udGV4dAotICAgICAqIEBwYXJhbSBlIEVsZW1lbnQgdHlwZSBmb3IgaW50cHV0cyBhbmQgb3V0cHV0cwotICAgICAqCi0gICAgICogQHJldHVybiBTY3JpcHRJbnRyaW5zaWMzRExVVAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljM0RMVVQgY3JlYXRlKFJlbmRlclNjcmlwdCBycywgRWxlbWVudCBlKSB7Ci0gICAgICAgIGludCBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoOCwgZS5nZXRJRChycykpOwotCi0gICAgICAgIGlmICghZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KHJzKSkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB1Y2hhcjQuIik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmV3IFNjcmlwdEludHJpbnNpYzNETFVUKGlkLCBycywgZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb259IHRvIGJlIHVzZWQgYXMgdGhlIGxvb2t1cCB0YWJsZS4KLSAgICAgKgotICAgICAqIFRoZSBsb29rdXAgdGFibGUgbXVzdCB1c2UgdGhlIHNhbWUge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnR9IGFzIHRoZSBpbnRyaW5zaWMuCi0gICAgICoKLSAgICAgKi8KLQotICAgIHB1YmxpYyB2b2lkIHNldExVVChBbGxvY2F0aW9uIGx1dCkgewotICAgICAgICBmaW5hbCBUeXBlIHQgPSBsdXQuZ2V0VHlwZSgpOwotCi0gICAgICAgIGlmICh0LmdldFooKSA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkxVVCBtdXN0IGJlIDNkLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0LmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUobUVsZW1lbnQpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkxVVCBlbGVtZW50IHR5cGUgbXVzdCBtYXRjaC4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1MVVQgPSBsdXQ7Ci0gICAgICAgIHNldFZhcigwLCBtTFVUKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIEludm9rZSB0aGUga2VybmVsIGFuZCBhcHBseSB0aGUgbG9va3VwIHRvIGVhY2ggY2VsbCBvZiBhaW4KLSAgICAgKiBhbmQgY29weSB0byBhb3V0LgotICAgICAqCi0gICAgICogQHBhcmFtIGFpbiBJbnB1dCBhbGxvY2F0aW9uCi0gICAgICogQHBhcmFtIGFvdXQgT3V0cHV0IGFsbG9jYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgZm9yRWFjaCgwLCBhaW4sIGFvdXQsIG51bGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGlzIGludHJpbnNpYyBrZXJuZWwuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSUQoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCgwLCAzLCBudWxsLCBudWxsKTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQmxlbmQuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQmxlbmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUwNWJjOC4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0JsZW5kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLQotLyoqCi0gKiBJbnRyaW5zaWMga2VybmVscyBmb3IgYmxlbmRpbmcgdHdvIHtAbGluayBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9ufSBvYmplY3RzLgotICoqLwotcHVibGljIGNsYXNzIFNjcmlwdEludHJpbnNpY0JsZW5kIGV4dGVuZHMgU2NyaXB0SW50cmluc2ljIHsKLSAgICBTY3JpcHRJbnRyaW5zaWNCbGVuZChpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBzdXBlcihpZCwgcnMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN1cHBvcnRlZCBlbGVtZW50cyB0eXBlcyBhcmUge0BsaW5rIEVsZW1lbnQjVThfNH0KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBUaGUgUmVuZGVyU2NyaXB0IGNvbnRleHQKLSAgICAgKiBAcGFyYW0gZSBFbGVtZW50IHR5cGUgZm9yIGlucHV0cyBhbmQgb3V0cHV0cwotICAgICAqCi0gICAgICogQHJldHVybiBTY3JpcHRJbnRyaW5zaWNCbGVuZAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljQmxlbmQgY3JlYXRlKFJlbmRlclNjcmlwdCBycywgRWxlbWVudCBlKSB7Ci0gICAgICAgIC8vIDcgY29tZXMgZnJvbSBSU19TQ1JJUFRfSU5UUklOU0lDX0lEX0JMRU5EIGluIHJzRGVmaW5lcy5oCi0gICAgICAgIGludCBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoNywgZS5nZXRJRChycykpOwotICAgICAgICByZXR1cm4gbmV3IFNjcmlwdEludHJpbnNpY0JsZW5kKGlkLCBycyk7Ci0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYmxlbmQoaW50IGlkLCBBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGlmICghYWluLmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KG1SUykpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklucHV0IGlzIG5vdCBvZiBleHBlY3RlZCBmb3JtYXQuIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFhb3V0LmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KG1SUykpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk91dHB1dCBpcyBub3Qgb2YgZXhwZWN0ZWQgZm9ybWF0LiIpOwotICAgICAgICB9Ci0gICAgICAgIGZvckVhY2goaWQsIGFpbiwgYW91dCwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBkc3QgPSB7MCwgMCwgMCwgMH0KLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKLSAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaENsZWFyKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoMCwgYWluLCBhb3V0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhlIENsZWFyIGtlcm5lbC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRENsZWFyKCkgewotICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoMCwgMywgbnVsbCwgbnVsbCk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBTZXRzIGRzdCA9IHNyYwotICAgICAqCi0gICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgotICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoU3JjKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoMSwgYWluLCBhb3V0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhlIFNyYyBrZXJuZWwuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURTcmMoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCgxLCAzLCBudWxsLCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGRzdCA9IGRzdAotICAgICAqCi0gICAgICogVGhpcyBpcyBhIE5PUC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKLSAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaERzdChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIC8vIE5PUAotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgRHN0IGtlcm5lbC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRERzdCgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDIsIDMsIG51bGwsIG51bGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgZHN0ID0gc3JjICsgZHN0ICogKDEuMCAtIHNyYy5hKQotICAgICAqCi0gICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgotICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoU3JjT3ZlcihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDMsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoZSBTcmNPdmVyIGtlcm5lbC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRFNyY092ZXIoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCgzLCAzLCBudWxsLCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGRzdCA9IGRzdCArIHNyYyAqICgxLjAgLSBkc3QuYSkKLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKLSAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaERzdE92ZXIoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgewotICAgICAgICBibGVuZCg0LCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgRHN0T3ZlciBrZXJuZWwuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSUREc3RPdmVyKCkgewotICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoNCwgMywgbnVsbCwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBkc3QgPSBzcmMgKiBkc3QuYQotICAgICAqCi0gICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgotICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoU3JjSW4oQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgewotICAgICAgICBibGVuZCg1LCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgU3JjSW4ga2VybmVsLgotICAgICAqCi0gICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEU3JjSW4oKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCg1LCAzLCBudWxsLCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGRzdCA9IGRzdCAqIHNyYy5hCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYWluIFRoZSBzb3VyY2UgYnVmZmVyCi0gICAgICogQHBhcmFtIGFvdXQgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hEc3RJbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDYsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoZSBEc3RJbiBrZXJuZWwuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSUREc3RJbigpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDYsIDMsIG51bGwsIG51bGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgZHN0ID0gc3JjICogKDEuMCAtIGRzdC5hKQotICAgICAqCi0gICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgotICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoU3JjT3V0KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoNywgYWluLCBhb3V0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhlIFNyY091dCBrZXJuZWwuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURTcmNPdXQoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCg3LCAzLCBudWxsLCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGRzdCA9IGRzdCAqICgxLjAgLSBzcmMuYSkKLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKLSAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaERzdE91dChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDgsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoZSBEc3RPdXQga2VybmVsLgotICAgICAqCi0gICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElERHN0T3V0KCkgewotICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoOCwgMywgbnVsbCwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogZHN0LnJnYiA9IHNyYy5yZ2IgKiBkc3QuYSArICgxLjAgLSBzcmMuYSkgKiBkc3QucmdiCi0gICAgICogZHN0LmEgPSBkc3QuYQotICAgICAqCi0gICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgotICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoU3JjQXRvcChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDksIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoZSBTcmNBdG9wIGtlcm5lbC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRFNyY0F0b3AoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCg5LCAzLCBudWxsLCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBkc3QgPSBkc3QucmdiICogc3JjLmEgKyAoMS4wIC0gZHN0LmEpICogc3JjLnJnYgotICAgICAqIGRzdC5hID0gc3JjLmEKLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKLSAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaERzdEF0b3AoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgewotICAgICAgICBibGVuZCgxMCwgYWluLCBhb3V0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhlIERzdEF0b3Aga2VybmVsLgotICAgICAqCi0gICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElERHN0QXRvcCgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDEwLCAzLCBudWxsLCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGRzdCA9IHtzcmMuciBeIGRzdC5yLCBzcmMuZyBeIGRzdC5nLCBzcmMuYiBeIGRzdC5iLCBzcmMuYSBeIGRzdC5hfQotICAgICAqCi0gICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgotICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoWG9yKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoMTEsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoZSBYb3Iga2VybmVsLgotICAgICAqCi0gICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEWG9yKCkgewotICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoMTEsIDMsIG51bGwsIG51bGwpOwotICAgIH0KLQotICAgIC8vLy8vLy8vCi0vKgotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hOb3JtYWwoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgewotICAgICAgICBibGVuZCgxMiwgYWluLCBhb3V0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoQXZlcmFnZShBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDEzLCBhaW4sIGFvdXQpOwotICAgIH0KLSovCi0gICAgLyoqCi0gICAgICogU2V0cyBkc3QgPSBzcmMgKiBkc3QKLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKLSAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaE11bHRpcGx5KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoMTQsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoZSBNdWx0aXBseSBrZXJuZWwuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURNdWx0aXBseSgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDE0LCAzLCBudWxsLCBudWxsKTsKLSAgICB9Ci0KLS8qCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaFNjcmVlbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDE1LCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hEYXJrZW4oQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgewotICAgICAgICBibGVuZCgxNiwgYWluLCBhb3V0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoTGlnaHRlbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDE3LCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hPdmVybGF5KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoMTgsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaEhhcmRsaWdodChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDE5LCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hTb2Z0bGlnaHQoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgewotICAgICAgICBibGVuZCgyMCwgYWluLCBhb3V0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoRGlmZmVyZW5jZShBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDIxLCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hOZWdhdGlvbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDIyLCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hFeGNsdXNpb24oQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgewotICAgICAgICBibGVuZCgyMywgYWluLCBhb3V0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoQ29sb3JEb2RnZShBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDI0LCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hJbnZlcnNlQ29sb3JEb2RnZShBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDI1LCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hTb2Z0RG9kZ2UoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgewotICAgICAgICBibGVuZCgyNiwgYWluLCBhb3V0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoQ29sb3JCdXJuKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoMjcsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaEludmVyc2VDb2xvckJ1cm4oQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgewotICAgICAgICBibGVuZCgyOCwgYWluLCBhb3V0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoU29mdEJ1cm4oQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgewotICAgICAgICBibGVuZCgyOSwgYWluLCBhb3V0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoUmVmbGVjdChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDMwLCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hHbG93KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoMzEsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaEZyZWV6ZShBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDMyLCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hIZWF0KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoMzMsIGFpbiwgYW91dCk7Ci0gICAgfQotKi8KLSAgICAvKioKLSAgICAgKiBTZXRzIGRzdCA9IG1pbihzcmMgKyBkc3QsIDEuMCkKLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKLSAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaEFkZChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDM0LCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgQWRkIGtlcm5lbC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJREFkZCgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDM0LCAzLCBudWxsLCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGRzdCA9IG1heChkc3QgLSBzcmMsIDAuMCkKLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKLSAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaFN1YnRyYWN0KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoMzUsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoZSBTdWJ0cmFjdCBrZXJuZWwuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURTdWJ0cmFjdCgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDM1LCAzLCBudWxsLCBudWxsKTsKLSAgICB9Ci0KLS8qCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaFN0YW1wKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoMzYsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaFJlZChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDM3LCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hHcmVlbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDM4LCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hCbHVlKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoMzksIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaEh1ZShBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGJsZW5kKDQwLCBhaW4sIGFvdXQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hTYXR1cmF0aW9uKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoNDEsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaENvbG9yKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgYmxlbmQoNDIsIGFpbiwgYW91dCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaEx1bWlub3NpdHkoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgewotICAgICAgICBibGVuZCg0MywgYWluLCBhb3V0KTsKLSAgICB9Ci0qLwotfQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0JsdXIuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQmx1ci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWY1ZmZjLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQmx1ci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBJbnRyaW5zaWMgR2F1c2lhbiBibHVyIGZpbHRlci4gQXBwbGllcyBhIGdhdXNzaWFuIGJsdXIgb2YgdGhlCi0gKiBzcGVjaWZpZWQgcmFkaXVzIHRvIGFsbCBlbGVtZW50cyBvZiBhbiBhbGxvY2F0aW9uLgotICoKLSAqCi0gKiovCi1wdWJsaWMgZmluYWwgY2xhc3MgU2NyaXB0SW50cmluc2ljQmx1ciBleHRlbmRzIFNjcmlwdEludHJpbnNpYyB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBmbG9hdFtdIG1WYWx1ZXMgPSBuZXcgZmxvYXRbOV07Ci0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1JbnB1dDsKLQotICAgIHByaXZhdGUgU2NyaXB0SW50cmluc2ljQmx1cihpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBzdXBlcihpZCwgcnMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhbiBpbnRyaW5zaWMgZm9yIGFwcGx5aW5nIGEgYmx1ciB0byBhbiBhbGxvY2F0aW9uLiBUaGUKLSAgICAgKiBkZWZhdWx0IHJhZGl1cyBpcyA1LjAuCi0gICAgICoKLSAgICAgKiBTdXBwb3J0ZWQgZWxlbWVudHMgdHlwZXMgYXJlIHtAbGluayBFbGVtZW50I1U4XzR9Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgVGhlIFJlbmRlclNjcmlwdCBjb250ZXh0Ci0gICAgICogQHBhcmFtIGUgRWxlbWVudCB0eXBlIGZvciBpbnB1dHMgYW5kIG91dHB1dHMKLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0SW50cmluc2ljQmx1cgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljQmx1ciBjcmVhdGUoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUpIHsKLSAgICAgICAgaWYgKCghZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KHJzKSkpICYmICghZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOChycykpKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnN1cG9ydGVkIGVsZW1lbnQgdHlwZS4iKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDUsIGUuZ2V0SUQocnMpKTsKLSAgICAgICAgU2NyaXB0SW50cmluc2ljQmx1ciBzaWIgPSBuZXcgU2NyaXB0SW50cmluc2ljQmx1cihpZCwgcnMpOwotICAgICAgICBzaWIuc2V0UmFkaXVzKDUuZik7Ci0gICAgICAgIHJldHVybiBzaWI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBpbnB1dCBvZiB0aGUgYmx1ci4KLSAgICAgKiBNdXN0IG1hdGNoIHRoZSBlbGVtZW50IHR5cGUgc3VwcGxpZWQgZHVyaW5nIGNyZWF0ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gVGhlIGlucHV0IGFsbG9jYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRJbnB1dChBbGxvY2F0aW9uIGFpbikgewotICAgICAgICBtSW5wdXQgPSBhaW47Ci0gICAgICAgIHNldFZhcigxLCBhaW4pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldCB0aGUgcmFkaXVzIG9mIHRoZSBCbHVyLgotICAgICAqCi0gICAgICogU3VwcG9ydGVkIHJhbmdlIDAgPCByYWRpdXMgPD0gMjUKLSAgICAgKgotICAgICAqIEBwYXJhbSByYWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgYmx1cgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFJhZGl1cyhmbG9hdCByYWRpdXMpIHsKLSAgICAgICAgaWYgKHJhZGl1cyA8PSAwIHx8IHJhZGl1cyA+IDI1KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlJhZGl1cyBvdXQgb2YgcmFuZ2UgKDAgPCByIDw9IDI1KS4iKTsKLSAgICAgICAgfQotICAgICAgICBzZXRWYXIoMCwgcmFkaXVzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBcHBseSB0aGUgZmlsdGVyIHRvIHRoZSBpbnB1dCBhbmQgc2F2ZSB0byB0aGUgc3BlY2lmaWVkCi0gICAgICogYWxsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhb3V0IE91dHB1dCBhbGxvY2F0aW9uLiBNdXN0IG1hdGNoIGNyZWF0aW9uIGVsZW1lbnQKLSAgICAgKiAgICAgICAgICAgICB0eXBlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGZvckVhY2goQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGZvckVhY2goMCwgbnVsbCwgYW91dCwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoaXMgaW50cmluc2ljIGtlcm5lbC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRCgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDAsIDIsIG51bGwsIG51bGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBhIEZpZWxkSUQgZm9yIHRoZSBpbnB1dCBmaWVsZCBvZiB0aGlzIGludHJpbnNpYy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0LkZpZWxkSUQgVGhlIEZpZWxkSUQgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBTY3JpcHQuRmllbGRJRCBnZXRGaWVsZElEX0lucHV0KCkgewotICAgICAgICByZXR1cm4gY3JlYXRlRmllbGRJRCgxLCBudWxsKTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXguamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJjM2QxNS4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0NvbG9yTWF0cml4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEludHJpbnNpYyBmb3IgYXBwbHlpbmcgYSBjb2xvciBtYXRyaXggdG8gYWxsb2NhdGlvbnMuCi0gKgotICogSWYgdGhlIGVsZW1lbnQgdHlwZSBpcyB7QGxpbmsgRWxlbWVudC5EYXRhVHlwZSNVTlNJR05FRF84fSwKLSAqIGl0IGlzIGNvbnZlcnRlZCB0byB7QGxpbmsgRWxlbWVudC5EYXRhVHlwZSNGTE9BVF8zMn0gYW5kCi0gKiBub3JtYWxpemVkIGZyb20gKDAtMjU1KSB0byAoMC0xKS4gSWYgdGhlIGluY29taW5nIHZlY3RvciBzaXplCi0gKiBpcyBsZXNzIHRoYW4gZm91ciwgYSB7QGxpbmsgRWxlbWVudCNGMzJfNH0gaXMgY3JlYXRlZCBieQotICogZmlsbGluZyB0aGUgbWlzc2luZyB2ZWN0b3IgY2hhbm5lbHMgd2l0aCB6ZXJvLiBUaGlzIHZhbHVlIGlzCi0gKiB0aGVuIG11bHRpcGxpZWQgYnkgdGhlIDR4NCBjb2xvciBtYXRyaXggYXMgcGVyZm9ybWVkIGJ5Ci0gKiByc01hdHJpeE11bHRpcGx5KCksIGFkZGluZyBhIHtAbGluayBFbGVtZW50I0YzMl80fSwgYW5kIHRoZW4KLSAqIHdyaXRpbmcgaXQgdG8gdGhlIG91dHB1dCB7QGxpbmsgQWxsb2NhdGlvbn0uCi0gKgotICogSWYgdGhlIG91cHR1dCB0eXBlIGlzIHVuc2lnbmVkLCB0aGUgdmFsdWUgaXMgbm9ybWFsaXplZCBmcm9tCi0gKiAoMC0xKSB0byAoMC0yNTUpIGFuZCBjb252ZXJ0ZWQuIElmIHRoZSBvdXRwdXQgdmVjdG9yIHNpemUgaXMKLSAqIGxlc3MgdGhhbiBmb3VyLCB0aGUgdW51c2VkIGNoYW5uZWxzIGFyZSBkaXNjYXJkZWQuCi0gKgotICogU3VwcG9ydGVkIGVsZW1lbnRzIHR5cGVzIGFyZSB7QGxpbmsgRWxlbWVudCNVOH0sIHtAbGluawotICogRWxlbWVudCNVOF8yfSwge0BsaW5rIEVsZW1lbnQjVThfM30sIHtAbGluayBFbGVtZW50I1U4XzR9LAotICoge0BsaW5rIEVsZW1lbnQjRjMyfSwge0BsaW5rIEVsZW1lbnQjRjMyXzJ9LCB7QGxpbmsKLSAqIEVsZW1lbnQjRjMyXzN9LCBhbmQge0BsaW5rIEVsZW1lbnQjRjMyXzR9LgotICoqLwotcHVibGljIGZpbmFsIGNsYXNzIFNjcmlwdEludHJpbnNpY0NvbG9yTWF0cml4IGV4dGVuZHMgU2NyaXB0SW50cmluc2ljIHsKLSAgICBwcml2YXRlIGZpbmFsIE1hdHJpeDRmIG1NYXRyaXggPSBuZXcgTWF0cml4NGYoKTsKLSAgICBwcml2YXRlIGZpbmFsIEZsb2F0NCBtQWRkID0gbmV3IEZsb2F0NCgpOwotCi0gICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeChpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBzdXBlcihpZCwgcnMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhbiBpbnRyaW5zaWMgZm9yIGFwcGx5aW5nIGEgY29sb3IgbWF0cml4IHRvIGFuCi0gICAgICogYWxsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBUaGUgUmVuZGVyU2NyaXB0IGNvbnRleHQKLSAgICAgKiBAcGFyYW0gZSBFbGVtZW50IHR5cGUgZm9yIGlucHV0cyBhbmQgb3V0cHV0cywgQXMgb2YgQVBJIDE5LAotICAgICAqICAgICAgICAgIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIFRoZSBFbGVtZW50IHR5cGUgY2hlY2sgaXMKLSAgICAgKiAgICAgICAgICBwZXJmb3JtZWQgaW4gdGhlIGtlcm5lbCBsYXVuY2guCi0gICAgICoKLSAgICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIHNpbmdsZSBhcmd1bWVudCB2ZXJzaW9uIGFzIEVsZW1lbnQgaXMgbm93Ci0gICAgICogICAgICAgICAgICAgaWdub3JlZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXgKLSAgICAgKi8KLSAgICBARGVwcmVjYXRlZAotICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXggY3JlYXRlKFJlbmRlclNjcmlwdCBycywgRWxlbWVudCBlKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGUocnMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhbiBpbnRyaW5zaWMgZm9yIGFwcGx5aW5nIGEgY29sb3IgbWF0cml4IHRvIGFuCi0gICAgICogYWxsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBUaGUgUmVuZGVyU2NyaXB0IGNvbnRleHQKLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXgKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNjcmlwdEludHJpbnNpY0NvbG9yTWF0cml4IGNyZWF0ZShSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgaW50IGlkID0gcnMublNjcmlwdEludHJpbnNpY0NyZWF0ZSgyLCAwKTsKLSAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeChpZCwgcnMpOwotCi0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldE1hdHJpeCgpIHsKLSAgICAgICAgRmllbGRQYWNrZXIgZnAgPSBuZXcgRmllbGRQYWNrZXIoMTYqNCk7Ci0gICAgICAgIGZwLmFkZE1hdHJpeChtTWF0cml4KTsKLSAgICAgICAgc2V0VmFyKDAsIGZwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIGNvbG9yIG1hdHJpeCB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBjZWxsIG9mCi0gICAgICogdGhlIGltYWdlLgotICAgICAqCi0gICAgICogQHBhcmFtIG0gVGhlIDR4NCBtYXRyaXggdG8gc2V0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldENvbG9yTWF0cml4KE1hdHJpeDRmIG0pIHsKLSAgICAgICAgbU1hdHJpeC5sb2FkKG0pOwotICAgICAgICBzZXRNYXRyaXgoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIGNvbG9yIG1hdHJpeCB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBjZWxsIG9mIHRoZSBpbWFnZS4KLSAgICAgKiBUaGlzIHdpbGwgc2V0IHRoZSBhbHBoYSBjaGFubmVsIHRvIGJlIGEgY29weS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBtIFRoZSAzeDMgbWF0cml4IHRvIHNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRDb2xvck1hdHJpeChNYXRyaXgzZiBtKSB7Ci0gICAgICAgIG1NYXRyaXgubG9hZChtKTsKLSAgICAgICAgc2V0TWF0cml4KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSB2YWx1ZSB0byBiZSBhZGRlZCBhZnRlciB0aGUgY29sb3IgbWF0cml4IGhhcyBiZWVuCi0gICAgICogYXBwbGllZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgezAsIDAsIDAsIDB9Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gZiBUaGUgZmxvYXQ0IHZhbHVlIHRvIGJlIGFkZGVkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEFkZChGbG9hdDQgZikgewotICAgICAgICBtQWRkLnggPSBmLng7Ci0gICAgICAgIG1BZGQueSA9IGYueTsKLSAgICAgICAgbUFkZC56ID0gZi56OwotICAgICAgICBtQWRkLncgPSBmLnc7Ci0KLSAgICAgICAgRmllbGRQYWNrZXIgZnAgPSBuZXcgRmllbGRQYWNrZXIoNCo0KTsKLSAgICAgICAgZnAuYWRkRjMyKGYueCk7Ci0gICAgICAgIGZwLmFkZEYzMihmLnkpOwotICAgICAgICBmcC5hZGRGMzIoZi56KTsKLSAgICAgICAgZnAuYWRkRjMyKGYudyk7Ci0gICAgICAgIHNldFZhcigxLCBmcCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSB2YWx1ZSB0byBiZSBhZGRlZCBhZnRlciB0aGUgY29sb3IgbWF0cml4IGhhcyBiZWVuCi0gICAgICogYXBwbGllZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgezAsIDAsIDAsIDB9Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gciBUaGUgcmVkIGFkZCB2YWx1ZS4KLSAgICAgKiBAcGFyYW0gZyBUaGUgZ3JlZW4gYWRkIHZhbHVlLgotICAgICAqIEBwYXJhbSBiIFRoZSBibHVlIGFkZCB2YWx1ZS4KLSAgICAgKiBAcGFyYW0gYSBUaGUgYWxwaGEgYWRkIHZhbHVlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEFkZChmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKSB7Ci0gICAgICAgIG1BZGQueCA9IHI7Ci0gICAgICAgIG1BZGQueSA9IGc7Ci0gICAgICAgIG1BZGQueiA9IGI7Ci0gICAgICAgIG1BZGQudyA9IGE7Ci0KLSAgICAgICAgRmllbGRQYWNrZXIgZnAgPSBuZXcgRmllbGRQYWNrZXIoNCo0KTsKLSAgICAgICAgZnAuYWRkRjMyKG1BZGQueCk7Ci0gICAgICAgIGZwLmFkZEYzMihtQWRkLnkpOwotICAgICAgICBmcC5hZGRGMzIobUFkZC56KTsKLSAgICAgICAgZnAuYWRkRjMyKG1BZGQudyk7Ci0gICAgICAgIHNldFZhcigxLCBmcCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IGEgY29sb3IgbWF0cml4IHRvIGNvbnZlcnQgZnJvbSBSR0IgdG8gbHVtaW5hbmNlLiBUaGUgYWxwaGEgY2hhbm5lbAotICAgICAqIHdpbGwgYmUgYSBjb3B5LgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0R3JleXNjYWxlKCkgewotICAgICAgICBtTWF0cml4LmxvYWRJZGVudGl0eSgpOwotICAgICAgICBtTWF0cml4LnNldCgwLCAwLCAwLjI5OWYpOwotICAgICAgICBtTWF0cml4LnNldCgxLCAwLCAwLjU4N2YpOwotICAgICAgICBtTWF0cml4LnNldCgyLCAwLCAwLjExNGYpOwotICAgICAgICBtTWF0cml4LnNldCgwLCAxLCAwLjI5OWYpOwotICAgICAgICBtTWF0cml4LnNldCgxLCAxLCAwLjU4N2YpOwotICAgICAgICBtTWF0cml4LnNldCgyLCAxLCAwLjExNGYpOwotICAgICAgICBtTWF0cml4LnNldCgwLCAyLCAwLjI5OWYpOwotICAgICAgICBtTWF0cml4LnNldCgxLCAyLCAwLjU4N2YpOwotICAgICAgICBtTWF0cml4LnNldCgyLCAyLCAwLjExNGYpOwotICAgICAgICBzZXRNYXRyaXgoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIG1hdHJpeCB0byBjb252ZXJ0IGZyb20gWVVWIHRvIFJHQiB3aXRoIGEgZGlyZWN0IGNvcHkgb2YgdGhlIDR0aAotICAgICAqIGNoYW5uZWwuCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRZVVZ0b1JHQigpIHsKLSAgICAgICAgbU1hdHJpeC5sb2FkSWRlbnRpdHkoKTsKLSAgICAgICAgbU1hdHJpeC5zZXQoMCwgMCwgMS5mKTsKLSAgICAgICAgbU1hdHJpeC5zZXQoMSwgMCwgMC5mKTsKLSAgICAgICAgbU1hdHJpeC5zZXQoMiwgMCwgMS4xMzk4M2YpOwotICAgICAgICBtTWF0cml4LnNldCgwLCAxLCAxLmYpOwotICAgICAgICBtTWF0cml4LnNldCgxLCAxLCAtMC4zOTQ2NWYpOwotICAgICAgICBtTWF0cml4LnNldCgyLCAxLCAtMC41ODA2Zik7Ci0gICAgICAgIG1NYXRyaXguc2V0KDAsIDIsIDEuZik7Ci0gICAgICAgIG1NYXRyaXguc2V0KDEsIDIsIDIuMDMyMTFmKTsKLSAgICAgICAgbU1hdHJpeC5zZXQoMiwgMiwgMC5mKTsKLSAgICAgICAgc2V0TWF0cml4KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBtYXRyaXggdG8gY29udmVydCBmcm9tIFJHQiB0byBZVVYgd2l0aCBhIGRpcmVjdCBjb3B5IG9mIHRoZSA0dGgKLSAgICAgKiBjaGFubmVsLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UkdCdG9ZVVYoKSB7Ci0gICAgICAgIG1NYXRyaXgubG9hZElkZW50aXR5KCk7Ci0gICAgICAgIG1NYXRyaXguc2V0KDAsIDAsIDAuMjk5Zik7Ci0gICAgICAgIG1NYXRyaXguc2V0KDEsIDAsIDAuNTg3Zik7Ci0gICAgICAgIG1NYXRyaXguc2V0KDIsIDAsIDAuMTE0Zik7Ci0gICAgICAgIG1NYXRyaXguc2V0KDAsIDEsIC0wLjE0NzEzZik7Ci0gICAgICAgIG1NYXRyaXguc2V0KDEsIDEsIC0wLjI4ODg2Zik7Ci0gICAgICAgIG1NYXRyaXguc2V0KDIsIDEsIDAuNDM2Zik7Ci0gICAgICAgIG1NYXRyaXguc2V0KDAsIDIsIDAuNjE1Zik7Ci0gICAgICAgIG1NYXRyaXguc2V0KDEsIDIsIC0wLjUxNDk5Zik7Ci0gICAgICAgIG1NYXRyaXguc2V0KDIsIDIsIC0wLjEwMDAxZik7Ci0gICAgICAgIHNldE1hdHJpeCgpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogSW52b2tlIHRoZSBrZXJuZWwgYW5kIGFwcGx5IHRoZSBtYXRyaXggdG8gZWFjaCBjZWxsIG9mIGlucHV0Ci0gICAgICoge0BsaW5rIEFsbG9jYXRpb259IGFuZCBjb3B5IHRvIHRoZSBvdXRwdXQge0BsaW5rIEFsbG9jYXRpb259LgotICAgICAqCi0gICAgICogSWYgdGhlIHZlY3RvciBzaXplIG9mIHRoZSBpbnB1dCBpcyBsZXNzIHRoYW4gZm91ciwgdGhlCi0gICAgICogcmVtYWluaW5nIGNvbXBvbmVudHMgYXJlIHRyZWF0ZWQgYXMgemVybyBmb3IgdGhlIG1hdHJpeAotICAgICAqIG11bHRpcGx5LgotICAgICAqCi0gICAgICogSWYgdGhlIG91dHB1dCB2ZWN0b3Igc2l6ZSBpcyBsZXNzIHRoYW4gZm91ciwgdGhlIHVudXNlZAotICAgICAqIHZlY3RvciBjb21wb25lbnRzIGFyZSBkaXNjYXJkZWQuCi0gICAgICoKLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gSW5wdXQgYWxsb2NhdGlvbgotICAgICAqIEBwYXJhbSBhb3V0IE91dHB1dCBhbGxvY2F0aW9uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGlmICghYWluLmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOChtUlMpKSAmJgotICAgICAgICAgICAgIWFpbi5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMihtUlMpKSAmJgotICAgICAgICAgICAgIWFpbi5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMyhtUlMpKSAmJgotICAgICAgICAgICAgIWFpbi5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfNChtUlMpKSAmJgotICAgICAgICAgICAgIWFpbi5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuRjMyKG1SUykpICYmCi0gICAgICAgICAgICAhYWluLmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5GMzJfMihtUlMpKSAmJgotICAgICAgICAgICAgIWFpbi5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuRjMyXzMobVJTKSkgJiYKLSAgICAgICAgICAgICFhaW4uZ2V0RWxlbWVudCgpLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMl80KG1SUykpKSB7Ci0KLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5zdXBvcnRlZCBlbGVtZW50IHR5cGUuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWFvdXQuZ2V0RWxlbWVudCgpLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4KG1SUykpICYmCi0gICAgICAgICAgICAhYW91dC5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMihtUlMpKSAmJgotICAgICAgICAgICAgIWFvdXQuZ2V0RWxlbWVudCgpLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4XzMobVJTKSkgJiYKLSAgICAgICAgICAgICFhb3V0LmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KG1SUykpICYmCi0gICAgICAgICAgICAhYW91dC5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuRjMyKG1SUykpICYmCi0gICAgICAgICAgICAhYW91dC5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuRjMyXzIobVJTKSkgJiYKLSAgICAgICAgICAgICFhb3V0LmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5GMzJfMyhtUlMpKSAmJgotICAgICAgICAgICAgIWFvdXQuZ2V0RWxlbWVudCgpLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMl80KG1SUykpKSB7Ci0KLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5zdXBvcnRlZCBlbGVtZW50IHR5cGUuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3JFYWNoKDAsIGFpbiwgYW91dCwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoaXMgaW50cmluc2ljIGtlcm5lbC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRCgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDAsIDMsIG51bGwsIG51bGwpOwotICAgIH0KLQotfQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkM2MxZDMuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb252b2x2ZTN4My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBJbnRyaW5zaWMgZm9yIGFwcGx5aW5nIGEgM3gzIGNvbnZvbHZlIHRvIGFuIGFsbG9jYXRpb24uCi0gKgotICoqLwotcHVibGljIGZpbmFsIGNsYXNzIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzIGV4dGVuZHMgU2NyaXB0SW50cmluc2ljIHsKLSAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVZhbHVlcyA9IG5ldyBmbG9hdFs5XTsKLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbUlucHV0OwotCi0gICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWNDb252b2x2ZTN4MyhpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBzdXBlcihpZCwgcnMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN1cHBvcnRlZCBlbGVtZW50cyB0eXBlcyBhcmUge0BsaW5rIEVsZW1lbnQjVTh9LCB7QGxpbmsKLSAgICAgKiBFbGVtZW50I1U4XzJ9LCB7QGxpbmsgRWxlbWVudCNVOF8zfSwge0BsaW5rIEVsZW1lbnQjVThfNH0sCi0gICAgICoge0BsaW5rIEVsZW1lbnQjRjMyfSwge0BsaW5rIEVsZW1lbnQjRjMyXzJ9LCB7QGxpbmsKLSAgICAgKiBFbGVtZW50I0YzMl8zfSwgYW5kIHtAbGluayBFbGVtZW50I0YzMl80fQotICAgICAqCi0gICAgICogVGhlIGRlZmF1bHQgY29lZmZpY2llbnRzIGFyZS4KLSAgICAgKgotICAgICAqIDxjb2RlPgotICAgICAqIDxwPiBbIDAsICAwLCAgMCBdCi0gICAgICogPHA+IFsgMCwgIDEsICAwIF0KLSAgICAgKiA8cD4gWyAwLCAgMCwgIDAgXQotICAgICAqIDwvY29kZT4KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBUaGUgUmVuZGVyU2NyaXB0IGNvbnRleHQKLSAgICAgKiBAcGFyYW0gZSBFbGVtZW50IHR5cGUgZm9yIGludHB1dHMgYW5kIG91dHB1dHMKLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0SW50cmluc2ljQ29udm9sdmUzeDMKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzIGNyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSkgewotICAgICAgICBmbG9hdCBmW10gPSB7IDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDB9OwotICAgICAgICBpZiAoIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuVTgocnMpKSAmJgotICAgICAgICAgICAgIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMihycykpICYmCi0gICAgICAgICAgICAhZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF8zKHJzKSkgJiYKLSAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4XzQocnMpKSAmJgotICAgICAgICAgICAgIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuRjMyKHJzKSkgJiYKLSAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMl8yKHJzKSkgJiYKLSAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMl8zKHJzKSkgJiYKLSAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMl80KHJzKSkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5zdXBvcnRlZCBlbGVtZW50IHR5cGUuIik7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGlkID0gcnMublNjcmlwdEludHJpbnNpY0NyZWF0ZSgxLCBlLmdldElEKHJzKSk7Ci0gICAgICAgIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzIHNpID0gbmV3IFNjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzKGlkLCBycyk7Ci0gICAgICAgIHNpLnNldENvZWZmaWNpZW50cyhmKTsKLSAgICAgICAgcmV0dXJuIHNpOwotCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBpbnB1dCBvZiB0aGUgYmx1ci4KLSAgICAgKiBNdXN0IG1hdGNoIHRoZSBlbGVtZW50IHR5cGUgc3VwcGxpZWQgZHVyaW5nIGNyZWF0ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gVGhlIGlucHV0IGFsbG9jYXRpb24uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0SW5wdXQoQWxsb2NhdGlvbiBhaW4pIHsKLSAgICAgICAgbUlucHV0ID0gYWluOwotICAgICAgICBzZXRWYXIoMSwgYWluKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIGNvZWZmaWNpZW50cyBmb3IgdGhlIGNvbnZvbHZlLgotICAgICAqCi0gICAgICogVGhlIGNvbnZvbHZlIGxheW91dCBpcwotICAgICAqIDxjb2RlPgotICAgICAqIDxwPiBbIDAsICAxLCAgMiBdCi0gICAgICogPHA+IFsgMywgIDQsICA1IF0KLSAgICAgKiA8cD4gWyA2LCAgNywgIDggXQotICAgICAqIDwvY29kZT4KLSAgICAgKgotICAgICAqIEBwYXJhbSB2IFRoZSBhcnJheSBvZiBjb2VmZmljaWVudHMgdG8gc2V0Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Q29lZmZpY2llbnRzKGZsb2F0IHZbXSkgewotICAgICAgICBGaWVsZFBhY2tlciBmcCA9IG5ldyBGaWVsZFBhY2tlcig5KjQpOwotICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IG1WYWx1ZXMubGVuZ3RoOyBjdCsrKSB7Ci0gICAgICAgICAgICBtVmFsdWVzW2N0XSA9IHZbY3RdOwotICAgICAgICAgICAgZnAuYWRkRjMyKG1WYWx1ZXNbY3RdKTsKLSAgICAgICAgfQotICAgICAgICBzZXRWYXIoMCwgZnApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFwcGx5IHRoZSBmaWx0ZXIgdG8gdGhlIGlucHV0IGFuZCBzYXZlIHRvIHRoZSBzcGVjaWZpZWQKLSAgICAgKiBhbGxvY2F0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIGFvdXQgT3V0cHV0IGFsbG9jYXRpb24uIE11c3QgbWF0Y2ggY3JlYXRpb24gZWxlbWVudAotICAgICAqICAgICAgICAgICAgIHR5cGUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaChBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgZm9yRWFjaCgwLCBudWxsLCBhb3V0LCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhpcyBpbnRyaW5zaWMga2VybmVsLgotICAgICAqCi0gICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEKCkgewotICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoMCwgMiwgbnVsbCwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgRmllbGRJRCBmb3IgdGhlIGlucHV0IGZpZWxkIG9mIHRoaXMgaW50cmluc2ljLgotICAgICAqCi0gICAgICogQHJldHVybiBTY3JpcHQuRmllbGRJRCBUaGUgRmllbGRJRCBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIFNjcmlwdC5GaWVsZElEIGdldEZpZWxkSURfSW5wdXQoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVGaWVsZElEKDEsIG51bGwpOwotICAgIH0KLQotfQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0NvbnZvbHZlNXg1LmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0NvbnZvbHZlNXg1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMDlmOTUuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb252b2x2ZTV4NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBJbnRyaW5zaWMgZm9yIGFwcGx5aW5nIGEgNXg1IGNvbnZvbHZlIHRvIGFuIGFsbG9jYXRpb24uCi0gKgotICoqLwotcHVibGljIGZpbmFsIGNsYXNzIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlNXg1IGV4dGVuZHMgU2NyaXB0SW50cmluc2ljIHsKLSAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVZhbHVlcyA9IG5ldyBmbG9hdFsyNV07Ci0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1JbnB1dDsKLQotICAgIHByaXZhdGUgU2NyaXB0SW50cmluc2ljQ29udm9sdmU1eDUoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgc3VwZXIoaWQsIHJzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdXBwb3J0ZWQgZWxlbWVudHMgdHlwZXMgYXJlIHtAbGluayBFbGVtZW50I1U4fSwge0BsaW5rCi0gICAgICogRWxlbWVudCNVOF8yfSwge0BsaW5rIEVsZW1lbnQjVThfM30sIHtAbGluayBFbGVtZW50I1U4XzR9LAotICAgICAqIHtAbGluayBFbGVtZW50I0YzMn0sIHtAbGluayBFbGVtZW50I0YzMl8yfSwge0BsaW5rCi0gICAgICogRWxlbWVudCNGMzJfM30sIGFuZCB7QGxpbmsgRWxlbWVudCNGMzJfNH0KLSAgICAgKgotICAgICAqIFRoZSBkZWZhdWx0IGNvZWZmaWNpZW50cyBhcmUuCi0gICAgICogPGNvZGU+Ci0gICAgICogPHA+IFsgMCwgIDAsICAwLCAgMCwgIDAgIF0KLSAgICAgKiA8cD4gWyAwLCAgMCwgIDAsICAwLCAgMCAgXQotICAgICAqIDxwPiBbIDAsICAwLCAgMSwgIDAsICAwICBdCi0gICAgICogPHA+IFsgMCwgIDAsICAwLCAgMCwgIDAgIF0KLSAgICAgKiA8cD4gWyAwLCAgMCwgIDAsICAwLCAgMCAgXQotICAgICAqIDwvY29kZT4KLSAgICAgKgotICAgICAqIEBwYXJhbSBycyBUaGUgUmVuZGVyU2NyaXB0IGNvbnRleHQKLSAgICAgKiBAcGFyYW0gZSBFbGVtZW50IHR5cGUgZm9yIGludHB1dHMgYW5kIG91dHB1dHMKLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0SW50cmluc2ljQ29udm9sdmU1eDUKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlNXg1IGNyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSkgewotICAgICAgICBpZiAoIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuVTgocnMpKSAmJgotICAgICAgICAgICAgIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMihycykpICYmCi0gICAgICAgICAgICAhZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF8zKHJzKSkgJiYKLSAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4XzQocnMpKSAmJgotICAgICAgICAgICAgIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuRjMyKHJzKSkgJiYKLSAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMl8yKHJzKSkgJiYKLSAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMl8zKHJzKSkgJiYKLSAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMl80KHJzKSkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5zdXBvcnRlZCBlbGVtZW50IHR5cGUuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDQsIGUuZ2V0SUQocnMpKTsKLSAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRJbnRyaW5zaWNDb252b2x2ZTV4NShpZCwgcnMpOwotCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBpbnB1dCBvZiB0aGUgYmx1ci4KLSAgICAgKiBNdXN0IG1hdGNoIHRoZSBlbGVtZW50IHR5cGUgc3VwcGxpZWQgZHVyaW5nIGNyZWF0ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gVGhlIGlucHV0IGFsbG9jYXRpb24uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0SW5wdXQoQWxsb2NhdGlvbiBhaW4pIHsKLSAgICAgICAgbUlucHV0ID0gYWluOwotICAgICAgICBzZXRWYXIoMSwgYWluKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFNldCB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUgY29udm9sdmUuCi0gICAgKgotICAgICogVGhlIGNvbnZvbHZlIGxheW91dCBpcwotICAgICogPGNvZGU+Ci0gICAgKiA8cD4gWyAwLCAgMSwgIDIsICAzLCAgNCAgXQotICAgICogPHA+IFsgNSwgIDYsICA3LCAgOCwgIDkgIF0KLSAgICAqIDxwPiBbIDEwLCAxMSwgMTIsIDEzLCAxNCBdCi0gICAgKiA8cD4gWyAxNSwgMTYsIDE3LCAxOCwgMTkgXQotICAgICogPHA+IFsgMjAsIDIxLCAyMiwgMjMsIDI0IF0KLSAgICAqIDwvY29kZT4KLSAgICAqCi0gICAgKiBAcGFyYW0gdiBUaGUgYXJyYXkgb2YgY29lZmZpY2llbnRzIHRvIHNldAotICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Q29lZmZpY2llbnRzKGZsb2F0IHZbXSkgewotICAgICAgICBGaWVsZFBhY2tlciBmcCA9IG5ldyBGaWVsZFBhY2tlcigyNSo0KTsKLSAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBtVmFsdWVzLmxlbmd0aDsgY3QrKykgewotICAgICAgICAgICAgbVZhbHVlc1tjdF0gPSB2W2N0XTsKLSAgICAgICAgICAgIGZwLmFkZEYzMihtVmFsdWVzW2N0XSk7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0VmFyKDAsIGZwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBcHBseSB0aGUgZmlsdGVyIHRvIHRoZSBpbnB1dCBhbmQgc2F2ZSB0byB0aGUgc3BlY2lmaWVkCi0gICAgICogYWxsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhb3V0IE91dHB1dCBhbGxvY2F0aW9uLiBNdXN0IG1hdGNoIGNyZWF0aW9uIGVsZW1lbnQKLSAgICAgKiAgICAgICAgICAgICB0eXBlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGZvckVhY2goQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGZvckVhY2goMCwgbnVsbCwgYW91dCwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoaXMgaW50cmluc2ljIGtlcm5lbC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRCgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDAsIDIsIG51bGwsIG51bGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBhIEZpZWxkSUQgZm9yIHRoZSBpbnB1dCBmaWVsZCBvZiB0aGlzIGludHJpbnNpYy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU2NyaXB0LkZpZWxkSUQgVGhlIEZpZWxkSUQgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBTY3JpcHQuRmllbGRJRCBnZXRGaWVsZElEX0lucHV0KCkgewotICAgICAgICByZXR1cm4gY3JlYXRlRmllbGRJRCgxLCBudWxsKTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljSGlzdG9ncmFtLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0hpc3RvZ3JhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGMyZDk1Li4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljSGlzdG9ncmFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEludHJpbnNpYyBIaXN0b2dyYW0gZmlsdGVyLgotICoKLSAqCi0gKiovCi1wdWJsaWMgZmluYWwgY2xhc3MgU2NyaXB0SW50cmluc2ljSGlzdG9ncmFtIGV4dGVuZHMgU2NyaXB0SW50cmluc2ljIHsKLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbU91dDsKLQotICAgIHByaXZhdGUgU2NyaXB0SW50cmluc2ljSGlzdG9ncmFtKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGFuIGludHJpbnNpYyBmb3IgY2FsY3VsYXRpbmcgdGhlIGhpc3RvZ3JhbSBvZiBhbiB1Y2hhcgotICAgICAqIG9yIHVjaGFyNCBpbWFnZS4KLSAgICAgKgotICAgICAqIFN1cHBvcnRlZCBlbGVtZW50cyB0eXBlcyBhcmUKLSAgICAgKiB7QGxpbmsgRWxlbWVudCNVOF80fSwge0BsaW5rIEVsZW1lbnQjVThfM30sCi0gICAgICoge0BsaW5rIEVsZW1lbnQjVThfMn0sIHtAbGluayBFbGVtZW50I1U4fQotICAgICAqCi0gICAgICogQHBhcmFtIHJzIFRoZSBSZW5kZXJTY3JpcHQgY29udGV4dAotICAgICAqIEBwYXJhbSBlIEVsZW1lbnQgdHlwZSBmb3IgaW5wdXRzCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdEludHJpbnNpY0hpc3RvZ3JhbQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljSGlzdG9ncmFtIGNyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSkgewotICAgICAgICBpZiAoKCFlLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4XzQocnMpKSkgJiYKLSAgICAgICAgICAgICghZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF8zKHJzKSkpICYmCi0gICAgICAgICAgICAoIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMihycykpKSAmJgotICAgICAgICAgICAgKCFlLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4KHJzKSkpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuc3Vwb3J0ZWQgZWxlbWVudCB0eXBlLiIpOwotICAgICAgICB9Ci0gICAgICAgIGludCBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoOSwgZS5nZXRJRChycykpOwotICAgICAgICBTY3JpcHRJbnRyaW5zaWNIaXN0b2dyYW0gc2liID0gbmV3IFNjcmlwdEludHJpbnNpY0hpc3RvZ3JhbShpZCwgcnMpOwotICAgICAgICByZXR1cm4gc2liOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb2Nlc3MgYW4gaW5wdXQgYnVmZmVyIGFuZCBwbGFjZSB0aGUgaGlzdG9ncmFtIGludG8gdGhlCi0gICAgICogb3V0cHV0IGFsbG9jYXRpb24uIFRoZSBvdXRwdXQgYWxsb2NhdGlvbiBtYXkgYmUgYSBuYXJyb3dlcgotICAgICAqIHZlY3RvciBzaXplIHRoYW4gdGhlIGlucHV0LiBJbiB0aGlzIGNhc2UgdGhlIHZlY3RvciBzaXplIG9mCi0gICAgICogdGhlIG91dHB1dCBpcyB1c2VkIHRvIGRldGVybWluZSBob3cgbWFueSBvZiB0aGUgaW5wdXQKLSAgICAgKiBjaGFubmVscyBhcmUgdXNlZCBpbiB0aGUgY29tcHV0YXRpb24uIFRoaXMgaXMgdXNlZnVsIGlmIHlvdQotICAgICAqIGhhdmUgYW4gUkdCQSBpbnB1dCBidWZmZXIgYnV0IG9ubHkgd2FudCB0aGUgaGlzdG9ncmFtIGZvcgotICAgICAqIFJHQi4KLSAgICAgKgotICAgICAqIDFEIGFuZCAyRCBpbnB1dCBhbGxvY2F0aW9ucyBhcmUgc3VwcG9ydGVkLgotICAgICAqCi0gICAgICogQHBhcmFtIGFpbiBUaGUgaW5wdXQgaW1hZ2UKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmb3JFYWNoKEFsbG9jYXRpb24gYWluKSB7Ci0gICAgICAgIGlmIChhaW4uZ2V0VHlwZSgpLmdldEVsZW1lbnQoKS5nZXRWZWN0b3JTaXplKCkgPAotICAgICAgICAgICAgbU91dC5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpLmdldFZlY3RvclNpemUoKSkgewotCi0gICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgIklucHV0IHZlY3RvciBzaXplIG11c3QgYmUgPj0gb3V0cHV0IHZlY3RvciBzaXplLiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhaW4uZ2V0VHlwZSgpLmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOChtUlMpKSAmJgotICAgICAgICAgICAgYWluLmdldFR5cGUoKS5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfNChtUlMpKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPdXRwdXQgdHlwZSBtdXN0IGJlIFUzMiBvciBJMzIuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3JFYWNoKDAsIGFpbiwgbnVsbCwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBjb2VmZmljaWVudHMgdXNlZCBmb3IgdGhlIFJHQkEgdG8gTHVtaW5vY2l0eQotICAgICAqIGNhbGN1bGF0aW9uLiBUaGUgZGVmYXVsdCBpcyB7MC4yOTlmLCAwLjU4N2YsIDAuMTE0ZiwgMC5mfS4KLSAgICAgKgotICAgICAqIENvZWZmaWNpZW50cyBtdXN0IGJlID49IDAgYW5kIHN1bSB0byAxLjAgb3IgbGVzcy4KLSAgICAgKgotICAgICAqIEBwYXJhbSByIFJlZCBjb2VmZmljaWVudAotICAgICAqIEBwYXJhbSBnIEdyZWVuIGNvZWZmaWNpZW50Ci0gICAgICogQHBhcmFtIGIgQmx1ZSBjb2VmZmljaWVudAotICAgICAqIEBwYXJhbSBhIEFscGhhIGNvZWZmaWNpZW50Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RG90Q29lZmZpY2llbnRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpIHsKLSAgICAgICAgaWYgKChyIDwgMC5mKSB8fCAoZyA8IDAuZikgfHwgKGIgPCAwLmYpIHx8IChhIDwgMC5mKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb2VmZmljaWVudCBtYXkgbm90IGJlIG5lZ2F0aXZlLiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgociArIGcgKyBiICsgYSkgPiAxLmYpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU3VtIG9mIGNvZWZmaWNpZW50cyBtdXN0IGJlIDEuMCBvciBsZXNzLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgRmllbGRQYWNrZXIgZnAgPSBuZXcgRmllbGRQYWNrZXIoMTYpOwotICAgICAgICBmcC5hZGRGMzIocik7Ci0gICAgICAgIGZwLmFkZEYzMihnKTsKLSAgICAgICAgZnAuYWRkRjMyKGIpOwotICAgICAgICBmcC5hZGRGMzIoYSk7Ci0gICAgICAgIHNldFZhcigwLCBmcCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBvdXRwdXQgb2YgdGhlIGhpc3RvZ3JhbS4gIDMyIGJpdCBpbnRlZ2VyIHR5cGVzIGFyZQotICAgICAqIHN1cHBvcnRlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhb3V0IFRoZSBvdXRwdXQgYWxsb2NhdGlvbgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE91dHB1dChBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgbU91dCA9IGFvdXQ7Ci0gICAgICAgIGlmIChtT3V0LmdldFR5cGUoKS5nZXRFbGVtZW50KCkgIT0gRWxlbWVudC5VMzIobVJTKSAmJgotICAgICAgICAgICAgbU91dC5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpICE9IEVsZW1lbnQuVTMyXzIobVJTKSAmJgotICAgICAgICAgICAgbU91dC5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpICE9IEVsZW1lbnQuVTMyXzMobVJTKSAmJgotICAgICAgICAgICAgbU91dC5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpICE9IEVsZW1lbnQuVTMyXzQobVJTKSAmJgotICAgICAgICAgICAgbU91dC5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpICE9IEVsZW1lbnQuSTMyKG1SUykgJiYKLSAgICAgICAgICAgIG1PdXQuZ2V0VHlwZSgpLmdldEVsZW1lbnQoKSAhPSBFbGVtZW50LkkzMl8yKG1SUykgJiYKLSAgICAgICAgICAgIG1PdXQuZ2V0VHlwZSgpLmdldEVsZW1lbnQoKSAhPSBFbGVtZW50LkkzMl8zKG1SUykgJiYKLSAgICAgICAgICAgIG1PdXQuZ2V0VHlwZSgpLmdldEVsZW1lbnQoKSAhPSBFbGVtZW50LkkzMl80KG1SUykpIHsKLQotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPdXRwdXQgdHlwZSBtdXN0IGJlIFUzMiBvciBJMzIuIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChtT3V0LmdldFR5cGUoKS5nZXRYKCkgIT0gMjU2KSB8fAotICAgICAgICAgICAgKG1PdXQuZ2V0VHlwZSgpLmdldFkoKSAhPSAwKSB8fAotICAgICAgICAgICAgbU91dC5nZXRUeXBlKCkuaGFzTWlwbWFwcygpIHx8Ci0gICAgICAgICAgICAobU91dC5nZXRUeXBlKCkuZ2V0WXV2KCkgIT0gMCkpIHsKLQotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPdXRwdXQgbXVzdCBiZSAxRCwgMjU2IGVsZW1lbnRzLiIpOwotICAgICAgICB9Ci0gICAgICAgIHNldFZhcigxLCBhb3V0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcm9jZXNzIGFuIGlucHV0IGJ1ZmZlciBhbmQgcGxhY2UgdGhlIGhpc3RvZ3JhbSBpbnRvIHRoZQotICAgICAqIG91dHB1dCBhbGxvY2F0aW9uLiBUaGUgZG90IHByb2R1Y3Qgb2YgdGhlIGlucHV0IGNoYW5uZWwgYW5kCi0gICAgICogdGhlIGNvZWZmaWNpZW50cyBmcm9tICdzZXREb3RDb2VmZmljaWVudHMnIGFyZSB1c2VkIHRvCi0gICAgICogY2FsY3VsYXRlIHRoZSBvdXRwdXQgdmFsdWVzLgotICAgICAqCi0gICAgICogMUQgYW5kIDJEIGlucHV0IGFsbG9jYXRpb25zIGFyZSBzdXBwb3J0ZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYWluIFRoZSBpbnB1dCBpbWFnZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGZvckVhY2hfRG90KEFsbG9jYXRpb24gYWluKSB7Ci0gICAgICAgIGlmIChtT3V0LmdldFR5cGUoKS5nZXRFbGVtZW50KCkuZ2V0VmVjdG9yU2l6ZSgpICE9IDEpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiT3V0cHV0IHZlY3RvciBzaXplIG11c3QgYmUgb25lLiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhaW4uZ2V0VHlwZSgpLmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOChtUlMpKSAmJgotICAgICAgICAgICAgYWluLmdldFR5cGUoKS5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfNChtUlMpKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPdXRwdXQgdHlwZSBtdXN0IGJlIFUzMiBvciBJMzIuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3JFYWNoKDEsIGFpbiwgbnVsbCwgbnVsbCk7Ci0gICAgfQotCi0KLQotICAgIC8qKgotICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGlzIGludHJpbnNpYyBrZXJuZWwuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURfU2VwYXJhdGUoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCgwLCAzLCBudWxsLCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYSBGaWVsZElEIGZvciB0aGUgaW5wdXQgZmllbGQgb2YgdGhpcyBpbnRyaW5zaWMuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdC5GaWVsZElEIFRoZSBGaWVsZElEIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NyaXB0LkZpZWxkSUQgZ2V0RmllbGRJRF9JbnB1dCgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZpZWxkSUQoMSwgbnVsbCk7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0xVVC5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNMVVQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY3YWIzOC4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0xVVC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBJbnRyaW5zaWMgZm9yIGFwcGx5aW5nIGEgcGVyLWNoYW5uZWwgbG9va3VwIHRhYmxlLiBFYWNoCi0gKiBjaGFubmVsIG9mIHRoZSBpbnB1dCBoYXMgYW4gaW5kZXBlbmRhbnQgbG9va3VwIHRhYmxlLiBUaGUKLSAqIHRhYmxlcyBhcmUgMjU2IGVudHJpZXMgaW4gc2l6ZSBhbmQgY2FuIGNvdmVyIHRoZSBmdWxsIHZhbHVlCi0gKiByYW5nZSBvZiB7QGxpbmsgRWxlbWVudCNVOF80fS4KLSAqKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRJbnRyaW5zaWNMVVQgZXh0ZW5kcyBTY3JpcHRJbnRyaW5zaWMgewotICAgIHByaXZhdGUgZmluYWwgTWF0cml4NGYgbU1hdHJpeCA9IG5ldyBNYXRyaXg0ZigpOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtVGFibGVzOwotICAgIHByaXZhdGUgZmluYWwgYnl0ZSBtQ2FjaGVbXSA9IG5ldyBieXRlWzEwMjRdOwotICAgIHByaXZhdGUgYm9vbGVhbiBtRGlydHkgPSB0cnVlOwotCi0gICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWNMVVQoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgc3VwZXIoaWQsIHJzKTsKLSAgICAgICAgbVRhYmxlcyA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQocnMsIEVsZW1lbnQuVTgocnMpLCAxMDI0KTsKLSAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCAyNTY7IGN0KyspIHsKLSAgICAgICAgICAgIG1DYWNoZVtjdF0gPSAoYnl0ZSljdDsKLSAgICAgICAgICAgIG1DYWNoZVtjdCArIDI1Nl0gPSAoYnl0ZSljdDsKLSAgICAgICAgICAgIG1DYWNoZVtjdCArIDUxMl0gPSAoYnl0ZSljdDsKLSAgICAgICAgICAgIG1DYWNoZVtjdCArIDc2OF0gPSAoYnl0ZSljdDsKLSAgICAgICAgfQotICAgICAgICBzZXRWYXIoMCwgbVRhYmxlcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3VwcG9ydGVkIGVsZW1lbnRzIHR5cGVzIGFyZSB7QGxpbmsgRWxlbWVudCNVOF80fQotICAgICAqCi0gICAgICogVGhlIGRlZmF1bHRzIHRhYmxlcyBhcmUgaWRlbnRpdHkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcnMgVGhlIFJlbmRlclNjcmlwdCBjb250ZXh0Ci0gICAgICogQHBhcmFtIGUgRWxlbWVudCB0eXBlIGZvciBpbnRwdXRzIGFuZCBvdXRwdXRzCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdEludHJpbnNpY0xVVAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljTFVUIGNyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSkgewotICAgICAgICBpbnQgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDMsIGUuZ2V0SUQocnMpKTsKLSAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRJbnRyaW5zaWNMVVQoaWQsIHJzKTsKLQotICAgIH0KLQotCi0gICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlKGludCBpbmRleCwgaW50IHZhbHVlKSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiAyNTUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW5kZXggb3V0IG9mIHJhbmdlICgwLTI1NSkuIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDI1NSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJWYWx1ZSBvdXQgb2YgcmFuZ2UgKDAtMjU1KS4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldCBhbiBlbnRyeSBpbiB0aGUgcmVkIGNoYW5uZWwgbG9va3VwIHRhYmxlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggTXVzdCBiZSAwLTI1NQotICAgICAqIEBwYXJhbSB2YWx1ZSBNdXN0IGJlIDAtMjU1Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UmVkKGludCBpbmRleCwgaW50IHZhbHVlKSB7Ci0gICAgICAgIHZhbGlkYXRlKGluZGV4LCB2YWx1ZSk7Ci0gICAgICAgIG1DYWNoZVtpbmRleF0gPSAoYnl0ZSl2YWx1ZTsKLSAgICAgICAgbURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgYW4gZW50cnkgaW4gdGhlIGdyZWVuIGNoYW5uZWwgbG9va3VwIHRhYmxlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggTXVzdCBiZSAwLTI1NQotICAgICAqIEBwYXJhbSB2YWx1ZSBNdXN0IGJlIDAtMjU1Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0R3JlZW4oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKLSAgICAgICAgdmFsaWRhdGUoaW5kZXgsIHZhbHVlKTsKLSAgICAgICAgbUNhY2hlW2luZGV4KzI1Nl0gPSAoYnl0ZSl2YWx1ZTsKLSAgICAgICAgbURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgYW4gZW50cnkgaW4gdGhlIGJsdWUgY2hhbm5lbCBsb29rdXAgdGFibGUKLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBNdXN0IGJlIDAtMjU1Ci0gICAgICogQHBhcmFtIHZhbHVlIE11c3QgYmUgMC0yNTUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRCbHVlKGludCBpbmRleCwgaW50IHZhbHVlKSB7Ci0gICAgICAgIHZhbGlkYXRlKGluZGV4LCB2YWx1ZSk7Ci0gICAgICAgIG1DYWNoZVtpbmRleCs1MTJdID0gKGJ5dGUpdmFsdWU7Ci0gICAgICAgIG1EaXJ0eSA9IHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IGFuIGVudHJ5IGluIHRoZSBhbHBoYSBjaGFubmVsIGxvb2t1cCB0YWJsZQotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IE11c3QgYmUgMC0yNTUKLSAgICAgKiBAcGFyYW0gdmFsdWUgTXVzdCBiZSAwLTI1NQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEFscGhhKGludCBpbmRleCwgaW50IHZhbHVlKSB7Ci0gICAgICAgIHZhbGlkYXRlKGluZGV4LCB2YWx1ZSk7Ci0gICAgICAgIG1DYWNoZVtpbmRleCs3NjhdID0gKGJ5dGUpdmFsdWU7Ci0gICAgICAgIG1EaXJ0eSA9IHRydWU7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBJbnZva2UgdGhlIGtlcm5lbCBhbmQgYXBwbHkgdGhlIGxvb2t1cCB0byBlYWNoIGNlbGwgb2YgYWluCi0gICAgICogYW5kIGNvcHkgdG8gYW91dC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhaW4gSW5wdXQgYWxsb2NhdGlvbgotICAgICAqIEBwYXJhbSBhb3V0IE91dHB1dCBhbGxvY2F0aW9uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7Ci0gICAgICAgIGlmIChtRGlydHkpIHsKLSAgICAgICAgICAgIG1EaXJ0eSA9IGZhbHNlOwotICAgICAgICAgICAgbVRhYmxlcy5jb3B5RnJvbVVuY2hlY2tlZChtQ2FjaGUpOwotICAgICAgICB9Ci0gICAgICAgIGZvckVhY2goMCwgYWluLCBhb3V0LCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhpcyBpbnRyaW5zaWMga2VybmVsLgotICAgICAqCi0gICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEKCkgewotICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoMCwgMywgbnVsbCwgbnVsbCk7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY1l1dlRvUkdCLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY1l1dlRvUkdCLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NTYyNWQuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNZdXZUb1JHQi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLQotLyoqCi0gKiBJbnRyaW5zaWMgZm9yIGNvbnZlcnRpbmcgYW4gQW5kcm9pZCBZVVYgYnVmZmVyIHRvIFJHQi4KLSAqCi0gKiBUaGUgaW5wdXQgYWxsb2NhdGlvbiBzaG91bGQgYmUgc3VwcGxpZWQgaW4gYSBzdXBwb3J0ZWQgWVVWIGZvcm1hdAotICogYXMgYSBZVVYgZWxlbWVudCBBbGxvY2F0aW9uLiBUaGUgb3V0cHV0IGlzIFJHQkE7IHRoZSBhbHBoYSBjaGFubmVsCi0gKiB3aWxsIGJlIHNldCB0byAyNTUuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRJbnRyaW5zaWNZdXZUb1JHQiBleHRlbmRzIFNjcmlwdEludHJpbnNpYyB7Ci0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1JbnB1dDsKLQotICAgIFNjcmlwdEludHJpbnNpY1l1dlRvUkdCKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7Ci0gICAgICAgIHN1cGVyKGlkLCBycyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGFuIGludHJpbnNpYyBmb3IgY29udmVydGluZyBZVVYgdG8gUkdCLgotICAgICAqCi0gICAgICogU3VwcG9ydGVkIGVsZW1lbnRzIHR5cGVzIGFyZSB7QGxpbmsgRWxlbWVudCNVOF80fQotICAgICAqCi0gICAgICogQHBhcmFtIHJzIFRoZSBSZW5kZXJTY3JpcHQgY29udGV4dAotICAgICAqIEBwYXJhbSBlIEVsZW1lbnQgdHlwZSBmb3Igb3V0cHV0Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNjcmlwdEludHJpbnNpY1l1dlRvUkdCCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTY3JpcHRJbnRyaW5zaWNZdXZUb1JHQiBjcmVhdGUoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUpIHsKLSAgICAgICAgLy8gNiBjb21lcyBmcm9tIFJTX1NDUklQVF9JTlRSSU5TSUNfWVVWX1RPX1JHQiBpbiByc0RlZmluZXMuaAotICAgICAgICBpbnQgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDYsIGUuZ2V0SUQocnMpKTsKLSAgICAgICAgU2NyaXB0SW50cmluc2ljWXV2VG9SR0Igc2kgPSBuZXcgU2NyaXB0SW50cmluc2ljWXV2VG9SR0IoaWQsIHJzKTsKLSAgICAgICAgcmV0dXJuIHNpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBpbnB1dCB5dXYgYWxsb2NhdGlvbiwgbXVzdCBiZSB7QGxpbmsgRWxlbWVudCNVOH0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYWluIFRoZSBpbnB1dCBhbGxvY2F0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldElucHV0KEFsbG9jYXRpb24gYWluKSB7Ci0gICAgICAgIG1JbnB1dCA9IGFpbjsKLSAgICAgICAgc2V0VmFyKDAsIGFpbik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29udmVydCB0aGUgaW1hZ2UgdG8gUkdCLgotICAgICAqCi0gICAgICogQHBhcmFtIGFvdXQgT3V0cHV0IGFsbG9jYXRpb24uIE11c3QgbWF0Y2ggY3JlYXRpb24gZWxlbWVudAotICAgICAqICAgICAgICAgICAgIHR5cGUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZm9yRWFjaChBbGxvY2F0aW9uIGFvdXQpIHsKLSAgICAgICAgZm9yRWFjaCgwLCBudWxsLCBhb3V0LCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhpcyBpbnRyaW5zaWMga2VybmVsLgotICAgICAqCi0gICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEKCkgewotICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoMCwgMiwgbnVsbCwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgRmllbGRJRCBmb3IgdGhlIGlucHV0IGZpZWxkIG9mIHRoaXMgaW50cmluc2ljLgotICAgICAqCi0gICAgICogQHJldHVybiBTY3JpcHQuRmllbGRJRCBUaGUgRmllbGRJRCBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIFNjcmlwdC5GaWVsZElEIGdldEZpZWxkSURfSW5wdXQoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVGaWVsZElEKDAsIG51bGwpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2hvcnQyLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Nob3J0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzBkNjA4Li4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2hvcnQyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLS8qKiAKLSAqIFZlY3RvciB2ZXJzaW9uIG9mIHRoZSBiYXNpYyBzaG9ydCB0eXBlLgotICogUHJvdmlkZXMgdHdvIHNob3J0IGZpZWxkcyBwYWNrZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBTaG9ydDIgewotICAgIHB1YmxpYyBzaG9ydCB4OwotICAgIHB1YmxpYyBzaG9ydCB5OwotCi0gICAgcHVibGljIFNob3J0MigpIHsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgU2hvcnQyKHNob3J0IGkpIHsKLSAgICAgICAgdGhpcy54ID0gdGhpcy55ID0gaTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2hvcnQyKHNob3J0IHgsIHNob3J0IHkpIHsKLSAgICAgICAgdGhpcy54ID0geDsKLSAgICAgICAgdGhpcy55ID0geTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgU2hvcnQyKFNob3J0MiBzb3VyY2UpIHsKLSAgICAgICAgdGhpcy54ID0gc291cmNlLng7Ci0gICAgICAgIHRoaXMueSA9IHNvdXJjZS55OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkKFNob3J0MiBhKSB7Ci0gICAgICAgIHRoaXMueCArPSBhLng7Ci0gICAgICAgIHRoaXMueSArPSBhLnk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGFkZAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNob3J0MiBhZGQoU2hvcnQyIGEsIFNob3J0MiBiKSB7Ci0gICAgICAgIFNob3J0MiByZXN1bHQgPSBuZXcgU2hvcnQyKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKHNob3J0KShhLnggKyBiLngpOwotICAgICAgICByZXN1bHQueSA9IChzaG9ydCkoYS55ICsgYi55KTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZChzaG9ydCB2YWx1ZSkgewotICAgICAgICB4ICs9IHZhbHVlOwotICAgICAgICB5ICs9IHZhbHVlOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTaG9ydDIgYWRkKFNob3J0MiBhLCBzaG9ydCBiKSB7Ci0gICAgICAgIFNob3J0MiByZXN1bHQgPSBuZXcgU2hvcnQyKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKHNob3J0KShhLnggKyBiKTsKLSAgICAgICAgcmVzdWx0LnkgPSAoc2hvcnQpKGEueSArIGIpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN1YihTaG9ydDIgYSkgewotICAgICAgICB0aGlzLnggLT0gYS54OwotICAgICAgICB0aGlzLnkgLT0gYS55OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNob3J0MiBzdWIoU2hvcnQyIGEsIFNob3J0MiBiKSB7Ci0gICAgICAgIFNob3J0MiByZXN1bHQgPSBuZXcgU2hvcnQyKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKHNob3J0KShhLnggLSBiLngpOwotICAgICAgICByZXN1bHQueSA9IChzaG9ydCkoYS55IC0gYi55KTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3ViKHNob3J0IHZhbHVlKSB7Ci0gICAgICAgIHggLT0gdmFsdWU7Ci0gICAgICAgIHkgLT0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2hvcnQyIHN1YihTaG9ydDIgYSwgc2hvcnQgYikgewotICAgICAgICBTaG9ydDIgcmVzdWx0ID0gbmV3IFNob3J0MigpOwotICAgICAgICByZXN1bHQueCA9IChzaG9ydCkoYS54IC0gYik7Ci0gICAgICAgIHJlc3VsdC55ID0gKHNob3J0KShhLnkgLSBiKTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtdWwoU2hvcnQyIGEpIHsKLSAgICAgICAgdGhpcy54ICo9IGEueDsKLSAgICAgICAgdGhpcy55ICo9IGEueTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTaG9ydDIgbXVsKFNob3J0MiBhLCBTaG9ydDIgYikgewotICAgICAgICBTaG9ydDIgcmVzdWx0ID0gbmV3IFNob3J0MigpOwotICAgICAgICByZXN1bHQueCA9IChzaG9ydCkoYS54ICogYi54KTsKLSAgICAgICAgcmVzdWx0LnkgPSAoc2hvcnQpKGEueSAqIGIueSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG11bChzaG9ydCB2YWx1ZSkgewotICAgICAgICB4ICo9IHZhbHVlOwotICAgICAgICB5ICo9IHZhbHVlOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNob3J0MiBtdWwoU2hvcnQyIGEsIHNob3J0IGIpIHsKLSAgICAgICAgU2hvcnQyIHJlc3VsdCA9IG5ldyBTaG9ydDIoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoc2hvcnQpKGEueCAqIGIpOwotICAgICAgICByZXN1bHQueSA9IChzaG9ydCkoYS55ICogYik7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGl2KFNob3J0MiBhKSB7Ci0gICAgICAgIHRoaXMueCAvPSBhLng7Ci0gICAgICAgIHRoaXMueSAvPSBhLnk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRpdmlzaW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2hvcnQyIGRpdihTaG9ydDIgYSwgU2hvcnQyIGIpIHsKLSAgICAgICAgU2hvcnQyIHJlc3VsdCA9IG5ldyBTaG9ydDIoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoc2hvcnQpKGEueCAvIGIueCk7Ci0gICAgICAgIHJlc3VsdC55ID0gKHNob3J0KShhLnkgLyBiLnkpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRpdmlzaW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBkaXYoc2hvcnQgdmFsdWUpIHsKLSAgICAgICAgeCAvPSB2YWx1ZTsKLSAgICAgICAgeSAvPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgZGl2aXNpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTaG9ydDIgZGl2KFNob3J0MiBhLCBzaG9ydCBiKSB7Ci0gICAgICAgIFNob3J0MiByZXN1bHQgPSBuZXcgU2hvcnQyKCk7Ci0gICAgICAgIHJlc3VsdC54ID0gKHNob3J0KShhLnggLyBiKTsKLSAgICAgICAgcmVzdWx0LnkgPSAoc2hvcnQpKGEueSAvIGIpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIE1vZHVsbwotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtb2QoU2hvcnQyIGEpIHsKLSAgICAgICAgdGhpcy54ICU9IGEueDsKLSAgICAgICAgdGhpcy55ICU9IGEueTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBWZWN0b3IgTW9kdWxvCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEBwYXJhbSBiCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2hvcnQyIG1vZChTaG9ydDIgYSwgU2hvcnQyIGIpIHsKLSAgICAgICAgU2hvcnQyIHJlc3VsdCA9IG5ldyBTaG9ydDIoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoc2hvcnQpKGEueCAlIGIueCk7Ci0gICAgICAgIHJlc3VsdC55ID0gKHNob3J0KShhLnkgJSBiLnkpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIE1vZHVsbwotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgbW9kKHNob3J0IHZhbHVlKSB7Ci0gICAgICAgIHggJT0gdmFsdWU7Ci0gICAgICAgIHkgJT0gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIE1vZHVsbwotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNob3J0MiBtb2QoU2hvcnQyIGEsIHNob3J0IGIpIHsKLSAgICAgICAgU2hvcnQyIHJlc3VsdCA9IG5ldyBTaG9ydDIoKTsKLSAgICAgICAgcmVzdWx0LnggPSAoc2hvcnQpKGEueCAlIGIpOwotICAgICAgICByZXN1bHQueSA9IChzaG9ydCkoYS55ICUgYik7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBnZXQgdmVjdG9yIGxlbmd0aAotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBzaG9ydCBsZW5ndGgoKSB7Ci0gICAgICAgIHJldHVybiAyOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB2ZWN0b3IgbmVnYXRlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgbmVnYXRlKCkgewotICAgICAgICB0aGlzLnggPSAoc2hvcnQpKC14KTsKLSAgICAgICAgdGhpcy55ID0gKHNob3J0KSgteSk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogVmVjdG9yIGRvdCBQcm9kdWN0Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc2hvcnQgZG90UHJvZHVjdChTaG9ydDIgYSkgewotICAgICAgICByZXR1cm4gKHNob3J0KSgoeCAqIGEueCkgKyAoeSAqIGEueSkpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHNob3J0IGRvdFByb2R1Y3QoU2hvcnQyIGEsIFNob3J0MiBiKSB7Ci0gICAgICAgIHJldHVybiAoc2hvcnQpKChiLnggKiBhLngpICsgKGIueSAqIGEueSkpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIFZlY3RvciBhZGQgTXVsdGlwbGUKLSAgICAgKgotICAgICAqIEBwYXJhbSBhCi0gICAgICogQHBhcmFtIGZhY3RvcgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZE11bHRpcGxlKFNob3J0MiBhLCBzaG9ydCBmYWN0b3IpIHsKLSAgICAgICAgeCArPSBhLnggKiBmYWN0b3I7Ci0gICAgICAgIHkgKz0gYS55ICogZmFjdG9yOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB2ZWN0b3IgdmFsdWUgYnkgU2hvcnQyCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldChTaG9ydDIgYSkgewotICAgICAgICB0aGlzLnggPSBhLng7Ci0gICAgICAgIHRoaXMueSA9IGEueTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUKLSAgICAgKiBzZXQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBTaG9ydAotICAgICAqCi0gICAgICogQHBhcmFtIGEKLSAgICAgKiBAcGFyYW0gYgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlcyhzaG9ydCBhLCBzaG9ydCBiKSB7Ci0gICAgICAgIHRoaXMueCA9IGE7Ci0gICAgICAgIHRoaXMueSA9IGI7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogcmV0dXJuIHRoZSBlbGVtZW50IHN1bSBvZiB2ZWN0b3IKLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc2hvcnQgZWxlbWVudFN1bSgpIHsKLSAgICAgICAgcmV0dXJuIChzaG9ydCkoeCArIHkpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIGdldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc2hvcnQgZ2V0KGludCBpKSB7Ci0gICAgICAgIHN3aXRjaCAoaSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gKHNob3J0KSh4KTsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgcmV0dXJuIChzaG9ydCkoeSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIHNldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEF0KGludCBpLCBzaG9ydCB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeCA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICB5ID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBAaGlkZQotICAgICAqIGFkZCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaQotICAgICAqIEBwYXJhbSB2YWx1ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZEF0KGludCBpLCBzaG9ydCB2YWx1ZSkgewotICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeCArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgeSArPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlCi0gICAgICogY29weSB0aGUgdmVjdG9yIHRvIHNob3J0IGFycmF5Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gZGF0YQotICAgICAqIEBwYXJhbSBvZmZzZXQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5VG8oc2hvcnRbXSBkYXRhLCBpbnQgb2Zmc2V0KSB7Ci0gICAgICAgIGRhdGFbb2Zmc2V0XSA9IChzaG9ydCkoeCk7Ci0gICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSAoc2hvcnQpKHkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvVHlwZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMjM3MzkuLjAwMDAwMDAKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7Ci0KLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIDxwPkEgVHlwZSBkZXNjcmliZXMgdGhlIHtAbGluayBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50fSBhbmQgZGltZW5zaW9ucyB1c2VkIGZvciBhbiB7QGxpbmsKLSAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb259IG9yIGEgcGFyYWxsZWwgb3BlcmF0aW9uLiBUeXBlcyBhcmUgY3JlYXRlZCB0aHJvdWdoIHtAbGluawotICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuVHlwZS5CdWlsZGVyfS48L3A+Ci0gKgotICogPHA+QSBUeXBlIGFsd2F5cyBpbmNsdWRlcyBhbiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gYW5kIGFuIFgKLSAqIGRpbWVuc2lvbi4gQSBUeXBlIG1heSBiZSBtdWx0aWRpbWVuc2lvbmFsLCB1cCB0byB0aHJlZSBkaW1lbnNpb25zLiBBIG5vbnplcm8KLSAqIHZhbHVlIGluIHRoZSBZIG9yIFogZGltZW5zaW9ucyBpbmRpY2F0ZXMgdGhhdCB0aGUgZGltZW5zaW9uIGlzIHByZXNlbnQuIE5vdGUKLSAqIHRoYXQgYSBUeXBlIHdpdGggb25seSBhIGdpdmVuIFggZGltZW5zaW9uIGFuZCBhIFR5cGUgd2l0aCB0aGUgc2FtZSBYCi0gKiBkaW1lbnNpb24gYnV0IFkgPSAxIGFyZSBub3QgZXF1aXZhbGVudC48L3A+Ci0gKgotICogPHA+QSBUeXBlIGFsc28gc3VwcG9ydHMgaW5jbHVzaW9uIG9mIGxldmVsIG9mIGRldGFpbCAoTE9EKSBvciBjdWJlIG1hcAotICogZmFjZXMuIExPRCBhbmQgY3ViZSBtYXAgZmFjZXMgYXJlIGJvb2xlYW5zIHRvIGluZGljYXRlIHByZXNlbnQgb3Igbm90Ci0gKiBwcmVzZW50LiA8L3A+Ci0gKgotICogPHA+QSBUeXBlIGFsc28gc3VwcG9ydHMgWVVWIGZvcm1hdCBpbmZvcm1hdGlvbiB0byBzdXBwb3J0IGFuCi0gKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbn0gaW4gYSBZVVYgZm9ybWF0LiBUaGUgWVVWIGZvcm1hdHMKLSAqIHN1cHBvcnRlZCBhcmUge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuSW1hZ2VGb3JtYXQjWVYxMn0sCi0gKiB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdCNOVjIxfSwgYW5kCi0gKiB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdCNZVVZfNDIwXzg4OH08L3A+Ci0gKgotICogPGRpdiBjbGFzcz0ic3BlY2lhbCByZWZlcmVuY2UiPgotICogPGgzPkRldmVsb3BlciBHdWlkZXM8L2gzPgotICogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIFJlbmRlclNjcmlwdCwgcmVhZCB0aGUKLSAqIDxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVuZGVyc2NyaXB0L2luZGV4Lmh0bWwiPlJlbmRlclNjcmlwdDwvYT4gZGV2ZWxvcGVyIGd1aWRlLjwvcD4KLSAqIDwvZGl2PgotICoqLwotcHVibGljIGNsYXNzIFR5cGUgZXh0ZW5kcyBCYXNlT2JqIHsKLSAgICBpbnQgbURpbVg7Ci0gICAgaW50IG1EaW1ZOwotICAgIGludCBtRGltWjsKLSAgICBib29sZWFuIG1EaW1NaXBtYXBzOwotICAgIGJvb2xlYW4gbURpbUZhY2VzOwotICAgIGludCBtRGltWXV2OwotICAgIGludCBtRWxlbWVudENvdW50OwotICAgIEVsZW1lbnQgbUVsZW1lbnQ7Ci0KLSAgICBwdWJsaWMgZW51bSBDdWJlbWFwRmFjZSB7Ci0gICAgICAgIFBPU0lUSVZFX1ggKDApLAotICAgICAgICBORUdBVElWRV9YICgxKSwKLSAgICAgICAgUE9TSVRJVkVfWSAoMiksCi0gICAgICAgIE5FR0FUSVZFX1kgKDMpLAotICAgICAgICBQT1NJVElWRV9aICg0KSwKLSAgICAgICAgTkVHQVRJVkVfWiAoNSksCi0gICAgICAgIEBEZXByZWNhdGVkCi0gICAgICAgIFBPU0lUVkVfWCAoMCksCi0gICAgICAgIEBEZXByZWNhdGVkCi0gICAgICAgIFBPU0lUVkVfWSAoMiksCi0gICAgICAgIEBEZXByZWNhdGVkCi0gICAgICAgIFBPU0lUVkVfWiAoNCk7Ci0KLSAgICAgICAgaW50IG1JRDsKLSAgICAgICAgQ3ViZW1hcEZhY2UoaW50IGlkKSB7Ci0gICAgICAgICAgICBtSUQgPSBpZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBUeXBlLgotICAgICAqCi0gICAgICogQHJldHVybiBFbGVtZW50Ci0gICAgICovCi0gICAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCgpIHsKLSAgICAgICAgcmV0dXJuIG1FbGVtZW50OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIFggZGltZW5zaW9uLgotICAgICAqCi0gICAgICogQHJldHVybiBpbnQKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFgoKSB7Ci0gICAgICAgIHJldHVybiBtRGltWDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBZIGRpbWVuc2lvbiBvciAwIGZvciBhIDFEIGFsbG9jYXRpb24uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGludAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0WSgpIHsKLSAgICAgICAgcmV0dXJuIG1EaW1ZOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIFogZGltZW5zaW9uIG9yIDAgZm9yIGEgMUQgb3IgMkQgYWxsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIEByZXR1cm4gaW50Ci0gICAgICovCi0gICAgcHVibGljIGludCBnZXRaKCkgewotICAgICAgICByZXR1cm4gbURpbVo7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IHRoZSBZVVYgZm9ybWF0Ci0gICAgICoKLSAgICAgKgotICAgICAqIEByZXR1cm4gaW50Ci0gICAgICovCi0gICAgcHVibGljIGludCBnZXRZdXYoKSB7Ci0gICAgICAgIHJldHVybiBtRGltWXV2OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiBpZiB0aGUgVHlwZSBoYXMgYSBtaXBtYXAgY2hhaW4uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNNaXBtYXBzKCkgewotICAgICAgICByZXR1cm4gbURpbU1pcG1hcHM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIGlmIHRoZSBUeXBlIGlzIGEgY3ViZSBtYXAuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGJvb2xlYW4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNGYWNlcygpIHsKLSAgICAgICAgcmV0dXJuIG1EaW1GYWNlczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBhY2Nlc3NhYmxlIGNlbGxzIGluIHRoZSBUeXBlLgotICAgICAqCi0gICAgICogQHJldHVybiBpbnQKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldENvdW50KCkgewotICAgICAgICByZXR1cm4gbUVsZW1lbnRDb3VudDsKLSAgICB9Ci0KLSAgICB2b2lkIGNhbGNFbGVtZW50Q291bnQoKSB7Ci0gICAgICAgIGJvb2xlYW4gaGFzTG9kID0gaGFzTWlwbWFwcygpOwotICAgICAgICBpbnQgeCA9IGdldFgoKTsKLSAgICAgICAgaW50IHkgPSBnZXRZKCk7Ci0gICAgICAgIGludCB6ID0gZ2V0WigpOwotICAgICAgICBpbnQgZmFjZXMgPSAxOwotICAgICAgICBpZiAoaGFzRmFjZXMoKSkgewotICAgICAgICAgICAgZmFjZXMgPSA2OwotICAgICAgICB9Ci0gICAgICAgIGlmICh4ID09IDApIHsKLSAgICAgICAgICAgIHggPSAxOwotICAgICAgICB9Ci0gICAgICAgIGlmICh5ID09IDApIHsKLSAgICAgICAgICAgIHkgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGlmICh6ID09IDApIHsKLSAgICAgICAgICAgIHogPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGNvdW50ID0geCAqIHkgKiB6ICogZmFjZXM7Ci0KLSAgICAgICAgd2hpbGUgKGhhc0xvZCAmJiAoKHggPiAxKSB8fCAoeSA+IDEpIHx8ICh6ID4gMSkpKSB7Ci0gICAgICAgICAgICBpZih4ID4gMSkgewotICAgICAgICAgICAgICAgIHggPj49IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZih5ID4gMSkgewotICAgICAgICAgICAgICAgIHkgPj49IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZih6ID4gMSkgewotICAgICAgICAgICAgICAgIHogPj49IDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvdW50ICs9IHggKiB5ICogeiAqIGZhY2VzOwotICAgICAgICB9Ci0gICAgICAgIG1FbGVtZW50Q291bnQgPSBjb3VudDsKLSAgICB9Ci0KLQotICAgIFR5cGUoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgc3VwZXIoaWQsIHJzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICB2b2lkIHVwZGF0ZUZyb21OYXRpdmUoKSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgNiBpbnRlZ2VyIHRvIG9idGFpbiBtRGltWDsgbURpbVk7IG1EaW1aOwotICAgICAgICAvLyBtRGltTE9EOyBtRGltRmFjZXM7IG1FbGVtZW50OwotICAgICAgICBpbnRbXSBkYXRhQnVmZmVyID0gbmV3IGludFs2XTsKLSAgICAgICAgbVJTLm5UeXBlR2V0TmF0aXZlRGF0YShnZXRJRChtUlMpLCBkYXRhQnVmZmVyKTsKLQotICAgICAgICBtRGltWCA9IGRhdGFCdWZmZXJbMF07Ci0gICAgICAgIG1EaW1ZID0gZGF0YUJ1ZmZlclsxXTsKLSAgICAgICAgbURpbVogPSBkYXRhQnVmZmVyWzJdOwotICAgICAgICBtRGltTWlwbWFwcyA9IGRhdGFCdWZmZXJbM10gPT0gMSA/IHRydWUgOiBmYWxzZTsKLSAgICAgICAgbURpbUZhY2VzID0gZGF0YUJ1ZmZlcls0XSA9PSAxID8gdHJ1ZSA6IGZhbHNlOwotCi0gICAgICAgIGludCBlbGVtZW50SUQgPSBkYXRhQnVmZmVyWzVdOwotICAgICAgICBpZihlbGVtZW50SUQgIT0gMCkgewotICAgICAgICAgICAgbUVsZW1lbnQgPSBuZXcgRWxlbWVudChlbGVtZW50SUQsIG1SUyk7Ci0gICAgICAgICAgICBtRWxlbWVudC51cGRhdGVGcm9tTmF0aXZlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FsY0VsZW1lbnRDb3VudCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1aWxkZXIgY2xhc3MgZm9yIFR5cGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOwotICAgICAgICBpbnQgbURpbVggPSAxOwotICAgICAgICBpbnQgbURpbVk7Ci0gICAgICAgIGludCBtRGltWjsKLSAgICAgICAgYm9vbGVhbiBtRGltTWlwbWFwczsKLSAgICAgICAgYm9vbGVhbiBtRGltRmFjZXM7Ci0gICAgICAgIGludCBtWXV2OwotCi0gICAgICAgIEVsZW1lbnQgbUVsZW1lbnQ7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENyZWF0ZSBhIG5ldyBidWlsZGVyIG9iamVjdC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHJzCi0gICAgICAgICAqIEBwYXJhbSBlIFRoZSBlbGVtZW50IGZvciB0aGUgdHlwZSB0byBiZSBjcmVhdGVkLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUpIHsKLSAgICAgICAgICAgIGUuY2hlY2tWYWxpZCgpOwotICAgICAgICAgICAgbVJTID0gcnM7Ci0gICAgICAgICAgICBtRWxlbWVudCA9IGU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQWRkIGEgZGltZW5zaW9uIHRvIHRoZSBUeXBlLgotICAgICAgICAgKgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gdmFsdWUKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFgoaW50IHZhbHVlKSB7Ci0gICAgICAgICAgICBpZih2YWx1ZSA8IDEpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlZhbHVlcyBvZiBsZXNzIHRoYW4gMSBmb3IgRGltZW5zaW9uIFggYXJlIG5vdCB2YWxpZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1EaW1YID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFkoaW50IHZhbHVlKSB7Ci0gICAgICAgICAgICBpZih2YWx1ZSA8IDEpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlZhbHVlcyBvZiBsZXNzIHRoYW4gMSBmb3IgRGltZW5zaW9uIFkgYXJlIG5vdCB2YWxpZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1EaW1ZID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFooaW50IHZhbHVlKSB7Ci0gICAgICAgICAgICBpZih2YWx1ZSA8IDEpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlZhbHVlcyBvZiBsZXNzIHRoYW4gMSBmb3IgRGltZW5zaW9uIFogYXJlIG5vdCB2YWxpZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1EaW1aID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE1pcG1hcHMoYm9vbGVhbiB2YWx1ZSkgewotICAgICAgICAgICAgbURpbU1pcG1hcHMgPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RmFjZXMoYm9vbGVhbiB2YWx1ZSkgewotICAgICAgICAgICAgbURpbUZhY2VzID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXQgdGhlIFlVViBsYXlvdXQgZm9yIGEgVHlwZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHl1dkZvcm1hdCB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdCNZVjEyfSwge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuSW1hZ2VGb3JtYXQjTlYyMX0sIG9yCi0gICAgICAgICAqIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLkltYWdlRm9ybWF0I1lVVl80MjBfODg4fS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFl1dkZvcm1hdChpbnQgeXV2Rm9ybWF0KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHl1dkZvcm1hdCkgewotICAgICAgICAgICAgY2FzZSBhbmRyb2lkLmdyYXBoaWNzLkltYWdlRm9ybWF0Lk5WMjE6Ci0gICAgICAgICAgICBjYXNlIGFuZHJvaWQuZ3JhcGhpY3MuSW1hZ2VGb3JtYXQuWVYxMjoKLSAgICAgICAgICAgIGNhc2UgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdC5ZVVZfNDIwXzg4ODoKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICJPbmx5IEltYWdlRm9ybWF0Lk5WMjEsIC5ZVjEyLCBhbmQgLllVVl80MjBfODg4IGFyZSBzdXBwb3J0ZWQuLiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtWXV2ID0geXV2Rm9ybWF0OwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBWYWxpZGF0ZSBzdHJ1Y3R1cmUgYW5kIGNyZWF0ZSBhIG5ldyBUeXBlLgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIFR5cGUKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBUeXBlIGNyZWF0ZSgpIHsKLSAgICAgICAgICAgIGlmIChtRGltWiA+IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoKG1EaW1YIDwgMSkgfHwgKG1EaW1ZIDwgMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJCb3RoIFggYW5kIFkgZGltZW5zaW9uIHJlcXVpcmVkIHdoZW4gWiBpcyBwcmVzZW50LiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobURpbUZhY2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ3ViZSBtYXBzIG5vdCBzdXBwb3J0ZWQgd2l0aCAzRCB0eXBlcy4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobURpbVkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1EaW1YIDwgMSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIlggZGltZW5zaW9uIHJlcXVpcmVkIHdoZW4gWSBpcyBwcmVzZW50LiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtRGltRmFjZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAobURpbVkgPCAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ3ViZSBtYXBzIHJlcXVpcmUgMkQgVHlwZXMuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVl1diAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChtRGltWiAhPSAwKSB8fCBtRGltRmFjZXMgfHwgbURpbU1pcG1hcHMpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJZVVYgb25seSBzdXBwb3J0cyBiYXNpYyAyRC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBpZCA9IG1SUy5uVHlwZUNyZWF0ZShtRWxlbWVudC5nZXRJRChtUlMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EaW1YLCBtRGltWSwgbURpbVosIG1EaW1NaXBtYXBzLCBtRGltRmFjZXMsIG1ZdXYpOwotICAgICAgICAgICAgVHlwZSB0ID0gbmV3IFR5cGUoaWQsIG1SUyk7Ci0gICAgICAgICAgICB0Lm1FbGVtZW50ID0gbUVsZW1lbnQ7Ci0gICAgICAgICAgICB0Lm1EaW1YID0gbURpbVg7Ci0gICAgICAgICAgICB0Lm1EaW1ZID0gbURpbVk7Ci0gICAgICAgICAgICB0Lm1EaW1aID0gbURpbVo7Ci0gICAgICAgICAgICB0Lm1EaW1NaXBtYXBzID0gbURpbU1pcG1hcHM7Ci0gICAgICAgICAgICB0Lm1EaW1GYWNlcyA9IG1EaW1GYWNlczsKLSAgICAgICAgICAgIHQubURpbVl1diA9IG1ZdXY7Ci0KLSAgICAgICAgICAgIHQuY2FsY0VsZW1lbnRDb3VudCgpOwotICAgICAgICAgICAgcmV0dXJuIHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2puaS9BbmRyb2lkLm1rIGIvZ3JhcGhpY3Mvam5pL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YmVhZTUzLi4wMDAwMDAwCi0tLSBhL2dyYXBoaWNzL2puaS9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTOj0gXAotICAgIGFuZHJvaWRfcmVuZGVyc2NyaXB0X1JlbmRlclNjcmlwdC5jcHAKLQotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCi0gICAgICAgIGxpYmFuZHJvaWRfcnVudGltZSBcCi0gICAgICAgIGxpYmFuZHJvaWRmdyBcCi0gICAgICAgIGxpYm5hdGl2ZWhlbHBlciBcCi0gICAgICAgIGxpYlJTIFwKLSAgICAgICAgbGliY3V0aWxzIFwKLSAgICAgICAgbGlibG9nIFwKLSAgICAgICAgbGlic2tpYSBcCi0gICAgICAgIGxpYnV0aWxzIFwKLSAgICAgICAgbGlidWkgXAotICAgICAgICBsaWJndWkKLQotTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PQotCi1yc19nZW5lcmF0ZWRfaW5jbHVkZV9kaXIgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixTSEFSRURfTElCUkFSSUVTLGxpYlJTLCwpCi0KLUxPQ0FMX0NfSU5DTFVERVMgKz0gXAotCSQoSk5JX0hfSU5DTFVERSkgXAotCWZyYW1ld29ya3MvcnMgXAotCSQocnNfZ2VuZXJhdGVkX2luY2x1ZGVfZGlyKSBcCi0JJChjYWxsIGluY2x1ZGUtcGF0aC1mb3IsIGNvcmVjZyBncmFwaGljcykKLQotTE9DQUxfQ0ZMQUdTICs9Ci0KLUxPQ0FMX0xETElCUyA6PSAtbHB0aHJlYWQKLUxPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoYWRkcHJlZml4ICQocnNfZ2VuZXJhdGVkX2luY2x1ZGVfZGlyKS8scnNnQXBpRnVuY0RlY2wuaCkKLUxPQ0FMX01PRFVMRTo9IGxpYnJzX2puaQotTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgKz0gJChyc19nZW5lcmF0ZWRfc291cmNlKQotTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKLUxPQ0FMX1JFUVVJUkVEX01PRFVMRVMgOj0gbGliUlMgbGliUlNEcml2ZXIKLQotaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3Mvam5pL2FuZHJvaWRfcmVuZGVyc2NyaXB0X1JlbmRlclNjcmlwdC5jcHAgYi9ncmFwaGljcy9qbmkvYW5kcm9pZF9yZW5kZXJzY3JpcHRfUmVuZGVyU2NyaXB0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JjNGU1YS4uMDAwMDAwMAotLS0gYS9ncmFwaGljcy9qbmkvYW5kcm9pZF9yZW5kZXJzY3JpcHRfUmVuZGVyU2NyaXB0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJsaWJSU19qbmkiCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHV0aWxzL21pc2MuaD4KLQotI2luY2x1ZGUgPGNvcmUvU2tCaXRtYXAuaD4KLSNpbmNsdWRlIDxjb3JlL1NrUGl4ZWxSZWYuaD4KLSNpbmNsdWRlIDxjb3JlL1NrU3RyZWFtLmg+Ci0jaW5jbHVkZSA8Y29yZS9Ta1RlbXBsYXRlcy5oPgotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L0Fzc2V0Lmg+Ci0jaW5jbHVkZSA8YW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5oPgotI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+Ci0KLSNpbmNsdWRlICJqbmkuaCIKLSNpbmNsdWRlICJKTklIZWxwLmgiCi0jaW5jbHVkZSAiYW5kcm9pZF9ydW50aW1lL0FuZHJvaWRSdW50aW1lLmgiCi0jaW5jbHVkZSAiYW5kcm9pZF9ydW50aW1lL2FuZHJvaWRfdmlld19TdXJmYWNlLmgiCi0jaW5jbHVkZSAiYW5kcm9pZF9ydW50aW1lL2FuZHJvaWRfdXRpbF9Bc3NldE1hbmFnZXIuaCIKLQotI2luY2x1ZGUgPHJzLmg+Ci0jaW5jbHVkZSA8cnNFbnYuaD4KLSNpbmNsdWRlIDxndWkvU3VyZmFjZS5oPgotI2luY2x1ZGUgPGd1aS9HTENvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8Z3VpL1N1cmZhY2UuaD4KLSNpbmNsdWRlIDxhbmRyb2lkX3J1bnRpbWUvYW5kcm9pZF9ncmFwaGljc19TdXJmYWNlVGV4dHVyZS5oPgotCi0vLyNkZWZpbmUgTE9HX0FQSSBBTE9HRQotI2RlZmluZSBMT0dfQVBJKC4uLikKLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLWNsYXNzIEF1dG9KYXZhU3RyaW5nVG9VVEY4IHsKLXB1YmxpYzoKLSAgICBBdXRvSmF2YVN0cmluZ1RvVVRGOChKTklFbnYqIGVudiwganN0cmluZyBzdHIpIDogZkVudihlbnYpLCBmSlN0cihzdHIpIHsKLSAgICAgICAgZkNTdHIgPSBlbnYtPkdldFN0cmluZ1VURkNoYXJzKHN0ciwgTlVMTCk7Ci0gICAgICAgIGZMZW5ndGggPSBlbnYtPkdldFN0cmluZ1VURkxlbmd0aChzdHIpOwotICAgIH0KLSAgICB+QXV0b0phdmFTdHJpbmdUb1VURjgoKSB7Ci0gICAgICAgIGZFbnYtPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhmSlN0ciwgZkNTdHIpOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiBjX3N0cigpIGNvbnN0IHsgcmV0dXJuIGZDU3RyOyB9Ci0gICAganNpemUgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gZkxlbmd0aDsgfQotCi1wcml2YXRlOgotICAgIEpOSUVudiogICAgIGZFbnY7Ci0gICAganN0cmluZyAgICAgZkpTdHI7Ci0gICAgY29uc3QgY2hhciogZkNTdHI7Ci0gICAganNpemUgICAgICAgZkxlbmd0aDsKLX07Ci0KLWNsYXNzIEF1dG9KYXZhU3RyaW5nQXJyYXlUb1VURjggewotcHVibGljOgotICAgIEF1dG9KYXZhU3RyaW5nQXJyYXlUb1VURjgoSk5JRW52KiBlbnYsIGpvYmplY3RBcnJheSBzdHJpbmdzLCBqc2l6ZSBzdHJpbmdzTGVuZ3RoKQotICAgIDogbUVudihlbnYpLCBtU3RyaW5ncyhzdHJpbmdzKSwgbVN0cmluZ3NMZW5ndGgoc3RyaW5nc0xlbmd0aCkgewotICAgICAgICBtQ1N0cmluZ3MgPSBOVUxMOwotICAgICAgICBtU2l6ZUFycmF5ID0gTlVMTDsKLSAgICAgICAgaWYgKHN0cmluZ3NMZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICBtQ1N0cmluZ3MgPSAoY29uc3QgY2hhciAqKiljYWxsb2Moc3RyaW5nc0xlbmd0aCwgc2l6ZW9mKGNoYXIgKikpOwotICAgICAgICAgICAgbVNpemVBcnJheSA9IChzaXplX3QqKWNhbGxvYyhzdHJpbmdzTGVuZ3RoLCBzaXplb2Yoc2l6ZV90KSk7Ci0gICAgICAgICAgICBmb3IgKGpzaXplIGN0ID0gMDsgY3QgPCBzdHJpbmdzTGVuZ3RoOyBjdCArKykgewotICAgICAgICAgICAgICAgIGpzdHJpbmcgcyA9IChqc3RyaW5nKW1FbnYtPkdldE9iamVjdEFycmF5RWxlbWVudChtU3RyaW5ncywgY3QpOwotICAgICAgICAgICAgICAgIG1DU3RyaW5nc1tjdF0gPSBtRW52LT5HZXRTdHJpbmdVVEZDaGFycyhzLCBOVUxMKTsKLSAgICAgICAgICAgICAgICBtU2l6ZUFycmF5W2N0XSA9IG1FbnYtPkdldFN0cmluZ1VURkxlbmd0aChzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICB+QXV0b0phdmFTdHJpbmdBcnJheVRvVVRGOCgpIHsKLSAgICAgICAgZm9yIChqc2l6ZSBjdD0wOyBjdCA8IG1TdHJpbmdzTGVuZ3RoOyBjdCsrKSB7Ci0gICAgICAgICAgICBqc3RyaW5nIHMgPSAoanN0cmluZyltRW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQobVN0cmluZ3MsIGN0KTsKLSAgICAgICAgICAgIG1FbnYtPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhzLCBtQ1N0cmluZ3NbY3RdKTsKLSAgICAgICAgfQotICAgICAgICBmcmVlKG1DU3RyaW5ncyk7Ci0gICAgICAgIGZyZWUobVNpemVBcnJheSk7Ci0gICAgfQotICAgIGNvbnN0IGNoYXIgKipjX3N0cigpIGNvbnN0IHsgcmV0dXJuIG1DU3RyaW5nczsgfQotICAgIHNpemVfdCAqY19zdHJfbGVuKCkgY29uc3QgeyByZXR1cm4gbVNpemVBcnJheTsgfQotICAgIGpzaXplIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1TdHJpbmdzTGVuZ3RoOyB9Ci0KLXByaXZhdGU6Ci0gICAgSk5JRW52ICAgICAgKm1FbnY7Ci0gICAgam9iamVjdEFycmF5IG1TdHJpbmdzOwotICAgIGNvbnN0IGNoYXIgKiptQ1N0cmluZ3M7Ci0gICAgc2l6ZV90ICAgICAgKm1TaXplQXJyYXk7Ci0gICAganNpemUgICAgICAgIG1TdHJpbmdzTGVuZ3RoOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBqZmllbGRJRCBnQ29udGV4dElkID0gMDsKLXN0YXRpYyBqZmllbGRJRCBnTmF0aXZlQml0bWFwSUQgPSAwOwotc3RhdGljIGpmaWVsZElEIGdUeXBlTmF0aXZlQ2FjaGUgPSAwOwotCi1zdGF0aWMgdm9pZCBfbkluaXQoSk5JRW52ICpfZW52LCBqY2xhc3MgX3RoaXMpCi17Ci0gICAgZ0NvbnRleHRJZCAgICAgICAgICAgICA9IF9lbnYtPkdldEZpZWxkSUQoX3RoaXMsICJtQ29udGV4dCIsICJJIik7Ci0KLSAgICBqY2xhc3MgYml0bWFwQ2xhc3MgPSBfZW52LT5GaW5kQ2xhc3MoImFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwIik7Ci0gICAgZ05hdGl2ZUJpdG1hcElEID0gX2Vudi0+R2V0RmllbGRJRChiaXRtYXBDbGFzcywgIm1OYXRpdmVCaXRtYXAiLCAiSSIpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIHZvaWQKLW5Db250ZXh0RmluaXNoKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbikKLXsKLSAgICBMT0dfQVBJKCJuQ29udGV4dEZpbmlzaCwgY29uKCVwKSIsIGNvbik7Ci0gICAgcnNDb250ZXh0RmluaXNoKGNvbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQXNzaWduTmFtZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgb2JqLCBqYnl0ZUFycmF5IHN0cikKLXsKLSAgICBMT0dfQVBJKCJuQXNzaWduTmFtZSwgY29uKCVwKSwgb2JqKCVwKSIsIGNvbiwgKHZvaWQgKilvYmopOwotICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoc3RyKTsKLSAgICBqYnl0ZSAqIGNwdHIgPSAoamJ5dGUgKikgX2Vudi0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChzdHIsIDApOwotICAgIHJzQXNzaWduTmFtZShjb24sICh2b2lkICopb2JqLCAoY29uc3QgY2hhciAqKWNwdHIsIGxlbik7Ci0gICAgX2Vudi0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoc3RyLCBjcHRyLCBKTklfQUJPUlQpOwotfQotCi1zdGF0aWMganN0cmluZwotbkdldE5hbWUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IG9iaikKLXsKLSAgICBMT0dfQVBJKCJuR2V0TmFtZSwgY29uKCVwKSwgb2JqKCVwKSIsIGNvbiwgKHZvaWQgKilvYmopOwotICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOwotICAgIHJzYUdldE5hbWUoY29uLCAodm9pZCAqKW9iaiwgJm5hbWUpOwotICAgIGlmKG5hbWUgPT0gTlVMTCB8fCBzdHJsZW4obmFtZSkgPT0gMCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIF9lbnYtPk5ld1N0cmluZ1VURihuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLW5PYmpEZXN0cm95KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBvYmopCi17Ci0gICAgTE9HX0FQSSgibk9iakRlc3Ryb3ksIGNvbiglcCkgb2JqKCVwKSIsIGNvbiwgKHZvaWQgKilvYmopOwotICAgIHJzT2JqRGVzdHJveShjb24sICh2b2lkICopb2JqKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBqaW50Ci1uRGV2aWNlQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcykKLXsKLSAgICBMT0dfQVBJKCJuRGV2aWNlQ3JlYXRlIik7Ci0gICAgcmV0dXJuIChqaW50KXJzRGV2aWNlQ3JlYXRlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uRGV2aWNlRGVzdHJveShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgZGV2KQotewotICAgIExPR19BUEkoIm5EZXZpY2VEZXN0cm95Iik7Ci0gICAgcmV0dXJuIHJzRGV2aWNlRGVzdHJveSgoUnNEZXZpY2UpZGV2KTsKLX0KLQotc3RhdGljIHZvaWQKLW5EZXZpY2VTZXRDb25maWcoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IGRldiwgamludCBwLCBqaW50IHZhbHVlKQotewotICAgIExPR19BUEkoIm5EZXZpY2VTZXRDb25maWcgIGRldiglcCksIHBhcmFtKCVpKSwgdmFsdWUoJWkpIiwgKHZvaWQgKilkZXYsIHAsIHZhbHVlKTsKLSAgICByZXR1cm4gcnNEZXZpY2VTZXRDb25maWcoKFJzRGV2aWNlKWRldiwgKFJzRGV2aWNlUGFyYW0pcCwgdmFsdWUpOwotfQotCi1zdGF0aWMgamludAotbkNvbnRleHRDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IGRldiwgamludCB2ZXIsIGppbnQgc2RrVmVyLCBqaW50IGN0KQotewotICAgIExPR19BUEkoIm5Db250ZXh0Q3JlYXRlIik7Ci0gICAgcmV0dXJuIChqaW50KXJzQ29udGV4dENyZWF0ZSgoUnNEZXZpY2UpZGV2LCB2ZXIsIHNka1ZlciwgKFJzQ29udGV4dFR5cGUpY3QsIDApOwotfQotCi1zdGF0aWMgamludAotbkNvbnRleHRDcmVhdGVHTChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgZGV2LCBqaW50IHZlciwgamludCBzZGtWZXIsCi0gICAgICAgICAgICAgICAgIGludCBjb2xvck1pbiwgaW50IGNvbG9yUHJlZiwKLSAgICAgICAgICAgICAgICAgaW50IGFscGhhTWluLCBpbnQgYWxwaGFQcmVmLAotICAgICAgICAgICAgICAgICBpbnQgZGVwdGhNaW4sIGludCBkZXB0aFByZWYsCi0gICAgICAgICAgICAgICAgIGludCBzdGVuY2lsTWluLCBpbnQgc3RlbmNpbFByZWYsCi0gICAgICAgICAgICAgICAgIGludCBzYW1wbGVzTWluLCBpbnQgc2FtcGxlc1ByZWYsIGZsb2F0IHNhbXBsZXNRLAotICAgICAgICAgICAgICAgICBpbnQgZHBpKQotewotICAgIFJzU3VyZmFjZUNvbmZpZyBzYzsKLSAgICBzYy5hbHBoYU1pbiA9IGFscGhhTWluOwotICAgIHNjLmFscGhhUHJlZiA9IGFscGhhUHJlZjsKLSAgICBzYy5jb2xvck1pbiA9IGNvbG9yTWluOwotICAgIHNjLmNvbG9yUHJlZiA9IGNvbG9yUHJlZjsKLSAgICBzYy5kZXB0aE1pbiA9IGRlcHRoTWluOwotICAgIHNjLmRlcHRoUHJlZiA9IGRlcHRoUHJlZjsKLSAgICBzYy5zYW1wbGVzTWluID0gc2FtcGxlc01pbjsKLSAgICBzYy5zYW1wbGVzUHJlZiA9IHNhbXBsZXNQcmVmOwotICAgIHNjLnNhbXBsZXNRID0gc2FtcGxlc1E7Ci0KLSAgICBMT0dfQVBJKCJuQ29udGV4dENyZWF0ZUdMIik7Ci0gICAgcmV0dXJuIChqaW50KXJzQ29udGV4dENyZWF0ZUdMKChSc0RldmljZSlkZXYsIHZlciwgc2RrVmVyLCBzYywgZHBpKTsKLX0KLQotc3RhdGljIHZvaWQKLW5Db250ZXh0U2V0UHJpb3JpdHkoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHApCi17Ci0gICAgTE9HX0FQSSgiQ29udGV4dFNldFByaW9yaXR5LCBjb24oJXApLCBwcmlvcml0eSglaSkiLCBjb24sIHApOwotICAgIHJzQ29udGV4dFNldFByaW9yaXR5KGNvbiwgcCk7Ci19Ci0KLQotCi1zdGF0aWMgdm9pZAotbkNvbnRleHRTZXRTdXJmYWNlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCB3aWR0aCwgamludCBoZWlnaHQsIGpvYmplY3Qgd25kKQotewotICAgIExPR19BUEkoIm5Db250ZXh0U2V0U3VyZmFjZSwgY29uKCVwKSwgd2lkdGgoJWkpLCBoZWlnaHQoJWkpLCBzdXJmYWNlKCVwKSIsIGNvbiwgd2lkdGgsIGhlaWdodCwgKFN1cmZhY2UgKil3bmQpOwotCi0gICAgQU5hdGl2ZVdpbmRvdyAqIHdpbmRvdyA9IE5VTEw7Ci0gICAgaWYgKHduZCA9PSBOVUxMKSB7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICB3aW5kb3cgPSBhbmRyb2lkX3ZpZXdfU3VyZmFjZV9nZXROYXRpdmVXaW5kb3coX2Vudiwgd25kKS5nZXQoKTsKLSAgICB9Ci0KLSAgICByc0NvbnRleHRTZXRTdXJmYWNlKGNvbiwgd2lkdGgsIGhlaWdodCwgd2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQKLW5Db250ZXh0RGVzdHJveShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24pCi17Ci0gICAgTE9HX0FQSSgibkNvbnRleHREZXN0cm95LCBjb24oJXApIiwgY29uKTsKLSAgICByc0NvbnRleHREZXN0cm95KGNvbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQ29udGV4dER1bXAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGJpdHMpCi17Ci0gICAgTE9HX0FQSSgibkNvbnRleHREdW1wLCBjb24oJXApICBiaXRzKCVpKSIsIChSc0NvbnRleHQpY29uLCBiaXRzKTsKLSAgICByc0NvbnRleHREdW1wKChSc0NvbnRleHQpY29uLCBiaXRzKTsKLX0KLQotc3RhdGljIHZvaWQKLW5Db250ZXh0UGF1c2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uKQotewotICAgIExPR19BUEkoIm5Db250ZXh0UGF1c2UsIGNvbiglcCkiLCBjb24pOwotICAgIHJzQ29udGV4dFBhdXNlKGNvbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQ29udGV4dFJlc3VtZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24pCi17Ci0gICAgTE9HX0FQSSgibkNvbnRleHRSZXN1bWUsIGNvbiglcCkiLCBjb24pOwotICAgIHJzQ29udGV4dFJlc3VtZShjb24pOwotfQotCi0KLXN0YXRpYyBqc3RyaW5nCi1uQ29udGV4dEdldEVycm9yTWVzc2FnZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24pCi17Ci0gICAgTE9HX0FQSSgibkNvbnRleHRHZXRFcnJvck1lc3NhZ2UsIGNvbiglcCkiLCBjb24pOwotICAgIGNoYXIgYnVmWzEwMjRdOwotCi0gICAgc2l6ZV90IHJlY2VpdmVMZW47Ci0gICAgdWludDMyX3Qgc3ViSUQ7Ci0gICAgaW50IGlkID0gcnNDb250ZXh0R2V0TWVzc2FnZShjb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlY2VpdmVMZW4sIHNpemVvZihyZWNlaXZlTGVuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJJRCwgc2l6ZW9mKHN1YklEKSk7Ci0gICAgaWYgKCFpZCAmJiByZWNlaXZlTGVuKSB7Ci0gICAgICAgIEFMT0dWKCJtZXNzYWdlIHJlY2VpdmUgYnVmZmVyIHRvbyBzbWFsbC4gICVpIiwgcmVjZWl2ZUxlbik7Ci0gICAgfQotICAgIHJldHVybiBfZW52LT5OZXdTdHJpbmdVVEYoYnVmKTsKLX0KLQotc3RhdGljIGppbnQKLW5Db250ZXh0R2V0VXNlck1lc3NhZ2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50QXJyYXkgZGF0YSkKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5Db250ZXh0R2V0TWVzc2FnZSwgY29uKCVwKSwgbGVuKCVpKSIsIGNvbiwgbGVuKTsKLSAgICBqaW50ICpwdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIHNpemVfdCByZWNlaXZlTGVuOwotICAgIHVpbnQzMl90IHN1YklEOwotICAgIGludCBpZCA9IHJzQ29udGV4dEdldE1lc3NhZ2UoY29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyLCBsZW4gKiA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlY2VpdmVMZW4sIHNpemVvZihyZWNlaXZlTGVuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJJRCwgc2l6ZW9mKHN1YklEKSk7Ci0gICAgaWYgKCFpZCAmJiByZWNlaXZlTGVuKSB7Ci0gICAgICAgIEFMT0dWKCJtZXNzYWdlIHJlY2VpdmUgYnVmZmVyIHRvbyBzbWFsbC4gICVpIiwgcmVjZWl2ZUxlbik7Ci0gICAgfQotICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgMCk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi1zdGF0aWMgamludAotbkNvbnRleHRQZWVrTWVzc2FnZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnRBcnJheSBhdXhEYXRhKQotewotICAgIExPR19BUEkoIm5Db250ZXh0UGVla01lc3NhZ2UsIGNvbiglcCkiLCBjb24pOwotICAgIGppbnQgKmF1eERhdGFQdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGF1eERhdGEsIE5VTEwpOwotICAgIHNpemVfdCByZWNlaXZlTGVuOwotICAgIHVpbnQzMl90IHN1YklEOwotICAgIGludCBpZCA9IHJzQ29udGV4dFBlZWtNZXNzYWdlKGNvbiwgJnJlY2VpdmVMZW4sIHNpemVvZihyZWNlaXZlTGVuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViSUQsIHNpemVvZihzdWJJRCkpOwotICAgIGF1eERhdGFQdHJbMF0gPSAoamludClzdWJJRDsKLSAgICBhdXhEYXRhUHRyWzFdID0gKGppbnQpcmVjZWl2ZUxlbjsKLSAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhhdXhEYXRhLCBhdXhEYXRhUHRyLCAwKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIG5Db250ZXh0SW5pdFRvQ2xpZW50KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbikKLXsKLSAgICBMT0dfQVBJKCJuQ29udGV4dEluaXRUb0NsaWVudCwgY29uKCVwKSIsIGNvbik7Ci0gICAgcnNDb250ZXh0SW5pdFRvQ2xpZW50KGNvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIG5Db250ZXh0RGVpbml0VG9DbGllbnQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uKQotewotICAgIExPR19BUEkoIm5Db250ZXh0RGVpbml0VG9DbGllbnQsIGNvbiglcCkiLCBjb24pOwotICAgIHJzQ29udGV4dERlaW5pdFRvQ2xpZW50KGNvbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQ29udGV4dFNlbmRNZXNzYWdlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBpZCwgamludEFycmF5IGRhdGEpCi17Ci0gICAgamludCAqcHRyID0gTlVMTDsKLSAgICBqaW50IGxlbiA9IDA7Ci0gICAgaWYgKGRhdGEpIHsKLSAgICAgICAgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7Ci0gICAgICAgIGppbnQgKnB0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAgfQotICAgIExPR19BUEkoIm5Db250ZXh0U2VuZE1lc3NhZ2UsIGNvbiglcCksIGlkKCVpKSwgbGVuKCVpKSIsIGNvbiwgaWQsIGxlbik7Ci0gICAgcnNDb250ZXh0U2VuZE1lc3NhZ2UoY29uLCBpZCwgKGNvbnN0IHVpbnQ4X3QgKilwdHIsIGxlbiAqIHNpemVvZihpbnQpKTsKLSAgICBpZiAoZGF0YSkgewotICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci0gICAgfQotfQotCi0KLQotc3RhdGljIGppbnQKLW5FbGVtZW50Q3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCB0eXBlLCBqaW50IGtpbmQsIGpib29sZWFuIG5vcm0sIGppbnQgc2l6ZSkKLXsKLSAgICBMT0dfQVBJKCJuRWxlbWVudENyZWF0ZSwgY29uKCVwKSwgdHlwZSglaSksIGtpbmQoJWkpLCBub3JtKCVpKSwgc2l6ZSglaSkiLCBjb24sIHR5cGUsIGtpbmQsIG5vcm0sIHNpemUpOwotICAgIHJldHVybiAoamludClyc0VsZW1lbnRDcmVhdGUoY29uLCAoUnNEYXRhVHlwZSl0eXBlLCAoUnNEYXRhS2luZClraW5kLCBub3JtLCBzaXplKTsKLX0KLQotc3RhdGljIGppbnQKLW5FbGVtZW50Q3JlYXRlMihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sCi0gICAgICAgICAgICAgICAgamludEFycmF5IF9pZHMsIGpvYmplY3RBcnJheSBfbmFtZXMsIGppbnRBcnJheSBfYXJyYXlTaXplcykKLXsKLSAgICBpbnQgZmllbGRDb3VudCA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKF9pZHMpOwotICAgIExPR19BUEkoIm5FbGVtZW50Q3JlYXRlMiwgY29uKCVwKSIsIGNvbik7Ci0KLSAgICBqaW50ICppZHMgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9pZHMsIE5VTEwpOwotICAgIGppbnQgKmFycmF5U2l6ZXMgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9hcnJheVNpemVzLCBOVUxMKTsKLQotICAgIEF1dG9KYXZhU3RyaW5nQXJyYXlUb1VURjggbmFtZXMoX2VudiwgX25hbWVzLCBmaWVsZENvdW50KTsKLQotICAgIGNvbnN0IGNoYXIgKipuYW1lQXJyYXkgPSBuYW1lcy5jX3N0cigpOwotICAgIHNpemVfdCAqc2l6ZUFycmF5ID0gbmFtZXMuY19zdHJfbGVuKCk7Ci0KLSAgICBqaW50IGlkID0gKGppbnQpcnNFbGVtZW50Q3JlYXRlMihjb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzRWxlbWVudCAqKWlkcywgZmllbGRDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lQXJyYXksIGZpZWxkQ291bnQgKiBzaXplb2Yoc2l6ZV90KSwgIHNpemVBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdWludDMyX3QgKilhcnJheVNpemVzLCBmaWVsZENvdW50KTsKLQotICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF9pZHMsIGlkcywgSk5JX0FCT1JUKTsKLSAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfYXJyYXlTaXplcywgYXJyYXlTaXplcywgSk5JX0FCT1JUKTsKLSAgICByZXR1cm4gKGppbnQpaWQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uRWxlbWVudEdldE5hdGl2ZURhdGEoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGlkLCBqaW50QXJyYXkgX2VsZW1lbnREYXRhKQotewotICAgIGludCBkYXRhU2l6ZSA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKF9lbGVtZW50RGF0YSk7Ci0gICAgTE9HX0FQSSgibkVsZW1lbnRHZXROYXRpdmVEYXRhLCBjb24oJXApIiwgY29uKTsKLQotICAgIC8vIHdlIHdpbGwgcGFjayBtVHlwZTsgbUtpbmQ7IG1Ob3JtYWxpemVkOyBtVmVjdG9yU2l6ZTsgTnVtU3ViRWxlbWVudHMKLSAgICBhc3NlcnQoZGF0YVNpemUgPT0gNSk7Ci0KLSAgICB1aW50MzJfdCBlbGVtZW50RGF0YVs1XTsKLSAgICByc2FFbGVtZW50R2V0TmF0aXZlRGF0YShjb24sIChSc0VsZW1lbnQpaWQsIGVsZW1lbnREYXRhLCBkYXRhU2l6ZSk7Ci0KLSAgICBmb3IoamludCBpID0gMDsgaSA8IGRhdGFTaXplOyBpICsrKSB7Ci0gICAgICAgIF9lbnYtPlNldEludEFycmF5UmVnaW9uKF9lbGVtZW50RGF0YSwgaSwgMSwgKGNvbnN0IGppbnQqKSZlbGVtZW50RGF0YVtpXSk7Ci0gICAgfQotfQotCi0KLXN0YXRpYyB2b2lkCi1uRWxlbWVudEdldFN1YkVsZW1lbnRzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgamludEFycmF5IF9JRHMsCi0gICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3RBcnJheSBfbmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgIGppbnRBcnJheSBfYXJyYXlTaXplcykKLXsKLSAgICBpbnQgZGF0YVNpemUgPSBfZW52LT5HZXRBcnJheUxlbmd0aChfSURzKTsKLSAgICBMT0dfQVBJKCJuRWxlbWVudEdldFN1YkVsZW1lbnRzLCBjb24oJXApIiwgY29uKTsKLQotICAgIHVpbnQzMl90ICppZHMgPSAodWludDMyX3QgKiltYWxsb2MoKHVpbnQzMl90KWRhdGFTaXplICogc2l6ZW9mKHVpbnQzMl90KSk7Ci0gICAgY29uc3QgY2hhciAqKm5hbWVzID0gKGNvbnN0IGNoYXIgKiopbWFsbG9jKCh1aW50MzJfdClkYXRhU2l6ZSAqIHNpemVvZihjb25zdCBjaGFyICopKTsKLSAgICB1aW50MzJfdCAqYXJyYXlTaXplcyA9ICh1aW50MzJfdCAqKW1hbGxvYygodWludDMyX3QpZGF0YVNpemUgKiBzaXplb2YodWludDMyX3QpKTsKLQotICAgIHJzYUVsZW1lbnRHZXRTdWJFbGVtZW50cyhjb24sIChSc0VsZW1lbnQpaWQsIGlkcywgbmFtZXMsIGFycmF5U2l6ZXMsICh1aW50MzJfdClkYXRhU2l6ZSk7Ci0KLSAgICBmb3IoamludCBpID0gMDsgaSA8IGRhdGFTaXplOyBpKyspIHsKLSAgICAgICAgX2Vudi0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KF9uYW1lcywgaSwgX2Vudi0+TmV3U3RyaW5nVVRGKG5hbWVzW2ldKSk7Ci0gICAgICAgIF9lbnYtPlNldEludEFycmF5UmVnaW9uKF9JRHMsIGksIDEsIChjb25zdCBqaW50KikmaWRzW2ldKTsKLSAgICAgICAgX2Vudi0+U2V0SW50QXJyYXlSZWdpb24oX2FycmF5U2l6ZXMsIGksIDEsIChjb25zdCBqaW50KikmYXJyYXlTaXplc1tpXSk7Ci0gICAgfQotCi0gICAgZnJlZShpZHMpOwotICAgIGZyZWUobmFtZXMpOwotICAgIGZyZWUoYXJyYXlTaXplcyk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBpbnQKLW5UeXBlQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgUnNFbGVtZW50IGVpZCwKLSAgICAgICAgICAgIGppbnQgZGlteCwgamludCBkaW15LCBqaW50IGRpbXosIGpib29sZWFuIG1pcHMsIGpib29sZWFuIGZhY2VzLCBqaW50IHl1dikKLXsKLSAgICBMT0dfQVBJKCJuVHlwZUNyZWF0ZSwgY29uKCVwKSBlaWQoJXApLCB4KCVpKSwgeSglaSksIHooJWkpLCBtaXBzKCVpKSwgZmFjZXMoJWkpLCB5dXYoJWkpIiwKLSAgICAgICAgICAgIGNvbiwgZWlkLCBkaW14LCBkaW15LCBkaW16LCBtaXBzLCBmYWNlcywgeXV2KTsKLQotICAgIGppbnQgaWQgPSAoamludClyc1R5cGVDcmVhdGUoY29uLCAoUnNFbGVtZW50KWVpZCwgZGlteCwgZGlteSwgZGlteiwgbWlwcywgZmFjZXMsIHl1dik7Ci0gICAgcmV0dXJuIChqaW50KWlkOwotfQotCi1zdGF0aWMgdm9pZAotblR5cGVHZXROYXRpdmVEYXRhKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBpZCwgamludEFycmF5IF90eXBlRGF0YSkKLXsKLSAgICAvLyBXZSBhcmUgcGFja2luZyA2IGl0ZW1zOiBtRGltWDsgbURpbVk7IG1EaW1aOwotICAgIC8vIG1EaW1MT0Q7IG1EaW1GYWNlczsgbUVsZW1lbnQ7IGludG8gdHlwZURhdGEKLSAgICBpbnQgZWxlbWVudENvdW50ID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoX3R5cGVEYXRhKTsKLQotICAgIGFzc2VydChlbGVtZW50Q291bnQgPT0gNik7Ci0gICAgTE9HX0FQSSgiblR5cGVDcmVhdGUsIGNvbiglcCkiLCBjb24pOwotCi0gICAgdWludDMyX3QgdHlwZURhdGFbNl07Ci0gICAgcnNhVHlwZUdldE5hdGl2ZURhdGEoY29uLCAoUnNUeXBlKWlkLCB0eXBlRGF0YSwgNik7Ci0KLSAgICBmb3IoamludCBpID0gMDsgaSA8IGVsZW1lbnRDb3VudDsgaSArKykgewotICAgICAgICBfZW52LT5TZXRJbnRBcnJheVJlZ2lvbihfdHlwZURhdGEsIGksIDEsIChjb25zdCBqaW50KikmdHlwZURhdGFbaV0pOwotICAgIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGppbnQKLW5BbGxvY2F0aW9uQ3JlYXRlVHlwZWQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHR5cGUsIGppbnQgbWlwcywgamludCB1c2FnZSwgamludCBwb2ludGVyKQotewotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uQ3JlYXRlVHlwZWQsIGNvbiglcCksIHR5cGUoJXApLCBtaXAoJWkpLCB1c2FnZSglaSksIHB0ciglcCkiLCBjb24sIChSc0VsZW1lbnQpdHlwZSwgbWlwcywgdXNhZ2UsICh2b2lkICopcG9pbnRlcik7Ci0gICAgcmV0dXJuIChqaW50KSByc0FsbG9jYXRpb25DcmVhdGVUeXBlZChjb24sIChSc1R5cGUpdHlwZSwgKFJzQWxsb2NhdGlvbk1pcG1hcENvbnRyb2wpbWlwcywgKHVpbnQzMl90KXVzYWdlLCAodWludDMyX3QpcG9pbnRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvblN5bmNBbGwoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGEsIGppbnQgYml0cykKLXsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvblN5bmNBbGwsIGNvbiglcCksIGEoJXApLCBiaXRzKDB4JTA4eCkiLCBjb24sIChSc0FsbG9jYXRpb24pYSwgYml0cyk7Ci0gICAgcnNBbGxvY2F0aW9uU3luY0FsbChjb24sIChSc0FsbG9jYXRpb24pYSwgKFJzQWxsb2NhdGlvblVzYWdlVHlwZSliaXRzKTsKLX0KLQotc3RhdGljIGpvYmplY3QKLW5BbGxvY2F0aW9uR2V0U3VyZmFjZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYSkKLXsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbkdldFN1cmZhY2UsIGNvbiglcCksIGEoJXApIiwgY29uLCAoUnNBbGxvY2F0aW9uKWEpOwotCi0gICAgSUdyYXBoaWNCdWZmZXJQcm9kdWNlciAqdiA9IChJR3JhcGhpY0J1ZmZlclByb2R1Y2VyICopcnNBbGxvY2F0aW9uR2V0U3VyZmFjZShjb24sIChSc0FsbG9jYXRpb24pYSk7Ci0gICAgc3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4gYnAgPSB2OwotICAgIHYtPmRlY1N0cm9uZyhOVUxMKTsKLQotICAgIGpvYmplY3QgbyA9IGFuZHJvaWRfdmlld19TdXJmYWNlX2NyZWF0ZUZyb21JR3JhcGhpY0J1ZmZlclByb2R1Y2VyKF9lbnYsIGJwKTsKLSAgICByZXR1cm4gbzsKLX0KLQotc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uU2V0U3VyZmFjZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIFJzQWxsb2NhdGlvbiBhbGxvYywgam9iamVjdCBzdXIpCi17Ci0gICAgTE9HX0FQSSgibkFsbG9jYXRpb25TZXRTdXJmYWNlLCBjb24oJXApLCBhbGxvYyglcCksIHN1cmZhY2UoJXApIiwKLSAgICAgICAgICAgIGNvbiwgYWxsb2MsIChTdXJmYWNlICopc3VyKTsKLQotICAgIHNwPFN1cmZhY2U+IHM7Ci0gICAgaWYgKHN1ciAhPSAwKSB7Ci0gICAgICAgIHMgPSBhbmRyb2lkX3ZpZXdfU3VyZmFjZV9nZXRTdXJmYWNlKF9lbnYsIHN1cik7Ci0gICAgfQotCi0gICAgcnNBbGxvY2F0aW9uU2V0U3VyZmFjZShjb24sIGFsbG9jLCBzdGF0aWNfY2FzdDxBTmF0aXZlV2luZG93ICo+KHMuZ2V0KCkpKTsKLX0KLQotc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uSW9TZW5kKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgUnNBbGxvY2F0aW9uIGFsbG9jKQotewotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uSW9TZW5kLCBjb24oJXApLCBhbGxvYyglcCkiLCBjb24sIGFsbG9jKTsKLSAgICByc0FsbG9jYXRpb25Jb1NlbmQoY29uLCBhbGxvYyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbklvUmVjZWl2ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIFJzQWxsb2NhdGlvbiBhbGxvYykKLXsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbklvUmVjZWl2ZSwgY29uKCVwKSwgYWxsb2MoJXApIiwgY29uLCBhbGxvYyk7Ci0gICAgcnNBbGxvY2F0aW9uSW9SZWNlaXZlKGNvbiwgYWxsb2MpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MpCi17Ci0gICAgTE9HX0FQSSgibkFsbG9jYXRpb25HZW5lcmF0ZU1pcG1hcHMsIGNvbiglcCksIGEoJXApIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jKTsKLSAgICByc0FsbG9jYXRpb25HZW5lcmF0ZU1pcG1hcHMoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jKTsKLX0KLQotc3RhdGljIGludAotbkFsbG9jYXRpb25DcmVhdGVGcm9tQml0bWFwKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCB0eXBlLCBqaW50IG1pcCwgam9iamVjdCBqYml0bWFwLCBqaW50IHVzYWdlKQotewotICAgIFNrQml0bWFwIGNvbnN0ICogbmF0aXZlQml0bWFwID0KLSAgICAgICAgICAgIChTa0JpdG1hcCBjb25zdCAqKV9lbnYtPkdldEludEZpZWxkKGpiaXRtYXAsIGdOYXRpdmVCaXRtYXBJRCk7Ci0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgqbmF0aXZlQml0bWFwKTsKLQotICAgIGJpdG1hcC5sb2NrUGl4ZWxzKCk7Ci0gICAgY29uc3Qgdm9pZCogcHRyID0gYml0bWFwLmdldFBpeGVscygpOwotICAgIGppbnQgaWQgPSAoamludClyc0FsbG9jYXRpb25DcmVhdGVGcm9tQml0bWFwKGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzVHlwZSl0eXBlLCAoUnNBbGxvY2F0aW9uTWlwbWFwQ29udHJvbCltaXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciwgYml0bWFwLmdldFNpemUoKSwgdXNhZ2UpOwotICAgIGJpdG1hcC51bmxvY2tQaXhlbHMoKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyBpbnQKLW5BbGxvY2F0aW9uQ3JlYXRlQml0bWFwQmFja2VkQWxsb2NhdGlvbihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgdHlwZSwgamludCBtaXAsIGpvYmplY3QgamJpdG1hcCwgamludCB1c2FnZSkKLXsKLSAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9Ci0gICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKilfZW52LT5HZXRJbnRGaWVsZChqYml0bWFwLCBnTmF0aXZlQml0bWFwSUQpOwotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKm5hdGl2ZUJpdG1hcCk7Ci0KLSAgICBiaXRtYXAubG9ja1BpeGVscygpOwotICAgIGNvbnN0IHZvaWQqIHB0ciA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKLSAgICBqaW50IGlkID0gKGppbnQpcnNBbGxvY2F0aW9uQ3JlYXRlVHlwZWQoY29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNUeXBlKXR5cGUsIChSc0FsbG9jYXRpb25NaXBtYXBDb250cm9sKW1pcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KXVzYWdlLCAoc2l6ZV90KXB0cik7Ci0gICAgYml0bWFwLnVubG9ja1BpeGVscygpOwotICAgIHJldHVybiBpZDsKLX0KLQotc3RhdGljIGludAotbkFsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgdHlwZSwgamludCBtaXAsIGpvYmplY3QgamJpdG1hcCwgamludCB1c2FnZSkKLXsKLSAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9Ci0gICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKilfZW52LT5HZXRJbnRGaWVsZChqYml0bWFwLCBnTmF0aXZlQml0bWFwSUQpOwotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKm5hdGl2ZUJpdG1hcCk7Ci0KLSAgICBiaXRtYXAubG9ja1BpeGVscygpOwotICAgIGNvbnN0IHZvaWQqIHB0ciA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKLSAgICBqaW50IGlkID0gKGppbnQpcnNBbGxvY2F0aW9uQ3ViZUNyZWF0ZUZyb21CaXRtYXAoY29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzVHlwZSl0eXBlLCAoUnNBbGxvY2F0aW9uTWlwbWFwQ29udHJvbCltaXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIsIGJpdG1hcC5nZXRTaXplKCksIHVzYWdlKTsKLSAgICBiaXRtYXAudW5sb2NrUGl4ZWxzKCk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi1zdGF0aWMgdm9pZAotbkFsbG9jYXRpb25Db3B5RnJvbUJpdG1hcChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGpvYmplY3QgamJpdG1hcCkKLXsKLSAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9Ci0gICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKilfZW52LT5HZXRJbnRGaWVsZChqYml0bWFwLCBnTmF0aXZlQml0bWFwSUQpOwotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKm5hdGl2ZUJpdG1hcCk7Ci0gICAgaW50IHcgPSBiaXRtYXAud2lkdGgoKTsKLSAgICBpbnQgaCA9IGJpdG1hcC5oZWlnaHQoKTsKLQotICAgIGJpdG1hcC5sb2NrUGl4ZWxzKCk7Ci0gICAgY29uc3Qgdm9pZCogcHRyID0gYml0bWFwLmdldFBpeGVscygpOwotICAgIHJzQWxsb2NhdGlvbjJERGF0YShjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgIDAsIFJTX0FMTE9DQVRJT05fQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1gsCi0gICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIHB0ciwgYml0bWFwLmdldFNpemUoKSwgMCk7Ci0gICAgYml0bWFwLnVubG9ja1BpeGVscygpOwotfQotCi1zdGF0aWMgdm9pZAotbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGFsbG9jLCBqb2JqZWN0IGpiaXRtYXApCi17Ci0gICAgU2tCaXRtYXAgY29uc3QgKiBuYXRpdmVCaXRtYXAgPQotICAgICAgICAgICAgKFNrQml0bWFwIGNvbnN0ICopX2Vudi0+R2V0SW50RmllbGQoamJpdG1hcCwgZ05hdGl2ZUJpdG1hcElEKTsKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCpuYXRpdmVCaXRtYXApOwotCi0gICAgYml0bWFwLmxvY2tQaXhlbHMoKTsKLSAgICB2b2lkKiBwdHIgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7Ci0gICAgcnNBbGxvY2F0aW9uQ29weVRvQml0bWFwKGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgcHRyLCBiaXRtYXAuZ2V0U2l6ZSgpKTsKLSAgICBiaXRtYXAudW5sb2NrUGl4ZWxzKCk7Ci0gICAgYml0bWFwLm5vdGlmeVBpeGVsc0NoYW5nZWQoKTsKLX0KLQotc3RhdGljIHZvaWQgUmVsZWFzZUJpdG1hcENhbGxiYWNrKHZvaWQgKmJtcCkKLXsKLSAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9IChTa0JpdG1hcCBjb25zdCAqKWJtcDsKLSAgICBuYXRpdmVCaXRtYXAtPnVubG9ja1BpeGVscygpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGExRF9pKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludCBvZmZzZXQsIGppbnQgbG9kLCBqaW50IGNvdW50LCBqaW50QXJyYXkgZGF0YSwgaW50IHNpemVCeXRlcykKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uMUREYXRhX2ksIGNvbiglcCksIGFkYXB0ZXIoJXApLCBvZmZzZXQoJWkpLCBjb3VudCglaSksIGxlbiglaSksIHNpemVCeXRlcyglaSkiLCBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIG9mZnNldCwgY291bnQsIGxlbiwgc2l6ZUJ5dGVzKTsKLSAgICBqaW50ICpwdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIHJzQWxsb2NhdGlvbjFERGF0YShjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIG9mZnNldCwgbG9kLCBjb3VudCwgcHRyLCBzaXplQnl0ZXMpOwotICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgSk5JX0FCT1JUKTsKLX0KLQotc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uRGF0YTFEX3MoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGFsbG9jLCBqaW50IG9mZnNldCwgamludCBsb2QsIGppbnQgY291bnQsIGpzaG9ydEFycmF5IGRhdGEsIGludCBzaXplQnl0ZXMpCi17Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjFERGF0YV9zLCBjb24oJXApLCBhZGFwdGVyKCVwKSwgb2Zmc2V0KCVpKSwgY291bnQoJWkpLCBsZW4oJWkpLCBzaXplQnl0ZXMoJWkpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBvZmZzZXQsIGNvdW50LCBsZW4sIHNpemVCeXRlcyk7Ci0gICAganNob3J0ICpwdHIgPSBfZW52LT5HZXRTaG9ydEFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAgcnNBbGxvY2F0aW9uMUREYXRhKGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgb2Zmc2V0LCBsb2QsIGNvdW50LCBwdHIsIHNpemVCeXRlcyk7Ci0gICAgX2Vudi0+UmVsZWFzZVNob3J0QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGExRF9iKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludCBvZmZzZXQsIGppbnQgbG9kLCBqaW50IGNvdW50LCBqYnl0ZUFycmF5IGRhdGEsIGludCBzaXplQnl0ZXMpCi17Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjFERGF0YV9iLCBjb24oJXApLCBhZGFwdGVyKCVwKSwgb2Zmc2V0KCVpKSwgY291bnQoJWkpLCBsZW4oJWkpLCBzaXplQnl0ZXMoJWkpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBvZmZzZXQsIGNvdW50LCBsZW4sIHNpemVCeXRlcyk7Ci0gICAgamJ5dGUgKnB0ciA9IF9lbnYtPkdldEJ5dGVBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIHJzQWxsb2NhdGlvbjFERGF0YShjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIG9mZnNldCwgbG9kLCBjb3VudCwgcHRyLCBzaXplQnl0ZXMpOwotICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGExRF9mKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludCBvZmZzZXQsIGppbnQgbG9kLCBqaW50IGNvdW50LCBqZmxvYXRBcnJheSBkYXRhLCBpbnQgc2l6ZUJ5dGVzKQotewotICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7Ci0gICAgTE9HX0FQSSgibkFsbG9jYXRpb24xRERhdGFfZiwgY29uKCVwKSwgYWRhcHRlciglcCksIG9mZnNldCglaSksIGNvdW50KCVpKSwgbGVuKCVpKSwgc2l6ZUJ5dGVzKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgb2Zmc2V0LCBjb3VudCwgbGVuLCBzaXplQnl0ZXMpOwotICAgIGpmbG9hdCAqcHRyID0gX2Vudi0+R2V0RmxvYXRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIHJzQWxsb2NhdGlvbjFERGF0YShjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIG9mZnNldCwgbG9kLCBjb3VudCwgcHRyLCBzaXplQnl0ZXMpOwotICAgIF9lbnYtPlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOwotfQotCi1zdGF0aWMgdm9pZAotLy8gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkVsZW1lbnREYXRhMUQoaW50IGNvbiwgaW50IGlkLCBpbnQgeG9mZiwgaW50IGNvbXBJZHgsIGJ5dGVbXSBkLCBpbnQgc2l6ZUJ5dGVzKTsKLW5BbGxvY2F0aW9uRWxlbWVudERhdGExRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGppbnQgb2Zmc2V0LCBqaW50IGxvZCwgamludCBjb21wSWR4LCBqYnl0ZUFycmF5IGRhdGEsIGludCBzaXplQnl0ZXMpCi17Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbkVsZW1lbnREYXRhMUQsIGNvbiglcCksIGFsbG9jKCVwKSwgb2Zmc2V0KCVpKSwgY29tcCglaSksIGxlbiglaSksIHNpemVCeXRlcyglaSkiLCBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIG9mZnNldCwgY29tcElkeCwgbGVuLCBzaXplQnl0ZXMpOwotICAgIGpieXRlICpwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24xREVsZW1lbnREYXRhKGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgb2Zmc2V0LCBsb2QsIHB0ciwgc2l6ZUJ5dGVzLCBjb21wSWR4KTsKLSAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOwotfQotCi1zdGF0aWMgdm9pZAotbkFsbG9jYXRpb25EYXRhMkRfcyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGppbnQgeG9mZiwgamludCB5b2ZmLCBqaW50IGxvZCwgamludCBmYWNlLAotICAgICAgICAgICAgICAgICAgICBqaW50IHcsIGppbnQgaCwganNob3J0QXJyYXkgZGF0YSwgaW50IHNpemVCeXRlcykKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uMkREYXRhX3MsIGNvbiglcCksIGFkYXB0ZXIoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHcoJWkpLCBoKCVpKSwgbGVuKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgdywgaCwgbGVuKTsKLSAgICBqc2hvcnQgKnB0ciA9IF9lbnYtPkdldFNob3J0QXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24yRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCB4b2ZmLCB5b2ZmLCBsb2QsIChSc0FsbG9jYXRpb25DdWJlbWFwRmFjZSlmYWNlLCB3LCBoLCBwdHIsIHNpemVCeXRlcywgMCk7Ci0gICAgX2Vudi0+UmVsZWFzZVNob3J0QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGEyRF9iKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludCB4b2ZmLCBqaW50IHlvZmYsIGppbnQgbG9kLCBqaW50IGZhY2UsCi0gICAgICAgICAgICAgICAgICAgIGppbnQgdywgamludCBoLCBqYnl0ZUFycmF5IGRhdGEsIGludCBzaXplQnl0ZXMpCi17Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjJERGF0YV9iLCBjb24oJXApLCBhZGFwdGVyKCVwKSwgeG9mZiglaSksIHlvZmYoJWkpLCB3KCVpKSwgaCglaSksIGxlbiglaSkiLCBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHhvZmYsIHlvZmYsIHcsIGgsIGxlbik7Ci0gICAgamJ5dGUgKnB0ciA9IF9lbnYtPkdldEJ5dGVBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIHJzQWxsb2NhdGlvbjJERGF0YShjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHhvZmYsIHlvZmYsIGxvZCwgKFJzQWxsb2NhdGlvbkN1YmVtYXBGYWNlKWZhY2UsIHcsIGgsIHB0ciwgc2l6ZUJ5dGVzLCAwKTsKLSAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOwotfQotCi1zdGF0aWMgdm9pZAotbkFsbG9jYXRpb25EYXRhMkRfaShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGppbnQgeG9mZiwgamludCB5b2ZmLCBqaW50IGxvZCwgamludCBmYWNlLAotICAgICAgICAgICAgICAgICAgICBqaW50IHcsIGppbnQgaCwgamludEFycmF5IGRhdGEsIGludCBzaXplQnl0ZXMpCi17Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjJERGF0YV9pLCBjb24oJXApLCBhZGFwdGVyKCVwKSwgeG9mZiglaSksIHlvZmYoJWkpLCB3KCVpKSwgaCglaSksIGxlbiglaSkiLCBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHhvZmYsIHlvZmYsIHcsIGgsIGxlbik7Ci0gICAgamludCAqcHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24yRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCB4b2ZmLCB5b2ZmLCBsb2QsIChSc0FsbG9jYXRpb25DdWJlbWFwRmFjZSlmYWNlLCB3LCBoLCBwdHIsIHNpemVCeXRlcywgMCk7Ci0gICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOwotfQotCi1zdGF0aWMgdm9pZAotbkFsbG9jYXRpb25EYXRhMkRfZihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGppbnQgeG9mZiwgamludCB5b2ZmLCBqaW50IGxvZCwgamludCBmYWNlLAotICAgICAgICAgICAgICAgICAgICBqaW50IHcsIGppbnQgaCwgamZsb2F0QXJyYXkgZGF0YSwgaW50IHNpemVCeXRlcykKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uMkREYXRhX2ksIGNvbiglcCksIGFkYXB0ZXIoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHcoJWkpLCBoKCVpKSwgbGVuKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgdywgaCwgbGVuKTsKLSAgICBqZmxvYXQgKnB0ciA9IF9lbnYtPkdldEZsb2F0QXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24yRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCB4b2ZmLCB5b2ZmLCBsb2QsIChSc0FsbG9jYXRpb25DdWJlbWFwRmFjZSlmYWNlLCB3LCBoLCBwdHIsIHNpemVCeXRlcywgMCk7Ci0gICAgX2Vudi0+UmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGEyRF9hbGxvYyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBqaW50IGRzdEFsbG9jLCBqaW50IGRzdFhvZmYsIGppbnQgZHN0WW9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgZHN0TWlwLCBqaW50IGRzdEZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBqaW50IHdpZHRoLCBqaW50IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgc3JjQWxsb2MsIGppbnQgc3JjWG9mZiwgamludCBzcmNZb2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgamludCBzcmNNaXAsIGppbnQgc3JjRmFjZSkKLXsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjJERGF0YV9zLCBjb24oJXApLCBkc3RBbGxvYyglcCksIGRzdFhvZmYoJWkpLCBkc3RZb2ZmKCVpKSwiCi0gICAgICAgICAgICAiIGRzdE1pcCglaSksIGRzdEZhY2UoJWkpLCB3aWR0aCglaSksIGhlaWdodCglaSksIgotICAgICAgICAgICAgIiBzcmNBbGxvYyglcCksIHNyY1hvZmYoJWkpLCBzcmNZb2ZmKCVpKSwgc3JjTWlwKCVpKSwgc3JjRmFjZSglaSkiLAotICAgICAgICAgICAgY29uLCAoUnNBbGxvY2F0aW9uKWRzdEFsbG9jLCBkc3RYb2ZmLCBkc3RZb2ZmLCBkc3RNaXAsIGRzdEZhY2UsCi0gICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCAoUnNBbGxvY2F0aW9uKXNyY0FsbG9jLCBzcmNYb2ZmLCBzcmNZb2ZmLCBzcmNNaXAsIHNyY0ZhY2UpOwotCi0gICAgcnNBbGxvY2F0aW9uQ29weTJEUmFuZ2UoY29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc0FsbG9jYXRpb24pZHN0QWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0WG9mZiwgZHN0WW9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RNaXAsIGRzdEZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNBbGxvY2F0aW9uKXNyY0FsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1hvZmYsIHNyY1lvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTWlwLCBzcmNGYWNlKTsKLX0KLQotc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uRGF0YTNEX3MoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGFsbG9jLCBqaW50IHhvZmYsIGppbnQgeW9mZiwgamludCB6b2ZmLCBqaW50IGxvZCwKLSAgICAgICAgICAgICAgICAgICAgamludCB3LCBqaW50IGgsIGppbnQgZCwganNob3J0QXJyYXkgZGF0YSwgaW50IHNpemVCeXRlcykKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uM0REYXRhX3MsIGNvbiglcCksIGFkYXB0ZXIoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHcoJWkpLCBoKCVpKSwgbGVuKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgem9mZiwgdywgaCwgZCwgbGVuKTsKLSAgICBqc2hvcnQgKnB0ciA9IF9lbnYtPkdldFNob3J0QXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24zRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBsb2QsIHcsIGgsIGQsIHB0ciwgc2l6ZUJ5dGVzLCAwKTsKLSAgICBfZW52LT5SZWxlYXNlU2hvcnRBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgSk5JX0FCT1JUKTsKLX0KLQotc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uRGF0YTNEX2IoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGFsbG9jLCBqaW50IHhvZmYsIGppbnQgeW9mZiwgamludCB6b2ZmLCBqaW50IGxvZCwKLSAgICAgICAgICAgICAgICAgICAgamludCB3LCBqaW50IGgsIGppbnQgZCwgamJ5dGVBcnJheSBkYXRhLCBpbnQgc2l6ZUJ5dGVzKQotewotICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7Ci0gICAgTE9HX0FQSSgibkFsbG9jYXRpb24zRERhdGFfYiwgY29uKCVwKSwgYWRhcHRlciglcCksIHhvZmYoJWkpLCB5b2ZmKCVpKSwgdyglaSksIGgoJWkpLCBsZW4oJWkpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCB4b2ZmLCB5b2ZmLCB6b2ZmLCB3LCBoLCBkLCBsZW4pOwotICAgIGpieXRlICpwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24zRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBsb2QsIHcsIGgsIGQsIHB0ciwgc2l6ZUJ5dGVzLCAwKTsKLSAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOwotfQotCi1zdGF0aWMgdm9pZAotbkFsbG9jYXRpb25EYXRhM0RfaShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGppbnQgeG9mZiwgamludCB5b2ZmLCBqaW50IHpvZmYsIGppbnQgbG9kLAotICAgICAgICAgICAgICAgICAgICBqaW50IHcsIGppbnQgaCwgamludCBkLCBqaW50QXJyYXkgZGF0YSwgaW50IHNpemVCeXRlcykKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uM0REYXRhX2ksIGNvbiglcCksIGFkYXB0ZXIoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHcoJWkpLCBoKCVpKSwgbGVuKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgem9mZiwgdywgaCwgZCwgbGVuKTsKLSAgICBqaW50ICpwdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIHJzQWxsb2NhdGlvbjNERGF0YShjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHhvZmYsIHlvZmYsIHpvZmYsIGxvZCwgdywgaCwgZCwgcHRyLCBzaXplQnl0ZXMsIDApOwotICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgSk5JX0FCT1JUKTsKLX0KLQotc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uRGF0YTNEX2YoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGFsbG9jLCBqaW50IHhvZmYsIGppbnQgeW9mZiwgamludCB6b2ZmLCBqaW50IGxvZCwKLSAgICAgICAgICAgICAgICAgICAgamludCB3LCBqaW50IGgsIGppbnQgZCwgamZsb2F0QXJyYXkgZGF0YSwgaW50IHNpemVCeXRlcykKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uM0REYXRhX2YsIGNvbiglcCksIGFkYXB0ZXIoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHcoJWkpLCBoKCVpKSwgbGVuKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgem9mZiwgdywgaCwgZCwgbGVuKTsKLSAgICBqZmxvYXQgKnB0ciA9IF9lbnYtPkdldEZsb2F0QXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24zRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBsb2QsIHcsIGgsIGQsIHB0ciwgc2l6ZUJ5dGVzLCAwKTsKLSAgICBfZW52LT5SZWxlYXNlRmxvYXRBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgSk5JX0FCT1JUKTsKLX0KLQotc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uRGF0YTNEX2FsbG9jKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgZHN0QWxsb2MsIGppbnQgZHN0WG9mZiwgamludCBkc3RZb2ZmLCBqaW50IGRzdFpvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICBqaW50IGRzdE1pcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgd2lkdGgsIGppbnQgaGVpZ2h0LCBqaW50IGRlcHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgamludCBzcmNBbGxvYywgamludCBzcmNYb2ZmLCBqaW50IHNyY1lvZmYsIGppbnQgc3JjWm9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgc3JjTWlwKQotewotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uRGF0YTNEX2FsbG9jLCBjb24oJXApLCBkc3RBbGxvYyglcCksIGRzdFhvZmYoJWkpLCBkc3RZb2ZmKCVpKSwiCi0gICAgICAgICAgICAiIGRzdE1pcCglaSksIHdpZHRoKCVpKSwgaGVpZ2h0KCVpKSwiCi0gICAgICAgICAgICAiIHNyY0FsbG9jKCVwKSwgc3JjWG9mZiglaSksIHNyY1lvZmYoJWkpLCBzcmNNaXAoJWkpIiwKLSAgICAgICAgICAgIGNvbiwgKFJzQWxsb2NhdGlvbilkc3RBbGxvYywgZHN0WG9mZiwgZHN0WW9mZiwgZHN0TWlwLCBkc3RGYWNlLAotICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgKFJzQWxsb2NhdGlvbilzcmNBbGxvYywgc3JjWG9mZiwgc3JjWW9mZiwgc3JjTWlwLCBzcmNGYWNlKTsKLQotICAgIHJzQWxsb2NhdGlvbkNvcHkzRFJhbmdlKGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNBbGxvY2F0aW9uKWRzdEFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFhvZmYsIGRzdFlvZmYsIGRzdFpvZmYsIGRzdE1pcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNBbGxvY2F0aW9uKXNyY0FsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1hvZmYsIHNyY1lvZmYsIHNyY1pvZmYsIHNyY01pcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvblJlYWRfaShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGppbnRBcnJheSBkYXRhKQotewotICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7Ci0gICAgTE9HX0FQSSgibkFsbG9jYXRpb25SZWFkX2ksIGNvbiglcCksIGFsbG9jKCVwKSwgbGVuKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgbGVuKTsKLSAgICBqaW50ICpwdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIGpzaXplIGxlbmd0aCA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIHJzQWxsb2NhdGlvblJlYWQoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBwdHIsIGxlbmd0aCAqIHNpemVvZihpbnQpKTsKLSAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIDApOwotfQotCi1zdGF0aWMgdm9pZAotbkFsbG9jYXRpb25SZWFkX3MoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGFsbG9jLCBqc2hvcnRBcnJheSBkYXRhKQotewotICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7Ci0gICAgTE9HX0FQSSgibkFsbG9jYXRpb25SZWFkX2ksIGNvbiglcCksIGFsbG9jKCVwKSwgbGVuKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgbGVuKTsKLSAgICBqc2hvcnQgKnB0ciA9IF9lbnYtPkdldFNob3J0QXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICBqc2l6ZSBsZW5ndGggPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICByc0FsbG9jYXRpb25SZWFkKGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgcHRyLCBsZW5ndGggKiBzaXplb2Yoc2hvcnQpKTsKLSAgICBfZW52LT5SZWxlYXNlU2hvcnRBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvblJlYWRfYihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGpieXRlQXJyYXkgZGF0YSkKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uUmVhZF9pLCBjb24oJXApLCBhbGxvYyglcCksIGxlbiglaSkiLCBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIGxlbik7Ci0gICAgamJ5dGUgKnB0ciA9IF9lbnYtPkdldEJ5dGVBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIGpzaXplIGxlbmd0aCA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIHJzQWxsb2NhdGlvblJlYWQoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBwdHIsIGxlbmd0aCAqIHNpemVvZihjaGFyKSk7Ci0gICAgX2Vudi0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvblJlYWRfZihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGpmbG9hdEFycmF5IGRhdGEpCi17Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvblJlYWRfZiwgY29uKCVwKSwgYWxsb2MoJXApLCBsZW4oJWkpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBsZW4pOwotICAgIGpmbG9hdCAqcHRyID0gX2Vudi0+R2V0RmxvYXRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIGpzaXplIGxlbmd0aCA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIHJzQWxsb2NhdGlvblJlYWQoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBwdHIsIGxlbmd0aCAqIHNpemVvZihmbG9hdCkpOwotICAgIF9lbnYtPlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCAwKTsKLX0KLQotc3RhdGljIGppbnQKLW5BbGxvY2F0aW9uR2V0VHlwZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYSkKLXsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbkdldFR5cGUsIGNvbiglcCksIGEoJXApIiwgY29uLCAoUnNBbGxvY2F0aW9uKWEpOwotICAgIHJldHVybiAoamludCkgcnNhQWxsb2NhdGlvbkdldFR5cGUoY29uLCAoUnNBbGxvY2F0aW9uKWEpOwotfQotCi1zdGF0aWMgdm9pZAotbkFsbG9jYXRpb25SZXNpemUxRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGppbnQgZGltWCkKLXsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvblJlc2l6ZTFELCBjb24oJXApLCBhbGxvYyglcCksIHNpemVYKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgZGltWCk7Ci0gICAgcnNBbGxvY2F0aW9uUmVzaXplMUQoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBkaW1YKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGludAotbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXRTdHJlYW0oSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IG5hdGl2ZV9hc3NldCkKLXsKLSAgICBBTE9HVigiX19fX19fbkZpbGVBM0QgJXUiLCAodWludDMyX3QpIG5hdGl2ZV9hc3NldCk7Ci0KLSAgICBBc3NldCogYXNzZXQgPSByZWludGVycHJldF9jYXN0PEFzc2V0Kj4obmF0aXZlX2Fzc2V0KTsKLQotICAgIGppbnQgaWQgPSAoamludClyc2FGaWxlQTNEQ3JlYXRlRnJvbU1lbW9yeShjb24sIGFzc2V0LT5nZXRCdWZmZXIoZmFsc2UpLCBhc3NldC0+Z2V0TGVuZ3RoKCkpOwotICAgIHJldHVybiBpZDsKLX0KLQotc3RhdGljIGludAotbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqb2JqZWN0IF9hc3NldE1nciwganN0cmluZyBfcGF0aCkKLXsKLSAgICBBc3NldE1hbmFnZXIqIG1nciA9IGFzc2V0TWFuYWdlckZvckphdmFPYmplY3QoX2VudiwgX2Fzc2V0TWdyKTsKLSAgICBpZiAobWdyID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQXV0b0phdmFTdHJpbmdUb1VURjggc3RyKF9lbnYsIF9wYXRoKTsKLSAgICBBc3NldCogYXNzZXQgPSBtZ3ItPm9wZW4oc3RyLmNfc3RyKCksIEFzc2V0OjpBQ0NFU1NfQlVGRkVSKTsKLSAgICBpZiAoYXNzZXQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBqaW50IGlkID0gKGppbnQpcnNhRmlsZUEzRENyZWF0ZUZyb21Bc3NldChjb24sIGFzc2V0KTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyBpbnQKLW5GaWxlQTNEQ3JlYXRlRnJvbUZpbGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqc3RyaW5nIGZpbGVOYW1lKQotewotICAgIEF1dG9KYXZhU3RyaW5nVG9VVEY4IGZpbGVOYW1lVVRGKF9lbnYsIGZpbGVOYW1lKTsKLSAgICBqaW50IGlkID0gKGppbnQpcnNhRmlsZUEzRENyZWF0ZUZyb21GaWxlKGNvbiwgZmlsZU5hbWVVVEYuY19zdHIoKSk7Ci0KLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyBpbnQKLW5GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBmaWxlQTNEKQotewotICAgIGludDMyX3QgbnVtRW50cmllcyA9IDA7Ci0gICAgcnNhRmlsZUEzREdldE51bUluZGV4RW50cmllcyhjb24sICZudW1FbnRyaWVzLCAoUnNGaWxlKWZpbGVBM0QpOwotICAgIHJldHVybiBudW1FbnRyaWVzOwotfQotCi1zdGF0aWMgdm9pZAotbkZpbGVBM0RHZXRJbmRleEVudHJpZXMoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGZpbGVBM0QsIGppbnQgbnVtRW50cmllcywgamludEFycmF5IF9pZHMsIGpvYmplY3RBcnJheSBfZW50cmllcykKLXsKLSAgICBBTE9HVigiX19fX19fbkZpbGVBM0QgJXUiLCAodWludDMyX3QpIGZpbGVBM0QpOwotICAgIFJzRmlsZUluZGV4RW50cnkgKmZpbGVFbnRyaWVzID0gKFJzRmlsZUluZGV4RW50cnkqKW1hbGxvYygodWludDMyX3QpbnVtRW50cmllcyAqIHNpemVvZihSc0ZpbGVJbmRleEVudHJ5KSk7Ci0KLSAgICByc2FGaWxlQTNER2V0SW5kZXhFbnRyaWVzKGNvbiwgZmlsZUVudHJpZXMsICh1aW50MzJfdCludW1FbnRyaWVzLCAoUnNGaWxlKWZpbGVBM0QpOwotCi0gICAgZm9yKGppbnQgaSA9IDA7IGkgPCBudW1FbnRyaWVzOyBpICsrKSB7Ci0gICAgICAgIF9lbnYtPlNldE9iamVjdEFycmF5RWxlbWVudChfZW50cmllcywgaSwgX2Vudi0+TmV3U3RyaW5nVVRGKGZpbGVFbnRyaWVzW2ldLm9iamVjdE5hbWUpKTsKLSAgICAgICAgX2Vudi0+U2V0SW50QXJyYXlSZWdpb24oX2lkcywgaSwgMSwgKGNvbnN0IGppbnQqKSZmaWxlRW50cmllc1tpXS5jbGFzc0lEKTsKLSAgICB9Ci0KLSAgICBmcmVlKGZpbGVFbnRyaWVzKTsKLX0KLQotc3RhdGljIGludAotbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXgoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGZpbGVBM0QsIGppbnQgaW5kZXgpCi17Ci0gICAgQUxPR1YoIl9fX19fX25GaWxlQTNEICV1IiwgKHVpbnQzMl90KSBmaWxlQTNEKTsKLSAgICBqaW50IGlkID0gKGppbnQpcnNhRmlsZUEzREdldEVudHJ5QnlJbmRleChjb24sICh1aW50MzJfdClpbmRleCwgKFJzRmlsZSlmaWxlQTNEKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBpbnQKLW5Gb250Q3JlYXRlRnJvbUZpbGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLAotICAgICAgICAgICAgICAgICAgICBqc3RyaW5nIGZpbGVOYW1lLCBqZmxvYXQgZm9udFNpemUsIGppbnQgZHBpKQotewotICAgIEF1dG9KYXZhU3RyaW5nVG9VVEY4IGZpbGVOYW1lVVRGKF9lbnYsIGZpbGVOYW1lKTsKLSAgICBqaW50IGlkID0gKGppbnQpcnNGb250Q3JlYXRlRnJvbUZpbGUoY29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZVVURi5jX3N0cigpLCBmaWxlTmFtZVVURi5sZW5ndGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsIGRwaSk7Ci0KLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyBpbnQKLW5Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdHJpbmcgbmFtZSwgamZsb2F0IGZvbnRTaXplLCBqaW50IGRwaSwgamludCBuYXRpdmVfYXNzZXQpCi17Ci0gICAgQXNzZXQqIGFzc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxBc3NldCo+KG5hdGl2ZV9hc3NldCk7Ci0gICAgQXV0b0phdmFTdHJpbmdUb1VURjggbmFtZVVURihfZW52LCBuYW1lKTsKLQotICAgIGppbnQgaWQgPSAoamludClyc0ZvbnRDcmVhdGVGcm9tTWVtb3J5KGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lVVRGLmNfc3RyKCksIG5hbWVVVEYubGVuZ3RoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsIGRwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldC0+Z2V0QnVmZmVyKGZhbHNlKSwgYXNzZXQtPmdldExlbmd0aCgpKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyBpbnQKLW5Gb250Q3JlYXRlRnJvbUFzc2V0KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgam9iamVjdCBfYXNzZXRNZ3IsIGpzdHJpbmcgX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICBqZmxvYXQgZm9udFNpemUsIGppbnQgZHBpKQotewotICAgIEFzc2V0TWFuYWdlciogbWdyID0gYXNzZXRNYW5hZ2VyRm9ySmF2YU9iamVjdChfZW52LCBfYXNzZXRNZ3IpOwotICAgIGlmIChtZ3IgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBBdXRvSmF2YVN0cmluZ1RvVVRGOCBzdHIoX2VudiwgX3BhdGgpOwotICAgIEFzc2V0KiBhc3NldCA9IG1nci0+b3BlbihzdHIuY19zdHIoKSwgQXNzZXQ6OkFDQ0VTU19CVUZGRVIpOwotICAgIGlmIChhc3NldCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGppbnQgaWQgPSAoamludClyc0ZvbnRDcmVhdGVGcm9tTWVtb3J5KGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIuY19zdHIoKSwgc3RyLmxlbmd0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplLCBkcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXQtPmdldEJ1ZmZlcihmYWxzZSksIGFzc2V0LT5nZXRMZW5ndGgoKSk7Ci0gICAgZGVsZXRlIGFzc2V0OwotICAgIHJldHVybiBpZDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIHZvaWQKLW5TY3JpcHRCaW5kQWxsb2NhdGlvbihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2NyaXB0LCBqaW50IGFsbG9jLCBqaW50IHNsb3QpCi17Ci0gICAgTE9HX0FQSSgiblNjcmlwdEJpbmRBbGxvY2F0aW9uLCBjb24oJXApLCBzY3JpcHQoJXApLCBhbGxvYyglcCksIHNsb3QoJWkpIiwgY29uLCAoUnNTY3JpcHQpc2NyaXB0LCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBzbG90KTsKLSAgICByc1NjcmlwdEJpbmRBbGxvY2F0aW9uKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgKFJzQWxsb2NhdGlvbilhbGxvYywgc2xvdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uU2NyaXB0U2V0VmFySShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2NyaXB0LCBqaW50IHNsb3QsIGppbnQgdmFsKQotewotICAgIExPR19BUEkoIm5TY3JpcHRTZXRWYXJJLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSksIHZhbCglaSkiLCBjb24sICh2b2lkICopc2NyaXB0LCBzbG90LCB2YWwpOwotICAgIHJzU2NyaXB0U2V0VmFySShjb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHZhbCk7Ci19Ci0KLXN0YXRpYyBqaW50Ci1uU2NyaXB0R2V0VmFySShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2NyaXB0LCBqaW50IHNsb3QpCi17Ci0gICAgTE9HX0FQSSgiblNjcmlwdEdldFZhckksIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QpOwotICAgIGludCB2YWx1ZSA9IDA7Ci0gICAgcnNTY3JpcHRHZXRWYXJWKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uU2NyaXB0U2V0VmFyT2JqKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzY3JpcHQsIGppbnQgc2xvdCwgamludCB2YWwpCi17Ci0gICAgTE9HX0FQSSgiblNjcmlwdFNldFZhck9iaiwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpLCB2YWwoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCwgdmFsKTsKLSAgICByc1NjcmlwdFNldFZhck9iaihjb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIChSc09iamVjdEJhc2UpdmFsKTsKLX0KLQotc3RhdGljIHZvaWQKLW5TY3JpcHRTZXRWYXJKKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzY3JpcHQsIGppbnQgc2xvdCwgamxvbmcgdmFsKQotewotICAgIExPR19BUEkoIm5TY3JpcHRTZXRWYXJKLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSksIHZhbCglbGxpKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QsIHZhbCk7Ci0gICAgcnNTY3JpcHRTZXRWYXJKKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgdmFsKTsKLX0KLQotc3RhdGljIGpsb25nCi1uU2NyaXB0R2V0VmFySihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2NyaXB0LCBqaW50IHNsb3QpCi17Ci0gICAgTE9HX0FQSSgiblNjcmlwdEdldFZhckosIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QpOwotICAgIGpsb25nIHZhbHVlID0gMDsKLSAgICByc1NjcmlwdEdldFZhclYoY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIHZvaWQKLW5TY3JpcHRTZXRWYXJGKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzY3JpcHQsIGppbnQgc2xvdCwgZmxvYXQgdmFsKQotewotICAgIExPR19BUEkoIm5TY3JpcHRTZXRWYXJGLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSksIHZhbCglZikiLCBjb24sICh2b2lkICopc2NyaXB0LCBzbG90LCB2YWwpOwotICAgIHJzU2NyaXB0U2V0VmFyRihjb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHZhbCk7Ci19Ci0KLXN0YXRpYyBqZmxvYXQKLW5TY3JpcHRHZXRWYXJGKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzY3JpcHQsIGppbnQgc2xvdCkKLXsKLSAgICBMT0dfQVBJKCJuU2NyaXB0R2V0VmFyRiwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7Ci0gICAgamZsb2F0IHZhbHVlID0gMDsKLSAgICByc1NjcmlwdEdldFZhclYoY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIHZvaWQKLW5TY3JpcHRTZXRWYXJEKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzY3JpcHQsIGppbnQgc2xvdCwgZG91YmxlIHZhbCkKLXsKLSAgICBMT0dfQVBJKCJuU2NyaXB0U2V0VmFyRCwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpLCB2YWwoJWxmKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QsIHZhbCk7Ci0gICAgcnNTY3JpcHRTZXRWYXJEKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgdmFsKTsKLX0KLQotc3RhdGljIGpkb3VibGUKLW5TY3JpcHRHZXRWYXJEKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzY3JpcHQsIGppbnQgc2xvdCkKLXsKLSAgICBMT0dfQVBJKCJuU2NyaXB0R2V0VmFyRCwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7Ci0gICAgamRvdWJsZSB2YWx1ZSA9IDA7Ci0gICAgcnNTY3JpcHRHZXRWYXJWKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uU2NyaXB0U2V0VmFyVihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2NyaXB0LCBqaW50IHNsb3QsIGpieXRlQXJyYXkgZGF0YSkKLXsKLSAgICBMT0dfQVBJKCJuU2NyaXB0U2V0VmFyViwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBqYnl0ZSAqcHRyID0gX2Vudi0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAgcnNTY3JpcHRTZXRWYXJWKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgcHRyLCBsZW4pOwotICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uU2NyaXB0R2V0VmFyVihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2NyaXB0LCBqaW50IHNsb3QsIGpieXRlQXJyYXkgZGF0YSkKLXsKLSAgICBMT0dfQVBJKCJuU2NyaXB0U2V0VmFyViwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBqYnl0ZSAqcHRyID0gX2Vudi0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAgcnNTY3JpcHRHZXRWYXJWKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgcHRyLCBsZW4pOwotICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uU2NyaXB0U2V0VmFyVkUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHNjcmlwdCwgamludCBzbG90LCBqYnl0ZUFycmF5IGRhdGEsIGppbnQgZWxlbSwgamludEFycmF5IGRpbXMpCi17Ci0gICAgTE9HX0FQSSgiblNjcmlwdFNldFZhclZFLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSkiLCBjb24sICh2b2lkICopc2NyaXB0LCBzbG90KTsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIGpieXRlICpwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICBqaW50IGRpbXNMZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkaW1zKSAqIHNpemVvZihpbnQpOwotICAgIGppbnQgKmRpbXNQdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGRpbXMsIE5VTEwpOwotICAgIHJzU2NyaXB0U2V0VmFyVkUoY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCBwdHIsIGxlbiwgKFJzRWxlbWVudCllbGVtLAotICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpemVfdCopIGRpbXNQdHIsIGRpbXNMZW4pOwotICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci0gICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoZGltcywgZGltc1B0ciwgSk5JX0FCT1JUKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotblNjcmlwdFNldFRpbWVab25lKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzY3JpcHQsIGpieXRlQXJyYXkgdGltZVpvbmUpCi17Ci0gICAgTE9HX0FQSSgiblNjcmlwdENTZXRUaW1lWm9uZSwgY29uKCVwKSwgcyglcCksIHRpbWVab25lKCVzKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIChjb25zdCBjaGFyICopdGltZVpvbmUpOwotCi0gICAgamludCBsZW5ndGggPSBfZW52LT5HZXRBcnJheUxlbmd0aCh0aW1lWm9uZSk7Ci0gICAgamJ5dGUqIHRpbWVab25lX3B0cjsKLSAgICB0aW1lWm9uZV9wdHIgPSAoamJ5dGUgKikgX2Vudi0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbCh0aW1lWm9uZSwgKGpib29sZWFuICopMCk7Ci0KLSAgICByc1NjcmlwdFNldFRpbWVab25lKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgKGNvbnN0IGNoYXIgKil0aW1lWm9uZV9wdHIsIGxlbmd0aCk7Ci0KLSAgICBpZiAodGltZVpvbmVfcHRyKSB7Ci0gICAgICAgIF9lbnYtPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKHRpbWVab25lLCB0aW1lWm9uZV9wdHIsIDApOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLW5TY3JpcHRJbnZva2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IG9iaiwgamludCBzbG90KQotewotICAgIExPR19BUEkoIm5TY3JpcHRJbnZva2UsIGNvbiglcCksIHNjcmlwdCglcCkiLCBjb24sICh2b2lkICopb2JqKTsKLSAgICByc1NjcmlwdEludm9rZShjb24sIChSc1NjcmlwdClvYmosIHNsb3QpOwotfQotCi1zdGF0aWMgdm9pZAotblNjcmlwdEludm9rZVYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHNjcmlwdCwgamludCBzbG90LCBqYnl0ZUFycmF5IGRhdGEpCi17Ci0gICAgTE9HX0FQSSgiblNjcmlwdEludm9rZVYsIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QpOwotICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7Ci0gICAgamJ5dGUgKnB0ciA9IF9lbnYtPkdldEJ5dGVBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIHJzU2NyaXB0SW52b2tlVihjb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHB0ciwgbGVuKTsKLSAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOwotfQotCi1zdGF0aWMgdm9pZAotblNjcmlwdEZvckVhY2goSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLAotICAgICAgICAgICAgICAgamludCBzY3JpcHQsIGppbnQgc2xvdCwgamludCBhaW4sIGppbnQgYW91dCkKLXsKLSAgICBMT0dfQVBJKCJuU2NyaXB0Rm9yRWFjaCwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7Ci0gICAgcnNTY3JpcHRGb3JFYWNoKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgKFJzQWxsb2NhdGlvbilhaW4sIChSc0FsbG9jYXRpb24pYW91dCwgTlVMTCwgMCwgTlVMTCwgMCk7Ci19Ci1zdGF0aWMgdm9pZAotblNjcmlwdEZvckVhY2hWKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwKLSAgICAgICAgICAgICAgICBqaW50IHNjcmlwdCwgamludCBzbG90LCBqaW50IGFpbiwgamludCBhb3V0LCBqYnl0ZUFycmF5IHBhcmFtcykKLXsKLSAgICBMT0dfQVBJKCJuU2NyaXB0Rm9yRWFjaCwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbXMpOwotICAgIGpieXRlICpwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhwYXJhbXMsIE5VTEwpOwotICAgIHJzU2NyaXB0Rm9yRWFjaChjb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIChSc0FsbG9jYXRpb24pYWluLCAoUnNBbGxvY2F0aW9uKWFvdXQsIHB0ciwgbGVuLCBOVUxMLCAwKTsKLSAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMocGFyYW1zLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uU2NyaXB0Rm9yRWFjaENsaXBwZWQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLAotICAgICAgICAgICAgICAgICAgICAgIGppbnQgc2NyaXB0LCBqaW50IHNsb3QsIGppbnQgYWluLCBqaW50IGFvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgamludCB4c3RhcnQsIGppbnQgeGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICBqaW50IHlzdGFydCwgamludCB5ZW5kLCBqaW50IHpzdGFydCwgamludCB6ZW5kKQotewotICAgIExPR19BUEkoIm5TY3JpcHRGb3JFYWNoQ2xpcHBlZCwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7Ci0gICAgUnNTY3JpcHRDYWxsIHNjOwotICAgIHNjLnhTdGFydCA9IHhzdGFydDsKLSAgICBzYy54RW5kID0geGVuZDsKLSAgICBzYy55U3RhcnQgPSB5c3RhcnQ7Ci0gICAgc2MueUVuZCA9IHllbmQ7Ci0gICAgc2MuelN0YXJ0ID0genN0YXJ0OwotICAgIHNjLnpFbmQgPSB6ZW5kOwotICAgIHNjLnN0cmF0ZWd5ID0gUlNfRk9SX0VBQ0hfU1RSQVRFR1lfRE9OVF9DQVJFOwotICAgIHNjLmFycmF5U3RhcnQgPSAwOwotICAgIHNjLmFycmF5RW5kID0gMDsKLSAgICByc1NjcmlwdEZvckVhY2goY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAoUnNBbGxvY2F0aW9uKWFpbiwgKFJzQWxsb2NhdGlvbilhb3V0LCBOVUxMLCAwLCAmc2MsIHNpemVvZihzYykpOwotfQotCi1zdGF0aWMgdm9pZAotblNjcmlwdEZvckVhY2hDbGlwcGVkVihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sCi0gICAgICAgICAgICAgICAgICAgICAgIGppbnQgc2NyaXB0LCBqaW50IHNsb3QsIGppbnQgYWluLCBqaW50IGFvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgIGpieXRlQXJyYXkgcGFyYW1zLCBqaW50IHhzdGFydCwgamludCB4ZW5kLAotICAgICAgICAgICAgICAgICAgICAgICBqaW50IHlzdGFydCwgamludCB5ZW5kLCBqaW50IHpzdGFydCwgamludCB6ZW5kKQotewotICAgIExPR19BUEkoIm5TY3JpcHRGb3JFYWNoQ2xpcHBlZCwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbXMpOwotICAgIGpieXRlICpwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhwYXJhbXMsIE5VTEwpOwotICAgIFJzU2NyaXB0Q2FsbCBzYzsKLSAgICBzYy54U3RhcnQgPSB4c3RhcnQ7Ci0gICAgc2MueEVuZCA9IHhlbmQ7Ci0gICAgc2MueVN0YXJ0ID0geXN0YXJ0OwotICAgIHNjLnlFbmQgPSB5ZW5kOwotICAgIHNjLnpTdGFydCA9IHpzdGFydDsKLSAgICBzYy56RW5kID0gemVuZDsKLSAgICBzYy5zdHJhdGVneSA9IFJTX0ZPUl9FQUNIX1NUUkFURUdZX0RPTlRfQ0FSRTsKLSAgICBzYy5hcnJheVN0YXJ0ID0gMDsKLSAgICBzYy5hcnJheUVuZCA9IDA7Ci0gICAgcnNTY3JpcHRGb3JFYWNoKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgKFJzQWxsb2NhdGlvbilhaW4sIChSc0FsbG9jYXRpb24pYW91dCwgcHRyLCBsZW4sICZzYywgc2l6ZW9mKHNjKSk7Ci0gICAgX2Vudi0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKHBhcmFtcywgcHRyLCBKTklfQUJPUlQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgamludAotblNjcmlwdENDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLAotICAgICAgICAgICAgICAganN0cmluZyByZXNOYW1lLCBqc3RyaW5nIGNhY2hlRGlyLAotICAgICAgICAgICAgICAgamJ5dGVBcnJheSBzY3JpcHRSZWYsIGppbnQgbGVuZ3RoKQotewotICAgIExPR19BUEkoIm5TY3JpcHRDQ3JlYXRlLCBjb24oJXApIiwgY29uKTsKLQotICAgIEF1dG9KYXZhU3RyaW5nVG9VVEY4IHJlc05hbWVVVEYoX2VudiwgcmVzTmFtZSk7Ci0gICAgQXV0b0phdmFTdHJpbmdUb1VURjggY2FjaGVEaXJVVEYoX2VudiwgY2FjaGVEaXIpOwotICAgIGppbnQgcmV0ID0gMDsKLSAgICBqYnl0ZSogc2NyaXB0X3B0ciA9IE5VTEw7Ci0gICAgamludCBfZXhjZXB0aW9uID0gMDsKLSAgICBqaW50IHJlbWFpbmluZzsKLSAgICBpZiAoIXNjcmlwdFJlZikgewotICAgICAgICBfZXhjZXB0aW9uID0gMTsKLSAgICAgICAgLy9qbmlUaHJvd0V4Y2VwdGlvbihfZW52LCAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIsICJzY3JpcHQgPT0gbnVsbCIpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotICAgIGlmIChsZW5ndGggPCAwKSB7Ci0gICAgICAgIF9leGNlcHRpb24gPSAxOwotICAgICAgICAvL2puaVRocm93RXhjZXB0aW9uKF9lbnYsICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIiwgImxlbmd0aCA8IDAiKTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLSAgICByZW1haW5pbmcgPSBfZW52LT5HZXRBcnJheUxlbmd0aChzY3JpcHRSZWYpOwotICAgIGlmIChyZW1haW5pbmcgPCBsZW5ndGgpIHsKLSAgICAgICAgX2V4Y2VwdGlvbiA9IDE7Ci0gICAgICAgIC8vam5pVGhyb3dFeGNlcHRpb24oX2VudiwgImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLAotICAgICAgICAvLyAgICAgICAgImxlbmd0aCA+IHNjcmlwdC5sZW5ndGggLSBvZmZzZXQiKTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLSAgICBzY3JpcHRfcHRyID0gKGpieXRlICopCi0gICAgICAgIF9lbnYtPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoc2NyaXB0UmVmLCAoamJvb2xlYW4gKikwKTsKLQotICAgIC8vcnNTY3JpcHRDU2V0VGV4dChjb24sIChjb25zdCBjaGFyICopc2NyaXB0X3B0ciwgbGVuZ3RoKTsKLQotICAgIHJldCA9IChqaW50KXJzU2NyaXB0Q0NyZWF0ZShjb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc05hbWVVVEYuY19zdHIoKSwgcmVzTmFtZVVURi5sZW5ndGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVEaXJVVEYuY19zdHIoKSwgY2FjaGVEaXJVVEYubGVuZ3RoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopc2NyaXB0X3B0ciwgbGVuZ3RoKTsKLQotZXhpdDoKLSAgICBpZiAoc2NyaXB0X3B0cikgewotICAgICAgICBfZW52LT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChzY3JpcHRSZWYsIHNjcmlwdF9wdHIsCi0gICAgICAgICAgICAgICAgX2V4Y2VwdGlvbiA/IEpOSV9BQk9SVDogMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGppbnQKLW5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGlkLCBqaW50IGVpZCkKLXsKLSAgICBMT0dfQVBJKCJuU2NyaXB0SW50cmluc2ljQ3JlYXRlLCBjb24oJXApIGlkKCVpKSBlbGVtZW50KCVwKSIsIGNvbiwgaWQsICh2b2lkICopZWlkKTsKLSAgICByZXR1cm4gKGppbnQpcnNTY3JpcHRJbnRyaW5zaWNDcmVhdGUoY29uLCBpZCwgKFJzRWxlbWVudCllaWQpOwotfQotCi1zdGF0aWMgamludAotblNjcmlwdEtlcm5lbElEQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzaWQsIGppbnQgc2xvdCwgamludCBzaWcpCi17Ci0gICAgTE9HX0FQSSgiblNjcmlwdEtlcm5lbElEQ3JlYXRlLCBjb24oJXApIHNjcmlwdCglcCksIHNsb3QoJWkpLCBzaWcoJWkpIiwgY29uLCAodm9pZCAqKXNpZCwgc2xvdCwgc2lnKTsKLSAgICByZXR1cm4gKGppbnQpcnNTY3JpcHRLZXJuZWxJRENyZWF0ZShjb24sIChSc1NjcmlwdClzaWQsIHNsb3QsIHNpZyk7Ci19Ci0KLXN0YXRpYyBqaW50Ci1uU2NyaXB0RmllbGRJRENyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2lkLCBqaW50IHNsb3QpCi17Ci0gICAgTE9HX0FQSSgiblNjcmlwdEZpZWxkSURDcmVhdGUsIGNvbiglcCkgc2NyaXB0KCVwKSwgc2xvdCglaSkiLCBjb24sICh2b2lkICopc2lkLCBzbG90KTsKLSAgICByZXR1cm4gKGppbnQpcnNTY3JpcHRGaWVsZElEQ3JlYXRlKGNvbiwgKFJzU2NyaXB0KXNpZCwgc2xvdCk7Ci19Ci0KLXN0YXRpYyBqaW50Ci1uU2NyaXB0R3JvdXBDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50QXJyYXkgX2tlcm5lbHMsIGppbnRBcnJheSBfc3JjLAotICAgIGppbnRBcnJheSBfZHN0aywgamludEFycmF5IF9kc3RmLCBqaW50QXJyYXkgX3R5cGVzKQotewotICAgIExPR19BUEkoIm5TY3JpcHRHcm91cENyZWF0ZSwgY29uKCVwKSIsIGNvbik7Ci0KLSAgICBqaW50IGtlcm5lbHNMZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChfa2VybmVscykgKiBzaXplb2YoaW50KTsKLSAgICBqaW50ICprZXJuZWxzUHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfa2VybmVscywgTlVMTCk7Ci0gICAgamludCBzcmNMZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChfc3JjKSAqIHNpemVvZihpbnQpOwotICAgIGppbnQgKnNyY1B0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX3NyYywgTlVMTCk7Ci0gICAgamludCBkc3RrTGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoX2RzdGspICogc2l6ZW9mKGludCk7Ci0gICAgamludCAqZHN0a1B0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX2RzdGssIE5VTEwpOwotICAgIGppbnQgZHN0ZkxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKF9kc3RmKSAqIHNpemVvZihpbnQpOwotICAgIGppbnQgKmRzdGZQdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9kc3RmLCBOVUxMKTsKLSAgICBqaW50IHR5cGVzTGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoX3R5cGVzKSAqIHNpemVvZihpbnQpOwotICAgIGppbnQgKnR5cGVzUHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfdHlwZXMsIE5VTEwpOwotCi0gICAgaW50IGlkID0gKGludClyc1NjcmlwdEdyb3VwQ3JlYXRlKGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNTY3JpcHRLZXJuZWxJRCAqKWtlcm5lbHNQdHIsIGtlcm5lbHNMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzU2NyaXB0S2VybmVsSUQgKilzcmNQdHIsIHNyY0xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNTY3JpcHRLZXJuZWxJRCAqKWRzdGtQdHIsIGRzdGtMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzU2NyaXB0RmllbGRJRCAqKWRzdGZQdHIsIGRzdGZMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzVHlwZSAqKXR5cGVzUHRyLCB0eXBlc0xlbik7Ci0KLSAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfa2VybmVscywga2VybmVsc1B0ciwgMCk7Ci0gICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX3NyYywgc3JjUHRyLCAwKTsKLSAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfZHN0aywgZHN0a1B0ciwgMCk7Ci0gICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX2RzdGYsIGRzdGZQdHIsIDApOwotICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF90eXBlcywgdHlwZXNQdHIsIDApOwotICAgIHJldHVybiBpZDsKLX0KLQotc3RhdGljIHZvaWQKLW5TY3JpcHRHcm91cFNldElucHV0KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBnaWQsIGppbnQga2lkLCBqaW50IGFsbG9jKQotewotICAgIExPR19BUEkoIm5TY3JpcHRHcm91cFNldElucHV0LCBjb24oJXApIGdyb3VwKCVwKSwga2VybmVsSWQoJXApLCBhbGxvYyglcCkiLCBjb24sCi0gICAgICAgICh2b2lkICopZ2lkLCAodm9pZCAqKWtpZCwgKHZvaWQgKilhbGxvYyk7Ci0gICAgcnNTY3JpcHRHcm91cFNldElucHV0KGNvbiwgKFJzU2NyaXB0R3JvdXApZ2lkLCAoUnNTY3JpcHRLZXJuZWxJRClraWQsIChSc0FsbG9jYXRpb24pYWxsb2MpOwotfQotCi1zdGF0aWMgdm9pZAotblNjcmlwdEdyb3VwU2V0T3V0cHV0KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBnaWQsIGppbnQga2lkLCBqaW50IGFsbG9jKQotewotICAgIExPR19BUEkoIm5TY3JpcHRHcm91cFNldE91dHB1dCwgY29uKCVwKSBncm91cCglcCksIGtlcm5lbElkKCVwKSwgYWxsb2MoJXApIiwgY29uLAotICAgICAgICAodm9pZCAqKWdpZCwgKHZvaWQgKilraWQsICh2b2lkICopYWxsb2MpOwotICAgIHJzU2NyaXB0R3JvdXBTZXRPdXRwdXQoY29uLCAoUnNTY3JpcHRHcm91cClnaWQsIChSc1NjcmlwdEtlcm5lbElEKWtpZCwgKFJzQWxsb2NhdGlvbilhbGxvYyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uU2NyaXB0R3JvdXBFeGVjdXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBnaWQpCi17Ci0gICAgTE9HX0FQSSgiblNjcmlwdEdyb3VwU2V0T3V0cHV0LCBjb24oJXApIGdyb3VwKCVwKSIsIGNvbiwgKHZvaWQgKilnaWQpOwotICAgIHJzU2NyaXB0R3JvdXBFeGVjdXRlKGNvbiwgKFJzU2NyaXB0R3JvdXApZ2lkKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBqaW50Ci1uUHJvZ3JhbVN0b3JlQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwKLSAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gY29sb3JNYXNrUiwgamJvb2xlYW4gY29sb3JNYXNrRywgamJvb2xlYW4gY29sb3JNYXNrQiwgamJvb2xlYW4gY29sb3JNYXNrQSwKLSAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gZGVwdGhNYXNrLCBqYm9vbGVhbiBkaXRoZXJFbmFibGUsCi0gICAgICAgICAgICAgICAgICAgIGppbnQgc3JjRnVuYywgamludCBkZXN0RnVuYywKLSAgICAgICAgICAgICAgICAgICAgamludCBkZXB0aEZ1bmMpCi17Ci0gICAgTE9HX0FQSSgiblByb2dyYW1TdG9yZUNyZWF0ZSwgY29uKCVwKSIsIGNvbik7Ci0gICAgcmV0dXJuIChqaW50KXJzUHJvZ3JhbVN0b3JlQ3JlYXRlKGNvbiwgY29sb3JNYXNrUiwgY29sb3JNYXNrRywgY29sb3JNYXNrQiwgY29sb3JNYXNrQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhNYXNrLCBkaXRoZXJFbmFibGUsIChSc0JsZW5kU3JjRnVuYylzcmNGdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNCbGVuZERzdEZ1bmMpZGVzdEZ1bmMsIChSc0RlcHRoRnVuYylkZXB0aEZ1bmMpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIHZvaWQKLW5Qcm9ncmFtQmluZENvbnN0YW50cyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgdnB2LCBqaW50IHNsb3QsIGppbnQgYSkKLXsKLSAgICBMT0dfQVBJKCJuUHJvZ3JhbUJpbmRDb25zdGFudHMsIGNvbiglcCksIHZwZiglcCksIHNsb2F0KCVpKSwgYSglcCkiLCBjb24sIChSc1Byb2dyYW1WZXJ0ZXgpdnB2LCBzbG90LCAoUnNBbGxvY2F0aW9uKWEpOwotICAgIHJzUHJvZ3JhbUJpbmRDb25zdGFudHMoY29uLCAoUnNQcm9ncmFtKXZwdiwgc2xvdCwgKFJzQWxsb2NhdGlvbilhKTsKLX0KLQotc3RhdGljIHZvaWQKLW5Qcm9ncmFtQmluZFRleHR1cmUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHZwZiwgamludCBzbG90LCBqaW50IGEpCi17Ci0gICAgTE9HX0FQSSgiblByb2dyYW1CaW5kVGV4dHVyZSwgY29uKCVwKSwgdnBmKCVwKSwgc2xvdCglaSksIGEoJXApIiwgY29uLCAoUnNQcm9ncmFtRnJhZ21lbnQpdnBmLCBzbG90LCAoUnNBbGxvY2F0aW9uKWEpOwotICAgIHJzUHJvZ3JhbUJpbmRUZXh0dXJlKGNvbiwgKFJzUHJvZ3JhbUZyYWdtZW50KXZwZiwgc2xvdCwgKFJzQWxsb2NhdGlvbilhKTsKLX0KLQotc3RhdGljIHZvaWQKLW5Qcm9ncmFtQmluZFNhbXBsZXIoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHZwZiwgamludCBzbG90LCBqaW50IGEpCi17Ci0gICAgTE9HX0FQSSgiblByb2dyYW1CaW5kU2FtcGxlciwgY29uKCVwKSwgdnBmKCVwKSwgc2xvdCglaSksIGEoJXApIiwgY29uLCAoUnNQcm9ncmFtRnJhZ21lbnQpdnBmLCBzbG90LCAoUnNTYW1wbGVyKWEpOwotICAgIHJzUHJvZ3JhbUJpbmRTYW1wbGVyKGNvbiwgKFJzUHJvZ3JhbUZyYWdtZW50KXZwZiwgc2xvdCwgKFJzU2FtcGxlcilhKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBqaW50Ci1uUHJvZ3JhbUZyYWdtZW50Q3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwganN0cmluZyBzaGFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3RBcnJheSB0ZXhOYW1lcywgamludEFycmF5IHBhcmFtcykKLXsKLSAgICBBdXRvSmF2YVN0cmluZ1RvVVRGOCBzaGFkZXJVVEYoX2Vudiwgc2hhZGVyKTsKLSAgICBqaW50ICpwYXJhbVB0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMocGFyYW1zLCBOVUxMKTsKLSAgICBqaW50IHBhcmFtTGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgocGFyYW1zKTsKLQotICAgIGludCB0ZXhDb3VudCA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHRleE5hbWVzKTsKLSAgICBBdXRvSmF2YVN0cmluZ0FycmF5VG9VVEY4IG5hbWVzKF9lbnYsIHRleE5hbWVzLCB0ZXhDb3VudCk7Ci0gICAgY29uc3QgY2hhciAqKiBuYW1lQXJyYXkgPSBuYW1lcy5jX3N0cigpOwotICAgIHNpemVfdCogc2l6ZUFycmF5ID0gbmFtZXMuY19zdHJfbGVuKCk7Ci0KLSAgICBMT0dfQVBJKCJuUHJvZ3JhbUZyYWdtZW50Q3JlYXRlLCBjb24oJXApLCBwYXJhbUxlbiglaSkiLCBjb24sIHBhcmFtTGVuKTsKLQotICAgIGppbnQgcmV0ID0gKGppbnQpcnNQcm9ncmFtRnJhZ21lbnRDcmVhdGUoY29uLCBzaGFkZXJVVEYuY19zdHIoKSwgc2hhZGVyVVRGLmxlbmd0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZUFycmF5LCB0ZXhDb3VudCwgc2l6ZUFycmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopcGFyYW1QdHIsIHBhcmFtTGVuKTsKLQotICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKHBhcmFtcywgcGFyYW1QdHIsIEpOSV9BQk9SVCk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGppbnQKLW5Qcm9ncmFtVmVydGV4Q3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwganN0cmluZyBzaGFkZXIsCi0gICAgICAgICAgICAgICAgICAgICBqb2JqZWN0QXJyYXkgdGV4TmFtZXMsIGppbnRBcnJheSBwYXJhbXMpCi17Ci0gICAgQXV0b0phdmFTdHJpbmdUb1VURjggc2hhZGVyVVRGKF9lbnYsIHNoYWRlcik7Ci0gICAgamludCAqcGFyYW1QdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKHBhcmFtcywgTlVMTCk7Ci0gICAgamludCBwYXJhbUxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHBhcmFtcyk7Ci0KLSAgICBMT0dfQVBJKCJuUHJvZ3JhbVZlcnRleENyZWF0ZSwgY29uKCVwKSwgcGFyYW1MZW4oJWkpIiwgY29uLCBwYXJhbUxlbik7Ci0KLSAgICBpbnQgdGV4Q291bnQgPSBfZW52LT5HZXRBcnJheUxlbmd0aCh0ZXhOYW1lcyk7Ci0gICAgQXV0b0phdmFTdHJpbmdBcnJheVRvVVRGOCBuYW1lcyhfZW52LCB0ZXhOYW1lcywgdGV4Q291bnQpOwotICAgIGNvbnN0IGNoYXIgKiogbmFtZUFycmF5ID0gbmFtZXMuY19zdHIoKTsKLSAgICBzaXplX3QqIHNpemVBcnJheSA9IG5hbWVzLmNfc3RyX2xlbigpOwotCi0gICAgamludCByZXQgPSAoamludClyc1Byb2dyYW1WZXJ0ZXhDcmVhdGUoY29uLCBzaGFkZXJVVEYuY19zdHIoKSwgc2hhZGVyVVRGLmxlbmd0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVBcnJheSwgdGV4Q291bnQsIHNpemVBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilwYXJhbVB0ciwgcGFyYW1MZW4pOwotCi0gICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMocGFyYW1zLCBwYXJhbVB0ciwgSk5JX0FCT1JUKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGppbnQKLW5Qcm9ncmFtUmFzdGVyQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamJvb2xlYW4gcG9pbnRTcHJpdGUsIGppbnQgY3VsbCkKLXsKLSAgICBMT0dfQVBJKCJuUHJvZ3JhbVJhc3RlckNyZWF0ZSwgY29uKCVwKSwgcG9pbnRTcHJpdGUoJWkpLCBjdWxsKCVpKSIsIGNvbiwgcG9pbnRTcHJpdGUsIGN1bGwpOwotICAgIHJldHVybiAoamludClyc1Byb2dyYW1SYXN0ZXJDcmVhdGUoY29uLCBwb2ludFNwcml0ZSwgKFJzQ3VsbE1vZGUpY3VsbCk7Ci19Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyB2b2lkCi1uQ29udGV4dEJpbmRSb290U2NyaXB0KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzY3JpcHQpCi17Ci0gICAgTE9HX0FQSSgibkNvbnRleHRCaW5kUm9vdFNjcmlwdCwgY29uKCVwKSwgc2NyaXB0KCVwKSIsIGNvbiwgKFJzU2NyaXB0KXNjcmlwdCk7Ci0gICAgcnNDb250ZXh0QmluZFJvb3RTY3JpcHQoY29uLCAoUnNTY3JpcHQpc2NyaXB0KTsKLX0KLQotc3RhdGljIHZvaWQKLW5Db250ZXh0QmluZFByb2dyYW1TdG9yZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgcGZzKQotewotICAgIExPR19BUEkoIm5Db250ZXh0QmluZFByb2dyYW1TdG9yZSwgY29uKCVwKSwgcGZzKCVwKSIsIGNvbiwgKFJzUHJvZ3JhbVN0b3JlKXBmcyk7Ci0gICAgcnNDb250ZXh0QmluZFByb2dyYW1TdG9yZShjb24sIChSc1Byb2dyYW1TdG9yZSlwZnMpOwotfQotCi1zdGF0aWMgdm9pZAotbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBwZikKLXsKLSAgICBMT0dfQVBJKCJuQ29udGV4dEJpbmRQcm9ncmFtRnJhZ21lbnQsIGNvbiglcCksIHBmKCVwKSIsIGNvbiwgKFJzUHJvZ3JhbUZyYWdtZW50KXBmKTsKLSAgICByc0NvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50KGNvbiwgKFJzUHJvZ3JhbUZyYWdtZW50KXBmKTsKLX0KLQotc3RhdGljIHZvaWQKLW5Db250ZXh0QmluZFByb2dyYW1WZXJ0ZXgoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHBmKQotewotICAgIExPR19BUEkoIm5Db250ZXh0QmluZFByb2dyYW1WZXJ0ZXgsIGNvbiglcCksIHBmKCVwKSIsIGNvbiwgKFJzUHJvZ3JhbVZlcnRleClwZik7Ci0gICAgcnNDb250ZXh0QmluZFByb2dyYW1WZXJ0ZXgoY29uLCAoUnNQcm9ncmFtVmVydGV4KXBmKTsKLX0KLQotc3RhdGljIHZvaWQKLW5Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHBmKQotewotICAgIExPR19BUEkoIm5Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIsIGNvbiglcCksIHBmKCVwKSIsIGNvbiwgKFJzUHJvZ3JhbVJhc3RlcilwZik7Ci0gICAgcnNDb250ZXh0QmluZFByb2dyYW1SYXN0ZXIoY29uLCAoUnNQcm9ncmFtUmFzdGVyKXBmKTsKLX0KLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGppbnQKLW5TYW1wbGVyQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBtYWdGaWx0ZXIsIGppbnQgbWluRmlsdGVyLAotICAgICAgICAgICAgICAgamludCB3cmFwUywgamludCB3cmFwVCwgamludCB3cmFwUiwgamZsb2F0IGFuaXNvKQotewotICAgIExPR19BUEkoIm5TYW1wbGVyQ3JlYXRlLCBjb24oJXApIiwgY29uKTsKLSAgICByZXR1cm4gKGppbnQpcnNTYW1wbGVyQ3JlYXRlKGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc1NhbXBsZXJWYWx1ZSltYWdGaWx0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNTYW1wbGVyVmFsdWUpbWluRmlsdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzU2FtcGxlclZhbHVlKXdyYXBTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzU2FtcGxlclZhbHVlKXdyYXBULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzU2FtcGxlclZhbHVlKXdyYXBSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pc28pOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy9uYXRpdmUgaW50ICByc25QYXRoQ3JlYXRlKGludCBjb24sIGludCBwcmltLCBib29sZWFuIGlzU3RhdGljLCBpbnQgdnR4LCBpbnQgbG9vcCwgZmxvYXQgcSk7Ci1zdGF0aWMgamludAotblBhdGhDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHByaW0sIGpib29sZWFuIGlzU3RhdGljLCBqaW50IF92dHgsIGppbnQgX2xvb3AsIGpmbG9hdCBxKSB7Ci0gICAgTE9HX0FQSSgiblBhdGhDcmVhdGUsIGNvbiglcCkiLCBjb24pOwotCi0gICAgaW50IGlkID0gKGludClyc1BhdGhDcmVhdGUoY29uLCAoUnNQYXRoUHJpbWl0aXZlKXByaW0sIGlzU3RhdGljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc0FsbG9jYXRpb24pX3Z0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNBbGxvY2F0aW9uKV9sb29wLCBxKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyBqaW50Ci1uTWVzaENyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnRBcnJheSBfdnR4LCBqaW50QXJyYXkgX2lkeCwgamludEFycmF5IF9wcmltKQotewotICAgIExPR19BUEkoIm5NZXNoQ3JlYXRlLCBjb24oJXApIiwgY29uKTsKLQotICAgIGppbnQgdnR4TGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoX3Z0eCk7Ci0gICAgamludCAqdnR4UHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfdnR4LCBOVUxMKTsKLSAgICBqaW50IGlkeExlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKF9pZHgpOwotICAgIGppbnQgKmlkeFB0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX2lkeCwgTlVMTCk7Ci0gICAgamludCBwcmltTGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoX3ByaW0pOwotICAgIGppbnQgKnByaW1QdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9wcmltLCBOVUxMKTsKLQotICAgIGludCBpZCA9IChpbnQpcnNNZXNoQ3JlYXRlKGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNBbGxvY2F0aW9uICopdnR4UHRyLCB2dHhMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzQWxsb2NhdGlvbiAqKWlkeFB0ciwgaWR4TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXByaW1QdHIsIHByaW1MZW4pOwotCi0gICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX3Z0eCwgdnR4UHRyLCAwKTsKLSAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfaWR4LCBpZHhQdHIsIDApOwotICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF9wcmltLCBwcmltUHRyLCAwKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLXN0YXRpYyBqaW50Ci1uTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBtZXNoKQotewotICAgIExPR19BUEkoIm5NZXNoR2V0VmVydGV4QnVmZmVyQ291bnQsIGNvbiglcCksIE1lc2goJXApIiwgY29uLCAoUnNNZXNoKW1lc2gpOwotICAgIGppbnQgdnR4Q291bnQgPSAwOwotICAgIHJzYU1lc2hHZXRWZXJ0ZXhCdWZmZXJDb3VudChjb24sIChSc01lc2gpbWVzaCwgJnZ0eENvdW50KTsKLSAgICByZXR1cm4gdnR4Q291bnQ7Ci19Ci0KLXN0YXRpYyBqaW50Ci1uTWVzaEdldEluZGV4Q291bnQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IG1lc2gpCi17Ci0gICAgTE9HX0FQSSgibk1lc2hHZXRJbmRleENvdW50LCBjb24oJXApLCBNZXNoKCVwKSIsIGNvbiwgKFJzTWVzaCltZXNoKTsKLSAgICBqaW50IGlkeENvdW50ID0gMDsKLSAgICByc2FNZXNoR2V0SW5kZXhDb3VudChjb24sIChSc01lc2gpbWVzaCwgJmlkeENvdW50KTsKLSAgICByZXR1cm4gaWR4Q291bnQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uTWVzaEdldFZlcnRpY2VzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBtZXNoLCBqaW50QXJyYXkgX2lkcywgaW50IG51bVZ0eElEcykKLXsKLSAgICBMT0dfQVBJKCJuTWVzaEdldFZlcnRpY2VzLCBjb24oJXApLCBNZXNoKCVwKSIsIGNvbiwgKFJzTWVzaCltZXNoKTsKLQotICAgIFJzQWxsb2NhdGlvbiAqYWxsb2NzID0gKFJzQWxsb2NhdGlvbiopbWFsbG9jKCh1aW50MzJfdCludW1WdHhJRHMgKiBzaXplb2YoUnNBbGxvY2F0aW9uKSk7Ci0gICAgcnNhTWVzaEdldFZlcnRpY2VzKGNvbiwgKFJzTWVzaCltZXNoLCBhbGxvY3MsICh1aW50MzJfdCludW1WdHhJRHMpOwotCi0gICAgZm9yKGppbnQgaSA9IDA7IGkgPCBudW1WdHhJRHM7IGkgKyspIHsKLSAgICAgICAgX2Vudi0+U2V0SW50QXJyYXlSZWdpb24oX2lkcywgaSwgMSwgKGNvbnN0IGppbnQqKSZhbGxvY3NbaV0pOwotICAgIH0KLQotICAgIGZyZWUoYWxsb2NzKTsKLX0KLQotc3RhdGljIHZvaWQKLW5NZXNoR2V0SW5kaWNlcyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgbWVzaCwgamludEFycmF5IF9pZHhJZHMsIGppbnRBcnJheSBfcHJpbWl0aXZlcywgaW50IG51bUluZGljZXMpCi17Ci0gICAgTE9HX0FQSSgibk1lc2hHZXRWZXJ0aWNlcywgY29uKCVwKSwgTWVzaCglcCkiLCBjb24sIChSc01lc2gpbWVzaCk7Ci0KLSAgICBSc0FsbG9jYXRpb24gKmFsbG9jcyA9IChSc0FsbG9jYXRpb24qKW1hbGxvYygodWludDMyX3QpbnVtSW5kaWNlcyAqIHNpemVvZihSc0FsbG9jYXRpb24pKTsKLSAgICB1aW50MzJfdCAqcHJpbXM9ICh1aW50MzJfdCopbWFsbG9jKCh1aW50MzJfdCludW1JbmRpY2VzICogc2l6ZW9mKHVpbnQzMl90KSk7Ci0KLSAgICByc2FNZXNoR2V0SW5kaWNlcyhjb24sIChSc01lc2gpbWVzaCwgYWxsb2NzLCBwcmltcywgKHVpbnQzMl90KW51bUluZGljZXMpOwotCi0gICAgZm9yKGppbnQgaSA9IDA7IGkgPCBudW1JbmRpY2VzOyBpICsrKSB7Ci0gICAgICAgIF9lbnYtPlNldEludEFycmF5UmVnaW9uKF9pZHhJZHMsIGksIDEsIChjb25zdCBqaW50KikmYWxsb2NzW2ldKTsKLSAgICAgICAgX2Vudi0+U2V0SW50QXJyYXlSZWdpb24oX3ByaW1pdGl2ZXMsIGksIDEsIChjb25zdCBqaW50KikmcHJpbXNbaV0pOwotICAgIH0KLQotICAgIGZyZWUoYWxsb2NzKTsKLSAgICBmcmVlKHByaW1zKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotc3RhdGljIGNvbnN0IGNoYXIgKmNsYXNzUGF0aE5hbWUgPSAiYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0IjsKLQotc3RhdGljIEpOSU5hdGl2ZU1ldGhvZCBtZXRob2RzW10gPSB7Ci17Il9uSW5pdCIsICAgICAgICAgICAgICAgICAgICAgICAgICIoKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopX25Jbml0IH0sCi0KLXsibkRldmljZUNyZWF0ZSIsICAgICAgICAgICAgICAgICAgIigpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluRGV2aWNlQ3JlYXRlIH0sCi17Im5EZXZpY2VEZXN0cm95IiwgICAgICAgICAgICAgICAgICIoSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkRldmljZURlc3Ryb3kgfSwKLXsibkRldmljZVNldENvbmZpZyIsICAgICAgICAgICAgICAgIihJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluRGV2aWNlU2V0Q29uZmlnIH0sCi17Im5Db250ZXh0R2V0VXNlck1lc3NhZ2UiLCAgICAgICAgICIoSVtJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRHZXRVc2VyTWVzc2FnZSB9LAoteyJuQ29udGV4dEdldEVycm9yTWVzc2FnZSIsICAgICAgICAiKEkpTGphdmEvbGFuZy9TdHJpbmc7IiwgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0R2V0RXJyb3JNZXNzYWdlIH0sCi17Im5Db250ZXh0UGVla01lc3NhZ2UiLCAgICAgICAgICAgICIoSVtJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRQZWVrTWVzc2FnZSB9LAotCi17Im5Db250ZXh0SW5pdFRvQ2xpZW50IiwgICAgICAgICAgICIoSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRJbml0VG9DbGllbnQgfSwKLXsibkNvbnRleHREZWluaXRUb0NsaWVudCIsICAgICAgICAgIihJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dERlaW5pdFRvQ2xpZW50IH0sCi0KLQotLy8gQWxsIG1ldGhvZHMgYmVsb3cgYXJlIHRocmVhZCBwcm90ZWN0ZWQgaW4gamF2YS4KLXsicnNuQ29udGV4dENyZWF0ZSIsICAgICAgICAgICAgICAgICAiKElJSUkpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dENyZWF0ZSB9LAoteyJyc25Db250ZXh0Q3JlYXRlR0wiLCAgICAgICAgICAgICAgICIoSUlJSUlJSUlJSUlJSUZJKUkiLCAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0Q3JlYXRlR0wgfSwKLXsicnNuQ29udGV4dEZpbmlzaCIsICAgICAgICAgICAgICAgICAiKEkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dEZpbmlzaCB9LAoteyJyc25Db250ZXh0U2V0UHJpb3JpdHkiLCAgICAgICAgICAgICIoSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0U2V0UHJpb3JpdHkgfSwKLXsicnNuQ29udGV4dFNldFN1cmZhY2UiLCAgICAgICAgICAgICAiKElJSUxhbmRyb2lkL3ZpZXcvU3VyZmFjZTspViIsICAgICAgICAgICh2b2lkKiluQ29udGV4dFNldFN1cmZhY2UgfSwKLXsicnNuQ29udGV4dERlc3Ryb3kiLCAgICAgICAgICAgICAgICAiKEkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dERlc3Ryb3kgfSwKLXsicnNuQ29udGV4dER1bXAiLCAgICAgICAgICAgICAgICAgICAiKElJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dER1bXAgfSwKLXsicnNuQ29udGV4dFBhdXNlIiwgICAgICAgICAgICAgICAgICAiKEkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dFBhdXNlIH0sCi17InJzbkNvbnRleHRSZXN1bWUiLCAgICAgICAgICAgICAgICAgIihJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRSZXN1bWUgfSwKLXsicnNuQ29udGV4dFNlbmRNZXNzYWdlIiwgICAgICAgICAgICAiKElJW0kpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dFNlbmRNZXNzYWdlIH0sCi17InJzbkFzc2lnbk5hbWUiLCAgICAgICAgICAgICAgICAgICAgIihJSVtCKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFzc2lnbk5hbWUgfSwKLXsicnNuR2V0TmFtZSIsICAgICAgICAgICAgICAgICAgICAgICAiKElJKUxqYXZhL2xhbmcvU3RyaW5nOyIsICAgICAgICAgICAgICAgICh2b2lkKiluR2V0TmFtZSB9LAoteyJyc25PYmpEZXN0cm95IiwgICAgICAgICAgICAgICAgICAgICIoSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5PYmpEZXN0cm95IH0sCi0KLXsicnNuRmlsZUEzRENyZWF0ZUZyb21GaWxlIiwgICAgICAgICAiKElMamF2YS9sYW5nL1N0cmluZzspSSIsICAgICAgICAgICAgICAgICh2b2lkKiluRmlsZUEzRENyZWF0ZUZyb21GaWxlIH0sCi17InJzbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXRTdHJlYW0iLCAgIihJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXRTdHJlYW0gfSwKLXsicnNuRmlsZUEzRENyZWF0ZUZyb21Bc3NldCIsICAgICAgICAiKElMYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXI7TGphdmEvbGFuZy9TdHJpbmc7KUkiLCAgICAgICAgICAgICh2b2lkKiluRmlsZUEzRENyZWF0ZUZyb21Bc3NldCB9LAoteyJyc25GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzIiwgICAgICIoSUkpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzIH0sCi17InJzbkZpbGVBM0RHZXRJbmRleEVudHJpZXMiLCAgICAgICAgIihJSUlbSVtMamF2YS9sYW5nL1N0cmluZzspViIsICAgICAgICAgICAodm9pZCopbkZpbGVBM0RHZXRJbmRleEVudHJpZXMgfSwKLXsicnNuRmlsZUEzREdldEVudHJ5QnlJbmRleCIsICAgICAgICAiKElJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluRmlsZUEzREdldEVudHJ5QnlJbmRleCB9LAotCi17InJzbkZvbnRDcmVhdGVGcm9tRmlsZSIsICAgICAgICAgICAgIihJTGphdmEvbGFuZy9TdHJpbmc7RkkpSSIsICAgICAgICAgICAgICAodm9pZCopbkZvbnRDcmVhdGVGcm9tRmlsZSB9LAoteyJyc25Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtIiwgICAgICIoSUxqYXZhL2xhbmcvU3RyaW5nO0ZJSSlJIiwgICAgICAgICAgICAgKHZvaWQqKW5Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtIH0sCi17InJzbkZvbnRDcmVhdGVGcm9tQXNzZXQiLCAgICAgICAgIihJTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyO0xqYXZhL2xhbmcvU3RyaW5nO0ZJKUkiLCAgICAgICAgICAgICh2b2lkKiluRm9udENyZWF0ZUZyb21Bc3NldCB9LAotCi17InJzbkVsZW1lbnRDcmVhdGUiLCAgICAgICAgICAgICAgICAgIihJSUlaSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkVsZW1lbnRDcmVhdGUgfSwKLXsicnNuRWxlbWVudENyZWF0ZTIiLCAgICAgICAgICAgICAgICAiKElbSVtMamF2YS9sYW5nL1N0cmluZztbSSlJIiwgICAgICAgICAgICh2b2lkKiluRWxlbWVudENyZWF0ZTIgfSwKLXsicnNuRWxlbWVudEdldE5hdGl2ZURhdGEiLCAgICAgICAgICAiKElJW0kpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluRWxlbWVudEdldE5hdGl2ZURhdGEgfSwKLXsicnNuRWxlbWVudEdldFN1YkVsZW1lbnRzIiwgICAgICAgICAiKElJW0lbTGphdmEvbGFuZy9TdHJpbmc7W0kpViIsICAgICAgICAgICh2b2lkKiluRWxlbWVudEdldFN1YkVsZW1lbnRzIH0sCi0KLXsicnNuVHlwZUNyZWF0ZSIsICAgICAgICAgICAgICAgICAgICAiKElJSUlJWlpJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluVHlwZUNyZWF0ZSB9LAoteyJyc25UeXBlR2V0TmF0aXZlRGF0YSIsICAgICAgICAgICAgICIoSUlbSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5UeXBlR2V0TmF0aXZlRGF0YSB9LAotCi17InJzbkFsbG9jYXRpb25DcmVhdGVUeXBlZCIsICAgICAgICAgIihJSUlJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uQ3JlYXRlVHlwZWQgfSwKLXsicnNuQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAiLCAgICAiKElJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJKUkiLCAgICAgICh2b2lkKiluQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAgfSwKLXsicnNuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24iLCAgICAiKElJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJKUkiLCAgICAgICh2b2lkKiluQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24gfSwKLXsicnNuQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwIiwiKElJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJKUkiLCAgICAgICh2b2lkKiluQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwIH0sCi0KLXsicnNuQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwIiwgICAgICAiKElJTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIiwgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwIH0sCi17InJzbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAiLCAgICAgICAgIihJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIsICAgICAgICAodm9pZCopbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAgfSwKLQoteyJyc25BbGxvY2F0aW9uU3luY0FsbCIsICAgICAgICAgICAgICIoSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uU3luY0FsbCB9LAoteyJyc25BbGxvY2F0aW9uR2V0U3VyZmFjZSIsICAgICAgICAgICIoSUkpTGFuZHJvaWQvdmlldy9TdXJmYWNlOyIsICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uR2V0U3VyZmFjZSB9LAoteyJyc25BbGxvY2F0aW9uU2V0U3VyZmFjZSIsICAgICAgICAgICIoSUlMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiLCAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uU2V0U3VyZmFjZSB9LAoteyJyc25BbGxvY2F0aW9uSW9TZW5kIiwgICAgICAgICAgICAgICIoSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uSW9TZW5kIH0sCi17InJzbkFsbG9jYXRpb25Jb1JlY2VpdmUiLCAgICAgICAgICAgIihJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25Jb1JlY2VpdmUgfSwKLXsicnNuQWxsb2NhdGlvbkRhdGExRCIsICAgICAgICAgICAgICAiKElJSUlJW0lJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGExRF9pIH0sCi17InJzbkFsbG9jYXRpb25EYXRhMUQiLCAgICAgICAgICAgICAgIihJSUlJSVtTSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhMURfcyB9LAoteyJyc25BbGxvY2F0aW9uRGF0YTFEIiwgICAgICAgICAgICAgICIoSUlJSUlbQkkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTFEX2IgfSwKLXsicnNuQWxsb2NhdGlvbkRhdGExRCIsICAgICAgICAgICAgICAiKElJSUlJW0ZJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGExRF9mIH0sCi17InJzbkFsbG9jYXRpb25FbGVtZW50RGF0YTFEIiwgICAgICAgIihJSUlJSVtCSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25FbGVtZW50RGF0YTFEIH0sCi17InJzbkFsbG9jYXRpb25EYXRhMkQiLCAgICAgICAgICAgICAgIihJSUlJSUlJSVtJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhMkRfaSB9LAoteyJyc25BbGxvY2F0aW9uRGF0YTJEIiwgICAgICAgICAgICAgICIoSUlJSUlJSUlbU0kpViIsICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTJEX3MgfSwKLXsicnNuQWxsb2NhdGlvbkRhdGEyRCIsICAgICAgICAgICAgICAiKElJSUlJSUlJW0JJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGEyRF9iIH0sCi17InJzbkFsbG9jYXRpb25EYXRhMkQiLCAgICAgICAgICAgICAgIihJSUlJSUlJSVtGSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhMkRfZiB9LAoteyJyc25BbGxvY2F0aW9uRGF0YTJEIiwgICAgICAgICAgICAgICIoSUlJSUlJSUlJSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTJEX2FsbG9jIH0sCi17InJzbkFsbG9jYXRpb25EYXRhM0QiLCAgICAgICAgICAgICAgIihJSUlJSUlJSUlbSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhM0RfaSB9LAoteyJyc25BbGxvY2F0aW9uRGF0YTNEIiwgICAgICAgICAgICAgICIoSUlJSUlJSUlJW1NJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTNEX3MgfSwKLXsicnNuQWxsb2NhdGlvbkRhdGEzRCIsICAgICAgICAgICAgICAiKElJSUlJSUlJSVtCSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGEzRF9iIH0sCi17InJzbkFsbG9jYXRpb25EYXRhM0QiLCAgICAgICAgICAgICAgIihJSUlJSUlJSUlbRkkpViIsICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhM0RfZiB9LAoteyJyc25BbGxvY2F0aW9uRGF0YTNEIiwgICAgICAgICAgICAgICIoSUlJSUlJSUlJSUlJSUkpViIsICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTNEX2FsbG9jIH0sCi17InJzbkFsbG9jYXRpb25SZWFkIiwgICAgICAgICAgICAgICAgIihJSVtJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25SZWFkX2kgfSwKLXsicnNuQWxsb2NhdGlvblJlYWQiLCAgICAgICAgICAgICAgICAiKElJW1MpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvblJlYWRfcyB9LAoteyJyc25BbGxvY2F0aW9uUmVhZCIsICAgICAgICAgICAgICAgICIoSUlbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uUmVhZF9iIH0sCi17InJzbkFsbG9jYXRpb25SZWFkIiwgICAgICAgICAgICAgICAgIihJSVtGKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25SZWFkX2YgfSwKLXsicnNuQWxsb2NhdGlvbkdldFR5cGUiLCAgICAgICAgICAgICAiKElJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkdldFR5cGV9LAoteyJyc25BbGxvY2F0aW9uUmVzaXplMUQiLCAgICAgICAgICAgICIoSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uUmVzaXplMUQgfSwKLXsicnNuQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyIsICAgICAiKElJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyB9LAotCi17InJzblNjcmlwdEJpbmRBbGxvY2F0aW9uIiwgICAgICAgICAgIihJSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEJpbmRBbGxvY2F0aW9uIH0sCi17InJzblNjcmlwdFNldFRpbWVab25lIiwgICAgICAgICAgICAgIihJSVtCKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdFNldFRpbWVab25lIH0sCi17InJzblNjcmlwdEludm9rZSIsICAgICAgICAgICAgICAgICAgIihJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEludm9rZSB9LAoteyJyc25TY3JpcHRJbnZva2VWIiwgICAgICAgICAgICAgICAgICIoSUlJW0IpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRJbnZva2VWIH0sCi17InJzblNjcmlwdEZvckVhY2giLCAgICAgICAgICAgICAgICAgIihJSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEZvckVhY2ggfSwKLXsicnNuU2NyaXB0Rm9yRWFjaCIsICAgICAgICAgICAgICAgICAiKElJSUlJW0IpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0Rm9yRWFjaFYgfSwKLXsicnNuU2NyaXB0Rm9yRWFjaENsaXBwZWQiLCAgICAgICAgICAiKElJSUlJSUlJSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0Rm9yRWFjaENsaXBwZWQgfSwKLXsicnNuU2NyaXB0Rm9yRWFjaENsaXBwZWQiLCAgICAgICAgICAiKElJSUlJW0JJSUlJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0Rm9yRWFjaENsaXBwZWRWIH0sCi17InJzblNjcmlwdFNldFZhckkiLCAgICAgICAgICAgICAgICAgIihJSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdFNldFZhckkgfSwKLXsicnNuU2NyaXB0R2V0VmFySSIsICAgICAgICAgICAgICAgICAiKElJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R2V0VmFySSB9LAoteyJyc25TY3JpcHRTZXRWYXJKIiwgICAgICAgICAgICAgICAgICIoSUlJSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRTZXRWYXJKIH0sCi17InJzblNjcmlwdEdldFZhckoiLCAgICAgICAgICAgICAgICAgIihJSUkpSiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEdldFZhckogfSwKLXsicnNuU2NyaXB0U2V0VmFyRiIsICAgICAgICAgICAgICAgICAiKElJSUYpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VmFyRiB9LAoteyJyc25TY3JpcHRHZXRWYXJGIiwgICAgICAgICAgICAgICAgICIoSUlJKUYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHZXRWYXJGIH0sCi17InJzblNjcmlwdFNldFZhckQiLCAgICAgICAgICAgICAgICAgIihJSUlEKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdFNldFZhckQgfSwKLXsicnNuU2NyaXB0R2V0VmFyRCIsICAgICAgICAgICAgICAgICAiKElJSSlEIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R2V0VmFyRCB9LAoteyJyc25TY3JpcHRTZXRWYXJWIiwgICAgICAgICAgICAgICAgICIoSUlJW0IpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRTZXRWYXJWIH0sCi17InJzblNjcmlwdEdldFZhclYiLCAgICAgICAgICAgICAgICAgIihJSUlbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEdldFZhclYgfSwKLXsicnNuU2NyaXB0U2V0VmFyVkUiLCAgICAgICAgICAgICAgICAiKElJSVtCSVtJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VmFyVkUgfSwKLXsicnNuU2NyaXB0U2V0VmFyT2JqIiwgICAgICAgICAgICAgICAiKElJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VmFyT2JqIH0sCi0KLXsicnNuU2NyaXB0Q0NyZWF0ZSIsICAgICAgICAgICAgICAgICAiKElMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbQkkpSSIsICAodm9pZCopblNjcmlwdENDcmVhdGUgfSwKLXsicnNuU2NyaXB0SW50cmluc2ljQ3JlYXRlIiwgICAgICAgICAiKElJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0SW50cmluc2ljQ3JlYXRlIH0sCi17InJzblNjcmlwdEtlcm5lbElEQ3JlYXRlIiwgICAgICAgICAgIihJSUlJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEtlcm5lbElEQ3JlYXRlIH0sCi17InJzblNjcmlwdEZpZWxkSURDcmVhdGUiLCAgICAgICAgICAgIihJSUkpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEZpZWxkSURDcmVhdGUgfSwKLXsicnNuU2NyaXB0R3JvdXBDcmVhdGUiLCAgICAgICAgICAgICAiKElbSVtJW0lbSVtJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R3JvdXBDcmVhdGUgfSwKLXsicnNuU2NyaXB0R3JvdXBTZXRJbnB1dCIsICAgICAgICAgICAiKElJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R3JvdXBTZXRJbnB1dCB9LAoteyJyc25TY3JpcHRHcm91cFNldE91dHB1dCIsICAgICAgICAgICIoSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHcm91cFNldE91dHB1dCB9LAoteyJyc25TY3JpcHRHcm91cEV4ZWN1dGUiLCAgICAgICAgICAgICIoSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHcm91cEV4ZWN1dGUgfSwKLQoteyJyc25Qcm9ncmFtU3RvcmVDcmVhdGUiLCAgICAgICAgICAgICIoSVpaWlpaWklJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtU3RvcmVDcmVhdGUgfSwKLQoteyJyc25Qcm9ncmFtQmluZENvbnN0YW50cyIsICAgICAgICAgICIoSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtQmluZENvbnN0YW50cyB9LAoteyJyc25Qcm9ncmFtQmluZFRleHR1cmUiLCAgICAgICAgICAgICIoSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtQmluZFRleHR1cmUgfSwKLXsicnNuUHJvZ3JhbUJpbmRTYW1wbGVyIiwgICAgICAgICAgICAiKElJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluUHJvZ3JhbUJpbmRTYW1wbGVyIH0sCi0KLXsicnNuUHJvZ3JhbUZyYWdtZW50Q3JlYXRlIiwgICAgICAgICAiKElMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7W0kpSSIsICAgICAgICAgICAgICAodm9pZCopblByb2dyYW1GcmFnbWVudENyZWF0ZSB9LAoteyJyc25Qcm9ncmFtUmFzdGVyQ3JlYXRlIiwgICAgICAgICAgICIoSVpJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtUmFzdGVyQ3JlYXRlIH0sCi17InJzblByb2dyYW1WZXJ0ZXhDcmVhdGUiLCAgICAgICAgICAgIihJTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO1tJKUkiLCAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtVmVydGV4Q3JlYXRlIH0sCi0KLXsicnNuQ29udGV4dEJpbmRSb290U2NyaXB0IiwgICAgICAgICAiKElJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dEJpbmRSb290U2NyaXB0IH0sCi17InJzbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlIiwgICAgICAgIihJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlIH0sCi17InJzbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50IiwgICAgIihJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50IH0sCi17InJzbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleCIsICAgICAgIihJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleCB9LAoteyJyc25Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIiLCAgICAgICIoSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIgfSwKLQoteyJyc25TYW1wbGVyQ3JlYXRlIiwgICAgICAgICAgICAgICAgICIoSUlJSUlJRilJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TYW1wbGVyQ3JlYXRlIH0sCi0KLXsicnNuUGF0aENyZWF0ZSIsICAgICAgICAgICAgICAgICAgICAiKElJWklJRilJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluUGF0aENyZWF0ZSB9LAoteyJyc25NZXNoQ3JlYXRlIiwgICAgICAgICAgICAgICAgICAgICIoSVtJW0lbSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5NZXNoQ3JlYXRlIH0sCi0KLXsicnNuTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50IiwgICAgICAiKElJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50IH0sCi17InJzbk1lc2hHZXRJbmRleENvdW50IiwgICAgICAgICAgICAgIihJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbk1lc2hHZXRJbmRleENvdW50IH0sCi17InJzbk1lc2hHZXRWZXJ0aWNlcyIsICAgICAgICAgICAgICAgIihJSVtJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbk1lc2hHZXRWZXJ0aWNlcyB9LAoteyJyc25NZXNoR2V0SW5kaWNlcyIsICAgICAgICAgICAgICAgICIoSUlbSVtJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5NZXNoR2V0SW5kaWNlcyB9LAotCi19OwotCi1zdGF0aWMgaW50IHJlZ2lzdGVyRnVuY3MoSk5JRW52ICpfZW52KQotewotICAgIHJldHVybiBhbmRyb2lkOjpBbmRyb2lkUnVudGltZTo6cmVnaXN0ZXJOYXRpdmVNZXRob2RzKAotICAgICAgICAgICAgX2VudiwgY2xhc3NQYXRoTmFtZSwgbWV0aG9kcywgTkVMRU0obWV0aG9kcykpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotamludCBKTklfT25Mb2FkKEphdmFWTSogdm0sIHZvaWQqIHJlc2VydmVkKQotewotICAgIEpOSUVudiogZW52ID0gTlVMTDsKLSAgICBqaW50IHJlc3VsdCA9IC0xOwotCi0gICAgaWYgKHZtLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSAhPSBKTklfT0spIHsKLSAgICAgICAgQUxPR0UoIkVSUk9SOiBHZXRFbnYgZmFpbGVkXG4iKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLSAgICBhc3NlcnQoZW52ICE9IE5VTEwpOwotCi0gICAgaWYgKHJlZ2lzdGVyRnVuY3MoZW52KSA8IDApIHsKLSAgICAgICAgQUxPR0UoIkVSUk9SOiBNZWRpYVBsYXllciBuYXRpdmUgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICAvKiBzdWNjZXNzIC0tIHJldHVybiB2YWxpZCB2ZXJzaW9uIG51bWJlciAqLwotICAgIHJlc3VsdCA9IEpOSV9WRVJTSU9OXzFfNDsKLQotYmFpbDoKLSAgICByZXR1cm4gcmVzdWx0OwotfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbmRyb2lkZncvQXNzZXQuaCBiL2luY2x1ZGUvYW5kcm9pZGZ3L0Fzc2V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZTBlMDYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hbmRyb2lkZncvQXNzZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8KLS8vIENsYXNzIHByb3ZpZGluZyBhY2Nlc3MgdG8gYSByZWFkLW9ubHkgYXNzZXQuICBBc3NldCBvYmplY3RzIGFyZSBOT1QKLS8vIHRocmVhZC1zYWZlLCBhbmQgc2hvdWxkIG5vdCBiZSBzaGFyZWQgYWNyb3NzIHRocmVhZHMuCi0vLwotI2lmbmRlZiBfX0xJQlNfQVNTRVRfSAotI2RlZmluZSBfX0xJQlNfQVNTRVRfSAotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotI2luY2x1ZGUgPHV0aWxzL0NvbXBhdC5oPgotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotI2luY2x1ZGUgPHV0aWxzL0ZpbGVNYXAuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyoKLSAqIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHByb3ZpZGUgcmVhZC1vbmx5IG9wZXJhdGlvbnMgb24gYSBieXRlIHN0cmVhbS4KLSAqCi0gKiBBY2Nlc3MgbWF5IGJlIG9wdGltaXplZCBmb3Igc3RyZWFtaW5nLCByYW5kb20sIG9yIHdob2xlIGJ1ZmZlciBtb2Rlcy4gIEFsbAotICogb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBmaWxlIHdhcyBvcGVuZWQsIGJ1dCBzb21lCi0gKiB0aGluZ3Mgd2lsbCBiZSBsZXNzIGVmZmljaWVudC4gIFtwYXNzIHRoYXQgaW4/P10KLSAqCi0gKiAiQXNzZXQiIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgdHlwZXMgb2YgYXNzZXRzLiAgVGhlIGNsYXNzZXMgYmVsb3cKLSAqIHByb3ZpZGUgbW9zdCBvZiB0aGUgaW1wbGVtZW50YXRpb24uICBUaGUgQXNzZXRNYW5hZ2VyIHVzZXMgb25lIG9mIHRoZQotICogc3RhdGljICJjcmVhdGUiIGZ1bmN0aW9ucyBkZWZpbmVkIGhlcmUgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlLgotICovCi1jbGFzcyBBc3NldCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QXNzZXQodm9pZCk7Ci0KLSAgICBzdGF0aWMgaW50MzJfdCBnZXRHbG9iYWxDb3VudCgpOwotICAgIHN0YXRpYyBTdHJpbmc4IGdldEFzc2V0QWxsb2NhdGlvbnMoKTsKLSAgICAKLSAgICAvKiB1c2VkIHdoZW4gb3BlbmluZyBhbiBhc3NldCAqLwotICAgIHR5cGVkZWYgZW51bSBBY2Nlc3NNb2RlIHsKLSAgICAgICAgQUNDRVNTX1VOS05PV04gPSAwLAotCi0gICAgICAgIC8qIHJlYWQgY2h1bmtzLCBhbmQgc2VlayBmb3J3YXJkIGFuZCBiYWNrd2FyZCAqLwotICAgICAgICBBQ0NFU1NfUkFORE9NLAotCi0gICAgICAgIC8qIHJlYWQgc2VxdWVudGlhbGx5LCB3aXRoIGFuIG9jY2FzaW9uYWwgZm9yd2FyZCBzZWVrICovCi0gICAgICAgIEFDQ0VTU19TVFJFQU1JTkcsCi0KLSAgICAgICAgLyogY2FsbGVyIHBsYW5zIHRvIGFzayBmb3IgYSByZWFkLW9ubHkgYnVmZmVyIHdpdGggYWxsIGRhdGEgKi8KLSAgICAgICAgQUNDRVNTX0JVRkZFUiwKLSAgICB9IEFjY2Vzc01vZGU7Ci0KLSAgICAvKgotICAgICAqIFJlYWQgZGF0YSBmcm9tIHRoZSBjdXJyZW50IG9mZnNldC4gIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YKLSAgICAgKiBieXRlcyByZWFkLCAwIG9uIEVPRiwgb3IgLTEgb24gZXJyb3IuCi0gICAgICovCi0gICAgdmlydHVhbCBzc2l6ZV90IHJlYWQodm9pZCogYnVmLCBzaXplX3QgY291bnQpID0gMDsKLQotICAgIC8qCi0gICAgICogU2VlayB0byB0aGUgc3BlY2lmaWVkIG9mZnNldC4gICJ3aGVuY2UiIHVzZXMgdGhlIHNhbWUgdmFsdWVzIGFzCi0gICAgICogbHNlZWsvZnNlZWsuICBSZXR1cm5zIHRoZSBuZXcgcG9zaXRpb24gb24gc3VjY2Vzcywgb3IgKG9mZjY0X3QpIC0xCi0gICAgICogb24gZmFpbHVyZS4KLSAgICAgKi8KLSAgICB2aXJ0dWFsIG9mZjY0X3Qgc2VlayhvZmY2NF90IG9mZnNldCwgaW50IHdoZW5jZSkgPSAwOwotCi0gICAgLyoKLSAgICAgKiBDbG9zZSB0aGUgYXNzZXQsIGZyZWVpbmcgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgotICAgICAqLwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZSh2b2lkKSA9IDA7Ci0KLSAgICAvKgotICAgICAqIEdldCBhIHBvaW50ZXIgdG8gYSBidWZmZXIgd2l0aCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgotICAgICAqLwotICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZ2V0QnVmZmVyKGJvb2wgd29yZEFsaWduZWQpID0gMDsKLQotICAgIC8qCi0gICAgICogR2V0IHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSB0aGF0IGNhbiBiZSByZWFkLgotICAgICAqLwotICAgIHZpcnR1YWwgb2ZmNjRfdCBnZXRMZW5ndGgodm9pZCkgY29uc3QgPSAwOwotCi0gICAgLyoKLSAgICAgKiBHZXQgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIHRoYXQgY2FuIGJlIHJlYWQgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAgICAgKi8KLSAgICB2aXJ0dWFsIG9mZjY0X3QgZ2V0UmVtYWluaW5nTGVuZ3RoKHZvaWQpIGNvbnN0ID0gMDsKLQotICAgIC8qCi0gICAgICogT3BlbiBhIG5ldyBmaWxlIGRlc2NyaXB0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZWFkIHRoaXMgYXNzZXQuCi0gICAgICogUmV0dXJucyAtMSBpZiB5b3UgY2FuIG5vdCB1c2UgdGhlIGZpbGUgZGVzY3JpcHRvciAoZm9yIGV4YW1wbGUgaWYgdGhlCi0gICAgICogYXNzZXQgaXMgY29tcHJlc3NlZCkuCi0gICAgICovCi0gICAgdmlydHVhbCBpbnQgb3BlbkZpbGVEZXNjcmlwdG9yKG9mZjY0X3QqIG91dFN0YXJ0LCBvZmY2NF90KiBvdXRMZW5ndGgpIGNvbnN0ID0gMDsKLQotICAgIC8qCi0gICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBhc3NldCdzIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgaW4gUkFNIChub3QgbW1hcHBlZCkuCi0gICAgICogTm90ZTogbm90IHZpcnR1YWwgc28gaXQgaXMgc2FmZSB0byBjYWxsIGV2ZW4gd2hlbiBiZWluZyBkZXN0cm95ZWQuCi0gICAgICovCi0gICAgdmlydHVhbCBib29sIGlzQWxsb2NhdGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAvKgotICAgICAqIEdldCBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgYXNzZXQncyBzb3VyY2UuICBUaGlzIG1pZ2h0IGJlIGEgZnVsbAotICAgICAqIHBhdGgsIGl0IG1pZ2h0IGJlIGEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgaWRlbnRpZmllcnMuCi0gICAgICoKLSAgICAgKiBUaGlzIGlzIE5PVCBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBhbnl0aGluZyBleGNlcHQgZGVidWcgb3V0cHV0LgotICAgICAqIERPIE5PVCB0cnkgdG8gcGFyc2UgdGhpcyBvciB1c2UgaXQgdG8gb3BlbiBhIGZpbGUuCi0gICAgICovCi0gICAgY29uc3QgY2hhciogZ2V0QXNzZXRTb3VyY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbUFzc2V0U291cmNlLnN0cmluZygpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBBc3NldCh2b2lkKTsgICAgICAgIC8vIGNvbnN0cnVjdG9yOyBvbmx5IGludm9rZWQgaW5kaXJlY3RseQotCi0gICAgLyogaGFuZGxlIGNvbW1vbiBzZWVrKCkgaG91c2VrZWVwaW5nICovCi0gICAgb2ZmNjRfdCBoYW5kbGVTZWVrKG9mZjY0X3Qgb2Zmc2V0LCBpbnQgd2hlbmNlLCBvZmY2NF90IGN1clBvc24sIG9mZjY0X3QgbWF4UG9zbik7Ci0KLSAgICAvKiBzZXQgdGhlIGFzc2V0IHNvdXJjZSBzdHJpbmcgKi8KLSAgICB2b2lkIHNldEFzc2V0U291cmNlKGNvbnN0IFN0cmluZzgmIHBhdGgpIHsgbUFzc2V0U291cmNlID0gcGF0aDsgfQotCi0gICAgQWNjZXNzTW9kZSBnZXRBY2Nlc3NNb2RlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1BY2Nlc3NNb2RlOyB9Ci0KLXByaXZhdGU6Ci0gICAgLyogdGhlc2Ugb3BlcmF0aW9ucyBhcmUgbm90IGltcGxlbWVudGVkICovCi0gICAgQXNzZXQoY29uc3QgQXNzZXQmIHNyYyk7Ci0gICAgQXNzZXQmIG9wZXJhdG9yPShjb25zdCBBc3NldCYgc3JjKTsKLQotICAgIC8qIEFzc2V0TWFuYWdlciBuZWVkcyBhY2Nlc3MgdG8gb3VyICJjcmVhdGUiIGZ1bmN0aW9ucyAqLwotICAgIGZyaWVuZCBjbGFzcyBBc3NldE1hbmFnZXI7Ci0KLSAgICAvKgotICAgICAqIENyZWF0ZSB0aGUgYXNzZXQgZnJvbSBhIG5hbWVkIGZpbGUgb24gZGlzay4KLSAgICAgKi8KLSAgICBzdGF0aWMgQXNzZXQqIGNyZWF0ZUZyb21GaWxlKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBBY2Nlc3NNb2RlIG1vZGUpOwotCi0gICAgLyoKLSAgICAgKiBDcmVhdGUgdGhlIGFzc2V0IGZyb20gYSBuYW1lZCwgY29tcHJlc3NlZCBmaWxlIG9uIGRpc2sgKGUuZy4gIi5neiIpLgotICAgICAqLwotICAgIHN0YXRpYyBBc3NldCogY3JlYXRlRnJvbUNvbXByZXNzZWRGaWxlKGNvbnN0IGNoYXIqIGZpbGVOYW1lLAotICAgICAgICBBY2Nlc3NNb2RlIG1vZGUpOwotCi0jaWYgMAotICAgIC8qCi0gICAgICogQ3JlYXRlIHRoZSBhc3NldCBmcm9tIGEgc2VnbWVudCBvZiBhbiBvcGVuIGZpbGUuICBUaGlzIHdpbGwgZmFpbAotICAgICAqIGlmICJvZmZzZXQiIGFuZCAibGVuZ3RoIiBkb24ndCBmaXQgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIGZpbGUuCi0gICAgICoKLSAgICAgKiBUaGUgYXNzZXQgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IuCi0gICAgICovCi0gICAgc3RhdGljIEFzc2V0KiBjcmVhdGVGcm9tRmlsZVNlZ21lbnQoaW50IGZkLCBvZmY2NF90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwKLSAgICAgICAgQWNjZXNzTW9kZSBtb2RlKTsKLQotICAgIC8qCi0gICAgICogQ3JlYXRlIGZyb20gY29tcHJlc3NlZCBkYXRhLiAgImZkIiBzaG91bGQgYmUgc2Vla2VkIHRvIHRoZSBzdGFydCBvZgotICAgICAqIHRoZSBjb21wcmVzc2VkIGRhdGEuICBUaGlzIGNvdWxkIGJlIGluc2lkZSBhIGd6aXAgZmlsZSBvciBwYXJ0IG9mIGEKLSAgICAgKiBaaXAgYXJjaGl2ZS4KLSAgICAgKgotICAgICAqIFRoZSBhc3NldCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGZpbGUgZGVzY3JpcHRvci4KLSAgICAgKgotICAgICAqIFRoaXMgbWF5IG5vdCB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgdW50aWwgZmlyc3QKLSAgICAgKiB1c2UuCi0gICAgICovCi0gICAgc3RhdGljIEFzc2V0KiBjcmVhdGVGcm9tQ29tcHJlc3NlZERhdGEoaW50IGZkLCBvZmY2NF90IG9mZnNldCwKLSAgICAgICAgaW50IGNvbXByZXNzaW9uTWV0aG9kLCBzaXplX3QgY29tcHJlc3NlZExlbmd0aCwKLSAgICAgICAgc2l6ZV90IHVuY29tcHJlc3NlZExlbmd0aCwgQWNjZXNzTW9kZSBtb2RlKTsKLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiBDcmVhdGUgdGhlIGFzc2V0IGZyb20gYSBtZW1vcnktbWFwcGVkIGZpbGUgc2VnbWVudC4KLSAgICAgKgotICAgICAqIFRoZSBhc3NldCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIEZpbGVNYXAuCi0gICAgICovCi0gICAgc3RhdGljIEFzc2V0KiBjcmVhdGVGcm9tVW5jb21wcmVzc2VkTWFwKEZpbGVNYXAqIGRhdGFNYXAsIEFjY2Vzc01vZGUgbW9kZSk7Ci0KLSAgICAvKgotICAgICAqIENyZWF0ZSB0aGUgYXNzZXQgZnJvbSBhIG1lbW9yeS1tYXBwZWQgZmlsZSBzZWdtZW50IHdpdGggY29tcHJlc3NlZAotICAgICAqIGRhdGEuICAibWV0aG9kIiBpcyBhIFppcCBhcmNoaXZlIGNvbXByZXNzaW9uIG1ldGhvZCBjb25zdGFudC4KLSAgICAgKgotICAgICAqIFRoZSBhc3NldCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIEZpbGVNYXAuCi0gICAgICovCi0gICAgc3RhdGljIEFzc2V0KiBjcmVhdGVGcm9tQ29tcHJlc3NlZE1hcChGaWxlTWFwKiBkYXRhTWFwLCBpbnQgbWV0aG9kLAotICAgICAgICBzaXplX3QgdW5jb21wcmVzc2VkTGVuLCBBY2Nlc3NNb2RlIG1vZGUpOwotCi0KLSAgICAvKgotICAgICAqIENyZWF0ZSBmcm9tIGEgcmVmZXJlbmNlLWNvdW50ZWQgY2h1bmsgb2Ygc2hhcmVkIG1lbW9yeS4KLSAgICAgKi8KLSAgICAvLyBUT0RPCi0KLSAgICBBY2Nlc3NNb2RlICBtQWNjZXNzTW9kZTsgICAgICAgIC8vIGhvdyB0aGUgYXNzZXQgd2FzIG9wZW5lZAotICAgIFN0cmluZzggICAgbUFzc2V0U291cmNlOyAgICAgICAvLyBkZWJ1ZyBzdHJpbmcKLSAgICAKLSAgICBBc3NldCoJCW1OZXh0OwkJCQkvLyBsaW5rZWQgbGlzdC4KLSAgICBBc3NldCoJCW1QcmV2OwotfTsKLQotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogSW5uYXJkcyBmb2xsb3cuICBEbyBub3QgdXNlIHRoZXNlIGNsYXNzZXMgZGlyZWN0bHkuCi0gKi8KLQotLyoKLSAqIEFuIGFzc2V0IGJhc2VkIG9uIGFuIHVuY29tcHJlc3NlZCBmaWxlIG9uIGRpc2suICBJdCBtYXkgZW5jb21wYXNzIHRoZQotICogZW50aXJlIGZpbGUgb3IganVzdCBhIHBpZWNlIG9mIGl0LiAgQWNjZXNzIGlzIHRocm91Z2ggZnJlYWQvZnNlZWsuCi0gKi8KLWNsYXNzIF9GaWxlQXNzZXQgOiBwdWJsaWMgQXNzZXQgewotcHVibGljOgotICAgIF9GaWxlQXNzZXQodm9pZCk7Ci0gICAgdmlydHVhbCB+X0ZpbGVBc3NldCh2b2lkKTsKLQotICAgIC8qCi0gICAgICogVXNlIGEgcGllY2Ugb2YgYW4gYWxyZWFkeS1vcGVuIGZpbGUuCi0gICAgICoKLSAgICAgKiBPbiBzdWNjZXNzLCB0aGUgb2JqZWN0IHRha2VzIG93bmVyc2hpcCBvZiAiZmQiLgotICAgICAqLwotICAgIHN0YXR1c190IG9wZW5DaHVuayhjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IGZkLCBvZmY2NF90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCk7Ci0KLSAgICAvKgotICAgICAqIFVzZSBhIG1lbW9yeS1tYXBwZWQgcmVnaW9uLgotICAgICAqCi0gICAgICogT24gc3VjY2VzcywgdGhlIG9iamVjdCB0YWtlcyBvd25lcnNoaXAgb2YgImRhdGFNYXAiLgotICAgICAqLwotICAgIHN0YXR1c190IG9wZW5DaHVuayhGaWxlTWFwKiBkYXRhTWFwKTsKLQotICAgIC8qCi0gICAgICogU3RhbmRhcmQgQXNzZXQgaW50ZXJmYWNlcy4KLSAgICAgKi8KLSAgICB2aXJ0dWFsIHNzaXplX3QgcmVhZCh2b2lkKiBidWYsIHNpemVfdCBjb3VudCk7Ci0gICAgdmlydHVhbCBvZmY2NF90IHNlZWsob2ZmNjRfdCBvZmZzZXQsIGludCB3aGVuY2UpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZSh2b2lkKTsKLSAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGdldEJ1ZmZlcihib29sIHdvcmRBbGlnbmVkKTsKLSAgICB2aXJ0dWFsIG9mZjY0X3QgZ2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGg7IH0KLSAgICB2aXJ0dWFsIG9mZjY0X3QgZ2V0UmVtYWluaW5nTGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGgtbU9mZnNldDsgfQotICAgIHZpcnR1YWwgaW50IG9wZW5GaWxlRGVzY3JpcHRvcihvZmY2NF90KiBvdXRTdGFydCwgb2ZmNjRfdCogb3V0TGVuZ3RoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNBbGxvY2F0ZWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1ZiAhPSBOVUxMOyB9Ci0KLXByaXZhdGU6Ci0gICAgb2ZmNjRfdCAgICAgbVN0YXJ0OyAgICAgICAgIC8vIGFic29sdXRlIGZpbGUgb2Zmc2V0IG9mIHN0YXJ0IG9mIGNodW5rCi0gICAgb2ZmNjRfdCAgICAgbUxlbmd0aDsgICAgICAgIC8vIGxlbmd0aCBvZiB0aGUgY2h1bmsKLSAgICBvZmY2NF90ICAgICBtT2Zmc2V0OyAgICAgICAgLy8gY3VycmVudCBsb2NhbCBvZmZzZXQsIDAgPT0gbVN0YXJ0Ci0gICAgRklMRSogICAgICAgbUZwOyAgICAgICAgICAgIC8vIGZvciByZWFkL3NlZWsKLSAgICBjaGFyKiAgICAgICBtRmlsZU5hbWU7ICAgICAgLy8gZm9yIG9wZW5pbmcKLQotICAgIC8qCi0gICAgICogVG8gc3VwcG9ydCBnZXRCdWZmZXIoKSB3ZSBlaXRoZXIgbmVlZCB0byByZWFkIHRoZSBlbnRpcmUgdGhpbmcgaW50bwotICAgICAqIGEgYnVmZmVyIG9yIG1lbW9yeS1tYXAgaXQuICBGb3Igc21hbGwgZmlsZXMgaXQncyBwcm9iYWJseSBiZXN0IHRvCi0gICAgICoganVzdCByZWFkIHRoZW0gaW4uCi0gICAgICovCi0gICAgZW51bSB7IGtSZWFkVnNNYXBUaHJlc2hvbGQgPSA0MDk2IH07Ci0KLSAgICBGaWxlTWFwKiAgICBtTWFwOyAgICAgICAgICAgLy8gZm9yIG1lbW9yeSBtYXAKLSAgICB1bnNpZ25lZCBjaGFyKiBtQnVmOyAgICAgICAgLy8gZm9yIHJlYWQKLSAgICAKLSAgICBjb25zdCB2b2lkKiBlbnN1cmVBbGlnbm1lbnQoRmlsZU1hcCogbWFwKTsKLX07Ci0KLQotLyoKLSAqIEFuIGFzc2V0IGJhc2VkIG9uIGNvbXByZXNzZWQgZGF0YSBpbiBhIGZpbGUuCi0gKi8KLWNsYXNzIF9Db21wcmVzc2VkQXNzZXQgOiBwdWJsaWMgQXNzZXQgewotcHVibGljOgotICAgIF9Db21wcmVzc2VkQXNzZXQodm9pZCk7Ci0gICAgdmlydHVhbCB+X0NvbXByZXNzZWRBc3NldCh2b2lkKTsKLQotICAgIC8qCi0gICAgICogVXNlIGEgcGllY2Ugb2YgYW4gYWxyZWFkeS1vcGVuIGZpbGUuCi0gICAgICoKLSAgICAgKiBPbiBzdWNjZXNzLCB0aGUgb2JqZWN0IHRha2VzIG93bmVyc2hpcCBvZiAiZmQiLgotICAgICAqLwotICAgIHN0YXR1c190IG9wZW5DaHVuayhpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBpbnQgY29tcHJlc3Npb25NZXRob2QsCi0gICAgICAgIHNpemVfdCB1bmNvbXByZXNzZWRMZW4sIHNpemVfdCBjb21wcmVzc2VkTGVuKTsKLQotICAgIC8qCi0gICAgICogVXNlIGEgbWVtb3J5LW1hcHBlZCByZWdpb24uCi0gICAgICoKLSAgICAgKiBPbiBzdWNjZXNzLCB0aGUgb2JqZWN0IHRha2VzIG93bmVyc2hpcCBvZiAiZmQiLgotICAgICAqLwotICAgIHN0YXR1c190IG9wZW5DaHVuayhGaWxlTWFwKiBkYXRhTWFwLCBpbnQgY29tcHJlc3Npb25NZXRob2QsCi0gICAgICAgIHNpemVfdCB1bmNvbXByZXNzZWRMZW4pOwotCi0gICAgLyoKLSAgICAgKiBTdGFuZGFyZCBBc3NldCBpbnRlcmZhY2VzLgotICAgICAqLwotICAgIHZpcnR1YWwgc3NpemVfdCByZWFkKHZvaWQqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKLSAgICB2aXJ0dWFsIG9mZjY0X3Qgc2VlayhvZmY2NF90IG9mZnNldCwgaW50IHdoZW5jZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKHZvaWQpOwotICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZ2V0QnVmZmVyKGJvb2wgd29yZEFsaWduZWQpOwotICAgIHZpcnR1YWwgb2ZmNjRfdCBnZXRMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gbVVuY29tcHJlc3NlZExlbjsgfQotICAgIHZpcnR1YWwgb2ZmNjRfdCBnZXRSZW1haW5pbmdMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gbVVuY29tcHJlc3NlZExlbi1tT2Zmc2V0OyB9Ci0gICAgdmlydHVhbCBpbnQgb3BlbkZpbGVEZXNjcmlwdG9yKG9mZjY0X3QqIG91dFN0YXJ0LCBvZmY2NF90KiBvdXRMZW5ndGgpIGNvbnN0IHsgcmV0dXJuIC0xOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQWxsb2NhdGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWYgIT0gTlVMTDsgfQotCi1wcml2YXRlOgotICAgIG9mZjY0X3QgICAgIG1TdGFydDsgICAgICAgICAvLyBvZmZzZXQgdG8gc3RhcnQgb2YgY29tcHJlc3NlZCBkYXRhCi0gICAgb2ZmNjRfdCAgICAgbUNvbXByZXNzZWRMZW47IC8vIGxlbmd0aCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhCi0gICAgb2ZmNjRfdCAgICAgbVVuY29tcHJlc3NlZExlbjsgLy8gbGVuZ3RoIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YQotICAgIG9mZjY0X3QgICAgIG1PZmZzZXQ7ICAgICAgICAvLyBjdXJyZW50IG9mZnNldCwgMCA9PSBzdGFydCBvZiB1bmNvbXAgZGF0YQotCi0gICAgRmlsZU1hcCogICAgbU1hcDsgICAgICAgICAgIC8vIGZvciBtZW1vcnktbWFwcGVkIGlucHV0Ci0gICAgaW50ICAgICAgICAgbUZkOyAgICAgICAgICAgIC8vIGZvciBmaWxlIGlucHV0Ci0KLSAgICBjbGFzcyBTdHJlYW1pbmdaaXBJbmZsYXRlciogbVppcEluZmxhdGVyOyAgLy8gZm9yIHN0cmVhbWluZyBsYXJnZSBjb21wcmVzc2VkIGFzc2V0cwotCi0gICAgdW5zaWduZWQgY2hhciogIG1CdWY7ICAgICAgIC8vIGZvciBnZXRCdWZmZXIoKQotfTsKLQotLy8gbmVlZDogc2hhcmVkIG1tYXAgdmVyc2lvbj8KLQotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIF9fTElCU19BU1NFVF9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FuZHJvaWRmdy9Bc3NldERpci5oIGIvaW5jbHVkZS9hbmRyb2lkZncvQXNzZXREaXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ4OWQ3ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FuZHJvaWRmdy9Bc3NldERpci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLwotLy8gQWNjZXNzIGEgY2h1bmsgb2YgdGhlIGFzc2V0IGhpZXJhcmNoeSBhcyBpZiBpdCB3ZXJlIGEgc2luZ2xlIGRpcmVjdG9yeS4KLS8vCi0jaWZuZGVmIF9fTElCU19BU1NFVERJUl9ICi0jZGVmaW5lIF9fTElCU19BU1NFVERJUl9ICi0KLSNpbmNsdWRlIDxhbmRyb2lkZncvbWlzYy5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9Tb3J0ZWRWZWN0b3IuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi0vKgotICogVGhpcyBwcm92aWRlcyB2ZWN0b3Itc3R5bGUgYWNjZXNzIHRvIGEgZGlyZWN0b3J5LiAgV2UgZG8gdGhpcyByYXRoZXIKLSAqIHRoYW4gbW9kZWxpbmcgb3BlbmRpci9yZWFkZGlyIGFjY2VzcyBiZWNhdXNlIGl0J3Mgc2ltcGxlciBhbmQgdGhlCi0gKiBuYXR1cmUgb2YgdGhlIG9wZXJhdGlvbiByZXF1aXJlcyB1cyB0byBoYXZlIGFsbCBkYXRhIG9uIGhhbmQgYW55d2F5LgotICoKLSAqIFRoZSBsaXN0IG9mIGZpbGVzIHdpbGwgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBieSBBU0NJSSB2YWx1ZS4KLSAqCi0gKiBUaGUgY29udGVudHMgYXJlIHBvcHVsYXRlZCBieSBvdXIgZnJpZW5kLCB0aGUgQXNzZXRNYW5hZ2VyLgotICovCi1jbGFzcyBBc3NldERpciB7Ci1wdWJsaWM6Ci0gICAgQXNzZXREaXIodm9pZCkKLSAgICAgICAgOiBtRmlsZUluZm8oTlVMTCkKLSAgICAgICAge30KLSAgICB2aXJ0dWFsIH5Bc3NldERpcih2b2lkKSB7Ci0gICAgICAgIGRlbGV0ZSBtRmlsZUluZm87Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBWZWN0b3Itc3R5bGUgYWNjZXNzLgotICAgICAqLwotICAgIHNpemVfdCBnZXRGaWxlQ291bnQodm9pZCkgeyByZXR1cm4gbUZpbGVJbmZvLT5zaXplKCk7IH0KLSAgICBjb25zdCBTdHJpbmc4JiBnZXRGaWxlTmFtZShpbnQgaWR4KSB7Ci0gICAgICAgIHJldHVybiBtRmlsZUluZm8tPml0ZW1BdChpZHgpLmdldEZpbGVOYW1lKCk7Ci0gICAgfQotICAgIGNvbnN0IFN0cmluZzgmIGdldFNvdXJjZU5hbWUoaW50IGlkeCkgewotICAgICAgICByZXR1cm4gbUZpbGVJbmZvLT5pdGVtQXQoaWR4KS5nZXRTb3VyY2VOYW1lKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBHZXQgdGhlIHR5cGUgb2YgYSBmaWxlICh1c3VhbGx5IHJlZ3VsYXIgb3IgZGlyZWN0b3J5KS4KLSAgICAgKi8KLSAgICBGaWxlVHlwZSBnZXRGaWxlVHlwZShpbnQgaWR4KSB7Ci0gICAgICAgIHJldHVybiBtRmlsZUluZm8tPml0ZW1BdChpZHgpLmdldEZpbGVUeXBlKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIC8qIHRoZXNlIG9wZXJhdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZCAqLwotICAgIEFzc2V0RGlyKGNvbnN0IEFzc2V0RGlyJiBzcmMpOwotICAgIGNvbnN0IEFzc2V0RGlyJiBvcGVyYXRvcj0oY29uc3QgQXNzZXREaXImIHNyYyk7Ci0KLSAgICBmcmllbmQgY2xhc3MgQXNzZXRNYW5hZ2VyOwotCi0gICAgLyoKLSAgICAgKiBUaGlzIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGluIHRoZSBhc3NldCBoaWVyYXJjaHkuCi0gICAgICovCi0gICAgY2xhc3MgRmlsZUluZm8gewotICAgIHB1YmxpYzoKLSAgICAgICAgRmlsZUluZm8odm9pZCkge30KLSAgICAgICAgRmlsZUluZm8oY29uc3QgU3RyaW5nOCYgcGF0aCkgICAgICAvLyB1c2VmdWwgZm9yIGUuZy4gc3ZlY3QuaW5kZXhPZgotICAgICAgICAgICAgOiBtRmlsZU5hbWUocGF0aCksIG1GaWxlVHlwZShrRmlsZVR5cGVVbmtub3duKQotICAgICAgICAgICAge30KLSAgICAgICAgfkZpbGVJbmZvKHZvaWQpIHt9Ci0gICAgICAgIEZpbGVJbmZvKGNvbnN0IEZpbGVJbmZvJiBzcmMpIHsKLSAgICAgICAgICAgIGNvcHlNZW1iZXJzKHNyYyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgRmlsZUluZm8mIG9wZXJhdG9yPSAoY29uc3QgRmlsZUluZm8mIHNyYykgewotICAgICAgICAgICAgaWYgKHRoaXMgIT0gJnNyYykKLSAgICAgICAgICAgICAgICBjb3B5TWVtYmVycyhzcmMpOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjb3B5TWVtYmVycyhjb25zdCBGaWxlSW5mbyYgc3JjKSB7Ci0gICAgICAgICAgICBtRmlsZU5hbWUgPSBzcmMubUZpbGVOYW1lOwotICAgICAgICAgICAgbUZpbGVUeXBlID0gc3JjLm1GaWxlVHlwZTsKLSAgICAgICAgICAgIG1Tb3VyY2VOYW1lID0gc3JjLm1Tb3VyY2VOYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogbmVlZCB0aGlzIGZvciBTb3J0ZWRWZWN0b3I7IG11c3QgY29tcGFyZSBvbmx5IG9uIGZpbGUgbmFtZSAqLwotICAgICAgICBib29sIG9wZXJhdG9yPCAoY29uc3QgRmlsZUluZm8mIHJocykgY29uc3QgewotICAgICAgICAgICAgcmV0dXJuIG1GaWxlTmFtZSA8IHJocy5tRmlsZU5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiB1c2VkIGJ5IEFzc2V0TWFuYWdlciAqLwotICAgICAgICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IEZpbGVJbmZvJiByaHMpIGNvbnN0IHsKLSAgICAgICAgICAgIHJldHVybiBtRmlsZU5hbWUgPT0gcmhzLm1GaWxlTmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0KGNvbnN0IFN0cmluZzgmIHBhdGgsIEZpbGVUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgIG1GaWxlTmFtZSA9IHBhdGg7Ci0gICAgICAgICAgICBtRmlsZVR5cGUgPSB0eXBlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgU3RyaW5nOCYgZ2V0RmlsZU5hbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbUZpbGVOYW1lOyB9Ci0gICAgICAgIHZvaWQgc2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nOCYgcGF0aCkgeyBtRmlsZU5hbWUgPSBwYXRoOyB9Ci0KLSAgICAgICAgRmlsZVR5cGUgZ2V0RmlsZVR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gbUZpbGVUeXBlOyB9Ci0gICAgICAgIHZvaWQgc2V0RmlsZVR5cGUoRmlsZVR5cGUgdHlwZSkgeyBtRmlsZVR5cGUgPSB0eXBlOyB9Ci0KLSAgICAgICAgY29uc3QgU3RyaW5nOCYgZ2V0U291cmNlTmFtZSh2b2lkKSBjb25zdCB7IHJldHVybiBtU291cmNlTmFtZTsgfQotICAgICAgICB2b2lkIHNldFNvdXJjZU5hbWUoY29uc3QgU3RyaW5nOCYgcGF0aCkgeyBtU291cmNlTmFtZSA9IHBhdGg7IH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBIYW5keSB1dGlsaXR5IGZvciBmaW5kaW5nIGFuIGVudHJ5IGluIGEgc29ydGVkIHZlY3RvciBvZiBGaWxlSW5mby4KLSAgICAgICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoaW5nIGVudHJ5LCBvciAtMSBpZiBub25lIGZvdW5kLgotICAgICAgICAgKi8KLSAgICAgICAgc3RhdGljIGludCBmaW5kRW50cnkoY29uc3QgU29ydGVkVmVjdG9yPEZpbGVJbmZvPiogcFZlY3RvciwKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIGZpbGVOYW1lKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cmluZzggICAgbUZpbGVOYW1lOyAgICAgIC8vIGZpbGVuYW1lIG9ubHkKLSAgICAgICAgRmlsZVR5cGUgICAgbUZpbGVUeXBlOyAgICAgIC8vIHJlZ3VsYXIsIGRpcmVjdG9yeSwgZXRjCi0KLSAgICAgICAgU3RyaW5nOCAgICBtU291cmNlTmFtZTsgICAgLy8gY3VycmVudGx5IGRlYnVnLW9ubHkKLSAgICB9OwotCi0gICAgLyogQXNzZXRNYW5hZ2VyIHVzZXMgdGhpcyB0byBpbml0aWFsaXplIHVzICovCi0gICAgdm9pZCBzZXRGaWxlTGlzdChTb3J0ZWRWZWN0b3I8RmlsZUluZm8+KiBsaXN0KSB7IG1GaWxlSW5mbyA9IGxpc3Q7IH0KLQotICAgIFNvcnRlZFZlY3RvcjxGaWxlSW5mbz4qIG1GaWxlSW5mbzsKLX07Ci0KLX07IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBfX0xJQlNfQVNTRVRESVJfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbmRyb2lkZncvQXNzZXRNYW5hZ2VyLmggYi9pbmNsdWRlL2FuZHJvaWRmdy9Bc3NldE1hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk1YjQ1ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FuZHJvaWRmdy9Bc3NldE1hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8KLS8vIEFzc2V0IG1hbmFnZW1lbnQgY2xhc3MuICBBc3NldE1hbmFnZXIgb2JqZWN0cyBhcmUgdGhyZWFkLXNhZmUuCi0vLwotI2lmbmRlZiBfX0xJQlNfQVNTRVRNQU5BR0VSX0gKLSNkZWZpbmUgX19MSUJTX0FTU0VUTUFOQUdFUl9ICi0KLSNpbmNsdWRlIDxhbmRyb2lkZncvQXNzZXQuaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvQXNzZXREaXIuaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvWmlwRmlsZVJPLmg+Ci0jaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9Tb3J0ZWRWZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmcxNi5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDx1dGlscy90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+Ci0KLS8qCi0gKiBOYXRpdmUtYXBwIGFjY2VzcyBpcyB2aWEgdGhlIG9wYXF1ZSB0eXBlZGVmIHN0cnVjdCBBQXNzZXRNYW5hZ2VyIGluIHRoZSBDIG5hbWVzcGFjZS4KLSAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1zdHJ1Y3QgQUFzc2V0TWFuYWdlciB7IH07Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfTsKLSNlbmRpZgotCi0KLS8qCi0gKiBOb3cgdGhlIHByb3BlciBDKysgYW5kcm9pZC1uYW1lc3BhY2UgZGVmaW5pdGlvbnMKLSAqLwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWNsYXNzIEFzc2V0OyAgICAgICAgLy8gZndkIGRlY2wgZm9yIHRoaW5ncyB0aGF0IGluY2x1ZGUgQXNzZXQuaCBmaXJzdAotY2xhc3MgUmVzVGFibGU7Ci1zdHJ1Y3QgUmVzVGFibGVfY29uZmlnOwotCi0vKgotICogRXZlcnkgYXBwbGljYXRpb24gdGhhdCB1c2VzIGFzc2V0cyBuZWVkcyBvbmUgaW5zdGFuY2Ugb2YgdGhpcy4gIEEKLSAqIHNpbmdsZSBpbnN0YW5jZSBtYXkgYmUgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSB0aHJlYWRzLCBhbmQgYSBzaW5nbGUKLSAqIHRocmVhZCBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIGluc3RhbmNlICh0aGUgbGF0dGVyIGlzIGRpc2NvdXJhZ2VkKS4KLSAqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGUgQXNzZXRNYW5hZ2VyIGlzIHRvIGNyZWF0ZSBBc3NldCBvYmplY3RzLiAgVG8gZG8KLSAqIHRoaXMgZWZmaWNpZW50bHkgaXQgbWF5IGNhY2hlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbnMgb2YKLSAqIGZpbGVzIGl0IGhhcyBzZWVuLiAgVGhpcyBjYW4gYmUgY29udHJvbGxlZCB3aXRoIHRoZSAiY2FjaGVNb2RlIgotICogYXJndW1lbnQuCi0gKgotICogVGhlIGFzc2V0IGhpZXJhcmNoeSBtYXkgYmUgZXhhbWluZWQgbGlrZSBhIGZpbGVzeXN0ZW0sIHVzaW5nCi0gKiBBc3NldERpciBvYmplY3RzIHRvIHBlcnVzZSBhIHNpbmdsZSBkaXJlY3RvcnkuCi0gKi8KLWNsYXNzIEFzc2V0TWFuYWdlciA6IHB1YmxpYyBBQXNzZXRNYW5hZ2VyIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIGVudW0gQ2FjaGVNb2RlIHsKLSAgICAgICAgQ0FDSEVfVU5LTk9XTiA9IDAsCi0gICAgICAgIENBQ0hFX09GRiwgICAgICAgICAgLy8gZG9uJ3QgdHJ5IHRvIGNhY2hlIGZpbGUgbG9jYXRpb25zCi0gICAgICAgIENBQ0hFX0RFRkVSLCAgICAgICAgLy8gY29uc3RydWN0IGNhY2hlIGFzIHBpZWNlcyBhcmUgbmVlZGVkCi0gICAgICAgIC8vQ0FDSEVfU0NBTiwgICAgICAgICAvLyBzY2FuIGZ1bGwoISkgYXNzZXQgaGllcmFyY2h5IGF0IGluaXQoKSB0aW1lCi0gICAgfSBDYWNoZU1vZGU7Ci0KLSAgICBBc3NldE1hbmFnZXIoQ2FjaGVNb2RlIGNhY2hlTW9kZSA9IENBQ0hFX09GRik7Ci0gICAgdmlydHVhbCB+QXNzZXRNYW5hZ2VyKHZvaWQpOwotCi0gICAgc3RhdGljIGludDMyX3QgZ2V0R2xvYmFsQ291bnQoKTsKLSAgICAKLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICogQWRkIGEgbmV3IHNvdXJjZSBmb3IgYXNzZXRzLiAgVGhpcyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvCi0gICAgICogbG9vayBpbiBtdWx0aXBsZSBwbGFjZXMgZm9yIGFzc2V0cy4gIEl0IGNhbiBiZSBlaXRoZXIgYSBkaXJlY3RvcnkgKGZvcgotICAgICAqIGZpbmRpbmcgYXNzZXRzIGFzIHJhdyBmaWxlcyBvbiB0aGUgZGlzaykgb3IgYSBaSVAgZmlsZS4gIFRoaXMgbmV3bHkKLSAgICAgKiBhZGRlZCBhc3NldCBwYXRoIHdpbGwgYmUgZXhhbWluZWQgZmlyc3Qgd2hlbiBzZWFyY2hpbmcgZm9yIGFzc2V0cywKLSAgICAgKiBiZWZvcmUgYW55IHRoYXQgd2VyZSBwcmV2aW91c2x5IGFkZGVkLgotICAgICAqCi0gICAgICogUmV0dXJucyAidHJ1ZSIgb24gc3VjY2VzcywgImZhbHNlIiBvbiBmYWlsdXJlLiAgSWYgJ2Nvb2tpZScgaXMgbm9uLU5VTEwsCi0gICAgICogdGhlbiBvbiBzdWNjZXNzLCAqY29va2llIGlzIHNldCB0byB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUKLSAgICAgKiBuZXdseS1hZGRlZCBhc3NldCBzb3VyY2UuCi0gICAgICovCi0gICAgYm9vbCBhZGRBc3NldFBhdGgoY29uc3QgU3RyaW5nOCYgcGF0aCwgdm9pZCoqIGNvb2tpZSk7Ci0KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICogQ29udmVuaWVuY2UgZm9yIGFkZGluZyB0aGUgc3RhbmRhcmQgc3lzdGVtIGFzc2V0cy4gIFVzZXMgdGhlCi0gICAgICogQU5EUk9JRF9ST09UIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGZpbmQgdGhlbS4KLSAgICAgKi8KLSAgICBib29sIGFkZERlZmF1bHRBc3NldHMoKTsKLQotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgKiBJdGVyYXRlIG92ZXIgdGhlIGFzc2V0IHBhdGhzIGluIHRoaXMgbWFuYWdlci4gIChQcmV2aW91c2x5Ci0gICAgICogYWRkZWQgdmlhIGFkZEFzc2V0UGF0aCgpIGFuZCBhZGREZWZhdWx0QXNzZXRzKCkuKSAgT24gZmlyc3QgY2FsbCwKLSAgICAgKiAnY29va2llJyBtdXN0IGJlIE5VTEwsIHJlc3VsdGluZyBpbiB0aGUgZmlyc3QgY29va2llIGJlaW5nIHJldHVybmVkLgotICAgICAqIEVhY2ggbmV4dCBjb29raWUgd2lsbCBiZSByZXR1cm5lZCB0aGVyZS1hZnRlciwgdW50aWwgTlVMTCBpbmRpY2F0aW5nCi0gICAgICogdGhlIGVuZCBoYXMgYmVlbiByZWFjaGVkLgotICAgICAqLwotICAgIHZvaWQqIG5leHRBc3NldFBhdGgodm9pZCogY29va2llKSBjb25zdDsKLQotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgKiBSZXR1cm4gYW4gYXNzZXQgcGF0aCBpbiB0aGUgbWFuYWdlci4gICd3aGljaCcgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kCi0gICAgICogY291bnRBc3NldFBhdGhzKCkuCi0gICAgICovCi0gICAgU3RyaW5nOCBnZXRBc3NldFBhdGgodm9pZCogY29va2llKSBjb25zdDsKLQotICAgIC8qCi0gICAgICogU2V0IHRoZSBjdXJyZW50IGxvY2FsZSBhbmQgdmVuZG9yLiAgVGhlIGxvY2FsZSBjYW4gY2hhbmdlIGR1cmluZwotICAgICAqIHRoZSBsaWZldGltZSBvZiBhbiBBc3NldE1hbmFnZXIgaWYgdGhlIHVzZXIgdXBkYXRlcyB0aGUgZGV2aWNlJ3MKLSAgICAgKiBsYW5ndWFnZSBzZXR0aW5nLiAgVGhlIHZlbmRvciBpcyBsZXNzIGxpa2VseSB0byBjaGFuZ2UuCi0gICAgICoKLSAgICAgKiBQYXNzIGluIE5VTEwgdG8gaW5kaWNhdGUgbm8gcHJlZmVyZW5jZS4KLSAgICAgKi8KLSAgICB2b2lkIHNldExvY2FsZShjb25zdCBjaGFyKiBsb2NhbGUpOwotICAgIHZvaWQgc2V0VmVuZG9yKGNvbnN0IGNoYXIqIHZlbmRvcik7Ci0KLSAgICAvKgotICAgICAqIENob29zZSBzY3JlZW4gb3JpZW50YXRpb24gZm9yIHJlc291cmNlcyB2YWx1ZXMgcmV0dXJuZWQuCi0gICAgICovCi0gICAgdm9pZCBzZXRDb25maWd1cmF0aW9uKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgY29uZmlnLCBjb25zdCBjaGFyKiBsb2NhbGUgPSBOVUxMKTsKLQotICAgIHZvaWQgZ2V0Q29uZmlndXJhdGlvbihSZXNUYWJsZV9jb25maWcqIG91dENvbmZpZykgY29uc3Q7Ci0KLSAgICB0eXBlZGVmIEFzc2V0OjpBY2Nlc3NNb2RlIEFjY2Vzc01vZGU7ICAgICAgIC8vIHR5cGluZyBzaG9ydGN1dAotCi0gICAgLyoKLSAgICAgKiBPcGVuIGFuIGFzc2V0LgotICAgICAqCi0gICAgICogVGhpcyB3aWxsIHNlYXJjaCB0aHJvdWdoIGxvY2FsZS1zcGVjaWZpYyBhbmQgdmVuZG9yLXNwZWNpZmljCi0gICAgICogZGlyZWN0b3JpZXMgYW5kIHBhY2thZ2VzIHRvIGZpbmQgdGhlIGZpbGUuCi0gICAgICoKLSAgICAgKiBUaGUgb2JqZWN0IHJldHVybmVkIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgQXNzZXRNYW5hZ2VyLiAgSXQgc2hvdWxkCi0gICAgICogYmUgZnJlZWQgYnkgY2FsbGluZyBBc3NldDo6Y2xvc2UoKS4KLSAgICAgKi8KLSAgICBBc3NldCogb3Blbihjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlKTsKLQotICAgIC8qCi0gICAgICogT3BlbiBhIG5vbi1hc3NldCBmaWxlIGFzIGFuIGFzc2V0LgotICAgICAqCi0gICAgICogVGhpcyBpcyBmb3Igb3BlbmluZyBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiBhbiBhc3NldCBwYWNrYWdlCi0gICAgICogYnV0IGFyZW4ndCBhc3NldHMuICBUaGVzZSBzaXQgb3V0c2lkZSB0aGUgdXN1YWwgImxvY2FsZS92ZW5kb3IiCi0gICAgICogcGF0aCBoaWVyYXJjaHksIGFuZCB3aWxsIG5vdCBiZSBzZWVuIGJ5ICJBc3NldERpciIgb3IgaW5jbHVkZWQKLSAgICAgKiBpbiBvdXIgZmlsZW5hbWUgY2FjaGUuCi0gICAgICovCi0gICAgQXNzZXQqIG9wZW5Ob25Bc3NldChjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlKTsKLQotICAgIC8qCi0gICAgICogRXhwbGljaXQgbm9uLWFzc2V0IGZpbGUuICBUaGUgZmlsZSBleHBsaWNpdGx5IG5hbWVkIGJ5IHRoZSBjb29raWUgKHRoZQotICAgICAqIHJlc291cmNlIHNldCB0byBsb29rIGluKSBhbmQgZmlsZU5hbWUgd2lsbCBiZSBvcGVuZWQgYW5kIHJldHVybmVkLgotICAgICAqLwotICAgIEFzc2V0KiBvcGVuTm9uQXNzZXQodm9pZCogY29va2llLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlKTsKLQotICAgIC8qCi0gICAgICogT3BlbiBhIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGFzc2V0IGhpZXJhcmNoeS4KLSAgICAgKgotICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IGFyZSBhbiBhbWFsZ2FtIG9mIHZlbmRvci1zcGVjaWZpYywKLSAgICAgKiBsb2NhbGUtc3BlY2lmaWMsIGFuZCBnZW5lcmljIGFzc2V0cyBzdG9yZWQgbG9vc2VseSBvciBpbiBhc3NldAotICAgICAqIHBhY2thZ2VzLiAgRGVwZW5kaW5nIG9uIHRoZSBjYWNoZSBzZXR0aW5nIGFuZCBwcmV2aW91cyBhY2Nlc3NlcywKLSAgICAgKiB0aGlzIGNhbGwgbWF5IGluY3VyIHNpZ25pZmljYW50IGRpc2sgb3ZlcmhlYWQuCi0gICAgICoKLSAgICAgKiBUbyBvcGVuIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LCBwYXNzIGluICIiLgotICAgICAqLwotICAgIEFzc2V0RGlyKiBvcGVuRGlyKGNvbnN0IGNoYXIqIGRpck5hbWUpOwotCi0gICAgLyoKLSAgICAgKiBPcGVuIGEgZGlyZWN0b3J5IHdpdGhpbiBhIHBhcnRpY3VsYXIgcGF0aCBvZiB0aGUgYXNzZXQgbWFuYWdlci4KLSAgICAgKgotICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IGFyZSBhbiBhbWFsZ2FtIG9mIHZlbmRvci1zcGVjaWZpYywKLSAgICAgKiBsb2NhbGUtc3BlY2lmaWMsIGFuZCBnZW5lcmljIGFzc2V0cyBzdG9yZWQgbG9vc2VseSBvciBpbiBhc3NldAotICAgICAqIHBhY2thZ2VzLiAgRGVwZW5kaW5nIG9uIHRoZSBjYWNoZSBzZXR0aW5nIGFuZCBwcmV2aW91cyBhY2Nlc3NlcywKLSAgICAgKiB0aGlzIGNhbGwgbWF5IGluY3VyIHNpZ25pZmljYW50IGRpc2sgb3ZlcmhlYWQuCi0gICAgICoKLSAgICAgKiBUbyBvcGVuIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LCBwYXNzIGluICIiLgotICAgICAqLwotICAgIEFzc2V0RGlyKiBvcGVuTm9uQXNzZXREaXIodm9pZCogY29va2llLCBjb25zdCBjaGFyKiBkaXJOYW1lKTsKLQotICAgIC8qCi0gICAgICogR2V0IHRoZSB0eXBlIG9mIGEgZmlsZSBpbiB0aGUgYXNzZXQgaGllcmFyY2h5LiAgVGhleSB3aWxsIGVpdGhlcgotICAgICAqIGJlICJyZWd1bGFyIiBvciAiZGlyZWN0b3J5Ii4gIFtDdXJyZW50bHkgb25seSB3b3JrcyBmb3IgInJlZ3VsYXIiLl0KLSAgICAgKgotICAgICAqIENhbiBhbHNvIGJlIHVzZWQgYXMgYSBxdWljayB0ZXN0IGZvciBleGlzdGVuY2Ugb2YgYSBmaWxlLgotICAgICAqLwotICAgIEZpbGVUeXBlIGdldEZpbGVUeXBlKGNvbnN0IGNoYXIqIGZpbGVOYW1lKTsKLQotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgKiBSZXR1cm4gdGhlIGNvbXBsZXRlIHJlc291cmNlIHRhYmxlIHRvIGZpbmQgdGhpbmdzIGluIHRoZSBwYWNrYWdlLgotICAgICAqLwotICAgIGNvbnN0IFJlc1RhYmxlJiBnZXRSZXNvdXJjZXMoYm9vbCByZXF1aXJlZCA9IHRydWUpIGNvbnN0OwotCi0gICAgLyoKLSAgICAgKiBEaXNjYXJkIGNhY2hlZCBmaWxlbmFtZSBpbmZvcm1hdGlvbi4gIFRoaXMgb25seSBuZWVkcyB0byBiZSBjYWxsZWQKLSAgICAgKiBpZiBzb21lYm9keSBoYXMgdXBkYXRlZCB0aGUgc2V0IG9mICJsb29zZSIgZmlsZXMsIGFuZCB3ZSB3YW50IHRvCi0gICAgICogZGlzY2FyZCBvdXIgY2FjaGVkIG5vdGlvbiBvZiB3aGF0J3Mgd2hlcmUuCi0gICAgICovCi0gICAgdm9pZCBwdXJnZSh2b2lkKSB7IHB1cmdlRmlsZU5hbWVDYWNoZUxvY2tlZCgpOyB9Ci0KLSAgICAvKgotICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBmaWxlcyB0aGlzIEFzc2V0TWFuYWdlciByZWZlcmVuY2VzIGFyZSBhbGwKLSAgICAgKiB1cC10by1kYXRlIChoYXZlIG5vdCBiZWVuIGNoYW5nZWQgc2luY2UgaXQgd2FzIGNyZWF0ZWQpLiAgSWYgZmFsc2UKLSAgICAgKiBpcyByZXR1cm5lZCwgeW91IHdpbGwgbmVlZCB0byBjcmVhdGUgYSBuZXcgQXNzZXRNYW5hZ2VyIHRvIGdldAotICAgICAqIHRoZSBjdXJyZW50IGRhdGEuCi0gICAgICovCi0gICAgYm9vbCBpc1VwVG9EYXRlKCk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogR2V0IHRoZSBrbm93biBsb2NhbGVzIGZvciB0aGlzIGFzc2V0IG1hbmFnZXIgb2JqZWN0LgotICAgICAqLwotICAgIHZvaWQgZ2V0TG9jYWxlcyhWZWN0b3I8U3RyaW5nOD4qIGxvY2FsZXMpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBhc3NldF9wYXRoCi0gICAgewotICAgICAgICBTdHJpbmc4IHBhdGg7Ci0gICAgICAgIEZpbGVUeXBlIHR5cGU7Ci0gICAgICAgIFN0cmluZzggaWRtYXA7Ci0gICAgfTsKLQotICAgIEFzc2V0KiBvcGVuSW5QYXRoTG9ja2VkKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBBY2Nlc3NNb2RlIG1vZGUsCi0gICAgICAgIGNvbnN0IGFzc2V0X3BhdGgmIHBhdGgpOwotICAgIEFzc2V0KiBvcGVuTm9uQXNzZXRJblBhdGhMb2NrZWQoY29uc3QgY2hhciogZmlsZU5hbWUsIEFjY2Vzc01vZGUgbW9kZSwKLSAgICAgICAgY29uc3QgYXNzZXRfcGF0aCYgcGF0aCk7Ci0gICAgQXNzZXQqIG9wZW5JbkxvY2FsZVZlbmRvckxvY2tlZChjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlLAotICAgICAgICBjb25zdCBhc3NldF9wYXRoJiBwYXRoLCBjb25zdCBjaGFyKiBsb2NhbGUsIGNvbnN0IGNoYXIqIHZlbmRvcik7Ci0gICAgU3RyaW5nOCBjcmVhdGVQYXRoTmFtZUxvY2tlZChjb25zdCBhc3NldF9wYXRoJiBwYXRoLCBjb25zdCBjaGFyKiBsb2NhbGUsCi0gICAgICAgIGNvbnN0IGNoYXIqIHZlbmRvcik7Ci0gICAgU3RyaW5nOCBjcmVhdGVQYXRoTmFtZUxvY2tlZChjb25zdCBhc3NldF9wYXRoJiBwYXRoLCBjb25zdCBjaGFyKiByb290RGlyKTsKLSAgICBTdHJpbmc4IGNyZWF0ZVppcFNvdXJjZU5hbWVMb2NrZWQoY29uc3QgU3RyaW5nOCYgemlwRmlsZU5hbWUsCi0gICAgICAgIGNvbnN0IFN0cmluZzgmIGRpck5hbWUsIGNvbnN0IFN0cmluZzgmIGZpbGVOYW1lKTsKLQotICAgIFppcEZpbGVSTyogZ2V0WmlwRmlsZUxvY2tlZChjb25zdCBhc3NldF9wYXRoJiBwYXRoKTsKLSAgICBBc3NldCogb3BlbkFzc2V0RnJvbUZpbGVMb2NrZWQoY29uc3QgU3RyaW5nOCYgZmlsZU5hbWUsIEFjY2Vzc01vZGUgbW9kZSk7Ci0gICAgQXNzZXQqIG9wZW5Bc3NldEZyb21aaXBMb2NrZWQoY29uc3QgWmlwRmlsZVJPKiBwWmlwRmlsZSwKLSAgICAgICAgY29uc3QgWmlwRW50cnlSTyBlbnRyeSwgQWNjZXNzTW9kZSBtb2RlLCBjb25zdCBTdHJpbmc4JiBlbnRyeU5hbWUpOwotCi0gICAgYm9vbCBzY2FuQW5kTWVyZ2VEaXJMb2NrZWQoU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBNZXJnZWRJbmZvLAotICAgICAgICBjb25zdCBhc3NldF9wYXRoJiBwYXRoLCBjb25zdCBjaGFyKiByb290RGlyLCBjb25zdCBjaGFyKiBkaXJOYW1lKTsKLSAgICBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogc2NhbkRpckxvY2tlZChjb25zdCBTdHJpbmc4JiBwYXRoKTsKLSAgICBib29sIHNjYW5BbmRNZXJnZVppcExvY2tlZChTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcE1lcmdlZEluZm8sCi0gICAgICAgIGNvbnN0IGFzc2V0X3BhdGgmIHBhdGgsIGNvbnN0IGNoYXIqIHJvb3REaXIsIGNvbnN0IGNoYXIqIGRpck5hbWUpOwotICAgIHZvaWQgbWVyZ2VJbmZvTG9ja2VkKFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+KiBwTWVyZ2VkSW5mbywKLSAgICAgICAgY29uc3QgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBDb250ZW50cyk7Ci0KLSAgICB2b2lkIGxvYWRGaWxlTmFtZUNhY2hlTG9ja2VkKHZvaWQpOwotICAgIHZvaWQgZm5jU2NhbkxvY2tlZChTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcE1lcmdlZEluZm8sCi0gICAgICAgIGNvbnN0IGNoYXIqIGRpck5hbWUpOwotICAgIGJvb2wgZm5jU2NhbkFuZE1lcmdlRGlyTG9ja2VkKAotICAgICAgICBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcE1lcmdlZEluZm8sCi0gICAgICAgIGNvbnN0IGFzc2V0X3BhdGgmIHBhdGgsIGNvbnN0IGNoYXIqIGxvY2FsZSwgY29uc3QgY2hhciogdmVuZG9yLAotICAgICAgICBjb25zdCBjaGFyKiBkaXJOYW1lKTsKLSAgICB2b2lkIHB1cmdlRmlsZU5hbWVDYWNoZUxvY2tlZCh2b2lkKTsKLQotICAgIGNvbnN0IFJlc1RhYmxlKiBnZXRSZXNUYWJsZShib29sIHJlcXVpcmVkID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMb2NhbGVMb2NrZWQoY29uc3QgY2hhciogbG9jYWxlKTsKLSAgICB2b2lkIHVwZGF0ZVJlc291cmNlUGFyYW1zTG9ja2VkKCkgY29uc3Q7Ci0KLSAgICBib29sIGNyZWF0ZUlkbWFwRmlsZUxvY2tlZChjb25zdCBTdHJpbmc4JiBvcmlnaW5hbFBhdGgsIGNvbnN0IFN0cmluZzgmIG92ZXJsYXlQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIGlkbWFwUGF0aCk7Ci0KLSAgICBib29sIGlzSWRtYXBTdGFsZUxvY2tlZChjb25zdCBTdHJpbmc4JiBvcmlnaW5hbFBhdGgsIGNvbnN0IFN0cmluZzgmIG92ZXJsYXlQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIGlkbWFwUGF0aCk7Ci0KLSAgICBBc3NldCogb3BlbklkbWFwTG9ja2VkKGNvbnN0IHN0cnVjdCBhc3NldF9wYXRoJiBhcCkgY29uc3Q7Ci0KLSAgICBib29sIGdldFppcEVudHJ5Q3JjTG9ja2VkKGNvbnN0IFN0cmluZzgmIHppcFBhdGgsIGNvbnN0IGNoYXIqIGVudHJ5RmlsZW5hbWUsIHVpbnQzMl90KiBwQ3JjKTsKLQotICAgIGNsYXNzIFNoYXJlZFppcCA6IHB1YmxpYyBSZWZCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBzcDxTaGFyZWRaaXA+IGdldChjb25zdCBTdHJpbmc4JiBwYXRoKTsKLQotICAgICAgICBaaXBGaWxlUk8qIGdldFppcCgpOwotCi0gICAgICAgIEFzc2V0KiBnZXRSZXNvdXJjZVRhYmxlQXNzZXQoKTsKLSAgICAgICAgQXNzZXQqIHNldFJlc291cmNlVGFibGVBc3NldChBc3NldCogYXNzZXQpOwotCi0gICAgICAgIFJlc1RhYmxlKiBnZXRSZXNvdXJjZVRhYmxlKCk7Ci0gICAgICAgIFJlc1RhYmxlKiBzZXRSZXNvdXJjZVRhYmxlKFJlc1RhYmxlKiByZXMpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBpc1VwVG9EYXRlKCk7Ci0gICAgICAgIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgflNoYXJlZFppcCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU2hhcmVkWmlwKGNvbnN0IFN0cmluZzgmIHBhdGgsIHRpbWVfdCBtb2RXaGVuKTsKLSAgICAgICAgU2hhcmVkWmlwKCk7IC8vIDwtLSBub3QgaW1wbGVtZW50ZWQKLQotICAgICAgICBTdHJpbmc4IG1QYXRoOwotICAgICAgICBaaXBGaWxlUk8qIG1aaXBGaWxlOwotICAgICAgICB0aW1lX3QgbU1vZFdoZW47Ci0KLSAgICAgICAgQXNzZXQqIG1SZXNvdXJjZVRhYmxlQXNzZXQ7Ci0gICAgICAgIFJlc1RhYmxlKiBtUmVzb3VyY2VUYWJsZTsKLQotICAgICAgICBzdGF0aWMgTXV0ZXggZ0xvY2s7Ci0gICAgICAgIHN0YXRpYyBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nOCwgd3A8U2hhcmVkWmlwPiA+IGdPcGVuOwotICAgIH07Ci0KLSAgICAvKgotICAgICAqIE1hbmFnZSBhIHNldCBvZiBaaXAgZmlsZXMuICBGb3IgZWFjaCBmaWxlIHdlIG5lZWQgYSBwb2ludGVyIHRvIHRoZQotICAgICAqIFppcEZpbGUgYW5kIGEgdGltZV90IHdpdGggdGhlIGZpbGUncyBtb2RpZmljYXRpb24gZGF0ZS4KLSAgICAgKgotICAgICAqIFdlIGN1cnJlbnRseSBvbmx5IGhhdmUgdHdvIHppcCBmaWxlcyAoY3VycmVudCBhcHAsICJjb21tb24iIGFwcCkuCi0gICAgICogKFRoaXMgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgOCwgYmFzZWQgb24gYXBwL2xvY2FsZS92ZW5kb3IuKQotICAgICAqLwotICAgIGNsYXNzIFppcFNldCB7Ci0gICAgcHVibGljOgotICAgICAgICBaaXBTZXQodm9pZCk7Ci0gICAgICAgIH5aaXBTZXQodm9pZCk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogUmV0dXJuIGEgWmlwRmlsZVJPIHN0cnVjdHVyZSBmb3IgYSBaaXBGaWxlUk8gd2l0aCB0aGUgc3BlY2lmaWVkCi0gICAgICAgICAqIHBhcmFtZXRlcnMuCi0gICAgICAgICAqLwotICAgICAgICBaaXBGaWxlUk8qIGdldFppcChjb25zdCBTdHJpbmc4JiBwYXRoKTsKLQotICAgICAgICBBc3NldCogZ2V0WmlwUmVzb3VyY2VUYWJsZUFzc2V0KGNvbnN0IFN0cmluZzgmIHBhdGgpOwotICAgICAgICBBc3NldCogc2V0WmlwUmVzb3VyY2VUYWJsZUFzc2V0KGNvbnN0IFN0cmluZzgmIHBhdGgsIEFzc2V0KiBhc3NldCk7Ci0KLSAgICAgICAgUmVzVGFibGUqIGdldFppcFJlc291cmNlVGFibGUoY29uc3QgU3RyaW5nOCYgcGF0aCk7Ci0gICAgICAgIFJlc1RhYmxlKiBzZXRaaXBSZXNvdXJjZVRhYmxlKGNvbnN0IFN0cmluZzgmIHBhdGgsIFJlc1RhYmxlKiByZXMpOwotCi0gICAgICAgIC8vIGdlbmVyYXRlIHBhdGgsIGUuZy4gImNvbW1vbi9lbi1VUy1ub29nbGUuemlwIgotICAgICAgICBzdGF0aWMgU3RyaW5nOCBnZXRQYXRoTmFtZShjb25zdCBjaGFyKiBwYXRoKTsKLQotICAgICAgICBib29sIGlzVXBUb0RhdGUoKTsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBjbG9zZVppcChpbnQgaWR4KTsKLQotICAgICAgICBpbnQgZ2V0SW5kZXgoY29uc3QgU3RyaW5nOCYgemlwKSBjb25zdDsKLSAgICAgICAgbXV0YWJsZSBWZWN0b3I8U3RyaW5nOD4gbVppcFBhdGg7Ci0gICAgICAgIG11dGFibGUgVmVjdG9yPHNwPFNoYXJlZFppcD4gPiBtWmlwRmlsZTsKLSAgICB9OwotCi0gICAgLy8gUHJvdGVjdCBhbGwgaW50ZXJuYWwgc3RhdGUuCi0gICAgbXV0YWJsZSBNdXRleCAgIG1Mb2NrOwotCi0gICAgWmlwU2V0ICAgICAgICAgIG1aaXBTZXQ7Ci0KLSAgICBWZWN0b3I8YXNzZXRfcGF0aD4gbUFzc2V0UGF0aHM7Ci0gICAgY2hhciogICAgICAgICAgIG1Mb2NhbGU7Ci0gICAgY2hhciogICAgICAgICAgIG1WZW5kb3I7Ci0KLSAgICBtdXRhYmxlIFJlc1RhYmxlKiBtUmVzb3VyY2VzOwotICAgIFJlc1RhYmxlX2NvbmZpZyogbUNvbmZpZzsKLQotICAgIC8qCi0gICAgICogQ2FjaGVkIGRhdGEgZm9yICJsb29zZSIgZmlsZXMuICBUaGlzIGxldHMgdXMgYXZvaWQgcG9raW5nIGF0IHRoZQotICAgICAqIGZpbGVzeXN0ZW0gd2hlbiBzZWFyY2hpbmcgZm9yIGxvb3NlIGFzc2V0cy4gIEVhY2ggZW50cnkgaXMgdGhlCi0gICAgICogImV4dGVuZGVkIHBhcnRpYWwiIHBhdGgsIGUuZy4gImRlZmF1bHQvZGVmYXVsdC9mb28vYmFyLnR4dCIuICBUaGUKLSAgICAgKiBmdWxsIHNldCBvZiBmaWxlcyBpcyBwcmVzZW50LCBpbmNsdWRpbmcgIi5FWENMVURFIiBlbnRyaWVzLgotICAgICAqCi0gICAgICogV2UgZG8gbm90IGNhY2hlIGRpcmVjdG9yeSBuYW1lcy4gIFdlIGRvbid0IHJldGFpbiB0aGUgIi5neiIsCi0gICAgICogYmVjYXVzZSB0byBvdXIgY2xpZW50cyAiZm9vIiBhbmQgImZvby5neiIgYm90aCBsb29rIGxpa2UgImZvbyIuCi0gICAgICovCi0gICAgQ2FjaGVNb2RlICAgICAgIG1DYWNoZU1vZGU7ICAgICAgICAgLy8gaXMgdGhlIGNhY2hlIGVuYWJsZWQ/Ci0gICAgYm9vbCAgICAgICAgICAgIG1DYWNoZVZhbGlkOyAgICAgICAgLy8gY2xlYXIgd2hlbiBsb2NhbGUgb3IgdmVuZG9yIGNoYW5nZXMKLSAgICBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiBtQ2FjaGU7Ci19OwotCi19OyAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gX19MSUJTX0FTU0VUTUFOQUdFUl9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FuZHJvaWRmdy9CYWNrdXBIZWxwZXJzLmggYi9pbmNsdWRlL2FuZHJvaWRmdy9CYWNrdXBIZWxwZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYjA0YTcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hbmRyb2lkZncvQmFja3VwSGVscGVycy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIF9VVElMU19CQUNLVVBfSEVMUEVSU19ICi0jZGVmaW5lIF9VVElMU19CQUNLVVBfSEVMUEVSU19ICi0KLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1lbnVtIHsKLSAgICBCQUNLVVBfSEVBREVSX0VOVElUWV9WMSA9IDB4NjE3NDYxNDQsIC8vIERhdGEgKGxpdHRsZSBlbmRpYW4pCi19OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgaW50IHR5cGU7IC8vIEJBQ0tVUF9IRUFERVJfRU5USVRZX1YxCi0gICAgaW50IGtleUxlbjsgLy8gbGVuZ3RoIG9mIHRoZSBrZXkgbmFtZSwgbm90IGluY2x1ZGluZyB0aGUgbnVsbCB0ZXJtaW5hdG9yCi0gICAgaW50IGRhdGFTaXplOyAvLyBzaXplIG9mIHRoZSBkYXRhLCBub3QgaW5jbHVkaW5nIHRoZSBwYWRkaW5nLCAtMSBtZWFucyBkZWxldGUKLX0gZW50aXR5X2hlYWRlcl92MTsKLQotc3RydWN0IFNuYXBzaG90SGVhZGVyIHsKLSAgICBpbnQgbWFnaWMwOwotICAgIGludCBmaWxlQ291bnQ7Ci0gICAgaW50IG1hZ2ljMTsKLSAgICBpbnQgdG90YWxTaXplOwotfTsKLQotc3RydWN0IEZpbGVTdGF0ZSB7Ci0gICAgaW50IG1vZFRpbWVfc2VjOwotICAgIGludCBtb2RUaW1lX25zZWM7Ci0gICAgaW50IG1vZGU7Ci0gICAgaW50IHNpemU7Ci0gICAgaW50IGNyYzMyOwotICAgIGludCBuYW1lTGVuOwotfTsKLQotc3RydWN0IEZpbGVSZWMgewotICAgIFN0cmluZzggZmlsZTsKLSAgICBib29sIGRlbGV0ZWQ7Ci0gICAgRmlsZVN0YXRlIHM7Ci19OwotCi0KLS8qKgotICogV3JpdGVzIHRoZSBkYXRhLgotICoKLSAqIElmIGFuIGVycm9yIG9jY3VycywgaXQgcG9pc29ucyB0aGlzIG9iamVjdCBhbmQgYWxsIHdyaXRlIGNhbGxzIHdpbGwgZmFpbAotICogd2l0aCB0aGUgZXJyb3IgdGhhdCBvY2N1cnJlZC4KLSAqLwotY2xhc3MgQmFja3VwRGF0YVdyaXRlcgotewotcHVibGljOgotICAgIEJhY2t1cERhdGFXcml0ZXIoaW50IGZkKTsKLSAgICAvLyBkb2VzIG5vdCBjbG9zZSBmZAotICAgIH5CYWNrdXBEYXRhV3JpdGVyKCk7Ci0KLSAgICBzdGF0dXNfdCBXcml0ZUVudGl0eUhlYWRlcihjb25zdCBTdHJpbmc4JiBrZXksIHNpemVfdCBkYXRhU2l6ZSk7Ci0KLSAgICAvKiBOb3RlOiBXcml0ZUVudGl0eURhdGEgd2lsbCB3cml0ZSBhcmJpdHJhcnkgZGF0YSBpbnRvIHRoZSBmaWxlIHdpdGhvdXQKLSAgICAgKiB2YWxpZGF0aW9uIG9yIGEgcHJldmlvdXNseS1zdXBwbGllZCBoZWFkZXIuICBUaGUgZnVsbCBiYWNrdXAgaW1wbGVtZW50YXRpb24KLSAgICAgKiB1c2VzIGl0IHRoaXMgd2F5IHRvIGdlbmVyYXRlIGEgY29udHJvbGxlZCBiaW5hcnkgc3RyZWFtIHRoYXQgaXMgbm90Ci0gICAgICogZW50aXR5LXN0cnVjdHVyZWQuICBJZiB0aGUgaW1wbGVtZW50YXRpb24gaGVyZSBpcyBjaGFuZ2VkLCBlaXRoZXIgdGhpcwotICAgICAqIHVzZSBjYXNlIG11c3QgcmVtYWluIHZhbGlkLCBvciB0aGUgZnVsbCBiYWNrdXAgaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlCi0gICAgICogYWRqdXN0ZWQgdG8gdXNlIHNvbWUgb3RoZXIgYXBwcm9wcmlhdGUgbWVjaGFuaXNtLgotICAgICAqLwotICAgIHN0YXR1c190IFdyaXRlRW50aXR5RGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSk7Ci0KLSAgICB2b2lkIFNldEtleVByZWZpeChjb25zdCBTdHJpbmc4JiBrZXlQcmVmaXgpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IEJhY2t1cERhdGFXcml0ZXIoKTsKLSAgICBzdGF0dXNfdCB3cml0ZV9wYWRkaW5nX2ZvcihpbnQgbik7Ci0gICAgCi0gICAgaW50IG1fZmQ7Ci0gICAgc3RhdHVzX3QgbV9zdGF0dXM7Ci0gICAgc3NpemVfdCBtX3BvczsKLSAgICBpbnQgbV9lbnRpdHlDb3VudDsKLSAgICBTdHJpbmc4IG1fa2V5UHJlZml4OwotfTsKLQotLyoqCi0gKiBSZWFkcyB0aGUgZGF0YS4KLSAqCi0gKiBJZiBhbiBlcnJvciBvY2N1cnMsIGl0IHBvaXNvbnMgdGhpcyBvYmplY3QgYW5kIGFsbCB3cml0ZSBjYWxscyB3aWxsIGZhaWwKLSAqIHdpdGggdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQuCi0gKi8KLWNsYXNzIEJhY2t1cERhdGFSZWFkZXIKLXsKLXB1YmxpYzoKLSAgICBCYWNrdXBEYXRhUmVhZGVyKGludCBmZCk7Ci0gICAgLy8gZG9lcyBub3QgY2xvc2UgZmQKLSAgICB+QmFja3VwRGF0YVJlYWRlcigpOwotCi0gICAgc3RhdHVzX3QgU3RhdHVzKCk7Ci0gICAgc3RhdHVzX3QgUmVhZE5leHRIZWFkZXIoYm9vbCogZG9uZSwgaW50KiB0eXBlKTsKLQotICAgIGJvb2wgSGFzRW50aXRpZXMoKTsKLSAgICBzdGF0dXNfdCBSZWFkRW50aXR5SGVhZGVyKFN0cmluZzgqIGtleSwgc2l6ZV90KiBkYXRhU2l6ZSk7Ci0gICAgc3RhdHVzX3QgU2tpcEVudGl0eURhdGEoKTsgLy8gbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcG9pbnRlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkYXRhLgotICAgIHNzaXplX3QgUmVhZEVudGl0eURhdGEodm9pZCogZGF0YSwgc2l6ZV90IHNpemUpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IEJhY2t1cERhdGFSZWFkZXIoKTsKLSAgICBzdGF0dXNfdCBza2lwX3BhZGRpbmcoKTsKLSAgICAKLSAgICBpbnQgbV9mZDsKLSAgICBib29sIG1fZG9uZTsKLSAgICBzdGF0dXNfdCBtX3N0YXR1czsKLSAgICBzc2l6ZV90IG1fcG9zOwotICAgIHNzaXplX3QgbV9kYXRhRW5kUG9zOwotICAgIGludCBtX2VudGl0eUNvdW50OwotICAgIHVuaW9uIHsKLSAgICAgICAgaW50IHR5cGU7Ci0gICAgICAgIGVudGl0eV9oZWFkZXJfdjEgZW50aXR5OwotICAgIH0gbV9oZWFkZXI7Ci0gICAgU3RyaW5nOCBtX2tleTsKLX07Ci0KLWludCBiYWNrX3VwX2ZpbGVzKGludCBvbGRTbmFwc2hvdEZELCBCYWNrdXBEYXRhV3JpdGVyKiBkYXRhU3RyZWFtLCBpbnQgbmV3U25hcHNob3RGRCwKLSAgICAgICAgY2hhciBjb25zdCogY29uc3QqIGZpbGVzLCBjaGFyIGNvbnN0KiBjb25zdCAqa2V5cywgaW50IGZpbGVDb3VudCk7Ci0KLWludCB3cml0ZV90YXJmaWxlKGNvbnN0IFN0cmluZzgmIHBhY2thZ2VOYW1lLCBjb25zdCBTdHJpbmc4JiBkb21haW4sCi0gICAgICAgIGNvbnN0IFN0cmluZzgmIHJvb3RQYXRoLCBjb25zdCBTdHJpbmc4JiBmaWxlUGF0aCwgQmFja3VwRGF0YVdyaXRlciogb3V0cHV0U3RyZWFtKTsKLQotY2xhc3MgUmVzdG9yZUhlbHBlckJhc2UKLXsKLXB1YmxpYzoKLSAgICBSZXN0b3JlSGVscGVyQmFzZSgpOwotICAgIH5SZXN0b3JlSGVscGVyQmFzZSgpOwotCi0gICAgc3RhdHVzX3QgV3JpdGVGaWxlKGNvbnN0IFN0cmluZzgmIGZpbGVuYW1lLCBCYWNrdXBEYXRhUmVhZGVyKiBpbik7Ci0gICAgc3RhdHVzX3QgV3JpdGVTbmFwc2hvdChpbnQgZmQpOwotCi1wcml2YXRlOgotICAgIHZvaWQqIG1fYnVmOwotICAgIGJvb2wgbV9sb2dnZWRVbmtub3duTWV0YWRhdGE7Ci0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCxGaWxlUmVjPiBtX2ZpbGVzOwotfTsKLQotI2RlZmluZSBURVNUX0JBQ0tVUF9IRUxQRVJTIDEKLQotI2lmIFRFU1RfQkFDS1VQX0hFTFBFUlMKLWludCBiYWNrdXBfaGVscGVyX3Rlc3RfZW1wdHkoKTsKLWludCBiYWNrdXBfaGVscGVyX3Rlc3RfZm91cigpOwotaW50IGJhY2t1cF9oZWxwZXJfdGVzdF9maWxlcygpOwotaW50IGJhY2t1cF9oZWxwZXJfdGVzdF9udWxsX2Jhc2UoKTsKLWludCBiYWNrdXBfaGVscGVyX3Rlc3RfbWlzc2luZ19maWxlKCk7Ci1pbnQgYmFja3VwX2hlbHBlcl90ZXN0X2RhdGFfd3JpdGVyKCk7Ci1pbnQgYmFja3VwX2hlbHBlcl90ZXN0X2RhdGFfcmVhZGVyKCk7Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gX1VUSUxTX0JBQ0tVUF9IRUxQRVJTX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYW5kcm9pZGZ3L0N1cnNvcldpbmRvdy5oIGIvaW5jbHVkZS9hbmRyb2lkZncvQ3Vyc29yV2luZG93LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMjk3OWEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hbmRyb2lkZncvQ3Vyc29yV2luZG93LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgX0FORFJPSURfX0RBVEFCQVNFX1dJTkRPV19ICi0jZGVmaW5lIF9BTkRST0lEX19EQVRBQkFTRV9XSU5ET1dfSAotCi0jaW5jbHVkZSA8Y3V0aWxzL2xvZy5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0jaW5jbHVkZSA8YmluZGVyL1BhcmNlbC5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLQotI2lmIExPR19OREVCVUcKLQotI2RlZmluZSBJRl9MT0dfV0lORE9XKCkgaWYgKGZhbHNlKQotI2RlZmluZSBMT0dfV0lORE9XKC4uLikKLQotI2Vsc2UKLQotI2RlZmluZSBJRl9MT0dfV0lORE9XKCkgSUZfQUxPRyhMT0dfREVCVUcsICJDdXJzb3JXaW5kb3ciKQotI2RlZmluZSBMT0dfV0lORE9XKC4uLikgQUxPRyhMT0dfREVCVUcsICJDdXJzb3JXaW5kb3ciLCBfX1ZBX0FSR1NfXykKLQotI2VuZGlmCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHN0b3JlcyBhIHNldCBvZiByb3dzIGZyb20gYSBkYXRhYmFzZSBpbiBhIGJ1ZmZlci4gVGhlIGJlZ2luaW5nIG9mIHRoZQotICogd2luZG93IGhhcyBmaXJzdCBjaHVuayBvZiBSb3dTbG90cywgd2hpY2ggYXJlIG9mZnNldHMgdG8gdGhlIHJvdyBkaXJlY3RvcnksIGZvbGxvd2VkIGJ5Ci0gKiBhbiBvZmZzZXQgdG8gdGhlIG5leHQgY2h1bmsgaW4gYSBsaW5rZWQtbGlzdCBvZiBhZGRpdGlvbmFsIGNodW5rIG9mIFJvd1Nsb3RzIGluIGNhc2UKLSAqIHRoZSBwcmUtYWxsb2NhdGVkIGNodW5rIGlzbid0IGJpZyBlbm91Z2ggdG8gcmVmZXIgdG8gYWxsIHJvd3MuIEVhY2ggcm93IGRpcmVjdG9yeSBoYXMgYQotICogRmllbGRTbG90IHBlciBjb2x1bW4sIHdoaWNoIGhhcyB0aGUgc2l6ZSwgb2Zmc2V0LCBhbmQgdHlwZSBvZiB0aGUgZGF0YSBmb3IgdGhhdCBmaWVsZC4KLSAqIE5vdGUgdGhhdCB0aGUgZGF0YSB0eXBlcyBjb21lIGZyb20gc3FsaXRlMy5oLgotICoKLSAqIFN0cmluZ3MgYXJlIHN0b3JlZCBpbiBVVEYtOC4KLSAqLwotY2xhc3MgQ3Vyc29yV2luZG93IHsKLSAgICBDdXJzb3JXaW5kb3coY29uc3QgU3RyaW5nOCYgbmFtZSwgaW50IGFzaG1lbUZkLAotICAgICAgICAgICAgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIGJvb2wgcmVhZE9ubHkpOwotCi1wdWJsaWM6Ci0gICAgLyogRmllbGQgdHlwZXMuICovCi0gICAgZW51bSB7Ci0gICAgICAgIEZJRUxEX1RZUEVfTlVMTCA9IDAsCi0gICAgICAgIEZJRUxEX1RZUEVfSU5URUdFUiA9IDEsCi0gICAgICAgIEZJRUxEX1RZUEVfRkxPQVQgPSAyLAotICAgICAgICBGSUVMRF9UWVBFX1NUUklORyA9IDMsCi0gICAgICAgIEZJRUxEX1RZUEVfQkxPQiA9IDQsCi0gICAgfTsKLQotICAgIC8qIE9wYXF1ZSB0eXBlIHRoYXQgZGVzY3JpYmVzIGEgZmllbGQgc2xvdC4gKi8KLSAgICBzdHJ1Y3QgRmllbGRTbG90IHsKLSAgICBwcml2YXRlOgotICAgICAgICBpbnQzMl90IHR5cGU7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIGRvdWJsZSBkOwotICAgICAgICAgICAgaW50NjRfdCBsOwotICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZTsKLSAgICAgICAgICAgIH0gYnVmZmVyOwotICAgICAgICB9IGRhdGE7Ci0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEN1cnNvcldpbmRvdzsKLSAgICB9IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQotICAgIH5DdXJzb3JXaW5kb3coKTsKLQotICAgIHN0YXRpYyBzdGF0dXNfdCBjcmVhdGUoY29uc3QgU3RyaW5nOCYgbmFtZSwgc2l6ZV90IHNpemUsIEN1cnNvcldpbmRvdyoqIG91dEN1cnNvcldpbmRvdyk7Ci0gICAgc3RhdGljIHN0YXR1c190IGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsKiBwYXJjZWwsIEN1cnNvcldpbmRvdyoqIG91dEN1cnNvcldpbmRvdyk7Ci0KLSAgICBzdGF0dXNfdCB3cml0ZVRvUGFyY2VsKFBhcmNlbCogcGFyY2VsKTsKLQotICAgIGlubGluZSBTdHJpbmc4IG5hbWUoKSB7IHJldHVybiBtTmFtZTsgfQotICAgIGlubGluZSBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1TaXplOyB9Ci0gICAgaW5saW5lIHNpemVfdCBmcmVlU3BhY2UoKSB7IHJldHVybiBtU2l6ZSAtIG1IZWFkZXItPmZyZWVPZmZzZXQ7IH0KLSAgICBpbmxpbmUgdWludDMyX3QgZ2V0TnVtUm93cygpIHsgcmV0dXJuIG1IZWFkZXItPm51bVJvd3M7IH0KLSAgICBpbmxpbmUgdWludDMyX3QgZ2V0TnVtQ29sdW1ucygpIHsgcmV0dXJuIG1IZWFkZXItPm51bUNvbHVtbnM7IH0KLQotICAgIHN0YXR1c190IGNsZWFyKCk7Ci0gICAgc3RhdHVzX3Qgc2V0TnVtQ29sdW1ucyh1aW50MzJfdCBudW1Db2x1bW5zKTsKLQotICAgIC8qKgotICAgICAqIEFsbG9jYXRlIGEgcm93IHNsb3QgYW5kIGl0cyBkaXJlY3RvcnkuCi0gICAgICogVGhlIHJvdyBpcyBpbml0aWFsaXplZCB3aWxsIG51bGwgZW50cmllcyBmb3IgZWFjaCBmaWVsZC4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBhbGxvY1JvdygpOwotICAgIHN0YXR1c190IGZyZWVMYXN0Um93KCk7Ci0KLSAgICBzdGF0dXNfdCBwdXRCbG9iKHVpbnQzMl90IHJvdywgdWludDMyX3QgY29sdW1uLCBjb25zdCB2b2lkKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICAgIHN0YXR1c190IHB1dFN0cmluZyh1aW50MzJfdCByb3csIHVpbnQzMl90IGNvbHVtbiwgY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplSW5jbHVkaW5nTnVsbCk7Ci0gICAgc3RhdHVzX3QgcHV0TG9uZyh1aW50MzJfdCByb3csIHVpbnQzMl90IGNvbHVtbiwgaW50NjRfdCB2YWx1ZSk7Ci0gICAgc3RhdHVzX3QgcHV0RG91YmxlKHVpbnQzMl90IHJvdywgdWludDMyX3QgY29sdW1uLCBkb3VibGUgdmFsdWUpOwotICAgIHN0YXR1c190IHB1dE51bGwodWludDMyX3Qgcm93LCB1aW50MzJfdCBjb2x1bW4pOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgZmllbGQgc2xvdCBhdCB0aGUgc3BlY2lmaWVkIHJvdyBhbmQgY29sdW1uLgotICAgICAqIFJldHVybnMgbnVsbCBpZiB0aGUgcmVxdWVzdGVkIHJvdyBvciBjb2x1bW4gaXMgbm90IGluIHRoZSB3aW5kb3cuCi0gICAgICovCi0gICAgRmllbGRTbG90KiBnZXRGaWVsZFNsb3QodWludDMyX3Qgcm93LCB1aW50MzJfdCBjb2x1bW4pOwotCi0gICAgaW5saW5lIGludDMyX3QgZ2V0RmllbGRTbG90VHlwZShGaWVsZFNsb3QqIGZpZWxkU2xvdCkgewotICAgICAgICByZXR1cm4gZmllbGRTbG90LT50eXBlOwotICAgIH0KLQotICAgIGlubGluZSBpbnQ2NF90IGdldEZpZWxkU2xvdFZhbHVlTG9uZyhGaWVsZFNsb3QqIGZpZWxkU2xvdCkgewotICAgICAgICByZXR1cm4gZmllbGRTbG90LT5kYXRhLmw7Ci0gICAgfQotCi0gICAgaW5saW5lIGRvdWJsZSBnZXRGaWVsZFNsb3RWYWx1ZURvdWJsZShGaWVsZFNsb3QqIGZpZWxkU2xvdCkgewotICAgICAgICByZXR1cm4gZmllbGRTbG90LT5kYXRhLmQ7Ci0gICAgfQotCi0gICAgaW5saW5lIGNvbnN0IGNoYXIqIGdldEZpZWxkU2xvdFZhbHVlU3RyaW5nKEZpZWxkU2xvdCogZmllbGRTbG90LAotICAgICAgICAgICAgc2l6ZV90KiBvdXRTaXplSW5jbHVkaW5nTnVsbCkgewotICAgICAgICAqb3V0U2l6ZUluY2x1ZGluZ051bGwgPSBmaWVsZFNsb3QtPmRhdGEuYnVmZmVyLnNpemU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4ob2Zmc2V0VG9QdHIoZmllbGRTbG90LT5kYXRhLmJ1ZmZlci5vZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgY29uc3Qgdm9pZCogZ2V0RmllbGRTbG90VmFsdWVCbG9iKEZpZWxkU2xvdCogZmllbGRTbG90LCBzaXplX3QqIG91dFNpemUpIHsKLSAgICAgICAgKm91dFNpemUgPSBmaWVsZFNsb3QtPmRhdGEuYnVmZmVyLnNpemU7Ci0gICAgICAgIHJldHVybiBvZmZzZXRUb1B0cihmaWVsZFNsb3QtPmRhdGEuYnVmZmVyLm9mZnNldCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgUk9XX1NMT1RfQ0hVTktfTlVNX1JPV1MgPSAxMDA7Ci0KLSAgICBzdHJ1Y3QgSGVhZGVyIHsKLSAgICAgICAgLy8gT2Zmc2V0IG9mIHRoZSBsb3dlc3QgdW51c2VkIGJ5dGUgaW4gdGhlIHdpbmRvdy4KLSAgICAgICAgdWludDMyX3QgZnJlZU9mZnNldDsKLQotICAgICAgICAvLyBPZmZzZXQgb2YgdGhlIGZpcnN0IHJvdyBzbG90IGNodW5rLgotICAgICAgICB1aW50MzJfdCBmaXJzdENodW5rT2Zmc2V0OwotCi0gICAgICAgIHVpbnQzMl90IG51bVJvd3M7Ci0gICAgICAgIHVpbnQzMl90IG51bUNvbHVtbnM7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBSb3dTbG90IHsKLSAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUm93U2xvdENodW5rIHsKLSAgICAgICAgUm93U2xvdCBzbG90c1tST1dfU0xPVF9DSFVOS19OVU1fUk9XU107Ci0gICAgICAgIHVpbnQzMl90IG5leHRDaHVua09mZnNldDsKLSAgICB9OwotCi0gICAgU3RyaW5nOCBtTmFtZTsKLSAgICBpbnQgbUFzaG1lbUZkOwotICAgIHZvaWQqIG1EYXRhOwotICAgIHNpemVfdCBtU2l6ZTsKLSAgICBib29sIG1SZWFkT25seTsKLSAgICBIZWFkZXIqIG1IZWFkZXI7Ci0KLSAgICBpbmxpbmUgdm9pZCogb2Zmc2V0VG9QdHIodWludDMyX3Qgb2Zmc2V0KSB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Kj4obURhdGEpICsgb2Zmc2V0OwotICAgIH0KLQotICAgIGlubGluZSB1aW50MzJfdCBvZmZzZXRGcm9tUHRyKHZvaWQqIHB0cikgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHB0cikgLSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obURhdGEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFsbG9jYXRlIGEgcG9ydGlvbiBvZiB0aGUgd2luZG93LiBSZXR1cm5zIHRoZSBvZmZzZXQKLSAgICAgKiBvZiB0aGUgYWxsb2NhdGlvbiwgb3IgMCBpZiB0aGVyZSBpc24ndCBlbm91Z2ggc3BhY2UuCi0gICAgICogSWYgYWxpZ25lZCBpcyB0cnVlLCB0aGUgYWxsb2NhdGlvbiBnZXRzIDQgYnl0ZSBhbGlnbm1lbnQuCi0gICAgICovCi0gICAgdWludDMyX3QgYWxsb2Moc2l6ZV90IHNpemUsIGJvb2wgYWxpZ25lZCA9IGZhbHNlKTsKLQotICAgIFJvd1Nsb3QqIGdldFJvd1Nsb3QodWludDMyX3Qgcm93KTsKLSAgICBSb3dTbG90KiBhbGxvY1Jvd1Nsb3QoKTsKLQotICAgIHN0YXR1c190IHB1dEJsb2JPclN0cmluZyh1aW50MzJfdCByb3csIHVpbnQzMl90IGNvbHVtbiwKLSAgICAgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50MzJfdCB0eXBlKTsKLX07Ci0KLX07IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbmRyb2lkZncvT2JiRmlsZS5oIGIvaW5jbHVkZS9hbmRyb2lkZncvT2JiRmlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzU1OWNkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYW5kcm9pZGZ3L09iYkZpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBPQkJGSUxFX0hfCi0jZGVmaW5lIE9CQkZJTEVfSF8KLQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLQotI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLy8gT0JCIGZsYWdzIChiaXQgMCkKLSNkZWZpbmUgT0JCX09WRVJMQVkgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBPQkJfU0FMVEVEICAgICAgICAgICgxIDw8IDEpCi0KLWNsYXNzIE9iYkZpbGUgOiBwdWJsaWMgUmVmQmFzZSB7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+T2JiRmlsZSgpOwotCi1wdWJsaWM6Ci0gICAgT2JiRmlsZSgpOwotCi0gICAgYm9vbCByZWFkRnJvbShjb25zdCBjaGFyKiBmaWxlbmFtZSk7Ci0gICAgYm9vbCByZWFkRnJvbShpbnQgZmQpOwotICAgIGJvb2wgd3JpdGVUbyhjb25zdCBjaGFyKiBmaWxlbmFtZSk7Ci0gICAgYm9vbCB3cml0ZVRvKGludCBmZCk7Ci0gICAgYm9vbCByZW1vdmVGcm9tKGNvbnN0IGNoYXIqIGZpbGVuYW1lKTsKLSAgICBib29sIHJlbW92ZUZyb20oaW50IGZkKTsKLQotICAgIGNvbnN0IGNoYXIqIGdldEZpbGVOYW1lKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbUZpbGVOYW1lOwotICAgIH0KLQotICAgIGNvbnN0IFN0cmluZzggZ2V0UGFja2FnZU5hbWUoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtUGFja2FnZU5hbWU7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRQYWNrYWdlTmFtZShTdHJpbmc4IHBhY2thZ2VOYW1lKSB7Ci0gICAgICAgIG1QYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lOwotICAgIH0KLQotICAgIGludDMyX3QgZ2V0VmVyc2lvbigpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1WZXJzaW9uOwotICAgIH0KLQotICAgIHZvaWQgc2V0VmVyc2lvbihpbnQzMl90IHZlcnNpb24pIHsKLSAgICAgICAgbVZlcnNpb24gPSB2ZXJzaW9uOwotICAgIH0KLQotICAgIGludDMyX3QgZ2V0RmxhZ3MoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtRmxhZ3M7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRGbGFncyhpbnQzMl90IGZsYWdzKSB7Ci0gICAgICAgIG1GbGFncyA9IGZsYWdzOwotICAgIH0KLQotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGdldFNhbHQoc2l6ZV90KiBsZW5ndGgpIGNvbnN0IHsKLSAgICAgICAgaWYgKChtRmxhZ3MgJiBPQkJfU0FMVEVEKSA9PSAwKSB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgKmxlbmd0aCA9IHNpemVvZihtU2FsdCk7Ci0gICAgICAgIHJldHVybiBtU2FsdDsKLSAgICB9Ci0KLSAgICBib29sIHNldFNhbHQoY29uc3QgdW5zaWduZWQgY2hhciogc2FsdCwgc2l6ZV90IGxlbmd0aCkgewotICAgICAgICBpZiAobGVuZ3RoICE9IHNpemVvZihtU2FsdCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1lbWNweShtU2FsdCwgc2FsdCwgc2l6ZW9mKG1TYWx0KSk7Ci0gICAgICAgIG1GbGFncyB8PSBPQkJfU0FMVEVEOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIGlzT3ZlcmxheSgpIHsKLSAgICAgICAgcmV0dXJuIChtRmxhZ3MgJiBPQkJfT1ZFUkxBWSkgPT0gT0JCX09WRVJMQVk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRPdmVybGF5KGJvb2wgb3ZlcmxheSkgewotICAgICAgICBpZiAob3ZlcmxheSkgewotICAgICAgICAgICAgbUZsYWdzIHw9IE9CQl9PVkVSTEFZOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUZsYWdzICY9IH5PQkJfT1ZFUkxBWTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZ2V0NExFKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZikgewotICAgICAgICByZXR1cm4gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KSB8IChidWZbMl0gPDwgMTYpIHwgKGJ1ZlszXSA8PCAyNCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHB1dDRMRSh1bnNpZ25lZCBjaGFyKiBidWYsIHVpbnQzMl90IHZhbCkgewotICAgICAgICBidWZbMF0gPSB2YWwgJiAweEZGOwotICAgICAgICBidWZbMV0gPSAodmFsID4+IDgpICYgMHhGRjsKLSAgICAgICAgYnVmWzJdID0gKHZhbCA+PiAxNikgJiAweEZGOwotICAgICAgICBidWZbM10gPSAodmFsID4+IDI0KSAmIDB4RkY7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIC8qIFBhY2thZ2UgbmFtZSB0aGlzIE9iYkZpbGUgaXMgYXNzb2NpYXRlZCB3aXRoICovCi0gICAgU3RyaW5nOCBtUGFja2FnZU5hbWU7Ci0KLSAgICAvKiBQYWNrYWdlIHZlcnNpb24gdGhpcyBPYmJGaWxlIGlzIGFzc29jaWF0ZWQgd2l0aCAqLwotICAgIGludDMyX3QgbVZlcnNpb247Ci0KLSAgICAvKiBGbGFncyBmb3IgdGhpcyBPQkIgdHlwZS4gKi8KLSAgICBpbnQzMl90IG1GbGFnczsKLQotICAgIC8qIFdoZXRoZXIgdGhlIGZpbGUgaXMgc2FsdGVkLiAqLwotICAgIGJvb2wgbVNhbHRlZDsKLQotICAgIC8qIFRoZSBlbmNyeXB0aW9uIHNhbHQuICovCi0gICAgdW5zaWduZWQgY2hhciBtU2FsdFs4XTsKLQotICAgIGNvbnN0IGNoYXIqIG1GaWxlTmFtZTsKLQotICAgIHNpemVfdCBtRmlsZVNpemU7Ci0KLSAgICBzaXplX3QgbUZvb3RlclN0YXJ0OwotCi0gICAgdW5zaWduZWQgY2hhciogbVJlYWRCdWY7Ci0KLSAgICBib29sIHBhcnNlT2JiRmlsZShpbnQgZmQpOwotfTsKLQotfQotI2VuZGlmIC8qIE9CQkZJTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYW5kcm9pZGZ3L1Bvd2VyTWFuYWdlci5oIGIvaW5jbHVkZS9hbmRyb2lkZncvUG93ZXJNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhOThkYjAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hbmRyb2lkZncvUG93ZXJNYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBfQU5EUk9JREZXX1BPV0VSX01BTkFHRVJfSAotI2RlZmluZSBfQU5EUk9JREZXX1BPV0VSX01BTkFHRVJfSAotCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotZW51bSB7Ci0gICAgVVNFUl9BQ1RJVklUWV9FVkVOVF9PVEhFUiA9IDAsCi0gICAgVVNFUl9BQ1RJVklUWV9FVkVOVF9CVVRUT04gPSAxLAotICAgIFVTRVJfQUNUSVZJVFlfRVZFTlRfVE9VQ0ggPSAyLAotCi0gICAgVVNFUl9BQ1RJVklUWV9FVkVOVF9MQVNUID0gVVNFUl9BQ1RJVklUWV9FVkVOVF9UT1VDSCwgLy8gTGFzdCB2YWxpZCBldmVudCBjb2RlLgotfTsKLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gX0FORFJPSURGV19QT1dFUl9NQU5BR0VSX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuaCBiL2luY2x1ZGUvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE1MWIwNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLwotLy8gRGVmaW5pdGlvbnMgb2YgcmVzb3VyY2UgZGF0YSBzdHJ1Y3R1cmVzLgotLy8KLSNpZm5kZWYgX0xJQlNfVVRJTFNfUkVTT1VSQ0VfVFlQRVNfSAotI2RlZmluZSBfTElCU19VVElMU19SRVNPVVJDRV9UWVBFU19ICi0KLSNpbmNsdWRlIDxhbmRyb2lkZncvQXNzZXQuaD4KLSNpbmNsdWRlIDx1dGlscy9CeXRlT3JkZXIuaD4KLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmcxNi5oPgotI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgotCi0jaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhbmRyb2lkL2NvbmZpZ3VyYXRpb24uaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi0vKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBQTkcgRXh0ZW5zaW9ucwotICoKLSAqICBOZXcgcHJpdmF0ZSBjaHVua3MgdGhhdCBtYXkgYmUgcGxhY2VkIGluIFBORyBpbWFnZXMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qKgotICogVGhpcyBjaHVuayBzcGVjaWZpZXMgaG93IHRvIHNwbGl0IGFuIGltYWdlIGludG8gc2VnbWVudHMgZm9yCi0gKiBzY2FsaW5nLgotICoKLSAqIFRoZXJlIGFyZSBKIGhvcml6b250YWwgYW5kIEsgdmVydGljYWwgc2VnbWVudHMuICBUaGVzZSBzZWdtZW50cyBkaXZpZGUKLSAqIHRoZSBpbWFnZSBpbnRvIEoqSyByZWdpb25zIGFzIGZvbGxvd3MgKHdoZXJlIEo9NCBhbmQgSz0zKToKLSAqCi0gKiAgICAgIEYwICAgUzAgICAgRjEgICAgIFMxCi0gKiAgICstLS0tLSstLS0tKy0tLS0tLSstLS0tLS0tKwotICogUzJ8ICAwICB8ICAxIHwgIDIgICB8ICAgMyAgIHwKLSAqICAgKy0tLS0tKy0tLS0rLS0tLS0tKy0tLS0tLS0rCi0gKiAgIHwgICAgIHwgICAgfCAgICAgIHwgICAgICAgfAotICogICB8ICAgICB8ICAgIHwgICAgICB8ICAgICAgIHwKLSAqIEYyfCAgNCAgfCAgNSB8ICA2ICAgfCAgIDcgICB8Ci0gKiAgIHwgICAgIHwgICAgfCAgICAgIHwgICAgICAgfAotICogICB8ICAgICB8ICAgIHwgICAgICB8ICAgICAgIHwKLSAqICAgKy0tLS0tKy0tLS0rLS0tLS0tKy0tLS0tLS0rCi0gKiBTM3wgIDggIHwgIDkgfCAgMTAgIHwgICAxMSAgfAotICogICArLS0tLS0rLS0tLSstLS0tLS0rLS0tLS0tLSsKLSAqCi0gKiBFYWNoIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNlZ21lbnQgaXMgY29uc2lkZXJlZCB0byBieSBlaXRoZXIKLSAqIHN0cmV0Y2hhYmxlIChtYXJrZWQgYnkgdGhlIFN4IGxhYmVscykgb3IgZml4ZWQgKG1hcmtlZCBieSB0aGUgRnkKLSAqIGxhYmVscyksIGluIHRoZSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGF4aXMsIHJlc3BlY3RpdmVseS4gSW4gdGhlCi0gKiBhYm92ZSBleGFtcGxlLCB0aGUgZmlyc3QgaXMgaG9yaXpvbnRhbCBzZWdtZW50IChGMCkgaXMgZml4ZWQsIHRoZQotICogbmV4dCBpcyBzdHJldGNoYWJsZSBhbmQgdGhlbiB0aGV5IGNvbnRpbnVlIHRvIGFsdGVybmF0ZS4gTm90ZSB0aGF0Ci0gKiB0aGUgc2VnbWVudCBsaXN0IGZvciBlYWNoIGF4aXMgY2FuIGJlZ2luIG9yIGVuZCB3aXRoIGEgc3RyZXRjaGFibGUKLSAqIG9yIGZpeGVkIHNlZ21lbnQuCi0gKgotICogVGhlIHJlbGF0aXZlIHNpemVzIG9mIHRoZSBzdHJldGNoeSBzZWdtZW50cyBpbmRpY2F0ZXMgdGhlIHJlbGF0aXZlCi0gKiBhbW91bnQgb2Ygc3RyZXRjaGluZXNzIG9mIHRoZSByZWdpb25zIGJvcmRlcmVkIGJ5IHRoZSBzZWdtZW50cy4gIEZvcgotICogZXhhbXBsZSwgcmVnaW9ucyAzLCA3IGFuZCAxMSBhYm92ZSB3aWxsIHRha2UgdXAgbW9yZSBob3Jpem9udGFsIHNwYWNlCi0gKiB0aGFuIHJlZ2lvbnMgMSwgNSBhbmQgOSBzaW5jZSB0aGUgaG9yaXpvbnRhbCBzZWdtZW50IGFzc29jaWF0ZWQgd2l0aAotICogdGhlIGZpcnN0IHNldCBvZiByZWdpb25zIGlzIGxhcmdlciB0aGFuIHRoZSBvdGhlciBzZXQgb2YgcmVnaW9ucy4gIFRoZQotICogcmF0aW9zIG9mIHRoZSBhbW91bnQgb2YgaG9yaXpvbnRhbCAob3IgdmVydGljYWwpIHNwYWNlIHRha2VuIGJ5IGFueQotICogdHdvIHN0cmV0Y2hhYmxlIHNsaWNlcyBpcyBleGFjdGx5IHRoZSByYXRpbyBvZiB0aGVpciBjb3JyZXNwb25kaW5nCi0gKiBzZWdtZW50IGxlbmd0aHMuCi0gKgotICogeERpdnMgYW5kIHlEaXZzIHBvaW50IHRvIGFycmF5cyBvZiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBwaXhlbAotICogaW5kaWNlcy4gIFRoZSBmaXJzdCBwYWlyIG9mIERpdnMgKGluIGVpdGhlciBhcnJheSkgaW5kaWNhdGUgdGhlCi0gKiBzdGFydGluZyBhbmQgZW5kaW5nIHBvaW50cyBvZiB0aGUgZmlyc3Qgc3RyZXRjaGFibGUgc2VnbWVudCBpbiB0aGF0Ci0gKiBheGlzLiBUaGUgbmV4dCBwYWlyIHNwZWNpZmllcyB0aGUgbmV4dCBzdHJldGNoYWJsZSBzZWdtZW50LCBldGMuIFNvCi0gKiBpbiB0aGUgYWJvdmUgZXhhbXBsZSB4RGl2WzBdIGFuZCB4RGl2WzFdIHNwZWNpZnkgdGhlIGhvcml6b250YWwKLSAqIGNvb3JkaW5hdGVzIGZvciB0aGUgcmVnaW9ucyBsYWJlbGVkIDEsIDUgYW5kIDkuICB4RGl2WzJdIGFuZAotICogeERpdlszXSBzcGVjaWZ5IHRoZSBjb29yZGluYXRlcyBmb3IgcmVnaW9ucyAzLCA3IGFuZCAxMS4gTm90ZSB0aGF0Ci0gKiB0aGUgbGVmdG1vc3Qgc2xpY2VzIGFsd2F5cyBzdGFydCBhdCB4PTAgYW5kIHRoZSByaWdodG1vc3Qgc2xpY2VzCi0gKiBhbHdheXMgZW5kIGF0IHRoZSBlbmQgb2YgdGhlIGltYWdlLiBTbywgZm9yIGV4YW1wbGUsIHRoZSByZWdpb25zIDAsCi0gKiA0IGFuZCA4ICh3aGljaCBhcmUgZml4ZWQgYWxvbmcgdGhlIFggYXhpcykgc3RhcnQgYXQgeCB2YWx1ZSAwIGFuZAotICogZ28gdG8geERpdlswXSBhbmQgc2xpY2VzIDIsIDYgYW5kIDEwIHN0YXJ0IGF0IHhEaXZbMV0gYW5kIGVuZCBhdAotICogeERpdlsyXS4KLSAqCi0gKiBUaGUgYXJyYXkgcG9pbnRlZCB0byBieSB0aGUgY29sb3JzIGZpZWxkIGxpc3RzIGNvbnRhaW5zIGhpbnRzIGZvcgotICogZWFjaCBvZiB0aGUgcmVnaW9ucy4gIFRoZXkgYXJlIG9yZGVyZWQgYWNjb3JkaW5nIGxlZnQtdG8tcmlnaHQgYW5kCi0gKiB0b3AtdG8tYm90dG9tIGFzIGluZGljYXRlZCBhYm92ZS4gRm9yIGVhY2ggc2VnbWVudCB0aGF0IGlzIGEgc29saWQKLSAqIGNvbG9yIHRoZSBhcnJheSBlbnRyeSB3aWxsIGNvbnRhaW4gdGhhdCBjb2xvciB2YWx1ZTsgb3RoZXJ3aXNlIGl0Ci0gKiB3aWxsIGNvbnRhaW4gTk9fQ09MT1IuICBTZWdtZW50cyB0aGF0IGFyZSBjb21wbGV0ZWx5IHRyYW5zcGFyZW50Ci0gKiB3aWxsIGFsd2F5cyBoYXZlIHRoZSB2YWx1ZSBUUkFOU1BBUkVOVF9DT0xPUi4KLSAqCi0gKiBUaGUgUE5HIGNodW5rIHR5cGUgaXMgIm5wVGMiLgotICovCi1zdHJ1Y3QgUmVzX3BuZ185cGF0Y2gKLXsKLSAgICBSZXNfcG5nXzlwYXRjaCgpIDogd2FzRGVzZXJpYWxpemVkKGZhbHNlKSwgeERpdnMoTlVMTCksCi0gICAgICAgICAgICAgICAgICAgICAgIHlEaXZzKE5VTEwpLCBjb2xvcnMoTlVMTCkgeyB9Ci0KLSAgICBpbnQ4X3Qgd2FzRGVzZXJpYWxpemVkOwotICAgIGludDhfdCBudW1YRGl2czsKLSAgICBpbnQ4X3QgbnVtWURpdnM7Ci0gICAgaW50OF90IG51bUNvbG9yczsKLQotICAgIC8vIFRoZXNlIHRlbGwgd2hlcmUgdGhlIG5leHQgc2VjdGlvbiBvZiBhIHBhdGNoIHN0YXJ0cy4KLSAgICAvLyBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IHBhdGNoIGluY2x1ZGVzIHRoZSBwaXhlbHMgZnJvbQotICAgIC8vIDAgdG8geERpdnNbMF0tMSBhbmQgdGhlIHNlY29uZCBwYXRjaCBpbmNsdWRlcyB0aGUgcGl4ZWxzCi0gICAgLy8gZnJvbSB4RGl2c1swXSB0byB4RGl2c1sxXS0xLgotICAgIC8vIE5vdGU6IGFsbG9jYXRpb24vZnJlZSBvZiB0aGVzZSBwb2ludGVycyBpcyBsZWZ0IHRvIHRoZSBjYWxsZXIuCi0gICAgaW50MzJfdCogeERpdnM7Ci0gICAgaW50MzJfdCogeURpdnM7Ci0KLSAgICBpbnQzMl90IHBhZGRpbmdMZWZ0LCBwYWRkaW5nUmlnaHQ7Ci0gICAgaW50MzJfdCBwYWRkaW5nVG9wLCBwYWRkaW5nQm90dG9tOwotCi0gICAgZW51bSB7Ci0gICAgICAgIC8vIFRoZSA5IHBhdGNoIHNlZ21lbnQgaXMgbm90IGEgc29saWQgY29sb3IuCi0gICAgICAgIE5PX0NPTE9SID0gMHgwMDAwMDAwMSwKLQotICAgICAgICAvLyBUaGUgOSBwYXRjaCBzZWdtZW50IGlzIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQuCi0gICAgICAgIFRSQU5TUEFSRU5UX0NPTE9SID0gMHgwMDAwMDAwMAotICAgIH07Ci0gICAgLy8gTm90ZTogYWxsb2NhdGlvbi9mcmVlIG9mIHRoaXMgcG9pbnRlciBpcyBsZWZ0IHRvIHRoZSBjYWxsZXIuCi0gICAgdWludDMyX3QqIGNvbG9yczsKLQotICAgIC8vIENvbnZlcnQgZGF0YSBmcm9tIGRldmljZSByZXByZXNlbnRhdGlvbiB0byBQTkcgZmlsZSByZXByZXNlbnRhdGlvbi4KLSAgICB2b2lkIGRldmljZVRvRmlsZSgpOwotICAgIC8vIENvbnZlcnQgZGF0YSBmcm9tIFBORyBmaWxlIHJlcHJlc2VudGF0aW9uIHRvIGRldmljZSByZXByZXNlbnRhdGlvbi4KLSAgICB2b2lkIGZpbGVUb0RldmljZSgpOwotICAgIC8vIFNlcmlhbGl6ZS9NYXJzaGFsbCB0aGUgcGF0Y2ggZGF0YSBpbnRvIGEgbmV3bHkgbWFsbG9jLWVkIGJsb2NrCi0gICAgdm9pZCogc2VyaWFsaXplKCk7Ci0gICAgLy8gU2VyaWFsaXplL01hcnNoYWxsIHRoZSBwYXRjaCBkYXRhCi0gICAgdm9pZCBzZXJpYWxpemUodm9pZCogb3V0RGF0YSk7Ci0gICAgLy8gRGVzZXJpYWxpemUvVW5tYXJzaGFsbCB0aGUgcGF0Y2ggZGF0YQotICAgIHN0YXRpYyBSZXNfcG5nXzlwYXRjaCogZGVzZXJpYWxpemUoY29uc3Qgdm9pZCogZGF0YSk7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgc2VyaWFsaXplZCBkYXRhIHN0cnVjdHVyZQotICAgIHNpemVfdCBzZXJpYWxpemVkU2l6ZSgpOwotfTsKLQotLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgQmFzZSBUeXBlcwotICoKLSAqICBUaGVzZSBhcmUgc3RhbmRhcmQgdHlwZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgc3BlY2lmaWMKLSAqICByZXNvdXJjZSB0eXBlcy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQotLyoqCi0gKiBIZWFkZXIgdGhhdCBhcHBlYXJzIGF0IHRoZSBmcm9udCBvZiBldmVyeSBkYXRhIGNodW5rIGluIGEgcmVzb3VyY2UuCi0gKi8KLXN0cnVjdCBSZXNDaHVua19oZWFkZXIKLXsKLSAgICAvLyBUeXBlIGlkZW50aWZpZXIgZm9yIHRoaXMgY2h1bmsuICBUaGUgbWVhbmluZyBvZiB0aGlzIHZhbHVlIGRlcGVuZHMKLSAgICAvLyBvbiB0aGUgY29udGFpbmluZyBjaHVuay4KLSAgICB1aW50MTZfdCB0eXBlOwotCi0gICAgLy8gU2l6ZSBvZiB0aGUgY2h1bmsgaGVhZGVyIChpbiBieXRlcykuICBBZGRpbmcgdGhpcyB2YWx1ZSB0bwotICAgIC8vIHRoZSBhZGRyZXNzIG9mIHRoZSBjaHVuayBhbGxvd3MgeW91IHRvIGZpbmQgaXRzIGFzc29jaWF0ZWQgZGF0YQotICAgIC8vIChpZiBhbnkpLgotICAgIHVpbnQxNl90IGhlYWRlclNpemU7Ci0KLSAgICAvLyBUb3RhbCBzaXplIG9mIHRoaXMgY2h1bmsgKGluIGJ5dGVzKS4gIFRoaXMgaXMgdGhlIGNodW5rU2l6ZSBwbHVzCi0gICAgLy8gdGhlIHNpemUgb2YgYW55IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaHVuay4gIEFkZGluZyB0aGlzIHZhbHVlCi0gICAgLy8gdG8gdGhlIGNodW5rIGFsbG93cyB5b3UgdG8gY29tcGxldGVseSBza2lwIGl0cyBjb250ZW50cyAoaW5jbHVkaW5nCi0gICAgLy8gYW55IGNoaWxkIGNodW5rcykuICBJZiB0aGlzIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGNodW5rU2l6ZSwgdGhlcmUgaXMKLSAgICAvLyBubyBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2h1bmsuCi0gICAgdWludDMyX3Qgc2l6ZTsKLX07Ci0KLWVudW0gewotICAgIFJFU19OVUxMX1RZUEUgICAgICAgICAgICAgICA9IDB4MDAwMCwKLSAgICBSRVNfU1RSSU5HX1BPT0xfVFlQRSAgICAgICAgPSAweDAwMDEsCi0gICAgUkVTX1RBQkxFX1RZUEUgICAgICAgICAgICAgID0gMHgwMDAyLAotICAgIFJFU19YTUxfVFlQRSAgICAgICAgICAgICAgICA9IDB4MDAwMywKLQotICAgIC8vIENodW5rIHR5cGVzIGluIFJFU19YTUxfVFlQRQotICAgIFJFU19YTUxfRklSU1RfQ0hVTktfVFlQRSAgICA9IDB4MDEwMCwKLSAgICBSRVNfWE1MX1NUQVJUX05BTUVTUEFDRV9UWVBFPSAweDAxMDAsCi0gICAgUkVTX1hNTF9FTkRfTkFNRVNQQUNFX1RZUEUgID0gMHgwMTAxLAotICAgIFJFU19YTUxfU1RBUlRfRUxFTUVOVF9UWVBFICA9IDB4MDEwMiwKLSAgICBSRVNfWE1MX0VORF9FTEVNRU5UX1RZUEUgICAgPSAweDAxMDMsCi0gICAgUkVTX1hNTF9DREFUQV9UWVBFICAgICAgICAgID0gMHgwMTA0LAotICAgIFJFU19YTUxfTEFTVF9DSFVOS19UWVBFICAgICA9IDB4MDE3ZiwKLSAgICAvLyBUaGlzIGNvbnRhaW5zIGEgdWludDMyX3QgYXJyYXkgbWFwcGluZyBzdHJpbmdzIGluIHRoZSBzdHJpbmcKLSAgICAvLyBwb29sIGJhY2sgdG8gcmVzb3VyY2UgaWRlbnRpZmllcnMuICBJdCBpcyBvcHRpb25hbC4KLSAgICBSRVNfWE1MX1JFU09VUkNFX01BUF9UWVBFICAgPSAweDAxODAsCi0KLSAgICAvLyBDaHVuayB0eXBlcyBpbiBSRVNfVEFCTEVfVFlQRQotICAgIFJFU19UQUJMRV9QQUNLQUdFX1RZUEUgICAgICA9IDB4MDIwMCwKLSAgICBSRVNfVEFCTEVfVFlQRV9UWVBFICAgICAgICAgPSAweDAyMDEsCi0gICAgUkVTX1RBQkxFX1RZUEVfU1BFQ19UWVBFICAgID0gMHgwMjAyCi19OwotCi0vKioKLSAqIE1hY3JvcyBmb3IgYnVpbGRpbmcvc3BsaXR0aW5nIHJlc291cmNlIGlkZW50aWZpZXJzLgotICovCi0jZGVmaW5lIFJlc19WQUxJRElEKHJlc2lkKSAocmVzaWQgIT0gMCkKLSNkZWZpbmUgUmVzX0NIRUNLSUQocmVzaWQpICgocmVzaWQmMHhGRkZGMDAwMCkgIT0gMCkKLSNkZWZpbmUgUmVzX01BS0VJRChwYWNrYWdlLCB0eXBlLCBlbnRyeSkgXAotICAgICgoKHBhY2thZ2UrMSk8PDI0KSB8ICgoKHR5cGUrMSkmMHhGRik8PDE2KSB8IChlbnRyeSYweEZGRkYpKQotI2RlZmluZSBSZXNfR0VUUEFDS0FHRShpZCkgKChpZD4+MjQpLTEpCi0jZGVmaW5lIFJlc19HRVRUWVBFKGlkKSAoKChpZD4+MTYpJjB4RkYpLTEpCi0jZGVmaW5lIFJlc19HRVRFTlRSWShpZCkgKGlkJjB4RkZGRikKLQotI2RlZmluZSBSZXNfSU5URVJOQUxJRChyZXNpZCkgKChyZXNpZCYweEZGRkYwMDAwKSAhPSAwICYmIChyZXNpZCYweEZGMDAwMCkgPT0gMCkKLSNkZWZpbmUgUmVzX01BS0VJTlRFUk5BTChlbnRyeSkgKDB4MDEwMDAwMDAgfCAoZW50cnkmMHhGRkZGKSkKLSNkZWZpbmUgUmVzX01BS0VBUlJBWShlbnRyeSkgKDB4MDIwMDAwMDAgfCAoZW50cnkmMHhGRkZGKSkKLQotI2RlZmluZSBSZXNfTUFYUEFDS0FHRSAyNTUKLQotLyoqCi0gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHZhbHVlIGluIGEgcmVzb3VyY2UsIHN1cHBseWluZyB0eXBlCi0gKiBpbmZvcm1hdGlvbi4KLSAqLwotc3RydWN0IFJlc192YWx1ZQotewotICAgIC8vIE51bWJlciBvZiBieXRlcyBpbiB0aGlzIHN0cnVjdHVyZS4KLSAgICB1aW50MTZfdCBzaXplOwotCi0gICAgLy8gQWx3YXlzIHNldCB0byAwLgotICAgIHVpbnQ4X3QgcmVzMDsKLSAgICAgICAgCi0gICAgLy8gVHlwZSBvZiB0aGUgZGF0YSB2YWx1ZS4KLSAgICBlbnVtIHsKLSAgICAgICAgLy8gQ29udGFpbnMgbm8gZGF0YS4KLSAgICAgICAgVFlQRV9OVUxMID0gMHgwMCwKLSAgICAgICAgLy8gVGhlICdkYXRhJyBob2xkcyBhIFJlc1RhYmxlX3JlZiwgYSByZWZlcmVuY2UgdG8gYW5vdGhlciByZXNvdXJjZQotICAgICAgICAvLyB0YWJsZSBlbnRyeS4KLSAgICAgICAgVFlQRV9SRUZFUkVOQ0UgPSAweDAxLAotICAgICAgICAvLyBUaGUgJ2RhdGEnIGhvbGRzIGFuIGF0dHJpYnV0ZSByZXNvdXJjZSBpZGVudGlmaWVyLgotICAgICAgICBUWVBFX0FUVFJJQlVURSA9IDB4MDIsCi0gICAgICAgIC8vIFRoZSAnZGF0YScgaG9sZHMgYW4gaW5kZXggaW50byB0aGUgY29udGFpbmluZyByZXNvdXJjZSB0YWJsZSdzCi0gICAgICAgIC8vIGdsb2JhbCB2YWx1ZSBzdHJpbmcgcG9vbC4KLSAgICAgICAgVFlQRV9TVFJJTkcgPSAweDAzLAotICAgICAgICAvLyBUaGUgJ2RhdGEnIGhvbGRzIGEgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXIuCi0gICAgICAgIFRZUEVfRkxPQVQgPSAweDA0LAotICAgICAgICAvLyBUaGUgJ2RhdGEnIGhvbGRzIGEgY29tcGxleCBudW1iZXIgZW5jb2RpbmcgYSBkaW1lbnNpb24gdmFsdWUsCi0gICAgICAgIC8vIHN1Y2ggYXMgIjEwMGluIi4KLSAgICAgICAgVFlQRV9ESU1FTlNJT04gPSAweDA1LAotICAgICAgICAvLyBUaGUgJ2RhdGEnIGhvbGRzIGEgY29tcGxleCBudW1iZXIgZW5jb2RpbmcgYSBmcmFjdGlvbiBvZiBhCi0gICAgICAgIC8vIGNvbnRhaW5lci4KLSAgICAgICAgVFlQRV9GUkFDVElPTiA9IDB4MDYsCi0KLSAgICAgICAgLy8gQmVnaW5uaW5nIG9mIGludGVnZXIgZmxhdm9ycy4uLgotICAgICAgICBUWVBFX0ZJUlNUX0lOVCA9IDB4MTAsCi0KLSAgICAgICAgLy8gVGhlICdkYXRhJyBpcyBhIHJhdyBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBmb3JtIG4uLm4uCi0gICAgICAgIFRZUEVfSU5UX0RFQyA9IDB4MTAsCi0gICAgICAgIC8vIFRoZSAnZGF0YScgaXMgYSByYXcgaW50ZWdlciB2YWx1ZSBvZiB0aGUgZm9ybSAweG4uLm4uCi0gICAgICAgIFRZUEVfSU5UX0hFWCA9IDB4MTEsCi0gICAgICAgIC8vIFRoZSAnZGF0YScgaXMgZWl0aGVyIDAgb3IgMSwgZm9yIGlucHV0ICJmYWxzZSIgb3IgInRydWUiIHJlc3BlY3RpdmVseS4KLSAgICAgICAgVFlQRV9JTlRfQk9PTEVBTiA9IDB4MTIsCi0KLSAgICAgICAgLy8gQmVnaW5uaW5nIG9mIGNvbG9yIGludGVnZXIgZmxhdm9ycy4uLgotICAgICAgICBUWVBFX0ZJUlNUX0NPTE9SX0lOVCA9IDB4MWMsCi0KLSAgICAgICAgLy8gVGhlICdkYXRhJyBpcyBhIHJhdyBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBmb3JtICNhYXJyZ2diYi4KLSAgICAgICAgVFlQRV9JTlRfQ09MT1JfQVJHQjggPSAweDFjLAotICAgICAgICAvLyBUaGUgJ2RhdGEnIGlzIGEgcmF3IGludGVnZXIgdmFsdWUgb2YgdGhlIGZvcm0gI3JyZ2diYi4KLSAgICAgICAgVFlQRV9JTlRfQ09MT1JfUkdCOCA9IDB4MWQsCi0gICAgICAgIC8vIFRoZSAnZGF0YScgaXMgYSByYXcgaW50ZWdlciB2YWx1ZSBvZiB0aGUgZm9ybSAjYXJnYi4KLSAgICAgICAgVFlQRV9JTlRfQ09MT1JfQVJHQjQgPSAweDFlLAotICAgICAgICAvLyBUaGUgJ2RhdGEnIGlzIGEgcmF3IGludGVnZXIgdmFsdWUgb2YgdGhlIGZvcm0gI3JnYi4KLSAgICAgICAgVFlQRV9JTlRfQ09MT1JfUkdCNCA9IDB4MWYsCi0KLSAgICAgICAgLy8gLi4uZW5kIG9mIGludGVnZXIgZmxhdm9ycy4KLSAgICAgICAgVFlQRV9MQVNUX0NPTE9SX0lOVCA9IDB4MWYsCi0KLSAgICAgICAgLy8gLi4uZW5kIG9mIGludGVnZXIgZmxhdm9ycy4KLSAgICAgICAgVFlQRV9MQVNUX0lOVCA9IDB4MWYKLSAgICB9OwotICAgIHVpbnQ4X3QgZGF0YVR5cGU7Ci0KLSAgICAvLyBTdHJ1Y3R1cmUgb2YgY29tcGxleCBkYXRhIHZhbHVlcyAoVFlQRV9VTklUIGFuZCBUWVBFX0ZSQUNUSU9OKQotICAgIGVudW0gewotICAgICAgICAvLyBXaGVyZSB0aGUgdW5pdCB0eXBlIGluZm9ybWF0aW9uIGlzLiAgVGhpcyBnaXZlcyB1cyAxNiBwb3NzaWJsZQotICAgICAgICAvLyB0eXBlcywgYXMgZGVmaW5lZCBiZWxvdy4KLSAgICAgICAgQ09NUExFWF9VTklUX1NISUZUID0gMCwKLSAgICAgICAgQ09NUExFWF9VTklUX01BU0sgPSAweGYsCi0KLSAgICAgICAgLy8gVFlQRV9ESU1FTlNJT046IFZhbHVlIGlzIHJhdyBwaXhlbHMuCi0gICAgICAgIENPTVBMRVhfVU5JVF9QWCA9IDAsCi0gICAgICAgIC8vIFRZUEVfRElNRU5TSU9OOiBWYWx1ZSBpcyBEZXZpY2UgSW5kZXBlbmRlbnQgUGl4ZWxzLgotICAgICAgICBDT01QTEVYX1VOSVRfRElQID0gMSwKLSAgICAgICAgLy8gVFlQRV9ESU1FTlNJT046IFZhbHVlIGlzIGEgU2NhbGVkIGRldmljZSBpbmRlcGVuZGVudCBQaXhlbHMuCi0gICAgICAgIENPTVBMRVhfVU5JVF9TUCA9IDIsCi0gICAgICAgIC8vIFRZUEVfRElNRU5TSU9OOiBWYWx1ZSBpcyBpbiBwb2ludHMuCi0gICAgICAgIENPTVBMRVhfVU5JVF9QVCA9IDMsCi0gICAgICAgIC8vIFRZUEVfRElNRU5TSU9OOiBWYWx1ZSBpcyBpbiBpbmNoZXMuCi0gICAgICAgIENPTVBMRVhfVU5JVF9JTiA9IDQsCi0gICAgICAgIC8vIFRZUEVfRElNRU5TSU9OOiBWYWx1ZSBpcyBpbiBtaWxsaW1ldGVycy4KLSAgICAgICAgQ09NUExFWF9VTklUX01NID0gNSwKLQotICAgICAgICAvLyBUWVBFX0ZSQUNUSU9OOiBBIGJhc2ljIGZyYWN0aW9uIG9mIHRoZSBvdmVyYWxsIHNpemUuCi0gICAgICAgIENPTVBMRVhfVU5JVF9GUkFDVElPTiA9IDAsCi0gICAgICAgIC8vIFRZUEVfRlJBQ1RJT046IEEgZnJhY3Rpb24gb2YgdGhlIHBhcmVudCBzaXplLgotICAgICAgICBDT01QTEVYX1VOSVRfRlJBQ1RJT05fUEFSRU5UID0gMSwKLQotICAgICAgICAvLyBXaGVyZSB0aGUgcmFkaXggaW5mb3JtYXRpb24gaXMsIHRlbGxpbmcgd2hlcmUgdGhlIGRlY2ltYWwgcGxhY2UKLSAgICAgICAgLy8gYXBwZWFycyBpbiB0aGUgbWFudGlzc2EuICBUaGlzIGdpdmUgdXMgNCBwb3NzaWJsZSBmaXhlZCBwb2ludAotICAgICAgICAvLyByZXByZXNlbnRhdGlvbnMgYXMgZGVmaW5lZCBiZWxvdy4KLSAgICAgICAgQ09NUExFWF9SQURJWF9TSElGVCA9IDQsCi0gICAgICAgIENPTVBMRVhfUkFESVhfTUFTSyA9IDB4MywKLQotICAgICAgICAvLyBUaGUgbWFudGlzc2EgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIC0tIGkuZS4sIDB4bm5ubm5uLjAKLSAgICAgICAgQ09NUExFWF9SQURJWF8yM3AwID0gMCwKLSAgICAgICAgLy8gVGhlIG1hbnRpc3NhIG1hZ25pdHVkZSBpcyAxNiBiaXRzIC0tIGkuZSwgMHhubm5uLm5uCi0gICAgICAgIENPTVBMRVhfUkFESVhfMTZwNyA9IDEsCi0gICAgICAgIC8vIFRoZSBtYW50aXNzYSBtYWduaXR1ZGUgaXMgOCBiaXRzIC0tIGkuZSwgMHhubi5ubm5uCi0gICAgICAgIENPTVBMRVhfUkFESVhfOHAxNSA9IDIsCi0gICAgICAgIC8vIFRoZSBtYW50aXNzYSBtYWduaXR1ZGUgaXMgMCBiaXRzIC0tIGkuZSwgMHgwLm5ubm5ubgotICAgICAgICBDT01QTEVYX1JBRElYXzBwMjMgPSAzLAotCi0gICAgICAgIC8vIFdoZXJlIHRoZSBhY3R1YWwgdmFsdWUgaXMuICBUaGlzIGdpdmVzIHVzIDIzIGJpdHMgb2YKLSAgICAgICAgLy8gcHJlY2lzaW9uLiAgVGhlIHRvcCBiaXQgaXMgdGhlIHNpZ24uCi0gICAgICAgIENPTVBMRVhfTUFOVElTU0FfU0hJRlQgPSA4LAotICAgICAgICBDT01QTEVYX01BTlRJU1NBX01BU0sgPSAweGZmZmZmZgotICAgIH07Ci0KLSAgICAvLyBUaGUgZGF0YSBmb3IgdGhpcyBpdGVtLCBhcyBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gZGF0YVR5cGUuCi0gICAgdWludDMyX3QgZGF0YTsKLQotICAgIHZvaWQgY29weUZyb21fZHRvaChjb25zdCBSZXNfdmFsdWUmIHNyYyk7Ci19OwotCi0vKioKLSAqICBUaGlzIGlzIGEgcmVmZXJlbmNlIHRvIGEgdW5pcXVlIGVudHJ5IChhIFJlc1RhYmxlX2VudHJ5IHN0cnVjdHVyZSkKLSAqICBpbiBhIHJlc291cmNlIHRhYmxlLiAgVGhlIHZhbHVlIGlzIHN0cnVjdHVyZWQgYXM6IDB4cHB0dGVlZWUsCi0gKiAgd2hlcmUgcHAgaXMgdGhlIHBhY2thZ2UgaW5kZXgsIHR0IGlzIHRoZSB0eXBlIGluZGV4IGluIHRoYXQKLSAqICBwYWNrYWdlLCBhbmQgZWVlZSBpcyB0aGUgZW50cnkgaW5kZXggaW4gdGhhdCB0eXBlLiAgVGhlIHBhY2thZ2UKLSAqICBhbmQgdHlwZSB2YWx1ZXMgc3RhcnQgYXQgMSBmb3IgdGhlIGZpcnN0IGl0ZW0sIHRvIGhlbHAgY2F0Y2ggY2FzZXMKLSAqICB3aGVyZSB0aGV5IGhhdmUgbm90IGJlZW4gc3VwcGxpZWQuCi0gKi8KLXN0cnVjdCBSZXNUYWJsZV9yZWYKLXsKLSAgICB1aW50MzJfdCBpZGVudDsKLX07Ci0KLS8qKgotICogUmVmZXJlbmNlIHRvIGEgc3RyaW5nIGluIGEgc3RyaW5nIHBvb2wuCi0gKi8KLXN0cnVjdCBSZXNTdHJpbmdQb29sX3JlZgotewotICAgIC8vIEluZGV4IGludG8gdGhlIHN0cmluZyBwb29sIHRhYmxlICh1aW50MzJfdC1vZmZzZXQgZnJvbSB0aGUgaW5kaWNlcwotICAgIC8vIGltbWVkaWF0ZWx5IGFmdGVyIFJlc1N0cmluZ1Bvb2xfaGVhZGVyKSBhdCB3aGljaCB0byBmaW5kIHRoZSBsb2NhdGlvbgotICAgIC8vIG9mIHRoZSBzdHJpbmcgZGF0YSBpbiB0aGUgcG9vbC4KLSAgICB1aW50MzJfdCBpbmRleDsKLX07Ci0KLS8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIFN0cmluZyBQb29sCi0gKgotICogIEEgc2V0IG9mIHN0cmluZ3MgdGhhdCBjYW4gYmUgcmVmZXJlbmNlcyBieSBvdGhlcnMgdGhyb3VnaCBhCi0gKiAgUmVzU3RyaW5nUG9vbF9yZWYuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qKgotICogRGVmaW5pdGlvbiBmb3IgYSBwb29sIG9mIHN0cmluZ3MuICBUaGUgZGF0YSBvZiB0aGlzIGNodW5rIGlzIGFuCi0gKiBhcnJheSBvZiB1aW50MzJfdCBwcm92aWRpbmcgaW5kaWNlcyBpbnRvIHRoZSBwb29sLCByZWxhdGl2ZSB0bwotICogc3RyaW5nc1N0YXJ0LiAgQXQgc3RyaW5nc1N0YXJ0IGFyZSBhbGwgb2YgdGhlIFVURi0xNiBzdHJpbmdzCi0gKiBjb25jYXRlbmF0ZWQgdG9nZXRoZXI7IGVhY2ggc3RhcnRzIHdpdGggYSB1aW50MTZfdCBvZiB0aGUgc3RyaW5nJ3MKLSAqIGxlbmd0aCBhbmQgZWFjaCBlbmRzIHdpdGggYSAweDAwMDAgdGVybWluYXRvci4gIElmIGEgc3RyaW5nIGlzID4KLSAqIDMyNzY3IGNoYXJhY3RlcnMsIHRoZSBoaWdoIGJpdCBvZiB0aGUgbGVuZ3RoIGlzIHNldCBtZWFuaW5nIHRvIHRha2UKLSAqIHRob3NlIDE1IGJpdHMgYXMgYSBoaWdoIHdvcmQgYW5kIGl0IHdpbGwgYmUgZm9sbG93ZWQgYnkgYW5vdGhlcgotICogdWludDE2X3QgY29udGFpbmluZyB0aGUgbG93IHdvcmQuCi0gKgotICogSWYgc3R5bGVDb3VudCBpcyBub3QgemVybywgdGhlbiBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGFycmF5IG9mCi0gKiB1aW50MzJfdCBpbmRpY2VzIGludG8gdGhlIHN0cmluZyB0YWJsZSBpcyBhbm90aGVyIGFycmF5IG9mIGluZGljZXMKLSAqIGludG8gYSBzdHlsZSB0YWJsZSBzdGFydGluZyBhdCBzdHlsZXNTdGFydC4gIEVhY2ggZW50cnkgaW4gdGhlCi0gKiBzdHlsZSB0YWJsZSBpcyBhbiBhcnJheSBvZiBSZXNTdHJpbmdQb29sX3NwYW4gc3RydWN0dXJlcy4KLSAqLwotc3RydWN0IFJlc1N0cmluZ1Bvb2xfaGVhZGVyCi17Ci0gICAgc3RydWN0IFJlc0NodW5rX2hlYWRlciBoZWFkZXI7Ci0KLSAgICAvLyBOdW1iZXIgb2Ygc3RyaW5ncyBpbiB0aGlzIHBvb2wgKG51bWJlciBvZiB1aW50MzJfdCBpbmRpY2VzIHRoYXQgZm9sbG93Ci0gICAgLy8gaW4gdGhlIGRhdGEpLgotICAgIHVpbnQzMl90IHN0cmluZ0NvdW50OwotCi0gICAgLy8gTnVtYmVyIG9mIHN0eWxlIHNwYW4gYXJyYXlzIGluIHRoZSBwb29sIChudW1iZXIgb2YgdWludDMyX3QgaW5kaWNlcwotICAgIC8vIGZvbGxvdyB0aGUgc3RyaW5nIGluZGljZXMpLgotICAgIHVpbnQzMl90IHN0eWxlQ291bnQ7Ci0KLSAgICAvLyBGbGFncy4KLSAgICBlbnVtIHsKLSAgICAgICAgLy8gSWYgc2V0LCB0aGUgc3RyaW5nIGluZGV4IGlzIHNvcnRlZCBieSB0aGUgc3RyaW5nIHZhbHVlcyAoYmFzZWQKLSAgICAgICAgLy8gb24gc3RyY21wMTYoKSkuCi0gICAgICAgIFNPUlRFRF9GTEFHID0gMTw8MCwKLQotICAgICAgICAvLyBTdHJpbmcgcG9vbCBpcyBlbmNvZGVkIGluIFVURi04Ci0gICAgICAgIFVURjhfRkxBRyA9IDE8PDgKLSAgICB9OwotICAgIHVpbnQzMl90IGZsYWdzOwotCi0gICAgLy8gSW5kZXggZnJvbSBoZWFkZXIgb2YgdGhlIHN0cmluZyBkYXRhLgotICAgIHVpbnQzMl90IHN0cmluZ3NTdGFydDsKLQotICAgIC8vIEluZGV4IGZyb20gaGVhZGVyIG9mIHRoZSBzdHlsZSBkYXRhLgotICAgIHVpbnQzMl90IHN0eWxlc1N0YXJ0OwotfTsKLQotLyoqCi0gKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGEgc3BhbiBvZiBzdHlsZSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGgKLSAqIGEgc3RyaW5nIGluIHRoZSBwb29sLgotICovCi1zdHJ1Y3QgUmVzU3RyaW5nUG9vbF9zcGFuCi17Ci0gICAgZW51bSB7Ci0gICAgICAgIEVORCA9IDB4RkZGRkZGRkYKLSAgICB9OwotCi0gICAgLy8gVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgc3BhbiAtLSB0aGF0IGlzLCB0aGUgbmFtZSBvZiB0aGUgWE1MCi0gICAgLy8gdGFnIHRoYXQgZGVmaW5lZCBpdC4gIFRoZSBzcGVjaWFsIHZhbHVlIEVORCAoMHhGRkZGRkZGRikgaW5kaWNhdGVzCi0gICAgLy8gdGhlIGVuZCBvZiBhbiBhcnJheSBvZiBzcGFucy4KLSAgICBSZXNTdHJpbmdQb29sX3JlZiBuYW1lOwotCi0gICAgLy8gVGhlIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyB0aGF0IHRoaXMgc3BhbiBhcHBsaWVzIHRvLgotICAgIHVpbnQzMl90IGZpcnN0Q2hhciwgbGFzdENoYXI7Ci19OwotCi0vKioKLSAqIENvbnZlbmllbmNlIGNsYXNzIGZvciBhY2Nlc3NpbmcgZGF0YSBpbiBhIFJlc1N0cmluZ1Bvb2wgcmVzb3VyY2UuCi0gKi8KLWNsYXNzIFJlc1N0cmluZ1Bvb2wKLXsKLXB1YmxpYzoKLSAgICBSZXNTdHJpbmdQb29sKCk7Ci0gICAgUmVzU3RyaW5nUG9vbChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgYm9vbCBjb3B5RGF0YT1mYWxzZSk7Ci0gICAgflJlc1N0cmluZ1Bvb2woKTsKLQotICAgIHN0YXR1c190IHNldFRvKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCBib29sIGNvcHlEYXRhPWZhbHNlKTsKLQotICAgIHN0YXR1c190IGdldEVycm9yKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHVuaW5pdCgpOwotCi0gICAgLy8gUmV0dXJuIHN0cmluZyBlbnRyeSBhcyBVVEYxNjsgaWYgdGhlIHBvb2wgaXMgVVRGOCwgdGhlIHN0cmluZyB3aWxsCi0gICAgLy8gYmUgY29udmVydGVkIGJlZm9yZSByZXR1cm5pbmcuCi0gICAgaW5saW5lIGNvbnN0IGNoYXIxNl90KiBzdHJpbmdBdChjb25zdCBSZXNTdHJpbmdQb29sX3JlZiYgcmVmLCBzaXplX3QqIG91dExlbikgY29uc3QgewotICAgICAgICByZXR1cm4gc3RyaW5nQXQocmVmLmluZGV4LCBvdXRMZW4pOwotICAgIH0KLSAgICBjb25zdCBjaGFyMTZfdCogc3RyaW5nQXQoc2l6ZV90IGlkeCwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0OwotCi0gICAgLy8gTm90ZTogcmV0dXJucyBudWxsIGlmIHRoZSBzdHJpbmcgcG9vbCBpcyBub3QgVVRGOC4KLSAgICBjb25zdCBjaGFyKiBzdHJpbmc4QXQoc2l6ZV90IGlkeCwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0OwotCi0gICAgLy8gUmV0dXJuIHN0cmluZyB3aGV0aGVyIHRoZSBwb29sIGlzIFVURjggb3IgVVRGMTYuICBEb2VzIG5vdCBhbGxvdyB5b3UKLSAgICAvLyB0byBkaXN0aW5ndWlzaCBudWxsLgotICAgIGNvbnN0IFN0cmluZzggc3RyaW5nOE9iamVjdEF0KHNpemVfdCBpZHgpIGNvbnN0OwotCi0gICAgY29uc3QgUmVzU3RyaW5nUG9vbF9zcGFuKiBzdHlsZUF0KGNvbnN0IFJlc1N0cmluZ1Bvb2xfcmVmJiByZWYpIGNvbnN0OwotICAgIGNvbnN0IFJlc1N0cmluZ1Bvb2xfc3Bhbiogc3R5bGVBdChzaXplX3QgaWR4KSBjb25zdDsKLQotICAgIHNzaXplX3QgaW5kZXhPZlN0cmluZyhjb25zdCBjaGFyMTZfdCogc3RyLCBzaXplX3Qgc3RyTGVuKSBjb25zdDsKLQotICAgIHNpemVfdCBzaXplKCkgY29uc3Q7Ci0gICAgc2l6ZV90IHN0eWxlQ291bnQoKSBjb25zdDsKLSAgICBzaXplX3QgYnl0ZXMoKSBjb25zdDsKLQotICAgIGJvb2wgaXNTb3J0ZWQoKSBjb25zdDsKLSAgICBib29sIGlzVVRGOCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHN0YXR1c190ICAgICAgICAgICAgICAgICAgICBtRXJyb3I7Ci0gICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgIG1Pd25lZERhdGE7Ci0gICAgY29uc3QgUmVzU3RyaW5nUG9vbF9oZWFkZXIqIG1IZWFkZXI7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgIG1TaXplOwotICAgIG11dGFibGUgTXV0ZXggICAgICAgICAgICAgICBtRGVjb2RlTG9jazsKLSAgICBjb25zdCB1aW50MzJfdCogICAgICAgICAgICAgbUVudHJpZXM7Ci0gICAgY29uc3QgdWludDMyX3QqICAgICAgICAgICAgIG1FbnRyeVN0eWxlczsKLSAgICBjb25zdCB2b2lkKiAgICAgICAgICAgICAgICAgbVN0cmluZ3M7Ci0gICAgY2hhcjE2X3QgbXV0YWJsZSoqICAgICAgICAgIG1DYWNoZTsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgbVN0cmluZ1Bvb2xTaXplOyAgICAvLyBudW1iZXIgb2YgdWludDE2X3QKLSAgICBjb25zdCB1aW50MzJfdCogICAgICAgICAgICAgbVN0eWxlczsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgbVN0eWxlUG9vbFNpemU7ICAgIC8vIG51bWJlciBvZiB1aW50MzJfdAotfTsKLQotLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgWE1MIFRyZWUKLSAqCi0gKiAgQmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBkb2N1bWVudC4gIFRoaXMgaXMgZGVzaWduZWQgdG8KLSAqICBleHByZXNzIGV2ZXJ5dGhpbmcgaW4gYW4gWE1MIGRvY3VtZW50LCBpbiBhIGZvcm0gdGhhdCBpcyBtdWNoCi0gKiAgZWFzaWVyIHRvIHBhcnNlIG9uIHRoZSBkZXZpY2UuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qKgotICogWE1MIHRyZWUgaGVhZGVyLiAgVGhpcyBhcHBlYXJzIGF0IHRoZSBmcm9udCBvZiBhbiBYTUwgdHJlZSwKLSAqIGRlc2NyaWJpbmcgaXRzIGNvbnRlbnQuICBJdCBpcyBmb2xsb3dlZCBieSBhIGZsYXQgYXJyYXkgb2YKLSAqIFJlc1hNTFRyZWVfbm9kZSBzdHJ1Y3R1cmVzOyB0aGUgaGllcmFyY2h5IG9mIHRoZSBYTUwgZG9jdW1lbnQKLSAqIGlzIGRlc2NyaWJlZCBieSB0aGUgb2NjdXJyYW5jZSBvZiBSRVNfWE1MX1NUQVJUX0VMRU1FTlRfVFlQRQotICogYW5kIGNvcnJlc3BvbmRpbmcgUkVTX1hNTF9FTkRfRUxFTUVOVF9UWVBFIG5vZGVzIGluIHRoZSBhcnJheS4KLSAqLwotc3RydWN0IFJlc1hNTFRyZWVfaGVhZGVyCi17Ci0gICAgc3RydWN0IFJlc0NodW5rX2hlYWRlciBoZWFkZXI7Ci19OwotCi0vKioKLSAqIEJhc2ljIFhNTCB0cmVlIG5vZGUuICBBIHNpbmdsZSBpdGVtIGluIHRoZSBYTUwgZG9jdW1lbnQuICBFeHRlbmRlZCBpbmZvCi0gKiBhYm91dCB0aGUgbm9kZSBjYW4gYmUgZm91bmQgYWZ0ZXIgaGVhZGVyLmhlYWRlclNpemUuCi0gKi8KLXN0cnVjdCBSZXNYTUxUcmVlX25vZGUKLXsKLSAgICBzdHJ1Y3QgUmVzQ2h1bmtfaGVhZGVyIGhlYWRlcjsKLQotICAgIC8vIExpbmUgbnVtYmVyIGluIG9yaWdpbmFsIHNvdXJjZSBmaWxlIGF0IHdoaWNoIHRoaXMgZWxlbWVudCBhcHBlYXJlZC4KLSAgICB1aW50MzJfdCBsaW5lTnVtYmVyOwotCi0gICAgLy8gT3B0aW9uYWwgWE1MIGNvbW1lbnQgdGhhdCB3YXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZWxlbWVudDsgLTEgaWYgbm9uZS4KLSAgICBzdHJ1Y3QgUmVzU3RyaW5nUG9vbF9yZWYgY29tbWVudDsKLX07Ci0KLS8qKgotICogRXh0ZW5kZWQgWE1MIHRyZWUgbm9kZSBmb3IgQ0RBVEEgdGFncyAtLSBpbmNsdWRlcyB0aGUgQ0RBVEEgc3RyaW5nLgotICogQXBwZWFycyBoZWFkZXIuaGVhZGVyU2l6ZSBieXRlcyBhZnRlciBhIFJlc1hNTFRyZWVfbm9kZS4KLSAqLwotc3RydWN0IFJlc1hNTFRyZWVfY2RhdGFFeHQKLXsKLSAgICAvLyBUaGUgcmF3IENEQVRBIGNoYXJhY3RlciBkYXRhLgotICAgIHN0cnVjdCBSZXNTdHJpbmdQb29sX3JlZiBkYXRhOwotICAgIAotICAgIC8vIFRoZSB0eXBlZCB2YWx1ZSBvZiB0aGUgY2hhcmFjdGVyIGRhdGEgaWYgdGhpcyBpcyBhIENEQVRBIG5vZGUuCi0gICAgc3RydWN0IFJlc192YWx1ZSB0eXBlZERhdGE7Ci19OwotCi0vKioKLSAqIEV4dGVuZGVkIFhNTCB0cmVlIG5vZGUgZm9yIG5hbWVzcGFjZSBzdGFydC9lbmQgbm9kZXMuCi0gKiBBcHBlYXJzIGhlYWRlci5oZWFkZXJTaXplIGJ5dGVzIGFmdGVyIGEgUmVzWE1MVHJlZV9ub2RlLgotICovCi1zdHJ1Y3QgUmVzWE1MVHJlZV9uYW1lc3BhY2VFeHQKLXsKLSAgICAvLyBUaGUgcHJlZml4IG9mIHRoZSBuYW1lc3BhY2UuCi0gICAgc3RydWN0IFJlc1N0cmluZ1Bvb2xfcmVmIHByZWZpeDsKLSAgICAKLSAgICAvLyBUaGUgVVJJIG9mIHRoZSBuYW1lc3BhY2UuCi0gICAgc3RydWN0IFJlc1N0cmluZ1Bvb2xfcmVmIHVyaTsKLX07Ci0KLS8qKgotICogRXh0ZW5kZWQgWE1MIHRyZWUgbm9kZSBmb3IgZWxlbWVudCBzdGFydC9lbmQgbm9kZXMuCi0gKiBBcHBlYXJzIGhlYWRlci5oZWFkZXJTaXplIGJ5dGVzIGFmdGVyIGEgUmVzWE1MVHJlZV9ub2RlLgotICovCi1zdHJ1Y3QgUmVzWE1MVHJlZV9lbmRFbGVtZW50RXh0Ci17Ci0gICAgLy8gU3RyaW5nIG9mIHRoZSBmdWxsIG5hbWVzcGFjZSBvZiB0aGlzIGVsZW1lbnQuCi0gICAgc3RydWN0IFJlc1N0cmluZ1Bvb2xfcmVmIG5zOwotICAgIAotICAgIC8vIFN0cmluZyBuYW1lIG9mIHRoaXMgbm9kZSBpZiBpdCBpcyBhbiBFTEVNRU5UOyB0aGUgcmF3Ci0gICAgLy8gY2hhcmFjdGVyIGRhdGEgaWYgdGhpcyBpcyBhIENEQVRBIG5vZGUuCi0gICAgc3RydWN0IFJlc1N0cmluZ1Bvb2xfcmVmIG5hbWU7Ci19OwotCi0vKioKLSAqIEV4dGVuZGVkIFhNTCB0cmVlIG5vZGUgZm9yIHN0YXJ0IHRhZ3MgLS0gaW5jbHVkZXMgYXR0cmlidXRlCi0gKiBpbmZvcm1hdGlvbi4KLSAqIEFwcGVhcnMgaGVhZGVyLmhlYWRlclNpemUgYnl0ZXMgYWZ0ZXIgYSBSZXNYTUxUcmVlX25vZGUuCi0gKi8KLXN0cnVjdCBSZXNYTUxUcmVlX2F0dHJFeHQKLXsKLSAgICAvLyBTdHJpbmcgb2YgdGhlIGZ1bGwgbmFtZXNwYWNlIG9mIHRoaXMgZWxlbWVudC4KLSAgICBzdHJ1Y3QgUmVzU3RyaW5nUG9vbF9yZWYgbnM7Ci0gICAgCi0gICAgLy8gU3RyaW5nIG5hbWUgb2YgdGhpcyBub2RlIGlmIGl0IGlzIGFuIEVMRU1FTlQ7IHRoZSByYXcKLSAgICAvLyBjaGFyYWN0ZXIgZGF0YSBpZiB0aGlzIGlzIGEgQ0RBVEEgbm9kZS4KLSAgICBzdHJ1Y3QgUmVzU3RyaW5nUG9vbF9yZWYgbmFtZTsKLSAgICAKLSAgICAvLyBCeXRlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGlzIHN0cnVjdHVyZSB3aGVyZSB0aGUgYXR0cmlidXRlcyBzdGFydC4KLSAgICB1aW50MTZfdCBhdHRyaWJ1dGVTdGFydDsKLSAgICAKLSAgICAvLyBTaXplIG9mIHRoZSBSZXNYTUxUcmVlX2F0dHJpYnV0ZSBzdHJ1Y3R1cmVzIHRoYXQgZm9sbG93LgotICAgIHVpbnQxNl90IGF0dHJpYnV0ZVNpemU7Ci0gICAgCi0gICAgLy8gTnVtYmVyIG9mIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGFuIEVMRU1FTlQuICBUaGVzZSBhcmUKLSAgICAvLyBhdmFpbGFibGUgYXMgYW4gYXJyYXkgb2YgUmVzWE1MVHJlZV9hdHRyaWJ1dGUgc3RydWN0dXJlcwotICAgIC8vIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIG5vZGUuCi0gICAgdWludDE2X3QgYXR0cmlidXRlQ291bnQ7Ci0gICAgCi0gICAgLy8gSW5kZXggKDEtYmFzZWQpIG9mIHRoZSAiaWQiIGF0dHJpYnV0ZS4gMCBpZiBub25lLgotICAgIHVpbnQxNl90IGlkSW5kZXg7Ci0gICAgCi0gICAgLy8gSW5kZXggKDEtYmFzZWQpIG9mIHRoZSAiY2xhc3MiIGF0dHJpYnV0ZS4gMCBpZiBub25lLgotICAgIHVpbnQxNl90IGNsYXNzSW5kZXg7Ci0gICAgCi0gICAgLy8gSW5kZXggKDEtYmFzZWQpIG9mIHRoZSAic3R5bGUiIGF0dHJpYnV0ZS4gMCBpZiBub25lLgotICAgIHVpbnQxNl90IHN0eWxlSW5kZXg7Ci19OwotCi1zdHJ1Y3QgUmVzWE1MVHJlZV9hdHRyaWJ1dGUKLXsKLSAgICAvLyBOYW1lc3BhY2Ugb2YgdGhpcyBhdHRyaWJ1dGUuCi0gICAgc3RydWN0IFJlc1N0cmluZ1Bvb2xfcmVmIG5zOwotICAgIAotICAgIC8vIE5hbWUgb2YgdGhpcyBhdHRyaWJ1dGUuCi0gICAgc3RydWN0IFJlc1N0cmluZ1Bvb2xfcmVmIG5hbWU7Ci0KLSAgICAvLyBUaGUgb3JpZ2luYWwgcmF3IHN0cmluZyB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZS4KLSAgICBzdHJ1Y3QgUmVzU3RyaW5nUG9vbF9yZWYgcmF3VmFsdWU7Ci0gICAgCi0gICAgLy8gUHJvY2Vzc2VzZCB0eXBlZCB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZS4KLSAgICBzdHJ1Y3QgUmVzX3ZhbHVlIHR5cGVkVmFsdWU7Ci19OwotCi1jbGFzcyBSZXNYTUxUcmVlOwotCi1jbGFzcyBSZXNYTUxQYXJzZXIKLXsKLXB1YmxpYzoKLSAgICBSZXNYTUxQYXJzZXIoY29uc3QgUmVzWE1MVHJlZSYgdHJlZSk7Ci0KLSAgICBlbnVtIGV2ZW50X2NvZGVfdCB7Ci0gICAgICAgIEJBRF9ET0NVTUVOVCA9IC0xLAotICAgICAgICBTVEFSVF9ET0NVTUVOVCA9IDAsCi0gICAgICAgIEVORF9ET0NVTUVOVCA9IDEsCi0gICAgICAgIAotICAgICAgICBGSVJTVF9DSFVOS19DT0RFID0gUkVTX1hNTF9GSVJTVF9DSFVOS19UWVBFLCAKLSAgICAgICAgCi0gICAgICAgIFNUQVJUX05BTUVTUEFDRSA9IFJFU19YTUxfU1RBUlRfTkFNRVNQQUNFX1RZUEUsCi0gICAgICAgIEVORF9OQU1FU1BBQ0UgPSBSRVNfWE1MX0VORF9OQU1FU1BBQ0VfVFlQRSwKLSAgICAgICAgU1RBUlRfVEFHID0gUkVTX1hNTF9TVEFSVF9FTEVNRU5UX1RZUEUsCi0gICAgICAgIEVORF9UQUcgPSBSRVNfWE1MX0VORF9FTEVNRU5UX1RZUEUsCi0gICAgICAgIFRFWFQgPSBSRVNfWE1MX0NEQVRBX1RZUEUKLSAgICB9OwotCi0gICAgc3RydWN0IFJlc1hNTFBvc2l0aW9uCi0gICAgewotICAgICAgICBldmVudF9jb2RlX3QgICAgICAgICAgICAgICAgZXZlbnRDb2RlOwotICAgICAgICBjb25zdCBSZXNYTUxUcmVlX25vZGUqICAgICAgY3VyTm9kZTsKLSAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgICAgICAgIGN1ckV4dDsKLSAgICB9OwotCi0gICAgdm9pZCByZXN0YXJ0KCk7Ci0KLSAgICBjb25zdCBSZXNTdHJpbmdQb29sJiBnZXRTdHJpbmdzKCkgY29uc3Q7Ci0KLSAgICBldmVudF9jb2RlX3QgZ2V0RXZlbnRUeXBlKCkgY29uc3Q7Ci0gICAgLy8gTm90ZSwgdW5saWtlIFhtbFB1bGxQYXJzZXIsIHRoZSBmaXJzdCBjYWxsIHRvIG5leHQoKSB3aWxsIHJldHVybgotICAgIC8vIFNUQVJUX1RBRyBvZiB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICBldmVudF9jb2RlX3QgbmV4dCgpOwotCi0gICAgLy8gVGhlc2UgYXJlIGF2YWlsYWJsZSBmb3IgYWxsIG5vZGVzOgotICAgIGludDMyX3QgZ2V0Q29tbWVudElEKCkgY29uc3Q7Ci0gICAgY29uc3QgdWludDE2X3QqIGdldENvbW1lbnQoc2l6ZV90KiBvdXRMZW4pIGNvbnN0OwotICAgIHVpbnQzMl90IGdldExpbmVOdW1iZXIoKSBjb25zdDsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGF2YWlsYWJsZSBmb3IgVEVYVDoKLSAgICBpbnQzMl90IGdldFRleHRJRCgpIGNvbnN0OwotICAgIGNvbnN0IHVpbnQxNl90KiBnZXRUZXh0KHNpemVfdCogb3V0TGVuKSBjb25zdDsKLSAgICBzc2l6ZV90IGdldFRleHRWYWx1ZShSZXNfdmFsdWUqIG91dFZhbHVlKSBjb25zdDsKLSAgICAKLSAgICAvLyBUaGVzZSBhcmUgYXZhaWxhYmxlIGZvciBTVEFSVF9OQU1FU1BBQ0UgYW5kIEVORF9OQU1FU1BBQ0U6Ci0gICAgaW50MzJfdCBnZXROYW1lc3BhY2VQcmVmaXhJRCgpIGNvbnN0OwotICAgIGNvbnN0IHVpbnQxNl90KiBnZXROYW1lc3BhY2VQcmVmaXgoc2l6ZV90KiBvdXRMZW4pIGNvbnN0OwotICAgIGludDMyX3QgZ2V0TmFtZXNwYWNlVXJpSUQoKSBjb25zdDsKLSAgICBjb25zdCB1aW50MTZfdCogZ2V0TmFtZXNwYWNlVXJpKHNpemVfdCogb3V0TGVuKSBjb25zdDsKLSAgICAKLSAgICAvLyBUaGVzZSBhcmUgYXZhaWxhYmxlIGZvciBTVEFSVF9UQUcgYW5kIEVORF9UQUc6Ci0gICAgaW50MzJfdCBnZXRFbGVtZW50TmFtZXNwYWNlSUQoKSBjb25zdDsKLSAgICBjb25zdCB1aW50MTZfdCogZ2V0RWxlbWVudE5hbWVzcGFjZShzaXplX3QqIG91dExlbikgY29uc3Q7Ci0gICAgaW50MzJfdCBnZXRFbGVtZW50TmFtZUlEKCkgY29uc3Q7Ci0gICAgY29uc3QgdWludDE2X3QqIGdldEVsZW1lbnROYW1lKHNpemVfdCogb3V0TGVuKSBjb25zdDsKLSAgICAKLSAgICAvLyBSZW1haW5pbmcgbWV0aG9kcyBhcmUgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgYXR0cmlidXRlcwotICAgIC8vIGFzc29jaWF0ZWQgd2l0aCBhIFNUQVJUX1RBRzoKLSAgICAKLSAgICBzaXplX3QgZ2V0QXR0cmlidXRlQ291bnQoKSBjb25zdDsKLSAgICAKLSAgICAvLyBSZXR1cm5zIC0xIGlmIG5vIG5hbWVzcGFjZSwgLTIgaWYgaWR4IG91dCBvZiByYW5nZS4KLSAgICBpbnQzMl90IGdldEF0dHJpYnV0ZU5hbWVzcGFjZUlEKHNpemVfdCBpZHgpIGNvbnN0OwotICAgIGNvbnN0IHVpbnQxNl90KiBnZXRBdHRyaWJ1dGVOYW1lc3BhY2Uoc2l6ZV90IGlkeCwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0OwotCi0gICAgaW50MzJfdCBnZXRBdHRyaWJ1dGVOYW1lSUQoc2l6ZV90IGlkeCkgY29uc3Q7Ci0gICAgY29uc3QgdWludDE2X3QqIGdldEF0dHJpYnV0ZU5hbWUoc2l6ZV90IGlkeCwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0OwotICAgIHVpbnQzMl90IGdldEF0dHJpYnV0ZU5hbWVSZXNJRChzaXplX3QgaWR4KSBjb25zdDsKLQotICAgIC8vIFRoZXNlIHdpbGwgd29yayBvbmx5IGlmIHRoZSB1bmRlcmx5aW5nIHN0cmluZyBwb29sIGlzIFVURi04LgotICAgIGNvbnN0IGNoYXIqIGdldEF0dHJpYnV0ZU5hbWVzcGFjZTgoc2l6ZV90IGlkeCwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0OwotICAgIGNvbnN0IGNoYXIqIGdldEF0dHJpYnV0ZU5hbWU4KHNpemVfdCBpZHgsIHNpemVfdCogb3V0TGVuKSBjb25zdDsKLQotICAgIGludDMyX3QgZ2V0QXR0cmlidXRlVmFsdWVTdHJpbmdJRChzaXplX3QgaWR4KSBjb25zdDsKLSAgICBjb25zdCB1aW50MTZfdCogZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoc2l6ZV90IGlkeCwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0OwotICAgIAotICAgIGludDMyX3QgZ2V0QXR0cmlidXRlRGF0YVR5cGUoc2l6ZV90IGlkeCkgY29uc3Q7Ci0gICAgaW50MzJfdCBnZXRBdHRyaWJ1dGVEYXRhKHNpemVfdCBpZHgpIGNvbnN0OwotICAgIHNzaXplX3QgZ2V0QXR0cmlidXRlVmFsdWUoc2l6ZV90IGlkeCwgUmVzX3ZhbHVlKiBvdXRWYWx1ZSkgY29uc3Q7Ci0KLSAgICBzc2l6ZV90IGluZGV4T2ZBdHRyaWJ1dGUoY29uc3QgY2hhciogbnMsIGNvbnN0IGNoYXIqIGF0dHIpIGNvbnN0OwotICAgIHNzaXplX3QgaW5kZXhPZkF0dHJpYnV0ZShjb25zdCBjaGFyMTZfdCogbnMsIHNpemVfdCBuc0xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIGF0dHIsIHNpemVfdCBhdHRyTGVuKSBjb25zdDsKLQotICAgIHNzaXplX3QgaW5kZXhPZklEKCkgY29uc3Q7Ci0gICAgc3NpemVfdCBpbmRleE9mQ2xhc3MoKSBjb25zdDsKLSAgICBzc2l6ZV90IGluZGV4T2ZTdHlsZSgpIGNvbnN0OwotCi0gICAgdm9pZCBnZXRQb3NpdGlvbihSZXNYTUxQb3NpdGlvbiogcG9zKSBjb25zdDsKLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFJlc1hNTFBvc2l0aW9uJiBwb3MpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBSZXNYTUxUcmVlOwotICAgIAotICAgIGV2ZW50X2NvZGVfdCBuZXh0Tm9kZSgpOwotCi0gICAgY29uc3QgUmVzWE1MVHJlZSYgICAgICAgICAgIG1UcmVlOwotICAgIGV2ZW50X2NvZGVfdCAgICAgICAgICAgICAgICBtRXZlbnRDb2RlOwotICAgIGNvbnN0IFJlc1hNTFRyZWVfbm9kZSogICAgICBtQ3VyTm9kZTsKLSAgICBjb25zdCB2b2lkKiAgICAgICAgICAgICAgICAgbUN1ckV4dDsKLX07Ci0KLS8qKgotICogQ29udmVuaWVuY2UgY2xhc3MgZm9yIGFjY2Vzc2luZyBkYXRhIGluIGEgUmVzWE1MVHJlZSByZXNvdXJjZS4KLSAqLwotY2xhc3MgUmVzWE1MVHJlZSA6IHB1YmxpYyBSZXNYTUxQYXJzZXIKLXsKLXB1YmxpYzoKLSAgICBSZXNYTUxUcmVlKCk7Ci0gICAgUmVzWE1MVHJlZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgYm9vbCBjb3B5RGF0YT1mYWxzZSk7Ci0gICAgflJlc1hNTFRyZWUoKTsKLQotICAgIHN0YXR1c190IHNldFRvKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCBib29sIGNvcHlEYXRhPWZhbHNlKTsKLQotICAgIHN0YXR1c190IGdldEVycm9yKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHVuaW5pdCgpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBSZXNYTUxQYXJzZXI7Ci0KLSAgICBzdGF0dXNfdCB2YWxpZGF0ZU5vZGUoY29uc3QgUmVzWE1MVHJlZV9ub2RlKiBub2RlKSBjb25zdDsKLQotICAgIHN0YXR1c190ICAgICAgICAgICAgICAgICAgICBtRXJyb3I7Ci0gICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgIG1Pd25lZERhdGE7Ci0gICAgY29uc3QgUmVzWE1MVHJlZV9oZWFkZXIqICAgIG1IZWFkZXI7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgIG1TaXplOwotICAgIGNvbnN0IHVpbnQ4X3QqICAgICAgICAgICAgICBtRGF0YUVuZDsKLSAgICBSZXNTdHJpbmdQb29sICAgICAgICAgICAgICAgbVN0cmluZ3M7Ci0gICAgY29uc3QgdWludDMyX3QqICAgICAgICAgICAgIG1SZXNJZHM7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgIG1OdW1SZXNJZHM7Ci0gICAgY29uc3QgUmVzWE1MVHJlZV9ub2RlKiAgICAgIG1Sb290Tm9kZTsKLSAgICBjb25zdCB2b2lkKiAgICAgICAgICAgICAgICAgbVJvb3RFeHQ7Ci0gICAgZXZlbnRfY29kZV90ICAgICAgICAgICAgICAgIG1Sb290Q29kZTsKLX07Ci0KLS8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIFJFU09VUkNFIFRBQkxFCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qKgotICogSGVhZGVyIGZvciBhIHJlc291cmNlIHRhYmxlLiAgSXRzIGRhdGEgY29udGFpbnMgYSBzZXJpZXMgb2YKLSAqIGFkZGl0aW9uYWwgY2h1bmtzOgotICogICAqIEEgUmVzU3RyaW5nUG9vbF9oZWFkZXIgY29udGFpbmluZyBhbGwgdGFibGUgdmFsdWVzLiAgVGhpcyBzdHJpbmcgcG9vbAotICogICAgIGNvbnRhaW5zIGFsbCBvZiB0aGUgc3RyaW5nIHZhbHVlcyBpbiB0aGUgZW50aXJlIHJlc291cmNlIHRhYmxlIChub3QKLSAqICAgICB0aGUgbmFtZXMgb2YgZW50cmllcyBvciB0eXBlIGlkZW50aWZpZXJzIGhvd2V2ZXIpLgotICogICAqIE9uZSBvciBtb3JlIFJlc1RhYmxlX3BhY2thZ2UgY2h1bmtzLgotICoKLSAqIFNwZWNpZmljIGVudHJpZXMgd2l0aGluIGEgcmVzb3VyY2UgdGFibGUgY2FuIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQKLSAqIHdpdGggYSBzaW5nbGUgaW50ZWdlciBhcyBkZWZpbmVkIGJ5IHRoZSBSZXNUYWJsZV9yZWYgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgUmVzVGFibGVfaGVhZGVyCi17Ci0gICAgc3RydWN0IFJlc0NodW5rX2hlYWRlciBoZWFkZXI7Ci0KLSAgICAvLyBUaGUgbnVtYmVyIG9mIFJlc1RhYmxlX3BhY2thZ2Ugc3RydWN0dXJlcy4KLSAgICB1aW50MzJfdCBwYWNrYWdlQ291bnQ7Ci19OwotCi0vKioKLSAqIEEgY29sbGVjdGlvbiBvZiByZXNvdXJjZSBkYXRhIHR5cGVzIHdpdGhpbiBhIHBhY2thZ2UuICBGb2xsb3dlZCBieQotICogb25lIG9yIG1vcmUgUmVzVGFibGVfdHlwZSBhbmQgUmVzVGFibGVfdHlwZVNwZWMgc3RydWN0dXJlcyBjb250YWluaW5nIHRoZQotICogZW50cnkgdmFsdWVzIGZvciBlYWNoIHJlc291cmNlIHR5cGUuCi0gKi8KLXN0cnVjdCBSZXNUYWJsZV9wYWNrYWdlCi17Ci0gICAgc3RydWN0IFJlc0NodW5rX2hlYWRlciBoZWFkZXI7Ci0KLSAgICAvLyBJZiB0aGlzIGlzIGEgYmFzZSBwYWNrYWdlLCBpdHMgSUQuICBQYWNrYWdlIElEcyBzdGFydAotICAgIC8vIGF0IDEgKGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZSBwYWNrYWdlIGJpdHMgaW4gYQotICAgIC8vIHJlc291cmNlIGlkZW50aWZpZXIpLiAgMCBtZWFucyB0aGlzIGlzIG5vdCBhIGJhc2UgcGFja2FnZS4KLSAgICB1aW50MzJfdCBpZDsKLQotICAgIC8vIEFjdHVhbCBuYW1lIG9mIHRoaXMgcGFja2FnZSwgXDAtdGVybWluYXRlZC4KLSAgICBjaGFyMTZfdCBuYW1lWzEyOF07Ci0KLSAgICAvLyBPZmZzZXQgdG8gYSBSZXNTdHJpbmdQb29sX2hlYWRlciBkZWZpbmluZyB0aGUgcmVzb3VyY2UKLSAgICAvLyB0eXBlIHN5bWJvbCB0YWJsZS4gIElmIHplcm8sIHRoaXMgcGFja2FnZSBpcyBpbmhlcml0aW5nIGZyb20KLSAgICAvLyBhbm90aGVyIGJhc2UgcGFja2FnZSAob3ZlcnJpZGluZyBzcGVjaWZpYyB2YWx1ZXMgaW4gaXQpLgotICAgIHVpbnQzMl90IHR5cGVTdHJpbmdzOwotCi0gICAgLy8gTGFzdCBpbmRleCBpbnRvIHR5cGVTdHJpbmdzIHRoYXQgaXMgZm9yIHB1YmxpYyB1c2UgYnkgb3RoZXJzLgotICAgIHVpbnQzMl90IGxhc3RQdWJsaWNUeXBlOwotCi0gICAgLy8gT2Zmc2V0IHRvIGEgUmVzU3RyaW5nUG9vbF9oZWFkZXIgZGVmaW5pbmcgdGhlIHJlc291cmNlCi0gICAgLy8ga2V5IHN5bWJvbCB0YWJsZS4gIElmIHplcm8sIHRoaXMgcGFja2FnZSBpcyBpbmhlcml0aW5nIGZyb20KLSAgICAvLyBhbm90aGVyIGJhc2UgcGFja2FnZSAob3ZlcnJpZGluZyBzcGVjaWZpYyB2YWx1ZXMgaW4gaXQpLgotICAgIHVpbnQzMl90IGtleVN0cmluZ3M7Ci0KLSAgICAvLyBMYXN0IGluZGV4IGludG8ga2V5U3RyaW5ncyB0aGF0IGlzIGZvciBwdWJsaWMgdXNlIGJ5IG90aGVycy4KLSAgICB1aW50MzJfdCBsYXN0UHVibGljS2V5OwotfTsKLQotLyoqCi0gKiBEZXNjcmliZXMgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uCi0gKi8KLXN0cnVjdCBSZXNUYWJsZV9jb25maWcKLXsKLSAgICAvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhpcyBzdHJ1Y3R1cmUuCi0gICAgdWludDMyX3Qgc2l6ZTsKLSAgICAKLSAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAvLyBNb2JpbGUgY291bnRyeSBjb2RlIChmcm9tIFNJTSkuICAwIG1lYW5zICJhbnkiLgotICAgICAgICAgICAgdWludDE2X3QgbWNjOwotICAgICAgICAgICAgLy8gTW9iaWxlIG5ldHdvcmsgY29kZSAoZnJvbSBTSU0pLiAgMCBtZWFucyAiYW55Ii4KLSAgICAgICAgICAgIHVpbnQxNl90IG1uYzsKLSAgICAgICAgfTsKLSAgICAgICAgdWludDMyX3QgaW1zaTsKLSAgICB9OwotICAgIAotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIC8vIFwwXDAgbWVhbnMgImFueSIuICBPdGhlcndpc2UsIGVuLCBmciwgZXRjLgotICAgICAgICAgICAgY2hhciBsYW5ndWFnZVsyXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gXDBcMCBtZWFucyAiYW55Ii4gIE90aGVyd2lzZSwgVVMsIENBLCBldGMuCi0gICAgICAgICAgICBjaGFyIGNvdW50cnlbMl07Ci0gICAgICAgIH07Ci0gICAgICAgIHVpbnQzMl90IGxvY2FsZTsKLSAgICB9OwotICAgIAotICAgIGVudW0gewotICAgICAgICBPUklFTlRBVElPTl9BTlkgID0gQUNPTkZJR1VSQVRJT05fT1JJRU5UQVRJT05fQU5ZLAotICAgICAgICBPUklFTlRBVElPTl9QT1JUID0gQUNPTkZJR1VSQVRJT05fT1JJRU5UQVRJT05fUE9SVCwKLSAgICAgICAgT1JJRU5UQVRJT05fTEFORCA9IEFDT05GSUdVUkFUSU9OX09SSUVOVEFUSU9OX0xBTkQsCi0gICAgICAgIE9SSUVOVEFUSU9OX1NRVUFSRSA9IEFDT05GSUdVUkFUSU9OX09SSUVOVEFUSU9OX1NRVUFSRSwKLSAgICB9OwotICAgIAotICAgIGVudW0gewotICAgICAgICBUT1VDSFNDUkVFTl9BTlkgID0gQUNPTkZJR1VSQVRJT05fVE9VQ0hTQ1JFRU5fQU5ZLAotICAgICAgICBUT1VDSFNDUkVFTl9OT1RPVUNIICA9IEFDT05GSUdVUkFUSU9OX1RPVUNIU0NSRUVOX05PVE9VQ0gsCi0gICAgICAgIFRPVUNIU0NSRUVOX1NUWUxVUyAgPSBBQ09ORklHVVJBVElPTl9UT1VDSFNDUkVFTl9TVFlMVVMsCi0gICAgICAgIFRPVUNIU0NSRUVOX0ZJTkdFUiAgPSBBQ09ORklHVVJBVElPTl9UT1VDSFNDUkVFTl9GSU5HRVIsCi0gICAgfTsKLSAgICAKLSAgICBlbnVtIHsKLSAgICAgICAgREVOU0lUWV9ERUZBVUxUID0gQUNPTkZJR1VSQVRJT05fREVOU0lUWV9ERUZBVUxULAotICAgICAgICBERU5TSVRZX0xPVyA9IEFDT05GSUdVUkFUSU9OX0RFTlNJVFlfTE9XLAotICAgICAgICBERU5TSVRZX01FRElVTSA9IEFDT05GSUdVUkFUSU9OX0RFTlNJVFlfTUVESVVNLAotICAgICAgICBERU5TSVRZX1RWID0gQUNPTkZJR1VSQVRJT05fREVOU0lUWV9UViwKLSAgICAgICAgREVOU0lUWV9ISUdIID0gQUNPTkZJR1VSQVRJT05fREVOU0lUWV9ISUdILAotICAgICAgICBERU5TSVRZX1hISUdIID0gQUNPTkZJR1VSQVRJT05fREVOU0lUWV9YSElHSCwKLSAgICAgICAgREVOU0lUWV9YWEhJR0ggPSBBQ09ORklHVVJBVElPTl9ERU5TSVRZX1hYSElHSCwKLSAgICAgICAgREVOU0lUWV9YWFhISUdIID0gQUNPTkZJR1VSQVRJT05fREVOU0lUWV9YWFhISUdILAotICAgICAgICBERU5TSVRZX05PTkUgPSBBQ09ORklHVVJBVElPTl9ERU5TSVRZX05PTkUKLSAgICB9OwotICAgIAotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVpbnQ4X3Qgb3JpZW50YXRpb247Ci0gICAgICAgICAgICB1aW50OF90IHRvdWNoc2NyZWVuOwotICAgICAgICAgICAgdWludDE2X3QgZGVuc2l0eTsKLSAgICAgICAgfTsKLSAgICAgICAgdWludDMyX3Qgc2NyZWVuVHlwZTsKLSAgICB9OwotICAgIAotICAgIGVudW0gewotICAgICAgICBLRVlCT0FSRF9BTlkgID0gQUNPTkZJR1VSQVRJT05fS0VZQk9BUkRfQU5ZLAotICAgICAgICBLRVlCT0FSRF9OT0tFWVMgID0gQUNPTkZJR1VSQVRJT05fS0VZQk9BUkRfTk9LRVlTLAotICAgICAgICBLRVlCT0FSRF9RV0VSVFkgID0gQUNPTkZJR1VSQVRJT05fS0VZQk9BUkRfUVdFUlRZLAotICAgICAgICBLRVlCT0FSRF8xMktFWSAgPSBBQ09ORklHVVJBVElPTl9LRVlCT0FSRF8xMktFWSwKLSAgICB9OwotICAgIAotICAgIGVudW0gewotICAgICAgICBOQVZJR0FUSU9OX0FOWSAgPSBBQ09ORklHVVJBVElPTl9OQVZJR0FUSU9OX0FOWSwKLSAgICAgICAgTkFWSUdBVElPTl9OT05BViAgPSBBQ09ORklHVVJBVElPTl9OQVZJR0FUSU9OX05PTkFWLAotICAgICAgICBOQVZJR0FUSU9OX0RQQUQgID0gQUNPTkZJR1VSQVRJT05fTkFWSUdBVElPTl9EUEFELAotICAgICAgICBOQVZJR0FUSU9OX1RSQUNLQkFMTCAgPSBBQ09ORklHVVJBVElPTl9OQVZJR0FUSU9OX1RSQUNLQkFMTCwKLSAgICAgICAgTkFWSUdBVElPTl9XSEVFTCAgPSBBQ09ORklHVVJBVElPTl9OQVZJR0FUSU9OX1dIRUVMLAotICAgIH07Ci0gICAgCi0gICAgZW51bSB7Ci0gICAgICAgIE1BU0tfS0VZU0hJRERFTiA9IDB4MDAwMywKLSAgICAgICAgS0VZU0hJRERFTl9BTlkgPSBBQ09ORklHVVJBVElPTl9LRVlTSElEREVOX0FOWSwKLSAgICAgICAgS0VZU0hJRERFTl9OTyA9IEFDT05GSUdVUkFUSU9OX0tFWVNISURERU5fTk8sCi0gICAgICAgIEtFWVNISURERU5fWUVTID0gQUNPTkZJR1VSQVRJT05fS0VZU0hJRERFTl9ZRVMsCi0gICAgICAgIEtFWVNISURERU5fU09GVCA9IEFDT05GSUdVUkFUSU9OX0tFWVNISURERU5fU09GVCwKLSAgICB9OwotICAgIAotICAgIGVudW0gewotICAgICAgICBNQVNLX05BVkhJRERFTiA9IDB4MDAwYywKLSAgICAgICAgU0hJRlRfTkFWSElEREVOID0gMiwKLSAgICAgICAgTkFWSElEREVOX0FOWSA9IEFDT05GSUdVUkFUSU9OX05BVkhJRERFTl9BTlkgPDwgU0hJRlRfTkFWSElEREVOLAotICAgICAgICBOQVZISURERU5fTk8gPSBBQ09ORklHVVJBVElPTl9OQVZISURERU5fTk8gPDwgU0hJRlRfTkFWSElEREVOLAotICAgICAgICBOQVZISURERU5fWUVTID0gQUNPTkZJR1VSQVRJT05fTkFWSElEREVOX1lFUyA8PCBTSElGVF9OQVZISURERU4sCi0gICAgfTsKLSAgICAKLSAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1aW50OF90IGtleWJvYXJkOwotICAgICAgICAgICAgdWludDhfdCBuYXZpZ2F0aW9uOwotICAgICAgICAgICAgdWludDhfdCBpbnB1dEZsYWdzOwotICAgICAgICAgICAgdWludDhfdCBpbnB1dFBhZDA7Ci0gICAgICAgIH07Ci0gICAgICAgIHVpbnQzMl90IGlucHV0OwotICAgIH07Ci0gICAgCi0gICAgZW51bSB7Ci0gICAgICAgIFNDUkVFTldJRFRIX0FOWSA9IDAKLSAgICB9OwotICAgIAotICAgIGVudW0gewotICAgICAgICBTQ1JFRU5IRUlHSFRfQU5ZID0gMAotICAgIH07Ci0gICAgCi0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdWludDE2X3Qgc2NyZWVuV2lkdGg7Ci0gICAgICAgICAgICB1aW50MTZfdCBzY3JlZW5IZWlnaHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIHVpbnQzMl90IHNjcmVlblNpemU7Ci0gICAgfTsKLSAgICAKLSAgICBlbnVtIHsKLSAgICAgICAgU0RLVkVSU0lPTl9BTlkgPSAwCi0gICAgfTsKLSAgICAKLSAgICBlbnVtIHsKLSAgICAgICAgTUlOT1JWRVJTSU9OX0FOWSA9IDAKLSAgICB9OwotICAgIAotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVpbnQxNl90IHNka1ZlcnNpb247Ci0gICAgICAgICAgICAvLyBGb3Igbm93IG1pbm9yVmVyc2lvbiBtdXN0IGFsd2F5cyBiZSAwISEhICBJdHMgbWVhbmluZwotICAgICAgICAgICAgLy8gaXMgY3VycmVudGx5IHVuZGVmaW5lZC4KLSAgICAgICAgICAgIHVpbnQxNl90IG1pbm9yVmVyc2lvbjsKLSAgICAgICAgfTsKLSAgICAgICAgdWludDMyX3QgdmVyc2lvbjsKLSAgICB9OwotICAgIAotICAgIGVudW0gewotICAgICAgICAvLyBzY3JlZW5MYXlvdXQgYml0cyBmb3Igc2NyZWVuIHNpemUgY2xhc3MuCi0gICAgICAgIE1BU0tfU0NSRUVOU0laRSA9IDB4MGYsCi0gICAgICAgIFNDUkVFTlNJWkVfQU5ZID0gQUNPTkZJR1VSQVRJT05fU0NSRUVOU0laRV9BTlksCi0gICAgICAgIFNDUkVFTlNJWkVfU01BTEwgPSBBQ09ORklHVVJBVElPTl9TQ1JFRU5TSVpFX1NNQUxMLAotICAgICAgICBTQ1JFRU5TSVpFX05PUk1BTCA9IEFDT05GSUdVUkFUSU9OX1NDUkVFTlNJWkVfTk9STUFMLAotICAgICAgICBTQ1JFRU5TSVpFX0xBUkdFID0gQUNPTkZJR1VSQVRJT05fU0NSRUVOU0laRV9MQVJHRSwKLSAgICAgICAgU0NSRUVOU0laRV9YTEFSR0UgPSBBQ09ORklHVVJBVElPTl9TQ1JFRU5TSVpFX1hMQVJHRSwKLSAgICAgICAgCi0gICAgICAgIC8vIHNjcmVlbkxheW91dCBiaXRzIGZvciB3aWRlL2xvbmcgc2NyZWVuIHZhcmlhdGlvbi4KLSAgICAgICAgTUFTS19TQ1JFRU5MT05HID0gMHgzMCwKLSAgICAgICAgU0hJRlRfU0NSRUVOTE9ORyA9IDQsCi0gICAgICAgIFNDUkVFTkxPTkdfQU5ZID0gQUNPTkZJR1VSQVRJT05fU0NSRUVOTE9OR19BTlkgPDwgU0hJRlRfU0NSRUVOTE9ORywKLSAgICAgICAgU0NSRUVOTE9OR19OTyA9IEFDT05GSUdVUkFUSU9OX1NDUkVFTkxPTkdfTk8gPDwgU0hJRlRfU0NSRUVOTE9ORywKLSAgICAgICAgU0NSRUVOTE9OR19ZRVMgPSBBQ09ORklHVVJBVElPTl9TQ1JFRU5MT05HX1lFUyA8PCBTSElGVF9TQ1JFRU5MT05HLAotCi0gICAgICAgIC8vIHNjcmVlbkxheW91dCBiaXRzIGZvciBsYXlvdXQgZGlyZWN0aW9uLgotICAgICAgICBNQVNLX0xBWU9VVERJUiA9IDB4QzAsCi0gICAgICAgIFNISUZUX0xBWU9VVERJUiA9IDYsCi0gICAgICAgIExBWU9VVERJUl9BTlkgPSBBQ09ORklHVVJBVElPTl9MQVlPVVRESVJfQU5ZIDw8IFNISUZUX0xBWU9VVERJUiwKLSAgICAgICAgTEFZT1VURElSX0xUUiA9IEFDT05GSUdVUkFUSU9OX0xBWU9VVERJUl9MVFIgPDwgU0hJRlRfTEFZT1VURElSLAotICAgICAgICBMQVlPVVRESVJfUlRMID0gQUNPTkZJR1VSQVRJT05fTEFZT1VURElSX1JUTCA8PCBTSElGVF9MQVlPVVRESVIsCi0gICAgfTsKLSAgICAKLSAgICBlbnVtIHsKLSAgICAgICAgLy8gdWlNb2RlIGJpdHMgZm9yIHRoZSBtb2RlIHR5cGUuCi0gICAgICAgIE1BU0tfVUlfTU9ERV9UWVBFID0gMHgwZiwKLSAgICAgICAgVUlfTU9ERV9UWVBFX0FOWSA9IEFDT05GSUdVUkFUSU9OX1VJX01PREVfVFlQRV9BTlksCi0gICAgICAgIFVJX01PREVfVFlQRV9OT1JNQUwgPSBBQ09ORklHVVJBVElPTl9VSV9NT0RFX1RZUEVfTk9STUFMLAotICAgICAgICBVSV9NT0RFX1RZUEVfREVTSyA9IEFDT05GSUdVUkFUSU9OX1VJX01PREVfVFlQRV9ERVNLLAotICAgICAgICBVSV9NT0RFX1RZUEVfQ0FSID0gQUNPTkZJR1VSQVRJT05fVUlfTU9ERV9UWVBFX0NBUiwKLSAgICAgICAgVUlfTU9ERV9UWVBFX1RFTEVWSVNJT04gPSBBQ09ORklHVVJBVElPTl9VSV9NT0RFX1RZUEVfVEVMRVZJU0lPTiwKLSAgICAgICAgVUlfTU9ERV9UWVBFX0FQUExJQU5DRSA9IEFDT05GSUdVUkFUSU9OX1VJX01PREVfVFlQRV9BUFBMSUFOQ0UsCi0KLSAgICAgICAgLy8gdWlNb2RlIGJpdHMgZm9yIHRoZSBuaWdodCBzd2l0Y2guCi0gICAgICAgIE1BU0tfVUlfTU9ERV9OSUdIVCA9IDB4MzAsCi0gICAgICAgIFNISUZUX1VJX01PREVfTklHSFQgPSA0LAotICAgICAgICBVSV9NT0RFX05JR0hUX0FOWSA9IEFDT05GSUdVUkFUSU9OX1VJX01PREVfTklHSFRfQU5ZIDw8IFNISUZUX1VJX01PREVfTklHSFQsCi0gICAgICAgIFVJX01PREVfTklHSFRfTk8gPSBBQ09ORklHVVJBVElPTl9VSV9NT0RFX05JR0hUX05PIDw8IFNISUZUX1VJX01PREVfTklHSFQsCi0gICAgICAgIFVJX01PREVfTklHSFRfWUVTID0gQUNPTkZJR1VSQVRJT05fVUlfTU9ERV9OSUdIVF9ZRVMgPDwgU0hJRlRfVUlfTU9ERV9OSUdIVCwKLSAgICB9OwotCi0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdWludDhfdCBzY3JlZW5MYXlvdXQ7Ci0gICAgICAgICAgICB1aW50OF90IHVpTW9kZTsKLSAgICAgICAgICAgIHVpbnQxNl90IHNtYWxsZXN0U2NyZWVuV2lkdGhEcDsKLSAgICAgICAgfTsKLSAgICAgICAgdWludDMyX3Qgc2NyZWVuQ29uZmlnOwotICAgIH07Ci0gICAgCi0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdWludDE2X3Qgc2NyZWVuV2lkdGhEcDsKLSAgICAgICAgICAgIHVpbnQxNl90IHNjcmVlbkhlaWdodERwOwotICAgICAgICB9OwotICAgICAgICB1aW50MzJfdCBzY3JlZW5TaXplRHA7Ci0gICAgfTsKLQotICAgIHZvaWQgY29weUZyb21EZXZpY2VOb1N3YXAoY29uc3QgUmVzVGFibGVfY29uZmlnJiBvKTsKLSAgICAKLSAgICB2b2lkIGNvcHlGcm9tRHRvSChjb25zdCBSZXNUYWJsZV9jb25maWcmIG8pOwotICAgIAotICAgIHZvaWQgc3dhcEh0b0QoKTsKLQotICAgIGludCBjb21wYXJlKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgbykgY29uc3Q7Ci0gICAgaW50IGNvbXBhcmVMb2dpY2FsKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgbykgY29uc3Q7Ci0KLSAgICAvLyBGbGFncyBpbmRpY2F0aW5nIGEgc2V0IG9mIGNvbmZpZyB2YWx1ZXMuICBUaGVzZSBmbGFnIGNvbnN0YW50cyBtdXN0Ci0gICAgLy8gbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgb25lcyBpbiBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvIGFuZAotICAgIC8vIGF0dHJzX21hbmlmZXN0LnhtbC4KLSAgICBlbnVtIHsKLSAgICAgICAgQ09ORklHX01DQyA9IEFDT05GSUdVUkFUSU9OX01DQywKLSAgICAgICAgQ09ORklHX01OQyA9IEFDT05GSUdVUkFUSU9OX01OQywKLSAgICAgICAgQ09ORklHX0xPQ0FMRSA9IEFDT05GSUdVUkFUSU9OX0xPQ0FMRSwKLSAgICAgICAgQ09ORklHX1RPVUNIU0NSRUVOID0gQUNPTkZJR1VSQVRJT05fVE9VQ0hTQ1JFRU4sCi0gICAgICAgIENPTkZJR19LRVlCT0FSRCA9IEFDT05GSUdVUkFUSU9OX0tFWUJPQVJELAotICAgICAgICBDT05GSUdfS0VZQk9BUkRfSElEREVOID0gQUNPTkZJR1VSQVRJT05fS0VZQk9BUkRfSElEREVOLAotICAgICAgICBDT05GSUdfTkFWSUdBVElPTiA9IEFDT05GSUdVUkFUSU9OX05BVklHQVRJT04sCi0gICAgICAgIENPTkZJR19PUklFTlRBVElPTiA9IEFDT05GSUdVUkFUSU9OX09SSUVOVEFUSU9OLAotICAgICAgICBDT05GSUdfREVOU0lUWSA9IEFDT05GSUdVUkFUSU9OX0RFTlNJVFksCi0gICAgICAgIENPTkZJR19TQ1JFRU5fU0laRSA9IEFDT05GSUdVUkFUSU9OX1NDUkVFTl9TSVpFLAotICAgICAgICBDT05GSUdfU01BTExFU1RfU0NSRUVOX1NJWkUgPSBBQ09ORklHVVJBVElPTl9TTUFMTEVTVF9TQ1JFRU5fU0laRSwKLSAgICAgICAgQ09ORklHX1ZFUlNJT04gPSBBQ09ORklHVVJBVElPTl9WRVJTSU9OLAotICAgICAgICBDT05GSUdfU0NSRUVOX0xBWU9VVCA9IEFDT05GSUdVUkFUSU9OX1NDUkVFTl9MQVlPVVQsCi0gICAgICAgIENPTkZJR19VSV9NT0RFID0gQUNPTkZJR1VSQVRJT05fVUlfTU9ERSwKLSAgICAgICAgQ09ORklHX0xBWU9VVERJUiA9IEFDT05GSUdVUkFUSU9OX0xBWU9VVERJUiwKLSAgICB9OwotICAgIAotICAgIC8vIENvbXBhcmUgdHdvIGNvbmZpZ3VyYXRpb24sIHJldHVybmluZyBDT05GSUdfKiBmbGFncyBzZXQgZm9yIGVhY2ggdmFsdWUKLSAgICAvLyB0aGF0IGlzIGRpZmZlcmVudC4KLSAgICBpbnQgZGlmZihjb25zdCBSZXNUYWJsZV9jb25maWcmIG8pIGNvbnN0OwotICAgIAotICAgIC8vIFJldHVybiB0cnVlIGlmICd0aGlzJyBpcyBtb3JlIHNwZWNpZmljIHRoYW4gJ28nLgotICAgIGJvb2wgaXNNb3JlU3BlY2lmaWNUaGFuKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgbykgY29uc3Q7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiAndGhpcycgaXMgYSBiZXR0ZXIgbWF0Y2ggdGhhbiAnbycgZm9yIHRoZSAncmVxdWVzdGVkJwotICAgIC8vIGNvbmZpZ3VyYXRpb24uICBUaGlzIGFzc3VtZXMgdGhhdCBtYXRjaCgpIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCB0bwotICAgIC8vIHJlbW92ZSBhbnkgY29uZmlndXJhdGlvbnMgdGhhdCBkb24ndCBtYXRjaCB0aGUgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24KLSAgICAvLyBhdCBhbGw7IGlmIHRoZXkgYXJlIG5vdCBmaXJzdCBmaWx0ZXJlZCwgbm9uLW1hdGNoaW5nIHJlc3VsdHMgY2FuIGJlCi0gICAgLy8gY29uc2lkZXJlZCBiZXR0ZXIgdGhhbiBtYXRjaGluZyBvbmVzLgotICAgIC8vIFRoZSBnZW5lcmFsIHJ1bGUgcGVyIGF0dHJpYnV0ZTogaWYgdGhlIHJlcXVlc3QgY2FyZXMgYWJvdXQgYW4gYXR0cmlidXRlCi0gICAgLy8gKGl0IG5vcm1hbGx5IGRvZXMpLCBpZiB0aGUgdHdvICh0aGlzIGFuZCBvKSBhcmUgZXF1YWwgaXQncyBhIHRpZS4gIElmCi0gICAgLy8gdGhleSBhcmUgbm90IGVxdWFsIHRoZW4gb25lIG11c3QgYmUgZ2VuZXJpYyBiZWNhdXNlIG9ubHkgZ2VuZXJpYyBhbmQKLSAgICAvLyAnPT1yZXF1ZXN0ZWQnIHdpbGwgcGFzcyB0aGUgbWF0Y2goKSBjYWxsLiAgU28gaWYgdGhpcyBpcyBub3QgZ2VuZXJpYywKLSAgICAvLyBpdCB3aW5zLiAgSWYgdGhpcyBJUyBnZW5lcmljLCBvIHdpbnMgKHJldHVybiBmYWxzZSkuCi0gICAgYm9vbCBpc0JldHRlclRoYW4oY29uc3QgUmVzVGFibGVfY29uZmlnJiBvLCBjb25zdCBSZXNUYWJsZV9jb25maWcqIHJlcXVlc3RlZCkgY29uc3Q7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiAndGhpcycgY2FuIGJlIGNvbnNpZGVyZWQgYSBtYXRjaCBmb3IgdGhlIHBhcmFtZXRlcnMgaW4gCi0gICAgLy8gJ3NldHRpbmdzJy4KLSAgICAvLyBOb3RlIHRoaXMgaXMgYXN5bWV0cmljLiAgQSBkZWZhdWx0IHBpZWNlIG9mIGRhdGEgd2lsbCBtYXRjaCBldmVyeSByZXF1ZXN0Ci0gICAgLy8gYnV0IGEgcmVxdWVzdCBmb3IgdGhlIGRlZmF1bHQgc2hvdWxkIG5vdCBtYXRjaCBvZGQgc3BlY2lmaWNzCi0gICAgLy8gKGllLCByZXF1ZXN0IHdpdGggbm8gbWNjIHNob3VsZCBub3QgbWF0Y2ggYSBwYXJ0aWN1bGFyIG1jYydzIGRhdGEpCi0gICAgLy8gc2V0dGluZ3MgaXMgdGhlIHJlcXVlc3RlZCBzZXR0aW5ncwotICAgIGJvb2wgbWF0Y2goY29uc3QgUmVzVGFibGVfY29uZmlnJiBzZXR0aW5ncykgY29uc3Q7Ci0KLSAgICB2b2lkIGdldExvY2FsZShjaGFyIHN0cls2XSkgY29uc3Q7Ci0KLSAgICBTdHJpbmc4IHRvU3RyaW5nKCkgY29uc3Q7Ci19OwotCi0vKioKLSAqIEEgc3BlY2lmaWNhdGlvbiBvZiB0aGUgcmVzb3VyY2VzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHR5cGUuCi0gKgotICogVGhlcmUgc2hvdWxkIGJlIG9uZSBvZiB0aGVzZSBjaHVua3MgZm9yIGVhY2ggcmVzb3VyY2UgdHlwZS4KLSAqCi0gKiBUaGlzIHN0cnVjdHVyZSBpcyBmb2xsb3dlZCBieSBhbiBhcnJheSBvZiBpbnRlZ2VycyBwcm92aWRpbmcgdGhlIHNldCBvZgotICogY29uZmlndXJhdGlvbiBjaGFuZ2UgZmxhZ3MgKFJlc1RhYmxlX2NvbmZpZzo6Q09ORklHXyopIHRoYXQgaGF2ZSBtdWx0aXBsZQotICogcmVzb3VyY2VzIGZvciB0aGF0IGNvbmZpZ3VyYXRpb24uICBJbiBhZGRpdGlvbiwgdGhlIGhpZ2ggYml0IGlzIHNldCBpZiB0aGF0Ci0gKiByZXNvdXJjZSBoYXMgYmVlbiBtYWRlIHB1YmxpYy4KLSAqLwotc3RydWN0IFJlc1RhYmxlX3R5cGVTcGVjCi17Ci0gICAgc3RydWN0IFJlc0NodW5rX2hlYWRlciBoZWFkZXI7Ci0KLSAgICAvLyBUaGUgdHlwZSBpZGVudGlmaWVyIHRoaXMgY2h1bmsgaXMgaG9sZGluZy4gIFR5cGUgSURzIHN0YXJ0Ci0gICAgLy8gYXQgMSAoY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlIHR5cGUgYml0cyBpbiBhCi0gICAgLy8gcmVzb3VyY2UgaWRlbnRpZmllcikuICAwIGlzIGludmFsaWQuCi0gICAgdWludDhfdCBpZDsKLSAgICAKLSAgICAvLyBNdXN0IGJlIDAuCi0gICAgdWludDhfdCByZXMwOwotICAgIC8vIE11c3QgYmUgMC4KLSAgICB1aW50MTZfdCByZXMxOwotICAgIAotICAgIC8vIE51bWJlciBvZiB1aW50MzJfdCBlbnRyeSBjb25maWd1cmF0aW9uIG1hc2tzIHRoYXQgZm9sbG93LgotICAgIHVpbnQzMl90IGVudHJ5Q291bnQ7Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgLy8gQWRkaXRpb25hbCBmbGFnIGluZGljYXRpbmcgYW4gZW50cnkgaXMgcHVibGljLgotICAgICAgICBTUEVDX1BVQkxJQyA9IDB4NDAwMDAwMDAKLSAgICB9OwotfTsKLQotLyoqCi0gKiBBIGNvbGxlY3Rpb24gb2YgcmVzb3VyY2UgZW50cmllcyBmb3IgYSBwYXJ0aWN1bGFyIHJlc291cmNlIGRhdGEKLSAqIHR5cGUuIEZvbGxvd2VkIGJ5IGFuIGFycmF5IG9mIHVpbnQzMl90IGRlZmluaW5nIHRoZSByZXNvdXJjZQotICogdmFsdWVzLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhcnJheSBvZiB0eXBlIHN0cmluZ3MgaW4gdGhlCi0gKiBSZXNUYWJsZV9wYWNrYWdlOjp0eXBlU3RyaW5ncyBzdHJpbmcgYmxvY2suIEVhY2ggb2YgdGhlc2UgaG9sZCBhbgotICogaW5kZXggZnJvbSBlbnRyaWVzU3RhcnQ7IGEgdmFsdWUgb2YgTk9fRU5UUlkgbWVhbnMgdGhhdCBlbnRyeSBpcwotICogbm90IGRlZmluZWQuCi0gKgotICogVGhlcmUgbWF5IGJlIG11bHRpcGxlIG9mIHRoZXNlIGNodW5rcyBmb3IgYSBwYXJ0aWN1bGFyIHJlc291cmNlIHR5cGUsCi0gKiBzdXBwbHkgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gdmFyaWF0aW9ucyBmb3IgdGhlIHJlc291cmNlIHZhbHVlcyBvZgotICogdGhhdCB0eXBlLgotICoKLSAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhbiBhZGRpdGlvbmFsIG9yZGVyZWQgaW5kZXggb2YgZW50cmllcywgc28KLSAqIHdlIGNhbiBkbyBhIGJpbmFyeSBzZWFyY2ggaWYgdHJ5aW5nIHRvIGZpbmQgYSByZXNvdXJjZSBieSBzdHJpbmcgbmFtZS4KLSAqLwotc3RydWN0IFJlc1RhYmxlX3R5cGUKLXsKLSAgICBzdHJ1Y3QgUmVzQ2h1bmtfaGVhZGVyIGhlYWRlcjsKLQotICAgIGVudW0gewotICAgICAgICBOT19FTlRSWSA9IDB4RkZGRkZGRkYKLSAgICB9OwotICAgIAotICAgIC8vIFRoZSB0eXBlIGlkZW50aWZpZXIgdGhpcyBjaHVuayBpcyBob2xkaW5nLiAgVHlwZSBJRHMgc3RhcnQKLSAgICAvLyBhdCAxIChjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUgdHlwZSBiaXRzIGluIGEKLSAgICAvLyByZXNvdXJjZSBpZGVudGlmaWVyKS4gIDAgaXMgaW52YWxpZC4KLSAgICB1aW50OF90IGlkOwotICAgIAotICAgIC8vIE11c3QgYmUgMC4KLSAgICB1aW50OF90IHJlczA7Ci0gICAgLy8gTXVzdCBiZSAwLgotICAgIHVpbnQxNl90IHJlczE7Ci0gICAgCi0gICAgLy8gTnVtYmVyIG9mIHVpbnQzMl90IGVudHJ5IGluZGljZXMgdGhhdCBmb2xsb3cuCi0gICAgdWludDMyX3QgZW50cnlDb3VudDsKLQotICAgIC8vIE9mZnNldCBmcm9tIGhlYWRlciB3aGVyZSBSZXNUYWJsZV9lbnRyeSBkYXRhIHN0YXJ0cy4KLSAgICB1aW50MzJfdCBlbnRyaWVzU3RhcnQ7Ci0gICAgCi0gICAgLy8gQ29uZmlndXJhdGlvbiB0aGlzIGNvbGxlY3Rpb24gb2YgZW50cmllcyBpcyBkZXNpZ25lZCBmb3IuCi0gICAgUmVzVGFibGVfY29uZmlnIGNvbmZpZzsKLX07Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIGluZm9ybWF0aW9uIGFib3V0IGFuIGVudHJ5IGluIHRoZSByZXNvdXJjZQotICogdGFibGUuICBJdCBob2xkcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBuYW1lIG9mIHRoaXMgZW50cnksIGFuZCBpcwotICogaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgb25lIG9mOgotICogICAqIEEgUmVzX3ZhbHVlIHN0cnVjdHVyZSwgaWYgRkxBR19DT01QTEVYIGlzIC1ub3QtIHNldC4KLSAqICAgKiBBbiBhcnJheSBvZiBSZXNUYWJsZV9tYXAgc3RydWN0dXJlcywgaWYgRkxBR19DT01QTEVYIGlzIHNldC4KLSAqICAgICBUaGVzZSBzdXBwbHkgYSBzZXQgb2YgbmFtZS92YWx1ZSBtYXBwaW5ncyBvZiBkYXRhLgotICovCi1zdHJ1Y3QgUmVzVGFibGVfZW50cnkKLXsKLSAgICAvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhpcyBzdHJ1Y3R1cmUuCi0gICAgdWludDE2X3Qgc2l6ZTsKLQotICAgIGVudW0gewotICAgICAgICAvLyBJZiBzZXQsIHRoaXMgaXMgYSBjb21wbGV4IGVudHJ5LCBob2xkaW5nIGEgc2V0IG9mIG5hbWUvdmFsdWUKLSAgICAgICAgLy8gbWFwcGluZ3MuICBJdCBpcyBmb2xsb3dlZCBieSBhbiBhcnJheSBvZiBSZXNUYWJsZV9tYXAgc3RydWN0dXJlcy4KLSAgICAgICAgRkxBR19DT01QTEVYID0gMHgwMDAxLAotICAgICAgICAvLyBJZiBzZXQsIHRoaXMgcmVzb3VyY2UgaGFzIGJlZW4gZGVjbGFyZWQgcHVibGljLCBzbyBsaWJyYXJpZXMKLSAgICAgICAgLy8gYXJlIGFsbG93ZWQgdG8gcmVmZXJlbmNlIGl0LgotICAgICAgICBGTEFHX1BVQkxJQyA9IDB4MDAwMgotICAgIH07Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgCi0gICAgLy8gUmVmZXJlbmNlIGludG8gUmVzVGFibGVfcGFja2FnZTo6a2V5U3RyaW5ncyBpZGVudGlmeWluZyB0aGlzIGVudHJ5LgotICAgIHN0cnVjdCBSZXNTdHJpbmdQb29sX3JlZiBrZXk7Ci19OwotCi0vKioKLSAqIEV4dGVuZGVkIGZvcm0gb2YgYSBSZXNUYWJsZV9lbnRyeSBmb3IgbWFwIGVudHJpZXMsIGRlZmluaW5nIGEgcGFyZW50IG1hcAotICogcmVzb3VyY2UgZnJvbSB3aGljaCB0byBpbmhlcml0IHZhbHVlcy4KLSAqLwotc3RydWN0IFJlc1RhYmxlX21hcF9lbnRyeSA6IHB1YmxpYyBSZXNUYWJsZV9lbnRyeQotewotICAgIC8vIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBhcmVudCBtYXBwaW5nLCBvciAwIGlmIHRoZXJlIGlzIG5vbmUuCi0gICAgUmVzVGFibGVfcmVmIHBhcmVudDsKLSAgICAvLyBOdW1iZXIgb2YgbmFtZS92YWx1ZSBwYWlycyB0aGF0IGZvbGxvdyBmb3IgRkxBR19DT01QTEVYLgotICAgIHVpbnQzMl90IGNvdW50OwotfTsKLQotLyoqCi0gKiBBIHNpbmdsZSBuYW1lL3ZhbHVlIG1hcHBpbmcgdGhhdCBpcyBwYXJ0IG9mIGEgY29tcGxleCByZXNvdXJjZQotICogZW50cnkuCi0gKi8KLXN0cnVjdCBSZXNUYWJsZV9tYXAKLXsKLSAgICAvLyBUaGUgcmVzb3VyY2UgaWRlbnRpZmllciBkZWZpbmluZyB0aGlzIG1hcHBpbmcncyBuYW1lLiAgRm9yIGF0dHJpYnV0ZQotICAgIC8vIHJlc291cmNlcywgJ25hbWUnIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzcGVjaWFsIHJlc291cmNlIHR5cGVzCi0gICAgLy8gdG8gc3VwcGx5IG1ldGEtZGF0YSBhYm91dCB0aGUgYXR0cmlidXRlOyBmb3IgYWxsIG90aGVyIHJlc291cmNlIHR5cGVzCi0gICAgLy8gaXQgbXVzdCBiZSBhbiBhdHRyaWJ1dGUgcmVzb3VyY2UuCi0gICAgUmVzVGFibGVfcmVmIG5hbWU7Ci0KLSAgICAvLyBTcGVjaWFsIHZhbHVlcyBmb3IgJ25hbWUnIHdoZW4gZGVmaW5pbmcgYXR0cmlidXRlIHJlc291cmNlcy4KLSAgICBlbnVtIHsKLSAgICAgICAgLy8gVGhpcyBlbnRyeSBob2xkcyB0aGUgYXR0cmlidXRlJ3MgdHlwZSBjb2RlLgotICAgICAgICBBVFRSX1RZUEUgPSBSZXNfTUFLRUlOVEVSTkFMKDApLAotCi0gICAgICAgIC8vIEZvciBpbnRlZ3JhbCBhdHRyaWJ1dGVzLCB0aGlzIGlzIHRoZSBtaW5pbXVtIHZhbHVlIGl0IGNhbiBob2xkLgotICAgICAgICBBVFRSX01JTiA9IFJlc19NQUtFSU5URVJOQUwoMSksCi0KLSAgICAgICAgLy8gRm9yIGludGVncmFsIGF0dHJpYnV0ZXMsIHRoaXMgaXMgdGhlIG1heGltdW0gdmFsdWUgaXQgY2FuIGhvbGQuCi0gICAgICAgIEFUVFJfTUFYID0gUmVzX01BS0VJTlRFUk5BTCgyKSwKLQotICAgICAgICAvLyBMb2NhbGl6YXRpb24gb2YgdGhpcyByZXNvdXJjZSBpcyBjYW4gYmUgZW5jb3VyYWdlZCBvciByZXF1aXJlZCB3aXRoCi0gICAgICAgIC8vIGFuIGFhcHQgZmxhZyBpZiB0aGlzIGlzIHNldAotICAgICAgICBBVFRSX0wxME4gPSBSZXNfTUFLRUlOVEVSTkFMKDMpLAotCi0gICAgICAgIC8vIGZvciBwbHVyYWwgc3VwcG9ydCwgc2VlIGFuZHJvaWQuY29udGVudC5yZXMuUGx1cmFsUnVsZXMjYXR0ckZvclF1YW50aXR5KGludCkKLSAgICAgICAgQVRUUl9PVEhFUiA9IFJlc19NQUtFSU5URVJOQUwoNCksCi0gICAgICAgIEFUVFJfWkVSTyA9IFJlc19NQUtFSU5URVJOQUwoNSksCi0gICAgICAgIEFUVFJfT05FID0gUmVzX01BS0VJTlRFUk5BTCg2KSwKLSAgICAgICAgQVRUUl9UV08gPSBSZXNfTUFLRUlOVEVSTkFMKDcpLAotICAgICAgICBBVFRSX0ZFVyA9IFJlc19NQUtFSU5URVJOQUwoOCksCi0gICAgICAgIEFUVFJfTUFOWSA9IFJlc19NQUtFSU5URVJOQUwoOSkKLSAgICAgICAgCi0gICAgfTsKLQotICAgIC8vIEJpdCBtYXNrIG9mIGFsbG93ZWQgdHlwZXMsIGZvciB1c2Ugd2l0aCBBVFRSX1RZUEUuCi0gICAgZW51bSB7Ci0gICAgICAgIC8vIE5vIHR5cGUgaGFzIGJlZW4gZGVmaW5lZCBmb3IgdGhpcyBhdHRyaWJ1dGUsIHVzZSBnZW5lcmljCi0gICAgICAgIC8vIHR5cGUgaGFuZGxpbmcuICBUaGUgbG93IDE2IGJpdHMgYXJlIGZvciB0eXBlcyB0aGF0IGNhbiBiZQotICAgICAgICAvLyBoYW5kbGVkIGdlbmVyaWNhbGx5OyB0aGUgdXBwZXIgMTYgcmVxdWlyZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgICAgIC8vIGluIHRoZSBiYWcgc28gY2FuIG5vdCBiZSBoYW5kbGVkIGdlbmVyaWNhbGx5IGZvciBUWVBFX0FOWS4KLSAgICAgICAgVFlQRV9BTlkgPSAweDAwMDBGRkZGLAotCi0gICAgICAgIC8vIEF0dHJpYnV0ZSBob2xkcyBhIHJlZmVyZW5jZXMgdG8gYW5vdGhlciByZXNvdXJjZS4KLSAgICAgICAgVFlQRV9SRUZFUkVOQ0UgPSAxPDwwLAotCi0gICAgICAgIC8vIEF0dHJpYnV0ZSBob2xkcyBhIGdlbmVyaWMgc3RyaW5nLgotICAgICAgICBUWVBFX1NUUklORyA9IDE8PDEsCi0KLSAgICAgICAgLy8gQXR0cmlidXRlIGhvbGRzIGFuIGludGVnZXIgdmFsdWUuICBBVFRSX01JTiBhbmQgQVRUUl9NSU4gY2FuCi0gICAgICAgIC8vIG9wdGlvbmFsbHkgc3BlY2lmeSBhIGNvbnN0cmFpbmVkIHJhbmdlIG9mIHBvc3NpYmxlIGludGVnZXIgdmFsdWVzLgotICAgICAgICBUWVBFX0lOVEVHRVIgPSAxPDwyLAotCi0gICAgICAgIC8vIEF0dHJpYnV0ZSBob2xkcyBhIGJvb2xlYW4gaW50ZWdlci4KLSAgICAgICAgVFlQRV9CT09MRUFOID0gMTw8MywKLQotICAgICAgICAvLyBBdHRyaWJ1dGUgaG9sZHMgYSBjb2xvciB2YWx1ZS4KLSAgICAgICAgVFlQRV9DT0xPUiA9IDE8PDQsCi0KLSAgICAgICAgLy8gQXR0cmlidXRlIGhvbGRzIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUuCi0gICAgICAgIFRZUEVfRkxPQVQgPSAxPDw1LAotCi0gICAgICAgIC8vIEF0dHJpYnV0ZSBob2xkcyBhIGRpbWVuc2lvbiB2YWx1ZSwgc3VjaCBhcyAiMjBweCIuCi0gICAgICAgIFRZUEVfRElNRU5TSU9OID0gMTw8NiwKLQotICAgICAgICAvLyBBdHRyaWJ1dGUgaG9sZHMgYSBmcmFjdGlvbiB2YWx1ZSwgc3VjaCBhcyAiMjAlIi4KLSAgICAgICAgVFlQRV9GUkFDVElPTiA9IDE8PDcsCi0KLSAgICAgICAgLy8gQXR0cmlidXRlIGhvbGRzIGFuIGVudW1lcmF0aW9uLiAgVGhlIGVudW1lcmF0aW9uIHZhbHVlcyBhcmUKLSAgICAgICAgLy8gc3VwcGxpZWQgYXMgYWRkaXRpb25hbCBlbnRyaWVzIGluIHRoZSBtYXAuCi0gICAgICAgIFRZUEVfRU5VTSA9IDE8PDE2LAotCi0gICAgICAgIC8vIEF0dHJpYnV0ZSBob2xkcyBhIGJpdG1ha3Mgb2YgZmxhZ3MuICBUaGUgZmxhZyBiaXQgdmFsdWVzIGFyZQotICAgICAgICAvLyBzdXBwbGllZCBhcyBhZGRpdGlvbmFsIGVudHJpZXMgaW4gdGhlIG1hcC4KLSAgICAgICAgVFlQRV9GTEFHUyA9IDE8PDE3Ci0gICAgfTsKLQotICAgIC8vIEVudW0gb2YgbG9jYWxpemF0aW9uIG1vZGVzLCBmb3IgdXNlIHdpdGggQVRUUl9MMTBOLgotICAgIGVudW0gewotICAgICAgICBMMTBOX05PVF9SRVFVSVJFRCA9IDAsCi0gICAgICAgIEwxME5fU1VHR0VTVEVEICAgID0gMQotICAgIH07Ci0gICAgCi0gICAgLy8gVGhpcyBtYXBwaW5nJ3MgdmFsdWUuCi0gICAgUmVzX3ZhbHVlIHZhbHVlOwotfTsKLQotLyoqCi0gKiBDb252ZW5pZW5jZSBjbGFzcyBmb3IgYWNjZXNzaW5nIGRhdGEgaW4gYSBSZXNUYWJsZSByZXNvdXJjZS4KLSAqLwotY2xhc3MgUmVzVGFibGUKLXsKLXB1YmxpYzoKLSAgICBSZXNUYWJsZSgpOwotICAgIFJlc1RhYmxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCB2b2lkKiBjb29raWUsCi0gICAgICAgICAgICAgYm9vbCBjb3B5RGF0YT1mYWxzZSk7Ci0gICAgflJlc1RhYmxlKCk7Ci0KLSAgICBzdGF0dXNfdCBhZGQoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIHZvaWQqIGNvb2tpZSwKLSAgICAgICAgICAgICAgICAgYm9vbCBjb3B5RGF0YT1mYWxzZSwgY29uc3Qgdm9pZCogaWRtYXAgPSBOVUxMKTsKLSAgICBzdGF0dXNfdCBhZGQoQXNzZXQqIGFzc2V0LCB2b2lkKiBjb29raWUsCi0gICAgICAgICAgICAgICAgIGJvb2wgY29weURhdGE9ZmFsc2UsIGNvbnN0IHZvaWQqIGlkbWFwID0gTlVMTCk7Ci0gICAgc3RhdHVzX3QgYWRkKFJlc1RhYmxlKiBzcmMpOwotCi0gICAgc3RhdHVzX3QgZ2V0RXJyb3IoKSBjb25zdDsKLQotICAgIHZvaWQgdW5pbml0KCk7Ci0KLSAgICBzdHJ1Y3QgcmVzb3VyY2VfbmFtZQotICAgIHsKLSAgICAgICAgY29uc3QgY2hhcjE2X3QqIHBhY2thZ2U7Ci0gICAgICAgIHNpemVfdCBwYWNrYWdlTGVuOwotICAgICAgICBjb25zdCBjaGFyMTZfdCogdHlwZTsKLSAgICAgICAgY29uc3QgY2hhciogdHlwZTg7Ci0gICAgICAgIHNpemVfdCB0eXBlTGVuOwotICAgICAgICBjb25zdCBjaGFyMTZfdCogbmFtZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZTg7Ci0gICAgICAgIHNpemVfdCBuYW1lTGVuOwotICAgIH07Ci0KLSAgICBib29sIGdldFJlc291cmNlTmFtZSh1aW50MzJfdCByZXNJRCwgYm9vbCBhbGxvd1V0ZjgsIHJlc291cmNlX25hbWUqIG91dE5hbWUpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIHZhbHVlIG9mIGEgcmVzb3VyY2UuICBJZiB0aGUgcmVzb3VyY2UgaXMgZm91bmQsIHJldHVybnMgYQotICAgICAqIHZhbHVlID49IDAgaW5kaWNhdGluZyB0aGUgdGFibGUgaXQgaXMgaW4gKGZvciB1c2Ugd2l0aAotICAgICAqIGdldFRhYmxlU3RyaW5nQmxvY2soKSBhbmQgZ2V0VGFibGVDb29raWUoKSkgYW5kIGZpbGxzIGluICdvdXRWYWx1ZScuICBJZgotICAgICAqIG5vdCBmb3VuZCwgcmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCi0gICAgICoKLSAgICAgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBkbyByZWZlcmVuY2UgdHJhdmVyc2FsLiAgSWYgeW91IHdhbnQKLSAgICAgKiB0byBmb2xsb3cgcmVmZXJlbmNlcyB0byBvdGhlciByZXNvdXJjZXMgdG8gZ2V0IHRoZSAicmVhbCIgdmFsdWUgdG8KLSAgICAgKiB1c2UsIHlvdSBuZWVkIHRvIGNhbGwgcmVzb2x2ZVJlZmVyZW5jZSgpIGFmdGVyIHRoaXMgZnVuY3Rpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVzSUQgVGhlIGRlc2lyZWQgcmVzb3J1Y2UgaWRlbnRpZmllci4KLSAgICAgKiBAcGFyYW0gb3V0VmFsdWUgRmlsbGVkIGluIHdpdGggdGhlIHJlc291cmNlIGRhdGEgdGhhdCB3YXMgZm91bmQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHNzaXplX3QgRWl0aGVyIGEgPj0gMCB0YWJsZSBpbmRleCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCi0gICAgICovCi0gICAgc3NpemVfdCBnZXRSZXNvdXJjZSh1aW50MzJfdCByZXNJRCwgUmVzX3ZhbHVlKiBvdXRWYWx1ZSwgYm9vbCBtYXlCZUJhZyA9IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBkZW5zaXR5ID0gMCwKLSAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIG91dFNwZWNGbGFncyA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyogb3V0Q29uZmlnID0gTlVMTCkgY29uc3Q7Ci0KLSAgICBpbmxpbmUgc3NpemVfdCBnZXRSZXNvdXJjZShjb25zdCBSZXNUYWJsZV9yZWYmIHJlcywgUmVzX3ZhbHVlKiBvdXRWYWx1ZSwKLSAgICAgICAgICAgIHVpbnQzMl90KiBvdXRTcGVjRmxhZ3M9TlVMTCkgY29uc3QgewotICAgICAgICByZXR1cm4gZ2V0UmVzb3VyY2UocmVzLmlkZW50LCBvdXRWYWx1ZSwgZmFsc2UsIDAsIG91dFNwZWNGbGFncywgTlVMTCk7Ci0gICAgfQotCi0gICAgc3NpemVfdCByZXNvbHZlUmVmZXJlbmNlKFJlc192YWx1ZSogaW5PdXRWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBibG9ja0luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogb3V0TGFzdFJlZiA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiBpbm91dFR5cGVTcGVjRmxhZ3MgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZV9jb25maWcqIG91dENvbmZpZyA9IE5VTEwpIGNvbnN0OwotCi0gICAgZW51bSB7Ci0gICAgICAgIFRNUF9CVUZGRVJfU0laRSA9IDE2Ci0gICAgfTsKLSAgICBjb25zdCBjaGFyMTZfdCogdmFsdWVUb1N0cmluZyhjb25zdCBSZXNfdmFsdWUqIHZhbHVlLCBzaXplX3Qgc3RyaW5nQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcjE2X3QgdG1wQnVmZmVyW1RNUF9CVUZGRVJfU0laRV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiBvdXRMZW4pOwotCi0gICAgc3RydWN0IGJhZ19lbnRyeSB7Ci0gICAgICAgIHNzaXplX3Qgc3RyaW5nQmxvY2s7Ci0gICAgICAgIFJlc1RhYmxlX21hcCBtYXA7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSBiYWcgb2YgYSByZXNvdXJjZS4gIElmIHRoZSByZXNvcnVjZSBpcyBmb3VuZCwgcmV0dXJucyB0aGUKLSAgICAgKiBudW1iZXIgb2YgYmFncyBpdCBjb250YWlucyBhbmQgJ291dEJhZycgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHRoZWlyCi0gICAgICogdmFsdWVzLiAgSWYgbm90IGZvdW5kLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuCi0gICAgICoKLSAgICAgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiAtZG9lcy0gZG8gcmVmZXJlbmNlIHRyYXZlcnNhbCBvZiB0aGUgYmFnIGRhdGEuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVzSUQgVGhlIGRlc2lyZWQgcmVzb3VyY2UgaWRlbnRpZmllci4KLSAgICAgKiBAcGFyYW0gb3V0QmFnIEZpbGxlZCBpbm0gd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGJhZyBtYXBwaW5ncy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gc3NpemVfdCBFaXRoZXIgYSA+PSAwIGJhZyBjb3VudCBvZiBuZWdhdGl2ZSBlcnJvciBjb2RlLgotICAgICAqLwotICAgIHNzaXplX3QgbG9ja0JhZyh1aW50MzJfdCByZXNJRCwgY29uc3QgYmFnX2VudHJ5Kiogb3V0QmFnKSBjb25zdDsKLQotICAgIHZvaWQgdW5sb2NrQmFnKGNvbnN0IGJhZ19lbnRyeSogYmFnKSBjb25zdDsKLQotICAgIHZvaWQgbG9jaygpIGNvbnN0OwotCi0gICAgc3NpemVfdCBnZXRCYWdMb2NrZWQodWludDMyX3QgcmVzSUQsIGNvbnN0IGJhZ19lbnRyeSoqIG91dEJhZywKLSAgICAgICAgICAgIHVpbnQzMl90KiBvdXRUeXBlU3BlY0ZsYWdzPU5VTEwpIGNvbnN0OwotCi0gICAgdm9pZCB1bmxvY2soKSBjb25zdDsKLQotICAgIGNsYXNzIFRoZW1lIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFRoZW1lKGNvbnN0IFJlc1RhYmxlJiB0YWJsZSk7Ci0gICAgICAgIH5UaGVtZSgpOwotCi0gICAgICAgIGlubGluZSBjb25zdCBSZXNUYWJsZSYgZ2V0UmVzVGFibGUoKSBjb25zdCB7IHJldHVybiBtVGFibGU7IH0KLQotICAgICAgICBzdGF0dXNfdCBhcHBseVN0eWxlKHVpbnQzMl90IHJlc0lELCBib29sIGZvcmNlPWZhbHNlKTsKLSAgICAgICAgc3RhdHVzX3Qgc2V0VG8oY29uc3QgVGhlbWUmIG90aGVyKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0cmlldmUgYSB2YWx1ZSBpbiB0aGUgdGhlbWUuICBJZiB0aGUgdGhlbWUgZGVmaW5lcyB0aGlzCi0gICAgICAgICAqIHZhbHVlLCByZXR1cm5zIGEgdmFsdWUgPj0gMCBpbmRpY2F0aW5nIHRoZSB0YWJsZSBpdCBpcyBpbgotICAgICAgICAgKiAoZm9yIHVzZSB3aXRoIGdldFRhYmxlU3RyaW5nQmxvY2soKSBhbmQgZ2V0VGFibGVDb29raWUpIGFuZAotICAgICAgICAgKiBmaWxscyBpbiAnb3V0VmFsdWUnLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IKLSAgICAgICAgICogY29kZS4KLSAgICAgICAgICoKLSAgICAgICAgICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZG8gcmVmZXJlbmNlIHRyYXZlcnNhbC4gIElmIHlvdSB3YW50Ci0gICAgICAgICAqIHRvIGZvbGxvdyByZWZlcmVuY2VzIHRvIG90aGVyIHJlc291cmNlcyB0byBnZXQgdGhlICJyZWFsIiB2YWx1ZSB0bwotICAgICAgICAgKiB1c2UsIHlvdSBuZWVkIHRvIGNhbGwgcmVzb2x2ZVJlZmVyZW5jZSgpIGFmdGVyIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSByZXNJRCBBIHJlc291cmNlIGlkZW50aWZpZXIgbmFtaW5nIHRoZSBkZXNpcmVkIHRoZW1lCi0gICAgICAgICAqICAgICAgICAgICAgICBhdHRyaWJ1dGUuCi0gICAgICAgICAqIEBwYXJhbSBvdXRWYWx1ZSBGaWxsZWQgaW4gd2l0aCB0aGUgdGhlbWUgdmFsdWUgdGhhdCB3YXMKLSAgICAgICAgICogICAgICAgICAgICAgICAgIGZvdW5kLgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIHNzaXplX3QgRWl0aGVyIGEgPj0gMCB0YWJsZSBpbmRleCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCi0gICAgICAgICAqLwotICAgICAgICBzc2l6ZV90IGdldEF0dHJpYnV0ZSh1aW50MzJfdCByZXNJRCwgUmVzX3ZhbHVlKiBvdXRWYWx1ZSwKLSAgICAgICAgICAgICAgICB1aW50MzJfdCogb3V0VHlwZVNwZWNGbGFncyA9IE5VTEwpIGNvbnN0OwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBUaGlzIGlzIGxpa2UgUmVzVGFibGU6OnJlc29sdmVSZWZlcmVuY2UoKSwgYnV0IGFsc28gdGFrZXMKLSAgICAgICAgICogY2FyZSBvZiByZXNvbHZpbmcgYXR0cmlidXRlIHJlZmVyZW5jZXMgdG8gdGhlIHRoZW1lLgotICAgICAgICAgKi8KLSAgICAgICAgc3NpemVfdCByZXNvbHZlQXR0cmlidXRlUmVmZXJlbmNlKFJlc192YWx1ZSogaW5PdXRWYWx1ZSwKLSAgICAgICAgICAgICAgICBzc2l6ZV90IGJsb2NrSW5kZXgsIHVpbnQzMl90KiBvdXRMYXN0UmVmID0gTlVMTCwKLSAgICAgICAgICAgICAgICB1aW50MzJfdCogaW5vdXRUeXBlU3BlY0ZsYWdzID0gTlVMTCwKLSAgICAgICAgICAgICAgICBSZXNUYWJsZV9jb25maWcqIGlub3V0Q29uZmlnID0gTlVMTCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBkdW1wVG9Mb2coKSBjb25zdDsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgVGhlbWUoY29uc3QgVGhlbWUmKTsKLSAgICAgICAgVGhlbWUmIG9wZXJhdG9yPShjb25zdCBUaGVtZSYpOwotCi0gICAgICAgIHN0cnVjdCB0aGVtZV9lbnRyeSB7Ci0gICAgICAgICAgICBzc2l6ZV90IHN0cmluZ0Jsb2NrOwotICAgICAgICAgICAgdWludDMyX3QgdHlwZVNwZWNGbGFnczsKLSAgICAgICAgICAgIFJlc192YWx1ZSB2YWx1ZTsKLSAgICAgICAgfTsKLSAgICAgICAgc3RydWN0IHR5cGVfaW5mbyB7Ci0gICAgICAgICAgICBzaXplX3QgbnVtRW50cmllczsKLSAgICAgICAgICAgIHRoZW1lX2VudHJ5KiBlbnRyaWVzOwotICAgICAgICB9OwotICAgICAgICBzdHJ1Y3QgcGFja2FnZV9pbmZvIHsKLSAgICAgICAgICAgIHNpemVfdCBudW1UeXBlczsKLSAgICAgICAgICAgIHR5cGVfaW5mbyB0eXBlc1tdOwotICAgICAgICB9OwotCi0gICAgICAgIHZvaWQgZnJlZV9wYWNrYWdlKHBhY2thZ2VfaW5mbyogcGkpOwotICAgICAgICBwYWNrYWdlX2luZm8qIGNvcHlfcGFja2FnZShwYWNrYWdlX2luZm8qIHBpKTsKLQotICAgICAgICBjb25zdCBSZXNUYWJsZSYgbVRhYmxlOwotICAgICAgICBwYWNrYWdlX2luZm8qICAgbVBhY2thZ2VzW1Jlc19NQVhQQUNLQUdFXTsKLSAgICB9OwotCi0gICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogcGFyYW1zKTsKLSAgICB2b2lkIGdldFBhcmFtZXRlcnMoUmVzVGFibGVfY29uZmlnKiBwYXJhbXMpIGNvbnN0OwotCi0gICAgLy8gUmV0cmlldmUgYW4gaWRlbnRpZmllciAod2hpY2ggY2FuIGJlIHBhc3NlZCB0byBnZXRSZXNvdXJjZSkKLSAgICAvLyBmb3IgYSBnaXZlbiByZXNvdXJjZSBuYW1lLiAgVGhlICduYW1lJyBjYW4gYmUgZnVsbHkgcXVhbGlmaWVkCi0gICAgLy8gKDxwYWNrYWdlPjo8dHlwZT4uPGJhc2VuYW1lPikgb3IgdGhlIHBhY2thZ2Ugb3IgdHlwZSBjb21wb25lbnRzCi0gICAgLy8gY2FuIGJlIGRyb3BwZWQgaWYgZGVmYXVsdCB2YWx1ZXMgYXJlIHN1cHBsaWVkIGhlcmUuCi0gICAgLy8KLSAgICAvLyBSZXR1cm5zIDAgaWYgbm8gc3VjaCByZXNvdXJjZSB3YXMgZm91bmQsIGVsc2UgYSB2YWxpZCByZXNvdXJjZSBJRC4KLSAgICB1aW50MzJfdCBpZGVudGlmaWVyRm9yTmFtZShjb25zdCBjaGFyMTZfdCogbmFtZSwgc2l6ZV90IG5hbWVMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHR5cGUgPSAwLCBzaXplX3QgdHlwZUxlbiA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIGRlZlBhY2thZ2UgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkZWZQYWNrYWdlTGVuID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogb3V0VHlwZVNwZWNGbGFncyA9IE5VTEwpIGNvbnN0OwotCi0gICAgc3RhdGljIGJvb2wgZXhwYW5kUmVzb3VyY2VSZWYoY29uc3QgdWludDE2X3QqIHJlZlN0ciwgc2l6ZV90IHJlZkxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiogb3V0UGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiogb3V0VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiogb3V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiogZGVmVHlwZSA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlBhY2thZ2UgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBvdXRFcnJvck1zZyA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogb3V0UHVibGljT25seSA9IE5VTEwpOwotCi0gICAgc3RhdGljIGJvb2wgc3RyaW5nVG9JbnQoY29uc3QgY2hhcjE2X3QqIHMsIHNpemVfdCBsZW4sIFJlc192YWx1ZSogb3V0VmFsdWUpOwotICAgIHN0YXRpYyBib29sIHN0cmluZ1RvRmxvYXQoY29uc3QgY2hhcjE2X3QqIHMsIHNpemVfdCBsZW4sIFJlc192YWx1ZSogb3V0VmFsdWUpOwotCi0gICAgLy8gVXNlZCB3aXRoIHN0cmluZ1RvVmFsdWUuCi0gICAgY2xhc3MgQWNjZXNzb3IKLSAgICB7Ci0gICAgcHVibGljOgotICAgICAgICBpbmxpbmUgdmlydHVhbCB+QWNjZXNzb3IoKSB7IH0KLQotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGdldEN1c3RvbVJlc291cmNlKGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZ2V0Q3VzdG9tUmVzb3VyY2VXaXRoQ3JlYXRpb24oY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBjcmVhdGVJZk5lZWRlZCA9IGZhbHNlKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZ2V0UmVtYXBwZWRQYWNrYWdlKHVpbnQzMl90IG9yaWdQYWNrYWdlKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRBdHRyaWJ1dGVUeXBlKHVpbnQzMl90IGF0dHJJRCwgdWludDMyX3QqIG91dFR5cGUpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldEF0dHJpYnV0ZU1pbih1aW50MzJfdCBhdHRySUQsIHVpbnQzMl90KiBvdXRNaW4pID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldEF0dHJpYnV0ZU1heCh1aW50MzJfdCBhdHRySUQsIHVpbnQzMl90KiBvdXRNYXgpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldEF0dHJpYnV0ZUVudW0odWludDMyX3QgYXR0cklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogbmFtZSwgc2l6ZV90IG5hbWVMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc192YWx1ZSogb3V0VmFsdWUpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldEF0dHJpYnV0ZUZsYWdzKHVpbnQzMl90IGF0dHJJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBuYW1lLCBzaXplX3QgbmFtZUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc192YWx1ZSogb3V0VmFsdWUpID0gMDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBnZXRBdHRyaWJ1dGVMMTBOKHVpbnQzMl90IGF0dHJJRCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0TG9jYWxpemF0aW9uU2V0dGluZygpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlcG9ydEVycm9yKHZvaWQqIGFjY2Vzc29yQ29va2llLCBjb25zdCBjaGFyKiBmbXQsIC4uLikgPSAwOwotICAgIH07Ci0KLSAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgcmVzb3VyY2UgdmFsdWUuICBIYW5kbGVzIHN0YW5kYXJkICJAcmVzIiwKLSAgICAvLyAiI2NvbG9yIiwgIjEyMyIsIGFuZCAiMHgxYmQiIHR5cGVzOyBwZXJmb3JtcyBlc2NhcGluZyBvZiBzdHJpbmdzLgotICAgIC8vIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgcGxhY2VkIGluICdvdXRWYWx1ZSc7IGlmIGl0IGlzIGEgc3RyaW5nIHR5cGUsCi0gICAgLy8gJ291dFN0cmluZycgcmVjZWl2ZXMgdGhlIHN0cmluZy4gIElmICdhdHRySUQnIGlzIHN1cHBsaWVkLCB0aGUgdmFsdWUgaXMKLSAgICAvLyB0eXBlIGNoZWNrZWQgYWdhaW5zdCB0aGlzIGF0dHJpYnV0ZSBhbmQgaXQgaXMgdXNlZCB0byBwZXJmb3JtIGVudW0KLSAgICAvLyBldmFsdWF0aW9uLiAgSWYgJ2FjY2Nlc3NvcicgaXMgc3VwcGxpZWQsIGl0IHdpbGwgYmUgdXNlZCB0byBhdHRlbXB0IHRvCi0gICAgLy8gcmVzb2x2ZSByZXNvdXJjZXMgdGhhdCBkbyBub3QgZXhpc3QgaW4gdGhpcyBSZXNUYWJsZS4gIElmICdhdHRyVHlwZScgaXMKLSAgICAvLyBzdXBwbGllZCwgdGhlIHZhbHVlIHdpbGwgYmUgdHlwZSBjaGVja2VkIGZvciB0aGlzIGZvcm1hdCBpZiAnYXR0cklEJwotICAgIC8vIGlzIG5vdCBzdXBwbGllZCBvciBmb3VuZC4KLSAgICBib29sIHN0cmluZ1RvVmFsdWUoUmVzX3ZhbHVlKiBvdXRWYWx1ZSwgU3RyaW5nMTYqIG91dFN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHMsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlc2VydmVTcGFjZXMsIGJvb2wgY29lcmNlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXR0cklEID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlR5cGUgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiogZGVmUGFja2FnZSA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc29yKiBhY2Nlc3NvciA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFjY2Vzc29yQ29va2llID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXR0clR5cGUgPSBSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIGVuZm9yY2VQcml2YXRlID0gdHJ1ZSkgY29uc3Q7Ci0KLSAgICAvLyBQZXJmb3JtIHByb2Nlc3Npbmcgb2YgZXNjYXBlcyBhbmQgcXVvdGVzIGluIGEgc3RyaW5nLgotICAgIHN0YXRpYyBib29sIGNvbGxlY3RTdHJpbmcoU3RyaW5nMTYqIG91dFN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBzLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZVNwYWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBvdXRFcnJvck1zZyA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZCA9IGZhbHNlKTsKLQotICAgIHNpemVfdCBnZXRCYXNlUGFja2FnZUNvdW50KCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhcjE2X3QqIGdldEJhc2VQYWNrYWdlTmFtZShzaXplX3QgaWR4KSBjb25zdDsKLSAgICB1aW50MzJfdCBnZXRCYXNlUGFja2FnZUlkKHNpemVfdCBpZHgpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgcmVzb3VyY2UgdGFibGVzIHRoYXQgdGhlIG9iamVjdCBjb250YWlucy4KLSAgICBzaXplX3QgZ2V0VGFibGVDb3VudCgpIGNvbnN0OwotICAgIC8vIFJldHVybiB0aGUgdmFsdWVzIHN0cmluZyBwb29sIGZvciB0aGUgcmVzb3VyY2UgdGFibGUgYXQgdGhlIGdpdmVuCi0gICAgLy8gaW5kZXguICBUaGlzIHN0cmluZyBwb29sIGNvbnRhaW5zIGFsbCBvZiB0aGUgc3RyaW5ncyBmb3IgdmFsdWVzCi0gICAgLy8gY29udGFpbmVkIGluIHRoZSByZXNvdXJjZSB0YWJsZSAtLSB0aGF0IGlzIHRoZSBpdGVtIHZhbHVlcyB0aGVtc2VsdmVzLAotICAgIC8vIGJ1dCBub3QgdGhlIG5hbWVzIHRoZWlyIGVudHJpZXMgb3IgdHlwZXMuCi0gICAgY29uc3QgUmVzU3RyaW5nUG9vbCogZ2V0VGFibGVTdHJpbmdCbG9jayhzaXplX3QgaW5kZXgpIGNvbnN0OwotICAgIC8vIFJldHVybiB1bmlxdWUgY29va2llIGlkZW50aWZpZXIgZm9yIHRoZSBnaXZlbiByZXNvdXJjZSB0YWJsZS4KLSAgICB2b2lkKiBnZXRUYWJsZUNvb2tpZShzaXplX3QgaW5kZXgpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJuIHRoZSBjb25maWd1cmF0aW9ucyAoUmVzVGFibGVfY29uZmlnKSB0aGF0IHdlIGtub3cgYWJvdXQKLSAgICB2b2lkIGdldENvbmZpZ3VyYXRpb25zKFZlY3RvcjxSZXNUYWJsZV9jb25maWc+KiBjb25maWdzKSBjb25zdDsKLQotICAgIHZvaWQgZ2V0TG9jYWxlcyhWZWN0b3I8U3RyaW5nOD4qIGxvY2FsZXMpIGNvbnN0OwotCi0gICAgLy8gR2VuZXJhdGUgYW4gaWRtYXAuCi0gICAgLy8KLSAgICAvLyBSZXR1cm4gdmFsdWU6IG9uIHN1Y2Nlc3M6IE5PX0VSUk9SOyBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWUtaW5nCi0gICAgLy8gb3V0RGF0YSAodXNpbmcgZnJlZSgzKSkuIE9uIGZhaWx1cmUsIGFueSBzdGF0dXNfdCB2YWx1ZSBvdGhlciB0aGFuCi0gICAgLy8gTk9fRVJST1I7IHRoZSBjYWxsZXIgc2hvdWxkIG5vdCBmcmVlIG91dERhdGEuCi0gICAgc3RhdHVzX3QgY3JlYXRlSWRtYXAoY29uc3QgUmVzVGFibGUmIG92ZXJsYXksIHVpbnQzMl90IG9yaWdpbmFsQ3JjLCB1aW50MzJfdCBvdmVybGF5Q3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiBvdXREYXRhLCBzaXplX3QqIG91dFNpemUpIGNvbnN0OwotCi0gICAgZW51bSB7Ci0gICAgICAgIElETUFQX0hFQURFUl9TSVpFX0JZVEVTID0gMyAqIHNpemVvZih1aW50MzJfdCksCi0gICAgfTsKLSAgICAvLyBSZXRyaWV2ZSBpZG1hcCBtZXRhLWRhdGEuCi0gICAgLy8KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgcmVxdWlyZXMgdGhlIGlkbWFwIGhlYWRlciAodGhlIGZpcnN0Ci0gICAgLy8gSURNQVBfSEVBREVSX1NJWkVfQllURVMpIGJ5dGVzIG9mIGFuIGlkbWFwIGZpbGUuCi0gICAgc3RhdGljIGJvb2wgZ2V0SWRtYXBJbmZvKGNvbnN0IHZvaWQqIGlkbWFwLCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIHBPcmlnaW5hbENyYywgdWludDMyX3QqIHBPdmVybGF5Q3JjKTsKLQotICAgIHZvaWQgcHJpbnQoYm9vbCBpbmNsVmFsdWVzKSBjb25zdDsKLSAgICBzdGF0aWMgU3RyaW5nOCBub3JtYWxpemVGb3JPdXRwdXQoY29uc3QgY2hhciogaW5wdXQpOwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBIZWFkZXI7Ci0gICAgc3RydWN0IFR5cGU7Ci0gICAgc3RydWN0IFBhY2thZ2U7Ci0gICAgc3RydWN0IFBhY2thZ2VHcm91cDsKLSAgICBzdHJ1Y3QgYmFnX3NldDsKLQotICAgIHN0YXR1c190IGFkZChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgdm9pZCogY29va2llLAotICAgICAgICAgICAgICAgICBBc3NldCogYXNzZXQsIGJvb2wgY29weURhdGEsIGNvbnN0IEFzc2V0KiBpZG1hcCk7Ci0KLSAgICBzc2l6ZV90IGdldFJlc291cmNlUGFja2FnZUluZGV4KHVpbnQzMl90IHJlc0lEKSBjb25zdDsKLSAgICBzc2l6ZV90IGdldEVudHJ5KAotICAgICAgICBjb25zdCBQYWNrYWdlKiBwYWNrYWdlLCBpbnQgdHlwZUluZGV4LCBpbnQgZW50cnlJbmRleCwKLSAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnKiBjb25maWcsCi0gICAgICAgIGNvbnN0IFJlc1RhYmxlX3R5cGUqKiBvdXRUeXBlLCBjb25zdCBSZXNUYWJsZV9lbnRyeSoqIG91dEVudHJ5LAotICAgICAgICBjb25zdCBUeXBlKiogb3V0VHlwZUNsYXNzKSBjb25zdDsKLSAgICBzdGF0dXNfdCBwYXJzZVBhY2thZ2UoCi0gICAgICAgIGNvbnN0IFJlc1RhYmxlX3BhY2thZ2UqIGNvbnN0IHBrZywgY29uc3QgSGVhZGVyKiBjb25zdCBoZWFkZXIsIHVpbnQzMl90IGlkbWFwX2lkKTsKLQotICAgIHZvaWQgcHJpbnRfdmFsdWUoY29uc3QgUGFja2FnZSogcGtnLCBjb25zdCBSZXNfdmFsdWUmIHZhbHVlKSBjb25zdDsKLSAgICAKLSAgICBtdXRhYmxlIE11dGV4ICAgICAgICAgICAgICAgbUxvY2s7Ci0KLSAgICBzdGF0dXNfdCAgICAgICAgICAgICAgICAgICAgbUVycm9yOwotCi0gICAgUmVzVGFibGVfY29uZmlnICAgICAgICAgICAgIG1QYXJhbXM7Ci0KLSAgICAvLyBBcnJheSBvZiBhbGwgcmVzb3VyY2UgdGFibGVzLgotICAgIFZlY3RvcjxIZWFkZXIqPiAgICAgICAgICAgICBtSGVhZGVyczsKLQotICAgIC8vIEFycmF5IG9mIHBhY2thZ2VzIGluIGFsbCByZXNvdXJjZSB0YWJsZXMuCi0gICAgVmVjdG9yPFBhY2thZ2VHcm91cCo+ICAgICAgIG1QYWNrYWdlR3JvdXBzOwotCi0gICAgLy8gTWFwcGluZyBmcm9tIHJlc291cmNlIHBhY2thZ2UgSURzIHRvIGluZGljZXMgaW50byB0aGUgaW50ZXJuYWwKLSAgICAvLyBwYWNrYWdlIGFycmF5LgotICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICBtUGFja2FnZU1hcFsyNTZdOwotfTsKLQotfSAgIC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBfTElCU19VVElMU19SRVNPVVJDRV9UWVBFU19ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FuZHJvaWRmdy9TdHJlYW1pbmdaaXBJbmZsYXRlci5oIGIvaW5jbHVkZS9hbmRyb2lkZncvU3RyZWFtaW5nWmlwSW5mbGF0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FjZTVkNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FuZHJvaWRmdy9TdHJlYW1pbmdaaXBJbmZsYXRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgX19MSUJTX1NUUkVBTUlOR1pJUElORkxBVEVSX0gKLSNkZWZpbmUgX19MSUJTX1NUUkVBTUlOR1pJUElORkxBVEVSX0gKLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8emxpYi5oPgotCi0jaW5jbHVkZSA8dXRpbHMvQ29tcGF0Lmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotY2xhc3MgU3RyZWFtaW5nWmlwSW5mbGF0ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgSU5QVVRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IE9VVFBVVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0OwotCi0gICAgLy8gRmxhdm9yIHRoYXQgcGFnZXMgaW4gdGhlIGNvbXByZXNzZWQgZGF0YSBmcm9tIGEgZmQKLSAgICBTdHJlYW1pbmdaaXBJbmZsYXRlcihpbnQgZmQsIG9mZjY0X3QgY29tcERhdGFTdGFydCwgc2l6ZV90IHVuY29tcFNpemUsIHNpemVfdCBjb21wU2l6ZSk7Ci0KLSAgICAvLyBGbGF2b3IgdGhhdCBnZXRzIHRoZSBjb21wcmVzc2VkIGRhdGEgZnJvbSBhbiBpbi1tZW1vcnkgYnVmZmVyCi0gICAgU3RyZWFtaW5nWmlwSW5mbGF0ZXIoY2xhc3MgRmlsZU1hcCogZGF0YU1hcCwgc2l6ZV90IHVuY29tcFNpemUpOwotCi0gICAgflN0cmVhbWluZ1ppcEluZmxhdGVyKCk7Ci0KLSAgICAvLyByZWFkICdjb3VudCcgYnl0ZXMgb2YgdW5jb21wcmVzc2VkIGRhdGEgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4gIG91dEJ1ZiBtYXkKLSAgICAvLyBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIHRoZSBkYXRhIGlzIGNvbnN1bWVkIGFuZCBkaXNjYXJkZWQuCi0gICAgc3NpemVfdCByZWFkKHZvaWQqIG91dEJ1Ziwgc2l6ZV90IGNvdW50KTsKLQotICAgIC8vIHNlZWtpbmcgYmFja3dhcmRzIHJlcXVpcmVzIHVuY29tcHJlc3NpbmcgZm9tIHRoZSBiZWdpbm5pbmcsIHNvIGlzIHZlcnkKLSAgICAvLyBleHBlbnNpdmUuICBzZWVraW5nIGZvcndhcmRzIG9ubHkgcmVxdWlyZXMgdW5jb21wcmVzc2luZyBmcm9tIHRoZSBjdXJyZW50Ci0gICAgLy8gcG9zaXRpb24gdG8gdGhlIGRlc3RpbmF0aW9uLgotICAgIG9mZjY0X3Qgc2Vla0Fic29sdXRlKG9mZjY0X3QgYWJzb2x1dGVJbnB1dFBvc2l0aW9uKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGluaXRJbmZsYXRlU3RhdGUoKTsKLSAgICBpbnQgcmVhZE5leHRDaHVuaygpOwotCi0gICAgLy8gd2hlcmUgdG8gZmluZCB0aGUgdW5jb21wcmVzc2VkIGRhdGEKLSAgICBpbnQgbUZkOwotICAgIG9mZjY0X3QgbUluRmlsZVN0YXJ0OyAgICAgICAgIC8vIHdoZXJlIHRoZSBjb21wcmVzc2VkIGRhdGEgbGl2ZXMgaW4gdGhlIGZpbGUKLSAgICBjbGFzcyBGaWxlTWFwKiBtRGF0YU1hcDsKLQotICAgIHpfc3RyZWFtIG1JbmZsYXRlU3RhdGU7Ci0gICAgYm9vbCBtU3RyZWFtTmVlZHNJbml0OwotCi0gICAgLy8gb3V0cHV0IGludmFyaWFudHMgZm9yIHRoaXMgYXNzZXQKLSAgICB1aW50OF90KiBtT3V0QnVmOyAgICAgICAgICAgLy8gb3V0cHV0IGJ1ZiBmb3IgZGVjb21wcmVzc2VkIGJ5dGVzCi0gICAgc2l6ZV90IG1PdXRCdWZTaXplOyAgICAgICAgIC8vIGFsbG9jYXRlZCBzaXplIG9mIG1PdXRCdWYKLSAgICBzaXplX3QgbU91dFRvdGFsU2l6ZTsgICAgICAgLy8gdG90YWwgdW5jb21wcmVzc2VkIHNpemUgb2YgdGhlIGJsb2IKLQotICAgIC8vIGN1cnJlbnQgb3V0cHV0IHN0YXRlIGJvb2trZWVwaW5nCi0gICAgb2ZmNjRfdCBtT3V0Q3VyUG9zaXRpb247ICAgICAgLy8gY3VycmVudCBwb3NpdGlvbiBpbiB0b3RhbCBvZmZzZXQKLSAgICBzaXplX3QgbU91dExhc3REZWNvZGVkOyAgICAgLy8gbGFzdCBkZWNvZGVkIGJ5dGUgKyAxIGluIG1PdXRidWYKLSAgICBzaXplX3QgbU91dERlbGl2ZXJhYmxlOyAgICAgLy8gbmV4dCB1bmRlbGl2ZXJlZCBieXRlIG9mIGRlY29kZWQgb3V0cHV0IGluIG1PdXRCdWYKLQotICAgIC8vIGlucHV0IGludmFyaWFudHMKLSAgICB1aW50OF90KiBtSW5CdWY7Ci0gICAgc2l6ZV90IG1JbkJ1ZlNpemU7ICAgICAgICAgIC8vIGFsbG9jYXRlZCBzaXplIG9mIG1JbkJ1ZjsKLSAgICBzaXplX3QgbUluVG90YWxTaXplOyAgICAgICAgLy8gdG90YWwgc2l6ZSBvZiBjb21wcmVzc2VkIGRhdGEgZm9yIHRoaXMgYmxvYgotCi0gICAgLy8gaW5wdXQgc3RhdGUgYm9va2tlZXBpbmcKLSAgICBzaXplX3QgbUluTmV4dENodW5rT2Zmc2V0OyAgLy8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgYmxvYiBhdCB3aGljaCB0aGUgbmV4dCBpbnB1dCBjaHVuayBsaWVzCi0gICAgLy8gdGhlIHpfc3RyZWFtIGNvbnRhaW5zIHN0YXRlIGFib3V0IGlucHV0IGJsb2NrIGNvbnN1bXB0aW9uCi19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbmRyb2lkZncvWmlwRmlsZVJPLmggYi9pbmNsdWRlL2FuZHJvaWRmdy9aaXBGaWxlUk8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ1YmUxMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FuZHJvaWRmdy9aaXBGaWxlUk8uaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoKLSAqIFJlYWQtb25seSBhY2Nlc3MgdG8gWmlwIGFyY2hpdmVzLCB3aXRoIG1pbmltYWwgaGVhcCBhbGxvY2F0aW9uLgotICoKLSAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgbW9yZS1jb21wbGV0ZSBaaXBGaWxlIGNsYXNzLCBidXQgbm8gYXR0ZW1wdAotICogaGFzIGJlZW4gbWFkZSB0byBtYWtlIHRoZW0gaW50ZXJjaGFuZ2VhYmxlLiAgVGhpcyBjbGFzcyBvcGVyYXRlcyB1bmRlcgotICogYSB2ZXJ5IGRpZmZlcmVudCBzZXQgb2YgYXNzdW1wdGlvbnMgYW5kIGNvbnN0cmFpbnRzLgotICoKLSAqIE9uZSBzdWNoIGFzc3VtcHRpb24gaXMgdGhhdCBpZiB5b3UncmUgZ2V0dGluZyBmaWxlIGRlc2NyaXB0b3JzIGZvcgotICogdXNlIHdpdGggdGhpcyBjbGFzcyBhcyBhIGNoaWxkIG9mIGEgZm9yaygpIG9wZXJhdGlvbiwgeW91IG11c3QgYmUgb24KLSAqIGEgcHJlYWQoKSB0byBndWFyYW50ZWUgY29ycmVjdCBvcGVyYXRpb24uIFRoaXMgaXMgYmVjYXVzZSBwcmVhZCgpIGNhbgotICogYXRvbWljYWxseSByZWFkIGF0IGEgZmlsZSBvZmZzZXQgd2l0aG91dCB3b3JyeWluZyBhYm91dCBhIGxvY2sgYXJvdW5kIGFuCi0gKiBsc2VlaygpICsgcmVhZCgpIHBhaXIuCi0gKi8KLSNpZm5kZWYgX19MSUJTX1pJUEZJTEVST19ICi0jZGVmaW5lIF9fTElCU19aSVBGSUxFUk9fSAotCi0jaW5jbHVkZSA8dXRpbHMvQ29tcGF0Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvRmlsZU1hcC5oPgotI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotCi10eXBlZGVmIHZvaWQqIFppcEFyY2hpdmVIYW5kbGU7Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyoKLSAqIFRyaXZpYWwgdHlwZWRlZiB0byBlbnN1cmUgdGhhdCBaaXBFbnRyeVJPIGlzIG5vdCB0cmVhdGVkIGFzIGEgc2ltcGxlCi0gKiBpbnRlZ2VyLiAgV2UgdXNlIE5VTEwgdG8gaW5kaWNhdGUgYW4gaW52YWxpZCB2YWx1ZS4KLSAqLwotdHlwZWRlZiB2b2lkKiBaaXBFbnRyeVJPOwotCi0vKgotICogT3BlbiBhIFppcCBhcmNoaXZlIGZvciByZWFkaW5nLgotICoKLSAqIEltcGxlbWVudGVkIGFzIGEgdGhpbiB3cmFwcGVyIG92ZXIgc3lzdGVtL2NvcmUvbGliemlwYXJjaGl2ZS4KLSAqCi0gKiAib3BlbiIgYW5kICJmaW5kIGVudHJ5IGJ5IG5hbWUiIGFyZSBmYXN0IG9wZXJhdGlvbnMgYW5kIHVzZSBhcyBsaXR0bGUKLSAqIG1lbW9yeSBhcyBwb3NzaWJsZS4KLSAqCi0gKiBXZSBhbHNvIHN1cHBvcnQgZmFzdCBpdGVyYXRpb24gb3ZlciBhbGwgZW50cmllcyBpbiB0aGUgZmlsZSAod2l0aCBhCi0gKiBzdGFibGUsIGJ1dCB1bnNwZWNpZmllZCBpdGVyYXRpb24gb3JkZXIpLgotICoKLSAqIE5PVEU6IElmIHRoaXMgaXMgdXNlZCBvbiBmaWxlIGRlc2NyaXB0b3JzIGluaGVyaXRlZCBmcm9tIGEgZm9yaygpIG9wZXJhdGlvbiwKLSAqIHlvdSBtdXN0IGJlIG9uIGEgcGxhdGZvcm0gdGhhdCBpbXBsZW1lbnRzIHByZWFkKCkgdG8gZ3VhcmFudGVlIGNvcnJlY3RuZXNzCi0gKiBvbiB0aGUgc2hhcmVkIGZpbGUgZGVzY3JpcHRvcnMuCi0gKi8KLWNsYXNzIFppcEZpbGVSTyB7Ci1wdWJsaWM6Ci0gICAgLyogWmlwIGNvbXByZXNzaW9uIG1ldGhvZHMgd2Ugc3VwcG9ydCAqLwotICAgIGVudW0gewotICAgICAgICBrQ29tcHJlc3NTdG9yZWQgICAgID0gMCwgICAgICAgIC8vIG5vIGNvbXByZXNzaW9uCi0gICAgICAgIGtDb21wcmVzc0RlZmxhdGVkICAgPSA4LCAgICAgICAgLy8gc3RhbmRhcmQgZGVmbGF0ZQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIE9wZW4gYW4gYXJjaGl2ZS4KLSAgICAgKi8KLSAgICBzdGF0aWMgWmlwRmlsZVJPKiBvcGVuKGNvbnN0IGNoYXIqIHppcEZpbGVOYW1lKTsKLQotICAgIC8qCi0gICAgICogRmluZCBhbiBlbnRyeSwgYnkgbmFtZS4gIFJldHVybnMgdGhlIGVudHJ5IGlkZW50aWZpZXIsIG9yIE5VTEwgaWYKLSAgICAgKiBub3QgZm91bmQuCi0gICAgICovCi0gICAgWmlwRW50cnlSTyBmaW5kRW50cnlCeU5hbWUoY29uc3QgY2hhciogZW50cnlOYW1lKSBjb25zdDsKLQotCi0gICAgLyoKLSAgICAgKiBTdGFydCBpdGVyYXRpbmcgb3ZlciB0aGUgbGlzdCBvZiBlbnRyaWVzIGluIHRoZSB6aXAgZmlsZS4gUmVxdWlyZXMKLSAgICAgKiBhIG1hdGNoaW5nIGNhbGwgdG8gZW5kSXRlcmF0aW9uIHdpdGggdGhlIHNhbWUgY29va2llLgotICAgICAqLwotICAgIGJvb2wgc3RhcnRJdGVyYXRpb24odm9pZCoqIGNvb2tpZSk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIG5leHQgZW50cnkgaW4gaXRlcmF0aW9uIG9yZGVyLCBvciBOVUxMIGlmIHRoZXJlIGFyZSBubyBtb3JlCi0gICAgICogZW50cmllcyBpbiB0aGlzIGFyY2hpdmUuCi0gICAgICovCi0gICAgWmlwRW50cnlSTyBuZXh0RW50cnkodm9pZCogY29va2llKTsKLQotICAgIHZvaWQgZW5kSXRlcmF0aW9uKHZvaWQqIGNvb2tpZSk7Ci0KLSAgICB2b2lkIHJlbGVhc2VFbnRyeShaaXBFbnRyeVJPIGVudHJ5KSBjb25zdDsKLQotICAgIC8qCi0gICAgICogUmV0dXJuIHRoZSAjb2YgZW50cmllcyBpbiB0aGUgWmlwIGFyY2hpdmUuCi0gICAgICovCi0gICAgaW50IGdldE51bUVudHJpZXMoKTsKLQotICAgIC8qCi0gICAgICogQ29weSB0aGUgZmlsZW5hbWUgaW50byB0aGUgc3VwcGxpZWQgYnVmZmVyLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsCi0gICAgICogLTEgaWYgImVudHJ5IiBpcyBpbnZhbGlkLCBvciB0aGUgZmlsZW5hbWUgbGVuZ3RoIGlmIGl0IGRpZG4ndCBmaXQuICBUaGUKLSAgICAgKiBsZW5ndGgsIGFuZCB0aGUgcmV0dXJuZWQgc3RyaW5nLCBpbmNsdWRlIHRoZSBudWxsLXRlcm1pbmF0aW9uLgotICAgICAqLwotICAgIGludCBnZXRFbnRyeUZpbGVOYW1lKFppcEVudHJ5Uk8gZW50cnksIGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZkxlbikgY29uc3Q7Ci0KLSAgICAvKgotICAgICAqIEdldCB0aGUgdml0YWwgc3RhdHMgZm9yIGFuIGVudHJ5LiAgUGFzcyBpbiBOVUxMIHBvaW50ZXJzIGZvciBhbnl0aGluZwotICAgICAqIHlvdSBkb24ndCBuZWVkLgotICAgICAqCi0gICAgICogIipwT2Zmc2V0IiBob2xkcyB0aGUgWmlwIGZpbGUgb2Zmc2V0IG9mIHRoZSBlbnRyeSdzIGRhdGEuCi0gICAgICoKLSAgICAgKiBSZXR1cm5zICJmYWxzZSIgaWYgImVudHJ5IiBpcyBib2d1cyBvciBpZiB0aGUgZGF0YSBpbiB0aGUgWmlwIGZpbGUKLSAgICAgKiBhcHBlYXJzIHRvIGJlIGJhZC4KLSAgICAgKi8KLSAgICBib29sIGdldEVudHJ5SW5mbyhaaXBFbnRyeVJPIGVudHJ5LCBpbnQqIHBNZXRob2QsIHNpemVfdCogcFVuY29tcExlbiwKLSAgICAgICAgc2l6ZV90KiBwQ29tcExlbiwgb2ZmNjRfdCogcE9mZnNldCwgbG9uZyogcE1vZFdoZW4sIGxvbmcqIHBDcmMzMikgY29uc3Q7Ci0KLSAgICAvKgotICAgICAqIENyZWF0ZSBhIG5ldyBGaWxlTWFwIG9iamVjdCB0aGF0IG1hcHMgYSBzdWJzZXQgb2YgdGhlIGFyY2hpdmUuICBGb3IKLSAgICAgKiBhbiB1bmNvbXByZXNzZWQgZW50cnkgdGhpcyBlZmZlY3RpdmVseSBwcm92aWRlcyBhIHBvaW50ZXIgdG8gdGhlCi0gICAgICogYWN0dWFsIGRhdGEsIGZvciBhIGNvbXByZXNzZWQgZW50cnkgdGhpcyBwcm92aWRlcyB0aGUgaW5wdXQgYnVmZmVyCi0gICAgICogZm9yIGluZmxhdGUoKS4KLSAgICAgKi8KLSAgICBGaWxlTWFwKiBjcmVhdGVFbnRyeUZpbGVNYXAoWmlwRW50cnlSTyBlbnRyeSkgY29uc3Q7Ci0KLSAgICAvKgotICAgICAqIFVuY29tcHJlc3MgdGhlIGRhdGEgaW50byBhIGJ1ZmZlci4gIERlcGVuZGluZyBvbiB0aGUgY29tcHJlc3Npb24KLSAgICAgKiBmb3JtYXQsIHRoaXMgaXMgZWl0aGVyIGFuICJpbmZsYXRlIiBvcGVyYXRpb24gb3IgYSBtZW1jcHkuCi0gICAgICoKLSAgICAgKiBVc2UgInVuY29tcExlbiIgZnJvbSBnZXRFbnRyeUluZm8oKSB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkCi0gICAgICogYnVmZmVyIHNpemUuCi0gICAgICoKLSAgICAgKiBSZXR1cm5zICJ0cnVlIiBvbiBzdWNjZXNzLgotICAgICAqLwotICAgIGJvb2wgdW5jb21wcmVzc0VudHJ5KFppcEVudHJ5Uk8gZW50cnksIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpIGNvbnN0OwotCi0gICAgLyoKLSAgICAgKiBVbmNvbXByZXNzIHRoZSBkYXRhIHRvIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgotICAgICAqLwotICAgIGJvb2wgdW5jb21wcmVzc0VudHJ5KFppcEVudHJ5Uk8gZW50cnksIGludCBmZCkgY29uc3Q7Ci0KLSAgICB+WmlwRmlsZVJPKCk7Ci0KLXByaXZhdGU6Ci0gICAgLyogdGhlc2UgYXJlIHByaXZhdGUgYW5kIG5vdCBkZWZpbmVkICovCi0gICAgWmlwRmlsZVJPKGNvbnN0IFppcEZpbGVSTyYgc3JjKTsKLSAgICBaaXBGaWxlUk8mIG9wZXJhdG9yPShjb25zdCBaaXBGaWxlUk8mIHNyYyk7Ci0KLSAgICBaaXBGaWxlUk8oWmlwQXJjaGl2ZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGZpbGVOYW1lKSA6IG1IYW5kbGUoaGFuZGxlKSwKLSAgICAgICAgbUZpbGVOYW1lKGZpbGVOYW1lKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBaaXBBcmNoaXZlSGFuZGxlIG1IYW5kbGU7Ci0gICAgY2hhciogbUZpbGVOYW1lOwotfTsKLQotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8qX19MSUJTX1pJUEZJTEVST19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYW5kcm9pZGZ3L1ppcFV0aWxzLmggYi9pbmNsdWRlL2FuZHJvaWRmdy9aaXBVdGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmVhMjVhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYW5kcm9pZGZ3L1ppcFV0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8KLS8vIE1pc2NlbGxhbmVvdXMgemlwL2d6aXAgdXRpbGl0eSBmdW5jdGlvbnMuCi0vLwotI2lmbmRlZiBfX0xJQlNfWklQVVRJTFNfSAotI2RlZmluZSBfX0xJQlNfWklQVVRJTFNfSAotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyoKLSAqIENvbnRhaW5lciBjbGFzcyBmb3IgdXRpbGl0eSBmdW5jdGlvbnMsIHByaW1hcmlseSBmb3IgbmFtZXNwYWNlIHJlYXNvbnMuCi0gKi8KLWNsYXNzIFppcFV0aWxzIHsKLXB1YmxpYzoKLSAgICAvKgotICAgICAqIEdlbmVyYWwgdXRpbGl0eSBmdW5jdGlvbiBmb3IgdW5jb21wcmVzc2luZyAiZGVmbGF0ZSIgZGF0YSBmcm9tIGEgZmlsZQotICAgICAqIHRvIGEgYnVmZmVyLgotICAgICAqLwotICAgIHN0YXRpYyBib29sIGluZmxhdGVUb0J1ZmZlcihGSUxFKiBmcCwgdm9pZCogYnVmLCBsb25nIHVuY29tcHJlc3NlZExlbiwKLSAgICAgICAgbG9uZyBjb21wcmVzc2VkTGVuKTsKLSAgICBzdGF0aWMgYm9vbCBpbmZsYXRlVG9CdWZmZXIoaW50IGZkLCB2b2lkKiBidWYsIGxvbmcgdW5jb21wcmVzc2VkTGVuLAotICAgICAgICBsb25nIGNvbXByZXNzZWRMZW4pOwotICAgIHN0YXRpYyBib29sIGluZmxhdGVUb0J1ZmZlcih2b2lkICppbiwgdm9pZCogYnVmLCBsb25nIHVuY29tcHJlc3NlZExlbiwKLSAgICAgICAgbG9uZyBjb21wcmVzc2VkTGVuKTsKLQotICAgIC8qCi0gICAgICogU29tZWRheSB3ZSBtaWdodCB3YW50IHRvIG1ha2UgdGhpcyBnZW5lcmljIGFuZCBoYW5kbGUgYnppcDIgIi5iejIiCi0gICAgICogZmlsZXMgdG9vLgotICAgICAqCi0gICAgICogV2UgY291bGQgZGVjbGFyZSBnemlwIHRvIGJlIGEgc3ViLWNsYXNzIG9mIHppcCB0aGF0IGhhcyBleGFjdGx5Ci0gICAgICogb25lIGFsd2F5cy1jb21wcmVzc2VkIGVudHJ5LCBidXQgd2UgY3VycmVudGx5IHdhbnQgdG8gdHJlYXQgWmlwCi0gICAgICogYW5kIGd6aXAgYXMgZGlzdGluY3QsIHNvIHRoZXJlJ3Mgbm8gdmFsdWUuCi0gICAgICoKLSAgICAgKiBUaGUgemxpYiBsaWJyYXJ5IGhhcyBzb21lIGd6aXAgdXRpbGl0aWVzLCBidXQgaXQgaGFzIG5vIGludGVyZmFjZQotICAgICAqIGZvciBleHRyYWN0aW5nIHRoZSB1bmNvbXByZXNzZWQgbGVuZ3RoIG9mIHRoZSBmaWxlICh5b3UgZG8gKm5vdCoKLSAgICAgKiB3YW50IHRvIGd6c2VlayB0byB0aGUgZW5kKS4KLSAgICAgKgotICAgICAqIFBhc3MgaW4gYSBzZWVrZWQgZmlsZSBwb2ludGVyIGZvciB0aGUgZ3ppcCBmaWxlLiAgSWYgdGhpcyBpcyBhIGd6aXAKLSAgICAgKiBmaWxlLCB3ZSBzZXQgb3VyIHJldHVybiB2YWx1ZXMgYXBwcm9wcmlhdGVseSBhbmQgcmV0dXJuICJ0cnVlIiB3aXRoCi0gICAgICogdGhlIGZpbGUgc2Vla2VkIHRvIHRoZSBzdGFydCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLgotICAgICAqLwotICAgIHN0YXRpYyBib29sIGV4YW1pbmVHemlwKEZJTEUqIGZwLCBpbnQqIHBDb21wcmVzc2lvbk1ldGhvZCwKLSAgICAgICAgbG9uZyogcFVuY29tcHJlc3NlZExlbiwgbG9uZyogcENvbXByZXNzZWRMZW4sIHVuc2lnbmVkIGxvbmcqIHBDUkMzMik7Ci0KLSAgICAvKgotICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gY29udmVydCBaSVAncyB0aW1lIGZvcm1hdCB0byBhIHRpbWVzcGVjIHN0cnVjdC4KLSAgICAgKi8KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgemlwVGltZVRvVGltZXNwZWMobG9uZyB3aGVuLCBzdHJ1Y3QgdG0qIHRpbWVzcGVjKSB7Ci0gICAgICAgIGNvbnN0IGxvbmcgZGF0ZSA9IHdoZW4gPj4gMTY7Ci0gICAgICAgIHRpbWVzcGVjLT50bV95ZWFyID0gKChkYXRlID4+IDkpICYgMHg3RikgKyA4MDsgLy8gWmlwIGlzIHllYXJzIHNpbmNlIDE5ODAKLSAgICAgICAgdGltZXNwZWMtPnRtX21vbiA9IChkYXRlID4+IDUpICYgMHgwRjsKLSAgICAgICAgdGltZXNwZWMtPnRtX21kYXkgPSBkYXRlICYgMHgxRjsKLQotICAgICAgICB0aW1lc3BlYy0+dG1faG91ciA9ICh3aGVuID4+IDExKSAmIDB4MUY7Ci0gICAgICAgIHRpbWVzcGVjLT50bV9taW4gPSAod2hlbiA+PiA1KSAmIDB4M0Y7Ci0gICAgICAgIHRpbWVzcGVjLT50bV9zZWMgPSAod2hlbiAmIDB4MUYpIDw8IDE7Ci0gICAgfQotcHJpdmF0ZToKLSAgICBaaXBVdGlscygpIHt9Ci0gICAgflppcFV0aWxzKCkge30KLX07Ci0KLX07IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvKl9fTElCU19aSVBVVElMU19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYW5kcm9pZGZ3L21pc2MuaCBiL2luY2x1ZGUvYW5kcm9pZGZ3L21pc2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE1YTBlMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FuZHJvaWRmdy9taXNjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0vLwotLy8gSGFuZHkgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHBvcnRhYmlsaXR5IGNvZGUuCi0vLwotI2lmbmRlZiBfTElCU19BTkRST0lEX0ZXX01JU0NfSAotI2RlZmluZSBfTElCU19BTkRST0lEX0ZXX01JU0NfSAotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLS8qCi0gKiBTb21lIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggZmlsZXMuICBUaGVzZSBjb3VsZCBiZSBtYWRlCi0gKiBwYXJ0IG9mIGEgIkZpbGUiIGNsYXNzLgotICovCi10eXBlZGVmIGVudW0gRmlsZVR5cGUgewotICAgIGtGaWxlVHlwZVVua25vd24gPSAwLAotICAgIGtGaWxlVHlwZU5vbmV4aXN0ZW50LCAgICAgICAvLyBpLmUuIEVOT0VOVAotICAgIGtGaWxlVHlwZVJlZ3VsYXIsCi0gICAga0ZpbGVUeXBlRGlyZWN0b3J5LAotICAgIGtGaWxlVHlwZUNoYXJEZXYsCi0gICAga0ZpbGVUeXBlQmxvY2tEZXYsCi0gICAga0ZpbGVUeXBlRmlmbywKLSAgICBrRmlsZVR5cGVTeW1saW5rLAotICAgIGtGaWxlVHlwZVNvY2tldCwKLX0gRmlsZVR5cGU7Ci0vKiBnZXQgdGhlIGZpbGUncyB0eXBlOyBmb2xsb3dzIHN5bWxpbmtzICovCi1GaWxlVHlwZSBnZXRGaWxlVHlwZShjb25zdCBjaGFyKiBmaWxlTmFtZSk7Ci0vKiBnZXQgdGhlIGZpbGUncyBtb2RpZmljYXRpb24gZGF0ZTsgcmV0dXJucyAtMSB3L2Vycm5vIHNldCBvbiBmYWlsdXJlICovCi10aW1lX3QgZ2V0RmlsZU1vZERhdGUoY29uc3QgY2hhciogZmlsZU5hbWUpOwotCi19OyAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gX0xJQlNfQU5EUk9JRF9GV19NSVNDX0gKZGlmZiAtLWdpdCBhL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9BbmRyb2lkS2V5UGFpckdlbmVyYXRvci5qYXZhIGIva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0FuZHJvaWRLZXlQYWlyR2VuZXJhdG9yLmphdmEKaW5kZXggMWFiMGFlYi4uNDU4YTQ2YyAxMDA2NDQKLS0tIGEva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0FuZHJvaWRLZXlQYWlyR2VuZXJhdG9yLmphdmEKKysrIGIva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0FuZHJvaWRLZXlQYWlyR2VuZXJhdG9yLmphdmEKQEAgLTM1LDcgKzM1LDYgQEAKIGltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuc3BlYy5BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuc3BlYy5EU0FQYXJhbWV0ZXJTcGVjOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuc3BlYy5FQ1BhcmFtZXRlclNwZWM7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5zcGVjLkludmFsaWRLZXlTcGVjRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuc3BlYy5SU0FLZXlHZW5QYXJhbWV0ZXJTcGVjOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuc3BlYy5YNTA5RW5jb2RlZEtleVNwZWM7CmRpZmYgLS1naXQgYS9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvQ3JlZGVudGlhbHMuamF2YSBiL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9DcmVkZW50aWFscy5qYXZhCmluZGV4IDc2NzY0N2MuLmFmNzZkOWQgMTAwNjQ0Ci0tLSBhL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9DcmVkZW50aWFscy5qYXZhCisrKyBiL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9DcmVkZW50aWFscy5qYXZhCkBAIC0yNyw3ICsyNyw2IEBACiBpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwogaW1wb3J0IGphdmEuaW8uUmVhZGVyOwogaW1wb3J0IGphdmEuaW8uV3JpdGVyOwpkaWZmIC0tZ2l0IGEva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleUNoYWluQWxpYXNDYWxsYmFjay5qYXZhIGIva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleUNoYWluQWxpYXNDYWxsYmFjay5qYXZhCmluZGV4IGZjOWU2NGIuLjI1MDA4NjMgMTAwNjQ0Ci0tLSBhL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9LZXlDaGFpbkFsaWFzQ2FsbGJhY2suamF2YQorKysgYi9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvS2V5Q2hhaW5BbGlhc0NhbGxiYWNrLmphdmEKQEAgLTE1LDEwICsxNSw2IEBACiAgKi8KIHBhY2thZ2UgYW5kcm9pZC5zZWN1cml0eTsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5Qcml2YXRlS2V5OwotaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5YNTA5Q2VydGlmaWNhdGU7Ci0KIC8qKgogICogVGhlIEtleUNoYWluQWxpYXNDYWxsYmFjayBpcyB0aGUgY2FsbGJhY2sgZm9yIHtAbGluawogICogS2V5Q2hhaW4jY2hvb3NlUHJpdmF0ZUtleUFsaWFzfS4KZGlmZiAtLWdpdCBhL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9LZXlTdG9yZVBhcmFtZXRlci5qYXZhIGIva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleVN0b3JlUGFyYW1ldGVyLmphdmEKaW5kZXggNjIxYTYwNS4uYjcxZWZjNCAxMDA2NDQKLS0tIGEva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleVN0b3JlUGFyYW1ldGVyLmphdmEKKysrIGIva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleVN0b3JlUGFyYW1ldGVyLmphdmEKQEAgLTE3LDEyICsxNyw5IEBACiBwYWNrYWdlIGFuZHJvaWQuc2VjdXJpdHk7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnNlY3VyaXR5LktleVBhaXJHZW5lcmF0b3JTcGVjLkJ1aWxkZXI7CiAKIGltcG9ydCBqYXZhLnNlY3VyaXR5LktleVBhaXJHZW5lcmF0b3I7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5Qcml2YXRlS2V5OwogaW1wb3J0IGphdmEuc2VjdXJpdHkuS2V5U3RvcmUuUHJvdGVjdGlvblBhcmFtZXRlcjsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGU7CiAKIC8qKgogICogVGhpcyBwcm92aWRlcyB0aGUgb3B0aW9uYWwgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgZm9yCmRpZmYgLS1naXQgYS9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvU3lzdGVtS2V5U3RvcmUuamF2YSBiL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9TeXN0ZW1LZXlTdG9yZS5qYXZhCmluZGV4IGJjYThmNjguLmUwN2VhYTIgMTAwNjQ0Ci0tLSBhL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9TeXN0ZW1LZXlTdG9yZS5qYXZhCisrKyBiL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9TeXN0ZW1LZXlTdG9yZS5qYXZhCkBAIC0xOCwxMCArMTgsOCBAQAogCiBpbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKIGltcG9ydCBhbmRyb2lkLm9zLkZpbGVVdGlsczsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9BbmRyb2lkLm1rIGIvbGlicy9hbmRyb2lkZncvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIxMTk3ZS4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCi0KLSMgbGliYW5kcm9pZGZ3IGlzIHBhcnRpYWxseSBidWlsdCBmb3IgdGhlIGhvc3QgKHVzZWQgYnkgb2JidG9vbCBhbmQgb3RoZXJzKQotIyBUaGVzZSBmaWxlcyBhcmUgY29tbW9uIHRvIGhvc3QgYW5kIHRhcmdldCBidWlsZHMuCi0KLWNvbW1vblNvdXJjZXMgOj0gXAotICAgIEFzc2V0LmNwcCBcCi0gICAgQXNzZXREaXIuY3BwIFwKLSAgICBBc3NldE1hbmFnZXIuY3BwIFwKLSAgICBtaXNjLmNwcCBcCi0gICAgT2JiRmlsZS5jcHAgXAotICAgIFJlc291cmNlVHlwZXMuY3BwIFwKLSAgICBTdHJlYW1pbmdaaXBJbmZsYXRlci5jcHAgXAotICAgIFppcEZpbGVSTy5jcHAgXAotICAgIFppcFV0aWxzLmNwcAotCi1kZXZpY2VTb3VyY2VzIDo9IFwKLSAgICAkKGNvbW1vblNvdXJjZXMpIFwKLSAgICBCYWNrdXBEYXRhLmNwcCBcCi0gICAgQmFja3VwSGVscGVycy5jcHAgXAotICAgIEN1cnNvcldpbmRvdy5jcHAKLQotaG9zdFNvdXJjZXMgOj0gXAotICAgICQoY29tbW9uU291cmNlcykKLQotIyBGb3IgdGhlIGhvc3QKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX1NSQ19GSUxFUzo9ICQoaG9zdFNvdXJjZXMpCi0KLUxPQ0FMX01PRFVMRTo9IGxpYmFuZHJvaWRmdwotCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAotCi1MT0NBTF9DRkxBR1MgKz0gLURTVEFUSUNfQU5EUk9JREZXX0ZPUl9UT09MUwotCi1MT0NBTF9DX0lOQ0xVREVTIDo9IFwKLQlleHRlcm5hbC96bGliCi0KLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGlibG9nIGxpYnppcGFyY2hpdmUtaG9zdCBsaWJ1dGlscwotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9TVEFUSUNfTElCUkFSWSkKLQotCi0jIEZvciB0aGUgZGV2aWNlCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVM6PSAkKGRldmljZVNvdXJjZXMpCi0KLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAotCWxpYmJpbmRlciBcCi0JbGlibG9nIFwKLQlsaWJjdXRpbHMgXAotCWxpYnV0aWxzIFwKLQlsaWJ6Ci0KLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliemlwYXJjaGl2ZQotCi1MT0NBTF9DX0lOQ0xVREVTIDo9IFwKLSAgICBleHRlcm5hbC9pY3U0Yy9jb21tb24gXAotICAgIGV4dGVybmFsL3psaWIgXAotICAgIHN5c3RlbS9jb3JlL2luY2x1ZGUKLQotTE9DQUxfTU9EVUxFOj0gbGliYW5kcm9pZGZ3Ci0KLUxPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCi0KLWluY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKLQotCi0jIEluY2x1ZGUgc3ViZGlyZWN0b3J5IG1ha2VmaWxlcwotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotIyBJZiB3ZSdyZSBidWlsZGluZyB3aXRoIE9ORV9TSE9UX01BS0VGSUxFIChtbSwgbW1tKSwgdGhlbiB3aGF0IHRoZSBmcmFtZXdvcmsKLSMgdGVhbSByZWFsbHkgd2FudHMgaXMgdG8gYnVpbGQgdGhlIHN0dWZmIGRlZmluZWQgYnkgdGhpcyBtYWtlZmlsZS4KLWlmZXEgKCwkKE9ORV9TSE9UX01BS0VGSUxFKSkKLWluY2x1ZGUgJChjYWxsIGZpcnN0LW1ha2VmaWxlcy11bmRlciwkKExPQ0FMX1BBVEgpKQotZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvYW5kcm9pZGZ3L0Fzc2V0LmNwcCBiL2xpYnMvYW5kcm9pZGZ3L0Fzc2V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U2Y2MzOC4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9Bc3NldC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vCi0vLyBQcm92aWRlIGFjY2VzcyB0byBhIHJlYWQtb25seSBhc3NldC4KLS8vCi0KLSNkZWZpbmUgTE9HX1RBRyAiYXNzZXQiCi0vLyNkZWZpbmUgTkRFQlVHIDAKLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9Bc3NldC5oPgotI2luY2x1ZGUgPGFuZHJvaWRmdy9TdHJlYW1pbmdaaXBJbmZsYXRlci5oPgotI2luY2x1ZGUgPGFuZHJvaWRmdy9aaXBGaWxlUk8uaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvWmlwVXRpbHMuaD4KLSNpbmNsdWRlIDx1dGlscy9BdG9taWMuaD4KLSNpbmNsdWRlIDx1dGlscy9GaWxlTWFwLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPG1lbW9yeS5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi0jaWZuZGVmIE9fQklOQVJZCi0jIGRlZmluZSBPX0JJTkFSWSAwCi0jZW5kaWYKLQotc3RhdGljIE11dGV4IGdBc3NldExvY2s7Ci1zdGF0aWMgaW50MzJfdCBnQ291bnQgPSAwOwotc3RhdGljIEFzc2V0KiBnSGVhZCA9IE5VTEw7Ci1zdGF0aWMgQXNzZXQqIGdUYWlsID0gTlVMTDsKLQotaW50MzJfdCBBc3NldDo6Z2V0R2xvYmFsQ291bnQoKQotewotICAgIEF1dG9NdXRleCBfbChnQXNzZXRMb2NrKTsKLSAgICByZXR1cm4gZ0NvdW50OwotfQotCi1TdHJpbmc4IEFzc2V0OjpnZXRBc3NldEFsbG9jYXRpb25zKCkKLXsKLSAgICBBdXRvTXV0ZXggX2woZ0Fzc2V0TG9jayk7Ci0gICAgU3RyaW5nOCByZXM7Ci0gICAgQXNzZXQqIGN1ciA9IGdIZWFkOwotICAgIHdoaWxlIChjdXIgIT0gTlVMTCkgewotICAgICAgICBpZiAoY3VyLT5pc0FsbG9jYXRlZCgpKSB7Ci0gICAgICAgICAgICByZXMuYXBwZW5kKCIgICAgIik7Ci0gICAgICAgICAgICByZXMuYXBwZW5kKGN1ci0+Z2V0QXNzZXRTb3VyY2UoKSk7Ci0gICAgICAgICAgICBvZmY2NF90IHNpemUgPSAoY3VyLT5nZXRMZW5ndGgoKSs1MTIpLzEwMjQ7Ci0gICAgICAgICAgICBjaGFyIGJ1Zls2NF07Ci0gICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIjogJWRLXG4iLCAoaW50KXNpemUpOwotICAgICAgICAgICAgcmVzLmFwcGVuZChidWYpOwotICAgICAgICB9Ci0gICAgICAgIGN1ciA9IGN1ci0+bU5leHQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXM7Ci19Ci0KLUFzc2V0OjpBc3NldCh2b2lkKQotICAgIDogbUFjY2Vzc01vZGUoQUNDRVNTX1VOS05PV04pCi17Ci0gICAgQXV0b011dGV4IF9sKGdBc3NldExvY2spOwotICAgIGdDb3VudCsrOwotICAgIG1OZXh0ID0gbVByZXYgPSBOVUxMOwotICAgIGlmIChnVGFpbCA9PSBOVUxMKSB7Ci0gICAgICAgIGdIZWFkID0gZ1RhaWwgPSB0aGlzOwotICAJfSBlbHNlIHsKLSAgCSAgICBtUHJldiA9IGdUYWlsOwotICAJICAgIGdUYWlsLT5tTmV4dCA9IHRoaXM7Ci0gIAkgICAgZ1RhaWwgPSB0aGlzOwotICAJfQotICAgIC8vQUxPR0koIkNyZWF0aW5nIEFzc2V0ICVwICMlZFxuIiwgdGhpcywgZ0NvdW50KTsKLX0KLQotQXNzZXQ6On5Bc3NldCh2b2lkKQotewotICAgIEF1dG9NdXRleCBfbChnQXNzZXRMb2NrKTsKLQlnQ291bnQtLTsKLSAgICBpZiAoZ0hlYWQgPT0gdGhpcykgewotICAgICAgICBnSGVhZCA9IG1OZXh0OwotICAgIH0KLSAgICBpZiAoZ1RhaWwgPT0gdGhpcykgewotICAgICAgICBnVGFpbCA9IG1QcmV2OwotICAgIH0KLSAgICBpZiAobU5leHQgIT0gTlVMTCkgewotICAgICAgICBtTmV4dC0+bVByZXYgPSBtUHJldjsKLSAgICB9Ci0gICAgaWYgKG1QcmV2ICE9IE5VTEwpIHsKLSAgICAgICAgbVByZXYtPm1OZXh0ID0gbU5leHQ7Ci0gICAgfQotICAgIG1OZXh0ID0gbVByZXYgPSBOVUxMOwotICAgIC8vQUxPR0koIkRlc3Ryb3lpbmcgQXNzZXQgaW4gJXAgIyVkXG4iLCB0aGlzLCBnQ291bnQpOwotfQotCi0vKgotICogQ3JlYXRlIGEgbmV3IEFzc2V0IGZyb20gYSBmaWxlIG9uIGRpc2suICBUaGVyZSBpcyBhIGZhaXIgY2hhbmNlIHRoYXQKLSAqIHRoZSBmaWxlIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3QuCi0gKgotICogV2UgY2FuIHVzZSAibW9kZSIgdG8gZGVjaWRlIGhvdyB3ZSB3YW50IHRvIGdvIGFib3V0IGl0LgotICovCi0vKnN0YXRpYyovIEFzc2V0KiBBc3NldDo6Y3JlYXRlRnJvbUZpbGUoY29uc3QgY2hhciogZmlsZU5hbWUsIEFjY2Vzc01vZGUgbW9kZSkKLXsKLSAgICBfRmlsZUFzc2V0KiBwQXNzZXQ7Ci0gICAgc3RhdHVzX3QgcmVzdWx0OwotICAgIG9mZjY0X3QgbGVuZ3RoOwotICAgIGludCBmZDsKLQotICAgIGZkID0gb3BlbihmaWxlTmFtZSwgT19SRE9OTFkgfCBPX0JJTkFSWSk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKgotICAgICAqIFVuZGVyIExpbnV4LCB0aGUgbHNlZWsgZmFpbHMgaWYgd2UgYWN0dWFsbHkgb3BlbmVkIGEgZGlyZWN0b3J5LiAgVG8KLSAgICAgKiBiZSBjb3JyZWN0IHdlIHNob3VsZCB0ZXN0IHRoZSBmaWxlIHR5cGUgZXhwbGljaXRseSwgYnV0IHNpbmNlIHdlCi0gICAgICogYWx3YXlzIG9wZW4gdGhpbmdzIHJlYWQtb25seSBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIsIHNvIHRoZXJlJ3MKLSAgICAgKiBubyB2YWx1ZSBpbiBpbmN1cnJpbmcgdGhlIGV4dHJhIG92ZXJoZWFkIG9mIGFuIGZzdGF0KCkgY2FsbC4KLSAgICAgKi8KLSAgICAvLyBUT0RPKGtyb290KTogcmVwbGFjZSB0aGlzIHdpdGggZnN0YXQgZGVzcGl0ZSB0aGUgcGxlYSBhYm92ZS4KLSNpZiAxCi0gICAgbGVuZ3RoID0gbHNlZWs2NChmZCwgMCwgU0VFS19FTkQpOwotICAgIGlmIChsZW5ndGggPCAwKSB7Ci0gICAgICAgIDo6Y2xvc2UoZmQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgKHZvaWQpIGxzZWVrNjQoZmQsIDAsIFNFRUtfU0VUKTsKLSNlbHNlCi0gICAgc3RydWN0IHN0YXQgc3Q7Ci0gICAgaWYgKGZzdGF0KGZkLCAmc3QpIDwgMCkgewotICAgICAgICA6OmNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFTX0lTUkVHKHN0LnN0X21vZGUpKSB7Ci0gICAgICAgIDo6Y2xvc2UoZmQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHBBc3NldCA9IG5ldyBfRmlsZUFzc2V0OwotICAgIHJlc3VsdCA9IHBBc3NldC0+b3BlbkNodW5rKGZpbGVOYW1lLCBmZCwgMCwgbGVuZ3RoKTsKLSAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGRlbGV0ZSBwQXNzZXQ7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHBBc3NldC0+bUFjY2Vzc01vZGUgPSBtb2RlOwotICAgIHJldHVybiBwQXNzZXQ7Ci19Ci0KLQotLyoKLSAqIENyZWF0ZSBhIG5ldyBBc3NldCBmcm9tIGEgY29tcHJlc3NlZCBmaWxlIG9uIGRpc2suICBUaGVyZSBpcyBhIGZhaXIgY2hhbmNlCi0gKiB0aGF0IHRoZSBmaWxlIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3QuCi0gKgotICogV2UgY3VycmVudGx5IHN1cHBvcnQgZ3ppcCBmaWxlcy4gIFdlIG1pZ2h0IHdhbnQgdG8gaGFuZGxlIC5iejIgc29tZWRheS4KLSAqLwotLypzdGF0aWMqLyBBc3NldCogQXNzZXQ6OmNyZWF0ZUZyb21Db21wcmVzc2VkRmlsZShjb25zdCBjaGFyKiBmaWxlTmFtZSwKLSAgICBBY2Nlc3NNb2RlIG1vZGUpCi17Ci0gICAgX0NvbXByZXNzZWRBc3NldCogcEFzc2V0OwotICAgIHN0YXR1c190IHJlc3VsdDsKLSAgICBvZmY2NF90IGZpbGVMZW47Ci0gICAgYm9vbCBzY2FuUmVzdWx0OwotICAgIGxvbmcgb2Zmc2V0OwotICAgIGludCBtZXRob2Q7Ci0gICAgbG9uZyB1bmNvbXByZXNzZWRMZW4sIGNvbXByZXNzZWRMZW47Ci0gICAgaW50IGZkOwotCi0gICAgZmQgPSBvcGVuKGZpbGVOYW1lLCBPX1JET05MWSB8IE9fQklOQVJZKTsKLSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGZpbGVMZW4gPSBsc2VlayhmZCwgMCwgU0VFS19FTkQpOwotICAgIGlmIChmaWxlTGVuIDwgMCkgewotICAgICAgICA6OmNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgICh2b2lkKSBsc2VlayhmZCwgMCwgU0VFS19TRVQpOwotCi0gICAgLyogd2FudCBidWZmZXJlZCBJL08gZm9yIHRoZSBmaWxlIHNjYW47IG11c3QgZHVwIHNvIGZjbG9zZSgpIGlzIHNhZmUgKi8KLSAgICBGSUxFKiBmcCA9IGZkb3BlbihkdXAoZmQpLCAicmIiKTsKLSAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICA6OmNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbG9uZyBjcmMzMjsKLSAgICBzY2FuUmVzdWx0ID0gWmlwVXRpbHM6OmV4YW1pbmVHemlwKGZwLCAmbWV0aG9kLCAmdW5jb21wcmVzc2VkTGVuLAotICAgICAgICAgICAgICAgICAgICAmY29tcHJlc3NlZExlbiwgJmNyYzMyKTsKLSAgICBvZmZzZXQgPSBmdGVsbChmcCk7Ci0gICAgZmNsb3NlKGZwKTsKLSAgICBpZiAoIXNjYW5SZXN1bHQpIHsKLSAgICAgICAgQUxPR0QoIkZpbGUgJyVzJyBpcyBub3QgaW4gZ3ppcCBmb3JtYXRcbiIsIGZpbGVOYW1lKTsKLSAgICAgICAgOjpjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHBBc3NldCA9IG5ldyBfQ29tcHJlc3NlZEFzc2V0OwotICAgIHJlc3VsdCA9IHBBc3NldC0+b3BlbkNodW5rKGZkLCBvZmZzZXQsIG1ldGhvZCwgdW5jb21wcmVzc2VkTGVuLAotICAgICAgICAgICAgICAgIGNvbXByZXNzZWRMZW4pOwotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgZGVsZXRlIHBBc3NldDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcEFzc2V0LT5tQWNjZXNzTW9kZSA9IG1vZGU7Ci0gICAgcmV0dXJuIHBBc3NldDsKLX0KLQotCi0jaWYgMAotLyoKLSAqIENyZWF0ZSBhIG5ldyBBc3NldCBmcm9tIHBhcnQgb2YgYW4gb3BlbiBmaWxlLgotICovCi0vKnN0YXRpYyovIEFzc2V0KiBBc3NldDo6Y3JlYXRlRnJvbUZpbGVTZWdtZW50KGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsCi0gICAgc2l6ZV90IGxlbmd0aCwgQWNjZXNzTW9kZSBtb2RlKQotewotICAgIF9GaWxlQXNzZXQqIHBBc3NldDsKLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0KLSAgICBwQXNzZXQgPSBuZXcgX0ZpbGVBc3NldDsKLSAgICByZXN1bHQgPSBwQXNzZXQtPm9wZW5DaHVuayhOVUxMLCBmZCwgb2Zmc2V0LCBsZW5ndGgpOwotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcEFzc2V0LT5tQWNjZXNzTW9kZSA9IG1vZGU7Ci0gICAgcmV0dXJuIHBBc3NldDsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIG5ldyBBc3NldCBmcm9tIGNvbXByZXNzZWQgZGF0YSBpbiBhbiBvcGVuIGZpbGUuCi0gKi8KLS8qc3RhdGljKi8gQXNzZXQqIEFzc2V0OjpjcmVhdGVGcm9tQ29tcHJlc3NlZERhdGEoaW50IGZkLCBvZmY2NF90IG9mZnNldCwKLSAgICBpbnQgY29tcHJlc3Npb25NZXRob2QsIHNpemVfdCB1bmNvbXByZXNzZWRMZW4sIHNpemVfdCBjb21wcmVzc2VkTGVuLAotICAgIEFjY2Vzc01vZGUgbW9kZSkKLXsKLSAgICBfQ29tcHJlc3NlZEFzc2V0KiBwQXNzZXQ7Ci0gICAgc3RhdHVzX3QgcmVzdWx0OwotCi0gICAgcEFzc2V0ID0gbmV3IF9Db21wcmVzc2VkQXNzZXQ7Ci0gICAgcmVzdWx0ID0gcEFzc2V0LT5vcGVuQ2h1bmsoZmQsIG9mZnNldCwgY29tcHJlc3Npb25NZXRob2QsCi0gICAgICAgICAgICAgICAgdW5jb21wcmVzc2VkTGVuLCBjb21wcmVzc2VkTGVuKTsKLSAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHBBc3NldC0+bUFjY2Vzc01vZGUgPSBtb2RlOwotICAgIHJldHVybiBwQXNzZXQ7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIENyZWF0ZSBhIG5ldyBBc3NldCBmcm9tIGEgbWVtb3J5IG1hcHBpbmcuCi0gKi8KLS8qc3RhdGljKi8gQXNzZXQqIEFzc2V0OjpjcmVhdGVGcm9tVW5jb21wcmVzc2VkTWFwKEZpbGVNYXAqIGRhdGFNYXAsCi0gICAgQWNjZXNzTW9kZSBtb2RlKQotewotICAgIF9GaWxlQXNzZXQqIHBBc3NldDsKLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0KLSAgICBwQXNzZXQgPSBuZXcgX0ZpbGVBc3NldDsKLSAgICByZXN1bHQgPSBwQXNzZXQtPm9wZW5DaHVuayhkYXRhTWFwKTsKLSAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHBBc3NldC0+bUFjY2Vzc01vZGUgPSBtb2RlOwotICAgIHJldHVybiBwQXNzZXQ7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSBuZXcgQXNzZXQgZnJvbSBjb21wcmVzc2VkIGRhdGEgaW4gYSBtZW1vcnkgbWFwcGluZy4KLSAqLwotLypzdGF0aWMqLyBBc3NldCogQXNzZXQ6OmNyZWF0ZUZyb21Db21wcmVzc2VkTWFwKEZpbGVNYXAqIGRhdGFNYXAsCi0gICAgaW50IG1ldGhvZCwgc2l6ZV90IHVuY29tcHJlc3NlZExlbiwgQWNjZXNzTW9kZSBtb2RlKQotewotICAgIF9Db21wcmVzc2VkQXNzZXQqIHBBc3NldDsKLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0KLSAgICBwQXNzZXQgPSBuZXcgX0NvbXByZXNzZWRBc3NldDsKLSAgICByZXN1bHQgPSBwQXNzZXQtPm9wZW5DaHVuayhkYXRhTWFwLCBtZXRob2QsIHVuY29tcHJlc3NlZExlbik7Ci0gICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBwQXNzZXQtPm1BY2Nlc3NNb2RlID0gbW9kZTsKLSAgICByZXR1cm4gcEFzc2V0OwotfQotCi0KLS8qCi0gKiBEbyBnZW5lcmljIHNlZWsoKSBob3VzZWtlZXBpbmcuICBQYXNzIGluIHRoZSBvZmZzZXQvd2hlbmNlIHZhbHVlcyBmcm9tCi0gKiB0aGUgc2VlayByZXF1ZXN0LCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IGNodW5rIG9mZnNldCBhbmQgdGhlIGNodW5rCi0gKiBsZW5ndGguCi0gKgotICogUmV0dXJucyB0aGUgbmV3IGNodW5rIG9mZnNldCwgb3IgLTEgaWYgdGhlIHNlZWsgaXMgaWxsZWdhbC4KLSAqLwotb2ZmNjRfdCBBc3NldDo6aGFuZGxlU2VlayhvZmY2NF90IG9mZnNldCwgaW50IHdoZW5jZSwgb2ZmNjRfdCBjdXJQb3NuLCBvZmY2NF90IG1heFBvc24pCi17Ci0gICAgb2ZmNjRfdCBuZXdPZmZzZXQ7Ci0KLSAgICBzd2l0Y2ggKHdoZW5jZSkgewotICAgIGNhc2UgU0VFS19TRVQ6Ci0gICAgICAgIG5ld09mZnNldCA9IG9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUVLX0NVUjoKLSAgICAgICAgbmV3T2Zmc2V0ID0gY3VyUG9zbiArIG9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUVLX0VORDoKLSAgICAgICAgbmV3T2Zmc2V0ID0gbWF4UG9zbiArIG9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQUxPR1coInVuZXhwZWN0ZWQgd2hlbmNlICVkXG4iLCB3aGVuY2UpOwotICAgICAgICAvLyB0aGlzIHdhcyBoYXBwZW5pbmcgZHVlIHRvIGFuIG9mZjY0X3Qgc2l6ZSBtaXNtYXRjaAotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICByZXR1cm4gKG9mZjY0X3QpIC0xOwotICAgIH0KLQotICAgIGlmIChuZXdPZmZzZXQgPCAwIHx8IG5ld09mZnNldCA+IG1heFBvc24pIHsKLSAgICAgICAgQUxPR1coInNlZWsgb3V0IG9mIHJhbmdlOiB3YW50ICVsZCwgZW5kPSVsZFxuIiwKLSAgICAgICAgICAgIChsb25nKSBuZXdPZmZzZXQsIChsb25nKSBtYXhQb3NuKTsKLSAgICAgICAgcmV0dXJuIChvZmY2NF90KSAtMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3T2Zmc2V0OwotfQotCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgX0ZpbGVBc3NldAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyoKLSAqIENvbnN0cnVjdG9yLgotICovCi1fRmlsZUFzc2V0OjpfRmlsZUFzc2V0KHZvaWQpCi0gICAgOiBtU3RhcnQoMCksIG1MZW5ndGgoMCksIG1PZmZzZXQoMCksIG1GcChOVUxMKSwgbUZpbGVOYW1lKE5VTEwpLCBtTWFwKE5VTEwpLCBtQnVmKE5VTEwpCi17Ci19Ci0KLS8qCi0gKiBEZXN0cnVjdG9yLiAgUmVsZWFzZSByZXNvdXJjZXMuCi0gKi8KLV9GaWxlQXNzZXQ6On5fRmlsZUFzc2V0KHZvaWQpCi17Ci0gICAgY2xvc2UoKTsKLX0KLQotLyoKLSAqIE9wZXJhdGUgb24gYSBjaHVuayBvZiBhbiB1bmNvbXByZXNzZWQgZmlsZS4KLSAqCi0gKiBaZXJvLWxlbmd0aCBjaHVua3MgYXJlIGFsbG93ZWQuCi0gKi8KLXN0YXR1c190IF9GaWxlQXNzZXQ6Om9wZW5DaHVuayhjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IGZkLCBvZmY2NF90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBhc3NlcnQobUZwID09IE5VTEwpOyAgICAvLyBubyByZW9wZW4KLSAgICBhc3NlcnQobU1hcCA9PSBOVUxMKTsKLSAgICBhc3NlcnQoZmQgPj0gMCk7Ci0gICAgYXNzZXJ0KG9mZnNldCA+PSAwKTsKLQotICAgIC8qCi0gICAgICogU2VlayB0byBlbmQgdG8gZ2V0IGZpbGUgbGVuZ3RoLgotICAgICAqLwotICAgIG9mZjY0X3QgZmlsZUxlbmd0aDsKLSAgICBmaWxlTGVuZ3RoID0gbHNlZWs2NChmZCwgMCwgU0VFS19FTkQpOwotICAgIGlmIChmaWxlTGVuZ3RoID09IChvZmY2NF90KSAtMSkgewotICAgICAgICAvLyBwcm9iYWJseSBhIGJhZCBmaWxlIGRlc2NyaXB0b3IKLSAgICAgICAgQUxPR0QoImZhaWxlZCBsc2VlayAoZXJybm89JWQpXG4iLCBlcnJubyk7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIGlmICgob2ZmNjRfdCkgKG9mZnNldCArIGxlbmd0aCkgPiBmaWxlTGVuZ3RoKSB7Ci0gICAgICAgIEFMT0dEKCJzdGFydCAoJWxkKSArIGxlbiAoJWxkKSA+IGVuZCAoJWxkKVxuIiwKLSAgICAgICAgICAgIChsb25nKSBvZmZzZXQsIChsb25nKSBsZW5ndGgsIChsb25nKSBmaWxlTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIEJBRF9JTkRFWDsKLSAgICB9Ci0KLSAgICAvKiBhZnRlciBmZG9wZW4sIHRoZSBmZCB3aWxsIGJlIGNsb3NlZCBvbiBmY2xvc2UoKSAqLwotICAgIG1GcCA9IGZkb3BlbihmZCwgInJiIik7Ci0gICAgaWYgKG1GcCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLQotICAgIG1TdGFydCA9IG9mZnNldDsKLSAgICBtTGVuZ3RoID0gbGVuZ3RoOwotICAgIGFzc2VydChtT2Zmc2V0ID09IDApOwotCi0gICAgLyogc2VlayB0aGUgRklMRSogdG8gdGhlIHN0YXJ0IG9mIGNodW5rICovCi0gICAgaWYgKGZzZWVrKG1GcCwgbVN0YXJ0LCBTRUVLX1NFVCkgIT0gMCkgewotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgIH0KLQotICAgIG1GaWxlTmFtZSA9IGZpbGVOYW1lICE9IE5VTEwgPyBzdHJkdXAoZmlsZU5hbWUpIDogTlVMTDsKLSAgICAKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgdGhlIGNodW5rIGZyb20gdGhlIG1hcC4KLSAqLwotc3RhdHVzX3QgX0ZpbGVBc3NldDo6b3BlbkNodW5rKEZpbGVNYXAqIGRhdGFNYXApCi17Ci0gICAgYXNzZXJ0KG1GcCA9PSBOVUxMKTsgICAgLy8gbm8gcmVvcGVuCi0gICAgYXNzZXJ0KG1NYXAgPT0gTlVMTCk7Ci0gICAgYXNzZXJ0KGRhdGFNYXAgIT0gTlVMTCk7Ci0KLSAgICBtTWFwID0gZGF0YU1hcDsKLSAgICBtU3RhcnQgPSAtMTsgICAgICAgICAgICAvLyBub3QgdXNlZAotICAgIG1MZW5ndGggPSBkYXRhTWFwLT5nZXREYXRhTGVuZ3RoKCk7Ci0gICAgYXNzZXJ0KG1PZmZzZXQgPT0gMCk7Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLS8qCi0gKiBSZWFkIGEgY2h1bmsgb2YgZGF0YS4KLSAqLwotc3NpemVfdCBfRmlsZUFzc2V0OjpyZWFkKHZvaWQqIGJ1Ziwgc2l6ZV90IGNvdW50KQotewotICAgIHNpemVfdCBtYXhMZW47Ci0gICAgc2l6ZV90IGFjdHVhbDsKLQotICAgIGFzc2VydChtT2Zmc2V0ID49IDAgJiYgbU9mZnNldCA8PSBtTGVuZ3RoKTsKLQotICAgIGlmIChnZXRBY2Nlc3NNb2RlKCkgPT0gQUNDRVNTX0JVRkZFUikgewotICAgICAgICAvKgotICAgICAgICAgKiBPbiBmaXJzdCBhY2Nlc3MsIHJlYWQgb3IgbWFwIHRoZSBlbnRpcmUgZmlsZS4gIFRoZSBjYWxsZXIgaGFzCi0gICAgICAgICAqIHJlcXVlc3RlZCBidWZmZXIgYWNjZXNzLCBlaXRoZXIgYmVjYXVzZSB0aGV5J3JlIGdvaW5nIHRvIGJlCi0gICAgICAgICAqIHVzaW5nIHRoZSBidWZmZXIgb3IgYmVjYXVzZSB3aGF0IHRoZXkncmUgZG9pbmcgaGFzIGFwcHJvcHJpYXRlCi0gICAgICAgICAqIHBlcmZvcm1hbmNlIG5lZWRzIGFuZCBhY2Nlc3MgcGF0dGVybnMuCi0gICAgICAgICAqLwotICAgICAgICBpZiAobUJ1ZiA9PSBOVUxMKQotICAgICAgICAgICAgZ2V0QnVmZmVyKGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvKiBhZGp1c3QgY291bnQgaWYgd2UncmUgbmVhciBFT0YgKi8KLSAgICBtYXhMZW4gPSBtTGVuZ3RoIC0gbU9mZnNldDsKLSAgICBpZiAoY291bnQgPiBtYXhMZW4pCi0gICAgICAgIGNvdW50ID0gbWF4TGVuOwotCi0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobU1hcCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIGNvcHkgZnJvbSBtYXBwZWQgYXJlYSAqLwotICAgICAgICAvL3ByaW50ZigibWFwIHJlYWRcbiIpOwotICAgICAgICBtZW1jcHkoYnVmLCAoY2hhciopbU1hcC0+Z2V0RGF0YVB0cigpICsgbU9mZnNldCwgY291bnQpOwotICAgICAgICBhY3R1YWwgPSBjb3VudDsKLSAgICB9IGVsc2UgaWYgKG1CdWYgIT0gTlVMTCkgewotICAgICAgICAvKiBjb3B5IGZyb20gYnVmZmVyICovCi0gICAgICAgIC8vcHJpbnRmKCJidWYgcmVhZFxuIik7Ci0gICAgICAgIG1lbWNweShidWYsIChjaGFyKiltQnVmICsgbU9mZnNldCwgY291bnQpOwotICAgICAgICBhY3R1YWwgPSBjb3VudDsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiByZWFkIGZyb20gdGhlIGZpbGUgKi8KLSAgICAgICAgLy9wcmludGYoImZpbGUgcmVhZFxuIik7Ci0gICAgICAgIGlmIChmdGVsbChtRnApICE9IG1TdGFydCArIG1PZmZzZXQpIHsKLSAgICAgICAgICAgIEFMT0dFKCJIb3NlZDogJWxkICE9ICVsZCslbGRcbiIsCi0gICAgICAgICAgICAgICAgZnRlbGwobUZwKSwgKGxvbmcpIG1TdGFydCwgKGxvbmcpIG1PZmZzZXQpOwotICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgcmV0dXJucyAwIG9uIGVycm9yIG9yIGVvZi4gIFdlIG5lZWQgdG8gdXNlIGZlcnJvcigpIG9yIGZlb2YoKQotICAgICAgICAgKiB0byB0ZWxsIHRoZSBkaWZmZXJlbmNlLCBidXQgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgdGhvc2Ugb24gdGhlCi0gICAgICAgICAqIGRldmljZS4gIEhvd2V2ZXIsIHdlIGtub3cgaG93IG11Y2ggZGF0YSBpcyAqc3VwcG9zZWQqIHRvIGJlIGluIHRoZQotICAgICAgICAgKiBmaWxlLCBzbyBpZiB3ZSBkb24ndCByZWFkIHRoZSBmdWxsIGFtb3VudCB3ZSBrbm93IHNvbWV0aGluZyBpcwotICAgICAgICAgKiBob3NlZC4KLSAgICAgICAgICovCi0gICAgICAgIGFjdHVhbCA9IGZyZWFkKGJ1ZiwgMSwgY291bnQsIG1GcCk7Ci0gICAgICAgIGlmIChhY3R1YWwgPT0gMCkgICAgICAgIC8vIHNvbWV0aGluZyBmYWlsZWQgLS0gSS9PIGVycm9yPwotICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgIGFzc2VydChhY3R1YWwgPT0gY291bnQpOwotICAgIH0KLQotICAgIG1PZmZzZXQgKz0gYWN0dWFsOwotICAgIHJldHVybiBhY3R1YWw7Ci19Ci0KLS8qCi0gKiBTZWVrIHRvIGEgbmV3IHBvc2l0aW9uLgotICovCi1vZmY2NF90IF9GaWxlQXNzZXQ6OnNlZWsob2ZmNjRfdCBvZmZzZXQsIGludCB3aGVuY2UpCi17Ci0gICAgb2ZmNjRfdCBuZXdQb3NuOwotICAgIG9mZjY0X3QgYWN0dWFsT2Zmc2V0OwotCi0gICAgLy8gY29tcHV0ZSBuZXcgcG9zaXRpb24gd2l0aGluIGNodW5rCi0gICAgbmV3UG9zbiA9IGhhbmRsZVNlZWsob2Zmc2V0LCB3aGVuY2UsIG1PZmZzZXQsIG1MZW5ndGgpOwotICAgIGlmIChuZXdQb3NuID09IChvZmY2NF90KSAtMSkKLSAgICAgICAgcmV0dXJuIG5ld1Bvc247Ci0KLSAgICBhY3R1YWxPZmZzZXQgPSBtU3RhcnQgKyBuZXdQb3NuOwotCi0gICAgaWYgKG1GcCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChmc2VlayhtRnAsIChsb25nKSBhY3R1YWxPZmZzZXQsIFNFRUtfU0VUKSAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIChvZmY2NF90KSAtMTsKLSAgICB9Ci0KLSAgICBtT2Zmc2V0ID0gYWN0dWFsT2Zmc2V0IC0gbVN0YXJ0OwotICAgIHJldHVybiBtT2Zmc2V0OwotfQotCi0vKgotICogQ2xvc2UgdGhlIGFzc2V0LgotICovCi12b2lkIF9GaWxlQXNzZXQ6OmNsb3NlKHZvaWQpCi17Ci0gICAgaWYgKG1NYXAgIT0gTlVMTCkgewotICAgICAgICBtTWFwLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1NYXAgPSBOVUxMOwotICAgIH0KLSAgICBpZiAobUJ1ZiAhPSBOVUxMKSB7Ci0gICAgICAgIGRlbGV0ZVtdIG1CdWY7Ci0gICAgICAgIG1CdWYgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRmlsZU5hbWUgIT0gTlVMTCkgewotICAgICAgICBmcmVlKG1GaWxlTmFtZSk7Ci0gICAgICAgIG1GaWxlTmFtZSA9IE5VTEw7Ci0gICAgfQotICAgIAotICAgIGlmIChtRnAgIT0gTlVMTCkgewotICAgICAgICAvLyBjYW4gb25seSBiZSBOVUxMIHdoZW4gY2FsbGVkIGZyb20gZGVzdHJ1Y3RvcgotICAgICAgICAvLyAob3RoZXJ3aXNlIHdlIHdvdWxkIG5ldmVyIHJldHVybiB0aGlzIG9iamVjdCkKLSAgICAgICAgZmNsb3NlKG1GcCk7Ci0gICAgICAgIG1GcCA9IE5VTEw7Ci0gICAgfQotfQotCi0vKgotICogUmV0dXJuIGEgcmVhZC1vbmx5IHBvaW50ZXIgdG8gYSBidWZmZXIuCi0gKgotICogV2UgY2FuIGVpdGhlciByZWFkIHRoZSB3aG9sZSB0aGluZyBpbiBvciBtYXAgdGhlIHJlbGV2YW50IHBpZWNlIG9mCi0gKiB0aGUgc291cmNlIGZpbGUuICBJZGVhbGx5IGEgbWFwIHdvdWxkIGJlIGVzdGFibGlzaGVkIGF0IGEgaGlnaGVyCi0gKiBsZXZlbCBhbmQgd2UnZCBiZSB1c2luZyBhIGRpZmZlcmVudCBvYmplY3QsIGJ1dCB3ZSBkaWRuJ3QsIHNvIHdlCi0gKiBkZWFsIHdpdGggaXQgaGVyZS4KLSAqLwotY29uc3Qgdm9pZCogX0ZpbGVBc3NldDo6Z2V0QnVmZmVyKGJvb2wgd29yZEFsaWduZWQpCi17Ci0gICAgLyogc3Vic2VxdWVudCByZXF1ZXN0cyBqdXN0IHVzZSB3aGF0IHdlIGRpZCBwcmV2aW91c2x5ICovCi0gICAgaWYgKG1CdWYgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIG1CdWY7Ci0gICAgaWYgKG1NYXAgIT0gTlVMTCkgewotICAgICAgICBpZiAoIXdvcmRBbGlnbmVkKSB7Ci0gICAgICAgICAgICByZXR1cm4gIG1NYXAtPmdldERhdGFQdHIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZW5zdXJlQWxpZ25tZW50KG1NYXApOwotICAgIH0KLQotICAgIGFzc2VydChtRnAgIT0gTlVMTCk7Ci0KLSAgICBpZiAobUxlbmd0aCA8IGtSZWFkVnNNYXBUaHJlc2hvbGQpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciogYnVmOwotICAgICAgICBsb25nIGFsbG9jTGVuOwotCi0gICAgICAgIC8qIHplcm8tbGVuZ3RoIGZpbGVzIGFyZSBhbGxvd2VkOyBub3Qgc3VyZSBhYm91dCB6ZXJvLWxlbiBhbGxvY3MgKi8KLSAgICAgICAgLyogKHdvcmtzIGZpbmUgd2l0aCBnY2MgKyB4ODZsaW51eCkgKi8KLSAgICAgICAgYWxsb2NMZW4gPSBtTGVuZ3RoOwotICAgICAgICBpZiAobUxlbmd0aCA9PSAwKQotICAgICAgICAgICAgYWxsb2NMZW4gPSAxOwotCi0gICAgICAgIGJ1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW2FsbG9jTGVuXTsKLSAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBBTE9HRSgiYWxsb2Mgb2YgJWxkIGJ5dGVzIGZhaWxlZFxuIiwgKGxvbmcpIGFsbG9jTGVuKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgQUxPR1YoIkFzc2V0ICVwIGFsbG9jYXRpbmcgYnVmZmVyIHNpemUgJWQgKHNtYWxsZXIgdGhhbiB0aHJlc2hvbGQpIiwgdGhpcywgKGludClhbGxvY0xlbik7Ci0gICAgICAgIGlmIChtTGVuZ3RoID4gMCkgewotICAgICAgICAgICAgbG9uZyBvbGRQb3NuID0gZnRlbGwobUZwKTsKLSAgICAgICAgICAgIGZzZWVrKG1GcCwgbVN0YXJ0LCBTRUVLX1NFVCk7Ci0gICAgICAgICAgICBpZiAoZnJlYWQoYnVmLCAxLCBtTGVuZ3RoLCBtRnApICE9IChzaXplX3QpIG1MZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBBTE9HRSgiZmFpbGVkIHJlYWRpbmcgJWxkIGJ5dGVzXG4iLCAobG9uZykgbUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlW10gYnVmOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnNlZWsobUZwLCBvbGRQb3NuLCBTRUVLX1NFVCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBTE9HVigiIGdldEJ1ZmZlcjogbG9hZGVkIGludG8gYnVmZmVyXG4iKTsKLQotICAgICAgICBtQnVmID0gYnVmOwotICAgICAgICByZXR1cm4gbUJ1ZjsKLSAgICB9IGVsc2UgewotICAgICAgICBGaWxlTWFwKiBtYXA7Ci0KLSAgICAgICAgbWFwID0gbmV3IEZpbGVNYXA7Ci0gICAgICAgIGlmICghbWFwLT5jcmVhdGUoTlVMTCwgZmlsZW5vKG1GcCksIG1TdGFydCwgbUxlbmd0aCwgdHJ1ZSkpIHsKLSAgICAgICAgICAgIG1hcC0+cmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBBTE9HVigiIGdldEJ1ZmZlcjogbWFwcGVkXG4iKTsKLQotICAgICAgICBtTWFwID0gbWFwOwotICAgICAgICBpZiAoIXdvcmRBbGlnbmVkKSB7Ci0gICAgICAgICAgICByZXR1cm4gIG1NYXAtPmdldERhdGFQdHIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZW5zdXJlQWxpZ25tZW50KG1NYXApOwotICAgIH0KLX0KLQotaW50IF9GaWxlQXNzZXQ6Om9wZW5GaWxlRGVzY3JpcHRvcihvZmY2NF90KiBvdXRTdGFydCwgb2ZmNjRfdCogb3V0TGVuZ3RoKSBjb25zdAotewotICAgIGlmIChtTWFwICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3QgY2hhciogZm5hbWUgPSBtTWFwLT5nZXRGaWxlTmFtZSgpOwotICAgICAgICBpZiAoZm5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgZm5hbWUgPSBtRmlsZU5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZuYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICAqb3V0U3RhcnQgPSBtTWFwLT5nZXREYXRhT2Zmc2V0KCk7Ci0gICAgICAgICpvdXRMZW5ndGggPSBtTWFwLT5nZXREYXRhTGVuZ3RoKCk7Ci0gICAgICAgIHJldHVybiBvcGVuKGZuYW1lLCBPX1JET05MWSB8IE9fQklOQVJZKTsKLSAgICB9Ci0gICAgaWYgKG1GaWxlTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgKm91dFN0YXJ0ID0gbVN0YXJ0OwotICAgICpvdXRMZW5ndGggPSBtTGVuZ3RoOwotICAgIHJldHVybiBvcGVuKG1GaWxlTmFtZSwgT19SRE9OTFkgfCBPX0JJTkFSWSk7Ci19Ci0KLWNvbnN0IHZvaWQqIF9GaWxlQXNzZXQ6OmVuc3VyZUFsaWdubWVudChGaWxlTWFwKiBtYXApCi17Ci0gICAgdm9pZCogZGF0YSA9IG1hcC0+Z2V0RGF0YVB0cigpOwotICAgIGlmICgoKChzaXplX3QpZGF0YSkmMHgzKSA9PSAwKSB7Ci0gICAgICAgIC8vIFdlIGNhbiByZXR1cm4gdGhpcyBkaXJlY3RseSBpZiBpdCBpcyBhbGlnbmVkIG9uIGEgd29yZAotICAgICAgICAvLyBib3VuZGFyeS4KLSAgICAgICAgQUxPR1YoIlJldHVybmluZyBhbGlnbmVkIEZpbGVBc3NldCAlcCAoJXMpLiIsIHRoaXMsCi0gICAgICAgICAgICAgICAgZ2V0QXNzZXRTb3VyY2UoKSk7Ci0gICAgICAgIHJldHVybiBkYXRhOwotICAgIH0KLSAgICAvLyBJZiBub3QgYWxpZ25lZCBvbiBhIHdvcmQgYm91bmRhcnksIHRoZW4gd2UgbmVlZCB0byBjb3B5IGl0IGludG8KLSAgICAvLyBvdXIgb3duIGJ1ZmZlci4KLSAgICBBTE9HVigiQ29weWluZyBGaWxlQXNzZXQgJXAgKCVzKSB0byBidWZmZXIgc2l6ZSAlZCB0byBtYWtlIGl0IGFsaWduZWQuIiwgdGhpcywKLSAgICAgICAgICAgIGdldEFzc2V0U291cmNlKCksIChpbnQpbUxlbmd0aCk7Ci0gICAgdW5zaWduZWQgY2hhciogYnVmID0gbmV3IHVuc2lnbmVkIGNoYXJbbUxlbmd0aF07Ci0gICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dFKCJhbGxvYyBvZiAlbGQgYnl0ZXMgZmFpbGVkXG4iLCAobG9uZykgbUxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBtZW1jcHkoYnVmLCBkYXRhLCBtTGVuZ3RoKTsKLSAgICBtQnVmID0gYnVmOwotICAgIHJldHVybiBidWY7Ci19Ci0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgX0NvbXByZXNzZWRBc3NldAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyoKLSAqIENvbnN0cnVjdG9yLgotICovCi1fQ29tcHJlc3NlZEFzc2V0OjpfQ29tcHJlc3NlZEFzc2V0KHZvaWQpCi0gICAgOiBtU3RhcnQoMCksIG1Db21wcmVzc2VkTGVuKDApLCBtVW5jb21wcmVzc2VkTGVuKDApLCBtT2Zmc2V0KDApLAotICAgICAgbU1hcChOVUxMKSwgbUZkKC0xKSwgbVppcEluZmxhdGVyKE5VTEwpLCBtQnVmKE5VTEwpCi17Ci19Ci0KLS8qCi0gKiBEZXN0cnVjdG9yLiAgUmVsZWFzZSByZXNvdXJjZXMuCi0gKi8KLV9Db21wcmVzc2VkQXNzZXQ6On5fQ29tcHJlc3NlZEFzc2V0KHZvaWQpCi17Ci0gICAgY2xvc2UoKTsKLX0KLQotLyoKLSAqIE9wZW4gYSBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEgaW5zaWRlIGEgZmlsZS4KLSAqCi0gKiBUaGlzIGN1cnJlbnRseSBqdXN0IHNldHMgdXAgc29tZSB2YWx1ZXMgYW5kIHJldHVybnMuICBPbiB0aGUgZmlyc3QKLSAqIHJlYWQsIHdlIGV4cGFuZCB0aGUgZW50aXJlIGZpbGUgaW50byBhIGJ1ZmZlciBhbmQgcmV0dXJuIGRhdGEgZnJvbSBpdC4KLSAqLwotc3RhdHVzX3QgX0NvbXByZXNzZWRBc3NldDo6b3BlbkNodW5rKGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsCi0gICAgaW50IGNvbXByZXNzaW9uTWV0aG9kLCBzaXplX3QgdW5jb21wcmVzc2VkTGVuLCBzaXplX3QgY29tcHJlc3NlZExlbikKLXsKLSAgICBhc3NlcnQobUZkIDwgMCk7ICAgICAgICAvLyBubyByZS1vcGVuCi0gICAgYXNzZXJ0KG1NYXAgPT0gTlVMTCk7Ci0gICAgYXNzZXJ0KGZkID49IDApOwotICAgIGFzc2VydChvZmZzZXQgPj0gMCk7Ci0gICAgYXNzZXJ0KGNvbXByZXNzZWRMZW4gPiAwKTsKLQotICAgIGlmIChjb21wcmVzc2lvbk1ldGhvZCAhPSBaaXBGaWxlUk86OmtDb21wcmVzc0RlZmxhdGVkKSB7Ci0gICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIG1TdGFydCA9IG9mZnNldDsKLSAgICBtQ29tcHJlc3NlZExlbiA9IGNvbXByZXNzZWRMZW47Ci0gICAgbVVuY29tcHJlc3NlZExlbiA9IHVuY29tcHJlc3NlZExlbjsKLSAgICBhc3NlcnQobU9mZnNldCA9PSAwKTsKLSAgICBtRmQgPSBmZDsKLSAgICBhc3NlcnQobUJ1ZiA9PSBOVUxMKTsKLQotICAgIGlmICh1bmNvbXByZXNzZWRMZW4gPiBTdHJlYW1pbmdaaXBJbmZsYXRlcjo6T1VUUFVUX0NIVU5LX1NJWkUpIHsKLSAgICAgICAgbVppcEluZmxhdGVyID0gbmV3IFN0cmVhbWluZ1ppcEluZmxhdGVyKG1GZCwgb2Zmc2V0LCB1bmNvbXByZXNzZWRMZW4sIGNvbXByZXNzZWRMZW4pOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIE9wZW4gYSBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEgaW4gYSBtYXBwZWQgcmVnaW9uLgotICoKLSAqIE5vdGhpbmcgaXMgZXhwYW5kZWQgdW50aWwgdGhlIGZpcnN0IHJlYWQgY2FsbC4KLSAqLwotc3RhdHVzX3QgX0NvbXByZXNzZWRBc3NldDo6b3BlbkNodW5rKEZpbGVNYXAqIGRhdGFNYXAsIGludCBjb21wcmVzc2lvbk1ldGhvZCwKLSAgICBzaXplX3QgdW5jb21wcmVzc2VkTGVuKQotewotICAgIGFzc2VydChtRmQgPCAwKTsgICAgICAgIC8vIG5vIHJlLW9wZW4KLSAgICBhc3NlcnQobU1hcCA9PSBOVUxMKTsKLSAgICBhc3NlcnQoZGF0YU1hcCAhPSBOVUxMKTsKLQotICAgIGlmIChjb21wcmVzc2lvbk1ldGhvZCAhPSBaaXBGaWxlUk86OmtDb21wcmVzc0RlZmxhdGVkKSB7Ci0gICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIG1NYXAgPSBkYXRhTWFwOwotICAgIG1TdGFydCA9IC0xOyAgICAgICAgLy8gbm90IHVzZWQKLSAgICBtQ29tcHJlc3NlZExlbiA9IGRhdGFNYXAtPmdldERhdGFMZW5ndGgoKTsKLSAgICBtVW5jb21wcmVzc2VkTGVuID0gdW5jb21wcmVzc2VkTGVuOwotICAgIGFzc2VydChtT2Zmc2V0ID09IDApOwotCi0gICAgaWYgKHVuY29tcHJlc3NlZExlbiA+IFN0cmVhbWluZ1ppcEluZmxhdGVyOjpPVVRQVVRfQ0hVTktfU0laRSkgewotICAgICAgICBtWmlwSW5mbGF0ZXIgPSBuZXcgU3RyZWFtaW5nWmlwSW5mbGF0ZXIoZGF0YU1hcCwgdW5jb21wcmVzc2VkTGVuKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogUmVhZCBkYXRhIGZyb20gYSBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEuCi0gKgotICogW0ZvciBub3csIHRoYXQncyBqdXN0IGNvcHlpbmcgZGF0YSBvdXQgb2YgYSBidWZmZXIuXQotICovCi1zc2l6ZV90IF9Db21wcmVzc2VkQXNzZXQ6OnJlYWQodm9pZCogYnVmLCBzaXplX3QgY291bnQpCi17Ci0gICAgc2l6ZV90IG1heExlbjsKLSAgICBzaXplX3QgYWN0dWFsOwotCi0gICAgYXNzZXJ0KG1PZmZzZXQgPj0gMCAmJiBtT2Zmc2V0IDw9IG1VbmNvbXByZXNzZWRMZW4pOwotCi0gICAgLyogSWYgd2UncmUgcmVseWluZyBvbiBhIHN0cmVhbWluZyBpbmZsYXRlciwgZ28gdGhyb3VnaCB0aGF0ICovCi0gICAgaWYgKG1aaXBJbmZsYXRlcikgewotICAgICAgICBhY3R1YWwgPSBtWmlwSW5mbGF0ZXItPnJlYWQoYnVmLCBjb3VudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1CdWYgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKGdldEJ1ZmZlcihmYWxzZSkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0KG1CdWYgIT0gTlVMTCk7Ci0KLSAgICAgICAgLyogYWRqdXN0IGNvdW50IGlmIHdlJ3JlIG5lYXIgRU9GICovCi0gICAgICAgIG1heExlbiA9IG1VbmNvbXByZXNzZWRMZW4gLSBtT2Zmc2V0OwotICAgICAgICBpZiAoY291bnQgPiBtYXhMZW4pCi0gICAgICAgICAgICBjb3VudCA9IG1heExlbjsKLQotICAgICAgICBpZiAoIWNvdW50KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgLyogY29weSBmcm9tIGJ1ZmZlciAqLwotICAgICAgICAvL3ByaW50ZigiY29tcCBidWYgcmVhZFxuIik7Ci0gICAgICAgIG1lbWNweShidWYsIChjaGFyKiltQnVmICsgbU9mZnNldCwgY291bnQpOwotICAgICAgICBhY3R1YWwgPSBjb3VudDsKLSAgICB9Ci0KLSAgICBtT2Zmc2V0ICs9IGFjdHVhbDsKLSAgICByZXR1cm4gYWN0dWFsOwotfQotCi0vKgotICogSGFuZGxlIGEgc2VlayByZXF1ZXN0LgotICoKLSAqIElmIHdlJ3JlIHdvcmtpbmcgaW4gYSBzdHJlYW1pbmcgbW9kZSwgdGhpcyBpcyBnb2luZyB0byBiZSBmYWlybHkKLSAqIGV4cGVuc2l2ZSwgYmVjYXVzZSBpdCByZXF1aXJlcyBwbG93aW5nIHRocm91Z2ggYSBidW5jaCBvZiBjb21wcmVzc2VkCi0gKiBkYXRhLgotICovCi1vZmY2NF90IF9Db21wcmVzc2VkQXNzZXQ6OnNlZWsob2ZmNjRfdCBvZmZzZXQsIGludCB3aGVuY2UpCi17Ci0gICAgb2ZmNjRfdCBuZXdQb3NuOwotCi0gICAgLy8gY29tcHV0ZSBuZXcgcG9zaXRpb24gd2l0aGluIGNodW5rCi0gICAgbmV3UG9zbiA9IGhhbmRsZVNlZWsob2Zmc2V0LCB3aGVuY2UsIG1PZmZzZXQsIG1VbmNvbXByZXNzZWRMZW4pOwotICAgIGlmIChuZXdQb3NuID09IChvZmY2NF90KSAtMSkKLSAgICAgICAgcmV0dXJuIG5ld1Bvc247Ci0KLSAgICBpZiAobVppcEluZmxhdGVyKSB7Ci0gICAgICAgIG1aaXBJbmZsYXRlci0+c2Vla0Fic29sdXRlKG5ld1Bvc24pOwotICAgIH0KLSAgICBtT2Zmc2V0ID0gbmV3UG9zbjsKLSAgICByZXR1cm4gbU9mZnNldDsKLX0KLQotLyoKLSAqIENsb3NlIHRoZSBhc3NldC4KLSAqLwotdm9pZCBfQ29tcHJlc3NlZEFzc2V0OjpjbG9zZSh2b2lkKQotewotICAgIGlmIChtTWFwICE9IE5VTEwpIHsKLSAgICAgICAgbU1hcC0+cmVsZWFzZSgpOwotICAgICAgICBtTWFwID0gTlVMTDsKLSAgICB9Ci0KLSAgICBkZWxldGVbXSBtQnVmOwotICAgIG1CdWYgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1aaXBJbmZsYXRlcjsKLSAgICBtWmlwSW5mbGF0ZXIgPSBOVUxMOwotCi0gICAgaWYgKG1GZCA+IDApIHsKLSAgICAgICAgOjpjbG9zZShtRmQpOwotICAgICAgICBtRmQgPSAtMTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBHZXQgYSBwb2ludGVyIHRvIGEgcmVhZC1vbmx5IGJ1ZmZlciBvZiBkYXRhLgotICoKLSAqIFRoZSBmaXJzdCB0aW1lIHRoaXMgaXMgY2FsbGVkLCB3ZSBleHBhbmQgdGhlIGNvbXByZXNzZWQgZGF0YSBpbnRvIGEKLSAqIGJ1ZmZlci4KLSAqLwotY29uc3Qgdm9pZCogX0NvbXByZXNzZWRBc3NldDo6Z2V0QnVmZmVyKGJvb2wpCi17Ci0gICAgdW5zaWduZWQgY2hhciogYnVmID0gTlVMTDsKLQotICAgIGlmIChtQnVmICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBtQnVmOwotCi0gICAgLyoKLSAgICAgKiBBbGxvY2F0ZSBhIGJ1ZmZlciBhbmQgcmVhZCB0aGUgZmlsZSBpbnRvIGl0LgotICAgICAqLwotICAgIGJ1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW21VbmNvbXByZXNzZWRMZW5dOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICBBTE9HVygiYWxsb2MgJWxkIGJ5dGVzIGZhaWxlZFxuIiwgKGxvbmcpIG1VbmNvbXByZXNzZWRMZW4pOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgaWYgKG1NYXAgIT0gTlVMTCkgewotICAgICAgICBpZiAoIVppcFV0aWxzOjppbmZsYXRlVG9CdWZmZXIobU1hcC0+Z2V0RGF0YVB0cigpLCBidWYsCi0gICAgICAgICAgICAgICAgbVVuY29tcHJlc3NlZExlbiwgbUNvbXByZXNzZWRMZW4pKQotICAgICAgICAgICAgZ290byBiYWlsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFzc2VydChtRmQgPj0gMCk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU2VlayB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YS4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChsc2VlayhtRmQsIG1TdGFydCwgU0VFS19TRVQpICE9IG1TdGFydCkKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLQotICAgICAgICAvKgotICAgICAgICAgKiBFeHBhbmQgdGhlIGRhdGEgaW50byBpdC4KLSAgICAgICAgICovCi0gICAgICAgIGlmICghWmlwVXRpbHM6OmluZmxhdGVUb0J1ZmZlcihtRmQsIGJ1ZiwgbVVuY29tcHJlc3NlZExlbiwKLSAgICAgICAgICAgICAgICBtQ29tcHJlc3NlZExlbikpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBTdWNjZXNzIC0gbm93IHRoYXQgd2UgaGF2ZSB0aGUgZnVsbCBhc3NldCBpbiBSQU0gd2UKLSAgICAgKiBubyBsb25nZXIgbmVlZCB0aGUgc3RyZWFtaW5nIGluZmxhdGVyCi0gICAgICovCi0gICAgZGVsZXRlIG1aaXBJbmZsYXRlcjsKLSAgICBtWmlwSW5mbGF0ZXIgPSBOVUxMOwotCi0gICAgbUJ1ZiA9IGJ1ZjsKLSAgICBidWYgPSBOVUxMOwotCi1iYWlsOgotICAgIGRlbGV0ZVtdIGJ1ZjsKLSAgICByZXR1cm4gbUJ1ZjsKLX0KLQpkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvQXNzZXREaXIuY3BwIGIvbGlicy9hbmRyb2lkZncvQXNzZXREaXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzVmNTIxLi4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L0Fzc2V0RGlyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLwotLy8gUHJvdmlkZSBhY2Nlc3MgdG8gYSB2aXJ0dWFsIGRpcmVjdG9yeSBpbiAiYXNzZXQgc3BhY2UiLiAgTW9zdCBvZiB0aGUKLS8vIGltcGxlbWVudGF0aW9uIGlzIGluIHRoZSBoZWFkZXIgZmlsZSBvciBpbiBmcmllbmQgZnVuY3Rpb25zIGluCi0vLyBBc3NldE1hbmFnZXIuCi0vLwotI2luY2x1ZGUgPGFuZHJvaWRmdy9Bc3NldERpci5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotCi0vKgotICogRmluZCBhIG1hdGNoaW5nIGVudHJ5IGluIGEgdmVjdG9yIG9mIEZpbGVJbmZvLiAgQmVjYXVzZSBpdCdzIHNvcnRlZCwgd2UKLSAqIGNhbiB1c2UgYSBiaW5hcnkgc2VhcmNoLgotICoKLSAqIEFzc3VtZXMgdGhlIHZlY3RvciBpcyBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLgotICovCi0vKnN0YXRpYyovIGludCBBc3NldERpcjo6RmlsZUluZm86OmZpbmRFbnRyeShjb25zdCBTb3J0ZWRWZWN0b3I8RmlsZUluZm8+KiBwVmVjdG9yLAotICAgIGNvbnN0IFN0cmluZzgmIGZpbGVOYW1lKQotewotICAgIEZpbGVJbmZvIHRtcEluZm87Ci0KLSAgICB0bXBJbmZvLnNldEZpbGVOYW1lKGZpbGVOYW1lKTsKLSAgICByZXR1cm4gcFZlY3Rvci0+aW5kZXhPZih0bXBJbmZvKTsKLQotI2lmIDAgIC8vIGRvbid0IG5lZWQgdGhpcyBhZnRlciBhbGwgKHVzZXMgMS8yIGNvbXBhcmVzIG9mIFNvcnRlZFZlY3RvciB0aG91Z2gpCi0gICAgaW50IGxvLCBoaSwgY3VyOwotCi0gICAgbG8gPSAwOwotICAgIGhpID0gcFZlY3Rvci0+c2l6ZSgpIC0xOwotICAgIHdoaWxlIChsbyA8PSBoaSkgewotICAgICAgICBpbnQgY21wOwotCi0gICAgICAgIGN1ciA9IChoaSArIGxvKSAvIDI7Ci0gICAgICAgIGNtcCA9IHN0cmNtcChwVmVjdG9yLT5pdGVtQXQoY3VyKS5nZXRGaWxlTmFtZSgpLCBmaWxlTmFtZSk7Ci0gICAgICAgIGlmIChjbXAgPT0gMCkgewotICAgICAgICAgICAgLyogbWF0Y2gsIGJhaWwgKi8KLSAgICAgICAgICAgIHJldHVybiBjdXI7Ci0gICAgICAgIH0gZWxzZSBpZiAoY21wIDwgMCkgewotICAgICAgICAgICAgLyogdG9vIGxvdyAqLwotICAgICAgICAgICAgbG8gPSBjdXIgKyAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogdG9vIGhpZ2ggKi8KLSAgICAgICAgICAgIGhpID0gY3VyIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotI2VuZGlmCi19Ci0KZGlmZiAtLWdpdCBhL2xpYnMvYW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5jcHAgYi9saWJzL2FuZHJvaWRmdy9Bc3NldE1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDNjMDMwLi4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLwotLy8gUHJvdmlkZSBhY2Nlc3MgdG8gcmVhZC1vbmx5IGFzc2V0cy4KLS8vCi0KLSNkZWZpbmUgTE9HX1RBRyAiYXNzZXQiCi0jZGVmaW5lIEFUUkFDRV9UQUcgQVRSQUNFX1RBR19SRVNPVVJDRVMKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9Bc3NldC5oPgotI2luY2x1ZGUgPGFuZHJvaWRmdy9Bc3NldERpci5oPgotI2luY2x1ZGUgPGFuZHJvaWRmdy9Bc3NldE1hbmFnZXIuaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvbWlzYy5oPgotI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZGZ3L1ppcEZpbGVSTy5oPgotI2luY2x1ZGUgPHV0aWxzL0F0b21pYy5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgotI2luY2x1ZGUgPHV0aWxzL1RpbWVycy5oPgotI2lmZGVmIEhBVkVfQU5EUk9JRF9PUwotI2luY2x1ZGUgPGN1dGlscy90cmFjZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxkaXJlbnQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpZm5kZWYgVEVNUF9GQUlMVVJFX1JFVFJZCi0vKiBVc2VkIHRvIHJldHJ5IHN5c2NhbGxzIHRoYXQgY2FuIHJldHVybiBFSU5UUi4gKi8KLSNkZWZpbmUgVEVNUF9GQUlMVVJFX1JFVFJZKGV4cCkgKHsgICAgICAgICBcCi0gICAgdHlwZW9mIChleHApIF9yYzsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX3JjID0gKGV4cCk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoX3JjID09IC0xICYmIGVycm5vID09IEVJTlRSKTsgXAotICAgIF9yYzsgfSkKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9BTkRST0lEX09TCi0jZGVmaW5lIE1ZX1RSQUNFX0JFR0lOKHgpIEFUUkFDRV9CRUdJTih4KQotI2RlZmluZSBNWV9UUkFDRV9FTkQoKSBBVFJBQ0VfRU5EKCkKLSNlbHNlCi0jZGVmaW5lIE1ZX1RSQUNFX0JFR0lOKHgpCi0jZGVmaW5lIE1ZX1RSQUNFX0VORCgpCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLS8qCi0gKiBOYW1lcyBmb3IgZGVmYXVsdCBhcHAsIGxvY2FsZSwgYW5kIHZlbmRvci4gIFdlIG1pZ2h0IHdhbnQgdG8gY2hhbmdlCi0gKiB0aGVzZSB0byBiZSBhbiBhY3R1YWwgbG9jYWxlLCBlLmcuIGFsd2F5cyB1c2UgZW4tVVMgYXMgdGhlIGRlZmF1bHQuCi0gKi8KLXN0YXRpYyBjb25zdCBjaGFyKiBrRGVmYXVsdExvY2FsZSA9ICJkZWZhdWx0IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrRGVmYXVsdFZlbmRvciA9ICJkZWZhdWx0IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrQXNzZXRzUm9vdCA9ICJhc3NldHMiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtBcHBaaXBOYW1lID0gTlVMTDsgLy8iY2xhc3Nlcy5qYXIiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtTeXN0ZW1Bc3NldHMgPSAiZnJhbWV3b3JrL2ZyYW1ld29yay1yZXMuYXBrIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrSWRtYXBDYWNoZURpciA9ICJyZXNvdXJjZS1jYWNoZSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrRXhjbHVkZUV4dGVuc2lvbiA9ICIuRVhDTFVERSI7Ci0KLXN0YXRpYyBBc3NldCogY29uc3Qga0V4Y2x1ZGVkQXNzZXQgPSAoQXNzZXQqKSAweGQwMDAwMDBkOwotCi1zdGF0aWMgdm9sYXRpbGUgaW50MzJfdCBnQ291bnQgPSAwOwotCi1uYW1lc3BhY2UgewotICAgIC8vIFRyYW5zZm9ybSBzdHJpbmcgL2EvYi9jLmFwayB0byAvZGF0YS9yZXNvdXJjZS1jYWNoZS9hQGJAYy5hcGtAaWRtYXAKLSAgICBTdHJpbmc4IGlkbWFwUGF0aEZvclBhY2thZ2VQYXRoKGNvbnN0IFN0cmluZzgmIHBrZ1BhdGgpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyKiByb290ID0gZ2V0ZW52KCJBTkRST0lEX0RBVEEiKTsKLSAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihyb290ID09IE5VTEwsICJBTkRST0lEX0RBVEEgbm90IHNldCIpOwotICAgICAgICBTdHJpbmc4IHBhdGgocm9vdCk7Ci0gICAgICAgIHBhdGguYXBwZW5kUGF0aChrSWRtYXBDYWNoZURpcik7Ci0KLSAgICAgICAgY2hhciBidWZbMjU2XTsgLy8gMjU2IGNoYXJzIHNob3VsZCBiZSBlbm91Z2ggZm9yIGFueW9uZS4uLgotICAgICAgICBzdHJuY3B5KGJ1ZiwgcGtnUGF0aC5zdHJpbmcoKSwgMjU1KTsKLSAgICAgICAgYnVmWzI1NV0gPSAnXDAnOwotICAgICAgICBjaGFyKiBmaWxlbmFtZSA9IGJ1ZjsKLSAgICAgICAgd2hpbGUgKCpmaWxlbmFtZSAmJiAqZmlsZW5hbWUgPT0gJy8nKSB7Ci0gICAgICAgICAgICArK2ZpbGVuYW1lOwotICAgICAgICB9Ci0gICAgICAgIGNoYXIqIHAgPSBmaWxlbmFtZTsKLSAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgKnAgPSAnQCc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK3A7Ci0gICAgICAgIH0KLSAgICAgICAgcGF0aC5hcHBlbmRQYXRoKGZpbGVuYW1lKTsKLSAgICAgICAgcGF0aC5hcHBlbmQoIkBpZG1hcCIpOwotCi0gICAgICAgIHJldHVybiBwYXRoOwotICAgIH0KLQotICAgIC8qCi0gICAgICogTGlrZSBzdHJkdXAoKSwgYnV0IHVzZXMgQysrICJuZXciIG9wZXJhdG9yIGluc3RlYWQgb2YgbWFsbG9jLgotICAgICAqLwotICAgIHN0YXRpYyBjaGFyKiBzdHJkdXBOZXcoY29uc3QgY2hhciogc3RyKQotICAgIHsKLSAgICAgICAgY2hhciogbmV3U3RyOwotICAgICAgICBpbnQgbGVuOwotCi0gICAgICAgIGlmIChzdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIGxlbiA9IHN0cmxlbihzdHIpOwotICAgICAgICBuZXdTdHIgPSBuZXcgY2hhcltsZW4rMV07Ci0gICAgICAgIG1lbWNweShuZXdTdHIsIHN0ciwgbGVuKzEpOwotCi0gICAgICAgIHJldHVybiBuZXdTdHI7Ci0gICAgfQotfQotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgICAgIEFzc2V0TWFuYWdlcgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotaW50MzJfdCBBc3NldE1hbmFnZXI6OmdldEdsb2JhbENvdW50KCkKLXsKLSAgICByZXR1cm4gZ0NvdW50OwotfQotCi1Bc3NldE1hbmFnZXI6OkFzc2V0TWFuYWdlcihDYWNoZU1vZGUgY2FjaGVNb2RlKQotICAgIDogbUxvY2FsZShOVUxMKSwgbVZlbmRvcihOVUxMKSwKLSAgICAgIG1SZXNvdXJjZXMoTlVMTCksIG1Db25maWcobmV3IFJlc1RhYmxlX2NvbmZpZyksCi0gICAgICBtQ2FjaGVNb2RlKGNhY2hlTW9kZSksIG1DYWNoZVZhbGlkKGZhbHNlKQotewotICAgIGludCBjb3VudCA9IGFuZHJvaWRfYXRvbWljX2luYygmZ0NvdW50KSsxOwotICAgIC8vQUxPR0koIkNyZWF0aW5nIEFzc2V0TWFuYWdlciAlcCAjJWRcbiIsIHRoaXMsIGNvdW50KTsKLSAgICBtZW1zZXQobUNvbmZpZywgMCwgc2l6ZW9mKFJlc1RhYmxlX2NvbmZpZykpOwotfQotCi1Bc3NldE1hbmFnZXI6On5Bc3NldE1hbmFnZXIodm9pZCkKLXsKLSAgICBpbnQgY291bnQgPSBhbmRyb2lkX2F0b21pY19kZWMoJmdDb3VudCk7Ci0gICAgLy9BTE9HSSgiRGVzdHJveWluZyBBc3NldE1hbmFnZXIgaW4gJXAgIyVkXG4iLCB0aGlzLCBjb3VudCk7Ci0KLSAgICBkZWxldGUgbUNvbmZpZzsKLSAgICBkZWxldGUgbVJlc291cmNlczsKLQotICAgIC8vIGRvbid0IGhhdmUgYSBTdHJpbmcgY2xhc3MgeWV0LCBzbyBtYWtlIHN1cmUgd2UgY2xlYW4gdXAKLSAgICBkZWxldGVbXSBtTG9jYWxlOwotICAgIGRlbGV0ZVtdIG1WZW5kb3I7Ci19Ci0KLWJvb2wgQXNzZXRNYW5hZ2VyOjphZGRBc3NldFBhdGgoY29uc3QgU3RyaW5nOCYgcGF0aCwgdm9pZCoqIGNvb2tpZSkKLXsKLSAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotCi0gICAgYXNzZXRfcGF0aCBhcDsKLQotICAgIFN0cmluZzggcmVhbFBhdGgocGF0aCk7Ci0gICAgaWYgKGtBcHBaaXBOYW1lKSB7Ci0gICAgICAgIHJlYWxQYXRoLmFwcGVuZFBhdGgoa0FwcFppcE5hbWUpOwotICAgIH0KLSAgICBhcC50eXBlID0gOjpnZXRGaWxlVHlwZShyZWFsUGF0aC5zdHJpbmcoKSk7Ci0gICAgaWYgKGFwLnR5cGUgPT0ga0ZpbGVUeXBlUmVndWxhcikgewotICAgICAgICBhcC5wYXRoID0gcmVhbFBhdGg7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXAucGF0aCA9IHBhdGg7Ci0gICAgICAgIGFwLnR5cGUgPSA6OmdldEZpbGVUeXBlKHBhdGguc3RyaW5nKCkpOwotICAgICAgICBpZiAoYXAudHlwZSAhPSBrRmlsZVR5cGVEaXJlY3RvcnkgJiYgYXAudHlwZSAhPSBrRmlsZVR5cGVSZWd1bGFyKSB7Ci0gICAgICAgICAgICBBTE9HVygiQXNzZXQgcGF0aCAlcyBpcyBuZWl0aGVyIGEgZGlyZWN0b3J5IG5vciBmaWxlICh0eXBlPSVkKS4iLAotICAgICAgICAgICAgICAgICBwYXRoLnN0cmluZygpLCAoaW50KWFwLnR5cGUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gU2tpcCBpZiB3ZSBoYXZlIGl0IGFscmVhZHkuCi0gICAgZm9yIChzaXplX3QgaT0wOyBpPG1Bc3NldFBhdGhzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtQXNzZXRQYXRoc1tpXS5wYXRoID09IGFwLnBhdGgpIHsKLSAgICAgICAgICAgIGlmIChjb29raWUpIHsKLSAgICAgICAgICAgICAgICAqY29va2llID0gKHZvaWQqKShpKzEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBTE9HVigiSW4gJXAgQXNzZXQgJXMgcGF0aDogJXMiLCB0aGlzLAotICAgICAgICAgYXAudHlwZSA9PSBrRmlsZVR5cGVEaXJlY3RvcnkgPyAiZGlyIiA6ICJ6aXAiLCBhcC5wYXRoLnN0cmluZygpKTsKLQotICAgIG1Bc3NldFBhdGhzLmFkZChhcCk7Ci0KLSAgICAvLyBuZXcgcGF0aHMgYXJlIGFsd2F5cyBhZGRlZCBhdCB0aGUgZW5kCi0gICAgaWYgKGNvb2tpZSkgewotICAgICAgICAqY29va2llID0gKHZvaWQqKW1Bc3NldFBhdGhzLnNpemUoKTsKLSAgICB9Ci0KLSAgICAvLyBhZGQgb3ZlcmxheSBwYWNrYWdlcyBmb3IgL3N5c3RlbS9mcmFtZXdvcms7IGFwcHMgYXJlIGhhbmRsZWQgYnkgdGhlCi0gICAgLy8gKEphdmEpIHBhY2thZ2UgbWFuYWdlcgotICAgIGlmIChzdHJuY21wKHBhdGguc3RyaW5nKCksICIvc3lzdGVtL2ZyYW1ld29yay8iLCAxOCkgPT0gMCkgewotICAgICAgICAvLyBXaGVuIHRoZXJlIGlzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciAvdmVuZG9yLCB0aGlzCi0gICAgICAgIC8vIHNob3VsZCBiZSBjaGFuZ2VkIHRvIHNvbWV0aGluZyBzaW1pbGFyIHRvIGhvdyBBTkRST0lEX1JPT1QKLSAgICAgICAgLy8gYW5kIEFORFJPSURfREFUQSBhcmUgdXNlZCBpbiB0aGlzIGZpbGUuCi0gICAgICAgIFN0cmluZzggb3ZlcmxheVBhdGgoIi92ZW5kb3Ivb3ZlcmxheS9mcmFtZXdvcmsvIik7Ci0gICAgICAgIG92ZXJsYXlQYXRoLmFwcGVuZChwYXRoLmdldFBhdGhMZWFmKCkpOwotICAgICAgICBpZiAoVEVNUF9GQUlMVVJFX1JFVFJZKGFjY2VzcyhvdmVybGF5UGF0aC5zdHJpbmcoKSwgUl9PSykpID09IDApIHsKLSAgICAgICAgICAgIGFzc2V0X3BhdGggb2FwOwotICAgICAgICAgICAgb2FwLnBhdGggPSBvdmVybGF5UGF0aDsKLSAgICAgICAgICAgIG9hcC50eXBlID0gOjpnZXRGaWxlVHlwZShvdmVybGF5UGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBib29sIGFkZE92ZXJsYXkgPSAob2FwLnR5cGUgPT0ga0ZpbGVUeXBlUmVndWxhcik7IC8vIG9ubHkgLmFwa3Mgc3VwcG9ydGVkIGFzIG92ZXJsYXkKLSAgICAgICAgICAgIGlmIChhZGRPdmVybGF5KSB7Ci0gICAgICAgICAgICAgICAgb2FwLmlkbWFwID0gaWRtYXBQYXRoRm9yUGFja2FnZVBhdGgob3ZlcmxheVBhdGgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzSWRtYXBTdGFsZUxvY2tlZChhcC5wYXRoLCBvYXAucGF0aCwgb2FwLmlkbWFwKSkgewotICAgICAgICAgICAgICAgICAgICBhZGRPdmVybGF5ID0gY3JlYXRlSWRtYXBGaWxlTG9ja2VkKGFwLnBhdGgsIG9hcC5wYXRoLCBvYXAuaWRtYXApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhZGRPdmVybGF5KSB7Ci0gICAgICAgICAgICAgICAgbUFzc2V0UGF0aHMuYWRkKG9hcCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFMT0dXKCJmYWlsZWQgdG8gYWRkIG92ZXJsYXkgcGFja2FnZSAlc1xuIiwgb3ZlcmxheVBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQXNzZXRNYW5hZ2VyOjppc0lkbWFwU3RhbGVMb2NrZWQoY29uc3QgU3RyaW5nOCYgb3JpZ2luYWxQYXRoLCBjb25zdCBTdHJpbmc4JiBvdmVybGF5UGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nOCYgaWRtYXBQYXRoKQotewotICAgIHN0cnVjdCBzdGF0IHN0OwotICAgIGlmIChURU1QX0ZBSUxVUkVfUkVUUlkoc3RhdChpZG1hcFBhdGguc3RyaW5nKCksICZzdCkpID09IC0xKSB7Ci0gICAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBub24tZXhpc3RpbmcgaWRtYXAgaXMgYWx3YXlzIHN0YWxlCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVygiZmFpbGVkIHRvIHN0YXQgZmlsZSAlczogJXNcbiIsIGlkbWFwUGF0aC5zdHJpbmcoKSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc3Quc3Rfc2l6ZSA8IFJlc1RhYmxlOjpJRE1BUF9IRUFERVJfU0laRV9CWVRFUykgewotICAgICAgICBBTE9HVygiZmlsZSAlcyBoYXMgdW5leHBlY3RlZGx5IHNtYWxsIHNpemU9JXpkXG4iLCBpZG1hcFBhdGguc3RyaW5nKCksIChzaXplX3Qpc3Quc3Rfc2l6ZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaW50IGZkID0gVEVNUF9GQUlMVVJFX1JFVFJZKDo6b3BlbihpZG1hcFBhdGguc3RyaW5nKCksIE9fUkRPTkxZKSk7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgIEFMT0dXKCJmYWlsZWQgdG8gb3BlbiBmaWxlICVzOiAlc1xuIiwgaWRtYXBQYXRoLnN0cmluZygpLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNoYXIgYnVmW1Jlc1RhYmxlOjpJRE1BUF9IRUFERVJfU0laRV9CWVRFU107Ci0gICAgc3NpemVfdCBieXRlc0xlZnQgPSBSZXNUYWJsZTo6SURNQVBfSEVBREVSX1NJWkVfQllURVM7Ci0gICAgZm9yICg7OykgewotICAgICAgICBzc2l6ZV90IHIgPSBURU1QX0ZBSUxVUkVfUkVUUlkocmVhZChmZCwgYnVmICsgUmVzVGFibGU6OklETUFQX0hFQURFUl9TSVpFX0JZVEVTIC0gYnl0ZXNMZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc0xlZnQpKTsKLSAgICAgICAgaWYgKHIgPCAwKSB7Ci0gICAgICAgICAgICBURU1QX0ZBSUxVUkVfUkVUUlkoY2xvc2UoZmQpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBieXRlc0xlZnQgLT0gcjsKLSAgICAgICAgaWYgKGJ5dGVzTGVmdCA9PSAwKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBURU1QX0ZBSUxVUkVfUkVUUlkoY2xvc2UoZmQpKTsKLQotICAgIHVpbnQzMl90IGNhY2hlZE9yaWdpbmFsQ3JjLCBjYWNoZWRPdmVybGF5Q3JjOwotICAgIGlmICghUmVzVGFibGU6OmdldElkbWFwSW5mbyhidWYsIFJlc1RhYmxlOjpJRE1BUF9IRUFERVJfU0laRV9CWVRFUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlZE9yaWdpbmFsQ3JjLCAmY2FjaGVkT3ZlcmxheUNyYykpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHVpbnQzMl90IGFjdHVhbE9yaWdpbmFsQ3JjLCBhY3R1YWxPdmVybGF5Q3JjOwotICAgIGlmICghZ2V0WmlwRW50cnlDcmNMb2NrZWQob3JpZ2luYWxQYXRoLCAicmVzb3VyY2VzLmFyc2MiLCAmYWN0dWFsT3JpZ2luYWxDcmMpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFnZXRaaXBFbnRyeUNyY0xvY2tlZChvdmVybGF5UGF0aCwgInJlc291cmNlcy5hcnNjIiwgJmFjdHVhbE92ZXJsYXlDcmMpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGNhY2hlZE9yaWdpbmFsQ3JjICE9IGFjdHVhbE9yaWdpbmFsQ3JjIHx8IGNhY2hlZE92ZXJsYXlDcmMgIT0gYWN0dWFsT3ZlcmxheUNyYzsKLX0KLQotYm9vbCBBc3NldE1hbmFnZXI6OmdldFppcEVudHJ5Q3JjTG9ja2VkKGNvbnN0IFN0cmluZzgmIHppcFBhdGgsIGNvbnN0IGNoYXIqIGVudHJ5RmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIHBDcmMpCi17Ci0gICAgYXNzZXRfcGF0aCBhcDsKLSAgICBhcC5wYXRoID0gemlwUGF0aDsKLSAgICBjb25zdCBaaXBGaWxlUk8qIHppcCA9IGdldFppcEZpbGVMb2NrZWQoYXApOwotICAgIGlmICh6aXAgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0IFppcEVudHJ5Uk8gZW50cnkgPSB6aXAtPmZpbmRFbnRyeUJ5TmFtZShlbnRyeUZpbGVuYW1lKTsKLSAgICBpZiAoZW50cnkgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3QgYm9vbCBnb3RJbmZvID0gemlwLT5nZXRFbnRyeUluZm8oZW50cnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIChsb25nKilwQ3JjKTsKLSAgICB6aXAtPnJlbGVhc2VFbnRyeShlbnRyeSk7Ci0KLSAgICByZXR1cm4gZ290SW5mbzsKLX0KLQotYm9vbCBBc3NldE1hbmFnZXI6OmNyZWF0ZUlkbWFwRmlsZUxvY2tlZChjb25zdCBTdHJpbmc4JiBvcmlnaW5hbFBhdGgsIGNvbnN0IFN0cmluZzgmIG92ZXJsYXlQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiBpZG1hcFBhdGgpCi17Ci0gICAgQUxPR0QoIiVzOiBvcmlnaW5hbFBhdGg9JXMgb3ZlcmxheVBhdGg9JXMgaWRtYXBQYXRoPSVzXG4iLAotICAgICAgICAgX19GVU5DVElPTl9fLCBvcmlnaW5hbFBhdGguc3RyaW5nKCksIG92ZXJsYXlQYXRoLnN0cmluZygpLCBpZG1hcFBhdGguc3RyaW5nKCkpOwotICAgIFJlc1RhYmxlIHRhYmxlc1syXTsKLSAgICBjb25zdCBTdHJpbmc4KiBwYXRoc1syXSA9IHsgJm9yaWdpbmFsUGF0aCwgJm92ZXJsYXlQYXRoIH07Ci0gICAgdWludDMyX3Qgb3JpZ2luYWxDcmMsIG92ZXJsYXlDcmM7Ci0gICAgYm9vbCByZXR2YWwgPSBmYWxzZTsKLSAgICBzc2l6ZV90IG9mZnNldCA9IDA7Ci0gICAgaW50IGZkID0gMDsKLSAgICB1aW50MzJfdCogZGF0YSA9IE5VTEw7Ci0gICAgc2l6ZV90IHNpemU7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAgICBhc3NldF9wYXRoIGFwOwotICAgICAgICBhcC50eXBlID0ga0ZpbGVUeXBlUmVndWxhcjsKLSAgICAgICAgYXAucGF0aCA9ICpwYXRoc1tpXTsKLSAgICAgICAgQXNzZXQqIGFzcyA9IG9wZW5Ob25Bc3NldEluUGF0aExvY2tlZCgicmVzb3VyY2VzLmFyc2MiLCBBc3NldDo6QUNDRVNTX0JVRkZFUiwgYXApOwotICAgICAgICBpZiAoYXNzID09IE5VTEwpIHsKLSAgICAgICAgICAgIEFMT0dXKCJmYWlsZWQgdG8gZmluZCByZXNvdXJjZXMuYXJzYyBpbiAlc1xuIiwgYXAucGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIHRhYmxlc1tpXS5hZGQoYXNzLCAodm9pZCopMSwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmICghZ2V0WmlwRW50cnlDcmNMb2NrZWQob3JpZ2luYWxQYXRoLCAicmVzb3VyY2VzLmFyc2MiLCAmb3JpZ2luYWxDcmMpKSB7Ci0gICAgICAgIEFMT0dXKCJmYWlsZWQgdG8gcmV0cmlldmUgY3JjIGZvciByZXNvdXJjZXMuYXJzYyBpbiAlc1xuIiwgb3JpZ2luYWxQYXRoLnN0cmluZygpKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgaWYgKCFnZXRaaXBFbnRyeUNyY0xvY2tlZChvdmVybGF5UGF0aCwgInJlc291cmNlcy5hcnNjIiwgJm92ZXJsYXlDcmMpKSB7Ci0gICAgICAgIEFMT0dXKCJmYWlsZWQgdG8gcmV0cmlldmUgY3JjIGZvciByZXNvdXJjZXMuYXJzYyBpbiAlc1xuIiwgb3ZlcmxheVBhdGguc3RyaW5nKCkpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLQotICAgIGlmICh0YWJsZXNbMF0uY3JlYXRlSWRtYXAodGFibGVzWzFdLCBvcmlnaW5hbENyYywgb3ZlcmxheUNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiopJmRhdGEsICZzaXplKSAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HVygiZmFpbGVkIHRvIGdlbmVyYXRlIGlkbWFwIGRhdGEgZm9yIGZpbGUgJXNcbiIsIGlkbWFwUGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBzaG91bGQgYmUgYWJzdHJhY3RlZCAoZWcgcmVwbGFjZWQgYnkgYSBzdGFuZC1hbG9uZQotICAgIC8vIGFwcGxpY2F0aW9uIGxpa2UgZGV4b3B0LCB0cmlnZ2VyZWQgYnkgc29tZXRoaW5nIGVxdWl2YWxlbnQgdG8KLSAgICAvLyBpbnN0YWxsZCkuCi0gICAgZmQgPSBURU1QX0ZBSUxVUkVfUkVUUlkoOjpvcGVuKGlkbWFwUGF0aC5zdHJpbmcoKSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCkpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBBTE9HVygiZmFpbGVkIHRvIHdyaXRlIGlkbWFwIGZpbGUgJXMgKG9wZW46ICVzKVxuIiwgaWRtYXBQYXRoLnN0cmluZygpLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICBnb3RvIGVycm9yX2ZyZWU7Ci0gICAgfQotICAgIGZvciAoOzspIHsKLSAgICAgICAgc3NpemVfdCB3cml0dGVuID0gVEVNUF9GQUlMVVJFX1JFVFJZKHdyaXRlKGZkLCBkYXRhICsgb2Zmc2V0LCBzaXplKSk7Ci0gICAgICAgIGlmICh3cml0dGVuIDwgMCkgewotICAgICAgICAgICAgQUxPR1coImZhaWxlZCB0byB3cml0ZSBpZG1hcCBmaWxlICVzICh3cml0ZTogJXMpXG4iLCBpZG1hcFBhdGguc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yX2Nsb3NlOwotICAgICAgICB9Ci0gICAgICAgIHNpemUgLT0gKHNpemVfdCl3cml0dGVuOwotICAgICAgICBvZmZzZXQgKz0gd3JpdHRlbjsKLSAgICAgICAgaWYgKHNpemUgPT0gMCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR2YWwgPSB0cnVlOwotZXJyb3JfY2xvc2U6Ci0gICAgVEVNUF9GQUlMVVJFX1JFVFJZKGNsb3NlKGZkKSk7Ci1lcnJvcl9mcmVlOgotICAgIGZyZWUoZGF0YSk7Ci1lcnJvcjoKLSAgICByZXR1cm4gcmV0dmFsOwotfQotCi1ib29sIEFzc2V0TWFuYWdlcjo6YWRkRGVmYXVsdEFzc2V0cygpCi17Ci0gICAgY29uc3QgY2hhciogcm9vdCA9IGdldGVudigiQU5EUk9JRF9ST09UIik7Ci0gICAgTE9HX0FMV0FZU19GQVRBTF9JRihyb290ID09IE5VTEwsICJBTkRST0lEX1JPT1Qgbm90IHNldCIpOwotCi0gICAgU3RyaW5nOCBwYXRoKHJvb3QpOwotICAgIHBhdGguYXBwZW5kUGF0aChrU3lzdGVtQXNzZXRzKTsKLQotICAgIHJldHVybiBhZGRBc3NldFBhdGgocGF0aCwgTlVMTCk7Ci19Ci0KLXZvaWQqIEFzc2V0TWFuYWdlcjo6bmV4dEFzc2V0UGF0aCh2b2lkKiBjb29raWUpIGNvbnN0Ci17Ci0gICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLSAgICBzaXplX3QgbmV4dCA9ICgoc2l6ZV90KWNvb2tpZSkrMTsKLSAgICByZXR1cm4gbmV4dCA+IG1Bc3NldFBhdGhzLnNpemUoKSA/IE5VTEwgOiAodm9pZCopbmV4dDsKLX0KLQotU3RyaW5nOCBBc3NldE1hbmFnZXI6OmdldEFzc2V0UGF0aCh2b2lkKiBjb29raWUpIGNvbnN0Ci17Ci0gICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLSAgICBjb25zdCBzaXplX3Qgd2hpY2ggPSAoKHNpemVfdCljb29raWUpLTE7Ci0gICAgaWYgKHdoaWNoIDwgbUFzc2V0UGF0aHMuc2l6ZSgpKSB7Ci0gICAgICAgIHJldHVybiBtQXNzZXRQYXRoc1t3aGljaF0ucGF0aDsKLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZzgoKTsKLX0KLQotLyoKLSAqIFNldCB0aGUgY3VycmVudCBsb2NhbGUuICBVc2UgTlVMTCB0byBpbmRpY2F0ZSBubyBsb2NhbGUuCi0gKgotICogQ2xvc2UgYW5kIHJlb3BlbiBaaXAgYXJjaGl2ZXMgYXMgYXBwcm9wcmlhdGUsIGFuZCByZXNldCBjYWNoZWQKLSAqIGluZm9ybWF0aW9uIGluIHRoZSBsb2NhbGUtc3BlY2lmaWMgc2VjdGlvbnMgb2YgdGhlIHRyZWUuCi0gKi8KLXZvaWQgQXNzZXRNYW5hZ2VyOjpzZXRMb2NhbGUoY29uc3QgY2hhciogbG9jYWxlKQotewotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0gICAgc2V0TG9jYWxlTG9ja2VkKGxvY2FsZSk7Ci19Ci0KLXZvaWQgQXNzZXRNYW5hZ2VyOjpzZXRMb2NhbGVMb2NrZWQoY29uc3QgY2hhciogbG9jYWxlKQotewotICAgIGlmIChtTG9jYWxlICE9IE5VTEwpIHsKLSAgICAgICAgLyogcHJldmlvdXNseSBzZXQsIHB1cmdlIGNhY2hlZCBkYXRhICovCi0gICAgICAgIHB1cmdlRmlsZU5hbWVDYWNoZUxvY2tlZCgpOwotICAgICAgICAvL21aaXBTZXQucHVyZ2VMb2NhbGUoKTsKLSAgICAgICAgZGVsZXRlW10gbUxvY2FsZTsKLSAgICB9Ci0gICAgbUxvY2FsZSA9IHN0cmR1cE5ldyhsb2NhbGUpOwotCi0gICAgdXBkYXRlUmVzb3VyY2VQYXJhbXNMb2NrZWQoKTsKLX0KLQotLyoKLSAqIFNldCB0aGUgY3VycmVudCB2ZW5kb3IuICBVc2UgTlVMTCB0byBpbmRpY2F0ZSBubyB2ZW5kb3IuCi0gKgotICogQ2xvc2UgYW5kIHJlb3BlbiBaaXAgYXJjaGl2ZXMgYXMgYXBwcm9wcmlhdGUsIGFuZCByZXNldCBjYWNoZWQKLSAqIGluZm9ybWF0aW9uIGluIHRoZSB2ZW5kb3Itc3BlY2lmaWMgc2VjdGlvbnMgb2YgdGhlIHRyZWUuCi0gKi8KLXZvaWQgQXNzZXRNYW5hZ2VyOjpzZXRWZW5kb3IoY29uc3QgY2hhciogdmVuZG9yKQotewotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0KLSAgICBpZiAobVZlbmRvciAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIHByZXZpb3VzbHkgc2V0LCBwdXJnZSBjYWNoZWQgZGF0YSAqLwotICAgICAgICBwdXJnZUZpbGVOYW1lQ2FjaGVMb2NrZWQoKTsKLSAgICAgICAgLy9tWmlwU2V0LnB1cmdlVmVuZG9yKCk7Ci0gICAgICAgIGRlbGV0ZVtdIG1WZW5kb3I7Ci0gICAgfQotICAgIG1WZW5kb3IgPSBzdHJkdXBOZXcodmVuZG9yKTsKLX0KLQotdm9pZCBBc3NldE1hbmFnZXI6OnNldENvbmZpZ3VyYXRpb24oY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcsIGNvbnN0IGNoYXIqIGxvY2FsZSkKLXsKLSAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotICAgICptQ29uZmlnID0gY29uZmlnOwotICAgIGlmIChsb2NhbGUpIHsKLSAgICAgICAgc2V0TG9jYWxlTG9ja2VkKGxvY2FsZSk7Ci0gICAgfSBlbHNlIGlmIChjb25maWcubGFuZ3VhZ2VbMF0gIT0gMCkgewotICAgICAgICBjaGFyIHNwZWNbOV07Ci0gICAgICAgIHNwZWNbMF0gPSBjb25maWcubGFuZ3VhZ2VbMF07Ci0gICAgICAgIHNwZWNbMV0gPSBjb25maWcubGFuZ3VhZ2VbMV07Ci0gICAgICAgIGlmIChjb25maWcuY291bnRyeVswXSAhPSAwKSB7Ci0gICAgICAgICAgICBzcGVjWzJdID0gJ18nOwotICAgICAgICAgICAgc3BlY1szXSA9IGNvbmZpZy5jb3VudHJ5WzBdOwotICAgICAgICAgICAgc3BlY1s0XSA9IGNvbmZpZy5jb3VudHJ5WzFdOwotICAgICAgICAgICAgc3BlY1s1XSA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzcGVjWzNdID0gMDsKLSAgICAgICAgfQotICAgICAgICBzZXRMb2NhbGVMb2NrZWQoc3BlYyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdXBkYXRlUmVzb3VyY2VQYXJhbXNMb2NrZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQXNzZXRNYW5hZ2VyOjpnZXRDb25maWd1cmF0aW9uKFJlc1RhYmxlX2NvbmZpZyogb3V0Q29uZmlnKSBjb25zdAotewotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0gICAgKm91dENvbmZpZyA9ICptQ29uZmlnOwotfQotCi0vKgotICogT3BlbiBhbiBhc3NldC4KLSAqCi0gKiBUaGUgZGF0YSBjb3VsZCBiZTsKLSAqICAtIEluIGEgZmlsZSBvbiBkaXNrIChhc3NldEJhc2UgKyBmaWxlTmFtZSkuCi0gKiAgLSBJbiBhIGNvbXByZXNzZWQgZmlsZSBvbiBkaXNrIChhc3NldEJhc2UgKyBmaWxlTmFtZS5neikuCi0gKiAgLSBJbiBhIFppcCBhcmNoaXZlLCB1bmNvbXByZXNzZWQgb3IgY29tcHJlc3NlZC4KLSAqCi0gKiBJdCBjYW4gYmUgaW4gYSBudW1iZXIgb2YgZGlmZmVyZW50IGRpcmVjdG9yaWVzIGFuZCBaaXAgYXJjaGl2ZXMuCi0gKiBUaGUgc2VhcmNoIG9yZGVyIGlzOgotICogIC0gW2FwcG5hbWVdCi0gKiAgICAtIGxvY2FsZSArIHZlbmRvcgotICogICAgLSAiZGVmYXVsdCIgKyB2ZW5kb3IKLSAqICAgIC0gbG9jYWxlICsgImRlZmF1bHQiCi0gKiAgICAtICJkZWZhdWx0ICsgImRlZmF1bHQiCi0gKiAgLSAiY29tbW9uIgotICogICAgLSAoc2FtZSBhcyBhYm92ZSkKLSAqCi0gKiBUbyBmaW5kIGEgcGFydGljdWxhciBmaWxlLCB3ZSBoYXZlIHRvIHRyeSB1cCB0byBlaWdodCBwYXRocyB3aXRoCi0gKiBhbGwgdGhyZWUgZm9ybXMgb2YgZGF0YS4KLSAqCi0gKiBXZSBzaG91bGQgcHJvYmFibHkgcmVqZWN0IHJlcXVlc3RzIGZvciAiaWxsZWdhbCIgZmlsZW5hbWVzLCBlLmcuIHRob3NlCi0gKiB3aXRoIGlsbGVnYWwgY2hhcmFjdGVycyBvciAiLi4vIiBiYWNrd2FyZCByZWxhdGl2ZSBwYXRocy4KLSAqLwotQXNzZXQqIEFzc2V0TWFuYWdlcjo6b3Blbihjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlKQotewotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0KLSAgICBMT0dfRkFUQUxfSUYobUFzc2V0UGF0aHMuc2l6ZSgpID09IDAsICJObyBhc3NldHMgYWRkZWQgdG8gQXNzZXRNYW5hZ2VyIik7Ci0KLQotICAgIGlmIChtQ2FjaGVNb2RlICE9IENBQ0hFX09GRiAmJiAhbUNhY2hlVmFsaWQpCi0gICAgICAgIGxvYWRGaWxlTmFtZUNhY2hlTG9ja2VkKCk7Ci0KLSAgICBTdHJpbmc4IGFzc2V0TmFtZShrQXNzZXRzUm9vdCk7Ci0gICAgYXNzZXROYW1lLmFwcGVuZFBhdGgoZmlsZU5hbWUpOwotCi0gICAgLyoKLSAgICAgKiBGb3IgZWFjaCB0b3AtbGV2ZWwgYXNzZXQgcGF0aCwgc2VhcmNoIGZvciB0aGUgYXNzZXQuCi0gICAgICovCi0KLSAgICBzaXplX3QgaSA9IG1Bc3NldFBhdGhzLnNpemUoKTsKLSAgICB3aGlsZSAoaSA+IDApIHsKLSAgICAgICAgaS0tOwotICAgICAgICBBTE9HVigiTG9va2luZyBmb3IgYXNzZXQgJyVzJyBpbiAnJXMnXG4iLAotICAgICAgICAgICAgICAgIGFzc2V0TmFtZS5zdHJpbmcoKSwgbUFzc2V0UGF0aHMuaXRlbUF0KGkpLnBhdGguc3RyaW5nKCkpOwotICAgICAgICBBc3NldCogcEFzc2V0ID0gb3Blbk5vbkFzc2V0SW5QYXRoTG9ja2VkKGFzc2V0TmFtZS5zdHJpbmcoKSwgbW9kZSwgbUFzc2V0UGF0aHMuaXRlbUF0KGkpKTsKLSAgICAgICAgaWYgKHBBc3NldCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gcEFzc2V0ICE9IGtFeGNsdWRlZEFzc2V0ID8gcEFzc2V0IDogTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQotCi0vKgotICogT3BlbiBhIG5vbi1hc3NldCBmaWxlIGFzIGlmIGl0IHdlcmUgYW4gYXNzZXQuCi0gKgotICogVGhlICJmaWxlTmFtZSIgaXMgdGhlIHBhcnRpYWwgcGF0aCBzdGFydGluZyBmcm9tIHRoZSBhcHBsaWNhdGlvbgotICogbmFtZS4KLSAqLwotQXNzZXQqIEFzc2V0TWFuYWdlcjo6b3Blbk5vbkFzc2V0KGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBBY2Nlc3NNb2RlIG1vZGUpCi17Ci0gICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLQotICAgIExPR19GQVRBTF9JRihtQXNzZXRQYXRocy5zaXplKCkgPT0gMCwgIk5vIGFzc2V0cyBhZGRlZCB0byBBc3NldE1hbmFnZXIiKTsKLQotCi0gICAgaWYgKG1DYWNoZU1vZGUgIT0gQ0FDSEVfT0ZGICYmICFtQ2FjaGVWYWxpZCkKLSAgICAgICAgbG9hZEZpbGVOYW1lQ2FjaGVMb2NrZWQoKTsKLQotICAgIC8qCi0gICAgICogRm9yIGVhY2ggdG9wLWxldmVsIGFzc2V0IHBhdGgsIHNlYXJjaCBmb3IgdGhlIGFzc2V0LgotICAgICAqLwotCi0gICAgc2l6ZV90IGkgPSBtQXNzZXRQYXRocy5zaXplKCk7Ci0gICAgd2hpbGUgKGkgPiAwKSB7Ci0gICAgICAgIGktLTsKLSAgICAgICAgQUxPR1YoIkxvb2tpbmcgZm9yIG5vbi1hc3NldCAnJXMnIGluICclcydcbiIsIGZpbGVOYW1lLCBtQXNzZXRQYXRocy5pdGVtQXQoaSkucGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgIEFzc2V0KiBwQXNzZXQgPSBvcGVuTm9uQXNzZXRJblBhdGhMb2NrZWQoCi0gICAgICAgICAgICBmaWxlTmFtZSwgbW9kZSwgbUFzc2V0UGF0aHMuaXRlbUF0KGkpKTsKLSAgICAgICAgaWYgKHBBc3NldCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gcEFzc2V0ICE9IGtFeGNsdWRlZEFzc2V0ID8gcEFzc2V0IDogTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQotCi1Bc3NldCogQXNzZXRNYW5hZ2VyOjpvcGVuTm9uQXNzZXQodm9pZCogY29va2llLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlKQotewotICAgIGNvbnN0IHNpemVfdCB3aGljaCA9ICgoc2l6ZV90KWNvb2tpZSktMTsKLQotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0KLSAgICBMT0dfRkFUQUxfSUYobUFzc2V0UGF0aHMuc2l6ZSgpID09IDAsICJObyBhc3NldHMgYWRkZWQgdG8gQXNzZXRNYW5hZ2VyIik7Ci0KLQotICAgIGlmIChtQ2FjaGVNb2RlICE9IENBQ0hFX09GRiAmJiAhbUNhY2hlVmFsaWQpCi0gICAgICAgIGxvYWRGaWxlTmFtZUNhY2hlTG9ja2VkKCk7Ci0KLSAgICBpZiAod2hpY2ggPCBtQXNzZXRQYXRocy5zaXplKCkpIHsKLSAgICAgICAgQUxPR1YoIkxvb2tpbmcgZm9yIG5vbi1hc3NldCAnJXMnIGluICclcydcbiIsIGZpbGVOYW1lLAotICAgICAgICAgICAgICAgIG1Bc3NldFBhdGhzLml0ZW1BdCh3aGljaCkucGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgIEFzc2V0KiBwQXNzZXQgPSBvcGVuTm9uQXNzZXRJblBhdGhMb2NrZWQoCi0gICAgICAgICAgICBmaWxlTmFtZSwgbW9kZSwgbUFzc2V0UGF0aHMuaXRlbUF0KHdoaWNoKSk7Ci0gICAgICAgIGlmIChwQXNzZXQgIT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIHBBc3NldCAhPSBrRXhjbHVkZWRBc3NldCA/IHBBc3NldCA6IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIEdldCB0aGUgdHlwZSBvZiBhIGZpbGUgaW4gdGhlIGFzc2V0IG5hbWVzcGFjZS4KLSAqCi0gKiBUaGlzIGN1cnJlbnRseSBvbmx5IHdvcmtzIGZvciByZWd1bGFyIGZpbGVzLiAgQWxsIG90aGVycyAoaW5jbHVkaW5nCi0gKiBkaXJlY3Rvcmllcykgd2lsbCByZXR1cm4ga0ZpbGVUeXBlTm9uZXhpc3RlbnQuCi0gKi8KLUZpbGVUeXBlIEFzc2V0TWFuYWdlcjo6Z2V0RmlsZVR5cGUoY29uc3QgY2hhciogZmlsZU5hbWUpCi17Ci0gICAgQXNzZXQqIHBBc3NldCA9IE5VTEw7Ci0KLSAgICAvKgotICAgICAqIE9wZW4gdGhlIGFzc2V0LiAgVGhpcyBpcyBsZXNzIGVmZmljaWVudCB0aGFuIHNpbXBseSBmaW5kaW5nIHRoZQotICAgICAqIGZpbGUsIGJ1dCBpdCdzIG5vdCB0b28gYmFkICh3ZSBkb24ndCB1bmNvbXByZXNzIG9yIG1tYXAgZGF0YSB1bnRpbAotICAgICAqIHRoZSBmaXJzdCByZWFkKCkgY2FsbCkuCi0gICAgICovCi0gICAgcEFzc2V0ID0gb3BlbihmaWxlTmFtZSwgQXNzZXQ6OkFDQ0VTU19TVFJFQU1JTkcpOwotICAgIGRlbGV0ZSBwQXNzZXQ7Ci0KLSAgICBpZiAocEFzc2V0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBrRmlsZVR5cGVOb25leGlzdGVudDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBrRmlsZVR5cGVSZWd1bGFyOwotfQotCi1jb25zdCBSZXNUYWJsZSogQXNzZXRNYW5hZ2VyOjpnZXRSZXNUYWJsZShib29sIHJlcXVpcmVkKSBjb25zdAotewotICAgIFJlc1RhYmxlKiBydCA9IG1SZXNvdXJjZXM7Ci0gICAgaWYgKHJ0KSB7Ci0gICAgICAgIHJldHVybiBydDsKLSAgICB9Ci0KLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIGFzc2V0IHBhY2thZ2VzLCBjb2xsZWN0aW5nIHJlc291cmNlcyBmcm9tIGVhY2guCi0KLSAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotCi0gICAgaWYgKG1SZXNvdXJjZXMgIT0gTlVMTCkgewotICAgICAgICByZXR1cm4gbVJlc291cmNlczsKLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZWQpIHsKLSAgICAgICAgTE9HX0ZBVEFMX0lGKG1Bc3NldFBhdGhzLnNpemUoKSA9PSAwLCAiTm8gYXNzZXRzIGFkZGVkIHRvIEFzc2V0TWFuYWdlciIpOwotICAgIH0KLQotICAgIGlmIChtQ2FjaGVNb2RlICE9IENBQ0hFX09GRiAmJiAhbUNhY2hlVmFsaWQpCi0gICAgICAgIGNvbnN0X2Nhc3Q8QXNzZXRNYW5hZ2VyKj4odGhpcyktPmxvYWRGaWxlTmFtZUNhY2hlTG9ja2VkKCk7Ci0KLSAgICBjb25zdCBzaXplX3QgTiA9IG1Bc3NldFBhdGhzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIEFzc2V0KiBhc3MgPSBOVUxMOwotICAgICAgICBSZXNUYWJsZSogc2hhcmVkUmVzID0gTlVMTDsKLSAgICAgICAgYm9vbCBzaGFyZWQgPSB0cnVlOwotICAgICAgICBjb25zdCBhc3NldF9wYXRoJiBhcCA9IG1Bc3NldFBhdGhzLml0ZW1BdChpKTsKLSAgICAgICAgTVlfVFJBQ0VfQkVHSU4oYXAucGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgIEFzc2V0KiBpZG1hcCA9IG9wZW5JZG1hcExvY2tlZChhcCk7Ci0gICAgICAgIEFMT0dWKCJMb29raW5nIGZvciByZXNvdXJjZSBhc3NldCBpbiAnJXMnXG4iLCBhcC5wYXRoLnN0cmluZygpKTsKLSAgICAgICAgaWYgKGFwLnR5cGUgIT0ga0ZpbGVUeXBlRGlyZWN0b3J5KSB7Ci0gICAgICAgICAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGl0ZW0gaXMgdHlwaWNhbGx5IHRoZSBmcmFtZXdvcmsgcmVzb3VyY2VzLAotICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdlIHdhbnQgdG8gYXZvaWQgcGFyc2luZyBldmVyeSB0aW1lLgotICAgICAgICAgICAgICAgIHNoYXJlZFJlcyA9IGNvbnN0X2Nhc3Q8QXNzZXRNYW5hZ2VyKj4odGhpcyktPgotICAgICAgICAgICAgICAgICAgICBtWmlwU2V0LmdldFppcFJlc291cmNlVGFibGUoYXAucGF0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2hhcmVkUmVzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBhc3MgPSBjb25zdF9jYXN0PEFzc2V0TWFuYWdlcio+KHRoaXMpLT4KLSAgICAgICAgICAgICAgICAgICAgbVppcFNldC5nZXRaaXBSZXNvdXJjZVRhYmxlQXNzZXQoYXAucGF0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFzcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dWKCJsb2FkaW5nIHJlc291cmNlIHRhYmxlICVzXG4iLCBhcC5wYXRoLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzID0gY29uc3RfY2FzdDxBc3NldE1hbmFnZXIqPih0aGlzKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVuTm9uQXNzZXRJblBhdGhMb2NrZWQoInJlc291cmNlcy5hcnNjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NldDo6QUNDRVNTX0JVRkZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhc3MgIT0gTlVMTCAmJiBhc3MgIT0ga0V4Y2x1ZGVkQXNzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzcyA9IGNvbnN0X2Nhc3Q8QXNzZXRNYW5hZ2VyKj4odGhpcyktPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1aaXBTZXQuc2V0WmlwUmVzb3VyY2VUYWJsZUFzc2V0KGFwLnBhdGgsIGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaSA9PSAwICYmIGFzcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IHJlc291cmNlIHRhYmxlIGluIHRoZSBhc3NldAotICAgICAgICAgICAgICAgICAgICAvLyBtYW5hZ2VyLCB0aGVuIHdlIGFyZSBnb2luZyB0byBjYWNoZSBpdCBzbyB0aGF0IHdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNhbiBxdWlja2x5IGNvcHkgaXQgb3V0IGZvciBvdGhlcnMuCi0gICAgICAgICAgICAgICAgICAgIEFMT0dWKCJDcmVhdGluZyBzaGFyZWQgcmVzb3VyY2VzIGZvciAlcyIsIGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZXMgPSBuZXcgUmVzVGFibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVzLT5hZGQoYXNzLCAodm9pZCopKGkrMSksIGZhbHNlLCBpZG1hcCk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlcyA9IGNvbnN0X2Nhc3Q8QXNzZXRNYW5hZ2VyKj4odGhpcyktPgotICAgICAgICAgICAgICAgICAgICAgICAgbVppcFNldC5zZXRaaXBSZXNvdXJjZVRhYmxlKGFwLnBhdGgsIHNoYXJlZFJlcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR1YoImxvYWRpbmcgcmVzb3VyY2UgdGFibGUgJXNcbiIsIGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgYXNzID0gY29uc3RfY2FzdDxBc3NldE1hbmFnZXIqPih0aGlzKS0+Ci0gICAgICAgICAgICAgICAgb3Blbk5vbkFzc2V0SW5QYXRoTG9ja2VkKCJyZXNvdXJjZXMuYXJzYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2V0OjpBQ0NFU1NfQlVGRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcCk7Ci0gICAgICAgICAgICBzaGFyZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKGFzcyAhPSBOVUxMIHx8IHNoYXJlZFJlcyAhPSBOVUxMKSAmJiBhc3MgIT0ga0V4Y2x1ZGVkQXNzZXQpIHsKLSAgICAgICAgICAgIGlmIChydCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbVJlc291cmNlcyA9IHJ0ID0gbmV3IFJlc1RhYmxlKCk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlUmVzb3VyY2VQYXJhbXNMb2NrZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFMT0dWKCJJbnN0YWxsaW5nIHJlc291cmNlIGFzc2V0ICVwIGluIHRvIHRhYmxlICVwXG4iLCBhc3MsIG1SZXNvdXJjZXMpOwotICAgICAgICAgICAgaWYgKHNoYXJlZFJlcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1YoIkNvcHlpbmcgZXhpc3RpbmcgcmVzb3VyY2VzIGZvciAlcyIsIGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJ0LT5hZGQoc2hhcmVkUmVzKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQUxPR1YoIlBhcnNpbmcgcmVzb3VyY2VzIGZvciAlcyIsIGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJ0LT5hZGQoYXNzLCAodm9pZCopKGkrMSksICFzaGFyZWQsIGlkbWFwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzaGFyZWQpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgYXNzOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChpZG1hcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBkZWxldGUgaWRtYXA7Ci0gICAgICAgIH0KLSAgICAgICAgTVlfVFJBQ0VfRU5EKCk7Ci0gICAgfQotCi0gICAgaWYgKHJlcXVpcmVkICYmICFydCkgQUxPR1coIlVuYWJsZSB0byBmaW5kIHJlc291cmNlcyBmaWxlIHJlc291cmNlcy5hcnNjIik7Ci0gICAgaWYgKCFydCkgewotICAgICAgICBtUmVzb3VyY2VzID0gcnQgPSBuZXcgUmVzVGFibGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJ0OwotfQotCi12b2lkIEFzc2V0TWFuYWdlcjo6dXBkYXRlUmVzb3VyY2VQYXJhbXNMb2NrZWQoKSBjb25zdAotewotICAgIFJlc1RhYmxlKiByZXMgPSBtUmVzb3VyY2VzOwotICAgIGlmICghcmVzKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzaXplX3QgbGxlbiA9IG1Mb2NhbGUgPyBzdHJsZW4obUxvY2FsZSkgOiAwOwotICAgIG1Db25maWctPmxhbmd1YWdlWzBdID0gMDsKLSAgICBtQ29uZmlnLT5sYW5ndWFnZVsxXSA9IDA7Ci0gICAgbUNvbmZpZy0+Y291bnRyeVswXSA9IDA7Ci0gICAgbUNvbmZpZy0+Y291bnRyeVsxXSA9IDA7Ci0gICAgaWYgKGxsZW4gPj0gMikgewotICAgICAgICBtQ29uZmlnLT5sYW5ndWFnZVswXSA9IG1Mb2NhbGVbMF07Ci0gICAgICAgIG1Db25maWctPmxhbmd1YWdlWzFdID0gbUxvY2FsZVsxXTsKLSAgICB9Ci0gICAgaWYgKGxsZW4gPj0gNSkgewotICAgICAgICBtQ29uZmlnLT5jb3VudHJ5WzBdID0gbUxvY2FsZVszXTsKLSAgICAgICAgbUNvbmZpZy0+Y291bnRyeVsxXSA9IG1Mb2NhbGVbNF07Ci0gICAgfQotICAgIG1Db25maWctPnNpemUgPSBzaXplb2YoKm1Db25maWcpOwotCi0gICAgcmVzLT5zZXRQYXJhbWV0ZXJzKG1Db25maWcpOwotfQotCi1Bc3NldCogQXNzZXRNYW5hZ2VyOjpvcGVuSWRtYXBMb2NrZWQoY29uc3Qgc3RydWN0IGFzc2V0X3BhdGgmIGFwKSBjb25zdAotewotICAgIEFzc2V0KiBhc3MgPSBOVUxMOwotICAgIGlmIChhcC5pZG1hcC5zaXplKCkgIT0gMCkgewotICAgICAgICBhc3MgPSBjb25zdF9jYXN0PEFzc2V0TWFuYWdlcio+KHRoaXMpLT4KLSAgICAgICAgICAgIG9wZW5Bc3NldEZyb21GaWxlTG9ja2VkKGFwLmlkbWFwLCBBc3NldDo6QUNDRVNTX0JVRkZFUik7Ci0gICAgICAgIGlmIChhc3MpIHsKLSAgICAgICAgICAgIEFMT0dWKCJsb2FkaW5nIGlkbWFwICVzXG4iLCBhcC5pZG1hcC5zdHJpbmcoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVygiZmFpbGVkIHRvIGxvYWQgaWRtYXAgJXNcbiIsIGFwLmlkbWFwLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYXNzOwotfQotCi1jb25zdCBSZXNUYWJsZSYgQXNzZXRNYW5hZ2VyOjpnZXRSZXNvdXJjZXMoYm9vbCByZXF1aXJlZCkgY29uc3QKLXsKLSAgICBjb25zdCBSZXNUYWJsZSogcnQgPSBnZXRSZXNUYWJsZShyZXF1aXJlZCk7Ci0gICAgcmV0dXJuICpydDsKLX0KLQotYm9vbCBBc3NldE1hbmFnZXI6OmlzVXBUb0RhdGUoKQotewotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0gICAgcmV0dXJuIG1aaXBTZXQuaXNVcFRvRGF0ZSgpOwotfQotCi12b2lkIEFzc2V0TWFuYWdlcjo6Z2V0TG9jYWxlcyhWZWN0b3I8U3RyaW5nOD4qIGxvY2FsZXMpIGNvbnN0Ci17Ci0gICAgUmVzVGFibGUqIHJlcyA9IG1SZXNvdXJjZXM7Ci0gICAgaWYgKHJlcyAhPSBOVUxMKSB7Ci0gICAgICAgIHJlcy0+Z2V0TG9jYWxlcyhsb2NhbGVzKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBPcGVuIGEgbm9uLWFzc2V0IGZpbGUgYXMgaWYgaXQgd2VyZSBhbiBhc3NldCwgc2VhcmNoaW5nIGZvciBpdCBpbiB0aGUKLSAqIHNwZWNpZmllZCBhcHAuCi0gKgotICogUGFzcyBpbiBhIE5VTEwgdmFsdWVzIGZvciAiYXBwTmFtZSIgaWYgdGhlIGNvbW1vbiBhcHAgZGlyZWN0b3J5IHNob3VsZAotICogYmUgdXNlZC4KLSAqLwotQXNzZXQqIEFzc2V0TWFuYWdlcjo6b3Blbk5vbkFzc2V0SW5QYXRoTG9ja2VkKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBBY2Nlc3NNb2RlIG1vZGUsCi0gICAgY29uc3QgYXNzZXRfcGF0aCYgYXApCi17Ci0gICAgQXNzZXQqIHBBc3NldCA9IE5VTEw7Ci0KLSAgICAvKiBsb29rIGF0IHRoZSBmaWxlc3lzdGVtIG9uIGRpc2sgKi8KLSAgICBpZiAoYXAudHlwZSA9PSBrRmlsZVR5cGVEaXJlY3RvcnkpIHsKLSAgICAgICAgU3RyaW5nOCBwYXRoKGFwLnBhdGgpOwotICAgICAgICBwYXRoLmFwcGVuZFBhdGgoZmlsZU5hbWUpOwotCi0gICAgICAgIHBBc3NldCA9IG9wZW5Bc3NldEZyb21GaWxlTG9ja2VkKHBhdGgsIG1vZGUpOwotCi0gICAgICAgIGlmIChwQXNzZXQgPT0gTlVMTCkgewotICAgICAgICAgICAgLyogdHJ5IGFnYWluLCB0aGlzIHRpbWUgd2l0aCAiLmd6IiAqLwotICAgICAgICAgICAgcGF0aC5hcHBlbmQoIi5neiIpOwotICAgICAgICAgICAgcEFzc2V0ID0gb3BlbkFzc2V0RnJvbUZpbGVMb2NrZWQocGF0aCwgbW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocEFzc2V0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIC8vcHJpbnRmKCJGT1VORCBOQSAnJXMnIG9uIGRpc2tcbiIsIGZpbGVOYW1lKTsKLSAgICAgICAgICAgIHBBc3NldC0+c2V0QXNzZXRTb3VyY2UocGF0aCk7Ci0gICAgICAgIH0KLQotICAgIC8qIGxvb2sgaW5zaWRlIHRoZSB6aXAgZmlsZSAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZzggcGF0aChmaWxlTmFtZSk7Ci0KLSAgICAgICAgLyogY2hlY2sgdGhlIGFwcHJvcHJpYXRlIFppcCBmaWxlICovCi0gICAgICAgIFppcEZpbGVSTyogcFppcCA9IGdldFppcEZpbGVMb2NrZWQoYXApOwotICAgICAgICBpZiAocFppcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvL3ByaW50ZigiR09UIHppcCwgY2hlY2tpbmcgTkEgJyVzJ1xuIiwgKGNvbnN0IGNoYXIqKSBwYXRoKTsKLSAgICAgICAgICAgIFppcEVudHJ5Uk8gZW50cnkgPSBwWmlwLT5maW5kRW50cnlCeU5hbWUocGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoZW50cnkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJGT1VORCBOQSBpbiBaaXAgZmlsZSBmb3IgJXNcbiIsIGFwcE5hbWUgPyBhcHBOYW1lIDoga0FwcENvbW1vbik7Ci0gICAgICAgICAgICAgICAgcEFzc2V0ID0gb3BlbkFzc2V0RnJvbVppcExvY2tlZChwWmlwLCBlbnRyeSwgbW9kZSwgcGF0aCk7Ci0gICAgICAgICAgICAgICAgcFppcC0+cmVsZWFzZUVudHJ5KGVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwQXNzZXQgIT0gTlVMTCkgewotICAgICAgICAgICAgLyogY3JlYXRlIGEgInNvdXJjZSIgbmFtZSwgZm9yIGRlYnVnL2Rpc3BsYXkgKi8KLSAgICAgICAgICAgIHBBc3NldC0+c2V0QXNzZXRTb3VyY2UoCi0gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVppcFNvdXJjZU5hbWVMb2NrZWQoWmlwU2V0OjpnZXRQYXRoTmFtZShhcC5wYXRoLnN0cmluZygpKSwgU3RyaW5nOCgiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGZpbGVOYW1lKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBBc3NldDsKLX0KLQotLyoKLSAqIE9wZW4gYW4gYXNzZXQsIHNlYXJjaGluZyBmb3IgaXQgaW4gdGhlIGRpcmVjdG9yeSBoaWVyYXJjaHkgZm9yIHRoZQotICogc3BlY2lmaWVkIGFwcC4KLSAqCi0gKiBQYXNzIGluIGEgTlVMTCB2YWx1ZXMgZm9yICJhcHBOYW1lIiBpZiB0aGUgY29tbW9uIGFwcCBkaXJlY3Rvcnkgc2hvdWxkCi0gKiBiZSB1c2VkLgotICovCi1Bc3NldCogQXNzZXRNYW5hZ2VyOjpvcGVuSW5QYXRoTG9ja2VkKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBBY2Nlc3NNb2RlIG1vZGUsCi0gICAgY29uc3QgYXNzZXRfcGF0aCYgYXApCi17Ci0gICAgQXNzZXQqIHBBc3NldCA9IE5VTEw7Ci0KLSAgICAvKgotICAgICAqIFRyeSB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBsb2NhbGUgYW5kIHZlbmRvci4KLSAgICAgKi8KLSAgICBpZiAobUxvY2FsZSAhPSBOVUxMICYmIG1WZW5kb3IgIT0gTlVMTCkKLSAgICAgICAgcEFzc2V0ID0gb3BlbkluTG9jYWxlVmVuZG9yTG9ja2VkKGZpbGVOYW1lLCBtb2RlLCBhcCwgbUxvY2FsZSwgbVZlbmRvcik7Ci0gICAgaWYgKHBBc3NldCA9PSBOVUxMICYmIG1WZW5kb3IgIT0gTlVMTCkKLSAgICAgICAgcEFzc2V0ID0gb3BlbkluTG9jYWxlVmVuZG9yTG9ja2VkKGZpbGVOYW1lLCBtb2RlLCBhcCwgTlVMTCwgbVZlbmRvcik7Ci0gICAgaWYgKHBBc3NldCA9PSBOVUxMICYmIG1Mb2NhbGUgIT0gTlVMTCkKLSAgICAgICAgcEFzc2V0ID0gb3BlbkluTG9jYWxlVmVuZG9yTG9ja2VkKGZpbGVOYW1lLCBtb2RlLCBhcCwgbUxvY2FsZSwgTlVMTCk7Ci0gICAgaWYgKHBBc3NldCA9PSBOVUxMKQotICAgICAgICBwQXNzZXQgPSBvcGVuSW5Mb2NhbGVWZW5kb3JMb2NrZWQoZmlsZU5hbWUsIG1vZGUsIGFwLCBOVUxMLCBOVUxMKTsKLQotICAgIHJldHVybiBwQXNzZXQ7Ci19Ci0KLS8qCi0gKiBPcGVuIGFuIGFzc2V0LCBzZWFyY2hpbmcgZm9yIGl0IGluIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5IGZvciB0aGUKLSAqIHNwZWNpZmllZCBsb2NhbGUgYW5kIHZlbmRvci4KLSAqCi0gKiBXZSBhbHNvIHNlYXJjaCBpbiAiYXBwLmphciIuCi0gKgotICogUGFzcyBpbiBOVUxMIHZhbHVlcyBmb3IgImFwcE5hbWUiLCAibG9jYWxlIiwgYW5kICJ2ZW5kb3IiIGlmIHRoZQotICogZGVmYXVsdHMgc2hvdWxkIGJlIHVzZWQuCi0gKi8KLUFzc2V0KiBBc3NldE1hbmFnZXI6Om9wZW5JbkxvY2FsZVZlbmRvckxvY2tlZChjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlLAotICAgIGNvbnN0IGFzc2V0X3BhdGgmIGFwLCBjb25zdCBjaGFyKiBsb2NhbGUsIGNvbnN0IGNoYXIqIHZlbmRvcikKLXsKLSAgICBBc3NldCogcEFzc2V0ID0gTlVMTDsKLQotICAgIGlmIChhcC50eXBlID09IGtGaWxlVHlwZURpcmVjdG9yeSkgewotICAgICAgICBpZiAobUNhY2hlTW9kZSA9PSBDQUNIRV9PRkYpIHsKLSAgICAgICAgICAgIC8qIGxvb2sgYXQgdGhlIGZpbGVzeXN0ZW0gb24gZGlzayAqLwotICAgICAgICAgICAgU3RyaW5nOCBwYXRoKGNyZWF0ZVBhdGhOYW1lTG9ja2VkKGFwLCBsb2NhbGUsIHZlbmRvcikpOwotICAgICAgICAgICAgcGF0aC5hcHBlbmRQYXRoKGZpbGVOYW1lKTsKLQotICAgICAgICAgICAgU3RyaW5nOCBleGNsdWRlTmFtZShwYXRoKTsKLSAgICAgICAgICAgIGV4Y2x1ZGVOYW1lLmFwcGVuZChrRXhjbHVkZUV4dGVuc2lvbik7Ci0gICAgICAgICAgICBpZiAoOjpnZXRGaWxlVHlwZShleGNsdWRlTmFtZS5zdHJpbmcoKSkgIT0ga0ZpbGVUeXBlTm9uZXhpc3RlbnQpIHsKLSAgICAgICAgICAgICAgICAvKiBzYXkgbm8gbW9yZSAqLwotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCIrKysgZXhjbHVkaW5nICclcydcbiIsIChjb25zdCBjaGFyKikgZXhjbHVkZU5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiBrRXhjbHVkZWRBc3NldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcEFzc2V0ID0gb3BlbkFzc2V0RnJvbUZpbGVMb2NrZWQocGF0aCwgbW9kZSk7Ci0KLSAgICAgICAgICAgIGlmIChwQXNzZXQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIC8qIHRyeSBhZ2FpbiwgdGhpcyB0aW1lIHdpdGggIi5neiIgKi8KLSAgICAgICAgICAgICAgICBwYXRoLmFwcGVuZCgiLmd6Iik7Ci0gICAgICAgICAgICAgICAgcEFzc2V0ID0gb3BlbkFzc2V0RnJvbUZpbGVMb2NrZWQocGF0aCwgbW9kZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwQXNzZXQgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBwQXNzZXQtPnNldEFzc2V0U291cmNlKHBhdGgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogZmluZCBpbiBjYWNoZSAqLwotICAgICAgICAgICAgU3RyaW5nOCBwYXRoKGNyZWF0ZVBhdGhOYW1lTG9ja2VkKGFwLCBsb2NhbGUsIHZlbmRvcikpOwotICAgICAgICAgICAgcGF0aC5hcHBlbmRQYXRoKGZpbGVOYW1lKTsKLQotICAgICAgICAgICAgQXNzZXREaXI6OkZpbGVJbmZvIHRtcEluZm87Ci0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIFN0cmluZzggZXhjbHVkZU5hbWUocGF0aCk7Ci0gICAgICAgICAgICBleGNsdWRlTmFtZS5hcHBlbmQoa0V4Y2x1ZGVFeHRlbnNpb24pOwotCi0gICAgICAgICAgICBpZiAobUNhY2hlLmluZGV4T2YoZXhjbHVkZU5hbWUpICE9IE5BTUVfTk9UX0ZPVU5EKSB7Ci0gICAgICAgICAgICAgICAgLyogZ28gbm8gZmFydGhlciAqLwotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCIrKysgRXhjbHVkaW5nICclcydcbiIsIChjb25zdCBjaGFyKikgZXhjbHVkZU5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiBrRXhjbHVkZWRBc3NldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIEZpbGUgY29tcHJlc3Npb24gZXh0ZW5zaW9ucyAoIi5neiIpIGRvbid0IGdldCBzdG9yZWQgaW4gdGhlCi0gICAgICAgICAgICAgKiBuYW1lIGNhY2hlLCBzbyB3ZSBoYXZlIHRvIHRyeSBib3RoIGhlcmUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChtQ2FjaGUuaW5kZXhPZihwYXRoKSAhPSBOQU1FX05PVF9GT1VORCkgewotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBwQXNzZXQgPSBvcGVuQXNzZXRGcm9tRmlsZUxvY2tlZChwYXRoLCBtb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocEFzc2V0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogdHJ5IGFnYWluLCB0aGlzIHRpbWUgd2l0aCAiLmd6IiAqLwotICAgICAgICAgICAgICAgICAgICBwYXRoLmFwcGVuZCgiLmd6Iik7Ci0gICAgICAgICAgICAgICAgICAgIHBBc3NldCA9IG9wZW5Bc3NldEZyb21GaWxlTG9ja2VkKHBhdGgsIG1vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHBBc3NldCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHBBc3NldC0+c2V0QXNzZXRTb3VyY2UocGF0aCk7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBEb24ndCBjb250aW51ZSB0aGUgc2VhcmNoIGludG8gdGhlIFppcCBmaWxlcy4gIE91ciBjYWNoZWQgaW5mbwotICAgICAgICAgICAgICogc2FpZCBpdCB3YXMgYSBmaWxlIG9uIGRpc2s7IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBvcGVuRGlyKCkKLSAgICAgICAgICAgICAqIHdlIHdhbnQgdG8gcmV0dXJuIHRoZSBsb29zZSBhc3NldC4gIElmIHRoZSBjYWNoZWQgZmlsZSBnZXRzCi0gICAgICAgICAgICAgKiByZW1vdmVkLCB3ZSBmYWlsLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIFRoZSBhbHRlcm5hdGl2ZSBpcyB0byB1cGRhdGUgb3VyIGNhY2hlIHdoZW4gZmlsZXMgZ2V0IGRlbGV0ZWQsCi0gICAgICAgICAgICAgKiBvciBtYWtlIHNvbWUgc29ydCBvZiAiYmVzdCBlZmZvcnQiIHByb21pc2UsIGJ1dCBmb3Igbm93IEknbQotICAgICAgICAgICAgICogdGFraW5nIHRoZSBoYXJkIGxpbmUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChmb3VuZCkgewotICAgICAgICAgICAgICAgIGlmIChwQXNzZXQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgQUxPR0QoIkV4cGVjdGVkIGZpbGUgbm90IGZvdW5kOiAnJXMnXG4iLCBwYXRoLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcEFzc2V0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBFaXRoZXIgaXQgd2Fzbid0IGZvdW5kIG9uIGRpc2sgb3Igb24gdGhlIGNhY2hlZCB2aWV3IG9mIHRoZSBkaXNrLgotICAgICAqIERpZyB0aHJvdWdoIHRoZSBjdXJyZW50bHktb3BlbmVkIHNldCBvZiBaaXAgZmlsZXMuICBJZiBjYWNoaW5nCi0gICAgICogaXMgZGlzYWJsZWQsIHRoZSBaaXAgZmlsZSBtYXkgZ2V0IHJlb3BlbmVkLgotICAgICAqLwotICAgIGlmIChwQXNzZXQgPT0gTlVMTCAmJiBhcC50eXBlID09IGtGaWxlVHlwZVJlZ3VsYXIpIHsKLSAgICAgICAgU3RyaW5nOCBwYXRoOwotCi0gICAgICAgIHBhdGguYXBwZW5kUGF0aCgobG9jYWxlICE9IE5VTEwpID8gbG9jYWxlIDoga0RlZmF1bHRMb2NhbGUpOwotICAgICAgICBwYXRoLmFwcGVuZFBhdGgoKHZlbmRvciAhPSBOVUxMKSA/IHZlbmRvciA6IGtEZWZhdWx0VmVuZG9yKTsKLSAgICAgICAgcGF0aC5hcHBlbmRQYXRoKGZpbGVOYW1lKTsKLQotICAgICAgICAvKiBjaGVjayB0aGUgYXBwcm9wcmlhdGUgWmlwIGZpbGUgKi8KLSAgICAgICAgWmlwRmlsZVJPKiBwWmlwID0gZ2V0WmlwRmlsZUxvY2tlZChhcCk7Ci0gICAgICAgIGlmIChwWmlwICE9IE5VTEwpIHsKLSAgICAgICAgICAgIC8vcHJpbnRmKCJHT1QgemlwLCBjaGVja2luZyAnJXMnXG4iLCAoY29uc3QgY2hhciopIHBhdGgpOwotICAgICAgICAgICAgWmlwRW50cnlSTyBlbnRyeSA9IHBaaXAtPmZpbmRFbnRyeUJ5TmFtZShwYXRoLnN0cmluZygpKTsKLSAgICAgICAgICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgLy9wcmludGYoIkZPVU5EIGluIFppcCBmaWxlIGZvciAlcy8lcy0lc1xuIiwKLSAgICAgICAgICAgICAgICAvLyAgICBhcHBOYW1lLCBsb2NhbGUsIHZlbmRvcik7Ci0gICAgICAgICAgICAgICAgcEFzc2V0ID0gb3BlbkFzc2V0RnJvbVppcExvY2tlZChwWmlwLCBlbnRyeSwgbW9kZSwgcGF0aCk7Ci0gICAgICAgICAgICAgICAgcFppcC0+cmVsZWFzZUVudHJ5KGVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwQXNzZXQgIT0gTlVMTCkgewotICAgICAgICAgICAgLyogY3JlYXRlIGEgInNvdXJjZSIgbmFtZSwgZm9yIGRlYnVnL2Rpc3BsYXkgKi8KLSAgICAgICAgICAgIHBBc3NldC0+c2V0QXNzZXRTb3VyY2UoY3JlYXRlWmlwU291cmNlTmFtZUxvY2tlZChaaXBTZXQ6OmdldFBhdGhOYW1lKGFwLnBhdGguc3RyaW5nKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoIiIpLCBTdHJpbmc4KGZpbGVOYW1lKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBBc3NldDsKLX0KLQotLyoKLSAqIENyZWF0ZSBhICJzb3VyY2UgbmFtZSIgZm9yIGEgZmlsZSBmcm9tIGEgWmlwIGFyY2hpdmUuCi0gKi8KLVN0cmluZzggQXNzZXRNYW5hZ2VyOjpjcmVhdGVaaXBTb3VyY2VOYW1lTG9ja2VkKGNvbnN0IFN0cmluZzgmIHppcEZpbGVOYW1lLAotICAgIGNvbnN0IFN0cmluZzgmIGRpck5hbWUsIGNvbnN0IFN0cmluZzgmIGZpbGVOYW1lKQotewotICAgIFN0cmluZzggc291cmNlTmFtZSgiemlwOiIpOwotICAgIHNvdXJjZU5hbWUuYXBwZW5kKHppcEZpbGVOYW1lKTsKLSAgICBzb3VyY2VOYW1lLmFwcGVuZCgiOiIpOwotICAgIGlmIChkaXJOYW1lLmxlbmd0aCgpID4gMCkgewotICAgICAgICBzb3VyY2VOYW1lLmFwcGVuZFBhdGgoZGlyTmFtZSk7Ci0gICAgfQotICAgIHNvdXJjZU5hbWUuYXBwZW5kUGF0aChmaWxlTmFtZSk7Ci0gICAgcmV0dXJuIHNvdXJjZU5hbWU7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSBwYXRoIHRvIGEgbG9vc2UgYXNzZXQgKGFzc2V0LWJhc2UvYXBwL2xvY2FsZS92ZW5kb3IpLgotICovCi1TdHJpbmc4IEFzc2V0TWFuYWdlcjo6Y3JlYXRlUGF0aE5hbWVMb2NrZWQoY29uc3QgYXNzZXRfcGF0aCYgYXAsIGNvbnN0IGNoYXIqIGxvY2FsZSwKLSAgICBjb25zdCBjaGFyKiB2ZW5kb3IpCi17Ci0gICAgU3RyaW5nOCBwYXRoKGFwLnBhdGgpOwotICAgIHBhdGguYXBwZW5kUGF0aCgobG9jYWxlICE9IE5VTEwpID8gbG9jYWxlIDoga0RlZmF1bHRMb2NhbGUpOwotICAgIHBhdGguYXBwZW5kUGF0aCgodmVuZG9yICE9IE5VTEwpID8gdmVuZG9yIDoga0RlZmF1bHRWZW5kb3IpOwotICAgIHJldHVybiBwYXRoOwotfQotCi0vKgotICogQ3JlYXRlIGEgcGF0aCB0byBhIGxvb3NlIGFzc2V0IChhc3NldC1iYXNlL2FwcC9yb290RGlyKS4KLSAqLwotU3RyaW5nOCBBc3NldE1hbmFnZXI6OmNyZWF0ZVBhdGhOYW1lTG9ja2VkKGNvbnN0IGFzc2V0X3BhdGgmIGFwLCBjb25zdCBjaGFyKiByb290RGlyKQotewotICAgIFN0cmluZzggcGF0aChhcC5wYXRoKTsKLSAgICBpZiAocm9vdERpciAhPSBOVUxMKSBwYXRoLmFwcGVuZFBhdGgocm9vdERpcik7Ci0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gYSBwb2ludGVyIHRvIG9uZSBvZiBvdXIgb3BlbiBaaXAgYXJjaGl2ZXMuICBSZXR1cm5zIE5VTEwgaWYgbm8KLSAqIG1hdGNoaW5nIFppcCBmaWxlIGV4aXN0cy4KLSAqCi0gKiBSaWdodCBub3cgd2UgaGF2ZSAyIHBvc3NpYmxlIFppcCBmaWxlcyAoMSBlYWNoIGluIGFwcC8iY29tbW9uIikuCi0gKgotICogSWYgY2FjaGluZyBpcyBzZXQgdG8gQ0FDSEVfT0ZGLCB0byBnZXQgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIHdlCi0gKiBuZWVkIHRvIHJlb3BlbiB0aGUgWmlwIGZpbGUgb24gZXZlcnkgcmVxdWVzdC4gIFRoYXQgd291bGQgYmUgc2lsbHkKLSAqIGFuZCBleHBlbnNpdmUsIHNvIGluc3RlYWQgd2UganVzdCBjaGVjayB0aGUgZmlsZSBtb2RpZmljYXRpb24gZGF0ZS4KLSAqCi0gKiBQYXNzIGluIE5VTEwgdmFsdWVzIGZvciAiYXBwTmFtZSIsICJsb2NhbGUiLCBhbmQgInZlbmRvciIgaWYgdGhlCi0gKiBnZW5lcmljcyBzaG91bGQgYmUgdXNlZC4KLSAqLwotWmlwRmlsZVJPKiBBc3NldE1hbmFnZXI6OmdldFppcEZpbGVMb2NrZWQoY29uc3QgYXNzZXRfcGF0aCYgYXApCi17Ci0gICAgQUxPR1YoImdldFppcEZpbGVMb2NrZWQoKSBpbiAlcFxuIiwgdGhpcyk7Ci0KLSAgICByZXR1cm4gbVppcFNldC5nZXRaaXAoYXAucGF0aCk7Ci19Ci0KLS8qCi0gKiBUcnkgdG8gb3BlbiBhbiBhc3NldCBmcm9tIGEgZmlsZSBvbiBkaXNrLgotICoKLSAqIElmIHRoZSBmaWxlIGlzIGNvbXByZXNzZWQgd2l0aCBnemlwLCB3ZSBzZWVrIHRvIHRoZSBzdGFydCBvZiB0aGUKLSAqIGRlZmxhdGVkIGRhdGEgYW5kIHBhc3MgdGhhdCBpbiAoanVzdCBsaWtlIHdlIHdvdWxkIGZvciBhIFppcCBhcmNoaXZlKS4KLSAqCi0gKiBGb3IgdW5jb21wcmVzc2VkIGRhdGEsIHdlIG1heSBhbHJlYWR5IGhhdmUgYW4gbW1hcCgpZWQgdmVyc2lvbiBzaXR0aW5nCi0gKiBhcm91bmQuICBJZiBzbywgd2Ugd2FudCB0byBoYW5kIHRoYXQgdG8gdGhlIEFzc2V0IGluc3RlYWQuCi0gKgotICogVGhpcyByZXR1cm5zIE5VTEwgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgY291bGRuJ3QgYmUgb3BlbmVkLCBvcgotICogY2xhaW1zIHRvIGJlIGEgIi5neiIgYnV0IGlzbid0LgotICovCi1Bc3NldCogQXNzZXRNYW5hZ2VyOjpvcGVuQXNzZXRGcm9tRmlsZUxvY2tlZChjb25zdCBTdHJpbmc4JiBwYXRoTmFtZSwKLSAgICBBY2Nlc3NNb2RlIG1vZGUpCi17Ci0gICAgQXNzZXQqIHBBc3NldCA9IE5VTEw7Ci0KLSAgICBpZiAoc3RyY2FzZWNtcChwYXRoTmFtZS5nZXRQYXRoRXh0ZW5zaW9uKCkuc3RyaW5nKCksICIuZ3oiKSA9PSAwKSB7Ci0gICAgICAgIC8vcHJpbnRmKCJUUllJTkcgJyVzJ1xuIiwgKGNvbnN0IGNoYXIqKSBwYXRoTmFtZSk7Ci0gICAgICAgIHBBc3NldCA9IEFzc2V0OjpjcmVhdGVGcm9tQ29tcHJlc3NlZEZpbGUocGF0aE5hbWUuc3RyaW5nKCksIG1vZGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJUUllJTkcgJyVzJ1xuIiwgKGNvbnN0IGNoYXIqKSBwYXRoTmFtZSk7Ci0gICAgICAgIHBBc3NldCA9IEFzc2V0OjpjcmVhdGVGcm9tRmlsZShwYXRoTmFtZS5zdHJpbmcoKSwgbW9kZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBBc3NldDsKLX0KLQotLyoKLSAqIEdpdmVuIGFuIGVudHJ5IGluIGEgWmlwIGFyY2hpdmUsIGNyZWF0ZSBhIG5ldyBBc3NldCBvYmplY3QuCi0gKgotICogSWYgdGhlIGVudHJ5IGlzIHVuY29tcHJlc3NlZCwgd2UgbWF5IHdhbnQgdG8gY3JlYXRlIG9yIHNoYXJlIGEKLSAqIHNsaWNlIG9mIHNoYXJlZCBtZW1vcnkuCi0gKi8KLUFzc2V0KiBBc3NldE1hbmFnZXI6Om9wZW5Bc3NldEZyb21aaXBMb2NrZWQoY29uc3QgWmlwRmlsZVJPKiBwWmlwRmlsZSwKLSAgICBjb25zdCBaaXBFbnRyeVJPIGVudHJ5LCBBY2Nlc3NNb2RlIG1vZGUsIGNvbnN0IFN0cmluZzgmIGVudHJ5TmFtZSkKLXsKLSAgICBBc3NldCogcEFzc2V0ID0gTlVMTDsKLQotICAgIC8vIFRPRE86IGxvb2sgZm9yIHByZXZpb3VzbHktY3JlYXRlZCBzaGFyZWQgbWVtb3J5IHNsaWNlPwotICAgIGludCBtZXRob2Q7Ci0gICAgc2l6ZV90IHVuY29tcHJlc3NlZExlbjsKLQotICAgIC8vcHJpbnRmKCJVU0lORyBaaXAgJyVzJ1xuIiwgcEVudHJ5LT5nZXRGaWxlTmFtZSgpKTsKLQotICAgIC8vcFppcEZpbGUtPmdldEVudHJ5SW5mbyhlbnRyeSwgJm1ldGhvZCwgJnVuY29tcHJlc3NlZExlbiwgJmNvbXByZXNzZWRMZW4sCi0gICAgLy8gICAgJm9mZnNldCk7Ci0gICAgaWYgKCFwWmlwRmlsZS0+Z2V0RW50cnlJbmZvKGVudHJ5LCAmbWV0aG9kLCAmdW5jb21wcmVzc2VkTGVuLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgTlVMTCwgTlVMTCkpCi0gICAgewotICAgICAgICBBTE9HVygiZ2V0RW50cnlJbmZvIGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIEZpbGVNYXAqIGRhdGFNYXAgPSBwWmlwRmlsZS0+Y3JlYXRlRW50cnlGaWxlTWFwKGVudHJ5KTsKLSAgICBpZiAoZGF0YU1hcCA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dXKCJjcmVhdGUgbWFwIGZyb20gZW50cnkgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1ldGhvZCA9PSBaaXBGaWxlUk86OmtDb21wcmVzc1N0b3JlZCkgewotICAgICAgICBwQXNzZXQgPSBBc3NldDo6Y3JlYXRlRnJvbVVuY29tcHJlc3NlZE1hcChkYXRhTWFwLCBtb2RlKTsKLSAgICAgICAgQUxPR1YoIk9wZW5lZCB1bmNvbXByZXNzZWQgZW50cnkgJXMgaW4gemlwICVzIG1vZGUgJWQ6ICVwIiwgZW50cnlOYW1lLnN0cmluZygpLAotICAgICAgICAgICAgICAgIGRhdGFNYXAtPmdldEZpbGVOYW1lKCksIG1vZGUsIHBBc3NldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcEFzc2V0ID0gQXNzZXQ6OmNyZWF0ZUZyb21Db21wcmVzc2VkTWFwKGRhdGFNYXAsIG1ldGhvZCwKLSAgICAgICAgICAgIHVuY29tcHJlc3NlZExlbiwgbW9kZSk7Ci0gICAgICAgIEFMT0dWKCJPcGVuZWQgY29tcHJlc3NlZCBlbnRyeSAlcyBpbiB6aXAgJXMgbW9kZSAlZDogJXAiLCBlbnRyeU5hbWUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgZGF0YU1hcC0+Z2V0RmlsZU5hbWUoKSwgbW9kZSwgcEFzc2V0KTsKLSAgICB9Ci0gICAgaWYgKHBBc3NldCA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIHVuZXhwZWN0ZWQgKi8KLSAgICAgICAgQUxPR1coImNyZWF0ZSBmcm9tIHNlZ21lbnQgZmFpbGVkXG4iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcEFzc2V0OwotfQotCi0KLQotLyoKLSAqIE9wZW4gYSBkaXJlY3RvcnkgaW4gdGhlIGFzc2V0IG5hbWVzcGFjZS4KLSAqCi0gKiBBbiAiYXNzZXQgZGlyZWN0b3J5IiBpcyBzaW1wbHkgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCBmaWxlcyBpbiBhbGwKLSAqIGxvY2F0aW9ucywgd2l0aCAiLmd6IiBzdHJpcHBlZCBmb3IgbG9vc2UgZmlsZXMuICBXaXRoIGFwcCwgbG9jYWxlLCBhbmQKLSAqIHZlbmRvciBkZWZpbmVkLCB3ZSBoYXZlIDggZGlyZWN0b3JpZXMgYW5kIDIgWmlwIGFyY2hpdmVzIHRvIHNjYW4uCi0gKgotICogUGFzcyBpbiAiIiBmb3IgdGhlIHJvb3QgZGlyLgotICovCi1Bc3NldERpciogQXNzZXRNYW5hZ2VyOjpvcGVuRGlyKGNvbnN0IGNoYXIqIGRpck5hbWUpCi17Ci0gICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLQotICAgIEFzc2V0RGlyKiBwRGlyID0gTlVMTDsKLSAgICBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcE1lcmdlZEluZm8gPSBOVUxMOwotCi0gICAgTE9HX0ZBVEFMX0lGKG1Bc3NldFBhdGhzLnNpemUoKSA9PSAwLCAiTm8gYXNzZXRzIGFkZGVkIHRvIEFzc2V0TWFuYWdlciIpOwotICAgIGFzc2VydChkaXJOYW1lICE9IE5VTEwpOwotCi0gICAgLy9wcmludGYoIisrKyBvcGVuRGlyKCVzKSBpbiAnJXMnXG4iLCBkaXJOYW1lLCAoY29uc3QgY2hhciopIG1Bc3NldEJhc2UpOwotCi0gICAgaWYgKG1DYWNoZU1vZGUgIT0gQ0FDSEVfT0ZGICYmICFtQ2FjaGVWYWxpZCkKLSAgICAgICAgbG9hZEZpbGVOYW1lQ2FjaGVMb2NrZWQoKTsKLQotICAgIHBEaXIgPSBuZXcgQXNzZXREaXI7Ci0KLSAgICAvKgotICAgICAqIFNjYW4gdGhlIHZhcmlvdXMgZGlyZWN0b3JpZXMsIG1lcmdpbmcgd2hhdCB3ZSBmaW5kIGludG8gYSBzaW5nbGUKLSAgICAgKiB2ZWN0b3IuICBXZSB3YW50IHRvIHNjYW4gdGhlbSBpbiByZXZlcnNlIHByaW9yaXR5IG9yZGVyIHNvIHRoYXQKLSAgICAgKiB0aGUgIi5FWENMVURFIiBwcm9jZXNzaW5nIHdvcmtzIGNvcnJlY3RseS4gIEFsc28sIGlmIHdlIGRlY2lkZSB3ZQotICAgICAqIHdhbnQgdG8gcmVtZW1iZXIgd2hlcmUgdGhlIGZpbGUgaXMgY29taW5nIGZyb20sIHdlJ2xsIGdldCB0aGUgcmlnaHQKLSAgICAgKiB2ZXJzaW9uLgotICAgICAqCi0gICAgICogV2Ugc3RhcnQgd2l0aCBaaXAgYXJjaGl2ZXMsIHRoZW4gZG8gbG9vc2UgZmlsZXMuCi0gICAgICovCi0gICAgcE1lcmdlZEluZm8gPSBuZXcgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz47Ci0KLSAgICBzaXplX3QgaSA9IG1Bc3NldFBhdGhzLnNpemUoKTsKLSAgICB3aGlsZSAoaSA+IDApIHsKLSAgICAgICAgaS0tOwotICAgICAgICBjb25zdCBhc3NldF9wYXRoJiBhcCA9IG1Bc3NldFBhdGhzLml0ZW1BdChpKTsKLSAgICAgICAgaWYgKGFwLnR5cGUgPT0ga0ZpbGVUeXBlUmVndWxhcikgewotICAgICAgICAgICAgQUxPR1YoIkFkZGluZyBkaXJlY3RvcnkgJXMgZnJvbSB6aXAgJXMiLCBkaXJOYW1lLCBhcC5wYXRoLnN0cmluZygpKTsKLSAgICAgICAgICAgIHNjYW5BbmRNZXJnZVppcExvY2tlZChwTWVyZ2VkSW5mbywgYXAsIGtBc3NldHNSb290LCBkaXJOYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFMT0dWKCJBZGRpbmcgZGlyZWN0b3J5ICVzIGZyb20gZGlyICVzIiwgZGlyTmFtZSwgYXAucGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzY2FuQW5kTWVyZ2VEaXJMb2NrZWQocE1lcmdlZEluZm8sIGFwLCBrQXNzZXRzUm9vdCwgZGlyTmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiAwCi0gICAgcHJpbnRmKCJGSUxFIExJU1Q6XG4iKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgKHNpemVfdCkgcE1lcmdlZEluZm8tPnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiICVkOiAoJWQpICclcydcbiIsIGksCi0gICAgICAgICAgICBwTWVyZ2VkSW5mby0+aXRlbUF0KGkpLmdldEZpbGVUeXBlKCksCi0gICAgICAgICAgICAoY29uc3QgY2hhciopIHBNZXJnZWRJbmZvLT5pdGVtQXQoaSkuZ2V0RmlsZU5hbWUoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBwRGlyLT5zZXRGaWxlTGlzdChwTWVyZ2VkSW5mbyk7Ci0gICAgcmV0dXJuIHBEaXI7Ci19Ci0KLS8qCi0gKiBPcGVuIGEgZGlyZWN0b3J5IGluIHRoZSBub24tYXNzZXQgbmFtZXNwYWNlLgotICoKLSAqIEFuICJhc3NldCBkaXJlY3RvcnkiIGlzIHNpbXBseSB0aGUgY29tYmluYXRpb24gb2YgYWxsIGZpbGVzIGluIGFsbAotICogbG9jYXRpb25zLCB3aXRoICIuZ3oiIHN0cmlwcGVkIGZvciBsb29zZSBmaWxlcy4gIFdpdGggYXBwLCBsb2NhbGUsIGFuZAotICogdmVuZG9yIGRlZmluZWQsIHdlIGhhdmUgOCBkaXJlY3RvcmllcyBhbmQgMiBaaXAgYXJjaGl2ZXMgdG8gc2Nhbi4KLSAqCi0gKiBQYXNzIGluICIiIGZvciB0aGUgcm9vdCBkaXIuCi0gKi8KLUFzc2V0RGlyKiBBc3NldE1hbmFnZXI6Om9wZW5Ob25Bc3NldERpcih2b2lkKiBjb29raWUsIGNvbnN0IGNoYXIqIGRpck5hbWUpCi17Ci0gICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLQotICAgIEFzc2V0RGlyKiBwRGlyID0gTlVMTDsKLSAgICBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcE1lcmdlZEluZm8gPSBOVUxMOwotCi0gICAgTE9HX0ZBVEFMX0lGKG1Bc3NldFBhdGhzLnNpemUoKSA9PSAwLCAiTm8gYXNzZXRzIGFkZGVkIHRvIEFzc2V0TWFuYWdlciIpOwotICAgIGFzc2VydChkaXJOYW1lICE9IE5VTEwpOwotCi0gICAgLy9wcmludGYoIisrKyBvcGVuRGlyKCVzKSBpbiAnJXMnXG4iLCBkaXJOYW1lLCAoY29uc3QgY2hhciopIG1Bc3NldEJhc2UpOwotCi0gICAgaWYgKG1DYWNoZU1vZGUgIT0gQ0FDSEVfT0ZGICYmICFtQ2FjaGVWYWxpZCkKLSAgICAgICAgbG9hZEZpbGVOYW1lQ2FjaGVMb2NrZWQoKTsKLQotICAgIHBEaXIgPSBuZXcgQXNzZXREaXI7Ci0KLSAgICBwTWVyZ2VkSW5mbyA9IG5ldyBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPjsKLQotICAgIGNvbnN0IHNpemVfdCB3aGljaCA9ICgoc2l6ZV90KWNvb2tpZSktMTsKLQotICAgIGlmICh3aGljaCA8IG1Bc3NldFBhdGhzLnNpemUoKSkgewotICAgICAgICBjb25zdCBhc3NldF9wYXRoJiBhcCA9IG1Bc3NldFBhdGhzLml0ZW1BdCh3aGljaCk7Ci0gICAgICAgIGlmIChhcC50eXBlID09IGtGaWxlVHlwZVJlZ3VsYXIpIHsKLSAgICAgICAgICAgIEFMT0dWKCJBZGRpbmcgZGlyZWN0b3J5ICVzIGZyb20gemlwICVzIiwgZGlyTmFtZSwgYXAucGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzY2FuQW5kTWVyZ2VaaXBMb2NrZWQocE1lcmdlZEluZm8sIGFwLCBOVUxMLCBkaXJOYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFMT0dWKCJBZGRpbmcgZGlyZWN0b3J5ICVzIGZyb20gZGlyICVzIiwgZGlyTmFtZSwgYXAucGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzY2FuQW5kTWVyZ2VEaXJMb2NrZWQocE1lcmdlZEluZm8sIGFwLCBOVUxMLCBkaXJOYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmIDAKLSAgICBwcmludGYoIkZJTEUgTElTVDpcbiIpOwotICAgIGZvciAoaSA9IDA7IGkgPCAoc2l6ZV90KSBwTWVyZ2VkSW5mby0+c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgcHJpbnRmKCIgJWQ6ICglZCkgJyVzJ1xuIiwgaSwKLSAgICAgICAgICAgIHBNZXJnZWRJbmZvLT5pdGVtQXQoaSkuZ2V0RmlsZVR5cGUoKSwKLSAgICAgICAgICAgIChjb25zdCBjaGFyKikgcE1lcmdlZEluZm8tPml0ZW1BdChpKS5nZXRGaWxlTmFtZSgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHBEaXItPnNldEZpbGVMaXN0KHBNZXJnZWRJbmZvKTsKLSAgICByZXR1cm4gcERpcjsKLX0KLQotLyoKLSAqIFNjYW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGFuZCBtZXJnZSB0aGVtIGludG8gdGhlCi0gKiAicE1lcmdlZEluZm8iIHZlY3RvciwgcmVtb3ZpbmcgcHJldmlvdXMgZW50cmllcyBpZiB3ZSBmaW5kICJleGNsdWRlIgotICogZGlyZWN0aXZlcy4KLSAqCi0gKiBSZXR1cm5zICJmYWxzZSIgaWYgd2UgZm91bmQgbm90aGluZyB0byBjb250cmlidXRlLgotICovCi1ib29sIEFzc2V0TWFuYWdlcjo6c2NhbkFuZE1lcmdlRGlyTG9ja2VkKFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+KiBwTWVyZ2VkSW5mbywKLSAgICBjb25zdCBhc3NldF9wYXRoJiBhcCwgY29uc3QgY2hhciogcm9vdERpciwgY29uc3QgY2hhciogZGlyTmFtZSkKLXsKLSAgICBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcENvbnRlbnRzOwotICAgIFN0cmluZzggcGF0aDsKLQotICAgIGFzc2VydChwTWVyZ2VkSW5mbyAhPSBOVUxMKTsKLQotICAgIC8vcHJpbnRmKCJzY2FuQW5kTWVyZ2VEaXI6ICVzICVzICVzICVzXG4iLCBhcHBOYW1lLCBsb2NhbGUsIHZlbmRvcixkaXJOYW1lKTsKLQotICAgIGlmIChtQ2FjaGVWYWxpZCkgewotICAgICAgICBpbnQgaSwgc3RhcnQsIGNvdW50OwotCi0gICAgICAgIHBDb250ZW50cyA9IG5ldyBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPjsKLQotICAgICAgICAvKgotICAgICAgICAgKiBHZXQgdGhlIGJhc2ljIHBhcnRpYWwgcGF0aCBhbmQgZmluZCBpdCBpbiB0aGUgY2FjaGUuICBUaGF0J3MKLSAgICAgICAgICogdGhlIHN0YXJ0IHBvaW50IGZvciB0aGUgc2VhcmNoLgotICAgICAgICAgKi8KLSAgICAgICAgcGF0aCA9IGNyZWF0ZVBhdGhOYW1lTG9ja2VkKGFwLCByb290RGlyKTsKLSAgICAgICAgaWYgKGRpck5hbWVbMF0gIT0gJ1wwJykKLSAgICAgICAgICAgIHBhdGguYXBwZW5kUGF0aChkaXJOYW1lKTsKLQotICAgICAgICBzdGFydCA9IG1DYWNoZS5pbmRleE9mKHBhdGgpOwotICAgICAgICBpZiAoc3RhcnQgPT0gTkFNRV9OT1RfRk9VTkQpIHsKLSAgICAgICAgICAgIC8vcHJpbnRmKCIrKysgbm90IGZvdW5kIGluIGNhY2hlOiBkaXIgJyVzJ1xuIiwgKGNvbnN0IGNoYXIqKSBwYXRoKTsKLSAgICAgICAgICAgIGRlbGV0ZSBwQ29udGVudHM7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGUgbWF0Y2ggc3RyaW5nIGxvb2tzIGxpa2UgImNvbW1vbi9kZWZhdWx0L2RlZmF1bHQvZm9vL2Jhci8iLgotICAgICAgICAgKiBUaGUgJy8nIG9uIHRoZSBlbmQgZW5zdXJlcyB0aGF0IHdlIGRvbid0IG1hdGNoIG9uIHRoZSBkaXJlY3RvcnkKLSAgICAgICAgICogaXRzZWxmIG9yIG9uICIuLi4vZm9vL2JhcmZ5LyIuCi0gICAgICAgICAqLwotICAgICAgICBwYXRoLmFwcGVuZCgiLyIpOwotCi0gICAgICAgIGNvdW50ID0gbUNhY2hlLnNpemUoKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBQaWNrIG91dCB0aGUgc3R1ZmYgaW4gdGhlIGN1cnJlbnQgZGlyIGJ5IGV4YW1pbmluZyB0aGUgcGF0aG5hbWUuCi0gICAgICAgICAqIEl0IG5lZWRzIHRvIG1hdGNoIHRoZSBwYXJ0aWFsIHBhdGhuYW1lIHByZWZpeCwgYW5kIG5vdCBoYXZlIGEgJy8nCi0gICAgICAgICAqIChmc3NlcCkgYW55d2hlcmUgYWZ0ZXIgdGhlIHByZWZpeC4KLSAgICAgICAgICovCi0gICAgICAgIGZvciAoaSA9IHN0YXJ0KzE7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAobUNhY2hlW2ldLmdldEZpbGVOYW1lKCkubGVuZ3RoKCkgPiBwYXRoLmxlbmd0aCgpICYmCi0gICAgICAgICAgICAgICAgc3RybmNtcChtQ2FjaGVbaV0uZ2V0RmlsZU5hbWUoKS5zdHJpbmcoKSwgcGF0aC5zdHJpbmcoKSwgcGF0aC5sZW5ndGgoKSkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gbUNhY2hlW2ldLmdldEZpbGVOYW1lKCkuc3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgLy8gWFhYIFRISVMgSVMgQlJPS0VOISAgTG9va3MgbGlrZSB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBmdWxsCi0gICAgICAgICAgICAgICAgLy8gcGF0aCBwcmVmaXggc2VwYXJhdGVseSBmcm9tIHRoZSBmaWxlIHBhdGguCi0gICAgICAgICAgICAgICAgaWYgKHN0cmNocihuYW1lICsgcGF0aC5sZW5ndGgoKSwgJy8nKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIGdyYWIgaXQsIHJlZHVjaW5nIHBhdGggdG8ganVzdCB0aGUgZmlsZW5hbWUgY29tcG9uZW50ICovCi0gICAgICAgICAgICAgICAgICAgIEFzc2V0RGlyOjpGaWxlSW5mbyB0bXAgPSBtQ2FjaGVbaV07Ci0gICAgICAgICAgICAgICAgICAgIHRtcC5zZXRGaWxlTmFtZSh0bXAuZ2V0RmlsZU5hbWUoKS5nZXRQYXRoTGVhZigpKTsKLSAgICAgICAgICAgICAgICAgICAgcENvbnRlbnRzLT5hZGQodG1wKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qIG5vIGxvbmdlciBpbiB0aGUgZGlyIG9yIGl0cyBzdWJkaXJzICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhdGggPSBjcmVhdGVQYXRoTmFtZUxvY2tlZChhcCwgcm9vdERpcik7Ci0gICAgICAgIGlmIChkaXJOYW1lWzBdICE9ICdcMCcpCi0gICAgICAgICAgICBwYXRoLmFwcGVuZFBhdGgoZGlyTmFtZSk7Ci0gICAgICAgIHBDb250ZW50cyA9IHNjYW5EaXJMb2NrZWQocGF0aCk7Ci0gICAgICAgIGlmIChwQ29udGVudHMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBpZiB3ZSB3YW50ZWQgdG8gZG8gYW4gaW5jcmVtZW50YWwgY2FjaGUgZmlsbCwgd2Ugd291bGQgZG8gaXQgaGVyZQotCi0gICAgLyoKLSAgICAgKiBQcm9jZXNzICJleGNsdWRlIiBkaXJlY3RpdmVzLiAgSWYgd2UgZmluZCBhIGZpbGVuYW1lIHRoYXQgZW5kcyB3aXRoCi0gICAgICogIi5FWENMVURFIiwgd2UgbG9vayBmb3IgYSBtYXRjaGluZyBlbnRyeSBpbiB0aGUgIm1lcmdlZCIgc2V0LCBhbmQKLSAgICAgKiByZW1vdmUgaXQgaWYgd2UgZmluZCBpdC4gIFdlIGFsc28gZGVsZXRlIHRoZSAiZXhjbHVkZSIgZW50cnkuCi0gICAgICovCi0gICAgaW50IGksIGNvdW50LCBleGNsRXh0TGVuOwotCi0gICAgY291bnQgPSBwQ29udGVudHMtPnNpemUoKTsKLSAgICBleGNsRXh0TGVuID0gc3RybGVuKGtFeGNsdWRlRXh0ZW5zaW9uKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwotICAgICAgICBpbnQgbmFtZUxlbjsKLQotICAgICAgICBuYW1lID0gcENvbnRlbnRzLT5pdGVtQXQoaSkuZ2V0RmlsZU5hbWUoKS5zdHJpbmcoKTsKLSAgICAgICAgbmFtZUxlbiA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgaWYgKG5hbWVMZW4gPiBleGNsRXh0TGVuICYmCi0gICAgICAgICAgICBzdHJjbXAobmFtZSArIChuYW1lTGVuIC0gZXhjbEV4dExlbiksIGtFeGNsdWRlRXh0ZW5zaW9uKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmc4IG1hdGNoKG5hbWUsIG5hbWVMZW4gLSBleGNsRXh0TGVuKTsKLSAgICAgICAgICAgIGludCBtYXRjaElkeDsKLQotICAgICAgICAgICAgbWF0Y2hJZHggPSBBc3NldERpcjo6RmlsZUluZm86OmZpbmRFbnRyeShwTWVyZ2VkSW5mbywgbWF0Y2gpOwotICAgICAgICAgICAgaWYgKG1hdGNoSWR4ID4gMCkgewotICAgICAgICAgICAgICAgIEFMT0dWKCJFeGNsdWRpbmcgJyVzJyBbJXNdXG4iLAotICAgICAgICAgICAgICAgICAgICBwTWVyZ2VkSW5mby0+aXRlbUF0KG1hdGNoSWR4KS5nZXRGaWxlTmFtZSgpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBwTWVyZ2VkSW5mby0+aXRlbUF0KG1hdGNoSWR4KS5nZXRTb3VyY2VOYW1lKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHBNZXJnZWRJbmZvLT5yZW1vdmVBdChtYXRjaElkeCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCIrKysgbm8gbWF0Y2ggb24gJyVzJ1xuIiwgKGNvbnN0IGNoYXIqKSBtYXRjaCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFMT0dEKCJIRVk6IHNpemU9JWQgcmVtb3ZpbmcgJWRcbiIsIChpbnQpcENvbnRlbnRzLT5zaXplKCksIGkpOwotICAgICAgICAgICAgcENvbnRlbnRzLT5yZW1vdmVBdChpKTsKLSAgICAgICAgICAgIGktLTsgICAgICAgIC8vIGFkanVzdCAiZm9yIiBsb29wCi0gICAgICAgICAgICBjb3VudC0tOyAgICAvLyAgYW5kIGxvb3AgbGltaXQKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1lcmdlSW5mb0xvY2tlZChwTWVyZ2VkSW5mbywgcENvbnRlbnRzKTsKLQotICAgIGRlbGV0ZSBwQ29udGVudHM7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFNjYW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LCBhbmQgc3R1ZmYgd2hhdCB3ZSBmaW5kCi0gKiBpbnRvIGEgbmV3bHktYWxsb2NhdGVkIHZlY3Rvci4KLSAqCi0gKiBGaWxlcyBlbmRpbmcgaW4gIi5neiIgd2lsbCBoYXZlIHRoZWlyIGV4dGVuc2lvbnMgcmVtb3ZlZC4KLSAqCi0gKiBXZSBzaG91bGQgcHJvYmFibHkgdGhpbmsgYWJvdXQgc2tpcHBpbmcgZmlsZXMgd2l0aCAiaWxsZWdhbCIgbmFtZXMsCi0gKiBlLmcuIGlsbGVnYWwgY2hhcmFjdGVycyAoL1w6KSBvciBleGNlc3NpdmUgbGVuZ3RoLgotICoKLSAqIFJldHVybnMgTlVMTCBpZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LgotICovCi1Tb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogQXNzZXRNYW5hZ2VyOjpzY2FuRGlyTG9ja2VkKGNvbnN0IFN0cmluZzgmIHBhdGgpCi17Ci0gICAgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBDb250ZW50cyA9IE5VTEw7Ci0gICAgRElSKiBkaXI7Ci0gICAgc3RydWN0IGRpcmVudCogZW50cnk7Ci0gICAgRmlsZVR5cGUgZmlsZVR5cGU7Ci0KLSAgICBBTE9HVigiU2Nhbm5pbmcgZGlyICclcydcbiIsIHBhdGguc3RyaW5nKCkpOwotCi0gICAgZGlyID0gb3BlbmRpcihwYXRoLnN0cmluZygpKTsKLSAgICBpZiAoZGlyID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcENvbnRlbnRzID0gbmV3IFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+OwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgZW50cnkgPSByZWFkZGlyKGRpcik7Ci0gICAgICAgIGlmIChlbnRyeSA9PSBOVUxMKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKHN0cmNtcChlbnRyeS0+ZF9uYW1lLCAiLiIpID09IDAgfHwKLSAgICAgICAgICAgIHN0cmNtcChlbnRyeS0+ZF9uYW1lLCAiLi4iKSA9PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSNpZmRlZiBfRElSRU5UX0hBVkVfRF9UWVBFCi0gICAgICAgIGlmIChlbnRyeS0+ZF90eXBlID09IERUX1JFRykKLSAgICAgICAgICAgIGZpbGVUeXBlID0ga0ZpbGVUeXBlUmVndWxhcjsKLSAgICAgICAgZWxzZSBpZiAoZW50cnktPmRfdHlwZSA9PSBEVF9ESVIpCi0gICAgICAgICAgICBmaWxlVHlwZSA9IGtGaWxlVHlwZURpcmVjdG9yeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmlsZVR5cGUgPSBrRmlsZVR5cGVVbmtub3duOwotI2Vsc2UKLSAgICAgICAgLy8gc3RhdCB0aGUgZmlsZQotICAgICAgICBmaWxlVHlwZSA9IDo6Z2V0RmlsZVR5cGUocGF0aC5hcHBlbmRQYXRoQ29weShlbnRyeS0+ZF9uYW1lKS5zdHJpbmcoKSk7Ci0jZW5kaWYKLQotICAgICAgICBpZiAoZmlsZVR5cGUgIT0ga0ZpbGVUeXBlUmVndWxhciAmJiBmaWxlVHlwZSAhPSBrRmlsZVR5cGVEaXJlY3RvcnkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBBc3NldERpcjo6RmlsZUluZm8gaW5mbzsKLSAgICAgICAgaW5mby5zZXQoU3RyaW5nOChlbnRyeS0+ZF9uYW1lKSwgZmlsZVR5cGUpOwotICAgICAgICBpZiAoc3RyY2FzZWNtcChpbmZvLmdldEZpbGVOYW1lKCkuZ2V0UGF0aEV4dGVuc2lvbigpLnN0cmluZygpLCAiLmd6IikgPT0gMCkKLSAgICAgICAgICAgIGluZm8uc2V0RmlsZU5hbWUoaW5mby5nZXRGaWxlTmFtZSgpLmdldEJhc2VQYXRoKCkpOwotICAgICAgICBpbmZvLnNldFNvdXJjZU5hbWUocGF0aC5hcHBlbmRQYXRoQ29weShpbmZvLmdldEZpbGVOYW1lKCkpKTsKLSAgICAgICAgcENvbnRlbnRzLT5hZGQoaW5mbyk7Ci0gICAgfQotCi0gICAgY2xvc2VkaXIoZGlyKTsKLSAgICByZXR1cm4gcENvbnRlbnRzOwotfQotCi0vKgotICogU2NhbiB0aGUgY29udGVudHMgb3V0IG9mIHRoZSBzcGVjaWZpZWQgWmlwIGFyY2hpdmUsIGFuZCBtZXJnZSB3aGF0IHdlCi0gKiBmaW5kIGludG8gInBNZXJnZWRJbmZvIi4gIElmIHRoZSBaaXAgYXJjaGl2ZSBpbiBxdWVzdGlvbiBkb2Vzbid0IGV4aXN0LAotICogd2UgcmV0dXJuIGltbWVkaWF0ZWx5LgotICoKLSAqIFJldHVybnMgImZhbHNlIiBpZiB3ZSBmb3VuZCBub3RoaW5nIHRvIGNvbnRyaWJ1dGUuCi0gKi8KLWJvb2wgQXNzZXRNYW5hZ2VyOjpzY2FuQW5kTWVyZ2VaaXBMb2NrZWQoU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBNZXJnZWRJbmZvLAotICAgIGNvbnN0IGFzc2V0X3BhdGgmIGFwLCBjb25zdCBjaGFyKiByb290RGlyLCBjb25zdCBjaGFyKiBiYXNlRGlyTmFtZSkKLXsKLSAgICBaaXBGaWxlUk8qIHBaaXA7Ci0gICAgVmVjdG9yPFN0cmluZzg+IGRpcnM7Ci0gICAgQXNzZXREaXI6OkZpbGVJbmZvIGluZm87Ci0gICAgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4gY29udGVudHM7Ci0gICAgU3RyaW5nOCBzb3VyY2VOYW1lLCB6aXBOYW1lLCBkaXJOYW1lOwotCi0gICAgcFppcCA9IG1aaXBTZXQuZ2V0WmlwKGFwLnBhdGgpOwotICAgIGlmIChwWmlwID09IE5VTEwpIHsKLSAgICAgICAgQUxPR1coIkZhaWx1cmUgb3BlbmluZyB6aXAgJXNcbiIsIGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgemlwTmFtZSA9IFppcFNldDo6Z2V0UGF0aE5hbWUoYXAucGF0aC5zdHJpbmcoKSk7Ci0KLSAgICAvKiBjb252ZXJ0ICJzb3VuZHMiIHRvICJyb290RGlyL3NvdW5kcyIgKi8KLSAgICBpZiAocm9vdERpciAhPSBOVUxMKSBkaXJOYW1lID0gcm9vdERpcjsKLSAgICBkaXJOYW1lLmFwcGVuZFBhdGgoYmFzZURpck5hbWUpOwotCi0gICAgLyoKLSAgICAgKiBTY2FuIHRocm91Z2ggdGhlIGxpc3Qgb2YgZmlsZXMsIGxvb2tpbmcgZm9yIGEgbWF0Y2guICBUaGUgZmlsZXMgaW4KLSAgICAgKiB0aGUgWmlwIHRhYmxlIG9mIGNvbnRlbnRzIGFyZSBub3QgaW4gc29ydGVkIG9yZGVyLCBzbyB3ZSBoYXZlIHRvCi0gICAgICogcHJvY2VzcyB0aGUgZW50aXJlIGxpc3QuICBXZSdyZSBsb29raW5nIGZvciBhIHN0cmluZyB0aGF0IGJlZ2lucwotICAgICAqIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gImRpck5hbWUiLCBpcyBmb2xsb3dlZCBieSBhICcvJywgYW5kIGhhcyBubwotICAgICAqIHN1YnNlcXVlbnQgJy8nIGluIHRoZSBzdHVmZiB0aGF0IGZvbGxvd3MuCi0gICAgICoKLSAgICAgKiBXaGF0IG1ha2VzIHRoaXMgZXNwZWNpYWxseSBmdW4gaXMgdGhhdCBkaXJlY3RvcmllcyBhcmUgbm90IHN0b3JlZAotICAgICAqIGV4cGxpY2l0bHkgaW4gWmlwIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIHRvIGluZmVyIHRoZW0gZnJvbSBjb250ZXh0LgotICAgICAqIFdoZW4gd2Ugc2VlICJzb3VuZHMvZm9vLndhdiIgd2UgaGF2ZSB0byBsZWF2ZSBhIG5vdGUgdG8gb3Vyc2VsdmVzCi0gICAgICogdG8gaW5zZXJ0IGEgZGlyZWN0b3J5IGNhbGxlZCAic291bmRzIiBpbnRvIHRoZSBsaXN0LiAgV2Ugc3RvcmUKLSAgICAgKiB0aGVzZSBpbiB0ZW1wb3JhcnkgdmVjdG9yIHNvIHRoYXQgd2Ugb25seSByZXR1cm4gZWFjaCBvbmUgb25jZS4KLSAgICAgKgotICAgICAqIE5hbWUgY29tcGFyaXNvbnMgYXJlIGNhc2Utc2Vuc2l0aXZlIHRvIG1hdGNoIFVOSVggZmlsZXN5c3RlbQotICAgICAqIHNlbWFudGljcy4KLSAgICAgKi8KLSAgICBpbnQgZGlyTmFtZUxlbiA9IGRpck5hbWUubGVuZ3RoKCk7Ci0gICAgdm9pZCAqaXRlcmF0aW9uQ29va2llOwotICAgIGlmICghcFppcC0+c3RhcnRJdGVyYXRpb24oJml0ZXJhdGlvbkNvb2tpZSkpIHsKLSAgICAgICAgQUxPR1coIlppcEZpbGVSTzo6c3RhcnRJdGVyYXRpb24gcmV0dXJuZWQgZmFsc2UiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFppcEVudHJ5Uk8gZW50cnk7Ci0gICAgd2hpbGUgKChlbnRyeSA9IHBaaXAtPm5leHRFbnRyeShpdGVyYXRpb25Db29raWUpKSAhPSBOVUxMKSB7Ci0gICAgICAgIGNoYXIgbmFtZUJ1ZlsyNTZdOwotCi0gICAgICAgIGlmIChwWmlwLT5nZXRFbnRyeUZpbGVOYW1lKGVudHJ5LCBuYW1lQnVmLCBzaXplb2YobmFtZUJ1ZikpICE9IDApIHsKLSAgICAgICAgICAgIC8vIFRPRE86IGZpeCB0aGlzIGlmIHdlIGV4cGVjdCB0byBoYXZlIGxvbmcgbmFtZXMKLSAgICAgICAgICAgIEFMT0dFKCJBUkdIOiBuYW1lIHRvbyBsb25nP1xuIik7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAvL3ByaW50ZigiQ29tcGFyaW5nICVzIGluICVzP1xuIiwgbmFtZUJ1ZiwgZGlyTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIGlmIChkaXJOYW1lTGVuID09IDAgfHwKLSAgICAgICAgICAgIChzdHJuY21wKG5hbWVCdWYsIGRpck5hbWUuc3RyaW5nKCksIGRpck5hbWVMZW4pID09IDAgJiYKLSAgICAgICAgICAgICBuYW1lQnVmW2Rpck5hbWVMZW5dID09ICcvJykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNwOwotICAgICAgICAgICAgY29uc3QgY2hhciogbmV4dFNsYXNoOwotCi0gICAgICAgICAgICBjcCA9IG5hbWVCdWYgKyBkaXJOYW1lTGVuOwotICAgICAgICAgICAgaWYgKGRpck5hbWVMZW4gIT0gMCkKLSAgICAgICAgICAgICAgICBjcCsrOyAgICAgICAvLyBhZHZhbmNlIHBhc3QgdGhlICcvJwotCi0gICAgICAgICAgICBuZXh0U2xhc2ggPSBzdHJjaHIoY3AsICcvJyk7Ci0vL3h4eCB0aGlzIG1heSBicmVhayBpZiB0aGVyZSBhcmUgYmFyZSBkaXJlY3RvcnkgZW50cmllcwotICAgICAgICAgICAgaWYgKG5leHRTbGFzaCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgLyogdGhpcyBpcyBhIGZpbGUgaW4gdGhlIHJlcXVlc3RlZCBkaXJlY3RvcnkgKi8KLQotICAgICAgICAgICAgICAgIGluZm8uc2V0KFN0cmluZzgobmFtZUJ1ZikuZ2V0UGF0aExlYWYoKSwga0ZpbGVUeXBlUmVndWxhcik7Ci0KLSAgICAgICAgICAgICAgICBpbmZvLnNldFNvdXJjZU5hbWUoCi0gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVppcFNvdXJjZU5hbWVMb2NrZWQoemlwTmFtZSwgZGlyTmFtZSwgaW5mby5nZXRGaWxlTmFtZSgpKSk7Ci0KLSAgICAgICAgICAgICAgICBjb250ZW50cy5hZGQoaW5mbyk7Ci0gICAgICAgICAgICAgICAgLy9wcmludGYoIkZPVU5EOiBmaWxlICclcydcbiIsIGluZm8uZ2V0RmlsZU5hbWUoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qIHRoaXMgaXMgYSBzdWJkaXI7IGFkZCBpdCBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgaXQqLwotICAgICAgICAgICAgICAgIFN0cmluZzggc3ViZGlyTmFtZShjcCwgbmV4dFNsYXNoIC0gY3ApOwotICAgICAgICAgICAgICAgIHNpemVfdCBqOwotICAgICAgICAgICAgICAgIHNpemVfdCBOID0gZGlycy5zaXplKCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTjsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdWJkaXJOYW1lID09IGRpcnNbal0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChqID09IE4pIHsKLSAgICAgICAgICAgICAgICAgICAgZGlycy5hZGQoc3ViZGlyTmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy9wcmludGYoIkZPVU5EOiBkaXIgJyVzJ1xuIiwgc3ViZGlyTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwWmlwLT5lbmRJdGVyYXRpb24oaXRlcmF0aW9uQ29va2llKTsKLQotICAgIC8qCi0gICAgICogQWRkIHRoZSBzZXQgb2YgdW5pcXVlIGRpcmVjdG9yaWVzLgotICAgICAqLwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCkgZGlycy5zaXplKCk7IGkrKykgewotICAgICAgICBpbmZvLnNldChkaXJzW2ldLCBrRmlsZVR5cGVEaXJlY3RvcnkpOwotICAgICAgICBpbmZvLnNldFNvdXJjZU5hbWUoCi0gICAgICAgICAgICBjcmVhdGVaaXBTb3VyY2VOYW1lTG9ja2VkKHppcE5hbWUsIGRpck5hbWUsIGluZm8uZ2V0RmlsZU5hbWUoKSkpOwotICAgICAgICBjb250ZW50cy5hZGQoaW5mbyk7Ci0gICAgfQotCi0gICAgbWVyZ2VJbmZvTG9ja2VkKHBNZXJnZWRJbmZvLCAmY29udGVudHMpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotLyoKLSAqIE1lcmdlIHR3byB2ZWN0b3JzIG9mIEZpbGVJbmZvLgotICoKLSAqIFRoZSBtZXJnZWQgY29udGVudHMgd2lsbCBiZSBzdHVmZmVkIGludG8gKnBNZXJnZWRJbmZvLgotICoKLSAqIElmIGFuIGVudHJ5IGZvciBhIGZpbGUgZXhpc3RzIGluIGJvdGggInBNZXJnZWRJbmZvIiBhbmQgInBDb250ZW50cyIsCi0gKiB3ZSB1c2UgdGhlIG5ld2VyICJwQ29udGVudHMiIGVudHJ5LgotICovCi12b2lkIEFzc2V0TWFuYWdlcjo6bWVyZ2VJbmZvTG9ja2VkKFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+KiBwTWVyZ2VkSW5mbywKLSAgICBjb25zdCBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcENvbnRlbnRzKQotewotICAgIC8qCi0gICAgICogTWVyZ2Ugd2hhdCB3ZSBmb3VuZCBpbiB0aGlzIGRpcmVjdG9yeSB3aXRoIHdoYXQgd2UgZm91bmQgaW4KLSAgICAgKiBvdGhlciBwbGFjZXMuCi0gICAgICoKLSAgICAgKiBUd28gYmFzaWMgYXBwcm9hY2hlczoKLSAgICAgKiAoMSkgQ3JlYXRlIGEgbmV3IGFycmF5IHRoYXQgaG9sZHMgdGhlIHVuaXF1ZSB2YWx1ZXMgb2YgdGhlIHR3bwotICAgICAqICAgICBhcnJheXMuCi0gICAgICogKDIpIFRha2UgdGhlIGVsZW1lbnRzIGZyb20gcENvbnRlbnRzIGFuZCBzaG92ZSB0aGVtIGludG8gcE1lcmdlZEluZm8uCi0gICAgICoKLSAgICAgKiBCZWNhdXNlIHRoZXNlIGFyZSB2ZWN0b3JzIG9mIGNvbXBsZXggb2JqZWN0cywgbW92aW5nIGVsZW1lbnRzIGFyb3VuZAotICAgICAqIGluc2lkZSB0aGUgdmVjdG9yIHJlcXVpcmVzIGNvbnN0cnVjdGluZyBuZXcgb2JqZWN0cyBhbmQgYWxsb2NhdGluZwotICAgICAqIHN0b3JhZ2UgZm9yIG1lbWJlcnMuICBXaXRoIGFwcHJvYWNoICMxLCB3ZSdyZSBhbHdheXMgYWRkaW5nIHRvIHRoZQotICAgICAqIGVuZCwgd2hlcmVhcyB3aXRoICMyIHdlIGNvdWxkIGJlIGluc2VydGluZyBtdWx0aXBsZSBlbGVtZW50cyBhdCB0aGUKLSAgICAgKiBmcm9udCBvZiB0aGUgdmVjdG9yLiAgQXBwcm9hY2ggIzEgcmVxdWlyZXMgYSBmdWxsIGNvcHkgb2YgdGhlCi0gICAgICogY29udGVudHMgb2YgcE1lcmdlZEluZm8sIGJ1dCBhcHByb2FjaCAjMiByZXF1aXJlcyB0aGUgc2FtZSBjb3B5IGZvcgotICAgICAqIGV2ZXJ5IGluc2VydGlvbiBhdCB0aGUgZnJvbnQgb2YgcE1lcmdlZEluZm8uCi0gICAgICoKLSAgICAgKiAoV2Ugc2hvdWxkIHByb2JhYmx5IHVzZSBhIFNvcnRlZFZlY3RvciBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgdXMgdG8KLSAgICAgKiBqdXN0IHN0dWZmIGl0ZW1zIGluLCB0cnVzdGluZyB1cyB0byBtYWludGFpbiB0aGUgc29ydCBvcmRlci4pCi0gICAgICovCi0gICAgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBOZXdTb3J0ZWQ7Ci0gICAgaW50IG1lcmdlTWF4LCBjb250TWF4OwotICAgIGludCBtZXJnZUlkeCwgY29udElkeDsKLQotICAgIHBOZXdTb3J0ZWQgPSBuZXcgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz47Ci0gICAgbWVyZ2VNYXggPSBwTWVyZ2VkSW5mby0+c2l6ZSgpOwotICAgIGNvbnRNYXggPSBwQ29udGVudHMtPnNpemUoKTsKLSAgICBtZXJnZUlkeCA9IGNvbnRJZHggPSAwOwotCi0gICAgd2hpbGUgKG1lcmdlSWR4IDwgbWVyZ2VNYXggfHwgY29udElkeCA8IGNvbnRNYXgpIHsKLSAgICAgICAgaWYgKG1lcmdlSWR4ID09IG1lcmdlTWF4KSB7Ci0gICAgICAgICAgICAvKiBoaXQgZW5kIG9mICJtZXJnZSIgbGlzdCwgY29weSByZXN0IG9mICJjb250ZW50cyIgKi8KLSAgICAgICAgICAgIHBOZXdTb3J0ZWQtPmFkZChwQ29udGVudHMtPml0ZW1BdChjb250SWR4KSk7Ci0gICAgICAgICAgICBjb250SWR4Kys7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udElkeCA9PSBjb250TWF4KSB7Ci0gICAgICAgICAgICAvKiBoaXQgZW5kIG9mICJjb250IiBsaXN0LCBjb3B5IHJlc3Qgb2YgIm1lcmdlIiAqLwotICAgICAgICAgICAgcE5ld1NvcnRlZC0+YWRkKHBNZXJnZWRJbmZvLT5pdGVtQXQobWVyZ2VJZHgpKTsKLSAgICAgICAgICAgIG1lcmdlSWR4Kys7Ci0gICAgICAgIH0gZWxzZSBpZiAocE1lcmdlZEluZm8tPml0ZW1BdChtZXJnZUlkeCkgPT0gcENvbnRlbnRzLT5pdGVtQXQoY29udElkeCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIGl0ZW1zIGFyZSBpZGVudGljYWwsIGFkZCBuZXdlciBhbmQgYWR2YW5jZSBib3RoIGluZGljZXMgKi8KLSAgICAgICAgICAgIHBOZXdTb3J0ZWQtPmFkZChwQ29udGVudHMtPml0ZW1BdChjb250SWR4KSk7Ci0gICAgICAgICAgICBtZXJnZUlkeCsrOwotICAgICAgICAgICAgY29udElkeCsrOwotICAgICAgICB9IGVsc2UgaWYgKHBNZXJnZWRJbmZvLT5pdGVtQXQobWVyZ2VJZHgpIDwgcENvbnRlbnRzLT5pdGVtQXQoY29udElkeCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qICJtZXJnZSIgaXMgbG93ZXIsIGFkZCB0aGF0IG9uZSAqLwotICAgICAgICAgICAgcE5ld1NvcnRlZC0+YWRkKHBNZXJnZWRJbmZvLT5pdGVtQXQobWVyZ2VJZHgpKTsKLSAgICAgICAgICAgIG1lcmdlSWR4Kys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiAiY29udCIgaXMgbG93ZXIsIGFkZCB0aGF0IG9uZSAqLwotICAgICAgICAgICAgYXNzZXJ0KHBDb250ZW50cy0+aXRlbUF0KGNvbnRJZHgpIDwgcE1lcmdlZEluZm8tPml0ZW1BdChtZXJnZUlkeCkpOwotICAgICAgICAgICAgcE5ld1NvcnRlZC0+YWRkKHBDb250ZW50cy0+aXRlbUF0KGNvbnRJZHgpKTsKLSAgICAgICAgICAgIGNvbnRJZHgrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogT3ZlcndyaXRlIHRoZSAibWVyZ2VkIiBsaXN0IHdpdGggdGhlIG5ldyBzdHVmZi4KLSAgICAgKi8KLSAgICAqcE1lcmdlZEluZm8gPSAqcE5ld1NvcnRlZDsKLSAgICBkZWxldGUgcE5ld1NvcnRlZDsKLQotI2lmIDAgICAgICAgLy8gZm9yIFZlY3RvciwgcmF0aGVyIHRoYW4gU29ydGVkVmVjdG9yCi0gICAgaW50IGksIGo7Ci0gICAgZm9yIChpID0gcENvbnRlbnRzLT5zaXplKCkgLTE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIGJvb2wgYWRkID0gdHJ1ZTsKLQotICAgICAgICBmb3IgKGogPSBwTWVyZ2VkSW5mby0+c2l6ZSgpIC0xOyBqID49IDA7IGotLSkgewotICAgICAgICAgICAgLyogY2FzZS1zZW5zaXRpdmUgY29tcGFyaXNvbnMsIHRvIGJlaGF2ZSBsaWtlIFVOSVggZnMgKi8KLSAgICAgICAgICAgIGlmIChzdHJjbXAocENvbnRlbnRzLT5pdGVtQXQoaSkubUZpbGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBwTWVyZ2VkSW5mby0+aXRlbUF0KGopLm1GaWxlTmFtZSkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBtYXRjaCwgZG9uJ3QgYWRkIHRoaXMgZW50cnkgKi8KLSAgICAgICAgICAgICAgICBhZGQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhZGQpCi0gICAgICAgICAgICBwTWVyZ2VkSW5mby0+YWRkKHBDb250ZW50cy0+aXRlbUF0KGkpKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotCi0vKgotICogTG9hZCBhbGwgZmlsZXMgaW50byB0aGUgZmlsZSBuYW1lIGNhY2hlLiAgV2Ugd2FudCB0byBkbyB0aGlzIGFjcm9zcwotICogYWxsIGNvbWJpbmF0aW9ucyBvZiB7IGFwcG5hbWUsIGxvY2FsZSwgdmVuZG9yIH0sIHBlcmZvcm1pbmcgYSByZWN1cnNpdmUKLSAqIGRpcmVjdG9yeSB0cmF2ZXJzYWwuCi0gKgotICogVGhpcyBpcyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlLiAgQWxzbywgZ2F0aGVyaW5nIHRoZQotICogaW5mb3JtYXRpb24gYXMgd2UgbmVlZGVkIGl0IChmaWxlLWJ5LWZpbGUgb3IgZGlyZWN0b3J5LWJ5LWRpcmVjdG9yeSkKLSAqIHdvdWxkIGJlIGZhc3Rlci4gIEhvd2V2ZXIsIG9uIHRoZSBhY3R1YWwgZGV2aWNlLCA5OSUgb2YgdGhlIGZpbGVzIHdpbGwKLSAqIGxpdmUgaW4gWmlwIGFyY2hpdmVzLCBzbyB0aGlzIGxpc3Qgd2lsbCBiZSB2ZXJ5IHNtYWxsLiAgVGhlIHRyb3VibGUKLSAqIGlzIHRoYXQgd2UgaGF2ZSB0byBjaGVjayB0aGUgImxvb3NlIiBmaWxlcyBmaXJzdCwgc28gaXQncyBpbXBvcnRhbnQKLSAqIHRoYXQgd2UgZG9uJ3QgYmVhdCB0aGUgZmlsZXN5c3RlbSBzaWxseSBsb29raW5nIGZvciBmaWxlcyB0aGF0IGFyZW4ndAotICogdGhlcmUuCi0gKgotICogTm90ZSBvbiB0aHJlYWQgc2FmZXR5OiB0aGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2F1c2VzIHVwZGF0ZXMKLSAqIHRvIG1DYWNoZSwgYW5kIGFueWJvZHkgd2hvIHRyaWVzIHRvIHVzZSBpdCB3aWxsIGNhbGwgaGVyZSBpZiAhbUNhY2hlVmFsaWQsCi0gKiBzbyB3ZSBuZWVkIHRvIGVtcGxveSBhIG11dGV4IGhlcmUuCi0gKi8KLXZvaWQgQXNzZXRNYW5hZ2VyOjpsb2FkRmlsZU5hbWVDYWNoZUxvY2tlZCh2b2lkKQotewotICAgIGFzc2VydCghbUNhY2hlVmFsaWQpOwotICAgIGFzc2VydChtQ2FjaGUuc2l6ZSgpID09IDApOwotCi0jaWZkZWYgRE9fVElNSU5HUyAgIC8vIG5lZWQgdG8gbGluayBhZ2FpbnN0IC1scnQgZm9yIHRoaXMgbm93Ci0gICAgRHVyYXRpb25UaW1lciB0aW1lcjsKLSAgICB0aW1lci5zdGFydCgpOwotI2VuZGlmCi0KLSAgICBmbmNTY2FuTG9ja2VkKCZtQ2FjaGUsICIiKTsKLQotI2lmZGVmIERPX1RJTUlOR1MKLSAgICB0aW1lci5zdG9wKCk7Ci0gICAgQUxPR0QoIkNhY2hlIHNjYW4gdG9vayAlLjNmbXNcbiIsCi0gICAgICAgIHRpbWVyLmR1cmF0aW9uVXNlY3MoKSAvIDEwMDAuMCk7Ci0jZW5kaWYKLQotI2lmIDAKLSAgICBpbnQgaTsKLSAgICBwcmludGYoIkNBQ0hFRCBGSUxFIExJU1QgKCVkIGVudHJpZXMpOlxuIiwgbUNhY2hlLnNpemUoKSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IChpbnQpIG1DYWNoZS5zaXplKCk7IGkrKykgewotICAgICAgICBwcmludGYoIiAlZDogKCVkKSAnJXMnXG4iLCBpLAotICAgICAgICAgICAgbUNhY2hlLml0ZW1BdChpKS5nZXRGaWxlVHlwZSgpLAotICAgICAgICAgICAgKGNvbnN0IGNoYXIqKSBtQ2FjaGUuaXRlbUF0KGkpLmdldEZpbGVOYW1lKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgbUNhY2hlVmFsaWQgPSB0cnVlOwotfQotCi0vKgotICogU2NhbiB1cCB0byA4IHZlcnNpb25zIG9mIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LgotICovCi12b2lkIEFzc2V0TWFuYWdlcjo6Zm5jU2NhbkxvY2tlZChTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcE1lcmdlZEluZm8sCi0gICAgY29uc3QgY2hhciogZGlyTmFtZSkKLXsKLSAgICBzaXplX3QgaSA9IG1Bc3NldFBhdGhzLnNpemUoKTsKLSAgICB3aGlsZSAoaSA+IDApIHsKLSAgICAgICAgaS0tOwotICAgICAgICBjb25zdCBhc3NldF9wYXRoJiBhcCA9IG1Bc3NldFBhdGhzLml0ZW1BdChpKTsKLSAgICAgICAgZm5jU2NhbkFuZE1lcmdlRGlyTG9ja2VkKHBNZXJnZWRJbmZvLCBhcCwgTlVMTCwgTlVMTCwgZGlyTmFtZSk7Ci0gICAgICAgIGlmIChtTG9jYWxlICE9IE5VTEwpCi0gICAgICAgICAgICBmbmNTY2FuQW5kTWVyZ2VEaXJMb2NrZWQocE1lcmdlZEluZm8sIGFwLCBtTG9jYWxlLCBOVUxMLCBkaXJOYW1lKTsKLSAgICAgICAgaWYgKG1WZW5kb3IgIT0gTlVMTCkKLSAgICAgICAgICAgIGZuY1NjYW5BbmRNZXJnZURpckxvY2tlZChwTWVyZ2VkSW5mbywgYXAsIE5VTEwsIG1WZW5kb3IsIGRpck5hbWUpOwotICAgICAgICBpZiAobUxvY2FsZSAhPSBOVUxMICYmIG1WZW5kb3IgIT0gTlVMTCkKLSAgICAgICAgICAgIGZuY1NjYW5BbmRNZXJnZURpckxvY2tlZChwTWVyZ2VkSW5mbywgYXAsIG1Mb2NhbGUsIG1WZW5kb3IsIGRpck5hbWUpOwotICAgIH0KLX0KLQotLyoKLSAqIFJlY3Vyc2l2ZWx5IHNjYW4gdGhpcyBkaXJlY3RvcnkgYW5kIGFsbCBzdWJkaXJzLgotICoKLSAqIFRoaXMgaXMgc2ltaWxhciB0byBzY2FuQW5kTWVyZ2VEaXIsIGJ1dCB3ZSBkb24ndCByZW1vdmUgdGhlIC5FWENMVURFCi0gKiBmaWxlcywgYW5kIHdlIHByZXBlbmQgdGhlIGV4dGVuZGVkIHBhcnRpYWwgcGF0aCB0byB0aGUgZmlsZW5hbWVzLgotICovCi1ib29sIEFzc2V0TWFuYWdlcjo6Zm5jU2NhbkFuZE1lcmdlRGlyTG9ja2VkKAotICAgIFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+KiBwTWVyZ2VkSW5mbywKLSAgICBjb25zdCBhc3NldF9wYXRoJiBhcCwgY29uc3QgY2hhciogbG9jYWxlLCBjb25zdCBjaGFyKiB2ZW5kb3IsCi0gICAgY29uc3QgY2hhciogZGlyTmFtZSkKLXsKLSAgICBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcENvbnRlbnRzOwotICAgIFN0cmluZzggcGFydGlhbFBhdGg7Ci0gICAgU3RyaW5nOCBmdWxsUGF0aDsKLQotICAgIC8vIFhYWCBUaGlzIGlzIGJyb2tlbiAtLSB0aGUgZmlsZW5hbWUgY2FjaGUgbmVlZHMgdG8gaG9sZCB0aGUgYmFzZQotICAgIC8vIGFzc2V0IHBhdGggc2VwYXJhdGVseSBmcm9tIGl0cyBmaWxlbmFtZS4KLQotICAgIHBhcnRpYWxQYXRoID0gY3JlYXRlUGF0aE5hbWVMb2NrZWQoYXAsIGxvY2FsZSwgdmVuZG9yKTsKLSAgICBpZiAoZGlyTmFtZVswXSAhPSAnXDAnKSB7Ci0gICAgICAgIHBhcnRpYWxQYXRoLmFwcGVuZFBhdGgoZGlyTmFtZSk7Ci0gICAgfQotCi0gICAgZnVsbFBhdGggPSBwYXJ0aWFsUGF0aDsKLSAgICBwQ29udGVudHMgPSBzY2FuRGlyTG9ja2VkKGZ1bGxQYXRoKTsKLSAgICBpZiAocENvbnRlbnRzID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAvLyBkaXJlY3RvcnkgZGlkIG5vdCBleGlzdAotICAgIH0KLQotICAgIC8qCi0gICAgICogU2NhbiBhbGwgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIGN1cnJlbnQgZGlyLCBtZXJnaW5nIHdoYXQgd2UgZmluZAotICAgICAqIGludG8gInBNZXJnZWRJbmZvIi4KLSAgICAgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpIHBDb250ZW50cy0+c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKHBDb250ZW50cy0+aXRlbUF0KGkpLmdldEZpbGVUeXBlKCkgPT0ga0ZpbGVUeXBlRGlyZWN0b3J5KSB7Ci0gICAgICAgICAgICBTdHJpbmc4IHN1YmRpcihkaXJOYW1lKTsKLSAgICAgICAgICAgIHN1YmRpci5hcHBlbmRQYXRoKHBDb250ZW50cy0+aXRlbUF0KGkpLmdldEZpbGVOYW1lKCkpOwotCi0gICAgICAgICAgICBmbmNTY2FuQW5kTWVyZ2VEaXJMb2NrZWQocE1lcmdlZEluZm8sIGFwLCBsb2NhbGUsIHZlbmRvciwgc3ViZGlyLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogVG8gYmUgY29uc2lzdGVudCwgd2Ugd2FudCBlbnRyaWVzIGZvciB0aGUgcm9vdCBkaXJlY3RvcnkuICBJZgotICAgICAqIHdlJ3JlIHRoZSByb290LCBhZGQgb25lIG5vdy4KLSAgICAgKi8KLSAgICBpZiAoZGlyTmFtZVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIEFzc2V0RGlyOjpGaWxlSW5mbyB0bXBJbmZvOwotCi0gICAgICAgIHRtcEluZm8uc2V0KFN0cmluZzgoIiIpLCBrRmlsZVR5cGVEaXJlY3RvcnkpOwotICAgICAgICB0bXBJbmZvLnNldFNvdXJjZU5hbWUoY3JlYXRlUGF0aE5hbWVMb2NrZWQoYXAsIGxvY2FsZSwgdmVuZG9yKSk7Ci0gICAgICAgIHBDb250ZW50cy0+YWRkKHRtcEluZm8pOwotICAgIH0KLQotICAgIC8qCi0gICAgICogV2Ugd2FudCB0byBwcmVwZW5kIHRoZSBleHRlbmRlZCBwYXJ0aWFsIHBhdGggdG8gZXZlcnkgZW50cnkgaW4KLSAgICAgKiAicENvbnRlbnRzIi4gIEl0J3MgdGhlIHNhbWUgdmFsdWUgZm9yIGVhY2ggZW50cnksIHNvIHRoaXMgd2lsbAotICAgICAqIG5vdCBjaGFuZ2UgdGhlIHNvcnRpbmcgb3JkZXIgb2YgdGhlIHZlY3RvciBjb250ZW50cy4KLSAgICAgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpIHBDb250ZW50cy0+c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgQXNzZXREaXI6OkZpbGVJbmZvJiBpbmZvID0gcENvbnRlbnRzLT5pdGVtQXQoaSk7Ci0gICAgICAgIHBDb250ZW50cy0+ZWRpdEl0ZW1BdChpKS5zZXRGaWxlTmFtZShwYXJ0aWFsUGF0aC5hcHBlbmRQYXRoQ29weShpbmZvLmdldEZpbGVOYW1lKCkpKTsKLSAgICB9Ci0KLSAgICBtZXJnZUluZm9Mb2NrZWQocE1lcmdlZEluZm8sIHBDb250ZW50cyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBUcmFzaCB0aGUgY2FjaGUuCi0gKi8KLXZvaWQgQXNzZXRNYW5hZ2VyOjpwdXJnZUZpbGVOYW1lQ2FjaGVMb2NrZWQodm9pZCkKLXsKLSAgICBtQ2FjaGVWYWxpZCA9IGZhbHNlOwotICAgIG1DYWNoZS5jbGVhcigpOwotfQotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgICAgIEFzc2V0TWFuYWdlcjo6U2hhcmVkWmlwCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0KLU11dGV4IEFzc2V0TWFuYWdlcjo6U2hhcmVkWmlwOjpnTG9jazsKLURlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmc4LCB3cDxBc3NldE1hbmFnZXI6OlNoYXJlZFppcD4gPiBBc3NldE1hbmFnZXI6OlNoYXJlZFppcDo6Z09wZW47Ci0KLUFzc2V0TWFuYWdlcjo6U2hhcmVkWmlwOjpTaGFyZWRaaXAoY29uc3QgU3RyaW5nOCYgcGF0aCwgdGltZV90IG1vZFdoZW4pCi0gICAgOiBtUGF0aChwYXRoKSwgbVppcEZpbGUoTlVMTCksIG1Nb2RXaGVuKG1vZFdoZW4pLAotICAgICAgbVJlc291cmNlVGFibGVBc3NldChOVUxMKSwgbVJlc291cmNlVGFibGUoTlVMTCkKLXsKLSAgICAvL0FMT0dJKCJDcmVhdGluZyBTaGFyZWRaaXAgJXAgJXNcbiIsIHRoaXMsIChjb25zdCBjaGFyKiltUGF0aCk7Ci0gICAgQUxPR1YoIisrKyBvcGVuaW5nIHppcCAnJXMnXG4iLCBtUGF0aC5zdHJpbmcoKSk7Ci0gICAgbVppcEZpbGUgPSBaaXBGaWxlUk86Om9wZW4obVBhdGguc3RyaW5nKCkpOwotICAgIGlmIChtWmlwRmlsZSA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dEKCJmYWlsZWQgdG8gb3BlbiBaaXAgYXJjaGl2ZSAnJXMnXG4iLCBtUGF0aC5zdHJpbmcoKSk7Ci0gICAgfQotfQotCi1zcDxBc3NldE1hbmFnZXI6OlNoYXJlZFppcD4gQXNzZXRNYW5hZ2VyOjpTaGFyZWRaaXA6OmdldChjb25zdCBTdHJpbmc4JiBwYXRoKQotewotICAgIEF1dG9NdXRleCBfbChnTG9jayk7Ci0gICAgdGltZV90IG1vZFdoZW4gPSBnZXRGaWxlTW9kRGF0ZShwYXRoKTsKLSAgICBzcDxTaGFyZWRaaXA+IHppcCA9IGdPcGVuLnZhbHVlRm9yKHBhdGgpLnByb21vdGUoKTsKLSAgICBpZiAoemlwICE9IE5VTEwgJiYgemlwLT5tTW9kV2hlbiA9PSBtb2RXaGVuKSB7Ci0gICAgICAgIHJldHVybiB6aXA7Ci0gICAgfQotICAgIHppcCA9IG5ldyBTaGFyZWRaaXAocGF0aCwgbW9kV2hlbik7Ci0gICAgZ09wZW4uYWRkKHBhdGgsIHppcCk7Ci0gICAgcmV0dXJuIHppcDsKLQotfQotCi1aaXBGaWxlUk8qIEFzc2V0TWFuYWdlcjo6U2hhcmVkWmlwOjpnZXRaaXAoKQotewotICAgIHJldHVybiBtWmlwRmlsZTsKLX0KLQotQXNzZXQqIEFzc2V0TWFuYWdlcjo6U2hhcmVkWmlwOjpnZXRSZXNvdXJjZVRhYmxlQXNzZXQoKQotewotICAgIEFMT0dWKCJHZXR0aW5nIGZyb20gU2hhcmVkWmlwICVwIHJlc291cmNlIGFzc2V0ICVwXG4iLCB0aGlzLCBtUmVzb3VyY2VUYWJsZUFzc2V0KTsKLSAgICByZXR1cm4gbVJlc291cmNlVGFibGVBc3NldDsKLX0KLQotQXNzZXQqIEFzc2V0TWFuYWdlcjo6U2hhcmVkWmlwOjpzZXRSZXNvdXJjZVRhYmxlQXNzZXQoQXNzZXQqIGFzc2V0KQotewotICAgIHsKLSAgICAgICAgQXV0b011dGV4IF9sKGdMb2NrKTsKLSAgICAgICAgaWYgKG1SZXNvdXJjZVRhYmxlQXNzZXQgPT0gTlVMTCkgewotICAgICAgICAgICAgbVJlc291cmNlVGFibGVBc3NldCA9IGFzc2V0OwotICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhyZWFkIHNhZmUgdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLCBzbwotICAgICAgICAgICAgLy8gZG8gaXQgaGVyZSB3aXRoIHRoZSBnbG9iYWwgbG9jayBoZWxkLgotICAgICAgICAgICAgYXNzZXQtPmdldEJ1ZmZlcih0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiBhc3NldDsKLSAgICAgICAgfQotICAgIH0KLSAgICBkZWxldGUgYXNzZXQ7Ci0gICAgcmV0dXJuIG1SZXNvdXJjZVRhYmxlQXNzZXQ7Ci19Ci0KLVJlc1RhYmxlKiBBc3NldE1hbmFnZXI6OlNoYXJlZFppcDo6Z2V0UmVzb3VyY2VUYWJsZSgpCi17Ci0gICAgQUxPR1YoIkdldHRpbmcgZnJvbSBTaGFyZWRaaXAgJXAgcmVzb3VyY2UgdGFibGUgJXBcbiIsIHRoaXMsIG1SZXNvdXJjZVRhYmxlKTsKLSAgICByZXR1cm4gbVJlc291cmNlVGFibGU7Ci19Ci0KLVJlc1RhYmxlKiBBc3NldE1hbmFnZXI6OlNoYXJlZFppcDo6c2V0UmVzb3VyY2VUYWJsZShSZXNUYWJsZSogcmVzKQotewotICAgIHsKLSAgICAgICAgQXV0b011dGV4IF9sKGdMb2NrKTsKLSAgICAgICAgaWYgKG1SZXNvdXJjZVRhYmxlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG1SZXNvdXJjZVRhYmxlID0gcmVzOwotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgfQotICAgIH0KLSAgICBkZWxldGUgcmVzOwotICAgIHJldHVybiBtUmVzb3VyY2VUYWJsZTsKLX0KLQotYm9vbCBBc3NldE1hbmFnZXI6OlNoYXJlZFppcDo6aXNVcFRvRGF0ZSgpCi17Ci0gICAgdGltZV90IG1vZFdoZW4gPSBnZXRGaWxlTW9kRGF0ZShtUGF0aC5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuIG1Nb2RXaGVuID09IG1vZFdoZW47Ci19Ci0KLUFzc2V0TWFuYWdlcjo6U2hhcmVkWmlwOjp+U2hhcmVkWmlwKCkKLXsKLSAgICAvL0FMT0dJKCJEZXN0cm95aW5nIFNoYXJlZFppcCAlcCAlc1xuIiwgdGhpcywgKGNvbnN0IGNoYXIqKW1QYXRoKTsKLSAgICBpZiAobVJlc291cmNlVGFibGUgIT0gTlVMTCkgewotICAgICAgICBkZWxldGUgbVJlc291cmNlVGFibGU7Ci0gICAgfQotICAgIGlmIChtUmVzb3VyY2VUYWJsZUFzc2V0ICE9IE5VTEwpIHsKLSAgICAgICAgZGVsZXRlIG1SZXNvdXJjZVRhYmxlQXNzZXQ7Ci0gICAgfQotICAgIGlmIChtWmlwRmlsZSAhPSBOVUxMKSB7Ci0gICAgICAgIGRlbGV0ZSBtWmlwRmlsZTsKLSAgICAgICAgQUxPR1YoIkNsb3NlZCAnJXMnXG4iLCBtUGF0aC5zdHJpbmcoKSk7Ci0gICAgfQotfQotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgICAgIEFzc2V0TWFuYWdlcjo6WmlwU2V0Ci0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0vKgotICogQ29uc3RydWN0b3IuCi0gKi8KLUFzc2V0TWFuYWdlcjo6WmlwU2V0OjpaaXBTZXQodm9pZCkKLXsKLX0KLQotLyoKLSAqIERlc3RydWN0b3IuICBDbG9zZSBhbnkgb3BlbiBhcmNoaXZlcy4KLSAqLwotQXNzZXRNYW5hZ2VyOjpaaXBTZXQ6On5aaXBTZXQodm9pZCkKLXsKLSAgICBzaXplX3QgTiA9IG1aaXBGaWxlLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE47IGkrKykKLSAgICAgICAgY2xvc2VaaXAoaSk7Ci19Ci0KLS8qCi0gKiBDbG9zZSBhIFppcCBmaWxlIGFuZCByZXNldCB0aGUgZW50cnkuCi0gKi8KLXZvaWQgQXNzZXRNYW5hZ2VyOjpaaXBTZXQ6OmNsb3NlWmlwKGludCBpZHgpCi17Ci0gICAgbVppcEZpbGUuZWRpdEl0ZW1BdChpZHgpID0gTlVMTDsKLX0KLQotCi0vKgotICogUmV0cmlldmUgdGhlIGFwcHJvcHJpYXRlIFppcCBmaWxlIGZyb20gdGhlIHNldC4KLSAqLwotWmlwRmlsZVJPKiBBc3NldE1hbmFnZXI6OlppcFNldDo6Z2V0WmlwKGNvbnN0IFN0cmluZzgmIHBhdGgpCi17Ci0gICAgaW50IGlkeCA9IGdldEluZGV4KHBhdGgpOwotICAgIHNwPFNoYXJlZFppcD4gemlwID0gbVppcEZpbGVbaWR4XTsKLSAgICBpZiAoemlwID09IE5VTEwpIHsKLSAgICAgICAgemlwID0gU2hhcmVkWmlwOjpnZXQocGF0aCk7Ci0gICAgICAgIG1aaXBGaWxlLmVkaXRJdGVtQXQoaWR4KSA9IHppcDsKLSAgICB9Ci0gICAgcmV0dXJuIHppcC0+Z2V0WmlwKCk7Ci19Ci0KLUFzc2V0KiBBc3NldE1hbmFnZXI6OlppcFNldDo6Z2V0WmlwUmVzb3VyY2VUYWJsZUFzc2V0KGNvbnN0IFN0cmluZzgmIHBhdGgpCi17Ci0gICAgaW50IGlkeCA9IGdldEluZGV4KHBhdGgpOwotICAgIHNwPFNoYXJlZFppcD4gemlwID0gbVppcEZpbGVbaWR4XTsKLSAgICBpZiAoemlwID09IE5VTEwpIHsKLSAgICAgICAgemlwID0gU2hhcmVkWmlwOjpnZXQocGF0aCk7Ci0gICAgICAgIG1aaXBGaWxlLmVkaXRJdGVtQXQoaWR4KSA9IHppcDsKLSAgICB9Ci0gICAgcmV0dXJuIHppcC0+Z2V0UmVzb3VyY2VUYWJsZUFzc2V0KCk7Ci19Ci0KLUFzc2V0KiBBc3NldE1hbmFnZXI6OlppcFNldDo6c2V0WmlwUmVzb3VyY2VUYWJsZUFzc2V0KGNvbnN0IFN0cmluZzgmIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXQqIGFzc2V0KQotewotICAgIGludCBpZHggPSBnZXRJbmRleChwYXRoKTsKLSAgICBzcDxTaGFyZWRaaXA+IHppcCA9IG1aaXBGaWxlW2lkeF07Ci0gICAgLy8gZG9lc24ndCBtYWtlIHNlbnNlIHRvIGNhbGwgYmVmb3JlIHByZXZpb3VzbHkgYWNjZXNzaW5nLgotICAgIHJldHVybiB6aXAtPnNldFJlc291cmNlVGFibGVBc3NldChhc3NldCk7Ci19Ci0KLVJlc1RhYmxlKiBBc3NldE1hbmFnZXI6OlppcFNldDo6Z2V0WmlwUmVzb3VyY2VUYWJsZShjb25zdCBTdHJpbmc4JiBwYXRoKQotewotICAgIGludCBpZHggPSBnZXRJbmRleChwYXRoKTsKLSAgICBzcDxTaGFyZWRaaXA+IHppcCA9IG1aaXBGaWxlW2lkeF07Ci0gICAgaWYgKHppcCA9PSBOVUxMKSB7Ci0gICAgICAgIHppcCA9IFNoYXJlZFppcDo6Z2V0KHBhdGgpOwotICAgICAgICBtWmlwRmlsZS5lZGl0SXRlbUF0KGlkeCkgPSB6aXA7Ci0gICAgfQotICAgIHJldHVybiB6aXAtPmdldFJlc291cmNlVGFibGUoKTsKLX0KLQotUmVzVGFibGUqIEFzc2V0TWFuYWdlcjo6WmlwU2V0OjpzZXRaaXBSZXNvdXJjZVRhYmxlKGNvbnN0IFN0cmluZzgmIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGUqIHJlcykKLXsKLSAgICBpbnQgaWR4ID0gZ2V0SW5kZXgocGF0aCk7Ci0gICAgc3A8U2hhcmVkWmlwPiB6aXAgPSBtWmlwRmlsZVtpZHhdOwotICAgIC8vIGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBjYWxsIGJlZm9yZSBwcmV2aW91c2x5IGFjY2Vzc2luZy4KLSAgICByZXR1cm4gemlwLT5zZXRSZXNvdXJjZVRhYmxlKHJlcyk7Ci19Ci0KLS8qCi0gKiBHZW5lcmF0ZSB0aGUgcGFydGlhbCBwYXRobmFtZSBmb3IgdGhlIHNwZWNpZmllZCBhcmNoaXZlLiAgVGhlIGNhbGxlcgotICogZ2V0cyB0byBwcmVwZW5kIHRoZSBhc3NldCByb290IGRpcmVjdG9yeS4KLSAqCi0gKiBSZXR1cm5zIHNvbWV0aGluZyBsaWtlICJjb21tb24vZW4tVVMtbm9vZ2xlLmphciIuCi0gKi8KLS8qc3RhdGljKi8gU3RyaW5nOCBBc3NldE1hbmFnZXI6OlppcFNldDo6Z2V0UGF0aE5hbWUoY29uc3QgY2hhciogemlwUGF0aCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOCh6aXBQYXRoKTsKLX0KLQotYm9vbCBBc3NldE1hbmFnZXI6OlppcFNldDo6aXNVcFRvRGF0ZSgpCi17Ci0gICAgY29uc3Qgc2l6ZV90IE4gPSBtWmlwRmlsZS5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBpZiAobVppcEZpbGVbaV0gIT0gTlVMTCAmJiAhbVppcEZpbGVbaV0tPmlzVXBUb0RhdGUoKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0vKgotICogQ29tcHV0ZSB0aGUgemlwIGZpbGUncyBpbmRleC4KLSAqCi0gKiAiYXBwTmFtZSIsICJsb2NhbGUiLCBhbmQgInZlbmRvciIgc2hvdWxkIGJlIHNldCB0byBOVUxMIHRvIGluZGljYXRlIHRoZQotICogZGVmYXVsdCBkaXJlY3RvcnkuCi0gKi8KLWludCBBc3NldE1hbmFnZXI6OlppcFNldDo6Z2V0SW5kZXgoY29uc3QgU3RyaW5nOCYgemlwKSBjb25zdAotewotICAgIGNvbnN0IHNpemVfdCBOID0gbVppcFBhdGguc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgaWYgKG1aaXBQYXRoW2ldID09IHppcCkgewotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtWmlwUGF0aC5hZGQoemlwKTsKLSAgICBtWmlwRmlsZS5hZGQoTlVMTCk7Ci0KLSAgICByZXR1cm4gbVppcFBhdGguc2l6ZSgpLTE7Ci19CmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9CYWNrdXBEYXRhLmNwcCBiL2xpYnMvYW5kcm9pZGZ3L0JhY2t1cERhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTNiNTIyLi4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L0JhY2t1cERhdGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgImJhY2t1cF9kYXRhIgotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L0JhY2t1cEhlbHBlcnMuaD4KLSNpbmNsdWRlIDx1dGlscy9CeXRlT3JkZXIuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxjdXRpbHMvbG9nLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotc3RhdGljIGNvbnN0IGJvb2wgREVCVUcgPSBmYWxzZTsKLQotLyoKLSAqIEZpbGUgRm9ybWF0ICh2MSk6Ci0gKgotICogQWxsIGludHMgYXJlIHN0b3JlZCBsaXR0bGUtZW5kaWFuLgotICoKLSAqICAtIEFuIGFwcF9oZWFkZXJfdjEgc3RydWN0LgotICogIC0gVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UsIHV0Zi04LCBudWxsIHRlcm1pbmF0ZWQsIHBhZGRlZCB0byA0LWJ5dGUgYm91bmRhcnkuCi0gKiAgLSBBIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSBrZXkvdmFsdWUgcGFpcmVzIChlbnRpdGllcyksIGVhY2ggd2l0aAotICogICAgICAtIEEgZW50aXR5X2hlYWRlcl92MSBzdHJ1Y3QKLSAqICAgICAgLSBUaGUga2V5LCB1dGYtOCwgbnVsbCB0ZXJtaW5hdGVkLCBwYWRkZWQgdG8gNC1ieXRlIGJvdW5kYXJ5LgotICogICAgICAtIFRoZSB2YWx1ZSwgcGFkZGVkIHRvIDQgYnl0ZSBib3VuZGFyeQotICovCi0KLWNvbnN0IHN0YXRpYyBpbnQgUk9VTkRfVVBbNF0gPSB7IDAsIDMsIDIsIDEgfTsKLQotc3RhdGljIGlubGluZSBzaXplX3QKLXJvdW5kX3VwKHNpemVfdCBuKQotewotICAgIHJldHVybiBuICsgUk9VTkRfVVBbbiAlIDRdOwotfQotCi1zdGF0aWMgaW5saW5lIHNpemVfdAotcGFkZGluZ19leHRyYShzaXplX3QgbikKLXsKLSAgICByZXR1cm4gUk9VTkRfVVBbbiAlIDRdOwotfQotCi1CYWNrdXBEYXRhV3JpdGVyOjpCYWNrdXBEYXRhV3JpdGVyKGludCBmZCkKLSAgICA6bV9mZChmZCksCi0gICAgIG1fc3RhdHVzKE5PX0VSUk9SKSwKLSAgICAgbV9wb3MoMCksCi0gICAgIG1fZW50aXR5Q291bnQoMCkKLXsKLX0KLQotQmFja3VwRGF0YVdyaXRlcjo6fkJhY2t1cERhdGFXcml0ZXIoKQotewotfQotCi0vLyBQYWQgb3V0IGFueXRoaW5nIHRoZXkndmUgcHJldmlvdXNseSB3cml0dGVuIHRvIHRoZSBuZXh0IDQgYnl0ZSBib3VuZGFyeS4KLXN0YXR1c190Ci1CYWNrdXBEYXRhV3JpdGVyOjp3cml0ZV9wYWRkaW5nX2ZvcihpbnQgbikKLXsKLSAgICBzc2l6ZV90IGFtdDsKLSAgICBzc2l6ZV90IHBhZGRpbmdTaXplOwotCi0gICAgcGFkZGluZ1NpemUgPSBwYWRkaW5nX2V4dHJhKG4pOwotICAgIGlmIChwYWRkaW5nU2l6ZSA+IDApIHsKLSAgICAgICAgdWludDMyX3QgcGFkZGluZyA9IDB4YmNiY2JjYmM7Ci0gICAgICAgIGlmIChERUJVRykgQUxPR0koIndyaXRpbmcgJWQgcGFkZGluZyBieXRlcyBmb3IgJWQiLCBwYWRkaW5nU2l6ZSwgbik7Ci0gICAgICAgIGFtdCA9IHdyaXRlKG1fZmQsICZwYWRkaW5nLCBwYWRkaW5nU2l6ZSk7Ci0gICAgICAgIGlmIChhbXQgIT0gcGFkZGluZ1NpemUpIHsKLSAgICAgICAgICAgIG1fc3RhdHVzID0gZXJybm87Ci0gICAgICAgICAgICByZXR1cm4gbV9zdGF0dXM7Ci0gICAgICAgIH0KLSAgICAgICAgbV9wb3MgKz0gYW10OwotICAgIH0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190Ci1CYWNrdXBEYXRhV3JpdGVyOjpXcml0ZUVudGl0eUhlYWRlcihjb25zdCBTdHJpbmc4JiBrZXksIHNpemVfdCBkYXRhU2l6ZSkKLXsKLSAgICBpZiAobV9zdGF0dXMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIG1fc3RhdHVzOwotICAgIH0KLQotICAgIHNzaXplX3QgYW10OwotCi0gICAgYW10ID0gd3JpdGVfcGFkZGluZ19mb3IobV9wb3MpOwotICAgIGlmIChhbXQgIT0gMCkgewotICAgICAgICByZXR1cm4gYW10OwotICAgIH0KLQotICAgIFN0cmluZzggazsKLSAgICBpZiAobV9rZXlQcmVmaXgubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIGsgPSBtX2tleVByZWZpeDsKLSAgICAgICAgayArPSAiOiI7Ci0gICAgICAgIGsgKz0ga2V5OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGsgPSBrZXk7Ci0gICAgfQotICAgIGlmIChERUJVRykgewotICAgICAgICBBTE9HRCgiV3JpdGluZyBoZWFkZXI6IHByZWZpeD0nJXMnIGtleT0nJXMnIGRhdGFTaXplPSVkIiwgbV9rZXlQcmVmaXguc3RyaW5nKCksCi0gICAgICAgICAgICAgICAga2V5LnN0cmluZygpLCBkYXRhU2l6ZSk7Ci0gICAgfQotCi0gICAgZW50aXR5X2hlYWRlcl92MSBoZWFkZXI7Ci0gICAgc3NpemVfdCBrZXlMZW47Ci0KLSAgICBrZXlMZW4gPSBrLmxlbmd0aCgpOwotCi0gICAgaGVhZGVyLnR5cGUgPSB0b2xlbChCQUNLVVBfSEVBREVSX0VOVElUWV9WMSk7Ci0gICAgaGVhZGVyLmtleUxlbiA9IHRvbGVsKGtleUxlbik7Ci0gICAgaGVhZGVyLmRhdGFTaXplID0gdG9sZWwoZGF0YVNpemUpOwotCi0gICAgaWYgKERFQlVHKSBBTE9HSSgid3JpdGluZyBlbnRpdHkgaGVhZGVyLCAlZCBieXRlcyIsIHNpemVvZihlbnRpdHlfaGVhZGVyX3YxKSk7Ci0gICAgYW10ID0gd3JpdGUobV9mZCwgJmhlYWRlciwgc2l6ZW9mKGVudGl0eV9oZWFkZXJfdjEpKTsKLSAgICBpZiAoYW10ICE9IHNpemVvZihlbnRpdHlfaGVhZGVyX3YxKSkgewotICAgICAgICBtX3N0YXR1cyA9IGVycm5vOwotICAgICAgICByZXR1cm4gbV9zdGF0dXM7Ci0gICAgfQotICAgIG1fcG9zICs9IGFtdDsKLQotICAgIGlmIChERUJVRykgQUxPR0koIndyaXRpbmcgZW50aXR5IGhlYWRlciBrZXksICVkIGJ5dGVzIiwga2V5TGVuKzEpOwotICAgIGFtdCA9IHdyaXRlKG1fZmQsIGsuc3RyaW5nKCksIGtleUxlbisxKTsKLSAgICBpZiAoYW10ICE9IGtleUxlbisxKSB7Ci0gICAgICAgIG1fc3RhdHVzID0gZXJybm87Ci0gICAgICAgIHJldHVybiBtX3N0YXR1czsKLSAgICB9Ci0gICAgbV9wb3MgKz0gYW10OwotCi0gICAgYW10ID0gd3JpdGVfcGFkZGluZ19mb3Ioa2V5TGVuKzEpOwotCi0gICAgbV9lbnRpdHlDb3VudCsrOwotCi0gICAgcmV0dXJuIGFtdDsKLX0KLQotc3RhdHVzX3QKLUJhY2t1cERhdGFXcml0ZXI6OldyaXRlRW50aXR5RGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAoREVCVUcpIEFMT0dEKCJXcml0aW5nIGRhdGE6IHNpemU9JWx1IiwgKHVuc2lnbmVkIGxvbmcpIHNpemUpOwotCi0gICAgaWYgKG1fc3RhdHVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgQUxPR0QoIk5vdCB3cml0aW5nIGRhdGEgLSBzdHJlYW0gaW4gZXJyb3Igc3RhdGUgJWQgKCVzKSIsIG1fc3RhdHVzLCBzdHJlcnJvcihtX3N0YXR1cykpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX3N0YXR1czsKLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCB3cml0ZSBwYWRkaW5nIGhlcmUsIGJlY2F1c2UgdGhleSdyZSBhbGxvd2VkIHRvIGNhbGwgdGhpcyBzZXZlcmFsCi0gICAgLy8gdGltZXMgd2l0aCBzbWFsbGVyIGJ1ZmZlcnMuICBXZSB3cml0ZSBpdCBhdCB0aGUgZW5kIG9mIFdyaXRlRW50aXR5SGVhZGVyCi0gICAgLy8gaW5zdGVhZC4KLSAgICBzc2l6ZV90IGFtdCA9IHdyaXRlKG1fZmQsIGRhdGEsIHNpemUpOwotICAgIGlmIChhbXQgIT0gKHNzaXplX3Qpc2l6ZSkgewotICAgICAgICBtX3N0YXR1cyA9IGVycm5vOwotICAgICAgICBpZiAoREVCVUcpIEFMT0dEKCJ3cml0ZSByZXR1cm5lZCBlcnJvciAlZCAoJXMpIiwgbV9zdGF0dXMsIHN0cmVycm9yKG1fc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBtX3N0YXR1czsKLSAgICB9Ci0gICAgbV9wb3MgKz0gYW10OwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotdm9pZAotQmFja3VwRGF0YVdyaXRlcjo6U2V0S2V5UHJlZml4KGNvbnN0IFN0cmluZzgmIGtleVByZWZpeCkKLXsKLSAgICBtX2tleVByZWZpeCA9IGtleVByZWZpeDsKLX0KLQotCi1CYWNrdXBEYXRhUmVhZGVyOjpCYWNrdXBEYXRhUmVhZGVyKGludCBmZCkKLSAgICA6bV9mZChmZCksCi0gICAgIG1fZG9uZShmYWxzZSksCi0gICAgIG1fc3RhdHVzKE5PX0VSUk9SKSwKLSAgICAgbV9wb3MoMCksCi0gICAgIG1fZW50aXR5Q291bnQoMCkKLXsKLSAgICBtZW1zZXQoJm1faGVhZGVyLCAwLCBzaXplb2YobV9oZWFkZXIpKTsKLX0KLQotQmFja3VwRGF0YVJlYWRlcjo6fkJhY2t1cERhdGFSZWFkZXIoKQotewotfQotCi1zdGF0dXNfdAotQmFja3VwRGF0YVJlYWRlcjo6U3RhdHVzKCkKLXsKLSAgICByZXR1cm4gbV9zdGF0dXM7Ci19Ci0KLSNkZWZpbmUgQ0hFQ0tfU0laRShhY3R1YWwsIGV4cGVjdGVkKSBcCi0gICAgZG8geyBcCi0gICAgICAgIGlmICgoYWN0dWFsKSAhPSAoZXhwZWN0ZWQpKSB7IFwKLSAgICAgICAgICAgIGlmICgoYWN0dWFsKSA9PSAwKSB7IFwKLSAgICAgICAgICAgICAgICBtX3N0YXR1cyA9IEVJTzsgXAotICAgICAgICAgICAgICAgIG1fZG9uZSA9IHRydWU7IFwKLSAgICAgICAgICAgIH0gZWxzZSB7IFwKLSAgICAgICAgICAgICAgICBtX3N0YXR1cyA9IGVycm5vOyBcCi0gICAgICAgICAgICAgICAgQUxPR0QoIkNIRUNLX1NJWkUoYT0lbGQgZT0lbGQpIGZhaWxlZCBhdCBsaW5lICVkIG1fc3RhdHVzPSclcyciLCBcCi0gICAgICAgICAgICAgICAgICAgIGxvbmcoYWN0dWFsKSwgbG9uZyhleHBlY3RlZCksIF9fTElORV9fLCBzdHJlcnJvcihtX3N0YXR1cykpOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgICAgIHJldHVybiBtX3N0YXR1czsgXAotICAgICAgICB9IFwKLSAgICB9IHdoaWxlKDApCi0jZGVmaW5lIFNLSVBfUEFERElORygpIFwKLSAgICBkbyB7IFwKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gc2tpcF9wYWRkaW5nKCk7IFwKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgeyBcCi0gICAgICAgICAgICBBTE9HRCgiU0tJUF9QQURESU5HIEZBSUxFRCBhdCBsaW5lICVkIiwgX19MSU5FX18pOyBcCi0gICAgICAgICAgICBtX3N0YXR1cyA9IGVycjsgXAotICAgICAgICAgICAgcmV0dXJuIGVycjsgXAotICAgICAgICB9IFwKLSAgICB9IHdoaWxlKDApCi0KLXN0YXR1c190Ci1CYWNrdXBEYXRhUmVhZGVyOjpSZWFkTmV4dEhlYWRlcihib29sKiBkb25lLCBpbnQqIHR5cGUpCi17Ci0gICAgKmRvbmUgPSBtX2RvbmU7Ci0gICAgaWYgKG1fc3RhdHVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBtX3N0YXR1czsKLSAgICB9Ci0KLSAgICBpbnQgYW10OwotCi0gICAgYW10ID0gc2tpcF9wYWRkaW5nKCk7Ci0gICAgaWYgKGFtdCA9PSBFSU8pIHsKLSAgICAgICAgKmRvbmUgPSBtX2RvbmUgPSB0cnVlOwotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotICAgIGVsc2UgaWYgKGFtdCAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gYW10OwotICAgIH0KLSAgICBhbXQgPSByZWFkKG1fZmQsICZtX2hlYWRlciwgc2l6ZW9mKG1faGVhZGVyKSk7Ci0gICAgKmRvbmUgPSBtX2RvbmUgPSAoYW10ID09IDApOwotICAgIGlmICgqZG9uZSkgewotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotICAgIENIRUNLX1NJWkUoYW10LCBzaXplb2YobV9oZWFkZXIpKTsKLSAgICBtX3BvcyArPSBzaXplb2YobV9oZWFkZXIpOwotICAgIGlmICh0eXBlKSB7Ci0gICAgICAgICp0eXBlID0gbV9oZWFkZXIudHlwZTsKLSAgICB9Ci0KLSAgICAvLyB2YWxpZGF0ZSBhbmQgZml4IHVwIHRoZSBmaWVsZHMuCi0gICAgbV9oZWFkZXIudHlwZSA9IGZyb21sZWwobV9oZWFkZXIudHlwZSk7Ci0gICAgc3dpdGNoIChtX2hlYWRlci50eXBlKQotICAgIHsKLSAgICAgICAgY2FzZSBCQUNLVVBfSEVBREVSX0VOVElUWV9WMToKLSAgICAgICAgewotICAgICAgICAgICAgbV9oZWFkZXIuZW50aXR5LmtleUxlbiA9IGZyb21sZWwobV9oZWFkZXIuZW50aXR5LmtleUxlbik7Ci0gICAgICAgICAgICBpZiAobV9oZWFkZXIuZW50aXR5LmtleUxlbiA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0QoIkVudGl0eSBoZWFkZXIgYXQgJWQgaGFzIGtleUxlbjw9MDogMHglMDh4XG4iLCAoaW50KW1fcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgKGludCltX2hlYWRlci5lbnRpdHkua2V5TGVuKTsKLSAgICAgICAgICAgICAgICBtX3N0YXR1cyA9IEVJTlZBTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1faGVhZGVyLmVudGl0eS5kYXRhU2l6ZSA9IGZyb21sZWwobV9oZWFkZXIuZW50aXR5LmRhdGFTaXplKTsKLSAgICAgICAgICAgIG1fZW50aXR5Q291bnQrKzsKLQotICAgICAgICAgICAgLy8gcmVhZCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyIChmaWxlbmFtZSkKLSAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9oZWFkZXIuZW50aXR5LmtleUxlbjsKLSAgICAgICAgICAgIGNoYXIqIGJ1ZiA9IG1fa2V5LmxvY2tCdWZmZXIoc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBtX3N0YXR1cyA9IEVOT01FTTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0dXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgYW10ID0gcmVhZChtX2ZkLCBidWYsIHNpemUrMSk7Ci0gICAgICAgICAgICBDSEVDS19TSVpFKGFtdCwgKGludClzaXplKzEpOwotICAgICAgICAgICAgbV9rZXkudW5sb2NrQnVmZmVyKHNpemUpOwotICAgICAgICAgICAgbV9wb3MgKz0gc2l6ZSsxOwotICAgICAgICAgICAgU0tJUF9QQURESU5HKCk7Ci0gICAgICAgICAgICBtX2RhdGFFbmRQb3MgPSBtX3BvcyArIG1faGVhZGVyLmVudGl0eS5kYXRhU2l6ZTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFMT0dEKCJDaHVuayBoZWFkZXIgYXQgJWQgaGFzIGludmFsaWQgdHlwZTogMHglMDh4IiwKLSAgICAgICAgICAgICAgICAgICAgKGludCkobV9wb3MgLSBzaXplb2YobV9oZWFkZXIpKSwgKGludCltX2hlYWRlci50eXBlKTsKLSAgICAgICAgICAgIG1fc3RhdHVzID0gRUlOVkFMOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9zdGF0dXM7Ci19Ci0KLWJvb2wKLUJhY2t1cERhdGFSZWFkZXI6Okhhc0VudGl0aWVzKCkKLXsKLSAgICByZXR1cm4gbV9zdGF0dXMgPT0gTk9fRVJST1IgJiYgbV9oZWFkZXIudHlwZSA9PSBCQUNLVVBfSEVBREVSX0VOVElUWV9WMTsKLX0KLQotc3RhdHVzX3QKLUJhY2t1cERhdGFSZWFkZXI6OlJlYWRFbnRpdHlIZWFkZXIoU3RyaW5nOCoga2V5LCBzaXplX3QqIGRhdGFTaXplKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gbV9zdGF0dXM7Ci0gICAgfQotICAgIGlmIChtX2hlYWRlci50eXBlICE9IEJBQ0tVUF9IRUFERVJfRU5USVRZX1YxKSB7Ci0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0gICAgfQotICAgICprZXkgPSBtX2tleTsKLSAgICAqZGF0YVNpemUgPSBtX2hlYWRlci5lbnRpdHkuZGF0YVNpemU7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdAotQmFja3VwRGF0YVJlYWRlcjo6U2tpcEVudGl0eURhdGEoKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gbV9zdGF0dXM7Ci0gICAgfQotICAgIGlmIChtX2hlYWRlci50eXBlICE9IEJBQ0tVUF9IRUFERVJfRU5USVRZX1YxKSB7Ci0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0gICAgfQotICAgIGlmIChtX2hlYWRlci5lbnRpdHkuZGF0YVNpemUgPiAwKSB7Ci0gICAgICAgIGludCBwb3MgPSBsc2VlayhtX2ZkLCBtX2RhdGFFbmRQb3MsIFNFRUtfU0VUKTsKLSAgICAgICAgaWYgKHBvcyA9PSAtMSkgewotICAgICAgICAgICAgcmV0dXJuIGVycm5vOwotICAgICAgICB9Ci0gICAgICAgIG1fcG9zID0gcG9zOwotICAgIH0KLSAgICBTS0lQX1BBRERJTkcoKTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXNzaXplX3QKLUJhY2t1cERhdGFSZWFkZXI6OlJlYWRFbnRpdHlEYXRhKHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGludCByZW1haW5pbmcgPSBtX2RhdGFFbmRQb3MgLSBtX3BvczsKLSAgICAvL0FMT0dEKCJSZWFkRW50aXR5RGF0YSBzaXplPSVkIG1fcG9zPTB4JXggbV9kYXRhRW5kUG9zPTB4JXggcmVtYWluaW5nPSVkXG4iLAotICAgIC8vICAgICAgICBzaXplLCBtX3BvcywgbV9kYXRhRW5kUG9zLCByZW1haW5pbmcpOwotICAgIGlmIChyZW1haW5pbmcgPD0gMCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCgoaW50KXNpemUpID4gcmVtYWluaW5nKSB7Ci0gICAgICAgIHNpemUgPSByZW1haW5pbmc7Ci0gICAgfQotICAgIC8vQUxPR0QoIiAgIHJlYWRpbmcgJWQgYnl0ZXMiLCBzaXplKTsKLSAgICBpbnQgYW10ID0gcmVhZChtX2ZkLCBkYXRhLCBzaXplKTsKLSAgICBpZiAoYW10IDwgMCkgewotICAgICAgICBtX3N0YXR1cyA9IGVycm5vOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGlmIChhbXQgPT0gMCkgewotICAgICAgICBtX3N0YXR1cyA9IEVJTzsKLSAgICAgICAgbV9kb25lID0gdHJ1ZTsKLSAgICB9Ci0gICAgbV9wb3MgKz0gYW10OwotICAgIHJldHVybiBhbXQ7Ci19Ci0KLXN0YXR1c190Ci1CYWNrdXBEYXRhUmVhZGVyOjpza2lwX3BhZGRpbmcoKQotewotICAgIHNzaXplX3QgYW10OwotICAgIHNzaXplX3QgcGFkZGluZ1NpemU7Ci0KLSAgICBwYWRkaW5nU2l6ZSA9IHBhZGRpbmdfZXh0cmEobV9wb3MpOwotICAgIGlmIChwYWRkaW5nU2l6ZSA+IDApIHsKLSAgICAgICAgdWludDMyX3QgcGFkZGluZzsKLSAgICAgICAgYW10ID0gcmVhZChtX2ZkLCAmcGFkZGluZywgcGFkZGluZ1NpemUpOwotICAgICAgICBDSEVDS19TSVpFKGFtdCwgcGFkZGluZ1NpemUpOwotICAgICAgICBtX3BvcyArPSBhbXQ7Ci0gICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9CYWNrdXBIZWxwZXJzLmNwcCBiL2xpYnMvYW5kcm9pZGZ3L0JhY2t1cEhlbHBlcnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGQzZjQ4Li4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L0JhY2t1cEhlbHBlcnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTU5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJmaWxlX2JhY2t1cF9oZWxwZXIiCi0KLSNpbmNsdWRlIDxhbmRyb2lkZncvQmFja3VwSGVscGVycy5oPgotCi0jaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9CeXRlT3JkZXIuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy91aW8uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+ICAvLyBmb3IgdXRpbWVzCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx1dGltZS5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8emxpYi5oPgotCi0jaW5jbHVkZSA8Y3V0aWxzL2xvZy5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLSNkZWZpbmUgTUFHSUMwIDB4NzA2MTZlNTMgLy8gU25hcAotI2RlZmluZSBNQUdJQzEgMHg2NTZjNjk0NiAvLyBGaWxlCi0KLS8qCi0gKiBGaWxlIGVudGl0eSBkYXRhIGZvcm1hdCAodjEpOgotICoKLSAqICAgLSA0LWJ5dGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIG1ldGFkYXRhLCBsaXR0bGUgZW5kaWFuICgweDAwMDAwMDAxIGZvciB2MSkKLSAqICAgLSAxMiBieXRlcyBvZiBtZXRhZGF0YQotICogICAtIHRoZSBmaWxlIGRhdGEgaXRzZWxmCi0gKgotICogaS5lLiBhIDE2LWJ5dGUgbWV0YWRhdGEgaGVhZGVyIGZvbGxvd2VkIGJ5IHRoZSByYXcgZmlsZSBkYXRhLiAgSWYgdGhlCi0gKiByZXN0b3JlIGNvZGUgZG9lcyBub3QgcmVjb2duaXplIHRoZSBtZXRhZGF0YSB2ZXJzaW9uLCBpdCBjYW4gc3RpbGwKLSAqIGludGVycHJldCB0aGUgZmlsZSBkYXRhIGl0c2VsZiBjb3JyZWN0bHkuCi0gKgotICogZmlsZV9tZXRhZGF0YV92MToKLSAqCi0gKiAgIC0gNCBieXRlIHZlcnNpb24gbnVtYmVyID09PSAweDAwMDAwMDAxIChsaXR0bGUgZW5kaWFuKQotICogICAtIDQtYnl0ZSBhY2Nlc3MgbW9kZSAobGl0dGxlLWVuZGlhbikKLSAqICAgLSB1bmRlZmluZWQgKDggYnl0ZXMpCi0gKi8KLQotc3RydWN0IGZpbGVfbWV0YWRhdGFfdjEgewotICAgIGludCB2ZXJzaW9uOwotICAgIGludCBtb2RlOwotICAgIGludCB1bmRlZmluZWRfMTsKLSAgICBpbnQgdW5kZWZpbmVkXzI7Ci19OwotCi1jb25zdCBzdGF0aWMgaW50IENVUlJFTlRfTUVUQURBVEFfVkVSU0lPTiA9IDE7Ci0KLSNpZiAxCi0jZGVmaW5lIExPR1AoZiwgeC4uLikKLSNlbHNlCi0jaWYgVEVTVF9CQUNLVVBfSEVMUEVSUwotI2RlZmluZSBMT0dQKGYsIHguLi4pIHByaW50ZihmICJcbiIsIHgpCi0jZWxzZQotI2RlZmluZSBMT0dQKHguLi4pIEFMT0dEKHgpCi0jZW5kaWYKLSNlbmRpZgotCi1jb25zdCBzdGF0aWMgaW50IFJPVU5EX1VQWzRdID0geyAwLCAzLCAyLCAxIH07Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1yb3VuZF91cChpbnQgbikKLXsKLSAgICByZXR1cm4gbiArIFJPVU5EX1VQW24gJSA0XTsKLX0KLQotc3RhdGljIGludAotcmVhZF9zbmFwc2hvdF9maWxlKGludCBmZCwgS2V5ZWRWZWN0b3I8U3RyaW5nOCxGaWxlU3RhdGU+KiBzbmFwc2hvdCkKLXsKLSAgICBpbnQgYnl0ZXNSZWFkID0gMDsKLSAgICBpbnQgYW10OwotICAgIFNuYXBzaG90SGVhZGVyIGhlYWRlcjsKLQotICAgIGFtdCA9IHJlYWQoZmQsICZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKLSAgICBpZiAoYW10ICE9IHNpemVvZihoZWFkZXIpKSB7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0gICAgYnl0ZXNSZWFkICs9IGFtdDsKLQotICAgIGlmIChoZWFkZXIubWFnaWMwICE9IE1BR0lDMCB8fCBoZWFkZXIubWFnaWMxICE9IE1BR0lDMSkgewotICAgICAgICBBTE9HVygicmVhZF9zbmFwc2hvdF9maWxlIGhlYWRlci5tYWdpYzA9MHglMDh4IG1hZ2ljMT0weCUwOHgiLCBoZWFkZXIubWFnaWMwLCBoZWFkZXIubWFnaWMxKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaT0wOyBpPGhlYWRlci5maWxlQ291bnQ7IGkrKykgewotICAgICAgICBGaWxlU3RhdGUgZmlsZTsKLSAgICAgICAgY2hhciBmaWxlbmFtZUJ1ZlsxMjhdOwotCi0gICAgICAgIGFtdCA9IHJlYWQoZmQsICZmaWxlLCBzaXplb2YoRmlsZVN0YXRlKSk7Ci0gICAgICAgIGlmIChhbXQgIT0gc2l6ZW9mKEZpbGVTdGF0ZSkpIHsKLSAgICAgICAgICAgIEFMT0dXKCJyZWFkX3NuYXBzaG90X2ZpbGUgRmlsZVN0YXRlIHRydW5jYXRlZC9lcnJvciB3aXRoIHJlYWQgYXQgJWQgYnl0ZXNcbiIsIGJ5dGVzUmVhZCk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBieXRlc1JlYWQgKz0gYW10OwotCi0gICAgICAgIC8vIGZpbGVuYW1lIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWQsIGJ1dCBpdCBpcyBwYWRkZWQKLSAgICAgICAgaW50IG5hbWVCdWZTaXplID0gcm91bmRfdXAoZmlsZS5uYW1lTGVuKTsKLSAgICAgICAgY2hhciogZmlsZW5hbWUgPSBuYW1lQnVmU2l6ZSA8PSAoaW50KXNpemVvZihmaWxlbmFtZUJ1ZikKLSAgICAgICAgICAgICAgICA/IGZpbGVuYW1lQnVmCi0gICAgICAgICAgICAgICAgOiAoY2hhciopbWFsbG9jKG5hbWVCdWZTaXplKTsKLSAgICAgICAgYW10ID0gcmVhZChmZCwgZmlsZW5hbWUsIG5hbWVCdWZTaXplKTsKLSAgICAgICAgaWYgKGFtdCA9PSBuYW1lQnVmU2l6ZSkgewotICAgICAgICAgICAgc25hcHNob3QtPmFkZChTdHJpbmc4KGZpbGVuYW1lLCBmaWxlLm5hbWVMZW4pLCBmaWxlKTsKLSAgICAgICAgfQotICAgICAgICBieXRlc1JlYWQgKz0gYW10OwotICAgICAgICBpZiAoZmlsZW5hbWUgIT0gZmlsZW5hbWVCdWYpIHsKLSAgICAgICAgICAgIGZyZWUoZmlsZW5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhbXQgIT0gbmFtZUJ1ZlNpemUpIHsKLSAgICAgICAgICAgIEFMT0dXKCJyZWFkX3NuYXBzaG90X2ZpbGUgZmlsZW5hbWUgdHJ1bmNhdGVkL2Vycm9yIHdpdGggcmVhZCBhdCAlZCBieXRlc1xuIiwgYnl0ZXNSZWFkKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGhlYWRlci50b3RhbFNpemUgIT0gYnl0ZXNSZWFkKSB7Ci0gICAgICAgIEFMT0dXKCJyZWFkX3NuYXBzaG90X2ZpbGUgbGVuZ3RoIG1pc21hdGNoOiBoZWFkZXIudG90YWxTaXplPSVkIGJ5dGVzUmVhZD0lZFxuIiwKLSAgICAgICAgICAgICAgICBoZWFkZXIudG90YWxTaXplLCBieXRlc1JlYWQpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotd3JpdGVfc25hcHNob3RfZmlsZShpbnQgZmQsIGNvbnN0IEtleWVkVmVjdG9yPFN0cmluZzgsRmlsZVJlYz4mIHNuYXBzaG90KQotewotICAgIGludCBmaWxlQ291bnQgPSAwOwotICAgIGludCBieXRlc1dyaXR0ZW4gPSBzaXplb2YoU25hcHNob3RIZWFkZXIpOwotICAgIC8vIHByZWZsaWdodCBzaXplCi0gICAgY29uc3QgaW50IE4gPSBzbmFwc2hvdC5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBGaWxlUmVjJiBnID0gc25hcHNob3QudmFsdWVBdChpKTsKLSAgICAgICAgaWYgKCFnLmRlbGV0ZWQpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIG5hbWUgPSBzbmFwc2hvdC5rZXlBdChpKTsKLSAgICAgICAgICAgIGJ5dGVzV3JpdHRlbiArPSBzaXplb2YoRmlsZVN0YXRlKSArIHJvdW5kX3VwKG5hbWUubGVuZ3RoKCkpOwotICAgICAgICAgICAgZmlsZUNvdW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBMT0dQKCJ3cml0ZV9zbmFwc2hvdF9maWxlIGZkPSVkXG4iLCBmZCk7Ci0KLSAgICBpbnQgYW10OwotICAgIFNuYXBzaG90SGVhZGVyIGhlYWRlciA9IHsgTUFHSUMwLCBmaWxlQ291bnQsIE1BR0lDMSwgYnl0ZXNXcml0dGVuIH07Ci0KLSAgICBhbXQgPSB3cml0ZShmZCwgJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOwotICAgIGlmIChhbXQgIT0gc2l6ZW9mKGhlYWRlcikpIHsKLSAgICAgICAgQUxPR1coIndyaXRlX3NuYXBzaG90X2ZpbGUgZXJyb3Igd3JpdGluZyBoZWFkZXIgJXMiLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBGaWxlUmVjIHIgPSBzbmFwc2hvdC52YWx1ZUF0KGkpOwotICAgICAgICBpZiAoIXIuZGVsZXRlZCkgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nOCYgbmFtZSA9IHNuYXBzaG90LmtleUF0KGkpOwotICAgICAgICAgICAgaW50IG5hbWVMZW4gPSByLnMubmFtZUxlbiA9IG5hbWUubGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIGFtdCA9IHdyaXRlKGZkLCAmci5zLCBzaXplb2YoRmlsZVN0YXRlKSk7Ci0gICAgICAgICAgICBpZiAoYW10ICE9IHNpemVvZihGaWxlU3RhdGUpKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIndyaXRlX3NuYXBzaG90X2ZpbGUgZXJyb3Igd3JpdGluZyBoZWFkZXIgJXMiLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBmaWxlbmFtZSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkLCBidXQgaXQgaXMgcGFkZGVkCi0gICAgICAgICAgICBhbXQgPSB3cml0ZShmZCwgbmFtZS5zdHJpbmcoKSwgbmFtZUxlbik7Ci0gICAgICAgICAgICBpZiAoYW10ICE9IG5hbWVMZW4pIHsKLSAgICAgICAgICAgICAgICBBTE9HVygid3JpdGVfc25hcHNob3RfZmlsZSBlcnJvciB3cml0aW5nIGZpbGVuYW1lICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBwYWRkaW5nTGVuID0gUk9VTkRfVVBbbmFtZUxlbiAlIDRdOwotICAgICAgICAgICAgaWYgKHBhZGRpbmdMZW4gIT0gMCkgewotICAgICAgICAgICAgICAgIGludCBwYWRkaW5nID0gMHhhYmFiYWJhYjsKLSAgICAgICAgICAgICAgICBhbXQgPSB3cml0ZShmZCwgJnBhZGRpbmcsIHBhZGRpbmdMZW4pOwotICAgICAgICAgICAgICAgIGlmIChhbXQgIT0gcGFkZGluZ0xlbikgewotICAgICAgICAgICAgICAgICAgICBBTE9HVygid3JpdGVfc25hcHNob3RfZmlsZSBlcnJvciB3cml0aW5nICVkIGJ5dGVzIG9mIGZpbGVuYW1lIHBhZGRpbmcgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdMZW4sIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci13cml0ZV9kZWxldGVfZmlsZShCYWNrdXBEYXRhV3JpdGVyKiBkYXRhU3RyZWFtLCBjb25zdCBTdHJpbmc4JiBrZXkpCi17Ci0gICAgTE9HUCgid3JpdGVfZGVsZXRlX2ZpbGUgJXNcbiIsIGtleS5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuIGRhdGFTdHJlYW0tPldyaXRlRW50aXR5SGVhZGVyKGtleSwgLTEpOwotfQotCi1zdGF0aWMgaW50Ci13cml0ZV91cGRhdGVfZmlsZShCYWNrdXBEYXRhV3JpdGVyKiBkYXRhU3RyZWFtLCBpbnQgZmQsIGludCBtb2RlLCBjb25zdCBTdHJpbmc4JiBrZXksCi0gICAgICAgIGNoYXIgY29uc3QqIHJlYWxGaWxlbmFtZSkKLXsKLSAgICBMT0dQKCJ3cml0ZV91cGRhdGVfZmlsZSAlcyAoJXMpIDogbW9kZSAwJW9cbiIsIHJlYWxGaWxlbmFtZSwga2V5LnN0cmluZygpLCBtb2RlKTsKLQotICAgIGNvbnN0IGludCBidWZzaXplID0gNCoxMDI0OwotICAgIGludCBlcnI7Ci0gICAgaW50IGFtdDsKLSAgICBpbnQgZmlsZVNpemU7Ci0gICAgaW50IGJ5dGVzTGVmdDsKLSAgICBmaWxlX21ldGFkYXRhX3YxIG1ldGFkYXRhOwotCi0gICAgY2hhciogYnVmID0gKGNoYXIqKW1hbGxvYyhidWZzaXplKTsKLSAgICBpbnQgY3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0KLQotICAgIGZpbGVTaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfRU5EKTsKLSAgICBsc2VlayhmZCwgMCwgU0VFS19TRVQpOwotCi0gICAgaWYgKHNpemVvZihtZXRhZGF0YSkgIT0gMTYpIHsKLSAgICAgICAgQUxPR0UoIkVSUk9SOiBtZXRhZGF0YSBibG9jayBpcyB0aGUgd3Jvbmcgc2l6ZSEiKTsKLSAgICB9Ci0KLSAgICBieXRlc0xlZnQgPSBmaWxlU2l6ZSArIHNpemVvZihtZXRhZGF0YSk7Ci0gICAgZXJyID0gZGF0YVN0cmVhbS0+V3JpdGVFbnRpdHlIZWFkZXIoa2V5LCBieXRlc0xlZnQpOwotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICBmcmVlKGJ1Zik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLy8gc3RvcmUgdGhlIGZpbGUgbWV0YWRhdGEgZmlyc3QKLSAgICBtZXRhZGF0YS52ZXJzaW9uID0gdG9sZWwoQ1VSUkVOVF9NRVRBREFUQV9WRVJTSU9OKTsKLSAgICBtZXRhZGF0YS5tb2RlID0gdG9sZWwobW9kZSk7Ci0gICAgbWV0YWRhdGEudW5kZWZpbmVkXzEgPSBtZXRhZGF0YS51bmRlZmluZWRfMiA9IDA7Ci0gICAgZXJyID0gZGF0YVN0cmVhbS0+V3JpdGVFbnRpdHlEYXRhKCZtZXRhZGF0YSwgc2l6ZW9mKG1ldGFkYXRhKSk7Ci0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIGZyZWUoYnVmKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgYnl0ZXNMZWZ0IC09IHNpemVvZihtZXRhZGF0YSk7IC8vIGJ5dGVzTGVmdCBzaG91bGQgPT0gZmlsZVNpemUgbm93Ci0KLSAgICAvLyBub3cgc3RvcmUgdGhlIGZpbGUgY29udGVudAotICAgIHdoaWxlICgoYW10ID0gcmVhZChmZCwgYnVmLCBidWZzaXplKSkgIT0gMCAmJiBieXRlc0xlZnQgPiAwKSB7Ci0gICAgICAgIGJ5dGVzTGVmdCAtPSBhbXQ7Ci0gICAgICAgIGlmIChieXRlc0xlZnQgPCAwKSB7Ci0gICAgICAgICAgICBhbXQgKz0gYnl0ZXNMZWZ0OyAvLyBQbHVzIGEgbmVnYXRpdmUgaXMgbWludXMuICBEb24ndCB3cml0ZSBtb3JlIHRoYW4gd2UgcHJvbWlzZWQuCi0gICAgICAgIH0KLSAgICAgICAgZXJyID0gZGF0YVN0cmVhbS0+V3JpdGVFbnRpdHlEYXRhKGJ1ZiwgYW10KTsKLSAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICBmcmVlKGJ1Zik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChieXRlc0xlZnQgIT0gMCkgewotICAgICAgICBpZiAoYnl0ZXNMZWZ0ID4gMCkgewotICAgICAgICAgICAgLy8gUGFkIG91dCB0aGUgc3BhY2Ugd2UgcHJvbWlzZWQgaW4gdGhlIGJ1ZmZlci4gIFdlIGNhbid0IGNvcnJ1cHQgdGhlIGJ1ZmZlciwKLSAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBkYXRhIHdlJ3JlIHNlbmRpbmcgaXMgcHJvYmFibHkgYmFkLgotICAgICAgICAgICAgbWVtc2V0KGJ1ZiwgMCwgYnVmc2l6ZSk7Ci0gICAgICAgICAgICB3aGlsZSAoYnl0ZXNMZWZ0ID4gMCkgewotICAgICAgICAgICAgICAgIGFtdCA9IGJ5dGVzTGVmdCA8IGJ1ZnNpemUgPyBieXRlc0xlZnQgOiBidWZzaXplOwotICAgICAgICAgICAgICAgIGJ5dGVzTGVmdCAtPSBhbXQ7Ci0gICAgICAgICAgICAgICAgZXJyID0gZGF0YVN0cmVhbS0+V3JpdGVFbnRpdHlEYXRhKGJ1ZiwgYW10KTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShidWYpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBBTE9HRSgid3JpdGVfdXBkYXRlX2ZpbGUgc2l6ZSBtaXNtYXRjaCBmb3IgJXMuIGV4cGVjdGVkPSVkIGFjdHVhbD0lZC4iCi0gICAgICAgICAgICAgICAgIiBZb3UgYXJlbid0IGRvaW5nIHByb3BlciBsb2NraW5nISIsIHJlYWxGaWxlbmFtZSwgZmlsZVNpemUsIGZpbGVTaXplLWJ5dGVzTGVmdCk7Ci0gICAgfQotCi0gICAgZnJlZShidWYpOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdGljIGludAotd3JpdGVfdXBkYXRlX2ZpbGUoQmFja3VwRGF0YVdyaXRlciogZGF0YVN0cmVhbSwgY29uc3QgU3RyaW5nOCYga2V5LCBjaGFyIGNvbnN0KiByZWFsRmlsZW5hbWUpCi17Ci0gICAgaW50IGVycjsKLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKLQotICAgIGVyciA9IHN0YXQocmVhbEZpbGVuYW1lLCAmc3QpOwotICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICBpbnQgZmQgPSBvcGVuKHJlYWxGaWxlbmFtZSwgT19SRE9OTFkpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgZXJyID0gd3JpdGVfdXBkYXRlX2ZpbGUoZGF0YVN0cmVhbSwgZmQsIHN0LnN0X21vZGUsIGtleSwgcmVhbEZpbGVuYW1lKTsKLSAgICBjbG9zZShmZCk7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludAotY29tcHV0ZV9jcmMzMihpbnQgZmQpCi17Ci0gICAgY29uc3QgaW50IGJ1ZnNpemUgPSA0KjEwMjQ7Ci0gICAgaW50IGFtdDsKLQotICAgIGNoYXIqIGJ1ZiA9IChjaGFyKiltYWxsb2MoYnVmc2l6ZSk7Ci0gICAgaW50IGNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotCi0gICAgbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKLQotICAgIHdoaWxlICgoYW10ID0gcmVhZChmZCwgYnVmLCBidWZzaXplKSkgIT0gMCkgewotICAgICAgICBjcmMgPSBjcmMzMihjcmMsIChCeXRlZiopYnVmLCBhbXQpOwotICAgIH0KLQotICAgIGZyZWUoYnVmKTsKLSAgICByZXR1cm4gY3JjOwotfQotCi1pbnQKLWJhY2tfdXBfZmlsZXMoaW50IG9sZFNuYXBzaG90RkQsIEJhY2t1cERhdGFXcml0ZXIqIGRhdGFTdHJlYW0sIGludCBuZXdTbmFwc2hvdEZELAotICAgICAgICBjaGFyIGNvbnN0KiBjb25zdCogZmlsZXMsIGNoYXIgY29uc3QqIGNvbnN0KiBrZXlzLCBpbnQgZmlsZUNvdW50KQotewotICAgIGludCBlcnI7Ci0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCxGaWxlU3RhdGU+IG9sZFNuYXBzaG90OwotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsRmlsZVJlYz4gbmV3U25hcHNob3Q7Ci0KLSAgICBpZiAob2xkU25hcHNob3RGRCAhPSAtMSkgewotICAgICAgICBlcnIgPSByZWFkX3NuYXBzaG90X2ZpbGUob2xkU25hcHNob3RGRCwgJm9sZFNuYXBzaG90KTsKLSAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICAvLyBPbiBhbiBlcnJvciwgdHJlYXQgdGhpcyBhcyBhIGZ1bGwgYmFja3VwLgotICAgICAgICAgICAgb2xkU25hcHNob3QuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGk9MDsgaTxmaWxlQ291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmc4IGtleShrZXlzW2ldKTsKLSAgICAgICAgRmlsZVJlYyByOwotICAgICAgICBjaGFyIGNvbnN0KiBmaWxlID0gZmlsZXNbaV07Ci0gICAgICAgIHIuZmlsZSA9IGZpbGU7Ci0gICAgICAgIHN0cnVjdCBzdGF0IHN0OwotCi0gICAgICAgIGVyciA9IHN0YXQoZmlsZSwgJnN0KTsKLSAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICByLmRlbGV0ZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgci5kZWxldGVkID0gZmFsc2U7Ci0gICAgICAgICAgICByLnMubW9kVGltZV9zZWMgPSBzdC5zdF9tdGltZTsKLSAgICAgICAgICAgIHIucy5tb2RUaW1lX25zZWMgPSAwOyAvLyB3b3JrYXJvdW5kIHNpbSBicmVha2FnZQotICAgICAgICAgICAgLy9yLnMubW9kVGltZV9uc2VjID0gc3Quc3RfbXRpbWVfbnNlYzsKLSAgICAgICAgICAgIHIucy5tb2RlID0gc3Quc3RfbW9kZTsKLSAgICAgICAgICAgIHIucy5zaXplID0gc3Quc3Rfc2l6ZTsKLSAgICAgICAgICAgIC8vIHdlIGNvbXB1dGUgdGhlIGNyYzMyIGxhdGVyIGRvd24gYmVsb3csIHdoZW4gd2UgYWxyZWFkeSBoYXZlIHRoZSBmaWxlIG9wZW4uCi0KLSAgICAgICAgICAgIGlmIChuZXdTbmFwc2hvdC5pbmRleE9mS2V5KGtleSkgPj0gMCkgewotICAgICAgICAgICAgICAgIExPR1AoImJhY2tfdXBfZmlsZXMga2V5IGFscmVhZHkgaW4gdXNlICclcyciLCBrZXkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBuZXdTbmFwc2hvdC5hZGQoa2V5LCByKTsKLSAgICB9Ci0KLSAgICBpbnQgbiA9IDA7Ci0gICAgaW50IE4gPSBvbGRTbmFwc2hvdC5zaXplKCk7Ci0gICAgaW50IG0gPSAwOwotCi0gICAgd2hpbGUgKG48TiAmJiBtPGZpbGVDb3VudCkgewotICAgICAgICBjb25zdCBTdHJpbmc4JiBwID0gb2xkU25hcHNob3Qua2V5QXQobik7Ci0gICAgICAgIGNvbnN0IFN0cmluZzgmIHEgPSBuZXdTbmFwc2hvdC5rZXlBdChtKTsKLSAgICAgICAgRmlsZVJlYyYgZyA9IG5ld1NuYXBzaG90LmVkaXRWYWx1ZUF0KG0pOwotICAgICAgICBpbnQgY21wID0gcC5jb21wYXJlKHEpOwotICAgICAgICBpZiAoZy5kZWxldGVkIHx8IGNtcCA8IDApIHsKLSAgICAgICAgICAgIC8vIGZpbGUgcmVtb3ZlZAotICAgICAgICAgICAgTE9HUCgiZmlsZSByZW1vdmVkOiAlcyIsIHAuc3RyaW5nKCkpOwotICAgICAgICAgICAgZy5kZWxldGVkID0gdHJ1ZTsgLy8gVGhleSBkaWRuJ3QgbWVudGlvbiB0aGUgZmlsZSwgYnV0IHdlIG5vdGljZWQgdGhhdCBpdCdzIGdvbmUuCi0gICAgICAgICAgICBkYXRhU3RyZWFtLT5Xcml0ZUVudGl0eUhlYWRlcihwLCAtMSk7Ci0gICAgICAgICAgICBuKys7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY21wID4gMCkgewotICAgICAgICAgICAgLy8gZmlsZSBhZGRlZAotICAgICAgICAgICAgTE9HUCgiZmlsZSBhZGRlZDogJXMiLCBnLmZpbGUuc3RyaW5nKCkpOwotICAgICAgICAgICAgd3JpdGVfdXBkYXRlX2ZpbGUoZGF0YVN0cmVhbSwgcSwgZy5maWxlLnN0cmluZygpKTsKLSAgICAgICAgICAgIG0rKzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIGJvdGggZmlsZXMgZXhpc3QsIGNoZWNrIHRoZW0KLSAgICAgICAgICAgIGNvbnN0IEZpbGVTdGF0ZSYgZiA9IG9sZFNuYXBzaG90LnZhbHVlQXQobik7Ci0KLSAgICAgICAgICAgIGludCBmZCA9IG9wZW4oZy5maWxlLnN0cmluZygpLCBPX1JET05MWSk7Ci0gICAgICAgICAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgb3BlbiB0aGUgZmlsZS4gIERvbid0IHJlcG9ydCBpdCBhcyBhIGRlbGV0ZSBlaXRoZXIuICBMZXQgdGhlCi0gICAgICAgICAgICAgICAgLy8gc2VydmVyIGtlZXAgdGhlIG9sZCB2ZXJzaW9uLiAgTWF5YmUgdGhleSdsbCBiZSBhYmxlIHRvIGRlYWwgd2l0aCBpdAotICAgICAgICAgICAgICAgIC8vIG9uIHJlc3RvcmUuCi0gICAgICAgICAgICAgICAgTE9HUCgiVW5hYmxlIHRvIG9wZW4gZmlsZSAlcyAtIHNraXBwaW5nIiwgZy5maWxlLnN0cmluZygpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZy5zLmNyYzMyID0gY29tcHV0ZV9jcmMzMihmZCk7Ci0KLSAgICAgICAgICAgICAgICBMT0dQKCIlcyIsIHEuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIExPR1AoIiAgbmV3OiBtb2RUaW1lPSVkLCVkIG1vZGU9JTA0byBzaXplPSUtM2QgY3JjMzI9MHglMDh4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGYubW9kVGltZV9zZWMsIGYubW9kVGltZV9uc2VjLCBmLm1vZGUsIGYuc2l6ZSwgZi5jcmMzMik7Ci0gICAgICAgICAgICAgICAgTE9HUCgiICBvbGQ6IG1vZFRpbWU9JWQsJWQgbW9kZT0lMDRvIHNpemU9JS0zZCBjcmMzMj0weCUwOHgiLAotICAgICAgICAgICAgICAgICAgICAgICAgZy5zLm1vZFRpbWVfc2VjLCBnLnMubW9kVGltZV9uc2VjLCBnLnMubW9kZSwgZy5zLnNpemUsIGcucy5jcmMzMik7Ci0gICAgICAgICAgICAgICAgaWYgKGYubW9kVGltZV9zZWMgIT0gZy5zLm1vZFRpbWVfc2VjIHx8IGYubW9kVGltZV9uc2VjICE9IGcucy5tb2RUaW1lX25zZWMKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGYubW9kZSAhPSBnLnMubW9kZSB8fCBmLnNpemUgIT0gZy5zLnNpemUgfHwgZi5jcmMzMiAhPSBnLnMuY3JjMzIpIHsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVfdXBkYXRlX2ZpbGUoZGF0YVN0cmVhbSwgZmQsIGcucy5tb2RlLCBwLCBnLmZpbGUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgIG0rKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIHRoZXNlIHdlcmUgZGVsZXRlZAotICAgIHdoaWxlIChuPE4pIHsKLSAgICAgICAgZGF0YVN0cmVhbS0+V3JpdGVFbnRpdHlIZWFkZXIob2xkU25hcHNob3Qua2V5QXQobiksIC0xKTsKLSAgICAgICAgbisrOwotICAgIH0KLQotICAgIC8vIHRoZXNlIHdlcmUgYWRkZWQKLSAgICB3aGlsZSAobTxmaWxlQ291bnQpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nOCYgcSA9IG5ld1NuYXBzaG90LmtleUF0KG0pOwotICAgICAgICBGaWxlUmVjJiBnID0gbmV3U25hcHNob3QuZWRpdFZhbHVlQXQobSk7Ci0gICAgICAgIHdyaXRlX3VwZGF0ZV9maWxlKGRhdGFTdHJlYW0sIHEsIGcuZmlsZS5zdHJpbmcoKSk7Ci0gICAgICAgIG0rKzsKLSAgICB9Ci0KLSAgICBlcnIgPSB3cml0ZV9zbmFwc2hvdF9maWxlKG5ld1NuYXBzaG90RkQsIG5ld1NuYXBzaG90KTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBVdGlsaXR5IGZ1bmN0aW9uLCBlcXVpdmFsZW50IHRvIHN0cGNweSgpOiBwZXJmb3JtIGEgc3RyY3B5LCBidXQgaW5zdGVhZCBvZgotLy8gcmV0dXJuaW5nIHRoZSBpbml0aWFsIGRlc3QsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRyYWlsaW5nIE5VTC4KLXN0YXRpYyBjaGFyKiBzdHJjcHlfcHRyKGNoYXIqIGRlc3QsIGNvbnN0IGNoYXIqIHN0cikgewotICAgIGlmIChkZXN0ICYmIHN0cikgewotICAgICAgICB3aGlsZSAoKCpkZXN0ID0gKnN0cikgIT0gMCkgewotICAgICAgICAgICAgZGVzdCsrOwotICAgICAgICAgICAgc3RyKys7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGRlc3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhbGNfdGFyX2NoZWNrc3VtKGNoYXIqIGJ1ZikgewotICAgIC8vIFsgMTQ4IDogICA4IF0gY2hlY2tzdW0gLS0gdG8gYmUgY2FsY3VsYXRlZCB3aXRoIHRoaXMgZmllbGQgYXMgc3BhY2UgY2hhcnMKLSAgICBtZW1zZXQoYnVmICsgMTQ4LCAnICcsIDgpOwotCi0gICAgdWludDE2X3Qgc3VtID0gMDsKLSAgICBmb3IgKHVpbnQ4X3QqIHAgPSAodWludDhfdCopIGJ1ZjsgcCA8ICgodWludDhfdCopYnVmKSArIDUxMjsgcCsrKSB7Ci0gICAgICAgIHN1bSArPSAqcDsKLSAgICB9Ci0KLSAgICAvLyBOb3cgd3JpdGUgdGhlIHJlYWwgY2hlY2tzdW0gdmFsdWU6Ci0gICAgLy8gWyAxNDggOiAgIDggXSAgY2hlY2tzdW06IDYgb2N0YWwgZGlnaXRzIFtsZWFkaW5nIHplcm9lc10sIE5VTCwgU1BDCi0gICAgc3ByaW50ZihidWYgKyAxNDgsICIlMDZvIiwgc3VtKTsgLy8gdGhlIHRyYWlsaW5nIHNwYWNlIGlzIGFscmVhZHkgaW4gcGxhY2UKLX0KLQotLy8gUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbgotc3RhdGljIGludCB3cml0ZV9wYXhfaGVhZGVyX2VudHJ5KGNoYXIqIGJ1ZiwgY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSkgewotICAgIC8vIHN0YXJ0IHdpdGggdGhlIHNpemUgb2YgIjEga2V5PXZhbHVlXG4iCi0gICAgaW50IGxlbiA9IHN0cmxlbihrZXkpICsgc3RybGVuKHZhbHVlKSArIDQ7Ci0gICAgaWYgKGxlbiA+IDkpIGxlbisrOwotICAgIGlmIChsZW4gPiA5OSkgbGVuKys7Ci0gICAgaWYgKGxlbiA+IDk5OSkgbGVuKys7Ci0gICAgLy8gc2luY2UgUEFUSF9NQVggaXMgNDA5NiB3ZSBkb24ndCBleHBlY3QgdG8gaGF2ZSB0byBnZW5lcmF0ZSBhbnkgc2luZ2xlCi0gICAgLy8gaGVhZGVyIGVudHJ5IGxvbmdlciB0aGFuIDk5OTkgY2hhcmFjdGVycwotCi0gICAgcmV0dXJuIHNwcmludGYoYnVmLCAiJWQgJXM9JXNcbiIsIGxlbiwga2V5LCB2YWx1ZSk7Ci19Ci0KLS8vIFdpcmUgZm9ybWF0IHRvIHRoZSBiYWNrdXAgbWFuYWdlciBzZXJ2aWNlIGlzIGNodW5rZWQ6ICBlYWNoIGNodW5rIGlzIHByZWZpeGVkIGJ5Ci0vLyBhIDQtYnl0ZSBjb3VudCBvZiBpdHMgc2l6ZS4gIEEgY2h1bmsgc2l6ZSBvZiB6ZXJvIChmb3VyIHplcm8gYnl0ZXMpIGluZGljYXRlcyBFT0QuCi12b2lkIHNlbmRfdGFyZmlsZV9jaHVuayhCYWNrdXBEYXRhV3JpdGVyKiB3cml0ZXIsIGNvbnN0IGNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemUpIHsKLSAgICB1aW50MzJfdCBjaHVua19zaXplX25vID0gaHRvbmwoc2l6ZSk7Ci0gICAgd3JpdGVyLT5Xcml0ZUVudGl0eURhdGEoJmNodW5rX3NpemVfbm8sIDQpOwotICAgIGlmIChzaXplICE9IDApIHdyaXRlci0+V3JpdGVFbnRpdHlEYXRhKGJ1ZmZlciwgc2l6ZSk7Ci19Ci0KLWludCB3cml0ZV90YXJmaWxlKGNvbnN0IFN0cmluZzgmIHBhY2thZ2VOYW1lLCBjb25zdCBTdHJpbmc4JiBkb21haW4sCi0gICAgICAgIGNvbnN0IFN0cmluZzgmIHJvb3RwYXRoLCBjb25zdCBTdHJpbmc4JiBmaWxlcGF0aCwgQmFja3VwRGF0YVdyaXRlciogd3JpdGVyKQotewotICAgIC8vIEluIHRoZSBvdXRwdXQgc3RyZWFtIGV2ZXJ5dGhpbmcgaXMgc3RvcmVkIHJlbGF0aXZlIHRvIHRoZSByb290Ci0gICAgY29uc3QgY2hhciogcmVsc3RhcnQgPSBmaWxlcGF0aC5zdHJpbmcoKSArIHJvb3RwYXRoLmxlbmd0aCgpOwotICAgIGlmICgqcmVsc3RhcnQgPT0gJy8nKSByZWxzdGFydCsrOyAgICAgLy8gd29uJ3QgYmUgdHJ1ZSB3aGVuIHBhdGggPT0gcm9vdHBhdGgKLSAgICBTdHJpbmc4IHJlbHBhdGgocmVsc3RhcnQpOwotCi0gICAgLy8gSWYgcmVscGF0aCBpcyBlbXB0eSwgaXQgbWVhbnMgdGhpcyBpcyB0aGUgdG9wIG9mIG9uZSBvZiB0aGUgc3RhbmRhcmQgbmFtZWQKLSAgICAvLyBkb21haW4gZGlyZWN0b3JpZXMsIHNvIHdlIHNob3VsZCBqdXN0IHNraXAgaXQKLSAgICBpZiAocmVscGF0aC5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFRvbyBsb25nIGEgbmFtZSBmb3IgdGhlIHVzdGFyIGZvcm1hdD8KLSAgICAvLyAgICAiYXBwcy8iICsgcGFja2FnZW5hbWUgKyAnLycgKyBkb21haW5wYXRoIDwgMTU1IGNoYXJzCi0gICAgLy8gICAgcmVscGF0aCA8IDEwMCBjaGFycwotICAgIGJvb2wgbmVlZEV4dGVuZGVkID0gZmFsc2U7Ci0gICAgaWYgKCg1ICsgcGFja2FnZU5hbWUubGVuZ3RoKCkgKyAxICsgZG9tYWluLmxlbmd0aCgpID49IDE1NSkgfHwgKHJlbHBhdGgubGVuZ3RoKCkgPj0gMTAwKSkgewotICAgICAgICBuZWVkRXh0ZW5kZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIE5vbi03Yml0LWNsZWFuIHBhdGggYWxzbyBtZWFucyBuZWVkaW5nIHBheCBleHRlbmRlZCBmb3JtYXQKLSAgICBpZiAoIW5lZWRFeHRlbmRlZCkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVwYXRoLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICgoZmlsZXBhdGhbaV0gJiAweDgwKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgbmVlZEV4dGVuZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGludCBlcnIgPSAwOwotICAgIHN0cnVjdCBzdGF0NjQgczsKLSAgICBpZiAobHN0YXQ2NChmaWxlcGF0aC5zdHJpbmcoKSwgJnMpICE9IDApIHsKLSAgICAgICAgZXJyID0gZXJybm87Ci0gICAgICAgIEFMT0dFKCJFcnJvciAlZCAoJXMpIGZyb20gbHN0YXQ2NCglcykiLCBlcnIsIHN0cmVycm9yKGVyciksIGZpbGVwYXRoLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBTdHJpbmc4IGZ1bGxuYW1lOyAgIC8vIGZvciBwYXggbGF0ZXIgb24KLSAgICBTdHJpbmc4IHByZWZpeDsKLQotICAgIGNvbnN0IGludCBpc2RpciA9IFNfSVNESVIocy5zdF9tb2RlKTsKLSAgICBpZiAoaXNkaXIpIHMuc3Rfc2l6ZSA9IDA7ICAgLy8gZGlyZWN0b3JpZXMgZ2V0IG5vIGFjdHVhbCBkYXRhIGluIHRoZSB0YXIgc3RyZWFtCi0KLSAgICAvLyAhISEgVE9ETzogdXNlIG1tYXAgd2hlbiBwb3NzaWJsZSB0byBhdm9pZCBjaHVybmluZyB0aGUgYnVmZmVyIGNhY2hlCi0gICAgLy8gISEhIFRPRE86IHRoaXMgd2lsbCBicmVhayB3aXRoIHN5bWxpbmtzOyBuZWVkIHRvIHVzZSByZWFkbGluaygyKQotICAgIGludCBmZCA9IG9wZW4oZmlsZXBhdGguc3RyaW5nKCksIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgIGVyciA9IGVycm5vOwotICAgICAgICBBTE9HRSgiRXJyb3IgJWQgKCVzKSBmcm9tIG9wZW4oJXMpIiwgZXJyLCBzdHJlcnJvcihlcnIpLCBmaWxlcGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLy8gcmVhZC93cml0ZSB1cCB0byB0aGlzIG11Y2ggYXQgYSB0aW1lLgotICAgIGNvbnN0IHNpemVfdCBCVUZTSVpFID0gMzIgKiAxMDI0OwotICAgIGNoYXIqIGJ1ZiA9IChjaGFyICopY2FsbG9jKDEsQlVGU0laRSk7Ci0gICAgY2hhciogcGF4SGVhZGVyID0gYnVmICsgNTEyOyAgICAvLyB1c2UgYSBkaWZmZXJlbnQgY2h1bmsgb2YgaXQgYXMgc2VwYXJhdGUgc2NyYXRjaAotICAgIGNoYXIqIHBheERhdGEgPSBidWYgKyAxMDI0OwotCi0gICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dFKCJPdXQgb2YgbWVtIGFsbG9jYXRpbmcgdHJhbnNmZXIgYnVmZmVyIik7Ci0gICAgICAgIGVyciA9IEVOT01FTTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLQotICAgIC8vIE1hZ2ljIGZpZWxkcyBmb3IgdGhlIHVzdGFyIGZpbGUgZm9ybWF0Ci0gICAgc3RyY2F0KGJ1ZiArIDI1NywgInVzdGFyIik7Ci0gICAgc3RyY2F0KGJ1ZiArIDI2MywgIjAwIik7Ci0KLSAgICAvLyBbIDI2NSA6IDMyIF0gdXNlciBuYW1lLCBpZ25vcmVkIG9uIHJlc3RvcmUKLSAgICAvLyBbIDI5NyA6IDMyIF0gZ3JvdXAgbmFtZSwgaWdub3JlZCBvbiByZXN0b3JlCi0KLSAgICAvLyBbIDEwMCA6ICAgOCBdIGZpbGUgbW9kZQotICAgIHNucHJpbnRmKGJ1ZiArIDEwMCwgOCwgIiUwNm8gIiwgcy5zdF9tb2RlICYgflNfSUZNVCk7Ci0KLSAgICAvLyBbIDEwOCA6ICAgOCBdIHVpZCAtLSBpZ25vcmVkIGluIEFuZHJvaWQgZm9ybWF0OyB1aWRzIGFyZSByZW1hcHBlZCBhdCByZXN0b3JlIHRpbWUKLSAgICAvLyBbIDExNiA6ICAgOCBdIGdpZCAtLSBpZ25vcmVkIGluIEFuZHJvaWQgZm9ybWF0Ci0gICAgc25wcmludGYoYnVmICsgMTA4LCA4LCAiMCVsbyIsIHMuc3RfdWlkKTsKLSAgICBzbnByaW50ZihidWYgKyAxMTYsIDgsICIwJWxvIiwgcy5zdF9naWQpOwotCi0gICAgLy8gWyAxMjQgOiAgMTIgXSBmaWxlIHNpemUgaW4gYnl0ZXMKLSAgICBpZiAocy5zdF9zaXplID4gMDc3Nzc3Nzc3Nzc3TEwpIHsKLSAgICAgICAgLy8gdmVyeSBsYXJnZSBmaWxlcyBuZWVkIGEgcGF4IGV4dGVuZGVkIHNpemUgaGVhZGVyCi0gICAgICAgIG5lZWRFeHRlbmRlZCA9IHRydWU7Ci0gICAgfQotICAgIHNucHJpbnRmKGJ1ZiArIDEyNCwgMTIsICIlMDExbGxvIiwgKGlzZGlyKSA/IDBMTCA6IHMuc3Rfc2l6ZSk7Ci0KLSAgICAvLyBbIDEzNiA6ICAxMiBdIGxhc3QgbW9kIHRpbWUgYXMgYSBVVEMgdGltZV90Ci0gICAgc25wcmludGYoYnVmICsgMTM2LCAxMiwgIiUwbG8iLCBzLnN0X210aW1lKTsKLQotICAgIC8vIFsgMTU2IDogICAxIF0gbGluay9maWxlIHR5cGUKLSAgICB1aW50OF90IHR5cGU7Ci0gICAgaWYgKGlzZGlyKSB7Ci0gICAgICAgIHR5cGUgPSAnNSc7ICAgICAvLyB0YXIgbWFnaWM6ICc1JyA9PSBkaXJlY3RvcnkKLSAgICB9IGVsc2UgaWYgKFNfSVNSRUcocy5zdF9tb2RlKSkgewotICAgICAgICB0eXBlID0gJzAnOyAgICAgLy8gdGFyIG1hZ2ljOiAnMCcgPT0gbm9ybWFsIGZpbGUKLSAgICB9IGVsc2UgewotICAgICAgICBBTE9HVygiRXJyb3I6IHVua25vd24gZmlsZSBtb2RlIDAlbyBbJXNdIiwgcy5zdF9tb2RlLCBmaWxlcGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0gICAgYnVmWzE1Nl0gPSB0eXBlOwotCi0gICAgLy8gWyAxNTcgOiAxMDAgXSBuYW1lIG9mIGxpbmtlZCBmaWxlIFtub3QgaW1wbGVtZW50ZWRdCi0KLSAgICB7Ci0gICAgICAgIC8vIFByZWZpeCBhbmQgbWFpbiByZWxhdGl2ZSBwYXRoLiAgUGF0aCBsZW5ndGhzIGhhdmUgYmVlbiBwcmVmbGlnaHRlZC4KLSAgICAgICAgaWYgKHBhY2thZ2VOYW1lLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcHJlZml4ID0gImFwcHMvIjsKLSAgICAgICAgICAgIHByZWZpeCArPSBwYWNrYWdlTmFtZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZG9tYWluLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcHJlZml4LmFwcGVuZFBhdGgoZG9tYWluKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHBheCBleHRlbmRlZCBtZWFucyB3ZSBkb24ndCBwdXQgaW4gYSBwcmVmaXggZmllbGQsIGFuZCBwdXQgYSBkaWZmZXJlbnQKLSAgICAgICAgLy8gc3RyaW5nIGluIHRoZSBiYXNpYyBuYW1lIGZpZWxkLiAgV2UgY2FuIGFsc28gY29uc3RydWN0IHRoZSBmdWxsIHBhdGggbmFtZQotICAgICAgICAvLyBvdXQgb2YgdGhlIHN1YnN0cmluZ3Mgd2UndmUgbm93IGJ1aWx0LgotICAgICAgICBmdWxsbmFtZSA9IHByZWZpeDsKLSAgICAgICAgZnVsbG5hbWUuYXBwZW5kUGF0aChyZWxwYXRoKTsKLQotICAgICAgICAvLyB1c3RhcjoKLSAgICAgICAgLy8gICAgWyAgIDAgOiAxMDAgXTsgZmlsZSBuYW1lL3BhdGgKLSAgICAgICAgLy8gICAgWyAzNDUgOiAxNTUgXSBmaWxlbmFtZSBwYXRoIHByZWZpeAotICAgICAgICAvLyBXZSBvbmx5IHVzZSB0aGUgcHJlZml4IGFyZWEgaWYgZnVsbG5hbWUgd29uJ3QgZml0IGluIHRoZSBwYXRoCi0gICAgICAgIGlmIChmdWxsbmFtZS5sZW5ndGgoKSA+IDEwMCkgewotICAgICAgICAgICAgc3RybmNweShidWYsIHJlbHBhdGguc3RyaW5nKCksIDEwMCk7Ci0gICAgICAgICAgICBzdHJuY3B5KGJ1ZiArIDM0NSwgcHJlZml4LnN0cmluZygpLCAxNTUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RybmNweShidWYsIGZ1bGxuYW1lLnN0cmluZygpLCAxMDApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gWyAzMjkgOiA4IF0gYW5kIFsgMzM3IDogOCBdIGRldm1ham9yL2Rldm1pbm9yLCBub3QgdXNlZAotCi0gICAgQUxPR0koIiAgIE5hbWU6ICVzIiwgZnVsbG5hbWUuc3RyaW5nKCkpOwotCi0gICAgLy8gSWYgd2UncmUgdXNpbmcgYSBwYXggZXh0ZW5kZWQgaGVhZGVyLCBidWlsZCAmIHdyaXRlIHRoYXQgaGVyZTsgbGVuZ3RocyBhcmUKLSAgICAvLyBhbHJlYWR5IHByZWZsaWdodGVkCi0gICAgaWYgKG5lZWRFeHRlbmRlZCkgewotICAgICAgICBjaGFyIHNpemVTdHJbMzJdOyAgIC8vIGJpZyBlbm91Z2ggZm9yIGEgNjQtYml0IHVuc2lnbmVkIHZhbHVlIGluIGRlY2ltYWwKLSAgICAgICAgY2hhciogcCA9IHBheERhdGE7Ci0KLSAgICAgICAgLy8gY29uc3RydWN0IHRoZSBwYXggZXh0ZW5kZWQgaGVhZGVyIGRhdGEgYmxvY2sKLSAgICAgICAgbWVtc2V0KHBheERhdGEsIDAsIEJVRlNJWkUgLSAocGF4RGF0YSAtIGJ1ZikpOwotICAgICAgICBpbnQgbGVuOwotCi0gICAgICAgIC8vIHNpemUgaGVhZGVyIC0tIGNhbGMgbGVuIGluIGRpZ2l0cyBieSBhY3R1YWxseSByZW5kZXJpbmcgdGhlIG51bWJlcgotICAgICAgICAvLyB0byBhIHN0cmluZyAtIGJydXRlIGZvcmNlIGJ1dCBzaW1wbGUKLSAgICAgICAgc25wcmludGYoc2l6ZVN0ciwgc2l6ZW9mKHNpemVTdHIpLCAiJWxsZCIsIHMuc3Rfc2l6ZSk7Ci0gICAgICAgIHAgKz0gd3JpdGVfcGF4X2hlYWRlcl9lbnRyeShwLCAic2l6ZSIsIHNpemVTdHIpOwotCi0gICAgICAgIC8vIGZ1bGxuYW1lIHdhcyBnZW5lcmF0ZWQgYWJvdmUgd2l0aCB0aGUgdXN0YXIgcGF0aHMKLSAgICAgICAgcCArPSB3cml0ZV9wYXhfaGVhZGVyX2VudHJ5KHAsICJwYXRoIiwgZnVsbG5hbWUuc3RyaW5nKCkpOwotCi0gICAgICAgIC8vIE5vdyB3ZSBrbm93IGhvdyBiaWcgdGhlIHBheCBkYXRhIGlzCi0gICAgICAgIGludCBwYXhMZW4gPSBwIC0gcGF4RGF0YTsKLQotICAgICAgICAvLyBOb3cgYnVpbGQgdGhlIHBheCAqaGVhZGVyKiB0ZW1wbGF0ZWQgb24gdGhlIHVzdGFyIGhlYWRlcgotICAgICAgICBtZW1jcHkocGF4SGVhZGVyLCBidWYsIDUxMik7Ci0KLSAgICAgICAgU3RyaW5nOCBsZWFmID0gZnVsbG5hbWUuZ2V0UGF0aExlYWYoKTsKLSAgICAgICAgbWVtc2V0KHBheEhlYWRlciwgMCwgMTAwKTsgICAgICAgICAgICAgICAgICAvLyByZXdyaXRlIHRoZSBuYW1lIGFyZWEKLSAgICAgICAgc25wcmludGYocGF4SGVhZGVyLCAxMDAsICJQYXhIZWFkZXIvJXMiLCBsZWFmLnN0cmluZygpKTsKLSAgICAgICAgbWVtc2V0KHBheEhlYWRlciArIDM0NSwgMCwgMTU1KTsgICAgICAgICAgICAvLyByZXdyaXRlIHRoZSBwcmVmaXggYXJlYQotICAgICAgICBzdHJuY3B5KHBheEhlYWRlciArIDM0NSwgcHJlZml4LnN0cmluZygpLCAxNTUpOwotCi0gICAgICAgIHBheEhlYWRlclsxNTZdID0gJ3gnOyAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFyayBpdCBhcyBhIHBheCBleHRlbmRlZCBoZWFkZXIKLQotICAgICAgICAvLyBbIDEyNCA6ICAxMiBdIHNpemUgb2YgcGF4IGV4dGVuZGVkIGhlYWRlciBkYXRhCi0gICAgICAgIG1lbXNldChwYXhIZWFkZXIgKyAxMjQsIDAsIDEyKTsKLSAgICAgICAgc25wcmludGYocGF4SGVhZGVyICsgMTI0LCAxMiwgIiUwMTFvIiwgcCAtIHBheERhdGEpOwotCi0gICAgICAgIC8vIENoZWNrc3VtIGFuZCB3cml0ZSB0aGUgcGF4IGJsb2NrIGhlYWRlcgotICAgICAgICBjYWxjX3Rhcl9jaGVja3N1bShwYXhIZWFkZXIpOwotICAgICAgICBzZW5kX3RhcmZpbGVfY2h1bmsod3JpdGVyLCBwYXhIZWFkZXIsIDUxMik7Ci0KLSAgICAgICAgLy8gTm93IHdyaXRlIHRoZSBwYXggZGF0YSBpdHNlbGYKLSAgICAgICAgaW50IHBheGJsb2NrcyA9IChwYXhMZW4gKyA1MTEpIC8gNTEyOwotICAgICAgICBzZW5kX3RhcmZpbGVfY2h1bmsod3JpdGVyLCBwYXhEYXRhLCA1MTIgKiBwYXhibG9ja3MpOwotICAgIH0KLQotICAgIC8vIENoZWNrc3VtIGFuZCB3cml0ZSB0aGUgNTEyLWJ5dGUgdXN0YXIgZmlsZSBoZWFkZXIgYmxvY2sgdG8gdGhlIG91dHB1dAotICAgIGNhbGNfdGFyX2NoZWNrc3VtKGJ1Zik7Ci0gICAgc2VuZF90YXJmaWxlX2NodW5rKHdyaXRlciwgYnVmLCA1MTIpOwotCi0gICAgLy8gTm93IHdyaXRlIHRoZSBmaWxlIGRhdGEgaXRzZWxmLCBmb3IgcmVhbCBmaWxlcy4gIFdlIGhvbm9yIHRhcidzIGNvbnZlbnRpb24gdGhhdAotICAgIC8vIG9ubHkgZnVsbCA1MTItYnl0ZSBibG9ja3MgYXJlIHNlbnQgdG8gd3JpdGUoKS4KLSAgICBpZiAoIWlzZGlyKSB7Ci0gICAgICAgIG9mZjY0X3QgdG9Xcml0ZSA9IHMuc3Rfc2l6ZTsKLSAgICAgICAgd2hpbGUgKHRvV3JpdGUgPiAwKSB7Ci0gICAgICAgICAgICBzaXplX3QgdG9SZWFkID0gKHRvV3JpdGUgPCBCVUZTSVpFKSA/IHRvV3JpdGUgOiBCVUZTSVpFOwotICAgICAgICAgICAgc3NpemVfdCBuUmVhZCA9IHJlYWQoZmQsIGJ1ZiwgdG9SZWFkKTsKLSAgICAgICAgICAgIGlmIChuUmVhZCA8IDApIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBlcnJubzsKLSAgICAgICAgICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIHJlYWQgZmlsZSBbJXNdLCBlcnI9JWQgKCVzKSIsIGZpbGVwYXRoLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyLCBzdHJlcnJvcihlcnIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoblJlYWQgPT0gMCkgewotICAgICAgICAgICAgICAgIEFMT0dFKCJFT0YgYnV0IGV4cGVjdCAlbGxkIG1vcmUgYnl0ZXMgaW4gWyVzXSIsIChsb25nIGxvbmcpIHRvV3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlcGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgZXJyID0gRUlPOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBdCBFT0Ygd2UgbWlnaHQgaGF2ZSBhIHNob3J0IGJsb2NrOyBOVUwtcGFkIHRoYXQgdG8gYSA1MTItYnl0ZSBtdWx0aXBsZS4gIFRoaXMKLSAgICAgICAgICAgIC8vIGRlcGVuZHMgb24gdGhlIE9TIGd1YXJhbnRlZSB0aGF0IGZvciBvcmRpbmFyeSBmaWxlcywgcmVhZCgpIHdpbGwgbmV2ZXIgcmV0dXJuCi0gICAgICAgICAgICAvLyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBieXRlcyByZXF1ZXN0ZWQuCi0gICAgICAgICAgICBzc2l6ZV90IHBhcnRpYWwgPSAoblJlYWQrNTEyKSAlIDUxMjsKLSAgICAgICAgICAgIGlmIChwYXJ0aWFsID4gMCkgewotICAgICAgICAgICAgICAgIHNzaXplX3QgcmVtYWluZGVyID0gNTEyIC0gcGFydGlhbDsKLSAgICAgICAgICAgICAgICBtZW1zZXQoYnVmICsgblJlYWQsIDAsIHJlbWFpbmRlcik7Ci0gICAgICAgICAgICAgICAgblJlYWQgKz0gcmVtYWluZGVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VuZF90YXJmaWxlX2NodW5rKHdyaXRlciwgYnVmLCBuUmVhZCk7Ci0gICAgICAgICAgICB0b1dyaXRlIC09IG5SZWFkOwotICAgICAgICB9Ci0gICAgfQotCi1jbGVhbnVwOgotICAgIGZyZWUoYnVmKTsKLWRvbmU6Ci0gICAgY2xvc2UoZmQpOwotICAgIHJldHVybiBlcnI7Ci19Ci0vLyBlbmQgdGFyZmlsZQotCi0KLQotI2RlZmluZSBSRVNUT1JFX0JVRl9TSVpFICg4KjEwMjQpCi0KLVJlc3RvcmVIZWxwZXJCYXNlOjpSZXN0b3JlSGVscGVyQmFzZSgpCi17Ci0gICAgbV9idWYgPSBtYWxsb2MoUkVTVE9SRV9CVUZfU0laRSk7Ci0gICAgbV9sb2dnZWRVbmtub3duTWV0YWRhdGEgPSBmYWxzZTsKLX0KLQotUmVzdG9yZUhlbHBlckJhc2U6On5SZXN0b3JlSGVscGVyQmFzZSgpCi17Ci0gICAgZnJlZShtX2J1Zik7Ci19Ci0KLXN0YXR1c190Ci1SZXN0b3JlSGVscGVyQmFzZTo6V3JpdGVGaWxlKGNvbnN0IFN0cmluZzgmIGZpbGVuYW1lLCBCYWNrdXBEYXRhUmVhZGVyKiBpbikKLXsKLSAgICBzc2l6ZV90IGVycjsKLSAgICBzaXplX3QgZGF0YVNpemU7Ci0gICAgU3RyaW5nOCBrZXk7Ci0gICAgaW50IGZkOwotICAgIHZvaWQqIGJ1ZiA9IG1fYnVmOwotICAgIHNzaXplX3QgYW10OwotICAgIGludCBtb2RlOwotICAgIGludCBjcmM7Ci0gICAgc3RydWN0IHN0YXQgc3Q7Ci0gICAgRmlsZVJlYyByOwotCi0gICAgZXJyID0gaW4tPlJlYWRFbnRpdHlIZWFkZXIoJmtleSwgJmRhdGFTaXplKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLy8gR2V0IHRoZSBtZXRhZGF0YSBibG9jayBvZmYgdGhlIGhlYWQgb2YgdGhlIGZpbGUgZW50aXR5IGFuZCB1c2UgdGhhdCB0bwotICAgIC8vIHNldCB1cCB0aGUgb3V0cHV0IGZpbGUKLSAgICBmaWxlX21ldGFkYXRhX3YxIG1ldGFkYXRhOwotICAgIGFtdCA9IGluLT5SZWFkRW50aXR5RGF0YSgmbWV0YWRhdGEsIHNpemVvZihtZXRhZGF0YSkpOwotICAgIGlmIChhbXQgIT0gc2l6ZW9mKG1ldGFkYXRhKSkgewotICAgICAgICBBTE9HVygiQ291bGQgbm90IHJlYWQgbWV0YWRhdGEgZm9yICVzIC0tICVsZCAvICVzIiwgZmlsZW5hbWUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgKGxvbmcpYW10LCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gRUlPOwotICAgIH0KLSAgICBtZXRhZGF0YS52ZXJzaW9uID0gZnJvbWxlbChtZXRhZGF0YS52ZXJzaW9uKTsKLSAgICBtZXRhZGF0YS5tb2RlID0gZnJvbWxlbChtZXRhZGF0YS5tb2RlKTsKLSAgICBpZiAobWV0YWRhdGEudmVyc2lvbiA+IENVUlJFTlRfTUVUQURBVEFfVkVSU0lPTikgewotICAgICAgICBpZiAoIW1fbG9nZ2VkVW5rbm93bk1ldGFkYXRhKSB7Ci0gICAgICAgICAgICBtX2xvZ2dlZFVua25vd25NZXRhZGF0YSA9IHRydWU7Ci0gICAgICAgICAgICBBTE9HVygiUmVzdG9yaW5nIGZpbGUgd2l0aCB1bnN1cHBvcnRlZCBtZXRhZGF0YSB2ZXJzaW9uICVkIChjdXJyZW50bHkgJWQpIiwKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudmVyc2lvbiwgQ1VSUkVOVF9NRVRBREFUQV9WRVJTSU9OKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtb2RlID0gbWV0YWRhdGEubW9kZTsKLQotICAgIC8vIFdyaXRlIHRoZSBmaWxlIGFuZCBjb21wdXRlIHRoZSBjcmMKLSAgICBjcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICBmZCA9IG9wZW4oZmlsZW5hbWUuc3RyaW5nKCksIE9fQ1JFQVR8T19SRFdSfE9fVFJVTkMsIG1vZGUpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBBTE9HVygiQ291bGQgbm90IG9wZW4gZmlsZSAlcyAtLSAlcyIsIGZpbGVuYW1lLnN0cmluZygpLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotICAgIAotICAgIHdoaWxlICgoYW10ID0gaW4tPlJlYWRFbnRpdHlEYXRhKGJ1ZiwgUkVTVE9SRV9CVUZfU0laRSkpID4gMCkgewotICAgICAgICBlcnIgPSB3cml0ZShmZCwgYnVmLCBhbXQpOwotICAgICAgICBpZiAoZXJyICE9IGFtdCkgewotICAgICAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICAgICAgQUxPR1coIkVycm9yICclcycgd3JpdGluZyAnJXMnIiwgc3RyZXJyb3IoZXJybm8pLCBmaWxlbmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgICAgIH0KLSAgICAgICAgY3JjID0gY3JjMzIoY3JjLCAoQnl0ZWYqKWJ1ZiwgYW10KTsKLSAgICB9Ci0KLSAgICBjbG9zZShmZCk7Ci0KLSAgICAvLyBSZWNvcmQgZm9yIHRoZSBzbmFwc2hvdAotICAgIGVyciA9IHN0YXQoZmlsZW5hbWUuc3RyaW5nKCksICZzdCk7Ci0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIEFMT0dXKCJFcnJvciBzdGF0aW5nIGZpbGUgdGhhdCB3ZSBqdXN0IGNyZWF0ZWQgJXMiLCBmaWxlbmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICByLmZpbGUgPSBmaWxlbmFtZTsKLSAgICByLmRlbGV0ZWQgPSBmYWxzZTsKLSAgICByLnMubW9kVGltZV9zZWMgPSBzdC5zdF9tdGltZTsKLSAgICByLnMubW9kVGltZV9uc2VjID0gMDsgLy8gd29ya2Fyb3VuZCBzaW0gYnJlYWthZ2UKLSAgICAvL3Iucy5tb2RUaW1lX25zZWMgPSBzdC5zdF9tdGltZV9uc2VjOwotICAgIHIucy5tb2RlID0gc3Quc3RfbW9kZTsKLSAgICByLnMuc2l6ZSA9IHN0LnN0X3NpemU7Ci0gICAgci5zLmNyYzMyID0gY3JjOwotCi0gICAgbV9maWxlcy5hZGQoa2V5LCByKTsKLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QKLVJlc3RvcmVIZWxwZXJCYXNlOjpXcml0ZVNuYXBzaG90KGludCBmZCkKLXsKLSAgICByZXR1cm4gd3JpdGVfc25hcHNob3RfZmlsZShmZCwgbV9maWxlcyk7OwotfQotCi0jaWYgVEVTVF9CQUNLVVBfSEVMUEVSUwotCi0jZGVmaW5lIFNDUkFUQ0hfRElSICIvZGF0YS9iYWNrdXBfaGVscGVyX3Rlc3QvIgotCi1zdGF0aWMgaW50Ci13cml0ZV90ZXh0X2ZpbGUoY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciogZGF0YSkKLXsKLSAgICBpbnQgYW10OwotICAgIGludCBmZDsKLSAgICBpbnQgbGVuOwotCi0gICAgZmQgPSBjcmVhdChwYXRoLCAwNjY2KTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJjcmVhdCAlcyBmYWlsZWRcbiIsIHBhdGgpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgbGVuID0gc3RybGVuKGRhdGEpOwotICAgIGFtdCA9IHdyaXRlKGZkLCBkYXRhLCBsZW4pOwotICAgIGlmIChhbXQgIT0gbGVuKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgKCVzKSB3cml0aW5nIHRvIGZpbGUgJXNcbiIsIHN0cmVycm9yKGVycm5vKSwgcGF0aCk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICBjbG9zZShmZCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotY29tcGFyZV9maWxlKGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGludCBsZW4pCi17Ci0gICAgaW50IGZkOwotICAgIGludCBhbXQ7Ci0KLSAgICBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvbXBhcmVfZmlsZSBlcnJvciAoJXMpIG9wZW5pbmcgJXNcbiIsIHN0cmVycm9yKGVycm5vKSwgcGF0aCk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBjb250ZW50cyA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MobGVuKTsKLSAgICBpZiAoY29udGVudHMgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyglZCkgZmFpbGVkXG4iLCBsZW4pOwotICAgICAgICByZXR1cm4gRU5PTUVNOwotICAgIH0KLQotICAgIGJvb2wgc2l6ZXNNYXRjaCA9IHRydWU7Ci0gICAgYW10ID0gbHNlZWsoZmQsIDAsIFNFRUtfRU5EKTsKLSAgICBpZiAoYW10ICE9IGxlbikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvbXBhcmVfZmlsZSBmaWxlIGxlbmd0aCBzaG91bGQgYmUgJWQsIHdhcyAlZFxuIiwgbGVuLCBhbXQpOwotICAgICAgICBzaXplc01hdGNoID0gZmFsc2U7Ci0gICAgfQotICAgIGxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7Ci0KLSAgICBpbnQgcmVhZExlbiA9IGFtdCA8IGxlbiA/IGFtdCA6IGxlbjsKLSAgICBhbXQgPSByZWFkKGZkLCBjb250ZW50cywgcmVhZExlbik7Ci0gICAgaWYgKGFtdCAhPSByZWFkTGVuKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiY29tcGFyZV9maWxlIHJlYWQgZXhwZWN0ZWQgJWQgYnl0ZXMgYnV0IGdvdCAlZFxuIiwgbGVuLCBhbXQpOwotICAgIH0KLQotICAgIGJvb2wgY29udGVudHNNYXRjaCA9IHRydWU7Ci0gICAgZm9yIChpbnQgaT0wOyBpPHJlYWRMZW47IGkrKykgewotICAgICAgICBpZiAoZGF0YVtpXSAhPSBjb250ZW50c1tpXSkgewotICAgICAgICAgICAgaWYgKGNvbnRlbnRzTWF0Y2gpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvbXBhcmVfZmlsZSBjb250ZW50cyBhcmUgZGlmZmVyZW50OiAoaW5kZXgsIGV4cGVjdGVkLCBhY3R1YWwpXG4iKTsKLSAgICAgICAgICAgICAgICBjb250ZW50c01hdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgWyUtMmRdICUwMnggJTAyeFxuIiwgaSwgZGF0YVtpXSwgY29udGVudHNbaV0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnJlZShjb250ZW50cyk7Ci0gICAgcmV0dXJuIGNvbnRlbnRzTWF0Y2ggJiYgc2l6ZXNNYXRjaCA/IDAgOiAxOwotfQotCi1pbnQKLWJhY2t1cF9oZWxwZXJfdGVzdF9lbXB0eSgpCi17Ci0gICAgaW50IGVycjsKLSAgICBpbnQgZmQ7Ci0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCxGaWxlUmVjPiBzbmFwc2hvdDsKLSAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IFNDUkFUQ0hfRElSICJiYWNrdXBfaGVscGVyX3Rlc3RfZW1wdHkuc25hcCI7Ci0KLSAgICBzeXN0ZW0oInJtIC1yICIgU0NSQVRDSF9ESVIpOwotICAgIG1rZGlyKFNDUkFUQ0hfRElSLCAwNzc3KTsKLQotICAgIC8vIHdyaXRlCi0gICAgZmQgPSBjcmVhdChmaWxlbmFtZSwgMDY2Nik7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgY3JlYXRpbmcgJXNcbiIsIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgZXJyID0gd3JpdGVfc25hcHNob3RfZmlsZShmZCwgc25hcHNob3QpOwotCi0gICAgY2xvc2UoZmQpOwotCi0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAid3JpdGVfc25hcHNob3RfZmlsZSByZXBvcnRlZCBlcnJvciAlZCAoJXMpXG4iLCBlcnIsIHN0cmVycm9yKGVycikpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNvcnJlY3RfZGF0YVtdID0gewotICAgICAgICAweDUzLCAweDZlLCAweDYxLCAweDcwLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAgICAgMHg0NiwgMHg2OSwgMHg2YywgMHg2NSwgIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAKLSAgICB9OwotCi0gICAgZXJyID0gY29tcGFyZV9maWxlKGZpbGVuYW1lLCBjb3JyZWN0X2RhdGEsIHNpemVvZihjb3JyZWN0X2RhdGEpKTsKLSAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICAvLyByZWFkCi0gICAgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3Igb3BlbmluZyBmb3IgcmVhZCAlc1xuIiwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LEZpbGVTdGF0ZT4gcmVhZFNuYXBzaG90OwotICAgIGVyciA9IHJlYWRfc25hcHNob3RfZmlsZShmZCwgJnJlYWRTbmFwc2hvdCk7Ci0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAicmVhZF9zbmFwc2hvdF9maWxlIGZhaWxlZCAlZFxuIiwgZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBpZiAocmVhZFNuYXBzaG90LnNpemUoKSAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAicmVhZFNuYXBzaG90IHNob3VsZCBiZSBsZW5ndGggMFxuIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1pbnQKLWJhY2t1cF9oZWxwZXJfdGVzdF9mb3VyKCkKLXsKLSAgICBpbnQgZXJyOwotICAgIGludCBmZDsKLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LEZpbGVSZWM+IHNuYXBzaG90OwotICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gU0NSQVRDSF9ESVIgImJhY2t1cF9oZWxwZXJfdGVzdF9mb3VyLnNuYXAiOwotCi0gICAgc3lzdGVtKCJybSAtciAiIFNDUkFUQ0hfRElSKTsKLSAgICBta2RpcihTQ1JBVENIX0RJUiwgMDc3Nyk7Ci0KLSAgICAvLyB3cml0ZQotICAgIGZkID0gY3JlYXQoZmlsZW5hbWUsIDA2NjYpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIG9wZW5pbmcgJXNcbiIsIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgU3RyaW5nOCBmaWxlbmFtZXNbNF07Ci0gICAgRmlsZVN0YXRlIHN0YXRlc1s0XTsKLSAgICBGaWxlUmVjIHI7Ci0gICAgci5kZWxldGVkID0gZmFsc2U7Ci0KLSAgICBzdGF0ZXNbMF0ubW9kVGltZV9zZWMgPSAweGZlZGNiYTk4OwotICAgIHN0YXRlc1swXS5tb2RUaW1lX25zZWMgPSAweGRlYWRiZWVmOwotICAgIHN0YXRlc1swXS5tb2RlID0gMDc3NzsgLy8gZGVjaW1hbCA1MTEsIGhleCAweDAwMDAwMWZmCi0gICAgc3RhdGVzWzBdLnNpemUgPSAweGFiYWJiY2JjOwotICAgIHN0YXRlc1swXS5jcmMzMiA9IDB4MTIzNDU2Nzg7Ci0gICAgc3RhdGVzWzBdLm5hbWVMZW4gPSAtMTI7Ci0gICAgci5zID0gc3RhdGVzWzBdOwotICAgIGZpbGVuYW1lc1swXSA9IFN0cmluZzgoImJ5dGVzX29mX3BhZGRpbmciKTsKLSAgICBzbmFwc2hvdC5hZGQoZmlsZW5hbWVzWzBdLCByKTsKLQotICAgIHN0YXRlc1sxXS5tb2RUaW1lX3NlYyA9IDB4OTM0MDAwMzE7Ci0gICAgc3RhdGVzWzFdLm1vZFRpbWVfbnNlYyA9IDB4ZGVhZGJlZWY7Ci0gICAgc3RhdGVzWzFdLm1vZGUgPSAwNjY2OyAvLyBkZWNpbWFsIDQzOCwgaGV4IDB4MDAwMDAxYjYKLSAgICBzdGF0ZXNbMV0uc2l6ZSA9IDB4ODg1NTc3NjY7Ci0gICAgc3RhdGVzWzFdLmNyYzMyID0gMHgyMjMzNDQyMjsKLSAgICBzdGF0ZXNbMV0ubmFtZUxlbiA9IC0xOwotICAgIHIucyA9IHN0YXRlc1sxXTsKLSAgICBmaWxlbmFtZXNbMV0gPSBTdHJpbmc4KCJieXRlc19vZl9wYWRkaW5nMyIpOwotICAgIHNuYXBzaG90LmFkZChmaWxlbmFtZXNbMV0sIHIpOwotCi0gICAgc3RhdGVzWzJdLm1vZFRpbWVfc2VjID0gMHgzMzIyMTE0NDsKLSAgICBzdGF0ZXNbMl0ubW9kVGltZV9uc2VjID0gMHhkZWFkYmVlZjsKLSAgICBzdGF0ZXNbMl0ubW9kZSA9IDA3NDQ7IC8vIGRlY2ltYWwgNDg0LCBoZXggMHgwMDAwMDFlNAotICAgIHN0YXRlc1syXS5zaXplID0gMHgxMTIyMzM0NDsKLSAgICBzdGF0ZXNbMl0uY3JjMzIgPSAweDAxMTIyMzM0OwotICAgIHN0YXRlc1syXS5uYW1lTGVuID0gMDsKLSAgICByLnMgPSBzdGF0ZXNbMl07Ci0gICAgZmlsZW5hbWVzWzJdID0gU3RyaW5nOCgiYnl0ZXNfb2ZfcGFkZGluZ18yIik7Ci0gICAgc25hcHNob3QuYWRkKGZpbGVuYW1lc1syXSwgcik7Ci0KLSAgICBzdGF0ZXNbM10ubW9kVGltZV9zZWMgPSAweDMzMjIxMTQ0OwotICAgIHN0YXRlc1szXS5tb2RUaW1lX25zZWMgPSAweGRlYWRiZWVmOwotICAgIHN0YXRlc1szXS5tb2RlID0gMDc1NTsgLy8gZGVjaW1hbCA0OTMsIGhleCAweDAwMDAwMWVkCi0gICAgc3RhdGVzWzNdLnNpemUgPSAweDExMjIzMzQ0OwotICAgIHN0YXRlc1szXS5jcmMzMiA9IDB4MDExMjIzMzQ7Ci0gICAgc3RhdGVzWzNdLm5hbWVMZW4gPSAwOwotICAgIHIucyA9IHN0YXRlc1szXTsKLSAgICBmaWxlbmFtZXNbM10gPSBTdHJpbmc4KCJieXRlc19vZl9wYWRkaW5nX18xIik7Ci0gICAgc25hcHNob3QuYWRkKGZpbGVuYW1lc1szXSwgcik7Ci0KLSAgICBlcnIgPSB3cml0ZV9zbmFwc2hvdF9maWxlKGZkLCBzbmFwc2hvdCk7Ci0KLSAgICBjbG9zZShmZCk7Ci0KLSAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3cml0ZV9zbmFwc2hvdF9maWxlIHJlcG9ydGVkIGVycm9yICVkICglcylcbiIsIGVyciwgc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY29ycmVjdF9kYXRhW10gPSB7Ci0gICAgICAgIC8vIGhlYWRlcgotICAgICAgICAweDUzLCAweDZlLCAweDYxLCAweDcwLCAgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAgICAgMHg0NiwgMHg2OSwgMHg2YywgMHg2NSwgIDB4YmMsIDB4MDAsIDB4MDAsIDB4MDAsCi0KLSAgICAgICAgLy8gYnl0ZXNfb2ZfcGFkZGluZwotICAgICAgICAweDk4LCAweGJhLCAweGRjLCAweGZlLCAgMHhlZiwgMHhiZSwgMHhhZCwgMHhkZSwKLSAgICAgICAgMHhmZiwgMHgwMSwgMHgwMCwgMHgwMCwgIDB4YmMsIDB4YmMsIDB4YWIsIDB4YWIsCi0gICAgICAgIDB4NzgsIDB4NTYsIDB4MzQsIDB4MTIsICAweDEwLCAweDAwLCAweDAwLCAweDAwLAotICAgICAgICAweDYyLCAweDc5LCAweDc0LCAweDY1LCAgMHg3MywgMHg1ZiwgMHg2ZiwgMHg2NiwKLSAgICAgICAgMHg1ZiwgMHg3MCwgMHg2MSwgMHg2NCwgIDB4NjQsIDB4NjksIDB4NmUsIDB4NjcsCi0KLSAgICAgICAgLy8gYnl0ZXNfb2ZfcGFkZGluZzMKLSAgICAgICAgMHgzMSwgMHgwMCwgMHg0MCwgMHg5MywgIDB4ZWYsIDB4YmUsIDB4YWQsIDB4ZGUsCi0gICAgICAgIDB4YjYsIDB4MDEsIDB4MDAsIDB4MDAsICAweDY2LCAweDc3LCAweDU1LCAweDg4LAotICAgICAgICAweDIyLCAweDQ0LCAweDMzLCAweDIyLCAgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAgICAgMHg2MiwgMHg3OSwgMHg3NCwgMHg2NSwgIDB4NzMsIDB4NWYsIDB4NmYsIDB4NjYsCi0gICAgICAgIDB4NWYsIDB4NzAsIDB4NjEsIDB4NjQsICAweDY0LCAweDY5LCAweDZlLCAweDY3LAotICAgICAgICAweDMzLCAweGFiLCAweGFiLCAweGFiLAotCi0gICAgICAgIC8vIGJ5dGVzIG9mIHBhZGRpbmcyCi0gICAgICAgIDB4NDQsIDB4MTEsIDB4MjIsIDB4MzMsICAweGVmLCAweGJlLCAweGFkLCAweGRlLAotICAgICAgICAweGU0LCAweDAxLCAweDAwLCAweDAwLCAgMHg0NCwgMHgzMywgMHgyMiwgMHgxMSwKLSAgICAgICAgMHgzNCwgMHgyMywgMHgxMiwgMHgwMSwgIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgICAgIDB4NjIsIDB4NzksIDB4NzQsIDB4NjUsICAweDczLCAweDVmLCAweDZmLCAweDY2LAotICAgICAgICAweDVmLCAweDcwLCAweDYxLCAweDY0LCAgMHg2NCwgMHg2OSwgMHg2ZSwgMHg2NywKLSAgICAgICAgMHg1ZiwgMHgzMiwgMHhhYiwgMHhhYiwKLQotICAgICAgICAvLyBieXRlcyBvZiBwYWRkaW5nMwotICAgICAgICAweDQ0LCAweDExLCAweDIyLCAweDMzLCAgMHhlZiwgMHhiZSwgMHhhZCwgMHhkZSwKLSAgICAgICAgMHhlZCwgMHgwMSwgMHgwMCwgMHgwMCwgIDB4NDQsIDB4MzMsIDB4MjIsIDB4MTEsCi0gICAgICAgIDB4MzQsIDB4MjMsIDB4MTIsIDB4MDEsICAweDEzLCAweDAwLCAweDAwLCAweDAwLAotICAgICAgICAweDYyLCAweDc5LCAweDc0LCAweDY1LCAgMHg3MywgMHg1ZiwgMHg2ZiwgMHg2NiwKLSAgICAgICAgMHg1ZiwgMHg3MCwgMHg2MSwgMHg2NCwgIDB4NjQsIDB4NjksIDB4NmUsIDB4NjcsCi0gICAgICAgIDB4NWYsIDB4NWYsIDB4MzEsIDB4YWIKLSAgICB9OwotCi0gICAgZXJyID0gY29tcGFyZV9maWxlKGZpbGVuYW1lLCBjb3JyZWN0X2RhdGEsIHNpemVvZihjb3JyZWN0X2RhdGEpKTsKLSAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICAvLyByZWFkCi0gICAgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3Igb3BlbmluZyBmb3IgcmVhZCAlc1xuIiwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLQotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsRmlsZVN0YXRlPiByZWFkU25hcHNob3Q7Ci0gICAgZXJyID0gcmVhZF9zbmFwc2hvdF9maWxlKGZkLCAmcmVhZFNuYXBzaG90KTsKLSAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJyZWFkX3NuYXBzaG90X2ZpbGUgZmFpbGVkICVkXG4iLCBlcnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGlmIChyZWFkU25hcHNob3Quc2l6ZSgpICE9IDQpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJyZWFkU25hcHNob3Qgc2hvdWxkIGJlIGxlbmd0aCA0IGlzICVkXG4iLCByZWFkU25hcHNob3Quc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgYm9vbCBtYXRjaGVkID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8cmVhZFNuYXBzaG90LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZzgmIG5hbWUgPSByZWFkU25hcHNob3Qua2V5QXQoaSk7Ci0gICAgICAgIGNvbnN0IEZpbGVTdGF0ZSBzdGF0ZSA9IHJlYWRTbmFwc2hvdC52YWx1ZUF0KGkpOwotCi0gICAgICAgIGlmIChuYW1lICE9IGZpbGVuYW1lc1tpXSB8fCBzdGF0ZXNbaV0ubW9kVGltZV9zZWMgIT0gc3RhdGUubW9kVGltZV9zZWMKLSAgICAgICAgICAgICAgICB8fCBzdGF0ZXNbaV0ubW9kVGltZV9uc2VjICE9IHN0YXRlLm1vZFRpbWVfbnNlYyB8fCBzdGF0ZXNbaV0ubW9kZSAhPSBzdGF0ZS5tb2RlCi0gICAgICAgICAgICAgICAgfHwgc3RhdGVzW2ldLnNpemUgIT0gc3RhdGUuc2l6ZSB8fCBzdGF0ZXNbaV0uY3JjMzIgIT0gc3RhdGVzW2ldLmNyYzMyKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInN0YXRlICVkIGV4cGVjdGVkPXslZC8lZCwgMHglMDh4LCAlMDRvLCAweCUwOHgsICUzZH0gJyVzJ1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgYWN0dWFsPXslZC8lZCwgMHglMDh4LCAlMDRvLCAweCUwOHgsICUzZH0gJyVzJ1xuIiwgaSwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGVzW2ldLm1vZFRpbWVfc2VjLCBzdGF0ZXNbaV0ubW9kVGltZV9uc2VjLCBzdGF0ZXNbaV0ubW9kZSwgc3RhdGVzW2ldLnNpemUsCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlc1tpXS5jcmMzMiwgbmFtZS5sZW5ndGgoKSwgZmlsZW5hbWVzW2ldLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RUaW1lX3NlYywgc3RhdGUubW9kVGltZV9uc2VjLCBzdGF0ZS5tb2RlLCBzdGF0ZS5zaXplLCBzdGF0ZS5jcmMzMiwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUubmFtZUxlbiwgbmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBtYXRjaGVkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2hlZCA/IDAgOiAxOwotfQotCi0vLyBoZXhkdW1wIC12IC1lICciICAgICIgOC8xICIgMHglMDJ4LCIgIlxuIicgZGF0YV93cml0ZXIuZGF0YQotY29uc3QgdW5zaWduZWQgY2hhciBEQVRBX0dPTERFTl9GSUxFW10gPSB7Ci0gICAgIDB4NDQsIDB4NjEsIDB4NzQsIDB4NjEsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4NmYsIDB4NWYsIDB4NzAsCi0gICAgIDB4NjEsIDB4NjQsIDB4NjQsIDB4NjksIDB4NmUsIDB4NjcsIDB4NWYsIDB4MDAsCi0gICAgIDB4NmUsIDB4NmYsIDB4NWYsIDB4NzAsIDB4NjEsIDB4NjQsIDB4NjQsIDB4NjksCi0gICAgIDB4NmUsIDB4NjcsIDB4NWYsIDB4MDAsIDB4NDQsIDB4NjEsIDB4NzQsIDB4NjEsCi0gICAgIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgIDB4NzAsIDB4NjEsIDB4NjQsIDB4NjQsIDB4NjUsIDB4NjQsIDB4NWYsIDB4NzQsCi0gICAgIDB4NmYsIDB4NWYsIDB4NWYsIDB4MzMsIDB4MDAsIDB4YmMsIDB4YmMsIDB4YmMsCi0gICAgIDB4NzAsIDB4NjEsIDB4NjQsIDB4NjQsIDB4NjUsIDB4NjQsIDB4NWYsIDB4NzQsCi0gICAgIDB4NmYsIDB4NWYsIDB4NWYsIDB4MzMsIDB4MDAsIDB4YmMsIDB4YmMsIDB4YmMsCi0gICAgIDB4NDQsIDB4NjEsIDB4NzQsIDB4NjEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NjEsIDB4NjQsIDB4NjQsCi0gICAgIDB4NjUsIDB4NjQsIDB4NWYsIDB4NzQsIDB4NmYsIDB4NWYsIDB4MzIsIDB4NWYsCi0gICAgIDB4NWYsIDB4MDAsIDB4YmMsIDB4YmMsIDB4NzAsIDB4NjEsIDB4NjQsIDB4NjQsCi0gICAgIDB4NjUsIDB4NjQsIDB4NWYsIDB4NzQsIDB4NmYsIDB4NWYsIDB4MzIsIDB4NWYsCi0gICAgIDB4NWYsIDB4MDAsIDB4YmMsIDB4YmMsIDB4NDQsIDB4NjEsIDB4NzQsIDB4NjEsCi0gICAgIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgIDB4NzAsIDB4NjEsIDB4NjQsIDB4NjQsIDB4NjUsIDB4NjQsIDB4NWYsIDB4NzQsCi0gICAgIDB4NmYsIDB4MzEsIDB4MDAsIDB4YmMsIDB4NzAsIDB4NjEsIDB4NjQsIDB4NjQsCi0gICAgIDB4NjUsIDB4NjQsIDB4NWYsIDB4NzQsIDB4NmYsIDB4MzEsIDB4MDAKLQotfTsKLWNvbnN0IGludCBEQVRBX0dPTERFTl9GSUxFX1NJWkUgPSBzaXplb2YoREFUQV9HT0xERU5fRklMRSk7Ci0KLXN0YXRpYyBpbnQKLXRlc3Rfd3JpdGVfaGVhZGVyX2FuZF9lbnRpdHkoQmFja3VwRGF0YVdyaXRlciYgd3JpdGVyLCBjb25zdCBjaGFyKiBzdHIpCi17Ci0gICAgaW50IGVycjsKLSAgICBTdHJpbmc4IHRleHQoc3RyKTsKLQotICAgIGVyciA9IHdyaXRlci5Xcml0ZUVudGl0eUhlYWRlcih0ZXh0LCB0ZXh0Lmxlbmd0aCgpKzEpOwotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldyaXRlRW50aXR5SGVhZGVyIGZhaWxlZCB3aXRoICVzXG4iLCBzdHJlcnJvcihlcnIpKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBlcnIgPSB3cml0ZXIuV3JpdGVFbnRpdHlEYXRhKHRleHQuc3RyaW5nKCksIHRleHQubGVuZ3RoKCkrMSk7Ci0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAid3JpdGUgZmFpbGVkIGZvciBkYXRhICclcydcbiIsIHRleHQuc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotaW50Ci1iYWNrdXBfaGVscGVyX3Rlc3RfZGF0YV93cml0ZXIoKQotewotICAgIGludCBlcnI7Ci0gICAgaW50IGZkOwotICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gU0NSQVRDSF9ESVIgImRhdGFfd3JpdGVyLmRhdGEiOwotCi0gICAgc3lzdGVtKCJybSAtciAiIFNDUkFUQ0hfRElSKTsKLSAgICBta2RpcihTQ1JBVENIX0RJUiwgMDc3Nyk7Ci0gICAgbWtkaXIoU0NSQVRDSF9ESVIgImRhdGEiLCAwNzc3KTsKLQotICAgIGZkID0gY3JlYXQoZmlsZW5hbWUsIDA2NjYpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGNyZWF0aW5nOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIEJhY2t1cERhdGFXcml0ZXIgd3JpdGVyKGZkKTsKLQotICAgIGVyciA9IDA7Ci0gICAgZXJyIHw9IHRlc3Rfd3JpdGVfaGVhZGVyX2FuZF9lbnRpdHkod3JpdGVyLCAibm9fcGFkZGluZ18iKTsKLSAgICBlcnIgfD0gdGVzdF93cml0ZV9oZWFkZXJfYW5kX2VudGl0eSh3cml0ZXIsICJwYWRkZWRfdG9fXzMiKTsKLSAgICBlcnIgfD0gdGVzdF93cml0ZV9oZWFkZXJfYW5kX2VudGl0eSh3cml0ZXIsICJwYWRkZWRfdG9fMl9fIik7Ci0gICAgZXJyIHw9IHRlc3Rfd3JpdGVfaGVhZGVyX2FuZF9lbnRpdHkod3JpdGVyLCAicGFkZGVkX3RvMSIpOwotCi0gICAgY2xvc2UoZmQpOwotCi0gICAgZXJyID0gY29tcGFyZV9maWxlKGZpbGVuYW1lLCBEQVRBX0dPTERFTl9GSUxFLCBEQVRBX0dPTERFTl9GSUxFX1NJWkUpOwotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLWludAotdGVzdF9yZWFkX2hlYWRlcl9hbmRfZW50aXR5KEJhY2t1cERhdGFSZWFkZXImIHJlYWRlciwgY29uc3QgY2hhciogc3RyKQotewotICAgIGludCBlcnI7Ci0gICAgaW50IGJ1ZlNpemUgPSBzdHJsZW4oc3RyKSsxOwotICAgIGNoYXIqIGJ1ZiA9IChjaGFyKiltYWxsb2MoYnVmU2l6ZSk7Ci0gICAgU3RyaW5nOCBzdHJpbmc7Ci0gICAgaW50IGNvb2tpZSA9IDB4MTExMTExMTE7Ci0gICAgc2l6ZV90IGFjdHVhbFNpemU7Ci0gICAgYm9vbCBkb25lOwotICAgIGludCB0eXBlOwotICAgIHNzaXplX3QgblJlYWQ7Ci0KLSAgICAvLyBwcmludGYoIlxuXG4tLS0tLS0tLS0tIHRlc3RfcmVhZF9oZWFkZXJfYW5kX2VudGl0eSAtLSAlc1xuXG4iLCBzdHIpOwotCi0gICAgZXJyID0gcmVhZGVyLlJlYWROZXh0SGVhZGVyKCZkb25lLCAmdHlwZSk7Ci0gICAgaWYgKGRvbmUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJzaG91bGQgbm90IGJlIGRvbmUgeWV0XG4iKTsKLSAgICAgICAgZ290byBmaW5pc2hlZDsKLSAgICB9Ci0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUmVhZE5leHRIZWFkZXIgKGZvciBhcHAgaGVhZGVyKSBmYWlsZWQgd2l0aCAlc1xuIiwgc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIGdvdG8gZmluaXNoZWQ7Ci0gICAgfQotICAgIGlmICh0eXBlICE9IEJBQ0tVUF9IRUFERVJfRU5USVRZX1YxKSB7Ci0gICAgICAgIGVyciA9IEVJTlZBTDsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ0eXBlPTB4JTA4eCBleHBlY3RlZCAweCUwOHhcbiIsIHR5cGUsIEJBQ0tVUF9IRUFERVJfRU5USVRZX1YxKTsKLSAgICB9Ci0KLSAgICBlcnIgPSByZWFkZXIuUmVhZEVudGl0eUhlYWRlcigmc3RyaW5nLCAmYWN0dWFsU2l6ZSk7Ci0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUmVhZEVudGl0eUhlYWRlciBmYWlsZWQgd2l0aCAlc1xuIiwgc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIGdvdG8gZmluaXNoZWQ7Ci0gICAgfQotICAgIGlmIChzdHJpbmcgIT0gc3RyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUmVhZEVudGl0eUhlYWRlciBleHBlY3RlZCBrZXkgJyVzJyBnb3QgJyVzJ1xuIiwgc3RyLCBzdHJpbmcuc3RyaW5nKCkpOwotICAgICAgICBlcnIgPSBFSU5WQUw7Ci0gICAgICAgIGdvdG8gZmluaXNoZWQ7Ci0gICAgfQotICAgIGlmICgoaW50KWFjdHVhbFNpemUgIT0gYnVmU2l6ZSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJlYWRFbnRpdHlIZWFkZXIgZXhwZWN0ZWQgZGF0YVNpemUgMHglMDh4IGdvdCAweCUwOHhcbiIsIGJ1ZlNpemUsCi0gICAgICAgICAgICAgICAgYWN0dWFsU2l6ZSk7Ci0gICAgICAgIGVyciA9IEVJTlZBTDsKLSAgICAgICAgZ290byBmaW5pc2hlZDsKLSAgICB9Ci0KLSAgICBuUmVhZCA9IHJlYWRlci5SZWFkRW50aXR5RGF0YShidWYsIGJ1ZlNpemUpOwotICAgIGlmIChuUmVhZCA8IDApIHsKLSAgICAgICAgZXJyID0gcmVhZGVyLlN0YXR1cygpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJlYWRFbnRpdHlEYXRhIGZhaWxlZCB3aXRoICVzXG4iLCBzdHJlcnJvcihlcnIpKTsKLSAgICAgICAgZ290byBmaW5pc2hlZDsKLSAgICB9Ci0KLSAgICBpZiAoMCAhPSBtZW1jbXAoYnVmLCBzdHIsIGJ1ZlNpemUpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUmVhZEVudGl0eURhdGEgZXhwZWN0ZWQgJyVzJyBidXQgZ290IHNvbWV0aGluZyBzdGFydGluZyB3aXRoICIKLSAgICAgICAgICAgICAgICAiJTAyeCAlMDJ4ICUwMnggJTAyeCAgJyVjJWMlYyVjJ1xuIiwgc3RyLCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sCi0gICAgICAgICAgICAgICAgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdKTsKLSAgICAgICAgZXJyID0gRUlOVkFMOwotICAgICAgICBnb3RvIGZpbmlzaGVkOwotICAgIH0KLQotICAgIC8vIFRoZSBuZXh0IHJlYWQgd2lsbCBjb25maXJtIHdoZXRoZXIgaXQgZ290IHRoZSByaWdodCBhbW91bnQgb2YgZGF0YS4KLQotZmluaXNoZWQ6Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRlc3RfcmVhZF9oZWFkZXJfYW5kX2VudGl0eSBmYWlsZWQgd2l0aCAlc1xuIiwgc3RyZXJyb3IoZXJyKSk7Ci0gICAgfQotICAgIGZyZWUoYnVmKTsKLSAgICByZXR1cm4gZXJyOwotfQotCi1pbnQKLWJhY2t1cF9oZWxwZXJfdGVzdF9kYXRhX3JlYWRlcigpCi17Ci0gICAgaW50IGVycjsKLSAgICBpbnQgZmQ7Ci0gICAgY29uc3QgY2hhciogZmlsZW5hbWUgPSBTQ1JBVENIX0RJUiAiZGF0YV9yZWFkZXIuZGF0YSI7Ci0KLSAgICBzeXN0ZW0oInJtIC1yICIgU0NSQVRDSF9ESVIpOwotICAgIG1rZGlyKFNDUkFUQ0hfRElSLCAwNzc3KTsKLSAgICBta2RpcihTQ1JBVENIX0RJUiAiZGF0YSIsIDA3NzcpOwotCi0gICAgZmQgPSBjcmVhdChmaWxlbmFtZSwgMDY2Nik7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgY3JlYXRpbmc6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgZXJyID0gd3JpdGUoZmQsIERBVEFfR09MREVOX0ZJTEUsIERBVEFfR09MREVOX0ZJTEVfU0laRSk7Ci0gICAgaWYgKGVyciAhPSBEQVRBX0dPTERFTl9GSUxFX1NJWkUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBcIiVzXCIgd3JpdGluZyBnb2xkZW4gZmlsZSAlc1xuIiwgc3RyZXJyb3IoZXJybm8pLCBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICBjbG9zZShmZCk7Ci0KLSAgICBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBcIiVzXCIgb3BlbmluZyBnb2xkZW4gZmlsZSAlcyBmb3IgcmVhZFxuIiwgc3RyZXJyb3IoZXJybm8pLAotICAgICAgICAgICAgICAgIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgQmFja3VwRGF0YVJlYWRlciByZWFkZXIoZmQpOwotCi0gICAgICAgIGVyciA9IDA7Ci0KLSAgICAgICAgaWYgKGVyciA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgZXJyID0gdGVzdF9yZWFkX2hlYWRlcl9hbmRfZW50aXR5KHJlYWRlciwgIm5vX3BhZGRpbmdfIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXJyID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBlcnIgPSB0ZXN0X3JlYWRfaGVhZGVyX2FuZF9lbnRpdHkocmVhZGVyLCAicGFkZGVkX3RvX18zIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXJyID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBlcnIgPSB0ZXN0X3JlYWRfaGVhZGVyX2FuZF9lbnRpdHkocmVhZGVyLCAicGFkZGVkX3RvXzJfXyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgZXJyID0gdGVzdF9yZWFkX2hlYWRlcl9hbmRfZW50aXR5KHJlYWRlciwgInBhZGRlZF90bzEiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsb3NlKGZkKTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQKLWdldF9tb2RfdGltZShjb25zdCBjaGFyKiBmaWxlbmFtZSwgc3RydWN0IHRpbWV2YWwgdGltZXNbMl0pCi17Ci0gICAgaW50IGVycjsKLSAgICBzdHJ1Y3Qgc3RhdDY0IHN0OwotICAgIGVyciA9IHN0YXQ2NChmaWxlbmFtZSwgJnN0KTsKLSAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJzdGF0ICclcycgZmFpbGVkOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0gICAgdGltZXNbMF0udHZfc2VjID0gc3Quc3RfYXRpbWU7Ci0gICAgdGltZXNbMV0udHZfc2VjID0gc3Quc3RfbXRpbWU7Ci0KLSAgICAvLyBJZiBzdF9hdGltZSBpcyBhIG1hY3JvIHRoZW4gc3RydWN0IHN0YXQ2NCB1c2VzIHN0cnVjdCB0aW1lc3BlYwotICAgIC8vIHRvIHN0b3JlIHRoZSBhY2Nlc3MgYW5kIG1vZGlmIHRpbWUgdmFsdWVzIGFuZCB0eXBpY2FsbHkKLSAgICAvLyBzdF8qdGltZV9uc2VjIGlzIG5vdCBkZWZpbmVkLiBJbiBnbGliYywgdGhpcyBpcyBjb250cm9sbGVkIGJ5Ci0gICAgLy8gX19VU0VfTUlTQy4KLSNpZmRlZiBfX1VTRV9NSVNDCi0jaWYgIWRlZmluZWQoc3RfYXRpbWUpIHx8IGRlZmluZWQoc3RfYXRpbWVfbnNlYykKLSNlcnJvciAiQ2hlY2sgaWYgdGhpcyBfX1VTRV9NSVNDIGNvbmRpdGlvbmFsIGlzIHN0aWxsIG5lZWRlZC4iCi0jZW5kaWYKLSAgICB0aW1lc1swXS50dl91c2VjID0gc3Quc3RfYXRpbS50dl9uc2VjIC8gMTAwMDsKLSAgICB0aW1lc1sxXS50dl91c2VjID0gc3Quc3RfbXRpbS50dl9uc2VjIC8gMTAwMDsKLSNlbHNlCi0gICAgdGltZXNbMF0udHZfdXNlYyA9IHN0LnN0X2F0aW1lX25zZWMgLyAxMDAwOwotICAgIHRpbWVzWzFdLnR2X3VzZWMgPSBzdC5zdF9tdGltZV9uc2VjIC8gMTAwMDsKLSNlbmRpZgotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludAotYmFja3VwX2hlbHBlcl90ZXN0X2ZpbGVzKCkKLXsKLSAgICBpbnQgZXJyOwotICAgIGludCBvbGRTbmFwc2hvdEZEOwotICAgIGludCBkYXRhU3RyZWFtRkQ7Ci0gICAgaW50IG5ld1NuYXBzaG90RkQ7Ci0KLSAgICBzeXN0ZW0oInJtIC1yICIgU0NSQVRDSF9ESVIpOwotICAgIG1rZGlyKFNDUkFUQ0hfRElSLCAwNzc3KTsKLSAgICBta2RpcihTQ1JBVENIX0RJUiAiZGF0YSIsIDA3NzcpOwotCi0gICAgd3JpdGVfdGV4dF9maWxlKFNDUkFUQ0hfRElSICJkYXRhL2IiLCAiYlxuYmJcbiIpOwotICAgIHdyaXRlX3RleHRfZmlsZShTQ1JBVENIX0RJUiAiZGF0YS9jIiwgImNcbmNjXG4iKTsKLSAgICB3cml0ZV90ZXh0X2ZpbGUoU0NSQVRDSF9ESVIgImRhdGEvZCIsICJkXG5kZFxuIik7Ci0gICAgd3JpdGVfdGV4dF9maWxlKFNDUkFUQ0hfRElSICJkYXRhL2UiLCAiZVxuZWVcbiIpOwotICAgIHdyaXRlX3RleHRfZmlsZShTQ1JBVENIX0RJUiAiZGF0YS9mIiwgImZcbmZmXG4iKTsKLSAgICB3cml0ZV90ZXh0X2ZpbGUoU0NSQVRDSF9ESVIgImRhdGEvaCIsICJoXG5oaFxuIik7Ci0KLSAgICBjaGFyIGNvbnN0KiBmaWxlc19iZWZvcmVbXSA9IHsKLSAgICAgICAgU0NSQVRDSF9ESVIgImRhdGEvYiIsCi0gICAgICAgIFNDUkFUQ0hfRElSICJkYXRhL2MiLAotICAgICAgICBTQ1JBVENIX0RJUiAiZGF0YS9kIiwKLSAgICAgICAgU0NSQVRDSF9ESVIgImRhdGEvZSIsCi0gICAgICAgIFNDUkFUQ0hfRElSICJkYXRhL2YiCi0gICAgfTsKLQotICAgIGNoYXIgY29uc3QqIGtleXNfYmVmb3JlW10gPSB7Ci0gICAgICAgICJkYXRhL2IiLAotICAgICAgICAiZGF0YS9jIiwKLSAgICAgICAgImRhdGEvZCIsCi0gICAgICAgICJkYXRhL2UiLAotICAgICAgICAiZGF0YS9mIgotICAgIH07Ci0KLSAgICBkYXRhU3RyZWFtRkQgPSBjcmVhdChTQ1JBVENIX0RJUiAiMS5kYXRhIiwgMDY2Nik7Ci0gICAgaWYgKGRhdGFTdHJlYW1GRCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGNyZWF0aW5nOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIG5ld1NuYXBzaG90RkQgPSBjcmVhdChTQ1JBVENIX0RJUiAiYmVmb3JlLnNuYXAiLCAwNjY2KTsKLSAgICBpZiAobmV3U25hcHNob3RGRCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGNyZWF0aW5nOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgQmFja3VwRGF0YVdyaXRlciBkYXRhU3RyZWFtKGRhdGFTdHJlYW1GRCk7Ci0KLSAgICAgICAgZXJyID0gYmFja191cF9maWxlcygtMSwgJmRhdGFTdHJlYW0sIG5ld1NuYXBzaG90RkQsIGZpbGVzX2JlZm9yZSwga2V5c19iZWZvcmUsIDUpOwotICAgICAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbG9zZShkYXRhU3RyZWFtRkQpOwotICAgIGNsb3NlKG5ld1NuYXBzaG90RkQpOwotCi0gICAgc2xlZXAoMyk7Ci0KLSAgICBzdHJ1Y3QgdGltZXZhbCBkX3RpbWVzWzJdOwotICAgIHN0cnVjdCB0aW1ldmFsIGVfdGltZXNbMl07Ci0KLSAgICBlcnIgPSBnZXRfbW9kX3RpbWUoU0NSQVRDSF9ESVIgImRhdGEvZCIsIGRfdGltZXMpOwotICAgIGVyciB8PSBnZXRfbW9kX3RpbWUoU0NSQVRDSF9ESVIgImRhdGEvZSIsIGVfdGltZXMpOwotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHdyaXRlX3RleHRfZmlsZShTQ1JBVENIX0RJUiAiZGF0YS9hIiwgImFcbmFhXG4iKTsKLSAgICB1bmxpbmsoU0NSQVRDSF9ESVIgImRhdGEvYyIpOwotICAgIHdyaXRlX3RleHRfZmlsZShTQ1JBVENIX0RJUiAiZGF0YS9jIiwgImNcbmNjXG4iKTsKLSAgICB3cml0ZV90ZXh0X2ZpbGUoU0NSQVRDSF9ESVIgImRhdGEvZCIsICJkZFxuZGRcbiIpOwotICAgIHV0aW1lcyhTQ1JBVENIX0RJUiAiZGF0YS9kIiwgZF90aW1lcyk7Ci0gICAgd3JpdGVfdGV4dF9maWxlKFNDUkFUQ0hfRElSICJkYXRhL2UiLCAielxuenpcbiIpOwotICAgIHV0aW1lcyhTQ1JBVENIX0RJUiAiZGF0YS9lIiwgZV90aW1lcyk7Ci0gICAgd3JpdGVfdGV4dF9maWxlKFNDUkFUQ0hfRElSICJkYXRhL2ciLCAiZ1xuZ2dcbiIpOwotICAgIHVubGluayhTQ1JBVENIX0RJUiAiZGF0YS9mIik7Ci0KLSAgICBjaGFyIGNvbnN0KiBmaWxlc19hZnRlcltdID0gewotICAgICAgICBTQ1JBVENIX0RJUiAiZGF0YS9hIiwgLy8gYWRkZWQKLSAgICAgICAgU0NSQVRDSF9ESVIgImRhdGEvYiIsIC8vIHNhbWUKLSAgICAgICAgU0NSQVRDSF9ESVIgImRhdGEvYyIsIC8vIGRpZmZlcmVudCBtb2QgdGltZQotICAgICAgICBTQ1JBVENIX0RJUiAiZGF0YS9kIiwgLy8gZGlmZmVyZW50IHNpemUgKHNhbWUgbW9kIHRpbWUpCi0gICAgICAgIFNDUkFUQ0hfRElSICJkYXRhL2UiLCAvLyBkaWZmZXJlbnQgY29udGVudHMgKHNhbWUgbW9kIHRpbWUsIHNhbWUgc2l6ZSkKLSAgICAgICAgU0NSQVRDSF9ESVIgImRhdGEvZyIgIC8vIGFkZGVkCi0gICAgfTsKLQotICAgIGNoYXIgY29uc3QqIGtleXNfYWZ0ZXJbXSA9IHsKLSAgICAgICAgImRhdGEvYSIsIC8vIGFkZGVkCi0gICAgICAgICJkYXRhL2IiLCAvLyBzYW1lCi0gICAgICAgICJkYXRhL2MiLCAvLyBkaWZmZXJlbnQgbW9kIHRpbWUKLSAgICAgICAgImRhdGEvZCIsIC8vIGRpZmZlcmVudCBzaXplIChzYW1lIG1vZCB0aW1lKQotICAgICAgICAiZGF0YS9lIiwgLy8gZGlmZmVyZW50IGNvbnRlbnRzIChzYW1lIG1vZCB0aW1lLCBzYW1lIHNpemUpCi0gICAgICAgICJkYXRhL2ciICAvLyBhZGRlZAotICAgIH07Ci0KLSAgICBvbGRTbmFwc2hvdEZEID0gb3BlbihTQ1JBVENIX0RJUiAiYmVmb3JlLnNuYXAiLCBPX1JET05MWSk7Ci0gICAgaWYgKG9sZFNuYXBzaG90RkQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBvcGVuaW5nOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIGRhdGFTdHJlYW1GRCA9IGNyZWF0KFNDUkFUQ0hfRElSICIyLmRhdGEiLCAwNjY2KTsKLSAgICBpZiAoZGF0YVN0cmVhbUZEID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgY3JlYXRpbmc6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgbmV3U25hcHNob3RGRCA9IGNyZWF0KFNDUkFUQ0hfRElSICJhZnRlci5zbmFwIiwgMDY2Nik7Ci0gICAgaWYgKG5ld1NuYXBzaG90RkQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBjcmVhdGluZzogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIEJhY2t1cERhdGFXcml0ZXIgZGF0YVN0cmVhbShkYXRhU3RyZWFtRkQpOwotCi0gICAgICAgIGVyciA9IGJhY2tfdXBfZmlsZXMob2xkU25hcHNob3RGRCwgJmRhdGFTdHJlYW0sIG5ld1NuYXBzaG90RkQsIGZpbGVzX2FmdGVyLCBrZXlzX2FmdGVyLCA2KTsKLSAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci19Ci0KLSAgICBjbG9zZShvbGRTbmFwc2hvdEZEKTsKLSAgICBjbG9zZShkYXRhU3RyZWFtRkQpOwotICAgIGNsb3NlKG5ld1NuYXBzaG90RkQpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludAotYmFja3VwX2hlbHBlcl90ZXN0X251bGxfYmFzZSgpCi17Ci0gICAgaW50IGVycjsKLSAgICBpbnQgb2xkU25hcHNob3RGRDsKLSAgICBpbnQgZGF0YVN0cmVhbUZEOwotICAgIGludCBuZXdTbmFwc2hvdEZEOwotCi0gICAgc3lzdGVtKCJybSAtciAiIFNDUkFUQ0hfRElSKTsKLSAgICBta2RpcihTQ1JBVENIX0RJUiwgMDc3Nyk7Ci0gICAgbWtkaXIoU0NSQVRDSF9ESVIgImRhdGEiLCAwNzc3KTsKLQotICAgIHdyaXRlX3RleHRfZmlsZShTQ1JBVENIX0RJUiAiZGF0YS9hIiwgImFcbmFhXG4iKTsKLQotICAgIGNoYXIgY29uc3QqIGZpbGVzW10gPSB7Ci0gICAgICAgIFNDUkFUQ0hfRElSICJkYXRhL2EiLAotICAgIH07Ci0KLSAgICBjaGFyIGNvbnN0KiBrZXlzW10gPSB7Ci0gICAgICAgICJhIiwKLSAgICB9OwotCi0gICAgZGF0YVN0cmVhbUZEID0gY3JlYXQoU0NSQVRDSF9ESVIgIm51bGxfYmFzZS5kYXRhIiwgMDY2Nik7Ci0gICAgaWYgKGRhdGFTdHJlYW1GRCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGNyZWF0aW5nOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIG5ld1NuYXBzaG90RkQgPSBjcmVhdChTQ1JBVENIX0RJUiAibnVsbF9iYXNlLnNuYXAiLCAwNjY2KTsKLSAgICBpZiAobmV3U25hcHNob3RGRCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGNyZWF0aW5nOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgQmFja3VwRGF0YVdyaXRlciBkYXRhU3RyZWFtKGRhdGFTdHJlYW1GRCk7Ci0KLSAgICAgICAgZXJyID0gYmFja191cF9maWxlcygtMSwgJmRhdGFTdHJlYW0sIG5ld1NuYXBzaG90RkQsIGZpbGVzLCBrZXlzLCAxKTsKLSAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xvc2UoZGF0YVN0cmVhbUZEKTsKLSAgICBjbG9zZShuZXdTbmFwc2hvdEZEKTsKLQotICAgIHJldHVybiAwOwotfQotCi1pbnQKLWJhY2t1cF9oZWxwZXJfdGVzdF9taXNzaW5nX2ZpbGUoKQotewotICAgIGludCBlcnI7Ci0gICAgaW50IG9sZFNuYXBzaG90RkQ7Ci0gICAgaW50IGRhdGFTdHJlYW1GRDsKLSAgICBpbnQgbmV3U25hcHNob3RGRDsKLQotICAgIHN5c3RlbSgicm0gLXIgIiBTQ1JBVENIX0RJUik7Ci0gICAgbWtkaXIoU0NSQVRDSF9ESVIsIDA3NzcpOwotICAgIG1rZGlyKFNDUkFUQ0hfRElSICJkYXRhIiwgMDc3Nyk7Ci0KLSAgICB3cml0ZV90ZXh0X2ZpbGUoU0NSQVRDSF9ESVIgImRhdGEvYiIsICJiXG5iYlxuIik7Ci0KLSAgICBjaGFyIGNvbnN0KiBmaWxlc1tdID0gewotICAgICAgICBTQ1JBVENIX0RJUiAiZGF0YS9hIiwKLSAgICAgICAgU0NSQVRDSF9ESVIgImRhdGEvYiIsCi0gICAgICAgIFNDUkFUQ0hfRElSICJkYXRhL2MiLAotICAgIH07Ci0KLSAgICBjaGFyIGNvbnN0KiBrZXlzW10gPSB7Ci0gICAgICAgICJhIiwKLSAgICAgICAgImIiLAotICAgICAgICAiYyIsCi0gICAgfTsKLQotICAgIGRhdGFTdHJlYW1GRCA9IGNyZWF0KFNDUkFUQ0hfRElSICJudWxsX2Jhc2UuZGF0YSIsIDA2NjYpOwotICAgIGlmIChkYXRhU3RyZWFtRkQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBjcmVhdGluZzogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICBuZXdTbmFwc2hvdEZEID0gY3JlYXQoU0NSQVRDSF9ESVIgIm51bGxfYmFzZS5zbmFwIiwgMDY2Nik7Ci0gICAgaWYgKG5ld1NuYXBzaG90RkQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBjcmVhdGluZzogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIEJhY2t1cERhdGFXcml0ZXIgZGF0YVN0cmVhbShkYXRhU3RyZWFtRkQpOwotCi0gICAgICAgIGVyciA9IGJhY2tfdXBfZmlsZXMoLTEsICZkYXRhU3RyZWFtLCBuZXdTbmFwc2hvdEZELCBmaWxlcywga2V5cywgMSk7Ci0gICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsb3NlKGRhdGFTdHJlYW1GRCk7Ci0gICAgY2xvc2UobmV3U25hcHNob3RGRCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotCi0jZW5kaWYgLy8gVEVTVF9CQUNLVVBfSEVMUEVSUwotCi19CmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9DdXJzb3JXaW5kb3cuY3BwIGIvbGlicy9hbmRyb2lkZncvQ3Vyc29yV2luZG93LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY1NGVkYi4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9DdXJzb3JXaW5kb3cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3VuZGVmIExPR19UQUcKLSNkZWZpbmUgTE9HX1RBRyAiQ3Vyc29yV2luZG93IgotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L0N1cnNvcldpbmRvdy5oPgotI2luY2x1ZGUgPGJpbmRlci9QYXJjZWwuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2luY2x1ZGUgPGN1dGlscy9hc2htZW0uaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotQ3Vyc29yV2luZG93OjpDdXJzb3JXaW5kb3coY29uc3QgU3RyaW5nOCYgbmFtZSwgaW50IGFzaG1lbUZkLAotICAgICAgICB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgYm9vbCByZWFkT25seSkgOgotICAgICAgICBtTmFtZShuYW1lKSwgbUFzaG1lbUZkKGFzaG1lbUZkKSwgbURhdGEoZGF0YSksIG1TaXplKHNpemUpLCBtUmVhZE9ubHkocmVhZE9ubHkpIHsKLSAgICBtSGVhZGVyID0gc3RhdGljX2Nhc3Q8SGVhZGVyKj4obURhdGEpOwotfQotCi1DdXJzb3JXaW5kb3c6On5DdXJzb3JXaW5kb3coKSB7Ci0gICAgOjptdW5tYXAobURhdGEsIG1TaXplKTsKLSAgICA6OmNsb3NlKG1Bc2htZW1GZCk7Ci19Ci0KLXN0YXR1c190IEN1cnNvcldpbmRvdzo6Y3JlYXRlKGNvbnN0IFN0cmluZzgmIG5hbWUsIHNpemVfdCBzaXplLCBDdXJzb3JXaW5kb3cqKiBvdXRDdXJzb3JXaW5kb3cpIHsKLSAgICBTdHJpbmc4IGFzaG1lbU5hbWUoIkN1cnNvcldpbmRvdzogIik7Ci0gICAgYXNobWVtTmFtZS5hcHBlbmQobmFtZSk7Ci0KLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0gICAgaW50IGFzaG1lbUZkID0gYXNobWVtX2NyZWF0ZV9yZWdpb24oYXNobWVtTmFtZS5zdHJpbmcoKSwgc2l6ZSk7Ci0gICAgaWYgKGFzaG1lbUZkIDwgMCkgewotICAgICAgICByZXN1bHQgPSAtZXJybm87Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gYXNobWVtX3NldF9wcm90X3JlZ2lvbihhc2htZW1GZCwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPj0gMCkgewotICAgICAgICAgICAgdm9pZCogZGF0YSA9IDo6bW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBhc2htZW1GZCwgMCk7Ci0gICAgICAgICAgICBpZiAoZGF0YSA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gLWVycm5vOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBhc2htZW1fc2V0X3Byb3RfcmVnaW9uKGFzaG1lbUZkLCBQUk9UX1JFQUQpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBDdXJzb3JXaW5kb3cqIHdpbmRvdyA9IG5ldyBDdXJzb3JXaW5kb3cobmFtZSwgYXNobWVtRmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgc2l6ZSwgZmFsc2UgLypyZWFkT25seSovKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gd2luZG93LT5jbGVhcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgTE9HX1dJTkRPVygiQ3JlYXRlZCBuZXcgQ3Vyc29yV2luZG93OiBmcmVlT2Zmc2V0PSVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJudW1Sb3dzPSVkLCBudW1Db2x1bW5zPSVkLCBtU2l6ZT0lZCwgbURhdGE9JXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3ctPm1IZWFkZXItPmZyZWVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy0+bUhlYWRlci0+bnVtUm93cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LT5tSGVhZGVyLT5udW1Db2x1bW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3ctPm1TaXplLCB3aW5kb3ctPm1EYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICpvdXRDdXJzb3JXaW5kb3cgPSB3aW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT0s7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHdpbmRvdzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICA6Om11bm1hcChkYXRhLCBzaXplKTsKLSAgICAgICAgfQotICAgICAgICA6OmNsb3NlKGFzaG1lbUZkKTsKLSAgICB9Ci0gICAgKm91dEN1cnNvcldpbmRvdyA9IE5VTEw7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdHVzX3QgQ3Vyc29yV2luZG93OjpjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCogcGFyY2VsLCBDdXJzb3JXaW5kb3cqKiBvdXRDdXJzb3JXaW5kb3cpIHsKLSAgICBTdHJpbmc4IG5hbWUgPSBwYXJjZWwtPnJlYWRTdHJpbmc4KCk7Ci0KLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0gICAgaW50IGFzaG1lbUZkID0gcGFyY2VsLT5yZWFkRmlsZURlc2NyaXB0b3IoKTsKLSAgICBpZiAoYXNobWVtRmQgPT0gaW50KEJBRF9UWVBFKSkgewotICAgICAgICByZXN1bHQgPSBCQURfVFlQRTsKLSAgICB9IGVsc2UgewotICAgICAgICBzc2l6ZV90IHNpemUgPSBhc2htZW1fZ2V0X3NpemVfcmVnaW9uKGFzaG1lbUZkKTsKLSAgICAgICAgaWYgKHNpemUgPCAwKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW50IGR1cEFzaG1lbUZkID0gOjpkdXAoYXNobWVtRmQpOwotICAgICAgICAgICAgaWYgKGR1cEFzaG1lbUZkIDwgMCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IC1lcnJubzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdm9pZCogZGF0YSA9IDo6bW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGR1cEFzaG1lbUZkLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IC1lcnJubzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDdXJzb3JXaW5kb3cqIHdpbmRvdyA9IG5ldyBDdXJzb3JXaW5kb3cobmFtZSwgZHVwQXNobWVtRmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgc2l6ZSwgdHJ1ZSAvKnJlYWRPbmx5Ki8pOwotICAgICAgICAgICAgICAgICAgICBMT0dfV0lORE9XKCJDcmVhdGVkIEN1cnNvcldpbmRvdyBmcm9tIHBhcmNlbDogZnJlZU9mZnNldD0lZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJudW1Sb3dzPSVkLCBudW1Db2x1bW5zPSVkLCBtU2l6ZT0lZCwgbURhdGE9JXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy0+bUhlYWRlci0+ZnJlZU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3ctPm1IZWFkZXItPm51bVJvd3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LT5tSGVhZGVyLT5udW1Db2x1bW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy0+bVNpemUsIHdpbmRvdy0+bURhdGEpOwotICAgICAgICAgICAgICAgICAgICAqb3V0Q3Vyc29yV2luZG93ID0gd2luZG93OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gT0s7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIDo6Y2xvc2UoZHVwQXNobWVtRmQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgICpvdXRDdXJzb3JXaW5kb3cgPSBOVUxMOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXR1c190IEN1cnNvcldpbmRvdzo6d3JpdGVUb1BhcmNlbChQYXJjZWwqIHBhcmNlbCkgewotICAgIHN0YXR1c190IHN0YXR1cyA9IHBhcmNlbC0+d3JpdGVTdHJpbmc4KG1OYW1lKTsKLSAgICBpZiAoIXN0YXR1cykgewotICAgICAgICBzdGF0dXMgPSBwYXJjZWwtPndyaXRlRHVwRmlsZURlc2NyaXB0b3IobUFzaG1lbUZkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdHVzX3QgQ3Vyc29yV2luZG93OjpjbGVhcigpIHsKLSAgICBpZiAobVJlYWRPbmx5KSB7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBtSGVhZGVyLT5mcmVlT2Zmc2V0ID0gc2l6ZW9mKEhlYWRlcikgKyBzaXplb2YoUm93U2xvdENodW5rKTsKLSAgICBtSGVhZGVyLT5maXJzdENodW5rT2Zmc2V0ID0gc2l6ZW9mKEhlYWRlcik7Ci0gICAgbUhlYWRlci0+bnVtUm93cyA9IDA7Ci0gICAgbUhlYWRlci0+bnVtQ29sdW1ucyA9IDA7Ci0KLSAgICBSb3dTbG90Q2h1bmsqIGZpcnN0Q2h1bmsgPSBzdGF0aWNfY2FzdDxSb3dTbG90Q2h1bmsqPihvZmZzZXRUb1B0cihtSGVhZGVyLT5maXJzdENodW5rT2Zmc2V0KSk7Ci0gICAgZmlyc3RDaHVuay0+bmV4dENodW5rT2Zmc2V0ID0gMDsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IEN1cnNvcldpbmRvdzo6c2V0TnVtQ29sdW1ucyh1aW50MzJfdCBudW1Db2x1bW5zKSB7Ci0gICAgaWYgKG1SZWFkT25seSkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgdWludDMyX3QgY3VyID0gbUhlYWRlci0+bnVtQ29sdW1uczsKLSAgICBpZiAoKGN1ciA+IDAgfHwgbUhlYWRlci0+bnVtUm93cyA+IDApICYmIGN1ciAhPSBudW1Db2x1bW5zKSB7Ci0gICAgICAgIEFMT0dFKCJUcnlpbmcgdG8gZ28gZnJvbSAlZCBjb2x1bW5zIHRvICVkIiwgY3VyLCBudW1Db2x1bW5zKTsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLSAgICBtSGVhZGVyLT5udW1Db2x1bW5zID0gbnVtQ29sdW1uczsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IEN1cnNvcldpbmRvdzo6YWxsb2NSb3coKSB7Ci0gICAgaWYgKG1SZWFkT25seSkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgLy8gRmlsbCBpbiB0aGUgcm93IHNsb3QKLSAgICBSb3dTbG90KiByb3dTbG90ID0gYWxsb2NSb3dTbG90KCk7Ci0gICAgaWYgKHJvd1Nsb3QgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgIH0KLQotICAgIC8vIEFsbG9jYXRlIHRoZSBzbG90cyBmb3IgdGhlIGZpZWxkIGRpcmVjdG9yeQotICAgIHNpemVfdCBmaWVsZERpclNpemUgPSBtSGVhZGVyLT5udW1Db2x1bW5zICogc2l6ZW9mKEZpZWxkU2xvdCk7Ci0gICAgdWludDMyX3QgZmllbGREaXJPZmZzZXQgPSBhbGxvYyhmaWVsZERpclNpemUsIHRydWUgLyphbGlnbmVkKi8pOwotICAgIGlmICghZmllbGREaXJPZmZzZXQpIHsKLSAgICAgICAgbUhlYWRlci0+bnVtUm93cy0tOwotICAgICAgICBMT0dfV0lORE9XKCJUaGUgcm93IGZhaWxlZCwgc28gYmFjayBvdXQgdGhlIG5ldyByb3cgYWNjb3VudGluZyAiCi0gICAgICAgICAgICAgICAgImZyb20gYWxsb2NSb3dTbG90ICVkIiwgbUhlYWRlci0+bnVtUm93cyk7Ci0gICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgfQotICAgIEZpZWxkU2xvdCogZmllbGREaXIgPSBzdGF0aWNfY2FzdDxGaWVsZFNsb3QqPihvZmZzZXRUb1B0cihmaWVsZERpck9mZnNldCkpOwotICAgIG1lbXNldChmaWVsZERpciwgMCwgZmllbGREaXJTaXplKTsKLQotICAgIExPR19XSU5ET1coIkFsbG9jYXRlZCByb3cgJXUsIHJvd1Nsb3QgaXMgYXQgb2Zmc2V0ICV1LCBmaWVsZERpciBpcyAlZCBieXRlcyBhdCBvZmZzZXQgJXVcbiIsCi0gICAgICAgICAgICBtSGVhZGVyLT5udW1Sb3dzIC0gMSwgb2Zmc2V0RnJvbVB0cihyb3dTbG90KSwgZmllbGREaXJTaXplLCBmaWVsZERpck9mZnNldCk7Ci0gICAgcm93U2xvdC0+b2Zmc2V0ID0gZmllbGREaXJPZmZzZXQ7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBDdXJzb3JXaW5kb3c6OmZyZWVMYXN0Um93KCkgewotICAgIGlmIChtUmVhZE9ubHkpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLQotICAgIGlmIChtSGVhZGVyLT5udW1Sb3dzID4gMCkgewotICAgICAgICBtSGVhZGVyLT5udW1Sb3dzLS07Ci0gICAgfQotICAgIHJldHVybiBPSzsKLX0KLQotdWludDMyX3QgQ3Vyc29yV2luZG93OjphbGxvYyhzaXplX3Qgc2l6ZSwgYm9vbCBhbGlnbmVkKSB7Ci0gICAgdWludDMyX3QgcGFkZGluZzsKLSAgICBpZiAoYWxpZ25lZCkgewotICAgICAgICAvLyA0IGJ5dGUgYWxpZ25tZW50Ci0gICAgICAgIHBhZGRpbmcgPSAofm1IZWFkZXItPmZyZWVPZmZzZXQgKyAxKSAmIDM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcGFkZGluZyA9IDA7Ci0gICAgfQotCi0gICAgdWludDMyX3Qgb2Zmc2V0ID0gbUhlYWRlci0+ZnJlZU9mZnNldCArIHBhZGRpbmc7Ci0gICAgdWludDMyX3QgbmV4dEZyZWVPZmZzZXQgPSBvZmZzZXQgKyBzaXplOwotICAgIGlmIChuZXh0RnJlZU9mZnNldCA+IG1TaXplKSB7Ci0gICAgICAgIEFMT0dXKCJXaW5kb3cgaXMgZnVsbDogcmVxdWVzdGVkIGFsbG9jYXRpb24gJWQgYnl0ZXMsICIKLSAgICAgICAgICAgICAgICAiZnJlZSBzcGFjZSAlZCBieXRlcywgd2luZG93IHNpemUgJWQgYnl0ZXMiLAotICAgICAgICAgICAgICAgIHNpemUsIGZyZWVTcGFjZSgpLCBtU2l6ZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIG1IZWFkZXItPmZyZWVPZmZzZXQgPSBuZXh0RnJlZU9mZnNldDsKLSAgICByZXR1cm4gb2Zmc2V0OwotfQotCi1DdXJzb3JXaW5kb3c6OlJvd1Nsb3QqIEN1cnNvcldpbmRvdzo6Z2V0Um93U2xvdCh1aW50MzJfdCByb3cpIHsKLSAgICB1aW50MzJfdCBjaHVua1BvcyA9IHJvdzsKLSAgICBSb3dTbG90Q2h1bmsqIGNodW5rID0gc3RhdGljX2Nhc3Q8Um93U2xvdENodW5rKj4oCi0gICAgICAgICAgICBvZmZzZXRUb1B0cihtSGVhZGVyLT5maXJzdENodW5rT2Zmc2V0KSk7Ci0gICAgd2hpbGUgKGNodW5rUG9zID49IFJPV19TTE9UX0NIVU5LX05VTV9ST1dTKSB7Ci0gICAgICAgIGNodW5rID0gc3RhdGljX2Nhc3Q8Um93U2xvdENodW5rKj4ob2Zmc2V0VG9QdHIoY2h1bmstPm5leHRDaHVua09mZnNldCkpOwotICAgICAgICBjaHVua1BvcyAtPSBST1dfU0xPVF9DSFVOS19OVU1fUk9XUzsKLSAgICB9Ci0gICAgcmV0dXJuICZjaHVuay0+c2xvdHNbY2h1bmtQb3NdOwotfQotCi1DdXJzb3JXaW5kb3c6OlJvd1Nsb3QqIEN1cnNvcldpbmRvdzo6YWxsb2NSb3dTbG90KCkgewotICAgIHVpbnQzMl90IGNodW5rUG9zID0gbUhlYWRlci0+bnVtUm93czsKLSAgICBSb3dTbG90Q2h1bmsqIGNodW5rID0gc3RhdGljX2Nhc3Q8Um93U2xvdENodW5rKj4oCi0gICAgICAgICAgICBvZmZzZXRUb1B0cihtSGVhZGVyLT5maXJzdENodW5rT2Zmc2V0KSk7Ci0gICAgd2hpbGUgKGNodW5rUG9zID4gUk9XX1NMT1RfQ0hVTktfTlVNX1JPV1MpIHsKLSAgICAgICAgY2h1bmsgPSBzdGF0aWNfY2FzdDxSb3dTbG90Q2h1bmsqPihvZmZzZXRUb1B0cihjaHVuay0+bmV4dENodW5rT2Zmc2V0KSk7Ci0gICAgICAgIGNodW5rUG9zIC09IFJPV19TTE9UX0NIVU5LX05VTV9ST1dTOwotICAgIH0KLSAgICBpZiAoY2h1bmtQb3MgPT0gUk9XX1NMT1RfQ0hVTktfTlVNX1JPV1MpIHsKLSAgICAgICAgaWYgKCFjaHVuay0+bmV4dENodW5rT2Zmc2V0KSB7Ci0gICAgICAgICAgICBjaHVuay0+bmV4dENodW5rT2Zmc2V0ID0gYWxsb2Moc2l6ZW9mKFJvd1Nsb3RDaHVuayksIHRydWUgLyphbGlnbmVkKi8pOwotICAgICAgICAgICAgaWYgKCFjaHVuay0+bmV4dENodW5rT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2h1bmsgPSBzdGF0aWNfY2FzdDxSb3dTbG90Q2h1bmsqPihvZmZzZXRUb1B0cihjaHVuay0+bmV4dENodW5rT2Zmc2V0KSk7Ci0gICAgICAgIGNodW5rLT5uZXh0Q2h1bmtPZmZzZXQgPSAwOwotICAgICAgICBjaHVua1BvcyA9IDA7Ci0gICAgfQotICAgIG1IZWFkZXItPm51bVJvd3MgKz0gMTsKLSAgICByZXR1cm4gJmNodW5rLT5zbG90c1tjaHVua1Bvc107Ci19Ci0KLUN1cnNvcldpbmRvdzo6RmllbGRTbG90KiBDdXJzb3JXaW5kb3c6OmdldEZpZWxkU2xvdCh1aW50MzJfdCByb3csIHVpbnQzMl90IGNvbHVtbikgewotICAgIGlmIChyb3cgPj0gbUhlYWRlci0+bnVtUm93cyB8fCBjb2x1bW4gPj0gbUhlYWRlci0+bnVtQ29sdW1ucykgewotICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHJlYWQgcm93ICVkLCBjb2x1bW4gJWQgZnJvbSBhIEN1cnNvcldpbmRvdyB3aGljaCAiCi0gICAgICAgICAgICAgICAgImhhcyAlZCByb3dzLCAlZCBjb2x1bW5zLiIsCi0gICAgICAgICAgICAgICAgcm93LCBjb2x1bW4sIG1IZWFkZXItPm51bVJvd3MsIG1IZWFkZXItPm51bUNvbHVtbnMpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUm93U2xvdCogcm93U2xvdCA9IGdldFJvd1Nsb3Qocm93KTsKLSAgICBpZiAoIXJvd1Nsb3QpIHsKLSAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBmaW5kIHJvd1Nsb3QgZm9yIHJvdyAlZC4iLCByb3cpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgRmllbGRTbG90KiBmaWVsZERpciA9IHN0YXRpY19jYXN0PEZpZWxkU2xvdCo+KG9mZnNldFRvUHRyKHJvd1Nsb3QtPm9mZnNldCkpOwotICAgIHJldHVybiAmZmllbGREaXJbY29sdW1uXTsKLX0KLQotc3RhdHVzX3QgQ3Vyc29yV2luZG93OjpwdXRCbG9iKHVpbnQzMl90IHJvdywgdWludDMyX3QgY29sdW1uLCBjb25zdCB2b2lkKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgICByZXR1cm4gcHV0QmxvYk9yU3RyaW5nKHJvdywgY29sdW1uLCB2YWx1ZSwgc2l6ZSwgRklFTERfVFlQRV9CTE9CKTsKLX0KLQotc3RhdHVzX3QgQ3Vyc29yV2luZG93OjpwdXRTdHJpbmcodWludDMyX3Qgcm93LCB1aW50MzJfdCBjb2x1bW4sIGNvbnN0IGNoYXIqIHZhbHVlLAotICAgICAgICBzaXplX3Qgc2l6ZUluY2x1ZGluZ051bGwpIHsKLSAgICByZXR1cm4gcHV0QmxvYk9yU3RyaW5nKHJvdywgY29sdW1uLCB2YWx1ZSwgc2l6ZUluY2x1ZGluZ051bGwsIEZJRUxEX1RZUEVfU1RSSU5HKTsKLX0KLQotc3RhdHVzX3QgQ3Vyc29yV2luZG93OjpwdXRCbG9iT3JTdHJpbmcodWludDMyX3Qgcm93LCB1aW50MzJfdCBjb2x1bW4sCi0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50MzJfdCB0eXBlKSB7Ci0gICAgaWYgKG1SZWFkT25seSkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgRmllbGRTbG90KiBmaWVsZFNsb3QgPSBnZXRGaWVsZFNsb3Qocm93LCBjb2x1bW4pOwotICAgIGlmICghZmllbGRTbG90KSB7Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgfQotCi0gICAgdWludDMyX3Qgb2Zmc2V0ID0gYWxsb2Moc2l6ZSk7Ci0gICAgaWYgKCFvZmZzZXQpIHsKLSAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICB9Ci0KLSAgICBtZW1jcHkob2Zmc2V0VG9QdHIob2Zmc2V0KSwgdmFsdWUsIHNpemUpOwotCi0gICAgZmllbGRTbG90LT50eXBlID0gdHlwZTsKLSAgICBmaWVsZFNsb3QtPmRhdGEuYnVmZmVyLm9mZnNldCA9IG9mZnNldDsKLSAgICBmaWVsZFNsb3QtPmRhdGEuYnVmZmVyLnNpemUgPSBzaXplOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgQ3Vyc29yV2luZG93OjpwdXRMb25nKHVpbnQzMl90IHJvdywgdWludDMyX3QgY29sdW1uLCBpbnQ2NF90IHZhbHVlKSB7Ci0gICAgaWYgKG1SZWFkT25seSkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgRmllbGRTbG90KiBmaWVsZFNsb3QgPSBnZXRGaWVsZFNsb3Qocm93LCBjb2x1bW4pOwotICAgIGlmICghZmllbGRTbG90KSB7Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgfQotCi0gICAgZmllbGRTbG90LT50eXBlID0gRklFTERfVFlQRV9JTlRFR0VSOwotICAgIGZpZWxkU2xvdC0+ZGF0YS5sID0gdmFsdWU7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBDdXJzb3JXaW5kb3c6OnB1dERvdWJsZSh1aW50MzJfdCByb3csIHVpbnQzMl90IGNvbHVtbiwgZG91YmxlIHZhbHVlKSB7Ci0gICAgaWYgKG1SZWFkT25seSkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgRmllbGRTbG90KiBmaWVsZFNsb3QgPSBnZXRGaWVsZFNsb3Qocm93LCBjb2x1bW4pOwotICAgIGlmICghZmllbGRTbG90KSB7Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgfQotCi0gICAgZmllbGRTbG90LT50eXBlID0gRklFTERfVFlQRV9GTE9BVDsKLSAgICBmaWVsZFNsb3QtPmRhdGEuZCA9IHZhbHVlOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgQ3Vyc29yV2luZG93OjpwdXROdWxsKHVpbnQzMl90IHJvdywgdWludDMyX3QgY29sdW1uKSB7Ci0gICAgaWYgKG1SZWFkT25seSkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgRmllbGRTbG90KiBmaWVsZFNsb3QgPSBnZXRGaWVsZFNsb3Qocm93LCBjb2x1bW4pOwotICAgIGlmICghZmllbGRTbG90KSB7Ci0gICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgfQotCi0gICAgZmllbGRTbG90LT50eXBlID0gRklFTERfVFlQRV9OVUxMOwotICAgIGZpZWxkU2xvdC0+ZGF0YS5idWZmZXIub2Zmc2V0ID0gMDsKLSAgICBmaWVsZFNsb3QtPmRhdGEuYnVmZmVyLnNpemUgPSAwOwotICAgIHJldHVybiBPSzsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2xpYnMvYW5kcm9pZGZ3L01PRFVMRV9MSUNFTlNFX0FQQUNIRTIgYi9saWJzL2FuZHJvaWRmdy9NT0RVTEVfTElDRU5TRV9BUEFDSEUyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L01PRFVMRV9MSUNFTlNFX0FQQUNIRTIKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvTk9USUNFIGIvbGlicy9hbmRyb2lkZncvTk9USUNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWIxZWZhLi4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L05PVElDRQorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0KLSAgIENvcHlyaWdodCAoYykgMjAwNS0yMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotCi0gICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQpkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvT2JiRmlsZS5jcHAgYi9saWJzL2FuZHJvaWRmdy9PYmJGaWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM1OWYwNi4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9PYmJGaWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2RlZmluZSBMT0dfVEFHICJPYmJGaWxlIgotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L09iYkZpbGUuaD4KLSNpbmNsdWRlIDx1dGlscy9Db21wYXQuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotLy8jZGVmaW5lIERFQlVHIDEKLQotI2RlZmluZSBrRm9vdGVyVGFnU2l6ZSA4ICAvKiBsYXN0IHR3byAzMi1iaXQgaW50ZWdlcnMgKi8KLQotI2RlZmluZSBrRm9vdGVyTWluU2l6ZSAzMyAvKiAzMi1iaXQgc2lnbmF0dXJlIHZlcnNpb24gKDQgYnl0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqIDMyLWJpdCBwYWNrYWdlIHZlcnNpb24gKDQgYnl0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqIDMyLWJpdCBmbGFncyAoNCBieXRlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICogNjQtYml0IHNhbHQgKDggYnl0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqIDMyLWJpdCBwYWNrYWdlIG5hbWUgc2l6ZSAoNCBieXRlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICogPj0xLWNoYXJhY3RlciBwYWNrYWdlIG5hbWUgKDEgYnl0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICogMzItYml0IGZvb3RlciBzaXplICg0IGJ5dGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAzMi1iaXQgZm9vdGVyIG1hcmtlciAoNCBieXRlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUga01heEJ1ZlNpemUgICAgMzI3NjggLyogTWF4aW11bSBmaWxlIHJlYWQgYnVmZmVyICovCi0KLSNkZWZpbmUga1NpZ25hdHVyZSAgICAgMHgwMTA1OTk4M1UgLyogT2JiRmlsZSBzaWduYXR1cmUgKi8KLQotI2RlZmluZSBrU2lnVmVyc2lvbiAgICAxIC8qIFdlIG9ubHkga25vdyBhYm91dCBzaWduYXR1cmUgdmVyc2lvbiAxICovCi0KLS8qIG9mZnNldHMgaW4gdmVyc2lvbiAxIG9mIHRoZSBoZWFkZXIgKi8KLSNkZWZpbmUga1BhY2thZ2VWZXJzaW9uT2Zmc2V0IDQKLSNkZWZpbmUga0ZsYWdzT2Zmc2V0ICAgICAgICAgIDgKLSNkZWZpbmUga1NhbHRPZmZzZXQgICAgICAgICAgIDEyCi0jZGVmaW5lIGtQYWNrYWdlTmFtZUxlbk9mZnNldCAyMAotI2RlZmluZSBrUGFja2FnZU5hbWVPZmZzZXQgICAgMjQKLQotLyoKLSAqIFRFTVBfRkFJTFVSRV9SRVRSWSBpcyBkZWZpbmVkIGJ5IHNvbWUsIGJ1dCBub3QgYWxsLCB2ZXJzaW9ucyBvZgotICogPHVuaXN0ZC5oPi4gKEFsYXMsIGl0IGlzIG5vdCBhcyBzdGFuZGFyZCBhcyB3ZSdkIGhvcGVkISkgU28sIGlmIGl0J3MKLSAqIG5vdCBhbHJlYWR5IGRlZmluZWQsIHRoZW4gZGVmaW5lIGl0IGhlcmUuCi0gKi8KLSNpZm5kZWYgVEVNUF9GQUlMVVJFX1JFVFJZCi0vKiBVc2VkIHRvIHJldHJ5IHN5c2NhbGxzIHRoYXQgY2FuIHJldHVybiBFSU5UUi4gKi8KLSNkZWZpbmUgVEVNUF9GQUlMVVJFX1JFVFJZKGV4cCkgKHsgICAgICAgICBcCi0gICAgdHlwZW9mIChleHApIF9yYzsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX3JjID0gKGV4cCk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoX3JjID09IC0xICYmIGVycm5vID09IEVJTlRSKTsgXAotICAgIF9yYzsgfSkKLSNlbmRpZgotCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotT2JiRmlsZTo6T2JiRmlsZSgpCi0gICAgICAgIDogbVBhY2thZ2VOYW1lKCIiKQotICAgICAgICAsIG1WZXJzaW9uKC0xKQotICAgICAgICAsIG1GbGFncygwKQotewotICAgIG1lbXNldChtU2FsdCwgMCwgc2l6ZW9mKG1TYWx0KSk7Ci19Ci0KLU9iYkZpbGU6On5PYmJGaWxlKCkgewotfQotCi1ib29sIE9iYkZpbGU6OnJlYWRGcm9tKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQotewotICAgIGludCBmZDsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgIGZkID0gOjpvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7Ci0gICAgaWYgKGZkIDwgMCkgewotICAgICAgICBBTE9HVygiY291bGRuJ3Qgb3BlbiBmaWxlICVzOiAlcyIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgc3VjY2VzcyA9IHJlYWRGcm9tKGZkKTsKLSAgICBjbG9zZShmZCk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgQUxPR1coImZhaWxlZCB0byByZWFkIGZyb20gJXMgKGZkPSVkKVxuIiwgZmlsZW5hbWUsIGZkKTsKLSAgICB9Ci0KLW91dDoKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBPYmJGaWxlOjpyZWFkRnJvbShpbnQgZmQpCi17Ci0gICAgaWYgKGZkIDwgMCkgewotICAgICAgICBBTE9HVygiYXR0ZW1wdCB0byByZWFkIGZyb20gaW52YWxpZCBmZFxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFyc2VPYmJGaWxlKGZkKTsKLX0KLQotYm9vbCBPYmJGaWxlOjpwYXJzZU9iYkZpbGUoaW50IGZkKQotewotICAgIG9mZjY0X3QgZmlsZUxlbmd0aCA9IGxzZWVrNjQoZmQsIDAsIFNFRUtfRU5EKTsKLQotICAgIGlmIChmaWxlTGVuZ3RoIDwga0Zvb3Rlck1pblNpemUpIHsKLSAgICAgICAgaWYgKGZpbGVMZW5ndGggPCAwKSB7Ci0gICAgICAgICAgICBBTE9HVygiZXJyb3Igc2Vla2luZyBpbiBPYmJGaWxlOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFMT0dXKCJmaWxlIGlzIG9ubHkgJWxsZCAobGVzcyB0aGFuICVkIG1pbmltdW0pXG4iLCBmaWxlTGVuZ3RoLCBrRm9vdGVyTWluU2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNzaXplX3QgYWN0dWFsOwotICAgIHNpemVfdCBmb290ZXJTaXplOwotCi0gICAgewotICAgICAgICBsc2VlazY0KGZkLCBmaWxlTGVuZ3RoIC0ga0Zvb3RlclRhZ1NpemUsIFNFRUtfU0VUKTsKLQotICAgICAgICBjaGFyIGZvb3RlcltrRm9vdGVyVGFnU2l6ZV07Ci0gICAgICAgIGFjdHVhbCA9IFRFTVBfRkFJTFVSRV9SRVRSWShyZWFkKGZkLCBmb290ZXIsIGtGb290ZXJUYWdTaXplKSk7Ci0gICAgICAgIGlmIChhY3R1YWwgIT0ga0Zvb3RlclRhZ1NpemUpIHsKLSAgICAgICAgICAgIEFMT0dXKCJjb3VsZG4ndCByZWFkIGZvb3RlciBzaWduYXR1cmU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgaW50IGZpbGVTaWcgPSBnZXQ0TEUoKHVuc2lnbmVkIGNoYXIqKWZvb3RlciArIHNpemVvZihpbnQzMl90KSk7Ci0gICAgICAgIGlmIChmaWxlU2lnICE9IGtTaWduYXR1cmUpIHsKLSAgICAgICAgICAgIEFMT0dXKCJmb290ZXIgZGlkbid0IG1hdGNoIG1hZ2ljIHN0cmluZyAoZXhwZWN0ZWQgMHglMDh4OyBnb3QgMHglMDh4KVxuIiwKLSAgICAgICAgICAgICAgICAgICAga1NpZ25hdHVyZSwgZmlsZVNpZyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBmb290ZXJTaXplID0gZ2V0NExFKCh1bnNpZ25lZCBjaGFyKilmb290ZXIpOwotICAgICAgICBpZiAoZm9vdGVyU2l6ZSA+IChzaXplX3QpZmlsZUxlbmd0aCAtIGtGb290ZXJUYWdTaXplCi0gICAgICAgICAgICAgICAgfHwgZm9vdGVyU2l6ZSA+IGtNYXhCdWZTaXplKSB7Ci0gICAgICAgICAgICBBTE9HVygiY2xhaW1lZCBmb290ZXIgc2l6ZSBpcyB0b28gbGFyZ2UgKDB4JTA4eng7IGZpbGUgc2l6ZSBpcyAweCUwOGxseClcbiIsCi0gICAgICAgICAgICAgICAgICAgIGZvb3RlclNpemUsIGZpbGVMZW5ndGgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZvb3RlclNpemUgPCAoa0Zvb3Rlck1pblNpemUgLSBrRm9vdGVyVGFnU2l6ZSkpIHsKLSAgICAgICAgICAgIEFMT0dXKCJjbGFpbWVkIGZvb3RlciBzaXplIGlzIHRvbyBzbWFsbCAoMHgleng7IG1pbmltdW0gc2l6ZSBpcyAweCV4KVxuIiwKLSAgICAgICAgICAgICAgICAgICAgZm9vdGVyU2l6ZSwga0Zvb3Rlck1pblNpemUgLSBrRm9vdGVyVGFnU2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBvZmY2NF90IGZpbGVPZmZzZXQgPSBmaWxlTGVuZ3RoIC0gZm9vdGVyU2l6ZSAtIGtGb290ZXJUYWdTaXplOwotICAgIGlmIChsc2VlazY0KGZkLCBmaWxlT2Zmc2V0LCBTRUVLX1NFVCkgIT0gZmlsZU9mZnNldCkgewotICAgICAgICBBTE9HVygic2VlayAlbGxkIGZhaWxlZDogJXNcbiIsIGZpbGVPZmZzZXQsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtRm9vdGVyU3RhcnQgPSBmaWxlT2Zmc2V0OwotCi0gICAgY2hhciogc2NhbkJ1ZiA9IChjaGFyKiltYWxsb2MoZm9vdGVyU2l6ZSk7Ci0gICAgaWYgKHNjYW5CdWYgPT0gTlVMTCkgewotICAgICAgICBBTE9HVygiY291bGRuJ3QgYWxsb2NhdGUgc2NhbkJ1ZjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBhY3R1YWwgPSBURU1QX0ZBSUxVUkVfUkVUUlkocmVhZChmZCwgc2NhbkJ1ZiwgZm9vdGVyU2l6ZSkpOwotICAgIC8vIHJlYWRBbW91bnQgaXMgZ3VhcmFudGVlZCB0byBiZSBsZXNzIHRoYW4ga01heEJ1ZlNpemUKLSAgICBpZiAoYWN0dWFsICE9IChzc2l6ZV90KWZvb3RlclNpemUpIHsKLSAgICAgICAgQUxPR0koImNvdWxkbid0IHJlYWQgT2JiRmlsZSBmb290ZXI6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICBmcmVlKHNjYW5CdWYpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0jaWZkZWYgREVCVUcKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZvb3RlclNpemU7ICsraSkgewotICAgICAgICBBTE9HSSgiY2hhcjogMHglMDJ4XG4iLCBzY2FuQnVmW2ldKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHVpbnQzMl90IHNpZ1ZlcnNpb24gPSBnZXQ0TEUoKHVuc2lnbmVkIGNoYXIqKXNjYW5CdWYpOwotICAgIGlmIChzaWdWZXJzaW9uICE9IGtTaWdWZXJzaW9uKSB7Ci0gICAgICAgIEFMT0dXKCJVbnN1cHBvcnRlZCBPYmJGaWxlIHZlcnNpb24gJWRcbiIsIHNpZ1ZlcnNpb24pOwotICAgICAgICBmcmVlKHNjYW5CdWYpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbVZlcnNpb24gPSAoaW50MzJfdCkgZ2V0NExFKCh1bnNpZ25lZCBjaGFyKilzY2FuQnVmICsga1BhY2thZ2VWZXJzaW9uT2Zmc2V0KTsKLSAgICBtRmxhZ3MgPSAoaW50MzJfdCkgZ2V0NExFKCh1bnNpZ25lZCBjaGFyKilzY2FuQnVmICsga0ZsYWdzT2Zmc2V0KTsKLQotICAgIG1lbWNweSgmbVNhbHQsICh1bnNpZ25lZCBjaGFyKilzY2FuQnVmICsga1NhbHRPZmZzZXQsIHNpemVvZihtU2FsdCkpOwotCi0gICAgc2l6ZV90IHBhY2thZ2VOYW1lTGVuID0gZ2V0NExFKCh1bnNpZ25lZCBjaGFyKilzY2FuQnVmICsga1BhY2thZ2VOYW1lTGVuT2Zmc2V0KTsKLSAgICBpZiAocGFja2FnZU5hbWVMZW4gPT0gMAotICAgICAgICAgICAgfHwgcGFja2FnZU5hbWVMZW4gPiAoZm9vdGVyU2l6ZSAtIGtQYWNrYWdlTmFtZU9mZnNldCkpIHsKLSAgICAgICAgQUxPR1coImJhZCBPYmJGaWxlIHBhY2thZ2UgbmFtZSBsZW5ndGggKDB4JTA0eng7IDB4JTA0enggcG9zc2libGUpXG4iLAotICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lTGVuLCBmb290ZXJTaXplIC0ga1BhY2thZ2VOYW1lT2Zmc2V0KTsKLSAgICAgICAgZnJlZShzY2FuQnVmKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNoYXIqIHBhY2thZ2VOYW1lID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NhbkJ1ZiArIGtQYWNrYWdlTmFtZU9mZnNldCk7Ci0gICAgbVBhY2thZ2VOYW1lID0gU3RyaW5nOChjb25zdF9jYXN0PGNoYXIqPihwYWNrYWdlTmFtZSksIHBhY2thZ2VOYW1lTGVuKTsKLQotICAgIGZyZWUoc2NhbkJ1Zik7Ci0KLSNpZmRlZiBERUJVRwotICAgIEFMT0dJKCJPYmIgc2NhbiBzdWNjZWVkZWQ6IHBhY2thZ2VOYW1lPSVzLCB2ZXJzaW9uPSVkXG4iLCBtUGFja2FnZU5hbWUuc3RyaW5nKCksIG1WZXJzaW9uKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT2JiRmlsZTo6d3JpdGVUbyhjb25zdCBjaGFyKiBmaWxlbmFtZSkKLXsKLSAgICBpbnQgZmQ7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0KLSAgICBmZCA9IDo6b3BlbihmaWxlbmFtZSwgT19XUk9OTFkpOwotICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIHN1Y2Nlc3MgPSB3cml0ZVRvKGZkKTsKLSAgICBjbG9zZShmZCk7Ci0KLW91dDoKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgQUxPR1coImZhaWxlZCB0byB3cml0ZSB0byAlczogJXNcbiIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwotICAgIH0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBPYmJGaWxlOjp3cml0ZVRvKGludCBmZCkKLXsKLSAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBsc2VlazY0KGZkLCAwLCBTRUVLX0VORCk7Ci0KLSAgICBpZiAobVBhY2thZ2VOYW1lLnNpemUoKSA9PSAwIHx8IG1WZXJzaW9uID09IC0xKSB7Ci0gICAgICAgIEFMT0dXKCJ0cmllZCB0byB3cml0ZSB1bmluaXRpYWxpemVkIE9iYkZpbGUgZGF0YVxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyIGludEJ1ZltzaXplb2YodWludDMyX3QpKzFdOwotICAgIG1lbXNldCgmaW50QnVmLCAwLCBzaXplb2YoaW50QnVmKSk7Ci0KLSAgICBwdXQ0TEUoaW50QnVmLCBrU2lnVmVyc2lvbik7Ci0gICAgaWYgKHdyaXRlKGZkLCAmaW50QnVmLCBzaXplb2YodWludDMyX3QpKSAhPSAoc3NpemVfdClzaXplb2YodWludDMyX3QpKSB7Ci0gICAgICAgIEFMT0dXKCJjb3VsZG4ndCB3cml0ZSBzaWduYXR1cmUgdmVyc2lvbjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdXQ0TEUoaW50QnVmLCBtVmVyc2lvbik7Ci0gICAgaWYgKHdyaXRlKGZkLCAmaW50QnVmLCBzaXplb2YodWludDMyX3QpKSAhPSAoc3NpemVfdClzaXplb2YodWludDMyX3QpKSB7Ci0gICAgICAgIEFMT0dXKCJjb3VsZG4ndCB3cml0ZSBwYWNrYWdlIHZlcnNpb25cbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHV0NExFKGludEJ1ZiwgbUZsYWdzKTsKLSAgICBpZiAod3JpdGUoZmQsICZpbnRCdWYsIHNpemVvZih1aW50MzJfdCkpICE9IChzc2l6ZV90KXNpemVvZih1aW50MzJfdCkpIHsKLSAgICAgICAgQUxPR1coImNvdWxkbid0IHdyaXRlIHBhY2thZ2UgdmVyc2lvblxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAod3JpdGUoZmQsIG1TYWx0LCBzaXplb2YobVNhbHQpKSAhPSAoc3NpemVfdClzaXplb2YobVNhbHQpKSB7Ci0gICAgICAgIEFMT0dXKCJjb3VsZG4ndCB3cml0ZSBzYWx0OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNpemVfdCBwYWNrYWdlTmFtZUxlbiA9IG1QYWNrYWdlTmFtZS5zaXplKCk7Ci0gICAgcHV0NExFKGludEJ1ZiwgcGFja2FnZU5hbWVMZW4pOwotICAgIGlmICh3cml0ZShmZCwgJmludEJ1Ziwgc2l6ZW9mKHVpbnQzMl90KSkgIT0gKHNzaXplX3Qpc2l6ZW9mKHVpbnQzMl90KSkgewotICAgICAgICBBTE9HVygiY291bGRuJ3Qgd3JpdGUgcGFja2FnZSBuYW1lIGxlbmd0aDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAod3JpdGUoZmQsIG1QYWNrYWdlTmFtZS5zdHJpbmcoKSwgcGFja2FnZU5hbWVMZW4pICE9IChzc2l6ZV90KXBhY2thZ2VOYW1lTGVuKSB7Ci0gICAgICAgIEFMT0dXKCJjb3VsZG4ndCB3cml0ZSBwYWNrYWdlIG5hbWU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHV0NExFKGludEJ1Ziwga1BhY2thZ2VOYW1lT2Zmc2V0ICsgcGFja2FnZU5hbWVMZW4pOwotICAgIGlmICh3cml0ZShmZCwgJmludEJ1Ziwgc2l6ZW9mKHVpbnQzMl90KSkgIT0gKHNzaXplX3Qpc2l6ZW9mKHVpbnQzMl90KSkgewotICAgICAgICBBTE9HVygiY291bGRuJ3Qgd3JpdGUgZm9vdGVyIHNpemU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHV0NExFKGludEJ1Ziwga1NpZ25hdHVyZSk7Ci0gICAgaWYgKHdyaXRlKGZkLCAmaW50QnVmLCBzaXplb2YodWludDMyX3QpKSAhPSAoc3NpemVfdClzaXplb2YodWludDMyX3QpKSB7Ci0gICAgICAgIEFMT0dXKCJjb3VsZG4ndCB3cml0ZSBmb290ZXIgbWFnaWMgc2lnbmF0dXJlOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE9iYkZpbGU6OnJlbW92ZUZyb20oY29uc3QgY2hhciogZmlsZW5hbWUpCi17Ci0gICAgaW50IGZkOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgZmQgPSA6Om9wZW4oZmlsZW5hbWUsIE9fUkRXUik7Ci0gICAgaWYgKGZkIDwgMCkgewotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgc3VjY2VzcyA9IHJlbW92ZUZyb20oZmQpOwotICAgIGNsb3NlKGZkKTsKLQotb3V0OgotICAgIGlmICghc3VjY2VzcykgewotICAgICAgICBBTE9HVygiZmFpbGVkIHRvIHJlbW92ZSBzaWduYXR1cmUgZnJvbSAlczogJXNcbiIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwotICAgIH0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBPYmJGaWxlOjpyZW1vdmVGcm9tKGludCBmZCkKLXsKLSAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlYWRGcm9tKGZkKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZnRydW5jYXRlKGZkLCBtRm9vdGVyU3RhcnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL2xpYnMvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuY3BwIGIvbGlicy9hbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYzM1NjMuLjAwMDAwMDAKLS0tIGEvbGlicy9hbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1Nzk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIlJlc291cmNlVHlwZSIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvQXRvbWljLmg+Ci0jaW5jbHVkZSA8dXRpbHMvQnl0ZU9yZGVyLmg+Ci0jaW5jbHVkZSA8dXRpbHMvRGVidWcuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmcxNi5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1lbW9yeS5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLSNpZm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMyX01BWCAoKGludDMyX3QpKDIxNDc0ODM2NDcpKQotI2VuZGlmCi0KLSNkZWZpbmUgU1RSSU5HX1BPT0xfTk9JU1koeCkgLy94Ci0jZGVmaW5lIFhNTF9OT0lTWSh4KSAvL3gKLSNkZWZpbmUgVEFCTEVfTk9JU1koeCkgLy94Ci0jZGVmaW5lIFRBQkxFX0dFVEVOVFJZKHgpIC8veAotI2RlZmluZSBUQUJMRV9TVVBFUl9OT0lTWSh4KSAvL3gKLSNkZWZpbmUgTE9BRF9UQUJMRV9OT0lTWSh4KSAvL3gKLSNkZWZpbmUgVEFCTEVfVEhFTUUoeCkgLy94Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotI2lmZGVmIEhBVkVfV0lOU09DSwotI3VuZGVmICBuaHRvbAotI3VuZGVmICBodG9ubAotCi0jaWZkZWYgSEFWRV9MSVRUTEVfRU5ESUFOCi0jZGVmaW5lIG50b2hsKHgpICAgICggKCh4KSA8PCAyNCkgfCAoKCh4KSA+PiAyNCkgJiAyNTUpIHwgKCgoeCkgPDwgOCkgJiAweGZmMDAwMCkgfCAoKCh4KSA+PiA4KSAmIDB4ZmYwMCkgKQotI2RlZmluZSBodG9ubCh4KSAgICBudG9obCh4KQotI2RlZmluZSBudG9ocyh4KSAgICAoICgoKHgpIDw8IDgpICYgMHhmZjAwKSB8ICgoKHgpID4+IDgpICYgMjU1KSApCi0jZGVmaW5lIGh0b25zKHgpICAgIG50b2hzKHgpCi0jZWxzZQotI2RlZmluZSBudG9obCh4KSAgICAoeCkKLSNkZWZpbmUgaHRvbmwoeCkgICAgKHgpCi0jZGVmaW5lIG50b2hzKHgpICAgICh4KQotI2RlZmluZSBodG9ucyh4KSAgICAoeCkKLSNlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgSURNQVBfTUFHSUMgICAgICAgICAweDcwNmQ2NDY5Ci0vLyBzaXplIG1lYXN1cmVkIGluIHNpemVvZih1aW50MzJfdCkKLSNkZWZpbmUgSURNQVBfSEVBREVSX1NJWkUgKFJlc1RhYmxlOjpJRE1BUF9IRUFERVJfU0laRV9CWVRFUyAvIHNpemVvZih1aW50MzJfdCkpCi0KLXN0YXRpYyB2b2lkIHByaW50VG9Mb2dGdW5jKHZvaWQqIGNvb2tpZSwgY29uc3QgY2hhciogdHh0KQotewotICAgIEFMT0dWKCIlcyIsIHR4dCk7Ci19Ci0KLS8vIFN0YW5kYXJkIEMgaXNzcGFjZSgpIGlzIG9ubHkgcmVxdWlyZWQgdG8gbG9vayBhdCB0aGUgbG93IGJ5dGUgb2YgaXRzIGlucHV0LCBzbwotLy8gcHJvZHVjZXMgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIFVURi0xNiBjaGFyYWN0ZXJzLiAgRm9yIHNhZmV0eSdzIHNha2UsIGFzc3VtZSB0aGF0Ci0vLyBhbnkgaGlnaC1ieXRlIFVURi0xNiBjb2RlIHBvaW50IGlzIG5vdCB3aGl0ZXNwYWNlLgotaW5saW5lIGludCBpc3NwYWNlMTYoY2hhcjE2X3QgYykgewotICAgIHJldHVybiAoYyA8IDB4MDA4MCAmJiBpc3NwYWNlKGMpKTsKLX0KLQotLy8gcmFuZ2UgY2hlY2tlZDsgZ3VhcmFudGVlZCB0byBOVUwtdGVybWluYXRlIHdpdGhpbiB0aGUgc3RhdGVkIG51bWJlciBvZiBhdmFpbGFibGUgc2xvdHMKLS8vIE5PVEU6IGlmIHRoaXMgdHJ1bmNhdGVzIHRoZSBkc3Qgc3RyaW5nIGR1ZSB0byBydW5uaW5nIG91dCBvZiBzcGFjZSwgbm8gYXR0ZW1wdCBpcwotLy8gbWFkZSB0byBhdm9pZCBzcGxpdHRpbmcgc3Vycm9nYXRlIHBhaXJzLgotc3RhdGljIHZvaWQgc3RyY3B5MTZfZHRvaCh1aW50MTZfdCogZHN0LCBjb25zdCB1aW50MTZfdCogc3JjLCBzaXplX3QgYXZhaWwpCi17Ci0gICAgdWludDE2X3QqIGxhc3QgPSBkc3QgKyBhdmFpbCAtIDE7Ci0gICAgd2hpbGUgKCpzcmMgJiYgKGRzdCA8IGxhc3QpKSB7Ci0gICAgICAgIGNoYXIxNl90IHMgPSBkdG9ocygqc3JjKTsKLSAgICAgICAgKmRzdCsrID0gczsKLSAgICAgICAgc3JjKys7Ci0gICAgfQotICAgICpkc3QgPSAwOwotfQotCi1zdGF0aWMgc3RhdHVzX3QgdmFsaWRhdGVfY2h1bmsoY29uc3QgUmVzQ2h1bmtfaGVhZGVyKiBjaHVuaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWluU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhRW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgY29uc3QgdWludDE2X3QgaGVhZGVyU2l6ZSA9IGR0b2hzKGNodW5rLT5oZWFkZXJTaXplKTsKLSAgICBjb25zdCB1aW50MzJfdCBzaXplID0gZHRvaGwoY2h1bmstPnNpemUpOwotCi0gICAgaWYgKGhlYWRlclNpemUgPj0gbWluU2l6ZSkgewotICAgICAgICBpZiAoaGVhZGVyU2l6ZSA8PSBzaXplKSB7Ci0gICAgICAgICAgICBpZiAoKChoZWFkZXJTaXplfHNpemUpJjB4MykgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmICgoc3NpemVfdClzaXplIDw9IChkYXRhRW5kLSgoY29uc3QgdWludDhfdCopY2h1bmspKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFMT0dXKCIlcyBkYXRhIHNpemUgJXAgZXh0ZW5kcyBiZXlvbmQgcmVzb3VyY2UgZW5kICVwLiIsCi0gICAgICAgICAgICAgICAgICAgICBuYW1lLCAodm9pZCopc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoZGF0YUVuZC0oKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSkpOwotICAgICAgICAgICAgICAgIHJldHVybiBCQURfVFlQRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFMT0dXKCIlcyBzaXplIDB4JXggb3IgaGVhZGVyU2l6ZSAweCV4IGlzIG5vdCBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5LiIsCi0gICAgICAgICAgICAgICAgIG5hbWUsIChpbnQpc2l6ZSwgKGludCloZWFkZXJTaXplKTsKLSAgICAgICAgICAgIHJldHVybiBCQURfVFlQRTsKLSAgICAgICAgfQotICAgICAgICBBTE9HVygiJXMgc2l6ZSAlcCBpcyBzbWFsbGVyIHRoYW4gaGVhZGVyIHNpemUgJXAuIiwKLSAgICAgICAgICAgICBuYW1lLCAodm9pZCopc2l6ZSwgKHZvaWQqKShpbnQpaGVhZGVyU2l6ZSk7Ci0gICAgICAgIHJldHVybiBCQURfVFlQRTsKLSAgICB9Ci0gICAgQUxPR1coIiVzIGhlYWRlciBzaXplICVwIGlzIHRvbyBzbWFsbC4iLAotICAgICAgICAgbmFtZSwgKHZvaWQqKShpbnQpaGVhZGVyU2l6ZSk7Ci0gICAgcmV0dXJuIEJBRF9UWVBFOwotfQotCi1pbmxpbmUgdm9pZCBSZXNfdmFsdWU6OmNvcHlGcm9tX2R0b2goY29uc3QgUmVzX3ZhbHVlJiBzcmMpCi17Ci0gICAgc2l6ZSA9IGR0b2hzKHNyYy5zaXplKTsKLSAgICByZXMwID0gc3JjLnJlczA7Ci0gICAgZGF0YVR5cGUgPSBzcmMuZGF0YVR5cGU7Ci0gICAgZGF0YSA9IGR0b2hsKHNyYy5kYXRhKTsKLX0KLQotdm9pZCBSZXNfcG5nXzlwYXRjaDo6ZGV2aWNlVG9GaWxlKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVhEaXZzOyBpKyspIHsKLSAgICAgICAgeERpdnNbaV0gPSBodG9ubCh4RGl2c1tpXSk7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtWURpdnM7IGkrKykgewotICAgICAgICB5RGl2c1tpXSA9IGh0b25sKHlEaXZzW2ldKTsKLSAgICB9Ci0gICAgcGFkZGluZ0xlZnQgPSBodG9ubChwYWRkaW5nTGVmdCk7Ci0gICAgcGFkZGluZ1JpZ2h0ID0gaHRvbmwocGFkZGluZ1JpZ2h0KTsKLSAgICBwYWRkaW5nVG9wID0gaHRvbmwocGFkZGluZ1RvcCk7Ci0gICAgcGFkZGluZ0JvdHRvbSA9IGh0b25sKHBhZGRpbmdCb3R0b20pOwotICAgIGZvciAoaW50IGk9MDsgaTxudW1Db2xvcnM7IGkrKykgewotICAgICAgICBjb2xvcnNbaV0gPSBodG9ubChjb2xvcnNbaV0pOwotICAgIH0KLX0KLQotdm9pZCBSZXNfcG5nXzlwYXRjaDo6ZmlsZVRvRGV2aWNlKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVhEaXZzOyBpKyspIHsKLSAgICAgICAgeERpdnNbaV0gPSBudG9obCh4RGl2c1tpXSk7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtWURpdnM7IGkrKykgewotICAgICAgICB5RGl2c1tpXSA9IG50b2hsKHlEaXZzW2ldKTsKLSAgICB9Ci0gICAgcGFkZGluZ0xlZnQgPSBudG9obChwYWRkaW5nTGVmdCk7Ci0gICAgcGFkZGluZ1JpZ2h0ID0gbnRvaGwocGFkZGluZ1JpZ2h0KTsKLSAgICBwYWRkaW5nVG9wID0gbnRvaGwocGFkZGluZ1RvcCk7Ci0gICAgcGFkZGluZ0JvdHRvbSA9IG50b2hsKHBhZGRpbmdCb3R0b20pOwotICAgIGZvciAoaW50IGk9MDsgaTxudW1Db2xvcnM7IGkrKykgewotICAgICAgICBjb2xvcnNbaV0gPSBudG9obChjb2xvcnNbaV0pOwotICAgIH0KLX0KLQotc2l6ZV90IFJlc19wbmdfOXBhdGNoOjpzZXJpYWxpemVkU2l6ZSgpCi17Ci0gICAgLy8gVGhlIHNpemUgb2YgdGhpcyBzdHJ1Y3QgaXMgMzIgYnl0ZXMgb24gdGhlIDMyLWJpdCB0YXJnZXQgc3lzdGVtCi0gICAgLy8gNCAqIGludDhfdAotICAgIC8vIDQgKiBpbnQzMl90Ci0gICAgLy8gMyAqIHBvaW50ZXIKLSAgICByZXR1cm4gMzIKLSAgICAgICAgICAgICsgbnVtWERpdnMgKiBzaXplb2YoaW50MzJfdCkKLSAgICAgICAgICAgICsgbnVtWURpdnMgKiBzaXplb2YoaW50MzJfdCkKLSAgICAgICAgICAgICsgbnVtQ29sb3JzICogc2l6ZW9mKHVpbnQzMl90KTsKLX0KLQotdm9pZCogUmVzX3BuZ185cGF0Y2g6OnNlcmlhbGl6ZSgpCi17Ci0gICAgLy8gVXNlIGNhbGxvYyBzaW5jZSB3ZSdyZSBnb2luZyB0byBsZWF2ZSBhIGZldyBob2xlcyBpbiB0aGUgZGF0YQotICAgIC8vIGFuZCB3YW50IHRoaXMgdG8gcnVuIGNsZWFubHkgdW5kZXIgdmFsZ3JpbmQKLSAgICB2b2lkKiBuZXdEYXRhID0gY2FsbG9jKDEsIHNlcmlhbGl6ZWRTaXplKCkpOwotICAgIHNlcmlhbGl6ZShuZXdEYXRhKTsKLSAgICByZXR1cm4gbmV3RGF0YTsKLX0KLQotdm9pZCBSZXNfcG5nXzlwYXRjaDo6c2VyaWFsaXplKHZvaWQgKiBvdXREYXRhKQotewotICAgIGNoYXIqIGRhdGEgPSAoY2hhciopIG91dERhdGE7Ci0gICAgbWVtbW92ZShkYXRhLCAmd2FzRGVzZXJpYWxpemVkLCA0KTsgICAgIC8vIGNvcHkgIHdhc0Rlc2VyaWFsaXplZCwgbnVtWERpdnMsIG51bVlEaXZzLCBudW1Db2xvcnMKLSAgICBtZW1tb3ZlKGRhdGEgKyAxMiwgJnBhZGRpbmdMZWZ0LCAxNik7ICAgLy8gY29weSBwYWRkaW5nWFhYWAotICAgIGRhdGEgKz0gMzI7Ci0KLSAgICBtZW1tb3ZlKGRhdGEsIHRoaXMtPnhEaXZzLCBudW1YRGl2cyAqIHNpemVvZihpbnQzMl90KSk7Ci0gICAgZGF0YSArPSAgbnVtWERpdnMgKiBzaXplb2YoaW50MzJfdCk7Ci0gICAgbWVtbW92ZShkYXRhLCB0aGlzLT55RGl2cywgbnVtWURpdnMgKiBzaXplb2YoaW50MzJfdCkpOwotICAgIGRhdGEgKz0gIG51bVlEaXZzICogc2l6ZW9mKGludDMyX3QpOwotICAgIG1lbW1vdmUoZGF0YSwgdGhpcy0+Y29sb3JzLCBudW1Db2xvcnMgKiBzaXplb2YodWludDMyX3QpKTsKLX0KLQotc3RhdGljIHZvaWQgZGVzZXJpYWxpemVJbnRlcm5hbChjb25zdCB2b2lkKiBpbkRhdGEsIFJlc19wbmdfOXBhdGNoKiBvdXREYXRhKSB7Ci0gICAgY2hhciogcGF0Y2ggPSAoY2hhciopIGluRGF0YTsKLSAgICBpZiAoaW5EYXRhICE9IG91dERhdGEpIHsKLSAgICAgICAgbWVtbW92ZSgmb3V0RGF0YS0+d2FzRGVzZXJpYWxpemVkLCBwYXRjaCwgNCk7ICAgICAvLyBjb3B5ICB3YXNEZXNlcmlhbGl6ZWQsIG51bVhEaXZzLCBudW1ZRGl2cywgbnVtQ29sb3JzCi0gICAgICAgIG1lbW1vdmUoJm91dERhdGEtPnBhZGRpbmdMZWZ0LCBwYXRjaCArIDEyLCA0KTsgICAgIC8vIGNvcHkgIHdhc0Rlc2VyaWFsaXplZCwgbnVtWERpdnMsIG51bVlEaXZzLCBudW1Db2xvcnMKLSAgICB9Ci0gICAgb3V0RGF0YS0+d2FzRGVzZXJpYWxpemVkID0gdHJ1ZTsKLSAgICBjaGFyKiBkYXRhID0gKGNoYXIqKW91dERhdGE7Ci0gICAgZGF0YSArPSAgc2l6ZW9mKFJlc19wbmdfOXBhdGNoKTsKLSAgICBvdXREYXRhLT54RGl2cyA9IChpbnQzMl90KikgZGF0YTsKLSAgICBkYXRhICs9ICBvdXREYXRhLT5udW1YRGl2cyAqIHNpemVvZihpbnQzMl90KTsKLSAgICBvdXREYXRhLT55RGl2cyA9IChpbnQzMl90KikgZGF0YTsKLSAgICBkYXRhICs9ICBvdXREYXRhLT5udW1ZRGl2cyAqIHNpemVvZihpbnQzMl90KTsKLSAgICBvdXREYXRhLT5jb2xvcnMgPSAodWludDMyX3QqKSBkYXRhOwotfQotCi1zdGF0aWMgYm9vbCBhc3NlcnRJZG1hcEhlYWRlcihjb25zdCB1aW50MzJfdCogbWFwLCBzaXplX3Qgc2l6ZUJ5dGVzKQotewotICAgIGlmIChzaXplQnl0ZXMgPCBSZXNUYWJsZTo6SURNQVBfSEVBREVSX1NJWkVfQllURVMpIHsKLSAgICAgICAgQUxPR1coImlkbWFwIGFzc2VydGlvbiBmYWlsZWQ6IHNpemU9JWQgYnl0ZXNcbiIsIChpbnQpc2l6ZUJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoKm1hcCAhPSBodG9kbChJRE1BUF9NQUdJQykpIHsgLy8gaHRvZGw6IG1hcCBkYXRhIGV4cGVjdGVkIHRvIGJlIGluIGNvcnJlY3QgZW5kaWFuZXNzCi0gICAgICAgIEFMT0dXKCJpZG1hcCBhc3NlcnRpb24gZmFpbGVkOiBpbnZhbGlkIG1hZ2ljIGZvdW5kIChpcyAweCUwOHgsIGV4cGVjdGVkIDB4JTA4eClcbiIsCi0gICAgICAgICAgICAgKm1hcCwgaHRvZGwoSURNQVBfTUFHSUMpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHN0YXR1c190IGlkbWFwTG9va3VwKGNvbnN0IHVpbnQzMl90KiBtYXAsIHNpemVfdCBzaXplQnl0ZXMsIHVpbnQzMl90IGtleSwgdWludDMyX3QqIG91dFZhbHVlKQotewotICAgIC8vIHNlZSBSRUFETUUgZm9yIGRldGFpbHMgb24gdGhlIGZvcm1hdCBvZiBtYXAKLSAgICBpZiAoIWFzc2VydElkbWFwSGVhZGVyKG1hcCwgc2l6ZUJ5dGVzKSkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgbWFwID0gbWFwICsgSURNQVBfSEVBREVSX1NJWkU7IC8vIHNraXAgYWhlYWQgdG8gZGF0YSBzZWdtZW50Ci0gICAgLy8gc2l6ZSBvZiBkYXRhIGJsb2NrLCBpbiB1aW50MzJfdAotICAgIGNvbnN0IHNpemVfdCBzaXplID0gKHNpemVCeXRlcyAtIFJlc1RhYmxlOjpJRE1BUF9IRUFERVJfU0laRV9CWVRFUykgLyBzaXplb2YodWludDMyX3QpOwotICAgIGNvbnN0IHVpbnQzMl90IHR5cGUgPSBSZXNfR0VUVFlQRShrZXkpICsgMTsgLy8gYWRkIG9uZSwgaWRtYXAgc3RvcmVzICJwdWJsaWMiIHR5cGUgaWQKLSAgICBjb25zdCB1aW50MzJfdCBlbnRyeSA9IFJlc19HRVRFTlRSWShrZXkpOwotICAgIGNvbnN0IHVpbnQzMl90IHR5cGVDb3VudCA9ICptYXA7Ci0KLSAgICBpZiAodHlwZSA+IHR5cGVDb3VudCkgewotICAgICAgICBBTE9HVygiUmVzb3VyY2UgSUQgbWFwOiB0eXBlPSVkIGV4Y2VlZHMgbnVtYmVyIG9mIHR5cGVzPSVkXG4iLCB0eXBlLCB0eXBlQ291bnQpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgaWYgKHR5cGVDb3VudCA+IHNpemUpIHsKLSAgICAgICAgQUxPR1coIlJlc291cmNlIElEIG1hcDogbnVtYmVyIG9mIHR5cGVzPSVkIGV4Y2VlZHMgc2l6ZSBvZiBtYXA9JWRcbiIsIHR5cGVDb3VudCwgKGludClzaXplKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIGNvbnN0IHVpbnQzMl90IHR5cGVPZmZzZXQgPSBtYXBbdHlwZV07Ci0gICAgaWYgKHR5cGVPZmZzZXQgPT0gMCkgewotICAgICAgICAqb3V0VmFsdWUgPSAwOwotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotICAgIGlmICh0eXBlT2Zmc2V0ICsgMSA+IHNpemUpIHsKLSAgICAgICAgQUxPR1coIlJlc291cmNlIElEIG1hcDogdHlwZSBvZmZzZXQ9JWQgZXhjZWVkcyByZWFzb25hYmxlIHZhbHVlLCBzaXplIG9mIG1hcD0lZFxuIiwKLSAgICAgICAgICAgICB0eXBlT2Zmc2V0LCAoaW50KXNpemUpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgY29uc3QgdWludDMyX3QgZW50cnlDb3VudCA9IG1hcFt0eXBlT2Zmc2V0XTsKLSAgICBjb25zdCB1aW50MzJfdCBlbnRyeU9mZnNldCA9IG1hcFt0eXBlT2Zmc2V0ICsgMV07Ci0gICAgaWYgKGVudHJ5Q291bnQgPT0gMCB8fCBlbnRyeSA8IGVudHJ5T2Zmc2V0IHx8IGVudHJ5IC0gZW50cnlPZmZzZXQgPiBlbnRyeUNvdW50IC0gMSkgewotICAgICAgICAqb3V0VmFsdWUgPSAwOwotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotICAgIGNvbnN0IHVpbnQzMl90IGluZGV4ID0gdHlwZU9mZnNldCArIDIgKyBlbnRyeSAtIGVudHJ5T2Zmc2V0OwotICAgIGlmIChpbmRleCA+IHNpemUpIHsKLSAgICAgICAgQUxPR1coIlJlc291cmNlIElEIG1hcDogZW50cnkgaW5kZXg9JWQgZXhjZWVkcyBzaXplIG9mIG1hcD0lZFxuIiwgaW5kZXgsIChpbnQpc2l6ZSk7Ci0gICAgICAgICpvdXRWYWx1ZSA9IDA7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0gICAgKm91dFZhbHVlID0gbWFwW2luZGV4XTsKLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdGljIHN0YXR1c190IGdldElkbWFwUGFja2FnZUlkKGNvbnN0IHVpbnQzMl90KiBtYXAsIHNpemVfdCBtYXBTaXplLCB1aW50MzJfdCAqb3V0SWQpCi17Ci0gICAgaWYgKCFhc3NlcnRJZG1hcEhlYWRlcihtYXAsIG1hcFNpemUpKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICBjb25zdCB1aW50MzJfdCogcCA9IG1hcCArIElETUFQX0hFQURFUl9TSVpFICsgMTsKLSAgICB3aGlsZSAoKnAgPT0gMCkgewotICAgICAgICArK3A7Ci0gICAgfQotICAgICpvdXRJZCA9IChtYXBbKnAgKyBJRE1BUF9IRUFERVJfU0laRSArIDJdID4+IDI0KSAmIDB4MDAwMDAwZmY7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1SZXNfcG5nXzlwYXRjaCogUmVzX3BuZ185cGF0Y2g6OmRlc2VyaWFsaXplKGNvbnN0IHZvaWQqIGluRGF0YSkKLXsKLSAgICBpZiAoc2l6ZW9mKHZvaWQqKSAhPSBzaXplb2YoaW50MzJfdCkpIHsKLSAgICAgICAgQUxPR0UoIkNhbm5vdCBkZXNlcmlhbGl6ZSBvbiBub24gMzItYml0IHN5c3RlbVxuIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBkZXNlcmlhbGl6ZUludGVybmFsKGluRGF0YSwgKFJlc19wbmdfOXBhdGNoKikgaW5EYXRhKTsKLSAgICByZXR1cm4gKFJlc19wbmdfOXBhdGNoKikgaW5EYXRhOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlc1N0cmluZ1Bvb2w6OlJlc1N0cmluZ1Bvb2woKQotICAgIDogbUVycm9yKE5PX0lOSVQpLCBtT3duZWREYXRhKE5VTEwpLCBtSGVhZGVyKE5VTEwpLCBtQ2FjaGUoTlVMTCkKLXsKLX0KLQotUmVzU3RyaW5nUG9vbDo6UmVzU3RyaW5nUG9vbChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgYm9vbCBjb3B5RGF0YSkKLSAgICA6IG1FcnJvcihOT19JTklUKSwgbU93bmVkRGF0YShOVUxMKSwgbUhlYWRlcihOVUxMKSwgbUNhY2hlKE5VTEwpCi17Ci0gICAgc2V0VG8oZGF0YSwgc2l6ZSwgY29weURhdGEpOwotfQotCi1SZXNTdHJpbmdQb29sOjp+UmVzU3RyaW5nUG9vbCgpCi17Ci0gICAgdW5pbml0KCk7Ci19Ci0KLXN0YXR1c190IFJlc1N0cmluZ1Bvb2w6OnNldFRvKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCBib29sIGNvcHlEYXRhKQotewotICAgIGlmICghZGF0YSB8fCAhc2l6ZSkgewotICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgfQotCi0gICAgdW5pbml0KCk7Ci0KLSAgICBjb25zdCBib29sIG5vdERldmljZUVuZGlhbiA9IGh0b2RzKDB4ZjApICE9IDB4ZjA7Ci0KLSAgICBpZiAoY29weURhdGEgfHwgbm90RGV2aWNlRW5kaWFuKSB7Ci0gICAgICAgIG1Pd25lZERhdGEgPSBtYWxsb2Moc2l6ZSk7Ci0gICAgICAgIGlmIChtT3duZWREYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiAobUVycm9yPU5PX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KG1Pd25lZERhdGEsIGRhdGEsIHNpemUpOwotICAgICAgICBkYXRhID0gbU93bmVkRGF0YTsKLSAgICB9Ci0KLSAgICBtSGVhZGVyID0gKGNvbnN0IFJlc1N0cmluZ1Bvb2xfaGVhZGVyKilkYXRhOwotCi0gICAgaWYgKG5vdERldmljZUVuZGlhbikgewotICAgICAgICBSZXNTdHJpbmdQb29sX2hlYWRlciogaCA9IGNvbnN0X2Nhc3Q8UmVzU3RyaW5nUG9vbF9oZWFkZXIqPihtSGVhZGVyKTsKLSAgICAgICAgaC0+aGVhZGVyLmhlYWRlclNpemUgPSBkdG9ocyhtSGVhZGVyLT5oZWFkZXIuaGVhZGVyU2l6ZSk7Ci0gICAgICAgIGgtPmhlYWRlci50eXBlID0gZHRvaHMobUhlYWRlci0+aGVhZGVyLnR5cGUpOwotICAgICAgICBoLT5oZWFkZXIuc2l6ZSA9IGR0b2hsKG1IZWFkZXItPmhlYWRlci5zaXplKTsKLSAgICAgICAgaC0+c3RyaW5nQ291bnQgPSBkdG9obChtSGVhZGVyLT5zdHJpbmdDb3VudCk7Ci0gICAgICAgIGgtPnN0eWxlQ291bnQgPSBkdG9obChtSGVhZGVyLT5zdHlsZUNvdW50KTsKLSAgICAgICAgaC0+ZmxhZ3MgPSBkdG9obChtSGVhZGVyLT5mbGFncyk7Ci0gICAgICAgIGgtPnN0cmluZ3NTdGFydCA9IGR0b2hsKG1IZWFkZXItPnN0cmluZ3NTdGFydCk7Ci0gICAgICAgIGgtPnN0eWxlc1N0YXJ0ID0gZHRvaGwobUhlYWRlci0+c3R5bGVzU3RhcnQpOwotICAgIH0KLQotICAgIGlmIChtSGVhZGVyLT5oZWFkZXIuaGVhZGVyU2l6ZSA+IG1IZWFkZXItPmhlYWRlci5zaXplCi0gICAgICAgICAgICB8fCBtSGVhZGVyLT5oZWFkZXIuc2l6ZSA+IHNpemUpIHsKLSAgICAgICAgQUxPR1coIkJhZCBzdHJpbmcgYmxvY2s6IGhlYWRlciBzaXplICVkIG9yIHRvdGFsIHNpemUgJWQgaXMgbGFyZ2VyIHRoYW4gZGF0YSBzaXplICVkXG4iLAotICAgICAgICAgICAgICAgIChpbnQpbUhlYWRlci0+aGVhZGVyLmhlYWRlclNpemUsIChpbnQpbUhlYWRlci0+aGVhZGVyLnNpemUsIChpbnQpc2l6ZSk7Ci0gICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICB9Ci0gICAgbVNpemUgPSBtSGVhZGVyLT5oZWFkZXIuc2l6ZTsKLSAgICBtRW50cmllcyA9IChjb25zdCB1aW50MzJfdCopCi0gICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKWRhdGEpK21IZWFkZXItPmhlYWRlci5oZWFkZXJTaXplKTsKLQotICAgIGlmIChtSGVhZGVyLT5zdHJpbmdDb3VudCA+IDApIHsKLSAgICAgICAgaWYgKChtSGVhZGVyLT5zdHJpbmdDb3VudCpzaXplb2YodWludDMyX3QpIDwgbUhlYWRlci0+c3RyaW5nQ291bnQpICAvLyB1aW50MzIgb3ZlcmZsb3c/Ci0gICAgICAgICAgICB8fCAobUhlYWRlci0+aGVhZGVyLmhlYWRlclNpemUrKG1IZWFkZXItPnN0cmluZ0NvdW50KnNpemVvZih1aW50MzJfdCkpKQotICAgICAgICAgICAgICAgID4gc2l6ZSkgewotICAgICAgICAgICAgQUxPR1coIkJhZCBzdHJpbmcgYmxvY2s6IGVudHJ5IG9mICVkIGl0ZW1zIGV4dGVuZHMgcGFzdCBkYXRhIHNpemUgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpKG1IZWFkZXItPmhlYWRlci5oZWFkZXJTaXplKyhtSGVhZGVyLT5zdHJpbmdDb3VudCpzaXplb2YodWludDMyX3QpKSksCi0gICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplX3QgY2hhclNpemU7Ci0gICAgICAgIGlmIChtSGVhZGVyLT5mbGFncyZSZXNTdHJpbmdQb29sX2hlYWRlcjo6VVRGOF9GTEFHKSB7Ci0gICAgICAgICAgICBjaGFyU2l6ZSA9IHNpemVvZih1aW50OF90KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNoYXJTaXplID0gc2l6ZW9mKGNoYXIxNl90KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TdHJpbmdzID0gKGNvbnN0IHZvaWQqKQotICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopZGF0YSkrbUhlYWRlci0+c3RyaW5nc1N0YXJ0KTsKLSAgICAgICAgaWYgKG1IZWFkZXItPnN0cmluZ3NTdGFydCA+PSAobUhlYWRlci0+aGVhZGVyLnNpemUtc2l6ZW9mKHVpbnQxNl90KSkpIHsKLSAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBzdHJpbmcgcG9vbCBzdGFydHMgYXQgJWQsIGFmdGVyIHRvdGFsIHNpemUgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpbUhlYWRlci0+c3RyaW5nc1N0YXJ0LCAoaW50KW1IZWFkZXItPmhlYWRlci5zaXplKTsKLSAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobUhlYWRlci0+c3R5bGVDb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICBtU3RyaW5nUG9vbFNpemUgPQotICAgICAgICAgICAgICAgIChtSGVhZGVyLT5oZWFkZXIuc2l6ZS1tSGVhZGVyLT5zdHJpbmdzU3RhcnQpL2NoYXJTaXplOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gY2hlY2sgaW52YXJpYW50OiBzdHlsZXMgc3RhcnRzIGJlZm9yZSBlbmQgb2YgZGF0YQotICAgICAgICAgICAgaWYgKG1IZWFkZXItPnN0eWxlc1N0YXJ0ID49IChtSGVhZGVyLT5oZWFkZXIuc2l6ZS1zaXplb2YodWludDE2X3QpKSkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJCYWQgc3R5bGUgYmxvY2s6IHN0eWxlIGJsb2NrIHN0YXJ0cyBhdCAlZCBwYXN0IGRhdGEgc2l6ZSBvZiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKGludCltSGVhZGVyLT5zdHlsZXNTdGFydCwgKGludCltSGVhZGVyLT5oZWFkZXIuc2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gY2hlY2sgaW52YXJpYW50OiBzdHlsZXMgZm9sbG93IHRoZSBzdHJpbmdzCi0gICAgICAgICAgICBpZiAobUhlYWRlci0+c3R5bGVzU3RhcnQgPD0gbUhlYWRlci0+c3RyaW5nc1N0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIkJhZCBzdHlsZSBibG9jazogc3R5bGUgYmxvY2sgc3RhcnRzIGF0ICVkLCBiZWZvcmUgc3RyaW5ncyBhdCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKGludCltSGVhZGVyLT5zdHlsZXNTdGFydCwgKGludCltSGVhZGVyLT5zdHJpbmdzU3RhcnQpOwotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1TdHJpbmdQb29sU2l6ZSA9Ci0gICAgICAgICAgICAgICAgKG1IZWFkZXItPnN0eWxlc1N0YXJ0LW1IZWFkZXItPnN0cmluZ3NTdGFydCkvY2hhclNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayBpbnZhcmlhbnQ6IHN0cmluZ0NvdW50ID4gMCByZXF1aXJlcyBhIHN0cmluZyBwb29sIHRvIGV4aXN0Ci0gICAgICAgIGlmIChtU3RyaW5nUG9vbFNpemUgPT0gMCkgewotICAgICAgICAgICAgQUxPR1coIkJhZCBzdHJpbmcgYmxvY2s6IHN0cmluZ0NvdW50IGlzICVkIGJ1dCBwb29sIHNpemUgaXMgMFxuIiwgKGludCltSGVhZGVyLT5zdHJpbmdDb3VudCk7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobm90RGV2aWNlRW5kaWFuKSB7Ci0gICAgICAgICAgICBzaXplX3QgaTsKLSAgICAgICAgICAgIHVpbnQzMl90KiBlID0gY29uc3RfY2FzdDx1aW50MzJfdCo+KG1FbnRyaWVzKTsKLSAgICAgICAgICAgIGZvciAoaT0wOyBpPG1IZWFkZXItPnN0cmluZ0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBlW2ldID0gZHRvaGwobUVudHJpZXNbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCEobUhlYWRlci0+ZmxhZ3MmUmVzU3RyaW5nUG9vbF9oZWFkZXI6OlVURjhfRkxBRykpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogc3RyaW5ncyA9IChjb25zdCBjaGFyMTZfdCopbVN0cmluZ3M7Ci0gICAgICAgICAgICAgICAgY2hhcjE2X3QqIHMgPSBjb25zdF9jYXN0PGNoYXIxNl90Kj4oc3RyaW5ncyk7Ci0gICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8bVN0cmluZ1Bvb2xTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc1tpXSA9IGR0b2hzKHN0cmluZ3NbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICgobUhlYWRlci0+ZmxhZ3MmUmVzU3RyaW5nUG9vbF9oZWFkZXI6OlVURjhfRkxBRyAmJgotICAgICAgICAgICAgICAgICgodWludDhfdCopbVN0cmluZ3MpW21TdHJpbmdQb29sU2l6ZS0xXSAhPSAwKSB8fAotICAgICAgICAgICAgICAgICghbUhlYWRlci0+ZmxhZ3MmUmVzU3RyaW5nUG9vbF9oZWFkZXI6OlVURjhfRkxBRyAmJgotICAgICAgICAgICAgICAgICgoY2hhcjE2X3QqKW1TdHJpbmdzKVttU3RyaW5nUG9vbFNpemUtMV0gIT0gMCkpIHsKLSAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBsYXN0IHN0cmluZyBpcyBub3QgMC10ZXJtaW5hdGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1TdHJpbmdzID0gTlVMTDsKLSAgICAgICAgbVN0cmluZ1Bvb2xTaXplID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobUhlYWRlci0+c3R5bGVDb3VudCA+IDApIHsKLSAgICAgICAgbUVudHJ5U3R5bGVzID0gbUVudHJpZXMgKyBtSGVhZGVyLT5zdHJpbmdDb3VudDsKLSAgICAgICAgLy8gaW52YXJpYW50OiBpbnRlZ2VyIG92ZXJmbG93IGluIGNhbGN1bGF0aW5nIG1FbnRyeVN0eWxlcwotICAgICAgICBpZiAobUVudHJ5U3R5bGVzIDwgbUVudHJpZXMpIHsKLSAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBpbnRlZ2VyIG92ZXJmbG93IGZpbmRpbmcgc3R5bGVzXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoKGNvbnN0IHVpbnQ4X3QqKW1FbnRyeVN0eWxlcy0oY29uc3QgdWludDhfdCopbUhlYWRlcikgPiAoaW50KXNpemUpIHsKLSAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBlbnRyeSBvZiAlZCBzdHlsZXMgZXh0ZW5kcyBwYXN0IGRhdGEgc2l6ZSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKGludCkoKGNvbnN0IHVpbnQ4X3QqKW1FbnRyeVN0eWxlcy0oY29uc3QgdWludDhfdCopbUhlYWRlciksCi0gICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVN0eWxlcyA9IChjb25zdCB1aW50MzJfdCopCi0gICAgICAgICAgICAoKChjb25zdCB1aW50OF90KilkYXRhKSttSGVhZGVyLT5zdHlsZXNTdGFydCk7Ci0gICAgICAgIGlmIChtSGVhZGVyLT5zdHlsZXNTdGFydCA+PSBtSGVhZGVyLT5oZWFkZXIuc2l6ZSkgewotICAgICAgICAgICAgQUxPR1coIkJhZCBzdHJpbmcgYmxvY2s6IHN0eWxlIHBvb2wgc3RhcnRzICVkLCBhZnRlciB0b3RhbCBzaXplICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAoaW50KW1IZWFkZXItPnN0eWxlc1N0YXJ0LCAoaW50KW1IZWFkZXItPmhlYWRlci5zaXplKTsKLSAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgfQotICAgICAgICBtU3R5bGVQb29sU2l6ZSA9Ci0gICAgICAgICAgICAobUhlYWRlci0+aGVhZGVyLnNpemUtbUhlYWRlci0+c3R5bGVzU3RhcnQpL3NpemVvZih1aW50MzJfdCk7Ci0KLSAgICAgICAgaWYgKG5vdERldmljZUVuZGlhbikgewotICAgICAgICAgICAgc2l6ZV90IGk7Ci0gICAgICAgICAgICB1aW50MzJfdCogZSA9IGNvbnN0X2Nhc3Q8dWludDMyX3QqPihtRW50cnlTdHlsZXMpOwotICAgICAgICAgICAgZm9yIChpPTA7IGk8bUhlYWRlci0+c3R5bGVDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZVtpXSA9IGR0b2hsKG1FbnRyeVN0eWxlc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1aW50MzJfdCogcyA9IGNvbnN0X2Nhc3Q8dWludDMyX3QqPihtU3R5bGVzKTsKLSAgICAgICAgICAgIGZvciAoaT0wOyBpPG1TdHlsZVBvb2xTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBzW2ldID0gZHRvaGwobVN0eWxlc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBSZXNTdHJpbmdQb29sX3NwYW4gZW5kU3BhbiA9IHsKLSAgICAgICAgICAgIHsgaHRvZGwoUmVzU3RyaW5nUG9vbF9zcGFuOjpFTkQpIH0sCi0gICAgICAgICAgICBodG9kbChSZXNTdHJpbmdQb29sX3NwYW46OkVORCksIGh0b2RsKFJlc1N0cmluZ1Bvb2xfc3Bhbjo6RU5EKQotICAgICAgICB9OwotICAgICAgICBpZiAobWVtY21wKCZtU3R5bGVzW21TdHlsZVBvb2xTaXplLShzaXplb2YoZW5kU3Bhbikvc2l6ZW9mKHVpbnQzMl90KSldLAotICAgICAgICAgICAgICAgICAgICZlbmRTcGFuLCBzaXplb2YoZW5kU3BhbikpICE9IDApIHsKLSAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBsYXN0IHN0eWxlIGlzIG5vdCAweEZGRkZGRkZGLXRlcm1pbmF0ZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbUVudHJ5U3R5bGVzID0gTlVMTDsKLSAgICAgICAgbVN0eWxlcyA9IE5VTEw7Ci0gICAgICAgIG1TdHlsZVBvb2xTaXplID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gKG1FcnJvcj1OT19FUlJPUik7Ci19Ci0KLXN0YXR1c190IFJlc1N0cmluZ1Bvb2w6OmdldEVycm9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUVycm9yOwotfQotCi12b2lkIFJlc1N0cmluZ1Bvb2w6OnVuaW5pdCgpCi17Ci0gICAgbUVycm9yID0gTk9fSU5JVDsKLSAgICBpZiAobUhlYWRlciAhPSBOVUxMICYmIG1DYWNoZSAhPSBOVUxMKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgbUhlYWRlci0+c3RyaW5nQ291bnQ7IHgrKykgewotICAgICAgICAgICAgaWYgKG1DYWNoZVt4XSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZnJlZShtQ2FjaGVbeF0pOwotICAgICAgICAgICAgICAgIG1DYWNoZVt4XSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZnJlZShtQ2FjaGUpOwotICAgICAgICBtQ2FjaGUgPSBOVUxMOwotICAgIH0KLSAgICBpZiAobU93bmVkRGF0YSkgewotICAgICAgICBmcmVlKG1Pd25lZERhdGEpOwotICAgICAgICBtT3duZWREYXRhID0gTlVMTDsKLSAgICB9Ci19Ci0KLS8qKgotICogU3RyaW5ncyBpbiBVVEYtMTYgZm9ybWF0IGhhdmUgbGVuZ3RoIGluZGljYXRlZCBieSBhIGxlbmd0aCBlbmNvZGVkIGluIHRoZQotICogc3RvcmVkIGRhdGEuIEl0IGlzIGVpdGhlciAxIG9yIDIgY2hhcmFjdGVycyBvZiBsZW5ndGggZGF0YS4gVGhpcyBhbGxvd3MgYQotICogbWF4aW11bSBsZW5ndGggb2YgMHg3RkZGRkZGICgyMTQ3NDgzNjQ3IGJ5dGVzKSwgYnV0IGlmIHlvdSdyZSBzdG9yaW5nIHRoYXQKLSAqIG11Y2ggZGF0YSBpbiBhIHN0cmluZywgeW91J3JlIGFidXNpbmcgdGhlbS4KLSAqCi0gKiBJZiB0aGUgaGlnaCBiaXQgaXMgc2V0LCB0aGVuIHRoZXJlIGFyZSB0d28gY2hhcmFjdGVycyBvciA0IGJ5dGVzIG9mIGxlbmd0aAotICogZGF0YSBlbmNvZGVkLiBJbiB0aGF0IGNhc2UsIGRyb3AgdGhlIGhpZ2ggYml0IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kCi0gKiBhZGQgaXQgdG9nZXRoZXIgd2l0aCB0aGUgbmV4dCBjaGFyYWN0ZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1kZWNvZGVMZW5ndGgoY29uc3QgY2hhcjE2X3QqKiBzdHIpCi17Ci0gICAgc2l6ZV90IGxlbiA9ICoqc3RyOwotICAgIGlmICgobGVuICYgMHg4MDAwKSAhPSAwKSB7Ci0gICAgICAgICgqc3RyKSsrOwotICAgICAgICBsZW4gPSAoKGxlbiAmIDB4N0ZGRikgPDwgMTYpIHwgKipzdHI7Ci0gICAgfQotICAgICgqc3RyKSsrOwotICAgIHJldHVybiBsZW47Ci19Ci0KLS8qKgotICogU3RyaW5ncyBpbiBVVEYtOCBmb3JtYXQgaGF2ZSBsZW5ndGggaW5kaWNhdGVkIGJ5IGEgbGVuZ3RoIGVuY29kZWQgaW4gdGhlCi0gKiBzdG9yZWQgZGF0YS4gSXQgaXMgZWl0aGVyIDEgb3IgMiBjaGFyYWN0ZXJzIG9mIGxlbmd0aCBkYXRhLiBUaGlzIGFsbG93cyBhCi0gKiBtYXhpbXVtIGxlbmd0aCBvZiAweDdGRkYgKDMyNzY3IGJ5dGVzKSwgYnV0IHlvdSBzaG91bGQgY29uc2lkZXIgc3RvcmluZwotICogdGV4dCBpbiBhbm90aGVyIHdheSBpZiB5b3UncmUgdXNpbmcgdGhhdCBtdWNoIGRhdGEgaW4gYSBzaW5nbGUgc3RyaW5nLgotICoKLSAqIElmIHRoZSBoaWdoIGJpdCBpcyBzZXQsIHRoZW4gdGhlcmUgYXJlIHR3byBjaGFyYWN0ZXJzIG9yIDIgYnl0ZXMgb2YgbGVuZ3RoCi0gKiBkYXRhIGVuY29kZWQuIEluIHRoYXQgY2FzZSwgZHJvcCB0aGUgaGlnaCBiaXQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQKLSAqIGFkZCBpdCB0b2dldGhlciB3aXRoIHRoZSBuZXh0IGNoYXJhY3Rlci4KLSAqLwotc3RhdGljIGlubGluZSBzaXplX3QKLWRlY29kZUxlbmd0aChjb25zdCB1aW50OF90Kiogc3RyKQotewotICAgIHNpemVfdCBsZW4gPSAqKnN0cjsKLSAgICBpZiAoKGxlbiAmIDB4ODApICE9IDApIHsKLSAgICAgICAgKCpzdHIpKys7Ci0gICAgICAgIGxlbiA9ICgobGVuICYgMHg3RikgPDwgOCkgfCAqKnN0cjsKLSAgICB9Ci0gICAgKCpzdHIpKys7Ci0gICAgcmV0dXJuIGxlbjsKLX0KLQotY29uc3QgdWludDE2X3QqIFJlc1N0cmluZ1Bvb2w6OnN0cmluZ0F0KHNpemVfdCBpZHgsIHNpemVfdCogdTE2bGVuKSBjb25zdAotewotICAgIGlmIChtRXJyb3IgPT0gTk9fRVJST1IgJiYgaWR4IDwgbUhlYWRlci0+c3RyaW5nQ291bnQpIHsKLSAgICAgICAgY29uc3QgYm9vbCBpc1VURjggPSAobUhlYWRlci0+ZmxhZ3MmUmVzU3RyaW5nUG9vbF9oZWFkZXI6OlVURjhfRkxBRykgIT0gMDsKLSAgICAgICAgY29uc3QgdWludDMyX3Qgb2ZmID0gbUVudHJpZXNbaWR4XS8oaXNVVEY4P3NpemVvZihjaGFyKTpzaXplb2YoY2hhcjE2X3QpKTsKLSAgICAgICAgaWYgKG9mZiA8IChtU3RyaW5nUG9vbFNpemUtMSkpIHsKLSAgICAgICAgICAgIGlmICghaXNVVEY4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHN0cmluZ3MgPSAoY2hhcjE2X3QqKW1TdHJpbmdzOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBzdHIgPSBzdHJpbmdzK29mZjsKLQotICAgICAgICAgICAgICAgICp1MTZsZW4gPSBkZWNvZGVMZW5ndGgoJnN0cik7Ci0gICAgICAgICAgICAgICAgaWYgKCh1aW50MzJfdCkoc3RyKyp1MTZsZW4tc3RyaW5ncykgPCBtU3RyaW5nUG9vbFNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBTE9HVygiQmFkIHN0cmluZyBibG9jazogc3RyaW5nICMlZCBleHRlbmRzIHRvICVkLCBwYXN0IGVuZCBhdCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWlkeCwgKGludCkoc3RyKyp1MTZsZW4tc3RyaW5ncyksIChpbnQpbVN0cmluZ1Bvb2xTaXplKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHN0cmluZ3MgPSAodWludDhfdCopbVN0cmluZ3M7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdThzdHIgPSBzdHJpbmdzK29mZjsKLQotICAgICAgICAgICAgICAgICp1MTZsZW4gPSBkZWNvZGVMZW5ndGgoJnU4c3RyKTsKLSAgICAgICAgICAgICAgICBzaXplX3QgdThsZW4gPSBkZWNvZGVMZW5ndGgoJnU4c3RyKTsKLQotICAgICAgICAgICAgICAgIC8vIGVuY0xlbiBtdXN0IGJlIGxlc3MgdGhhbiAweDdGRkYgZHVlIHRvIGVuY29kaW5nLgotICAgICAgICAgICAgICAgIGlmICgodWludDMyX3QpKHU4c3RyK3U4bGVuLXN0cmluZ3MpIDwgbVN0cmluZ1Bvb2xTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIEF1dG9NdXRleCBsb2NrKG1EZWNvZGVMb2NrKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobUNhY2hlID09IE5VTEwpIHsKLSNpZm5kZWYgSEFWRV9BTkRST0lEX09TCi0gICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiQ1JFQVRJTkcgU1RSSU5HIENBQ0hFIE9GICVkIGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUhlYWRlci0+c3RyaW5nQ291bnQqc2l6ZW9mKGNoYXIxNl90KiopKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gYmUgaW4gdGhpcyBjYXNlIHdoZW4gYWN0dWFsbHkgcnVubmluZyBBbmRyb2lkLgotICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1coIkNSRUFUSU5HIFNUUklORyBDQUNIRSBPRiAlZCBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1IZWFkZXItPnN0cmluZ0NvdW50KnNpemVvZihjaGFyMTZfdCoqKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIG1DYWNoZSA9IChjaGFyMTZfdCoqKWNhbGxvYyhtSGVhZGVyLT5zdHJpbmdDb3VudCwgc2l6ZW9mKGNoYXIxNl90KiopKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQ2FjaGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJObyBtZW1vcnkgdHJ5aW5nIHRvIGFsbG9jYXRlIGRlY29kZSBjYWNoZSB0YWJsZSBvZiAlZCBieXRlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKG1IZWFkZXItPnN0cmluZ0NvdW50KnNpemVvZihjaGFyMTZfdCoqKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1DYWNoZVtpZHhdICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtQ2FjaGVbaWR4XTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHNzaXplX3QgYWN0dWFsTGVuID0gdXRmOF90b191dGYxNl9sZW5ndGgodThzdHIsIHU4bGVuKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjdHVhbExlbiA8IDAgfHwgKHNpemVfdClhY3R1YWxMZW4gIT0gKnUxNmxlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1coIkJhZCBzdHJpbmcgYmxvY2s6IHN0cmluZyAjJWxsZCBkZWNvZGVkIGxlbmd0aCBpcyBub3QgY29ycmVjdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlbGxkIHZzICVsbHVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpaWR4LCAobG9uZyBsb25nKWFjdHVhbExlbiwgKGxvbmcgbG9uZykqdTE2bGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgY2hhcjE2X3QgKnUxNnN0ciA9IChjaGFyMTZfdCAqKWNhbGxvYygqdTE2bGVuKzEsIHNpemVvZihjaGFyMTZfdCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXUxNnN0cikgewotICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1coIk5vIG1lbW9yeSB3aGVuIHRyeWluZyB0byBhbGxvY2F0ZSBkZWNvZGUgY2FjaGUgZm9yIHN0cmluZyAjJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpaWR4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koIkNhY2hpbmcgVVRGOCBzdHJpbmc6ICVzIiwgdThzdHIpKTsKLSAgICAgICAgICAgICAgICAgICAgdXRmOF90b191dGYxNih1OHN0ciwgdThsZW4sIHUxNnN0cik7Ci0gICAgICAgICAgICAgICAgICAgIG1DYWNoZVtpZHhdID0gdTE2c3RyOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdTE2c3RyOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBzdHJpbmcgIyVsbGQgZXh0ZW5kcyB0byAlbGxkLCBwYXN0IGVuZCBhdCAlbGxkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpaWR4LCAobG9uZyBsb25nKSh1OHN0cit1OGxlbi1zdHJpbmdzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKW1TdHJpbmdQb29sU2l6ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR1coIkJhZCBzdHJpbmcgYmxvY2s6IHN0cmluZyAjJWQgZW50cnkgaXMgYXQgJWQsIHBhc3QgZW5kIGF0ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAoaW50KWlkeCwgKGludCkob2ZmKnNpemVvZih1aW50MTZfdCkpLAotICAgICAgICAgICAgICAgICAgICAoaW50KShtU3RyaW5nUG9vbFNpemUqc2l6ZW9mKHVpbnQxNl90KSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi1jb25zdCBjaGFyKiBSZXNTdHJpbmdQb29sOjpzdHJpbmc4QXQoc2l6ZV90IGlkeCwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0Ci17Ci0gICAgaWYgKG1FcnJvciA9PSBOT19FUlJPUiAmJiBpZHggPCBtSGVhZGVyLT5zdHJpbmdDb3VudCkgewotICAgICAgICBpZiAoKG1IZWFkZXItPmZsYWdzJlJlc1N0cmluZ1Bvb2xfaGVhZGVyOjpVVEY4X0ZMQUcpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IG9mZiA9IG1FbnRyaWVzW2lkeF0vc2l6ZW9mKGNoYXIpOwotICAgICAgICBpZiAob2ZmIDwgKG1TdHJpbmdQb29sU2l6ZS0xKSkgewotICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3RyaW5ncyA9ICh1aW50OF90KiltU3RyaW5nczsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHN0ciA9IHN0cmluZ3Mrb2ZmOwotICAgICAgICAgICAgKm91dExlbiA9IGRlY29kZUxlbmd0aCgmc3RyKTsKLSAgICAgICAgICAgIHNpemVfdCBlbmNMZW4gPSBkZWNvZGVMZW5ndGgoJnN0cik7Ci0gICAgICAgICAgICBpZiAoKHVpbnQzMl90KShzdHIrZW5jTGVuLXN0cmluZ3MpIDwgbVN0cmluZ1Bvb2xTaXplKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChjb25zdCBjaGFyKilzdHI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBzdHJpbmcgIyVkIGV4dGVuZHMgdG8gJWQsIHBhc3QgZW5kIGF0ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgKGludClpZHgsIChpbnQpKHN0citlbmNMZW4tc3RyaW5ncyksIChpbnQpbVN0cmluZ1Bvb2xTaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBzdHJpbmcgIyVkIGVudHJ5IGlzIGF0ICVkLCBwYXN0IGVuZCBhdCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKGludClpZHgsIChpbnQpKG9mZipzaXplb2YodWludDE2X3QpKSwKLSAgICAgICAgICAgICAgICAgICAgKGludCkobVN0cmluZ1Bvb2xTaXplKnNpemVvZih1aW50MTZfdCkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotY29uc3QgU3RyaW5nOCBSZXNTdHJpbmdQb29sOjpzdHJpbmc4T2JqZWN0QXQoc2l6ZV90IGlkeCkgY29uc3QKLXsKLSAgICBzaXplX3QgbGVuOwotICAgIGNvbnN0IGNoYXIgKnN0ciA9IChjb25zdCBjaGFyKilzdHJpbmc4QXQoaWR4LCAmbGVuKTsKLSAgICBpZiAoc3RyICE9IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZzgoc3RyKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZzgoc3RyaW5nQXQoaWR4LCAmbGVuKSk7Ci19Ci0KLWNvbnN0IFJlc1N0cmluZ1Bvb2xfc3BhbiogUmVzU3RyaW5nUG9vbDo6c3R5bGVBdChjb25zdCBSZXNTdHJpbmdQb29sX3JlZiYgcmVmKSBjb25zdAotewotICAgIHJldHVybiBzdHlsZUF0KHJlZi5pbmRleCk7Ci19Ci0KLWNvbnN0IFJlc1N0cmluZ1Bvb2xfc3BhbiogUmVzU3RyaW5nUG9vbDo6c3R5bGVBdChzaXplX3QgaWR4KSBjb25zdAotewotICAgIGlmIChtRXJyb3IgPT0gTk9fRVJST1IgJiYgaWR4IDwgbUhlYWRlci0+c3R5bGVDb3VudCkgewotICAgICAgICBjb25zdCB1aW50MzJfdCBvZmYgPSAobUVudHJ5U3R5bGVzW2lkeF0vc2l6ZW9mKHVpbnQzMl90KSk7Ci0gICAgICAgIGlmIChvZmYgPCBtU3R5bGVQb29sU2l6ZSkgewotICAgICAgICAgICAgcmV0dXJuIChjb25zdCBSZXNTdHJpbmdQb29sX3NwYW4qKShtU3R5bGVzK29mZik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVygiQmFkIHN0cmluZyBibG9jazogc3R5bGUgIyVkIGVudHJ5IGlzIGF0ICVkLCBwYXN0IGVuZCBhdCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKGludClpZHgsIChpbnQpKG9mZipzaXplb2YodWludDMyX3QpKSwKLSAgICAgICAgICAgICAgICAgICAgKGludCkobVN0eWxlUG9vbFNpemUqc2l6ZW9mKHVpbnQzMl90KSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi1zc2l6ZV90IFJlc1N0cmluZ1Bvb2w6OmluZGV4T2ZTdHJpbmcoY29uc3QgY2hhcjE2X3QqIHN0ciwgc2l6ZV90IHN0ckxlbikgY29uc3QKLXsKLSAgICBpZiAobUVycm9yICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBtRXJyb3I7Ci0gICAgfQotCi0gICAgc2l6ZV90IGxlbjsKLQotICAgIGlmICgobUhlYWRlci0+ZmxhZ3MmUmVzU3RyaW5nUG9vbF9oZWFkZXI6OlVURjhfRkxBRykgIT0gMCkgewotICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiaW5kZXhPZlN0cmluZyBVVEYtODogJXMiLCBTdHJpbmc4KHN0ciwgc3RyTGVuKS5zdHJpbmcoKSkpOwotCi0gICAgICAgIC8vIFRoZSBzdHJpbmcgcG9vbCBjb250YWlucyBVVEYgOCBzdHJpbmdzOyB3ZSBkb24ndCB3YW50IHRvIGNhdXNlCi0gICAgICAgIC8vIHRlbXBvcmFyeSBVVEYtMTYgc3RyaW5ncyB0byBiZSBjcmVhdGVkIGFzIHdlIHNlYXJjaC4KLSAgICAgICAgaWYgKG1IZWFkZXItPmZsYWdzJlJlc1N0cmluZ1Bvb2xfaGVhZGVyOjpTT1JURURfRkxBRykgewotICAgICAgICAgICAgLy8gRG8gYSBiaW5hcnkgc2VhcmNoIGZvciB0aGUgc3RyaW5nLi4uICB0aGlzIGlzIGEgbGl0dGxlIHRyaWNreSwKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHN0cmluZ3MgYXJlIHNvcnRlZCB3aXRoIHN0cnpjbXAxNigpLiAgU28gdG8gbWF0Y2gKLSAgICAgICAgICAgIC8vIHRoZSBvcmRlcmluZywgd2UgbmVlZCB0byBjb252ZXJ0IHN0cmluZ3MgaW4gdGhlIHBvb2wgdG8gVVRGLTE2LgotICAgICAgICAgICAgLy8gQnV0IHdlIGRvbid0IHdhbnQgdG8gaGl0IHRoZSBjYWNoZSwgc28gaW5zdGVhZCB3ZSB3aWxsIGhhdmUgYQotICAgICAgICAgICAgLy8gbG9jYWwgdGVtcG9yYXJ5IGFsbG9jYXRpb24gZm9yIHRoZSBjb252ZXJzaW9ucy4KLSAgICAgICAgICAgIGNoYXIxNl90KiBjb252QnVmZmVyID0gKGNoYXIxNl90KiltYWxsb2Moc3RyTGVuKzQpOwotICAgICAgICAgICAgc3NpemVfdCBsID0gMDsKLSAgICAgICAgICAgIHNzaXplX3QgaCA9IG1IZWFkZXItPnN0cmluZ0NvdW50LTE7Ci0KLSAgICAgICAgICAgIHNzaXplX3QgbWlkOwotICAgICAgICAgICAgd2hpbGUgKGwgPD0gaCkgewotICAgICAgICAgICAgICAgIG1pZCA9IGwgKyAoaCAtIGwpLzI7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogcyA9IChjb25zdCB1aW50OF90KilzdHJpbmc4QXQobWlkLCAmbGVuKTsKLSAgICAgICAgICAgICAgICBpbnQgYzsKLSAgICAgICAgICAgICAgICBpZiAocyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIxNl90KiBlbmQgPSB1dGY4X3RvX3V0ZjE2X24ocywgbGVuLCBjb252QnVmZmVyLCBzdHJMZW4rMyk7Ci0gICAgICAgICAgICAgICAgICAgICplbmQgPSAwOwotICAgICAgICAgICAgICAgICAgICBjID0gc3RyemNtcDE2KGNvbnZCdWZmZXIsIGVuZC1jb252QnVmZmVyLCBzdHIsIHN0ckxlbik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYyA9IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiTG9va2luZyBhdCAlcywgY21wPSVkLCBsL21pZC9oPSVkLyVkLyVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciopcywgYywgKGludClsLCAoaW50KW1pZCwgKGludCloKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiTUFUQ0ghIikpOwotICAgICAgICAgICAgICAgICAgICBmcmVlKGNvbnZCdWZmZXIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWlkOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbCA9IG1pZCArIDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaCA9IG1pZCAtIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJlZShjb252QnVmZmVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEl0IGlzIHVudXN1YWwgdG8gZ2V0IHRoZSBJRCBmcm9tIGFuIHVuc29ydGVkIHN0cmluZyBibG9jay4uLgotICAgICAgICAgICAgLy8gbW9zdCBvZnRlbiB0aGlzIGhhcHBlbnMgYmVjYXVzZSB3ZSB3YW50IHRvIGdldCBJRHMgZm9yIHN0eWxlCi0gICAgICAgICAgICAvLyBzcGFuIHRhZ3M7IHNpbmNlIHRob3NlIGFsd2F5cyBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCi0gICAgICAgICAgICAvLyBibG9jaywgc3RhcnQgc2VhcmNoaW5nIGF0IHRoZSBiYWNrLgotICAgICAgICAgICAgU3RyaW5nOCBzdHI4KHN0ciwgc3RyTGVuKTsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzdHI4TGVuID0gc3RyOC5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpPW1IZWFkZXItPnN0cmluZ0NvdW50LTE7IGk+PTA7IGktLSkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHMgPSBzdHJpbmc4QXQoaSwgJmxlbik7Ci0gICAgICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koIkxvb2tpbmcgYXQgJXMsIGk9JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocykuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkpKTsKLSAgICAgICAgICAgICAgICBpZiAocyAmJiBzdHI4TGVuID09IGxlbiAmJiBtZW1jbXAocywgc3RyOC5zdHJpbmcoKSwgc3RyOExlbikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiTUFUQ0ghIikpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCJpbmRleE9mU3RyaW5nIFVURi0xNjogJXMiLCBTdHJpbmc4KHN0ciwgc3RyTGVuKS5zdHJpbmcoKSkpOwotCi0gICAgICAgIGlmIChtSGVhZGVyLT5mbGFncyZSZXNTdHJpbmdQb29sX2hlYWRlcjo6U09SVEVEX0ZMQUcpIHsKLSAgICAgICAgICAgIC8vIERvIGEgYmluYXJ5IHNlYXJjaCBmb3IgdGhlIHN0cmluZy4uLgotICAgICAgICAgICAgc3NpemVfdCBsID0gMDsKLSAgICAgICAgICAgIHNzaXplX3QgaCA9IG1IZWFkZXItPnN0cmluZ0NvdW50LTE7Ci0KLSAgICAgICAgICAgIHNzaXplX3QgbWlkOwotICAgICAgICAgICAgd2hpbGUgKGwgPD0gaCkgewotICAgICAgICAgICAgICAgIG1pZCA9IGwgKyAoaCAtIGwpLzI7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHMgPSBzdHJpbmdBdChtaWQsICZsZW4pOwotICAgICAgICAgICAgICAgIGludCBjID0gcyA/IHN0cnpjbXAxNihzLCBsZW4sIHN0ciwgc3RyTGVuKSA6IC0xOwotICAgICAgICAgICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCJMb29raW5nIGF0ICVzLCBjbXA9JWQsIGwvbWlkL2g9JWQvJWQvJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocykuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMsIChpbnQpbCwgKGludCltaWQsIChpbnQpaCkpOwotICAgICAgICAgICAgICAgIGlmIChjID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koIk1BVENIISIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGwgPSBtaWQgKyAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGggPSBtaWQgLSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEl0IGlzIHVudXN1YWwgdG8gZ2V0IHRoZSBJRCBmcm9tIGFuIHVuc29ydGVkIHN0cmluZyBibG9jay4uLgotICAgICAgICAgICAgLy8gbW9zdCBvZnRlbiB0aGlzIGhhcHBlbnMgYmVjYXVzZSB3ZSB3YW50IHRvIGdldCBJRHMgZm9yIHN0eWxlCi0gICAgICAgICAgICAvLyBzcGFuIHRhZ3M7IHNpbmNlIHRob3NlIGFsd2F5cyBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCi0gICAgICAgICAgICAvLyBibG9jaywgc3RhcnQgc2VhcmNoaW5nIGF0IHRoZSBiYWNrLgotICAgICAgICAgICAgZm9yIChpbnQgaT1tSGVhZGVyLT5zdHJpbmdDb3VudC0xOyBpPj0wOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogcyA9IHN0cmluZ0F0KGksICZsZW4pOwotICAgICAgICAgICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCJMb29raW5nIGF0ICVzLCBpPSVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHMpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHMgJiYgc3RyTGVuID09IGxlbiAmJiBzdHJ6Y21wMTYocywgbGVuLCBzdHIsIHN0ckxlbikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiTUFUQ0ghIikpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7Ci19Ci0KLXNpemVfdCBSZXNTdHJpbmdQb29sOjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1FcnJvciA9PSBOT19FUlJPUikgPyBtSGVhZGVyLT5zdHJpbmdDb3VudCA6IDA7Ci19Ci0KLXNpemVfdCBSZXNTdHJpbmdQb29sOjpzdHlsZUNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1FcnJvciA9PSBOT19FUlJPUikgPyBtSGVhZGVyLT5zdHlsZUNvdW50IDogMDsKLX0KLQotc2l6ZV90IFJlc1N0cmluZ1Bvb2w6OmJ5dGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1FcnJvciA9PSBOT19FUlJPUikgPyBtSGVhZGVyLT5oZWFkZXIuc2l6ZSA6IDA7Ci19Ci0KLWJvb2wgUmVzU3RyaW5nUG9vbDo6aXNTb3J0ZWQoKSBjb25zdAotewotICAgIHJldHVybiAobUhlYWRlci0+ZmxhZ3MmUmVzU3RyaW5nUG9vbF9oZWFkZXI6OlNPUlRFRF9GTEFHKSE9MDsKLX0KLQotYm9vbCBSZXNTdHJpbmdQb29sOjppc1VURjgoKSBjb25zdAotewotICAgIHJldHVybiAobUhlYWRlci0+ZmxhZ3MmUmVzU3RyaW5nUG9vbF9oZWFkZXI6OlVURjhfRkxBRykhPTA7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVzWE1MUGFyc2VyOjpSZXNYTUxQYXJzZXIoY29uc3QgUmVzWE1MVHJlZSYgdHJlZSkKLSAgICA6IG1UcmVlKHRyZWUpLCBtRXZlbnRDb2RlKEJBRF9ET0NVTUVOVCkKLXsKLX0KLQotdm9pZCBSZXNYTUxQYXJzZXI6OnJlc3RhcnQoKQotewotICAgIG1DdXJOb2RlID0gTlVMTDsKLSAgICBtRXZlbnRDb2RlID0gbVRyZWUubUVycm9yID09IE5PX0VSUk9SID8gU1RBUlRfRE9DVU1FTlQgOiBCQURfRE9DVU1FTlQ7Ci19Ci1jb25zdCBSZXNTdHJpbmdQb29sJiBSZXNYTUxQYXJzZXI6OmdldFN0cmluZ3MoKSBjb25zdAotewotICAgIHJldHVybiBtVHJlZS5tU3RyaW5nczsKLX0KLQotUmVzWE1MUGFyc2VyOjpldmVudF9jb2RlX3QgUmVzWE1MUGFyc2VyOjpnZXRFdmVudFR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtRXZlbnRDb2RlOwotfQotCi1SZXNYTUxQYXJzZXI6OmV2ZW50X2NvZGVfdCBSZXNYTUxQYXJzZXI6Om5leHQoKQotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX0RPQ1VNRU5UKSB7Ci0gICAgICAgIG1DdXJOb2RlID0gbVRyZWUubVJvb3ROb2RlOwotICAgICAgICBtQ3VyRXh0ID0gbVRyZWUubVJvb3RFeHQ7Ci0gICAgICAgIHJldHVybiAobUV2ZW50Q29kZT1tVHJlZS5tUm9vdENvZGUpOwotICAgIH0gZWxzZSBpZiAobUV2ZW50Q29kZSA+PSBGSVJTVF9DSFVOS19DT0RFKSB7Ci0gICAgICAgIHJldHVybiBuZXh0Tm9kZSgpOwotICAgIH0KLSAgICByZXR1cm4gbUV2ZW50Q29kZTsKLX0KLQotaW50MzJfdCBSZXNYTUxQYXJzZXI6OmdldENvbW1lbnRJRCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1DdXJOb2RlICE9IE5VTEwgPyBkdG9obChtQ3VyTm9kZS0+Y29tbWVudC5pbmRleCkgOiAtMTsKLX0KLQotY29uc3QgdWludDE2X3QqIFJlc1hNTFBhcnNlcjo6Z2V0Q29tbWVudChzaXplX3QqIG91dExlbikgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0Q29tbWVudElEKCk7Ci0gICAgcmV0dXJuIGlkID49IDAgPyBtVHJlZS5tU3RyaW5ncy5zdHJpbmdBdChpZCwgb3V0TGVuKSA6IE5VTEw7Ci19Ci0KLXVpbnQzMl90IFJlc1hNTFBhcnNlcjo6Z2V0TGluZU51bWJlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1DdXJOb2RlICE9IE5VTEwgPyBkdG9obChtQ3VyTm9kZS0+bGluZU51bWJlcikgOiAtMTsKLX0KLQotaW50MzJfdCBSZXNYTUxQYXJzZXI6OmdldFRleHRJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1FdmVudENvZGUgPT0gVEVYVCkgewotICAgICAgICByZXR1cm4gZHRvaGwoKChjb25zdCBSZXNYTUxUcmVlX2NkYXRhRXh0KiltQ3VyRXh0KS0+ZGF0YS5pbmRleCk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotY29uc3QgdWludDE2X3QqIFJlc1hNTFBhcnNlcjo6Z2V0VGV4dChzaXplX3QqIG91dExlbikgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0VGV4dElEKCk7Ci0gICAgcmV0dXJuIGlkID49IDAgPyBtVHJlZS5tU3RyaW5ncy5zdHJpbmdBdChpZCwgb3V0TGVuKSA6IE5VTEw7Ci19Ci0KLXNzaXplX3QgUmVzWE1MUGFyc2VyOjpnZXRUZXh0VmFsdWUoUmVzX3ZhbHVlKiBvdXRWYWx1ZSkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBURVhUKSB7Ci0gICAgICAgIG91dFZhbHVlLT5jb3B5RnJvbV9kdG9oKCgoY29uc3QgUmVzWE1MVHJlZV9jZGF0YUV4dCopbUN1ckV4dCktPnR5cGVkRGF0YSk7Ci0gICAgICAgIHJldHVybiBzaXplb2YoUmVzX3ZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIEJBRF9UWVBFOwotfQotCi1pbnQzMl90IFJlc1hNTFBhcnNlcjo6Z2V0TmFtZXNwYWNlUHJlZml4SUQoKSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX05BTUVTUEFDRSB8fCBtRXZlbnRDb2RlID09IEVORF9OQU1FU1BBQ0UpIHsKLSAgICAgICAgcmV0dXJuIGR0b2hsKCgoY29uc3QgUmVzWE1MVHJlZV9uYW1lc3BhY2VFeHQqKW1DdXJFeHQpLT5wcmVmaXguaW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWNvbnN0IHVpbnQxNl90KiBSZXNYTUxQYXJzZXI6OmdldE5hbWVzcGFjZVByZWZpeChzaXplX3QqIG91dExlbikgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0TmFtZXNwYWNlUHJlZml4SUQoKTsKLSAgICAvL3ByaW50ZigicHJlZml4PSVkICBldmVudD0lcFxuIiwgaWQsIG1FdmVudENvZGUpOwotICAgIHJldHVybiBpZCA+PSAwID8gbVRyZWUubVN0cmluZ3Muc3RyaW5nQXQoaWQsIG91dExlbikgOiBOVUxMOwotfQotCi1pbnQzMl90IFJlc1hNTFBhcnNlcjo6Z2V0TmFtZXNwYWNlVXJpSUQoKSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX05BTUVTUEFDRSB8fCBtRXZlbnRDb2RlID09IEVORF9OQU1FU1BBQ0UpIHsKLSAgICAgICAgcmV0dXJuIGR0b2hsKCgoY29uc3QgUmVzWE1MVHJlZV9uYW1lc3BhY2VFeHQqKW1DdXJFeHQpLT51cmkuaW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWNvbnN0IHVpbnQxNl90KiBSZXNYTUxQYXJzZXI6OmdldE5hbWVzcGFjZVVyaShzaXplX3QqIG91dExlbikgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0TmFtZXNwYWNlVXJpSUQoKTsKLSAgICAvL3ByaW50ZigidXJpPSVkICBldmVudD0lcFxuIiwgaWQsIG1FdmVudENvZGUpOwotICAgIHJldHVybiBpZCA+PSAwID8gbVRyZWUubVN0cmluZ3Muc3RyaW5nQXQoaWQsIG91dExlbikgOiBOVUxMOwotfQotCi1pbnQzMl90IFJlc1hNTFBhcnNlcjo6Z2V0RWxlbWVudE5hbWVzcGFjZUlEKCkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9UQUcpIHsKLSAgICAgICAgcmV0dXJuIGR0b2hsKCgoY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiltQ3VyRXh0KS0+bnMuaW5kZXgpOwotICAgIH0KLSAgICBpZiAobUV2ZW50Q29kZSA9PSBFTkRfVEFHKSB7Ci0gICAgICAgIHJldHVybiBkdG9obCgoKGNvbnN0IFJlc1hNTFRyZWVfZW5kRWxlbWVudEV4dCopbUN1ckV4dCktPm5zLmluZGV4KTsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1jb25zdCB1aW50MTZfdCogUmVzWE1MUGFyc2VyOjpnZXRFbGVtZW50TmFtZXNwYWNlKHNpemVfdCogb3V0TGVuKSBjb25zdAotewotICAgIGludDMyX3QgaWQgPSBnZXRFbGVtZW50TmFtZXNwYWNlSUQoKTsKLSAgICByZXR1cm4gaWQgPj0gMCA/IG1UcmVlLm1TdHJpbmdzLnN0cmluZ0F0KGlkLCBvdXRMZW4pIDogTlVMTDsKLX0KLQotaW50MzJfdCBSZXNYTUxQYXJzZXI6OmdldEVsZW1lbnROYW1lSUQoKSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX1RBRykgewotICAgICAgICByZXR1cm4gZHRvaGwoKChjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqKW1DdXJFeHQpLT5uYW1lLmluZGV4KTsKLSAgICB9Ci0gICAgaWYgKG1FdmVudENvZGUgPT0gRU5EX1RBRykgewotICAgICAgICByZXR1cm4gZHRvaGwoKChjb25zdCBSZXNYTUxUcmVlX2VuZEVsZW1lbnRFeHQqKW1DdXJFeHQpLT5uYW1lLmluZGV4KTsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1jb25zdCB1aW50MTZfdCogUmVzWE1MUGFyc2VyOjpnZXRFbGVtZW50TmFtZShzaXplX3QqIG91dExlbikgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0RWxlbWVudE5hbWVJRCgpOwotICAgIHJldHVybiBpZCA+PSAwID8gbVRyZWUubVN0cmluZ3Muc3RyaW5nQXQoaWQsIG91dExlbikgOiBOVUxMOwotfQotCi1zaXplX3QgUmVzWE1MUGFyc2VyOjpnZXRBdHRyaWJ1dGVDb3VudCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1FdmVudENvZGUgPT0gU1RBUlRfVEFHKSB7Ci0gICAgICAgIHJldHVybiBkdG9ocygoKGNvbnN0IFJlc1hNTFRyZWVfYXR0ckV4dCopbUN1ckV4dCktPmF0dHJpYnV0ZUNvdW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludDMyX3QgUmVzWE1MUGFyc2VyOjpnZXRBdHRyaWJ1dGVOYW1lc3BhY2VJRChzaXplX3QgaWR4KSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX1RBRykgewotICAgICAgICBjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqIHRhZyA9IChjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqKW1DdXJFeHQ7Ci0gICAgICAgIGlmIChpZHggPCBkdG9ocyh0YWctPmF0dHJpYnV0ZUNvdW50KSkgewotICAgICAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9hdHRyaWJ1dGUqIGF0dHIgPSAoY29uc3QgUmVzWE1MVHJlZV9hdHRyaWJ1dGUqKQotICAgICAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKXRhZykKLSAgICAgICAgICAgICAgICAgKyBkdG9ocyh0YWctPmF0dHJpYnV0ZVN0YXJ0KQotICAgICAgICAgICAgICAgICArIChkdG9ocyh0YWctPmF0dHJpYnV0ZVNpemUpKmlkeCkpOwotICAgICAgICAgICAgcmV0dXJuIGR0b2hsKGF0dHItPm5zLmluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gLTI7Ci19Ci0KLWNvbnN0IHVpbnQxNl90KiBSZXNYTUxQYXJzZXI6OmdldEF0dHJpYnV0ZU5hbWVzcGFjZShzaXplX3QgaWR4LCBzaXplX3QqIG91dExlbikgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0QXR0cmlidXRlTmFtZXNwYWNlSUQoaWR4KTsKLSAgICAvL3ByaW50ZigiYXR0cmlidXRlIG5hbWVzcGFjZT0lZCAgaWR4PSVkICBldmVudD0lcFxuIiwgaWQsIGlkeCwgbUV2ZW50Q29kZSk7Ci0gICAgLy9YTUxfTk9JU1kocHJpbnRmKCJnZXRBdHRyaWJ1dGVOYW1lc3BhY2UgMHgleD0weCV4XG4iLCBpZHgsIGlkKSk7Ci0gICAgcmV0dXJuIGlkID49IDAgPyBtVHJlZS5tU3RyaW5ncy5zdHJpbmdBdChpZCwgb3V0TGVuKSA6IE5VTEw7Ci19Ci0KLWNvbnN0IGNoYXIqIFJlc1hNTFBhcnNlcjo6Z2V0QXR0cmlidXRlTmFtZXNwYWNlOChzaXplX3QgaWR4LCBzaXplX3QqIG91dExlbikgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0QXR0cmlidXRlTmFtZXNwYWNlSUQoaWR4KTsKLSAgICAvL3ByaW50ZigiYXR0cmlidXRlIG5hbWVzcGFjZT0lZCAgaWR4PSVkICBldmVudD0lcFxuIiwgaWQsIGlkeCwgbUV2ZW50Q29kZSk7Ci0gICAgLy9YTUxfTk9JU1kocHJpbnRmKCJnZXRBdHRyaWJ1dGVOYW1lc3BhY2UgMHgleD0weCV4XG4iLCBpZHgsIGlkKSk7Ci0gICAgcmV0dXJuIGlkID49IDAgPyBtVHJlZS5tU3RyaW5ncy5zdHJpbmc4QXQoaWQsIG91dExlbikgOiBOVUxMOwotfQotCi1pbnQzMl90IFJlc1hNTFBhcnNlcjo6Z2V0QXR0cmlidXRlTmFtZUlEKHNpemVfdCBpZHgpIGNvbnN0Ci17Ci0gICAgaWYgKG1FdmVudENvZGUgPT0gU1RBUlRfVEFHKSB7Ci0gICAgICAgIGNvbnN0IFJlc1hNTFRyZWVfYXR0ckV4dCogdGFnID0gKGNvbnN0IFJlc1hNTFRyZWVfYXR0ckV4dCopbUN1ckV4dDsKLSAgICAgICAgaWYgKGlkeCA8IGR0b2hzKHRhZy0+YXR0cmlidXRlQ291bnQpKSB7Ci0gICAgICAgICAgICBjb25zdCBSZXNYTUxUcmVlX2F0dHJpYnV0ZSogYXR0ciA9IChjb25zdCBSZXNYTUxUcmVlX2F0dHJpYnV0ZSopCi0gICAgICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopdGFnKQotICAgICAgICAgICAgICAgICArIGR0b2hzKHRhZy0+YXR0cmlidXRlU3RhcnQpCi0gICAgICAgICAgICAgICAgICsgKGR0b2hzKHRhZy0+YXR0cmlidXRlU2l6ZSkqaWR4KSk7Ci0gICAgICAgICAgICByZXR1cm4gZHRvaGwoYXR0ci0+bmFtZS5pbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1jb25zdCB1aW50MTZfdCogUmVzWE1MUGFyc2VyOjpnZXRBdHRyaWJ1dGVOYW1lKHNpemVfdCBpZHgsIHNpemVfdCogb3V0TGVuKSBjb25zdAotewotICAgIGludDMyX3QgaWQgPSBnZXRBdHRyaWJ1dGVOYW1lSUQoaWR4KTsKLSAgICAvL3ByaW50ZigiYXR0cmlidXRlIG5hbWU9JWQgIGlkeD0lZCAgZXZlbnQ9JXBcbiIsIGlkLCBpZHgsIG1FdmVudENvZGUpOwotICAgIC8vWE1MX05PSVNZKHByaW50ZigiZ2V0QXR0cmlidXRlTmFtZSAweCV4PTB4JXhcbiIsIGlkeCwgaWQpKTsKLSAgICByZXR1cm4gaWQgPj0gMCA/IG1UcmVlLm1TdHJpbmdzLnN0cmluZ0F0KGlkLCBvdXRMZW4pIDogTlVMTDsKLX0KLQotY29uc3QgY2hhciogUmVzWE1MUGFyc2VyOjpnZXRBdHRyaWJ1dGVOYW1lOChzaXplX3QgaWR4LCBzaXplX3QqIG91dExlbikgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0QXR0cmlidXRlTmFtZUlEKGlkeCk7Ci0gICAgLy9wcmludGYoImF0dHJpYnV0ZSBuYW1lPSVkICBpZHg9JWQgIGV2ZW50PSVwXG4iLCBpZCwgaWR4LCBtRXZlbnRDb2RlKTsKLSAgICAvL1hNTF9OT0lTWShwcmludGYoImdldEF0dHJpYnV0ZU5hbWUgMHgleD0weCV4XG4iLCBpZHgsIGlkKSk7Ci0gICAgcmV0dXJuIGlkID49IDAgPyBtVHJlZS5tU3RyaW5ncy5zdHJpbmc4QXQoaWQsIG91dExlbikgOiBOVUxMOwotfQotCi11aW50MzJfdCBSZXNYTUxQYXJzZXI6OmdldEF0dHJpYnV0ZU5hbWVSZXNJRChzaXplX3QgaWR4KSBjb25zdAotewotICAgIGludDMyX3QgaWQgPSBnZXRBdHRyaWJ1dGVOYW1lSUQoaWR4KTsKLSAgICBpZiAoaWQgPj0gMCAmJiAoc2l6ZV90KWlkIDwgbVRyZWUubU51bVJlc0lkcykgewotICAgICAgICByZXR1cm4gZHRvaGwobVRyZWUubVJlc0lkc1tpZF0pOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50MzJfdCBSZXNYTUxQYXJzZXI6OmdldEF0dHJpYnV0ZVZhbHVlU3RyaW5nSUQoc2l6ZV90IGlkeCkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9UQUcpIHsKLSAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiB0YWcgPSAoY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiltQ3VyRXh0OwotICAgICAgICBpZiAoaWR4IDwgZHRvaHModGFnLT5hdHRyaWJ1dGVDb3VudCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlc1hNTFRyZWVfYXR0cmlidXRlKiBhdHRyID0gKGNvbnN0IFJlc1hNTFRyZWVfYXR0cmlidXRlKikKLSAgICAgICAgICAgICAgICAoKChjb25zdCB1aW50OF90Kil0YWcpCi0gICAgICAgICAgICAgICAgICsgZHRvaHModGFnLT5hdHRyaWJ1dGVTdGFydCkKLSAgICAgICAgICAgICAgICAgKyAoZHRvaHModGFnLT5hdHRyaWJ1dGVTaXplKSppZHgpKTsKLSAgICAgICAgICAgIHJldHVybiBkdG9obChhdHRyLT5yYXdWYWx1ZS5pbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1jb25zdCB1aW50MTZfdCogUmVzWE1MUGFyc2VyOjpnZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShzaXplX3QgaWR4LCBzaXplX3QqIG91dExlbikgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0QXR0cmlidXRlVmFsdWVTdHJpbmdJRChpZHgpOwotICAgIC8vWE1MX05PSVNZKHByaW50ZigiZ2V0QXR0cmlidXRlVmFsdWUgMHgleD0weCV4XG4iLCBpZHgsIGlkKSk7Ci0gICAgcmV0dXJuIGlkID49IDAgPyBtVHJlZS5tU3RyaW5ncy5zdHJpbmdBdChpZCwgb3V0TGVuKSA6IE5VTEw7Ci19Ci0KLWludDMyX3QgUmVzWE1MUGFyc2VyOjpnZXRBdHRyaWJ1dGVEYXRhVHlwZShzaXplX3QgaWR4KSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX1RBRykgewotICAgICAgICBjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqIHRhZyA9IChjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqKW1DdXJFeHQ7Ci0gICAgICAgIGlmIChpZHggPCBkdG9ocyh0YWctPmF0dHJpYnV0ZUNvdW50KSkgewotICAgICAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9hdHRyaWJ1dGUqIGF0dHIgPSAoY29uc3QgUmVzWE1MVHJlZV9hdHRyaWJ1dGUqKQotICAgICAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKXRhZykKLSAgICAgICAgICAgICAgICAgKyBkdG9ocyh0YWctPmF0dHJpYnV0ZVN0YXJ0KQotICAgICAgICAgICAgICAgICArIChkdG9ocyh0YWctPmF0dHJpYnV0ZVNpemUpKmlkeCkpOwotICAgICAgICAgICAgcmV0dXJuIGF0dHItPnR5cGVkVmFsdWUuZGF0YVR5cGU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFJlc192YWx1ZTo6VFlQRV9OVUxMOwotfQotCi1pbnQzMl90IFJlc1hNTFBhcnNlcjo6Z2V0QXR0cmlidXRlRGF0YShzaXplX3QgaWR4KSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX1RBRykgewotICAgICAgICBjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqIHRhZyA9IChjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqKW1DdXJFeHQ7Ci0gICAgICAgIGlmIChpZHggPCBkdG9ocyh0YWctPmF0dHJpYnV0ZUNvdW50KSkgewotICAgICAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9hdHRyaWJ1dGUqIGF0dHIgPSAoY29uc3QgUmVzWE1MVHJlZV9hdHRyaWJ1dGUqKQotICAgICAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKXRhZykKLSAgICAgICAgICAgICAgICAgKyBkdG9ocyh0YWctPmF0dHJpYnV0ZVN0YXJ0KQotICAgICAgICAgICAgICAgICArIChkdG9ocyh0YWctPmF0dHJpYnV0ZVNpemUpKmlkeCkpOwotICAgICAgICAgICAgcmV0dXJuIGR0b2hsKGF0dHItPnR5cGVkVmFsdWUuZGF0YSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXNzaXplX3QgUmVzWE1MUGFyc2VyOjpnZXRBdHRyaWJ1dGVWYWx1ZShzaXplX3QgaWR4LCBSZXNfdmFsdWUqIG91dFZhbHVlKSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX1RBRykgewotICAgICAgICBjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqIHRhZyA9IChjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqKW1DdXJFeHQ7Ci0gICAgICAgIGlmIChpZHggPCBkdG9ocyh0YWctPmF0dHJpYnV0ZUNvdW50KSkgewotICAgICAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9hdHRyaWJ1dGUqIGF0dHIgPSAoY29uc3QgUmVzWE1MVHJlZV9hdHRyaWJ1dGUqKQotICAgICAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKXRhZykKLSAgICAgICAgICAgICAgICAgKyBkdG9ocyh0YWctPmF0dHJpYnV0ZVN0YXJ0KQotICAgICAgICAgICAgICAgICArIChkdG9ocyh0YWctPmF0dHJpYnV0ZVNpemUpKmlkeCkpOwotICAgICAgICAgICAgb3V0VmFsdWUtPmNvcHlGcm9tX2R0b2goYXR0ci0+dHlwZWRWYWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gc2l6ZW9mKFJlc192YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIEJBRF9UWVBFOwotfQotCi1zc2l6ZV90IFJlc1hNTFBhcnNlcjo6aW5kZXhPZkF0dHJpYnV0ZShjb25zdCBjaGFyKiBucywgY29uc3QgY2hhciogYXR0cikgY29uc3QKLXsKLSAgICBTdHJpbmcxNiBuc1N0cihucyAhPSBOVUxMID8gbnMgOiAiIik7Ci0gICAgU3RyaW5nMTYgYXR0clN0cihhdHRyKTsKLSAgICByZXR1cm4gaW5kZXhPZkF0dHJpYnV0ZShucyA/IG5zU3RyLnN0cmluZygpIDogTlVMTCwgbnMgPyBuc1N0ci5zaXplKCkgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJTdHIuc3RyaW5nKCksIGF0dHJTdHIuc2l6ZSgpKTsKLX0KLQotc3NpemVfdCBSZXNYTUxQYXJzZXI6OmluZGV4T2ZBdHRyaWJ1dGUoY29uc3QgY2hhcjE2X3QqIG5zLCBzaXplX3QgbnNMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogYXR0ciwgc2l6ZV90IGF0dHJMZW4pIGNvbnN0Ci17Ci0gICAgaWYgKG1FdmVudENvZGUgPT0gU1RBUlRfVEFHKSB7Ci0gICAgICAgIGlmIChhdHRyID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOQU1FX05PVF9GT1VORDsKLSAgICAgICAgfQotICAgICAgICBjb25zdCBzaXplX3QgTiA9IGdldEF0dHJpYnV0ZUNvdW50KCk7Ci0gICAgICAgIGlmIChtVHJlZS5tU3RyaW5ncy5pc1VURjgoKSkgewotICAgICAgICAgICAgU3RyaW5nOCBuczgsIGF0dHI4OwotICAgICAgICAgICAgaWYgKG5zICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBuczggPSBTdHJpbmc4KG5zLCBuc0xlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdHRyOCA9IFN0cmluZzgoYXR0ciwgYXR0ckxlbik7Ci0gICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiaW5kZXhPZkF0dHJpYnV0ZSBVVEY4ICVzICglZCkgLyAlcyAoJWQpIiwgbnM4LnN0cmluZygpLCBuc0xlbiwKLSAgICAgICAgICAgICAgICAgICAgYXR0cjguc3RyaW5nKCksIGF0dHJMZW4pKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgY3VyTnNMZW4gPSAwLCBjdXJBdHRyTGVuID0gMDsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjdXJOcyA9IGdldEF0dHJpYnV0ZU5hbWVzcGFjZTgoaSwgJmN1ck5zTGVuKTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjdXJBdHRyID0gZ2V0QXR0cmlidXRlTmFtZTgoaSwgJmN1ckF0dHJMZW4pOwotICAgICAgICAgICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCIgIGN1ck5zPSVzICglZCksIGN1ckF0dHI9JXMgKCVkKSIsIGN1ck5zLCBjdXJOc0xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ckF0dHIsIGN1ckF0dHJMZW4pKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyQXR0ciAhPSBOVUxMICYmIGN1ck5zTGVuID09IG5zTGVuICYmIGN1ckF0dHJMZW4gPT0gYXR0ckxlbgotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbWVtY21wKGF0dHI4LnN0cmluZygpLCBjdXJBdHRyLCBhdHRyTGVuKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChucyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyTnMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCIgIEZPVU5EISIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJOcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiIC0tPiBucz0lcywgY3VyTnM9JXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBTdHJpbmc4KG5zKS5zdHJpbmcoKSwgU3RyaW5nOChjdXJOcykuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lbWNtcChuczguc3RyaW5nKCksIGN1ck5zLCBuc0xlbikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCIgIEZPVU5EISIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCJpbmRleE9mQXR0cmlidXRlIFVURjE2ICVzICglZCkgLyAlcyAoJWQpIiwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChucywgbnNMZW4pLnN0cmluZygpLCBuc0xlbiwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChhdHRyLCBhdHRyTGVuKS5zdHJpbmcoKSwgYXR0ckxlbikpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgIHNpemVfdCBjdXJOc0xlbiA9IDAsIGN1ckF0dHJMZW4gPSAwOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBjdXJOcyA9IGdldEF0dHJpYnV0ZU5hbWVzcGFjZShpLCAmY3VyTnNMZW4pOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBjdXJBdHRyID0gZ2V0QXR0cmlidXRlTmFtZShpLCAmY3VyQXR0ckxlbik7Ci0gICAgICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koIiAgY3VyTnM9JXMgKCVkKSwgY3VyQXR0cj0lcyAoJWQpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoY3VyTnMsIGN1ck5zTGVuKS5zdHJpbmcoKSwgY3VyTnNMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGN1ckF0dHIsIGN1ckF0dHJMZW4pLnN0cmluZygpLCBjdXJBdHRyTGVuKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1ckF0dHIgIT0gTlVMTCAmJiBjdXJOc0xlbiA9PSBuc0xlbiAmJiBjdXJBdHRyTGVuID09IGF0dHJMZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICYmIChtZW1jbXAoYXR0ciwgY3VyQXR0ciwgYXR0ckxlbipzaXplb2YoY2hhcjE2X3QpKSA9PSAwKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobnMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ck5zID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiICBGT1VORCEiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyTnMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIiAtLT4gbnM9JXMsIGN1ck5zPSVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgU3RyaW5nOChucykuc3RyaW5nKCksIFN0cmluZzgoY3VyTnMpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZW1jbXAobnMsIGN1ck5zLCBuc0xlbipzaXplb2YoY2hhcjE2X3QpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koIiAgRk9VTkQhIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5BTUVfTk9UX0ZPVU5EOwotfQotCi1zc2l6ZV90IFJlc1hNTFBhcnNlcjo6aW5kZXhPZklEKCkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9UQUcpIHsKLSAgICAgICAgY29uc3Qgc3NpemVfdCBpZHggPSBkdG9ocygoKGNvbnN0IFJlc1hNTFRyZWVfYXR0ckV4dCopbUN1ckV4dCktPmlkSW5kZXgpOwotICAgICAgICBpZiAoaWR4ID4gMCkgcmV0dXJuIChpZHgtMSk7Ci0gICAgfQotICAgIHJldHVybiBOQU1FX05PVF9GT1VORDsKLX0KLQotc3NpemVfdCBSZXNYTUxQYXJzZXI6OmluZGV4T2ZDbGFzcygpIGNvbnN0Ci17Ci0gICAgaWYgKG1FdmVudENvZGUgPT0gU1RBUlRfVEFHKSB7Ci0gICAgICAgIGNvbnN0IHNzaXplX3QgaWR4ID0gZHRvaHMoKChjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqKW1DdXJFeHQpLT5jbGFzc0luZGV4KTsKLSAgICAgICAgaWYgKGlkeCA+IDApIHJldHVybiAoaWR4LTEpOwotICAgIH0KLSAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7Ci19Ci0KLXNzaXplX3QgUmVzWE1MUGFyc2VyOjppbmRleE9mU3R5bGUoKSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX1RBRykgewotICAgICAgICBjb25zdCBzc2l6ZV90IGlkeCA9IGR0b2hzKCgoY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiltQ3VyRXh0KS0+c3R5bGVJbmRleCk7Ci0gICAgICAgIGlmIChpZHggPiAwKSByZXR1cm4gKGlkeC0xKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5BTUVfTk9UX0ZPVU5EOwotfQotCi1SZXNYTUxQYXJzZXI6OmV2ZW50X2NvZGVfdCBSZXNYTUxQYXJzZXI6Om5leHROb2RlKCkKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA8IDApIHsKLSAgICAgICAgcmV0dXJuIG1FdmVudENvZGU7Ci0gICAgfQotCi0gICAgZG8gewotICAgICAgICBjb25zdCBSZXNYTUxUcmVlX25vZGUqIG5leHQgPSAoY29uc3QgUmVzWE1MVHJlZV9ub2RlKikKLSAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKW1DdXJOb2RlKSArIGR0b2hsKG1DdXJOb2RlLT5oZWFkZXIuc2l6ZSkpOwotICAgICAgICAvL0FMT0dXKCJOZXh0IG5vZGU6IHByZXY9JXAsIG5leHQ9JXBcbiIsIG1DdXJOb2RlLCBuZXh0KTsKLSAgICAgICAgCi0gICAgICAgIGlmICgoKGNvbnN0IHVpbnQ4X3QqKW5leHQpID49IG1UcmVlLm1EYXRhRW5kKSB7Ci0gICAgICAgICAgICBtQ3VyTm9kZSA9IE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gKG1FdmVudENvZGU9RU5EX0RPQ1VNRU5UKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVHJlZS52YWxpZGF0ZU5vZGUobmV4dCkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIG1DdXJOb2RlID0gTlVMTDsKLSAgICAgICAgICAgIHJldHVybiAobUV2ZW50Q29kZT1CQURfRE9DVU1FTlQpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1ck5vZGUgPSBuZXh0OwotICAgICAgICBjb25zdCB1aW50MTZfdCBoZWFkZXJTaXplID0gZHRvaHMobmV4dC0+aGVhZGVyLmhlYWRlclNpemUpOwotICAgICAgICBjb25zdCB1aW50MzJfdCB0b3RhbFNpemUgPSBkdG9obChuZXh0LT5oZWFkZXIuc2l6ZSk7Ci0gICAgICAgIG1DdXJFeHQgPSAoKGNvbnN0IHVpbnQ4X3QqKW5leHQpICsgaGVhZGVyU2l6ZTsKLSAgICAgICAgc2l6ZV90IG1pbkV4dFNpemUgPSAwOwotICAgICAgICBldmVudF9jb2RlX3QgZXZlbnRDb2RlID0gKGV2ZW50X2NvZGVfdClkdG9ocyhuZXh0LT5oZWFkZXIudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAoKG1FdmVudENvZGU9ZXZlbnRDb2RlKSkgewotICAgICAgICAgICAgY2FzZSBSRVNfWE1MX1NUQVJUX05BTUVTUEFDRV9UWVBFOgotICAgICAgICAgICAgY2FzZSBSRVNfWE1MX0VORF9OQU1FU1BBQ0VfVFlQRToKLSAgICAgICAgICAgICAgICBtaW5FeHRTaXplID0gc2l6ZW9mKFJlc1hNTFRyZWVfbmFtZXNwYWNlRXh0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUkVTX1hNTF9TVEFSVF9FTEVNRU5UX1RZUEU6Ci0gICAgICAgICAgICAgICAgbWluRXh0U2l6ZSA9IHNpemVvZihSZXNYTUxUcmVlX2F0dHJFeHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSRVNfWE1MX0VORF9FTEVNRU5UX1RZUEU6Ci0gICAgICAgICAgICAgICAgbWluRXh0U2l6ZSA9IHNpemVvZihSZXNYTUxUcmVlX2VuZEVsZW1lbnRFeHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSRVNfWE1MX0NEQVRBX1RZUEU6Ci0gICAgICAgICAgICAgICAgbWluRXh0U2l6ZSA9IHNpemVvZihSZXNYTUxUcmVlX2NkYXRhRXh0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQUxPR1coIlVua25vd24gWE1MIGJsb2NrOiBoZWFkZXIgdHlwZSAlZCBpbiBub2RlIGF0ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgKGludClkdG9ocyhuZXh0LT5oZWFkZXIudHlwZSksCi0gICAgICAgICAgICAgICAgICAgICAoaW50KSgoKGNvbnN0IHVpbnQ4X3QqKW5leHQpLSgoY29uc3QgdWludDhfdCopbVRyZWUubUhlYWRlcikpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCh0b3RhbFNpemUtaGVhZGVyU2l6ZSkgPCBtaW5FeHRTaXplKSB7Ci0gICAgICAgICAgICBBTE9HVygiQmFkIFhNTCBibG9jazogaGVhZGVyIHR5cGUgMHgleCBpbiBub2RlIGF0IDB4JXggaGFzIHNpemUgJWQsIG5lZWQgJWRcbiIsCi0gICAgICAgICAgICAgICAgIChpbnQpZHRvaHMobmV4dC0+aGVhZGVyLnR5cGUpLAotICAgICAgICAgICAgICAgICAoaW50KSgoKGNvbnN0IHVpbnQ4X3QqKW5leHQpLSgoY29uc3QgdWludDhfdCopbVRyZWUubUhlYWRlcikpLAotICAgICAgICAgICAgICAgICAoaW50KSh0b3RhbFNpemUtaGVhZGVyU2l6ZSksIChpbnQpbWluRXh0U2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gKG1FdmVudENvZGU9QkFEX0RPQ1VNRU5UKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy9wcmludGYoIkN1ck5vZGU9JXAsIEN1ckV4dD0lcCwgaGVhZGVyU2l6ZT0lZCwgbWluRXh0U2l6ZT0lZFxuIiwKLSAgICAgICAgLy8gICAgICAgbUN1ck5vZGUsIG1DdXJFeHQsIGhlYWRlclNpemUsIG1pbkV4dFNpemUpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGV2ZW50Q29kZTsKLSAgICB9IHdoaWxlICh0cnVlKTsKLX0KLQotdm9pZCBSZXNYTUxQYXJzZXI6OmdldFBvc2l0aW9uKFJlc1hNTFBhcnNlcjo6UmVzWE1MUG9zaXRpb24qIHBvcykgY29uc3QKLXsKLSAgICBwb3MtPmV2ZW50Q29kZSA9IG1FdmVudENvZGU7Ci0gICAgcG9zLT5jdXJOb2RlID0gbUN1ck5vZGU7Ci0gICAgcG9zLT5jdXJFeHQgPSBtQ3VyRXh0OwotfQotCi12b2lkIFJlc1hNTFBhcnNlcjo6c2V0UG9zaXRpb24oY29uc3QgUmVzWE1MUGFyc2VyOjpSZXNYTUxQb3NpdGlvbiYgcG9zKQotewotICAgIG1FdmVudENvZGUgPSBwb3MuZXZlbnRDb2RlOwotICAgIG1DdXJOb2RlID0gcG9zLmN1ck5vZGU7Ci0gICAgbUN1ckV4dCA9IHBvcy5jdXJFeHQ7Ci19Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIHZvbGF0aWxlIGludDMyX3QgZ0NvdW50ID0gMDsKLQotUmVzWE1MVHJlZTo6UmVzWE1MVHJlZSgpCi0gICAgOiBSZXNYTUxQYXJzZXIoKnRoaXMpCi0gICAgLCBtRXJyb3IoTk9fSU5JVCksIG1Pd25lZERhdGEoTlVMTCkKLXsKLSAgICAvL0FMT0dJKCJDcmVhdGluZyBSZXNYTUxUcmVlICVwICMlZFxuIiwgdGhpcywgYW5kcm9pZF9hdG9taWNfaW5jKCZnQ291bnQpKzEpOwotICAgIHJlc3RhcnQoKTsKLX0KLQotUmVzWE1MVHJlZTo6UmVzWE1MVHJlZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgYm9vbCBjb3B5RGF0YSkKLSAgICA6IFJlc1hNTFBhcnNlcigqdGhpcykKLSAgICAsIG1FcnJvcihOT19JTklUKSwgbU93bmVkRGF0YShOVUxMKQotewotICAgIC8vQUxPR0koIkNyZWF0aW5nIFJlc1hNTFRyZWUgJXAgIyVkXG4iLCB0aGlzLCBhbmRyb2lkX2F0b21pY19pbmMoJmdDb3VudCkrMSk7Ci0gICAgc2V0VG8oZGF0YSwgc2l6ZSwgY29weURhdGEpOwotfQotCi1SZXNYTUxUcmVlOjp+UmVzWE1MVHJlZSgpCi17Ci0gICAgLy9BTE9HSSgiRGVzdHJveWluZyBSZXNYTUxUcmVlIGluICVwICMlZFxuIiwgdGhpcywgYW5kcm9pZF9hdG9taWNfZGVjKCZnQ291bnQpLTEpOwotICAgIHVuaW5pdCgpOwotfQotCi1zdGF0dXNfdCBSZXNYTUxUcmVlOjpzZXRUbyhjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgYm9vbCBjb3B5RGF0YSkKLXsKLSAgICB1bmluaXQoKTsKLSAgICBtRXZlbnRDb2RlID0gU1RBUlRfRE9DVU1FTlQ7Ci0KLSAgICBpZiAoIWRhdGEgfHwgIXNpemUpIHsKLSAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgIH0KLQotICAgIGlmIChjb3B5RGF0YSkgewotICAgICAgICBtT3duZWREYXRhID0gbWFsbG9jKHNpemUpOwotICAgICAgICBpZiAobU93bmVkRGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1OT19NRU1PUlkpOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweShtT3duZWREYXRhLCBkYXRhLCBzaXplKTsKLSAgICAgICAgZGF0YSA9IG1Pd25lZERhdGE7Ci0gICAgfQotCi0gICAgbUhlYWRlciA9IChjb25zdCBSZXNYTUxUcmVlX2hlYWRlciopZGF0YTsKLSAgICBtU2l6ZSA9IGR0b2hsKG1IZWFkZXItPmhlYWRlci5zaXplKTsKLSAgICBpZiAoZHRvaHMobUhlYWRlci0+aGVhZGVyLmhlYWRlclNpemUpID4gbVNpemUgfHwgbVNpemUgPiBzaXplKSB7Ci0gICAgICAgIEFMT0dXKCJCYWQgWE1MIGJsb2NrOiBoZWFkZXIgc2l6ZSAlZCBvciB0b3RhbCBzaXplICVkIGlzIGxhcmdlciB0aGFuIGRhdGEgc2l6ZSAlZFxuIiwKLSAgICAgICAgICAgICAoaW50KWR0b2hzKG1IZWFkZXItPmhlYWRlci5oZWFkZXJTaXplKSwKLSAgICAgICAgICAgICAoaW50KWR0b2hsKG1IZWFkZXItPmhlYWRlci5zaXplKSwgKGludClzaXplKTsKLSAgICAgICAgbUVycm9yID0gQkFEX1RZUEU7Ci0gICAgICAgIHJlc3RhcnQoKTsKLSAgICAgICAgcmV0dXJuIG1FcnJvcjsKLSAgICB9Ci0gICAgbURhdGFFbmQgPSAoKGNvbnN0IHVpbnQ4X3QqKW1IZWFkZXIpICsgbVNpemU7Ci0KLSAgICBtU3RyaW5ncy51bmluaXQoKTsKLSAgICBtUm9vdE5vZGUgPSBOVUxMOwotICAgIG1SZXNJZHMgPSBOVUxMOwotICAgIG1OdW1SZXNJZHMgPSAwOwotCi0gICAgLy8gRmlyc3QgbG9vayBmb3IgYSBjb3VwbGUgaW50ZXJlc3RpbmcgY2h1bmtzOiB0aGUgc3RyaW5nIGJsb2NrCi0gICAgLy8gYW5kIGZpcnN0IFhNTCBub2RlLgotICAgIGNvbnN0IFJlc0NodW5rX2hlYWRlciogY2h1bmsgPQotICAgICAgICAoY29uc3QgUmVzQ2h1bmtfaGVhZGVyKikoKChjb25zdCB1aW50OF90KiltSGVhZGVyKSArIGR0b2hzKG1IZWFkZXItPmhlYWRlci5oZWFkZXJTaXplKSk7Ci0gICAgY29uc3QgUmVzQ2h1bmtfaGVhZGVyKiBsYXN0Q2h1bmsgPSBjaHVuazsKLSAgICB3aGlsZSAoKChjb25zdCB1aW50OF90KiljaHVuaykgPCAobURhdGFFbmQtc2l6ZW9mKFJlc0NodW5rX2hlYWRlcikpICYmCi0gICAgICAgICAgICgoY29uc3QgdWludDhfdCopY2h1bmspIDwgKG1EYXRhRW5kLWR0b2hsKGNodW5rLT5zaXplKSkpIHsKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gdmFsaWRhdGVfY2h1bmsoY2h1bmssIHNpemVvZihSZXNDaHVua19oZWFkZXIpLCBtRGF0YUVuZCwgIlhNTCIpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBtRXJyb3IgPSBlcnI7Ci0gICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdWludDE2X3QgdHlwZSA9IGR0b2hzKGNodW5rLT50eXBlKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBkdG9obChjaHVuay0+c2l6ZSk7Ci0gICAgICAgIFhNTF9OT0lTWShwcmludGYoIlNjYW5uaW5nIEAgJXA6IHR5cGU9MHgleCwgc2l6ZT0weCV4XG4iLAotICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKSgoKHVpbnQzMl90KWNodW5rKS0oKHVpbnQzMl90KW1IZWFkZXIpKSwgdHlwZSwgc2l6ZSkpOwotICAgICAgICBpZiAodHlwZSA9PSBSRVNfU1RSSU5HX1BPT0xfVFlQRSkgewotICAgICAgICAgICAgbVN0cmluZ3Muc2V0VG8oY2h1bmssIHNpemUpOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUkVTX1hNTF9SRVNPVVJDRV9NQVBfVFlQRSkgewotICAgICAgICAgICAgbVJlc0lkcyA9IChjb25zdCB1aW50MzJfdCopCi0gICAgICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopY2h1bmspK2R0b2hzKGNodW5rLT5oZWFkZXJTaXplKSk7Ci0gICAgICAgICAgICBtTnVtUmVzSWRzID0gKGR0b2hsKGNodW5rLT5zaXplKS1kdG9ocyhjaHVuay0+aGVhZGVyU2l6ZSkpL3NpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZSA+PSBSRVNfWE1MX0ZJUlNUX0NIVU5LX1RZUEUKLSAgICAgICAgICAgICAgICAgICAmJiB0eXBlIDw9IFJFU19YTUxfTEFTVF9DSFVOS19UWVBFKSB7Ci0gICAgICAgICAgICBpZiAodmFsaWRhdGVOb2RlKChjb25zdCBSZXNYTUxUcmVlX25vZGUqKWNodW5rKSAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIG1FcnJvciA9IEJBRF9UWVBFOwotICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1DdXJOb2RlID0gKGNvbnN0IFJlc1hNTFRyZWVfbm9kZSopbGFzdENodW5rOwotICAgICAgICAgICAgaWYgKG5leHROb2RlKCkgPT0gQkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgICAgICAgICAgbUVycm9yID0gQkFEX1RZUEU7Ci0gICAgICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVJvb3ROb2RlID0gbUN1ck5vZGU7Ci0gICAgICAgICAgICBtUm9vdEV4dCA9IG1DdXJFeHQ7Ci0gICAgICAgICAgICBtUm9vdENvZGUgPSBtRXZlbnRDb2RlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBYTUxfTk9JU1kocHJpbnRmKCJTa2lwcGluZyB1bmtub3duIGNodW5rIVxuIikpOwotICAgICAgICB9Ci0gICAgICAgIGxhc3RDaHVuayA9IGNodW5rOwotICAgICAgICBjaHVuayA9IChjb25zdCBSZXNDaHVua19oZWFkZXIqKQotICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopY2h1bmspICsgc2l6ZSk7Ci0gICAgfQotCi0gICAgaWYgKG1Sb290Tm9kZSA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dXKCJCYWQgWE1MIGJsb2NrOiBubyByb290IGVsZW1lbnQgbm9kZSBmb3VuZFxuIik7Ci0gICAgICAgIG1FcnJvciA9IEJBRF9UWVBFOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfQotCi0gICAgbUVycm9yID0gbVN0cmluZ3MuZ2V0RXJyb3IoKTsKLQotZG9uZToKLSAgICByZXN0YXJ0KCk7Ci0gICAgcmV0dXJuIG1FcnJvcjsKLX0KLQotc3RhdHVzX3QgUmVzWE1MVHJlZTo6Z2V0RXJyb3IoKSBjb25zdAotewotICAgIHJldHVybiBtRXJyb3I7Ci19Ci0KLXZvaWQgUmVzWE1MVHJlZTo6dW5pbml0KCkKLXsKLSAgICBtRXJyb3IgPSBOT19JTklUOwotICAgIG1TdHJpbmdzLnVuaW5pdCgpOwotICAgIGlmIChtT3duZWREYXRhKSB7Ci0gICAgICAgIGZyZWUobU93bmVkRGF0YSk7Ci0gICAgICAgIG1Pd25lZERhdGEgPSBOVUxMOwotICAgIH0KLSAgICByZXN0YXJ0KCk7Ci19Ci0KLXN0YXR1c190IFJlc1hNTFRyZWU6OnZhbGlkYXRlTm9kZShjb25zdCBSZXNYTUxUcmVlX25vZGUqIG5vZGUpIGNvbnN0Ci17Ci0gICAgY29uc3QgdWludDE2X3QgZXZlbnRDb2RlID0gZHRvaHMobm9kZS0+aGVhZGVyLnR5cGUpOwotCi0gICAgc3RhdHVzX3QgZXJyID0gdmFsaWRhdGVfY2h1bmsoCi0gICAgICAgICZub2RlLT5oZWFkZXIsIHNpemVvZihSZXNYTUxUcmVlX25vZGUpLAotICAgICAgICBtRGF0YUVuZCwgIlJlc1hNTFRyZWVfbm9kZSIpOwotCi0gICAgaWYgKGVyciA+PSBOT19FUlJPUikgewotICAgICAgICAvLyBPbmx5IHBlcmZvcm0gYWRkaXRpb25hbCB2YWxpZGF0aW9uIG9uIFNUQVJUIG5vZGVzCi0gICAgICAgIGlmIChldmVudENvZGUgIT0gUkVTX1hNTF9TVEFSVF9FTEVNRU5UX1RZUEUpIHsKLSAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHVpbnQxNl90IGhlYWRlclNpemUgPSBkdG9ocyhub2RlLT5oZWFkZXIuaGVhZGVyU2l6ZSk7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IHNpemUgPSBkdG9obChub2RlLT5oZWFkZXIuc2l6ZSk7Ci0gICAgICAgIGNvbnN0IFJlc1hNTFRyZWVfYXR0ckV4dCogYXR0ckV4dCA9IChjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqKQotICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopbm9kZSkgKyBoZWFkZXJTaXplKTsKLSAgICAgICAgLy8gY2hlY2sgZm9yIHNlbnNpY2FsIHZhbHVlcyBwdWxsZWQgb3V0IG9mIHRoZSBzdHJlYW0gc28gZmFyLi4uCi0gICAgICAgIGlmICgoc2l6ZSA+PSBoZWFkZXJTaXplICsgc2l6ZW9mKFJlc1hNTFRyZWVfYXR0ckV4dCkpCi0gICAgICAgICAgICAgICAgJiYgKCh2b2lkKilhdHRyRXh0ID4gKHZvaWQqKW5vZGUpKSB7Ci0gICAgICAgICAgICBjb25zdCBzaXplX3QgYXR0clNpemUgPSAoKHNpemVfdClkdG9ocyhhdHRyRXh0LT5hdHRyaWJ1dGVTaXplKSkKLSAgICAgICAgICAgICAgICAqIGR0b2hzKGF0dHJFeHQtPmF0dHJpYnV0ZUNvdW50KTsKLSAgICAgICAgICAgIGlmICgoZHRvaHMoYXR0ckV4dC0+YXR0cmlidXRlU3RhcnQpK2F0dHJTaXplKSA8PSAoc2l6ZS1oZWFkZXJTaXplKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFMT0dXKCJCYWQgWE1MIGJsb2NrOiBub2RlIGF0dHJpYnV0ZXMgdXNlIDB4JXggYnl0ZXMsIG9ubHkgaGF2ZSAweCV4IGJ5dGVzXG4iLAotICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KShkdG9ocyhhdHRyRXh0LT5hdHRyaWJ1dGVTdGFydCkrYXR0clNpemUpLAotICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KShzaXplLWhlYWRlclNpemUpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFMT0dXKCJCYWQgWE1MIHN0YXJ0IGJsb2NrOiBub2RlIGhlYWRlciBzaXplIDB4JXgsIHNpemUgMHgleFxuIiwKLSAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KWhlYWRlclNpemUsICh1bnNpZ25lZCBpbnQpc2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEJBRF9UWVBFOwotICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci0KLSNpZiAwCi0gICAgY29uc3QgYm9vbCBpc1N0YXJ0ID0gZHRvaHMobm9kZS0+aGVhZGVyLnR5cGUpID09IFJFU19YTUxfU1RBUlRfRUxFTUVOVF9UWVBFOwotCi0gICAgY29uc3QgdWludDE2X3QgaGVhZGVyU2l6ZSA9IGR0b2hzKG5vZGUtPmhlYWRlci5oZWFkZXJTaXplKTsKLSAgICBjb25zdCB1aW50MzJfdCBzaXplID0gZHRvaGwobm9kZS0+aGVhZGVyLnNpemUpOwotCi0gICAgaWYgKGhlYWRlclNpemUgPj0gKGlzU3RhcnQgPyBzaXplb2YoUmVzWE1MVHJlZV9hdHRyTm9kZSkgOiBzaXplb2YoUmVzWE1MVHJlZV9ub2RlKSkpIHsKLSAgICAgICAgaWYgKHNpemUgPj0gaGVhZGVyU2l6ZSkgewotICAgICAgICAgICAgaWYgKCgoY29uc3QgdWludDhfdCopbm9kZSkgPD0gKG1EYXRhRW5kLXNpemUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1N0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCgoKHNpemVfdClkdG9ocyhub2RlLT5hdHRyaWJ1dGVTaXplKSkqZHRvaHMobm9kZS0+YXR0cmlidXRlQ291bnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgPD0gKHNpemUtaGVhZGVyU2l6ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBTE9HVygiQmFkIFhNTCBibG9jazogbm9kZSBhdHRyaWJ1dGVzIHVzZSAweCV4IGJ5dGVzLCBvbmx5IGhhdmUgMHgleCBieXRlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoaW50KWR0b2hzKG5vZGUtPmF0dHJpYnV0ZVNpemUpKSpkdG9ocyhub2RlLT5hdHRyaWJ1dGVDb3VudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAoaW50KShzaXplLWhlYWRlclNpemUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1RZUEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBTE9HVygiQmFkIFhNTCBibG9jazogbm9kZSBhdCAweCV4IGV4dGVuZHMgYmV5b25kIGRhdGEgZW5kIDB4JXhcbiIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpKCgoY29uc3QgdWludDhfdCopbm9kZSktKChjb25zdCB1aW50OF90KiltSGVhZGVyKSksIChpbnQpbVNpemUpOwotICAgICAgICAgICAgcmV0dXJuIEJBRF9UWVBFOwotICAgICAgICB9Ci0gICAgICAgIEFMT0dXKCJCYWQgWE1MIGJsb2NrOiBub2RlIGF0IDB4JXggaGVhZGVyIHNpemUgMHgleCBzbWFsbGVyIHRoYW4gdG90YWwgc2l6ZSAweCV4XG4iLAotICAgICAgICAgICAgICAgIChpbnQpKCgoY29uc3QgdWludDhfdCopbm9kZSktKChjb25zdCB1aW50OF90KiltSGVhZGVyKSksCi0gICAgICAgICAgICAgICAgKGludCloZWFkZXJTaXplLCAoaW50KXNpemUpOwotICAgICAgICByZXR1cm4gQkFEX1RZUEU7Ci0gICAgfQotICAgIEFMT0dXKCJCYWQgWE1MIGJsb2NrOiBub2RlIGF0IDB4JXggaGVhZGVyIHNpemUgMHgleCB0b28gc21hbGxcbiIsCi0gICAgICAgICAgICAoaW50KSgoKGNvbnN0IHVpbnQ4X3QqKW5vZGUpLSgoY29uc3QgdWludDhfdCopbUhlYWRlcikpLAotICAgICAgICAgICAgKGludCloZWFkZXJTaXplKTsKLSAgICByZXR1cm4gQkFEX1RZUEU7Ci0jZW5kaWYKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFJlc1RhYmxlX2NvbmZpZzo6Y29weUZyb21EZXZpY2VOb1N3YXAoY29uc3QgUmVzVGFibGVfY29uZmlnJiBvKSB7Ci0gICAgY29uc3Qgc2l6ZV90IHNpemUgPSBkdG9obChvLnNpemUpOwotICAgIGlmIChzaXplID49IHNpemVvZihSZXNUYWJsZV9jb25maWcpKSB7Ci0gICAgICAgICp0aGlzID0gbzsKLSAgICB9IGVsc2UgewotICAgICAgICBtZW1jcHkodGhpcywgJm8sIHNpemUpOwotICAgICAgICBtZW1zZXQoKCh1aW50OF90Kil0aGlzKStzaXplLCAwLCBzaXplb2YoUmVzVGFibGVfY29uZmlnKS1zaXplKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzVGFibGVfY29uZmlnOjpjb3B5RnJvbUR0b0goY29uc3QgUmVzVGFibGVfY29uZmlnJiBvKSB7Ci0gICAgY29weUZyb21EZXZpY2VOb1N3YXAobyk7Ci0gICAgc2l6ZSA9IHNpemVvZihSZXNUYWJsZV9jb25maWcpOwotICAgIG1jYyA9IGR0b2hzKG1jYyk7Ci0gICAgbW5jID0gZHRvaHMobW5jKTsKLSAgICBkZW5zaXR5ID0gZHRvaHMoZGVuc2l0eSk7Ci0gICAgc2NyZWVuV2lkdGggPSBkdG9ocyhzY3JlZW5XaWR0aCk7Ci0gICAgc2NyZWVuSGVpZ2h0ID0gZHRvaHMoc2NyZWVuSGVpZ2h0KTsKLSAgICBzZGtWZXJzaW9uID0gZHRvaHMoc2RrVmVyc2lvbik7Ci0gICAgbWlub3JWZXJzaW9uID0gZHRvaHMobWlub3JWZXJzaW9uKTsKLSAgICBzbWFsbGVzdFNjcmVlbldpZHRoRHAgPSBkdG9ocyhzbWFsbGVzdFNjcmVlbldpZHRoRHApOwotICAgIHNjcmVlbldpZHRoRHAgPSBkdG9ocyhzY3JlZW5XaWR0aERwKTsKLSAgICBzY3JlZW5IZWlnaHREcCA9IGR0b2hzKHNjcmVlbkhlaWdodERwKTsKLX0KLQotdm9pZCBSZXNUYWJsZV9jb25maWc6OnN3YXBIdG9EKCkgewotICAgIHNpemUgPSBodG9kbChzaXplKTsKLSAgICBtY2MgPSBodG9kcyhtY2MpOwotICAgIG1uYyA9IGh0b2RzKG1uYyk7Ci0gICAgZGVuc2l0eSA9IGh0b2RzKGRlbnNpdHkpOwotICAgIHNjcmVlbldpZHRoID0gaHRvZHMoc2NyZWVuV2lkdGgpOwotICAgIHNjcmVlbkhlaWdodCA9IGh0b2RzKHNjcmVlbkhlaWdodCk7Ci0gICAgc2RrVmVyc2lvbiA9IGh0b2RzKHNka1ZlcnNpb24pOwotICAgIG1pbm9yVmVyc2lvbiA9IGh0b2RzKG1pbm9yVmVyc2lvbik7Ci0gICAgc21hbGxlc3RTY3JlZW5XaWR0aERwID0gaHRvZHMoc21hbGxlc3RTY3JlZW5XaWR0aERwKTsKLSAgICBzY3JlZW5XaWR0aERwID0gaHRvZHMoc2NyZWVuV2lkdGhEcCk7Ci0gICAgc2NyZWVuSGVpZ2h0RHAgPSBodG9kcyhzY3JlZW5IZWlnaHREcCk7Ci19Ci0KLWludCBSZXNUYWJsZV9jb25maWc6OmNvbXBhcmUoY29uc3QgUmVzVGFibGVfY29uZmlnJiBvKSBjb25zdCB7Ci0gICAgaW50MzJfdCBkaWZmID0gKGludDMyX3QpKGltc2kgLSBvLmltc2kpOwotICAgIGlmIChkaWZmICE9IDApIHJldHVybiBkaWZmOwotICAgIGRpZmYgPSAoaW50MzJfdCkobG9jYWxlIC0gby5sb2NhbGUpOwotICAgIGlmIChkaWZmICE9IDApIHJldHVybiBkaWZmOwotICAgIGRpZmYgPSAoaW50MzJfdCkoc2NyZWVuVHlwZSAtIG8uc2NyZWVuVHlwZSk7Ci0gICAgaWYgKGRpZmYgIT0gMCkgcmV0dXJuIGRpZmY7Ci0gICAgZGlmZiA9IChpbnQzMl90KShpbnB1dCAtIG8uaW5wdXQpOwotICAgIGlmIChkaWZmICE9IDApIHJldHVybiBkaWZmOwotICAgIGRpZmYgPSAoaW50MzJfdCkoc2NyZWVuU2l6ZSAtIG8uc2NyZWVuU2l6ZSk7Ci0gICAgaWYgKGRpZmYgIT0gMCkgcmV0dXJuIGRpZmY7Ci0gICAgZGlmZiA9IChpbnQzMl90KSh2ZXJzaW9uIC0gby52ZXJzaW9uKTsKLSAgICBpZiAoZGlmZiAhPSAwKSByZXR1cm4gZGlmZjsKLSAgICBkaWZmID0gKGludDMyX3QpKHNjcmVlbkxheW91dCAtIG8uc2NyZWVuTGF5b3V0KTsKLSAgICBpZiAoZGlmZiAhPSAwKSByZXR1cm4gZGlmZjsKLSAgICBkaWZmID0gKGludDMyX3QpKHVpTW9kZSAtIG8udWlNb2RlKTsKLSAgICBpZiAoZGlmZiAhPSAwKSByZXR1cm4gZGlmZjsKLSAgICBkaWZmID0gKGludDMyX3QpKHNtYWxsZXN0U2NyZWVuV2lkdGhEcCAtIG8uc21hbGxlc3RTY3JlZW5XaWR0aERwKTsKLSAgICBpZiAoZGlmZiAhPSAwKSByZXR1cm4gZGlmZjsKLSAgICBkaWZmID0gKGludDMyX3QpKHNjcmVlblNpemVEcCAtIG8uc2NyZWVuU2l6ZURwKTsKLSAgICByZXR1cm4gKGludClkaWZmOwotfQotCi1pbnQgUmVzVGFibGVfY29uZmlnOjpjb21wYXJlTG9naWNhbChjb25zdCBSZXNUYWJsZV9jb25maWcmIG8pIGNvbnN0IHsKLSAgICBpZiAobWNjICE9IG8ubWNjKSB7Ci0gICAgICAgIHJldHVybiBtY2MgPCBvLm1jYyA/IC0xIDogMTsKLSAgICB9Ci0gICAgaWYgKG1uYyAhPSBvLm1uYykgewotICAgICAgICByZXR1cm4gbW5jIDwgby5tbmMgPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChsYW5ndWFnZVswXSAhPSBvLmxhbmd1YWdlWzBdKSB7Ci0gICAgICAgIHJldHVybiBsYW5ndWFnZVswXSA8IG8ubGFuZ3VhZ2VbMF0gPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChsYW5ndWFnZVsxXSAhPSBvLmxhbmd1YWdlWzFdKSB7Ci0gICAgICAgIHJldHVybiBsYW5ndWFnZVsxXSA8IG8ubGFuZ3VhZ2VbMV0gPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChjb3VudHJ5WzBdICE9IG8uY291bnRyeVswXSkgewotICAgICAgICByZXR1cm4gY291bnRyeVswXSA8IG8uY291bnRyeVswXSA/IC0xIDogMTsKLSAgICB9Ci0gICAgaWYgKGNvdW50cnlbMV0gIT0gby5jb3VudHJ5WzFdKSB7Ci0gICAgICAgIHJldHVybiBjb3VudHJ5WzFdIDwgby5jb3VudHJ5WzFdID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAoKHNjcmVlbkxheW91dCAmIE1BU0tfTEFZT1VURElSKSAhPSAoby5zY3JlZW5MYXlvdXQgJiBNQVNLX0xBWU9VVERJUikpIHsKLSAgICAgICAgcmV0dXJuIChzY3JlZW5MYXlvdXQgJiBNQVNLX0xBWU9VVERJUikgPCAoby5zY3JlZW5MYXlvdXQgJiBNQVNLX0xBWU9VVERJUikgPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChzbWFsbGVzdFNjcmVlbldpZHRoRHAgIT0gby5zbWFsbGVzdFNjcmVlbldpZHRoRHApIHsKLSAgICAgICAgcmV0dXJuIHNtYWxsZXN0U2NyZWVuV2lkdGhEcCA8IG8uc21hbGxlc3RTY3JlZW5XaWR0aERwID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAoc2NyZWVuV2lkdGhEcCAhPSBvLnNjcmVlbldpZHRoRHApIHsKLSAgICAgICAgcmV0dXJuIHNjcmVlbldpZHRoRHAgPCBvLnNjcmVlbldpZHRoRHAgPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChzY3JlZW5IZWlnaHREcCAhPSBvLnNjcmVlbkhlaWdodERwKSB7Ci0gICAgICAgIHJldHVybiBzY3JlZW5IZWlnaHREcCA8IG8uc2NyZWVuSGVpZ2h0RHAgPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChzY3JlZW5XaWR0aCAhPSBvLnNjcmVlbldpZHRoKSB7Ci0gICAgICAgIHJldHVybiBzY3JlZW5XaWR0aCA8IG8uc2NyZWVuV2lkdGggPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChzY3JlZW5IZWlnaHQgIT0gby5zY3JlZW5IZWlnaHQpIHsKLSAgICAgICAgcmV0dXJuIHNjcmVlbkhlaWdodCA8IG8uc2NyZWVuSGVpZ2h0ID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAoZGVuc2l0eSAhPSBvLmRlbnNpdHkpIHsKLSAgICAgICAgcmV0dXJuIGRlbnNpdHkgPCBvLmRlbnNpdHkgPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChvcmllbnRhdGlvbiAhPSBvLm9yaWVudGF0aW9uKSB7Ci0gICAgICAgIHJldHVybiBvcmllbnRhdGlvbiA8IG8ub3JpZW50YXRpb24gPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmICh0b3VjaHNjcmVlbiAhPSBvLnRvdWNoc2NyZWVuKSB7Ci0gICAgICAgIHJldHVybiB0b3VjaHNjcmVlbiA8IG8udG91Y2hzY3JlZW4gPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChpbnB1dCAhPSBvLmlucHV0KSB7Ci0gICAgICAgIHJldHVybiBpbnB1dCA8IG8uaW5wdXQgPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChzY3JlZW5MYXlvdXQgIT0gby5zY3JlZW5MYXlvdXQpIHsKLSAgICAgICAgcmV0dXJuIHNjcmVlbkxheW91dCA8IG8uc2NyZWVuTGF5b3V0ID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAodWlNb2RlICE9IG8udWlNb2RlKSB7Ci0gICAgICAgIHJldHVybiB1aU1vZGUgPCBvLnVpTW9kZSA/IC0xIDogMTsKLSAgICB9Ci0gICAgaWYgKHZlcnNpb24gIT0gby52ZXJzaW9uKSB7Ci0gICAgICAgIHJldHVybiB2ZXJzaW9uIDwgby52ZXJzaW9uID8gLTEgOiAxOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFJlc1RhYmxlX2NvbmZpZzo6ZGlmZihjb25zdCBSZXNUYWJsZV9jb25maWcmIG8pIGNvbnN0IHsKLSAgICBpbnQgZGlmZnMgPSAwOwotICAgIGlmIChtY2MgIT0gby5tY2MpIGRpZmZzIHw9IENPTkZJR19NQ0M7Ci0gICAgaWYgKG1uYyAhPSBvLm1uYykgZGlmZnMgfD0gQ09ORklHX01OQzsKLSAgICBpZiAobG9jYWxlICE9IG8ubG9jYWxlKSBkaWZmcyB8PSBDT05GSUdfTE9DQUxFOwotICAgIGlmIChvcmllbnRhdGlvbiAhPSBvLm9yaWVudGF0aW9uKSBkaWZmcyB8PSBDT05GSUdfT1JJRU5UQVRJT047Ci0gICAgaWYgKGRlbnNpdHkgIT0gby5kZW5zaXR5KSBkaWZmcyB8PSBDT05GSUdfREVOU0lUWTsKLSAgICBpZiAodG91Y2hzY3JlZW4gIT0gby50b3VjaHNjcmVlbikgZGlmZnMgfD0gQ09ORklHX1RPVUNIU0NSRUVOOwotICAgIGlmICgoKGlucHV0RmxhZ3Neby5pbnB1dEZsYWdzKSYoTUFTS19LRVlTSElEREVOfE1BU0tfTkFWSElEREVOKSkgIT0gMCkKLSAgICAgICAgICAgIGRpZmZzIHw9IENPTkZJR19LRVlCT0FSRF9ISURERU47Ci0gICAgaWYgKGtleWJvYXJkICE9IG8ua2V5Ym9hcmQpIGRpZmZzIHw9IENPTkZJR19LRVlCT0FSRDsKLSAgICBpZiAobmF2aWdhdGlvbiAhPSBvLm5hdmlnYXRpb24pIGRpZmZzIHw9IENPTkZJR19OQVZJR0FUSU9OOwotICAgIGlmIChzY3JlZW5TaXplICE9IG8uc2NyZWVuU2l6ZSkgZGlmZnMgfD0gQ09ORklHX1NDUkVFTl9TSVpFOwotICAgIGlmICh2ZXJzaW9uICE9IG8udmVyc2lvbikgZGlmZnMgfD0gQ09ORklHX1ZFUlNJT047Ci0gICAgaWYgKChzY3JlZW5MYXlvdXQgJiBNQVNLX0xBWU9VVERJUikgIT0gKG8uc2NyZWVuTGF5b3V0ICYgTUFTS19MQVlPVVRESVIpKSBkaWZmcyB8PSBDT05GSUdfTEFZT1VURElSOwotICAgIGlmICgoc2NyZWVuTGF5b3V0ICYgfk1BU0tfTEFZT1VURElSKSAhPSAoby5zY3JlZW5MYXlvdXQgJiB+TUFTS19MQVlPVVRESVIpKSBkaWZmcyB8PSBDT05GSUdfU0NSRUVOX0xBWU9VVDsKLSAgICBpZiAodWlNb2RlICE9IG8udWlNb2RlKSBkaWZmcyB8PSBDT05GSUdfVUlfTU9ERTsKLSAgICBpZiAoc21hbGxlc3RTY3JlZW5XaWR0aERwICE9IG8uc21hbGxlc3RTY3JlZW5XaWR0aERwKSBkaWZmcyB8PSBDT05GSUdfU01BTExFU1RfU0NSRUVOX1NJWkU7Ci0gICAgaWYgKHNjcmVlblNpemVEcCAhPSBvLnNjcmVlblNpemVEcCkgZGlmZnMgfD0gQ09ORklHX1NDUkVFTl9TSVpFOwotICAgIHJldHVybiBkaWZmczsKLX0KLQotYm9vbCBSZXNUYWJsZV9jb25maWc6OmlzTW9yZVNwZWNpZmljVGhhbihjb25zdCBSZXNUYWJsZV9jb25maWcmIG8pIGNvbnN0IHsKLSAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBkZWZpbmVzIHRoZSBpbXBvcnRhbmNlIG9mIG9uZQotICAgIC8vIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIG92ZXIgYW5vdGhlci4gIFRob3NlIHRlc3RzIGZpcnN0IGFyZSBtb3JlCi0gICAgLy8gaW1wb3J0YW50LCB0cnVtcGluZyBhbnkgdmFsdWVzIGluIHRob3NlIGZvbGxvd2luZyB0aGVtLgotICAgIGlmIChpbXNpIHx8IG8uaW1zaSkgewotICAgICAgICBpZiAobWNjICE9IG8ubWNjKSB7Ci0gICAgICAgICAgICBpZiAoIW1jYykgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFvLm1jYykgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobW5jICE9IG8ubW5jKSB7Ci0gICAgICAgICAgICBpZiAoIW1uYykgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFvLm1uYykgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobG9jYWxlIHx8IG8ubG9jYWxlKSB7Ci0gICAgICAgIGlmIChsYW5ndWFnZVswXSAhPSBvLmxhbmd1YWdlWzBdKSB7Ci0gICAgICAgICAgICBpZiAoIWxhbmd1YWdlWzBdKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIW8ubGFuZ3VhZ2VbMF0pIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvdW50cnlbMF0gIT0gby5jb3VudHJ5WzBdKSB7Ci0gICAgICAgICAgICBpZiAoIWNvdW50cnlbMF0pIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghby5jb3VudHJ5WzBdKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzY3JlZW5MYXlvdXQgfHwgby5zY3JlZW5MYXlvdXQpIHsKLSAgICAgICAgaWYgKCgoc2NyZWVuTGF5b3V0Xm8uc2NyZWVuTGF5b3V0KSAmIE1BU0tfTEFZT1VURElSKSAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoIShzY3JlZW5MYXlvdXQgJiBNQVNLX0xBWU9VVERJUikpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghKG8uc2NyZWVuTGF5b3V0ICYgTUFTS19MQVlPVVRESVIpKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzbWFsbGVzdFNjcmVlbldpZHRoRHAgfHwgby5zbWFsbGVzdFNjcmVlbldpZHRoRHApIHsKLSAgICAgICAgaWYgKHNtYWxsZXN0U2NyZWVuV2lkdGhEcCAhPSBvLnNtYWxsZXN0U2NyZWVuV2lkdGhEcCkgewotICAgICAgICAgICAgaWYgKCFzbWFsbGVzdFNjcmVlbldpZHRoRHApIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghby5zbWFsbGVzdFNjcmVlbldpZHRoRHApIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHNjcmVlblNpemVEcCB8fCBvLnNjcmVlblNpemVEcCkgewotICAgICAgICBpZiAoc2NyZWVuV2lkdGhEcCAhPSBvLnNjcmVlbldpZHRoRHApIHsKLSAgICAgICAgICAgIGlmICghc2NyZWVuV2lkdGhEcCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFvLnNjcmVlbldpZHRoRHApIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNjcmVlbkhlaWdodERwICE9IG8uc2NyZWVuSGVpZ2h0RHApIHsKLSAgICAgICAgICAgIGlmICghc2NyZWVuSGVpZ2h0RHApIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghby5zY3JlZW5IZWlnaHREcCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2NyZWVuTGF5b3V0IHx8IG8uc2NyZWVuTGF5b3V0KSB7Ci0gICAgICAgIGlmICgoKHNjcmVlbkxheW91dF5vLnNjcmVlbkxheW91dCkgJiBNQVNLX1NDUkVFTlNJWkUpICE9IDApIHsKLSAgICAgICAgICAgIGlmICghKHNjcmVlbkxheW91dCAmIE1BU0tfU0NSRUVOU0laRSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghKG8uc2NyZWVuTGF5b3V0ICYgTUFTS19TQ1JFRU5TSVpFKSkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCgoc2NyZWVuTGF5b3V0Xm8uc2NyZWVuTGF5b3V0KSAmIE1BU0tfU0NSRUVOTE9ORykgIT0gMCkgewotICAgICAgICAgICAgaWYgKCEoc2NyZWVuTGF5b3V0ICYgTUFTS19TQ1JFRU5MT05HKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCEoby5zY3JlZW5MYXlvdXQgJiBNQVNLX1NDUkVFTkxPTkcpKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChvcmllbnRhdGlvbiAhPSBvLm9yaWVudGF0aW9uKSB7Ci0gICAgICAgIGlmICghb3JpZW50YXRpb24pIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFvLm9yaWVudGF0aW9uKSByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAodWlNb2RlIHx8IG8udWlNb2RlKSB7Ci0gICAgICAgIGlmICgoKHVpTW9kZV5vLnVpTW9kZSkgJiBNQVNLX1VJX01PREVfVFlQRSkgIT0gMCkgewotICAgICAgICAgICAgaWYgKCEodWlNb2RlICYgTUFTS19VSV9NT0RFX1RZUEUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIShvLnVpTW9kZSAmIE1BU0tfVUlfTU9ERV9UWVBFKSkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCgodWlNb2RlXm8udWlNb2RlKSAmIE1BU0tfVUlfTU9ERV9OSUdIVCkgIT0gMCkgewotICAgICAgICAgICAgaWYgKCEodWlNb2RlICYgTUFTS19VSV9NT0RFX05JR0hUKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCEoby51aU1vZGUgJiBNQVNLX1VJX01PREVfTklHSFQpKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIGRlbnNpdHkgaXMgbmV2ZXIgJ21vcmUgc3BlY2lmaWMnCi0gICAgLy8gYXMgdGhlIGRlZmF1bHQganVzdCBlcXVhbHMgMTYwCi0KLSAgICBpZiAodG91Y2hzY3JlZW4gIT0gby50b3VjaHNjcmVlbikgewotICAgICAgICBpZiAoIXRvdWNoc2NyZWVuKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghby50b3VjaHNjcmVlbikgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGlucHV0IHx8IG8uaW5wdXQpIHsKLSAgICAgICAgaWYgKCgoaW5wdXRGbGFnc15vLmlucHV0RmxhZ3MpICYgTUFTS19LRVlTSElEREVOKSAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoIShpbnB1dEZsYWdzICYgTUFTS19LRVlTSElEREVOKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCEoby5pbnB1dEZsYWdzICYgTUFTS19LRVlTSElEREVOKSkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKChpbnB1dEZsYWdzXm8uaW5wdXRGbGFncykgJiBNQVNLX05BVkhJRERFTikgIT0gMCkgewotICAgICAgICAgICAgaWYgKCEoaW5wdXRGbGFncyAmIE1BU0tfTkFWSElEREVOKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCEoby5pbnB1dEZsYWdzICYgTUFTS19OQVZISURERU4pKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrZXlib2FyZCAhPSBvLmtleWJvYXJkKSB7Ci0gICAgICAgICAgICBpZiAoIWtleWJvYXJkKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIW8ua2V5Ym9hcmQpIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5hdmlnYXRpb24gIT0gby5uYXZpZ2F0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoIW5hdmlnYXRpb24pIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghby5uYXZpZ2F0aW9uKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzY3JlZW5TaXplIHx8IG8uc2NyZWVuU2l6ZSkgewotICAgICAgICBpZiAoc2NyZWVuV2lkdGggIT0gby5zY3JlZW5XaWR0aCkgewotICAgICAgICAgICAgaWYgKCFzY3JlZW5XaWR0aCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFvLnNjcmVlbldpZHRoKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzY3JlZW5IZWlnaHQgIT0gby5zY3JlZW5IZWlnaHQpIHsKLSAgICAgICAgICAgIGlmICghc2NyZWVuSGVpZ2h0KSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIW8uc2NyZWVuSGVpZ2h0KSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh2ZXJzaW9uIHx8IG8udmVyc2lvbikgewotICAgICAgICBpZiAoc2RrVmVyc2lvbiAhPSBvLnNka1ZlcnNpb24pIHsKLSAgICAgICAgICAgIGlmICghc2RrVmVyc2lvbikgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFvLnNka1ZlcnNpb24pIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1pbm9yVmVyc2lvbiAhPSBvLm1pbm9yVmVyc2lvbikgewotICAgICAgICAgICAgaWYgKCFtaW5vclZlcnNpb24pIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghby5taW5vclZlcnNpb24pIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNUYWJsZV9jb25maWc6OmlzQmV0dGVyVGhhbihjb25zdCBSZXNUYWJsZV9jb25maWcmIG8sCi0gICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogcmVxdWVzdGVkKSBjb25zdCB7Ci0gICAgaWYgKHJlcXVlc3RlZCkgewotICAgICAgICBpZiAoaW1zaSB8fCBvLmltc2kpIHsKLSAgICAgICAgICAgIGlmICgobWNjICE9IG8ubWNjKSAmJiByZXF1ZXN0ZWQtPm1jYykgewotICAgICAgICAgICAgICAgIHJldHVybiAobWNjKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKChtbmMgIT0gby5tbmMpICYmIHJlcXVlc3RlZC0+bW5jKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtbmMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2FsZSB8fCBvLmxvY2FsZSkgewotICAgICAgICAgICAgaWYgKChsYW5ndWFnZVswXSAhPSBvLmxhbmd1YWdlWzBdKSAmJiByZXF1ZXN0ZWQtPmxhbmd1YWdlWzBdKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChsYW5ndWFnZVswXSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoY291bnRyeVswXSAhPSBvLmNvdW50cnlbMF0pICYmIHJlcXVlc3RlZC0+Y291bnRyeVswXSkgewotICAgICAgICAgICAgICAgIHJldHVybiAoY291bnRyeVswXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NyZWVuTGF5b3V0IHx8IG8uc2NyZWVuTGF5b3V0KSB7Ci0gICAgICAgICAgICBpZiAoKChzY3JlZW5MYXlvdXReby5zY3JlZW5MYXlvdXQpICYgTUFTS19MQVlPVVRESVIpICE9IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgKHJlcXVlc3RlZC0+c2NyZWVuTGF5b3V0ICYgTUFTS19MQVlPVVRESVIpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG15TGF5b3V0RGlyID0gc2NyZWVuTGF5b3V0ICYgTUFTS19MQVlPVVRESVI7Ci0gICAgICAgICAgICAgICAgaW50IG9MYXlvdXREaXIgPSBvLnNjcmVlbkxheW91dCAmIE1BU0tfTEFZT1VURElSOwotICAgICAgICAgICAgICAgIHJldHVybiAobXlMYXlvdXREaXIgPiBvTGF5b3V0RGlyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzbWFsbGVzdFNjcmVlbldpZHRoRHAgfHwgby5zbWFsbGVzdFNjcmVlbldpZHRoRHApIHsKLSAgICAgICAgICAgIC8vIFRoZSBjb25maWd1cmF0aW9uIGNsb3Nlc3QgdG8gdGhlIGFjdHVhbCBzaXplIGlzIGJlc3QuCi0gICAgICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCBsYXJnZXIgY29uZmlncyBoYXZlIGFscmVhZHkgYmVlbiBmaWx0ZXJlZAotICAgICAgICAgICAgLy8gb3V0IGF0IHRoaXMgcG9pbnQuICBUaGF0IG1lYW5zIHdlIGp1c3Qgd2FudCB0aGUgbGFyZ2VzdCBvbmUuCi0gICAgICAgICAgICBpZiAoc21hbGxlc3RTY3JlZW5XaWR0aERwICE9IG8uc21hbGxlc3RTY3JlZW5XaWR0aERwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNtYWxsZXN0U2NyZWVuV2lkdGhEcCA+IG8uc21hbGxlc3RTY3JlZW5XaWR0aERwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNjcmVlblNpemVEcCB8fCBvLnNjcmVlblNpemVEcCkgewotICAgICAgICAgICAgLy8gIkJldHRlciIgaXMgYmFzZWQgb24gdGhlIHN1bSBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGJvdGgKLSAgICAgICAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgZnJvbSB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnMuICBXZSBhcmUKLSAgICAgICAgICAgIC8vIGFzc3VtaW5nIHRoZSBpbnZhbGlkIGNvbmZpZ3MgKHdpdGggc21hbGxlciBkaW1lbnMpIGhhdmUKLSAgICAgICAgICAgIC8vIGFscmVhZHkgYmVlbiBmaWx0ZXJlZC4gIE5vdGUgdGhhdCBpZiBhIHBhcnRpY3VsYXIgZGltZW5zaW9uCi0gICAgICAgICAgICAvLyBpcyB1bnNwZWNpZmllZCwgd2Ugd2lsbCBlbmQgdXAgd2l0aCBhIGxhcmdlIHZhbHVlICh0aGUKLSAgICAgICAgICAgIC8vIGRpZmZlcmVuY2UgYmV0d2VlbiAwIGFuZCB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbiksIHdoaWNoIGlzCi0gICAgICAgICAgICAvLyBnb29kIHNpbmNlIHdlIHdpbGwgcHJlZmVyIGEgY29uZmlnIHRoYXQgaGFzIHNwZWNpZmllZCBhCi0gICAgICAgICAgICAvLyBkaW1lbnNpb24gdmFsdWUuCi0gICAgICAgICAgICBpbnQgbXlEZWx0YSA9IDAsIG90aGVyRGVsdGEgPSAwOwotICAgICAgICAgICAgaWYgKHJlcXVlc3RlZC0+c2NyZWVuV2lkdGhEcCkgewotICAgICAgICAgICAgICAgIG15RGVsdGEgKz0gcmVxdWVzdGVkLT5zY3JlZW5XaWR0aERwIC0gc2NyZWVuV2lkdGhEcDsKLSAgICAgICAgICAgICAgICBvdGhlckRlbHRhICs9IHJlcXVlc3RlZC0+c2NyZWVuV2lkdGhEcCAtIG8uc2NyZWVuV2lkdGhEcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQtPnNjcmVlbkhlaWdodERwKSB7Ci0gICAgICAgICAgICAgICAgbXlEZWx0YSArPSByZXF1ZXN0ZWQtPnNjcmVlbkhlaWdodERwIC0gc2NyZWVuSGVpZ2h0RHA7Ci0gICAgICAgICAgICAgICAgb3RoZXJEZWx0YSArPSByZXF1ZXN0ZWQtPnNjcmVlbkhlaWdodERwIC0gby5zY3JlZW5IZWlnaHREcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vQUxPR0koIkNvbXBhcmluZyB0aGlzICVkeCVkIHRvIG90aGVyICVkeCVkIGluICVkeCVkOiBteURlbHRhPSVkIG90aGVyRGVsdGE9JWQiLAotICAgICAgICAgICAgLy8gICAgc2NyZWVuV2lkdGhEcCwgc2NyZWVuSGVpZ2h0RHAsIG8uc2NyZWVuV2lkdGhEcCwgby5zY3JlZW5IZWlnaHREcCwKLSAgICAgICAgICAgIC8vICAgIHJlcXVlc3RlZC0+c2NyZWVuV2lkdGhEcCwgcmVxdWVzdGVkLT5zY3JlZW5IZWlnaHREcCwgbXlEZWx0YSwgb3RoZXJEZWx0YSk7Ci0gICAgICAgICAgICBpZiAobXlEZWx0YSAhPSBvdGhlckRlbHRhKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG15RGVsdGEgPCBvdGhlckRlbHRhOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNjcmVlbkxheW91dCB8fCBvLnNjcmVlbkxheW91dCkgewotICAgICAgICAgICAgaWYgKCgoc2NyZWVuTGF5b3V0Xm8uc2NyZWVuTGF5b3V0KSAmIE1BU0tfU0NSRUVOU0laRSkgIT0gMAotICAgICAgICAgICAgICAgICAgICAmJiAocmVxdWVzdGVkLT5zY3JlZW5MYXlvdXQgJiBNQVNLX1NDUkVFTlNJWkUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQSBsaXR0bGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaGVyZTogdW5kZWZpbmVkIGlzCi0gICAgICAgICAgICAgICAgLy8gY29uc2lkZXJlZCBlcXVpdmFsZW50IHRvIG5vcm1hbC4gIEJ1dCBvbmx5IGlmIHRoZQotICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RlZCBzaXplIGlzIGF0IGxlYXN0IG5vcm1hbDsgb3RoZXJ3aXNlLCBzbWFsbAotICAgICAgICAgICAgICAgIC8vIGlzIGJldHRlciB0aGFuIHRoZSBkZWZhdWx0LgotICAgICAgICAgICAgICAgIGludCBteVNMID0gKHNjcmVlbkxheW91dCAmIE1BU0tfU0NSRUVOU0laRSk7Ci0gICAgICAgICAgICAgICAgaW50IG9TTCA9IChvLnNjcmVlbkxheW91dCAmIE1BU0tfU0NSRUVOU0laRSk7Ci0gICAgICAgICAgICAgICAgaW50IGZpeGVkTXlTTCA9IG15U0w7Ci0gICAgICAgICAgICAgICAgaW50IGZpeGVkT1NMID0gb1NMOwotICAgICAgICAgICAgICAgIGlmICgocmVxdWVzdGVkLT5zY3JlZW5MYXlvdXQgJiBNQVNLX1NDUkVFTlNJWkUpID49IFNDUkVFTlNJWkVfTk9STUFMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaXhlZE15U0wgPT0gMCkgZml4ZWRNeVNMID0gU0NSRUVOU0laRV9OT1JNQUw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaXhlZE9TTCA9PSAwKSBmaXhlZE9TTCA9IFNDUkVFTlNJWkVfTk9STUFMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBGb3Igc2NyZWVuIHNpemUsIHRoZSBiZXN0IG1hdGNoIGlzIHRoZSBvbmUgdGhhdCBpcwotICAgICAgICAgICAgICAgIC8vIGNsb3Nlc3QgdG8gdGhlIHJlcXVlc3RlZCBzY3JlZW4gc2l6ZSwgYnV0IG5vdCBvdmVyCi0gICAgICAgICAgICAgICAgLy8gKHRoZSBub3Qgb3ZlciBwYXJ0IGlzIGRlYWx0IHdpdGggaW4gbWF0Y2goKSBiZWxvdykuCi0gICAgICAgICAgICAgICAgaWYgKGZpeGVkTXlTTCA9PSBmaXhlZE9TTCkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdHdvIGFyZSB0aGUgc2FtZSwgYnV0ICd0aGlzJyBpcyBhY3R1YWxseQotICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQsIHRoZW4gdGhlIG90aGVyIGlzIHJlYWxseSBhIGJldHRlciBtYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG15U0wgPT0gMCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGZpeGVkTXlTTCAhPSBmaXhlZE9TTCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4ZWRNeVNMID4gZml4ZWRPU0w7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCgoc2NyZWVuTGF5b3V0Xm8uc2NyZWVuTGF5b3V0KSAmIE1BU0tfU0NSRUVOTE9ORykgIT0gMAotICAgICAgICAgICAgICAgICAgICAmJiAocmVxdWVzdGVkLT5zY3JlZW5MYXlvdXQgJiBNQVNLX1NDUkVFTkxPTkcpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChzY3JlZW5MYXlvdXQgJiBNQVNLX1NDUkVFTkxPTkcpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChvcmllbnRhdGlvbiAhPSBvLm9yaWVudGF0aW9uKSAmJiByZXF1ZXN0ZWQtPm9yaWVudGF0aW9uKSB7Ci0gICAgICAgICAgICByZXR1cm4gKG9yaWVudGF0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1aU1vZGUgfHwgby51aU1vZGUpIHsKLSAgICAgICAgICAgIGlmICgoKHVpTW9kZV5vLnVpTW9kZSkgJiBNQVNLX1VJX01PREVfVFlQRSkgIT0gMAotICAgICAgICAgICAgICAgICAgICAmJiAocmVxdWVzdGVkLT51aU1vZGUgJiBNQVNLX1VJX01PREVfVFlQRSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKHVpTW9kZSAmIE1BU0tfVUlfTU9ERV9UWVBFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoKHVpTW9kZV5vLnVpTW9kZSkgJiBNQVNLX1VJX01PREVfTklHSFQpICE9IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgKHJlcXVlc3RlZC0+dWlNb2RlICYgTUFTS19VSV9NT0RFX05JR0hUKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAodWlNb2RlICYgTUFTS19VSV9NT0RFX05JR0hUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzY3JlZW5UeXBlIHx8IG8uc2NyZWVuVHlwZSkgewotICAgICAgICAgICAgaWYgKGRlbnNpdHkgIT0gby5kZW5zaXR5KSB7Ci0gICAgICAgICAgICAgICAgLy8gZGVuc2l0eSBpcyB0b3VnaC4gIEFueSBkZW5zaXR5IGlzIHBvdGVudGlhbGx5IHVzZWZ1bAotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHN5c3RlbSB3aWxsIHNjYWxlIGl0LiAgU2NhbGluZyBkb3duCi0gICAgICAgICAgICAgICAgLy8gaXMgZ2VuZXJhbGx5IGJldHRlciB0aGFuIHNjYWxpbmcgdXAuCi0gICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBkZW5zaXR5IGNvdW50cyBhcyAxNjBkcGkgKHRoZSBzeXN0ZW0gZGVmYXVsdCkKLSAgICAgICAgICAgICAgICAvLyBUT0RPIC0gcmVtb3ZlIDE2MCBjb25zdGFudHMKLSAgICAgICAgICAgICAgICBpbnQgaCA9IChkZW5zaXR5P2RlbnNpdHk6MTYwKTsKLSAgICAgICAgICAgICAgICBpbnQgbCA9IChvLmRlbnNpdHk/by5kZW5zaXR5OjE2MCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBiSW1CaWdnZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChsID4gaCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgdCA9IGg7Ci0gICAgICAgICAgICAgICAgICAgIGggPSBsOwotICAgICAgICAgICAgICAgICAgICBsID0gdDsKLSAgICAgICAgICAgICAgICAgICAgYkltQmlnZ2VyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaW50IHJlcVZhbHVlID0gKHJlcXVlc3RlZC0+ZGVuc2l0eT9yZXF1ZXN0ZWQtPmRlbnNpdHk6MTYwKTsKLSAgICAgICAgICAgICAgICBpZiAocmVxVmFsdWUgPj0gaCkgewotICAgICAgICAgICAgICAgICAgICAvLyByZXF1ZXN0ZWQgdmFsdWUgaGlnaGVyIHRoYW4gYm90aCBsIGFuZCBoLCBnaXZlIGgKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJJbUJpZ2dlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGwgPj0gcmVxVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWVzdGVkIHZhbHVlIGxvd2VyIHRoYW4gYm90aCBsIGFuZCBoLCBnaXZlIGwKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFiSW1CaWdnZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIHNheWluZyB0aGF0IHNjYWxpbmcgZG93biBpcyAyeCBiZXR0ZXIgdGhhbiB1cAotICAgICAgICAgICAgICAgIGlmICgoKDIgKiBsKSAtIHJlcVZhbHVlKSAqIGggPiByZXFWYWx1ZSAqIHJlcVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAhYkltQmlnZ2VyOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiSW1CaWdnZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKHRvdWNoc2NyZWVuICE9IG8udG91Y2hzY3JlZW4pICYmIHJlcXVlc3RlZC0+dG91Y2hzY3JlZW4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKHRvdWNoc2NyZWVuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbnB1dCB8fCBvLmlucHV0KSB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga2V5c0hpZGRlbiA9IGlucHV0RmxhZ3MgJiBNQVNLX0tFWVNISURERU47Ci0gICAgICAgICAgICBjb25zdCBpbnQgb0tleXNIaWRkZW4gPSBvLmlucHV0RmxhZ3MgJiBNQVNLX0tFWVNISURERU47Ci0gICAgICAgICAgICBpZiAoa2V5c0hpZGRlbiAhPSBvS2V5c0hpZGRlbikgewotICAgICAgICAgICAgICAgIGNvbnN0IGludCByZXFLZXlzSGlkZGVuID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZC0+aW5wdXRGbGFncyAmIE1BU0tfS0VZU0hJRERFTjsKLSAgICAgICAgICAgICAgICBpZiAocmVxS2V5c0hpZGRlbikgewotCi0gICAgICAgICAgICAgICAgICAgIGlmICgha2V5c0hpZGRlbikgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW9LZXlzSGlkZGVuKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHksIHdlIGNvdW50IEtFWVNISURERU5fTk8gYXMgYmVpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNhbWUgYXMgS0VZU0hJRERFTl9TT0ZULiAgSGVyZSB3ZSBkaXNhbWJpZ3VhdGUKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgYnkgbWFraW5nIGFuIGV4YWN0IG1hdGNoIG1vcmUgc3BlY2lmaWMuCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXFLZXlzSGlkZGVuID09IGtleXNIaWRkZW4pIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVxS2V5c0hpZGRlbiA9PSBvS2V5c0hpZGRlbikgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgaW50IG5hdkhpZGRlbiA9IGlucHV0RmxhZ3MgJiBNQVNLX05BVkhJRERFTjsKLSAgICAgICAgICAgIGNvbnN0IGludCBvTmF2SGlkZGVuID0gby5pbnB1dEZsYWdzICYgTUFTS19OQVZISURERU47Ci0gICAgICAgICAgICBpZiAobmF2SGlkZGVuICE9IG9OYXZIaWRkZW4pIHsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVxTmF2SGlkZGVuID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZC0+aW5wdXRGbGFncyAmIE1BU0tfTkFWSElEREVOOwotICAgICAgICAgICAgICAgIGlmIChyZXFOYXZIaWRkZW4pIHsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIW5hdkhpZGRlbikgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW9OYXZIaWRkZW4pIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKChrZXlib2FyZCAhPSBvLmtleWJvYXJkKSAmJiByZXF1ZXN0ZWQtPmtleWJvYXJkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChrZXlib2FyZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgobmF2aWdhdGlvbiAhPSBvLm5hdmlnYXRpb24pICYmIHJlcXVlc3RlZC0+bmF2aWdhdGlvbikgewotICAgICAgICAgICAgICAgIHJldHVybiAobmF2aWdhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NyZWVuU2l6ZSB8fCBvLnNjcmVlblNpemUpIHsKLSAgICAgICAgICAgIC8vICJCZXR0ZXIiIGlzIGJhc2VkIG9uIHRoZSBzdW0gb2YgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBib3RoCi0gICAgICAgICAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IGZyb20gdGhlIHJlcXVlc3RlZCBkaW1lbnNpb25zLiAgV2UgYXJlCi0gICAgICAgICAgICAvLyBhc3N1bWluZyB0aGUgaW52YWxpZCBjb25maWdzICh3aXRoIHNtYWxsZXIgc2l6ZXMpIGhhdmUKLSAgICAgICAgICAgIC8vIGFscmVhZHkgYmVlbiBmaWx0ZXJlZC4gIE5vdGUgdGhhdCBpZiBhIHBhcnRpY3VsYXIgZGltZW5zaW9uCi0gICAgICAgICAgICAvLyBpcyB1bnNwZWNpZmllZCwgd2Ugd2lsbCBlbmQgdXAgd2l0aCBhIGxhcmdlIHZhbHVlICh0aGUKLSAgICAgICAgICAgIC8vIGRpZmZlcmVuY2UgYmV0d2VlbiAwIGFuZCB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbiksIHdoaWNoIGlzCi0gICAgICAgICAgICAvLyBnb29kIHNpbmNlIHdlIHdpbGwgcHJlZmVyIGEgY29uZmlnIHRoYXQgaGFzIHNwZWNpZmllZCBhCi0gICAgICAgICAgICAvLyBzaXplIHZhbHVlLgotICAgICAgICAgICAgaW50IG15RGVsdGEgPSAwLCBvdGhlckRlbHRhID0gMDsKLSAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQtPnNjcmVlbldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgbXlEZWx0YSArPSByZXF1ZXN0ZWQtPnNjcmVlbldpZHRoIC0gc2NyZWVuV2lkdGg7Ci0gICAgICAgICAgICAgICAgb3RoZXJEZWx0YSArPSByZXF1ZXN0ZWQtPnNjcmVlbldpZHRoIC0gby5zY3JlZW5XaWR0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQtPnNjcmVlbkhlaWdodCkgewotICAgICAgICAgICAgICAgIG15RGVsdGEgKz0gcmVxdWVzdGVkLT5zY3JlZW5IZWlnaHQgLSBzY3JlZW5IZWlnaHQ7Ci0gICAgICAgICAgICAgICAgb3RoZXJEZWx0YSArPSByZXF1ZXN0ZWQtPnNjcmVlbkhlaWdodCAtIG8uc2NyZWVuSGVpZ2h0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG15RGVsdGEgIT0gb3RoZXJEZWx0YSkgewotICAgICAgICAgICAgICAgIHJldHVybiBteURlbHRhIDwgb3RoZXJEZWx0YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICh2ZXJzaW9uIHx8IG8udmVyc2lvbikgewotICAgICAgICAgICAgaWYgKChzZGtWZXJzaW9uICE9IG8uc2RrVmVyc2lvbikgJiYgcmVxdWVzdGVkLT5zZGtWZXJzaW9uKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChzZGtWZXJzaW9uID4gby5zZGtWZXJzaW9uKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKChtaW5vclZlcnNpb24gIT0gby5taW5vclZlcnNpb24pICYmCi0gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZC0+bWlub3JWZXJzaW9uKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtaW5vclZlcnNpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaXNNb3JlU3BlY2lmaWNUaGFuKG8pOwotfQotCi1ib29sIFJlc1RhYmxlX2NvbmZpZzo6bWF0Y2goY29uc3QgUmVzVGFibGVfY29uZmlnJiBzZXR0aW5ncykgY29uc3QgewotICAgIGlmIChpbXNpICE9IDApIHsKLSAgICAgICAgaWYgKG1jYyAhPSAwICYmIG1jYyAhPSBzZXR0aW5ncy5tY2MpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobW5jICE9IDAgJiYgbW5jICE9IHNldHRpbmdzLm1uYykgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChsb2NhbGUgIT0gMCkgewotICAgICAgICBpZiAobGFuZ3VhZ2VbMF0gIT0gMAotICAgICAgICAgICAgJiYgKGxhbmd1YWdlWzBdICE9IHNldHRpbmdzLmxhbmd1YWdlWzBdCi0gICAgICAgICAgICAgICAgfHwgbGFuZ3VhZ2VbMV0gIT0gc2V0dGluZ3MubGFuZ3VhZ2VbMV0pKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvdW50cnlbMF0gIT0gMAotICAgICAgICAgICAgJiYgKGNvdW50cnlbMF0gIT0gc2V0dGluZ3MuY291bnRyeVswXQotICAgICAgICAgICAgICAgIHx8IGNvdW50cnlbMV0gIT0gc2V0dGluZ3MuY291bnRyeVsxXSkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc2NyZWVuQ29uZmlnICE9IDApIHsKLSAgICAgICAgY29uc3QgaW50IGxheW91dERpciA9IHNjcmVlbkxheW91dCZNQVNLX0xBWU9VVERJUjsKLSAgICAgICAgY29uc3QgaW50IHNldExheW91dERpciA9IHNldHRpbmdzLnNjcmVlbkxheW91dCZNQVNLX0xBWU9VVERJUjsKLSAgICAgICAgaWYgKGxheW91dERpciAhPSAwICYmIGxheW91dERpciAhPSBzZXRMYXlvdXREaXIpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGludCBzY3JlZW5TaXplID0gc2NyZWVuTGF5b3V0Jk1BU0tfU0NSRUVOU0laRTsKLSAgICAgICAgY29uc3QgaW50IHNldFNjcmVlblNpemUgPSBzZXR0aW5ncy5zY3JlZW5MYXlvdXQmTUFTS19TQ1JFRU5TSVpFOwotICAgICAgICAvLyBBbnkgc2NyZWVuIHNpemVzIGZvciBsYXJnZXIgc2NyZWVucyB0aGFuIHRoZSBzZXR0aW5nIGRvIG5vdAotICAgICAgICAvLyBtYXRjaC4KLSAgICAgICAgaWYgKHNjcmVlblNpemUgIT0gMCAmJiBzY3JlZW5TaXplID4gc2V0U2NyZWVuU2l6ZSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgaW50IHNjcmVlbkxvbmcgPSBzY3JlZW5MYXlvdXQmTUFTS19TQ1JFRU5MT05HOwotICAgICAgICBjb25zdCBpbnQgc2V0U2NyZWVuTG9uZyA9IHNldHRpbmdzLnNjcmVlbkxheW91dCZNQVNLX1NDUkVFTkxPTkc7Ci0gICAgICAgIGlmIChzY3JlZW5Mb25nICE9IDAgJiYgc2NyZWVuTG9uZyAhPSBzZXRTY3JlZW5Mb25nKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBpbnQgdWlNb2RlVHlwZSA9IHVpTW9kZSZNQVNLX1VJX01PREVfVFlQRTsKLSAgICAgICAgY29uc3QgaW50IHNldFVpTW9kZVR5cGUgPSBzZXR0aW5ncy51aU1vZGUmTUFTS19VSV9NT0RFX1RZUEU7Ci0gICAgICAgIGlmICh1aU1vZGVUeXBlICE9IDAgJiYgdWlNb2RlVHlwZSAhPSBzZXRVaU1vZGVUeXBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBpbnQgdWlNb2RlTmlnaHQgPSB1aU1vZGUmTUFTS19VSV9NT0RFX05JR0hUOwotICAgICAgICBjb25zdCBpbnQgc2V0VWlNb2RlTmlnaHQgPSBzZXR0aW5ncy51aU1vZGUmTUFTS19VSV9NT0RFX05JR0hUOwotICAgICAgICBpZiAodWlNb2RlTmlnaHQgIT0gMCAmJiB1aU1vZGVOaWdodCAhPSBzZXRVaU1vZGVOaWdodCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNtYWxsZXN0U2NyZWVuV2lkdGhEcCAhPSAwCi0gICAgICAgICAgICAgICAgJiYgc21hbGxlc3RTY3JlZW5XaWR0aERwID4gc2V0dGluZ3Muc21hbGxlc3RTY3JlZW5XaWR0aERwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHNjcmVlblNpemVEcCAhPSAwKSB7Ci0gICAgICAgIGlmIChzY3JlZW5XaWR0aERwICE9IDAgJiYgc2NyZWVuV2lkdGhEcCA+IHNldHRpbmdzLnNjcmVlbldpZHRoRHApIHsKLSAgICAgICAgICAgIC8vQUxPR0koIkZpbHRlcmluZyBvdXQgd2lkdGggJWQgaW4gcmVxdWVzdGVkICVkIiwgc2NyZWVuV2lkdGhEcCwgc2V0dGluZ3Muc2NyZWVuV2lkdGhEcCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNjcmVlbkhlaWdodERwICE9IDAgJiYgc2NyZWVuSGVpZ2h0RHAgPiBzZXR0aW5ncy5zY3JlZW5IZWlnaHREcCkgewotICAgICAgICAgICAgLy9BTE9HSSgiRmlsdGVyaW5nIG91dCBoZWlnaHQgJWQgaW4gcmVxdWVzdGVkICVkIiwgc2NyZWVuSGVpZ2h0RHAsIHNldHRpbmdzLnNjcmVlbkhlaWdodERwKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc2NyZWVuVHlwZSAhPSAwKSB7Ci0gICAgICAgIGlmIChvcmllbnRhdGlvbiAhPSAwICYmIG9yaWVudGF0aW9uICE9IHNldHRpbmdzLm9yaWVudGF0aW9uKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZGVuc2l0eSBhbHdheXMgbWF0Y2hlcyAtIHdlIGNhbiBzY2FsZSBpdC4gIFNlZSBpc0JldHRlclRoYW4KLSAgICAgICAgaWYgKHRvdWNoc2NyZWVuICE9IDAgJiYgdG91Y2hzY3JlZW4gIT0gc2V0dGluZ3MudG91Y2hzY3JlZW4pIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaW5wdXQgIT0gMCkgewotICAgICAgICBjb25zdCBpbnQga2V5c0hpZGRlbiA9IGlucHV0RmxhZ3MmTUFTS19LRVlTSElEREVOOwotICAgICAgICBjb25zdCBpbnQgc2V0S2V5c0hpZGRlbiA9IHNldHRpbmdzLmlucHV0RmxhZ3MmTUFTS19LRVlTSElEREVOOwotICAgICAgICBpZiAoa2V5c0hpZGRlbiAhPSAwICYmIGtleXNIaWRkZW4gIT0gc2V0S2V5c0hpZGRlbikgewotICAgICAgICAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHksIHdlIGNvdW50IGEgcmVxdWVzdCBmb3IgS0VZU0hJRERFTl9OTyBhcyBhbHNvCi0gICAgICAgICAgICAvLyBtYXRjaGluZyB0aGUgbW9yZSByZWNlbnQgS0VZU0hJRERFTl9TT0ZULiAgQmFzaWNhbGx5Ci0gICAgICAgICAgICAvLyBLRVlTSElEREVOX05PIG1lYW5zIHRoZXJlIGlzIHNvbWUga2luZCBvZiBrZXlib2FyZCBhdmFpbGFibGUuCi0gICAgICAgICAgICAvL0FMT0dJKCJNYXRjaGluZyBrZXlzSGlkZGVuOiBoYXZlPSVkLCBjb25maWc9JWRcbiIsIGtleXNIaWRkZW4sIHNldEtleXNIaWRkZW4pOwotICAgICAgICAgICAgaWYgKGtleXNIaWRkZW4gIT0gS0VZU0hJRERFTl9OTyB8fCBzZXRLZXlzSGlkZGVuICE9IEtFWVNISURERU5fU09GVCkgewotICAgICAgICAgICAgICAgIC8vQUxPR0koIk5vIG1hdGNoISIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjb25zdCBpbnQgbmF2SGlkZGVuID0gaW5wdXRGbGFncyZNQVNLX05BVkhJRERFTjsKLSAgICAgICAgY29uc3QgaW50IHNldE5hdkhpZGRlbiA9IHNldHRpbmdzLmlucHV0RmxhZ3MmTUFTS19OQVZISURERU47Ci0gICAgICAgIGlmIChuYXZIaWRkZW4gIT0gMCAmJiBuYXZIaWRkZW4gIT0gc2V0TmF2SGlkZGVuKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtleWJvYXJkICE9IDAgJiYga2V5Ym9hcmQgIT0gc2V0dGluZ3Mua2V5Ym9hcmQpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobmF2aWdhdGlvbiAhPSAwICYmIG5hdmlnYXRpb24gIT0gc2V0dGluZ3MubmF2aWdhdGlvbikgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChzY3JlZW5TaXplICE9IDApIHsKLSAgICAgICAgaWYgKHNjcmVlbldpZHRoICE9IDAgJiYgc2NyZWVuV2lkdGggPiBzZXR0aW5ncy5zY3JlZW5XaWR0aCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzY3JlZW5IZWlnaHQgIT0gMCAmJiBzY3JlZW5IZWlnaHQgPiBzZXR0aW5ncy5zY3JlZW5IZWlnaHQpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAodmVyc2lvbiAhPSAwKSB7Ci0gICAgICAgIGlmIChzZGtWZXJzaW9uICE9IDAgJiYgc2RrVmVyc2lvbiA+IHNldHRpbmdzLnNka1ZlcnNpb24pIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobWlub3JWZXJzaW9uICE9IDAgJiYgbWlub3JWZXJzaW9uICE9IHNldHRpbmdzLm1pbm9yVmVyc2lvbikgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlc1RhYmxlX2NvbmZpZzo6Z2V0TG9jYWxlKGNoYXIgc3RyWzZdKSBjb25zdCB7Ci0gICAgbWVtc2V0KHN0ciwgMCwgNik7Ci0gICAgaWYgKGxhbmd1YWdlWzBdKSB7Ci0gICAgICAgIHN0clswXSA9IGxhbmd1YWdlWzBdOwotICAgICAgICBzdHJbMV0gPSBsYW5ndWFnZVsxXTsKLSAgICAgICAgaWYgKGNvdW50cnlbMF0pIHsKLSAgICAgICAgICAgIHN0clsyXSA9ICdfJzsKLSAgICAgICAgICAgIHN0clszXSA9IGNvdW50cnlbMF07Ci0gICAgICAgICAgICBzdHJbNF0gPSBjb3VudHJ5WzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi1TdHJpbmc4IFJlc1RhYmxlX2NvbmZpZzo6dG9TdHJpbmcoKSBjb25zdCB7Ci0gICAgU3RyaW5nOCByZXM7Ci0KLSAgICBpZiAobWNjICE9IDApIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoIiVkbWNjIiwgZHRvaHMobWNjKSk7Ci0gICAgfQotICAgIGlmIChtbmMgIT0gMCkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgiJWRtbmMiLCBkdG9ocyhtbmMpKTsKLSAgICB9Ci0gICAgaWYgKGxhbmd1YWdlWzBdICE9IDApIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHJlcy5hcHBlbmQobGFuZ3VhZ2UsIDIpOwotICAgIH0KLSAgICBpZiAoY291bnRyeVswXSAhPSAwKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICByZXMuYXBwZW5kKGNvdW50cnksIDIpOwotICAgIH0KLSAgICBpZiAoKHNjcmVlbkxheW91dCZNQVNLX0xBWU9VVERJUikgIT0gMCkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgc3dpdGNoIChzY3JlZW5MYXlvdXQmUmVzVGFibGVfY29uZmlnOjpNQVNLX0xBWU9VVERJUikgewotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OkxBWU9VVERJUl9MVFI6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgibGRsdHIiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpMQVlPVVRESVJfUlRMOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoImxkcnRsIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoImxheW91dERpcj0lZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkdG9ocyhzY3JlZW5MYXlvdXQmUmVzVGFibGVfY29uZmlnOjpNQVNLX0xBWU9VVERJUikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChzbWFsbGVzdFNjcmVlbldpZHRoRHAgIT0gMCkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgic3clZGRwIiwgZHRvaHMoc21hbGxlc3RTY3JlZW5XaWR0aERwKSk7Ci0gICAgfQotICAgIGlmIChzY3JlZW5XaWR0aERwICE9IDApIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoInclZGRwIiwgZHRvaHMoc2NyZWVuV2lkdGhEcCkpOwotICAgIH0KLSAgICBpZiAoc2NyZWVuSGVpZ2h0RHAgIT0gMCkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgiaCVkZHAiLCBkdG9ocyhzY3JlZW5IZWlnaHREcCkpOwotICAgIH0KLSAgICBpZiAoKHNjcmVlbkxheW91dCZNQVNLX1NDUkVFTlNJWkUpICE9IFNDUkVFTlNJWkVfQU5ZKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICBzd2l0Y2ggKHNjcmVlbkxheW91dCZSZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOU0laRSkgewotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OlNDUkVFTlNJWkVfU01BTEw6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgic21hbGwiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5TSVpFX05PUk1BTDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJub3JtYWwiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5TSVpFX0xBUkdFOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoImxhcmdlIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOU0laRV9YTEFSR0U6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgieGxhcmdlIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoInNjcmVlbkxheW91dFNpemU9JWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgZHRvaHMoc2NyZWVuTGF5b3V0JlJlc1RhYmxlX2NvbmZpZzo6TUFTS19TQ1JFRU5TSVpFKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKChzY3JlZW5MYXlvdXQmTUFTS19TQ1JFRU5MT05HKSAhPSAwKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICBzd2l0Y2ggKHNjcmVlbkxheW91dCZSZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOTE9ORykgewotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OlNDUkVFTkxPTkdfTk86Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgibm90bG9uZyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OlNDUkVFTkxPTkdfWUVTOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoImxvbmciKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgic2NyZWVuTGF5b3V0TG9uZz0lZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkdG9ocyhzY3JlZW5MYXlvdXQmUmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTkxPTkcpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAob3JpZW50YXRpb24gIT0gT1JJRU5UQVRJT05fQU5ZKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6T1JJRU5UQVRJT05fUE9SVDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJwb3J0Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6T1JJRU5UQVRJT05fTEFORDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJsYW5kIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6T1JJRU5UQVRJT05fU1FVQVJFOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoInNxdWFyZSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCJvcmllbnRhdGlvbj0lZCIsIGR0b2hzKG9yaWVudGF0aW9uKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCh1aU1vZGUmTUFTS19VSV9NT0RFX1RZUEUpICE9IFVJX01PREVfVFlQRV9BTlkpIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHN3aXRjaCAodWlNb2RlJlJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX1RZUEUpIHsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpVSV9NT0RFX1RZUEVfREVTSzoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJkZXNrIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6VUlfTU9ERV9UWVBFX0NBUjoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJjYXIiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpVSV9NT0RFX1RZUEVfVEVMRVZJU0lPTjoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJ0ZWxldmlzaW9uIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6VUlfTU9ERV9UWVBFX0FQUExJQU5DRToKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJhcHBsaWFuY2UiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgidWlNb2RlVHlwZT0lZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkdG9ocyhzY3JlZW5MYXlvdXQmUmVzVGFibGVfY29uZmlnOjpNQVNLX1VJX01PREVfVFlQRSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgodWlNb2RlJk1BU0tfVUlfTU9ERV9OSUdIVCkgIT0gMCkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgc3dpdGNoICh1aU1vZGUmUmVzVGFibGVfY29uZmlnOjpNQVNLX1VJX01PREVfTklHSFQpIHsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpVSV9NT0RFX05JR0hUX05POgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoIm5vdG5pZ2h0Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6VUlfTU9ERV9OSUdIVF9ZRVM6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgibmlnaHQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgidWlNb2RlTmlnaHQ9JWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgZHRvaHModWlNb2RlJk1BU0tfVUlfTU9ERV9OSUdIVCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChkZW5zaXR5ICE9IERFTlNJVFlfREVGQVVMVCkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgc3dpdGNoIChkZW5zaXR5KSB7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9MT1c6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgibGRwaSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfTUVESVVNOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoIm1kcGkiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpERU5TSVRZX1RWOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoInR2ZHBpIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9ISUdIOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoImhkcGkiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpERU5TSVRZX1hISUdIOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoInhoZHBpIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9YWEhJR0g6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgieHhoZHBpIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9OT05FOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoIm5vZHBpIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoIiVkZHBpIiwgZHRvaHMoZGVuc2l0eSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICh0b3VjaHNjcmVlbiAhPSBUT1VDSFNDUkVFTl9BTlkpIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHN3aXRjaCAodG91Y2hzY3JlZW4pIHsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpUT1VDSFNDUkVFTl9OT1RPVUNIOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoIm5vdG91Y2giKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpUT1VDSFNDUkVFTl9GSU5HRVI6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgiZmluZ2VyIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6VE9VQ0hTQ1JFRU5fU1RZTFVTOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoInN0eWx1cyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCJ0b3VjaHNjcmVlbj0lZCIsIGR0b2hzKHRvdWNoc2NyZWVuKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGtleWJvYXJkICE9IEtFWUJPQVJEX0FOWSkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgc3dpdGNoIChrZXlib2FyZCkgewotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OktFWUJPQVJEX05PS0VZUzoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJub2tleXMiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpLRVlCT0FSRF9RV0VSVFk6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgicXdlcnR5Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6S0VZQk9BUkRfMTJLRVk6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgiMTJrZXkiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgia2V5Ym9hcmQ9JWQiLCBkdG9ocyhrZXlib2FyZCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgoaW5wdXRGbGFncyZNQVNLX0tFWVNISURERU4pICE9IDApIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHN3aXRjaCAoaW5wdXRGbGFncyZNQVNLX0tFWVNISURERU4pIHsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpLRVlTSElEREVOX05POgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoImtleXNleHBvc2VkIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6S0VZU0hJRERFTl9ZRVM6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgia2V5c2hpZGRlbiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OktFWVNISURERU5fU09GVDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJrZXlzc29mdCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChuYXZpZ2F0aW9uICE9IE5BVklHQVRJT05fQU5ZKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICBzd2l0Y2ggKG5hdmlnYXRpb24pIHsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpOQVZJR0FUSU9OX05PTkFWOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoIm5vbmF2Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6TkFWSUdBVElPTl9EUEFEOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoImRwYWQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpOQVZJR0FUSU9OX1RSQUNLQkFMTDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJ0cmFja2JhbGwiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpOQVZJR0FUSU9OX1dIRUVMOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoIndoZWVsIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoIm5hdmlnYXRpb249JWQiLCBkdG9ocyhuYXZpZ2F0aW9uKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKChpbnB1dEZsYWdzJk1BU0tfTkFWSElEREVOKSAhPSAwKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICBzd2l0Y2ggKGlucHV0RmxhZ3MmTUFTS19OQVZISURERU4pIHsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpOQVZISURERU5fTk86Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgibmF2c2V4cG9zZWQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpOQVZISURERU5fWUVTOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoIm5hdmhpZGRlbiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCJpbnB1dEZsYWdzTmF2SGlkZGVuPSVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0b2hzKGlucHV0RmxhZ3MmTUFTS19OQVZISURERU4pKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc2NyZWVuU2l6ZSAhPSAwKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCIlZHglZCIsIGR0b2hzKHNjcmVlbldpZHRoKSwgZHRvaHMoc2NyZWVuSGVpZ2h0KSk7Ci0gICAgfQotICAgIGlmICh2ZXJzaW9uICE9IDApIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoInYlZCIsIGR0b2hzKHNka1ZlcnNpb24pKTsKLSAgICAgICAgaWYgKG1pbm9yVmVyc2lvbiAhPSAwKSB7Ci0gICAgICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCIuJWQiLCBkdG9ocyhtaW5vclZlcnNpb24pKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXM7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RydWN0IFJlc1RhYmxlOjpIZWFkZXIKLXsKLSAgICBIZWFkZXIoUmVzVGFibGUqIF9vd25lcikgOiBvd25lcihfb3duZXIpLCBvd25lZERhdGEoTlVMTCksIGhlYWRlcihOVUxMKSwKLSAgICAgICAgcmVzb3VyY2VJRE1hcChOVUxMKSwgcmVzb3VyY2VJRE1hcFNpemUoMCkgeyB9Ci0KLSAgICB+SGVhZGVyKCkKLSAgICB7Ci0gICAgICAgIGZyZWUocmVzb3VyY2VJRE1hcCk7Ci0gICAgfQotCi0gICAgUmVzVGFibGUqIGNvbnN0ICAgICAgICAgICAgICAgICBvd25lcjsKLSAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVkRGF0YTsKLSAgICBjb25zdCBSZXNUYWJsZV9oZWFkZXIqICAgICAgICAgIGhlYWRlcjsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU7Ci0gICAgY29uc3QgdWludDhfdCogICAgICAgICAgICAgICAgICBkYXRhRW5kOwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg7Ci0gICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWU7Ci0KLSAgICBSZXNTdHJpbmdQb29sICAgICAgICAgICAgICAgICAgIHZhbHVlczsKLSAgICB1aW50MzJfdCogICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlSURNYXA7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUlETWFwU2l6ZTsKLX07Ci0KLXN0cnVjdCBSZXNUYWJsZTo6VHlwZQotewotICAgIFR5cGUoY29uc3QgSGVhZGVyKiBfaGVhZGVyLCBjb25zdCBQYWNrYWdlKiBfcGFja2FnZSwgc2l6ZV90IGNvdW50KQotICAgICAgICA6IGhlYWRlcihfaGVhZGVyKSwgcGFja2FnZShfcGFja2FnZSksIGVudHJ5Q291bnQoY291bnQpLAotICAgICAgICAgIHR5cGVTcGVjKE5VTEwpLCB0eXBlU3BlY0ZsYWdzKE5VTEwpIHsgfQotICAgIGNvbnN0IEhlYWRlciogY29uc3QgICAgICAgICAgICAgaGVhZGVyOwotICAgIGNvbnN0IFBhY2thZ2UqIGNvbnN0ICAgICAgICAgICAgcGFja2FnZTsKLSAgICBjb25zdCBzaXplX3QgICAgICAgICAgICAgICAgICAgIGVudHJ5Q291bnQ7Ci0gICAgY29uc3QgUmVzVGFibGVfdHlwZVNwZWMqICAgICAgICB0eXBlU3BlYzsKLSAgICBjb25zdCB1aW50MzJfdCogICAgICAgICAgICAgICAgIHR5cGVTcGVjRmxhZ3M7Ci0gICAgVmVjdG9yPGNvbnN0IFJlc1RhYmxlX3R5cGUqPiAgICBjb25maWdzOwotfTsKLQotc3RydWN0IFJlc1RhYmxlOjpQYWNrYWdlCi17Ci0gICAgUGFja2FnZShSZXNUYWJsZSogX293bmVyLCBjb25zdCBIZWFkZXIqIF9oZWFkZXIsIGNvbnN0IFJlc1RhYmxlX3BhY2thZ2UqIF9wYWNrYWdlKQotICAgICAgICA6IG93bmVyKF9vd25lciksIGhlYWRlcihfaGVhZGVyKSwgcGFja2FnZShfcGFja2FnZSkgeyB9Ci0gICAgflBhY2thZ2UoKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGkgPSB0eXBlcy5zaXplKCk7Ci0gICAgICAgIHdoaWxlIChpID4gMCkgewotICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgZGVsZXRlIHR5cGVzW2ldOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIFJlc1RhYmxlKiBjb25zdCAgICAgICAgICAgICAgICAgb3duZXI7Ci0gICAgY29uc3QgSGVhZGVyKiBjb25zdCAgICAgICAgICAgICBoZWFkZXI7Ci0gICAgY29uc3QgUmVzVGFibGVfcGFja2FnZSogY29uc3QgICBwYWNrYWdlOwotICAgIFZlY3RvcjxUeXBlKj4gICAgICAgICAgICAgICAgICAgdHlwZXM7Ci0KLSAgICBSZXNTdHJpbmdQb29sICAgICAgICAgICAgICAgICAgIHR5cGVTdHJpbmdzOwotICAgIFJlc1N0cmluZ1Bvb2wgICAgICAgICAgICAgICAgICAga2V5U3RyaW5nczsKLSAgICAKLSAgICBjb25zdCBUeXBlKiBnZXRUeXBlKHNpemVfdCBpZHgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIGlkeCA8IHR5cGVzLnNpemUoKSA/IHR5cGVzW2lkeF0gOiBOVUxMOwotICAgIH0KLX07Ci0KLS8vIEEgZ3JvdXAgb2Ygb2JqZWN0cyBkZXNjcmliaW5nIGEgcGFydGljdWxhciByZXNvdXJjZSBwYWNrYWdlLgotLy8gVGhlIGZpcnN0IGluICdwYWNrYWdlJyBpcyBhbHdheXMgdGhlIHJvb3Qgb2JqZWN0IChmcm9tIHRoZSByZXNvdXJjZQotLy8gdGFibGUgdGhhdCBkZWZpbmVkIHRoZSBwYWNrYWdlKTsgdGhlIG9uZXMgYWZ0ZXIgYXJlIHNraW5zIG9uIHRvcCBvZiBpdC4KLXN0cnVjdCBSZXNUYWJsZTo6UGFja2FnZUdyb3VwCi17Ci0gICAgUGFja2FnZUdyb3VwKFJlc1RhYmxlKiBfb3duZXIsIGNvbnN0IFN0cmluZzE2JiBfbmFtZSwgdWludDMyX3QgX2lkKQotICAgICAgICA6IG93bmVyKF9vd25lciksIG5hbWUoX25hbWUpLCBpZChfaWQpLCB0eXBlQ291bnQoMCksIGJhZ3MoTlVMTCkgeyB9Ci0gICAgflBhY2thZ2VHcm91cCgpIHsKLSAgICAgICAgY2xlYXJCYWdDYWNoZSgpOwotICAgICAgICBjb25zdCBzaXplX3QgTiA9IHBhY2thZ2VzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgUGFja2FnZSogcGtnID0gcGFja2FnZXNbaV07Ci0gICAgICAgICAgICBpZiAocGtnLT5vd25lciA9PSBvd25lcikgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBwa2c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyQmFnQ2FjaGUoKSB7Ci0gICAgICAgIGlmIChiYWdzKSB7Ci0gICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoImJhZ3M9JXBcbiIsIGJhZ3MpKTsKLSAgICAgICAgICAgIFBhY2thZ2UqIHBrZyA9IHBhY2thZ2VzWzBdOwotICAgICAgICAgICAgVEFCTEVfTk9JU1kocHJpbnRmKCJ0eXBlQ291bnQ9JXhcbiIsIHR5cGVDb3VudCkpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPHR5cGVDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgVEFCTEVfTk9JU1kocHJpbnRmKCJ0eXBlPSVkXG4iLCBpKSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVHlwZSogdHlwZSA9IHBrZy0+Z2V0VHlwZShpKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJhZ19zZXQqKiB0eXBlQmFncyA9IGJhZ3NbaV07Ci0gICAgICAgICAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigidHlwZUJhZ3M9JXBcbiIsIHR5cGVCYWdzKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlQmFncykgewotICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfTk9JU1kocHJpbnRmKCJ0eXBlLT5lbnRyeUNvdW50PSV4XG4iLCB0eXBlLT5lbnRyeUNvdW50KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgTiA9IHR5cGUtPmVudHJ5Q291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqPTA7IGo8TjsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVCYWdzW2pdICYmIHR5cGVCYWdzW2pdICE9IChiYWdfc2V0KikweEZGRkZGRkZGKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHR5cGVCYWdzW2pdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUodHlwZUJhZ3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJlZShiYWdzKTsKLSAgICAgICAgICAgIGJhZ3MgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIFJlc1RhYmxlKiBjb25zdCAgICAgICAgICAgICAgICAgb3duZXI7Ci0gICAgU3RyaW5nMTYgY29uc3QgICAgICAgICAgICAgICAgICBuYW1lOwotICAgIHVpbnQzMl90IGNvbnN0ICAgICAgICAgICAgICAgICAgaWQ7Ci0gICAgVmVjdG9yPFBhY2thZ2UqPiAgICAgICAgICAgICAgICBwYWNrYWdlczsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGZvciBmaW5kaW5nIHR5cGVTdHJpbmdzIGFuZCBvdGhlciBjb21tb24gcGFja2FnZSBzdHVmZi4KLSAgICBQYWNrYWdlKiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VQYWNrYWdlOwotCi0gICAgLy8gRm9yIHF1aWNrIGFjY2Vzcy4KLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVDb3VudDsKLSAgICAKLSAgICAvLyBDb21wdXRlZCBhdHRyaWJ1dGUgYmFncywgZmlyc3QgaW5kZXhlZCBieSB0aGUgdHlwZSBhbmQgc2Vjb25kCi0gICAgLy8gYnkgdGhlIGVudHJ5IGluIHRoYXQgdHlwZS4KLSAgICBiYWdfc2V0KioqICAgICAgICAgICAgICAgICAgICAgIGJhZ3M7Ci19OwotCi1zdHJ1Y3QgUmVzVGFibGU6OmJhZ19zZXQKLXsKLSAgICBzaXplX3QgbnVtQXR0cnM7ICAgIC8vIG51bWJlciBpbiBhcnJheQotICAgIHNpemVfdCBhdmFpbEF0dHJzOyAgLy8gdG90YWwgc3BhY2UgaW4gYXJyYXkKLSAgICB1aW50MzJfdCB0eXBlU3BlY0ZsYWdzOwotICAgIC8vIEZvbGxvd2VkIGJ5ICdudW1BdHRyJyBiYWdfZW50cnkgc3RydWN0dXJlcy4KLX07Ci0KLVJlc1RhYmxlOjpUaGVtZTo6VGhlbWUoY29uc3QgUmVzVGFibGUmIHRhYmxlKQotICAgIDogbVRhYmxlKHRhYmxlKQotewotICAgIG1lbXNldChtUGFja2FnZXMsIDAsIHNpemVvZihtUGFja2FnZXMpKTsKLX0KLQotUmVzVGFibGU6OlRoZW1lOjp+VGhlbWUoKQotewotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxSZXNfTUFYUEFDS0FHRTsgaSsrKSB7Ci0gICAgICAgIHBhY2thZ2VfaW5mbyogcGkgPSBtUGFja2FnZXNbaV07Ci0gICAgICAgIGlmIChwaSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBmcmVlX3BhY2thZ2UocGkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlc1RhYmxlOjpUaGVtZTo6ZnJlZV9wYWNrYWdlKHBhY2thZ2VfaW5mbyogcGkpCi17Ci0gICAgZm9yIChzaXplX3Qgaj0wOyBqPHBpLT5udW1UeXBlczsgaisrKSB7Ci0gICAgICAgIHRoZW1lX2VudHJ5KiB0ZSA9IHBpLT50eXBlc1tqXS5lbnRyaWVzOwotICAgICAgICBpZiAodGUgIT0gTlVMTCkgewotICAgICAgICAgICAgZnJlZSh0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZnJlZShwaSk7Ci19Ci0KLVJlc1RhYmxlOjpUaGVtZTo6cGFja2FnZV9pbmZvKiBSZXNUYWJsZTo6VGhlbWU6OmNvcHlfcGFja2FnZShwYWNrYWdlX2luZm8qIHBpKQotewotICAgIHBhY2thZ2VfaW5mbyogbmV3cGkgPSAocGFja2FnZV9pbmZvKiltYWxsb2MoCi0gICAgICAgIHNpemVvZihwYWNrYWdlX2luZm8pICsgKHBpLT5udW1UeXBlcypzaXplb2YodHlwZV9pbmZvKSkpOwotICAgIG5ld3BpLT5udW1UeXBlcyA9IHBpLT5udW1UeXBlczsKLSAgICBmb3IgKHNpemVfdCBqPTA7IGo8bmV3cGktPm51bVR5cGVzOyBqKyspIHsKLSAgICAgICAgc2l6ZV90IGNudCA9IHBpLT50eXBlc1tqXS5udW1FbnRyaWVzOwotICAgICAgICBuZXdwaS0+dHlwZXNbal0ubnVtRW50cmllcyA9IGNudDsKLSAgICAgICAgdGhlbWVfZW50cnkqIHRlID0gcGktPnR5cGVzW2pdLmVudHJpZXM7Ci0gICAgICAgIGlmICh0ZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICB0aGVtZV9lbnRyeSogbmV3dGUgPSAodGhlbWVfZW50cnkqKW1hbGxvYyhjbnQqc2l6ZW9mKHRoZW1lX2VudHJ5KSk7Ci0gICAgICAgICAgICBuZXdwaS0+dHlwZXNbal0uZW50cmllcyA9IG5ld3RlOwotICAgICAgICAgICAgbWVtY3B5KG5ld3RlLCB0ZSwgY250KnNpemVvZih0aGVtZV9lbnRyeSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbmV3cGktPnR5cGVzW2pdLmVudHJpZXMgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuZXdwaTsKLX0KLQotc3RhdHVzX3QgUmVzVGFibGU6OlRoZW1lOjphcHBseVN0eWxlKHVpbnQzMl90IHJlc0lELCBib29sIGZvcmNlKQotewotICAgIGNvbnN0IGJhZ19lbnRyeSogYmFnOwotICAgIHVpbnQzMl90IGJhZ1R5cGVTcGVjRmxhZ3MgPSAwOwotICAgIG1UYWJsZS5sb2NrKCk7Ci0gICAgY29uc3Qgc3NpemVfdCBOID0gbVRhYmxlLmdldEJhZ0xvY2tlZChyZXNJRCwgJmJhZywgJmJhZ1R5cGVTcGVjRmxhZ3MpOwotICAgIFRBQkxFX05PSVNZKEFMT0dWKCJBcHBseWluZyBzdHlsZSAweCUwOHggdG8gdGhlbWUgJXAsIGNvdW50PSVkIiwgcmVzSUQsIHRoaXMsIE4pKTsKLSAgICBpZiAoTiA8IDApIHsKLSAgICAgICAgbVRhYmxlLnVubG9jaygpOwotICAgICAgICByZXR1cm4gTjsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBjdXJQYWNrYWdlID0gMHhmZmZmZmZmZjsKLSAgICBzc2l6ZV90IGN1clBhY2thZ2VJbmRleCA9IDA7Ci0gICAgcGFja2FnZV9pbmZvKiBjdXJQSSA9IE5VTEw7Ci0gICAgdWludDMyX3QgY3VyVHlwZSA9IDB4ZmZmZmZmZmY7Ci0gICAgc2l6ZV90IG51bUVudHJpZXMgPSAwOwotICAgIHRoZW1lX2VudHJ5KiBjdXJFbnRyaWVzID0gTlVMTDsKLQotICAgIGNvbnN0IGJhZ19lbnRyeSogZW5kID0gYmFnICsgTjsKLSAgICB3aGlsZSAoYmFnIDwgZW5kKSB7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IGF0dHJSZXMgPSBiYWctPm1hcC5uYW1lLmlkZW50OwotICAgICAgICBjb25zdCB1aW50MzJfdCBwID0gUmVzX0dFVFBBQ0tBR0UoYXR0clJlcyk7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IHQgPSBSZXNfR0VUVFlQRShhdHRyUmVzKTsKLSAgICAgICAgY29uc3QgdWludDMyX3QgZSA9IFJlc19HRVRFTlRSWShhdHRyUmVzKTsKLQotICAgICAgICBpZiAoY3VyUGFja2FnZSAhPSBwKSB7Ci0gICAgICAgICAgICBjb25zdCBzc2l6ZV90IHBpZHggPSBtVGFibGUuZ2V0UmVzb3VyY2VQYWNrYWdlSW5kZXgoYXR0clJlcyk7Ci0gICAgICAgICAgICBpZiAocGlkeCA8IDApIHsKLSAgICAgICAgICAgICAgICBBTE9HRSgiU3R5bGUgY29udGFpbnMga2V5IHdpdGggYmFkIHBhY2thZ2U6IDB4JTA4eFxuIiwgYXR0clJlcyk7Ci0gICAgICAgICAgICAgICAgYmFnKys7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJQYWNrYWdlID0gcDsKLSAgICAgICAgICAgIGN1clBhY2thZ2VJbmRleCA9IHBpZHg7Ci0gICAgICAgICAgICBjdXJQSSA9IG1QYWNrYWdlc1twaWR4XTsKLSAgICAgICAgICAgIGlmIChjdXJQSSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUGFja2FnZUdyb3VwKiBjb25zdCBncnAgPSBtVGFibGUubVBhY2thZ2VHcm91cHNbcGlkeF07Ci0gICAgICAgICAgICAgICAgaW50IGNudCA9IGdycC0+dHlwZUNvdW50OwotICAgICAgICAgICAgICAgIGN1clBJID0gKHBhY2thZ2VfaW5mbyopbWFsbG9jKAotICAgICAgICAgICAgICAgICAgICBzaXplb2YocGFja2FnZV9pbmZvKSArIChjbnQqc2l6ZW9mKHR5cGVfaW5mbykpKTsKLSAgICAgICAgICAgICAgICBjdXJQSS0+bnVtVHlwZXMgPSBjbnQ7Ci0gICAgICAgICAgICAgICAgbWVtc2V0KGN1clBJLT50eXBlcywgMCwgY250KnNpemVvZih0eXBlX2luZm8pKTsKLSAgICAgICAgICAgICAgICBtUGFja2FnZXNbcGlkeF0gPSBjdXJQSTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1clR5cGUgPSAweGZmZmZmZmZmOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjdXJUeXBlICE9IHQpIHsKLSAgICAgICAgICAgIGlmICh0ID49IGN1clBJLT5udW1UeXBlcykgewotICAgICAgICAgICAgICAgIEFMT0dFKCJTdHlsZSBjb250YWlucyBrZXkgd2l0aCBiYWQgdHlwZTogMHglMDh4XG4iLCBhdHRyUmVzKTsKLSAgICAgICAgICAgICAgICBiYWcrKzsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1clR5cGUgPSB0OwotICAgICAgICAgICAgY3VyRW50cmllcyA9IGN1clBJLT50eXBlc1t0XS5lbnRyaWVzOwotICAgICAgICAgICAgaWYgKGN1ckVudHJpZXMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFBhY2thZ2VHcm91cCogY29uc3QgZ3JwID0gbVRhYmxlLm1QYWNrYWdlR3JvdXBzW2N1clBhY2thZ2VJbmRleF07Ci0gICAgICAgICAgICAgICAgY29uc3QgVHlwZSogdHlwZSA9IGdycC0+cGFja2FnZXNbMF0tPmdldFR5cGUodCk7Ci0gICAgICAgICAgICAgICAgaW50IGNudCA9IHR5cGUgIT0gTlVMTCA/IHR5cGUtPmVudHJ5Q291bnQgOiAwOwotICAgICAgICAgICAgICAgIGN1ckVudHJpZXMgPSAodGhlbWVfZW50cnkqKW1hbGxvYyhjbnQqc2l6ZW9mKHRoZW1lX2VudHJ5KSk7Ci0gICAgICAgICAgICAgICAgbWVtc2V0KGN1ckVudHJpZXMsIFJlc192YWx1ZTo6VFlQRV9OVUxMLCBjbnQqc2l6ZW9mKHRoZW1lX2VudHJ5KSk7Ci0gICAgICAgICAgICAgICAgY3VyUEktPnR5cGVzW3RdLm51bUVudHJpZXMgPSBjbnQ7Ci0gICAgICAgICAgICAgICAgY3VyUEktPnR5cGVzW3RdLmVudHJpZXMgPSBjdXJFbnRyaWVzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbnVtRW50cmllcyA9IGN1clBJLT50eXBlc1t0XS5udW1FbnRyaWVzOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlID49IG51bUVudHJpZXMpIHsKLSAgICAgICAgICAgIEFMT0dFKCJTdHlsZSBjb250YWlucyBrZXkgd2l0aCBiYWQgZW50cnk6IDB4JTA4eFxuIiwgYXR0clJlcyk7Ci0gICAgICAgICAgICBiYWcrKzsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHRoZW1lX2VudHJ5KiBjdXJFbnRyeSA9IGN1ckVudHJpZXMgKyBlOwotICAgICAgICBUQUJMRV9OT0lTWShBTE9HVigiQXR0ciAweCUwOHg6IHR5cGU9MHgleCwgZGF0YT0weCUwOHg7IGN1clR5cGU9MHgleCIsCi0gICAgICAgICAgICAgICAgICAgYXR0clJlcywgYmFnLT5tYXAudmFsdWUuZGF0YVR5cGUsIGJhZy0+bWFwLnZhbHVlLmRhdGEsCi0gICAgICAgICAgICAgY3VyRW50cnktPnZhbHVlLmRhdGFUeXBlKSk7Ci0gICAgICAgIGlmIChmb3JjZSB8fCBjdXJFbnRyeS0+dmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX05VTEwpIHsKLSAgICAgICAgICAgIGN1ckVudHJ5LT5zdHJpbmdCbG9jayA9IGJhZy0+c3RyaW5nQmxvY2s7Ci0gICAgICAgICAgICBjdXJFbnRyeS0+dHlwZVNwZWNGbGFncyB8PSBiYWdUeXBlU3BlY0ZsYWdzOwotICAgICAgICAgICAgY3VyRW50cnktPnZhbHVlID0gYmFnLT5tYXAudmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBiYWcrKzsKLSAgICB9Ci0KLSAgICBtVGFibGUudW5sb2NrKCk7Ci0KLSAgICAvL0FMT0dJKCJBcHBseWluZyBzdHlsZSAweCUwOHggKGZvcmNlPSVkKSAgdGhlbWUgJXAuLi5cbiIsIHJlc0lELCBmb3JjZSwgdGhpcyk7Ci0gICAgLy9kdW1wVG9Mb2coKTsKLSAgICAKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFJlc1RhYmxlOjpUaGVtZTo6c2V0VG8oY29uc3QgVGhlbWUmIG90aGVyKQotewotICAgIC8vQUxPR0koIlNldHRpbmcgdGhlbWUgJXAgZnJvbSB0aGVtZSAlcC4uLlxuIiwgdGhpcywgJm90aGVyKTsKLSAgICAvL2R1bXBUb0xvZygpOwotICAgIC8vb3RoZXIuZHVtcFRvTG9nKCk7Ci0gICAgCi0gICAgaWYgKCZtVGFibGUgPT0gJm90aGVyLm1UYWJsZSkgewotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8UmVzX01BWFBBQ0tBR0U7IGkrKykgewotICAgICAgICAgICAgaWYgKG1QYWNrYWdlc1tpXSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZnJlZV9wYWNrYWdlKG1QYWNrYWdlc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3RoZXIubVBhY2thZ2VzW2ldICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBtUGFja2FnZXNbaV0gPSBjb3B5X3BhY2thZ2Uob3RoZXIubVBhY2thZ2VzW2ldKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbVBhY2thZ2VzW2ldID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEB0b2RvOiBuZWVkIHRvIHJlYWxseSBpbXBsZW1lbnQgdGhpcywgbm90IGp1c3QgY29weQotICAgICAgICAvLyB0aGUgc3lzdGVtIHBhY2thZ2UgKHdoaWNoIGlzIHN0aWxsIHdyb25nIGJlY2F1c2UgaXQgaXNuJ3QKLSAgICAgICAgLy8gZml4aW5nIHVwIHJlc291cmNlIHJlZmVyZW5jZXMpLgotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8UmVzX01BWFBBQ0tBR0U7IGkrKykgewotICAgICAgICAgICAgaWYgKG1QYWNrYWdlc1tpXSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZnJlZV9wYWNrYWdlKG1QYWNrYWdlc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaSA9PSAwICYmIG90aGVyLm1QYWNrYWdlc1tpXSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbVBhY2thZ2VzW2ldID0gY29weV9wYWNrYWdlKG90aGVyLm1QYWNrYWdlc1tpXSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1QYWNrYWdlc1tpXSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvL0FMT0dJKCJGaW5hbCB0aGVtZToiKTsKLSAgICAvL2R1bXBUb0xvZygpOwotICAgIAotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3NpemVfdCBSZXNUYWJsZTo6VGhlbWU6OmdldEF0dHJpYnV0ZSh1aW50MzJfdCByZXNJRCwgUmVzX3ZhbHVlKiBvdXRWYWx1ZSwKLSAgICAgICAgdWludDMyX3QqIG91dFR5cGVTcGVjRmxhZ3MpIGNvbnN0Ci17Ci0gICAgaW50IGNudCA9IDIwOwotCi0gICAgaWYgKG91dFR5cGVTcGVjRmxhZ3MgIT0gTlVMTCkgKm91dFR5cGVTcGVjRmxhZ3MgPSAwOwotICAgIAotICAgIGRvIHsKLSAgICAgICAgY29uc3Qgc3NpemVfdCBwID0gbVRhYmxlLmdldFJlc291cmNlUGFja2FnZUluZGV4KHJlc0lEKTsKLSAgICAgICAgY29uc3QgdWludDMyX3QgdCA9IFJlc19HRVRUWVBFKHJlc0lEKTsKLSAgICAgICAgY29uc3QgdWludDMyX3QgZSA9IFJlc19HRVRFTlRSWShyZXNJRCk7Ci0KLSAgICAgICAgVEFCTEVfVEhFTUUoQUxPR0koIkxvb2tpbmcgdXAgYXR0ciAweCUwOHggaW4gdGhlbWUgJXAiLCByZXNJRCwgdGhpcykpOwotCi0gICAgICAgIGlmIChwID49IDApIHsKLSAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VfaW5mbyogY29uc3QgcGkgPSBtUGFja2FnZXNbcF07Ci0gICAgICAgICAgICBUQUJMRV9USEVNRShBTE9HSSgiRm91bmQgcGFja2FnZTogJXAiLCBwaSkpOwotICAgICAgICAgICAgaWYgKHBpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBUQUJMRV9USEVNRShBTE9HSSgiRGVzaXJlZCB0eXBlIGluZGV4IGlzICVsZCBpbiBhdmFpbCAlZCIsIHQsIHBpLT5udW1UeXBlcykpOwotICAgICAgICAgICAgICAgIGlmICh0IDwgcGktPm51bVR5cGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVfaW5mbyYgdGkgPSBwaS0+dHlwZXNbdF07Ci0gICAgICAgICAgICAgICAgICAgIFRBQkxFX1RIRU1FKEFMT0dJKCJEZXNpcmVkIGVudHJ5IGluZGV4IGlzICVsZCBpbiBhdmFpbCAlZCIsIGUsIHRpLm51bUVudHJpZXMpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGUgPCB0aS5udW1FbnRyaWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGVtZV9lbnRyeSYgdGUgPSB0aS5lbnRyaWVzW2VdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dFR5cGVTcGVjRmxhZ3MgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXRUeXBlU3BlY0ZsYWdzIHw9IHRlLnR5cGVTcGVjRmxhZ3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9USEVNRShBTE9HSSgiVGhlbWUgdmFsdWU6IHR5cGU9MHgleCwgZGF0YT0weCUwOHgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZS52YWx1ZS5kYXRhVHlwZSwgdGUudmFsdWUuZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCB0eXBlID0gdGUudmFsdWUuZGF0YVR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfQVRUUklCVVRFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNudCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY250LS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0lEID0gdGUudmFsdWUuZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJUb28gbWFueSBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgc3RvcHBlZCBhdDogMHglMDh4XG4iLCByZXNJRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9JTkRFWDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPSBSZXNfdmFsdWU6OlRZUEVfTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXRWYWx1ZSA9IHRlLnZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZS5zdHJpbmdCbG9jazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCQURfSU5ERVg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICB9IHdoaWxlICh0cnVlKTsKLQotICAgIHJldHVybiBCQURfSU5ERVg7Ci19Ci0KLXNzaXplX3QgUmVzVGFibGU6OlRoZW1lOjpyZXNvbHZlQXR0cmlidXRlUmVmZXJlbmNlKFJlc192YWx1ZSogaW5PdXRWYWx1ZSwKLSAgICAgICAgc3NpemVfdCBibG9ja0luZGV4LCB1aW50MzJfdCogb3V0TGFzdFJlZiwKLSAgICAgICAgdWludDMyX3QqIGlub3V0VHlwZVNwZWNGbGFncywgUmVzVGFibGVfY29uZmlnKiBpbm91dENvbmZpZykgY29uc3QKLXsKLSAgICAvL3ByaW50ZigiUmVzb2x2aW5nIHR5cGU9MHgleFxuIiwgaW5PdXRWYWx1ZS0+ZGF0YVR5cGUpOwotICAgIGlmIChpbk91dFZhbHVlLT5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfQVRUUklCVVRFKSB7Ci0gICAgICAgIHVpbnQzMl90IG5ld1R5cGVTcGVjRmxhZ3M7Ci0gICAgICAgIGJsb2NrSW5kZXggPSBnZXRBdHRyaWJ1dGUoaW5PdXRWYWx1ZS0+ZGF0YSwgaW5PdXRWYWx1ZSwgJm5ld1R5cGVTcGVjRmxhZ3MpOwotICAgICAgICBUQUJMRV9USEVNRShBTE9HSSgiUmVzb2x2aW5nIGF0dHIgcmVmZXJlbmNlOiBibG9ja0luZGV4PSVkLCB0eXBlPTB4JXgsIGRhdGE9JXBcbiIsCi0gICAgICAgICAgICAgKGludClibG9ja0luZGV4LCAoaW50KWluT3V0VmFsdWUtPmRhdGFUeXBlLCAodm9pZCopaW5PdXRWYWx1ZS0+ZGF0YSkpOwotICAgICAgICBpZiAoaW5vdXRUeXBlU3BlY0ZsYWdzICE9IE5VTEwpICppbm91dFR5cGVTcGVjRmxhZ3MgfD0gbmV3VHlwZVNwZWNGbGFnczsKLSAgICAgICAgLy9wcmludGYoIlJldHJpZXZlZCBhdHRyaWJ1dGUgbmV3IHR5cGU9MHgleFxuIiwgaW5PdXRWYWx1ZS0+ZGF0YVR5cGUpOwotICAgICAgICBpZiAoYmxvY2tJbmRleCA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiBibG9ja0luZGV4OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtVGFibGUucmVzb2x2ZVJlZmVyZW5jZShpbk91dFZhbHVlLCBibG9ja0luZGV4LCBvdXRMYXN0UmVmLAotICAgICAgICAgICAgaW5vdXRUeXBlU3BlY0ZsYWdzLCBpbm91dENvbmZpZyk7Ci19Ci0KLXZvaWQgUmVzVGFibGU6OlRoZW1lOjpkdW1wVG9Mb2coKSBjb25zdAotewotICAgIEFMT0dJKCJUaGVtZSAlcDpcbiIsIHRoaXMpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxSZXNfTUFYUEFDS0FHRTsgaSsrKSB7Ci0gICAgICAgIHBhY2thZ2VfaW5mbyogcGkgPSBtUGFja2FnZXNbaV07Ci0gICAgICAgIGlmIChwaSA9PSBOVUxMKSBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIEFMT0dJKCIgIFBhY2thZ2UgIzB4JTAyeDpcbiIsIChpbnQpKGkrMSkpOwotICAgICAgICBmb3IgKHNpemVfdCBqPTA7IGo8cGktPm51bVR5cGVzOyBqKyspIHsKLSAgICAgICAgICAgIHR5cGVfaW5mbyYgdGkgPSBwaS0+dHlwZXNbal07Ci0gICAgICAgICAgICBpZiAodGkubnVtRW50cmllcyA9PSAwKSBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQUxPR0koIiAgICBUeXBlICMweCUwMng6XG4iLCAoaW50KShqKzEpKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGs9MDsgazx0aS5udW1FbnRyaWVzOyBrKyspIHsKLSAgICAgICAgICAgICAgICB0aGVtZV9lbnRyeSYgdGUgPSB0aS5lbnRyaWVzW2tdOwotICAgICAgICAgICAgICAgIGlmICh0ZS52YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfTlVMTCkgY29udGludWU7Ci0gICAgICAgICAgICAgICAgQUxPR0koIiAgICAgIDB4JTA4eDogdD0weCV4LCBkPTB4JTA4eCAoYmxvY2s9JWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgKGludClSZXNfTUFLRUlEKGksIGosIGspLAotICAgICAgICAgICAgICAgICAgICAgdGUudmFsdWUuZGF0YVR5cGUsIChpbnQpdGUudmFsdWUuZGF0YSwgKGludCl0ZS5zdHJpbmdCbG9jayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVJlc1RhYmxlOjpSZXNUYWJsZSgpCi0gICAgOiBtRXJyb3IoTk9fSU5JVCkKLXsKLSAgICBtZW1zZXQoJm1QYXJhbXMsIDAsIHNpemVvZihtUGFyYW1zKSk7Ci0gICAgbWVtc2V0KG1QYWNrYWdlTWFwLCAwLCBzaXplb2YobVBhY2thZ2VNYXApKTsKLSAgICAvL0FMT0dJKCJDcmVhdGluZyBSZXNUYWJsZSAlcFxuIiwgdGhpcyk7Ci19Ci0KLVJlc1RhYmxlOjpSZXNUYWJsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgdm9pZCogY29va2llLCBib29sIGNvcHlEYXRhKQotICAgIDogbUVycm9yKE5PX0lOSVQpCi17Ci0gICAgbWVtc2V0KCZtUGFyYW1zLCAwLCBzaXplb2YobVBhcmFtcykpOwotICAgIG1lbXNldChtUGFja2FnZU1hcCwgMCwgc2l6ZW9mKG1QYWNrYWdlTWFwKSk7Ci0gICAgYWRkKGRhdGEsIHNpemUsIGNvb2tpZSwgY29weURhdGEpOwotICAgIExPR19GQVRBTF9JRihtRXJyb3IgIT0gTk9fRVJST1IsICJFcnJvciBwYXJzaW5nIHJlc291cmNlIHRhYmxlIik7Ci0gICAgLy9BTE9HSSgiQ3JlYXRpbmcgUmVzVGFibGUgJXBcbiIsIHRoaXMpOwotfQotCi1SZXNUYWJsZTo6flJlc1RhYmxlKCkKLXsKLSAgICAvL0FMT0dJKCJEZXN0cm95aW5nIFJlc1RhYmxlIGluICVwXG4iLCB0aGlzKTsKLSAgICB1bmluaXQoKTsKLX0KLQotaW5saW5lIHNzaXplX3QgUmVzVGFibGU6OmdldFJlc291cmNlUGFja2FnZUluZGV4KHVpbnQzMl90IHJlc0lEKSBjb25zdAotewotICAgIHJldHVybiAoKHNzaXplX3QpbVBhY2thZ2VNYXBbUmVzX0dFVFBBQ0tBR0UocmVzSUQpKzFdKS0xOwotfQotCi1zdGF0dXNfdCBSZXNUYWJsZTo6YWRkKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCB2b2lkKiBjb29raWUsIGJvb2wgY29weURhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGlkbWFwKQotewotICAgIHJldHVybiBhZGQoZGF0YSwgc2l6ZSwgY29va2llLCBOVUxMLCBjb3B5RGF0YSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBc3NldCo+KGlkbWFwKSk7Ci19Ci0KLXN0YXR1c190IFJlc1RhYmxlOjphZGQoQXNzZXQqIGFzc2V0LCB2b2lkKiBjb29raWUsIGJvb2wgY29weURhdGEsIGNvbnN0IHZvaWQqIGlkbWFwKQotewotICAgIGNvbnN0IHZvaWQqIGRhdGEgPSBhc3NldC0+Z2V0QnVmZmVyKHRydWUpOwotICAgIGlmIChkYXRhID09IE5VTEwpIHsKLSAgICAgICAgQUxPR1coIlVuYWJsZSB0byBnZXQgYnVmZmVyIG9mIHJlc291cmNlIGFzc2V0IGZpbGUiKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIHNpemVfdCBzaXplID0gKHNpemVfdClhc3NldC0+Z2V0TGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGFkZChkYXRhLCBzaXplLCBjb29raWUsIGFzc2V0LCBjb3B5RGF0YSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBc3NldCo+KGlkbWFwKSk7Ci19Ci0KLXN0YXR1c190IFJlc1RhYmxlOjphZGQoUmVzVGFibGUqIHNyYykKLXsKLSAgICBtRXJyb3IgPSBzcmMtPm1FcnJvcjsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8c3JjLT5tSGVhZGVycy5zaXplKCk7IGkrKykgewotICAgICAgICBtSGVhZGVycy5hZGQoc3JjLT5tSGVhZGVyc1tpXSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxzcmMtPm1QYWNrYWdlR3JvdXBzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFBhY2thZ2VHcm91cCogc3JjUGcgPSBzcmMtPm1QYWNrYWdlR3JvdXBzW2ldOwotICAgICAgICBQYWNrYWdlR3JvdXAqIHBnID0gbmV3IFBhY2thZ2VHcm91cCh0aGlzLCBzcmNQZy0+bmFtZSwgc3JjUGctPmlkKTsKLSAgICAgICAgZm9yIChzaXplX3Qgaj0wOyBqPHNyY1BnLT5wYWNrYWdlcy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgcGctPnBhY2thZ2VzLmFkZChzcmNQZy0+cGFja2FnZXNbal0pOwotICAgICAgICB9Ci0gICAgICAgIHBnLT5iYXNlUGFja2FnZSA9IHNyY1BnLT5iYXNlUGFja2FnZTsKLSAgICAgICAgcGctPnR5cGVDb3VudCA9IHNyY1BnLT50eXBlQ291bnQ7Ci0gICAgICAgIG1QYWNrYWdlR3JvdXBzLmFkZChwZyk7Ci0gICAgfQotICAgIAotICAgIG1lbWNweShtUGFja2FnZU1hcCwgc3JjLT5tUGFja2FnZU1hcCwgc2l6ZW9mKG1QYWNrYWdlTWFwKSk7Ci0gICAgCi0gICAgcmV0dXJuIG1FcnJvcjsKLX0KLQotc3RhdHVzX3QgUmVzVGFibGU6OmFkZChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgdm9pZCogY29va2llLAotICAgICAgICAgICAgICAgICAgICAgICBBc3NldCogYXNzZXQsIGJvb2wgY29weURhdGEsIGNvbnN0IEFzc2V0KiBpZG1hcCkKLXsKLSAgICBpZiAoIWRhdGEpIHJldHVybiBOT19FUlJPUjsKLSAgICBIZWFkZXIqIGhlYWRlciA9IG5ldyBIZWFkZXIodGhpcyk7Ci0gICAgaGVhZGVyLT5pbmRleCA9IG1IZWFkZXJzLnNpemUoKTsKLSAgICBoZWFkZXItPmNvb2tpZSA9IGNvb2tpZTsKLSAgICBpZiAoaWRtYXAgIT0gTlVMTCkgewotICAgICAgICBjb25zdCBzaXplX3QgaWRtYXBfc2l6ZSA9IGlkbWFwLT5nZXRMZW5ndGgoKTsKLSAgICAgICAgY29uc3Qgdm9pZCogaWRtYXBfZGF0YSA9IGNvbnN0X2Nhc3Q8QXNzZXQqPihpZG1hcCktPmdldEJ1ZmZlcih0cnVlKTsKLSAgICAgICAgaGVhZGVyLT5yZXNvdXJjZUlETWFwID0gKHVpbnQzMl90KiltYWxsb2MoaWRtYXBfc2l6ZSk7Ci0gICAgICAgIGlmIChoZWFkZXItPnJlc291cmNlSURNYXAgPT0gTlVMTCkgewotICAgICAgICAgICAgZGVsZXRlIGhlYWRlcjsKLSAgICAgICAgICAgIHJldHVybiAobUVycm9yID0gTk9fTUVNT1JZKTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoKHZvaWQqKWhlYWRlci0+cmVzb3VyY2VJRE1hcCwgaWRtYXBfZGF0YSwgaWRtYXBfc2l6ZSk7Ci0gICAgICAgIGhlYWRlci0+cmVzb3VyY2VJRE1hcFNpemUgPSBpZG1hcF9zaXplOwotICAgIH0KLSAgICBtSGVhZGVycy5hZGQoaGVhZGVyKTsKLQotICAgIGNvbnN0IGJvb2wgbm90RGV2aWNlRW5kaWFuID0gaHRvZHMoMHhmMCkgIT0gMHhmMDsKLQotICAgIExPQURfVEFCTEVfTk9JU1koCi0gICAgICAgIEFMT0dWKCJBZGRpbmcgcmVzb3VyY2VzIHRvIFJlc1RhYmxlOiBkYXRhPSVwLCBzaXplPTB4JXgsIGNvb2tpZT0lcCwgYXNzZXQ9JXAsIGNvcHk9JWQgIgotICAgICAgICAgICAgICJpZG1hcD0lcFxuIiwgZGF0YSwgc2l6ZSwgY29va2llLCBhc3NldCwgY29weURhdGEsIGlkbWFwKSk7Ci0gICAgCi0gICAgaWYgKGNvcHlEYXRhIHx8IG5vdERldmljZUVuZGlhbikgewotICAgICAgICBoZWFkZXItPm93bmVkRGF0YSA9IG1hbGxvYyhzaXplKTsKLSAgICAgICAgaWYgKGhlYWRlci0+b3duZWREYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiAobUVycm9yPU5PX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KGhlYWRlci0+b3duZWREYXRhLCBkYXRhLCBzaXplKTsKLSAgICAgICAgZGF0YSA9IGhlYWRlci0+b3duZWREYXRhOwotICAgIH0KLQotICAgIGhlYWRlci0+aGVhZGVyID0gKGNvbnN0IFJlc1RhYmxlX2hlYWRlciopZGF0YTsKLSAgICBoZWFkZXItPnNpemUgPSBkdG9obChoZWFkZXItPmhlYWRlci0+aGVhZGVyLnNpemUpOwotICAgIC8vQUxPR0koIkdvdCBzaXplIDB4JXgsIGFnYWluIHNpemUgMHgleCwgcmF3IHNpemUgMHgleFxuIiwgaGVhZGVyLT5zaXplLAotICAgIC8vICAgICBkdG9obChoZWFkZXItPmhlYWRlci0+aGVhZGVyLnNpemUpLCBoZWFkZXItPmhlYWRlci0+aGVhZGVyLnNpemUpOwotICAgIExPQURfVEFCTEVfTk9JU1koQUxPR1YoIkxvYWRpbmcgUmVzVGFibGUgQCVwOlxuIiwgaGVhZGVyLT5oZWFkZXIpKTsKLSAgICBMT0FEX1RBQkxFX05PSVNZKHByaW50SGV4RGF0YSgyLCBoZWFkZXItPmhlYWRlciwgaGVhZGVyLT5zaXplIDwgMjU2ID8gaGVhZGVyLT5zaXplIDogMjU2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCAxNiwgMCwgZmFsc2UsIHByaW50VG9Mb2dGdW5jKSk7Ci0gICAgaWYgKGR0b2hzKGhlYWRlci0+aGVhZGVyLT5oZWFkZXIuaGVhZGVyU2l6ZSkgPiBoZWFkZXItPnNpemUKLSAgICAgICAgICAgIHx8IGhlYWRlci0+c2l6ZSA+IHNpemUpIHsKLSAgICAgICAgQUxPR1coIkJhZCByZXNvdXJjZSB0YWJsZTogaGVhZGVyIHNpemUgMHgleCBvciB0b3RhbCBzaXplIDB4JXggaXMgbGFyZ2VyIHRoYW4gZGF0YSBzaXplIDB4JXhcbiIsCi0gICAgICAgICAgICAgKGludClkdG9ocyhoZWFkZXItPmhlYWRlci0+aGVhZGVyLmhlYWRlclNpemUpLAotICAgICAgICAgICAgIChpbnQpaGVhZGVyLT5zaXplLCAoaW50KXNpemUpOwotICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgfQotICAgIGlmICgoKGR0b2hzKGhlYWRlci0+aGVhZGVyLT5oZWFkZXIuaGVhZGVyU2l6ZSl8aGVhZGVyLT5zaXplKSYweDMpICE9IDApIHsKLSAgICAgICAgQUxPR1coIkJhZCByZXNvdXJjZSB0YWJsZTogaGVhZGVyIHNpemUgMHgleCBvciB0b3RhbCBzaXplIDB4JXggaXMgbm90IG9uIGFuIGludGVnZXIgYm91bmRhcnlcbiIsCi0gICAgICAgICAgICAgKGludClkdG9ocyhoZWFkZXItPmhlYWRlci0+aGVhZGVyLmhlYWRlclNpemUpLAotICAgICAgICAgICAgIChpbnQpaGVhZGVyLT5zaXplKTsKLSAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgIH0KLSAgICBoZWFkZXItPmRhdGFFbmQgPSAoKGNvbnN0IHVpbnQ4X3QqKWhlYWRlci0+aGVhZGVyKSArIGhlYWRlci0+c2l6ZTsKLQotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgY2h1bmtzLgotICAgIHNpemVfdCBjdXJQYWNrYWdlID0gMDsKLQotICAgIGNvbnN0IFJlc0NodW5rX2hlYWRlciogY2h1bmsgPQotICAgICAgICAoY29uc3QgUmVzQ2h1bmtfaGVhZGVyKikoKChjb25zdCB1aW50OF90KiloZWFkZXItPmhlYWRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZHRvaHMoaGVhZGVyLT5oZWFkZXItPmhlYWRlci5oZWFkZXJTaXplKSk7Ci0gICAgd2hpbGUgKCgoY29uc3QgdWludDhfdCopY2h1bmspIDw9IChoZWFkZXItPmRhdGFFbmQtc2l6ZW9mKFJlc0NodW5rX2hlYWRlcikpICYmCi0gICAgICAgICAgICgoY29uc3QgdWludDhfdCopY2h1bmspIDw9IChoZWFkZXItPmRhdGFFbmQtZHRvaGwoY2h1bmstPnNpemUpKSkgewotICAgICAgICBzdGF0dXNfdCBlcnIgPSB2YWxpZGF0ZV9jaHVuayhjaHVuaywgc2l6ZW9mKFJlc0NodW5rX2hlYWRlciksIGhlYWRlci0+ZGF0YUVuZCwgIlJlc1RhYmxlIik7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiAobUVycm9yPWVycik7Ci0gICAgICAgIH0KLSAgICAgICAgVEFCTEVfTk9JU1koQUxPR1YoIkNodW5rOiB0eXBlPTB4JXgsIGhlYWRlclNpemU9MHgleCwgc2l6ZT0weCV4LCBwb3M9JXBcbiIsCi0gICAgICAgICAgICAgICAgICAgICBkdG9ocyhjaHVuay0+dHlwZSksIGR0b2hzKGNodW5rLT5oZWFkZXJTaXplKSwgZHRvaGwoY2h1bmstPnNpemUpLAotICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKSgoKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSAtICgoY29uc3QgdWludDhfdCopaGVhZGVyLT5oZWFkZXIpKSkpOwotICAgICAgICBjb25zdCBzaXplX3QgY3NpemUgPSBkdG9obChjaHVuay0+c2l6ZSk7Ci0gICAgICAgIGNvbnN0IHVpbnQxNl90IGN0eXBlID0gZHRvaHMoY2h1bmstPnR5cGUpOwotICAgICAgICBpZiAoY3R5cGUgPT0gUkVTX1NUUklOR19QT09MX1RZUEUpIHsKLSAgICAgICAgICAgIGlmIChoZWFkZXItPnZhbHVlcy5nZXRFcnJvcigpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgLy8gT25seSB1c2UgdGhlIGZpcnN0IHN0cmluZyBjaHVuazsgaWdub3JlIGFueSBvdGhlcnMgdGhhdAotICAgICAgICAgICAgICAgIC8vIG1heSBhcHBlYXIuCi0gICAgICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gaGVhZGVyLT52YWx1ZXMuc2V0VG8oY2h1bmssIGNzaXplKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPWVycik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiTXVsdGlwbGUgc3RyaW5nIGNodW5rcyBmb3VuZCBpbiByZXNvdXJjZSB0YWJsZS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjdHlwZSA9PSBSRVNfVEFCTEVfUEFDS0FHRV9UWVBFKSB7Ci0gICAgICAgICAgICBpZiAoY3VyUGFja2FnZSA+PSBkdG9obChoZWFkZXItPmhlYWRlci0+cGFja2FnZUNvdW50KSkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJNb3JlIHBhY2thZ2UgY2h1bmtzIHdlcmUgZm91bmQgdGhhbiB0aGUgJWQgZGVjbGFyZWQgaW4gdGhlIGhlYWRlci4iLAotICAgICAgICAgICAgICAgICAgICAgZHRvaGwoaGVhZGVyLT5oZWFkZXItPnBhY2thZ2VDb3VudCkpOwotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVpbnQzMl90IGlkbWFwX2lkID0gMDsKLSAgICAgICAgICAgIGlmIChpZG1hcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdWludDMyX3QgdG1wOwotICAgICAgICAgICAgICAgIGlmIChnZXRJZG1hcFBhY2thZ2VJZChoZWFkZXItPnJlc291cmNlSURNYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+cmVzb3VyY2VJRE1hcFNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXApID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlkbWFwX2lkID0gdG1wOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwYXJzZVBhY2thZ2UoKFJlc1RhYmxlX3BhY2thZ2UqKWNodW5rLCBoZWFkZXIsIGlkbWFwX2lkKSAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIHJldHVybiBtRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJQYWNrYWdlKys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVygiVW5rbm93biBjaHVuayB0eXBlICVwIGluIHRhYmxlIGF0ICVwLlxuIiwKLSAgICAgICAgICAgICAgICAgKHZvaWQqKShpbnQpKGN0eXBlKSwKLSAgICAgICAgICAgICAgICAgKHZvaWQqKSgoKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSAtICgoY29uc3QgdWludDhfdCopaGVhZGVyLT5oZWFkZXIpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2h1bmsgPSAoY29uc3QgUmVzQ2h1bmtfaGVhZGVyKikKLSAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSArIGNzaXplKTsKLSAgICB9Ci0KLSAgICBpZiAoY3VyUGFja2FnZSA8IGR0b2hsKGhlYWRlci0+aGVhZGVyLT5wYWNrYWdlQ291bnQpKSB7Ci0gICAgICAgIEFMT0dXKCJGZXdlciBwYWNrYWdlIGNodW5rcyAoJWQpIHdlcmUgZm91bmQgdGhhbiB0aGUgJWQgZGVjbGFyZWQgaW4gdGhlIGhlYWRlci4iLAotICAgICAgICAgICAgIChpbnQpY3VyUGFja2FnZSwgZHRvaGwoaGVhZGVyLT5oZWFkZXItPnBhY2thZ2VDb3VudCkpOwotICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgfQotICAgIG1FcnJvciA9IGhlYWRlci0+dmFsdWVzLmdldEVycm9yKCk7Ci0gICAgaWYgKG1FcnJvciAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HVygiTm8gc3RyaW5nIHZhbHVlcyBmb3VuZCBpbiByZXNvdXJjZSB0YWJsZSEiKTsKLSAgICB9Ci0KLSAgICBUQUJMRV9OT0lTWShBTE9HVigiUmV0dXJuaW5nIGZyb20gYWRkIHdpdGggbUVycm9yPSVkXG4iLCBtRXJyb3IpKTsKLSAgICByZXR1cm4gbUVycm9yOwotfQotCi1zdGF0dXNfdCBSZXNUYWJsZTo6Z2V0RXJyb3IoKSBjb25zdAotewotICAgIHJldHVybiBtRXJyb3I7Ci19Ci0KLXZvaWQgUmVzVGFibGU6OnVuaW5pdCgpCi17Ci0gICAgbUVycm9yID0gTk9fSU5JVDsKLSAgICBzaXplX3QgTiA9IG1QYWNrYWdlR3JvdXBzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIFBhY2thZ2VHcm91cCogZyA9IG1QYWNrYWdlR3JvdXBzW2ldOwotICAgICAgICBkZWxldGUgZzsKLSAgICB9Ci0gICAgTiA9IG1IZWFkZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIEhlYWRlciogaGVhZGVyID0gbUhlYWRlcnNbaV07Ci0gICAgICAgIGlmIChoZWFkZXItPm93bmVyID09IHRoaXMpIHsKLSAgICAgICAgICAgIGlmIChoZWFkZXItPm93bmVkRGF0YSkgewotICAgICAgICAgICAgICAgIGZyZWUoaGVhZGVyLT5vd25lZERhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVsZXRlIGhlYWRlcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1QYWNrYWdlR3JvdXBzLmNsZWFyKCk7Ci0gICAgbUhlYWRlcnMuY2xlYXIoKTsKLX0KLQotYm9vbCBSZXNUYWJsZTo6Z2V0UmVzb3VyY2VOYW1lKHVpbnQzMl90IHJlc0lELCBib29sIGFsbG93VXRmOCwgcmVzb3VyY2VfbmFtZSogb3V0TmFtZSkgY29uc3QKLXsKLSAgICBpZiAobUVycm9yICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBzc2l6ZV90IHAgPSBnZXRSZXNvdXJjZVBhY2thZ2VJbmRleChyZXNJRCk7Ci0gICAgY29uc3QgaW50IHQgPSBSZXNfR0VUVFlQRShyZXNJRCk7Ci0gICAgY29uc3QgaW50IGUgPSBSZXNfR0VURU5UUlkocmVzSUQpOwotCi0gICAgaWYgKHAgPCAwKSB7Ci0gICAgICAgIGlmIChSZXNfR0VUUEFDS0FHRShyZXNJRCkrMSA9PSAwKSB7Ci0gICAgICAgICAgICBBTE9HVygiTm8gcGFja2FnZSBpZGVudGlmaWVyIHdoZW4gZ2V0dGluZyBuYW1lIGZvciByZXNvdXJjZSBudW1iZXIgMHglMDh4IiwgcmVzSUQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR1coIk5vIGtub3duIHBhY2thZ2Ugd2hlbiBnZXR0aW5nIG5hbWUgZm9yIHJlc291cmNlIG51bWJlciAweCUwOHgiLCByZXNJRCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAodCA8IDApIHsKLSAgICAgICAgQUxPR1coIk5vIHR5cGUgaWRlbnRpZmllciB3aGVuIGdldHRpbmcgbmFtZSBmb3IgcmVzb3VyY2UgbnVtYmVyIDB4JTA4eCIsIHJlc0lEKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IFBhY2thZ2VHcm91cCogY29uc3QgZ3JwID0gbVBhY2thZ2VHcm91cHNbcF07Ci0gICAgaWYgKGdycCA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dXKCJCYWQgaWRlbnRpZmllciB3aGVuIGdldHRpbmcgbmFtZSBmb3IgcmVzb3VyY2UgbnVtYmVyIDB4JTA4eCIsIHJlc0lEKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoZ3JwLT5wYWNrYWdlcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGNvbnN0IFBhY2thZ2UqIGNvbnN0IHBhY2thZ2UgPSBncnAtPnBhY2thZ2VzWzBdOwotCi0gICAgICAgIGNvbnN0IFJlc1RhYmxlX3R5cGUqIHR5cGU7Ci0gICAgICAgIGNvbnN0IFJlc1RhYmxlX2VudHJ5KiBlbnRyeTsKLSAgICAgICAgc3NpemVfdCBvZmZzZXQgPSBnZXRFbnRyeShwYWNrYWdlLCB0LCBlLCBOVUxMLCAmdHlwZSwgJmVudHJ5LCBOVUxMKTsKLSAgICAgICAgaWYgKG9mZnNldCA8PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXROYW1lLT5wYWNrYWdlID0gZ3JwLT5uYW1lLnN0cmluZygpOwotICAgICAgICBvdXROYW1lLT5wYWNrYWdlTGVuID0gZ3JwLT5uYW1lLnNpemUoKTsKLSAgICAgICAgaWYgKGFsbG93VXRmOCkgewotICAgICAgICAgICAgb3V0TmFtZS0+dHlwZTggPSBncnAtPmJhc2VQYWNrYWdlLT50eXBlU3RyaW5ncy5zdHJpbmc4QXQodCwgJm91dE5hbWUtPnR5cGVMZW4pOwotICAgICAgICAgICAgb3V0TmFtZS0+bmFtZTggPSBncnAtPmJhc2VQYWNrYWdlLT5rZXlTdHJpbmdzLnN0cmluZzhBdCgKLSAgICAgICAgICAgICAgICBkdG9obChlbnRyeS0+a2V5LmluZGV4KSwgJm91dE5hbWUtPm5hbWVMZW4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb3V0TmFtZS0+dHlwZTggPSBOVUxMOwotICAgICAgICAgICAgb3V0TmFtZS0+bmFtZTggPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvdXROYW1lLT50eXBlOCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBvdXROYW1lLT50eXBlID0gZ3JwLT5iYXNlUGFja2FnZS0+dHlwZVN0cmluZ3Muc3RyaW5nQXQodCwgJm91dE5hbWUtPnR5cGVMZW4pOwotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIGJhZCBpbmRleCBmb3Igc29tZSByZWFzb24sIHdlIHNob3VsZCBhYm9ydC4KLSAgICAgICAgICAgIGlmIChvdXROYW1lLT50eXBlID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG91dE5hbWUtPm5hbWU4ID09IE5VTEwpIHsKLSAgICAgICAgICAgIG91dE5hbWUtPm5hbWUgPSBncnAtPmJhc2VQYWNrYWdlLT5rZXlTdHJpbmdzLnN0cmluZ0F0KAotICAgICAgICAgICAgICAgIGR0b2hsKGVudHJ5LT5rZXkuaW5kZXgpLCAmb3V0TmFtZS0+bmFtZUxlbik7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgYmFkIGluZGV4IGZvciBzb21lIHJlYXNvbiwgd2Ugc2hvdWxkIGFib3J0LgotICAgICAgICAgICAgaWYgKG91dE5hbWUtPm5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3NpemVfdCBSZXNUYWJsZTo6Z2V0UmVzb3VyY2UodWludDMyX3QgcmVzSUQsIFJlc192YWx1ZSogb3V0VmFsdWUsIGJvb2wgbWF5QmVCYWcsIHVpbnQxNl90IGRlbnNpdHksCi0gICAgICAgIHVpbnQzMl90KiBvdXRTcGVjRmxhZ3MsIFJlc1RhYmxlX2NvbmZpZyogb3V0Q29uZmlnKSBjb25zdAotewotICAgIGlmIChtRXJyb3IgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIG1FcnJvcjsKLSAgICB9Ci0KLSAgICBjb25zdCBzc2l6ZV90IHAgPSBnZXRSZXNvdXJjZVBhY2thZ2VJbmRleChyZXNJRCk7Ci0gICAgY29uc3QgaW50IHQgPSBSZXNfR0VUVFlQRShyZXNJRCk7Ci0gICAgY29uc3QgaW50IGUgPSBSZXNfR0VURU5UUlkocmVzSUQpOwotCi0gICAgaWYgKHAgPCAwKSB7Ci0gICAgICAgIGlmIChSZXNfR0VUUEFDS0FHRShyZXNJRCkrMSA9PSAwKSB7Ci0gICAgICAgICAgICBBTE9HVygiTm8gcGFja2FnZSBpZGVudGlmaWVyIHdoZW4gZ2V0dGluZyB2YWx1ZSBmb3IgcmVzb3VyY2UgbnVtYmVyIDB4JTA4eCIsIHJlc0lEKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFMT0dXKCJObyBrbm93biBwYWNrYWdlIHdoZW4gZ2V0dGluZyB2YWx1ZSBmb3IgcmVzb3VyY2UgbnVtYmVyIDB4JTA4eCIsIHJlc0lEKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQkFEX0lOREVYOwotICAgIH0KLSAgICBpZiAodCA8IDApIHsKLSAgICAgICAgQUxPR1coIk5vIHR5cGUgaWRlbnRpZmllciB3aGVuIGdldHRpbmcgdmFsdWUgZm9yIHJlc291cmNlIG51bWJlciAweCUwOHgiLCByZXNJRCk7Ci0gICAgICAgIHJldHVybiBCQURfSU5ERVg7Ci0gICAgfQotCi0gICAgY29uc3QgUmVzX3ZhbHVlKiBiZXN0VmFsdWUgPSBOVUxMOwotICAgIGNvbnN0IFBhY2thZ2UqIGJlc3RQYWNrYWdlID0gTlVMTDsKLSAgICBSZXNUYWJsZV9jb25maWcgYmVzdEl0ZW07Ci0gICAgbWVtc2V0KCZiZXN0SXRlbSwgMCwgc2l6ZW9mKGJlc3RJdGVtKSk7IC8vIG1ha2UgdGhlIGNvbXBpbGVyIHNodXQgdXAKLQotICAgIGlmIChvdXRTcGVjRmxhZ3MgIT0gTlVMTCkgKm91dFNwZWNGbGFncyA9IDA7Ci0KLSAgICAvLyBMb29rIHRocm91Z2ggYWxsIHJlc291cmNlIHBhY2thZ2VzLCBzdGFydGluZyB3aXRoIHRoZSBtb3N0Ci0gICAgLy8gcmVjZW50bHkgYWRkZWQuCi0gICAgY29uc3QgUGFja2FnZUdyb3VwKiBjb25zdCBncnAgPSBtUGFja2FnZUdyb3Vwc1twXTsKLSAgICBpZiAoZ3JwID09IE5VTEwpIHsKLSAgICAgICAgQUxPR1coIkJhZCBpZGVudGlmaWVyIHdoZW4gZ2V0dGluZyB2YWx1ZSBmb3IgcmVzb3VyY2UgbnVtYmVyIDB4JTA4eCIsIHJlc0lEKTsKLSAgICAgICAgcmV0dXJuIEJBRF9JTkRFWDsKLSAgICB9Ci0KLSAgICAvLyBBbGxvdyBvdmVycmlkaW5nIGRlbnNpdHkKLSAgICBjb25zdCBSZXNUYWJsZV9jb25maWcqIGRlc2lyZWRDb25maWcgPSAmbVBhcmFtczsKLSAgICBSZXNUYWJsZV9jb25maWcqIG92ZXJyaWRlQ29uZmlnID0gTlVMTDsKLSAgICBpZiAoZGVuc2l0eSA+IDApIHsKLSAgICAgICAgb3ZlcnJpZGVDb25maWcgPSAoUmVzVGFibGVfY29uZmlnKikgbWFsbG9jKHNpemVvZihSZXNUYWJsZV9jb25maWcpKTsKLSAgICAgICAgaWYgKG92ZXJyaWRlQ29uZmlnID09IE5VTEwpIHsKLSAgICAgICAgICAgIEFMT0dFKCJDb3VsZG4ndCBtYWxsb2MgUmVzVGFibGVfY29uZmlnIGZvciBvdmVycmlkZXM6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgIHJldHVybiBCQURfSU5ERVg7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KG92ZXJyaWRlQ29uZmlnLCAmbVBhcmFtcywgc2l6ZW9mKFJlc1RhYmxlX2NvbmZpZykpOwotICAgICAgICBvdmVycmlkZUNvbmZpZy0+ZGVuc2l0eSA9IGRlbnNpdHk7Ci0gICAgICAgIGRlc2lyZWRDb25maWcgPSBvdmVycmlkZUNvbmZpZzsKLSAgICB9Ci0KLSAgICBzc2l6ZV90IHJjID0gQkFEX1ZBTFVFOwotICAgIHNpemVfdCBpcCA9IGdycC0+cGFja2FnZXMuc2l6ZSgpOwotICAgIHdoaWxlIChpcCA+IDApIHsKLSAgICAgICAgaXAtLTsKLSAgICAgICAgaW50IFQgPSB0OwotICAgICAgICBpbnQgRSA9IGU7Ci0KLSAgICAgICAgY29uc3QgUGFja2FnZSogY29uc3QgcGFja2FnZSA9IGdycC0+cGFja2FnZXNbaXBdOwotICAgICAgICBpZiAocGFja2FnZS0+aGVhZGVyLT5yZXNvdXJjZUlETWFwKSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBvdmVybGF5UmVzSUQgPSAweDA7Ci0gICAgICAgICAgICBzdGF0dXNfdCByZXR2YWwgPSBpZG1hcExvb2t1cChwYWNrYWdlLT5oZWFkZXItPnJlc291cmNlSURNYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLT5oZWFkZXItPnJlc291cmNlSURNYXBTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzSUQsICZvdmVybGF5UmVzSUQpOwotICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBOT19FUlJPUiAmJiBvdmVybGF5UmVzSUQgIT0gMHgwKSB7Ci0gICAgICAgICAgICAgICAgLy8gZm9yIHRoaXMgbG9vcCBpdGVyYXRpb24sIHRoaXMgaXMgdGhlIHR5cGUgYW5kIGVudHJ5IHdlIHJlYWxseSB3YW50Ci0gICAgICAgICAgICAgICAgQUxPR1YoInJlc291cmNlIG1hcCAweCUwOHggLT4gMHglMDh4XG4iLCByZXNJRCwgb3ZlcmxheVJlc0lEKTsKLSAgICAgICAgICAgICAgICBUID0gUmVzX0dFVFRZUEUob3ZlcmxheVJlc0lEKTsKLSAgICAgICAgICAgICAgICBFID0gUmVzX0dFVEVOVFJZKG92ZXJsYXlSZXNJRCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHJlc291cmNlIG5vdCBwcmVzZW50IGluIG92ZXJsYXkgcGFja2FnZSwgY29udGludWUgd2l0aCB0aGUgbmV4dCBwYWNrYWdlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBSZXNUYWJsZV90eXBlKiB0eXBlOwotICAgICAgICBjb25zdCBSZXNUYWJsZV9lbnRyeSogZW50cnk7Ci0gICAgICAgIGNvbnN0IFR5cGUqIHR5cGVDbGFzczsKLSAgICAgICAgc3NpemVfdCBvZmZzZXQgPSBnZXRFbnRyeShwYWNrYWdlLCBULCBFLCBkZXNpcmVkQ29uZmlnLCAmdHlwZSwgJmVudHJ5LCAmdHlwZUNsYXNzKTsKLSAgICAgICAgaWYgKG9mZnNldCA8PSAwKSB7Ci0gICAgICAgICAgICAvLyBObyB7ZW50cnksIGFwcHJvcHJpYXRlIGNvbmZpZ30gcGFpciBmb3VuZCBpbiBwYWNrYWdlLiBJZiB0aGlzCi0gICAgICAgICAgICAvLyBwYWNrYWdlIGlzIGFuIG92ZXJsYXkgcGFja2FnZSAoaXAgIT0gMCksIHRoaXMgc2ltcGx5IG1lYW5zIHRoZQotICAgICAgICAgICAgLy8gb3ZlcmxheSBwYWNrYWdlIGRpZCBub3Qgc3BlY2lmeSBhIGRlZmF1bHQuCi0gICAgICAgICAgICAvLyBOb24tb3ZlcmxheSBwYWNrYWdlcyBhcmUgc3RpbGwgcmVxdWlyZWQgdG8gcHJvdmlkZSBhIGRlZmF1bHQuCi0gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCAmJiBpcCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIkZhaWx1cmUgZ2V0dGluZyBlbnRyeSBmb3IgMHglMDh4ICh0PSVkIGU9JWQpIGluIHBhY2thZ2UgJXpkIChlcnJvciAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNJRCwgVCwgRSwgaXAsIChpbnQpb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICByYyA9IG9mZnNldDsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChkdG9ocyhlbnRyeS0+ZmxhZ3MpJmVudHJ5LT5GTEFHX0NPTVBMRVgpICE9IDApIHsKLSAgICAgICAgICAgIGlmICghbWF5QmVCYWcpIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiUmVxdWVzdGluZyByZXNvdXJjZSAlcCBmYWlsZWQgYmVjYXVzZSBpdCBpcyBjb21wbGV4XG4iLAotICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXJlc0lEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgVEFCTEVfTk9JU1koYW91dCA8PCAiUmVzb3VyY2UgdHlwZSBkYXRhOiAiCi0gICAgICAgICAgICAgIDw8IEhleER1bXAodHlwZSwgZHRvaGwodHlwZS0+aGVhZGVyLnNpemUpKSA8PCBlbmRsKTsKLQotICAgICAgICBpZiAoKHNpemVfdClvZmZzZXQgPiAoZHRvaGwodHlwZS0+aGVhZGVyLnNpemUpLXNpemVvZihSZXNfdmFsdWUpKSkgewotICAgICAgICAgICAgQUxPR1coIlJlc1RhYmxlX2l0ZW0gYXQgJWQgaXMgYmV5b25kIHR5cGUgY2h1bmsgZGF0YSAlZCIsCi0gICAgICAgICAgICAgICAgIChpbnQpb2Zmc2V0LCBkdG9obCh0eXBlLT5oZWFkZXIuc2l6ZSkpOwotICAgICAgICAgICAgcmMgPSBCQURfVFlQRTsKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgUmVzX3ZhbHVlKiBpdGVtID0KLSAgICAgICAgICAgIChjb25zdCBSZXNfdmFsdWUqKSgoKGNvbnN0IHVpbnQ4X3QqKXR5cGUpICsgb2Zmc2V0KTsKLSAgICAgICAgUmVzVGFibGVfY29uZmlnIHRoaXNDb25maWc7Ci0gICAgICAgIHRoaXNDb25maWcuY29weUZyb21EdG9IKHR5cGUtPmNvbmZpZyk7Ci0KLSAgICAgICAgaWYgKG91dFNwZWNGbGFncyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAodHlwZUNsYXNzLT50eXBlU3BlY0ZsYWdzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAqb3V0U3BlY0ZsYWdzIHw9IGR0b2hsKHR5cGVDbGFzcy0+dHlwZVNwZWNGbGFnc1tFXSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICpvdXRTcGVjRmxhZ3MgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChiZXN0UGFja2FnZSAhPSBOVUxMICYmCi0gICAgICAgICAgICAoYmVzdEl0ZW0uaXNNb3JlU3BlY2lmaWNUaGFuKHRoaXNDb25maWcpIHx8IGJlc3RJdGVtLmRpZmYodGhpc0NvbmZpZykgPT0gMCkpIHsKLSAgICAgICAgICAgIC8vIERpc2NhcmQgdGhpc0NvbmZpZyBub3Qgb25seSBpZiBiZXN0SXRlbSBpcyBtb3JlIHNwZWNpZmljLCBidXQgYWxzbyBpZiB0aGUgdHdvIGNvbmZpZ3MKLSAgICAgICAgICAgIC8vIGFyZSBpZGVudGljYWwgKGRpZmYgPT0gMCksIG9yIG92ZXJsYXkgcGFja2FnZXMgd2lsbCBub3QgdGFrZSBlZmZlY3QuCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYmVzdEl0ZW0gPSB0aGlzQ29uZmlnOwotICAgICAgICBiZXN0VmFsdWUgPSBpdGVtOwotICAgICAgICBiZXN0UGFja2FnZSA9IHBhY2thZ2U7Ci0gICAgfQotCi0gICAgVEFCTEVfTk9JU1kocHJpbnRmKCJGb3VuZCByZXN1bHQ6IHBhY2thZ2UgJXBcbiIsIGJlc3RQYWNrYWdlKSk7Ci0KLSAgICBpZiAoYmVzdFZhbHVlKSB7Ci0gICAgICAgIG91dFZhbHVlLT5zaXplID0gZHRvaHMoYmVzdFZhbHVlLT5zaXplKTsKLSAgICAgICAgb3V0VmFsdWUtPnJlczAgPSBiZXN0VmFsdWUtPnJlczA7Ci0gICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IGJlc3RWYWx1ZS0+ZGF0YVR5cGU7Ci0gICAgICAgIG91dFZhbHVlLT5kYXRhID0gZHRvaGwoYmVzdFZhbHVlLT5kYXRhKTsKLSAgICAgICAgaWYgKG91dENvbmZpZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAqb3V0Q29uZmlnID0gYmVzdEl0ZW07Ci0gICAgICAgIH0KLSAgICAgICAgVEFCTEVfTk9JU1koc2l6ZV90IGxlbjsKLSAgICAgICAgICAgICAgcHJpbnRmKCJGb3VuZCB2YWx1ZTogcGtnPSVkLCB0eXBlPSVkLCBzdHI9JXMsIGludD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIGJlc3RQYWNrYWdlLT5oZWFkZXItPmluZGV4LAotICAgICAgICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlLAotICAgICAgICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID09IGJlc3RWYWx1ZS0+VFlQRV9TVFJJTkcKLSAgICAgICAgICAgICAgICAgICAgID8gU3RyaW5nOChiZXN0UGFja2FnZS0+aGVhZGVyLT52YWx1ZXMuc3RyaW5nQXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGEsICZsZW4pKS5zdHJpbmcoKQotICAgICAgICAgICAgICAgICAgICAgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhKSk7Ci0gICAgICAgIHJjID0gYmVzdFBhY2thZ2UtPmhlYWRlci0+aW5kZXg7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotb3V0OgotICAgIGlmIChvdmVycmlkZUNvbmZpZyAhPSBOVUxMKSB7Ci0gICAgICAgIGZyZWUob3ZlcnJpZGVDb25maWcpOwotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0KLQotc3NpemVfdCBSZXNUYWJsZTo6cmVzb2x2ZVJlZmVyZW5jZShSZXNfdmFsdWUqIHZhbHVlLCBzc2l6ZV90IGJsb2NrSW5kZXgsCi0gICAgICAgIHVpbnQzMl90KiBvdXRMYXN0UmVmLCB1aW50MzJfdCogaW5vdXRUeXBlU3BlY0ZsYWdzLAotICAgICAgICBSZXNUYWJsZV9jb25maWcqIG91dENvbmZpZykgY29uc3QKLXsKLSAgICBpbnQgY291bnQ9MDsKLSAgICB3aGlsZSAoYmxvY2tJbmRleCA+PSAwICYmIHZhbHVlLT5kYXRhVHlwZSA9PSB2YWx1ZS0+VFlQRV9SRUZFUkVOQ0UKLSAgICAgICAgICAgJiYgdmFsdWUtPmRhdGEgIT0gMCAmJiBjb3VudCA8IDIwKSB7Ci0gICAgICAgIGlmIChvdXRMYXN0UmVmKSAqb3V0TGFzdFJlZiA9IHZhbHVlLT5kYXRhOwotICAgICAgICB1aW50MzJfdCBsYXN0UmVmID0gdmFsdWUtPmRhdGE7Ci0gICAgICAgIHVpbnQzMl90IG5ld0ZsYWdzID0gMDsKLSAgICAgICAgY29uc3Qgc3NpemVfdCBuZXdJbmRleCA9IGdldFJlc291cmNlKHZhbHVlLT5kYXRhLCB2YWx1ZSwgdHJ1ZSwgMCwgJm5ld0ZsYWdzLAotICAgICAgICAgICAgICAgIG91dENvbmZpZyk7Ci0gICAgICAgIGlmIChuZXdJbmRleCA9PSBCQURfSU5ERVgpIHsKLSAgICAgICAgICAgIHJldHVybiBCQURfSU5ERVg7Ci0gICAgICAgIH0KLSAgICAgICAgVEFCTEVfVEhFTUUoQUxPR0koIlJlc29sdmluZyByZWZlcmVuY2UgJXA6IG5ld0luZGV4PSVkLCB0eXBlPTB4JXgsIGRhdGE9JXBcbiIsCi0gICAgICAgICAgICAgKHZvaWQqKWxhc3RSZWYsIChpbnQpbmV3SW5kZXgsIChpbnQpdmFsdWUtPmRhdGFUeXBlLCAodm9pZCopdmFsdWUtPmRhdGEpKTsKLSAgICAgICAgLy9wcmludGYoIkdldHRpbmcgcmVmZXJlbmNlIDB4JTA4eDogbmV3SW5kZXg9JWRcbiIsIHZhbHVlLT5kYXRhLCBuZXdJbmRleCk7Ci0gICAgICAgIGlmIChpbm91dFR5cGVTcGVjRmxhZ3MgIT0gTlVMTCkgKmlub3V0VHlwZVNwZWNGbGFncyB8PSBuZXdGbGFnczsKLSAgICAgICAgaWYgKG5ld0luZGV4IDwgMCkgewotICAgICAgICAgICAgLy8gVGhpcyBjYW4gZmFpbCBpZiB0aGUgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCBpcyBhIHN0eWxlLi4uCi0gICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2UsIGp1c3QgcmV0dXJuIHRoZSByZWZlcmVuY2UsIGFuZCBleHBlY3QgdGhlCi0gICAgICAgICAgICAvLyBjYWxsZXIgdG8gZGVhbCB3aXRoLgotICAgICAgICAgICAgcmV0dXJuIGJsb2NrSW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgYmxvY2tJbmRleCA9IG5ld0luZGV4OwotICAgICAgICBjb3VudCsrOwotICAgIH0KLSAgICByZXR1cm4gYmxvY2tJbmRleDsKLX0KLQotY29uc3QgY2hhcjE2X3QqIFJlc1RhYmxlOjp2YWx1ZVRvU3RyaW5nKAotICAgIGNvbnN0IFJlc192YWx1ZSogdmFsdWUsIHNpemVfdCBzdHJpbmdCbG9jaywKLSAgICBjaGFyMTZfdCB0bXBCdWZmZXJbVE1QX0JVRkZFUl9TSVpFXSwgc2l6ZV90KiBvdXRMZW4pCi17Ci0gICAgaWYgKCF2YWx1ZSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKHZhbHVlLT5kYXRhVHlwZSA9PSB2YWx1ZS0+VFlQRV9TVFJJTkcpIHsKLSAgICAgICAgcmV0dXJuIGdldFRhYmxlU3RyaW5nQmxvY2soc3RyaW5nQmxvY2spLT5zdHJpbmdBdCh2YWx1ZS0+ZGF0YSwgb3V0TGVuKTsKLSAgICB9Ci0gICAgLy8gWFhYIGRvIGludCB0byBzdHJpbmcgY29udmVyc2lvbnMuCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXNzaXplX3QgUmVzVGFibGU6OmxvY2tCYWcodWludDMyX3QgcmVzSUQsIGNvbnN0IGJhZ19lbnRyeSoqIG91dEJhZykgY29uc3QKLXsKLSAgICBtTG9jay5sb2NrKCk7Ci0gICAgc3NpemVfdCBlcnIgPSBnZXRCYWdMb2NrZWQocmVzSUQsIG91dEJhZyk7Ci0gICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgIC8vcHJpbnRmKCIqKiogZ2V0IGZhaWxlZCEgIHVubG9ja2luZ1xuIik7Ci0gICAgICAgIG1Mb2NrLnVubG9jaygpOwotICAgIH0KLSAgICByZXR1cm4gZXJyOwotfQotCi12b2lkIFJlc1RhYmxlOjp1bmxvY2tCYWcoY29uc3QgYmFnX2VudHJ5KiBiYWcpIGNvbnN0Ci17Ci0gICAgLy9wcmludGYoIjw8PCB1bmxvY2tCYWcgJXBcbiIsIHRoaXMpOwotICAgIG1Mb2NrLnVubG9jaygpOwotfQotCi12b2lkIFJlc1RhYmxlOjpsb2NrKCkgY29uc3QKLXsKLSAgICBtTG9jay5sb2NrKCk7Ci19Ci0KLXZvaWQgUmVzVGFibGU6OnVubG9jaygpIGNvbnN0Ci17Ci0gICAgbUxvY2sudW5sb2NrKCk7Ci19Ci0KLXNzaXplX3QgUmVzVGFibGU6OmdldEJhZ0xvY2tlZCh1aW50MzJfdCByZXNJRCwgY29uc3QgYmFnX2VudHJ5Kiogb3V0QmFnLAotICAgICAgICB1aW50MzJfdCogb3V0VHlwZVNwZWNGbGFncykgY29uc3QKLXsKLSAgICBpZiAobUVycm9yICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBtRXJyb3I7Ci0gICAgfQotCi0gICAgY29uc3Qgc3NpemVfdCBwID0gZ2V0UmVzb3VyY2VQYWNrYWdlSW5kZXgocmVzSUQpOwotICAgIGNvbnN0IGludCB0ID0gUmVzX0dFVFRZUEUocmVzSUQpOwotICAgIGNvbnN0IGludCBlID0gUmVzX0dFVEVOVFJZKHJlc0lEKTsKLQotICAgIGlmIChwIDwgMCkgewotICAgICAgICBBTE9HVygiSW52YWxpZCBwYWNrYWdlIGlkZW50aWZpZXIgd2hlbiBnZXR0aW5nIGJhZyBmb3IgcmVzb3VyY2UgbnVtYmVyIDB4JTA4eCIsIHJlc0lEKTsKLSAgICAgICAgcmV0dXJuIEJBRF9JTkRFWDsKLSAgICB9Ci0gICAgaWYgKHQgPCAwKSB7Ci0gICAgICAgIEFMT0dXKCJObyB0eXBlIGlkZW50aWZpZXIgd2hlbiBnZXR0aW5nIGJhZyBmb3IgcmVzb3VyY2UgbnVtYmVyIDB4JTA4eCIsIHJlc0lEKTsKLSAgICAgICAgcmV0dXJuIEJBRF9JTkRFWDsKLSAgICB9Ci0KLSAgICAvL3ByaW50ZigiR2V0IGJhZzogaWQ9MHglMDh4LCBwPSVkLCB0PSVkXG4iLCByZXNJRCwgcCwgdCk7Ci0gICAgUGFja2FnZUdyb3VwKiBjb25zdCBncnAgPSBtUGFja2FnZUdyb3Vwc1twXTsKLSAgICBpZiAoZ3JwID09IE5VTEwpIHsKLSAgICAgICAgQUxPR1coIkJhZCBpZGVudGlmaWVyIHdoZW4gZ2V0dGluZyBiYWcgZm9yIHJlc291cmNlIG51bWJlciAweCUwOHgiLCByZXNJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodCA+PSAoaW50KWdycC0+dHlwZUNvdW50KSB7Ci0gICAgICAgIEFMT0dXKCJUeXBlIGlkZW50aWZpZXIgMHgleCBpcyBsYXJnZXIgdGhhbiB0eXBlIGNvdW50IDB4JXgiLAotICAgICAgICAgICAgIHQrMSwgKGludClncnAtPnR5cGVDb3VudCk7Ci0gICAgICAgIHJldHVybiBCQURfSU5ERVg7Ci0gICAgfQotCi0gICAgY29uc3QgUGFja2FnZSogY29uc3QgYmFzZVBhY2thZ2UgPSBncnAtPnBhY2thZ2VzWzBdOwotCi0gICAgY29uc3QgVHlwZSogY29uc3QgdHlwZUNvbmZpZ3MgPSBiYXNlUGFja2FnZS0+Z2V0VHlwZSh0KTsKLQotICAgIGNvbnN0IHNpemVfdCBORU5UUlkgPSB0eXBlQ29uZmlncy0+ZW50cnlDb3VudDsKLSAgICBpZiAoZSA+PSAoaW50KU5FTlRSWSkgewotICAgICAgICBBTE9HVygiRW50cnkgaWRlbnRpZmllciAweCV4IGlzIGxhcmdlciB0aGFuIGVudHJ5IGNvdW50IDB4JXgiLAotICAgICAgICAgICAgIGUsIChpbnQpdHlwZUNvbmZpZ3MtPmVudHJ5Q291bnQpOwotICAgICAgICByZXR1cm4gQkFEX0lOREVYOwotICAgIH0KLQotICAgIC8vIEZpcnN0IHNlZSBpZiB3ZSd2ZSBhbHJlYWR5IGNvbXB1dGVkIHRoaXMgYmFnLi4uCi0gICAgaWYgKGdycC0+YmFncykgewotICAgICAgICBiYWdfc2V0KiogdHlwZVNldCA9IGdycC0+YmFnc1t0XTsKLSAgICAgICAgaWYgKHR5cGVTZXQpIHsKLSAgICAgICAgICAgIGJhZ19zZXQqIHNldCA9IHR5cGVTZXRbZV07Ci0gICAgICAgICAgICBpZiAoc2V0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNldCAhPSAoYmFnX3NldCopMHhGRkZGRkZGRikgewotICAgICAgICAgICAgICAgICAgICBpZiAob3V0VHlwZVNwZWNGbGFncyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqb3V0VHlwZVNwZWNGbGFncyA9IHNldC0+dHlwZVNwZWNGbGFnczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAqb3V0QmFnID0gKGJhZ19lbnRyeSopKHNldCsxKTsKLSAgICAgICAgICAgICAgICAgICAgLy9BTE9HSSgiRm91bmQgZXhpc3RpbmcgYmFnIGZvcjogJXBcbiIsICh2b2lkKilyZXNJRCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQtPm51bUF0dHJzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBTE9HVygiQXR0ZW1wdCB0byByZXRyaWV2ZSBiYWcgMHglMDh4IHdoaWNoIGlzIGludmFsaWQgb3IgaW4gYSBjeWNsZS4iLAotICAgICAgICAgICAgICAgICAgICAgcmVzSUQpOwotICAgICAgICAgICAgICAgIHJldHVybiBCQURfSU5ERVg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBCYWcgbm90IGZvdW5kLCB3ZSBuZWVkIHRvIGNvbXB1dGUgaXQhCi0gICAgaWYgKCFncnAtPmJhZ3MpIHsKLSAgICAgICAgZ3JwLT5iYWdzID0gKGJhZ19zZXQqKiopY2FsbG9jKGdycC0+dHlwZUNvdW50LCBzaXplb2YoYmFnX3NldCopKTsKLSAgICAgICAgaWYgKCFncnAtPmJhZ3MpIHJldHVybiBOT19NRU1PUlk7Ci0gICAgfQotCi0gICAgYmFnX3NldCoqIHR5cGVTZXQgPSBncnAtPmJhZ3NbdF07Ci0gICAgaWYgKCF0eXBlU2V0KSB7Ci0gICAgICAgIHR5cGVTZXQgPSAoYmFnX3NldCoqKWNhbGxvYyhORU5UUlksIHNpemVvZihiYWdfc2V0KikpOwotICAgICAgICBpZiAoIXR5cGVTZXQpIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIGdycC0+YmFnc1t0XSA9IHR5cGVTZXQ7Ci0gICAgfQotCi0gICAgLy8gTWFyayB0aGF0IHdlIGFyZSBjdXJyZW50bHkgd29ya2luZyBvbiB0aGlzIG9uZS4KLSAgICB0eXBlU2V0W2VdID0gKGJhZ19zZXQqKTB4RkZGRkZGRkY7Ci0KLSAgICAvLyBUaGlzIGlzIHdoYXQgd2UgYXJlIGJ1aWxkaW5nLgotICAgIGJhZ19zZXQqIHNldCA9IE5VTEw7Ci0KLSAgICBUQUJMRV9OT0lTWShBTE9HSSgiQnVpbGRpbmcgYmFnOiAlcFxuIiwgKHZvaWQqKXJlc0lEKSk7Ci0gICAgCi0gICAgUmVzVGFibGVfY29uZmlnIGJlc3RDb25maWc7Ci0gICAgbWVtc2V0KCZiZXN0Q29uZmlnLCAwLCBzaXplb2YoYmVzdENvbmZpZykpOwotCi0gICAgLy8gTm93IGNvbGxlY3QgYWxsIGJhZyBhdHRyaWJ1dGVzIGZyb20gYWxsIHBhY2thZ2VzLgotICAgIHNpemVfdCBpcCA9IGdycC0+cGFja2FnZXMuc2l6ZSgpOwotICAgIHdoaWxlIChpcCA+IDApIHsKLSAgICAgICAgaXAtLTsKLSAgICAgICAgaW50IFQgPSB0OwotICAgICAgICBpbnQgRSA9IGU7Ci0KLSAgICAgICAgY29uc3QgUGFja2FnZSogY29uc3QgcGFja2FnZSA9IGdycC0+cGFja2FnZXNbaXBdOwotICAgICAgICBpZiAocGFja2FnZS0+aGVhZGVyLT5yZXNvdXJjZUlETWFwKSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBvdmVybGF5UmVzSUQgPSAweDA7Ci0gICAgICAgICAgICBzdGF0dXNfdCByZXR2YWwgPSBpZG1hcExvb2t1cChwYWNrYWdlLT5oZWFkZXItPnJlc291cmNlSURNYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLT5oZWFkZXItPnJlc291cmNlSURNYXBTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzSUQsICZvdmVybGF5UmVzSUQpOwotICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBOT19FUlJPUiAmJiBvdmVybGF5UmVzSUQgIT0gMHgwKSB7Ci0gICAgICAgICAgICAgICAgLy8gZm9yIHRoaXMgbG9vcCBpdGVyYXRpb24sIHRoaXMgaXMgdGhlIHR5cGUgYW5kIGVudHJ5IHdlIHJlYWxseSB3YW50Ci0gICAgICAgICAgICAgICAgQUxPR1YoInJlc291cmNlIG1hcCAweCUwOHggLT4gMHglMDh4XG4iLCByZXNJRCwgb3ZlcmxheVJlc0lEKTsKLSAgICAgICAgICAgICAgICBUID0gUmVzX0dFVFRZUEUob3ZlcmxheVJlc0lEKTsKLSAgICAgICAgICAgICAgICBFID0gUmVzX0dFVEVOVFJZKG92ZXJsYXlSZXNJRCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHJlc291cmNlIG5vdCBwcmVzZW50IGluIG92ZXJsYXkgcGFja2FnZSwgY29udGludWUgd2l0aCB0aGUgbmV4dCBwYWNrYWdlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBSZXNUYWJsZV90eXBlKiB0eXBlOwotICAgICAgICBjb25zdCBSZXNUYWJsZV9lbnRyeSogZW50cnk7Ci0gICAgICAgIGNvbnN0IFR5cGUqIHR5cGVDbGFzczsKLSAgICAgICAgQUxPR1YoIkdldHRpbmcgZW50cnkgcGtnPSVwLCB0PSVkLCBlPSVkXG4iLCBwYWNrYWdlLCBULCBFKTsKLSAgICAgICAgc3NpemVfdCBvZmZzZXQgPSBnZXRFbnRyeShwYWNrYWdlLCBULCBFLCAmbVBhcmFtcywgJnR5cGUsICZlbnRyeSwgJnR5cGVDbGFzcyk7Ci0gICAgICAgIEFMT0dWKCJSZXN1bHRpbmcgb2Zmc2V0PSVkXG4iLCBvZmZzZXQpOwotICAgICAgICBpZiAob2Zmc2V0IDw9IDApIHsKLSAgICAgICAgICAgIC8vIE5vIHtlbnRyeSwgYXBwcm9wcmlhdGUgY29uZmlnfSBwYWlyIGZvdW5kIGluIHBhY2thZ2UuIElmIHRoaXMKLSAgICAgICAgICAgIC8vIHBhY2thZ2UgaXMgYW4gb3ZlcmxheSBwYWNrYWdlIChpcCAhPSAwKSwgdGhpcyBzaW1wbHkgbWVhbnMgdGhlCi0gICAgICAgICAgICAvLyBvdmVybGF5IHBhY2thZ2UgZGlkIG5vdCBzcGVjaWZ5IGEgZGVmYXVsdC4KLSAgICAgICAgICAgIC8vIE5vbi1vdmVybGF5IHBhY2thZ2VzIGFyZSBzdGlsbCByZXF1aXJlZCB0byBwcm92aWRlIGEgZGVmYXVsdC4KLSAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwICYmIGlwID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoc2V0KSBmcmVlKHNldCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChkdG9ocyhlbnRyeS0+ZmxhZ3MpJmVudHJ5LT5GTEFHX0NPTVBMRVgpID09IDApIHsKLSAgICAgICAgICAgIEFMT0dXKCJTa2lwcGluZyBlbnRyeSAlcCBpbiBwYWNrYWdlIHRhYmxlICVkIGJlY2F1c2UgaXQgaXMgbm90IGNvbXBsZXghXG4iLAotICAgICAgICAgICAgICAgICAodm9pZCopcmVzSUQsIChpbnQpaXApOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2V0ICE9IE5VTEwgJiYgIXR5cGUtPmNvbmZpZy5pc0JldHRlclRoYW4oYmVzdENvbmZpZywgTlVMTCkpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGJlc3RDb25maWcgPSB0eXBlLT5jb25maWc7Ci0gICAgICAgIGlmIChzZXQpIHsKLSAgICAgICAgICAgIGZyZWUoc2V0KTsKLSAgICAgICAgICAgIHNldCA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCB1aW50MTZfdCBlbnRyeVNpemUgPSBkdG9ocyhlbnRyeS0+c2l6ZSk7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IHBhcmVudCA9IGVudHJ5U2l6ZSA+PSBzaXplb2YoUmVzVGFibGVfbWFwX2VudHJ5KQotICAgICAgICAgICAgPyBkdG9obCgoKGNvbnN0IFJlc1RhYmxlX21hcF9lbnRyeSopZW50cnkpLT5wYXJlbnQuaWRlbnQpIDogMDsKLSAgICAgICAgY29uc3QgdWludDMyX3QgY291bnQgPSBlbnRyeVNpemUgPj0gc2l6ZW9mKFJlc1RhYmxlX21hcF9lbnRyeSkKLSAgICAgICAgICAgID8gZHRvaGwoKChjb25zdCBSZXNUYWJsZV9tYXBfZW50cnkqKWVudHJ5KS0+Y291bnQpIDogMDsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBOID0gY291bnQ7Ci0KLSAgICAgICAgVEFCTEVfTk9JU1koQUxPR0koIkZvdW5kIG1hcDogc2l6ZT0lcCBwYXJlbnQ9JXAgY291bnQ9JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlTaXplLCBwYXJlbnQsIGNvdW50KSk7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBtYXAgaW5oZXJpdHMgZnJvbSBhbm90aGVyLCB3ZSBuZWVkIHRvIHN0YXJ0Ci0gICAgICAgIC8vIHdpdGggaXRzIHBhcmVudCdzIHZhbHVlcy4gIE90aGVyd2lzZSBzdGFydCBvdXQgZW1wdHkuCi0gICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigiQ3JlYXRpbmcgbmV3IGJhZywgZW50cnlTaXplPTB4JTA4eCwgcGFyZW50PTB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5U2l6ZSwgcGFyZW50KSk7Ci0gICAgICAgIGlmIChwYXJlbnQpIHsKLSAgICAgICAgICAgIGNvbnN0IGJhZ19lbnRyeSogcGFyZW50QmFnOwotICAgICAgICAgICAgdWludDMyX3QgcGFyZW50VHlwZVNwZWNGbGFncyA9IDA7Ci0gICAgICAgICAgICBjb25zdCBzc2l6ZV90IE5QID0gZ2V0QmFnTG9ja2VkKHBhcmVudCwgJnBhcmVudEJhZywgJnBhcmVudFR5cGVTcGVjRmxhZ3MpOwotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE5UID0gKChOUCA+PSAwKSA/IE5QIDogMCkgKyBOOwotICAgICAgICAgICAgc2V0ID0gKGJhZ19zZXQqKW1hbGxvYyhzaXplb2YoYmFnX3NldCkrc2l6ZW9mKGJhZ19lbnRyeSkqTlQpOwotICAgICAgICAgICAgaWYgKHNldCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChOUCA+IDApIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkoc2V0KzEsIHBhcmVudEJhZywgTlAqc2l6ZW9mKGJhZ19lbnRyeSkpOwotICAgICAgICAgICAgICAgIHNldC0+bnVtQXR0cnMgPSBOUDsKLSAgICAgICAgICAgICAgICBUQUJMRV9OT0lTWShBTE9HSSgiSW5pdGlhbGl6ZWQgbmV3IGJhZyB3aXRoICVkIGluaGVyaXRlZCBhdHRyaWJ1dGVzLlxuIiwgTlApKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVEFCTEVfTk9JU1koQUxPR0koIkluaXRpYWxpemVkIG5ldyBiYWcgd2l0aCBubyBpbmhlcml0ZWQgYXR0cmlidXRlcy5cbiIpKTsKLSAgICAgICAgICAgICAgICBzZXQtPm51bUF0dHJzID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldC0+YXZhaWxBdHRycyA9IE5UOwotICAgICAgICAgICAgc2V0LT50eXBlU3BlY0ZsYWdzID0gcGFyZW50VHlwZVNwZWNGbGFnczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldCA9IChiYWdfc2V0KiltYWxsb2Moc2l6ZW9mKGJhZ19zZXQpK3NpemVvZihiYWdfZW50cnkpKk4pOwotICAgICAgICAgICAgaWYgKHNldCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldC0+bnVtQXR0cnMgPSAwOwotICAgICAgICAgICAgc2V0LT5hdmFpbEF0dHJzID0gTjsKLSAgICAgICAgICAgIHNldC0+dHlwZVNwZWNGbGFncyA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZUNsYXNzLT50eXBlU3BlY0ZsYWdzICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHNldC0+dHlwZVNwZWNGbGFncyB8PSBkdG9obCh0eXBlQ2xhc3MtPnR5cGVTcGVjRmxhZ3NbRV0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2V0LT50eXBlU3BlY0ZsYWdzID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyBtZXJnZSBpbiB0aGUgbmV3IGF0dHJpYnV0ZXMuLi4KLSAgICAgICAgc3NpemVfdCBjdXJPZmYgPSBvZmZzZXQ7Ci0gICAgICAgIGNvbnN0IFJlc1RhYmxlX21hcCogbWFwOwotICAgICAgICBiYWdfZW50cnkqIGVudHJpZXMgPSAoYmFnX2VudHJ5Kikoc2V0KzEpOwotICAgICAgICBzaXplX3QgY3VyRW50cnkgPSAwOwotICAgICAgICB1aW50MzJfdCBwb3MgPSAwOwotICAgICAgICBUQUJMRV9OT0lTWShBTE9HSSgiU3RhcnRpbmcgd2l0aCBzZXQgJXAsIGVudHJpZXM9JXAsIGF2YWlsPSVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgc2V0LCBlbnRyaWVzLCBzZXQtPmF2YWlsQXR0cnMpKTsKLSAgICAgICAgd2hpbGUgKHBvcyA8IGNvdW50KSB7Ci0gICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIk5vdyBhdCAlcFxuIiwgKHZvaWQqKWN1ck9mZikpOwotCi0gICAgICAgICAgICBpZiAoKHNpemVfdCljdXJPZmYgPiAoZHRvaGwodHlwZS0+aGVhZGVyLnNpemUpLXNpemVvZihSZXNUYWJsZV9tYXApKSkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJSZXNUYWJsZV9tYXAgYXQgJWQgaXMgYmV5b25kIHR5cGUgY2h1bmsgZGF0YSAlZCIsCi0gICAgICAgICAgICAgICAgICAgICAoaW50KWN1ck9mZiwgZHRvaGwodHlwZS0+aGVhZGVyLnNpemUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1RZUEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXAgPSAoY29uc3QgUmVzVGFibGVfbWFwKikoKChjb25zdCB1aW50OF90Kil0eXBlKSArIGN1ck9mZik7Ci0gICAgICAgICAgICBOKys7Ci0KLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IG5ld05hbWUgPSBodG9kbChtYXAtPm5hbWUuaWRlbnQpOwotICAgICAgICAgICAgYm9vbCBpc0luc2lkZTsKLSAgICAgICAgICAgIHVpbnQzMl90IG9sZE5hbWUgPSAwOwotICAgICAgICAgICAgd2hpbGUgKChpc0luc2lkZT0oY3VyRW50cnkgPCBzZXQtPm51bUF0dHJzKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKG9sZE5hbWU9ZW50cmllc1tjdXJFbnRyeV0ubWFwLm5hbWUuaWRlbnQpIDwgbmV3TmFtZSkgewotICAgICAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigiIyVkOiBLZWVwaW5nIGV4aXN0aW5nIGF0dHJpYnV0ZTogMHglMDh4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJFbnRyeSwgZW50cmllc1tjdXJFbnRyeV0ubWFwLm5hbWUuaWRlbnQpKTsKLSAgICAgICAgICAgICAgICBjdXJFbnRyeSsrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKCFpc0luc2lkZSkgfHwgb2xkTmFtZSAhPSBuZXdOYW1lKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBhdHRyaWJ1dGUuLi4gIGZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGl0LgotICAgICAgICAgICAgICAgIGlmIChzZXQtPm51bUF0dHJzID49IHNldC0+YXZhaWxBdHRycykgewotICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGFsbG9jIG1vcmUgbWVtb3J5Li4uCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuZXdBdmFpbCA9IHNldC0+YXZhaWxBdHRycytOOwotICAgICAgICAgICAgICAgICAgICBzZXQgPSAoYmFnX3NldCopcmVhbGxvYyhzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihiYWdfc2V0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZihiYWdfZW50cnkpKm5ld0F2YWlsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNldC0+YXZhaWxBdHRycyA9IG5ld0F2YWlsOwotICAgICAgICAgICAgICAgICAgICBlbnRyaWVzID0gKGJhZ19lbnRyeSopKHNldCsxKTsKLSAgICAgICAgICAgICAgICAgICAgVEFCTEVfTk9JU1kocHJpbnRmKCJSZWFsbG9jYXRlZCBzZXQgJXAsIGVudHJpZXM9JXAsIGF2YWlsPSVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCBlbnRyaWVzLCBzZXQtPmF2YWlsQXR0cnMpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW5zaWRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEdvaW5nIGluIHRoZSBtaWRkbGUsIG5lZWQgdG8gbWFrZSBzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgbWVtbW92ZShlbnRyaWVzK2N1ckVudHJ5KzEsIGVudHJpZXMrY3VyRW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJhZ19lbnRyeSkqKHNldC0+bnVtQXR0cnMtY3VyRW50cnkpKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0LT5udW1BdHRycysrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIiMlZDogSW5zZXJ0aW5nIG5ldyBhdHRyaWJ1dGU6IDB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyRW50cnksIG5ld05hbWUpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVEFCTEVfTk9JU1kocHJpbnRmKCIjJWQ6IFJlcGxhY2luZyBleGlzdGluZyBhdHRyaWJ1dGU6IDB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyRW50cnksIG9sZE5hbWUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYmFnX2VudHJ5KiBjdXIgPSBlbnRyaWVzK2N1ckVudHJ5OwotCi0gICAgICAgICAgICBjdXItPnN0cmluZ0Jsb2NrID0gcGFja2FnZS0+aGVhZGVyLT5pbmRleDsKLSAgICAgICAgICAgIGN1ci0+bWFwLm5hbWUuaWRlbnQgPSBuZXdOYW1lOwotICAgICAgICAgICAgY3VyLT5tYXAudmFsdWUuY29weUZyb21fZHRvaChtYXAtPnZhbHVlKTsKLSAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigiU2V0dGluZyBlbnRyeSAjJWQgJXA6IGJsb2NrPSVkLCBuYW1lPTB4JTA4eCwgdHlwZT0lZCwgZGF0YT0weCUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VyRW50cnksIGN1ciwgY3VyLT5zdHJpbmdCbG9jaywgY3VyLT5tYXAubmFtZS5pZGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjdXItPm1hcC52YWx1ZS5kYXRhVHlwZSwgY3VyLT5tYXAudmFsdWUuZGF0YSkpOwotCi0gICAgICAgICAgICAvLyBPbiB0byB0aGUgbmV4dCEKLSAgICAgICAgICAgIGN1ckVudHJ5Kys7Ci0gICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzaXplID0gZHRvaHMobWFwLT52YWx1ZS5zaXplKTsKLSAgICAgICAgICAgIGN1ck9mZiArPSBzaXplICsgc2l6ZW9mKCptYXApLXNpemVvZihtYXAtPnZhbHVlKTsKLSAgICAgICAgfTsKLSAgICAgICAgaWYgKGN1ckVudHJ5ID4gc2V0LT5udW1BdHRycykgewotICAgICAgICAgICAgc2V0LT5udW1BdHRycyA9IGN1ckVudHJ5OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQW5kIHRoaXMgaXMgaXQuLi4KLSAgICB0eXBlU2V0W2VdID0gc2V0OwotICAgIGlmIChzZXQpIHsKLSAgICAgICAgaWYgKG91dFR5cGVTcGVjRmxhZ3MgIT0gTlVMTCkgewotICAgICAgICAgICAgKm91dFR5cGVTcGVjRmxhZ3MgPSBzZXQtPnR5cGVTcGVjRmxhZ3M7Ci0gICAgICAgIH0KLSAgICAgICAgKm91dEJhZyA9IChiYWdfZW50cnkqKShzZXQrMSk7Ci0gICAgICAgIFRBQkxFX05PSVNZKEFMT0dJKCJSZXR1cm5pbmcgJWQgYXR0cnNcbiIsIHNldC0+bnVtQXR0cnMpKTsKLSAgICAgICAgcmV0dXJuIHNldC0+bnVtQXR0cnM7Ci0gICAgfQotICAgIHJldHVybiBCQURfSU5ERVg7Ci19Ci0KLXZvaWQgUmVzVGFibGU6OnNldFBhcmFtZXRlcnMoY29uc3QgUmVzVGFibGVfY29uZmlnKiBwYXJhbXMpCi17Ci0gICAgbUxvY2subG9jaygpOwotICAgIFRBQkxFX0dFVEVOVFJZKEFMT0dJKCJTZXR0aW5nIHBhcmFtZXRlcnM6ICVzXG4iLCBwYXJhbXMtPnRvU3RyaW5nKCkuc3RyaW5nKCkpKTsKLSAgICBtUGFyYW1zID0gKnBhcmFtczsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8bVBhY2thZ2VHcm91cHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgVEFCTEVfTk9JU1koQUxPR0koIkNMRUFSSU5HIEJBR1MgRk9SIEdST1VQICVkISIsIGkpKTsKLSAgICAgICAgbVBhY2thZ2VHcm91cHNbaV0tPmNsZWFyQmFnQ2FjaGUoKTsKLSAgICB9Ci0gICAgbUxvY2sudW5sb2NrKCk7Ci19Ci0KLXZvaWQgUmVzVGFibGU6OmdldFBhcmFtZXRlcnMoUmVzVGFibGVfY29uZmlnKiBwYXJhbXMpIGNvbnN0Ci17Ci0gICAgbUxvY2subG9jaygpOwotICAgICpwYXJhbXMgPSBtUGFyYW1zOwotICAgIG1Mb2NrLnVubG9jaygpOwotfQotCi1zdHJ1Y3QgaWRfbmFtZV9tYXAgewotICAgIHVpbnQzMl90IGlkOwotICAgIHNpemVfdCBsZW47Ci0gICAgY2hhcjE2X3QgbmFtZVs2XTsKLX07Ci0KLWNvbnN0IHN0YXRpYyBpZF9uYW1lX21hcCBJRF9OQU1FU1tdID0gewotICAgIHsgUmVzVGFibGVfbWFwOjpBVFRSX1RZUEUsICA1LCB7ICdeJywgJ3QnLCAneScsICdwJywgJ2UnIH0gfSwKLSAgICB7IFJlc1RhYmxlX21hcDo6QVRUUl9MMTBOLCAgNSwgeyAnXicsICdsJywgJzEnLCAnMCcsICduJyB9IH0sCi0gICAgeyBSZXNUYWJsZV9tYXA6OkFUVFJfTUlOLCAgIDQsIHsgJ14nLCAnbScsICdpJywgJ24nIH0gfSwKLSAgICB7IFJlc1RhYmxlX21hcDo6QVRUUl9NQVgsICAgNCwgeyAnXicsICdtJywgJ2EnLCAneCcgfSB9LAotICAgIHsgUmVzVGFibGVfbWFwOjpBVFRSX09USEVSLCA2LCB7ICdeJywgJ28nLCAndCcsICdoJywgJ2UnLCAncicgfSB9LAotICAgIHsgUmVzVGFibGVfbWFwOjpBVFRSX1pFUk8sICA1LCB7ICdeJywgJ3onLCAnZScsICdyJywgJ28nIH0gfSwKLSAgICB7IFJlc1RhYmxlX21hcDo6QVRUUl9PTkUsICAgNCwgeyAnXicsICdvJywgJ24nLCAnZScgfSB9LAotICAgIHsgUmVzVGFibGVfbWFwOjpBVFRSX1RXTywgICA0LCB7ICdeJywgJ3QnLCAndycsICdvJyB9IH0sCi0gICAgeyBSZXNUYWJsZV9tYXA6OkFUVFJfRkVXLCAgIDQsIHsgJ14nLCAnZicsICdlJywgJ3cnIH0gfSwKLSAgICB7IFJlc1RhYmxlX21hcDo6QVRUUl9NQU5ZLCAgNSwgeyAnXicsICdtJywgJ2EnLCAnbicsICd5JyB9IH0sCi19OwotCi11aW50MzJfdCBSZXNUYWJsZTo6aWRlbnRpZmllckZvck5hbWUoY29uc3QgY2hhcjE2X3QqIG5hbWUsIHNpemVfdCBuYW1lTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiB0eXBlLCBzaXplX3QgdHlwZUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGFja2FnZUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogb3V0VHlwZVNwZWNGbGFncykgY29uc3QKLXsKLSAgICBUQUJMRV9TVVBFUl9OT0lTWShwcmludGYoIklkZW50aWZpZXIgZm9yIG5hbWU6IGVycm9yPSVkXG4iLCBtRXJyb3IpKTsKLQotICAgIC8vIENoZWNrIGZvciBpbnRlcm5hbCByZXNvdXJjZSBpZGVudGlmaWVyIGFzIHRoZSB2ZXJ5IGZpcnN0IHRoaW5nLCBzbwotICAgIC8vIHRoYXQgd2Ugd2lsbCBhbHdheXMgZmluZCB0aGVtIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbm8gcmVzb3VyY2VzLgotICAgIGlmIChuYW1lWzBdID09ICdeJykgewotICAgICAgICBjb25zdCBpbnQgTiA9IChzaXplb2YoSURfTkFNRVMpL3NpemVvZihJRF9OQU1FU1swXSkpOwotICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBpZF9uYW1lX21hcCogbSA9IElEX05BTUVTICsgaTsKLSAgICAgICAgICAgIGxlbiA9IG0tPmxlbjsKLSAgICAgICAgICAgIGlmIChsZW4gIT0gbmFtZUxlbikgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChzaXplX3Qgaj0xOyBqPGxlbjsgaisrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG0tPm5hbWVbal0gIT0gbmFtZVtqXSkgewotICAgICAgICAgICAgICAgICAgICBnb3RvIG5vcGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG91dFR5cGVTcGVjRmxhZ3MpIHsKLSAgICAgICAgICAgICAgICAqb3V0VHlwZVNwZWNGbGFncyA9IFJlc1RhYmxlX3R5cGVTcGVjOjpTUEVDX1BVQkxJQzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtLT5pZDsKLW5vcGU6Ci0gICAgICAgICAgICA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5hbWVMZW4gPiA3KSB7Ci0gICAgICAgICAgICBpZiAobmFtZVsxXSA9PSAnaScgJiYgbmFtZVsyXSA9PSAnbicKLSAgICAgICAgICAgICAgICAmJiBuYW1lWzNdID09ICdkJyAmJiBuYW1lWzRdID09ICdlJyAmJiBuYW1lWzVdID09ICd4JwotICAgICAgICAgICAgICAgICYmIG5hbWVbNl0gPT0gJ18nKSB7Ci0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gYXRvaShTdHJpbmc4KG5hbWUgKyA3LCBuYW1lTGVuIC0gNykuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGlmIChSZXNfQ0hFQ0tJRChpbmRleCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1coIkFycmF5IHJlc291cmNlIGluZGV4OiAlZCBpcyB0b28gbGFyZ2UuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAob3V0VHlwZVNwZWNGbGFncykgewotICAgICAgICAgICAgICAgICAgICAqb3V0VHlwZVNwZWNGbGFncyA9IFJlc1RhYmxlX3R5cGVTcGVjOjpTUEVDX1BVQkxJQzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuICBSZXNfTUFLRUFSUkFZKGluZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAobUVycm9yICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGJvb2wgZmFrZVB1YmxpYyA9IGZhbHNlOwotCi0gICAgLy8gRmlndXJlIG91dCB0aGUgcGFja2FnZSBhbmQgdHlwZSB3ZSBhcmUgbG9va2luZyBpbi4uLgotCi0gICAgY29uc3QgY2hhcjE2X3QqIHBhY2thZ2VFbmQgPSBOVUxMOwotICAgIGNvbnN0IGNoYXIxNl90KiB0eXBlRW5kID0gTlVMTDsKLSAgICBjb25zdCBjaGFyMTZfdCogY29uc3QgbmFtZUVuZCA9IG5hbWUrbmFtZUxlbjsKLSAgICBjb25zdCBjaGFyMTZfdCogcCA9IG5hbWU7Ci0gICAgd2hpbGUgKHAgPCBuYW1lRW5kKSB7Ci0gICAgICAgIGlmICgqcCA9PSAnOicpIHBhY2thZ2VFbmQgPSBwOwotICAgICAgICBlbHNlIGlmICgqcCA9PSAnLycpIHR5cGVFbmQgPSBwOwotICAgICAgICBwKys7Ci0gICAgfQotICAgIGlmICgqbmFtZSA9PSAnQCcpIHsKLSAgICAgICAgbmFtZSsrOwotICAgICAgICBpZiAoKm5hbWUgPT0gJyonKSB7Ci0gICAgICAgICAgICBmYWtlUHVibGljID0gdHJ1ZTsKLSAgICAgICAgICAgIG5hbWUrKzsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobmFtZSA+PSBuYW1lRW5kKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChwYWNrYWdlRW5kKSB7Ci0gICAgICAgIHBhY2thZ2UgPSBuYW1lOwotICAgICAgICBwYWNrYWdlTGVuID0gcGFja2FnZUVuZC1uYW1lOwotICAgICAgICBuYW1lID0gcGFja2FnZUVuZCsxOwotICAgIH0gZWxzZSBpZiAoIXBhY2thZ2UpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKHR5cGVFbmQpIHsKLSAgICAgICAgdHlwZSA9IG5hbWU7Ci0gICAgICAgIHR5cGVMZW4gPSB0eXBlRW5kLW5hbWU7Ci0gICAgICAgIG5hbWUgPSB0eXBlRW5kKzE7Ci0gICAgfSBlbHNlIGlmICghdHlwZSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSA+PSBuYW1lRW5kKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBuYW1lTGVuID0gbmFtZUVuZC1uYW1lOwotCi0gICAgVEFCTEVfTk9JU1kocHJpbnRmKCJMb29raW5nIGZvciBpZGVudGlmaWVyOiB0eXBlPSVzLCBuYW1lPSVzLCBwYWNrYWdlPSVzXG4iLAotICAgICAgICAgICAgICAgICBTdHJpbmc4KHR5cGUsIHR5cGVMZW4pLnN0cmluZygpLAotICAgICAgICAgICAgICAgICBTdHJpbmc4KG5hbWUsIG5hbWVMZW4pLnN0cmluZygpLAotICAgICAgICAgICAgICAgICBTdHJpbmc4KHBhY2thZ2UsIHBhY2thZ2VMZW4pLnN0cmluZygpKSk7Ci0KLSAgICBjb25zdCBzaXplX3QgTkcgPSBtUGFja2FnZUdyb3Vwcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaWc9MDsgaWc8Tkc7IGlnKyspIHsKLSAgICAgICAgY29uc3QgUGFja2FnZUdyb3VwKiBncm91cCA9IG1QYWNrYWdlR3JvdXBzW2lnXTsKLQotICAgICAgICBpZiAoc3RyemNtcDE2KHBhY2thZ2UsIHBhY2thZ2VMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgZ3JvdXAtPm5hbWUuc3RyaW5nKCksIGdyb3VwLT5uYW1lLnNpemUoKSkpIHsKLSAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigiU2tpcHBpbmcgcGFja2FnZSBncm91cDogJXNcbiIsIFN0cmluZzgoZ3JvdXAtPm5hbWUpLnN0cmluZygpKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHNzaXplX3QgdGkgPSBncm91cC0+YmFzZVBhY2thZ2UtPnR5cGVTdHJpbmdzLmluZGV4T2ZTdHJpbmcodHlwZSwgdHlwZUxlbik7Ci0gICAgICAgIGlmICh0aSA8IDApIHsKLSAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigiVHlwZSBub3QgZm91bmQgaW4gcGFja2FnZSAlc1xuIiwgU3RyaW5nOChncm91cC0+bmFtZSkuc3RyaW5nKCkpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qgc3NpemVfdCBlaSA9IGdyb3VwLT5iYXNlUGFja2FnZS0+a2V5U3RyaW5ncy5pbmRleE9mU3RyaW5nKG5hbWUsIG5hbWVMZW4pOwotICAgICAgICBpZiAoZWkgPCAwKSB7Ci0gICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIk5hbWUgbm90IGZvdW5kIGluIHBhY2thZ2UgJXNcbiIsIFN0cmluZzgoZ3JvdXAtPm5hbWUpLnN0cmluZygpKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigiU2VhcmNoIGluZGljZXM6IHR5cGU9JWQsIG5hbWU9JWRcbiIsIHRpLCBlaSkpOwotCi0gICAgICAgIGNvbnN0IFR5cGUqIGNvbnN0IHR5cGVDb25maWdzID0gZ3JvdXAtPnBhY2thZ2VzWzBdLT5nZXRUeXBlKHRpKTsKLSAgICAgICAgaWYgKHR5cGVDb25maWdzID09IE5VTEwgfHwgdHlwZUNvbmZpZ3MtPmNvbmZpZ3Muc2l6ZSgpIDw9IDApIHsKLSAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigiRXhwZWN0ZWQgdHlwZSBzdHJ1Y3R1cmUgbm90IGZvdW5kIGluIHBhY2thZ2UgJXMgZm9yIGlkbmV4ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZ3JvdXAtPm5hbWUpLnN0cmluZygpLCB0aSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgTlRDID0gdHlwZUNvbmZpZ3MtPmNvbmZpZ3Muc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCB0Y2k9MDsgdGNpPE5UQzsgdGNpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX3R5cGUqIGNvbnN0IHR5ID0gdHlwZUNvbmZpZ3MtPmNvbmZpZ3NbdGNpXTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHR5cGVPZmZzZXQgPSBkdG9obCh0eS0+ZW50cmllc1N0YXJ0KTsKLQotICAgICAgICAgICAgY29uc3QgdWludDhfdCogY29uc3QgZW5kID0gKChjb25zdCB1aW50OF90Kil0eSkgKyBkdG9obCh0eS0+aGVhZGVyLnNpemUpOwotICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGNvbnN0IGVpbmRleCA9IChjb25zdCB1aW50MzJfdCopCi0gICAgICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopdHkpICsgZHRvaHModHktPmhlYWRlci5oZWFkZXJTaXplKSk7Ci0KLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBORSA9IGR0b2hsKHR5LT5lbnRyeUNvdW50KTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxORTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gZHRvaGwoZWluZGV4W2ldKTsKLSAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09IFJlc1RhYmxlX3R5cGU6Ok5PX0VOVFJZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdHlwZU9mZnNldDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gKGR0b2hsKHR5LT5oZWFkZXIuc2l6ZSktc2l6ZW9mKFJlc1RhYmxlX2VudHJ5KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1coIlJlc1RhYmxlX2VudHJ5IGF0ICVkIGlzIGJleW9uZCB0eXBlIGNodW5rIGRhdGEgJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgZHRvaGwodHktPmhlYWRlci5zaXplKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKG9mZnNldCYweDMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1coIlJlc1RhYmxlX2VudHJ5IGF0ICVkIChwa2c9JWQgdHlwZT0lZCBlbnQ9JWQpIGlzIG5vdCBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5IHdoZW4gbG9va2luZyBmb3IgJXM6JXMvJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpb2Zmc2V0LCAoaW50KWdyb3VwLT5pZCwgKGludCl0aSsxLCAoaW50KWksCi0gICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChwYWNrYWdlLCBwYWNrYWdlTGVuKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHR5cGUsIHR5cGVMZW4pLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgobmFtZSwgbmFtZUxlbikuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfZW50cnkqIGNvbnN0IGVudHJ5ID0gKGNvbnN0IFJlc1RhYmxlX2VudHJ5KikKLSAgICAgICAgICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopdHkpICsgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoZHRvaHMoZW50cnktPnNpemUpIDwgc2l6ZW9mKCplbnRyeSkpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1coIlJlc1RhYmxlX2VudHJ5IHNpemUgJWQgaXMgdG9vIHNtYWxsIiwgZHRvaHMoZW50cnktPnNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9UWVBFOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFRBQkxFX1NVUEVSX05PSVNZKHByaW50ZigiTG9va2luZyBhdCBlbnRyeSAjJWQ6IHdhbnQgc3RyICVkLCBoYXZlICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBlaSwgZHRvaGwoZW50cnktPmtleS5pbmRleCkpKTsKLSAgICAgICAgICAgICAgICBpZiAoZHRvaGwoZW50cnktPmtleS5pbmRleCkgPT0gKHNpemVfdCllaSkgewotICAgICAgICAgICAgICAgICAgICBpZiAob3V0VHlwZVNwZWNGbGFncykgewotICAgICAgICAgICAgICAgICAgICAgICAgKm91dFR5cGVTcGVjRmxhZ3MgPSB0eXBlQ29uZmlncy0+dHlwZVNwZWNGbGFnc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWtlUHVibGljKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dFR5cGVTcGVjRmxhZ3MgfD0gUmVzVGFibGVfdHlwZVNwZWM6OlNQRUNfUFVCTElDOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNfTUFLRUlEKGdyb3VwLT5pZC0xLCB0aSwgaSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgUmVzVGFibGU6OmV4cGFuZFJlc291cmNlUmVmKGNvbnN0IHVpbnQxNl90KiByZWZTdHIsIHNpemVfdCByZWZMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiogb3V0UGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2KiBvdXRUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYqIG91dE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiogZGVmVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2KiBkZWZQYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIG91dEVycm9yTXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogb3V0UHVibGljT25seSkKLXsKLSAgICBjb25zdCBjaGFyMTZfdCogcGFja2FnZUVuZCA9IE5VTEw7Ci0gICAgY29uc3QgY2hhcjE2X3QqIHR5cGVFbmQgPSBOVUxMOwotICAgIGNvbnN0IGNoYXIxNl90KiBwID0gcmVmU3RyOwotICAgIGNvbnN0IGNoYXIxNl90KiBjb25zdCBlbmQgPSBwICsgcmVmTGVuOwotICAgIHdoaWxlIChwIDwgZW5kKSB7Ci0gICAgICAgIGlmICgqcCA9PSAnOicpIHBhY2thZ2VFbmQgPSBwOwotICAgICAgICBlbHNlIGlmICgqcCA9PSAnLycpIHsKLSAgICAgICAgICAgIHR5cGVFbmQgPSBwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcCsrOwotICAgIH0KLSAgICBwID0gcmVmU3RyOwotICAgIGlmICgqcCA9PSAnQCcpIHArKzsKLQotICAgIGlmIChvdXRQdWJsaWNPbmx5ICE9IE5VTEwpIHsKLSAgICAgICAgKm91dFB1YmxpY09ubHkgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoKnAgPT0gJyonKSB7Ci0gICAgICAgIHArKzsKLSAgICAgICAgaWYgKG91dFB1YmxpY09ubHkgIT0gTlVMTCkgewotICAgICAgICAgICAgKm91dFB1YmxpY09ubHkgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwYWNrYWdlRW5kKSB7Ci0gICAgICAgICpvdXRQYWNrYWdlID0gU3RyaW5nMTYocCwgcGFja2FnZUVuZC1wKTsKLSAgICAgICAgcCA9IHBhY2thZ2VFbmQrMTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWRlZlBhY2thZ2UpIHsKLSAgICAgICAgICAgIGlmIChvdXRFcnJvck1zZykgewotICAgICAgICAgICAgICAgICpvdXRFcnJvck1zZyA9ICJObyByZXNvdXJjZSBwYWNrYWdlIHNwZWNpZmllZCI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgKm91dFBhY2thZ2UgPSAqZGVmUGFja2FnZTsKLSAgICB9Ci0gICAgaWYgKHR5cGVFbmQpIHsKLSAgICAgICAgKm91dFR5cGUgPSBTdHJpbmcxNihwLCB0eXBlRW5kLXApOwotICAgICAgICBwID0gdHlwZUVuZCsxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghZGVmVHlwZSkgewotICAgICAgICAgICAgaWYgKG91dEVycm9yTXNnKSB7Ci0gICAgICAgICAgICAgICAgKm91dEVycm9yTXNnID0gIk5vIHJlc291cmNlIHR5cGUgc3BlY2lmaWVkIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAqb3V0VHlwZSA9ICpkZWZUeXBlOwotICAgIH0KLSAgICAqb3V0TmFtZSA9IFN0cmluZzE2KHAsIGVuZC1wKTsKLSAgICBpZigqKm91dFBhY2thZ2UgPT0gMCkgewotICAgICAgICBpZihvdXRFcnJvck1zZykgewotICAgICAgICAgICAgKm91dEVycm9yTXNnID0gIlJlc291cmNlIHBhY2thZ2UgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZyI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZigqKm91dFR5cGUgPT0gMCkgewotICAgICAgICBpZihvdXRFcnJvck1zZykgewotICAgICAgICAgICAgKm91dEVycm9yTXNnID0gIlJlc291cmNlIHR5cGUgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZyI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZigqKm91dE5hbWUgPT0gMCkgewotICAgICAgICBpZihvdXRFcnJvck1zZykgewotICAgICAgICAgICAgKm91dEVycm9yTXNnID0gIlJlc291cmNlIGlkIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmciOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdCBnZXRfaGV4KGNoYXIgYywgYm9vbCogb3V0RXJyb3IpCi17Ci0gICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7Ci0gICAgICAgIHJldHVybiBjIC0gJzAnOwotICAgIH0gZWxzZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpIHsKLSAgICAgICAgcmV0dXJuIGMgLSAnYScgKyAweGE7Ci0gICAgfSBlbHNlIGlmIChjID49ICdBJyAmJiBjIDw9ICdGJykgewotICAgICAgICByZXR1cm4gYyAtICdBJyArIDB4YTsKLSAgICB9Ci0gICAgKm91dEVycm9yID0gdHJ1ZTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RydWN0IHVuaXRfZW50cnkKLXsKLSAgICBjb25zdCBjaGFyKiBuYW1lOwotICAgIHNpemVfdCBsZW47Ci0gICAgdWludDhfdCB0eXBlOwotICAgIHVpbnQzMl90IHVuaXQ7Ci0gICAgZmxvYXQgc2NhbGU7Ci19OwotCi1zdGF0aWMgY29uc3QgdW5pdF9lbnRyeSB1bml0TmFtZXNbXSA9IHsKLSAgICB7ICJweCIsIHN0cmxlbigicHgiKSwgUmVzX3ZhbHVlOjpUWVBFX0RJTUVOU0lPTiwgUmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfUFgsIDEuMGYgfSwKLSAgICB7ICJkaXAiLCBzdHJsZW4oImRpcCIpLCBSZXNfdmFsdWU6OlRZUEVfRElNRU5TSU9OLCBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9ESVAsIDEuMGYgfSwKLSAgICB7ICJkcCIsIHN0cmxlbigiZHAiKSwgUmVzX3ZhbHVlOjpUWVBFX0RJTUVOU0lPTiwgUmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfRElQLCAxLjBmIH0sCi0gICAgeyAic3AiLCBzdHJsZW4oInNwIiksIFJlc192YWx1ZTo6VFlQRV9ESU1FTlNJT04sIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX1NQLCAxLjBmIH0sCi0gICAgeyAicHQiLCBzdHJsZW4oInB0IiksIFJlc192YWx1ZTo6VFlQRV9ESU1FTlNJT04sIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX1BULCAxLjBmIH0sCi0gICAgeyAiaW4iLCBzdHJsZW4oImluIiksIFJlc192YWx1ZTo6VFlQRV9ESU1FTlNJT04sIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX0lOLCAxLjBmIH0sCi0gICAgeyAibW0iLCBzdHJsZW4oIm1tIiksIFJlc192YWx1ZTo6VFlQRV9ESU1FTlNJT04sIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX01NLCAxLjBmIH0sCi0gICAgeyAiJSIsIHN0cmxlbigiJSIpLCBSZXNfdmFsdWU6OlRZUEVfRlJBQ1RJT04sIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX0ZSQUNUSU9OLCAxLjBmLzEwMCB9LAotICAgIHsgIiVwIiwgc3RybGVuKCIlcCIpLCBSZXNfdmFsdWU6OlRZUEVfRlJBQ1RJT04sIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX0ZSQUNUSU9OX1BBUkVOVCwgMS4wZi8xMDAgfSwKLSAgICB7IE5VTEwsIDAsIDAsIDAsIDAgfQotfTsKLQotc3RhdGljIGJvb2wgcGFyc2VfdW5pdChjb25zdCBjaGFyKiBzdHIsIFJlc192YWx1ZSogb3V0VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBvdXRTY2FsZSwgY29uc3QgY2hhcioqIG91dEVuZCkKLXsKLSAgICBjb25zdCBjaGFyKiBlbmQgPSBzdHI7Ci0gICAgd2hpbGUgKCplbmQgIT0gMCAmJiAhaXNzcGFjZSgodW5zaWduZWQgY2hhcikqZW5kKSkgewotICAgICAgICBlbmQrKzsKLSAgICB9Ci0gICAgY29uc3Qgc2l6ZV90IGxlbiA9IGVuZC1zdHI7Ci0KLSAgICBjb25zdCBjaGFyKiByZWFsRW5kID0gZW5kOwotICAgIHdoaWxlICgqcmVhbEVuZCAhPSAwICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnJlYWxFbmQpKSB7Ci0gICAgICAgIHJlYWxFbmQrKzsKLSAgICB9Ci0gICAgaWYgKCpyZWFsRW5kICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBjb25zdCB1bml0X2VudHJ5KiBjdXIgPSB1bml0TmFtZXM7Ci0gICAgd2hpbGUgKGN1ci0+bmFtZSkgewotICAgICAgICBpZiAobGVuID09IGN1ci0+bGVuICYmIHN0cm5jbXAoY3VyLT5uYW1lLCBzdHIsIGxlbikgPT0gMCkgewotICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gY3VyLT50eXBlOwotICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGEgPSBjdXItPnVuaXQgPDwgUmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfU0hJRlQ7Ci0gICAgICAgICAgICAqb3V0U2NhbGUgPSBjdXItPnNjYWxlOwotICAgICAgICAgICAgKm91dEVuZCA9IGVuZDsKLSAgICAgICAgICAgIC8vcHJpbnRmKCJGb3VuZCB1bml0ICVzIGZvciAlc1xuIiwgY3VyLT5uYW1lLCBzdHIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgY3VyKys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0KLWJvb2wgUmVzVGFibGU6OnN0cmluZ1RvSW50KGNvbnN0IGNoYXIxNl90KiBzLCBzaXplX3QgbGVuLCBSZXNfdmFsdWUqIG91dFZhbHVlKQotewotICAgIHdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UxNigqcykpIHsKLSAgICAgICAgcysrOwotICAgICAgICBsZW4tLTsKLSAgICB9Ci0KLSAgICBpZiAobGVuIDw9IDApIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNpemVfdCBpID0gMDsKLSAgICBpbnQzMl90IHZhbCA9IDA7Ci0gICAgYm9vbCBuZWcgPSBmYWxzZTsKLQotICAgIGlmICgqcyA9PSAnLScpIHsKLSAgICAgICAgbmVnID0gdHJ1ZTsKLSAgICAgICAgaSsrOwotICAgIH0KLQotICAgIGlmIChzW2ldIDwgJzAnIHx8IHNbaV0gPiAnOScpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIERlY2ltYWwgb3IgaGV4PwotICAgIGlmIChzW2ldID09ICcwJyAmJiBzW2krMV0gPT0gJ3gnKSB7Ci0gICAgICAgIGlmIChvdXRWYWx1ZSkKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IG91dFZhbHVlLT5UWVBFX0lOVF9IRVg7Ci0gICAgICAgIGkgKz0gMjsKLSAgICAgICAgYm9vbCBlcnJvciA9IGZhbHNlOwotICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiAhZXJyb3IpIHsKLSAgICAgICAgICAgIHZhbCA9ICh2YWwqMTYpICsgZ2V0X2hleChzW2ldLCAmZXJyb3IpOwotICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG91dFZhbHVlKQotICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gb3V0VmFsdWUtPlRZUEVfSU5UX0RFQzsKLSAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKLSAgICAgICAgICAgIGlmIChzW2ldIDwgJzAnIHx8IHNbaV0gPiAnOScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YWwgPSAodmFsKjEwKSArIHNbaV0tJzAnOwotICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5lZykgdmFsID0gLXZhbDsKLQotICAgIHdoaWxlIChpIDwgbGVuICYmIGlzc3BhY2UxNihzW2ldKSkgewotICAgICAgICBpKys7Ci0gICAgfQotCi0gICAgaWYgKGkgPT0gbGVuKSB7Ci0gICAgICAgIGlmIChvdXRWYWx1ZSkKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhID0gdmFsOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzVGFibGU6OnN0cmluZ1RvRmxvYXQoY29uc3QgY2hhcjE2X3QqIHMsIHNpemVfdCBsZW4sIFJlc192YWx1ZSogb3V0VmFsdWUpCi17Ci0gICAgd2hpbGUgKGxlbiA+IDAgJiYgaXNzcGFjZTE2KCpzKSkgewotICAgICAgICBzKys7Ci0gICAgICAgIGxlbi0tOwotICAgIH0KLQotICAgIGlmIChsZW4gPD0gMCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2hhciBidWZbMTI4XTsKLSAgICBpbnQgaT0wOwotICAgIHdoaWxlIChsZW4gPiAwICYmICpzICE9IDAgJiYgaSA8IDEyNikgewotICAgICAgICBpZiAoKnMgPiAyNTUpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBidWZbaSsrXSA9ICpzKys7Ci0gICAgICAgIGxlbi0tOwotICAgIH0KLQotICAgIGlmIChsZW4gPiAwKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGJ1ZlswXSA8ICcwJyAmJiBidWZbMF0gPiAnOScgJiYgYnVmWzBdICE9ICcuJykgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYnVmW2ldID0gMDsKLSAgICBjb25zdCBjaGFyKiBlbmQ7Ci0gICAgZmxvYXQgZiA9IHN0cnRvZihidWYsIChjaGFyKiopJmVuZCk7Ci0KLSAgICBpZiAoKmVuZCAhPSAwICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSplbmQpKSB7Ci0gICAgICAgIC8vIE1pZ2h0IGJlIGEgdW5pdC4uLgotICAgICAgICBmbG9hdCBzY2FsZTsKLSAgICAgICAgaWYgKHBhcnNlX3VuaXQoZW5kLCBvdXRWYWx1ZSwgJnNjYWxlLCAmZW5kKSkgewotICAgICAgICAgICAgZiAqPSBzY2FsZTsKLSAgICAgICAgICAgIGNvbnN0IGJvb2wgbmVnID0gZiA8IDA7Ci0gICAgICAgICAgICBpZiAobmVnKSBmID0gLWY7Ci0gICAgICAgICAgICB1aW50NjRfdCBiaXRzID0gKHVpbnQ2NF90KShmKigxPDwyMykrLjVmKTsKLSAgICAgICAgICAgIHVpbnQzMl90IHJhZGl4OwotICAgICAgICAgICAgdWludDMyX3Qgc2hpZnQ7Ci0gICAgICAgICAgICBpZiAoKGJpdHMmMHg3ZmZmZmYpID09IDApIHsKLSAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXNlIDIzcDAgaWYgdGhlcmUgaXMgbm8gZnJhY3Rpb24sIGp1c3QgdG8gbWFrZQotICAgICAgICAgICAgICAgIC8vIHRoaW5ncyBlYXNpZXIgdG8gcmVhZC4KLSAgICAgICAgICAgICAgICByYWRpeCA9IFJlc192YWx1ZTo6Q09NUExFWF9SQURJWF8yM3AwOwotICAgICAgICAgICAgICAgIHNoaWZ0ID0gMjM7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChiaXRzJjB4ZmZmZmZmZmZmZjgwMDAwMExMKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFnbml0dWRlIGlzIHplcm8gLS0gY2FuIGZpdCBpbiAwIGJpdHMgb2YgcHJlY2lzaW9uLgotICAgICAgICAgICAgICAgIHJhZGl4ID0gUmVzX3ZhbHVlOjpDT01QTEVYX1JBRElYXzBwMjM7Ci0gICAgICAgICAgICAgICAgc2hpZnQgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmICgoYml0cyYweGZmZmZmZmZmODAwMDAwMDBMTCkgPT0gMCkgewotICAgICAgICAgICAgICAgIC8vIE1hZ25pdHVkZSBjYW4gZml0IGluIDggYml0cyBvZiBwcmVjaXNpb24uCi0gICAgICAgICAgICAgICAgcmFkaXggPSBSZXNfdmFsdWU6OkNPTVBMRVhfUkFESVhfOHAxNTsKLSAgICAgICAgICAgICAgICBzaGlmdCA9IDg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChiaXRzJjB4ZmZmZmZmODAwMDAwMDAwMExMKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFnbml0dWRlIGNhbiBmaXQgaW4gMTYgYml0cyBvZiBwcmVjaXNpb24uCi0gICAgICAgICAgICAgICAgcmFkaXggPSBSZXNfdmFsdWU6OkNPTVBMRVhfUkFESVhfMTZwNzsKLSAgICAgICAgICAgICAgICBzaGlmdCA9IDE2OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBNYWduaXR1ZGUgbmVlZHMgZW50aXJlIHJhbmdlLCBzbyBubyBmcmFjdGlvbmFsIHBhcnQuCi0gICAgICAgICAgICAgICAgcmFkaXggPSBSZXNfdmFsdWU6OkNPTVBMRVhfUkFESVhfMjNwMDsKLSAgICAgICAgICAgICAgICBzaGlmdCA9IDIzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50MzJfdCBtYW50aXNzYSA9IChpbnQzMl90KSgKLSAgICAgICAgICAgICAgICAoYml0cz4+c2hpZnQpICYgUmVzX3ZhbHVlOjpDT01QTEVYX01BTlRJU1NBX01BU0spOwotICAgICAgICAgICAgaWYgKG5lZykgewotICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gKC1tYW50aXNzYSkgJiBSZXNfdmFsdWU6OkNPTVBMRVhfTUFOVElTU0FfTUFTSzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhIHw9IAotICAgICAgICAgICAgICAgIChyYWRpeDw8UmVzX3ZhbHVlOjpDT01QTEVYX1JBRElYX1NISUZUKQotICAgICAgICAgICAgICAgIHwgKG1hbnRpc3NhPDxSZXNfdmFsdWU6OkNPTVBMRVhfTUFOVElTU0FfU0hJRlQpOwotICAgICAgICAgICAgLy9wcmludGYoIklucHV0IHZhbHVlOiAlZiAweCUwMTZMeCwgbXVsdDogJWYsIHJhZGl4OiAlZCwgc2hpZnQ6ICVkLCBmaW5hbDogMHglMDh4XG4iLAotICAgICAgICAgICAgLy8gICAgICAgZiAqIChuZWcgPyAtMSA6IDEpLCBiaXRzLCBmKigxPDwyMyksCi0gICAgICAgICAgICAvLyAgICAgICByYWRpeCwgc2hpZnQsIG91dFZhbHVlLT5kYXRhKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoKmVuZCAhPSAwICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmVuZCkpIHsKLSAgICAgICAgZW5kKys7Ci0gICAgfQotCi0gICAgaWYgKCplbmQgPT0gMCkgewotICAgICAgICBpZiAob3V0VmFsdWUpIHsKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IG91dFZhbHVlLT5UWVBFX0ZMT0FUOwotICAgICAgICAgICAgKihmbG9hdCopKCZvdXRWYWx1ZS0+ZGF0YSkgPSBmOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzVGFibGU6OnN0cmluZ1RvVmFsdWUoUmVzX3ZhbHVlKiBvdXRWYWx1ZSwgU3RyaW5nMTYqIG91dFN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHMsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlc2VydmVTcGFjZXMsIGJvb2wgY29lcmNlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXR0cklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiogZGVmVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc29yKiBhY2Nlc3NvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYWNjZXNzb3JDb29raWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGF0dHJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGVuZm9yY2VQcml2YXRlKSBjb25zdAotewotICAgIGJvb2wgbG9jYWxpemF0aW9uU2V0dGluZyA9IGFjY2Vzc29yICE9IE5VTEwgJiYgYWNjZXNzb3ItPmdldExvY2FsaXphdGlvblNldHRpbmcoKTsKLSAgICBjb25zdCBjaGFyKiBlcnJvck1zZyA9IE5VTEw7Ci0KLSAgICBvdXRWYWx1ZS0+c2l6ZSA9IHNpemVvZihSZXNfdmFsdWUpOwotICAgIG91dFZhbHVlLT5yZXMwID0gMDsKLQotICAgIC8vIEZpcnN0IHN0cmlwIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZS4gIERvIHRoaXMgYmVmb3JlIGhhbmRsaW5nCi0gICAgLy8gZXNjYXBlcywgc28gdGhleSBjYW4gYmUgdXNlZCB0byBmb3JjZSB3aGl0ZXNwYWNlIGludG8gdGhlIHN0cmluZy4KLSAgICBpZiAoIXByZXNlcnZlU3BhY2VzKSB7Ci0gICAgICAgIHdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UxNigqcykpIHsKLSAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIGxlbi0tOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UxNihzW2xlbi0xXSkpIHsKLSAgICAgICAgICAgIGxlbi0tOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSBzdHJpbmcgZW5kcyB3aXRoICdcJywgdGhlbiB3ZSBrZWVwIHRoZSBzcGFjZSBhZnRlciBpdC4KLSAgICAgICAgaWYgKGxlbiA+IDAgJiYgc1tsZW4tMV0gPT0gJ1xcJyAmJiBzW2xlbl0gIT0gMCkgewotICAgICAgICAgICAgbGVuKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvL3ByaW50ZigiVmFsdWUgZm9yOiAlc1xuIiwgU3RyaW5nOChzLCBsZW4pLnN0cmluZygpKTsKLQotICAgIHVpbnQzMl90IGwxMG5SZXEgPSBSZXNUYWJsZV9tYXA6OkwxME5fTk9UX1JFUVVJUkVEOwotICAgIHVpbnQzMl90IGF0dHJNaW4gPSAweDgwMDAwMDAwLCBhdHRyTWF4ID0gMHg3ZmZmZmZmZjsKLSAgICBib29sIGZyb21BY2Nlc3NvciA9IGZhbHNlOwotICAgIGlmIChhdHRySUQgIT0gMCAmJiAhUmVzX0lOVEVSTkFMSUQoYXR0cklEKSkgewotICAgICAgICBjb25zdCBzc2l6ZV90IHAgPSBnZXRSZXNvdXJjZVBhY2thZ2VJbmRleChhdHRySUQpOwotICAgICAgICBjb25zdCBiYWdfZW50cnkqIGJhZzsKLSAgICAgICAgc3NpemVfdCBjbnQgPSBwID49IDAgPyBsb2NrQmFnKGF0dHJJRCwgJmJhZykgOiAtMTsKLSAgICAgICAgLy9wcmludGYoIkZvciBhdHRyIDB4JTA4eCBnb3QgYmFnIG9mICVkXG4iLCBhdHRySUQsIGNudCk7Ci0gICAgICAgIGlmIChjbnQgPj0gMCkgewotICAgICAgICAgICAgd2hpbGUgKGNudCA+IDApIHsKLSAgICAgICAgICAgICAgICAvL3ByaW50ZigiRW50cnkgMHglMDh4ID0gMHglMDh4XG4iLCBiYWctPm1hcC5uYW1lLmlkZW50LCBiYWctPm1hcC52YWx1ZS5kYXRhKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGJhZy0+bWFwLm5hbWUuaWRlbnQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFJlc1RhYmxlX21hcDo6QVRUUl9UWVBFOgotICAgICAgICAgICAgICAgICAgICBhdHRyVHlwZSA9IGJhZy0+bWFwLnZhbHVlLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfbWFwOjpBVFRSX01JTjoKLSAgICAgICAgICAgICAgICAgICAgYXR0ck1pbiA9IGJhZy0+bWFwLnZhbHVlLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfbWFwOjpBVFRSX01BWDoKLSAgICAgICAgICAgICAgICAgICAgYXR0ck1heCA9IGJhZy0+bWFwLnZhbHVlLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfbWFwOjpBVFRSX0wxME46Ci0gICAgICAgICAgICAgICAgICAgIGwxMG5SZXEgPSBiYWctPm1hcC52YWx1ZS5kYXRhOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYmFnKys7Ci0gICAgICAgICAgICAgICAgY250LS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1bmxvY2tCYWcoYmFnKTsKLSAgICAgICAgfSBlbHNlIGlmIChhY2Nlc3NvciAmJiBhY2Nlc3Nvci0+Z2V0QXR0cmlidXRlVHlwZShhdHRySUQsICZhdHRyVHlwZSkpIHsKLSAgICAgICAgICAgIGZyb21BY2Nlc3NvciA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoYXR0clR5cGUgPT0gUmVzVGFibGVfbWFwOjpUWVBFX0VOVU0KLSAgICAgICAgICAgICAgICAgICAgfHwgYXR0clR5cGUgPT0gUmVzVGFibGVfbWFwOjpUWVBFX0ZMQUdTCi0gICAgICAgICAgICAgICAgICAgIHx8IGF0dHJUeXBlID09IFJlc1RhYmxlX21hcDo6VFlQRV9JTlRFR0VSKSB7Ci0gICAgICAgICAgICAgICAgYWNjZXNzb3ItPmdldEF0dHJpYnV0ZU1pbihhdHRySUQsICZhdHRyTWluKTsKLSAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+Z2V0QXR0cmlidXRlTWF4KGF0dHJJRCwgJmF0dHJNYXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxvY2FsaXphdGlvblNldHRpbmcpIHsKLSAgICAgICAgICAgICAgICBsMTBuUmVxID0gYWNjZXNzb3ItPmdldEF0dHJpYnV0ZUwxME4oYXR0cklEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IGJvb2wgY2FuU3RyaW5nQ29lcmNlID0KLSAgICAgICAgY29lcmNlVHlwZSAmJiAoYXR0clR5cGUmUmVzVGFibGVfbWFwOjpUWVBFX1NUUklORykgIT0gMDsKLQotICAgIGlmICgqcyA9PSAnQCcpIHsKLSAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gb3V0VmFsdWUtPlRZUEVfUkVGRVJFTkNFOwotCi0gICAgICAgIC8vIE5vdGU6IHdlIGRvbid0IGNoZWNrIGF0dHJUeXBlIGhlcmUgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGNhbgotICAgICAgICAvLyBiZSB0byBhbnkgb3RoZXIgdHlwZTsgd2UganVzdCBuZWVkIHRvIGNvdW50IG9uIHRoZSBjbGllbnQgbWFraW5nCi0gICAgICAgIC8vIHN1cmUgdGhlIHJlZmVyZW5jZWQgdHlwZSBpcyBjb3JyZWN0LgotICAgICAgICAKLSAgICAgICAgLy9wcmludGYoIkxvb2tpbmcgdXAgcmVmOiAlc1xuIiwgU3RyaW5nOChzLCBsZW4pLnN0cmluZygpKTsKLQotICAgICAgICAvLyBJdCdzIGEgcmVmZXJlbmNlIQotICAgICAgICBpZiAobGVuID09IDUgJiYgc1sxXT09J24nICYmIHNbMl09PSd1JyAmJiBzWzNdPT0nbCcgJiYgc1s0XT09J2wnKSB7Ci0gICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJvb2wgY3JlYXRlSWZOb3RGb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHJlc291cmNlUmVmTmFtZTsKLSAgICAgICAgICAgIGludCByZXNvdXJjZU5hbWVMZW47Ci0gICAgICAgICAgICBpZiAobGVuID4gMiAmJiBzWzFdID09ICcrJykgewotICAgICAgICAgICAgICAgIGNyZWF0ZUlmTm90Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlc291cmNlUmVmTmFtZSA9IHMgKyAyOwotICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZUxlbiA9IGxlbiAtIDI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlbiA+IDIgJiYgc1sxXSA9PSAnKicpIHsKLSAgICAgICAgICAgICAgICBlbmZvcmNlUHJpdmF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHJlc291cmNlUmVmTmFtZSA9IHMgKyAyOwotICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZUxlbiA9IGxlbiAtIDI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNyZWF0ZUlmTm90Rm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICByZXNvdXJjZVJlZk5hbWUgPSBzICsgMTsKLSAgICAgICAgICAgICAgICByZXNvdXJjZU5hbWVMZW4gPSBsZW4gLSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nMTYgcGFja2FnZSwgdHlwZSwgbmFtZTsKLSAgICAgICAgICAgIGlmICghZXhwYW5kUmVzb3VyY2VSZWYocmVzb3VyY2VSZWZOYW1lLHJlc291cmNlTmFtZUxlbiwgJnBhY2thZ2UsICZ0eXBlLCAmbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmVHlwZSwgZGVmUGFja2FnZSwgJmVycm9yTXNnKSkgewotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5yZXBvcnRFcnJvcihhY2Nlc3NvckNvb2tpZSwgZXJyb3JNc2cpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVpbnQzMl90IHNwZWNGbGFncyA9IDA7Ci0gICAgICAgICAgICB1aW50MzJfdCByaWQgPSBpZGVudGlmaWVyRm9yTmFtZShuYW1lLnN0cmluZygpLCBuYW1lLnNpemUoKSwgdHlwZS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgdHlwZS5zaXplKCksIHBhY2thZ2Uuc3RyaW5nKCksIHBhY2thZ2Uuc2l6ZSgpLCAmc3BlY0ZsYWdzKTsKLSAgICAgICAgICAgIGlmIChyaWQgIT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChlbmZvcmNlUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoKHNwZWNGbGFncyZSZXNUYWJsZV90eXBlU3BlYzo6U1BFQ19QVUJMSUMpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCAiUmVzb3VyY2UgaXMgbm90IHB1YmxpYy4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWFjY2Vzc29yKSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhID0gcmlkOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmlkID0gUmVzX01BS0VJRCgKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPmdldFJlbWFwcGVkUGFja2FnZShSZXNfR0VUUEFDS0FHRShyaWQpKSwKLSAgICAgICAgICAgICAgICAgICAgUmVzX0dFVFRZUEUocmlkKSwgUmVzX0dFVEVOVFJZKHJpZCkpOwotICAgICAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigiSW5jbCAlczolcy8lczogMHglMDh4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHBhY2thZ2UpLnN0cmluZygpLCBTdHJpbmc4KHR5cGUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG5hbWUpLnN0cmluZygpLCByaWQpKTsKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IHJpZDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGFjY2Vzc29yKSB7Ci0gICAgICAgICAgICAgICAgdWludDMyX3QgcmlkID0gYWNjZXNzb3ItPmdldEN1c3RvbVJlc291cmNlV2l0aENyZWF0aW9uKHBhY2thZ2UsIHR5cGUsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUlmTm90Rm91bmQpOwotICAgICAgICAgICAgICAgIGlmIChyaWQgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIlBja2cgJXM6JXMvJXM6IDB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocGFja2FnZSkuc3RyaW5nKCksIFN0cmluZzgodHlwZSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG5hbWUpLnN0cmluZygpLCByaWQpKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGEgPSByaWQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsICJObyByZXNvdXJjZSBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIG5hbWUiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gaWYgd2UgZ290IHRvIGhlcmUsIGFuZCBsb2NhbGl6YXRpb24gaXMgcmVxdWlyZWQgYW5kIGl0J3Mgbm90IGEgcmVmZXJlbmNlLAotICAgIC8vIGNvbXBsYWluIGFuZCBiYWlsLgotICAgIGlmIChsMTBuUmVxID09IFJlc1RhYmxlX21hcDo6TDEwTl9TVUdHRVNURUQpIHsKLSAgICAgICAgaWYgKGxvY2FsaXphdGlvblNldHRpbmcpIHsKLSAgICAgICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCAiVGhpcyBhdHRyaWJ1dGUgbXVzdCBiZSBsb2NhbGl6ZWQuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKCpzID09ICcjJykgewotICAgICAgICAvLyBJdCdzIGEgY29sb3IhICBDb252ZXJ0IHRvIGFuIGludGVnZXIgb2YgdGhlIGZvcm0gMHhhYXJyZ2diYi4KLSAgICAgICAgdWludDMyX3QgY29sb3IgPSAwOwotICAgICAgICBib29sIGVycm9yID0gZmFsc2U7Ci0gICAgICAgIGlmIChsZW4gPT0gNCkgewotICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gb3V0VmFsdWUtPlRZUEVfSU5UX0NPTE9SX1JHQjQ7Ci0gICAgICAgICAgICBjb2xvciB8PSAweEZGMDAwMDAwOwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzFdLCAmZXJyb3IpIDw8IDIwOwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzFdLCAmZXJyb3IpIDw8IDE2OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzJdLCAmZXJyb3IpIDw8IDEyOwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzJdLCAmZXJyb3IpIDw8IDg7Ci0gICAgICAgICAgICBjb2xvciB8PSBnZXRfaGV4KHNbM10sICZlcnJvcikgPDwgNDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1szXSwgJmVycm9yKTsKLSAgICAgICAgfSBlbHNlIGlmIChsZW4gPT0gNSkgewotICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gb3V0VmFsdWUtPlRZUEVfSU5UX0NPTE9SX0FSR0I0OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzFdLCAmZXJyb3IpIDw8IDI4OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzFdLCAmZXJyb3IpIDw8IDI0OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzJdLCAmZXJyb3IpIDw8IDIwOwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzJdLCAmZXJyb3IpIDw8IDE2OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzNdLCAmZXJyb3IpIDw8IDEyOwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzNdLCAmZXJyb3IpIDw8IDg7Ci0gICAgICAgICAgICBjb2xvciB8PSBnZXRfaGV4KHNbNF0sICZlcnJvcikgPDwgNDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1s0XSwgJmVycm9yKTsKLSAgICAgICAgfSBlbHNlIGlmIChsZW4gPT0gNykgewotICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gb3V0VmFsdWUtPlRZUEVfSU5UX0NPTE9SX1JHQjg7Ci0gICAgICAgICAgICBjb2xvciB8PSAweEZGMDAwMDAwOwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzFdLCAmZXJyb3IpIDw8IDIwOwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzJdLCAmZXJyb3IpIDw8IDE2OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzNdLCAmZXJyb3IpIDw8IDEyOwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzRdLCAmZXJyb3IpIDw8IDg7Ci0gICAgICAgICAgICBjb2xvciB8PSBnZXRfaGV4KHNbNV0sICZlcnJvcikgPDwgNDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1s2XSwgJmVycm9yKTsKLSAgICAgICAgfSBlbHNlIGlmIChsZW4gPT0gOSkgewotICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gb3V0VmFsdWUtPlRZUEVfSU5UX0NPTE9SX0FSR0I4OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzFdLCAmZXJyb3IpIDw8IDI4OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzJdLCAmZXJyb3IpIDw8IDI0OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzNdLCAmZXJyb3IpIDw8IDIwOwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzRdLCAmZXJyb3IpIDw8IDE2OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzVdLCAmZXJyb3IpIDw8IDEyOwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzZdLCAmZXJyb3IpIDw8IDg7Ci0gICAgICAgICAgICBjb2xvciB8PSBnZXRfaGV4KHNbN10sICZlcnJvcikgPDwgNDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1s4XSwgJmVycm9yKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWVycm9yKSB7Ci0gICAgICAgICAgICBpZiAoKGF0dHJUeXBlJlJlc1RhYmxlX21hcDo6VFlQRV9DT0xPUikgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmICghY2FuU3RyaW5nQ29lcmNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb2xvciB0eXBlcyBub3QgYWxsb3dlZCIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhID0gY29sb3I7Ci0gICAgICAgICAgICAgICAgLy9wcmludGYoIkNvbG9yIGlucHV0PSVzLCBvdXRwdXQ9MHgleFxuIiwgU3RyaW5nOChzLCBsZW4pLnN0cmluZygpLCBjb2xvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKGF0dHJUeXBlJlJlc1RhYmxlX21hcDo6VFlQRV9DT0xPUikgIT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5yZXBvcnRFcnJvcihhY2Nlc3NvckNvb2tpZSwgIkNvbG9yIHZhbHVlIG5vdCB2YWxpZCAtLSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG11c3QgYmUgI3JnYiwgI2FyZ2IsICNycmdnYmIsIG9yICNhYXJyZ2diYiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAjaWYgMAotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IENvbG9yIElEICVzIHZhbHVlICVzIGlzIG5vdCB2YWxpZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJSZXNvdXJjZSBGaWxlIiwgLy8oY29uc3QgY2hhciopaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCgqY3VyVGFnKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocywgbGVuKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgI2VuZGlmCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCpzID09ICc/JykgewotICAgICAgICBvdXRWYWx1ZS0+ZGF0YVR5cGUgPSBvdXRWYWx1ZS0+VFlQRV9BVFRSSUJVVEU7Ci0KLSAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgY2hlY2sgYXR0clR5cGUgaGVyZSBiZWNhdXNlIHRoZSByZWZlcmVuY2UgY2FuCi0gICAgICAgIC8vIGJlIHRvIGFueSBvdGhlciB0eXBlOyB3ZSBqdXN0IG5lZWQgdG8gY291bnQgb24gdGhlIGNsaWVudCBtYWtpbmcKLSAgICAgICAgLy8gc3VyZSB0aGUgcmVmZXJlbmNlZCB0eXBlIGlzIGNvcnJlY3QuCi0KLSAgICAgICAgLy9wcmludGYoIkxvb2tpbmcgdXAgYXR0cjogJXNcbiIsIFN0cmluZzgocywgbGVuKS5zdHJpbmcoKSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZzE2IGF0dHIxNigiYXR0ciIpOwotICAgICAgICBTdHJpbmcxNiBwYWNrYWdlLCB0eXBlLCBuYW1lOwotICAgICAgICBpZiAoIWV4cGFuZFJlc291cmNlUmVmKHMrMSwgbGVuLTEsICZwYWNrYWdlLCAmdHlwZSwgJm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF0dHIxNiwgZGVmUGFja2FnZSwgJmVycm9yTXNnKSkgewotICAgICAgICAgICAgaWYgKGFjY2Vzc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsIGVycm9yTXNnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vcHJpbnRmKCJQa2c6ICVzLCBUeXBlOiAlcywgTmFtZTogJXNcbiIsCi0gICAgICAgIC8vICAgICAgIFN0cmluZzgocGFja2FnZSkuc3RyaW5nKCksIFN0cmluZzgodHlwZSkuc3RyaW5nKCksCi0gICAgICAgIC8vICAgICAgIFN0cmluZzgobmFtZSkuc3RyaW5nKCkpOwotICAgICAgICB1aW50MzJfdCBzcGVjRmxhZ3MgPSAwOwotICAgICAgICB1aW50MzJfdCByaWQgPSAKLSAgICAgICAgICAgIGlkZW50aWZpZXJGb3JOYW1lKG5hbWUuc3RyaW5nKCksIG5hbWUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5zdHJpbmcoKSwgdHlwZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLnN0cmluZygpLCBwYWNrYWdlLnNpemUoKSwgJnNwZWNGbGFncyk7Ci0gICAgICAgIGlmIChyaWQgIT0gMCkgewotICAgICAgICAgICAgaWYgKGVuZm9yY2VQcml2YXRlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChzcGVjRmxhZ3MmUmVzVGFibGVfdHlwZVNwZWM6OlNQRUNfUFVCTElDKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsICJBdHRyaWJ1dGUgaXMgbm90IHB1YmxpYy4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFhY2Nlc3NvcikgewotICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhID0gcmlkOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmlkID0gUmVzX01BS0VJRCgKLSAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+Z2V0UmVtYXBwZWRQYWNrYWdlKFJlc19HRVRQQUNLQUdFKHJpZCkpLAotICAgICAgICAgICAgICAgIFJlc19HRVRUWVBFKHJpZCksIFJlc19HRVRFTlRSWShyaWQpKTsKLSAgICAgICAgICAgIC8vcHJpbnRmKCJJbmNsICVzOiVzLyVzOiAweCUwOHhcbiIsCi0gICAgICAgICAgICAvLyAgICAgICBTdHJpbmc4KHBhY2thZ2UpLnN0cmluZygpLCBTdHJpbmc4KHR5cGUpLnN0cmluZygpLAotICAgICAgICAgICAgLy8gICAgICAgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSwgcmlkKTsKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhID0gcmlkOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWNjZXNzb3IpIHsKLSAgICAgICAgICAgIHVpbnQzMl90IHJpZCA9IGFjY2Vzc29yLT5nZXRDdXN0b21SZXNvdXJjZShwYWNrYWdlLCB0eXBlLCBuYW1lKTsKLSAgICAgICAgICAgIGlmIChyaWQgIT0gMCkgewotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJNaW5lICVzOiVzLyVzOiAweCUwOHhcbiIsCi0gICAgICAgICAgICAgICAgLy8gICAgICAgU3RyaW5nOChwYWNrYWdlKS5zdHJpbmcoKSwgU3RyaW5nOCh0eXBlKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAvLyAgICAgICBTdHJpbmc4KG5hbWUpLnN0cmluZygpLCByaWQpOwotICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhID0gcmlkOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjY2Vzc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGFjY2Vzc29yLT5yZXBvcnRFcnJvcihhY2Nlc3NvckNvb2tpZSwgIk5vIHJlc291cmNlIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gbmFtZSIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyaW5nVG9JbnQocywgbGVuLCBvdXRWYWx1ZSkpIHsKLSAgICAgICAgaWYgKChhdHRyVHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfSU5URUdFUikgPT0gMCkgewotICAgICAgICAgICAgLy8gSWYgdGhpcyB0eXBlIGRvZXMgbm90IGFsbG93IGludGVnZXJzLCBidXQgZG9lcyBhbGxvdyBmbG9hdHMsCi0gICAgICAgICAgICAvLyBmYWxsIHRocm91Z2ggb24gdGhpcyBlcnJvciBjYXNlIGJlY2F1c2UgdGhlIGZsb2F0IHR5cGUgc2hvdWxkCi0gICAgICAgICAgICAvLyBiZSBhYmxlIHRvIGFjY2VwdCBhbnkgaW50ZWdlciB2YWx1ZS4KLSAgICAgICAgICAgIGlmICghY2FuU3RyaW5nQ29lcmNlICYmIChhdHRyVHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfRkxPQVQpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsICJJbnRlZ2VyIHR5cGVzIG5vdCBhbGxvd2VkIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgoKGludDMyX3Qpb3V0VmFsdWUtPmRhdGEpIDwgKChpbnQzMl90KWF0dHJNaW4pCi0gICAgICAgICAgICAgICAgICAgIHx8ICgoaW50MzJfdClvdXRWYWx1ZS0+ZGF0YSkgPiAoKGludDMyX3QpYXR0ck1heCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsICJJbnRlZ2VyIHZhbHVlIG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzdHJpbmdUb0Zsb2F0KHMsIGxlbiwgb3V0VmFsdWUpKSB7Ci0gICAgICAgIGlmIChvdXRWYWx1ZS0+ZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX0RJTUVOU0lPTikgewotICAgICAgICAgICAgaWYgKChhdHRyVHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfRElNRU5TSU9OKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWNhblN0cmluZ0NvZXJjZSkgewotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5yZXBvcnRFcnJvcihhY2Nlc3NvckNvb2tpZSwgIkRpbWVuc2lvbiB0eXBlcyBub3QgYWxsb3dlZCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAob3V0VmFsdWUtPmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9GUkFDVElPTikgewotICAgICAgICAgICAgaWYgKChhdHRyVHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfRlJBQ1RJT04pICE9IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghY2FuU3RyaW5nQ29lcmNlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCAiRnJhY3Rpb24gdHlwZXMgbm90IGFsbG93ZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKChhdHRyVHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfRkxPQVQpID09IDApIHsKLSAgICAgICAgICAgIGlmICghY2FuU3RyaW5nQ29lcmNlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCAiRmxvYXQgdHlwZXMgbm90IGFsbG93ZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGVuID09IDQpIHsKLSAgICAgICAgaWYgKChzWzBdID09ICd0JyB8fCBzWzBdID09ICdUJykgJiYKLSAgICAgICAgICAgIChzWzFdID09ICdyJyB8fCBzWzFdID09ICdSJykgJiYKLSAgICAgICAgICAgIChzWzJdID09ICd1JyB8fCBzWzJdID09ICdVJykgJiYKLSAgICAgICAgICAgIChzWzNdID09ICdlJyB8fCBzWzNdID09ICdFJykpIHsKLSAgICAgICAgICAgIGlmICgoYXR0clR5cGUmUmVzVGFibGVfbWFwOjpUWVBFX0JPT0xFQU4pID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNhblN0cmluZ0NvZXJjZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCAiQm9vbGVhbiB0eXBlcyBub3QgYWxsb3dlZCIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IG91dFZhbHVlLT5UWVBFX0lOVF9CT09MRUFOOwotICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhID0gKHVpbnQzMl90KS0xOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxlbiA9PSA1KSB7Ci0gICAgICAgIGlmICgoc1swXSA9PSAnZicgfHwgc1swXSA9PSAnRicpICYmCi0gICAgICAgICAgICAoc1sxXSA9PSAnYScgfHwgc1sxXSA9PSAnQScpICYmCi0gICAgICAgICAgICAoc1syXSA9PSAnbCcgfHwgc1syXSA9PSAnTCcpICYmCi0gICAgICAgICAgICAoc1szXSA9PSAncycgfHwgc1szXSA9PSAnUycpICYmCi0gICAgICAgICAgICAoc1s0XSA9PSAnZScgfHwgc1s0XSA9PSAnRScpKSB7Ci0gICAgICAgICAgICBpZiAoKGF0dHJUeXBlJlJlc1RhYmxlX21hcDo6VFlQRV9CT09MRUFOKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYW5TdHJpbmdDb2VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5yZXBvcnRFcnJvcihhY2Nlc3NvckNvb2tpZSwgIkJvb2xlYW4gdHlwZXMgbm90IGFsbG93ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YVR5cGUgPSBvdXRWYWx1ZS0+VFlQRV9JTlRfQk9PTEVBTjsKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoKGF0dHJUeXBlJlJlc1RhYmxlX21hcDo6VFlQRV9FTlVNKSAhPSAwKSB7Ci0gICAgICAgIGNvbnN0IHNzaXplX3QgcCA9IGdldFJlc291cmNlUGFja2FnZUluZGV4KGF0dHJJRCk7Ci0gICAgICAgIGNvbnN0IGJhZ19lbnRyeSogYmFnOwotICAgICAgICBzc2l6ZV90IGNudCA9IHAgPj0gMCA/IGxvY2tCYWcoYXR0cklELCAmYmFnKSA6IC0xOwotICAgICAgICAvL3ByaW50ZigiR290ICVkIGZvciBlbnVtXG4iLCBjbnQpOwotICAgICAgICBpZiAoY250ID49IDApIHsKLSAgICAgICAgICAgIHJlc291cmNlX25hbWUgcm5hbWU7Ci0gICAgICAgICAgICB3aGlsZSAoY250ID4gMCkgewotICAgICAgICAgICAgICAgIGlmICghUmVzX0lOVEVSTkFMSUQoYmFnLT5tYXAubmFtZS5pZGVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIlRyeWluZyBhdHRyICMlMDh4XG4iLCBiYWctPm1hcC5uYW1lLmlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdldFJlc291cmNlTmFtZShiYWctPm1hcC5uYW1lLmlkZW50LCBmYWxzZSwgJnJuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgI2lmIDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiTWF0Y2hpbmcgJXMgYWdhaW5zdCAlcyAoMHglMDh4KVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHMsIGxlbikuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChybmFtZS5uYW1lLCBybmFtZS5uYW1lTGVuKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWctPm1hcC5uYW1lLmlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnpjbXAxNihzLCBsZW4sIHJuYW1lLm5hbWUsIHJuYW1lLm5hbWVMZW4pID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YVR5cGUgPSBiYWctPm1hcC52YWx1ZS5kYXRhVHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IGJhZy0+bWFwLnZhbHVlLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5sb2NrQmFnKGJhZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYmFnKys7Ci0gICAgICAgICAgICAgICAgY250LS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1bmxvY2tCYWcoYmFnKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmcm9tQWNjZXNzb3IpIHsKLSAgICAgICAgICAgIGlmIChhY2Nlc3Nvci0+Z2V0QXR0cmlidXRlRW51bShhdHRySUQsIHMsIGxlbiwgb3V0VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoKGF0dHJUeXBlJlJlc1RhYmxlX21hcDo6VFlQRV9GTEFHUykgIT0gMCkgewotICAgICAgICBjb25zdCBzc2l6ZV90IHAgPSBnZXRSZXNvdXJjZVBhY2thZ2VJbmRleChhdHRySUQpOwotICAgICAgICBjb25zdCBiYWdfZW50cnkqIGJhZzsKLSAgICAgICAgc3NpemVfdCBjbnQgPSBwID49IDAgPyBsb2NrQmFnKGF0dHJJRCwgJmJhZykgOiAtMTsKLSAgICAgICAgLy9wcmludGYoIkdvdCAlZCBmb3IgZmxhZ3NcbiIsIGNudCk7Ci0gICAgICAgIGlmIChjbnQgPj0gMCkgewotICAgICAgICAgICAgYm9vbCBmYWlsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHJlc291cmNlX25hbWUgcm5hbWU7Ci0gICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YVR5cGUgPSBSZXNfdmFsdWU6OlRZUEVfSU5UX0hFWDsKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhID0gMDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBlbmQgPSBzICsgbGVuOwotICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHBvcyA9IHM7Ci0gICAgICAgICAgICB3aGlsZSAocG9zIDwgZW5kICYmICFmYWlsZWQpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogc3RhcnQgPSBwb3M7Ci0gICAgICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGVuZCAmJiAqcG9zICE9ICd8JykgewotICAgICAgICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy9wcmludGYoIkxvb2tpbmcgZm9yOiAlc1xuIiwgU3RyaW5nOChzdGFydCwgcG9zLXN0YXJ0KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgYmFnX2VudHJ5KiBiYWdpID0gYmFnOwotICAgICAgICAgICAgICAgIHNzaXplX3QgaTsKLSAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTxjbnQ7IGkrKywgYmFnaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUmVzX0lOVEVSTkFMSUQoYmFnaS0+bWFwLm5hbWUuaWRlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiVHJ5aW5nIGF0dHIgIyUwOHhcbiIsIGJhZ2ktPm1hcC5uYW1lLmlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRSZXNvdXJjZU5hbWUoYmFnaS0+bWFwLm5hbWUuaWRlbnQsIGZhbHNlLCAmcm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2lmIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIk1hdGNoaW5nICVzIGFnYWluc3QgJXMgKDB4JTA4eClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoc3RhcnQscG9zLXN0YXJ0KS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChybmFtZS5uYW1lLCBybmFtZS5uYW1lTGVuKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFnaS0+bWFwLm5hbWUuaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ6Y21wMTYoc3RhcnQsIHBvcy1zdGFydCwgcm5hbWUubmFtZSwgcm5hbWUubmFtZUxlbikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSB8PSBiYWdpLT5tYXAudmFsdWUuZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpID49IGNudCkgewotICAgICAgICAgICAgICAgICAgICAvLyBEaWRuJ3QgZmluZCB0aGlzIGZsYWcgaWRlbnRpZmllci4KLSAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA8IGVuZCkgewotICAgICAgICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1bmxvY2tCYWcoYmFnKTsKLSAgICAgICAgICAgIGlmICghZmFpbGVkKSB7Ci0gICAgICAgICAgICAgICAgLy9wcmludGYoIkZpbmFsIGZsYWcgdmFsdWU6IDB4JWx4XG4iLCBvdXRWYWx1ZS0+ZGF0YSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotCi0gICAgICAgIGlmIChmcm9tQWNjZXNzb3IpIHsKLSAgICAgICAgICAgIGlmIChhY2Nlc3Nvci0+Z2V0QXR0cmlidXRlRmxhZ3MoYXR0cklELCBzLCBsZW4sIG91dFZhbHVlKSkgewotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJGaW5hbCBmbGFnIHZhbHVlOiAweCVseFxuIiwgb3V0VmFsdWUtPmRhdGEpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKChhdHRyVHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfU1RSSU5HKSA9PSAwKSB7Ci0gICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsICJTdHJpbmcgdHlwZXMgbm90IGFsbG93ZWQiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gR2VuZXJpYyBzdHJpbmcgaGFuZGxpbmcuLi4KLSAgICBvdXRWYWx1ZS0+ZGF0YVR5cGUgPSBvdXRWYWx1ZS0+VFlQRV9TVFJJTkc7Ci0gICAgaWYgKG91dFN0cmluZykgewotICAgICAgICBib29sIGZhaWxlZCA9IGNvbGxlY3RTdHJpbmcob3V0U3RyaW5nLCBzLCBsZW4sIHByZXNlcnZlU3BhY2VzLCAmZXJyb3JNc2cpOwotICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCBlcnJvck1zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhaWxlZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZXNUYWJsZTo6Y29sbGVjdFN0cmluZyhTdHJpbmcxNiogb3V0U3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogcywgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZVNwYWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIG91dEVycm9yTXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZCkKLXsKLSAgICBTdHJpbmcxNiB0bXA7Ci0KLSAgICBjaGFyIHF1b3RlZCA9IDA7Ci0gICAgY29uc3QgY2hhcjE2X3QqIHAgPSBzOwotICAgIHdoaWxlIChwIDwgKHMrbGVuKSkgewotICAgICAgICB3aGlsZSAocCA8IChzK2xlbikpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90IGMgPSAqcDsKLSAgICAgICAgICAgIGlmIChjID09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcHJlc2VydmVTcGFjZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAocXVvdGVkID09IDAgJiYgaXNzcGFjZTE2KGMpCi0gICAgICAgICAgICAgICAgICAgICYmIChjICE9ICcgJyB8fCBpc3NwYWNlMTYoKihwKzEpKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjID09ICciJyAmJiAocXVvdGVkID09IDAgfHwgcXVvdGVkID09ICciJykpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjID09ICdcJycgJiYgKHF1b3RlZCA9PSAwIHx8IHF1b3RlZCA9PSAnXCcnKSkgewotICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgKiBJbiBwcmFjdGljZSwgd2hlbiBwZW9wbGUgd3JpdGUgJyBpbnN0ZWFkIG9mIFwnCi0gICAgICAgICAgICAgICAgICAgICAqIGluIGEgc3RyaW5nLCB0aGV5IGFyZSBkb2luZyBpdCBieSBhY2NpZGVudAotICAgICAgICAgICAgICAgICAgICAgKiBpbnN0ZWFkIG9mIHJlYWxseSBtZWFuaW5nIHRvIHVzZSAnIGFzIGEgcXVvdGluZwotICAgICAgICAgICAgICAgICAgICAgKiBjaGFyYWN0ZXIuICBXYXJuIHRoZW0gc28gdGhleSBkb24ndCBsb3NlIGl0LgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG91dEVycm9yTXNnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqb3V0RXJyb3JNc2cgPSAiQXBvc3Ryb3BoZSBub3QgcHJlY2VkZWQgYnkgXFwiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHAgPCAocytsZW4pKSB7Ci0gICAgICAgICAgICBpZiAocCA+IHMpIHsKLSAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKFN0cmluZzE2KHMsIHAtcykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVNwYWNlcyAmJiAoKnAgPT0gJyInIHx8ICpwID09ICdcJycpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHF1b3RlZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHF1b3RlZCA9ICpwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHF1b3RlZCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXByZXNlcnZlU3BhY2VzICYmIGlzc3BhY2UxNigqcCkpIHsKLSAgICAgICAgICAgICAgICAvLyBTcGFjZSBvdXRzaWRlIG9mIGEgcXVvdGUgLS0gY29uc3VtZSBhbGwgc3BhY2VzIGFuZAotICAgICAgICAgICAgICAgIC8vIGxlYXZlIGEgc2luZ2xlIHBsYWluIHNwYWNlIGNoYXIuCi0gICAgICAgICAgICAgICAgdG1wLmFwcGVuZChTdHJpbmcxNigiICIpKTsKLSAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHAgPCAocytsZW4pICYmIGlzc3BhY2UxNigqcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ1xcJykgewotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICBpZiAocCA8IChzK2xlbikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgqcCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQoU3RyaW5nMTYoIlx0IikpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgotICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZChTdHJpbmcxNigiXG4iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnIyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKFN0cmluZzE2KCIjIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0AnOgotICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZChTdHJpbmcxNigiQCIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICc/JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQoU3RyaW5nMTYoIj8iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKFN0cmluZzE2KCJcIiIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdcJyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKFN0cmluZzE2KCInIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQoU3RyaW5nMTYoIlxcIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyMTZfdCBjaHIgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCA0ICYmIHBbMV0gIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwID49ICcwJyAmJiAqcCA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICpwIC0gJzAnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKnAgPj0gJ2EnICYmICpwIDw9ICdmJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gKnAgLSAnYScgKyAxMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCpwID49ICdBJyAmJiAqcCA8PSAnRicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICpwIC0gJ0EnICsgMTA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dEVycm9yTXNnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0RXJyb3JNc2cgPSAiQmFkIGNoYXJhY3RlciBpbiBcXHUgdW5pY29kZSBlc2NhcGUgc2VxdWVuY2UiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyID0gKGNocjw8NCkgfCBjOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZChTdHJpbmcxNigmY2hyLCAxKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdW5rbm93biBlc2NhcGUgY2hhcnMuCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuIC09IChwLXMpOwotICAgICAgICAgICAgcyA9IHA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodG1wLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgIGlmIChsZW4gPiAwKSB7Ci0gICAgICAgICAgICB0bXAuYXBwZW5kKFN0cmluZzE2KHMsIGxlbikpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhcHBlbmQpIHsKLSAgICAgICAgICAgIG91dFN0cmluZy0+YXBwZW5kKHRtcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBvdXRTdHJpbmctPnNldFRvKHRtcCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXBwZW5kKSB7Ci0gICAgICAgICAgICBvdXRTdHJpbmctPmFwcGVuZChTdHJpbmcxNihzLCBsZW4pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG91dFN0cmluZy0+c2V0VG8ocywgbGVuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zaXplX3QgUmVzVGFibGU6OmdldEJhc2VQYWNrYWdlQ291bnQoKSBjb25zdAotewotICAgIGlmIChtRXJyb3IgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBtUGFja2FnZUdyb3Vwcy5zaXplKCk7Ci19Ci0KLWNvbnN0IGNoYXIxNl90KiBSZXNUYWJsZTo6Z2V0QmFzZVBhY2thZ2VOYW1lKHNpemVfdCBpZHgpIGNvbnN0Ci17Ci0gICAgaWYgKG1FcnJvciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgTE9HX0ZBVEFMX0lGKGlkeCA+PSBtUGFja2FnZUdyb3Vwcy5zaXplKCksCi0gICAgICAgICAgICAgICAgICJSZXF1ZXN0ZWQgcGFja2FnZSBpbmRleCAlZCBwYXN0IHBhY2thZ2UgY291bnQgJWQiLAotICAgICAgICAgICAgICAgICAoaW50KWlkeCwgKGludCltUGFja2FnZUdyb3Vwcy5zaXplKCkpOwotICAgIHJldHVybiBtUGFja2FnZUdyb3Vwc1tpZHhdLT5uYW1lLnN0cmluZygpOwotfQotCi11aW50MzJfdCBSZXNUYWJsZTo6Z2V0QmFzZVBhY2thZ2VJZChzaXplX3QgaWR4KSBjb25zdAotewotICAgIGlmIChtRXJyb3IgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIExPR19GQVRBTF9JRihpZHggPj0gbVBhY2thZ2VHcm91cHMuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAiUmVxdWVzdGVkIHBhY2thZ2UgaW5kZXggJWQgcGFzdCBwYWNrYWdlIGNvdW50ICVkIiwKLSAgICAgICAgICAgICAgICAgKGludClpZHgsIChpbnQpbVBhY2thZ2VHcm91cHMuc2l6ZSgpKTsKLSAgICByZXR1cm4gbVBhY2thZ2VHcm91cHNbaWR4XS0+aWQ7Ci19Ci0KLXNpemVfdCBSZXNUYWJsZTo6Z2V0VGFibGVDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1IZWFkZXJzLnNpemUoKTsKLX0KLQotY29uc3QgUmVzU3RyaW5nUG9vbCogUmVzVGFibGU6OmdldFRhYmxlU3RyaW5nQmxvY2soc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIHJldHVybiAmbUhlYWRlcnNbaW5kZXhdLT52YWx1ZXM7Ci19Ci0KLXZvaWQqIFJlc1RhYmxlOjpnZXRUYWJsZUNvb2tpZShzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1IZWFkZXJzW2luZGV4XS0+Y29va2llOwotfQotCi12b2lkIFJlc1RhYmxlOjpnZXRDb25maWd1cmF0aW9ucyhWZWN0b3I8UmVzVGFibGVfY29uZmlnPiogY29uZmlncykgY29uc3QKLXsKLSAgICBjb25zdCBzaXplX3QgSSA9IG1QYWNrYWdlR3JvdXBzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8STsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFBhY2thZ2VHcm91cCogcGFja2FnZUdyb3VwID0gbVBhY2thZ2VHcm91cHNbaV07Ci0gICAgICAgIGNvbnN0IHNpemVfdCBKID0gcGFja2FnZUdyb3VwLT5wYWNrYWdlcy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGo9MDsgajxKOyBqKyspIHsKLSAgICAgICAgICAgIGNvbnN0IFBhY2thZ2UqIHBhY2thZ2UgPSBwYWNrYWdlR3JvdXAtPnBhY2thZ2VzW2pdOwotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IEsgPSBwYWNrYWdlLT50eXBlcy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBrPTA7IGs8SzsgaysrKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVHlwZSogdHlwZSA9IHBhY2thZ2UtPnR5cGVzW2tdOwotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IE5VTEwpIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBMID0gdHlwZS0+Y29uZmlncy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgbD0wOyBsPEw7IGwrKykgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV90eXBlKiBjb25maWcgPSB0eXBlLT5jb25maWdzW2xdOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcqIGNmZyA9ICZjb25maWctPmNvbmZpZzsKLSAgICAgICAgICAgICAgICAgICAgLy8gb25seSBpbnNlcnQgdW5pcXVlCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBNID0gY29uZmlncy0+c2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBzaXplX3QgbTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChtPTA7IG08TTsgbSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSAoKmNvbmZpZ3MpW21dLmNvbXBhcmUoKmNmZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBpdAotICAgICAgICAgICAgICAgICAgICBpZiAobSA9PSBNKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzLT5hZGQoKmNmZyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUmVzVGFibGU6OmdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzKSBjb25zdAotewotICAgIFZlY3RvcjxSZXNUYWJsZV9jb25maWc+IGNvbmZpZ3M7Ci0gICAgQUxPR1YoImNhbGxpbmcgZ2V0Q29uZmlndXJhdGlvbnMiKTsKLSAgICBnZXRDb25maWd1cmF0aW9ucygmY29uZmlncyk7Ci0gICAgQUxPR1YoImNhbGxlZCBnZXRDb25maWd1cmF0aW9ucyBzaXplPSVkIiwgKGludCljb25maWdzLnNpemUoKSk7Ci0gICAgY29uc3Qgc2l6ZV90IEkgPSBjb25maWdzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8STsgaSsrKSB7Ci0gICAgICAgIGNoYXIgbG9jYWxlWzZdOwotICAgICAgICBjb25maWdzW2ldLmdldExvY2FsZShsb2NhbGUpOwotICAgICAgICBjb25zdCBzaXplX3QgSiA9IGxvY2FsZXMtPnNpemUoKTsKLSAgICAgICAgc2l6ZV90IGo7Ci0gICAgICAgIGZvciAoaj0wOyBqPEo7IGorKykgewotICAgICAgICAgICAgaWYgKDAgPT0gc3RyY21wKGxvY2FsZSwgKCpsb2NhbGVzKVtqXS5zdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoaiA9PSBKKSB7Ci0gICAgICAgICAgICBsb2NhbGVzLT5hZGQoU3RyaW5nOChsb2NhbGUpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3NpemVfdCBSZXNUYWJsZTo6Z2V0RW50cnkoCi0gICAgY29uc3QgUGFja2FnZSogcGFja2FnZSwgaW50IHR5cGVJbmRleCwgaW50IGVudHJ5SW5kZXgsCi0gICAgY29uc3QgUmVzVGFibGVfY29uZmlnKiBjb25maWcsCi0gICAgY29uc3QgUmVzVGFibGVfdHlwZSoqIG91dFR5cGUsIGNvbnN0IFJlc1RhYmxlX2VudHJ5Kiogb3V0RW50cnksCi0gICAgY29uc3QgVHlwZSoqIG91dFR5cGVDbGFzcykgY29uc3QKLXsKLSAgICBBTE9HVigiR2V0dGluZyBlbnRyeSBmcm9tIHBhY2thZ2UgJXBcbiIsIHBhY2thZ2UpOwotICAgIGNvbnN0IFJlc1RhYmxlX3BhY2thZ2UqIGNvbnN0IHBrZyA9IHBhY2thZ2UtPnBhY2thZ2U7Ci0KLSAgICBjb25zdCBUeXBlKiBhbGxUeXBlcyA9IHBhY2thZ2UtPmdldFR5cGUodHlwZUluZGV4KTsKLSAgICBBTE9HVigiYWxsVHlwZXM9JXBcbiIsIGFsbFR5cGVzKTsKLSAgICBpZiAoYWxsVHlwZXMgPT0gTlVMTCkgewotICAgICAgICBBTE9HVigiU2tpcHBpbmcgZW50cnkgdHlwZSBpbmRleCAweCUwMnggYmVjYXVzZSB0eXBlIGlzIE5VTEwhXG4iLCB0eXBlSW5kZXgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoKHNpemVfdCllbnRyeUluZGV4ID49IGFsbFR5cGVzLT5lbnRyeUNvdW50KSB7Ci0gICAgICAgIEFMT0dXKCJnZXRFbnRyeSBmYWlsaW5nIGJlY2F1c2UgZW50cnlJbmRleCAlZCBpcyBiZXlvbmQgdHlwZSBlbnRyeUNvdW50ICVkIiwKLSAgICAgICAgICAgIGVudHJ5SW5kZXgsIChpbnQpYWxsVHlwZXMtPmVudHJ5Q291bnQpOwotICAgICAgICByZXR1cm4gQkFEX1RZUEU7Ci0gICAgfQotICAgICAgICAKLSAgICBjb25zdCBSZXNUYWJsZV90eXBlKiB0eXBlID0gTlVMTDsKLSAgICB1aW50MzJfdCBvZmZzZXQgPSBSZXNUYWJsZV90eXBlOjpOT19FTlRSWTsKLSAgICBSZXNUYWJsZV9jb25maWcgYmVzdENvbmZpZzsKLSAgICBtZW1zZXQoJmJlc3RDb25maWcsIDAsIHNpemVvZihiZXN0Q29uZmlnKSk7IC8vIG1ha2UgdGhlIGNvbXBpbGVyIHNodXQgdXAKLSAgICAKLSAgICBjb25zdCBzaXplX3QgTlQgPSBhbGxUeXBlcy0+Y29uZmlncy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE5UOyBpKyspIHsKLSAgICAgICAgY29uc3QgUmVzVGFibGVfdHlwZSogY29uc3QgdGhpc1R5cGUgPSBhbGxUeXBlcy0+Y29uZmlnc1tpXTsKLSAgICAgICAgaWYgKHRoaXNUeXBlID09IE5VTEwpIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgUmVzVGFibGVfY29uZmlnIHRoaXNDb25maWc7Ci0gICAgICAgIHRoaXNDb25maWcuY29weUZyb21EdG9IKHRoaXNUeXBlLT5jb25maWcpOwotCi0gICAgICAgIFRBQkxFX0dFVEVOVFJZKEFMT0dJKCJNYXRjaCBlbnRyeSAweCV4IGluIHR5cGUgMHgleCAoc3ogMHgleCk6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlJbmRleCwgdHlwZUluZGV4KzEsIGR0b2hsKHRoaXNUeXBlLT5jb25maWcuc2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzQ29uZmlnLnRvU3RyaW5nKCkuc3RyaW5nKCkpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGlzIG9uZSBpcyB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgcGFyYW1ldGVycy4KLSAgICAgICAgaWYgKGNvbmZpZyAmJiAhdGhpc0NvbmZpZy5tYXRjaCgqY29uZmlnKSkgewotICAgICAgICAgICAgVEFCTEVfR0VURU5UUlkoQUxPR0koIkRvZXMgbm90IG1hdGNoIGNvbmZpZyFcbiIpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyB0aGUgZGVzaXJlZCBlbnRyeSBpbiB0aGlzIHR5cGUuCi0gICAgICAgIAotICAgICAgICBjb25zdCB1aW50OF90KiBjb25zdCBlbmQgPSAoKGNvbnN0IHVpbnQ4X3QqKXRoaXNUeXBlKQotICAgICAgICAgICAgKyBkdG9obCh0aGlzVHlwZS0+aGVhZGVyLnNpemUpOwotICAgICAgICBjb25zdCB1aW50MzJfdCogY29uc3QgZWluZGV4ID0gKGNvbnN0IHVpbnQzMl90KikKLSAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKXRoaXNUeXBlKSArIGR0b2hzKHRoaXNUeXBlLT5oZWFkZXIuaGVhZGVyU2l6ZSkpOwotICAgICAgICAKLSAgICAgICAgdWludDMyX3QgdGhpc09mZnNldCA9IGR0b2hsKGVpbmRleFtlbnRyeUluZGV4XSk7Ci0gICAgICAgIGlmICh0aGlzT2Zmc2V0ID09IFJlc1RhYmxlX3R5cGU6Ok5PX0VOVFJZKSB7Ci0gICAgICAgICAgICBUQUJMRV9HRVRFTlRSWShBTE9HSSgiU2tpcHBpbmcgYmVjYXVzZSBpdCBpcyBub3QgZGVmaW5lZCFcbiIpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodHlwZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9uZSBpcyBsZXNzIHNwZWNpZmljIHRoYW4gdGhlIGxhc3QgZm91bmQuICBJZiBzbywKLSAgICAgICAgICAgIC8vIHdlIHdpbGwgc2tpcCBpdC4gIFdlIGNoZWNrIHN0YXJ0aW5nIHdpdGggdGhpbmdzIHdlIG1vc3QgY2FyZQotICAgICAgICAgICAgLy8gYWJvdXQgdG8gdGhvc2Ugd2UgbGVhc3QgY2FyZSBhYm91dC4KLSAgICAgICAgICAgIGlmICghdGhpc0NvbmZpZy5pc0JldHRlclRoYW4oYmVzdENvbmZpZywgY29uZmlnKSkgewotICAgICAgICAgICAgICAgIFRBQkxFX0dFVEVOVFJZKEFMT0dJKCJUaGlzIGNvbmZpZyBpcyB3b3JzZSB0aGFuIGxhc3QhXG4iKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHR5cGUgPSB0aGlzVHlwZTsKLSAgICAgICAgb2Zmc2V0ID0gdGhpc09mZnNldDsKLSAgICAgICAgYmVzdENvbmZpZyA9IHRoaXNDb25maWc7Ci0gICAgICAgIFRBQkxFX0dFVEVOVFJZKEFMT0dJKCJCZXN0IGVudHJ5IHNvIGZhciAtLSB1c2luZyBpdCFcbiIpKTsKLSAgICAgICAgaWYgKCFjb25maWcpIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBpZiAodHlwZSA9PSBOVUxMKSB7Ci0gICAgICAgIFRBQkxFX0dFVEVOVFJZKEFMT0dJKCJObyB2YWx1ZSBmb3VuZCBmb3IgcmVxdWVzdGVkIGVudHJ5IVxuIikpOwotICAgICAgICByZXR1cm4gQkFEX0lOREVYOwotICAgIH0KLSAgICAKLSAgICBvZmZzZXQgKz0gZHRvaGwodHlwZS0+ZW50cmllc1N0YXJ0KTsKLSAgICBUQUJMRV9OT0lTWShhb3V0IDw8ICJMb29raW5nIGluIHJlc291cmNlIHRhYmxlICIgPDwgcGFja2FnZS0+aGVhZGVyLT5oZWFkZXIKLSAgICAgICAgICA8PCAiLCB0eXBlT2ZmPSIKLSAgICAgICAgICA8PCAodm9pZCopKCgoY29uc3QgY2hhciopdHlwZSktKChjb25zdCBjaGFyKilwYWNrYWdlLT5oZWFkZXItPmhlYWRlcikpCi0gICAgICAgICAgPDwgIiwgb2Zmc2V0PSIgPDwgKHZvaWQqKW9mZnNldCA8PCBlbmRsKTsKLQotICAgIGlmIChvZmZzZXQgPiAoZHRvaGwodHlwZS0+aGVhZGVyLnNpemUpLXNpemVvZihSZXNUYWJsZV9lbnRyeSkpKSB7Ci0gICAgICAgIEFMT0dXKCJSZXNUYWJsZV9lbnRyeSBhdCAweCV4IGlzIGJleW9uZCB0eXBlIGNodW5rIGRhdGEgMHgleCIsCi0gICAgICAgICAgICAgb2Zmc2V0LCBkdG9obCh0eXBlLT5oZWFkZXIuc2l6ZSkpOwotICAgICAgICByZXR1cm4gQkFEX1RZUEU7Ci0gICAgfQotICAgIGlmICgob2Zmc2V0JjB4MykgIT0gMCkgewotICAgICAgICBBTE9HVygiUmVzVGFibGVfZW50cnkgYXQgMHgleCBpcyBub3Qgb24gYW4gaW50ZWdlciBib3VuZGFyeSIsCi0gICAgICAgICAgICAgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIEJBRF9UWVBFOwotICAgIH0KLQotICAgIGNvbnN0IFJlc1RhYmxlX2VudHJ5KiBjb25zdCBlbnRyeSA9IChjb25zdCBSZXNUYWJsZV9lbnRyeSopCi0gICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKXR5cGUpICsgb2Zmc2V0KTsKLSAgICBpZiAoZHRvaHMoZW50cnktPnNpemUpIDwgc2l6ZW9mKCplbnRyeSkpIHsKLSAgICAgICAgQUxPR1coIlJlc1RhYmxlX2VudHJ5IHNpemUgMHgleCBpcyB0b28gc21hbGwiLCBkdG9ocyhlbnRyeS0+c2l6ZSkpOwotICAgICAgICByZXR1cm4gQkFEX1RZUEU7Ci0gICAgfQotCi0gICAgKm91dFR5cGUgPSB0eXBlOwotICAgICpvdXRFbnRyeSA9IGVudHJ5OwotICAgIGlmIChvdXRUeXBlQ2xhc3MgIT0gTlVMTCkgewotICAgICAgICAqb3V0VHlwZUNsYXNzID0gYWxsVHlwZXM7Ci0gICAgfQotICAgIHJldHVybiBvZmZzZXQgKyBkdG9ocyhlbnRyeS0+c2l6ZSk7Ci19Ci0KLXN0YXR1c190IFJlc1RhYmxlOjpwYXJzZVBhY2thZ2UoY29uc3QgUmVzVGFibGVfcGFja2FnZSogY29uc3QgcGtnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIZWFkZXIqIGNvbnN0IGhlYWRlciwgdWludDMyX3QgaWRtYXBfaWQpCi17Ci0gICAgY29uc3QgdWludDhfdCogYmFzZSA9IChjb25zdCB1aW50OF90Kilwa2c7Ci0gICAgc3RhdHVzX3QgZXJyID0gdmFsaWRhdGVfY2h1bmsoJnBrZy0+aGVhZGVyLCBzaXplb2YoKnBrZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5kYXRhRW5kLCAiUmVzVGFibGVfcGFja2FnZSIpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIChtRXJyb3I9ZXJyKTsKLSAgICB9Ci0KLSAgICBjb25zdCBzaXplX3QgcGtnU2l6ZSA9IGR0b2hsKHBrZy0+aGVhZGVyLnNpemUpOwotCi0gICAgaWYgKGR0b2hsKHBrZy0+dHlwZVN0cmluZ3MpID49IHBrZ1NpemUpIHsKLSAgICAgICAgQUxPR1coIlJlc1RhYmxlX3BhY2thZ2UgdHlwZSBzdHJpbmdzIGF0ICVwIGFyZSBwYXN0IGNodW5rIHNpemUgJXAuIiwKLSAgICAgICAgICAgICAodm9pZCopZHRvaGwocGtnLT50eXBlU3RyaW5ncyksICh2b2lkKilwa2dTaXplKTsKLSAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgIH0KLSAgICBpZiAoKGR0b2hsKHBrZy0+dHlwZVN0cmluZ3MpJjB4MykgIT0gMCkgewotICAgICAgICBBTE9HVygiUmVzVGFibGVfcGFja2FnZSB0eXBlIHN0cmluZ3MgYXQgJXAgaXMgbm90IG9uIGFuIGludGVnZXIgYm91bmRhcnkuIiwKLSAgICAgICAgICAgICAodm9pZCopZHRvaGwocGtnLT50eXBlU3RyaW5ncykpOwotICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgfQotICAgIGlmIChkdG9obChwa2ctPmtleVN0cmluZ3MpID49IHBrZ1NpemUpIHsKLSAgICAgICAgQUxPR1coIlJlc1RhYmxlX3BhY2thZ2Uga2V5IHN0cmluZ3MgYXQgJXAgYXJlIHBhc3QgY2h1bmsgc2l6ZSAlcC4iLAotICAgICAgICAgICAgICh2b2lkKilkdG9obChwa2ctPmtleVN0cmluZ3MpLCAodm9pZCopcGtnU2l6ZSk7Ci0gICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICB9Ci0gICAgaWYgKChkdG9obChwa2ctPmtleVN0cmluZ3MpJjB4MykgIT0gMCkgewotICAgICAgICBBTE9HVygiUmVzVGFibGVfcGFja2FnZSBrZXkgc3RyaW5ncyBhdCAlcCBpcyBub3Qgb24gYW4gaW50ZWdlciBib3VuZGFyeS4iLAotICAgICAgICAgICAgICh2b2lkKilkdG9obChwa2ctPmtleVN0cmluZ3MpKTsKLSAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgIH0KLSAgICAKLSAgICBQYWNrYWdlKiBwYWNrYWdlID0gTlVMTDsKLSAgICBQYWNrYWdlR3JvdXAqIGdyb3VwID0gTlVMTDsKLSAgICB1aW50MzJfdCBpZCA9IGlkbWFwX2lkICE9IDAgPyBpZG1hcF9pZCA6IGR0b2hsKHBrZy0+aWQpOwotICAgIC8vIElmIGF0IHRoaXMgcG9pbnQgaWQgPT0gMCwgcGtnIGlzIGFuIG92ZXJsYXkgcGFja2FnZSB3aXRob3V0IGEKLSAgICAvLyBjb3JyZXNwb25kaW5nIGlkbWFwLiBEdXJpbmcgcmVndWxhciB1c2FnZSwgb3ZlcmxheSBwYWNrYWdlcyBhcmUKLSAgICAvLyBhbHdheXMgbG9hZGVkIGFsb25nc2lkZSB0aGVpciBpZG1hcHMsIGJ1dCBkdXJpbmcgaWRtYXAgY3JlYXRpb24KLSAgICAvLyB0aGUgcGFja2FnZSBpcyB0ZW1wb3JhcmlseSBsb2FkZWQgYnkgaXRzZWxmLgotICAgIGlmIChpZCA8IDI1NikgewotICAgIAotICAgICAgICBwYWNrYWdlID0gbmV3IFBhY2thZ2UodGhpcywgaGVhZGVyLCBwa2cpOwotICAgICAgICBpZiAocGFja2FnZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1OT19NRU1PUlkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgaWR4ID0gbVBhY2thZ2VNYXBbaWRdOwotICAgICAgICBpZiAoaWR4ID09IDApIHsKLSAgICAgICAgICAgIGlkeCA9IG1QYWNrYWdlR3JvdXBzLnNpemUoKSsxOwotCi0gICAgICAgICAgICBjaGFyMTZfdCB0bXBOYW1lW3NpemVvZihwa2ctPm5hbWUpL3NpemVvZihjaGFyMTZfdCldOwotICAgICAgICAgICAgc3RyY3B5MTZfZHRvaCh0bXBOYW1lLCBwa2ctPm5hbWUsIHNpemVvZihwa2ctPm5hbWUpL3NpemVvZihjaGFyMTZfdCkpOwotICAgICAgICAgICAgZ3JvdXAgPSBuZXcgUGFja2FnZUdyb3VwKHRoaXMsIFN0cmluZzE2KHRtcE5hbWUpLCBpZCk7Ci0gICAgICAgICAgICBpZiAoZ3JvdXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBwYWNrYWdlOwotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPU5PX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVyciA9IHBhY2thZ2UtPnR5cGVTdHJpbmdzLnNldFRvKGJhc2UrZHRvaGwocGtnLT50eXBlU3RyaW5ncyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5kYXRhRW5kLShiYXNlK2R0b2hsKHBrZy0+dHlwZVN0cmluZ3MpKSk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGdyb3VwOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBwYWNrYWdlOwotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPWVycik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBwYWNrYWdlLT5rZXlTdHJpbmdzLnNldFRvKGJhc2UrZHRvaGwocGtnLT5rZXlTdHJpbmdzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+ZGF0YUVuZC0oYmFzZStkdG9obChwa2ctPmtleVN0cmluZ3MpKSk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGdyb3VwOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBwYWNrYWdlOwotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPWVycik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vcHJpbnRmKCJBZGRpbmcgbmV3IHBhY2thZ2UgaWQgJWQgYXQgaW5kZXggJWRcbiIsIGlkLCBpZHgpOwotICAgICAgICAgICAgZXJyID0gbVBhY2thZ2VHcm91cHMuYWRkKGdyb3VwKTsKLSAgICAgICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPWVycik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBncm91cC0+YmFzZVBhY2thZ2UgPSBwYWNrYWdlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtUGFja2FnZU1hcFtpZF0gPSAodWludDhfdClpZHg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBncm91cCA9IG1QYWNrYWdlR3JvdXBzLml0ZW1BdChpZHgtMSk7Ci0gICAgICAgICAgICBpZiAoZ3JvdXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPVVOS05PV05fRVJST1IpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVyciA9IGdyb3VwLT5wYWNrYWdlcy5hZGQocGFja2FnZSk7Ci0gICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9ZXJyKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIExPR19BTFdBWVNfRkFUQUwoIlBhY2thZ2UgaWQgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICAKLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIGNodW5rcy4KLSAgICBzaXplX3QgY3VyUGFja2FnZSA9IDA7Ci0gICAgCi0gICAgY29uc3QgUmVzQ2h1bmtfaGVhZGVyKiBjaHVuayA9Ci0gICAgICAgIChjb25zdCBSZXNDaHVua19oZWFkZXIqKSgoKGNvbnN0IHVpbnQ4X3QqKXBrZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZHRvaHMocGtnLT5oZWFkZXIuaGVhZGVyU2l6ZSkpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZFBvcyA9ICgoY29uc3QgdWludDhfdCopcGtnKSArIGR0b2hzKHBrZy0+aGVhZGVyLnNpemUpOwotICAgIHdoaWxlICgoKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSA8PSAoZW5kUG9zLXNpemVvZihSZXNDaHVua19oZWFkZXIpKSAmJgotICAgICAgICAgICAoKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSA8PSAoZW5kUG9zLWR0b2hsKGNodW5rLT5zaXplKSkpIHsKLSAgICAgICAgVEFCTEVfTk9JU1koQUxPR1YoIlBhY2thZ2VDaHVuazogdHlwZT0weCV4LCBoZWFkZXJTaXplPTB4JXgsIHNpemU9MHgleCwgcG9zPSVwXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGR0b2hzKGNodW5rLT50eXBlKSwgZHRvaHMoY2h1bmstPmhlYWRlclNpemUpLCBkdG9obChjaHVuay0+c2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKSgoKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSAtICgoY29uc3QgdWludDhfdCopaGVhZGVyLT5oZWFkZXIpKSkpOwotICAgICAgICBjb25zdCBzaXplX3QgY3NpemUgPSBkdG9obChjaHVuay0+c2l6ZSk7Ci0gICAgICAgIGNvbnN0IHVpbnQxNl90IGN0eXBlID0gZHRvaHMoY2h1bmstPnR5cGUpOwotICAgICAgICBpZiAoY3R5cGUgPT0gUkVTX1RBQkxFX1RZUEVfU1BFQ19UWVBFKSB7Ci0gICAgICAgICAgICBjb25zdCBSZXNUYWJsZV90eXBlU3BlYyogdHlwZVNwZWMgPSAoY29uc3QgUmVzVGFibGVfdHlwZVNwZWMqKShjaHVuayk7Ci0gICAgICAgICAgICBlcnIgPSB2YWxpZGF0ZV9jaHVuaygmdHlwZVNwZWMtPmhlYWRlciwgc2l6ZW9mKCp0eXBlU3BlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3MsICJSZXNUYWJsZV90eXBlU3BlYyIpOwotICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPWVycik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCB0eXBlU3BlY1NpemUgPSBkdG9obCh0eXBlU3BlYy0+aGVhZGVyLnNpemUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMT0FEX1RBQkxFX05PSVNZKHByaW50ZigiVHlwZVNwZWMgb2ZmICVwOiB0eXBlPTB4JXgsIGhlYWRlclNpemU9MHgleCwgc2l6ZT0lcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoYmFzZS0oY29uc3QgdWludDhfdCopY2h1bmspLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHRvaHModHlwZVNwZWMtPmhlYWRlci50eXBlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0b2hzKHR5cGVTcGVjLT5oZWFkZXIuaGVhZGVyU2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopdHlwZVNpemUpKTsKLSAgICAgICAgICAgIC8vIGxvb2sgZm9yIGJsb2NrIG92ZXJydW4gb3IgaW50IG92ZXJmbG93IHdoZW4gbXVsdGlwbHlpbmcgYnkgNAotICAgICAgICAgICAgaWYgKChkdG9obCh0eXBlU3BlYy0+ZW50cnlDb3VudCkgPiAoSU5UMzJfTUFYL3NpemVvZih1aW50MzJfdCkpCi0gICAgICAgICAgICAgICAgICAgIHx8IGR0b2hzKHR5cGVTcGVjLT5oZWFkZXIuaGVhZGVyU2l6ZSkrKHNpemVvZih1aW50MzJfdCkqZHRvaGwodHlwZVNwZWMtPmVudHJ5Q291bnQpKQotICAgICAgICAgICAgICAgICAgICA+IHR5cGVTcGVjU2l6ZSkpIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiUmVzVGFibGVfdHlwZVNwZWMgZW50cnkgaW5kZXggdG8gJXAgZXh0ZW5kcyBiZXlvbmQgY2h1bmsgZW5kICVwLiIsCi0gICAgICAgICAgICAgICAgICAgICAodm9pZCopKGR0b2hzKHR5cGVTcGVjLT5oZWFkZXIuaGVhZGVyU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyhzaXplb2YodWludDMyX3QpKmR0b2hsKHR5cGVTcGVjLT5lbnRyeUNvdW50KSkpLAotICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXR5cGVTcGVjU2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodHlwZVNwZWMtPmlkID09IDApIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiUmVzVGFibGVfdHlwZSBoYXMgYW4gaWQgb2YgMC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHdoaWxlIChwYWNrYWdlLT50eXBlcy5zaXplKCkgPCB0eXBlU3BlYy0+aWQpIHsKLSAgICAgICAgICAgICAgICBwYWNrYWdlLT50eXBlcy5hZGQoTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBUeXBlKiB0ID0gcGFja2FnZS0+dHlwZXNbdHlwZVNwZWMtPmlkLTFdOwotICAgICAgICAgICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHQgPSBuZXcgVHlwZShoZWFkZXIsIHBhY2thZ2UsIGR0b2hsKHR5cGVTcGVjLT5lbnRyeUNvdW50KSk7Ci0gICAgICAgICAgICAgICAgcGFja2FnZS0+dHlwZXMuZWRpdEl0ZW1BdCh0eXBlU3BlYy0+aWQtMSkgPSB0OwotICAgICAgICAgICAgfSBlbHNlIGlmIChkdG9obCh0eXBlU3BlYy0+ZW50cnlDb3VudCkgIT0gdC0+ZW50cnlDb3VudCkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJSZXNUYWJsZV90eXBlU3BlYyBlbnRyeSBjb3VudCBpbmNvbnNpc3RlbnQ6IGdpdmVuICVkLCBwcmV2aW91c2x5ICVkIiwKLSAgICAgICAgICAgICAgICAgICAgKGludClkdG9obCh0eXBlU3BlYy0+ZW50cnlDb3VudCksIChpbnQpdC0+ZW50cnlDb3VudCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdC0+dHlwZVNwZWNGbGFncyA9IChjb25zdCB1aW50MzJfdCopKAotICAgICAgICAgICAgICAgICAgICAoKGNvbnN0IHVpbnQ4X3QqKXR5cGVTcGVjKSArIGR0b2hzKHR5cGVTcGVjLT5oZWFkZXIuaGVhZGVyU2l6ZSkpOwotICAgICAgICAgICAgdC0+dHlwZVNwZWMgPSB0eXBlU3BlYzsKLSAgICAgICAgICAgIAotICAgICAgICB9IGVsc2UgaWYgKGN0eXBlID09IFJFU19UQUJMRV9UWVBFX1RZUEUpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX3R5cGUqIHR5cGUgPSAoY29uc3QgUmVzVGFibGVfdHlwZSopKGNodW5rKTsKLSAgICAgICAgICAgIGVyciA9IHZhbGlkYXRlX2NodW5rKCZ0eXBlLT5oZWFkZXIsIHNpemVvZigqdHlwZSktc2l6ZW9mKFJlc1RhYmxlX2NvbmZpZykrNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBvcywgIlJlc1RhYmxlX3R5cGUiKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1lcnIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBzaXplX3QgdHlwZVNpemUgPSBkdG9obCh0eXBlLT5oZWFkZXIuc2l6ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExPQURfVEFCTEVfTk9JU1kocHJpbnRmKCJUeXBlIG9mZiAlcDogdHlwZT0weCV4LCBoZWFkZXJTaXplPTB4JXgsIHNpemU9JXBcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopKGJhc2UtKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0b2hzKHR5cGUtPmhlYWRlci50eXBlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0b2hzKHR5cGUtPmhlYWRlci5oZWFkZXJTaXplKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil0eXBlU2l6ZSkpOwotICAgICAgICAgICAgaWYgKGR0b2hzKHR5cGUtPmhlYWRlci5oZWFkZXJTaXplKSsoc2l6ZW9mKHVpbnQzMl90KSpkdG9obCh0eXBlLT5lbnRyeUNvdW50KSkKLSAgICAgICAgICAgICAgICA+IHR5cGVTaXplKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIlJlc1RhYmxlX3R5cGUgZW50cnkgaW5kZXggdG8gJXAgZXh0ZW5kcyBiZXlvbmQgY2h1bmsgZW5kICVwLiIsCi0gICAgICAgICAgICAgICAgICAgICAodm9pZCopKGR0b2hzKHR5cGUtPmhlYWRlci5oZWFkZXJTaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKHNpemVvZih1aW50MzJfdCkqZHRvaGwodHlwZS0+ZW50cnlDb3VudCkpKSwKLSAgICAgICAgICAgICAgICAgICAgICh2b2lkKil0eXBlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGR0b2hsKHR5cGUtPmVudHJ5Q291bnQpICE9IDAKLSAgICAgICAgICAgICAgICAmJiBkdG9obCh0eXBlLT5lbnRyaWVzU3RhcnQpID4gKHR5cGVTaXplLXNpemVvZihSZXNUYWJsZV9lbnRyeSkpKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIlJlc1RhYmxlX3R5cGUgZW50cmllc1N0YXJ0IGF0ICVwIGV4dGVuZHMgYmV5b25kIGNodW5rIGVuZCAlcC4iLAotICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKWR0b2hsKHR5cGUtPmVudHJpZXNTdGFydCksICh2b2lkKil0eXBlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGUtPmlkID09IDApIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiUmVzVGFibGVfdHlwZSBoYXMgYW4gaWQgb2YgMC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHdoaWxlIChwYWNrYWdlLT50eXBlcy5zaXplKCkgPCB0eXBlLT5pZCkgewotICAgICAgICAgICAgICAgIHBhY2thZ2UtPnR5cGVzLmFkZChOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFR5cGUqIHQgPSBwYWNrYWdlLT50eXBlc1t0eXBlLT5pZC0xXTsKLSAgICAgICAgICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB0ID0gbmV3IFR5cGUoaGVhZGVyLCBwYWNrYWdlLCBkdG9obCh0eXBlLT5lbnRyeUNvdW50KSk7Ci0gICAgICAgICAgICAgICAgcGFja2FnZS0+dHlwZXMuZWRpdEl0ZW1BdCh0eXBlLT5pZC0xKSA9IHQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGR0b2hsKHR5cGUtPmVudHJ5Q291bnQpICE9IHQtPmVudHJ5Q291bnQpIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiUmVzVGFibGVfdHlwZSBlbnRyeSBjb3VudCBpbmNvbnNpc3RlbnQ6IGdpdmVuICVkLCBwcmV2aW91c2x5ICVkIiwKLSAgICAgICAgICAgICAgICAgICAgKGludClkdG9obCh0eXBlLT5lbnRyeUNvdW50KSwgKGludCl0LT5lbnRyeUNvdW50KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFRBQkxFX0dFVEVOVFJZKAotICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyB0aGlzQ29uZmlnOwotICAgICAgICAgICAgICAgIHRoaXNDb25maWcuY29weUZyb21EdG9IKHR5cGUtPmNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgQUxPR0koIkFkZGluZyBjb25maWcgdG8gdHlwZSAlZDogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZS0+aWQsIHRoaXNDb25maWcudG9TdHJpbmcoKS5zdHJpbmcoKSkpOwotICAgICAgICAgICAgdC0+Y29uZmlncy5hZGQodHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSB2YWxpZGF0ZV9jaHVuayhjaHVuaywgc2l6ZW9mKFJlc0NodW5rX2hlYWRlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3MsICJSZXNUYWJsZV9wYWNrYWdlOnVua25vd24iKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1lcnIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNodW5rID0gKGNvbnN0IFJlc0NodW5rX2hlYWRlciopCi0gICAgICAgICAgICAoKChjb25zdCB1aW50OF90KiljaHVuaykgKyBjc2l6ZSk7Ci0gICAgfQotCi0gICAgaWYgKGdyb3VwLT50eXBlQ291bnQgPT0gMCkgewotICAgICAgICBncm91cC0+dHlwZUNvdW50ID0gcGFja2FnZS0+dHlwZXMuc2l6ZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFJlc1RhYmxlOjpjcmVhdGVJZG1hcChjb25zdCBSZXNUYWJsZSYgb3ZlcmxheSwgdWludDMyX3Qgb3JpZ2luYWxDcmMsIHVpbnQzMl90IG92ZXJsYXlDcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoqIG91dERhdGEsIHNpemVfdCogb3V0U2l6ZSkgY29uc3QKLXsKLSAgICAvLyBzZWUgUkVBRE1FIGZvciBkZXRhaWxzIG9uIHRoZSBmb3JtYXQgb2YgbWFwCi0gICAgaWYgKG1QYWNrYWdlR3JvdXBzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICBpZiAobVBhY2thZ2VHcm91cHNbMF0tPnBhY2thZ2VzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIFZlY3RvcjxWZWN0b3I8dWludDMyX3Q+ID4gbWFwOwotICAgIGNvbnN0IFBhY2thZ2VHcm91cCogcGcgPSBtUGFja2FnZUdyb3Vwc1swXTsKLSAgICBjb25zdCBQYWNrYWdlKiBwa2cgPSBwZy0+cGFja2FnZXNbMF07Ci0gICAgc2l6ZV90IHR5cGVDb3VudCA9IHBrZy0+dHlwZXMuc2l6ZSgpOwotICAgIC8vIHN0YXJ0aW5nIHNpemUgaXMgaGVhZGVyICsgZmlyc3QgaXRlbSAobnVtYmVyIG9mIHR5cGVzIGluIG1hcCkKLSAgICAqb3V0U2l6ZSA9IChJRE1BUF9IRUFERVJfU0laRSArIDEpICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICBjb25zdCBTdHJpbmcxNiBvdmVybGF5UGFja2FnZShvdmVybGF5Lm1QYWNrYWdlR3JvdXBzWzBdLT5wYWNrYWdlc1swXS0+cGFja2FnZS0+bmFtZSk7Ci0gICAgY29uc3QgdWludDMyX3QgcGtnX2lkID0gcGtnLT5wYWNrYWdlLT5pZCA8PCAyNDsKLQotICAgIGZvciAoc2l6ZV90IHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IHR5cGVDb3VudDsgKyt0eXBlSW5kZXgpIHsKLSAgICAgICAgc3NpemVfdCBmaXJzdCA9IC0xOwotICAgICAgICBzc2l6ZV90IGxhc3QgPSAtMTsKLSAgICAgICAgY29uc3QgVHlwZSogdHlwZUNvbmZpZ3MgPSBwa2ctPmdldFR5cGUodHlwZUluZGV4KTsKLSAgICAgICAgc3NpemVfdCBtYXBJbmRleCA9IG1hcC5hZGQoKTsKLSAgICAgICAgaWYgKG1hcEluZGV4IDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICAgICAgfQotICAgICAgICBWZWN0b3I8dWludDMyX3Q+JiB2ZWN0b3IgPSBtYXAuZWRpdEl0ZW1BdChtYXBJbmRleCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGVudHJ5SW5kZXggPSAwOyBlbnRyeUluZGV4IDwgdHlwZUNvbmZpZ3MtPmVudHJ5Q291bnQ7ICsrZW50cnlJbmRleCkgewotICAgICAgICAgICAgdWludDMyX3QgcmVzSUQgPSBwa2dfaWQKLSAgICAgICAgICAgICAgICB8ICgweDAwZmYwMDAwICYgKCh0eXBlSW5kZXgrMSk8PDE2KSkKLSAgICAgICAgICAgICAgICB8ICgweDAwMDBmZmZmICYgKGVudHJ5SW5kZXgpKTsKLSAgICAgICAgICAgIHJlc291cmNlX25hbWUgcmVzTmFtZTsKLSAgICAgICAgICAgIGlmICghdGhpcy0+Z2V0UmVzb3VyY2VOYW1lKHJlc0lELCB0cnVlLCAmcmVzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiaWRtYXA6IHJlc291cmNlIDB4JTA4eCBoYXMgc3BlYyBidXQgbGFja3MgdmFsdWVzLCBza2lwcGluZ1xuIiwgcmVzSUQpOwotICAgICAgICAgICAgICAgIC8vIGFkZCBkdW1teSB2YWx1ZSwgb3IgdHJpbW1pbmcgbGVhZGluZy90cmFpbGluZyB6ZXJvZXMgbGF0ZXIgd2lsbCBmYWlsCi0gICAgICAgICAgICAgICAgdmVjdG9yLnB1c2goMCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2IG92ZXJsYXlUeXBlKHJlc05hbWUudHlwZSwgcmVzTmFtZS50eXBlTGVuKTsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2IG92ZXJsYXlOYW1lKHJlc05hbWUubmFtZSwgcmVzTmFtZS5uYW1lTGVuKTsKLSAgICAgICAgICAgIHVpbnQzMl90IG92ZXJsYXlSZXNJRCA9IG92ZXJsYXkuaWRlbnRpZmllckZvck5hbWUob3ZlcmxheU5hbWUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlOYW1lLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVR5cGUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlUeXBlLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVBhY2thZ2Uuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlQYWNrYWdlLnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAob3ZlcmxheVJlc0lEICE9IDApIHsKLSAgICAgICAgICAgICAgICBvdmVybGF5UmVzSUQgPSBwa2dfaWQgfCAoMHgwMGZmZmZmZiAmIG92ZXJsYXlSZXNJRCk7Ci0gICAgICAgICAgICAgICAgbGFzdCA9IFJlc19HRVRFTlRSWShyZXNJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0ID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gUmVzX0dFVEVOVFJZKHJlc0lEKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2ZWN0b3IucHVzaChvdmVybGF5UmVzSUQpOwotI2lmIDAKLSAgICAgICAgICAgIGlmIChvdmVybGF5UmVzSUQgIT0gMCkgewotICAgICAgICAgICAgICAgIEFMT0dEKCIlcy8lcyAweCUwOHggLT4gMHglMDh4XG4iLAotICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChTdHJpbmcxNihyZXNOYW1lLnR5cGUpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoU3RyaW5nMTYocmVzTmFtZS5uYW1lKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICByZXNJRCwgb3ZlcmxheVJlc0lEKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZpcnN0ICE9IC0xKSB7Ci0gICAgICAgICAgICAvLyBzaGF2ZSBvZmYgdHJhaWxpbmcgZW50cmllcyB3aGljaCBsYWNrIG92ZXJsYXkgdmFsdWVzCi0gICAgICAgICAgICBjb25zdCBzaXplX3QgbGFzdF9wYXN0X29uZSA9IGxhc3QgKyAxOwotICAgICAgICAgICAgaWYgKGxhc3RfcGFzdF9vbmUgPCB2ZWN0b3Iuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgdmVjdG9yLnJlbW92ZUl0ZW1zQXQobGFzdF9wYXN0X29uZSwgdmVjdG9yLnNpemUoKSAtIGxhc3RfcGFzdF9vbmUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gc2hhdmUgb2ZmIGxlYWRpbmcgZW50cmllcyB3aGljaCBsYWNrIG92ZXJsYXkgdmFsdWVzCi0gICAgICAgICAgICB2ZWN0b3IucmVtb3ZlSXRlbXNBdCgwLCBmaXJzdCk7Ci0gICAgICAgICAgICAvLyBzdG9yZSBvZmZzZXQgdG8gZmlyc3Qgb3ZlcmxhaWQgcmVzb3VyY2UgSUQgb2YgdGhpcyB0eXBlCi0gICAgICAgICAgICB2ZWN0b3IuaW5zZXJ0QXQoKHVpbnQzMl90KWZpcnN0LCAwLCAxKTsKLSAgICAgICAgICAgIC8vIHJlc2VydmUgc3BhY2UgZm9yIG51bWJlciBhbmQgb2Zmc2V0IG9mIGVudHJpZXMsIGFuZCB0aGUgYWN0dWFsIGVudHJpZXMKLSAgICAgICAgICAgICpvdXRTaXplICs9ICgyICsgdmVjdG9yLnNpemUoKSkgKiBzaXplb2YodWludDMyX3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gbm8gZW50cmllcyBvZiBjdXJyZW50IHR5cGUgZGVmaW5lZCBpbiBvdmVybGF5IHBhY2thZ2UKLSAgICAgICAgICAgIHZlY3Rvci5jbGVhcigpOwotICAgICAgICAgICAgLy8gcmVzZXJ2ZSBzcGFjZSBmb3IgdHlwZSBvZmZzZXQKLSAgICAgICAgICAgICpvdXRTaXplICs9IDEgKiBzaXplb2YodWludDMyX3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCgqb3V0RGF0YSA9IG1hbGxvYygqb3V0U2l6ZSkpID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICB9Ci0gICAgdWludDMyX3QqIGRhdGEgPSAodWludDMyX3QqKSpvdXREYXRhOwotICAgICpkYXRhKysgPSBodG9kbChJRE1BUF9NQUdJQyk7Ci0gICAgKmRhdGErKyA9IGh0b2RsKG9yaWdpbmFsQ3JjKTsKLSAgICAqZGF0YSsrID0gaHRvZGwob3ZlcmxheUNyYyk7Ci0gICAgY29uc3Qgc2l6ZV90IG1hcFNpemUgPSBtYXAuc2l6ZSgpOwotICAgICpkYXRhKysgPSBodG9kbChtYXBTaXplKTsKLSAgICBzaXplX3Qgb2Zmc2V0ID0gbWFwU2l6ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcFNpemU7ICsraSkgewotICAgICAgICBjb25zdCBWZWN0b3I8dWludDMyX3Q+JiB2ZWN0b3IgPSBtYXAuaXRlbUF0KGkpOwotICAgICAgICBjb25zdCBzaXplX3QgTiA9IHZlY3Rvci5zaXplKCk7Ci0gICAgICAgIGlmIChOID09IDApIHsKLSAgICAgICAgICAgICpkYXRhKysgPSBodG9kbCgwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG9mZnNldCsrOwotICAgICAgICAgICAgKmRhdGErKyA9IGh0b2RsKG9mZnNldCk7Ci0gICAgICAgICAgICBvZmZzZXQgKz0gTjsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcFNpemU7ICsraSkgewotICAgICAgICBjb25zdCBWZWN0b3I8dWludDMyX3Q+JiB2ZWN0b3IgPSBtYXAuaXRlbUF0KGkpOwotICAgICAgICBjb25zdCBzaXplX3QgTiA9IHZlY3Rvci5zaXplKCk7Ci0gICAgICAgIGlmIChOID09IDApIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChOID09IDEpIHsgLy8gdmVjdG9yIGV4cGVjdGVkIHRvIGhvbGQgKG9mZnNldCkgKyAoTiA+IDAgZW50cmllcykKLSAgICAgICAgICAgIEFMT0dXKCJpZG1hcDogdHlwZSAlZCBzdXBwb3NlZGx5IGhhcyBlbnRyaWVzLCBidXQgbm8gZW50cmllcyBmb3VuZFxuIiwgaSk7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICAqZGF0YSsrID0gaHRvZGwoTiAtIDEpOyAvLyBkbyBub3QgY291bnQgdGhlIG9mZnNldCAod2hpY2ggaXMgdmVjdG9yJ3MgZmlyc3QgZWxlbWVudCkKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBOOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90JiBvdmVybGF5UmVzSUQgPSB2ZWN0b3IuaXRlbUF0KGopOwotICAgICAgICAgICAgKmRhdGErKyA9IGh0b2RsKG92ZXJsYXlSZXNJRCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLWJvb2wgUmVzVGFibGU6OmdldElkbWFwSW5mbyhjb25zdCB2b2lkKiBpZG1hcCwgc2l6ZV90IHNpemVCeXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogcE9yaWdpbmFsQ3JjLCB1aW50MzJfdCogcE92ZXJsYXlDcmMpCi17Ci0gICAgY29uc3QgdWludDMyX3QqIG1hcCA9IChjb25zdCB1aW50MzJfdCopaWRtYXA7Ci0gICAgaWYgKCFhc3NlcnRJZG1hcEhlYWRlcihtYXAsIHNpemVCeXRlcykpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAqcE9yaWdpbmFsQ3JjID0gbWFwWzFdOwotICAgICpwT3ZlcmxheUNyYyA9IG1hcFsyXTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi0jZGVmaW5lIENIQVIxNl9UT19DU1RSKGMxNiwgbGVuKSAoU3RyaW5nOChTdHJpbmcxNihjMTYsbGVuKSkuc3RyaW5nKCkpCi0KLSNkZWZpbmUgQ0hBUjE2X0FSUkFZX0VRKGNvbnN0YW50LCB2YXIsIGxlbikgXAotICAgICAgICAoKGxlbiA9PSAoc2l6ZW9mKGNvbnN0YW50KS9zaXplb2YoY29uc3RhbnRbMF0pKSkgJiYgKDAgPT0gbWVtY21wKCh2YXIpLCAoY29uc3RhbnQpLCAobGVuKSkpKQotCi1zdGF0aWMgdm9pZCBwcmludF9jb21wbGV4KHVpbnQzMl90IGNvbXBsZXgsIGJvb2wgaXNGcmFjdGlvbikKLXsKLSAgICBjb25zdCBmbG9hdCBNQU5USVNTQV9NVUxUID0KLSAgICAgICAgMS4wZiAvICgxPDxSZXNfdmFsdWU6OkNPTVBMRVhfTUFOVElTU0FfU0hJRlQpOwotICAgIGNvbnN0IGZsb2F0IFJBRElYX01VTFRTW10gPSB7Ci0gICAgICAgIDEuMGYqTUFOVElTU0FfTVVMVCwgMS4wZi8oMTw8NykqTUFOVElTU0FfTVVMVCwKLSAgICAgICAgMS4wZi8oMTw8MTUpKk1BTlRJU1NBX01VTFQsIDEuMGYvKDE8PDIzKSpNQU5USVNTQV9NVUxUCi0gICAgfTsKLQotICAgIGZsb2F0IHZhbHVlID0gKGNvbXBsZXgmKFJlc192YWx1ZTo6Q09NUExFWF9NQU5USVNTQV9NQVNLCi0gICAgICAgICAgICAgICAgICAgPDxSZXNfdmFsdWU6OkNPTVBMRVhfTUFOVElTU0FfU0hJRlQpKQotICAgICAgICAgICAgKiBSQURJWF9NVUxUU1soY29tcGxleD4+UmVzX3ZhbHVlOjpDT01QTEVYX1JBRElYX1NISUZUKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUmVzX3ZhbHVlOjpDT01QTEVYX1JBRElYX01BU0tdOwotICAgIHByaW50ZigiJWYiLCB2YWx1ZSk7Ci0gICAgCi0gICAgaWYgKCFpc0ZyYWN0aW9uKSB7Ci0gICAgICAgIHN3aXRjaCAoKGNvbXBsZXg+PlJlc192YWx1ZTo6Q09NUExFWF9VTklUX1NISUZUKSZSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9NQVNLKSB7Ci0gICAgICAgICAgICBjYXNlIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX1BYOiBwcmludGYoInB4Iik7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9ESVA6IHByaW50ZigiZHAiKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX1NQOiBwcmludGYoInNwIik7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9QVDogcHJpbnRmKCJwdCIpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfSU46IHByaW50ZigiaW4iKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX01NOiBwcmludGYoIm1tIik7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogcHJpbnRmKCIgKHVua25vd24gdW5pdCkiKTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKChjb21wbGV4Pj5SZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9TSElGVCkmUmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfTUFTSykgewotICAgICAgICAgICAgY2FzZSBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9GUkFDVElPTjogcHJpbnRmKCIlJSIpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfRlJBQ1RJT05fUEFSRU5UOiBwcmludGYoIiUlcCIpOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IHByaW50ZigiICh1bmtub3duIHVuaXQpIik7IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBOb3JtYWxpemUgYSBzdHJpbmcgZm9yIG91dHB1dAotU3RyaW5nOCBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KCBjb25zdCBjaGFyICppbnB1dCApCi17Ci0gICAgU3RyaW5nOCByZXQ7Ci0gICAgY2hhciBidWZmWzJdOwotICAgIGJ1ZmZbMV0gPSAnXDAnOwotCi0gICAgd2hpbGUgKCppbnB1dCAhPSAnXDAnKSB7Ci0gICAgICAgIHN3aXRjaCAoKmlucHV0KSB7Ci0gICAgICAgICAgICAvLyBBbGwgaW50ZXJlc3RpbmcgY2hhcmFjdGVycyBhcmUgaW4gdGhlIEFTQ0lJIHpvbmUsIHNvIHdlIGFyZSBtYWtpbmcgb3VyIG93biBsaXZlcwotICAgICAgICAgICAgLy8gZWFzaWVyIGJ5IHNjYW5uaW5nIHRoZSBzdHJpbmcgb25lIGJ5dGUgYXQgYSB0aW1lLgotICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAgICAgICByZXQgKz0gIlxcXFwiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICAgIHJldCArPSAiXFxuIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgIHJldCArPSAiXFxcIiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJ1ZmZbMF0gPSAqaW5wdXQ7Ci0gICAgICAgICAgICByZXQgKz0gYnVmZjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5wdXQrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi12b2lkIFJlc1RhYmxlOjpwcmludF92YWx1ZShjb25zdCBQYWNrYWdlKiBwa2csIGNvbnN0IFJlc192YWx1ZSYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgaWYgKHZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9OVUxMKSB7Ci0gICAgICAgIHByaW50ZigiKG51bGwpXG4iKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9SRUZFUkVOQ0UpIHsKLSAgICAgICAgcHJpbnRmKCIocmVmZXJlbmNlKSAweCUwOHhcbiIsIHZhbHVlLmRhdGEpOwotICAgIH0gZWxzZSBpZiAodmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX0FUVFJJQlVURSkgewotICAgICAgICBwcmludGYoIihhdHRyaWJ1dGUpIDB4JTA4eFxuIiwgdmFsdWUuZGF0YSk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfU1RSSU5HKSB7Ci0gICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgIGNvbnN0IGNoYXIqIHN0cjggPSBwa2ctPmhlYWRlci0+dmFsdWVzLnN0cmluZzhBdCgKLSAgICAgICAgICAgICAgICB2YWx1ZS5kYXRhLCAmbGVuKTsKLSAgICAgICAgaWYgKHN0cjggIT0gTlVMTCkgewotICAgICAgICAgICAgcHJpbnRmKCIoc3RyaW5nOCkgXCIlc1wiXG4iLCBub3JtYWxpemVGb3JPdXRwdXQoc3RyOCkuc3RyaW5nKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHN0cjE2ID0gcGtnLT5oZWFkZXItPnZhbHVlcy5zdHJpbmdBdCgKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUuZGF0YSwgJmxlbik7Ci0gICAgICAgICAgICBpZiAoc3RyMTYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiKHN0cmluZzE2KSBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZUZvck91dHB1dChTdHJpbmc4KHN0cjE2LCBsZW4pLnN0cmluZygpKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiKHN0cmluZykgbnVsbFxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gCi0gICAgfSBlbHNlIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfRkxPQVQpIHsKLSAgICAgICAgcHJpbnRmKCIoZmxvYXQpICVnXG4iLCAqKGNvbnN0IGZsb2F0KikmdmFsdWUuZGF0YSk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfRElNRU5TSU9OKSB7Ci0gICAgICAgIHByaW50ZigiKGRpbWVuc2lvbikgIik7Ci0gICAgICAgIHByaW50X2NvbXBsZXgodmFsdWUuZGF0YSwgZmFsc2UpOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfRlJBQ1RJT04pIHsKLSAgICAgICAgcHJpbnRmKCIoZnJhY3Rpb24pICIpOwotICAgICAgICBwcmludF9jb21wbGV4KHZhbHVlLmRhdGEsIHRydWUpOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS5kYXRhVHlwZSA+PSBSZXNfdmFsdWU6OlRZUEVfRklSU1RfQ09MT1JfSU5UCi0gICAgICAgICAgICB8fCB2YWx1ZS5kYXRhVHlwZSA8PSBSZXNfdmFsdWU6OlRZUEVfTEFTVF9DT0xPUl9JTlQpIHsKLSAgICAgICAgcHJpbnRmKCIoY29sb3IpICMlMDh4XG4iLCB2YWx1ZS5kYXRhKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9JTlRfQk9PTEVBTikgewotICAgICAgICBwcmludGYoIihib29sZWFuKSAlc1xuIiwgdmFsdWUuZGF0YSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICAgIH0gZWxzZSBpZiAodmFsdWUuZGF0YVR5cGUgPj0gUmVzX3ZhbHVlOjpUWVBFX0ZJUlNUX0lOVAotICAgICAgICAgICAgfHwgdmFsdWUuZGF0YVR5cGUgPD0gUmVzX3ZhbHVlOjpUWVBFX0xBU1RfSU5UKSB7Ci0gICAgICAgIHByaW50ZigiKGludCkgMHglMDh4IG9yICVkXG4iLCB2YWx1ZS5kYXRhLCB2YWx1ZS5kYXRhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmludGYoIih1bmtub3duIHR5cGUpIHQ9MHglMDJ4IGQ9MHglMDh4IChzPTB4JTA0eCByPTB4JTAyeClcbiIsCi0gICAgICAgICAgICAgICAoaW50KXZhbHVlLmRhdGFUeXBlLCAoaW50KXZhbHVlLmRhdGEsCi0gICAgICAgICAgICAgICAoaW50KXZhbHVlLnNpemUsIChpbnQpdmFsdWUucmVzMCk7Ci0gICAgfQotfQotCi12b2lkIFJlc1RhYmxlOjpwcmludChib29sIGluY2xWYWx1ZXMpIGNvbnN0Ci17Ci0gICAgaWYgKG1FcnJvciAhPSAwKSB7Ci0gICAgICAgIHByaW50ZigibUVycm9yPTB4JXggKCVzKVxuIiwgbUVycm9yLCBzdHJlcnJvcihtRXJyb3IpKTsKLSAgICB9Ci0jaWYgMAotICAgIHByaW50ZigibVBhcmFtcz0lYyVjLSVjJWMsXG4iLAotICAgICAgICAgICAgbVBhcmFtcy5sYW5ndWFnZVswXSwgbVBhcmFtcy5sYW5ndWFnZVsxXSwKLSAgICAgICAgICAgIG1QYXJhbXMuY291bnRyeVswXSwgbVBhcmFtcy5jb3VudHJ5WzFdKTsKLSNlbmRpZgotICAgIHNpemVfdCBwZ0NvdW50ID0gbVBhY2thZ2VHcm91cHMuc2l6ZSgpOwotICAgIHByaW50ZigiUGFja2FnZSBHcm91cHMgKCVkKVxuIiwgKGludClwZ0NvdW50KTsKLSAgICBmb3IgKHNpemVfdCBwZ0luZGV4PTA7IHBnSW5kZXg8cGdDb3VudDsgcGdJbmRleCsrKSB7Ci0gICAgICAgIGNvbnN0IFBhY2thZ2VHcm91cCogcGcgPSBtUGFja2FnZUdyb3Vwc1twZ0luZGV4XTsKLSAgICAgICAgcHJpbnRmKCJQYWNrYWdlIEdyb3VwICVkIGlkPSVkIHBhY2thZ2VDb3VudD0lZCBuYW1lPSVzXG4iLAotICAgICAgICAgICAgICAgIChpbnQpcGdJbmRleCwgcGctPmlkLCAoaW50KXBnLT5wYWNrYWdlcy5zaXplKCksCi0gICAgICAgICAgICAgICAgU3RyaW5nOChwZy0+bmFtZSkuc3RyaW5nKCkpOwotICAgICAgICAKLSAgICAgICAgc2l6ZV90IHBrZ0NvdW50ID0gcGctPnBhY2thZ2VzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgcGtnSW5kZXg9MDsgcGtnSW5kZXg8cGtnQ291bnQ7IHBrZ0luZGV4KyspIHsKLSAgICAgICAgICAgIGNvbnN0IFBhY2thZ2UqIHBrZyA9IHBnLT5wYWNrYWdlc1twa2dJbmRleF07Ci0gICAgICAgICAgICBzaXplX3QgdHlwZUNvdW50ID0gcGtnLT50eXBlcy5zaXplKCk7Ci0gICAgICAgICAgICBwcmludGYoIiAgUGFja2FnZSAlZCBpZD0lZCBuYW1lPSVzIHR5cGVDb3VudD0lZFxuIiwgKGludClwa2dJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgcGtnLT5wYWNrYWdlLT5pZCwgU3RyaW5nOChTdHJpbmcxNihwa2ctPnBhY2thZ2UtPm5hbWUpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgKGludCl0eXBlQ291bnQpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgdHlwZUluZGV4PTA7IHR5cGVJbmRleDx0eXBlQ291bnQ7IHR5cGVJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVHlwZSogdHlwZUNvbmZpZ3MgPSBwa2ctPmdldFR5cGUodHlwZUluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZUNvbmZpZ3MgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICB0eXBlICVkIE5VTExcbiIsIChpbnQpdHlwZUluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOVEMgPSB0eXBlQ29uZmlncy0+Y29uZmlncy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgdHlwZSAlZCBjb25maWdDb3VudD0lZCBlbnRyeUNvdW50PSVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAoaW50KXR5cGVJbmRleCwgKGludClOVEMsIChpbnQpdHlwZUNvbmZpZ3MtPmVudHJ5Q291bnQpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlQ29uZmlncy0+dHlwZVNwZWNGbGFncyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGVudHJ5SW5kZXg9MDsgZW50cnlJbmRleDx0eXBlQ29uZmlncy0+ZW50cnlDb3VudDsgZW50cnlJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZXNJRCA9ICgweGZmMDAwMDAwICYgKChwa2ctPnBhY2thZ2UtPmlkKTw8MjQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoMHgwMGZmMDAwMCAmICgodHlwZUluZGV4KzEpPDwxNikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgweDAwMDBmZmZmICYgKGVudHJ5SW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX25hbWUgcmVzTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLT5nZXRSZXNvdXJjZU5hbWUocmVzSUQsIHRydWUsICZyZXNOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggdHlwZTg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzTmFtZS50eXBlOCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU4ID0gU3RyaW5nOChyZXNOYW1lLnR5cGU4LCByZXNOYW1lLnR5cGVMZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU4ID0gU3RyaW5nOChyZXNOYW1lLnR5cGUsIHJlc05hbWUudHlwZUxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNOYW1lLm5hbWU4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTggPSBTdHJpbmc4KHJlc05hbWUubmFtZTgsIHJlc05hbWUubmFtZUxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTggPSBTdHJpbmc4KHJlc05hbWUubmFtZSwgcmVzTmFtZS5uYW1lTGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBzcGVjIHJlc291cmNlIDB4JTA4eCAlczolcy8lczogZmxhZ3M9MHglMDh4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBUjE2X1RPX0NTVFIocmVzTmFtZS5wYWNrYWdlLCByZXNOYW1lLnBhY2thZ2VMZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOC5zdHJpbmcoKSwgbmFtZTguc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0b2hsKHR5cGVDb25maWdzLT50eXBlU3BlY0ZsYWdzW2VudHJ5SW5kZXhdKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgSU5WQUxJRCBUWVBFIENPTkZJRyBGT1IgUkVTT1VSQ0UgMHglMDh4XG4iLCByZXNJRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY29uZmlnSW5kZXg9MDsgY29uZmlnSW5kZXg8TlRDOyBjb25maWdJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX3R5cGUqIHR5cGUgPSB0eXBlQ29uZmlncy0+Y29uZmlnc1tjb25maWdJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoKCh1aW50NjRfdCl0eXBlKSYweDMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgTk9OLUlOVEVHRVIgUmVzVGFibGVfdHlwZSBBRERSRVNTOiAlcFxuIiwgdHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IGNvbmZpZ1N0ciA9IHR5cGUtPmNvbmZpZy50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIGNvbmZpZyAlczpcbiIsIGNvbmZpZ1N0ci5zaXplKCkgPiAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb25maWdTdHIuc3RyaW5nKCkgOiAiKGRlZmF1bHQpIik7Ci0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbnRyeUNvdW50ID0gZHRvaGwodHlwZS0+ZW50cnlDb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVudHJpZXNTdGFydCA9IGR0b2hsKHR5cGUtPmVudHJpZXNTdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoZW50cmllc1N0YXJ0JjB4MykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBOT04tSU5URUdFUiBSZXNUYWJsZV90eXBlIGVudHJpZXNTdGFydCBPRkZTRVQ6ICVwXG4iLCAodm9pZCopZW50cmllc1N0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHR5cGVTaXplID0gZHRvaGwodHlwZS0+aGVhZGVyLnNpemUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVTaXplJjB4MykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBOT04tSU5URUdFUiBSZXNUYWJsZV90eXBlIGhlYWRlci5zaXplOiAlcFxuIiwgKHZvaWQqKXR5cGVTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGVudHJ5SW5kZXg9MDsgZW50cnlJbmRleDxlbnRyeUNvdW50OyBlbnRyeUluZGV4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogY29uc3QgZW5kID0gKChjb25zdCB1aW50OF90Kil0eXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZHRvaGwodHlwZS0+aGVhZGVyLnNpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGNvbnN0IGVpbmRleCA9IChjb25zdCB1aW50MzJfdCopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopdHlwZSkgKyBkdG9ocyh0eXBlLT5oZWFkZXIuaGVhZGVyU2l6ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0aGlzT2Zmc2V0ID0gZHRvaGwoZWluZGV4W2VudHJ5SW5kZXhdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzT2Zmc2V0ID09IFJlc1RhYmxlX3R5cGU6Ok5PX0VOVFJZKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlc0lEID0gKDB4ZmYwMDAwMDAgJiAoKHBrZy0+cGFja2FnZS0+aWQpPDwyNCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgweDAwZmYwMDAwICYgKCh0eXBlSW5kZXgrMSk8PDE2KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKDB4MDAwMGZmZmYgJiAoZW50cnlJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfbmFtZSByZXNOYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMtPmdldFJlc291cmNlTmFtZShyZXNJRCwgdHJ1ZSwgJnJlc05hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCB0eXBlODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWU4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNOYW1lLnR5cGU4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTggPSBTdHJpbmc4KHJlc05hbWUudHlwZTgsIHJlc05hbWUudHlwZUxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTggPSBTdHJpbmc4KHJlc05hbWUudHlwZSwgcmVzTmFtZS50eXBlTGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc05hbWUubmFtZTggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOCA9IFN0cmluZzgocmVzTmFtZS5uYW1lOCwgcmVzTmFtZS5uYW1lTGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOCA9IFN0cmluZzgocmVzTmFtZS5uYW1lLCByZXNOYW1lLm5hbWVMZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgICAgcmVzb3VyY2UgMHglMDh4ICVzOiVzLyVzOiAiLCByZXNJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQVIxNl9UT19DU1RSKHJlc05hbWUucGFja2FnZSwgcmVzTmFtZS5wYWNrYWdlTGVuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU4LnN0cmluZygpLCBuYW1lOC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgICBJTlZBTElEIFJFU09VUkNFIDB4JTA4eDogIiwgcmVzSUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzT2Zmc2V0JjB4MykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiTk9OLUlOVEVHRVIgT0ZGU0VUOiAlcFxuIiwgKHZvaWQqKXRoaXNPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzT2Zmc2V0K3NpemVvZihSZXNUYWJsZV9lbnRyeSkpID4gdHlwZVNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIk9GRlNFVCBPVVQgT0YgQk9VTkRTOiAlcCslcCAoc2l6ZSBpcyAlcClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKillbnRyaWVzU3RhcnQsICh2b2lkKil0aGlzT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopdHlwZVNpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9lbnRyeSogZW50ID0gKGNvbnN0IFJlc1RhYmxlX2VudHJ5KikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChjb25zdCB1aW50OF90Kil0eXBlKSArIGVudHJpZXNTdGFydCArIHRoaXNPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoZW50cmllc1N0YXJ0ICsgdGhpc09mZnNldCkmMHgzKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJOT04tSU5URUdFUiBSZXNUYWJsZV9lbnRyeSBPRkZTRVQ6ICVwXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKShlbnRyaWVzU3RhcnQgKyB0aGlzT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGVzaXplID0gZHRvaHMoZW50LT5zaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZXNpemUmMHgzKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJOT04tSU5URUdFUiBSZXNUYWJsZV9lbnRyeSBTSVpFOiAlcFxuIiwgKHZvaWQqKWVzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGhpc09mZnNldCtlc2l6ZSkgPiB0eXBlU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiUmVzVGFibGVfZW50cnkgT1VUIE9GIEJPVU5EUzogJXArJXArJXAgKHNpemUgaXMgJXApXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopZW50cmllc1N0YXJ0LCAodm9pZCopdGhpc09mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKWVzaXplLCAodm9pZCopdHlwZVNpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzX3ZhbHVlKiB2YWx1ZVB0ciA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9tYXBfZW50cnkqIGJhZ1B0ciA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZXNfdmFsdWUgdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGR0b2hzKGVudC0+ZmxhZ3MpJlJlc1RhYmxlX2VudHJ5OjpGTEFHX0NPTVBMRVgpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIjxiYWc+Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFnUHRyID0gKGNvbnN0IFJlc1RhYmxlX21hcF9lbnRyeSopZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVB0ciA9IChjb25zdCBSZXNfdmFsdWUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChjb25zdCB1aW50OF90KillbnQpICsgZXNpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmNvcHlGcm9tX2R0b2goKnZhbHVlUHRyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInQ9MHglMDJ4IGQ9MHglMDh4IChzPTB4JTA0eCByPTB4JTAyeCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXZhbHVlLmRhdGFUeXBlLCAoaW50KXZhbHVlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpdmFsdWUuc2l6ZSwgKGludCl2YWx1ZS5yZXMwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChkdG9ocyhlbnQtPmZsYWdzKSZSZXNUYWJsZV9lbnRyeTo6RkxBR19QVUJMSUMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAoUFVCTElDKSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5jbFZhbHVlcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZVB0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAgICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF92YWx1ZShwa2csIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJhZ1B0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBOID0gZHRvaGwoYmFnUHRyLT5jb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGJhc2VNYXBQdHIgPSAoY29uc3QgdWludDhfdCopZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWFwT2Zmc2V0ID0gZXNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX21hcCogbWFwUHRyID0gKFJlc1RhYmxlX21hcCopKGJhc2VNYXBQdHIrbWFwT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICAgICAgUGFyZW50PTB4JTA4eCwgQ291bnQ9JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdG9obChiYWdQdHItPnBhcmVudC5pZGVudCksIE4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8TiAmJiBtYXBPZmZzZXQgPCAodHlwZVNpemUtc2l6ZW9mKFJlc1RhYmxlX21hcCkpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAgICMlaSAoS2V5PTB4JTA4eCk6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgZHRvaGwobWFwUHRyLT5uYW1lLmlkZW50KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5jb3B5RnJvbV9kdG9oKG1hcFB0ci0+dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfdmFsdWUocGtnLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IGR0b2hzKG1hcFB0ci0+dmFsdWUuc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBPZmZzZXQgKz0gc2l6ZSArIHNpemVvZigqbWFwUHRyKS1zaXplb2YobWFwUHRyLT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBQdHIgPSAoUmVzVGFibGVfbWFwKikoYmFzZU1hcFB0cittYXBPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi19ICAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2xpYnMvYW5kcm9pZGZ3L1N0cmVhbWluZ1ppcEluZmxhdGVyLmNwcCBiL2xpYnMvYW5kcm9pZGZ3L1N0cmVhbWluZ1ppcEluZmxhdGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRmZWMyMy4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9TdHJlYW1pbmdaaXBJbmZsYXRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLSNkZWZpbmUgTE9HX1RBRyAic3ppcGluZiIKLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9TdHJlYW1pbmdaaXBJbmZsYXRlci5oPgotI2luY2x1ZGUgPHV0aWxzL0ZpbGVNYXAuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0vKgotICogVEVNUF9GQUlMVVJFX1JFVFJZIGlzIGRlZmluZWQgYnkgc29tZSwgYnV0IG5vdCBhbGwsIHZlcnNpb25zIG9mCi0gKiA8dW5pc3RkLmg+LiAoQWxhcywgaXQgaXMgbm90IGFzIHN0YW5kYXJkIGFzIHdlJ2QgaG9wZWQhKSBTbywgaWYgaXQncwotICogbm90IGFscmVhZHkgZGVmaW5lZCwgdGhlbiBkZWZpbmUgaXQgaGVyZS4KLSAqLwotI2lmbmRlZiBURU1QX0ZBSUxVUkVfUkVUUlkKLS8qIFVzZWQgdG8gcmV0cnkgc3lzY2FsbHMgdGhhdCBjYW4gcmV0dXJuIEVJTlRSLiAqLwotI2RlZmluZSBURU1QX0ZBSUxVUkVfUkVUUlkoZXhwKSAoeyAgICAgICAgIFwKLSAgICB0eXBlb2YgKGV4cCkgX3JjOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfcmMgPSAoZXhwKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlIChfcmMgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOyBcCi0gICAgX3JjOyB9KQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IG1pbl9vZihzaXplX3QgYSwgc2l6ZV90IGIpIHsgcmV0dXJuIChhIDwgYikgPyBhIDogYjsgfQotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotLyoKLSAqIFN0cmVhbWluZyBhY2Nlc3MgdG8gY29tcHJlc3NlZCBhc3NldCBkYXRhIGluIGFuIG9wZW4gZmQKLSAqLwotU3RyZWFtaW5nWmlwSW5mbGF0ZXI6OlN0cmVhbWluZ1ppcEluZmxhdGVyKGludCBmZCwgb2ZmNjRfdCBjb21wRGF0YVN0YXJ0LAotICAgICAgICBzaXplX3QgdW5jb21wU2l6ZSwgc2l6ZV90IGNvbXBTaXplKSB7Ci0gICAgbUZkID0gZmQ7Ci0gICAgbURhdGFNYXAgPSBOVUxMOwotICAgIG1JbkZpbGVTdGFydCA9IGNvbXBEYXRhU3RhcnQ7Ci0gICAgbU91dFRvdGFsU2l6ZSA9IHVuY29tcFNpemU7Ci0gICAgbUluVG90YWxTaXplID0gY29tcFNpemU7Ci0KLSAgICBtSW5CdWZTaXplID0gU3RyZWFtaW5nWmlwSW5mbGF0ZXI6OklOUFVUX0NIVU5LX1NJWkU7Ci0gICAgbUluQnVmID0gbmV3IHVpbnQ4X3RbbUluQnVmU2l6ZV07Ci0KLSAgICBtT3V0QnVmU2l6ZSA9IFN0cmVhbWluZ1ppcEluZmxhdGVyOjpPVVRQVVRfQ0hVTktfU0laRTsKLSAgICBtT3V0QnVmID0gbmV3IHVpbnQ4X3RbbU91dEJ1ZlNpemVdOwotCi0gICAgaW5pdEluZmxhdGVTdGF0ZSgpOwotfQotCi0vKgotICogU3RyZWFtaW5nIGFjY2VzcyB0byBjb21wcmVzc2VkIGRhdGEgaGVsZCBpbiBhbiBtbWFwcGVkIHJlZ2lvbiBvZiBtZW1vcnkKLSAqLwotU3RyZWFtaW5nWmlwSW5mbGF0ZXI6OlN0cmVhbWluZ1ppcEluZmxhdGVyKEZpbGVNYXAqIGRhdGFNYXAsIHNpemVfdCB1bmNvbXBTaXplKSB7Ci0gICAgbUZkID0gLTE7Ci0gICAgbURhdGFNYXAgPSBkYXRhTWFwOwotICAgIG1PdXRUb3RhbFNpemUgPSB1bmNvbXBTaXplOwotICAgIG1JblRvdGFsU2l6ZSA9IGRhdGFNYXAtPmdldERhdGFMZW5ndGgoKTsKLQotICAgIG1JbkJ1ZiA9ICh1aW50OF90KikgZGF0YU1hcC0+Z2V0RGF0YVB0cigpOwotICAgIG1JbkJ1ZlNpemUgPSBtSW5Ub3RhbFNpemU7Ci0KLSAgICBtT3V0QnVmU2l6ZSA9IFN0cmVhbWluZ1ppcEluZmxhdGVyOjpPVVRQVVRfQ0hVTktfU0laRTsKLSAgICBtT3V0QnVmID0gbmV3IHVpbnQ4X3RbbU91dEJ1ZlNpemVdOwotCi0gICAgaW5pdEluZmxhdGVTdGF0ZSgpOwotfQotCi1TdHJlYW1pbmdaaXBJbmZsYXRlcjo6flN0cmVhbWluZ1ppcEluZmxhdGVyKCkgewotICAgIC8vIHRlYXIgZG93biB0aGUgaW4tZmxpZ2h0IHppcCBzdGF0ZSBqdXN0IGluIGNhc2UKLSAgICA6OmluZmxhdGVFbmQoJm1JbmZsYXRlU3RhdGUpOwotCi0gICAgaWYgKG1EYXRhTWFwID09IE5VTEwpIHsKLSAgICAgICAgZGVsZXRlIFtdIG1JbkJ1ZjsKLSAgICB9Ci0gICAgZGVsZXRlIFtdIG1PdXRCdWY7Ci19Ci0KLXZvaWQgU3RyZWFtaW5nWmlwSW5mbGF0ZXI6OmluaXRJbmZsYXRlU3RhdGUoKSB7Ci0gICAgQUxPR1YoIkluaXRpYWxpemluZyBpbmZsYXRlIHN0YXRlIik7Ci0KLSAgICBtZW1zZXQoJm1JbmZsYXRlU3RhdGUsIDAsIHNpemVvZihtSW5mbGF0ZVN0YXRlKSk7Ci0gICAgbUluZmxhdGVTdGF0ZS56YWxsb2MgPSBaX05VTEw7Ci0gICAgbUluZmxhdGVTdGF0ZS56ZnJlZSA9IFpfTlVMTDsKLSAgICBtSW5mbGF0ZVN0YXRlLm9wYXF1ZSA9IFpfTlVMTDsKLSAgICBtSW5mbGF0ZVN0YXRlLm5leHRfaW4gPSAoQnl0ZWYqKW1JbkJ1ZjsKLSAgICBtSW5mbGF0ZVN0YXRlLm5leHRfb3V0ID0gKEJ5dGVmKikgbU91dEJ1ZjsKLSAgICBtSW5mbGF0ZVN0YXRlLmF2YWlsX291dCA9IG1PdXRCdWZTaXplOwotICAgIG1JbmZsYXRlU3RhdGUuZGF0YV90eXBlID0gWl9VTktOT1dOOwotCi0gICAgbU91dExhc3REZWNvZGVkID0gbU91dERlbGl2ZXJhYmxlID0gbU91dEN1clBvc2l0aW9uID0gMDsKLSAgICBtSW5OZXh0Q2h1bmtPZmZzZXQgPSAwOwotICAgIG1TdHJlYW1OZWVkc0luaXQgPSB0cnVlOwotCi0gICAgaWYgKG1EYXRhTWFwID09IE5VTEwpIHsKLSAgICAgICAgOjpsc2VlayhtRmQsIG1JbkZpbGVTdGFydCwgU0VFS19TRVQpOwotICAgICAgICBtSW5mbGF0ZVN0YXRlLmF2YWlsX2luID0gMDsgLy8gc2V0IHdoZW4gYSBjaHVuayBpcyByZWFkIGluCi0gICAgfSBlbHNlIHsKLSAgICAgICAgbUluZmxhdGVTdGF0ZS5hdmFpbF9pbiA9IG1JbkJ1ZlNpemU7Ci0gICAgfQotfQotCi0vKgotICogQmFzaWMgYXBwcm9hY2g6Ci0gKgotICogMS4gSWYgd2UgaGF2ZSB1bmRlbGl2ZXJlZCB1bmNvbXByZXNzZWQgZGF0YSwgc2VuZCBpdC4gIEF0IHRoaXMgcG9pbnQKLSAqICAgIGVpdGhlciB3ZSd2ZSBzYXRpc2ZpZWQgdGhlIHJlcXVlc3QsIG9yIHdlJ3ZlIGV4aGF1c3RlZCB0aGUgYXZhaWxhYmxlCi0gKiAgICBvdXRwdXQgZGF0YSBpbiBtT3V0QnVmLgotICoKLSAqIDIuIFdoaWxlIHdlIGhhdmVuJ3Qgc2VudCBlbm91Z2ggZGF0YSB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0OgotICogICAgMC4gaWYgdGhlIHJlcXVlc3QgaXMgZm9yIG1vcmUgZGF0YSB0aGFuIGV4aXN0cywgYmFpbC4KLSAqICAgIGEuIGlmIHRoZXJlIGlzIG5vIGlucHV0IGRhdGEgdG8gZGVjb2RlLCByZWFkIHNvbWUgaW50byB0aGUgaW5wdXQgYnVmZmVyCi0gKiAgICAgICBhbmQgcmVhZGp1c3QgdGhlIHpfc3RyZWFtIGlucHV0IHBvaW50ZXJzCi0gKiAgICBiLiBwb2ludCB0aGUgb3V0cHV0IHRvIHRoZSBzdGFydCBvZiB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgZGVjb2RlIHdoYXQgd2UgY2FuCi0gKiAgICBjLiBkZWxpdmVyIHdoYXRldmVyIG91dHB1dCBkYXRhIHdlIGNhbgotICovCi1zc2l6ZV90IFN0cmVhbWluZ1ppcEluZmxhdGVyOjpyZWFkKHZvaWQqIG91dEJ1Ziwgc2l6ZV90IGNvdW50KSB7Ci0gICAgdWludDhfdCogZGVzdCA9ICh1aW50OF90Kikgb3V0QnVmOwotICAgIHNpemVfdCBieXRlc1JlYWQgPSAwOwotICAgIHNpemVfdCB0b1JlYWQgPSBtaW5fb2YoY291bnQsIHNpemVfdChtT3V0VG90YWxTaXplIC0gbU91dEN1clBvc2l0aW9uKSk7Ci0gICAgd2hpbGUgKHRvUmVhZCA+IDApIHsKLSAgICAgICAgLy8gRmlyc3QsIHdyaXRlIGZyb20gd2hhdGV2ZXIgd2UgYWxyZWFkeSBoYXZlIGRlY29kZWQgYW5kIHJlYWR5IHRvIGdvCi0gICAgICAgIHNpemVfdCBkZWxpdmVyYWJsZSA9IG1pbl9vZih0b1JlYWQsIG1PdXRMYXN0RGVjb2RlZCAtIG1PdXREZWxpdmVyYWJsZSk7Ci0gICAgICAgIGlmIChkZWxpdmVyYWJsZSA+IDApIHsKLSAgICAgICAgICAgIGlmIChvdXRCdWYgIT0gTlVMTCkgbWVtY3B5KGRlc3QsIG1PdXRCdWYgKyBtT3V0RGVsaXZlcmFibGUsIGRlbGl2ZXJhYmxlKTsKLSAgICAgICAgICAgIG1PdXREZWxpdmVyYWJsZSArPSBkZWxpdmVyYWJsZTsKLSAgICAgICAgICAgIG1PdXRDdXJQb3NpdGlvbiArPSBkZWxpdmVyYWJsZTsKLSAgICAgICAgICAgIGRlc3QgKz0gZGVsaXZlcmFibGU7Ci0gICAgICAgICAgICBieXRlc1JlYWQgKz0gZGVsaXZlcmFibGU7Ci0gICAgICAgICAgICB0b1JlYWQgLT0gZGVsaXZlcmFibGU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBuZWVkIG1vcmUgZGF0YT8gIHRpbWUgdG8gZGVjb2RlIHNvbWUuCi0gICAgICAgIGlmICh0b1JlYWQgPiAwKSB7Ci0gICAgICAgICAgICAvLyBpZiB3ZSBkb24ndCBoYXZlIGFueSBkYXRhIHRvIGRlY29kZSwgcmVhZCBzb21lIGluLiAgSWYgd2UncmUgd29ya2luZwotICAgICAgICAgICAgLy8gZnJvbSBtbWFwcGVkIGRhdGEgdGhpcyB3b24ndCBoYXBwZW4sIGJlY2F1c2UgdGhlIGNsaXBwaW5nIHRvIHRvdGFsIHNpemUKLSAgICAgICAgICAgIC8vIHdpbGwgcHJldmVudCByZWFkaW5nIG9mZiB0aGUgZW5kIG9mIHRoZSBtYXBwZWQgaW5wdXQgY2h1bmsuCi0gICAgICAgICAgICBpZiAoKG1JbmZsYXRlU3RhdGUuYXZhaWxfaW4gPT0gMCkgJiYgKG1EYXRhTWFwID09IE5VTEwpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGVyciA9IHJlYWROZXh0Q2h1bmsoKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBBTE9HRSgiVW5hYmxlIHRvIGFjY2VzcyBhc3NldCBkYXRhOiAlZCIsIGVycik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbVN0cmVhbU5lZWRzSW5pdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgOjppbmZsYXRlRW5kKCZtSW5mbGF0ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXRJbmZsYXRlU3RhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gd2Uga25vdyB3ZSd2ZSBkcmFpbmVkIHdoYXRldmVyIGlzIGluIHRoZSBvdXQgYnVmZmVyIG5vdywgc28ganVzdAotICAgICAgICAgICAgLy8gc3RhcnQgZnJvbSBzY3JhdGNoIHRoZXJlLCByZWFkaW5nIGFsbCB0aGUgaW5wdXQgd2UgaGF2ZSBhdCBwcmVzZW50LgotICAgICAgICAgICAgbUluZmxhdGVTdGF0ZS5uZXh0X291dCA9IChCeXRlZiopIG1PdXRCdWY7Ci0gICAgICAgICAgICBtSW5mbGF0ZVN0YXRlLmF2YWlsX291dCA9IG1PdXRCdWZTaXplOwotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgQUxPR1YoIkluZmxhdGluZyB0byBvdXRidWY6IGF2YWlsX2luPSV1IGF2YWlsX291dD0ldSBuZXh0X2luPSVwIG5leHRfb3V0PSVwIiwKLSAgICAgICAgICAgICAgICAgICAgbUluZmxhdGVTdGF0ZS5hdmFpbF9pbiwgbUluZmxhdGVTdGF0ZS5hdmFpbF9vdXQsCi0gICAgICAgICAgICAgICAgICAgIG1JbmZsYXRlU3RhdGUubmV4dF9pbiwgbUluZmxhdGVTdGF0ZS5uZXh0X291dCk7Ci0gICAgICAgICAgICAqLwotICAgICAgICAgICAgaW50IHJlc3VsdCA9IFpfT0s7Ci0gICAgICAgICAgICBpZiAobVN0cmVhbU5lZWRzSW5pdCkgewotICAgICAgICAgICAgICAgIEFMT0dWKCJJbml0aWFsaXppbmcgemxpYiB0byBpbmZsYXRlIik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5mbGF0ZUluaXQyKCZtSW5mbGF0ZVN0YXRlLCAtTUFYX1dCSVRTKTsKLSAgICAgICAgICAgICAgICBtU3RyZWFtTmVlZHNJbml0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IFpfT0spIHJlc3VsdCA9IDo6aW5mbGF0ZSgmbUluZmxhdGVTdGF0ZSwgWl9TWU5DX0ZMVVNIKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hvb3BzLCBpbmZsYXRpb24gZmFpbGVkCi0gICAgICAgICAgICAgICAgQUxPR0UoIkVycm9yIGluZmxhdGluZyBhc3NldDogJWQiLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIDo6aW5mbGF0ZUVuZCgmbUluZmxhdGVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgaW5pdEluZmxhdGVTdGF0ZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gd2Uga25vdyB3ZSBoYXZlIHRvIGhhdmUgcmVhY2hlZCB0aGUgdGFyZ2V0IHNpemUgaGVyZSBhbmQgd2lsbAotICAgICAgICAgICAgICAgICAgICAvLyBub3QgdHJ5IHRvIHJlYWQgYW55IGZ1cnRoZXIsIHNvIGp1c3Qgd2luZCB0aGluZ3MgdXAuCi0gICAgICAgICAgICAgICAgICAgIDo6aW5mbGF0ZUVuZCgmbUluZmxhdGVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTm90ZSBob3cgbXVjaCBkYXRhIHdlIGdvdCwgYW5kIG9mZiB3ZSBnbwotICAgICAgICAgICAgICAgIG1PdXREZWxpdmVyYWJsZSA9IDA7Ci0gICAgICAgICAgICAgICAgbU91dExhc3REZWNvZGVkID0gbU91dEJ1ZlNpemUgLSBtSW5mbGF0ZVN0YXRlLmF2YWlsX291dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYnl0ZXNSZWFkOwotfQotCi1pbnQgU3RyZWFtaW5nWmlwSW5mbGF0ZXI6OnJlYWROZXh0Q2h1bmsoKSB7Ci0gICAgYXNzZXJ0KG1EYXRhTWFwID09IE5VTEwpOwotCi0gICAgaWYgKG1Jbk5leHRDaHVua09mZnNldCA8IG1JblRvdGFsU2l6ZSkgewotICAgICAgICBzaXplX3QgdG9SZWFkID0gbWluX29mKG1JbkJ1ZlNpemUsIG1JblRvdGFsU2l6ZSAtIG1Jbk5leHRDaHVua09mZnNldCk7Ci0gICAgICAgIGlmICh0b1JlYWQgPiAwKSB7Ci0gICAgICAgICAgICBzc2l6ZV90IGRpZFJlYWQgPSBURU1QX0ZBSUxVUkVfUkVUUlkoOjpyZWFkKG1GZCwgbUluQnVmLCB0b1JlYWQpKTsKLSAgICAgICAgICAgIC8vQUxPR1YoIlJlYWRpbmcgaW5wdXQgY2h1bmssIHNpemUgJTA4eCBkaWRyZWFkICUwOHgiLCB0b1JlYWQsIGRpZFJlYWQpOwotICAgICAgICAgICAgaWYgKGRpZFJlYWQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0UoIkVycm9yIHJlYWRpbmcgYXNzZXQgZGF0YTogJXMiLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgICAgIHJldHVybiBkaWRSZWFkOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtSW5OZXh0Q2h1bmtPZmZzZXQgKz0gZGlkUmVhZDsKLSAgICAgICAgICAgICAgICBtSW5mbGF0ZVN0YXRlLm5leHRfaW4gPSAoQnl0ZWYqKSBtSW5CdWY7Ci0gICAgICAgICAgICAgICAgbUluZmxhdGVTdGF0ZS5hdmFpbF9pbiA9IGRpZFJlYWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIHNlZWtpbmcgYmFja3dhcmRzIHJlcXVpcmVzIHVuY29tcHJlc3NpbmcgZm9tIHRoZSBiZWdpbm5pbmcsIHNvIGlzIHZlcnkKLS8vIGV4cGVuc2l2ZS4gIHNlZWtpbmcgZm9yd2FyZHMgb25seSByZXF1aXJlcyB1bmNvbXByZXNzaW5nIGZyb20gdGhlIGN1cnJlbnQKLS8vIHBvc2l0aW9uIHRvIHRoZSBkZXN0aW5hdGlvbi4KLW9mZjY0X3QgU3RyZWFtaW5nWmlwSW5mbGF0ZXI6OnNlZWtBYnNvbHV0ZShvZmY2NF90IGFic29sdXRlSW5wdXRQb3NpdGlvbikgewotICAgIGlmIChhYnNvbHV0ZUlucHV0UG9zaXRpb24gPCBtT3V0Q3VyUG9zaXRpb24pIHsKLSAgICAgICAgLy8gcmV3aW5kIGFuZCByZXByb2Nlc3MgdGhlIGRhdGEgZnJvbSB0aGUgYmVnaW5uaW5nCi0gICAgICAgIGlmICghbVN0cmVhbU5lZWRzSW5pdCkgewotICAgICAgICAgICAgOjppbmZsYXRlRW5kKCZtSW5mbGF0ZVN0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBpbml0SW5mbGF0ZVN0YXRlKCk7Ci0gICAgICAgIHJlYWQoTlVMTCwgYWJzb2x1dGVJbnB1dFBvc2l0aW9uKTsKLSAgICB9IGVsc2UgaWYgKGFic29sdXRlSW5wdXRQb3NpdGlvbiA+IG1PdXRDdXJQb3NpdGlvbikgewotICAgICAgICByZWFkKE5VTEwsIGFic29sdXRlSW5wdXRQb3NpdGlvbiAtIG1PdXRDdXJQb3NpdGlvbik7Ci0gICAgfQotICAgIC8vIGVsc2UgaWYgdGhlIHRhcmdldCBwb3NpdGlvbiAqaXMqIG91ciBjdXJyZW50IHBvc2l0aW9uLCBkbyBub3RoaW5nCi0gICAgcmV0dXJuIGFic29sdXRlSW5wdXRQb3NpdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvYW5kcm9pZGZ3L1ppcEZpbGVSTy5jcHAgYi9saWJzL2FuZHJvaWRmdy9aaXBGaWxlUk8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWIxOGFkLi4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L1ppcEZpbGVSTy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vCi0vLyBSZWFkLW9ubHkgYWNjZXNzIHRvIFppcCBhcmNoaXZlcywgd2l0aCBtaW5pbWFsIGhlYXAgYWxsb2NhdGlvbi4KLS8vCi0jZGVmaW5lIExPR19UQUcgInppcHJvIgotLy8jZGVmaW5lIExPR19OREVCVUcgMAotI2luY2x1ZGUgPGFuZHJvaWRmdy9aaXBGaWxlUk8uaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy9Db21wYXQuaD4KLSNpbmNsdWRlIDx1dGlscy9taXNjLmg+Ci0jaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgotI2luY2x1ZGUgPHppcGFyY2hpdmUvemlwX2FyY2hpdmUuaD4KLQotI2luY2x1ZGUgPHpsaWIuaD4KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotLyoKLSAqIFdlIG11c3Qgb3BlbiBiaW5hcnkgZmlsZXMgdXNpbmcgb3BlbihwYXRoLCAuLi4gfCBPX0JJTkFSWSkgdW5kZXIgV2luZG93cy4KLSAqIE90aGVyd2lzZSBzdHJhbmdlIHJlYWQgZXJyb3JzIHdpbGwgaGFwcGVuLgotICovCi0jaWZuZGVmIE9fQklOQVJZCi0jICBkZWZpbmUgT19CSU5BUlkgIDAKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotY2xhc3MgX1ppcEVudHJ5Uk8gewotcHVibGljOgotICAgIFppcEVudHJ5IGVudHJ5OwotICAgIFppcEVudHJ5TmFtZSBuYW1lOwotICAgIHZvaWQgKmNvb2tpZTsKLQotICAgIF9aaXBFbnRyeVJPKCkgOiBjb29raWUoTlVMTCkgewotICAgIH0KLQotcHJpdmF0ZToKLSAgICBfWmlwRW50cnlSTyhjb25zdCBfWmlwRW50cnlSTyYgb3RoZXIpOwotICAgIF9aaXBFbnRyeVJPJiBvcGVyYXRvcj0oY29uc3QgX1ppcEVudHJ5Uk8mIG90aGVyKTsKLX07Ci0KLVppcEZpbGVSTzo6flppcEZpbGVSTygpIHsKLSAgICBDbG9zZUFyY2hpdmUobUhhbmRsZSk7Ci0gICAgZnJlZShtRmlsZU5hbWUpOwotfQotCi0vKgotICogT3BlbiB0aGUgc3BlY2lmaWVkIGZpbGUgcmVhZC1vbmx5LiAgV2UgbWVtb3J5LW1hcCB0aGUgZW50aXJlIHRoaW5nIGFuZAotICogY2xvc2UgdGhlIGZpbGUgYmVmb3JlIHJldHVybmluZy4KLSAqLwotLyogc3RhdGljICovIFppcEZpbGVSTyogWmlwRmlsZVJPOjpvcGVuKGNvbnN0IGNoYXIqIHppcEZpbGVOYW1lKQotewotICAgIFppcEFyY2hpdmVIYW5kbGUgaGFuZGxlOwotICAgIGNvbnN0IGludDMyX3QgZXJyb3IgPSBPcGVuQXJjaGl2ZSh6aXBGaWxlTmFtZSwgJmhhbmRsZSk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIEFMT0dXKCJFcnJvciBvcGVuaW5nIGFyY2hpdmUgJXM6ICVzIiwgemlwRmlsZU5hbWUsIEVycm9yQ29kZVN0cmluZyhlcnJvcikpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IFppcEZpbGVSTyhoYW5kbGUsIHN0cmR1cCh6aXBGaWxlTmFtZSkpOwotfQotCi0KLVppcEVudHJ5Uk8gWmlwRmlsZVJPOjpmaW5kRW50cnlCeU5hbWUoY29uc3QgY2hhciogZW50cnlOYW1lKSBjb25zdAotewotICAgIF9aaXBFbnRyeVJPKiBkYXRhID0gbmV3IF9aaXBFbnRyeVJPOwotICAgIGNvbnN0IGludDMyX3QgZXJyb3IgPSBGaW5kRW50cnkobUhhbmRsZSwgZW50cnlOYW1lLCAmKGRhdGEtPmVudHJ5KSk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIGRlbGV0ZSBkYXRhOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBkYXRhLT5uYW1lLm5hbWUgPSBlbnRyeU5hbWU7Ci0gICAgZGF0YS0+bmFtZS5uYW1lX2xlbmd0aCA9IHN0cmxlbihlbnRyeU5hbWUpOwotCi0gICAgcmV0dXJuIChaaXBFbnRyeVJPKSBkYXRhOwotfQotCi0vKgotICogR2V0IHRoZSB1c2VmdWwgZmllbGRzIGZyb20gdGhlIHppcCBlbnRyeS4KLSAqCi0gKiBSZXR1cm5zICJmYWxzZSIgaWYgdGhlIG9mZnNldHMgdG8gdGhlIGZpZWxkcyBvciB0aGUgY29udGVudHMgb2YgdGhlIGZpZWxkcwotICogYXBwZWFyIHRvIGJlIGJvZ3VzLgotICovCi1ib29sIFppcEZpbGVSTzo6Z2V0RW50cnlJbmZvKFppcEVudHJ5Uk8gZW50cnksIGludCogcE1ldGhvZCwgc2l6ZV90KiBwVW5jb21wTGVuLAotICAgIHNpemVfdCogcENvbXBMZW4sIG9mZjY0X3QqIHBPZmZzZXQsIGxvbmcqIHBNb2RXaGVuLCBsb25nKiBwQ3JjMzIpIGNvbnN0Ci17Ci0gICAgY29uc3QgX1ppcEVudHJ5Uk8qIHppcEVudHJ5ID0gcmVpbnRlcnByZXRfY2FzdDxfWmlwRW50cnlSTyo+KGVudHJ5KTsKLSAgICBjb25zdCBaaXBFbnRyeSYgemUgPSB6aXBFbnRyeS0+ZW50cnk7Ci0KLSAgICBpZiAocE1ldGhvZCAhPSBOVUxMKSB7Ci0gICAgICAgICpwTWV0aG9kID0gemUubWV0aG9kOwotICAgIH0KLSAgICBpZiAocFVuY29tcExlbiAhPSBOVUxMKSB7Ci0gICAgICAgICpwVW5jb21wTGVuID0gemUudW5jb21wcmVzc2VkX2xlbmd0aDsKLSAgICB9Ci0gICAgaWYgKHBDb21wTGVuICE9IE5VTEwpIHsKLSAgICAgICAgKnBDb21wTGVuID0gemUuY29tcHJlc3NlZF9sZW5ndGg7Ci0gICAgfQotICAgIGlmIChwT2Zmc2V0ICE9IE5VTEwpIHsKLSAgICAgICAgKnBPZmZzZXQgPSB6ZS5vZmZzZXQ7Ci0gICAgfQotICAgIGlmIChwTW9kV2hlbiAhPSBOVUxMKSB7Ci0gICAgICAgICpwTW9kV2hlbiA9IHplLm1vZF90aW1lOwotICAgIH0KLSAgICBpZiAocENyYzMyICE9IE5VTEwpIHsKLSAgICAgICAgKnBDcmMzMiA9IHplLmNyYzMyOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFppcEZpbGVSTzo6c3RhcnRJdGVyYXRpb24odm9pZCoqIGNvb2tpZSkKLXsKLSAgICBfWmlwRW50cnlSTyogemUgPSBuZXcgX1ppcEVudHJ5Uk87Ci0gICAgaW50MzJfdCBlcnJvciA9IFN0YXJ0SXRlcmF0aW9uKG1IYW5kbGUsICYoemUtPmNvb2tpZSksIE5VTEwgLyogcHJlZml4ICovKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgQUxPR1coIkNvdWxkIG5vdCBzdGFydCBpdGVyYXRpb24gb3ZlciAlczogJXMiLCBtRmlsZU5hbWUsIEVycm9yQ29kZVN0cmluZyhlcnJvcikpOwotICAgICAgICBkZWxldGUgemU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAqY29va2llID0gemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVppcEVudHJ5Uk8gWmlwRmlsZVJPOjpuZXh0RW50cnkodm9pZCogY29va2llKQotewotICAgIF9aaXBFbnRyeVJPKiB6ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X1ppcEVudHJ5Uk8qPihjb29raWUpOwotICAgIGludDMyX3QgZXJyb3IgPSBOZXh0KHplLT5jb29raWUsICYoemUtPmVudHJ5KSwgJih6ZS0+bmFtZSkpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBpZiAoZXJyb3IgIT0gLTEpIHsKLSAgICAgICAgICAgIEFMT0dXKCJFcnJvciBpdGVyYXRpb24gb3ZlciAlczogJXMiLCBtRmlsZU5hbWUsIEVycm9yQ29kZVN0cmluZyhlcnJvcikpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiAmKHplLT5lbnRyeSk7Ci19Ci0KLXZvaWQgWmlwRmlsZVJPOjplbmRJdGVyYXRpb24odm9pZCogY29va2llKQotewotICAgIGRlbGV0ZSByZWludGVycHJldF9jYXN0PF9aaXBFbnRyeVJPKj4oY29va2llKTsKLX0KLQotdm9pZCBaaXBGaWxlUk86OnJlbGVhc2VFbnRyeShaaXBFbnRyeVJPIGVudHJ5KSBjb25zdAotewotICAgIGRlbGV0ZSByZWludGVycHJldF9jYXN0PF9aaXBFbnRyeVJPKj4oZW50cnkpOwotfQotCi0vKgotICogQ29weSB0aGUgZW50cnkncyBmaWxlbmFtZSB0byB0aGUgYnVmZmVyLgotICovCi1pbnQgWmlwRmlsZVJPOjpnZXRFbnRyeUZpbGVOYW1lKFppcEVudHJ5Uk8gZW50cnksIGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZkxlbikKLSAgICBjb25zdAotewotICAgIGNvbnN0IF9aaXBFbnRyeVJPKiB6aXBFbnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X1ppcEVudHJ5Uk8qPihlbnRyeSk7Ci0gICAgY29uc3QgdWludDE2X3QgcmVxdWlyZWRTaXplID0gemlwRW50cnktPm5hbWUubmFtZV9sZW5ndGggKyAxOwotCi0gICAgaWYgKGJ1ZkxlbiA8IHJlcXVpcmVkU2l6ZSkgewotICAgICAgICBBTE9HVygiQnVmZmVyIHRvbyBzaG9ydCwgcmVxdWlyZXMgJWQgYnl0ZXMgZm9yIGVudHJ5IG5hbWUiLCByZXF1aXJlZFNpemUpOwotICAgICAgICByZXR1cm4gcmVxdWlyZWRTaXplOwotICAgIH0KLQotICAgIG1lbWNweShidWZmZXIsIHppcEVudHJ5LT5uYW1lLm5hbWUsIHJlcXVpcmVkU2l6ZSAtIDEpOwotICAgIGJ1ZmZlcltyZXF1aXJlZFNpemUgLSAxXSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIG5ldyBGaWxlTWFwIG9iamVjdCB0aGF0IHNwYW5zIHRoZSBkYXRhIGluICJlbnRyeSIuCi0gKi8KLUZpbGVNYXAqIFppcEZpbGVSTzo6Y3JlYXRlRW50cnlGaWxlTWFwKFppcEVudHJ5Uk8gZW50cnkpIGNvbnN0Ci17Ci0gICAgY29uc3QgX1ppcEVudHJ5Uk8gKnppcEVudHJ5ID0gcmVpbnRlcnByZXRfY2FzdDxfWmlwRW50cnlSTyo+KGVudHJ5KTsKLSAgICBjb25zdCBaaXBFbnRyeSYgemUgPSB6aXBFbnRyeS0+ZW50cnk7Ci0gICAgaW50IGZkID0gR2V0RmlsZURlc2NyaXB0b3IobUhhbmRsZSk7Ci0gICAgc2l6ZV90IGFjdHVhbExlbiA9IDA7Ci0KLSAgICBpZiAoemUubWV0aG9kID09IGtDb21wcmVzc1N0b3JlZCkgewotICAgICAgICBhY3R1YWxMZW4gPSB6ZS51bmNvbXByZXNzZWRfbGVuZ3RoOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFjdHVhbExlbiA9IHplLmNvbXByZXNzZWRfbGVuZ3RoOwotICAgIH0KLQotICAgIEZpbGVNYXAqIG5ld01hcCA9IG5ldyBGaWxlTWFwKCk7Ci0gICAgaWYgKCFuZXdNYXAtPmNyZWF0ZShtRmlsZU5hbWUsIGZkLCB6ZS5vZmZzZXQsIGFjdHVhbExlbiwgdHJ1ZSkpIHsKLSAgICAgICAgbmV3TWFwLT5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiBuZXdNYXA7Ci19Ci0KLS8qCi0gKiBVbmNvbXByZXNzIGFuIGVudHJ5LCBpbiBpdHMgZW50aXJldHksIGludG8gdGhlIHByb3ZpZGVkIG91dHB1dCBidWZmZXIuCi0gKgotICogVGhpcyBkb2Vzbid0IHZlcmlmeSB0aGUgZGF0YSdzIENSQywgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGZvcgotICogdW5jb21wcmVzc2VkIGRhdGEuICBUaGUgY2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIG1hbmFnZSBpdC4KLSAqLwotYm9vbCBaaXBGaWxlUk86OnVuY29tcHJlc3NFbnRyeShaaXBFbnRyeVJPIGVudHJ5LCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKSBjb25zdAotewotICAgIF9aaXBFbnRyeVJPICp6aXBFbnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X1ppcEVudHJ5Uk8qPihlbnRyeSk7Ci0gICAgY29uc3QgaW50MzJfdCBlcnJvciA9IEV4dHJhY3RUb01lbW9yeShtSGFuZGxlLCAmKHppcEVudHJ5LT5lbnRyeSksCi0gICAgICAgICh1aW50OF90KikgYnVmZmVyLCBzaXplKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgQUxPR1coIkV4dHJhY3RUb01lbW9yeSBmYWlsZWQgd2l0aCAlcyIsIEVycm9yQ29kZVN0cmluZyhlcnJvcikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBVbmNvbXByZXNzIGFuIGVudHJ5LCBpbiBpdHMgZW50aXJldHksIHRvIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgotICoKLSAqIFRoaXMgZG9lc24ndCB2ZXJpZnkgdGhlIGRhdGEncyBDUkMsIGJ1dCBwcm9iYWJseSBzaG91bGQuCi0gKi8KLWJvb2wgWmlwRmlsZVJPOjp1bmNvbXByZXNzRW50cnkoWmlwRW50cnlSTyBlbnRyeSwgaW50IGZkKSBjb25zdAotewotICAgIF9aaXBFbnRyeVJPICp6aXBFbnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X1ppcEVudHJ5Uk8qPihlbnRyeSk7Ci0gICAgY29uc3QgaW50MzJfdCBlcnJvciA9IEV4dHJhY3RFbnRyeVRvRmlsZShtSGFuZGxlLCAmKHppcEVudHJ5LT5lbnRyeSksIGZkKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgQUxPR1coIkV4dHJhY3RUb01lbW9yeSBmYWlsZWQgd2l0aCAlcyIsIEVycm9yQ29kZVN0cmluZyhlcnJvcikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19CmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9aaXBVdGlscy5jcHAgYi9saWJzL2FuZHJvaWRmdy9aaXBVdGlscy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YWMyZmUuLjAwMDAwMDAKLS0tIGEvbGlicy9hbmRyb2lkZncvWmlwVXRpbHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLwotLy8gTWlzYyB6aXAvZ3ppcCB1dGlsaXR5IGZ1bmN0aW9ucy4KLS8vCi0KLSNkZWZpbmUgTE9HX1RBRyAiemlwdXRpbCIKLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9aaXBVdGlscy5oPgotI2luY2x1ZGUgPGFuZHJvaWRmdy9aaXBGaWxlUk8uaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy9Db21wYXQuaD4KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi0jaW5jbHVkZSA8emxpYi5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldDRMRShjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYpIHsKLSAgICByZXR1cm4gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KSB8IChidWZbMl0gPDwgMTYpIHwgKGJ1ZlszXSA8PCAyNCk7Ci19Ci0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcga1JlYWRCdWZTaXplID0gMzI3Njg7Ci0KLS8qCi0gKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgZXhwYW5kcyB6aXAvZ3ppcCAiZGVmbGF0ZSIgY29tcHJlc3NlZCBkYXRhCi0gKiBpbnRvIGEgYnVmZmVyLgotICoKLSAqIChUaGlzIGlzIGEgY2xvbmUgb2YgdGhlIHByZXZpb3VzIGZ1bmN0aW9uLCBidXQgaXQgdGFrZXMgYSBGSUxFKiBpbnN0ZWFkCi0gKiBvZiBhbiBmZC4gIFdlIGNvdWxkIHBhc3MgZmlsZW5vKGZkKSB0byB0aGUgYWJvdmUsIGJ1dCB3ZSBjYW4gcnVuIGludG8KLSAqIHRyb3VibGUgd2hlbiAiZnAiIGhhcyBhIGRpZmZlcmVudCBub3Rpb24gb2Ygd2hhdCBmZCdzIGZpbGUgcG9zaXRpb24gaXMuKQotICoKLSAqICJmcCIgaXMgYW4gb3BlbiBmaWxlIHBvc2l0aW9uZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSAiZGVmbGF0ZSIgZGF0YQotICogImJ1ZiIgbXVzdCBob2xkIGF0IGxlYXN0ICJ1bmNvbXByZXNzZWRMZW4iIGJ5dGVzLgotICovCi0vKnN0YXRpYyovIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgaW5mbGF0ZVRvQnVmZmVyKFQmIHJlYWRlciwgdm9pZCogYnVmLAotICAgIGxvbmcgdW5jb21wcmVzc2VkTGVuLCBsb25nIGNvbXByZXNzZWRMZW4pCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLQotICAgIHpfc3RyZWFtIHpzdHJlYW07Ci0gICAgaW50IHplcnI7Ci0gICAgdW5zaWduZWQgbG9uZyBjb21wUmVtYWluaW5nOwotCi0gICAgYXNzZXJ0KHVuY29tcHJlc3NlZExlbiA+PSAwKTsKLSAgICBhc3NlcnQoY29tcHJlc3NlZExlbiA+PSAwKTsKLQotICAgIGNvbXBSZW1haW5pbmcgPSBjb21wcmVzc2VkTGVuOwotCi0gICAgLyoKLSAgICAgKiBJbml0aWFsaXplIHRoZSB6bGliIHN0cmVhbS4KLSAgICAgKi8KLSAgICBtZW1zZXQoJnpzdHJlYW0sIDAsIHNpemVvZih6c3RyZWFtKSk7Ci0gICAgenN0cmVhbS56YWxsb2MgPSBaX05VTEw7Ci0gICAgenN0cmVhbS56ZnJlZSA9IFpfTlVMTDsKLSAgICB6c3RyZWFtLm9wYXF1ZSA9IFpfTlVMTDsKLSAgICB6c3RyZWFtLm5leHRfaW4gPSBOVUxMOwotICAgIHpzdHJlYW0uYXZhaWxfaW4gPSAwOwotICAgIHpzdHJlYW0ubmV4dF9vdXQgPSAoQnl0ZWYqKSBidWY7Ci0gICAgenN0cmVhbS5hdmFpbF9vdXQgPSB1bmNvbXByZXNzZWRMZW47Ci0gICAgenN0cmVhbS5kYXRhX3R5cGUgPSBaX1VOS05PV047Ci0KLSAgICAvKgotICAgICAqIFVzZSB0aGUgdW5kb2N1bWVudGVkICJuZWdhdGl2ZSB3aW5kb3cgYml0cyIgZmVhdHVyZSB0byB0ZWxsIHpsaWIKLSAgICAgKiB0aGF0IHRoZXJlJ3Mgbm8gemxpYiBoZWFkZXIgd2FpdGluZyBmb3IgaXQuCi0gICAgICovCi0gICAgemVyciA9IGluZmxhdGVJbml0MigmenN0cmVhbSwgLU1BWF9XQklUUyk7Ci0gICAgaWYgKHplcnIgIT0gWl9PSykgewotICAgICAgICBpZiAoemVyciA9PSBaX1ZFUlNJT05fRVJST1IpIHsKLSAgICAgICAgICAgIEFMT0dFKCJJbnN0YWxsZWQgemxpYiBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGxpbmtlZCB2ZXJzaW9uICglcylcbiIsCi0gICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFMT0dFKCJDYWxsIHRvIGluZmxhdGVJbml0MiBmYWlsZWQgKHplcnI9JWQpXG4iLCB6ZXJyKTsKLSAgICAgICAgfQotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBMb29wIHdoaWxlIHdlIGhhdmUgZGF0YS4KLSAgICAgKi8KLSAgICBkbyB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZ2V0U2l6ZTsKLQotICAgICAgICAvKiByZWFkIGFzIG11Y2ggYXMgd2UgY2FuICovCi0gICAgICAgIGlmICh6c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgICAgIGdldFNpemUgPSAoY29tcFJlbWFpbmluZyA+IGtSZWFkQnVmU2l6ZSkgPwotICAgICAgICAgICAgICAgICAgICAgICAga1JlYWRCdWZTaXplIDogY29tcFJlbWFpbmluZzsKLSAgICAgICAgICAgIEFMT0dWKCIrKysgcmVhZGluZyAlbGQgYnl0ZXMgKCVsZCBsZWZ0KVxuIiwKLSAgICAgICAgICAgICAgICBnZXRTaXplLCBjb21wUmVtYWluaW5nKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogbmV4dEJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIG5leHRTaXplID0gcmVhZGVyLnJlYWQoJm5leHRCdWZmZXIsIGdldFNpemUpOwotCi0gICAgICAgICAgICBpZiAobmV4dFNpemUgPCBnZXRTaXplIHx8IG5leHRCdWZmZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIEFMT0dEKCJpbmZsYXRlIHJlYWQgZmFpbGVkICglbGQgdnMgJWxkKVxuIiwgbmV4dFNpemUsIGdldFNpemUpOwotICAgICAgICAgICAgICAgIGdvdG8gel9iYWlsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb21wUmVtYWluaW5nIC09IG5leHRTaXplOwotCi0gICAgICAgICAgICB6c3RyZWFtLm5leHRfaW4gPSBuZXh0QnVmZmVyOwotICAgICAgICAgICAgenN0cmVhbS5hdmFpbF9pbiA9IG5leHRTaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogdW5jb21wcmVzcyB0aGUgZGF0YSAqLwotICAgICAgICB6ZXJyID0gaW5mbGF0ZSgmenN0cmVhbSwgWl9OT19GTFVTSCk7Ci0gICAgICAgIGlmICh6ZXJyICE9IFpfT0sgJiYgemVyciAhPSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAgICAgIEFMT0dEKCJ6bGliIGluZmxhdGUgY2FsbCBmYWlsZWQgKHplcnI9JWQpXG4iLCB6ZXJyKTsKLSAgICAgICAgICAgIGdvdG8gel9iYWlsOwotICAgICAgICB9Ci0KLQkJLyogb3V0cHV0IGJ1ZmZlciBob2xkcyBhbGwsIHNvIG5vIG5lZWQgdG8gd3JpdGUgdGhlIG91dHB1dCAqLwotICAgIH0gd2hpbGUgKHplcnIgPT0gWl9PSyk7Ci0KLSAgICBhc3NlcnQoemVyciA9PSBaX1NUUkVBTV9FTkQpOyAgICAgICAvKiBvdGhlciBlcnJvcnMgc2hvdWxkJ3ZlIGJlZW4gY2F1Z2h0ICovCi0KLSAgICBpZiAoKGxvbmcpIHpzdHJlYW0udG90YWxfb3V0ICE9IHVuY29tcHJlc3NlZExlbikgewotICAgICAgICBBTE9HVygiU2l6ZSBtaXNtYXRjaCBvbiBpbmZsYXRlZCBmaWxlICglbGQgdnMgJWxkKVxuIiwKLSAgICAgICAgICAgIHpzdHJlYW0udG90YWxfb3V0LCB1bmNvbXByZXNzZWRMZW4pOwotICAgICAgICBnb3RvIHpfYmFpbDsKLSAgICB9Ci0KLSAgICAvLyBzdWNjZXNzIQotICAgIHJlc3VsdCA9IHRydWU7Ci0KLXpfYmFpbDoKLSAgICBpbmZsYXRlRW5kKCZ6c3RyZWFtKTsgICAgICAgIC8qIGZyZWUgdXAgYW55IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzICovCi0KLWJhaWw6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotY2xhc3MgRmlsZVJlYWRlciB7Ci1wdWJsaWM6Ci0gICBGaWxlUmVhZGVyKEZJTEUqIGZwKSA6Ci0gICAgICAgbUZwKGZwKSwgbVJlYWRCdWYobmV3IHVuc2lnbmVkIGNoYXJba1JlYWRCdWZTaXplXSkKLSAgIHsKLSAgIH0KLQotICAgfkZpbGVSZWFkZXIoKSB7Ci0gICAgICAgZGVsZXRlW10gbVJlYWRCdWY7Ci0gICB9Ci0KLSAgIGxvbmcgcmVhZCh1bnNpZ25lZCBjaGFyKiogbmV4dEJ1ZmZlciwgbG9uZyByZWFkU2l6ZSkgY29uc3QgewotICAgICAgICpuZXh0QnVmZmVyID0gbVJlYWRCdWY7Ci0gICAgICAgcmV0dXJuIGZyZWFkKG1SZWFkQnVmLCAxLCByZWFkU2l6ZSwgbUZwKTsKLSAgIH0KLQotICAgRklMRSogbUZwOwotICAgdW5zaWduZWQgY2hhciogbVJlYWRCdWY7Ci19OwotCi1jbGFzcyBGZFJlYWRlciB7Ci1wdWJsaWM6Ci0gICBGZFJlYWRlcihpbnQgZmQpIDoKLSAgICAgICBtRmQoZmQpLCBtUmVhZEJ1ZihuZXcgdW5zaWduZWQgY2hhcltrUmVhZEJ1ZlNpemVdKQotICAgewotICAgfQotCi0gICB+RmRSZWFkZXIoKSB7Ci0gICAgICAgZGVsZXRlW10gbVJlYWRCdWY7Ci0gICB9Ci0KLSAgIGxvbmcgcmVhZCh1bnNpZ25lZCBjaGFyKiogbmV4dEJ1ZmZlciwgbG9uZyByZWFkU2l6ZSkgY29uc3QgewotICAgICAgICpuZXh0QnVmZmVyID0gbVJlYWRCdWY7Ci0gICAgICAgcmV0dXJuIFRFTVBfRkFJTFVSRV9SRVRSWSg6OnJlYWQobUZkLCBtUmVhZEJ1ZiwgcmVhZFNpemUpKTsKLSAgIH0KLQotICAgaW50IG1GZDsKLSAgIHVuc2lnbmVkIGNoYXIqIG1SZWFkQnVmOwotfTsKLQotY2xhc3MgQnVmZmVyUmVhZGVyIHsKLXB1YmxpYzoKLSAgICBCdWZmZXJSZWFkZXIodm9pZCogaW5wdXQsIHNpemVfdCBpbnB1dFNpemUpIDoKLSAgICAgICAgbUlucHV0KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGlucHV0KSksCi0gICAgICAgIG1JbnB1dFNpemUoaW5wdXRTaXplKSwKLSAgICAgICAgbUJ1ZmZlclJldHVybmVkKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBsb25nIHJlYWQodW5zaWduZWQgY2hhcioqIG5leHRCdWZmZXIsIGxvbmcgcmVhZFNpemUpIHsKLSAgICAgICAgaWYgKCFtQnVmZmVyUmV0dXJuZWQpIHsKLSAgICAgICAgICAgIG1CdWZmZXJSZXR1cm5lZCA9IHRydWU7Ci0gICAgICAgICAgICAqbmV4dEJ1ZmZlciA9IG1JbnB1dDsKLSAgICAgICAgICAgIHJldHVybiBtSW5wdXRTaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgKm5leHRCdWZmZXIgPSBOVUxMOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBtSW5wdXQ7Ci0gICAgY29uc3Qgc2l6ZV90IG1JbnB1dFNpemU7Ci0gICAgYm9vbCBtQnVmZmVyUmV0dXJuZWQ7Ci19OwotCi0vKnN0YXRpYyovIGJvb2wgWmlwVXRpbHM6OmluZmxhdGVUb0J1ZmZlcihGSUxFKiBmcCwgdm9pZCogYnVmLAotICAgIGxvbmcgdW5jb21wcmVzc2VkTGVuLCBsb25nIGNvbXByZXNzZWRMZW4pCi17Ci0gICAgRmlsZVJlYWRlciByZWFkZXIoZnApOwotICAgIHJldHVybiA6OmluZmxhdGVUb0J1ZmZlcjxGaWxlUmVhZGVyPihyZWFkZXIsIGJ1ZiwKLSAgICAgICAgdW5jb21wcmVzc2VkTGVuLCBjb21wcmVzc2VkTGVuKTsKLX0KLQotLypzdGF0aWMqLyBib29sIFppcFV0aWxzOjppbmZsYXRlVG9CdWZmZXIoaW50IGZkLCB2b2lkKiBidWYsCi0gICAgbG9uZyB1bmNvbXByZXNzZWRMZW4sIGxvbmcgY29tcHJlc3NlZExlbikKLXsKLSAgICBGZFJlYWRlciByZWFkZXIoZmQpOwotICAgIHJldHVybiA6OmluZmxhdGVUb0J1ZmZlcjxGZFJlYWRlcj4ocmVhZGVyLCBidWYsCi0gICAgICAgIHVuY29tcHJlc3NlZExlbiwgY29tcHJlc3NlZExlbik7Ci19Ci0KLS8qc3RhdGljKi8gYm9vbCBaaXBVdGlsczo6aW5mbGF0ZVRvQnVmZmVyKHZvaWQqIGluLCB2b2lkKiBidWYsCi0gICAgbG9uZyB1bmNvbXByZXNzZWRMZW4sIGxvbmcgY29tcHJlc3NlZExlbikKLXsKLSAgICBCdWZmZXJSZWFkZXIgcmVhZGVyKGluLCBjb21wcmVzc2VkTGVuKTsKLSAgICByZXR1cm4gOjppbmZsYXRlVG9CdWZmZXI8QnVmZmVyUmVhZGVyPihyZWFkZXIsIGJ1ZiwKLSAgICAgICAgdW5jb21wcmVzc2VkTGVuLCBjb21wcmVzc2VkTGVuKTsKLX0KLQotCi0KLS8qCi0gKiBMb29rIGF0IHRoZSBjb250ZW50cyBvZiBhIGd6aXAgYXJjaGl2ZS4gIFdlIHdhbnQgdG8ga25vdyB3aGVyZSB0aGUKLSAqIGRhdGEgc3RhcnRzLCBhbmQgaG93IGxvbmcgaXQgd2lsbCBiZSBhZnRlciBpdCBpcyB1bmNvbXByZXNzZWQuCi0gKgotICogV2UgZXhwZWN0IHRvIGZpbmQgdGhlIENSQyBhbmQgbGVuZ3RoIGFzIHRoZSBsYXN0IDggYnl0ZXMgb24gdGhlIGZpbGUuCi0gKiBUaGlzIGlzIGEgcHJldHR5IHJlYXNvbmFibGUgdGhpbmcgdG8gZXhwZWN0IGZvciBsb2NhbGx5LWNvbXByZXNzZWQKLSAqIGZpbGVzLCBidXQgdGhlcmUncyBhIHNtYWxsIGNoYW5jZSB0aGF0IHNvbWUgZXh0cmEgcGFkZGluZyBnb3QgdGhyb3duCi0gKiBvbiAodGhlIG1hbiBwYWdlIHRhbGtzIGFib3V0IGNvbXByZXNzZWQgZGF0YSB3cml0dGVuIHRvIHRhcGUpLiAgV2UKLSAqIGRvbid0IGN1cnJlbnRseSBkZWFsIHdpdGggdGhhdCBoZXJlLiAgSWYgImd6aXAgLWwiIHdoaW5lcywgd2UncmUgZ29pbmcKLSAqIHRvIGZhaWwgdG9vLgotICoKLSAqIE9uIGV4aXQsICJmcCIgaXMgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuCi0gKi8KLS8qc3RhdGljKi8gYm9vbCBaaXBVdGlsczo6ZXhhbWluZUd6aXAoRklMRSogZnAsIGludCogcENvbXByZXNzaW9uTWV0aG9kLAotICAgIGxvbmcqIHBVbmNvbXByZXNzZWRMZW4sIGxvbmcqIHBDb21wcmVzc2VkTGVuLCB1bnNpZ25lZCBsb25nKiBwQ1JDMzIpCi17Ci0gICAgZW51bSB7ICAvLyBmbGFncwotICAgICAgICBGVEVYVCAgICAgICA9IDB4MDEsCi0gICAgICAgIEZIQ1JDICAgICAgID0gMHgwMiwKLSAgICAgICAgRkVYVFJBICAgICAgPSAweDA0LAotICAgICAgICBGTkFNRSAgICAgICA9IDB4MDgsCi0gICAgICAgIEZDT01NRU5UICAgID0gMHgxMCwKLSAgICB9OwotICAgIGludCBpYzsKLSAgICBpbnQgbWV0aG9kLCBmbGFnczsKLSAgICBpbnQgaTsKLQotICAgIGljID0gZ2V0YyhmcCk7Ci0gICAgaWYgKGljICE9IDB4MWYgfHwgZ2V0YyhmcCkgIT0gMHg4YikKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAvLyBub3QgZ3ppcAotICAgIG1ldGhvZCA9IGdldGMoZnApOwotICAgIGZsYWdzID0gZ2V0YyhmcCk7Ci0KLSAgICAvKiBxdWljayBzYW5pdHkgY2hlY2tzICovCi0gICAgaWYgKG1ldGhvZCA9PSBFT0YgfHwgZmxhZ3MgPT0gRU9GKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1ldGhvZCAhPSBaaXBGaWxlUk86OmtDb21wcmVzc0RlZmxhdGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvKiBza2lwIG92ZXIgNCBieXRlcyBvZiBtb2QgdGltZSwgMSBieXRlIFhGTCwgMSBieXRlIE9TICovCi0gICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLSAgICAgICAgKHZvaWQpIGdldGMoZnApOwotICAgIC8qIGNvbnN1bWUgImV4dHJhIiBmaWVsZCwgaWYgcHJlc2VudCAqLwotICAgIGlmICgoZmxhZ3MgJiBGRVhUUkEpICE9IDApIHsKLSAgICAgICAgaW50IGxlbjsKLQotICAgICAgICBsZW4gPSBnZXRjKGZwKTsKLSAgICAgICAgbGVuIHw9IGdldGMoZnApIDw8IDg7Ci0gICAgICAgIHdoaWxlIChsZW4tLSAmJiBnZXRjKGZwKSAhPSBFT0YpCi0gICAgICAgICAgICA7Ci0gICAgfQotICAgIC8qIGNvbnN1bWUgZmlsZW5hbWUsIGlmIHByZXNlbnQgKi8KLSAgICBpZiAoKGZsYWdzICYgRk5BTUUpICE9IDApIHsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWMgPSBnZXRjKGZwKTsKLSAgICAgICAgfSB3aGlsZSAoaWMgIT0gMCAmJiBpYyAhPSBFT0YpOwotICAgIH0KLSAgICAvKiBjb25zdW1lIGNvbW1lbnQsIGlmIHByZXNlbnQgKi8KLSAgICBpZiAoKGZsYWdzICYgRkNPTU1FTlQpICE9IDApIHsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWMgPSBnZXRjKGZwKTsKLSAgICAgICAgfSB3aGlsZSAoaWMgIT0gMCAmJiBpYyAhPSBFT0YpOwotICAgIH0KLSAgICAvKiBjb25zdW1lIDE2LWJpdCBoZWFkZXIgQ1JDLCBpZiBwcmVzZW50ICovCi0gICAgaWYgKChmbGFncyAmIEZIQ1JDKSAhPSAwKSB7Ci0gICAgICAgICh2b2lkKSBnZXRjKGZwKTsKLSAgICAgICAgKHZvaWQpIGdldGMoZnApOwotICAgIH0KLQotICAgIGlmIChmZW9mKGZwKSB8fCBmZXJyb3IoZnApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvKiBzZWVrIHRvIHRoZSBlbmQ7IENSQyBhbmQgbGVuZ3RoIGFyZSBpbiB0aGUgbGFzdCA4IGJ5dGVzICovCi0gICAgbG9uZyBjdXJQb3NuID0gZnRlbGwoZnApOwotICAgIHVuc2lnbmVkIGNoYXIgYnVmWzhdOwotICAgIGZzZWVrKGZwLCAtOCwgU0VFS19FTkQpOwotICAgICpwQ29tcHJlc3NlZExlbiA9IGZ0ZWxsKGZwKSAtIGN1clBvc247Ci0KLSAgICBpZiAoZnJlYWQoYnVmLCAxLCA4LCBmcCkgIT0gOCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8qIHNlZWsgYmFjayB0byBzdGFydCBvZiBjb21wcmVzc2VkIGRhdGEgKi8KLSAgICBmc2VlayhmcCwgY3VyUG9zbiwgU0VFS19TRVQpOwotCi0gICAgKnBDb21wcmVzc2lvbk1ldGhvZCA9IG1ldGhvZDsKLSAgICAqcENSQzMyID0gZ2V0NExFKCZidWZbMF0pOwotICAgICpwVW5jb21wcmVzc2VkTGVuID0gZ2V0NExFKCZidWZbNF0pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19CmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9taXNjLmNwcCBiL2xpYnMvYW5kcm9pZGZ3L21pc2MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTY4NmVmLi4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L21pc2MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNkZWZpbmUgTE9HX1RBRyAibWlzYyIKLQotLy8KLS8vIE1pc2NlbGxhbmVvdXMgdXRpbGl0eSBmdW5jdGlvbnMuCi0vLwotI2luY2x1ZGUgPGFuZHJvaWRmdy9taXNjLmg+Ci0KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyoKLSAqIEdldCBhIGZpbGUncyB0eXBlLgotICovCi1GaWxlVHlwZSBnZXRGaWxlVHlwZShjb25zdCBjaGFyKiBmaWxlTmFtZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdCBzYjsKLQotICAgIGlmIChzdGF0KGZpbGVOYW1lLCAmc2IpIDwgMCkgewotICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RESVIpCi0gICAgICAgICAgICByZXR1cm4ga0ZpbGVUeXBlTm9uZXhpc3RlbnQ7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZXRGaWxlVHlwZSBnb3QgZXJybm89JWQgb24gJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICBlcnJubywgZmlsZU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIGtGaWxlVHlwZVVua25vd247Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoU19JU1JFRyhzYi5zdF9tb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBrRmlsZVR5cGVSZWd1bGFyOwotICAgICAgICBlbHNlIGlmIChTX0lTRElSKHNiLnN0X21vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGtGaWxlVHlwZURpcmVjdG9yeTsKLSAgICAgICAgZWxzZSBpZiAoU19JU0NIUihzYi5zdF9tb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBrRmlsZVR5cGVDaGFyRGV2OwotICAgICAgICBlbHNlIGlmIChTX0lTQkxLKHNiLnN0X21vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGtGaWxlVHlwZUJsb2NrRGV2OwotICAgICAgICBlbHNlIGlmIChTX0lTRklGTyhzYi5zdF9tb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBrRmlsZVR5cGVGaWZvOwotI2lmZGVmIEhBVkVfU1lNTElOS1MKLSAgICAgICAgZWxzZSBpZiAoU19JU0xOSyhzYi5zdF9tb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBrRmlsZVR5cGVTeW1saW5rOwotICAgICAgICBlbHNlIGlmIChTX0lTU09DSyhzYi5zdF9tb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBrRmlsZVR5cGVTb2NrZXQ7Ci0jZW5kaWYKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGtGaWxlVHlwZVVua25vd247Ci0gICAgfQotfQotCi0vKgotICogR2V0IGEgZmlsZSdzIG1vZGlmaWNhdGlvbiBkYXRlLgotICovCi10aW1lX3QgZ2V0RmlsZU1vZERhdGUoY29uc3QgY2hhciogZmlsZU5hbWUpCi17Ci0gICAgc3RydWN0IHN0YXQgc2I7Ci0KLSAgICBpZiAoc3RhdChmaWxlTmFtZSwgJnNiKSA8IDApCi0gICAgICAgIHJldHVybiAodGltZV90KSAtMTsKLQotICAgIHJldHVybiBzYi5zdF9tdGltZTsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2xpYnMvYW5kcm9pZGZ3L3Rlc3RzL0FuZHJvaWQubWsgYi9saWJzL2FuZHJvaWRmdy90ZXN0cy9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzU1Mzc1Li4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L3Rlc3RzL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIEJ1aWxkIHRoZSB1bml0IHRlc3RzLgotTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotIyBCdWlsZCB0aGUgdW5pdCB0ZXN0cy4KLXRlc3Rfc3JjX2ZpbGVzIDo9IFwKLSAgICBPYmJGaWxlX3Rlc3QuY3BwIFwKLSAgICBaaXBVdGlsc190ZXN0LmNwcAotCi1zaGFyZWRfbGlicmFyaWVzIDo9IFwKLSAgICBsaWJhbmRyb2lkZncgXAotICAgIGxpYmN1dGlscyBcCi0gICAgbGlidXRpbHMgXAotICAgIGxpYnVpIFwKLSAgICBsaWJzdGxwb3J0Ci0KLXN0YXRpY19saWJyYXJpZXMgOj0gXAotICAgIGxpYmd0ZXN0IFwKLSAgICBsaWJndGVzdF9tYWluCi0KLSQoZm9yZWFjaCBmaWxlLCQodGVzdF9zcmNfZmlsZXMpLCBcCi0gICAgJChldmFsIGluY2x1ZGUgJChDTEVBUl9WQVJTKSkgXAotICAgICQoZXZhbCBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9ICQoc2hhcmVkX2xpYnJhcmllcykpIFwKLSAgICAkKGV2YWwgTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSAkKHN0YXRpY19saWJyYXJpZXMpKSBcCi0gICAgJChldmFsIExPQ0FMX1NSQ19GSUxFUyA6PSAkKGZpbGUpKSBcCi0gICAgJChldmFsIExPQ0FMX01PRFVMRSA6PSAkKG5vdGRpciAkKGZpbGU6JS5jcHA9JSkpKSBcCi0gICAgJChldmFsIGluY2x1ZGUgJChCVUlMRF9OQVRJVkVfVEVTVCkpIFwKLSkKLQotIyBCdWlsZCB0aGUgbWFudWFsIHRlc3QgcHJvZ3JhbXMuCi1pbmNsdWRlICQoY2FsbCBhbGwtbWFrZWZpbGVzLXVuZGVyLCAkKExPQ0FMX1BBVEgpKQpkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvdGVzdHMvT2JiRmlsZV90ZXN0LmNwcCBiL2xpYnMvYW5kcm9pZGZ3L3Rlc3RzL09iYkZpbGVfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOWY2NTAuLjAwMDAwMDAKLS0tIGEvbGlicy9hbmRyb2lkZncvdGVzdHMvT2JiRmlsZV90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJPYmJGaWxlX3Rlc3QiCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L09iYkZpbGUuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotCi0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi0jZGVmaW5lIFRFU1RfRklMRU5BTUUgIi90ZXN0Lm9iYiIKLQotY2xhc3MgT2JiRmlsZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci1wcm90ZWN0ZWQ6Ci0gICAgc3A8T2JiRmlsZT4gbU9iYkZpbGU7Ci0gICAgY2hhciogbUV4dGVybmFsU3RvcmFnZTsKLSAgICBjaGFyKiBtRmlsZU5hbWU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSB7Ci0gICAgICAgIG1PYmJGaWxlID0gbmV3IE9iYkZpbGUoKTsKLSAgICAgICAgbUV4dGVybmFsU3RvcmFnZSA9IGdldGVudigiRVhURVJOQUxfU1RPUkFHRSIpOwotCi0gICAgICAgIGNvbnN0IGludCB0b3RhbExlbiA9IHN0cmxlbihtRXh0ZXJuYWxTdG9yYWdlKSArIHN0cmxlbihURVNUX0ZJTEVOQU1FKSArIDE7Ci0gICAgICAgIG1GaWxlTmFtZSA9IG5ldyBjaGFyW3RvdGFsTGVuXTsKLSAgICAgICAgc25wcmludGYobUZpbGVOYW1lLCB0b3RhbExlbiwgIiVzJXMiLCBtRXh0ZXJuYWxTdG9yYWdlLCBURVNUX0ZJTEVOQU1FKTsKLQotICAgICAgICBpbnQgZmQgPSA6Om9wZW4obUZpbGVOYW1lLCBPX0NSRUFUIHwgT19UUlVOQywgU19JUlVTUiB8IFNfSVdVU1IpOwotICAgICAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgICAgICBGQUlMKCkgPDwgIkNvdWxkbid0IGNyZWF0ZSAiIDw8IG1GaWxlTmFtZSA8PCAiIGZvciB0ZXN0cyI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSB7Ci0gICAgfQotfTsKLQotVEVTVF9GKE9iYkZpbGVUZXN0LCBSZWFkRmFpbHVyZSkgewotICAgIEVYUEVDVF9GQUxTRShtT2JiRmlsZS0+cmVhZEZyb20oLTEpKQotICAgICAgICAgICAgPDwgIk5vIGZhaWx1cmUgb24gaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IiOwotfQotCi1URVNUX0YoT2JiRmlsZVRlc3QsIFdyaXRlVGhlblJlYWQpIHsKLSAgICBjb25zdCBjaGFyKiBwYWNrYWdlTmFtZSA9ICJjb20uZXhhbXBsZS5vYmJmaWxlIjsKLSAgICBjb25zdCBpbnQzMl90IHZlcnNpb25OdW0gPSAxOwotCi0gICAgbU9iYkZpbGUtPnNldFBhY2thZ2VOYW1lKFN0cmluZzgocGFja2FnZU5hbWUpKTsKLSAgICBtT2JiRmlsZS0+c2V0VmVyc2lvbih2ZXJzaW9uTnVtKTsKLSNkZWZpbmUgU0FMVF9TSVpFIDgKLSAgICB1bnNpZ25lZCBjaGFyIHNhbHRbU0FMVF9TSVpFXSA9IHsweDAxLCAweDEwLCAweDU1LCAweEFBLCAweEZGLCAweDAwLCAweDVBLCAweEE1fTsKLSAgICBFWFBFQ1RfVFJVRShtT2JiRmlsZS0+c2V0U2FsdChzYWx0LCBTQUxUX1NJWkUpKQotICAgICAgICAgICAgPDwgIlNhbHQgc2hvdWxkIGJlIHN1Y2Nlc3NmdWxseSBzZXQiOwotCi0gICAgRVhQRUNUX1RSVUUobU9iYkZpbGUtPndyaXRlVG8obUZpbGVOYW1lKSkKLSAgICAgICAgICAgIDw8ICJjb3VsZG4ndCB3cml0ZSB0byBmYWtlIC5vYmIgZmlsZSI7Ci0KLSAgICBtT2JiRmlsZSA9IG5ldyBPYmJGaWxlKCk7Ci0KLSAgICBFWFBFQ1RfVFJVRShtT2JiRmlsZS0+cmVhZEZyb20obUZpbGVOYW1lKSkKLSAgICAgICAgICAgIDw8ICJjb3VsZG4ndCByZWFkIGZyb20gZmFrZSAub2JiIGZpbGUiOwotCi0gICAgRVhQRUNUX0VRKHZlcnNpb25OdW0sIG1PYmJGaWxlLT5nZXRWZXJzaW9uKCkpCi0gICAgICAgICAgICA8PCAidmVyc2lvbiBkaWRuJ3QgY29tZSBvdXQgdGhlIHNhbWUgYXMgaXQgd2VudCBpbiI7Ci0gICAgY29uc3QgY2hhciogY3VycmVudFBhY2thZ2VOYW1lID0gbU9iYkZpbGUtPmdldFBhY2thZ2VOYW1lKCkuc3RyaW5nKCk7Ci0gICAgRVhQRUNUX1NUUkVRKHBhY2thZ2VOYW1lLCBjdXJyZW50UGFja2FnZU5hbWUpCi0gICAgICAgICAgICA8PCAicGFja2FnZSBuYW1lIGRpZG4ndCBjb21lIG91dCB0aGUgc2FtZSBhcyBpdCB3ZW50IGluIjsKLQotICAgIHNpemVfdCBzYWx0TGVuOwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG5ld1NhbHQgPSBtT2JiRmlsZS0+Z2V0U2FsdCgmc2FsdExlbik7Ci0KLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKHNhbHQpLCBzYWx0TGVuKQotICAgICAgICAgICAgPDwgInNhbHQgc2l6ZXMgd2VyZSBub3QgdGhlIHNhbWUiOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2Yoc2FsdCk7IGkrKykgewotICAgICAgICBFWFBFQ1RfRVEoc2FsdFtpXSwgbmV3U2FsdFtpXSkKLSAgICAgICAgICAgICAgICA8PCAic2FsdCBjaGFyYWN0ZXIgIiA8PCBpIDw8ICIgc2hvdWxkIGJlIGVxdWFsIjsKLSAgICB9Ci0gICAgRVhQRUNUX1RSVUUobWVtY21wKG5ld1NhbHQsIHNhbHQsIHNpemVvZihzYWx0KSkgPT0gMCkKLSAgICAgICAgICAgIDw8ICJzYWx0cyBzaG91bGQgYmUgdGhlIHNhbWUiOwotfQotCi19CmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy90ZXN0cy9aaXBVdGlsc190ZXN0LmNwcCBiL2xpYnMvYW5kcm9pZGZ3L3Rlc3RzL1ppcFV0aWxzX3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjAzOGI1Li4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L3Rlc3RzL1ppcFV0aWxzX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNkZWZpbmUgTE9HX1RBRyAiWmlwVXRpbHNfdGVzdCIKLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvWmlwVXRpbHMuaD4KLQotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWNsYXNzIFppcFV0aWxzVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgewotICAgIH0KLX07Ci0KLVRFU1RfRihaaXBVdGlsc1Rlc3QsIFppcFRpbWVDb252ZXJ0U3VjY2VzcykgewotICAgIHN0cnVjdCB0bSB0OwotCi0gICAgLy8gMjAxMS0wNi0yOSAxNDo0MDo0MAotICAgIGxvbmcgd2hlbiA9IDB4M0VERDc1MTQ7Ci0KLSAgICBaaXBVdGlsczo6emlwVGltZVRvVGltZXNwZWMod2hlbiwgJnQpOwotCi0gICAgRVhQRUNUX0VRKDIwMTEsIHQudG1feWVhciArIDE5MDApCi0gICAgICAgICAgICA8PCAiWWVhciB3YXMgaW1wcm9wZXJseSBjb252ZXJ0ZWQuIjsKLQotICAgIEVYUEVDVF9FUSg2LCB0LnRtX21vbikKLSAgICAgICAgICAgIDw8ICJNb250aCB3YXMgaW1wcm9wZXJseSBjb252ZXJ0ZWQuIjsKLQotICAgIEVYUEVDVF9FUSgyOSwgdC50bV9tZGF5KQotICAgICAgICAgICAgPDwgIkRheSB3YXMgaW1wcm9wZXJseSBjb252ZXJ0ZWQuIjsKLQotICAgIEVYUEVDVF9FUSgxNCwgdC50bV9ob3VyKQotICAgICAgICAgICAgPDwgIkhvdXIgd2FzIGltcHJvcGVybHkgY29udmVydGVkLiI7Ci0KLSAgICBFWFBFQ1RfRVEoNDAsIHQudG1fbWluKQotICAgICAgICAgICAgPDwgIk1pbnV0ZSB3YXMgaW1wcm9wZXJseSBjb252ZXJ0ZWQuIjsKLQotICAgIEVYUEVDVF9FUSg0MCwgdC50bV9zZWMpCi0gICAgICAgICAgICA8PCAiU2Vjb25kIHdhcyBpbXByb3Blcmx5IGNvbnZlcnRlZC4iOwotfQotCi19CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvQW1iaWVudFNoYWRvdy5jcHAgYi9saWJzL2h3dWkvQW1iaWVudFNoYWRvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1ZDI2YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvaHd1aS9BbWJpZW50U2hhZG93LmNwcApAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiT3BlbkdMUmVuZGVyZXIiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisjaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+CisKKyNpbmNsdWRlICJBbWJpZW50U2hhZG93LmgiCisjaW5jbHVkZSAiVmVydGV4LmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSB1aXJlbmRlcmVyIHsKKworLyoqCisgKiBDYWxjdWxhdGUgdGhlIHNoYWRvd3MgYXMgYSB0cmlhbmdsZSBzdHJpcHMgd2hpbGUgYWxwaGEgdmFsdWUgYXMgdGhlCisgKiBzaGFkb3cgdmFsdWVzLgorICoKKyAqIEBwYXJhbSB2ZXJ0aWNlcyBUaGUgc2hhZG93IGNhc3RlcidzIHBvbHlnb24sIHdoaWNoIGlzIHJlcHJlc2VudGVkIGluIGEgVmVjdG9yMworICogICAgICAgICAgICAgICAgICBhcnJheS4KKyAqIEBwYXJhbSB2ZXJ0ZXhDb3VudCBUaGUgbGVuZ3RoIG9mIGNhc3RlcidzIHBvbHlnb24gaW4gdGVybXMgb2YgbnVtYmVyIG9mCisgKiAgICAgICAgICAgICAgICAgICAgdmVydGljZXMuCisgKiBAcGFyYW0gcmF5cyBUaGUgbnVtYmVyIG9mIHJheXMgc2hvb3Rpbmcgb3V0IGZyb20gdGhlIGNlbnRyb2lkLgorICogQHBhcmFtIGxheWVycyBUaGUgbnVtYmVyIG9mIHJpbmdzIG91dHNpZGUgdGhlIHBvbHlnb24uCisgKiBAcGFyYW0gc3RyZW5ndGggVGhlIGRhcmtuZXNzIG9mIHRoZSBzaGFkb3csIHRoZSBoaWdoZXIsIHRoZSBkYXJrZXIuCisgKiBAcGFyYW0gaGVpZ2h0RmFjdG9yIFRoZSBmYWN0b3Igc2hvd2luZyB0aGUgaGlnaGVyIHRoZSBvYmplY3QsIHRoZSBsaWdodGVyIHRoZQorICogICAgICAgICAgICAgICAgICAgICBzaGFkb3cuCisgKiBAcGFyYW0gZ2VvbUZhY3RvciBUaGUgZmFjdG9yIHNjYWxpbmcgdGhlIGdlb21ldHJ5IGV4cGFuc2lvbiBhbG9uZyB0aGUgbm9ybWFsLgorICoKKyAqIEBwYXJhbSBzaGFkb3dWZXJ0ZXhCdWZmZXIgUmV0dXJuIGFuIGZsb2F0aW5nIHBvaW50IGFycmF5IG9mICh4LCB5LCBhKQorICogICAgICAgICAgICAgICB0cmlhbmdsZSBzdHJpcHMgbW9kZS4KKyAqLwordm9pZCBBbWJpZW50U2hhZG93OjpjcmVhdGVBbWJpZW50U2hhZG93KGNvbnN0IFZlY3RvcjMqIHZlcnRpY2VzLCBpbnQgdmVydGV4Q291bnQsCisgICAgICAgIGludCByYXlzLCBpbnQgbGF5ZXJzLCBmbG9hdCBzdHJlbmd0aCwgZmxvYXQgaGVpZ2h0RmFjdG9yLCBmbG9hdCBnZW9tRmFjdG9yLAorICAgICAgICBWZXJ0ZXhCdWZmZXImIHNoYWRvd1ZlcnRleEJ1ZmZlcikgeworCisgICAgLy8gVmFsaWRhdGUgdGhlIGlucHV0cy4KKyAgICBpZiAoc3RyZW5ndGggPD0gMCB8fCBoZWlnaHRGYWN0b3IgPD0gMCB8fCBsYXllcnMgPD0gMCB8fCByYXlzIDw9IDAKKyAgICAgICAgfHwgZ2VvbUZhY3RvciA8PSAwKSB7CisjaWYgREVCVUdfU0hBRE9XCisgICAgICAgIEFMT0dFKCJJbnZhbGlkIGlucHV0IGZvciBjcmVhdGVBbWJpZW50U2hhZG93KCksIGVhcmx5IHJldHVybiEiKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCByaW5ncyA9IGxheWVycyArIDE7CisgICAgaW50IHNpemUgPSByYXlzICogcmluZ3M7CisgICAgVmVjdG9yMiBjZW50cm9pZDsKKyAgICBjYWxjdWxhdGVQb2x5Z29uQ2VudHJvaWQodmVydGljZXMsIHZlcnRleENvdW50LCBjZW50cm9pZCk7CisKKyAgICBWZWN0b3I8VmVjdG9yMj4gZGlyOyAvLyBUT0RPOiB1c2UgQysrMTEgdW5pcXVlX3B0cgorICAgIGRpci5zZXRDYXBhY2l0eShyYXlzKTsKKyAgICBmbG9hdCByYXlEaXN0W3JheXNdOworICAgIGZsb2F0IHJheUhlaWdodFtyYXlzXTsKKyAgICBjYWxjdWxhdGVSYXlEaXJlY3Rpb25zKHJheXMsIGRpci5lZGl0QXJyYXkoKSk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGxlbmd0aCBhbmQgaGVpZ2h0IG9mIHRoZSBwb2ludHMgYWxvbmcgdGhlIGVkZ2UuCisgICAgLy8KKyAgICAvLyBUaGUgbWF0aCBoZXJlIGlzOgorICAgIC8vIEludGVyc2VjdCBlYWNoIHJheSAoc3RhcnRpbmcgZnJvbSB0aGUgY2VudHJvaWQpIHdpdGggdGhlIHBvbHlnb24uCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByYXlzOyBpKyspIHsKKyAgICAgICAgaW50IGVkZ2VJbmRleDsKKyAgICAgICAgZmxvYXQgZWRnZUZyYWN0aW9uOworICAgICAgICBmbG9hdCByYXlEaXN0YW5jZTsKKyAgICAgICAgY2FsY3VsYXRlSW50ZXJzZWN0aW9uKHZlcnRpY2VzLCB2ZXJ0ZXhDb3VudCwgY2VudHJvaWQsIGRpcltpXSwgZWRnZUluZGV4LAorICAgICAgICAgICAgICAgIGVkZ2VGcmFjdGlvbiwgcmF5RGlzdGFuY2UpOworICAgICAgICByYXlEaXN0W2ldID0gcmF5RGlzdGFuY2U7CisgICAgICAgIGlmIChlZGdlSW5kZXggPCAwIHx8IGVkZ2VJbmRleCA+PSB2ZXJ0ZXhDb3VudCkgeworI2lmIERFQlVHX1NIQURPVworICAgICAgICAgICAgQUxPR0UoIkludmFsaWQgZWRnZUluZGV4ISIpOworI2VuZGlmCisgICAgICAgICAgICBlZGdlSW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIGZsb2F0IGgxID0gdmVydGljZXNbZWRnZUluZGV4XS56OworICAgICAgICBmbG9hdCBoMiA9IHZlcnRpY2VzWygoZWRnZUluZGV4ICsgMSkgJSB2ZXJ0ZXhDb3VudCldLno7CisgICAgICAgIHJheUhlaWdodFtpXSA9IGgxICsgZWRnZUZyYWN0aW9uICogKGgyIC0gaDEpOworICAgIH0KKworICAgIC8vIFRoZSBvdXRwdXQgYnVmZmVyIGxlbmd0aCBiYXNpY2FsbHkgaXMgcm91Z2hseSByYXlzICogbGF5ZXJzLCBidXQgc2luY2Ugd2UKKyAgICAvLyBuZWVkIHRyaWFuZ2xlIHN0cmlwcywgc28gd2UgbmVlZCB0byBkdXBsaWNhdGUgdmVydGljZXMgdG8gYWNjb21wbGlzaCB0aGF0LgorICAgIGNvbnN0IGludCBzaGFkb3dWZXJ0ZXhDb3VudCA9ICgyICsgcmF5cyArICgobGF5ZXJzKSAqIDIgKiAocmF5cyArIDEpKSk7CisgICAgQWxwaGFWZXJ0ZXgqIHNoYWRvd1ZlcnRpY2VzID0gc2hhZG93VmVydGV4QnVmZmVyLmFsbG9jPEFscGhhVmVydGV4PihzaGFkb3dWZXJ0ZXhDb3VudCk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHZlcnRleCBvZiB0aGUgc2hhZG93cy4KKyAgICAvLworICAgIC8vIFRoZSBtYXRoIGhlcmUgaXM6CisgICAgLy8gQWxvbmcgdGhlIGVkZ2VzIG9mIHRoZSBwb2x5Z29uLCBmb3IgZWFjaCBpbnRlcnNlY3Rpb24gcG9pbnQgUCAoZ2VuZXJhdGVkIGFib3ZlKSwKKyAgICAvLyBjYWxjdWxhdGUgdGhlIG5vcm1hbCBOLCB3aGljaCBzaG91bGQgYmUgcGVycGVuZGljdWxhciB0byB0aGUgZWRnZSBvZiB0aGUKKyAgICAvLyBwb2x5Z29uIChyZXByZXNlbnRlZCBieSB0aGUgbmVpZ2hib3IgaW50ZXJzZWN0aW9uIHBvaW50cykgLgorICAgIC8vIFNoYWRvdydzIHZlcnRpY2VzIHdpbGwgYmUgZ2VuZXJhdGVkIGFzIDogUCArIE4gKiBzY2FsZS4KKyAgICBpbnQgY3VycmVudEluZGV4ID0gMDsKKyAgICBmb3IgKGludCByID0gMDsgciA8IGxheWVyczsgcisrKSB7CisgICAgICAgIGludCBmaXJzdEluTGF5ZXIgPSBjdXJyZW50SW5kZXg7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmF5czsgaSsrKSB7CisKKyAgICAgICAgICAgIFZlY3RvcjIgbm9ybWFsKDEuMGYsIDAuMGYpOworICAgICAgICAgICAgY2FsY3VsYXRlTm9ybWFsKHJheXMsIGksIGRpci5hcnJheSgpLCByYXlEaXN0LCBub3JtYWwpOworCisgICAgICAgICAgICBmbG9hdCBvcGFjaXR5ID0gc3RyZW5ndGggKiAoMC41ZikgLyAoMSArIHJheUhlaWdodFtpXSAvIGhlaWdodEZhY3Rvcik7CisKKyAgICAgICAgICAgIC8vIFRoZSB2ZXJ0ZXggc2hvdWxkIGJlIHN0YXJ0IGZyb20gcmF5RGlzdFtpXSB0aGVuIHNjYWxlIHRoZQorICAgICAgICAgICAgLy8gbm9ybWFsaXplTm9ybWFsIQorICAgICAgICAgICAgVmVjdG9yMiBpbnRlcnNlY3Rpb24gPSBkaXJbaV0gKiByYXlEaXN0W2ldICsgY2VudHJvaWQ7CisKKyAgICAgICAgICAgIC8vIFVzZSAyIHJpbmdzJyB2ZXJ0aWNlcyB0byBjb21wbGV0ZSBvbmUgbGF5ZXIncyBzdHJpcAorICAgICAgICAgICAgZm9yIChpbnQgaiA9IHI7IGogPCAociArIDIpOyBqKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBqZiA9IGogLyAoZmxvYXQpKHJpbmdzIC0gMSk7CisKKyAgICAgICAgICAgICAgICBmbG9hdCBleHBhbnNpb25EaXN0ID0gcmF5SGVpZ2h0W2ldIC8gaGVpZ2h0RmFjdG9yICogZ2VvbUZhY3RvciAqIGpmOworICAgICAgICAgICAgICAgIEFscGhhVmVydGV4OjpzZXQoJnNoYWRvd1ZlcnRpY2VzW2N1cnJlbnRJbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24ueCArIG5vcm1hbC54ICogZXhwYW5zaW9uRGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi55ICsgbm9ybWFsLnkgKiBleHBhbnNpb25EaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgKDEgLSBqZikgKiBvcGFjaXR5KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZyb20gb25lIGxheWVyIHRvIHRoZSBuZXh0LCB3ZSBuZWVkIHRvIGR1cGxpY2F0ZSB0aGUgdmVydGV4IHRvCisgICAgICAgIC8vIGNvbnRpbnVlIGFzIGEgc2luZ2xlIHN0cmlwLgorICAgICAgICBzaGFkb3dWZXJ0aWNlc1tjdXJyZW50SW5kZXhdID0gc2hhZG93VmVydGljZXNbZmlyc3RJbkxheWVyXTsKKyAgICAgICAgY3VycmVudEluZGV4Kys7CisgICAgICAgIHNoYWRvd1ZlcnRpY2VzW2N1cnJlbnRJbmRleF0gPSBzaGFkb3dWZXJ0aWNlc1tmaXJzdEluTGF5ZXIgKyAxXTsKKyAgICAgICAgY3VycmVudEluZGV4Kys7CisgICAgfQorCisgICAgLy8gQWZ0ZXIgYWxsIHJpbmdzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIGp1bXAgaW50byB0aGUgcG9seWdvbi4KKyAgICAvLyBJbiBvcmRlciB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gYSBzdHJpcCwgd2UgbmVlZCB0byBkdXBsaWNhdGUgdGhlIGxhc3Qgb25lCisgICAgLy8gb2YgdGhlIHJpbmdzIGFuZCB0aGUgZmlyc3Qgb25lIGluc2lkZSB0aGUgcG9seWdvbi4KKyAgICBpbnQgbGFzdEluUmluZ3MgPSBjdXJyZW50SW5kZXggLSAxOworICAgIHNoYWRvd1ZlcnRpY2VzW2N1cnJlbnRJbmRleF0gPSBzaGFkb3dWZXJ0aWNlc1tsYXN0SW5SaW5nc107CisgICAgY3VycmVudEluZGV4Kys7CisKKyAgICAvLyBXZSBza2lwIG9uZSBhbmQgZmlsbCBpdCBiYWNrIGFmdGVyIHdlIGZpbmlzaCB0aGUgaW50ZXJuYWwgdHJpYW5nbGVzLgorICAgIGN1cnJlbnRJbmRleCsrOworICAgIGludCBmaXJzdEludGVybmFsID0gY3VycmVudEluZGV4OworCisgICAgLy8gQ29tYmluZSB0aGUgaW50ZXJuYWwgYXJlYSBvZiB0aGUgcG9seWdvbiBpbnRvIGEgdHJpYW5nbGUgc3RyaXAsIHRvby4KKyAgICAvLyBUaGUgYmFzaWMgaWRlYSBpcyB6aWcgemFnIGJldHdlZW4gdGhlIGludGVyc2VjdGlvbiBwb2ludHMuCisgICAgLy8gMCAtPiAobiAtIDEpIC0+IDEgLT4gKG4gLSAyKSAuLi4KKyAgICBmb3IgKGludCBrID0gMDsgayA8IHJheXM7IGsrKykgeworICAgICAgICBpbnQgIGkgPSBrIC8gMjsKKyAgICAgICAgaWYgKChrICYgMSkgPT0gMSkgeyAvLyB0cmF2ZXJzZSB0aGUgaW5zaWRlIGluIGEgemlnIHphZyBwYXR0ZXJuIGZvciBzdHJpcHMKKyAgICAgICAgICAgIGkgPSByYXlzIC0gaSAtIDE7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgY2FzdCA9IHJheURpc3RbaV0gKiAoMSArIHJheUhlaWdodFtpXSAvIGhlaWdodEZhY3Rvcik7CisgICAgICAgIGZsb2F0IG9wYWNpdHkgPSBzdHJlbmd0aCAqICgwLjVmKSAvICgxICsgcmF5SGVpZ2h0W2ldIC8gaGVpZ2h0RmFjdG9yKTsKKyAgICAgICAgZmxvYXQgdCA9IHJheURpc3RbaV07CisKKyAgICAgICAgQWxwaGFWZXJ0ZXg6OnNldCgmc2hhZG93VmVydGljZXNbY3VycmVudEluZGV4XSwgZGlyW2ldLnggKiB0ICsgY2VudHJvaWQueCwKKyAgICAgICAgICAgICAgICBkaXJbaV0ueSAqIHQgKyBjZW50cm9pZC55LCBvcGFjaXR5KTsKKyAgICAgICAgY3VycmVudEluZGV4Kys7CisgICAgfQorCisgICAgY3VycmVudEluZGV4ID0gZmlyc3RJbnRlcm5hbCAtIDE7CisgICAgc2hhZG93VmVydGljZXNbY3VycmVudEluZGV4XSA9IHNoYWRvd1ZlcnRpY2VzW2ZpcnN0SW50ZXJuYWxdOworfQorCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgY2VudHJvaWQgb2YgYSBnaXZlbiBwb2x5Z29uLgorICoKKyAqIEBwYXJhbSB2ZXJ0aWNlcyBUaGUgc2hhZG93IGNhc3RlcidzIHBvbHlnb24sIHdoaWNoIGlzIHJlcHJlc2VudGVkIGluIGEKKyAqICAgICAgICAgICAgICAgICBzdHJhaWdodCBWZWN0b3IzIGFycmF5LgorICogQHBhcmFtIHZlcnRleENvdW50IFRoZSBsZW5ndGggb2YgY2FzdGVyJ3MgcG9seWdvbiBpbiB0ZXJtcyBvZiBudW1iZXIgb2YgdmVydGljZXMuCisgKgorICogQHBhcmFtIGNlbnRyb2lkIFJldHVybiB0aGUgY2VudHJvaWQgb2YgdGhlIHBvbHlnb24uCisgKi8KK3ZvaWQgQW1iaWVudFNoYWRvdzo6Y2FsY3VsYXRlUG9seWdvbkNlbnRyb2lkKGNvbnN0IFZlY3RvcjMqIHZlcnRpY2VzLCBpbnQgdmVydGV4Q291bnQsCisgICAgICAgIFZlY3RvcjImIGNlbnRyb2lkKSB7CisgICAgZmxvYXQgc3VteCA9IDA7CisgICAgZmxvYXQgc3VteSA9IDA7CisgICAgaW50IHAxID0gdmVydGV4Q291bnQgLSAxOworICAgIGZsb2F0IGFyZWEgPSAwOworICAgIGZvciAoaW50IHAyID0gMDsgcDIgPCB2ZXJ0ZXhDb3VudDsgcDIrKykgeworICAgICAgICBmbG9hdCB4MSA9IHZlcnRpY2VzW3AxXS54OworICAgICAgICBmbG9hdCB5MSA9IHZlcnRpY2VzW3AxXS55OworICAgICAgICBmbG9hdCB4MiA9IHZlcnRpY2VzW3AyXS54OworICAgICAgICBmbG9hdCB5MiA9IHZlcnRpY2VzW3AyXS55OworICAgICAgICBmbG9hdCBhID0gKHgxICogeTIgLSB4MiAqIHkxKTsKKyAgICAgICAgc3VteCArPSAoeDEgKyB4MikgKiBhOworICAgICAgICBzdW15ICs9ICh5MSArIHkyKSAqIGE7CisgICAgICAgIGFyZWEgKz0gYTsKKyAgICAgICAgcDEgPSBwMjsKKyAgICB9CisKKyAgICBpZiAoYXJlYSA9PSAwKSB7CisjaWYgREVCVUdfU0hBRE9XCisgICAgICAgIEFMT0dFKCJBcmVhIGlzIDAhIik7CisjZW5kaWYKKyAgICAgICAgY2VudHJvaWQueCA9IHZlcnRpY2VzWzBdLng7CisgICAgICAgIGNlbnRyb2lkLnkgPSB2ZXJ0aWNlc1swXS55OworICAgIH0gZWxzZSB7CisgICAgICAgIGNlbnRyb2lkLnggPSBzdW14IC8gKDMgKiBhcmVhKTsKKyAgICAgICAgY2VudHJvaWQueSA9IHN1bXkgLyAoMyAqIGFyZWEpOworICAgIH0KK30KKworLyoqCisgKiBHZW5lcmF0ZSBhbiBhcnJheSBvZiByYXlzJyBkaXJlY3Rpb24gdmVjdG9ycy4KKyAqCisgKiBAcGFyYW0gcmF5cyBUaGUgbnVtYmVyIG9mIHJheXMgc2hvb3Rpbmcgb3V0IGZyb20gdGhlIGNlbnRyb2lkLgorICogQHBhcmFtIGRpciBSZXR1cm4gdGhlIGFycmF5IG9mIHJheSB2ZWN0b3JzLgorICovCit2b2lkIEFtYmllbnRTaGFkb3c6OmNhbGN1bGF0ZVJheURpcmVjdGlvbnMoaW50IHJheXMsIFZlY3RvcjIqIGRpcikgeworICAgIGZsb2F0IGRlbHRhQW5nbGUgPSAyICogTV9QSSAvIHJheXM7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJheXM7IGkrKykgeworICAgICAgICBkaXJbaV0ueCA9IHNpbmYoZGVsdGFBbmdsZSAqIGkpOworICAgICAgICBkaXJbaV0ueSA9IGNvc2YoZGVsdGFBbmdsZSAqIGkpOworICAgIH0KK30KKworLyoqCisgKiBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBvZiBhIHJheSBoaXR0aW5nIHRoZSBwb2x5Z29uLgorICoKKyAqIEBwYXJhbSB2ZXJ0aWNlcyBUaGUgc2hhZG93IGNhc3RlcidzIHBvbHlnb24sIHdoaWNoIGlzIHJlcHJlc2VudGVkIGluIGEKKyAqICAgICAgICAgICAgICAgICBWZWN0b3IzIGFycmF5LgorICogQHBhcmFtIHZlcnRleENvdW50IFRoZSBsZW5ndGggb2YgY2FzdGVyJ3MgcG9seWdvbiBpbiB0ZXJtcyBvZiBudW1iZXIgb2YgdmVydGljZXMuCisgKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSByYXkuCisgKiBAcGFyYW0gZGlyIFRoZSBkaXJlY3Rpb24gdmVjdG9yIG9mIHRoZSByYXkuCisgKgorICogQHBhcmFtIG91dEVkZ2VJbmRleCBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBzZWdtZW50IChvciBpbmRleCBvZiB0aGUgc3RhcnRpbmcKKyAqICAgICAgICAgICAgICAgICAgICAgdmVydGV4KSB0aGF0IHJheSBpbnRlcnNlY3Qgd2l0aC4KKyAqIEBwYXJhbSBvdXRFZGdlRnJhY3Rpb24gUmV0dXJuIHRoZSBmcmFjdGlvbiBvZmZzZXQgZnJvbSB0aGUgc2VnbWVudCBzdGFydGluZworICogICAgICAgICAgICAgICAgICAgICAgICBpbmRleC4KKyAqIEBwYXJhbSBvdXRSYXlEaXN0IFJldHVybiB0aGUgcmF5IGRpc3RhbmNlIGZyb20gY2VudHJvaWQgdG8gdGhlIGludGVyc2VjdGlvbi4KKyAqLwordm9pZCBBbWJpZW50U2hhZG93OjpjYWxjdWxhdGVJbnRlcnNlY3Rpb24oY29uc3QgVmVjdG9yMyogdmVydGljZXMsIGludCB2ZXJ0ZXhDb3VudCwKKyAgICAgICAgY29uc3QgVmVjdG9yMiYgc3RhcnQsIGNvbnN0IFZlY3RvcjImIGRpciwgaW50JiBvdXRFZGdlSW5kZXgsCisgICAgICAgIGZsb2F0JiBvdXRFZGdlRnJhY3Rpb24sIGZsb2F0JiBvdXRSYXlEaXN0KSB7CisgICAgZmxvYXQgc3RhcnRYID0gc3RhcnQueDsKKyAgICBmbG9hdCBzdGFydFkgPSBzdGFydC55OworICAgIGZsb2F0IGRpclggPSBkaXIueDsKKyAgICBmbG9hdCBkaXJZID0gZGlyLnk7CisgICAgLy8gU3RhcnQgdGhlIHNlYXJjaCBmcm9tIHRoZSBsYXN0IGVkZ2UgZnJvbSBwb2x5W2xlbi0xXSB0byBwb2x5WzBdLgorICAgIGludCBwMSA9IHZlcnRleENvdW50IC0gMTsKKworICAgIGZvciAoaW50IHAyID0gMDsgcDIgPCB2ZXJ0ZXhDb3VudDsgcDIrKykgeworICAgICAgICBmbG9hdCBwMXggPSB2ZXJ0aWNlc1twMV0ueDsKKyAgICAgICAgZmxvYXQgcDF5ID0gdmVydGljZXNbcDFdLnk7CisgICAgICAgIGZsb2F0IHAyeCA9IHZlcnRpY2VzW3AyXS54OworICAgICAgICBmbG9hdCBwMnkgPSB2ZXJ0aWNlc1twMl0ueTsKKworICAgICAgICAvLyBUaGUgbWF0aCBoZXJlIGlzIGRlcml2ZWQgZnJvbToKKyAgICAgICAgLy8gZih0LCB2KSA9IHAxeCAqICgxIC0gdCkgKyBwMnggKiB0IC0gKHN0YXJ0WCArIGRpclggKiB2KSA9IDA7CisgICAgICAgIC8vIGcodCwgdikgPSBwMXkgKiAoMSAtIHQpICsgcDJ5ICogdCAtIChzdGFydFkgKyBkaXJZICogdikgPSAwOworICAgICAgICBmbG9hdCBkaXYgPSAoZGlyWCAqIChwMXkgLSBwMnkpICsgZGlyWSAqIHAyeCAtIGRpclkgKiBwMXgpOworICAgICAgICBpZiAoZGl2ICE9IDApIHsKKyAgICAgICAgICAgIGZsb2F0IHQgPSAoZGlyWCAqIChwMXkgLSBzdGFydFkpICsgZGlyWSAqIHN0YXJ0WCAtIGRpclkgKiBwMXgpIC8gKGRpdik7CisgICAgICAgICAgICBpZiAodCA+IDAgJiYgdCA8PSAxKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgdDIgPSAocDF4ICogKHN0YXJ0WSAtIHAyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHAyeCAqIChwMXkgLSBzdGFydFkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdGFydFggKiAocDJ5IC0gcDF5KSkgLyBkaXY7CisgICAgICAgICAgICAgICAgaWYgKHQyID4gMCkgeworICAgICAgICAgICAgICAgICAgICBvdXRFZGdlSW5kZXggPSBwMTsKKyAgICAgICAgICAgICAgICAgICAgb3V0UmF5RGlzdCA9IHQyOworICAgICAgICAgICAgICAgICAgICBvdXRFZGdlRnJhY3Rpb24gPSB0OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHAxID0gcDI7CisgICAgfQorICAgIHJldHVybjsKK307CisKKy8qKgorICogQ2FsY3VsYXRlIHRoZSBub3JtYWwgYXQgdGhlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIGEgcmF5IGFuZCB0aGUgcG9seWdvbi4KKyAqCisgKiBAcGFyYW0gcmF5cyBUaGUgdG90YWwgbnVtYmVyIG9mIHJheXMuCisgKiBAcGFyYW0gY3VycmVudFJheUluZGV4IFRoZSBpbmRleCBvZiB0aGUgcmF5IHdoaWNoIHRoZSBub3JtYWwgaXMgYmFzZWQgb24uCisgKiBAcGFyYW0gZGlyIFRoZSBhcnJheSBvZiB0aGUgYWxsIHRoZSByYXlzIGRpcmVjdGlvbnMuCisgKiBAcGFyYW0gcmF5RGlzdCBUaGUgcHJlLWNvbXB1dGVkIHJheSBkaXN0YW5jZXMgYXJyYXkuCisgKgorICogQHBhcmFtIG5vcm1hbCBSZXR1cm4gdGhlIG5vcm1hbC4KKyAqLwordm9pZCBBbWJpZW50U2hhZG93OjpjYWxjdWxhdGVOb3JtYWwoaW50IHJheXMsIGludCBjdXJyZW50UmF5SW5kZXgsCisgICAgICAgIGNvbnN0IFZlY3RvcjIqIGRpciwgY29uc3QgZmxvYXQqIHJheURpc3QsIFZlY3RvcjImIG5vcm1hbCkgeworICAgIGludCBwcmVJbmRleCA9IChjdXJyZW50UmF5SW5kZXggLSAxICsgcmF5cykgJSByYXlzOworICAgIGludCBwb3N0SW5kZXggPSAoY3VycmVudFJheUluZGV4ICsgMSkgJSByYXlzOworICAgIFZlY3RvcjIgcDEgPSBkaXJbcHJlSW5kZXhdICogcmF5RGlzdFtwcmVJbmRleF07CisgICAgVmVjdG9yMiBwMiA9IGRpcltwb3N0SW5kZXhdICogcmF5RGlzdFtwb3N0SW5kZXhdOworCisgICAgLy8gTm93IHRoZSBWIChkZWx0YVgsIGRlbHRhWSkgaXMgdGhlIHZlY3RvciBnb2luZyBDVyBhcm91bmQgdGhlIHBvbHkuCisgICAgVmVjdG9yMiBkZWx0YSA9IHAyIC0gcDE7CisgICAgaWYgKGRlbHRhLmxlbmd0aCgpICE9IDApIHsKKyAgICAgICAgZGVsdGEubm9ybWFsaXplKCk7CisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbm9ybWFsICwgd2hpY2ggaXMgQ0NXIDkwIHJvdGF0ZSB0byB0aGUgVi4KKyAgICAgICAgLy8gOTAgZGVncmVlcyBDQ1cgYWJvdXQgei1heGlzOiAoeCwgeSwgeikgLT4gKC15LCB4LCB6KQorICAgICAgICBub3JtYWwueCA9IC1kZWx0YS55OworICAgICAgICBub3JtYWwueSA9IGRlbHRhLng7CisgICAgfQorfQorCit9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9BbWJpZW50U2hhZG93LmggYi9saWJzL2h3dWkvQW1iaWVudFNoYWRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OWJkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvQW1iaWVudFNoYWRvdy5oCkBAIC0wLDAgKzEsNTcgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IV1VJX0FNQklFTlRfU0hBRE9XX0gKKyNkZWZpbmUgQU5EUk9JRF9IV1VJX0FNQklFTlRfU0hBRE9XX0gKKworI2luY2x1ZGUgIkRlYnVnLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiVmVydGV4QnVmZmVyLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSB1aXJlbmRlcmVyIHsKKworLyoqCisgKiBBbWJpZW50U2hhZG93IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhbWJpZW50IHNoYWRvdyB2YWx1ZSBhcm91bmQgYSBwb2x5Z29uLgorICoKKyAqIFRPRE86IGNhbGN1bGF0ZUludGVyc2VjdGlvbigpIG5vdyBpcyBPKE4qTSksIHdoZXJlIE4gaXMgdGhlIG51bWJlciBvZgorICogcG9seWdvbidzIHZlcnRpY3MgYW5kIE0gaXMgdGhlIG51bWJlciBvZiByYXlzLiBJbiBmYWN0LCBieSBzdGFyaW5nIHRyYWNpbmcKKyAqIHRoZSB2ZXJ0ZXggZnJvbSB0aGUgcHJldmlvdXMgaW50ZXJzZWN0aW9uLCB0aGUgYWxnb3JpdGhtIGNhbiBiZSBPKE4gKyBNKTsKKyAqLworY2xhc3MgQW1iaWVudFNoYWRvdyB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgY3JlYXRlQW1iaWVudFNoYWRvdyhjb25zdCBWZWN0b3IzKiBwb2x5LCBpbnQgcG9seUxlbmd0aCwgaW50IHJheXMsCisgICAgICAgICAgICBpbnQgbGF5ZXJzLCBmbG9hdCBzdHJlbmd0aCwgZmxvYXQgaGVpZ2h0RmFjdG9yLCBmbG9hdCBnZW9tRmFjdG9yLAorICAgICAgICAgICAgVmVydGV4QnVmZmVyJiBzaGFkb3dWZXJ0ZXhCdWZmZXIpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVBvbHlnb25DZW50cm9pZChjb25zdCBWZWN0b3IzKiBwb2x5LCBpbnQgbGVuLCBWZWN0b3IyJiBjZW50cm9pZCk7CisKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVSYXlEaXJlY3Rpb25zKGludCByYXlzLCBWZWN0b3IyKiBkaXIpOworCisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlSW50ZXJzZWN0aW9uKGNvbnN0IFZlY3RvcjMqIHBvbHksIGludCBuYlZlcnRpY2VzLAorICAgICAgICAgICAgY29uc3QgVmVjdG9yMiYgc3RhcnQsIGNvbnN0IFZlY3RvcjImIGRpciwgaW50JiBvdXRFZGdlSW5kZXgsCisgICAgICAgICAgICBmbG9hdCYgb3V0RWRnZUZyYWN0aW9uLCBmbG9hdCYgb3V0UmF5RGlzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVOb3JtYWwoaW50IHJheXMsIGludCBjdXJyZW50UmF5SW5kZXgsIGNvbnN0IFZlY3RvcjIqIGRpciwKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0KiByYXlEaXN0LCBWZWN0b3IyJiBub3JtYWwpOworfTsgLy8gQW1iaWVudFNoYWRvdworCit9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfSFdVSV9BTUJJRU5UX1NIQURPV19ICmRpZmYgLS1naXQgYS9saWJzL2h3dWkvQW5kcm9pZC5tayBiL2xpYnMvaHd1aS9BbmRyb2lkLm1rCmluZGV4IDQxMWMxMzMuLjg4ZjExZGIgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9BbmRyb2lkLm1rCisrKyBiL2xpYnMvaHd1aS9BbmRyb2lkLm1rCkBAIC00LDEyICs0LDEzIEBACiAjIE9ubHkgYnVpbGQgbGliaHd1aSB3aGVuIFVTRV9PUEVOR0xfUkVOREVSRVIgaXMKICMgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBkZXZpY2UvYm9hcmQgY29uZmlndXJhdGlvbgogaWZlcSAoJChVU0VfT1BFTkdMX1JFTkRFUkVSKSx0cnVlKQotCUxPQ0FMX1NSQ19GSUxFUzo9IFwKKwlMT0NBTF9TUkNfRklMRVMgOj0gXAogCQl1dGlscy9CbHVyLmNwcCBcCiAJCXV0aWxzL1NvcnRlZExpc3RJbXBsLmNwcCBcCiAJCXRocmVhZC9UYXNrTWFuYWdlci5jcHAgXAogCQlmb250L0NhY2hlVGV4dHVyZS5jcHAgXAogCQlmb250L0ZvbnQuY3BwIFwKKwkJQW1iaWVudFNoYWRvdy5jcHAgXAogCQlBc3NldEF0bGFzLmNwcCBcCiAJCUZvbnRSZW5kZXJlci5jcHAgXAogCQlHYW1tYUZvbnRSZW5kZXJlci5jcHAgXApAQCAtMzcsMTQgKzM4LDIzIEBACiAJCVByb2dyYW1DYWNoZS5jcHAgXAogCQlSZW5kZXJCdWZmZXJDYWNoZS5jcHAgXAogCQlSZXNvdXJjZUNhY2hlLmNwcCBcCisJCVNoYWRvd1Rlc3NlbGxhdG9yLmNwcCBcCiAJCVNraWFDb2xvckZpbHRlci5jcHAgXAogCQlTa2lhU2hhZGVyLmNwcCBcCiAJCVNuYXBzaG90LmNwcCBcCisJCVNwb3RTaGFkb3cuY3BwIFwKKwkJU3RhdGVmdWxCYXNlUmVuZGVyZXIuY3BwIFwKIAkJU3RlbmNpbC5jcHAgXAogCQlUZXh0dXJlLmNwcCBcCiAJCVRleHR1cmVDYWNoZS5jcHAgXAogCQlUZXh0RHJvcFNoYWRvd0NhY2hlLmNwcAogCisJIyBSZW5kZXJUaHJlYWQgc3R1ZmYKKwlMT0NBTF9TUkNfRklMRVMgKz0gXAorCQlyZW5kZXJ0aHJlYWQvQ2FudmFzQ29udGV4dC5jcHAgXAorCQlyZW5kZXJ0aHJlYWQvUmVuZGVyVGFzay5jcHAgXAorCQlyZW5kZXJ0aHJlYWQvUmVuZGVyVGhyZWFkLmNwcAorCiAJaW50ZXJtZWRpYXRlcyA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFNUQVRJQ19MSUJSQVJJRVMsbGliUlMsVEFSR0VULCkKIAogCUxPQ0FMX0NfSU5DTFVERVMgKz0gXApAQCAtNTgsNiArNjgsNyBAQAogCQlleHRlcm5hbC9za2lhL2luY2x1ZGUvdXRpbHMKIAogCUxPQ0FMX0NGTEFHUyArPSAtRFVTRV9PUEVOR0xfUkVOREVSRVIgLURFR0xfRUdMRVhUX1BST1RPVFlQRVMgLURHTF9HTEVYVF9QUk9UT1RZUEVTCisJTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlcgogCUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBTSEFSRURfTElCUkFSSUVTCiAJTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJsb2cgbGliY3V0aWxzIGxpYnV0aWxzIGxpYkVHTCBsaWJHTEVTdjIgbGlic2tpYSBsaWJ1aQogCUxPQ0FMX01PRFVMRSA6PSBsaWJod3VpCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvQXNzZXRBdGxhcy5jcHAgYi9saWJzL2h3dWkvQXNzZXRBdGxhcy5jcHAKaW5kZXggZWI4YmI5Zi4uZmRkZmU5MCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0Fzc2V0QXRsYXMuY3BwCisrKyBiL2xpYnMvaHd1aS9Bc3NldEF0bGFzLmNwcApAQCAtNzQsMTIgKzc0LDEyIEBACiAvLyBFbnRyaWVzCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLUFzc2V0QXRsYXM6OkVudHJ5KiBBc3NldEF0bGFzOjpnZXRFbnRyeShTa0JpdG1hcCogY29uc3QgYml0bWFwKSBjb25zdCB7CitBc3NldEF0bGFzOjpFbnRyeSogQXNzZXRBdGxhczo6Z2V0RW50cnkoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCkgY29uc3QgewogICAgIHNzaXplX3QgaW5kZXggPSBtRW50cmllcy5pbmRleE9mS2V5KGJpdG1hcCk7CiAgICAgcmV0dXJuIGluZGV4ID49IDAgPyBtRW50cmllcy52YWx1ZUF0KGluZGV4KSA6IE5VTEw7CiB9CiAKLVRleHR1cmUqIEFzc2V0QXRsYXM6OmdldEVudHJ5VGV4dHVyZShTa0JpdG1hcCogY29uc3QgYml0bWFwKSBjb25zdCB7CitUZXh0dXJlKiBBc3NldEF0bGFzOjpnZXRFbnRyeVRleHR1cmUoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCkgY29uc3QgewogICAgIHNzaXplX3QgaW5kZXggPSBtRW50cmllcy5pbmRleE9mS2V5KGJpdG1hcCk7CiAgICAgcmV0dXJuIGluZGV4ID49IDAgPyBtRW50cmllcy52YWx1ZUF0KGluZGV4KS0+dGV4dHVyZSA6IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvQXNzZXRBdGxhcy5oIGIvbGlicy9od3VpL0Fzc2V0QXRsYXMuaAppbmRleCBhMjhlZmM2Li41N2M4YTYwIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvQXNzZXRBdGxhcy5oCisrKyBiL2xpYnMvaHd1aS9Bc3NldEF0bGFzLmgKQEAgLTE2MCwxMyArMTYwLDEzIEBACiAgICAgICogUmV0dXJucyB0aGUgZW50cnkgaW4gdGhlIGF0bGFzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCiAgICAgICogYml0bWFwLiBJZiB0aGUgYml0bWFwIGlzIG5vdCBpbiB0aGUgYXRsYXMsIHJldHVybiBOVUxMLgogICAgICAqLwotICAgIEVudHJ5KiBnZXRFbnRyeShTa0JpdG1hcCogY29uc3QgYml0bWFwKSBjb25zdDsKKyAgICBFbnRyeSogZ2V0RW50cnkoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0ZXh0dXJlIGZvciB0aGUgYXRsYXMgZW50cnkgYXNzb2NpYXRlZCB3aXRoIHRoZQogICAgICAqIHNwZWNpZmllZCBiaXRtYXAuIElmIHRoZSBiaXRtYXAgaXMgbm90IGluIHRoZSBhdGxhcywgcmV0dXJuIE5VTEwuCiAgICAgICovCi0gICAgVGV4dHVyZSogZ2V0RW50cnlUZXh0dXJlKFNrQml0bWFwKiBjb25zdCBiaXRtYXApIGNvbnN0OworICAgIFRleHR1cmUqIGdldEVudHJ5VGV4dHVyZShjb25zdCBTa0JpdG1hcCogYml0bWFwKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiBpZCBvZiB0aGUgYXRsYXMuCkBAIC0xODYsNyArMTg2LDcgQEAKICAgICBjb25zdCBib29sIG1CbGVuZEtleTsKICAgICBjb25zdCBib29sIG1PcGFxdWVLZXk7CiAKLSAgICBLZXllZFZlY3RvcjxTa0JpdG1hcCosIEVudHJ5Kj4gbUVudHJpZXM7CisgICAgS2V5ZWRWZWN0b3I8Y29uc3QgU2tCaXRtYXAqLCBFbnRyeSo+IG1FbnRyaWVzOwogfTsgLy8gY2xhc3MgQXNzZXRBdGxhcwogCiB9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0NhY2hlcy5jcHAgYi9saWJzL2h3dWkvQ2FjaGVzLmNwcAppbmRleCBmOGQzNTg5Li4yZTc5OTBlIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvQ2FjaGVzLmNwcAorKysgYi9saWJzL2h3dWkvQ2FjaGVzLmNwcApAQCAtNTUsNiArNTUsNyBAQAogICAgIGluaXRQcm9wZXJ0aWVzKCk7CiAgICAgaW5pdFN0YXRpY1Byb3BlcnRpZXMoKTsKICAgICBpbml0RXh0ZW5zaW9ucygpOworICAgIGluaXRUZW1wUHJvcGVydGllcygpOwogCiAgICAgbURlYnVnTGV2ZWwgPSByZWFkRGVidWdMZXZlbCgpOwogICAgIEFMT0dEKCJFbmFibGluZyBkZWJ1ZyBtb2RlICVkIiwgbURlYnVnTGV2ZWwpOwpAQCAtNDczLDcgKzQ3NCw3IEBACiAvLyBNZXNoZXMgYW5kIHRleHR1cmVzCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLXZvaWQgQ2FjaGVzOjpiaW5kUG9zaXRpb25WZXJ0ZXhQb2ludGVyKGJvb2wgZm9yY2UsIEdMdm9pZCogdmVydGljZXMsIEdMc2l6ZWkgc3RyaWRlKSB7Cit2b2lkIENhY2hlczo6YmluZFBvc2l0aW9uVmVydGV4UG9pbnRlcihib29sIGZvcmNlLCBjb25zdCBHTHZvaWQqIHZlcnRpY2VzLCBHTHNpemVpIHN0cmlkZSkgewogICAgIGlmIChmb3JjZSB8fCB2ZXJ0aWNlcyAhPSBtQ3VycmVudFBvc2l0aW9uUG9pbnRlciB8fCBzdHJpZGUgIT0gbUN1cnJlbnRQb3NpdGlvblN0cmlkZSkgewogICAgICAgICBHTHVpbnQgc2xvdCA9IGN1cnJlbnRQcm9ncmFtLT5wb3NpdGlvbjsKICAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNsb3QsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgc3RyaWRlLCB2ZXJ0aWNlcyk7CkBAIC00ODIsNyArNDgzLDcgQEAKICAgICB9CiB9CiAKLXZvaWQgQ2FjaGVzOjpiaW5kVGV4Q29vcmRzVmVydGV4UG9pbnRlcihib29sIGZvcmNlLCBHTHZvaWQqIHZlcnRpY2VzLCBHTHNpemVpIHN0cmlkZSkgewordm9pZCBDYWNoZXM6OmJpbmRUZXhDb29yZHNWZXJ0ZXhQb2ludGVyKGJvb2wgZm9yY2UsIGNvbnN0IEdMdm9pZCogdmVydGljZXMsIEdMc2l6ZWkgc3RyaWRlKSB7CiAgICAgaWYgKGZvcmNlIHx8IHZlcnRpY2VzICE9IG1DdXJyZW50VGV4Q29vcmRzUG9pbnRlciB8fCBzdHJpZGUgIT0gbUN1cnJlbnRUZXhDb29yZHNTdHJpZGUpIHsKICAgICAgICAgR0x1aW50IHNsb3QgPSBjdXJyZW50UHJvZ3JhbS0+dGV4Q29vcmRzOwogICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIoc2xvdCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCBzdHJpZGUsIHZlcnRpY2VzKTsKQEAgLTY3Niw1ICs2NzcsMzYgQEAKICAgICByZXR1cm4gbVJlZ2lvbk1lc2g7CiB9CiAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRlbXBvcmFyeSBQcm9wZXJ0aWVzCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3ZvaWQgQ2FjaGVzOjppbml0VGVtcFByb3BlcnRpZXMoKSB7CisgICAgcHJvcGVydHlEaXJ0eVZpZXdwb3J0ID0gZmFsc2U7CisgICAgcHJvcGVydHlFbmFibGUzZCA9IGZhbHNlOworICAgIHByb3BlcnR5Q2FtZXJhRGlzdGFuY2UgPSAxLjBmOworICAgIHByb3BlcnR5U2hhZG93U3RyZW5ndGggPSAweDNmOworfQorCit2b2lkIENhY2hlczo6c2V0VGVtcFByb3BlcnR5KGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKSB7CisgICAgQUxPR0QoInNldHRpbmcgcHJvcGVydHkgJXMgdG8gJXMiLCBuYW1lLCB2YWx1ZSk7CisgICAgaWYgKCFzdHJjbXAobmFtZSwgImVuYWJsZTNkIikpIHsKKyAgICAgICAgcHJvcGVydHlFbmFibGUzZCA9ICFzdHJjbXAodmFsdWUsICJ0cnVlIik7CisgICAgICAgIHByb3BlcnR5RGlydHlWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIEFMT0dEKCJlbmFibGUzZCA9ICVkIiwgcHJvcGVydHlFbmFibGUzZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNhbWVyYURpc3RhbmNlIikpIHsKKyAgICAgICAgcHJvcGVydHlDYW1lcmFEaXN0YW5jZSA9IGZtaW4oZm1heChhdG9mKHZhbHVlKSwgMC4wMDEpLCAxMCk7CisgICAgICAgIHByb3BlcnR5RGlydHlWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIEFMT0dEKCJjYW1lcmEgZGlzdCBtdWx0aXBsaWVyID0gJS4yZiIsIHByb3BlcnR5Q2FtZXJhRGlzdGFuY2UpOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJzaGFkb3dTdHJlbmd0aCIpKSB7CisgICAgICAgIHByb3BlcnR5U2hhZG93U3RyZW5ndGggPSBhdG9pKHZhbHVlKTsKKyAgICAgICAgQUxPR0QoInNoYWRvdyBzdHJlbmd0aCA9IDB4JXggb3V0IG9mIDB4ZmYiLCBwcm9wZXJ0eVNoYWRvd1N0cmVuZ3RoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBTE9HRCgiICAgIGZhaWxlZCIpOworfQorCiB9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgogfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9DYWNoZXMuaCBiL2xpYnMvaHd1aS9DYWNoZXMuaAppbmRleCAyODJhZWU5Li4wMWU4ZDg0IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvQ2FjaGVzLmgKKysrIGIvbGlicy9od3VpL0NhY2hlcy5oCkBAIC02Miw3ICs2Miw3IEBACiBzdGF0aWMgY29uc3QgdWludDMyX3QgZ01heE51bWJlck9mUXVhZHMgPSAyMDQ4OwogCiAvLyBHZW5lcmF0ZXMgc2ltcGxlIGFuZCB0ZXh0dXJlZCB2ZXJ0aWNlcwotI2RlZmluZSBGVih4LCB5LCB1LCB2KSB7IHsgeCwgeSB9LCB7IHUsIHYgfSB9CisjZGVmaW5lIEZWKHgsIHksIHUsIHYpIHsgeCwgeSwgdSwgdiB9CiAKIC8vIFRoaXMgYXJyYXkgaXMgbmV2ZXIgdXNlZCBkaXJlY3RseSBidXQgdXNlZCBhcyBhIG1lbWNweSBzb3VyY2UgaW4gdGhlCiAvLyBPcGVuR0xSZW5kZXJlciBjb25zdHJ1Y3RvcgpAQCAtMjA4LDEzICsyMDgsMTMgQEAKICAgICAgKiBCaW5kcyBhbiBhdHRyaWIgdG8gdGhlIHNwZWNpZmllZCBmbG9hdCB2ZXJ0ZXggcG9pbnRlci4KICAgICAgKiBBc3N1bWVzIGEgc3RyaWRlIG9mIGdNZXNoU3RyaWRlIGFuZCBhIHNpemUgb2YgMi4KICAgICAgKi8KLSAgICB2b2lkIGJpbmRQb3NpdGlvblZlcnRleFBvaW50ZXIoYm9vbCBmb3JjZSwgR0x2b2lkKiB2ZXJ0aWNlcywgR0xzaXplaSBzdHJpZGUgPSBnTWVzaFN0cmlkZSk7CisgICAgdm9pZCBiaW5kUG9zaXRpb25WZXJ0ZXhQb2ludGVyKGJvb2wgZm9yY2UsIGNvbnN0IEdMdm9pZCogdmVydGljZXMsIEdMc2l6ZWkgc3RyaWRlID0gZ01lc2hTdHJpZGUpOwogCiAgICAgLyoqCiAgICAgICogQmluZHMgYW4gYXR0cmliIHRvIHRoZSBzcGVjaWZpZWQgZmxvYXQgdmVydGV4IHBvaW50ZXIuCiAgICAgICogQXNzdW1lcyBhIHN0cmlkZSBvZiBnTWVzaFN0cmlkZSBhbmQgYSBzaXplIG9mIDIuCiAgICAgICovCi0gICAgdm9pZCBiaW5kVGV4Q29vcmRzVmVydGV4UG9pbnRlcihib29sIGZvcmNlLCBHTHZvaWQqIHZlcnRpY2VzLCBHTHNpemVpIHN0cmlkZSA9IGdNZXNoU3RyaWRlKTsKKyAgICB2b2lkIGJpbmRUZXhDb29yZHNWZXJ0ZXhQb2ludGVyKGJvb2wgZm9yY2UsIGNvbnN0IEdMdm9pZCogdmVydGljZXMsIEdMc2l6ZWkgc3RyaWRlID0gZ01lc2hTdHJpZGUpOwogCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSB2ZXJ0ZXggcG9pbnRlcnMuCkBAIC0zNTMsNiArMzUzLDE0IEBACiAgICAgUEZOR0xMQUJFTE9CSkVDVEVYVFBST0Mgc2V0TGFiZWw7CiAgICAgUEZOR0xHRVRPQkpFQ1RMQUJFTEVYVFBST0MgZ2V0TGFiZWw7CiAKKyAgICAvLyBURU1QT1JBUlkgcHJvcGVydGllcworICAgIHZvaWQgaW5pdFRlbXBQcm9wZXJ0aWVzKCk7CisgICAgdm9pZCBzZXRUZW1wUHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpOworICAgIGJvb2wgcHJvcGVydHlFbmFibGUzZDsKKyAgICBib29sIHByb3BlcnR5RGlydHlWaWV3cG9ydDsgLy8gZmxhZyBzZXQgd2hlbiBkaXJ0eWluZyB0aGUgdmlld3BvcnQKKyAgICBmbG9hdCBwcm9wZXJ0eUNhbWVyYURpc3RhbmNlOworICAgIGludCBwcm9wZXJ0eVNoYWRvd1N0cmVuZ3RoOworCiBwcml2YXRlOgogICAgIGVudW0gT3ZlcmRyYXdDb2xvclNldCB7CiAgICAgICAgIGtDb2xvclNldF9EZWZhdWx0ID0gMCwKQEAgLTM3OSw5ICszODcsOSBAQAogICAgIEdMdWludCBtQ3VycmVudEJ1ZmZlcjsKICAgICBHTHVpbnQgbUN1cnJlbnRJbmRpY2VzQnVmZmVyOwogICAgIEdMdWludCBtQ3VycmVudFBpeGVsQnVmZmVyOwotICAgIHZvaWQqIG1DdXJyZW50UG9zaXRpb25Qb2ludGVyOworICAgIGNvbnN0IHZvaWQqIG1DdXJyZW50UG9zaXRpb25Qb2ludGVyOwogICAgIEdMc2l6ZWkgbUN1cnJlbnRQb3NpdGlvblN0cmlkZTsKLSAgICB2b2lkKiBtQ3VycmVudFRleENvb3Jkc1BvaW50ZXI7CisgICAgY29uc3Qgdm9pZCogbUN1cnJlbnRUZXhDb29yZHNQb2ludGVyOwogICAgIEdMc2l6ZWkgbUN1cnJlbnRUZXhDb29yZHNTdHJpZGU7CiAKICAgICBib29sIG1UZXhDb29yZHNBcnJheUVuYWJsZWQ7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvRGVidWcuaCBiL2xpYnMvaHd1aS9EZWJ1Zy5oCmluZGV4IDc4NmYxMmEuLmQ2ZGM2YWQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9EZWJ1Zy5oCisrKyBiL2xpYnMvaHd1aS9EZWJ1Zy5oCkBAIC04NSw2ICs4NSw5IEBACiAvLyBUdXJuIG9uIHRvIGhpZ2hsaWdodCBkcmF3aW5nIGJhdGNoZXMgYW5kIG1lcmdlZCBiYXRjaGVzIHdpdGggZGlmZmVyZW50IGNvbG9ycwogI2RlZmluZSBERUJVR19NRVJHRV9CRUhBVklPUiAwCiAKKy8vIFR1cm4gb24gdG8gZW5hYmxlIGRlYnVnZ2luZyBzaGFkb3cKKyNkZWZpbmUgREVCVUdfU0hBRE9XIDAKKwogI2lmIERFQlVHX0lOSVQKICAgICAjZGVmaW5lIElOSVRfTE9HRCguLi4pIEFMT0dEKF9fVkFfQVJHU19fKQogI2Vsc2UKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9EZWZlcnJlZERpc3BsYXlMaXN0LmggYi9saWJzL2h3dWkvRGVmZXJyZWREaXNwbGF5TGlzdC5oCmluZGV4IDNkY2JkMGIuLmZjYTM1ODggMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9EZWZlcnJlZERpc3BsYXlMaXN0LmgKKysrIGIvbGlicy9od3VpL0RlZmVycmVkRGlzcGxheUxpc3QuaApAQCAtNzksMTMgKzc5LDEzIEBACiB9OwogCiBjbGFzcyBEZWZlcnJlZERpc3BsYXlMaXN0IHsKKyAgICBmcmllbmQgY2xhc3MgRGVmZXJTdGF0ZVN0cnVjdDsgLy8gdXNlZCB0byBnaXZlIGFjY2VzcyB0byBhbGxvY2F0b3IKIHB1YmxpYzoKICAgICBEZWZlcnJlZERpc3BsYXlMaXN0KGNvbnN0IFJlY3QmIGJvdW5kcywgYm9vbCBhdm9pZE92ZXJkcmF3ID0gdHJ1ZSkgOgogICAgICAgICAgICAgbUJvdW5kcyhib3VuZHMpLCBtQXZvaWRPdmVyZHJhdyhhdm9pZE92ZXJkcmF3KSB7CiAgICAgICAgIGNsZWFyKCk7CiAgICAgfQogICAgIH5EZWZlcnJlZERpc3BsYXlMaXN0KCkgeyBjbGVhcigpOyB9Ci0gICAgdm9pZCByZXNldChjb25zdCBSZWN0JiBib3VuZHMpIHsgbUJvdW5kcy5zZXQoYm91bmRzKTsgfQogCiAgICAgZW51bSBPcEJhdGNoSWQgewogICAgICAgICBrT3BCYXRjaF9Ob25lID0gMCwgLy8gRG9uJ3QgYmF0Y2gKQEAgLTEyMCw2ICsxMjAsOCBAQAogICAgIHZvaWQgYWRkRHJhd09wKE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgRHJhd09wKiBvcCk7CiAKIHByaXZhdGU6CisgICAgRGVmZXJyZWREaXNwbGF5TGlzdChjb25zdCBEZWZlcnJlZERpc3BsYXlMaXN0JiBvdGhlcik7IC8vIGRpc2FsbG93IGNvcHkKKwogICAgIERlZmVycmVkRGlzcGxheVN0YXRlKiBjcmVhdGVTdGF0ZSgpIHsKICAgICAgICAgcmV0dXJuIG5ldyAobUFsbG9jYXRvcikgRGVmZXJyZWREaXNwbGF5U3RhdGUoKTsKICAgICB9CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvRGlzcGxheUxpc3QuY3BwIGIvbGlicy9od3VpL0Rpc3BsYXlMaXN0LmNwcAppbmRleCBiYjY1MjZlLi5hMTU2MzQxIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvRGlzcGxheUxpc3QuY3BwCisrKyBiL2xpYnMvaHd1aS9EaXNwbGF5TGlzdC5jcHAKQEAgLTE0LDcgKzE0LDEyIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCisjZGVmaW5lIEFUUkFDRV9UQUcgQVRSQUNFX1RBR19WSUVXCisKICNpbmNsdWRlIDxTa0NhbnZhcy5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworI2luY2x1ZGUgPHV0aWxzL1RyYWNlLmg+CiAKICNpbmNsdWRlICJEZWJ1Zy5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCkBAIC02NSwxMSArNzAsNiBAQAogdm9pZCBEaXNwbGF5TGlzdDo6Y2xlYXJSZXNvdXJjZXMoKSB7CiAgICAgbURpc3BsYXlMaXN0RGF0YSA9IE5VTEw7CiAKLSAgICBtQ2xpcFJlY3RPcCA9IE5VTEw7Ci0gICAgbVNhdmVMYXllck9wID0gTlVMTDsKLSAgICBtU2F2ZU9wID0gTlVMTDsKLSAgICBtUmVzdG9yZVRvQ291bnRPcCA9IE5VTEw7Ci0KICAgICBkZWxldGUgbVRyYW5zZm9ybU1hdHJpeDsKICAgICBkZWxldGUgbVRyYW5zZm9ybUNhbWVyYTsKICAgICBkZWxldGUgbVRyYW5zZm9ybU1hdHJpeDNEOwpAQCAtOTEsNyArOTEsNyBAQAogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbU93bmVkQml0bWFwUmVzb3VyY2VzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFNrQml0bWFwKiBiaXRtYXAgPSBtT3duZWRCaXRtYXBSZXNvdXJjZXMuaXRlbUF0KGkpOworICAgICAgICBjb25zdCBTa0JpdG1hcCogYml0bWFwID0gbU93bmVkQml0bWFwUmVzb3VyY2VzLml0ZW1BdChpKTsKICAgICAgICAgY2FjaGVzLnJlc291cmNlQ2FjaGUuZGVjcmVtZW50UmVmY291bnRMb2NrZWQoYml0bWFwKTsKICAgICAgICAgY2FjaGVzLnJlc291cmNlQ2FjaGUuZGVzdHJ1Y3RvckxvY2tlZChiaXRtYXApOwogICAgIH0KQEAgLTE2OCwzMyArMTY4LDIyIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBhbGxvY2F0ZSByZXVzYWJsZSBvcHMgZm9yIHN0YXRlLWRlZmVycmFsCi0gICAgTGluZWFyQWxsb2NhdG9yJiBhbGxvYyA9IG1EaXNwbGF5TGlzdERhdGEtPmFsbG9jYXRvcjsKLSAgICBtQ2xpcFJlY3RPcCA9IG5ldyAoYWxsb2MpIENsaXBSZWN0T3AoKTsKLSAgICBtU2F2ZUxheWVyT3AgPSBuZXcgKGFsbG9jKSBTYXZlTGF5ZXJPcCgpOwotICAgIG1TYXZlT3AgPSBuZXcgKGFsbG9jKSBTYXZlT3AoKTsKLSAgICBtUmVzdG9yZVRvQ291bnRPcCA9IG5ldyAoYWxsb2MpIFJlc3RvcmVUb0NvdW50T3AoKTsKLSAgICBpZiAoQ0NfVU5MSUtFTFkoIW1TYXZlT3ApKSB7IC8vIHRlbXBvcmFyeSBkZWJ1ZyBsb2dnaW5nCi0gICAgICAgIEFMT0dXKCJFcnJvcjogJXMncyBTYXZlT3Agbm90IGFsbG9jYXRlZCwgc2l6ZSAlZCIsIGdldE5hbWUoKSwgbVNpemUpOwotICAgICAgICBDUkFTSCgpOwotICAgIH0KLQogICAgIG1GdW5jdG9yQ291bnQgPSByZWNvcmRlci5nZXRGdW5jdG9yQ291bnQoKTsKIAogICAgIENhY2hlcyYgY2FjaGVzID0gQ2FjaGVzOjpnZXRJbnN0YW5jZSgpOwogICAgIGNhY2hlcy5yZWdpc3RlckZ1bmN0b3JzKG1GdW5jdG9yQ291bnQpOwogICAgIGNhY2hlcy5yZXNvdXJjZUNhY2hlLmxvY2soKTsKIAotICAgIGNvbnN0IFZlY3RvcjxTa0JpdG1hcCo+JiBiaXRtYXBSZXNvdXJjZXMgPSByZWNvcmRlci5nZXRCaXRtYXBSZXNvdXJjZXMoKTsKKyAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2tCaXRtYXAqPiYgYml0bWFwUmVzb3VyY2VzID0gcmVjb3JkZXIuZ2V0Qml0bWFwUmVzb3VyY2VzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBiaXRtYXBSZXNvdXJjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgU2tCaXRtYXAqIHJlc291cmNlID0gYml0bWFwUmVzb3VyY2VzLml0ZW1BdChpKTsKKyAgICAgICAgY29uc3QgU2tCaXRtYXAqIHJlc291cmNlID0gYml0bWFwUmVzb3VyY2VzLml0ZW1BdChpKTsKICAgICAgICAgbUJpdG1hcFJlc291cmNlcy5hZGQocmVzb3VyY2UpOwogICAgICAgICBjYWNoZXMucmVzb3VyY2VDYWNoZS5pbmNyZW1lbnRSZWZjb3VudExvY2tlZChyZXNvdXJjZSk7CiAgICAgfQogCi0gICAgY29uc3QgVmVjdG9yPFNrQml0bWFwKj4gJm93bmVkQml0bWFwUmVzb3VyY2VzID0gcmVjb3JkZXIuZ2V0T3duZWRCaXRtYXBSZXNvdXJjZXMoKTsKKyAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2tCaXRtYXAqPiYgb3duZWRCaXRtYXBSZXNvdXJjZXMgPSByZWNvcmRlci5nZXRPd25lZEJpdG1hcFJlc291cmNlcygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3duZWRCaXRtYXBSZXNvdXJjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgU2tCaXRtYXAqIHJlc291cmNlID0gb3duZWRCaXRtYXBSZXNvdXJjZXMuaXRlbUF0KGkpOworICAgICAgICBjb25zdCBTa0JpdG1hcCogcmVzb3VyY2UgPSBvd25lZEJpdG1hcFJlc291cmNlcy5pdGVtQXQoaSk7CiAgICAgICAgIG1Pd25lZEJpdG1hcFJlc291cmNlcy5hZGQocmVzb3VyY2UpOwogICAgICAgICBjYWNoZXMucmVzb3VyY2VDYWNoZS5pbmNyZW1lbnRSZWZjb3VudExvY2tlZChyZXNvdXJjZSk7CiAgICAgfQpAQCAtMjA2LDkgKzE5NSw5IEBACiAgICAgICAgIGNhY2hlcy5yZXNvdXJjZUNhY2hlLmluY3JlbWVudFJlZmNvdW50TG9ja2VkKHJlc291cmNlKTsKICAgICB9CiAKLSAgICBjb25zdCBWZWN0b3I8UmVzX3BuZ185cGF0Y2gqPiYgcGF0Y2hSZXNvdXJjZXMgPSByZWNvcmRlci5nZXRQYXRjaFJlc291cmNlcygpOworICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBSZXNfcG5nXzlwYXRjaCo+JiBwYXRjaFJlc291cmNlcyA9IHJlY29yZGVyLmdldFBhdGNoUmVzb3VyY2VzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXRjaFJlc291cmNlcy5zaXplKCk7IGkrKykgewotICAgICAgICBSZXNfcG5nXzlwYXRjaCogcmVzb3VyY2UgPSBwYXRjaFJlc291cmNlcy5pdGVtQXQoaSk7CisgICAgICAgIGNvbnN0IFJlc19wbmdfOXBhdGNoKiByZXNvdXJjZSA9IHBhdGNoUmVzb3VyY2VzLml0ZW1BdChpKTsKICAgICAgICAgbVBhdGNoUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CiAgICAgICAgIGNhY2hlcy5yZXNvdXJjZUNhY2hlLmluY3JlbWVudFJlZmNvdW50TG9ja2VkKHJlc291cmNlKTsKICAgICB9CkBAIC0yMjAsNyArMjA5LDcgQEAKICAgICAgICAgY2FjaGVzLnJlc291cmNlQ2FjaGUuaW5jcmVtZW50UmVmY291bnRMb2NrZWQocmVzb3VyY2UpOwogICAgIH0KIAotICAgIGNvbnN0IFNvcnRlZFZlY3RvcjxTa1BhdGgqPiYgc291cmNlUGF0aHMgPSByZWNvcmRlci5nZXRTb3VyY2VQYXRocygpOworICAgIGNvbnN0IFNvcnRlZFZlY3Rvcjxjb25zdCBTa1BhdGgqPiYgc291cmNlUGF0aHMgPSByZWNvcmRlci5nZXRTb3VyY2VQYXRocygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlUGF0aHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgbVNvdXJjZVBhdGhzLmFkZChzb3VyY2VQYXRocy5pdGVtQXQoaSkpOwogICAgICAgICBjYWNoZXMucmVzb3VyY2VDYWNoZS5pbmNyZW1lbnRSZWZjb3VudExvY2tlZChzb3VyY2VQYXRocy5pdGVtQXQoaSkpOwpAQCAtMjQ5LDEwICsyMzgsMTMgQEAKICAgICBtUmlnaHQgPSAwOwogICAgIG1Cb3R0b20gPSAwOwogICAgIG1DbGlwVG9Cb3VuZHMgPSB0cnVlOworICAgIG1Jc0NvbnRhaW5lZFZvbHVtZSA9IHRydWU7CisgICAgbVByb2plY3RUb0NvbnRhaW5lZFZvbHVtZSA9IGZhbHNlOwogICAgIG1BbHBoYSA9IDE7CiAgICAgbUhhc092ZXJsYXBwaW5nUmVuZGVyaW5nID0gdHJ1ZTsKICAgICBtVHJhbnNsYXRpb25YID0gMDsKICAgICBtVHJhbnNsYXRpb25ZID0gMDsKKyAgICBtVHJhbnNsYXRpb25aID0gMDsKICAgICBtUm90YXRpb24gPSAwOwogICAgIG1Sb3RhdGlvblggPSAwOwogICAgIG1Sb3RhdGlvblk9IDA7CkBAIC0zMjAsMjcgKzMxMiwzOCBAQAogICAgICAgICAgICAgICAgICAgICBtUGl2b3RZID0gbVByZXZIZWlnaHQgLyAyLjBmOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgobU1hdHJpeEZsYWdzICYgUk9UQVRJT05fM0QpID09IDApIHsKKyAgICAgICAgICAgIGlmICghQ2FjaGVzOjpnZXRJbnN0YW5jZSgpLnByb3BlcnR5RW5hYmxlM2QgJiYgKG1NYXRyaXhGbGFncyAmIFJPVEFUSU9OXzNEKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybU1hdHJpeC0+c2V0VHJhbnNsYXRlKG1UcmFuc2xhdGlvblgsIG1UcmFuc2xhdGlvblkpOwogICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1NYXRyaXgtPnByZVJvdGF0ZShtUm90YXRpb24sIG1QaXZvdFgsIG1QaXZvdFkpOwogICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1NYXRyaXgtPnByZVNjYWxlKG1TY2FsZVgsIG1TY2FsZVksIG1QaXZvdFgsIG1QaXZvdFkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1UcmFuc2Zvcm1DYW1lcmEpIHsKLSAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybUNhbWVyYSA9IG5ldyBTazNEVmlldygpOwotICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtTWF0cml4M0QgPSBuZXcgU2tNYXRyaXgoKTsKKyAgICAgICAgICAgICAgICBpZiAoQ2FjaGVzOjpnZXRJbnN0YW5jZSgpLnByb3BlcnR5RW5hYmxlM2QpIHsKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybS5sb2FkVHJhbnNsYXRlKG1QaXZvdFggKyBtVHJhbnNsYXRpb25YLCBtUGl2b3RZICsgbVRyYW5zbGF0aW9uWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNsYXRpb25aKTsKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybS5yb3RhdGUobVJvdGF0aW9uWCwgMSwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm0ucm90YXRlKG1Sb3RhdGlvblksIDAsIDEsIDApOworICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtLnJvdGF0ZShtUm90YXRpb24sIDAsIDAsIDEpOworICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtLnNjYWxlKG1TY2FsZVgsIG1TY2FsZVksIDEpOworICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtLnRyYW5zbGF0ZSgtbVBpdm90WCwgLW1QaXZvdFkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFRPRE86IHN1cHBvcnQgdGhpcyBvbGQgdHJhbnNmb3JtIGFwcHJvYWNoLCBiYXNlZCBvbiBBUEkgbGV2ZWwgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtVHJhbnNmb3JtQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtQ2FtZXJhID0gbmV3IFNrM0RWaWV3KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtTWF0cml4M0QgPSBuZXcgU2tNYXRyaXgoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtTWF0cml4LT5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtQ2FtZXJhLT5zYXZlKCk7CisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1NYXRyaXgtPnByZVNjYWxlKG1TY2FsZVgsIG1TY2FsZVksIG1QaXZvdFgsIG1QaXZvdFkpOworICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtQ2FtZXJhLT5yb3RhdGVYKG1Sb3RhdGlvblgpOworICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtQ2FtZXJhLT5yb3RhdGVZKG1Sb3RhdGlvblkpOworICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtQ2FtZXJhLT5yb3RhdGVaKC1tUm90YXRpb24pOworICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtQ2FtZXJhLT5nZXRNYXRyaXgobVRyYW5zZm9ybU1hdHJpeDNEKTsKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybU1hdHJpeDNELT5wcmVUcmFuc2xhdGUoLW1QaXZvdFgsIC1tUGl2b3RZKTsKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybU1hdHJpeDNELT5wb3N0VHJhbnNsYXRlKG1QaXZvdFggKyBtVHJhbnNsYXRpb25YLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1QaXZvdFkgKyBtVHJhbnNsYXRpb25ZKTsKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybU1hdHJpeC0+cG9zdENvbmNhdCgqbVRyYW5zZm9ybU1hdHJpeDNEKTsKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybUNhbWVyYS0+cmVzdG9yZSgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtTWF0cml4LT5yZXNldCgpOwotICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1DYW1lcmEtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtTWF0cml4LT5wcmVTY2FsZShtU2NhbGVYLCBtU2NhbGVZLCBtUGl2b3RYLCBtUGl2b3RZKTsKLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtQ2FtZXJhLT5yb3RhdGVYKG1Sb3RhdGlvblgpOwotICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1DYW1lcmEtPnJvdGF0ZVkobVJvdGF0aW9uWSk7Ci0gICAgICAgICAgICAgICAgbVRyYW5zZm9ybUNhbWVyYS0+cm90YXRlWigtbVJvdGF0aW9uKTsKLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtQ2FtZXJhLT5nZXRNYXRyaXgobVRyYW5zZm9ybU1hdHJpeDNEKTsKLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtTWF0cml4M0QtPnByZVRyYW5zbGF0ZSgtbVBpdm90WCwgLW1QaXZvdFkpOwotICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1NYXRyaXgzRC0+cG9zdFRyYW5zbGF0ZShtUGl2b3RYICsgbVRyYW5zbGF0aW9uWCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QaXZvdFkgKyBtVHJhbnNsYXRpb25ZKTsKLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtTWF0cml4LT5wb3N0Q29uY2F0KCptVHJhbnNmb3JtTWF0cml4M0QpOwotICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1DYW1lcmEtPnJlc3RvcmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtTWF0cml4RGlydHkgPSBmYWxzZTsKQEAgLTQxNSwxMCArNDE4LDE5IEBACiAgICAgICAgIHJlbmRlcmVyLmNvbmNhdE1hdHJpeChtQW5pbWF0aW9uTWF0cml4KTsKICAgICB9CiAgICAgaWYgKG1NYXRyaXhGbGFncyAhPSAwKSB7Ci0gICAgICAgIGlmIChtTWF0cml4RmxhZ3MgPT0gVFJBTlNMQVRJT04pIHsKLSAgICAgICAgICAgIHJlbmRlcmVyLnRyYW5zbGF0ZShtVHJhbnNsYXRpb25YLCBtVHJhbnNsYXRpb25ZKTsKKyAgICAgICAgaWYgKENhY2hlczo6Z2V0SW5zdGFuY2UoKS5wcm9wZXJ0eUVuYWJsZTNkKSB7CisgICAgICAgICAgICBpZiAobU1hdHJpeEZsYWdzID09IFRSQU5TTEFUSU9OKSB7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIudHJhbnNsYXRlKG1UcmFuc2xhdGlvblgsIG1UcmFuc2xhdGlvblksIG1UcmFuc2xhdGlvblopOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZW5kZXJlci5jb25jYXRNYXRyaXgobVRyYW5zZm9ybSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZW5kZXJlci5jb25jYXRNYXRyaXgobVRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgICAgICAvLyBhdm9pZCBzZXR0aW5nIHRyYW5zbGF0aW9uWiwgdXNlIFNrTWF0cml4CisgICAgICAgICAgICBpZiAobU1hdHJpeEZsYWdzID09IFRSQU5TTEFUSU9OKSB7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIudHJhbnNsYXRlKG1UcmFuc2xhdGlvblgsIG1UcmFuc2xhdGlvblksIDApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZW5kZXJlci5jb25jYXRNYXRyaXgobVRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgYm9vbCBjbGlwVG9Cb3VuZHNOZWVkZWQgPSBtQ2FjaGluZyA/IGZhbHNlIDogbUNsaXBUb0JvdW5kczsKQEAgLTQzNiwxNCArNDQ4LDEzMSBAQAogICAgICAgICAgICAgICAgIHNhdmVGbGFncyB8PSBTa0NhbnZhczo6a0NsaXBUb0xheWVyX1NhdmVGbGFnOwogICAgICAgICAgICAgICAgIGNsaXBUb0JvdW5kc05lZWRlZCA9IGZhbHNlOyAvLyBjbGlwcGluZyBkb25lIGJ5IHNhdmVMYXllcgogICAgICAgICAgICAgfQotICAgICAgICAgICAgaGFuZGxlcihtU2F2ZUxheWVyT3AtPnJlaW5pdCgwLCAwLCBtUmlnaHQgLSBtTGVmdCwgbUJvdHRvbSAtIG1Ub3AsCi0gICAgICAgICAgICAgICAgICAgIG1BbHBoYSAqIDI1NSwgU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZSwgc2F2ZUZsYWdzKSwgUFJPUEVSVFlfU0FWRUNPVU5ULAotICAgICAgICAgICAgICAgICAgICBtQ2xpcFRvQm91bmRzKTsKKworICAgICAgICAgICAgU2F2ZUxheWVyT3AqIG9wID0gbmV3IChoYW5kbGVyLmFsbG9jYXRvcigpKSBTYXZlTGF5ZXJPcCgKKyAgICAgICAgICAgICAgICAgICAgMCwgMCwgbVJpZ2h0IC0gbUxlZnQsIG1Cb3R0b20gLSBtVG9wLAorICAgICAgICAgICAgICAgICAgICBtQWxwaGEgKiAyNTUsIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUsIHNhdmVGbGFncyk7CisgICAgICAgICAgICBoYW5kbGVyKG9wLCBQUk9QRVJUWV9TQVZFQ09VTlQsIG1DbGlwVG9Cb3VuZHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChjbGlwVG9Cb3VuZHNOZWVkZWQpIHsKLSAgICAgICAgaGFuZGxlcihtQ2xpcFJlY3RPcC0+cmVpbml0KDAsIDAsIG1SaWdodCAtIG1MZWZ0LCBtQm90dG9tIC0gbVRvcCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApLAotICAgICAgICAgICAgICAgIFBST1BFUlRZX1NBVkVDT1VOVCwgbUNsaXBUb0JvdW5kcyk7CisgICAgICAgIENsaXBSZWN0T3AqIG9wID0gbmV3IChoYW5kbGVyLmFsbG9jYXRvcigpKSBDbGlwUmVjdE9wKDAsIDAsCisgICAgICAgICAgICAgICAgbVJpZ2h0IC0gbUxlZnQsIG1Cb3R0b20gLSBtVG9wLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7CisgICAgICAgIGhhbmRsZXIob3AsIFBST1BFUlRZX1NBVkVDT1VOVCwgbUNsaXBUb0JvdW5kcyk7CisgICAgfQorfQorCisvKioKKyAqIEFwcGx5IHByb3BlcnR5LWJhc2VkIHRyYW5zZm9ybWF0aW9ucyB0byBpbnB1dCBtYXRyaXgKKyAqLwordm9pZCBEaXNwbGF5TGlzdDo6YXBwbHlWaWV3UHJvcGVydHlUcmFuc2Zvcm1zKG1hdDQmIG1hdHJpeCkgeworICAgIGlmIChtTGVmdCAhPSAwIHx8IG1Ub3AgIT0gMCkgeworICAgICAgICBtYXRyaXgudHJhbnNsYXRlKG1MZWZ0LCBtVG9wKTsKKyAgICB9CisgICAgaWYgKG1TdGF0aWNNYXRyaXgpIHsKKyAgICAgICAgbWF0NCBzdGF0KCptU3RhdGljTWF0cml4KTsKKyAgICAgICAgbWF0cml4Lm11bHRpcGx5KHN0YXQpOworICAgIH0gZWxzZSBpZiAobUFuaW1hdGlvbk1hdHJpeCkgeworICAgICAgICBtYXQ0IGFuaW0oKm1BbmltYXRpb25NYXRyaXgpOworICAgICAgICBtYXRyaXgubXVsdGlwbHkoYW5pbSk7CisgICAgfQorICAgIGlmIChtTWF0cml4RmxhZ3MgIT0gMCkgeworICAgICAgICB1cGRhdGVNYXRyaXgoKTsKKyAgICAgICAgaWYgKG1NYXRyaXhGbGFncyA9PSBUUkFOU0xBVElPTikgeworICAgICAgICAgICAgbWF0cml4LnRyYW5zbGF0ZShtVHJhbnNsYXRpb25YLCBtVHJhbnNsYXRpb25ZLCBtVHJhbnNsYXRpb25aKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChDYWNoZXM6OmdldEluc3RhbmNlKCkucHJvcGVydHlFbmFibGUzZCkgeworICAgICAgICAgICAgICAgIG1hdHJpeC5tdWx0aXBseShtVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF0NCB0ZW1wKCptVHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgICAgICAgICBtYXRyaXgubXVsdGlwbHkodGVtcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICogT3JnYW5pemVzIHRoZSBEaXNwbGF5TGlzdCBoaWVyYXJjaHkgdG8gcHJlcGFyZSBmb3IgWi1iYXNlZCBkcmF3IG9yZGVyLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYSBjYWxsIHRvIGRlZmVyKCkgb3IgZHJhd0Rpc3BsYXlMaXN0KCkKKyAqCisgKiBFYWNoIERpc3BsYXlMaXN0IHRoYXQgc2VydmVzIGFzIGEgM2Qgcm9vdCBidWlsZHMgaXRzIGxpc3Qgb2YgY29tcG9zaXRlZCBjaGlsZHJlbiwKKyAqIHdoaWNoIGFyZSBmbGFnZ2VkIHRvIG5vdCBkcmF3IGluIHRoZSBzdGFuZGFyZCBkcmF3IGxvb3AuCisgKi8KK3ZvaWQgRGlzcGxheUxpc3Q6OmNvbXB1dGVPcmRlcmluZygpIHsKKyAgICBBVFJBQ0VfQ0FMTCgpOworICAgIGlmIChtRGlzcGxheUxpc3REYXRhID09IE5VTEwpIHJldHVybjsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbURpc3BsYXlMaXN0RGF0YS0+Y2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgRHJhd0Rpc3BsYXlMaXN0T3AqIGNoaWxkT3AgPSBtRGlzcGxheUxpc3REYXRhLT5jaGlsZHJlbltpXTsKKyAgICAgICAgY2hpbGRPcC0+bURpc3BsYXlMaXN0LT5jb21wdXRlT3JkZXJpbmdJbXBsKGNoaWxkT3AsCisgICAgICAgICAgICAgICAgJm0zZE5vZGVzLCAmbWF0NDo6aWRlbnRpdHkoKSwKKyAgICAgICAgICAgICAgICAmbVByb2plY3RlZE5vZGVzLCAmbWF0NDo6aWRlbnRpdHkoKSk7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0Ojpjb21wdXRlT3JkZXJpbmdJbXBsKAorICAgICAgICBEcmF3RGlzcGxheUxpc3RPcCogb3BTdGF0ZSwKKyAgICAgICAgVmVjdG9yPFpEcmF3RGlzcGxheUxpc3RPcFBhaXI+KiBjb21wb3NpdGVkQ2hpbGRyZW5PZjNkUm9vdCwKKyAgICAgICAgY29uc3QgbWF0NCogdHJhbnNmb3JtRnJvbTNkUm9vdCwKKyAgICAgICAgVmVjdG9yPERyYXdEaXNwbGF5TGlzdE9wKj4qIGNvbXBvc2l0ZWRDaGlsZHJlbk9mUHJvamVjdGlvblN1cmZhY2UsCisgICAgICAgIGNvbnN0IG1hdDQqIHRyYW5zZm9ybUZyb21Qcm9qZWN0aW9uU3VyZmFjZSkgeworCisgICAgLy8gVE9ETzogc2hvdWxkIGF2b2lkIHRoaXMgY2FsY3VsYXRpb24gaW4gbW9zdCBjYXNlcworICAgIC8vIFRPRE86IGp1c3QgY2FsY3VsYXRlIHNpbmdsZSBtYXRyaXgsIGRvd24gdG8gYWxsIGxlYWYgY29tcG9zaXRlZCBlbGVtZW50cworICAgIE1hdHJpeDQgbG9jYWxUcmFuc2Zvcm1Gcm9tM2RSb290KCp0cmFuc2Zvcm1Gcm9tM2RSb290KTsKKyAgICBsb2NhbFRyYW5zZm9ybUZyb20zZFJvb3QubXVsdGlwbHkob3BTdGF0ZS0+bVRyYW5zZm9ybUZyb21QYXJlbnQpOworICAgIE1hdHJpeDQgbG9jYWxUcmFuc2Zvcm1Gcm9tUHJvamVjdGlvblN1cmZhY2UoKnRyYW5zZm9ybUZyb21Qcm9qZWN0aW9uU3VyZmFjZSk7CisgICAgbG9jYWxUcmFuc2Zvcm1Gcm9tUHJvamVjdGlvblN1cmZhY2UubXVsdGlwbHkob3BTdGF0ZS0+bVRyYW5zZm9ybUZyb21QYXJlbnQpOworCisgICAgaWYgKG1UcmFuc2xhdGlvblogIT0gMC4wZikgeyAvLyBUT0RPOiBvdGhlciBzaWduYWxzIGZvciAzZCBjb21wb3NpdGluZywgc3VjaCBhcyBjdXN0b20gbWF0cml4NAorICAgICAgICAvLyBjb21wb3NpdGVkIDNkIGxheWVyLCBmbGFnIGZvciBvdXQgb2Ygb3JkZXIgZHJhdyBhbmQgc2F2ZSBtYXRyaXguLi4KKyAgICAgICAgb3BTdGF0ZS0+bVNraXBJbk9yZGVyRHJhdyA9IHRydWU7CisgICAgICAgIG9wU3RhdGUtPm1UcmFuc2Zvcm1Gcm9tQ29tcG9zaXRpbmdBbmNlc3Rvci5sb2FkKGxvY2FsVHJhbnNmb3JtRnJvbTNkUm9vdCk7CisKKyAgICAgICAgLy8gLi4uIGFuZCBpbnNlcnQgaW50byBjdXJyZW50IDNkIHJvb3QsIGtleWVkIHdpdGggcGl2b3QgeiBmb3IgbGF0ZXIgc29ydGluZworICAgICAgICBWZWN0b3IzIHBpdm90KG1QaXZvdFgsIG1QaXZvdFksIDAuMGYpOworICAgICAgICBtYXQ0IHRvdGFsVHJhbnNmb3JtKGxvY2FsVHJhbnNmb3JtRnJvbTNkUm9vdCk7CisgICAgICAgIGFwcGx5Vmlld1Byb3BlcnR5VHJhbnNmb3Jtcyh0b3RhbFRyYW5zZm9ybSk7CisgICAgICAgIHRvdGFsVHJhbnNmb3JtLm1hcFBvaW50M2QocGl2b3QpOworICAgICAgICBjb21wb3NpdGVkQ2hpbGRyZW5PZjNkUm9vdC0+YWRkKFpEcmF3RGlzcGxheUxpc3RPcFBhaXIocGl2b3Queiwgb3BTdGF0ZSkpOworICAgIH0gZWxzZSBpZiAobVByb2plY3RUb0NvbnRhaW5lZFZvbHVtZSkgeworICAgICAgICAvLyBjb21wb3NpdGVkIHByb2plY3RlZSwgZmxhZyBmb3Igb3V0IG9mIG9yZGVyIGRyYXcsIHNhdmUgbWF0cml4LCBhbmQgc3RvcmUgaW4gcHJvaiBzdXJmYWNlCisgICAgICAgIG9wU3RhdGUtPm1Ta2lwSW5PcmRlckRyYXcgPSB0cnVlOworICAgICAgICBvcFN0YXRlLT5tVHJhbnNmb3JtRnJvbUNvbXBvc2l0aW5nQW5jZXN0b3IubG9hZChsb2NhbFRyYW5zZm9ybUZyb21Qcm9qZWN0aW9uU3VyZmFjZSk7CisgICAgICAgIGNvbXBvc2l0ZWRDaGlsZHJlbk9mUHJvamVjdGlvblN1cmZhY2UtPmFkZChvcFN0YXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBzdGFuZGFyZCBpbiBvcmRlciBkcmF3CisgICAgICAgIG9wU3RhdGUtPm1Ta2lwSW5PcmRlckRyYXcgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtM2ROb2Rlcy5jbGVhcigpOworICAgIGlmIChtSXNDb250YWluZWRWb2x1bWUpIHsKKyAgICAgICAgLy8gY3JlYXRlIGEgbmV3IDNkIHNwYWNlIGZvciBkZXNjZW5kZW50cyBieSBjb2xsZWN0aW5nIHRoZW0KKyAgICAgICAgY29tcG9zaXRlZENoaWxkcmVuT2YzZFJvb3QgPSAmbTNkTm9kZXM7CisgICAgICAgIHRyYW5zZm9ybUZyb20zZFJvb3QgPSAmbWF0NDo6aWRlbnRpdHkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcHBseVZpZXdQcm9wZXJ0eVRyYW5zZm9ybXMobG9jYWxUcmFuc2Zvcm1Gcm9tM2RSb290KTsKKyAgICAgICAgdHJhbnNmb3JtRnJvbTNkUm9vdCA9ICZsb2NhbFRyYW5zZm9ybUZyb20zZFJvb3Q7CisgICAgfQorCisgICAgbVByb2plY3RlZE5vZGVzLmNsZWFyKCk7CisgICAgaWYgKG1EaXNwbGF5TGlzdERhdGEgIT0gTlVMTCAmJiBtRGlzcGxheUxpc3REYXRhLT5wcm9qZWN0aW9uSW5kZXggPj0gMCkgeworICAgICAgICAvLyBjcmVhdGUgYSBuZXcgcHJvamVjdGlvbiBzdXJmYWNlIGZvciBkZXNjZW5kZW50cyBieSBjb2xsZWN0aW5nIHRoZW0KKyAgICAgICAgY29tcG9zaXRlZENoaWxkcmVuT2ZQcm9qZWN0aW9uU3VyZmFjZSA9ICZtUHJvamVjdGVkTm9kZXM7CisgICAgICAgIHRyYW5zZm9ybUZyb21Qcm9qZWN0aW9uU3VyZmFjZSA9ICZtYXQ0OjppZGVudGl0eSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFwcGx5Vmlld1Byb3BlcnR5VHJhbnNmb3Jtcyhsb2NhbFRyYW5zZm9ybUZyb21Qcm9qZWN0aW9uU3VyZmFjZSk7CisgICAgICAgIHRyYW5zZm9ybUZyb21Qcm9qZWN0aW9uU3VyZmFjZSA9ICZsb2NhbFRyYW5zZm9ybUZyb21Qcm9qZWN0aW9uU3VyZmFjZTsKKyAgICB9CisKKyAgICBpZiAobURpc3BsYXlMaXN0RGF0YSAhPSBOVUxMICYmIG1EaXNwbGF5TGlzdERhdGEtPmNoaWxkcmVuLnNpemUoKSA+IDApIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtRGlzcGxheUxpc3REYXRhLT5jaGlsZHJlbi5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgRHJhd0Rpc3BsYXlMaXN0T3AqIGNoaWxkT3AgPSBtRGlzcGxheUxpc3REYXRhLT5jaGlsZHJlbltpXTsKKyAgICAgICAgICAgIGNoaWxkT3AtPm1EaXNwbGF5TGlzdC0+Y29tcHV0ZU9yZGVyaW5nSW1wbChjaGlsZE9wLAorICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVkQ2hpbGRyZW5PZjNkUm9vdCwgdHJhbnNmb3JtRnJvbTNkUm9vdCwKKyAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlZENoaWxkcmVuT2ZQcm9qZWN0aW9uU3VyZmFjZSwgdHJhbnNmb3JtRnJvbVByb2plY3Rpb25TdXJmYWNlKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtNDU0LDYgKzU4Myw4IEBACiAgICAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShEaXNwbGF5TGlzdE9wKiBvcGVyYXRpb24sIGludCBzYXZlQ291bnQsIGJvb2wgY2xpcFRvQm91bmRzKSB7CiAgICAgICAgIG9wZXJhdGlvbi0+ZGVmZXIobURlZmVyU3RydWN0LCBzYXZlQ291bnQsIG1MZXZlbCwgY2xpcFRvQm91bmRzKTsKICAgICB9CisgICAgaW5saW5lIExpbmVhckFsbG9jYXRvciYgYWxsb2NhdG9yKCkgeyByZXR1cm4gKihtRGVmZXJTdHJ1Y3QubUFsbG9jYXRvcik7IH0KKwogcHJpdmF0ZToKICAgICBEZWZlclN0YXRlU3RydWN0JiBtRGVmZXJTdHJ1Y3Q7CiAgICAgY29uc3QgaW50IG1MZXZlbDsKQEAgLTQ3NCw2ICs2MDUsOCBAQAogI2VuZGlmCiAgICAgICAgIG9wZXJhdGlvbi0+cmVwbGF5KG1SZXBsYXlTdHJ1Y3QsIHNhdmVDb3VudCwgbUxldmVsLCBjbGlwVG9Cb3VuZHMpOwogICAgIH0KKyAgICBpbmxpbmUgTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IoKSB7IHJldHVybiAqKG1SZXBsYXlTdHJ1Y3QubUFsbG9jYXRvcik7IH0KKwogcHJpdmF0ZToKICAgICBSZXBsYXlTdGF0ZVN0cnVjdCYgbVJlcGxheVN0cnVjdDsKICAgICBjb25zdCBpbnQgbUxldmVsOwpAQCAtNDkwLDExICs2MjMsNzcgQEAKICAgICAgICAgICAgIHJlcGxheVN0cnVjdC5tRHJhd0dsU3RhdHVzKTsKIH0KIAordGVtcGxhdGUgPGNsYXNzIFQ+Cit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRlM2RDaGlsZHJlbihDaGlsZHJlblNlbGVjdE1vZGUgbW9kZSwgT3BlbkdMUmVuZGVyZXImIHJlbmRlcmVyLAorICAgICAgICBUJiBoYW5kbGVyLCBjb25zdCBpbnQgbGV2ZWwpIHsKKyAgICBpZiAobTNkTm9kZXMuc2l6ZSgpID09IDAgfHwKKyAgICAgICAgICAgIChtb2RlID09IGtOZWdhdGl2ZVpDaGlsZHJlbiAmJiBtM2ROb2Rlc1swXS5rZXkgPiAwLjBmKSB8fAorICAgICAgICAgICAgKG1vZGUgPT0ga1Bvc2l0aXZlWkNoaWxkcmVuICYmIG0zZE5vZGVzW20zZE5vZGVzLnNpemUoKSAtIDFdLmtleSA8IDAuMGYpKSB7CisgICAgICAgIC8vIG5vIDNkIGNoaWxkcmVuIHRvIGRyYXcKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIExpbmVhckFsbG9jYXRvciYgYWxsb2MgPSBoYW5kbGVyLmFsbG9jYXRvcigpOworICAgIENsaXBSZWN0T3AqIGNsaXBPcCA9IG5ldyAoYWxsb2MpIENsaXBSZWN0T3AoMCwgMCwgbVdpZHRoLCBtSGVpZ2h0LAorICAgICAgICAgICAgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOyAvLyBjbGlwIHRvIDNkIHJvb3QgYm91bmRzIGZvciBub3cKKyAgICBoYW5kbGVyKGNsaXBPcCwgUFJPUEVSVFlfU0FWRUNPVU5ULCBtQ2xpcFRvQm91bmRzKTsKKyAgICBpbnQgcm9vdFJlc3RvcmVUbyA9IHJlbmRlcmVyLnNhdmUoU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcgfCBTa0NhbnZhczo6a0NsaXBfU2F2ZUZsYWcpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtM2ROb2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBmbG9hdCB6VmFsdWUgPSBtM2ROb2Rlc1tpXS5rZXk7CisgICAgICAgIERyYXdEaXNwbGF5TGlzdE9wKiBjaGlsZE9wID0gbTNkTm9kZXNbaV0udmFsdWU7CisKKyAgICAgICAgaWYgKG1vZGUgPT0ga1Bvc2l0aXZlWkNoaWxkcmVuICYmIHpWYWx1ZSA8IDAuMGYpIGNvbnRpbnVlOworICAgICAgICBpZiAobW9kZSA9PSBrTmVnYXRpdmVaQ2hpbGRyZW4gJiYgelZhbHVlID4gMC4wZikgYnJlYWs7CisKKyAgICAgICAgaWYgKG1vZGUgPT0ga1Bvc2l0aXZlWkNoaWxkcmVuICYmIHpWYWx1ZSA+IDAuMGYpIHsKKyAgICAgICAgICAgIC8qIGRyYXcgc2hhZG93IHdpdGggcGFyZW50IG1hdHJpeCBhcHBsaWVkLCBwYXNzaW5nIGluIHRoZSBjaGlsZCdzIHRvdGFsIG1hdHJpeAorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFRPRE86CisgICAgICAgICAgICAgKiAtZGV0ZXJtaW5lIGFuZCBwYXNzIGJhY2tncm91bmQgc2hhcGUgKGFuZCBwb3NzaWJseSBkcmF3YWJsZSBhbHBoYSkKKyAgICAgICAgICAgICAqIC12aWV3IG11c3Qgb3B0LWluIHRvIHNoYWRvd3MKKyAgICAgICAgICAgICAqIC1jb25zaWRlciBzaGFkb3dzIGZvciBvdGhlciBjb250ZW50CisgICAgICAgICAgICAgKiAtaW5mb3JtIHNoYWRvdyBzeXN0ZW0gb2YgYW5jZXN0b3IgdHJhbnNmb3JtIChmb3IgdXNlIGluIGxpZ2h0aW5nKQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBtYXQ0IHNoYWRvd01hdHJpeChjaGlsZE9wLT5tVHJhbnNmb3JtRnJvbUNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgY2hpbGRPcC0+bURpc3BsYXlMaXN0LT5hcHBseVZpZXdQcm9wZXJ0eVRyYW5zZm9ybXMoc2hhZG93TWF0cml4KTsKKyAgICAgICAgICAgIERpc3BsYXlMaXN0T3AqIHNoYWRvd09wICA9IG5ldyAoYWxsb2MpIERyYXdTaGFkb3dPcChzaGFkb3dNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgIGNoaWxkT3AtPm1EaXNwbGF5TGlzdC0+bUFscGhhLAorICAgICAgICAgICAgICAgICAgICBjaGlsZE9wLT5tRGlzcGxheUxpc3QtPmdldFdpZHRoKCksIGNoaWxkT3AtPm1EaXNwbGF5TGlzdC0+Z2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgaGFuZGxlcihzaGFkb3dPcCwgUFJPUEVSVFlfU0FWRUNPVU5ULCBtQ2xpcFRvQm91bmRzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlbmRlcmVyLmNvbmNhdE1hdHJpeChjaGlsZE9wLT5tVHJhbnNmb3JtRnJvbUNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICBjaGlsZE9wLT5tU2tpcEluT3JkZXJEcmF3ID0gZmFsc2U7IC8vIHRoaXMgaXMgaG9ycmlibGUsIEknbSBzbyBzb3JyeSBldmVyeW9uZQorICAgICAgICBoYW5kbGVyKGNoaWxkT3AsIHJlbmRlcmVyLmdldFNhdmVDb3VudCgpIC0gMSwgbUNsaXBUb0JvdW5kcyk7CisgICAgICAgIGNoaWxkT3AtPm1Ta2lwSW5PcmRlckRyYXcgPSB0cnVlOworICAgIH0KKyAgICBoYW5kbGVyKG5ldyAoYWxsb2MpIFJlc3RvcmVUb0NvdW50T3Aocm9vdFJlc3RvcmVUbyksIFBST1BFUlRZX1NBVkVDT1VOVCwgbUNsaXBUb0JvdW5kcyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0ZVByb2plY3RlZENoaWxkcmVuKE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgVCYgaGFuZGxlciwgY29uc3QgaW50IGxldmVsKSB7CisgICAgTGluZWFyQWxsb2NhdG9yJiBhbGxvYyA9IGhhbmRsZXIuYWxsb2NhdG9yKCk7CisgICAgQ2xpcFJlY3RPcCogY2xpcE9wID0gbmV3IChhbGxvYykgQ2xpcFJlY3RPcCgwLCAwLCBtV2lkdGgsIG1IZWlnaHQsCisgICAgICAgICAgICBTa1JlZ2lvbjo6a1JlcGxhY2VfT3ApOyAvLyBjbGlwIHRvIHByb2plY3Rpb24gc3VyZmFjZSByb290IGJvdW5kcworICAgIGhhbmRsZXIoY2xpcE9wLCBQUk9QRVJUWV9TQVZFQ09VTlQsIG1DbGlwVG9Cb3VuZHMpOworICAgIGludCByb290UmVzdG9yZVRvID0gcmVuZGVyZXIuc2F2ZShTa0NhbnZhczo6a01hdHJpeF9TYXZlRmxhZyB8IFNrQ2FudmFzOjprQ2xpcF9TYXZlRmxhZyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1Qcm9qZWN0ZWROb2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICBEcmF3RGlzcGxheUxpc3RPcCogY2hpbGRPcCA9IG1Qcm9qZWN0ZWROb2Rlc1tpXTsKKyAgICAgICAgcmVuZGVyZXIuY29uY2F0TWF0cml4KGNoaWxkT3AtPm1UcmFuc2Zvcm1Gcm9tQ29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAgIGNoaWxkT3AtPm1Ta2lwSW5PcmRlckRyYXcgPSBmYWxzZTsgLy8gdGhpcyBpcyBob3JyaWJsZSwgSSdtIHNvIHNvcnJ5IGV2ZXJ5b25lCisgICAgICAgIGhhbmRsZXIoY2hpbGRPcCwgcmVuZGVyZXIuZ2V0U2F2ZUNvdW50KCkgLSAxLCBtQ2xpcFRvQm91bmRzKTsKKyAgICAgICAgY2hpbGRPcC0+bVNraXBJbk9yZGVyRHJhdyA9IHRydWU7CisgICAgfQorICAgIGhhbmRsZXIobmV3IChhbGxvYykgUmVzdG9yZVRvQ291bnRPcChyb290UmVzdG9yZVRvKSwgUFJPUEVSVFlfU0FWRUNPVU5ULCBtQ2xpcFRvQm91bmRzKTsKK30KKwogLyoqCiAgKiBUaGlzIGZ1bmN0aW9uIHNlcnZlcyBib3RoIGRlZmVyIGFuZCByZXBsYXkgbW9kZXMsIGFuZCB3aWxsIG9yZ2FuaXplIHRoZSBkaXNwbGF5TGlzdCdzIGNvbXBvbmVudAogICogb3BlcmF0aW9ucyBmb3IgYSBzaW5nbGUgZnJhbWU6CiAgKgotICogRXZlcnkgJ3NpbXBsZScgb3BlcmF0aW9uIHRoYXQgYWZmZWN0cyBqdXN0IHRoZSBtYXRyaXggYW5kIGFscGhhIChvciBvdGhlciBmYWN0b3JzIG9mCisgKiBFdmVyeSAnc2ltcGxlJyBzdGF0ZSBvcGVyYXRpb24gdGhhdCBhZmZlY3RzIGp1c3QgdGhlIG1hdHJpeCBhbmQgYWxwaGEgKG9yIG90aGVyIGZhY3RvcnMgb2YKICAqIERlZmVycmVkRGlzcGxheVN0YXRlKSBtYXkgYmUgaXNzdWVkIGRpcmVjdGx5IHRvIHRoZSByZW5kZXJlciwgYnV0IGNvbXBsZXggb3BlcmF0aW9ucyAod2l0aCBjdXN0b20KICAqIGRlZmVyIGxvZ2ljKSBhbmQgb3BlcmF0aW9ucyBpbiBkaXNwbGF5TGlzdE9wcyBhcmUgaXNzdWVkIHRocm91Z2ggdGhlICdoYW5kbGVyJyB3aGljaCBoYW5kbGVzIHRoZQogICogZGVmZXIgdnMgcmVwbGF5IGxvZ2ljLCBwZXIgb3BlcmF0aW9uCkBAIC01MTcsOCArNzE2LDkgQEAKICAgICAgICAgICAgIGNsaXBSZWN0LT5yaWdodCwgY2xpcFJlY3QtPmJvdHRvbSk7CiAjZW5kaWYKIAorICAgIExpbmVhckFsbG9jYXRvciYgYWxsb2MgPSBoYW5kbGVyLmFsbG9jYXRvcigpOwogICAgIGludCByZXN0b3JlVG8gPSByZW5kZXJlci5nZXRTYXZlQ291bnQoKTsKLSAgICBoYW5kbGVyKG1TYXZlT3AtPnJlaW5pdChTa0NhbnZhczo6a01hdHJpeF9TYXZlRmxhZyB8IFNrQ2FudmFzOjprQ2xpcF9TYXZlRmxhZyksCisgICAgaGFuZGxlcihuZXcgKGFsbG9jKSBTYXZlT3AoU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcgfCBTa0NhbnZhczo6a0NsaXBfU2F2ZUZsYWcpLAogICAgICAgICAgICAgUFJPUEVSVFlfU0FWRUNPVU5ULCBtQ2xpcFRvQm91bmRzKTsKIAogICAgIERJU1BMQVlfTElTVF9MT0dEKCIlKnNTYXZlICVkICVkIiwgKGxldmVsICsgMSkgKiAyLCAiIiwKQEAgLTUyNiwzMCArNzI2LDM5IEBACiAKICAgICBzZXRWaWV3UHJvcGVydGllczxUPihyZW5kZXJlciwgaGFuZGxlciwgbGV2ZWwgKyAxKTsKIAotICAgIGlmIChtQ2xpcFRvQm91bmRzICYmIHJlbmRlcmVyLnF1aWNrUmVqZWN0Tm9TY2lzc29yKDAsIDAsIG1XaWR0aCwgbUhlaWdodCkpIHsKLSAgICAgICAgRElTUExBWV9MSVNUX0xPR0QoIiUqc1Jlc3RvcmVUb0NvdW50ICVkIiwgKGxldmVsICsgMSkgKiAyLCAiIiwgcmVzdG9yZVRvKTsKLSAgICAgICAgaGFuZGxlcihtUmVzdG9yZVRvQ291bnRPcC0+cmVpbml0KHJlc3RvcmVUbyksIFBST1BFUlRZX1NBVkVDT1VOVCwgbUNsaXBUb0JvdW5kcyk7Ci0gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVUb0NvdW50KHJlc3RvcmVUbyk7Ci0gICAgICAgIHJlbmRlcmVyLnNldE92ZXJyaWRlTGF5ZXJBbHBoYSgxLjBmKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBib29sIHF1aWNrUmVqZWN0ZWQgPSBtQ2xpcFRvQm91bmRzICYmIHJlbmRlcmVyLnF1aWNrUmVqZWN0Q29uc2VydmF0aXZlKDAsIDAsIG1XaWR0aCwgbUhlaWdodCk7CisgICAgaWYgKCFxdWlja1JlamVjdGVkKSB7CisgICAgICAgIC8vIFogc29ydCAzZCBjaGlsZHJlbiAoc3RhYmxlLW5lc3MgbWFrZXMgeiBjb21wYXJlIGZhbGwgYmFjayB0byBzdGFuZGFyZCBkcmF3aW5nIG9yZGVyKQorICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KG0zZE5vZGVzLmJlZ2luKCksIG0zZE5vZGVzLmVuZCgpKTsKIAotICAgIERpc3BsYXlMaXN0TG9nQnVmZmVyJiBsb2dCdWZmZXIgPSBEaXNwbGF5TGlzdExvZ0J1ZmZlcjo6Z2V0SW5zdGFuY2UoKTsKLSAgICBpbnQgc2F2ZUNvdW50ID0gcmVuZGVyZXIuZ2V0U2F2ZUNvdW50KCkgLSAxOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbURpc3BsYXlMaXN0RGF0YS0+ZGlzcGxheUxpc3RPcHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgRGlzcGxheUxpc3RPcCAqb3AgPSBtRGlzcGxheUxpc3REYXRhLT5kaXNwbGF5TGlzdE9wc1tpXTsKKyAgICAgICAgLy8gZm9yIDNkIHJvb3QsIGRyYXcgY2hpbGRyZW4gd2l0aCBuZWdhdGl2ZSB6IHZhbHVlcworICAgICAgICBpdGVyYXRlM2RDaGlsZHJlbihrTmVnYXRpdmVaQ2hpbGRyZW4sIHJlbmRlcmVyLCBoYW5kbGVyLCBsZXZlbCk7CisKKyAgICAgICAgRGlzcGxheUxpc3RMb2dCdWZmZXImIGxvZ0J1ZmZlciA9IERpc3BsYXlMaXN0TG9nQnVmZmVyOjpnZXRJbnN0YW5jZSgpOworICAgICAgICBjb25zdCBpbnQgc2F2ZUNvdW50T2Zmc2V0ID0gcmVuZGVyZXIuZ2V0U2F2ZUNvdW50KCkgLSAxOworICAgICAgICBjb25zdCBpbnQgcHJvamVjdGlvbkluZGV4ID0gbURpc3BsYXlMaXN0RGF0YS0+cHJvamVjdGlvbkluZGV4OworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1EaXNwbGF5TGlzdERhdGEtPmRpc3BsYXlMaXN0T3BzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBEaXNwbGF5TGlzdE9wICpvcCA9IG1EaXNwbGF5TGlzdERhdGEtPmRpc3BsYXlMaXN0T3BzW2ldOwogCiAjaWYgREVCVUdfRElTUExBWV9MSVNUCi0gICAgICAgIG9wLT5vdXRwdXQobGV2ZWwgKyAxKTsKKyAgICAgICAgICAgIG9wLT5vdXRwdXQobGV2ZWwgKyAxKTsKICNlbmRpZgogCi0gICAgICAgIGxvZ0J1ZmZlci53cml0ZUNvbW1hbmQobGV2ZWwsIG9wLT5uYW1lKCkpOwotICAgICAgICBoYW5kbGVyKG9wLCBzYXZlQ291bnQsIG1DbGlwVG9Cb3VuZHMpOworICAgICAgICAgICAgbG9nQnVmZmVyLndyaXRlQ29tbWFuZChsZXZlbCwgb3AtPm5hbWUoKSk7CisgICAgICAgICAgICBoYW5kbGVyKG9wLCBzYXZlQ291bnRPZmZzZXQsIG1DbGlwVG9Cb3VuZHMpOworCisgICAgICAgICAgICBpZiAoQ0NfVU5MSUtFTFkoaSA9PSBwcm9qZWN0aW9uSW5kZXggJiYgbVByb2plY3RlZE5vZGVzLnNpemUoKSA+IDApKSB7CisgICAgICAgICAgICAgICAgaXRlcmF0ZVByb2plY3RlZENoaWxkcmVuKHJlbmRlcmVyLCBoYW5kbGVyLCBsZXZlbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBmb3IgM2Qgcm9vdCwgZHJhdyBjaGlsZHJlbiB3aXRoIHBvc2l0aXZlIHogdmFsdWVzCisgICAgICAgIGl0ZXJhdGUzZENoaWxkcmVuKGtQb3NpdGl2ZVpDaGlsZHJlbiwgcmVuZGVyZXIsIGhhbmRsZXIsIGxldmVsKTsKICAgICB9CiAKICAgICBESVNQTEFZX0xJU1RfTE9HRCgiJSpzUmVzdG9yZVRvQ291bnQgJWQiLCAobGV2ZWwgKyAxKSAqIDIsICIiLCByZXN0b3JlVG8pOwotICAgIGhhbmRsZXIobVJlc3RvcmVUb0NvdW50T3AtPnJlaW5pdChyZXN0b3JlVG8pLCBQUk9QRVJUWV9TQVZFQ09VTlQsIG1DbGlwVG9Cb3VuZHMpOwotICAgIHJlbmRlcmVyLnJlc3RvcmVUb0NvdW50KHJlc3RvcmVUbyk7CisgICAgaGFuZGxlcihuZXcgKGFsbG9jKSBSZXN0b3JlVG9Db3VudE9wKHJlc3RvcmVUbyksCisgICAgICAgICAgICBQUk9QRVJUWV9TQVZFQ09VTlQsIG1DbGlwVG9Cb3VuZHMpOwogICAgIHJlbmRlcmVyLnNldE92ZXJyaWRlTGF5ZXJBbHBoYSgxLjBmKTsKIH0KIApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0Rpc3BsYXlMaXN0LmggYi9saWJzL2h3dWkvRGlzcGxheUxpc3QuaAppbmRleCAxY2Q1ZjFjLi41Mzk5MTg1IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvRGlzcGxheUxpc3QuaAorKysgYi9saWJzL2h3dWkvRGlzcGxheUxpc3QuaApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8cHJpdmF0ZS9od3VpL0RyYXdHbEluZm8uaD4KIAorI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+CiAjaW5jbHVkZSA8dXRpbHMvTGluZWFyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgogI2luY2x1ZGUgPHV0aWxzL1NvcnRlZFZlY3Rvci5oPgpAQCAtMzcsNiArMzgsOCBAQAogI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+CiAKICNpbmNsdWRlICJEZWJ1Zy5oIgorI2luY2x1ZGUgIk1hdHJpeC5oIgorI2luY2x1ZGUgIkRlZmVycmVkRGlzcGxheUxpc3QuaCIKIAogI2RlZmluZSBUUkFOU0xBVElPTiAweDAwMDEKICNkZWZpbmUgUk9UQVRJT04gICAgMHgwMDAyCkBAIC02NSwzNiArNjgsNzYgQEAKIGNsYXNzIFNhdmVMYXllck9wOwogY2xhc3MgU2F2ZU9wOwogY2xhc3MgUmVzdG9yZVRvQ291bnRPcDsKK2NsYXNzIERyYXdEaXNwbGF5TGlzdE9wOwogCi1zdHJ1Y3QgRGVmZXJTdGF0ZVN0cnVjdCB7Ci0gICAgRGVmZXJTdGF0ZVN0cnVjdChEZWZlcnJlZERpc3BsYXlMaXN0JiBkZWZlcnJlZExpc3QsIE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgaW50IHJlcGxheUZsYWdzKQotICAgICAgICAgICAgOiBtRGVmZXJyZWRMaXN0KGRlZmVycmVkTGlzdCksIG1SZW5kZXJlcihyZW5kZXJlciksIG1SZXBsYXlGbGFncyhyZXBsYXlGbGFncykge30KLSAgICBEZWZlcnJlZERpc3BsYXlMaXN0JiBtRGVmZXJyZWRMaXN0OworLyoqCisgKiBIb2xkcyBkYXRhIHVzZWQgaW4gdGhlIHBsYXliYWNrIGEgdHJlZSBvZiBEaXNwbGF5TGlzdHMuCisgKi8KK2NsYXNzIFBsYXliYWNrU3RhdGVTdHJ1Y3QgeworcHJvdGVjdGVkOgorICAgIFBsYXliYWNrU3RhdGVTdHJ1Y3QoT3BlbkdMUmVuZGVyZXImIHJlbmRlcmVyLCBpbnQgcmVwbGF5RmxhZ3MsIExpbmVhckFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLCBtUmVwbGF5RmxhZ3MocmVwbGF5RmxhZ3MpLCBtQWxsb2NhdG9yKGFsbG9jYXRvcil7fQorCitwdWJsaWM6CiAgICAgT3BlbkdMUmVuZGVyZXImIG1SZW5kZXJlcjsKICAgICBjb25zdCBpbnQgbVJlcGxheUZsYWdzOworCisgICAgLy8gQWxsb2NhdG9yIHdpdGggdGhlIGxpZmV0aW1lIG9mIGEgc2luZ2xlIGZyYW1lLgorICAgIC8vIHJlcGxheSB1c2VzIGFuIEFsbG9jYXRvciBvd25lZCBieSB0aGUgc3RydWN0LCB3aGlsZSBkZWZlciBzaGFyZXMgdGhlIERlZmVycmVkRGlzcGxheUxpc3QncyBBbGxvY2F0b3IKKyAgICBMaW5lYXJBbGxvY2F0b3IgKiBjb25zdCBtQWxsb2NhdG9yOwogfTsKIAotc3RydWN0IFJlcGxheVN0YXRlU3RydWN0IHsKK2NsYXNzIERlZmVyU3RhdGVTdHJ1Y3QgOiBwdWJsaWMgUGxheWJhY2tTdGF0ZVN0cnVjdCB7CitwdWJsaWM6CisgICAgRGVmZXJTdGF0ZVN0cnVjdChEZWZlcnJlZERpc3BsYXlMaXN0JiBkZWZlcnJlZExpc3QsIE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgaW50IHJlcGxheUZsYWdzKQorICAgICAgICAgICAgOiBQbGF5YmFja1N0YXRlU3RydWN0KHJlbmRlcmVyLCByZXBsYXlGbGFncywgJihkZWZlcnJlZExpc3QubUFsbG9jYXRvcikpLAorICAgICAgICAgICAgbURlZmVycmVkTGlzdChkZWZlcnJlZExpc3QpIHt9CisKKyAgICBEZWZlcnJlZERpc3BsYXlMaXN0JiBtRGVmZXJyZWRMaXN0OworfTsKKworY2xhc3MgUmVwbGF5U3RhdGVTdHJ1Y3QgOiBwdWJsaWMgUGxheWJhY2tTdGF0ZVN0cnVjdCB7CitwdWJsaWM6CiAgICAgUmVwbGF5U3RhdGVTdHJ1Y3QoT3BlbkdMUmVuZGVyZXImIHJlbmRlcmVyLCBSZWN0JiBkaXJ0eSwgaW50IHJlcGxheUZsYWdzKQotICAgICAgICAgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLCBtRGlydHkoZGlydHkpLCBtUmVwbGF5RmxhZ3MocmVwbGF5RmxhZ3MpLAotICAgICAgICAgICAgbURyYXdHbFN0YXR1cyhEcmF3R2xJbmZvOjprU3RhdHVzRG9uZSkge30KLSAgICBPcGVuR0xSZW5kZXJlciYgbVJlbmRlcmVyOworICAgICAgICAgICAgOiBQbGF5YmFja1N0YXRlU3RydWN0KHJlbmRlcmVyLCByZXBsYXlGbGFncywgJm1SZXBsYXlBbGxvY2F0b3IpLAorICAgICAgICAgICAgbURpcnR5KGRpcnR5KSwgbURyYXdHbFN0YXR1cyhEcmF3R2xJbmZvOjprU3RhdHVzRG9uZSkge30KKwogICAgIFJlY3QmIG1EaXJ0eTsKLSAgICBjb25zdCBpbnQgbVJlcGxheUZsYWdzOwogICAgIHN0YXR1c190IG1EcmF3R2xTdGF0dXM7CisgICAgTGluZWFyQWxsb2NhdG9yIG1SZXBsYXlBbGxvY2F0b3I7CiB9OwogCiAvKioKLSAqIFJlZmNvdW50ZWQgc3RydWN0dXJlIHRoYXQgaG9sZHMgZGF0YSB1c2VkIGluIGRpc3BsYXkgbGlzdCBzdHJlYW0KKyAqIFJlZmNvdW50ZWQgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIGxpc3Qgb2YgY29tbWFuZHMgdXNlZCBpbiBkaXNwbGF5IGxpc3Qgc3RyZWFtLgogICovCiBjbGFzcyBEaXNwbGF5TGlzdERhdGEgOiBwdWJsaWMgTGlnaHRSZWZCYXNlPERpc3BsYXlMaXN0RGF0YT4gewogcHVibGljOgorICAgIERpc3BsYXlMaXN0RGF0YSgpIDogcHJvamVjdGlvbkluZGV4KC0xKSB7fQorICAgIC8vIGFsbG9jYXRvciBpbnRvIHdoaWNoIGFsbCBvcHMgd2VyZSBhbGxvY2F0ZWQKICAgICBMaW5lYXJBbGxvY2F0b3IgYWxsb2NhdG9yOworCisgICAgLy8gcG9pbnRlcnMgdG8gYWxsIG9wcyB3aXRoaW4gZGlzcGxheSBsaXN0LCBwb2ludGluZyBpbnRvIGFsbG9jYXRvciBkYXRhCiAgICAgVmVjdG9yPERpc3BsYXlMaXN0T3AqPiBkaXNwbGF5TGlzdE9wczsKKworICAgIC8vIGxpc3Qgb2YgY2hpbGRyZW4gZGlzcGxheSBsaXN0cyBmb3IgcXVpY2ssIG5vbi1kcmF3aW5nIHRyYXZlcnNhbAorICAgIFZlY3RvcjxEcmF3RGlzcGxheUxpc3RPcCo+IGNoaWxkcmVuOworCisgICAgLy8gaW5kZXggb2YgRGlzcGxheUxpc3RPcCByZXN0b3JlLCBhZnRlciB3aGljaCBwcm9qZWN0ZWQgZGVzY2VuZGVudHMgc2hvdWxkIGJlIGRyYXduCisgICAgaW50IHByb2plY3Rpb25JbmRleDsKKyAgICBNYXRyaXg0IHByb2plY3Rpb25UcmFuc2Zvcm07CiB9OwogCiAvKioKLSAqIFJlcGxheXMgcmVjb3JkZWQgZHJhd2luZyBjb21tYW5kcy4KKyAqIFByaW1hcnkgY2xhc3MgZm9yIHN0b3JpbmcgcmVjb3JkZWQgY2FudmFzIGNvbW1hbmRzLCBhcyB3ZWxsIGFzIHBlci1WaWV3L1ZpZXdHcm91cCBkaXNwbGF5IHByb3BlcnRpZXMuCisgKgorICogUmVjb3JkaW5nIG9mIGNhbnZhcyBjb21tYW5kcyBpcyBzb21ld2hhdCBzaW1pbGFyIHRvIFNrUGljdHVyZSwgZXhjZXB0IHRoZSBjYW52YXMtcmVjb3JkaW5nCisgKiBmdW5jdGlvbmFsaXR5IGlzIHNwbGl0IGJldHdlZW4gRGlzcGxheUxpc3RSZW5kZXJlciAod2hpY2ggbWFuYWdlcyB0aGUgcmVjb3JkaW5nKSwgRGlzcGxheUxpc3REYXRhCisgKiAod2hpY2ggaG9sZHMgdGhlIGFjdHVhbCBkYXRhKSwgYW5kIERpc3BsYXlMaXN0ICh3aGljaCBob2xkcyBwcm9wZXJ0aWVzIGFuZCBwZXJmb3JtcyBwbGF5YmFjayBvbnRvCisgKiBhIHJlbmRlcmVyKS4KKyAqCisgKiBOb3RlIHRoYXQgRGlzcGxheUxpc3REYXRhIGlzIHN3YXBwZWQgb3V0IGZyb20gYmVuZWF0aCBhbiBpbmRpdmlkdWFsIERpc3BsYXlMaXN0IHdoZW4gYSB2aWV3J3MKKyAqIHJlY29yZGVkIHN0cmVhbSBvZiBjYW52YXMgb3BlcmF0aW9ucyBpcyByZWZyZXNoZWQuIFRoZSBEaXNwbGF5TGlzdCAoYW5kIGl0cyBwcm9wZXJ0aWVzKSBzdGF5CisgKiBhdHRhY2hlZC4KICAqLwogY2xhc3MgRGlzcGxheUxpc3QgewogcHVibGljOgpAQCAtMTA2LDE3ICsxNDksMTcgQEAKICAgICAgICAga1JlcGxheUZsYWdfQ2xpcENoaWxkcmVuID0gMHgxCiAgICAgfTsKIAotCiAgICAgQU5EUk9JRF9BUEkgc2l6ZV90IGdldFNpemUoKTsKICAgICBBTkRST0lEX0FQSSBzdGF0aWMgdm9pZCBkZXN0cm95RGlzcGxheUxpc3REZWZlcnJlZChEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QpOwogICAgIEFORFJPSURfQVBJIHN0YXRpYyB2b2lkIG91dHB1dExvZ0J1ZmZlcihpbnQgZmQpOwogCiAgICAgdm9pZCBpbml0RnJvbURpc3BsYXlMaXN0UmVuZGVyZXIoY29uc3QgRGlzcGxheUxpc3RSZW5kZXJlciYgcmVjb3JkZXIsIGJvb2wgcmV1c2luZyA9IGZhbHNlKTsKIAorICAgIHZvaWQgY29tcHV0ZU9yZGVyaW5nKCk7CiAgICAgdm9pZCBkZWZlcihEZWZlclN0YXRlU3RydWN0JiBkZWZlclN0cnVjdCwgY29uc3QgaW50IGxldmVsKTsKICAgICB2b2lkIHJlcGxheShSZXBsYXlTdGF0ZVN0cnVjdCYgcmVwbGF5U3RydWN0LCBjb25zdCBpbnQgbGV2ZWwpOwogCi0gICAgdm9pZCBvdXRwdXQodWludDMyX3QgbGV2ZWwgPSAwKTsKKyAgICBBTkRST0lEX0FQSSB2b2lkIG91dHB1dCh1aW50MzJfdCBsZXZlbCA9IDEpOwogCiAgICAgQU5EUk9JRF9BUEkgdm9pZCByZXNldCgpOwogCkBAIC0xNDcsNiArMTkwLDE0IEBACiAgICAgICAgIG1DbGlwVG9Cb3VuZHMgPSBjbGlwVG9Cb3VuZHM7CiAgICAgfQogCisgICAgdm9pZCBzZXRJc0NvbnRhaW5lZFZvbHVtZShib29sIGlzQ29udGFpbmVkVm9sdW1lKSB7CisgICAgICAgIG1Jc0NvbnRhaW5lZFZvbHVtZSA9IGlzQ29udGFpbmVkVm9sdW1lOworICAgIH0KKworICAgIHZvaWQgc2V0UHJvamVjdFRvQ29udGFpbmVkVm9sdW1lKGJvb2wgc2hvdWxkUHJvamVjdCkgeworICAgICAgICBtUHJvamVjdFRvQ29udGFpbmVkVm9sdW1lID0gc2hvdWxkUHJvamVjdDsKKyAgICB9CisKICAgICB2b2lkIHNldFN0YXRpY01hdHJpeChTa01hdHJpeCogbWF0cml4KSB7CiAgICAgICAgIGRlbGV0ZSBtU3RhdGljTWF0cml4OwogICAgICAgICBtU3RhdGljTWF0cml4ID0gbmV3IFNrTWF0cml4KCptYXRyaXgpOwpAQCAtMTg4LDEyICsyMzksNyBAQAogICAgIHZvaWQgc2V0VHJhbnNsYXRpb25YKGZsb2F0IHRyYW5zbGF0aW9uWCkgewogICAgICAgICBpZiAodHJhbnNsYXRpb25YICE9IG1UcmFuc2xhdGlvblgpIHsKICAgICAgICAgICAgIG1UcmFuc2xhdGlvblggPSB0cmFuc2xhdGlvblg7Ci0gICAgICAgICAgICBtTWF0cml4RGlydHkgPSB0cnVlOwotICAgICAgICAgICAgaWYgKG1UcmFuc2xhdGlvblggPT0gMC4wZiAmJiBtVHJhbnNsYXRpb25ZID09IDAuMGYpIHsKLSAgICAgICAgICAgICAgICBtTWF0cml4RmxhZ3MgJj0gflRSQU5TTEFUSU9OOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtTWF0cml4RmxhZ3MgfD0gVFJBTlNMQVRJT047Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBvblRyYW5zbGF0aW9uVXBkYXRlKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwNCwxMiArMjUwLDcgQEAKICAgICB2b2lkIHNldFRyYW5zbGF0aW9uWShmbG9hdCB0cmFuc2xhdGlvblkpIHsKICAgICAgICAgaWYgKHRyYW5zbGF0aW9uWSAhPSBtVHJhbnNsYXRpb25ZKSB7CiAgICAgICAgICAgICBtVHJhbnNsYXRpb25ZID0gdHJhbnNsYXRpb25ZOwotICAgICAgICAgICAgbU1hdHJpeERpcnR5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChtVHJhbnNsYXRpb25YID09IDAuMGYgJiYgbVRyYW5zbGF0aW9uWSA9PSAwLjBmKSB7Ci0gICAgICAgICAgICAgICAgbU1hdHJpeEZsYWdzICY9IH5UUkFOU0xBVElPTjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbU1hdHJpeEZsYWdzIHw9IFRSQU5TTEFUSU9OOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgb25UcmFuc2xhdGlvblVwZGF0ZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTcsNiArMjU4LDE3IEBACiAgICAgICAgIHJldHVybiBtVHJhbnNsYXRpb25ZOwogICAgIH0KIAorICAgIHZvaWQgc2V0VHJhbnNsYXRpb25aKGZsb2F0IHRyYW5zbGF0aW9uWikgeworICAgICAgICBpZiAodHJhbnNsYXRpb25aICE9IG1UcmFuc2xhdGlvblopIHsKKyAgICAgICAgICAgIG1UcmFuc2xhdGlvblogPSB0cmFuc2xhdGlvblo7CisgICAgICAgICAgICBvblRyYW5zbGF0aW9uVXBkYXRlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmbG9hdCBnZXRUcmFuc2xhdGlvblooKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtVHJhbnNsYXRpb25aOworICAgIH0KKwogICAgIHZvaWQgc2V0Um90YXRpb24oZmxvYXQgcm90YXRpb24pIHsKICAgICAgICAgaWYgKHJvdGF0aW9uICE9IG1Sb3RhdGlvbikgewogICAgICAgICAgICAgbVJvdGF0aW9uID0gcm90YXRpb247CkBAIC00NTQsMTIgKzUwNiw0MyBAQAogICAgIH0KIAogcHJpdmF0ZToKKyAgICB0eXBlZGVmIGtleV92YWx1ZV9wYWlyX3Q8ZmxvYXQsIERyYXdEaXNwbGF5TGlzdE9wKj4gWkRyYXdEaXNwbGF5TGlzdE9wUGFpcjsKKworICAgIGVudW0gQ2hpbGRyZW5TZWxlY3RNb2RlIHsKKyAgICAgICAga05lZ2F0aXZlWkNoaWxkcmVuLAorICAgICAgICBrUG9zaXRpdmVaQ2hpbGRyZW4KKyAgICB9OworCisgICAgdm9pZCBvblRyYW5zbGF0aW9uVXBkYXRlKCkgeworICAgICAgICBtTWF0cml4RGlydHkgPSB0cnVlOworICAgICAgICBpZiAobVRyYW5zbGF0aW9uWCA9PSAwLjBmICYmIG1UcmFuc2xhdGlvblkgPT0gMC4wZiAmJiBtVHJhbnNsYXRpb25aID09IDAuMGYpIHsKKyAgICAgICAgICAgIG1NYXRyaXhGbGFncyAmPSB+VFJBTlNMQVRJT047CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtTWF0cml4RmxhZ3MgfD0gVFJBTlNMQVRJT047CisgICAgICAgIH0KKyAgICB9CisKICAgICB2b2lkIG91dHB1dFZpZXdQcm9wZXJ0aWVzKGNvbnN0IGludCBsZXZlbCk7CiAKKyAgICB2b2lkIGFwcGx5Vmlld1Byb3BlcnR5VHJhbnNmb3JtcyhtYXQ0JiBtYXRyaXgpOworCisgICAgdm9pZCBjb21wdXRlT3JkZXJpbmdJbXBsKERyYXdEaXNwbGF5TGlzdE9wKiBvcFN0YXRlLAorICAgICAgICBWZWN0b3I8WkRyYXdEaXNwbGF5TGlzdE9wUGFpcj4qIGNvbXBvc2l0ZWRDaGlsZHJlbk9mM2RSb290LAorICAgICAgICBjb25zdCBtYXQ0KiB0cmFuc2Zvcm1Gcm9tM2RSb290LAorICAgICAgICBWZWN0b3I8RHJhd0Rpc3BsYXlMaXN0T3AqPiogY29tcG9zaXRlZENoaWxkcmVuT2ZQcm9qZWN0aW9uU3VyZmFjZSwKKyAgICAgICAgY29uc3QgbWF0NCogdHJhbnNmb3JtRnJvbVByb2plY3Rpb25TdXJmYWNlKTsKKwogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgIGlubGluZSB2b2lkIHNldFZpZXdQcm9wZXJ0aWVzKE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgVCYgaGFuZGxlciwgY29uc3QgaW50IGxldmVsKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIGlubGluZSB2b2lkIGl0ZXJhdGUzZENoaWxkcmVuKENoaWxkcmVuU2VsZWN0TW9kZSBtb2RlLCBPcGVuR0xSZW5kZXJlciYgcmVuZGVyZXIsCisgICAgICAgIFQmIGhhbmRsZXIsIGNvbnN0IGludCBsZXZlbCk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBpbmxpbmUgdm9pZCBpdGVyYXRlUHJvamVjdGVkQ2hpbGRyZW4oT3BlbkdMUmVuZGVyZXImIHJlbmRlcmVyLCBUJiBoYW5kbGVyLCBjb25zdCBpbnQgbGV2ZWwpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgICAgaW5saW5lIHZvaWQgaXRlcmF0ZShPcGVuR0xSZW5kZXJlciYgcmVuZGVyZXIsIFQmIGhhbmRsZXIsIGNvbnN0IGludCBsZXZlbCk7CiAKICAgICB2b2lkIGluaXQoKTsKQEAgLTQ4MiwxNiArNTY1LDE2IEBACiAgICAgICAgIGNvbnN0IGNoYXIqIG1UZXh0OwogICAgIH07CiAKLSAgICBWZWN0b3I8U2tCaXRtYXAqPiBtQml0bWFwUmVzb3VyY2VzOwotICAgIFZlY3RvcjxTa0JpdG1hcCo+IG1Pd25lZEJpdG1hcFJlc291cmNlczsKKyAgICBWZWN0b3I8Y29uc3QgU2tCaXRtYXAqPiBtQml0bWFwUmVzb3VyY2VzOworICAgIFZlY3Rvcjxjb25zdCBTa0JpdG1hcCo+IG1Pd25lZEJpdG1hcFJlc291cmNlczsKICAgICBWZWN0b3I8U2tpYUNvbG9yRmlsdGVyKj4gbUZpbHRlclJlc291cmNlczsKLSAgICBWZWN0b3I8UmVzX3BuZ185cGF0Y2gqPiBtUGF0Y2hSZXNvdXJjZXM7CisgICAgVmVjdG9yPGNvbnN0IFJlc19wbmdfOXBhdGNoKj4gbVBhdGNoUmVzb3VyY2VzOwogCi0gICAgVmVjdG9yPFNrUGFpbnQqPiBtUGFpbnRzOwotICAgIFZlY3RvcjxTa1BhdGgqPiBtUGF0aHM7Ci0gICAgU29ydGVkVmVjdG9yPFNrUGF0aCo+IG1Tb3VyY2VQYXRoczsKLSAgICBWZWN0b3I8U2tSZWdpb24qPiBtUmVnaW9uczsKLSAgICBWZWN0b3I8U2tNYXRyaXgqPiBtTWF0cmljZXM7CisgICAgVmVjdG9yPGNvbnN0IFNrUGFpbnQqPiBtUGFpbnRzOworICAgIFZlY3Rvcjxjb25zdCBTa1BhdGgqPiBtUGF0aHM7CisgICAgU29ydGVkVmVjdG9yPGNvbnN0IFNrUGF0aCo+IG1Tb3VyY2VQYXRoczsKKyAgICBWZWN0b3I8Y29uc3QgU2tSZWdpb24qPiBtUmVnaW9uczsKKyAgICBWZWN0b3I8Y29uc3QgU2tNYXRyaXgqPiBtTWF0cmljZXM7CiAgICAgVmVjdG9yPFNraWFTaGFkZXIqPiBtU2hhZGVyczsKICAgICBWZWN0b3I8TGF5ZXIqPiBtTGF5ZXJzOwogCkBAIC01MDUsMTEgKzU4OCwxMyBAQAogICAgIFN0cmluZzggbU5hbWU7CiAgICAgYm9vbCBtRGVzdHJveWVkOyAvLyB1c2VkIGZvciBkZWJ1Z2dpbmcgY3Jhc2gsIFRPRE86IHJlbW92ZSBvbmNlIGludmFsaWQgc3RhdGUgY3Jhc2ggZml4ZWQKIAotICAgIC8vIFZpZXcgcHJvcGVydGllcworICAgIC8vIFJlbmRlcmluZyBwcm9wZXJ0aWVzCiAgICAgYm9vbCBtQ2xpcFRvQm91bmRzOworICAgIGJvb2wgbUlzQ29udGFpbmVkVm9sdW1lOworICAgIGJvb2wgbVByb2plY3RUb0NvbnRhaW5lZFZvbHVtZTsKICAgICBmbG9hdCBtQWxwaGE7CiAgICAgYm9vbCBtSGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmc7Ci0gICAgZmxvYXQgbVRyYW5zbGF0aW9uWCwgbVRyYW5zbGF0aW9uWTsKKyAgICBmbG9hdCBtVHJhbnNsYXRpb25YLCBtVHJhbnNsYXRpb25ZLCBtVHJhbnNsYXRpb25aOwogICAgIGZsb2F0IG1Sb3RhdGlvbiwgbVJvdGF0aW9uWCwgbVJvdGF0aW9uWTsKICAgICBmbG9hdCBtU2NhbGVYLCBtU2NhbGVZOwogICAgIGZsb2F0IG1QaXZvdFgsIG1QaXZvdFk7CkBAIC01MjYsMjMgKzYxMSwxOCBAQAogICAgIFNrTWF0cml4KiBtVHJhbnNmb3JtTWF0cml4M0Q7CiAgICAgU2tNYXRyaXgqIG1TdGF0aWNNYXRyaXg7CiAgICAgU2tNYXRyaXgqIG1BbmltYXRpb25NYXRyaXg7CisgICAgTWF0cml4NCBtVHJhbnNmb3JtOwogICAgIGJvb2wgbUNhY2hpbmc7CiAKICAgICAvKioKLSAgICAgKiBTdGF0ZSBvcGVyYXRpb25zIC0gbmVlZGVkIHRvIGRlZmVyIGRpc3BsYXlMaXN0IHByb3BlcnR5IG9wZXJhdGlvbnMgKGZvciBleGFtcGxlLCB3aGVuIHNldHRpbmcKLSAgICAgKiBhbiBhbHBoYSBjYXVzZXMgYSBTYXZlTGF5ZXJBbHBoYSB0byBvY2N1cikuIFRoZXNlIG9wZXJhdGlvbnMgcG9pbnQgaW50byBtRGlzcGxheUxpc3REYXRhJ3MKLSAgICAgKiBhbGxvY2F0aW9uLCBvciBudWxsIGlmIHVuaW5pdGlhbGl6ZWQuCi0gICAgICoKLSAgICAgKiBUaGVzZSBhcmUgaW5pdGlhbGl6ZWQgKHZpYSBmcmllbmQgcmUtY29uc3RydWN0b3JzKSB3aGVuIGEgZGlzcGxheUxpc3QgaXMgaXNzdWVkIGluIGVpdGhlcgotICAgICAqIHJlcGxheSBvciBkZWZlcnJlZCBtb2RlLiBJZiByZXBsYXlpbmcsIHRoZSBvcHMgYXJlIG5vdCB1c2VkIHVudGlsIHRoZSBuZXh0IGZyYW1lLiBJZgotICAgICAqIGRlZmVycmluZywgdGhlIG9wcyBtYXkgYmUgc3RvcmVkIGluIHRoZSBEZWZlcnJlZERpc3BsYXlMaXN0IHRvIGJlIHBsYXllZCBiYWNrIGEgc2Vjb25kIHRpbWUuCi0gICAgICoKLSAgICAgKiBUaGV5IHNob3VsZCBiZSB1c2VkIGF0IG1vc3Qgb25jZSBwZXIgZnJhbWUgKG9uZSBjYWxsIHRvICdpdGVyYXRlJykgdG8gYXZvaWQgb3ZlcndyaXRpbmcgZGF0YQorICAgICAqIERyYXcgdGltZSBzdGF0ZSAtIHRoZXNlIHByb3BlcnRpZXMgYXJlIG9ubHkgc2V0IGFuZCB1c2VkIGR1cmluZyByZW5kZXJpbmcKICAgICAgKi8KLSAgICBDbGlwUmVjdE9wKiBtQ2xpcFJlY3RPcDsKLSAgICBTYXZlTGF5ZXJPcCogbVNhdmVMYXllck9wOwotICAgIFNhdmVPcCogbVNhdmVPcDsKLSAgICBSZXN0b3JlVG9Db3VudE9wKiBtUmVzdG9yZVRvQ291bnRPcDsKKworICAgIC8vIGZvciAzZCByb290cywgY29udGFpbnMgYSB6IHNvcnRlZCBsaXN0IG9mIGFsbCBjaGlsZHJlbiBpdGVtcworICAgIFZlY3RvcjxaRHJhd0Rpc3BsYXlMaXN0T3BQYWlyPiBtM2ROb2RlczsKKworICAgIC8vIGZvciBwcm9qZWN0aW9uIHN1cmZhY2VzLCBjb250YWlucyBhIGxpc3Qgb2YgYWxsIGNoaWxkcmVuIGl0ZW1zCisgICAgVmVjdG9yPERyYXdEaXNwbGF5TGlzdE9wKj4gbVByb2plY3RlZE5vZGVzOwogfTsgLy8gY2xhc3MgRGlzcGxheUxpc3QKIAogfTsgLy8gbmFtZXNwYWNlIHVpcmVuZGVyZXIKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9EaXNwbGF5TGlzdE9wLmggYi9saWJzL2h3dWkvRGlzcGxheUxpc3RPcC5oCmluZGV4IDMyNjgwNWEuLmUzZDRlMmQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9EaXNwbGF5TGlzdE9wLmgKKysrIGIvbGlicy9od3VpL0Rpc3BsYXlMaXN0T3AuaApAQCAtMTExLDcgKzExMSw3IEBACiBjbGFzcyBEcmF3T3AgOiBwdWJsaWMgRGlzcGxheUxpc3RPcCB7CiBmcmllbmQgY2xhc3MgTWVyZ2luZ0RyYXdCYXRjaDsKIHB1YmxpYzoKLSAgICBEcmF3T3AoU2tQYWludCogcGFpbnQpCisgICAgRHJhd09wKGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgICAgICAgICAgOiBtUGFpbnQocGFpbnQpLCBtUXVpY2tSZWplY3RlZChmYWxzZSkge30KIAogICAgIHZpcnR1YWwgdm9pZCBkZWZlcihEZWZlclN0YXRlU3RydWN0JiBkZWZlclN0cnVjdCwgaW50IHNhdmVDb3VudCwgaW50IGxldmVsLApAQCAtMTgyLDEzICsxODIsMTYgQEAKICAgICB9CiAKICAgICBpbmxpbmUgZmxvYXQgc3Ryb2tlV2lkdGhPdXRzZXQoKSB7Ci0gICAgICAgIGZsb2F0IHdpZHRoID0gbVBhaW50LT5nZXRTdHJva2VXaWR0aCgpOwotICAgICAgICBpZiAod2lkdGggPT0gMCkgcmV0dXJuIDAuNWY7IC8vIGFjY291bnQgZm9yIGhhaXJsaW5lCi0gICAgICAgIHJldHVybiB3aWR0aCAqIDAuNWY7CisgICAgICAgIC8vIHNpbmNlIGFueXRoaW5nIEFBIHN0cm9rZSB3aXRoIGxlc3MgdGhhbiAxLjAgcGl4ZWwgd2lkdGggaXMgZHJhd24gd2l0aCBhbiBhbHBoYS1yZWR1Y2VkCisgICAgICAgIC8vIDEuMCBzdHJva2UsIHRyZWF0IDEuMCBhcyBtaW5pbXVtLgorCisgICAgICAgIC8vIFRPRE86IGl0IHdvdWxkIGJlIG5pY2UgaWYgdGhpcyBjb3VsZCB0YWtlIHNjYWxlIGludG8gYWNjb3VudCwgYnV0IHNjYWxlIGlzbid0IHN0YWJsZQorICAgICAgICAvLyBzaW5jZSBoaWdoZXIgbGV2ZWxzIG9mIHRoZSB2aWV3IGhpZXJhcmNoeSBjYW4gY2hhbmdlIHNjYWxlIG91dCBmcm9tIHVuZGVybmVhdGggaXQuCisgICAgICAgIHJldHVybiBmbWF4ZihtUGFpbnQtPmdldFN0cm9rZVdpZHRoKCksIDEpICogMC41ZjsKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICBTa1BhaW50KiBnZXRQYWludChPcGVuR0xSZW5kZXJlciYgcmVuZGVyZXIpIHsKKyAgICBjb25zdCBTa1BhaW50KiBnZXRQYWludChPcGVuR0xSZW5kZXJlciYgcmVuZGVyZXIpIHsKICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmZpbHRlclBhaW50KG1QYWludCk7CiAgICAgfQogCkBAIC0yMDksMjIgKzIxMiwyMiBAQAogCiAgICAgfQogCi0gICAgU2tQYWludCogbVBhaW50OyAvLyBzaG91bGQgYmUgYWNjZXNzZWQgdmlhIGdldFBhaW50KCkgd2hlbiBhcHBseWluZworICAgIGNvbnN0IFNrUGFpbnQqIG1QYWludDsgLy8gc2hvdWxkIGJlIGFjY2Vzc2VkIHZpYSBnZXRQYWludCgpIHdoZW4gYXBwbHlpbmcKICAgICBib29sIG1RdWlja1JlamVjdGVkOwogfTsKIAogY2xhc3MgRHJhd0JvdW5kZWRPcCA6IHB1YmxpYyBEcmF3T3AgewogcHVibGljOgotICAgIERyYXdCb3VuZGVkT3AoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1BhaW50KiBwYWludCkKKyAgICBEcmF3Qm91bmRlZE9wKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgY29uc3QgU2tQYWludCogcGFpbnQpCiAgICAgICAgICAgICA6IERyYXdPcChwYWludCksIG1Mb2NhbEJvdW5kcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pIHt9CiAKLSAgICBEcmF3Qm91bmRlZE9wKGNvbnN0IFJlY3QmIGxvY2FsQm91bmRzLCBTa1BhaW50KiBwYWludCkKKyAgICBEcmF3Qm91bmRlZE9wKGNvbnN0IFJlY3QmIGxvY2FsQm91bmRzLCBjb25zdCBTa1BhaW50KiBwYWludCkKICAgICAgICAgICAgIDogRHJhd09wKHBhaW50KSwgbUxvY2FsQm91bmRzKGxvY2FsQm91bmRzKSB7fQogCiAgICAgLy8gQ2FsY3VsYXRlcyBib3VuZHMgYXMgc21hbGxlc3QgcmVjdCBlbmNvbXBhc3NpbmcgYWxsIHBvaW50cwogICAgIC8vIE5PVEU6IHJlcXVpcmVzIGF0IGxlYXN0IDEgdmVydGV4LCBhbmQgZG9lc24ndCBhY2NvdW50IGZvciBzdHJva2Ugc2l6ZSAoc2hvdWxkIGJlIGhhbmRsZWQgaW4KICAgICAvLyBzdWJjbGFzcycgY29uc3RydWN0b3IpCi0gICAgRHJhd0JvdW5kZWRPcChjb25zdCBmbG9hdCogcG9pbnRzLCBpbnQgY291bnQsIFNrUGFpbnQqIHBhaW50KQorICAgIERyYXdCb3VuZGVkT3AoY29uc3QgZmxvYXQqIHBvaW50cywgaW50IGNvdW50LCBjb25zdCBTa1BhaW50KiBwYWludCkKICAgICAgICAgICAgIDogRHJhd09wKHBhaW50KSwgbUxvY2FsQm91bmRzKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMF0sIHBvaW50c1sxXSkgewogICAgICAgICBmb3IgKGludCBpID0gMjsgaSA8IGNvdW50OyBpICs9IDIpIHsKICAgICAgICAgICAgIG1Mb2NhbEJvdW5kcy5sZWZ0ID0gZm1pbmYobUxvY2FsQm91bmRzLmxlZnQsIHBvaW50c1tpXSk7CkBAIC0yMzUsNyArMjM4LDcgQEAKICAgICB9CiAKICAgICAvLyBkZWZhdWx0IGVtcHR5IGNvbnN0cnVjdG9yIGZvciBib3VuZHMsIHRvIGJlIG92ZXJyaWRkZW4gaW4gY2hpbGQgY29uc3RydWN0b3IgYm9keQotICAgIERyYXdCb3VuZGVkT3AoU2tQYWludCogcGFpbnQpOiBEcmF3T3AocGFpbnQpIHsgfQorICAgIERyYXdCb3VuZGVkT3AoY29uc3QgU2tQYWludCogcGFpbnQpOiBEcmF3T3AocGFpbnQpIHsgfQogCiAgICAgYm9vbCBnZXRMb2NhbEJvdW5kcyhjb25zdCBEcmF3TW9kaWZpZXJzJiBkcmF3TW9kaWZpZXJzLCBSZWN0JiBsb2NhbEJvdW5kcykgewogICAgICAgICBsb2NhbEJvdW5kcy5zZXQobUxvY2FsQm91bmRzKTsKQEAgLTI1OSw3ICsyNjIsNiBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiBjbGFzcyBTYXZlT3AgOiBwdWJsaWMgU3RhdGVPcCB7Ci0gICAgZnJpZW5kIGNsYXNzIERpc3BsYXlMaXN0OyAvLyBnaXZlIERpc3BsYXlMaXN0IHByaXZhdGUgY29uc3RydWN0b3IvcmVpbml0IGFjY2VzcwogcHVibGljOgogICAgIFNhdmVPcChpbnQgZmxhZ3MpCiAgICAgICAgICAgICA6IG1GbGFncyhmbGFncykge30KQEAgLTI5Miw3ICsyOTQsNiBAQAogfTsKIAogY2xhc3MgUmVzdG9yZVRvQ291bnRPcCA6IHB1YmxpYyBTdGF0ZU9wIHsKLSAgICBmcmllbmQgY2xhc3MgRGlzcGxheUxpc3Q7IC8vIGdpdmUgRGlzcGxheUxpc3QgcHJpdmF0ZSBjb25zdHJ1Y3Rvci9yZWluaXQgYWNjZXNzCiBwdWJsaWM6CiAgICAgUmVzdG9yZVRvQ291bnRPcChpbnQgY291bnQpCiAgICAgICAgICAgICA6IG1Db3VudChjb3VudCkge30KQEAgLTMyNSw3ICszMjYsNiBAQAogfTsKIAogY2xhc3MgU2F2ZUxheWVyT3AgOiBwdWJsaWMgU3RhdGVPcCB7Ci0gICAgZnJpZW5kIGNsYXNzIERpc3BsYXlMaXN0OyAvLyBnaXZlIERpc3BsYXlMaXN0IHByaXZhdGUgY29uc3RydWN0b3IvcmVpbml0IGFjY2VzcwogcHVibGljOgogICAgIFNhdmVMYXllck9wKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKICAgICAgICAgICAgIGludCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBpbnQgZmxhZ3MpCkBAIC00NTYsNyArNDU2LDcgQEAKIAogY2xhc3MgU2V0TWF0cml4T3AgOiBwdWJsaWMgU3RhdGVPcCB7CiBwdWJsaWM6Ci0gICAgU2V0TWF0cml4T3AoU2tNYXRyaXgqIG1hdHJpeCkKKyAgICBTZXRNYXRyaXhPcChjb25zdCBTa01hdHJpeCogbWF0cml4KQogICAgICAgICAgICAgOiBtTWF0cml4KG1hdHJpeCkge30KIAogICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0YXRlKE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgaW50IHNhdmVDb3VudCkgY29uc3QgewpAQCAtNDc0LDEyICs0NzQsMTIgQEAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAiU2V0TWF0cml4IjsgfQogCiBwcml2YXRlOgotICAgIFNrTWF0cml4KiBtTWF0cml4OworICAgIGNvbnN0IFNrTWF0cml4KiBtTWF0cml4OwogfTsKIAogY2xhc3MgQ29uY2F0TWF0cml4T3AgOiBwdWJsaWMgU3RhdGVPcCB7CiBwdWJsaWM6Ci0gICAgQ29uY2F0TWF0cml4T3AoU2tNYXRyaXgqIG1hdHJpeCkKKyAgICBDb25jYXRNYXRyaXhPcChjb25zdCBTa01hdHJpeCogbWF0cml4KQogICAgICAgICAgICAgOiBtTWF0cml4KG1hdHJpeCkge30KIAogICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0YXRlKE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgaW50IHNhdmVDb3VudCkgY29uc3QgewpAQCAtNDkzLDcgKzQ5Myw3IEBACiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgeyByZXR1cm4gIkNvbmNhdE1hdHJpeCI7IH0KIAogcHJpdmF0ZToKLSAgICBTa01hdHJpeCogbU1hdHJpeDsKKyAgICBjb25zdCBTa01hdHJpeCogbU1hdHJpeDsKIH07CiAKIGNsYXNzIENsaXBPcCA6IHB1YmxpYyBTdGF0ZU9wIHsKQEAgLTUyMSw3ICs1MjEsNiBAQAogfTsKIAogY2xhc3MgQ2xpcFJlY3RPcCA6IHB1YmxpYyBDbGlwT3AgewotICAgIGZyaWVuZCBjbGFzcyBEaXNwbGF5TGlzdDsgLy8gZ2l2ZSBEaXNwbGF5TGlzdCBwcml2YXRlIGNvbnN0cnVjdG9yL3JlaW5pdCBhY2Nlc3MKIHB1YmxpYzoKICAgICBDbGlwUmVjdE9wKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tSZWdpb246Ok9wIG9wKQogICAgICAgICAgICAgOiBDbGlwT3Aob3ApLCBtQXJlYShsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pIHt9CkBAIC01NTIsNyArNTUxLDcgQEAKIAogY2xhc3MgQ2xpcFBhdGhPcCA6IHB1YmxpYyBDbGlwT3AgewogcHVibGljOgotICAgIENsaXBQYXRoT3AoU2tQYXRoKiBwYXRoLCBTa1JlZ2lvbjo6T3Agb3ApCisgICAgQ2xpcFBhdGhPcChjb25zdCBTa1BhdGgqIHBhdGgsIFNrUmVnaW9uOjpPcCBvcCkKICAgICAgICAgICAgIDogQ2xpcE9wKG9wKSwgbVBhdGgocGF0aCkge30KIAogICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0YXRlKE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgaW50IHNhdmVDb3VudCkgY29uc3QgewpAQCAtNTY4LDEyICs1NjcsMTIgQEAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAiQ2xpcFBhdGgiOyB9CiAKIHByaXZhdGU6Ci0gICAgU2tQYXRoKiBtUGF0aDsKKyAgICBjb25zdCBTa1BhdGgqIG1QYXRoOwogfTsKIAogY2xhc3MgQ2xpcFJlZ2lvbk9wIDogcHVibGljIENsaXBPcCB7CiBwdWJsaWM6Ci0gICAgQ2xpcFJlZ2lvbk9wKFNrUmVnaW9uKiByZWdpb24sIFNrUmVnaW9uOjpPcCBvcCkKKyAgICBDbGlwUmVnaW9uT3AoY29uc3QgU2tSZWdpb24qIHJlZ2lvbiwgU2tSZWdpb246Ok9wIG9wKQogICAgICAgICAgICAgOiBDbGlwT3Aob3ApLCBtUmVnaW9uKHJlZ2lvbikge30KIAogICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0YXRlKE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgaW50IHNhdmVDb3VudCkgY29uc3QgewpAQCAtNTg5LDcgKzU4OCw3IEBACiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgeyByZXR1cm4gIkNsaXBSZWdpb24iOyB9CiAKIHByaXZhdGU6Ci0gICAgU2tSZWdpb24qIG1SZWdpb247CisgICAgY29uc3QgU2tSZWdpb24qIG1SZWdpb247CiB9OwogCiBjbGFzcyBSZXNldFNoYWRlck9wIDogcHVibGljIFN0YXRlT3AgewpAQCAtNzI5LDcgKzcyOCw3IEBACiAKIGNsYXNzIERyYXdCaXRtYXBPcCA6IHB1YmxpYyBEcmF3Qm91bmRlZE9wIHsKIHB1YmxpYzoKLSAgICBEcmF3Qml0bWFwT3AoU2tCaXRtYXAqIGJpdG1hcCwgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBTa1BhaW50KiBwYWludCkKKyAgICBEcmF3Qml0bWFwT3AoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBjb25zdCBTa1BhaW50KiBwYWludCkKICAgICAgICAgICAgIDogRHJhd0JvdW5kZWRPcChsZWZ0LCB0b3AsIGxlZnQgKyBiaXRtYXAtPndpZHRoKCksIHRvcCArIGJpdG1hcC0+aGVpZ2h0KCksIHBhaW50KSwKICAgICAgICAgICAgIG1CaXRtYXAoYml0bWFwKSwgbUF0bGFzKENhY2hlczo6Z2V0SW5zdGFuY2UoKS5hc3NldEF0bGFzKSB7CiAgICAgICAgIG1FbnRyeSA9IG1BdGxhcy5nZXRFbnRyeShiaXRtYXApOwpAQCAtODI4LDcgKzgyNyw3IEBACiAKICAgICBjb25zdCBTa0JpdG1hcCogYml0bWFwKCkgeyByZXR1cm4gbUJpdG1hcDsgfQogcHJvdGVjdGVkOgotICAgIFNrQml0bWFwKiBtQml0bWFwOworICAgIGNvbnN0IFNrQml0bWFwKiBtQml0bWFwOwogICAgIGNvbnN0IEFzc2V0QXRsYXMmIG1BdGxhczsKICAgICB1aW50MzJfdCBtRW50cnlHZW5lcmF0aW9uSWQ7CiAgICAgQXNzZXRBdGxhczo6RW50cnkqIG1FbnRyeTsKQEAgLTgzNyw3ICs4MzYsNyBAQAogCiBjbGFzcyBEcmF3Qml0bWFwTWF0cml4T3AgOiBwdWJsaWMgRHJhd0JvdW5kZWRPcCB7CiBwdWJsaWM6Ci0gICAgRHJhd0JpdG1hcE1hdHJpeE9wKFNrQml0bWFwKiBiaXRtYXAsIFNrTWF0cml4KiBtYXRyaXgsIFNrUGFpbnQqIHBhaW50KQorICAgIERyYXdCaXRtYXBNYXRyaXhPcChjb25zdCBTa0JpdG1hcCogYml0bWFwLCBjb25zdCBTa01hdHJpeCogbWF0cml4LCBjb25zdCBTa1BhaW50KiBwYWludCkKICAgICAgICAgICAgIDogRHJhd0JvdW5kZWRPcChwYWludCksIG1CaXRtYXAoYml0bWFwKSwgbU1hdHJpeChtYXRyaXgpIHsKICAgICAgICAgbUxvY2FsQm91bmRzLnNldCgwLCAwLCBiaXRtYXAtPndpZHRoKCksIGJpdG1hcC0+aGVpZ2h0KCkpOwogICAgICAgICBjb25zdCBtYXQ0IHRyYW5zZm9ybSgqbWF0cml4KTsKQEAgLTg2MCwxNCArODU5LDE1IEBACiAgICAgfQogCiBwcml2YXRlOgotICAgIFNrQml0bWFwKiBtQml0bWFwOwotICAgIFNrTWF0cml4KiBtTWF0cml4OworICAgIGNvbnN0IFNrQml0bWFwKiBtQml0bWFwOworICAgIGNvbnN0IFNrTWF0cml4KiBtTWF0cml4OwogfTsKIAogY2xhc3MgRHJhd0JpdG1hcFJlY3RPcCA6IHB1YmxpYyBEcmF3Qm91bmRlZE9wIHsKIHB1YmxpYzoKLSAgICBEcmF3Qml0bWFwUmVjdE9wKFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IHNyY0xlZnQsIGZsb2F0IHNyY1RvcCwgZmxvYXQgc3JjUmlnaHQsIGZsb2F0IHNyY0JvdHRvbSwKLSAgICAgICAgICAgIGZsb2F0IGRzdExlZnQsIGZsb2F0IGRzdFRvcCwgZmxvYXQgZHN0UmlnaHQsIGZsb2F0IGRzdEJvdHRvbSwgU2tQYWludCogcGFpbnQpCisgICAgRHJhd0JpdG1hcFJlY3RPcChjb25zdCBTa0JpdG1hcCogYml0bWFwLAorICAgICAgICAgICAgZmxvYXQgc3JjTGVmdCwgZmxvYXQgc3JjVG9wLCBmbG9hdCBzcmNSaWdodCwgZmxvYXQgc3JjQm90dG9tLAorICAgICAgICAgICAgZmxvYXQgZHN0TGVmdCwgZmxvYXQgZHN0VG9wLCBmbG9hdCBkc3RSaWdodCwgZmxvYXQgZHN0Qm90dG9tLCBjb25zdCBTa1BhaW50KiBwYWludCkKICAgICAgICAgICAgIDogRHJhd0JvdW5kZWRPcChkc3RMZWZ0LCBkc3RUb3AsIGRzdFJpZ2h0LCBkc3RCb3R0b20sIHBhaW50KSwKICAgICAgICAgICAgIG1CaXRtYXAoYml0bWFwKSwgbVNyYyhzcmNMZWZ0LCBzcmNUb3AsIHNyY1JpZ2h0LCBzcmNCb3R0b20pIHt9CiAKQEAgLTg5MCwxMyArODkwLDEzIEBACiAgICAgfQogCiBwcml2YXRlOgotICAgIFNrQml0bWFwKiBtQml0bWFwOworICAgIGNvbnN0IFNrQml0bWFwKiBtQml0bWFwOwogICAgIFJlY3QgbVNyYzsKIH07CiAKIGNsYXNzIERyYXdCaXRtYXBEYXRhT3AgOiBwdWJsaWMgRHJhd0JpdG1hcE9wIHsKIHB1YmxpYzoKLSAgICBEcmF3Qml0bWFwRGF0YU9wKFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgU2tQYWludCogcGFpbnQpCisgICAgRHJhd0JpdG1hcERhdGFPcChjb25zdCBTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgICAgICAgICAgOiBEcmF3Qml0bWFwT3AoYml0bWFwLCBsZWZ0LCB0b3AsIHBhaW50KSB7fQogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBhcHBseURyYXcoT3BlbkdMUmVuZGVyZXImIHJlbmRlcmVyLCBSZWN0JiBkaXJ0eSkgewpAQCAtOTE4LDggKzkxOCw4IEBACiAKIGNsYXNzIERyYXdCaXRtYXBNZXNoT3AgOiBwdWJsaWMgRHJhd0JvdW5kZWRPcCB7CiBwdWJsaWM6Ci0gICAgRHJhd0JpdG1hcE1lc2hPcChTa0JpdG1hcCogYml0bWFwLCBpbnQgbWVzaFdpZHRoLCBpbnQgbWVzaEhlaWdodCwKLSAgICAgICAgICAgIGZsb2F0KiB2ZXJ0aWNlcywgaW50KiBjb2xvcnMsIFNrUGFpbnQqIHBhaW50KQorICAgIERyYXdCaXRtYXBNZXNoT3AoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgaW50IG1lc2hXaWR0aCwgaW50IG1lc2hIZWlnaHQsCisgICAgICAgICAgICBjb25zdCBmbG9hdCogdmVydGljZXMsIGNvbnN0IGludCogY29sb3JzLCBjb25zdCBTa1BhaW50KiBwYWludCkKICAgICAgICAgICAgIDogRHJhd0JvdW5kZWRPcCh2ZXJ0aWNlcywgMiAqIChtZXNoV2lkdGggKyAxKSAqIChtZXNoSGVpZ2h0ICsgMSksIHBhaW50KSwKICAgICAgICAgICAgIG1CaXRtYXAoYml0bWFwKSwgbU1lc2hXaWR0aChtZXNoV2lkdGgpLCBtTWVzaEhlaWdodChtZXNoSGVpZ2h0KSwKICAgICAgICAgICAgIG1WZXJ0aWNlcyh2ZXJ0aWNlcyksIG1Db2xvcnMoY29sb3JzKSB7fQpAQCAtOTQxLDE3ICs5NDEsMTcgQEAKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgU2tCaXRtYXAqIG1CaXRtYXA7CisgICAgY29uc3QgU2tCaXRtYXAqIG1CaXRtYXA7CiAgICAgaW50IG1NZXNoV2lkdGg7CiAgICAgaW50IG1NZXNoSGVpZ2h0OwotICAgIGZsb2F0KiBtVmVydGljZXM7Ci0gICAgaW50KiBtQ29sb3JzOworICAgIGNvbnN0IGZsb2F0KiBtVmVydGljZXM7CisgICAgY29uc3QgaW50KiBtQ29sb3JzOwogfTsKIAogY2xhc3MgRHJhd1BhdGNoT3AgOiBwdWJsaWMgRHJhd0JvdW5kZWRPcCB7CiBwdWJsaWM6Ci0gICAgRHJhd1BhdGNoT3AoU2tCaXRtYXAqIGJpdG1hcCwgUmVzX3BuZ185cGF0Y2gqIHBhdGNoLAotICAgICAgICAgICAgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1BhaW50KiBwYWludCkKKyAgICBEcmF3UGF0Y2hPcChjb25zdCBTa0JpdG1hcCogYml0bWFwLCBjb25zdCBSZXNfcG5nXzlwYXRjaCogcGF0Y2gsCisgICAgICAgICAgICBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgICAgICAgICAgOiBEcmF3Qm91bmRlZE9wKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcGFpbnQpLAogICAgICAgICAgICAgbUJpdG1hcChiaXRtYXApLCBtUGF0Y2gocGF0Y2gpLCBtR2VuZXJhdGlvbklkKDApLCBtTWVzaChOVUxMKSwKICAgICAgICAgICAgIG1BdGxhcyhDYWNoZXM6OmdldEluc3RhbmNlKCkuYXNzZXRBdGxhcykgewpAQCAtMTAyOCw4ICsxMDI4LDggQEAKICAgICAgICAgICAgIFRleHR1cmVWZXJ0ZXgqIG9wVmVydGljZXMgPSBvcE1lc2gtPnZlcnRpY2VzOwogICAgICAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IHZlcnRleENvdW50OyBqKyssIG9wVmVydGljZXMrKykgewogICAgICAgICAgICAgICAgIFRleHR1cmVWZXJ0ZXg6OnNldCh2ZXJ0ZXgrKywKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wVmVydGljZXMtPnBvc2l0aW9uWzBdICsgdHgsIG9wVmVydGljZXMtPnBvc2l0aW9uWzFdICsgdHksCi0gICAgICAgICAgICAgICAgICAgICAgICBvcFZlcnRpY2VzLT50ZXh0dXJlWzBdLCBvcFZlcnRpY2VzLT50ZXh0dXJlWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wVmVydGljZXMtPnggKyB0eCwgb3BWZXJ0aWNlcy0+eSArIHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgb3BWZXJ0aWNlcy0+dSwgb3BWZXJ0aWNlcy0+dik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIERpcnR5IHRoZSBjdXJyZW50IGxheWVyIGlmIHBvc3NpYmxlLiBXaGVuIHRoZSA5LXBhdGNoIGRvZXMgbm90CkBAIC0xMDgzLDggKzEwODMsOCBAQAogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTa0JpdG1hcCogbUJpdG1hcDsKLSAgICBSZXNfcG5nXzlwYXRjaCogbVBhdGNoOworICAgIGNvbnN0IFNrQml0bWFwKiBtQml0bWFwOworICAgIGNvbnN0IFJlc19wbmdfOXBhdGNoKiBtUGF0Y2g7CiAKICAgICB1aW50MzJfdCBtR2VuZXJhdGlvbklkOwogICAgIGNvbnN0IFBhdGNoKiBtTWVzaDsKQEAgLTEwOTcsNyArMTA5Nyw3IEBACiBjbGFzcyBEcmF3Q29sb3JPcCA6IHB1YmxpYyBEcmF3T3AgewogcHVibGljOgogICAgIERyYXdDb2xvck9wKGludCBjb2xvciwgU2tYZmVybW9kZTo6TW9kZSBtb2RlKQotICAgICAgICAgICAgOiBEcmF3T3AoMCksIG1Db2xvcihjb2xvciksIG1Nb2RlKG1vZGUpIHt9OworICAgICAgICAgICAgOiBEcmF3T3AoTlVMTCksIG1Db2xvcihjb2xvciksIG1Nb2RlKG1vZGUpIHt9OwogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBhcHBseURyYXcoT3BlbkdMUmVuZGVyZXImIHJlbmRlcmVyLCBSZWN0JiBkaXJ0eSkgewogICAgICAgICByZXR1cm4gcmVuZGVyZXIuZHJhd0NvbG9yKG1Db2xvciwgbU1vZGUpOwpAQCAtMTExNiw3ICsxMTE2LDcgQEAKIAogY2xhc3MgRHJhd1N0cm9rYWJsZU9wIDogcHVibGljIERyYXdCb3VuZGVkT3AgewogcHVibGljOgotICAgIERyYXdTdHJva2FibGVPcChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIFNrUGFpbnQqIHBhaW50KQorICAgIERyYXdTdHJva2FibGVPcChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgICAgICAgICAgOiBEcmF3Qm91bmRlZE9wKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcGFpbnQpIHt9OwogCiAgICAgYm9vbCBnZXRMb2NhbEJvdW5kcyhjb25zdCBEcmF3TW9kaWZpZXJzJiBkcmF3TW9kaWZpZXJzLCBSZWN0JiBsb2NhbEJvdW5kcykgewpAQCAtMTE0MSw3ICsxMTQxLDcgQEAKIAogY2xhc3MgRHJhd1JlY3RPcCA6IHB1YmxpYyBEcmF3U3Ryb2thYmxlT3AgewogcHVibGljOgotICAgIERyYXdSZWN0T3AoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1BhaW50KiBwYWludCkKKyAgICBEcmF3UmVjdE9wKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgY29uc3QgU2tQYWludCogcGFpbnQpCiAgICAgICAgICAgICA6IERyYXdTdHJva2FibGVPcChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHBhaW50KSB7fQogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBhcHBseURyYXcoT3BlbkdMUmVuZGVyZXImIHJlbmRlcmVyLCBSZWN0JiBkaXJ0eSkgewpAQCAtMTE2NSw3ICsxMTY1LDcgQEAKIAogY2xhc3MgRHJhd1JlY3RzT3AgOiBwdWJsaWMgRHJhd0JvdW5kZWRPcCB7CiBwdWJsaWM6Ci0gICAgRHJhd1JlY3RzT3AoY29uc3QgZmxvYXQqIHJlY3RzLCBpbnQgY291bnQsIFNrUGFpbnQqIHBhaW50KQorICAgIERyYXdSZWN0c09wKGNvbnN0IGZsb2F0KiByZWN0cywgaW50IGNvdW50LCBjb25zdCBTa1BhaW50KiBwYWludCkKICAgICAgICAgICAgIDogRHJhd0JvdW5kZWRPcChyZWN0cywgY291bnQsIHBhaW50KSwKICAgICAgICAgICAgIG1SZWN0cyhyZWN0cyksIG1Db3VudChjb3VudCkge30KIApAQCAtMTE5Miw3ICsxMTkyLDcgQEAKIGNsYXNzIERyYXdSb3VuZFJlY3RPcCA6IHB1YmxpYyBEcmF3U3Ryb2thYmxlT3AgewogcHVibGljOgogICAgIERyYXdSb3VuZFJlY3RPcChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgICAgICBmbG9hdCByeCwgZmxvYXQgcnksIFNrUGFpbnQqIHBhaW50KQorICAgICAgICAgICAgZmxvYXQgcngsIGZsb2F0IHJ5LCBjb25zdCBTa1BhaW50KiBwYWludCkKICAgICAgICAgICAgIDogRHJhd1N0cm9rYWJsZU9wKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcGFpbnQpLCBtUngocngpLCBtUnkocnkpIHt9CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGFwcGx5RHJhdyhPcGVuR0xSZW5kZXJlciYgcmVuZGVyZXIsIFJlY3QmIGRpcnR5KSB7CkBAIC0xMjEzLDcgKzEyMTMsNyBAQAogCiBjbGFzcyBEcmF3Q2lyY2xlT3AgOiBwdWJsaWMgRHJhd1N0cm9rYWJsZU9wIHsKIHB1YmxpYzoKLSAgICBEcmF3Q2lyY2xlT3AoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLCBTa1BhaW50KiBwYWludCkKKyAgICBEcmF3Q2lyY2xlT3AoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLCBjb25zdCBTa1BhaW50KiBwYWludCkKICAgICAgICAgICAgIDogRHJhd1N0cm9rYWJsZU9wKHggLSByYWRpdXMsIHkgLSByYWRpdXMsIHggKyByYWRpdXMsIHkgKyByYWRpdXMsIHBhaW50KSwKICAgICAgICAgICAgIG1YKHgpLCBtWSh5KSwgbVJhZGl1cyhyYWRpdXMpIHt9CiAKQEAgLTEyMzUsNyArMTIzNSw3IEBACiAKIGNsYXNzIERyYXdPdmFsT3AgOiBwdWJsaWMgRHJhd1N0cm9rYWJsZU9wIHsKIHB1YmxpYzoKLSAgICBEcmF3T3ZhbE9wKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tQYWludCogcGFpbnQpCisgICAgRHJhd092YWxPcChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgICAgICAgICAgOiBEcmF3U3Ryb2thYmxlT3AobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBwYWludCkge30KIAogICAgIHZpcnR1YWwgc3RhdHVzX3QgYXBwbHlEcmF3KE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgUmVjdCYgZGlydHkpIHsKQEAgLTEyNTMsNyArMTI1Myw3IEBACiBjbGFzcyBEcmF3QXJjT3AgOiBwdWJsaWMgRHJhd1N0cm9rYWJsZU9wIHsKIHB1YmxpYzoKICAgICBEcmF3QXJjT3AoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICAgICAgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgc3dlZXBBbmdsZSwgYm9vbCB1c2VDZW50ZXIsIFNrUGFpbnQqIHBhaW50KQorICAgICAgICAgICAgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgc3dlZXBBbmdsZSwgYm9vbCB1c2VDZW50ZXIsIGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgICAgICAgICAgOiBEcmF3U3Ryb2thYmxlT3AobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBwYWludCksCiAgICAgICAgICAgICBtU3RhcnRBbmdsZShzdGFydEFuZ2xlKSwgbVN3ZWVwQW5nbGUoc3dlZXBBbmdsZSksIG1Vc2VDZW50ZXIodXNlQ2VudGVyKSB7fQogCkBAIC0xMjc4LDcgKzEyNzgsNyBAQAogCiBjbGFzcyBEcmF3UGF0aE9wIDogcHVibGljIERyYXdCb3VuZGVkT3AgewogcHVibGljOgotICAgIERyYXdQYXRoT3AoU2tQYXRoKiBwYXRoLCBTa1BhaW50KiBwYWludCkKKyAgICBEcmF3UGF0aE9wKGNvbnN0IFNrUGF0aCogcGF0aCwgY29uc3QgU2tQYWludCogcGFpbnQpCiAgICAgICAgICAgICA6IERyYXdCb3VuZGVkT3AocGFpbnQpLCBtUGF0aChwYXRoKSB7CiAgICAgICAgIGZsb2F0IGxlZnQsIHRvcCwgb2Zmc2V0OwogICAgICAgICB1aW50MzJfdCB3aWR0aCwgaGVpZ2h0OwpAQCAtMTI5NCw3ICsxMjk0LDcgQEAKIAogICAgIHZpcnR1YWwgdm9pZCBvbkRlZmVyKE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgRGVmZXJJbmZvJiBkZWZlckluZm8sCiAgICAgICAgICAgICBjb25zdCBEZWZlcnJlZERpc3BsYXlTdGF0ZSYgc3RhdGUpIHsKLSAgICAgICAgU2tQYWludCogcGFpbnQgPSBnZXRQYWludChyZW5kZXJlcik7CisgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50ID0gZ2V0UGFpbnQocmVuZGVyZXIpOwogICAgICAgICByZW5kZXJlci5nZXRDYWNoZXMoKS5wYXRoQ2FjaGUucHJlY2FjaGUobVBhdGgsIHBhaW50KTsKIAogICAgICAgICBkZWZlckluZm8uYmF0Y2hJZCA9IERlZmVycmVkRGlzcGxheUxpc3Q6OmtPcEJhdGNoX0FscGhhTWFza1RleHR1cmU7CkBAIC0xMzA3LDEyICsxMzA3LDEyIEBACiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgeyByZXR1cm4gIkRyYXdQYXRoIjsgfQogCiBwcml2YXRlOgotICAgIFNrUGF0aCogbVBhdGg7CisgICAgY29uc3QgU2tQYXRoKiBtUGF0aDsKIH07CiAKIGNsYXNzIERyYXdMaW5lc09wIDogcHVibGljIERyYXdCb3VuZGVkT3AgewogcHVibGljOgotICAgIERyYXdMaW5lc09wKGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgU2tQYWludCogcGFpbnQpCisgICAgRHJhd0xpbmVzT3AoY29uc3QgZmxvYXQqIHBvaW50cywgaW50IGNvdW50LCBjb25zdCBTa1BhaW50KiBwYWludCkKICAgICAgICAgICAgIDogRHJhd0JvdW5kZWRPcChwb2ludHMsIGNvdW50LCBwYWludCksCiAgICAgICAgICAgICBtUG9pbnRzKHBvaW50cyksIG1Db3VudChjb3VudCkgewogICAgICAgICBtTG9jYWxCb3VuZHMub3V0c2V0KHN0cm9rZVdpZHRoT3V0c2V0KCkpOwpAQCAtMTMzNiwxMyArMTMzNiwxMyBAQAogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIGZsb2F0KiBtUG9pbnRzOworICAgIGNvbnN0IGZsb2F0KiBtUG9pbnRzOwogICAgIGludCBtQ291bnQ7CiB9OwogCiBjbGFzcyBEcmF3UG9pbnRzT3AgOiBwdWJsaWMgRHJhd0xpbmVzT3AgewogcHVibGljOgotICAgIERyYXdQb2ludHNPcChmbG9hdCogcG9pbnRzLCBpbnQgY291bnQsIFNrUGFpbnQqIHBhaW50KQorICAgIERyYXdQb2ludHNPcChjb25zdCBmbG9hdCogcG9pbnRzLCBpbnQgY291bnQsIGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgICAgICAgICAgOiBEcmF3TGluZXNPcChwb2ludHMsIGNvdW50LCBwYWludCkge30KIAogICAgIHZpcnR1YWwgc3RhdHVzX3QgYXBwbHlEcmF3KE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgUmVjdCYgZGlydHkpIHsKQEAgLTEzNTgsNyArMTM1OCw3IEBACiAKIGNsYXNzIERyYXdTb21lVGV4dE9wIDogcHVibGljIERyYXdPcCB7CiBwdWJsaWM6Ci0gICAgRHJhd1NvbWVUZXh0T3AoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwgU2tQYWludCogcGFpbnQpCisgICAgRHJhd1NvbWVUZXh0T3AoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQpCiAgICAgICAgICAgICA6IERyYXdPcChwYWludCksIG1UZXh0KHRleHQpLCBtQnl0ZXNDb3VudChieXRlc0NvdW50KSwgbUNvdW50KGNvdW50KSB7fTsKIAogICAgIHZpcnR1YWwgdm9pZCBvdXRwdXQoaW50IGxldmVsLCB1aW50MzJfdCBsb2dGbGFncykgY29uc3QgewpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAKIAogICAgIHZpcnR1YWwgdm9pZCBvbkRlZmVyKE9wZW5HTFJlbmRlcmVyJiByZW5kZXJlciwgRGVmZXJJbmZvJiBkZWZlckluZm8sCiAgICAgICAgICAgICBjb25zdCBEZWZlcnJlZERpc3BsYXlTdGF0ZSYgc3RhdGUpIHsKLSAgICAgICAgU2tQYWludCogcGFpbnQgPSBnZXRQYWludChyZW5kZXJlcik7CisgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50ID0gZ2V0UGFpbnQocmVuZGVyZXIpOwogICAgICAgICBGb250UmVuZGVyZXImIGZvbnRSZW5kZXJlciA9IHJlbmRlcmVyLmdldENhY2hlcygpLmZvbnRSZW5kZXJlci0+Z2V0Rm9udFJlbmRlcmVyKHBhaW50KTsKICAgICAgICAgZm9udFJlbmRlcmVyLnByZWNhY2hlKHBhaW50LCBtVGV4dCwgbUNvdW50LCBtYXQ0OjppZGVudGl0eSgpKTsKIApAQCAtMTM4NSw3ICsxMzg1LDcgQEAKIGNsYXNzIERyYXdUZXh0T25QYXRoT3AgOiBwdWJsaWMgRHJhd1NvbWVUZXh0T3AgewogcHVibGljOgogICAgIERyYXdUZXh0T25QYXRoT3AoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwKLSAgICAgICAgICAgIFNrUGF0aCogcGF0aCwgZmxvYXQgaE9mZnNldCwgZmxvYXQgdk9mZnNldCwgU2tQYWludCogcGFpbnQpCisgICAgICAgICAgICBjb25zdCBTa1BhdGgqIHBhdGgsIGZsb2F0IGhPZmZzZXQsIGZsb2F0IHZPZmZzZXQsIGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgICAgICAgICAgOiBEcmF3U29tZVRleHRPcCh0ZXh0LCBieXRlc0NvdW50LCBjb3VudCwgcGFpbnQpLAogICAgICAgICAgICAgbVBhdGgocGF0aCksIG1IT2Zmc2V0KGhPZmZzZXQpLCBtVk9mZnNldCh2T2Zmc2V0KSB7CiAgICAgICAgIC8qIFRPRE86IGluaGVyaXQgZnJvbSBEcmF3Qm91bmRlZCBhbmQgaW5pdCBtTG9jYWxCb3VuZHMgKi8KQEAgLTEzOTksNyArMTM5OSw3IEBACiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgeyByZXR1cm4gIkRyYXdUZXh0T25QYXRoIjsgfQogCiBwcml2YXRlOgotICAgIFNrUGF0aCogbVBhdGg7CisgICAgY29uc3QgU2tQYXRoKiBtUGF0aDsKICAgICBmbG9hdCBtSE9mZnNldDsKICAgICBmbG9hdCBtVk9mZnNldDsKIH07CkBAIC0xNDA3LDcgKzE0MDcsNyBAQAogY2xhc3MgRHJhd1Bvc1RleHRPcCA6IHB1YmxpYyBEcmF3U29tZVRleHRPcCB7CiBwdWJsaWM6CiAgICAgRHJhd1Bvc1RleHRPcChjb25zdCBjaGFyKiB0ZXh0LCBpbnQgYnl0ZXNDb3VudCwgaW50IGNvdW50LAotICAgICAgICAgICAgY29uc3QgZmxvYXQqIHBvc2l0aW9ucywgU2tQYWludCogcGFpbnQpCisgICAgICAgICAgICBjb25zdCBmbG9hdCogcG9zaXRpb25zLCBjb25zdCBTa1BhaW50KiBwYWludCkKICAgICAgICAgICAgIDogRHJhd1NvbWVUZXh0T3AodGV4dCwgYnl0ZXNDb3VudCwgY291bnQsIHBhaW50KSwgbVBvc2l0aW9ucyhwb3NpdGlvbnMpIHsKICAgICAgICAgLyogVE9ETzogaW5oZXJpdCBmcm9tIERyYXdCb3VuZGVkIGFuZCBpbml0IG1Mb2NhbEJvdW5kcyAqLwogICAgIH0KQEAgLTE0MjUsNyArMTQyNSw3IEBACiBjbGFzcyBEcmF3VGV4dE9wIDogcHVibGljIERyYXdCb3VuZGVkT3AgewogcHVibGljOgogICAgIERyYXdUZXh0T3AoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwgZmxvYXQgeCwgZmxvYXQgeSwKLSAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMsIFNrUGFpbnQqIHBhaW50LCBmbG9hdCB0b3RhbEFkdmFuY2UsIGNvbnN0IFJlY3QmIGJvdW5kcykKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMsIGNvbnN0IFNrUGFpbnQqIHBhaW50LCBmbG9hdCB0b3RhbEFkdmFuY2UsIGNvbnN0IFJlY3QmIGJvdW5kcykKICAgICAgICAgICAgIDogRHJhd0JvdW5kZWRPcChib3VuZHMsIHBhaW50KSwgbVRleHQodGV4dCksIG1CeXRlc0NvdW50KGJ5dGVzQ291bnQpLCBtQ291bnQoY291bnQpLAogICAgICAgICAgICAgbVgoeCksIG1ZKHkpLCBtUG9zaXRpb25zKHBvc2l0aW9ucyksIG1Ub3RhbEFkdmFuY2UodG90YWxBZHZhbmNlKSB7CiAgICAgICAgIG1lbXNldCgmbVByZWNhY2hlVHJhbnNmb3JtLmRhdGFbMF0sIDB4ZmYsIDE2ICogc2l6ZW9mKGZsb2F0KSk7CkBAIC0xNDMzLDcgKzE0MzMsNyBAQAogCiAgICAgdmlydHVhbCB2b2lkIG9uRGVmZXIoT3BlbkdMUmVuZGVyZXImIHJlbmRlcmVyLCBEZWZlckluZm8mIGRlZmVySW5mbywKICAgICAgICAgICAgIGNvbnN0IERlZmVycmVkRGlzcGxheVN0YXRlJiBzdGF0ZSkgewotICAgICAgICBTa1BhaW50KiBwYWludCA9IGdldFBhaW50KHJlbmRlcmVyKTsKKyAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQgPSBnZXRQYWludChyZW5kZXJlcik7CiAgICAgICAgIEZvbnRSZW5kZXJlciYgZm9udFJlbmRlcmVyID0gcmVuZGVyZXIuZ2V0Q2FjaGVzKCkuZm9udFJlbmRlcmVyLT5nZXRGb250UmVuZGVyZXIocGFpbnQpOwogICAgICAgICBjb25zdCBtYXQ0JiB0cmFuc2Zvcm0gPSByZW5kZXJlci5maW5kQmVzdEZvbnRUcmFuc2Zvcm0oc3RhdGUubU1hdHJpeCk7CiAgICAgICAgIGlmIChtUHJlY2FjaGVUcmFuc2Zvcm0gIT0gdHJhbnNmb3JtKSB7CkBAIC0xNTAyLDcgKzE1MDIsNyBAQAogY2xhc3MgRHJhd0Z1bmN0b3JPcCA6IHB1YmxpYyBEcmF3T3AgewogcHVibGljOgogICAgIERyYXdGdW5jdG9yT3AoRnVuY3RvciogZnVuY3RvcikKLSAgICAgICAgICAgIDogRHJhd09wKDApLCBtRnVuY3RvcihmdW5jdG9yKSB7fQorICAgICAgICAgICAgOiBEcmF3T3AoTlVMTCksIG1GdW5jdG9yKGZ1bmN0b3IpIHt9CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGFwcGx5RHJhdyhPcGVuR0xSZW5kZXJlciYgcmVuZGVyZXIsIFJlY3QmIGRpcnR5KSB7CiAgICAgICAgIHJlbmRlcmVyLnN0YXJ0TWFyaygiR0wgZnVuY3RvciIpOwpAQCAtMTUyMiwyMCArMTUyMiwyMSBAQAogfTsKIAogY2xhc3MgRHJhd0Rpc3BsYXlMaXN0T3AgOiBwdWJsaWMgRHJhd0JvdW5kZWRPcCB7CisgICAgZnJpZW5kIGNsYXNzIERpc3BsYXlMaXN0OyAvLyBncmFudCBEaXNwbGF5TGlzdCBhY2Nlc3MgdG8gaW5mbyBvZiBjaGlsZAogcHVibGljOgotICAgIERyYXdEaXNwbGF5TGlzdE9wKERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCwgaW50IGZsYWdzKQorICAgIERyYXdEaXNwbGF5TGlzdE9wKERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCwgaW50IGZsYWdzLCBjb25zdCBtYXQ0JiB0cmFuc2Zvcm1Gcm9tUGFyZW50KQogICAgICAgICAgICAgOiBEcmF3Qm91bmRlZE9wKDAsIDAsIGRpc3BsYXlMaXN0LT5nZXRXaWR0aCgpLCBkaXNwbGF5TGlzdC0+Z2V0SGVpZ2h0KCksIDApLAotICAgICAgICAgICAgbURpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KSwgbUZsYWdzKGZsYWdzKSB7fQorICAgICAgICAgICAgbURpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KSwgbUZsYWdzKGZsYWdzKSwgbVRyYW5zZm9ybUZyb21QYXJlbnQodHJhbnNmb3JtRnJvbVBhcmVudCkge30KIAogICAgIHZpcnR1YWwgdm9pZCBkZWZlcihEZWZlclN0YXRlU3RydWN0JiBkZWZlclN0cnVjdCwgaW50IHNhdmVDb3VudCwgaW50IGxldmVsLAogICAgICAgICAgICAgYm9vbCB1c2VRdWlja1JlamVjdCkgewotICAgICAgICBpZiAobURpc3BsYXlMaXN0ICYmIG1EaXNwbGF5TGlzdC0+aXNSZW5kZXJhYmxlKCkpIHsKKyAgICAgICAgaWYgKG1EaXNwbGF5TGlzdCAmJiBtRGlzcGxheUxpc3QtPmlzUmVuZGVyYWJsZSgpICYmICFtU2tpcEluT3JkZXJEcmF3KSB7CiAgICAgICAgICAgICBtRGlzcGxheUxpc3QtPmRlZmVyKGRlZmVyU3RydWN0LCBsZXZlbCArIDEpOwogICAgICAgICB9CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCByZXBsYXkoUmVwbGF5U3RhdGVTdHJ1Y3QmIHJlcGxheVN0cnVjdCwgaW50IHNhdmVDb3VudCwgaW50IGxldmVsLAogICAgICAgICAgICAgYm9vbCB1c2VRdWlja1JlamVjdCkgewotICAgICAgICBpZiAobURpc3BsYXlMaXN0ICYmIG1EaXNwbGF5TGlzdC0+aXNSZW5kZXJhYmxlKCkpIHsKKyAgICAgICAgaWYgKG1EaXNwbGF5TGlzdCAmJiBtRGlzcGxheUxpc3QtPmlzUmVuZGVyYWJsZSgpICYmICFtU2tpcEluT3JkZXJEcmF3KSB7CiAgICAgICAgICAgICBtRGlzcGxheUxpc3QtPnJlcGxheShyZXBsYXlTdHJ1Y3QsIGxldmVsICsgMSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTU2LDEzICsxNTU3LDU4IEBACiAKIHByaXZhdGU6CiAgICAgRGlzcGxheUxpc3QqIG1EaXNwbGF5TGlzdDsKLSAgICBpbnQgbUZsYWdzOworICAgIGNvbnN0IGludCBtRmxhZ3M7CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBQcm9wZXJ0aWVzIGJlbG93IGFyZSB1c2VkIGJ5IERpc3BsYXlMaXN0Ojpjb21wdXRlT3JkZXJpbmdJbXBsKCkgYW5kIGl0ZXJhdGUoKQorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8qKgorICAgICAqIFJlY29yZHMgdHJhbnNmb3JtIHZzIHBhcmVudCwgdXNlZCBmb3IgY29tcHV0aW5nIHRvdGFsIHRyYW5zZm9ybSB3aXRob3V0IHJlcnVubmluZyBETCBjb250ZW50cworICAgICAqLworICAgIGNvbnN0IG1hdDQgbVRyYW5zZm9ybUZyb21QYXJlbnQ7CisKKyAgICAvKioKKyAgICAgKiBIb2xkcyB0aGUgdHJhbnNmb3JtYXRpb24gYmV0d2VlbiB0aGUgM2Qgcm9vdCBPUiBwcm9qZWN0aW9uIHN1cmZhY2UgVmlld0dyb3VwIGFuZCB0aGlzCisgICAgICogRGlzcGxheUxpc3QgZHJhd2luZyBpbnN0YW5jZS4gUmVwcmVzZW50cyBhbnkgdHJhbnNsYXRpb25zIC8gdHJhbnNmb3JtYXRpb25zIGRvbmUgd2l0aGluIHRoZQorICAgICAqIGRyYXdpbmcgb2YgdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yIFZpZXdHcm91cCdzIGRyYXcsIGJlZm9yZSB0aGUgZHJhdyBvZiB0aGUgVmlldyByZXByZXNlbnRlZAorICAgICAqIGJ5IHRoaXMgRGlzcGxheUxpc3QgZHJhdyBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqIE5vdGU6IGRvZXNuJ3QgaW5jbHVkZSBhbnkgdHJhbnNmb3JtYXRpb24gcmVjb3JkZWQgd2l0aGluIHRoZSBEaXNwbGF5TGlzdCBhbmQgaXRzIHByb3BlcnRpZXMuCisgICAgICovCisgICAgbWF0NCBtVHJhbnNmb3JtRnJvbUNvbXBvc2l0aW5nQW5jZXN0b3I7CisgICAgYm9vbCBtU2tpcEluT3JkZXJEcmF3OworfTsKKworLyoqCisgKiBOb3QgYSBjYW52YXMgb3BlcmF0aW9uLCB1c2VkIG9ubHkgYnkgM2QgLyB6IG9yZGVyaW5nIGxvZ2ljIGluIERpc3BsYXlMaXN0OjppdGVyYXRlKCkKKyAqLworY2xhc3MgRHJhd1NoYWRvd09wIDogcHVibGljIERyYXdPcCB7CitwdWJsaWM6CisgICAgRHJhd1NoYWRvd09wKGNvbnN0IG1hdDQmIGNhc3RlclRyYW5zZm9ybSwgZmxvYXQgY2FzdGVyQWxwaGEsIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCisgICAgICAgICAgICA6IERyYXdPcChOVUxMKSwgbUNhc3RlclRyYW5zZm9ybShjYXN0ZXJUcmFuc2Zvcm0pLCBtQ2FzdGVyQWxwaGEoY2FzdGVyQWxwaGEpLAorICAgICAgICAgICAgbVdpZHRoKHdpZHRoKSwgbUhlaWdodChoZWlnaHQpIHt9CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IGFwcGx5RHJhdyhPcGVuR0xSZW5kZXJlciYgcmVuZGVyZXIsIFJlY3QmIGRpcnR5KSB7CisgICAgICAgIHJldHVybiByZW5kZXJlci5kcmF3U2hhZG93KG1DYXN0ZXJUcmFuc2Zvcm0sIG1DYXN0ZXJBbHBoYSwgbVdpZHRoLCBtSGVpZ2h0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb3V0cHV0KGludCBsZXZlbCwgdWludDMyX3QgbG9nRmxhZ3MpIGNvbnN0IHsKKyAgICAgICAgT1BfTE9HKCJEcmF3U2hhZG93IG9mIHdpZHRoICUuMmYsIGhlaWdodCAlLjJmIiwgbVdpZHRoLCBtSGVpZ2h0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAiRHJhd1NoYWRvdyI7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBtYXQ0IG1DYXN0ZXJUcmFuc2Zvcm07CisgICAgY29uc3QgZmxvYXQgbUNhc3RlckFscGhhOworICAgIGNvbnN0IGZsb2F0IG1XaWR0aDsKKyAgICBjb25zdCBmbG9hdCBtSGVpZ2h0OwogfTsKIAogY2xhc3MgRHJhd0xheWVyT3AgOiBwdWJsaWMgRHJhd09wIHsKIHB1YmxpYzoKICAgICBEcmF3TGF5ZXJPcChMYXllciogbGF5ZXIsIGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgICAgICAgICA6IERyYXdPcCgwKSwgbUxheWVyKGxheWVyKSwgbVgoeCksIG1ZKHkpIHt9CisgICAgICAgICAgICA6IERyYXdPcChOVUxMKSwgbUxheWVyKGxheWVyKSwgbVgoeCksIG1ZKHkpIHt9CiAKICAgICB2aXJ0dWFsIHN0YXR1c190IGFwcGx5RHJhdyhPcGVuR0xSZW5kZXJlciYgcmVuZGVyZXIsIFJlY3QmIGRpcnR5KSB7CiAgICAgICAgIHJldHVybiByZW5kZXJlci5kcmF3TGF5ZXIobUxheWVyLCBtWCwgbVkpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0Rpc3BsYXlMaXN0UmVuZGVyZXIuY3BwIGIvbGlicy9od3VpL0Rpc3BsYXlMaXN0UmVuZGVyZXIuY3BwCmluZGV4IDg4NjYwMjkuLmM4YTZjMmQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9EaXNwbGF5TGlzdFJlbmRlcmVyLmNwcAorKysgYi9saWJzL2h3dWkvRGlzcGxheUxpc3RSZW5kZXJlci5jcHAKQEAgLTExMSwzMCArMTExLDIzIEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgZGlzcGxheUxpc3QtPmluaXRGcm9tRGlzcGxheUxpc3RSZW5kZXJlcigqdGhpcywgdHJ1ZSk7CiAgICAgfQorICAgIC8vIFRPRE86IHNob3VsZCBqdXN0IGF2b2lkIHNldHRpbmcgdGhlIERpc3BsYXlMaXN0J3MgRGlzcGxheUxpc3REYXRhCiAgICAgZGlzcGxheUxpc3QtPnNldFJlbmRlcmFibGUobUhhc0RyYXdPcHMpOwogICAgIHJldHVybiBkaXNwbGF5TGlzdDsKIH0KIAotYm9vbCBEaXNwbGF5TGlzdFJlbmRlcmVyOjppc0RlZmVycmVkKCkgewotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIERpc3BsYXlMaXN0UmVuZGVyZXI6OnNldFZpZXdwb3J0KGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIG1PcnRob01hdHJpeC5sb2FkT3J0aG8oMCwgd2lkdGgsIGhlaWdodCwgMCwgLTEsIDEpOworICAgIC8vIFRPRE86IERpc3BsYXlMaXN0UmVuZGVyZXIgc2hvdWxkbid0IGhhdmUgYSBwcm9qZWN0aW9uIG1hdHJpeCwgYXMgaXQgc2hvdWxkIG5ldmVyIGJlIHVzZWQKKyAgICBtVmlld1Byb2pNYXRyaXgubG9hZE9ydGhvKDAsIHdpZHRoLCBoZWlnaHQsIDAsIC0xLCAxKTsKIAotICAgIG1XaWR0aCA9IHdpZHRoOwotICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgaW5pdGlhbGl6ZVZpZXdwb3J0KHdpZHRoLCBoZWlnaHQpOwogfQogCiBzdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpwcmVwYXJlRGlydHkoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLAogICAgICAgICBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBib29sIG9wYXF1ZSkgewotICAgIG1TbmFwc2hvdCA9IG5ldyBTbmFwc2hvdChtRmlyc3RTbmFwc2hvdCwKLSAgICAgICAgICAgIFNrQ2FudmFzOjprTWF0cml4X1NhdmVGbGFnIHwgU2tDYW52YXM6OmtDbGlwX1NhdmVGbGFnKTsKLSAgICBtU2F2ZUNvdW50ID0gMTsKKyAgICBpbml0aWFsaXplU2F2ZVN0YWNrKDAsIDAsIGdldFdpZHRoKCksIGdldEhlaWdodCgpKTsKIAotICAgIG1TbmFwc2hvdC0+c2V0Q2xpcCgwLjBmLCAwLjBmLCBtV2lkdGgsIG1IZWlnaHQpOwogICAgIG1EaXJ0eUNsaXAgPSBvcGFxdWU7Ci0KICAgICBtUmVzdG9yZVNhdmVDb3VudCA9IC0xOwogCiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOyAvLyBObyBpbnZhbGlkYXRlIG5lZWRlZCBhdCByZWNvcmQtdGltZQpAQCAtMTYwLDcgKzE1Myw3IEBACiAKIGludCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpzYXZlKGludCBmbGFncykgewogICAgIGFkZFN0YXRlT3AobmV3IChhbGxvYygpKSBTYXZlT3AoZmxhZ3MpKTsKLSAgICByZXR1cm4gT3BlbkdMUmVuZGVyZXI6OnNhdmUoZmxhZ3MpOworICAgIHJldHVybiBTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6c2F2ZShmbGFncyk7CiB9CiAKIHZvaWQgRGlzcGxheUxpc3RSZW5kZXJlcjo6cmVzdG9yZSgpIHsKQEAgLTE3MSw3MiArMTY0LDgxIEBACiAKICAgICBtUmVzdG9yZVNhdmVDb3VudC0tOwogICAgIGluc2VydFRyYW5zbGF0ZSgpOwotICAgIE9wZW5HTFJlbmRlcmVyOjpyZXN0b3JlKCk7CisgICAgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OnJlc3RvcmUoKTsKIH0KIAogdm9pZCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpyZXN0b3JlVG9Db3VudChpbnQgc2F2ZUNvdW50KSB7CiAgICAgbVJlc3RvcmVTYXZlQ291bnQgPSBzYXZlQ291bnQ7CiAgICAgaW5zZXJ0VHJhbnNsYXRlKCk7Ci0gICAgT3BlbkdMUmVuZGVyZXI6OnJlc3RvcmVUb0NvdW50KHNhdmVDb3VudCk7CisgICAgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OnJlc3RvcmVUb0NvdW50KHNhdmVDb3VudCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3RSZW5kZXJlcjo6b25TbmFwc2hvdFJlc3RvcmVkKGNvbnN0IFNuYXBzaG90JiByZW1vdmVkLCBjb25zdCBTbmFwc2hvdCYgcmVzdG9yZWQpIHsKKyAgICBib29sIHJlc3RvcmVQcm9qZWN0aW9uID0gcmVtb3ZlZC5mbGFncyAmIFNuYXBzaG90OjprRmxhZ1Byb2plY3Rpb25UYXJnZXQ7CisgICAgaWYgKHJlc3RvcmVQcm9qZWN0aW9uKSB7CisgICAgICAgIG1EaXNwbGF5TGlzdERhdGEtPnByb2plY3Rpb25JbmRleCA9IG1EaXNwbGF5TGlzdERhdGEtPmRpc3BsYXlMaXN0T3BzLnNpemUoKSAtIDE7CisgICAgICAgIG1EaXNwbGF5TGlzdERhdGEtPnByb2plY3Rpb25UcmFuc2Zvcm0ubG9hZCgqY3VycmVudFRyYW5zZm9ybSgpKTsKKyAgICB9CiB9CiAKIGludCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpzYXZlTGF5ZXIoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAogICAgICAgICBpbnQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwgaW50IGZsYWdzKSB7CiAgICAgYWRkU3RhdGVPcChuZXcgKGFsbG9jKCkpIFNhdmVMYXllck9wKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgYWxwaGEsIG1vZGUsIGZsYWdzKSk7Ci0gICAgcmV0dXJuIE9wZW5HTFJlbmRlcmVyOjpzYXZlKGZsYWdzKTsKKyAgICByZXR1cm4gU3RhdGVmdWxCYXNlUmVuZGVyZXI6OnNhdmUoZmxhZ3MpOwogfQogCi12b2lkIERpc3BsYXlMaXN0UmVuZGVyZXI6OnRyYW5zbGF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpIHsKK3ZvaWQgRGlzcGxheUxpc3RSZW5kZXJlcjo6dHJhbnNsYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHopIHsKKyAgICAvLyBpZ25vcmUgZHosIG5vdCB1c2VkIGF0IGRlZmVyIHRpbWUKICAgICBtSGFzVHJhbnNsYXRlID0gdHJ1ZTsKICAgICBtVHJhbnNsYXRlWCArPSBkeDsKICAgICBtVHJhbnNsYXRlWSArPSBkeTsKICAgICBpbnNlcnRSZXN0b3JlVG9Db3VudCgpOwotICAgIE9wZW5HTFJlbmRlcmVyOjp0cmFuc2xhdGUoZHgsIGR5KTsKKyAgICBTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6dHJhbnNsYXRlKGR4LCBkeSwgZHopOwogfQogCiB2b2lkIERpc3BsYXlMaXN0UmVuZGVyZXI6OnJvdGF0ZShmbG9hdCBkZWdyZWVzKSB7CiAgICAgYWRkU3RhdGVPcChuZXcgKGFsbG9jKCkpIFJvdGF0ZU9wKGRlZ3JlZXMpKTsKLSAgICBPcGVuR0xSZW5kZXJlcjo6cm90YXRlKGRlZ3JlZXMpOworICAgIFN0YXRlZnVsQmFzZVJlbmRlcmVyOjpyb3RhdGUoZGVncmVlcyk7CiB9CiAKIHZvaWQgRGlzcGxheUxpc3RSZW5kZXJlcjo6c2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KSB7CiAgICAgYWRkU3RhdGVPcChuZXcgKGFsbG9jKCkpIFNjYWxlT3Aoc3gsIHN5KSk7Ci0gICAgT3BlbkdMUmVuZGVyZXI6OnNjYWxlKHN4LCBzeSk7CisgICAgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OnNjYWxlKHN4LCBzeSk7CiB9CiAKIHZvaWQgRGlzcGxheUxpc3RSZW5kZXJlcjo6c2tldyhmbG9hdCBzeCwgZmxvYXQgc3kpIHsKICAgICBhZGRTdGF0ZU9wKG5ldyAoYWxsb2MoKSkgU2tld09wKHN4LCBzeSkpOwotICAgIE9wZW5HTFJlbmRlcmVyOjpza2V3KHN4LCBzeSk7CisgICAgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OnNrZXcoc3gsIHN5KTsKIH0KIAotdm9pZCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpzZXRNYXRyaXgoU2tNYXRyaXgqIG1hdHJpeCkgewordm9pZCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpzZXRNYXRyaXgoY29uc3QgU2tNYXRyaXgqIG1hdHJpeCkgewogICAgIG1hdHJpeCA9IHJlZk1hdHJpeChtYXRyaXgpOwogICAgIGFkZFN0YXRlT3AobmV3IChhbGxvYygpKSBTZXRNYXRyaXhPcChtYXRyaXgpKTsKLSAgICBPcGVuR0xSZW5kZXJlcjo6c2V0TWF0cml4KG1hdHJpeCk7CisgICAgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OnNldE1hdHJpeChtYXRyaXgpOwogfQogCi12b2lkIERpc3BsYXlMaXN0UmVuZGVyZXI6OmNvbmNhdE1hdHJpeChTa01hdHJpeCogbWF0cml4KSB7Cit2b2lkIERpc3BsYXlMaXN0UmVuZGVyZXI6OmNvbmNhdE1hdHJpeChjb25zdCBTa01hdHJpeCogbWF0cml4KSB7CiAgICAgbWF0cml4ID0gcmVmTWF0cml4KG1hdHJpeCk7CiAgICAgYWRkU3RhdGVPcChuZXcgKGFsbG9jKCkpIENvbmNhdE1hdHJpeE9wKG1hdHJpeCkpOwotICAgIE9wZW5HTFJlbmRlcmVyOjpjb25jYXRNYXRyaXgobWF0cml4KTsKKyAgICBTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6Y29uY2F0TWF0cml4KG1hdHJpeCk7CiB9CiAKIGJvb2wgRGlzcGxheUxpc3RSZW5kZXJlcjo6Y2xpcFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAogICAgICAgICBTa1JlZ2lvbjo6T3Agb3ApIHsKICAgICBhZGRTdGF0ZU9wKG5ldyAoYWxsb2MoKSkgQ2xpcFJlY3RPcChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIG9wKSk7Ci0gICAgcmV0dXJuIE9wZW5HTFJlbmRlcmVyOjpjbGlwUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIG9wKTsKKyAgICByZXR1cm4gU3RhdGVmdWxCYXNlUmVuZGVyZXI6OmNsaXBSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgb3ApOwogfQogCi1ib29sIERpc3BsYXlMaXN0UmVuZGVyZXI6OmNsaXBQYXRoKFNrUGF0aCogcGF0aCwgU2tSZWdpb246Ok9wIG9wKSB7Citib29sIERpc3BsYXlMaXN0UmVuZGVyZXI6OmNsaXBQYXRoKGNvbnN0IFNrUGF0aCogcGF0aCwgU2tSZWdpb246Ok9wIG9wKSB7CiAgICAgcGF0aCA9IHJlZlBhdGgocGF0aCk7CiAgICAgYWRkU3RhdGVPcChuZXcgKGFsbG9jKCkpIENsaXBQYXRoT3AocGF0aCwgb3ApKTsKLSAgICByZXR1cm4gT3BlbkdMUmVuZGVyZXI6OmNsaXBQYXRoKHBhdGgsIG9wKTsKKyAgICByZXR1cm4gU3RhdGVmdWxCYXNlUmVuZGVyZXI6OmNsaXBQYXRoKHBhdGgsIG9wKTsKIH0KIAotYm9vbCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpjbGlwUmVnaW9uKFNrUmVnaW9uKiByZWdpb24sIFNrUmVnaW9uOjpPcCBvcCkgeworYm9vbCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpjbGlwUmVnaW9uKGNvbnN0IFNrUmVnaW9uKiByZWdpb24sIFNrUmVnaW9uOjpPcCBvcCkgewogICAgIHJlZ2lvbiA9IHJlZlJlZ2lvbihyZWdpb24pOwogICAgIGFkZFN0YXRlT3AobmV3IChhbGxvYygpKSBDbGlwUmVnaW9uT3AocmVnaW9uLCBvcCkpOwotICAgIHJldHVybiBPcGVuR0xSZW5kZXJlcjo6Y2xpcFJlZ2lvbihyZWdpb24sIG9wKTsKKyAgICByZXR1cm4gU3RhdGVmdWxCYXNlUmVuZGVyZXI6OmNsaXBSZWdpb24ocmVnaW9uLCBvcCk7CiB9CiAKIHN0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdEaXNwbGF5TGlzdChEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsCkBAIC0yNDgsNyArMjUwLDExIEBACiAgICAgLy8gICAgICAgcmVzb3VyY2VzIGNhY2hlLCBidXQgd2UgcmVseSBvbiB0aGUgY2FsbGVyIChVSSB0b29sa2l0KSB0bwogICAgIC8vICAgICAgIGRvIHRoZSByaWdodCB0aGluZyBmb3Igbm93CiAKLSAgICBhZGREcmF3T3AobmV3IChhbGxvYygpKSBEcmF3RGlzcGxheUxpc3RPcChkaXNwbGF5TGlzdCwgZmxhZ3MpKTsKKyAgICBEcmF3RGlzcGxheUxpc3RPcCogb3AgPSBuZXcgKGFsbG9jKCkpIERyYXdEaXNwbGF5TGlzdE9wKGRpc3BsYXlMaXN0LAorICAgICAgICAgICAgZmxhZ3MsICpjdXJyZW50VHJhbnNmb3JtKCkpOworICAgIGFkZERyYXdPcChvcCk7CisgICAgbURpc3BsYXlMaXN0RGF0YS0+Y2hpbGRyZW4ucHVzaChvcCk7CisKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiB9CiAKQEAgLTI1OCw3ICsyNjQsOCBAQAogICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKIH0KIAotc3RhdHVzX3QgRGlzcGxheUxpc3RSZW5kZXJlcjo6ZHJhd0JpdG1hcChTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIFNrUGFpbnQqIHBhaW50KSB7CitzdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpkcmF3Qml0bWFwKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKKyAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBiaXRtYXAgPSByZWZCaXRtYXAoYml0bWFwKTsKICAgICBwYWludCA9IHJlZlBhaW50KHBhaW50KTsKIApAQCAtMjY2LDcgKzI3Myw4IEBACiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogfQogCi1zdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpkcmF3Qml0bWFwKFNrQml0bWFwKiBiaXRtYXAsIFNrTWF0cml4KiBtYXRyaXgsIFNrUGFpbnQqIHBhaW50KSB7CitzdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpkcmF3Qml0bWFwKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGNvbnN0IFNrTWF0cml4KiBtYXRyaXgsCisgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgYml0bWFwID0gcmVmQml0bWFwKGJpdG1hcCk7CiAgICAgbWF0cml4ID0gcmVmTWF0cml4KG1hdHJpeCk7CiAgICAgcGFpbnQgPSByZWZQYWludChwYWludCk7CkBAIC0yNzUsOSArMjgzLDkgQEAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiB9CiAKLXN0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdCaXRtYXAoU2tCaXRtYXAqIGJpdG1hcCwgZmxvYXQgc3JjTGVmdCwgZmxvYXQgc3JjVG9wLAorc3RhdHVzX3QgRGlzcGxheUxpc3RSZW5kZXJlcjo6ZHJhd0JpdG1hcChjb25zdCBTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBzcmNMZWZ0LCBmbG9hdCBzcmNUb3AsCiAgICAgICAgIGZsb2F0IHNyY1JpZ2h0LCBmbG9hdCBzcmNCb3R0b20sIGZsb2F0IGRzdExlZnQsIGZsb2F0IGRzdFRvcCwKLSAgICAgICAgZmxvYXQgZHN0UmlnaHQsIGZsb2F0IGRzdEJvdHRvbSwgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgZmxvYXQgZHN0UmlnaHQsIGZsb2F0IGRzdEJvdHRvbSwgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBiaXRtYXAgPSByZWZCaXRtYXAoYml0bWFwKTsKICAgICBwYWludCA9IHJlZlBhaW50KHBhaW50KTsKIApAQCAtMjk2LDggKzMwNCw4IEBACiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogfQogCi1zdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpkcmF3Qml0bWFwRGF0YShTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsCi0gICAgICAgIFNrUGFpbnQqIHBhaW50KSB7CitzdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpkcmF3Qml0bWFwRGF0YShjb25zdCBTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsCisgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgYml0bWFwID0gcmVmQml0bWFwRGF0YShiaXRtYXApOwogICAgIHBhaW50ID0gcmVmUGFpbnQocGFpbnQpOwogCkBAIC0zMDUsOCArMzEzLDggQEAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiB9CiAKLXN0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdCaXRtYXBNZXNoKFNrQml0bWFwKiBiaXRtYXAsIGludCBtZXNoV2lkdGgsIGludCBtZXNoSGVpZ2h0LAotICAgICAgICBmbG9hdCogdmVydGljZXMsIGludCogY29sb3JzLCBTa1BhaW50KiBwYWludCkgeworc3RhdHVzX3QgRGlzcGxheUxpc3RSZW5kZXJlcjo6ZHJhd0JpdG1hcE1lc2goY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgaW50IG1lc2hXaWR0aCwgaW50IG1lc2hIZWlnaHQsCisgICAgICAgIGNvbnN0IGZsb2F0KiB2ZXJ0aWNlcywgY29uc3QgaW50KiBjb2xvcnMsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgaW50IGNvdW50ID0gKG1lc2hXaWR0aCArIDEpICogKG1lc2hIZWlnaHQgKyAxKSAqIDI7CiAgICAgYml0bWFwID0gcmVmQml0bWFwKGJpdG1hcCk7CiAgICAgdmVydGljZXMgPSByZWZCdWZmZXI8ZmxvYXQ+KHZlcnRpY2VzLCBjb3VudCk7CkBAIC0zMTgsOCArMzI2LDggQEAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiB9CiAKLXN0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdQYXRjaChTa0JpdG1hcCogYml0bWFwLCBSZXNfcG5nXzlwYXRjaCogcGF0Y2gsCi0gICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tQYWludCogcGFpbnQpIHsKK3N0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdQYXRjaChjb25zdCBTa0JpdG1hcCogYml0bWFwLCBjb25zdCBSZXNfcG5nXzlwYXRjaCogcGF0Y2gsCisgICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBiaXRtYXAgPSByZWZCaXRtYXAoYml0bWFwKTsKICAgICBwYXRjaCA9IHJlZlBhdGNoKHBhdGNoKTsKICAgICBwYWludCA9IHJlZlBhaW50KHBhaW50KTsKQEAgLTMzNCw0MSArMzQyLDQxIEBACiB9CiAKIHN0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdSZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBwYWludCA9IHJlZlBhaW50KHBhaW50KTsKICAgICBhZGREcmF3T3AobmV3IChhbGxvYygpKSBEcmF3UmVjdE9wKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcGFpbnQpKTsKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiB9CiAKIHN0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdSb3VuZFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICBmbG9hdCByeCwgZmxvYXQgcnksIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGZsb2F0IHJ4LCBmbG9hdCByeSwgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBwYWludCA9IHJlZlBhaW50KHBhaW50KTsKICAgICBhZGREcmF3T3AobmV3IChhbGxvYygpKSBEcmF3Um91bmRSZWN0T3AobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCByeCwgcnksIHBhaW50KSk7CiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogfQogCi1zdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpkcmF3Q2lyY2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywgU2tQYWludCogcGFpbnQpIHsKK3N0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdDaXJjbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLCBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIHBhaW50ID0gcmVmUGFpbnQocGFpbnQpOwogICAgIGFkZERyYXdPcChuZXcgKGFsbG9jKCkpIERyYXdDaXJjbGVPcCh4LCB5LCByYWRpdXMsIHBhaW50KSk7CiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogfQogCiBzdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpkcmF3T3ZhbChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgcGFpbnQgPSByZWZQYWludChwYWludCk7CiAgICAgYWRkRHJhd09wKG5ldyAoYWxsb2MoKSkgRHJhd092YWxPcChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHBhaW50KSk7CiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogfQogCiBzdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpkcmF3QXJjKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgc3dlZXBBbmdsZSwgYm9vbCB1c2VDZW50ZXIsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IHN3ZWVwQW5nbGUsIGJvb2wgdXNlQ2VudGVyLCBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIHBhaW50ID0gcmVmUGFpbnQocGFpbnQpOwogICAgIGFkZERyYXdPcChuZXcgKGFsbG9jKCkpIERyYXdBcmNPcChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sCiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsIHN3ZWVwQW5nbGUsIHVzZUNlbnRlciwgcGFpbnQpKTsKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiB9CiAKLXN0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdQYXRoKFNrUGF0aCogcGF0aCwgU2tQYWludCogcGFpbnQpIHsKK3N0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdQYXRoKGNvbnN0IFNrUGF0aCogcGF0aCwgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBwYXRoID0gcmVmUGF0aChwYXRoKTsKICAgICBwYWludCA9IHJlZlBhaW50KHBhaW50KTsKIApAQCAtMzc2LDcgKzM4NCw3IEBACiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogfQogCi1zdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpkcmF3TGluZXMoZmxvYXQqIHBvaW50cywgaW50IGNvdW50LCBTa1BhaW50KiBwYWludCkgeworc3RhdHVzX3QgRGlzcGxheUxpc3RSZW5kZXJlcjo6ZHJhd0xpbmVzKGNvbnN0IGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBwb2ludHMgPSByZWZCdWZmZXI8ZmxvYXQ+KHBvaW50cywgY291bnQpOwogICAgIHBhaW50ID0gcmVmUGFpbnQocGFpbnQpOwogCkBAIC0zODQsNyArMzkyLDcgQEAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiB9CiAKLXN0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdQb2ludHMoZmxvYXQqIHBvaW50cywgaW50IGNvdW50LCBTa1BhaW50KiBwYWludCkgeworc3RhdHVzX3QgRGlzcGxheUxpc3RSZW5kZXJlcjo6ZHJhd1BvaW50cyhjb25zdCBmbG9hdCogcG9pbnRzLCBpbnQgY291bnQsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgcG9pbnRzID0gcmVmQnVmZmVyPGZsb2F0Pihwb2ludHMsIGNvdW50KTsKICAgICBwYWludCA9IHJlZlBhaW50KHBhaW50KTsKIApAQCAtMzkzLDcgKzQwMSw3IEBACiB9CiAKIHN0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdUZXh0T25QYXRoKGNvbnN0IGNoYXIqIHRleHQsIGludCBieXRlc0NvdW50LCBpbnQgY291bnQsCi0gICAgICAgIFNrUGF0aCogcGF0aCwgZmxvYXQgaE9mZnNldCwgZmxvYXQgdk9mZnNldCwgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgY29uc3QgU2tQYXRoKiBwYXRoLCBmbG9hdCBoT2Zmc2V0LCBmbG9hdCB2T2Zmc2V0LCBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIGlmICghdGV4dCB8fCBjb3VudCA8PSAwKSByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAKICAgICB0ZXh0ID0gcmVmVGV4dCh0ZXh0LCBieXRlc0NvdW50KTsKQEAgLTQwNyw3ICs0MTUsNyBAQAogfQogCiBzdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpkcmF3UG9zVGV4dChjb25zdCBjaGFyKiB0ZXh0LCBpbnQgYnl0ZXNDb3VudCwgaW50IGNvdW50LAotICAgICAgICBjb25zdCBmbG9hdCogcG9zaXRpb25zLCBTa1BhaW50KiBwYWludCkgeworICAgICAgICBjb25zdCBmbG9hdCogcG9zaXRpb25zLCBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIGlmICghdGV4dCB8fCBjb3VudCA8PSAwKSByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAKICAgICB0ZXh0ID0gcmVmVGV4dCh0ZXh0LCBieXRlc0NvdW50KTsKQEAgLTQyMCw3ICs0MjgsNyBAQAogfQogCiBzdGF0dXNfdCBEaXNwbGF5TGlzdFJlbmRlcmVyOjpkcmF3VGV4dChjb25zdCBjaGFyKiB0ZXh0LCBpbnQgYnl0ZXNDb3VudCwgaW50IGNvdW50LAotICAgICAgICBmbG9hdCB4LCBmbG9hdCB5LCBjb25zdCBmbG9hdCogcG9zaXRpb25zLCBTa1BhaW50KiBwYWludCwKKyAgICAgICAgZmxvYXQgeCwgZmxvYXQgeSwgY29uc3QgZmxvYXQqIHBvc2l0aW9ucywgY29uc3QgU2tQYWludCogcGFpbnQsCiAgICAgICAgIGZsb2F0IHRvdGFsQWR2YW5jZSwgY29uc3QgUmVjdCYgYm91bmRzLCBEcmF3T3BNb2RlIGRyYXdPcE1vZGUpIHsKIAogICAgIGlmICghdGV4dCB8fCBjb3VudCA8PSAwKSByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CkBAIC00MzUsNyArNDQzLDcgQEAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiB9CiAKLXN0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdSZWN0cyhjb25zdCBmbG9hdCogcmVjdHMsIGludCBjb3VudCwgU2tQYWludCogcGFpbnQpIHsKK3N0YXR1c190IERpc3BsYXlMaXN0UmVuZGVyZXI6OmRyYXdSZWN0cyhjb25zdCBmbG9hdCogcmVjdHMsIGludCBjb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBpZiAoY291bnQgPD0gMCkgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogCiAgICAgcmVjdHMgPSByZWZCdWZmZXI8ZmxvYXQ+KHJlY3RzLCBjb3VudCk7CkBAIC01MDYsNyArNTE0LDcgQEAKIHZvaWQgRGlzcGxheUxpc3RSZW5kZXJlcjo6YWRkRHJhd09wKERyYXdPcCogb3ApIHsKICAgICBSZWN0IGxvY2FsQm91bmRzOwogICAgIGlmIChvcC0+Z2V0TG9jYWxCb3VuZHMobURyYXdNb2RpZmllcnMsIGxvY2FsQm91bmRzKSkgewotICAgICAgICBib29sIHJlamVjdGVkID0gcXVpY2tSZWplY3ROb1NjaXNzb3IobG9jYWxCb3VuZHMubGVmdCwgbG9jYWxCb3VuZHMudG9wLAorICAgICAgICBib29sIHJlamVjdGVkID0gcXVpY2tSZWplY3RDb25zZXJ2YXRpdmUobG9jYWxCb3VuZHMubGVmdCwgbG9jYWxCb3VuZHMudG9wLAogICAgICAgICAgICAgICAgIGxvY2FsQm91bmRzLnJpZ2h0LCBsb2NhbEJvdW5kcy5ib3R0b20pOwogICAgICAgICBvcC0+c2V0UXVpY2tSZWplY3RlZChyZWplY3RlZCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0Rpc3BsYXlMaXN0UmVuZGVyZXIuaCBiL2xpYnMvaHd1aS9EaXNwbGF5TGlzdFJlbmRlcmVyLmgKaW5kZXggZDIzMzE1MC4uMTM2MDgwOCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0Rpc3BsYXlMaXN0UmVuZGVyZXIuaAorKysgYi9saWJzL2h3dWkvRGlzcGxheUxpc3RSZW5kZXJlci5oCkBAIC01NCw3ICs1NCw3IEBACiBjbGFzcyBTdGF0ZU9wOwogCiAvKioKLSAqIFJlY29yZHMgZHJhd2luZyBjb21tYW5kcyBpbiBhIGRpc3BsYXkgbGlzdCBmb3IgbGF0dGVyIHBsYXliYWNrLgorICogUmVjb3JkcyBkcmF3aW5nIGNvbW1hbmRzIGluIGEgZGlzcGxheSBsaXN0IGZvciBsYXRlciBwbGF5YmFjayBpbnRvIGFuIE9wZW5HTFJlbmRlcmVyLgogICovCiBjbGFzcyBEaXNwbGF5TGlzdFJlbmRlcmVyOiBwdWJsaWMgT3BlbkdMUmVuZGVyZXIgewogcHVibGljOgpAQCAtNjMsNjkgKzYzLDQyIEBACiAKICAgICBBTkRST0lEX0FQSSBEaXNwbGF5TGlzdCogZ2V0RGlzcGxheUxpc3QoRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0KTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0RlZmVycmVkKCk7CisgICAgdmlydHVhbCBib29sIGlzUmVjb3JkaW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGcmFtZSBzdGF0ZSBvcGVyYXRpb25zCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgdmlydHVhbCB2b2lkIHNldFZpZXdwb3J0KGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBwcmVwYXJlRGlydHkoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBib29sIG9wYXF1ZSk7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOwotCi0gICAgdmlydHVhbCBzdGF0dXNfdCBjYWxsRHJhd0dMRnVuY3Rpb24oRnVuY3RvciAqZnVuY3RvciwgUmVjdCYgZGlydHkpOwotCiAgICAgdmlydHVhbCB2b2lkIGludGVycnVwdCgpOwogICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ2FudmFzIHN0YXRlIG9wZXJhdGlvbnMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTYXZlIChsYXllcikKICAgICB2aXJ0dWFsIGludCBzYXZlKGludCBmbGFncyk7CiAgICAgdmlydHVhbCB2b2lkIHJlc3RvcmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVRvQ291bnQoaW50IHNhdmVDb3VudCk7Ci0KICAgICB2aXJ0dWFsIGludCBzYXZlTGF5ZXIoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAogICAgICAgICAgICAgaW50IGFscGhhLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUsIGludCBmbGFncyk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSk7CisgICAgLy8gTWF0cml4CisgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGR6KTsKICAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGRlZ3JlZXMpOwogICAgIHZpcnR1YWwgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpOwogICAgIHZpcnR1YWwgdm9pZCBza2V3KGZsb2F0IHN4LCBmbG9hdCBzeSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWF0cml4KFNrTWF0cml4KiBtYXRyaXgpOwotICAgIHZpcnR1YWwgdm9pZCBjb25jYXRNYXRyaXgoU2tNYXRyaXgqIG1hdHJpeCk7CisgICAgdmlydHVhbCB2b2lkIHNldE1hdHJpeChjb25zdCBTa01hdHJpeCogbWF0cml4KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29uY2F0TWF0cml4KGNvbnN0IFNrTWF0cml4KiBtYXRyaXgpOwogCisgICAgLy8gQ2xpcAogICAgIHZpcnR1YWwgYm9vbCBjbGlwUmVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIFNrUmVnaW9uOjpPcCBvcCk7Ci0gICAgdmlydHVhbCBib29sIGNsaXBQYXRoKFNrUGF0aCogcGF0aCwgU2tSZWdpb246Ok9wIG9wKTsKLSAgICB2aXJ0dWFsIGJvb2wgY2xpcFJlZ2lvbihTa1JlZ2lvbiogcmVnaW9uLCBTa1JlZ2lvbjo6T3Agb3ApOworICAgIHZpcnR1YWwgYm9vbCBjbGlwUGF0aChjb25zdCBTa1BhdGgqIHBhdGgsIFNrUmVnaW9uOjpPcCBvcCk7CisgICAgdmlydHVhbCBib29sIGNsaXBSZWdpb24oY29uc3QgU2tSZWdpb24qIHJlZ2lvbiwgU2tSZWdpb246Ok9wIG9wKTsKIAotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0Rpc3BsYXlMaXN0KERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCwgUmVjdCYgZGlydHksIGludDMyX3QgZmxhZ3MpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0xheWVyKExheWVyKiBsYXllciwgZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Qml0bWFwKFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgU2tQYWludCogcGFpbnQpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0JpdG1hcChTa0JpdG1hcCogYml0bWFwLCBTa01hdHJpeCogbWF0cml4LCBTa1BhaW50KiBwYWludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Qml0bWFwKFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IHNyY0xlZnQsIGZsb2F0IHNyY1RvcCwKLSAgICAgICAgICAgIGZsb2F0IHNyY1JpZ2h0LCBmbG9hdCBzcmNCb3R0b20sIGZsb2F0IGRzdExlZnQsIGZsb2F0IGRzdFRvcCwKLSAgICAgICAgICAgIGZsb2F0IGRzdFJpZ2h0LCBmbG9hdCBkc3RCb3R0b20sIFNrUGFpbnQqIHBhaW50KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdCaXRtYXBEYXRhKFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgU2tQYWludCogcGFpbnQpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0JpdG1hcE1lc2goU2tCaXRtYXAqIGJpdG1hcCwgaW50IG1lc2hXaWR0aCwgaW50IG1lc2hIZWlnaHQsCi0gICAgICAgICAgICBmbG9hdCogdmVydGljZXMsIGludCogY29sb3JzLCBTa1BhaW50KiBwYWludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UGF0Y2goU2tCaXRtYXAqIGJpdG1hcCwgUmVzX3BuZ185cGF0Y2gqIHBhdGNoLAotICAgICAgICAgICAgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1BhaW50KiBwYWludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Q29sb3IoaW50IGNvbG9yLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1JlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1BhaW50KiBwYWludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Um91bmRSZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgICAgIGZsb2F0IHJ4LCBmbG9hdCByeSwgU2tQYWludCogcGFpbnQpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0NpcmNsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCByYWRpdXMsIFNrUGFpbnQqIHBhaW50KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdPdmFsKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tQYWludCogcGFpbnQpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0FyYyhmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgICAgICBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBzd2VlcEFuZ2xlLCBib29sIHVzZUNlbnRlciwgU2tQYWludCogcGFpbnQpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1BhdGgoU2tQYXRoKiBwYXRoLCBTa1BhaW50KiBwYWludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3TGluZXMoZmxvYXQqIHBvaW50cywgaW50IGNvdW50LCBTa1BhaW50KiBwYWludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UG9pbnRzKGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgU2tQYWludCogcGFpbnQpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1RleHRPblBhdGgoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwgU2tQYXRoKiBwYXRoLAotICAgICAgICAgICAgZmxvYXQgaE9mZnNldCwgZmxvYXQgdk9mZnNldCwgU2tQYWludCogcGFpbnQpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1Bvc1RleHQoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwKLSAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMsIFNrUGFpbnQqIHBhaW50KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdUZXh0KGNvbnN0IGNoYXIqIHRleHQsIGludCBieXRlc0NvdW50LCBpbnQgY291bnQsIGZsb2F0IHgsIGZsb2F0IHksCi0gICAgICAgICAgICBjb25zdCBmbG9hdCogcG9zaXRpb25zLCBTa1BhaW50KiBwYWludCwgZmxvYXQgdG90YWxBZHZhbmNlLCBjb25zdCBSZWN0JiBib3VuZHMsCi0gICAgICAgICAgICBEcmF3T3BNb2RlIGRyYXdPcE1vZGUpOwotCi0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UmVjdHMoY29uc3QgZmxvYXQqIHJlY3RzLCBpbnQgY291bnQsIFNrUGFpbnQqIHBhaW50KTsKLQorICAgIC8vIE1pc2MgLSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgd2l0aCBTa1BhaW50IGluc3BlY3Rpb24KICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRTaGFkZXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0dXBTaGFkZXIoU2tpYVNoYWRlciogc2hhZGVyKTsKIApAQCAtMTM4LDE3ICsxMTEsNzQgQEAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRQYWludEZpbHRlcigpOwogICAgIHZpcnR1YWwgdm9pZCBzZXR1cFBhaW50RmlsdGVyKGludCBjbGVhckJpdHMsIGludCBzZXRCaXRzKTsKIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ2FudmFzIGRyYXcgb3BlcmF0aW9ucworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0NvbG9yKGludCBjb2xvciwgU2tYZmVybW9kZTo6TW9kZSBtb2RlKTsKKworICAgIC8vIEJpdG1hcC1iYXNlZAorICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0JpdG1hcChjb25zdCBTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsCisgICAgICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Qml0bWFwKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGNvbnN0IFNrTWF0cml4KiBtYXRyaXgsCisgICAgICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Qml0bWFwKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IHNyY0xlZnQsIGZsb2F0IHNyY1RvcCwKKyAgICAgICAgICAgIGZsb2F0IHNyY1JpZ2h0LCBmbG9hdCBzcmNCb3R0b20sIGZsb2F0IGRzdExlZnQsIGZsb2F0IGRzdFRvcCwKKyAgICAgICAgICAgIGZsb2F0IGRzdFJpZ2h0LCBmbG9hdCBkc3RCb3R0b20sIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdCaXRtYXBEYXRhKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKKyAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdCaXRtYXBNZXNoKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGludCBtZXNoV2lkdGgsIGludCBtZXNoSGVpZ2h0LAorICAgICAgICAgICAgY29uc3QgZmxvYXQqIHZlcnRpY2VzLCBjb25zdCBpbnQqIGNvbG9ycywgY29uc3QgU2tQYWludCogcGFpbnQpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1BhdGNoKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGNvbnN0IFJlc19wbmdfOXBhdGNoKiBwYXRjaCwKKyAgICAgICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgY29uc3QgU2tQYWludCogcGFpbnQpOworCisgICAgLy8gU2hhcGVzCisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UmVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCisgICAgICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UmVjdHMoY29uc3QgZmxvYXQqIHJlY3RzLCBpbnQgY291bnQsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdSb3VuZFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAorICAgICAgICAgICAgZmxvYXQgcngsIGZsb2F0IHJ5LCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Q2lyY2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywgY29uc3QgU2tQYWludCogcGFpbnQpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd092YWwoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAorICAgICAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0FyYyhmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCisgICAgICAgICAgICBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBzd2VlcEFuZ2xlLCBib29sIHVzZUNlbnRlciwgY29uc3QgU2tQYWludCogcGFpbnQpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1BhdGgoY29uc3QgU2tQYXRoKiBwYXRoLCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3TGluZXMoY29uc3QgZmxvYXQqIHBvaW50cywgaW50IGNvdW50LCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UG9pbnRzKGNvbnN0IGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQpOworCisgICAgLy8gVGV4dAorICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1RleHQoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwgZmxvYXQgeCwgZmxvYXQgeSwKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMsIGNvbnN0IFNrUGFpbnQqIHBhaW50LCBmbG9hdCB0b3RhbEFkdmFuY2UsIGNvbnN0IFJlY3QmIGJvdW5kcywKKyAgICAgICAgICAgIERyYXdPcE1vZGUgZHJhd09wTW9kZSA9IGtEcmF3T3BNb2RlX0ltbWVkaWF0ZSk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3VGV4dE9uUGF0aChjb25zdCBjaGFyKiB0ZXh0LCBpbnQgYnl0ZXNDb3VudCwgaW50IGNvdW50LCBjb25zdCBTa1BhdGgqIHBhdGgsCisgICAgICAgICAgICBmbG9hdCBoT2Zmc2V0LCBmbG9hdCB2T2Zmc2V0LCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UG9zVGV4dChjb25zdCBjaGFyKiB0ZXh0LCBpbnQgYnl0ZXNDb3VudCwgaW50IGNvdW50LAorICAgICAgICAgICAgY29uc3QgZmxvYXQqIHBvc2l0aW9ucywgY29uc3QgU2tQYWludCogcGFpbnQpOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDYW52YXMgZHJhdyBvcGVyYXRpb25zIC0gc3BlY2lhbAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0xheWVyKExheWVyKiBsYXllciwgZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3RGlzcGxheUxpc3QoRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0LCBSZWN0JiBkaXJ0eSwKKyAgICAgICAgICAgIGludDMyX3QgcmVwbGF5RmxhZ3MpOworCisgICAgLy8gVE9ETzogcmVuYW1lIGZvciBjb25zaXN0ZW5jeQorICAgIHZpcnR1YWwgc3RhdHVzX3QgY2FsbERyYXdHTEZ1bmN0aW9uKEZ1bmN0b3IqIGZ1bmN0b3IsIFJlY3QmIGRpcnR5KTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGlzcGxheUxpc3QgLyByZXNvdXJjZSBtYW5hZ2VtZW50CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgQU5EUk9JRF9BUEkgdm9pZCByZXNldCgpOwogCiAgICAgc3A8RGlzcGxheUxpc3REYXRhPiBnZXREaXNwbGF5TGlzdERhdGEoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBtRGlzcGxheUxpc3REYXRhOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxTa0JpdG1hcCo+JiBnZXRCaXRtYXBSZXNvdXJjZXMoKSBjb25zdCB7CisgICAgY29uc3QgVmVjdG9yPGNvbnN0IFNrQml0bWFwKj4mIGdldEJpdG1hcFJlc291cmNlcygpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIG1CaXRtYXBSZXNvdXJjZXM7CiAgICAgfQogCi0gICAgY29uc3QgVmVjdG9yPFNrQml0bWFwKj4mIGdldE93bmVkQml0bWFwUmVzb3VyY2VzKCkgY29uc3QgeworICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTa0JpdG1hcCo+JiBnZXRPd25lZEJpdG1hcFJlc291cmNlcygpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIG1Pd25lZEJpdG1hcFJlc291cmNlczsKICAgICB9CiAKQEAgLTE1Niw3ICsxODYsNyBAQAogICAgICAgICByZXR1cm4gbUZpbHRlclJlc291cmNlczsKICAgICB9CiAKLSAgICBjb25zdCBWZWN0b3I8UmVzX3BuZ185cGF0Y2gqPiYgZ2V0UGF0Y2hSZXNvdXJjZXMoKSBjb25zdCB7CisgICAgY29uc3QgVmVjdG9yPGNvbnN0IFJlc19wbmdfOXBhdGNoKj4mIGdldFBhdGNoUmVzb3VyY2VzKCkgY29uc3QgewogICAgICAgICByZXR1cm4gbVBhdGNoUmVzb3VyY2VzOwogICAgIH0KIApAQCAtMTY0LDE5ICsxOTQsMTkgQEAKICAgICAgICAgcmV0dXJuIG1TaGFkZXJzOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxTa1BhaW50Kj4mIGdldFBhaW50cygpIGNvbnN0IHsKKyAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2tQYWludCo+JiBnZXRQYWludHMoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBtUGFpbnRzOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxTa1BhdGgqPiYgZ2V0UGF0aHMoKSBjb25zdCB7CisgICAgY29uc3QgVmVjdG9yPGNvbnN0IFNrUGF0aCo+JiBnZXRQYXRocygpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIG1QYXRoczsKICAgICB9CiAKLSAgICBjb25zdCBTb3J0ZWRWZWN0b3I8U2tQYXRoKj4mIGdldFNvdXJjZVBhdGhzKCkgY29uc3QgeworICAgIGNvbnN0IFNvcnRlZFZlY3Rvcjxjb25zdCBTa1BhdGgqPiYgZ2V0U291cmNlUGF0aHMoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBtU291cmNlUGF0aHM7CiAgICAgfQogCi0gICAgY29uc3QgVmVjdG9yPFNrUmVnaW9uKj4mIGdldFJlZ2lvbnMoKSBjb25zdCB7CisgICAgY29uc3QgVmVjdG9yPGNvbnN0IFNrUmVnaW9uKj4mIGdldFJlZ2lvbnMoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBtUmVnaW9uczsKICAgICB9CiAKQEAgLTE4NCwxMyArMjE0LDE1IEBACiAgICAgICAgIHJldHVybiBtTGF5ZXJzOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxTa01hdHJpeCo+JiBnZXRNYXRyaWNlcygpIGNvbnN0IHsKKyAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2tNYXRyaXgqPiYgZ2V0TWF0cmljZXMoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBtTWF0cmljZXM7CiAgICAgfQogCiAgICAgdWludDMyX3QgZ2V0RnVuY3RvckNvdW50KCkgY29uc3QgewogICAgICAgICByZXR1cm4gbUZ1bmN0b3JDb3VudDsKICAgICB9Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG9uU25hcHNob3RSZXN0b3JlZChjb25zdCBTbmFwc2hvdCYgcmVtb3ZlZCwgY29uc3QgU25hcHNob3QmIHJlc3RvcmVkKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGluc2VydFJlc3RvcmVUb0NvdW50KCk7CkBAIC0yMDYsOCArMjM4LDkgQEAKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIGlubGluZSBUKiByZWZCdWZmZXIoY29uc3QgVCogc3JjQnVmZmVyLCBpbnQzMl90IGNvdW50KSB7Ci0gICAgICAgIGlmIChzcmNCdWZmZXIgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisgICAgaW5saW5lIGNvbnN0IFQqIHJlZkJ1ZmZlcihjb25zdCBUKiBzcmNCdWZmZXIsIGludDMyX3QgY291bnQpIHsKKyAgICAgICAgaWYgKCFzcmNCdWZmZXIpIHJldHVybiBOVUxMOworCiAgICAgICAgIFQqIGRzdEJ1ZmZlciA9IChUKikgbURpc3BsYXlMaXN0RGF0YS0+YWxsb2NhdG9yLmFsbG9jKGNvdW50ICogc2l6ZW9mKFQpKTsKICAgICAgICAgbWVtY3B5KGRzdEJ1ZmZlciwgc3JjQnVmZmVyLCBjb3VudCAqIHNpemVvZihUKSk7CiAgICAgICAgIHJldHVybiBkc3RCdWZmZXI7CkBAIC0yMTcsMTMgKzI1MCwxNSBAQAogICAgICAgICByZXR1cm4gKGNoYXIqKSByZWZCdWZmZXI8dWludDhfdD4oKHVpbnQ4X3QqKXRleHQsIGJ5dGVMZW5ndGgpOwogICAgIH0KIAotICAgIGlubGluZSBTa1BhdGgqIHJlZlBhdGgoU2tQYXRoKiBwYXRoKSB7CisgICAgaW5saW5lIGNvbnN0IFNrUGF0aCogcmVmUGF0aChjb25zdCBTa1BhdGgqIHBhdGgpIHsKICAgICAgICAgaWYgKCFwYXRoKSByZXR1cm4gTlVMTDsKIAotICAgICAgICBTa1BhdGgqIHBhdGhDb3B5ID0gbVBhdGhNYXAudmFsdWVGb3IocGF0aCk7CisgICAgICAgIGNvbnN0IFNrUGF0aCogcGF0aENvcHkgPSBtUGF0aE1hcC52YWx1ZUZvcihwYXRoKTsKICAgICAgICAgaWYgKHBhdGhDb3B5ID09IE5VTEwgfHwgcGF0aENvcHktPmdldEdlbmVyYXRpb25JRCgpICE9IHBhdGgtPmdldEdlbmVyYXRpb25JRCgpKSB7Ci0gICAgICAgICAgICBwYXRoQ29weSA9IG5ldyBTa1BhdGgoKnBhdGgpOwotICAgICAgICAgICAgcGF0aENvcHktPnNldFNvdXJjZVBhdGgocGF0aCk7CisgICAgICAgICAgICBTa1BhdGgqIG5ld1BhdGhDb3B5ID0gbmV3IFNrUGF0aCgqcGF0aCk7CisgICAgICAgICAgICBuZXdQYXRoQ29weS0+c2V0U291cmNlUGF0aChwYXRoKTsKKworICAgICAgICAgICAgcGF0aENvcHkgPSBuZXdQYXRoQ29weTsKICAgICAgICAgICAgIC8vIHJlcGxhY2VWYWx1ZUZvcigpIHBlcmZvcm1zIGFuIGFkZCBpZiB0aGUgZW50cnkgZG9lc24ndCBleGlzdAogICAgICAgICAgICAgbVBhdGhNYXAucmVwbGFjZVZhbHVlRm9yKHBhdGgsIHBhdGhDb3B5KTsKICAgICAgICAgICAgIG1QYXRocy5hZGQocGF0aENvcHkpOwpAQCAtMjM1LDEyICsyNzAsMTIgQEAKICAgICAgICAgcmV0dXJuIHBhdGhDb3B5OwogICAgIH0KIAotICAgIGlubGluZSBTa1BhaW50KiByZWZQYWludChTa1BhaW50KiBwYWludCkgeworICAgIGlubGluZSBjb25zdCBTa1BhaW50KiByZWZQYWludChjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgICAgICBpZiAoIXBhaW50KSB7CiAgICAgICAgICAgICByZXR1cm4gcGFpbnQ7CiAgICAgICAgIH0KIAotICAgICAgICBTa1BhaW50KiBwYWludENvcHkgPSBtUGFpbnRNYXAudmFsdWVGb3IocGFpbnQpOworICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludENvcHkgPSBtUGFpbnRNYXAudmFsdWVGb3IocGFpbnQpOwogICAgICAgICBpZiAocGFpbnRDb3B5ID09IE5VTEwgfHwgcGFpbnRDb3B5LT5nZXRHZW5lcmF0aW9uSUQoKSAhPSBwYWludC0+Z2V0R2VuZXJhdGlvbklEKCkpIHsKICAgICAgICAgICAgIHBhaW50Q29weSA9IG5ldyBTa1BhaW50KCpwYWludCk7CiAgICAgICAgICAgICAvLyByZXBsYWNlVmFsdWVGb3IoKSBwZXJmb3JtcyBhbiBhZGQgaWYgdGhlIGVudHJ5IGRvZXNuJ3QgZXhpc3QKQEAgLTI1MSwxMiArMjg2LDEyIEBACiAgICAgICAgIHJldHVybiBwYWludENvcHk7CiAgICAgfQogCi0gICAgaW5saW5lIFNrUmVnaW9uKiByZWZSZWdpb24oU2tSZWdpb24qIHJlZ2lvbikgeworICAgIGlubGluZSBjb25zdCBTa1JlZ2lvbiogcmVmUmVnaW9uKGNvbnN0IFNrUmVnaW9uKiByZWdpb24pIHsKICAgICAgICAgaWYgKCFyZWdpb24pIHsKICAgICAgICAgICAgIHJldHVybiByZWdpb247CiAgICAgICAgIH0KIAotICAgICAgICBTa1JlZ2lvbiogcmVnaW9uQ29weSA9IG1SZWdpb25NYXAudmFsdWVGb3IocmVnaW9uKTsKKyAgICAgICAgY29uc3QgU2tSZWdpb24qIHJlZ2lvbkNvcHkgPSBtUmVnaW9uTWFwLnZhbHVlRm9yKHJlZ2lvbik7CiAgICAgICAgIC8vIFRPRE86IEFkZCBnZW5lcmF0aW9uIElEIHRvIFNrUmVnaW9uCiAgICAgICAgIGlmIChyZWdpb25Db3B5ID09IE5VTEwpIHsKICAgICAgICAgICAgIHJlZ2lvbkNvcHkgPSBuZXcgU2tSZWdpb24oKnJlZ2lvbik7CkBAIC0yNjgsMTEgKzMwMywxMSBAQAogICAgICAgICByZXR1cm4gcmVnaW9uQ29weTsKICAgICB9CiAKLSAgICBpbmxpbmUgU2tNYXRyaXgqIHJlZk1hdHJpeChTa01hdHJpeCogbWF0cml4KSB7CisgICAgaW5saW5lIGNvbnN0IFNrTWF0cml4KiByZWZNYXRyaXgoY29uc3QgU2tNYXRyaXgqIG1hdHJpeCkgewogICAgICAgICBpZiAobWF0cml4KSB7CiAgICAgICAgICAgICAvLyBDb3B5aW5nIHRoZSBtYXRyaXggaXMgY2hlYXAgYW5kIHByZXZlbnRzIGFnYWluc3QgdGhlIHVzZXIgY2hhbmdpbmcKICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBtYXRyaXggYmVmb3JlIHRoZSBvcGVyYXRpb24gdGhhdCB1c2VzIGl0Ci0gICAgICAgICAgICBTa01hdHJpeCogY29weSA9IG5ldyBTa01hdHJpeCgqbWF0cml4KTsKKyAgICAgICAgICAgIGNvbnN0IFNrTWF0cml4KiBjb3B5ID0gbmV3IFNrTWF0cml4KCptYXRyaXgpOwogICAgICAgICAgICAgbU1hdHJpY2VzLmFkZChjb3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb3B5OwogICAgICAgICB9CkBAIC0yODUsNyArMzIwLDcgQEAKICAgICAgICAgcmV0dXJuIGxheWVyOwogICAgIH0KIAotICAgIGlubGluZSBTa0JpdG1hcCogcmVmQml0bWFwKFNrQml0bWFwKiBiaXRtYXApIHsKKyAgICBpbmxpbmUgY29uc3QgU2tCaXRtYXAqIHJlZkJpdG1hcChjb25zdCBTa0JpdG1hcCogYml0bWFwKSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhlIGJpdG1hcCBpcyBpbW11dGFibGUuIFRoZXJlIGFyZSBjYXNlcyB0aGlzIHdvbid0IGhhbmRsZQogICAgICAgICAvLyBjb3JyZWN0bHksIHN1Y2ggYXMgY3JlYXRpbmcgdGhlIGJpdG1hcCBmcm9tIHNjcmF0Y2gsIGRyYXdpbmcgd2l0aCBpdCwgY2hhbmdpbmcgaXRzCiAgICAgICAgIC8vIGNvbnRlbnRzLCBhbmQgZHJhd2luZyBhZ2Fpbi4gVGhlIG9ubHkgZml4IHdvdWxkIGJlIHRvIGFsd2F5cyBjb3B5IGl0IHRoZSBmaXJzdCB0aW1lLApAQCAtMjk1LDcgKzMzMCw3IEBACiAgICAgICAgIHJldHVybiBiaXRtYXA7CiAgICAgfQogCi0gICAgaW5saW5lIFNrQml0bWFwKiByZWZCaXRtYXBEYXRhKFNrQml0bWFwKiBiaXRtYXApIHsKKyAgICBpbmxpbmUgY29uc3QgU2tCaXRtYXAqIHJlZkJpdG1hcERhdGEoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCkgewogICAgICAgICBtT3duZWRCaXRtYXBSZXNvdXJjZXMuYWRkKGJpdG1hcCk7CiAgICAgICAgIG1DYWNoZXMucmVzb3VyY2VDYWNoZS5pbmNyZW1lbnRSZWZjb3VudChiaXRtYXApOwogICAgICAgICByZXR1cm4gYml0bWFwOwpAQCAtMzIyLDMyICszNTcsMzMgQEAKICAgICAgICAgcmV0dXJuIGNvbG9yRmlsdGVyOwogICAgIH0KIAotICAgIGlubGluZSBSZXNfcG5nXzlwYXRjaCogcmVmUGF0Y2goUmVzX3BuZ185cGF0Y2gqIHBhdGNoKSB7CisgICAgaW5saW5lIGNvbnN0IFJlc19wbmdfOXBhdGNoKiByZWZQYXRjaChjb25zdCBSZXNfcG5nXzlwYXRjaCogcGF0Y2gpIHsKICAgICAgICAgbVBhdGNoUmVzb3VyY2VzLmFkZChwYXRjaCk7CiAgICAgICAgIG1DYWNoZXMucmVzb3VyY2VDYWNoZS5pbmNyZW1lbnRSZWZjb3VudChwYXRjaCk7CiAgICAgICAgIHJldHVybiBwYXRjaDsKICAgICB9CiAKLSAgICBWZWN0b3I8U2tCaXRtYXAqPiBtQml0bWFwUmVzb3VyY2VzOwotICAgIFZlY3RvcjxTa0JpdG1hcCo+IG1Pd25lZEJpdG1hcFJlc291cmNlczsKKyAgICAvLyBUT0RPOiBtb3ZlIHRoZXNlIHRvIERpc3BsYXlMaXN0RGF0YQorICAgIFZlY3Rvcjxjb25zdCBTa0JpdG1hcCo+IG1CaXRtYXBSZXNvdXJjZXM7CisgICAgVmVjdG9yPGNvbnN0IFNrQml0bWFwKj4gbU93bmVkQml0bWFwUmVzb3VyY2VzOwogICAgIFZlY3RvcjxTa2lhQ29sb3JGaWx0ZXIqPiBtRmlsdGVyUmVzb3VyY2VzOwotICAgIFZlY3RvcjxSZXNfcG5nXzlwYXRjaCo+IG1QYXRjaFJlc291cmNlczsKKyAgICBWZWN0b3I8Y29uc3QgUmVzX3BuZ185cGF0Y2gqPiBtUGF0Y2hSZXNvdXJjZXM7CiAKLSAgICBWZWN0b3I8U2tQYWludCo+IG1QYWludHM7Ci0gICAgRGVmYXVsdEtleWVkVmVjdG9yPFNrUGFpbnQqLCBTa1BhaW50Kj4gbVBhaW50TWFwOworICAgIFZlY3Rvcjxjb25zdCBTa1BhaW50Kj4gbVBhaW50czsKKyAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8Y29uc3QgU2tQYWludCosIGNvbnN0IFNrUGFpbnQqPiBtUGFpbnRNYXA7CiAKLSAgICBWZWN0b3I8U2tQYXRoKj4gbVBhdGhzOwotICAgIERlZmF1bHRLZXllZFZlY3RvcjxTa1BhdGgqLCBTa1BhdGgqPiBtUGF0aE1hcDsKKyAgICBWZWN0b3I8Y29uc3QgU2tQYXRoKj4gbVBhdGhzOworICAgIERlZmF1bHRLZXllZFZlY3Rvcjxjb25zdCBTa1BhdGgqLCBjb25zdCBTa1BhdGgqPiBtUGF0aE1hcDsKIAotICAgIFNvcnRlZFZlY3RvcjxTa1BhdGgqPiBtU291cmNlUGF0aHM7CisgICAgU29ydGVkVmVjdG9yPGNvbnN0IFNrUGF0aCo+IG1Tb3VyY2VQYXRoczsKIAotICAgIFZlY3RvcjxTa1JlZ2lvbio+IG1SZWdpb25zOwotICAgIERlZmF1bHRLZXllZFZlY3RvcjxTa1JlZ2lvbiosIFNrUmVnaW9uKj4gbVJlZ2lvbk1hcDsKKyAgICBWZWN0b3I8Y29uc3QgU2tSZWdpb24qPiBtUmVnaW9uczsKKyAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8Y29uc3QgU2tSZWdpb24qLCBjb25zdCBTa1JlZ2lvbio+IG1SZWdpb25NYXA7CiAKICAgICBWZWN0b3I8U2tpYVNoYWRlcio+IG1TaGFkZXJzOwogICAgIERlZmF1bHRLZXllZFZlY3RvcjxTa2lhU2hhZGVyKiwgU2tpYVNoYWRlcio+IG1TaGFkZXJNYXA7CiAKLSAgICBWZWN0b3I8U2tNYXRyaXgqPiBtTWF0cmljZXM7CisgICAgVmVjdG9yPGNvbnN0IFNrTWF0cml4Kj4gbU1hdHJpY2VzOwogCiAgICAgVmVjdG9yPExheWVyKj4gbUxheWVyczsKIApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0ZvbnRSZW5kZXJlci5jcHAgYi9saWJzL2h3dWkvRm9udFJlbmRlcmVyLmNwcAppbmRleCAwYmUxN2ZmLi5mOTA3ZDY0IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvRm9udFJlbmRlcmVyLmNwcAorKysgYi9saWJzL2h3dWkvRm9udFJlbmRlcmVyLmNwcApAQCAtNzYsNyArNzYsOCBAQAogICAgIHJlbmRlcmVyLT5zZXR1cERyYXdTaGFkZXIoKTsKICAgICByZW5kZXJlci0+c2V0dXBEcmF3QmxlbmRpbmcodHJ1ZSwgbW9kZSk7CiAgICAgcmVuZGVyZXItPnNldHVwRHJhd1Byb2dyYW0oKTsKLSAgICByZW5kZXJlci0+c2V0dXBEcmF3TW9kZWxWaWV3KHgsIHksIHgsIHksIHB1cmVUcmFuc2xhdGUsIHRydWUpOworICAgIHJlbmRlcmVyLT5zZXR1cERyYXdNb2RlbFZpZXcoa01vZGVsVmlld01vZGVfVHJhbnNsYXRlLCBmYWxzZSwKKyAgICAgICAgICAgIDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYsIHB1cmVUcmFuc2xhdGUpOwogICAgIC8vIENhbGxpbmcgc2V0dXBEcmF3VGV4dHVyZSB3aXRoIHRoZSBuYW1lIDAgd2lsbCBlbmFibGUgdGhlCiAgICAgLy8gdXYgYXR0cmlidXRlcyBhbmQgaW5jcmVhc2UgdGhlIHRleHR1cmUgdW5pdCBjb3VudAogICAgIC8vIHRleHR1cmUgYmluZGluZyB3aWxsIGJlIHBlcmZvcm1lZCBieSB0aGUgZm9udCByZW5kZXJlciBhcwpAQCAtNTE0LDggKzUxNSw4IEBACiAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMaW5lYXJGaWx0ZXJpbmcobUxpbmVhckZpbHRlcmluZywgZmFsc2UpOwogCiAgICAgICAgICAgICBUZXh0dXJlVmVydGV4KiBtZXNoID0gdGV4dHVyZS0+bWVzaCgpOwotICAgICAgICAgICAgY2FjaGVzLmJpbmRQb3NpdGlvblZlcnRleFBvaW50ZXIoZm9yY2UsICZtZXNoWzBdLnBvc2l0aW9uWzBdKTsKLSAgICAgICAgICAgIGNhY2hlcy5iaW5kVGV4Q29vcmRzVmVydGV4UG9pbnRlcihmb3JjZSwgJm1lc2hbMF0udGV4dHVyZVswXSk7CisgICAgICAgICAgICBjYWNoZXMuYmluZFBvc2l0aW9uVmVydGV4UG9pbnRlcihmb3JjZSwgJm1lc2hbMF0ueCk7CisgICAgICAgICAgICBjYWNoZXMuYmluZFRleENvb3Jkc1ZlcnRleFBvaW50ZXIoZm9yY2UsICZtZXNoWzBdLnUpOwogICAgICAgICAgICAgZm9yY2UgPSBmYWxzZTsKIAogICAgICAgICAgICAgZ2xEcmF3RWxlbWVudHMoR0xfVFJJQU5HTEVTLCB0ZXh0dXJlLT5tZXNoRWxlbWVudENvdW50KCksCkBAIC01ODYsMTEgKzU4NywxMSBAQAogICAgIH0KIH0KIAotdm9pZCBGb250UmVuZGVyZXI6OnNldEZvbnQoU2tQYWludCogcGFpbnQsIGNvbnN0IG1hdDQmIG1hdHJpeCkgewordm9pZCBGb250UmVuZGVyZXI6OnNldEZvbnQoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IG1hdDQmIG1hdHJpeCkgewogICAgIG1DdXJyZW50Rm9udCA9IEZvbnQ6OmNyZWF0ZSh0aGlzLCBwYWludCwgbWF0cml4KTsKIH0KIAotRm9udFJlbmRlcmVyOjpEcm9wU2hhZG93IEZvbnRSZW5kZXJlcjo6cmVuZGVyRHJvcFNoYWRvdyhTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciAqdGV4dCwKK0ZvbnRSZW5kZXJlcjo6RHJvcFNoYWRvdyBGb250UmVuZGVyZXI6OnJlbmRlckRyb3BTaGFkb3coY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIgKnRleHQsCiAgICAgICAgIHVpbnQzMl90IHN0YXJ0SW5kZXgsIHVpbnQzMl90IGxlbiwgaW50IG51bUdseXBocywgdWludDMyX3QgcmFkaXVzLCBjb25zdCBmbG9hdCogcG9zaXRpb25zKSB7CiAgICAgY2hlY2tJbml0KCk7CiAKQEAgLTY3NSw3ICs2NzYsOCBAQAogICAgIGlzc3VlRHJhd0NvbW1hbmQoKTsKIH0KIAotdm9pZCBGb250UmVuZGVyZXI6OnByZWNhY2hlKFNrUGFpbnQqIHBhaW50LCBjb25zdCBjaGFyKiB0ZXh0LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBtYXQ0JiBtYXRyaXgpIHsKK3ZvaWQgRm9udFJlbmRlcmVyOjpwcmVjYWNoZShjb25zdCBTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciogdGV4dCwgaW50IG51bUdseXBocywKKyAgICAgICAgY29uc3QgbWF0NCYgbWF0cml4KSB7CiAgICAgRm9udCogZm9udCA9IEZvbnQ6OmNyZWF0ZSh0aGlzLCBwYWludCwgbWF0cml4KTsKICAgICBmb250LT5wcmVjYWNoZShwYWludCwgdGV4dCwgbnVtR2x5cGhzKTsKIH0KQEAgLTY4NCw3ICs2ODYsNyBAQAogICAgIGNoZWNrVGV4dHVyZVVwZGF0ZSgpOwogfQogCi1ib29sIEZvbnRSZW5kZXJlcjo6cmVuZGVyUG9zVGV4dChTa1BhaW50KiBwYWludCwgY29uc3QgUmVjdCogY2xpcCwgY29uc3QgY2hhciAqdGV4dCwKK2Jvb2wgRm9udFJlbmRlcmVyOjpyZW5kZXJQb3NUZXh0KGNvbnN0IFNrUGFpbnQqIHBhaW50LCBjb25zdCBSZWN0KiBjbGlwLCBjb25zdCBjaGFyICp0ZXh0LAogICAgICAgICB1aW50MzJfdCBzdGFydEluZGV4LCB1aW50MzJfdCBsZW4sIGludCBudW1HbHlwaHMsIGludCB4LCBpbnQgeSwKICAgICAgICAgY29uc3QgZmxvYXQqIHBvc2l0aW9ucywgUmVjdCogYm91bmRzLCBGdW5jdG9yKiBmdW5jdG9yLCBib29sIGZvcmNlRmluaXNoKSB7CiAgICAgaWYgKCFtQ3VycmVudEZvbnQpIHsKQEAgLTcwMiw4ICs3MDQsOCBAQAogICAgIHJldHVybiBtRHJhd247CiB9CiAKLWJvb2wgRm9udFJlbmRlcmVyOjpyZW5kZXJUZXh0T25QYXRoKFNrUGFpbnQqIHBhaW50LCBjb25zdCBSZWN0KiBjbGlwLCBjb25zdCBjaGFyICp0ZXh0LAotICAgICAgICB1aW50MzJfdCBzdGFydEluZGV4LCB1aW50MzJfdCBsZW4sIGludCBudW1HbHlwaHMsIFNrUGF0aCogcGF0aCwKK2Jvb2wgRm9udFJlbmRlcmVyOjpyZW5kZXJUZXh0T25QYXRoKGNvbnN0IFNrUGFpbnQqIHBhaW50LCBjb25zdCBSZWN0KiBjbGlwLCBjb25zdCBjaGFyICp0ZXh0LAorICAgICAgICB1aW50MzJfdCBzdGFydEluZGV4LCB1aW50MzJfdCBsZW4sIGludCBudW1HbHlwaHMsIGNvbnN0IFNrUGF0aCogcGF0aCwKICAgICAgICAgZmxvYXQgaE9mZnNldCwgZmxvYXQgdk9mZnNldCwgUmVjdCogYm91bmRzLCBGdW5jdG9yKiBmdW5jdG9yKSB7CiAgICAgaWYgKCFtQ3VycmVudEZvbnQpIHsKICAgICAgICAgQUxPR0UoIk5vIGZvbnQgc2V0Iik7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvRm9udFJlbmRlcmVyLmggYi9saWJzL2h3dWkvRm9udFJlbmRlcmVyLmgKaW5kZXggYWE3ZTc3Ni4uOTI1OTAyOCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0ZvbnRSZW5kZXJlci5oCisrKyBiL2xpYnMvaHd1aS9Gb250UmVuZGVyZXIuaApAQCAtNDQsOCArNDQsNiBAQAogfQogI2VuZGlmCiAKLWNsYXNzIEZ1bmN0b3I7Ci0KIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKIApAQCAtNjQsNyArNjIsNyBAQAogICAgIH07CiAKICAgICBUZXh0U2V0dXBGdW5jdG9yKE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwgZmxvYXQgeCwgZmxvYXQgeSwgYm9vbCBwdXJlVHJhbnNsYXRlLAotICAgICAgICAgICAgaW50IGFscGhhLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUsIFNrUGFpbnQqIHBhaW50KTogRnVuY3RvcigpLAorICAgICAgICAgICAgaW50IGFscGhhLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTogRnVuY3RvcigpLAogICAgICAgICAgICAgcmVuZGVyZXIocmVuZGVyZXIpLCB4KHgpLCB5KHkpLCBwdXJlVHJhbnNsYXRlKHB1cmVUcmFuc2xhdGUpLAogICAgICAgICAgICAgYWxwaGEoYWxwaGEpLCBtb2RlKG1vZGUpLCBwYWludChwYWludCkgewogICAgIH0KQEAgLTc4LDcgKzc2LDcgQEAKICAgICBib29sIHB1cmVUcmFuc2xhdGU7CiAgICAgaW50IGFscGhhOwogICAgIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZTsKLSAgICBTa1BhaW50KiBwYWludDsKKyAgICBjb25zdCBTa1BhaW50KiBwYWludDsKIH07CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTk3LDIwICs5NSwyMCBAQAogICAgICAgICBtR2FtbWFUYWJsZSA9IGdhbW1hVGFibGU7CiAgICAgfQogCi0gICAgdm9pZCBzZXRGb250KFNrUGFpbnQqIHBhaW50LCBjb25zdCBtYXQ0JiBtYXRyaXgpOworICAgIHZvaWQgc2V0Rm9udChjb25zdCBTa1BhaW50KiBwYWludCwgY29uc3QgbWF0NCYgbWF0cml4KTsKIAotICAgIHZvaWQgcHJlY2FjaGUoU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIGludCBudW1HbHlwaHMsIGNvbnN0IG1hdDQmIG1hdHJpeCk7CisgICAgdm9pZCBwcmVjYWNoZShjb25zdCBTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciogdGV4dCwgaW50IG51bUdseXBocywgY29uc3QgbWF0NCYgbWF0cml4KTsKICAgICB2b2lkIGVuZFByZWNhY2hpbmcoKTsKIAogICAgIC8vIGJvdW5kcyBpcyBhbiBvdXQgcGFyYW1ldGVyCi0gICAgYm9vbCByZW5kZXJQb3NUZXh0KFNrUGFpbnQqIHBhaW50LCBjb25zdCBSZWN0KiBjbGlwLCBjb25zdCBjaGFyICp0ZXh0LCB1aW50MzJfdCBzdGFydEluZGV4LAotICAgICAgICAgICAgdWludDMyX3QgbGVuLCBpbnQgbnVtR2x5cGhzLCBpbnQgeCwgaW50IHksIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMsIFJlY3QqIGJvdW5kcywKLSAgICAgICAgICAgIEZ1bmN0b3IqIGZ1bmN0b3IsIGJvb2wgZm9yY2VGaW5pc2ggPSB0cnVlKTsKKyAgICBib29sIHJlbmRlclBvc1RleHQoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IFJlY3QqIGNsaXAsIGNvbnN0IGNoYXIgKnRleHQsCisgICAgICAgICAgICB1aW50MzJfdCBzdGFydEluZGV4LCB1aW50MzJfdCBsZW4sIGludCBudW1HbHlwaHMsIGludCB4LCBpbnQgeSwgY29uc3QgZmxvYXQqIHBvc2l0aW9ucywKKyAgICAgICAgICAgIFJlY3QqIGJvdW5kcywgRnVuY3RvciogZnVuY3RvciwgYm9vbCBmb3JjZUZpbmlzaCA9IHRydWUpOwogCiAgICAgLy8gYm91bmRzIGlzIGFuIG91dCBwYXJhbWV0ZXIKLSAgICBib29sIHJlbmRlclRleHRPblBhdGgoU2tQYWludCogcGFpbnQsIGNvbnN0IFJlY3QqIGNsaXAsIGNvbnN0IGNoYXIgKnRleHQsIHVpbnQzMl90IHN0YXJ0SW5kZXgsCi0gICAgICAgICAgICB1aW50MzJfdCBsZW4sIGludCBudW1HbHlwaHMsIFNrUGF0aCogcGF0aCwgZmxvYXQgaE9mZnNldCwgZmxvYXQgdk9mZnNldCwgUmVjdCogYm91bmRzLAotICAgICAgICAgICAgRnVuY3RvciogZnVuY3Rvcik7CisgICAgYm9vbCByZW5kZXJUZXh0T25QYXRoKGNvbnN0IFNrUGFpbnQqIHBhaW50LCBjb25zdCBSZWN0KiBjbGlwLCBjb25zdCBjaGFyICp0ZXh0LAorICAgICAgICAgICAgdWludDMyX3Qgc3RhcnRJbmRleCwgdWludDMyX3QgbGVuLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBTa1BhdGgqIHBhdGgsCisgICAgICAgICAgICBmbG9hdCBoT2Zmc2V0LCBmbG9hdCB2T2Zmc2V0LCBSZWN0KiBib3VuZHMsIEZ1bmN0b3IqIGZ1bmN0b3IpOwogCiAgICAgc3RydWN0IERyb3BTaGFkb3cgewogICAgICAgICBEcm9wU2hhZG93KCkgeyB9OwpAQCAtMTMwLDcgKzEyOCw3IEBACiAKICAgICAvLyBBZnRlciByZW5kZXJEcm9wU2hhZG93IHJldHVybnMsIHRoZSBjYWxsZWQgb3ducyB0aGUgbWVtb3J5IGluIERyb3BTaGFkb3cuaW1hZ2UKICAgICAvLyBhbmQgaXMgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyBpdCB3aGVuIGl0J3MgZG9uZSB3aXRoIGl0Ci0gICAgRHJvcFNoYWRvdyByZW5kZXJEcm9wU2hhZG93KFNrUGFpbnQqIHBhaW50LCBjb25zdCBjaGFyICp0ZXh0LCB1aW50MzJfdCBzdGFydEluZGV4LAorICAgIERyb3BTaGFkb3cgcmVuZGVyRHJvcFNoYWRvdyhjb25zdCBTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciAqdGV4dCwgdWludDMyX3Qgc3RhcnRJbmRleCwKICAgICAgICAgICAgIHVpbnQzMl90IGxlbiwgaW50IG51bUdseXBocywgdWludDMyX3QgcmFkaXVzLCBjb25zdCBmbG9hdCogcG9zaXRpb25zKTsKIAogICAgIHZvaWQgc2V0VGV4dHVyZUZpbHRlcmluZyhib29sIGxpbmVhckZpbHRlcmluZykgewpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0dyYWRpZW50Q2FjaGUuY3BwIGIvbGlicy9od3VpL0dyYWRpZW50Q2FjaGUuY3BwCmluZGV4IDA5MTY5NDIuLmZmZDFlOGMgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9HcmFkaWVudENhY2hlLmNwcAorKysgYi9saWJzL2h3dWkvR3JhZGllbnRDYWNoZS5jcHAKQEAgLTExNSw3ICsxMTUsNyBAQAogLy8gQ2FsbGJhY2tzCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLXZvaWQgR3JhZGllbnRDYWNoZTo6b3BlcmF0b3IoKShHcmFkaWVudENhY2hlRW50cnkmIHNoYWRlciwgVGV4dHVyZSomIHRleHR1cmUpIHsKK3ZvaWQgR3JhZGllbnRDYWNoZTo6b3BlcmF0b3IoKShHcmFkaWVudENhY2hlRW50cnkmLCBUZXh0dXJlKiYgdGV4dHVyZSkgewogICAgIGlmICh0ZXh0dXJlKSB7CiAgICAgICAgIGNvbnN0IHVpbnQzMl90IHNpemUgPSB0ZXh0dXJlLT53aWR0aCAqIHRleHR1cmUtPmhlaWdodCAqIGJ5dGVzUGVyUGl4ZWwoKTsKICAgICAgICAgbVNpemUgLT0gc2l6ZTsKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgICBtQ2FjaGUucmVtb3ZlT2xkZXN0KCk7CiAgICAgfQogCi0gICAgZ2VuZXJhdGVUZXh0dXJlKGNvbG9ycywgcG9zaXRpb25zLCBjb3VudCwgdGV4dHVyZSk7CisgICAgZ2VuZXJhdGVUZXh0dXJlKGNvbG9ycywgcG9zaXRpb25zLCB0ZXh0dXJlKTsKIAogICAgIG1TaXplICs9IHNpemU7CiAgICAgbUNhY2hlLnB1dChncmFkaWVudCwgdGV4dHVyZSk7CkBAIC0yMzgsOCArMjM4LDcgQEAKICAgICBkc3QgKz0gNCAqIHNpemVvZihmbG9hdCk7CiB9CiAKLXZvaWQgR3JhZGllbnRDYWNoZTo6Z2VuZXJhdGVUZXh0dXJlKHVpbnQzMl90KiBjb2xvcnMsIGZsb2F0KiBwb3NpdGlvbnMsCi0gICAgICAgIGludCBjb3VudCwgVGV4dHVyZSogdGV4dHVyZSkgewordm9pZCBHcmFkaWVudENhY2hlOjpnZW5lcmF0ZVRleHR1cmUodWludDMyX3QqIGNvbG9ycywgZmxvYXQqIHBvc2l0aW9ucywgVGV4dHVyZSogdGV4dHVyZSkgewogICAgIGNvbnN0IHVpbnQzMl90IHdpZHRoID0gdGV4dHVyZS0+d2lkdGg7CiAgICAgY29uc3QgR0xzaXplaSByb3dCeXRlcyA9IHdpZHRoICogYnl0ZXNQZXJQaXhlbCgpOwogICAgIHVpbnQ4X3QgcGl4ZWxzW3Jvd0J5dGVzICogdGV4dHVyZS0+aGVpZ2h0XTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9HcmFkaWVudENhY2hlLmggYi9saWJzL2h3dWkvR3JhZGllbnRDYWNoZS5oCmluZGV4IDQzOTM0ZDkuLjZhNzgzYjEgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9HcmFkaWVudENhY2hlLmgKKysrIGIvbGlicy9od3VpL0dyYWRpZW50Q2FjaGUuaApAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgVGV4dHVyZSogYWRkTGluZWFyR3JhZGllbnQoR3JhZGllbnRDYWNoZUVudHJ5JiBncmFkaWVudCwKICAgICAgICAgICAgIHVpbnQzMl90KiBjb2xvcnMsIGZsb2F0KiBwb3NpdGlvbnMsIGludCBjb3VudCk7CiAKLSAgICB2b2lkIGdlbmVyYXRlVGV4dHVyZSh1aW50MzJfdCogY29sb3JzLCBmbG9hdCogcG9zaXRpb25zLCBpbnQgY291bnQsIFRleHR1cmUqIHRleHR1cmUpOworICAgIHZvaWQgZ2VuZXJhdGVUZXh0dXJlKHVpbnQzMl90KiBjb2xvcnMsIGZsb2F0KiBwb3NpdGlvbnMsIFRleHR1cmUqIHRleHR1cmUpOwogCiAgICAgc3RydWN0IEdyYWRpZW50SW5mbyB7CiAgICAgICAgIHVpbnQzMl90IHdpZHRoOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0xheWVyLmNwcCBiL2xpYnMvaHd1aS9MYXllci5jcHAKaW5kZXggYmQzNzFhMy4uNzQyZmZkNDcgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9MYXllci5jcHAKKysrIGIvbGlicy9od3VpL0xheWVyLmNwcApAQCAtMTk0LDExICsxOTQsOSBAQAogICAgICAgICBkaXJ0eVJlY3Quc2V0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgIH0KIAotICAgIGlmIChkZWZlcnJlZExpc3QpIHsKLSAgICAgICAgZGVmZXJyZWRMaXN0LT5yZXNldChkaXJ0eVJlY3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlZmVycmVkTGlzdCA9IG5ldyBEZWZlcnJlZERpc3BsYXlMaXN0KGRpcnR5UmVjdCk7Ci0gICAgfQorICAgIGRlbGV0ZSBkZWZlcnJlZExpc3Q7CisgICAgZGVmZXJyZWRMaXN0ID0gbmV3IERlZmVycmVkRGlzcGxheUxpc3QoZGlydHlSZWN0KTsKKwogICAgIERlZmVyU3RhdGVTdHJ1Y3QgZGVmZXJyZWRTdGF0ZSgqZGVmZXJyZWRMaXN0LCAqcmVuZGVyZXIsCiAgICAgICAgICAgICBEaXNwbGF5TGlzdDo6a1JlcGxheUZsYWdfQ2xpcENoaWxkcmVuKTsKIApAQCAtMjA2LDYgKzIwNCw3IEBACiAgICAgcmVuZGVyZXItPnNldHVwRnJhbWVTdGF0ZShkaXJ0eVJlY3QubGVmdCwgZGlydHlSZWN0LnRvcCwKICAgICAgICAgICAgIGRpcnR5UmVjdC5yaWdodCwgZGlydHlSZWN0LmJvdHRvbSwgIWlzQmxlbmQoKSk7CiAKKyAgICBkaXNwbGF5TGlzdC0+Y29tcHV0ZU9yZGVyaW5nKCk7CiAgICAgZGlzcGxheUxpc3QtPmRlZmVyKGRlZmVycmVkU3RhdGUsIDApOwogCiAgICAgZGVmZXJyZWRVcGRhdGVTY2hlZHVsZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9MYXllci5oIGIvbGlicy9od3VpL0xheWVyLmgKaW5kZXggYjcwMDQyZi4uNDcxYTRhNiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0xheWVyLmgKKysrIGIvbGlicy9od3VpL0xheWVyLmgKQEAgLTQ5LDcgKzQ5LDggQEAKIC8qKgogICogQSBsYXllciBoYXMgZGltZW5zaW9ucyBhbmQgaXMgYmFja2VkIGJ5IGFuIE9wZW5HTCB0ZXh0dXJlIG9yIEZCTy4KICAqLwotc3RydWN0IExheWVyIHsKK2NsYXNzIExheWVyIHsKK3B1YmxpYzoKICAgICBMYXllcihjb25zdCB1aW50MzJfdCBsYXllcldpZHRoLCBjb25zdCB1aW50MzJfdCBsYXllckhlaWdodCk7CiAgICAgfkxheWVyKCk7CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9MYXllclJlbmRlcmVyLmNwcCBiL2xpYnMvaHd1aS9MYXllclJlbmRlcmVyLmNwcAppbmRleCBmODA3NmNjLi4wYjM4YzRkIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvTGF5ZXJSZW5kZXJlci5jcHAKKysrIGIvbGlicy9od3VpL0xheWVyUmVuZGVyZXIuY3BwCkBAIC05Miw3ICs5Miw3IEBACiAgICAgLy8gd2hvIHdpbGwgaW52b2tlIE9wZW5HTFJlbmRlcmVyOjpyZXN1bWUoKQogfQogCi1HTGludCBMYXllclJlbmRlcmVyOjpnZXRUYXJnZXRGYm8oKSBjb25zdCB7CitHTHVpbnQgTGF5ZXJSZW5kZXJlcjo6Z2V0VGFyZ2V0RmJvKCkgY29uc3QgewogICAgIHJldHVybiBtTGF5ZXItPmdldEZibygpOwogfQogCkBAIC0xMTcsNyArMTE3LDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogUmVnaW9uKiBMYXllclJlbmRlcmVyOjpnZXRSZWdpb24oKSBjb25zdCB7Ci0gICAgaWYgKGdldFNuYXBzaG90KCktPmZsYWdzICYgU25hcHNob3Q6OmtGbGFnRmJvVGFyZ2V0KSB7CisgICAgaWYgKGN1cnJlbnRTbmFwc2hvdCgpLT5mbGFncyAmIFNuYXBzaG90OjprRmxhZ0Zib1RhcmdldCkgewogICAgICAgICByZXR1cm4gT3BlbkdMUmVuZGVyZXI6OmdldFJlZ2lvbigpOwogICAgIH0KICAgICByZXR1cm4gJm1MYXllci0+cmVnaW9uOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0xheWVyUmVuZGVyZXIuaCBiL2xpYnMvaHd1aS9MYXllclJlbmRlcmVyLmgKaW5kZXggNWY4NjczMS4uZjI0YzhkNCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0xheWVyUmVuZGVyZXIuaAorKysgYi9saWJzL2h3dWkvTGF5ZXJSZW5kZXJlci5oCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgdmlydHVhbCB2b2lkIGVuc3VyZVN0ZW5jaWxCdWZmZXIoKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzTGF5ZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIFJlZ2lvbiogZ2V0UmVnaW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGludCBnZXRUYXJnZXRGYm8oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMdWludCBnZXRUYXJnZXRGYm8oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcHJlc3NFcnJvckNoZWNrcygpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL01hdHJpeC5jcHAgYi9saWJzL2h3dWkvTWF0cml4LmNwcAppbmRleCBiYTIyMDcxLi40ZjVjZDI2IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvTWF0cml4LmNwcAorKysgYi9saWJzL2h3dWkvTWF0cml4LmNwcApAQCAtODksOCArODksOSBAQAogICAgICAgICBmbG9hdCBtMDEgPSBkYXRhW2tTa2V3WF07CiAgICAgICAgIGZsb2F0IG0xMCA9IGRhdGFba1NrZXdZXTsKICAgICAgICAgZmxvYXQgbTExID0gZGF0YVtrU2NhbGVZXTsKKyAgICAgICAgZmxvYXQgbTMyID0gZGF0YVtrVHJhbnNsYXRlWl07CiAKLSAgICAgICAgaWYgKG0wMSAhPSAwLjBmIHx8IG0xMCAhPSAwLjBmKSB7CisgICAgICAgIGlmIChtMDEgIT0gMC4wZiB8fCBtMTAgIT0gMC4wZiB8fCBtMzIgIT0gMC4wZikgewogICAgICAgICAgICAgbVR5cGUgfD0ga1R5cGVBZmZpbmU7CiAgICAgICAgIH0KIApAQCAtMTMxLDExICsxMzIsMTMgQEAKIH0KIAogYm9vbCBNYXRyaXg0Ojppc1B1cmVUcmFuc2xhdGUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGdldEdlb21ldHJ5VHlwZSgpIDw9IGtUeXBlVHJhbnNsYXRlOworICAgIC8vIE5PVEU6IHRlbXBvcmFyeSBoYWNrIHRvIHdvcmthcm91bmQgaWdub3JlVHJhbnNmb3JtIGJlaGF2aW9yIHdpdGggWiB2YWx1ZXMKKyAgICAvLyBUT0RPOiBzZXBhcmF0ZSB0aGlzIGludG8gaXNQdXJlMmRUcmFuc2xhdGUgdnMgaXNQdXJlM2RUcmFuc2xhdGUKKyAgICByZXR1cm4gZ2V0R2VvbWV0cnlUeXBlKCkgPD0ga1R5cGVUcmFuc2xhdGUgJiYgKGRhdGFba1RyYW5zbGF0ZVpdID09IDAuMGYpOwogfQogCiBib29sIE1hdHJpeDQ6OmlzU2ltcGxlKCkgY29uc3QgewotICAgIHJldHVybiBnZXRHZW9tZXRyeVR5cGUoKSA8PSAoa1R5cGVTY2FsZSB8IGtUeXBlVHJhbnNsYXRlKTsKKyAgICByZXR1cm4gZ2V0R2VvbWV0cnlUeXBlKCkgPD0gKGtUeXBlU2NhbGUgfCBrVHlwZVRyYW5zbGF0ZSkgJiYgKGRhdGFba1RyYW5zbGF0ZVpdID09IDAuMGYpOwogfQogCiBib29sIE1hdHJpeDQ6OmlzSWRlbnRpdHkoKSBjb25zdCB7CkBAIC0zNjksNiArMzcyLDg0IEBACiAgICAgbVR5cGUgPSBrVHlwZVVua25vd247CiB9CiAKKy8vIHRyYW5zbGF0ZWQgZnJvbSBhbmRyb2lkLm9wZW5nbC5NYXRyaXgjZnJ1c3R1bU0oKQordm9pZCBNYXRyaXg0Ojpsb2FkRnJ1c3R1bShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IG5lYXIsIGZsb2F0IGZhcikgeworICAgIGZsb2F0IHJfd2lkdGggID0gMS4wZiAvIChyaWdodCAtIGxlZnQpOworICAgIGZsb2F0IHJfaGVpZ2h0ID0gMS4wZiAvICh0b3AgLSBib3R0b20pOworICAgIGZsb2F0IHJfZGVwdGggID0gMS4wZiAvIChuZWFyIC0gZmFyKTsKKyAgICBmbG9hdCB4ID0gMi4wZiAqIChuZWFyICogcl93aWR0aCk7CisgICAgZmxvYXQgeSA9IDIuMGYgKiAobmVhciAqIHJfaGVpZ2h0KTsKKyAgICBmbG9hdCBBID0gKHJpZ2h0ICsgbGVmdCkgKiByX3dpZHRoOworICAgIGZsb2F0IEIgPSAodG9wICsgYm90dG9tKSAqIHJfaGVpZ2h0OworICAgIGZsb2F0IEMgPSAoZmFyICsgbmVhcikgKiByX2RlcHRoOworICAgIGZsb2F0IEQgPSAyLjBmICogKGZhciAqIG5lYXIgKiByX2RlcHRoKTsKKworICAgIG1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKyAgICBtVHlwZSA9IGtUeXBlVW5rbm93bjsKKworICAgIGRhdGFba1NjYWxlWF0gPSB4OworICAgIGRhdGFba1NjYWxlWV0gPSB5OworICAgIGRhdGFbOF0gPSBBOworICAgIGRhdGFbOV0gPSBCOworICAgIGRhdGFba1NjYWxlWl0gPSBDOworICAgIGRhdGFba1RyYW5zbGF0ZVpdID0gRDsKKyAgICBkYXRhWzExXSA9IC0xLjBmOworfQorCisvLyB0cmFuc2xhdGVkIGZyb20gYW5kcm9pZC5vcGVuZ2wuTWF0cml4I3NldExvb2tBdE0oKQordm9pZCBNYXRyaXg0Ojpsb2FkTG9va0F0KGZsb2F0IGV5ZVgsIGZsb2F0IGV5ZVksIGZsb2F0IGV5ZVosCisgICAgICAgIGZsb2F0IGNlbnRlclgsIGZsb2F0IGNlbnRlclksIGZsb2F0IGNlbnRlclosCisgICAgICAgIGZsb2F0IHVwWCwgZmxvYXQgdXBZLCBmbG9hdCB1cFopIHsKKyAgICBmbG9hdCBmeCA9IGNlbnRlclggLSBleWVYOworICAgIGZsb2F0IGZ5ID0gY2VudGVyWSAtIGV5ZVk7CisgICAgZmxvYXQgZnogPSBjZW50ZXJaIC0gZXllWjsKKworICAgIC8vIE5vcm1hbGl6ZSBmCisgICAgZmxvYXQgcmxmID0gMS4wZiAvIHNxcnQoZngqZnggKyBmeSpmeSArIGZ6KmZ6KTsKKyAgICBmeCAqPSBybGY7CisgICAgZnkgKj0gcmxmOworICAgIGZ6ICo9IHJsZjsKKworICAgIC8vIGNvbXB1dGUgcyA9IGYgeCB1cCAoeCBtZWFucyAiY3Jvc3MgcHJvZHVjdCIpCisgICAgZmxvYXQgc3ggPSBmeSAqIHVwWiAtIGZ6ICogdXBZOworICAgIGZsb2F0IHN5ID0gZnogKiB1cFggLSBmeCAqIHVwWjsKKyAgICBmbG9hdCBzeiA9IGZ4ICogdXBZIC0gZnkgKiB1cFg7CisKKyAgICAvLyBhbmQgbm9ybWFsaXplIHMKKyAgICBmbG9hdCBybHMgPSAxLjBmIC8gc3FydChzeCpzeCArIHN5KnN5ICsgc3oqc3opOworICAgIHN4ICo9IHJsczsKKyAgICBzeSAqPSBybHM7CisgICAgc3ogKj0gcmxzOworCisgICAgLy8gY29tcHV0ZSB1ID0gcyB4IGYKKyAgICBmbG9hdCB1eCA9IHN5ICogZnogLSBzeiAqIGZ5OworICAgIGZsb2F0IHV5ID0gc3ogKiBmeCAtIHN4ICogZno7CisgICAgZmxvYXQgdXogPSBzeCAqIGZ5IC0gc3kgKiBmeDsKKworICAgIG1UeXBlID0ga1R5cGVVbmtub3duOworICAgIGRhdGFbMF0gPSBzeDsKKyAgICBkYXRhWzFdID0gdXg7CisgICAgZGF0YVsyXSA9IC1meDsKKyAgICBkYXRhWzNdID0gMC4wZjsKKworICAgIGRhdGFbNF0gPSBzeTsKKyAgICBkYXRhWzVdID0gdXk7CisgICAgZGF0YVs2XSA9IC1meTsKKyAgICBkYXRhWzddID0gMC4wZjsKKworICAgIGRhdGFbOF0gPSBzejsKKyAgICBkYXRhWzldID0gdXo7CisgICAgZGF0YVsxMF0gPSAtZno7CisgICAgZGF0YVsxMV0gPSAwLjBmOworCisgICAgZGF0YVsxMl0gPSAwLjBmOworICAgIGRhdGFbMTNdID0gMC4wZjsKKyAgICBkYXRhWzE0XSA9IDAuMGY7CisgICAgZGF0YVsxNV0gPSAxLjBmOworCisgICAgdHJhbnNsYXRlKC1leWVYLCAtZXllWSwgLWV5ZVopOworfQorCiB2b2lkIE1hdHJpeDQ6OmxvYWRPcnRobyhmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9hdCB0b3AsIGZsb2F0IG5lYXIsIGZsb2F0IGZhcikgewogICAgIGxvYWRJZGVudGl0eSgpOwogCkBAIC0zODIsNiArNDYzLDE0IEBACiAgICAgbVR5cGUgPSBrVHlwZVRyYW5zbGF0ZSB8IGtUeXBlU2NhbGUgfCBrVHlwZVJlY3RUb1JlY3Q7CiB9CiAKK3ZvaWQgTWF0cml4NDo6bWFwUG9pbnQzZChWZWN0b3IzJiB2ZWMpIGNvbnN0IHsKKyAgICAvL1RPRE86IG9wdGltaXplIHNpbXBsZSBjYXNlCisgICAgVmVjdG9yMyBvcmlnKHZlYyk7CisgICAgdmVjLnggPSBvcmlnLnggKiBkYXRhW2tTY2FsZVhdICsgb3JpZy55ICogZGF0YVtrU2tld1hdICsgb3JpZy56ICogZGF0YVs4XSArIGRhdGFba1RyYW5zbGF0ZVhdOworICAgIHZlYy55ID0gb3JpZy54ICogZGF0YVtrU2tld1ldICsgb3JpZy55ICogZGF0YVtrU2NhbGVZXSArIG9yaWcueiAqIGRhdGFbOV0gKyBkYXRhW2tUcmFuc2xhdGVZXTsKKyAgICB2ZWMueiA9IG9yaWcueCAqIGRhdGFbMl0gKyBvcmlnLnkgKiBkYXRhWzZdICsgb3JpZy56ICogZGF0YVtrU2NhbGVaXSArIGRhdGFba1RyYW5zbGF0ZVpdOworfQorCiAjZGVmaW5lIE1VTF9BRERfU1RPUkUoYSwgYiwgYykgYSA9IChhKSAqIChiKSArIChjKQogCiB2b2lkIE1hdHJpeDQ6Om1hcFBvaW50KGZsb2F0JiB4LCBmbG9hdCYgeSkgY29uc3QgewpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL01hdHJpeC5oIGIvbGlicy9od3VpL01hdHJpeC5oCmluZGV4IGI4NjFiYTQuLjAwY2EwNTAgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9NYXRyaXguaAorKysgYi9saWJzL2h3dWkvTWF0cml4LmgKQEAgLTEyMSw2ICsxMjEsMTAgQEAKICAgICB2b2lkIGxvYWRSb3RhdGUoZmxvYXQgYW5nbGUpOwogICAgIHZvaWQgbG9hZFJvdGF0ZShmbG9hdCBhbmdsZSwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7CiAgICAgdm9pZCBsb2FkTXVsdGlwbHkoY29uc3QgTWF0cml4NCYgdSwgY29uc3QgTWF0cml4NCYgdik7CisgICAgdm9pZCBsb2FkRnJ1c3R1bShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IG5lYXIsIGZsb2F0IGZhcik7CisgICAgdm9pZCBsb2FkTG9va0F0KGZsb2F0IGV5ZVgsIGZsb2F0IGV5ZVksIGZsb2F0IGV5ZVosCisgICAgICAgICAgICBmbG9hdCBjZW50ZXJYLCBmbG9hdCBjZW50ZXJZLCBmbG9hdCBjZW50ZXJaLAorICAgICAgICAgICAgZmxvYXQgdXBYLCBmbG9hdCB1cFksIGZsb2F0IHVwWik7CiAKICAgICB2b2lkIGxvYWRPcnRobyhmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9hdCB0b3AsIGZsb2F0IG5lYXIsIGZsb2F0IGZhcik7CiAKQEAgLTEzNCwxNyArMTM4LDE4IEBACiAKICAgICB2b2lkIG11bHRpcGx5KGZsb2F0IHYpOwogCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgeworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHogPSAwKSB7CiAgICAgICAgIGlmICgoZ2V0VHlwZSgpICYgc0dlb21ldHJ5TWFzaykgPD0ga1R5cGVUcmFuc2xhdGUpIHsKICAgICAgICAgICAgIGRhdGFba1RyYW5zbGF0ZVhdICs9IHg7CiAgICAgICAgICAgICBkYXRhW2tUcmFuc2xhdGVZXSArPSB5OworICAgICAgICAgICAgZGF0YVtrVHJhbnNsYXRlWl0gKz0gejsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIERvaW5nIGEgdHJhbnNsYXRpb24gd2lsbCBvbmx5IGFmZmVjdCB0aGUgdHJhbnNsYXRlIGJpdCBvZiB0aGUgdHlwZQogICAgICAgICAgICAgLy8gU2F2ZSB0aGUgdHlwZQogICAgICAgICAgICAgdWludDhfdCB0eXBlID0gbVR5cGU7CiAKICAgICAgICAgICAgIE1hdHJpeDQgdTsKLSAgICAgICAgICAgIHUubG9hZFRyYW5zbGF0ZSh4LCB5LCAwLjBmKTsKKyAgICAgICAgICAgIHUubG9hZFRyYW5zbGF0ZSh4LCB5LCB6KTsKICAgICAgICAgICAgIG11bHRpcGx5KHUpOwogCiAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSB0eXBlIGFuZCBmaXggdGhlIHRyYW5zbGF0ZSBiaXQKQEAgLTE5MCw4ICsxOTUsOSBAQAogICAgIHZvaWQgY29weVRvKGZsb2F0KiB2KSBjb25zdDsKICAgICB2b2lkIGNvcHlUbyhTa01hdHJpeCYgdikgY29uc3Q7CiAKLSAgICB2b2lkIG1hcFJlY3QoUmVjdCYgcikgY29uc3Q7Ci0gICAgdm9pZCBtYXBQb2ludChmbG9hdCYgeCwgZmxvYXQmIHkpIGNvbnN0OworICAgIHZvaWQgbWFwUG9pbnQzZChWZWN0b3IzJiB2ZWMpIGNvbnN0OworICAgIHZvaWQgbWFwUG9pbnQoZmxvYXQmIHgsIGZsb2F0JiB5KSBjb25zdDsgLy8gMmQgb25seQorICAgIHZvaWQgbWFwUmVjdChSZWN0JiByKSBjb25zdDsgLy8gMmQgb25seQogCiAgICAgZmxvYXQgZ2V0VHJhbnNsYXRlWCgpIGNvbnN0OwogICAgIGZsb2F0IGdldFRyYW5zbGF0ZVkoKSBjb25zdDsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9PcGVuR0xSZW5kZXJlci5jcHAgYi9saWJzL2h3dWkvT3BlbkdMUmVuZGVyZXIuY3BwCmluZGV4IDRkNzZiZWQuLjhmYjZlMzggMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9PcGVuR0xSZW5kZXJlci5jcHAKKysrIGIvbGlicy9od3VpL09wZW5HTFJlbmRlcmVyLmNwcApAQCAtMzYsNyArMzYsOSBAQAogI2luY2x1ZGUgIkZlbmNlLmgiCiAjaW5jbHVkZSAiUGF0aFRlc3NlbGxhdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVydGllcy5oIgorI2luY2x1ZGUgIlNoYWRvd1Rlc3NlbGxhdG9yLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiVmVydGV4QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKQEAgLTEyNyw3ICsxMjksNiBAQAogCiAgICAgbWVtY3B5KG1NZXNoVmVydGljZXMsIGdNZXNoVmVydGljZXMsIHNpemVvZihnTWVzaFZlcnRpY2VzKSk7CiAKLSAgICBtRmlyc3RTbmFwc2hvdCA9IG5ldyBTbmFwc2hvdDsKICAgICBtRnJhbWVTdGFydGVkID0gZmFsc2U7CiAgICAgbUNvdW50T3ZlcmRyYXcgPSBmYWxzZTsKIApAQCAtMTU0LDIyICsxNTUsNiBAQAogLy8gU2V0dXAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotdm9pZCBPcGVuR0xSZW5kZXJlcjo6c2V0TmFtZShjb25zdCBjaGFyKiBuYW1lKSB7Ci0gICAgaWYgKG5hbWUpIHsKLSAgICAgICAgbU5hbWUuc2V0VG8obmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbU5hbWUuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIqIE9wZW5HTFJlbmRlcmVyOjpnZXROYW1lKCkgY29uc3QgewotICAgIHJldHVybiBtTmFtZS5zdHJpbmcoKTsKLX0KLQotYm9vbCBPcGVuR0xSZW5kZXJlcjo6aXNEZWZlcnJlZCgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldFZpZXdwb3J0KGludCB3aWR0aCwgaW50IGhlaWdodCkgewogICAgIGluaXRWaWV3cG9ydCh3aWR0aCwgaGVpZ2h0KTsKIApAQCAtMTgwLDI2ICsxNjUsMzEgQEAKIH0KIAogdm9pZCBPcGVuR0xSZW5kZXJlcjo6aW5pdFZpZXdwb3J0KGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIG1PcnRob01hdHJpeC5sb2FkT3J0aG8oMCwgd2lkdGgsIGhlaWdodCwgMCwgLTEsIDEpOworICAgIGlmIChtQ2FjaGVzLnByb3BlcnR5RW5hYmxlM2QpIHsKKyAgICAgICAgLy8gVE9ETzogbWFrZSB2aWV3IHByb2ogYXBwIGNvbmZpZ3VyYWJsZQorICAgICAgICBmbG9hdCBkaXN0ID0gc3RkOjptYXgod2lkdGgsIGhlaWdodCkgKiAxLjU7CisgICAgICAgIGRpc3QgKj0gbUNhY2hlcy5wcm9wZXJ0eUNhbWVyYURpc3RhbmNlOworICAgICAgICBNYXRyaXg0IHByb2plY3Rpb247CisgICAgICAgIHByb2plY3Rpb24ubG9hZEZydXN0dW0oLXdpZHRoIC8gMiwgLWhlaWdodCAvIDIsIHdpZHRoIC8gMiwgaGVpZ2h0IC8gMiwgZGlzdCwgMCk7CisgICAgICAgIE1hdHJpeDQgdmlldzsKKyAgICAgICAgdmlldy5sb2FkTG9va0F0KDAsIDAsIGRpc3QsCisgICAgICAgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAwLCAxLCAwKTsKKyAgICAgICAgbVZpZXdQcm9qTWF0cml4LmxvYWRNdWx0aXBseShwcm9qZWN0aW9uLCB2aWV3KTsKKyAgICAgICAgbVZpZXdQcm9qTWF0cml4LnRyYW5zbGF0ZSgtd2lkdGgvMiwgLWhlaWdodC8yKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtVmlld1Byb2pNYXRyaXgubG9hZE9ydGhvKDAsIHdpZHRoLCBoZWlnaHQsIDAsIC0xLCAxKTsKKyAgICB9CiAKLSAgICBtV2lkdGggPSB3aWR0aDsKLSAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgbUZpcnN0U25hcHNob3QtPmhlaWdodCA9IGhlaWdodDsKLSAgICBtRmlyc3RTbmFwc2hvdC0+dmlld3BvcnQuc2V0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgIGluaXRpYWxpemVWaWV3cG9ydCh3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBPcGVuR0xSZW5kZXJlcjo6c2V0dXBGcmFtZVN0YXRlKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKICAgICAgICAgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgYm9vbCBvcGFxdWUpIHsKICAgICBtQ2FjaGVzLmNsZWFyR2FyYmFnZSgpOwogCisgICAgaW5pdGlhbGl6ZVNhdmVTdGFjayhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIG1PcGFxdWUgPSBvcGFxdWU7Ci0gICAgbVNuYXBzaG90ID0gbmV3IFNuYXBzaG90KG1GaXJzdFNuYXBzaG90LAotICAgICAgICAgICAgU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcgfCBTa0NhbnZhczo6a0NsaXBfU2F2ZUZsYWcpOwotICAgIG1TbmFwc2hvdC0+ZmJvID0gZ2V0VGFyZ2V0RmJvKCk7Ci0gICAgbVNhdmVDb3VudCA9IDE7Ci0KLSAgICBtU25hcHNob3QtPnNldENsaXAobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICBtVGlsaW5nQ2xpcC5zZXQobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKIH0KIApAQCAtMjExLDE0ICsyMDEsMTQgQEAKIAogICAgIGRpc2NhcmRGcmFtZWJ1ZmZlcihtVGlsaW5nQ2xpcC5sZWZ0LCBtVGlsaW5nQ2xpcC50b3AsIG1UaWxpbmdDbGlwLnJpZ2h0LCBtVGlsaW5nQ2xpcC5ib3R0b20pOwogCi0gICAgZ2xWaWV3cG9ydCgwLCAwLCBtV2lkdGgsIG1IZWlnaHQpOworICAgIGdsVmlld3BvcnQoMCwgMCwgZ2V0V2lkdGgoKSwgZ2V0SGVpZ2h0KCkpOwogCiAgICAgLy8gRnVuY3RvcnMgYnJlYWsgdGhlIHRpbGluZyBleHRlbnNpb24gaW4gcHJldHR5IHNwZWN0YWN1bGFyIHdheXMKICAgICAvLyBUaGlzIGVuc3VyZXMgd2UgZG9uJ3QgdXNlIHRpbGluZyB3aGVuIGEgZnVuY3RvciBpcyBnb2luZyB0byBiZQogICAgIC8vIGludm9rZWQgZHVyaW5nIHRoZSBmcmFtZQogICAgIG1TdXBwcmVzc1RpbGluZyA9IG1DYWNoZXMuaGFzUmVnaXN0ZXJlZEZ1bmN0b3JzKCk7CiAKLSAgICBzdGFydFRpbGluZyhtU25hcHNob3QsIHRydWUpOworICAgIHN0YXJ0VGlsaW5nQ3VycmVudENsaXAodHJ1ZSk7CiAKICAgICBkZWJ1Z092ZXJkcmF3KHRydWUsIHRydWUpOwogCkBAIC0yMjYsMTAgKzIxNiw2IEBACiAgICAgICAgICAgICBtVGlsaW5nQ2xpcC5yaWdodCwgbVRpbGluZ0NsaXAuYm90dG9tLCBtT3BhcXVlKTsKIH0KIAotc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OnByZXBhcmUoYm9vbCBvcGFxdWUpIHsKLSAgICByZXR1cm4gcHJlcGFyZURpcnR5KDAuMGYsIDAuMGYsIG1XaWR0aCwgbUhlaWdodCwgb3BhcXVlKTsKLX0KLQogc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OnByZXBhcmVEaXJ0eShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsCiAgICAgICAgIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGJvb2wgb3BhcXVlKSB7CiAKQEAgLTIzOSw3ICsyMjUsNyBAQAogICAgIC8vIFRoZSBmcmFtZWJ1ZmZlciByZW5kZXJlciB3aWxsIGZpcnN0IGRlZmVyIHRoZSBkaXNwbGF5IGxpc3QKICAgICAvLyBmb3IgZWFjaCBsYXllciBhbmQgd2FpdCB1bnRpbCB0aGUgZmlyc3QgZHJhd2luZyBjb21tYW5kCiAgICAgLy8gdG8gc3RhcnQgdGhlIGZyYW1lCi0gICAgaWYgKG1TbmFwc2hvdC0+ZmJvID09IDApIHsKKyAgICBpZiAoY3VycmVudFNuYXBzaG90KCktPmZibyA9PSAwKSB7CiAgICAgICAgIHN5bmNTdGF0ZSgpOwogICAgICAgICB1cGRhdGVMYXllcnMoKTsKICAgICB9IGVsc2UgewpAQCAtMjU0LDcgKzI0MCw3IEBACiAgICAgLy8gcGVyZm9ybSBhIGRpc2NhcmQgdG8gbGV0IHRoZSBkcml2ZXIga25vdyB3ZSBkb24ndCBuZWVkIHRvIHByZXNlcnZlCiAgICAgLy8gdGhlIGJhY2sgYnVmZmVyIGZvciB0aGlzIGZyYW1lLgogICAgIGlmIChtRXh0ZW5zaW9ucy5oYXNEaXNjYXJkRnJhbWVidWZmZXIoKSAmJgotICAgICAgICAgICAgbGVmdCA8PSAwLjBmICYmIHRvcCA8PSAwLjBmICYmIHJpZ2h0ID49IG1XaWR0aCAmJiBib3R0b20gPj0gbUhlaWdodCkgeworICAgICAgICAgICAgbGVmdCA8PSAwLjBmICYmIHRvcCA8PSAwLjBmICYmIHJpZ2h0ID49IGdldFdpZHRoKCkgJiYgYm90dG9tID49IGdldEhlaWdodCgpKSB7CiAgICAgICAgIGNvbnN0IGJvb2wgaXNGYm8gPSBnZXRUYXJnZXRGYm8oKSA9PSAwOwogICAgICAgICBjb25zdCBHTGVudW0gYXR0YWNobWVudHNbXSA9IHsKICAgICAgICAgICAgICAgICBpc0ZibyA/IChjb25zdCBHTGVudW0pIEdMX0NPTE9SX0VYVCA6IChjb25zdCBHTGVudW0pIEdMX0NPTE9SX0FUVEFDSE1FTlQwLApAQCAtMjY2LDcgKzI1Miw3IEBACiBzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6Y2xlYXIoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBib29sIG9wYXF1ZSkgewogICAgIGlmICghb3BhcXVlIHx8IG1Db3VudE92ZXJkcmF3KSB7CiAgICAgICAgIG1DYWNoZXMuZW5hYmxlU2Npc3NvcigpOwotICAgICAgICBtQ2FjaGVzLnNldFNjaXNzb3IobGVmdCwgbVNuYXBzaG90LT5oZWlnaHQgLSBib3R0b20sIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTsKKyAgICAgICAgbUNhY2hlcy5zZXRTY2lzc29yKGxlZnQsIGN1cnJlbnRTbmFwc2hvdCgpLT5oZWlnaHQgLSBib3R0b20sIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTsKICAgICAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEcmV3OwogICAgIH0KQEAgLTI4MywxNCArMjY5LDE2IEBACiAgICAgfQogfQogCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpzdGFydFRpbGluZyhjb25zdCBzcDxTbmFwc2hvdD4mIHMsIGJvb2wgb3BhcXVlKSB7Cit2b2lkIE9wZW5HTFJlbmRlcmVyOjpzdGFydFRpbGluZ0N1cnJlbnRDbGlwKGJvb2wgb3BhcXVlKSB7CiAgICAgaWYgKCFtU3VwcHJlc3NUaWxpbmcpIHsKLSAgICAgICAgUmVjdCogY2xpcCA9ICZtVGlsaW5nQ2xpcDsKLSAgICAgICAgaWYgKHMtPmZsYWdzICYgU25hcHNob3Q6OmtGbGFnRmJvVGFyZ2V0KSB7Ci0gICAgICAgICAgICBjbGlwID0gJihzLT5sYXllci0+Y2xpcFJlY3QpOworICAgICAgICBjb25zdCBTbmFwc2hvdCogc25hcHNob3QgPSBjdXJyZW50U25hcHNob3QoKTsKKworICAgICAgICBjb25zdCBSZWN0KiBjbGlwID0gJm1UaWxpbmdDbGlwOworICAgICAgICBpZiAoc25hcHNob3QtPmZsYWdzICYgU25hcHNob3Q6OmtGbGFnRmJvVGFyZ2V0KSB7CisgICAgICAgICAgICBjbGlwID0gJihzbmFwc2hvdC0+bGF5ZXItPmNsaXBSZWN0KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXJ0VGlsaW5nKCpjbGlwLCBzLT5oZWlnaHQsIG9wYXF1ZSk7CisgICAgICAgIHN0YXJ0VGlsaW5nKCpjbGlwLCBzbmFwc2hvdC0+aGVpZ2h0LCBvcGFxdWUpOwogICAgIH0KIH0KIApAQCAtMzY5LDcgKzM1Nyw3IEBACiB9CiAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OnJlc3VtZSgpIHsKLSAgICBzcDxTbmFwc2hvdD4gc25hcHNob3QgPSAobVNuYXBzaG90ICE9IE5VTEwpID8gbVNuYXBzaG90IDogbUZpcnN0U25hcHNob3Q7CisgICAgY29uc3QgU25hcHNob3QqIHNuYXBzaG90ID0gY3VycmVudFNuYXBzaG90KCk7CiAgICAgZ2xWaWV3cG9ydCgwLCAwLCBzbmFwc2hvdC0+dmlld3BvcnQuZ2V0V2lkdGgoKSwgc25hcHNob3QtPnZpZXdwb3J0LmdldEhlaWdodCgpKTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgc25hcHNob3QtPmZibyk7CiAgICAgZGVidWdPdmVyZHJhdyh0cnVlLCBmYWxzZSk7CkBAIC0zOTEsNyArMzc5LDcgQEAKIH0KIAogdm9pZCBPcGVuR0xSZW5kZXJlcjo6cmVzdW1lQWZ0ZXJMYXllcigpIHsKLSAgICBzcDxTbmFwc2hvdD4gc25hcHNob3QgPSAobVNuYXBzaG90ICE9IE5VTEwpID8gbVNuYXBzaG90IDogbUZpcnN0U25hcHNob3Q7CisgICAgY29uc3QgU25hcHNob3QqIHNuYXBzaG90ID0gY3VycmVudFNuYXBzaG90KCk7CiAgICAgZ2xWaWV3cG9ydCgwLCAwLCBzbmFwc2hvdC0+dmlld3BvcnQuZ2V0V2lkdGgoKSwgc25hcHNob3QtPnZpZXdwb3J0LmdldEhlaWdodCgpKTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgc25hcHNob3QtPmZibyk7CiAgICAgZGVidWdPdmVyZHJhdyh0cnVlLCBmYWxzZSk7CkBAIC00NDcsMTYgKzQzNSwxNiBAQAogfQogCiBzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6Y2FsbERyYXdHTEZ1bmN0aW9uKEZ1bmN0b3IqIGZ1bmN0b3IsIFJlY3QmIGRpcnR5KSB7Ci0gICAgaWYgKG1TbmFwc2hvdC0+aXNJZ25vcmVkKCkpIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKKyAgICBpZiAoY3VycmVudFNuYXBzaG90KCktPmlzSWdub3JlZCgpKSByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAKICAgICBkZXRhY2hGdW5jdG9yKGZ1bmN0b3IpOwogCiAKLSAgICBSZWN0IGNsaXAoKm1TbmFwc2hvdC0+Y2xpcFJlY3QpOworICAgIFJlY3QgY2xpcCgqY3VycmVudENsaXBSZWN0KCkpOwogICAgIGNsaXAuc25hcFRvUGl4ZWxCb3VuZGFyaWVzKCk7CiAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIGZ1bmN0b3Igd2lsbCBkcmF3LCBsZXQncyBkaXJ0eQotICAgIC8vIHRuZSBlbnRpcmUgY2xpcCByZWdpb24KKyAgICAvLyB0aGUgZW50aXJlIGNsaXAgcmVnaW9uCiAgICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAgZGlydHlMYXllclVuY2hlY2tlZChjbGlwLCBnZXRSZWdpb24oKSk7CiAgICAgfQpAQCAtNDY3LDkgKzQ1NSw5IEBACiAgICAgaW5mby5jbGlwUmlnaHQgPSBjbGlwLnJpZ2h0OwogICAgIGluZm8uY2xpcEJvdHRvbSA9IGNsaXAuYm90dG9tOwogICAgIGluZm8uaXNMYXllciA9IGhhc0xheWVyKCk7Ci0gICAgaW5mby53aWR0aCA9IGdldFNuYXBzaG90KCktPnZpZXdwb3J0LmdldFdpZHRoKCk7Ci0gICAgaW5mby5oZWlnaHQgPSBnZXRTbmFwc2hvdCgpLT5oZWlnaHQ7Ci0gICAgZ2V0U25hcHNob3QoKS0+dHJhbnNmb3JtLT5jb3B5VG8oJmluZm8udHJhbnNmb3JtWzBdKTsKKyAgICBpbmZvLndpZHRoID0gY3VycmVudFNuYXBzaG90KCktPnZpZXdwb3J0LmdldFdpZHRoKCk7CisgICAgaW5mby5oZWlnaHQgPSBjdXJyZW50U25hcHNob3QoKS0+aGVpZ2h0OworICAgIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Y29weVRvKCZpbmZvLnRyYW5zZm9ybVswXSk7CiAKICAgICBib29sIGRpcnR5Q2xpcCA9IG1EaXJ0eUNsaXA7CiAgICAgLy8gc2V0dXAgR0wgc3RhdGUgZm9yIGZ1bmN0b3IKQEAgLTUzMiw3ICs1MjAsNyBAQAogICAgICAgICBjb25zdCBSZWN0KiBjbGlwID0gJm1UaWxpbmdDbGlwOwogCiAgICAgICAgIG1DYWNoZXMuZW5hYmxlU2Npc3NvcigpOwotICAgICAgICBtQ2FjaGVzLnNldFNjaXNzb3IoY2xpcC0+bGVmdCwgbUZpcnN0U25hcHNob3QtPmhlaWdodCAtIGNsaXAtPmJvdHRvbSwKKyAgICAgICAgbUNhY2hlcy5zZXRTY2lzc29yKGNsaXAtPmxlZnQsIGZpcnN0U25hcHNob3QoKS0+aGVpZ2h0IC0gY2xpcC0+Ym90dG9tLAogICAgICAgICAgICAgICAgIGNsaXAtPnJpZ2h0IC0gY2xpcC0+bGVmdCwgY2xpcC0+Ym90dG9tIC0gY2xpcC0+dG9wKTsKIAogICAgICAgICAvLyAxeCBvdmVyZHJhdwpAQCAtNTU2LDkgKzU0NCw5IEBACiB9CiAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OmNvdW50T3ZlcmRyYXcoKSB7Ci0gICAgc2l6ZV90IGNvdW50ID0gbVdpZHRoICogbUhlaWdodDsKKyAgICBzaXplX3QgY291bnQgPSBnZXRXaWR0aCgpICogZ2V0SGVpZ2h0KCk7CiAgICAgdWludDMyX3QqIGJ1ZmZlciA9IG5ldyB1aW50MzJfdFtjb3VudF07Ci0gICAgZ2xSZWFkUGl4ZWxzKDAsIDAsIG1XaWR0aCwgbUhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgJmJ1ZmZlclswXSk7CisgICAgZ2xSZWFkUGl4ZWxzKDAsIDAsIGdldFdpZHRoKCksIGdldEhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAmYnVmZmVyWzBdKTsKIAogICAgIHNpemVfdCB0b3RhbCA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CkBAIC01OTQsNyArNTgyLDcgQEAKIAogICAgICAgICBpZiAoaW5GcmFtZSkgewogICAgICAgICAgICAgcmVzdW1lQWZ0ZXJMYXllcigpOwotICAgICAgICAgICAgc3RhcnRUaWxpbmcobVNuYXBzaG90KTsKKyAgICAgICAgICAgIHN0YXJ0VGlsaW5nQ3VycmVudENsaXAoKTsKICAgICAgICAgfQogCiAgICAgICAgIGxheWVyLT5kZWJ1Z0RyYXdVcGRhdGUgPSBtQ2FjaGVzLmRlYnVnTGF5ZXJzVXBkYXRlczsKQEAgLTcxNSw1MCArNzAzLDE3IEBACiAvLyBTdGF0ZSBtYW5hZ2VtZW50CiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLWludCBPcGVuR0xSZW5kZXJlcjo6Z2V0U2F2ZUNvdW50KCkgY29uc3QgewotICAgIHJldHVybiBtU2F2ZUNvdW50OwotfQotCi1pbnQgT3BlbkdMUmVuZGVyZXI6OnNhdmUoaW50IGZsYWdzKSB7Ci0gICAgcmV0dXJuIHNhdmVTbmFwc2hvdChmbGFncyk7Ci19Ci0KLXZvaWQgT3BlbkdMUmVuZGVyZXI6OnJlc3RvcmUoKSB7Ci0gICAgaWYgKG1TYXZlQ291bnQgPiAxKSB7Ci0gICAgICAgIHJlc3RvcmVTbmFwc2hvdCgpOwotICAgIH0KLX0KLQotdm9pZCBPcGVuR0xSZW5kZXJlcjo6cmVzdG9yZVRvQ291bnQoaW50IHNhdmVDb3VudCkgewotICAgIGlmIChzYXZlQ291bnQgPCAxKSBzYXZlQ291bnQgPSAxOwotCi0gICAgd2hpbGUgKG1TYXZlQ291bnQgPiBzYXZlQ291bnQpIHsKLSAgICAgICAgcmVzdG9yZVNuYXBzaG90KCk7Ci0gICAgfQotfQotCi1pbnQgT3BlbkdMUmVuZGVyZXI6OnNhdmVTbmFwc2hvdChpbnQgZmxhZ3MpIHsKLSAgICBtU25hcHNob3QgPSBuZXcgU25hcHNob3QobVNuYXBzaG90LCBmbGFncyk7Ci0gICAgcmV0dXJuIG1TYXZlQ291bnQrKzsKLX0KLQotYm9vbCBPcGVuR0xSZW5kZXJlcjo6cmVzdG9yZVNuYXBzaG90KCkgewotICAgIGJvb2wgcmVzdG9yZUNsaXAgPSBtU25hcHNob3QtPmZsYWdzICYgU25hcHNob3Q6OmtGbGFnQ2xpcFNldDsKLSAgICBib29sIHJlc3RvcmVMYXllciA9IG1TbmFwc2hvdC0+ZmxhZ3MgJiBTbmFwc2hvdDo6a0ZsYWdJc0xheWVyOwotICAgIGJvb2wgcmVzdG9yZU9ydGhvID0gbVNuYXBzaG90LT5mbGFncyAmIFNuYXBzaG90OjprRmxhZ0RpcnR5T3J0aG87Ci0KLSAgICBzcDxTbmFwc2hvdD4gY3VycmVudCA9IG1TbmFwc2hvdDsKLSAgICBzcDxTbmFwc2hvdD4gcHJldmlvdXMgPSBtU25hcHNob3QtPnByZXZpb3VzOwordm9pZCBPcGVuR0xSZW5kZXJlcjo6b25TbmFwc2hvdFJlc3RvcmVkKGNvbnN0IFNuYXBzaG90JiByZW1vdmVkLCBjb25zdCBTbmFwc2hvdCYgcmVzdG9yZWQpIHsKKyAgICBib29sIHJlc3RvcmVPcnRobyA9IHJlbW92ZWQuZmxhZ3MgJiBTbmFwc2hvdDo6a0ZsYWdEaXJ0eU9ydGhvOworICAgIGJvb2wgcmVzdG9yZUNsaXAgPSByZW1vdmVkLmZsYWdzICYgU25hcHNob3Q6OmtGbGFnQ2xpcFNldDsKKyAgICBib29sIHJlc3RvcmVMYXllciA9IHJlbW92ZWQuZmxhZ3MgJiBTbmFwc2hvdDo6a0ZsYWdJc0xheWVyOwogCiAgICAgaWYgKHJlc3RvcmVPcnRobykgewotICAgICAgICBSZWN0JiByID0gcHJldmlvdXMtPnZpZXdwb3J0OworICAgICAgICBjb25zdCBSZWN0JiByID0gcmVzdG9yZWQudmlld3BvcnQ7CiAgICAgICAgIGdsVmlld3BvcnQoci5sZWZ0LCByLnRvcCwgci5yaWdodCwgci5ib3R0b20pOwotICAgICAgICBtT3J0aG9NYXRyaXgubG9hZChjdXJyZW50LT5vcnRob01hdHJpeCk7CisgICAgICAgIG1WaWV3UHJvak1hdHJpeC5sb2FkKHJlbW92ZWQub3J0aG9NYXRyaXgpOyAvLyBUT0RPOiBzaG91bGQgb3J0aG8gYmUgc3RvcmVkIGluICdyZXN0b3JlZCc/CiAgICAgfQogCi0gICAgbVNhdmVDb3VudC0tOwotICAgIG1TbmFwc2hvdCA9IHByZXZpb3VzOwotCiAgICAgaWYgKHJlc3RvcmVDbGlwKSB7CiAgICAgICAgIGRpcnR5Q2xpcCgpOwogICAgIH0KQEAgLTc2NiwxMSArNzIxLDkgQEAKICAgICBpZiAocmVzdG9yZUxheWVyKSB7CiAgICAgICAgIGVuZE1hcmsoKTsgLy8gU2F2ZWxheWVyCiAgICAgICAgIHN0YXJ0TWFyaygiQ29tcG9zZUxheWVyIik7Ci0gICAgICAgIGNvbXBvc2VMYXllcihjdXJyZW50LCBwcmV2aW91cyk7CisgICAgICAgIGNvbXBvc2VMYXllcihyZW1vdmVkLCByZXN0b3JlZCk7CiAgICAgICAgIGVuZE1hcmsoKTsKICAgICB9Ci0KLSAgICByZXR1cm4gcmVzdG9yZUNsaXA7CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTc3OSwxMSArNzMyLDEwIEBACiAKIGludCBPcGVuR0xSZW5kZXJlcjo6c2F2ZUxheWVyKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKICAgICAgICAgaW50IGFscGhhLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUsIGludCBmbGFncykgewotICAgIGNvbnN0IEdMdWludCBwcmV2aW91c0ZibyA9IG1TbmFwc2hvdC0+ZmJvOwogICAgIGNvbnN0IGludCBjb3VudCA9IHNhdmVTbmFwc2hvdChmbGFncyk7CiAKLSAgICBpZiAoIW1TbmFwc2hvdC0+aXNJZ25vcmVkKCkpIHsKLSAgICAgICAgY3JlYXRlTGF5ZXIobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBhbHBoYSwgbW9kZSwgZmxhZ3MsIHByZXZpb3VzRmJvKTsKKyAgICBpZiAoIWN1cnJlbnRTbmFwc2hvdCgpLT5pc0lnbm9yZWQoKSkgeworICAgICAgICBjcmVhdGVMYXllcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGFscGhhLCBtb2RlLCBmbGFncyk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNvdW50OwpAQCAtNzkyLDIyICs3NDQsMjIgQEAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzQW5kQ2xpcChSZWN0JiBib3VuZHMsIFJlY3QmIGNsaXAsIGJvb2wgZmJvTGF5ZXIpIHsKICAgICBjb25zdCBSZWN0IHVudHJhbnNmb3JtZWRCb3VuZHMoYm91bmRzKTsKIAotICAgIGN1cnJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KGJvdW5kcyk7CisgICAgY3VycmVudFRyYW5zZm9ybSgpLT5tYXBSZWN0KGJvdW5kcyk7CiAKICAgICAvLyBMYXllcnMgb25seSBtYWtlIHNlbnNlIGlmIHRoZXkgYXJlIGluIHRoZSBmcmFtZWJ1ZmZlcidzIGJvdW5kcwotICAgIGlmIChib3VuZHMuaW50ZXJzZWN0KCptU25hcHNob3QtPmNsaXBSZWN0KSkgeworICAgIGlmIChib3VuZHMuaW50ZXJzZWN0KCpjdXJyZW50Q2xpcFJlY3QoKSkpIHsKICAgICAgICAgLy8gV2UgY2Fubm90IHdvcmsgd2l0aCBzdWItcGl4ZWxzIGluIHRoaXMgY2FzZQogICAgICAgICBib3VuZHMuc25hcFRvUGl4ZWxCb3VuZGFyaWVzKCk7CiAKICAgICAgICAgLy8gV2hlbiB0aGUgbGF5ZXIgaXMgbm90IGFuIEZCTywgd2UgbWF5IHVzZSBnbENvcHlUZXhJbWFnZSBzbyB3ZQogICAgICAgICAvLyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbGF5ZXIgZG9lcyBub3QgZXh0ZW5kIG91dHNpZGUgdGhlIGJvdW5kcwogICAgICAgICAvLyBvZiB0aGUgZnJhbWVidWZmZXIKLSAgICAgICAgaWYgKCFib3VuZHMuaW50ZXJzZWN0KG1TbmFwc2hvdC0+cHJldmlvdXMtPnZpZXdwb3J0KSkgeworICAgICAgICBpZiAoIWJvdW5kcy5pbnRlcnNlY3QoY3VycmVudFNuYXBzaG90KCktPnByZXZpb3VzLT52aWV3cG9ydCkpIHsKICAgICAgICAgICAgIGJvdW5kcy5zZXRFbXB0eSgpOwogICAgICAgICB9IGVsc2UgaWYgKGZib0xheWVyKSB7CiAgICAgICAgICAgICBjbGlwLnNldChib3VuZHMpOwogICAgICAgICAgICAgbWF0NCBpbnZlcnNlOwotICAgICAgICAgICAgaW52ZXJzZS5sb2FkSW52ZXJzZShjdXJyZW50VHJhbnNmb3JtKCkpOworICAgICAgICAgICAgaW52ZXJzZS5sb2FkSW52ZXJzZSgqY3VycmVudFRyYW5zZm9ybSgpKTsKICAgICAgICAgICAgIGludmVyc2UubWFwUmVjdChjbGlwKTsKICAgICAgICAgICAgIGNsaXAuc25hcFRvUGl4ZWxCb3VuZGFyaWVzKCk7CiAgICAgICAgICAgICBpZiAoY2xpcC5pbnRlcnNlY3QodW50cmFuc2Zvcm1lZEJvdW5kcykpIHsKQEAgLTgzNSwxMCArNzg3LDkgQEAKIAogaW50IE9wZW5HTFJlbmRlcmVyOjpzYXZlTGF5ZXJEZWZlcnJlZChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCiAgICAgICAgIGludCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBpbnQgZmxhZ3MpIHsKLSAgICBjb25zdCBHTHVpbnQgcHJldmlvdXNGYm8gPSBtU25hcHNob3QtPmZibzsKICAgICBjb25zdCBpbnQgY291bnQgPSBzYXZlU25hcHNob3QoZmxhZ3MpOwogCi0gICAgaWYgKCFtU25hcHNob3QtPmlzSWdub3JlZCgpICYmIChmbGFncyAmIFNrQ2FudmFzOjprQ2xpcFRvTGF5ZXJfU2F2ZUZsYWcpKSB7CisgICAgaWYgKCFjdXJyZW50U25hcHNob3QoKS0+aXNJZ25vcmVkKCkgJiYgKGZsYWdzICYgU2tDYW52YXM6OmtDbGlwVG9MYXllcl9TYXZlRmxhZykpIHsKICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgc25hcHNob3QgYXMgdGhvdWdoIGl0IGFsbW9zdCByZXByZXNlbnRzIGFuIEZCTyBsYXllciBzbyBkZWZlcnJlZCBkcmF3CiAgICAgICAgIC8vIG9wZXJhdGlvbnMgd2lsbCBiZSBhYmxlIHRvIHN0b3JlIGFuZCByZXN0b3JlIHRoZSBjdXJyZW50IGNsaXAgYW5kIHRyYW5zZm9ybSBpbmZvLCBhbmQKICAgICAgICAgLy8gcXVpY2sgcmVqZWN0aW9uIHdpbGwgYmUgY29ycmVjdCAoZm9yIGRpc3BsYXkgbGlzdHMpCkBAIC04NDgsNyArNzk5LDcgQEAKICAgICAgICAgY2FsY3VsYXRlTGF5ZXJCb3VuZHNBbmRDbGlwKGJvdW5kcywgY2xpcCwgdHJ1ZSk7CiAgICAgICAgIHVwZGF0ZVNuYXBzaG90SWdub3JlRm9yTGF5ZXIoYm91bmRzLCBjbGlwLCB0cnVlLCBhbHBoYSk7CiAKLSAgICAgICAgaWYgKCFtU25hcHNob3QtPmlzSWdub3JlZCgpKSB7CisgICAgICAgIGlmICghY3VycmVudFNuYXBzaG90KCktPmlzSWdub3JlZCgpKSB7CiAgICAgICAgICAgICBtU25hcHNob3QtPnJlc2V0VHJhbnNmb3JtKC1ib3VuZHMubGVmdCwgLWJvdW5kcy50b3AsIDAuMGYpOwogICAgICAgICAgICAgbVNuYXBzaG90LT5yZXNldENsaXAoY2xpcC5sZWZ0LCBjbGlwLnRvcCwgY2xpcC5yaWdodCwgY2xpcC5ib3R0b20pOwogICAgICAgICAgICAgbVNuYXBzaG90LT52aWV3cG9ydC5zZXQoMC4wZiwgMC4wZiwgYm91bmRzLmdldFdpZHRoKCksIGJvdW5kcy5nZXRIZWlnaHQoKSk7CkBAIC05MTEsNyArODYyLDcgQEAKICAqICAgICBzb21ldGhpbmcgYWN0dWFsbHkgZ2V0cyBkcmF3biBhcmUgdGhlIGxheWVycyByZWdpb25zIGNsZWFyZWQuCiAgKi8KIGJvb2wgT3BlbkdMUmVuZGVyZXI6OmNyZWF0ZUxheWVyKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgaW50IGFscGhhLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUsIGludCBmbGFncywgR0x1aW50IHByZXZpb3VzRmJvKSB7CisgICAgICAgIGludCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBpbnQgZmxhZ3MpIHsKICAgICBMQVlFUl9MT0dEKCJSZXF1ZXN0aW5nIGxheWVyICUuMmZ4JS4yZiIsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTsKICAgICBMQVlFUl9MT0dEKCJMYXllciBjYWNoZSBzaXplID0gJWQiLCBtQ2FjaGVzLmxheWVyQ2FjaGUuZ2V0U2l6ZSgpKTsKIApAQCAtOTI0LDcgKzg3NSw3IEBACiAgICAgdXBkYXRlU25hcHNob3RJZ25vcmVGb3JMYXllcihib3VuZHMsIGNsaXAsIGZib0xheWVyLCBhbHBoYSk7CiAKICAgICAvLyBCYWlsIG91dCBpZiB3ZSB3b24ndCBkcmF3IGluIHRoaXMgc25hcHNob3QKLSAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSkgeworICAgIGlmIChjdXJyZW50U25hcHNob3QoKS0+aXNJZ25vcmVkKCkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtOTQ4LDcgKzg5OSw3IEBACiAKICAgICBzdGFydE1hcmsoIlNhdmVMYXllciIpOwogICAgIGlmIChmYm9MYXllcikgewotICAgICAgICByZXR1cm4gY3JlYXRlRmJvTGF5ZXIobGF5ZXIsIGJvdW5kcywgY2xpcCwgcHJldmlvdXNGYm8pOworICAgICAgICByZXR1cm4gY3JlYXRlRmJvTGF5ZXIobGF5ZXIsIGJvdW5kcywgY2xpcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ29weSB0aGUgZnJhbWVidWZmZXIgaW50byB0aGUgbGF5ZXIKICAgICAgICAgbGF5ZXItPmJpbmRUZXh0dXJlKCk7CkBAIC05NzQsNyArOTI1LDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBPcGVuR0xSZW5kZXJlcjo6Y3JlYXRlRmJvTGF5ZXIoTGF5ZXIqIGxheWVyLCBSZWN0JiBib3VuZHMsIFJlY3QmIGNsaXAsIEdMdWludCBwcmV2aW91c0ZibykgeworYm9vbCBPcGVuR0xSZW5kZXJlcjo6Y3JlYXRlRmJvTGF5ZXIoTGF5ZXIqIGxheWVyLCBSZWN0JiBib3VuZHMsIFJlY3QmIGNsaXApIHsKICAgICBsYXllci0+Y2xpcFJlY3Quc2V0KGNsaXApOwogICAgIGxheWVyLT5zZXRGYm8obUNhY2hlcy5mYm9DYWNoZS5nZXQoKSk7CiAKQEAgLTk4Niw3ICs5MzcsNyBAQAogICAgIG1TbmFwc2hvdC0+cmVzZXRDbGlwKGNsaXAubGVmdCwgY2xpcC50b3AsIGNsaXAucmlnaHQsIGNsaXAuYm90dG9tKTsKICAgICBtU25hcHNob3QtPnZpZXdwb3J0LnNldCgwLjBmLCAwLjBmLCBib3VuZHMuZ2V0V2lkdGgoKSwgYm91bmRzLmdldEhlaWdodCgpKTsKICAgICBtU25hcHNob3QtPmhlaWdodCA9IGJvdW5kcy5nZXRIZWlnaHQoKTsKLSAgICBtU25hcHNob3QtPm9ydGhvTWF0cml4LmxvYWQobU9ydGhvTWF0cml4KTsKKyAgICBtU25hcHNob3QtPm9ydGhvTWF0cml4LmxvYWQobVZpZXdQcm9qTWF0cml4KTsKIAogICAgIGVuZFRpbGluZygpOwogICAgIGRlYnVnT3ZlcmRyYXcoZmFsc2UsIGZhbHNlKTsKQEAgLTEwMDMsNyArOTU0LDcgQEAKICAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwKICAgICAgICAgICAgIGxheWVyLT5nZXRUZXh0dXJlKCksIDApOwogCi0gICAgc3RhcnRUaWxpbmcobVNuYXBzaG90LCB0cnVlKTsKKyAgICBzdGFydFRpbGluZ0N1cnJlbnRDbGlwKHRydWUpOwogCiAgICAgLy8gQ2xlYXIgdGhlIEZCTywgZXhwYW5kIHRoZSBjbGVhciByZWdpb24gYnkgMSB0byBnZXQgbmljZSBiaWxpbmVhciBmaWx0ZXJpbmcKICAgICBtQ2FjaGVzLmVuYWJsZVNjaXNzb3IoKTsKQEAgLTEwMTUsNyArOTY2LDkgQEAKIAogICAgIC8vIENoYW5nZSB0aGUgb3J0aG8gcHJvamVjdGlvbgogICAgIGdsVmlld3BvcnQoMCwgMCwgYm91bmRzLmdldFdpZHRoKCksIGJvdW5kcy5nZXRIZWlnaHQoKSk7Ci0gICAgbU9ydGhvTWF0cml4LmxvYWRPcnRobygwLjBmLCBib3VuZHMuZ2V0V2lkdGgoKSwgYm91bmRzLmdldEhlaWdodCgpLCAwLjBmLCAtMS4wZiwgMS4wZik7CisKKyAgICAvLyBUT0RPOiBkZXRlcm1pbmUgYmVzdCB3YXkgdG8gc3VwcG9ydCAzZCBkcmF3aW5nIHdpdGhpbiBIVyBsYXllcnMKKyAgICBtVmlld1Byb2pNYXRyaXgubG9hZE9ydGhvKDAuMGYsIGJvdW5kcy5nZXRXaWR0aCgpLCBib3VuZHMuZ2V0SGVpZ2h0KCksIDAuMGYsIC0xLjBmLCAxLjBmKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTAyMywxOCArOTc2LDE5IEBACiAvKioKICAqIFJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YgY3JlYXRlTGF5ZXIoKSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgaW4gdGhpcyBtZXRob2QuCiAgKi8KLXZvaWQgT3BlbkdMUmVuZGVyZXI6OmNvbXBvc2VMYXllcihzcDxTbmFwc2hvdD4gY3VycmVudCwgc3A8U25hcHNob3Q+IHByZXZpb3VzKSB7Ci0gICAgaWYgKCFjdXJyZW50LT5sYXllcikgewordm9pZCBPcGVuR0xSZW5kZXJlcjo6Y29tcG9zZUxheWVyKGNvbnN0IFNuYXBzaG90JiByZW1vdmVkLCBjb25zdCBTbmFwc2hvdCYgcmVzdG9yZWQpIHsKKyAgICBpZiAoIXJlbW92ZWQubGF5ZXIpIHsKICAgICAgICAgQUxPR0UoIkF0dGVtcHRpbmcgdG8gY29tcG9zZSBhIGxheWVyIHRoYXQgZG9lcyBub3QgZXhpc3QiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIExheWVyKiBsYXllciA9IGN1cnJlbnQtPmxheWVyOworICAgIExheWVyKiBsYXllciA9IHJlbW92ZWQubGF5ZXI7CiAgICAgY29uc3QgUmVjdCYgcmVjdCA9IGxheWVyLT5sYXllcjsKLSAgICBjb25zdCBib29sIGZib0xheWVyID0gY3VycmVudC0+ZmxhZ3MgJiBTbmFwc2hvdDo6a0ZsYWdJc0Zib0xheWVyOworICAgIGNvbnN0IGJvb2wgZmJvTGF5ZXIgPSByZW1vdmVkLmZsYWdzICYgU25hcHNob3Q6OmtGbGFnSXNGYm9MYXllcjsKIAogICAgIGJvb2wgY2xpcFJlcXVpcmVkID0gZmFsc2U7Ci0gICAgcXVpY2tSZWplY3ROb1NjaXNzb3IocmVjdCwgJmNsaXBSZXF1aXJlZCk7IC8vIHNhZmVseSBpZ25vcmUgcmV0dXJuLCBzaG91bGQgbmV2ZXIgYmUgcmVqZWN0ZWQKKyAgICBjYWxjdWxhdGVRdWlja1JlamVjdEZvclNjaXNzb3IocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20sCisgICAgICAgICAgICAmY2xpcFJlcXVpcmVkLCBmYWxzZSk7IC8vIHNhZmVseSBpZ25vcmUgcmV0dXJuLCBzaG91bGQgbmV2ZXIgYmUgcmVqZWN0ZWQKICAgICBtQ2FjaGVzLnNldFNjaXNzb3JFbmFibGVkKG1TY2lzc29yT3B0aW1pemF0aW9uRGlzYWJsZWQgfHwgY2xpcFJlcXVpcmVkKTsKIAogICAgIGlmIChmYm9MYXllcikgewpAQCAtMTA0NiwxMCArMTAwMCwxMCBAQAogICAgICAgICBsYXllci0+cmVtb3ZlRmJvKGZhbHNlKTsKIAogICAgICAgICAvLyBVbmJpbmQgY3VycmVudCBGQk8gYW5kIHJlc3RvcmUgcHJldmlvdXMgb25lCi0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBwcmV2aW91cy0+ZmJvKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHJlc3RvcmVkLmZibyk7CiAgICAgICAgIGRlYnVnT3ZlcmRyYXcodHJ1ZSwgZmFsc2UpOwogCi0gICAgICAgIHN0YXJ0VGlsaW5nKHByZXZpb3VzKTsKKyAgICAgICAgc3RhcnRUaWxpbmdDdXJyZW50Q2xpcCgpOwogICAgIH0KIAogICAgIGlmICghZmJvTGF5ZXIgJiYgbGF5ZXItPmdldEFscGhhKCkgPCAyNTUpIHsKQEAgLTEwNjYsNyArMTAyMCw3IEBACiAgICAgLy8gV2hlbiB0aGUgbGF5ZXIgaXMgc3RvcmVkIGluIGFuIEZCTywgd2UgY2FuIHNhdmUgYSBiaXQgb2YgZmlsbHJhdGUgYnkKICAgICAvLyBkcmF3aW5nIG9ubHkgdGhlIGRpcnR5IHJlZ2lvbgogICAgIGlmIChmYm9MYXllcikgewotICAgICAgICBkaXJ0eUxheWVyKHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tLCAqcHJldmlvdXMtPnRyYW5zZm9ybSk7CisgICAgICAgIGRpcnR5TGF5ZXIocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20sICpyZXN0b3JlZC50cmFuc2Zvcm0pOwogICAgICAgICBpZiAobGF5ZXItPmdldENvbG9yRmlsdGVyKCkpIHsKICAgICAgICAgICAgIHNldHVwQ29sb3JGaWx0ZXIobGF5ZXItPmdldENvbG9yRmlsdGVyKCkpOwogICAgICAgICB9CkBAIC0xMTE1LDIwICsxMDY5LDIyIEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgc2V0dXBEcmF3RXh0ZXJuYWxUZXh0dXJlKGxheWVyLT5nZXRUZXh0dXJlKCkpOwogICAgIH0KLSAgICBpZiAoY3VycmVudFRyYW5zZm9ybSgpLmlzUHVyZVRyYW5zbGF0ZSgpICYmCisgICAgaWYgKGN1cnJlbnRUcmFuc2Zvcm0oKS0+aXNQdXJlVHJhbnNsYXRlKCkgJiYKICAgICAgICAgICAgIGxheWVyLT5nZXRXaWR0aCgpID09ICh1aW50MzJfdCkgcmVjdC5nZXRXaWR0aCgpICYmCiAgICAgICAgICAgICBsYXllci0+Z2V0SGVpZ2h0KCkgPT0gKHVpbnQzMl90KSByZWN0LmdldEhlaWdodCgpKSB7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHggPSAoaW50KSBmbG9vcmYocmVjdC5sZWZ0ICsgY3VycmVudFRyYW5zZm9ybSgpLmdldFRyYW5zbGF0ZVgoKSArIDAuNWYpOwotICAgICAgICBjb25zdCBmbG9hdCB5ID0gKGludCkgZmxvb3JmKHJlY3QudG9wICsgY3VycmVudFRyYW5zZm9ybSgpLmdldFRyYW5zbGF0ZVkoKSArIDAuNWYpOworICAgICAgICBjb25zdCBmbG9hdCB4ID0gKGludCkgZmxvb3JmKHJlY3QubGVmdCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWCgpICsgMC41Zik7CisgICAgICAgIGNvbnN0IGZsb2F0IHkgPSAoaW50KSBmbG9vcmYocmVjdC50b3AgKyBjdXJyZW50VHJhbnNmb3JtKCktPmdldFRyYW5zbGF0ZVkoKSArIDAuNWYpOwogCiAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXIoR0xfTkVBUkVTVCk7Ci0gICAgICAgIHNldHVwRHJhd01vZGVsVmlldyh4LCB5LCB4ICsgcmVjdC5nZXRXaWR0aCgpLCB5ICsgcmVjdC5nZXRIZWlnaHQoKSwgdHJ1ZSk7CisgICAgICAgIHNldHVwRHJhd01vZGVsVmlldyhrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGVBbmRTY2FsZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgeCwgeSwgeCArIHJlY3QuZ2V0V2lkdGgoKSwgeSArIHJlY3QuZ2V0SGVpZ2h0KCksIHRydWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXIoR0xfTElORUFSKTsKLSAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3KHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKTsKKyAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3KGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSk7CiAgICAgfQogICAgIHNldHVwRHJhd1RleHR1cmVUcmFuc2Zvcm1Vbmlmb3JtcyhsYXllci0+Z2V0VGV4VHJhbnNmb3JtKCkpOwotICAgIHNldHVwRHJhd01lc2goJm1NZXNoVmVydGljZXNbMF0ucG9zaXRpb25bMF0sICZtTWVzaFZlcnRpY2VzWzBdLnRleHR1cmVbMF0pOworICAgIHNldHVwRHJhd01lc2goJm1NZXNoVmVydGljZXNbMF0ueCwgJm1NZXNoVmVydGljZXNbMF0udSk7CiAKICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfU1RSSVAsIDAsIGdNZXNoQ291bnQpOwogfQpAQCAtMTE0MSwxNSArMTA5NywxNSBAQAogCiAgICAgICAgIGZsb2F0IHggPSByZWN0LmxlZnQ7CiAgICAgICAgIGZsb2F0IHkgPSByZWN0LnRvcDsKLSAgICAgICAgYm9vbCBzaW1wbGVUcmFuc2Zvcm0gPSBjdXJyZW50VHJhbnNmb3JtKCkuaXNQdXJlVHJhbnNsYXRlKCkgJiYKKyAgICAgICAgYm9vbCBzaW1wbGVUcmFuc2Zvcm0gPSBjdXJyZW50VHJhbnNmb3JtKCktPmlzUHVyZVRyYW5zbGF0ZSgpICYmCiAgICAgICAgICAgICAgICAgbGF5ZXItPmdldFdpZHRoKCkgPT0gKHVpbnQzMl90KSByZWN0LmdldFdpZHRoKCkgJiYKICAgICAgICAgICAgICAgICBsYXllci0+Z2V0SGVpZ2h0KCkgPT0gKHVpbnQzMl90KSByZWN0LmdldEhlaWdodCgpOwogCiAgICAgICAgIGlmIChzaW1wbGVUcmFuc2Zvcm0pIHsKICAgICAgICAgICAgIC8vIFdoZW4gd2UncmUgc3dhcHBpbmcsIHRoZSBsYXllciBpcyBhbHJlYWR5IGluIHNjcmVlbiBjb29yZGluYXRlcwogICAgICAgICAgICAgaWYgKCFzd2FwKSB7Ci0gICAgICAgICAgICAgICAgeCA9IChpbnQpIGZsb29yZihyZWN0LmxlZnQgKyBjdXJyZW50VHJhbnNmb3JtKCkuZ2V0VHJhbnNsYXRlWCgpICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgeSA9IChpbnQpIGZsb29yZihyZWN0LnRvcCArIGN1cnJlbnRUcmFuc2Zvcm0oKS5nZXRUcmFuc2xhdGVZKCkgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICB4ID0gKGludCkgZmxvb3JmKHJlY3QubGVmdCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWCgpICsgMC41Zik7CisgICAgICAgICAgICAgICAgeSA9IChpbnQpIGZsb29yZihyZWN0LnRvcCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWSgpICsgMC41Zik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXIoR0xfTkVBUkVTVCwgdHJ1ZSk7CkBAIC0xMTYxLDcgKzExMTcsNyBAQAogICAgICAgICBib29sIGJsZW5kID0gbGF5ZXItPmlzQmxlbmQoKSB8fCBhbHBoYSA8IDEuMGY7CiAgICAgICAgIGRyYXdUZXh0dXJlTWVzaCh4LCB5LCB4ICsgcmVjdC5nZXRXaWR0aCgpLCB5ICsgcmVjdC5nZXRIZWlnaHQoKSwKICAgICAgICAgICAgICAgICBsYXllci0+Z2V0VGV4dHVyZSgpLCBhbHBoYSwgbGF5ZXItPmdldE1vZGUoKSwgYmxlbmQsCi0gICAgICAgICAgICAgICAgJm1NZXNoVmVydGljZXNbMF0ucG9zaXRpb25bMF0sICZtTWVzaFZlcnRpY2VzWzBdLnRleHR1cmVbMF0sCisgICAgICAgICAgICAgICAgJm1NZXNoVmVydGljZXNbMF0ueCwgJm1NZXNoVmVydGljZXNbMF0udSwKICAgICAgICAgICAgICAgICBHTF9UUklBTkdMRV9TVFJJUCwgZ01lc2hDb3VudCwgc3dhcCwgc3dhcCB8fCBzaW1wbGVUcmFuc2Zvcm0pOwogCiAgICAgICAgIHJlc2V0RHJhd1RleHR1cmVUZXhDb29yZHMoMC4wZiwgMC4wZiwgMS4wZiwgMS4wZik7CkBAIC0xMjMyLDE3ICsxMTg4LDE5IEBACiAgICAgICAgIHNldHVwRHJhd1B1cmVDb2xvclVuaWZvcm1zKCk7CiAgICAgICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyVW5pZm9ybXMoKTsKICAgICAgICAgc2V0dXBEcmF3VGV4dHVyZShsYXllci0+Z2V0VGV4dHVyZSgpKTsKLSAgICAgICAgaWYgKGN1cnJlbnRUcmFuc2Zvcm0oKS5pc1B1cmVUcmFuc2xhdGUoKSkgewotICAgICAgICAgICAgY29uc3QgZmxvYXQgeCA9IChpbnQpIGZsb29yZihyZWN0LmxlZnQgKyBjdXJyZW50VHJhbnNmb3JtKCkuZ2V0VHJhbnNsYXRlWCgpICsgMC41Zik7Ci0gICAgICAgICAgICBjb25zdCBmbG9hdCB5ID0gKGludCkgZmxvb3JmKHJlY3QudG9wICsgY3VycmVudFRyYW5zZm9ybSgpLmdldFRyYW5zbGF0ZVkoKSArIDAuNWYpOworICAgICAgICBpZiAoY3VycmVudFRyYW5zZm9ybSgpLT5pc1B1cmVUcmFuc2xhdGUoKSkgeworICAgICAgICAgICAgY29uc3QgZmxvYXQgeCA9IChpbnQpIGZsb29yZihyZWN0LmxlZnQgKyBjdXJyZW50VHJhbnNmb3JtKCktPmdldFRyYW5zbGF0ZVgoKSArIDAuNWYpOworICAgICAgICAgICAgY29uc3QgZmxvYXQgeSA9IChpbnQpIGZsb29yZihyZWN0LnRvcCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWSgpICsgMC41Zik7CiAKICAgICAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXIoR0xfTkVBUkVTVCk7Ci0gICAgICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXdUcmFuc2xhdGUoeCwgeSwgeCArIHJlY3QuZ2V0V2lkdGgoKSwgeSArIHJlY3QuZ2V0SGVpZ2h0KCksIHRydWUpOworICAgICAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3KGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHgsIHksIHggKyByZWN0LmdldFdpZHRoKCksIHkgKyByZWN0LmdldEhlaWdodCgpLCB0cnVlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXIoR0xfTElORUFSKTsKLSAgICAgICAgICAgIHNldHVwRHJhd01vZGVsVmlld1RyYW5zbGF0ZShyZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSk7CisgICAgICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXcoa01vZGVsVmlld01vZGVfVHJhbnNsYXRlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20pOwogICAgICAgICB9Ci0gICAgICAgIHNldHVwRHJhd01lc2hJbmRpY2VzKCZtZXNoWzBdLnBvc2l0aW9uWzBdLCAmbWVzaFswXS50ZXh0dXJlWzBdKTsKKyAgICAgICAgc2V0dXBEcmF3TWVzaEluZGljZXMoJm1lc2hbMF0ueCwgJm1lc2hbMF0udSk7CiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBjb25zdCBhbmRyb2lkOjpSZWN0KiByID0gJnJlY3RzW2ldOwpAQCAtMTI3NCwxNSArMTIzMiwxNSBAQAogICAgICAgICB9CiAKICNpZiBERUJVR19MQVlFUlNfQVNfUkVHSU9OUwotICAgICAgICBkcmF3UmVnaW9uUmVjdHMobGF5ZXItPnJlZ2lvbik7CisgICAgICAgIGRyYXdSZWdpb25SZWN0c0RlYnVnKGxheWVyLT5yZWdpb24pOwogI2VuZGlmCiAKICAgICAgICAgbGF5ZXItPnJlZ2lvbi5jbGVhcigpOwogICAgIH0KIH0KIAotdm9pZCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1JlZ2lvblJlY3RzKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKSB7CiAjaWYgREVCVUdfTEFZRVJTX0FTX1JFR0lPTlMKK3ZvaWQgT3BlbkdMUmVuZGVyZXI6OmRyYXdSZWdpb25SZWN0c0RlYnVnKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKSB7CiAgICAgc2l6ZV90IGNvdW50OwogICAgIGNvbnN0IGFuZHJvaWQ6OlJlY3QqIHJlY3RzID0gcmVnaW9uLmdldEFycmF5KCZjb3VudCk7CiAKQEAgLTEzMDQsOCArMTI2Miw4IEBACiAgICAgICAgIGRyYXdDb2xvclJlY3Qoci5sZWZ0LCByLnRvcCwgci5yaWdodCwgci5ib3R0b20sIGNvbG9yc1tvZmZzZXQgKyAoaSAmIDB4MSldLAogICAgICAgICAgICAgICAgIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpOwogICAgIH0KLSNlbmRpZgogfQorI2VuZGlmCiAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OmRyYXdSZWdpb25SZWN0cyhjb25zdCBTa1JlZ2lvbiYgcmVnaW9uLCBpbnQgY29sb3IsCiAgICAgICAgIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwgYm9vbCBkaXJ0eSkgewpAQCAtMTM0Miw3ICsxMzAwLDcgQEAKIH0KIAogdm9pZCBPcGVuR0xSZW5kZXJlcjo6ZGlydHlMYXllclVuY2hlY2tlZChSZWN0JiBib3VuZHMsIFJlZ2lvbiogcmVnaW9uKSB7Ci0gICAgaWYgKGJvdW5kcy5pbnRlcnNlY3QoKm1TbmFwc2hvdC0+Y2xpcFJlY3QpKSB7CisgICAgaWYgKGJvdW5kcy5pbnRlcnNlY3QoKmN1cnJlbnRDbGlwUmVjdCgpKSkgewogICAgICAgICBib3VuZHMuc25hcFRvUGl4ZWxCb3VuZGFyaWVzKCk7CiAgICAgICAgIGFuZHJvaWQ6OlJlY3QgZGlydHkoYm91bmRzLmxlZnQsIGJvdW5kcy50b3AsIGJvdW5kcy5yaWdodCwgYm91bmRzLmJvdHRvbSk7CiAgICAgICAgIGlmICghZGlydHkuaXNFbXB0eSgpKSB7CkBAIC0xMzUxLDEyICsxMzA5LDEyIEBACiAgICAgfQogfQogCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpkcmF3SW5kZXhlZFF1YWRzKFZlcnRleCogbWVzaCwgR0xzaXplaSBxdWFkc0NvdW50KSB7Cit2b2lkIE9wZW5HTFJlbmRlcmVyOjppc3N1ZUluZGV4ZWRRdWFkRHJhdyhWZXJ0ZXgqIG1lc2gsIEdMc2l6ZWkgcXVhZHNDb3VudCkgewogICAgIEdMc2l6ZWkgZWxlbWVudHNDb3VudCA9IHF1YWRzQ291bnQgKiA2OwogICAgIHdoaWxlIChlbGVtZW50c0NvdW50ID4gMCkgewogICAgICAgICBHTHNpemVpIGRyYXdDb3VudCA9IG1pbihlbGVtZW50c0NvdW50LCAoR0xzaXplaSkgZ01heE51bWJlck9mUXVhZHMgKiA2KTsKIAotICAgICAgICBzZXR1cERyYXdJbmRleGVkVmVydGljZXMoJm1lc2hbMF0ucG9zaXRpb25bMF0pOworICAgICAgICBzZXR1cERyYXdJbmRleGVkVmVydGljZXMoJm1lc2hbMF0ueCk7CiAgICAgICAgIGdsRHJhd0VsZW1lbnRzKEdMX1RSSUFOR0xFUywgZHJhd0NvdW50LCBHTF9VTlNJR05FRF9TSE9SVCwgTlVMTCk7CiAKICAgICAgICAgZWxlbWVudHNDb3VudCAtPSBkcmF3Q291bnQ7CkBAIC0xMzcwLDcgKzEzMjgsNyBAQAogICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IG1MYXllcnMuc2l6ZSgpOwogICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm47CiAKLSAgICBpZiAoIW1TbmFwc2hvdC0+aXNJZ25vcmVkKCkpIHsKKyAgICBpZiAoIWN1cnJlbnRTbmFwc2hvdCgpLT5pc0lnbm9yZWQoKSkgewogICAgICAgICAvLyBEb2luZyBzZXZlcmFsIGdsU2Npc3Nvci9nbENsZWFyIGhlcmUgY2FuIG5lZ2F0aXZlbHkgaW1wYWN0CiAgICAgICAgIC8vIEdQVXMgd2l0aCBhIHRpbGVyIGFyY2hpdGVjdHVyZSwgaW5zdGVhZCB3ZSBkcmF3IHF1YWRzIHdpdGgKICAgICAgICAgLy8gdGhlIENsZWFyIGJsZW5kaW5nIG1vZGUKQEAgLTE0MDMsOSArMTM2MSwxMCBAQAogICAgICAgICBzZXR1cERyYXdCbGVuZGluZyh0cnVlLCBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZSk7CiAgICAgICAgIHNldHVwRHJhd1Byb2dyYW0oKTsKICAgICAgICAgc2V0dXBEcmF3UHVyZUNvbG9yVW5pZm9ybXMoKTsKLSAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3VHJhbnNsYXRlKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYsIHRydWUpOworICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXcoa01vZGVsVmlld01vZGVfVHJhbnNsYXRlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAwLjBmLCAwLjBmLCAwLjBmLCAwLjBmLCB0cnVlKTsKIAotICAgICAgICBkcmF3SW5kZXhlZFF1YWRzKCZtZXNoWzBdLCBjb3VudCk7CisgICAgICAgIGlzc3VlSW5kZXhlZFF1YWREcmF3KCZtZXNoWzBdLCBjb3VudCk7CiAKICAgICAgICAgaWYgKHNjaXNzb3JDaGFuZ2VkKSBtQ2FjaGVzLmVuYWJsZVNjaXNzb3IoKTsKICAgICB9IGVsc2UgewpAQCAtMTQyMSw1OCArMTM4MCw1OCBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiBib29sIE9wZW5HTFJlbmRlcmVyOjpzdG9yZURpc3BsYXlTdGF0ZShEZWZlcnJlZERpc3BsYXlTdGF0ZSYgc3RhdGUsIGludCBzdGF0ZURlZmVyRmxhZ3MpIHsKLSAgICBjb25zdCBSZWN0JiBjdXJyZW50Q2xpcCA9ICoobVNuYXBzaG90LT5jbGlwUmVjdCk7Ci0gICAgY29uc3QgbWF0NCYgY3VycmVudE1hdHJpeCA9ICoobVNuYXBzaG90LT50cmFuc2Zvcm0pOworICAgIGNvbnN0IFJlY3QqIGN1cnJlbnRDbGlwID0gY3VycmVudENsaXBSZWN0KCk7CisgICAgY29uc3QgbWF0NCogY3VycmVudE1hdHJpeCA9IGN1cnJlbnRUcmFuc2Zvcm0oKTsKIAogICAgIGlmIChzdGF0ZURlZmVyRmxhZ3MgJiBrU3RhdGVEZWZlckZsYWdfRHJhdykgewogICAgICAgICAvLyBzdGF0ZSBoYXMgYm91bmRzIGluaXRpYWxpemVkIGluIGxvY2FsIGNvb3JkaW5hdGVzCiAgICAgICAgIGlmICghc3RhdGUubUJvdW5kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGN1cnJlbnRNYXRyaXgubWFwUmVjdChzdGF0ZS5tQm91bmRzKTsKKyAgICAgICAgICAgIGN1cnJlbnRNYXRyaXgtPm1hcFJlY3Qoc3RhdGUubUJvdW5kcyk7CiAgICAgICAgICAgICBSZWN0IGNsaXBwZWRCb3VuZHMoc3RhdGUubUJvdW5kcyk7CiAgICAgICAgICAgICAvLyBOT1RFOiBpZiB3ZSBldmVyIHdhbnQgdG8gdXNlIHRoaXMgY2xpcHBpbmcgaW5mbyB0byBkcml2ZSB3aGV0aGVyIHRoZSBzY2lzc29yCiAgICAgICAgICAgICAvLyBpcyB1c2VkLCBpdCBzaG91bGQgbW9yZSBjbG9zZWx5IGR1cGxpY2F0ZSB0aGUgcXVpY2tSZWplY3QgbG9naWMgKGluIGhvdyBpdCB1c2VzCiAgICAgICAgICAgICAvLyBzbmFwVG9QaXhlbEJvdW5kYXJpZXMpCiAKLSAgICAgICAgICAgIGlmKCFjbGlwcGVkQm91bmRzLmludGVyc2VjdChjdXJyZW50Q2xpcCkpIHsKKyAgICAgICAgICAgIGlmKCFjbGlwcGVkQm91bmRzLmludGVyc2VjdCgqY3VycmVudENsaXApKSB7CiAgICAgICAgICAgICAgICAgLy8gcXVpY2sgcmVqZWN0ZWQKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhdGUubUNsaXBTaWRlRmxhZ3MgPSBrQ2xpcFNpZGVfTm9uZTsKLSAgICAgICAgICAgIGlmICghY3VycmVudENsaXAuY29udGFpbnMoc3RhdGUubUJvdW5kcykpIHsKKyAgICAgICAgICAgIGlmICghY3VycmVudENsaXAtPmNvbnRhaW5zKHN0YXRlLm1Cb3VuZHMpKSB7CiAgICAgICAgICAgICAgICAgaW50JiBmbGFncyA9IHN0YXRlLm1DbGlwU2lkZUZsYWdzOwogICAgICAgICAgICAgICAgIC8vIG9wIHBhcnRpYWxseSBjbGlwcGVkLCBzbyByZWNvcmQgd2hpY2ggc2lkZXMgYXJlIGNsaXBwZWQgZm9yIGNsaXAtYXdhcmUgbWVyZ2luZwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q2xpcC5sZWZ0ID4gc3RhdGUubUJvdW5kcy5sZWZ0KSBmbGFncyB8PSBrQ2xpcFNpZGVfTGVmdDsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudENsaXAudG9wID4gc3RhdGUubUJvdW5kcy50b3ApIGZsYWdzIHw9IGtDbGlwU2lkZV9Ub3A7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDbGlwLnJpZ2h0IDwgc3RhdGUubUJvdW5kcy5yaWdodCkgZmxhZ3MgfD0ga0NsaXBTaWRlX1JpZ2h0OwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q2xpcC5ib3R0b20gPCBzdGF0ZS5tQm91bmRzLmJvdHRvbSkgZmxhZ3MgfD0ga0NsaXBTaWRlX0JvdHRvbTsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudENsaXAtPmxlZnQgPiBzdGF0ZS5tQm91bmRzLmxlZnQpIGZsYWdzIHw9IGtDbGlwU2lkZV9MZWZ0OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q2xpcC0+dG9wID4gc3RhdGUubUJvdW5kcy50b3ApIGZsYWdzIHw9IGtDbGlwU2lkZV9Ub3A7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDbGlwLT5yaWdodCA8IHN0YXRlLm1Cb3VuZHMucmlnaHQpIGZsYWdzIHw9IGtDbGlwU2lkZV9SaWdodDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudENsaXAtPmJvdHRvbSA8IHN0YXRlLm1Cb3VuZHMuYm90dG9tKSBmbGFncyB8PSBrQ2xpcFNpZGVfQm90dG9tOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RhdGUubUJvdW5kcy5zZXQoY2xpcHBlZEJvdW5kcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBFbXB0eSBib3VuZHMgaW1wbGllcyBzaXplIHVua25vd24uIExhYmVsIG9wIGFzIGNvbnNlcnZhdGl2ZWx5IGNsaXBwZWQgdG8gZGlzYWJsZQogICAgICAgICAgICAgLy8gb3ZlcmRyYXcgYXZvaWRhbmNlIChzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgaXQgb3ZlcmxhcHMpCiAgICAgICAgICAgICBzdGF0ZS5tQ2xpcFNpZGVGbGFncyA9IGtDbGlwU2lkZV9Db25zZXJ2YXRpdmVGdWxsOwotICAgICAgICAgICAgc3RhdGUubUJvdW5kcy5zZXQoY3VycmVudENsaXApOworICAgICAgICAgICAgc3RhdGUubUJvdW5kcy5zZXQoKmN1cnJlbnRDbGlwKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRlLm1DbGlwVmFsaWQgPSAoc3RhdGVEZWZlckZsYWdzICYga1N0YXRlRGVmZXJGbGFnX0NsaXApOwogICAgIGlmIChzdGF0ZS5tQ2xpcFZhbGlkKSB7Ci0gICAgICAgIHN0YXRlLm1DbGlwLnNldChjdXJyZW50Q2xpcCk7CisgICAgICAgIHN0YXRlLm1DbGlwLnNldCgqY3VycmVudENsaXApOwogICAgIH0KIAogICAgIC8vIFRyYW5zZm9ybSwgZHJhd01vZGlmaWVycywgYW5kIGFscGhhIGFsd2F5cyBkZWZlcnJlZCwgc2luY2UgdGhleSBhcmUgdXNlZCBieSBzdGF0ZSBvcGVyYXRpb25zCiAgICAgLy8gKE5vdGU6IHNhdmVMYXllci9yZXN0b3JlIHVzZSBjb2xvckZpbHRlciBhbmQgYWxwaGEsIHNvIHdlIGp1c3Qgc2F2ZSByZXN0b3JlIGV2ZXJ5dGhpbmcpCi0gICAgc3RhdGUubU1hdHJpeC5sb2FkKGN1cnJlbnRNYXRyaXgpOworICAgIHN0YXRlLm1NYXRyaXgubG9hZCgqY3VycmVudE1hdHJpeCk7CiAgICAgc3RhdGUubURyYXdNb2RpZmllcnMgPSBtRHJhd01vZGlmaWVyczsKLSAgICBzdGF0ZS5tQWxwaGEgPSBtU25hcHNob3QtPmFscGhhOworICAgIHN0YXRlLm1BbHBoYSA9IGN1cnJlbnRTbmFwc2hvdCgpLT5hbHBoYTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OnJlc3RvcmVEaXNwbGF5U3RhdGUoY29uc3QgRGVmZXJyZWREaXNwbGF5U3RhdGUmIHN0YXRlLCBib29sIHNraXBDbGlwUmVzdG9yZSkgewotICAgIGN1cnJlbnRUcmFuc2Zvcm0oKS5sb2FkKHN0YXRlLm1NYXRyaXgpOwotICAgIG1EcmF3TW9kaWZpZXJzID0gc3RhdGUubURyYXdNb2RpZmllcnM7CisgICAgc2V0TWF0cml4KHN0YXRlLm1NYXRyaXgpOwogICAgIG1TbmFwc2hvdC0+YWxwaGEgPSBzdGF0ZS5tQWxwaGE7CisgICAgbURyYXdNb2RpZmllcnMgPSBzdGF0ZS5tRHJhd01vZGlmaWVyczsKIAogICAgIGlmIChzdGF0ZS5tQ2xpcFZhbGlkICYmICFza2lwQ2xpcFJlc3RvcmUpIHsKICAgICAgICAgbVNuYXBzaG90LT5zZXRDbGlwKHN0YXRlLm1DbGlwLmxlZnQsIHN0YXRlLm1DbGlwLnRvcCwKQEAgLTE0OTIsNjQgKzE0NTEsMjEgQEAKICAgICBpZiAoY2xpcFJlY3QgIT0gTlVMTCkgewogICAgICAgICBtU25hcHNob3QtPnNldENsaXAoY2xpcFJlY3QtPmxlZnQsIGNsaXBSZWN0LT50b3AsIGNsaXBSZWN0LT5yaWdodCwgY2xpcFJlY3QtPmJvdHRvbSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbVNuYXBzaG90LT5zZXRDbGlwKDAsIDAsIG1XaWR0aCwgbUhlaWdodCk7CisgICAgICAgIG1TbmFwc2hvdC0+c2V0Q2xpcCgwLCAwLCBnZXRXaWR0aCgpLCBnZXRIZWlnaHQoKSk7CiAgICAgfQogICAgIGRpcnR5Q2xpcCgpOwogICAgIG1DYWNoZXMuc2V0U2Npc3NvckVuYWJsZWQoY2xpcFJlY3QgIT0gTlVMTCB8fCBtU2Npc3Nvck9wdGltaXphdGlvbkRpc2FibGVkKTsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gVHJhbnNmb3JtcwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi12b2lkIE9wZW5HTFJlbmRlcmVyOjp0cmFuc2xhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgY3VycmVudFRyYW5zZm9ybSgpLnRyYW5zbGF0ZShkeCwgZHkpOwotfQotCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpyb3RhdGUoZmxvYXQgZGVncmVlcykgewotICAgIGN1cnJlbnRUcmFuc2Zvcm0oKS5yb3RhdGUoZGVncmVlcywgMC4wZiwgMC4wZiwgMS4wZik7Ci19Ci0KLXZvaWQgT3BlbkdMUmVuZGVyZXI6OnNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkgewotICAgIGN1cnJlbnRUcmFuc2Zvcm0oKS5zY2FsZShzeCwgc3ksIDEuMGYpOwotfQotCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpza2V3KGZsb2F0IHN4LCBmbG9hdCBzeSkgewotICAgIGN1cnJlbnRUcmFuc2Zvcm0oKS5za2V3KHN4LCBzeSk7Ci19Ci0KLXZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldE1hdHJpeChTa01hdHJpeCogbWF0cml4KSB7Ci0gICAgaWYgKG1hdHJpeCkgewotICAgICAgICBjdXJyZW50VHJhbnNmb3JtKCkubG9hZCgqbWF0cml4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBjdXJyZW50VHJhbnNmb3JtKCkubG9hZElkZW50aXR5KCk7Ci0gICAgfQotfQotCi1ib29sIE9wZW5HTFJlbmRlcmVyOjpoYXNSZWN0VG9SZWN0VHJhbnNmb3JtKCkgewotICAgIHJldHVybiBDQ19MSUtFTFkoY3VycmVudFRyYW5zZm9ybSgpLnJlY3RUb1JlY3QoKSk7Ci19Ci0KLXZvaWQgT3BlbkdMUmVuZGVyZXI6OmdldE1hdHJpeChTa01hdHJpeCogbWF0cml4KSB7Ci0gICAgY3VycmVudFRyYW5zZm9ybSgpLmNvcHlUbygqbWF0cml4KTsKLX0KLQotdm9pZCBPcGVuR0xSZW5kZXJlcjo6Y29uY2F0TWF0cml4KFNrTWF0cml4KiBtYXRyaXgpIHsKLSAgICBTa01hdHJpeCB0cmFuc2Zvcm07Ci0gICAgY3VycmVudFRyYW5zZm9ybSgpLmNvcHlUbyh0cmFuc2Zvcm0pOwotICAgIHRyYW5zZm9ybS5wcmVDb25jYXQoKm1hdHJpeCk7Ci0gICAgY3VycmVudFRyYW5zZm9ybSgpLmxvYWQodHJhbnNmb3JtKTsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gQ2xpcHBpbmcKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogdm9pZCBPcGVuR0xSZW5kZXJlcjo6c2V0U2Npc3NvckZyb21DbGlwKCkgewotICAgIFJlY3QgY2xpcCgqbVNuYXBzaG90LT5jbGlwUmVjdCk7CisgICAgUmVjdCBjbGlwKCpjdXJyZW50Q2xpcFJlY3QoKSk7CiAgICAgY2xpcC5zbmFwVG9QaXhlbEJvdW5kYXJpZXMoKTsKIAotICAgIGlmIChtQ2FjaGVzLnNldFNjaXNzb3IoY2xpcC5sZWZ0LCBtU25hcHNob3QtPmhlaWdodCAtIGNsaXAuYm90dG9tLAorICAgIGlmIChtQ2FjaGVzLnNldFNjaXNzb3IoY2xpcC5sZWZ0LCBjdXJyZW50U25hcHNob3QoKS0+aGVpZ2h0IC0gY2xpcC5ib3R0b20sCiAgICAgICAgICAgICBjbGlwLmdldFdpZHRoKCksIGNsaXAuZ2V0SGVpZ2h0KCkpKSB7CiAgICAgICAgIG1EaXJ0eUNsaXAgPSBmYWxzZTsKICAgICB9CkBAIC0xNTYwLDcgKzE0NzYsNyBAQAogICAgIC8vIGNhbm5vdCBhdHRhY2ggYSBzdGVuY2lsIGJ1ZmZlciB0byBmYm8wIGR5bmFtaWNhbGx5LiBMZXQncwogICAgIC8vIGp1c3QgaG9wZSB3ZSBoYXZlIG9uZSB3aGVuIGhhc0xheWVyKCkgcmV0dXJucyBmYWxzZS4KICAgICBpZiAoaGFzTGF5ZXIoKSkgewotICAgICAgICBhdHRhY2hTdGVuY2lsQnVmZmVyVG9MYXllcihtU25hcHNob3QtPmxheWVyKTsKKyAgICAgICAgYXR0YWNoU3RlbmNpbEJ1ZmZlclRvTGF5ZXIoY3VycmVudFNuYXBzaG90KCktPmxheWVyKTsKICAgICB9CiB9CiAKQEAgLTE1ODIsNyArMTQ5OCw3IEBACiAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldFN0ZW5jaWxGcm9tQ2xpcCgpIHsKICAgICBpZiAoIW1DYWNoZXMuZGVidWdPdmVyZHJhdykgewotICAgICAgICBpZiAoIW1TbmFwc2hvdC0+Y2xpcFJlZ2lvbi0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghY3VycmVudFNuYXBzaG90KCktPmNsaXBSZWdpb24tPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gTk9URTogVGhlIG9yZGVyIGhlcmUgaXMgaW1wb3J0YW50LCB3ZSBtdXN0IHNldCBkaXJ0eUNsaXAgdG8gZmFsc2UKICAgICAgICAgICAgIC8vICAgICAgIGJlZm9yZSBhbnkgZHJhdyBjYWxsIHRvIGF2b2lkIGNhbGxpbmcgYmFjayBpbnRvIHRoaXMgbWV0aG9kCiAgICAgICAgICAgICBtRGlydHlDbGlwID0gZmFsc2U7CkBAIC0xNjA3LDE0ICsxNTIzLDE2IEBACiAKICAgICAgICAgICAgIC8vIFRoZSBsYXN0IHBhcmFtZXRlciBpcyBpbXBvcnRhbnQ6IHdlIGFyZSBub3QgZHJhd2luZyBpbiB0aGUgY29sb3IgYnVmZmVyCiAgICAgICAgICAgICAvLyBzbyB3ZSBkb24ndCB3YW50IHRvIGRpcnR5IHRoZSBjdXJyZW50IGxheWVyLCBpZiBhbnkKLSAgICAgICAgICAgIGRyYXdSZWdpb25SZWN0cygqbVNuYXBzaG90LT5jbGlwUmVnaW9uLCAweGZmMDAwMDAwLCBTa1hmZXJtb2RlOjprU3JjX01vZGUsIGZhbHNlKTsKKyAgICAgICAgICAgIGRyYXdSZWdpb25SZWN0cygqKGN1cnJlbnRTbmFwc2hvdCgpLT5jbGlwUmVnaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMCwgU2tYZmVybW9kZTo6a1NyY19Nb2RlLCBmYWxzZSk7CiAKICAgICAgICAgICAgIG1DYWNoZXMuc3RlbmNpbC5lbmFibGVUZXN0KCk7CiAKICAgICAgICAgICAgIC8vIERyYXcgdGhlIHJlZ2lvbiB1c2VkIHRvIGdlbmVyYXRlIHRoZSBzdGVuY2lsIGlmIHRoZSBhcHByb3ByaWF0ZSBkZWJ1ZwogICAgICAgICAgICAgLy8gbW9kZSBpcyBlbmFibGVkCiAgICAgICAgICAgICBpZiAobUNhY2hlcy5kZWJ1Z1N0ZW5jaWxDbGlwID09IENhY2hlczo6a1N0ZW5jaWxTaG93UmVnaW9uKSB7Ci0gICAgICAgICAgICAgICAgZHJhd1JlZ2lvblJlY3RzKCptU25hcHNob3QtPmNsaXBSZWdpb24sIDB4N2YwMDAwZmYsIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpOworICAgICAgICAgICAgICAgIGRyYXdSZWdpb25SZWN0cygqKGN1cnJlbnRTbmFwc2hvdCgpLT5jbGlwUmVnaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwZmYsIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbUNhY2hlcy5zdGVuY2lsLmRpc2FibGUoKTsKQEAgLTE2MjIsNTAgKzE1NDAsMzEgQEAKICAgICB9CiB9CiAKLWNvbnN0IFJlY3QmIE9wZW5HTFJlbmRlcmVyOjpnZXRDbGlwQm91bmRzKCkgewotICAgIHJldHVybiBtU25hcHNob3QtPmdldExvY2FsQ2xpcCgpOwotfQotCi1ib29sIE9wZW5HTFJlbmRlcmVyOjpxdWlja1JlamVjdE5vU2Npc3NvcihmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgIGJvb2wgc25hcE91dCwgYm9vbCogY2xpcFJlcXVpcmVkKSB7Ci0gICAgaWYgKG1TbmFwc2hvdC0+aXNJZ25vcmVkKCkgfHwgYm90dG9tIDw9IHRvcCB8fCByaWdodCA8PSBsZWZ0KSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIFJlY3QgcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIGN1cnJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHIpOwotICAgIHIuc25hcEdlb21ldHJ5VG9QaXhlbEJvdW5kYXJpZXMoc25hcE91dCk7Ci0KLSAgICBSZWN0IGNsaXBSZWN0KCptU25hcHNob3QtPmNsaXBSZWN0KTsKLSAgICBjbGlwUmVjdC5zbmFwVG9QaXhlbEJvdW5kYXJpZXMoKTsKLQotICAgIGlmICghY2xpcFJlY3QuaW50ZXJzZWN0cyhyKSkgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoY2xpcFJlcXVpcmVkKSAqY2xpcFJlcXVpcmVkID0gIWNsaXBSZWN0LmNvbnRhaW5zKHIpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBPcGVuR0xSZW5kZXJlcjo6cXVpY2tSZWplY3RQcmVTdHJva2UoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICBTa1BhaW50KiBwYWludCkgewotICAgIC8vIEFBIGdlb21ldHJ5IHdpbGwgbGlrZWx5IGhhdmUgYSByYW1wIGFyb3VuZCBpdCAobm90IGFjY291bnRlZCBmb3IgaW4gbG9jYWwgYm91bmRzKS4gU25hcCBvdXQKLSAgICAvLyB0aGUgZmluYWwgbWFwcGVkIHJlY3QgdG8gZW5zdXJlIGNvcnJlY3QgY2xpcHBpbmcgYmVoYXZpb3IgZm9yIHRoZSByYW1wLgotICAgIGJvb2wgc25hcE91dCA9IHBhaW50LT5pc0FudGlBbGlhcygpOwotCi0gICAgaWYgKHBhaW50LT5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxlKSB7Ci0gICAgICAgIGZsb2F0IG91dHNldCA9IHBhaW50LT5nZXRTdHJva2VXaWR0aCgpICogMC41ZjsKLSAgICAgICAgcmV0dXJuIHF1aWNrUmVqZWN0KGxlZnQgLSBvdXRzZXQsIHRvcCAtIG91dHNldCwgcmlnaHQgKyBvdXRzZXQsIGJvdHRvbSArIG91dHNldCwgc25hcE91dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHF1aWNrUmVqZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgc25hcE91dCk7Ci0gICAgfQotfQotCi1ib29sIE9wZW5HTFJlbmRlcmVyOjpxdWlja1JlamVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGJvb2wgc25hcE91dCkgeworLyoqCisgKiBSZXR1cm5zIGZhbHNlIGFuZCBzZXRzIHNjaXNzb3IgZW5hYmxlIGJhc2VkIHVwb24gYm91bmRzIGlmIGRyYXdpbmcgd29uJ3QgYmUgY2xpcHBlZCBvdXQuCisgKgorICogQHBhcmFtIHBhaW50IGlmIG5vdCBudWxsLCB0aGUgYm91bmRzIHdpbGwgYmUgZXhwYW5kZWQgdG8gYWNjb3VudCBmb3Igc3Ryb2tlIGRlcGVuZGluZyBvbiBwYWludAorICogICAgICAgICBzdHlsZSwgYW5kIHRlc3NlbGxhdGVkIEFBIHJhbXAKKyAqLworYm9vbCBPcGVuR0xSZW5kZXJlcjo6cXVpY2tSZWplY3RTZXR1cFNjaXNzb3IoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAorICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIGJvb2wgY2xpcFJlcXVpcmVkID0gZmFsc2U7Ci0gICAgaWYgKHF1aWNrUmVqZWN0Tm9TY2lzc29yKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgc25hcE91dCwgJmNsaXBSZXF1aXJlZCkpIHsKKyAgICBib29sIHNuYXBPdXQgPSBwYWludCAmJiBwYWludC0+aXNBbnRpQWxpYXMoKTsKKworICAgIGlmIChwYWludCAmJiBwYWludC0+Z2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSkgeworICAgICAgICBmbG9hdCBvdXRzZXQgPSBwYWludC0+Z2V0U3Ryb2tlV2lkdGgoKSAqIDAuNWY7CisgICAgICAgIGxlZnQgLT0gb3V0c2V0OworICAgICAgICB0b3AgLT0gb3V0c2V0OworICAgICAgICByaWdodCArPSBvdXRzZXQ7CisgICAgICAgIGJvdHRvbSArPSBvdXRzZXQ7CisgICAgfQorCisgICAgaWYgKGNhbGN1bGF0ZVF1aWNrUmVqZWN0Rm9yU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sICZjbGlwUmVxdWlyZWQsIHNuYXBPdXQpKSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghaXNEZWZlcnJlZCgpKSB7CisgICAgaWYgKCFpc1JlY29yZGluZygpKSB7CisgICAgICAgIC8vIG5vdCBxdWljayByZWplY3RlZCwgc28gZW5hYmxlIHRoZSBzY2lzc29yIGlmIGNsaXBSZXF1aXJlZAogICAgICAgICBtQ2FjaGVzLnNldFNjaXNzb3JFbmFibGVkKG1TY2lzc29yT3B0aW1pemF0aW9uRGlzYWJsZWQgfHwgY2xpcFJlcXVpcmVkKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Myw3NCArMTU3MiwxOCBAQAogCiB2b2lkIE9wZW5HTFJlbmRlcmVyOjpkZWJ1Z0NsaXAoKSB7CiAjaWYgREVCVUdfQ0xJUF9SRUdJT05TCi0gICAgaWYgKCFpc0RlZmVycmVkKCkgJiYgIW1TbmFwc2hvdC0+Y2xpcFJlZ2lvbi0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIGRyYXdSZWdpb25SZWN0cygqbVNuYXBzaG90LT5jbGlwUmVnaW9uLCAweDdmMDBmZjAwLCBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKTsKKyAgICBpZiAoIWlzUmVjb3JkaW5nKCkgJiYgIWN1cnJlbnRTbmFwc2hvdCgpLT5jbGlwUmVnaW9uLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZHJhd1JlZ2lvblJlY3RzKCooY3VycmVudFNuYXBzaG90KCktPmNsaXBSZWdpb24pLCAweDdmMDBmZjAwLCBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKTsKICAgICB9CiAjZW5kaWYKIH0KIAotYm9vbCBPcGVuR0xSZW5kZXJlcjo6Y2xpcFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1JlZ2lvbjo6T3Agb3ApIHsKLSAgICBpZiAoQ0NfTElLRUxZKGN1cnJlbnRUcmFuc2Zvcm0oKS5yZWN0VG9SZWN0KCkpKSB7Ci0gICAgICAgIGJvb2wgY2xpcHBlZCA9IG1TbmFwc2hvdC0+Y2xpcChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIG9wKTsKLSAgICAgICAgaWYgKGNsaXBwZWQpIHsKLSAgICAgICAgICAgIGRpcnR5Q2xpcCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAhbVNuYXBzaG90LT5jbGlwUmVjdC0+aXNFbXB0eSgpOwotICAgIH0KLQotICAgIFNrUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotCi0gICAgcmV0dXJuIE9wZW5HTFJlbmRlcmVyOjpjbGlwUGF0aCgmcGF0aCwgb3ApOwotfQotCi1ib29sIE9wZW5HTFJlbmRlcmVyOjpjbGlwUGF0aChTa1BhdGgqIHBhdGgsIFNrUmVnaW9uOjpPcCBvcCkgewotICAgIFNrTWF0cml4IHRyYW5zZm9ybTsKLSAgICBjdXJyZW50VHJhbnNmb3JtKCkuY29weVRvKHRyYW5zZm9ybSk7Ci0KLSAgICBTa1BhdGggdHJhbnNmb3JtZWQ7Ci0gICAgcGF0aC0+dHJhbnNmb3JtKHRyYW5zZm9ybSwgJnRyYW5zZm9ybWVkKTsKLQotICAgIFNrUmVnaW9uIGNsaXA7Ci0gICAgaWYgKCFtU25hcHNob3QtPnByZXZpb3VzLT5jbGlwUmVnaW9uLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2xpcC5zZXRSZWdpb24oKm1TbmFwc2hvdC0+cHJldmlvdXMtPmNsaXBSZWdpb24pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtU25hcHNob3QtPnByZXZpb3VzID09IG1GaXJzdFNuYXBzaG90KSB7Ci0gICAgICAgICAgICBjbGlwLnNldFJlY3QoMCwgMCwgbVdpZHRoLCBtSGVpZ2h0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlY3QqIGJvdW5kcyA9IG1TbmFwc2hvdC0+cHJldmlvdXMtPmNsaXBSZWN0OwotICAgICAgICAgICAgY2xpcC5zZXRSZWN0KGJvdW5kcy0+bGVmdCwgYm91bmRzLT50b3AsIGJvdW5kcy0+cmlnaHQsIGJvdW5kcy0+Ym90dG9tKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFNrUmVnaW9uIHJlZ2lvbjsKLSAgICByZWdpb24uc2V0UGF0aCh0cmFuc2Zvcm1lZCwgY2xpcCk7Ci0KLSAgICBib29sIGNsaXBwZWQgPSBtU25hcHNob3QtPmNsaXBSZWdpb25UcmFuc2Zvcm1lZChyZWdpb24sIG9wKTsKLSAgICBpZiAoY2xpcHBlZCkgewotICAgICAgICBkaXJ0eUNsaXAoKTsKLSAgICB9Ci0gICAgcmV0dXJuICFtU25hcHNob3QtPmNsaXBSZWN0LT5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgT3BlbkdMUmVuZGVyZXI6OmNsaXBSZWdpb24oU2tSZWdpb24qIHJlZ2lvbiwgU2tSZWdpb246Ok9wIG9wKSB7Ci0gICAgYm9vbCBjbGlwcGVkID0gbVNuYXBzaG90LT5jbGlwUmVnaW9uVHJhbnNmb3JtZWQoKnJlZ2lvbiwgb3ApOwotICAgIGlmIChjbGlwcGVkKSB7Ci0gICAgICAgIGRpcnR5Q2xpcCgpOwotICAgIH0KLSAgICByZXR1cm4gIW1TbmFwc2hvdC0+Y2xpcFJlY3QtPmlzRW1wdHkoKTsKLX0KLQotUmVjdCogT3BlbkdMUmVuZGVyZXI6OmdldENsaXBSZWN0KCkgewotICAgIHJldHVybiBtU25hcHNob3QtPmNsaXBSZWN0OwotfQotCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLyBEcmF3aW5nIGNvbW1hbmRzCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldHVwRHJhdyhib29sIGNsZWFyKSB7Ci0gICAgLy8gVE9ETzogSXQgd291bGQgYmUgYmVzdCBpZiB3ZSBjb3VsZCBkbyB0aGlzIGJlZm9yZSBxdWlja1JlamVjdCgpCisgICAgLy8gVE9ETzogSXQgd291bGQgYmUgYmVzdCBpZiB3ZSBjb3VsZCBkbyB0aGlzIGJlZm9yZSBxdWlja1JlamVjdFNldHVwU2Npc3NvcigpCiAgICAgLy8gICAgICAgY2hhbmdlcyB0aGUgc2Npc3NvciB0ZXN0IHN0YXRlCiAgICAgaWYgKGNsZWFyKSBjbGVhckxheWVyUmVnaW9ucygpOwogICAgIC8vIE1ha2Ugc3VyZSBzZXRTY2lzc29yICYgc2V0U3RlbmNpbCBoYXBwZW4gYXQgdGhlIGJlZ2lubmluZyBvZgpAQCAtMTc5OCw3ICsxNjQxLDcgQEAKICAgICBtQ29sb3JHID0gbUNvbG9yQSAqICgoY29sb3IgPj4gIDgpICYgMHhGRikgLyAyNTUuMGY7CiAgICAgbUNvbG9yQiA9IG1Db2xvckEgKiAoKGNvbG9yICAgICAgKSAmIDB4RkYpIC8gMjU1LjBmOwogICAgIG1Db2xvclNldCA9IHRydWU7Ci0gICAgbVNldFNoYWRlckNvbG9yID0gbURlc2NyaXB0aW9uLnNldENvbG9yKG1Db2xvclIsIG1Db2xvckcsIG1Db2xvckIsIG1Db2xvckEpOworICAgIG1TZXRTaGFkZXJDb2xvciA9IG1EZXNjcmlwdGlvbi5zZXRDb2xvck1vZHVsYXRlKG1Db2xvckEpOwogfQogCiB2b2lkIE9wZW5HTFJlbmRlcmVyOjpzZXR1cERyYXdBbHBoYThDb2xvcihpbnQgY29sb3IsIGludCBhbHBoYSkgewpAQCAtMTgwNyw3ICsxNjUwLDcgQEAKICAgICBtQ29sb3JHID0gbUNvbG9yQSAqICgoY29sb3IgPj4gIDgpICYgMHhGRikgLyAyNTUuMGY7CiAgICAgbUNvbG9yQiA9IG1Db2xvckEgKiAoKGNvbG9yICAgICAgKSAmIDB4RkYpIC8gMjU1LjBmOwogICAgIG1Db2xvclNldCA9IHRydWU7Ci0gICAgbVNldFNoYWRlckNvbG9yID0gbURlc2NyaXB0aW9uLnNldEFscGhhOENvbG9yKG1Db2xvclIsIG1Db2xvckcsIG1Db2xvckIsIG1Db2xvckEpOworICAgIG1TZXRTaGFkZXJDb2xvciA9IG1EZXNjcmlwdGlvbi5zZXRBbHBoYThDb2xvck1vZHVsYXRlKG1Db2xvclIsIG1Db2xvckcsIG1Db2xvckIsIG1Db2xvckEpOwogfQogCiB2b2lkIE9wZW5HTFJlbmRlcmVyOjpzZXR1cERyYXdUZXh0R2FtbWEoY29uc3QgU2tQYWludCogcGFpbnQpIHsKQEAgLTE4MjAsNyArMTY2Myw3IEBACiAgICAgbUNvbG9yRyA9IGc7CiAgICAgbUNvbG9yQiA9IGI7CiAgICAgbUNvbG9yU2V0ID0gdHJ1ZTsKLSAgICBtU2V0U2hhZGVyQ29sb3IgPSBtRGVzY3JpcHRpb24uc2V0Q29sb3IociwgZywgYiwgYSk7CisgICAgbVNldFNoYWRlckNvbG9yID0gbURlc2NyaXB0aW9uLnNldENvbG9yTW9kdWxhdGUoYSk7CiB9CiAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldHVwRHJhd1NoYWRlcigpIHsKQEAgLTE4NzAsMzkgKzE3MTMsMjAgQEAKICAgICBtVHJhY2tEaXJ0eVJlZ2lvbnMgPSBmYWxzZTsKIH0KIAotdm9pZCBPcGVuR0xSZW5kZXJlcjo6c2V0dXBEcmF3TW9kZWxWaWV3VHJhbnNsYXRlKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm0pIHsKK3ZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldHVwRHJhd01vZGVsVmlldyhNb2RlbFZpZXdNb2RlIG1vZGUsIGJvb2wgb2Zmc2V0LAorICAgICAgICBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGJvb2wgaWdub3JlVHJhbnNmb3JtKSB7CiAgICAgbU1vZGVsVmlldy5sb2FkVHJhbnNsYXRlKGxlZnQsIHRvcCwgMC4wZik7Ci0gICAgaWYgKCFpZ25vcmVUcmFuc2Zvcm0pIHsKLSAgICAgICAgbUNhY2hlcy5jdXJyZW50UHJvZ3JhbS0+c2V0KG1PcnRob01hdHJpeCwgbU1vZGVsVmlldywgY3VycmVudFRyYW5zZm9ybSgpKTsKLSAgICAgICAgaWYgKG1UcmFja0RpcnR5UmVnaW9ucykgZGlydHlMYXllcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGN1cnJlbnRUcmFuc2Zvcm0oKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbUNhY2hlcy5jdXJyZW50UHJvZ3JhbS0+c2V0KG1PcnRob01hdHJpeCwgbU1vZGVsVmlldywgbWF0NDo6aWRlbnRpdHkoKSk7Ci0gICAgICAgIGlmIChtVHJhY2tEaXJ0eVJlZ2lvbnMpIGRpcnR5TGF5ZXIobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICB9Ci19Ci0KLXZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldHVwRHJhd01vZGVsVmlld0lkZW50aXR5KGJvb2wgb2Zmc2V0KSB7Ci0gICAgbUNhY2hlcy5jdXJyZW50UHJvZ3JhbS0+c2V0KG1PcnRob01hdHJpeCwgbWF0NDo6aWRlbnRpdHkoKSwgY3VycmVudFRyYW5zZm9ybSgpLCBvZmZzZXQpOwotfQotCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpzZXR1cERyYXdNb2RlbFZpZXcoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICBib29sIGlnbm9yZVRyYW5zZm9ybSwgYm9vbCBpZ25vcmVNb2RlbFZpZXcpIHsKLSAgICBpZiAoIWlnbm9yZU1vZGVsVmlldykgewotICAgICAgICBtTW9kZWxWaWV3LmxvYWRUcmFuc2xhdGUobGVmdCwgdG9wLCAwLjBmKTsKKyAgICBpZiAobW9kZSA9PSBrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGVBbmRTY2FsZSkgewogICAgICAgICBtTW9kZWxWaWV3LnNjYWxlKHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wLCAxLjBmKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtTW9kZWxWaWV3LmxvYWRJZGVudGl0eSgpOwogICAgIH0KKwogICAgIGJvb2wgZGlydHkgPSByaWdodCAtIGxlZnQgPiAwLjBmICYmIGJvdHRvbSAtIHRvcCA+IDAuMGY7CiAgICAgaWYgKCFpZ25vcmVUcmFuc2Zvcm0pIHsKLSAgICAgICAgbUNhY2hlcy5jdXJyZW50UHJvZ3JhbS0+c2V0KG1PcnRob01hdHJpeCwgbU1vZGVsVmlldywgY3VycmVudFRyYW5zZm9ybSgpKTsKLSAgICAgICAgaWYgKG1UcmFja0RpcnR5UmVnaW9ucyAmJiBkaXJ0eSkgewotICAgICAgICAgICAgZGlydHlMYXllcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGN1cnJlbnRUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIH0KKyAgICAgICAgbUNhY2hlcy5jdXJyZW50UHJvZ3JhbS0+c2V0KG1WaWV3UHJvak1hdHJpeCwgbU1vZGVsVmlldywgKmN1cnJlbnRUcmFuc2Zvcm0oKSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKGRpcnR5ICYmIG1UcmFja0RpcnR5UmVnaW9ucykgZGlydHlMYXllcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sICpjdXJyZW50VHJhbnNmb3JtKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1DYWNoZXMuY3VycmVudFByb2dyYW0tPnNldChtT3J0aG9NYXRyaXgsIG1Nb2RlbFZpZXcsIG1hdDQ6OmlkZW50aXR5KCkpOwotICAgICAgICBpZiAobVRyYWNrRGlydHlSZWdpb25zICYmIGRpcnR5KSBkaXJ0eUxheWVyKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgIG1DYWNoZXMuY3VycmVudFByb2dyYW0tPnNldChtVmlld1Byb2pNYXRyaXgsIG1Nb2RlbFZpZXcsIG1hdDQ6OmlkZW50aXR5KCksIG9mZnNldCk7CisgICAgICAgIGlmIChkaXJ0eSAmJiBtVHJhY2tEaXJ0eVJlZ2lvbnMpIGRpcnR5TGF5ZXIobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICB9CiB9CiAKQEAgLTE5MjEsMjAgKzE3NDUsMTkgQEAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldHVwRHJhd1NoYWRlclVuaWZvcm1zKGJvb2wgaWdub3JlVHJhbnNmb3JtKSB7CiAgICAgaWYgKG1EcmF3TW9kaWZpZXJzLm1TaGFkZXIpIHsKICAgICAgICAgaWYgKGlnbm9yZVRyYW5zZm9ybSkgewotICAgICAgICAgICAgbU1vZGVsVmlldy5sb2FkSW52ZXJzZShjdXJyZW50VHJhbnNmb3JtKCkpOworICAgICAgICAgICAgLy8gaWYgaWdub3JlVHJhbnNmb3JtPXRydWUgd2FzIHBhc3NlZCB0byBzZXR1cERyYXdNb2RlbFZpZXcsIHVuZG8gY3VycmVudFRyYW5zZm9ybSgpCisgICAgICAgICAgICAvLyBiZWNhdXNlIGl0IHdhcyBidWlsdCBpbnRvIG1vZGVsVmlldyAvIHRoZSBnZW9tZXRyeSwgYW5kIHRoZSBTa2lhU2hhZGVyIG5lZWRzIHRvCisgICAgICAgICAgICAvLyBjb21wZW5zYXRlLgorICAgICAgICAgICAgbWF0NCBtb2RlbFZpZXdXaXRob3V0VHJhbnNmb3JtOworICAgICAgICAgICAgbW9kZWxWaWV3V2l0aG91dFRyYW5zZm9ybS5sb2FkSW52ZXJzZSgqY3VycmVudFRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIG1vZGVsVmlld1dpdGhvdXRUcmFuc2Zvcm0ubXVsdGlwbHkobU1vZGVsVmlldyk7CisgICAgICAgICAgICBtTW9kZWxWaWV3LmxvYWQobW9kZWxWaWV3V2l0aG91dFRyYW5zZm9ybSk7CiAgICAgICAgIH0KICAgICAgICAgbURyYXdNb2RpZmllcnMubVNoYWRlci0+c2V0dXBQcm9ncmFtKG1DYWNoZXMuY3VycmVudFByb2dyYW0sCiAgICAgICAgICAgICAgICAgbU1vZGVsVmlldywgKm1TbmFwc2hvdCwgJm1UZXh0dXJlVW5pdCk7CiAgICAgfQogfQogCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpzZXR1cERyYXdTaGFkZXJJZGVudGl0eVVuaWZvcm1zKCkgewotICAgIGlmIChtRHJhd01vZGlmaWVycy5tU2hhZGVyKSB7Ci0gICAgICAgIG1EcmF3TW9kaWZpZXJzLm1TaGFkZXItPnNldHVwUHJvZ3JhbShtQ2FjaGVzLmN1cnJlbnRQcm9ncmFtLAotICAgICAgICAgICAgICAgIG1hdDQ6OmlkZW50aXR5KCksICptU25hcHNob3QsICZtVGV4dHVyZVVuaXQpOwotICAgIH0KLX0KLQogdm9pZCBPcGVuR0xSZW5kZXJlcjo6c2V0dXBEcmF3Q29sb3JGaWx0ZXJVbmlmb3JtcygpIHsKICAgICBpZiAobURyYXdNb2RpZmllcnMubUNvbG9yRmlsdGVyKSB7CiAgICAgICAgIG1EcmF3TW9kaWZpZXJzLm1Db2xvckZpbHRlci0+c2V0dXBQcm9ncmFtKG1DYWNoZXMuY3VycmVudFByb2dyYW0pOwpAQCAtMTk3Miw3ICsxNzk1LDggQEAKICAgICAgICAgICAgIEdMX0ZBTFNFLCAmdHJhbnNmb3JtLmRhdGFbMF0pOwogfQogCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpzZXR1cERyYXdNZXNoKEdMdm9pZCogdmVydGljZXMsIEdMdm9pZCogdGV4Q29vcmRzLCBHTHVpbnQgdmJvKSB7Cit2b2lkIE9wZW5HTFJlbmRlcmVyOjpzZXR1cERyYXdNZXNoKGNvbnN0IEdMdm9pZCogdmVydGljZXMsCisgICAgICAgIGNvbnN0IEdMdm9pZCogdGV4Q29vcmRzLCBHTHVpbnQgdmJvKSB7CiAgICAgYm9vbCBmb3JjZSA9IGZhbHNlOwogICAgIGlmICghdmVydGljZXMgfHwgdmJvKSB7CiAgICAgICAgIGZvcmNlID0gbUNhY2hlcy5iaW5kTWVzaEJ1ZmZlcih2Ym8gPT0gMCA/IG1DYWNoZXMubWVzaEJ1ZmZlciA6IHZibyk7CkBAIC0xOTg4LDcgKzE4MTIsOCBAQAogICAgIG1DYWNoZXMudW5iaW5kSW5kaWNlc0J1ZmZlcigpOwogfQogCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpzZXR1cERyYXdNZXNoKEdMdm9pZCogdmVydGljZXMsIEdMdm9pZCogdGV4Q29vcmRzLCBHTHZvaWQqIGNvbG9ycykgewordm9pZCBPcGVuR0xSZW5kZXJlcjo6c2V0dXBEcmF3TWVzaChjb25zdCBHTHZvaWQqIHZlcnRpY2VzLAorICAgICAgICBjb25zdCBHTHZvaWQqIHRleENvb3JkcywgY29uc3QgR0x2b2lkKiBjb2xvcnMpIHsKICAgICBib29sIGZvcmNlID0gbUNhY2hlcy51bmJpbmRNZXNoQnVmZmVyKCk7CiAgICAgR0xzaXplaSBzdHJpZGUgPSBzaXplb2YoQ29sb3JUZXh0dXJlVmVydGV4KTsKIApAQCAtMjAwNSw3ICsxODMwLDggQEAKICAgICBtQ2FjaGVzLnVuYmluZEluZGljZXNCdWZmZXIoKTsKIH0KIAotdm9pZCBPcGVuR0xSZW5kZXJlcjo6c2V0dXBEcmF3TWVzaEluZGljZXMoR0x2b2lkKiB2ZXJ0aWNlcywgR0x2b2lkKiB0ZXhDb29yZHMsIEdMdWludCB2Ym8pIHsKK3ZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldHVwRHJhd01lc2hJbmRpY2VzKGNvbnN0IEdMdm9pZCogdmVydGljZXMsCisgICAgICAgIGNvbnN0IEdMdm9pZCogdGV4Q29vcmRzLCBHTHVpbnQgdmJvKSB7CiAgICAgYm9vbCBmb3JjZSA9IGZhbHNlOwogICAgIC8vIElmIHZibyBpcyAhPSAwIHdlIHdhbnQgdG8gdHJlYXQgdGhlIHZlcnRpY2VzIHBhcmFtZXRlciBhcyBhbiBvZmZzZXQgaW5zaWRlCiAgICAgLy8gYSBWQk8uIEhvd2V2ZXIsIGlmIHZlcnRpY2VzIGlzIHNldCB0byBOVUxMIGFuZCB2Ym8gPT0gMCB0aGVuIHdlIHdhbnQgdG8KQEAgLTIwMzYsOSArMTg2MiwxOCBAQAogc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdEaXNwbGF5TGlzdChEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIFJlY3QmIGRpcnR5LAogICAgICAgICBpbnQzMl90IHJlcGxheUZsYWdzKSB7CiAgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgaWYgKG1DYWNoZXMucHJvcGVydHlEaXJ0eVZpZXdwb3J0KSB7CisgICAgICAgIC8vIGZvcmNlIHJlY2FsYyBvZiB2aWV3L3Byb2ogbWF0cmljZXMKKyAgICAgICAgc2V0Vmlld3BvcnQoZ2V0V2lkdGgoKSwgZ2V0SGVpZ2h0KCkpOworICAgICAgICBtQ2FjaGVzLnByb3BlcnR5RGlydHlWaWV3cG9ydCA9IGZhbHNlOworICAgIH0KKwogICAgIC8vIEFsbCB0aGUgdXN1YWwgY2hlY2tzIGFuZCBzZXR1cCBvcGVyYXRpb25zIChxdWlja1JlamVjdCwgc2V0dXBEcmF3LCBldGMuKQogICAgIC8vIHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHRoZSBkaXNwbGF5IGxpc3QgaXRzZWxmCiAgICAgaWYgKGRpc3BsYXlMaXN0ICYmIGRpc3BsYXlMaXN0LT5pc1JlbmRlcmFibGUoKSkgeworICAgICAgICAvLyBjb21wdXRlIDNkIG9yZGVyaW5nCisgICAgICAgIGRpc3BsYXlMaXN0LT5jb21wdXRlT3JkZXJpbmcoKTsKICAgICAgICAgaWYgKENDX1VOTElLRUxZKG1DYWNoZXMuZHJhd0RlZmVyRGlzYWJsZWQpKSB7CiAgICAgICAgICAgICBzdGF0dXMgPSBzdGFydEZyYW1lKCk7CiAgICAgICAgICAgICBSZXBsYXlTdGF0ZVN0cnVjdCByZXBsYXlTdHJ1Y3QoKnRoaXMsIGRpcnR5LCByZXBsYXlGbGFncyk7CkBAIC0yMDQ3LDI2ICsxODgyLDIwIEBACiAgICAgICAgIH0KIAogICAgICAgICBib29sIGF2b2lkT3ZlcmRyYXcgPSAhbUNhY2hlcy5kZWJ1Z092ZXJkcmF3ICYmICFtQ291bnRPdmVyZHJhdzsgLy8gc2hoLCBkb24ndCB0ZWxsIGRldnMhCi0gICAgICAgIERlZmVycmVkRGlzcGxheUxpc3QgZGVmZXJyZWRMaXN0KCoobVNuYXBzaG90LT5jbGlwUmVjdCksIGF2b2lkT3ZlcmRyYXcpOworICAgICAgICBEZWZlcnJlZERpc3BsYXlMaXN0IGRlZmVycmVkTGlzdCgqY3VycmVudENsaXBSZWN0KCksIGF2b2lkT3ZlcmRyYXcpOwogICAgICAgICBEZWZlclN0YXRlU3RydWN0IGRlZmVyU3RydWN0KGRlZmVycmVkTGlzdCwgKnRoaXMsIHJlcGxheUZsYWdzKTsKICAgICAgICAgZGlzcGxheUxpc3QtPmRlZmVyKGRlZmVyU3RydWN0LCAwKTsKIAogICAgICAgICBmbHVzaExheWVycygpOwogICAgICAgICBzdGF0dXMgPSBzdGFydEZyYW1lKCk7CiAKLSAgICAgICAgcmV0dXJuIHN0YXR1cyB8IGRlZmVycmVkTGlzdC5mbHVzaCgqdGhpcywgZGlydHkpOworICAgICAgICByZXR1cm4gZGVmZXJyZWRMaXN0LmZsdXNoKCp0aGlzLCBkaXJ0eSkgfCBzdGF0dXM7CiAgICAgfQogCiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogfQogCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpvdXRwdXREaXNwbGF5TGlzdChEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QpIHsKLSAgICBpZiAoZGlzcGxheUxpc3QpIHsKLSAgICAgICAgZGlzcGxheUxpc3QtPm91dHB1dCgxKTsKLSAgICB9Ci19Ci0KLXZvaWQgT3BlbkdMUmVuZGVyZXI6OmRyYXdBbHBoYUJpdG1hcChUZXh0dXJlKiB0ZXh0dXJlLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIFNrUGFpbnQqIHBhaW50KSB7Cit2b2lkIE9wZW5HTFJlbmRlcmVyOjpkcmF3QWxwaGFCaXRtYXAoVGV4dHVyZSogdGV4dHVyZSwgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIGludCBhbHBoYTsKICAgICBTa1hmZXJtb2RlOjpNb2RlIG1vZGU7CiAgICAgZ2V0QWxwaGFBbmRNb2RlKHBhaW50LCAmYWxwaGEsICZtb2RlKTsKQEAgLTIwNzksOSArMTkwOCw5IEBACiAgICAgdGV4dHVyZS0+c2V0V3JhcChHTF9DTEFNUF9UT19FREdFLCB0cnVlKTsKIAogICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtID0gZmFsc2U7Ci0gICAgaWYgKGN1cnJlbnRUcmFuc2Zvcm0oKS5pc1B1cmVUcmFuc2xhdGUoKSkgewotICAgICAgICB4ID0gKGludCkgZmxvb3JmKGxlZnQgKyBjdXJyZW50VHJhbnNmb3JtKCkuZ2V0VHJhbnNsYXRlWCgpICsgMC41Zik7Ci0gICAgICAgIHkgPSAoaW50KSBmbG9vcmYodG9wICsgY3VycmVudFRyYW5zZm9ybSgpLmdldFRyYW5zbGF0ZVkoKSArIDAuNWYpOworICAgIGlmIChjdXJyZW50VHJhbnNmb3JtKCktPmlzUHVyZVRyYW5zbGF0ZSgpKSB7CisgICAgICAgIHggPSAoaW50KSBmbG9vcmYobGVmdCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWCgpICsgMC41Zik7CisgICAgICAgIHkgPSAoaW50KSBmbG9vcmYodG9wICsgY3VycmVudFRyYW5zZm9ybSgpLT5nZXRUcmFuc2xhdGVZKCkgKyAwLjVmKTsKICAgICAgICAgaWdub3JlVHJhbnNmb3JtID0gdHJ1ZTsKIAogICAgICAgICB0ZXh0dXJlLT5zZXRGaWx0ZXIoR0xfTkVBUkVTVCwgdHJ1ZSk7CkBAIC0yMTAxLDggKzE5MzAsOSBAQAogICogd2lsbCBub3Qgc2V0IHRoZSBzY2lzc29yIGVuYWJsZSBvciBkaXJ0eSB0aGUgY3VycmVudCBsYXllciwgaWYgYW55LgogICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJvcGVybHkgZGlydHlpbmcgdGhlIGN1cnJlbnQgbGF5ZXIuCiAgKi8KLXN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3Qml0bWFwcyhTa0JpdG1hcCogYml0bWFwLCBBc3NldEF0bGFzOjpFbnRyeSogZW50cnksIGludCBiaXRtYXBDb3VudCwKLSAgICAgICAgVGV4dHVyZVZlcnRleCogdmVydGljZXMsIGJvb2wgcHVyZVRyYW5zbGF0ZSwgY29uc3QgUmVjdCYgYm91bmRzLCBTa1BhaW50KiBwYWludCkgeworc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdCaXRtYXBzKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIEFzc2V0QXRsYXM6OkVudHJ5KiBlbnRyeSwKKyAgICAgICAgaW50IGJpdG1hcENvdW50LCBUZXh0dXJlVmVydGV4KiB2ZXJ0aWNlcywgYm9vbCBwdXJlVHJhbnNsYXRlLAorICAgICAgICBjb25zdCBSZWN0JiBib3VuZHMsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgbUNhY2hlcy5hY3RpdmVUZXh0dXJlKDApOwogICAgIFRleHR1cmUqIHRleHR1cmUgPSBlbnRyeSA/IGVudHJ5LT50ZXh0dXJlIDogbUNhY2hlcy50ZXh0dXJlQ2FjaGUuZ2V0KGJpdG1hcCk7CiAgICAgaWYgKCF0ZXh0dXJlKSByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CkBAIC0yMTE4LDI3ICsxOTQ4LDMwIEBACiAKICAgICBjb25zdCBmbG9hdCB4ID0gKGludCkgZmxvb3JmKGJvdW5kcy5sZWZ0ICsgMC41Zik7CiAgICAgY29uc3QgZmxvYXQgeSA9IChpbnQpIGZsb29yZihib3VuZHMudG9wICsgMC41Zik7Ci0gICAgaWYgKENDX1VOTElLRUxZKGJpdG1hcC0+Z2V0Q29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBOF9Db25maWcpKSB7CisgICAgaWYgKENDX1VOTElLRUxZKGJpdG1hcC0+Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBOF9Db25maWcpKSB7CiAgICAgICAgIGludCBjb2xvciA9IHBhaW50ICE9IE5VTEwgPyBwYWludC0+Z2V0Q29sb3IoKSA6IDA7CiAgICAgICAgIGRyYXdBbHBoYThUZXh0dXJlTWVzaCh4LCB5LCB4ICsgYm91bmRzLmdldFdpZHRoKCksIHkgKyBib3VuZHMuZ2V0SGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+aWQsIHBhaW50ICE9IE5VTEwsIGNvbG9yLCBhbHBoYSwgbW9kZSwKLSAgICAgICAgICAgICAgICAmdmVydGljZXNbMF0ucG9zaXRpb25bMF0sICZ2ZXJ0aWNlc1swXS50ZXh0dXJlWzBdLAotICAgICAgICAgICAgICAgIEdMX1RSSUFOR0xFUywgYml0bWFwQ291bnQgKiA2LCB0cnVlLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgJnZlcnRpY2VzWzBdLngsICZ2ZXJ0aWNlc1swXS51LAorICAgICAgICAgICAgICAgIEdMX1RSSUFOR0xFUywgYml0bWFwQ291bnQgKiA2LCB0cnVlLAorICAgICAgICAgICAgICAgIGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZSwgZmFsc2UpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRyYXdUZXh0dXJlTWVzaCh4LCB5LCB4ICsgYm91bmRzLmdldFdpZHRoKCksIHkgKyBib3VuZHMuZ2V0SGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+aWQsIGFscGhhIC8gMjU1LjBmLCBtb2RlLCB0ZXh0dXJlLT5ibGVuZCwKLSAgICAgICAgICAgICAgICAmdmVydGljZXNbMF0ucG9zaXRpb25bMF0sICZ2ZXJ0aWNlc1swXS50ZXh0dXJlWzBdLAotICAgICAgICAgICAgICAgIEdMX1RSSUFOR0xFUywgYml0bWFwQ291bnQgKiA2LCBmYWxzZSwgdHJ1ZSwgMCwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgICZ2ZXJ0aWNlc1swXS54LCAmdmVydGljZXNbMF0udSwKKyAgICAgICAgICAgICAgICBHTF9UUklBTkdMRVMsIGJpdG1hcENvdW50ICogNiwgZmFsc2UsIHRydWUsIDAsCisgICAgICAgICAgICAgICAga01vZGVsVmlld01vZGVfVHJhbnNsYXRlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEcmV3OwogfQogCi1zdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd0JpdG1hcChTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIFNrUGFpbnQqIHBhaW50KSB7CitzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd0JpdG1hcChjb25zdCBTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsCisgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgY29uc3QgZmxvYXQgcmlnaHQgPSBsZWZ0ICsgYml0bWFwLT53aWR0aCgpOwogICAgIGNvbnN0IGZsb2F0IGJvdHRvbSA9IHRvcCArIGJpdG1hcC0+aGVpZ2h0KCk7CiAKLSAgICBpZiAocXVpY2tSZWplY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSkgeworICAgIGlmIChxdWlja1JlamVjdFNldHVwU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pKSB7CiAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKICAgICB9CiAKQEAgLTIxNDcsNyArMTk4MCw3IEBACiAgICAgaWYgKCF0ZXh0dXJlKSByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgY29uc3QgQXV0b1RleHR1cmUgYXV0b0NsZWFudXAodGV4dHVyZSk7CiAKLSAgICBpZiAoQ0NfVU5MSUtFTFkoYml0bWFwLT5nZXRDb25maWcoKSA9PSBTa0JpdG1hcDo6a0E4X0NvbmZpZykpIHsKKyAgICBpZiAoQ0NfVU5MSUtFTFkoYml0bWFwLT5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0E4X0NvbmZpZykpIHsKICAgICAgICAgZHJhd0FscGhhQml0bWFwKHRleHR1cmUsIGxlZnQsIHRvcCwgcGFpbnQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRyYXdUZXh0dXJlUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHRleHR1cmUsIHBhaW50KTsKQEAgLTIxNTYsMTIgKzE5ODksMTMgQEAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RyZXc7CiB9CiAKLXN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3Qml0bWFwKFNrQml0bWFwKiBiaXRtYXAsIFNrTWF0cml4KiBtYXRyaXgsIFNrUGFpbnQqIHBhaW50KSB7CitzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd0JpdG1hcChjb25zdCBTa0JpdG1hcCogYml0bWFwLCBjb25zdCBTa01hdHJpeCogbWF0cml4LAorICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIFJlY3QgcigwLjBmLCAwLjBmLCBiaXRtYXAtPndpZHRoKCksIGJpdG1hcC0+aGVpZ2h0KCkpOwogICAgIGNvbnN0IG1hdDQgdHJhbnNmb3JtKCptYXRyaXgpOwogICAgIHRyYW5zZm9ybS5tYXBSZWN0KHIpOwogCi0gICAgaWYgKHF1aWNrUmVqZWN0KHIubGVmdCwgci50b3AsIHIucmlnaHQsIHIuYm90dG9tKSkgeworICAgIGlmIChxdWlja1JlamVjdFNldHVwU2Npc3NvcihyLmxlZnQsIHIudG9wLCByLnJpZ2h0LCByLmJvdHRvbSkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KIApAQCAtMjE3NCw3ICsyMDA4LDcgQEAKICAgICAvLyB0byB0aGUgdmVydGV4IHNoYWRlci4gVGhlIHNhdmUvcmVzdG9yZSBpcyBhIGJpdCBvdmVya2lsbC4KICAgICBzYXZlKFNrQ2FudmFzOjprTWF0cml4X1NhdmVGbGFnKTsKICAgICBjb25jYXRNYXRyaXgobWF0cml4KTsKLSAgICBpZiAoQ0NfVU5MSUtFTFkoYml0bWFwLT5nZXRDb25maWcoKSA9PSBTa0JpdG1hcDo6a0E4X0NvbmZpZykpIHsKKyAgICBpZiAoQ0NfVU5MSUtFTFkoYml0bWFwLT5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0E4X0NvbmZpZykpIHsKICAgICAgICAgZHJhd0FscGhhQml0bWFwKHRleHR1cmUsIDAuMGYsIDAuMGYsIHBhaW50KTsKICAgICB9IGVsc2UgewogICAgICAgICBkcmF3VGV4dHVyZVJlY3QoMC4wZiwgMC4wZiwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0ZXh0dXJlLCBwYWludCk7CkBAIC0yMTg0LDExICsyMDE4LDEyIEBACiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEcmV3OwogfQogCi1zdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd0JpdG1hcERhdGEoU2tCaXRtYXAqIGJpdG1hcCwgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBTa1BhaW50KiBwYWludCkgeworc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdCaXRtYXBEYXRhKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKKyAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBjb25zdCBmbG9hdCByaWdodCA9IGxlZnQgKyBiaXRtYXAtPndpZHRoKCk7CiAgICAgY29uc3QgZmxvYXQgYm90dG9tID0gdG9wICsgYml0bWFwLT5oZWlnaHQoKTsKIAotICAgIGlmIChxdWlja1JlamVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pKSB7CisgICAgaWYgKHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KIApAQCAtMjE5Niw3ICsyMDMxLDcgQEAKICAgICBUZXh0dXJlKiB0ZXh0dXJlID0gbUNhY2hlcy50ZXh0dXJlQ2FjaGUuZ2V0VHJhbnNpZW50KGJpdG1hcCk7CiAgICAgY29uc3QgQXV0b1RleHR1cmUgYXV0b0NsZWFudXAodGV4dHVyZSk7CiAKLSAgICBpZiAoQ0NfVU5MSUtFTFkoYml0bWFwLT5nZXRDb25maWcoKSA9PSBTa0JpdG1hcDo6a0E4X0NvbmZpZykpIHsKKyAgICBpZiAoQ0NfVU5MSUtFTFkoYml0bWFwLT5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0E4X0NvbmZpZykpIHsKICAgICAgICAgZHJhd0FscGhhQml0bWFwKHRleHR1cmUsIGxlZnQsIHRvcCwgcGFpbnQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRyYXdUZXh0dXJlUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHRleHR1cmUsIHBhaW50KTsKQEAgLTIyMDUsOSArMjA0MCw5IEBACiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEcmV3OwogfQogCi1zdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd0JpdG1hcE1lc2goU2tCaXRtYXAqIGJpdG1hcCwgaW50IG1lc2hXaWR0aCwgaW50IG1lc2hIZWlnaHQsCi0gICAgICAgIGZsb2F0KiB2ZXJ0aWNlcywgaW50KiBjb2xvcnMsIFNrUGFpbnQqIHBhaW50KSB7Ci0gICAgaWYgKCF2ZXJ0aWNlcyB8fCBtU25hcHNob3QtPmlzSWdub3JlZCgpKSB7CitzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd0JpdG1hcE1lc2goY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgaW50IG1lc2hXaWR0aCwgaW50IG1lc2hIZWlnaHQsCisgICAgICAgIGNvbnN0IGZsb2F0KiB2ZXJ0aWNlcywgY29uc3QgaW50KiBjb2xvcnMsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CisgICAgaWYgKCF2ZXJ0aWNlcyB8fCBjdXJyZW50U25hcHNob3QoKS0+aXNJZ25vcmVkKCkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KIApAQCAtMjIyMSwxNCArMjA1NiwxNiBAQAogCiAgICAgY29uc3QgdWludDMyX3QgY291bnQgPSBtZXNoV2lkdGggKiBtZXNoSGVpZ2h0ICogNjsKIAotICAgIENvbG9yVGV4dHVyZVZlcnRleCBtZXNoW2NvdW50XTsKLSAgICBDb2xvclRleHR1cmVWZXJ0ZXgqIHZlcnRleCA9IG1lc2g7CisgICAgVmVjdG9yPENvbG9yVGV4dHVyZVZlcnRleD4gbWVzaDsgLy8gVE9ETzogdXNlIEMrKzExIHVuaXF1ZV9wdHIKKyAgICBtZXNoLnNldENhcGFjaXR5KGNvdW50KTsKKyAgICBDb2xvclRleHR1cmVWZXJ0ZXgqIHZlcnRleCA9IG1lc2guZWRpdEFycmF5KCk7CiAKICAgICBib29sIGNsZWFudXBDb2xvcnMgPSBmYWxzZTsKICAgICBpZiAoIWNvbG9ycykgewogICAgICAgICB1aW50MzJfdCBjb2xvcnNDb3VudCA9IChtZXNoV2lkdGggKyAxKSAqIChtZXNoSGVpZ2h0ICsgMSk7Ci0gICAgICAgIGNvbG9ycyA9IG5ldyBpbnRbY29sb3JzQ291bnRdOwotICAgICAgICBtZW1zZXQoY29sb3JzLCAweGZmLCBjb2xvcnNDb3VudCAqIHNpemVvZihpbnQpKTsKKyAgICAgICAgaW50KiBuZXdDb2xvcnMgPSBuZXcgaW50W2NvbG9yc0NvdW50XTsKKyAgICAgICAgbWVtc2V0KG5ld0NvbG9ycywgMHhmZiwgY29sb3JzQ291bnQgKiBzaXplb2YoaW50KSk7CisgICAgICAgIGNvbG9ycyA9IG5ld0NvbG9yczsKICAgICAgICAgY2xlYW51cENvbG9ycyA9IHRydWU7CiAgICAgfQogCkBAIC0yMjcxLDcgKzIxMDgsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHF1aWNrUmVqZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkpIHsKKyAgICBpZiAocXVpY2tSZWplY3RTZXR1cFNjaXNzb3IobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSkgewogICAgICAgICBpZiAoY2xlYW51cENvbG9ycykgZGVsZXRlW10gY29sb3JzOwogICAgICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgfQpAQCAtMjI5NSw3ICsyMTMyLDcgQEAKICAgICBmbG9hdCBhID0gYWxwaGEgLyAyNTUuMGY7CiAKICAgICBpZiAoaGFzTGF5ZXIoKSkgewotICAgICAgICBkaXJ0eUxheWVyKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgY3VycmVudFRyYW5zZm9ybSgpKTsKKyAgICAgICAgZGlydHlMYXllcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sICpjdXJyZW50VHJhbnNmb3JtKCkpOwogICAgIH0KIAogICAgIHNldHVwRHJhdygpOwpAQCAtMjMwNSwxMSArMjE0MiwxMSBAQAogICAgIHNldHVwRHJhd0JsZW5kaW5nKHRydWUsIG1vZGUsIGZhbHNlKTsKICAgICBzZXR1cERyYXdQcm9ncmFtKCk7CiAgICAgc2V0dXBEcmF3RGlydHlSZWdpb25zRGlzYWJsZWQoKTsKLSAgICBzZXR1cERyYXdNb2RlbFZpZXcoMC4wZiwgMC4wZiwgMS4wZiwgMS4wZiwgZmFsc2UpOworICAgIHNldHVwRHJhd01vZGVsVmlldyhrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGVBbmRTY2FsZSwgZmFsc2UsIDAuMGYsIDAuMGYsIDEuMGYsIDEuMGYpOwogICAgIHNldHVwRHJhd1RleHR1cmUodGV4dHVyZS0+aWQpOwogICAgIHNldHVwRHJhd1B1cmVDb2xvclVuaWZvcm1zKCk7CiAgICAgc2V0dXBEcmF3Q29sb3JGaWx0ZXJVbmlmb3JtcygpOwotICAgIHNldHVwRHJhd01lc2goJm1lc2hbMF0ucG9zaXRpb25bMF0sICZtZXNoWzBdLnRleHR1cmVbMF0sICZtZXNoWzBdLmNvbG9yWzBdKTsKKyAgICBzZXR1cERyYXdNZXNoKCZtZXNoWzBdLngsICZtZXNoWzBdLnUsICZtZXNoWzBdLnIpOwogCiAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFUywgMCwgY291bnQpOwogCkBAIC0yMzIzLDExICsyMTYwLDExIEBACiAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEcmV3OwogfQogCi1zdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd0JpdG1hcChTa0JpdG1hcCogYml0bWFwLAorc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdCaXRtYXAoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwKICAgICAgICAgIGZsb2F0IHNyY0xlZnQsIGZsb2F0IHNyY1RvcCwgZmxvYXQgc3JjUmlnaHQsIGZsb2F0IHNyY0JvdHRvbSwKICAgICAgICAgIGZsb2F0IGRzdExlZnQsIGZsb2F0IGRzdFRvcCwgZmxvYXQgZHN0UmlnaHQsIGZsb2F0IGRzdEJvdHRvbSwKLSAgICAgICAgIFNrUGFpbnQqIHBhaW50KSB7Ci0gICAgaWYgKHF1aWNrUmVqZWN0KGRzdExlZnQsIGRzdFRvcCwgZHN0UmlnaHQsIGRzdEJvdHRvbSkpIHsKKyAgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CisgICAgaWYgKHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGRzdExlZnQsIGRzdFRvcCwgZHN0UmlnaHQsIGRzdEJvdHRvbSkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KIApAQCAtMjM2NSw5ICsyMjAyLDkgQEAKICAgICBib29sIHVzZVNjYWxlVHJhbnNmb3JtID0gbURyYXdNb2RpZmllcnMubVNoYWRlciAmJiBzY2FsZWQ7CiAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm0gPSBmYWxzZTsKIAotICAgIGlmIChDQ19MSUtFTFkoY3VycmVudFRyYW5zZm9ybSgpLmlzUHVyZVRyYW5zbGF0ZSgpICYmICF1c2VTY2FsZVRyYW5zZm9ybSkpIHsKLSAgICAgICAgZmxvYXQgeCA9IChpbnQpIGZsb29yZihkc3RMZWZ0ICsgY3VycmVudFRyYW5zZm9ybSgpLmdldFRyYW5zbGF0ZVgoKSArIDAuNWYpOwotICAgICAgICBmbG9hdCB5ID0gKGludCkgZmxvb3JmKGRzdFRvcCArIGN1cnJlbnRUcmFuc2Zvcm0oKS5nZXRUcmFuc2xhdGVZKCkgKyAwLjVmKTsKKyAgICBpZiAoQ0NfTElLRUxZKGN1cnJlbnRUcmFuc2Zvcm0oKS0+aXNQdXJlVHJhbnNsYXRlKCkgJiYgIXVzZVNjYWxlVHJhbnNmb3JtKSkgeworICAgICAgICBmbG9hdCB4ID0gKGludCkgZmxvb3JmKGRzdExlZnQgKyBjdXJyZW50VHJhbnNmb3JtKCktPmdldFRyYW5zbGF0ZVgoKSArIDAuNWYpOworICAgICAgICBmbG9hdCB5ID0gKGludCkgZmxvb3JmKGRzdFRvcCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWSgpICsgMC41Zik7CiAKICAgICAgICAgZHN0UmlnaHQgPSB4ICsgKGRzdFJpZ2h0IC0gZHN0TGVmdCk7CiAgICAgICAgIGRzdEJvdHRvbSA9IHkgKyAoZHN0Qm90dG9tIC0gZHN0VG9wKTsKQEAgLTIzOTMsMTYgKzIyMzAsMTYgQEAKICAgICAgICAgZHN0Qm90dG9tID0gc3JjQm90dG9tIC0gc3JjVG9wOwogICAgIH0KIAotICAgIGlmIChDQ19VTkxJS0VMWShiaXRtYXAtPmdldENvbmZpZygpID09IFNrQml0bWFwOjprQThfQ29uZmlnKSkgeworICAgIGlmIChDQ19VTkxJS0VMWShiaXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjprQThfQ29uZmlnKSkgewogICAgICAgICBpbnQgY29sb3IgPSBwYWludCA/IHBhaW50LT5nZXRDb2xvcigpIDogMDsKICAgICAgICAgZHJhd0FscGhhOFRleHR1cmVNZXNoKGRzdExlZnQsIGRzdFRvcCwgZHN0UmlnaHQsIGRzdEJvdHRvbSwKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5pZCwgcGFpbnQgIT0gTlVMTCwgY29sb3IsIGFscGhhLCBtb2RlLAotICAgICAgICAgICAgICAgICZtTWVzaFZlcnRpY2VzWzBdLnBvc2l0aW9uWzBdLCAmbU1lc2hWZXJ0aWNlc1swXS50ZXh0dXJlWzBdLAorICAgICAgICAgICAgICAgICZtTWVzaFZlcnRpY2VzWzBdLngsICZtTWVzaFZlcnRpY2VzWzBdLnUsCiAgICAgICAgICAgICAgICAgR0xfVFJJQU5HTEVfU1RSSVAsIGdNZXNoQ291bnQsIGlnbm9yZVRyYW5zZm9ybSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZHJhd1RleHR1cmVNZXNoKGRzdExlZnQsIGRzdFRvcCwgZHN0UmlnaHQsIGRzdEJvdHRvbSwKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5pZCwgYWxwaGEgLyAyNTUuMGYsIG1vZGUsIHRleHR1cmUtPmJsZW5kLAotICAgICAgICAgICAgICAgICZtTWVzaFZlcnRpY2VzWzBdLnBvc2l0aW9uWzBdLCAmbU1lc2hWZXJ0aWNlc1swXS50ZXh0dXJlWzBdLAorICAgICAgICAgICAgICAgICZtTWVzaFZlcnRpY2VzWzBdLngsICZtTWVzaFZlcnRpY2VzWzBdLnUsCiAgICAgICAgICAgICAgICAgR0xfVFJJQU5HTEVfU1RSSVAsIGdNZXNoQ291bnQsIGZhbHNlLCBpZ25vcmVUcmFuc2Zvcm0pOwogICAgIH0KIApAQCAtMjQxNSw5ICsyMjUyLDkgQEAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RyZXc7CiB9CiAKLXN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3UGF0Y2goU2tCaXRtYXAqIGJpdG1hcCwgUmVzX3BuZ185cGF0Y2gqIHBhdGNoLAotICAgICAgICBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIFNrUGFpbnQqIHBhaW50KSB7Ci0gICAgaWYgKHF1aWNrUmVqZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkpIHsKK3N0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3UGF0Y2goY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgY29uc3QgUmVzX3BuZ185cGF0Y2gqIHBhdGNoLAorICAgICAgICBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CisgICAgaWYgKHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KIApAQCAtMjQyOCw5ICsyMjY1LDEwIEBACiAgICAgcmV0dXJuIGRyYXdQYXRjaChiaXRtYXAsIG1lc2gsIGVudHJ5LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHBhaW50KTsKIH0KIAotc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdQYXRjaChTa0JpdG1hcCogYml0bWFwLCBjb25zdCBQYXRjaCogbWVzaCwgQXNzZXRBdGxhczo6RW50cnkqIGVudHJ5LAotICAgICAgICBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIFNrUGFpbnQqIHBhaW50KSB7Ci0gICAgaWYgKHF1aWNrUmVqZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkpIHsKK3N0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3UGF0Y2goY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgY29uc3QgUGF0Y2gqIG1lc2gsCisgICAgICAgIEFzc2V0QXRsYXM6OkVudHJ5KiBlbnRyeSwgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAorICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCkgeworICAgIGlmIChxdWlja1JlamVjdFNldHVwU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pKSB7CiAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKICAgICB9CiAKQEAgLTI0NDcsMTEgKzIyODUsMTEgQEAKICAgICAgICAgU2tYZmVybW9kZTo6TW9kZSBtb2RlOwogICAgICAgICBnZXRBbHBoYUFuZE1vZGUocGFpbnQsICZhbHBoYSwgJm1vZGUpOwogCi0gICAgICAgIGNvbnN0IGJvb2wgcHVyZVRyYW5zbGF0ZSA9IGN1cnJlbnRUcmFuc2Zvcm0oKS5pc1B1cmVUcmFuc2xhdGUoKTsKKyAgICAgICAgY29uc3QgYm9vbCBwdXJlVHJhbnNsYXRlID0gY3VycmVudFRyYW5zZm9ybSgpLT5pc1B1cmVUcmFuc2xhdGUoKTsKICAgICAgICAgLy8gTWFyayB0aGUgY3VycmVudCBsYXllciBkaXJ0eSB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gZHJhdyB0aGUgcGF0Y2gKICAgICAgICAgaWYgKGhhc0xheWVyKCkgJiYgbWVzaC0+aGFzRW1wdHlRdWFkcykgewotICAgICAgICAgICAgY29uc3QgZmxvYXQgb2Zmc2V0WCA9IGxlZnQgKyBjdXJyZW50VHJhbnNmb3JtKCkuZ2V0VHJhbnNsYXRlWCgpOwotICAgICAgICAgICAgY29uc3QgZmxvYXQgb2Zmc2V0WSA9IHRvcCArIGN1cnJlbnRUcmFuc2Zvcm0oKS5nZXRUcmFuc2xhdGVZKCk7CisgICAgICAgICAgICBjb25zdCBmbG9hdCBvZmZzZXRYID0gbGVmdCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWCgpOworICAgICAgICAgICAgY29uc3QgZmxvYXQgb2Zmc2V0WSA9IHRvcCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWSgpOwogICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGNvdW50ID0gbWVzaC0+cXVhZHMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUmVjdCYgYm91bmRzID0gbWVzaC0+cXVhZHMuaXRlbUF0KGkpOwpAQCAtMjQ2MSwyNyArMjI5OSwyNiBAQAogICAgICAgICAgICAgICAgICAgICBkaXJ0eUxheWVyKHgsIHksIHggKyBib3VuZHMuZ2V0V2lkdGgoKSwgeSArIGJvdW5kcy5nZXRIZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZGlydHlMYXllcihsZWZ0ICsgYm91bmRzLmxlZnQsIHRvcCArIGJvdW5kcy50b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGJvdW5kcy5yaWdodCwgdG9wICsgYm91bmRzLmJvdHRvbSwgY3VycmVudFRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICsgYm91bmRzLnJpZ2h0LCB0b3AgKyBib3VuZHMuYm90dG9tLCAqY3VycmVudFRyYW5zZm9ybSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBib29sIGlnbm9yZVRyYW5zZm9ybSA9IGZhbHNlOwogICAgICAgICBpZiAoQ0NfTElLRUxZKHB1cmVUcmFuc2xhdGUpKSB7Ci0gICAgICAgICAgICBjb25zdCBmbG9hdCB4ID0gKGludCkgZmxvb3JmKGxlZnQgKyBjdXJyZW50VHJhbnNmb3JtKCkuZ2V0VHJhbnNsYXRlWCgpICsgMC41Zik7Ci0gICAgICAgICAgICBjb25zdCBmbG9hdCB5ID0gKGludCkgZmxvb3JmKHRvcCArIGN1cnJlbnRUcmFuc2Zvcm0oKS5nZXRUcmFuc2xhdGVZKCkgKyAwLjVmKTsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IHggPSAoaW50KSBmbG9vcmYobGVmdCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWCgpICsgMC41Zik7CisgICAgICAgICAgICBjb25zdCBmbG9hdCB5ID0gKGludCkgZmxvb3JmKHRvcCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWSgpICsgMC41Zik7CiAKICAgICAgICAgICAgIHJpZ2h0ID0geCArIHJpZ2h0IC0gbGVmdDsKICAgICAgICAgICAgIGJvdHRvbSA9IHkgKyBib3R0b20gLSB0b3A7Ci0gICAgICAgICAgICBkcmF3SW5kZXhlZFRleHR1cmVNZXNoKHgsIHksIHJpZ2h0LCBib3R0b20sIHRleHR1cmUtPmlkLCBhbHBoYSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAgICAgbW9kZSwgdGV4dHVyZS0+YmxlbmQsIChHTHZvaWQqKSBtZXNoLT5vZmZzZXQsIChHTHZvaWQqKSBtZXNoLT50ZXh0dXJlT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICBHTF9UUklBTkdMRVMsIG1lc2gtPmluZGV4Q291bnQsIGZhbHNlLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICBtQ2FjaGVzLnBhdGNoQ2FjaGUuZ2V0TWVzaEJ1ZmZlcigpLCB0cnVlLCAhbWVzaC0+aGFzRW1wdHlRdWFkcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkcmF3SW5kZXhlZFRleHR1cmVNZXNoKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgdGV4dHVyZS0+aWQsIGFscGhhIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICAgICBtb2RlLCB0ZXh0dXJlLT5ibGVuZCwgKEdMdm9pZCopIG1lc2gtPm9mZnNldCwgKEdMdm9pZCopIG1lc2gtPnRleHR1cmVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIEdMX1RSSUFOR0xFUywgbWVzaC0+aW5kZXhDb3VudCwgZmFsc2UsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICBtQ2FjaGVzLnBhdGNoQ2FjaGUuZ2V0TWVzaEJ1ZmZlcigpLCB0cnVlLCAhbWVzaC0+aGFzRW1wdHlRdWFkcyk7CisgICAgICAgICAgICBsZWZ0ID0geDsKKyAgICAgICAgICAgIHRvcCA9IHk7CisgICAgICAgICAgICBpZ25vcmVUcmFuc2Zvcm0gPSB0cnVlOwogICAgICAgICB9CisgICAgICAgIGRyYXdJbmRleGVkVGV4dHVyZU1lc2gobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCB0ZXh0dXJlLT5pZCwgYWxwaGEgLyAyNTUuMGYsCisgICAgICAgICAgICAgICAgbW9kZSwgdGV4dHVyZS0+YmxlbmQsIChHTHZvaWQqKSBtZXNoLT5vZmZzZXQsIChHTHZvaWQqKSBtZXNoLT50ZXh0dXJlT2Zmc2V0LAorICAgICAgICAgICAgICAgIEdMX1RSSUFOR0xFUywgbWVzaC0+aW5kZXhDb3VudCwgZmFsc2UsIGlnbm9yZVRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICBtQ2FjaGVzLnBhdGNoQ2FjaGUuZ2V0TWVzaEJ1ZmZlcigpLCBrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGUsICFtZXNoLT5oYXNFbXB0eVF1YWRzKTsKICAgICB9CiAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RyZXc7CkBAIC0yNDkyLDggKzIzMjksOCBAQAogICogd2lsbCBub3Qgc2V0IHRoZSBzY2lzc29yIGVuYWJsZSBvciBkaXJ0eSB0aGUgY3VycmVudCBsYXllciwgaWYgYW55LgogICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJvcGVybHkgZGlydHlpbmcgdGhlIGN1cnJlbnQgbGF5ZXIuCiAgKi8KLXN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3UGF0Y2hlcyhTa0JpdG1hcCogYml0bWFwLCBBc3NldEF0bGFzOjpFbnRyeSogZW50cnksCi0gICAgICAgIFRleHR1cmVWZXJ0ZXgqIHZlcnRpY2VzLCB1aW50MzJfdCBpbmRleENvdW50LCBTa1BhaW50KiBwYWludCkgeworc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdQYXRjaGVzKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIEFzc2V0QXRsYXM6OkVudHJ5KiBlbnRyeSwKKyAgICAgICAgVGV4dHVyZVZlcnRleCogdmVydGljZXMsIHVpbnQzMl90IGluZGV4Q291bnQsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgbUNhY2hlcy5hY3RpdmVUZXh0dXJlKDApOwogICAgIFRleHR1cmUqIHRleHR1cmUgPSBlbnRyeSA/IGVudHJ5LT50ZXh0dXJlIDogbUNhY2hlcy50ZXh0dXJlQ2FjaGUuZ2V0KGJpdG1hcCk7CiAgICAgaWYgKCF0ZXh0dXJlKSByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CkBAIC0yNTA3LDE0ICsyMzQ0LDE2IEBACiAgICAgZ2V0QWxwaGFBbmRNb2RlKHBhaW50LCAmYWxwaGEsICZtb2RlKTsKIAogICAgIGRyYXdJbmRleGVkVGV4dHVyZU1lc2goMC4wZiwgMC4wZiwgMS4wZiwgMS4wZiwgdGV4dHVyZS0+aWQsIGFscGhhIC8gMjU1LjBmLAotICAgICAgICAgICAgbW9kZSwgdGV4dHVyZS0+YmxlbmQsICZ2ZXJ0aWNlc1swXS5wb3NpdGlvblswXSwgJnZlcnRpY2VzWzBdLnRleHR1cmVbMF0sCi0gICAgICAgICAgICBHTF9UUklBTkdMRVMsIGluZGV4Q291bnQsIGZhbHNlLCB0cnVlLCAwLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBtb2RlLCB0ZXh0dXJlLT5ibGVuZCwgJnZlcnRpY2VzWzBdLngsICZ2ZXJ0aWNlc1swXS51LAorICAgICAgICAgICAgR0xfVFJJQU5HTEVTLCBpbmRleENvdW50LCBmYWxzZSwgdHJ1ZSwgMCwga01vZGVsVmlld01vZGVfVHJhbnNsYXRlLCBmYWxzZSk7CiAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RyZXc7CiB9CiAKLXN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3VmVydGV4QnVmZmVyKGNvbnN0IFZlcnRleEJ1ZmZlciYgdmVydGV4QnVmZmVyLCBTa1BhaW50KiBwYWludCwKK3N0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3VmVydGV4QnVmZmVyKGNvbnN0IFZlcnRleEJ1ZmZlciYgdmVydGV4QnVmZmVyLCBjb25zdCBTa1BhaW50KiBwYWludCwKICAgICAgICAgYm9vbCB1c2VPZmZzZXQpIHsKKyAgICAvLyBub3QgbWlzc2luZyBjYWxsIHRvIHF1aWNrUmVqZWN0L2RpcnR5TGF5ZXIsIGFsd2F5cyBkb25lIGF0IGEgaGlnaGVyIGxldmVsCisKICAgICBpZiAoIXZlcnRleEJ1ZmZlci5nZXRWZXJ0ZXhDb3VudCgpKSB7CiAgICAgICAgIC8vIG5vIHZlcnRpY2VzIHRvIGRyYXcKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwpAQCAtMjUzMiwxMiArMjM3MSwxMiBAQAogICAgIHNldHVwRHJhd1NoYWRlcigpOwogICAgIHNldHVwRHJhd0JsZW5kaW5nKGlzQUEsIG1vZGUpOwogICAgIHNldHVwRHJhd1Byb2dyYW0oKTsKLSAgICBzZXR1cERyYXdNb2RlbFZpZXdJZGVudGl0eSh1c2VPZmZzZXQpOworICAgIHNldHVwRHJhd01vZGVsVmlldyhrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGUsIHVzZU9mZnNldCwgMCwgMCwgMCwgMCk7CiAgICAgc2V0dXBEcmF3Q29sb3JVbmlmb3JtcygpOwogICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyVW5pZm9ybXMoKTsKLSAgICBzZXR1cERyYXdTaGFkZXJJZGVudGl0eVVuaWZvcm1zKCk7CisgICAgc2V0dXBEcmF3U2hhZGVyVW5pZm9ybXMoKTsKIAotICAgIHZvaWQqIHZlcnRpY2VzID0gdmVydGV4QnVmZmVyLmdldEJ1ZmZlcigpOworICAgIGNvbnN0IHZvaWQqIHZlcnRpY2VzID0gdmVydGV4QnVmZmVyLmdldEJ1ZmZlcigpOwogICAgIGJvb2wgZm9yY2UgPSBtQ2FjaGVzLnVuYmluZE1lc2hCdWZmZXIoKTsKICAgICBtQ2FjaGVzLmJpbmRQb3NpdGlvblZlcnRleFBvaW50ZXIodHJ1ZSwgdmVydGljZXMsIGlzQUEgPyBnQWxwaGFWZXJ0ZXhTdHJpZGUgOiBnVmVydGV4U3RyaWRlKTsKICAgICBtQ2FjaGVzLnJlc2V0VGV4Q29vcmRzVmVydGV4UG9pbnRlcigpOwpAQCAtMjU3MSwxNSArMjQxMCwxNSBAQAogICoKICAqIERvZXNuJ3QgeWV0IHN1cHBvcnQgam9pbnMsIGNhcHMsIG9yIHBhdGggZWZmZWN0cy4KICAqLwotc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdDb252ZXhQYXRoKGNvbnN0IFNrUGF0aCYgcGF0aCwgU2tQYWludCogcGFpbnQpIHsKK3N0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3Q29udmV4UGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgVmVydGV4QnVmZmVyIHZlcnRleEJ1ZmZlcjsKICAgICAvLyBUT0RPOiB0cnkgY2xpcHBpbmcgbGFyZ2UgcGF0aHMgdG8gdmlld3BvcnQKLSAgICBQYXRoVGVzc2VsbGF0b3I6OnRlc3NlbGxhdGVQYXRoKHBhdGgsIHBhaW50LCBtU25hcHNob3QtPnRyYW5zZm9ybSwgdmVydGV4QnVmZmVyKTsKKyAgICBQYXRoVGVzc2VsbGF0b3I6OnRlc3NlbGxhdGVQYXRoKHBhdGgsIHBhaW50LCAqY3VycmVudFRyYW5zZm9ybSgpLCB2ZXJ0ZXhCdWZmZXIpOwogCiAgICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAgU2tSZWN0IGJvdW5kcyA9IHBhdGguZ2V0Qm91bmRzKCk7Ci0gICAgICAgIFBhdGhUZXNzZWxsYXRvcjo6ZXhwYW5kQm91bmRzRm9yU3Ryb2tlKGJvdW5kcywgcGFpbnQsIGZhbHNlKTsKLSAgICAgICAgZGlydHlMYXllcihib3VuZHMuZkxlZnQsIGJvdW5kcy5mVG9wLCBib3VuZHMuZlJpZ2h0LCBib3VuZHMuZkJvdHRvbSwgY3VycmVudFRyYW5zZm9ybSgpKTsKKyAgICAgICAgUGF0aFRlc3NlbGxhdG9yOjpleHBhbmRCb3VuZHNGb3JTdHJva2UoYm91bmRzLCBwYWludCk7CisgICAgICAgIGRpcnR5TGF5ZXIoYm91bmRzLmZMZWZ0LCBib3VuZHMuZlRvcCwgYm91bmRzLmZSaWdodCwgYm91bmRzLmZCb3R0b20sICpjdXJyZW50VHJhbnNmb3JtKCkpOwogICAgIH0KIAogICAgIHJldHVybiBkcmF3VmVydGV4QnVmZmVyKHZlcnRleEJ1ZmZlciwgcGFpbnQpOwpAQCAtMjU5NiwzOSArMjQzNSw0MSBAQAogICogVE9ETzogdHJ5IHVzaW5nIGEgZml4ZWQgaW5wdXQgYnVmZmVyIGZvciBub24tY2FwcGVkIGxpbmVzIGFzIGluIHRleHQgcmVuZGVyaW5nLiB0aGlzIG1heSByZWR1Y2UKICAqIG1lbW9yeSB0cmFuc2ZlciBieSByZW1vdmluZyBuZWVkIGZvciBkZWdlbmVyYXRlIHZlcnRpY2VzLgogICovCi1zdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd0xpbmVzKGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgU2tQYWludCogcGFpbnQpIHsKLSAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSB8fCBjb3VudCA8IDQpIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKK3N0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3TGluZXMoY29uc3QgZmxvYXQqIHBvaW50cywgaW50IGNvdW50LCBjb25zdCBTa1BhaW50KiBwYWludCkgeworICAgIGlmIChjdXJyZW50U25hcHNob3QoKS0+aXNJZ25vcmVkKCkgfHwgY291bnQgPCA0KSByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAKICAgICBjb3VudCAmPSB+MHgzOyAvLyByb3VuZCBkb3duIHRvIG5lYXJlc3QgZm91cgogCiAgICAgVmVydGV4QnVmZmVyIGJ1ZmZlcjsKICAgICBTa1JlY3QgYm91bmRzOwotICAgIFBhdGhUZXNzZWxsYXRvcjo6dGVzc2VsbGF0ZUxpbmVzKHBvaW50cywgY291bnQsIHBhaW50LCBtU25hcHNob3QtPnRyYW5zZm9ybSwgYm91bmRzLCBidWZmZXIpOworICAgIFBhdGhUZXNzZWxsYXRvcjo6dGVzc2VsbGF0ZUxpbmVzKHBvaW50cywgY291bnQsIHBhaW50LCAqY3VycmVudFRyYW5zZm9ybSgpLCBib3VuZHMsIGJ1ZmZlcik7CiAKLSAgICBpZiAocXVpY2tSZWplY3QoYm91bmRzLmZMZWZ0LCBib3VuZHMuZlRvcCwgYm91bmRzLmZSaWdodCwgYm91bmRzLmZCb3R0b20pKSB7CisgICAgLy8gY2FuJ3QgcGFzcyBwYWludCwgc2luY2Ugc3R5bGUgd291bGQgYmUgY2hlY2tlZCBmb3Igb3V0c2V0LiBvdXRzZXQgZG9uZSBieSB0ZXNzZWxsYXRpb24uCisgICAgaWYgKHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGJvdW5kcy5mTGVmdCwgYm91bmRzLmZUb3AsIGJvdW5kcy5mUmlnaHQsIGJvdW5kcy5mQm90dG9tKSkgewogICAgICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgfQogCi0gICAgZGlydHlMYXllcihib3VuZHMuZkxlZnQsIGJvdW5kcy5mVG9wLCBib3VuZHMuZlJpZ2h0LCBib3VuZHMuZkJvdHRvbSwgY3VycmVudFRyYW5zZm9ybSgpKTsKKyAgICBkaXJ0eUxheWVyKGJvdW5kcy5mTGVmdCwgYm91bmRzLmZUb3AsIGJvdW5kcy5mUmlnaHQsIGJvdW5kcy5mQm90dG9tLCAqY3VycmVudFRyYW5zZm9ybSgpKTsKIAogICAgIGJvb2wgdXNlT2Zmc2V0ID0gIXBhaW50LT5pc0FudGlBbGlhcygpOwogICAgIHJldHVybiBkcmF3VmVydGV4QnVmZmVyKGJ1ZmZlciwgcGFpbnQsIHVzZU9mZnNldCk7CiB9CiAKLXN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3UG9pbnRzKGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgU2tQYWludCogcGFpbnQpIHsKLSAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSB8fCBjb3VudCA8IDIpIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKK3N0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3UG9pbnRzKGNvbnN0IGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQpIHsKKyAgICBpZiAoY3VycmVudFNuYXBzaG90KCktPmlzSWdub3JlZCgpIHx8IGNvdW50IDwgMikgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogCiAgICAgY291bnQgJj0gfjB4MTsgLy8gcm91bmQgZG93biB0byBuZWFyZXN0IHR3bwogCiAgICAgVmVydGV4QnVmZmVyIGJ1ZmZlcjsKICAgICBTa1JlY3QgYm91bmRzOwotICAgIFBhdGhUZXNzZWxsYXRvcjo6dGVzc2VsbGF0ZVBvaW50cyhwb2ludHMsIGNvdW50LCBwYWludCwgbVNuYXBzaG90LT50cmFuc2Zvcm0sIGJvdW5kcywgYnVmZmVyKTsKKyAgICBQYXRoVGVzc2VsbGF0b3I6OnRlc3NlbGxhdGVQb2ludHMocG9pbnRzLCBjb3VudCwgcGFpbnQsICpjdXJyZW50VHJhbnNmb3JtKCksIGJvdW5kcywgYnVmZmVyKTsKIAotICAgIGlmIChxdWlja1JlamVjdChib3VuZHMuZkxlZnQsIGJvdW5kcy5mVG9wLCBib3VuZHMuZlJpZ2h0LCBib3VuZHMuZkJvdHRvbSkpIHsKKyAgICAvLyBjYW4ndCBwYXNzIHBhaW50LCBzaW5jZSBzdHlsZSB3b3VsZCBiZSBjaGVja2VkIGZvciBvdXRzZXQuIG91dHNldCBkb25lIGJ5IHRlc3NlbGxhdGlvbi4KKyAgICBpZiAocXVpY2tSZWplY3RTZXR1cFNjaXNzb3IoYm91bmRzLmZMZWZ0LCBib3VuZHMuZlRvcCwgYm91bmRzLmZSaWdodCwgYm91bmRzLmZCb3R0b20pKSB7CiAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKICAgICB9CiAKLSAgICBkaXJ0eUxheWVyKGJvdW5kcy5mTGVmdCwgYm91bmRzLmZUb3AsIGJvdW5kcy5mUmlnaHQsIGJvdW5kcy5mQm90dG9tLCBjdXJyZW50VHJhbnNmb3JtKCkpOworICAgIGRpcnR5TGF5ZXIoYm91bmRzLmZMZWZ0LCBib3VuZHMuZlRvcCwgYm91bmRzLmZSaWdodCwgYm91bmRzLmZCb3R0b20sICpjdXJyZW50VHJhbnNmb3JtKCkpOwogCiAgICAgYm9vbCB1c2VPZmZzZXQgPSAhcGFpbnQtPmlzQW50aUFsaWFzKCk7CiAgICAgcmV0dXJuIGRyYXdWZXJ0ZXhCdWZmZXIoYnVmZmVyLCBwYWludCwgdXNlT2Zmc2V0KTsKQEAgLTI2MzYsOSArMjQ3Nyw5IEBACiAKIHN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3Q29sb3IoaW50IGNvbG9yLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUpIHsKICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhlIGNsaXAsIHdlIGZpbGwgdGhlIGNsaXAgcmVnaW9uCi0gICAgaWYgKG1TbmFwc2hvdC0+aXNJZ25vcmVkKCkpIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKKyAgICBpZiAoY3VycmVudFNuYXBzaG90KCktPmlzSWdub3JlZCgpKSByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAKLSAgICBSZWN0JiBjbGlwKCptU25hcHNob3QtPmNsaXBSZWN0KTsKKyAgICBSZWN0IGNsaXAoKmN1cnJlbnRDbGlwUmVjdCgpKTsKICAgICBjbGlwLnNuYXBUb1BpeGVsQm91bmRhcmllcygpOwogCiAgICAgZHJhd0NvbG9yUmVjdChjbGlwLmxlZnQsIGNsaXAudG9wLCBjbGlwLnJpZ2h0LCBjbGlwLmJvdHRvbSwgY29sb3IsIG1vZGUsIHRydWUpOwpAQCAtMjY0Nyw3ICsyNDg4LDcgQEAKIH0KIAogc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdTaGFwZShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGNvbnN0IFBhdGhUZXh0dXJlKiB0ZXh0dXJlLAotICAgICAgICBTa1BhaW50KiBwYWludCkgeworICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIGlmICghdGV4dHVyZSkgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIGNvbnN0IEF1dG9UZXh0dXJlIGF1dG9DbGVhbnVwKHRleHR1cmUpOwogCkBAIC0yNjYwLDggKzI1MDEsOCBAQAogfQogCiBzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1JvdW5kUmVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgIGZsb2F0IHJ4LCBmbG9hdCByeSwgU2tQYWludCogcCkgewotICAgIGlmIChtU25hcHNob3QtPmlzSWdub3JlZCgpIHx8IHF1aWNrUmVqZWN0UHJlU3Ryb2tlKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcCkgfHwKKyAgICAgICAgZmxvYXQgcngsIGZsb2F0IHJ5LCBjb25zdCBTa1BhaW50KiBwKSB7CisgICAgaWYgKGN1cnJlbnRTbmFwc2hvdCgpLT5pc0lnbm9yZWQoKSB8fCBxdWlja1JlamVjdFNldHVwU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHApIHx8CiAgICAgICAgICAgICAocC0+Z2V0QWxwaGEoKSA9PSAwICYmIGdldFhmZXJtb2RlKHAtPmdldFhmZXJtb2RlKCkpICE9IFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKSkgewogICAgICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgfQpAQCAtMjY4NSw4ICsyNTI2LDggQEAKICAgICByZXR1cm4gZHJhd0NvbnZleFBhdGgocGF0aCwgcCk7CiB9CiAKLXN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3Q2lyY2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywgU2tQYWludCogcCkgewotICAgIGlmIChtU25hcHNob3QtPmlzSWdub3JlZCgpIHx8IHF1aWNrUmVqZWN0UHJlU3Ryb2tlKHggLSByYWRpdXMsIHkgLSByYWRpdXMsCitzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd0NpcmNsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCByYWRpdXMsIGNvbnN0IFNrUGFpbnQqIHApIHsKKyAgICBpZiAoY3VycmVudFNuYXBzaG90KCktPmlzSWdub3JlZCgpIHx8IHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKHggLSByYWRpdXMsIHkgLSByYWRpdXMsCiAgICAgICAgICAgICB4ICsgcmFkaXVzLCB5ICsgcmFkaXVzLCBwKSB8fAogICAgICAgICAgICAgKHAtPmdldEFscGhhKCkgPT0gMCAmJiBnZXRYZmVybW9kZShwLT5nZXRYZmVybW9kZSgpKSAhPSBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZSkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwpAQCAtMjcwNyw4ICsyNTQ4LDggQEAKIH0KIAogc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdPdmFsKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgU2tQYWludCogcCkgewotICAgIGlmIChtU25hcHNob3QtPmlzSWdub3JlZCgpIHx8IHF1aWNrUmVqZWN0UHJlU3Ryb2tlKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcCkgfHwKKyAgICAgICAgY29uc3QgU2tQYWludCogcCkgeworICAgIGlmIChjdXJyZW50U25hcHNob3QoKS0+aXNJZ25vcmVkKCkgfHwgcXVpY2tSZWplY3RTZXR1cFNjaXNzb3IobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBwKSB8fAogICAgICAgICAgICAgKHAtPmdldEFscGhhKCkgPT0gMCAmJiBnZXRYZmVybW9kZShwLT5nZXRYZmVybW9kZSgpKSAhPSBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZSkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KQEAgLTI3MjksOCArMjU3MCw4IEBACiB9CiAKIHN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3QXJjKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgc3dlZXBBbmdsZSwgYm9vbCB1c2VDZW50ZXIsIFNrUGFpbnQqIHApIHsKLSAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSB8fCBxdWlja1JlamVjdFByZVN0cm9rZShsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHApIHx8CisgICAgICAgIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IHN3ZWVwQW5nbGUsIGJvb2wgdXNlQ2VudGVyLCBjb25zdCBTa1BhaW50KiBwKSB7CisgICAgaWYgKGN1cnJlbnRTbmFwc2hvdCgpLT5pc0lnbm9yZWQoKSB8fCBxdWlja1JlamVjdFNldHVwU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHApIHx8CiAgICAgICAgICAgICAocC0+Z2V0QWxwaGEoKSA9PSAwICYmIGdldFhmZXJtb2RlKHAtPmdldFhmZXJtb2RlKCkpICE9IFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKSkgewogICAgICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgfQpAQCAtMjc2Niw4ICsyNjA3LDkgQEAKIC8vIFNlZSBTa1BhaW50RGVmYXVsdHMuaAogI2RlZmluZSBTa1BhaW50RGVmYXVsdHNfTWl0ZXJMaW1pdCBTa0ludFRvU2NhbGFyKDQpCiAKLXN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3UmVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIFNrUGFpbnQqIHApIHsKLSAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSB8fCBxdWlja1JlamVjdFByZVN0cm9rZShsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHApIHx8CitzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1JlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAorICAgICAgICBjb25zdCBTa1BhaW50KiBwKSB7CisgICAgaWYgKGN1cnJlbnRTbmFwc2hvdCgpLT5pc0lnbm9yZWQoKSB8fCBxdWlja1JlamVjdFNldHVwU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHApIHx8CiAgICAgICAgICAgICAocC0+Z2V0QWxwaGEoKSA9PSAwICYmIGdldFhmZXJtb2RlKHAtPmdldFhmZXJtb2RlKCkpICE9IFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKSkgewogICAgICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgfQpAQCAtMjc5MSw3ICsyNjMzLDcgQEAKICAgICAgICAgcmV0dXJuIGRyYXdDb252ZXhQYXRoKHBhdGgsIHApOwogICAgIH0KIAotICAgIGlmIChwLT5pc0FudGlBbGlhcygpICYmICFjdXJyZW50VHJhbnNmb3JtKCkuaXNTaW1wbGUoKSkgeworICAgIGlmIChwLT5pc0FudGlBbGlhcygpICYmICFjdXJyZW50VHJhbnNmb3JtKCktPmlzU2ltcGxlKCkpIHsKICAgICAgICAgU2tQYXRoIHBhdGg7CiAgICAgICAgIHBhdGguYWRkUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgICAgICByZXR1cm4gZHJhd0NvbnZleFBhdGgocGF0aCwgcCk7CkBAIC0yODAxLDkgKzI2NDMsOSBAQAogICAgIH0KIH0KIAotdm9pZCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1RleHRTaGFkb3coU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIGludCBieXRlc0NvdW50LCBpbnQgY291bnQsCi0gICAgICAgIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMsIEZvbnRSZW5kZXJlciYgZm9udFJlbmRlcmVyLCBpbnQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwKLSAgICAgICAgZmxvYXQgeCwgZmxvYXQgeSkgewordm9pZCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1RleHRTaGFkb3coY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsCisgICAgICAgIGludCBieXRlc0NvdW50LCBpbnQgY291bnQsIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMsCisgICAgICAgIEZvbnRSZW5kZXJlciYgZm9udFJlbmRlcmVyLCBpbnQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwgZmxvYXQgeCwgZmxvYXQgeSkgewogICAgIG1DYWNoZXMuYWN0aXZlVGV4dHVyZSgwKTsKIAogICAgIC8vIE5PVEU6IFRoZSBkcm9wIHNoYWRvdyB3aWxsIG5vdCBwZXJmb3JtIGdhbW1hIGNvcnJlY3Rpb24KQEAgLTI4MzIsNyArMjY3NCw4IEBACiAgICAgc2V0dXBEcmF3U2hhZGVyKCk7CiAgICAgc2V0dXBEcmF3QmxlbmRpbmcodHJ1ZSwgbW9kZSk7CiAgICAgc2V0dXBEcmF3UHJvZ3JhbSgpOwotICAgIHNldHVwRHJhd01vZGVsVmlldyhzeCwgc3ksIHN4ICsgc2hhZG93LT53aWR0aCwgc3kgKyBzaGFkb3ctPmhlaWdodCk7CisgICAgc2V0dXBEcmF3TW9kZWxWaWV3KGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlLCBmYWxzZSwKKyAgICAgICAgICAgIHN4LCBzeSwgc3ggKyBzaGFkb3ctPndpZHRoLCBzeSArIHNoYWRvdy0+aGVpZ2h0KTsKICAgICBzZXR1cERyYXdUZXh0dXJlKHNoYWRvdy0+aWQpOwogICAgIHNldHVwRHJhd1B1cmVDb2xvclVuaWZvcm1zKCk7CiAgICAgc2V0dXBEcmF3Q29sb3JGaWx0ZXJVbmlmb3JtcygpOwpAQCAtMjg0OCwxMyArMjY5MSwxMyBAQAogfQogCiBzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1Bvc1RleHQoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwKLSAgICAgICAgY29uc3QgZmxvYXQqIHBvc2l0aW9ucywgU2tQYWludCogcGFpbnQpIHsKLSAgICBpZiAodGV4dCA9PSBOVUxMIHx8IGNvdW50ID09IDAgfHwgbVNuYXBzaG90LT5pc0lnbm9yZWQoKSB8fCBjYW5Ta2lwVGV4dChwYWludCkpIHsKKyAgICAgICAgY29uc3QgZmxvYXQqIHBvc2l0aW9ucywgY29uc3QgU2tQYWludCogcGFpbnQpIHsKKyAgICBpZiAodGV4dCA9PSBOVUxMIHx8IGNvdW50ID09IDAgfHwgY3VycmVudFNuYXBzaG90KCktPmlzSWdub3JlZCgpIHx8IGNhblNraXBUZXh0KHBhaW50KSkgewogICAgICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgfQogCiAgICAgLy8gTk9URTogU2tpYSBkb2VzIG5vdCBzdXBwb3J0IHBlcnNwZWN0aXZlIHRyYW5zZm9ybSBvbiBkcmF3UG9zVGV4dCB5ZXQKLSAgICBpZiAoIWN1cnJlbnRUcmFuc2Zvcm0oKS5pc1NpbXBsZSgpKSB7CisgICAgaWYgKCFjdXJyZW50VHJhbnNmb3JtKCktPmlzU2ltcGxlKCkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KIApAQCAtMjg2MiwxMCArMjcwNSwxMCBAQAogCiAgICAgZmxvYXQgeCA9IDAuMGY7CiAgICAgZmxvYXQgeSA9IDAuMGY7Ci0gICAgY29uc3QgYm9vbCBwdXJlVHJhbnNsYXRlID0gY3VycmVudFRyYW5zZm9ybSgpLmlzUHVyZVRyYW5zbGF0ZSgpOworICAgIGNvbnN0IGJvb2wgcHVyZVRyYW5zbGF0ZSA9IGN1cnJlbnRUcmFuc2Zvcm0oKS0+aXNQdXJlVHJhbnNsYXRlKCk7CiAgICAgaWYgKHB1cmVUcmFuc2xhdGUpIHsKLSAgICAgICAgeCA9IChpbnQpIGZsb29yZih4ICsgY3VycmVudFRyYW5zZm9ybSgpLmdldFRyYW5zbGF0ZVgoKSArIDAuNWYpOwotICAgICAgICB5ID0gKGludCkgZmxvb3JmKHkgKyBjdXJyZW50VHJhbnNmb3JtKCkuZ2V0VHJhbnNsYXRlWSgpICsgMC41Zik7CisgICAgICAgIHggPSAoaW50KSBmbG9vcmYoeCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWCgpICsgMC41Zik7CisgICAgICAgIHkgPSAoaW50KSBmbG9vcmYoeSArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWSgpICsgMC41Zik7CiAgICAgfQogCiAgICAgRm9udFJlbmRlcmVyJiBmb250UmVuZGVyZXIgPSBtQ2FjaGVzLmZvbnRSZW5kZXJlci0+Z2V0Rm9udFJlbmRlcmVyKHBhaW50KTsKQEAgLTI4ODEsNyArMjcyNCw3IEBACiAgICAgfQogCiAgICAgLy8gUGljayB0aGUgYXBwcm9wcmlhdGUgdGV4dHVyZSBmaWx0ZXJpbmcKLSAgICBib29sIGxpbmVhckZpbHRlciA9IGN1cnJlbnRUcmFuc2Zvcm0oKS5jaGFuZ2VzQm91bmRzKCk7CisgICAgYm9vbCBsaW5lYXJGaWx0ZXIgPSBjdXJyZW50VHJhbnNmb3JtKCktPmNoYW5nZXNCb3VuZHMoKTsKICAgICBpZiAocHVyZVRyYW5zbGF0ZSAmJiAhbGluZWFyRmlsdGVyKSB7CiAgICAgICAgIGxpbmVhckZpbHRlciA9IGZhYnMoeSAtIChpbnQpIHkpID4gMC4wZiB8fCBmYWJzKHggLSAoaW50KSB4KSA+IDAuMGY7CiAgICAgfQpAQCAtMjg5Nyw3ICsyNzQwLDcgQEAKICAgICAgICAgICAgIHBvc2l0aW9ucywgaGFzQWN0aXZlTGF5ZXIgPyAmYm91bmRzIDogTlVMTCwgJmZ1bmN0b3IpKSB7CiAgICAgICAgIGlmIChoYXNBY3RpdmVMYXllcikgewogICAgICAgICAgICAgaWYgKCFwdXJlVHJhbnNsYXRlKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFRyYW5zZm9ybSgpLm1hcFJlY3QoYm91bmRzKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50VHJhbnNmb3JtKCktPm1hcFJlY3QoYm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRpcnR5TGF5ZXJVbmNoZWNrZWQoYm91bmRzLCBnZXRSZWdpb24oKSk7CiAgICAgICAgIH0KQEAgLTI5MTUsNyArMjc1OCw3IEBACiAgICAgICAgICAgICBmb250VHJhbnNmb3JtID0gbWF0NDo6aWRlbnRpdHkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZsb2F0IHN4LCBzeTsKLSAgICAgICAgICAgIGN1cnJlbnRUcmFuc2Zvcm0oKS5kZWNvbXBvc2VTY2FsZShzeCwgc3kpOworICAgICAgICAgICAgY3VycmVudFRyYW5zZm9ybSgpLT5kZWNvbXBvc2VTY2FsZShzeCwgc3kpOwogICAgICAgICAgICAgZm9udFRyYW5zZm9ybS5sb2FkU2NhbGUoc3gsIHN5LCAxLjBmKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI5MjMsMTQgKzI3NjYsMTQgQEAKIH0KIAogc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdUZXh0KGNvbnN0IGNoYXIqIHRleHQsIGludCBieXRlc0NvdW50LCBpbnQgY291bnQsIGZsb2F0IHgsIGZsb2F0IHksCi0gICAgICAgIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMsIFNrUGFpbnQqIHBhaW50LCBmbG9hdCB0b3RhbEFkdmFuY2UsIGNvbnN0IFJlY3QmIGJvdW5kcywKKyAgICAgICAgY29uc3QgZmxvYXQqIHBvc2l0aW9ucywgY29uc3QgU2tQYWludCogcGFpbnQsIGZsb2F0IHRvdGFsQWR2YW5jZSwgY29uc3QgUmVjdCYgYm91bmRzLAogICAgICAgICBEcmF3T3BNb2RlIGRyYXdPcE1vZGUpIHsKIAogICAgIGlmIChkcmF3T3BNb2RlID09IGtEcmF3T3BNb2RlX0ltbWVkaWF0ZSkgewogICAgICAgICAvLyBUaGUgY2hlY2tzIGZvciBjb3JuZXItY2FzZSBpZ25vcmFibGUgdGV4dCBhbmQgcXVpY2sgcmVqZWN0aW9uIGlzIG9ubHkgZG9uZSBmb3IgaW1tZWRpYXRlCiAgICAgICAgIC8vIGRyYXdpbmcgYXMgb3BzIGZyb20gRGVmZXJyZWREaXNwbGF5TGlzdCBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBmb3IgdGhlc2UKLSAgICAgICAgaWYgKHRleHQgPT0gTlVMTCB8fCBjb3VudCA9PSAwIHx8IG1TbmFwc2hvdC0+aXNJZ25vcmVkKCkgfHwgY2FuU2tpcFRleHQocGFpbnQpIHx8Ci0gICAgICAgICAgICAgICAgcXVpY2tSZWplY3QoYm91bmRzKSkgeworICAgICAgICBpZiAodGV4dCA9PSBOVUxMIHx8IGNvdW50ID09IDAgfHwgY3VycmVudFNuYXBzaG90KCktPmlzSWdub3JlZCgpIHx8IGNhblNraXBUZXh0KHBhaW50KSB8fAorICAgICAgICAgICAgICAgIHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGJvdW5kcykpIHsKICAgICAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKICAgICAgICAgfQogICAgIH0KQEAgLTI5MzgsNyArMjc4MSw3IEBACiAgICAgY29uc3QgZmxvYXQgb2xkWCA9IHg7CiAgICAgY29uc3QgZmxvYXQgb2xkWSA9IHk7CiAKLSAgICBjb25zdCBtYXQ0JiB0cmFuc2Zvcm0gPSBjdXJyZW50VHJhbnNmb3JtKCk7CisgICAgY29uc3QgbWF0NCYgdHJhbnNmb3JtID0gKmN1cnJlbnRUcmFuc2Zvcm0oKTsKICAgICBjb25zdCBib29sIHB1cmVUcmFuc2xhdGUgPSB0cmFuc2Zvcm0uaXNQdXJlVHJhbnNsYXRlKCk7CiAKICAgICBpZiAoQ0NfTElLRUxZKHB1cmVUcmFuc2xhdGUpKSB7CkBAIC0yOTc5LDcgKzI4MjIsNyBAQAogICAgIGZvbnRSZW5kZXJlci5zZXRUZXh0dXJlRmlsdGVyaW5nKGxpbmVhckZpbHRlcik7CiAKICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYmV0dGVyIGNsaXBwaW5nIGZvciBzY2FsZWQvcm90YXRlZCB0ZXh0Ci0gICAgY29uc3QgUmVjdCogY2xpcCA9ICFwdXJlVHJhbnNsYXRlID8gTlVMTCA6IG1TbmFwc2hvdC0+Y2xpcFJlY3Q7CisgICAgY29uc3QgUmVjdCogY2xpcCA9ICFwdXJlVHJhbnNsYXRlID8gTlVMTCA6IGN1cnJlbnRDbGlwUmVjdCgpOwogICAgIFJlY3QgbGF5ZXJCb3VuZHMoRkxUX01BWCAvIDIuMGYsIEZMVF9NQVggLyAyLjBmLCBGTFRfTUlOIC8gMi4wZiwgRkxUX01JTiAvIDIuMGYpOwogCiAgICAgYm9vbCBzdGF0dXM7CkBAIC0zMDA0LDE0ICsyODQ3LDE0IEBACiAgICAgICAgIGRpcnR5TGF5ZXJVbmNoZWNrZWQobGF5ZXJCb3VuZHMsIGdldFJlZ2lvbigpKTsKICAgICB9CiAKLSAgICBkcmF3VGV4dERlY29yYXRpb25zKHRleHQsIGJ5dGVzQ291bnQsIHRvdGFsQWR2YW5jZSwgb2xkWCwgb2xkWSwgcGFpbnQpOworICAgIGRyYXdUZXh0RGVjb3JhdGlvbnModG90YWxBZHZhbmNlLCBvbGRYLCBvbGRZLCBwYWludCk7CiAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RyZXc7CiB9CiAKLXN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3VGV4dE9uUGF0aChjb25zdCBjaGFyKiB0ZXh0LCBpbnQgYnl0ZXNDb3VudCwgaW50IGNvdW50LCBTa1BhdGgqIHBhdGgsCi0gICAgICAgIGZsb2F0IGhPZmZzZXQsIGZsb2F0IHZPZmZzZXQsIFNrUGFpbnQqIHBhaW50KSB7Ci0gICAgaWYgKHRleHQgPT0gTlVMTCB8fCBjb3VudCA9PSAwIHx8IG1TbmFwc2hvdC0+aXNJZ25vcmVkKCkgfHwgY2FuU2tpcFRleHQocGFpbnQpKSB7CitzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1RleHRPblBhdGgoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwKKyAgICAgICAgY29uc3QgU2tQYXRoKiBwYXRoLCBmbG9hdCBoT2Zmc2V0LCBmbG9hdCB2T2Zmc2V0LCBjb25zdCBTa1BhaW50KiBwYWludCkgeworICAgIGlmICh0ZXh0ID09IE5VTEwgfHwgY291bnQgPT0gMCB8fCBjdXJyZW50U25hcHNob3QoKS0+aXNJZ25vcmVkKCkgfHwgY2FuU2tpcFRleHQocGFpbnQpKSB7CiAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKICAgICB9CiAKQEAgLTMwMzUsNyArMjg3OCw3IEBACiAgICAgaWYgKGZvbnRSZW5kZXJlci5yZW5kZXJUZXh0T25QYXRoKHBhaW50LCBjbGlwLCB0ZXh0LCAwLCBieXRlc0NvdW50LCBjb3VudCwgcGF0aCwKICAgICAgICAgICAgIGhPZmZzZXQsIHZPZmZzZXQsIGhhc0FjdGl2ZUxheWVyID8gJmJvdW5kcyA6IE5VTEwsICZmdW5jdG9yKSkgewogICAgICAgICBpZiAoaGFzQWN0aXZlTGF5ZXIpIHsKLSAgICAgICAgICAgIGN1cnJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KGJvdW5kcyk7CisgICAgICAgICAgICBjdXJyZW50VHJhbnNmb3JtKCktPm1hcFJlY3QoYm91bmRzKTsKICAgICAgICAgICAgIGRpcnR5TGF5ZXJVbmNoZWNrZWQoYm91bmRzLCBnZXRSZWdpb24oKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMDQzLDggKzI4ODYsOCBAQAogICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRHJldzsKIH0KIAotc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdQYXRoKFNrUGF0aCogcGF0aCwgU2tQYWludCogcGFpbnQpIHsKLSAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSkgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOworc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdQYXRoKGNvbnN0IFNrUGF0aCogcGF0aCwgY29uc3QgU2tQYWludCogcGFpbnQpIHsKKyAgICBpZiAoY3VycmVudFNuYXBzaG90KCktPmlzSWdub3JlZCgpKSByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAKICAgICBtQ2FjaGVzLmFjdGl2ZVRleHR1cmUoMCk7CiAKQEAgLTMwNzAsMTMgKzI5MTMsMTMgQEAKICAgICAgICAgdHJhbnNmb3JtID0gJmxheWVyLT5nZXRUcmFuc2Zvcm0oKTsKICAgICAgICAgaWYgKCF0cmFuc2Zvcm0tPmlzSWRlbnRpdHkoKSkgewogICAgICAgICAgICAgc2F2ZSgwKTsKLSAgICAgICAgICAgIGN1cnJlbnRUcmFuc2Zvcm0oKS5tdWx0aXBseSgqdHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGNvbmNhdE1hdHJpeCgqdHJhbnNmb3JtKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgY2xpcFJlcXVpcmVkID0gZmFsc2U7Ci0gICAgY29uc3QgYm9vbCByZWplY3RlZCA9IHF1aWNrUmVqZWN0Tm9TY2lzc29yKHgsIHksCi0gICAgICAgICAgICB4ICsgbGF5ZXItPmxheWVyLmdldFdpZHRoKCksIHkgKyBsYXllci0+bGF5ZXIuZ2V0SGVpZ2h0KCksIGZhbHNlLCAmY2xpcFJlcXVpcmVkKTsKKyAgICBjb25zdCBib29sIHJlamVjdGVkID0gY2FsY3VsYXRlUXVpY2tSZWplY3RGb3JTY2lzc29yKHgsIHksCisgICAgICAgICAgICB4ICsgbGF5ZXItPmxheWVyLmdldFdpZHRoKCksIHkgKyBsYXllci0+bGF5ZXIuZ2V0SGVpZ2h0KCksICZjbGlwUmVxdWlyZWQsIGZhbHNlKTsKIAogICAgIGlmIChyZWplY3RlZCkgewogICAgICAgICBpZiAodHJhbnNmb3JtICYmICF0cmFuc2Zvcm0tPmlzSWRlbnRpdHkoKSkgewpAQCAtMzEwOCwxNiArMjk1MSwxNiBAQAogICAgICAgICAgICAgc2V0dXBEcmF3UHVyZUNvbG9yVW5pZm9ybXMoKTsKICAgICAgICAgICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyVW5pZm9ybXMoKTsKICAgICAgICAgICAgIHNldHVwRHJhd1RleHR1cmUobGF5ZXItPmdldFRleHR1cmUoKSk7Ci0gICAgICAgICAgICBpZiAoQ0NfTElLRUxZKGN1cnJlbnRUcmFuc2Zvcm0oKS5pc1B1cmVUcmFuc2xhdGUoKSkpIHsKLSAgICAgICAgICAgICAgICBpbnQgdHggPSAoaW50KSBmbG9vcmYoeCArIGN1cnJlbnRUcmFuc2Zvcm0oKS5nZXRUcmFuc2xhdGVYKCkgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICBpbnQgdHkgPSAoaW50KSBmbG9vcmYoeSArIGN1cnJlbnRUcmFuc2Zvcm0oKS5nZXRUcmFuc2xhdGVZKCkgKyAwLjVmKTsKKyAgICAgICAgICAgIGlmIChDQ19MSUtFTFkoY3VycmVudFRyYW5zZm9ybSgpLT5pc1B1cmVUcmFuc2xhdGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpbnQgdHggPSAoaW50KSBmbG9vcmYoeCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWCgpICsgMC41Zik7CisgICAgICAgICAgICAgICAgaW50IHR5ID0gKGludCkgZmxvb3JmKHkgKyBjdXJyZW50VHJhbnNmb3JtKCktPmdldFRyYW5zbGF0ZVkoKSArIDAuNWYpOwogCiAgICAgICAgICAgICAgICAgbGF5ZXItPnNldEZpbHRlcihHTF9ORUFSRVNUKTsKLSAgICAgICAgICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXdUcmFuc2xhdGUodHgsIHR5LAorICAgICAgICAgICAgICAgIHNldHVwRHJhd01vZGVsVmlldyhrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGUsIGZhbHNlLCB0eCwgdHksCiAgICAgICAgICAgICAgICAgICAgICAgICB0eCArIGxheWVyLT5sYXllci5nZXRXaWR0aCgpLCB0eSArIGxheWVyLT5sYXllci5nZXRIZWlnaHQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXIoR0xfTElORUFSKTsKLSAgICAgICAgICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXdUcmFuc2xhdGUoeCwgeSwKKyAgICAgICAgICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXcoa01vZGVsVmlld01vZGVfVHJhbnNsYXRlLCBmYWxzZSwgeCwgeSwKICAgICAgICAgICAgICAgICAgICAgICAgIHggKyBsYXllci0+bGF5ZXIuZ2V0V2lkdGgoKSwgeSArIGxheWVyLT5sYXllci5nZXRIZWlnaHQoKSk7CiAgICAgICAgICAgICB9CiAKQEAgLTMxMjcsNyArMjk3MCw3IEBACiAgICAgICAgICAgICB3aGlsZSAoZWxlbWVudHNDb3VudCA+IDApIHsKICAgICAgICAgICAgICAgICBHTHNpemVpIGRyYXdDb3VudCA9IG1pbihlbGVtZW50c0NvdW50LCAoR0xzaXplaSkgZ01heE51bWJlck9mUXVhZHMgKiA2KTsKIAotICAgICAgICAgICAgICAgIHNldHVwRHJhd01lc2hJbmRpY2VzKCZtZXNoWzBdLnBvc2l0aW9uWzBdLCAmbWVzaFswXS50ZXh0dXJlWzBdKTsKKyAgICAgICAgICAgICAgICBzZXR1cERyYXdNZXNoSW5kaWNlcygmbWVzaFswXS54LCAmbWVzaFswXS51KTsKICAgICAgICAgICAgICAgICBEUkFXX0RPVUJMRV9TVEVOQ0lMX0lGKCFsYXllci0+aGFzRHJhd25TaW5jZVVwZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGdsRHJhd0VsZW1lbnRzKEdMX1RSSUFOR0xFUywgZHJhd0NvdW50LCBHTF9VTlNJR05FRF9TSE9SVCwgTlVMTCkpOwogCkBAIC0zMTM4LDcgKzI5ODEsNyBAQAogICAgICAgICAgICAgfQogCiAjaWYgREVCVUdfTEFZRVJTX0FTX1JFR0lPTlMKLSAgICAgICAgICAgIGRyYXdSZWdpb25SZWN0cyhsYXllci0+cmVnaW9uKTsKKyAgICAgICAgICAgIGRyYXdSZWdpb25SZWN0c0RlYnVnKGxheWVyLT5yZWdpb24pOwogI2VuZGlmCiAgICAgICAgIH0KIApAQCAtMzIyMCw3ICszMDYzLDcgQEAKICAgICBtRHJhd01vZGlmaWVycy5tUGFpbnRGaWx0ZXJTZXRCaXRzID0gc2V0Qml0cyAmIFNrUGFpbnQ6OmtBbGxGbGFnczsKIH0KIAotU2tQYWludCogT3BlbkdMUmVuZGVyZXI6OmZpbHRlclBhaW50KFNrUGFpbnQqIHBhaW50KSB7Citjb25zdCBTa1BhaW50KiBPcGVuR0xSZW5kZXJlcjo6ZmlsdGVyUGFpbnQoY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBpZiAoQ0NfTElLRUxZKCFtRHJhd01vZGlmaWVycy5tSGFzRHJhd0ZpbHRlciB8fCAhcGFpbnQpKSB7CiAgICAgICAgIHJldHVybiBwYWludDsKICAgICB9CkBAIC0zMjM4LDcgKzMwODEsNyBAQAogLy8gRHJhd2luZyBpbXBsZW1lbnRhdGlvbgogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi1UZXh0dXJlKiBPcGVuR0xSZW5kZXJlcjo6Z2V0VGV4dHVyZShTa0JpdG1hcCogYml0bWFwKSB7CitUZXh0dXJlKiBPcGVuR0xSZW5kZXJlcjo6Z2V0VGV4dHVyZShjb25zdCBTa0JpdG1hcCogYml0bWFwKSB7CiAgICAgVGV4dHVyZSogdGV4dHVyZSA9IG1DYWNoZXMuYXNzZXRBdGxhcy5nZXRFbnRyeVRleHR1cmUoYml0bWFwKTsKICAgICBpZiAoIXRleHR1cmUpIHsKICAgICAgICAgcmV0dXJuIG1DYWNoZXMudGV4dHVyZUNhY2hlLmdldChiaXRtYXApOwpAQCAtMzI0Nyw4ICszMDkwLDggQEAKIH0KIAogdm9pZCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1BhdGhUZXh0dXJlKGNvbnN0IFBhdGhUZXh0dXJlKiB0ZXh0dXJlLAotICAgICAgICBmbG9hdCB4LCBmbG9hdCB5LCBTa1BhaW50KiBwYWludCkgewotICAgIGlmIChxdWlja1JlamVjdCh4LCB5LCB4ICsgdGV4dHVyZS0+d2lkdGgsIHkgKyB0ZXh0dXJlLT5oZWlnaHQpKSB7CisgICAgICAgIGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CisgICAgaWYgKHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKHgsIHksIHggKyB0ZXh0dXJlLT53aWR0aCwgeSArIHRleHR1cmUtPmhlaWdodCkpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzI2Myw3ICszMTA2LDggQEAKICAgICBzZXR1cERyYXdTaGFkZXIoKTsKICAgICBzZXR1cERyYXdCbGVuZGluZyh0cnVlLCBtb2RlKTsKICAgICBzZXR1cERyYXdQcm9ncmFtKCk7Ci0gICAgc2V0dXBEcmF3TW9kZWxWaWV3KHgsIHksIHggKyB0ZXh0dXJlLT53aWR0aCwgeSArIHRleHR1cmUtPmhlaWdodCk7CisgICAgc2V0dXBEcmF3TW9kZWxWaWV3KGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlLCBmYWxzZSwKKyAgICAgICAgICAgIHgsIHksIHggKyB0ZXh0dXJlLT53aWR0aCwgeSArIHRleHR1cmUtPmhlaWdodCk7CiAgICAgc2V0dXBEcmF3VGV4dHVyZSh0ZXh0dXJlLT5pZCk7CiAgICAgc2V0dXBEcmF3UHVyZUNvbG9yVW5pZm9ybXMoKTsKICAgICBzZXR1cERyYXdDb2xvckZpbHRlclVuaWZvcm1zKCk7CkBAIC0zMjc4LDggKzMxMjIsOCBAQAogI2RlZmluZSBrU3RkVW5kZXJsaW5lX09mZnNldCAgICAoMS4wZiAvIDkuMGYpCiAjZGVmaW5lIGtTdGRVbmRlcmxpbmVfVGhpY2tuZXNzICgxLjBmIC8gMTguMGYpCiAKLXZvaWQgT3BlbkdMUmVuZGVyZXI6OmRyYXdUZXh0RGVjb3JhdGlvbnMoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGZsb2F0IHVuZGVybGluZVdpZHRoLAotICAgICAgICBmbG9hdCB4LCBmbG9hdCB5LCBTa1BhaW50KiBwYWludCkgewordm9pZCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1RleHREZWNvcmF0aW9ucyhmbG9hdCB1bmRlcmxpbmVXaWR0aCwgZmxvYXQgeCwgZmxvYXQgeSwKKyAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICAvLyBIYW5kbGUgdW5kZXJsaW5lIGFuZCBzdHJpa2UtdGhyb3VnaAogICAgIHVpbnQzMl90IGZsYWdzID0gcGFpbnQtPmdldEZsYWdzKCk7CiAgICAgaWYgKGZsYWdzICYgKFNrUGFpbnQ6OmtVbmRlcmxpbmVUZXh0X0ZsYWcgfCBTa1BhaW50OjprU3RyaWtlVGhydVRleHRfRmxhZykpIHsKQEAgLTMzMjMsOCArMzE2Nyw4IEBACiAgICAgfQogfQogCi1zdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1JlY3RzKGNvbnN0IGZsb2F0KiByZWN0cywgaW50IGNvdW50LCBTa1BhaW50KiBwYWludCkgewotICAgIGlmIChtU25hcHNob3QtPmlzSWdub3JlZCgpKSB7CitzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1JlY3RzKGNvbnN0IGZsb2F0KiByZWN0cywgaW50IGNvdW50LCBjb25zdCBTa1BhaW50KiBwYWludCkgeworICAgIGlmIChjdXJyZW50U25hcHNob3QoKS0+aXNJZ25vcmVkKCkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KIApAQCAtMzMzOCw2ICszMTgyLDMyIEBACiAgICAgcmV0dXJuIGRyYXdDb2xvclJlY3RzKHJlY3RzLCBjb3VudCwgY29sb3IsIG1vZGUpOwogfQogCitzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1NoYWRvdyhjb25zdCBtYXQ0JiBjYXN0ZXJUcmFuc2Zvcm0sIGZsb2F0IGNhc3RlckFscGhhLAorICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSB7CisgICAgaWYgKGN1cnJlbnRTbmFwc2hvdCgpLT5pc0lnbm9yZWQoKSkgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOworCisgICAgLy8gRm9yIG5vdywgYWx3YXlzIGFuZCBzY2lzc29yCisgICAgLy8gVE9ETzogdXNlIHF1aWNrUmVqZWN0CisgICAgbUNhY2hlcy5lbmFibGVTY2lzc29yKCk7CisKKyAgICBTa1BhaW50IHBhaW50OworICAgIHBhaW50LnNldENvbG9yKG1DYWNoZXMucHJvcGVydHlTaGFkb3dTdHJlbmd0aCA8PCAyNCk7CisgICAgcGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOyAvLyB3YW50IHRvIHVzZSBBbHBoYVZlcnRleAorCisgICAgVmVydGV4QnVmZmVyIGFtYmllbnRTaGFkb3dWZXJ0ZXhCdWZmZXI7CisgICAgU2hhZG93VGVzc2VsbGF0b3I6OnRlc3NlbGxhdGVBbWJpZW50U2hhZG93KHdpZHRoLCBoZWlnaHQsIGNhc3RlclRyYW5zZm9ybSwKKyAgICAgICAgICAgIGFtYmllbnRTaGFkb3dWZXJ0ZXhCdWZmZXIpOworICAgIGRyYXdWZXJ0ZXhCdWZmZXIoYW1iaWVudFNoYWRvd1ZlcnRleEJ1ZmZlciwgJnBhaW50KTsKKworICAgIFZlcnRleEJ1ZmZlciBzcG90U2hhZG93VmVydGV4QnVmZmVyOworICAgIFNoYWRvd1Rlc3NlbGxhdG9yOjp0ZXNzZWxsYXRlU3BvdFNoYWRvdyh3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgKmN1cnJlbnRUcmFuc2Zvcm0oKSwgZ2V0V2lkdGgoKSwgZ2V0SGVpZ2h0KCksCisgICAgICAgICAgICBjYXN0ZXJUcmFuc2Zvcm0sIHNwb3RTaGFkb3dWZXJ0ZXhCdWZmZXIpOworICAgIGRyYXdWZXJ0ZXhCdWZmZXIoc3BvdFNoYWRvd1ZlcnRleEJ1ZmZlciwgJnBhaW50KTsKKworICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRHJldzsKK30KKwogc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdDb2xvclJlY3RzKGNvbnN0IGZsb2F0KiByZWN0cywgaW50IGNvdW50LCBpbnQgY29sb3IsCiAgICAgICAgIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwgYm9vbCBpZ25vcmVUcmFuc2Zvcm0sIGJvb2wgZGlydHksIGJvb2wgY2xpcCkgewogICAgIGlmIChjb3VudCA9PSAwKSB7CkBAIC0zMzY5LDI4ICszMjM5LDI5IEBACiAgICAgICAgIGJvdHRvbSA9IGZtYXhmKGJvdHRvbSwgYik7CiAgICAgfQogCi0gICAgaWYgKGNsaXAgJiYgcXVpY2tSZWplY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSkgeworICAgIGlmIChjbGlwICYmIHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KIAogICAgIHNldHVwRHJhdygpOwogICAgIHNldHVwRHJhd05vVGV4dHVyZSgpOwotICAgIHNldHVwRHJhd0NvbG9yKGNvbG9yLCAoKGNvbG9yID4+IDI0KSAmIDB4RkYpICogbVNuYXBzaG90LT5hbHBoYSk7CisgICAgc2V0dXBEcmF3Q29sb3IoY29sb3IsICgoY29sb3IgPj4gMjQpICYgMHhGRikgKiBjdXJyZW50U25hcHNob3QoKS0+YWxwaGEpOwogICAgIHNldHVwRHJhd1NoYWRlcigpOwogICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyKCk7CiAgICAgc2V0dXBEcmF3QmxlbmRpbmcobW9kZSk7CiAgICAgc2V0dXBEcmF3UHJvZ3JhbSgpOwogICAgIHNldHVwRHJhd0RpcnR5UmVnaW9uc0Rpc2FibGVkKCk7Ci0gICAgc2V0dXBEcmF3TW9kZWxWaWV3KDAuMGYsIDAuMGYsIDEuMGYsIDEuMGYsIGlnbm9yZVRyYW5zZm9ybSwgdHJ1ZSk7CisgICAgc2V0dXBEcmF3TW9kZWxWaWV3KGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZSwgZmFsc2UsCisgICAgICAgICAgICAwLjBmLCAwLjBmLCAwLjBmLCAwLjBmLCBpZ25vcmVUcmFuc2Zvcm0pOwogICAgIHNldHVwRHJhd0NvbG9yVW5pZm9ybXMoKTsKICAgICBzZXR1cERyYXdTaGFkZXJVbmlmb3JtcygpOwogICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyVW5pZm9ybXMoKTsKIAogICAgIGlmIChkaXJ0eSAmJiBoYXNMYXllcigpKSB7Ci0gICAgICAgIGRpcnR5TGF5ZXIobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBjdXJyZW50VHJhbnNmb3JtKCkpOworICAgICAgICBkaXJ0eUxheWVyKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgKmN1cnJlbnRUcmFuc2Zvcm0oKSk7CiAgICAgfQogCi0gICAgZHJhd0luZGV4ZWRRdWFkcygmbWVzaFswXSwgY291bnQgLyA0KTsKKyAgICBpc3N1ZUluZGV4ZWRRdWFkRHJhdygmbWVzaFswXSwgY291bnQgLyA0KTsKIAogICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRHJldzsKIH0KQEAgLTM0MDQsMTIgKzMyNzUsMTMgQEAKIAogICAgIHNldHVwRHJhdygpOwogICAgIHNldHVwRHJhd05vVGV4dHVyZSgpOwotICAgIHNldHVwRHJhd0NvbG9yKGNvbG9yLCAoKGNvbG9yID4+IDI0KSAmIDB4RkYpICogbVNuYXBzaG90LT5hbHBoYSk7CisgICAgc2V0dXBEcmF3Q29sb3IoY29sb3IsICgoY29sb3IgPj4gMjQpICYgMHhGRikgKiBjdXJyZW50U25hcHNob3QoKS0+YWxwaGEpOwogICAgIHNldHVwRHJhd1NoYWRlcigpOwogICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyKCk7CiAgICAgc2V0dXBEcmF3QmxlbmRpbmcobW9kZSk7CiAgICAgc2V0dXBEcmF3UHJvZ3JhbSgpOwotICAgIHNldHVwRHJhd01vZGVsVmlldyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGlnbm9yZVRyYW5zZm9ybSk7CisgICAgc2V0dXBEcmF3TW9kZWxWaWV3KGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlLCBmYWxzZSwKKyAgICAgICAgICAgIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgaWdub3JlVHJhbnNmb3JtKTsKICAgICBzZXR1cERyYXdDb2xvclVuaWZvcm1zKCk7CiAgICAgc2V0dXBEcmF3U2hhZGVyVW5pZm9ybXMoaWdub3JlVHJhbnNmb3JtKTsKICAgICBzZXR1cERyYXdDb2xvckZpbHRlclVuaWZvcm1zKCk7CkBAIC0zNDE5LDcgKzMyOTEsNyBAQAogfQogCiB2b2lkIE9wZW5HTFJlbmRlcmVyOjpkcmF3VGV4dHVyZVJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICBUZXh0dXJlKiB0ZXh0dXJlLCBTa1BhaW50KiBwYWludCkgeworICAgICAgICBUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIGludCBhbHBoYTsKICAgICBTa1hmZXJtb2RlOjpNb2RlIG1vZGU7CiAgICAgZ2V0QWxwaGFBbmRNb2RlKHBhaW50LCAmYWxwaGEsICZtb2RlKTsKQEAgLTM0MzAsOCArMzMwMiw4IEBACiAgICAgR0x2b2lkKiB0ZXhDb29yZHMgPSAoR0x2b2lkKikgZ01lc2hUZXh0dXJlT2Zmc2V0OwogCiAgICAgaWYgKHRleHR1cmUtPnV2TWFwcGVyKSB7Ci0gICAgICAgIHZlcnRpY2VzID0gJm1NZXNoVmVydGljZXNbMF0ucG9zaXRpb25bMF07Ci0gICAgICAgIHRleENvb3JkcyA9ICZtTWVzaFZlcnRpY2VzWzBdLnRleHR1cmVbMF07CisgICAgICAgIHZlcnRpY2VzID0gJm1NZXNoVmVydGljZXNbMF0ueDsKKyAgICAgICAgdGV4Q29vcmRzID0gJm1NZXNoVmVydGljZXNbMF0udTsKIAogICAgICAgICBSZWN0IHV2cygwLjBmLCAwLjBmLCAxLjBmLCAxLjBmKTsKICAgICAgICAgdGV4dHVyZS0+dXZNYXBwZXItPm1hcCh1dnMpOwpAQCAtMzQzOSw5ICszMzExLDkgQEAKICAgICAgICAgcmVzZXREcmF3VGV4dHVyZVRleENvb3Jkcyh1dnMubGVmdCwgdXZzLnRvcCwgdXZzLnJpZ2h0LCB1dnMuYm90dG9tKTsKICAgICB9CiAKLSAgICBpZiAoQ0NfTElLRUxZKGN1cnJlbnRUcmFuc2Zvcm0oKS5pc1B1cmVUcmFuc2xhdGUoKSkpIHsKLSAgICAgICAgY29uc3QgZmxvYXQgeCA9IChpbnQpIGZsb29yZihsZWZ0ICsgY3VycmVudFRyYW5zZm9ybSgpLmdldFRyYW5zbGF0ZVgoKSArIDAuNWYpOwotICAgICAgICBjb25zdCBmbG9hdCB5ID0gKGludCkgZmxvb3JmKHRvcCArIGN1cnJlbnRUcmFuc2Zvcm0oKS5nZXRUcmFuc2xhdGVZKCkgKyAwLjVmKTsKKyAgICBpZiAoQ0NfTElLRUxZKGN1cnJlbnRUcmFuc2Zvcm0oKS0+aXNQdXJlVHJhbnNsYXRlKCkpKSB7CisgICAgICAgIGNvbnN0IGZsb2F0IHggPSAoaW50KSBmbG9vcmYobGVmdCArIGN1cnJlbnRUcmFuc2Zvcm0oKS0+Z2V0VHJhbnNsYXRlWCgpICsgMC41Zik7CisgICAgICAgIGNvbnN0IGZsb2F0IHkgPSAoaW50KSBmbG9vcmYodG9wICsgY3VycmVudFRyYW5zZm9ybSgpLT5nZXRUcmFuc2xhdGVZKCkgKyAwLjVmKTsKIAogICAgICAgICB0ZXh0dXJlLT5zZXRGaWx0ZXIoR0xfTkVBUkVTVCwgdHJ1ZSk7CiAgICAgICAgIGRyYXdUZXh0dXJlTWVzaCh4LCB5LCB4ICsgdGV4dHVyZS0+d2lkdGgsIHkgKyB0ZXh0dXJlLT5oZWlnaHQsIHRleHR1cmUtPmlkLApAQCAtMzQ2Nyw3ICszMzM5LDggQEAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OmRyYXdUZXh0dXJlTWVzaChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCiAgICAgICAgIEdMdWludCB0ZXh0dXJlLCBmbG9hdCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBib29sIGJsZW5kLAogICAgICAgICBHTHZvaWQqIHZlcnRpY2VzLCBHTHZvaWQqIHRleENvb3JkcywgR0xlbnVtIGRyYXdNb2RlLCBHTHNpemVpIGVsZW1lbnRzQ291bnQsCi0gICAgICAgIGJvb2wgc3dhcFNyY0RzdCwgYm9vbCBpZ25vcmVUcmFuc2Zvcm0sIEdMdWludCB2Ym8sIGJvb2wgaWdub3JlU2NhbGUsIGJvb2wgZGlydHkpIHsKKyAgICAgICAgYm9vbCBzd2FwU3JjRHN0LCBib29sIGlnbm9yZVRyYW5zZm9ybSwgR0x1aW50IHZibywKKyAgICAgICAgTW9kZWxWaWV3TW9kZSBtb2RlbFZpZXdNb2RlLCBib29sIGRpcnR5KSB7CiAKICAgICBzZXR1cERyYXcoKTsKICAgICBzZXR1cERyYXdXaXRoVGV4dHVyZSgpOwpAQCAtMzQ3NiwxMSArMzM0OSw3IEBACiAgICAgc2V0dXBEcmF3QmxlbmRpbmcoYmxlbmQsIG1vZGUsIHN3YXBTcmNEc3QpOwogICAgIHNldHVwRHJhd1Byb2dyYW0oKTsKICAgICBpZiAoIWRpcnR5KSBzZXR1cERyYXdEaXJ0eVJlZ2lvbnNEaXNhYmxlZCgpOwotICAgIGlmICghaWdub3JlU2NhbGUpIHsKLSAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgaWdub3JlVHJhbnNmb3JtKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXdUcmFuc2xhdGUobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBpZ25vcmVUcmFuc2Zvcm0pOwotICAgIH0KKyAgICBzZXR1cERyYXdNb2RlbFZpZXcobW9kZWxWaWV3TW9kZSwgZmFsc2UsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgaWdub3JlVHJhbnNmb3JtKTsKICAgICBzZXR1cERyYXdUZXh0dXJlKHRleHR1cmUpOwogICAgIHNldHVwRHJhd1B1cmVDb2xvclVuaWZvcm1zKCk7CiAgICAgc2V0dXBEcmF3Q29sb3JGaWx0ZXJVbmlmb3JtcygpOwpAQCAtMzQ5Miw3ICszMzYxLDggQEAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OmRyYXdJbmRleGVkVGV4dHVyZU1lc2goZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAogICAgICAgICBHTHVpbnQgdGV4dHVyZSwgZmxvYXQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwgYm9vbCBibGVuZCwKICAgICAgICAgR0x2b2lkKiB2ZXJ0aWNlcywgR0x2b2lkKiB0ZXhDb29yZHMsIEdMZW51bSBkcmF3TW9kZSwgR0xzaXplaSBlbGVtZW50c0NvdW50LAotICAgICAgICBib29sIHN3YXBTcmNEc3QsIGJvb2wgaWdub3JlVHJhbnNmb3JtLCBHTHVpbnQgdmJvLCBib29sIGlnbm9yZVNjYWxlLCBib29sIGRpcnR5KSB7CisgICAgICAgIGJvb2wgc3dhcFNyY0RzdCwgYm9vbCBpZ25vcmVUcmFuc2Zvcm0sIEdMdWludCB2Ym8sCisgICAgICAgIE1vZGVsVmlld01vZGUgbW9kZWxWaWV3TW9kZSwgYm9vbCBkaXJ0eSkgewogCiAgICAgc2V0dXBEcmF3KCk7CiAgICAgc2V0dXBEcmF3V2l0aFRleHR1cmUoKTsKQEAgLTM1MDEsMTEgKzMzNzEsNyBAQAogICAgIHNldHVwRHJhd0JsZW5kaW5nKGJsZW5kLCBtb2RlLCBzd2FwU3JjRHN0KTsKICAgICBzZXR1cERyYXdQcm9ncmFtKCk7CiAgICAgaWYgKCFkaXJ0eSkgc2V0dXBEcmF3RGlydHlSZWdpb25zRGlzYWJsZWQoKTsKLSAgICBpZiAoIWlnbm9yZVNjYWxlKSB7Ci0gICAgICAgIHNldHVwRHJhd01vZGVsVmlldyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGlnbm9yZVRyYW5zZm9ybSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3VHJhbnNsYXRlKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgaWdub3JlVHJhbnNmb3JtKTsKLSAgICB9CisgICAgc2V0dXBEcmF3TW9kZWxWaWV3KG1vZGVsVmlld01vZGUsIGZhbHNlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGlnbm9yZVRyYW5zZm9ybSk7CiAgICAgc2V0dXBEcmF3VGV4dHVyZSh0ZXh0dXJlKTsKICAgICBzZXR1cERyYXdQdXJlQ29sb3JVbmlmb3JtcygpOwogICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyVW5pZm9ybXMoKTsKQEAgLTM1MTcsNyArMzM4Myw3IEBACiB2b2lkIE9wZW5HTFJlbmRlcmVyOjpkcmF3QWxwaGE4VGV4dHVyZU1lc2goZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAogICAgICAgICBHTHVpbnQgdGV4dHVyZSwgYm9vbCBoYXNDb2xvciwgaW50IGNvbG9yLCBpbnQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwKICAgICAgICAgR0x2b2lkKiB2ZXJ0aWNlcywgR0x2b2lkKiB0ZXhDb29yZHMsIEdMZW51bSBkcmF3TW9kZSwgR0xzaXplaSBlbGVtZW50c0NvdW50LAotICAgICAgICBib29sIGlnbm9yZVRyYW5zZm9ybSwgYm9vbCBpZ25vcmVTY2FsZSwgYm9vbCBkaXJ0eSkgeworICAgICAgICBib29sIGlnbm9yZVRyYW5zZm9ybSwgTW9kZWxWaWV3TW9kZSBtb2RlbFZpZXdNb2RlLCBib29sIGRpcnR5KSB7CiAKICAgICBzZXR1cERyYXcoKTsKICAgICBzZXR1cERyYXdXaXRoVGV4dHVyZSh0cnVlKTsKQEAgLTM1MjksMTUgKzMzOTUsMTEgQEAKICAgICBzZXR1cERyYXdCbGVuZGluZyh0cnVlLCBtb2RlKTsKICAgICBzZXR1cERyYXdQcm9ncmFtKCk7CiAgICAgaWYgKCFkaXJ0eSkgc2V0dXBEcmF3RGlydHlSZWdpb25zRGlzYWJsZWQoKTsKLSAgICBpZiAoIWlnbm9yZVNjYWxlKSB7Ci0gICAgICAgIHNldHVwRHJhd01vZGVsVmlldyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGlnbm9yZVRyYW5zZm9ybSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3VHJhbnNsYXRlKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgaWdub3JlVHJhbnNmb3JtKTsKLSAgICB9CisgICAgc2V0dXBEcmF3TW9kZWxWaWV3KG1vZGVsVmlld01vZGUsIGZhbHNlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGlnbm9yZVRyYW5zZm9ybSk7CiAgICAgc2V0dXBEcmF3VGV4dHVyZSh0ZXh0dXJlKTsKICAgICBzZXR1cERyYXdQdXJlQ29sb3JVbmlmb3JtcygpOwogICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyVW5pZm9ybXMoKTsKLSAgICBzZXR1cERyYXdTaGFkZXJVbmlmb3JtcygpOworICAgIHNldHVwRHJhd1NoYWRlclVuaWZvcm1zKGlnbm9yZVRyYW5zZm9ybSk7CiAgICAgc2V0dXBEcmF3TWVzaCh2ZXJ0aWNlcywgdGV4Q29vcmRzKTsKIAogICAgIGdsRHJhd0FycmF5cyhkcmF3TW9kZSwgMCwgZWxlbWVudHNDb3VudCk7CkBAIC0zNjE4LDEzICszNDgwLDEzIEBACiAgICAgVGV4dHVyZVZlcnRleDo6c2V0VVYodisrLCB1MiwgdjIpOwogfQogCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpnZXRBbHBoYUFuZE1vZGUoU2tQYWludCogcGFpbnQsIGludCogYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUqIG1vZGUpIGNvbnN0IHsKK3ZvaWQgT3BlbkdMUmVuZGVyZXI6OmdldEFscGhhQW5kTW9kZShjb25zdCBTa1BhaW50KiBwYWludCwgaW50KiBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSogbW9kZSkgY29uc3QgewogICAgIGdldEFscGhhQW5kTW9kZURpcmVjdChwYWludCwgYWxwaGEsICBtb2RlKTsKICAgICBpZiAobURyYXdNb2RpZmllcnMubU92ZXJyaWRlTGF5ZXJBbHBoYSA8IDEuMGYpIHsKICAgICAgICAgLy8gaWYgZHJhd2luZyBhIGxheWVyLCBpZ25vcmUgdGhlIHBhaW50J3MgYWxwaGEKICAgICAgICAgKmFscGhhID0gbURyYXdNb2RpZmllcnMubU92ZXJyaWRlTGF5ZXJBbHBoYSAqIDI1NTsKICAgICB9Ci0gICAgKmFscGhhICo9IG1TbmFwc2hvdC0+YWxwaGE7CisgICAgKmFscGhhICo9IGN1cnJlbnRTbmFwc2hvdCgpLT5hbHBoYTsKIH0KIAogZmxvYXQgT3BlbkdMUmVuZGVyZXI6OmdldExheWVyQWxwaGEoTGF5ZXIqIGxheWVyKSBjb25zdCB7CkBAIC0zNjM0LDcgKzM0OTYsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGFscGhhID0gbGF5ZXItPmdldEFscGhhKCkgLyAyNTUuMGY7CiAgICAgfQotICAgIHJldHVybiBhbHBoYSAqIG1TbmFwc2hvdC0+YWxwaGE7CisgICAgcmV0dXJuIGFscGhhICogY3VycmVudFNuYXBzaG90KCktPmFscGhhOwogfQogCiB9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL09wZW5HTFJlbmRlcmVyLmggYi9saWJzL2h3dWkvT3BlbkdMUmVuZGVyZXIuaAppbmRleCA5YWZiN2FkLi5mYjc4MGNlIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvT3BlbkdMUmVuZGVyZXIuaAorKysgYi9saWJzL2h3dWkvT3BlbkdMUmVuZGVyZXIuaApAQCAtNDEsMTYgKzQxLDIzIEBACiAjaW5jbHVkZSAiTWF0cml4LmgiCiAjaW5jbHVkZSAiUHJvZ3JhbS5oIgogI2luY2x1ZGUgIlJlY3QuaCIKLSNpbmNsdWRlICJTbmFwc2hvdC5oIgotI2luY2x1ZGUgIlZlcnRleC5oIgotI2luY2x1ZGUgIlNraWFTaGFkZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJlci5oIgorI2luY2x1ZGUgIlN0YXRlZnVsQmFzZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiU2tpYUNvbG9yRmlsdGVyLmgiCisjaW5jbHVkZSAiU25hcHNob3QuaCIKICNpbmNsdWRlICJVdk1hcHBlci5oIgorI2luY2x1ZGUgIlZlcnRleC5oIgogI2luY2x1ZGUgIkNhY2hlcy5oIgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgdWlyZW5kZXJlciB7CiAKK2NsYXNzIERlZmVycmVkRGlzcGxheVN0YXRlOworY2xhc3MgRGlzcGxheUxpc3Q7CitjbGFzcyBUZXh0U2V0dXBGdW5jdG9yOworY2xhc3MgVmVydGV4QnVmZmVyOworY2xhc3MgU2tpYVNoYWRlcjsKKwogc3RydWN0IERyYXdNb2RpZmllcnMgewogICAgIERyYXdNb2RpZmllcnMoKSB7CiAgICAgICAgIHJlc2V0KCk7CkBAIC04MiwxMiArODksNiBAQAogICAgIGtTdGF0ZURlZmVyRmxhZ19DbGlwID0gMHgyCiB9OwogCi1lbnVtIERyYXdPcE1vZGUgewotICAgIGtEcmF3T3BNb2RlX0ltbWVkaWF0ZSwKLSAgICBrRHJhd09wTW9kZV9EZWZlciwKLSAgICBrRHJhd09wTW9kZV9GbHVzaAotfTsKLQogZW51bSBDbGlwU2lkZUZsYWdzIHsKICAgICBrQ2xpcFNpZGVfTm9uZSA9IDB4MCwKICAgICBrQ2xpcFNpZGVfTGVmdCA9IDB4MSwKQEAgLTk4LDEwNSArOTksNDEgQEAKICAgICBrQ2xpcFNpZGVfQ29uc2VydmF0aXZlRnVsbCA9IDB4MUYKIH07CiAKKy8qKgorICogRGVmaW5lcyBhZGRpdGlvbmFsIHRyYW5zZm9ybWF0aW9uIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgYnkgdGhlIG1vZGVsIHZpZXcgbWF0cml4LCBiZXlvbmQgdGhhdCBvZgorICogdGhlIGN1cnJlbnRUcmFuc2Zvcm0oKQorICovCitlbnVtIE1vZGVsVmlld01vZGUgeworICAgIC8qKgorICAgICAqIFVzZWQgd2hlbiB0aGUgbW9kZWwgdmlldyBzaG91bGQgc2ltcGx5IHRyYW5zbGF0ZSBnZW9tZXRyeSBwYXNzZWQgdG8gdGhlIHNoYWRlci4gVGhlIHJlc3VsdGluZworICAgICAqIG1hdHJpeCB3aWxsIGJlIGEgc2ltcGxlIHRyYW5zbGF0aW9uLgorICAgICAqLworICAgIGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZSA9IDAsCisKKyAgICAvKioKKyAgICAgKiBVc2VkIHdoZW4gdGhlIG1vZGVsIHZpZXcgc2hvdWxkIHRyYW5zbGF0ZSBhbmQgc2NhbGUgZ2VvbWV0cnkuIFRoZSByZXN1bHRpbmcgbWF0cml4IHdpbGwgYmUgYQorICAgICAqIHRyYW5zbGF0aW9uICsgc2NhbGUuIFRoaXMgaXMgZnJlcXVlbnRseSB1c2VkIHRvZ2V0aGVyIHdpdGggVkJPIDAsIHRoZSAoMCwwLDEsMSkgcmVjdC4KKyAgICAgKi8KKyAgICBrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGVBbmRTY2FsZSA9IDEsCit9OworCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLyBSZW5kZXJlcgogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1jbGFzcyBEZWZlcnJlZERpc3BsYXlTdGF0ZTsKLWNsYXNzIERpc3BsYXlMaXN0OwotY2xhc3MgVGV4dFNldHVwRnVuY3RvcjsKLWNsYXNzIFZlcnRleEJ1ZmZlcjsKLQogLyoqCi0gKiBPcGVuR0wgcmVuZGVyZXIgdXNlZCB0byBkcmF3IGFjY2VsZXJhdGVkIDJEIGdyYXBoaWNzLiBUaGUgQVBJIGlzIGEKLSAqIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBTa2lhJ3MgQ2FudmFzIEFQSS4KKyAqIE9wZW5HTCBSZW5kZXJlciBpbXBsZW1lbnRhdGlvbi4KICAqLwotY2xhc3MgT3BlbkdMUmVuZGVyZXIgeworY2xhc3MgT3BlbkdMUmVuZGVyZXIgOiBwdWJsaWMgU3RhdGVmdWxCYXNlUmVuZGVyZXIgewogcHVibGljOgogICAgIEFORFJPSURfQVBJIE9wZW5HTFJlbmRlcmVyKCk7CiAgICAgdmlydHVhbCB+T3BlbkdMUmVuZGVyZXIoKTsKIAotICAgIC8qKgotICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhpcyByZW5kZXJlci4gVGhlIG5hbWUgaXMgb3B0aW9uYWwgYW5kCi0gICAgICogZW1wdHkgYnkgZGVmYXVsdC4gSWYgdGhlIHBvaW50ZXIgaXMgbnVsbCB0aGUgbmFtZSBpcyBzZXQKLSAgICAgKiB0byB0aGUgZW1wdHkgc3RyaW5nLgotICAgICAqLwotICAgIEFORFJPSURfQVBJIHZvaWQgc2V0TmFtZShjb25zdCBjaGFyKiBuYW1lKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhpcyByZW5kZXJlciBhcyBVVEY4IHN0cmluZy4KLSAgICAgKiBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcyBuZXZlciBudWxsLgotICAgICAqLwotICAgIEFORFJPSURfQVBJIGNvbnN0IGNoYXIqIGdldE5hbWUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFJlYWQgZXh0ZXJuYWxseSBkZWZpbmVkIHByb3BlcnRpZXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3IKLSAgICAgKiBvZiB0aGUgcmVuZGVyZXIuCi0gICAgICovCiAgICAgQU5EUk9JRF9BUEkgdm9pZCBpbml0UHJvcGVydGllcygpOwogCi0gICAgLyoqCi0gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyByZW5kZXJlciBleGVjdXRlcyBkcmF3aW5nIGNvbW1hbmRzIGltbWVkaWF0ZWx5LgotICAgICAqIElmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlIGRyYXdpbmcgY29tbWFuZHMgd2lsbCBiZSBleGVjdXRlZAotICAgICAqIGxhdGVyLgotICAgICAqLwotICAgIHZpcnR1YWwgYm9vbCBpc0RlZmVycmVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBkaW1lbnNpb24gb2YgdGhlIHVuZGVybHlpbmcgZHJhd2luZyBzdXJmYWNlLiBUaGlzIG1ldGhvZCBtdXN0Ci0gICAgICogYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgZXZlcnkgdGltZSB0aGUgZHJhd2luZyBzdXJmYWNlIGNoYW5nZXMgc2l6ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB3aWR0aCBUaGUgd2lkdGggaW4gcGl4ZWxzIG9mIHRoZSB1bmRlcmx5c2luZyBzdXJmYWNlCi0gICAgICogQHBhcmFtIGhlaWdodCBUaGUgaGVpZ2h0IGluIHBpeGVscyBvZiB0aGUgdW5kZXJseXNpbmcgc3VyZmFjZQotICAgICAqLwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3cG9ydChpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotCi0gICAgLyoqCi0gICAgICogUHJlcGFyZXMgdGhlIHJlbmRlcmVyIHRvIGRyYXcgYSBmcmFtZS4gVGhpcyBtZXRob2QgbXVzdCBiZSBpbnZva2VkCi0gICAgICogYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGZyYW1lLiBXaGVuIHRoaXMgbWV0aG9kIGlzIGludm9rZWQsIHRoZQotICAgICAqIGVudGlyZSBkcmF3aW5nIHN1cmZhY2UgaXMgYXNzdW1lZCB0byBiZSByZWRyYXduLgotICAgICAqCi0gICAgICogQHBhcmFtIG9wYXF1ZSBJZiB0cnVlLCB0aGUgdGFyZ2V0IHN1cmZhY2UgaXMgY29uc2lkZXJlZCBvcGFxdWUKLSAgICAgKiAgICAgICAgICAgICAgIGFuZCB3aWxsIG5vdCBiZSBjbGVhcmVkLiBJZiBmYWxzZSwgdGhlIHRhcmdldCBzdXJmYWNlCi0gICAgICogICAgICAgICAgICAgICB3aWxsIGJlIGNsZWFyZWQKLSAgICAgKi8KLSAgICBBTkRST0lEX0FQSSBzdGF0dXNfdCBwcmVwYXJlKGJvb2wgb3BhcXVlKTsKLQotICAgIC8qKgotICAgICAqIFByZXBhcmVzIHRoZSByZW5kZXJlciB0byBkcmF3IGEgZnJhbWUuIFRoaXMgbWV0aG9kIG11c3QgYmUgaW52b2tlZAotICAgICAqIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBmcmFtZS4gT25seSB0aGUgc3BlY2lmaWVkIHJlY3RhbmdsZSBvZiB0aGUKLSAgICAgKiBmcmFtZSBpcyBhc3N1bWVkIHRvIGJlIGRpcnR5LiBBIGNsaXAgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCB0bwotICAgICAqIHRoZSBzcGVjaWZpZWQgcmVjdGFuZ2xlLgotICAgICAqCi0gICAgICogQHBhcmFtIGxlZnQgVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgZGlydHkgcmVjdGFuZ2xlCi0gICAgICogQHBhcmFtIHRvcCBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIGRpcnR5IHJlY3RhbmdsZQotICAgICAqIEBwYXJhbSByaWdodCBUaGUgcmlnaHQgY29vcmRpbmF0ZSBvZiB0aGUgZGlydHkgcmVjdGFuZ2xlCi0gICAgICogQHBhcmFtIGJvdHRvbSBUaGUgYm90dG9tIGNvb3JkaW5hdGUgb2YgdGhlIGRpcnR5IHJlY3RhbmdsZQotICAgICAqIEBwYXJhbSBvcGFxdWUgSWYgdHJ1ZSwgdGhlIHRhcmdldCBzdXJmYWNlIGlzIGNvbnNpZGVyZWQgb3BhcXVlCi0gICAgICogICAgICAgICAgICAgICBhbmQgd2lsbCBub3QgYmUgY2xlYXJlZC4gSWYgZmFsc2UsIHRoZSB0YXJnZXQgc3VyZmFjZQotICAgICAqICAgICAgICAgICAgICAgd2lsbCBiZSBjbGVhcmVkIGluIHRoZSBzcGVjaWZpZWQgZGlydHkgcmVjdGFuZ2xlCi0gICAgICovCiAgICAgdmlydHVhbCBzdGF0dXNfdCBwcmVwYXJlRGlydHkoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBib29sIG9wYXF1ZSk7Ci0KLSAgICAvKioKLSAgICAgKiBJbmRpY2F0ZXMgdGhlIGVuZCBvZiBhIGZyYW1lLiBUaGlzIG1ldGhvZCBtdXN0IGJlIGludm9rZWQgd2hlbmV2ZXIKLSAgICAgKiB0aGUgY2FsbGVyIGlzIGRvbmUgcmVuZGVyaW5nIGEgZnJhbWUuCi0gICAgICovCiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOwotCi0gICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgbXVzdCBiZSBpbnZva2VkIGJlZm9yZSBoYW5kaW5nIGNvbnRyb2wgb3ZlciB0byBhIGRyYXcgZnVuY3Rvci4KLSAgICAgKiBTZWUgY2FsbERyYXdHTEZ1bmN0aW9uKCkgZm9yIGluc3RhbmNlLgotICAgICAqCi0gICAgICogVGhpcyBjb21tYW5kIG11c3Qgbm90IGJlIHJlY29yZGVkIGluc2lkZSBkaXNwbGF5IGxpc3RzLgotICAgICAqLwogICAgIHZpcnR1YWwgdm9pZCBpbnRlcnJ1cHQoKTsKLQotICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgaW52b2tlZCBhZnRlciBnZXR0aW5nIGNvbnRyb2wgYmFjayBmcm9tIGEgZHJhdyBmdW5jdG9yLgotICAgICAqCi0gICAgICogVGhpcyBjb21tYW5kIG11c3Qgbm90IGJlIHJlY29yZGVkIGluc2lkZSBkaXNwbGF5IGxpc3RzLgotICAgICAqLwogICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKIAogICAgIEFORFJPSURfQVBJIHZvaWQgc2V0Q291bnRPdmVyZHJhd0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7CkBAIC0yMTcsMTEgKzE1NCw2IEBACiAgICAgQU5EUk9JRF9BUEkgdm9pZCBjbGVhckxheWVyVXBkYXRlcygpOwogICAgIEFORFJPSURfQVBJIHZvaWQgZmx1c2hMYXllclVwZGF0ZXMoKTsKIAotICAgIEFORFJPSURfQVBJIGludCBnZXRTYXZlQ291bnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzYXZlKGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc3RvcmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVRvQ291bnQoaW50IHNhdmVDb3VudCk7Ci0KICAgICBBTkRST0lEX0FQSSBpbnQgc2F2ZUxheWVyKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKICAgICAgICAgICAgIFNrUGFpbnQqIHBhaW50LCBpbnQgZmxhZ3MpIHsKICAgICAgICAgU2tYZmVybW9kZTo6TW9kZSBtb2RlID0gU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZTsKQEAgLTIzOCw4NiArMTcwLDUxIEBACiAgICAgaW50IHNhdmVMYXllckRlZmVycmVkKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKICAgICAgICAgICAgIGludCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBpbnQgZmxhZ3MpOwogCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwotICAgIHZpcnR1YWwgdm9pZCByb3RhdGUoZmxvYXQgZGVncmVlcyk7Ci0gICAgdmlydHVhbCB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSk7Ci0gICAgdmlydHVhbCB2b2lkIHNrZXcoZmxvYXQgc3gsIGZsb2F0IHN5KTsKLQotICAgIGJvb2wgaGFzUmVjdFRvUmVjdFRyYW5zZm9ybSgpOwotICAgIEFORFJPSURfQVBJIHZvaWQgZ2V0TWF0cml4KFNrTWF0cml4KiBtYXRyaXgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNYXRyaXgoU2tNYXRyaXgqIG1hdHJpeCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmNhdE1hdHJpeChTa01hdHJpeCogbWF0cml4KTsKLQotICAgIEFORFJPSURfQVBJIGNvbnN0IFJlY3QmIGdldENsaXBCb3VuZHMoKTsKLQotICAgIC8qKgotICAgICAqIFBlcmZvcm1zIGEgcXVpY2sgcmVqZWN0IGJ1dCBhZGp1c3QgdGhlIGJvdW5kcyB0byBhY2NvdW50IGZvciBzdHJva2Ugd2lkdGggaWYgbmVjZXNzYXJ5LAotICAgICAqIGFuZCBoYW5kbGluZyBzbmFwT3V0IGZvciBBQSBnZW9tZXRyeS4KLSAgICAgKi8KLSAgICBib29sIHF1aWNrUmVqZWN0UHJlU3Ryb2tlKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tQYWludCogcGFpbnQpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBmYWxzZSBhbmQgc2V0cyBzY2lzc29yIGJhc2VkIHVwb24gYm91bmRzIGlmIGRyYXdpbmcgd29uJ3QgYmUgY2xpcHBlZCBvdXQKLSAgICAgKi8KLSAgICBib29sIHF1aWNrUmVqZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgYm9vbCBzbmFwT3V0ID0gZmFsc2UpOwotICAgIGJvb2wgcXVpY2tSZWplY3QoY29uc3QgUmVjdCYgYm91bmRzKSB7Ci0gICAgICAgIHJldHVybiBxdWlja1JlamVjdChib3VuZHMubGVmdCwgYm91bmRzLnRvcCwgYm91bmRzLnJpZ2h0LCBib3VuZHMuYm90dG9tKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHF1aWNrUmVqZWN0LCB3aXRob3V0IHRoZSBzY2lzc29yLCBpbnN0ZWFkIHJldHVybmluZyBjbGlwUmVxdWlyZWQgdGhyb3VnaCBwb2ludGVyLgotICAgICAqIGNsaXBSZXF1aXJlZCB3aWxsIGJlIG9ubHkgc2V0IGlmIG5vdCByZWplY3RlZAotICAgICAqLwotICAgIEFORFJPSURfQVBJIGJvb2wgcXVpY2tSZWplY3ROb1NjaXNzb3IoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICAgICAgYm9vbCBzbmFwT3V0ID0gZmFsc2UsIGJvb2wqIGNsaXBSZXF1aXJlZCA9IE5VTEwpOwotICAgIGJvb2wgcXVpY2tSZWplY3ROb1NjaXNzb3IoY29uc3QgUmVjdCYgYm91bmRzLCBib29sKiBjbGlwUmVxdWlyZWQgPSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBxdWlja1JlamVjdE5vU2Npc3Nvcihib3VuZHMubGVmdCwgYm91bmRzLnRvcCwgYm91bmRzLnJpZ2h0LCBib3VuZHMuYm90dG9tLAotICAgICAgICAgICAgICAgIGNsaXBSZXF1aXJlZCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGNsaXBSZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tSZWdpb246Ok9wIG9wKTsKLSAgICB2aXJ0dWFsIGJvb2wgY2xpcFBhdGgoU2tQYXRoKiBwYXRoLCBTa1JlZ2lvbjo6T3Agb3ApOwotICAgIHZpcnR1YWwgYm9vbCBjbGlwUmVnaW9uKFNrUmVnaW9uKiByZWdpb24sIFNrUmVnaW9uOjpPcCBvcCk7Ci0gICAgdmlydHVhbCBSZWN0KiBnZXRDbGlwUmVjdCgpOwotCiAgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3RGlzcGxheUxpc3QoRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0LCBSZWN0JiBkaXJ0eSwgaW50MzJfdCByZXBsYXlGbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkIG91dHB1dERpc3BsYXlMaXN0KERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCk7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3TGF5ZXIoTGF5ZXIqIGxheWVyLCBmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdCaXRtYXAoU2tCaXRtYXAqIGJpdG1hcCwgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBTa1BhaW50KiBwYWludCk7Ci0gICAgc3RhdHVzX3QgZHJhd0JpdG1hcHMoU2tCaXRtYXAqIGJpdG1hcCwgQXNzZXRBdGxhczo6RW50cnkqIGVudHJ5LCBpbnQgYml0bWFwQ291bnQsCi0gICAgICAgICAgICBUZXh0dXJlVmVydGV4KiB2ZXJ0aWNlcywgYm9vbCBwdXJlVHJhbnNsYXRlLCBjb25zdCBSZWN0JiBib3VuZHMsIFNrUGFpbnQqIHBhaW50KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdCaXRtYXAoU2tCaXRtYXAqIGJpdG1hcCwgU2tNYXRyaXgqIG1hdHJpeCwgU2tQYWludCogcGFpbnQpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0JpdG1hcChTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBzcmNMZWZ0LCBmbG9hdCBzcmNUb3AsCisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Qml0bWFwKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKKyAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKKyAgICBzdGF0dXNfdCBkcmF3Qml0bWFwcyhjb25zdCBTa0JpdG1hcCogYml0bWFwLCBBc3NldEF0bGFzOjpFbnRyeSogZW50cnksIGludCBiaXRtYXBDb3VudCwKKyAgICAgICAgICAgIFRleHR1cmVWZXJ0ZXgqIHZlcnRpY2VzLCBib29sIHB1cmVUcmFuc2xhdGUsIGNvbnN0IFJlY3QmIGJvdW5kcywgY29uc3QgU2tQYWludCogcGFpbnQpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0JpdG1hcChjb25zdCBTa0JpdG1hcCogYml0bWFwLCBjb25zdCBTa01hdHJpeCogbWF0cml4LAorICAgICAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0JpdG1hcChjb25zdCBTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBzcmNMZWZ0LCBmbG9hdCBzcmNUb3AsCiAgICAgICAgICAgICBmbG9hdCBzcmNSaWdodCwgZmxvYXQgc3JjQm90dG9tLCBmbG9hdCBkc3RMZWZ0LCBmbG9hdCBkc3RUb3AsCi0gICAgICAgICAgICBmbG9hdCBkc3RSaWdodCwgZmxvYXQgZHN0Qm90dG9tLCBTa1BhaW50KiBwYWludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Qml0bWFwRGF0YShTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIFNrUGFpbnQqIHBhaW50KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdCaXRtYXBNZXNoKFNrQml0bWFwKiBiaXRtYXAsIGludCBtZXNoV2lkdGgsIGludCBtZXNoSGVpZ2h0LAotICAgICAgICAgICAgZmxvYXQqIHZlcnRpY2VzLCBpbnQqIGNvbG9ycywgU2tQYWludCogcGFpbnQpOwotICAgIHN0YXR1c190IGRyYXdQYXRjaGVzKFNrQml0bWFwKiBiaXRtYXAsIEFzc2V0QXRsYXM6OkVudHJ5KiBlbnRyeSwKLSAgICAgICAgICAgIFRleHR1cmVWZXJ0ZXgqIHZlcnRpY2VzLCB1aW50MzJfdCBpbmRleENvdW50LCBTa1BhaW50KiBwYWludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UGF0Y2goU2tCaXRtYXAqIGJpdG1hcCwgUmVzX3BuZ185cGF0Y2gqIHBhdGNoLAotICAgICAgICAgICAgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1BhaW50KiBwYWludCk7Ci0gICAgc3RhdHVzX3QgZHJhd1BhdGNoKFNrQml0bWFwKiBiaXRtYXAsIGNvbnN0IFBhdGNoKiBtZXNoLCBBc3NldEF0bGFzOjpFbnRyeSogZW50cnksCi0gICAgICAgICAgICBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIFNrUGFpbnQqIHBhaW50KTsKKyAgICAgICAgICAgIGZsb2F0IGRzdFJpZ2h0LCBmbG9hdCBkc3RCb3R0b20sIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdCaXRtYXBEYXRhKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKKyAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdCaXRtYXBNZXNoKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGludCBtZXNoV2lkdGgsIGludCBtZXNoSGVpZ2h0LAorICAgICAgICAgICAgY29uc3QgZmxvYXQqIHZlcnRpY2VzLCBjb25zdCBpbnQqIGNvbG9ycywgY29uc3QgU2tQYWludCogcGFpbnQpOworICAgIHN0YXR1c190IGRyYXdQYXRjaGVzKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIEFzc2V0QXRsYXM6OkVudHJ5KiBlbnRyeSwKKyAgICAgICAgICAgIFRleHR1cmVWZXJ0ZXgqIHZlcnRpY2VzLCB1aW50MzJfdCBpbmRleENvdW50LCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UGF0Y2goY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgY29uc3QgUmVzX3BuZ185cGF0Y2gqIHBhdGNoLAorICAgICAgICAgICAgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgc3RhdHVzX3QgZHJhd1BhdGNoKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGNvbnN0IFBhdGNoKiBtZXNoLCBBc3NldEF0bGFzOjpFbnRyeSogZW50cnksCisgICAgICAgICAgICBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKICAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdDb2xvcihpbnQgY29sb3IsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UmVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIFNrUGFpbnQqIHBhaW50KTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdSZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKKyAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKICAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdSb3VuZFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICAgICAgZmxvYXQgcngsIGZsb2F0IHJ5LCBTa1BhaW50KiBwYWludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Q2lyY2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywgU2tQYWludCogcGFpbnQpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd092YWwoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1BhaW50KiBwYWludCk7CisgICAgICAgICAgICBmbG9hdCByeCwgZmxvYXQgcnksIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdDaXJjbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3T3ZhbChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCisgICAgICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCk7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3QXJjKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgICAgIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IHN3ZWVwQW5nbGUsIGJvb2wgdXNlQ2VudGVyLCBTa1BhaW50KiBwYWludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UGF0aChTa1BhdGgqIHBhdGgsIFNrUGFpbnQqIHBhaW50KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdMaW5lcyhmbG9hdCogcG9pbnRzLCBpbnQgY291bnQsIFNrUGFpbnQqIHBhaW50KTsKLSAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdQb2ludHMoZmxvYXQqIHBvaW50cywgaW50IGNvdW50LCBTa1BhaW50KiBwYWludCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3VGV4dE9uUGF0aChjb25zdCBjaGFyKiB0ZXh0LCBpbnQgYnl0ZXNDb3VudCwgaW50IGNvdW50LCBTa1BhdGgqIHBhdGgsCi0gICAgICAgICAgICBmbG9hdCBoT2Zmc2V0LCBmbG9hdCB2T2Zmc2V0LCBTa1BhaW50KiBwYWludCk7CisgICAgICAgICAgICBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBzd2VlcEFuZ2xlLCBib29sIHVzZUNlbnRlciwgY29uc3QgU2tQYWludCogcGFpbnQpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1BhdGgoY29uc3QgU2tQYXRoKiBwYXRoLCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3TGluZXMoY29uc3QgZmxvYXQqIHBvaW50cywgaW50IGNvdW50LCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UG9pbnRzKGNvbnN0IGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1RleHRPblBhdGgoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwgY29uc3QgU2tQYXRoKiBwYXRoLAorICAgICAgICAgICAgZmxvYXQgaE9mZnNldCwgZmxvYXQgdk9mZnNldCwgY29uc3QgU2tQYWludCogcGFpbnQpOwogICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1Bvc1RleHQoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwKLSAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMsIFNrUGFpbnQqIHBhaW50KTsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKICAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdUZXh0KGNvbnN0IGNoYXIqIHRleHQsIGludCBieXRlc0NvdW50LCBpbnQgY291bnQsIGZsb2F0IHgsIGZsb2F0IHksCi0gICAgICAgICAgICBjb25zdCBmbG9hdCogcG9zaXRpb25zLCBTa1BhaW50KiBwYWludCwgZmxvYXQgdG90YWxBZHZhbmNlLCBjb25zdCBSZWN0JiBib3VuZHMsCisgICAgICAgICAgICBjb25zdCBmbG9hdCogcG9zaXRpb25zLCBjb25zdCBTa1BhaW50KiBwYWludCwgZmxvYXQgdG90YWxBZHZhbmNlLCBjb25zdCBSZWN0JiBib3VuZHMsCiAgICAgICAgICAgICBEcmF3T3BNb2RlIGRyYXdPcE1vZGUgPSBrRHJhd09wTW9kZV9JbW1lZGlhdGUpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1JlY3RzKGNvbnN0IGZsb2F0KiByZWN0cywgaW50IGNvdW50LCBTa1BhaW50KiBwYWludCk7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UmVjdHMoY29uc3QgZmxvYXQqIHJlY3RzLCBpbnQgY291bnQsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKKworICAgIHN0YXR1c190IGRyYXdTaGFkb3coY29uc3QgbWF0NCYgY2FzdGVyVHJhbnNmb3JtLCBmbG9hdCBjYXN0ZXJBbHBoYSwKKyAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpOwogCiAgICAgdmlydHVhbCB2b2lkIHJlc2V0U2hhZGVyKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldHVwU2hhZGVyKFNraWFTaGFkZXIqIHNoYWRlcik7CkBAIC0zMzQsNyArMjMxLDcgQEAKICAgICAvLyBJZiB0aGlzIHZhbHVlIGlzIHNldCB0byA8IDEuMCwgaXQgb3ZlcnJpZGVzIGFscGhhIHNldCBvbiBsYXllciAoc2VlIGRyYXdCaXRtYXAsIGRyYXdMYXllcikKICAgICB2b2lkIHNldE92ZXJyaWRlTGF5ZXJBbHBoYShmbG9hdCBhbHBoYSkgeyBtRHJhd01vZGlmaWVycy5tT3ZlcnJpZGVMYXllckFscGhhID0gYWxwaGE7IH0KIAotICAgIFNrUGFpbnQqIGZpbHRlclBhaW50KFNrUGFpbnQqIHBhaW50KTsKKyAgICBjb25zdCBTa1BhaW50KiBmaWx0ZXJQYWludChjb25zdCBTa1BhaW50KiBwYWludCk7CiAKICAgICAvKioKICAgICAgKiBTdG9yZSB0aGUgY3VycmVudCBkaXNwbGF5IHN0YXRlIChtb3N0IGltcG9ydGFudGx5LCB0aGUgY3VycmVudCBjbGlwIGFuZCB0cmFuc2Zvcm0pLCBhbmQKQEAgLTM1MCw3ICsyNDcsNyBAQAogICAgIHZvaWQgc2V0RHJhd01vZGlmaWVycyhjb25zdCBEcmF3TW9kaWZpZXJzJiBkcmF3TW9kaWZpZXJzKSB7IG1EcmF3TW9kaWZpZXJzID0gZHJhd01vZGlmaWVyczsgfQogCiAgICAgQU5EUk9JRF9BUEkgYm9vbCBpc0N1cnJlbnRUcmFuc2Zvcm1TaW1wbGUoKSB7Ci0gICAgICAgIHJldHVybiBtU25hcHNob3QtPnRyYW5zZm9ybS0+aXNTaW1wbGUoKTsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRUcmFuc2Zvcm0oKS0+aXNTaW1wbGUoKTsKICAgICB9CiAKICAgICBDYWNoZXMmIGdldENhY2hlcygpIHsKQEAgLTM2Miw4ICsyNTksOCBAQAogICAgICAgICByZXR1cm4gbVNuYXBzaG90LT5jbGlwUmVnaW9uLT5pc0VtcHR5KCk7CiAgICAgfQogCi0gICAgaW50IGdldFZpZXdwb3J0V2lkdGgoKSB7IHJldHVybiBnZXRTbmFwc2hvdCgpLT52aWV3cG9ydC5nZXRXaWR0aCgpOyB9Ci0gICAgaW50IGdldFZpZXdwb3J0SGVpZ2h0KCkgeyByZXR1cm4gZ2V0U25hcHNob3QoKS0+dmlld3BvcnQuZ2V0SGVpZ2h0KCk7IH0KKyAgICBpbnQgZ2V0Vmlld3BvcnRXaWR0aCgpIHsgcmV0dXJuIGN1cnJlbnRTbmFwc2hvdCgpLT52aWV3cG9ydC5nZXRXaWR0aCgpOyB9CisgICAgaW50IGdldFZpZXdwb3J0SGVpZ2h0KCkgeyByZXR1cm4gY3VycmVudFNuYXBzaG90KCktPnZpZXdwb3J0LmdldEhlaWdodCgpOyB9CiAKICAgICAvKioKICAgICAgKiBTY2FsZXMgdGhlIGFscGhhIG9uIHRoZSBjdXJyZW50IHNuYXBzaG90LiBUaGlzIGFscGhhIHZhbHVlIHdpbGwgYmUgbW9kdWxhdGVkCkBAIC00MDAsMTIgKzI5NywxMiBAQAogICAgICAqIEBwYXJhbSBhbHBoYSBXaGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0aW5nIGFscGhhCiAgICAgICogQHBhcmFtIG1vZGUgV2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdGluZyB4ZmVybW9kZQogICAgICAqLwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRBbHBoYUFuZE1vZGVEaXJlY3QoU2tQYWludCogcGFpbnQsIGludCogYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUqIG1vZGUpIHsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0QWxwaGFBbmRNb2RlRGlyZWN0KGNvbnN0IFNrUGFpbnQqIHBhaW50LCBpbnQqIGFscGhhLCBTa1hmZXJtb2RlOjpNb2RlKiBtb2RlKSB7CiAgICAgICAgICptb2RlID0gZ2V0WGZlcm1vZGVEaXJlY3QocGFpbnQpOwogICAgICAgICAqYWxwaGEgPSBnZXRBbHBoYURpcmVjdChwYWludCk7CiAgICAgfQogCi0gICAgc3RhdGljIGlubGluZSBTa1hmZXJtb2RlOjpNb2RlIGdldFhmZXJtb2RlRGlyZWN0KFNrUGFpbnQqIHBhaW50KSB7CisgICAgc3RhdGljIGlubGluZSBTa1hmZXJtb2RlOjpNb2RlIGdldFhmZXJtb2RlRGlyZWN0KGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgICAgIGlmICghcGFpbnQpIHJldHVybiBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlOwogICAgICAgICByZXR1cm4gZ2V0WGZlcm1vZGUocGFpbnQtPmdldFhmZXJtb2RlKCkpOwogICAgIH0KQEAgLTQ3Nyw2ICszNzQsMTMgQEAKICAgICAgKi8KICAgICB2b2lkIGF0dGFjaFN0ZW5jaWxCdWZmZXJUb0xheWVyKExheWVyKiBsYXllcik7CiAKKyAgICBib29sIHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKKyAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50ID0gTlVMTCk7CisgICAgYm9vbCBxdWlja1JlamVjdFNldHVwU2Npc3Nvcihjb25zdCBSZWN0JiBib3VuZHMsIGNvbnN0IFNrUGFpbnQqIHBhaW50ID0gTlVMTCkgeworICAgICAgICByZXR1cm4gcXVpY2tSZWplY3RTZXR1cFNjaXNzb3IoYm91bmRzLmxlZnQsIGJvdW5kcy50b3AsCisgICAgICAgICAgICAgICAgYm91bmRzLnJpZ2h0LCBib3VuZHMuYm90dG9tLCBwYWludCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ29tcG9zZSB0aGUgbGF5ZXIgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBzbmFwc2hvdCB3aXRoIHRoZSBsYXllcgogICAgICAqIGRlZmluZWQgYnkgdGhlIHByZXZpb3VzIHNuYXBzaG90LgpAQCAtNDg2LDcgKzM5MCw3IEBACiAgICAgICogQHBhcmFtIGN1cmVudCBUaGUgY3VycmVudCBzbmFwc2hvdCBjb250YWluaW5nIHRoZSBsYXllciB0byBjb21wb3NlCiAgICAgICogQHBhcmFtIHByZXZpb3VzIFRoZSBwcmV2aW91cyBzbmFwc2hvdCB0byBjb21wb3NlIHRoZSBjdXJyZW50IGxheWVyIHdpdGgKICAgICAgKi8KLSAgICB2aXJ0dWFsIHZvaWQgY29tcG9zZUxheWVyKHNwPFNuYXBzaG90PiBjdXJyZW50LCBzcDxTbmFwc2hvdD4gcHJldmlvdXMpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NlTGF5ZXIoY29uc3QgU25hcHNob3QmIGN1cnJlbnQsIGNvbnN0IFNuYXBzaG90JiBwcmV2aW91cyk7CiAKICAgICAvKioKICAgICAgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBhcyBkaXJ0eSBhdCB0aGUgc3BlY2lmaWVkIGJvdW5kcy4KQEAgLTQ5NCwxMyArMzk4LDYgQEAKICAgICB2b2lkIGRpcnR5TGF5ZXJVbmNoZWNrZWQoUmVjdCYgYm91bmRzLCBSZWdpb24qIHJlZ2lvbik7CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNuYXBzaG90LgotICAgICAqLwotICAgIHNwPFNuYXBzaG90PiBnZXRTbmFwc2hvdCgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1TbmFwc2hvdDsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSByZWdpb24gb2YgdGhlIGN1cnJlbnQgbGF5ZXIuCiAgICAgICovCiAgICAgdmlydHVhbCBSZWdpb24qIGdldFJlZ2lvbigpIGNvbnN0IHsKQEAgLTUxNyw3ICs0MTQsNyBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIEZCTyB0aGlzIHJlbmRlcmVyIGlzIHJlbmRlcmluZyBpbnRvLgogICAgICAqLwotICAgIHZpcnR1YWwgR0xpbnQgZ2V0VGFyZ2V0RmJvKCkgY29uc3QgeworICAgIHZpcnR1YWwgR0x1aW50IGdldFRhcmdldEZibygpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC01MzgsNyArNDM1LDcgQEAKICAgICAgKiBAcGFyYW0gYWxwaGEgV2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdGluZyBhbHBoYQogICAgICAqIEBwYXJhbSBtb2RlIFdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRpbmcgeGZlcm1vZGUKICAgICAgKi8KLSAgICBpbmxpbmUgdm9pZCBnZXRBbHBoYUFuZE1vZGUoU2tQYWludCogcGFpbnQsIGludCogYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUqIG1vZGUpIGNvbnN0OworICAgIGlubGluZSB2b2lkIGdldEFscGhhQW5kTW9kZShjb25zdCBTa1BhaW50KiBwYWludCwgaW50KiBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSogbW9kZSkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBhbHBoYSBmcm9tIGEgbGF5ZXIsIGFjY291bnRpbmcgZm9yIHNuYXBzaG90IGFscGhhIGFuZCBvdmVycmlkZUxheWVyQWxwaGEKQEAgLTU4MiwxMiArNDc5LDExIEBACiAKICAgICAvKioKICAgICAgKiBUZWxscyB0aGUgR1BVIHdoYXQgcGFydCBvZiB0aGUgc2NyZWVuIGlzIGFib3V0IHRvIGJlIHJlZHJhd24uCi0gICAgICogVGhpcyBtZXRob2Qgd2lsbCB1c2UgdGhlIGNsaXAgcmVjdCB0aGF0IHdlIHN0YXJ0ZWQgZHJhd2luZyB0aGUKLSAgICAgKiBmcmFtZSB3aXRoLgorICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgdXNlIHRoZSBjdXJyZW50IGxheWVyIHNwYWNlIGNsaXAgcmVjdC4KICAgICAgKiBUaGlzIG1ldGhvZCBuZWVkcyB0byBiZSBpbnZva2VkIGV2ZXJ5IHRpbWUgZ2V0VGFyZ2V0RmJvKCkgaXMKICAgICAgKiBib3VuZCBhZ2Fpbi4KICAgICAgKi8KLSAgICB2b2lkIHN0YXJ0VGlsaW5nKGNvbnN0IHNwPFNuYXBzaG90PiYgc25hcHNob3QsIGJvb2wgb3BhcXVlID0gZmFsc2UpOworICAgIHZvaWQgc3RhcnRUaWxpbmdDdXJyZW50Q2xpcChib29sIG9wYXF1ZSA9IGZhbHNlKTsKIAogICAgIC8qKgogICAgICAqIFRlbGxzIHRoZSBHUFUgd2hhdCBwYXJ0IG9mIHRoZSBzY3JlZW4gaXMgYWJvdXQgdG8gYmUgcmVkcmF3bi4KQEAgLTYwMiwyMyArNDk4LDcgQEAKICAgICAgKi8KICAgICB2b2lkIGVuZFRpbGluZygpOwogCi0gICAgLyoqCi0gICAgICogU2F2ZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlbmRlcmVyIGFzIGEgbmV3IHNuYXBzaG90LgotICAgICAqIFRoZSBuZXcgc25hcHNob3QgaXMgc2F2ZWQgaW4gbVNuYXBzaG90IGFuZCB0aGUgcHJldmlvdXMgc25hcHNob3QKLSAgICAgKiBpcyBsaW5rZWQgZnJvbSBtU25hcHNob3QtPnByZXZpb3VzLgotICAgICAqCi0gICAgICogQHBhcmFtIGZsYWdzIFRoZSBzYXZlIGZsYWdzOyBzZWUgU2tDYW52YXMgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5ldyBzYXZlIGNvdW50LiBUaGlzIHZhbHVlIGNhbiBiZSBwYXNzZWQgdG8gI3Jlc3RvcmVUb0NvdW50KCkKLSAgICAgKi8KLSAgICBpbnQgc2F2ZVNuYXBzaG90KGludCBmbGFncyk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXN0b3JlcyB0aGUgY3VycmVudCBzbmFwc2hvdDsgbVNuYXBzaG90IGJlY29tZXMgbVNuYXBzaG90LT5wcmV2aW91cy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgY2xpcCB3YXMgbW9kaWZpZWQuCi0gICAgICovCi0gICAgYm9vbCByZXN0b3JlU25hcHNob3QoKTsKKyAgICB2b2lkIG9uU25hcHNob3RSZXN0b3JlZChjb25zdCBTbmFwc2hvdCYgcmVtb3ZlZCwgY29uc3QgU25hcHNob3QmIHJlc3RvcmVkKTsKIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsaXBwaW5nIHJlY3RhbmdsZSB1c2luZyBnbFNjaXNzb3IuIFRoZSBjbGlwIGlzIGRlZmluZWQgYnkKQEAgLTY1NCwxMiArNTM0LDExIEBACiAgICAgICogQHBhcmFtIGFscGhhIFRoZSB0cmFuc2x1Y2VuY3kgb2YgdGhlIGxheWVyCiAgICAgICogQHBhcmFtIG1vZGUgVGhlIGJsZW5kaW5nIG1vZGUgb2YgdGhlIGxheWVyCiAgICAgICogQHBhcmFtIGZsYWdzIFRoZSBsYXllciBzYXZlIGZsYWdzCi0gICAgICogQHBhcmFtIHByZXZpb3VzRmJvIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGxheWVyIHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICovCiAgICAgYm9vbCBjcmVhdGVMYXllcihmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgICAgICBpbnQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwgaW50IGZsYWdzLCBHTHVpbnQgcHJldmlvdXNGYm8pOworICAgICAgICAgICAgaW50IGFscGhhLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUsIGludCBmbGFncyk7CiAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IGxheWVyIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IGFzIGFuIEZCTy4KQEAgLTY2Nyw5ICs1NDYsOCBAQAogICAgICAqIEBwYXJhbSBsYXllciBUaGUgbGF5ZXIgdG8gc3RvcmUgYXMgYW4gRkJPCiAgICAgICogQHBhcmFtIHNuYXBzaG90IFRoZSBzbmFwc2hvdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldyBsYXllcgogICAgICAqIEBwYXJhbSBib3VuZHMgVGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIKLSAgICAgKiBAcGFyYW0gcHJldmlvdXNGYm8gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIKICAgICAgKi8KLSAgICBib29sIGNyZWF0ZUZib0xheWVyKExheWVyKiBsYXllciwgUmVjdCYgYm91bmRzLCBSZWN0JiBjbGlwLCBHTHVpbnQgcHJldmlvdXNGYm8pOworICAgIGJvb2wgY3JlYXRlRmJvTGF5ZXIoTGF5ZXIqIGxheWVyLCBSZWN0JiBib3VuZHMsIFJlY3QmIGNsaXApOwogCiAgICAgLyoqCiAgICAgICogQ29tcG9zZSB0aGUgc3BlY2lmaWVkIGxheWVyIGFzIGEgcmVnaW9uLgpAQCAtNzUxLDcgKzYyOSw3IEBACiAgICAgICogQHBhcmFtIHRleHR1cmUgVGhlIHRleHR1cmUgcmVwcnNlbnRpbmcgdGhlIHNoYXBlCiAgICAgICogQHBhcmFtIHBhaW50IFRoZSBwYWludCB0byBkcmF3IHRoZSBzaGFwZSB3aXRoCiAgICAgICovCi0gICAgc3RhdHVzX3QgZHJhd1NoYXBlKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgY29uc3QgUGF0aFRleHR1cmUqIHRleHR1cmUsIFNrUGFpbnQqIHBhaW50KTsKKyAgICBzdGF0dXNfdCBkcmF3U2hhcGUoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBjb25zdCBQYXRoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgU2tQYWludCogcGFpbnQpOwogCiAgICAgLyoqCiAgICAgICogRHJhd3MgdGhlIHNwZWNpZmllZCB0ZXh0dXJlIGFzIGFuIGFscGhhIGJpdG1hcC4gQWxwaGEgYml0bWFwcyBvYmV5CkBAIC03NjIsNyArNjQwLDcgQEAKICAgICAgKiBAcGFyYW0gdG9wIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGJpdG1hcAogICAgICAqIEBwYXJhbSBwYWludCBUaGUgcGFpbnQgdG8gcmVuZGVyIHdpdGgKICAgICAgKi8KLSAgICB2b2lkIGRyYXdBbHBoYUJpdG1hcChUZXh0dXJlKiB0ZXh0dXJlLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIFNrUGFpbnQqIHBhaW50KTsKKyAgICB2b2lkIGRyYXdBbHBoYUJpdG1hcChUZXh0dXJlKiB0ZXh0dXJlLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKIAogICAgIC8qKgogICAgICAqIFJlbmRlcnMgYSBzdHJpcCBvZiBwb2x5Z29ucyB3aXRoIHRoZSBzcGVjaWZpZWQgcGFpbnQsIHVzZWQgZm9yIHRlc3NlbGxhdGVkIGdlb21ldHJ5LgpAQCAtNzcxLDcgKzY0OSw3IEBACiAgICAgICogQHBhcmFtIHBhaW50IFRoZSBwYWludCB0byByZW5kZXIgd2l0aAogICAgICAqIEBwYXJhbSB1c2VPZmZzZXQgT2Zmc2V0IHRoZSB2ZXJ0ZXhCdWZmZXIgKHVzZWQgaW4gZHJhd2luZyBub24tQUEgbGluZXMpCiAgICAgICovCi0gICAgc3RhdHVzX3QgZHJhd1ZlcnRleEJ1ZmZlcihjb25zdCBWZXJ0ZXhCdWZmZXImIHZlcnRleEJ1ZmZlciwgU2tQYWludCogcGFpbnQsCisgICAgc3RhdHVzX3QgZHJhd1ZlcnRleEJ1ZmZlcihjb25zdCBWZXJ0ZXhCdWZmZXImIHZlcnRleEJ1ZmZlciwgY29uc3QgU2tQYWludCogcGFpbnQsCiAgICAgICAgICAgICBib29sIHVzZU9mZnNldCA9IGZhbHNlKTsKIAogICAgIC8qKgpAQCAtNzgwLDcgKzY1OCw3IEBACiAgICAgICogQHBhcmFtIHBhdGggVGhlIGh1bGwgb2YgdGhlIHBhdGggdG8gZHJhdwogICAgICAqIEBwYXJhbSBwYWludCBUaGUgcGFpbnQgdG8gcmVuZGVyIHdpdGgKICAgICAgKi8KLSAgICBzdGF0dXNfdCBkcmF3Q29udmV4UGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIFNrUGFpbnQqIHBhaW50KTsKKyAgICBzdGF0dXNfdCBkcmF3Q29udmV4UGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKIAogICAgIC8qKgogICAgICAqIERyYXdzIGEgdGV4dHVyZWQgcmVjdGFuZ2xlIHdpdGggdGhlIHNwZWNpZmllZCB0ZXh0dXJlLiBUaGUgc3BlY2lmaWVkIGNvb3JkaW5hdGVzCkBAIC04MTAsNyArNjg4LDcgQEAKICAgICAgKiBAcGFyYW0gcGFpbnQgVGhlIHBhaW50IGNvbnRhaW5pbmcgdGhlIGFscGhhLCBibGVuZGluZyBtb2RlLCBldGMuCiAgICAgICovCiAgICAgdm9pZCBkcmF3VGV4dHVyZVJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICAgICAgVGV4dHVyZSogdGV4dHVyZSwgU2tQYWludCogcGFpbnQpOworICAgICAgICAgICAgVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgU2tQYWludCogcGFpbnQpOwogCiAgICAgLyoqCiAgICAgICogRHJhd3MgYSB0ZXh0dXJlZCBtZXNoIHdpdGggdGhlIHNwZWNpZmllZCB0ZXh0dXJlLiBJZiB0aGUgaW5kaWNlcyBhcmUgb21pdHRlZCwKQEAgLTgzMSwzMiArNzA5LDMzIEBACiAgICAgICogQHBhcmFtIHN3YXBTcmNEc3QgV2hldGhlciBvciBub3QgdGhlIHNyYyBhbmQgZHN0IGJsZW5kaW5nIG9wZXJhdGlvbnMgc2hvdWxkIGJlIHN3YXBwZWQKICAgICAgKiBAcGFyYW0gaWdub3JlVHJhbnNmb3JtIFRydWUgaWYgdGhlIGN1cnJlbnQgdHJhbnNmb3JtIHNob3VsZCBiZSBpZ25vcmVkCiAgICAgICogQHBhcmFtIHZibyBUaGUgVkJPIHVzZWQgdG8gZHJhdyB0aGUgbWVzaAotICAgICAqIEBwYXJhbSBpZ25vcmVTY2FsZSBUcnVlIGlmIHRoZSBtb2RlbCB2aWV3IG1hdHJpeCBzaG91bGQgbm90IGJlIHNjYWxlZAorICAgICAqIEBwYXJhbSBtb2RlbFZpZXdNb2RlIERlZmluZXMgd2hldGhlciB0aGUgbW9kZWwgdmlldyBtYXRyaXggc2hvdWxkIGJlIHNjYWxlZAogICAgICAqIEBwYXJhbSBkaXJ0eSBUcnVlIGlmIGNhbGxpbmcgdGhpcyBtZXRob2Qgc2hvdWxkIGRpcnR5IHRoZSBjdXJyZW50IGxheWVyCiAgICAgICovCiAgICAgdm9pZCBkcmF3VGV4dHVyZU1lc2goZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBHTHVpbnQgdGV4dHVyZSwKICAgICAgICAgICAgIGZsb2F0IGFscGhhLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUsIGJvb2wgYmxlbmQsCiAgICAgICAgICAgICBHTHZvaWQqIHZlcnRpY2VzLCBHTHZvaWQqIHRleENvb3JkcywgR0xlbnVtIGRyYXdNb2RlLCBHTHNpemVpIGVsZW1lbnRzQ291bnQsCiAgICAgICAgICAgICBib29sIHN3YXBTcmNEc3QgPSBmYWxzZSwgYm9vbCBpZ25vcmVUcmFuc2Zvcm0gPSBmYWxzZSwgR0x1aW50IHZibyA9IDAsCi0gICAgICAgICAgICBib29sIGlnbm9yZVNjYWxlID0gZmFsc2UsIGJvb2wgZGlydHkgPSB0cnVlKTsKKyAgICAgICAgICAgIE1vZGVsVmlld01vZGUgbW9kZWxWaWV3TW9kZSA9IGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlLCBib29sIGRpcnR5ID0gdHJ1ZSk7CiAKICAgICB2b2lkIGRyYXdJbmRleGVkVGV4dHVyZU1lc2goZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBHTHVpbnQgdGV4dHVyZSwKICAgICAgICAgICAgIGZsb2F0IGFscGhhLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUsIGJvb2wgYmxlbmQsCiAgICAgICAgICAgICBHTHZvaWQqIHZlcnRpY2VzLCBHTHZvaWQqIHRleENvb3JkcywgR0xlbnVtIGRyYXdNb2RlLCBHTHNpemVpIGVsZW1lbnRzQ291bnQsCiAgICAgICAgICAgICBib29sIHN3YXBTcmNEc3QgPSBmYWxzZSwgYm9vbCBpZ25vcmVUcmFuc2Zvcm0gPSBmYWxzZSwgR0x1aW50IHZibyA9IDAsCi0gICAgICAgICAgICBib29sIGlnbm9yZVNjYWxlID0gZmFsc2UsIGJvb2wgZGlydHkgPSB0cnVlKTsKKyAgICAgICAgICAgIE1vZGVsVmlld01vZGUgbW9kZWxWaWV3TW9kZSA9IGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlLCBib29sIGRpcnR5ID0gdHJ1ZSk7CiAKICAgICB2b2lkIGRyYXdBbHBoYThUZXh0dXJlTWVzaChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCiAgICAgICAgICAgICBHTHVpbnQgdGV4dHVyZSwgYm9vbCBoYXNDb2xvciwgaW50IGNvbG9yLCBpbnQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwKICAgICAgICAgICAgIEdMdm9pZCogdmVydGljZXMsIEdMdm9pZCogdGV4Q29vcmRzLCBHTGVudW0gZHJhd01vZGUsIEdMc2l6ZWkgZWxlbWVudHNDb3VudCwKLSAgICAgICAgICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtLCBib29sIGlnbm9yZVNjYWxlID0gZmFsc2UsIGJvb2wgZGlydHkgPSB0cnVlKTsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtLCBNb2RlbFZpZXdNb2RlIG1vZGVsVmlld01vZGUgPSBrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGVBbmRTY2FsZSwKKyAgICAgICAgICAgIGJvb2wgZGlydHkgPSB0cnVlKTsKIAogICAgIC8qKgogICAgICAqIERyYXdzIHRoZSBzcGVjaWZpZWQgbGlzdCBvZiB2ZXJ0aWNlcyBhcyBxdWFkcyB1c2luZyBpbmRleGVkIEdMX1RSSUFOR0xFUy4KICAgICAgKiBJZiB0aGUgbnVtYmVyIG9mIHZlcnRpY2VzIHRvIGRyYXcgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGluZGljZXMgd2UgaGF2ZQogICAgICAqIHByZS1hbGxvY2F0ZWQsIHRoaXMgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgc2V2ZXJhbCBnbERyYXdFbGVtZW50cygpIGNhbGxzLgogICAgICAqLwotICAgIHZvaWQgZHJhd0luZGV4ZWRRdWFkcyhWZXJ0ZXgqIG1lc2gsIEdMc2l6ZWkgcXVhZHNDb3VudCk7CisgICAgdm9pZCBpc3N1ZUluZGV4ZWRRdWFkRHJhdyhWZXJ0ZXgqIG1lc2gsIEdMc2l6ZWkgcXVhZHNDb3VudCk7CiAKICAgICAvKioKICAgICAgKiBEcmF3cyB0ZXh0IHVuZGVybGluZSBhbmQgc3RyaWtlLXRocm91Z2ggaWYgbmVlZGVkLgpAQCAtODY4LDggKzc0Nyw3IEBACiAgICAgICogQHBhcmFtIHkgVGhlIHkgY29vcmRpbmF0ZSB3aGVyZSB0aGUgdGV4dCB3aWxsIGJlIGRyYXduCiAgICAgICogQHBhcmFtIHBhaW50IFRoZSBwYWludCB0byBkcmF3IHRoZSB0ZXh0IHdpdGgKICAgICAgKi8KLSAgICB2b2lkIGRyYXdUZXh0RGVjb3JhdGlvbnMoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGZsb2F0IHRvdGFsQWR2YW5jZSwKLSAgICAgICAgICAgIGZsb2F0IHgsIGZsb2F0IHksIFNrUGFpbnQqIHBhaW50KTsKKyAgICB2b2lkIGRyYXdUZXh0RGVjb3JhdGlvbnMoZmxvYXQgdG90YWxBZHZhbmNlLCBmbG9hdCB4LCBmbG9hdCB5LCBjb25zdCBTa1BhaW50KiBwYWludCk7CiAKICAgIC8qKgogICAgICAqIERyYXdzIHNoYWRvdyBsYXllciBvbiB0ZXh0ICh3aXRoIG9wdGlvbmFsIHBvc2l0aW9ucykuCkBAIC04ODUsNyArNzYzLDcgQEAKICAgICAgKiBAcGFyYW0geCBUaGUgeCBjb29yZGluYXRlIHdoZXJlIHRoZSBzaGFkb3cgd2lsbCBiZSBkcmF3bgogICAgICAqIEBwYXJhbSB5IFRoZSB5IGNvb3JkaW5hdGUgd2hlcmUgdGhlIHNoYWRvdyB3aWxsIGJlIGRyYXduCiAgICAgICovCi0gICAgdm9pZCBkcmF3VGV4dFNoYWRvdyhTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGludCBjb3VudCwKKyAgICB2b2lkIGRyYXdUZXh0U2hhZG93KGNvbnN0IFNrUGFpbnQqIHBhaW50LCBjb25zdCBjaGFyKiB0ZXh0LCBpbnQgYnl0ZXNDb3VudCwgaW50IGNvdW50LAogICAgICAgICAgICAgY29uc3QgZmxvYXQqIHBvc2l0aW9ucywgRm9udFJlbmRlcmVyJiBmb250UmVuZGVyZXIsIGludCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLAogICAgICAgICAgICAgZmxvYXQgeCwgZmxvYXQgeSk7CiAKQEAgLTg5OCw3ICs3NzYsNyBAQAogICAgICAqIEBwYXJhbSB5IFRoZSB5IGNvb3JkaW5hdGUgd2hlcmUgdGhlIHRleHR1cmUgd2lsbCBiZSBkcmF3bgogICAgICAqIEBwYXJhbSBwYWludCBUaGUgcGFpbnQgdG8gZHJhdyB0aGUgdGV4dHVyZSB3aXRoCiAgICAgICovCi0gICAgIHZvaWQgZHJhd1BhdGhUZXh0dXJlKGNvbnN0IFBhdGhUZXh0dXJlKiB0ZXh0dXJlLCBmbG9hdCB4LCBmbG9hdCB5LCBTa1BhaW50KiBwYWludCk7CisgICAgIHZvaWQgZHJhd1BhdGhUZXh0dXJlKGNvbnN0IFBhdGhUZXh0dXJlKiB0ZXh0dXJlLCBmbG9hdCB4LCBmbG9hdCB5LCBjb25zdCBTa1BhaW50KiBwYWludCk7CiAKICAgICAvKioKICAgICAgKiBSZXNldHMgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgc3RvcmVkIGluIG1NZXNoVmVydGljZXMuIFNldHRpbmcgdGhlIHZhbHVlcwpAQCAtOTc4LDE0ICs4NTYsMjYgQEAKICAgICAgICAgICAgIGJvb2wgc3dhcFNyY0RzdCA9IGZhbHNlKTsKICAgICB2b2lkIHNldHVwRHJhd1Byb2dyYW0oKTsKICAgICB2b2lkIHNldHVwRHJhd0RpcnR5UmVnaW9uc0Rpc2FibGVkKCk7Ci0gICAgdm9pZCBzZXR1cERyYXdNb2RlbFZpZXdJZGVudGl0eShib29sIG9mZnNldCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldHVwRHJhd01vZGVsVmlldyhmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgICAgICBib29sIGlnbm9yZVRyYW5zZm9ybSA9IGZhbHNlLCBib29sIGlnbm9yZU1vZGVsVmlldyA9IGZhbHNlKTsKLSAgICB2b2lkIHNldHVwRHJhd01vZGVsVmlld1RyYW5zbGF0ZShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgICAgICBib29sIGlnbm9yZVRyYW5zZm9ybSA9IGZhbHNlKTsKKworICAgIC8qKgorICAgICAqIFNldHVwIHRoZSBjdXJyZW50IHByb2dyYW0gbWF0cmljZXMgYmFzZWQgdXBvbiB0aGUgbmF0dXJlIG9mIHRoZSBnZW9tZXRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtb2RlIElmIGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZSwgdGhlIGdlb21ldHJ5IG11c3QgYmUgdHJhbnNsYXRlZCBieSB0aGUgbGVmdCBhbmQgdG9wCisgICAgICogcGFyYW1ldGVycy4gSWYga01vZGVsVmlld01vZGVfVHJhbnNsYXRlQW5kU2NhbGUsIHRoZSBnZW9tZXRyeSB0aGF0IGV4aXN0cyBpbiB0aGUgKDAsMCwgMSwxKQorICAgICAqIHNwYWNlIG11c3QgYmUgc2NhbGVkIHVwIGFuZCB0cmFuc2xhdGVkIHRvIGZpbGwgdGhlIHF1YWQgcHJvdmlkZWQgaW4gKGwsdCxyLGIpLiBUaGVzZQorICAgICAqIHRyYW5zZm9ybWF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZSBtb2RlbFZpZXcgbWF0cml4IGFuZCB1cGxvYWRlZCB0byB0aGUgc2hhZGVyLgorICAgICAqCisgICAgICogQHBhcmFtIG9mZnNldCBTZXQgdG8gdHJ1ZSBpZiB0aGUgdGhlIG1hdHJpeCBzaG91bGQgYmUgZnVkZ2VkICh0cmFuc2xhdGVkKSBzbGlnaHRseSB0byBkaXNhbWJpZ3VhdGUKKyAgICAgKiBnZW9tZXRyeSBwaXhlbCBwb3NpdGlvbmluZy4gU2VlIFZlcnRleDo6R2VvbWV0cnlGdWRnZUZhY3RvcigpLgorICAgICAqCisgICAgICogQHBhcmFtIGlnbm9yZVRyYW5zZm9ybSBTZXQgdG8gdHJ1ZSBpZiBsLHQscixiIGNvb3JkaW5hdGVzIGFscmVhZHkgaW4gbGF5ZXIgc3BhY2UsCisgICAgICogY3VycmVudFRyYW5zZm9ybSgpIHdpbGwgYmUgaWdub3JlZC4gKGUuZy4gd2hlbiBkcmF3aW5nIGNsaXAgaW4gbGF5ZXIgY29vcmRpbmF0ZXMgdG8gc3RlbmNpbCwKKyAgICAgKiBvciB3aGVuIHNpbXBsZSB0cmFuc2xhdGlvbiBoYXMgYmVlbiBleHRyYWN0ZWQpCisgICAgICovCisgICAgdm9pZCBzZXR1cERyYXdNb2RlbFZpZXcoTW9kZWxWaWV3TW9kZSBtb2RlLCBib29sIG9mZnNldCwKKyAgICAgICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgYm9vbCBpZ25vcmVUcmFuc2Zvcm0gPSBmYWxzZSk7CiAgICAgdm9pZCBzZXR1cERyYXdDb2xvclVuaWZvcm1zKCk7CiAgICAgdm9pZCBzZXR1cERyYXdQdXJlQ29sb3JVbmlmb3JtcygpOwotICAgIHZvaWQgc2V0dXBEcmF3U2hhZGVySWRlbnRpdHlVbmlmb3JtcygpOwogICAgIHZvaWQgc2V0dXBEcmF3U2hhZGVyVW5pZm9ybXMoYm9vbCBpZ25vcmVUcmFuc2Zvcm0gPSBmYWxzZSk7CiAgICAgdm9pZCBzZXR1cERyYXdDb2xvckZpbHRlclVuaWZvcm1zKCk7CiAgICAgdm9pZCBzZXR1cERyYXdTaW1wbGVNZXNoKCk7CkBAIC05OTQsOSArODg0LDkgQEAKICAgICB2b2lkIHNldHVwRHJhd1RleHR1cmVUcmFuc2Zvcm0oKTsKICAgICB2b2lkIHNldHVwRHJhd1RleHR1cmVUcmFuc2Zvcm1Vbmlmb3JtcyhtYXQ0JiB0cmFuc2Zvcm0pOwogICAgIHZvaWQgc2V0dXBEcmF3VGV4dEdhbW1hVW5pZm9ybXMoKTsKLSAgICB2b2lkIHNldHVwRHJhd01lc2goR0x2b2lkKiB2ZXJ0aWNlcywgR0x2b2lkKiB0ZXhDb29yZHMgPSBOVUxMLCBHTHVpbnQgdmJvID0gMCk7Ci0gICAgdm9pZCBzZXR1cERyYXdNZXNoKEdMdm9pZCogdmVydGljZXMsIEdMdm9pZCogdGV4Q29vcmRzLCBHTHZvaWQqIGNvbG9ycyk7Ci0gICAgdm9pZCBzZXR1cERyYXdNZXNoSW5kaWNlcyhHTHZvaWQqIHZlcnRpY2VzLCBHTHZvaWQqIHRleENvb3JkcywgR0x1aW50IHZibyA9IDApOworICAgIHZvaWQgc2V0dXBEcmF3TWVzaChjb25zdCBHTHZvaWQqIHZlcnRpY2VzLCBjb25zdCBHTHZvaWQqIHRleENvb3JkcyA9IE5VTEwsIEdMdWludCB2Ym8gPSAwKTsKKyAgICB2b2lkIHNldHVwRHJhd01lc2goY29uc3QgR0x2b2lkKiB2ZXJ0aWNlcywgY29uc3QgR0x2b2lkKiB0ZXhDb29yZHMsIGNvbnN0IEdMdm9pZCogY29sb3JzKTsKKyAgICB2b2lkIHNldHVwRHJhd01lc2hJbmRpY2VzKGNvbnN0IEdMdm9pZCogdmVydGljZXMsIGNvbnN0IEdMdm9pZCogdGV4Q29vcmRzLCBHTHVpbnQgdmJvID0gMCk7CiAgICAgdm9pZCBzZXR1cERyYXdJbmRleGVkVmVydGljZXMoR0x2b2lkKiB2ZXJ0aWNlcyk7CiAgICAgdm9pZCBhY2NvdW50Rm9yQ2xlYXIoU2tYZmVybW9kZTo6TW9kZSBtb2RlKTsKIApAQCAtMTAwNCwxMSArODk0LDEzIEBACiAgICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKICAgICB2b2lkIGZsdXNoTGF5ZXJzKCk7CiAKKyNpZiBERUJVR19MQVlFUlNfQVNfUkVHSU9OUwogICAgIC8qKgogICAgICAqIFJlbmRlcnMgdGhlIHNwZWNpZmllZCByZWdpb24gYXMgYSBzZXJpZXMgb2YgcmVjdGFuZ2xlcy4gVGhpcyBtZXRob2QKICAgICAgKiBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seS4KICAgICAgKi8KLSAgICB2b2lkIGRyYXdSZWdpb25SZWN0cyhjb25zdCBSZWdpb24mIHJlZ2lvbik7CisgICAgdm9pZCBkcmF3UmVnaW9uUmVjdHNEZWJ1Zyhjb25zdCBSZWdpb24mIHJlZ2lvbik7CisjZW5kaWYKIAogICAgIC8qKgogICAgICAqIFJlbmRlcnMgdGhlIHNwZWNpZmllZCByZWdpb24gYXMgYSBzZXJpZXMgb2YgcmVjdGFuZ2xlcy4gVGhlIHJlZ2lvbgpAQCAtMTAzNCwxMCArOTI2LDYgQEAKICAgICAgICAgbURpcnR5Q2xpcCA9IHRydWU7CiAgICAgfQogCi0gICAgaW5saW5lIG1hdDQmIGN1cnJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAqbVNuYXBzaG90LT50cmFuc2Zvcm07Ci0gICAgfQotCiAgICAgaW5saW5lIGNvbnN0IFV2TWFwcGVyJiBnZXRNYXBwZXIoY29uc3QgVGV4dHVyZSogdGV4dHVyZSkgewogICAgICAgICByZXR1cm4gdGV4dHVyZSAmJiB0ZXh0dXJlLT51dk1hcHBlciA/ICp0ZXh0dXJlLT51dk1hcHBlciA6IG1Vdk1hcHBlcjsKICAgICB9CkBAIC0xMDQ3LDIzICs5MzUsMjcgQEAKICAgICAgKiBjb21lIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgb3IgYW4gYXRsYXMuIElmIHRoaXMgbWV0aG9kIHJldHVybnMKICAgICAgKiBOVUxMLCB0aGUgdGV4dHVyZSBjb3VsZCBub3QgYmUgZm91bmQgYW5kL29yIGFsbG9jYXRlZC4KICAgICAgKi8KLSAgICBUZXh0dXJlKiBnZXRUZXh0dXJlKFNrQml0bWFwKiBiaXRtYXApOworICAgIFRleHR1cmUqIGdldFRleHR1cmUoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCk7CiAKLSAgICAvLyBEaW1lbnNpb25zIG9mIHRoZSBkcmF3aW5nIHN1cmZhY2UKLSAgICBpbnQgbVdpZHRoLCBtSGVpZ2h0OworICAgIC8vIE1hdHJpeCB1c2VkIGZvciB2aWV3L3Byb2plY3Rpb24gaW4gc2hhZGVycworICAgIG1hdDQgbVZpZXdQcm9qTWF0cml4OwogCi0gICAgLy8gTWF0cml4IHVzZWQgZm9yIG9ydGhvIHByb2plY3Rpb24gaW4gc2hhZGVycwotICAgIG1hdDQgbU9ydGhvTWF0cml4OwotCi0gICAgLy8gTW9kZWwtdmlldyBtYXRyaXggdXNlZCB0byBwb3NpdGlvbi9zaXplIG9iamVjdHMKKyAgICAvKioKKyAgICAgKiBNb2RlbC12aWV3IG1hdHJpeCB1c2VkIHRvIHBvc2l0aW9uL3NpemUgb2JqZWN0cworICAgICAqCisgICAgICogU3RvcmVzIG9wZXJhdGlvbi1sb2NhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBkcmF3IG1hdHJpeCB0aGF0IGFyZW4ndCBpbmNvcnBvcmF0ZWQgaW50byB0aGUKKyAgICAgKiBjdXJyZW50VHJhbnNmb3JtKCkuCisgICAgICoKKyAgICAgKiBJZiBnZW5lcmF0ZWQgd2l0aCBrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGUsIHRoZSBtTW9kZWxWaWV3IHdpbGwgcmVmbGVjdCBhbiB4L3kgb2Zmc2V0LAorICAgICAqIGUuZy4gdGhlIG9mZnNldCBpbiBkcmF3TGF5ZXIoKS4gSWYgZ2VuZXJhdGVkIHdpdGgga01vZGVsVmlld01vZGVfVHJhbnNsYXRlQW5kU2NhbGUsCisgICAgICogbU1vZGVsVmlldyB3aWxsIHJlZmxlY3QgYSB0cmFuc2xhdGlvbiBhbmQgc2NhbGUsIGUuZy4gdGhlIHRyYW5zbGF0aW9uIGFuZCBzY2FsZSByZXF1aXJlZCB0bworICAgICAqIG1ha2UgVkJPIDAgKGEgcmVjdCBvZiAoMCwwLDEsMSkpIHNjYWxlZCB0byBtYXRjaCB0aGUgeCx5IG9mZnNldCwgYW5kIHdpZHRoL2hlaWdodCBvZiBhCisgICAgICogYml0bWFwLgorICAgICAqCisgICAgICogVXNlZCBhcyBpbnB1dCB0byBTa2lhU2hhZGVyIHRyYW5zZm9ybWF0aW9uLgorICAgICAqLwogICAgIG1hdDQgbU1vZGVsVmlldzsKIAotICAgIC8vIE51bWJlciBvZiBzYXZlZCBzdGF0ZXMKLSAgICBpbnQgbVNhdmVDb3VudDsKLSAgICAvLyBCYXNlIHN0YXRlCi0gICAgc3A8U25hcHNob3Q+IG1GaXJzdFNuYXBzaG90OwotICAgIC8vIEN1cnJlbnQgc3RhdGUKLSAgICBzcDxTbmFwc2hvdD4gbVNuYXBzaG90OwogICAgIC8vIFN0YXRlIHVzZWQgdG8gZGVmaW5lIHRoZSBjbGlwcGluZyByZWdpb24KICAgICBSZWN0IG1UaWxpbmdDbGlwOwogICAgIC8vIElzIHRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2Ugb3BhcXVlCkBAIC0xMDkyLDkgKzk4NCw2IEBACiAgICAgLy8gTGlzdCBvZiBsYXllcnMgdG8gdXBkYXRlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmcmFtZQogICAgIFZlY3RvcjxMYXllcio+IG1MYXllclVwZGF0ZXM7CiAKLSAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY2xpcCBtdXN0IGJlIHJlc3RvcmVkCi0gICAgYm9vbCBtRGlydHlDbGlwOwotCiAgICAgLy8gVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHVzZWQgdG8gc2V0dXAgZHJhd2luZwogICAgIC8vIFVzZWQgdG8gZGVzY3JpYmUgdGhlIHNoYWRlcnMgdG8gZ2VuZXJhdGUKICAgICBQcm9ncmFtRGVzY3JpcHRpb24gbURlc2NyaXB0aW9uOwpAQCAtMTEyMiw5ICsxMDExLDYgQEAKICAgICBib29sIG1Db3VudE92ZXJkcmF3OwogICAgIGZsb2F0IG1PdmVyZHJhdzsKIAotICAgIC8vIE9wdGlvbmFsIG5hbWUgb2YgdGhlIHJlbmRlcmVyCi0gICAgU3RyaW5nOCBtTmFtZTsKLQogICAgIGZyaWVuZCBjbGFzcyBEaXNwbGF5TGlzdFJlbmRlcmVyOwogICAgIGZyaWVuZCBjbGFzcyBMYXllcjsKICAgICBmcmllbmQgY2xhc3MgVGV4dFNldHVwRnVuY3RvcjsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9QYXRjaC5oIGIvbGlicy9od3VpL1BhdGNoLmgKaW5kZXggNzYzYTc4NS4uNDg5MDY0YiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1BhdGNoLmgKKysrIGIvbGlicy9od3VpL1BhdGNoLmgKQEAgLTM2LDcgKzM2LDggQEAKIC8vIDktcGF0Y2ggc3RydWN0dXJlcwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi1zdHJ1Y3QgUGF0Y2ggeworY2xhc3MgUGF0Y2ggeworcHVibGljOgogICAgIFBhdGNoKCk7CiAgICAgflBhdGNoKCk7CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9QYXRoQ2FjaGUuY3BwIGIvbGlicy9od3VpL1BhdGhDYWNoZS5jcHAKaW5kZXggNWRmNjQwOC4uOTQ1OTg4NSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1BhdGhDYWNoZS5jcHAKKysrIGIvbGlicy9od3VpL1BhdGhDYWNoZS5jcHAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBtZW1zZXQoJnNoYXBlLCAwLCBzaXplb2YoU2hhcGUpKTsKIH0KIAotUGF0aERlc2NyaXB0aW9uOjpQYXRoRGVzY3JpcHRpb24oU2hhcGVUeXBlIHR5cGUsIFNrUGFpbnQqIHBhaW50KToKK1BhdGhEZXNjcmlwdGlvbjo6UGF0aERlc2NyaXB0aW9uKFNoYXBlVHlwZSB0eXBlLCBjb25zdCBTa1BhaW50KiBwYWludCk6CiAgICAgICAgIHR5cGUodHlwZSksCiAgICAgICAgIGpvaW4ocGFpbnQtPmdldFN0cm9rZUpvaW4oKSksCiAgICAgICAgIGNhcChwYWludC0+Z2V0U3Ryb2tlQ2FwKCkpLApAQCAtODIsNyArODIsNyBAQAogLy8gVXRpbGl0aWVzCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLWJvb2wgUGF0aENhY2hlOjpjYW5EcmF3QXNDb252ZXhQYXRoKFNrUGF0aCogcGF0aCwgU2tQYWludCogcGFpbnQpIHsKK2Jvb2wgUGF0aENhY2hlOjpjYW5EcmF3QXNDb252ZXhQYXRoKFNrUGF0aCogcGF0aCwgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYWZ0ZXIgUGF0aFRlc3NlbGxhdG9yIGhhbmRsZXMgam9pbnMgcHJvcGVybHkKICAgICByZXR1cm4gcGFpbnQtPmdldFBhdGhFZmZlY3QoKSA9PSBOVUxMICYmIHBhdGgtPmdldENvbnZleGl0eSgpID09IFNrUGF0aDo6a0NvbnZleF9Db252ZXhpdHk7CiB9CkBAIC00MTMsNyArNDEzLDcgQEAKICAqIGluIHRoZSBjYWNoZS4gVGhlIHNvdXJjZSBwYXRoIGlzIGFsc28gdXNlZCB0byByZWNsYWltIGdhcmJhZ2Ugd2hlbiBhCiAgKiBEYWx2aWsgUGF0aCBvYmplY3QgaXMgY29sbGVjdGVkLgogICovCi1zdGF0aWMgU2tQYXRoKiBnZXRTb3VyY2VQYXRoKFNrUGF0aCogcGF0aCkgeworc3RhdGljIGNvbnN0IFNrUGF0aCogZ2V0U291cmNlUGF0aChjb25zdCBTa1BhdGgqIHBhdGgpIHsKICAgICBjb25zdCBTa1BhdGgqIHNvdXJjZVBhdGggPSBwYXRoLT5nZXRTb3VyY2VQYXRoKCk7CiAgICAgaWYgKHNvdXJjZVBhdGggJiYgc291cmNlUGF0aC0+Z2V0R2VuZXJhdGlvbklEKCkgPT0gcGF0aC0+Z2V0R2VuZXJhdGlvbklEKCkpIHsKICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2tQYXRoKj4oc291cmNlUGF0aCk7CkBAIC00MjEsNyArNDIxLDcgQEAKICAgICByZXR1cm4gcGF0aDsKIH0KIAotUGF0aFRleHR1cmUqIFBhdGhDYWNoZTo6Z2V0KFNrUGF0aCogcGF0aCwgU2tQYWludCogcGFpbnQpIHsKK1BhdGhUZXh0dXJlKiBQYXRoQ2FjaGU6OmdldChjb25zdCBTa1BhdGgqIHBhdGgsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgcGF0aCA9IGdldFNvdXJjZVBhdGgocGF0aCk7CiAKICAgICBQYXRoRGVzY3JpcHRpb24gZW50cnkoa1NoYXBlUGF0aCwgcGFpbnQpOwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAgICAgcmV0dXJuIHRleHR1cmU7CiB9CiAKLXZvaWQgUGF0aENhY2hlOjpwcmVjYWNoZShTa1BhdGgqIHBhdGgsIFNrUGFpbnQqIHBhaW50KSB7Cit2b2lkIFBhdGhDYWNoZTo6cHJlY2FjaGUoY29uc3QgU2tQYXRoKiBwYXRoLCBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIGlmICghQ2FjaGVzOjpnZXRJbnN0YW5jZSgpLnRhc2tzLmNhblJ1blRhc2tzKCkpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTUwNyw3ICs1MDcsNyBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiBQYXRoVGV4dHVyZSogUGF0aENhY2hlOjpnZXRSb3VuZFJlY3QoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwKLSAgICAgICAgZmxvYXQgcngsIGZsb2F0IHJ5LCBTa1BhaW50KiBwYWludCkgeworICAgICAgICBmbG9hdCByeCwgZmxvYXQgcnksIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgUGF0aERlc2NyaXB0aW9uIGVudHJ5KGtTaGFwZVJvdW5kUmVjdCwgcGFpbnQpOwogICAgIGVudHJ5LnNoYXBlLnJvdW5kUmVjdC5tV2lkdGggPSB3aWR0aDsKICAgICBlbnRyeS5zaGFwZS5yb3VuZFJlY3QubUhlaWdodCA9IGhlaWdodDsKQEAgLTUzMiw3ICs1MzIsNyBAQAogLy8gQ2lyY2xlcwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi1QYXRoVGV4dHVyZSogUGF0aENhY2hlOjpnZXRDaXJjbGUoZmxvYXQgcmFkaXVzLCBTa1BhaW50KiBwYWludCkgeworUGF0aFRleHR1cmUqIFBhdGhDYWNoZTo6Z2V0Q2lyY2xlKGZsb2F0IHJhZGl1cywgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBQYXRoRGVzY3JpcHRpb24gZW50cnkoa1NoYXBlQ2lyY2xlLCBwYWludCk7CiAgICAgZW50cnkuc2hhcGUuY2lyY2xlLm1SYWRpdXMgPSByYWRpdXM7CiAKQEAgLTU1Miw3ICs1NTIsNyBAQAogLy8gT3ZhbHMKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotUGF0aFRleHR1cmUqIFBhdGhDYWNoZTo6Z2V0T3ZhbChmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBTa1BhaW50KiBwYWludCkgeworUGF0aFRleHR1cmUqIFBhdGhDYWNoZTo6Z2V0T3ZhbChmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIFBhdGhEZXNjcmlwdGlvbiBlbnRyeShrU2hhcGVPdmFsLCBwYWludCk7CiAgICAgZW50cnkuc2hhcGUub3ZhbC5tV2lkdGggPSB3aWR0aDsKICAgICBlbnRyeS5zaGFwZS5vdmFsLm1IZWlnaHQgPSBoZWlnaHQ7CkBAIC01NzUsNyArNTc1LDcgQEAKIC8vIFJlY3RzCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLVBhdGhUZXh0dXJlKiBQYXRoQ2FjaGU6OmdldFJlY3QoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgU2tQYWludCogcGFpbnQpIHsKK1BhdGhUZXh0dXJlKiBQYXRoQ2FjaGU6OmdldFJlY3QoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgY29uc3QgU2tQYWludCogcGFpbnQpIHsKICAgICBQYXRoRGVzY3JpcHRpb24gZW50cnkoa1NoYXBlUmVjdCwgcGFpbnQpOwogICAgIGVudHJ5LnNoYXBlLnJlY3QubVdpZHRoID0gd2lkdGg7CiAgICAgZW50cnkuc2hhcGUucmVjdC5tSGVpZ2h0ID0gaGVpZ2h0OwpAQCAtNTk5LDcgKzU5OSw3IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIFBhdGhUZXh0dXJlKiBQYXRoQ2FjaGU6OmdldEFyYyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LAotICAgICAgICBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBzd2VlcEFuZ2xlLCBib29sIHVzZUNlbnRlciwgU2tQYWludCogcGFpbnQpIHsKKyAgICAgICAgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgc3dlZXBBbmdsZSwgYm9vbCB1c2VDZW50ZXIsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CiAgICAgUGF0aERlc2NyaXB0aW9uIGVudHJ5KGtTaGFwZUFyYywgcGFpbnQpOwogICAgIGVudHJ5LnNoYXBlLmFyYy5tV2lkdGggPSB3aWR0aDsKICAgICBlbnRyeS5zaGFwZS5hcmMubUhlaWdodCA9IGhlaWdodDsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9QYXRoQ2FjaGUuaCBiL2xpYnMvaHd1aS9QYXRoQ2FjaGUuaAppbmRleCAxNmQyMGE4Li44NDc4NTNhIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvUGF0aENhY2hlLmgKKysrIGIvbGlicy9od3VpL1BhdGhDYWNoZS5oCkBAIC0zMiw3ICszMiw3IEBACiBjbGFzcyBTa0NhbnZhczsKIGNsYXNzIFNrUGFpbnQ7CiBjbGFzcyBTa1BhdGg7Ci1jbGFzcyBTa1JlY3Q7CitzdHJ1Y3QgU2tSZWN0OwogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgdWlyZW5kZXJlciB7CkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICBTa1BhdGhFZmZlY3QqIHBhdGhFZmZlY3Q7CiAgICAgdW5pb24gU2hhcGUgewogICAgICAgICBzdHJ1Y3QgUGF0aCB7Ci0gICAgICAgICAgICBTa1BhdGgqIG1QYXRoOworICAgICAgICAgICAgY29uc3QgU2tQYXRoKiBtUGF0aDsKICAgICAgICAgfSBwYXRoOwogICAgICAgICBzdHJ1Y3QgUm91bmRSZWN0IHsKICAgICAgICAgICAgIGZsb2F0IG1XaWR0aDsKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgIH0gc2hhcGU7CiAKICAgICBQYXRoRGVzY3JpcHRpb24oKTsKLSAgICBQYXRoRGVzY3JpcHRpb24oU2hhcGVUeXBlIHNoYXBlVHlwZSwgU2tQYWludCogcGFpbnQpOworICAgIFBhdGhEZXNjcmlwdGlvbihTaGFwZVR5cGUgc2hhcGVUeXBlLCBjb25zdCBTa1BhaW50KiBwYWludCk7CiAKICAgICBoYXNoX3QgaGFzaCgpIGNvbnN0OwogCkBAIC0yMDcsMTMgKzIwNywxMyBAQAogICAgICAqLwogICAgIHVpbnQzMl90IGdldFNpemUoKTsKIAotICAgIFBhdGhUZXh0dXJlKiBnZXRSb3VuZFJlY3QoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgcngsIGZsb2F0IHJ5LCBTa1BhaW50KiBwYWludCk7Ci0gICAgUGF0aFRleHR1cmUqIGdldENpcmNsZShmbG9hdCByYWRpdXMsIFNrUGFpbnQqIHBhaW50KTsKLSAgICBQYXRoVGV4dHVyZSogZ2V0T3ZhbChmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBTa1BhaW50KiBwYWludCk7Ci0gICAgUGF0aFRleHR1cmUqIGdldFJlY3QoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgU2tQYWludCogcGFpbnQpOworICAgIFBhdGhUZXh0dXJlKiBnZXRSb3VuZFJlY3QoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgcngsIGZsb2F0IHJ5LCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgUGF0aFRleHR1cmUqIGdldENpcmNsZShmbG9hdCByYWRpdXMsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKKyAgICBQYXRoVGV4dHVyZSogZ2V0T3ZhbChmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgUGF0aFRleHR1cmUqIGdldFJlY3QoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgY29uc3QgU2tQYWludCogcGFpbnQpOwogICAgIFBhdGhUZXh0dXJlKiBnZXRBcmMoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgc3dlZXBBbmdsZSwKLSAgICAgICAgICAgIGJvb2wgdXNlQ2VudGVyLCBTa1BhaW50KiBwYWludCk7Ci0gICAgUGF0aFRleHR1cmUqIGdldChTa1BhdGgqIHBhdGgsIFNrUGFpbnQqIHBhaW50KTsKKyAgICAgICAgICAgIGJvb2wgdXNlQ2VudGVyLCBjb25zdCBTa1BhaW50KiBwYWludCk7CisgICAgUGF0aFRleHR1cmUqIGdldChjb25zdCBTa1BhdGgqIHBhdGgsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKIAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBwYXRoLiBUaGlzIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIHRocmVhZHMKQEAgLTIzOSw5ICsyMzksOSBAQAogICAgIC8qKgogICAgICAqIFByZWNhY2hlcyB0aGUgc3BlY2lmaWVkIHBhdGggdXNpbmcgYmFja2dyb3VuZCB0aHJlYWRzLgogICAgICAqLwotICAgIHZvaWQgcHJlY2FjaGUoU2tQYXRoKiBwYXRoLCBTa1BhaW50KiBwYWludCk7CisgICAgdm9pZCBwcmVjYWNoZShjb25zdCBTa1BhdGgqIHBhdGgsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKIAotICAgIHN0YXRpYyBib29sIGNhbkRyYXdBc0NvbnZleFBhdGgoU2tQYXRoKiBwYXRoLCBTa1BhaW50KiBwYWludCk7CisgICAgc3RhdGljIGJvb2wgY2FuRHJhd0FzQ29udmV4UGF0aChTa1BhdGgqIHBhdGgsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKICAgICBzdGF0aWMgdm9pZCBjb21wdXRlUGF0aEJvdW5kcyhjb25zdCBTa1BhdGgqIHBhdGgsIGNvbnN0IFNrUGFpbnQqIHBhaW50LAogICAgICAgICAgICAgZmxvYXQmIGxlZnQsIGZsb2F0JiB0b3AsIGZsb2F0JiBvZmZzZXQsIHVpbnQzMl90JiB3aWR0aCwgdWludDMyX3QmIGhlaWdodCk7CiAgICAgc3RhdGljIHZvaWQgY29tcHV0ZUJvdW5kcyhjb25zdCBTa1JlY3QmIGJvdW5kcywgY29uc3QgU2tQYWludCogcGFpbnQsCkBAIC0yOTIsNyArMjkyLDcgQEAKIAogICAgIGNsYXNzIFBhdGhUYXNrOiBwdWJsaWMgVGFzazxTa0JpdG1hcCo+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBhdGhUYXNrKFNrUGF0aCogcGF0aCwgU2tQYWludCogcGFpbnQsIFBhdGhUZXh0dXJlKiB0ZXh0dXJlKToKKyAgICAgICAgUGF0aFRhc2soY29uc3QgU2tQYXRoKiBwYXRoLCBjb25zdCBTa1BhaW50KiBwYWludCwgUGF0aFRleHR1cmUqIHRleHR1cmUpOgogICAgICAgICAgICAgcGF0aChwYXRoKSwgcGFpbnQocGFpbnQpLCB0ZXh0dXJlKHRleHR1cmUpIHsKICAgICAgICAgfQogCkBAIC0zMDAsOCArMzAwLDggQEAKICAgICAgICAgICAgIGRlbGV0ZSBmdXR1cmUoKS0+Z2V0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBTa1BhdGgqIHBhdGg7Ci0gICAgICAgIFNrUGFpbnQqIHBhaW50OworICAgICAgICBjb25zdCBTa1BhdGgqIHBhdGg7CisgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50OwogICAgICAgICBQYXRoVGV4dHVyZSogdGV4dHVyZTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvUGF0aFRlc3NlbGxhdG9yLmNwcCBiL2xpYnMvaHd1aS9QYXRoVGVzc2VsbGF0b3IuY3BwCmluZGV4IDM5NzA5MTMuLmM2Y2U2N2MgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9QYXRoVGVzc2VsbGF0b3IuY3BwCisrKyBiL2xpYnMvaHd1aS9QYXRoVGVzc2VsbGF0b3IuY3BwCkBAIC0xNCw3ICsxNCw3IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jZGVmaW5lIExPR19UQUcgIlBhdGhUZXNzZWxsYXRvciIKKyNkZWZpbmUgTE9HX1RBRyAiT3BlbkdMUmVuZGVyZXIiCiAjZGVmaW5lIExPR19OREVCVUcgMQogI2RlZmluZSBBVFJBQ0VfVEFHIEFUUkFDRV9UQUdfR1JBUEhJQ1MKIApAQCAtMjQsMTEgKzI0LDExIEBACiAjZGVmaW5lIERFQlVHX0RVTVBfQUxQSEFfQlVGRkVSKCkgXAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdmVydGV4QnVmZmVyLmdldFNpemUoKTsgaSsrKSB7IFwKICAgICAgICAgQUxPR0QoInBvaW50ICVkIGF0ICVmICVmLCBhbHBoYSAlZiIsIFwKLSAgICAgICAgaSwgYnVmZmVyW2ldLnBvc2l0aW9uWzBdLCBidWZmZXJbaV0ucG9zaXRpb25bMV0sIGJ1ZmZlcltpXS5hbHBoYSk7IFwKKyAgICAgICAgaSwgYnVmZmVyW2ldLngsIGJ1ZmZlcltpXS55LCBidWZmZXJbaV0uYWxwaGEpOyBcCiAgICAgfQogI2RlZmluZSBERUJVR19EVU1QX0JVRkZFUigpIFwKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHZlcnRleEJ1ZmZlci5nZXRTaXplKCk7IGkrKykgeyBcCi0gICAgICAgIEFMT0dEKCJwb2ludCAlZCBhdCAlZiAlZiIsIGksIGJ1ZmZlcltpXS5wb3NpdGlvblswXSwgYnVmZmVyW2ldLnBvc2l0aW9uWzFdKTsgXAorICAgICAgICBBTE9HRCgicG9pbnQgJWQgYXQgJWYgJWYiLCBpLCBidWZmZXJbaV0ueCwgYnVmZmVyW2ldLnkpOyBcCiAgICAgfQogI2Vsc2UKICNkZWZpbmUgREVCVUdfRFVNUF9BTFBIQV9CVUZGRVIoKQpAQCAtNTcsMjMgKzU3LDE4IEBACiAjZGVmaW5lIFJPVU5EX0NBUF9USFJFU0ggMC4yNWYKICNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTMyZgogCi12b2lkIFBhdGhUZXNzZWxsYXRvcjo6ZXhwYW5kQm91bmRzRm9yU3Ryb2tlKFNrUmVjdCYgYm91bmRzLCBjb25zdCBTa1BhaW50KiBwYWludCwKLSAgICAgICAgYm9vbCBmb3JjZUV4cGFuZCkgewotICAgIGlmIChmb3JjZUV4cGFuZCB8fCBwYWludC0+Z2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSkgeworLyoqCisgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYWNjb3VudCBmb3IgdGhlIEFBIGNhc2Ugd2l0aCBzdWItcGl4ZWwgbGluZSB0aGlja25lc3MgKG5vdCBqdXN0IDAgPAorICogd2lkdGggPCAxLjAsIGNhbnZhcyBzY2FsZSBmYWN0b3JzIGluIGFzIHdlbGwpIHNvIHRoaXMgY2FuJ3QgYmUgdXNlZCBmb3IgcG9pbnRzL2xpbmVzCisgKi8KK3ZvaWQgUGF0aFRlc3NlbGxhdG9yOjpleHBhbmRCb3VuZHNGb3JTdHJva2UoU2tSZWN0JiBib3VuZHMsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSB7CisgICAgaWYgKHBhaW50LT5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxlKSB7CiAgICAgICAgIGZsb2F0IG91dHNldCA9IHBhaW50LT5nZXRTdHJva2VXaWR0aCgpICogMC41ZjsKICAgICAgICAgaWYgKG91dHNldCA9PSAwKSBvdXRzZXQgPSAwLjVmOyAvLyBhY2NvdW50IGZvciBoYWlybGluZQogICAgICAgICBib3VuZHMub3V0c2V0KG91dHNldCwgb3V0c2V0KTsKICAgICB9CiB9CiAKLWlubGluZSBzdGF0aWMgdm9pZCBjb3B5VmVydGV4KFZlcnRleCogZGVzdFB0ciwgY29uc3QgVmVydGV4KiBzcmNQdHIpIHsKLSAgICBWZXJ0ZXg6OnNldChkZXN0UHRyLCBzcmNQdHItPnBvc2l0aW9uWzBdLCBzcmNQdHItPnBvc2l0aW9uWzFdKTsKLX0KLQotaW5saW5lIHN0YXRpYyB2b2lkIGNvcHlBbHBoYVZlcnRleChBbHBoYVZlcnRleCogZGVzdFB0ciwgY29uc3QgQWxwaGFWZXJ0ZXgqIHNyY1B0cikgewotICAgIEFscGhhVmVydGV4OjpzZXQoZGVzdFB0ciwgc3JjUHRyLT5wb3NpdGlvblswXSwgc3JjUHRyLT5wb3NpdGlvblsxXSwgc3JjUHRyLT5hbHBoYSk7Ci19Ci0KIC8qKgogICogUHJvZHVjZXMgYSBwc2V1ZG8tbm9ybWFsIGZvciBhIHZlcnRleCwgZ2l2ZW4gdGhlIG5vcm1hbHMgb2YgdGhlIHR3byBpbmNvbWluZyBsaW5lcy4gSWYgdGhlIG9mZnNldAogICogZnJvbSBlYWNoIHZlcnRleCBpbiBhIHBlcmltZXRlciBpcyBjYWxjdWxhdGVkLCB0aGUgcmVzdWx0YW50IGxpbmVzIGNvbm5lY3RpbmcgdGhlIG9mZnNldCB2ZXJ0aWNlcwpAQCAtOTMsMTYgKzg4LDE2IEBACiAgKi8KIHN0cnVjdCBQYWludEluZm8gewogcHVibGljOgotICAgIFBhaW50SW5mbyhjb25zdCBTa1BhaW50KiBwYWludCwgY29uc3QgbWF0NCAqdHJhbnNmb3JtKSA6CisgICAgUGFpbnRJbmZvKGNvbnN0IFNrUGFpbnQqIHBhaW50LCBjb25zdCBtYXQ0JiB0cmFuc2Zvcm0pIDoKICAgICAgICAgICAgIHN0eWxlKHBhaW50LT5nZXRTdHlsZSgpKSwgY2FwKHBhaW50LT5nZXRTdHJva2VDYXAoKSksIGlzQUEocGFpbnQtPmlzQW50aUFsaWFzKCkpLAogICAgICAgICAgICAgaW52ZXJzZVNjYWxlWCgxLjBmKSwgaW52ZXJzZVNjYWxlWSgxLjBmKSwKICAgICAgICAgICAgIGhhbGZTdHJva2VXaWR0aChwYWludC0+Z2V0U3Ryb2tlV2lkdGgoKSAqIDAuNWYpLCBtYXhBbHBoYSgxLjBmKSB7CiAgICAgICAgIC8vIGNvbXB1dGUgaW52ZXJzZSBzY2FsZXMKLSAgICAgICAgaWYgKENDX1VOTElLRUxZKCF0cmFuc2Zvcm0tPmlzUHVyZVRyYW5zbGF0ZSgpKSkgewotICAgICAgICAgICAgZmxvYXQgbTAwID0gdHJhbnNmb3JtLT5kYXRhW01hdHJpeDQ6OmtTY2FsZVhdOwotICAgICAgICAgICAgZmxvYXQgbTAxID0gdHJhbnNmb3JtLT5kYXRhW01hdHJpeDQ6OmtTa2V3WV07Ci0gICAgICAgICAgICBmbG9hdCBtMTAgPSB0cmFuc2Zvcm0tPmRhdGFbTWF0cml4NDo6a1NrZXdYXTsKLSAgICAgICAgICAgIGZsb2F0IG0xMSA9IHRyYW5zZm9ybS0+ZGF0YVtNYXRyaXg0OjprU2NhbGVZXTsKKyAgICAgICAgaWYgKENDX1VOTElLRUxZKCF0cmFuc2Zvcm0uaXNQdXJlVHJhbnNsYXRlKCkpKSB7CisgICAgICAgICAgICBmbG9hdCBtMDAgPSB0cmFuc2Zvcm0uZGF0YVtNYXRyaXg0OjprU2NhbGVYXTsKKyAgICAgICAgICAgIGZsb2F0IG0wMSA9IHRyYW5zZm9ybS5kYXRhW01hdHJpeDQ6OmtTa2V3WV07CisgICAgICAgICAgICBmbG9hdCBtMTAgPSB0cmFuc2Zvcm0uZGF0YVtNYXRyaXg0OjprU2tld1hdOworICAgICAgICAgICAgZmxvYXQgbTExID0gdHJhbnNmb3JtLmRhdGFbTWF0cml4NDo6a1NjYWxlWV07CiAgICAgICAgICAgICBmbG9hdCBzY2FsZVggPSBzcXJ0KG0wMCAqIG0wMCArIG0wMSAqIG0wMSk7CiAgICAgICAgICAgICBmbG9hdCBzY2FsZVkgPSBzcXJ0KG0xMCAqIG0xMCArIG0xMSAqIG0xMSk7CiAgICAgICAgICAgICBpbnZlcnNlU2NhbGVYID0gKHNjYWxlWCAhPSAwKSA/ICgxLjBmIC8gc2NhbGVYKSA6IDEuMGY7CkBAIC0xNTksNiArMTU0LDE3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorCisgICAgLyoqCisgICAgICogT3V0c2V0IHRoZSBib3VuZHMgb2YgcG9pbnQgZGF0YSAoZm9yIGxpbmUgZW5kcG9pbnRzIG9yIHBvaW50cykgdG8gYWNjb3VudCBmb3IgQUEgc3Ryb2tlCisgICAgICogZ2VvbWV0cnkuCisgICAgICovCisgICAgdm9pZCBleHBhbmRCb3VuZHNGb3JTdHJva2VBQShTa1JlY3QmIGJvdW5kcykgY29uc3QgeworICAgICAgICBmbG9hdCBvdXRzZXQgPSBoYWxmU3Ryb2tlV2lkdGg7CisgICAgICAgIGlmIChvdXRzZXQgPT0gMCkgb3V0c2V0ID0gMC41ZjsKKyAgICAgICAgYm91bmRzLm91dHNldChvdXRzZXQgKiBpbnZlcnNlU2NhbGVYICsgVmVydGV4OjpHZW9tZXRyeUZ1ZGdlRmFjdG9yKCksCisgICAgICAgICAgICAgICAgb3V0c2V0ICogaW52ZXJzZVNjYWxlWSArIFZlcnRleDo6R2VvbWV0cnlGdWRnZUZhY3RvcigpKTsKKyAgICB9CiB9OwogCiB2b2lkIGdldEZpbGxWZXJ0aWNlc0Zyb21QZXJpbWV0ZXIoY29uc3QgVmVjdG9yPFZlcnRleD4mIHBlcmltZXRlciwgVmVydGV4QnVmZmVyJiB2ZXJ0ZXhCdWZmZXIpIHsKQEAgLTE3MCw5ICsxNzYsOSBAQAogICAgIGludCBzcmNBaW5kZXggPSAwOwogICAgIGludCBzcmNCaW5kZXggPSBwZXJpbWV0ZXIuc2l6ZSgpIC0gMTsKICAgICB3aGlsZSAoc3JjQWluZGV4IDw9IHNyY0JpbmRleCkgewotICAgICAgICBjb3B5VmVydGV4KCZidWZmZXJbY3VycmVudEluZGV4KytdLCAmcGVyaW1ldGVyW3NyY0FpbmRleF0pOworICAgICAgICBidWZmZXJbY3VycmVudEluZGV4KytdID0gcGVyaW1ldGVyW3NyY0FpbmRleF07CiAgICAgICAgIGlmIChzcmNBaW5kZXggPT0gc3JjQmluZGV4KSBicmVhazsKLSAgICAgICAgY29weVZlcnRleCgmYnVmZmVyW2N1cnJlbnRJbmRleCsrXSwgJnBlcmltZXRlcltzcmNCaW5kZXhdKTsKKyAgICAgICAgYnVmZmVyW2N1cnJlbnRJbmRleCsrXSA9IHBlcmltZXRlcltzcmNCaW5kZXhdOwogICAgICAgICBzcmNBaW5kZXgrKzsKICAgICAgICAgc3JjQmluZGV4LS07CiAgICAgfQpAQCAtMTkyLDI1ICsxOTgsMjUgQEAKICAgICBpbnQgY3VycmVudEluZGV4ID0gMDsKICAgICBjb25zdCBWZXJ0ZXgqIGxhc3QgPSAmKHBlcmltZXRlcltwZXJpbWV0ZXIuc2l6ZSgpIC0gMV0pOwogICAgIGNvbnN0IFZlcnRleCogY3VycmVudCA9ICYocGVyaW1ldGVyWzBdKTsKLSAgICB2ZWMyIGxhc3ROb3JtYWwoY3VycmVudC0+cG9zaXRpb25bMV0gLSBsYXN0LT5wb3NpdGlvblsxXSwKLSAgICAgICAgICAgIGxhc3QtPnBvc2l0aW9uWzBdIC0gY3VycmVudC0+cG9zaXRpb25bMF0pOworICAgIHZlYzIgbGFzdE5vcm1hbChjdXJyZW50LT55IC0gbGFzdC0+eSwKKyAgICAgICAgICAgIGxhc3QtPnggLSBjdXJyZW50LT54KTsKICAgICBsYXN0Tm9ybWFsLm5vcm1hbGl6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGVyaW1ldGVyLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGNvbnN0IFZlcnRleCogbmV4dCA9ICYocGVyaW1ldGVyW2kgKyAxID49IHBlcmltZXRlci5zaXplKCkgPyAwIDogaSArIDFdKTsKLSAgICAgICAgdmVjMiBuZXh0Tm9ybWFsKG5leHQtPnBvc2l0aW9uWzFdIC0gY3VycmVudC0+cG9zaXRpb25bMV0sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBuZXh0LT5wb3NpdGlvblswXSk7CisgICAgICAgIHZlYzIgbmV4dE5vcm1hbChuZXh0LT55IC0gY3VycmVudC0+eSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gbmV4dC0+eCk7CiAgICAgICAgIG5leHROb3JtYWwubm9ybWFsaXplKCk7CiAKICAgICAgICAgdmVjMiB0b3RhbE9mZnNldCA9IHRvdGFsT2Zmc2V0RnJvbU5vcm1hbHMobGFzdE5vcm1hbCwgbmV4dE5vcm1hbCk7CiAgICAgICAgIHBhaW50SW5mby5zY2FsZU9mZnNldEZvclN0cm9rZVdpZHRoKHRvdGFsT2Zmc2V0KTsKIAogICAgICAgICBWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSArIHRvdGFsT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gKyB0b3RhbE9mZnNldC55KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54ICsgdG90YWxPZmZzZXQueCwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT55ICsgdG90YWxPZmZzZXQueSk7CiAKICAgICAgICAgVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50SW5kZXgrK10sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSB0b3RhbE9mZnNldC54LAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzFdIC0gdG90YWxPZmZzZXQueSk7CisgICAgICAgICAgICAgICAgY3VycmVudC0+eCAtIHRvdGFsT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgY3VycmVudC0+eSAtIHRvdGFsT2Zmc2V0LnkpOwogCiAgICAgICAgIGxhc3QgPSBjdXJyZW50OwogICAgICAgICBjdXJyZW50ID0gbmV4dDsKQEAgLTIxOCw4ICsyMjQsOCBAQAogICAgIH0KIAogICAgIC8vIHdyYXAgYXJvdW5kIHRvIGJlZ2lubmluZwotICAgIGNvcHlWZXJ0ZXgoJmJ1ZmZlcltjdXJyZW50SW5kZXgrK10sICZidWZmZXJbMF0pOwotICAgIGNvcHlWZXJ0ZXgoJmJ1ZmZlcltjdXJyZW50SW5kZXgrK10sICZidWZmZXJbMV0pOworICAgIGJ1ZmZlcltjdXJyZW50SW5kZXgrK10gPSBidWZmZXJbMF07CisgICAgYnVmZmVyW2N1cnJlbnRJbmRleCsrXSA9IGJ1ZmZlclsxXTsKIAogICAgIERFQlVHX0RVTVBfQlVGRkVSKCk7CiB9CkBAIC0yMjksNyArMjM1LDcgQEAKICAgICB2ZWMyIHN0cm9rZU9mZnNldCA9IG5vcm1hbDsKICAgICBwYWludEluZm8uc2NhbGVPZmZzZXRGb3JTdHJva2VXaWR0aChzdHJva2VPZmZzZXQpOwogCi0gICAgdmVjMiByZWZlcmVuY2VQb2ludChjZW50ZXIucG9zaXRpb25bMF0sIGNlbnRlci5wb3NpdGlvblsxXSk7CisgICAgdmVjMiByZWZlcmVuY2VQb2ludChjZW50ZXIueCwgY2VudGVyLnkpOwogICAgIGlmIChwYWludEluZm8uY2FwID09IFNrUGFpbnQ6OmtTcXVhcmVfQ2FwKSB7CiAgICAgICAgIHJlZmVyZW5jZVBvaW50ICs9IHZlYzIoLXN0cm9rZU9mZnNldC55LCBzdHJva2VPZmZzZXQueCkgKiAoYmVnaW4gPyAtMSA6IDEpOwogICAgIH0KQEAgLTI1NSwxMSArMjYxLDExIEBACiAgICAgaWYgKGV4dHJhID4gMCkgewogICAgICAgICAvLyB0ZXNzZWxsYXRlIGJvdGggcm91bmQgY2FwcwogICAgICAgICBmbG9hdCBiZWdpblRoZXRhID0gYXRhbjIoCi0gICAgICAgICAgICAgICAgICAgIC0gKHZlcnRpY2VzWzBdLnBvc2l0aW9uWzBdIC0gdmVydGljZXNbMV0ucG9zaXRpb25bMF0pLAotICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1swXS5wb3NpdGlvblsxXSAtIHZlcnRpY2VzWzFdLnBvc2l0aW9uWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgLSAodmVydGljZXNbMF0ueCAtIHZlcnRpY2VzWzFdLngpLAorICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1swXS55IC0gdmVydGljZXNbMV0ueSk7CiAgICAgICAgIGZsb2F0IGVuZFRoZXRhID0gYXRhbjIoCi0gICAgICAgICAgICAgICAgICAgIC0gKHZlcnRpY2VzW2xhc3RJbmRleF0ucG9zaXRpb25bMF0gLSB2ZXJ0aWNlc1tsYXN0SW5kZXggLSAxXS5wb3NpdGlvblswXSksCi0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzW2xhc3RJbmRleF0ucG9zaXRpb25bMV0gLSB2ZXJ0aWNlc1tsYXN0SW5kZXggLSAxXS5wb3NpdGlvblsxXSk7CisgICAgICAgICAgICAgICAgICAgIC0gKHZlcnRpY2VzW2xhc3RJbmRleF0ueCAtIHZlcnRpY2VzW2xhc3RJbmRleCAtIDFdLngpLAorICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tsYXN0SW5kZXhdLnkgLSB2ZXJ0aWNlc1tsYXN0SW5kZXggLSAxXS55KTsKICAgICAgICAgY29uc3QgZmxvYXQgZFRoZXRhID0gUEkgLyAoZXh0cmEgKyAxKTsKICAgICAgICAgY29uc3QgZmxvYXQgcmFkaWFsU2NhbGUgPSAyLjBmIC8gKDEgKyBjb3MoZFRoZXRhKSk7CiAKQEAgLTI3NSwzNyArMjgxLDM3IEBACiAgICAgICAgICAgICB2ZWMyIGJlZ2luUmFkaWFsT2Zmc2V0KGNvcyhiZWdpblRoZXRhKSwgc2luKGJlZ2luVGhldGEpKTsKICAgICAgICAgICAgIHBhaW50SW5mby5zY2FsZU9mZnNldEZvclN0cm9rZVdpZHRoKGJlZ2luUmFkaWFsT2Zmc2V0KTsKICAgICAgICAgICAgIFZlcnRleDo6c2V0KCZidWZmZXJbY2FwT2Zmc2V0XSwKLSAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbMF0ucG9zaXRpb25bMF0gKyBiZWdpblJhZGlhbE9mZnNldC54LAotICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1swXS5wb3NpdGlvblsxXSArIGJlZ2luUmFkaWFsT2Zmc2V0LnkpOworICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1swXS54ICsgYmVnaW5SYWRpYWxPZmZzZXQueCwKKyAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbMF0ueSArIGJlZ2luUmFkaWFsT2Zmc2V0LnkpOwogCiAgICAgICAgICAgICBlbmRUaGV0YSArPSBkVGhldGE7CiAgICAgICAgICAgICB2ZWMyIGVuZFJhZGlhbE9mZnNldChjb3MoZW5kVGhldGEpLCBzaW4oZW5kVGhldGEpKTsKICAgICAgICAgICAgIHBhaW50SW5mby5zY2FsZU9mZnNldEZvclN0cm9rZVdpZHRoKGVuZFJhZGlhbE9mZnNldCk7CiAgICAgICAgICAgICBWZXJ0ZXg6OnNldCgmYnVmZmVyW2FsbG9jU2l6ZSAtIDEgLSBjYXBPZmZzZXRdLAotICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tsYXN0SW5kZXhdLnBvc2l0aW9uWzBdICsgZW5kUmFkaWFsT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzW2xhc3RJbmRleF0ucG9zaXRpb25bMV0gKyBlbmRSYWRpYWxPZmZzZXQueSk7CisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzW2xhc3RJbmRleF0ueCArIGVuZFJhZGlhbE9mZnNldC54LAorICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tsYXN0SW5kZXhdLnkgKyBlbmRSYWRpYWxPZmZzZXQueSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpbnQgY3VycmVudEluZGV4ID0gZXh0cmE7CiAgICAgY29uc3QgVmVydGV4KiBsYXN0ID0gJih2ZXJ0aWNlc1swXSk7CiAgICAgY29uc3QgVmVydGV4KiBjdXJyZW50ID0gJih2ZXJ0aWNlc1sxXSk7Ci0gICAgdmVjMiBsYXN0Tm9ybWFsKGN1cnJlbnQtPnBvc2l0aW9uWzFdIC0gbGFzdC0+cG9zaXRpb25bMV0sCi0gICAgICAgICAgICAgICAgbGFzdC0+cG9zaXRpb25bMF0gLSBjdXJyZW50LT5wb3NpdGlvblswXSk7CisgICAgdmVjMiBsYXN0Tm9ybWFsKGN1cnJlbnQtPnkgLSBsYXN0LT55LAorICAgICAgICAgICAgICAgIGxhc3QtPnggLSBjdXJyZW50LT54KTsKICAgICBsYXN0Tm9ybWFsLm5vcm1hbGl6ZSgpOwogCiAgICAgc3RvcmVCZWdpbkVuZChwYWludEluZm8sIHZlcnRpY2VzWzBdLCBsYXN0Tm9ybWFsLCBidWZmZXIsIGN1cnJlbnRJbmRleCwgdHJ1ZSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IHZlcnRpY2VzLnNpemUoKSAtIDE7IGkrKykgewogICAgICAgICBjb25zdCBWZXJ0ZXgqIG5leHQgPSAmKHZlcnRpY2VzW2kgKyAxXSk7Ci0gICAgICAgIHZlYzIgbmV4dE5vcm1hbChuZXh0LT5wb3NpdGlvblsxXSAtIGN1cnJlbnQtPnBvc2l0aW9uWzFdLAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzBdIC0gbmV4dC0+cG9zaXRpb25bMF0pOworICAgICAgICB2ZWMyIG5leHROb3JtYWwobmV4dC0+eSAtIGN1cnJlbnQtPnksCisgICAgICAgICAgICAgICAgY3VycmVudC0+eCAtIG5leHQtPngpOwogICAgICAgICBuZXh0Tm9ybWFsLm5vcm1hbGl6ZSgpOwogCiAgICAgICAgIHZlYzIgc3Ryb2tlT2Zmc2V0ICA9IHRvdGFsT2Zmc2V0RnJvbU5vcm1hbHMobGFzdE5vcm1hbCwgbmV4dE5vcm1hbCk7CiAgICAgICAgIHBhaW50SW5mby5zY2FsZU9mZnNldEZvclN0cm9rZVdpZHRoKHN0cm9rZU9mZnNldCk7CiAKLSAgICAgICAgdmVjMiBjZW50ZXIoY3VycmVudC0+cG9zaXRpb25bMF0sIGN1cnJlbnQtPnBvc2l0aW9uWzFdKTsKKyAgICAgICAgdmVjMiBjZW50ZXIoY3VycmVudC0+eCwgY3VycmVudC0+eSk7CiAgICAgICAgIFZlcnRleDo6c2V0KCZidWZmZXJbY3VycmVudEluZGV4KytdLCBjZW50ZXIgKyBzdHJva2VPZmZzZXQpOwogICAgICAgICBWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRJbmRleCsrXSwgY2VudGVyIC0gc3Ryb2tlT2Zmc2V0KTsKIApAQCAtMzI5LDcgKzMzNSw3IEBACiAgKiAzIC0gemlnIHphZyBiYWNrIGFuZCBmb3J0aCBpbnNpZGUgdGhlIHNoYXBlIHRvIGZpbGwgaXQgKHVzaW5nIHBlcmltZXRlci5zaXplKCkgdmVydGljZXMpCiAgKi8KIHZvaWQgZ2V0RmlsbFZlcnRpY2VzRnJvbVBlcmltZXRlckFBKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBWZWN0b3I8VmVydGV4PiYgcGVyaW1ldGVyLAotICAgICAgICBWZXJ0ZXhCdWZmZXImIHZlcnRleEJ1ZmZlcikgeworICAgICAgICBWZXJ0ZXhCdWZmZXImIHZlcnRleEJ1ZmZlciwgZmxvYXQgbWF4QWxwaGEgPSAxLjBmKSB7CiAgICAgQWxwaGFWZXJ0ZXgqIGJ1ZmZlciA9IHZlcnRleEJ1ZmZlci5hbGxvYzxBbHBoYVZlcnRleD4ocGVyaW1ldGVyLnNpemUoKSAqIDMgKyAyKTsKIAogICAgIC8vIGdlbmVyYXRlIGFscGhhIHBvaW50cyAtIGZpbGwgQWxwaGEgdmVydGV4IGdhcHMgaW4gYmV0d2VlbiBlYWNoIHBvaW50IHdpdGgKQEAgLTMzNywxMyArMzQzLDEzIEBACiAgICAgaW50IGN1cnJlbnRJbmRleCA9IDA7CiAgICAgY29uc3QgVmVydGV4KiBsYXN0ID0gJihwZXJpbWV0ZXJbcGVyaW1ldGVyLnNpemUoKSAtIDFdKTsKICAgICBjb25zdCBWZXJ0ZXgqIGN1cnJlbnQgPSAmKHBlcmltZXRlclswXSk7Ci0gICAgdmVjMiBsYXN0Tm9ybWFsKGN1cnJlbnQtPnBvc2l0aW9uWzFdIC0gbGFzdC0+cG9zaXRpb25bMV0sCi0gICAgICAgICAgICBsYXN0LT5wb3NpdGlvblswXSAtIGN1cnJlbnQtPnBvc2l0aW9uWzBdKTsKKyAgICB2ZWMyIGxhc3ROb3JtYWwoY3VycmVudC0+eSAtIGxhc3QtPnksCisgICAgICAgICAgICBsYXN0LT54IC0gY3VycmVudC0+eCk7CiAgICAgbGFzdE5vcm1hbC5ub3JtYWxpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBlcmltZXRlci5zaXplKCk7IGkrKykgewogICAgICAgICBjb25zdCBWZXJ0ZXgqIG5leHQgPSAmKHBlcmltZXRlcltpICsgMSA+PSBwZXJpbWV0ZXIuc2l6ZSgpID8gMCA6IGkgKyAxXSk7Ci0gICAgICAgIHZlYzIgbmV4dE5vcm1hbChuZXh0LT5wb3NpdGlvblsxXSAtIGN1cnJlbnQtPnBvc2l0aW9uWzFdLAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzBdIC0gbmV4dC0+cG9zaXRpb25bMF0pOworICAgICAgICB2ZWMyIG5leHROb3JtYWwobmV4dC0+eSAtIGN1cnJlbnQtPnksCisgICAgICAgICAgICAgICAgY3VycmVudC0+eCAtIG5leHQtPngpOwogICAgICAgICBuZXh0Tm9ybWFsLm5vcm1hbGl6ZSgpOwogCiAgICAgICAgIC8vIEFBIHBvaW50IG9mZnNldCBmcm9tIG9yaWdpbmFsIHBvaW50IGlzIHRoYXQgcG9pbnQncyBub3JtYWwsIHN1Y2ggdGhhdCBlYWNoIHNpZGUgaXMgb2Zmc2V0CkBAIC0zNTEsMTMgKzM1NywxMyBAQAogICAgICAgICB2ZWMyIHRvdGFsT2Zmc2V0ID0gcGFpbnRJbmZvLmRlcml2ZUFBT2Zmc2V0KHRvdGFsT2Zmc2V0RnJvbU5vcm1hbHMobGFzdE5vcm1hbCwgbmV4dE5vcm1hbCkpOwogCiAgICAgICAgIEFscGhhVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50SW5kZXgrK10sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gKyB0b3RhbE9mZnNldC54LAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzFdICsgdG90YWxPZmZzZXQueSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54ICsgdG90YWxPZmZzZXQueCwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT55ICsgdG90YWxPZmZzZXQueSwKICAgICAgICAgICAgICAgICAwLjBmKTsKICAgICAgICAgQWxwaGFWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSAtIHRvdGFsT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gLSB0b3RhbE9mZnNldC55LAotICAgICAgICAgICAgICAgIDEuMGYpOworICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggLSB0b3RhbE9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgLSB0b3RhbE9mZnNldC55LAorICAgICAgICAgICAgICAgIG1heEFscGhhKTsKIAogICAgICAgICBsYXN0ID0gY3VycmVudDsKICAgICAgICAgY3VycmVudCA9IG5leHQ7CkBAIC0zNjUsOCArMzcxLDggQEAKICAgICB9CiAKICAgICAvLyB3cmFwIGFyb3VuZCB0byBiZWdpbm5pbmcKLSAgICBjb3B5QWxwaGFWZXJ0ZXgoJmJ1ZmZlcltjdXJyZW50SW5kZXgrK10sICZidWZmZXJbMF0pOwotICAgIGNvcHlBbHBoYVZlcnRleCgmYnVmZmVyW2N1cnJlbnRJbmRleCsrXSwgJmJ1ZmZlclsxXSk7CisgICAgYnVmZmVyW2N1cnJlbnRJbmRleCsrXSA9IGJ1ZmZlclswXTsKKyAgICBidWZmZXJbY3VycmVudEluZGV4KytdID0gYnVmZmVyWzFdOwogCiAgICAgLy8gemlnIHphZyBiZXR3ZWVuIGFsbCBwcmV2aW91cyBwb2ludHMgb24gdGhlIGluc2lkZSBvZiB0aGUgaHVsbCB0byBjcmVhdGUgYQogICAgIC8vIHRyaWFuZ2xlIHN0cmlwIHRoYXQgZmlsbHMgdGhlIGh1bGwsIHJlcGVhdGluZyB0aGUgZmlyc3QgaW5uZXIgcG9pbnQgdG8KQEAgLTM3NCw5ICszODAsOSBAQAogICAgIGludCBzcmNBaW5kZXggPSAwOwogICAgIGludCBzcmNCaW5kZXggPSBwZXJpbWV0ZXIuc2l6ZSgpIC0gMTsKICAgICB3aGlsZSAoc3JjQWluZGV4IDw9IHNyY0JpbmRleCkgewotICAgICAgICBjb3B5QWxwaGFWZXJ0ZXgoJmJ1ZmZlcltjdXJyZW50SW5kZXgrK10sICZidWZmZXJbc3JjQWluZGV4ICogMiArIDFdKTsKKyAgICAgICAgYnVmZmVyW2N1cnJlbnRJbmRleCsrXSA9IGJ1ZmZlcltzcmNBaW5kZXggKiAyICsgMV07CiAgICAgICAgIGlmIChzcmNBaW5kZXggPT0gc3JjQmluZGV4KSBicmVhazsKLSAgICAgICAgY29weUFscGhhVmVydGV4KCZidWZmZXJbY3VycmVudEluZGV4KytdLCAmYnVmZmVyW3NyY0JpbmRleCAqIDIgKyAxXSk7CisgICAgICAgIGJ1ZmZlcltjdXJyZW50SW5kZXgrK10gPSBidWZmZXJbc3JjQmluZGV4ICogMiArIDFdOwogICAgICAgICBzcmNBaW5kZXgrKzsKICAgICAgICAgc3JjQmluZGV4LS07CiAgICAgfQpAQCAtNDE2LDcgKzQyMiw3IEBACiAKICAgICAvLyBkZXRlcm1pbmUgcmVmZXJlbmNlUG9pbnQsIHRoZSBjZW50ZXIgcG9pbnQgZm9yIHRoZSA0IHByaW1hcnkgY2FwIHZlcnRpY2VzCiAgICAgY29uc3QgVmVydGV4KiBwb2ludCA9IGlzRmlyc3QgPyB2ZXJ0aWNlcy5iZWdpbigpIDogKHZlcnRpY2VzLmVuZCgpIC0gMSk7Ci0gICAgdmVjMiByZWZlcmVuY2VQb2ludChwb2ludC0+cG9zaXRpb25bMF0sIHBvaW50LT5wb3NpdGlvblsxXSk7CisgICAgdmVjMiByZWZlcmVuY2VQb2ludChwb2ludC0+eCwgcG9pbnQtPnkpOwogICAgIGlmIChwYWludEluZm8uY2FwID09IFNrUGFpbnQ6OmtTcXVhcmVfQ2FwKSB7CiAgICAgICAgIC8vIFRvIGFjY291bnQgZm9yIHNxdWFyZSBjYXAsIG1vdmUgdGhlIHByaW1hcnkgY2FwIHZlcnRpY2VzICh0aGF0IGNyZWF0ZSB0aGUgQUEgZWRnZSkgYnkgdGhlCiAgICAgICAgIC8vIHN0cm9rZSBvZmZzZXQgdmVjdG9yIChyb3RhdGVkIHRvIGJlIHBhcmFsbGVsIHRvIHRoZSBzdHJva2UpCkBAIC00NzEsOCArNDc3LDggQEAKIAogICAgICAgICAgICAgaWYgKGlzRmlyc3QgJiYgaSA9PSBleHRyYSAtIGV4dHJhT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgLy9jb3B5IG1vc3QgcmVjZW50IHR3byBwb2ludHMgdG8gZmlyc3QgdHdvIHBvaW50cwotICAgICAgICAgICAgICAgIGNvcHlBbHBoYVZlcnRleCgmYnVmZmVyWzBdLCAmYnVmZmVyW2NhcFBlcmltSW5kZXggLSAyXSk7Ci0gICAgICAgICAgICAgICAgY29weUFscGhhVmVydGV4KCZidWZmZXJbMV0sICZidWZmZXJbY2FwUGVyaW1JbmRleCAtIDFdKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbMF0gPSBidWZmZXJbY2FwUGVyaW1JbmRleCAtIDJdOworICAgICAgICAgICAgICAgIGJ1ZmZlclsxXSA9IGJ1ZmZlcltjYXBQZXJpbUluZGV4IC0gMV07CiAKICAgICAgICAgICAgICAgICBjYXBQZXJpbUluZGV4ID0gMjsgLy8gc3RhcnQgd3JpdGluZyB0aGUgcmVzdCBvZiB0aGUgcm91bmQgY2FwIGF0IGluZGV4IDIKICAgICAgICAgICAgIH0KQEAgLTQ4MiwyOCArNDg4LDI4IEBACiAgICAgICAgICAgICBjb25zdCBpbnQgc3RhcnRDYXBGaWxsSW5kZXggPSBjYXBJbmRleCArIDIgKiAoZXh0cmEgLSBleHRyYU9mZnNldCkgKyA0OwogICAgICAgICAgICAgaW50IGNhcEZpbGxJbmRleCA9IHN0YXJ0Q2FwRmlsbEluZGV4OwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRyYSArIDI7IGkgKz0gMikgewotICAgICAgICAgICAgICAgIGNvcHlBbHBoYVZlcnRleCgmYnVmZmVyW2NhcEZpbGxJbmRleCsrXSwgJmJ1ZmZlclsxICsgaV0pOworICAgICAgICAgICAgICAgIGJ1ZmZlcltjYXBGaWxsSW5kZXgrK10gPSBidWZmZXJbMSArIGldOwogICAgICAgICAgICAgICAgIC8vIFRPRE86IHRvIHN1cHBvcnQgb2RkIG51bWJlcnMgb2YgZGl2aXNpb25zLCBicmVhayBoZXJlIG9uIHRoZSBsYXN0IGl0ZXJhdGlvbgotICAgICAgICAgICAgICAgIGNvcHlBbHBoYVZlcnRleCgmYnVmZmVyW2NhcEZpbGxJbmRleCsrXSwgJmJ1ZmZlcltzdGFydENhcEZpbGxJbmRleCAtIDMgLSBpXSk7CisgICAgICAgICAgICAgICAgYnVmZmVyW2NhcEZpbGxJbmRleCsrXSA9IGJ1ZmZlcltzdGFydENhcEZpbGxJbmRleCAtIDMgLSBpXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGludCBjYXBGaWxsSW5kZXggPSA2ICogdmVydGljZXMuc2l6ZSgpICsgMiArIDYgKiBleHRyYSAtIChleHRyYSArIDIpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRyYSArIDI7IGkgKz0gMikgewotICAgICAgICAgICAgICAgIGNvcHlBbHBoYVZlcnRleCgmYnVmZmVyW2NhcEZpbGxJbmRleCsrXSwgJmJ1ZmZlcltjYXBJbmRleCArIDEgKyBpXSk7CisgICAgICAgICAgICAgICAgYnVmZmVyW2NhcEZpbGxJbmRleCsrXSA9IGJ1ZmZlcltjYXBJbmRleCArIDEgKyBpXTsKICAgICAgICAgICAgICAgICAvLyBUT0RPOiB0byBzdXBwb3J0IG9kZCBudW1iZXJzIG9mIGRpdmlzaW9ucywgYnJlYWsgaGVyZSBvbiB0aGUgbGFzdCBpdGVyYXRpb24KLSAgICAgICAgICAgICAgICBjb3B5QWxwaGFWZXJ0ZXgoJmJ1ZmZlcltjYXBGaWxsSW5kZXgrK10sICZidWZmZXJbY2FwSW5kZXggKyAzICsgMiAqIGV4dHJhIC0gaV0pOworICAgICAgICAgICAgICAgIGJ1ZmZlcltjYXBGaWxsSW5kZXgrK10gPSBidWZmZXJbY2FwSW5kZXggKyAzICsgMiAqIGV4dHJhIC0gaV07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNGaXJzdCkgewotICAgICAgICBjb3B5QWxwaGFWZXJ0ZXgoJmJ1ZmZlclswXSwgJmJ1ZmZlcltwb3N0Q2FwSW5kZXggKyAyXSk7Ci0gICAgICAgIGNvcHlBbHBoYVZlcnRleCgmYnVmZmVyWzFdLCAmYnVmZmVyW3Bvc3RDYXBJbmRleCArIDNdKTsKLSAgICAgICAgY29weUFscGhhVmVydGV4KCZidWZmZXJbcG9zdENhcEluZGV4ICsgNF0sICZidWZmZXJbMV0pOyAvLyBkZWdlbmVyYXRlIHRyaXMgKHRoZSBvbmx5IHR3byEpCi0gICAgICAgIGNvcHlBbHBoYVZlcnRleCgmYnVmZmVyW3Bvc3RDYXBJbmRleCArIDVdLCAmYnVmZmVyW3Bvc3RDYXBJbmRleCArIDFdKTsKKyAgICAgICAgYnVmZmVyWzBdID0gYnVmZmVyW3Bvc3RDYXBJbmRleCArIDJdOworICAgICAgICBidWZmZXJbMV0gPSBidWZmZXJbcG9zdENhcEluZGV4ICsgM107CisgICAgICAgIGJ1ZmZlcltwb3N0Q2FwSW5kZXggKyA0XSA9IGJ1ZmZlclsxXTsgLy8gZGVnZW5lcmF0ZSB0cmlzICh0aGUgb25seSB0d28hKQorICAgICAgICBidWZmZXJbcG9zdENhcEluZGV4ICsgNV0gPSBidWZmZXJbcG9zdENhcEluZGV4ICsgMV07CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29weUFscGhhVmVydGV4KCZidWZmZXJbNiAqIHZlcnRpY2VzLnNpemUoKV0sICZidWZmZXJbcG9zdENhcEluZGV4ICsgMV0pOwotICAgICAgICBjb3B5QWxwaGFWZXJ0ZXgoJmJ1ZmZlcls2ICogdmVydGljZXMuc2l6ZSgpICsgMV0sICZidWZmZXJbcG9zdENhcEluZGV4ICsgM10pOworICAgICAgICBidWZmZXJbNiAqIHZlcnRpY2VzLnNpemUoKV0gPSBidWZmZXJbcG9zdENhcEluZGV4ICsgMV07CisgICAgICAgIGJ1ZmZlcls2ICogdmVydGljZXMuc2l6ZSgpICsgMV0gPSBidWZmZXJbcG9zdENhcEluZGV4ICsgM107CiAgICAgfQogfQogCkBAIC01NzYsOCArNTgyLDggQEAKIAogICAgIGNvbnN0IFZlcnRleCogbGFzdCA9ICYodmVydGljZXNbMF0pOwogICAgIGNvbnN0IFZlcnRleCogY3VycmVudCA9ICYodmVydGljZXNbMV0pOwotICAgIHZlYzIgbGFzdE5vcm1hbChjdXJyZW50LT5wb3NpdGlvblsxXSAtIGxhc3QtPnBvc2l0aW9uWzFdLAotICAgICAgICAgICAgbGFzdC0+cG9zaXRpb25bMF0gLSBjdXJyZW50LT5wb3NpdGlvblswXSk7CisgICAgdmVjMiBsYXN0Tm9ybWFsKGN1cnJlbnQtPnkgLSBsYXN0LT55LAorICAgICAgICAgICAgbGFzdC0+eCAtIGN1cnJlbnQtPngpOwogICAgIGxhc3ROb3JtYWwubm9ybWFsaXplKCk7CiAKICAgICAvLyBUT0RPOiB1c2Ugbm9ybWFsIGZyb20gYmV6aWVyIHRyYXZlcnNhbCBmb3IgY2FwLCBpbnN0ZWFkIG9mIGZyb20gdmVydGljZXMKQEAgLTU4NSw4ICs1OTEsOCBAQAogCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPCB2ZXJ0aWNlcy5zaXplKCkgLSAxOyBpKyspIHsKICAgICAgICAgY29uc3QgVmVydGV4KiBuZXh0ID0gJih2ZXJ0aWNlc1tpICsgMV0pOwotICAgICAgICB2ZWMyIG5leHROb3JtYWwobmV4dC0+cG9zaXRpb25bMV0gLSBjdXJyZW50LT5wb3NpdGlvblsxXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSAtIG5leHQtPnBvc2l0aW9uWzBdKTsKKyAgICAgICAgdmVjMiBuZXh0Tm9ybWFsKG5leHQtPnkgLSBjdXJyZW50LT55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggLSBuZXh0LT54KTsKICAgICAgICAgbmV4dE5vcm1hbC5ub3JtYWxpemUoKTsKIAogICAgICAgICB2ZWMyIHRvdGFsT2Zmc2V0ID0gdG90YWxPZmZzZXRGcm9tTm9ybWFscyhsYXN0Tm9ybWFsLCBuZXh0Tm9ybWFsKTsKQEAgLTU5OCwzMCArNjA0LDMwIEBACiAgICAgICAgIGlubmVyT2Zmc2V0IC09IEFBT2Zmc2V0OwogCiAgICAgICAgIEFscGhhVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50QUFPdXRlckluZGV4KytdLAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzBdICsgb3V0ZXJPZmZzZXQueCwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblsxXSArIG91dGVyT2Zmc2V0LnksCisgICAgICAgICAgICAgICAgY3VycmVudC0+eCArIG91dGVyT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgY3VycmVudC0+eSArIG91dGVyT2Zmc2V0LnksCiAgICAgICAgICAgICAgICAgMC4wZik7CiAgICAgICAgIEFscGhhVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50QUFPdXRlckluZGV4KytdLAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzBdICsgaW5uZXJPZmZzZXQueCwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblsxXSArIGlubmVyT2Zmc2V0LnksCisgICAgICAgICAgICAgICAgY3VycmVudC0+eCArIGlubmVyT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgY3VycmVudC0+eSArIGlubmVyT2Zmc2V0LnksCiAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLm1heEFscGhhKTsKIAogICAgICAgICBBbHBoYVZlcnRleDo6c2V0KCZidWZmZXJbY3VycmVudFN0cm9rZUluZGV4KytdLAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzBdICsgaW5uZXJPZmZzZXQueCwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblsxXSArIGlubmVyT2Zmc2V0LnksCisgICAgICAgICAgICAgICAgY3VycmVudC0+eCArIGlubmVyT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgY3VycmVudC0+eSArIGlubmVyT2Zmc2V0LnksCiAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLm1heEFscGhhKTsKICAgICAgICAgQWxwaGFWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRTdHJva2VJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSAtIGlubmVyT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gLSBpbm5lck9mZnNldC55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggLSBpbm5lck9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgLSBpbm5lck9mZnNldC55LAogICAgICAgICAgICAgICAgIHBhaW50SW5mby5tYXhBbHBoYSk7CiAKICAgICAgICAgQWxwaGFWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRBQUlubmVySW5kZXgtLV0sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBpbm5lck9mZnNldC54LAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzFdIC0gaW5uZXJPZmZzZXQueSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gaW5uZXJPZmZzZXQueCwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT55IC0gaW5uZXJPZmZzZXQueSwKICAgICAgICAgICAgICAgICBwYWludEluZm8ubWF4QWxwaGEpOwogICAgICAgICBBbHBoYVZlcnRleDo6c2V0KCZidWZmZXJbY3VycmVudEFBSW5uZXJJbmRleC0tXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSAtIG91dGVyT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gLSBvdXRlck9mZnNldC55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggLSBvdXRlck9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgLSBvdXRlck9mZnNldC55LAogICAgICAgICAgICAgICAgIDAuMGYpOwogCiAgICAgICAgIGN1cnJlbnQgPSBuZXh0OwpAQCAtNjQ2LDEzICs2NTIsMTMgQEAKIAogICAgIGNvbnN0IFZlcnRleCogbGFzdCA9ICYocGVyaW1ldGVyW3BlcmltZXRlci5zaXplKCkgLSAxXSk7CiAgICAgY29uc3QgVmVydGV4KiBjdXJyZW50ID0gJihwZXJpbWV0ZXJbMF0pOwotICAgIHZlYzIgbGFzdE5vcm1hbChjdXJyZW50LT5wb3NpdGlvblsxXSAtIGxhc3QtPnBvc2l0aW9uWzFdLAotICAgICAgICAgICAgbGFzdC0+cG9zaXRpb25bMF0gLSBjdXJyZW50LT5wb3NpdGlvblswXSk7CisgICAgdmVjMiBsYXN0Tm9ybWFsKGN1cnJlbnQtPnkgLSBsYXN0LT55LAorICAgICAgICAgICAgbGFzdC0+eCAtIGN1cnJlbnQtPngpOwogICAgIGxhc3ROb3JtYWwubm9ybWFsaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwZXJpbWV0ZXIuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgY29uc3QgVmVydGV4KiBuZXh0ID0gJihwZXJpbWV0ZXJbaSArIDEgPj0gcGVyaW1ldGVyLnNpemUoKSA/IDAgOiBpICsgMV0pOwotICAgICAgICB2ZWMyIG5leHROb3JtYWwobmV4dC0+cG9zaXRpb25bMV0gLSBjdXJyZW50LT5wb3NpdGlvblsxXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSAtIG5leHQtPnBvc2l0aW9uWzBdKTsKKyAgICAgICAgdmVjMiBuZXh0Tm9ybWFsKG5leHQtPnkgLSBjdXJyZW50LT55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggLSBuZXh0LT54KTsKICAgICAgICAgbmV4dE5vcm1hbC5ub3JtYWxpemUoKTsKIAogICAgICAgICB2ZWMyIHRvdGFsT2Zmc2V0ID0gdG90YWxPZmZzZXRGcm9tTm9ybWFscyhsYXN0Tm9ybWFsLCBuZXh0Tm9ybWFsKTsKQEAgLTY2NCwzMCArNjcwLDMwIEBACiAgICAgICAgIGlubmVyT2Zmc2V0IC09IEFBT2Zmc2V0OwogCiAgICAgICAgIEFscGhhVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50QUFPdXRlckluZGV4KytdLAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzBdICsgb3V0ZXJPZmZzZXQueCwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblsxXSArIG91dGVyT2Zmc2V0LnksCisgICAgICAgICAgICAgICAgY3VycmVudC0+eCArIG91dGVyT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgY3VycmVudC0+eSArIG91dGVyT2Zmc2V0LnksCiAgICAgICAgICAgICAgICAgMC4wZik7CiAgICAgICAgIEFscGhhVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50QUFPdXRlckluZGV4KytdLAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzBdICsgaW5uZXJPZmZzZXQueCwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblsxXSArIGlubmVyT2Zmc2V0LnksCisgICAgICAgICAgICAgICAgY3VycmVudC0+eCArIGlubmVyT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgY3VycmVudC0+eSArIGlubmVyT2Zmc2V0LnksCiAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLm1heEFscGhhKTsKIAogICAgICAgICBBbHBoYVZlcnRleDo6c2V0KCZidWZmZXJbY3VycmVudFN0cm9rZUluZGV4KytdLAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzBdICsgaW5uZXJPZmZzZXQueCwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblsxXSArIGlubmVyT2Zmc2V0LnksCisgICAgICAgICAgICAgICAgY3VycmVudC0+eCArIGlubmVyT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgY3VycmVudC0+eSArIGlubmVyT2Zmc2V0LnksCiAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLm1heEFscGhhKTsKICAgICAgICAgQWxwaGFWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRTdHJva2VJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSAtIGlubmVyT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gLSBpbm5lck9mZnNldC55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggLSBpbm5lck9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgLSBpbm5lck9mZnNldC55LAogICAgICAgICAgICAgICAgIHBhaW50SW5mby5tYXhBbHBoYSk7CiAKICAgICAgICAgQWxwaGFWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRBQUlubmVySW5kZXgrK10sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBpbm5lck9mZnNldC54LAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzFdIC0gaW5uZXJPZmZzZXQueSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gaW5uZXJPZmZzZXQueCwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT55IC0gaW5uZXJPZmZzZXQueSwKICAgICAgICAgICAgICAgICBwYWludEluZm8ubWF4QWxwaGEpOwogICAgICAgICBBbHBoYVZlcnRleDo6c2V0KCZidWZmZXJbY3VycmVudEFBSW5uZXJJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSAtIG91dGVyT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gLSBvdXRlck9mZnNldC55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggLSBvdXRlck9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgLSBvdXRlck9mZnNldC55LAogICAgICAgICAgICAgICAgIDAuMGYpOwogCiAgICAgICAgIGxhc3QgPSBjdXJyZW50OwpAQCAtNjk2LDIzICs3MDIsMjMgQEAKICAgICB9CiAKICAgICAvLyB3cmFwIGVhY2ggc3RyaXAgYXJvdW5kIHRvIGJlZ2lubmluZywgY3JlYXRpbmcgZGVnZW5lcmF0ZSB0cmlzIHRvIGJyaWRnZSBzdHJpcHMKLSAgICBjb3B5QWxwaGFWZXJ0ZXgoJmJ1ZmZlcltjdXJyZW50QUFPdXRlckluZGV4KytdLCAmYnVmZmVyWzBdKTsKLSAgICBjb3B5QWxwaGFWZXJ0ZXgoJmJ1ZmZlcltjdXJyZW50QUFPdXRlckluZGV4KytdLCAmYnVmZmVyWzFdKTsKLSAgICBjb3B5QWxwaGFWZXJ0ZXgoJmJ1ZmZlcltjdXJyZW50QUFPdXRlckluZGV4KytdLCAmYnVmZmVyWzFdKTsKKyAgICBidWZmZXJbY3VycmVudEFBT3V0ZXJJbmRleCsrXSA9IGJ1ZmZlclswXTsKKyAgICBidWZmZXJbY3VycmVudEFBT3V0ZXJJbmRleCsrXSA9IGJ1ZmZlclsxXTsKKyAgICBidWZmZXJbY3VycmVudEFBT3V0ZXJJbmRleCsrXSA9IGJ1ZmZlclsxXTsKIAotICAgIGNvcHlBbHBoYVZlcnRleCgmYnVmZmVyW2N1cnJlbnRTdHJva2VJbmRleCsrXSwgJmJ1ZmZlcltvZmZzZXRdKTsKLSAgICBjb3B5QWxwaGFWZXJ0ZXgoJmJ1ZmZlcltjdXJyZW50U3Ryb2tlSW5kZXgrK10sICZidWZmZXJbb2Zmc2V0ICsgMV0pOwotICAgIGNvcHlBbHBoYVZlcnRleCgmYnVmZmVyW2N1cnJlbnRTdHJva2VJbmRleCsrXSwgJmJ1ZmZlcltvZmZzZXQgKyAxXSk7CisgICAgYnVmZmVyW2N1cnJlbnRTdHJva2VJbmRleCsrXSA9IGJ1ZmZlcltvZmZzZXRdOworICAgIGJ1ZmZlcltjdXJyZW50U3Ryb2tlSW5kZXgrK10gPSBidWZmZXJbb2Zmc2V0ICsgMV07CisgICAgYnVmZmVyW2N1cnJlbnRTdHJva2VJbmRleCsrXSA9IGJ1ZmZlcltvZmZzZXQgKyAxXTsKIAotICAgIGNvcHlBbHBoYVZlcnRleCgmYnVmZmVyW2N1cnJlbnRBQUlubmVySW5kZXgrK10sICZidWZmZXJbMiAqIG9mZnNldF0pOwotICAgIGNvcHlBbHBoYVZlcnRleCgmYnVmZmVyW2N1cnJlbnRBQUlubmVySW5kZXgrK10sICZidWZmZXJbMiAqIG9mZnNldCArIDFdKTsKKyAgICBidWZmZXJbY3VycmVudEFBSW5uZXJJbmRleCsrXSA9IGJ1ZmZlclsyICogb2Zmc2V0XTsKKyAgICBidWZmZXJbY3VycmVudEFBSW5uZXJJbmRleCsrXSA9IGJ1ZmZlclsyICogb2Zmc2V0ICsgMV07CiAgICAgLy8gZG9uJ3QgbmVlZCB0byBjcmVhdGUgbGFzdCBkZWdlbmVyYXRlIHRyaQogCiAgICAgREVCVUdfRFVNUF9BTFBIQV9CVUZGRVIoKTsKIH0KIAogdm9pZCBQYXRoVGVzc2VsbGF0b3I6OnRlc3NlbGxhdGVQYXRoKGNvbnN0IFNrUGF0aCAmcGF0aCwgY29uc3QgU2tQYWludCogcGFpbnQsCi0gICAgICAgIGNvbnN0IG1hdDQgKnRyYW5zZm9ybSwgVmVydGV4QnVmZmVyJiB2ZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgY29uc3QgbWF0NCYgdHJhbnNmb3JtLCBWZXJ0ZXhCdWZmZXImIHZlcnRleEJ1ZmZlcikgewogICAgIEFUUkFDRV9DQUxMKCk7CiAKICAgICBjb25zdCBQYWludEluZm8gcGFpbnRJbmZvKHBhaW50LCB0cmFuc2Zvcm0pOwpAQCAtNzQzLDcgKzc0OSw3IEBACiAjaWYgVkVSVEVYX0RFQlVHCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0ZW1wVmVydGljZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgQUxPR0QoIm9yaWcgcGF0aDogcG9pbnQgYXQgJWYgJWYiLAotICAgICAgICAgICAgICAgIHRlbXBWZXJ0aWNlc1tpXS5wb3NpdGlvblswXSwgdGVtcFZlcnRpY2VzW2ldLnBvc2l0aW9uWzFdKTsKKyAgICAgICAgICAgICAgICB0ZW1wVmVydGljZXNbaV0ueCwgdGVtcFZlcnRpY2VzW2ldLnkpOwogICAgIH0KICNlbmRpZgogCkBAIC03ODAsNyArNzg2LDcgQEAKICAgICByZWN0LmZCb3R0b20gPSBmbWF4ZihyZWN0LmZCb3R0b20sIHkpOwogfQogc3RhdGljIHZvaWQgZXhwYW5kUmVjdFRvQ292ZXJWZXJ0ZXgoU2tSZWN0JiByZWN0LCBjb25zdCBWZXJ0ZXgmIHZlcnRleCkgewotICAgIGV4cGFuZFJlY3RUb0NvdmVyVmVydGV4KHJlY3QsIHZlcnRleC5wb3NpdGlvblswXSwgdmVydGV4LnBvc2l0aW9uWzFdKTsKKyAgICBleHBhbmRSZWN0VG9Db3ZlclZlcnRleChyZWN0LCB2ZXJ0ZXgueCwgdmVydGV4LnkpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVFlQRT4KQEAgLTc5OSw4ICs4MDUsOCBAQAogICAgIGRzdEJ1ZmZlci5jcmVhdGVEZWdlbmVyYXRlU2VwYXJhdG9yczxUWVBFPih2ZXJ0aWNlc1BlclBvaW50KTsKIH0KIAotdm9pZCBQYXRoVGVzc2VsbGF0b3I6OnRlc3NlbGxhdGVQb2ludHMoY29uc3QgZmxvYXQqIHBvaW50cywgaW50IGNvdW50LCBTa1BhaW50KiBwYWludCwKLSAgICAgICAgY29uc3QgbWF0NCogdHJhbnNmb3JtLCBTa1JlY3QmIGJvdW5kcywgVmVydGV4QnVmZmVyJiB2ZXJ0ZXhCdWZmZXIpIHsKK3ZvaWQgUGF0aFRlc3NlbGxhdG9yOjp0ZXNzZWxsYXRlUG9pbnRzKGNvbnN0IGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQsCisgICAgICAgIGNvbnN0IG1hdDQmIHRyYW5zZm9ybSwgU2tSZWN0JiBib3VuZHMsIFZlcnRleEJ1ZmZlciYgdmVydGV4QnVmZmVyKSB7CiAgICAgY29uc3QgUGFpbnRJbmZvIHBhaW50SW5mbyhwYWludCwgdHJhbnNmb3JtKTsKIAogICAgIC8vIGRldGVybWluZSBwb2ludCBzaGFwZQpAQCAtODI5LDE1ICs4MzUsMTggQEAKICAgICAgICAgZ2V0RmlsbFZlcnRpY2VzRnJvbVBlcmltZXRlcihvdXRsaW5lVmVydGljZXMsIHRlbXBCdWZmZXIpOwogICAgICAgICBpbnN0YW5jZVZlcnRpY2VzPFZlcnRleD4odGVtcEJ1ZmZlciwgdmVydGV4QnVmZmVyLCBwb2ludHMsIGNvdW50LCBib3VuZHMpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGdldEZpbGxWZXJ0aWNlc0Zyb21QZXJpbWV0ZXJBQShwYWludEluZm8sIG91dGxpbmVWZXJ0aWNlcywgdGVtcEJ1ZmZlcik7CisgICAgICAgIC8vIG5vdGU6IHBhc3MgbWF4QWxwaGEgZGlyZWN0bHksIHNpbmNlIHdlIHdhbnQgZmlsbCB0byBiZSBhbHBoYSBtb2R1bGF0ZWQKKyAgICAgICAgZ2V0RmlsbFZlcnRpY2VzRnJvbVBlcmltZXRlckFBKHBhaW50SW5mbywgb3V0bGluZVZlcnRpY2VzLCB0ZW1wQnVmZmVyLCBwYWludEluZm8ubWF4QWxwaGEpOwogICAgICAgICBpbnN0YW5jZVZlcnRpY2VzPEFscGhhVmVydGV4Pih0ZW1wQnVmZmVyLCB2ZXJ0ZXhCdWZmZXIsIHBvaW50cywgY291bnQsIGJvdW5kcyk7CiAgICAgfQogCi0gICAgZXhwYW5kQm91bmRzRm9yU3Ryb2tlKGJvdW5kcywgcGFpbnQsIHRydWUpOyAvLyBmb3JjZS1leHBhbmQgYm91bmRzIHRvIGluY29ycG9yYXRlIHN0cm9rZQorICAgIC8vIGV4cGFuZCBib3VuZHMgZnJvbSB2ZXJ0ZXggY29vcmRzIHRvIHBpeGVsIGRhdGEKKyAgICBwYWludEluZm8uZXhwYW5kQm91bmRzRm9yU3Ryb2tlQUEoYm91bmRzKTsKKwogfQogCi12b2lkIFBhdGhUZXNzZWxsYXRvcjo6dGVzc2VsbGF0ZUxpbmVzKGNvbnN0IGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgU2tQYWludCogcGFpbnQsCi0gICAgICAgIGNvbnN0IG1hdDQqIHRyYW5zZm9ybSwgU2tSZWN0JiBib3VuZHMsIFZlcnRleEJ1ZmZlciYgdmVydGV4QnVmZmVyKSB7Cit2b2lkIFBhdGhUZXNzZWxsYXRvcjo6dGVzc2VsbGF0ZUxpbmVzKGNvbnN0IGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQsCisgICAgICAgIGNvbnN0IG1hdDQmIHRyYW5zZm9ybSwgU2tSZWN0JiBib3VuZHMsIFZlcnRleEJ1ZmZlciYgdmVydGV4QnVmZmVyKSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKICAgICBjb25zdCBQYWludEluZm8gcGFpbnRJbmZvKHBhaW50LCB0cmFuc2Zvcm0pOwogCkBAIC04NzMsMTQgKzg4MiwxNSBAQAogICAgICAgICBleHBhbmRSZWN0VG9Db3ZlclZlcnRleChib3VuZHMsIHRlbXBWZXJ0aWNlc0RhdGFbMV0pOwogICAgIH0KIAotICAgIGV4cGFuZEJvdW5kc0ZvclN0cm9rZShib3VuZHMsIHBhaW50LCB0cnVlKTsgLy8gZm9yY2UtZXhwYW5kIGJvdW5kcyB0byBpbmNvcnBvcmF0ZSBzdHJva2UKLQogICAgIC8vIHNpbmNlIG11bHRpcGxlIG9iamVjdHMgdGVzc2VsbGF0ZWQgaW50byBidWZmZXIsIHNlcGFyYXRlIHRoZW0gd2l0aCBkZWdlbiB0cmlzCiAgICAgaWYgKHBhaW50SW5mby5pc0FBKSB7CiAgICAgICAgIHZlcnRleEJ1ZmZlci5jcmVhdGVEZWdlbmVyYXRlU2VwYXJhdG9yczxBbHBoYVZlcnRleD4obGluZUFsbG9jU2l6ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmVydGV4QnVmZmVyLmNyZWF0ZURlZ2VuZXJhdGVTZXBhcmF0b3JzPFZlcnRleD4obGluZUFsbG9jU2l6ZSk7CiAgICAgfQorCisgICAgLy8gZXhwYW5kIGJvdW5kcyBmcm9tIHZlcnRleCBjb29yZHMgdG8gcGl4ZWwgZGF0YQorICAgIHBhaW50SW5mby5leHBhbmRCb3VuZHNGb3JTdHJva2VBQShib3VuZHMpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC05MzksOCArOTQ5LDggQEAKICAgICB9CiAKICAgICBpbnQgc2l6ZSA9IG91dHB1dFZlcnRpY2VzLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA+PSAyICYmIG91dHB1dFZlcnRpY2VzWzBdLnBvc2l0aW9uWzBdID09IG91dHB1dFZlcnRpY2VzW3NpemUgLSAxXS5wb3NpdGlvblswXSAmJgotICAgICAgICAgICAgb3V0cHV0VmVydGljZXNbMF0ucG9zaXRpb25bMV0gPT0gb3V0cHV0VmVydGljZXNbc2l6ZSAtIDFdLnBvc2l0aW9uWzFdKSB7CisgICAgaWYgKHNpemUgPj0gMiAmJiBvdXRwdXRWZXJ0aWNlc1swXS54ID09IG91dHB1dFZlcnRpY2VzW3NpemUgLSAxXS54ICYmCisgICAgICAgICAgICBvdXRwdXRWZXJ0aWNlc1swXS55ID09IG91dHB1dFZlcnRpY2VzW3NpemUgLSAxXS55KSB7CiAgICAgICAgIG91dHB1dFZlcnRpY2VzLnBvcCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvUGF0aFRlc3NlbGxhdG9yLmggYi9saWJzL2h3dWkvUGF0aFRlc3NlbGxhdG9yLmgKaW5kZXggODU3OTdmYy4uZTQzYjEwMSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1BhdGhUZXNzZWxsYXRvci5oCisrKyBiL2xpYnMvaHd1aS9QYXRoVGVzc2VsbGF0b3IuaApAQCAtMjIsOTYgKzIyLDIzIEBACiAjaW5jbHVkZSAiTWF0cml4LmgiCiAjaW5jbHVkZSAiUmVjdC5oIgogI2luY2x1ZGUgIlZlcnRleC5oIgorI2luY2x1ZGUgIlZlcnRleEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgdWlyZW5kZXJlciB7CiAKLWNsYXNzIFZlcnRleEJ1ZmZlciB7Ci1wdWJsaWM6Ci0gICAgVmVydGV4QnVmZmVyKCk6Ci0gICAgICAgIG1CdWZmZXIoMCksCi0gICAgICAgIG1WZXJ0ZXhDb3VudCgwKSwKLSAgICAgICAgbUNsZWFudXBNZXRob2QoTlVMTCkKLSAgICB7fQotCi0gICAgflZlcnRleEJ1ZmZlcigpIHsKLSAgICAgICAgaWYgKG1DbGVhbnVwTWV0aG9kKSBtQ2xlYW51cE1ldGhvZChtQnVmZmVyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgICBUaGlzIHNob3VsZCBiZSB0aGUgb25seSBtZXRob2QgdXNlZCBieSB0aGUgUGF0aFRlc3NlbGxhdG9yLiBTdWJzZXF1ZW50IGNhbGxzIHRvIGFsbG9jIHdpbGwKLSAgICAgICBhbGxvY2F0ZSBzcGFjZSB3aXRoaW4gdGhlIGZpcnN0IGFsbG9jYXRpb24gKHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBldmVudHVhbGx5IGFsbG9jYXRlCi0gICAgICAgbXVsdGlwbGUgcmVnaW9ucyB3aXRoaW4gYSBzaW5nbGUgVmVydGV4QnVmZmVyLCBzdWNoIGFzIHdpdGggUGF0aFRlc3NlbGxhdG9yOjp0ZXNzZWxhdGVMaW5lcygpCi0gICAgICovCi0gICAgdGVtcGxhdGUgPGNsYXNzIFRZUEU+Ci0gICAgVFlQRSogYWxsb2MoaW50IHZlcnRleENvdW50KSB7Ci0gICAgICAgIGlmIChtVmVydGV4Q291bnQpIHsKLSAgICAgICAgICAgIFRZUEUqIHJlYWxsb2NCdWZmZXIgPSAoVFlQRSopbVJlYWxsb2NCdWZmZXI7Ci0gICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmUgYWxsb2NhdGVkIHRoZSBidWZmZXIsIHJlLWFsbG9jYXRlIHNwYWNlIHdpdGhpbgotICAgICAgICAgICAgaWYgKG1SZWFsbG9jQnVmZmVyICE9IG1CdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAvLyBub3QgZmlyc3QgcmUtYWxsb2NhdGlvbiwgbGVhdmUgc3BhY2UgZm9yIGRlZ2VuZXJhdGUgdHJpYW5nbGVzIHRvIHNlcGFyYXRlIHN0cmlwcwotICAgICAgICAgICAgICAgIHJlYWxsb2NCdWZmZXIgKz0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1SZWFsbG9jQnVmZmVyID0gcmVhbGxvY0J1ZmZlciArIHZlcnRleENvdW50OwotICAgICAgICAgICAgcmV0dXJuIHJlYWxsb2NCdWZmZXI7Ci0gICAgICAgIH0KLSAgICAgICAgbVZlcnRleENvdW50ID0gdmVydGV4Q291bnQ7Ci0gICAgICAgIG1SZWFsbG9jQnVmZmVyID0gbUJ1ZmZlciA9ICh2b2lkKiluZXcgVFlQRVt2ZXJ0ZXhDb3VudF07Ci0gICAgICAgIG1DbGVhbnVwTWV0aG9kID0gJihjbGVhbnVwPFRZUEU+KTsKLQotICAgICAgICByZXR1cm4gKFRZUEUqKW1CdWZmZXI7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFRZUEU+Ci0gICAgdm9pZCBjb3B5SW50byhjb25zdCBWZXJ0ZXhCdWZmZXImIHNyY0J1ZmZlciwgZmxvYXQgeE9mZnNldCwgZmxvYXQgeU9mZnNldCkgewotICAgICAgICBpbnQgdmVydGljZXNUb0NvcHkgPSBzcmNCdWZmZXIuZ2V0VmVydGV4Q291bnQoKTsKLQotICAgICAgICBUWVBFKiBkc3QgPSBhbGxvYzxUWVBFPih2ZXJ0aWNlc1RvQ29weSk7Ci0gICAgICAgIFRZUEUqIHNyYyA9IChUWVBFKilzcmNCdWZmZXIuZ2V0QnVmZmVyKCk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2ZXJ0aWNlc1RvQ29weTsgaSsrKSB7Ci0gICAgICAgICAgICBUWVBFOjpjb3B5V2l0aE9mZnNldCgmZHN0W2ldLCBzcmNbaV0sIHhPZmZzZXQsIHlPZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCogZ2V0QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlcjsgfSAvLyBzaG91bGRuJ3QgYmUgY29uc3QsIHNpbmNlIG5vdCBhIGNvbnN0IHB0cj8KLSAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4Q291bnQoKSBjb25zdCB7IHJldHVybiBtVmVydGV4Q291bnQ7IH0KLQotICAgIHRlbXBsYXRlIDxjbGFzcyBUWVBFPgotICAgIHZvaWQgY3JlYXRlRGVnZW5lcmF0ZVNlcGFyYXRvcnMoaW50IGFsbG9jU2l6ZSkgewotICAgICAgICBUWVBFKiBlbmQgPSAoVFlQRSopbUJ1ZmZlciArIG1WZXJ0ZXhDb3VudDsKLSAgICAgICAgZm9yIChUWVBFKiBkZWdlbiA9IChUWVBFKiltQnVmZmVyICsgYWxsb2NTaXplOyBkZWdlbiA8IGVuZDsgZGVnZW4gKz0gMiArIGFsbG9jU2l6ZSkgewotICAgICAgICAgICAgbWVtY3B5KGRlZ2VuLCBkZWdlbiAtIDEsIHNpemVvZihUWVBFKSk7Ci0gICAgICAgICAgICBtZW1jcHkoZGVnZW4gKyAxLCBkZWdlbiArIDIsIHNpemVvZihUWVBFKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRZUEU+Ci0gICAgc3RhdGljIHZvaWQgY2xlYW51cCh2b2lkKiBidWZmZXIpIHsKLSAgICAgICAgZGVsZXRlW10gKFRZUEUqKWJ1ZmZlcjsKLSAgICB9Ci0KLSAgICB2b2lkKiBtQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtVmVydGV4Q291bnQ7Ci0KLSAgICB2b2lkKiBtUmVhbGxvY0J1ZmZlcjsgLy8gdXNlZCBmb3IgbXVsdGktYWxsb2NhdGlvbgotCi0gICAgdm9pZCAoKm1DbGVhbnVwTWV0aG9kKSh2b2lkKik7Ci19OwotCiBjbGFzcyBQYXRoVGVzc2VsbGF0b3IgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGV4cGFuZEJvdW5kc0ZvclN0cm9rZShTa1JlY3QmIGJvdW5kcywgY29uc3QgU2tQYWludCogcGFpbnQsIGJvb2wgZm9yY2VFeHBhbmQpOworICAgIHN0YXRpYyB2b2lkIGV4cGFuZEJvdW5kc0ZvclN0cm9rZShTa1JlY3QmIGJvdW5kcywgY29uc3QgU2tQYWludCogcGFpbnQpOwogCiAgICAgc3RhdGljIHZvaWQgdGVzc2VsbGF0ZVBhdGgoY29uc3QgU2tQYXRoJiBwYXRoLCBjb25zdCBTa1BhaW50KiBwYWludCwKLSAgICAgICAgICAgIGNvbnN0IG1hdDQgKnRyYW5zZm9ybSwgVmVydGV4QnVmZmVyJiB2ZXJ0ZXhCdWZmZXIpOworICAgICAgICAgICAgY29uc3QgbWF0NCYgdHJhbnNmb3JtLCBWZXJ0ZXhCdWZmZXImIHZlcnRleEJ1ZmZlcik7CiAKLSAgICBzdGF0aWMgdm9pZCB0ZXNzZWxsYXRlUG9pbnRzKGNvbnN0IGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgU2tQYWludCogcGFpbnQsCi0gICAgICAgICAgICBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sIFNrUmVjdCYgYm91bmRzLCBWZXJ0ZXhCdWZmZXImIHZlcnRleEJ1ZmZlcik7CisgICAgc3RhdGljIHZvaWQgdGVzc2VsbGF0ZVBvaW50cyhjb25zdCBmbG9hdCogcG9pbnRzLCBpbnQgY291bnQsIGNvbnN0IFNrUGFpbnQqIHBhaW50LAorICAgICAgICAgICAgY29uc3QgbWF0NCYgdHJhbnNmb3JtLCBTa1JlY3QmIGJvdW5kcywgVmVydGV4QnVmZmVyJiB2ZXJ0ZXhCdWZmZXIpOwogCi0gICAgc3RhdGljIHZvaWQgdGVzc2VsbGF0ZUxpbmVzKGNvbnN0IGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgU2tQYWludCogcGFpbnQsCi0gICAgICAgICAgICBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sIFNrUmVjdCYgYm91bmRzLCBWZXJ0ZXhCdWZmZXImIHZlcnRleEJ1ZmZlcik7CisgICAgc3RhdGljIHZvaWQgdGVzc2VsbGF0ZUxpbmVzKGNvbnN0IGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQsCisgICAgICAgICAgICBjb25zdCBtYXQ0JiB0cmFuc2Zvcm0sIFNrUmVjdCYgYm91bmRzLCBWZXJ0ZXhCdWZmZXImIHZlcnRleEJ1ZmZlcik7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgYXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzKGNvbnN0IFNrUGF0aCAmcGF0aCwgYm9vbCBmb3JjZUNsb3NlLApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1Byb2dyYW0uY3BwIGIvbGlicy9od3VpL1Byb2dyYW0uY3BwCmluZGV4IDc4MTRhMDEuLmE2Nzk1NTIgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9Qcm9ncmFtLmNwcAorKysgYi9saWJzL2h3dWkvUHJvZ3JhbS5jcHAKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICAgICAgLy8gdXAgYW5kIHRvIHRoZSBsZWZ0LgogICAgICAgICAgICAgLy8gVGhpcyBvZmZzZXQgdmFsdWUgaXMgYmFzZWQgb24gYW4gYXNzdW1wdGlvbiB0aGF0IHNvbWUgaGFyZHdhcmUgbWF5IHVzZSBhcwogICAgICAgICAgICAgLy8gbGl0dGxlIGFzIDEyLjQgcHJlY2lzaW9uLCBzbyB3ZSBvZmZzZXQgYnkgc2xpZ2h0bHkgbW9yZSB0aGFuIDEvMTYuCi0gICAgICAgICAgICBwLnRyYW5zbGF0ZShWZXJ0ZXg6OmdHZW9tZXRyeUZ1ZGdlRmFjdG9yLCBWZXJ0ZXg6OmdHZW9tZXRyeUZ1ZGdlRmFjdG9yKTsKKyAgICAgICAgICAgIHAudHJhbnNsYXRlKFZlcnRleDo6R2VvbWV0cnlGdWRnZUZhY3RvcigpLCBWZXJ0ZXg6Okdlb21ldHJ5RnVkZ2VGYWN0b3IoKSk7CiAgICAgICAgICAgICBnbFVuaWZvcm1NYXRyaXg0ZnYocHJvamVjdGlvbiwgMSwgR0xfRkFMU0UsICZwLmRhdGFbMF0pOwogICAgICAgICB9CiAgICAgICAgIG1Qcm9qZWN0aW9uID0gcHJvamVjdGlvbk1hdHJpeDsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9Qcm9ncmFtLmggYi9saWJzL2h3dWkvUHJvZ3JhbS5oCmluZGV4IDRmOTRhZmMuLmJjMGYyMTEgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9Qcm9ncmFtLmgKKysrIGIvbGlicy9od3VpL1Byb2dyYW0uaApAQCAtMjA3LDcgKzIwNyw3IEBACiAgICAgICogdGhlIGZyYWdtZW50IHNoYWRlci4gV2hlbiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRoZSBwcm9ncmFtIHNob3VsZAogICAgICAqIGJlIHByb3ZpZGVkIHdpdGggYSBtb2R1bGF0aW9uIGNvbG9yLgogICAgICAqLwotICAgIGJvb2wgc2V0Q29sb3IoY29uc3QgZmxvYXQgciwgY29uc3QgZmxvYXQgZywgY29uc3QgZmxvYXQgYiwgY29uc3QgZmxvYXQgYSkgeworICAgIGJvb2wgc2V0Q29sb3JNb2R1bGF0ZShjb25zdCBmbG9hdCBhKSB7CiAgICAgICAgIG1vZHVsYXRlID0gYSA8IENPTE9SX0NPTVBPTkVOVF9USFJFU0hPTEQ7CiAgICAgICAgIHJldHVybiBtb2R1bGF0ZTsKICAgICB9CkBAIC0yMTcsNyArMjE3LDcgQEAKICAgICAgKiB0aGUgZnJhZ21lbnQgc2hhZGVyLiBXaGVuIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlIHByb2dyYW0gc2hvdWxkCiAgICAgICogYmUgcHJvdmlkZWQgd2l0aCBhIG1vZHVsYXRpb24gY29sb3IuCiAgICAgICovCi0gICAgYm9vbCBzZXRBbHBoYThDb2xvcihjb25zdCBmbG9hdCByLCBjb25zdCBmbG9hdCBnLCBjb25zdCBmbG9hdCBiLCBjb25zdCBmbG9hdCBhKSB7CisgICAgYm9vbCBzZXRBbHBoYThDb2xvck1vZHVsYXRlKGNvbnN0IGZsb2F0IHIsIGNvbnN0IGZsb2F0IGcsIGNvbnN0IGZsb2F0IGIsIGNvbnN0IGZsb2F0IGEpIHsKICAgICAgICAgbW9kdWxhdGUgPSBhIDwgQ09MT1JfQ09NUE9ORU5UX1RIUkVTSE9MRCB8fCByID4gQ09MT1JfQ09NUE9ORU5UX0lOVl9USFJFU0hPTEQgfHwKICAgICAgICAgICAgICAgICBnID4gQ09MT1JfQ09NUE9ORU5UX0lOVl9USFJFU0hPTEQgfHwgYiA+IENPTE9SX0NPTVBPTkVOVF9JTlZfVEhSRVNIT0xEOwogICAgICAgICByZXR1cm4gbW9kdWxhdGU7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvUmVjdC5oIGIvbGlicy9od3VpL1JlY3QuaAppbmRleCBkYWJkOGQ0Li5jMjMwMTQ5IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvUmVjdC5oCisrKyBiL2xpYnMvaHd1aS9SZWN0LmgKQEAgLTE5MCwxOSArMTkwLDE5IEBACiAgICAgICAgICAgICAgKiBmcm9tIHRoaXMgaW5zZXQgd2lsbCBvbmx5IGluY3VyIHNpbWlsYXJseSBzbWFsbCBlcnJvcnMgaW4gb3V0cHV0LCBkdWUgdG8gdHJhbnNwYXJlbmN5CiAgICAgICAgICAgICAgKiBpbiBleHRyZW1lIG91dHNpZGUgb2YgdGhlIGdlb21ldHJ5LgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBsZWZ0ID0gZmxvb3JmKGxlZnQgKyBWZXJ0ZXg6OmdHZW9tZXRyeUZ1ZGdlRmFjdG9yKTsKLSAgICAgICAgICAgIHRvcCA9IGZsb29yZih0b3AgKyBWZXJ0ZXg6OmdHZW9tZXRyeUZ1ZGdlRmFjdG9yKTsKLSAgICAgICAgICAgIHJpZ2h0ID0gY2VpbGYocmlnaHQgLSBWZXJ0ZXg6OmdHZW9tZXRyeUZ1ZGdlRmFjdG9yKTsKLSAgICAgICAgICAgIGJvdHRvbSA9IGNlaWxmKGJvdHRvbSAtIFZlcnRleDo6Z0dlb21ldHJ5RnVkZ2VGYWN0b3IpOworICAgICAgICAgICAgbGVmdCA9IGZsb29yZihsZWZ0ICsgVmVydGV4OjpHZW9tZXRyeUZ1ZGdlRmFjdG9yKCkpOworICAgICAgICAgICAgdG9wID0gZmxvb3JmKHRvcCArIFZlcnRleDo6R2VvbWV0cnlGdWRnZUZhY3RvcigpKTsKKyAgICAgICAgICAgIHJpZ2h0ID0gY2VpbGYocmlnaHQgLSBWZXJ0ZXg6Okdlb21ldHJ5RnVkZ2VGYWN0b3IoKSk7CisgICAgICAgICAgICBib3R0b20gPSBjZWlsZihib3R0b20gLSBWZXJ0ZXg6Okdlb21ldHJ5RnVkZ2VGYWN0b3IoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBGb3Igb3RoZXIgZ2VvbWV0cnksIHdlIGRvIHRoZSByZWd1bGFyIHJvdW5kaW5nIGluIG9yZGVyIHRvIHNuYXAsIGJ1dCBhbHNvIG91dHNldCB0aGUKICAgICAgICAgICAgICAqIGJvdW5kcyBieSBhIGZ1ZGdlIGZhY3Rvci4gVGhpcyBlbnN1cmVzIHRoYXQgYW1iaWd1b3VzIGdlb21ldHJ5IChlLmcuIGEgbm9uLUFBIFJlY3QKICAgICAgICAgICAgICAqIHdpdGggdG9wIGxlZnQgYXQgKDAuNSwgMC41KSkgd2lsbCBlcnIgb24gdGhlIHNpZGUgb2YgYSBsYXJnZXIgZGFtYWdlIHJlY3QuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGxlZnQgPSBmbG9vcmYobGVmdCArIDAuNWYgLSBWZXJ0ZXg6OmdHZW9tZXRyeUZ1ZGdlRmFjdG9yKTsKLSAgICAgICAgICAgIHRvcCA9IGZsb29yZih0b3AgKyAwLjVmIC0gVmVydGV4OjpnR2VvbWV0cnlGdWRnZUZhY3Rvcik7Ci0gICAgICAgICAgICByaWdodCA9IGZsb29yZihyaWdodCArIDAuNWYgKyBWZXJ0ZXg6OmdHZW9tZXRyeUZ1ZGdlRmFjdG9yKTsKLSAgICAgICAgICAgIGJvdHRvbSA9IGZsb29yZihib3R0b20gKyAwLjVmICsgVmVydGV4OjpnR2VvbWV0cnlGdWRnZUZhY3Rvcik7CisgICAgICAgICAgICBsZWZ0ID0gZmxvb3JmKGxlZnQgKyAwLjVmIC0gVmVydGV4OjpHZW9tZXRyeUZ1ZGdlRmFjdG9yKCkpOworICAgICAgICAgICAgdG9wID0gZmxvb3JmKHRvcCArIDAuNWYgLSBWZXJ0ZXg6Okdlb21ldHJ5RnVkZ2VGYWN0b3IoKSk7CisgICAgICAgICAgICByaWdodCA9IGZsb29yZihyaWdodCArIDAuNWYgKyBWZXJ0ZXg6Okdlb21ldHJ5RnVkZ2VGYWN0b3IoKSk7CisgICAgICAgICAgICBib3R0b20gPSBmbG9vcmYoYm90dG9tICsgMC41ZiArIFZlcnRleDo6R2VvbWV0cnlGdWRnZUZhY3RvcigpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEzLDYgKzIxMywxMyBAQAogICAgICAgICBib3R0b20gPSBmbG9vcmYoYm90dG9tICsgMC41Zik7CiAgICAgfQogCisgICAgdm9pZCByb3VuZE91dCgpIHsKKyAgICAgICAgbGVmdCA9IGZsb29yZihsZWZ0KTsKKyAgICAgICAgdG9wID0gZmxvb3JmKHRvcCk7CisgICAgICAgIHJpZ2h0ID0gY2VpbGYocmlnaHQpOworICAgICAgICBib3R0b20gPSBjZWlsZihib3R0b20pOworICAgIH0KKwogICAgIHZvaWQgZHVtcCgpIGNvbnN0IHsKICAgICAgICAgQUxPR0QoIlJlY3RbbD0lZiB0PSVmIHI9JWYgYj0lZl0iLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIH0KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9SZW5kZXJlci5oIGIvbGlicy9od3VpL1JlbmRlcmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0ZTgzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvaHd1aS9SZW5kZXJlci5oCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0hXVUlfUkVOREVSRVJfSAorI2RlZmluZSBBTkRST0lEX0hXVUlfUkVOREVSRVJfSAorCisjaW5jbHVkZSA8U2tSZWdpb24uaD4KKworI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KKworI2luY2x1ZGUgIkFzc2V0QXRsYXMuaCIKKyNpbmNsdWRlICJTa1BhaW50LmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgRnVuY3RvcjsKK3N0cnVjdCBSZXNfcG5nXzlwYXRjaDsKKworbmFtZXNwYWNlIHVpcmVuZGVyZXIgeworCitjbGFzcyBEaXNwbGF5TGlzdDsKK2NsYXNzIExheWVyOworY2xhc3MgTWF0cml4NDsKK2NsYXNzIFNraWFDb2xvckZpbHRlcjsKK2NsYXNzIFNraWFTaGFkZXI7CitjbGFzcyBQYXRjaDsKKworZW51bSBEcmF3T3BNb2RlIHsKKyAgICBrRHJhd09wTW9kZV9JbW1lZGlhdGUsCisgICAga0RyYXdPcE1vZGVfRGVmZXIsCisgICAga0RyYXdPcE1vZGVfRmx1c2gKK307CisKKy8qKgorICogSHd1aSdzIGFic3RyYWN0IHZlcnNpb24gb2YgQ2FudmFzLgorICoKKyAqIFByb3ZpZGVzIG1ldGhvZHMgZm9yIGZyYW1lIHN0YXRlIG9wZXJhdGlvbnMsIGFzIHdlbGwgYXMgdGhlIFNrQ2FudmFzIHN0eWxlIHRyYW5zZm9ybS9jbGlwIHN0YXRlLAorICogYW5kIHZhcmllZCBkcmF3aW5nIG9wZXJhdGlvbnMuCisgKgorICogU2hvdWxkIGF0IHNvbWUgcG9pbnQgaW50ZXJhY3Qgd2l0aCBuYXRpdmUgU2tDYW52YXMuCisgKi8KK2NsYXNzIEFORFJPSURfQVBJIFJlbmRlcmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW5kZXJlcigpIHt9CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJlbmRlcmVyIGlzIHJlY29yZGluZyBkcmF3aW5nIGNvbW1hbmRzIGZvciBsYXRlciBwbGF5YmFjay4KKyAgICAgKiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRoZSBkcmF3aW5nIGNvbW1hbmRzIGFyZSBkZWZlcnJlZC4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWNvcmRpbmcoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTYWZlbHkgcmV0cmlldmVzIHRoZSBtb2RlIGZyb20gdGhlIHNwZWNpZmllZCB4ZmVybW9kZS4gSWYgdGhlIHNwZWNpZmllZAorICAgICAqIHhmZXJtb2RlIGlzIG51bGwsIHRoZSBtb2RlIGlzIGFzc3VtZWQgdG8gYmUgU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgaW5saW5lIFNrWGZlcm1vZGU6Ok1vZGUgZ2V0WGZlcm1vZGUoU2tYZmVybW9kZSogbW9kZSkgeworICAgICAgICBTa1hmZXJtb2RlOjpNb2RlIHJlc3VsdE1vZGU7CisgICAgICAgIGlmICghU2tYZmVybW9kZTo6QXNNb2RlKG1vZGUsICZyZXN1bHRNb2RlKSkgeworICAgICAgICAgICAgcmVzdWx0TW9kZSA9IFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdE1vZGU7CisgICAgfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGcmFtZSBzdGF0ZSBvcGVyYXRpb25zCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZGltZW5zaW9uIG9mIHRoZSB1bmRlcmx5aW5nIGRyYXdpbmcgc3VyZmFjZS4gVGhpcyBtZXRob2QgbXVzdAorICAgICAqIGJlIGNhbGxlZCBhdCBsZWFzdCBvbmNlIGV2ZXJ5IHRpbWUgdGhlIGRyYXdpbmcgc3VyZmFjZSBjaGFuZ2VzIHNpemUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gd2lkdGggVGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgdW5kZXJseXNpbmcgc3VyZmFjZQorICAgICAqIEBwYXJhbSBoZWlnaHQgVGhlIGhlaWdodCBpbiBwaXhlbHMgb2YgdGhlIHVuZGVybHlzaW5nIHN1cmZhY2UKKyAgICAgKi8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyB0aGUgcmVuZGVyZXIgdG8gZHJhdyBhIGZyYW1lLiBUaGlzIG1ldGhvZCBtdXN0IGJlIGludm9rZWQKKyAgICAgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggZnJhbWUuIFdoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCwgdGhlCisgICAgICogZW50aXJlIGRyYXdpbmcgc3VyZmFjZSBpcyBhc3N1bWVkIHRvIGJlIHJlZHJhd24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gb3BhcXVlIElmIHRydWUsIHRoZSB0YXJnZXQgc3VyZmFjZSBpcyBjb25zaWRlcmVkIG9wYXF1ZQorICAgICAqICAgICAgICAgICAgICAgYW5kIHdpbGwgbm90IGJlIGNsZWFyZWQuIElmIGZhbHNlLCB0aGUgdGFyZ2V0IHN1cmZhY2UKKyAgICAgKiAgICAgICAgICAgICAgIHdpbGwgYmUgY2xlYXJlZAorICAgICAqLworICAgIHZpcnR1YWwgc3RhdHVzX3QgcHJlcGFyZShib29sIG9wYXF1ZSkgPSAwOworCisgICAgLyoqCisgICAgICogUHJlcGFyZXMgdGhlIHJlbmRlcmVyIHRvIGRyYXcgYSBmcmFtZS4gVGhpcyBtZXRob2QgbXVzdCBiZSBpbnZva2VkCisgICAgICogYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGZyYW1lLiBPbmx5IHRoZSBzcGVjaWZpZWQgcmVjdGFuZ2xlIG9mIHRoZQorICAgICAqIGZyYW1lIGlzIGFzc3VtZWQgdG8gYmUgZGlydHkuIEEgY2xpcCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IHRvCisgICAgICogdGhlIHNwZWNpZmllZCByZWN0YW5nbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbGVmdCBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBkaXJ0eSByZWN0YW5nbGUKKyAgICAgKiBAcGFyYW0gdG9wIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgZGlydHkgcmVjdGFuZ2xlCisgICAgICogQHBhcmFtIHJpZ2h0IFRoZSByaWdodCBjb29yZGluYXRlIG9mIHRoZSBkaXJ0eSByZWN0YW5nbGUKKyAgICAgKiBAcGFyYW0gYm90dG9tIFRoZSBib3R0b20gY29vcmRpbmF0ZSBvZiB0aGUgZGlydHkgcmVjdGFuZ2xlCisgICAgICogQHBhcmFtIG9wYXF1ZSBJZiB0cnVlLCB0aGUgdGFyZ2V0IHN1cmZhY2UgaXMgY29uc2lkZXJlZCBvcGFxdWUKKyAgICAgKiAgICAgICAgICAgICAgIGFuZCB3aWxsIG5vdCBiZSBjbGVhcmVkLiBJZiBmYWxzZSwgdGhlIHRhcmdldCBzdXJmYWNlCisgICAgICogICAgICAgICAgICAgICB3aWxsIGJlIGNsZWFyZWQgaW4gdGhlIHNwZWNpZmllZCBkaXJ0eSByZWN0YW5nbGUKKyAgICAgKi8KKyAgICB2aXJ0dWFsIHN0YXR1c190IHByZXBhcmVEaXJ0eShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCisgICAgICAgICAgICBib29sIG9wYXF1ZSkgPSAwOworCisgICAgLyoqCisgICAgICogSW5kaWNhdGVzIHRoZSBlbmQgb2YgYSBmcmFtZS4gVGhpcyBtZXRob2QgbXVzdCBiZSBpbnZva2VkIHdoZW5ldmVyCisgICAgICogdGhlIGNhbGxlciBpcyBkb25lIHJlbmRlcmluZyBhIGZyYW1lLgorICAgICAqLworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBtdXN0IGJlIGludm9rZWQgYmVmb3JlIGhhbmRpbmcgY29udHJvbCBvdmVyIHRvIGEgZHJhdyBmdW5jdG9yLgorICAgICAqIFNlZSBjYWxsRHJhd0dMRnVuY3Rpb24oKSBmb3IgaW5zdGFuY2UuCisgICAgICoKKyAgICAgKiBUaGlzIGNvbW1hbmQgbXVzdCBub3QgYmUgcmVjb3JkZWQgaW5zaWRlIGRpc3BsYXkgbGlzdHMuCisgICAgICovCisgICAgdmlydHVhbCB2b2lkIGludGVycnVwdCgpID0gMDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgaW52b2tlZCBhZnRlciBnZXR0aW5nIGNvbnRyb2wgYmFjayBmcm9tIGEgZHJhdyBmdW5jdG9yLgorICAgICAqCisgICAgICogVGhpcyBjb21tYW5kIG11c3Qgbm90IGJlIHJlY29yZGVkIGluc2lkZSBkaXNwbGF5IGxpc3RzLgorICAgICAqLworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKSA9IDA7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENhbnZhcyBzdGF0ZSBvcGVyYXRpb25zCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU2F2ZSAobGF5ZXIpCisgICAgdmlydHVhbCBpbnQgZ2V0U2F2ZUNvdW50KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IHNhdmUoaW50IGZsYWdzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVUb0NvdW50KGludCBzYXZlQ291bnQpID0gMDsKKworICAgIGludCBzYXZlTGF5ZXIoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAorICAgICAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQsIGludCBmbGFncykgeworICAgICAgICBTa1hmZXJtb2RlOjpNb2RlIG1vZGUgPSBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlOworICAgICAgICBpbnQgYWxwaGEgPSAyNTU7CisgICAgICAgIGlmIChwYWludCkgeworICAgICAgICAgICAgbW9kZSA9IGdldFhmZXJtb2RlKHBhaW50LT5nZXRYZmVybW9kZSgpKTsKKyAgICAgICAgICAgIGFscGhhID0gcGFpbnQtPmdldEFscGhhKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNhdmVMYXllcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGFscGhhLCBtb2RlLCBmbGFncyk7CisgICAgfQorICAgIGludCBzYXZlTGF5ZXJBbHBoYShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCisgICAgICAgICAgICBpbnQgYWxwaGEsIGludCBmbGFncykgeworICAgICAgICByZXR1cm4gc2F2ZUxheWVyKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgYWxwaGEsIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUsIGZsYWdzKTsKKyAgICB9CisgICAgdmlydHVhbCBpbnQgc2F2ZUxheWVyKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKKyAgICAgICAgICAgIGludCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBpbnQgZmxhZ3MpID0gMDsKKworICAgIC8vIE1hdHJpeAorICAgIHZpcnR1YWwgdm9pZCBnZXRNYXRyaXgoU2tNYXRyaXgqIG91dE1hdHJpeCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkeiA9IDAuMGYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGRlZ3JlZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNrZXcoZmxvYXQgc3gsIGZsb2F0IHN5KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWF0cml4KGNvbnN0IFNrTWF0cml4KiBtYXRyaXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29uY2F0TWF0cml4KGNvbnN0IFNrTWF0cml4KiBtYXRyaXgpID0gMDsKKworICAgIC8vIGNsaXAKKyAgICB2aXJ0dWFsIGNvbnN0IFJlY3QmIGdldENsaXBCb3VuZHMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHF1aWNrUmVqZWN0Q29uc2VydmF0aXZlKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKKyAgICAgICAgICAgIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2xpcFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1JlZ2lvbjo6T3Agb3ApID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2xpcFBhdGgoY29uc3QgU2tQYXRoKiBwYXRoLCBTa1JlZ2lvbjo6T3Agb3ApID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2xpcFJlZ2lvbihjb25zdCBTa1JlZ2lvbiogcmVnaW9uLCBTa1JlZ2lvbjo6T3Agb3ApID0gMDsKKworICAgIC8vIE1pc2MgLSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgd2l0aCBTa1BhaW50IGluc3BlY3Rpb24KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRTaGFkZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldHVwU2hhZGVyKFNraWFTaGFkZXIqIHNoYWRlcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlc2V0Q29sb3JGaWx0ZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldHVwQ29sb3JGaWx0ZXIoU2tpYUNvbG9yRmlsdGVyKiBmaWx0ZXIpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZXNldFNoYWRvdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dXBTaGFkb3coZmxvYXQgcmFkaXVzLCBmbG9hdCBkeCwgZmxvYXQgZHksIGludCBjb2xvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlc2V0UGFpbnRGaWx0ZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldHVwUGFpbnRGaWx0ZXIoaW50IGNsZWFyQml0cywgaW50IHNldEJpdHMpID0gMDsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ2FudmFzIGRyYXcgb3BlcmF0aW9ucworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0NvbG9yKGludCBjb2xvciwgU2tYZmVybW9kZTo6TW9kZSBtb2RlKSA9IDA7CisKKyAgICAvLyBCaXRtYXAtYmFzZWQKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdCaXRtYXAoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLAorICAgICAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQpID0gMDsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdCaXRtYXAoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgY29uc3QgU2tNYXRyaXgqIG1hdHJpeCwKKyAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Qml0bWFwKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGZsb2F0IHNyY0xlZnQsIGZsb2F0IHNyY1RvcCwKKyAgICAgICAgICAgIGZsb2F0IHNyY1JpZ2h0LCBmbG9hdCBzcmNCb3R0b20sIGZsb2F0IGRzdExlZnQsIGZsb2F0IGRzdFRvcCwKKyAgICAgICAgICAgIGZsb2F0IGRzdFJpZ2h0LCBmbG9hdCBkc3RCb3R0b20sIGNvbnN0IFNrUGFpbnQqIHBhaW50KSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3Qml0bWFwRGF0YShjb25zdCBTa0JpdG1hcCogYml0bWFwLCBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsCisgICAgICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCkgPSAwOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0JpdG1hcE1lc2goY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgaW50IG1lc2hXaWR0aCwgaW50IG1lc2hIZWlnaHQsCisgICAgICAgICAgICBjb25zdCBmbG9hdCogdmVydGljZXMsIGNvbnN0IGludCogY29sb3JzLCBjb25zdCBTa1BhaW50KiBwYWludCkgPSAwOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1BhdGNoKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGNvbnN0IFJlc19wbmdfOXBhdGNoKiBwYXRjaCwKKyAgICAgICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgY29uc3QgU2tQYWludCogcGFpbnQpID0gMDsKKworICAgIC8vIFNoYXBlcworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd1JlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAorICAgICAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQpID0gMDsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdSZWN0cyhjb25zdCBmbG9hdCogcmVjdHMsIGludCBjb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQpID0gMDsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdSb3VuZFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAorICAgICAgICAgICAgZmxvYXQgcngsIGZsb2F0IHJ5LCBjb25zdCBTa1BhaW50KiBwYWludCkgPSAwOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0NpcmNsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCByYWRpdXMsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3T3ZhbChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCisgICAgICAgICAgICBjb25zdCBTa1BhaW50KiBwYWludCkgPSAwOworICAgIHZpcnR1YWwgc3RhdHVzX3QgZHJhd0FyYyhmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCisgICAgICAgICAgICBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBzd2VlcEFuZ2xlLCBib29sIHVzZUNlbnRlciwgY29uc3QgU2tQYWludCogcGFpbnQpID0gMDsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdQYXRoKGNvbnN0IFNrUGF0aCogcGF0aCwgY29uc3QgU2tQYWludCogcGFpbnQpID0gMDsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdMaW5lcyhjb25zdCBmbG9hdCogcG9pbnRzLCBpbnQgY291bnQsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UG9pbnRzKGNvbnN0IGZsb2F0KiBwb2ludHMsIGludCBjb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQpID0gMDsKKworICAgIC8vIFRleHQKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdUZXh0KGNvbnN0IGNoYXIqIHRleHQsIGludCBieXRlc0NvdW50LCBpbnQgY291bnQsIGZsb2F0IHgsIGZsb2F0IHksCisgICAgICAgICAgICBjb25zdCBmbG9hdCogcG9zaXRpb25zLCBjb25zdCBTa1BhaW50KiBwYWludCwgZmxvYXQgdG90YWxBZHZhbmNlLCBjb25zdCBSZWN0JiBib3VuZHMsCisgICAgICAgICAgICBEcmF3T3BNb2RlIGRyYXdPcE1vZGUgPSBrRHJhd09wTW9kZV9JbW1lZGlhdGUpID0gMDsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdUZXh0T25QYXRoKGNvbnN0IGNoYXIqIHRleHQsIGludCBieXRlc0NvdW50LCBpbnQgY291bnQsIGNvbnN0IFNrUGF0aCogcGF0aCwKKyAgICAgICAgICAgIGZsb2F0IGhPZmZzZXQsIGZsb2F0IHZPZmZzZXQsIGNvbnN0IFNrUGFpbnQqIHBhaW50KSA9IDA7CisgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3UG9zVGV4dChjb25zdCBjaGFyKiB0ZXh0LCBpbnQgYnl0ZXNDb3VudCwgaW50IGNvdW50LAorICAgICAgICAgICAgY29uc3QgZmxvYXQqIHBvc2l0aW9ucywgY29uc3QgU2tQYWludCogcGFpbnQpID0gMDsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ2FudmFzIGRyYXcgb3BlcmF0aW9ucyAtIHNwZWNpYWwKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdMYXllcihMYXllciogbGF5ZXIsIGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKKyAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdEaXNwbGF5TGlzdChEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QsIFJlY3QmIGRpcnR5LAorICAgICAgICAgICAgaW50MzJfdCByZXBsYXlGbGFncykgPSAwOworCisgICAgLy8gVE9ETzogcmVuYW1lIGZvciBjb25zaXN0ZW5jeQorICAgIHZpcnR1YWwgc3RhdHVzX3QgY2FsbERyYXdHTEZ1bmN0aW9uKEZ1bmN0b3IqIGZ1bmN0b3IsIFJlY3QmIGRpcnR5KSA9IDA7CisKK3ByaXZhdGU6Cit9OyAvLyBjbGFzcyBSZW5kZXJlcgorCit9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfSFdVSV9SRU5ERVJFUl9ICmRpZmYgLS1naXQgYS9saWJzL2h3dWkvUmVzb3VyY2VDYWNoZS5jcHAgYi9saWJzL2h3dWkvUmVzb3VyY2VDYWNoZS5jcHAKaW5kZXggM2Y3NzAyMS4uZTU4ODU3YyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1Jlc291cmNlQ2FjaGUuY3BwCisrKyBiL2xpYnMvaHd1aS9SZXNvdXJjZUNhY2hlLmNwcApAQCAtNDAsNyArNDAsNyBAQAogCiBSZXNvdXJjZUNhY2hlOjpSZXNvdXJjZUNhY2hlKCkgewogICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7Ci0gICAgbUNhY2hlID0gbmV3IEtleWVkVmVjdG9yPHZvaWQqLCBSZXNvdXJjZVJlZmVyZW5jZSo+KCk7CisgICAgbUNhY2hlID0gbmV3IEtleWVkVmVjdG9yPGNvbnN0IHZvaWQqLCBSZXNvdXJjZVJlZmVyZW5jZSo+KCk7CiB9CiAKIFJlc291cmNlQ2FjaGU6On5SZXNvdXJjZUNhY2hlKCkgewpAQCAtNjEsMTMgKzYxLDEzIEBACiAgICAgaW5jcmVtZW50UmVmY291bnRMb2NrZWQocmVzb3VyY2UsIHJlc291cmNlVHlwZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VDYWNoZTo6aW5jcmVtZW50UmVmY291bnQoU2tCaXRtYXAqIGJpdG1hcFJlc291cmNlKSB7Cit2b2lkIFJlc291cmNlQ2FjaGU6OmluY3JlbWVudFJlZmNvdW50KGNvbnN0IFNrQml0bWFwKiBiaXRtYXBSZXNvdXJjZSkgewogICAgIGJpdG1hcFJlc291cmNlLT5waXhlbFJlZigpLT5nbG9iYWxSZWYoKTsKICAgICBTa1NhZmVSZWYoYml0bWFwUmVzb3VyY2UtPmdldENvbG9yVGFibGUoKSk7CiAgICAgaW5jcmVtZW50UmVmY291bnQoKHZvaWQqKSBiaXRtYXBSZXNvdXJjZSwga0JpdG1hcCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VDYWNoZTo6aW5jcmVtZW50UmVmY291bnQoU2tQYXRoKiBwYXRoUmVzb3VyY2UpIHsKK3ZvaWQgUmVzb3VyY2VDYWNoZTo6aW5jcmVtZW50UmVmY291bnQoY29uc3QgU2tQYXRoKiBwYXRoUmVzb3VyY2UpIHsKICAgICBpbmNyZW1lbnRSZWZjb3VudCgodm9pZCopIHBhdGhSZXNvdXJjZSwga1BhdGgpOwogfQogCkBAIC04MSw3ICs4MSw3IEBACiAgICAgaW5jcmVtZW50UmVmY291bnQoKHZvaWQqKSBmaWx0ZXJSZXNvdXJjZSwga0NvbG9yRmlsdGVyKTsKIH0KIAotdm9pZCBSZXNvdXJjZUNhY2hlOjppbmNyZW1lbnRSZWZjb3VudChSZXNfcG5nXzlwYXRjaCogcGF0Y2hSZXNvdXJjZSkgewordm9pZCBSZXNvdXJjZUNhY2hlOjppbmNyZW1lbnRSZWZjb3VudChjb25zdCBSZXNfcG5nXzlwYXRjaCogcGF0Y2hSZXNvdXJjZSkgewogICAgIGluY3JlbWVudFJlZmNvdW50KCh2b2lkKikgcGF0Y2hSZXNvdXJjZSwga05pbmVQYXRjaCk7CiB9CiAKQEAgLTk5LDEzICs5OSwxMyBAQAogICAgIHJlZi0+cmVmQ291bnQrKzsKIH0KIAotdm9pZCBSZXNvdXJjZUNhY2hlOjppbmNyZW1lbnRSZWZjb3VudExvY2tlZChTa0JpdG1hcCogYml0bWFwUmVzb3VyY2UpIHsKK3ZvaWQgUmVzb3VyY2VDYWNoZTo6aW5jcmVtZW50UmVmY291bnRMb2NrZWQoY29uc3QgU2tCaXRtYXAqIGJpdG1hcFJlc291cmNlKSB7CiAgICAgYml0bWFwUmVzb3VyY2UtPnBpeGVsUmVmKCktPmdsb2JhbFJlZigpOwogICAgIFNrU2FmZVJlZihiaXRtYXBSZXNvdXJjZS0+Z2V0Q29sb3JUYWJsZSgpKTsKICAgICBpbmNyZW1lbnRSZWZjb3VudExvY2tlZCgodm9pZCopIGJpdG1hcFJlc291cmNlLCBrQml0bWFwKTsKIH0KIAotdm9pZCBSZXNvdXJjZUNhY2hlOjppbmNyZW1lbnRSZWZjb3VudExvY2tlZChTa1BhdGgqIHBhdGhSZXNvdXJjZSkgewordm9pZCBSZXNvdXJjZUNhY2hlOjppbmNyZW1lbnRSZWZjb3VudExvY2tlZChjb25zdCBTa1BhdGgqIHBhdGhSZXNvdXJjZSkgewogICAgIGluY3JlbWVudFJlZmNvdW50TG9ja2VkKCh2b2lkKikgcGF0aFJlc291cmNlLCBrUGF0aCk7CiB9CiAKQEAgLTExOSw3ICsxMTksNyBAQAogICAgIGluY3JlbWVudFJlZmNvdW50TG9ja2VkKCh2b2lkKikgZmlsdGVyUmVzb3VyY2UsIGtDb2xvckZpbHRlcik7CiB9CiAKLXZvaWQgUmVzb3VyY2VDYWNoZTo6aW5jcmVtZW50UmVmY291bnRMb2NrZWQoUmVzX3BuZ185cGF0Y2gqIHBhdGNoUmVzb3VyY2UpIHsKK3ZvaWQgUmVzb3VyY2VDYWNoZTo6aW5jcmVtZW50UmVmY291bnRMb2NrZWQoY29uc3QgUmVzX3BuZ185cGF0Y2gqIHBhdGNoUmVzb3VyY2UpIHsKICAgICBpbmNyZW1lbnRSZWZjb3VudExvY2tlZCgodm9pZCopIHBhdGNoUmVzb3VyY2UsIGtOaW5lUGF0Y2gpOwogfQogCkBAIC0xMzIsMTMgKzEzMiwxMyBAQAogICAgIGRlY3JlbWVudFJlZmNvdW50TG9ja2VkKHJlc291cmNlKTsKIH0KIAotdm9pZCBSZXNvdXJjZUNhY2hlOjpkZWNyZW1lbnRSZWZjb3VudChTa0JpdG1hcCogYml0bWFwUmVzb3VyY2UpIHsKK3ZvaWQgUmVzb3VyY2VDYWNoZTo6ZGVjcmVtZW50UmVmY291bnQoY29uc3QgU2tCaXRtYXAqIGJpdG1hcFJlc291cmNlKSB7CiAgICAgYml0bWFwUmVzb3VyY2UtPnBpeGVsUmVmKCktPmdsb2JhbFVucmVmKCk7CiAgICAgU2tTYWZlVW5yZWYoYml0bWFwUmVzb3VyY2UtPmdldENvbG9yVGFibGUoKSk7CiAgICAgZGVjcmVtZW50UmVmY291bnQoKHZvaWQqKSBiaXRtYXBSZXNvdXJjZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VDYWNoZTo6ZGVjcmVtZW50UmVmY291bnQoU2tQYXRoKiBwYXRoUmVzb3VyY2UpIHsKK3ZvaWQgUmVzb3VyY2VDYWNoZTo6ZGVjcmVtZW50UmVmY291bnQoY29uc3QgU2tQYXRoKiBwYXRoUmVzb3VyY2UpIHsKICAgICBkZWNyZW1lbnRSZWZjb3VudCgodm9pZCopIHBhdGhSZXNvdXJjZSk7CiB9CiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgIGRlY3JlbWVudFJlZmNvdW50KCh2b2lkKikgZmlsdGVyUmVzb3VyY2UpOwogfQogCi12b2lkIFJlc291cmNlQ2FjaGU6OmRlY3JlbWVudFJlZmNvdW50KFJlc19wbmdfOXBhdGNoKiBwYXRjaFJlc291cmNlKSB7Cit2b2lkIFJlc291cmNlQ2FjaGU6OmRlY3JlbWVudFJlZmNvdW50KGNvbnN0IFJlc19wbmdfOXBhdGNoKiBwYXRjaFJlc291cmNlKSB7CiAgICAgZGVjcmVtZW50UmVmY291bnQoKHZvaWQqKSBwYXRjaFJlc291cmNlKTsKIH0KIApAQCAtMTczLDEzICsxNzMsMTMgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVzb3VyY2VDYWNoZTo6ZGVjcmVtZW50UmVmY291bnRMb2NrZWQoU2tCaXRtYXAqIGJpdG1hcFJlc291cmNlKSB7Cit2b2lkIFJlc291cmNlQ2FjaGU6OmRlY3JlbWVudFJlZmNvdW50TG9ja2VkKGNvbnN0IFNrQml0bWFwKiBiaXRtYXBSZXNvdXJjZSkgewogICAgIGJpdG1hcFJlc291cmNlLT5waXhlbFJlZigpLT5nbG9iYWxVbnJlZigpOwogICAgIFNrU2FmZVVucmVmKGJpdG1hcFJlc291cmNlLT5nZXRDb2xvclRhYmxlKCkpOwogICAgIGRlY3JlbWVudFJlZmNvdW50TG9ja2VkKCh2b2lkKikgYml0bWFwUmVzb3VyY2UpOwogfQogCi12b2lkIFJlc291cmNlQ2FjaGU6OmRlY3JlbWVudFJlZmNvdW50TG9ja2VkKFNrUGF0aCogcGF0aFJlc291cmNlKSB7Cit2b2lkIFJlc291cmNlQ2FjaGU6OmRlY3JlbWVudFJlZmNvdW50TG9ja2VkKGNvbnN0IFNrUGF0aCogcGF0aFJlc291cmNlKSB7CiAgICAgZGVjcmVtZW50UmVmY291bnRMb2NrZWQoKHZvaWQqKSBwYXRoUmVzb3VyY2UpOwogfQogCkBAIC0xOTMsNyArMTkzLDcgQEAKICAgICBkZWNyZW1lbnRSZWZjb3VudExvY2tlZCgodm9pZCopIGZpbHRlclJlc291cmNlKTsKIH0KIAotdm9pZCBSZXNvdXJjZUNhY2hlOjpkZWNyZW1lbnRSZWZjb3VudExvY2tlZChSZXNfcG5nXzlwYXRjaCogcGF0Y2hSZXNvdXJjZSkgewordm9pZCBSZXNvdXJjZUNhY2hlOjpkZWNyZW1lbnRSZWZjb3VudExvY2tlZChjb25zdCBSZXNfcG5nXzlwYXRjaCogcGF0Y2hSZXNvdXJjZSkgewogICAgIGRlY3JlbWVudFJlZmNvdW50TG9ja2VkKCh2b2lkKikgcGF0Y2hSZXNvdXJjZSk7CiB9CiAKQEAgLTIyMywxMiArMjIzLDEyIEBACiAgICAgfQogfQogCi12b2lkIFJlc291cmNlQ2FjaGU6OmRlc3RydWN0b3IoU2tCaXRtYXAqIHJlc291cmNlKSB7Cit2b2lkIFJlc291cmNlQ2FjaGU6OmRlc3RydWN0b3IoY29uc3QgU2tCaXRtYXAqIHJlc291cmNlKSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKICAgICBkZXN0cnVjdG9yTG9ja2VkKHJlc291cmNlKTsKIH0KIAotdm9pZCBSZXNvdXJjZUNhY2hlOjpkZXN0cnVjdG9yTG9ja2VkKFNrQml0bWFwKiByZXNvdXJjZSkgewordm9pZCBSZXNvdXJjZUNhY2hlOjpkZXN0cnVjdG9yTG9ja2VkKGNvbnN0IFNrQml0bWFwKiByZXNvdXJjZSkgewogICAgIHNzaXplX3QgaW5kZXggPSBtQ2FjaGUtPmluZGV4T2ZLZXkocmVzb3VyY2UpOwogICAgIFJlc291cmNlUmVmZXJlbmNlKiByZWYgPSBpbmRleCA+PSAwID8gbUNhY2hlLT52YWx1ZUF0KGluZGV4KSA6IE5VTEw7CiAgICAgaWYgKHJlZiA9PSBOVUxMKSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAKICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGUgbUxvY2sgbXV0ZXggaXMgaGVsZCAodGhhdCBtdXRleCBpcyBncmFiYmVkCiAgKiBieSB0aGUgdmFyaW91cyBkZXN0cnVjdG9yKCkgYW5kIHJlY3ljbGUoKSBtZXRob2RzIHdoaWNoIGNhbGwgdGhpcyBtZXRob2QpLgogICovCi12b2lkIFJlc291cmNlQ2FjaGU6OmRlbGV0ZVJlc291cmNlUmVmZXJlbmNlTG9ja2VkKHZvaWQqIHJlc291cmNlLCBSZXNvdXJjZVJlZmVyZW5jZSogcmVmKSB7Cit2b2lkIFJlc291cmNlQ2FjaGU6OmRlbGV0ZVJlc291cmNlUmVmZXJlbmNlTG9ja2VkKGNvbnN0IHZvaWQqIHJlc291cmNlLCBSZXNvdXJjZVJlZmVyZW5jZSogcmVmKSB7CiAgICAgaWYgKHJlZi0+cmVjeWNsZWQgJiYgcmVmLT5yZXNvdXJjZVR5cGUgPT0ga0JpdG1hcCkgewogICAgICAgICAoKFNrQml0bWFwKikgcmVzb3VyY2UpLT5zZXRQaXhlbHMoTlVMTCwgTlVMTCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1Jlc291cmNlQ2FjaGUuaCBiL2xpYnMvaHd1aS9SZXNvdXJjZUNhY2hlLmgKaW5kZXggZWEwYzFiNS4uYzA2YjA5YiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1Jlc291cmNlQ2FjaGUuaAorKysgYi9saWJzL2h3dWkvUmVzb3VyY2VDYWNoZS5oCkBAIC03MCw0MiArNzAsNDIgQEAKICAgICB2b2lkIGxvY2soKTsKICAgICB2b2lkIHVubG9jaygpOwogCi0gICAgdm9pZCBpbmNyZW1lbnRSZWZjb3VudChTa1BhdGgqIHJlc291cmNlKTsKLSAgICB2b2lkIGluY3JlbWVudFJlZmNvdW50KFNrQml0bWFwKiByZXNvdXJjZSk7CisgICAgdm9pZCBpbmNyZW1lbnRSZWZjb3VudChjb25zdCBTa1BhdGgqIHJlc291cmNlKTsKKyAgICB2b2lkIGluY3JlbWVudFJlZmNvdW50KGNvbnN0IFNrQml0bWFwKiByZXNvdXJjZSk7CiAgICAgdm9pZCBpbmNyZW1lbnRSZWZjb3VudChTa2lhU2hhZGVyKiByZXNvdXJjZSk7CiAgICAgdm9pZCBpbmNyZW1lbnRSZWZjb3VudChTa2lhQ29sb3JGaWx0ZXIqIHJlc291cmNlKTsKLSAgICB2b2lkIGluY3JlbWVudFJlZmNvdW50KFJlc19wbmdfOXBhdGNoKiByZXNvdXJjZSk7CisgICAgdm9pZCBpbmNyZW1lbnRSZWZjb3VudChjb25zdCBSZXNfcG5nXzlwYXRjaCogcmVzb3VyY2UpOwogICAgIHZvaWQgaW5jcmVtZW50UmVmY291bnQoTGF5ZXIqIHJlc291cmNlKTsKIAotICAgIHZvaWQgaW5jcmVtZW50UmVmY291bnRMb2NrZWQoU2tQYXRoKiByZXNvdXJjZSk7Ci0gICAgdm9pZCBpbmNyZW1lbnRSZWZjb3VudExvY2tlZChTa0JpdG1hcCogcmVzb3VyY2UpOworICAgIHZvaWQgaW5jcmVtZW50UmVmY291bnRMb2NrZWQoY29uc3QgU2tQYXRoKiByZXNvdXJjZSk7CisgICAgdm9pZCBpbmNyZW1lbnRSZWZjb3VudExvY2tlZChjb25zdCBTa0JpdG1hcCogcmVzb3VyY2UpOwogICAgIHZvaWQgaW5jcmVtZW50UmVmY291bnRMb2NrZWQoU2tpYVNoYWRlciogcmVzb3VyY2UpOwogICAgIHZvaWQgaW5jcmVtZW50UmVmY291bnRMb2NrZWQoU2tpYUNvbG9yRmlsdGVyKiByZXNvdXJjZSk7Ci0gICAgdm9pZCBpbmNyZW1lbnRSZWZjb3VudExvY2tlZChSZXNfcG5nXzlwYXRjaCogcmVzb3VyY2UpOworICAgIHZvaWQgaW5jcmVtZW50UmVmY291bnRMb2NrZWQoY29uc3QgUmVzX3BuZ185cGF0Y2gqIHJlc291cmNlKTsKICAgICB2b2lkIGluY3JlbWVudFJlZmNvdW50TG9ja2VkKExheWVyKiByZXNvdXJjZSk7CiAKLSAgICB2b2lkIGRlY3JlbWVudFJlZmNvdW50KFNrQml0bWFwKiByZXNvdXJjZSk7Ci0gICAgdm9pZCBkZWNyZW1lbnRSZWZjb3VudChTa1BhdGgqIHJlc291cmNlKTsKKyAgICB2b2lkIGRlY3JlbWVudFJlZmNvdW50KGNvbnN0IFNrQml0bWFwKiByZXNvdXJjZSk7CisgICAgdm9pZCBkZWNyZW1lbnRSZWZjb3VudChjb25zdCBTa1BhdGgqIHJlc291cmNlKTsKICAgICB2b2lkIGRlY3JlbWVudFJlZmNvdW50KFNraWFTaGFkZXIqIHJlc291cmNlKTsKICAgICB2b2lkIGRlY3JlbWVudFJlZmNvdW50KFNraWFDb2xvckZpbHRlciogcmVzb3VyY2UpOwotICAgIHZvaWQgZGVjcmVtZW50UmVmY291bnQoUmVzX3BuZ185cGF0Y2gqIHJlc291cmNlKTsKKyAgICB2b2lkIGRlY3JlbWVudFJlZmNvdW50KGNvbnN0IFJlc19wbmdfOXBhdGNoKiByZXNvdXJjZSk7CiAgICAgdm9pZCBkZWNyZW1lbnRSZWZjb3VudChMYXllciogcmVzb3VyY2UpOwogCi0gICAgdm9pZCBkZWNyZW1lbnRSZWZjb3VudExvY2tlZChTa0JpdG1hcCogcmVzb3VyY2UpOwotICAgIHZvaWQgZGVjcmVtZW50UmVmY291bnRMb2NrZWQoU2tQYXRoKiByZXNvdXJjZSk7CisgICAgdm9pZCBkZWNyZW1lbnRSZWZjb3VudExvY2tlZChjb25zdCBTa0JpdG1hcCogcmVzb3VyY2UpOworICAgIHZvaWQgZGVjcmVtZW50UmVmY291bnRMb2NrZWQoY29uc3QgU2tQYXRoKiByZXNvdXJjZSk7CiAgICAgdm9pZCBkZWNyZW1lbnRSZWZjb3VudExvY2tlZChTa2lhU2hhZGVyKiByZXNvdXJjZSk7CiAgICAgdm9pZCBkZWNyZW1lbnRSZWZjb3VudExvY2tlZChTa2lhQ29sb3JGaWx0ZXIqIHJlc291cmNlKTsKLSAgICB2b2lkIGRlY3JlbWVudFJlZmNvdW50TG9ja2VkKFJlc19wbmdfOXBhdGNoKiByZXNvdXJjZSk7CisgICAgdm9pZCBkZWNyZW1lbnRSZWZjb3VudExvY2tlZChjb25zdCBSZXNfcG5nXzlwYXRjaCogcmVzb3VyY2UpOwogICAgIHZvaWQgZGVjcmVtZW50UmVmY291bnRMb2NrZWQoTGF5ZXIqIHJlc291cmNlKTsKIAogICAgIHZvaWQgZGVzdHJ1Y3RvcihTa1BhdGgqIHJlc291cmNlKTsKLSAgICB2b2lkIGRlc3RydWN0b3IoU2tCaXRtYXAqIHJlc291cmNlKTsKKyAgICB2b2lkIGRlc3RydWN0b3IoY29uc3QgU2tCaXRtYXAqIHJlc291cmNlKTsKICAgICB2b2lkIGRlc3RydWN0b3IoU2tpYVNoYWRlciogcmVzb3VyY2UpOwogICAgIHZvaWQgZGVzdHJ1Y3RvcihTa2lhQ29sb3JGaWx0ZXIqIHJlc291cmNlKTsKICAgICB2b2lkIGRlc3RydWN0b3IoUmVzX3BuZ185cGF0Y2gqIHJlc291cmNlKTsKIAogICAgIHZvaWQgZGVzdHJ1Y3RvckxvY2tlZChTa1BhdGgqIHJlc291cmNlKTsKLSAgICB2b2lkIGRlc3RydWN0b3JMb2NrZWQoU2tCaXRtYXAqIHJlc291cmNlKTsKKyAgICB2b2lkIGRlc3RydWN0b3JMb2NrZWQoY29uc3QgU2tCaXRtYXAqIHJlc291cmNlKTsKICAgICB2b2lkIGRlc3RydWN0b3JMb2NrZWQoU2tpYVNoYWRlciogcmVzb3VyY2UpOwogICAgIHZvaWQgZGVzdHJ1Y3RvckxvY2tlZChTa2lhQ29sb3JGaWx0ZXIqIHJlc291cmNlKTsKICAgICB2b2lkIGRlc3RydWN0b3JMb2NrZWQoUmVzX3BuZ185cGF0Y2gqIHJlc291cmNlKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgIGJvb2wgcmVjeWNsZUxvY2tlZChTa0JpdG1hcCogcmVzb3VyY2UpOwogCiBwcml2YXRlOgotICAgIHZvaWQgZGVsZXRlUmVzb3VyY2VSZWZlcmVuY2VMb2NrZWQodm9pZCogcmVzb3VyY2UsIFJlc291cmNlUmVmZXJlbmNlKiByZWYpOworICAgIHZvaWQgZGVsZXRlUmVzb3VyY2VSZWZlcmVuY2VMb2NrZWQoY29uc3Qgdm9pZCogcmVzb3VyY2UsIFJlc291cmNlUmVmZXJlbmNlKiByZWYpOwogCiAgICAgdm9pZCBpbmNyZW1lbnRSZWZjb3VudCh2b2lkKiByZXNvdXJjZSwgUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSk7CiAgICAgdm9pZCBpbmNyZW1lbnRSZWZjb3VudExvY2tlZCh2b2lkKiByZXNvdXJjZSwgUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSk7CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgKi8KICAgICBtdXRhYmxlIE11dGV4IG1Mb2NrOwogCi0gICAgS2V5ZWRWZWN0b3I8dm9pZCosIFJlc291cmNlUmVmZXJlbmNlKj4qIG1DYWNoZTsKKyAgICBLZXllZFZlY3Rvcjxjb25zdCB2b2lkKiwgUmVzb3VyY2VSZWZlcmVuY2UqPiogbUNhY2hlOwogfTsKIAogfTsgLy8gbmFtZXNwYWNlIHVpcmVuZGVyZXIKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9TaGFkb3dUZXNzZWxsYXRvci5jcHAgYi9saWJzL2h3dWkvU2hhZG93VGVzc2VsbGF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2U4NzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvU2hhZG93VGVzc2VsbGF0b3IuY3BwCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJPcGVuR0xSZW5kZXJlciIKKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgIkFtYmllbnRTaGFkb3cuaCIKKyNpbmNsdWRlICJTaGFkb3dUZXNzZWxsYXRvci5oIgorI2luY2x1ZGUgIlNwb3RTaGFkb3cuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIHVpcmVuZGVyZXIgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSBUIG1heChUIGEsIFQgYikgeworICAgIHJldHVybiBhID4gYiA/IGEgOiBiOworfQorCisvLyBUT0RPOiBTdXBwb3J0IHBhdGggYXMgdGhlIGlucHV0IG9mIHRoZSBwb2x5Z29uIGluc3RlYWQgb2YgdGhlIHJlY3QncyB3aWR0aAorLy8gYW5kIGhlaWdodC4gQW5kIHRoZSB6IHZhbHVlcyBuZWVkIHRvIGJlIGNvbXB1dGVkIGFjY29yZGluZyB0byB0aGUKKy8vIHRyYW5zZm9ybWF0aW9uIGZvciBlYWNoIHZlcnRleC4KKy8qKgorICogR2VuZXJhdGUgdGhlIHBvbHlnb24gZm9yIHRoZSBjYXN0ZXIuCisgKgorICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCBvZiB0aGUgY2FzdGVyCisgKiBAcGFyYW0gaGVpZ2h0IHRoZSBoZWlnaHQgb2YgdGhlIGNhc3RlcgorICogQHBhcmFtIGNhc3RlclRyYW5zZm9ybSB0cmFuc2Zvcm1hdGlvbiBpbmZvIG9mIHRoZSBjYXN0ZXIKKyAqIEBwYXJhbSBwb2x5Z29uIHJldHVybiB0aGUgY2FzdGVyJ3MgcG9seWdvbgorICoKKyAqLwordm9pZCBTaGFkb3dUZXNzZWxsYXRvcjo6Z2VuZXJhdGVDYXN0ZXJQb2x5Z29uKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsCisgICAgICAgIGNvbnN0IG1hdDQmIGNhc3RlclRyYW5zZm9ybSwgaW50IHZlcnRleENvdW50LCBWZWN0b3IzKiBwb2x5Z29uKSB7CisgICAgUmVjdCBibG9ja1JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgcG9seWdvblswXS54ID0gYmxvY2tSZWN0LmxlZnQ7CisgICAgcG9seWdvblswXS55ID0gYmxvY2tSZWN0LnRvcDsKKyAgICBwb2x5Z29uWzBdLnogPSAwOworICAgIHBvbHlnb25bMV0ueCA9IGJsb2NrUmVjdC5yaWdodDsKKyAgICBwb2x5Z29uWzFdLnkgPSBibG9ja1JlY3QudG9wOworICAgIHBvbHlnb25bMV0ueiA9IDA7CisgICAgcG9seWdvblsyXS54ID0gYmxvY2tSZWN0LnJpZ2h0OworICAgIHBvbHlnb25bMl0ueSA9IGJsb2NrUmVjdC5ib3R0b207CisgICAgcG9seWdvblsyXS56ID0gMDsKKyAgICBwb2x5Z29uWzNdLnggPSBibG9ja1JlY3QubGVmdDsKKyAgICBwb2x5Z29uWzNdLnkgPSBibG9ja1JlY3QuYm90dG9tOworICAgIHBvbHlnb25bM10ueiA9IDA7CisgICAgY2FzdGVyVHJhbnNmb3JtLm1hcFBvaW50M2QocG9seWdvblswXSk7CisgICAgY2FzdGVyVHJhbnNmb3JtLm1hcFBvaW50M2QocG9seWdvblsxXSk7CisgICAgY2FzdGVyVHJhbnNmb3JtLm1hcFBvaW50M2QocG9seWdvblsyXSk7CisgICAgY2FzdGVyVHJhbnNmb3JtLm1hcFBvaW50M2QocG9seWdvblszXSk7Cit9CisKK3ZvaWQgU2hhZG93VGVzc2VsbGF0b3I6OnRlc3NlbGxhdGVBbWJpZW50U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsCisgICAgICAgIGNvbnN0IG1hdDQmIGNhc3RlclRyYW5zZm9ybSwgVmVydGV4QnVmZmVyJiBzaGFkb3dWZXJ0ZXhCdWZmZXIpIHsKKworICAgIGNvbnN0IGludCB2ZXJ0ZXhDb3VudCA9IDQ7CisgICAgVmVjdG9yMyBwb2x5Z29uW3ZlcnRleENvdW50XTsKKyAgICBnZW5lcmF0ZUNhc3RlclBvbHlnb24od2lkdGgsIGhlaWdodCwgY2FzdGVyVHJhbnNmb3JtLCB2ZXJ0ZXhDb3VudCwgcG9seWdvbik7CisKKyAgICAvLyBBIGJ1bmNoIG9mIHBhcmFtZXRlcnMgdG8gdHdlYWsgdGhlIHNoYWRvdy4KKyAgICAvLyBUT0RPOiBBbGxvdyBzb21lIG9mIHRoZXNlIGNoYW5nYWJsZSBieSBkZWJ1ZyBzZXR0aW5ncyBvciBBUElzLgorICAgIGNvbnN0IGludCByYXlzID0gMTI4OworICAgIGNvbnN0IGludCBsYXllcnMgPSAyOworICAgIGNvbnN0IGZsb2F0IHN0cmVuZ3RoID0gMC41OworICAgIGNvbnN0IGZsb2F0IGhlaWdodEZhY3RvciA9IDEyODsKKyAgICBjb25zdCBmbG9hdCBnZW9tRmFjdG9yID0gNjQ7CisKKyAgICBBbWJpZW50U2hhZG93OjpjcmVhdGVBbWJpZW50U2hhZG93KHBvbHlnb24sIHZlcnRleENvdW50LCByYXlzLCBsYXllcnMsIHN0cmVuZ3RoLAorICAgICAgICAgICAgaGVpZ2h0RmFjdG9yLCBnZW9tRmFjdG9yLCBzaGFkb3dWZXJ0ZXhCdWZmZXIpOworCit9CisKK3ZvaWQgU2hhZG93VGVzc2VsbGF0b3I6OnRlc3NlbGxhdGVTcG90U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsCisgICAgICAgIGNvbnN0IG1hdDQmIHJlY2VpdmVyVHJhbnNmb3JtLCBpbnQgc2NyZWVuV2lkdGgsIGludCBzY3JlZW5IZWlnaHQsCisgICAgICAgIGNvbnN0IG1hdDQmIGNhc3RlclRyYW5zZm9ybSwgVmVydGV4QnVmZmVyJiBzaGFkb3dWZXJ0ZXhCdWZmZXIpIHsKKyAgICBjb25zdCBpbnQgdmVydGV4Q291bnQgPSA0OworICAgIFZlY3RvcjMgcG9seWdvblt2ZXJ0ZXhDb3VudF07CisgICAgZ2VuZXJhdGVDYXN0ZXJQb2x5Z29uKHdpZHRoLCBoZWlnaHQsIGNhc3RlclRyYW5zZm9ybSwgdmVydGV4Q291bnQsIHBvbHlnb24pOworCisgICAgLy8gQSBidW5jaCBvZiBwYXJhbWV0ZXJzIHRvIHR3ZWFrIHRoZSBzaGFkb3cuCisgICAgLy8gVE9ETzogQWxsb3cgc29tZSBvZiB0aGVzZSBjaGFuZ2FibGUgYnkgZGVidWcgc2V0dGluZ3Mgb3IgQVBJcy4KKyAgICBjb25zdCBpbnQgcmF5cyA9IDI1NjsKKyAgICBjb25zdCBpbnQgbGF5ZXJzID0gMjsKKyAgICBjb25zdCBmbG9hdCBzdHJlbmd0aCA9IDAuNTsKKyAgICBpbnQgbWF4aW1hbCA9IG1heChzY3JlZW5XaWR0aCwgc2NyZWVuSGVpZ2h0KTsKKyAgICBWZWN0b3IzIGxpZ2h0Q2VudGVyKHNjcmVlbldpZHRoIC8gMiwgMCwgbWF4aW1hbCk7CisjaWYgREVCVUdfU0hBRE9XCisgICAgQUxPR0QoImxpZ2h0IGNlbnRlciAlZiAlZiAlZiIsIGxpZ2h0Q2VudGVyLngsIGxpZ2h0Q2VudGVyLnksIGxpZ2h0Q2VudGVyLnopOworI2VuZGlmCisKKyAgICAvLyBsaWdodCBwb3NpdGlvbiAoYmVjYXVzZSBpdCdzIGluIGxvY2FsIHNwYWNlKSBuZWVkcyB0byBjb21wZW5zYXRlIGZvciByZWNlaXZlciB0cmFuc2Zvcm0KKyAgICAvLyBUT0RPOiBzaG91bGQgYXBwbHkgdG8gbGlnaHQgb3JpZW50YXRpb24sIG5vdCBqdXN0IHBvc2l0aW9uCisgICAgTWF0cml4NCByZXZlcnNlUmVjZWl2ZXJUcmFuc2Zvcm07CisgICAgcmV2ZXJzZVJlY2VpdmVyVHJhbnNmb3JtLmxvYWRJbnZlcnNlKHJlY2VpdmVyVHJhbnNmb3JtKTsKKyAgICByZXZlcnNlUmVjZWl2ZXJUcmFuc2Zvcm0ubWFwUG9pbnQzZChsaWdodENlbnRlcik7CisKKyAgICBjb25zdCBmbG9hdCBsaWdodFNpemUgPSBtYXhpbWFsIC8gODsKKyAgICBjb25zdCBpbnQgbGlnaHRWZXJ0ZXhDb3VudCA9IDE2OworCisgICAgU3BvdFNoYWRvdzo6Y3JlYXRlU3BvdFNoYWRvdyhwb2x5Z29uLCB2ZXJ0ZXhDb3VudCwgbGlnaHRDZW50ZXIsIGxpZ2h0U2l6ZSwKKyAgICAgICAgICAgIGxpZ2h0VmVydGV4Q291bnQsIHJheXMsIGxheWVycywgc3RyZW5ndGgsIHNoYWRvd1ZlcnRleEJ1ZmZlcik7CisKK30KK307IC8vIG5hbWVzcGFjZSB1aXJlbmRlcmVyCit9OyAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1NoYWRvd1Rlc3NlbGxhdG9yLmggYi9saWJzL2h3dWkvU2hhZG93VGVzc2VsbGF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGFjOGMwCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL1NoYWRvd1Rlc3NlbGxhdG9yLmgKQEAgLTAsMCArMSw0NSBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX0hXVUlfU0hBRE9XX1RFU1NFTExBVE9SX0gKKyNkZWZpbmUgQU5EUk9JRF9IV1VJX1NIQURPV19URVNTRUxMQVRPUl9ICisKKyNpbmNsdWRlICJEZWJ1Zy5oIgorI2luY2x1ZGUgIk1hdHJpeC5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgdWlyZW5kZXJlciB7CisKK2NsYXNzIFNoYWRvd1Rlc3NlbGxhdG9yIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCB0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LAorICAgICAgICAgICAgY29uc3QgbWF0NCYgY2FzdGVyVHJhbnNmb3JtLCBWZXJ0ZXhCdWZmZXImIHNoYWRvd1ZlcnRleEJ1ZmZlcik7CisKKyAgICBzdGF0aWMgdm9pZCB0ZXNzZWxsYXRlU3BvdFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LAorICAgICAgICAgICAgY29uc3QgbWF0NCYgcmVjZWl2ZXJUcmFuc2Zvcm0sIGludCBzY3JlZW5XaWR0aCwgaW50IHNjcmVlbkhlaWdodCwKKyAgICAgICAgICAgIGNvbnN0IG1hdDQmIGNhc3RlclRyYW5zZm9ybSwgVmVydGV4QnVmZmVyJiBzaGFkb3dWZXJ0ZXhCdWZmZXIpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlQ2FzdGVyUG9seWdvbihmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LAorICAgICAgICAgICAgY29uc3QgbWF0NCYgY2FzdGVyVHJhbnNmb3JtLCBpbnQgdmVydGV4Q291bnQsIFZlY3RvcjMqIHBvbHlnb24pOworCit9OyAvLyBTaGFkb3dUZXNzZWxsYXRvcgorCit9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfSFdVSV9TSEFET1dfVEVTU0VMTEFUT1JfSApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1NraWFDb2xvckZpbHRlci5oIGIvbGlicy9od3VpL1NraWFDb2xvckZpbHRlci5oCmluZGV4IDJmZWI4MzQuLmMyMjJhMmQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9Ta2lhQ29sb3JGaWx0ZXIuaAorKysgYi9saWJzL2h3dWkvU2tpYUNvbG9yRmlsdGVyLmgKQEAgLTM2LDcgKzM2LDggQEAKICAqIFJlcHJlc2VudHMgYSBTa2lhIGNvbG9yIGZpbHRlci4gQSBjb2xvciBmaWx0ZXIgbW9kaWZpZXMgYSBQcm9ncmFtRGVzY3JpcHRpb24KICAqIGFuZCBzZXRzIHVuaWZvcm1zIG9uIHRoZSByZXN1bHRpbmcgc2hhZGVycy4KICAqLwotc3RydWN0IFNraWFDb2xvckZpbHRlciB7CitjbGFzcyBTa2lhQ29sb3JGaWx0ZXIgeworcHVibGljOgogICAgIC8qKgogICAgICAqIFR5cGUgb2YgU2tpYSBjb2xvciBmaWx0ZXIgaW4gdXNlLgogICAgICAqLwpAQCAtODAsNyArODEsOCBAQAogLyoqCiAgKiBBIGNvbG9yIGZpbHRlciB0aGF0IG11bHRpcGxpZXMgdGhlIHNvdXJjZSBjb2xvciB3aXRoIGEgbWF0cml4IGFuZCBhZGRzIGEgdmVjdG9yLgogICovCi1zdHJ1Y3QgU2tpYUNvbG9yTWF0cml4RmlsdGVyOiBwdWJsaWMgU2tpYUNvbG9yRmlsdGVyIHsKK2NsYXNzIFNraWFDb2xvck1hdHJpeEZpbHRlcjogcHVibGljIFNraWFDb2xvckZpbHRlciB7CitwdWJsaWM6CiAgICAgQU5EUk9JRF9BUEkgU2tpYUNvbG9yTWF0cml4RmlsdGVyKFNrQ29sb3JGaWx0ZXIgKnNrRmlsdGVyLCBmbG9hdCogbWF0cml4LCBmbG9hdCogdmVjdG9yKTsKICAgICB+U2tpYUNvbG9yTWF0cml4RmlsdGVyKCk7CiAKQEAgLTk2LDcgKzk4LDggQEAKICAqIEEgY29sb3IgZmlsdGVycyB0aGF0IG11bHRpcGxpZXMgdGhlIHNvdXJjZSBjb2xvciB3aXRoIGEgZml4ZWQgdmFsdWUgYW5kIGFkZHMKICAqIGFub3RoZXIgZml4ZWQgdmFsdWUuIElnbm9yZXMgdGhlIGFscGhhIGNoYW5uZWwgb2YgYm90aCBhcmd1bWVudHMuCiAgKi8KLXN0cnVjdCBTa2lhTGlnaHRpbmdGaWx0ZXI6IHB1YmxpYyBTa2lhQ29sb3JGaWx0ZXIgeworY2xhc3MgU2tpYUxpZ2h0aW5nRmlsdGVyOiBwdWJsaWMgU2tpYUNvbG9yRmlsdGVyIHsKK3B1YmxpYzoKICAgICBBTkRST0lEX0FQSSBTa2lhTGlnaHRpbmdGaWx0ZXIoU2tDb2xvckZpbHRlciAqc2tGaWx0ZXIsIGludCBtdWx0aXBseSwgaW50IGFkZCk7CiAKICAgICB2b2lkIGRlc2NyaWJlKFByb2dyYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMpOwpAQCAtMTExLDcgKzExNCw4IEBACiAgKiBBIGNvbG9yIGZpbHRlcnMgdGhhdCBibGVuZHMgdGhlIHNvdXJjZSBjb2xvciB3aXRoIGEgc3BlY2lmaWVkIGRlc3RpbmF0aW9uIGNvbG9yCiAgKiBhbmQgUG9ydGVyRHVmZiBibGVuZGluZyBtb2RlLgogICovCi1zdHJ1Y3QgU2tpYUJsZW5kRmlsdGVyOiBwdWJsaWMgU2tpYUNvbG9yRmlsdGVyIHsKK2NsYXNzIFNraWFCbGVuZEZpbHRlcjogcHVibGljIFNraWFDb2xvckZpbHRlciB7CitwdWJsaWM6CiAgICAgQU5EUk9JRF9BUEkgU2tpYUJsZW5kRmlsdGVyKFNrQ29sb3JGaWx0ZXIgKnNrRmlsdGVyLCBpbnQgY29sb3IsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSk7CiAKICAgICB2b2lkIGRlc2NyaWJlKFByb2dyYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1NraWFTaGFkZXIuY3BwIGIvbGlicy9od3VpL1NraWFTaGFkZXIuY3BwCmluZGV4IDc5N2VkMTAuLjRmMmE0MzIgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9Ta2lhU2hhZGVyLmNwcAorKysgYi9saWJzL2h3dWkvU2tpYVNoYWRlci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQAogfQogCiB2b2lkIFNraWFCaXRtYXBTaGFkZXI6OnNldHVwUHJvZ3JhbShQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBtYXQ0JiBtb2RlbFZpZXcsCi0gICAgICAgIGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCwgR0x1aW50KiB0ZXh0dXJlVW5pdCkgeworICAgICAgICBjb25zdCBTbmFwc2hvdCYsIEdMdWludCogdGV4dHVyZVVuaXQpIHsKICAgICBHTHVpbnQgdGV4dHVyZVNsb3QgPSAoKnRleHR1cmVVbml0KSsrOwogICAgIENhY2hlczo6Z2V0SW5zdGFuY2UoKS5hY3RpdmVUZXh0dXJlKHRleHR1cmVTbG90KTsKIApAQCAtMjI4LDcgKzIyOCw3IEBACiB9CiAKIHZvaWQgU2tpYUxpbmVhckdyYWRpZW50U2hhZGVyOjpzZXR1cFByb2dyYW0oUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgbWF0NCYgbW9kZWxWaWV3LAotICAgICAgICBjb25zdCBTbmFwc2hvdCYgc25hcHNob3QsIEdMdWludCogdGV4dHVyZVVuaXQpIHsKKyAgICAgICAgY29uc3QgU25hcHNob3QmLCBHTHVpbnQqIHRleHR1cmVVbml0KSB7CiAgICAgaWYgKENDX1VOTElLRUxZKCFtSXNTaW1wbGUpKSB7CiAgICAgICAgIEdMdWludCB0ZXh0dXJlU2xvdCA9ICgqdGV4dHVyZVVuaXQpKys7CiAgICAgICAgIENhY2hlczo6Z2V0SW5zdGFuY2UoKS5hY3RpdmVUZXh0dXJlKHRleHR1cmVTbG90KTsKQEAgLTI2NCw3ICsyNjQsNyBAQAogU2tpYUNpcmN1bGFyR3JhZGllbnRTaGFkZXI6OlNraWFDaXJjdWxhckdyYWRpZW50U2hhZGVyKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywKICAgICAgICAgdWludDMyX3QqIGNvbG9ycywgZmxvYXQqIHBvc2l0aW9ucywgaW50IGNvdW50LCBTa1NoYWRlcioga2V5LCBTa1NoYWRlcjo6VGlsZU1vZGUgdGlsZU1vZGUsCiAgICAgICAgIFNrTWF0cml4KiBtYXRyaXgsIGJvb2wgYmxlbmQpOgotICAgICAgICBTa2lhU3dlZXBHcmFkaWVudFNoYWRlcihrQ2lyY3VsYXJHcmFkaWVudCwgeCwgeSwgY29sb3JzLCBwb3NpdGlvbnMsIGNvdW50LCBrZXksCisgICAgICAgIFNraWFTd2VlcEdyYWRpZW50U2hhZGVyKGtDaXJjdWxhckdyYWRpZW50LCBjb2xvcnMsIHBvc2l0aW9ucywgY291bnQsIGtleSwKICAgICAgICAgICAgICAgICB0aWxlTW9kZSwgbWF0cml4LCBibGVuZCkgewogICAgIFNrTWF0cml4IHVuaXRNYXRyaXg7CiAgICAgdG9DaXJjdWxhclVuaXRNYXRyaXgoeCwgeSwgcmFkaXVzLCAmdW5pdE1hdHJpeCk7CkBAIC0zMTQsMTEgKzMxNCwxMiBAQAogICAgIG1Jc1NpbXBsZSA9IGNvdW50ID09IDI7CiB9CiAKLVNraWFTd2VlcEdyYWRpZW50U2hhZGVyOjpTa2lhU3dlZXBHcmFkaWVudFNoYWRlcihUeXBlIHR5cGUsIGZsb2F0IHgsIGZsb2F0IHksIHVpbnQzMl90KiBjb2xvcnMsCitTa2lhU3dlZXBHcmFkaWVudFNoYWRlcjo6U2tpYVN3ZWVwR3JhZGllbnRTaGFkZXIoVHlwZSB0eXBlLCB1aW50MzJfdCogY29sb3JzLAogICAgICAgICBmbG9hdCogcG9zaXRpb25zLCBpbnQgY291bnQsIFNrU2hhZGVyKiBrZXksIFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlTW9kZSwKICAgICAgICAgU2tNYXRyaXgqIG1hdHJpeCwgYm9vbCBibGVuZCk6CiAgICAgICAgIFNraWFTaGFkZXIodHlwZSwga2V5LCB0aWxlTW9kZSwgdGlsZU1vZGUsIG1hdHJpeCwgYmxlbmQpLAogICAgICAgICBtQ29sb3JzKGNvbG9ycyksIG1Qb3NpdGlvbnMocG9zaXRpb25zKSwgbUNvdW50KGNvdW50KSB7CisgICAgLy8gcHJvdGVjdGVkIG1ldGhvZCwgdGhhdCBkb2Vzbid0IHNldHVwIG1Vbml0TWF0cml4IC0gc2hvdWxkIGJlIGhhbmRsZWQgYnkgc3ViY2xhc3MKIAogICAgIG1Jc1NpbXBsZSA9IGNvdW50ID09IDIgJiYgdGlsZU1vZGUgPT0gU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZTsKIH0KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9Ta2lhU2hhZGVyLmggYi9saWJzL2h3dWkvU2tpYVNoYWRlci5oCmluZGV4IGNjNTZjNTAuLjYwMTU3NjEgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9Ta2lhU2hhZGVyLmgKKysrIGIvbGlicy9od3VpL1NraWFTaGFkZXIuaApAQCAtNDMsNyArNDMsOCBAQAogICogUmVwcmVzZW50cyBhIFNraWEgc2hhZGVyLiBBIHNoYWRlciB3aWxsIG1vZGlmeSB0aGUgR0wgY29udGV4dCBhbmQgYWN0aXZlCiAgKiBwcm9ncmFtIHRvIHJlY3JlYXRlIHRoZSBvcmlnaW5hbCBlZmZlY3QuCiAgKi8KLXN0cnVjdCBTa2lhU2hhZGVyIHsKK2NsYXNzIFNraWFTaGFkZXIgeworcHVibGljOgogICAgIC8qKgogICAgICAqIFR5cGUgb2YgU2tpYSBzaGFkZXIgaW4gdXNlLgogICAgICAqLwpAQCAtMTkyLDcgKzE5Myw3IEBACiAgICAgICAgICAgICBHTHVpbnQqIHRleHR1cmVVbml0KTsKIAogcHJvdGVjdGVkOgotICAgIFNraWFTd2VlcEdyYWRpZW50U2hhZGVyKFR5cGUgdHlwZSwgZmxvYXQgeCwgZmxvYXQgeSwgdWludDMyX3QqIGNvbG9ycywgZmxvYXQqIHBvc2l0aW9ucywKKyAgICBTa2lhU3dlZXBHcmFkaWVudFNoYWRlcihUeXBlIHR5cGUsIHVpbnQzMl90KiBjb2xvcnMsIGZsb2F0KiBwb3NpdGlvbnMsCiAgICAgICAgICAgICBpbnQgY291bnQsIFNrU2hhZGVyKiBrZXksIFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlTW9kZSwgU2tNYXRyaXgqIG1hdHJpeCwgYm9vbCBibGVuZCk7CiAgICAgU2tpYVN3ZWVwR3JhZGllbnRTaGFkZXIoKSB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1NuYXBzaG90LmNwcCBiL2xpYnMvaHd1aS9TbmFwc2hvdC5jcHAKaW5kZXggZDI2ZWUzOC4uYTZlYzE4MyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1NuYXBzaG90LmNwcAorKysgYi9saWJzL2h3dWkvU25hcHNob3QuY3BwCkBAIC03MCw2ICs3MCwxMCBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIHJlZ2lvbiA9IE5VTEw7CiAgICAgfQorCisgICAgaWYgKHNhdmVGbGFncyAmIFNuYXBzaG90OjprRmxhZ1Byb2plY3Rpb25UYXJnZXQpIHsKKyAgICAgICAgZmxhZ3MgfD0gU25hcHNob3Q6OmtGbGFnUHJvamVjdGlvblRhcmdldDsKKyAgICB9CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9TbmFwc2hvdC5oIGIvbGlicy9od3VpL1NuYXBzaG90LmgKaW5kZXggY2M2ZDBjZC4uZDYxZDk3MiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1NuYXBzaG90LmgKKysrIGIvbGlicy9od3VpL1NuYXBzaG90LmgKQEAgLTc1LDcgKzc1LDEzIEBACiAgICAgICAgICAqIEluZGljYXRlcyB0aGF0IHRoaXMgc25hcHNob3Qgb3IgYW4gYW5jZXN0b3Igc25hcHNob3QgaXMKICAgICAgICAgICogYW4gRkJPIGxheWVyLgogICAgICAgICAgKi8KLSAgICAgICAga0ZsYWdGYm9UYXJnZXQgPSAweDEwCisgICAgICAgIGtGbGFnRmJvVGFyZ2V0ID0gMHgxMCwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzYXZlL3Jlc3RvcmUgcGFpciBlbmNhcHN1bGF0ZXMgYQorICAgICAgICAgKiBwcm9qZWN0aW9uIHRhcmdldCwgYW5kIHRoYXQgYWZ0ZXIgdGhlIHJlc3RvcmUgYW55IHByb2plY3RlZAorICAgICAgICAgKiBkZXNjZW5kZW50cyBzaG91bGQgYmUgZHJhd24uCisgICAgICAgICAqLworICAgICAgICBrRmxhZ1Byb2plY3Rpb25UYXJnZXQgPSAweDIwCiAgICAgfTsKIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1Nwb3RTaGFkb3cuY3BwIGIvbGlicy9od3VpL1Nwb3RTaGFkb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNDg5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvU3BvdFNoYWRvdy5jcHAKQEAgLTAsMCArMSw4MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgIk9wZW5HTFJlbmRlcmVyIgorCisjZGVmaW5lIFNIQURPV19TSFJJTktfU0NBTEUgMC4xZgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSAiU3BvdFNoYWRvdy5oIgorI2luY2x1ZGUgIlZlcnRleC5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgdWlyZW5kZXJlciB7CisKKy8qKgorICogQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gb2YgYSByYXkgd2l0aCBhIHBvbHlnb24uCisgKiBJdCBhc3N1bWVzIHRoZSByYXkgb3JpZ2luYXRlcyBpbnNpZGUgdGhlIHBvbHlnb24uCisgKgorICogQHBhcmFtIHBvbHkgVGhlIHBvbHlnb24sIHdoaWNoIGlzIHJlcHJlc2VudGVkIGluIGEgVmVjdG9yMiBhcnJheS4KKyAqIEBwYXJhbSBwb2x5TGVuZ3RoIFRoZSBsZW5ndGggb2YgY2FzdGVyJ3MgcG9seWdvbiBpbiB0ZXJtcyBvZiBudW1iZXIgb2YKKyAqICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzLgorICogQHBhcmFtIHBvaW50IHRoZSBzdGFydCBvZiB0aGUgcmF5CisgKiBAcGFyYW0gZHggdGhlIHggdmVjdG9yIG9mIHRoZSByYXkKKyAqIEBwYXJhbSBkeSB0aGUgeSB2ZWN0b3Igb2YgdGhlIHJheQorICogQHJldHVybiB0aGUgZGlzdGFuY2UgYWxvbmcgdGhlIHJheSBpZiBpdCBpbnRlcnNlY3RzIHdpdGggdGhlIHBvbHlnb24gRlBfTkFOIGlmIG90aGVyd2lzZQorICovCitmbG9hdCBTcG90U2hhZG93OjpyYXlJbnRlcnNlY3RQb2x5KGNvbnN0IFZlY3RvcjIqIHBvbHksIGludCBwb2x5TGVuZ3RoLAorICAgICAgICBjb25zdCBWZWN0b3IyJiBwb2ludCwgZmxvYXQgZHgsIGZsb2F0IGR5KSB7CisgICAgZG91YmxlIHB4ID0gcG9pbnQueDsKKyAgICBkb3VibGUgcHkgPSBwb2ludC55OworICAgIGludCBwMSA9IHBvbHlMZW5ndGggLSAxOworICAgIGZvciAoaW50IHAyID0gMDsgcDIgPCBwb2x5TGVuZ3RoOyBwMisrKSB7CisgICAgICAgIGRvdWJsZSBwMXggPSBwb2x5W3AxXS54OworICAgICAgICBkb3VibGUgcDF5ID0gcG9seVtwMV0ueTsKKyAgICAgICAgZG91YmxlIHAyeCA9IHBvbHlbcDJdLng7CisgICAgICAgIGRvdWJsZSBwMnkgPSBwb2x5W3AyXS55OworICAgICAgICAvLyBUaGUgbWF0aCBiZWxvdyBpcyBkZXJpdmVkIGZyb20gc29sdmluZyB0aGlzIGZvcm11bGEsIGJhc2ljYWxseSB0aGUKKyAgICAgICAgLy8gaW50ZXJzZWN0aW9uIHBvaW50IHNob3VsZCBzdGF5IG9uIGJvdGggdGhlIHJheSBhbmQgdGhlIGVkZ2Ugb2YgKHAxLCBwMikuCisgICAgICAgIC8vIHNvbHZlKFtwMXgrdCoocDJ4LXAxeCk9ZHgqdDIrcHgscDF5K3QqKHAyeS1wMXkpPWR5KnQyK3B5XSxbdCx0Ml0pOworICAgICAgICBkb3VibGUgZGl2ID0gKGR4ICogKHAxeSAtIHAyeSkgKyBkeSAqIHAyeCAtIGR5ICogcDF4KTsKKyAgICAgICAgaWYgKGRpdiAhPSAwKSB7CisgICAgICAgICAgICBkb3VibGUgdCA9IChkeCAqIChwMXkgLSBweSkgKyBkeSAqIHB4IC0gZHkgKiBwMXgpIC8gKGRpdik7CisgICAgICAgICAgICBpZiAodCA+PSAwICYmIHQgPD0gMSkgeworICAgICAgICAgICAgICAgIGRvdWJsZSB0MiA9IChwMXggKiAocHkgLSBwMnkpICsgcDJ4ICogKHAxeSAtIHB5KSArCisgICAgICAgICAgICAgICAgICAgICAgICBweCAqIChwMnkgLSBwMXkpKSAvIGRpdjsKKyAgICAgICAgICAgICAgICBpZiAodDIgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZmxvYXQpdDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHAxID0gcDI7CisgICAgfQorICAgIHJldHVybiBGUF9OQU47Cit9CisKKy8qKgorICogQ2FsY3VsYXRlIHRoZSBjZW50cm9pZCBvZiBhIDJkIHBvbHlnb24uCisgKgorICogQHBhcmFtIHBvbHkgVGhlIHBvbHlnb24sIHdoaWNoIGlzIHJlcHJlc2VudGVkIGluIGEgVmVjdG9yMiBhcnJheS4KKyAqIEBwYXJhbSBwb2x5TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHBvbHlnb24gaW4gdGVybXMgb2YgbnVtYmVyIG9mIHZlcnRpY2VzLgorICogQHJldHVybiB0aGUgY2VudHJvaWQgb2YgdGhlIHBvbHlnb24uCisgKi8KK1ZlY3RvcjIgU3BvdFNoYWRvdzo6Y2VudHJvaWQyZChjb25zdCBWZWN0b3IyKiBwb2x5LCBpbnQgcG9seUxlbmd0aCkgeworICAgIGRvdWJsZSBzdW14ID0gMDsKKyAgICBkb3VibGUgc3VteSA9IDA7CisgICAgaW50IHAxID0gcG9seUxlbmd0aCAtIDE7CisgICAgZG91YmxlIGFyZWEgPSAwOworICAgIGZvciAoaW50IHAyID0gMDsgcDIgPCBwb2x5TGVuZ3RoOyBwMisrKSB7CisgICAgICAgIGRvdWJsZSB4MSA9IHBvbHlbcDFdLng7CisgICAgICAgIGRvdWJsZSB5MSA9IHBvbHlbcDFdLnk7CisgICAgICAgIGRvdWJsZSB4MiA9IHBvbHlbcDJdLng7CisgICAgICAgIGRvdWJsZSB5MiA9IHBvbHlbcDJdLnk7CisgICAgICAgIGRvdWJsZSBhID0gKHgxICogeTIgLSB4MiAqIHkxKTsKKyAgICAgICAgc3VteCArPSAoeDEgKyB4MikgKiBhOworICAgICAgICBzdW15ICs9ICh5MSArIHkyKSAqIGE7CisgICAgICAgIGFyZWEgKz0gYTsKKyAgICAgICAgcDEgPSBwMjsKKyAgICB9CisKKyAgICBkb3VibGUgY2VudHJvaWR4ID0gc3VteCAvICgzICogYXJlYSk7CisgICAgZG91YmxlIGNlbnRyb2lkeSA9IHN1bXkgLyAoMyAqIGFyZWEpOworICAgIHJldHVybiBWZWN0b3IyKChmbG9hdCljZW50cm9pZHgsIChmbG9hdCljZW50cm9pZHkpOworfQorCisvKioKKyAqIFNvcnQgcG9pbnRzIGJ5IHRoZWlyIFggY29vcmRpbmF0ZXMKKyAqCisgKiBAcGFyYW0gcG9pbnRzIHRoZSBwb2ludHMgYXMgYSBWZWN0b3IyIGFycmF5LgorICogQHBhcmFtIHBvaW50c0xlbmd0aCB0aGUgbnVtYmVyIG9mIHZlcnRpY2VzIG9mIHRoZSBwb2x5Z29uLgorICovCit2b2lkIFNwb3RTaGFkb3c6Onhzb3J0KFZlY3RvcjIqIHBvaW50cywgaW50IHBvaW50c0xlbmd0aCkgeworICAgIHF1aWNrc29ydFgocG9pbnRzLCAwLCBwb2ludHNMZW5ndGggLSAxKTsKK30KKworLyoqCisgKiBjb21wdXRlIHRoZSBjb252ZXggaHVsbCBvZiBhIGNvbGxlY3Rpb24gb2YgUG9pbnRzCisgKgorICogQHBhcmFtIHBvaW50cyB0aGUgcG9pbnRzIGFzIGEgVmVjdG9yMiBhcnJheS4KKyAqIEBwYXJhbSBwb2ludHNMZW5ndGggdGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBvZiB0aGUgcG9seWdvbi4KKyAqIEBwYXJhbSByZXRQb2x5IHByZSBhbGxvY2F0ZWQgYXJyYXkgb2YgZmxvYXRzIHRvIHB1dCB0aGUgdmVydGljZXMKKyAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIHBvbHlnb24gMCBpZiBubyBpbnRlcnNlY3Rpb24KKyAqLworaW50IFNwb3RTaGFkb3c6Omh1bGwoVmVjdG9yMiogcG9pbnRzLCBpbnQgcG9pbnRzTGVuZ3RoLCBWZWN0b3IyKiByZXRQb2x5KSB7CisgICAgeHNvcnQocG9pbnRzLCBwb2ludHNMZW5ndGgpOworICAgIGludCBuID0gcG9pbnRzTGVuZ3RoOworICAgIFZlY3RvcjIgbFVwcGVyW25dOworICAgIGxVcHBlclswXSA9IHBvaW50c1swXTsKKyAgICBsVXBwZXJbMV0gPSBwb2ludHNbMV07CisKKyAgICBpbnQgbFVwcGVyU2l6ZSA9IDI7CisKKyAgICBmb3IgKGludCBpID0gMjsgaSA8IG47IGkrKykgeworICAgICAgICBsVXBwZXJbbFVwcGVyU2l6ZV0gPSBwb2ludHNbaV07CisgICAgICAgIGxVcHBlclNpemUrKzsKKworICAgICAgICB3aGlsZSAobFVwcGVyU2l6ZSA+IDIgJiYgIXJpZ2h0VHVybigKKyAgICAgICAgICAgICAgICAoZG91YmxlKWxVcHBlcltsVXBwZXJTaXplIC0gM10ueCwgKGRvdWJsZSlsVXBwZXJbbFVwcGVyU2l6ZSAtIDNdLnksCisgICAgICAgICAgICAgICAgKGRvdWJsZSlsVXBwZXJbbFVwcGVyU2l6ZSAtIDJdLngsIChkb3VibGUpbFVwcGVyW2xVcHBlclNpemUgLSAyXS55LAorICAgICAgICAgICAgICAgIChkb3VibGUpbFVwcGVyW2xVcHBlclNpemUgLSAxXS54LCAoZG91YmxlKWxVcHBlcltsVXBwZXJTaXplIC0gMV0ueSkpIHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgbWlkZGxlIHBvaW50IG9mIHRoZSB0aHJlZSBsYXN0CisgICAgICAgICAgICBsVXBwZXJbbFVwcGVyU2l6ZSAtIDJdLnggPSBsVXBwZXJbbFVwcGVyU2l6ZSAtIDFdLng7CisgICAgICAgICAgICBsVXBwZXJbbFVwcGVyU2l6ZSAtIDJdLnkgPSBsVXBwZXJbbFVwcGVyU2l6ZSAtIDFdLnk7CisgICAgICAgICAgICBsVXBwZXJTaXplLS07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZWN0b3IyIGxMb3dlcltuXTsKKyAgICBsTG93ZXJbMF0gPSBwb2ludHNbbiAtIDFdOworICAgIGxMb3dlclsxXSA9IHBvaW50c1tuIC0gMl07CisKKyAgICBpbnQgbExvd2VyU2l6ZSA9IDI7CisKKyAgICBmb3IgKGludCBpID0gbiAtIDM7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIGxMb3dlcltsTG93ZXJTaXplXSA9IHBvaW50c1tpXTsKKyAgICAgICAgbExvd2VyU2l6ZSsrOworCisgICAgICAgIHdoaWxlIChsTG93ZXJTaXplID4gMiAmJiAhcmlnaHRUdXJuKAorICAgICAgICAgICAgICAgIChkb3VibGUpbExvd2VyW2xMb3dlclNpemUgLSAzXS54LCAoZG91YmxlKWxMb3dlcltsTG93ZXJTaXplIC0gM10ueSwKKyAgICAgICAgICAgICAgICAoZG91YmxlKWxMb3dlcltsTG93ZXJTaXplIC0gMl0ueCwgKGRvdWJsZSlsTG93ZXJbbExvd2VyU2l6ZSAtIDJdLnksCisgICAgICAgICAgICAgICAgKGRvdWJsZSlsTG93ZXJbbExvd2VyU2l6ZSAtIDFdLngsIChkb3VibGUpbExvd2VyW2xMb3dlclNpemUgLSAxXS55KSkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBtaWRkbGUgcG9pbnQgb2YgdGhlIHRocmVlIGxhc3QKKyAgICAgICAgICAgIGxMb3dlcltsTG93ZXJTaXplIC0gMl0gPSBsTG93ZXJbbExvd2VyU2l6ZSAtIDFdOworICAgICAgICAgICAgbExvd2VyU2l6ZS0tOworICAgICAgICB9CisgICAgfQorICAgIGludCBjb3VudCA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxVcHBlclNpemU7IGkrKykgeworICAgICAgICByZXRQb2x5W2NvdW50XSA9IGxVcHBlcltpXTsKKyAgICAgICAgY291bnQrKzsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IGxMb3dlclNpemUgLSAxOyBpKyspIHsKKyAgICAgICAgcmV0UG9seVtjb3VudF0gPSBsTG93ZXJbaV07CisgICAgICAgIGNvdW50Kys7CisgICAgfQorICAgIC8vIFRPRE86IEFkZCB0ZXN0IGhhcm5lc3Mgd2hpY2ggdmVyaWZ5IHRoYXQgYWxsIHRoZSBwb2ludHMgYXJlIGluc2lkZSB0aGUgaHVsbC4KKyAgICByZXR1cm4gY291bnQ7Cit9CisKKy8qKgorICogVGVzdCB3aGV0aGVyIHRoZSAzIHBvaW50cyBmb3JtIGEgcmlnaHQgaGFuZCB0dXJuCisgKgorICogQHBhcmFtIGF4IHRoZSB4IGNvb3JkaW5hdGUgb2YgcG9pbnQgYQorICogQHBhcmFtIGF5IHRoZSB5IGNvb3JkaW5hdGUgb2YgcG9pbnQgYQorICogQHBhcmFtIGJ4IHRoZSB4IGNvb3JkaW5hdGUgb2YgcG9pbnQgYgorICogQHBhcmFtIGJ5IHRoZSB5IGNvb3JkaW5hdGUgb2YgcG9pbnQgYgorICogQHBhcmFtIGN4IHRoZSB4IGNvb3JkaW5hdGUgb2YgcG9pbnQgYworICogQHBhcmFtIGN5IHRoZSB5IGNvb3JkaW5hdGUgb2YgcG9pbnQgYworICogQHJldHVybiB0cnVlIGlmIGEgcmlnaHQgaGFuZCB0dXJuCisgKi8KK2Jvb2wgU3BvdFNoYWRvdzo6cmlnaHRUdXJuKGRvdWJsZSBheCwgZG91YmxlIGF5LCBkb3VibGUgYngsIGRvdWJsZSBieSwKKyAgICAgICAgZG91YmxlIGN4LCBkb3VibGUgY3kpIHsKKyAgICByZXR1cm4gKGJ4IC0gYXgpICogKGN5IC0gYXkpIC0gKGJ5IC0gYXkpICogKGN4IC0gYXgpID4gRVBTSUxPTjsKK30KKworLyoqCisgKiBDYWxjdWxhdGVzIHRoZSBpbnRlcnNlY3Rpb24gb2YgcG9seTEgd2l0aCBwb2x5MiBhbmQgcHV0IGluIHBvbHkyLgorICoKKyAqCisgKiBAcGFyYW0gcG9seTEgVGhlIDFzdCBwb2x5Z29uLCBhcyBhIFZlY3RvcjIgYXJyYXkuCisgKiBAcGFyYW0gcG9seTFMZW5ndGggVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBvZiAxc3QgcG9seWdvbi4KKyAqIEBwYXJhbSBwb2x5MiBUaGUgMm5kIGFuZCBvdXRwdXQgcG9seWdvbiwgYXMgYSBWZWN0b3IyIGFycmF5LgorICogQHBhcmFtIHBvbHkyTGVuZ3RoIFRoZSBudW1iZXIgb2YgdmVydGljZXMgb2YgMm5kIHBvbHlnb24uCisgKiBAcmV0dXJuIG51bWJlciBvZiB2ZXJ0aWNlcyBpbiBvdXRwdXQgcG9seWdvbiBhcyBwb2x5Mi4KKyAqLworaW50IFNwb3RTaGFkb3c6OmludGVyc2VjdGlvbihWZWN0b3IyKiBwb2x5MSwgaW50IHBvbHkxTGVuZ3RoLAorICAgICAgICBWZWN0b3IyKiBwb2x5MiwgaW50IHBvbHkyTGVuZ3RoKSB7CisgICAgbWFrZUNsb2Nrd2lzZShwb2x5MSwgcG9seTFMZW5ndGgpOworICAgIG1ha2VDbG9ja3dpc2UocG9seTIsIHBvbHkyTGVuZ3RoKTsKKyAgICBWZWN0b3IyIHBvbHlbcG9seTFMZW5ndGggKiBwb2x5Mkxlbmd0aCArIDJdOworICAgIGludCBjb3VudCA9IDA7CisgICAgaW50IHBjb3VudCA9IDA7CisKKyAgICAvLyBJZiBvbmUgdmVydGV4IGZyb20gb25lIHBvbHlnb24gc2l0cyBpbnNpZGUgYW5vdGhlciBwb2x5Z29uLCBhZGQgaXQgYW5kCisgICAgLy8gY291bnQgdGhlbS4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvbHkxTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHRlc3RQb2ludEluc2lkZVBvbHlnb24ocG9seTFbaV0sIHBvbHkyLCBwb2x5Mkxlbmd0aCkpIHsKKyAgICAgICAgICAgIHBvbHlbY291bnRdID0gcG9seTFbaV07CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgcGNvdW50Kys7CisKKyAgICAgICAgfQorICAgIH0KKworICAgIGludCBpbnNpZGVQb2x5MiA9IHBjb3VudDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvbHkyTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHRlc3RQb2ludEluc2lkZVBvbHlnb24ocG9seTJbaV0sIHBvbHkxLCBwb2x5MUxlbmd0aCkpIHsKKyAgICAgICAgICAgIHBvbHlbY291bnRdID0gcG9seTJbaV07CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgaW50IGluc2lkZVBvbHkxID0gY291bnQgLSBpbnNpZGVQb2x5MjsKKyAgICAvLyBJZiBhbGwgdmVydGljZXMgZnJvbSBwb2x5MSBhcmUgaW5zaWRlIHBvbHkyLCB0aGVuIGp1c3QgcmV0dXJuIHBvbHkxLgorICAgIGlmIChpbnNpZGVQb2x5MiA9PSBwb2x5MUxlbmd0aCkgeworICAgICAgICBtZW1jcHkocG9seTIsIHBvbHkxLCBwb2x5MUxlbmd0aCAqIHNpemVvZihWZWN0b3IyKSk7CisgICAgICAgIHJldHVybiBwb2x5MUxlbmd0aDsKKyAgICB9CisKKyAgICAvLyBJZiBhbGwgdmVydGljZXMgZnJvbSBwb2x5MiBhcmUgaW5zaWRlIHBvbHkxLCB0aGVuIGp1c3QgcmV0dXJuIHBvbHkyLgorICAgIGlmIChpbnNpZGVQb2x5MSA9PSBwb2x5Mkxlbmd0aCkgeworICAgICAgICByZXR1cm4gcG9seTJMZW5ndGg7CisgICAgfQorCisgICAgLy8gU2luY2UgbmVpdGhlciBwb2x5Z29uIGZ1bGx5IGNvbnRhaW4gdGhlIG90aGVyIG9uZSwgd2UgbmVlZCB0byBhZGQgYWxsIHRoZQorICAgIC8vIGludGVyc2VjdGlvbiBwb2ludHMuCisgICAgVmVjdG9yMiBpbnRlcnNlY3Rpb247CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb2x5Mkxlbmd0aDsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcG9seTFMZW5ndGg7IGorKykgeworICAgICAgICAgICAgaW50IHBvbHkyTGluZVN0YXJ0ID0gaTsKKyAgICAgICAgICAgIGludCBwb2x5MkxpbmVFbmQgPSAoKGkgKyAxKSAlIHBvbHkyTGVuZ3RoKTsKKyAgICAgICAgICAgIGludCBwb2x5MUxpbmVTdGFydCA9IGo7CisgICAgICAgICAgICBpbnQgcG9seTFMaW5lRW5kID0gKChqICsgMSkgJSBwb2x5MUxlbmd0aCk7CisgICAgICAgICAgICBib29sIGZvdW5kID0gbGluZUludGVyc2VjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgcG9seTJbcG9seTJMaW5lU3RhcnRdLngsIHBvbHkyW3BvbHkyTGluZVN0YXJ0XS55LAorICAgICAgICAgICAgICAgICAgICBwb2x5Mltwb2x5MkxpbmVFbmRdLngsIHBvbHkyW3BvbHkyTGluZUVuZF0ueSwKKyAgICAgICAgICAgICAgICAgICAgcG9seTFbcG9seTFMaW5lU3RhcnRdLngsIHBvbHkxW3BvbHkxTGluZVN0YXJ0XS55LAorICAgICAgICAgICAgICAgICAgICBwb2x5MVtwb2x5MUxpbmVFbmRdLngsIHBvbHkxW3BvbHkxTGluZUVuZF0ueSwKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAgICAgICAgIHBvbHlbY291bnRdLnggPSBpbnRlcnNlY3Rpb24ueDsKKyAgICAgICAgICAgICAgICBwb2x5W2NvdW50XS55ID0gaW50ZXJzZWN0aW9uLnk7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgVmVjdG9yMiBkZWx0YSA9IHBvbHkyW2ldIC0gcG9seTFbal07CisgICAgICAgICAgICAgICAgaWYgKGRlbHRhLmxlbmd0aFNxdWFyZWQoKSA8IDAuMDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9seVtjb3VudF0gPSBwb2x5MltpXTsKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBTb3J0IHRoZSByZXN1bHQgcG9seWdvbiBhcm91bmQgdGhlIGNlbnRlci4KKyAgICBWZWN0b3IyIGNlbnRlcigwLjBmLCAwLjBmKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgY2VudGVyICs9IHBvbHlbaV07CisgICAgfQorICAgIGNlbnRlciAvPSBjb3VudDsKKyAgICBzb3J0KHBvbHksIGNvdW50LCBjZW50ZXIpOworCisgICAgLy8gVE9ETzogVmVyaWZ5IHRoZSBpbnRlcnNlY3Rpb24gd29ya3MgY29ycmVjdGx5LCBsaWtlIGFueSByYW5kb20gcG9pbnQKKyAgICAvLyBpbnNpZGUgYm90aCBwb2x5MSBhbmQgcG9seTIgc2hvdWxkIGJlIGluc2lkZSB0aGUgaW50ZXJzZWN0aW9uLCBhbmQgdGhlCisgICAgLy8gcmVzdWx0IGludGVyc2VjdGlvbiBwb2x5Z29uIGlzIGNvbnZleC4KKworICAgIC8vIE1lcmdlIHRoZSB2ZXJ0aWNlcyBpZiB0aGV5IGFyZSB0b28gY2xvc2UuCisgICAgcG9seTJbMF0gPSBwb2x5WzBdOworICAgIGludCByZXN1bHRMZW5ndGggPSAxOworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBWZWN0b3IyIGRlbHRhID0gcG9seVtpXSAtIHBvbHlbaSAtIDFdOworICAgICAgICBpZiAoZGVsdGEubGVuZ3RoU3F1YXJlZCgpID49IDAuMDEpIHsKKyAgICAgICAgICAgIHBvbHkyW3Jlc3VsdExlbmd0aF0gPSBwb2x5W2ldOworICAgICAgICAgICAgcmVzdWx0TGVuZ3RoKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0TGVuZ3RoOworfQorCisvKioKKyAqIFNvcnQgcG9pbnRzIGFib3V0IGEgY2VudGVyIHBvaW50CisgKgorICogQHBhcmFtIHBvbHkgVGhlIGluIGFuZCBvdXQgcG9seW9nb24gYXMgYSBWZWN0b3IyIGFycmF5LgorICogQHBhcmFtIHBvbHlMZW5ndGggVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBvZiB0aGUgcG9seWdvbi4KKyAqIEBwYXJhbSBjZW50ZXIgdGhlIGNlbnRlciBjdHJbMF0gPSB4ICwgY3RyWzFdID0geSB0byBzb3J0IGFyb3VuZC4KKyAqLwordm9pZCBTcG90U2hhZG93Ojpzb3J0KFZlY3RvcjIqIHBvbHksIGludCBwb2x5TGVuZ3RoLCBjb25zdCBWZWN0b3IyJiBjZW50ZXIpIHsKKyAgICBxdWlja3NvcnRDaXJjKHBvbHksIDAsIHBvbHlMZW5ndGggLSAxLCBjZW50ZXIpOworfQorCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiBhbmQgeCBhbmQgYSB5IGNvb3JkaW5hdGUKKyAqLworZmxvYXQgU3BvdFNoYWRvdzo6YW5nbGUoY29uc3QgVmVjdG9yMiYgcG9pbnQsIGNvbnN0IFZlY3RvcjImIGNlbnRlcikgeworICAgIHJldHVybiAtKGZsb2F0KWF0YW4yKHBvaW50LnggLSBjZW50ZXIueCwgcG9pbnQueSAtIGNlbnRlci55KTsKK30KKworLyoqCisgKiBTd2FwIHBvaW50cyBwb2ludGVkIHRvIGJ5IGkgYW5kIGoKKyAqLwordm9pZCBTcG90U2hhZG93Ojpzd2FwKFZlY3RvcjIqIHBvaW50cywgaW50IGksIGludCBqKSB7CisgICAgVmVjdG9yMiB0ZW1wID0gcG9pbnRzW2ldOworICAgIHBvaW50c1tpXSA9IHBvaW50c1tqXTsKKyAgICBwb2ludHNbal0gPSB0ZW1wOworfQorCisvKioKKyAqIHF1aWNrIHNvcnQgaW1wbGVtZW50YXRpb24gYWJvdXQgdGhlIGNlbnRlci4KKyAqLwordm9pZCBTcG90U2hhZG93OjpxdWlja3NvcnRDaXJjKFZlY3RvcjIqIHBvaW50cywgaW50IGxvdywgaW50IGhpZ2gsCisgICAgICAgIGNvbnN0IFZlY3RvcjImIGNlbnRlcikgeworICAgIGludCBpID0gbG93LCBqID0gaGlnaDsKKyAgICBpbnQgcCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDI7CisgICAgZmxvYXQgcGl2b3QgPSBhbmdsZShwb2ludHNbcF0sIGNlbnRlcik7CisgICAgd2hpbGUgKGkgPD0gaikgeworICAgICAgICB3aGlsZSAoYW5nbGUocG9pbnRzW2ldLCBjZW50ZXIpIDwgcGl2b3QpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoYW5nbGUocG9pbnRzW2pdLCBjZW50ZXIpID4gcGl2b3QpIHsKKyAgICAgICAgICAgIGotLTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpIDw9IGopIHsKKyAgICAgICAgICAgIHN3YXAocG9pbnRzLCBpLCBqKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIGotLTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobG93IDwgaikgcXVpY2tzb3J0Q2lyYyhwb2ludHMsIGxvdywgaiwgY2VudGVyKTsKKyAgICBpZiAoaSA8IGhpZ2gpIHF1aWNrc29ydENpcmMocG9pbnRzLCBpLCBoaWdoLCBjZW50ZXIpOworfQorCisvKioKKyAqIFNvcnQgcG9pbnRzIGJ5IHggYXhpcworICoKKyAqIEBwYXJhbSBwb2ludHMgcG9pbnRzIHRvIHNvcnQKKyAqIEBwYXJhbSBsb3cgc3RhcnQgaW5kZXgKKyAqIEBwYXJhbSBoaWdoIGVuZCBpbmRleAorICovCit2b2lkIFNwb3RTaGFkb3c6OnF1aWNrc29ydFgoVmVjdG9yMiogcG9pbnRzLCBpbnQgbG93LCBpbnQgaGlnaCkgeworICAgIGludCBpID0gbG93LCBqID0gaGlnaDsKKyAgICBpbnQgcCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDI7CisgICAgZmxvYXQgcGl2b3QgPSBwb2ludHNbcF0ueDsKKyAgICB3aGlsZSAoaSA8PSBqKSB7CisgICAgICAgIHdoaWxlIChwb2ludHNbaV0ueCA8IHBpdm90KSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHBvaW50c1tqXS54ID4gcGl2b3QpIHsKKyAgICAgICAgICAgIGotLTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpIDw9IGopIHsKKyAgICAgICAgICAgIHN3YXAocG9pbnRzLCBpLCBqKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIGotLTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobG93IDwgaikgcXVpY2tzb3J0WChwb2ludHMsIGxvdywgaik7CisgICAgaWYgKGkgPCBoaWdoKSBxdWlja3NvcnRYKHBvaW50cywgaSwgaGlnaCk7Cit9CisKKy8qKgorICogVGVzdCB3aGV0aGVyIGEgcG9pbnQgaXMgaW5zaWRlIHRoZSBwb2x5Z29uLgorICoKKyAqIEBwYXJhbSB0ZXN0UG9pbnQgdGhlIHBvaW50IHRvIHRlc3QKKyAqIEBwYXJhbSBwb2x5IHRoZSBwb2x5Z29uCisgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRlc3RQb2ludCBpcyBpbnNpZGUgdGhlIHBvbHkuCisgKi8KK2Jvb2wgU3BvdFNoYWRvdzo6dGVzdFBvaW50SW5zaWRlUG9seWdvbihjb25zdCBWZWN0b3IyIHRlc3RQb2ludCwKKyAgICAgICAgY29uc3QgVmVjdG9yMiogcG9seSwgaW50IGxlbikgeworICAgIGJvb2wgYyA9IGZhbHNlOworICAgIGRvdWJsZSB0ZXN0eCA9IHRlc3RQb2ludC54OworICAgIGRvdWJsZSB0ZXN0eSA9IHRlc3RQb2ludC55OworICAgIGZvciAoaW50IGkgPSAwLCBqID0gbGVuIC0gMTsgaSA8IGxlbjsgaiA9IGkrKykgeworICAgICAgICBkb3VibGUgc3RhcnRYID0gcG9seVtqXS54OworICAgICAgICBkb3VibGUgc3RhcnRZID0gcG9seVtqXS55OworICAgICAgICBkb3VibGUgZW5kWCA9IHBvbHlbaV0ueDsKKyAgICAgICAgZG91YmxlIGVuZFkgPSBwb2x5W2ldLnk7CisKKyAgICAgICAgaWYgKCgoZW5kWSA+IHRlc3R5KSAhPSAoc3RhcnRZID4gdGVzdHkpKSAmJgorICAgICAgICAgICAgKHRlc3R4IDwgKHN0YXJ0WCAtIGVuZFgpICogKHRlc3R5IC0gZW5kWSkKKyAgICAgICAgICAgICAvIChzdGFydFkgLSBlbmRZKSArIGVuZFgpKSB7CisgICAgICAgICAgICBjID0gIWM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGM7Cit9CisKKy8qKgorICogTWFrZSB0aGUgcG9seWdvbiB0dXJuIGNsb2Nrd2lzZS4KKyAqCisgKiBAcGFyYW0gcG9seWdvbiB0aGUgcG9seWdvbiBhcyBhIFZlY3RvcjIgYXJyYXkuCisgKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgcG9pbnRzIG9mIHRoZSBwb2x5Z29uCisgKi8KK3ZvaWQgU3BvdFNoYWRvdzo6bWFrZUNsb2Nrd2lzZShWZWN0b3IyKiBwb2x5Z29uLCBpbnQgbGVuKSB7CisgICAgaWYgKHBvbHlnb24gPT0gMCAgfHwgbGVuID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzQ2xvY2t3aXNlKHBvbHlnb24sIGxlbikpIHsKKyAgICAgICAgcmV2ZXJzZShwb2x5Z29uLCBsZW4pOworICAgIH0KK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhlIHBvbHlnb24gaXMgb3JkZXIgaW4gY2xvY2t3aXNlLgorICoKKyAqIEBwYXJhbSBwb2x5Z29uIHRoZSBwb2x5Z29uIGFzIGEgVmVjdG9yMiBhcnJheQorICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIHBvaW50cyBvZiB0aGUgcG9seWdvbgorICovCitib29sIFNwb3RTaGFkb3c6OmlzQ2xvY2t3aXNlKFZlY3RvcjIqIHBvbHlnb24sIGludCBsZW4pIHsKKyAgICBkb3VibGUgc3VtID0gMDsKKyAgICBkb3VibGUgcDF4ID0gcG9seWdvbltsZW4gLSAxXS54OworICAgIGRvdWJsZSBwMXkgPSBwb2x5Z29uW2xlbiAtIDFdLnk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworCisgICAgICAgIGRvdWJsZSBwMnggPSBwb2x5Z29uW2ldLng7CisgICAgICAgIGRvdWJsZSBwMnkgPSBwb2x5Z29uW2ldLnk7CisgICAgICAgIHN1bSArPSBwMXggKiBwMnkgLSBwMnggKiBwMXk7CisgICAgICAgIHAxeCA9IHAyeDsKKyAgICAgICAgcDF5ID0gcDJ5OworICAgIH0KKyAgICByZXR1cm4gc3VtIDwgMDsKK30KKworLyoqCisgKiBSZXZlcnNlIHRoZSBwb2x5Z29uCisgKgorICogQHBhcmFtIHBvbHlnb24gdGhlIHBvbHlnb24gYXMgYSBWZWN0b3IyIGFycmF5CisgKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgcG9pbnRzIG9mIHRoZSBwb2x5Z29uCisgKi8KK3ZvaWQgU3BvdFNoYWRvdzo6cmV2ZXJzZShWZWN0b3IyKiBwb2x5Z29uLCBpbnQgbGVuKSB7CisgICAgaW50IG4gPSBsZW4gLyAyOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIFZlY3RvcjIgdG1wID0gcG9seWdvbltpXTsKKyAgICAgICAgaW50IGsgPSBsZW4gLSAxIC0gaTsKKyAgICAgICAgcG9seWdvbltpXSA9IHBvbHlnb25ba107CisgICAgICAgIHBvbHlnb25ba10gPSB0bXA7CisgICAgfQorfQorCisvKioKKyAqIEludGVyc2VjdHMgdHdvIGxpbmVzIGluIHBhcmFtZXRyaWMgZm9ybS4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gYSB0aWdodAorICogbG9vcCwgYW5kIHdlIG5lZWQgZG91YmxlIHByZWNpc2lvbiB0byBnZXQgdGhpbmdzIHJpZ2h0LgorICoKKyAqIEBwYXJhbSB4MSB0aGUgeCBjb29yZGluYXRlIHBvaW50IDEgb2YgbGluZSAxCisgKiBAcGFyYW0geTEgdGhlIHkgY29vcmRpbmF0ZSBwb2ludCAxIG9mIGxpbmUgMQorICogQHBhcmFtIHgyIHRoZSB4IGNvb3JkaW5hdGUgcG9pbnQgMiBvZiBsaW5lIDEKKyAqIEBwYXJhbSB5MiB0aGUgeSBjb29yZGluYXRlIHBvaW50IDIgb2YgbGluZSAxCisgKiBAcGFyYW0geDMgdGhlIHggY29vcmRpbmF0ZSBwb2ludCAxIG9mIGxpbmUgMgorICogQHBhcmFtIHkzIHRoZSB5IGNvb3JkaW5hdGUgcG9pbnQgMSBvZiBsaW5lIDIKKyAqIEBwYXJhbSB4NCB0aGUgeCBjb29yZGluYXRlIHBvaW50IDIgb2YgbGluZSAyCisgKiBAcGFyYW0geTQgdGhlIHkgY29vcmRpbmF0ZSBwb2ludCAyIG9mIGxpbmUgMgorICogQHBhcmFtIHJldCB0aGUgeCx5IGxvY2F0aW9uIG9mIHRoZSBpbnRlcnNlY3Rpb24KKyAqIEByZXR1cm4gdHJ1ZSBpZiBpdCBmb3VuZCBhbiBpbnRlcnNlY3Rpb24KKyAqLworaW5saW5lIGJvb2wgU3BvdFNoYWRvdzo6bGluZUludGVyc2VjdGlvbihkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsCisgICAgICAgIGRvdWJsZSB4MywgZG91YmxlIHkzLCBkb3VibGUgeDQsIGRvdWJsZSB5NCwgVmVjdG9yMiYgcmV0KSB7CisgICAgZG91YmxlIGQgPSAoeDEgLSB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMgLSB4NCk7CisgICAgaWYgKGQgPT0gMC4wKSByZXR1cm4gZmFsc2U7CisKKyAgICBkb3VibGUgZHggPSAoeDEgKiB5MiAtIHkxICogeDIpOworICAgIGRvdWJsZSBkeSA9ICh4MyAqIHk0IC0geTMgKiB4NCk7CisgICAgZG91YmxlIHggPSAoZHggKiAoeDMgLSB4NCkgLSAoeDEgLSB4MikgKiBkeSkgLyBkOworICAgIGRvdWJsZSB5ID0gKGR4ICogKHkzIC0geTQpIC0gKHkxIC0geTIpICogZHkpIC8gZDsKKworICAgIC8vIFRoZSBpbnRlcnNlY3Rpb24gc2hvdWxkIGJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHBvaW50IDEgYW5kIHBvaW50IDIsCisgICAgLy8gbGlrZXdpc2UgcG9pbnQgMyBhbmQgcG9pbnQgNC4KKyAgICBpZiAoKCh4IC0geDEpICogKHggLSB4MikgPiBFUFNJTE9OKQorICAgICAgICB8fCAoKHggLSB4MykgKiAoeCAtIHg0KSA+IEVQU0lMT04pCisgICAgICAgIHx8ICgoeSAtIHkxKSAqICh5IC0geTIpID4gRVBTSUxPTikKKyAgICAgICAgfHwgKCh5IC0geTMpICogKHkgLSB5NCkgPiBFUFNJTE9OKSkgeworICAgICAgICAvLyBOb3QgaW50ZXJlc2VjdGVkCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0LnggPSB4OworICAgIHJldC55ID0geTsKKyAgICByZXR1cm4gdHJ1ZTsKKworfQorCisvKioKKyAqIENvbXB1dGUgYSBob3Jpem9udGFsIGNpcmN1bGFyIHBvbHlnb24gYWJvdXQgcG9pbnQgKHggLCB5ICwgaGVpZ2h0KSBvZiByYWRpdXMKKyAqIChzaXplKQorICoKKyAqIEBwYXJhbSBwb2ludHMgbnVtYmVyIG9mIHRoZSBwb2ludHMgb2YgdGhlIG91dHB1dCBwb2x5Z29uLgorICogQHBhcmFtIGxpZ2h0Q2VudGVyIHRoZSBjZW50ZXIgb2YgdGhlIGxpZ2h0LgorICogQHBhcmFtIHNpemUgdGhlIGxpZ2h0IHNpemUuCisgKiBAcGFyYW0gcmV0IHJlc3VsdCBwb2x5Z29uLgorICovCit2b2lkIFNwb3RTaGFkb3c6OmNvbXB1dGVMaWdodFBvbHlnb24oaW50IHBvaW50cywgY29uc3QgVmVjdG9yMyYgbGlnaHRDZW50ZXIsCisgICAgICAgIGZsb2F0IHNpemUsIFZlY3RvcjMqIHJldCkgeworICAgIC8vIFRPRE86IENhY2hpbmcgYWxsIHRoZSBzaW4gLyBjb3MgdmFsdWVzIGFuZCBzdG9yZSB0aGVtIGluIGEgbG9vayB1cCB0YWJsZS4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvaW50czsgaSsrKSB7CisgICAgICAgIGRvdWJsZSBhbmdsZSA9IDIgKiBpICogTV9QSSAvIHBvaW50czsKKyAgICAgICAgcmV0W2ldLnggPSBzaW5mKGFuZ2xlKSAqIHNpemUgKyBsaWdodENlbnRlci54OworICAgICAgICByZXRbaV0ueSA9IGNvc2YoYW5nbGUpICogc2l6ZSArIGxpZ2h0Q2VudGVyLnk7CisgICAgICAgIHJldFtpXS56ID0gbGlnaHRDZW50ZXIuejsKKyAgICB9Cit9CisKKy8qKgorKiBHZW5lcmF0ZSB0aGUgc2hhZG93IGZyb20gYSBzcG90IGxpZ2h0LgorKgorKiBAcGFyYW0gcG9seSB4LHkseiB2ZXJ0ZXhlcyBvZiBhIGNvbnZleCBwb2x5Z29uIHRoYXQgb2NjbHVkZXMgdGhlIGxpZ2h0IHNvdXJjZQorKiBAcGFyYW0gcG9seUxlbmd0aCBudW1iZXIgb2YgdmVydGV4ZXMgb2YgdGhlIG9jY2x1ZGluZyBwb2x5Z29uCisqIEBwYXJhbSBsaWdodENlbnRlciB0aGUgY2VudGVyIG9mIHRoZSBsaWdodAorKiBAcGFyYW0gbGlnaHRTaXplIHRoZSByYWRpdXMgb2YgdGhlIGxpZ2h0IHNvdXJjZQorKiBAcGFyYW0gbGlnaHRWZXJ0ZXhDb3VudCB0aGUgdmVydGV4IGNvdW50ZXIgZm9yIHRoZSBsaWdodCBwb2x5Z29uCisqIEBwYXJhbSByYXlzIHRoZSBudW1iZXIgb2YgdmVydGV4ZXMgdG8gY3JlYXRlIGFsb25nIHRoZSBlZGdlcyBvZiB0aGUgc2hhZG93CisqIEBwYXJhbSBsYXllcnMgdGhlIG51bWJlciBvZiBsYXllcnMgb2YgdHJpYW5nbGVzIHN0cmlwcyB0byBjcmVhdGUKKyogQHBhcmFtIHN0cmVuZ3RoIHRoZSAiZGFya25lc3MiIG9mIHRoZSBzaGFkb3cKKyogQHBhcmFtIHNoYWRvd1RyaWFuZ2xlU3RyaXAgcmV0dXJuIGFuICh4LHksYWxwaGEpIHRyaWFuZ2xlIHN0cmlwIHJlcHJlc2VudGluZyB0aGUgc2hhZG93LiBSZXR1cm4KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHkgc3RyaXAgaWYgZXJyb3IuCisqCisqLwordm9pZCBTcG90U2hhZG93OjpjcmVhdGVTcG90U2hhZG93KGNvbnN0IFZlY3RvcjMqIHBvbHksIGludCBwb2x5TGVuZ3RoLAorICAgICAgICBjb25zdCBWZWN0b3IzJiBsaWdodENlbnRlciwgZmxvYXQgbGlnaHRTaXplLCBpbnQgbGlnaHRWZXJ0ZXhDb3VudCwKKyAgICAgICAgaW50IHJheXMsIGludCBsYXllcnMsIGZsb2F0IHN0cmVuZ3RoLCBWZXJ0ZXhCdWZmZXImIHJldFN0cmlwcykgeworICAgIFZlY3RvcjMgbGlnaHRbbGlnaHRWZXJ0ZXhDb3VudCAqIDNdOworICAgIGNvbXB1dGVMaWdodFBvbHlnb24obGlnaHRWZXJ0ZXhDb3VudCwgbGlnaHRDZW50ZXIsIGxpZ2h0U2l6ZSwgbGlnaHQpOworICAgIGNvbXB1dGVTcG90U2hhZG93KGxpZ2h0LCBsaWdodFZlcnRleENvdW50LCBsaWdodENlbnRlciwKKyAgICAgICAgICAgIHBvbHksIHBvbHlMZW5ndGgsIHJheXMsIGxheWVycywgc3RyZW5ndGgsIHJldFN0cmlwcyk7Cit9CisKKy8qKgorICogR2VuZXJhdGUgdGhlIHNoYWRvdyBzcG90IGxpZ2h0IG9mIHNoYXBlIGxpZ2h0UG9seSBhbmQgYSBvYmplY3QgcG9seQorICoKKyAqIEBwYXJhbSBsaWdodFBvbHkgeCx5LHogdmVydGV4IG9mIGEgY29udmV4IHBvbHlnb24gdGhhdCBpcyB0aGUgbGlnaHQgc291cmNlCisgKiBAcGFyYW0gbGlnaHRQb2x5TGVuZ3RoIG51bWJlciBvZiB2ZXJ0ZXhlcyBvZiB0aGUgbGlnaHQgc291cmNlIHBvbHlnb24KKyAqIEBwYXJhbSBwb2x5IHgseSx6IHZlcnRleGVzIG9mIGEgY29udmV4IHBvbHlnb24gdGhhdCBvY2NsdWRlcyB0aGUgbGlnaHQgc291cmNlCisgKiBAcGFyYW0gcG9seUxlbmd0aCBudW1iZXIgb2YgdmVydGV4ZXMgb2YgdGhlIG9jY2x1ZGluZyBwb2x5Z29uCisgKiBAcGFyYW0gcmF5cyB0aGUgbnVtYmVyIG9mIHZlcnRleGVzIHRvIGNyZWF0ZSBhbG9uZyB0aGUgZWRnZXMgb2YgdGhlIHNoYWRvdworICogQHBhcmFtIGxheWVycyB0aGUgbnVtYmVyIG9mIGxheWVycyBvZiB0cmlhbmdsZXMgc3RyaXBzIHRvIGNyZWF0ZQorICogQHBhcmFtIHN0cmVuZ3RoIHRoZSAiZGFya25lc3MiIG9mIHRoZSBzaGFkb3cKKyAqIEBwYXJhbSBzaGFkb3dUcmlhbmdsZVN0cmlwIHJldHVybiBhbiAoeCx5LGFscGhhKSB0cmlhbmdsZSBzdHJpcCByZXByZXNlbnRpbmcgdGhlIHNoYWRvdy4gUmV0dXJuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eSBzdHJpcCBpZiBlcnJvci4KKyAqLwordm9pZCBTcG90U2hhZG93Ojpjb21wdXRlU3BvdFNoYWRvdyhjb25zdCBWZWN0b3IzKiBsaWdodFBvbHksIGludCBsaWdodFBvbHlMZW5ndGgsCisgICAgICAgIGNvbnN0IFZlY3RvcjMmIGxpZ2h0Q2VudGVyLCBjb25zdCBWZWN0b3IzKiBwb2x5LCBpbnQgcG9seUxlbmd0aCwKKyAgICAgICAgaW50IHJheXMsIGludCBsYXllcnMsIGZsb2F0IHN0cmVuZ3RoLCBWZXJ0ZXhCdWZmZXImIHNoYWRvd1RyaWFuZ2xlU3RyaXApIHsKKyAgICAvLyBQb2ludCBjbG91ZHMgZm9yIGFsbCB0aGUgc2hhZG93ZWQgdmVydGljZXMKKyAgICBWZWN0b3IyIHNoYWRvd1JlZ2lvbltsaWdodFBvbHlMZW5ndGggKiBwb2x5TGVuZ3RoXTsKKyAgICAvLyBTaGFkb3cgcG9seWdvbiBmcm9tIG9uZSBwb2ludCBsaWdodC4KKyAgICBWZWN0b3IyIG91dGxpbmVbcG9seUxlbmd0aF07CisgICAgVmVjdG9yMiB1bWJyYU1lbVtwb2x5TGVuZ3RoICogbGlnaHRQb2x5TGVuZ3RoXTsKKyAgICBWZWN0b3IyKiB1bWJyYSA9IHVtYnJhTWVtOworCisgICAgaW50IHVtYnJhTGVuZ3RoID0gMDsKKworICAgIC8vIFZhbGlkYXRlIGlucHV0LCByZWNlaXZlciBpcyBhbHdheXMgYXQgeiA9IDAgcGxhbmUuCisgICAgYm9vbCBpbnB1dFBvbHlQb3NpdGlvblZhbGlkID0gdHJ1ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvbHlMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAocG9seVtpXS56IDw9IDAuMDAwMDEpIHsKKyAgICAgICAgICAgIGlucHV0UG9seVBvc2l0aW9uVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIEFMT0dFKCJwb2x5Z29uIGJlbG93IHRoZSBzdXJmYWNlIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAocG9seVtpXS56ID49IGxpZ2h0UG9seVswXS56KSB7CisgICAgICAgICAgICBpbnB1dFBvbHlQb3NpdGlvblZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBBTE9HRSgicG9seWdvbiBhYm92ZSB0aGUgbGlnaHQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYgdGhlIGNhc3RlcidzIHBvc2l0aW9uIGlzIGludmFsaWQsIGRvbid0IGRyYXcgYW55dGhpbmcuCisgICAgaWYgKCFpbnB1dFBvbHlQb3NpdGlvblZhbGlkKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHVtYnJhIHBvbHlnb24gYmFzZWQgb24gaW50ZXJzZWN0aW9ucyBvZiBhbGwgb3V0bGluZXMKKyAgICBpbnQgayA9IDA7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBsaWdodFBvbHlMZW5ndGg7IGorKykgeworICAgICAgICBpbnQgbSA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9seUxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmbG9hdCB0ID0gbGlnaHRQb2x5W2pdLnogLSBwb2x5W2ldLno7CisgICAgICAgICAgICBpZiAodCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdCA9IGxpZ2h0UG9seVtqXS56IC8gdDsKKyAgICAgICAgICAgIGZsb2F0IHggPSBsaWdodFBvbHlbal0ueCAtIHQgKiAobGlnaHRQb2x5W2pdLnggLSBwb2x5W2ldLngpOworICAgICAgICAgICAgZmxvYXQgeSA9IGxpZ2h0UG9seVtqXS55IC0gdCAqIChsaWdodFBvbHlbal0ueSAtIHBvbHlbaV0ueSk7CisKKyAgICAgICAgICAgIFZlY3RvcjIgbmV3UG9pbnQgPSBWZWN0b3IyKHgsIHkpOworICAgICAgICAgICAgc2hhZG93UmVnaW9uW2tdID0gbmV3UG9pbnQ7CisgICAgICAgICAgICBvdXRsaW5lW21dID0gbmV3UG9pbnQ7CisKKyAgICAgICAgICAgIGsrKzsKKyAgICAgICAgICAgIG0rKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZvciB0aGUgZmlyc3QgbGlnaHQgcG9seWdvbidzIHZlcnRleCwgdXNlIHRoZSBvdXRsaW5lIGFzIHRoZSB1bWJyYS4KKyAgICAgICAgLy8gTGF0ZXIgb24sIHVzZSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBvdXRsaW5lIGFuZCBleGlzdGluZyB1bWJyYS4KKyAgICAgICAgaWYgKHVtYnJhTGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9seUxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdW1icmFbaV0gPSBvdXRsaW5lW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdW1icmFMZW5ndGggPSBwb2x5TGVuZ3RoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGNvbCA9ICgoaiAqIDI1NSkgLyBsaWdodFBvbHlMZW5ndGgpOworICAgICAgICAgICAgdW1icmFMZW5ndGggPSBpbnRlcnNlY3Rpb24ob3V0bGluZSwgcG9seUxlbmd0aCwgdW1icmEsIHVtYnJhTGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICh1bWJyYUxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBHZW5lcmF0ZSB0aGUgcGVudW1icmEgYXJlYSB1c2luZyB0aGUgaHVsbCBvZiBhbGwgc2hhZG93IHJlZ2lvbnMuCisgICAgaW50IHNoYWRvd1JlZ2lvbkxlbmd0aCA9IGs7CisgICAgVmVjdG9yMiBwZW51bWJyYVtrXTsKKyAgICBpbnQgcGVudW1icmFMZW5ndGggPSBodWxsKHNoYWRvd1JlZ2lvbiwgc2hhZG93UmVnaW9uTGVuZ3RoLCBwZW51bWJyYSk7CisKKyAgICAvLyBubyByZWFsIHVtYnJhIG1ha2UgYSBmYWtlIG9uZQorICAgIGlmICh1bWJyYUxlbmd0aCA8IDMpIHsKKyAgICAgICAgLy8gVGhlIHNoYWRvdyBmcm9tIHRoZSBjZW50cm9pZCBvZiB0aGUgbGlnaHQgcG9seWdvbi4KKyAgICAgICAgVmVjdG9yMiBjZW50U2hhZG93W3BvbHlMZW5ndGhdOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9seUxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmbG9hdCB0ID0gbGlnaHRDZW50ZXIueiAtIHBvbHlbaV0uejsKKyAgICAgICAgICAgIGlmICh0ID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ID0gbGlnaHRDZW50ZXIueiAvIHQ7CisgICAgICAgICAgICBmbG9hdCB4ID0gbGlnaHRDZW50ZXIueCAtIHQgKiAobGlnaHRDZW50ZXIueCAtIHBvbHlbaV0ueCk7CisgICAgICAgICAgICBmbG9hdCB5ID0gbGlnaHRDZW50ZXIueSAtIHQgKiAobGlnaHRDZW50ZXIueSAtIHBvbHlbaV0ueSk7CisKKyAgICAgICAgICAgIGNlbnRTaGFkb3dbaV0ueCA9IHg7CisgICAgICAgICAgICBjZW50U2hhZG93W2ldLnkgPSB5OworICAgICAgICB9CisKKyAgICAgICAgLy8gU2hyaW5rIHRoZSBjZW50cm9pZCdzIHNoYWRvdyBieSAxMCUuCisgICAgICAgIC8vIFRPRE86IFN0dWR5IHRoZSBtYWdpYyBudW1iZXIgb2YgMTAlLgorICAgICAgICBWZWN0b3IyIHNoYWRvd0NlbnRyb2lkID0gY2VudHJvaWQyZChjZW50U2hhZG93LCBwb2x5TGVuZ3RoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb2x5TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNlbnRTaGFkb3dbaV0gPSBzaGFkb3dDZW50cm9pZCAqICgxLjBmIC0gU0hBRE9XX1NIUklOS19TQ0FMRSkgKworICAgICAgICAgICAgICAgICAgICBjZW50U2hhZG93W2ldICogU0hBRE9XX1NIUklOS19TQ0FMRTsKKyAgICAgICAgfQorI2lmIERFQlVHX1NIQURPVworICAgICAgICBBTE9HRCgiTm8gcmVhbCB1bWJyYSBtYWtlIGEgZmFrZSBvbmUsIGNlbnRyb2lkMmQgPSAgJWYgLCAlZiIsCisgICAgICAgICAgICAgICAgc2hhZG93Q2VudHJvaWQueCwgc2hhZG93Q2VudHJvaWQueSk7CisjZW5kaWYKKyAgICAgICAgLy8gU2V0IHRoZSBmYWtlIHVtYnJhLCB3aG9zZSBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBwb2x5Z29uLgorICAgICAgICB1bWJyYSA9IGNlbnRTaGFkb3c7CisgICAgICAgIHVtYnJhTGVuZ3RoID0gcG9seUxlbmd0aDsKKyAgICB9CisKKyAgICBnZW5lcmF0ZVRyaWFuZ2xlU3RyaXAocGVudW1icmEsIHBlbnVtYnJhTGVuZ3RoLCB1bWJyYSwgdW1icmFMZW5ndGgsCisgICAgICAgICAgICByYXlzLCBsYXllcnMsIHN0cmVuZ3RoLCBzaGFkb3dUcmlhbmdsZVN0cmlwKTsKK30KKworLyoqCisgKiBHZW5lcmF0ZSBhIHRyaWFuZ2xlIHN0cmlwIGdpdmVuIHR3byBjb252ZXggcG9seWdvbnMKKyAqCisgKiBAcGFyYW0gcGVudW1icmEgVGhlIG91dGVyIHBvbHlnb24geCx5IHZlcnRleGVzCisgKiBAcGFyYW0gcGVudW1icmFMZW5ndGggVGhlIG51bWJlciBvZiB2ZXJ0ZXhlcyBpbiB0aGUgb3V0ZXIgcG9seWdvbgorICogQHBhcmFtIHVtYnJhIFRoZSBpbm5lciBvdXRlciBwb2x5Z29uIHgseSB2ZXJ0ZXhlcworICogQHBhcmFtIHVtYnJhTGVuZ3RoIFRoZSBudW1iZXIgb2YgdmVydGV4ZXMgaW4gdGhlIGlubmVyIHBvbHlnb24KKyAqIEBwYXJhbSByYXlzIFRoZSBudW1iZXIgb2YgcG9pbnRzIGFsb25nIHRoZSBwb2x5Z29ucyB0byBjcmVhdGUKKyAqIEBwYXJhbSBsYXllcnMgVGhlIG51bWJlciBvZiBsYXllcnMgb2YgdHJpYW5nbGUgc3RyaXBzIGJldHdlZW4gdGhlIHVtYnJhIGFuZCBwZW51bWJyYQorICogQHBhcmFtIHN0cmVuZ3RoIFRoZSBtYXggYWxwaGEgb2YgdGhlIHVtYnJhCisgKiBAcGFyYW0gc2hhZG93VHJpYW5nbGVTdHJpcCByZXR1cm4gYW4gKHgseSxhbHBoYSkgdHJpYW5nbGUgc3RyaXAgcmVwcmVzZW50aW5nIHRoZSBzaGFkb3cuIFJldHVybgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHkgc3RyaXAgaWYgZXJyb3IuCisqKi8KK3ZvaWQgU3BvdFNoYWRvdzo6Z2VuZXJhdGVUcmlhbmdsZVN0cmlwKGNvbnN0IFZlY3RvcjIqIHBlbnVtYnJhLCBpbnQgcGVudW1icmFMZW5ndGgsCisgICAgICAgIGNvbnN0IFZlY3RvcjIqIHVtYnJhLCBpbnQgdW1icmFMZW5ndGgsIGludCByYXlzLCBpbnQgbGF5ZXJzLAorICAgICAgICBmbG9hdCBzdHJlbmd0aCwgVmVydGV4QnVmZmVyJiBzaGFkb3dUcmlhbmdsZVN0cmlwKSB7CisKKyAgICBpbnQgcmluZ3MgPSBsYXllcnMgKyAxOworICAgIGludCBzaXplID0gcmF5cyAqIHJpbmdzOworCisgICAgZmxvYXQgc3RlcCA9IE1fUEkgKiAyIC8gcmF5czsKKyAgICAvLyBDZW50cm9pZCBvZiB0aGUgdW1icmEuCisgICAgVmVjdG9yMiBjZW50cm9pZCA9IGNlbnRyb2lkMmQodW1icmEsIHVtYnJhTGVuZ3RoKTsKKyNpZiBERUJVR19TSEFET1cKKyAgICBBTE9HRCgiY2VudHJvaWQyZCA9ICAlZiAsICVmIiwgY2VudHJvaWQueCwgY2VudHJvaWQueSk7CisjZW5kaWYKKyAgICAvLyBJbnRlcnNlY3Rpb24gdG8gdGhlIHBlbnVtYnJhLgorICAgIGZsb2F0IHBlbnVtYnJhRGlzdFBlclJheVtyYXlzXTsKKyAgICAvLyBJbnRlcnNlY3Rpb24gdG8gdGhlIHVtYnJhLgorICAgIGZsb2F0IHVtYnJhRGlzdFBlclJheVtyYXlzXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmF5czsgaSsrKSB7CisgICAgICAgIC8vIFRPRE86IFNldHVwIGEgbG9va3VwIHRhYmxlIGZvciBhbGwgdGhlIHNpbi9jb3MuCisgICAgICAgIGZsb2F0IGR4ID0gc2luZihzdGVwICogaSk7CisgICAgICAgIGZsb2F0IGR5ID0gY29zZihzdGVwICogaSk7CisgICAgICAgIHVtYnJhRGlzdFBlclJheVtpXSA9IHJheUludGVyc2VjdFBvbHkodW1icmEsIHVtYnJhTGVuZ3RoLCBjZW50cm9pZCwKKyAgICAgICAgICAgICAgICBkeCwgZHkpOworICAgICAgICBpZiAoaXNuYW4odW1icmFEaXN0UGVyUmF5W2ldKSkgeworICAgICAgICAgICAgQUxPR0UoInJheUludGVyc2VjdFBvbHkgcmV0dXJucyBOQU4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwZW51bWJyYURpc3RQZXJSYXlbaV0gPSByYXlJbnRlcnNlY3RQb2x5KHBlbnVtYnJhLCBwZW51bWJyYUxlbmd0aCwKKyAgICAgICAgICAgICAgICBjZW50cm9pZCwgZHgsIGR5KTsKKyAgICAgICAgaWYgKGlzbmFuKHVtYnJhRGlzdFBlclJheVtpXSkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJyYXlJbnRlcnNlY3RQb2x5IHJldHVybnMgTkFOIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgc3RyaXBTaXplID0gZ2V0U3RyaXBTaXplKHJheXMsIGxheWVycyk7CisgICAgQWxwaGFWZXJ0ZXgqIHNoYWRvd1ZlcnRpY2VzID0gc2hhZG93VHJpYW5nbGVTdHJpcC5hbGxvYzxBbHBoYVZlcnRleD4oc3RyaXBTaXplKTsKKyAgICBpbnQgY3VycmVudEluZGV4ID0gMDsKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHZlcnRleCB2YWx1ZXMgaW4gdGhlIHBlbnVtYnJhIGFyZWEuCisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBsYXllcnM7IHIrKykgeworICAgICAgICBpbnQgZmlyc3RJbkVhY2hMYXllciA9IGN1cnJlbnRJbmRleDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByYXlzOyBpKyspIHsKKyAgICAgICAgICAgIGZsb2F0IGR4ID0gc2luZihzdGVwICogaSk7CisgICAgICAgICAgICBmbG9hdCBkeSA9IGNvc2Yoc3RlcCAqIGkpOworCisgICAgICAgICAgICBmb3IgKGludCBqID0gcjsgaiA8IChyICsgMik7IGorKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGxheWVyUmF0aW8gPSBqIC8gKGZsb2F0KShyaW5ncyAtIDEpOworICAgICAgICAgICAgICAgIGZsb2F0IGRlbHRhRGlzdCA9IGxheWVyUmF0aW8gKiAodW1icmFEaXN0UGVyUmF5W2ldIC0gcGVudW1icmFEaXN0UGVyUmF5W2ldKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBjdXJyZW50RGlzdCA9IHBlbnVtYnJhRGlzdFBlclJheVtpXSArIGRlbHRhRGlzdDsKKyAgICAgICAgICAgICAgICBmbG9hdCBvcCA9IGNhbGN1bGF0ZU9wYWNpdHkobGF5ZXJSYXRpbywgZGVsdGFEaXN0KTsKKyAgICAgICAgICAgICAgICBBbHBoYVZlcnRleDo6c2V0KCZzaGFkb3dWZXJ0aWNlc1tjdXJyZW50SW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgZHggKiBjdXJyZW50RGlzdCArIGNlbnRyb2lkLngsCisgICAgICAgICAgICAgICAgICAgICAgICBkeSAqIGN1cnJlbnREaXN0ICsgY2VudHJvaWQueSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyUmF0aW8gKiBvcCAqIHN0cmVuZ3RoKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIER1cGxpY2F0ZSB0aGUgdmVydGljZXMgZnJvbSBvbmUgbGF5ZXIgdG8gYW5vdGhlciBvbmUgdG8gbWFrZSB0cmlhbmdsZQorICAgICAgICAvLyBzdHJpcC4KKyAgICAgICAgc2hhZG93VmVydGljZXNbY3VycmVudEluZGV4KytdID0gc2hhZG93VmVydGljZXNbZmlyc3RJbkVhY2hMYXllcl07CisgICAgICAgIGZpcnN0SW5FYWNoTGF5ZXIrKzsKKyAgICAgICAgc2hhZG93VmVydGljZXNbY3VycmVudEluZGV4KytdID0gc2hhZG93VmVydGljZXNbZmlyc3RJbkVhY2hMYXllcl07CisgICAgfQorCisgICAgaW50IGxhc3RJblBlbnVtYnJhID0gY3VycmVudEluZGV4IC0gMTsKKyAgICBzaGFkb3dWZXJ0aWNlc1tjdXJyZW50SW5kZXgrK10gPSBzaGFkb3dWZXJ0aWNlc1tsYXN0SW5QZW51bWJyYV07CisKKyAgICAvLyBQcmVhbGxvY2F0ZSB0aGUgdmVydGljZXMgKGluZGV4IGFzIFtmaXJzdEluVW1icmEgLSAxXSkgZm9yIGp1bXBpbmcgZnJvbQorICAgIC8vIHRoZSBwZW51bWJyYSB0byB1bWJyYS4KKyAgICBjdXJyZW50SW5kZXgrKzsKKyAgICBpbnQgZmlyc3RJblVtYnJhID0gY3VycmVudEluZGV4OworCisgICAgLy8gdHJhdmVyc2UgdGhlIHVtYnJhIGFyZWEgaW4gYSB6aWcgemFnIHBhdHRlcm4gZm9yIHN0cmlwcy4KKyAgICBmb3IgKGludCBrID0gMDsgayA8IHJheXM7IGsrKykgeworICAgICAgICBpbnQgaSA9IGsgLyAyOworICAgICAgICBpZiAoKGsgJiAxKSA9PSAxKSB7CisgICAgICAgICAgICBpID0gcmF5cyAtIGkgLSAxOworICAgICAgICB9CisgICAgICAgIGZsb2F0IGR4ID0gc2luZihzdGVwICogaSk7CisgICAgICAgIGZsb2F0IGR5ID0gY29zZihzdGVwICogaSk7CisKKyAgICAgICAgZmxvYXQgcmF0aW8gPSAxLjA7CisgICAgICAgIGZsb2F0IGRlbHRhRGlzdCA9IHJhdGlvICogKHVtYnJhRGlzdFBlclJheVtpXSAtIHBlbnVtYnJhRGlzdFBlclJheVtpXSk7CisgICAgICAgIGZsb2F0IGN1cnJlbnREaXN0ID0gcGVudW1icmFEaXN0UGVyUmF5W2ldICsgZGVsdGFEaXN0OworICAgICAgICBmbG9hdCBvcCA9IGNhbGN1bGF0ZU9wYWNpdHkocmF0aW8sIGRlbHRhRGlzdCk7CisgICAgICAgIEFscGhhVmVydGV4OjpzZXQoJnNoYWRvd1ZlcnRpY2VzW2N1cnJlbnRJbmRleF0sCisgICAgICAgICAgICAgICAgZHggKiBjdXJyZW50RGlzdCArIGNlbnRyb2lkLngsIGR5ICogY3VycmVudERpc3QgKyBjZW50cm9pZC55LAorICAgICAgICAgICAgICAgIHJhdGlvICogb3AgKiBzdHJlbmd0aCk7CisgICAgICAgIGN1cnJlbnRJbmRleCsrOworCisgICAgfQorCisgICAgLy8gQmFjayBmaWxsIHRoZSBvbmUgdmVydGV4IGZvciBqdW1waW5nIGZyb20gcGVudW1icmEgdG8gdW1icmEuCisgICAgc2hhZG93VmVydGljZXNbZmlyc3RJblVtYnJhIC0gMV0gPSBzaGFkb3dWZXJ0aWNlc1tmaXJzdEluVW1icmFdOworCisjaWYgREVCVUdfU0hBRE9XCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdXJyZW50SW5kZXg7IGkrKykgeworICAgICAgICBBTE9HRCgic2hhZG93IHZhbHVlOiBpICVkLCAoeDolZiwgeTolZiwgYTolZikiLCBpLCBzaGFkb3dWZXJ0aWNlc1tpXS54LAorICAgICAgICAgICAgICAgIHNoYWRvd1ZlcnRpY2VzW2ldLnksIHNoYWRvd1ZlcnRpY2VzW2ldLmFscGhhKTsKKyAgICB9CisjZW5kaWYKK30KKworLyoqCisgKiBUaGlzIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCBwdXJwb3NlLgorICogQWZ0ZXIgaW50ZXJzZWN0aW9ucyBhcmUgY2FsY3VsYXRlZCwgd2UgY291bGQgc21vb3RoIHRoZSBwb2x5Z29uIGlmIG5lZWRlZC4KKyAqIFNvIGZhciwgd2UgZG9uJ3QgdGhpbmsgaXQgaXMgbW9yZSBhcHBlYWxpbmcgeWV0LgorICoKKyAqIEBwYXJhbSBsZXZlbCBUaGUgbGV2ZWwgb2Ygc21vb3RobmVzcy4KKyAqIEBwYXJhbSByYXlzIFRoZSB0b3RhbCBudW1iZXIgb2YgcmF5cy4KKyAqIEBwYXJhbSByYXlEaXN0IChJbiBhbmQgT3V0KSBUaGUgZGlzdGFuY2UgZm9yIGVhY2ggcmF5LgorICoKKyAqLwordm9pZCBTcG90U2hhZG93OjpzbW9vdGhQb2x5Z29uKGludCBsZXZlbCwgaW50IHJheXMsIGZsb2F0KiByYXlEaXN0KSB7CisgICAgZm9yIChpbnQgayA9IDA7IGsgPCBsZXZlbDsgaysrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmF5czsgaSsrKSB7CisgICAgICAgICAgICBmbG9hdCBwMSA9IHJheURpc3RbKHJheXMgLSAxICsgaSkgJSByYXlzXTsKKyAgICAgICAgICAgIGZsb2F0IHAyID0gcmF5RGlzdFtpXTsKKyAgICAgICAgICAgIGZsb2F0IHAzID0gcmF5RGlzdFsoaSArIDEpICUgcmF5c107CisgICAgICAgICAgICByYXlEaXN0W2ldID0gKHAxICsgcDIgKiAyICsgcDMpIC8gNDsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBDYWxjdWxhdGUgdGhlIG9wYWNpdHkgYWNjb3JkaW5nIHRvIHRoZSBkaXN0YW5jZSBhbmQgZmFsbG9mZiByYXRpby4KKyAqCisgKiBAcGFyYW0gZGlzdFJhdGlvIFRoZSBkaXN0YW5jZSByYXRpbyBvZiBjdXJyZW50IHNhbXBsZSBiZXR3ZWVuIHVtYnJhIGFuZAorICogICAgICAgICAgICAgICAgICBwZW51bWJyYSBhcmVhLgorICogQHBhcmFtIGRlbHRhRGlzdCBUaGUgZGlzdGFuY2UgYmV0d2VlbiBjdXJyZW50IHNhbXBsZSB0byB0aGUgcGVudW1icmEgYXJlYS4KKyAqIEByZXR1cm4gVGhlIG9wYWNpdHkgYWNjb3JkaW5nIHRvIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHVtYnJhIGFuZCBwZW51bWJyYS4KKyAqLworZmxvYXQgU3BvdFNoYWRvdzo6Y2FsY3VsYXRlT3BhY2l0eShmbG9hdCBkaXN0UmF0aW8sIGZsb2F0IGRlbHRhRGlzdCkgeworICAgIC8vIFRPRE86IEV4cGVyaW1lbnQgb24gdGhlIG9wYWNpdHkgY2FsY3VsYXRpb24uCisgICAgZmxvYXQgZmFsbG9mZlJhdGlvID0gMSArIGRlbHRhRGlzdCAqIGRlbHRhRGlzdDsKKyAgICByZXR1cm4gKGRpc3RSYXRpbyArIDEgLSAxIC8gZmFsbG9mZlJhdGlvKSAvIDI7Cit9CisKKy8qKgorICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgdmVydGV4IHdlIHdpbGwgY3JlYXRlIGdpdmVuIGEgbnVtYmVyIG9mIHJheXMgYW5kIGxheWVycworICoKKyAqIEBwYXJhbSByYXlzIG51bWJlciBvZiBwb2ludHMgYXJvdW5kIHRoZSBwb2x5Z29ucyB5b3Ugd2FudAorICogQHBhcmFtIGxheWVycyBudW1iZXIgb2YgbGF5ZXJzIG9mIHRyaWFuZ2xlIHN0cmlwcyB5b3UgbmVlZAorICogQHJldHVybiBudW1iZXIgb2YgdmVydGV4IChtdWx0aXBseSBieSAzIGZvciBudW1iZXIgb2YgZmxvYXRzKQorICovCitpbnQgU3BvdFNoYWRvdzo6Z2V0U3RyaXBTaXplKGludCByYXlzLCBpbnQgbGF5ZXJzKSB7CisgICAgcmV0dXJuICAoMiArIHJheXMgKyAoKGxheWVycykgKiAyICogKHJheXMgKyAxKSkpOworfQorCit9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworCisKKwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1Nwb3RTaGFkb3cuaCBiL2xpYnMvaHd1aS9TcG90U2hhZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhkYjQzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvU3BvdFNoYWRvdy5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSFdVSV9TUE9UX1NIQURPV19ICisjZGVmaW5lIEFORFJPSURfSFdVSV9TUE9UX1NIQURPV19ICisKKyNpbmNsdWRlICJEZWJ1Zy5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgIlZlcnRleEJ1ZmZlci5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgdWlyZW5kZXJlciB7CisKK2NsYXNzIFNwb3RTaGFkb3cgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVNwb3RTaGFkb3coY29uc3QgVmVjdG9yMyogcG9seSwgaW50IHBvbHlMZW5ndGgsCisgICAgICAgICAgICBjb25zdCBWZWN0b3IzJiBsaWdodENlbnRlciwgZmxvYXQgbGlnaHRTaXplLCBpbnQgbGlnaHRWZXJ0ZXhDb3VudCwKKyAgICAgICAgICAgIGludCByYXlzLCBpbnQgbGF5ZXJzLCBmbG9hdCBzdHJlbmd0aCwgVmVydGV4QnVmZmVyJiByZXRTdHJpcHMpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVTcG90U2hhZG93KGNvbnN0IFZlY3RvcjMqIGxpZ2h0UG9seSwgaW50IGxpZ2h0UG9seUxlbmd0aCwKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjMmIGxpZ2h0Q2VudGVyLCBjb25zdCBWZWN0b3IzKiBwb2x5LCBpbnQgcG9seUxlbmd0aCwKKyAgICAgICAgICAgIGludCByYXlzLCBpbnQgbGF5ZXJzLCBmbG9hdCBzdHJlbmd0aCwgVmVydGV4QnVmZmVyJiByZXRzdHJpcHMpOworCisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpZ2h0UG9seWdvbihpbnQgcG9pbnRzLCBjb25zdCBWZWN0b3IzJiBsaWdodENlbnRlciwKKyAgICAgICAgICAgIGZsb2F0IHNpemUsIFZlY3RvcjMqIHJldCk7CisKKyAgICBzdGF0aWMgaW50ICBnZXRTdHJpcFNpemUoaW50IHJheXMsIGludCBsYXllcnMpOworICAgIHN0YXRpYyB2b2lkIHNtb290aFBvbHlnb24oaW50IGxldmVsLCBpbnQgcmF5cywgZmxvYXQqIHJheURpc3QpOworICAgIHN0YXRpYyBmbG9hdCBjYWxjdWxhdGVPcGFjaXR5KGZsb2F0IGpmLCBmbG9hdCBkZWx0YURpc3QpOworICAgIHN0YXRpYyBmbG9hdCByYXlJbnRlcnNlY3RQb2x5KGNvbnN0IFZlY3RvcjIqIHBvbHksIGludCBwb2x5TGVuZ3RoLAorICAgICAgICAgICAgY29uc3QgVmVjdG9yMiYgcG9pbnQsIGZsb2F0IGR4LCBmbG9hdCBkeSk7CisKKyAgICBzdGF0aWMgVmVjdG9yMiBjZW50cm9pZDJkKGNvbnN0IFZlY3RvcjIqIHBvbHksIGludCBwb2x5TGVuZ3RoKTsKKworICAgIHN0YXRpYyB2b2lkIHhzb3J0KFZlY3RvcjIqIHBvaW50cywgaW50IHBvaW50c0xlbmd0aCk7CisgICAgc3RhdGljIGludCBodWxsKFZlY3RvcjIqIHBvaW50cywgaW50IHBvaW50c0xlbmd0aCwgVmVjdG9yMiogcmV0UG9seSk7CisgICAgc3RhdGljIGJvb2wgcmlnaHRUdXJuKGRvdWJsZSBheCwgZG91YmxlIGF5LCBkb3VibGUgYngsIGRvdWJsZSBieSwgZG91YmxlIGN4LCBkb3VibGUgY3kpOworICAgIHN0YXRpYyBpbnQgaW50ZXJzZWN0aW9uKFZlY3RvcjIqIHBvbHkxLCBpbnQgcG9seTFsZW5ndGgsIFZlY3RvcjIqIHBvbHkyLCBpbnQgcG9seTJsZW5ndGgpOworICAgIHN0YXRpYyB2b2lkIHNvcnQoVmVjdG9yMiogcG9seSwgaW50IHBvbHlMZW5ndGgsIGNvbnN0IFZlY3RvcjImIGNlbnRlcik7CisKKyAgICBzdGF0aWMgZmxvYXQgYW5nbGUoY29uc3QgVmVjdG9yMiYgcG9pbnQsIGNvbnN0IFZlY3RvcjImIGNlbnRlcik7CisgICAgc3RhdGljIHZvaWQgc3dhcChWZWN0b3IyKiBwb2ludHMsIGludCBpLCBpbnQgaik7CisgICAgc3RhdGljIHZvaWQgcXVpY2tzb3J0Q2lyYyhWZWN0b3IyKiBwb2ludHMsIGludCBsb3csIGludCBoaWdoLCBjb25zdCBWZWN0b3IyJiBjZW50ZXIpOworICAgIHN0YXRpYyB2b2lkIHF1aWNrc29ydFgoVmVjdG9yMiogcG9pbnRzLCBpbnQgbG93LCBpbnQgaGlnaCk7CisKKyAgICBzdGF0aWMgYm9vbCB0ZXN0UG9pbnRJbnNpZGVQb2x5Z29uKGNvbnN0IFZlY3RvcjIgdGVzdFBvaW50LCBjb25zdCBWZWN0b3IyKiBwb2x5LCBpbnQgbGVuKTsKKyAgICBzdGF0aWMgdm9pZCBtYWtlQ2xvY2t3aXNlKFZlY3RvcjIqIHBvbHlnb24sIGludCBsZW4pOworICAgIHN0YXRpYyBib29sIGlzQ2xvY2t3aXNlKFZlY3RvcjIqIHBvbHlnb24sIGludCBsZW4pOworICAgIHN0YXRpYyB2b2lkIHJldmVyc2UoVmVjdG9yMiogcG9seWdvbiwgaW50IGxlbik7CisgICAgc3RhdGljIGlubGluZSBib29sIGxpbmVJbnRlcnNlY3Rpb24oZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyLAorICAgICAgICAgICAgZG91YmxlIHgzLCBkb3VibGUgeTMsIGRvdWJsZSB4NCwgZG91YmxlIHk0LCBWZWN0b3IyJiByZXQpOworCisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVUcmlhbmdsZVN0cmlwKGNvbnN0IFZlY3RvcjIqIHBlbnVtYnJhLCBpbnQgcGVudW1icmFMZW5ndGgsCisgICAgICAgICAgICBjb25zdCBWZWN0b3IyKiB1bWJyYSwgaW50IHVtYnJhTGVuZ3RoLCBpbnQgcmF5cywgaW50IGxheWVycywKKyAgICAgICAgICAgIGZsb2F0IHN0cmVuZ3RoLCBWZXJ0ZXhCdWZmZXImIHJldHN0cmlwcyk7CisKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIEVQU0lMT04gPSAxZS03OworfTsgLy8gU3BvdFNoYWRvdworCit9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfSFdVSV9TUE9UX1NIQURPV19ICmRpZmYgLS1naXQgYS9saWJzL2h3dWkvU3RhdGVmdWxCYXNlUmVuZGVyZXIuY3BwIGIvbGlicy9od3VpL1N0YXRlZnVsQmFzZVJlbmRlcmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWY2Y2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL1N0YXRlZnVsQmFzZVJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDI0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxTa0NhbnZhcy5oPgorCisjaW5jbHVkZSAiU3RhdGVmdWxCYXNlUmVuZGVyZXIuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIHVpcmVuZGVyZXIgeworCitTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6U3RhdGVmdWxCYXNlUmVuZGVyZXIoKSA6CisgICAgICAgIG1EaXJ0eUNsaXAoZmFsc2UpLCBtV2lkdGgoLTEpLCBtSGVpZ2h0KC0xKSwKKyAgICAgICAgbVNhdmVDb3VudCgxKSwgbUZpcnN0U25hcHNob3QobmV3IFNuYXBzaG90KSwgbVNuYXBzaG90KG1GaXJzdFNuYXBzaG90KSB7Cit9CisKK3ZvaWQgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OmluaXRpYWxpemVTYXZlU3RhY2soZmxvYXQgY2xpcExlZnQsIGZsb2F0IGNsaXBUb3AsCisgICAgICAgIGZsb2F0IGNsaXBSaWdodCwgZmxvYXQgY2xpcEJvdHRvbSkgeworICAgIG1TbmFwc2hvdCA9IG5ldyBTbmFwc2hvdChtRmlyc3RTbmFwc2hvdCwKKyAgICAgICAgICAgIFNrQ2FudmFzOjprTWF0cml4X1NhdmVGbGFnIHwgU2tDYW52YXM6OmtDbGlwX1NhdmVGbGFnKTsKKyAgICBtU25hcHNob3QtPnNldENsaXAoY2xpcExlZnQsIGNsaXBUb3AsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7CisgICAgbVNuYXBzaG90LT5mYm8gPSBnZXRUYXJnZXRGYm8oKTsKKyAgICBtU2F2ZUNvdW50ID0gMTsKK30KKwordm9pZCBTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6aW5pdGlhbGl6ZVZpZXdwb3J0KGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgIG1XaWR0aCA9IHdpZHRoOworICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisKKyAgICBtRmlyc3RTbmFwc2hvdC0+aGVpZ2h0ID0gaGVpZ2h0OworICAgIG1GaXJzdFNuYXBzaG90LT52aWV3cG9ydC5zZXQoMCwgMCwgd2lkdGgsIGhlaWdodCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNhdmUgKGxheWVyKQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKioKKyAqIE5vbi12aXJ0dWFsIGltcGxlbWVudGF0aW9uIG9mIHNhdmUsIGd1YXJhbnRlZWQgdG8gc2F2ZSB3aXRob3V0IHNpZGUtZWZmZWN0cworICoKKyAqIFRoZSBhcHByb2FjaCBoZXJlIGFuZCBpbiByZXN0b3JlU25hcHNob3QoKSwgYWxsb3dzIHN1YmNsYXNzZXMgdG8gZGlyZWN0bHkgbWFuaXB1bGF0ZSB0aGUgc2F2ZQorICogc3RhY2ssIGFuZCBlbnN1cmVzIHJlc3RvcmVUb0NvdW50KCkgZG9lc24ndCBjYWxsIGJhY2sgaW50byBzdWJjbGFzcyBvdmVycmlkZXMuCisgKi8KK2ludCBTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6c2F2ZVNuYXBzaG90KGludCBmbGFncykgeworICAgIG1TbmFwc2hvdCA9IG5ldyBTbmFwc2hvdChtU25hcHNob3QsIGZsYWdzKTsKKyAgICByZXR1cm4gbVNhdmVDb3VudCsrOworfQorCitpbnQgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OnNhdmUoaW50IGZsYWdzKSB7CisgICAgcmV0dXJuIHNhdmVTbmFwc2hvdChmbGFncyk7Cit9CisKKy8qKgorICogTm9uLXZpcnR1YWwgaW1wbGVtZW50YXRpb24gb2YgcmVzdG9yZSwgZ3VhcmFudGVlZCB0byByZXN0b3JlIHdpdGhvdXQgc2lkZS1lZmZlY3RzLgorICovCit2b2lkIFN0YXRlZnVsQmFzZVJlbmRlcmVyOjpyZXN0b3JlU25hcHNob3QoKSB7CisgICAgc3A8U25hcHNob3Q+IHRvUmVtb3ZlID0gbVNuYXBzaG90OworICAgIHNwPFNuYXBzaG90PiB0b1Jlc3RvcmUgPSBtU25hcHNob3QtPnByZXZpb3VzOworCisgICAgbVNhdmVDb3VudC0tOworICAgIG1TbmFwc2hvdCA9IHRvUmVzdG9yZTsKKworICAgIC8vIHN1YmNsYXNzIGhhbmRsZXMgcmVzdG9yZSBpbXBsZW1lbnRhdGlvbgorICAgIG9uU25hcHNob3RSZXN0b3JlZCgqdG9SZW1vdmUsICp0b1Jlc3RvcmUpOworfQorCit2b2lkIFN0YXRlZnVsQmFzZVJlbmRlcmVyOjpyZXN0b3JlKCkgeworICAgIGlmIChtU2F2ZUNvdW50ID4gMSkgeworICAgICAgICByZXN0b3JlU25hcHNob3QoKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OnJlc3RvcmVUb0NvdW50KGludCBzYXZlQ291bnQpIHsKKyAgICBpZiAoc2F2ZUNvdW50IDwgMSkgc2F2ZUNvdW50ID0gMTsKKworICAgIHdoaWxlIChtU2F2ZUNvdW50ID4gc2F2ZUNvdW50KSB7CisgICAgICAgIHJlc3RvcmVTbmFwc2hvdCgpOworICAgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTWF0cml4CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3ZvaWQgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OmdldE1hdHJpeChTa01hdHJpeCogbWF0cml4KSBjb25zdCB7CisgICAgbVNuYXBzaG90LT50cmFuc2Zvcm0tPmNvcHlUbygqbWF0cml4KTsKK30KKwordm9pZCBTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6dHJhbnNsYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHopIHsKKyAgICBtU25hcHNob3QtPnRyYW5zZm9ybS0+dHJhbnNsYXRlKGR4LCBkeSwgZHopOworfQorCit2b2lkIFN0YXRlZnVsQmFzZVJlbmRlcmVyOjpyb3RhdGUoZmxvYXQgZGVncmVlcykgeworICAgIG1TbmFwc2hvdC0+dHJhbnNmb3JtLT5yb3RhdGUoZGVncmVlcywgMC4wZiwgMC4wZiwgMS4wZik7Cit9CisKK3ZvaWQgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OnNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkgeworICAgIG1TbmFwc2hvdC0+dHJhbnNmb3JtLT5zY2FsZShzeCwgc3ksIDEuMGYpOworfQorCit2b2lkIFN0YXRlZnVsQmFzZVJlbmRlcmVyOjpza2V3KGZsb2F0IHN4LCBmbG9hdCBzeSkgeworICAgIG1TbmFwc2hvdC0+dHJhbnNmb3JtLT5za2V3KHN4LCBzeSk7Cit9CisKK3ZvaWQgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OnNldE1hdHJpeChjb25zdCBTa01hdHJpeCogbWF0cml4KSB7CisgICAgaWYgKG1hdHJpeCkgeworICAgICAgICBtU25hcHNob3QtPnRyYW5zZm9ybS0+bG9hZCgqbWF0cml4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtU25hcHNob3QtPnRyYW5zZm9ybS0+bG9hZElkZW50aXR5KCk7CisgICAgfQorfQorCit2b2lkIFN0YXRlZnVsQmFzZVJlbmRlcmVyOjpzZXRNYXRyaXgoY29uc3QgTWF0cml4NCYgbWF0cml4KSB7CisgICAgbVNuYXBzaG90LT50cmFuc2Zvcm0tPmxvYWQobWF0cml4KTsKK30KKwordm9pZCBTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6Y29uY2F0TWF0cml4KGNvbnN0IFNrTWF0cml4KiBtYXRyaXgpIHsKKyAgICBtYXQ0IHRyYW5zZm9ybSgqbWF0cml4KTsKKyAgICBtU25hcHNob3QtPnRyYW5zZm9ybS0+bXVsdGlwbHkodHJhbnNmb3JtKTsKK30KKwordm9pZCBTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6Y29uY2F0TWF0cml4KGNvbnN0IE1hdHJpeDQmIG1hdHJpeCkgeworICAgIG1TbmFwc2hvdC0+dHJhbnNmb3JtLT5tdWx0aXBseShtYXRyaXgpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDbGlwCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgU3RhdGVmdWxCYXNlUmVuZGVyZXI6OmNsaXBSZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tSZWdpb246Ok9wIG9wKSB7CisgICAgaWYgKENDX0xJS0VMWShjdXJyZW50VHJhbnNmb3JtKCktPnJlY3RUb1JlY3QoKSkpIHsKKyAgICAgICAgbURpcnR5Q2xpcCB8PSBtU25hcHNob3QtPmNsaXAobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBvcCk7CisgICAgICAgIHJldHVybiAhbVNuYXBzaG90LT5jbGlwUmVjdC0+aXNFbXB0eSgpOworICAgIH0KKworICAgIFNrUGF0aCBwYXRoOworICAgIHBhdGguYWRkUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisgICAgcmV0dXJuIFN0YXRlZnVsQmFzZVJlbmRlcmVyOjpjbGlwUGF0aCgmcGF0aCwgb3ApOworfQorCitib29sIFN0YXRlZnVsQmFzZVJlbmRlcmVyOjpjbGlwUGF0aChjb25zdCBTa1BhdGgqIHBhdGgsIFNrUmVnaW9uOjpPcCBvcCkgeworICAgIFNrTWF0cml4IHRyYW5zZm9ybTsKKyAgICBjdXJyZW50VHJhbnNmb3JtKCktPmNvcHlUbyh0cmFuc2Zvcm0pOworCisgICAgU2tQYXRoIHRyYW5zZm9ybWVkOworICAgIHBhdGgtPnRyYW5zZm9ybSh0cmFuc2Zvcm0sICZ0cmFuc2Zvcm1lZCk7CisKKyAgICBTa1JlZ2lvbiBjbGlwOworICAgIGlmICghbVNuYXBzaG90LT5wcmV2aW91cy0+Y2xpcFJlZ2lvbi0+aXNFbXB0eSgpKSB7CisgICAgICAgIGNsaXAuc2V0UmVnaW9uKCptU25hcHNob3QtPnByZXZpb3VzLT5jbGlwUmVnaW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobVNuYXBzaG90LT5wcmV2aW91cyA9PSBmaXJzdFNuYXBzaG90KCkpIHsKKyAgICAgICAgICAgIGNsaXAuc2V0UmVjdCgwLCAwLCBnZXRXaWR0aCgpLCBnZXRIZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWN0KiBib3VuZHMgPSBtU25hcHNob3QtPnByZXZpb3VzLT5jbGlwUmVjdDsKKyAgICAgICAgICAgIGNsaXAuc2V0UmVjdChib3VuZHMtPmxlZnQsIGJvdW5kcy0+dG9wLCBib3VuZHMtPnJpZ2h0LCBib3VuZHMtPmJvdHRvbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTa1JlZ2lvbiByZWdpb247CisgICAgcmVnaW9uLnNldFBhdGgodHJhbnNmb3JtZWQsIGNsaXApOworCisgICAgbURpcnR5Q2xpcCB8PSBtU25hcHNob3QtPmNsaXBSZWdpb25UcmFuc2Zvcm1lZChyZWdpb24sIG9wKTsKKyAgICByZXR1cm4gIW1TbmFwc2hvdC0+Y2xpcFJlY3QtPmlzRW1wdHkoKTsKK30KKworYm9vbCBTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6Y2xpcFJlZ2lvbihjb25zdCBTa1JlZ2lvbiogcmVnaW9uLCBTa1JlZ2lvbjo6T3Agb3ApIHsKKyAgICBtRGlydHlDbGlwIHw9IG1TbmFwc2hvdC0+Y2xpcFJlZ2lvblRyYW5zZm9ybWVkKCpyZWdpb24sIG9wKTsKKyAgICByZXR1cm4gIW1TbmFwc2hvdC0+Y2xpcFJlY3QtPmlzRW1wdHkoKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUXVpY2sgUmVqZWN0aW9uCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8qKgorICogQ2FsY3VsYXRlcyB3aGV0aGVyIGNvbnRlbnQgZHJhd24gd2l0aGluIHRoZSBwYXNzZWQgYm91bmRzIHdvdWxkIGJlIG91dHNpZGUgb2YsIG9yIGludGVyc2VjdCB3aXRoCisgKiB0aGUgY2xpcFJlY3QuIERvZXMgbm90IG1vZGlmeSB0aGUgc2Npc3Nvci4KKyAqCisgKiBAcGFyYW0gY2xpcFJlcXVpcmVkIGlmIG5vdCBudWxsLCB3aWxsIGJlIHNldCB0byB0cnVlIGlmIGVsZW1lbnQgaW50ZXJzZWN0cyBjbGlwCisgKiAgICAgICAgIChhbmQgd2Fzbid0IHJlamVjdGVkKQorICoKKyAqIEBwYXJhbSBzbmFwT3V0IGlmIHNldCwgdGhlIGdlb21ldHJ5IHdpbGwgYmUgdHJlYXRlZCBhcyBoYXZpbmcgYW4gQUEgcmFtcC4KKyAqICAgICAgICAgU2VlIFJlY3Q6OnNuYXBHZW9tZXRyeVRvUGl4ZWxCb3VuZGFyaWVzKCkKKyAqLworYm9vbCBTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6Y2FsY3VsYXRlUXVpY2tSZWplY3RGb3JTY2lzc29yKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKKyAgICAgICAgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgYm9vbCogY2xpcFJlcXVpcmVkLCBib29sIHNuYXBPdXQpIGNvbnN0IHsKKyAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSB8fCBib3R0b20gPD0gdG9wIHx8IHJpZ2h0IDw9IGxlZnQpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUmVjdCByKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgY3VycmVudFRyYW5zZm9ybSgpLT5tYXBSZWN0KHIpOworICAgIHIuc25hcEdlb21ldHJ5VG9QaXhlbEJvdW5kYXJpZXMoc25hcE91dCk7CisKKyAgICBSZWN0IGNsaXBSZWN0KCpjdXJyZW50Q2xpcFJlY3QoKSk7CisgICAgY2xpcFJlY3Quc25hcFRvUGl4ZWxCb3VuZGFyaWVzKCk7CisKKyAgICBpZiAoIWNsaXBSZWN0LmludGVyc2VjdHMocikpIHJldHVybiB0cnVlOworCisgICAgLy8gY2xpcCBpcyByZXF1aXJlZCBpZiBnZW9tZXRyeSBpbnRlcnNlY3RzIGNsaXAgcmVjdAorICAgIGlmIChjbGlwUmVxdWlyZWQpICpjbGlwUmVxdWlyZWQgPSAhY2xpcFJlY3QuY29udGFpbnMocik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIFJldHVybnMgZmFsc2UgaWYgZHJhd2luZyB3b24ndCBiZSBjbGlwcGVkIG91dC4KKyAqCisgKiBNYWtlcyB0aGUgZGVjaXNpb24gY29uc2VydmF0aXZlbHksIGJ5IHJvdW5kaW5nIG91dCB0aGUgbWFwcGVkIHJlY3QgYmVmb3JlIGNvbXBhcmluZyB3aXRoIHRoZQorICogY2xpcFJlY3QuIFRvIGJlIHVzZWQgd2hlbiBwZXJmZWN0LCBwaXhlbCBhY2N1cmFjeSBpcyBub3QgcG9zc2libGUgKGVzcC4gd2l0aCB0ZXNzZWxsYXRpb24pIGJ1dAorICogcmVqZWN0aW9uIGlzIHN0aWxsIGRlc2lyZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiwgdW5saWtlIHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yLCBzaG91bGQgYmUgdXNlZCB3aGVyZSBwcmVjaXNlIGdlb21ldHJ5IGluZm9ybWF0aW9uCisgKiBpc24ndCBrbm93biAoZXNwLiB3aGVuIGdlb21ldHJ5IGFkanVzdHMgYmFzZWQgb24gc2NhbGUpLiBHZW5lcmFsbHksIHRoaXMgd2lsbCBiZSBmaXJzdCBwYXNzCisgKiByZWplY3Rpb24gd2hlcmUgcHJlY2lzZSByZWplY3Rpb24gaXNuJ3QgaW1wb3J0YW50LCBvciBwcmVjaXNlIGluZm9ybWF0aW9uIGlzbid0IGF2YWlsYWJsZS4KKyAqLworYm9vbCBTdGF0ZWZ1bEJhc2VSZW5kZXJlcjo6cXVpY2tSZWplY3RDb25zZXJ2YXRpdmUoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLAorICAgICAgICBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tKSBjb25zdCB7CisgICAgaWYgKG1TbmFwc2hvdC0+aXNJZ25vcmVkKCkgfHwgYm90dG9tIDw9IHRvcCB8fCByaWdodCA8PSBsZWZ0KSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFJlY3QgcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGN1cnJlbnRUcmFuc2Zvcm0oKS0+bWFwUmVjdChyKTsKKyAgICByLnJvdW5kT3V0KCk7IC8vIHJvdW5kZWQgb3V0IHRvIGJlIGNvbnNlcnZhdGl2ZQorCisgICAgUmVjdCBjbGlwUmVjdCgqY3VycmVudENsaXBSZWN0KCkpOworICAgIGNsaXBSZWN0LnNuYXBUb1BpeGVsQm91bmRhcmllcygpOworCisgICAgaWYgKCFjbGlwUmVjdC5pbnRlcnNlY3RzKHIpKSByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworfTsgLy8gbmFtZXNwYWNlIHVpcmVuZGVyZXIKK307IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvU3RhdGVmdWxCYXNlUmVuZGVyZXIuaCBiL2xpYnMvaHd1aS9TdGF0ZWZ1bEJhc2VSZW5kZXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzRiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvU3RhdGVmdWxCYXNlUmVuZGVyZXIuaApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IV1VJX1NUQVRFRlVMX0JBU0VfUkVOREVSRVJfSAorI2RlZmluZSBBTkRST0lEX0hXVUlfU1RBVEVGVUxfQkFTRV9SRU5ERVJFUl9ICisKKyNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CisKKyNpbmNsdWRlICJSZW5kZXJlci5oIgorI2luY2x1ZGUgIlNuYXBzaG90LmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSB1aXJlbmRlcmVyIHsKKworLyoqCisgKiBBYnN0cmFjdCBSZW5kZXJlciBzdWJjbGFzcywgd2hpY2ggaW1wbGVtZW50cyBDYW52YXMgc3RhdGUgbWV0aG9kcy4KKyAqCisgKiBNYW5hZ2VzIHRoZSBTbmFwc2hvdCBzdGFjaywgaW1wbGVtZW50aW5nIG1hdHJpeCwgc2F2ZS9yZXN0b3JlLCBhbmQgY2xpcHBpbmcgbWV0aG9kcyBpbiB0aGUKKyAqIFJlbmRlcmVyIGludGVyZmFjZS4gRHJhd2luZyBhbmQgcmVjb3JkaW5nIGNsYXNzZXMgdGhhdCBleHRlbmQgU3RhdGVmdWxCYXNlUmVuZGVyZXIgd2lsbCBoYXZlCisgKiBkaWZmZXJlbnQgdXNlIGNhc2VzOgorICoKKyAqIERyYXdpbmcgc3ViY2xhc3NlcyAoaS5lLiBPcGVuR0xSZW5kZXJlcikgY2FuIHF1ZXJ5IGF0dHJpYnV0ZXMgKHN1Y2ggYXMgdHJhbnNmb3JtKSBvciBob29rIGludG8KKyAqIGNoYW5nZXMgKGUuZy4gc2F2ZS9yZXN0b3JlKSB3aXRoIG1pbmltYWwgc3VyZmFjZSBhcmVhIGZvciBtYW5pcHVsYXRpbmcgdGhlIHN0YWNrIGl0c2VsZi4KKyAqCisgKiBSZWNvcmRpbmcgc3ViY2xhc3NlcyAoaS5lLiBEaXNwbGF5TGlzdFJlbmRlcmVyKSBjYW4gYm90aCByZWNvcmQgYW5kIHBhc3MgdGhyb3VnaCBzdGF0ZSBvcGVyYXRpb25zCisgKiB0byBTdGF0ZWZ1bEJhc2VSZW5kZXJlciwgc28gdGhhdCBub3Qgb25seSB3aWxsIHF1ZXJ5aW5nIG9wZXJhdGlvbnMgd29yayAoZ2V0Q2xpcC9NYXRyaXgpLCBidXQgc28KKyAqIHRoYXQgcXVpY2tSZWplY3Rpb24gY2FuIGFsc28gYmUgdXNlZC4KKyAqLworY2xhc3MgU3RhdGVmdWxCYXNlUmVuZGVyZXIgOiBwdWJsaWMgUmVuZGVyZXIgeworcHVibGljOgorICAgIFN0YXRlZnVsQmFzZVJlbmRlcmVyKCk7CisKKyAgICB2aXJ0dWFsIHN0YXR1c190IHByZXBhcmUoYm9vbCBvcGFxdWUpIHsKKyAgICAgICAgcmV0dXJuIHByZXBhcmVEaXJ0eSgwLjBmLCAwLjBmLCBtV2lkdGgsIG1IZWlnaHQsIG9wYXF1ZSk7CisgICAgfQorICAgIHZvaWQgaW5pdGlhbGl6ZVZpZXdwb3J0KGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgdm9pZCBpbml0aWFsaXplU2F2ZVN0YWNrKGZsb2F0IGNsaXBMZWZ0LCBmbG9hdCBjbGlwVG9wLCBmbG9hdCBjbGlwUmlnaHQsIGZsb2F0IGNsaXBCb3R0b20pOworCisgICAgLy8gZ2V0dGVycworICAgIGJvb2wgaGFzUmVjdFRvUmVjdFRyYW5zZm9ybSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIENDX0xJS0VMWShjdXJyZW50VHJhbnNmb3JtKCktPnJlY3RUb1JlY3QoKSk7CisgICAgfQorCisgICAgLy8gU2F2ZSAobGF5ZXIpCisgICAgdmlydHVhbCBpbnQgZ2V0U2F2ZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbVNhdmVDb3VudDsgfQorICAgIHZpcnR1YWwgaW50IHNhdmUoaW50IGZsYWdzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOworICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlVG9Db3VudChpbnQgc2F2ZUNvdW50KTsKKyAgICAvL3ZpcnR1YWwgaW50IHNhdmVMYXllcihmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCisgICAgLy8gICAgICAgIGludCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBpbnQgZmxhZ3MpOworCisgICAgLy8gTWF0cml4CisgICAgdmlydHVhbCB2b2lkIGdldE1hdHJpeChTa01hdHJpeCogb3V0TWF0cml4KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHogPSAwLjBmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGRlZ3JlZXMpOworICAgIHZpcnR1YWwgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpOworICAgIHZpcnR1YWwgdm9pZCBza2V3KGZsb2F0IHN4LCBmbG9hdCBzeSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWF0cml4KGNvbnN0IFNrTWF0cml4KiBtYXRyaXgpOworICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0IE1hdHJpeDQmIG1hdHJpeCk7IC8vIGludGVybmFsIG9ubHkgY29udmVuaWVuY2UgbWV0aG9kCisgICAgdmlydHVhbCB2b2lkIGNvbmNhdE1hdHJpeChjb25zdCBTa01hdHJpeCogbWF0cml4KTsKKyAgICB2b2lkIGNvbmNhdE1hdHJpeChjb25zdCBNYXRyaXg0JiBtYXRyaXgpOyAvLyBpbnRlcm5hbCBvbmx5IGNvbnZlbmllbmNlIG1ldGhvZAorCisgICAgLy8gQ2xpcAorICAgIGNvbnN0IFJlY3QmIGdldENsaXBCb3VuZHMoKSBjb25zdCB7IHJldHVybiBtU25hcHNob3QtPmdldExvY2FsQ2xpcCgpOyB9CisgICAgdmlydHVhbCBib29sIHF1aWNrUmVqZWN0Q29uc2VydmF0aXZlKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2xpcFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1JlZ2lvbjo6T3Agb3ApOworICAgIHZpcnR1YWwgYm9vbCBjbGlwUGF0aChjb25zdCBTa1BhdGgqIHBhdGgsIFNrUmVnaW9uOjpPcCBvcCk7CisgICAgdmlydHVhbCBib29sIGNsaXBSZWdpb24oY29uc3QgU2tSZWdpb24qIHJlZ2lvbiwgU2tSZWdpb246Ok9wIG9wKTsKKworcHJvdGVjdGVkOgorICAgIGludCBnZXRXaWR0aCgpIHsgcmV0dXJuIG1XaWR0aDsgfQorICAgIGludCBnZXRIZWlnaHQoKSB7IHJldHVybiBtSGVpZ2h0OyB9CisKKyAgICAvLyBTYXZlCisgICAgaW50IHNhdmVTbmFwc2hvdChpbnQgZmxhZ3MpOworICAgIHZvaWQgcmVzdG9yZVNuYXBzaG90KCk7CisKKyAgICAvLyBhbGxvd3Mgc3ViY2xhc3NlcyB0byBjb250cm9sIHdoYXQgdmFsdWUgaXMgc3RvcmVkIGluIHNuYXBzaG90J3MgZmJvIGZpZWxkIGluCisgICAgLy8gaW5pdGlhbGl6ZVNhdmVTdGFjaworICAgIHZpcnR1YWwgR0x1aW50IGdldFRhcmdldEZibygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8vIENsaXAKKyAgICBib29sIGNhbGN1bGF0ZVF1aWNrUmVqZWN0Rm9yU2Npc3NvcihmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCisgICAgICAgICAgICBib29sKiBjbGlwUmVxdWlyZWQsIGJvb2wgc25hcE91dCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQganVzdCBhZnRlciBhIHJlc3RvcmUgaGFzIG9jY3VycmVkLiBUaGUgJ3JlbW92ZWQnIHNuYXBzaG90IHBvcHBlZCBmcm9tIHRoZSBzdGFjaywKKyAgICAgKiAncmVzdG9yZWQnIHNuYXBzaG90IGhhcyBiZWNvbWUgdGhlIHRvcC9jdXJyZW50LgorICAgICAqCisgICAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gaGFuZGxlIGxheWVyIHJlc3RvcmF0aW9uCisgICAgICovCisgICAgdmlydHVhbCB2b2lkIG9uU25hcHNob3RSZXN0b3JlZChjb25zdCBTbmFwc2hvdCYgcmVtb3ZlZCwgY29uc3QgU25hcHNob3QmIHJlc3RvcmVkKSB7fTsKKworICAgIGlubGluZSBjb25zdCBSZWN0KiBjdXJyZW50Q2xpcFJlY3QoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtU25hcHNob3QtPmNsaXBSZWN0OworICAgIH0KKworICAgIGlubGluZSBjb25zdCBtYXQ0KiBjdXJyZW50VHJhbnNmb3JtKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbVNuYXBzaG90LT50cmFuc2Zvcm07CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0IFNuYXBzaG90KiBjdXJyZW50U25hcHNob3QoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtU25hcHNob3QgIT0gTlVMTCA/IG1TbmFwc2hvdC5nZXQoKSA6IG1GaXJzdFNuYXBzaG90LmdldCgpOworICAgIH0KKworICAgIGlubGluZSBjb25zdCBTbmFwc2hvdCogZmlyc3RTbmFwc2hvdCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1GaXJzdFNuYXBzaG90LmdldCgpOworICAgIH0KKworICAgIC8vIGluZGljaXRlcyB0aGF0IHRoZSBjbGlwIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSBpdCB3YXMgY29uc3VtZWQKKyAgICBib29sIG1EaXJ0eUNsaXA7CisKK3ByaXZhdGU6CisgICAgLy8gRGltZW5zaW9ucyBvZiB0aGUgZHJhd2luZyBzdXJmYWNlCisgICAgaW50IG1XaWR0aCwgbUhlaWdodDsKKworICAgIC8vIE51bWJlciBvZiBzYXZlZCBzdGF0ZXMKKyAgICBpbnQgbVNhdmVDb3VudDsKKworICAgIC8vIEJhc2Ugc3RhdGUKKyAgICBzcDxTbmFwc2hvdD4gbUZpcnN0U25hcHNob3Q7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBDdXJyZW50IHN0YXRlCisgICAgLy8gVE9ETzogc2hvdWxkIGJlY29tZSBwcml2YXRlLCBvbmNlIGhvb2tzIG5lZWRlZCBieSBPcGVuR0xSZW5kZXJlciBhcmUgYWRkZWQKKyAgICBzcDxTbmFwc2hvdD4gbVNuYXBzaG90OworCit9OyAvLyBjbGFzcyBTdGF0ZWZ1bEJhc2VSZW5kZXJlcgorCit9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfSFdVSV9TVEFURUZVTF9CQVNFX1JFTkRFUkVSX0gKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9TdGVuY2lsLmNwcCBiL2xpYnMvaHd1aS9TdGVuY2lsLmNwcAppbmRleCAyNzY0NTIzLi44Y2U1N2RiIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvU3RlbmNpbC5jcHAKKysrIGIvbGlicy9od3VpL1N0ZW5jaWwuY3BwCkBAIC0zNSw3ICszNSw3IEBACiBTdGVuY2lsOjpTdGVuY2lsKCk6IG1TdGF0ZShrRGlzYWJsZWQpIHsKIH0KIAotdWludDMyX3QgU3RlbmNpbDo6Z2V0U3RlbmNpbFNpemUoKSB7Cit1aW50OF90IFN0ZW5jaWw6OmdldFN0ZW5jaWxTaXplKCkgewogICAgIHJldHVybiBTVEVOQ0lMX0JVRkZFUl9TSVpFOwogfQogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvU3RlbmNpbC5oIGIvbGlicy9od3VpL1N0ZW5jaWwuaAppbmRleCA4M2FkNjY4Li5jNWU1MTg2IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvU3RlbmNpbC5oCisrKyBiL2xpYnMvaHd1aS9TdGVuY2lsLmgKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgKiBSZXR1cm5zIHRoZSBkZXNpcmVkIHNpemUgZm9yIHRoZSBzdGVuY2lsIGJ1ZmZlci4gSWYgdGhlIHJldHVybmVkIHZhbHVlCiAgICAgICogaXMgMCwgdGhlbiBubyBzdGVuY2lsIGJ1ZmZlciBpcyByZXF1aXJlZC4KICAgICAgKi8KLSAgICBBTkRST0lEX0FQSSBzdGF0aWMgdWludDMyX3QgZ2V0U3RlbmNpbFNpemUoKTsKKyAgICBBTkRST0lEX0FQSSBzdGF0aWMgdWludDhfdCBnZXRTdGVuY2lsU2l6ZSgpOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgc21hbGxlc3Qgc3RlbmNpbCBmb3JtYXQgYWNjZXB0ZWQgYnkgcmVuZGVyIGJ1ZmZlcnMuCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvVGV4dERyb3BTaGFkb3dDYWNoZS5jcHAgYi9saWJzL2h3dWkvVGV4dERyb3BTaGFkb3dDYWNoZS5jcHAKaW5kZXggMGIyYzEzMC4uNGVlYzQ2MiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1RleHREcm9wU2hhZG93Q2FjaGUuY3BwCisrKyBiL2xpYnMvaHd1aS9UZXh0RHJvcFNoYWRvd0NhY2hlLmNwcApAQCAtMTQ3LDcgKzE0Nyw3IEBACiAvLyBDYWxsYmFja3MKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotdm9pZCBUZXh0RHJvcFNoYWRvd0NhY2hlOjpvcGVyYXRvcigpKFNoYWRvd1RleHQmIHRleHQsIFNoYWRvd1RleHR1cmUqJiB0ZXh0dXJlKSB7Cit2b2lkIFRleHREcm9wU2hhZG93Q2FjaGU6Om9wZXJhdG9yKCkoU2hhZG93VGV4dCYsIFNoYWRvd1RleHR1cmUqJiB0ZXh0dXJlKSB7CiAgICAgaWYgKHRleHR1cmUpIHsKICAgICAgICAgbVNpemUgLT0gdGV4dHVyZS0+Yml0bWFwU2l6ZTsKIApAQCAtMTY4LDcgKzE2OCw3IEBACiAgICAgbUNhY2hlLmNsZWFyKCk7CiB9CiAKLVNoYWRvd1RleHR1cmUqIFRleHREcm9wU2hhZG93Q2FjaGU6OmdldChTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciogdGV4dCwgdWludDMyX3QgbGVuLAorU2hhZG93VGV4dHVyZSogVGV4dERyb3BTaGFkb3dDYWNoZTo6Z2V0KGNvbnN0IFNrUGFpbnQqIHBhaW50LCBjb25zdCBjaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW4sCiAgICAgICAgIGludCBudW1HbHlwaHMsIGZsb2F0IHJhZGl1cywgY29uc3QgZmxvYXQqIHBvc2l0aW9ucykgewogICAgIFNoYWRvd1RleHQgZW50cnkocGFpbnQsIHJhZGl1cywgbGVuLCB0ZXh0LCBwb3NpdGlvbnMpOwogICAgIFNoYWRvd1RleHR1cmUqIHRleHR1cmUgPSBtQ2FjaGUuZ2V0KGVudHJ5KTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9UZXh0RHJvcFNoYWRvd0NhY2hlLmggYi9saWJzL2h3dWkvVGV4dERyb3BTaGFkb3dDYWNoZS5oCmluZGV4IDA0ZDczNTcuLjU0YjkzMGIgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9UZXh0RHJvcFNoYWRvd0NhY2hlLmgKKysrIGIvbGlicy9od3VpL1RleHREcm9wU2hhZG93Q2FjaGUuaApAQCAtMzgsNyArMzgsNyBAQAogICAgIH0KIAogICAgIC8vIGxlbiBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRleHQKLSAgICBTaGFkb3dUZXh0KFNrUGFpbnQqIHBhaW50LCBmbG9hdCByYWRpdXMsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogc3JjVGV4dCwKKyAgICBTaGFkb3dUZXh0KGNvbnN0IFNrUGFpbnQqIHBhaW50LCBmbG9hdCByYWRpdXMsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogc3JjVGV4dCwKICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMpOgogICAgICAgICAgICAgbGVuKGxlbiksIHJhZGl1cyhyYWRpdXMpLCBwb3NpdGlvbnMocG9zaXRpb25zKSB7CiAgICAgICAgIC8vIFRPRE86IFByb3BhZ2F0ZSB0aGlzIHRocm91Z2ggdGhlIEFQSSwgd2Ugc2hvdWxkIG5vdCBjYXN0IGhlcmUKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgICAqLwogICAgIHZvaWQgb3BlcmF0b3IoKShTaGFkb3dUZXh0JiB0ZXh0LCBTaGFkb3dUZXh0dXJlKiYgdGV4dHVyZSk7CiAKLSAgICBTaGFkb3dUZXh0dXJlKiBnZXQoU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIHVpbnQzMl90IGxlbiwKKyAgICBTaGFkb3dUZXh0dXJlKiBnZXQoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIHVpbnQzMl90IGxlbiwKICAgICAgICAgICAgIGludCBudW1HbHlwaHMsIGZsb2F0IHJhZGl1cywgY29uc3QgZmxvYXQqIHBvc2l0aW9ucyk7CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9UZXh0dXJlQ2FjaGUuY3BwIGIvbGlicy9od3VpL1RleHR1cmVDYWNoZS5jcHAKaW5kZXggZWQwYTc5YS4uNDY3ZjZjYSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1RleHR1cmVDYWNoZS5jcHAKKysrIGIvbGlicy9od3VpL1RleHR1cmVDYWNoZS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogVGV4dHVyZUNhY2hlOjpUZXh0dXJlQ2FjaGUoKToKLSAgICAgICAgbUNhY2hlKExydUNhY2hlPFNrQml0bWFwKiwgVGV4dHVyZSo+OjprVW5saW1pdGVkQ2FwYWNpdHkpLAorICAgICAgICBtQ2FjaGUoTHJ1Q2FjaGU8Y29uc3QgU2tCaXRtYXAqLCBUZXh0dXJlKj46OmtVbmxpbWl0ZWRDYXBhY2l0eSksCiAgICAgICAgIG1TaXplKDApLCBtTWF4U2l6ZShNQihERUZBVUxUX1RFWFRVUkVfQ0FDSEVfU0laRSkpLAogICAgICAgICBtRmx1c2hSYXRlKERFRkFVTFRfVEVYVFVSRV9DQUNIRV9GTFVTSF9SQVRFKSB7CiAgICAgY2hhciBwcm9wZXJ0eVtQUk9QRVJUWV9WQUxVRV9NQVhdOwpAQCAtNTgsNyArNTgsNyBAQAogfQogCiBUZXh0dXJlQ2FjaGU6OlRleHR1cmVDYWNoZSh1aW50MzJfdCBtYXhCeXRlU2l6ZSk6Ci0gICAgICAgIG1DYWNoZShMcnVDYWNoZTxTa0JpdG1hcCosIFRleHR1cmUqPjo6a1VubGltaXRlZENhcGFjaXR5KSwKKyAgICAgICAgbUNhY2hlKExydUNhY2hlPGNvbnN0IFNrQml0bWFwKiwgVGV4dHVyZSo+OjprVW5saW1pdGVkQ2FwYWNpdHkpLAogICAgICAgICBtU2l6ZSgwKSwgbU1heFNpemUobWF4Qnl0ZVNpemUpIHsKICAgICBpbml0KCk7CiB9CkBAIC0xMDMsNyArMTAzLDcgQEAKIC8vIENhbGxiYWNrcwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi12b2lkIFRleHR1cmVDYWNoZTo6b3BlcmF0b3IoKShTa0JpdG1hcComIGJpdG1hcCwgVGV4dHVyZSomIHRleHR1cmUpIHsKK3ZvaWQgVGV4dHVyZUNhY2hlOjpvcGVyYXRvcigpKGNvbnN0IFNrQml0bWFwKiYsIFRleHR1cmUqJiB0ZXh0dXJlKSB7CiAgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBhbHJlYWR5IGxvY2tlZAogICAgIGlmICh0ZXh0dXJlKSB7CiAgICAgICAgIG1TaXplIC09IHRleHR1cmUtPmJpdG1hcFNpemU7CkBAIC0xMjEsNyArMTIxLDcgQEAKIC8vIENhY2hpbmcKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotVGV4dHVyZSogVGV4dHVyZUNhY2hlOjpnZXQoU2tCaXRtYXAqIGJpdG1hcCkgeworVGV4dHVyZSogVGV4dHVyZUNhY2hlOjpnZXQoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCkgewogICAgIFRleHR1cmUqIHRleHR1cmUgPSBtQ2FjaGUuZ2V0KGJpdG1hcCk7CiAKICAgICBpZiAoIXRleHR1cmUpIHsKQEAgLTE2MSw3ICsxNjEsNyBAQAogICAgIHJldHVybiB0ZXh0dXJlOwogfQogCi1UZXh0dXJlKiBUZXh0dXJlQ2FjaGU6OmdldFRyYW5zaWVudChTa0JpdG1hcCogYml0bWFwKSB7CitUZXh0dXJlKiBUZXh0dXJlQ2FjaGU6OmdldFRyYW5zaWVudChjb25zdCBTa0JpdG1hcCogYml0bWFwKSB7CiAgICAgVGV4dHVyZSogdGV4dHVyZSA9IG5ldyBUZXh0dXJlKCk7CiAgICAgdGV4dHVyZS0+Yml0bWFwU2l6ZSA9IGJpdG1hcC0+cm93Qnl0ZXMoKSAqIGJpdG1hcC0+aGVpZ2h0KCk7CiAgICAgdGV4dHVyZS0+Y2xlYW51cCA9IHRydWU7CkBAIC0xNzEsMTEgKzE3MSwxMSBAQAogICAgIHJldHVybiB0ZXh0dXJlOwogfQogCi12b2lkIFRleHR1cmVDYWNoZTo6cmVtb3ZlKFNrQml0bWFwKiBiaXRtYXApIHsKK3ZvaWQgVGV4dHVyZUNhY2hlOjpyZW1vdmUoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCkgewogICAgIG1DYWNoZS5yZW1vdmUoYml0bWFwKTsKIH0KIAotdm9pZCBUZXh0dXJlQ2FjaGU6OnJlbW92ZURlZmVycmVkKFNrQml0bWFwKiBiaXRtYXApIHsKK3ZvaWQgVGV4dHVyZUNhY2hlOjpyZW1vdmVEZWZlcnJlZChjb25zdCBTa0JpdG1hcCogYml0bWFwKSB7CiAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKICAgICBtR2FyYmFnZS5wdXNoKGJpdG1hcCk7CiB9CkBAIC0yMDksNyArMjA5LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZUNhY2hlOjpnZW5lcmF0ZVRleHR1cmUoU2tCaXRtYXAqIGJpdG1hcCwgVGV4dHVyZSogdGV4dHVyZSwgYm9vbCByZWdlbmVyYXRlKSB7Cit2b2lkIFRleHR1cmVDYWNoZTo6Z2VuZXJhdGVUZXh0dXJlKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIFRleHR1cmUqIHRleHR1cmUsIGJvb2wgcmVnZW5lcmF0ZSkgewogICAgIFNrQXV0b0xvY2tQaXhlbHMgYWxwKCpiaXRtYXApOwogCiAgICAgaWYgKCFiaXRtYXAtPnJlYWR5VG9EcmF3KCkpIHsKQEAgLTIzNyw3ICsyMzcsNyBAQAogCiAgICAgQ2FjaGVzOjpnZXRJbnN0YW5jZSgpLmJpbmRUZXh0dXJlKHRleHR1cmUtPmlkKTsKIAotICAgIHN3aXRjaCAoYml0bWFwLT5nZXRDb25maWcoKSkgeworICAgIHN3aXRjaCAoYml0bWFwLT5jb25maWcoKSkgewogICAgIGNhc2UgU2tCaXRtYXA6OmtBOF9Db25maWc6CiAgICAgICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7CiAgICAgICAgIHVwbG9hZFRvVGV4dHVyZShyZXNpemUsIEdMX0FMUEhBLCBiaXRtYXAtPnJvd0J5dGVzQXNQaXhlbHMoKSwKQEAgLTI2NSw3ICsyNjUsNyBAQAogICAgICAgICB0ZXh0dXJlLT5ibGVuZCA9ICFiaXRtYXAtPmlzT3BhcXVlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFMT0dXKCJVbnN1cHBvcnRlZCBiaXRtYXAgY29uZmlnOiAlZCIsIGJpdG1hcC0+Z2V0Q29uZmlnKCkpOworICAgICAgICBBTE9HVygiVW5zdXBwb3J0ZWQgYml0bWFwIGNvbmZpZzogJWQiLCBiaXRtYXAtPmNvbmZpZygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yODIsMTMgKzI4MiwxMiBAQAogICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlQ2FjaGU6OnVwbG9hZExvRmlUZXh0dXJlKGJvb2wgcmVzaXplLCBTa0JpdG1hcCogYml0bWFwLAordm9pZCBUZXh0dXJlQ2FjaGU6OnVwbG9hZExvRmlUZXh0dXJlKGJvb2wgcmVzaXplLCBjb25zdCBTa0JpdG1hcCogYml0bWFwLAogICAgICAgICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KSB7CiAgICAgU2tCaXRtYXAgcmdiYUJpdG1hcDsKLSAgICByZ2JhQml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHdpZHRoLCBoZWlnaHQpOworICAgIHJnYmFCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgd2lkdGgsIGhlaWdodCwgMCwgYml0bWFwLT5hbHBoYVR5cGUoKSk7CiAgICAgcmdiYUJpdG1hcC5hbGxvY1BpeGVscygpOwogICAgIHJnYmFCaXRtYXAuZXJhc2VDb2xvcigwKTsKLSAgICByZ2JhQml0bWFwLnNldElzT3BhcXVlKGJpdG1hcC0+aXNPcGFxdWUoKSk7CiAKICAgICBTa0NhbnZhcyBjYW52YXMocmdiYUJpdG1hcCk7CiAgICAgY2FudmFzLmRyYXdCaXRtYXAoKmJpdG1hcCwgMC4wZiwgMC4wZiwgTlVMTCk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvVGV4dHVyZUNhY2hlLmggYi9saWJzL2h3dWkvVGV4dHVyZUNhY2hlLmgKaW5kZXggNTdmYzE5YS4uZTMzYzYwZCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1RleHR1cmVDYWNoZS5oCisrKyBiL2xpYnMvaHd1aS9UZXh0dXJlQ2FjaGUuaApAQCAtNDksNyArNDksNyBAQAogICogQW55IHRleHR1cmUgYWRkZWQgdG8gdGhlIGNhY2hlIGNhdXNpbmcgdGhlIGNhY2hlIHRvIGdyb3cgYmV5b25kIHRoZSBtYXhpbXVtCiAgKiBhbGxvd2VkIHNpemUgd2lsbCBhbHNvIGNhdXNlIHRoZSBvbGRlc3QgdGV4dHVyZSB0byBiZSBraWNrZWQgb3V0LgogICovCi1jbGFzcyBUZXh0dXJlQ2FjaGU6IHB1YmxpYyBPbkVudHJ5UmVtb3ZlZDxTa0JpdG1hcCosIFRleHR1cmUqPiB7CitjbGFzcyBUZXh0dXJlQ2FjaGU6IHB1YmxpYyBPbkVudHJ5UmVtb3ZlZDxjb25zdCBTa0JpdG1hcCosIFRleHR1cmUqPiB7CiBwdWJsaWM6CiAgICAgVGV4dHVyZUNhY2hlKCk7CiAgICAgVGV4dHVyZUNhY2hlKHVpbnQzMl90IG1heEJ5dGVTaXplKTsKQEAgLTU5LDI4ICs1OSwyOCBAQAogICAgICAqIFVzZWQgYXMgYSBjYWxsYmFjayB3aGVuIGFuIGVudHJ5IGlzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUuCiAgICAgICogRG8gbm90IGludm9rZSBkaXJlY3RseS4KICAgICAgKi8KLSAgICB2b2lkIG9wZXJhdG9yKCkoU2tCaXRtYXAqJiBiaXRtYXAsIFRleHR1cmUqJiB0ZXh0dXJlKTsKKyAgICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgU2tCaXRtYXAqJiBiaXRtYXAsIFRleHR1cmUqJiB0ZXh0dXJlKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRleHR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgYml0bWFwLiBJZiB0aGUgdGV4dHVyZQogICAgICAqIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgY2FjaGUsIGEgbmV3IHRleHR1cmUgaXMgZ2VuZXJhdGVkLgogICAgICAqLwotICAgIFRleHR1cmUqIGdldChTa0JpdG1hcCogYml0bWFwKTsKKyAgICBUZXh0dXJlKiBnZXQoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCk7CiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGV4dHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBiaXRtYXAuIFRoZSBnZW5lcmF0ZWQKICAgICAgKiB0ZXh0dXJlIGlzIG5vdCBrZXB0IGluIHRoZSBjYWNoZS4gVGhlIGNhbGxlciBtdXN0IGRlc3Ryb3kgdGhlIHRleHR1cmUuCiAgICAgICovCi0gICAgVGV4dHVyZSogZ2V0VHJhbnNpZW50KFNrQml0bWFwKiBiaXRtYXApOworICAgIFRleHR1cmUqIGdldFRyYW5zaWVudChjb25zdCBTa0JpdG1hcCogYml0bWFwKTsKICAgICAvKioKICAgICAgKiBSZW1vdmVzIHRoZSB0ZXh0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGJpdG1hcC4KICAgICAgKiBVcG9uIHJlbW92ZSB0aGUgdGV4dHVyZSBpcyBmcmVlZC4KICAgICAgKi8KLSAgICB2b2lkIHJlbW92ZShTa0JpdG1hcCogYml0bWFwKTsKKyAgICB2b2lkIHJlbW92ZShjb25zdCBTa0JpdG1hcCogYml0bWFwKTsKICAgICAvKioKICAgICAgKiBSZW1vdmVzIHRoZSB0ZXh0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGJpdG1hcC4gVGhpcyBpcyBtZWFudAogICAgICAqIHRvIGJlIGNhbGxlZCBmcm9tIHRocmVhZHMgdGhhdCBhcmUgbm90IHRoZSBFR0wgY29udGV4dCB0aHJlYWQuCiAgICAgICovCi0gICAgdm9pZCByZW1vdmVEZWZlcnJlZChTa0JpdG1hcCogYml0bWFwKTsKKyAgICB2b2lkIHJlbW92ZURlZmVycmVkKGNvbnN0IFNrQml0bWFwKiBiaXRtYXApOwogICAgIC8qKgogICAgICAqIFByb2Nlc3MgZGVmZXJyZWQgcmVtb3ZhbHMuCiAgICAgICovCkBAIC0xMjIsMTUgKzEyMiwxNSBAQAogICAgICAqIEBwYXJhbSByZWdlbmVyYXRlIElmIHRydWUsIHRoZSBiaXRtYXAgZGF0YSBpcyByZXVwbG9hZGVkIGludG8gdGhlIHRleHR1cmUsIGJ1dAogICAgICAqICAgICAgICBubyBuZXcgdGV4dHVyZSBpcyBnZW5lcmF0ZWQuCiAgICAgICovCi0gICAgdm9pZCBnZW5lcmF0ZVRleHR1cmUoU2tCaXRtYXAqIGJpdG1hcCwgVGV4dHVyZSogdGV4dHVyZSwgYm9vbCByZWdlbmVyYXRlID0gZmFsc2UpOworICAgIHZvaWQgZ2VuZXJhdGVUZXh0dXJlKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIFRleHR1cmUqIHRleHR1cmUsIGJvb2wgcmVnZW5lcmF0ZSA9IGZhbHNlKTsKIAotICAgIHZvaWQgdXBsb2FkTG9GaVRleHR1cmUoYm9vbCByZXNpemUsIFNrQml0bWFwKiBiaXRtYXAsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpOworICAgIHZvaWQgdXBsb2FkTG9GaVRleHR1cmUoYm9vbCByZXNpemUsIGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpOwogICAgIHZvaWQgdXBsb2FkVG9UZXh0dXJlKGJvb2wgcmVzaXplLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHN0cmlkZSwKICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICogZGF0YSk7CiAKICAgICB2b2lkIGluaXQoKTsKIAotICAgIExydUNhY2hlPFNrQml0bWFwKiwgVGV4dHVyZSo+IG1DYWNoZTsKKyAgICBMcnVDYWNoZTxjb25zdCBTa0JpdG1hcCosIFRleHR1cmUqPiBtQ2FjaGU7CiAKICAgICB1aW50MzJfdCBtU2l6ZTsKICAgICB1aW50MzJfdCBtTWF4U2l6ZTsKQEAgLTE0MCw3ICsxNDAsNyBAQAogCiAgICAgYm9vbCBtRGVidWdFbmFibGVkOwogCi0gICAgVmVjdG9yPFNrQml0bWFwKj4gbUdhcmJhZ2U7CisgICAgVmVjdG9yPGNvbnN0IFNrQml0bWFwKj4gbUdhcmJhZ2U7CiAgICAgbXV0YWJsZSBNdXRleCBtTG9jazsKIH07IC8vIGNsYXNzIFRleHR1cmVDYWNoZQogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvVmVjdG9yLmggYi9saWJzL2h3dWkvVmVjdG9yLmgKaW5kZXggNDk3OTI0ZS4uMTViOWQ2YiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1ZlY3Rvci5oCisrKyBiL2xpYnMvaHd1aS9WZWN0b3IuaApAQCAtMzYsNiArMzYsMTAgQEAKICAgICAgICAgeChweCksIHkocHkpIHsKICAgICB9CiAKKyAgICBmbG9hdCBsZW5ndGhTcXVhcmVkKCkgY29uc3QgeworICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeTsKKyAgICB9CisKICAgICBmbG9hdCBsZW5ndGgoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBzcXJ0KHggKiB4ICsgeSAqIHkpOwogICAgIH0KQEAgLTEwNyw2ICsxMTEsMjEgQEAKICAgICB9CiB9OyAvLyBjbGFzcyBWZWN0b3IyCiAKK2NsYXNzIFZlY3RvcjMgeworcHVibGljOgorICAgIGZsb2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBmbG9hdCB6OworCisgICAgVmVjdG9yMygpIDoKKyAgICAgICAgeCgwLjBmKSwgeSgwLjBmKSwgeigwLjBmKSB7CisgICAgfQorCisgICAgVmVjdG9yMyhmbG9hdCBweCwgZmxvYXQgcHksIGZsb2F0IHB6KSA6CisgICAgICAgIHgocHgpLCB5KHB5KSwgeihweikgeworICAgIH0KK307CisKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIFR5cGVzCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvVmVydGV4LmggYi9saWJzL2h3dWkvVmVydGV4LmgKaW5kZXggNzkwZDRmYy4uNWQ3YTE5OSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1ZlcnRleC5oCisrKyBiL2xpYnMvaHd1aS9WZXJ0ZXguaApAQCAtMzMsMTMgKzMzLDE0IEBACiAgICAgICogUHJvZ3JhbTo6c2V0KCkpLCBhbmQgdXNlZCB0byBtYWtlIGdlb21ldHJ5IGRhbWFnZSByZWN0IGNhbGN1bGF0aW9uIGNvbnNlcnZhdGl2ZSAoc2VlCiAgICAgICogUmVjdDo6c25hcEdlb21ldHJ5VG9QaXhlbEJvdW5kYXJpZXMoKSkKICAgICAgKi8KLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZ0dlb21ldHJ5RnVkZ2VGYWN0b3IgPSAwLjA2NTZmOworICAgIHN0YXRpYyBmbG9hdCBHZW9tZXRyeUZ1ZGdlRmFjdG9yKCkgeyByZXR1cm4gMC4wNjU2ZjsgfQogCi0gICAgZmxvYXQgcG9zaXRpb25bMl07CisKKyAgICBmbG9hdCB4LCB5OwogCiAgICAgc3RhdGljIGlubGluZSB2b2lkIHNldChWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICB2ZXJ0ZXhbMF0ucG9zaXRpb25bMF0gPSB4OwotICAgICAgICB2ZXJ0ZXhbMF0ucG9zaXRpb25bMV0gPSB5OworICAgICAgICB2ZXJ0ZXhbMF0ueCA9IHg7CisgICAgICAgIHZlcnRleFswXS55ID0geTsKICAgICB9CiAKICAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0KFZlcnRleCogdmVydGV4LCB2ZWMyIHZhbCkgewpAQCAtNDcsNyArNDgsNyBAQAogICAgIH0KIAogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5V2l0aE9mZnNldChWZXJ0ZXgqIHZlcnRleCwgY29uc3QgVmVydGV4JiBzcmMsIGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgc2V0KHZlcnRleCwgc3JjLnBvc2l0aW9uWzBdICsgeCwgc3JjLnBvc2l0aW9uWzFdICsgeSk7CisgICAgICAgIHNldCh2ZXJ0ZXgsIHNyYy54ICsgeCwgc3JjLnkgKyB5KTsKICAgICB9CiAKIH07IC8vIHN0cnVjdCBWZXJ0ZXgKQEAgLTU2LDE5ICs1NywxOSBAQAogICogU2ltcGxlIHN0cnVjdHVyZSB0byBkZXNjcmliZSBhIHZlcnRleCB3aXRoIGEgcG9zaXRpb24gYW5kIHRleHR1cmUgVVYuCiAgKi8KIHN0cnVjdCBUZXh0dXJlVmVydGV4IHsKLSAgICBmbG9hdCBwb3NpdGlvblsyXTsKLSAgICBmbG9hdCB0ZXh0dXJlWzJdOworICAgIGZsb2F0IHgsIHk7CisgICAgZmxvYXQgdSwgdjsKIAogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXQoVGV4dHVyZVZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB1LCBmbG9hdCB2KSB7Ci0gICAgICAgIHZlcnRleFswXS5wb3NpdGlvblswXSA9IHg7Ci0gICAgICAgIHZlcnRleFswXS5wb3NpdGlvblsxXSA9IHk7Ci0gICAgICAgIHZlcnRleFswXS50ZXh0dXJlWzBdID0gdTsKLSAgICAgICAgdmVydGV4WzBdLnRleHR1cmVbMV0gPSB2OworICAgICAgICB2ZXJ0ZXhbMF0ueCA9IHg7CisgICAgICAgIHZlcnRleFswXS55ID0geTsKKyAgICAgICAgdmVydGV4WzBdLnUgPSB1OworICAgICAgICB2ZXJ0ZXhbMF0udiA9IHY7CiAgICAgfQogCiAgICAgc3RhdGljIGlubGluZSB2b2lkIHNldFVWKFRleHR1cmVWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgdSwgZmxvYXQgdikgewotICAgICAgICB2ZXJ0ZXhbMF0udGV4dHVyZVswXSA9IHU7Ci0gICAgICAgIHZlcnRleFswXS50ZXh0dXJlWzFdID0gdjsKKyAgICAgICAgdmVydGV4WzBdLnUgPSB1OworICAgICAgICB2ZXJ0ZXhbMF0udiA9IHY7CiAgICAgfQogfTsgLy8gc3RydWN0IFRleHR1cmVWZXJ0ZXgKIApAQCAtNzYsMTcgKzc3LDE3IEBACiAgKiBTaW1wbGUgc3RydWN0dXJlIHRvIGRlc2NyaWJlIGEgdmVydGV4IHdpdGggYSBwb3NpdGlvbiwgdGV4dHVyZSBVViBhbmQgQVJHQiBjb2xvci4KICAqLwogc3RydWN0IENvbG9yVGV4dHVyZVZlcnRleCA6IFRleHR1cmVWZXJ0ZXggewotICAgIGZsb2F0IGNvbG9yWzRdOworICAgIGZsb2F0IHIsIGcsIGIsIGE7CiAKICAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0KENvbG9yVGV4dHVyZVZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LAogICAgICAgICAgICAgZmxvYXQgdSwgZmxvYXQgdiwgaW50IGNvbG9yKSB7CiAgICAgICAgIFRleHR1cmVWZXJ0ZXg6OnNldCh2ZXJ0ZXgsIHgsIHksIHUsIHYpOwogCiAgICAgICAgIGNvbnN0IGZsb2F0IGEgPSAoKGNvbG9yID4+IDI0KSAmIDB4ZmYpIC8gMjU1LjBmOwotICAgICAgICB2ZXJ0ZXhbMF0uY29sb3JbMF0gPSBhICogKChjb2xvciA+PiAxNikgJiAweGZmKSAvIDI1NS4wZjsKLSAgICAgICAgdmVydGV4WzBdLmNvbG9yWzFdID0gYSAqICgoY29sb3IgPj4gIDgpICYgMHhmZikgLyAyNTUuMGY7Ci0gICAgICAgIHZlcnRleFswXS5jb2xvclsyXSA9IGEgKiAoKGNvbG9yICAgICAgKSAmIDB4ZmYpIC8gMjU1LjBmOwotICAgICAgICB2ZXJ0ZXhbMF0uY29sb3JbM10gPSBhOworICAgICAgICB2ZXJ0ZXhbMF0uciA9IGEgKiAoKGNvbG9yID4+IDE2KSAmIDB4ZmYpIC8gMjU1LjBmOworICAgICAgICB2ZXJ0ZXhbMF0uZyA9IGEgKiAoKGNvbG9yID4+ICA4KSAmIDB4ZmYpIC8gMjU1LjBmOworICAgICAgICB2ZXJ0ZXhbMF0uYiA9IGEgKiAoKGNvbG9yICAgICAgKSAmIDB4ZmYpIC8gMjU1LjBmOworICAgICAgICB2ZXJ0ZXhbMF0uYSA9IGE7CiAgICAgfQogfTsgLy8gc3RydWN0IENvbG9yVGV4dHVyZVZlcnRleAogCkBAIC0xMDMsNyArMTA0LDcgQEAKIAogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5V2l0aE9mZnNldChBbHBoYVZlcnRleCogdmVydGV4LCBjb25zdCBBbHBoYVZlcnRleCYgc3JjLAogICAgICAgICAgICAgZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICBWZXJ0ZXg6OnNldCh2ZXJ0ZXgsIHNyYy5wb3NpdGlvblswXSArIHgsIHNyYy5wb3NpdGlvblsxXSArIHkpOworICAgICAgICBWZXJ0ZXg6OnNldCh2ZXJ0ZXgsIHNyYy54ICsgeCwgc3JjLnkgKyB5KTsKICAgICAgICAgdmVydGV4WzBdLmFscGhhID0gc3JjLmFscGhhOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1ZlcnRleEJ1ZmZlci5oIGIvbGlicy9od3VpL1ZlcnRleEJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNjg3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvVmVydGV4QnVmZmVyLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSFdVSV9WRVJURVhfQlVGRkVSX0gKKyNkZWZpbmUgQU5EUk9JRF9IV1VJX1ZFUlRFWF9CVUZGRVJfSAorCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSB1aXJlbmRlcmVyIHsKKworY2xhc3MgVmVydGV4QnVmZmVyIHsKK3B1YmxpYzoKKyAgICBWZXJ0ZXhCdWZmZXIoKToKKyAgICAgICAgbUJ1ZmZlcigwKSwKKyAgICAgICAgbVZlcnRleENvdW50KDApLAorICAgICAgICBtQ2xlYW51cE1ldGhvZChOVUxMKQorICAgIHt9CisKKyAgICB+VmVydGV4QnVmZmVyKCkgeworICAgICAgICBpZiAobUNsZWFudXBNZXRob2QpIG1DbGVhbnVwTWV0aG9kKG1CdWZmZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAgIFRoaXMgc2hvdWxkIGJlIHRoZSBvbmx5IG1ldGhvZCB1c2VkIGJ5IHRoZSBUZXNzZWxsYXRvci4gU3Vic2VxdWVudCBjYWxscyB0bworICAgICAgIGFsbG9jIHdpbGwgYWxsb2NhdGUgc3BhY2Ugd2l0aGluIHRoZSBmaXJzdCBhbGxvY2F0aW9uICh1c2VmdWwgaWYgeW91IHdhbnQgdG8KKyAgICAgICBldmVudHVhbGx5IGFsbG9jYXRlIG11bHRpcGxlIHJlZ2lvbnMgd2l0aGluIGEgc2luZ2xlIFZlcnRleEJ1ZmZlciwgc3VjaCBhcworICAgICAgIHdpdGggUGF0aFRlc3NlbGxhdG9yOjp0ZXNzZWxhdGVMaW5lcygpKQorICAgICAqLworICAgIHRlbXBsYXRlIDxjbGFzcyBUWVBFPgorICAgIFRZUEUqIGFsbG9jKGludCB2ZXJ0ZXhDb3VudCkgeworICAgICAgICBpZiAobVZlcnRleENvdW50KSB7CisgICAgICAgICAgICBUWVBFKiByZWFsbG9jQnVmZmVyID0gKFRZUEUqKW1SZWFsbG9jQnVmZmVyOworICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZlIGFsbG9jYXRlZCB0aGUgYnVmZmVyLCByZS1hbGxvY2F0ZSBzcGFjZSB3aXRoaW4KKyAgICAgICAgICAgIGlmIChtUmVhbGxvY0J1ZmZlciAhPSBtQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgLy8gbm90IGZpcnN0IHJlLWFsbG9jYXRpb24sIGxlYXZlIHNwYWNlIGZvciBkZWdlbmVyYXRlIHRyaWFuZ2xlcyB0byBzZXBhcmF0ZSBzdHJpcHMKKyAgICAgICAgICAgICAgICByZWFsbG9jQnVmZmVyICs9IDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtUmVhbGxvY0J1ZmZlciA9IHJlYWxsb2NCdWZmZXIgKyB2ZXJ0ZXhDb3VudDsKKyAgICAgICAgICAgIHJldHVybiByZWFsbG9jQnVmZmVyOworICAgICAgICB9CisgICAgICAgIG1WZXJ0ZXhDb3VudCA9IHZlcnRleENvdW50OworICAgICAgICBtUmVhbGxvY0J1ZmZlciA9IG1CdWZmZXIgPSAodm9pZCopbmV3IFRZUEVbdmVydGV4Q291bnRdOworICAgICAgICBtQ2xlYW51cE1ldGhvZCA9ICYoY2xlYW51cDxUWVBFPik7CisKKyAgICAgICAgcmV0dXJuIChUWVBFKiltQnVmZmVyOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBUWVBFPgorICAgIHZvaWQgY29weUludG8oY29uc3QgVmVydGV4QnVmZmVyJiBzcmNCdWZmZXIsIGZsb2F0IHhPZmZzZXQsIGZsb2F0IHlPZmZzZXQpIHsKKyAgICAgICAgaW50IHZlcnRpY2VzVG9Db3B5ID0gc3JjQnVmZmVyLmdldFZlcnRleENvdW50KCk7CisKKyAgICAgICAgVFlQRSogZHN0ID0gYWxsb2M8VFlQRT4odmVydGljZXNUb0NvcHkpOworICAgICAgICBUWVBFKiBzcmMgPSAoVFlQRSopc3JjQnVmZmVyLmdldEJ1ZmZlcigpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVydGljZXNUb0NvcHk7IGkrKykgeworICAgICAgICAgICAgVFlQRTo6Y29weVdpdGhPZmZzZXQoJmRzdFtpXSwgc3JjW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IHZvaWQqIGdldEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXI7IH0KKyAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4Q291bnQoKSBjb25zdCB7IHJldHVybiBtVmVydGV4Q291bnQ7IH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBUWVBFPgorICAgIHZvaWQgY3JlYXRlRGVnZW5lcmF0ZVNlcGFyYXRvcnMoaW50IGFsbG9jU2l6ZSkgeworICAgICAgICBUWVBFKiBlbmQgPSAoVFlQRSopbUJ1ZmZlciArIG1WZXJ0ZXhDb3VudDsKKyAgICAgICAgZm9yIChUWVBFKiBkZWdlbiA9IChUWVBFKiltQnVmZmVyICsgYWxsb2NTaXplOyBkZWdlbiA8IGVuZDsgZGVnZW4gKz0gMiArIGFsbG9jU2l6ZSkgeworICAgICAgICAgICAgbWVtY3B5KGRlZ2VuLCBkZWdlbiAtIDEsIHNpemVvZihUWVBFKSk7CisgICAgICAgICAgICBtZW1jcHkoZGVnZW4gKyAxLCBkZWdlbiArIDIsIHNpemVvZihUWVBFKSk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPGNsYXNzIFRZUEU+CisgICAgc3RhdGljIHZvaWQgY2xlYW51cCh2b2lkKiBidWZmZXIpIHsKKyAgICAgICAgZGVsZXRlW10gKFRZUEUqKWJ1ZmZlcjsKKyAgICB9CisKKyAgICB2b2lkKiBtQnVmZmVyOworICAgIHVuc2lnbmVkIGludCBtVmVydGV4Q291bnQ7CisKKyAgICB2b2lkKiBtUmVhbGxvY0J1ZmZlcjsgLy8gdXNlZCBmb3IgbXVsdGktYWxsb2NhdGlvbgorCisgICAgdm9pZCAoKm1DbGVhbnVwTWV0aG9kKSh2b2lkKik7Cit9OworCit9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfSFdVSV9WRVJURVhfQlVGRkVSX0gKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9mb250L0NhY2hlVGV4dHVyZS5jcHAgYi9saWJzL2h3dWkvZm9udC9DYWNoZVRleHR1cmUuY3BwCmluZGV4IGQ1ZjM4YjUuLjI0ZmZiODAgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9mb250L0NhY2hlVGV4dHVyZS5jcHAKKysrIGIvbGlicy9od3VpL2ZvbnQvQ2FjaGVUZXh0dXJlLmNwcApAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgICAgICBtTWVzaChOVUxMKSwgbUN1cnJlbnRRdWFkKDApLCBtTWF4UXVhZENvdW50KG1heFF1YWRDb3VudCksCiAgICAgICAgICAgICBtQ2FjaGVzKENhY2hlczo6Z2V0SW5zdGFuY2UoKSkgewogICAgIG1DYWNoZUJsb2NrcyA9IG5ldyBDYWNoZUJsb2NrKFRFWFRVUkVfQk9SREVSX1NJWkUsIFRFWFRVUkVfQk9SREVSX1NJWkUsCi0gICAgICAgICAgICBtV2lkdGggLSBURVhUVVJFX0JPUkRFUl9TSVpFLCBtSGVpZ2h0IC0gVEVYVFVSRV9CT1JERVJfU0laRSwgdHJ1ZSk7CisgICAgICAgICAgICBtV2lkdGggLSBURVhUVVJFX0JPUkRFUl9TSVpFLCBtSGVpZ2h0IC0gVEVYVFVSRV9CT1JERVJfU0laRSk7CiAKICAgICAvLyBPcGVuR0wgRVMgMy4wKyBsZXRzIHVzIHNwZWNpZnkgdGhlIHJvdyBsZW5ndGggZm9yIHVucGFjayBvcGVyYXRpb25zIHN1Y2gKICAgICAvLyBhcyBnbFRleFN1YkltYWdlMkQoKS4gVGhpcyBhbGxvd3MgdXMgdG8gdXBsb2FkIGEgc3ViLXJlY3RhbmdsZSBvZiBhIHRleHR1cmUuCkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAvLyByZXNldCwgdGhlbiBjcmVhdGUgYSBuZXcgcmVtYWluZGVyIHNwYWNlIHRvIHN0YXJ0IGFnYWluCiAgICAgcmVzZXQoKTsKICAgICBtQ2FjaGVCbG9ja3MgPSBuZXcgQ2FjaGVCbG9jayhURVhUVVJFX0JPUkRFUl9TSVpFLCBURVhUVVJFX0JPUkRFUl9TSVpFLAotICAgICAgICAgICAgbVdpZHRoIC0gVEVYVFVSRV9CT1JERVJfU0laRSwgbUhlaWdodCAtIFRFWFRVUkVfQk9SREVSX1NJWkUsIHRydWUpOworICAgICAgICAgICAgbVdpZHRoIC0gVEVYVFVSRV9CT1JERVJfU0laRSwgbUhlaWdodCAtIFRFWFRVUkVfQk9SREVSX1NJWkUpOwogfQogCiB2b2lkIENhY2hlVGV4dHVyZTo6cmVsZWFzZU1lc2goKSB7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvZm9udC9DYWNoZVRleHR1cmUuaCBiL2xpYnMvaHd1aS9mb250L0NhY2hlVGV4dHVyZS5oCmluZGV4IDYxYjM4ZjguLjRjYzRmMjIgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9mb250L0NhY2hlVGV4dHVyZS5oCisrKyBiL2xpYnMvaHd1aS9mb250L0NhY2hlVGV4dHVyZS5oCkBAIC01NCw3ICs1NCw3IEBACiAgICAgQ2FjaGVCbG9jayogbU5leHQ7CiAgICAgQ2FjaGVCbG9jayogbVByZXY7CiAKLSAgICBDYWNoZUJsb2NrKHVpbnQxNl90IHgsIHVpbnQxNl90IHksIHVpbnQxNl90IHdpZHRoLCB1aW50MTZfdCBoZWlnaHQsIGJvb2wgZW1wdHkgPSBmYWxzZSk6CisgICAgQ2FjaGVCbG9jayh1aW50MTZfdCB4LCB1aW50MTZfdCB5LCB1aW50MTZfdCB3aWR0aCwgdWludDE2X3QgaGVpZ2h0KToKICAgICAgICAgICAgIG1YKHgpLCBtWSh5KSwgbVdpZHRoKHdpZHRoKSwgbUhlaWdodChoZWlnaHQpLCBtTmV4dChOVUxMKSwgbVByZXYoTlVMTCkgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL2ZvbnQvRm9udC5jcHAgYi9saWJzL2h3dWkvZm9udC9Gb250LmNwcAppbmRleCAxODk4M2Q4Li5iMDk0NWM2IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvZm9udC9Gb250LmNwcAorKysgYi9saWJzL2h3dWkvZm9udC9Gb250LmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPHV0aWxzL1RyYWNlLmg+CiAKICNpbmNsdWRlIDxTa0dseXBoLmg+CisjaW5jbHVkZSA8U2tHbHlwaENhY2hlLmg+CiAjaW5jbHVkZSA8U2tVdGlscy5oPgogCiAjaW5jbHVkZSAiRm9udFV0aWwuaCIKQEAgLTI2NiwxNCArMjY3LDE0IEBACiAgICAgICAgICAgICBnbHlwaC0+bUNhY2hlVGV4dHVyZSk7CiB9CiAKLUNhY2hlZEdseXBoSW5mbyogRm9udDo6Z2V0Q2FjaGVkR2x5cGgoU2tQYWludCogcGFpbnQsIGdseXBoX3QgdGV4dFVuaXQsIGJvb2wgcHJlY2FjaGluZykgeworQ2FjaGVkR2x5cGhJbmZvKiBGb250OjpnZXRDYWNoZWRHbHlwaChjb25zdCBTa1BhaW50KiBwYWludCwgZ2x5cGhfdCB0ZXh0VW5pdCwgYm9vbCBwcmVjYWNoaW5nKSB7CiAgICAgQ2FjaGVkR2x5cGhJbmZvKiBjYWNoZWRHbHlwaCA9IG1DYWNoZWRHbHlwaHMudmFsdWVGb3IodGV4dFVuaXQpOwogICAgIGlmIChjYWNoZWRHbHlwaCkgewogICAgICAgICAvLyBJcyB0aGUgZ2x5cGggc3RpbGwgaW4gdGV4dHVyZSBjYWNoZT8KICAgICAgICAgaWYgKCFjYWNoZWRHbHlwaC0+bUlzVmFsaWQpIHsKLSAgICAgICAgICAgIGNvbnN0IFNrR2x5cGgmIHNraWFHbHlwaCA9IEdFVF9NRVRSSUNTKHBhaW50LCB0ZXh0VW5pdCwKLSAgICAgICAgICAgICAgICAgICAgJm1EZXNjcmlwdGlvbi5tTG9va3VwVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIHVwZGF0ZUdseXBoQ2FjaGUocGFpbnQsIHNraWFHbHlwaCwgY2FjaGVkR2x5cGgsIHByZWNhY2hpbmcpOworICAgICAgICAgICAgU2tBdXRvR2x5cGhDYWNoZSBhdXRvQ2FjaGUoKnBhaW50LCBOVUxMLCAmbURlc2NyaXB0aW9uLm1Mb29rdXBUcmFuc2Zvcm0pOworICAgICAgICAgICAgY29uc3QgU2tHbHlwaCYgc2tpYUdseXBoID0gR0VUX01FVFJJQ1MoYXV0b0NhY2hlLmdldENhY2hlKCksIHRleHRVbml0KTsKKyAgICAgICAgICAgIHVwZGF0ZUdseXBoQ2FjaGUocGFpbnQsIHNraWFHbHlwaCwgYXV0b0NhY2hlLmdldENhY2hlKCksIGNhY2hlZEdseXBoLCBwcmVjYWNoaW5nKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNhY2hlZEdseXBoID0gY2FjaGVHbHlwaChwYWludCwgdGV4dFVuaXQsIHByZWNhY2hpbmcpOwpAQCAtMjgyLDE0ICsyODMsMTQgQEAKICAgICByZXR1cm4gY2FjaGVkR2x5cGg7CiB9CiAKLXZvaWQgRm9udDo6cmVuZGVyKFNrUGFpbnQqIHBhaW50LCBjb25zdCBjaGFyICp0ZXh0LCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgbGVuLAordm9pZCBGb250OjpyZW5kZXIoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIgKnRleHQsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW4sCiAgICAgICAgICAgICBpbnQgbnVtR2x5cGhzLCBpbnQgeCwgaW50IHksIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMpIHsKICAgICByZW5kZXIocGFpbnQsIHRleHQsIHN0YXJ0LCBsZW4sIG51bUdseXBocywgeCwgeSwgRlJBTUVCVUZGRVIsIE5VTEwsCiAgICAgICAgICAgICAwLCAwLCBOVUxMLCBwb3NpdGlvbnMpOwogfQogCi12b2lkIEZvbnQ6OnJlbmRlcihTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciAqdGV4dCwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGxlbiwKLSAgICAgICAgaW50IG51bUdseXBocywgU2tQYXRoKiBwYXRoLCBmbG9hdCBoT2Zmc2V0LCBmbG9hdCB2T2Zmc2V0KSB7Cit2b2lkIEZvbnQ6OnJlbmRlcihjb25zdCBTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciAqdGV4dCwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGxlbiwKKyAgICAgICAgaW50IG51bUdseXBocywgY29uc3QgU2tQYXRoKiBwYXRoLCBmbG9hdCBoT2Zmc2V0LCBmbG9hdCB2T2Zmc2V0KSB7CiAgICAgaWYgKG51bUdseXBocyA9PSAwIHx8IHRleHQgPT0gTlVMTCB8fCBsZW4gPT0gMCkgewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzM4LDcgKzMzOSw3IEBACiAgICAgfQogfQogCi12b2lkIEZvbnQ6Om1lYXN1cmUoU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW4sCit2b2lkIEZvbnQ6Om1lYXN1cmUoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW4sCiAgICAgICAgIGludCBudW1HbHlwaHMsIFJlY3QgKmJvdW5kcywgY29uc3QgZmxvYXQqIHBvc2l0aW9ucykgewogICAgIGlmIChib3VuZHMgPT0gTlVMTCkgewogICAgICAgICBBTE9HRSgiTm8gcmV0dXJuIHJlY3RhbmdsZSBwcm92aWRlZCB0byBtZWFzdXJlIHRleHQiKTsKQEAgLTM0OCw3ICszNDksNyBAQAogICAgIHJlbmRlcihwYWludCwgdGV4dCwgc3RhcnQsIGxlbiwgbnVtR2x5cGhzLCAwLCAwLCBNRUFTVVJFLCBOVUxMLCAwLCAwLCBib3VuZHMsIHBvc2l0aW9ucyk7CiB9CiAKLXZvaWQgRm9udDo6cHJlY2FjaGUoU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIGludCBudW1HbHlwaHMpIHsKK3ZvaWQgRm9udDo6cHJlY2FjaGUoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIGludCBudW1HbHlwaHMpIHsKICAgICBBVFJBQ0VfTkFNRSgicHJlY2FjaGVUZXh0Iik7CiAKICAgICBpZiAobnVtR2x5cGhzID09IDAgfHwgdGV4dCA9PSBOVUxMKSB7CkBAIC0zNjksNyArMzcwLDcgQEAKICAgICB9CiB9CiAKLXZvaWQgRm9udDo6cmVuZGVyKFNrUGFpbnQqIHBhaW50LCBjb25zdCBjaGFyKiB0ZXh0LCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgbGVuLAordm9pZCBGb250OjpyZW5kZXIoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW4sCiAgICAgICAgIGludCBudW1HbHlwaHMsIGludCB4LCBpbnQgeSwgUmVuZGVyTW9kZSBtb2RlLCB1aW50OF90ICpiaXRtYXAsCiAgICAgICAgIHVpbnQzMl90IGJpdG1hcFcsIHVpbnQzMl90IGJpdG1hcEgsIFJlY3QqIGJvdW5kcywgY29uc3QgZmxvYXQqIHBvc2l0aW9ucykgewogICAgIGlmIChudW1HbHlwaHMgPT0gMCB8fCB0ZXh0ID09IE5VTEwgfHwgbGVuID09IDApIHsKQEAgLTQxNSw4ICs0MTYsOCBAQAogICAgIH0KIH0KIAotdm9pZCBGb250Ojp1cGRhdGVHbHlwaENhY2hlKFNrUGFpbnQqIHBhaW50LCBjb25zdCBTa0dseXBoJiBza2lhR2x5cGgsIENhY2hlZEdseXBoSW5mbyogZ2x5cGgsCi0gICAgICAgIGJvb2wgcHJlY2FjaGluZykgewordm9pZCBGb250Ojp1cGRhdGVHbHlwaENhY2hlKGNvbnN0IFNrUGFpbnQqIHBhaW50LCBjb25zdCBTa0dseXBoJiBza2lhR2x5cGgsCisgICAgICAgIFNrR2x5cGhDYWNoZSogc2tpYUdseXBoQ2FjaGUsIENhY2hlZEdseXBoSW5mbyogZ2x5cGgsIGJvb2wgcHJlY2FjaGluZykgewogICAgIGdseXBoLT5tQWR2YW5jZVggPSBza2lhR2x5cGguZkFkdmFuY2VYOwogICAgIGdseXBoLT5tQWR2YW5jZVkgPSBza2lhR2x5cGguZkFkdmFuY2VZOwogICAgIGdseXBoLT5tQml0bWFwTGVmdCA9IHNraWFHbHlwaC5mTGVmdDsKQEAgLTQyOSw3ICs0MzAsNyBAQAogCiAgICAgLy8gR2V0IHRoZSBiaXRtYXAgZm9yIHRoZSBnbHlwaAogICAgIGlmICghc2tpYUdseXBoLmZJbWFnZSkgewotICAgICAgICBwYWludC0+ZmluZEltYWdlKHNraWFHbHlwaCwgJm1EZXNjcmlwdGlvbi5tTG9va3VwVHJhbnNmb3JtKTsKKyAgICAgICAgc2tpYUdseXBoQ2FjaGUtPmZpbmRJbWFnZShza2lhR2x5cGgpOwogICAgIH0KICAgICBtU3RhdGUtPmNhY2hlQml0bWFwKHNraWFHbHlwaCwgZ2x5cGgsICZzdGFydFgsICZzdGFydFksIHByZWNhY2hpbmcpOwogCkBAIC00NTksMTUgKzQ2MCwxNiBAQAogICAgIH0KIH0KIAotQ2FjaGVkR2x5cGhJbmZvKiBGb250OjpjYWNoZUdseXBoKFNrUGFpbnQqIHBhaW50LCBnbHlwaF90IGdseXBoLCBib29sIHByZWNhY2hpbmcpIHsKK0NhY2hlZEdseXBoSW5mbyogRm9udDo6Y2FjaGVHbHlwaChjb25zdCBTa1BhaW50KiBwYWludCwgZ2x5cGhfdCBnbHlwaCwgYm9vbCBwcmVjYWNoaW5nKSB7CiAgICAgQ2FjaGVkR2x5cGhJbmZvKiBuZXdHbHlwaCA9IG5ldyBDYWNoZWRHbHlwaEluZm8oKTsKICAgICBtQ2FjaGVkR2x5cGhzLmFkZChnbHlwaCwgbmV3R2x5cGgpOwogCi0gICAgY29uc3QgU2tHbHlwaCYgc2tpYUdseXBoID0gR0VUX01FVFJJQ1MocGFpbnQsIGdseXBoLCAmbURlc2NyaXB0aW9uLm1Mb29rdXBUcmFuc2Zvcm0pOworICAgIFNrQXV0b0dseXBoQ2FjaGUgYXV0b0NhY2hlKCpwYWludCwgTlVMTCwgJm1EZXNjcmlwdGlvbi5tTG9va3VwVHJhbnNmb3JtKTsKKyAgICBjb25zdCBTa0dseXBoJiBza2lhR2x5cGggPSBHRVRfTUVUUklDUyhhdXRvQ2FjaGUuZ2V0Q2FjaGUoKSwgZ2x5cGgpOwogICAgIG5ld0dseXBoLT5tSXNWYWxpZCA9IGZhbHNlOwogICAgIG5ld0dseXBoLT5tR2x5cGhJbmRleCA9IHNraWFHbHlwaC5mSUQ7CiAKLSAgICB1cGRhdGVHbHlwaENhY2hlKHBhaW50LCBza2lhR2x5cGgsIG5ld0dseXBoLCBwcmVjYWNoaW5nKTsKKyAgICB1cGRhdGVHbHlwaENhY2hlKHBhaW50LCBza2lhR2x5cGgsIGF1dG9DYWNoZS5nZXRDYWNoZSgpLCBuZXdHbHlwaCwgcHJlY2FjaGluZyk7CiAKICAgICByZXR1cm4gbmV3R2x5cGg7CiB9CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvZm9udC9Gb250LmggYi9saWJzL2h3dWkvZm9udC9Gb250LmgKaW5kZXggOWU3ZWMyZC4uMDIxOTdiYyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL2ZvbnQvRm9udC5oCisrKyBiL2xpYnMvaHd1aS9mb250L0ZvbnQuaApAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KIAorI2luY2x1ZGUgPFNrR2x5cGhDYWNoZS5oPgogI2luY2x1ZGUgPFNrU2NhbGVyQ29udGV4dC5oPgogI2luY2x1ZGUgPFNrUGFpbnQuaD4KICNpbmNsdWRlIDxTa1BhdGhNZWFzdXJlLmg+CkBAIC03NiwxMSArNzcsMTEgQEAKIAogICAgIH5Gb250KCk7CiAKLSAgICB2b2lkIHJlbmRlcihTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciogdGV4dCwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGxlbiwKKyAgICB2b2lkIHJlbmRlcihjb25zdCBTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciogdGV4dCwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGxlbiwKICAgICAgICAgICAgIGludCBudW1HbHlwaHMsIGludCB4LCBpbnQgeSwgY29uc3QgZmxvYXQqIHBvc2l0aW9ucyk7CiAKLSAgICB2b2lkIHJlbmRlcihTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciogdGV4dCwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGxlbiwKLSAgICAgICAgICAgIGludCBudW1HbHlwaHMsIFNrUGF0aCogcGF0aCwgZmxvYXQgaE9mZnNldCwgZmxvYXQgdk9mZnNldCk7CisgICAgdm9pZCByZW5kZXIoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW4sCisgICAgICAgICAgICBpbnQgbnVtR2x5cGhzLCBjb25zdCBTa1BhdGgqIHBhdGgsIGZsb2F0IGhPZmZzZXQsIGZsb2F0IHZPZmZzZXQpOwogCiAgICAgY29uc3QgRm9udDo6Rm9udERlc2NyaXB0aW9uJiBnZXREZXNjcmlwdGlvbigpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIG1EZXNjcmlwdGlvbjsKQEAgLTEwNSwyMCArMTA2LDIwIEBACiAgICAgICAgIE1FQVNVUkUsCiAgICAgfTsKIAotICAgIHZvaWQgcHJlY2FjaGUoU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIGludCBudW1HbHlwaHMpOworICAgIHZvaWQgcHJlY2FjaGUoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIGludCBudW1HbHlwaHMpOwogCi0gICAgdm9pZCByZW5kZXIoU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIgKnRleHQsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW4sCisgICAgdm9pZCByZW5kZXIoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIgKnRleHQsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW4sCiAgICAgICAgICAgICBpbnQgbnVtR2x5cGhzLCBpbnQgeCwgaW50IHksIFJlbmRlck1vZGUgbW9kZSwgdWludDhfdCAqYml0bWFwLAogICAgICAgICAgICAgdWludDMyX3QgYml0bWFwVywgdWludDMyX3QgYml0bWFwSCwgUmVjdCAqYm91bmRzLCBjb25zdCBmbG9hdCogcG9zaXRpb25zKTsKIAotICAgIHZvaWQgbWVhc3VyZShTa1BhaW50KiBwYWludCwgY29uc3QgY2hhciogdGV4dCwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGxlbiwKKyAgICB2b2lkIG1lYXN1cmUoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IGNoYXIqIHRleHQsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW4sCiAgICAgICAgICAgICBpbnQgbnVtR2x5cGhzLCBSZWN0ICpib3VuZHMsIGNvbnN0IGZsb2F0KiBwb3NpdGlvbnMpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlVGV4dHVyZUNhY2hlKENhY2hlVGV4dHVyZSogY2FjaGVUZXh0dXJlID0gTlVMTCk7CiAKLSAgICBDYWNoZWRHbHlwaEluZm8qIGNhY2hlR2x5cGgoU2tQYWludCogcGFpbnQsIGdseXBoX3QgZ2x5cGgsIGJvb2wgcHJlY2FjaGluZyk7Ci0gICAgdm9pZCB1cGRhdGVHbHlwaENhY2hlKFNrUGFpbnQqIHBhaW50LCBjb25zdCBTa0dseXBoJiBza2lhR2x5cGgsIENhY2hlZEdseXBoSW5mbyogZ2x5cGgsCi0gICAgICAgICAgICBib29sIHByZWNhY2hpbmcpOworICAgIENhY2hlZEdseXBoSW5mbyogY2FjaGVHbHlwaChjb25zdCBTa1BhaW50KiBwYWludCwgZ2x5cGhfdCBnbHlwaCwgYm9vbCBwcmVjYWNoaW5nKTsKKyAgICB2b2lkIHVwZGF0ZUdseXBoQ2FjaGUoY29uc3QgU2tQYWludCogcGFpbnQsIGNvbnN0IFNrR2x5cGgmIHNraWFHbHlwaCwKKyAgICAgICAgICAgIFNrR2x5cGhDYWNoZSogc2tpYUdseXBoQ2FjaGUsIENhY2hlZEdseXBoSW5mbyogZ2x5cGgsIGJvb2wgcHJlY2FjaGluZyk7CiAKICAgICB2b2lkIG1lYXN1cmVDYWNoZWRHbHlwaChDYWNoZWRHbHlwaEluZm8qIGdseXBoLCBpbnQgeCwgaW50IHksCiAgICAgICAgICAgICB1aW50OF90ICpiaXRtYXAsIHVpbnQzMl90IGJpdG1hcFcsIHVpbnQzMl90IGJpdG1hcEgsCkBAIC0xMzUsNyArMTM2LDggQEAKICAgICB2b2lkIGRyYXdDYWNoZWRHbHlwaChDYWNoZWRHbHlwaEluZm8qIGdseXBoLCBmbG9hdCB4LCBmbG9hdCBoT2Zmc2V0LCBmbG9hdCB2T2Zmc2V0LAogICAgICAgICAgICAgU2tQYXRoTWVhc3VyZSYgbWVhc3VyZSwgU2tQb2ludCogcG9zaXRpb24sIFNrVmVjdG9yKiB0YW5nZW50KTsKIAotICAgIENhY2hlZEdseXBoSW5mbyogZ2V0Q2FjaGVkR2x5cGgoU2tQYWludCogcGFpbnQsIGdseXBoX3QgdGV4dFVuaXQsIGJvb2wgcHJlY2FjaGluZyA9IGZhbHNlKTsKKyAgICBDYWNoZWRHbHlwaEluZm8qIGdldENhY2hlZEdseXBoKGNvbnN0IFNrUGFpbnQqIHBhaW50LCBnbHlwaF90IHRleHRVbml0LAorICAgICAgICAgICAgYm9vbCBwcmVjYWNoaW5nID0gZmFsc2UpOwogCiAgICAgRm9udFJlbmRlcmVyKiBtU3RhdGU7CiAgICAgRm9udERlc2NyaXB0aW9uIG1EZXNjcmlwdGlvbjsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9mb250L0ZvbnRVdGlsLmggYi9saWJzL2h3dWkvZm9udC9Gb250VXRpbC5oCmluZGV4IGNkY2IyM2MuLmMyZmQ1ZjUgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9mb250L0ZvbnRVdGlsLmgKKysrIGIvbGlicy9od3VpL2ZvbnQvRm9udFV0aWwuaApAQCAtNDAsNyArNDAsNyBAQAogI2lmIFJFTkRFUl9URVhUX0FTX0dMWVBIUwogICAgIHR5cGVkZWYgdWludDE2X3QgZ2x5cGhfdDsKICAgICAjZGVmaW5lIFRPX0dMWVBIKGcpIGcKLSAgICAjZGVmaW5lIEdFVF9NRVRSSUNTKHBhaW50LCBnbHlwaCwgbWF0cml4KSBwYWludC0+Z2V0R2x5cGhNZXRyaWNzKGdseXBoLCBtYXRyaXgpCisgICAgI2RlZmluZSBHRVRfTUVUUklDUyhjYWNoZSwgZ2x5cGgpIGNhY2hlLT5nZXRHbHlwaElETWV0cmljcyhnbHlwaCkKICAgICAjZGVmaW5lIEdFVF9HTFlQSCh0ZXh0KSBuZXh0R2x5cGgoKGNvbnN0IHVpbnQxNl90KiopICZ0ZXh0KQogICAgICNkZWZpbmUgSVNfRU5EX09GX1NUUklORyhnbHlwaCkgZmFsc2UKIApAQCAtNTMsNyArNTMsNyBAQAogI2Vsc2UKICAgICB0eXBlZGVmIFNrVW5pY2hhciBnbHlwaF90OwogICAgICNkZWZpbmUgVE9fR0xZUEgoZykgKChTa1VuaWNoYXIpIGcpCi0gICAgI2RlZmluZSBHRVRfTUVUUklDUyhwYWludCwgZ2x5cGgsIG1hdHJpeCkgcGFpbnQtPmdldFVuaWNoYXJNZXRyaWNzKGdseXBoLCBtYXRyaXgpCisgICAgI2RlZmluZSBHRVRfTUVUUklDUyhjYWNoZSwgZ2x5cGgpIGNhY2hlLT5nZXRVbmljaGFyTWV0cmljcyhnbHlwaCkKICAgICAjZGVmaW5lIEdFVF9HTFlQSCh0ZXh0KSBTa1VURjE2X05leHRVbmljaGFyKChjb25zdCB1aW50MTZfdCoqKSAmdGV4dCkKICAgICAjZGVmaW5lIElTX0VORF9PRl9TVFJJTkcoZ2x5cGgpIGdseXBoIDwgMAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvcmVuZGVydGhyZWFkL0NhbnZhc0NvbnRleHQuY3BwIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9DYW52YXNDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmI4YTMyCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9DYW52YXNDb250ZXh0LmNwcApAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiQ2FudmFzQ29udGV4dCIKKworI2luY2x1ZGUgIkNhbnZhc0NvbnRleHQuaCIKKworI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorCisjaW5jbHVkZSAiLi4vQ2FjaGVzLmgiCisjaW5jbHVkZSAiLi4vU3RlbmNpbC5oIgorCisjZGVmaW5lIFBST1BFUlRZX1JFTkRFUl9ESVJUWV9SRUdJT05TICJkZWJ1Zy5od3VpLnJlbmRlcl9kaXJ0eV9yZWdpb25zIgorI2RlZmluZSBHTEVTX1ZFUlNJT04gMgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgdWlyZW5kZXJlciB7CituYW1lc3BhY2UgcmVuZGVydGhyZWFkIHsKKworI2RlZmluZSBFUlJPUl9DQVNFKHgpIGNhc2UgeDogcmV0dXJuICN4Oworc3RhdGljIGNvbnN0IGNoYXIqIGVnbF9lcnJvcl9zdHIoRUdMaW50IGVycm9yKSB7CisgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICBFUlJPUl9DQVNFKEVHTF9TVUNDRVNTKQorICAgICAgICBFUlJPUl9DQVNFKEVHTF9OT1RfSU5JVElBTElaRUQpCisgICAgICAgIEVSUk9SX0NBU0UoRUdMX0JBRF9BQ0NFU1MpCisgICAgICAgIEVSUk9SX0NBU0UoRUdMX0JBRF9BTExPQykKKyAgICAgICAgRVJST1JfQ0FTRShFR0xfQkFEX0FUVFJJQlVURSkKKyAgICAgICAgRVJST1JfQ0FTRShFR0xfQkFEX0NPTkZJRykKKyAgICAgICAgRVJST1JfQ0FTRShFR0xfQkFEX0NPTlRFWFQpCisgICAgICAgIEVSUk9SX0NBU0UoRUdMX0JBRF9DVVJSRU5UX1NVUkZBQ0UpCisgICAgICAgIEVSUk9SX0NBU0UoRUdMX0JBRF9ESVNQTEFZKQorICAgICAgICBFUlJPUl9DQVNFKEVHTF9CQURfTUFUQ0gpCisgICAgICAgIEVSUk9SX0NBU0UoRUdMX0JBRF9OQVRJVkVfUElYTUFQKQorICAgICAgICBFUlJPUl9DQVNFKEVHTF9CQURfTkFUSVZFX1dJTkRPVykKKyAgICAgICAgRVJST1JfQ0FTRShFR0xfQkFEX1BBUkFNRVRFUikKKyAgICAgICAgRVJST1JfQ0FTRShFR0xfQkFEX1NVUkZBQ0UpCisgICAgICAgIEVSUk9SX0NBU0UoRUdMX0NPTlRFWFRfTE9TVCkKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gIlVua25vd24gZXJyb3IiOworICAgIH0KK30KK3N0YXRpYyBjb25zdCBjaGFyKiBlZ2xfZXJyb3Jfc3RyKCkgeworICAgIHJldHVybiBlZ2xfZXJyb3Jfc3RyKGVnbEdldEVycm9yKCkpOworfQorCitzdGF0aWMgYm9vbCBsb2FkX2RpcnR5X3JlZ2lvbnNfcHJvcGVydHkoKSB7CisgICAgY2hhciBidWZbUFJPUEVSVFlfVkFMVUVfTUFYXTsKKyAgICBpbnQgbGVuID0gcHJvcGVydHlfZ2V0KFBST1BFUlRZX1JFTkRFUl9ESVJUWV9SRUdJT05TLCBidWYsICJ0cnVlIik7CisgICAgcmV0dXJuICFzdHJuY2FzZWNtcCgidHJ1ZSIsIGJ1ZiwgbGVuKTsKK30KKworLy8gVGhpcyBjbGFzcyBjb250YWlucyB0aGUgc2hhcmVkIGdsb2JhbCBFR0wgb2JqZWN0cywgc3VjaCBhcyBFR0xEaXNwbGF5CisvLyBhbmQgRUdMQ29uZmlnLCB3aGljaCBhcmUgcmUtdXNlZCBieSBDYW52YXNDb250ZXh0CitjbGFzcyBHbG9iYWxDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgR2xvYmFsQ29udGV4dCogZ2V0KCk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgRUdMIHdhcyBpbml0aWFsaXplZCwKKyAgICAvLyBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZAorICAgIGJvb2wgaW5pdGlhbGl6ZSgpOworCisgICAgYm9vbCB1c2VQQnVmZmVyU3VyZmFjZSgpOworICAgIEVHTFN1cmZhY2UgY3JlYXRlU3VyZmFjZShFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRvdyk7CisgICAgdm9pZCBkZXN0cm95U3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpOworCisgICAgdm9pZCBkZXN0cm95KCk7CisKKyAgICBib29sIGlzQ3VycmVudChFR0xTdXJmYWNlIHN1cmZhY2UpIHsgcmV0dXJuIG1DdXJyZW50U3VyZmFjZSA9PSBzdXJmYWNlOyB9CisgICAgYm9vbCBtYWtlQ3VycmVudChFR0xTdXJmYWNlIHN1cmZhY2UpOworICAgIGJvb2wgc3dhcEJ1ZmZlcnMoRUdMU3VyZmFjZSBzdXJmYWNlKTsKKworICAgIGJvb2wgZW5hYmxlRGlydHlSZWdpb25zKEVHTFN1cmZhY2Ugc3VyZmFjZSk7CisKK3ByaXZhdGU6CisgICAgR2xvYmFsQ29udGV4dCgpOworICAgIC8vIEdsb2JhbENvbnRleHQgaXMgbmV2ZXIgZGVzdHJveWVkLCBtZXRob2QgaXMgcHVycG9zZWx5IG5vdCBpbXBsZW1lbnRlZAorICAgIH5HbG9iYWxDb250ZXh0KCk7CisKKyAgICBib29sIGxvYWRDb25maWcoKTsKKyAgICBib29sIGNyZWF0ZUNvbnRleHQoKTsKKworICAgIHN0YXRpYyBHbG9iYWxDb250ZXh0KiBzQ29udGV4dDsKKworICAgIEVHTERpc3BsYXkgbUVnbERpc3BsYXk7CisgICAgRUdMQ29uZmlnIG1FZ2xDb25maWc7CisgICAgRUdMQ29udGV4dCBtRWdsQ29udGV4dDsKKyAgICBFR0xTdXJmYWNlIG1QQnVmZmVyU3VyZmFjZTsKKworICAgIGNvbnN0IGJvb2wgbVJlcXVlc3REaXJ0eVJlZ2lvbnM7CisgICAgYm9vbCBtQ2FuU2V0RGlydHlSZWdpb25zOworCisgICAgRUdMU3VyZmFjZSBtQ3VycmVudFN1cmZhY2U7Cit9OworCitHbG9iYWxDb250ZXh0KiBHbG9iYWxDb250ZXh0OjpzQ29udGV4dCA9IDA7CisKK0dsb2JhbENvbnRleHQqIEdsb2JhbENvbnRleHQ6OmdldCgpIHsKKyAgICBpZiAoIXNDb250ZXh0KSB7CisgICAgICAgIHNDb250ZXh0ID0gbmV3IEdsb2JhbENvbnRleHQoKTsKKyAgICB9CisgICAgcmV0dXJuIHNDb250ZXh0OworfQorCitHbG9iYWxDb250ZXh0OjpHbG9iYWxDb250ZXh0KCkKKyAgICAgICAgOiBtRWdsRGlzcGxheShFR0xfTk9fRElTUExBWSkKKyAgICAgICAgLCBtRWdsQ29uZmlnKDApCisgICAgICAgICwgbUVnbENvbnRleHQoRUdMX05PX0NPTlRFWFQpCisgICAgICAgICwgbVBCdWZmZXJTdXJmYWNlKEVHTF9OT19TVVJGQUNFKQorICAgICAgICAsIG1SZXF1ZXN0RGlydHlSZWdpb25zKGxvYWRfZGlydHlfcmVnaW9uc19wcm9wZXJ0eSgpKQorICAgICAgICAsIG1DdXJyZW50U3VyZmFjZShFR0xfTk9fU1VSRkFDRSkgeworICAgIG1DYW5TZXREaXJ0eVJlZ2lvbnMgPSBtUmVxdWVzdERpcnR5UmVnaW9uczsKKyAgICBBTE9HRCgiUmVuZGVyIGRpcnR5IHJlZ2lvbnMgcmVxdWVzdGVkOiAlcyIsIG1SZXF1ZXN0RGlydHlSZWdpb25zID8gInRydWUiIDogImZhbHNlIik7Cit9CisKK2Jvb2wgR2xvYmFsQ29udGV4dDo6aW5pdGlhbGl6ZSgpIHsKKyAgICBpZiAobUVnbERpc3BsYXkgIT0gRUdMX05PX0RJU1BMQVkpIHJldHVybiBmYWxzZTsKKworICAgIG1FZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKKyAgICBpZiAobUVnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBnZXQgRUdMX0RFRkFVTFRfRElTUExBWSEgZXJyPSVzIiwgZWdsX2Vycm9yX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEVHTGludCBtYWpvciwgbWlub3I7CisgICAgaWYgKGVnbEluaXRpYWxpemUobUVnbERpc3BsYXksICZtYWpvciwgJm1pbm9yKSA9PSBFR0xfRkFMU0UpIHsKKyAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBpbml0aWFsaXplIGRpc3BsYXkgJXAhIGVycj0lcyIsIG1FZ2xEaXNwbGF5LCBlZ2xfZXJyb3Jfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEFMT0dJKCJJbml0aWFsaXplZCBFR0wsIHZlcnNpb24gJWQuJWQiLCAoaW50KW1ham9yLCAoaW50KW1pbm9yKTsKKworICAgIGlmICghbG9hZENvbmZpZygpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFjcmVhdGVDb250ZXh0KCkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdsb2JhbENvbnRleHQ6OmxvYWRDb25maWcoKSB7CisgICAgRUdMaW50IHN3YXBCZWhhdmlvciA9IG1DYW5TZXREaXJ0eVJlZ2lvbnMgPyBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUIDogMDsKKyAgICBFR0xpbnQgYXR0cmlic1tdID0geworICAgICAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAgICAgICAgRUdMX1JFRF9TSVpFLCA4LAorICAgICAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICAgICAgRUdMX0FMUEhBX1NJWkUsIDgsCisgICAgICAgICAgICBFR0xfREVQVEhfU0laRSwgMCwKKyAgICAgICAgICAgIEVHTF9DT05GSUdfQ0FWRUFULCBFR0xfTk9ORSwKKyAgICAgICAgICAgIEVHTF9TVEVOQ0lMX1NJWkUsIFN0ZW5jaWw6OmdldFN0ZW5jaWxTaXplKCksCisgICAgICAgICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfV0lORE9XX0JJVCB8IHN3YXBCZWhhdmlvciwKKyAgICAgICAgICAgIEVHTF9OT05FCisgICAgfTsKKworICAgIEVHTGludCBudW1fY29uZmlncyA9IDE7CisgICAgaWYgKCFlZ2xDaG9vc2VDb25maWcobUVnbERpc3BsYXksIGF0dHJpYnMsICZtRWdsQ29uZmlnLCBudW1fY29uZmlncywgJm51bV9jb25maWdzKQorICAgICAgICAgICAgfHwgbnVtX2NvbmZpZ3MgIT0gMSkgeworICAgICAgICAvLyBGYWlsZWQgdG8gZ2V0IGEgdmFsaWQgY29uZmlnCisgICAgICAgIGlmIChtQ2FuU2V0RGlydHlSZWdpb25zKSB7CisgICAgICAgICAgICBBTE9HVygiRmFpbGVkIHRvIGNob29zZSBjb25maWcgd2l0aCBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRUQsIHJldHJ5aW5nIHdpdGhvdXQuLi4iKTsKKyAgICAgICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRob3V0IGRpcnR5IHJlZ2lvbnMgZW5hYmxlZAorICAgICAgICAgICAgbUNhblNldERpcnR5UmVnaW9ucyA9IGZhbHNlOworICAgICAgICAgICAgbG9hZENvbmZpZygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR0UoIkZhaWxlZCB0byBjaG9vc2UgY29uZmlnLCBlcnJvciA9ICVzIiwgZWdsX2Vycm9yX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHbG9iYWxDb250ZXh0OjpjcmVhdGVDb250ZXh0KCkgeworICAgIEVHTGludCBhdHRyaWJzW10gPSB7IEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCBHTEVTX1ZFUlNJT04sIEVHTF9OT05FIH07CisgICAgbUVnbENvbnRleHQgPSBlZ2xDcmVhdGVDb250ZXh0KG1FZ2xEaXNwbGF5LCBtRWdsQ29uZmlnLCBFR0xfTk9fQ09OVEVYVCwgYXR0cmlicyk7CisgICAgaWYgKG1FZ2xDb250ZXh0ID09IEVHTF9OT19DT05URVhUKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gY3JlYXRlIGNvbnRleHQsIGVycm9yID0gJXMiLCBlZ2xfZXJyb3Jfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdsb2JhbENvbnRleHQ6OnVzZVBCdWZmZXJTdXJmYWNlKCkgeworICAgIGlmIChtRWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1QQnVmZmVyU3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkgeworICAgICAgICBFR0xpbnQgYXR0cmlic1tdID0geyBFR0xfV0lEVEgsIDEsIEVHTF9IRUlHSFQsIDEsIEVHTF9OT05FIH07CisgICAgICAgIG1QQnVmZmVyU3VyZmFjZSA9IGVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKG1FZ2xEaXNwbGF5LCBtRWdsQ29uZmlnLCBhdHRyaWJzKTsKKyAgICB9CisgICAgcmV0dXJuIG1ha2VDdXJyZW50KG1QQnVmZmVyU3VyZmFjZSk7Cit9CisKK0VHTFN1cmZhY2UgR2xvYmFsQ29udGV4dDo6Y3JlYXRlU3VyZmFjZShFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRvdykgeworICAgIGluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gZWdsQ3JlYXRlV2luZG93U3VyZmFjZShtRWdsRGlzcGxheSwgbUVnbENvbmZpZywgd2luZG93LCBOVUxMKTsKK30KKwordm9pZCBHbG9iYWxDb250ZXh0OjpkZXN0cm95U3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpIHsKKyAgICBpZiAoaXNDdXJyZW50KHN1cmZhY2UpKSB7CisgICAgICAgIG1ha2VDdXJyZW50KEVHTF9OT19TVVJGQUNFKTsKKyAgICB9CisgICAgaWYgKCFlZ2xEZXN0cm95U3VyZmFjZShtRWdsRGlzcGxheSwgc3VyZmFjZSkpIHsKKyAgICAgICAgQUxPR1coIkZhaWxlZCB0byBkZXN0cm95IHN1cmZhY2UgJXAsIGVycm9yPSVzIiwgKHZvaWQqKXN1cmZhY2UsIGVnbF9lcnJvcl9zdHIoKSk7CisgICAgfQorfQorCit2b2lkIEdsb2JhbENvbnRleHQ6OmRlc3Ryb3koKSB7CisgICAgaWYgKG1FZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSByZXR1cm47CisKKyAgICB1c2VQQnVmZmVyU3VyZmFjZSgpOworICAgIGlmIChDYWNoZXM6Omhhc0luc3RhbmNlKCkpIHsKKyAgICAgICAgQ2FjaGVzOjpnZXRJbnN0YW5jZSgpLnRlcm1pbmF0ZSgpOworICAgIH0KKworICAgIGVnbERlc3Ryb3lDb250ZXh0KG1FZ2xEaXNwbGF5LCBtRWdsQ29udGV4dCk7CisgICAgZWdsRGVzdHJveVN1cmZhY2UobUVnbERpc3BsYXksIG1QQnVmZmVyU3VyZmFjZSk7CisgICAgZWdsTWFrZUN1cnJlbnQobUVnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworICAgIGVnbFRlcm1pbmF0ZShtRWdsRGlzcGxheSk7CisgICAgZWdsUmVsZWFzZVRocmVhZCgpOworCisgICAgbUVnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICBtRWdsQ29udGV4dCA9IEVHTF9OT19DT05URVhUOworICAgIG1QQnVmZmVyU3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOworICAgIG1DdXJyZW50U3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOworfQorCitib29sIEdsb2JhbENvbnRleHQ6Om1ha2VDdXJyZW50KEVHTFN1cmZhY2Ugc3VyZmFjZSkgeworICAgIGlmIChpc0N1cnJlbnQoc3VyZmFjZSkpIHJldHVybiB0cnVlOworCisgICAgaWYgKHN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpIHsKKyAgICAgICAgLy8gSWYgd2UgYXJlIHNldHRpbmcgRUdMX05PX1NVUkZBQ0Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBhbnkgb2YgdGhlIHBvdGVudGlhbAorICAgICAgICAvLyByZXR1cm4gZXJyb3JzLCB3aGljaCB3b3VsZCBvbmx5IGhhcHBlbiBpZiBtRWdsRGlzcGxheSBoYWQgYWxyZWFkeSBiZWVuCisgICAgICAgIC8vIGRlc3Ryb3llZCBpbiB3aGljaCBjYXNlIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgYWxyZWFkeSBOT19DT05URVhUCisgICAgICAgIGVnbE1ha2VDdXJyZW50KG1FZ2xEaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKKyAgICB9IGVsc2UgaWYgKCFlZ2xNYWtlQ3VycmVudChtRWdsRGlzcGxheSwgc3VyZmFjZSwgc3VyZmFjZSwgbUVnbENvbnRleHQpKSB7CisgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gbWFrZSBjdXJyZW50IG9uIHN1cmZhY2UgJXAsIGVycm9yPSVzIiwgKHZvaWQqKXN1cmZhY2UsIGVnbF9lcnJvcl9zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbUN1cnJlbnRTdXJmYWNlID0gc3VyZmFjZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHbG9iYWxDb250ZXh0Ojpzd2FwQnVmZmVycyhFR0xTdXJmYWNlIHN1cmZhY2UpIHsKKyAgICBpZiAoIWVnbFN3YXBCdWZmZXJzKG1FZ2xEaXNwbGF5LCBzdXJmYWNlKSkgeworICAgICAgICBBTE9HVygiZWdsU3dhcEJ1ZmZlcnMgZmFpbGVkIG9uIHN1cmZhY2UgJXAsIGVycm9yPSVzIiwgKHZvaWQqKXN1cmZhY2UsIGVnbF9lcnJvcl9zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR2xvYmFsQ29udGV4dDo6ZW5hYmxlRGlydHlSZWdpb25zKEVHTFN1cmZhY2Ugc3VyZmFjZSkgeworICAgIGlmICghbVJlcXVlc3REaXJ0eVJlZ2lvbnMpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtQ2FuU2V0RGlydHlSZWdpb25zKSB7CisgICAgICAgIGlmICghZWdsU3VyZmFjZUF0dHJpYihtRWdsRGlzcGxheSwgc3VyZmFjZSwgRUdMX1NXQVBfQkVIQVZJT1IsIEVHTF9CVUZGRVJfUFJFU0VSVkVEKSkgeworICAgICAgICAgICAgQUxPR1coIkZhaWxlZCB0byBzZXQgRUdMX1NXQVBfQkVIQVZJT1Igb24gc3VyZmFjZSAlcCwgZXJyb3I9JXMiLAorICAgICAgICAgICAgICAgICAgICAodm9pZCopIHN1cmZhY2UsIGVnbF9lcnJvcl9zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIC8vIFBlcmhhcHMgaXQgaXMgYWxyZWFkeSBlbmFibGVkPworICAgIEVHTGludCB2YWx1ZTsKKyAgICBpZiAoIWVnbFF1ZXJ5U3VyZmFjZShtRWdsRGlzcGxheSwgc3VyZmFjZSwgRUdMX1NXQVBfQkVIQVZJT1IsICZ2YWx1ZSkpIHsKKyAgICAgICAgQUxPR1coIkZhaWxlZCB0byBxdWVyeSBFR0xfU1dBUF9CRUhBVklPUiBvbiBzdXJmYWNlICVwLCBlcnJvcj0lcCIsCisgICAgICAgICAgICAgICAgKHZvaWQqKSBzdXJmYWNlLCBlZ2xfZXJyb3Jfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWx1ZSA9PSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKK30KKworQ2FudmFzQ29udGV4dDo6Q2FudmFzQ29udGV4dCgpCisgICAgICAgIDogbUVnbFN1cmZhY2UoRUdMX05PX1NVUkZBQ0UpCisgICAgICAgICwgbURpcnR5UmVnaW9uc0VuYWJsZWQoZmFsc2UpIHsKKyAgICBtR2xvYmFsQ29udGV4dCA9IEdsb2JhbENvbnRleHQ6OmdldCgpOworfQorCitDYW52YXNDb250ZXh0Ojp+Q2FudmFzQ29udGV4dCgpIHsKKyAgICBzZXRTdXJmYWNlKE5VTEwpOworfQorCitib29sIENhbnZhc0NvbnRleHQ6OnNldFN1cmZhY2UoRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3cpIHsKKyAgICBpZiAobUVnbFN1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0UpIHsKKyAgICAgICAgbUdsb2JhbENvbnRleHQtPmRlc3Ryb3lTdXJmYWNlKG1FZ2xTdXJmYWNlKTsKKyAgICAgICAgbUVnbFN1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsKKyAgICB9CisKKyAgICBpZiAod2luZG93KSB7CisgICAgICAgIG1FZ2xTdXJmYWNlID0gbUdsb2JhbENvbnRleHQtPmNyZWF0ZVN1cmZhY2Uod2luZG93KTsKKyAgICB9CisKKyAgICBpZiAobUVnbFN1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0UpIHsKKyAgICAgICAgbURpcnR5UmVnaW9uc0VuYWJsZWQgPSBtR2xvYmFsQ29udGV4dC0+ZW5hYmxlRGlydHlSZWdpb25zKG1FZ2xTdXJmYWNlKTsKKyAgICB9CisgICAgcmV0dXJuICF3aW5kb3cgfHwgbUVnbFN1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0U7Cit9CisKK2Jvb2wgQ2FudmFzQ29udGV4dDo6c3dhcEJ1ZmZlcnMoKSB7CisgICAgcmV0dXJuIG1HbG9iYWxDb250ZXh0LT5zd2FwQnVmZmVycyhtRWdsU3VyZmFjZSk7Cit9CisKK2Jvb2wgQ2FudmFzQ29udGV4dDo6bWFrZUN1cnJlbnQoKSB7CisgICAgcmV0dXJuIG1HbG9iYWxDb250ZXh0LT5tYWtlQ3VycmVudChtRWdsU3VyZmFjZSk7Cit9CisKK2Jvb2wgQ2FudmFzQ29udGV4dDo6dXNlR2xvYmFsUEJ1ZmZlclN1cmZhY2UoKSB7CisgICAgcmV0dXJuIEdsb2JhbENvbnRleHQ6OmdldCgpLT51c2VQQnVmZmVyU3VyZmFjZSgpOworfQorCit9IC8qIG5hbWVzcGFjZSByZW5kZXJ0aHJlYWQgKi8KK30gLyogbmFtZXNwYWNlIHVpcmVuZGVyZXIgKi8KK30gLyogbmFtZXNwYWNlIGFuZHJvaWQgKi8KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvQ2FudmFzQ29udGV4dC5oIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9DYW52YXNDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhZTczNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvQ2FudmFzQ29udGV4dC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIENBTlZBU0NPTlRFWFRfSF8KKyNkZWZpbmUgQ0FOVkFTQ09OVEVYVF9IXworCisjaW5jbHVkZSA8Y3V0aWxzL2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8RUdML2VnbC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgdWlyZW5kZXJlciB7CituYW1lc3BhY2UgcmVuZGVydGhyZWFkIHsKKworY2xhc3MgR2xvYmFsQ29udGV4dDsKKworLy8gVGhpcyBwZXItcmVuZGVyZXIgY2xhc3MgbWFuYWdlcyB0aGUgYnJpZGdlIGJldHdlZW4gdGhlIGdsb2JhbCBFR0wgY29udGV4dAorLy8gYW5kIHRoZSByZW5kZXIgc3VyZmFjZS4KK2NsYXNzIENhbnZhc0NvbnRleHQgeworcHVibGljOgorICAgIEFORFJPSURfQVBJIENhbnZhc0NvbnRleHQoKTsKKyAgICBBTkRST0lEX0FQSSB+Q2FudmFzQ29udGV4dCgpOworCisgICAgQU5EUk9JRF9BUEkgYm9vbCBzZXRTdXJmYWNlKEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93KTsKKyAgICBBTkRST0lEX0FQSSBib29sIHN3YXBCdWZmZXJzKCk7CisgICAgQU5EUk9JRF9BUEkgYm9vbCBtYWtlQ3VycmVudCgpOworCisgICAgQU5EUk9JRF9BUEkgc3RhdGljIGJvb2wgdXNlR2xvYmFsUEJ1ZmZlclN1cmZhY2UoKTsKKworcHJpdmF0ZToKKworICAgIEdsb2JhbENvbnRleHQqIG1HbG9iYWxDb250ZXh0OworICAgIEVHTFN1cmZhY2UgbUVnbFN1cmZhY2U7CisgICAgYm9vbCBtRGlydHlSZWdpb25zRW5hYmxlZDsKK307CisKK30gLyogbmFtZXNwYWNlIHJlbmRlcnRocmVhZCAqLworfSAvKiBuYW1lc3BhY2UgdWlyZW5kZXJlciAqLworfSAvKiBuYW1lc3BhY2UgYW5kcm9pZCAqLworI2VuZGlmIC8qIENBTlZBU0NPTlRFWFRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvUmVuZGVyVGFzay5jcHAgYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclRhc2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYTkxYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclRhc2suY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19UQUcgIlJlbmRlclRhc2siCisKKyNpbmNsdWRlICJSZW5kZXJUYXNrLmgiCisKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIHVpcmVuZGVyZXIgeworbmFtZXNwYWNlIHJlbmRlcnRocmVhZCB7CisKK1JlbmRlclRhc2s6OlJlbmRlclRhc2soKSA6IG1OZXh0KDApIHsKK30KKworUmVuZGVyVGFzazo6flJlbmRlclRhc2soKSB7Cit9CisKK30gLyogbmFtZXNwYWNlIHJlbmRlcnRocmVhZCAqLworfSAvKiBuYW1lc3BhY2UgdWlyZW5kZXJlciAqLworfSAvKiBuYW1lc3BhY2UgYW5kcm9pZCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3JlbmRlcnRocmVhZC9SZW5kZXJUYXNrLmggYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclRhc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjViMWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9SZW5kZXJUYXNrLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgUkVOREVSVEFTS19IXworI2RlZmluZSBSRU5ERVJUQVNLX0hfCisKKyNpbmNsdWRlIDxjdXRpbHMvY29tcGlsZXIuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIHVpcmVuZGVyZXIgeworbmFtZXNwYWNlIHJlbmRlcnRocmVhZCB7CisKK2NsYXNzIEFORFJPSURfQVBJIFJlbmRlclRhc2sgeworcHVibGljOgorICAgIEFORFJPSURfQVBJIFJlbmRlclRhc2soKTsKKyAgICBBTkRST0lEX0FQSSB2aXJ0dWFsIH5SZW5kZXJUYXNrKCk7CisKKyAgICBBTkRST0lEX0FQSSB2aXJ0dWFsIHZvaWQgcnVuKCkgPSAwOworCisgICAgUmVuZGVyVGFzayogbU5leHQ7Cit9OworCit9IC8qIG5hbWVzcGFjZSByZW5kZXJ0aHJlYWQgKi8KK30gLyogbmFtZXNwYWNlIHVpcmVuZGVyZXIgKi8KK30gLyogbmFtZXNwYWNlIGFuZHJvaWQgKi8KKyNlbmRpZiAvKiBSRU5ERVJUQVNLX0hfICovCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclRocmVhZC5jcHAgYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclRocmVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjZDZlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvUmVuZGVyVGhyZWFkLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJSZW5kZXJUaHJlYWQiCisKKyNpbmNsdWRlICJSZW5kZXJUaHJlYWQuaCIKKworI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7Cit1c2luZyBuYW1lc3BhY2UgdWlyZW5kZXJlcjo6cmVuZGVydGhyZWFkOworQU5EUk9JRF9TSU5HTEVUT05fU1RBVElDX0lOU1RBTkNFKFJlbmRlclRocmVhZCk7CisKK25hbWVzcGFjZSB1aXJlbmRlcmVyIHsKK25hbWVzcGFjZSByZW5kZXJ0aHJlYWQgeworCitSZW5kZXJUaHJlYWQ6OlJlbmRlclRocmVhZCgpIDogVGhyZWFkKHRydWUpLCBTaW5nbGV0b248UmVuZGVyVGhyZWFkPigpCisgICAgICAgICwgbVF1ZXVlSGVhZCgwKSwgbVF1ZXVlVGFpbCgwKSB7CisgICAgbUxvb3BlciA9IG5ldyBMb29wZXIoZmFsc2UpOworICAgIHJ1bigiUmVuZGVyVGhyZWFkIik7Cit9CisKK1JlbmRlclRocmVhZDo6flJlbmRlclRocmVhZCgpIHsKK30KKworYm9vbCBSZW5kZXJUaHJlYWQ6OnRocmVhZExvb3AoKSB7CisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgcmVzdWx0ID0gbUxvb3Blci0+cG9sbEFsbCgtMSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTG9vcGVyOjpQT0xMX0VSUk9SKSB7CisgICAgICAgICAgICAvLyBUT0RPIFNvbWV0aGluZz8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8vIFByb2Nlc3Mgb3VyIHF1ZXVlLCBpZiB3ZSBoYXZlIGFueXRoaW5nCisgICAgICAgIHdoaWxlIChSZW5kZXJUYXNrKiB0YXNrID0gbmV4dFRhc2soKSkgeworICAgICAgICAgICAgdGFzay0+cnVuKCk7CisgICAgICAgICAgICBkZWxldGUgdGFzazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaHJlYWQ6OnF1ZXVlKFJlbmRlclRhc2sqIHRhc2spIHsKKyAgICBBdXRvTXV0ZXggX2xvY2sobUxvY2spOworICAgIGlmIChtUXVldWVUYWlsKSB7CisgICAgICAgIG1RdWV1ZVRhaWwtPm1OZXh0ID0gdGFzazsKKyAgICB9IGVsc2UgeworICAgICAgICBtUXVldWVIZWFkID0gdGFzazsKKyAgICB9CisgICAgbVF1ZXVlVGFpbCA9IHRhc2s7CisgICAgaWYgKG1RdWV1ZUhlYWQgPT0gdGFzaykgeworICAgICAgICAvLyBPbmx5IHdha2UgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGFzaworICAgICAgICBtTG9vcGVyLT53YWtlKCk7CisgICAgfQorfQorCitSZW5kZXJUYXNrKiBSZW5kZXJUaHJlYWQ6Om5leHRUYXNrKCkgeworICAgIEF1dG9NdXRleCBfbG9jayhtTG9jayk7CisgICAgUmVuZGVyVGFzayogcmV0ID0gbVF1ZXVlSGVhZDsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIGlmIChtUXVldWVUYWlsID09IG1RdWV1ZUhlYWQpIHsKKyAgICAgICAgICAgIG1RdWV1ZVRhaWwgPSBtUXVldWVIZWFkID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1RdWV1ZUhlYWQgPSByZXQtPm1OZXh0OworICAgICAgICB9CisgICAgICAgIHJldC0+bU5leHQgPSAwOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCit9IC8qIG5hbWVzcGFjZSByZW5kZXJ0aHJlYWQgKi8KK30gLyogbmFtZXNwYWNlIHVpcmVuZGVyZXIgKi8KK30gLyogbmFtZXNwYWNlIGFuZHJvaWQgKi8KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvUmVuZGVyVGhyZWFkLmggYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZGQ1NzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclRocmVhZC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIFJFTkRFUlRIUkVBRF9IXworI2RlZmluZSBSRU5ERVJUSFJFQURfSF8KKworI2luY2x1ZGUgIlJlbmRlclRhc2suaCIKKyNpbmNsdWRlIDxjdXRpbHMvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDx1dGlscy9Mb29wZXIuaD4KKyNpbmNsdWRlIDx1dGlscy9NdXRleC5oPgorI2luY2x1ZGUgPHV0aWxzL1NpbmdsZXRvbi5oPgorI2luY2x1ZGUgPHV0aWxzL1RocmVhZC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgdWlyZW5kZXJlciB7CituYW1lc3BhY2UgcmVuZGVydGhyZWFkIHsKKworY2xhc3MgQU5EUk9JRF9BUEkgUmVuZGVyVGhyZWFkIDogcHVibGljIFRocmVhZCwgcHVibGljIFNpbmdsZXRvbjxSZW5kZXJUaHJlYWQ+IHsKK3B1YmxpYzoKKyAgICAvLyBSZW5kZXJUaHJlYWQgdGFrZXMgY29tcGxldGUgb3duZXJzaGlwIG9mIHRhc2tzIHRoYXQgYXJlIHF1ZXVlZAorICAgIC8vIGFuZCB3aWxsIGRlbGV0ZSB0aGVtIGFmdGVyIHRoZXkgYXJlIHJ1bgorICAgIEFORFJPSURfQVBJIHZvaWQgcXVldWUoUmVuZGVyVGFzayogdGFzayk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgdGhyZWFkTG9vcCgpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTaW5nbGV0b248UmVuZGVyVGhyZWFkPjsKKworICAgIFJlbmRlclRocmVhZCgpOworICAgIHZpcnR1YWwgflJlbmRlclRocmVhZCgpOworCisgICAgUmVuZGVyVGFzayogbmV4dFRhc2soKTsKKworICAgIHNwPExvb3Blcj4gbUxvb3BlcjsKKyAgICBNdXRleCBtTG9jazsKKworICAgIFJlbmRlclRhc2sqIG1RdWV1ZUhlYWQ7CisgICAgUmVuZGVyVGFzayogbVF1ZXVlVGFpbDsKK307CisKK30gLyogbmFtZXNwYWNlIHJlbmRlcnRocmVhZCAqLworfSAvKiBuYW1lc3BhY2UgdWlyZW5kZXJlciAqLworfSAvKiBuYW1lc3BhY2UgYW5kcm9pZCAqLworI2VuZGlmIC8qIFJFTkRFUlRIUkVBRF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9pbnB1dC9BbmRyb2lkLm1rIGIvbGlicy9pbnB1dC9BbmRyb2lkLm1rCmluZGV4IDZlOTQ0ZWYuLmViMmJlYmUgMTAwNjQ0Ci0tLSBhL2xpYnMvaW5wdXQvQW5kcm9pZC5taworKysgYi9saWJzL2lucHV0L0FuZHJvaWQubWsKQEAgLTQyLDYgKzQyLDggQEAKIExPQ0FMX0NfSU5DTFVERVMgOj0gXAogICAgIGV4dGVybmFsL3NraWEvaW5jbHVkZS9jb3JlCiAKK0xPQ0FMX0NGTEFHUyArPSAtV25vLXVudXNlZC1wYXJhbWV0ZXIKKwogTE9DQUxfTU9EVUxFOj0gbGliaW5wdXRzZXJ2aWNlCiAKIExPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCmRpZmYgLS1naXQgYS9saWJzL2lucHV0L0V2ZW50SHViLmNwcCBiL2xpYnMvaW5wdXQvRXZlbnRIdWIuY3BwCmluZGV4IGZjNjQ2NTYuLmUyZWZkMTcgMTAwNjQ0Ci0tLSBhL2xpYnMvaW5wdXQvRXZlbnRIdWIuY3BwCisrKyBiL2xpYnMvaW5wdXQvRXZlbnRIdWIuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL2xpbWl0cy5oPgogI2luY2x1ZGUgPHN5cy9zaGExLmg+CisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KIAogLyogdGhpcyBtYWNybyBpcyB1c2VkIHRvIHRlbGwgaWYgImJpdCIgaXMgc2V0IGluICJhcnJheSIKICAqIGl0IHNlbGVjdHMgYSBieXRlIGZyb20gdGhlIGFycmF5LCBhbmQgZG9lcyBhIGJvb2xlYW4gQU5ECkBAIC05MywzMiArOTQsMTIgQEAKICAgICByZXR1cm4gb3V0OwogfQogCi1zdGF0aWMgdm9pZCBzZXREZXNjcmlwdG9yKElucHV0RGV2aWNlSWRlbnRpZmllciYgaWRlbnRpZmllcikgewotICAgIC8vIENvbXB1dGUgYSBkZXZpY2UgZGVzY3JpcHRvciB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIGRldmljZS4KLSAgICAvLyBUaGUgZGVzY3JpcHRvciBpcyBhc3N1bWVkIHRvIGJlIGEgc3RhYmxlIGlkZW50aWZpZXIuICBJdHMgdmFsdWUgc2hvdWxkIG5vdAotICAgIC8vIGNoYW5nZSBiZXR3ZWVuIHJlYm9vdHMsIHJlY29ubmVjdGlvbnMsIGZpcm13YXJlIHVwZGF0ZXMgb3IgbmV3IHJlbGVhc2VzIG9mIEFuZHJvaWQuCi0gICAgLy8gSWRlYWxseSwgd2UgYWxzbyB3YW50IHRoZSBkZXNjcmlwdG9yIHRvIGJlIHNob3J0IGFuZCByZWxhdGl2ZWx5IG9wYXF1ZS4KLSAgICBTdHJpbmc4IHJhd0Rlc2NyaXB0b3I7Ci0gICAgcmF3RGVzY3JpcHRvci5hcHBlbmRGb3JtYXQoIjolMDR4OiUwNHg6IiwgaWRlbnRpZmllci52ZW5kb3IsIGlkZW50aWZpZXIucHJvZHVjdCk7Ci0gICAgaWYgKCFpZGVudGlmaWVyLnVuaXF1ZUlkLmlzRW1wdHkoKSkgewotICAgICAgICByYXdEZXNjcmlwdG9yLmFwcGVuZCgidW5pcXVlSWQ6Iik7Ci0gICAgICAgIHJhd0Rlc2NyaXB0b3IuYXBwZW5kKGlkZW50aWZpZXIudW5pcXVlSWQpOwotICAgIH0gaWYgKGlkZW50aWZpZXIudmVuZG9yID09IDAgJiYgaWRlbnRpZmllci5wcm9kdWN0ID09IDApIHsKLSAgICAgICAgLy8gSWYgd2UgZG9uJ3Qga25vdyB0aGUgdmVuZG9yIGFuZCBwcm9kdWN0IGlkLCB0aGVuIHRoZSBkZXZpY2UgaXMgcHJvYmFibHkKLSAgICAgICAgLy8gYnVpbHQtaW4gc28gd2UgbmVlZCB0byByZWx5IG9uIG90aGVyIGluZm9ybWF0aW9uIHRvIHVuaXF1ZWx5IGlkZW50aWZ5Ci0gICAgICAgIC8vIHRoZSBpbnB1dCBkZXZpY2UuICBVc3VhbGx5IHdlIHRyeSB0byBhdm9pZCByZWx5aW5nIG9uIHRoZSBkZXZpY2UgbmFtZSBvcgotICAgICAgICAvLyBsb2NhdGlvbiBidXQgZm9yIGJ1aWx0LWluIGlucHV0IGRldmljZSwgdGhleSBhcmUgdW5saWtlbHkgdG8gZXZlciBjaGFuZ2UuCi0gICAgICAgIGlmICghaWRlbnRpZmllci5uYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmF3RGVzY3JpcHRvci5hcHBlbmQoIm5hbWU6Iik7Ci0gICAgICAgICAgICByYXdEZXNjcmlwdG9yLmFwcGVuZChpZGVudGlmaWVyLm5hbWUpOwotICAgICAgICB9IGVsc2UgaWYgKCFpZGVudGlmaWVyLmxvY2F0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmF3RGVzY3JpcHRvci5hcHBlbmQoImxvY2F0aW9uOiIpOwotICAgICAgICAgICAgcmF3RGVzY3JpcHRvci5hcHBlbmQoaWRlbnRpZmllci5sb2NhdGlvbik7Ci0gICAgICAgIH0KK3N0YXRpYyB2b2lkIGdldExpbnV4UmVsZWFzZShpbnQqIG1ham9yLCBpbnQqIG1pbm9yKSB7CisgICAgc3RydWN0IHV0c25hbWUgaW5mbzsKKyAgICBpZiAodW5hbWUoJmluZm8pIHx8IHNzY2FuZihpbmZvLnJlbGVhc2UsICIlZC4lZCIsIG1ham9yLCBtaW5vcikgPD0gMCkgeworICAgICAgICAqbWFqb3IgPSAwLCAqbWlub3IgPSAwOworICAgICAgICBBTE9HRSgiQ291bGQgbm90IGdldCBsaW51eCB2ZXJzaW9uOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CiAgICAgfQotICAgIGlkZW50aWZpZXIuZGVzY3JpcHRvciA9IHNoYTEocmF3RGVzY3JpcHRvcik7Ci0gICAgQUxPR1YoIkNyZWF0ZWQgZGVzY3JpcHRvcjogcmF3PSVzLCBjb29rZWQ9JXMiLCByYXdEZXNjcmlwdG9yLnN0cmluZygpLAotICAgICAgICAgICAgaWRlbnRpZmllci5kZXNjcmlwdG9yLnN0cmluZygpKTsKIH0KIAogLy8gLS0tIEdsb2JhbCBGdW5jdGlvbnMgLS0tCkBAIC0yMzYsNiArMjE3LDExIEBACiAgICAgcmVzdWx0ID0gZXBvbGxfY3RsKG1FcG9sbEZkLCBFUE9MTF9DVExfQURELCBtV2FrZVJlYWRQaXBlRmQsICZldmVudEl0ZW0pOwogICAgIExPR19BTFdBWVNfRkFUQUxfSUYocmVzdWx0ICE9IDAsICJDb3VsZCBub3QgYWRkIHdha2UgcmVhZCBwaXBlIHRvIGVwb2xsIGluc3RhbmNlLiAgZXJybm89JWQiLAogICAgICAgICAgICAgZXJybm8pOworCisgICAgaW50IG1ham9yLCBtaW5vcjsKKyAgICBnZXRMaW51eFJlbGVhc2UoJm1ham9yLCAmbWlub3IpOworICAgIC8vIEVQT0xMV0FLRVVQIHdhcyBpbnRyb2R1Y2VkIGluIGtlcm5lbCAzLjUKKyAgICBtVXNpbmdFcG9sbFdha2V1cCA9IG1ham9yID4gMyB8fCAobWFqb3IgPT0gMyAmJiBtaW5vciA+PSA1KTsKIH0KIAogRXZlbnRIdWI6On5FdmVudEh1Yih2b2lkKSB7CkBAIC01MDksOCArNDk1LDkgQEAKIGJvb2wgRXZlbnRIdWI6Omhhc0xlZChpbnQzMl90IGRldmljZUlkLCBpbnQzMl90IGxlZCkgY29uc3QgewogICAgIEF1dG9NdXRleCBfbChtTG9jayk7CiAgICAgRGV2aWNlKiBkZXZpY2UgPSBnZXREZXZpY2VMb2NrZWQoZGV2aWNlSWQpOwotICAgIGlmIChkZXZpY2UgJiYgbGVkID49IDAgJiYgbGVkIDw9IExFRF9NQVgpIHsKLSAgICAgICAgaWYgKHRlc3RfYml0KGxlZCwgZGV2aWNlLT5sZWRCaXRtYXNrKSkgeworICAgIGludDMyX3Qgc2M7CisgICAgaWYgKGRldmljZSAmJiBtYXBMZWQoZGV2aWNlLCBsZWQsICZzYykgPT0gTk9fRVJST1IpIHsKKyAgICAgICAgaWYgKHRlc3RfYml0KHNjLCBkZXZpY2UtPmxlZEJpdG1hc2spKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTUyMCwxMiArNTA3LDE3IEBACiB2b2lkIEV2ZW50SHViOjpzZXRMZWRTdGF0ZShpbnQzMl90IGRldmljZUlkLCBpbnQzMl90IGxlZCwgYm9vbCBvbikgewogICAgIEF1dG9NdXRleCBfbChtTG9jayk7CiAgICAgRGV2aWNlKiBkZXZpY2UgPSBnZXREZXZpY2VMb2NrZWQoZGV2aWNlSWQpOwotICAgIGlmIChkZXZpY2UgJiYgIWRldmljZS0+aXNWaXJ0dWFsKCkgJiYgbGVkID49IDAgJiYgbGVkIDw9IExFRF9NQVgpIHsKKyAgICBzZXRMZWRTdGF0ZUxvY2tlZChkZXZpY2UsIGxlZCwgb24pOworfQorCit2b2lkIEV2ZW50SHViOjpzZXRMZWRTdGF0ZUxvY2tlZChEZXZpY2UqIGRldmljZSwgaW50MzJfdCBsZWQsIGJvb2wgb24pIHsKKyAgICBpbnQzMl90IHNjOworICAgIGlmIChkZXZpY2UgJiYgIWRldmljZS0+aXNWaXJ0dWFsKCkgJiYgbWFwTGVkKGRldmljZSwgbGVkLCAmc2MpICE9IE5BTUVfTk9UX0ZPVU5EKSB7CiAgICAgICAgIHN0cnVjdCBpbnB1dF9ldmVudCBldjsKICAgICAgICAgZXYudGltZS50dl9zZWMgPSAwOwogICAgICAgICBldi50aW1lLnR2X3VzZWMgPSAwOwogICAgICAgICBldi50eXBlID0gRVZfTEVEOwotICAgICAgICBldi5jb2RlID0gbGVkOworICAgICAgICBldi5jb2RlID0gc2M7CiAgICAgICAgIGV2LnZhbHVlID0gb24gPyAxIDogMDsKIAogICAgICAgICBzc2l6ZV90IG5Xcml0ZTsKQEAgLTU3MCw2ICs1NjIsNTcgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBTdHJpbmc4IGdlbmVyYXRlRGVzY3JpcHRvcihJbnB1dERldmljZUlkZW50aWZpZXImIGlkZW50aWZpZXIpIHsKKyAgICBTdHJpbmc4IHJhd0Rlc2NyaXB0b3I7CisgICAgcmF3RGVzY3JpcHRvci5hcHBlbmRGb3JtYXQoIjolMDR4OiUwNHg6IiwgaWRlbnRpZmllci52ZW5kb3IsCisgICAgICAgICAgICBpZGVudGlmaWVyLnByb2R1Y3QpOworICAgIC8vIFRPRE8gYWRkIGhhbmRsaW5nIGZvciBVU0IgZGV2aWNlcyB0byBub3QgdW5pcXVlaWZ5IGticyB0aGF0IHNob3cgdXAgdHdpY2UKKyAgICBpZiAoIWlkZW50aWZpZXIudW5pcXVlSWQuaXNFbXB0eSgpKSB7CisgICAgICAgIHJhd0Rlc2NyaXB0b3IuYXBwZW5kKCJ1bmlxdWVJZDoiKTsKKyAgICAgICAgcmF3RGVzY3JpcHRvci5hcHBlbmQoaWRlbnRpZmllci51bmlxdWVJZCk7CisgICAgfSBlbHNlIGlmIChpZGVudGlmaWVyLm5vbmNlICE9IDApIHsKKyAgICAgICAgcmF3RGVzY3JpcHRvci5hcHBlbmRGb3JtYXQoIm5vbmNlOiUwNHgiLCBpZGVudGlmaWVyLm5vbmNlKTsKKyAgICB9CisKKyAgICBpZiAoaWRlbnRpZmllci52ZW5kb3IgPT0gMCAmJiBpZGVudGlmaWVyLnByb2R1Y3QgPT0gMCkgeworICAgICAgICAvLyBJZiB3ZSBkb24ndCBrbm93IHRoZSB2ZW5kb3IgYW5kIHByb2R1Y3QgaWQsIHRoZW4gdGhlIGRldmljZSBpcyBwcm9iYWJseQorICAgICAgICAvLyBidWlsdC1pbiBzbyB3ZSBuZWVkIHRvIHJlbHkgb24gb3RoZXIgaW5mb3JtYXRpb24gdG8gdW5pcXVlbHkgaWRlbnRpZnkKKyAgICAgICAgLy8gdGhlIGlucHV0IGRldmljZS4gIFVzdWFsbHkgd2UgdHJ5IHRvIGF2b2lkIHJlbHlpbmcgb24gdGhlIGRldmljZSBuYW1lIG9yCisgICAgICAgIC8vIGxvY2F0aW9uIGJ1dCBmb3IgYnVpbHQtaW4gaW5wdXQgZGV2aWNlLCB0aGV5IGFyZSB1bmxpa2VseSB0byBldmVyIGNoYW5nZS4KKyAgICAgICAgaWYgKCFpZGVudGlmaWVyLm5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByYXdEZXNjcmlwdG9yLmFwcGVuZCgibmFtZToiKTsKKyAgICAgICAgICAgIHJhd0Rlc2NyaXB0b3IuYXBwZW5kKGlkZW50aWZpZXIubmFtZSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWlkZW50aWZpZXIubG9jYXRpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByYXdEZXNjcmlwdG9yLmFwcGVuZCgibG9jYXRpb246Iik7CisgICAgICAgICAgICByYXdEZXNjcmlwdG9yLmFwcGVuZChpZGVudGlmaWVyLmxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZGVudGlmaWVyLmRlc2NyaXB0b3IgPSBzaGExKHJhd0Rlc2NyaXB0b3IpOworICAgIHJldHVybiByYXdEZXNjcmlwdG9yOworfQorCit2b2lkIEV2ZW50SHViOjphc3NpZ25EZXNjcmlwdG9yTG9ja2VkKElucHV0RGV2aWNlSWRlbnRpZmllciYgaWRlbnRpZmllcikgeworICAgIC8vIENvbXB1dGUgYSBkZXZpY2UgZGVzY3JpcHRvciB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIGRldmljZS4KKyAgICAvLyBUaGUgZGVzY3JpcHRvciBpcyBhc3N1bWVkIHRvIGJlIGEgc3RhYmxlIGlkZW50aWZpZXIuICBJdHMgdmFsdWUgc2hvdWxkIG5vdAorICAgIC8vIGNoYW5nZSBiZXR3ZWVuIHJlYm9vdHMsIHJlY29ubmVjdGlvbnMsIGZpcm13YXJlIHVwZGF0ZXMgb3IgbmV3IHJlbGVhc2VzCisgICAgLy8gb2YgQW5kcm9pZC4gSW4gcHJhY3RpY2Ugd2Ugc29tZXRpbWVzIGdldCBkZXZpY2VzIHRoYXQgY2Fubm90IGJlIHVuaXF1ZWx5CisgICAgLy8gaWRlbnRpZmllZC4gSW4gdGhpcyBjYXNlIHdlIGVuZm9yY2UgdW5pcXVlbmVzcyBiZXR3ZWVuIGNvbm5lY3RlZCBkZXZpY2VzLgorICAgIC8vIElkZWFsbHksIHdlIGFsc28gd2FudCB0aGUgZGVzY3JpcHRvciB0byBiZSBzaG9ydCBhbmQgcmVsYXRpdmVseSBvcGFxdWUuCisKKyAgICBpZGVudGlmaWVyLm5vbmNlID0gMDsKKyAgICBTdHJpbmc4IHJhd0Rlc2NyaXB0b3IgPSBnZW5lcmF0ZURlc2NyaXB0b3IoaWRlbnRpZmllcik7CisgICAgaWYgKGlkZW50aWZpZXIudW5pcXVlSWQuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElmIGl0IGRpZG4ndCBoYXZlIGEgdW5pcXVlIGlkIGNoZWNrIGZvciBjb25mbGljdHMgYW5kIGVuZm9yY2UKKyAgICAgICAgLy8gdW5pcXVlbmVzcyBpZiBuZWNlc3NhcnkuCisgICAgICAgIHdoaWxlKGdldERldmljZUJ5RGVzY3JpcHRvckxvY2tlZChpZGVudGlmaWVyLmRlc2NyaXB0b3IpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlkZW50aWZpZXIubm9uY2UrKzsKKyAgICAgICAgICAgIHJhd0Rlc2NyaXB0b3IgPSBnZW5lcmF0ZURlc2NyaXB0b3IoaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9CisgICAgQUxPR1YoIkNyZWF0ZWQgZGVzY3JpcHRvcjogcmF3PSVzLCBjb29rZWQ9JXMiLCByYXdEZXNjcmlwdG9yLnN0cmluZygpLAorICAgICAgICAgICAgaWRlbnRpZmllci5kZXNjcmlwdG9yLnN0cmluZygpKTsKK30KKwogdm9pZCBFdmVudEh1Yjo6dmlicmF0ZShpbnQzMl90IGRldmljZUlkLCBuc2Vjc190IGR1cmF0aW9uKSB7CiAgICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKICAgICBEZXZpY2UqIGRldmljZSA9IGdldERldmljZUxvY2tlZChkZXZpY2VJZCk7CkBAIC02MjYsNiArNjY5LDE3IEBACiAgICAgfQogfQogCitFdmVudEh1Yjo6RGV2aWNlKiBFdmVudEh1Yjo6Z2V0RGV2aWNlQnlEZXNjcmlwdG9yTG9ja2VkKFN0cmluZzgmIGRlc2NyaXB0b3IpIGNvbnN0IHsKKyAgICBzaXplX3Qgc2l6ZSA9IG1EZXZpY2VzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBEZXZpY2UqIGRldmljZSA9IG1EZXZpY2VzLnZhbHVlQXQoaSk7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbXBhcmUoZGV2aWNlLT5pZGVudGlmaWVyLmRlc2NyaXB0b3IpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBkZXZpY2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKIEV2ZW50SHViOjpEZXZpY2UqIEV2ZW50SHViOjpnZXREZXZpY2VMb2NrZWQoaW50MzJfdCBkZXZpY2VJZCkgY29uc3QgewogICAgIGlmIChkZXZpY2VJZCA9PSBCVUlMVF9JTl9LRVlCT0FSRF9JRCkgewogICAgICAgICBkZXZpY2VJZCA9IG1CdWlsdEluS2V5Ym9hcmRJZDsKQEAgLTEwNjUsNyArMTExOSw3IEBACiAgICAgfQogCiAgICAgLy8gRmlsbCBpbiB0aGUgZGVzY3JpcHRvci4KLSAgICBzZXREZXNjcmlwdG9yKGlkZW50aWZpZXIpOworICAgIGFzc2lnbkRlc2NyaXB0b3JMb2NrZWQoaWRlbnRpZmllcik7CiAKICAgICAvLyBNYWtlIGZpbGUgZGVzY3JpcHRvciBub24tYmxvY2tpbmcgZm9yIHVzZSB3aXRoIHBvbGwoKS4KICAgICBpZiAoZmNudGwoZmQsIEZfU0VURkwsIE9fTk9OQkxPQ0spKSB7CkBAIC0xMjM5LDEyICsxMjkzLDEzIEBACiAKICAgICBpZiAoZGV2aWNlLT5jbGFzc2VzICYgKElOUFVUX0RFVklDRV9DTEFTU19KT1lTVElDSyB8IElOUFVUX0RFVklDRV9DTEFTU19HQU1FUEFEKSkgewogICAgICAgICBkZXZpY2UtPmNvbnRyb2xsZXJOdW1iZXIgPSBnZXROZXh0Q29udHJvbGxlck51bWJlckxvY2tlZChkZXZpY2UpOworICAgICAgICBzZXRMZWRGb3JDb250cm9sbGVyKGRldmljZSk7CiAgICAgfQogCiAgICAgLy8gUmVnaXN0ZXIgd2l0aCBlcG9sbC4KICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgZXZlbnRJdGVtOwogICAgIG1lbXNldCgmZXZlbnRJdGVtLCAwLCBzaXplb2YoZXZlbnRJdGVtKSk7Ci0gICAgZXZlbnRJdGVtLmV2ZW50cyA9IEVQT0xMSU47CisgICAgZXZlbnRJdGVtLmV2ZW50cyA9IG1Vc2luZ0Vwb2xsV2FrZXVwID8gRVBPTExJTiA6IEVQT0xMSU4gfCBFUE9MTFdBS0VVUDsKICAgICBldmVudEl0ZW0uZGF0YS51MzIgPSBkZXZpY2VJZDsKICAgICBpZiAoZXBvbGxfY3RsKG1FcG9sbEZkLCBFUE9MTF9DVExfQURELCBmZCwgJmV2ZW50SXRlbSkpIHsKICAgICAgICAgQUxPR0UoIkNvdWxkIG5vdCBhZGQgZGV2aWNlIGZkIHRvIGVwb2xsIGluc3RhbmNlLiAgZXJybm89JWQiLCBlcnJubyk7CkBAIC0xMjUyLDE1ICsxMzA3LDIwIEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICAvLyBFbmFibGUgd2FrZS1sb2NrIGJlaGF2aW9yIG9uIGtlcm5lbHMgdGhhdCBzdXBwb3J0IGl0LgotICAgIC8vIFRPRE86IE9ubHkgbmVlZCB0aGlzIGZvciBkZXZpY2VzIHRoYXQgY2FuIHJlYWxseSB3YWtlIHRoZSBzeXN0ZW0uCisgICAgU3RyaW5nOCB3YWtlTWVjaGFuaXNtKCJFUE9MTFdBS0VVUCIpOworICAgIGlmICghbVVzaW5nRXBvbGxXYWtldXApIHsKICNpZm5kZWYgRVZJT0NTU1VTUEVOREJMT0NLCi0gICAgLy8gdWFwaSBoZWFkZXJzIGRvbid0IGluY2x1ZGUgRVZJT0NTU1VTUEVOREJMT0NLLCBhbmQgZnV0dXJlIGtlcm5lbHMKLSAgICAvLyB3aWxsIHVzZSBhbiBlcG9sbCBmbGFnIGluc3RlYWQsIHNvIGFzIGxvbmcgYXMgd2Ugd2FudCB0byBzdXBwb3J0Ci0gICAgLy8gdGhpcyBmZWF0dXJlLCB3ZSBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIGRlZmluZSB0aGUgaW9jdGwgb3Vyc2VsdmVzLgorICAgICAgICAvLyB1YXBpIGhlYWRlcnMgZG9uJ3QgaW5jbHVkZSBFVklPQ1NTVVNQRU5EQkxPQ0ssIGFuZCBmdXR1cmUga2VybmVscworICAgICAgICAvLyB3aWxsIHVzZSBhbiBlcG9sbCBmbGFnIGluc3RlYWQsIHNvIGFzIGxvbmcgYXMgd2Ugd2FudCB0byBzdXBwb3J0CisgICAgICAgIC8vIHRoaXMgZmVhdHVyZSwgd2UgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBkZWZpbmUgdGhlIGlvY3RsIG91cnNlbHZlcy4KICNkZWZpbmUgRVZJT0NTU1VTUEVOREJMT0NLIF9JT1coJ0UnLCAweDkxLCBpbnQpCiAjZW5kaWYKLSAgICBib29sIHVzaW5nU3VzcGVuZEJsb2NrSW9jdGwgPSAhaW9jdGwoZmQsIEVWSU9DU1NVU1BFTkRCTE9DSywgMSk7CisgICAgICAgIGlmIChpb2N0bChmZCwgRVZJT0NTU1VTUEVOREJMT0NLLCAxKSkgeworICAgICAgICAgICAgd2FrZU1lY2hhbmlzbSA9ICI8bm9uZT4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2FrZU1lY2hhbmlzbSA9ICJFVklPQ1NTVVNQRU5EQkxPQ0siOworICAgICAgICB9CisgICAgfQogCiAgICAgLy8gVGVsbCB0aGUga2VybmVsIHRoYXQgd2Ugd2FudCB0byB1c2UgdGhlIG1vbm90b25pYyBjbG9jayBmb3IgcmVwb3J0aW5nIHRpbWVzdGFtcHMKICAgICAvLyBhc3NvY2lhdGVkIHdpdGggaW5wdXQgZXZlbnRzLiAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgaW5wdXQgc3lzdGVtCkBAIC0xMjgyLDE0ICsxMzQyLDE0IEBACiAKICAgICBBTE9HSSgiTmV3IGRldmljZTogaWQ9JWQsIGZkPSVkLCBwYXRoPSclcycsIG5hbWU9JyVzJywgY2xhc3Nlcz0weCV4LCAiCiAgICAgICAgICAgICAiY29uZmlndXJhdGlvbj0nJXMnLCBrZXlMYXlvdXQ9JyVzJywga2V5Q2hhcmFjdGVyTWFwPSclcycsIGJ1aWx0aW5LZXlib2FyZD0lcywgIgotICAgICAgICAgICAgInVzaW5nU3VzcGVuZEJsb2NrSW9jdGw9JXMsIHVzaW5nQ2xvY2tJb2N0bD0lcyIsCisgICAgICAgICAgICAid2FrZU1lY2hhbmlzbT0lcywgdXNpbmdDbG9ja0lvY3RsPSVzIiwKICAgICAgICAgIGRldmljZUlkLCBmZCwgZGV2aWNlUGF0aCwgZGV2aWNlLT5pZGVudGlmaWVyLm5hbWUuc3RyaW5nKCksCiAgICAgICAgICBkZXZpY2UtPmNsYXNzZXMsCiAgICAgICAgICBkZXZpY2UtPmNvbmZpZ3VyYXRpb25GaWxlLnN0cmluZygpLAogICAgICAgICAgZGV2aWNlLT5rZXlNYXAua2V5TGF5b3V0RmlsZS5zdHJpbmcoKSwKICAgICAgICAgIGRldmljZS0+a2V5TWFwLmtleUNoYXJhY3Rlck1hcEZpbGUuc3RyaW5nKCksCiAgICAgICAgICB0b1N0cmluZyhtQnVpbHRJbktleWJvYXJkSWQgPT0gZGV2aWNlSWQpLAotICAgICAgICAgdG9TdHJpbmcodXNpbmdTdXNwZW5kQmxvY2tJb2N0bCksIHRvU3RyaW5nKHVzaW5nQ2xvY2tJb2N0bCkpOworICAgICAgICAgd2FrZU1lY2hhbmlzbS5zdHJpbmcoKSwgdG9TdHJpbmcodXNpbmdDbG9ja0lvY3RsKSk7CiAKICAgICBhZGREZXZpY2VMb2NrZWQoZGV2aWNlKTsKICAgICByZXR1cm4gMDsKQEAgLTEyOTksNyArMTM1OSw3IEBACiAgICAgSW5wdXREZXZpY2VJZGVudGlmaWVyIGlkZW50aWZpZXI7CiAgICAgaWRlbnRpZmllci5uYW1lID0gIlZpcnR1YWwiOwogICAgIGlkZW50aWZpZXIudW5pcXVlSWQgPSAiPHZpcnR1YWw+IjsKLSAgICBzZXREZXNjcmlwdG9yKGlkZW50aWZpZXIpOworICAgIGFzc2lnbkRlc2NyaXB0b3JMb2NrZWQoaWRlbnRpZmllcik7CiAKICAgICBEZXZpY2UqIGRldmljZSA9IG5ldyBEZXZpY2UoLTEsIFZJUlRVQUxfS0VZQk9BUkRfSUQsIFN0cmluZzgoIjx2aXJ0dWFsPiIpLCBpZGVudGlmaWVyKTsKICAgICBkZXZpY2UtPmNsYXNzZXMgPSBJTlBVVF9ERVZJQ0VfQ0xBU1NfS0VZQk9BUkQKQEAgLTEzNzgsNiArMTQzOCwxMSBAQAogICAgIG1Db250cm9sbGVyTnVtYmVycy5jbGVhckJpdChzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtIC0gMSkpOwogfQogCit2b2lkIEV2ZW50SHViOjpzZXRMZWRGb3JDb250cm9sbGVyKERldmljZSogZGV2aWNlKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfQ09OVFJPTExFUl9MRURTOyBpKyspIHsKKyAgICAgICAgc2V0TGVkU3RhdGVMb2NrZWQoZGV2aWNlLCBBTEVEX0NPTlRST0xMRVJfMSArIGksIGRldmljZS0+Y29udHJvbGxlck51bWJlciA9PSBpICsgMSk7CisgICAgfQorfQogCiBib29sIEV2ZW50SHViOjpoYXNLZXljb2RlTG9ja2VkKERldmljZSogZGV2aWNlLCBpbnQga2V5Y29kZSkgY29uc3QgewogICAgIGlmICghZGV2aWNlLT5rZXlNYXAuaGF2ZUtleUxheW91dCgpIHx8ICFkZXZpY2UtPmtleUJpdG1hc2spIHsKQEAgLTEzOTcsNiArMTQ2MiwyMSBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3RhdHVzX3QgRXZlbnRIdWI6Om1hcExlZChEZXZpY2UqIGRldmljZSwgaW50MzJfdCBsZWQsIGludDMyX3QqIG91dFNjYW5Db2RlKSBjb25zdCB7CisgICAgaWYgKCFkZXZpY2UtPmtleU1hcC5oYXZlS2V5TGF5b3V0KCkgfHwgIWRldmljZS0+bGVkQml0bWFzaykgeworICAgICAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7CisgICAgfQorCisgICAgaW50MzJfdCBzY2FuQ29kZTsKKyAgICBpZihkZXZpY2UtPmtleU1hcC5rZXlMYXlvdXRNYXAtPmZpbmRTY2FuQ29kZUZvckxlZChsZWQsICZzY2FuQ29kZSkgIT0gTkFNRV9OT1RfRk9VTkQpIHsKKyAgICAgICAgaWYoc2NhbkNvZGUgPj0gMCAmJiBzY2FuQ29kZSA8PSBMRURfTUFYICYmIHRlc3RfYml0KHNjYW5Db2RlLCBkZXZpY2UtPmxlZEJpdG1hc2spKSB7CisgICAgICAgICAgICAqb3V0U2NhbkNvZGUgPSBzY2FuQ29kZTsKKyAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7Cit9CisKIHN0YXR1c190IEV2ZW50SHViOjpjbG9zZURldmljZUJ5UGF0aExvY2tlZChjb25zdCBjaGFyICpkZXZpY2VQYXRoKSB7CiAgICAgRGV2aWNlKiBkZXZpY2UgPSBnZXREZXZpY2VCeVBhdGhMb2NrZWQoZGV2aWNlUGF0aCk7CiAgICAgaWYgKGRldmljZSkgewpkaWZmIC0tZ2l0IGEvbGlicy9pbnB1dC9FdmVudEh1Yi5oIGIvbGlicy9pbnB1dC9FdmVudEh1Yi5oCmluZGV4IGFlMjhmMDEuLjIwMTc5YWUgMTAwNjQ0Ci0tLSBhL2xpYnMvaW5wdXQvRXZlbnRIdWIuaAorKysgYi9saWJzL2lucHV0L0V2ZW50SHViLmgKQEAgLTIzMSw2ICsyMzEsOCBAQAogICAgICAgICAgICAgdWludDhfdCogb3V0RmxhZ3MpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNTY2FuQ29kZShpbnQzMl90IGRldmljZUlkLCBpbnQzMl90IHNjYW5Db2RlKSBjb25zdCA9IDA7CisKKyAgICAvKiBMRUQgcmVsYXRlZCBmdW5jdGlvbnMgZXhwZWN0IEFuZHJvaWQgTEVEIGNvbnN0YW50cywgbm90IHNjYW4gY29kZXMgb3IgSElEIHVzYWdlcyAqLwogICAgIHZpcnR1YWwgYm9vbCBoYXNMZWQoaW50MzJfdCBkZXZpY2VJZCwgaW50MzJfdCBsZWQpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGVkU3RhdGUoaW50MzJfdCBkZXZpY2VJZCwgaW50MzJfdCBsZWQsIGJvb2wgb24pID0gMDsKIApAQCAtMzcxLDYgKzM3Myw3IEBACiAgICAgc3RhdHVzX3Qgb3BlbkRldmljZUxvY2tlZChjb25zdCBjaGFyICpkZXZpY2VQYXRoKTsKICAgICB2b2lkIGNyZWF0ZVZpcnR1YWxLZXlib2FyZExvY2tlZCgpOwogICAgIHZvaWQgYWRkRGV2aWNlTG9ja2VkKERldmljZSogZGV2aWNlKTsKKyAgICB2b2lkIGFzc2lnbkRlc2NyaXB0b3JMb2NrZWQoSW5wdXREZXZpY2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKTsKIAogICAgIHN0YXR1c190IGNsb3NlRGV2aWNlQnlQYXRoTG9ja2VkKGNvbnN0IGNoYXIgKmRldmljZVBhdGgpOwogICAgIHZvaWQgY2xvc2VEZXZpY2VMb2NrZWQoRGV2aWNlKiBkZXZpY2UpOwpAQCAtMzgwLDYgKzM4Myw3IEBACiAgICAgdm9pZCBzY2FuRGV2aWNlc0xvY2tlZCgpOwogICAgIHN0YXR1c190IHJlYWROb3RpZnlMb2NrZWQoKTsKIAorICAgIERldmljZSogZ2V0RGV2aWNlQnlEZXNjcmlwdG9yTG9ja2VkKFN0cmluZzgmIGRlc2NyaXB0b3IpIGNvbnN0OwogICAgIERldmljZSogZ2V0RGV2aWNlTG9ja2VkKGludDMyX3QgZGV2aWNlSWQpIGNvbnN0OwogICAgIERldmljZSogZ2V0RGV2aWNlQnlQYXRoTG9ja2VkKGNvbnN0IGNoYXIqIGRldmljZVBhdGgpIGNvbnN0OwogCkBAIC0zOTMsNiArMzk3LDEwIEBACiAKICAgICBpbnQzMl90IGdldE5leHRDb250cm9sbGVyTnVtYmVyTG9ja2VkKERldmljZSogZGV2aWNlKTsKICAgICB2b2lkIHJlbGVhc2VDb250cm9sbGVyTnVtYmVyTG9ja2VkKERldmljZSogZGV2aWNlKTsKKyAgICB2b2lkIHNldExlZEZvckNvbnRyb2xsZXIoRGV2aWNlKiBkZXZpY2UpOworCisgICAgc3RhdHVzX3QgbWFwTGVkKERldmljZSogZGV2aWNlLCBpbnQzMl90IGxlZCwgaW50MzJfdCogb3V0U2NhbkNvZGUpIGNvbnN0OworICAgIHZvaWQgc2V0TGVkU3RhdGVMb2NrZWQoRGV2aWNlKiBkZXZpY2UsIGludDMyX3QgbGVkLCBib29sIG9uKTsKIAogICAgIC8vIFByb3RlY3QgYWxsIGludGVybmFsIHN0YXRlLgogICAgIG11dGFibGUgTXV0ZXggbUxvY2s7CkBAIC00NDAsNiArNDQ4LDggQEAKICAgICBzaXplX3QgbVBlbmRpbmdFdmVudENvdW50OwogICAgIHNpemVfdCBtUGVuZGluZ0V2ZW50SW5kZXg7CiAgICAgYm9vbCBtUGVuZGluZ0lOb3RpZnk7CisKKyAgICBib29sIG1Vc2luZ0Vwb2xsV2FrZXVwOwogfTsKIAogfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2xpYnMvaW5wdXQvSW5wdXRSZWFkZXIuY3BwIGIvbGlicy9pbnB1dC9JbnB1dFJlYWRlci5jcHAKaW5kZXggMDM4NTJhNS4uOTRlMmE4MCAxMDA2NDQKLS0tIGEvbGlicy9pbnB1dC9JbnB1dFJlYWRlci5jcHAKKysrIGIvbGlicy9pbnB1dC9JbnB1dFJlYWRlci5jcHAKQEAgLTkxMSw3ICs5MTEsNyBAQAogICAgICAgICBpZiAoIWNoYW5nZXMgfHwgKGNoYW5nZXMgJiBJbnB1dFJlYWRlckNvbmZpZ3VyYXRpb246OkNIQU5HRV9LRVlCT0FSRF9MQVlPVVRTKSkgewogICAgICAgICAgICAgaWYgKCEobUNsYXNzZXMgJiBJTlBVVF9ERVZJQ0VfQ0xBU1NfVklSVFVBTCkpIHsKICAgICAgICAgICAgICAgICBzcDxLZXlDaGFyYWN0ZXJNYXA+IGtleWJvYXJkTGF5b3V0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LT5nZXRQb2xpY3koKS0+Z2V0S2V5Ym9hcmRMYXlvdXRPdmVybGF5KG1JZGVudGlmaWVyLmRlc2NyaXB0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQtPmdldFBvbGljeSgpLT5nZXRLZXlib2FyZExheW91dE92ZXJsYXkobUlkZW50aWZpZXIpOwogICAgICAgICAgICAgICAgIGlmIChtQ29udGV4dC0+Z2V0RXZlbnRIdWIoKS0+c2V0S2V5Ym9hcmRMYXlvdXRPdmVybGF5KG1JZCwga2V5Ym9hcmRMYXlvdXQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGJ1bXBHZW5lcmF0aW9uKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjE5Nyw5ICsyMTk3LDkgQEAKIH0KIAogdm9pZCBLZXlib2FyZElucHV0TWFwcGVyOjpyZXNldExlZFN0YXRlKCkgewotICAgIGluaXRpYWxpemVMZWRTdGF0ZShtQ2Fwc0xvY2tMZWRTdGF0ZSwgTEVEX0NBUFNMKTsKLSAgICBpbml0aWFsaXplTGVkU3RhdGUobU51bUxvY2tMZWRTdGF0ZSwgTEVEX05VTUwpOwotICAgIGluaXRpYWxpemVMZWRTdGF0ZShtU2Nyb2xsTG9ja0xlZFN0YXRlLCBMRURfU0NST0xMTCk7CisgICAgaW5pdGlhbGl6ZUxlZFN0YXRlKG1DYXBzTG9ja0xlZFN0YXRlLCBBTEVEX0NBUFNfTE9DSyk7CisgICAgaW5pdGlhbGl6ZUxlZFN0YXRlKG1OdW1Mb2NrTGVkU3RhdGUsIEFMRURfTlVNX0xPQ0spOworICAgIGluaXRpYWxpemVMZWRTdGF0ZShtU2Nyb2xsTG9ja0xlZFN0YXRlLCBBTEVEX1NDUk9MTF9MT0NLKTsKIAogICAgIHVwZGF0ZUxlZFN0YXRlKHRydWUpOwogfQpAQCAtMjIxMCwxMSArMjIxMCwxMSBAQAogfQogCiB2b2lkIEtleWJvYXJkSW5wdXRNYXBwZXI6OnVwZGF0ZUxlZFN0YXRlKGJvb2wgcmVzZXQpIHsKLSAgICB1cGRhdGVMZWRTdGF0ZUZvck1vZGlmaWVyKG1DYXBzTG9ja0xlZFN0YXRlLCBMRURfQ0FQU0wsCisgICAgdXBkYXRlTGVkU3RhdGVGb3JNb2RpZmllcihtQ2Fwc0xvY2tMZWRTdGF0ZSwgQUxFRF9DQVBTX0xPQ0ssCiAgICAgICAgICAgICBBTUVUQV9DQVBTX0xPQ0tfT04sIHJlc2V0KTsKLSAgICB1cGRhdGVMZWRTdGF0ZUZvck1vZGlmaWVyKG1OdW1Mb2NrTGVkU3RhdGUsIExFRF9OVU1MLAorICAgIHVwZGF0ZUxlZFN0YXRlRm9yTW9kaWZpZXIobU51bUxvY2tMZWRTdGF0ZSwgQUxFRF9OVU1fTE9DSywKICAgICAgICAgICAgIEFNRVRBX05VTV9MT0NLX09OLCByZXNldCk7Ci0gICAgdXBkYXRlTGVkU3RhdGVGb3JNb2RpZmllcihtU2Nyb2xsTG9ja0xlZFN0YXRlLCBMRURfU0NST0xMTCwKKyAgICB1cGRhdGVMZWRTdGF0ZUZvck1vZGlmaWVyKG1TY3JvbGxMb2NrTGVkU3RhdGUsIEFMRURfU0NST0xMX0xPQ0ssCiAgICAgICAgICAgICBBTUVUQV9TQ1JPTExfTE9DS19PTiwgcmVzZXQpOwogfQogCkBAIC02MjgzLDcgKzYyODMsNyBAQAogCiAgICAgICAgICAgICAgICAgLy8gVG8gZWxpbWluYXRlIG5vaXNlIHdoaWxlIHRoZSBqb3lzdGljayBpcyBhdCByZXN0LCBmaWx0ZXIgb3V0IHNtYWxsIHZhcmlhdGlvbnMKICAgICAgICAgICAgICAgICAvLyBpbiBheGlzIHZhbHVlcyB1cCBmcm9udC4KLSAgICAgICAgICAgICAgICBheGlzLmZpbHRlciA9IGF4aXMuZmxhdCAqIDAuMjVmOworICAgICAgICAgICAgICAgIGF4aXMuZmlsdGVyID0gYXhpcy5mdXp6ID8gYXhpcy5mdXp6IDogYXhpcy5mbGF0ICogMC4yNWY7CiAKICAgICAgICAgICAgICAgICBtQXhlcy5hZGQoYWJzLCBheGlzKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2xpYnMvaW5wdXQvSW5wdXRSZWFkZXIuaCBiL2xpYnMvaW5wdXQvSW5wdXRSZWFkZXIuaAppbmRleCBhOGJiNjM2Li42NzRmNjdkIDEwMDY0NAotLS0gYS9saWJzL2lucHV0L0lucHV0UmVhZGVyLmgKKysrIGIvbGlicy9pbnB1dC9JbnB1dFJlYWRlci5oCkBAIC0yODEsNyArMjgxLDggQEAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5SW5wdXREZXZpY2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8SW5wdXREZXZpY2VJbmZvPiYgaW5wdXREZXZpY2VzKSA9IDA7CiAKICAgICAvKiBHZXRzIHRoZSBrZXlib2FyZCBsYXlvdXQgZm9yIGEgcGFydGljdWxhciBpbnB1dCBkZXZpY2UuICovCi0gICAgdmlydHVhbCBzcDxLZXlDaGFyYWN0ZXJNYXA+IGdldEtleWJvYXJkTGF5b3V0T3ZlcmxheShjb25zdCBTdHJpbmc4JiBpbnB1dERldmljZURlc2NyaXB0b3IpID0gMDsKKyAgICB2aXJ0dWFsIHNwPEtleUNoYXJhY3Rlck1hcD4gZ2V0S2V5Ym9hcmRMYXlvdXRPdmVybGF5KAorICAgICAgICAgICAgY29uc3QgSW5wdXREZXZpY2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKSA9IDA7CiAKICAgICAvKiBHZXRzIGEgdXNlci1zdXBwbGllZCBhbGlhcyBmb3IgYSBwYXJ0aWN1bGFyIGlucHV0IGRldmljZSwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIG5vbmUuICovCiAgICAgdmlydHVhbCBTdHJpbmc4IGdldERldmljZUFsaWFzKGNvbnN0IElucHV0RGV2aWNlSWRlbnRpZmllciYgaWRlbnRpZmllcikgPSAwOwpAQCAtNTc0LDggKzU3NSw4IEBACiBwcml2YXRlOgogICAgIElucHV0UmVhZGVyQ29udGV4dCogbUNvbnRleHQ7CiAgICAgaW50MzJfdCBtSWQ7Ci0gICAgaW50MzJfdCBtQ29udHJvbGxlck51bWJlcjsKICAgICBpbnQzMl90IG1HZW5lcmF0aW9uOworICAgIGludDMyX3QgbUNvbnRyb2xsZXJOdW1iZXI7CiAgICAgSW5wdXREZXZpY2VJZGVudGlmaWVyIG1JZGVudGlmaWVyOwogICAgIFN0cmluZzggbUFsaWFzOwogICAgIHVpbnQzMl90IG1DbGFzc2VzOwpkaWZmIC0tZ2l0IGEvbGlicy9pbnB1dC9TcHJpdGVDb250cm9sbGVyLmNwcCBiL2xpYnMvaW5wdXQvU3ByaXRlQ29udHJvbGxlci5jcHAKaW5kZXggZmQ5YzY2Yi4uMjY2N2E3MiAxMDA2NDQKLS0tIGEvbGlicy9pbnB1dC9TcHJpdGVDb250cm9sbGVyLmNwcAorKysgYi9saWJzL2lucHV0L1Nwcml0ZUNvbnRyb2xsZXIuY3BwCkBAIC0yMTYsMTIgKzIxNiwxMiBAQAogICAgICAgICAgICAgICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShTa1hmZXJtb2RlOjprU3JjX01vZGUpOwogICAgICAgICAgICAgICAgIHN1cmZhY2VDYW52YXMuZHJhd0JpdG1hcCh1cGRhdGUuc3RhdGUuaWNvbi5iaXRtYXAsIDAsIDAsICZwYWludCk7CiAKLSAgICAgICAgICAgICAgICBpZiAob3V0QnVmZmVyLndpZHRoID4gdWludDMyX3QodXBkYXRlLnN0YXRlLmljb24uYml0bWFwLndpZHRoKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG91dEJ1ZmZlci53aWR0aCA+IHVwZGF0ZS5zdGF0ZS5pY29uLmJpdG1hcC53aWR0aCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHBhaW50LnNldENvbG9yKDApOyAvLyB0cmFuc3BhcmVudCBmaWxsIGNvbG9yCiAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2VDYW52YXMuZHJhd1JlY3RDb29yZHModXBkYXRlLnN0YXRlLmljb24uYml0bWFwLndpZHRoKCksIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0QnVmZmVyLndpZHRoLCB1cGRhdGUuc3RhdGUuaWNvbi5iaXRtYXAuaGVpZ2h0KCksIHBhaW50KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG91dEJ1ZmZlci5oZWlnaHQgPiB1aW50MzJfdCh1cGRhdGUuc3RhdGUuaWNvbi5iaXRtYXAuaGVpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG91dEJ1ZmZlci5oZWlnaHQgPiB1cGRhdGUuc3RhdGUuaWNvbi5iaXRtYXAuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgcGFpbnQuc2V0Q29sb3IoMCk7IC8vIHRyYW5zcGFyZW50IGZpbGwgY29sb3IKICAgICAgICAgICAgICAgICAgICAgc3VyZmFjZUNhbnZhcy5kcmF3UmVjdENvb3JkcygwLCB1cGRhdGUuc3RhdGUuaWNvbi5iaXRtYXAuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0QnVmZmVyLndpZHRoLCBvdXRCdWZmZXIuaGVpZ2h0LCBwYWludCk7CmRpZmYgLS1naXQgYS9saWJzL2lucHV0L3Rlc3RzL0lucHV0UmVhZGVyX3Rlc3QuY3BwIGIvbGlicy9pbnB1dC90ZXN0cy9JbnB1dFJlYWRlcl90ZXN0LmNwcAppbmRleCBmMDY4NzMyLi5hYWE5NzNkIDEwMDY0NAotLS0gYS9saWJzL2lucHV0L3Rlc3RzL0lucHV0UmVhZGVyX3Rlc3QuY3BwCisrKyBiL2xpYnMvaW5wdXQvdGVzdHMvSW5wdXRSZWFkZXJfdGVzdC5jcHAKQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICBtSW5wdXREZXZpY2VzID0gaW5wdXREZXZpY2VzOwogICAgIH0KIAotICAgIHZpcnR1YWwgc3A8S2V5Q2hhcmFjdGVyTWFwPiBnZXRLZXlib2FyZExheW91dE92ZXJsYXkoY29uc3QgU3RyaW5nOCYgaW5wdXREZXZpY2VEZXNjcmlwdG9yKSB7CisgICAgdmlydHVhbCBzcDxLZXlDaGFyYWN0ZXJNYXA+IGdldEtleWJvYXJkTGF5b3V0T3ZlcmxheShjb25zdCBJbnB1dERldmljZUlkZW50aWZpZXImIGlkZW50aWZpZXIpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCmRpZmYgLS1naXQgYS9sb2NhdGlvbi9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2xvY2F0aW9uL0dwc05ldEluaXRpYXRlZEhhbmRsZXIuamF2YSBiL2xvY2F0aW9uL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvbG9jYXRpb24vR3BzTmV0SW5pdGlhdGVkSGFuZGxlci5qYXZhCmluZGV4IDU3ZTI3ODYuLmIzM2JhMDAgMTAwNjQ0Ci0tLSBhL2xvY2F0aW9uL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvbG9jYXRpb24vR3BzTmV0SW5pdGlhdGVkSGFuZGxlci5qYXZhCisrKyBiL2xvY2F0aW9uL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvbG9jYXRpb24vR3BzTmV0SW5pdGlhdGVkSGFuZGxlci5qYXZhCkBAIC0yNSw3ICsyNSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLkxvY2F0aW9uTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApkaWZmIC0tZ2l0IGEvbG9jYXRpb24vbGliL2phdmEvY29tL2FuZHJvaWQvbG9jYXRpb24vcHJvdmlkZXIvR2VvZmVuY2VQcm92aWRlci5qYXZhIGIvbG9jYXRpb24vbGliL2phdmEvY29tL2FuZHJvaWQvbG9jYXRpb24vcHJvdmlkZXIvR2VvZmVuY2VQcm92aWRlci5qYXZhCmluZGV4IDI2MThmMzQuLmZhZmFhODQgMTAwNjQ0Ci0tLSBhL2xvY2F0aW9uL2xpYi9qYXZhL2NvbS9hbmRyb2lkL2xvY2F0aW9uL3Byb3ZpZGVyL0dlb2ZlbmNlUHJvdmlkZXIuamF2YQorKysgYi9sb2NhdGlvbi9saWIvamF2YS9jb20vYW5kcm9pZC9sb2NhdGlvbi9wcm92aWRlci9HZW9mZW5jZVByb3ZpZGVyLmphdmEKQEAgLTIxLDkgKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiAKIGltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLklHZW9mZW5jZVByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTG9uZzsKIAogLyoqCiAgKiBCYXNlIGNsYXNzIGZvciBnZW9mZW5jZSBwcm92aWRlcnMgaW1wbGVtZW50ZWQgYXMgdW5idW5kbGVkIHNlcnZpY2VzLgpkaWZmIC0tZ2l0IGEvbG9jYXRpb24vbGliL2phdmEvY29tL2FuZHJvaWQvbG9jYXRpb24vcHJvdmlkZXIvTG9jYXRpb25Qcm92aWRlckJhc2UuamF2YSBiL2xvY2F0aW9uL2xpYi9qYXZhL2NvbS9hbmRyb2lkL2xvY2F0aW9uL3Byb3ZpZGVyL0xvY2F0aW9uUHJvdmlkZXJCYXNlLmphdmEKaW5kZXggMTUwYzI4OS4uZDcxN2Y0MCAxMDA2NDQKLS0tIGEvbG9jYXRpb24vbGliL2phdmEvY29tL2FuZHJvaWQvbG9jYXRpb24vcHJvdmlkZXIvTG9jYXRpb25Qcm92aWRlckJhc2UuamF2YQorKysgYi9sb2NhdGlvbi9saWIvamF2YS9jb20vYW5kcm9pZC9sb2NhdGlvbi9wcm92aWRlci9Mb2NhdGlvblByb3ZpZGVyQmFzZS5qYXZhCkBAIC0yNCw3ICsyNCw2IEBACiBpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5JTG9jYXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubG9jYXRpb24uTG9jYXRpb247CiBpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvblJlcXVlc3Q7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0FtcklucHV0U3RyZWFtLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQW1ySW5wdXRTdHJlYW0uamF2YQppbmRleCBlMjExNWU0Li5mOTBmMWUyIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQW1ySW5wdXRTdHJlYW0uamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQW1ySW5wdXRTdHJlYW0uamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQubWVkaWE7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXN5bmNQbGF5ZXIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9Bc3luY1BsYXllci5qYXZhCmluZGV4IDgwNDUyOGUuLjE0YjE5OWUgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9Bc3luY1BsYXllci5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9Bc3luY1BsYXllci5qYXZhCkBAIC0yMiw4ICsyMiw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb0Zvcm1hdC5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvRm9ybWF0LmphdmEKaW5kZXggNDlmNDk4ZS4uMjZlOWNjNSAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvRm9ybWF0LmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvRm9ybWF0LmphdmEKQEAgLTMxLDcgKzMxLDggQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTkNPRElOR19JTlZBTElEID0gMDsKICAgICAvKiogRGVmYXVsdCBhdWRpbyBkYXRhIGZvcm1hdCAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVOQ09ESU5HX0RFRkFVTFQgPSAxOwotICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBKTkkgY29kZSBmb3IgQXVkaW9UcmFjaywgQXVkaW9SZWNvcmQKKworICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBjb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvRm9ybWF0LmgKICAgICAvKiogQXVkaW8gZGF0YSBmb3JtYXQ6IFBDTSAxNiBiaXQgcGVyIHNhbXBsZS4gR3VhcmFudGVlZCB0byBiZSBzdXBwb3J0ZWQgYnkgZGV2aWNlcy4gKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTkNPRElOR19QQ01fMTZCSVQgPSAyOwogICAgIC8qKiBBdWRpbyBkYXRhIGZvcm1hdDogUENNIDggYml0IHBlciBzYW1wbGUuIE5vdCBndWFyYW50ZWVkIHRvIGJlIHN1cHBvcnRlZCBieSBkZXZpY2VzLiAqLwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlci5qYXZhCmluZGV4IGQ2NTJjYWUuLjhhZTA2ZTAgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb01hbmFnZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9NYW5hZ2VyLmphdmEKQEAgLTI2LDcgKzI2LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQubWVkaWEuUmVtb3RlQ29udHJvbGxlci5PbkNsaWVudFVwZGF0ZUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1JlY29yZC5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkLmphdmEKaW5kZXggNDYxYjUyZi4uYTQ4OTFmOCAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkLmphdmEKQEAgLTE3OSwxMyArMTc5LDE2IEBACiAgICAgLyoqCiAgICAgICogQXVkaW8gc2Vzc2lvbiBJRAogICAgICAqLwotICAgIHByaXZhdGUgaW50IG1TZXNzaW9uSWQgPSAwOworICAgIHByaXZhdGUgaW50IG1TZXNzaW9uSWQgPSBBdWRpb1N5c3RlbS5BVURJT19TRVNTSU9OX0FMTE9DQVRFOwogCiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBDb25zdHJ1Y3RvciwgRmluYWxpemUKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLyoqCiAgICAgICogQ2xhc3MgY29uc3RydWN0b3IuCisgICAgICogVGhvdWdoIHNvbWUgaW52YWxpZCBwYXJhbWV0ZXJzIHdpbGwgcmVzdWx0IGluIGFuIHtAbGluayBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb259IGV4Y2VwdGlvbiwKKyAgICAgKiBvdGhlciBlcnJvcnMgZG8gbm90LiAgVGh1cyB5b3Ugc2hvdWxkIGNhbGwge0BsaW5rICNnZXRTdGF0ZSgpfSBpbW1lZGlhdGVseSBhZnRlciBjb25zdHJ1Y3Rpb24KKyAgICAgKiB0byBjb25maXJtIHRoYXQgdGhlIG9iamVjdCBpcyB1c2FibGUuCiAgICAgICogQHBhcmFtIGF1ZGlvU291cmNlIHRoZSByZWNvcmRpbmcgc291cmNlLiBTZWUge0BsaW5rIE1lZGlhUmVjb3JkZXIuQXVkaW9Tb3VyY2V9IGZvcgogICAgICAqICAgIHJlY29yZGluZyBzb3VyY2UgZGVmaW5pdGlvbnMuCiAgICAgICogQHBhcmFtIHNhbXBsZVJhdGVJbkh6IHRoZSBzYW1wbGUgcmF0ZSBleHByZXNzZWQgaW4gSGVydHouIDQ0MTAwSHogaXMgY3VycmVudGx5IHRoZSBvbmx5CkBAIC0yMjEsNyArMjI0LDcgQEAKIAogICAgICAgICAvLyBuYXRpdmUgaW5pdGlhbGl6YXRpb24KICAgICAgICAgaW50W10gc2Vzc2lvbiA9IG5ldyBpbnRbMV07Ci0gICAgICAgIHNlc3Npb25bMF0gPSAwOworICAgICAgICBzZXNzaW9uWzBdID0gQXVkaW9TeXN0ZW0uQVVESU9fU0VTU0lPTl9BTExPQ0FURTsKICAgICAgICAgLy9UT0RPOiB1cGRhdGUgbmF0aXZlIGluaXRpYWxpemF0aW9uIHdoZW4gaW5mb3JtYXRpb24gYWJvdXQgaGFyZHdhcmUgaW5pdCBmYWlsdXJlCiAgICAgICAgIC8vICAgICAgZHVlIHRvIGNhcHR1cmUgZGV2aWNlIGFscmVhZHkgb3BlbiBpcyBhdmFpbGFibGUuCiAgICAgICAgIGludCBpbml0UmVzdWx0ID0gbmF0aXZlX3NldHVwKCBuZXcgV2Vha1JlZmVyZW5jZTxBdWRpb1JlY29yZD4odGhpcyksCkBAIC0yMzksNyArMjQyLDcgQEAKIAogCiAgICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kIGZvciB0aGUgY29uc3RydWN0b3IncyBwYXJhbWV0ZXIgY2hlY2tzLgotICAgIC8vIFRoaXMgaXMgd2hlcmUgY29uc3RydWN0b3IgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLXMgYXJlIHRocm93bgorICAgIC8vIFRoaXMgYW5kIGF1ZGlvQnVmZlNpemVDaGVjayBhcmUgd2hlcmUgY29uc3RydWN0b3IgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLXMgYXJlIHRocm93bgogICAgIC8vIHBvc3Rjb25kaXRpb25zOgogICAgIC8vICAgIG1SZWNvcmRTb3VyY2UgaXMgdmFsaWQKICAgICAvLyAgICBtQ2hhbm5lbENvdW50IGlzIHZhbGlkCkBAIC0yNDcsNyArMjUwLDggQEAKICAgICAvLyAgICBtQXVkaW9Gb3JtYXQgaXMgdmFsaWQKICAgICAvLyAgICBtU2FtcGxlUmF0ZSBpcyB2YWxpZAogICAgIHByaXZhdGUgdm9pZCBhdWRpb1BhcmFtQ2hlY2soaW50IGF1ZGlvU291cmNlLCBpbnQgc2FtcGxlUmF0ZUluSHosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhbm5lbENvbmZpZywgaW50IGF1ZGlvRm9ybWF0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhbm5lbENvbmZpZywgaW50IGF1ZGlvRm9ybWF0KQorICAgICAgICAgICAgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLQogICAgICAgICAvLyBhdWRpbyBzb3VyY2UKQEAgLTMxMSw3ICszMTUsNyBAQAogICAgIC8vICAgIG1BdWRpb0Zvcm1hdCBpcyBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fOEJJVCBPUiBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQKICAgICAvLyBwb3N0Y29uZGl0aW9uOgogICAgIC8vICAgIG1OYXRpdmVCdWZmZXJTaXplSW5CeXRlcyBpcyB2YWxpZCAobXVsdGlwbGUgb2YgZnJhbWUgc2l6ZSwgcG9zaXRpdmUpCi0gICAgcHJpdmF0ZSB2b2lkIGF1ZGlvQnVmZlNpemVDaGVjayhpbnQgYXVkaW9CdWZmZXJTaXplKSB7CisgICAgcHJpdmF0ZSB2b2lkIGF1ZGlvQnVmZlNpemVDaGVjayhpbnQgYXVkaW9CdWZmZXJTaXplKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKICAgICAgICAgLy8gTkI6IHRoaXMgc2VjdGlvbiBpcyBvbmx5IHZhbGlkIHdpdGggUENNIGRhdGEuCiAgICAgICAgIC8vIFRvIHVwZGF0ZSB3aGVuIHN1cHBvcnRpbmcgY29tcHJlc3NlZCBmb3JtYXRzCiAgICAgICAgIGludCBmcmFtZVNpemVJbkJ5dGVzID0gbUNoYW5uZWxDb3VudApAQCAtODAwLDcgKzgwNCw3IEBACiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgcHJpdmF0ZSBuYXRpdmUgZmluYWwgaW50IG5hdGl2ZV9zZXR1cChPYmplY3QgYXVkaW9yZWNvcmRfdGhpcywKLSAgICAgICAgICAgIGludCByZWNvcmRTb3VyY2UsIGludCBzYW1wbGVSYXRlLCBpbnQgbmJDaGFubmVscywgaW50IGF1ZGlvRm9ybWF0LAorICAgICAgICAgICAgaW50IHJlY29yZFNvdXJjZSwgaW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVsTWFzaywgaW50IGF1ZGlvRm9ybWF0LAogICAgICAgICAgICAgaW50IGJ1ZmZTaXplSW5CeXRlcywgaW50W10gc2Vzc2lvbklkKTsKIAogICAgIHByaXZhdGUgbmF0aXZlIGZpbmFsIHZvaWQgbmF0aXZlX2ZpbmFsaXplKCk7CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9TZXJ2aWNlLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9TZXJ2aWNlLmphdmEKaW5kZXggYjgzNmY1MC4uNDZiNzRkYSAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvU2VydmljZS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1NlcnZpY2UuamF2YQpAQCAtMjEsMjAgKzIxLDE3IEBACiBpbXBvcnQgc3RhdGljIGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyLlJJTkdFUl9NT0RFX1NJTEVOVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXIuUklOR0VSX01PREVfVklCUkFURTsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXJOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQXBwT3BzTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5LZXlndWFyZE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKLWltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50LkNhbmNlbGVkRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLkJsdWV0b290aEEyZHA7CiBpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoQWRhcHRlcjsKIGltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhDbGFzczsKIGltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhEZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoSGVhZHNldDsKIGltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhQcm9maWxlOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5BY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwpAQCAtNDgsMTAgKzQ1LDggQEAKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhUGxheWVyLk9uQ29tcGxldGlvbkxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXIuT25FcnJvckxpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKQEAgLTY2LDkgKzYxLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlZpYnJhdG9yOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5TeXN0ZW07Ci1pbXBvcnQgYW5kcm9pZC5zcGVlY2guUmVjb2duaXplckludGVudDsKLWltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5QaG9uZVN0YXRlTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuVGVsZXBob255TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwpAQCAtODgsMTMgKzgwLDExIEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50SGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKIAogLyoqCiAgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHZvbHVtZSBtYW5hZ2VyIHNlcnZpY2UuCkBAIC0xMDE5LDcgKzEwMDksNyBAQAogICAgICAgICAgICAgICAgIChmbGFncyAmIEF1ZGlvTWFuYWdlci5GTEFHX0JMVUVUT09USF9BQlNfVk9MVU1FKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtQTJkcEF2cmNwTG9jaykgewogICAgICAgICAgICAgICAgICAgICBpZiAobUEyZHAgIT0gbnVsbCAmJiBtQXZyY3BBYnNWb2xTdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1BMmRwLnNldEF2cmNwQWJzb2x1dGVWb2x1bWUoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgbUEyZHAuc2V0QXZyY3BBYnNvbHV0ZVZvbHVtZShpbmRleCAvIDEwKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1N5c3RlbS5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvU3lzdGVtLmphdmEKaW5kZXggNjYxYjBmZC4uOWM2N2JhZSAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvU3lzdGVtLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvU3lzdGVtLmphdmEKQEAgLTEwMyw2ICsxMDMsOSBAQAogICAgIC8qKiBAZGVwcmVjYXRlZCAqLwogICAgIEBEZXByZWNhdGVkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPVVRFX0FMTCAgICAgICAgICAgICAgID0gMHhGRkZGRkZGRjsKIAorICAgIC8vIEtlZXAgaW4gc3luYyB3aXRoIHN5c3RlbS9jb3JlL2luY2x1ZGUvc3lzdGVtL2F1ZGlvLmgKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBVURJT19TRVNTSU9OX0FMTE9DQVRFID0gMDsKKwogICAgIC8qCiAgICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBzdHJlYW0gdHlwZSBpcyBhY3RpdmUuCiAgICAgICoKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9UcmFjay5qYXZhCmluZGV4IDAxYTZmYzIuLjM3NTkxMDggMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvVHJhY2suamF2YQpAQCAtMjExLDcgKzIxMSw3IEBACiAgICAgLyoqCiAgICAgICogQXVkaW8gc2Vzc2lvbiBJRAogICAgICAqLwotICAgIHByaXZhdGUgaW50IG1TZXNzaW9uSWQgPSAwOworICAgIHByaXZhdGUgaW50IG1TZXNzaW9uSWQgPSBBdWRpb1N5c3RlbS5BVURJT19TRVNTSU9OX0FMTE9DQVRFOwogCiAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNjMsNyArMjYzLDcgQEAKICAgICAgICAgICAgIGludCBidWZmZXJTaXplSW5CeXRlcywgaW50IG1vZGUpCiAgICAgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7CiAgICAgICAgIHRoaXMoc3RyZWFtVHlwZSwgc2FtcGxlUmF0ZUluSHosIGNoYW5uZWxDb25maWcsIGF1ZGlvRm9ybWF0LAotICAgICAgICAgICAgICAgIGJ1ZmZlclNpemVJbkJ5dGVzLCBtb2RlLCAwIC8qc2Vzc2lvbiovKTsKKyAgICAgICAgICAgICAgICBidWZmZXJTaXplSW5CeXRlcywgbW9kZSwgQXVkaW9TeXN0ZW0uQVVESU9fU0VTU0lPTl9BTExPQ0FURSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC04MzksOCArODM5LDEyIEBACiAKIAogICAgIC8qKgotICAgICAqIFNpbWlsYXIsIGV4Y2VwdCBzZXQgdm9sdW1lIG9mIGFsbCBjaGFubmVscyB0byBzYW1lIHZhbHVlLgotICAgICAqIEBoaWRlCisgICAgICogU2V0cyB0aGUgc3BlY2lmaWVkIG91dHB1dCB2b2x1bWUgdmFsdWVzIG9uIGFsbCBjaGFubmVscyBvZiB0aGlzIHRyYWNrLiAgVGhlIHZhbHVlIGlzIGNsYW1wZWQKKyAgICAgKiB0byB0aGUgKHtAbGluayAjZ2V0TWluVm9sdW1lKCl9LCB7QGxpbmsgI2dldE1heFZvbHVtZSgpfSkgaW50ZXJ2YWwgaWYgb3V0c2lkZSB0aGlzIHJhbmdlLgorICAgICAqIEBwYXJhbSB2b2x1bWUgb3V0cHV0IGF0dGVudWF0aW9uIGZvciBhbGwgY2hhbm5lbHMuIEEgdmFsdWUgb2YgMC4wZiBpcyBzaWxlbmNlLAorICAgICAqICAgICAgYSB2YWx1ZSBvZiAxLjBmIGlzIG5vIGF0dGVudWF0aW9uLgorICAgICAqIEByZXR1cm4gZXJyb3IgY29kZSBvciBzdWNjZXNzLCBzZWUge0BsaW5rICNTVUNDRVNTfSwKKyAgICAgKiAgICB7QGxpbmsgI0VSUk9SX0lOVkFMSURfT1BFUkFUSU9OfQogICAgICAqLwogICAgIHB1YmxpYyBpbnQgc2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkgewogICAgICAgICByZXR1cm4gc2V0U3RlcmVvVm9sdW1lKHZvbHVtZSwgdm9sdW1lKTsKQEAgLTEzMTksNyArMTMyMyw3IEBACiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgcHJpdmF0ZSBuYXRpdmUgZmluYWwgaW50IG5hdGl2ZV9zZXR1cChPYmplY3QgYXVkaW90cmFja190aGlzLAotICAgICAgICAgICAgaW50IHN0cmVhbVR5cGUsIGludCBzYW1wbGVSYXRlLCBpbnQgbmJDaGFubmVscywgaW50IGF1ZGlvRm9ybWF0LAorICAgICAgICAgICAgaW50IHN0cmVhbVR5cGUsIGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbE1hc2ssIGludCBhdWRpb0Zvcm1hdCwKICAgICAgICAgICAgIGludCBidWZmU2l6ZUluQnl0ZXMsIGludCBtb2RlLCBpbnRbXSBzZXNzaW9uSWQpOwogCiAgICAgcHJpdmF0ZSBuYXRpdmUgZmluYWwgdm9pZCBuYXRpdmVfZmluYWxpemUoKTsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9FbmNvZGVyQ2FwYWJpbGl0aWVzLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvRW5jb2RlckNhcGFiaWxpdGllcy5qYXZhCmluZGV4IDcxY2IxYjMuLjMzMmUzNjAgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9FbmNvZGVyQ2FwYWJpbGl0aWVzLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0VuY29kZXJDYXBhYmlsaXRpZXMuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiAvKioKICAqIFRoZSBFbmNvZGVyQ2FwYWJpbGl0aWVzIGNsYXNzIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvRXhpZkludGVyZmFjZS5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0V4aWZJbnRlcmZhY2UuamF2YQppbmRleCAyMGViMzU2Li45ZGIzNWZjIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvRXhpZkludGVyZmFjZS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9FeGlmSW50ZXJmYWNlLmphdmEKQEAgLTk4LDcgKzk4LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVEYXRlRm9ybWF0IHNGb3JtYXR0ZXI7CiAKICAgICBzdGF0aWMgewotICAgICAgICBTeXN0ZW0ubG9hZExpYnJhcnkoImV4aWZfam5pIik7CisgICAgICAgIFN5c3RlbS5sb2FkTGlicmFyeSgiamhlYWRfam5pIik7CiAgICAgICAgIHNGb3JtYXR0ZXIgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eTpNTTpkZCBISDptbTpzcyIpOwogICAgICAgICBzRm9ybWF0dGVyLnNldFRpbWVab25lKFRpbWVab25lLmdldFRpbWVab25lKCJVVEMiKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0ltYWdlLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSW1hZ2UuamF2YQppbmRleCAyM2FiY2U3Li5hMzQ2ZTE3IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSW1hZ2UuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSW1hZ2UuamF2YQpAQCAtMjEsNyArMjEsOCBAQAogCiAvKioKICAqIDxwPkEgc2luZ2xlIGNvbXBsZXRlIGltYWdlIGJ1ZmZlciB0byB1c2Ugd2l0aCBhIG1lZGlhIHNvdXJjZSBzdWNoIGFzIGEKLSAqIHtAbGluayBNZWRpYUNvZGVjfS48L3A+CisgKiB7QGxpbmsgTWVkaWFDb2RlY30gb3IgYQorICoge0BsaW5rIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UgQ2FtZXJhRGV2aWNlfS48L3A+CiAgKgogICogPHA+VGhpcyBjbGFzcyBhbGxvd3MgZm9yIGVmZmljaWVudCBkaXJlY3QgYXBwbGljYXRpb24gYWNjZXNzIHRvIHRoZSBwaXhlbAogICogZGF0YSBvZiB0aGUgSW1hZ2UgdGhyb3VnaCBvbmUgb3IgbW9yZQpAQCAtODIsNiArODMsMTUgQEAKICAgICAgKiAgICAgcGxhbmUgKDQ6MjowIHN1YnNhbXBsaW5nKS4gRWFjaCBwaXhlbCBzYW1wbGUgaW4gZWFjaCBwbGFuZSBoYXMgOCBiaXRzLgogICAgICAqICAgICBFYWNoIHBsYW5lIGhhcyBpdHMgb3duIHJvdyBzdHJpZGUgYW5kIHBpeGVsIHN0cmlkZS48L3RkPgogICAgICAqIDwvdHI+CisgICAgICogPHRyPgorICAgICAqICAgPHRkPntAbGluayBhbmRyb2lkLmdyYXBoaWNzLkltYWdlRm9ybWF0I1JBV19TRU5TT1IgUkFXX1NFTlNPUn08L3RkPgorICAgICAqICAgPHRkPjE8L3RkPgorICAgICAqICAgPHRkPkEgc2luZ2xlIHBsYW5lIG9mIHJhdyBzZW5zb3IgaW1hZ2UgZGF0YSwgd2l0aCAxNiBiaXRzIHBlciBjb2xvcgorICAgICAqICAgICBzYW1wbGUuIFRoZSBkZXRhaWxzIG9mIHRoZSBsYXlvdXQgbmVlZCB0byBiZSBxdWVyaWVkIGZyb20gdGhlIHNvdXJjZSBvZgorICAgICAqICAgICB0aGUgcmF3IHNlbnNvciBkYXRhLCBzdWNoIGFzCisgICAgICogICAgIHtAbGluayBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlIENhbWVyYURldmljZX0uCisgICAgICogICA8L3RkPgorICAgICAqIDwvdHI+CiAgICAgICogPC90YWJsZT4KICAgICAgKgogICAgICAqIEBzZWUgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdApkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0ltYWdlUmVhZGVyLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSW1hZ2VSZWFkZXIuamF2YQppbmRleCBkNDU0YzQyLi4xYmQzMmM0IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSW1hZ2VSZWFkZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSW1hZ2VSZWFkZXIuamF2YQpAQCAtMzIsNyArMzIsOCBAQAogICogcmVuZGVyZWQgaW50byBhIHtAbGluayBhbmRyb2lkLnZpZXcuU3VyZmFjZX08L3A+CiAgKgogICogPHA+U2V2ZXJhbCBBbmRyb2lkIG1lZGlhIEFQSSBjbGFzc2VzIGFjY2VwdCBTdXJmYWNlIG9iamVjdHMgYXMgdGFyZ2V0cyB0bwotICogcmVuZGVyIHRvLCBpbmNsdWRpbmcge0BsaW5rIE1lZGlhUGxheWVyfSwge0BsaW5rIE1lZGlhQ29kZWN9LCBhbmQKKyAqIHJlbmRlciB0bywgaW5jbHVkaW5nIHtAbGluayBNZWRpYVBsYXllcn0sIHtAbGluayBNZWRpYUNvZGVjfSwKKyAqIHtAbGluayBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlfSwgYW5kCiAgKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiBSZW5kZXJTY3JpcHQgQWxsb2NhdGlvbnN9LiBUaGUgaW1hZ2UKICAqIHNpemVzIGFuZCBmb3JtYXRzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBlYWNoIHNvdXJjZSB2YXJ5LCBhbmQgc2hvdWxkIGJlCiAgKiBjaGVja2VkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgc3BlY2lmaWMgQVBJLjwvcD4KZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYURybS5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhRHJtLmphdmEKaW5kZXggZjVhNzAzYi4uNzE3MGZmYiAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhRHJtLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhRHJtLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCi1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYURybUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7CiBpbXBvcnQgamF2YS51dGlsLlVVSUQ7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CkBAIC0yNCw3ICsyMyw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFGaWxlLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFGaWxlLmphdmEKaW5kZXggNzYxZWNjYS4uNTI2NjU2YSAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhRmlsZS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYUZpbGUuamF2YQpAQCAtMTYsMTcgKzE2LDEyIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYTsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZS5BdWRpbzsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLk1lZGlhU3RvcmUuSW1hZ2VzOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZS5WaWRlbzsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLkRlY29kZXJDYXBhYmlsaXRpZXM7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5EZWNvZGVyQ2FwYWJpbGl0aWVzLlZpZGVvRGVjb2RlcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLkRlY29kZXJDYXBhYmlsaXRpZXMuQXVkaW9EZWNvZGVyOwogaW1wb3J0IGFuZHJvaWQubXRwLk10cENvbnN0YW50czsKIAogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwogCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFGb2N1c0NvbnRyb2wuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYUZvY3VzQ29udHJvbC5qYXZhCmluZGV4IDM0MDA4YmIuLjI1YWI5OWQgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYUZvY3VzQ29udHJvbC5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYUZvY3VzQ29udHJvbC5qYXZhCkBAIC01MSw3ICs1MSw2IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwogCi1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGFFZGl0b3IuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhRWRpdG9yLmphdmEKaW5kZXggMzczYmExMS4uM2JmZGI1YSAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGFFZGl0b3IuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YUVkaXRvci5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlSW50QXJyYXk7CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllci5qYXZhCmluZGV4IGIzNGNlYThmLi4zY2NlYjAzIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIuamF2YQpAQCAtMzEsMTggKzMxLDE1IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhVGltZVByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFUaW1lUHJvdmlkZXIuT25NZWRpYVRpbWVMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLlN1YnRpdGxlQ29udHJvbGxlcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLlN1YnRpdGxlRGF0YTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhUmVjb3JkZXIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYVJlY29yZGVyLmphdmEKaW5kZXggNWE5ZDU3Ny4uZjhhN2JiNiAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhUmVjb3JkZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFSZWNvcmRlci5qYXZhCkBAIC0xMjQsNiArMTI0LDE4IEBACiAgICAgcHVibGljIG5hdGl2ZSB2b2lkIHNldENhbWVyYShDYW1lcmEgYyk7CiAKICAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzdXJmYWNlIHRvIHJlY29yZCBmcm9tIHdoZW4gdXNpbmcgU1VSRkFDRSB2aWRlbyBzb3VyY2UuCisgICAgICogPHA+CisgICAgICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIHByZXBhcmUoKS4gRnJhbWVzIHJlbmRlcmVkIGJlZm9yZSBzdGFydCgpCisgICAgICogd2lsbCBiZSBkaXNjYXJkZWQuCisgICAgICogPC9wPgorICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIGl0IGlzIGNhbGxlZCBiZWZvcmUgcHJlcGFyZSgpLCBhZnRlcgorICAgICAqIHN0b3AoKSBvciBpcyBjYWxsZWQgd2hlbiBWaWRlb1NvdXJjZSBpcyBub3Qgc2V0IHRvIFNVUkZBQ0UuCisgICAgICogQHNlZSBhbmRyb2lkLm1lZGlhLk1lZGlhUmVjb3JkZXIuVmlkZW9Tb3VyY2UKKyAgICAgKi8KKyAgICBwdWJsaWMgbmF0aXZlIFN1cmZhY2UgZ2V0U3VyZmFjZSgpOworCisgICAgLyoqCiAgICAgICogU2V0cyBhIFN1cmZhY2UgdG8gc2hvdyBhIHByZXZpZXcgb2YgcmVjb3JkZWQgbWVkaWEgKHZpZGVvKS4gQ2FsbHMgdGhpcwogICAgICAqIGJlZm9yZSBwcmVwYXJlKCkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRlc2lyYWJsZSBwcmV2aWV3IGRpc3BsYXkgaXMKICAgICAgKiBzZXQuIElmIHtAbGluayAjc2V0Q2FtZXJhKENhbWVyYSl9IGlzIHVzZWQgYW5kIHRoZSBzdXJmYWNlIGhhcyBiZWVuCkBAIC0yMjUsMTAgKzIzNywyMyBAQAogICAgICAgICovCiAgICAgICAgIHByaXZhdGUgVmlkZW9Tb3VyY2UoKSB7fQogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZBVUxUID0gMDsKLSAgICAgICAgLyoqIENhbWVyYSB2aWRlbyBzb3VyY2UgKi8KKyAgICAgICAgLyoqIENhbWVyYSB2aWRlbyBzb3VyY2UKKyAgICAgICAgICogPHA+CisgICAgICAgICAqIFVzaW5nIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGFzIHZpZGVvIHNvdXJjZS4KKyAgICAgICAgICogPC9wPgorICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FNRVJBID0gMTsKLSAgICAgICAgLyoqIEBoaWRlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdSQUxMT0NfQlVGRkVSID0gMjsKKyAgICAgICAgLyoqIFN1cmZhY2UgdmlkZW8gc291cmNlCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBVc2luZyBhIFN1cmZhY2UgYXMgdmlkZW8gc291cmNlLgorICAgICAgICAgKiA8L3A+PHA+CisgICAgICAgICAqIFRoaXMgZmxhZyBtdXN0IGJlIHVzZWQgd2hlbiByZWNvcmRpbmcgZnJvbSBhbgorICAgICAgICAgKiBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlIHNvdXJjZS4KKyAgICAgICAgICogPC9wPjxwPgorICAgICAgICAgKiBXaGVuIHVzaW5nIHRoaXMgdmlkZW8gc291cmNlIHR5cGUsIHVzZSB7QGxpbmsgTWVkaWFSZWNvcmRlciNnZXRTdXJmYWNlKCl9CisgICAgICAgICAqIHRvIHJldHJpZXZlIHRoZSBzdXJmYWNlIGNyZWF0ZWQgYnkgTWVkaWFSZWNvcmRlci4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUkZBQ0UgPSAyOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01ldGFkYXRhLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWV0YWRhdGEuamF2YQppbmRleCBiNTY2NjUzLi5lYjU0M2I0IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWV0YWRhdGEuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWV0YWRhdGEuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQubWVkaWE7CiAKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWluaVRodW1iRmlsZS5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01pbmlUaHVtYkZpbGUuamF2YQppbmRleCA2M2IxNDljLi4yM2MzNjUyIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWluaVRodW1iRmlsZS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NaW5pVGh1bWJGaWxlLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SYXRpbmcuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SYXRpbmcuamF2YQppbmRleCA4MmMwMzkyLi5iOTRkYjE4IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmF0aW5nLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1JhdGluZy5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYTsKIAotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnQuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sQ2xpZW50LmphdmEKaW5kZXggMGMwMGFiYS4uYzJjNjFkMyAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnQuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbENsaWVudC5qYXZhCkBAIC0yNCwxMyArMjQsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYU1ldGFkYXRhUmV0cmlldmVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbGxlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xsZXIuamF2YQppbmRleCA2ZGJiM2NkLi5jZDNjZTFmIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbGxlci5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sbGVyLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCi1pbXBvcnQgYW5kcm9pZC5NYW5pZmVzdDsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKIGltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50LkNhbmNlbGVkRXhjZXB0aW9uOwpAQCAtMjksOCArMjgsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwpAQCAtNDA0LDcgKzQwMSw3IEBACiAgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBzZXRTeW5jaHJvbml6YXRpb25Nb2RlKGludCBzeW5jKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKChzeW5jICE9IFBPU0lUSU9OX1NZTkNIUk9OSVpBVElPTl9OT05FKSB8fCAoc3luYyAhPSBQT1NJVElPTl9TWU5DSFJPTklaQVRJT05fQ0hFQ0spKSB7CisgICAgICAgIGlmICgoc3luYyAhPSBQT1NJVElPTl9TWU5DSFJPTklaQVRJT05fTk9ORSkgJiYgKHN5bmMgIT0gUE9TSVRJT05fU1lOQ0hST05JWkFUSU9OX0NIRUNLKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5rbm93biBzeW5jaHJvbml6YXRpb24gbW9kZSAiICsgc3luYyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtSXNSZWdpc3RlcmVkKSB7CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmVzYW1wbGVJbnB1dFN0cmVhbS5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1Jlc2FtcGxlSW5wdXRTdHJlYW0uamF2YQppbmRleCBiMDI1ZTI1Li44MDkxOWY3IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmVzYW1wbGVJbnB1dFN0cmVhbS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SZXNhbXBsZUlucHV0U3RyZWFtLmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1Jpbmd0b25lTWFuYWdlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1Jpbmd0b25lTWFuYWdlci5qYXZhCmluZGV4IDhlNDAwNGIuLmUyMTFiOTkgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SaW5ndG9uZU1hbmFnZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmluZ3RvbmVNYW5hZ2VyLmphdmEKQEAgLTIzLDcgKzIzLDYgQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFVyaXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1NvdW5kUG9vbC5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1NvdW5kUG9vbC5qYXZhCmluZGV4IGZiZmM1NzQuLmYxYjI1NmUgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9Tb3VuZFBvb2wuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvU291bmRQb29sLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvU3VidGl0bGVEYXRhLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvU3VidGl0bGVEYXRhLmphdmEKaW5kZXggZjU1MmU4Mi4uM2U2ZjZmOSAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1N1YnRpdGxlRGF0YS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9TdWJ0aXRsZURhdGEuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1RodW1ibmFpbFV0aWxzLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvVGh1bWJuYWlsVXRpbHMuamF2YQppbmRleCA3NTY2MzhjLi5kYWE1ZmE1IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvVGh1bWJuYWlsVXRpbHMuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvVGh1bWJuYWlsVXRpbHMuamF2YQpAQCAtMTcsOSArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFVyaXM7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwpAQCAtMjksMTUgKzI2LDEyIEBACiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUZpbGUuTWVkaWFGaWxlVHlwZTsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkJhc2VDb2x1bW5zOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZS5JbWFnZXM7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5NZWRpYVN0b3JlLkltYWdlcy5UaHVtYm5haWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CiAKIC8qKgogICogVGh1bWJuYWlsIGdlbmVyYXRpb24gcm91dGluZXMgZm9yIG1lZGlhIHByb3ZpZGVyLgpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1dlYlZ0dFJlbmRlcmVyLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvV2ViVnR0UmVuZGVyZXIuamF2YQppbmRleCA0ZGVjMDgxLi41OGQzNTIwIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvV2ViVnR0UmVuZGVyZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvV2ViVnR0UmVuZGVyZXIuamF2YQpAQCAtMTEzNiwxMSArMTEzNiwxNSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBXZWJWdHRSZW5kZXJpbmdXaWRnZXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsLCAwKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogCi0gICAgcHVibGljIFdlYlZ0dFJlbmRlcmluZ1dpZGdldChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFdlYlZ0dFJlbmRlcmluZ1dpZGdldChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBXZWJWdHRSZW5kZXJpbmdXaWRnZXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgLy8gQ2Fubm90IHJlbmRlciB0ZXh0IG92ZXIgdmlkZW8gd2hlbiBsYXllciB0eXBlIGlzIGhhcmR3YXJlLgogICAgICAgICBzZXRMYXllclR5cGUoVmlldy5MQVlFUl9UWVBFX1NPRlRXQVJFLCBudWxsKTsKQEAgLTE1MjEsNiArMTUyNSw4IEBACiAKICAgICAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgICAgIHNldEJhY2tncm91bmRDb2xvcihERUJVR19SRUdJT05fQkFDS0dST1VORCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNldEJhY2tncm91bmRDb2xvcihjYXB0aW9uU3R5bGUud2luZG93Q29sb3IpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTE1MzMsNiArMTUzOSw4IEBACiAgICAgICAgICAgICAgICAgZmluYWwgQ3VlTGF5b3V0IGN1ZUJveCA9IG1SZWdpb25DdWVCb3hlcy5nZXQoaSk7CiAgICAgICAgICAgICAgICAgY3VlQm94LnNldENhcHRpb25TdHlsZShjYXB0aW9uU3R5bGUsIGZvbnRTaXplKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0QmFja2dyb3VuZENvbG9yKGNhcHRpb25TdHlsZS53aW5kb3dDb2xvcik7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0F1ZGlvRWZmZWN0LmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9BdWRpb0VmZmVjdC5qYXZhCmluZGV4IGNjMTIxYTMuLjliMzgxY2MgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0F1ZGlvRWZmZWN0LmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvQXVkaW9FZmZlY3QuamF2YQpAQCAtMjIsNyArMjIsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwogaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvQmFzc0Jvb3N0LmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9CYXNzQm9vc3QuamF2YQppbmRleCA5MTQ1OWVkLi5hNDZjYzIyIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9CYXNzQm9vc3QuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9CYXNzQm9vc3QuamF2YQpAQCAtMTYsMTYgKzE2LDkgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhLmF1ZGlvZng7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9meC5BdWRpb0VmZmVjdDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1pbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uQ2hhckJ1ZmZlcjsKIGltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwogCiAKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0Vudmlyb25tZW50YWxSZXZlcmIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0Vudmlyb25tZW50YWxSZXZlcmIuamF2YQppbmRleCBmMWY1ODJlLi5lZjFjNGMzIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9FbnZpcm9ubWVudGFsUmV2ZXJiLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvRW52aXJvbm1lbnRhbFJldmVyYi5qYXZhCkBAIC0xNiwxNSArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQubWVkaWEuYXVkaW9meDsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4LkF1ZGlvRWZmZWN0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlT3JkZXI7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKIGltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0VxdWFsaXplci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvRXF1YWxpemVyLmphdmEKaW5kZXggN2YzODk1NS4uN2FiYWRhMCAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvRXF1YWxpemVyLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvRXF1YWxpemVyLmphdmEKQEAgLTE2LDE2ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4OwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguQXVkaW9FZmZlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAotaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLkNoYXJCdWZmZXI7CiBpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKIAogCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9QcmVzZXRSZXZlcmIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1ByZXNldFJldmVyYi5qYXZhCmluZGV4IDdhODlhZTcuLmVmOTE2NjcgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1ByZXNldFJldmVyYi5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1ByZXNldFJldmVyYi5qYXZhCkBAIC0xNiwxNSArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQubWVkaWEuYXVkaW9meDsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4LkF1ZGlvRWZmZWN0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlT3JkZXI7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKIGltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwogCiAKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1ZpcnR1YWxpemVyLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXJ0dWFsaXplci5qYXZhCmluZGV4IDY4YTdiODguLjZiMjAwMDYgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1ZpcnR1YWxpemVyLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvVmlydHVhbGl6ZXIuamF2YQpAQCAtMTYsMTYgKzE2LDkgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhLmF1ZGlvZng7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9meC5BdWRpb0VmZmVjdDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1pbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uQ2hhckJ1ZmZlcjsKIGltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwogCiAKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1Zpc3VhbGl6ZXIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1Zpc3VhbGl6ZXIuamF2YQppbmRleCBmZjA0MjAxLi4yNGM3NGFjIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXN1YWxpemVyLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvVmlzdWFsaXplci5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvdmlkZW9lZGl0b3IvTWVkaWFBcnRpc3ROYXRpdmVIZWxwZXIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS92aWRlb2VkaXRvci9NZWRpYUFydGlzdE5hdGl2ZUhlbHBlci5qYXZhCmluZGV4IDJiMGIzZTIuLjJkM2RlODUgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS92aWRlb2VkaXRvci9NZWRpYUFydGlzdE5hdGl2ZUhlbHBlci5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS92aWRlb2VkaXRvci9NZWRpYUFydGlzdE5hdGl2ZUhlbHBlci5qYXZhCkBAIC0yOCw3ICsyOCw2IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4OwogaW1wb3J0IGFuZHJvaWQubWVkaWEudmlkZW9lZGl0b3IuVmlkZW9FZGl0b3IuRXhwb3J0UHJvZ3Jlc3NMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLnZpZGVvZWRpdG9yLlZpZGVvRWRpdG9yLlByZXZpZXdQcm9ncmVzc0xpc3RlbmVyOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZS5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZS5qYXZhCmluZGV4IDljZWVmYzMuLmNjNDY0ZGIgMTAwNzU1Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRGF0YWJhc2UuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cERhdGFiYXNlLmphdmEKQEAgLTI1LDEyICsyNSwxMCBAQAogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZURhdGFiYXNlOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFTY2FubmVyOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZTsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLk1lZGlhU3RvcmUuQXVkaW87CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5NZWRpYVN0b3JlLkZpbGVzOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZS5JbWFnZXM7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5NZWRpYVN0b3JlLk1lZGlhQ29sdW1uczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEZXZpY2UuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRGV2aWNlLmphdmEKaW5kZXggODMxMDU3OS4uNzJkY2FhOCAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEZXZpY2UuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cERldmljZS5qYXZhCkBAIC0xOCw4ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLnVzYi5Vc2JEZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS51c2IuVXNiRGV2aWNlQ29ubmVjdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgogICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIE1UUCBvciBQVFAgZGV2aWNlIGNvbm5lY3RlZCBvbiB0aGUgVVNCIGhvc3QgYnVzLiBBbiBhcHBsaWNhdGlvbiBjYW4KZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwUHJvcGVydHlHcm91cC5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBQcm9wZXJ0eUdyb3VwLmphdmEKaW5kZXggNDhkYTQwZi4uNzgxOTg4ZCAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBQcm9wZXJ0eUdyb3VwLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBQcm9wZXJ0eUdyb3VwLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5NZWRpYVN0b3JlOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZS5BdWRpbzsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLk1lZGlhU3RvcmUuRmlsZXM7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5NZWRpYVN0b3JlLkltYWdlczsKZGlmZiAtLWdpdCBhL21lZGlhL2puaS9BbmRyb2lkLm1rIGIvbWVkaWEvam5pL0FuZHJvaWQubWsKaW5kZXggNjNhNjFlMi4uZGVhOTcxZSAxMDA2NDQKLS0tIGEvbWVkaWEvam5pL0FuZHJvaWQubWsKKysrIGIvbWVkaWEvam5pL0FuZHJvaWQubWsKQEAgLTQxLDEzICs0MSwxMyBAQAogICAgIGxpYnN0YWdlZnJpZ2h0X2Ftcm5iX2NvbW1vbiBcCiAKIExPQ0FMX1JFUVVJUkVEX01PRFVMRVMgOj0gXAotICAgIGxpYmV4aWZfam5pCisgICAgbGliamhlYWRfam5pCiAKIExPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gXAogICAgIGxpYnN0YWdlZnJpZ2h0X2Ftcm5iZW5jCiAKIExPQ0FMX0NfSU5DTFVERVMgKz0gXAotICAgIGV4dGVybmFsL2poZWFkIFwKKyAgICBleHRlcm5hbC9saWJleGlmLyBcCiAgICAgZXh0ZXJuYWwvdHJlbW9yL1RyZW1vciBcCiAgICAgZnJhbWV3b3Jrcy9iYXNlL2NvcmUvam5pIFwKICAgICBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYm1lZGlhIFwKZGlmZiAtLWdpdCBhL21lZGlhL2puaS9hbmRyb2lkX21lZGlhX01lZGlhUmVjb3JkZXIuY3BwIGIvbWVkaWEvam5pL2FuZHJvaWRfbWVkaWFfTWVkaWFSZWNvcmRlci5jcHAKaW5kZXggMGNmZDJmZi4uZmQ2OWNhZCAxMDA2NDQKLS0tIGEvbWVkaWEvam5pL2FuZHJvaWRfbWVkaWFfTWVkaWFSZWNvcmRlci5jcHAKKysrIGIvbWVkaWEvam5pL2FuZHJvaWRfbWVkaWFfTWVkaWFSZWNvcmRlci5jcHAKQEAgLTM0NCw2ICszNDQsMjYgQEAKICAgICByZXR1cm4gKGppbnQpIHJlc3VsdDsKIH0KIAorc3RhdGljIGpvYmplY3QKK2FuZHJvaWRfbWVkaWFfTWVkaWFSZWNvcmRlcl9nZXRTdXJmYWNlKEpOSUVudiAqZW52LCBqb2JqZWN0IHRoaXopCit7CisgICAgQUxPR1YoImdldFN1cmZhY2UiKTsKKyAgICBzcDxNZWRpYVJlY29yZGVyPiBtciA9IGdldE1lZGlhUmVjb3JkZXIoZW52LCB0aGl6KTsKKworICAgIHNwPElHcmFwaGljQnVmZmVyUHJvZHVjZXI+IGJ1ZmZlclByb2R1Y2VyID0gbXItPnF1ZXJ5U3VyZmFjZU1lZGlhU291cmNlRnJvbU1lZGlhU2VydmVyKCk7CisgICAgaWYgKGJ1ZmZlclByb2R1Y2VyID09IE5VTEwpIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgZW52LAorICAgICAgICAgICAgICAgICJqYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uIiwKKyAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGdldCBzdXJmYWNlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8vIFdyYXAgdGhlIElHQlAgaW4gYSBKYXZhLWxhbmd1YWdlIFN1cmZhY2UuCisgICAgcmV0dXJuIGFuZHJvaWRfdmlld19TdXJmYWNlX2NyZWF0ZUZyb21JR3JhcGhpY0J1ZmZlclByb2R1Y2VyKGVudiwKKyAgICAgICAgICAgIGJ1ZmZlclByb2R1Y2VyKTsKK30KKwogc3RhdGljIHZvaWQKIGFuZHJvaWRfbWVkaWFfTWVkaWFSZWNvcmRlcl9zdGFydChKTklFbnYgKmVudiwgam9iamVjdCB0aGl6KQogewpAQCAtNDcwLDYgKzQ5MCw3IEBACiAgICAgeyJzZXRNYXhEdXJhdGlvbiIsICAgICAgICIoSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilhbmRyb2lkX21lZGlhX01lZGlhUmVjb3JkZXJfc2V0TWF4RHVyYXRpb259LAogICAgIHsic2V0TWF4RmlsZVNpemUiLCAgICAgICAiKEopViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopYW5kcm9pZF9tZWRpYV9NZWRpYVJlY29yZGVyX3NldE1heEZpbGVTaXplfSwKICAgICB7Il9wcmVwYXJlIiwgICAgICAgICAgICAgIigpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWFuZHJvaWRfbWVkaWFfTWVkaWFSZWNvcmRlcl9wcmVwYXJlfSwKKyAgICB7ImdldFN1cmZhY2UiLCAgICAgICAgICAgIigpTGFuZHJvaWQvdmlldy9TdXJmYWNlOyIsICAgICAgICAodm9pZCAqKWFuZHJvaWRfbWVkaWFfTWVkaWFSZWNvcmRlcl9nZXRTdXJmYWNlfSwKICAgICB7ImdldE1heEFtcGxpdHVkZSIsICAgICAgIigpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWFuZHJvaWRfbWVkaWFfTWVkaWFSZWNvcmRlcl9uYXRpdmVfZ2V0TWF4QW1wbGl0dWRlfSwKICAgICB7InN0YXJ0IiwgICAgICAgICAgICAgICAgIigpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWFuZHJvaWRfbWVkaWFfTWVkaWFSZWNvcmRlcl9zdGFydH0sCiAgICAgeyJzdG9wIiwgICAgICAgICAgICAgICAgICIoKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilhbmRyb2lkX21lZGlhX01lZGlhUmVjb3JkZXJfc3RvcH0sCmRpZmYgLS1naXQgYS9tZWRpYS9qbmkvYW5kcm9pZF9tdHBfTXRwRGF0YWJhc2UuY3BwIGIvbWVkaWEvam5pL2FuZHJvaWRfbXRwX010cERhdGFiYXNlLmNwcAppbmRleCA3MmNlM2NjLi40ZmJjNTVhIDEwMDY0NAotLS0gYS9tZWRpYS9qbmkvYW5kcm9pZF9tdHBfTXRwRGF0YWJhc2UuY3BwCisrKyBiL21lZGlhL2puaS9hbmRyb2lkX210cF9NdHBEYXRhYmFzZS5jcHAKQEAgLTM3LDcgKzM3LDEwIEBACiAjaW5jbHVkZSAibXRwLmgiCiAKIGV4dGVybiAiQyIgewotI2luY2x1ZGUgImpoZWFkLmgiCisjaW5jbHVkZSAibGliZXhpZi9leGlmLWNvbnRlbnQuaCIKKyNpbmNsdWRlICJsaWJleGlmL2V4aWYtZGF0YS5oIgorI2luY2x1ZGUgImxpYmV4aWYvZXhpZi10YWcuaCIKKyNpbmNsdWRlICJsaWJleGlmL2V4aWYtdXRpbHMuaCIKIH0KIAogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CkBAIC03NTAsNiArNzUzLDIyIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHZvaWQgZm9yZWFjaGVudHJ5KEV4aWZFbnRyeSAqZW50cnksIHZvaWQgKnVzZXIpIHsKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBBTE9HSSgiZW50cnkgJXgsIGZvcm1hdCAlZCwgc2l6ZSAlZDogJXMiLAorICAgICAgICAgICAgZW50cnktPnRhZywgZW50cnktPmZvcm1hdCwgZW50cnktPnNpemUsIGV4aWZfZW50cnlfZ2V0X3ZhbHVlKGVudHJ5LCBidWYsIHNpemVvZihidWYpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGZvcmVhY2hjb250ZW50KEV4aWZDb250ZW50ICpjb250ZW50LCB2b2lkICp1c2VyKSB7CisgICAgQUxPR0koImNvbnRlbnQgJWQiLCBleGlmX2NvbnRlbnRfZ2V0X2lmZChjb250ZW50KSk7CisgICAgZXhpZl9jb250ZW50X2ZvcmVhY2hfZW50cnkoY29udGVudCwgZm9yZWFjaGVudHJ5LCB1c2VyKTsKK30KKworc3RhdGljIGxvbmcgZ2V0TG9uZ0Zyb21FeGlmRW50cnkoRXhpZkVudHJ5ICplKSB7CisgICAgRXhpZkJ5dGVPcmRlciBvID0gZXhpZl9kYXRhX2dldF9ieXRlX29yZGVyKGUtPnBhcmVudC0+cGFyZW50KTsKKyAgICByZXR1cm4gZXhpZl9nZXRfbG9uZyhlLT5kYXRhLCBvKTsKK30KKwogTXRwUmVzcG9uc2VDb2RlIE15TXRwRGF0YWJhc2U6OmdldE9iamVjdEluZm8oTXRwT2JqZWN0SGFuZGxlIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXRwT2JqZWN0SW5mbyYgaW5mbykgewogICAgIGNoYXIgICAgICAgICAgICBkYXRlWzIwXTsKQEAgLTc5MiwyMyArODExLDIyIEBACiAKICAgICAvLyByZWFkIEVYSUYgZGF0YSBmb3IgdGh1bWJuYWlsIGluZm9ybWF0aW9uCiAgICAgaWYgKGluZm8ubUZvcm1hdCA9PSBNVFBfRk9STUFUX0VYSUZfSlBFRyB8fCBpbmZvLm1Gb3JtYXQgPT0gTVRQX0ZPUk1BVF9KRklGKSB7Ci0gICAgICAgIFJlc2V0SnBnZmlsZSgpOwotICAgICAgICAgLy8gU3RhcnQgd2l0aCBhbiBlbXB0eSBpbWFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCi0gICAgICAgIG1lbXNldCgmSW1hZ2VJbmZvLCAwLCBzaXplb2YoSW1hZ2VJbmZvKSk7Ci0gICAgICAgIEltYWdlSW5mby5GbGFzaFVzZWQgPSAtMTsKLSAgICAgICAgSW1hZ2VJbmZvLk1ldGVyaW5nTW9kZSA9IC0xOwotICAgICAgICBJbWFnZUluZm8uV2hpdGViYWxhbmNlID0gLTE7Ci0gICAgICAgIHN0cm5jcHkoSW1hZ2VJbmZvLkZpbGVOYW1lLCAoY29uc3QgY2hhciAqKXBhdGgsIFBBVEhfTUFYKTsKLSAgICAgICAgaWYgKFJlYWRKcGVnRmlsZSgoY29uc3QgY2hhciopcGF0aCwgUkVBRF9NRVRBREFUQSkpIHsKLSAgICAgICAgICAgIFNlY3Rpb25fdCogc2VjdGlvbiA9IEZpbmRTZWN0aW9uKE1fRVhJRik7Ci0gICAgICAgICAgICBpZiAoc2VjdGlvbikgewotICAgICAgICAgICAgICAgIGluZm8ubVRodW1iQ29tcHJlc3NlZFNpemUgPSBJbWFnZUluZm8uVGh1bWJuYWlsU2l6ZTsKLSAgICAgICAgICAgICAgICBpbmZvLm1UaHVtYkZvcm1hdCA9IE1UUF9GT1JNQVRfRVhJRl9KUEVHOwotICAgICAgICAgICAgICAgIGluZm8ubUltYWdlUGl4V2lkdGggPSBJbWFnZUluZm8uV2lkdGg7Ci0gICAgICAgICAgICAgICAgaW5mby5tSW1hZ2VQaXhIZWlnaHQgPSBJbWFnZUluZm8uSGVpZ2h0OwotICAgICAgICAgICAgfQorCisgICAgICAgIEV4aWZEYXRhICpleGlmZGF0YSA9IGV4aWZfZGF0YV9uZXdfZnJvbV9maWxlKHBhdGgpOworICAgICAgICBpZiAoZXhpZmRhdGEpIHsKKyAgICAgICAgICAgIC8vZXhpZl9kYXRhX2ZvcmVhY2hfY29udGVudChleGlmZGF0YSwgZm9yZWFjaGNvbnRlbnQsIE5VTEwpOworCisgICAgICAgICAgICAvLyBYWFggZ2V0IHRoaXMgZnJvbSBleGlmLCBvciBwYXJzZSBqcGVnIGhlYWRlciBpbnN0ZWFkPworICAgICAgICAgICAgRXhpZkVudHJ5ICp3ID0gZXhpZl9jb250ZW50X2dldF9lbnRyeSgKKyAgICAgICAgICAgICAgICAgICAgZXhpZmRhdGEtPmlmZFtFWElGX0lGRF9FWElGXSwgRVhJRl9UQUdfUElYRUxfWF9ESU1FTlNJT04pOworICAgICAgICAgICAgRXhpZkVudHJ5ICpoID0gZXhpZl9jb250ZW50X2dldF9lbnRyeSgKKyAgICAgICAgICAgICAgICAgICAgZXhpZmRhdGEtPmlmZFtFWElGX0lGRF9FWElGXSwgRVhJRl9UQUdfUElYRUxfWV9ESU1FTlNJT04pOworICAgICAgICAgICAgaW5mby5tVGh1bWJDb21wcmVzc2VkU2l6ZSA9IGV4aWZkYXRhLT5kYXRhID8gZXhpZmRhdGEtPnNpemUgOiAwOworICAgICAgICAgICAgaW5mby5tVGh1bWJGb3JtYXQgPSBNVFBfRk9STUFUX0VYSUZfSlBFRzsKKyAgICAgICAgICAgIGluZm8ubUltYWdlUGl4V2lkdGggPSBnZXRMb25nRnJvbUV4aWZFbnRyeSh3KTsKKyAgICAgICAgICAgIGluZm8ubUltYWdlUGl4SGVpZ2h0ID0gZ2V0TG9uZ0Zyb21FeGlmRW50cnkoaCk7CisgICAgICAgICAgICBleGlmX2RhdGFfdW5yZWYoZXhpZmRhdGEpOwogICAgICAgICB9Ci0gICAgICAgIERpc2NhcmREYXRhKCk7CiAgICAgfQogCiAgICAgY2hlY2tBbmRDbGVhckV4Y2VwdGlvbkZyb21DYWxsYmFjayhlbnYsIF9fRlVOQ1RJT05fXyk7CkBAIC04MjQsMjIgKzg0MiwxNiBAQAogCiAgICAgaWYgKGdldE9iamVjdEZpbGVQYXRoKGhhbmRsZSwgcGF0aCwgbGVuZ3RoLCBmb3JtYXQpID09IE1UUF9SRVNQT05TRV9PSwogICAgICAgICAgICAgJiYgKGZvcm1hdCA9PSBNVFBfRk9STUFUX0VYSUZfSlBFRyB8fCBmb3JtYXQgPT0gTVRQX0ZPUk1BVF9KRklGKSkgewotICAgICAgICBSZXNldEpwZ2ZpbGUoKTsKLSAgICAgICAgIC8vIFN0YXJ0IHdpdGggYW4gZW1wdHkgaW1hZ2UgaW5mb3JtYXRpb24gc3RydWN0dXJlLgotICAgICAgICBtZW1zZXQoJkltYWdlSW5mbywgMCwgc2l6ZW9mKEltYWdlSW5mbykpOwotICAgICAgICBJbWFnZUluZm8uRmxhc2hVc2VkID0gLTE7Ci0gICAgICAgIEltYWdlSW5mby5NZXRlcmluZ01vZGUgPSAtMTsKLSAgICAgICAgSW1hZ2VJbmZvLldoaXRlYmFsYW5jZSA9IC0xOwotICAgICAgICBzdHJuY3B5KEltYWdlSW5mby5GaWxlTmFtZSwgKGNvbnN0IGNoYXIgKilwYXRoLCBQQVRIX01BWCk7Ci0gICAgICAgIGlmIChSZWFkSnBlZ0ZpbGUoKGNvbnN0IGNoYXIqKXBhdGgsIFJFQURfTUVUQURBVEEpKSB7Ci0gICAgICAgICAgICBTZWN0aW9uX3QqIHNlY3Rpb24gPSBGaW5kU2VjdGlvbihNX0VYSUYpOwotICAgICAgICAgICAgaWYgKHNlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBvdXRUaHVtYlNpemUgPSBJbWFnZUluZm8uVGh1bWJuYWlsU2l6ZTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtYWxsb2Mob3V0VGh1bWJTaXplKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAgICAgICBtZW1jcHkocmVzdWx0LCBzZWN0aW9uLT5EYXRhICsgSW1hZ2VJbmZvLlRodW1ibmFpbE9mZnNldCArIDgsIG91dFRodW1iU2l6ZSk7CisKKyAgICAgICAgRXhpZkRhdGEgKmV4aWZkYXRhID0gZXhpZl9kYXRhX25ld19mcm9tX2ZpbGUocGF0aCk7CisgICAgICAgIGlmIChleGlmZGF0YSkgeworICAgICAgICAgICAgaWYgKGV4aWZkYXRhLT5kYXRhKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFsbG9jKGV4aWZkYXRhLT5zaXplKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShyZXN1bHQsIGV4aWZkYXRhLT5kYXRhLCBleGlmZGF0YS0+c2l6ZSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgRGlzY2FyZERhdGEoKTsKKyAgICAgICAgICAgIGV4aWZfZGF0YV91bnJlZihleGlmZGF0YSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYi9qYXZhL2NvbS9hbmRyb2lkL21lZGlhL3JlbW90ZWRpc3BsYXkvUmVtb3RlRGlzcGxheS5qYXZhIGIvbWVkaWEvbGliL2phdmEvY29tL2FuZHJvaWQvbWVkaWEvcmVtb3RlZGlzcGxheS9SZW1vdGVEaXNwbGF5LmphdmEKaW5kZXggNmNmYzBlOC4uZGM5ZGQ3OSAxMDA2NDQKLS0tIGEvbWVkaWEvbGliL2phdmEvY29tL2FuZHJvaWQvbWVkaWEvcmVtb3RlZGlzcGxheS9SZW1vdGVEaXNwbGF5LmphdmEKKysrIGIvbWVkaWEvbGliL2phdmEvY29tL2FuZHJvaWQvbWVkaWEvcmVtb3RlZGlzcGxheS9SZW1vdGVEaXNwbGF5LmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYS5yZW1vdGVkaXNwbGF5OwogCi1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLlJlbW90ZURpc3BsYXlTdGF0ZS5SZW1vdGVEaXNwbGF5SW5mbzsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvRWZmZWN0Q29udGV4dC5qYXZhIGIvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L0VmZmVjdENvbnRleHQuamF2YQppbmRleCBlZjAzMjI5Li5hMTFiOWM0IDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvRWZmZWN0Q29udGV4dC5qYXZhCisrKyBiL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9FZmZlY3RDb250ZXh0LmphdmEKQEAgLTE5LDEwICsxOSw3IEBACiAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuQ2FjaGVkRnJhbWVNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEVudmlyb25tZW50OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9FZmZlY3RGYWN0b3J5LmphdmEgYi9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvRWZmZWN0RmFjdG9yeS5qYXZhCmluZGV4IDQzMzAyNzkuLmY2ZmNiYTcgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9FZmZlY3RGYWN0b3J5LmphdmEKKysrIGIvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L0VmZmVjdEZhY3RvcnkuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogcGFja2FnZSBhbmRyb2lkLm1lZGlhLmVmZmVjdDsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogCiAvKioKICAqIDxwPlRoZSBFZmZlY3RGYWN0b3J5IGNsYXNzIGRlZmluZXMgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIEVmZmVjdHMsIGFuZCBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvRmlsdGVyRWZmZWN0LmphdmEgYi9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvRmlsdGVyRWZmZWN0LmphdmEKaW5kZXggZDdjMzE5ZS4uMzRiMzU0OSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L0ZpbHRlckVmZmVjdC5qYXZhCisrKyBiL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9GaWx0ZXJFZmZlY3QuamF2YQpAQCAtMTcsMTAgKzE3LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhLmVmZmVjdDsKIAotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5DYWNoZWRGcmFtZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckZhY3Rvcnk7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9GaWx0ZXJHcmFwaEVmZmVjdC5qYXZhIGIvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L0ZpbHRlckdyYXBoRWZmZWN0LmphdmEKaW5kZXggYjE4YmVhOC4uODBjNjk1YiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L0ZpbHRlckdyYXBoRWZmZWN0LmphdmEKKysrIGIvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L0ZpbHRlckdyYXBoRWZmZWN0LmphdmEKQEAgLTE5LDE3ICsxOSwxMyBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckdyYXBoOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HcmFwaFJ1bm5lcjsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2ltcGxlU2NoZWR1bGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TeW5jUnVubmVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuZWZmZWN0LkVmZmVjdDsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLmVmZmVjdC5GaWx0ZXJFZmZlY3Q7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5lZmZlY3QuRWZmZWN0Q29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmlvLkdyYXBoSU9FeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5pby5HcmFwaFJlYWRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmlvLlRleHRHcmFwaFJlYWRlcjsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIC8qKgogICogRWZmZWN0IHN1YmNsYXNzIGZvciBlZmZlY3RzIGJhc2VkIG9uIGEgc2luZ2xlIEZpbHRlci4gU3ViY2xhc3NlcyBuZWVkIG9ubHkgaW52b2tlIHRoZQogICogY29uc3RydWN0b3Igd2l0aCB0aGUgY29ycmVjdCBhcmd1bWVudHMgdG8gb2J0YWluIGFuIEVmZmVjdCBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9TaW5nbGVGaWx0ZXJFZmZlY3QuamF2YSBiL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9TaW5nbGVGaWx0ZXJFZmZlY3QuamF2YQppbmRleCA2Zjg1ODYxLi40NzkwMGRmIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvU2luZ2xlRmlsdGVyRWZmZWN0LmphdmEKKysrIGIvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L1NpbmdsZUZpbHRlckVmZmVjdC5qYXZhCkBAIC0yMSwxMSArMjEsOCBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJGdW5jdGlvbjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5lZmZlY3QuRWZmZWN0OwogaW1wb3J0IGFuZHJvaWQubWVkaWEuZWZmZWN0LkVmZmVjdENvbnRleHQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEVmZmVjdCBzdWJjbGFzcyBmb3IgZWZmZWN0cyBiYXNlZCBvbiBhIHNpbmdsZSBGaWx0ZXIuIFN1YmNsYXNzZXMgbmVlZCBvbmx5IGludm9rZSB0aGUKICAqIGNvbnN0cnVjdG9yIHdpdGggdGhlIGNvcnJlY3QgYXJndW1lbnRzIHRvIG9idGFpbiBhbiBFZmZlY3QgaW1wbGVtZW50YXRpb24uCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvU2l6ZUNoYW5nZUVmZmVjdC5qYXZhIGIvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L1NpemVDaGFuZ2VFZmZlY3QuamF2YQppbmRleCA0ZDI3YmFlLi4xYmY3ZDQwIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvU2l6ZUNoYW5nZUVmZmVjdC5qYXZhCisrKyBiL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9TaXplQ2hhbmdlRWZmZWN0LmphdmEKQEAgLTE2LDE1ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYS5lZmZlY3Q7CiAKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJGYWN0b3J5OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJGdW5jdGlvbjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5lZmZlY3QuRWZmZWN0OwogaW1wb3J0IGFuZHJvaWQubWVkaWEuZWZmZWN0LkVmZmVjdENvbnRleHQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEVmZmVjdCBzdWJjbGFzcyBmb3IgZWZmZWN0cyBiYXNlZCBvbiBhIHNpbmdsZSBGaWx0ZXIgd2l0aCBvdXRwdXQgc2l6ZSBkaWZmZXJuZXQKICAqIGZyb20gaW5wdXQuICBTdWJjbGFzc2VzIG5lZWQgb25seSBpbnZva2UgdGhlIGNvbnN0cnVjdG9yIHdpdGggdGhlIGNvcnJlY3QgYXJndW1lbnRzCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvZWZmZWN0cy9Dcm9wRWZmZWN0LmphdmEgYi9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvZWZmZWN0cy9Dcm9wRWZmZWN0LmphdmEKaW5kZXggM2U4ZDc4YS4uN2UxYzQ5NSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L2VmZmVjdHMvQ3JvcEVmZmVjdC5qYXZhCisrKyBiL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9lZmZlY3RzL0Nyb3BFZmZlY3QuamF2YQpAQCAtMTksNyArMTksNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5lZmZlY3QuRWZmZWN0Q29udGV4dDsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLmVmZmVjdC5TaXplQ2hhbmdlRWZmZWN0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuZWZmZWN0LlNpbmdsZUZpbHRlckVmZmVjdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcnBhY2tzLmltYWdlcHJvYy5Dcm9wUmVjdEZpbHRlcjsKIAogLyoqCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L0ZpbHRlckZ1bmN0aW9uRW52aXJvbm1lbnQuamF2YSBiL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvRmlsdGVyRnVuY3Rpb25FbnZpcm9ubWVudC5qYXZhCmluZGV4IDNmMzZkOTguLmZlYWY2ZTggMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvRmlsdGVyRnVuY3Rpb25FbnZpcm9ubWVudC5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvRmlsdGVyRnVuY3Rpb25FbnZpcm9ubWVudC5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyRmFjdG9yeTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyRnVuY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZU1hbmFnZXI7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL0FzeW5jUnVubmVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvQXN5bmNSdW5uZXIuamF2YQppbmRleCA3MGNiYWQ0Li44MTk3NzRhIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvQXN5bmNSdW5uZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvQXN5bmNSdW5uZXIuamF2YQpAQCAtMTgsMTcgKzE4LDkgQEAKIHBhY2thZ2UgYW5kcm9pZC5maWx0ZXJmdy5jb3JlOwogCiBpbXBvcnQgYW5kcm9pZC5vcy5Bc3luY1Rhc2s7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogCiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAotaW1wb3J0IGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuUnVubmFibGU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ2FuY2VsbGF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCiAvKioKICAqIEBoaWRlCiAgKi8KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9GaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9GaWx0ZXIuamF2YQppbmRleCA3M2IwMDlkLi4wNjJiNmJhIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL0ZpbHRlci5qYXZhCkBAIC0zMyw3ICszMyw2IEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9GcmFtZS5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL0ZyYW1lLmphdmEKaW5kZXggZWY4YzU0Mi4uN2RkMDc4MyAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL0ZyYW1lLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL0ZyYW1lLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL05hdGl2ZUZyYW1lLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvTmF0aXZlRnJhbWUuamF2YQppbmRleCBiZmQwOWJhLi43ZDE1NTNmIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvTmF0aXZlRnJhbWUuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvTmF0aXZlRnJhbWUuamF2YQpAQCAtMjQsOCArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVCdWZmZXI7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKIAogLyoqCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvT25lU2hvdFNjaGVkdWxlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL09uZVNob3RTY2hlZHVsZXIuamF2YQppbmRleCBkYmM4ZDE2Li44M2M0NzVmIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvT25lU2hvdFNjaGVkdWxlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9PbmVTaG90U2NoZWR1bGVyLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5maWx0ZXJmdy5jb3JlOwogCiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2NoZWR1bGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Sb3VuZFJvYmluU2NoZWR1bGVyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9TZXJpYWxpemVkRnJhbWUuamF2YSBiL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9TZXJpYWxpemVkRnJhbWUuamF2YQppbmRleCBmNDkzZmQyLi4zNWJhMDRmIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvU2VyaWFsaXplZEZyYW1lLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL1NlcmlhbGl6ZWRGcmFtZS5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVCdWZmZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuT2JqZWN0Rm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogCkBAIC0yOCwxMCArMjcsNyBAQAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk9wdGlvbmFsRGF0YUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9TaW1wbGVGcmFtZS5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL1NpbXBsZUZyYW1lLmphdmEKaW5kZXggNTM0YTMwZC4uN2RkZDFkNCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL1NpbXBsZUZyYW1lLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL1NpbXBsZUZyYW1lLmphdmEKQEAgLTIwLDExICsyMCw5IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVCdWZmZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuT2JqZWN0Rm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3I7CiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKIAogLyoqCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvQ2FsbGJhY2tGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9DYWxsYmFja0ZpbHRlci5qYXZhCmluZGV4IDQxODUzNDMuLjRhNDdmYTQgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9DYWxsYmFja0ZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9DYWxsYmFja0ZpbHRlci5qYXZhCkBAIC0yMCwxMyArMjAsOCBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwogCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvRnJhbWVCcmFuY2guamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9GcmFtZUJyYW5jaC5qYXZhCmluZGV4IDZiOGNiYzcuLmY5MDljM2YgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9GcmFtZUJyYW5jaC5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9GcmFtZUJyYW5jaC5qYXZhCkBAIC0yMiw3ICsyMiw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaW5hbFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogCiAvKioKICAqIEBoaWRlCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvRnJhbWVGZXRjaC5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0ZyYW1lRmV0Y2guamF2YQppbmRleCA1MThiODM3Li44N2Q4ZjBiIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvRnJhbWVGZXRjaC5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9GcmFtZUZldGNoLmphdmEKQEAgLTI0LDggKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKiBAaGlkZQogICovCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvRnJhbWVTdG9yZS5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0ZyYW1lU3RvcmUuamF2YQppbmRleCAzYWFkYWFjLi4wNWFjNTBkIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvRnJhbWVTdG9yZS5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9GcmFtZVN0b3JlLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9HTFRleHR1cmVTb3VyY2UuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9HTFRleHR1cmVTb3VyY2UuamF2YQppbmRleCAxNzc2ODIwLi5hZjYxZDlhIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvR0xUZXh0dXJlU291cmNlLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0dMVGV4dHVyZVNvdXJjZS5qYXZhCkBAIC0yMywxMSArMjMsOCBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIAotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KIC8qKgogICogQGhpZGUKICAqLwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0dMVGV4dHVyZVRhcmdldC5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0dMVGV4dHVyZVRhcmdldC5qYXZhCmluZGV4IGIyMjg1Y2QuLjkxYmI0MTcgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9HTFRleHR1cmVUYXJnZXQuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvR0xUZXh0dXJlVGFyZ2V0LmphdmEKQEAgLTIzLDExICsyMyw4IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR0xGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCi1pbXBvcnQgamF2YS51dGlsLlNldDsKLQogLyoqCiAgKiBAaGlkZQogICovCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvSW5wdXRTdHJlYW1Tb3VyY2UuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9JbnB1dFN0cmVhbVNvdXJjZS5qYXZhCmluZGV4IDZjMjJlZTcuLjBlZjkwNTUgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9JbnB1dFN0cmVhbVNvdXJjZS5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9JbnB1dFN0cmVhbVNvdXJjZS5qYXZhCkBAIC0yMyw3ICsyMyw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaW5hbFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuUHJpbWl0aXZlRm9ybWF0OwogCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvTnVsbEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL051bGxGaWx0ZXIuamF2YQppbmRleCBmM2UwOGU0Li43MzQzNGQ0IDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvTnVsbEZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9OdWxsRmlsdGVyLmphdmEKQEAgLTE5LDggKzE5LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIAogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL09iamVjdFNvdXJjZS5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL09iamVjdFNvdXJjZS5qYXZhCmluZGV4IGQ1MTFlNDQuLjc4ZTJiNTAgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9PYmplY3RTb3VyY2UuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvT2JqZWN0U291cmNlLmphdmEKQEAgLTE3LDE1ICsxNywxMiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MuYmFzZTsKIAotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpbmFsUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0Lk9iamVjdEZvcm1hdDsKIAogLyoqCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvT3V0cHV0U3RyZWFtVGFyZ2V0LmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvT3V0cHV0U3RyZWFtVGFyZ2V0LmphdmEKaW5kZXggM2QzZDBmMS4uZmQ2NWE5ZCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL091dHB1dFN0cmVhbVRhcmdldC5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9PdXRwdXRTdHJlYW1UYXJnZXQuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiAKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9SZXRhcmdldEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL1JldGFyZ2V0RmlsdGVyLmphdmEKaW5kZXggMjU0MTY3YS4uMGU5ODg4MjAgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9SZXRhcmdldEZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9SZXRhcmdldEZpbHRlci5qYXZhCkBAIC0yMSw5ICsyMSw3IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0FscGhhQmxlbmRGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0FscGhhQmxlbmRGaWx0ZXIuamF2YQppbmRleCA0NzMzNjljLi5jM2NjMjgyIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9BbHBoYUJsZW5kRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQWxwaGFCbGVuZEZpbHRlci5qYXZhCkBAIC0xNywxOCArMTcsOSBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MuaW1hZ2Vwcm9jOwogCi1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiAvKioKICAqIEBoaWRlCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9BdXRvRml4RmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9BdXRvRml4RmlsdGVyLmphdmEKaW5kZXggYzcxYzFjOTQuLmFjODNkYjIgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0F1dG9GaXhGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9BdXRvRml4RmlsdGVyLmphdmEKQEAgLTIxLDEzICsyMSwxMCBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogcHVibGljIGNsYXNzIEF1dG9GaXhGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIgewogCiAgICAgQEdlbmVyYXRlRmllbGRQb3J0KG5hbWUgPSAidGlsZV9zaXplIiwgaGFzRGVmYXVsdCA9IHRydWUpCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CaXRtYXBPdmVybGF5RmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CaXRtYXBPdmVybGF5RmlsdGVyLmphdmEKaW5kZXggZTRiYjZjZi4uOTJiMTc3YyAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQml0bWFwT3ZlcmxheUZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JpdG1hcE92ZXJsYXlGaWx0ZXIuamF2YQpAQCAtMjEsMTcgKzIxLDExIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcnBhY2tzLmltYWdlcHJvYy5JbWFnZUNvbWJpbmVGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEBoaWRlCiAgKi8KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JpdG1hcFNvdXJjZS5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQml0bWFwU291cmNlLmphdmEKaW5kZXggOTc4ZmM5NC4uODllODcyMyAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQml0bWFwU291cmNlLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQml0bWFwU291cmNlLmphdmEKQEAgLTE3LDE3ICsxNywxMSBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MuaW1hZ2Vwcm9jOwogCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiAKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JsYWNrV2hpdGVGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JsYWNrV2hpdGVGaWx0ZXIuamF2YQppbmRleCAyMGIwMmQyZi4uMzgyMjFiNCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQmxhY2tXaGl0ZUZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JsYWNrV2hpdGVGaWx0ZXIuamF2YQpAQCAtMjEsOSArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CbGVuZEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQmxlbmRGaWx0ZXIuamF2YQppbmRleCAyOWJjOGEzLi5hZmY1ZTllIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CbGVuZEZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JsZW5kRmlsdGVyLmphdmEKQEAgLTE2LDE4ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5maWx0ZXJwYWNrcy5pbWFnZXByb2M7CiAKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKLQotaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIC8qKgogICogVGhlIGZpbHRlciBsaW5lYXJseSBibGVuZHMgImxlZnQiIGFuZCAicmlnaHQiIGZyYW1lcy4gVGhlIGJsZW5kaW5nIHdlaWdodCBpcwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQnJpZ2h0bmVzc0ZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQnJpZ2h0bmVzc0ZpbHRlci5qYXZhCmluZGV4IDA0NmU2OWQuLmJjNjJlMTkgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JyaWdodG5lc3NGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CcmlnaHRuZXNzRmlsdGVyLmphdmEKQEAgLTE3LDEzICsxNyw4IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5maWx0ZXJwYWNrcy5pbWFnZXByb2M7CiAKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ29sb3JUZW1wZXJhdHVyZUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ29sb3JUZW1wZXJhdHVyZUZpbHRlci5qYXZhCmluZGV4IDc0ODg5ODAuLjFkNDA4YmUgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0NvbG9yVGVtcGVyYXR1cmVGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Db2xvclRlbXBlcmF0dXJlRmlsdGVyLmphdmEKQEAgLTIxLDEzICsyMSw5IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBwdWJsaWMgY2xhc3MgQ29sb3JUZW1wZXJhdHVyZUZpbHRlciBleHRlbmRzIEZpbHRlciB7CiAKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0NvbnRyYXN0RmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Db250cmFzdEZpbHRlci5qYXZhCmluZGV4IDcwZTk4N2YuLjcwNDNjNzIgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0NvbnRyYXN0RmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ29udHJhc3RGaWx0ZXIuamF2YQpAQCAtMTcsMTggKzE3LDExIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5maWx0ZXJwYWNrcy5pbWFnZXByb2M7CiAKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIAotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KIC8qKgogICogQGhpZGUKICAqLwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ3JvcEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ3JvcEZpbHRlci5qYXZhCmluZGV4IDUyMjJkOWMuLjBlZjMyM2MgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0Nyb3BGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Dcm9wRmlsdGVyLmphdmEKQEAgLTIyLDE5ICsyMiwxMyBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3Lmdlb21ldHJ5LlBvaW50OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZ2VvbWV0cnkuUXVhZDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5PYmplY3RGb3JtYXQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEBoaWRlCiAgKi8KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0Nyb3BSZWN0RmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Dcm9wUmVjdEZpbHRlci5qYXZhCmluZGV4IGQ0MjNkMDYuLjAxMGVlMjEgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0Nyb3BSZWN0RmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ3JvcFJlY3RGaWx0ZXIuamF2YQpAQCAtMjEsMTQgKzIxLDkgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ3Jvc3NQcm9jZXNzRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Dcm9zc1Byb2Nlc3NGaWx0ZXIuamF2YQppbmRleCBlMDUxNGY4Li5kNTY1ZTY1IDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Dcm9zc1Byb2Nlc3NGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Dcm9zc1Byb2Nlc3NGaWx0ZXIuamF2YQpAQCAtMjEsMTUgKzIxLDEwIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIHB1YmxpYyBjbGFzcyBDcm9zc1Byb2Nlc3NGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIgewogCiAgICAgQEdlbmVyYXRlRmllbGRQb3J0KG5hbWUgPSAidGlsZV9zaXplIiwgaGFzRGVmYXVsdCA9IHRydWUpCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Eb2N1bWVudGFyeUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRG9jdW1lbnRhcnlGaWx0ZXIuamF2YQppbmRleCBmOTNhODJjLi43Mjc0NWMwIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Eb2N1bWVudGFyeUZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0RvY3VtZW50YXJ5RmlsdGVyLmphdmEKQEAgLTIxLDkgKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRHJhd092ZXJsYXlGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0RyYXdPdmVybGF5RmlsdGVyLmphdmEKaW5kZXggM2YxNzExZS4uZDEwYTZlZiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRHJhd092ZXJsYXlGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9EcmF3T3ZlcmxheUZpbHRlci5qYXZhCkBAIC0yMSwxNyArMjEsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3Lmdlb21ldHJ5LlF1YWQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuT2JqZWN0Rm9ybWF0OwogCi1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotCiAvKioKICAqIEBoaWRlCiAgKi8KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0RyYXdSZWN0RmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9EcmF3UmVjdEZpbHRlci5qYXZhCmluZGV4IDgzYzkzNDguLmIyODhlNmUgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0RyYXdSZWN0RmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRHJhd1JlY3RGaWx0ZXIuamF2YQpAQCAtMjMsOSArMjMsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZ2VvbWV0cnkuUXVhZDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0R1b3RvbmVGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0R1b3RvbmVGaWx0ZXIuamF2YQppbmRleCBkOGM4OGVlLi5lZjgyZWU5IDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9EdW90b25lRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRHVvdG9uZUZpbHRlci5qYXZhCkBAIC0yMSw5ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ZpbGxMaWdodEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRmlsbExpZ2h0RmlsdGVyLmphdmEKaW5kZXggZmM5MTdhMS4uYzdmYjU1ZCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRmlsbExpZ2h0RmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRmlsbExpZ2h0RmlsdGVyLmphdmEKQEAgLTIxLDEwICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9GaXNoZXllRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9GaXNoZXllRmlsdGVyLmphdmEKaW5kZXggNWQ3OTI5Zi4uMmZmNjU4OCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRmlzaGV5ZUZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0Zpc2hleWVGaWx0ZXIuamF2YQpAQCAtMjIsMTcgKzIyLDExIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiAvKioKICAqIEBoaWRlCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9GaXhlZFJvdGF0aW9uRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9GaXhlZFJvdGF0aW9uRmlsdGVyLmphdmEKaW5kZXggM2QzMTllYS4uMzQwZjMwOCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRml4ZWRSb3RhdGlvbkZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ZpeGVkUm90YXRpb25GaWx0ZXIuamF2YQpAQCAtMjIsNyArMjIsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3Lmdlb21ldHJ5LlBvaW50OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRmxpcEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRmxpcEZpbHRlci5qYXZhCmluZGV4IGY4Yjg1N2IuLjY4Yzc2MGYgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ZsaXBGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9GbGlwRmlsdGVyLmphdmEKQEAgLTIxLDEwICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvR3JhaW5GaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0dyYWluRmlsdGVyLmphdmEKaW5kZXggNTc3MjQzYS4uNTI4ZWFhMiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvR3JhaW5GaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9HcmFpbkZpbHRlci5qYXZhCkBAIC0yMSwxNCArMjEsOSBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5nZW9tZXRyeS5RdWFkOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZ2VvbWV0cnkuUG9pbnQ7CiAKIGltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKIGltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VDb21iaW5lRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbWFnZUNvbWJpbmVGaWx0ZXIuamF2YQppbmRleCA4NTg0ODliLi5jOWE2OTU2IDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbWFnZUNvbWJpbmVGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbWFnZUNvbWJpbmVGaWx0ZXIuamF2YQpAQCAtMjEsMTYgKzIxLDEwIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKIAogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VFbmNvZGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbWFnZUVuY29kZXIuamF2YQppbmRleCBhNTQwNWNiLi5lOGJmNDgyIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbWFnZUVuY29kZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbWFnZUVuY29kZXIuamF2YQpAQCAtMTcsMjEgKzE3LDE2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5maWx0ZXJwYWNrcy5pbWFnZXByb2M7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcC5Db21wcmVzc0Zvcm1hdDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogCiAvKioKICAqIEBoaWRlCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbWFnZVNsaWNlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VTbGljZXIuamF2YQppbmRleCBiOTk2ZWI4Li44YmY4MGIyZiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VTbGljZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbWFnZVNsaWNlci5qYXZhCkBAIC0yMCw5ICsyMCw3IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ltYWdlU3RpdGNoZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ltYWdlU3RpdGNoZXIuamF2YQppbmRleCAyMGFiYTkxLi41ZTNkMTViIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbWFnZVN0aXRjaGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VTdGl0Y2hlci5qYXZhCkBAIC0yMCwxNiArMjAsMTIgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogcHVibGljIGNsYXNzIEltYWdlU3RpdGNoZXIgZXh0ZW5kcyBGaWx0ZXIgewogCiAgICAgQEdlbmVyYXRlRmllbGRQb3J0KG5hbWUgPSAieFNsaWNlcyIpCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbnZlcnQuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ludmVydC5qYXZhCmluZGV4IDQwMGZkNWQuLjg4MWUzMGYgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ludmVydC5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ludmVydC5qYXZhCkBAIC0xNywxMiArMTcsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MuaW1hZ2Vwcm9jOwogCi1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvTG9tb2lzaEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvTG9tb2lzaEZpbHRlci5qYXZhCmluZGV4IDcyNmZmZmYuLjRlNTNmOTIgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0xvbW9pc2hGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Mb21vaXNoRmlsdGVyLmphdmEKQEAgLTIxLDkgKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvTmVnYXRpdmVGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL05lZ2F0aXZlRmlsdGVyLmphdmEKaW5kZXggNDQwZDZhNi4uZjY2ZmMyMyAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvTmVnYXRpdmVGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9OZWdhdGl2ZUZpbHRlci5qYXZhCkBAIC0yMSw5ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1Bvc3Rlcml6ZUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUG9zdGVyaXplRmlsdGVyLmphdmEKaW5kZXggYmMyZTU1My4uODY0ZDdlMiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUG9zdGVyaXplRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUG9zdGVyaXplRmlsdGVyLmphdmEKQEAgLTIxLDkgKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUmVkRXllRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9SZWRFeWVGaWx0ZXIuamF2YQppbmRleCA4NjE4ODA0Li40OGIyZmRmNCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUmVkRXllRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUmVkRXllRmlsdGVyLmphdmEKQEAgLTIxLDkgKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwpAQCAtMzEsOCArMjgsNiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3I7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50RjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiAvKioKICAqIEBoaWRlCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9SZXNpemVGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1Jlc2l6ZUZpbHRlci5qYXZhCmluZGV4IDQxMWUwNjEuLmM3OWMxMWIgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1Jlc2l6ZUZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1Jlc2l6ZUZpbHRlci5qYXZhCkBAIC0yMywxMCArMjMsNyBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUm90YXRlRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Sb3RhdGVGaWx0ZXIuamF2YQppbmRleCAzZGE3OTM5Li40M2Q4ZDZjIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Sb3RhdGVGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Sb3RhdGVGaWx0ZXIuamF2YQpAQCAtMjIsMTYgKzIyLDExIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZ2VvbWV0cnkuUXVhZDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3Lmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgogICogQGhpZGUKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1NhdHVyYXRlRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TYXR1cmF0ZUZpbHRlci5qYXZhCmluZGV4IGI4M2FmMzkuLjc1N2ZhYzEgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1NhdHVyYXRlRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2F0dXJhdGVGaWx0ZXIuamF2YQpAQCAtMjEsOSArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TZXBpYUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2VwaWFGaWx0ZXIuamF2YQppbmRleCA3YTgzZmRmLi5hOWY0ZTJjIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TZXBpYUZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1NlcGlhRmlsdGVyLmphdmEKQEAgLTIxLDkgKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2hhcnBlbkZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2hhcnBlbkZpbHRlci5qYXZhCmluZGV4IDI1NmI3NjkuLmEyOTA5OTYgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1NoYXJwZW5GaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TaGFycGVuRmlsdGVyLmphdmEKQEAgLTIxLDE1ICsyMSwxMCBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiAKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCiBwdWJsaWMgY2xhc3MgU2hhcnBlbkZpbHRlciBleHRlbmRzIEZpbHRlciB7CiAKICAgICBAR2VuZXJhdGVGaWVsZFBvcnQobmFtZSA9ICJzY2FsZSIsIGhhc0RlZmF1bHQgPSB0cnVlKQpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2ltcGxlSW1hZ2VGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1NpbXBsZUltYWdlRmlsdGVyLmphdmEKaW5kZXggZjRmYzI3MWUuLmFmZTkyZGUgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1NpbXBsZUltYWdlRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2ltcGxlSW1hZ2VGaWx0ZXIuamF2YQpAQCAtMjEsMTYgKzIxLDEwIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKIAogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU3RyYWlnaHRlbkZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU3RyYWlnaHRlbkZpbHRlci5qYXZhCmluZGV4IGM5ZjA5N2QuLjlkYjI5NmIgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1N0cmFpZ2h0ZW5GaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TdHJhaWdodGVuRmlsdGVyLmphdmEKQEAgLTIyLDE2ICsyMiwxMSBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3Lmdlb21ldHJ5LlF1YWQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5nZW9tZXRyeS5Qb2ludDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiAvKioKICAqIEBoaWRlCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9UaW50RmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9UaW50RmlsdGVyLmphdmEKaW5kZXggMGRhNTRhNS4uMmIxNDBiYSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVGludEZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RpbnRGaWx0ZXIuamF2YQpAQCAtMjEsOSArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Ub0dyYXlGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RvR3JheUZpbHRlci5qYXZhCmluZGV4IDAwZTdiZjQuLjc2MGNlM2EgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RvR3JheUZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RvR3JheUZpbHRlci5qYXZhCkBAIC0xNywyMyArMTcsMTQgQEAKIAogcGFja2FnZSBhbmRyb2lkLmZpbHRlcnBhY2tzLmltYWdlcHJvYzsKIAotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotCiAvKioKICAqIEBoaWRlCiAgKi8KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RvUGFja2VkR3JheUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9QYWNrZWRHcmF5RmlsdGVyLmphdmEKaW5kZXggYmM0YTY1ZS4uM2MxMjFkMCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9QYWNrZWRHcmF5RmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9QYWNrZWRHcmF5RmlsdGVyLmphdmEKQEAgLTI3LDggKzI3LDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGltcG9ydCBqYXZhLmxhbmcuTWF0aDsKIC8qKgogICogQGhpZGUKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RvUkdCQUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9SR0JBRmlsdGVyLmphdmEKaW5kZXggYWI0ODE0Zi4uZjAwODRmYSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9SR0JBRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9SR0JBRmlsdGVyLmphdmEKQEAgLTIxLDE2ICsyMSwxMSBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKiBAaGlkZQogICovCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Ub1JHQkZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9SR0JGaWx0ZXIuamF2YQppbmRleCA5MjU4NTAyLi5iYmIwZmMzIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Ub1JHQkZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RvUkdCRmlsdGVyLmphdmEKQEAgLTIxLDE2ICsyMSwxMSBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKiBAaGlkZQogICovCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9WaWduZXR0ZUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVmlnbmV0dGVGaWx0ZXIuamF2YQppbmRleCA3MTVmZWM2Yy4uMjQ5Y2M2ZiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVmlnbmV0dGVGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9WaWduZXR0ZUZpbHRlci5qYXZhCkBAIC0yMSw5ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdGV4dC9TdHJpbmdTb3VyY2UuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdGV4dC9TdHJpbmdTb3VyY2UuamF2YQppbmRleCBjYzMzYjg5Li4yZmU1MTlmIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3RleHQvU3RyaW5nU291cmNlLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy90ZXh0L1N0cmluZ1NvdXJjZS5qYXZhCkBAIC0yMiw4ICsyMiw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuT2JqZWN0Rm9ybWF0OwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdWkvU3VyZmFjZVJlbmRlckZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy91aS9TdXJmYWNlUmVuZGVyRmlsdGVyLmphdmEKaW5kZXggYTVjMWNjYi4uYmE4ODczNiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy91aS9TdXJmYWNlUmVuZGVyRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy91aS9TdXJmYWNlUmVuZGVyRmlsdGVyLmphdmEKQEAgLTI2LDE5ICsyNiwxMSBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpbmFsUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR0xFbnZpcm9ubWVudDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR0xGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiAKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3VpL1N1cmZhY2VUYXJnZXRGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdWkvU3VyZmFjZVRhcmdldEZpbHRlci5qYXZhCmluZGV4IDMwOGQxNjguLjA1Y2I4MWIgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdWkvU3VyZmFjZVRhcmdldEZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdWkvU3VyZmFjZVRhcmdldEZpbHRlci5qYXZhCkBAIC0yNSwxOSArMjUsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaW5hbFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3OwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogCiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3Byb2MvQmFja0Ryb3BwZXJGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9wcm9jL0JhY2tEcm9wcGVyRmlsdGVyLmphdmEKaW5kZXggNzhmN2YzZS4uYTMxYWMyYyAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3Byb2MvQmFja0Ryb3BwZXJGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvcHJvYy9CYWNrRHJvcHBlckZpbHRlci5qYXZhCkBAIC0yNCw3ICsyNCw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwpAQCAtMzIsNyArMzEsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1pbXBvcnQgamF2YS5sYW5nLkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmxhbmcuTWF0aDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc2luay9NZWRpYUVuY29kZXJGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zaW5rL01lZGlhRW5jb2RlckZpbHRlci5qYXZhCmluZGV4IDhiYjY1M2IuLmQwMzQwNTEgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zaW5rL01lZGlhRW5jb2RlckZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zaW5rL01lZGlhRW5jb2RlckZpbHRlci5qYXZhCkBAIC0xNywzMiArMTcsMjMgQEAKIAogcGFja2FnZSBhbmRyb2lkLmZpbHRlcnBhY2tzLnZpZGVvc2luazsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaW5hbFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZ2VvbWV0cnkuUG9pbnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5nZW9tZXRyeS5RdWFkOwotaW1wb3J0IGFuZHJvaWQub3MuQ29uZGl0aW9uVmFyaWFibGU7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVJlY29yZGVyOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuQ2FtY29yZGVyUHJvZmlsZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR0xFbnZpcm9ubWVudDsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NpbmsvTWVkaWFSZWNvcmRlclN0b3BFeGNlcHRpb24uamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zaW5rL01lZGlhUmVjb3JkZXJTdG9wRXhjZXB0aW9uLmphdmEKaW5kZXggZGJmOTc2OC4uY2U3YThjMSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NpbmsvTWVkaWFSZWNvcmRlclN0b3BFeGNlcHRpb24uamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc2luay9NZWRpYVJlY29yZGVyU3RvcEV4Y2VwdGlvbi5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MudmlkZW9zaW5rOwogCiBpbXBvcnQgamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogLyoqIEBoaWRlICoqLwogcHVibGljIGNsYXNzIE1lZGlhUmVjb3JkZXJTdG9wRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc3JjL0NhbWVyYVNvdXJjZS5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NyYy9DYW1lcmFTb3VyY2UuamF2YQppbmRleCAyYzQ3NGFiLi5kMjYwNjg0IDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc3JjL0NhbWVyYVNvdXJjZS5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zcmMvQ2FtZXJhU291cmNlLmphdmEKQEAgLTE3LDI5ICsxNywyMiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MudmlkZW9zcmM7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhOwotaW1wb3J0IGFuZHJvaWQub3MuQ29uZGl0aW9uVmFyaWFibGU7CiBpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuTWF0cml4OwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NyYy9NZWRpYVNvdXJjZS5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NyYy9NZWRpYVNvdXJjZS5qYXZhCmluZGV4IDBiZTZjNjIuLjUzYTM5YTcgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zcmMvTWVkaWFTb3VyY2UuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc3JjL01lZGlhU291cmNlLmphdmEKQEAgLTIzLDI4ICsyMywyMCBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQ29uZGl0aW9uVmFyaWFibGU7CiBpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuTWF0cml4OwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKIAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zcmMvU3VyZmFjZVRleHR1cmVTb3VyY2UuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zcmMvU3VyZmFjZVRleHR1cmVTb3VyY2UuamF2YQppbmRleCAzN2ZhMjQyLi42NTk1YmFhIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc3JjL1N1cmZhY2VUZXh0dXJlU291cmNlLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NyYy9TdXJmYWNlVGV4dHVyZVNvdXJjZS5qYXZhCkBAIC0xNiwzMSArMTYsMjAgQEAKIAogcGFja2FnZSBhbmRyb2lkLmZpbHRlcnBhY2tzLnZpZGVvc3JjOwogCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaW5hbFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhUGxheWVyOwogaW1wb3J0IGFuZHJvaWQub3MuQ29uZGl0aW9uVmFyaWFibGU7CiBpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuTWF0cml4OwogCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKiA8cD5BIGZpbHRlciB0aGF0IGNvbnZlcnRzIHRleHR1cmVzIGZyb20gYSBTdXJmYWNlVGV4dHVyZSBvYmplY3QgaW50byBmcmFtZXMgZm9yCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc3JjL1N1cmZhY2VUZXh0dXJlVGFyZ2V0LmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc3JjL1N1cmZhY2VUZXh0dXJlVGFyZ2V0LmphdmEKaW5kZXggYjZkOWY5NC4uNWQwMzYyNyAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NyYy9TdXJmYWNlVGV4dHVyZVRhcmdldC5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zcmMvU3VyZmFjZVRleHR1cmVUYXJnZXQuamF2YQpAQCAtMTksMjkgKzE5LDE5IEBACiAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJTdXJmYWNlVmlldzsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaW5hbFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5nZW9tZXRyeS5RdWFkOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZ2VvbWV0cnkuUG9pbnQ7CiAKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKIAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CmRpZmYgLS1naXQgYS9tZWRpYS90ZXN0cy9vbXhqcGVnZGVjb2Rlci9vbXhfanBlZ19kZWNvZGVyLmNwcCBiL21lZGlhL3Rlc3RzL29teGpwZWdkZWNvZGVyL29teF9qcGVnX2RlY29kZXIuY3BwCmluZGV4IDY0MjQ3NDQuLjUzZjA0YmMgMTAwNjQ0Ci0tLSBhL21lZGlhL3Rlc3RzL29teGpwZWdkZWNvZGVyL29teF9qcGVnX2RlY29kZXIuY3BwCisrKyBiL21lZGlhL3Rlc3RzL29teGpwZWdkZWNvZGVyL29teF9qcGVnX2RlY29kZXIuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWV0YURhdGEuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9PTVhDbGllbnQuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9PTVhDb2RlYy5oPgorI2luY2x1ZGUgPFNrSW1hZ2UuaD4KICNpbmNsdWRlIDxTa01hbGxvY1BpeGVsUmVmLmg+CiAKICNpbmNsdWRlICJvbXhfanBlZ19kZWNvZGVyLmgiCkBAIC0xODQsOCArMTg1LDcgQEAKIAogdm9pZCBPbXhKcGVnSW1hZ2VEZWNvZGVyOjpjb25maWdCaXRtYXBTaXplKFNrQml0bWFwKiBibSwgU2tCaXRtYXA6OkNvbmZpZyBwcmVmLAogICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBibS0+c2V0Q29uZmlnKGdldENvbG9yU3BhY2VDb25maWcocHJlZiksIHdpZHRoLCBoZWlnaHQpOwotICAgIGJtLT5zZXRJc09wYXF1ZSh0cnVlKTsKKyAgICBibS0+c2V0Q29uZmlnKGdldENvbG9yU3BhY2VDb25maWcocHJlZiksIHdpZHRoLCBoZWlnaHQsIDAsIGtPcGFxdWVfU2tBbHBoYVR5cGUpOwogfQogCiBTa0JpdG1hcDo6Q29uZmlnIE9teEpwZWdJbWFnZURlY29kZXI6OmdldENvbG9yU3BhY2VDb25maWcoCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjllNmFhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90aXRsZSIgbXNnaWQ9IjgyNzU2MzcyNDIwOTMwMzM0NSI+IlRhbSB5ZWTJmWtsyZltyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4iVGFtIGLJmXJwYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4iQsO8dMO8biBkYXRhbsSxbiBxb8WfdWxtdcWfIG1hc2HDvHN0w7wga29tcMO8dGVyyZkgcmV6ZXJ2IG9sdW5tYXPEsSBzb3LEn3VzdSBnw7ZuZMmZcmlsaWIuIEJ1bmEgaWNhesmZIHZlcm3JmWsgaXN0yZl5aXJzaW5peiBtaT9cblxuxo9nyZlyIGJ1IHNvcsSfdW51IGfDtm5kyZlybcmZbWlzaW5penPJmSwgYnUgcHJvc2VzaW4gZGF2YW0gZXRtyZlzaW7JmSBpY2F6yZkgdmVybcmZeWluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI0MjE3MjI4NzQ3NzY5NjQ0MDY4Ij4iTcmZbHVtYXRsYXLEsW3EsSB5ZWTJmWtsyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2MDA5MTE5MTE1NTgxMDk3NzA4Ij4iUmV6ZXJ2IGV0bcmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RleHQiIG1zZ2lkPSI3NDk5ODY2NzI4MDMwNDYxNzc2Ij4iUW/Fn3VsbXXFnyBzdG9sw7xzdMO8IGtvbXDDvHRlcmTJmW4gdGFtIGLJmXJwYSB0yZlsyZliIG9sdW51ci4gQnVuYSBpY2F6yZkgdmVyaWxzaW4/XG5cbkLJmXJwYW7EsSBzaXogw7Z6w7xuw7x6IHTJmWzJmWIgZXRtyZltaXNpbml6c8mZLCBidSDJmW3JmWxpeXlhdMSxIGRhdmFtIGV0ZGlybcmZeWluLiBCdSBjaWhhemRha8SxIGlzdMmZbmlsyZluIG3JmWx1bWF0xLEgZMmZeWnFn2RpcsmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiJNyZlsdW1hdGxhcsSxbcSxIGLJmXJwYSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIxNzI0MzY3MzM0NDUzMTA0Mzc4Ij4iQsmZcnBhIGV0bcmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IkzDvHRmyZluLCBhxZ9hxJ/EsWRhIGNhcmkgeWVkyZlrIHBhcm9sdW51enUgZGF4aWwgZWRpbjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4iTMO8dGbJmW4sIGHFn2HEn8SxZGEgY2loYXogxZ9pZnLJmWzJmW3JmSBwYXJvbHVudSBkYXhpbCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+IkzDvHRmyZluLCBhxZ9hxJ/EsWRhIGNpaGF6IMWfaWZyyZlsyZltyZkgcGFyb2x1bnV6dSBkYXhpbCBlZGluLiBCdSB5ZWTJmWsgYXJ4aXZpbmkgxZ9pZnLJmWzJmW3JmWsgw7zDp8O8biBkyZkgaXN0aWZhZMmZIG9sdW5hY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjQ5ODE1ODU3MTQ3OTUyMzMwOTkiPiJUYW0geWVkyZlrIGRhdGEgxZ9pZnLJmWzJmW3JmWTJmW4gaXN0aWZhZMmZIMO8w6fDvG4gxZ9pZnLJmSBkYXhpbCBlZGluLiDGj2fJmXIgYm/FnyBidXJheMSxbHNhLCBjYXJpIHllZMmZayDFn2lmcsmZIGlzdGlmYWTJmSBvbHVuYWNhcToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IkLDvHTDvG4geWVkyZlrIGRhdGFuxLEgxZ9pZnLJmWzJmW3JmWsgaXN0yZl5aXJzaW5penPJmSwgYcWfYcSfxLFkYSBwYXJvbCBkYXhpbCBlZGluOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI2MTQwODk4NTI1NTgwNzEwODIzIj4iQsmZcnBhIG3JmWx1bWF0bGFyxLEgxZ9pZnLJmWzJmW5pYnPJmSwgxZ9pZnLJmW5pIGHFn2HEn8SxZGEgZGF4aWwgZWRpbjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IlJlemVydiBlZGlsaXIgLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX2VuZGVkIiBtc2dpZD0iMzgxODA4MDc2OTU0ODcyNjQyNCI+IlllZMmZa2zJmW3JmSBzb25hIMOnYXRkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX3N0YXJ0ZWQiIG1zZ2lkPSI3ODgxNjc5MjE4OTcxMjc3Mzg1Ij4iQsmZcnBhIGJhxZ9sYXnEsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX2VuZGVkIiBtc2dpZD0iMTc2NDA0MTYzOTE5OTY5NjEzMiI+IkLJmXJwYSBzb25hIMOnYXRkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+IsaPbcmZbGl5eWF0IHZheHTEsSBiaXRkaSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOWU2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiJUYW0geWVkyZlrbMmZbcmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IlRhbSBiyZlycGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+IkLDvHTDvG4gZGF0YW7EsW4gcW/Fn3VsbXXFnyBtYXNhw7xzdMO8IGtvbXDDvHRlcsmZIHJlemVydiBvbHVubWFzxLEgc29yxJ91c3UgZ8O2bmTJmXJpbGliLiBCdW5hIGljYXrJmSB2ZXJtyZlrIGlzdMmZeWlyc2luaXogbWk/XG5cbsaPZ8mZciBidSBzb3LEn3VudSBnw7ZuZMmZcm3JmW1pc2luaXpzyZksIGJ1IHByb3Nlc2luIGRhdmFtIGV0bcmZc2luyZkgaWNhesmZIHZlcm3JmXlpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+Ik3JmWx1bWF0bGFyxLFtxLEgeWVkyZlrbMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+IlJlemVydiBldG3JmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+IlFvxZ91bG11xZ8gc3RvbMO8c3TDvCBrb21ww7x0ZXJkyZluIHRhbSBiyZlycGEgdMmZbMmZYiBvbHVudXIuIEJ1bmEgaWNhesmZIHZlcmlsc2luP1xuXG5CyZlycGFuxLEgc2l6IMO2esO8bsO8eiB0yZlsyZliIGV0bcmZbWlzaW5penPJmSwgYnUgyZltyZlsaXl5YXTEsSBkYXZhbSBldGRpcm3JmXlpbi4gQnUgY2loYXpkYWvEsSBpc3TJmW5pbMmZbiBtyZlsdW1hdMSxIGTJmXlpxZ9kaXLJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4iTcmZbHVtYXRsYXLEsW3EsSBiyZlycGEgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+IkLJmXJwYSBldG3JmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiJMw7x0ZsmZbiwgYcWfYcSfxLFkYSBjYXJpIHllZMmZayBwYXJvbHVudXp1IGRheGlsIGVkaW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fcmVzdG9yZV90ZXh0IiBtc2dpZD0iMTU3MDg2NDkxNjg1NTIwODk5MiI+IkzDvHRmyZluLCBhxZ9hxJ/EsWRhIGNpaGF6IMWfaWZyyZlsyZltyZkgcGFyb2x1bnUgZGF4aWwgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiJMw7x0ZsmZbiwgYcWfYcSfxLFkYSBjaWhheiDFn2lmcsmZbMmZbcmZIHBhcm9sdW51enUgZGF4aWwgZWRpbi4gQnUgeWVkyZlrIGFyeGl2aW5pIMWfaWZyyZlsyZltyZlrIMO8w6fDvG4gZMmZIGlzdGlmYWTJmSBvbHVuYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4iVGFtIHllZMmZayBkYXRhIMWfaWZyyZlsyZltyZlkyZluIGlzdGlmYWTJmSDDvMOnw7xuIMWfaWZyyZkgZGF4aWwgZWRpbi4gxo9nyZlyIGJvxZ8gYnVyYXjEsWxzYSwgY2FyaSB5ZWTJmWsgxZ9pZnLJmSBpc3RpZmFkyZkgb2x1bmFjYXE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF9vcHRpb25hbCIgbXNnaWQ9IjEzNTAxMzczNDU5MDc1NzkzMDYiPiJCw7x0w7xuIHllZMmZayBkYXRhbsSxIMWfaWZyyZlsyZltyZlrIGlzdMmZeWlyc2luaXpzyZksIGHFn2HEn8SxZGEgcGFyb2wgZGF4aWwgZWRpbjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IkLJmXJwYSBtyZlsdW1hdGxhcsSxIMWfaWZyyZlsyZluaWJzyZksIMWfaWZyyZluaSBhxZ9hxJ/EsWRhIGRheGlsIGVkaW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiJSZXplcnYgZWRpbGlyIC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiJZZWTJmWtsyZltyZkgc29uYSDDp2F0ZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IkLJmXJwYSBiYcWfbGF5xLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiJCyZlycGEgc29uYSDDp2F0ZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiLGj23JmWxpeXlhdCB2YXh0xLEgYml0ZGkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg4MDQxYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gIAotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90aXRsZSIgbXNnaWQ9IjgyNzU2MzcyNDIwOTMwMzM0NSI+ItCf0L7RntC90LDQtSDRgNGN0LfQtdGA0LLQvtCy0LDQtSDQutCw0L/RltGP0LLQsNC90L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90aXRsZSIgbXNnaWQ9IjU0NjkzNjU4MDk1Njc0ODY2MDIiPiLQn9C+0Z7QvdCw0LUg0LDQtNC90LDRntC70LXQvdC90LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+ItCR0YvQu9C+INC/0YDQsNC/0LDQvdCw0LLQsNC90LAg0L/QvtGe0L3QsNC1INGA0Y3Qt9C10YDQstC+0LLQsNC1INC60LDQv9GW0Y/QstCw0L3QvdC1INGe0YHRltGFINC00LDQtNC30LXQvdGL0YUg0L3QsCDQv9Cw0LTQu9GD0YfQsNC90YvQvCDQvdCw0YHRgtC+0LvRjNC90YvQvCDQutCw0LzQv9GD0YLQsNGA0YsuINCU0LDQt9Cy0L7Qu9GW0YbRjCDQs9GN0YLQsD9cblxu0JrQsNC70ZYg0LLRiyDRgdCw0LzRliDQvdC1INC30LDQv9GL0YLQstCw0LvRliDRgNGN0LfQtdGA0LLQvtCy0LDQtSDQutCw0L9p0Y/QstCw0L3QvdC1LCDRgdC/0YvQvWnRhtC1INCw0L/QtdGA0LDRhtGL0Y4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiLQoNGN0LfQtdGA0LLQvtCy0LDQtSDQutCw0L/RltGP0LLQsNC90L3QtSDQtNCw0LTQt9C10L3Ri9GFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+ItCd0LUg0YHRgtCy0LDRgNCw0YbRjCDRgNGN0LfQtdGA0LLQvtCy0YvRjyDQutC+0L/RltGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RleHQiIG1zZ2lkPSI3NDk5ODY2NzI4MDMwNDYxNzc2Ij4i0JfQsNC/0YvRgtCw0L3QsCDQv9C+0Z7QvdCw0LUg0LDQtNC90LDRntC70LXQvdC90LUg0Z7RgdGW0YUg0LTQsNC00LfQtdC90YvRhSDQtyDQv9Cw0LTQu9GD0YfQsNC90LDQs9CwINC90LDRgdGC0L7Qu9GM0L3QsNCz0LAg0LrQsNC80L/Rg9GC0LDRgNCwLiDQlNCw0LfQstC+0LvRltGG0Ywg0LPRjdGC0LA/XG5cbtCa0LDQu9GWINCy0Ysg0YHQsNC80ZYg0L3QtSDQt9Cw0L/Ri9GC0LLQsNC70ZYg0LDQtNC90LDRntC70LXQvdC90LUsINC90LUg0LTQsNC30LLQsNC70Y/QudGG0LUg0L/RgNCw0YbRj9Cz0LLQsNGG0Ywg0LDQv9C10YDQsNGG0YvRji4g0JPRjdGC0LAg0L/RgNGL0LLRj9C00LfQtSDQtNCwINC30LDQvNC10L3RiyDRj9C60ZbRhS3QvdC10LHRg9C00LfRjCDQtNCw0LTQt9C10L3Ri9GFLCDRj9C60ZbRjyDQt9Cw0YDQsNC3INC30L3QsNGF0L7QtNC30Y/RhtGG0LAg0L3QsCDQv9GA0YvQu9Cw0LTQt9C1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsbG93X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzA4MTI4Njc1MjI3NzEyNzgyNyI+ItCQ0LTQvdCw0LLRltGG0Ywg0LzQsNC1INC00LDQtNC30LXQvdGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+ItCd0LUg0LDQtNC90LDRntC70Y/RhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+ItCj0LLRj9C00LfRltGG0LUg0LLQsNGIINCx0Y/Qs9GD0YfRiyDQv9Cw0YDQvtC70Ywg0YDRjdC30LXRgNCy0L7QstCw0LPQsCDQutCw0L/RltGP0LLQsNC90L3RjyDQvdGW0LbRjdC5OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiLQo9Cy0Y/QtNC30ZbRhtC1INC9adC20Y3QuSDQv9Cw0YDQvtC70Ywg0LTQu9GPINGA0LDRgdGI0YvRhNGA0LDQstCw0L3QvdGPINC/0YDRi9C70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+ItCj0LLRj9C00LfRltGG0LUg0L/QsNGA0L7Qu9GMINC00LvRjyDRgNCw0YHRiNGL0YTRgNCw0LLQsNC90L3RjyDQv9GA0YvQu9Cw0LTRiy4g0IHQvSDRgtCw0LrRgdCw0LzQsCDQsdGD0LTQt9C1INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0YbQsCDQtNC70Y8g0YDQsNGB0YjRi9GE0YDQsNCy0LDQvdC90Y8g0YDRjdC30LXRgNCy0L7QstCw0Lkg0LrQvtC/0ZbRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4i0KPQstGP0LTQt9GW0YbQtSDQv9Cw0YDQvtC70YwsINGP0LrRliDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDQtdGG0YbQsCDQtNC70Y8g0YjRi9GE0YDQsNCy0LDQvdC90Y8g0Z7RgdGW0YUg0LTQsNC00LfQtdC90YvRhSDRgNGN0LfQtdGA0LLQvtCy0LDQs9CwINC60LDQv9GW0Y/QstCw0L3QvdGPLiDQmtCw0LvRliDQs9GN0YLQsNC1INC/0L7Qu9C1INC/0LDQutGW0L3Rg9GG0Ywg0L/Rg9GB0YLRi9C8LCDQsdGD0LTQt9C1INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0YbQsCDQsdGP0LPRg9GH0Ysg0L/QsNGA0L7Qu9GMINGA0Y3Qt9C10YDQstC+0LLQsNCz0LAg0LrQsNC/0ZbRj9Cy0LDQvdC90Y86Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF9vcHRpb25hbCIgbXNnaWQ9IjEzNTAxMzczNDU5MDc1NzkzMDYiPiLQmtCw0LvRliDQstGLINC20LDQtNCw0LXRhtC1INC30LDRiNGL0YTRgNCw0LLQsNGG0Ywg0YPRgdC1INC00LDQtNC30LXQvdGL0Y8g0YDRjdC30LXRgNCy0L7QstCw0LPQsCDQutCw0L/RltGP0LLQsNC90L3Rjywg0YPQstGP0LTQt9GW0YbQtSDQv9Cw0YDQvtC70Ywg0L3RltC20Y3QuToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+ItCa0LDQu9GWINC00LDQtNC30LXQvdGL0Y8g0LTQu9GPINCw0LTQvdCw0Z7Qu9C10L3QvdGPINC30LDRiNGL0YTRgNCw0LLQsNC90YvRjywg0YPQstGP0LTQt9GW0YbQtSDQv9Cw0YDQvtC70Ywg0L3RltC20Y3QuToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+ItCg0Y3Qt9C10YDQstC+0LLQsNC1INC60LDQv9GW0Y/QstCw0L3QvdC1Li4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX2VuZGVkIiBtc2dpZD0iMzgxODA4MDc2OTU0ODcyNjQyNCI+ItCg0Y3Qt9C10YDQstC+0LLQsNC1INC60LDQv9GW0Y/QstCw0L3QvdC1INGB0LrQvtC90YfRi9C70LDRgdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+ItCf0LDRh9GL0L3QsNC10YbRhtCwINCw0LTQvdCw0Z7Qu9C10L3QvdC1Li4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiLQkNC00L3QsNGe0LvQtdC90L3QtSDRgdC60L7QvdGH0YvQu9Cw0YHRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3RpbWVvdXQiIG1zZ2lkPSI1Mjc2NTk4NTg3MDg3NjI2ODc3Ij4i0KLQsNC50Lwt0LDRntGCINCw0L/QtdGA0LDRhtGL0ZYiPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOTZkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4iRnVsbCBiYWNrdXAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4iRnVsbCByZXN0b3JhdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4iQSBmdWxsIGJhY2t1cCBvZiBhbGwgZGF0YSB0byBhIGNvbm5lY3RlZCBkZXNrdG9wIGNvbXB1dGVyIGhhcyBiZWVuIHJlcXVlc3RlZC4gRG8geW91IHdhbnQgdG8gYWxsb3cgdGhpcyB0byBoYXBwZW4/XG5cbklmIHlvdSBkaWQgbm90IHJlcXVlc3QgdGhlIGJhY2t1cCB5b3Vyc2VsZiwgZG8gbm90IGFsbG93IHRoZSBvcGVyYXRpb24gdG8gcHJvY2VlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+IkJhY2sgdXAgbXkgZGF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiJEbyBub3QgYmFjayB1cCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+IkEgZnVsbCByZXN0b3JlIG9mIGFsbCBkYXRhIGZyb20gYSBjb25uZWN0ZWQgZGVza3RvcCBjb21wdXRlciBoYXMgYmVlbiByZXF1ZXN0ZWQuIERvIHlvdSB3YW50IHRvIGFsbG93IHRoaXMgdG8gaGFwcGVuP1xuXG5JZiB5b3UgZGlkIG5vdCByZXF1ZXN0IHRoZSByZXN0b3JlIHlvdXJzZWxmLCBkbyBub3QgYWxsb3cgdGhlIG9wZXJhdGlvbiB0byBwcm9jZWVkLiBUaGlzIHdpbGwgcmVwbGFjZSBhbnkgZGF0YSBjdXJyZW50bHkgb24gdGhlIGRldmljZSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiJSZXN0b3JlIG15IGRhdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+IkRvIG5vdCByZXN0b3JlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IlBsZWFzZSBlbnRlciB5b3VyIGN1cnJlbnQgYmFja3VwIHBhc3N3b3JkIGJlbG93OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiJQbGVhc2UgZW50ZXIgeW91ciBkZXZpY2UgZW5jcnlwdGlvbiBwYXNzd29yZCBiZWxvdy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiJQbGVhc2UgZW50ZXIgeW91ciBkZXZpY2UgZW5jcnlwdGlvbiBwYXNzd29yZCBiZWxvdy4gVGhpcyB3aWxsIGFsc28gYmUgdXNlZCB0byBlbmNyeXB0IHRoZSBiYWNrdXAgYXJjaGl2ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4iUGxlYXNlIGVudGVyIGEgcGFzc3dvcmQgdG8gdXNlIGZvciBlbmNyeXB0aW5nIHRoZSBmdWxsIGJhY2t1cCBkYXRhLiBJZiB0aGlzIGlzIGxlZnQgYmxhbmssIHlvdXIgY3VycmVudCBiYWNrdXAgcGFzc3dvcmQgd2lsbCBiZSB1c2VkOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4iSWYgeW91IHdpc2ggdG8gZW5jcnlwdCB0aGUgZnVsbCBiYWNrdXAgZGF0YSwgZW50ZXIgYSBwYXNzd29yZCBiZWxvdzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IklmIHRoZSByZXN0b3JlIGRhdGEgaXMgZW5jcnlwdGVkLCBwbGVhc2UgZW50ZXIgdGhlIHBhc3N3b3JkIGJlbG93OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9zdGFydGVkIiBtc2dpZD0iNTUwMzU0MjgxNDUyNzU2MTIxIj4iQmFja3VwIHN0YXJ0aW5nLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX2VuZGVkIiBtc2dpZD0iMzgxODA4MDc2OTU0ODcyNjQyNCI+IkJhY2t1cCBmaW5pc2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfc3RhcnRlZCIgbXNnaWQ9Ijc4ODE2NzkyMTg5NzEyNzczODUiPiJSZXN0b3JhdGlvbiBzdGFydGluZy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfZW5kZWQiIG1zZ2lkPSIxNzY0MDQxNjM5MTk5Njk2MTMyIj4iUmVzdG9yYXRpb24gZW5kZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+Ik9wZXJhdGlvbiB0aW1lZCBvdXQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MGZiNQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiJTYXV2ZWdhcmRlIGNvbXBsw6h0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90aXRsZSIgbXNnaWQ9IjU0NjkzNjU4MDk1Njc0ODY2MDIiPiJSZXN0YXVyYXRpb24gY29tcGzDqHRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiJWb3VzIGF2ZXogZGVtYW5kw6kgdW5lIHNhdXZlZ2FyZGUgY29tcGzDqHRlIGRlIGxcJ2Vuc2VtYmxlIGRlcyBkb25uw6llcyB2ZXJzIHVuIG9yZGluYXRldXIgZGUgYnVyZWF1IGNvbm5lY3TDqS4gVm91bGV6LXZvdXMgbFwnYXV0b3Jpc2VyP1xuXG5TaSB2b3VzIG5cJ2F2ZXogcGFzIGRlbWFuZMOpIGxhIHNhdXZlZ2FyZGUgdm91cy1tw6ptZSwgblwnYXV0b3Jpc2V6IHBhcyBsYSBwb3Vyc3VpdGUgZGUgbFwnb3DDqXJhdGlvbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+IlNhdXZlZ2FyZGVyIG1lcyBkb25uw6llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiJOZSBwYXMgc2F1dmVnYXJkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiJWb3VzIGF2ZXogZGVtYW5kw6kgdW5lIHJlc3RhdXJhdGlvbiBjb21wbMOodGUgZGUgbFwnZW5zZW1ibGUgZGVzIGRvbm7DqWVzIMOgIHBhcnRpciBkXCd1biBvcmRpbmF0ZXVyIGRlIGJ1cmVhdSBjb25uZWN0w6kuIFZvdWxlei12b3VzIGxcJ2F1dG9yaXNlcj9cblxuU2kgdm91cyBuXCdhdmV6IHBhcyBkZW1hbmTDqSB2b3VzLW3Dqm1lIGxhIHJlc3RhdXJhdGlvbiwgblwnYXV0b3Jpc2V6IHBhcyBzYSBwb3Vyc3VpdGUuIENldHRlIG9ww6lyYXRpb24gcmVtcGxhY2VyYSB0b3V0ZXMgbGVzIGRvbm7DqWVzIGFjdHVlbGxlbWVudCBzdXIgbFwnYXBwYXJlaWwhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4iUmVzdGF1cmVyIG1lcyBkb25uw6llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIxNzI0MzY3MzM0NDUzMTA0Mzc4Ij4iTmUgcGFzIHJlc3RhdXJlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiJWZXVpbGxleiBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlIGRlIHNhdXZlZ2FyZGUgYWN0dWVsIGNpLWRlc3NvdXPCoDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4iVmV1aWxsZXogc2Fpc2lyIGxlIG1vdCBkZSBwYXNzZSBkZSBjaGlmZnJlbWVudCBkZSBsXCdhcHBhcmVpbCBjaS1kZXNzb3VzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+IlZldWlsbGV6IHNhaXNpciBsZSBtb3QgZGUgcGFzc2UgZGUgY2hpZmZyZW1lbnQgZGUgbFwnYXBwYXJlaWwgY2ktZGVzc291cy4gSWwgcGVybWV0dHJhIMOpZ2FsZW1lbnQgZGUgY2hpZmZyZXIgbGVzIGFyY2hpdmVzIGRlIHNhdXZlZ2FyZGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IlZldWlsbGV6IHNhaXNpciB1biBtb3QgZGUgcGFzc2Ugw6AgdXRpbGlzZXIgcG91ciBjaGlmZnJlciBsZXMgZG9ubsOpZXMgZGUgc2F1dmVnYXJkZSBjb21wbMOodGUuIFNpIGNlIGNoYW1wIG5cJ2VzdCBwYXMgcmVuc2VpZ27DqSwgdm90cmUgbW90IGRlIHBhc3NlIGRlIHNhdXZlZ2FyZGUgYWN0dWVsIHNlcmEgdXRpbGlzw6nCoDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IlNpIHZvdXMgc291aGFpdGV6IGNoaWZmcmVyIGxcJ2Vuc2VtYmxlIGRlcyBkb25uw6llcyBkZSBzYXV2ZWdhcmRlLCB2ZXVpbGxleiBzYWlzaXIgdW4gbW90IGRlIHBhc3NlIGNpLWRlc3NvdXPCoDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IlNpIGxlcyBkb25uw6llcyBkZSByZXN0YXVyYXRpb24gc29udCBjaGlmZnLDqWVzLCB2ZXVpbGxleiBzYWlzaXIgbGUgbW90IGRlIHBhc3NlIGNpLWRlc3NvdXPCoDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IkTDqW1hcnJhZ2UgZGUgbGEgc2F1dmVnYXJkZeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiJTYXV2ZWdhcmRlIHRlcm1pbsOpZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX3N0YXJ0ZWQiIG1zZ2lkPSI3ODgxNjc5MjE4OTcxMjc3Mzg1Ij4iRMOpbWFycmFnZSBkZSBsYSByZXN0YXVyYXRpb27igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX2VuZGVkIiBtc2dpZD0iMTc2NDA0MTYzOTE5OTY5NjEzMiI+IlJlc3RhdXJhdGlvbiB0ZXJtaW7DqWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiJMXCdvcMOpcmF0aW9uIGEgZXhwaXLDqS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAppbmRleCBkZDBjNjQ1Li4wYjI5ODA0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCkBAIC0xNiwyMiArMTYsMjIgQEAKIAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLgpKrgpYLgpLDgpY3gpKMg4KSs4KWI4KSV4KSF4KSqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLgpKrgpYLgpLDgpY3gpKMg4KS44KWB4KSw4KSV4KWN4KS34KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IuCkquClguCksOCljeCkoyDgpKrgpYHgpKjgpLDgpY3gpLjgpY3igI3gpKXgpL7gpKrgpKjgpL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+IuCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpL/igI3gpI8g4KSX4KSPIOCkoeClh+CkuOCljeKAjeCkleCkn+ClieCkqiDgpJXgpILgpKrgpY3igI3gpK/gpYLgpJ/gpLAg4KS44KWHIOCkuOCkreClgCDgpKHgpYfgpJ/gpL4g4KSV4KWHIOCkuOCkguCkquClguCksOCljeCkoyDgpKzgpYjgpJXgpIXgpKog4KSV4KS+IOCkheCkqOClgeCksOCli+CkpyDgpJXgpL/igI3gpK/gpL4g4KSX4KSv4KS+IOCkueCliC4g4KSV4KWN4oCN4KSv4KS+IOCkhuCkqiDgpIfgpLjgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/4oCNIOCkpuClh+CkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCP1xuXG7gpK/gpKbgpL/igI0g4KSG4KSq4KSo4KWHIOCkuOCljeKAjeCkteCkr+CkgiDgpKzgpYjgpJXgpIXgpKog4KSV4KS+IOCkheCkqOClgeCksOCli+CkpyDgpKjgpLngpYDgpIIg4KSV4KS/4oCN4KSv4KS+IOCkueCliCwg4KSk4KWLIOCkquCljeCksOCkleCljeCksOCkv+KAjeCkr+CkviDgpJzgpL7gpLDgpYAg4KSw4KSW4KSo4KWHIOCkleClgCDgpIXgpKjgpYHgpK7gpKTgpL/igI0g4KSoIOCkpuClh+Ckgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+IuCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpL/igI3gpI8g4KSX4KSPIOCkoeClh+CkuOCljeKAjeCkleCkn+ClieCkqiDgpJXgpILgpKrgpY3igI3gpK/gpYLgpJ/gpLAg4KS44KWHIOCkuOCkreClgCDgpKHgpYfgpJ/gpL4g4KSV4KWHIOCkuOCkguCkquClguCksOCljeCkoyDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSV4KS+IOCkheCkqOClgeCksOCli+CkpyDgpJXgpL/igI3gpK/gpL4g4KSX4KSv4KS+IOCkueCliC4g4KSV4KWN4oCN4KSv4KS+IOCkhuCkqiDgpIfgpLjgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/4oCNIOCkpuClh+CkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCP1xuXG7gpK/gpKbgpL/igI0g4KSG4KSq4KSo4KWHIOCkuOCljeKAjeCkteCkr+CkgiDgpKzgpYjgpJXgpIXgpKog4KSV4KS+IOCkheCkqOClgeCksOCli+CkpyDgpKjgpLngpYDgpIIg4KSV4KS/4oCN4KSv4KS+IOCkueCliCwg4KSk4KWLIOCkquCljeCksOCkleCljeCksOCkv+KAjeCkr+CkviDgpJzgpL7gpLDgpYAg4KSw4KSW4KSo4KWHIOCkleClgCDgpIXgpKjgpYHgpK7gpKTgpL/igI0g4KSoIOCkpuClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+IuCkruClh+CksOClhyDgpKHgpYfgpJ/gpL4g4KSV4KS+IOCkrOCliOCkleCkheCkqiDgpLLgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZW55X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2MDA5MTE5MTE1NTgxMDk3NzA4Ij4i4KSs4KWI4KSV4KSF4KSqIOCkqCDgpLLgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiLgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSV4KS/4oCN4KSPIOCkl+CkjyDgpKHgpYfgpLjgpY3igI3gpJXgpJ/gpYngpKog4KSV4KSC4KSq4KWN4oCN4KSv4KWC4KSf4KSwIOCkuOClhyDgpLjgpK3gpYAg4KSh4KWH4KSf4KS+IOCkleClgCDgpKrgpYLgpLDgpY3gpKMg4KSq4KWB4KSo4KSw4KWN4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkleCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSV4KS/4oCN4KSv4KS+IOCkl+Ckr+CkviDgpLngpYguIOCkleCljeKAjeCkr+CkviDgpIbgpKog4KSH4KS44KSV4KWAIOCkheCkqOClgeCkruCkpOCkv+KAjSDgpKbgpYfgpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkgj9cblxu4KSv4KSm4KS/4oCNIOCkhuCkquCkqOClhyDgpLjgpY3igI3gpLXgpK/gpIIg4KSq4KWB4KSo4KSw4KWN4KSq4KWN4KSw4KS+4KSq4KWN4KSk4KS/4oCNIOCkleCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSo4KS54KWA4KSCIOCkleCkv+KAjeCkr+CkviDgpLngpYgsIOCkpOCliyDgpKrgpY3gpLDgpJXgpY3gpLDgpL/igI3gpK/gpL4g4KSc4KS+4KSw4KWAIOCksOCkluCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/4oCNIOCkqCDgpKbgpYfgpIIuIOCkh+CkuOCkuOClhyDgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSu4KWH4KSCIOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkruCljOCknOClguCkpiDgpKHgpYfgpJ/gpL4g4KSs4KSm4KSyIOCknOCkvuCkj+Ckl+CkviEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiLgpK7gpYfgpLDgpL4g4KSh4KWH4KSf4KS+IOCkquClgeCkqOCksOCljeCkuOCljeCkpeCkvuCkquCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+IuCkquClgeCkqOCksOCljeCkuOCljeKAjeCkpeCkvuCkquCkv+CkpCDgpKgg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IuCkleClg+CkquCkr+CkviDgpKjgpYDgpJrgpYcg4KSF4KSq4KSo4KS+IOCkteCksOCljeCkpOCkruCkvuCkqCDgpKzgpYjgpJXgpIXgpKog4KSq4KS+4KS44KS14KSw4KWN4KShIOCkoeCkvuCksuClh+CkgjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjdXJyZW50X3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI4MjY4MTg5NTU1NTc4Mjk4MDY3Ij4i4KSV4KWD4KSq4KSv4KS+IOCkqOClgOCkmuClhyDgpIXgpKrgpKjgpL4g4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KS+IOCkquCkvuCkuOCkteCksOCljeCkoSDgpKHgpL7gpLLgpYfgpII6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fcmVzdG9yZV90ZXh0IiBtc2dpZD0iMTU3MDg2NDkxNjg1NTIwODk5MiI+IuCkleClg+CkquCkr+CkviDgpKjgpYDgpJrgpYcg4KSF4KSq4KSo4KS+IOCkieCkquCkleCksOCkoyDgpI/gpKjgpY3igI3gpJXgpY3gpLDgpL/gpKrgpY3gpLbgpKgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkoeCkvuCksuClh+Ckgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiLgpJXgpYPgpKrgpK/gpL4g4KSF4KSq4KSo4KS+IOCkieCkquCkleCksOCkoyDgpI/gpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpLbgpKgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkqOClgOCkmuClhyDgpKbgpLDgpY3gpJwg4KSV4KSw4KWH4KSCLiDgpKzgpYjgpJXgpIXgpKog4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkleCliyDgpI/gpKjgpY3igI3gpJXgpY3gpLDgpL/gpKrgpY3igI3gpJ8g4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSt4KWAIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KS/4KSv4KS+IOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4i4KSV4KWD4KSq4KSv4KS+IOCkuOCkguCkquClguCksOCljeCkoyDgpKzgpYjgpJXgpIXgpKog4KSh4KWH4KSf4KS+IOCkleCliyDgpI/gpKjgpY3igI3gpJXgpY3gpLDgpL/igI3gpKrgpY3igI3gpJ8g4KSV4KSw4KSo4KWHIOCkruClh+CkgiDgpIngpKrgpK/gpYvgpJcg4KSV4KWHIOCksuCkv+KAjeCkjyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSh4KS+4KSy4KWH4KSCLiDgpK/gpKbgpL/igI0g4KSv4KS5IOCkluCkvuCksuClgCDgpJvgpYvgpKHgpLwg4KSm4KS/4oCN4KSv4KS+IOCknOCkvuCkpOCkviDgpLngpYgsIOCkpOCliyDgpIbgpKrgpJXgpYcg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkrOCliOCkleCkheCkqiDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpL/igI3gpK/gpL4g4KSc4KS+4KSP4KSX4KS+OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4i4KSv4KSm4KS/4oCNIOCkhuCkqiDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KSs4KWI4KSV4KSF4KSqIOCkoeClh+Ckn+CkviDgpI/gpKjgpY3igI3gpJXgpY3gpLDgpL/igI3gpKrgpY3igI3gpJ8g4KSV4KSw4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpIIsIOCkpOCliyDgpKjgpYDgpJrgpYcg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkoeCkvuCksuClh+CkgjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiLgpJXgpYPgpKrgpK/gpL4g4KSF4KSq4KSo4KS+IOCkieCkquCkleCksOCkoyDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSk4KSw4KWA4KSV4KS+IOCkquCkvuCkuOCkteCksOCljeCkoSDgpKjgpYDgpJrgpYcg4KSm4KSw4KWN4KScIOCkleCksOClh+Ckgi4g4KSs4KWI4KSV4KSF4KSqIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpYsg4KSP4KSo4KWN4oCN4KSV4KWN4KSw4KS/4KSq4KWN4oCN4KSfIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkreClgCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+Ckr+CkviDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IuCkleClg+CkquCkr+CkviDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkoeClh+Ckn+CkviDgpJXgpYsg4KSP4KSo4KWN4oCN4KSV4KWN4KSw4KS/4oCN4KSq4KWN4oCN4KSfIOCkleCksOCkqOClhyDgpK7gpYfgpIIg4KSJ4KSq4KSv4KWL4KSXIOCkleClhyDgpLLgpL/igI3gpI8g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkoeCkvuCksuClh+Ckgi4g4KSv4KSm4KS/4oCNIOCkr+CkuSDgpJbgpL7gpLLgpYAg4KSb4KWL4KSh4KS8IOCkpuCkv+KAjeCkr+CkviDgpJzgpL7gpKTgpL4g4KS54KWILCDgpKTgpYsg4KSG4KSq4KSV4KWHIOCkteCksOCljeCkpOCkruCkvuCkqCDgpKzgpYjgpJXgpIXgpKog4KSq4KS+4KS44KS14KSw4KWN4KShIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KS/4oCN4KSv4KS+IOCknOCkvuCkj+Ckl+CkvjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IuCkr+CkpuCkv+KAjSDgpIbgpKog4KS44KSC4KSq4KWC4KSw4KWN4KSjIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkj+CkqOCljeKAjeCkleCljeCksOCkv+KAjeCkquCljeKAjeCknyDgpJXgpLDgpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkgiwg4KSk4KWLIOCkqOClgOCkmuClhyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSh4KS+4KSy4KWH4KSCOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI2MTQwODk4NTI1NTgwNzEwODIzIj4i4KSv4KSm4KS/4oCNIOCkquClgeCkqOCksOCljeCkuOCljeCkpeCkvuCkquCkv+CkpCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkj+CkqOCljeKAjeCkleCljeCksOCkv+KAjeCkquCljeKAjeCknyDgpJXgpL/igI3gpK/gpL4g4KSX4KSv4KS+IOCkueCliCwg4KSk4KWLIOCkleClg+CkquCkr+CkviDgpKjgpYDgpJrgpYcg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkoeCkvuCksuClh+CkgjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IuCkrOCliOCkleCkheCkqiDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KS54KWLIOCksOCkueCkviDgpLngpYguLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4i4KSs4KWI4KSV4KSF4KSqIOCkquClguCksOCljeCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9zdGFydGVkIiBtc2dpZD0iNTUwMzU0MjgxNDUyNzU2MTIxIj4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkleCksOCkqOCkviDgpLbgpYHgpLDgpYEg4KS54KWLIOCksOCkueCkviDgpLngpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkleCksOCkqOCkviDgpKrgpYLgpLDgpY3gpKMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX3N0YXJ0ZWQiIG1zZ2lkPSI3ODgxNjc5MjE4OTcxMjc3Mzg1Ij4i4KSq4KWB4KSo4KSw4KWN4KS44KWN4oCN4KSl4KS+4KSq4KSo4KS+IOCkquCljeCksOCkvuCksOCkguCkrSDgpLngpYsg4KSw4KS54KWAIOCkueCliC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfZW5kZWQiIG1zZ2lkPSIxNzY0MDQxNjM5MTk5Njk2MTMyIj4i4KSq4KWB4KSo4KSw4KWN4KS44KWN4oCN4KSl4KS+4KSq4KSo4KS+IOCkuOCkruCkvuCkquCljeCkpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3RpbWVvdXQiIG1zZ2lkPSI1Mjc2NTk4NTg3MDg3NjI2ODc3Ij4i4KSV4KS+4KSw4KWN4KSv4KS14KS+4KS54KWAIOCkuOCkruCkr+CkrOCkvuCkueCljeCkryDgpLngpYsg4KSX4KSIIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiOTA4MAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLUsdW01aLVuNWy1bvVodWv1aHVtiDVutWh1bDVuNaC1b3Vv9Wh1b7VuNaA1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+ItSx1bTVotW41bLVu9Wh1a/VodW2INW+1aXWgNWh1a/VodW21aPVttW41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4i1L/VodW61aHVr9aB1b7VodWuINWh1bfVrdWh1b/VodW91aXVstWh1bbVuNW+INWw1aHVtNWh1a/VodaA1aPVudWrINW+1oDVoSDVotW41azVuNaAINW/1b7VtdWh1azVttWl1oDVqyDVrNaA1avVviDVutWh1bDVuNaC1b3Vv9Wh1b7VuNaA1bTVodW2INWw1aHWgNaB1bjWgtW0INWnINWh1oDVvtWl1aw6INWR1aHVttWv1aHVttW41oLVntW0INWl1oQg1anVuNaC1bXVrNWh1b/WgNWl1awg1bDVodaA1oHVtNWh1bYg1a/VodW/1aHWgNW41oLVtNWoOlxuXG7UtdWp1aUg1aTVuNaC1oQg1avVttaE1bbVpdaA1aQg1brVodWw1bjWgtW91b/VodW+1bjWgNW01aHVtiDVsNWh1oDWgdW41oLVtCDVudWl1oQg1aHWgNWl1awsINWp1bjWgtW11awg1bTVqyDVv9W+1aXWhCwg1bjWgNW61aXVvdWm1asg1aPVuNaA1a7VuNWy1bjWgtWp1bXVuNaC1bbVqCDVt9Wh1oDVuNaC1bbVodWv1b7VqzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+ItWK1aHVsNW41oLVvdW/1aHVvtW41oDVpdWsINWr1bQg1b/VvtW11aHVrNW21aXWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+ItWJ1brVodWw1bjWgtW91b/VodW+1bjWgNWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiLVgNWh1bXWgdW+1aXVrCDVpyDVotW41azVuNaAINW/1b7VtdWh1azVttWl1oDVqyDVodW01aLVuNWy1bvVodWv1aHVtiDVvtWl1oDVodWv1aHVttWj1bbVuNaC1bQg1bTVq9Wh1oHVvtWh1a4g1aHVt9Wt1aHVv9Wh1bbWhNWh1bXVq9W2INWw1aHVtNWh1a/VodaA1aPVudWr1oE6INWR1aHVttWv1aHVttW41oLVntW0INWl1oQg1anVuNaC1bXVrNWh1b/WgNWl1awsINW41oAg1aTVoSDVv9Wl1bLVqyDVuNaC1bbVpdW21aE6XG5cbtS11anVpSDVvtWl1oDVodWv1aHVttWj1bbVuNaC1bTVqCDVq9W21oTVttWl1oDVpCDVudWl1oQg1bDVodW11oHVpdWsLCDVqdW41oJq1awg1bTVqyDVv9W+1aXWhCwg1bjWgCDVo9W41oDVrtW41bLVuNaC1anVtdW41oLVttWoINW31aHWgNW41oLVttWh1a/VvtWrOiDUtNWhINWv1oPVuNWt1aHWgNWr1bbVqyDVttWl1oDVr9Wh1bXVuNaC1bQg1bDVpdW81aHVrdW41b3VqyDVtNWl1bsg1aPVv9W21b7VuNWyINaB1aHVttWv1aHWgdWh1a4g1b/VvtW11aHVrDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiLVjtWl1oDVodWv1aHVttWj1bbVpdWsINWr1bQg1b/VvtW11aHVrNW21aXWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiLVidW+1aXWgNWh1a/VodW21aPVttWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjdXJyZW50X3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI4MjY4MTg5NTU1NTc4Mjk4MDY3Ij4i1L3VttWk1oDVuNaC1bQg1aXVttaEINW01bjWgtW/1oTVodWj1oDVpdWsINWx1aXWgCDVqNW21anVodaB1avVryDVutWh1bDVuNaC1b3Vv9Wh1bXVq9W2INWj1aHVstW/1bbVodWi1aHVvNWoINW21aXWgNaE1ofVuNaC1bRgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fcmVzdG9yZV90ZXh0IiBtc2dpZD0iMTU3MDg2NDkxNjg1NTIwODk5MiI+ItS91bbVpNaA1bjWgtW0INWl1bbWhCDVtNW41oLVv9aE1aHVo9aA1aXVrCDVsdWl1oAg1b3VodaA1oTVqyDVr9W41aTVodW+1bjWgNW+1aHVriDVo9Wh1bLVv9W21aHVotWh1bzVqCDVttWl1oDWhNaH1bjWgtW0OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+ItS91bbVpNaA1bjWgtW0INWl1bbWhCDVtNW41oLVv9aE1aHVo9aA1aXVrCDVsdWl1oAg1b3VodaA1oTVqyDVr9W41aTVodW+1bjWgNW+1aHVriDVo9Wh1bLVv9W21aHVotWh1bzVqCDVttWl1oDWhNaH1bjWgtW0OiDUsdW11bYg1bbVodaHINWv1oXVo9W/1aHVo9W41oDVrtW+1asg1brVodWw1bjWgtW91b/VodW11avVtiDVodaA1a3Vq9W+1asg1a/VuNWk1aHVvtW41oDVtNWh1bYg1bDVodW01aHWgDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4i1L3VttWk1oDVuNaC1bQg1aXVttaEINW01bjWgtW/1oTVodWj1oDVpdWsINWj1aHVstW/1bbVodWi1aHVvNWoYMKg1aHVtNWi1bjVstW71aHVr9Wh1bYg1brVodWw1bjWgtW91b/VodW+1bjWgNW+1bjVsiDVv9W+1bXVodWs1bbVpdaA1agg1a/VuNWk1aHVvtW41oDVpdWs1bjWgiDVsNWh1bTVodaAOiDUtdWp1aUg4oCL4oCL1aHVtdW2INWk1aHVv9Wh1oDVryDVqdW41bLVttWl1oQsINWh1brVoSDVr9aF1aPVv9Wh1aPVuNaA1a7VvtWrINWx1aXWgCDVodW81a/VoSDVutWh1bDVuNaC1b3Vv9Wh1b7VuNaA1bTVodW2INWj1aHVstW/1bbVodWi1aHVvNWoYCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4i1LXVqdWlIOKAi+KAi9aB1aHVttWv1aHVttW41oLVtCDVpdaEINWv1bjVpNWh1b7VuNaA1aXVrCDVodW01aLVuNWy1bvVodWv1aHVtiDVutWh1bDVuNaC1b3Vv9Wh1b7VuNaA1b7VodWuINW/1b7VtdWh1azVttWl1oDVqCwg1bTVuNaC1b/WhNWh1aPWgNWl1oQg1aPVodWy1b/VttWh1aLVodW8INW91b/VuNaA1odgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiLUtdWp1aUg4oCL4oCL1b7VpdaA1aHVr9Wh1bbVo9W21b7VuNWyINW/1b7VtdWh1azVttWl1oDVqCDVr9W41aTVodW+1bjWgNW+1aHVriDVpdW2LCDVrdW21aTWgNW41oLVtCDVpdW21oQg1bTVuNaC1b/WhNWh1aPWgNWl1awg1aPVodWy1b/VttWh1aLVodW81agg1b3Vv9W41oDWh2AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+ItWK1aHVsNW41oLVvdW/1aHVvtW41oDVuNaC1bTVqCDVvdWv1b3VvtW41oLVtCDVpy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiLVitWh1bDVuNaC1b3Vv9Wh1b7VuNaA1bjWgtW01bYg1aHVvtWh1oDVv9W+1aXWgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfc3RhcnRlZCIgbXNnaWQ9Ijc4ODE2NzkyMTg5NzEyNzczODUiPiLVjtWl1oDVodWv1aHVttWj1bbVuNaC1bTVqCDVtNWl1a/VttWh1oDVr9Wl1oEuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX2VuZGVkIiBtc2dpZD0iMTc2NDA0MTYzOTE5OTY5NjEzMiI+ItWO1aXWgNWh1a/VodW21aPVttW41oLVtNW2INWh1b7VodaA1b/VvtWl1oEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+ItSz1bjWgNWu1bjVstW41oLVqdW11aHVtiDVqtWh1bTVodW21aHVr9WoINW91brVodW81b7VpdaBIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzZmNjdlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90aXRsZSIgbXNnaWQ9IjgyNzU2MzcyNDIwOTMwMzM0NSI+IuGDoeGDoOGDo+GDmuGDmCDhg6Hhg5Dhg6Dhg5Thg5bhg5Thg6Dhg5Xhg50g4YOZ4YOd4YOe4YOY4YOg4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IuGDoeGDoOGDo+GDmuGDkOGDkyDhg5Dhg6bhg5Phg5Lhg5Thg5zhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+IuGDm+GDneGDl+GDruGDneGDleGDnOGDmOGDmiDhg5jhg6Xhg5zhg5Ag4YOh4YOQ4YOb4YOQ4YOS4YOY4YOT4YOdIOGDmeGDneGDm+GDnuGDmOGDo+GDouGDlOGDoOGDl+GDkOGDnCDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg6Phg5rhg5gg4YOn4YOV4YOU4YOa4YOQIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDmOGDoSDhg6Hhg6Dhg6Phg5rhg6fhg53hg6Thg5jhg5rhg5gg4YOh4YOQ4YOg4YOU4YOW4YOU4YOg4YOV4YOdIOGDkOGDoeGDmuGDlOGDkeGDmC4gXG5cbuGDl+GDoyDhg6Hhg5Dhg6Dhg5Thg5bhg5Thg6Dhg5Xhg50g4YOQ4YOh4YOa4YOU4YOR4YOYIOGDl+GDpeGDleGDlOGDnCDhg5Dhg6Ag4YOb4YOd4YOS4YOY4YOX4YOu4YOd4YOV4YOY4YOQ4YOXLCDhg5Dhg6Ag4YOT4YOQ4YOj4YOo4YOV4YOQ4YOXIOGDkOGDmyDhg53hg57hg5Thg6Dhg5Dhg6rhg5jhg5jhg6Eg4YOS4YOQ4YOS4YOg4YOr4YOU4YOa4YOU4YOR4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI0MjE3MjI4NzQ3NzY5NjQ0MDY4Ij4i4YOp4YOU4YOb4YOYIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDlOGDkeGDmOGDoSDhg6Hhg5Dhg6Dhg5Thg5bhg5Thg6Dhg5Xhg50g4YOZ4YOd4YOe4YOY4YOg4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+IuGDoeGDkOGDoOGDlOGDluGDlOGDoOGDleGDnSDhg5Dhg6Hhg5rhg5Thg5Hhg5gg4YOQ4YOgIOGDkuGDkOGDkOGDmeGDlOGDl+GDnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+IuGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDo+GDmuGDmCDhg5Phg5Thg6Hhg5nhg6Lhg53hg54g4YOZ4YOd4YOb4YOe4YOY4YOj4YOi4YOU4YOg4YOY4YOT4YOQ4YOcIOGDm+GDneGDruGDk+GDkCDhg6fhg5Xhg5Thg5rhg5Ag4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOY4YOhIOGDoeGDoOGDo+GDmuGDmCDhg5Dhg6bhg5Phg5Lhg5Thg5zhg5jhg6Eg4YOb4YOd4YOX4YOu4YOd4YOV4YOc4YOQLiDhg5Lhg6Hhg6Phg6Dhg5csIOGDk+GDkOGDo+GDqOGDleGDkOGDlyDhg5Thg6E/XG5cbuGDl+GDoyDhg5fhg6Xhg5Xhg5Thg5wg4YOX4YOV4YOY4YOX4YOd4YOcIOGDkOGDoCDhg5vhg53hg5jhg5fhg67hg53hg5Xhg5Thg5cg4YOQ4YOm4YOT4YOS4YOU4YOc4YOQLCDhg5Dhg6Ag4YOT4YOQ4YOj4YOo4YOV4YOQ4YOXIOGDkOGDmyDhg53hg57hg5Thg6Dhg5Dhg6rhg5jhg5jhg6Eg4YOS4YOQ4YOS4YOg4YOr4YOU4YOa4YOU4YOR4YOQLiDhg5jhg6Eg4YOp4YOQ4YOQ4YOc4YOQ4YOq4YOV4YOa4YOU4YOR4YOhIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDkOGDluGDlCDhg5Dhg5vhg5/hg5Dhg5vhg5Dhg5Mg4YOQ4YOg4YOh4YOU4YOR4YOj4YOaIOGDnOGDlOGDkeGDmOGDoeGDm+GDmOGDlOGDoCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg6EhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4i4YOp4YOU4YOb4YOYIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDlOGDkeGDmOGDoSDhg5Dhg6bhg5Phg5Lhg5Thg5zhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+IuGDkOGDoCDhg5Dhg6bhg5Dhg5Phg5Lhg5jhg5zhg50iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjdXJyZW50X3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI4MjY4MTg5NTU1NTc4Mjk4MDY3Ij4i4YOS4YOX4YOu4YOd4YOV4YOXLCDhg6Xhg5Xhg5Thg5vhg53hg5cg4YOb4YOY4YOj4YOX4YOY4YOX4YOd4YOXIOGDl+GDpeGDleGDlOGDnOGDmCDhg5Dhg5vhg5/hg5Dhg5vhg5jhg5zhg5Phg5Thg5rhg5gg4YOh4YOQ4YOX4YOQ4YOT4YOQ4YOg4YOY4YOS4YOdIOGDnuGDkOGDoOGDneGDmuGDmDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4i4YOS4YOX4YOu4YOd4YOV4YOXLCDhg6Xhg5Xhg5Thg5vhg53hg5cg4YOb4YOY4YOj4YOX4YOY4YOX4YOd4YOXIOGDl+GDpeGDleGDlOGDnOGDmCDhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5jhg6Eg4YOT4YOQ4YOo4YOY4YOk4YOV4YOg4YOY4YOhIOGDnuGDkOGDoOGDneGDmuGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiLhg5Lhg5fhg67hg53hg5Xhg5csIOGDpeGDleGDlOGDm+GDneGDlyDhg5vhg5jhg6Phg5fhg5jhg5fhg53hg5cg4YOX4YOl4YOV4YOU4YOc4YOYIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDmOGDoSDhg5Phg5Dhg6jhg5jhg6Thg5Xhg6Dhg5jhg6Eg4YOe4YOQ4YOg4YOd4YOa4YOYLiDhg5Thg6Eg4YOQ4YOh4YOU4YOV4YOUIOGDkuGDkOGDm+GDneGDp+GDlOGDnOGDlOGDkeGDo+GDmuGDmCDhg5jhg6Xhg5zhg5Thg5Hhg5Ag4YOh4YOQ4YOX4YOQ4YOT4YOQ4YOg4YOY4YOS4YOdIOGDkOGDoOGDpeGDmOGDleGDmOGDoSDhg5Phg5Dhg6jhg5jhg6Thg6Dhg5Xhg5jhg6Hhg5Dhg5fhg5Xhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IuGDkuGDl+GDruGDneGDleGDlyDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg53hg5cg4YOn4YOV4YOU4YOa4YOQIOGDoeGDkOGDm+GDkOGDoOGDpeGDkOGDpOGDnSDhg5Dhg6Hhg5rhg5jhg6Eg4YOT4YOQ4YOo4YOY4YOk4YOg4YOV4YOY4YOhIOGDnuGDkOGDoOGDneGDmuGDmC4g4YOX4YOjIOGDkOGDmyDhg5Xhg5Thg5rhg6Eg4YOq4YOQ4YOg4YOY4YOU4YOa4YOhIOGDk+GDkOGDouGDneGDleGDlOGDkeGDlywg4YOS4YOQ4YOb4YOd4YOn4YOU4YOc4YOU4YOR4YOj4YOa4YOYIOGDmOGDpeGDnOGDlOGDkeGDkCDhg5vhg5jhg5vhg5Phg5jhg5zhg5Dhg6Dhg5Qg4YOe4YOQ4YOg4YOd4YOa4YOYOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4i4YOX4YOjIOGDkuGDoeGDo+GDoOGDlyDhg6Hhg6Dhg6Phg5rhg5gg4YOa4YOd4YOZ4YOQ4YOa4YOj4YOg4YOYIOGDoeGDkOGDoOGDlOGDluGDlOGDoOGDleGDnSDhg5nhg53hg57hg5jhg5jhg6Eg4YOT4YOQ4YOo4YOY4YOk4YOg4YOV4YOQLCDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg5Thg5cg4YOe4YOQ4YOg4YOd4YOa4YOYIOGDpeGDleGDlOGDm+GDneGDlzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IuGDl+GDoyDhg5Dhg6bhg6Hhg5Dhg5Phg5Lhg5Thg5zhg5gg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOU4YOR4YOYIOGDk+GDkOGDqOGDmOGDpOGDoOGDo+GDmuGDmOGDkCwg4YOS4YOX4YOu4YOd4YOV4YOXLCDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg53hg5cg4YOe4YOQ4YOg4YOd4YOa4YOYIOGDpeGDleGDlOGDm+GDneGDlzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IuGDkOGDoeGDmuGDlOGDkeGDmOGDoSDhg5vhg53hg5vhg5bhg5Dhg5Phg5Thg5Hhg5Ag4YOY4YOs4YOn4YOU4YOR4YOQLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX2VuZGVkIiBtc2dpZD0iMzgxODA4MDc2OTU0ODcyNjQyNCI+IuGDoeGDkOGDoOGDlOGDluGDlOGDoOGDleGDnSDhg5nhg53hg57hg5jhg6Dhg5Thg5Hhg5Ag4YOT4YOQ4YOh4YOg4YOj4YOa4YOU4YOR4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IuGDkOGDpuGDk+GDkuGDlOGDnOGDkCDhg5jhg6zhg6fhg5Thg5Hhg5AuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX2VuZGVkIiBtc2dpZD0iMTc2NDA0MTYzOTE5OTY5NjEzMiI+IuGDkOGDpuGDk+GDkuGDlOGDnOGDkCDhg5Phg5Dhg6Hhg6Dhg6Phg5rhg5Phg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+IuGDneGDnuGDlOGDoOGDkOGDquGDmOGDmOGDoSDhg5Phg6Dhg53hg5jhg6Eg4YOa4YOY4YOb4YOY4YOi4YOYIOGDkOGDm+GDneGDmOGDrOGDo+GDoOGDkCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2ZmRkNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLhnoDhnrbhnprigIvhnpThnpjhn5LhnprhnrvhnoTigIvhnpHhnrvhnoDigIvhnpbhn4Hhnonhnpvhn4HhnokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4i4Z6f4Z+S4Z6K4Z624Z6a4oCL4Z6h4Z6+4Z6E4Z6c4Z634Z6J4oCL4Z6W4Z+B4Z6J4Z6b4Z+B4Z6JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLhnoDhnrbhnprigIvhnpThnpjhn5LhnprhnrvhnoThnpHhnrvhnoDigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnpHhnrbhn4bhnoThnqLhnp/hn4vigIvhnpbhn4Hhnonhnpvhn4HhnonigIvigIvhnpHhn4XigIvhnoDhnrvhn4bhnpbhn5LhnpnhnrzhnpHhn5DhnprigIvhnorhn4LhnpvigIvhnpThnrbhnpPigIvhnpfhn5LhnofhnrbhnpThn4vigIvhno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvhnp/hn5LhnpPhnr7hn5Qg4Z6P4Z6+4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6F4Z6E4Z+L4Z6y4Z+S4Z6Z4oCL4Z6c4Z624oCL4Z6A4Z6+4Z6P4oCL4Z6h4Z6+4Z6E4oCL4Z6K4Z+C4Z6a4oCL4Z6s4Z6R4Z+BPz9cblxu4Z6U4Z6+4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6Y4Z634Z6T4oCL4Z6U4Z624Z6T4oCL4Z6f4Z+S4Z6T4Z6+4oCL4Z6A4Z624Z6a4oCL4Z6U4Z6Y4Z+S4Z6a4Z674Z6E4Z6R4Z674Z6A4oCL4Z6K4Z+E4Z6Z4oCL4Z6B4Z+S4Z6b4Z694Z6T4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6V4Z+S4Z6R4Z624Z6b4Z+L4oCL4Z6R4Z+BIOGegOGeu+GfhuKAi+GeouGek+Geu+GeieGfkuGeieGetuGej+KAi+GelOGfkuGemuGej+Get+GelOGej+GfkuGej+Get+GegOGetuGemuKAi+Gek+GfgeGfh+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI0MjE3MjI4NzQ3NzY5NjQ0MDY4Ij4i4Z6U4Z6Y4Z+S4Z6a4Z674Z6E4oCL4Z6R4Z674Z6A4oCL4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6B4Z+S4Z6J4Z674Z+GIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+IuGegOGeu+GfhuKAi+GelOGemOGfkuGemuGeu+GehOKAi+GekeGeu+GegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+IuGegOGetuGemuKAi+Gen+GfkuGeiuGetuGemuKAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GekeGetuGfhuGehOGeouGen+Gfi+KAi+GeluGfgeGeieGem+GfgeGeieKAi+GeluGeuOKAi+GegOGeu+GfhuGeluGfkuGemeGevOGekeGfkOGemuKAi+GeiuGfguGem+KAi+GelOGetuGek+KAi+Gej+Gel+GfkuGeh+GetuGelOGfi+KAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+Gen+GfkuGek+GevuGflCDhno/hnr7igIvhnqLhn5LhnpPhnoDigIvhnoXhnoThn4vigIvhnqLhnpPhnrvhnonhn5Lhnonhnrbhno/igIvhnorhn4LhnprigIvhnqzhnpHhn4E/XG5cbiDhnpThnr7igIvhnqLhn5LhnpPhnoDigIvhnpjhnrfhnpPigIvhnpThnrbhnpPigIvhnp/hn5LhnpPhnr7igIvhnoDhnrbhnprigIvhnp/hn5LhnorhnrbhnprigIvhnoHhn5Lhnpvhnr3hnpPigIvhnq/hnoTigIvhnpHhn4Eg4Z6A4Z674Z+G4oCL4Z6i4Z6T4Z674Z6J4Z+S4Z6J4Z624Z6P4Z+UIOGenOGetuKAi+Gek+GeueGehOKAi+Geh+GfhuGek+GeveGen+KAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GejuGetuGemOGeveGemeKAi+GeiuGfguGem+KAi+GemOGetuGek+KAi+Gem+GevuKAi+Gep+GelOGegOGemuGejuGfjSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiLhnp/hn5LhnorhnrbhnprigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnprhnpThnp/hn4vigIvhnoHhn5Lhnonhnrvhn4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+IuGegOGeu+GfhuKAi+Gen+GfkuGeiuGetuGemuKAi+GeoeGevuGehOGenOGet+GeiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiLhnp/hnrzhnpjigIvhnpThnonhn5LhnoXhnrzhnpvigIvhnpbhnrbhnoDhn5LhnpnigIvhnp/hnpjhn5LhnoThnrbhno/hn4vigIvhnpThnpjhn5LhnprhnrvhnoTigIvhnpHhnrvhnoDigIvhnpThnoXhn5LhnoXhnrvhnpThn5LhnpThnpPhn5LhnpPigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDigIvhnoHhnrbhnoTigIvhnoDhn5Lhnprhn4Thnpjhn5YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4i4Z6f4Z684Z6Y4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6K4Z624Z6A4Z+L4oCL4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6K4oCL4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6a4Z6U4Z6f4Z+L4oCL4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6B4Z624Z6E4oCL4Z6A4Z+S4Z6a4Z+E4Z6Y4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4i4Z6f4Z684Z6Y4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6K4Z624Z6A4Z+L4oCL4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6K4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6B4Z624Z6E4oCL4Z6A4Z+S4Z6a4Z+E4Z6Y4Z+UIOGenOGetuKAi+Gek+GeueGehOKAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+GelOGfkuGemuGeviDhnorhnr7hnpjhn5LhnpThnrjigIvhnorhnrbhnoDhn4vigIvhnpvhn4HhnoHigIvhnoDhnrzhnorigIvhnpThn5Dhno7hn5Lhno7hnp/hnrbhnprigIvhnpThnpjhn5LhnprhnrvhnoThnpHhnrvhnoDigIvhnpXhnoTigIvhnorhn4Lhnprhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4i4Z6f4Z684Z6Y4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6f4Z6Y4Z+S4Z6a4Z624Z6U4Z+L4oCL4Z6K4Z624Z6A4Z+L4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6K4oCL4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4oCL4Z6U4Z6Y4Z+S4Z6a4Z674Z6E4Z6R4Z674Z6A4oCL4Z6W4Z+B4Z6J4Z6b4Z+B4Z6J4Z+UIOGelOGevuKAi+GekeGeu+GegOKAi+GenOGetuKAi+GekeGekeGfgSDhnpbhnrbhnoDhn5LhnpnigIvhnp/hnpjhn5LhnoThnrbhno/hn4vigIvhnpThnpjhn5LhnprhnrvhnoThnpHhnrvhnoDigIvhnpThnoXhn5LhnoXhnrvhnpThn5LhnpThnpPhn5LhnpPigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDigIvhnpPhnrnhnoTigIvhno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvhnpThn5Lhnprhnr7hn5YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IuGelOGevuKAi+GeouGfkuGek+GegOKAi+GeheGehOGfi+KAi+GeiuGetuGegOGfi+KAi+Gem+GfgeGegeKAi+GegOGevOGeiuKAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GelOGemOGfkuGemuGeu+GehOGekeGeu+GegOKAi+GeluGfgeGeieGem+GfgeGeiSDhnpThnonhn5LhnoXhnrzhnpvigIvhnpbhnrbhnoDhn5LhnpnigIvhnp/hnpjhn5LhnoThnrbhno/hn4vigIvhnoHhnrbhnoTigIvhnoDhn5Lhnprhn4Thnpjhn5YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IuGelOGevuKAi+KAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+Gen+GfkuGeiuGetuGemuKAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+GeiuGetuGegOGfi+KAi+Gem+GfgeGegeKAi+GegOGevOGeiiDhnp/hnrzhnpjigIvhnpThnonhn5LhnoXhnrzhnpvigIvhnpbhnrbhnoDhn5LhnpnigIvhnp/hnpjhn5LhnoThnrbhno/hn4vigIvhnoHhnrbhnoTigIvhnoDhn5Lhnprhn4Thnpjhn5YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IuGegOGfhuGeluGeu+GehOKAi+GeheGetuGelOGfi+GeleGfkuGeiuGevuGemOKAi+GelOGemOGfkuGemuGeu+GehOGekeGeu+GegC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiLhnoDhnrbhnprigIvigIvhnpThnpjhn5LhnprhnrvhnoTigIvhnpHhnrvhnoDigIvhnpThnrbhnpPigIvhnpThnonhn5LhnoXhnpThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX3N0YXJ0ZWQiIG1zZ2lkPSI3ODgxNjc5MjE4OTcxMjc3Mzg1Ij4i4Z6A4Z624Z6a4oCL4Z6f4Z+S4Z6K4Z624Z6a4oCL4Z6A4Z+G4Z6W4Z674Z6E4oCL4Z6F4Z624Z6U4Z+L4Z6V4Z+S4Z6K4Z6+4Z6YLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiLhnoDhnrbhnprigIvhnp/hn5Lhno/hnrbigIvhnprigIvhnpThnrbhnpPigIvhnpThnonhn5LhnoXhnpThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+IuGelOGfkuGemuGej+Get+GelOGej+GfkuGej+Get+GegOGetuGemuKAi+GeouGen+Gfi+KAi+GeluGfgeGemyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIyODUwMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLguqrgurPguq7guq3guofguoLgu43gu4nguqHgurngupngu4DgupXgurHguqHguq7gurnguprgu4HguprgupoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4i4LqB4Lq54LuJ4LqC4LuN4LuJ4Lqh4Lq54LqZ4LuA4LqV4Lqx4Lqh4Lqu4Lq54Lqa4LuB4Lqa4LqaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLguqHgurXguoHgurLgupnguq7gu4nguq3guofguoLgu43gu4Pguqvgu4nguqrgurPguq7guq3guofguoLgu43gu4nguqHgurngupngupfgurHguofgu53gurvgupQg4LuE4Lqb4LuD4Lqq4LuI4LqE4Lqt4Lqh4Lqe4Lq04Lqn4LuA4LqV4Lq14LqV4Lqx4LuJ4LqH4LuC4LqV4Lqw4LqX4Lq14LuI4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4Lqi4Lq54LuILiDgupfgu4jgurLgupnguojgurDguq3gurDgupngurjguqHgurHgupTgu4Pguqvgu4ngupTgurPgu4DgupngurXgupnguoHgurLgupnguqvgurzgurfguprgu43gu4g/XG5cbuC6q+C6suC6geC6l+C7iOC6suC6meC6muC7jeC7iOC7hOC6lOC7ieC6ruC7ieC6reC6h+C6guC7jeC7g+C6q+C7ieC6quC6s+C6ruC6reC6h+C6guC7jeC7ieC6oeC6ueC6meC6lOC7ieC6p+C6jeC6leC6u+C6meC7gOC6reC6hywg4LqB4Lqw4Lql4Lq44LqZ4Lqy4Lqi4LuI4Lqy4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LuD4Lqr4LuJ4LqU4Lqz4LuA4LqZ4Lq14LqZ4LqB4Lqy4LqZ4LqV4LuN4LuI4LuE4LqbLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI0MjE3MjI4NzQ3NzY5NjQ0MDY4Ij4i4Lqq4Lqz4Lqu4Lqt4LqH4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqC4Lqt4LqH4LqC4LuJ4Lqt4LqNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+IuC6muC7jeC7iOC7g+C6q+C7ieC6quC6s+C6ruC6reC6h+C6guC7jeC7ieC6oeC6ueC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+IuC6geC6suC6meC6geC6ueC7ieC6guC7jeC7ieC6oeC6ueC6meC6l+C6seC6h+C7neC6u+C6lOC6iOC6suC6geC6hOC6reC6oeC6nuC6tOC6p+C7gOC6leC6teC6l+C6teC7iOC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC6ouC6ueC7iOC6meC6seC7ieC6meC6luC6t+C6geC6ruC7ieC6reC6h+C6guC7jeC7geC6peC7ieC6py4g4LqX4LuI4Lqy4LqZ4LqV4LuJ4Lqt4LqH4LqB4Lqy4LqZ4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LuD4Lqr4LuJ4LqB4Lqy4LqZ4LqB4Lqw4LqX4Lqz4LqZ4Lq14LuJ4LuA4LqB4Lq14LqU4LqC4Lq24LuJ4LqZ4Lqa4LuN4LuIP1xuXG7guqvgurLguoHgupfgu4jgurLgupnguprgu43gu4jgu4TgupTgu4ngu4Dguq7gurHgupTguoHgurLgupnguq7gu4nguq3guofguoLgu43gu4nguoHgurLgupnguoHgurngu4nguoLgu43gu4nguqHgurngupngupTgu4nguqfguo3gu4LgupXgupfgu4jgurLgupngu4Dguq3guocsIOC6l+C7iOC6suC6meC6muC7jeC7iOC6hOC6p+C6meC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC6oeC6teC6geC6suC6meC6lOC6s+C7gOC6meC6teC6meC6geC6suC6meC7g+C6lOC7hiDgu4Dgupngurfgu4jguq3guofguojgurLguoHguqHgurHgupnguojgurDgu4TgupvguoLgur3gupngupfgurHguprguoLgu43gu4nguqHgurngupngupfgurHguofgu53gurvgupTgupfgurXgu4jguqLgurngu4jgu4Pgupnguq3gurjgupvgurDguoHguq3gupkhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4i4LqB4Lq54LuJ4LqE4Lq34LqZ4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqC4Lqt4LqH4LqC4LuJ4Lqt4LqNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiLguprgu43gu4jgu4Pguqvgu4nguoHgurngu4nguoTgurfgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjdXJyZW50X3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI4MjY4MTg5NTU1NTc4Mjk4MDY3Ij4i4LqB4Lqw4Lql4Lq44LqZ4Lqy4Lqb4LuJ4Lqt4LqZ4Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZ4LqB4Lqy4LqZ4Lqq4Lqz4Lqu4Lqt4LqH4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqX4Lq14LuI4LqX4LuI4Lqy4LqZ4LuD4LqK4LuJ4Lqi4Lq54LuI4LuD4Lqq4LuI4LqU4LuJ4Lqy4LqZ4Lql4Lq44LuI4LqhOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiLguoHgurDguqXgurjgupngurLgupvgu4nguq3gupnguqXgurDguqvgurHgupTgupzgu4jgurLgupnguoHgurLgupngu4DguoLgurvgu4ngurLguqXgurDguqvgurHgupTguq3gurjgupvgurDguoHguq3gupnguoLguq3guofgupfgu4jgurLgupngu4Pguqrgu4jgupTgu4ngurLgupnguqXgurjgu4jguqEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4i4LqB4Lqw4Lql4Lq44LqZ4Lqy4Lqb4LuJ4Lqt4LqZ4Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZ4LqB4Lqy4LqZ4LuA4LqC4Lq74LuJ4Lqy4Lql4Lqw4Lqr4Lqx4LqU4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZ4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4LuD4Lqq4LuI4LqU4LuJ4Lqy4LqZ4Lql4Lq44LuI4LqhLiDguqXgurDguqvgurHgupTgupngurXgu4nguo3gurHguofguojgurDgu4Pguorgu4ngu4Dgup7gurfgu4jguq3gu4DguoLgurvgu4ngurLguqXgurDguqvgurHgupTguoLgu43gu4nguqHgurngupngupfgurXgu4jguqrgurPguq7guq3guofgu4Tguqfgu4kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IuC6geC6sOC6peC6uOC6meC6suC6m+C7ieC6reC6meC6peC6sOC6q+C6seC6lOC6nOC7iOC6suC6mSDgu4Dgup7gurfgu4jguq3gu4Pguorgu4ngu4PgupnguoHgurLgupngu4DguoLgurvgu4ngurLguqXgurDguqvgurHgupTguoHgurLgupnguqrgurPguq7guq3guofguoLgu43gu4nguqHgurngupngu4DgupXgurHguqHguq7gurnguprgu4HguprgupouIOC6luC7ieC6suC6m+C7iOC6reC6jeC7g+C6q+C7ieC7gOC6m+C6u+C7iOC6suC6q+C6p+C7iOC6suC6h+C7hOC6p+C7iSwg4Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZ4Lqq4Lqz4Lqu4Lqt4LqH4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqX4Lq14LuI4LqX4LuI4Lqy4LqZ4LuD4LqK4LuJ4Lqi4Lq54LuI4LqI4Lqw4LqW4Lq34LqB4LqZ4Lqz4LuD4LqK4LuJ4LuB4LqX4LqZOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4i4Lqr4Lqy4LqB4LqX4LuI4Lqy4LqZ4LqV4LuJ4Lqt4LqH4LqB4Lqy4LqZ4LqX4Lq14LuI4LqI4Lqw4LuA4LqC4Lq74LuJ4Lqy4Lql4Lqw4Lqr4Lqx4LqU4LuD4Lqr4LuJ4LqB4Lqx4Lqa4LqB4Lqy4LqZ4Lqq4Lqz4Lqu4Lqt4LqH4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqX4Lqx4LqH4Lud4Lq74LqULCDguoHgurDguqXgurjgupngurLgu4Pguqrgu4jguqXgurDguqvgurHgupTgupfgurLguofguqXgurjgu4jguqHgupngurXgu4k6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiLguqvgurLguoHguoLgu43gu4nguqHgurngupnguqrgurPguq7guq3guofgupbgurfguoHgu4DguoLgurvgu4ngurLguqXgurDguqvgurHgupTgu4Tguqfgu4ksIOC6geC6sOC6peC6uOC6meC6suC7g+C6quC7iOC6peC6sOC6q+C6seC6lOC6nOC7iOC6suC6meC6l+C6suC6h+C6lOC7ieC6suC6meC6peC6uOC7iOC6oeC6meC6teC7iToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IuC6geC6s+C6peC6seC6h+C7gOC6peC6teC7iOC6oeC6geC6suC6meC6quC6s+C6ruC6reC6h+C6guC7jeC7ieC6oeC6ueC6mS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiLguqrgurPguq7guq3guofguoLgu43gu4nguqHgurngupnguqrgurPgu4DguqXgurHgupTgu4HguqXgu4nguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX3N0YXJ0ZWQiIG1zZ2lkPSI3ODgxNjc5MjE4OTcxMjc3Mzg1Ij4i4LqB4Lqy4LqZ4LqB4Lq54LuJ4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqB4Lqz4Lql4Lqx4LqH4LqI4Lqw4LuA4Lql4Lq14LuI4LqhLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiLguoHgurLgupnguoHgurngu4nguoLgu43gu4nguqHgurngupnguqrgurTgu4ngupnguqrgurjgupTgu4HguqXgu4nguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+IuC7neC6u+C6lOC7gOC6p+C6peC6suC6m+C6sOC6leC6tOC6muC6seC6lOC6geC6suC6mSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI3MzhjMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLQkdKv0YDRjdC9INC906nTqdGI0LvTqdGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+ItCR0q/RgNGN0L0g0YHRjdGA0LPRjdGN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+ItCl0L7Qu9Cx0L7Qs9C00YHQvtC9INCx0LDQudCz0LDQsCDQtNC10YHQutGC0L7QvyDQutC+0LzQv9GM0Y7RgtC10YDQu9Kv0q8g0LHSr9GFINC00LDRgtCw0LMg0LHSr9GA0Y3QvSDQvdOp06nRiNC706nRhSDRhdKv0YHRjdC70YIg0YLQsNCy0LjQs9C00LDQsi4g0KLQsCDRjdC90LjQudCzINC306nQstGI06nTqdGA06nRhSDSr9KvP1xuXG7QpdGN0YDRjdCyINGC0LAg0L3TqdOp0YjQu9Op0LvRgiDRhdC40LnRhSDRhdKv0YHRjdC70YIg0YXQuNC50LPRjdGN0LPSr9C5INCx0L7QuyDRjdC90LjQudCzINC306nQstGI06nTqdGA0Ycg0LHQvtC70L7RhdCz0q/QuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+ItCc0LjQvdC40Lkg0LTQsNGC0LDQsyDQvdOp06nRiNC706nRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiLQndOp06nRiNC706nRhdCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+ItCl0L7Qu9Cx0L7Qs9C00YHQvtC9INCx0LDQudCz0LDQsCDQtNC10YHQutGC0L7QvyDQutC+0LzQv9GM0Y7RgtC10YDRjdGN0YEg0LHSr9GFINC00LDRgtCw0LMg0LHSr9GA0Y3QvSDRgdGN0YDQs9GN0Y3RhSDRhdKv0YHRjdC70YIg0YLQsNCy0LjQs9C00LDQsi4g0KLQsCDRjdC90LjQudCzINC306nQstGI06nTqdGA06nRhSDSr9KvP1xuXG7QpdGN0YDRjdCyINGC0LAg0YHRjdGA0LPRjdGN0YUg0YXSr9GB0Y3Qu9GCINGF0LjQudCz0Y3RjdCz0q/QuSDQsdC+0Lsg0Y3QvdC40LnQsyDQt9Op0LLRiNOp06nRgNGHINCx0L7Qu9C+0YXQs9Kv0LkuINCt0L3RjSDQvdGMINGC06nRhdOp06nRgNOp0LzQtiDQtNGN0Y3RgCDQvtC00L7QviDQsdCw0LnQs9Cw0LAg0LTRg9GA0YvQvSDQtNCw0YLQsNCzINC+0YDQu9GD0YPQu9Cw0YUg0LHQvtC70L3QviEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiLQnNC40L3QuNC5INC00LDRgtCw0LMg0YHRjdGA0LPRjdGN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+ItCh0Y3RgNCz0Y3RjdGF0LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+ItCe0LTQvtC+0LPQuNC50L0g0L3TqdOp0YjQu9Op0YUg0L3Rg9GD0YYg0q/Qs9C40LnQsyDQtNC+0L7RgCDQvtGA0YPRg9C70L3QsCDRg9GDOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiLQotOp0YXTqdOp0YDTqdC80LYg0YjQuNGE0YDQu9GN0YUg0L3Rg9GD0YYg0q/Qs9C40LnQsyDQtNC+0L7RgCDQvtGA0YPRg9C70L3QsCDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+ItCi06nRhdOp06nRgNOp0LzQtiDRiNC40YTRgNC70Y3RhSDQvdGD0YPRhiDSr9Cz0LjQudCzINC00L7QvtGAINC+0YDRg9GD0LvQvdCwINGD0YMuINCt0L3RjSDQvdGD0YPRhiDSr9Cz0LjQudCzINC906nTqdGI0LvTqdGFINCw0YDRhdC40LLQuNC50LMg0YjQuNGE0YDQu9GN0YXRjdC0INCx0LDRgSDQsNGI0LjQs9C70LDQvdCwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjQ5ODE1ODU3MTQ3OTUyMzMwOTkiPiLQkdKv0YDRjdC9INC00LDRgtCwINC906nTqdGI0LvTqdC70YLQuNC50LMg0YjQuNGE0YDQu9GN0YXRjdC0INCw0YjQuNCz0LvQsNGFINC90YPRg9GGINKv0LPQuNC50LMg0L7RgNGD0YPQu9C90LAg0YPRgy4g0KXRjdGA0Y3QsiDRgtCwINGF0L7QvtGB0L7QvSDSr9C70LTRjdGN0LLRjdC7INGC0LDQvdGLINC+0LTQvtC+0LPQuNC50L0g0L3TqdOp0YjQu9Op0LvRgtC40LnQvSDQvdGD0YPRhiDSr9CzINCw0YjQuNCz0LvQsNCz0LTQsNGFINCx0L7Qu9C90L46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF9vcHRpb25hbCIgbXNnaWQ9IjEzNTAxMzczNDU5MDc1NzkzMDYiPiLQpdGN0YDRjdCyINGC0LAg0LHSr9GA0Y3QvSDQvdOp06nRiNC706nRhSDQtNCw0YLQsNCzINGI0LjRhNGA0LvRjdGFINCx0L7QuyDQtNC+0L7RgCDQvdGD0YPRhiDSr9Cz0LjQudCzINC+0YDRg9GD0LvQvdCwINGD0YM6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiLQpdGN0YDRjdCyINGB0Y3RgNCz0Y3RjdGFINC00LDRgtCwINGI0LjRhNGA0LvRjdCz0LTRgdGN0L0g0LHQvtC7INC00L7QvtGAINC90YPRg9GGINKv0LPQuNC50LMg0L7RgNGD0YPQu9C90LAg0YPRgzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+ItCd06nTqdGI0LvTqdC2INGN0YXQu9GN0YUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4i0J3TqdOp0YjQu9Op0LvRgiDQtNGD0YPRgdCw0LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX3N0YXJ0ZWQiIG1zZ2lkPSI3ODgxNjc5MjE4OTcxMjc3Mzg1Ij4i0KHRjdGA0LPRjdGN0LvRgiDRjdGF0LvRjdC2INCx0LDQudC90LAuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX2VuZGVkIiBtc2dpZD0iMTc2NDA0MTYzOTE5OTY5NjEzMiI+ItCh0Y3RgNCz0Y3RjdC70YIg0LTRg9GD0YHQsNCyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiLQkNC20LjQu9C70LDQs9Cw0LDQvdGLINGF0YPQs9Cw0YbQsNCwINGF0Y3RgtGA0Y3QsiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLW1zL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLW1zL3N0cmluZ3MueG1sCnJlbmFtZSB0byBwYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTYzMzJmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90aXRsZSIgbXNnaWQ9IjgyNzU2MzcyNDIwOTMwMzM0NSI+IuCkquClguCksOCljeCkoyDgpKzgpY3gpK/gpL7gpJXgpIXgpKoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4i4KSq4KWC4KSw4KWN4KSjIOCkquClgeCkqOCkg+CkquCljeCksOCkvuCkquCljeCkpOCkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4i4KSP4KSJ4KSf4KS+IOCknOCli+CkoeCkv+Ckj+CkleCliyDgpKHgpYfgpLjgpY3gpJXgpJ/gpKog4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSu4KS+IOCkuOCkrOCliCDgpKHgpYfgpJ/gpL7gpJXgpYsg4KSP4KSJ4KSf4KS+IOCkquClguCksOCljeCkoyDgpJzgpJfgpYfgpKHgpL7gpJXgpYsg4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCkv+Ckj+CkleCliyDgpJvgpaQg4KSV4KWHIOCkpOCkquCkvuCkiOCkgSDgpK/gpYsg4KS54KWB4KSoIOCkpuCkv+CkqCDgpJrgpL7gpLngpKjgpYHgpLngpYHgpKjgpY3gpJs/IFxuXG7gpK/gpKbgpL8g4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCknOCkl+Clh+CkoeCkvuCkleCliyDgpLLgpL7gpJfgpL8g4KSG4KSr4KWI4KSBIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSoIOCkreCkqOClhyDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL7gpLLgpL7gpIgg4KSF4KSX4KS+4KSh4KS/IOCkrOCkouCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSo4KSm4KS/4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiLgpK7gpYfgpLDgpYsg4KSh4KWH4KSf4KS+IOCkrOCljeCkr+CkvuCkleCkheCkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2MDA5MTE5MTE1NTgxMDk3NzA4Ij4i4KSc4KSX4KWH4KSh4KS+IOCkqOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+IuCkj+CkieCkn+CkviDgpJzgpKHgpL/gpKQg4KSh4KWH4KS44KWN4KSV4KSf4KSqIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkrOCkvuCknyDgpLjgpKzgpYgg4KSh4KWH4KSf4KS+4KSV4KWLIOCkquClguCksOCljeCkoyDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCkv+Ckr+Cli+ClpCDgpJXgpYcg4KSk4KSq4KS+4KSI4KSCIOCkr+CliyDgpLngpYHgpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueClgeCkqOCljeCkmz9cblxu4KSv4KSm4KS/IOCkpOCkquCkvuCkiOCkgiDgpIbgpKvgpYjgpIIg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKjgpYHgpLngpYHgpKjgpY3gpKgg4KSt4KSo4KWHIOCkheCkquCksOClh+CkuOCkqOCksuCkvuCkiCDgpIXgpJjgpL8g4KSs4KSi4KS+4KSJ4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKjgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSv4KS44KSy4KWHIOCkieCkquCkleCksOCko+CkruCkviDgpK3gpI/gpJXgpYsg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpKHgpYfgpJ/gpL7gpLLgpL7gpIgg4KSs4KSm4KSy4KWN4KSo4KWHIOCkmyEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiLgpK7gpYfgpLDgpYsg4KSh4KWH4KSf4KS+IOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+IuCkquClgeCkqDrgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KSo4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IuCkleClg+CkquCkr+CkviDgpKTgpLIg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkueCkvuCksuCkleCliyDgpKzgpY3gpK/gpL7gpJXgpIXgpKog4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY06Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fcmVzdG9yZV90ZXh0IiBtc2dpZD0iMTU3MDg2NDkxNjg1NTIwODk5MiI+IuCkleClg+CkquCkr+CkviDgpKTgpLIg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkieCkquCkleCksOCkoyDgpI/gpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpLjgpKgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY06Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4i4KSV4KWD4KSq4KSv4KS+IOCkpOCksiDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSJ4KSq4KSV4KSw4KSjIOCkj+CkqOCljeCkleCljeCksOCkv+CkquCljeCkuOCkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljTog4KSv4KWLIOCkrOCljeCkr+CkvuCkleCkqiDgpLjgpIHgpJfgpY3gpLDgpLkg4KSP4KSo4KWN4KSV4KWN4KSw4KS/4KSq4KWN4KSfIOCkl+CksOCljeCkqCDgpKrgpKjgpL8g4KSq4KWN4KSw4KSv4KWL4KSXIOCkueClgeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4i4KSs4KWN4KSv4KS+4KSV4KSqIOCkoeClh+Ckn+CkvuCksuCkvuCkiCBlbmNyeXB0IOCkl+CksOCljeCkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSwg4KSv4KSm4KS/IOCkr+CliyDgpJbgpL7gpLLgpL8g4KSb4KWL4KSh4KS/4KSP4KSV4KWLIOCkluCko+CljeCkoeCkruCkviDgpKTgpKrgpL7gpIjgpJXgpYsg4KSq4KWB4KSw4KS+4KSo4KWIIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKrgpY3gpLDgpK/gpYvgpJcg4KS54KWB4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4i4KSv4KSm4KS/IOCkpOCkquCkvuCkiOCkgiDgpKrgpYLgpLDgpY3gpKMg4KSs4KWN4KSv4KS+4KSV4KSF4KSqIOCkoeClh+Ckn+CkviDgpIfgpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpJ8g4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJsg4KSt4KSo4KWHIOCkpOCksiDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI2MTQwODk4NTI1NTgwNzEwODIzIj4i4KSv4KSm4KS/IOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpKHgpYfgpJ/gpL4g4KSH4KSo4KWN4KSV4KWN4KSw4KS/4KSq4KWN4KSfIOCkmyDgpK3gpKjgpYcg4KSV4KWD4KSq4KSv4KS+IOCkpOCksiDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IuCknOCkl+Clh+CkoeCkviDgpLDgpL7gpJbgpY3gpKgg4KS44KWB4KSw4KWBIOCkueClgeCkgeCkpuCliC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiLgpKzgpY3gpK/gpL7gpJXgpIXgpKog4KS44KSV4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IuCkquClgeCkqOCkg+CkuOCljeCkpeCkvuCkquCkqOCkviDgpLjgpYHgpLDgpYEg4KS54KWB4KSB4KSm4KWI4KSbLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiLgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KS44KSu4KS+4KSq4KWN4KSkIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3RpbWVvdXQiIG1zZ2lkPSI1Mjc2NTk4NTg3MDg3NjI2ODc3Ij4i4KS44KSC4KSa4KSy4KSoIOCkleCkvuCksOCljeCkr+CkleCliyDgpLjgpK7gpK8g4KS44KSu4KS+4KSq4KWN4KSkIOCkreCkr+CliyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NjMzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtbmUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLgpKrgpYLgpLDgpY3gpKMg4KSs4KWN4KSv4KS+4KSV4KSF4KSqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IuCkquClguCksOCljeCkoyDgpKrgpYHgpKjgpIPgpKrgpY3gpLDgpL7gpKrgpY3gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+IuCkj+CkieCkn+CkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSh4KWH4KS44KWN4KSV4KSf4KSqIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkruCkviDgpLjgpKzgpYgg4KSh4KWH4KSf4KS+4KSV4KWLIOCkj+CkieCkn+CkviDgpKrgpYLgpLDgpY3gpKMg4KSc4KSX4KWH4KSh4KS+4KSV4KWLIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIOCkleClhyDgpKTgpKrgpL7gpIjgpIEg4KSv4KWLIOCkueClgeCkqCDgpKbgpL/gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbPyBcblxu4KSv4KSm4KS/IOCkpOCkquCkvuCkiOCkgeCksuClhyDgpJzgpJfgpYfgpKHgpL7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkhuCkq+CliOCkgSDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkqCDgpK3gpKjgpYcg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KSy4KS+4KSIIOCkheCkl+CkvuCkoeCkvyDgpKzgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkqOCkpuCkv+CkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI0MjE3MjI4NzQ3NzY5NjQ0MDY4Ij4i4KSu4KWH4KSw4KWLIOCkoeClh+Ckn+CkviDgpKzgpY3gpK/gpL7gpJXgpIXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+IuCknOCkl+Clh+CkoeCkviDgpKjgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiLgpI/gpIngpJ/gpL4g4KSc4KSh4KS/4KSkIOCkoeClh+CkuOCljeCkleCkn+CkqiDgpJXgpK7gpY3gpKrgpY3gpK/gpYHgpJ/gpLDgpKzgpL7gpJ8g4KS44KSs4KWIIOCkoeClh+Ckn+CkvuCkleCliyDgpKrgpYLgpLDgpY3gpKMg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpL/gpK/gpYvgpaQg4KSV4KWHIOCkpOCkquCkvuCkiOCkgiDgpK/gpYsg4KS54KWB4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYHgpLngpYHgpKjgpY3gpJs/XG5cbuCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIIg4KSG4KSr4KWI4KSCIOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSoIOCkreCkqOClhyDgpIXgpKrgpLDgpYfgpLjgpKjgpLLgpL7gpIgg4KSF4KSY4KS/IOCkrOCkouCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSo4KSm4KS/4KSo4KWB4KS54KWL4KS44KWN4KWkIOCkr+CkuOCksuClhyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSt4KSP4KSV4KWLIOCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkrOCkpuCksuCljeCkqOClhyDgpJshIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4i4KSu4KWH4KSw4KWLIOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiLgpKrgpYHgpKg64KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkqOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiLgpJXgpYPgpKrgpK/gpL4g4KSk4KSyIOCkpOCkquCkvuCkiOCkguCkleCliyDgpLngpL7gpLLgpJXgpYsg4KSs4KWN4KSv4KS+4KSV4KSF4KSqIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiLgpJXgpYPgpKrgpK/gpL4g4KSk4KSyIOCkpOCkquCkvuCkiOCkguCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSP4KSo4KWN4KSV4KWN4KSw4KS/4KSq4KWN4KS44KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+IuCkleClg+CkquCkr+CkviDgpKTgpLIg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkieCkquCkleCksOCkoyDgpI/gpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpLjgpKgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY06IOCkr+CliyDgpKzgpY3gpK/gpL7gpJXgpKog4KS44KSB4KSX4KWN4KSw4KS5IOCkj+CkqOCljeCkleCljeCksOCkv+CkquCljeCknyDgpJfgpLDgpY3gpKgg4KSq4KSo4KS/IOCkquCljeCksOCkr+Cli+CklyDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IuCkrOCljeCkr+CkvuCkleCkqiDgpKHgpYfgpJ/gpL7gpLLgpL7gpIggZW5jcnlwdCDgpJfgpLDgpY3gpKgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0sIOCkr+CkpuCkvyDgpK/gpYsg4KSW4KS+4KSy4KS/IOCkm+Cli+CkoeCkv+Ckj+CkleCliyDgpJbgpKPgpY3gpKHgpK7gpL4g4KSk4KSq4KS+4KSI4KSV4KWLIOCkquClgeCksOCkvuCkqOCliCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KWN4KSw4KSv4KWL4KSXIOCkueClgeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IuCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIIg4KSq4KWC4KSw4KWN4KSjIOCkrOCljeCkr+CkvuCkleCkheCkqiDgpKHgpYfgpJ/gpL4g4KSH4KSo4KWN4KSV4KWN4KSw4KS/4KSq4KWN4KSfIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbIOCkreCkqOClhyDgpKTgpLIg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IuCkr+CkpuCkvyDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSh4KWH4KSf4KS+IOCkh+CkqOCljeCkleCljeCksOCkv+CkquCljeCknyDgpJsg4KSt4KSo4KWHIOCkleClg+CkquCkr+CkviDgpKTgpLIg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY06Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiLgpJzgpJfgpYfgpKHgpL4g4KSw4KS+4KSW4KWN4KSoIOCkuOClgeCksOClgSDgpLngpYHgpIHgpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4i4KSs4KWN4KSv4KS+4KSV4KSF4KSqIOCkuOCkleCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfc3RhcnRlZCIgbXNnaWQ9Ijc4ODE2NzkyMTg5NzEyNzczODUiPiLgpKrgpYHgpKjgpIPgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KS44KWB4KSw4KWBIOCkueClgeCkgeCkpuCliOCkmy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfZW5kZWQiIG1zZ2lkPSIxNzY0MDQxNjM5MTk5Njk2MTMyIj4i4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkuOCkruCkvuCkquCljeCkpCDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+IuCkuOCkguCkmuCksuCkqCDgpJXgpL7gpLDgpY3gpK/gpJXgpYsg4KS44KSu4KSvIOCkuOCkruCkvuCkquCljeCkpCDgpK3gpK/gpYsiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMzJlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4i4LeD4La44LeK4La04LeW4La74LeK4LarIOC2i+C2tOC3g+C3iuC2ruC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90aXRsZSIgbXNnaWQ9IjU0NjkzNjU4MDk1Njc0ODY2MDIiPiLgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqvgtrrgt5ngtrHgt4og4Lax4LeQ4LeA4LatIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4i4Lap4LeZ4LeD4LeK4Laa4LeK4Lan4Lec4La04LeKIOC2tOC2u+C3kuC2nOC2q+C2muC2uuC2muC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq0g4LeD4LeS4La64La94LeU4La4IOC2r+C2reC3iuC2rSDgt4Dgtr0g4LeD4La44LeK4La04LeW4La74LeK4LarIOC2i+C2tOC3g+C3iuC2ruC2uuC2muC3iiDgtongtr3gt4rgtr3gt48g4Lat4LeS4La24LeaLiDgtrjgt5ngtrgg4LeD4LeS4Lav4LeUIOC3gOC3meC2seC3gOC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeT4La44LanIOC2lOC2tuC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/XG5cbuC2lOC2tiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LaL4La04LeD4LeK4Lau4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtongtr3gt4rgtr3gt48g4Lax4Lec4Lat4LeS4La24LeU4Lar4LeSIOC2seC2uOC3iiwg4La44LeZ4La4IOC2uOC3meC3hOC3meC2uuC3lOC2uCDgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4Laa4La74Lac4LeZ4LaxIOC2uuC3j+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxIOC2keC2tOC3jy4gMSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI0MjE3MjI4NzQ3NzY5NjQ0MDY4Ij4i4La44Lac4LeaIOC2r+C2reC3iuC2rSDgtovgtrTgt4Pgt4rgtq4g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+IuC2i+C2tOC3g+C3iuC2riDgtprgtrvgtrHgt4rgtrEg4LaR4La04LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RleHQiIG1zZ2lkPSI3NDk5ODY2NzI4MDMwNDYxNzc2Ij4i4LeD4La44LeK4La24Lax4LeK4Law4LeS4LatIOC2qeC3meC3g+C3iuC2muC3iuC2p+C3nOC2tOC3iiDgtrTgtrvgt5Lgtpzgtqvgtprgtrrgtprgt5LgtrHgt4og4LeD4LeS4La64La94LeUIOC2r+C2reC3iuC2rSDgt4Dgtr0g4LeD4La44LeK4La04LeW4La74LeK4LarIOC2tOC3iuKAjeC2u+C2reC3kuC3g+C3iuC2ruC3j+C2tOC2seC2uuC2muC3iiDgtongtr3gt4rgtr3gt48g4LaH4LatLiDgtpTgtrYg4La44LeZ4La6IOC3g+C3kuC2r+C3lCDgt4Dgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3gOC3jyDgtq8/XG5cbuC2lOC2tiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La04LeK4oCN4La74Lat4LeS4LeD4LeK4Lau4LeP4La04Lax4La6IOC2ieC2veC3iuC2veC3jyDgtrHgt5zgtrjgt5Dgtq3gt5Ig4Lax4La44LeKLCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Lgtrrgtqcg4LaJ4Lav4LeS4La74LeS4La64LanIOC2uuC3j+C2uOC2pyDgtongtqkg4Lax4Lec4Lav4LeZ4Lax4LeK4LaxLiDgtovgtrTgt4/gtoLgtpzgtrrgt5og4Lav4LeQ4Lax4LanIOC2h+C2reC3kiDgtpXgtrHgt5Hgtrgg4Lav4Lat4LeK4Lat4La64Laa4LeKIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtrTgt4rigI3gtrvgtq3gt5Lgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4LeA4LeZ4La64LeSISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzA4MTI4Njc1MjI3NzEyNzgyNyI+IuC2uOC2nOC3miDgtq/gtq3gt4rgtq0g4Lax4LeQ4LeA4LatIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIxNzI0MzY3MzM0NDUzMTA0Mzc4Ij4i4Lax4LeQ4LeA4LatIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC2seC3iuC2sSDgtpHgtrTgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjdXJyZW50X3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI4MjY4MTg5NTU1NTc4Mjk4MDY3Ij4i4Laa4La74LeU4Lar4LeP4Laa4La7IOC2lOC2tuC2nOC3miDgt4Dgtrvgt4rgtq3gtrjgt4/gtrEg4LaL4La04LeD4LeK4LauIOC2uOC3lOC2u+C2tOC2r+C2uiDgtrTgt4Tgtq0g4LaH4Lat4LeU4La94Lat4LeKIOC2muC2u+C2seC3iuC2sToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4i4Laa4La74LeU4Lar4LeP4Laa4La7IOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgt5og4LeD4LaC4Laa4Lea4Lat4LaxIOC2uOC3lOC2u+C2tOC2r+C2uiDgtrTgt4Tgtq0g4LaH4Lat4LeU4La94Lat4LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiLgtprgtrvgt5Tgtqvgt4/gtprgtrsg4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uuC3miDgt4PgtoLgtprgt5rgtq3gtrEg4La44LeU4La74La04Lav4La6IOC2tOC3hOC2rSDgtofgtq3gt5Tgtr3gtq3gt4og4Laa4La74Lax4LeK4LaxLiDgt4PgtoLgtrvgtprgt4rgt4Lgt5Lgtq0g4LaL4La04LeD4LeK4LauIOC3g+C2guC2muC3muC2reC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjQ5ODE1ODU3MTQ3OTUyMzMwOTkiPiLgtprgtrvgt5Tgtqvgt4/gtprgtrsg4LeD4LeS4La64La94LeUIOC2i+C2tOC3g+C3iuC2riDgtq/gtq3gt4rgtq0g4LeD4LaC4Laa4Lea4Lat4Lax4La6IOC2muC3kuC2u+C3k+C2uCDgt4PgtrPgt4Tgt48g4La34LeP4LeA4LeS4Lat4La64LanIOC2uOC3lOC2u+C2tOC2r+C2uuC2muC3iiDgtofgtq3gt5Tgt4Xgtq3gt4og4Laa4La74Lax4LeK4LaxLiDgtrjgt5ngtrog4LeE4LeS4LeD4LeK4LeAIOC2reC3kOC2tuC3lOC3gOC3nOC2reC3iiwg4LaU4La24Lac4LeaIOC3gOC2u+C3iuC2reC2uOC3j+C2sSDgtovgtrTgt4Pgt4rgtq4g4La44LeU4La74La04Lav4La6IOC2t+C3j+C3gOC3kuC2rSDgt4Dgt5ngtrrgt5I6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF9vcHRpb25hbCIgbXNnaWQ9IjEzNTAxMzczNDU5MDc1NzkzMDYiPiLgt4Pgt5Lgtrrgtr3gt5Qg4LaL4La04LeD4LeK4LauIOC2r+C2reC3iuC2rSDgt4PgtoLgtprgt5rgtq3gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2lOC2tiDgtoXgtq/gt4Tgt4Pgt4og4Laa4La74Lax4LeK4Lax4LeaIOC2seC2uOC3iiwg4La44LeU4La74La04Lav4La6IOC2tOC3hOC2veC3kuC2seC3iiDgtofgtq3gt5Tgtr3gtq3gt4og4Laa4La74Lax4LeK4LaxOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI2MTQwODk4NTI1NTgwNzEwODIzIj4i4La64LeF4LeSIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC2sSDgtq/gtq3gt4rgtq0g4LeD4LaC4Laa4Lea4Lat4Lax4La6IOC2muC2u+C2sSDgtr3gtq8g4LaS4LeA4LeP4Lax4La44LeKLCDgtprgtrvgt5Tgtqvgt4/gtprgtrsg4La44LeU4La74La04Lav4La6IOC2tOC3hOC2veC3kuC2seC3iiDgtofgtq3gt5Tgtr3gt4og4Laa4La74Lax4LeK4LaxOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9zdGFydGVkIiBtc2dpZD0iNTUwMzU0MjgxNDUyNzU2MTIxIj4i4LaL4La04LeD4LeK4LauIOC2muC3kuC2u+C3k+C2uCDgtobgtrvgtrjgt4rgtrcg4Laa4La74La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX2VuZGVkIiBtc2dpZD0iMzgxODA4MDc2OTU0ODcyNjQyNCI+IuC2i+C2tOC3g+C3iuC2ruC2uiDgtoXgt4Dgt4PgtrHgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX3N0YXJ0ZWQiIG1zZ2lkPSI3ODgxNjc5MjE4OTcxMjc3Mzg1Ij4i4La64LeF4LeSIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgtoXgtrvgtrngtrrgt5IuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX2VuZGVkIiBtc2dpZD0iMTc2NDA0MTYzOTE5OTY5NjEzMiI+IuC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4LaF4LeA4LeD4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Lgtrog4Laa4La94LeKIOC2ieC2muC3lOC2reC3iiDgt4Dgt5Mg4LaH4LatIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzMmU3MwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90aXRsZSIgbXNnaWQ9IjgyNzU2MzcyNDIwOTMwMzM0NSI+IuC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtovgtrTgt4Pgt4rgtq7gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4i4LeD4La44LeK4La04LeW4La74LeK4Lar4La64LeZ4Lax4LeKIOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+IuC2qeC3meC3g+C3iuC2muC3iuC2p+C3nOC2tOC3iiDgtrTgtrvgt5Lgtpzgtqvgtprgtrrgtprgtqcg4LeD4La44LeK4La24Lax4LeK4Law4LeS4LatIOC3g+C3kuC2uuC2veC3lOC2uCDgtq/gtq3gt4rgtq0g4LeA4La9IOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtovgtrTgt4Pgt4rgtq7gtrrgtprgt4og4LaJ4La94LeK4La94LePIOC2reC3kuC2tuC3mi4g4La44LeZ4La4IOC3g+C3kuC2r+C3lCDgt4Dgt5ngtrHgt4Dgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavP1xuXG7gtpTgtrYg4LeA4LeS4LeD4LeS4Lax4LeKIOC2i+C2tOC3g+C3iuC2ruC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4La94LeK4La94LePIOC2seC3nOC2reC3kuC2tuC3lOC2q+C3kiDgtrHgtrjgt4osIOC2uOC3meC2uCDgtrjgt5ngt4Tgt5ngtrrgt5Tgtrgg4LaJ4Lav4LeS4La74LeS4La64LanIOC2muC2u+C2nOC3meC2sSDgtrrgt4/gtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sSDgtpHgtrTgt48uIDEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+IuC2uOC2nOC3miDgtq/gtq3gt4rgtq0g4LaL4La04LeD4LeK4LauIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiLgtovgtrTgt4Pgt4rgtq4g4Laa4La74Lax4LeK4LaxIOC2keC2tOC3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2rSDgtqngt5ngt4Pgt4rgtprgt4rgtqfgt5zgtrTgt4og4La04La74LeS4Lac4Lar4Laa4La64Laa4LeS4Lax4LeKIOC3g+C3kuC2uuC2veC3lCDgtq/gtq3gt4rgtq0g4LeA4La9IOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtrTgt4rigI3gtrvgtq3gt5Lgt4Pgt4rgtq7gt4/gtrTgtrHgtrrgtprgt4og4LaJ4La94LeK4La94LePIOC2h+C2rS4g4LaU4La2IOC2uOC3meC2uiDgt4Pgt5Lgtq/gt5Qg4LeA4LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4Dgt48g4LavP1xuXG7gtpTgtrYg4LeA4LeS4LeD4LeS4Lax4LeKIOC2tOC3iuKAjeC2u+C2reC3kuC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtongtr3gt4rgtr3gt48g4Lax4Lec4La44LeQ4Lat4LeSIOC2seC2uOC3iiwg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La64LanIOC2ieC2r+C3kuC2u+C3kuC2uuC2pyDgtrrgt4/gtrjgtqcg4LaJ4LapIOC2seC3nOC2r+C3meC2seC3iuC2sS4g4LaL4La04LeP4LaC4Lac4La64LeaIOC2r+C3kOC2seC2pyDgtofgtq3gt5Ig4LaV4Lax4LeR4La4IOC2r+C2reC3iuC2reC2uuC2muC3iiDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4La04LeK4oCN4La74Lat4LeS4LeD4LeK4Lau4LeP4La04Lax4La6IOC3gOC3meC2uuC3kiEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiLgtrjgtpzgt5og4Lav4Lat4LeK4LatIOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+IuC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt4rgtrEg4LaR4La04LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IuC2muC2u+C3lOC2q+C3j+C2muC2uyDgtpTgtrbgtpzgt5og4LeA4La74LeK4Lat4La44LeP4LaxIOC2i+C2tOC3g+C3iuC2riDgtrjgt5TgtrvgtrTgtq/gtrog4La04LeE4LatIOC2h+C2reC3lOC2veC2reC3iiDgtprgtrvgtrHgt4rgtrE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fcmVzdG9yZV90ZXh0IiBtc2dpZD0iMTU3MDg2NDkxNjg1NTIwODk5MiI+IuC2muC2u+C3lOC2q+C3j+C2muC2uyDgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LeaIOC3g+C2guC2muC3muC2reC2sSDgtrjgt5TgtrvgtrTgtq/gtrog4La04LeE4LatIOC2h+C2reC3lOC2veC2reC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4i4Laa4La74LeU4Lar4LeP4Laa4La7IOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgt5og4LeD4LaC4Laa4Lea4Lat4LaxIOC2uOC3lOC2u+C2tOC2r+C2uiDgtrTgt4Tgtq0g4LaH4Lat4LeU4La94Lat4LeKIOC2muC2u+C2seC3iuC2sS4g4LeD4LaC4La74Laa4LeK4LeC4LeS4LatIOC2i+C2tOC3g+C3iuC2riDgt4PgtoLgtprgt5rgtq3gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4i4Laa4La74LeU4Lar4LeP4Laa4La7IOC3g+C3kuC2uuC2veC3lCDgtovgtrTgt4Pgt4rgtq4g4Lav4Lat4LeK4LatIOC3g+C2guC2muC3muC2reC2seC2uiDgtprgt5Lgtrvgt5Pgtrgg4LeD4Laz4LeE4LePIOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrjgt5TgtrvgtrTgtq/gtrrgtprgt4og4LaH4Lat4LeU4LeF4Lat4LeKIOC2muC2u+C2seC3iuC2sS4g4La44LeZ4La6IOC3hOC3kuC3g+C3iuC3gCDgtq3gt5Dgtrbgt5Tgt4Dgt5zgtq3gt4osIOC2lOC2tuC2nOC3miDgt4Dgtrvgt4rgtq3gtrjgt4/gtrEg4LaL4La04LeD4LeK4LauIOC2uOC3lOC2u+C2tOC2r+C2uiDgtrfgt4/gt4Dgt5Lgtq0g4LeA4LeZ4La64LeSOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4i4LeD4LeS4La64La94LeUIOC2i+C2tOC3g+C3iuC2riDgtq/gtq3gt4rgtq0g4LeD4LaC4Laa4Lea4Lat4Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtpTgtrYg4LaF4Lav4LeE4LeD4LeKIOC2muC2u+C2seC3iuC2seC3miDgtrHgtrjgt4osIOC2uOC3lOC2u+C2tOC2r+C2uiDgtrTgt4Tgtr3gt5LgtrHgt4og4LaH4Lat4LeU4La94Lat4LeKIOC2muC2u+C2seC3iuC2sToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IuC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrEg4Lav4Lat4LeK4LatIOC3g+C2guC2muC3muC2reC2seC2uiDgtprgtrvgtrEg4La94LavIOC2kuC3gOC3j+C2seC2uOC3iiwg4Laa4La74LeU4Lar4LeP4Laa4La7IOC2uOC3lOC2u+C2tOC2r+C2uiDgtrTgt4Tgtr3gt5LgtrHgt4og4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IuC2i+C2tOC3g+C3iuC2riDgtprgt5Lgtrvgt5Pgtrgg4LaG4La74La44LeK4La3IOC2muC2u+C2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiLgtovgtrTgt4Pgt4rgtq7gtrog4LaF4LeA4LeD4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IuC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4LaF4La74La54La64LeSLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiLgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La4IOC2heC3gOC3g+C2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3RpbWVvdXQiIG1zZ2lkPSI1Mjc2NTk4NTg3MDg3NjI2ODc3Ij4i4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La6IOC2muC2veC3iiDgtongtprgt5Tgtq3gt4og4LeA4LeTIOC2h+C2rSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiY2Q2ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLlrozmlbTlgpnku70iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4i5a6M5pW06YKE5Y6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLns7vntbHmlLbliLDlsIfmiYDmnInos4fmlpnlrozmlbTlgpnku73liLDpgKPnt5rmoYzkuIrpm7vohabnmoTopoHmsYLvvIzoq4vllY/mgqjlhYHoqLHpgLLooYzlgpnku73ll47vvJ9cblxu5aaC5p6c5oKo5pys5Lq65Lim5pyq5o+Q5Ye65YKZ5Lu96KaB5rGC77yM6KuL5Yu/5YWB6Kix57m857qM6YCy6KGM6YCZ6aCF5L2c5qWt44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiLlgpnku73miJHnmoTos4fmlpkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2MDA5MTE5MTE1NTgxMDk3NzA4Ij4i5LiN6KaB5YKZ5Lu9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RleHQiIG1zZ2lkPSI3NDk5ODY2NzI4MDMwNDYxNzc2Ij4i57O757Wx5pS25Yiw5b6e6YCj57ea55qE5qGM5LiK6Zu76IWm5a6M5pW06YKE5Y6f5omA5pyJ6LOH5paZ55qE6KaB5rGC77yM6KuL5ZWP5oKo5YWB6Kix6YCy6KGM6YKE5Y6f5ZeO77yfXG5cbuWmguaenOaCqOacrOS6uuS4puacquaPkOWHuumChOWOn+imgeaxgu+8jOiri+WLv+WFgeiosee5vOe6jOmAsuihjOmAmemgheS9nOalreOAgumAmemgheS9nOalreWwh+WPluS7o+ijnee9ruS4iuePvuacieeahOWFqOmDqOizh+aWme+8gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzA4MTI4Njc1MjI3NzEyNzgyNyI+IumChOWOn+aIkeeahOizh+aWmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIxNzI0MzY3MzM0NDUzMTA0Mzc4Ij4i5LiN6KaB6YKE5Y6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IuWcqOS4i+mdoui8uOWFpeaCqOebruWJjeeahOWCmeS7veWvhueivO+8miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiLoq4vlnKjkuIvpnaLovLjlhaXmgqjnmoToo53nva7liqDlr4blr4bnorzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiLoq4vlnKjkuIvpnaLovLjlhaXmgqjnmoToo53nva7liqDlr4blr4bnorzvvIzpgJnkuZ/mnIPnlKjkvoblsIflsIHlrZjlgpnku73liqDlr4bjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4i6KuL6Ly45YWl54K65a6M5pW05YKZ5Lu96LOH5paZ5Yqg5a+G55qE5bCI55So5a+G56K844CC5aaC5p6c55WZ56m677yM57O757Wx5bCH5L2/55So5oKo55uu5YmN55qE5YKZ5Lu95a+G56K877yaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF9vcHRpb25hbCIgbXNnaWQ9IjEzNTAxMzczNDU5MDc1NzkzMDYiPiLlpoLmnpzmgqjmg7PlsIflrozmlbTnmoTlgpnku73os4fmlpnliqDlr4bvvIzoq4vlnKjkuIvpnaLovLjlhaXkuIDntYTlr4bnorzvvJoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IuWmguaenOmChOWOn+eahOizh+aWmee2k+mBjuWKoOWvhuiZleeQhu+8jOiri+WcqOS4i+mdoui8uOWFpeWvhueivO+8miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9zdGFydGVkIiBtc2dpZD0iNTUwMzU0MjgxNDUyNzU2MTIxIj4i5q2j5Zyo6ZaL5aeL5YKZ5Lu9Li4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX2VuZGVkIiBtc2dpZD0iMzgxODA4MDc2OTU0ODcyNjQyNCI+IuWCmeS7veWujOeVoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfc3RhcnRlZCIgbXNnaWQ9Ijc4ODE2NzkyMTg5NzEyNzczODUiPiLmraPlnKjplovlp4vpgoTljp8uLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX2VuZGVkIiBtc2dpZD0iMTc2NDA0MTYzOTE5OTY5NjEzMiI+IumChOWOn+WujOeVoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3RpbWVvdXQiIG1zZ2lkPSI1Mjc2NTk4NTg3MDg3NjI2ODc3Ij4i5pON5L2c6YC+5pmCIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKaW5kZXggYjYyYjdhZi4uOTU1YjI2ZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApAQCAtMjksNyArMjksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4iVXlhY2Vsd2EgdWt1YmEgdWZha2UgaXBoYXNpd2VkaSBlZmFrd2Uga3VkaXZheWlzaSB5YWtobyBuZ2V6YW5zaS4gbG9raHUga3V6b3NldHNoZW56aXN3YSB1a3VmYWthIGt1c2lsb25kb2xvemEgc29rdXNpemEgbGFwaG8ga3VkaW5nZWthLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjQ5ODE1ODU3MTQ3OTUyMzMwOTkiPiJTaWNlbGEgdWZha2UgaXBoYXNpd2VkaSBlem9zZXRzaGVuemlzZWx3YSB1a3ViaGFsYSBuZ29rdWZpaGxla2lsZXlvIGltaW5pbmluZ28gZXllc2Vrd2Ugbmdva3Vsb25kb2xvemEuIFVtYSBsb2todSBrdXNoaXl3ZSBrdW5nYWJoYWx3ZSBsdXRobywga3V6b3NldHNoZW56aXN3YSBpcGhhc2l3ZWRpIHlva3dlc2VrYSBuZ29rdWxvbmRvbG96YSB5YW1hbmplOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4iVW1hIHVmdW5hIHVrdWZha2EgaWtob3d1ZGkga3dpbWluaW5pbmdvIHlvbmtlIGV5ZXNla2Vsd2Ugbmdva3Vsb25kb2xvemEgZmFrYSBpLXBhc3Nvd3JkIGVuZ2V6YW5zaToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IlVtYSBpbnNpemEgeW9rdWJ1eWlzZWx3YSBlc2ltd2VuaSBrd21pbmluaW5nbyBpYmhhbHdlIG5nb2t1ZmlobGVraWxleW8sIHNpY2VsYSB1ZmFrZSBpcGhhc2l3ZWRpIGVuZ2V6YW5zaToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IlVtYSB1aGxlbG8gbG9rdXNlYmVuemEgeW9rdWJ1eWlzZWx3YSBlc2ltd2VuaSBrd21pbmluaW5nbyBpYmhhbHdlIG5nb2t1ZmlobGVraWxleW8sIHNpY2VsYSB1ZmFrZSBpcGhhc2l3ZWRpIGVuZ2V6YW5zaToiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IlVrdWxvbmRvbG96YSBrdXlhcWFsYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiJVa3Vsb25kb2xvemEga3VwaGVsaWxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IlVrdWJ1eWlzYSBrdXlhcWFsYS4uLiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FlN2QwMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoKKyoqCisqKiBDb3B5cmlnaHQgMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZV9uYW1lIiBtc2dpZD0iNDg0MTQ5MTYzNTA1NTM3OTU1MyI+IlBha2V0IEdpcmnFnyBZYXJkxLFtw6fEsXPEsSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FlN2QwMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKgorKioKKyoqIENvcHlyaWdodCAyMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlX25hbWUiIG1zZ2lkPSI0ODQxNDkxNjM1MDU1Mzc5NTUzIj4iUGFrZXQgR2lyacWfIFlhcmTEsW3Dp8Sxc8SxIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg2MjFiNi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKgotKioKLSoqIENvcHlyaWdodCAyMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0qKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qKgotKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlX25hbWUiIG1zZ2lkPSI0ODQxNDkxNjM1MDU1Mzc5NTUzIj4i0J/QsNC80L7Rh9C90ZbQuiDQtNC+0YHRgi4g0LTQsCDQv9Cw0LrQtdGC0LDRniI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sCnJlbmFtZSB0byBwYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApjb3B5IHRvIHBhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzRlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qCisqKgorKiogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VfbmFtZSIgbXNnaWQ9IjQ4NDE0OTE2MzUwNTUzNzk1NTMiPiJBaWRlIGFjY8OocyBhdSBwYXF1ZXQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyZjU4NwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoKKyoqCisqKiBDb3B5cmlnaHQgMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZV9uYW1lIiBtc2dpZD0iNDg0MTQ5MTYzNTA1NTM3OTU1MyI+ItWT1aHVqdWl1anVqyDVtNW41oLVv9aE1asg1oXVqtWh1bbVpNWh1a/VuNWyIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBwYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sCmNvcHkgdG8gcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwNmQ1NgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoKKyoqCisqKiBDb3B5cmlnaHQgMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZV9uYW1lIiBtc2dpZD0iNDg0MTQ5MTYzNTA1NTM3OTU1MyI+IuGegOGemOGfkuGemOGenOGet+GekuGeuOKAi+Geh+GfhuGek+GeveGemeKAi+GeheGevOGem+KAi+GeiuGfhuGejuGevuGemuGegOGetuGemuKAi+GegOGeieGfkuGeheGelOGfiyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApjb3B5IHRvIHBhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZmU2NDcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qCisqKgorKiogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VfbmFtZSIgbXNnaWQ9IjQ4NDE0OTE2MzUwNTUzNzk1NTMiPiLQkdCw0LPRhiDRhdCw0L3QtNCw0LvRgtGL0L0g0YLRg9GB0LvQsNC80LYiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtbXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3MGNlMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoKKyoqCisqKiBDb3B5cmlnaHQgMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZV9uYW1lIiBtc2dpZD0iNDg0MTQ5MTYzNTA1NTM3OTU1MyI+IuCkquCljeCkr+CkvuCkleClh+CknCDgpKrgpLngpYHgpIHgpJog4KS44KS54KSv4KWL4KSX4KWAIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjcwY2UxCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qCisqKgorKiogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VfbmFtZSIgbXNnaWQ9IjQ4NDE0OTE2MzUwNTUzNzk1NTMiPiLgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KSq4KS54KWB4KSB4KSaIOCkuOCkueCkr+Cli+Ckl+ClgCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjJlYzZjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKgorKioKKyoqIENvcHlyaWdodCAyMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlX25hbWUiIG1zZ2lkPSI0ODQxNDkxNjM1MDU1Mzc5NTUzIj4i4La04LeQ4Laa4Lea4LaiIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgtovgtq/gt4Dgt4rgtprgtrvgt5QiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmVjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoKKyoqCisqKiBDb3B5cmlnaHQgMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZV9uYW1lIiBtc2dpZD0iNDg0MTQ5MTYzNTA1NTM3OTU1MyI+IuC2tOC3kOC2muC3muC2oiDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LaL4Lav4LeA4LeK4Laa4La74LeUIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNDM1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qCisqKgorKiogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VfbmFtZSIgbXNnaWQ9IjQ4NDE0OTE2MzUwNTUzNzk1NTMiPiLlpZfku7blrZjlj5bovJTliqnnqIvlvI8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3NyYy9jb20vYW5kcm9pZC9kZWZjb250YWluZXIvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UuamF2YSBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3NyYy9jb20vYW5kcm9pZC9kZWZjb250YWluZXIvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UuamF2YQppbmRleCA2ZTM0YmJiLi5mNjhkMWE5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9zcmMvY29tL2FuZHJvaWQvZGVmY29udGFpbmVyL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlLmphdmEKKysrIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2Uvc3JjL2NvbS9hbmRyb2lkL2RlZmNvbnRhaW5lci9EZWZhdWx0Q29udGFpbmVyU2VydmljZS5qYXZhCkBAIC0zOSwxMCArMzksOCBAQAogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5TdGF0RnM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLklNZWRpYUNvbnRhaW5lclNlcnZpY2U7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWZkNjNhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik1hYWsgb29wIHZhbmFmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTdG9vciBuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJTa2VwIHZvdWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlJvb3N0ZXJhYW5zaWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iTHlzYWFuc2lnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlNvcnRlZXIgdm9sZ2VucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlNvZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+Ikluc3RlbGxpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iTWFhayBvb3AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iU3Rvb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IkRlZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJWZWUgdWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gZ2VraWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlZvbGdlbnMgbmFhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IlZvbGdlbnMgZGF0dW0gZ2V3eXNpZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJWb2xnZW5zIGdyb290dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJXeXMgd29ydGVscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJWZXJzdGVlayB3b3J0ZWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJLb24gbmllIGRva3VtZW50IHN0b29yIG5pZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJLb24gbmllIHZvdWVyIHNrZXAgbmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iS29uIG5pZSBuYXZyYWFnIGRvZW4gb29yIGRva3VtZW50ZSBuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJPbmxhbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGdyYXRpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IkJlcmdpbmdkaWVuc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IktvcnRwYWFpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iVG9lc3RlbGxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iTm9nIHByb2dyYW1tZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+Ild5cyBnZXZvcmRlcmRlIHRvZXN0ZWxsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+Ild5cyBsw6plcmdyb290dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+Ild5cyB0b2VzdGVsZ3Jvb3R0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IkdlZW4gaXRlbXMgbmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iS2FuIGzDqmVyIG5pZSBvb3BtYWFrIG5pZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iS2FuIHNvbW1pZ2UgZG9rdW1lbnRlIG5pZSB1aXR2ZWUgbmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IkRlZWwgdmlhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzdhOGVlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLhiLDhipDhi7bhib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IuGKreGNiOGJtSDhiqgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IuGKoOGIteGJgOGIneGMpSDhi4jhi7AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i4Yqg4YmD4Y2KIOGNjeGMoOGIrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLhi6jhjY3hiK3hjI3hiK3hjI0g4Yql4Yut4YmzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IuGLqOGLneGIreGLneGIrSDhiqXhi63hibMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i4Yuw4Yit4Yu14YitIOGJoCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IuGNiOGIjeGMjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i4YmF4YqV4Yml4Yiu4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i4Yqt4Y2I4Ym1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IuGKoOGIteGJgOGIneGMpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i4Yqg4YyL4YirIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i4Yiw4Yit4YudIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4g4Ymw4YiY4Yit4Yyg4YuL4YiNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IuGJoOGIteGInSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IuGJoOGJsOGIiOGLiOGMoOGJoOGJtSDhiYDhipUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i4Ymg4YiY4Yyg4YqVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i4Yi14Yiu4Ym94YqVIOGKoOGIs+GLrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLhiLXhiK7hib3hipUg4Yuw4Yml4YmFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLhiLDhipDhi7Ug4Yib4Yi14YmA4YiY4YylIOGKoOGIjeGJsOGIs+GKq+GInSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLhiqDhiYPhjYog4YiY4Y2N4Yyg4YitIOGKoOGIjeGJsOGIs+GKq+GInSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IuGIiOGIsOGKkOGLtuGJvSDhiJjhjKDhi63hiYUg4YiY4Yi14Yir4Ym1IOGKoOGIjeGJsOGIs+GKq+GInSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IuGLqOGJheGIreGJpSDhjIrhi5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4g4YqQ4Y2DIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i4Yuo4Yib4Yqo4Yib4Ym7IOGKoOGMiOGIjeGMjeGIjuGJtuGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLhiqDhiYvhiKvhjK7hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IuGImOGIo+GIquGLq+GLjuGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IuGJsOGMqOGIm+GIqiDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLhi6jhiIvhiYEg4YiY4Yiz4Yiq4Yur4YuO4Ym94YqVIOGKoOGIs+GLrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IuGLqOGNi+GLreGIjSDhiJjhjKDhipUg4Yqg4Yiz4YutIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLhi6jhiJjhiLPhiKrhi6sg4YiY4Yyg4YqVIOGKoOGIs+GLrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IuGIneGKleGInSDhipXhjKXhiI7hib0g4Yuo4YiJ4YidIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i4Y2L4Yut4YiNIOGImOGKreGNiOGJtSDhiqDhi63hibvhiI3hiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IuGKoOGKleGLs+GKleGLtSDhiLDhipDhi7bhib3hipUg4YiY4Yiw4Yio4YudIOGKoOGIjeGJsOGJu+GIiOGInSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLhiaDhiJrhiqjhibDhiIjhi40g4Ymg4Yqp4YiNIOGLq+GMi+GIqSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5YzBlZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i2YXYs9iq2YbYr9in2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+ItmB2KrYrSDZhdmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLYrdmB2Lgg2YHZiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLYpdmG2LTYp9ihINmF2KzZhNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+Iti52LHYtiDYp9mE2LTYqNmD2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i2LnYsdi2INin2YTZgtin2KbZhdipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+Itiq2LHYqtmK2Kgg2KjYrdiz2KgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLYqNit2KsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+Itin2YTYpdi52K/Yp9iv2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+ItmB2KrYrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLYrdmB2LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+ItmF2LTYp9ix2YPYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+Itit2LDZgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiLYqtmFINiq2K3Yr9mK2K8gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLYqNit2LPYqCDYp9mE2KfYs9mFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i2KjYrdiz2Kgg2KrYp9ix2YrYriDYp9mE2KrYudiv2YrZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLYqNit2LPYqCDYp9mE2K3YrNmFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i2LnYsdi2INin2YTYrNiw2YjYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLYpdiu2YHYp9ihINin2YTYrNiw2YjYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i2KPYrtmB2YIg2K3Zgdi4INin2YTZhdiz2KrZhtivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+Itij2K7ZgdmCINil2YbYtNin2KEg2KfZhNmF2KzZhNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i2KPYrtmB2YIg2KXYsdiz2KfZhCDYt9mE2Kgg2KjYrdirINi52YYg2KfZhNmF2LPYqtmG2K/Yp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i2KfZhNij2K7Zitix2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4g2K7Yp9mE2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+Itiu2K/Zhdin2Kog2KfZhNiq2K7YstmK2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i2KfYrtiq2LXYp9ix2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i2KPYrNmH2LLYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+Itin2YTZhdiy2YrYryDZhdmGINin2YTYqti32KjZitmC2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+Iti52LHYtiDYp9mE2KPYrNmH2LLYqSDYp9mE2YXYqtmC2K/ZhdipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i2LnYsdi2INit2KzZhSDYp9mE2YXZhNmBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLYudix2LYg2K3YrNmFINin2YTYrNmH2KfYsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+ItmE2YrYsyDZh9mG2KfZgyDYo9mKINi52YbYp9i12LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLZhNinINmK2YXZg9mGINmB2KrYrSDYp9mE2YXZhNmBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLYqti52LDYsSDYrdiw2YEg2KjYudi2INin2YTZhdiz2KrZhtiv2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLZhdi02KfYsdmD2Kkg2LnYqNixIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNzQ5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJTyZluyZlkbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iVmFzaXTJmXNpbMmZIGHDp8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iYnVyYXlhIHNheGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJRb3ZsdXEgeWFyYWTEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iVG9ybHUgZ8O2csO8bsO8xZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iU2l5YWjEsSBnw7Zyw7xuw7zFn8O8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IkJ1bmxhcmRhbiBiaXJpIMO8enLJmSBzxLFyYWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iQXh0YXLEscWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJBeWFybGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iQcOnxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IllhZGRhIHNheGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iUGF5bGHFn8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IlNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IHNlw6dpbG1pxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iQWQgw7x6csmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iVGFyaXggw7x6csmZIGTJmXlpxZ9tacWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IsOWbMOnw7wgw7x6csmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iS8O2a2zJmXJpIGfDtnN0yZlyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iS8O2a2zJmXJpIGdpemzJmWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iU8mZbsmZZGkgeWFkZGEgc2F4bGF5YSBiaWxtyZlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IlNvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiDDtmTJmW5pxZ9zaXoiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igcm9vdF90eXBlX3NlcnZpY2UgKDIxNzg4NTQ4OTQ0MTY3NzU0MDkpIC0tPgorICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iUcSxc2EgeW9sbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJDaWhhemxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IkRhaGEgw6dveCB0yZl0YmlxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iUWFiYXFjxLFsIGNpaGF6bGFyxLEgZ8O2csO8bnTDvGzJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IkZheWwgw7Zsw6fDvHPDvG7DvCBnw7Zyw7xudMO8bMmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJDaWhheiDDtmzDp8O8c8O8bsO8IGfDtnLDvG50w7xsyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJFbGVtZW50IHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkZheWzEsSBhw6dhIGJpbG1pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iQsmZemkgc8mZbsmZZGzJmXJpIHNpbMmZIGJpbG1pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJCdW51biB2YXNpdMmZc2lsyZkgcGF5bGHFnzoiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNjExOGIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IlPJmW7JmWRsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJWYXNpdMmZc2lsyZkgYcOnxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJidXJheWEgc2F4bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IlFvdmx1cSB5YXJhZMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJUb3JsdSBnw7Zyw7xuw7zFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJTaXlhaMSxIGfDtnLDvG7DvMWfw7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iQnVubGFyZGFuIGJpcmkgw7x6csmZIHPEsXJhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJBeHRhcsSxxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IkF5YXJsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJBw6fEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iWWFkZGEgc2F4bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJQYXlsYcWfxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iU2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gc2XDp2lsbWnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJBZCDDvHpyyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJUYXJpeCDDvHpyyZkgZMmZeWnFn21pxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iw5Zsw6fDvCDDvHpyyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJLw7ZrbMmZcmkgZ8O2c3TJmXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJLw7ZrbMmZcmkgZ2l6bMmZZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJTyZluyZlkaSB5YWRkYSBzYXhsYXlhIGJpbG3JmWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iU29uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IMO2ZMmZbmnFn3NpeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjg1NzM2MjcwMDU3NjAwNjY5NCI+IlhpZG3JmXRsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IlHEsXNhIHlvbGxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iQ2loYXpsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJEYWhhIMOnb3ggdMmZdGJpcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IlFhYmFxY8SxbCBjaWhhemxhcsSxIGfDtnLDvG50w7xsyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJGYXlsIMO2bMOnw7xzw7xuw7wgZ8O2csO8bnTDvGzJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iQ2loYXogw7Zsw6fDvHPDvG7DvCBnw7Zyw7xudMO8bMmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iRWxlbWVudCB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJGYXlsxLEgYcOnYSBiaWxtaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IkLJmXppIHPJmW7JmWRsyZlyaSBzaWzJmSBiaWxtaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb3JlIiBtc2dpZD0iNzExNzQyMDk4NjUyOTI5NzE3MSI+IkRhaGEgw6dveCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvYWRpbmciIG1zZ2lkPSI3OTMzNjgxMjYwMjk2MDIxMTgwIj4iWcO8a2zJmW5pcuKApiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyNDJiMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i0JTQvtC60YPQvNC10L3RgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLQntGC0LLQsNGA0Y/QvdC1INC+0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+ItCX0LDQv9Cw0LfQstCw0L3QtSDQsi/RitCyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+ItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0LDQv9C60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i0JjQt9Cz0LvQtdC0INCyINC80YDQtdC20LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i0KHQv9C40YHRitGH0LXQvSDQuNC30LPQu9C10LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i0KHQvtGA0YLQuNGA0LDQvdC1INC/0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLQotGK0YDRgdC10L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i0J3QsNGB0YLRgNC+0LnQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i0J7RgtCy0LDRgNGP0L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLQl9Cw0L/QsNC30LLQsNC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+ItCh0L/QvtC00LXQu9GP0L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+ItCY0LfRgtGA0LjQstCw0L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiLQmNC30LHRgNCw0YXRgtC1IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i0J/QviDQuNC80LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLQn9C+INC00LDRgtCwINC90LAg0L/RgNC+0LzRj9C90LDRgtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+ItCf0L4g0YDQsNC30LzQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i0J/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L7RgdC90L7QstC90LjRgtC1INC10LvQtdC80LXQvdGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i0KHQutGA0LjQstCw0L3QtSDQvdCwINC+0YHQvdC+0LLQvdC40YLQtSDQtdC70LXQvNC10L3RgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLQl9Cw0L/QsNC30LLQsNC90LXRgtC+INC90LAg0LTQvtC60YPQvNC10L3RgtCwINC90LUg0LHQtSDRg9GB0L/QtdGI0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLQodGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0L/QsNC/0LrQsNGC0LAg0L3QtSDQsdC1INGD0YHQv9C10YjQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i0JfQsNGP0LLQutCw0YLQsCDQt9CwINC00L7QutGD0LzQtdC90YLQuCDQvdC1INCx0LUg0YPRgdC/0LXRiNC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLQodC60L7RgNC+0YjQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4i0KHQstC+0LHQvtC00L3QvjogPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i0KPRgdC70YPQs9C4INC30LAg0YHRitGF0YDQsNC90LXQvdC40LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i0J/RgNC10LrQuCDQv9GK0YLQuNGJ0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+ItCj0YHRgtGA0L7QudGB0YLQstCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i0J7RidC1INC/0YDQuNC70L7QttC10L3QuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i0KPRgdGC0YDQvtC50YHRgtCy0LAg0YEg0YDQsNC30YjQuNGA0LXQvdC4INGELdC40LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQuNGPINGA0LDQt9C80LXRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i0J/QvtC60LDQt9Cy0LDQvdC1INC90LAg0YDQsNC30LzQtdGA0LAg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLQndGP0LzQsCDQtdC70LXQvNC10L3RgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i0KTQsNC50LvRitGCINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i0J3Rj9C60L7QuCDQtNC+0LrRg9C80LXQvdGC0Lgg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQuNC30YLRgNC40YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLQodC/0L7QtNC10LvRj9C90LUg0YfRgNC10LciPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YzdiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRvY3VtZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iT2JyZSBkZXMgZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IkRlc2EgYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJDcmVhIHVuYSBjYXJwZXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlZpc3VhbGl0emFjacOzIGRlIHF1YWRyw61jdWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlZpc3VhbGl0emFjacOzIGRlIGxsaXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJPcmRlbmEgcGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iQ2VyY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IkNvbmZpZ3VyYWNpw7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJPYnJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IkRlc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IkNvbXBhcnRlaXgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJTdXByaW1laXgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iU2VsZWNjaW9uYXRzOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlBlciBub20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJQZXIgZGF0YSBkZSBtb2RpZmljYWNpw7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iUGVyIG1pZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJNb3N0cmEgbGVzIGFycmVscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJBbWFnYSBsZXMgYXJyZWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJObyBzXCdoYSBwb2d1dCBkZXNhciBlbCBkb2N1bWVudC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iTm8gc1wnaGEgcG9ndXQgY3JlYXIgbGEgY2FycGV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+Ik5vIHNcJ2hhbiBwb2d1dCBjb25zdWx0YXIgZWxzIGRvY3VtZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IlJlY2VudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBsbGl1cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iU2VydmVpcyBkXCdlbW1hZ2F0emVtYXRnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJEcmVjZXJlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iRGlzcG9zaXRpdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJNw6lzIGFwbGljYWNpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iTW9zdHJhIGVscyBkaXNwb3NpdGl1cyBhdmFuw6dhdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJNb3N0cmEgbGEgbWlkYSBkZWwgZml0eGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJNb3N0cmEgbGEgbWlkYSBkZWwgZGlzcG9zaXRpdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IlNlbnNlIGVsZW1lbnRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iTm8gZXMgcG90IG9icmlyIGVsIGZpdHhlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Ik5vIGVzIHBvZGVuIHN1cHJpbWlyIGFsZ3VucyBkb2N1bWVudHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IkNvbXBhcnRlaXggbWl0amFuw6dhbnQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwODljOGIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRva3VtZW50eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iT3RldsWZw610IHoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IlVsb8W+aXQgZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iVnl0dm/FmWl0IHNsb8W+a3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iTcWZw63FvmthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlNlem5hbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLFmGFkaXQgcG9kbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJIbGVkYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+Ik5hc3RhdmVuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJPdGV2xZnDrXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iVWxvxb5pdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iU2TDrWxldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IlNtYXphdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiJWeWJyw6FubzogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJQb2RsZSBuw6F6dnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJQb2RsZSBkYXRhIMO6cHJhdnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iUG9kbGUgdmVsaWtvc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iWm9icmF6aXQga2/FmWVueSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJTa3LDvXQga2/FmWVueSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iVWxvxb5lbsOtIGRva3VtZW50dSBzZSBuZXpkYcWZaWxvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IlNsb8W+a3Ugc2UgbmVwb2RhxZlpbG8gdnl0dm/FmWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iU2V6bmFtIGRva3VtZW50xa8gc2UgbmVwb2RhxZlpbG8gbmHEjcOtc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJQb3NsZWRuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiJWb2xuw70gcHJvc3RvcjogPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iU2x1xb5ieSDDumxvxb5pxaF0xJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iS2zDoXZlc292w6kgemtyYXRreSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iWmHFmcOtemVuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJEYWzFocOtIGFwbGlrYWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iWm9icmF6aXQgcG9rcm/EjWlsw6EgemHFmcOtemVuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJab2JyYXppdCB2ZWxpa29zdCBzb3Vib3J1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJab2JyYXppdCB2ZWxpa29zdCB6YcWZw616ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IsW9w6FkbsOpIHBvbG/Fvmt5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iU291Ym9yIG5lbHplIG90ZXbFmcOtdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTsSba3RlcsOpIGRva3VtZW50eSBuZWx6ZSBzbWF6YXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iU2TDrWxldCBwb21vY8OtIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZmOWE3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLDhWJuIGZyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iR2VtIHDDpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJPcHJldCBtYXBwZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJHaXR0ZXJ2aXNuaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+Ikxpc3RldmlzbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJTb3J0w6lyIGVmdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iU8O4ZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iSW5kc3RpbGxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IsOFYm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iR2VtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJEZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJTbGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gZXIgdmFsZ3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iRWZ0ZXIgbmF2biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IkVmdGVyIMOmbmRyaW5nc2RhdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iRWZ0ZXIgc3TDuHJyZWxzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IlZpcyByw7hkZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IlNranVsIHLDuGRkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkRva3VtZW50ZXQga3VubmUgaWtrZSBnZW1tZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iTWFwcGVuIGt1bm5lIGlra2Ugb3ByZXR0ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJEb2t1bWVudGVybmUga3VubmUgaWtrZSBmb3Jlc3DDuHJnZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iU2VuZXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBsZWRpZyBwbGFkcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IkxhZ3JpbmdzdGplbmVzdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IkdlbnZlamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkVuaGVkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJGbGVyZSBhcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iVmlzIGF2YW5jZXJlZGUgZW5oZWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IlZpcyBmaWxzdMO4cnJlbHNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJWaXMgZW5oZWRlbnMgc3TDuHJyZWxzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IkluZ2VuIGVsZW1lbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkZpbGVuIGthbiBpa2tlIMOlYm5lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTm9nbGUgZG9rdW1lbnRlciBrYW4gaWtrZSBzbGV0dGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IkRlbCB2aWEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNDQ4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRva3VtZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iw5ZmZm5lbiB2b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IlNwZWljaGVybiB1bnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJPcmRuZXIgZXJzdGVsbGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlJhc3RlcmFuc2ljaHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iTGlzdGVuYW5zaWNodCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJTb3J0aWVyZW4gbmFjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlN1Y2hlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iRWluc3RlbGx1bmdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IsOWZmZuZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iU3BlaWNoZXJuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJUZWlsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJMw7ZzY2hlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IGF1c2dld8OkaGx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+Ik5hY2ggTmFtZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+Ik5hY2ggw4RuZGVydW5nc2RhdHVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+Ik5hY2ggR3LDtsOfZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IlJvb3QtVmVyemVpY2huaXMgYW56ZWlnZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iUm9vdC1WZXJ6ZWljaG5pcyBhdXNibGVuZGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJEb2t1bWVudCBrb25udGUgbmljaHQgZ2VzcGVpY2hlcnQgd2VyZGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJPcmRuZXIga29ubnRlIG5pY2h0IGVyc3RlbGx0IHdlcmRlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJGZWhsZXIgYmVpIGRlciBBbmZvcmRlcnVuZyB2b24gRG9rdW1lbnRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IkxldHp0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiB2ZXJmw7xnYmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iU3BlaWNoZXJkaWVuc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IlZlcmtuw7xwZnVuZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJHZXLDpHRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iV2VpdGVyZSBBcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iRXJ3ZWl0ZXJ0ZSBHZXLDpHRlIGFuemVpZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iRGF0ZWlncsO2w59lIGFuemVpZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJHZXLDpHRlYWJtZXNzdW5nZW4gYW56ZWlnZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJLZWluZSBFbGVtZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkRhdGVpIGthbm4gbmljaHQgZ2XDtmZmbmV0IHdlcmRlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IkVpbmlnZSBEb2t1bWVudGUga29ubnRlbiBuaWNodCBnZWzDtnNjaHQgd2VyZGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJUZWlsZW4gw7xiZXIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYzMzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+Is6IzrPOs8+BzrHPhs6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLOhs69zr/Ouc6zzrzOsSDOsc+Az4wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+Is6Rz4DOv864zq7Ous61z4XPg863IM+DzrUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4izpTOt868zrnOv8+Fz4HOs86vzrEgz4bOsc66zq3Ou86/z4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4izqDPgc6/zrLOv867zq4gz4DOu86tzrPOvM6xz4TOv8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+Is6gz4HOv86yzr/Ou86uIM67zq/Pg8+EzrHPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLOpM6xzr7Ouc69z4zOvM63z4POtyDOus6xz4TOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+Is6Rzr3Osc62zq7PhM63z4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4izqHPhc64zrzOr8+DzrXOuc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4izobOvc6/zrnOs868zrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4izpHPgM6/zrjOrs66zrXPhc+DzrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+Is6azr/Ouc69zq4gz4fPgc6uz4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+Is6UzrnOsc6zz4HOsc+Gzq4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4izpXPgM65zrvOrc+HzrjOt866zrHOvSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+Is6azrHPhM6sIM+Mzr3Ov868zrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLOms6xz4TOrCDOt868zrXPgc6/zrzOt869zq/OsSDPhM+Bzr/PgM6/z4DOv86vzrfPg863z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4izprOsc+EzqwgzrzOrc6zzrXOuM6/z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLOlc68z4bOrM69zrnPg863IM+Bzq/Ots6xz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4izpHPgM+MzrrPgc+Fz4jOtyDPgc6vzrbOsc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLOkc+Azr/PhM+Fz4fOr86xIM6xz4DOv864zq7Ous61z4XPg863z4Igz4TOv8+FIM61zrPOs8+BzqzPhs6/z4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4izpHPgM6/z4TPhc+Hzq/OsSDOtM63zrzOuc6/z4XPgc6zzq/Osc+CIM+GzrHOus6tzrvOv8+FIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4izpHPgM6/z4TPhc+Hzq/OsSDPhc+Azr/Oss6/zrvOrs+CICDOtc+Bz4nPhM6uzrzOsc+Ezr/PgiDOs865zrEgzq3Os86zz4HOsc+GzrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLOoM+Bz4zPg8+GzrHPhM6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IM61zrvOtc+NzrjOtc+BzrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiLOpc+AzrfPgc61z4POr861z4IgzrHPgM6/zrjOrs66zrXPhc+DzrfPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLOo8+Fzr3PhM6/zrzOtc+Nz4POtc65z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+Is6jz4XPg866zrXPhc6tz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLOoM61z4HOuc+Dz4PPjM+EzrXPgc61z4IgzrXPhs6xz4HOvM6/zrPOrc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4izpXOvM+GzqzOvc65z4POtyDPgM+Bzr/Ot86zzrzOrc69z4nOvSDPg8+Fz4POus61z4XPjs69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4izpXOvM+GzqzOvc65z4POtyDOvM61zrPOrc64zr/Phc+CIM6xz4HPh861zq/Ov8+FIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLOlc68z4bOrM69zrnPg863IM68zrXOs86tzrjOv8+Fz4Igz4PPhc+DzrrOtc+Fzq7PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+Is6UzrXOvSDPhc+AzqzPgc+Hzr/Phc69IM+Dz4TOv865z4fOtc6vzrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ez4wgz4TOvyDOrM69zr/Ouc6zzrzOsSDPhM6/z4UgzrHPgc+HzrXOr86/z4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Is6UzrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDOtM65zrHOs8+BzrHPhs6uIM6/z4HOuc+DzrzOrc69z4nOvSDOtc6zzrPPgc6sz4bPic69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+Is6azr/Ouc69zq4gz4fPgc6uz4POtyDOvM6tz4PPiSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTVlN2YxCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9jdW1lbnRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJPcGVuIGZyb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IlNhdmUgdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iQ3JlYXRlIGZvbGRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJHcmlkIHZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iTGlzdCB2aWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlNvcnQgYnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJTZWFyY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IlNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iT3BlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJTYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJTaGFyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IkRlbGV0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IHNlbGVjdGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IkJ5IG5hbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJCeSBkYXRlIG1vZGlmaWVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IkJ5IHNpemUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJTaG93IHJvb3RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IkhpZGUgcm9vdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkZhaWxlZCB0byBzYXZlIGRvY3VtZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IkZhaWxlZCB0byBjcmVhdGUgZm9sZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iRmFpbGVkIHRvIHF1ZXJ5IGRvY3VtZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IlJlY2VudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBmcmVlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iU3RvcmFnZSBzZXJ2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJTaG9ydGN1dHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkRldmljZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJNb3JlIGFwcHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJEaXNwbGF5IGFkdmFuY2VkIGRldmljZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJEaXNwbGF5IGZpbGUgc2l6ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iRGlzcGxheSBkZXZpY2Ugc2l6ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+Ik5vIGl0ZW1zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iQ2Fubm90IG9wZW4gZmlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iVW5hYmxlIHRvIGRlbGV0ZSBzb21lIGRvY3VtZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJTaGFyZSB2aWEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1ZTdmMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRvY3VtZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iT3BlbiBmcm9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTYXZlIHRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkNyZWF0ZSBmb2xkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iR3JpZCB2aWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+Ikxpc3QgdmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJTb3J0IGJ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJTZXR0aW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Ik9wZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iU2F2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iU2hhcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJEZWxldGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiBzZWxlY3RlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJCeSBuYW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iQnkgZGF0ZSBtb2RpZmllZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJCeSBzaXplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iU2hvdyByb290cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJIaWRlIHJvb3RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJGYWlsZWQgdG8gc2F2ZSBkb2N1bWVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJGYWlsZWQgdG8gY3JlYXRlIGZvbGRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IkZhaWxlZCB0byBxdWVyeSBkb2N1bWVudHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJSZWNlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gZnJlZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlN0b3JhZ2Ugc2VydmljZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iU2hvcnRjdXRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJEZXZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iTW9yZSBhcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iRGlzcGxheSBhZHZhbmNlZCBkZXZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iRGlzcGxheSBmaWxlIHNpemUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IkRpc3BsYXkgZGV2aWNlIHNpemUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJObyBpdGVtcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkNhbm5vdCBvcGVuIGZpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IlVuYWJsZSB0byBkZWxldGUgc29tZSBkb2N1bWVudHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iU2hhcmUgdmlhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2ZmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2N1bWVudG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJBYnJpciBkZXNkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iR3VhcmRhciBlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJDcmVhciBjYXJwZXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlZpc3RhIGRlIGN1YWRyw61jdWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlZpc3RhIGRlIGxpc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+Ik9yZGVuYXIgcG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iQnVzY2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJDb25maWd1cmFjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IkFicmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+Ikd1YXJkYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IkNvbXBhcnRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IkVsaW1pbmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gc2VsZWNjaW9uYWRvKHMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlBvciBub21icmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJQb3IgZmVjaGEgZGUgbW9kaWZpY2FjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQb3IgdGFtYcOxbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+Ik1vc3RyYXIgcmHDrWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJPY3VsdGFyIHJhw61jZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkVycm9yIGFsIGd1YXJkYXIgZWwgZG9jdW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IkVycm9yIGFsIGNyZWFyIGxhIGNhcnBldGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJFcnJvciBhbCBjb25zdWx0YXIgZG9jdW1lbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IlJlY2llbnRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBkZSBlc3BhY2lvIGxpYnJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iQWxtYWNlbmFtaWVudG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iQWNjZXNvcyBkaXJlY3RvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iRGlzcG9zaXRpdm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iTcOhcyBhcGxpY2FjaW9uZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJNb3N0cmFyIGRpc3Bvc2l0aXZvcyBhdmFuemFkb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJNb3N0cmFyIHRhbWHDsW8gZGVsIGFyY2hpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+Ik1vc3RyYXIgdGFtYcOxbyBkZWwgZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJTaW4gZWxlbWVudG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iTm8gc2UgcHVlZGUgYWJyaXIgZWwgYXJjaGl2by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Ik5vIGVzIHBvc2libGUgZWxpbWluYXIgYWxndW5vcyBkb2N1bWVudG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJDb21wYXJ0aXIgbWVkaWFudGUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODI1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRvY3VtZW50b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IkFicmlyIGRlc2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJHdWFyZGFyIGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkNyZWFyIGNhcnBldGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iVmlzdGEgZGUgY3VhZHLDrWN1bGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iVmlzdGEgZGUgbGlzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iT3JkZW5hciBwb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJCdXNjYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IkFqdXN0ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJBYnJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJHdWFyZGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJDb21wYXJ0aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJFbGltaW5hciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiJTZWxlY2Npb25hZG86IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iUG9yIG5vbWJyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IlBvciBmZWNoYSBkZSBtb2RpZmljYWNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IlBvciB0YW1hw7FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iTW9zdHJhciByYcOtY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+Ik9jdWx0YXIgcmHDrWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iRXJyb3IgYWwgZ3VhcmRhciBkb2N1bWVudG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iRXJyb3IgYWwgY3JlYXIgbGEgY2FycGV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IkVycm9yIGFsIGNvbnN1bHRhciBsaXN0YSBkZSBkb2N1bWVudG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iUmVjaWVudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gZGUgZXNwYWNpbyBsaWJyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlNlcnZpY2lvcyBhbG1hY2VuYW1pZW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJBY2Nlc29zIGRpcmVjdG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJEaXNwb3NpdGl2b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJNw6FzIGFwbGljYWNpb25lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+Ik1vc3RyYXIgZGlzcG9zaXRpdm9zIGF2YW56YWRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+Ik1vc3RyYXIgdGFtYcOxbyBkZWwgYXJjaGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iTW9zdHJhciB0YW1hw7FvIGRlbCBkaXNwb3NpdGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IlNpbiBlbGVtZW50b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJFcnJvciBhbCBhYnJpciBlbCBhcmNoaXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJObyBlcyBwb3NpYmxlIGVsaW1pbmFyIGFsZ3Vub3MgZG9jdW1lbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJDb21wYXJ0aXIgYSB0cmF2w6lzIGRlIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MTI5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVuZGlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJBdmE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTYWx2ZXN0YToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iTG9vIGthdXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlJ1dWR1c3Rpa2t1dmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iTG9lbmRpa3V2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJTb3J0aW1pc2FsdXM6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iT3RzaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJTZWFkZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJBdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iU2FsdmVzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IkphZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJLdXN0dXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gb24gdmFsaXR1ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJOaW1lIGrDpHJnaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+Ik11dXRtaXNrdXVww6RldmEgasOkcmdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IlN1dXJ1c2UgasOkcmdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iS3V2YSBqdXVyZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iUGVpZGEganV1cmVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJEb2t1bWVuZGkgc2FsdmVzdGFtaW5lIGViYcO1bm5lc3R1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJLYXVzdGEgbG9vbWluZSBlYmHDtW5uZXN0dXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJEb2t1bWVudGlkZSBww6RyaW5nIGViYcO1bm5lc3R1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IkhpbGp1dGlzZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gb24gdmFiYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+Ik3DpGx1cnV1bWkgdGVlbnVzZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iT3RzZXRlZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IlNlYWRtZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJSb2hrZW0gcmFrZW5kdXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iS3V2YSB0aXBwc2VhZG1lZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+Ikt1dmEgZmFpbGkgc3V1cnVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJLdXZhIHNlYWRtZSBzdXVydXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLDnGtzdXNpIGVpIG9sZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkZhaWxpIGVpIHNhYSBhdmFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTcO1bmRhIGRva3VtZW50aSBlaSDDtW5uZXN0dSBrdXN0dXRhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iSmFnYWdlIHRlZW51c2VnYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyMmIzNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i2KfYs9mG2KfYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i2KjYp9iyINqp2LHYr9mGINin2LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+Itiw2K7bjNix2Ycg2K/YsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLYp9uM2KzYp9ivINm+2YjYtNmHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+ItmG2YXYp9uMINis2K/ZiNmE24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i2YbZhdin24wg2YHZh9ix2LPYquKAjNmI2KfYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLZhdix2KrYqOKAjNiz2KfYstuMINio2LEg2KfYs9in2LMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLYrNiz2KrYrNmIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLYqtmG2LjbjNmF2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Itio2KfYsiDaqdix2K/ZhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLYsNiu24zYsdmHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLYp9i02KrYsdin2qnigIzar9iw2KfYsduMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i2K3YsNmBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4g2KfZhtiq2K7Yp9ioINi02K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i2KjYsSDYp9iz2KfYsyDZhtin2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLYqNixINin2LPYp9izINiq2KfYsduM2K4g2KfYtdmE2KfYrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLYqNixINin2LPYp9izINin2YbYr9in2LLZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+ItmG2YXYp9uM2LQg2LHbjNi02YfigIzZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+Itm+2YbZh9in2YYg2qnYsdiv2YYg2LHbjNi02YfigIzZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLYsNiu24zYsdmHINiz2YbYryDYp9mG2KzYp9mFINmG2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLYp9uM2KzYp9ivINm+2YjYtNmHINin2YbYrNin2YUg2YbYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i2KzYs9iq2KzZiNuMINin2LPZhtin2K8g2YbYp9mF2YjZgdmCINio2YjYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+Itin2K7bjNixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+INii2LLYp9ivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i2K7Yr9mF2KfYqiDYsNiu24zYsdmH4oCM2LPYp9iy24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i2YXbjNin2YbYqNix2YfYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i2K/Ys9iq2q/Yp9mH4oCM2YfYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+Itio2LHZhtin2YXZh+KAjNmH2KfbjCDYqNuM2LTYqtixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i2YbZhdin24zYtCDYr9iz2Krar9in2YfigIzZh9in24wg2b7bjNi02LHZgdiq2YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLZhtmF2KfbjNi0INin2YbYr9in2LLZhyDZgdin24zZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i2YbZhdin24zYtCDYp9mG2K/Yp9iy2Ycg2LXZgdit2Ycg2YbZhdin24zYtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+ItmF2YjYsdiv24wg2YXZiNis2YjYryDZhtuM2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+ItmB2KfbjNmEINio2KfYsiDZhtmF24zigIzYtNmI2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Itio2LHYrtuMINin2LIg2KfYs9mG2KfYryDYrdiw2YEg2YbZhduM4oCM2LTZiNmG2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i2KfYtNiq2LHYp9qp4oCM2q/YsNin2LHbjCDYp9iyINi32LHbjNmCIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQwZWNkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJBc2lha2lyamF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJBdm9pbm5hIGFsa2FlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iVGFsbGVubmEga29odGVlc2VlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJMdW8ga2Fuc2lvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlJ1dWR1a2tvbsOka3ltw6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iTHVldHRlbG9uw6RreW3DpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJMYWppdHRlbHVwZXJ1c3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iSGFrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iQXNldHVrc2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iQXZhYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJUYWxsZW5uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iSmFhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iUG9pc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gdmFsaXR0dWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iTmltZW4gbXVrYWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iTXVva2thdXNww6RpdsOkbiBtdWthYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iS29vbiBtdWthYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJOw6R5dMOkIGp1dXJldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJQaWlsb3RhIGp1dXJldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iQXNpYWtpcmphbiB0YWxsZW5udXMgZXDDpG9ubmlzdHVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IkthbnNpb24gbHVvbWluZW4gZXDDpG9ubmlzdHVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iRG9rdW1lbnR0aWt5c2VseSBlcMOkb25uaXN0dWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJWaWltZWlzaW1tw6R0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IHZhcGFhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJUYWxsZW5udXNwYWx2ZWx1dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJQaWtha3V2YWtrZWV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJMYWl0dGVldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+Ikxpc8Okw6Qgc292ZWxsdWtzaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJOw6R5dMOkIGtlaGl0dHluZWV0IGxhaXR0ZWV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iTsOkeXTDpCB0aWVkb3N0b24ga29rbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iTsOkeXTDpCBsYWl0dGVlbiBrb2tvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iRWkga29odGVpdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJUaWVkb3N0b2EgZWkgdm9pIGF2YXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJKb2l0YWtpbiBhc2lha2lyam9qYSBlaSB2b2kgcG9pc3RhYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJKYWEgc292ZWxsdWtzZXNzYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODM3Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9jdW1lbnRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJPdXZlcnQgw6AgcGFydGlyIGRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJFbnJlZ2lzdHJlciBkYW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkNyw6llciB1biBkb3NzaWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IkdyaWxsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJMaXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJUcmllciBwYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJSZWNoZXJjaGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJQYXJhbcOodHJlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Ik91dnJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJFbnJlZ2lzdHJlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iUGFydGFnZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJTdXBwcmltZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPsKgc8OpbGVjdGlvbm7DqShzKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJQYXIgbm9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUGFyIGRhdGUgZGUgbW9kaWZpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IlBhciB0YWlsbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJBZmZpY2hlciBsZXMgcmFjaW5lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJNYXNxdWVyIGxlcyByYWNpbmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLDiWNoZWMgZGUgbFwnZW5yZWdpc3RyZW1lbnQgZHUgZG9jdW1lbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iw4ljaGVjIGRlIGxhIGNyw6lhdGlvbiBkdSBkb3NzaWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iw4ljaGVjIGRlIGxhIGRlbWFuZGUgZGUgZG9jdW1lbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJSw6ljZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPsKgZGlzcG9uaWJsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlNlcnZpY2VzIGRlIHN0b2NrYWdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IlJhY2NvdXJjaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkFwcGFyZWlscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IlBsdXMgZFwnYXBwbGljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iQWZmaWNoZXIgbGVzIGFwcGFyZWlscyBhdmFuY8OpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IkFmZmljaGVyIGxhIHRhaWxsZSBkdSBmaWNoaWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJUYWlsbGUgZGUgbFwnw6ljcmFuIGRlIGxcJ2FwcGFyZWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iQXVjdW4gw6lsw6ltZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iSW1wb3NzaWJsZSBkXCdvdXZyaXIgbGUgZmljaGllciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgY2VydGFpbnMgZG9jdW1lbnRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IlBhcnRhZ2VyIHBhciI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5YWVkYQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9jdW1lbnRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJPdXZyaXIgw6AgcGFydGlyIGRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJFbnJlZ2lzdHJlciBzb3VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkNyw6llciB1biBkb3NzaWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IkdyaWxsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJMaXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJUcmllciBwYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJSZWNoZXJjaGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJQYXJhbcOodHJlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Ik91dnJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJFbnJlZ2lzdHJlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iUGFydGFnZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJTdXBwcmltZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPsKgw6lsw6ltZW50KHMpIHPDqWxlY3Rpb25uw6kocykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iUGFyIG5vbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IlBhciBkYXRlIGRlIG1vZGlmaWNhdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQYXIgdGFpbGxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iQWZmaWNoZXIgbGVzIHLDqXBlcnRvaXJlcyByYWNpbmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+Ik1hc3F1ZXIgbGVzIHLDqXBlcnRvaXJlcyByYWNpbmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLDiWNoZWMgZGUgbFwnZW5yZWdpc3RyZW1lbnQgZHUgZG9jdW1lbnQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IsOJY2hlYyBkZSBsYSBjcsOpYXRpb24gZHUgZG9zc2llci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiLDiWNoZWMgZGUgbGEgZGVtYW5kZSBkZSBkb2N1bWVudHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iUsOpY2VudHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiJFc3BhY2UgZGlzcG9uaWJsZcKgOiA8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJTZXJ2aWNlcyBkZSBzdG9ja2FnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJSYWNjb3VyY2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJBcHBhcmVpbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJBdXRyZXMgYXBwbGljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iQWZmaWNoZXIgbGVzIGFwcGFyZWlscyBhdmFuY8OpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IkFmZmljaGVyIGxhIHRhaWxsZSBkZXMgZmljaGllcnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IkFmZmljaGVyIGxhIGNhcGFjaXTDqSBkZSBzdG9ja2FnZSBkZXMgYXBwYXJlaWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iQXVjdW4gw6lsw6ltZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iSW1wb3NzaWJsZSBkXCdvdXZyaXIgbGUgZmljaGllci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IkltcG9zc2libGUgZGUgc3VwcHJpbWVyIGNlcnRhaW5zIGRvY3VtZW50cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iUGFydGFnZXIgdmlhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDdmY2JhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLgpKbgpLjgpY3gpKTgpL7gpLXgpYfgpJzgpLwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IuCkr+CkueCkvuCkgiDgpLjgpYcg4KSW4KWL4KSy4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLgpK/gpLngpL7gpIIg4KS44KS54KWH4KSc4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IuCkq+CkvOCli+CksuCljeCkoeCksCDgpKzgpKjgpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i4KSX4KWN4KSw4KS/4KShIOCkpuClg+CktuCljeCkryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLgpLjgpYLgpJrgpYAg4KSm4KWD4KS24KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IuCkh+CkuOCkuOClhyDgpJXgpY3gpLDgpK7gpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i4KSW4KWL4KSc4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLgpLjgpYfgpJ/gpL/gpILgpJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLgpJbgpYvgpLLgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i4KS44KS54KWH4KSc4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLgpLjgpL7gpJ3gpL4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i4KS54KSf4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4g4KSa4KSv4KSo4KS/4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IuCkqOCkvuCkriDgpJXgpYcg4KSF4KSo4KWB4KS44KS+4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i4KSs4KSm4KSy4KS+4KS1IOCkleClhyDgpKbgpL/gpKjgpL7gpILgpJUg4KSV4KWHIOCkheCkqOClgeCkuOCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLgpIbgpJXgpL7gpLAg4KSV4KWHIOCkheCkqOClgeCkuOCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IuCksOClguCknyDgpKbgpL/gpJbgpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i4KSw4KWC4KSfIOCkm+Ckv+CkquCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i4KSm4KS44KWN4KSk4KS+4KS14KWH4KSc4KS8IOCkuOCkueClh+CknOCkqOClhyDgpK7gpYfgpIIg4KS14KS/4KSr4KSyIOCksOCkueCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLgpKvgpLzgpYvgpLLgpY3gpKHgpLAg4KSs4KSo4KS+4KSo4KWHIOCkruClh+CkgiDgpLXgpL/gpKvgpLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiLgpKbgpLjgpY3gpKTgpL7gpLXgpYfgpJzgpYvgpIIg4KSV4KWHIOCksuCkv+CkjyDgpJXgpY3gpLXgpYfgpLDgpYAg4KSV4KSw4KSo4KWHIOCkruClh+CkgiDgpLXgpL/gpKvgpLIg4KSw4KS54KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i4KS54KS+4KSyIOCkueClgCDgpJXgpYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4g4KSw4KS/4KSV4KWN4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkuOClh+CkteCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLgpLbgpYngpLDgpY3gpJ/gpJXgpJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IuCkieCkquCkleCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IuCkheCkp+Ckv+CklSDgpJDgpKrgpY3gpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLgpIngpKjgpY3gpKjgpKQg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleCliyDgpKbgpL/gpJbgpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLgpKvgpLzgpL7gpIfgpLIg4KSV4KS+IOCkhuCkleCkvuCksCDgpKbgpL/gpJbgpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IuCkieCkquCkleCksOCkoyDgpJXgpL4g4KSG4KSV4KS+4KSwIOCkpuCkv+CkluCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IuCkleCli+CkiCDgpIbgpIfgpJ/gpK4g4KSo4KS54KWA4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i4KSr4KS84KS+4KSH4KSyIOCkqOCkueClgOCkgiDgpJbgpYvgpLLgpYAg4KSc4KS+IOCkuOCkleCkpOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i4KSV4KWB4KSbIOCkpuCkuOCljeCkpOCkvuCkteClh+CknOCkvOCli+CkgiDgpJXgpYsg4KS54KSf4KS+4KSo4KWHIOCkruClh+CkgiDgpIXgpJXgpY3gpLfgpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i4KSH4KS44KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpLjgpL7gpJ3gpL4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2MyZjA0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik90dm9yaSBpeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU3ByZW1pIHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iSXpyYWRpIG1hcHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iUHJpa2F6IHJlxaFldGtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlByaWtheiBwb3Bpc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iUG9yZWRhbm8gcG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJQcmV0cmHFvml2YW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iUG9zdGF2a2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJPdHZhcmFuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iU3ByZW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJEaWplbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJJemJyacWhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiJPZGFicmFubzogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJQbyBrb3Jpc25pa3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJQbyBkYXR1bXUgaXptamVuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQbyB2ZWxpxI1pbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJQcmlrYcW+aSBrb3JpamVuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJTYWtyaWoga29yaWplbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+Ik5pamUgdXNwamVsbyBzcHJlbWFuamUgZG9rdW1lbnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+Ikl6cmFkYSBtYXBlIG5pamUgdXNwamVsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IlRyYcW+ZW5qZSBkb2t1bWVuYXRhIG5pamUgdXNwamVsbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+Ik5lZGF2bm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gYmVzcGxhdG5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iVXNsdWdlIHBvaHJhbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iUHJlxI1hY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IlVyZcSRYWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iVmnFoWUgYXBsaWthY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IlByaWthxb5pIG5hcHJlZG5lIHVyZcSRYWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iUHJpa2HFvmkgdmVsacSNaW51IGRhdG90ZWtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJQcmlrYcW+aSB2ZWxpxI1pbnUgdXJlxJFhamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJOZW1hIHN0YXZraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkRhdG90ZWt1IG5pamUgbW9ndcSHZSBvdHZvcml0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTmlqZSBtb2d1xIdlIGl6YnJpc2F0aSBuZWtlIGRva3VtZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJEaWplbGkgcHV0ZW0iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNzg1NGIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRva3VtZW50dW1vayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iTWVnbnlpdMOhcyBpbm5lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iTWVudMOpcyBpZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iTWFwcGEgbMOpdHJlaG96w6FzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJSw6FjcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJMaXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJSZW5kZXrDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJLZXJlc8OpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iQmXDoWxsw610w6Fzb2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJNZWdueWl0w6FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+Ik1lbnTDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+Ik1lZ29zenTDoXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJUw7ZybMOpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IGtpdsOhbGFzenR2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJOw6l2IHN6ZXJpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJNw7Nkb3PDrXTDoXMgZMOhdHVtYSBzemVyaW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+Ik3DqXJldCBzemVyaW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iR3nDtmvDqXJzemludCBtZWdqZWxlbsOtdMOpc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iR3nDtmvDqXJzemludCBlbHJlanTDqXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJOZW0gc2lrZXLDvGx0IG1lbnRlbmkgYSBkb2t1bWVudHVtb3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iTmVtIHNpa2Vyw7xsdCBsw6l0cmVob3puaSBhIG1hcHDDoXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJBIGRva3VtZW50dW1vayBsZWvDqXLDqXNlIG5lbSBzaWtlcsO8bHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJMZWd1dMOzYmJpYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gc3phYmFkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iVMOhcmhlbHlzem9sZ8OhbHRhdMOhc29rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IlBhcmFuY3Npa29ub2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkVzemvDtnrDtmsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJUb3bDoWJiaSBhbGthbG1hesOhc29rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iU3BlY2nDoWxpcyBlc3prw7Z6w7ZrIG1lZ2plbGVuw610w6lzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IkbDoWpsbcOpcmV0IG1lZ2plbGVuw610w6lzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iRXN6a8O2em3DqXJldCBtZWdqZWxlbsOtdMOpc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJOaW5jc2VuZWsgZWxlbWVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iQSBmw6FqbHQgbmVtIGxlaGV0IG1lZ255aXRuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTsOpaMOhbnkgZG9rdW1lbnR1bW90IG5lbSBsZWhldCB0w7Zyw7ZsbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iTWVnb3N6dMOhcyBpdHQ6Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODNmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLVk9Wh1b3Vv9Wh1anVstWp1aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i1LLVodaB1aXVrCDVodW11b3Vv9Wl1bLVq9aBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLVitWh1bDVpdWsINWh1bXVvdW/1aXVsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLVjdW/1aXVstWu1aXVrCDVqdWy1anVodW61aHVttWh1a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i1ZHVodW21oHVodW11avVtiDVv9Wl1b3WhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLVkdW41oLWgdWh1a/VqyDVv9Wl1b3WhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLUtNWh1b3VodW+1bjWgNWl1awg1ajVvdW/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i1YjWgNW41bbVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLUv9Wh1oDVo9Wh1b7VuNaA1bjWgtW01bbVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i1LLVodaB1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLVitWh1bDVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLVgNWh1bTWhdWj1b/VodWj1bjWgNWu1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+ItWL1bbVu9Wl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiDVqNW21b/WgNW+1aHVriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLUuNW91b8g1aHVttW+1aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+ItS41b3VvyDWg9W41oPVuNWt1bTVodW2INWh1bTVvdWh1anVvtWrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+ItS41b3VvyDVudWh1oPVqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+ItWR1bjWgtW11oEg1b/VodWsINWh1oDVtNWh1b/VttWl1oDVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLUudWh1oTWgdW21aXVrCDVodaA1bTVodW/1bbVpdaA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+ItWJ1bDVodW71bjVstW+1aXWgSDVutWh1bDVpdWsINaD1aHVvdW/1aHVqdW41oLVstWp1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i1YnVsNWh1bvVuNWy1b7VpdaBINW91b/VpdWy1a7VpdWsINWp1bLVqdWh1brVodW21aHVr9WoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i1ZPVodW91b/VodWp1bLVqdWl1oDVq9W2INWw1aHWgNaB1bjWgtW0INWv1aHVv9Wh1oDVpdWs1avVvSDVvdWt1aHVrCDVv9Wl1bLVqyDVuNaC1bbVpdaB1aHVviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+ItWO1aXWgNW71avVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiDVodWm1aHVvyDVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+ItWK1aHVsNW41oLVvdW/1asg1a7VodW81aHVtdW41oLVqdW11bjWgtW21bbVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+ItS01bXVuNaC1oDVodW21oHVuNaC1bTVttWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+ItWN1aHWgNaE1aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+ItWA1aHVvtWl1azVtdWh1awg1a7WgNWh1aPWgNWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLVkdW41oLWgdWh1aTWgNWl1awg1ajVttWk1azVodW11bbVvtWh1a4g1b3VodaA1oTVpdaA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLVkdW41oLWgdWh1aTWgNWl1awg1obVodW11azVqyDVudWh1oPVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i1ZHVuNaC1oHVodWk1oDVpdWsINW91aHWgNaE1asg1bnVodaD1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLVj9Wh1oDWgNWl1oAg1bnVr9Wh1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLVgNW21aHWgNWh1b7VuNaAINW51acg1aLVodaB1aXVrCDWhtWh1bXVrNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLUsdW21bDVttWh1oAg1acg1bvVttW71aXVrCDVuNaA1bjVtyDWg9Wh1b3Vv9Wh1anVstWp1aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLVj9Wh1oDVodWu1aXVrCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5YjkzNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rdW1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iQnVrYSBkYXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTaW1wYW4ga2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iQnVhdCBmb2xkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iVGFtcGlsYW4ga2lzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJUYW1waWxhbiBkYWZ0YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iU29ydGlyIG1lbnVydXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJUZWx1c3VyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iU2V0ZWxhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IkJ1a2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iU2ltcGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJCYWdpa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iSGFwdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiBkaXBpbGloIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+Ik1lbnVydXQgbmFtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+Ik1lbnVydXQgdGFuZ2dhbCBkaXViYWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iTWVudXJ1dCB1a3VyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJUYW1waWxrYW4gYWthciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJTZW1idW55aWthbiBha2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJHYWdhbCBtZW55aW1wYW4gZG9rdW1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJHYWdhbCBtZW1idWF0IGZvbGRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IkdhZ2FsIG1lbmdpcmltIGt1ZXJpIHVudHVrIGRva3VtZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJUZXJraW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGJlYmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iTGF5YW5hbiBwZW55aW1wYW5hbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJQaW50YXNhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iUGVyYW5na2F0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iQXBsaWthc2kgbGFpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IlRhbXBpbGthbiBwZXJhbmdrYXQgbGFuanV0YW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJUYW1waWxrYW4gdWt1cmFuIGZpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IlRhbXBpbGthbiB1a3VyYW4gcGVyYW5na2F0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iVGlkYWsgYWRhIGl0ZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJUaWRhayBkYXBhdCBtZW1idWthIGZpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IlRpZGFrIGRhcGF0IG1lbmdoYXB1cyBiZWJlcmFwYSBkb2t1bWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IkJhZ2lrYW4gbWVsYWx1aSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgzMjNiNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9jdW1lbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJBcHJpIGRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTYWx2YSBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJDcmVhIGNhcnRlbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlZpc3VhbGl6emF6aW9uZSBncmlnbGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlZpc3VhbGl6emF6aW9uZSBlbGVuY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iT3JkaW5hIHBlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IkNlcmNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJJbXBvc3RhemlvbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJBcHJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNhbHZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJDb25kaXZpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJFbGltaW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gc2VsZXppb25hdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iUGVyIG5vbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJQZXIgZGF0YSBkaSBtb2RpZmljYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQZXIgZGltZW5zaW9uaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+Ik1vc3RyYSBub2RpIHByaW5jaXBhbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iTmFzY29uZGkgbm9kaSBwcmluY2lwYWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJJbXBvc3NpYmlsZSBzYWx2YXJlIGlsIGRvY3VtZW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJJbXBvc3NpYmlsZSBjcmVhcmUgbGEgY2FydGVsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJJbXBvc3NpYmlsZSBjaGllZGVyZSBkb2N1bWVudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJSZWNlbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGxpYmVyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlNlcnZpemkgZGkgYXJjaGl2aWF6aW9uZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJTY29yY2lhdG9pZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iRGlzcG9zaXRpdmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJBbHRyZSBhcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJWaXN1YWxpenphIGRpc3Bvc2l0aXZpIGF2YW56YXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iVmlzdWFsaXp6YSBkaW1lbnNpb25pIGZpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IlZpc3VhbGl6emEgZGltZW5zaW9uaSBkaXNwb3NpdGl2aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+Ik5lc3N1biBhcnRpY29sbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkltcG9zc2liaWxlIGFwcmlyZSBpbCBmaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJJbXBvc3NpYmlsZSBlbGltaW5hcmUgYWxjdW5pIGRvY3VtZW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJDb25kaXZpZGkgdmlhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTJjMDYwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLXnteh157Xm9eZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Itek16rXlyDXni0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+Itep157XldeoINeRLSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLXpteV16gg16rXmden15nXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLXqtem15XXkteqINeo16nXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLXqtem15XXkteqINeo16nXmdee15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i157XmdeZ158g15zXpNeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i15fXpNepIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLXlNeS15PXqNeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLXpNeq15ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i16nXnteV16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+Itep16rXoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+Itee15fXpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+INeg15HXl9eo15UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i15zXpNeZINep150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLXnNek15kg16rXkNeo15nXmiDXqdeZ16DXldeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+Itec16TXmSDXkteV15PXnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IteU16bXkiDXqdeV16jXqdeZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i15TXodeq16gg16nXldeo16nXmdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLXqdee15nXqNeqINeU157Xodee15og16DXm9ep15zXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLXmdem15nXqNeqINeU16rXmden15nXlCDXoNeb16nXnNeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i16nXkNeZ15zXqteqINeU157Xodee15vXmdedINeg15vXqdec15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLXnteU15bXntefINeU15DXl9eo15XXnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiDXqdecINep15jXlyDXpNeg15XXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+Itep15nXqNeV16rXmSDXkNeX16HXldefIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+Iten15nXpteV16jXmSDXk9eo15oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+Itee15vXqdeZ16jXmdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i16LXldeTINeQ16TXnNeZ16fXpteZ15XXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IteU16bXkiDXnteb16nXmdeo15nXnSDXnteq16fXk9ee15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IteU16bXkiDXkNeqINeS15XXk9ecINeU16fXldeR16UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IteU16bXkiDXkNeqINeS15XXk9ecINeU157Xm9ep15nXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IteQ15nXnyDXpNeo15nXmNeZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLXnNeQINeg15nXqtefINec16TXqteV15cg15DXqiDXlNen15XXkdelIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLXnNeQINeg15nXqtefINec157Xl9eV16cg15fXnNenINee15TXnteh157Xm9eZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i16nXqtejINeR15DXntem16LXldeqIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTY0OTZkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLjg4njgq3jg6Xjg6Hjg7Pjg4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IuasoeOBi+OCiemWi+OBjzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IuasoeOBq+S/neWtmDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i44OV44Kp44Or44OA44KS5L2c5oiQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IuOCsOODquODg+ODieihqOekuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLjg6rjgrnjg4jooajnpLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i5Lim44G55pu/44GIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i5qSc57SiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLoqK3lrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLplovjgY8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i5L+d5a2YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLlhbHmnIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLliYrpmaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPuS7tumBuOaKnua4iOOBvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLlkI3liY3poIYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLmm7TmlrDml6XpoIYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i44K144Kk44K66aCGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i44Or44O844OI44KS6KGo56S644GZ44KLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IuODq+ODvOODiOOCkumdnuihqOekuuOBq+OBmeOCiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i44OJ44Kt44Ol44Oh44Oz44OI44KS5L+d5a2Y44Gn44GN44G+44Gb44KT44Gn44GX44GfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IuODleOCqeODq+ODgOOCkuS9nOaIkOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IuODieOCreODpeODoeODs+ODiOOBruOCr+OCqOODquOBq+WkseaVl+OBl+OBvuOBl+OBnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IuacgOi/kSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+IuepuuOBjeWuuemHjzogPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i44K544OI44Os44O844K444K144O844OT44K5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IuOCt+ODp+ODvOODiOOCq+ODg+ODiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i56uv5pyrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i44Gd44Gu5LuW44Gu44Ki44OX44OqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i56uv5pyr44Gu6Kmz57Sw6Kit5a6a44KS6KGo56S6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i44OV44Kh44Kk44Or44Gu44K144Kk44K644KS6KGo56S6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLnq6/mnKvjga7jgrXjgqTjgrrjgpLooajnpLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLjgqLjgqTjg4bjg6DjgYzjgYLjgorjgb7jgZvjgpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLjg5XjgqHjgqTjg6vjgpLplovjgZHjgb7jgZvjgpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IuS4gOmDqOOBruODieOCreODpeODoeODs+ODiOOCkuWJiumZpOOBp+OBjeOBvuOBm+OCkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLlhbHmnInjg4Tjg7zjg6siPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNlMTI3NAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IuGDk+GDneGDmeGDo+GDm+GDlOGDnOGDouGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i4YOS4YOQ4YOu4YOh4YOc4YOQIOGDkOGDpeGDlOGDk+GDkOGDnDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IuGDqOGDlOGDnOGDkOGDruGDleGDkCDhg5Dhg6U6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IuGDoeGDkOGDpeGDkOGDpuGDkOGDmuGDk+GDmOGDoSDhg6jhg5Thg6Xhg5vhg5zhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i4YOR4YOQ4YOT4YOY4YOhIOGDruGDlOGDk+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLhg6Hhg5jhg5jhg6Eg4YOu4YOU4YOT4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IuGDoeGDneGDoOGDouGDmOGDoOGDlOGDkeGDkDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLhg6vhg5jhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IuGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IuGDkuGDkOGDruGDoeGDnOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLhg6jhg5Thg5zhg5Dhg67hg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IuGDkuGDkOGDluGDmOGDkOGDoOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IuGDrOGDkOGDqOGDmuGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IOGDm+GDneGDnOGDmOGDqOGDnOGDo+GDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLhg6Hhg5Dhg67hg5Thg5rhg5jhg5ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLhg6rhg5Xhg5rhg5jhg5rhg5Thg5Hhg5jhg6Eg4YOX4YOQ4YOg4YOY4YOm4YOY4YOXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IuGDluGDneGDm+GDmOGDlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IuGDpOGDlOGDoeGDleGDlOGDkeGDmOGDoSDhg6nhg5Xhg5Thg5zhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i4YOk4YOU4YOh4YOV4YOU4YOR4YOY4YOhIOGDk+GDkOGDm+GDkOGDmuGDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i4YOT4YOd4YOZ4YOj4YOb4YOU4YOc4YOi4YOY4YOhIOGDqOGDlOGDnOGDkOGDruGDleGDkCDhg5Xhg5Thg6Ag4YOb4YOd4YOu4YOU4YOg4YOu4YOT4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IuGDoeGDkOGDpeGDkOGDpuGDkOGDmuGDk+GDmOGDoSDhg6jhg5Thg6Xhg5vhg5zhg5Ag4YOV4YOU4YOgIOGDm+GDneGDruGDlOGDoOGDruGDk+GDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IuGDk+GDneGDmeGDo+GDm+GDlOGDnOGDouGDlOGDkeGDluGDlCDhg5vhg53hg5fhg67hg53hg5Xhg5zhg5Ag4YOV4YOU4YOgIOGDkuGDkOGDmOGDkuGDluGDkOGDleGDnOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IuGDkeGDneGDmuGDnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiDhg5fhg5Dhg5Xhg5jhg6Hhg6Phg6Thg5Dhg5rhg5jhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiLhg5vhg5Thg67hg6Hhg5jhg5Thg6Dhg5Thg5Hhg5jhg6Eg4YOh4YOU4YOg4YOV4YOY4YOh4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IuGDm+GDkOGDmuGDoeGDkOGDruGDm+GDneGDkeGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i4YOb4YOU4YOi4YOYIOGDkOGDnuGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IuGDmeGDneGDm+GDnuGDmuGDlOGDpeGDoeGDo+GDoOGDmCDhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5Thg5Hhg5jhg6Eg4YOp4YOV4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i4YOk4YOQ4YOY4YOa4YOY4YOhIOGDluGDneGDm+GDmOGDoSDhg6nhg5Xhg5Thg5zhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IuGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDmOGDoSDhg5bhg53hg5vhg5jhg6Eg4YOp4YOV4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i4YOU4YOg4YOX4YOU4YOj4YOa4YOU4YOR4YOYIOGDkOGDoCDhg5Dhg6Dhg5jhg6EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLhg6Thg5Dhg5jhg5rhg5jhg6Eg4YOS4YOQ4YOu4YOh4YOc4YOQIOGDleGDlOGDoCDhg67hg5Thg6Dhg67hg5Phg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IuGDluGDneGDkuGDmOGDlOGDoOGDl+GDmCDhg5Phg53hg5nhg6Phg5vhg5Thg5zhg6Lhg5jhg6Eg4YOs4YOQ4YOo4YOa4YOQIOGDleGDlOGDoCDhg67hg5Thg6Dhg67hg5Phg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i4YOS4YOQ4YOW4YOY4YOQ4YOg4YOU4YOR4YOQOiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGYzNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i4Z6v4Z6A4Z6f4Z624Z6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLhnpThnr7hnoDigIvhnpbhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IuGemuGegOGfkuGen+GetuKAi+GekeGeu+GegOKAi+GekeGfhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLhnpThnoThn5LhnoDhnr7hno/igIvhnpDhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i4Z6R4Z634Z6K4Z+S4Z6L4Z6X4Z624Z6W4oCL4Z6A4Z+S4Z6a4Z6h4Z62Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IuGekeGet+GeiuGfkuGei+Gel+GetuGeluKAi+GelOGeieGfkuGeh+GeuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLhno/hnpjhn5Lhnprhn4DhnpTigIvhno/hnrbhnpgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLhnp/hn5Lhnpzhn4LhnoThnprhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IuGegOGetuGemuKAi+GegOGfhuGejuGej+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IuGelOGevuGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLhnprhnoDhn5Lhnp/hnrbhnpHhnrvhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IuGeheGfguGegOGemuGfhuGem+GfguGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IuGem+Geu+GelCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiLhnpThnrbhnpPigIvhnofhn5Lhnprhnr7hnp8gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLhno/hnrbhnpjigIvhnojhn5Lhnpjhn4Thn4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLhno/hnrbhnpjigIvhnoDhnrbhnpvhnpThnprhnrfhnoXhn5Lhnobhn4HhnpHigIvhnpThnrbhnpPigIvhnoDhn4LhnpThn5Lhnprhn4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i4Z6P4Z624Z6Y4oCL4oCL4Z6R4Z+G4Z6g4Z+GIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i4Z6U4Z6E4Z+S4Z6g4Z624Z6JIHJvb3RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IuGem+GetuGegOGfiyByb290cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i4Z6U4Z624Z6T4oCL4Z6U4Z6a4Z624Z6H4Z+Q4Z6Z4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6A4Z624Z6a4oCL4Z6a4Z6A4Z+S4Z6f4Z624oCL4Z6R4Z674Z6A4oCL4Z6v4Z6A4Z6f4Z624Z6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IuGelOGetuGek+KAi+GelOGemuGetuGeh+GfkOGemeKAi+GegOGfkuGek+Geu+GehOKAi+GegOGetuGemuKAi+GelOGehOGfkuGegOGevuGej+KAi+GekOGejyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IuGelOGetuGek+KAi+GelOGemuGetuGeh+GfkOGemeKAi+GegOGfkuGek+Geu+GehOKAi+GegOGetuGemuKAi+KAi+GeheGfkuGemuGfhOGfh+KAi+Ger+GegOGen+GetuGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IuGekOGfkuGemOGeuOGflyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+IuGekeGfhuGek+GfgeGemiA8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiLhnp/hn4HhnpzhnrbhnoDhnpjhn5LhnpjigIvhnpXhn5Lhnorhnpvhn4vigIvhnqfhnpThnoDhnprhno7hn43igIvhnpXhn5LhnpHhnrvhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i4Z6V4Z+S4Z6b4Z684Z6c4Z6A4Z624Z6P4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLhnqfhnpThnoDhnprhno7hn40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLhnoDhnpjhn5LhnpjigIvhnpzhnrfhnpLhnrjigIvigIvhnoXhn5Lhnprhnr7hnpPigIvhnpHhn4Dhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLhnpThnoThn5LhnqDhnrbhnonigIvhnqfhnpThnoDhnprhno7hn43igIvhnoDhnpjhn5Lhnprhnrfhno/igIvhnoHhn5Lhnpbhnp/hn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLhnpThnoThn5LhnqDhnrbhnonigIvhnpHhn4bhnqDhn4bigIvhnq/hnoDhnp/hnrbhnpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IuGelOGehOGfkuGeoOGetuGeieKAi+GekeGfhuGeoOGfhuKAi+Gep+GelOGegOGemuGejuGfjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IuGeguGfkuGemOGetuGek+GekuGetuGej+GeuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IuGemOGet+Gek+KAi+GeouGetuGeheKAi+GelOGevuGegOKAi+Ger+GegOGen+GetuGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i4Z6Y4Z634Z6T4oCL4Z6i4Z624Z6F4oCL4Z6b4Z674Z6U4oCL4Z6v4Z6A4Z6f4Z624Z6a4oCL4Z6Y4Z694Z6Z4oCL4Z6F4Z+G4Z6T4Z694Z6TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IuGeheGfguGegOGemuGfhuGem+GfguGegOKAi+Gej+GetuGemCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkMGQ0NAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i66y47IScIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLsl7TquLA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLsoIDsnqUg7JyE7LmYOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLtj7TrjZQg66eM65Ok6riwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IuuwlOuRke2MkOyLnSDrs7TquLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i66qp66GdIOuztOq4sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLsoJXroKwg6riw7KSAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i6rKA7IOJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLshKTsoJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLsl7TquLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i7KCA7J6lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLqs7XsnKAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLsgq3soJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPuqwnCDshKDtg53rkKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i7J2066aE7IicIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i7IiY7KCV65CcIOuCoOynnOyInCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLtgazquLDsiJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLro6jtirgg7ZGc7IucIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IuujqO2KuCDsiKjquLDquLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IuusuOyEnCDsoIDsnqUg7Iuk7YyoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+Iu2PtOuNlOulvCDrp4zrk6Tsp4Ag66q77ZWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i66y47ISc66W8IOqygOyDie2VmOyngCDrqrvtlojsirXri4jri6QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i7LWc6re8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IOuCqOydjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IuyggOyepeyaqeufiSDshJzruYTsiqQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i67CU66Gc6rCA6riwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLquLDquLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLslbEg642U67O06riwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i6rOg6riJIOq4sOq4sCDtkZzsi5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLtjIzsnbwg7YGs6riwIO2RnOyLnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i6riw6riwIO2BrOq4sCDtkZzsi5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLtla3rqqkg7JeG7J2MIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i7YyM7J287J2EIOyXtCDsiJgg7JeG7J2MIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLsnbzrtoAg66y47ISc66W8IOyCreygnO2VoCDsiJgg7JeG7J2MIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IuqzteycoCDrsKnrspUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2ZjMyZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IuC7gOC6reKAi+C6geC6sOKAi+C6quC6suC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i4LuA4Lqb4Lq14LqU4oCL4LqI4Lqy4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLguprgurHgupngupfgurbguoHgu4TgupvgupfgurXgu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i4Lqq4LuJ4Lqy4LqH4LuC4Lqf4LqZ4LuA4LqU4Lq1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IuC6oeC6uOC6oeC6oeC6reC6h+C7geC6muC6muC6iuC7iOC6reC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLguqHgurjguqHguqHguq3guofgu4HguprguprguqXgurLguo3guorgurfgu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i4Lqu4Lq94LqH4Lql4Lqz4LqU4Lqx4Lqa4LqV4Lqy4LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i4LqK4Lqt4LqB4Lqr4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLguoHgurLgupngupXgurHgu4nguofguoTgu4jgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLgu4DgupvgurXgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i4Lqa4Lqx4LqZ4LqX4Lq24LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLgu4Hguprgu4jguofgupvgurHgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLguqXgurbgupoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4i4LuA4Lql4Lq34Lqt4LqB4LuB4Lql4LuJ4LqnIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4g4Lql4Lqy4LqN4LqB4Lqy4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IuC6leC6suC6oeC6iuC6t+C7iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IuC6leC6suC6oeC6p+C6seC6meC6l+C6teC6l+C6teC7iOC7geC6geC7ieC7hOC6giI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLgupXgurLguqHguoLgurDgu5zgurLgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLguqrgurDgu4HgupTguocgcm9vdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i4LuA4LqK4Lq34LuI4Lqt4LqHIHJvb3RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLguoHgurLgupnguprgurHgupngupfgurbguoHgu4Dguq3guoHgurDguqrgurLgupnguqXgurvgu4nguqHgu4DguqvguqXguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i4LqB4Lqy4LqZ4oCL4Lqq4LuJ4Lqy4LqH4oCL4LuC4Lqf4LqZ4oCL4LuA4LqU4Lq14Lql4Lq74LuJ4Lqh4LuA4Lqr4Lq84LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i4LqB4Lqy4LqZ4LqK4Lqt4LqB4Lqr4Lqy4LuA4Lqt4LqB4Lqw4Lqq4Lqy4LqZ4Lql4Lq74LuJ4Lqh4LuA4Lqr4Lq84LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i4Lqr4Lqy4LqB4LuN4LuD4LqK4LuJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4i4Lqf4Lqj4Lq1IDx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IuC6muC7jeC6peC6tOC6geC6suC6meC6muC7iOC6reC6meC6iOC6seC6lOC7gOC6geC6seC6muC6guC7jeC7ieC6oeC6ueC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLgupfgurLguofguqXgurHgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IuC6reC6uOC6m+C6sOC6geC6reC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IuC7geC6reC6seC6muC6r+C6reC6t+C7iOC6meC7hiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IuC6quC6sOC7geC6lOC6h+C6reC6uOC6m+C6sOC6geC6reC6meC6guC6seC7ieC6meC6quC6ueC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IuC6quC6sOC7geC6lOC6h+C6guC6sOC7nOC6suC6lOC7hOC6n+C6peC7jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i4Lqq4Lqw4LuB4LqU4LqH4LqC4Lqw4Luc4Lqy4LqU4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i4Lqa4LuN4LuI4Lqh4Lq14Lql4Lqy4LqN4LqB4Lqy4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i4Lqa4LuN4LuI4Lqq4Lqy4Lqh4LqU4Lqy4LuA4Lqb4Lq14LqU4LuE4Lqf4Lql4LuM4LuE4LqU4LuJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLguprgu43gu4jguqrgurLguqHgurLgupTguqXgurbguprguprgurLguofgu4Dguq3guoHgurDguqrgurLgupngu4TgupTgu4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i4LuB4Lqa4LuI4LqH4Lqb4Lqx4LqZ4Lqc4LuI4Lqy4LqZIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODYxYjk5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudGFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJBdGlkYXJ5dGkgacWhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJJxaFzYXVnb3RpIMSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+Ikt1cnRpIGFwbGFua8SFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlRpbmtsZWxpbyByb2RpbnlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlPEhXJhxaFvIHJvZGlueXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iUsWrxaFpdW90aSBwYWdhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IkllxaFrb3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJOdXN0YXR5bWFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iQXRpZGFyeXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IknFoXNhdWdvdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IkJlbmRyaW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IknFoXRyaW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiJQYXNpcmlua3RhOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlBhZ2FsIHBhdmFkaW5pbcSFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUGFnYWwga2VpdGltbyBkYXTEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQYWdhbCBkeWTEryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IlJvZHl0aSDFoWFrbmlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IlNsxJdwdGkgxaFha25pcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iTmVwYXZ5a28gacWhc2F1Z290aSBkb2t1bWVudG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iTmVwYXZ5a28gc3VrdXJ0aSBhcGxhbmtvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iTmVwYXZ5a28gcGF0ZWlrdGkgZG9rdW1lbnTFsyB1xb5rbGF1c8WzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iTmF1amF1c2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiJMYWlzdm9zIHZpZXRvczogPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iU2F1Z3lrbG9zIHBhc2xhdWdvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJTcGFydGllamkga2xhdmnFoWFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLErnJlbmdpbmlhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IkRhdWdpYXUgcHJvZ3JhbcWzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iUm9keXRpIGnFoXBsxJdzdGluaXVzIMSvcmVuZ2luaXVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iUm9keXRpIGZhaWxvIGR5ZMSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJSb2R5dGkgxK9yZW5naW5pbyBkeWTEryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+Ik7El3JhIGVsZW1lbnTFsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+Ik5lcGF2eWtzdGEgYXRpZGFyeXRpIGZhaWxvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJOZXBhdnlrbyBpxaF0cmludGkga2FpIGt1cmnFsyBkb2t1bWVudMWzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IkJlbmRyaW50aSBuYXVkb2phbnQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MWE1OWZlMGQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRva3VtZW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iQXR2xJNyxaFhbmEgbm86Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTYWdsYWLEgcWhYW5hOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJJenZlaWRvdCBtYXBpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlJlxb7Eo2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlNhcmFrc3RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IkvEgXJ0b3QgcMSTYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+Ik1la2zEk3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+Ikllc3RhdMSranVtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IkF0dsSTcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iU2FnbGFixIF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJLb3DEq2dvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IkR6xJNzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiJBdGxhc8SrdHM6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iUMSTYyBub3NhdWt1bWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJQxJNjIHDEgXJ2ZWlkb8WhYW5hcyBkYXR1bWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iUMSTYyBsaWVsdW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iUsSBZMSrdCBzYWtuZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iU2zEk3B0IHNha25lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iTmVpemRldsSBcyBzYWdsYWLEgXQgZG9rdW1lbnR1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJOZWl6ZGV2xIFzIGl6dmVpZG90IG1hcGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iTmVpemRldsSBcyBhdHJhc3QgdmFpY8SBanVtxIEgbm9yxIFkxKt0b3MgZG9rdW1lbnR1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJQxJNkxJNqaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiJCcsSrdmEgdmlldGE6IDx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IkdsYWLEgcWhYW5hcyBwYWthbHBvanVtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJTYcSrc25lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iSWVyxKtjZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJWYWlyxIFrIGxpZXRvdMWGdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IkF0dMSTbG90IHBhcGlsZHUgaWVyxKtjZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJBdHTEk2xvdCBmYWlsYSBsaWVsdW11Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJBdHTEk2xvdCBpZXLEq2NlcyBpem3Ek3J1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iTmF2IHZpZW51bXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJOZXZhciBhdHbEk3J0IGZhaWx1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTmV2YXIgZHrEk3N0IGRhxb51cyBkb2t1bWVudHVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJLb3DEq2dvdCwgaXptYW50b2pvdCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmM5ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i0JTQvtC60YPQvNC10L3RgtKv0q/QtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i0J3RjdGN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+ItCl0LDQtNCz0LDQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i0KTQvtC70LTQtdGAINKv0q/RgdCz0Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLQrdCz0L3Sr9Kv0LvQtiDRhdCw0YDQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+ItCW0LDQs9GB0LDQsNC2INGF0LDRgNCw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i0K3RgNGN0LzQsdGN0LvRjdGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i0KXQsNC50YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+ItCi0L7RhdC40YDQs9C+0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLQndGN0Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLQpdCw0LTQs9Cw0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLQpdGD0LLQsNCw0LvRhtCw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLQo9GB0YLQs9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiDRgdC+0L3Qs9C+0LPQtNGB0L7QvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLQndGN0YDRjdGN0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLTqNOp0YDRh9C706nQs9C00YHTqdC9INC+0LPQvdC+0L7Qs9C+0L7RgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLQpdGN0LzQttGN0Y3Qs9GN0Y3RgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+ItCv0LfQs9GD0YPRgNGL0LMg0YXQsNGA0YPRg9C70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLQr9C30LPRg9GD0YDRi9CzINC90YPRg9GG0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLQlNC+0LrRg9C80LXQvdGC0YvQsyDRhdCw0LTQs9Cw0LvQtiDRh9Cw0LTRgdCw0L3Qs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i0KTQvtC70LTQtdGAINKv0q/RgdCz0Y3QtiDRh9Cw0LTRgdCw0L3Qs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiLQlNC+0LrRg9C80LXQvdGC0YvQvSDRhdKv0YHRjdC70YIg0LPQsNGA0LPQsNC2INGH0LDQtNGB0LDQvdCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+ItCh0LDRj9GF0L3RiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiDRh9Op0LvTqdOp0YLRjdC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i0KHQsNC90LPQuNC50L0g0q/QudC70YfQuNC70LPRjdGNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+ItCi0L7QstGH0LvQvtC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLQotOp0YXTqdOp0YDTqdC80LbSr9Kv0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLTqNOp0YAg0LDQv9C/LdGD0YPQtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+ItCU0Y3QstGI0LjQu9GC0Y3RgiDRgtOp0YXTqdOp0YDTqdC80LbSr9Kv0LTQuNC50LMg0YXQsNGA0YPRg9C70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+ItCk0LDQudC70YvQvSDRhdGN0LzQttGN0Y3QsyDRhdCw0YDRg9GD0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLQotOp0YXTqdOp0YDTqdC80LbQuNC50L0g0YXRjdC80LbRjdGN0LMg0YXQsNGA0YPRg9C70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+ItCl0L7QvtGB0L7QvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+ItCk0LDQudC70YvQsyDQvdGN0Y3RhSDQsdC+0LvQvtC80LbQs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+ItCX0LDRgNC40Lwg0LTQvtC60YPQvNC10L3RgtGD0YPQtNGL0LMg0YPRgdGC0LPQsNGFINCx0L7Qu9C+0LzQttCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLQlNCw0YDQsNCw0YXQsNCw0YAg0LTQsNC80LbRg9GD0LvQsNC9INGF0YPQstCw0LDQu9GG0LDRhSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTA5YzU3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rdW1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iQnVrYSBkYXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTaW1wYW4ga2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iQnVhdCBmb2xkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iUGFwYXJhbiBncmlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlBhcGFyYW4gc2VuYXJhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJJc2loIG1lbmdpa3V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iQ2FyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iVGV0YXBhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IkJ1a2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iU2ltcGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJLb25nc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJQYWRhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IGRpcGlsaWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iTWVuZ2lrdXQgbmFtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IkRpdWJhaCBzdWFpIG1lbmdpa3V0IHRhcmlraCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJNZW5naWt1dCBzYWl6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iVHVuanVra2FuIGFrYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iU2VtYnVueWlrYW4gYWthciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iR2FnYWwgbWVueWltcGFuIGRva3VtZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iR2FnYWwgbWVtYnVhdCBmb2xkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJHYWdhbCBtZW5hbnlha2FuIGRva3VtZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJUZXJiYWhhcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4ga29zb25nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iUGVya2hpZG1hdGFuIHN0b3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJQaW50YXNhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iUGVyYW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IkxlYmloIGJhbnlhayBhcGwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJQYXBhcmthbiBwZXJhbnRpIHRlcnBlcmluY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJQYXBhcmthbiBzYWl6IGZhaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IlBhcGFya2FuIHNhaXogcGVyYW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IlRpYWRhIGl0ZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJUaWRhayBkYXBhdCBtZW1idWthIGZhaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IlRpZGFrIGRhcGF0IG1lbWFkYW0gYmViZXJhcGEgZG9rdW1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJLb25nc2kgbWVsYWx1aSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzMWJkOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rdW1lbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iw4VwbmUgZnJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJMYWdyZSBpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+Ik9wcHJldHQgZW4gbWFwcGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iUnV0ZW5ldHR2aXNuaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+Ikxpc3RldmlzbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJTb3J0w6lyIGV0dGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iU8O4ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iSW5uc3RpbGxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IsOFcG5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IkxhZ3JlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJEZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJTbGV0dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IHZhbGd0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IkV0dGVyIG5hdm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLCq0V0dGVyIGRhdG/CuyBlbmRyZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iRXR0ZXIgc3TDuHJyZWxzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IlZpcyByw7h0dGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IlNranVsIHLDuHR0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+Ikt1bm5lIGlra2UgbGFncmUgZG9rdW1lbnRldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJLdW5uZSBpa2tlIG9wcHJldHRlIG1hcHBlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+Ikt1bm5lIGlra2UgdW5kZXJzw7hrZSBkb2t1bWVudGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iU2lzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gZ3JhdGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iTGFncmluZ3N0amVuZXN0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iU25hcnZlaWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJFbmhldGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iRmxlcmUgYXBwZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJWaXMgYXZhbnNlcnRlIGVuaGV0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJWaXMgZmlsc3TDuHJyZWxzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iVmlzIGVuaGV0c3N0w7hycmVsc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJJbmdlbiBlbGVtZW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJLYW4gaWtrZSDDpXBuZSBmaWxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iRW5rZWx0ZSBkb2t1bWVudGVyIGt1bm5lIGlra2Ugc2xldHRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJEZWwgdmlhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjA2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLgpJXgpL7gpJfgpJzgpL7gpKTgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IuCkr+CkuOCkrOCkvuCknyDgpJbgpYvgpLLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IuCkr+CkuOCkruCkviDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IuCkq+Cli+CksuCljeCkoeCksCDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IuCkl+CljeCksOCkv+CkoSDgpKbgpYPgpLbgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i4KS44KWC4KSa4KWAIOCkpuClg+CktuCljeCkryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLgpK/gpLjgpKbgpY3gpLXgpL7gpLDgpL4g4KSV4KWN4KSw4KSu4KS14KSm4KWN4KSYIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IuCkluCli+CknOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i4KSW4KWL4KSy4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IuCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiDgpJrgpK/gpKgg4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IuCkqOCkvuCkriDgpIXgpKjgpYHgpLjgpL7gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpL/gpKQg4KSu4KS/4KSk4KS/IOCkheCkqOClgeCkuOCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLgpIbgpJXgpL7gpLAg4KSF4KSo4KWB4KS44KS+4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i4KSu4KWC4KSy4KS54KSw4KWCIOCkpuClh+CkluCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLgpK7gpYLgpLLgpLngpLDgpYIg4KSy4KWB4KSV4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLgpJXgpL7gpJfgpJzgpL7gpKQg4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkl+CksOCljeCkqCDgpLXgpL/gpKvgpLIg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i4KS54KS+4KSy4KWI4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IOCkluCkvuCksuClgCI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByb290X3R5cGVfc2VydmljZSAoMjE3ODg1NDg5NDQxNjc3NTQwOSkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLgpLjgpLDgpY3gpJ/gpJXgpJ/gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IuCkieCkquCkleCksOCko+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IuCkpeCkqiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLgpIngpKjgpY3gpKjgpKQg4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWCIOCkquCljeCksOCkpuCksOCljeCktuCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLgpKvgpL7gpIfgpLIg4KSG4KSV4KS+4KSwIOCkquCljeCksOCkpuCksOCljeCktuCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IuCkieCkquCkleCksOCkoyDgpIbgpJXgpL7gpLAg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IuCkleClgeCkqOCliCDgpLXgpLjgpY3gpKTgpYEg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i4KSr4KS+4KSH4KSyIOCkluCli+CksuCljeCkqCDgpLjgpJXgpY3gpKbgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IuCkleClh+CkueClgCDgpJXgpL7gpJfgpJzgpL7gpKTgpLngpLDgpYIg4KSu4KWH4KSf4KWN4KSoIOCkheCkuOCkruCksOCljeCkpSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i4KSu4KS+4KSn4KWN4KSv4KSu4KSs4KS+4KSfIOCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ODYyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRvY3VtZW50ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik9wZW5lbiB2YW51aXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+Ik9wc2xhYW4gaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iTWFwIG1ha2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlJhc3RlcndlZXJnYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IkxpanN0d2VlcmdhdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iU29ydGVyZW4gb3AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJab2VrZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+Ikluc3RlbGxpbmdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Ik9wZW5lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJPcHNsYWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJEZWxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IlZlcndpamRlcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gZ2VzZWxlY3RlZXJkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+Ik9wIG5hYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJPcCBhYW5wYXNzaW5nc2RhdHVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+Ik9wIGdyb290dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJSb290cyB3ZWVyZ2V2ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iUm9vdHMgdmVyYmVyZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJLYW4gZG9jdW1lbnQgbmlldCBvcHNsYWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IkthbiBtYXAgbmlldCBtYWtlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IkthbiBnZWVuIHF1ZXJ5XCdzIHZvb3IgZG9jdW1lbnRlbiB2ZXJ6ZW5kZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJSZWNlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gdnJpaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+Ik9wc2xhZ3NlcnZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IlNuZWx0b2V0c2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJBcHBhcmF0ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJNZWVyIGFwcHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJHZWF2YW5jZWVyZGUgYXBwYXJhdGVuIHdlZXJnZXZlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IkJlc3RhbmRzZ3Jvb3R0ZSB3ZWVyZ2V2ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IkFwcGFyYWF0Z3Jvb3R0ZSB3ZWVyZ2V2ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJHZWVuIGl0ZW1zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iS2FuIGJlc3RhbmQgbmlldCBvcGVuZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IkthbiBiZXBhYWxkZSBkb2N1bWVudGVuIG5pZXQgdmVyd2lqZGVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iRGVsZW4gdmlhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGU1NTgyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudHkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik90d8OzcnogeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iWmFwaXN6IHciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iVXR3w7NyeiBmb2xkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iV2lkb2sgc2lhdGtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IldpZG9rIGxpc3R5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlNvcnR1aiB3ZWTFgnVnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iU3p1a2FqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJVc3Rhd2llbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iT3R3w7NyeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJaYXBpc3oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IlVkb3N0xJlwbmlqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iVXN1xYQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iV3licmFubzogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJXZWTFgnVnIG5hend5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iV2VkxYJ1ZyBkYXR5IGVkeWNqaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJXZWTFgnVnIHJvem1pYXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iUG9rYcW8IGVsZW1lbnR5IGfFgsOzd25lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IlVrcnlqIGVsZW1lbnR5IGfFgsOzd25lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJOaWUgdWRhxYJvIHNpxJkgemFwaXNhxIcgZG9rdW1lbnR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+Ik5pZSB1ZGHFgm8gc2nEmSB1dHdvcnp5xIcgZm9sZGVydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+Ik5pZSB1ZGHFgm8gc2nEmSBwb2JyYcSHIGxpc3R5IGRva3VtZW50w7N3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iT3N0YXRuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gd29sbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJVc8WCdWdpIHBhbWnEmWNpIG1hc293ZWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iU2tyw7N0eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iVXJ6xIVkemVuaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJXacSZY2VqIGFwbGlrYWNqaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+Ild5xZt3aWV0bCB1cnrEhWR6ZW5pYSB6YWF3YW5zb3dhbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJXecWbd2lldGwgcm96bWlhciBwbGlrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iV3nFm3dpZXRsIHJvem1pYXIgdXJ6xIVkemVuaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJCcmFrIGVsZW1lbnTDs3ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJOaWUgbW/FvG5hIG90d29yennEhyBwbGlrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTmllIG1vxbxuYSB1c3VuxIXEhyBuaWVrdMOzcnljaCBkb2t1bWVudMOzdyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJVZG9zdMSZcG5paiBwcnpleiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzFiYThiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9jdW1lbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iQWJyaXIgZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+Ikd1YXJkYXIgZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iQ3JpYXIgcGFzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iVmlzdGEgZGUgZ3JlbGhhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlZpc3RhIGRlIGxpc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+Ik9yZGVuYXIgcG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iUGVzcXVpc2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJEZWZpbmnDp8O1ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJBYnJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJHdWFyZGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJQYXJ0aWxoYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJFbGltaW5hciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IHNlbGVjaW9uYWRvKHMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlBvciBub21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUG9yIGRhdGEgZGUgbW9kaWZpY2HDp8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQb3IgdGFtYW5obyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+Ik1vc3RyYXIgcmHDrXplcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJPY3VsdGFyIHJhw616ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkZhbGhhIGFvIGd1YXJkYXIgbyBkb2N1bWVudG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iRmFsaGEgYW8gY3JpYXIgYSBwYXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IkZhbGhhIGFvIGNvbnN1bHRhciBvcyBkb2N1bWVudG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iUmVjZW50ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gZXNwYcOnbyBsaXZyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlNlcnYuIGRlIGFybWF6ZW5hbWVudG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iQXRhbGhvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iRGlzcG9zaXRpdm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iTWFpcyBhcGxpY2HDp8O1ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJBcHJlc2VudGFyIGRpc3Bvc2l0aXZvcyBhdmFuw6dhZG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iQXByZXNlbnRhciB0YW1hbmhvIGRvIGZpY2hlaXJvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJBcHJlc2VudGFyIHRhbWFuaG8gZG8gZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJTZW0gaXRlbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJOw6NvIMOpIHBvc3PDrXZlbCBhYnJpciBvIGZpY2hlaXJvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJOw6NvIMOpIHBvc3PDrXZlbCBlbGltaW5hciBhbGd1bnMgZG9jdW1lbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJQYXJ0aWxoYXIgYXRyYXbDqXMgZGUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZmNhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRvY3VtZW50b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IkFicmlyIGRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTYWx2YXIgZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iQ3JpYXIgcGFzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iVmlzdWFsaXphw6fDo28gZW0gZ3JhZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iVmlzdWFsaXphw6fDo28gZW0gbGlzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iQ2xhc3NpZmljYXIgcG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iUGVzcXVpc2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJDb25maWd1cmHDp8O1ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJBYnJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJTYWx2YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IkNvbXBhcnRpbGhhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IkV4Y2x1aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiBzZWxlY2lvbmFkb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iUG9yIG5vbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJQb3IgZGF0YSBkZSBtb2RpZmljYcOnw6NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IlBvciB0YW1hbmhvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iTW9zdHJhciByYcOtemVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+Ik9jdWx0YXIgcmHDrXplcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iRmFsaGEgYW8gc2FsdmFyIG8gZG9jdW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IkZhbGhhIGFvIGNyaWFyIGEgcGFzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJGYWxoYSBhbyBjb25zdWx0YXIgZG9jdW1lbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IlJlY2VudGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGxpdnJlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlNlcnZpw6dvcyBkZSBhcm1hemVuYW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IkF0YWxob3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkRpc3Bvc2l0aXZvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+Ik1haXMgYXBsaWNhdGl2b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJNb3N0cmFyIGRpc3Bvc2l0aXZvcyBhdmFuw6dhZG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iTW9zdHJhciB0YW1hbmhvIGRvIGFycXVpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+Ik1vc3RyYXIgdGFtYW5obyBkbyBkaXNwb3NpdGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+Ik5lbmh1bSBpdGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iTsOjbyDDqSBwb3Nzw612ZWwgYWJyaXIgbyBhcnF1aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJOw6NvIGZvaSBwb3Nzw612ZWwgZXhjbHVpciBhbGd1bnMgZG9jdW1lbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJDb21wYXJ0aWxoYXIgdmlhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmQ0NGM4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2N1bWVudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IkRlc2NoaWRlyJtpIGRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU2FsdmHIm2kgw65uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkNyZWHIm2kgdW4gZG9zYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iQWZpyJlhcmUgdGlwIGdyaWzEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJBZmnImWFyZSB0aXAgbGlzdMSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlNvcnRhyJtpIGR1cMSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iQ8SDdXRhyJtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJTZXTEg3JpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iRGVzY2hpZGXIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iU2FsdmHIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IkRpc3RyaWJ1acibaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IsiYdGVyZ2XIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiBzZWxlY3RhdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iRHVwxIMgbnVtZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IkR1cMSDIGRhdGEgbW9kaWZpY8SDcmlpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IkR1cMSDIGRpbWVuc2l1bmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJBZmnImWHIm2kgZGlyZWN0b2FyZWxlIHLEg2TEg2NpbsSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IkFzY3VuZGXIm2kgZGlyZWN0b2FyZWxlIHLEg2TEg2NpbsSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJTYWx2YXJlYSBkb2N1bWVudHVsdWkgbnUgYSByZXXImWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IkVyb2FyZSBsYSBjcmVhcmVhIGRvc2FydWx1aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IkludGVyb2dhcmVhIHJlZmVyaXRvYXJlIGxhIGRvY3VtZW50ZSBudSBhIHJldciZaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJSZWNlbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IHNwYcibaXUgbGliZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJTZXJ2aWNpaSBkZSBzdG9jYXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IkNvbWVuemkgcmFwaWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJEaXNwb3ppdGl2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IkFsdGUgYXBsaWNhyJtpaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IkFmaciZYcibaSBkaXNwb3ppdGl2ZSBhdmFuc2F0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IkFmaciZYcibaSBkaW1lbnNpdW5pbGUgZmnImWllcmVsb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IkFmaciZYcibaSBjYXBhY2l0YXRlYSBkZSBzdG9jYXJlIGEgZGlzcG96aXRpdmVsb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJOdSBleGlzdMSDIGVsZW1lbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iRmnImWllcnVsIG51IHBvYXRlIGZpIGRlc2NoaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IlVuZWxlIGRvY3VtZW50ZSBudSBhdSBwdXR1dCBmaSDImXRlcnNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IkRpc3RyaWJ1acibaSBwcmluIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWZkNzBlMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i0JTQvtC60YPQvNC10L3RgtGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLQntGC0LrRgNGL0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4i0KHQvtGF0YDQsNC90LjRgtGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+ItCd0L7QstCw0Y8g0L/QsNC/0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLQotCw0LHQu9C40YbQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLQodC/0LjRgdC+0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i0KHQvtGA0YLQuNGA0L7QstCw0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+ItCf0L7QuNGB0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+ItCd0LDRgdGC0YDQvtC50LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+ItCe0YLQutGA0YvRgtGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+ItCh0L7RhdGA0LDQvdC40YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i0J/QvtC00LXQu9C40YLRjNGB0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLQo9C00LDQu9C40YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiLQktGL0LHRgNCw0L3QvjogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLQn9C+INC90LDQt9Cy0LDQvdC40Y4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLQn9C+INC00LDRgtC1INC40LfQvNC10L3QtdC90LjRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLQn9C+INGA0LDQt9C80LXRgNGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i0J/QvtC60LDQt9Cw0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLQodC60YDRi9GC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMINC00L7QutGD0LzQtdC90YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQv9Cw0L/QutGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0L/RgNCw0LLQuNGC0Ywg0LfQsNC/0YDQvtGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i0J3QtdC00LDQstC90LjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+ItCh0LLQvtCx0L7QtNC90L4gPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i0KHQu9GD0LbQsdGLINGF0YDQsNC90LXQvdC40Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i0K/RgNC70YvQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLQo9GB0YLRgNC+0LnRgdGC0LLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+ItCU0YDRg9Cz0LjQtSDQv9GA0LjQu9C+0LbQtdC90LjRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+ItCf0L7QutCw0LfQsNGC0Ywg0LTRgNGD0LPQuNC1INGD0YHRgtGA0L7QudGB0YLQstCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i0J/QvtC60LDQt9Cw0YLRjCDRgNCw0LfQvNC10YAg0YTQsNC50LvQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i0J/QvtC60LDQt9Cw0YLRjCDRgNCw0LfQvNC10YAg0YPRgdGC0YDQvtC50YHRgtCy0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLQndC40YfQtdCz0L4g0L3QtdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRhNCw0LnQuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i0J3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDQvdC10LrQvtGC0L7RgNGL0LUg0LTQvtC60YPQvNC10L3RgtGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+ItCf0L7QtNC10LvQuNGC0YzRgdGPIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjNiODIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLgtr3gt5rgtpvgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IuC3gOC3kuC3gOC3mOC2rSDgt4DgtrHgt4rgtrHgt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IuC3g+C3lOC2u+C2muC3kuC2seC3iuC2seC3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLgt4bgt53gtr3gt4rgtqngtrvgtrrgtprgt4og4LeD4LeP4Lav4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IuC2ouC3j+C2vSDgtrTgt5ngtrHgt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i4La94LeQ4La64LeS4LeD4LeK4Lat4LeUIOC2tOC3meC2seC3lOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLgtoXgtrHgt5TgtrTgt5Lgt4Xgt5Lgt4Dgt5ngtr3gtqcg4LeD4Laa4LeD4LePIOC2h+C2reC3iuC2reC3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IuC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i4LeD4LeQ4Laa4LeD4LeT4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i4LeA4LeS4LeA4LeY4LatIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLgt4Pgt5Tgtrvgtprgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IuC2tuC3meC2r+C3j+C2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IuC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt53gtrvgt4/gtpzgtrHgt4rgtrHgt48g4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IuC2seC2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IuC3gOC3meC2seC3g+C3iiDgtprgtrvgtrEg4La94LavIOC2r+C3kuC2seC2uuC3meC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLgtrTgt4rigI3gtrvgtrjgt4/gtqvgtrog4La44Lac4LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i4La44LeU4La94LeKIOC2tOC3meC2seC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLgtrjgt5Tgtr3gt4og4LeD4Laf4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLgtr3gt5rgtpvgtrHgtrog4LeD4LeU4La74LeQ4Laa4LeT4La44LanIOC2heC2tOC3nOC3hOC3nOC3g+C2reC3iiDgt4Dgt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLgtrjgt5Hgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4g4LaJ4Lat4LeS4La74LeS4La64LeSIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJvb3RfdHlwZV9zZXJ2aWNlICgyMTc4ODU0ODk0NDE2Nzc1NDA5KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IuC2muC3meC2p+C3kuC2uOC2giI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i4LaL4La04LeP4LaC4LacIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i4Lat4LeA4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IuC2i+C3g+C3g+C3iiDgtovgtrTgt4/gtoLgtpwg4Lav4La74LeK4LeB4Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IuC2nOC3nOC2seC3lCDgtrTgt4rigI3gtrvgtrjgt4/gtqvgtrog4Lav4La74LeK4LeB4Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i4LaL4La04LeP4LaC4LacIOC2tOC3iuKAjeC2u+C2uOC3j+C2q+C2uiDgtq/gtrvgt4rgt4HgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i4LaF4La64LeS4Lat4La4IOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IuC2nOC3nOC2seC3lOC3gCDgt4Dgt5Lgt4Dgt5jgtq0g4Laa4LeFIOC2seC3nOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i4LeD4La44LeE4La7IOC2veC3muC2m+C2sSDgtrjgt5Dgtprgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLgt4Tgtrvgt4Tgt48g4La24LeZ4Lav4LeP4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTk2YjFhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudHkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik90dm9yacWlIHoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IlVsb8W+acWlIGRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IlZ5dHZvcmnFpSBwcmllxI1pbm9rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlpvYnJhemVuaWUgbXJpZcW+a3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iWm9icmF6ZW5pZSB6b3puYW11Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlpvcmFkacWlIHBvZMS+YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IkjEvmFkYcWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJOYXN0YXZlbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iT3R2b3JpxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iVWxvxb5pxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IlpkaWXEvmHFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+Ik9kc3Ryw6FuacWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+IlZ5YnJhdMOpOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlBvZMS+YSBuw6F6dnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJQb2TEvmEgZMOhdHVtdSB6bWVueSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQb2TEvmEgdmXEvmtvc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iWm9icmF6acWlIGtvcmVuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJTa3J5xaUga29yZW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJEb2t1bWVudCBzYSBuZXBvZGFyaWxvIHVsb8W+acWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IlByaWXEjWlub2sgc2EgbmVwb2RhcmlsbyB2eXR2b3JpxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJab3puYW0gZG9rdW1lbnRvdiBzYSBuZXBvZGFyaWxvIG5hxI3DrXRhxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJOZWTDoXZuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+IlZvxL5uw6k6IDx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlNsdcW+Ynkgw7psb8W+aXNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJTa3JhdGt5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJaYXJpYWRlbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4ixI5hbMWhaWUgYXBsaWvDoWNpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IlpvYnJhemnFpSByb3rFocOtcmVuw6kgemFyaWFkZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IlpvYnJhemnFpSB2ZcS+a29zxaUgc8O6Ym9ydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iWm9icmF6acWlIHZlxL5rb3PFpSB6YXJpYWRlbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4ixb1pYWRuZSBwb2xvxb5reSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IlPDumJvciBzYSBuZXBvZGFyaWxvIG90dm9yacWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJOaWVrdG9yw6kgZG9rdW1lbnR5IHNhIG5lcG9kYXJpbG8gb2RzdHLDoW5pxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iWmRpZcS+YcWlIHBvbW9jb3UiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ODRhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRva3VtZW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iT2RwaXJhbmplIGl6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTaHJhbmpldmFuamUgdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJVc3R2YXJqYW5qZSBtYXBlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+Ik1yZcW+bmkgcG9nbGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlBvZ2xlZCBzZXpuYW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlJhenZyc3RpIGdsZWRlIG5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iSXNrYW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iTmFzdGF2aXR2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Ik9kcHJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNocmFuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iU2t1cG5hIHJhYmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJJemJyacWhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiLFoHQuIGl6YnJhbmloOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlBvIGltZW51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUG8gZGF0dW11IHNwcmVtZW1iZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQbyB2ZWxpa29zdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJQb2thxb5pIGtvcmVuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJTa3JpaiBrb3JlbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkRva3VtZW50YSBuaSBiaWxvIG1vZ2/EjWUgc2hyYW5pdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iTWFwZSBuaSBiaWxvIG1vZ2/EjWUgdXN0dmFyaXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iUG9penZlZGJhIHphIGRva3VtZW50ZSBuaSB1c3BlbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJOZWRhdm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iUHJvc3RvOiA8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJTdG9yaXR2ZSBzaHJhbWJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IkJsacW+bmppY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+Ik5hcHJhdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJWZcSNIGFwbGlrYWNpaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IlByaWtheiBuYXByZWRuaWggbmFwcmF2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iUHJpa2F6IHZlbGlrb3N0aSBkYXRvdGVrZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iUHJpa2F6IHZlbGlrb3N0aSBuYXByYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iTmkgZWxlbWVudG92Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iRGF0b3Rla2UgbmkgbW9nb8SNZSBvZHByZXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJOZWthdGVyaWggZG9rdW1lbnRvdiBuaSBtb2dvxI1lIGl6YnJpc2F0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJEZWxpIHogZHJ1Z2ltaSBwcmVrIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjBiMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLQlNC+0LrRg9C80LXQvdGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+ItCe0YLQstC+0YDQuCDRgdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLQodCw0YfRg9Cy0LDRmCDRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLQndCw0L/RgNCw0LLQuCDQtNC40YDQtdC60YLQvtGA0LjRmNGD0LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i0J/RgNC40LrQsNC3INC80YDQtdC20LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i0J/RgNC40LrQsNC3INC70LjRgdGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i0KHQvtGA0YLQuNGA0LDRmCDQv9GA0LXQvNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i0J/RgNC10YLRgNCw0LbQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i0J/QvtC00LXRiNCw0LLQsNGa0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLQntGC0LLQvtGA0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i0KHQsNGH0YPQstCw0ZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+ItCU0LXQu9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i0JjQt9Cx0YDQuNGI0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4i0JjQt9Cw0LHRgNCw0L3QviDRmNC1IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i0J/RgNC10LzQsCDQuNC80LXQvdGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i0J/RgNC10LzQsCDQtNCw0YLRg9C80YMg0LjQt9C80LXQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+ItCf0YDQtdC80LAg0LLQtdC70LjRh9C40L3QuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+ItCf0YDQuNC60LDQttC4INC+0YHQvdC+0LLQvdC1INC10LvQtdC80LXQvdGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i0KHQsNC60YDQuNGYINC+0YHQvdC+0LLQvdC1INC10LvQtdC80LXQvdGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+ItCn0YPQstCw0ZrQtSDQtNC+0LrRg9C80LXQvdGC0LAg0L3QuNGY0LUg0YPRgdC/0LXQu9C+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+ItCU0LjRgNC10LrRgtC+0YDQuNGY0YPQvCDQvdC40ZjQtSDQvdCw0L/RgNCw0LLRmdC10L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiLQodC70LDRmtC1INGD0L/QuNGC0LAg0LfQsCDQtNC+0LrRg9C80LXQvdGC0LUg0L3QuNGY0LUg0YPRgdC/0LXQu9C+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i0J3QtdC00LDQstC90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiLQodC70L7QsdC+0LTQvdC+INGY0LUgPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i0KPRgdC70YPQs9C1INGB0LrQu9Cw0LTQuNGI0YLQtdGa0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i0J/RgNC10YfQuNGG0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+ItCj0YDQtdGS0LDRmNC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i0IjQvtGIINCw0L/Qu9C40LrQsNGG0LjRmNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i0J/RgNC40LrQsNC20Lgg0L3QsNC/0YDQtdC00L3QtSDRg9GA0LXRktCw0ZjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+ItCf0YDQuNC60LDQttC4INCy0LXQu9C40YfQuNC90YMg0LTQsNGC0L7RgtC10LrQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i0J/RgNC40LrQsNC20Lgg0LLQtdC70LjRh9C40L3RgyDRg9GA0LXRktCw0ZjQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+ItCd0LXQvNCwINGB0YLQsNCy0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+ItCd0LjRmNC1INC80L7Qs9GD0ZvQtSDQvtGC0LLQvtGA0LjRgtC4INC00LDRgtC+0YLQtdC60YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+ItCd0LjRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LHRgNC40YHQsNGC0Lgg0L3QtdC60LUg0LTQvtC60YPQvNC10L3RgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+ItCU0LXQu9C40YLQtSDQv9GA0LXQutC+Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWE1YzUwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iw5ZwcG5hIGZyw6VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTcGFyYSB0aWxsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IlNrYXBhIG1hcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iUnV0bsOkdHN2eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJMaXN0dnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iU29ydGVyYSBlZnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlPDtmsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+Ikluc3TDpGxsbmluZ2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iw5ZwcG5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNwYXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJEZWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iVGEgYm9ydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiJIYXIgdmFsdCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IkVmdGVyIG5hbW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJFZnRlciDDpG5kcmluZ3NkYXR1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJFZnRlciBzdG9ybGVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iVmlzYSByw7Z0dGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IkTDtmxqIHLDtnR0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkRldCBnaWNrIGludGUgYXR0IHNwYXJhIGRva3VtZW50ZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iRGV0IGdpY2sgaW50ZSBhdHQgc2thcGEgbWFwcGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iRGV0IGdpY2sgaW50ZSBhdHQgc8O2a2EgZWZ0ZXIgZG9rdW1lbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJTZW5hc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGxlZGlndCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IkxhZ3JpbmdzdGrDpG5zdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IkdlbnbDpGdhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iRW5oZXRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IkZsZXIgYXBwYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJWaXNhIGF2YW5jZXJhZGUgZW5oZXRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IlZpc2EgZmlsc3RvcmxlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iQmlsZHNrw6RybXNzdG9ybGVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iSW5nYSBvYmpla3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJEZXQgZ8OlciBpbnRlIGF0dCDDtnBwbmEgZmlsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IkRldCBnaWNrIGludGUgYXR0IHRhIGJvcnQgdmlzc2EgZG9rdW1lbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iRGVsYSB2aWEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OWZkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkhhdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IkZ1bmd1YSBrdXRva2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IkhpZmFkaGkga3dlbnllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IlVuZGEgZm9sZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iTXdvbmVrYW5vIGdyaWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+Ik13b25la2FubyBvcm9kaGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iUGFuZ2Ega3dhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iVXRhZnV0YWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJNaXBhbmdpbGlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iRnVuZ3VhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IkhpZmFkaGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IlNoaXJpa2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJGdXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gemltZWNoYWd1bGl3YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJLd2EgamluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+Ikt3YSB0YXJlaGUgdmlsaXBvcmVrZWJpc2h3YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJLd2EgdWt1YndhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iT255ZXNoYSB1c3VsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJGaWNoYSB1c3VsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iSW1lc2hpbmR3YSBrdWhpZmFkaGkgaGF0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJJbGlzaGluZHdhIGt1dW5kYSBmb2xkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IklsaXNoaW5kd2Ega3Vob2ppIGhhdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJIaXZpIGthcmlidW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGJpbGEgbWFsaXBvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iSHVkdW1hIHphIGhpZmFkaGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iTmppYSB6YSBta2F0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iVmlmYWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJQcm9ncmFtdSB6YWlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+Ik9ueWVzaGEgdmlmYWEgbWFoaXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iT255ZXNoYSB1a3Vid2Egd2EgZmFpbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+Ik9ueWVzaGEgdWt1YndhIHdhIGtpZmFhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iSGFrdW5hIHZpcGVuZ2VlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iSGFpd2V6aSBrdWZ1bmd1YSBmYWlsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iSW1lc2hpbmR3YSBrdWZ1dGEgYmFhZGhpIHlhIGhhdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iU2hpcmlraSBrdXBpdGlhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWM4ODEwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLguYDguK3guIHguKrguLLguKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IuC5gOC4m+C4tOC4lOC4iOC4suC4gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4i4Lia4Lix4LiZ4LiX4Li24LiB4LmE4Lib4Lii4Lix4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IuC4quC4o+C5ieC4suC4h+C5guC4n+C4peC5gOC4lOC4reC4o+C5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLguKHguLjguKHguKHguK3guIfguJXguLLguKPguLLguIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i4Lih4Li44Lih4Lih4Lit4LiH4Lij4Liy4Lii4LiB4Liy4LijIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IuC4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C4leC4suC4oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IuC4hOC5ieC4meC4q+C4siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4LiyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i4LmA4Lib4Li04LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IuC4muC4seC4meC4l+C4tuC4gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i4LmB4LiK4Lij4LmMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i4Lil4LiaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+IuC5gOC4peC4t+C4reC4geC5hOC4p+C5iSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IuC4leC4suC4oeC4iuC4t+C5iOC4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IuC4leC4suC4oeC4p+C4seC4meC4l+C4teC5iOC4l+C4teC5iOC4m+C4o+C4seC4muC5gOC4m+C4peC4teC5iOC4ouC4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLguJXguLLguKHguILguJnguLLguJQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLguYHguKrguJTguIfguKPguLLguIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i4LiL4LmI4Lit4LiZ4Lij4Liy4LiBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLguIHguLLguKPguJrguLHguJnguJfguLbguIHguYDguK3guIHguKrguLLguKPguKXguYnguKHguYDguKvguKXguKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i4LiB4Liy4Lij4Liq4Lij4LmJ4Liy4LiH4LmC4Lif4Lil4LmA4LiU4Lit4Lij4LmM4Lil4LmJ4Lih4LmA4Lir4Lil4LinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i4LiB4Liy4Lij4LiE4LmJ4LiZ4Lir4Liy4LmA4Lit4LiB4Liq4Liy4Lij4Lil4LmJ4Lih4LmA4Lir4Lil4LinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i4Lil4LmI4Liy4Liq4Li44LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4i4Lin4LmI4Liy4LiHIDx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IuC4muC4o+C4tOC4geC4suC4o+C4l+C4teC5iOC5gOC4geC5h+C4muC4guC5ieC4reC4oeC4ueC4pSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLguJfguLLguIfguKXguLHguJQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IuC4reC4uOC4m+C4geC4o+C4k+C5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IuC5geC4reC4m+C5gOC4nuC4tOC5iOC4oeC5gOC4leC4tOC4oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IuC5geC4quC4lOC4h+C4reC4uOC4m+C4geC4o+C4k+C5jOC4guC4seC5ieC4meC4quC4ueC4hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IuC5geC4quC4lOC4h+C4guC4meC4suC4lOC4guC4reC4h+C5hOC4n+C4peC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i4LmB4Liq4LiU4LiH4LiC4LiZ4Liy4LiU4LiC4Lit4LiH4Lit4Li44Lib4LiB4Lij4LiT4LmMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i4LmE4Lih4LmI4Lih4Li14Lij4Liy4Lii4LiB4Liy4LijIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lib4Li04LiU4LmE4Lif4Lil4LmM4LmE4LiU4LmJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLguYTguKHguYjguKrguLLguKHguLLguKPguJbguKXguJrguYDguK3guIHguKrguLLguKPguJrguLLguIfguKPguLLguKLguIHguLLguKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i4LmB4LiK4Lij4LmM4Lic4LmI4Liy4LiZIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGZkOGM4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJNZ2EgRG9rdW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJCdWtzYW4gbXVsYSBzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iSS1zYXZlIHNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+Ikd1bWF3YSBuZyBmb2xkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iVmlldyBuZyBncmlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlZpZXcgbmcgbGlzdGFoYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iUGFnLXVyaS11cmlpbiBheW9uIHNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iTWFnaGFuYXAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+Ik1nYSBTZXR0aW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iQnVrc2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+Ikktc2F2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iSWJhaGFnaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IlRhbmdnYWxpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IGFuZyBwaW5pbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iQXlvbiBzYSBwYW5nYWxhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IkF5b24gc2EgcGV0c2EgbmcgcGFnYmFnbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJBeW9uIHNhIGxha2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJJcGFraXRhIGFuZyBtZ2Egcm9vdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJJdGFnbyBhbmcgbWdhIHJvb3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkhpbmRpIG5hLXNhdmUgYW5nIGRva3VtZW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJIaW5kaSBuYWdhd2EgYW5nIGZvbGRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IkhpbmRpIG5hLXF1ZXJ5IGFuZyBtZ2EgZG9rdW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iS2FtYWthaWxhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBhbmcgbGlicmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJNZ2Egc2VyYmlzeW8gbmcgc3RvcmFnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJNZ2EgU2hvcnRjdXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+Ik1nYSBEZXZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJIaWdpdCBwYW5nIGFwcHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJJcGFraXRhIGFuZyBtZ2EgYWR2YW5jZWQgbmEgZGV2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iSXBha2l0YSBhbmcgbGFraSBuZyBmaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJJcGFraXRhIGFuZyBsYWtpIG5nIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IldhbGFuZyBtZ2EgaXRlbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkhpbmRpIG1hYnVrc2FuIGFuZyBmaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJIaW5kaSBtYXRhbmdnYWwgYW5nIGlsYW5nIGRva3VtZW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJJYmFoYWdpIHNhIHBhbWFtYWdpdGFuIG5nIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTlhNWNkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2vDvG1hbmxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4ixZ51cmFkYW4gYcOnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4ixZ51cmF5YSBrYXlkZXQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IktsYXPDtnIgb2x1xZ90dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iVGFibG8gZ8O2csO8bsO8bcO8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+Ikxpc3RlIGfDtnLDvG7DvG3DvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJTxLFyYWxhbWEgw7Zsw6fDvHTDvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IkFyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iQXlhcmxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IkHDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJLYXlkZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IlBheWxhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJTaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiB0YW5lIHNlw6dpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IkFkYSBnw7ZyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IkRlxJ9pxZ9pa2xpayB0YXJpaGluZSBnw7ZyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJCb3l1dGEgZ8O2cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJLw7ZrbGVyaSBnw7ZzdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IkvDtmtsZXJpIHNha2xhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJEb2vDvG1hbiBrYXlkZWRpbGVtZWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IktsYXPDtnIgb2x1xZ90dXJ1bGFtYWTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IkRva8O8bWFubGFyIHNvcmd1bGFuYW1hZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iRW4gc29uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGJvxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJEZXBvbGFtYSBoaXptZXRsZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IkvEsXNheW9sbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJDaWhhemxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IkRpxJ9lciB1eWd1bGFtYWxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IkdlbGnFn21pxZ8gY2loYXpsYXLEsSBnw7ZzdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iRG9zeWEgYm95dXR1bnUgZ8O2c3RlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iQ2loYXogYm95dXR1bnUgZ8O2c3RlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IsOWxJ9lIHlvayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkRvc3lhIGHDp8SxbGFtxLF5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IkJhesSxIGRva8O8bWFubGFyIHNpbGluZW1peW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IsWedW51IGt1bGxhbmFyYWsgcGF5bGHFnzoiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4N2I2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+ItCU0L7QutGD0LzQtdC90YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i0JLRltC00LrRgNC40YLQuCDQsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4i0JfQsdC10YDQtdCz0YLQuCDQsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLQodGC0LLQvtGA0LjRgtC4INC/0LDQv9C60YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i0KDQtdC20LjQvCDRgtCw0LHQu9C40YbRliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLQoNC10LbQuNC8INGB0L/QuNGB0LrRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLQn9Cw0YDQsNC80LXRgtGA0Lgg0YHQvtGA0YLRg9Cy0LDQvdC90Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLQn9C+0YjRg9C6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLQndCw0LvQsNGI0YLRg9Cy0LDQvdC90Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLQktGW0LTQutGA0LjRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+ItCX0LHQtdGA0LXQs9GC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+ItCf0L7QtNGW0LvQuNGC0LjRgdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i0JLQuNC00LDQu9C40YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiLQktC40LHRgNCw0L3QviA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+ItCX0LAg0L3QsNC30LLQvtGOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i0JfQsCDQtNCw0YLQvtGOINC30LzRltC90LXQvdC90Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i0JfQsCDRgNC+0LfQvNGW0YDQvtC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i0J/QvtC60LDQt9Cw0YLQuCDQutC+0YDQtdC90LXQstGWINC60LDRgtCw0LvQvtCz0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i0KHRhdC+0LLQsNGC0Lgg0LrQvtGA0LXQvdC10LLRliDQutCw0YLQsNC70L7Qs9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLQndC1INCy0LTQsNC70L7RgdGPINC30LHQtdGA0LXQs9GC0Lgg0LTQvtC60YPQvNC10L3RgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLQn9C+0LzQuNC70LrQsCDRgdGC0LLQvtGA0LXQvdC90Y8g0L/QsNC/0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+ItCf0L7QvNC40LvQutCwINC90LDQtNGB0LjQu9Cw0L3QvdGPINC30LDQv9C40YLRgyDQvdCwINC00L7QutGD0LzQtdC90YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+ItCe0YHRgtCw0L3QvdGWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+INCy0ZbQu9GM0L3QvtCz0L4g0LzRltGB0YbRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+ItCe0L3Qu9Cw0LnQvS3RgdGF0L7QstC40YnQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLQr9GA0LvQuNC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+ItCf0YDQuNGB0YLRgNC+0ZciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLQhtC90YjRliDQv9GA0L7Qs9GA0LDQvNC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i0J/QvtC60LDQt9Cw0YLQuCDQv9C+0LrRgNCw0YnQtdC90ZYg0L/RgNC40YHRgtGA0L7RlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+ItCf0L7QutCw0LfQsNGC0Lgg0YDQvtC30LzRltGAINGE0LDQudC70YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+ItCf0L7QutCw0LfQsNGC0Lgg0YDQvtC30LzRltGAINC/0YDQuNGB0YLRgNC+0Y4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLQndC10LzQsNGUINC10LvQtdC80LXQvdGC0ZbQsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+ItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00LrRgNC40YLQuCDRhNCw0LnQuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i0J3QtSDQstC00LDQu9C+0YHRjyDQstC40LTQsNC70LjRgtC4INC00LXRj9C60ZYg0LTQvtC60YPQvNC10L3RgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+ItCd0LDQtNGW0YHQu9Cw0YLQuCDRh9C10YDQtdC3Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWUyOWZhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJUw6BpIGxp4buHdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iTeG7nyB04burIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJMxrB1IHbDoG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iVOG6oW8gdGjGsCBt4bulYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJDaOG6vyDEkeG7mSB4ZW0gbMaw4bubaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJDaOG6vyDEkeG7mSB4ZW0gZGFuaCBzw6FjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJT4bqvcCB44bq/cCB0aGVvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iVMOsbSBraeG6v20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IkPDoGkgxJHhurd0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iTeG7nyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJMxrB1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJDaGlhIHPhursiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJYw7NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+IsSQw6MgY2jhu41uIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iVGhlbyB0w6puIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iVGhlbyBuZ8OgeSBz4butYSDEkeG7lWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iVGhlbyBrw61jaCB0aMaw4bubYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+Ikhp4buDbiB0aOG7iyBn4buRYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLhuqhuIGfhu5FjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJLaMO0bmcgbMawdSB0w6BpIGxp4buHdSDEkcaw4bujYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJLaMO0bmcgdGjhu4MgdOG6oW8gdGjGsCBt4bulYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+Iktow7RuZyB0cnV5IHbhuqVuIMSRxrDhu6NjIHTDoGkgbGnhu4d1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iR+G6p24gxJHDonkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gY8OybiB0cuG7kW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iROG7i2NoIHbhu6UgbMawdSB0cuG7ryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJM4buRaSB04bqvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iVGhp4bq/dCBi4buLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iQ8OhYyDhu6luZyBk4bulbmcga2jDoWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJIaeG7g24gdGjhu4sgY8OhYyB0aGnhur90IGLhu4sgbsOibmcgY2FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iSGnhu4NuIHRo4buLIGvDrWNoIHRoxrDhu5tjIHThu4dwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJIaeG7g24gdGjhu4sga8OtY2ggdGjGsOG7m2MgdGhp4bq/dCBi4buLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iS2jDtG5nIGPDsyBt4bulYyBuw6BvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iS2jDtG5nIHRo4buDIG3hu58gdOG7h3AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Iktow7RuZyB0aOG7gyB4w7NhIG3hu5l0IHPhu5EgdMOgaSBsaeG7h3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iQ2hpYSBz4bq7IHF1YSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDJjZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i5paH5qGjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLmiZPlvIDmlofku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IuS/neWtmOaWh+S7tiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLmlrDlu7rmlofku7blpLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i572R5qC86KeG5Zu+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IuWIl+ihqOinhuWbviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLmjpLluo/kvp3mja4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLmkJzntKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+Iuiuvue9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IuaJk+W8gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLkv53lrZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IuWIhuS6qyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IuWIoOmZpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiLlt7LpgInmi6k8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+6aG5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IuaMieWQjeensCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IuaMieS/ruaUueaXpeacnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLmjInlpKflsI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLmmL7npLrmoLnnm67lvZUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i6ZqQ6JeP5qC555uu5b2VIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLml6Dms5Xkv53lrZjmlofmoaMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i5peg5rOV5Yib5bu65paH5Lu25aS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i5peg5rOV5p+l6K+i5paH5qGjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i5pyA6L+RIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4i5Y+v55So56m66Ze077yaPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i5a2Y5YKo5pyN5YqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IuaNt+W+hCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i6K6+5aSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i5pu05aSa5bqU55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i5pi+56S66auY57qn6K6+5aSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i5pi+56S65paH5Lu25aSn5bCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLmmL7npLrorr7lpIflpKflsI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLml6Dku7vkvZXmlofku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLml6Dms5XmiZPlvIDmlofku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IuaXoOazleWIoOmZpOmDqOWIhuaWh+ahoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLliIbkuqvmlrnlvI8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlZDU4NwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IuaWh+S7tiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i6ZaL5ZWf6IeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLlhLLlrZjoh7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i5bu656uL6LOH5paZ5aS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IuagvOeLgOaqouimliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLmuIXllq7mqqLoppYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i5o6S5bqP5pa55byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i5pCc5bCLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLoqK3lrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLplovllZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i5YSy5a2YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLliIbkuqsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLliKrpmaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4i5bey6YG45Y+WIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4g5YCLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IuaMieWQjeeosSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IuaMieS/ruaUueaXpeacnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLmjInlpKflsI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLpoa/npLrmoLnnm67pjIQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i6Zqx6JeP5qC555uu6YyEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLnhKHms5XlhLLlrZjmlofku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i54Sh5rOV5bu656uL6LOH5paZ5aS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i54Sh5rOV5p+l6Kmi5paH5Lu2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i6L+R5pyf55So6YGOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4i5Y+v55So56m66ZaT77yaPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i5YSy5a2Y56m66ZaT5pyN5YuZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IuaNt+W+kSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i6KOd572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i5pu05aSa5oeJ55So56iL5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i6aGv56S66YCy6ZqO6KOd572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i6aGv56S65qqU5qGI5aSn5bCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLpoa/npLroo53nva7lpKflsI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLmspLmnInpoIXnm64iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLnhKHms5XplovllZ/mqpTmoYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IueEoeazleWIqumZpOmDqOWIhuaWh+S7tiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLliIbkuqvmlrnlvI/vvJoiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY5NTgzYQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IuaWh+S7tiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i6ZaL5ZWf5bel5YW3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLlhLLlrZjoh7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i5bu656uL6LOH5paZ5aS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IuagvOeLgOaqouimliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLmuIXllq7mqqLoppYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i5o6S5bqP5L6d5pOaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i5pCc5bCLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLoqK3lrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLplovllZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i5YSy5a2YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLlhbHnlKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLliKrpmaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4i5bey6YG45Y+WIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4g5YCL6aCF55uuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IuS+neWQjeeosSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IuS+neS/ruaUueaXpeacnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLkvp3lpKflsI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLpoa/npLrmoLnnm67pjIQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i6Zqx6JeP5qC555uu6YyEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLnhKHms5XlhLLlrZjmlofku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i54Sh5rOV5bu656uL6LOH5paZ5aS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i54Sh5rOV5p+l6Kmi5paH5Lu2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i5pyA6L+R5L2/55So6YGO55qE6aCF55uuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4i5Y+v55So56m66ZaT77yaPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i5YSy5a2Y56m66ZaT5pyN5YuZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IuaNt+W+kSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i6KOd572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i5pu05aSa5oeJ55So56iL5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i6aGv56S66YCy6ZqO6KOd572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i6aGv56S65qqU5qGI5aSn5bCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLpoa/npLroo53nva7lpKflsI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLmspLmnInpoIXnm64iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLnhKHms5XplovllZ/mqpTmoYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IueEoeazleWIqumZpOmDqOWIhuaWh+S7tiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLliIbkuqvmlrnlvI/vvJoiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZGQyY2RmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJBbWFkb2todW1lbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJWdWxhIGt1c3VrYSBrdS0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IkxvbmRvbG96YSBrdS0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iRGFsYSBpZm9sZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iVWt1YnVrYSBrd2VncmlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJVa3VidWthIHVobHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iSGx1bmdhIG5nZS0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJTZXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iSXppbHVuZ2lzZWxlbG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJWdWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IkxvbmRvbG96YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iWWFiZWxhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJTdXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gb2t1a2hldGhpd2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iTmdlZ2FtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+Ik5nZWRldGhpIHlva3VndXF1bGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iTmdvc2F5aXppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iQm9uaXNhIGl6aW1wYW5kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJGaWhsYSBpemltcGFuZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IlllaGx1bGVraWxlIHVrdWxvbmRvbG96YSBpZG9raHVtZW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJZZWhsdWxla2lsZSB1a3VkYWxhIGlmb2xkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IklobHVsZWtpbGUgdWt1YnV6YSBhbWFkb2todW1lbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iT2t3YWthbXV2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBva2h1bHVsZWtpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJBbWFzZXZpc2kgd2VzaXRvcmVqaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJJemlucWFtdWxlbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkFtYWRpdmF5aXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iSXppbmhsZWxvIHpva3VzZWJlbnphIGV6aW5pbmdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iQm9uaXNhIGFtYWRpdmF5aXNpIGFwaGFrZW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iQm9uaXNhIHVzYXlpemkgd2VmYXllbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IkJvbmlzYSB1c2F5aXppIHdlZGl2YXlpc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJBemlraG8gaXppbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iQXlpa3dhemkgdWt1dnVsYSBpZmF5ZWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJBeWlrd2F6aSB1a3VzdXNhIGFtYW55ZSBhbWFkb2todW1lbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IllhYmVsYW5hIG5nZS0iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9JY29uVXRpbHMuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9JY29uVXRpbHMuamF2YQppbmRleCAxZjczODZjLi43MWZkMTAwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvSWNvblV0aWxzLmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0ljb25VdGlscy5qYXZhCkBAIC0yMiw3ICsyMiw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuY29sbGVjdC5NYXBzOwogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvUmVjZW50c0NyZWF0ZUZyYWdtZW50LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvUmVjZW50c0NyZWF0ZUZyYWdtZW50LmphdmEKaW5kZXggMDU3NjZmNS4uODJjMzA0OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1JlY2VudHNDcmVhdGVGcmFnbWVudC5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9SZWNlbnRzQ3JlYXRlRnJhZ21lbnQuamF2YQpAQCAtNTQsOCArNTQsNiBAQAogCiBpbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOwogCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU2F2ZUZyYWdtZW50LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU2F2ZUZyYWdtZW50LmphdmEKaW5kZXggOWQ3MGM1MS4uY2U5OGRiMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1NhdmVGcmFnbWVudC5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9TYXZlRnJhZ21lbnQuamF2YQpAQCAtMjMsNyArMjMsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5FZGl0YWJsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFdhdGNoZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZTg4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IkVrc3Rlcm5lIGJlcmdpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJJbnRlcm5lIGJlcmdpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2t1bWVudGUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMGZiMDYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuGLjeGMq+GLiiDhiJvhiqjhiJvhibsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLhi43hiLXhjKPhi4og4Yib4Yqo4Yib4Ym7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i4Yiw4YqQ4Yu24Ym9Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjBhMDU2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLZiNit2K/YqSDYqtiu2LLZitmGINiu2KfYsdis2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+ItmI2K3Yr9ipINiq2K7YstmK2YYg2K/Yp9iu2YTZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i2YXYs9iq2YbYr9in2KoiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhNzljYTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJYYXJpY2kgWWFkZGHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkRheGlsaSB5YWRkYcWfIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmE3OWNhOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iWGFyaWNpIFlhZGRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJEYXhpbGkgeWFkZGHFnyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkY2UzMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i0JLRitC90YjQvdC+INGF0YDQsNC90LjQu9C40YnQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+ItCS0YrRgtGA0LXRiNC90L4g0YXRgNCw0L3QuNC70LjRidC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i0JTQvtC60YPQvNC10L3RgtC4Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWU5ZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJFbW1hZ2F0emVtYXRnZSBleHRlcm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJFbW1hZ2F0emVtYXRnZSBpbnRlcm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2N1bWVudHMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OGE5MjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IkV4dGVybsOtIMO6bG/FvmnFoXTEmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybsOtIMO6bG/FvmnFoXTEmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50eSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllY2I2OQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iRWtzdGVybiBsYWdyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iSW50ZXJuIGxhZ3JpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2t1bWVudGVyIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTg2MzRhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJFeHRlcm5lciBTcGVpY2hlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybmVyIFNwZWljaGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9rdW1lbnRlIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2FhNzkyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLOlc6+z4nPhM61z4HOuc66z4zPgiDOsc+Azr/OuM63zrrOtc+Fz4TOuc66z4zPgiDPh8+Oz4HOv8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4izpXPg8+Jz4TOtc+BzrnOus+Mz4IgzrHPgM6/zrjOt866zrXPhc+EzrnOus+Mz4Igz4fPjs+Bzr/PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+Is6IzrPOs8+BzrHPhs6xIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OGViOWUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJFeHRlcm5hbCBTdG9yYWdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iSW50ZXJuYWwgc3RvcmFnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRvY3VtZW50cyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODhlYjllCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iRXh0ZXJuYWwgU3RvcmFnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybmFsIHN0b3JhZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2N1bWVudHMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlMzhiNQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IkFsbWFjZW5hbWllbnRvIGV4dGVybm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJBbG1hY2VuYW1pZW50byBpbnRlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRvcyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlMzhiNQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iQWxtYWNlbmFtaWVudG8gZXh0ZXJubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkFsbWFjZW5hbWllbnRvIGludGVybm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2N1bWVudG9zIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjRlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJWw6RsaW5lIHRhbGxldHVzcnV1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IlNpc2VtaW5lIHNhbHZlc3R1c3J1dW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2t1bWVuZGlkIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDcxZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLZgdi22KfbjCDYsNiu24zYsdmHINiu2KfYsdis24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLYrdin2YHYuNmH2ZQg2K/Yp9iu2YTbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+Itin2LPZhtin2K8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMWZiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IlVsa29pbmVuIHRhbGxlbm51c3RpbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJTaXPDpGluZW4gdGFsbGVubnVzdGlsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50aXQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmZGQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IlN0b2NrYWdlIGV4dGVybmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJNw6ltb2lyZSBkZSBzdG9ja2FnZSBpbnRlcm5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRzIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2ZkZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJTdG9ja2FnZSBleHRlcm5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iTcOpbW9pcmUgZGUgc3RvY2thZ2UgaW50ZXJuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRvY3VtZW50cyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIyN2JkNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i4KSs4KS+4KS54KSw4KWAIOCkuOCkguCkl+CljeCksOCkueCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLgpKbgpLjgpY3gpKTgpL7gpLXgpYfgpJzgpLwiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NGY4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IlZhbmpza2EgcG9ocmFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IlVudXRhcm5qYSBwb2hyYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9rdW1lbnRpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjcyYjQxCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJLw7xsc8WRIHTDoXJoZWx5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iQmVsc8WRIHTDoXJoZWx5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9rdW1lbnR1bW9rIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNjAxMjQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLUsdaA1b/VodaE1avVtiDVutWh1bDVuNaBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4i1YbVpdaA1oTVq9W2INW61aHVsNW41oEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLVk9Wh1b3Vv9Wh1anVstWp1aXWgCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJhY2RlNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iUGVueWltcGFuYW4gRWtzdGVybmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iUGVueWltcGFuYW4gaW50ZXJuYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2t1bWVuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTdiNWZmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJBcmNoaXZpbyBlc3Rlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iTWVtb3JpYSBpbnRlcm5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzU1MDZhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLXkNeX16HXldefINeX15nXpteV16DXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IteQ15fXodeV158g16TXoNeZ157XmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+Itee16HXnteb15nXnSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4ZmNhMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i5aSW6YOo44K544OI44Os44O844K4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4i5YaF6YOo44K544OI44Os44O844K4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i44OJ44Kt44Ol44Oh44Oz44OIIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMDQ4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLhg5Lhg5Dhg6Dhg5Qg4YOb4YOU4YOu4YOh4YOY4YOU4YOg4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4i4YOo4YOY4YOT4YOQIOGDm+GDlOGDruGDoeGDmOGDlOGDoOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IuGDk+GDneGDmeGDo+GDm+GDlOGDnOGDouGDlOGDkeGDmCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2Y3NmQ0MAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuGep+GelOGegOGemuGejuGfjeKAi+KAi+GeleGfkuGekeGeu+GegOKAi+GegeGetuGehOGegOGfkuGemuGfhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuGep+GelOGegOGemuGejuGfjeKAi+GeleGfkuGekeGeu+GegOKAi+GegeGetuGehOKAi+GegOGfkuGek+Geu+GehCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IuGer+GegOGen+GetuGemiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5ZDM3ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i7Jm467aAIOyggOyepeyGjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuuCtOu2gCDsoIDsnqXshowiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLrrLjshJwiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjZDlmNQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuC6muC7iOC6reC6meC6iOC6seC6lOC7gOC6geC6seC6muC6guC7jeC7ieC6oeC6ueC6meC6nuC6suC6jeC6meC6reC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuC6muC7iOC6reC6meC6iOC6seC6lOC7gOC6geC6seC6muC6guC7jeC7ieC6oeC6ueC6meC6nuC6suC6jeC7g+C6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IuC7gOC6reKAi+C6geC6sOKAi+C6quC6suC6mSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwZWE4OQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iScWhb3JpbsSXIGF0bWludGluxJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJWaWRpbsSXIGF0bWludGluxJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2t1bWVudGFpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzA4ZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLEgHLEk2rEgSBrcsSBdHV2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+Iklla8WhxJNqxIEgYXRtacWGYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50aSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDdiN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i0JPQsNC00LDQsNC0INGB0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+ItCU0L7RgtC+0L7QtCDRgdCw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLQlNC+0LrRg9C80LXQvdGC0q/Sr9C0Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNGQ3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJTdG9yYW4gTHVhcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iU3RvcmFuIGRhbGFtYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2t1bWVuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWVjYjY5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJFa3N0ZXJuIGxhZ3JpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJJbnRlcm4gbGFncmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50ZXIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5NDU0ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuCkrOCkvuCkueCljeCkryDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU2MTY2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJFeHRlcm5lIG9wc2xhZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybmUgb3BzbGFnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRlbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1ZTdkNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iUGFtacSZxIcgemV3bsSZdHJ6bmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJQYW1pxJnEhyB3ZXduxJl0cnpuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50eSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2M4OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iQXJtYXplbmFtZW50byBleHRlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iQXJtYXplbmFtZW50byBpbnRlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRvcyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjODliOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iQXJtYXplbmFtZW50byBleHRlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iQXJtYXplbmFtZW50byBpbnRlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRvcyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkMGI5OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iU3RvY2FyZSBleHRlcm7EgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IlN0b2NhcmUgaW50ZXJuxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2N1bWVudGUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YzEwOTUxCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLQktC90LXRiNC90LjQuSDQvdCw0LrQvtC/0LjRgtC10LvRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+ItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC/0LDQvNGP0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+ItCU0L7QutGD0LzQtdC90YLRiyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTNmM2U4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i4La24LeP4LeE4LeS4La7IOC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtroiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNDI0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IkV4dGVybsO9IHVrbGFkYWPDrSBwcmllc3RvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybsO9IHVrbGFkYWPDrSBwcmllc3RvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50eSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmYTY5OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iWnVuYW5qYSBzaHJhbWJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iTm90cmFuamEgc2hyYW1iYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50aSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyMzhhNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i0KHQv9C+0ZnQvdCwINC80LXQvNC+0YDQuNGY0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLQmNC90YLQtdGA0L3QsCDQvNC10LzQvtGA0LjRmNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i0JTQvtC60YPQvNC10L3RgtC4Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWFjMTFlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJFeHRlcm4gbGFncmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybiBsYWdyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9rdW1lbnQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGU0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IkhpZmFkaGkgeWEgTmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iSGlmYWRoaSB5YSBuZGFuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkhhdGkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NjYzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuC4l+C4teC5iOC4iOC4seC4lOC5gOC4geC5h+C4muC4guC5ieC4reC4oeC4ueC4peC4oOC4suC4ouC4meC4reC4gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuC4l+C4teC5iOC4iOC4seC4lOC5gOC4geC5h+C4muC4guC5ieC4reC4oeC4ueC4peC4oOC4suC4ouC5g+C4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IuC5gOC4reC4geC4quC4suC4oyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI5Y2RjMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iRXh0ZXJuYWwgU3RvcmFnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybmFsIHN0b3JhZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJNZ2EgRG9rdW1lbnRvIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmJkNTJhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJIYXJpY2kgRGVwb2xhbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJEYWhpbGkgZGVwb2xhbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2vDvG1hbmxhciI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyMDZlMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i0JfQvtCy0L3RltGI0L3RjyDQv9Cw0LzigJnRj9GC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLQktC90YPRgtGA0ZbRiNC90Y8g0L/QsNC84oCZ0Y/RgtGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i0JTQvtC60YPQvNC10L3RgtC4Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTcxYzkzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJC4buZIG5o4bubIG5nb8OgaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkLhu5kgbmjhu5sgdHJvbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJUw6BpIGxp4buHdSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGY3N2RkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i5aSW6YOo5a2Y5YKo6K6+5aSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4i5YaF6YOo5a2Y5YKo56m66Ze0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i5paH5qGjIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDhhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLlpJbpg6jlhLLlrZjnqbrplpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLlhafpg6jlhLLlrZjnqbrplpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLmlofku7YiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkOGFmYgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuWklumDqOWEsuWtmOepuumWkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuWFp+mDqOWEsuWtmOepuumWkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IuaWh+S7tiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwYTg0NQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iSXNpdG9yZWppIHNhbmdhcGhhbmRsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IklzaXRvcmVqaSBzYW5nYXBoYWthdGhpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iQW1hZG9raHVtZW50aSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjFhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IlNhYW1nZXNtZWx0ZSBsaWdnaW5nIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJjZjdhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiLYp9mE2YXZiNmC2Lkg2KfZhNmF2K/ZhdisIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlNTEyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJVYmljYWNpw7MgY29tYmluYWRhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTVmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IktvbWJpbmllcnRlIFN0YW5kb3J0YmVzdGltbXVuZyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNDNiMjEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+Is6Vzr3Ov8+Azr/Ouc63zrzOrc69zrcgz4TOv8+Azr/OuM61z4POr86xIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5NTMxNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IlViaWNhY2nDs24gY29tYmluYWRhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5NTMxNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iVWJpY2FjacOzbiBjb21iaW5hZGEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZjRlZjcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJMaWlkZXR1ZCBhc3Vrb2h0Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDMwOGIzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJZaGRpc3RldHR5IHNpamFpbnRpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhMmNjOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iTG9rYWNpamEgaXoga29tYmluaXJhbmloIGl6dm9yYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDllNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4i4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6R4Z644Z6P4Z624Z+G4Z6EIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0MGNiMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iQXB2aWVub3RhIGF0cmHFoWFuxIFzIHZpZXRhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDU1Y2E4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4i0J3RjdCz0LTQvNGN0Lsg0LHQsNC50YDRiNC40LsiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNDVjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJMb2thc2kgVGVybGFrdXIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMDAzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IlNhbWVuZ2VzdGVsZGUgbG9jYXRpZSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzcwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IlXFm3JlZG5pb25hIGxva2FsaXphY2phIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzA3ZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iTG9jYWxpemHDp8OjbyBGdW5kaWRhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY4Mjc3YQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iTG9jYWxpemHDp8OjbyBjb21iaW5hZGEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZDllNmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+ItCT0LXQvtC00LDQvdC90YvQtSDQuNC3INC90LXRgdC60L7Qu9GM0LrQuNGFINC40YHRgtC+0YfQvdC40LrQvtCyIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjhjNTBiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJLb21iaW5pcmFuYSBsb2thY2lqYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGMyMzVlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJFbmVvIEhha2lrYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRhMjUwNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iTmFrYS1mdXNlIG5hIExva2FzeW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZTgzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+Ilbhu4sgdHLDrSDEkcaw4bujYyBo4bujcCBuaOG6pXQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZDdiYzEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiLkuIDkvZPljJbkvY3nva7kv6Hmga8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkNDM1OQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iSW5kYXdvIGVobGFuZ2FuaXNpd2UiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vc3JjL2NvbS9hbmRyb2lkL2xvY2F0aW9uL2Z1c2VkL0Z1c2VkTG9jYXRpb25TZXJ2aWNlLmphdmEgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3NyYy9jb20vYW5kcm9pZC9sb2NhdGlvbi9mdXNlZC9GdXNlZExvY2F0aW9uU2VydmljZS5qYXZhCmluZGV4IDUwOWMwMTAuLjEyOTY2Y2YgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vc3JjL2NvbS9hbmRyb2lkL2xvY2F0aW9uL2Z1c2VkL0Z1c2VkTG9jYXRpb25TZXJ2aWNlLmphdmEKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9zcmMvY29tL2FuZHJvaWQvbG9jYXRpb24vZnVzZWQvRnVzZWRMb2NhdGlvblNlcnZpY2UuamF2YQpAQCAtMTYsOSArMTYsNiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLmxvY2F0aW9uLmZ1c2VkOwogCi1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotCiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmY2JiNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW52b2VydG9lc3RlbGxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkLXNsZXV0ZWxib3JkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iRW5nZWxzIChWSykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJFbmdlbHMgKFZTKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iRW5nZWxzIChWUyksIGludGVybmFzaW9uYWxlIHN0eWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkVuZ2VscyAoVlMpLCBDb2xlbWFrLXN0eWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJFbmdlbHMgKFZTKSwgRHZvcmFrLXN0eWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IkR1aXRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyYW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW5zIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzc2llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXNzaWVzLCBNYWMtc3R5bCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYWFucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4iU3dpdHNlcnNlIEZyYW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJTd2l0c2Vyc2UgRHVpdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCdWxnYWFycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYWFucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGVlbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vb3JzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJTd2VlZHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iktyb2F0aWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IlRzamVnZ2llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJFc3RuaWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIb25nYWFycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iWXNsYW5kcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsaWFhbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdlZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3dhYWtzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG93ZWVucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmtzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJPZWtyYcOvZW5zIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NzU3NzIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IuGLqOGMjeGJpOGJtSDhiJjhiKPhiKrhi6vhi47hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IuGLqEFuZHJvaWQg4Yuo4YmB4YiN4Y2NIOGIsOGIjOGLsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IuGKpeGKleGMjeGIiuGLneGKmyAo4Yup4YqsKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IuGKpeGKleGMjeGIiuGLmOGKmyAo4YupLuGKpOGItS4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLhiqXhipXhjI3hiIrhi5jhipsgKOGLqS4g4Yqk4Yi1LinhjaMg4Yqg4YiI4YidIOGKoOGJgOGNjSDhiYXhjKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IuGKpeGKleGMjeGIiuGLmOGKmyAo4YupLiDhiqThiLUuKeGNoyDhi6jhiq7hiI3hiJvhiK3hiq0g4YmF4YylIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4i4Yql4YqV4YyN4YiK4YuY4YqbICjhi6kuIOGKpOGItS4p4Y2jIOGLqOGLteGJruGIq+GKrSDhiYXhjKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IuGMgOGIreGImOGKlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLhjYjhiKjhipXhiLPhi63hipsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4i4Y2I4Yio4YqV4Yiz4Yut4YqbICjhiqvhipPhi7MpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i4Yip4Yi14Yur4YqbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IuGIqeGIteGLq+GKm+GNoyBNYWMg4YmF4YylIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i4Yi14Y2T4YqS4Yi9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLhi6jhiLXhi4rhi50g4Y2I4Yio4YqV4Yiz4Yut4YqbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLhi6jhiLXhi4rhi50g4YyA4Yit4YiY4YqVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i4Ymk4YiN4YyC4Yuo4YidIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLhiaHhiI3hjIvhiKrhi6siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLhjKPhiIrhi6vhipXhipsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IuGLtOGKkuGIvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4i4YqW4Yit4YuM4YyC4YurIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLhiLXhi4rhi7XhipXhipsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLhjYrhipLhiL0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i4Yqt4Yiu4Yi94YurIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IuGJvOGKrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLhiqThiLXhibbhipLhi6siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IuGIgOGKleGMi+GIqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i4Yqg4Yut4Yi14YiL4YqV4Yu1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLhiaXhiKvhi5rhiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLhjZbhiK3hibnhjIvhiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IuGIteGIjuGJq+GKrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i4Yi14YiO4Ymr4YqS4YurIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i4Ymx4Yit4Yqt4YqbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLhi6nhiq3hiKzhipUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzZDk3OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i2KPYrNmH2LLYqSDYpdiv2K7Yp9mEINio2YrYp9mG2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4i4oCP2YTZiNit2Kkg2YXZgdin2KrZititIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLYp9mE2KXZhtis2YTZitiy2YrYqSAo2KfZhNmF2YXZhNmD2Kkg2KfZhNmF2KrYrdiv2KkpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i2KfZhNil2YbYrNmE2YrYstmK2KkgKNin2YTZiNmE2KfZitin2Kog2KfZhNmF2KrYrdiv2KkpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLYp9mE2KXZhtis2YTZitiy2YrYqSAo2KfZhNmI2YTYp9mK2KfYqiDYp9mE2YXYqtit2K/YqSnYjCDYp9mE2YbZhdi3INin2YTYr9mI2YTZiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i4oCP2KfZhNil2YbYrNmE2YrYstmK2KkgKNin2YTZiNmE2KfZitin2Kog2KfZhNmF2KrYrdiv2Kkp2Iwg2YbZhdi3IENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLigI/Yp9mE2KXZhtis2YTZitiy2YrYqSAo2KfZhNmI2YTYp9mK2KfYqiDYp9mE2YXYqtit2K/YqSnYjCDZhtmF2LcgRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLYp9mE2KPZhNmF2KfZhtmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i2KfZhNmB2LHZhtiz2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLYp9mE2YHYsdmG2LPZitipICjZg9mG2K/YpykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLYp9mE2LHZiNiz2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLigI/Yp9mE2LHZiNiz2YrYqdiMINmG2YXYtyBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLYp9mE2KXYs9io2KfZhtmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+Itin2YTZgdix2YbYs9mK2Kkg2KfZhNiz2YjZitiz2LHZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLYp9mE2KPZhNmF2KfZhtmK2Kkg2KfZhNiz2YjZitiz2LHZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i2KfZhNio2YTYrNmK2YPZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLYp9mE2KjZhNi62KfYsdmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLYp9mE2KXZiti32KfZhNmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+Itin2YTYr9in2YbZhdin2LHZg9mK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Itin2YTZhtix2YjZitis2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4i2KfZhNiz2YjZitiv2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+Itin2YTZgdmG2YTZhtiv2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLYp9mE2YPYsdmI2KfYqtmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i2KfZhNiq2LTZitmD2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLYp9mE2KXYs9iq2YjZhtmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+Itin2YTZhdis2LHZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiLYp9mE2KPZitiz2YTZhtiv2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4i2KfZhNio2LHYp9iy2YrZhNmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLYp9mE2KjYsdiq2LrYp9mE2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4i2KfZhNiz2YTZiNmB2KfZg9mK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+Itin2YTYs9mE2YjZgdmK2YbZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i2KfZhNiq2LHZg9mK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+Itin2YTYo9mI2YPYsdin2YbZitipIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNDEzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+ItCS0YXQvtC00L3QuCDRg9GB0YLRgNC+0LnRgdGC0LLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4i0JrQu9Cw0LLQuNCw0YLRg9GA0LAg0L3QsCBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4i0LDQvdCz0LvQuNC50YHQutC4ICjQktC10LvQuNC60L7QsdGA0LjRgtCw0L3QuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ItCw0L3Qs9C70LjQudGB0LrQuCAo0KHQkNCpKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i0LDQvdCz0LsuICjQodCQ0KkpIOKAkyDRgdGC0LjQuyDigJ5N0LXQttC00YPQvdCw0YDQvtC00L3QsOKAnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i0LDQvdCz0LvQuNC50YHQutC4ICjQodCQ0KkpIOKAkyDRgdGC0LjQuyDigJ7QmtC+0YPQu9C80LDQuuKAnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+ItCw0L3Qs9C70LjQudGB0LrQuCAo0KHQkNCpKSDigJMg0YHRgtC40Lsg4oCe0JTQstC+0YDQsNC64oCcIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLQvdC10LzRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i0YTRgNC10L3RgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4i0YTRgNC10L3RgdC60LggKNCa0LDQvdCw0LTQsCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLRgNGD0YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+ItGA0YPRgdC60Lgg4oCTINGB0YLQuNC7IOKAnk1hY+KAnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+ItC40YHQv9Cw0L3RgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+ItGI0LLQtdC50YbQsNGA0YHQutC4INGE0YDQtdC90YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLRiNCy0LXQudGG0LDRgNGB0LrQuCDQvdC10LzRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLQsdC10LvQs9C40LnRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+ItCx0YrQu9Cz0LDRgNGB0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+ItC40YLQsNC70LjQsNC90YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLQtNCw0YLRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+ItC90L7RgNCy0LXQttC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+ItGI0LLQtdC00YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i0YTQuNC90LvQsNC90LTRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i0YXRitGA0LLQsNGC0YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+ItGH0LXRiNC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i0LXRgdGC0L7QvdGB0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i0YPQvdCz0LDRgNGB0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i0LjRgdC70LDQvdC00YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLQv9C+0YDRgtGD0LPQsNC70YHQutC4ICjQkdGA0LDQt9C40LvQuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+ItC/0L7RgNGC0YPQs9Cw0LvRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+ItGB0LvQvtCy0LDRiNC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+ItGB0LvQvtCy0LXQvdGB0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+ItGC0YPRgNGB0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i0YPQutGA0LDQuNC90YHQutC4Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMjFiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IkRpc3Bvc2l0aXVzIGTigJllbnRyYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJUZWNsYXQgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkFuZ2zDqHMgKFJVKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkFuZ2zDqHMgKEVVQSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkFuZ2zDqHMgKEVVQSksIGVzdGlsIGludGVybmFjaW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkFuZ2zDqHMgKEVVQSksIGVzdGlsIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJBbmdsw6hzIChFVUEpLCBlc3RpbCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IkFsZW1hbnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbmPDqHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbmPDqHMgKENhbmFkw6ApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1cywgZXN0aWwgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iRXNwYW55b2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW5jw6hzIHN1w61zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJBbGVtYW55IHN1w61zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkLDumxnYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJJdGFsacOgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEYW7DqHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnVlYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3VlYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IkZpbsOocyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDcm9hdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJUeGVjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uacOgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIb25nYXLDqHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZMOocyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWd1w6hzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJFc2xvdmFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJFc2xvdsOoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVyYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWNyYcOvbsOocyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2I0MjBlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJWc3R1cG7DrSB6YcWZw616ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iS2zDoXZlc25pY2UgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+ImFuZ2xpY2vDqSAoU3BvamVuw6kga3LDoWxvdnN0dsOtKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ImFuZ2xpY2vDqSAoVVNBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iYW5nbGlja8OpIChVU0EpLCBtZXppbsOhcm9kbsOtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJhbmdsaWNrw6kgKFVTQSksIHN0eWwgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+ImFuZ2xpY2vDqSAoVVNBKSwgc3R5bCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+Im7Em21lY2vDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJmcmFuY291enNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iZnJhbmNvdXpza8OpIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4icnVza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+InJ1c2vDqSwgc3R5bCBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLFoXBhbsSbbHNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IsWhdsO9Y2Fyc2vDqSAoZnJhbmNvdXrFoXRpbmEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLFoXbDvWNhcnNrw6kgKG7Em23EjWluYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJiZWxnaWNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+ImJ1bGhhcnNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJpdGFsc2vDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iZMOhbnNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Im5vcnNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IsWhdsOpZHNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJmaW5za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+ImNob3J2YXRza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IsSNZXNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iZXN0b25za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJtYcSPYXJza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJpc2xhbmRza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJicmF6aWxza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4icG9ydHVnYWxza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJzbG92ZW5za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJzbG92aW5za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4idHVyZWNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+InVrcmFqaW5za8OpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMDdkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IklucHV0ZW5oZWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZC10YXN0YXR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkVuZ2Vsc2sgKFVLKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkVuZ2Vsc2sgKFVTQSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkVuZ2Vsc2sgKFVTQSksIGludGVybmF0aW9uYWwgc3RpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iRW5nZWxzayAoVVNBKSwgQ29sZW1hay1zdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iRW5nZWxzayAoVVNBKSwgRHZvcmFrLXN0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IlR5c2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW5zayAoQ2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c3Npc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnVzc2lzaywgTWFjLXN0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJTcGFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlNjaHdlaXppc2sgZnJhbnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJTY2h3ZWl6ZXJ0eXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2Fyc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJJdGFsaWVuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRhbnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3JzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3ZlbnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmluc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iS3JvYXRpc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iVGpla2tpc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0aXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJVbmdhcnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmRzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsaWFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdpc2lzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFraXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5zayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR5cmtpc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVrcmFpbnNrIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzNiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IkVpbmdhYmVnZXLDpHRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkLVRhc3RhdHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iRW5nbGlzY2ggKEdyb8OfYnJpdGFubmllbikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJFbmdsaXNjaCAoVVNBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iRW5nbGlzY2ggKFVTQSksIGludGVybmF0aW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkVuZ2xpc2NoIChVU0EpLCBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iRW5nbGlzY2ggKFVTQSksIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iRGV1dHNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuesO2c2lzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbnrDtnNpc2NoIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzc2lzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnVzc2lzY2gsIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYW5pc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJTY2h3ZWl6ZXIgRnJhbnrDtnNpc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJTY2h3ZWl6ZXJkZXV0c2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGdhcmlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJJdGFsaWVuaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRMOkbmlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcndlZ2lzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlNjaHdlZGlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5uaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJLcm9hdGlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iVHNjaGVjaGlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0bmlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IlVuZ2FyaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iSXNsw6RuZGlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IkJyYXNpbGlhbmlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdpZXNpc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJTbG93YWtpc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG93ZW5pc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVMO8cmtpc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5pc2NoIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZDU3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+Is6jz4XPg866zrXPhc6tz4IgzrXOuc+Dz4zOtM6/z4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+Is6gzrvOt866z4TPgc6/zrvPjM6zzrnOvyBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4izpHOs86zzrvOuc66zqwgKM6XzpIpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4izpHOs86zzrvOuc66zqwgKM6XzqDOkSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+Is6RzrPOs867zrnOus6sICjOl86gzpEpLCDPhM+Nz4DOv8+FIEludGVybmF0aW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+Is6RzrPOs867zrnOus6sICjOl86gzpEpLCDPhM+Nz4DOv8+FIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLOkc6zzrPOu865zrrOrCAozpfOoM6RKSwgz4TPjc+Azr/PhSBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+Is6TzrXPgc68zrHOvc65zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLOk86xzrvOu865zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLOk86xzrvOu865zrrOrCAozprOsc69zrHOtM6sKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+Is6hz4nPg865zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLOoc+Jz4POuc66zqwsIM+Ez43PgM6/z4UgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4izpnPg8+AzrHOvc65zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4izpPOsc67zrvOuc66zqwgzpXOu86yzrXPhM6vzrHPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4izpPOtc+BzrzOsc69zrnOus6sIM6VzrvOss61z4TOr86xz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLOks61zrvOs865zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4izpLOv8+FzrvOs86xz4HOuc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLOmc+EzrHOu865zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4izpTOsc69zrnOus6sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLOnc6/z4HOss63zrPOuc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+Is6jzr/Phc63zrTOuc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLOps65zr3Ou86xzr3OtM65zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLOms+Bzr/Osc+EzrnOus6sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+Is6kz4POtc+HzrnOus6sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+Is6Vz4POuM6/zr3Ouc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+Is6fz4XOs86zz4HOuc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+Is6Zz4POu86xzr3OtM65zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4izpLPgc6xzrbOuc67zrnOrM69zrnOus6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4izqDOv8+Bz4TOv86zzrHOu865zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4izqPOu86/zrLOsc66zrnOus6sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLOo867zr/Oss61zr3Ouc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLOpM6/z4XPgc66zrnOus6sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLOn8+FzrrPgc6xzr3Ouc66zqwiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDc5NGE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5wdXQgRGV2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCBrZXlib2FyZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkVuZ2xpc2ggKFVLKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkVuZ2xpc2ggKFVTKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iRW5nbGlzaCAoVVMpLCBJbnRlcm5hdGlvbmFsIHN0eWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJFbmdsaXNoIChVUyksIENvbGVtYWsgc3R5bGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJFbmdsaXNoIChVUyksIER2b3JhayBzdHlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmVuY2ggKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNzaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NpYW4sIE1hYyBzdHlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYW5pc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlN3aXNzIEZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iU3dpc3MgR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FyaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbGlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGFuaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J3ZWdpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN3ZWRpc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5uaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkNyb2F0aWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IkN6ZWNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIdW5nYXJpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IkljZWxhbmRpYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhemlsaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVndWVzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5pYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUdXJraXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5pYW4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDc5NGE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5wdXQgRGV2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCBrZXlib2FyZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkVuZ2xpc2ggKFVLKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkVuZ2xpc2ggKFVTKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iRW5nbGlzaCAoVVMpLCBJbnRlcm5hdGlvbmFsIHN0eWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJFbmdsaXNoIChVUyksIENvbGVtYWsgc3R5bGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJFbmdsaXNoIChVUyksIER2b3JhayBzdHlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmVuY2ggKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNzaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NpYW4sIE1hYyBzdHlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYW5pc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlN3aXNzIEZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iU3dpc3MgR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FyaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbGlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGFuaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J3ZWdpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN3ZWRpc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5uaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkNyb2F0aWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IkN6ZWNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIdW5nYXJpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IkljZWxhbmRpYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhemlsaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVndWVzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5pYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUdXJraXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5pYW4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDYxYjgwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iRGlzcG9zaXRpdm9zIGRlIGVudHJhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IlRlY2xhZG8gZGUgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkluZ2zDqXMgKFJlaW5vIFVuaWRvKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkluZ2zDqXMgKEVFLsKgVVUuKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iSW5nbMOpcyAoRUUuwqBVVS4pLCBpbnRlcm5hY2lvbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJJbmdsw6lzIChFRS7CoFVVLiksIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJJbmdsw6lzIChFRS7CoFVVLiksIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iQWxlbcOhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuY8OpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmFuY8OpcyAoQ2FuYWTDoSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c28sIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IkVzcGHDsW9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJGcmFuY8OpcyBkZSBTdWl6YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iQWxlbcOhbiBkZSBTdWl6YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IkJlbGdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCw7psZ2FybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEYW7DqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnVlZ28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN1ZWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubGFuZMOpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDcm9hdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iQ2hlY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0b25pbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iSMO6bmdhcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZMOpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsZcOxbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnR1Z3XDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IkVzbG92YWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJFc2xvdmVubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVY3Jhbmlhbm8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJlYTRkNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iRGlzcG9zaXRpdm9zIGRlIGVudHJhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IlRlY2xhZG8gZGUgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkluZ2zDqXMgKFJlaW5vIFVuaWRvKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkluZ2zDqXMgKEVFLlVVLikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkluZ2zDqXMgKEVFLlVVLiksIGVzdGlsbyBpbnRlcm5hY2lvbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJJbmdsw6lzIChFRS5VVS4pLCBlc3RpbG8gQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkluZ2zDqXMgKEVFLlVVLiksIGVzdGlsbyBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IkFsZW3DoW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbmPDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbmPDqXMgKENhbmFkw6EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXNvLCBlc3RpbG8gTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iRXNwYcOxb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW5jw6lzIGRlIFN1aXphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJBbGVtw6FuIHN1aXpvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkLDumxnYXJvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbGlhbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRhbsOpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9ydWVnbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3VlY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5sYW5kw6lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkNyb2F0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJDaGVjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJFc3RvbmlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIw7puZ2FybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iSXNsYW5kw6lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJCcmFzaWxlw7FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVndcOpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iRXNsb3ZhY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IkVzbG92ZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVyY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVjcmFuaWFubyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNGZhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJTaXNlbmRzZWFkbWVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkaSBrbGF2aWF0dXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iSW5nbGlzZSAow5xoZW5ka3VuaW5ncmlpaykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJJbmdsaXNlIChVU0EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJJbmdsaXNlIChVU0EpLCByYWh2dXN2YWhlbGluZSBzdGlpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iSW5nbGlzZSAoVVNBKSwgQ29sZW1ha2kgc3RpaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJJbmdsaXNlIChVU0EpLCBEdm9yYWtpIHN0aWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJTYWtzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJQcmFudHN1c2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iUHJhbnRzdXNlIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iVmVuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJWZW5lLCBNYWNpIHN0aWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iSGlzcGFhbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLFoHZlaXRzaSBwcmFudHN1c2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IsWgdmVpdHNpc2Frc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGdhYXJpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWFsaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IlRhYW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3JyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iUm9vdHNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iU29vbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iSG9ydmFhdGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IlTFoWVoaGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRWVzdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IlVuZ2FyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iSXNsYW5kaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lpbGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVnYWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJTbG92YWtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZWVuaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUw7xyZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVrcmFpbmEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjN2YzYQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5wdXQgRGV2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4i4oCP2LXZgdit2YfigIzaqdmE24zYryBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4i2KfZhtqv2YTbjNiz24wgKNio2LHbjNiq2KfZhtuM2KcpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i2KfZhtqv2YTbjNiz24wgKNin2YXYsduM2qnYpykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+Itin2Ybar9mE24zYs9uMICjYp9uM2KfZhNin2Kog2YXYqtit2K/ZhynYjCDYs9io2qkg2KjbjNmG4oCM2KfZhNmF2YTZhNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiLigI/Yp9mG2q/ZhNuM2LPbjCAo2KfbjNin2YTYp9iqINmF2KrYrdiv2Ycp2Iwg2LPYqNqpIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLigI/Yp9mG2q/ZhNuM2LPbjCAo2KfbjNin2YTYp9iqINmF2KrYrdiv2Ycp2Iwg2LPYqNqpIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i2KLZhNmF2KfZhtuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+ItmB2LHYp9mG2LPZiNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+ItmB2LHYp9mG2LPZiNuMICjaqdin2YbYp9iv2Kcp4oCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i2LHZiNiz24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4i4oCP2LHZiNiz24zYjCDYs9io2qkgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i2KfYs9m+2KfZhtuM2KfbjNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLZgdix2KfZhtiz2YjbjCDYs9mI2KbbjNizIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLYotmE2YXYp9mG24wg2LPZiNim24zYs9uMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i2KjZhNqY24zaqduMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLYqNmE2LrYp9ix24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLYp9uM2KrYp9mE24zYp9uM24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+Itiv2KfZhtmF2KfYsdqp24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+ItmG2LHZiNqY24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+Itiz2YjYptiv24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLZgdmG2YTYp9mG2K/bjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLaqdix2YjYp9iz24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i2obaqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLYp9iz2KrZiNmG24zYp9uM24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+ItmF2KzYp9ix2LPYqtin2YbbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i2KfbjNiz2YTZhtiv24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+Itio2LHYstuM2YTbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+Itm+2LHYqti62KfZhNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLYp9iz2YTZiNmI2KfaqduMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLYp9iz2YTZiNmI2YbbjNin24zbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+Itiq2LHaqduMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLYp9mI2qnYsdin24zZhtuMIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOGViMzAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IlN5w7Z0dMO2bGFpdHRlZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IkFuZHJvaWQtbsOkcHDDpGltaXN0w7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJlbmdsYW50aSAoSXNvLUJyaXRhbm5pYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJlbmdsYW50aSAoWWhkeXN2YWxsYXQpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJlbmdsYW50aSAoWWhkeXN2YWxsYXQpLCBrYW5zYWludsOkbGluZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+ImVuZ2xhbnRpIChZaGR5c3ZhbGxhdCksIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJlbmdsYW50aSAoWWhkeXN2YWxsYXQpLCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+InNha3NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+InJhbnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJyYW5za2EgKEthbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJ2ZW7DpGrDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJ2ZW7DpGrDpCwgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iZXNwYW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4ic3ZlaXRzaW5yYW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+InN2ZWl0c2luc2Frc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJiZWxnaWFsYWluZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+ImJ1bGdhcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iaXRhbGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJ0YW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Im5vcmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJydW90c2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJzdW9taSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJrcm9hYXR0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJ0xaFla2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+InZpcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+InVua2FyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iaXNsYW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iYnJhc2lsaWFsYWluZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJwb3J0dWdhbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+InNsb3Zha2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJzbG92ZWVuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+InR1cmtraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4idWtyYWluYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NDc2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJQw6lyaXBow6lyaXF1ZXMgZFwnZW50csOpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQ2xhdmllciBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iQW5nbGFpcyAoYnJpdGFubmlxdWUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iQW5nbGFpcyAow4l0YXRzLVVuaXMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJBbmdsYWlzICjDiXRhdHMtVW5pcyksIGludGVybmF0aW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkFuZ2xhaXMgKMOJdGF0cy1VbmlzKSwgdHlwZSBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iQW5nbGFpcyAow4l0YXRzLVVuaXMpLCB0eXBlIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iQWxsZW1hbmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbsOnYWlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW7Dp2FpcyAoQ2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NlLCB0eXBlIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IkVzcGFnbm9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJGcmFuw6dhaXMgKFN1aXNzZSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IkFsbGVtYW5kIChTdWlzc2UpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGdhcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJJdGFsaWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEYW5vaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnbDqWdpZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN1w6lkb2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubm9pcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDcm9hdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iVGNow6hxdWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0b25pZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+Ikhvbmdyb2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmRhaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IkJyw6lzaWxpZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdhaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3ZhcXVlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92w6huZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVrcmFpbmllbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQ0ZmZhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJJbnB1dCBEZXZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJDbGF2aWVyIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJBbmdsYWlzIChSb3lhdW1lLVVuaSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJBbmdsYWlzICjDiXRhdHMtVW5pcykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkFuZ2xhaXMgKMOJdGF0cy1VbmlzKSwgaW50ZXJuYXRpb25hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iQW5nbGFpcyAow4l0YXRzLVVuaXMpLCB0eXBlIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJBbmdsYWlzICjDiXRhdHMtVW5pcyksIHR5cGUgRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJBbGxlbWFuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuw6dhaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbsOnYWlzIChDYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnVzc2UsIHR5cGUgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iRXNwYWdub2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW7Dp2FpcyAoU3Vpc3NlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iQWxsZW1hbmQgKFN1aXNzZSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRhbm9pcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9ydsOpZ2llbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3XDqWRvaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5ub2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkNyb2F0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJUY2jDqHF1ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJFc3RvbmllbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iSG9uZ3JvaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZGFpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnLDqXNpbGllbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnR1Z2FpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFxdWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IlNsb3bDqG5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVyYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWtyYWluaWVuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTg2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IuCkh+CkqOCkquClgeCknyDgpIngpKrgpJXgpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IkFuZHJvaWQg4KSV4KWA4KSs4KWL4KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4i4KSF4KSC4KSX4KWN4KSw4KWH4KSc4KS84KWAICjgpK/gpYLgpJXgpYcpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i4KSF4KSC4KSX4KWN4KSw4KWH4KSc4KS84KWAICjgpK/gpYLgpI/gpLgpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLgpIXgpILgpJfgpY3gpLDgpYfgpJzgpLzgpYAgKOCkr+ClguCkj+CkuCksIOCkheCkguCkpOCksOCljeCksOCkvuCkt+CljeCkn+CljeCksOClgOCkryDgpLbgpYjgpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IuCkheCkguCkl+CljeCksOClh+CknOCkvOClgCAo4KSv4KWC4KSP4KS4KSwg4KSV4KWL4KSy4KSu4KWI4KSVIOCktuCliOCksuClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IuCkheCkguCkl+CljeCksOClh+CknOCkvOClgCAo4KSv4KWC4KSP4KS4KSwg4KSh4KWN4KS14KWL4KSw4KSVIOCktuCliOCksuClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i4KSc4KSw4KWN4KSu4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IuCkq+CkvOCljeCksOCkvuCkguCkuOClgOCkuOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLgpKvgpLzgpY3gpLDgpL7gpILgpLjgpYDgpLjgpYAgKOCkleCkqOCkvuCkoeCkvikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLgpLDgpYLgpLjgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4i4KSw4KWC4KS44KWALCDgpK7gpYjgpJUg4KS24KWI4KSy4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i4KS44KWN4KSq4KWI4KSo4KS/4KS2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLgpLjgpY3gpLXgpL/gpLgg4KSr4KS84KWN4KSw4KS+4KSC4KS44KWA4KS44KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLgpLjgpY3gpLXgpL/gpLgg4KSc4KSw4KWN4KSu4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i4KSs4KWH4KSy4KWN4KSc4KS/4KSv4KS+4KSIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLgpKzgpYHgpLLgpY3igI3gpJfgpL7gpLDgpL/gpK/gpL7gpIgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLgpIfgpKTgpL7gpLLgpLXgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IuCkoeCliOCkqOCkv+CktiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4i4KSo4KS+4KSw4KWN4KS14KWH4KSc4KS/4KSv4KS+4KSIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLgpLjgpY3gpLXgpYDgpKHgpL/gpLYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLgpKvgpLzgpL/gpKjgpL/gpLYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i4KSV4KWN4KSw4KWL4KSP4KS24KS/4KSv4KS+4KSIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IuCkmuClh+CklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLgpI/gpLjgpY3gpJ/gpYvgpKjgpL/gpK/gpL7gpIgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IuCkueCkguCkl+Clh+CksOCkv+Ckr+CkvuCkiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i4KSG4KSH4KS44KSy4KWI4KSC4KSh4KS/4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLgpKzgpY3gpLDgpL7gpJzgpLzgpYDgpLLgpL/gpK/gpL7gpIgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLgpKrgpYHgpLDgpY3gpKTgpJfgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IuCkuOCljeCksuCli+CkteCkvuCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i4KS44KWN4KSy4KWL4KS14KWH4KSo4KS/4KSv4KS+4KSIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i4KSk4KWB4KSw4KWN4KSV4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLgpK/gpYLgpJXgpY3gpLDgpYfgpKjgpL/gpK/gpL7gpIgiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxN2JmMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iVXJlxJFhamkgemEgdW5vcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCB0aXBrb3ZuaWNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iZW5nbGVza2EgKFVLKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ImVuZ2xlc2thIChTQUQpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJlbmdsZXNrYSAoU0FEKSwgbWXEkXVuYXJvZG5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJlbmdsZXNrYSAoU0FEKSwgQ29sZW1ha292IHJhc3BvcmVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iZW5nbGVza2EgKFNBRCksIER2b3Jha292IHJhc3BvcmVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJuamVtYcSNa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iZnJhbmN1c2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+ImZyYW5jdXNrYSAoS2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+InJ1c2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+InJ1c2thLCByYXNwb3JlZCBNYWNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4ixaFwYW5qb2xza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IsWhdmljYXJza28tZnJhbmN1c2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLFoXZpY2Fyc2tvLW5qZW1hxI1rYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+ImJlbGdpanNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iYnVnYXJza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJ0YWxpamFuc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJkYW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Im5vcnZlxaFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4ixaF2ZWRza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJmaW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iaHJ2YXRza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4ixI1lxaFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJlc3RvbnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4ibWHEkWFyc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJpc2xhbmRza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+ImJyYXppbHNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+InBvcnR1Z2Fsc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJzbG92YcSNa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+InNsb3ZlbnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+InR1cnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4idWtyYWppbnNrYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2RiZmIyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJCZXZpdGVsaSBlc3prw7Z6w7ZrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkLWJpbGxlbnR5xbF6ZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJhbmdvbCAoRWd5ZXPDvGx0IEtpcsOhbHlzw6FnKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ImFuZ29sIChVU0EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJhbmdvbCAoVVNBKSwgbmVtemV0a8O2emkgc3TDrWx1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iYW5nb2wgKFVTQSksIENvbGVtYWstc3TDrWx1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+ImFuZ29sIChVU0EpLCBEdm9yYWstc3TDrWx1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4ibsOpbWV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+ImZyYW5jaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iZnJhbmNpYSAoS2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+Im9yb3N6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+Im9yb3N6LCBNYWMtc3TDrWx1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+InNwYW55b2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+InN2w6FqY2kgZnJhbmNpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4ic3bDoWpjaSBuw6ltZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJiZWxnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iYm9sZ8OhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Im9sYXN6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJkw6FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJub3J2w6lnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJzdsOpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+ImZpbm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iaG9ydsOhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJjc2VoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IsOpc3p0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJtYWd5YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+Iml6bGFuZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+ImJyYXppbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+InBvcnR1Z8OhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4ic3psb3bDoWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+InN6bG92w6luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4idMO2csO2ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4idWtyw6FuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1YmJmYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+ItWE1bjWgtW/1oTVodWj1oDVtNWh1bYg4oCL4oCL1b3VodaA1oTVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkINW91b/VpdWy1bbVodW31aHWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+ItSx1bbVo9Ws1aXWgNWl1bYgKNWE1LIpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i1LHVttWj1azVpdaA1aXVtiAo1LHVhNWGKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i1LHVttWj1azVpdaA1aXVtiAo1LHVhNWGKSwg1bTVq9W71aHVptWj1aHVtdWr1bYg1b/VpdW91aHVryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i1LHVttWj1azVpdaA1aXVtiAo1LHVhNWGKSwgQ29sZW1hayDVv9Wl1b3VodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4i1LHVttWj1azVpdaA1aXVtiAo1LHVhNWGKSwgRHZvcmFrINW/1aXVvdWh1a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+ItSz1aXWgNW01aHVttWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+ItWW1oDVodW21b3VpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLVltaA1aHVttW91aXWgNWl1bYgKNS/1aHVttWh1aTVoSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLVjNW41oLVvdWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+ItWM1bjWgtW91aXWgNWl1bYsIE1hYyDVv9Wl1b3VodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i1LvVvdW61aHVttWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLVh9W+1aXVtdaB1aHWgNWh1a/VodW2INaG1oDVodW21b3VpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4i1YfVvtWl1bXWgdWh1oDVodWv1aHVtiDVo9Wl1oDVtNWh1bbVpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+ItSy1aXVrNWj1avVodWv1aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i1LLVuNaC1azVstWh1oDVpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+ItS71b/VodWs1aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+ItS01aHVttWr1aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+ItWG1bjWgNW+1aXVo9Wl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLVh9W+1aXVpNWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i1ZbVq9W21bbVpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLUvdW41oDVvtWh1anVpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLVidWl1a3VpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLUt9W91b/VuNW21aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+ItWA1bjWgtW21aPVodaA1aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+ItS71b3VrNWh1bbVpNWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLUstaA1aHVptWr1azVpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+ItWK1bjWgNW/1bjWgtWj1aHVrNWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLVjdWs1bjVvtWh1a/VpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i1Y3VrNW41b7VpdW21aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLUudW41oLWgNaE1aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+ItWI1oLVr9aA1aHVq9W21aXWgNWl1bYiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlMmRkMGEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IlBlcmFuZ2thdCBNYXN1a2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJLZXlib2FyZCBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iSW5nZ3JpcyAoQnJpdGFuaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iSW5nZ3JpcyAoQW1lcmlrYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkluZ2dyaXMgKEFTKSwgZ2F5YSBJbnRlcm5hc2lvbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJJbmdncmlzIChBUyksIGdheWEgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkluZ2dyaXMgKEFTKSwgZ2F5YSBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+Ikplcm1hbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJQcmFuY2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IlByYW5jaXMgKEthbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXNpYSwgZ2F5YSBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJTcGFueW9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJQcmFuY2lzIFN3aXNzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJKZXJtYW4gU3dpc3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGdhcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEZW5tYXJrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J3ZWdpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3dlZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubGFuZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iktyb2FzaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iQ2hlc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+Ikh1bmdhcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVnaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3dha2lhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5hIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNDMxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IkRpc3Bvc2l0aXZpIGRpIGltbWlzc2lvbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IlRhc3RpZXJhIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJJbmdsZXNlIChVSykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJJbmdsZXNlIChVU0EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJJbmdsZXNlIChVU0EpLCBzdGlsZSBpbnRlcm5hemlvbmFsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iSW5nbGVzZSAoVVNBKSwgc3RpbGUgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkluZ2xlc2UgKFVTQSksIHN0aWxlIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iVGVkZXNjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuY2VzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmFuY2VzZSAoQ2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c3NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NvLCBzdGlsZSBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJTcGFnbm9sbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4iRnJhbmNlc2Ugc3Zpenplcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IlRlZGVzY28gc3Zpenplcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEYW5lc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnZlZ2VzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3ZlZGVzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IkZpbmxhbmRlc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iQ3JvYXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IkNlY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0b25lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJVbmdoZXJlc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZGVzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsaWFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnRvZ2hlc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3ZhY2NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVyY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVjcmFpbm8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4OTM5MQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i15TXqten16DXmSDXp9ec15giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IuKAj9ee16fXnNeT16ogQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IteQ16DXktec15nXqiAo15HXqNeZ15jXoNeZ15QpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i15DXoNeS15zXmdeqICjXkNeo15RcIteRKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i15DXoNeS15zXmdeqICjXkNeo15RcIteRKSwg16HXkteg15XXnyDXkdeZ16BcItecIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiLigI/XkNeg15LXnNeZ16ogKNeQ16jXlFwi15EpLCDXodeS16DXldefIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLigI/XkNeg15LXnNeZ16ogKNeQ16jXlFwi15EpLCDXodeS16DXldefIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i15LXqNee16DXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+Item16jXpNeq15nXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLXpteo16TXqteZ16ogKNen16DXk9eUKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+Iteo15XXodeZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4i4oCP16jXldeh15nXqiwg16HXkteg15XXnyBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLXodek16jXk9eZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+Item16jXpNeq15nXqiDXqdeV15XXmdem16jXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLXkteo157XoNeZ16og16nXldeV15nXpteo15nXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IteR15zXkteZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IteR15XXnNeS16jXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i15DXmdeY15zXp9eZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IteT16DXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLXoNeV16jXldeV15LXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLXqdeV15XXk9eZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLXpNeZ16DXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iten16jXldeQ15jXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+ItemXCfXm9eZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i15DXodeY15XXoNeZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IteU15XXoNeS16jXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiLXkNeZ16HXnNeg15PXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLXkdeo15bXmdec15DXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4i16TXldeo15jXldeS15bXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLXodec15XXkden15nXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i16HXnNeV15HXoNeZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLXmNeV16jXp9eZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IteQ15XXp9eo15DXmdeg15nXqiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTBiNzI3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJJbnB1dCBEZXZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lk44Kt44O844Oc44O844OJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4i6Iux6Kqe77yI44Kk44Ku44Oq44K577yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i6Iux6Kqe77yI44Ki44Oh44Oq44Kr77yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLoi7Hoqp7vvIjjgqLjg6Hjg6rjgqvvvInjgIHjgqTjg7Pjgr/jg7zjg4rjgrfjg6fjg4rjg6vphY3liJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IuiLseiqnu+8iOOCouODoeODquOCq++8ieOAgUNvbGVtYWvphY3liJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLoi7Hoqp7vvIjjgqLjg6Hjg6rjgqvvvInjgIFEdm9yYWvphY3liJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IuODieOCpOODhOiqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLjg5Xjg6njg7Pjgrnoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4i44OV44Op44Oz44K56Kqe77yI44Kr44OK44OA77yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i44Ot44K344Ki6KqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IuODreOCt+OCouiqnu+8iE1hY+mFjeWIl++8iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IuOCueODmuOCpOODs+iqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4i44OV44Op44Oz44K56Kqe77yI44K544Kk44K577yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLjg4njgqTjg4Toqp7vvIjjgrnjgqTjgrnvvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLjg5njg6vjgq7jg7zoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IuODluODq+OCrOODquOCouiqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+IuOCpOOCv+ODquOCouiqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i44OH44Oz44Oe44O844Kv6KqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLjg47jg6vjgqbjgqfjg7zoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IuOCueOCpuOCp+ODvOODh+ODs+iqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IuODleOCo+ODs+ODqeODs+ODieiqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLjgq/jg63jgqLjg4HjgqLoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i44OB44Kn44Kz6KqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IuOCqOOCueODiOODi+OCouiqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i44OP44Oz44Ks44Oq44O86KqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiLjgqLjgqTjgrnjg6njg7Pjg4noqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IuODluODqeOCuOODq+mFjeWIlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IuODneODq+ODiOOCrOODq+iqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4i44K544Ot44OQ44Kt44Ki6KqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLjgrnjg63jg5njg4vjgqLoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLjg4jjg6vjgrPoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IuOCpuOCr+ODqeOCpOODiuiqniI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNTA3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiLhg6jhg5Thg6fhg5Xhg5Dhg5zhg5jhg6Eg4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkLeGDmOGDoSDhg5nhg5rhg5Dhg5Xhg5jhg5Dhg6Lhg6Phg6Dhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLhg5jhg5zhg5Lhg5rhg5jhg6Hhg6Phg6Dhg5ggKOGDkuGDkOGDoOGDly4g4YOh4YOQ4YObLikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLhg5jhg5zhg5Lhg5rhg5jhg6Hhg6Phg6Dhg5ggKOGDkOGDqOGDqCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IuGDmOGDnOGDkuGDmuGDmOGDoeGDo+GDoOGDmCAo4YOQ4YOo4YOoKSwg4YOh4YOQ4YOU4YOg4YOX4YOQ4YOo4YOd4YOg4YOY4YOh4YOdIOGDoeGDouGDmOGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i4YOY4YOc4YOS4YOa4YOY4YOh4YOj4YOg4YOYICjhg5Dhg6jhg6gpLCBDb2xlbWFrIOGDoeGDouGDmOGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IuGDmOGDnOGDkuGDmuGDmOGDoeGDo+GDoOGDmCAo4YOQ4YOo4YOoKSwgRHZvcmFrIOGDoeGDouGDmOGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i4YOS4YOU4YOg4YOb4YOQ4YOc4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IuGDpOGDoOGDkOGDnOGDkuGDo+GDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLhg6Thg6Dhg5Dhg5zhg5Lhg6Phg5rhg5ggKOGDmeGDkOGDnOGDkOGDk+GDkCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLhg6Dhg6Phg6Hhg6Phg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4i4YOg4YOj4YOh4YOj4YOa4YOYLCBNYWMg4YOh4YOi4YOY4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i4YOU4YOh4YOe4YOQ4YOc4YOj4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLhg6jhg5Xhg5Thg5jhg6rhg5Dhg6Dhg5jhg6Phg5rhg5gg4YOk4YOg4YOQ4YOc4YOS4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLhg6jhg5Xhg5Thg5jhg6rhg5Dhg6Dhg5jhg6Phg5rhg5gg4YOS4YOU4YOg4YOb4YOQ4YOc4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i4YOR4YOU4YOa4YOS4YOY4YOj4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLhg5Hhg6Phg5rhg5Lhg5Dhg6Dhg6Phg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLhg5jhg6Lhg5Dhg5rhg5jhg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IuGDk+GDkOGDnOGDmOGDo+GDoOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4i4YOc4YOd4YOg4YOV4YOU4YOS4YOY4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLhg6jhg5Xhg5Thg5Phg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLhg6Thg5jhg5zhg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i4YOu4YOd4YOg4YOV4YOQ4YOi4YOY4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IuGDqeGDlOGDruGDo+GDoOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLhg5Thg6Hhg6Lhg53hg5zhg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IuGDo+GDnOGDkuGDoOGDo+GDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i4YOY4YOh4YOa4YOQ4YOc4YOT4YOY4YOj4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLhg5Hhg6Dhg5Dhg5bhg5jhg5rhg5jhg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLhg57hg53hg6Dhg6Lhg6Phg5Lhg5Dhg5rhg5jhg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IuGDoeGDmuGDneGDleGDkOGDmeGDo+GDoOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i4YOh4YOa4YOd4YOV4YOU4YOc4YOj4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i4YOX4YOj4YOg4YOl4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLhg6Phg5nhg6Dhg5Dhg5jhg5zhg6Phg5rhg5giPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YThjOTliCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6bIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiLhnoDhn5LhnorhnrbhnprhnoXhnrvhnoXigIsgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IuGeouGehOGfi+GeguGfkuGem+GfgeGenyAo4oCL4Z6F4Z6A4Z+S4Z6a4Z6X4Z6W4oCL4Z6i4Z6E4Z+L4Z6C4Z+S4Z6b4Z+B4Z6fKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IuGeouGehOGfi+GeguGfkuGem+GfgeGenyAo4oCL4Z6f4Z6g4Z6a4Z6K4Z+S4Z6L4oCL4Z6i4Z624Z6Y4Z+B4Z6a4Z634Z6AKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i4Z6i4Z6E4Z+L4Z6C4Z+S4Z6b4Z+B4Z6fICjhnp/hnqDhnprhnorhn5LhnovigIvhnqLhnrbhnpjhn4HhnprhnrfhnoDigIsp4oCLLCDigIvigIvhnprhnoXhnpPhnrbhnpThn5DhnpHhn5LhnpjigIvigIvhnqLhnpPhn5Lhno/hnprhnofhnrbhno/hnrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IuGeouGehOGfi+GeguGfkuGem+GfgeGenyAo4Z6f4Z6g4Z6a4Z6K4Z+S4Z6L4oCL4Z6i4Z624Z6Y4Z+B4Z6a4Z634Z6A4oCLKeKAiywg4oCL4oCL4Z6a4Z6F4Z6T4Z624Z6U4Z+Q4Z6R4Z+S4Z6YIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLhnqLhnoThn4vhnoLhn5Lhnpvhn4Hhnp8gKOGen+GeoOGemuGeiuGfkuGei+KAi+GeouGetuGemOGfgeGemuGet+GegOKAiynigIssIOKAi+KAi+GemuGeheGek+GetuGelOGfkOGekeGfkuGemCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IuGeouGetuGem+GfkuGem+GeuuGemOGfieGehOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLhnpThnrbhnprhnrbhn4bhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4i4Z6U4Z624Z6a4Z624Z+G4Z6EICjhnoDhnrbhno7hnrbhnorhnrbigIspIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i4Z6a4Z674Z6f4Z+S4Z6f4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IuGemuGeu+Gen+GfkuGen+GeuCDigIvhnprhnoXhnpPhnrbhnpThn5DhnpHhn5LhnpggTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i4Z6i4Z+B4Z6f4Z+S4Z6U4Z+J4Z624Z6JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLigIvigIvhnpThnrbhnprhnrbhn4bhnoTigIsg4Z6f4Z+S4Z6c4Z644Z6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLhnqLhnrbhnpvhn5Lhnpvhnrrhnpjhn4nhnoThn4sg4Z6f4Z+S4Z6c4Z644Z6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i4Z6U4Z+C4Z6b4Z6g4Z+S4Z6f4Z+K4Z634Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLhnpThn4rhnrvhnpvhnqDhn5LhnoDhnrbhnprhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLhnqLhn4rhnrjhno/hnrbhnpvhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IuGeiuGetuGejuGeuuGemOGfieGetuGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4i4Z6T4Z+Q4Z6a4Z6c4Z+C4Z6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLhnp/hn4rhnrvhnpnhnqLhn4LhnooiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLhnqDhn5Lhnpzhnrbhn4bhnoThnqHhnoThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i4Z6A4Z+S4Z6a4Z684Z6i4Z624Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IuGehuGfgeGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLhnqLhn4Hhnp/hn5Lhno/hnrzhnpPhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IuGeoOGeu+GehOGeguGfkuGemuGeuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i4Z6i4Z+K4Z644Z6f4Z+S4Z6b4Z6E4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLhnpThn5Lhnprhn4Hhnp/hn4rhnrjhnpsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLhnpbhn5DhnprhnpHhnrvhnpnhnqDhn5LhnoLhnrbhnpvhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IuGen+GfkuGem+GevOGenOGfieGetuGeguGeuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i4Z6f4Z+S4Z6b4Z684Z6c4Z+J4Z624Z6T4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i4Z6R4Z694Z6a4Z6C4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLhnqLhn4rhnrvhnpnhnoDhn5Lhnprhn4LhnpMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3MTU4NgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i7J6F66ClIOq4sOq4sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCDtgqTrs7Trk5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLsmIHslrQo7JiB6rWtKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IuyYgeyWtCjrr7jqta0pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLsmIHslrQo66+46rWtKSwg6riA66Gc67KMIOyKpO2DgOydvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i7JiB7Ja0KOuvuOq1rSksIOy9nOunpSDsiqTtg4DsnbwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLsmIHslrQo66+46rWtKSwg65Oc67O06529IOyKpO2DgOydvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i64+F7J287Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+Iu2UhOuekeyKpOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLtlITrnpHsiqTslrQo7LqQ64KY64ukKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IuufrOyLnOyVhOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLrn6zsi5zslYTslrQsIE1hYyDsiqTtg4DsnbwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLsiqTtjpjsnbjslrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+Iu2UhOuekeyKpOyWtCjsiqTsnITsiqQpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLrj4XsnbzslrQo7Iqk7JyE7IqkKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IuuyqOq4sOyXkOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i67aI6rCA66as7JWE7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i7J207YOI66as7JWE7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLrjbTrp4jtgazslrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+IuuFuOultOybqOydtOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4i7Iqk7Juo64207Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i7ZWA656A65Oc7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iu2BrOuhnOyVhO2LsOyVhOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLssrTsvZTslrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i7JeQ7Iqk7Yag64uI7JWE7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiLtl53qsIDrpqzslrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IuyVhOydtOyKrOuegOuTnOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4i67iM65287KeI7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4i7Y+s66W07Yis6rCI7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLsiqzroZzrsJTtgqTslYTslrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IuyKrOuhnOuyoOuLiOyVhOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+Iu2EsO2CpOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i7Jqw7YGs65287J2064KY7Ja0Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM5N2UxMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IuC6reC6uOC6m+C6sOC6geC6reC6meC6m+C7ieC6reC6meC6guC7jeC7ieC6oeC6ueC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4i4LuB4Lqb4LuJ4LqZ4Lqe4Lq04LqhIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLguq3gurHguofguoHgurTgupQgKOC6quC6sOC6q+C6sOC6peC6seC6lOC6iuC6sOC6reC6suC6meC6suC6iOC6seC6gSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLguq3gurHguofguoHgurTgupQgKOC6quC6sOC6q+C6sOC6peC6seC6lOC6rykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IuC6reC6seC6h+C6geC6tOC6lCAo4Lqq4Lqw4Lqr4Lqw4Lql4Lqx4LqU4LqvKSwg4LuB4Lqa4Lqa4Lqq4Lqy4LqB4Lq74LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiLguq3gurHguofguoHgurTgupQgKOC6quC6sOC6q+C6sOC6peC6seC6lOC6ryksIOC7geC6muC6miBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4i4Lqt4Lqx4LqH4LqB4Lq04LqUICjguqrgurDguqvgurDguqXgurHgupTguq8pLCDgu4HguprgupogRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLgu4DguqLguo3guqXgurDguqHgurHgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i4Lqd4Lqj4Lqx4LuI4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IuC6neC6o+C6seC7iOC6hyAo4LqE4Lqy4LqZ4Lqy4LqU4LqyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IuC6o+C6seC6lOC7gOC6iuC6jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLguqPgurHgupTguorgur3guo0sIOC7geC6muC6miBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLguqrgurDgu4HgupvgupngupngurTgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IuC6quC6sOC6p+C6tOC6qiDgup3guqPgurHgu4jguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IuC6quC6sOC6p+C6tOC6qiDgu4DguqLguo3guqXgurDguqHgurHgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLgu4DguprguqfguqLgu4ngur3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IuC6ruC6seC6h+C6geC6suC6o+C6veC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+IuC6reC6tOC6leC6suC6peC6veC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i4LuA4LqU4Lqx4LqZ4LqZ4Lq04LqKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLgupngu43gu4DguqfguoHgur3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IuC6quC6sOC6p+C6teC6lOC6tOC6iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IuC6n+C6tOC6meC6meC6tOC6iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLgu4LguoTguqPgu4Dguq3gupfgur3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i4LuA4LqK4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IuC7gOC6reC6quC7guC6leC6meC6veC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i4Lqu4Lqx4LqH4LqB4Lqy4Lqj4Lq94LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiLgu4Tguq3guqrgu4HguqXgupngupTgurTguoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IuC6muC6o+C6suC6iuC6tOC6peC6veC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IuC6m+C7jeC6leC6ueC6geC6teC6qiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4i4Lqq4Lqw4LuC4Lql4LuB4Lqn4Lqx4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLguqrgurDgu4LguqXgu4Dguqfgupngur3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLgu4DgupXgurXguoHgurTguqoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IuC6ouC6ueC7gOC6hOC6o+C6meC6veC6mSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGVkMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJJbnB1dCBEZXZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiLigJ5BbmRyb2lk4oCcIGtsYXZpYXTFq3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iQW5nbMWzIGsuIChKSykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJBbmdsxbMgay4gKEpBVikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkFuZ2zFsyBrLiAoSkFWKSwgdGFycHRhdXRpbmlzIHN0aWxpdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkFuZ2zFsyBrLiAoSkFWKSwg4oCeQ29sZW1ha+KAnCBzdGlsaXVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iQW5nbMWzIGsuIChKQVYpLCDigJ5Edm9yYWvigJwgc3RpbGl1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iVm9raWXEjWnFsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJQcmFuY8WresWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IlByYW5jxat6xbMgay4gKEthbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXPFsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXPFsyBrLiwg4oCeTWFj4oCcIHN0aWxpdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJJc3BhbsWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLFoHZlaWNhcmlqb3MgcHJhbmPFq3rFsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4ixaB2ZWljYXJpam9zIHZva2llxI1pxbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnxbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGdhcsWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbMWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEYW7FsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9ydmVnxbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IsWgdmVkxbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJTdW9tacWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iktyb2F0xbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4ixIxla8WzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdMWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJWZW5ncsWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmTFsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhemlsxbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdhbMWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJTbG92YWvFsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4iU2xvdsSXbsWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVya8WzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5pZcSNacWzIGsuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTg2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IklldmFkaWVyxKtjZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IkFuZHJvaWQgdGFzdGF0xatyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkFuZ8S8dSAoTGllbGJyaXTEgW5pamEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iQW5nxLx1IChBU1YpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJBbmfEvHUgKEFTViksIHN0YXJwdGF1dGlza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkFuZ8S8dSAoQVNWKSwgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkFuZ8S8dSAoQVNWKSwgRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJWxIFjdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuxI11Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW7EjXUgKEthbsSBZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iS3JpZXZ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IktyaWV2dSwgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iU3DEgcWGdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4iRnJhbsSNdSAoxaB2ZWljZSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IlbEgWN1ICjFoHZlaWNlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IkJlxLzEo3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGfEgXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXTEgcS8dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRMSBxYZ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J2xJPEo3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+Ilp2aWVkcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJTb211Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkhvcnbEgXR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IsSMZWh1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IklnYXXFhnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IlVuZ8SBcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IsSqc2xhbmRpZcWhdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhesSrxLx1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVnxIHEvHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3bEgWt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92xJPFhnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUdXJrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWtyYWnFhnUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzZjY2NiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i0J7RgNGD0YPQu9Cw0YUg0KLTqdGF06nTqdGA06nQvNC2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiLQkNC90LTRgNC+0LnQtCDQs9Cw0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLQkNC90LPQu9C4ICjQmNCRKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ItCQ0L3Qs9C70LggKNCQ0J3QoykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+ItCQ0L3Qs9C70LggKNCQ0J3QoyksINCe0LvQvtC9INGD0LvRgdGL0L0g0YHRgtC40LvRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i0JDQvdCz0LvQuCAo0JDQndCjKSwg0JrQvtC70LXQvNCw0Log0YHRgtC40LvRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+ItCQ0L3Qs9C70LggKNCQ0J3QoyksINCU0LLQvtGA0LDQuiDRgdGC0LjQu9GMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLQk9C10YDQvNCw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i0KTRgNCw0L3RhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLQpNGA0LDQvdGGICjQmtCw0L3QsNC0KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+ItCe0YDQvtGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+ItCe0YDQvtGBLCBNYdC6INGB0YLQuNC70YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLQmNGB0L/QsNC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+ItCo0LLQtdC50YbQsNGA0LjQudC9INCk0YDQsNC90YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+ItCo0LLQtdC50YbQsNGA0LjQudC9INCT0LXRgNC80LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+ItCR0LXQu9GM0LPQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i0JHQvtC70LPQsNGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i0JjRgtCw0LvQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i0JTQsNC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+ItCd0L7RgNCy0LXQs9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLQqNCy0LXQtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+ItCk0LjQvdC70Y/QvdC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+ItCl0L7RgNCy0LDRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLQp9C10YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i0K3RgdGC0L7QvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i0KPQvdCz0LDRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i0JjRgdC70LDQvdC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLQkdGA0LDQt9C40LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLQn9C+0YDRgtGD0LPQsNC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLQodC70L7QstCw0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+ItCh0LvQvtCy0LXQvdC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i0KLRg9GA0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+ItCj0LrRgNCw0LnQvSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NmYwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJQZXJhbnRpIElucHV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJQYXBhbiBrZWt1bmNpIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJCYWhhc2EgSW5nZ2VyaXMgKFVLKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkJhaGFzYSBJbmdnZXJpcyAoQVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJCYWhhc2EgSW5nZ2VyaXMgKEFTKSwgZ2F5YSBBL2JhbmdzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iQmFoYXNhIEluZ2dlcmlzIChBUyksIGdheWEgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkJhaGFzYSBJbmdnZXJpcyAoQVMpLCBnYXlhIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iQmFoYXNhIEplcm1hbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJCYWhhc2EgUGVyYW5jaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iQmFoYXNhIFBlcmFuY2lzIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iQmFoYXNhIFJ1c2lhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IkJhaGFzYSBSdXNpYSwgZ2F5YSBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJCYWhhc2EgU2VwYW55b2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlBlcmFuY2lzIFN3aXR6ZXJsYW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJKZXJtYW4gU3dpdHplcmxhbmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCYWhhc2EgQmVsZ2l1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQmFoYXNhIEJ1bGdhcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iQmFoYXNhIEl0YWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJCYWhhc2EgRGVubWFyayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iQmFoYXNhIE5vcndheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iQmFoYXNhIFN3ZWRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IkJhaGFzYSBGaW5sYW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkJhaGFzYSBDcm9hdGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IkJhaGFzYSBDemVjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJCYWhhc2EgRXN0b25pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iQmFoYXNhIEh1bmdhcnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IkJhaGFzYSBJY2VsYW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJCYWhhc2EgQnJhemlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iQmFoYXNhIFBvcnR1Z2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJCYWhhc2EgU2xvdmFraWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IkJhaGFzYSBTbG92ZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IkJhaGFzYSBUdXJraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iQmFoYXNhIFVrcmFpbmUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0NjA2MQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5uZGF0YWVuaGV0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IkFuZHJvaWQtdGFzdGF0dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJFbmdlbHNrIChTdG9yYnJpdGFubmlhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkVuZ2Vsc2sgKFVTQSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkVuZ2Vsc2sgKFVTQSksIGludGVybmFzam9uYWwgc3RpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iRW5nZWxzayAoVVNBKSwgQ29sZW1hay1zdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iRW5nZWxzayAoVVNBKSwgRHZvcmFrLXN0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IlR5c2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW5zayAoQ2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c3Npc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnVzc2lzaywgTWFjLXN0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJTcGFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlN2ZWl0c2lzayBmcmFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IlN2ZWl0c2lzayBzdGFuZGFyZHR5c2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCdWxnYXJzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpZW5zayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJTdmVuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5zayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJLcm9hdGlzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJUc2pla2tpc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0aXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJVbmdhcnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmRzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsaWFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdpc2lzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFraXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5zayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR5cmtpc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVrcmFpbnNrIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZDg0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+Ikludm9lcmFwcGFyYXRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZC10b2V0c2VuYm9yZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkVuZ2VscyAoVmVyZW5pZ2QgS29uaW5rcmlqaykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJFbmdlbHMgKFZlcmVuaWdkZSBTdGF0ZW4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJFbmdlbHMgKFZTKSwgaW50ZXJuYXRpb25hYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkVuZ2VscyAoVlMpLCBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iRW5nZWxzIChWUyksIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iRHVpdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbnMgKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNzaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXNzaXNjaCwgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iU3BhYW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJad2l0c2VycyBGcmFucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iWndpdHNlcnMgRHVpdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FhcnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJJdGFsaWFhbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRlZW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb29ycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iWndlZWRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJLcm9hdGlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iVHNqZWNoaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJFc3RsYW5kcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iSG9uZ2FhcnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklKc2xhbmRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJCcmF6aWxpYWFucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnR1Z2VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvd2Fha3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IlNsb3ZlZW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVya3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+Ik9la3Jhw69lbnMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyMjIxNQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iVXJ6xIVkemVuaWEgd2VqxZtjaW93ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iS2xhd2lhdHVyYSBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iQW5naWVsc2tpIChXaWVsa2EgQnJ5dGFuaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iQW5naWVsc2tpIChVU0EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJBbmdpZWxza2kgKFVTQSksIG1pxJlkenluYXJvZG93eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iQW5naWVsc2tpIChVU0EpLCBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iQW5naWVsc2tpIChVU0EpLCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+Ik5pZW1pZWNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuY3Vza2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbmN1c2tpIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUm9zeWpza2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUm9zeWpza2ksIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+Ikhpc3pwYcWEc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJGcmFuY3Vza2kgKFN6d2FqY2FyaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJOaWVtaWVja2kgKFN6d2FqY2FyaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lqc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCdcWCZ2Fyc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iV8WCb3NraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRHXFhHNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9yd2Vza2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN6d2VkemtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmnFhHNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDaG9yd2Fja2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iQ3plc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG/FhHNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iV8SZZ2llcnNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iSXNsYW5kemtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJCcmF6eWxpanNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnR1Z2Fsc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJTxYJvd2Fja2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IlPFgm93ZcWEc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVyZWNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWtyYWnFhHNraSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNjM5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJEaXNwb3NpdGl2b3MgZGUgZW50cmFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iVGVjbGFkbyBkbyBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iSW5nbMOqcyAoUlUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iSW5nbMOqcyAoRVVBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iSW5nbMOqcyAoRVVBKSwgZXN0LiBJbnRlcm5hY2lvbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJJbmdsw6pzIChFVUEpLCBlc3RpbG8gQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkluZ2zDqnMgKEVVQSksIGVzdGlsbyBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IkFsZW3Do28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbmPDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbmPDqnMgKENhbmFkw6EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzc28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnVzc28sIGVzdGlsbyBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJFc3BhbmhvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4iRnJhbmPDqnMgKFN1w63Dp2EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJBbGVtw6NvIChTdcOtw6dhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IkJlbGdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCw7psZ2FybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEaW5hbWFycXXDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnVlZ3XDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN1ZWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubGFuZMOqcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDcm9hdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iQ2hlY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0w7NuaW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IkjDum5nYXJvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmTDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IkJyYXNpbGVpcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWd1w6pzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJFc2xvdmFjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4iRXNsb3Zlbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUdXJjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWNyYW5pYW5vIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTBjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IkRpc3Bvc2l0aXZvcyBkZSBlbnRyYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJUZWNsYWRvIGRvIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJJbmdsw6pzIChSZWlubyBVbmlkbykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJJbmdsw6pzIChFVUEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJJbmdsw6pzIChFVUEpLCBlc3RpbG8gaW50ZXJuYWNpb25hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iSW5nbMOqcyAoRVVBKSwgZXN0aWxvIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJJbmdsw6pzIChFVUEpLCBlc3RpbG8gRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJBbGVtw6NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyYW5jw6pzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW5jw6pzIChDYW5hZMOhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c3NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NvLCBlc3RpbG8gTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iRXNwYW5ob2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW5jw6pzIHN1w63Dp28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IkFsZW3Do28gc3XDrcOnbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IkJlbGdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCw7psZ2FybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEaW5hbWFycXXDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnVlZ3XDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN1ZWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubGFuZMOqcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDcm9hdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iVGNoZWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uaWFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iSMO6bmdhcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZMOqcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsZWlybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnR1Z3XDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IkVzbG92YWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJFc2xvdmVubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVY3Jhbmlhbm8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1ZDhmNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iRGlzcG96aXRpdmUgZGUgaW50cm9kdWNlcmUgZGUgZGF0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iVGFzdGF0dXLEgyBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iRW5nbGV6xIMgKFJlZ2F0dWwgVW5pdCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJFbmdsZXrEgyAoU1VBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iRW5nbGV6xIMgKFNVQSksIHN0aWwgaW50ZXJuYcibaW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkVuZ2xlesSDIChTVUEpLCBzdGlsIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJFbmdsZXrEgyAoU1VBKSwgc3RpbCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+Ikdlcm1hbsSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyYW5jZXrEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmFuY2V6xIMgKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXPEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXPEgywgc3RpbCBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJTcGFuaW9sxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW5jZXrEgyAoRWx2ZcibaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJHZXJtYW7EgyAoRWx2ZcibaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lhbsSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCdWxnYXLEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYW7EgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGFuZXrEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9ydmVnaWFuxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN1ZWRlesSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubGFuZGV6xIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iQ3JvYXTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJDZWjEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJFc3RvbmlhbsSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJNYWdoaWFyxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZGV6xIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IkJyYXppbGlhbsSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVnaGV6xIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3ZhY8SDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW7EgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmPEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWNyYWluZWFuxIMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRjYmZkNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i0KPRgdGC0YDQvtC50YHRgtCy0LAg0LLQstC+0LTQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4i0JrQu9Cw0LLQuNCw0YLRg9GA0LAgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+ItCw0L3Qs9C70LjQudGB0LrQuNC5ICjQktC10LvQuNC60L7QsdGA0LjRgtCw0L3QuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ItCw0L3Qs9C70LjQudGB0LrQuNC5ICjQodCo0JApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLQsNC90LPQu9C40LnRgdC60LjQuSAo0KHQqNCQLCDQvNC10LbQtNGD0L3QsNGA0L7QtNC90LDRjykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+ItCw0L3Qs9C70LjQudGB0LrQuNC5ICjQodCo0JAsIENvbGVtYWspIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4i0LDQvdCz0LvQuNC50YHQutC40LkgKNCh0KjQkCwgRHZvcmFrKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i0L3QtdC80LXRhtC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLRhNGA0LDQvdGG0YPQt9GB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+ItGE0YDQsNC90YbRg9C30YHQutC40LkgKNCa0LDQvdCw0LTQsCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLRgNGD0YHRgdC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLRgNGD0YHRgdC60LjQuSAoTWFjKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+ItC40YHQv9Cw0L3RgdC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4i0YTRgNCw0L3RhtGD0LfRgdC60LjQuSAo0KjQstC10LnRhtCw0YDQuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4i0L3QtdC80LXRhtC60LjQuSAo0KjQstC10LnRhtCw0YDQuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+ItC90LjQtNC10YDQu9Cw0L3QtNGB0LrQuNC5ICjQkdC10LvRjNCz0LjRjykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+ItCx0L7Qu9Cz0LDRgNGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i0LjRgtCw0LvRjNGP0L3RgdC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i0LTQsNGC0YHQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+ItC90L7RgNCy0LXQttGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLRiNCy0LXQtNGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i0YTQuNC90YHQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i0YXQvtGA0LLQsNGC0YHQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i0YfQtdGI0YHQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i0Y3RgdGC0L7QvdGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiLQstC10L3Qs9C10YDRgdC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i0LjRgdC70LDQvdC00YHQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+ItC/0L7RgNGC0YPQs9Cw0LvRjNGB0LrQuNC5ICjQkdGA0LDQt9C40LvQuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+ItC/0L7RgNGC0YPQs9Cw0LvRjNGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLRgdC70L7QstCw0YbQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+ItGB0LvQvtCy0LXQvdGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i0YLRg9GA0LXRhtC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i0YPQutGA0LDQuNC90YHQutC40LkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhYjA0MgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iVnN0dXBuw6kgemFyaWFkZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iS2zDoXZlc25pY2EgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+ImFuZ2xpY2vDqSAoU3BvamVuw6kga3LDocS+b3ZzdHZvKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ImFuZ2xpY2vDqSAoVVNBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iYW5nbGlja8OpIChVU0EpLCBtZWR6aW7DoXJvZG7DqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iYW5nbGlja8OpIChVU0EpLCDFoXTDvWwgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+ImFuZ2xpY2vDqSAoVVNBKSwgxaF0w71sIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4ibmVtZWNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iZnJhbmPDunpza2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iZnJhbmPDunpza2UgKEthbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJydXNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4icnVza8OpLCDFoXTDvWwgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4ixaFwYW5pZWxza2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IsWhdmFqxI1pYXJza2UgKGZyYW5jw7p6xaF0aW5hKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4ixaF2YWrEjWlhcnNrZSAobmVtxI1pbmEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iYmVsZ2lja8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJidWxoYXJza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4idGFsaWFuc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJkw6Fuc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJuw7Nyc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLFoXbDqWRza2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJmw61uc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+ImNob3J2w6F0c2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IsSNZXNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iZXN0w7Nuc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJtYcSPYXJza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJpc2xhbmRza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJicmF6w61sc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4icG9ydHVnYWxza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJzbG92ZW5za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJzbG92aW5za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4idHVyZWNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+InVrcmFqaW5za8OpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZmYzYzQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IlZob2RuZSBuYXByYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJUaXBrb3ZuaWNhIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJhbmdsZcWha2EgKFpkcnXFvmVubyBrcmFsamVzdHZvKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ImFuZ2xlxaFrYSAoWkRBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iYW5nbGXFoWthIChaREEpLCBtZWRuYXJvZG5pIHNsb2ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+ImFuZ2xlxaFrYSAoWkRBKSwgc2xvZyBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iYW5nbGXFoWthIChaREEpLCBzbG9nIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4ibmVtxaFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJmcmFuY29za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iZnJhbmNvc2thIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4icnVza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4icnVza2EsIHNsb2cgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4ixaFwYW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IsWhdmljYXJza2EgZnJhbmNvc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLFoXZpY2Fyc2thIG5lbcWha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJiZWxnaWpza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+ImJvbGdhcnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Iml0YWxpamFuc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJkYW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Im5vcnZlxaFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4ixaF2ZWRza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJmaW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iaHJ2YcWha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4ixI1lxaFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJlc3RvbnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4ibWFkxb5hcnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iaXNsYW5kc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJicmF6aWxza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJwb3J0dWdhbHNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4ic2xvdmHFoWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJzbG92ZW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJ0dXLFoWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJ1a3Jhamluc2thIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyM2FjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+ItCj0LvQsNC30L3QuCDRg9GA0LXRktCw0ZjQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCDRgtCw0YHRgtCw0YLRg9GA0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLQtdC90LPQu9C10YHQutCwICjQo9CaKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ItC10L3Qs9C70LXRgdC60LAgKNCh0JDQlCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+ItC10L3Qs9C70LXRgdC60LAgKNCh0JDQlCksINC80LXRktGD0L3QsNGA0L7QtNC90Lgg0YHRgtC40LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+ItC10L3Qs9C70LXRgdC60LAgKNCh0JDQlCksIENvbGVtYWsg0YHRgtC40LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLQtdC90LPQu9C10YHQutCwICjQodCQ0JQpLCBEdm9yYWsg0YHRgtC40LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+ItC90LXQvNCw0YfQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+ItGE0YDQsNC90YbRg9GB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLRhNGA0LDQvdGG0YPRgdC60LAgKNCa0LDQvdCw0LTQsCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLRgNGD0YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+ItGA0YPRgdC60LAsIE1hYyDRgdGC0LjQuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+ItGI0L/QsNC90YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLRiNCy0LDRmNGG0LDRgNGB0LrQviDRhNGA0LDQvdGG0YPRgdC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+ItGI0LLQsNGY0YbQsNGA0YHQutC+INC90LXQvNCw0YfQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i0LHQtdC70LPQuNGY0YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLQsdGD0LPQsNGA0YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i0LjRgtCw0LvQuNGY0LDQvdGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i0LTQsNC90YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLQvdC+0YDQstC10YjQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLRiNCy0LXQtNGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+ItGE0LjQvdGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLRhdGA0LLQsNGC0YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+ItGH0LXRiNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i0LXRgdGC0L7QvdGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i0LzQsNGS0LDRgNGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i0LjRgdC70LDQvdC00YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLQsdGA0LDQt9C40LvRgdC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLQv9C+0YDRgtGD0LPQsNC70YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLRgdC70L7QstCw0YfQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLRgdC70L7QstC10L3QsNGH0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+ItGC0YPRgNGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i0YPQutGA0LDRmNC40L3RgdC60LAiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhNWFlOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5kYXRhZW5oZXRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZHMgdGFuZ2VudGJvcmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJFbmdlbHNrdCAoU3RvcmJyaXRhbm5pZW4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iRW5nZWxza3QgKFVTQSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkVuZ2Vsc2t0IChVU0EpLCBpbnRlcm5hdGlvbmVsbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkVuZ2Vsc2t0IChVU0EpLCBjb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iRW5nZWxza3QgKFVTQSksIGR2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iVHlza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbnNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmFuc2t0IChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnlza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnlza3QsIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYW5za3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW5za3QgKFNjaHdlaXopIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJUeXNrdCAoU2Nod2VpeikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaXNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FyaXNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpZW5za3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRhbnNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9yc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJTdmVuc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmluc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iktyb2F0aXNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJUamVja2lza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0bmlza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IlVuZ2Vyc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2zDpG5kc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJQb3J0dWdpc2lza3QgKEJyYXNpbGllbikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdpc2lza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3Zha2lza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IlNsb3ZlbnNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmtpc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5za3QiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhYjk2YTEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IlZpZmFhIEluZ2l6aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iS2lib2RpIHlhIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJLaWluZ2VyZXphIChVaW5nZXJlemEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iS2lpbmdlcmV6YSAoTWFyZWthbmkpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJLaWluZ2VyZXphIChNYXJla2FuaSksIE11dW5kbyB3YSBLaW1hdGFpZmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IktpaW5nZXJlemEgKE1hcmVrYW5pKSwgTXV1bmRvIHdhIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJLaWluZ2VyZXphIChNYXJla2FuaSksIE11dW5kbyB3YSBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IktpamVydW1hbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iS2lmYXJhbnNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IktpZmFyYW5zYSAoS2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IktpcnVzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJLaXJ1c2ksIE11dW5kbyB3YSBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJLaWhpc3BhbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJLaWZhcmFuc2EgY2hhIFVzd2lzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iS2lqZXJ1bWFuaSBjaGEgVXN3aXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iS2liZWxnaWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJLaWJ1bGdhcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iS2lpdGFsaWFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iS2lkZW5tYXJraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iS2lub3J3ZWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+Iktpc3dpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJLaWZpbmxhbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iktpa3JvZXNoaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iS2ljaGVraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJLaWVzdG9uaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IktpaHVuZ2FyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iS2lhaXNsYW5kaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iS2licmF6aWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iS2lyZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJLaXNsb3Zha2lhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJLaXNsb3ZlbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iS2l0dXJ1a2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IktpdWtyYW5pYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2M3ZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiLguK3guLjguJvguIHguKPguJPguYzguK3guLTguJnguJ7guLjguJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IuC5geC4m+C5ieC4meC4nuC4tOC4oeC4nuC5jOC5geC4reC4meC4lOC4o+C4reC4ouC4lOC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IuC4reC4seC4h+C4geC4pOC4qSAo4Liq4Lir4Lij4Liy4LiK4Lit4Liy4LiT4Liy4LiI4Lix4LiB4LijKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IuC4reC4seC4h+C4geC4pOC4qSAo4Lit4LmA4Lih4Lij4Li04LiB4Lix4LiZKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i4Lit4Lix4LiH4LiB4Lik4LipICjguK3guYDguKHguKPguLTguIHguLHguJkpLCDguKPguLnguJvguYHguJrguJrguJnguLLguJnguLLguIrguLLguJXguLQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IuC4reC4seC4h+C4geC4pOC4qSAo4Lit4LmA4Lih4Lij4Li04LiB4Lix4LiZKSwg4Lij4Li54Lib4LmB4Lia4LiaIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLguK3guLHguIfguIHguKTguKkgKOC4reC5gOC4oeC4o+C4tOC4geC4seC4mSksIOC4o+C4ueC4m+C5geC4muC4miBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IuC5gOC4ouC4reC4o+C4oeC4seC4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLguJ3guKPguLHguYjguIfguYDguKjguKoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4i4Lid4Lij4Lix4LmI4LiH4LmA4Lio4LiqICjguYHguITguJnguLLguJTguLIpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i4Lij4Lix4Liq4LmA4LiL4Li14LiiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IuC4o+C4seC4quC5gOC4i+C4teC4oiwg4Lij4Li54Lib4LmB4Lia4LiaIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IuC4quC5gOC4m+C4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4i4Lid4Lij4Lix4LmI4LiH4LmA4Lio4LiqICjguKrguKfguLTguKopIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLguYDguKLguK3guKPguKHguLHguJnguKrguKfguLTguKoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLguYDguJrguKXguYDguKLguLXguKLguKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IuC4muC4seC4peC5geC4geC5gOC4o+C4teC4oiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+IuC4reC4tOC4leC4suC4peC4tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i4LmA4LiU4LiZ4Lih4Liy4Lij4LmM4LiBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLguJnguK3guKPguYzguYDguKfguKLguYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IuC4quC4p+C4teC5gOC4lOC4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IuC4n+C4tOC4meC5geC4peC4meC4lOC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLguYLguITguKPguYDguK3guYDguIrguLXguKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i4LmA4LiK4LmH4LiBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IuC5gOC4reC4quC5guC4leC5gOC4meC4teC4oiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i4Liu4Lix4LiH4LiB4Liy4Lij4Li1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiLguYTguK3guIvguYzguYHguKXguJnguJTguLTguIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IuC4muC4o+C4suC4i+C4tOC4pSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IuC5guC4m+C4o+C4leC4uOC5gOC4geC4qiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4i4Liq4LmC4Lil4Lin4Lix4LiBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLguKrguYLguKXguKfguLXguYDguJnguLXguKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLguJXguLjguKPguIHguLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IuC4ouC4ueC5gOC4hOC4o+C4mSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGYzNGQyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJNZ2EgSW5wdXQgRGV2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkIGtleWJvYXJkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iSW5nbGVzIChVSykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJJbmdsZXMgKFVTKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iSW5nbGVzIChVUyksIGlzdGlsb25nIEludGVybmF0aW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkluZ2xlcyAoVVMpLCBpc3RpbG9uZyBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iSW5nbGVzIChVUyksIGlzdGlsb25nIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmVuY2ggKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNzaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NpYW4sIGlzdGlsb25nIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYW5pc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlN3aXNzIEZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iU3dpc3MgR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FyaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbGlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGFuaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J3ZWdpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN3ZWRpc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5uaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkNyb2F0aWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IkN6ZWNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIdW5nYXJpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IkljZWxhbmRpYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhemlsaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVndWVzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5pYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUdXJraXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5pYW4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjMTI2MgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5wdXQgRGV2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCBrbGF2eWVzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IsSwbmdpbGl6Y2UgKMSwbmdpbHRlcmUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4ixLBuZ2lsaXpjZSAoQUJEKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4ixLBuZ2lsaXpjZSAoQUJEKSBVbHVzbGFyYXJhc8SxIHN0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IsSwbmdpbGl6Y2UgKEFCRCkgQ29sZW1hayBzdGlsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IsSwbmdpbGl6Y2UgKEFCRCkgRHZvcmFrIHN0aWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJBbG1hbmNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyYW5zxLF6Y2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbnPEsXpjYSAoS2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c8OnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXPDp2EsIE1hYyBzdGlsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IsSwc3BhbnlvbGNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLEsHN2acOncmUgRnJhbnPEsXpjYXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4ixLBzdmnDp3JlIEFsbWFuY2FzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWzDp2lrYSBkaWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCdWxnYXJjYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+IsSwdGFseWFuY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRhbmNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J2ZcOnw6dlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLEsHN2ZcOnw6dlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmluY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iSMSxcnZhdMOnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLDh2Vrw6dlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+Ik1hY2FyY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IsSwemxhbmRhY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IkJyZXppbHlhIGRpbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0ZWtpemNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJTbG92YWvDp2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IlNsb3ZlbmNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVMO8cmvDp2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVrcmF5bmFjYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTZmZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiLQn9GA0LjRgdGC0YDQvtGXINCy0LLQvtC00YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+ItCa0LvQsNCy0ZbQsNGC0YPRgNCwIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLQsNC90LPQu9GW0LnRgdGM0LrQsCAo0JLQtdC70LjQutC+0LHRgNC40YLQsNC90ZbRjykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLQsNC90LPQu9GW0LnRgdGM0LrQsCAo0KHQqNCQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i0LDQvdCz0LvRltC50YHRjNC60LAgKNCh0KjQkCksINC80ZbQttC90LDRgNC+0LTQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiLQsNC90LPQu9GW0LnRgdGM0LrQsCAo0KHQqNCQKSwg0YDQvtC30LrQu9Cw0LTQutCwIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLQsNC90LPQu9GW0LnRgdGM0LrQsCAo0KHQqNCQKSwg0YDQvtC30LrQu9Cw0LTQutCwINCU0LLQvtGA0LDQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLQvdGW0LzQtdGG0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+ItGE0YDQsNC90YbRg9C30YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+ItGE0YDQsNC90YbRg9C30YzQutCwICjQmtCw0L3QsNC00LApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i0YDQvtGB0ZbQudGB0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+ItGA0L7RgdGW0LnRgdGM0LrQsCwg0YDQvtC30LrQu9Cw0LTQutCwIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+ItGW0YHQv9Cw0L3RgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4i0YTRgNCw0L3RhtGD0LfRjNC60LAgKNCo0LLQtdC50YbQsNGA0ZbRjykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+ItC90ZbQvNC10YbRjNC60LAgKNCo0LLQtdC50YbQsNGA0ZbRjykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLQsdC10LvRjNCz0ZbQudGB0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLQsdC+0LvQs9Cw0YDRgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+ItGW0YLQsNC70ZbQudGB0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLQtNCw0L3RgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4i0L3QvtGA0LLQtdC30YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLRiNCy0LXQtNGB0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i0YTRltC90YHRjNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i0YXQvtGA0LLQsNGC0YHRjNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i0YfQtdGB0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+ItC10YHRgtC+0L3RgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i0YPQs9C+0YDRgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i0ZbRgdC70LDQvdC00YHRjNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+ItCx0YDQsNC30LjQu9GM0YHRjNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLQv9C+0YDRgtGD0LPQsNC70YzRgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4i0YHQu9C+0LLQsNGG0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLRgdC70L7QstC10L3RgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+ItGC0YPRgNC10YbRjNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+ItGD0LrRgNCw0ZfQvdGB0YzQutCwIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNjVlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IlRoaeG6v3QgYuG7iyDEkeG6p3UgdsOgbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQsOgbiBwaMOtbSBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iVGnhur9uZyBBbmggKEFuaCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJUaeG6v25nIEFuaCAoTeG7uSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IlRp4bq/bmcgQW5oIChN4bu5KSwga2nhu4N1IFF14buRYyB04bq/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJUaeG6v25nIEFuaCAoTeG7uSksIGtp4buDdSBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iVGnhur9uZyBBbmggKE3hu7kpLCBraeG7g3UgRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJUaeG6v25nIMSQ4bupYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJUaeG6v25nIFBow6FwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IlRp4bq/bmcgUGjDoXAgKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJUaeG6v25nIE5nYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJUaeG6v25nIE5nYSwga2nhu4N1IE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlRp4bq/bmcgVMOieSBCYW4gTmhhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJUaeG6v25nIFBow6FwIOG7nyBUaOG7pXkgU8SpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJUaeG6v25nIMSQ4bupYyBUaOG7pXkgU8SpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iVGnhur9uZyBC4buJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJUaeG6v25nIEJ1bmdhcnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJUaeG6v25nIMOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJUaeG6v25nIMSQYW4gTeG6oWNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJUaeG6v25nIE5hIFV5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJUaeG6v25nIFRo4buleSDEkGnhu4NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iVGnhur9uZyBQaOG6p24gTGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IlRp4bq/bmcgQ3JvYXRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJUaeG6v25nIFPDqWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iVGnhur9uZyBFc3RvbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJUaeG6v25nIEh1bmdhcnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IlRp4bq/bmcgQWkteMahLWxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iVGnhur9uZyBCcmF6aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJUaeG6v25nIELhu5MgxJDDoG8gTmhhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJUaeG6v25nIFNsb3ZhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4iVGnhur9uZyBTbG92ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUaeG6v25nIFRo4buVIE5oxKkgS+G7syI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVGnhur9uZyBVa3JhaW5hIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViMWM4NAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+Iui+k+WFpeiuvuWkhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCDplK7nm5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLoi7Hor63vvIjoi7Hlm73vvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLoi7Hor63vvIjnvo7lm73vvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IuiLseivre+8iOe+juWbve+8ie+8jOWbvemZhemjjuagvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i6Iux6K+t77yI576O5Zu977yJ77yMQ29sZW1hayDpo47moLwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLoi7Hor63vvIjnvo7lm73vvInvvIxEdm9yYWsg6aOO5qC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLlvrfor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i5rOV6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+Iuazleivre+8iOWKoOaLv+Wkp++8iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IuS/hOivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLkv4Tor63vvIxNYWMg6aOO5qC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i6KW/54+t54mZ6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLnkZ7lo6vms5Xor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IueRnuWjq+W+t+ivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IuavlOWIqeaXtuivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i5L+d5Yqg5Yip5Lqa6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i5oSP5aSn5Yip6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLkuLnpuqbor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+IuaMquWogeivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4i55Ge5YW46K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i6Iqs5YWw6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IuWFi+e9l+WcsOS6muivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLmjbflhYvor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i54ix5rKZ5bC85Lqa6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiLljIjniZnliKnor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IuWGsOWym+ivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4i5be06KW/6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4i6JGh6JCE54mZ6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLmlq/mtJvkvJDlhYvor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IuaWr+a0m+aWh+WwvOS6muivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IuWcn+iAs+WFtuivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i5LmM5YWL5YWw6K+tIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5YzU0NgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+Iui8uOWFpeijnee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCDpjbXnm6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLoi7HmlocgKOiLseWciykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLoi7HmlocgKOe+juWciykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IuiLseaWhyAo576O5ZyLKe+8jOWci+mam+aoo+W8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i6Iux5paHICjnvo7lnIsp77yMQ29sZW1hayDmqKPlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLoi7HmlocgKOe+juWciynvvIxEdm9yYWsg5qij5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLlvrfmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i5rOV5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IuazleaWhyAo5Yqg5ou/5aSnKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IuS/hOaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLkv4TmlofvvIxNYWMg5qij5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i6KW/54+t54mZ5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLms5XmlocgKOeRnuWjqykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IuW+t+aWh++8iOeRnuWjq++8iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IuavlOWIqeaZguaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i5L+d5Yqg5Yip5Lqe5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i5oSP5aSn5Yip5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLkuLnpuqXmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+IuaMquWogeaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4i55Ge5YW45paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i6Iqs6Jit5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IuWFi+e+heWcsOS6nuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLmjbflhYvmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i5oSb5rKZ5bC85Lqe5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiLljIjniZnliKnmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IuWGsOWztuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4i5be06KW/5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4i6JGh6JCE54mZ5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLmlq/mtJvkvJDlhYvmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IuaWr+a0m+aWh+WwvOS6nuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IuWcn+iAs+WFtuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i54OP5YWL6Jit5paHIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5ZjEzMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+Iui8uOWFpeijnee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCDpjbXnm6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLoi7HmlocgKOiLseWciykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLoi7HmlocgKOe+juWciykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IuiLseaWhyAo576O5ZyLKe+8jOWci+mam+aoo+W8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i6Iux5paHICjnvo7lnIsp77yMQ29sZW1hayDmqKPlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLoi7HmlocgKOe+juWciynvvIxEdm9yYWsg5qij5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLlvrfmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i5rOV5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IuazleaWhyAo5Yqg5ou/5aSnKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IuS/hOaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLkv4TmlofvvIxNYWMg5qij5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i6KW/54+t54mZ5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLms5XmlocgKOeRnuWjqykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IuW+t+aWhyAo55Ge5aOrKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IuavlOWIqeaZguW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i5L+d5Yqg5Yip5Lqe5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i576p5aSn5Yip5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLkuLnpuqXmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+IuaMquWogeaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4i55Ge5YW45paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i6Iqs6Jit5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IuWFi+e+heWfg+ilv+S6nuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLmjbflhYvmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i5oSb5rKZ5bC85Lqe5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiLljIjniZnliKnmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IuWGsOWztuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4i5be06KW/5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4i6JGh6JCE54mZ5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLmlq/mtJvkvJDlhYvmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IuaWr+a0m+e2reWwvOS6nuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IuWcn+iAs+WFtuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i54OP5YWL6Jit5paHIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjEwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IkFtYWRpdmF5aXNpIHdva3VmYWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJJa2hpYmhvZGkgeWUtQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkktRW5nbGlzaCAoVUspIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iSS1FbmdsaXNoIChVUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkktRW5nbGlzaCAoVVMpLCBpc2l0YXllbGEgc2Frd2FtYW55ZSBhbWF6d2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkktRW5nbGlzaCAoVVMpLCBpc2l0YXllbGEgc2UtQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkktRW5nbGlzaCAoVVMpLCBpc2l0YXllbGEgc2UtRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJJc2ktR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IklzaS1GcmVuY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iSXNpLUZyZW5jaCAoQ2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IklzaS1SdXNzaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IklzaS1SdXNzaWFuLCBpc2l0YXllbGEgc2UtTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iSXNpLVNwYW5pc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IklzaS1Td2lzcyBGcmVuY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IklzaS1Td2lzcyBHZXJtYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJJc2ktQmVsZ2lhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iSXNpLUJ1bGdhcmlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+IklzaS1JdGFsaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJJc2ktRGFuaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJJc2ktTm9yd2VnaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJJc2ktU3dlZGlzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IklzaS1GaW5uaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IklzaS1Dcm9hdGlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJJc2ktQ3plY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iSXNpLUVzdG9uaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJJc2ktSHVuZ2FyaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2ktSWNlbGFuZGljIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJJc2ktQnJhemlsaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iSXNpLVBvcnR1Z3Vlc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IklzaS1TbG92YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IklzaS1TbG92ZW5pYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJJc2ktVHVya2lzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iSXNpLVVrcmFpbmlhbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKaW5kZXggN2UxZjBiZi4uMjY2N2VkMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJWb2VyIFBJTi1rb2RlIGluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iVm9lciBQVUsgZW4gbnV3ZSBQSU4ta29kZSBpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLWtvZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik51d2UgUElOLWtvZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJWb2VyIFNJTSBQVUstIGVuIG51d2UgUElOLWtvZGUgaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSBQVUsta29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTnV3ZSBTSU0gUElOLWtvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJSYWFrIG9tIHdhZ3dvb3JkIGluIHRlIHZvZXIiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJWb2VyIHdhZ3dvb3JkIGluIG9tIHRlIG9udHNsdWl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iVm9lciBQSU4gaW4gb20gdGUgb250c2x1aXQiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iTGFhdHdhZy1rbm9wcGllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJTcGVlbC1rbm9wcGllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJTdG9wLWtub3BwaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iTGFhaWsgYmFpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IkxhYWlrIG5pa3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJIYXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iT250c2x1aXQgb20gdm9vcnQgdGUgZ2FhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkJlZ2luIGdla2Fuc2VsbGVlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJMYWF0IGxvcyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBvbSB1aXQgdGUgdmVlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBzYWwgbmllIHVpdGdldmVlIHdvcmQgbmllLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iVm9lciBkaWUgZ2V3ZW5zdGUgUElOLWtvZGUgaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iQmV2ZXN0aWcgZ2V3ZW5zdGUgUElOLWtvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ik9udHNsdWl0IHRhbnMgU0lNLWthYXJ04oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iVmVya2VlcmRlIFBJTi1rb2RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlRpayBcJ24gUElOIGluIHdhdCA0IHRvdCA4IHN5ZmVycyBsYW5rIGlzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSy1rb2RlIG1vZXQgOCBvZiBtZWVyIHN5ZmVycyB3ZWVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlZvZXIgd2VlciBkaWUga29ycmVrdGUgUFVLLWtvZGUgaW4uIEhlcmhhYWxkZSBwb2dpbmdzIHNhbCBkaWUgU0lNIHBlcm1hbmVudCBkZWFrdGl2ZWVyLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSnkgaGV0IGpvdSBvbnRzbHVpdHBhdHJvb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2VlciB2ZXJrZWVyZGVsaWsgZ2V0ZWtlbi4gTmEgbm9nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG9uc3Vrc2Vzdm9sbGUgcG9naW5ncywgc2FsIGp5IGdldnJhIHdvcmQgb20gam91IGZvb24gdGUgb250c2x1aXQgZGV1ciBtaWRkZWwgdmFuIFwnbiBlLXBvc3Jla2VuaW5nLlxuXG4gUHJvYmVlciB3ZWVyIG9vciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWtvbmRlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJWZXJ3eWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iVmVya2VlcmRlIFNJTSBQSU4ta29kZSwgankgc2FsIG5vdSBqb3UgZGllbnN2ZXJza2FmZmVyIG1vZXQga29udGFrIG9tIGpvdSB0b2VzdGVsIHRlIG9udHNsdWl0LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iVmVya2VlcmRlIFNJTSBQSU4ta29kZSwgankgaGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBvb3JibHl3ZW5kZSBwb2dpbmcgdm9vcmRhdCBqeSBqb3UgZGllbnN2ZXJza2FmZmVyIHNhbCBtb2V0IGtvbnRhayBvbSBqb3UgdG9lc3RlbCB0ZSBvbnRzbHVpdC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJWZXJrZWVyZGUgU0lNIFBJTi1rb2RlLCBqeSBoZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IG9vcmJseXdlbmRlIHBvZ2luZ3MuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0gaXMgb25icnVpa2JhYXIuIEtvbnRhayBqb3UgZGllbnN2ZXJza2FmZmVyLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iVmVya2VlcmRlIFNJTSBQVUsta29kZSwgankgaGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBvb3JibHl3ZW5kZSBwb2dpbmcgdm9vcmRhdCBTSU0gcGVybWFuZW50IG9uYnJ1aWtiYWFyIHdvcmQuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iVmVya2VlcmRlIFNJTSBQVUsta29kZSwgankgaGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBvb3JibHl3ZW5kZSBwb2dpbmdzIHZvb3JkYXQgU0lNIHBlcm1hbmVudCBvbmJydWlrYmFhciB3b3JkLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iU0lNIFBJTi1iZXdlcmtpbmcgaGV0IG1pc2x1ayEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTSBQVUstYmV3ZXJraW5nIGhldCBtaXNsdWshIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IktvZGUgaXMgYWFudmFhciEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJWb3JpZ2Vzbml0LWtub3BwaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJWb2xnZW5kZXNuaXQta25vcHBpZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJMYWF0d2FnLWtub3BwaWUiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAppbmRleCAyZjZkYWIwLi5mZDRjZjc4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IuGNkuGKlSDhiq7hi7Ug4Ymw4Yut4YmlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIOGKpeGKkyDhiqDhi7LhiLUg4Y2S4YqVIOGJsOGLreGJpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4i4YuoUFVLIOGKruGLtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4Yqg4Yuy4Yi1IFBpbiDhiq7hi7UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLhi6jhiLLhiJ0gUFVLIOGKpeGKkyDhiqDhi7LhiLHhipUg4Y2S4YqVIOGKruGLtSDhi63hibDhi63hiaEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IuGLqOGIsuGInSBQVUsg4Yqu4Yu1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLhiqDhi7LhiLUg4Yiy4YidIOGNkuGKlSDhiq7hi7UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLhi6jhi63hiIjhjY0g4YmD4YiNIOGIiOGImOGJsOGLqOGJpSDhipXhiqsiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLhiIjhiJjhiq3hjYjhibUg4Yuo4Yut4YiI4Y2NIOGJg+GIjSDhibDhi63hiaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLhiIjhiJjhiq3hjYjhibUg4Y2S4YqVIOGJsOGLreGJpSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLhiIjhiqDhjY3hibMg4Yqg4YmB4YidIOGKoOGLneGIq+GIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i4Yuo4Yqg4Yyr4YuN4Ym1IOGKoOGLneGIq+GIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i4Yqg4YmB4YidIOGKoOGLneGIq+GIrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLhiqDhiKrhjY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLhi7DhiaPhiKoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLhiI3hiaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLhiIjhiJjhiYDhjKDhiI0g4Yut4Yqt4Y2I4YmxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i4Yib4Yi14YyA4YiY4YitIOGJsOGIsOGIreGLn+GIjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLhiIjhiJjhiLDhiKjhi50gPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz7hipUg4Yyj4YiNIOGLq+GLteGIreGMieGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDhiqDhi63hiLDhiK3hi53hiJ3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuGLqOGJsOGNiOGIiOGMiOGLjeGKlSDhi6jhjZLhipUg4Yqu4Yu1IOGLq+GIteGMiOGJoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLhi6jhibDhjYjhiIjhjIjhi43hipUg4Yuo4Y2S4YqVIOGKruGLtSDhi6vhiKjhjIvhjI3hjKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IuGIsuGInSDhiqvhiK3hi7HhipUg4Ymg4YiY4Yqt4Y2I4Ym1IOGIi+GLreKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuGJteGKreGKreGIjSDhi6vhiI3hiIbhipAg4Y2S4YqVIOGKruGLteGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuGKqDQg4Yql4Yi14YqoIDgg4YmB4Yyl4Yiu4Ym9IOGLqOGLq+GLmCDhjZLhipUg4Yut4Ymw4Yut4Ymh4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4i4YuoUFVLIOGKruGLtSA4IOGLiOGLreGInSDhiqjhi5rhi6sg4Ymg4YiL4YutIOGJgeGMpeGIruGJvSDhiIrhipbhiKjhi40g4Yut4YyI4Ymj4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4Ym14Yqt4Yqt4YiI4Yqb4YuN4YqVIOGLqFBVSyDhiq7hi7Ug4Yql4YqV4Yuw4YyI4YqTIOGLq+GIteGMiOGJoeGNoiDhibDhi7DhjIvhjIvhiJog4YiZ4Yqo4Yir4YuO4Ym9IOGIsuGInSDhiqvhiK3hi7HhipUg4Yql4Yi14Yqo4YiY4Yyo4Yio4Yi74YuNIOGLq+GIsOGKk+GKreGIieGJs+GIjeGNoiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4Yuo4YiY4Yqt4Y2I4Ym7IOGIteGIreGLk+GJsCDhjKXhiIjhibHhipUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4YyK4YucIOGJoOGJteGKreGKreGIjSDhiqDhiI3hiLPhiInhibXhiJ3hjaIg4YqoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Ymw4Yyo4Yib4YiqIOGLq+GIjeGJsOGIs+GKqSDhiJnhiqjhiKvhi47hib0g4Ymg4YqL4YiLIOGLqOGKouGInOGLreGIjSDhiJjhiIjhi6sg4Ymw4Yyg4YmF4YiY4YuNIOGIteGIjeGKreGLjuGKlSDhiqXhipXhi7LhiqjhjY3hibEg4Yut4Yyg4Yuo4YmD4YiJ4Y2iXG5cbuGKpeGJo+GKreGLjiDhiqg8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDhiLDhiqjhipXhi7bhib0g4Ymg4YqL4YiLIOGKpeGKleGLsOGMiOGKkyDhi63hiJ7hiq3hiKnhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLhiqDhiLXhi4jhjI3hi7UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IuGIjeGKrSDhi6vhiI3hiIbhipAg4Yuo4Yiy4YidIOGKruGLteGNoiDhiqDhiIHhipUg4YiY4Yiz4Yiq4Yur4YuO4YqVIOGIiOGIm+GIteGKqOGNiOGJtSDhi7XhiJ3hjLgg4Ymw4Yur4Yur4YulIOGInuGLsOGIneGLjuGKlSDhiJvhjI3hipjhibUg4Yqg4YiI4Yml4YuO4Y2iIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiLhiI3hiq0g4Yur4YiN4YiG4YqQIOGLqOGIsuGInSDhjZLhipUg4Yqu4Yu14Y2jIOGImOGIs+GIquGLq+GLjuGKlSDhiIjhiJvhiLXhiqjhjYjhibUg4Yu14Yid4Yy4IOGJsOGLq+GLq+GLpSDhiJ7hi7DhiJ3hi47hipUg4Yib4YyN4YqY4Ym1IOGMjeGLtOGJs+GLjiDhiIrhiIbhipUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGImeGKqOGIqyDhi63hiYDhiK3hi47hibPhiI3hjaIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiLhiI3hiq0g4Yur4YiN4YiG4YqQIOGLqOGIsuGInSDhjZLhipUg4Yqu4Yu14Y2jIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhiJnhiqjhiKvhi47hib0g4Yut4YmA4Yip4YuO4Ymz4YiN4Y2iIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiLhiLLhiJkg4Yyl4YmF4YidIOGIi+GLrSDhiJjhi4vhiI0g4Yql4Yut4Ym94YiN4Yid4Y2iIOGLqOGKpeGIreGIteGLjuGKlSDhi7XhiJ3hjLgg4Ymw4Yur4Yur4YulIOGInuGLsOGInSDhi6vhjI3hipnhjaIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IuGIjeGKrSDhi6vhiI3hiIbhipAg4Yuo4Yiy4YidIFBVSyDhiq7hi7XhjaMg4Yiy4YidIOGKq+GIreGLteGLjiDhiaDhiYvhiJrhipDhibUg4Yyl4YmF4YidIOGIi+GLrSDhiJjhi4vhiI0g4Yuo4Yib4Yut4Ym94YiNIOGIiuGIhuGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YiZ4Yqo4YirIOGLreGJgOGIreGLjuGJs+GIjeGNoiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IuGIjeGKrSDhi6vhiI3hiIbhipAg4Yuo4Yiy4YidIFBVSyDhiq7hi7XhjaMg4Yiy4YidIOGKq+GIreGLteGLjiDhiaDhiYvhiJrhipDhibUg4Yyl4YmF4YidIOGIi+GLrSDhiJjhi4vhiI0g4Yuo4Yib4Yut4Ym94YiNIOGIiuGIhuGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YiZ4Yqo4Yir4YuO4Ym9IOGLreGJgOGIqeGLjuGJs+GIjeGNoiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4i4Yuo4Yiy4YidIOGNkuGKlSDhiq3hi4jhipMg4Yqg4YiN4Ymw4Yiz4Yqr4YidISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4i4Yuo4Yiy4YidIFBVSyDhiq3hi4jhipMg4Yqg4YiN4Ymw4Yiz4Yqr4YidISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLhiq7hi7Eg4Ymw4YmA4Ymj4Yut4YqQ4Ym1IOGKoOGMjeGKneGJt+GIjSEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLhi6jhiYDhi7PhiJog4Ym14Yir4YqtIOGKoOGLneGIq+GIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IuGLqOGJgOGMo+GLrSDhibXhiKvhiq0g4Yqg4Yud4Yir4YitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IuGIiOGKoOGNjeGJsyDhiqDhiYHhiJ0g4Yqg4Yud4Yir4YitIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKaW5kZXggYmNmZTdkYi4uODNkNGI5MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0yMCwxNCArMjAsMTQgQEAKIAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i2KfZg9iq2Kgg2LHZhdiyINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLYp9mD2KrYqCDYsdmF2LIgUFVLINmI2LHZhdiyINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KfZhNis2K/ZitivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLYsdmF2LIgUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2KzYr9mK2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLigI/Yp9mD2KrYqCDYsdmF2LIg2LHZhdiyIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IuKAj9ij2K/YrtmEINix2YXYsiBQVUsg2YTYqNi32KfZgtipIFNJTSDZiNix2YXYsiBcItix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YpcIiDYp9mE2KzYr9mK2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IuKAj9ix2YXYsiBQVUsg2YTYqNi32KfZgtipIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4i4oCP2LHZhdiyIFwi2LHZgtmFINiq2LnYsdmK2YEg2LTYrti12YpcIiDYrNiv2YrYryDZhNio2LfYp9mC2KkgU0lNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i2KfZhNmF2LMg2YTZg9iq2KfYqNipINmD2YTZhdipINin2YTZhdix2YjYsSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+Itin2YPYqtioINmD2YTZhdipINin2YTZhdix2YjYsSDZhNil2YTYutin2KEg2KfZhNiq2KPZhdmK2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLYp9mD2KrYqCDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINmE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+Itix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2LrZitixINi12K3ZititLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuKAj9in2YPYqtioINix2YXYsiBQSU4g2YTYpdmE2LrYp9ihINin2YTYqtij2YXZitmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4oCP2LHZhdiyIFBJTiDYutmK2LEg2LXYrdmK2K0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+ItmE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhtiMINin2LbYuti3INi52YTZiSBcItin2YTZgtin2KbZhdipXCIg2KvZhSDYudmE2YkgMC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i2KrZhSDYqtis2KfZiNiyINin2YTYrdivINin2YTYo9mC2LXZiSDZhNi52K/YryDZhdit2KfZiNmE2KfYqiDYqtij2YXZitmGINin2YTYrNmH2KfYsiDYqNin2YTZiNis2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+Itiq2YUg2KfZhNi02K3ZhiI8L3N0cmluZz4KQEAgLTM1LDE3ICszNSwxNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i2KrZiNi12YrZhCDYrNmH2KfYsiDYp9mE2LTYrdmGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4i2KfYtti62Lcg2LnZhNmJIFwi2KfZhNmC2KfYptmF2KlcIiDZhNil2YTYutin2KEg2KfZhNmC2YHZhC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+Itin2YTYtNio2YPYqSDZhdik2YXZkdmG2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4i2YTZitiz2Kog2YfZhtin2YMg2KjYt9in2YLYqSBTSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4i2YTZitiz2Kog2YfZhtin2YMg2KjYt9in2YLYqSBTSU0g2YHZiiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4i2YTZitiz2Kog2YfZhtin2YMg2KjYt9in2YLYqSBTSU0g2YHZiiDYp9mE2YfYp9iq2YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+Itij2K/YrtmEINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iNTk2ODk4NTQ4OTQ2Mzg3MDM1OCI+Itio2LfYp9mC2KkgU0lNINmF2YHZgtmI2K/YqSDYo9mIINi62YrYsSDZgtin2KjZhNipINmE2YTZgtix2KfYodipLiDYo9iv2K7ZhCDYqNi32KfZgtipIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4i2KjYt9in2YLYqSBTSU0g2LrZitixINmC2KfYqNmE2Kkg2YTZhNin2LPYqtiu2K/Yp9mFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+Itiq2YUg2KrYudi32YrZhCDYqNi32KfZgtipIFNJTSDYqNi02YPZhCDYr9in2KbZhS5cbiDYp9iq2LXZhCDYqNmF2YLYr9mFINiu2K/ZhdipINin2YTZhNin2LPZhNmD2Yog2YTZhNit2LXZiNmEINi52YTZiSDYqNi32KfZgtipIFNJTSDYo9iu2LHZiS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4i2KjYt9in2YLYqSBTSU0g2YXYpNmF2ZHZhtipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4i2KjYt9in2YLYqSBTSU0g2YXYpNmF2ZHZhtipINio2YPZiNivIFBVSy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+Itis2KfYsdmNINil2YTYutin2KEg2KrYo9mF2YrZhiDYqNi32KfZgtipIFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4g2KfZhNij2K/Yp9ipICUyJGQg2YXZhiAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiLigI/ZhNmK2LPYqiDZh9mG2KfZgyDYqNi32KfZgtipIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiLigI/ZhNmK2LPYqiDZh9mG2KfZgyDYqNi32KfZgtipIFNJTSDZgdmKINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2YouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLigI/ZhNmK2LPYqiDZh9mG2KfZgyDYqNi32KfZgtipIFNJTSDZgdmKINin2YTZh9in2KrZgS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4i4oCP2KPYr9iu2YQg2KjYt9in2YLYqSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4i4oCP2KjYt9in2YLYqSBTSU0g2YXZgdmC2YjYr9ipINij2Ygg2LrZitixINmC2KfYqNmE2Kkg2YTZhNmC2LHYp9ih2KkuINij2K/YrtmEINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiLigI/YqNi32KfZgtipIFNJTSDYutmK2LEg2YLYp9io2YTYqSDZhNmE2KfYs9iq2K7Yr9in2YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4i4oCP2KrZhSDYqti52LfZitmEINio2LfYp9mC2KkgU0lNINio2LTZg9mEINiv2KfYptmFLlxuINin2KrYtdmEINio2YXZgtiv2YUg2K7Yr9mF2Kkg2KfZhNmE2KfYs9mE2YPZiiDZhNmE2K3YtdmI2YQg2LnZhNmJINio2LfYp9mC2KkgU0lNINij2K7YsdmJLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiLigI/YqNi32KfZgtipIFNJTSDZhdik2YXZkdmG2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiLigI/YqNi32KfZgtipIFNJTSDZhdik2YXZkdmG2Kkg2KjZg9mI2K8gUFVLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4i4oCP2KzYp9ix2Y0g2KXZhNi62KfYoSDYqtij2YXZitmGINio2LfYp9mC2KkgU0lN4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiLigI8lMSRzLiDYp9mE2KPYr9in2KkgJTIkZCDZhdmGICUzJGQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+Itil2LbYp9mB2Kkg2KPYr9in2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLZgdin2LHYutipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLYqtmFINiq2YjYs9mK2Lkg2YXZhti32YLYqSDYpdmE2LrYp9ihINin2YTZgtmB2YQuIjwvc3RyaW5nPgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i2KXZhNi62KfYoSDYp9mE2YLZgdmEINio2KfYs9iq2K7Yr9in2YUg2KfZhNiq2YXYsdmK2LEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLYpdmE2LrYp9ihINin2YTZgtmB2YQg2KjYp9iz2KrYrtiv2KfZhSDYp9mE2YbZgti0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i2KrYo9mF2YrZhiDYp9mE2KzZh9in2LIg2KjYp9mE2YjYrNmHLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiLYpdmE2LrYp9ihINin2YTZgtmB2YQg2KjYp9iz2KrYrtiv2KfZhSDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiLigI/YpdmE2LrYp9ihINin2YTZgtmB2YQg2KjYp9iz2KrYrtiv2KfZhSDYsdmF2LIgUElOLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+Itil2YTYutin2KEg2KfZhNmC2YHZhCDYqNin2LPYqtiu2K/Yp9mFINmD2YTZhdipINin2YTZhdix2YjYsS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLZhdmG2LfZgtipINin2YTZhtmC2LQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+ItmF2YbYt9mC2Kkg2KfZhNiq2YXYsdmK2LEuIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+Itiy2LEg2KfZhNil2YrZgtin2YEg2KfZhNmF2KTZgtiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLYstixINin2YTYqti02LrZitmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLYstixINin2YTYpdmK2YLYp9mBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Itix2KfYpti52KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLZhdi52KfYsdi22KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLZgtmE2KgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLYpdmE2LrYp9ihINin2YTZgtmB2YQg2YTZhNmF2KrYp9io2LnYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+Itiq2YUg2KXZhNi62KfYoSDYp9mE2KrYtNi62YrZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLYo9iz2YLYtyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDZhNmE2K3YsNmBLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiLZhNmGINmK2KrZhSDYrdiw2YEgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4i2Kgg2Kog2KsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTk4LDI3ICsxMDUsMjYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiLYsdmC2YUg2KrYudix2YrZgSDYtNiu2LXZiiDYrtin2LfYpiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i2K3Yp9mI2YQg2YXYsdipINij2K7YsdmJINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i2KfYsdiz2YUg2YbZgti02YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLYo9iv2K7ZhCDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINmE2KjYt9in2YLYqSBTSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+Itij2K/YrtmEINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLigI/Yo9iv2K7ZhCDYsdmF2LIgUElOINmE2KjYt9in2YLYqSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IuKAj9ij2K/YrtmEINix2YXYsiBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i2KPYr9iu2YQg2YPZhNmF2Kkg2KfZhNmF2LHZiNixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i2KjYt9in2YLYqSBTSU0g2YXYudi32YTYqSDYp9mE2KLZhi4g2KPYr9iu2YQg2LHZhdiyIFBVSyDZhNmE2YXYqtin2KjYudipLiDYp9iq2LXZhCDYqNmF2LTYutmEINi02KjZg9ipINin2YTYrNmI2KfZhCDZhNmE2KfYt9mE2KfYuSDYudmE2Ykg2KfZhNiq2YHYp9i12YrZhC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i2KXYr9iu2KfZhCDYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i2KrYo9mD2YrYryDYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Itis2KfYsdmNINil2YTYutin2KEg2KrYo9mF2YrZhiDYqNi32KfZgtipIFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Itix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2LrZitixINi12K3ZititLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+Itin2YPYqtioINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KfZhNmF2YPZiNmGINmF2YYgNCDYpdmE2YkgOCDYo9ix2YLYp9mFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+ItmK2KzYqCDYo9mGINmK2KrYttmF2YYg2LHZhdiyIFBVS+KAjyA4INij2LHZgtin2YUg2KPZiCDYo9mD2KvYsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLYo9i52K8g2KXYr9iu2KfZhCDYsdmF2LIgUFVLINin2YTYtdit2YrYrS4g2YjYs9iq2KTYr9mKINin2YTZhdit2KfZiNmE2KfYqiDYp9mE2YXYqtmD2LHYsdipINil2YTZiSDYqti52LfZitmEINio2LfYp9mC2KkgU0lNINmG2YfYp9im2YrZi9inLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLZhNinINmK2KrYt9in2KjZgiDYsdmF2LLYpyDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i4oCP2KjYt9in2YLYqSBTSU0g2YXYudi32YTYqSDYp9mE2KLZhi4g2KPYr9iu2YQg2LHZhdiyIFBVSyDZhNmE2YXYqtin2KjYudipLiDYp9iq2LXZhCDYqNmF2LTYutmEINi02KjZg9ipINin2YTYrNmI2KfZhCDZhNmE2KfYt9mE2KfYuSDYudmE2Ykg2KfZhNiq2YHYp9i12YrZhC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i4oCP2KXYr9iu2KfZhCDYsdmF2LIg2LHZhdiyIFBJTiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4oCP2KrYo9mD2YrYryDYsdmF2LIg2LHZhdiyIFBJTiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IuKAj9is2KfYsdmNINil2YTYutin2KEg2KrYo9mF2YrZhiDYqNi32KfZgtipIFNJTeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuKAj9in2YPYqtioINix2YXYsiBQSU4g2KfZhNmF2YPZiNmGINmF2YYgNCDYpdmE2YkgOCDYo9ix2YLYp9mFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IuKAj9mK2KzYqCDYo9mGINmK2KrYttmF2YYg2LHZhdiyIFBVS+KAjyA4INij2LHZgtin2YUg2KPZiCDYo9mD2KvYsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLigI/Yo9i52K8g2KXYr9iu2KfZhCDYsdmF2LIgUFVLINin2YTYtdit2YrYrS4g2YjYs9iq2KTYr9mKINin2YTZhdit2KfZiNmE2KfYqiDYp9mE2YXYqtmD2LHYsdipINil2YTZiSDYqti52LfZitmEINio2LfYp9mC2KkgU0lNINmG2YfYp9im2YrZi9inLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLigI/ZhNinINmK2KrYt9in2KjZgiDYsdmF2LLYpyDYsdmF2LIgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i2YXYrdin2YjZhNin2Kog2KfZhNmG2YLYtCDZg9ir2YrYsdipINis2K/Zi9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+ItmE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhtiMINiz2KzZkdmEINin2YTYr9iu2YjZhCDYqNit2LPYp9io2YMg2YHZiiBHb29nbGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuKAj9mE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhtiMINiz2KzZkdmEINin2YTYr9iu2YjZhCDYqNit2LPYp9io2YMg2YHZiiBHb29nbGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLYp9iz2YUg2KfZhNmF2LPYqtiu2K/ZhSAo2KfZhNio2LHZitivINil2YTZg9iq2LHZiNmG2YopIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLZg9mE2YXYqSDYp9mE2YXYsdmI2LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+Itiq2LPYrNmK2YQg2KfZhNiv2K7ZiNmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLYp9iz2YUg2YXYs9iq2K7Yr9mFINi62YrYsSDYtdit2YrYrSDYo9mIINmD2YTZhdipINmF2LHZiNixINi62YrYsSDYtdin2YTYrdipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLZh9mEINmG2LPZitiqINin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINij2Ygg2YPZhNmF2Kkg2KfZhNmF2LHZiNix2J9cbtin2YbYqtmC2YQg2KXZhNmJICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4oCP2YfZhCDZhtiz2YrYqiDYp9iz2YUg2KfZhNmF2LPYqtiu2K/ZhSDYo9mIINmD2YTZhdipINin2YTZhdix2YjYsdifXG7Yp9mG2KrZgtmEINil2YTZiSAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i2KzYp9ix2Y0g2YHYrdi1INin2YTYrdiz2KfYqOKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i2YTZgtivINmD2KrYqNiqINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KjYtNmD2YQg2LrZitixINi12K3ZititIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INmF2LHYqS4gXG5cbtij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLigI/ZhNmC2K8g2YPYqtio2Kog2LHZhdiyIFBJTiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i2YTZgtivINmD2KrYqNiqINmD2YTZhdipINin2YTZhdix2YjYsSDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i2YTZgtivINix2LPZhdiqINmG2YLYtCDYpdmE2LrYp9ihINin2YTYqtij2YXZitmGINio2LfYsdmK2YLYqSDYutmK2LEg2LXYrdmK2K3YqSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2KkuIFxuXG7Yo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+ItmE2YLYryDYrdin2YjZhNiqINil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINio2LTZg9mEINi62YrYsSDYtdit2YrYrSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2KkuINio2LnYryDYpdis2LHYp9ihIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqSDYp9mE2KPYrtix2YnYjCDYs9iq2KrZhSDYpdi52KfYr9ipINiq2LnZitmK2YYg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDYudmE2Ykg2KfZhNil2LnYr9in2K/Yp9iqINin2YTYp9mB2KrYsdin2LbZitipINmE2YTZhdi12YbYuSDZiNiz2YrYqtmFINmB2YLYryDYrNmF2YrYuSDYqNmK2KfZhtin2Kog2KfZhNmF2LPYqtiu2K/ZhS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+ItmE2YLYryDYsdiz2YXYqiDZhtmC2LQg2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiDYqNi52K8g2KXYrNix2KfYoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqtmP2LfYp9mE2Kgg2KjYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KfZhNmH2KfYqtmBINio2KfYs9iq2K7Yr9in2YUg2K3Ys9in2Kgg2KjYsdmK2K8g2KXZhNmD2KrYsdmI2YbZiiDZhNil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2YfYp9iq2YEuXG5cbiDYo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+Itil2LLYp9mE2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IuKAj9ix2YXYsiBcItix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YpcIiDZhNio2LfYp9mC2KkgU0lNINi62YrYsSDYtdit2YrYrdiMINmI2YrZhNiy2YXZgyDYp9mE2KfYqti12KfZhCDYp9mE2KLZhiDYqNmF2LTYutmR2YQg2LTYqNmD2Kkg2KfZhNis2YjZkdin2YQg2YTYpdmE2LrYp9ihINmC2YHZhCDYp9mE2KzZh9in2LIuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiLigI/YsdmF2LIgXCLYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKXCIg2YTYqNi32KfZgtipIFNJTSDYutmK2LEg2LXYrdmK2K3YjCDZiNmK2KrYqNmC2Ykg2YTYr9mK2YMg2YXYrdin2YjZhNipINmI2KfYrdiv2KkgKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikg2YrYqti52YrZhiDYudmE2YrZgyDYqNi52K/Zh9inINin2YTYp9iq2LXYp9mEINio2YXYtNi62ZHZhCDYtNio2YPYqSDYp9mE2KzZiNmR2KfZhCDZhNil2YTYutin2KEg2YLZgdmEINin2YTYrNmH2KfYsi4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiLigI/YsdmF2LIgXCLYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKXCIg2YTYqNi32KfZgtipIFNJTSDYutmK2LEg2LXYrdmK2K3YjCDZitiq2KjZgtmJINmE2K/ZitmDIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IuKAj9io2LfYp9mC2KkgU0lNINi62YrYsSDYtdin2YTYrdipINmE2YTYp9iz2KrYrtiv2KfZhS4g2YrZj9ix2KzZiSDYp9mE2KfYqti12KfZhCDYqNmF2LTYutmR2YQg2LTYqNmD2Kkg2KfZhNis2YjZkdin2YQuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLigI/YsdmF2LIgUFVLINmE2KjYt9in2YLYqSBTSU0g2LrZitixINi12KfZhNit2Iwg2YjZitiq2KjZgtmJINmE2K/ZitmDINmF2K3Yp9mI2YTYqSDZiNin2K3Yr9ipICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4p2Iwg2KrYtdio2K0g2KjYudiv2YfYpyDYqNi32KfZgtipIFNJTSDYutmK2LEg2LXYp9mE2K3YqSDZhNmE2KfYs9iq2K7Yr9in2YUg2KjYtNmD2YQg2K/Yp9im2YUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4i4oCP2LHZhdiyIFBVSyDZhNio2LfYp9mC2KkgU0lNINi62YrYsSDYtdin2YTYrdiMINmI2YrYqtio2YLZiSDZhNiv2YrZgyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYrdin2YjZhNin2KrYjCDYqti12KjYrSDYqNi52K/Zh9inINio2LfYp9mC2KkgU0lNINi62YrYsSDYtdin2YTYrdipINmE2YTYp9iz2KrYrtiv2KfZhSDYqNi02YPZhCDYr9in2KbZhS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IuKAj9ij2K7ZgdmC2Kog2LnZhdmE2YrYqSBcItix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YpcIiDZhNio2LfYp9mC2KkgU0lNISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4i4oCP2KPYrtmB2YLYqiDYudmF2YTZitipIFBVSyDZhNio2LfYp9mC2KkgU0lNISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLYqtmFINmC2KjZiNmEINin2YTYsdmF2LIhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i2LLYsSDYp9mE2YXZgti32Lkg2KfZhNi12YjYqtmKINin2YTYs9in2KjZgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Itiy2LEg2KfZhNmF2YLYt9i5INin2YTYtdmI2KrZiiDYp9mE2KrYp9mE2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i2LLYsSDYp9mE2KXZitmC2KfZgSDYp9mE2YXYpNmC2KoiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOGY2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDEzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQxLBOIGtvZHUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyB2yZkgeWVuaSBQxLBOIGtvZCBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsga29kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJZZW5pIFBJTiBrb2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4ixZ5pZnLJmSBkYXhpbCBldG3JmWsgw7zDp8O8biB0b3h1bnVuIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIHBhcm9sIHlhesSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBQSU4gZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IllhbmzEscWfIFBJTiBrb2R1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gTWVueXUsIHNvbnJhIDAgYmFzxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiJTaWbJmXQga2lsaWRpIGPJmWhkbMmZcmluaXogYml0ZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IkRvbG11xZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IkRvbHVyLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4iRWxla3RyaWvJmSBxb8WfdW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gTWVueXUgZMO8eW3JmXNpbsmZIGJheMSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+IsWeyZliyZlryZkga2lsaWRsyZluZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4iU8SwTSBrYXJ0IHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiJQbGFuxZ9ldGTJmSBTxLBNIGthcnQgeW94ZHVyLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IlRlbGVmb25kYSBTxLBNIGthcnQgeW94ZHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IlNJTSBrYXJ0xLEgZGF4aWwgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJTxLBNIGthcnQgeW94ZHVyIHbJmSB5YSBveHVuYSBiaWxpbm1pci4gU8SwTSBrYXJ0IGRheGlsIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+IllhcmFyc8SxeiBTSU0ga2FydC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJTaXppbiBTxLBNIGthcnTEsW7EsXogZGFpbWkgb2xhcmFxIGRlYWt0aXZsyZnFn2liLlxuIEJhxZ9xYSBTxLBNIGthcnQgw7zDp8O8biBzaW1zaXogeGlkbcmZdCBwcm92YXlkZXJpbml6yZkgbcO8cmFjacmZdCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJTSU0ga2FydCBraWxpZGzJmW5pYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IlPEsE0ga2FydCBQVUsgaWzJmSBraWxpZGzJmW5pYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+IlPEsE0ga2FydMSxbiBraWxpZGkgYcOnxLFsxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBXaWRnZXQgJTIkZCBvZiAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiJXaWRnZXQgyZlsYXbJmSBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4iQm/FnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4iS2lsaWRpIGHDp21hIHNhaMmZc2kgZ2VuacWfbMmZbmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IktpbGlkaSBhw6dtYSBzYWjJmXNpIMOnw7ZrZMO8LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHZpZGNldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4ixLBzdGlmYWTJmcOnaSBzZWxla3RvcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJTdGF0dXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4iTWVkaWEga29udHJvbGxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJZZW5pZMmZbiBzxLFyYWxhbWEgdmlkY2V0aSBiYcWfbGFkxLFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlZpZGNldGluIHTJmWtyYXIgc2lmYXJpxZ9pIHNvbmEgw6dhdGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IlZpZGNldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBzaWxpbmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IktpbGlkaSBhw6dtYSBzYWjJmXNpbmkgZ2VuacWfbMmZbmRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiJTw7xyw7zFn2TDvHJtyZkga2lsaWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4iS2lsZCBhw6dtYSBtb2RlbGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJTaWbJmXQgS2lsaWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IlBpbiBraWxpZCBhw6dtYXPEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLFnmlmcsmZIGtpbGlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJNb2RlbCBzYWjJmXNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiJTw7xyw7zFn2TDvHJtyZkgc2FoyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+IsaPdnbJmWxraSBpemzJmW3JmSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+Ik7DtnZiyZl0aSBpemzJmW3JmSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJQYXV6YSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+Ik94dXRtYSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IkRheWFuZMSxcm1hIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJMyZnEn3YgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4iU2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiJIYXrEsXJkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4iUmVqaW0gZMmZeWnFn2lrbGl5aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRGF4aWwgb2x1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iS2lsaWRpIGHDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU8mZc3NpeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJTyZlzIGHDp8SxcWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkF4dGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDDvMOnw7xuIHl1eGFyxLEgc8O8csO8xZ9kw7xyw7xuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDDvMOnw7xuIGHFn2HEn8SxIHPDvHLDvMWfZMO8csO8bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gw7zDp8O8biBzb2xhIHPDvHLDvMWfZMO8ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IMO8w6fDvG4gc2HEn2Egc8O8csO8xZ9kw7xyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4iQ2FyaSBpc3RpZmFkyZnDp2kgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iVMmZY2lsaSB6yZluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IsWeYWJsb251IHVudXRtdcWfYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IllhbmzEscWfIE1vZGVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4iWWFubMSxxZ8gxZ5pZnLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJQSU4gc8mZaHZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzYW5pecmZIHNvbnJhIHllbmlkyZluIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLFnmFibG9udW51enUgw6fJmWtpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4ga29kdSBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJQxLBOIGtvZHUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiJQYXJvbCBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNIGluZGkgZGVha3RpdmRpci4gRGF2YW0gZXRtyZlrIMO8w6fDvG4gUFVLIGtvZHUgZGF4aWwgZWRpbi4gxo9sYXbJmSBtyZlsdW1hdCDDvMOnw7xuIG9wZXJhdG9yYSBtw7xyYWNpyZl0IGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IsSwc3TJmWRpeWluaXogUMSwTiBrb2R1IGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4ixLBzdMmZZGl5aW5peiBQSU4ga29kdSB0yZlzZGlxbMmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTxLBNIGthcnTEsW4ga2lsaWRpIGHDp8SxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IllhbmzEscWfIFDEsE4ga29kLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IjQtZMmZbiA4LcmZIHHJmWTJmXIgcsmZccmZbWkgb2xhbiBQSU4geWF6xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyBrb2QgOCByyZlxyZltIHbJmSB5YSBkYWhhIMOnb3ggb2xtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iRMO8emfDvG4gUFVLIGtvZHUgeWVuaWTJmW4gZGF4aWwgZWRpbi4gVMmZa3JhcmxhbmFuIGPJmWhkbMmZciBTSU1cJ2kgYmlyZMmZZsmZbGlrIHPEsXJhZGFuIMOnxLF4YXJhY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ga29kbGFyxLEgdXnEn3VuIGRleWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iSMmZZGRpbmTJmW4gw6dveCBjyZloZCBlZGlsZGkhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBHb29nbGUgaGVzYWLEsW7EsXogaWzJmSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4ixLBzdGlmYWTJmcOnaSBhZMSxIChlLXBvw6d0KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4ixZ5pZnLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4iRGF4aWwgb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IllhbmzEscWfIGlzdGlmYWTJmcOnaSBhZMSxIHbJmSB5YSBwYXJvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4ixLBzdGlmYWTJmcOnaSBhZMSxbsSxesSxIHbJmSB5YSBwYXJvbHVudXp1IHVudXRtdXN1bnV6P1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiBsaW5raW7JmSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+Ikhlc2FiIHlveGxhbsSxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iUElOIGtvZHVudXp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IsWeaWZyyZluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iTW9kZWxpbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gw6fJmWttaXNpbml6LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4iU2l6IHBsYW7Fn2V0IGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgdcSfdXJzdXogY8mZaGQgZXRzyZluaXosIHBsYW7Fn2V0IGZhYnJpayBheWFybGFyxLFuYSBzxLFmxLFybGFuYWNhcSB2yZkgYsO8dMO8biBtyZlsdW1hdGxhcsSxbsSxeiBpdMmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4iU2l6IHRlbGVmb24ga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHXEn3Vyc3V6IGPJmWhkIGV0bWlzaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZMmZZsmZIGTJmSB1xJ91cnN1eiBjyZloZCBldHPJmW5peiwgdGVsZWZvbiBmYWJyaWsgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEgdsmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsW7EsXogaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiJTaXogcGxhbsWfZXQga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIFBsYW7Fn2V0IGZhYnJpayBheWFybGFyxLFuYSBzxLFmxLFybGFuYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiJTaXogdGVsZWZvbnVuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB5YW5sxLHFnyBjyZloZCBldG1pc2luaXouIFRlbGVmb24gYXJ0xLFxIGRlZm9sdCB6YXZvZCBoYWzEsW5hIHPEsWbEsXJsYW5hY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJTaXoga2lsaWRpIGHDp21hcSDDvMOnw7xuIMWfYWJsb251IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBzyZlodiDDp8mZa2Rpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkYWhhIHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBwbGFuxZ9ldGluaXppbiBraWxpZGluaSBlLXBvw6d0IGhlc2FixLFuxLF6bGEgYcOnbWFxIHTJmWzJmWIgb2x1bmFjYXEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSBiaXIgZGFoYSB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJTaXogYXJ0xLFxIG1vZGVsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRtaXNpbml6Ljx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgeWFubMSxxZ8gZGF4aWwgZXRzyZluaXosIHRlbGVmb251biBraWxpZGluaW4gYcOnxLFsbWFzxLEgw7zDp8O8biBlbGVrdHJvbiBwb8OndCDDvG52YW7EsW7EsXogdMmZbMmZYiBvbHVuYWNhcS5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIgLSAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlnEscSfxLHFn2TEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLGj3Z2yZlsa2kgaXpsyZltyZkgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iTsO2dmLJmXRpIGl6bMmZbcmZIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJQYXV6YSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiJPeHV0bWEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4iRGF5YW5kxLFybWEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IlhpZG3JmXQgeW94ZHVyLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4ZjZhYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iUMSwTiBrb2R1IGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsgdsmZIHllbmkgUMSwTiBrb2QgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIGtvZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iWWVuaSBQSU4ga29kdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IsWeaWZyyZkgZGF4aWwgZXRtyZlrIMO8w6fDvG4gdG94dW51biI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBwYXJvbCB5YXrEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gUElOIGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiJZYW5sxLHFnyBQSU4ga29kdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIE1lbnl1LCBzb25yYSAwIGJhc8Sxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iU2lmyZl0IGtpbGlkaSBjyZloZGzJmXJpbml6IGJpdGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiJEb2xtdcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiJEb2x1ciwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IkVsZWt0cmlryZkgcW/Fn3VuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIE1lbnl1IGTDvHltyZlzaW7JmSBiYXjEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiLFnsmZYsmZa8mZIGtpbGlkbMmZbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlPEsE0ga2FydCB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4iUGxhbsWfZXRkyZkgU8SwTSBrYXJ0IHlveGR1ci4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiJUZWxlZm9uZGEgU8SwTSBrYXJ0IHlveGR1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJTSU0ga2FydMSxIGRheGlsIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU8SwTSBrYXJ0IHlveGR1ciB2yZkgeWEgb3h1bmEgYmlsaW5taXIuIFPEsE0ga2FydCBkYXhpbCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiJZYXJhcnPEsXogU0lNIGthcnQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4iU2l6aW4gU8SwTSBrYXJ0xLFuxLF6IGRhaW1pIG9sYXJhcSBkZWFrdGl2bMmZxZ9pYi5cbiBCYcWfcWEgU8SwTSBrYXJ0IMO8w6fDvG4gc2ltc2l6IHhpZG3JmXQgcHJvdmF5ZGVyaW5pesmZIG3DvHJhY2nJmXQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4iU0lNIGthcnQga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTxLBNIGthcnQgUFVLIGlsyZkga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTxLBNIGthcnTEsW4ga2lsaWRpIGHDp8SxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4gV2lkZ2V0ICUyJGQgb2YgJTMkZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4iV2lkZ2V0IMmZbGF2yZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IkJvxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IktpbGlkaSBhw6dtYSBzYWjJmXNpIGdlbmnFn2zJmW5kaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJLaWxpZGkgYcOnbWEgc2FoyZlzaSDDp8O2a2TDvC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB2aWRjZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IsSwc3RpZmFkyZnDp2kgc2VsZWt0b3J1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4iU3RhdHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4iS2FtZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+Ik1lZGlhIGtvbnRyb2xsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4iWWVuaWTJmW4gc8SxcmFsYW1hIHZpZGNldGkgYmHFn2xhZMSxbGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiJWaWRjZXRpbiB0yZlrcmFyIHNpZmFyacWfaSBzb25hIMOnYXRkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiJWaWRjZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gc2lsaW5kaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiJLaWxpZGkgYcOnbWEgc2FoyZlzaW5pIGdlbmnFn2zJmW5kaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4iU8O8csO8xZ9kw7xybcmZIGtpbGlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IktpbGQgYcOnbWEgbW9kZWxpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4iU2lmyZl0IEtpbGlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQaW4ga2lsaWQgYcOnbWFzxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4ixZ5pZnLJmSBraWxpZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4iTW9kZWwgc2FoyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4iU8O8csO8xZ9kw7xybcmZIHNhaMmZc2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiLGj3Z2yZlsa2kgaXpsyZltyZkgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiJOw7Z2YsmZdGkgaXpsyZltyZkgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iUGF1emEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJPeHV0bWEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJEYXlhbmTEsXJtYSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4iTMmZxJ92IGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+IlNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4iSGF6xLFyZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IlJlamltIGTJmXlpxZ9pa2xpeWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkRheGlsIG9sdW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IktpbGlkaSBhw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FtZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlPJmXNzaXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU8mZcyBhw6fEsXFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJBeHRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gw7zDp8O8biB5dXhhcsSxIHPDvHLDvMWfZMO8csO8bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gw7zDp8O8biBhxZ9hxJ/EsSBzw7xyw7zFn2TDvHLDvG4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IMO8w6fDvG4gc29sYSBzw7xyw7zFn2TDvHIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDDvMOnw7xuIHNhxJ9hIHPDvHLDvMWfZMO8ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IkNhcmkgaXN0aWZhZMmZw6dpIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IlTJmWNpbGkgesmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLFnmFibG9udSB1bnV0bXXFn2FtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiJZYW5sxLHFnyBNb2RlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IllhbmzEscWfIMWeaWZyyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIHPJmWh2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSBzb25yYSB5ZW5pZMmZbiBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4ixZ5hYmxvbnVudXp1IMOnyZlraW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJTSU0gUElOIGtvZHUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUMSwTiBrb2R1IGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4iUGFyb2wgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTSBpbmRpIGRlYWt0aXZkaXIuIERhdmFtIGV0bcmZayDDvMOnw7xuIFBVSyBrb2R1IGRheGlsIGVkaW4uIMaPbGF2yZkgbcmZbHVtYXQgw7zDp8O8biBvcGVyYXRvcmEgbcO8cmFjacmZdCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLEsHN0yZlkaXlpbml6IFDEsE4ga29kdSBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IsSwc3TJmWRpeWluaXogUElOIGtvZHUgdMmZc2RpcWzJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU8SwTSBrYXJ0xLFuIGtpbGlkaSBhw6fEsWzEsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJZYW5sxLHFnyBQxLBOIGtvZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiI0LWTJmW4gOC3JmSBxyZlkyZlyIHLJmXHJmW1pIG9sYW4gUElOIHlhesSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsga29kIDggcsmZccmZbSB2yZkgeWEgZGFoYSDDp294IG9sbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkTDvHpnw7xuIFBVSyBrb2R1IHllbmlkyZluIGRheGlsIGVkaW4uIFTJmWtyYXJsYW5hbiBjyZloZGzJmXIgU0lNXCdpIGJpcmTJmWbJmWxpayBzxLFyYWRhbiDDp8SxeGFyYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIGtvZGxhcsSxIHV5xJ91biBkZXlpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IkjJmWRkaW5kyZluIMOnb3ggY8mZaGQgZWRpbGRpISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gR29vZ2xlIGhlc2FixLFuxLF6IGlsyZkgZGF4aWwgb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+IsSwc3RpZmFkyZnDp2kgYWTEsSAoZS1wb8OndCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IsWeaWZyyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IkRheGlsIG9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiJZYW5sxLHFnyBpc3RpZmFkyZnDp2kgYWTEsSB2yZkgeWEgcGFyb2wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IsSwc3RpZmFkyZnDp2kgYWTEsW7EsXrEsSB2yZkgeWEgcGFyb2x1bnV6dSB1bnV0bXVzdW51ej9cbiAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIgbGlua2luyZkgZGF4aWwgb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiJIZXNhYiB5b3hsYW7EsWzEsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlBJTiBrb2R1bnV6dSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRkaW5pei5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLFnmlmcsmZbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRkaW5pei4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ik1vZGVsaW5pemkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIMOnyZlrbWlzaW5pei5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IlNpeiBwbGFuxZ9ldCBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgdcSfdXJzdXogY8mZaGQgZXRtaXNpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkyZlmyZkgZMmZIHXEn3Vyc3V6IGPJmWhkIGV0c8mZbml6LCBwbGFuxZ9ldCBmYWJyaWsgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEgdsmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsW7EsXogaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IlNpeiB0ZWxlZm9uIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgdcSfdXJzdXogY8mZaGQgZXRzyZluaXosIHRlbGVmb24gZmFicmlrIGF5YXJsYXLEsW5hIHPEsWbEsXJsYW5hY2FxIHbJmSBiw7x0w7xuIG3JmWx1bWF0bGFyxLFuxLF6IGl0yZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4iU2l6IHBsYW7Fn2V0IGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBkyZlmyZkgdcSfdXJzdXogY8mZaGQgZXRtaXNpbml6LiBQbGFuxZ9ldCBmYWJyaWsgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4iU2l6IHRlbGVmb251biBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4geWFubMSxxZ8gY8mZaGQgZXRtaXNpbml6LiBUZWxlZm9uIGFydMSxcSBkZWZvbHQgemF2b2QgaGFsxLFuYSBzxLFmxLFybGFuYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iU2l6IGtpbGlkaSBhw6dtYXEgw7zDp8O8biDFn2FibG9udSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgc8mZaHYgw6fJmWtkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZGFoYSB1xJ91cnN1eiBjyZloZGTJmW4gc29ucmEgcGxhbsWfZXRpbml6aW4ga2lsaWRpbmkgZS1wb8OndCBoZXNhYsSxbsSxemxhIGHDp21hcSB0yZlsyZliIG9sdW5hY2FxLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgYmlyIGRhaGEgeW94bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iU2l6IGFydMSxcSBtb2RlbGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0bWlzaW5pei48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkyZlmyZkgZMmZIHlhbmzEscWfIGRheGlsIGV0c8mZbml6LCB0ZWxlZm9udW4ga2lsaWRpbmluIGHDp8SxbG1hc8SxIMO8w6fDvG4gZWxla3Ryb24gcG/Dp3Qgw7xudmFuxLFuxLF6IHTJmWzJmWIgb2x1bmFjYXEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIC0gIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJZxLHEn8SxxZ9kxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4ixo92dsmZbGtpIGl6bMmZbcmZIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Ik7DtnZiyZl0aSBpemzJmW3JmSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iUGF1emEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4iT3h1dG1hIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+IkRheWFuZMSxcm1hIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg3MDA2NTA0MDMwNTQwNDIxNTMiPiJYaWRtyZl0IHlveGR1ci4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmUvYWN0aXZpdHlzdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmUvYWN0aXZpdHlzdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlZmU0MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWJlL2FjdGl2aXR5c3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCi0qKgotKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIiBtc2dpZD0iMzM1Mjg4ODE4NjY3NDk4MTU5MyI+IktleWd1YXJkVGVzdEFjdGl2aXR5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VjdXJlX2FwcF9uYW1lIiBtc2dpZD0iNzk1NTQ5ODc0MjgxNjg2ODA0OSI+IlVuaWZpZWRDYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub25lX21lbnVfaXRlbSIgbXNnaWQ9IjYxNTY3NDcyODU2ODc1NTE0MjQiPiLQkNGF0L7QstGLINC90Y/QvNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGluX21lbnVfaXRlbSIgbXNnaWQ9IjExNzk3NTY0MzMyNjg5NjIzMTEiPiJQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfbWVudV9pdGVtIiBtc2dpZD0iMTk1OTk4MDQ5OTY2MjE1MzE2MCI+ItCf0LDRgNC+0LvRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhdHRlcm5fbWVudV9pdGVtIiBtc2dpZD0iMjk4Nzc5ODE1MjE3NTE0MDI0OSI+ItCo0LDQsdC70L7QvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9waW5fbWVudV9pdGVtIiBtc2dpZD0iMzk2MjI4NjYzOTY0NTA4NDg4MCI+IlBJTi3QutC+0LQgU0lNLdC60LDRgNGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcHVrX21lbnVfaXRlbSIgbXNnaWQ9IjYxOTAwNDQxMzMwMDgzOTI5NzQiPiJQVUst0LrQvtC0IFNJTS3QutCw0YDRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRkX3dpZGdldF9pdGVtIiBtc2dpZD0iMjc5NzAyMTUyMzY2ODU3NDE1Ij4i0JLRi9Cx0LDRgCDQsmnQtNC20Y3RgtCwLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib25fc2NyZWVuX3R1cm5lZF9vZmYiIG1zZ2lkPSI4NzYxMzk2MzI5NzcwNTA4MzY3Ij4ib25TY3JlZW5UdXJuZWRPZmYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbl9zY3JlZW5fdHVybmVkX29uIiBtc2dpZD0iOTIyMjkyNjgxODAzMDcyODk5OSI+Im9uU2NyZWVuVHVybmVkT24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkb19rZXlndWFyZCIgbXNnaWQ9IjkyMTA5MzY5Nzc4MjMxMTg3OTYiPiJkb0tleWd1YXJkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idmVyaWZ5X3VubG9jayIgbXNnaWQ9Ijg1MDg3MjIyNzMzMjkzMDY5NjgiPiJ2ZXJpZnlVbmxvY2siPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTAyMGEwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAotKioKLSoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0qKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qKgotKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLQo9Cy0Y/QtNC30ZbRhtC1IFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLQo9Cy0Y/QtNC30ZbRhtC1IFBVSy3QutC+0LQg0ZYg0L3QvtCy0YsgUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLQndC+0LLRiyBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i0JTQsNC60YDQsNC90ZbRhtC10YHRjywg0LrQsNCxINGD0LLQtdGB0YbRliDQv9Cw0YDQvtC70YwiPC9mb250Pjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLQo9Cy0Y/QtNC30ZbRhtC1INC/0LDRgNC+0LvRjCDQtNC70Y8g0YDQsNC30LHQu9Cw0LrQsNCy0LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLQmtCw0LEg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMLCDRg9Cy0Y/QtNC30ZbRhtC1IFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLQndGP0L/RgNCw0LLRltC70YzQvdGLIFBJTi3QutC+0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+ItCa0LDQsSDRgNCw0LfQsdC70LDQutCw0LLQsNGG0YwsINC90LDRhtGW0YHQvdGW0YbQtSBcItCc0LXQvdGOXCIsINC30LDRgtGL0LwgMC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i0J/QtdGA0LDQstGL0YjQsNC90LAg0LzQsNC60YHRltC80LDQu9GM0L3QsNGPINC60L7Qu9GM0LrQsNGB0YbRjCDRgdC/0YDQvtCxINGA0LDQt9Cx0LvQsNC60L7RntC60ZYg0L/RgNCw0Lcg0KTRjdC50YHQutCw0L3RgtGA0L7Qu9GMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiLQl9Cw0YDQsNC00LbQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+ItCX0LDRgNCw0LTQutCwLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i0J/QsNC00LrQu9GO0YfRi9GG0LUg0LfQsNGA0LDQtNC90YPRjiDQv9GA0YvQu9Cw0LTRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+ItCd0LDRhtGW0YHQvdGW0YbQtSDQutC90L7Qv9C60YMgXCLQnNC10L3RjlwiLCDQutCw0LEg0YDQsNC30LHQu9Cw0LrRltGA0LDQstCw0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+ItCh0LXRgtC60LAg0LfQsNCx0LvQsNC6adGA0LDQstCw0L3QsNGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+ItCd0Y/QvNCwIFNJTS3QutCw0YDRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+ItCjINC/0LvQsNC90YjRjdGG0LUg0L3Rj9C80LAgU0lNLdC60LDRgNGC0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLQoyDRgtGN0LvQtdGE0L7QvdC1INC90Y/QvNCwIFNJTS3QutCw0YDRgtGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiLQo9GB0YLQsNGe0YbQtSBTSU0t0LrQsNGA0YLRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJTSU0t0LrQsNGA0YLQsCDQsNC00YHRg9GC0L3RltGH0LDQtSDRhtGWINC90LUg0YfRi9GC0LDQtdGG0YbQsC4g0KPRgdGC0LDRntGG0LUgU0lNLdC60LDRgNGC0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+IlNJTS3QutCw0YDRgtGDINC90LXQvNCw0LPRh9GL0LzQsCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+ItCS0LDRiNCwIFNJTS3QutCw0YDRgtCwINCx0YvQu9CwINCw0LTQutC70Y7Rh9Cw0L3QsCDQvdCw0LfQsNGe0YHRkdC00YsuXG4g0JfQstGP0LbRi9GG0LXRgdGPINC3INCw0L/QtdGA0LDRgtCw0YDQsNC8INCx0LXRgdC/0YDQsNCy0LDQtNC90L7QuSDRgdGD0LLRj9C30ZYsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMINGW0L3RiNGD0Y4gU0lNLdC60LDRgNGC0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTS3QutCw0YDRgtCwINC30LDQsdC70LDQumnRgNCw0LLQsNC90LDRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IlNJTS3QutCw0YDRgtCwINC30LDQsdC70LDQumnRgNCw0LLQsNC90LAgUFVLLdC60L7QtNCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiLQoNCw0LfQsdC70LDQumnRgNCw0LLQsNC90L3QtSBTSU0t0LrQsNGA0YLRiy4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4g0JJJ0LTQttGN0YIgJTIkZCDQtyAlMyRkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLQlNCw0LTQsNGG0Ywg0LLRltC00LbRjdGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLQn9GD0YHRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLQktC+0LHQu9Cw0YHRhtGMINGA0LDQt9Cx0LvQsNC60ZbRgNC+0Z7QutGWINGA0LDQt9Cz0LDRgNC90YPRgtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+ItCS0L7QsdC70LDRgdGG0Ywg0YDQsNC30LHQu9Cw0LrRltGA0L7RntC60ZYg0LfQs9Cw0YDQvdGD0YLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiLQktGW0LTQttGN0YIgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+ItCh0LXQu9C10LrRgtCw0YAg0LrQsNGA0YvRgdGC0LDQu9GM0L1p0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+ItCh0YLQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i0JrQsNC80LXRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+ItCd0LDQu9Cw0LTRiyDQvNGD0LvRjNGC0YvQvNC10LTRi9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLQl9C80Y/QvdC10L3QvdC1INC/0LDRgNCw0LTQutGDINCy0ZbQtNC20Y3RgtCw0Z4g0L/QsNGH0LDQu9C+0YHRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLQl9C80Y/QvdC10L3QvdC1INC/0LDRgNCw0LTQutGDINCy0ZbQtNC20Y3RgtCw0Z4g0YHQutC+0L3Rh9GL0LvQsNGB0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiLQktGW0LTQttGN0YIgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g0LLRi9C00LDQu9C10L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLQoNCw0LfQs9Cw0YDQvdGD0YbRjCDQstC+0LHQu9Cw0YHRhtGMINGA0LDQt9Cx0LvQsNC60ZbRgNC+0Z7QutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+ItCg0LDQt9Cx0LvQsNC6adGA0L7RntC60LAg0YHQu9Cw0LnQtNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i0KPQt9C+0YAg0YDQsNC30LHQu9Cw0Lpp0YDQvtGe0LrRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+ItCk0Y3QudGB0LrQsNC90YLRgNC+0LvRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQSU4t0LrQvtC0INGA0LDQt9Cx0LvQsNC6adGA0L7RntC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i0J/QsNGA0L7Qu9GMINGA0LDQt9Cx0LvQsNC6adGA0L7RntC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i0JLQvtCx0LvQsNGB0YbRjCDRg9C30L7RgNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLQktC+0LHQu9Cw0YHRhtGMINGB0LvQsNC50LTQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+ItCa0L3QvtC/0LrQsCDQv9Cw0L/Rj9GA0Y3QtNC90Y/QuSDQutCw0LzQv9Cw0Ldp0YbRi9GWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiLQmtC90L7Qv9C60LAg0L3QsNGB0YLRg9C/0L3QsNC5INC60LDQvNC/0LDQt2nRhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLQmtC90L7Qv9C60LAg0L/QsNGe0LfRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i0JrQvdC+0L/QutCwINC/0YDQsNC50LPRgNCw0LLQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i0JrQvdC+0L/QutCwINGB0L/Ri9C90LXQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iMTIzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiLQkNC00LzQtdC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i0JLRi9C00LDQu9GW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4i0JPQsNGC0L7QstCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4i0JfQvNC10L3QsCDRgNGN0LbRi9C80YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLQoNCw0LfQsdC70LDQutCw0LLQsNGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i0JrQsNC80LXRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+ItCm0ZbRhdGWINGA0Y3QttGL0LwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i0JPRg9C6INGD0LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+ItCf0L7RiNGD0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i0J/RgNCw0LLRj9C00LfRltGG0LUg0L/QsNC70YzRhtCw0Lwg0YPQstC10YDRhSwg0LrQsNCxINCw0YLRgNGL0LzQsNGG0YwgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+ItCf0YDQsNCy0Y/QtNC30ZbRhtC1INC/0LDQu9GM0YbQsNC8INGD0L3RltC3LCDQutCw0LEg0LDRgtGA0YvQvNCw0YbRjCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i0J/RgNCw0LLRj9C00LfRltGG0LUg0L/QsNC70YzRhtCw0Lwg0YPQu9C10LLQsCwg0LrQsNCxINCw0YLRgNGL0LzQsNGG0YwgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLQn9GA0LDQstGP0LTQt9GW0YbQtSDQv9Cw0LvRjNGG0LDQvCDRg9C/0YDQsNCy0LAsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+ItCR0Y/Qs9GD0YfRiyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i0K3QutGB0YLRgNCw0L3QvdGLINCy0YvQutC70ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+ItCX0LDQsdGL0LvRliDQutC70Y7RhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i0J3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDQutC70Y7RhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+ItCd0Y/Qv9GA0LDQsmnQu9GM0L3RiyDQv9Cw0YDQvtC70YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i0J3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiLQn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+ItCd0LDQvNCw0LvRjtC50YbQtSDQutC70Y7RhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+ItCj0LLRj9C00LfRltGG0LUgUElOLdC60L7QtCBTSU0t0LrQsNGA0YLRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4i0KPQstGP0LTQt9GW0YbQtSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+ItCj0LLRj9C00LfRltGG0LUg0L/QsNGA0L7Qu9GMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNLdC60LDRgNGC0LAg0LfQsNGA0LDQtyDQsNC00LrQu9GO0YfQsNC90LAuINCj0LLRj9C00LfRltGG0LUgUFVLLdC60L7QtCwg0LrQsNCxINC/0YDQsNGG0Y/Qs9C90YPRhtGMLiDQl9Cy0Y/QttGL0YbQtdGB0Y8g0YHQsCDRgdCy0LBp0Lwg0LDQv9C10YDQsNGC0LDRgNCw0LwsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMINC00LDQtNCw0YLQutC+0LLRg9GOIGnQvdGE0LDRgNC80LDRhtGL0Y4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+ItCj0LLRj9C00LfRltGG0LUg0LbQsNC00LDQvdGLIFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i0J/QsNGG0LLQtdGA0LTQt9GW0YbQtSDQttCw0LTQsNC9IFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+ItCg0LDQt9Cx0LvQsNC6adGA0L7RntC60LAgU0lNLdC60LDRgNGC0YsuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiLQndGP0L/RgNCw0LLRltC70YzQvdGLIFBJTi3QutC+0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i0KPQstGP0LTQt9GW0YbQtSBQSU4t0LrQvtC0LCDRj9C60ZYg0LfQvNGP0YjRh9Cw0LUg0LDQtCA0INC00LAgOCDQu9GW0YfQsdCw0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLLdC60L7QtCDQv9Cw0LLRltC90LXQvSDRg9GC0YDRi9C80Ltp0LLQsNGG0YwgOCDQu2nRh9Cx0LDRniDRliDQsdC+0LvRjNGILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+ItCf0LDRntGC0L7RgNC90LAg0YPQstGP0LTQt9GW0YbQtSDQv9GA0LDQstGW0LvRjNC90YsgUFVLLdC60L7QtC4g0J3QtdCw0LTQvdCw0YDQsNC30L7QstGL0Y8g0YHQv9GA0L7QsdGLINC90LDQt9Cw0Z7QttC00Ysg0LDQtNC60LvRjtGH0LDRhtGMIFNJTS3QutCw0YDRgtGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4t0LrQvtC00Ysg0L3QtSDRgdGD0L/QsNC00LDRjtGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLQl9Cw0L3QsNC00YLQsCDRiNC80LDRgiDRgdC/0YDQvtCxINC/0LDRntGC0LDRgNGL0YbRjCDRiNCw0LHQu9C+0L0hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+ItCa0LDQsSDRgNCw0LfQsdC70LDQumnRgNCw0LLQsNGG0YwsINGD0LLQsNC50LTQt9GW0YbQtSDRniDRgdCy0L7QuSDRg9C70ZbQutC+0LLRiyDQt9Cw0L/RltGBIEdvb2dsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+ItCG0LzRjyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCAo0Y3Qu9C10LrRgtGA0L7QvdC90LDRjyDQv9C+0YjRgtCwKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i0J/QsNGA0L7Qu9GMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLQo9Cy0LDQudGB0YZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLQndGP0L/RgNCw0LLRltC70YzQvdCw0LUg0ZbQvNGPINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwINGG0ZYg0L/QsNGA0L7Qu9GMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLQl9Cw0LHRi9C70ZbRgdGPINC90LAg0ZbQvNGPINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwINCw0LHQviDQv9Cw0YDQvtC70Yw/XG7QndCw0LLQtdC00LDQudGG0LUgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+ItCf0YDQsNCy0LXRgNC60LAg0Z7Qu2nQutC+0LLQsNCz0LAg0LfQsNC/adGB0YMuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWIFBJTi3QutC+0LQg0L/RjdGe0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LfQvtGeOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gXG5cbtCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWINC/0LDRgNC+0LvRjCDQv9GN0Z7QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGA0LDQt9C+0Z46IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBcblxu0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGe0LLRj9C70ZYg0LPRgNCw0YTRltGH0L3RiyDQutC70Y7RhyDRgNCw0LfQsdC70LDQumnRgNC+0Z7Qumkg0L/RjdGe0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LfQvtGeOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gXG5cbtCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGB0L/RgNCw0LHQsNCy0LDQu9GWINGA0LDQt9Cx0LvQsNC6adGA0LDQstCw0YbRjCDQv9C70LDQvdGI0Y3RgiDQvdC10LrQsNC70YzQumkg0YDQsNC30L7RniAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4pLiDQn9Cw0YHQu9GPINGP0YjRh9GNINC90LXQutCw0LvRjNC6adGFINGB0L/RgNC+0LEgKDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+KSDRkdC9INCx0YPQtNC30LUg0YHQutGW0L3Rg9GC0Ysg0LTQsCDQt9Cw0LLQvtC00YHQutGW0YUg0L3QsNC70LDQtCBpINC60LDRgNGL0YHRgtCw0LvRjNC9adGG0Lpp0Y8g0LTQsNC00LfQtdC90YvRjyDQsdGD0LTRg9GG0Ywg0LfQs9GD0LHQu9C10L3Ri9GPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0YHQv9GA0LDQsdCw0LLQsNC70ZYg0YDQsNC30LHQu9Cw0Lpp0YDQsNCy0LDRhtGMINC/0LvQsNC90YjRjdGCINC90LXQutCw0LvRjNC6aSDRgNCw0LfQvtGeICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPikuINCf0LDRgdC70Y8g0Y/RiNGH0Y0g0L3QtdC60LDQu9GM0Lpp0YUg0YHQv9GA0L7QsSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pINGR0L0g0LHRg9C00LfQtSDRgdC60ZbQvdGD0YLRiyDQtNCwINC30LDQstCw0LTRgdC60ZbRhSDQvdCw0LvQsNC0IGkg0LrQsNGA0YvRgdGC0LDQu9GM0L1p0YbQumnRjyDQtNCw0LTQt9C10L3Ri9GPINCx0YPQtNGD0YbRjCDQt9Cz0YPQsdC70LXQvdGL0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0YHQv9GA0LDQsdCw0LLQsNC70ZYg0YDQsNC30LHQu9Cw0Lpp0YDQsNCy0LDRhtGMINC/0LvQsNC90YjRjdGCINC90LXQutCw0LvRjNC6aSDRgNCw0LfQvtGeICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pLiDQptGP0L/QtdGAINGR0L0g0LHRg9C00LfQtSDRgdC60ZbQvdGD0YLRiyDQtNCwINC30LDQstCw0LTRgdC60ZbRhSDQvdCw0LvQsNC0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRgdC/0YDQsNCx0LDQstCw0LvRliDRgNCw0LfQsdC70LDQumnRgNCw0LLQsNGG0Ywg0YLRjdC70LXRhNC+0L0g0L3QtdC60LDQu9GM0LppINGA0LDQt9C+0Z4gKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikuINCm0Y/Qv9C10YAg0ZHQvSDQsdGD0LTQt9C1INGB0LrRltC90YPRgtGLINC00LAg0LfQsNCy0LDQtNGB0LrRltGFINC90LDQu9Cw0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWINCz0YDQsNGE0ZbRh9C90Ysg0LrQu9GO0Ycg0YDQsNC30LHQu9Cw0Lpp0YDQvtGe0LppINC/0Y3RntC90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0YDQsNC30L7RnjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uINCf0LDRgdC70Y8g0Y/RiNGH0Y0g0L3QtdC60LDQu9GM0Lpp0YUg0L3Rj9Ge0LTQsNC70YvRhSDRgdC/0YDQvtCxICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPikg0LLQsNC8INCx0YPQtNC30LUg0L/RgNCw0L/QsNC90LDQstCw0L3QsCDRgNCw0LfQsdC70LDQumnRgNCw0LLQsNGG0Ywg0YLRjdC70LXRhNC+0L0sINGD0LLQsNC50YjQvtGe0YjRiyDRniBHb29nbGUuXG5cbiDQn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGe0LLRj9C70ZYg0LPRgNCw0YTRltGH0L3RiyDQutC70Y7RhyDRgNCw0LfQsdC70LDQumnRgNC+0Z7Qumkg0L/RjdGe0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LfQvtGeOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4g0J/QsNGB0LvRjyDRj9GI0YfRjSDQvdC10LrQsNC70YzQumnRhSDQvdGP0Z7QtNCw0LvRi9GFINGB0L/RgNC+0LEgKDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+KSDQstCw0Lwg0LHRg9C00LfQtSDQv9GA0LDQv9Cw0L3QsNCy0LDQvdCwINGA0LDQt9Cx0LvQsNC6adGA0LDQstCw0YbRjCDRgtGN0LvQtdGE0L7QvSwg0YPQstCw0LnRiNC+0Z7RiNGLINGeIEdvb2dsZS5cblxuINCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i0JLRi9C00LDQu2nRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i0JrQvdC+0L/QutCwINC/0LDQv9GP0YDRjdC00L3Rj9C5INC60LDQvNC/0LDQt2nRhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLQmtC90L7Qv9C60LAg0L3QsNGB0YLRg9C/0L3QsNC5INC60LDQvNC/0LDQt2nRhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i0JrQvdC+0L/QutCwINC/0LDRntC30YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiLQmtC90L7Qv9C60LAg0L/RgNCw0LnQs9GA0LDQstCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4i0JrQvdC+0L/QutCwINGB0L/Ri9C90LXQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i0J3QtSDQsNCx0YHQu9GD0LPQvtGe0LLQsNC10YbRhtCwLiI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKaW5kZXggODY5YWI3Yi4uNjQxYWRiZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLQktGK0LLQtdC00LXRgtC1INCf0JjQnSDQutC+0LTQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+ItCS0YrQstC10LTQtdGC0LUgUFVLINC4INC90L7QstC40Y8g0J/QmNCdINC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLINC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i0J3QvtCyINCf0JjQnSDQutC+0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLQktGK0LLQtdC00LXRgtC1IFBVSyDQt9CwIFNJTSDQutCw0YDRgtCw0YLQsCDQuCDQvdC+0LLQuNGPINCf0JjQnSDQutC+0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlBVSyDQutC+0LQg0LfQsCBTSU0g0LrQsNGA0YLQsNGC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+ItCd0L7QsiDQn9CY0J0g0LrQvtC0INC30LAgU0lNINC60LDRgNGC0LDRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i0JTQvtC60L7RgdC90LXRgtC1INC4INCy0YrQstC10LTQtdGC0LUg0L/QsNGA0L7Qu9CwIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i0JLRitCy0LXQtNC10YLQtSDQv9Cw0YDQvtC70LAsINC30LAg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLQktGK0LLQtdC00LXRgtC1INCf0JjQnSwg0LfQsCDQtNCwINC+0YLQutC70Y7Rh9C40YLQtSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLQkdGD0YLQvtC9INC30LAg0L/QsNGD0LfQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i0JHRg9GC0L7QvSDQt9CwINC/0YPRgdC60LDQvdC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLQkdGD0YLQvtC9INC30LAg0YHQv9C40YDQsNC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i0KXQsNGA0LXRgdCy0LAg0LzQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+ItCd0LUg0LzQuCDRhdCw0YDQtdGB0LLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+ItCh0YrRgNGG0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLQntGC0LrQu9GO0YfQtdGC0LUsINC30LAg0LTQsCDQv9GA0L7QtNGK0LvQttC40YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+ItCh0YLQsNGA0YLQuNGA0LDQvdC10YLQviDQtSDQsNC90YPQu9C40YDQsNC90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4i0J/Rg9GB0L3QtdGC0LUgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4sINC30LAg0LTQsCDQuNC30YLRgNC40LXRgtC1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDQvdGP0LzQsCDQtNCwINGB0LUg0LjQt9GC0YDQuNC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+ItCQ0JHQkiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i0JLRitCy0LXQtNC10YLQtSDQttC10LvQsNC90LjRjyDQn9CY0J0g0LrQvtC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+ItCf0L7RgtCy0YrRgNC00LXRgtC1INC20LXQu9Cw0L3QuNGPINCf0JjQnSDQutC+0LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDQutCw0YDRgtCw0YLQsCDRgdC1INC+0YLQutC70Y7Rh9Cy0LDigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiLQndC10L/RgNCw0LLQuNC70LXQvSDQn9CY0J0g0LrQvtC0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+ItCS0YrQstC10LTQtdGC0LUg0J/QmNCdINC60L7QtCDRgSDRh9C10YLQuNGA0Lgg0LTQviDQvtGB0LXQvCDRhtC40YTRgNC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDQutC+0LTRitGCINGC0YDRj9Cx0LLQsCDQtNCwINC1INGBIDgg0LjQu9C4INC/0L7QstC10YfQtSDRhtC40YTRgNC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+ItCS0YrQstC10LTQtdGC0LUg0L7RgtC90L7QstC+INC/0YDQsNCy0LjQu9C90LjRjyBQVUsg0LrQvtC0LiDQnNC90L7Qs9C+0LrRgNCw0YLQvdC40YLQtSDQvtC/0LjRgtC4INGJ0LUg0LTQtdCw0LrRgtC40LLQuNGA0LDRgiDQt9CwINC/0L7RgdGC0L7Rj9C90L3QviBTSU0g0LrQsNGA0YLQsNGC0LAuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLQndCw0YfQtdGA0YLQsNGF0YLQtSDQvdC10L/RgNCw0LLQuNC70L3QviDRhNC40LPRg9GA0LDRgtCwINGB0Lgg0LfQsCDQvtGC0LrQu9GO0YfQstCw0L3QtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQv9GK0YLQuC4g0KHQu9C10LQg0L7RidC1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC90LXRg9GB0L/QtdGI0L3QuCDQvtC/0LjRgtCwINGJ0LUg0LHRitC00LXRgtC1INC/0L7QvNC+0LvQtdC90Lgg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUg0YLQtdC70LXRhNC+0L3QsCDQv9C+0YHRgNC10LTRgdGC0LLQvtC8INC40LzQtdC50Lsg0LDQtNGA0LXRgS5cblxuINCe0L/QuNGC0LDQudGC0LUg0L7RgtC90L7QstC+INGB0LvQtdC0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAkyAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+ItCf0YDQtdC80LDRhdCy0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLQndC10L/RgNCw0LLQuNC70LXQvSDQn9CY0J0g0LrQvtC0INC30LAgU0lNINC60LDRgNGC0LDRgtCwIOKAkyDRgdC10LPQsCDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INGB0LLRitGA0LbQtdGC0LUg0YEg0L7Qv9C10YDQsNGC0L7RgNCwINGB0LgsINC30LAg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4i0J3QtdC/0YDQsNCy0LjQu9C10L0g0J/QmNCdINC60L7QtCDQt9CwIFNJTSDQutCw0YDRgtCw0YLQsCDigJMg0L7RgdGC0LDQstCwINCy0LggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC+0L/QuNGCLCDQv9GA0LXQtNC4INC00LAg0YLRgNGP0LHQstCwINC00LAg0YHQtSDRgdCy0YrRgNC20LXRgtC1INGBINC+0L/QtdGA0LDRgtC+0YDQsCDRgdC4LCDQt9CwINC00LAg0L7RgtC60LvRjtGH0LjRgtC1INGD0YHRgtGA0L7QudGB0YLQstC+0YLQvi4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiLQndC10L/RgNCw0LLQuNC70LXQvSDQn9CY0J0g0LrQvtC0INC30LAgU0lNINC60LDRgNGC0LDRgtCwIOKAkyDQvtGB0YLQsNCy0LDRgiDQstC4IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtC/0LjRgtCwLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNINC60LDRgNGC0LDRgtCwINC1INC90LXQuNC30L/QvtC70LfQstCw0LXQvNCwLiDQodCy0YrRgNC20LXRgtC1INGB0LUg0YEg0L7Qv9C10YDQsNGC0L7RgNCwINGB0LguIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLQndC10L/RgNCw0LLQuNC70LXQvSBQVUsg0LrQvtC0INC30LAgU0lNINC60LDRgNGC0LDRgtCwIOKAkyDQvtGB0YLQsNCy0LAg0LLQuCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L7Qv9C40YIsINC/0YDQtdC00LggU0lNINC60LDRgNGC0LDRgtCwINC00LAg0YHRgtCw0L3QtSDQvdC10LjQt9C/0L7Qu9C30LLQsNC10LzQsCDQt9Cw0LLQuNC90LDQs9C4LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+ItCd0LXQv9GA0LDQstC40LvQtdC9IFBVSyDQutC+0LQg0LfQsCBTSU0g0LrQsNGA0YLQsNGC0LAg4oCTINC+0YHRgtCw0LLQsNGCINCy0LggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC+0L/QuNGC0LAsINC/0YDQtdC00LggU0lNINC60LDRgNGC0LDRgtCwINC00LAg0YHRgtCw0L3QtSDQvdC10LjQt9C/0L7Qu9C30LLQsNC10LzQsCDQt9Cw0LLQuNC90LDQs9C4LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4i0J7Qv9C10YDQsNGG0LjRj9GC0LAg0YEg0J/QmNCdINC60L7QtNCwINC30LAgU0lNINC60LDRgNGC0LDRgtCwINC90LUg0LHQtSDRg9GB0L/QtdGI0L3QsCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+ItCe0L/QtdGA0LDRhtC40Y/RgtCwINGBIFBVSyDQutC+0LTQsCDQt9CwIFNJTSDQutCw0YDRgtCw0YLQsCDQvdC1INCx0LUg0YPRgdC/0LXRiNC90LAhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+ItCa0L7QtNGK0YIg0LUg0L/RgNC40LXRgiEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLQkdGD0YLQvtC9INC30LAg0L/RgNC10LTQuNGI0L3QuNGPINC30LDQv9C40YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLQkdGD0YLQvtC9INC30LAg0YHQu9C10LTQstCw0YnQuNGPINC30LDQv9C40YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i0JHRg9GC0L7QvSDQt9CwINC/0LDRg9C30LAiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAppbmRleCA0Zjk3YzZiLi44YjgxMDg2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkludHJvZHVlaXggZWwgY29kaSBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJJbnRyb2R1ZWl4IGVsIGNvZGkgUFVLIGkgZWwgY29kaSBQSU4gbm91Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDb2RpIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iQ29kaSBQSU4gbm91Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iRXNjcml1IGVsIFBVSyBkZSBsYSBTSU0gaSBlbCBjb2RpIFBJTiBub3UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDb2RpIFBVSyBkZSBsYSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IkNvZGkgUElOIGRlIGxhIFNJTSBub3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJUb2NhIHBlciBpbnRyb2R1aXIgY29udHJhc2VueWEiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJJbnRyb2R1ZWl4IGxhIGNvbnRyYXNlbnlhIHBlciBkZXNibG9xdWVqYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJJbnRyb2R1ZWl4IGxhIGNvbnRyYXNlbnlhIHBlciBkZXNibG9xdWVqYXIiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iQm90w7MgZGUgcGF1c2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkJvdMOzIGRlIHJlcHJvZHVjY2nDsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iQm90w7MgZGUgcGFyYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ik1cJ2FncmFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+Ik5vIG1cJ2FncmFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkNvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkRlc2Jsb3F1ZWphIHBlciBjb250aW51YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJTXCdoYSBjYW5jZWzCt2xhdCBsXCdpbmljaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJEZWl4YSBhbmFyIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHBlciBzdXByaW1pci1sby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iTm8gc2Ugc3VwcmltaXLDoCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkludHJvZHVlaXggZWwgY29kaSBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iQ29uZmlybWEgZWwgY29kaSBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNcJ2VzdMOgIGRlc2Jsb3F1ZWphbnQgbGEgdGFyZ2V0YSBTSU0uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJDb2RpIFBJTiBpbmNvcnJlY3RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IkVzY3JpdSB1biBQSU4gcXVlIHRpbmd1aSBkZSA0IGEgOCBuw7ptZXJvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJFbCBjb2RpIFBVSyBoYSBkZSB0ZW5pciA4IG7Dum1lcm9zIG8gbcOpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJUb3JuYSBhIGludHJvZHVpciBlbCBjb2RpIFBVSyBjb3JyZWN0ZS4gRWxzIGludGVudHMgcmVwZXRpdHMgZmFyYW4gcXVlIGVzIGRlc2FjdGl2aSBsYSBTSU0gZGUgbWFuZXJhIHBlcm1hbmVudC4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkhhcyBkaWJ1aXhhdCBlbCBwYXRyw7MgZGUgZGVzYmxvcXVlaWcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVnYWRlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gRGVzcHLDqXMgZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50cyBpbmNvcnJlY3RlcyBtw6lzLCBzZVwndCBkZW1hbmFyw6AgcXVlIGRlc2Jsb3F1ZWdpcyBlbCB0ZWzDqGZvbiBhbWIgdW4gY29tcHRlIGRlIGNvcnJldSBlbGVjdHLDsm5pYy5cblxuIFRvcm5hLWhvIGEgcHJvdmFyIGRcJ2FxdcOtIGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vnb25zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkVsaW1pbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkVsIGNvZGkgUElOIGRlIGxhIFNJTSBubyDDqXMgY29ycmVjdGUuIEhhcyBkZSBjb250YWN0YXIgYW1iIGxcJ29wZXJhZG9yIGRlIHRlbGVmb25pYSBtw7JiaWwgcGVyIGRlc2Jsb3F1ZWphciBlbCBkaXNwb3NpdGl1LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iRWwgY29kaSBQSU4gZGUgbGEgU0lNIG5vIMOpcyBjb3JyZWN0ZS4gRXQgcXVlZGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudDsgc2kgbm8gbFwnZW5jZXJ0ZXMsIGNvbnRhY3RhIGFtYiBsXCdvcGVyYWRvciBkZSB0ZWxlZm9uaWEgbcOyYmlsIHBlciBkZXNibG9xdWVqYXIgZWwgZGlzcG9zaXRpdS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJFbCBjb2RpIFBJTiBkZSBsYSBTSU0gbm8gw6lzIGNvcnJlY3RlLiBFdCBxdWVkZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudHMuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJMYSBTSU0gbm8gZXMgcG90IHV0aWxpdHphci4gQ29udGFjdGEgYW1iIGxcJ29wZXJhZG9yIGRlIHRlbGVmb25pYSBtw7JiaWwuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJFbCBjb2RpIFBVSyBkZSBsYSBTSU0gbm8gw6lzIGNvcnJlY3RlLiBFdCBxdWVkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50OyBzaSBubyBsXCdlbmNlcnRlcywgbGEgU0lNIG5vIGVzIHBvZHLDoCB0b3JuYXIgYSBmZXIgc2VydmlyLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkVsIGNvZGkgUFVLIGRlIGxhIFNJTSBubyDDqXMgY29ycmVjdGUuIEV0IHF1ZWRlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50czsgc2kgbm8gbFwnZW5jZXJ0ZXMsIGxhIFNJTSBubyBlcyBwb2Ryw6AgdG9ybmFyIGEgZmVyIHNlcnZpci4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IkhpIGhhIGhhZ3V0IHVuIHByb2JsZW1hIGVuIGxcJ29wZXJhY2nDsyBkZWwgUElOIGRlIGxhIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IkhpIGhhIGhhZ3V0IHVuIHByb2JsZW1hIGVuIGxcJ29wZXJhY2nDsyBkZWwgUFVLIGRlIGxhIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iU1wnaGEgYWNjZXB0YXQgZWwgY29kaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJCb3TDsyBkZSBwaXN0YSBhbnRlcmlvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IkJvdMOzIGRlIHBpc3RhIHNlZ8O8ZW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IkJvdMOzIGRlIHBhdXNhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKaW5kZXggZWMyODMzYy4uZTRlZDAyYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJaYWRlanRlIGvDs2QgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iWmFkZWp0ZSBrw7NkIFBVSyBhIG5vdsO9IGvDs2QgUElOLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iS8OzZCBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5vdsO9IGvDs2QgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iWmFkZWp0ZSBrw7NkIFBVSyBTSU0ga2FydHkgYSBub3bDvSBrw7NkIFBJTi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IkvDs2QgUFVLIFNJTSBrYXJ0eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTm92w70ga8OzZCBQSU4gU0lNIGthcnR5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iRG90eWtlbSB6YWTDoXRlIGhlc2xvIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iWmFkZWp0ZSBoZXNsbyBwcm8gb2RlbWtudXTDrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IlphZGVqdGUga8OzZCBQSU4gcHJvIG9kZW1rbnV0w60iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iVGxhxI3DrXRrbyBQb3phc3Rhdml0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJUbGHEjcOtdGtvIFDFmWVocsOhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iVGxhxI3DrXRrbyBaYXN0YXZpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJMw61iw60gc2UgbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJOZWzDrWLDrSBzZSBtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IlNyZMOtxI1rbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IlBva3JhxI11anRlIG9kZW1rbnV0w61tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iU3B1xaF0xJtuw60genJ1xaFlbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iVXZvbG7Em27DrW0gZG90eWt1IHdpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB2eW1hxb5ldGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+IldpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBuZWJ1ZGUgdnltYXrDoW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBbHQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJaYWRlanRlIHBvxb5hZG92YW7DvSBrw7NkIFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iUG90dnLEj3RlIHBvxb5hZG92YW7DvSBrw7NkIFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ik9kYmxva292w6Fuw60gU0lNIGthcnR5Li4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iTmVzcHLDoXZuw70ga8OzZCBQSU4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iWmFkZWp0ZSBrw7NkIFBJTiBvIGTDqWxjZSA04oCTOCDEjcOtc2xpYy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJNaW5pbcOhbG7DrSBkw6lsa2Ega8OzZHUgUFVLIGplIDggxI3DrXNsaWMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iWm5vdnUgemFkZWp0ZSBzcHLDoXZuw70ga8OzZCBQVUsuIE9wYWtvdmFuw71taSBwb2t1c3kgU0lNIGthcnR1IHRydmFsZSBkZWFrdGl2dWpldGUuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJKacW+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+a3LDoXQganN0ZSBuZXNwcsOhdm7EmyBuYWtyZXNsaWxpIHN2w6kgaGVzbG8gb2RlbWtudXTDrS4gUG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZGFsxaHDrWNoIG5lw7pzcMSbxaFuw71jaCBwb2t1c2VjaCBidWRldGUgcG/FvsOhZMOhbmkgbyBvZGVtxI1lbsOtIHRlbGVmb251IHBvbW9jw60gZS1tYWlsb3bDqWhvIMO6xI10dS5cblxuIFprdXN0ZSB0byB6bm92dSB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAkyAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+Ik9kZWJyYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlphZGFsaSBqc3RlIG5lc3Byw6F2bsO9IGvDs2QgUElOIFNJTSBrYXJ0eS4gTnluw60gbXVzw610ZSB6YSDDusSNZWxlbSBvZGVta251dMOtIHphxZnDrXplbsOtIGtvbnRha3RvdmF0IHN2w6lobyBvcGVyw6F0b3JhLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iWmFkYWxpIGpzdGUgbmVzcHLDoXZuw70ga8OzZCBQSU4gU0lNIGthcnR5LiBNw6F0ZSBqZcWhdMSbIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb2t1cywgcG90w6kgYnVkZXRlIG11c2V0IG8gb2RlbWtudXTDrSB6YcWZw616ZW7DrSBwb8W+w6FkYXQgc3bDqWhvIG9wZXLDoXRvcmEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iWmFkYWxpIGpzdGUgbmVzcHLDoXZuw70ga8OzZCBQSU4gU0lNIGthcnR5LiBQb8SNZXQgemLDvXZhasOtY8OtY2ggcG9rdXPFrzogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNIGthcnR1IG5lbHplIHBvdcW+w610LiBLb250YWt0dWp0ZSBvcGVyw6F0b3JhLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iTmVzcHLDoXZuw70ga8OzZCBQVUsgU0lNIGthcnR5LiBNw6F0ZSBqZcWhdMSbIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb2t1cywgcG90w6kgYnVkZSBTSU0ga2FydGEgbmF0cnZhbG8gemFibG9rb3bDoW5hLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IlphZGFsaSBqc3RlIG5lc3Byw6F2bsO9IGvDs2QgUFVLIFNJTSBrYXJ0eS4gUG/EjWV0IHpiw712YWrDrWPDrWNoIHBva3Vzxa8sIHBvIGt0ZXLDvWNoIGJ1ZGUgU0lNIGthcnRhIG5hdHJ2YWxvIHphYmxva292w6FuYTogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iT3BlcmFjZSBwb21vY8OtIGvDs2R1IFBJTiBTSU0ga2FydHkgc2UgbmV6ZGHFmWlsYSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+Ik9wZXJhY2UgcG9tb2PDrSBrw7NkdSBQVUsgU0lNIGthcnR5IHNlIG5lemRhxZlpbGEhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkvDs2QgYnlsIHDFmWlqYXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iVGxhxI3DrXRrbyBQxZllZGNob3rDrSBzdG9wYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IlRsYcSNw610a28gRGFsxaHDrSBzdG9wYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJUbGHEjcOtdGtvIFBvemFzdGF2aXQiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAppbmRleCBjZmM3NDY0Li5mOGYwYTZmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkluZHRhc3QgcGlua29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IkluZHRhc3QgUFVLLSBvZyBwaW5rb2RlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsta29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTnkgcGlua29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IkluZHRhc3QgUFVLLWtvZGVuIHRpbCBTSU0ta29ydGV0IG9nIGRlbiBueWUgcGlua29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iUFVLLWtvZGUgdGlsIFNJTS1rb3J0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJOeSBwaW5rb2RlIHRpbCBTSU0ta29ydGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iVHJ5ayBmb3IgYXQgYW5naXZlIGFkZ2FuZ3Nrb2RlIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iSW5kdGFzdCBhZGdhbmdza29kZW4gZm9yIGF0IGzDpXNlIG9wIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iSW5kdGFzdCBwaW5rb2RlIGZvciBhdCBsw6VzZSBvcCI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJQYXVzZS1rbmFwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJBZnNwaWwta25hcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iU3RvcC1rbmFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlN5bmVzIG9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iU3luZXMgaWtrZSBvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkhqZXJ0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkzDpXMgb3AgZm9yIGF0IGfDpSB2aWRlcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJTdGFydGVuIGJsZXYgYW5udWxsZXJldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJTbGlwIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IGZvciBhdCBzbGV0dGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHNsZXR0ZXMgaWtrZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkluZHRhc3QgZGVuIMO4bnNrZWRlIHBpbmtvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iQmVrcsOmZnQgZGVuIMO4bnNrZWRlIHBpbmtvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTS1rb3J0ZXQgbMOlc2VzIG9w4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iRm9ya2VydCBwaW5rb2RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IkluZHRhc3QgZW4gcGlua29kZSBww6UgbWVsbGVtIDQgb2cgOCB0YWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLLWtvZGVuIHNrYWwgdsOmcmUgcMOlIDggdGFsIGVsbGVyIG1lcmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iSW5kdGFzdCBkZW4ga29ycmVrdGUgUFVLLWtvZGUuIEdlbnRhZ25lIGZvcnPDuGcgdmlsIHBlcm1hbmVudCBkZWFrdGl2ZXJlIFNJTS1rb3J0ZXQuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJEdSBoYXIgdGVnbmV0IGRpdCBvcGzDpXNuaW5nc23DuG5zdGVyIGZvcmtlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2UuIEVmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHlkZXJsaWdlcmUgbWlzbHlra2VkZSBmb3Jzw7hnIHRpbCB2aWwgZHUgYmxpdmUgYmVkdCBvbSBhdCBsw6VzZSBkaW4gdGVsZWZvbiBvcCB2ZWQgaGrDpmxwIGFmIGVuIGUtbWFpbGtvbnRvLlxuXG4gUHLDuHYgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJGamVybiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iRm9ya2VydCBwaW5rb2RlIHRpbCBTSU0ta29ydC4gRHUgc2thbCBudSBrb250YWt0ZSBkaXQgbW9iaWxzZWxza2FiIGZvciBhdCBsw6VzZSBkaW4gZW5oZWQgb3AuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJGb3JrZXJ0IHBpbmtvZGUgdGlsIFNJTS1rb3J0LiBEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZvcnPDuGcgdGlsYmFnZSwgZsO4ciBkdSBza2FsIGtvbnRha3RlIGRpdCBtb2JpbHNlbHNrYWIgZm9yIGF0IGzDpXNlIGRpbiBlbmhlZCBvcC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJGb3JrZXJ0IHBpbmtvZGUgdGlsIFNJTS1rb3J0LiBEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZvcnPDuGcgdGlsYmFnZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTS1rb3J0ZXQgZXIgdWJydWdlbGlndC4gS29udGFrdCBkaXQgbW9iaWxzZWxza2FiLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iRm9ya2VydCBQVUsta29kZSB0aWwgU0lNLWtvcnQuIER1IGhhciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZm9yc8O4ZyB0aWxiYWdlLCBmw7hyIFNJTS1rb3J0ZXQgYmxpdmVyIHBlcm1hbmVudCB1YnJ1Z2VsaWd0LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkZvcmtlcnQgUFVLLWtvZGUgdGlsIFNJTS1rb3J0LiBEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZvcnPDuGcgdGlsYmFnZSwgZsO4ciBkaXQgU0lNLWtvcnQgYmxpdmVyIHBlcm1hbmVudCB1YnJ1Z2VsaWd0LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iUGlua29kZW4gdGlsIFNJTS1rb3J0ZXQgYmxldiBhZnZpc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJQVUsta29kZW4gdGlsIFNJTS1rb3J0ZXQgYmxldiBhZnZpc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IktvZGVuIGJsZXYgYWNjZXB0ZXJldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJLbmFwIHRpbCBmb3JyaWdlIG51bW1lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IktuYXAgdGlsIG7DpnN0ZSBudW1tZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iUGF1c2Uta25hcCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCmluZGV4IDg1ZDFhNGY5Li40ZWNlNmQ5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTi1Db2RlIGVpbmdlYmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIHVuZCBuZXVlbiBQSU4tQ29kZSBlaW5nZWJlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLUNvZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5ldWVyIFBJTi1Db2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iR2ViZW4gU2llIGRlbiBQVUstQ29kZSBkZXIgU0lNLUthcnRlIHVuZCBkZW4gbmV1ZW4gUElOLUNvZGUgZWluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iUFVLLUNvZGUgZGVyIFNJTS1LYXJ0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTmV1ZXIgUElOLUNvZGUgZGVyIFNJTS1LYXJ0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+Ilp1ciBQYXNzd29ydGVpbmdhYmUgYmVyw7xocmVuIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iUGFzc3dvcnQgenVtIEVudHNwZXJyZW4gZWluZ2ViZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJQSU4genVtIEVudHNwZXJyZW4gZWluZ2ViZW4iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iU2NoYWx0ZmzDpGNoZSBmw7xyIFBhdXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJTY2hhbHRmbMOkY2hlIGbDvHIgV2llZGVyZ2FiZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iU2NoYWx0ZmzDpGNoZSBmw7xyIFN0b3BwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ik1hZyBpY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJNYWcgaWNoIG5pY2h0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iSGVyeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+Ilp1bSBGb3J0ZmFocmVuIGVudHNwZXJyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJTdGFydCBhYmdlYnJvY2hlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJMZWdlbiBTaWUgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4genVtIEzDtnNjaGVuIGFiLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB3aXJkIG5pY2h0IGdlbMO2c2NodC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+Ikdld8O8bnNjaHRlbiBQSU4tQ29kZSBlaW5nZWJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJHZXfDvG5zY2h0ZW4gUElOLUNvZGUgYmVzdMOkdGlnZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTS1LYXJ0ZSB3aXJkIGVudHNwZXJydOKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkZhbHNjaGVyIFBJTi1Db2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iR2ViZW4gU2llIGVpbmUgNC0gYmlzIDgtc3RlbGxpZ2UgUElOIGVpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJEZXIgUFVLLUNvZGUgbXVzcyBtaW5kZXN0ZW5zIDggWmlmZmVybiBiZXRyYWdlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJHZWJlbiBTaWUgZGVuIHJpY2h0aWdlbiBQVUstQ29kZSBlaW4uIEJlaSB3aWVkZXJob2x0ZW4gVmVyc3VjaGVuIHdpcmQgZGllIFNJTS1LYXJ0ZSBkYXVlcmhhZnQgZGVha3RpdmllcnQuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJTaWUgaGFiZW4gSWhyIEVudHNwZXJydW5nc211c3RlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1tYWwgZmFsc2NoIGdlemVpY2huZXQuIE5hY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdlcmRlbiBTaWUgYXVmZ2Vmb3JkZXJ0LCBJaHIgVGVsZWZvbiBtaXRoaWxmZSBlaW5lcyBFLU1haWwtS29udG9zIHp1IGVudHNwZXJyZW4uXG5cbiBWZXJzdWNoZW4gU2llIGVzIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IFNla3VuZGVuIGVybmV1dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJFbnRmZXJuZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkZhbHNjaGVyIFBJTi1Db2RlIGRlciBTSU0tS2FydGUuIEJpdHRlIHdlbmRlbiBTaWUgc2ljaCBhbiBJaHJlbiBNb2JpbGZ1bmthbmJpZXRlciwgZGFtaXQgZXIgSWhyIEdlcsOkdCBlbnRzcGVycnQuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJGYWxzY2hlciBQSU4tQ29kZSBkZXIgU0lNLUthcnRlLiBTaWUgaGFiZW4gbm9jaCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gVmVyc3VjaCwgYmV2b3IgU2llIGRhcyBHZXLDpHQgdm9uIElocmVtIE1vYmlsZnVua2FuYmlldGVyIGVudHNwZXJyZW4gbGFzc2VuIG3DvHNzZW4uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iRmFsc2NoZXIgUElOLUNvZGUgZGVyIFNJTS1LYXJ0ZS4gU2llIGhhYmVuIG5vY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IFZlcnN1Y2hlLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iRGllIFNJTS1LYXJ0ZSBrYW5uIG5pY2h0IHZlcndlbmRldCB3ZXJkZW4uIEJpdHRlIHdlbmRlbiBTaWUgc2ljaCBhbiBJaHJlbiBNb2JpbGZ1bmthbmJpZXRlci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkZhbHNjaGVyIFBVSy1Db2RlIGRlciBTSU0tS2FydGUuIFNpZSBoYWJlbiBub2NoIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBWZXJzdWNoLCBiZXZvciBJaHJlIFNJTS1LYXJ0ZSBlbmRnw7xsdGlnIGdlc3BlcnJ0IHdpcmQuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iRmFsc2NoZXIgUFVLLUNvZGUgZGVyIFNJTS1LYXJ0ZS4gU2llIGhhYmVuIG5vY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IFZlcnN1Y2hlLCBiZXZvciBJaHJlIFNJTS1LYXJ0ZSBlbmRnw7xsdGlnIGdlc3BlcnJ0IHdpcmQuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJGZWhsZXIgYmVpbSBFbnRzcGVycmVuIG1pdCBkZXIgUElOIGRlciBTSU0tS2FydGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IkZlaGxlciBiZWltIEVudHNwZXJyZW4gbWl0aGlsZmUgZGVzIFBVSy1Db2RlcyBkZXIgU0lNLUthcnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkNvZGUgYWt6ZXB0aWVydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IlNjaGFsdGZsw6RjaGUgZsO8ciB2b3JoZXJpZ2VuIFRpdGVsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iU2NoYWx0ZmzDpGNoZSBmw7xyIG7DpGNoc3RlbiBUaXRlbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJTY2hhbHRmbMOkY2hlIGbDvHIgUGF1c2UiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAppbmRleCBlODZmMjRkLi5iZTA3ZGNkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+Is6gzrvOt866z4TPgc6/zrvOv86zzq7Pg8+EzrUgz4TOv869IM66z4nOtM65zrrPjCDOsc+BzrnOuM68z4wgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4izqDOu863zrrPhM+Bzr/Ou86/zrPOrs+Dz4TOtSDPhM6/zr0gzrrPic60zrnOus+MIFBVSyDOus6xzrkgz4TOv869IM69zq3OvyDOus+JzrTOuc66z4wgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLOms+JzrTOuc66z4zPgiBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Is6dzq3Ov8+CIM66z4nOtM65zrrPjM+CIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+Is6gzrvOt866z4TPgc6/zrvOv86zzq7Pg8+EzrUgz4TOv869IM66z4nOtM65zrrPjCBQVUsgz4TOt8+CIM66zqzPgc+EzrHPgiBTSU0gzrrOsc65IM+Ezr/OvSDOvc6tzr8gzrrPic60zrnOus+MIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4izprPic60zrnOus+Mz4IgUFVLIM66zqzPgc+EzrHPgiBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Is6dzq3Ov8+CIM66z47OtM65zrrOsc+CIM6xz4HOuc64zrzOv8+NIFBJTiDPhM63z4IgzrrOrM+Bz4TOsc+CIFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+Is6RzrPOs86vzr7PhM61IM6zzrnOsSDOtc65z4POsc6zLiDOus+JzrQuIM+Az4HPjM+DzrIuIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4izqDOu863zrrPhM+Bzr/Ou86/zrPOrs+Dz4TOtSDPhM6/zr0gzrrPic60zrnOus+MIM+Az4HPjM+DzrLOsc+DzrfPgiDOs865zrEgzr7Otc66zrvOtc6vzrTPic68zrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLOoM67zrfOus+Ez4HOv867zr/Os86uz4PPhM61IM+Ezr/OvSDOsc+BzrnOuM68z4wgUElOIM6zzrnOsSDOvs61zrrOu861zq/OtM+JzrzOsSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLOms6/z4XOvM+Azq8gz4DOsc+Nz4POt8+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLOms6/z4XOvM+Azq8gzrHOvc6xz4DOsc+BzrHOs8+JzrPOrs+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLOms6/z4XOvM+Azq8gzrTOuc6xzrrOv8+Azq7PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLOlc+AzrnOtM6/zrrOuc68zrHPg86vzrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLOkc+Azr/OtM6/zrrOuc68zrHPg86vzrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLOms6xz4HOtM65zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLOns61zrrOu861zrnOtM+Oz4PPhM61IM6zzrnOsSDOvc6xIM+Dz4XOvc61z4fOr8+DzrXPhM61Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4izpcgzrXOus66zq/Ovc63z4POtyDOsc66z4XPgc+OzrjOt866zrUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4izpHPgM6/zrjOrc+Dz4TOtSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDOs865zrEgzrTOuc6xzrPPgc6xz4bOri4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gzrTOtc69IM64zrEgzrTOuc6xzrPPgc6xz4bOtc6vLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+Is6RzpLOkyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4izpXOuc+DzrHOs86szrPOtc+EzrUgz4TOv869IM6xz4DOsc65z4TOv8+NzrzOtc69zr8gzrrPic60zrnOus+MIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLOlc+AzrnOss61zrLOsc65z47Pg8+EzrUgz4TOv869IM6xz4DOsc65z4TOv8+NzrzOtc69zr8gzrrPic60zrnOus+MIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4izp7Otc66zrvOtc6vzrTPic68zrEgzrrOrM+Bz4TOsc+CIFNJTS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Is6Vz4PPhs6xzrvOvM6tzr3Ov8+CIM66z4nOtM65zrrPjM+CIFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLOoM67zrfOus+Ez4HOv867zr/Os86uz4PPhM61IM6tzr3Osc69IM6xz4HOuc64zrzPjCBQSU4gz4DOv8+FIM69zrEgzrHPgM6/z4TOtc67zrXOr8+EzrHOuSDOsc+Az4wgNCDOrc+Jz4IgOCDOsc+BzrnOuM68zr/Pjc+CLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+Is6fIM66z4nOtM65zrrPjM+CIFBVSyDOuM6xIM+Az4HOrc+AzrXOuSDOvc6xIM+AzrXPgc65zq3Ph861zrkgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSA4IM6xz4HOuc64zrzOv8+Nz4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4izpXOuc+DzrHOs86szrPOtc+EzrUgzr7Osc69zqwgz4TOv869IM66z4nOtM65zrrPjCBQVUsuIM6fzrkgzrXPgM6xzr3Osc67zrHOvM6yzrHOvc+MzrzOtc69zrXPgiDPgM+Bzr/Pg8+AzqzOuM61zrnOtc+CIM64zrEgzrHPgM61zr3Otc+BzrPOv8+Azr/Ouc6uz4POv8+Fzr0gzr/Pgc65z4PPhM65zrrOrCDPhM63zr0gzrrOrM+Bz4TOsSBTSU0uIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLOo8+HzrXOtM65zqzPg86xz4TOtSDPhM6/IM68zr/PhM6vzrLOvyDOvs61zrrOu861zrnOtM+OzrzOsc+Ezr/PgiDOtc+Dz4bOsc67zrzOrc69zrEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gz4bOv8+Bzq3Pgi4gzpzOtc+EzqwgzrHPgM+MIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IM6xzr3Otc+AzrnPhM+Fz4fOtc6vz4Igz4DPgc6/z4PPgM6szrjOtc65zrXPgiDOsc66z4zOvM63LCDOuM6xIM+DzrHPgiDOts63z4TOt864zrXOryDOvc6xIM6+zrXOus67zrXOuc60z47Pg861z4TOtSDPhM6/IM+EzrfOu86tz4bPic69z4wgz4POsc+CIM68zrUgz4TOtyDPh8+Bzq7Pg863IM61zr3PjM+CIM67zr/Os86xz4HOuc6xz4POvM6/z40gzrfOu861zrrPhM+Bzr/Ovc65zrrOv8+NIM+EzrHPh8+FzrTPgc6/zrzOtc6vzr/PhS5cblxuIM6Uzr/Ous65zrzOrM+Dz4TOtSDOvs6xzr3OrCDPg861IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLOms6xz4TOrM+BzrPOt8+DzrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Is6Vz4PPhs6xzrvOvM6tzr3Ov8+CIM66z4nOtM65zrrPjM+CIFBJTiDOus6sz4HPhM6xz4IgU0lNLiDOmM6xIM+Az4HOrc+AzrXOuSDOvc6xIM61z4DOuc66zr/Ouc69z4nOvc6uz4POtc+EzrUgzrzOtSDPhM6/zr0gz4DOrM+Bzr/Ph86/IM66zrnOvc63z4TOrs+CIM+EzrfOu861z4bPic69zq/Osc+CIM+DzrHPgiDOs865zrEgzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOtyDPg8+Fz4POus61z4XOriDPg86xz4IuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiLOlc+Dz4bOsc67zrzOrc69zr/PgiDOus+JzrTOuc66z4zPgiBQSU4gzrrOrM+Bz4TOsc+CIFNJTS4gzpHPgM6/zrzOrc69zrXOuSDOrM67zrvOtyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gz4DPgc6/z4PPgM6szrjOtc65zrEuIM6jz4TOtyDPg8+Fzr3Orc+HzrXOuc6xLCDOuM6xIM+Az4HOrc+AzrXOuSDOvc6xIM61z4DOuc66zr/Ouc69z4nOvc6uz4POtc+EzrUgzrzOtSDPhM6/zr0gz4DOrM+Bzr/Ph86/IM66zrnOvc63z4TOrs+CIM+EzrfOu861z4bPic69zq/Osc+CIM+DzrHPgiDOs865zrEgzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOtyDPg8+Fz4POus61z4XOriDPg86xz4IuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4izpXPg8+GzrHOu868zq3Ovc6/z4IgzrrPic60zrnOus+Mz4IgUElOIM66zqzPgc+EzrHPgiBTSU0uIM6Rz4DOv868zq3Ovc6/z4XOvSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gz4DPgc6/z4PPgM6szrjOtc65zrXPgi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+Is6XIM66zqzPgc+EzrEgU0lNIM60zrXOvSDOvM+Azr/Pgc61zq8gzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc63zrjOtc6vLiDOlc+AzrnOus6/zrnOvc+Jzr3Ors+Dz4TOtSDOvM61IM+Ezr/OvSDPgM6sz4HOv8+Hzr8gzrrOuc69zrfPhM6uz4Igz4TOt867zrXPhs+Jzr3Or86xz4Igz4POsc+CLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4izpXPg8+GzrHOu868zq3Ovc6/z4IgzrrPic60zrnOus+Mz4IgUFVLIM66zqzPgc+EzrHPgiBTSU0uIM6Rz4DOv868zq3Ovc61zrkgzqzOu867zrcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IM+Az4HOv8+Dz4DOrM64zrXOuc6xIM+Az4HOv8+Ezr/PjSDOtM61zr0gzrXOr869zrHOuSDPgM67zq3Ov869IM60z4XOvc6xz4TOriDOtyDPh8+Bzq7Pg863IM+EzrfPgiDOus6sz4HPhM6xz4IgU0lNLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+Is6Vz4PPhs6xzrvOvM6tzr3Ov8+CIM66z4nOtM65zrrPjM+CIFBVSyDOus6sz4HPhM6xz4IgU0lNLiDOkc+Azr/OvM6tzr3Ov8+Fzr0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IM+Az4HOv8+Dz4DOrM64zrXOuc61z4Igz4DPgc6/z4TOv8+NIM60zrXOvSDOtc6vzr3Osc65IM+AzrvOrc6/zr0gzrTPhc69zrHPhM6uIM63IM+Hz4HOrs+Dzrcgz4TOt8+CIM66zqzPgc+EzrHPgiBTSU0uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiLOkc+Azr/PhM+Fz4fOr86xIM67zrXOuc+Ezr/Phc+BzrPOr86xz4IgzrrPic60zrnOus6/z40gUElOIM66zqzPgc+EzrHPgiBTSU0hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiLOkc+Azr/PhM+Fz4fOr86xIM67zrXOuc+Ezr/Phc+BzrPOr86xz4IgzrrPic60zrnOus6/z40gUFVLIM66zqzPgc+EzrHPgiBTSU0hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+Is6Rz4DOv860zrXOus+Ez4zPgiDOus+JzrTOuc66z4zPgiEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLOms6/z4XOvM+Azq8gz4DPgc6/zrfOs86/z43OvM61zr3Ov8+FIM66zr/OvM68zrHPhM65zr/PjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Is6azr/Phc68z4DOryDOtc+Az4zOvM61zr3Ov8+FIM66zr/OvM68zrHPhM65zr/PjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLOms6/z4XOvM+Azq8gz4DOsc+Nz4POt8+CIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAppbmRleCA5NjdjM2ZhLi5mMGQ4MWI4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iVHlwZSBQSU4gY29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlR5cGUgUFVLIGFuZCBuZXcgUElOIGNvZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyBjb2RlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJOZXcgUElOIENvZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJUeXBlIFNJTSBQVUsgYW5kIG5ldyBQSU4gY29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iU0lNIFBVSyBjb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJOZXcgU0lNIFBJTiBjb2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iVG91Y2ggdG8gdHlwZSBwYXNzd29yZCI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IlR5cGUgcGFzc3dvcmQgdG8gdW5sb2NrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iVHlwZSBQSU4gdG8gdW5sb2NrIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IlBhdXNlIGJ1dHRvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iUGxheSBidXR0b24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IlN0b3AgYnV0dG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlRodW1icyB1cCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IlRodW1icyBkb3duIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iSGVhcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJVbmxvY2sgdG8gY29udGludWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJMYXVuY2ggY2FuY2VsbGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IkRyb3AgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gdG8gZGVsZXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB3aWxsIG5vdCBiZSBkZWxldGVkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iRW50ZXIgZGVzaXJlZCBQSU4gY29kZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtIGRlc2lyZWQgUElOIGNvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlVubG9ja2luZyBTSU0gY2FyZOKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkluY29ycmVjdCBQSU4gY29kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJUeXBlIGEgUElOIHRoYXQgaXMgNCB0byA4IG51bWJlcnMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIGNvZGUgc2hvdWxkIGJlIDggbnVtYmVycyBvciBtb3JlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlJlLWVudGVyIHRoZSBjb3JyZWN0IFBVSyBjb2RlLiBSZXBlYXRlZCBhdHRlbXB0cyB3aWxsIHBlcm1hbmVudGx5IGRpc2FibGUgdGhlIFNJTS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB5b3Ugd2lsbCBiZSBhc2tlZCB0byB1bmxvY2sgeW91ciBwaG9uZSB1c2luZyBhbiBlbWFpbCBhY2NvdW50LlxuXG4gVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iUmVtb3ZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJJbmNvcnJlY3QgU0lNIFBJTiBjb2RlOyB5b3UgbXVzdCBub3cgY29udGFjdCB5b3VyIG9wZXJhdG9yIHRvIHVubG9jayB5b3VyIGRldmljZS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IkluY29ycmVjdCBTSU0gUElOIGNvZGU7IHlvdSBoYXZlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiByZW1haW5pbmcgYXR0ZW1wdC9zIGJlZm9yZSB5b3UgbXVzdCBjb250YWN0IHlvdXIgY2FycmllciB0byB1bmxvY2sgeW91ciBkZXZpY2UuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iSW5jb3JyZWN0IFNJTSBQSU4gY29kZTsgeW91IGhhdmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlbWFpbmluZyBhdHRlbXB0L3MuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0gaXMgdW51c2FibGUuIENvbnRhY3QgeW91ciBvcGVyYXRvci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkluY29ycmVjdCBTSU0gUFVLIGNvZGU7IHlvdSBoYXZlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiByZW1haW5pbmcgYXR0ZW1wdC9zIGJlZm9yZSBTSU0gYmVjb21lcyBwZXJtYW5lbnRseSB1bnVzYWJsZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJJbmNvcnJlY3QgU0lNIFBVSyBjb2RlOyB5b3UgaGF2ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcmVtYWluaW5nIGF0dGVtcHQvcyBiZWZvcmUgU0lNIGJlY29tZXMgcGVybWFuZW50bHkgdW51c2FibGUuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJTSU0gUElOIG9wZXJhdGlvbiBmYWlsZWQhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJTSU0gUFVLIG9wZXJhdGlvbiBmYWlsZWQhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkNvZGUgYWNjZXB0ZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJQcmV2aW91cyB0cmFjayBidXR0b24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJOZXh0IHRyYWNrIGJ1dHRvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJQYXVzZSBidXR0b24iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZDgxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJUeXBlIFBJTiBjb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iVHlwZSBTSU0gUFVLIGFuZCBuZXcgUElOIGNvZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSBQVUsgY29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTmV3IFNJTSBQSU4gY29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IlRvdWNoIHRvIHR5cGUgcGFzc3dvcmQiPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJUeXBlIHBhc3N3b3JkIHRvIHVubG9jayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IlR5cGUgUElOIHRvIHVubG9jayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IkluY29ycmVjdCBQSU4gY29kZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iVG8gdW5sb2NrLCBwcmVzcyBNZW51LCB0aGVuIDAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+Ik1heGltdW0gRmFjZSBVbmxvY2sgYXR0ZW1wdHMgZXhjZWVkZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IkNoYXJnZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IkNoYXJnaW5nLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4iQ29ubmVjdCB5b3VyIGNoYXJnZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiJQcmVzcyBNZW51IHRvIHVubG9jay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+Ik5ldHdvcmsgbG9ja2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+Ik5vIFNJTSBjYXJkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+Ik5vIFNJTSBjYXJkIGluIHRhYmxldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+Ik5vIFNJTSBjYXJkIGluIHBob25lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJJbnNlcnQgYSBTSU0gY2FyZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJUaGUgU0lNIGNhcmQgaXMgbWlzc2luZyBvciBub3QgcmVhZGFibGUuIEluc2VydCBhIFNJTSBjYXJkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiJVbnVzYWJsZSBTSU0gY2FyZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJZb3VyIFNJTSBjYXJkIGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLlxuIENvbnRhY3QgeW91ciB3aXJlbGVzcyBzZXJ2aWNlIHByb3ZpZGVyIGZvciBhbm90aGVyIFNJTSBjYXJkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJTSU0gY2FyZCBpcyBsb2NrZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTSU0gY2FyZCBpcyBQVUstbG9ja2VkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4iVW5sb2NraW5nIFNJTSBjYXJk4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBXaWRnZXQgJTIkZCBvZiAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiJBZGQgd2lkZ2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiJFbXB0eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4iVW5sb2NrIGFyZWEgZXhwYW5kZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4iVW5sb2NrIGFyZWEgY29sbGFwc2VkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHdpZGdldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4iVXNlciBzZWxlY3RvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IlN0YXR1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IkNhbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJNZWRpYSBjb250cm9scyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4iV2lkZ2V0IHJlb3JkZXJpbmcgc3RhcnRlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiJXaWRnZXQgcmVvcmRlcmluZyBlbmRlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IldpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBkZWxldGVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IkV4cGFuZCB1bmxvY2sgYXJlYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiJTbGlkZSB1bmxvY2suIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiJQYXR0ZXJuIHVubG9jay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IkZhY2UgdW5sb2NrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQaW4gdW5sb2NrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IlBhc3N3b3JkIHVubG9jay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJQYXR0ZXJuIGFyZWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IlNsaWRlIGFyZWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiJQcmV2aW91cyB0cmFjayBidXR0b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+Ik5leHQgdHJhY2sgYnV0dG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iUGF1c2UgYnV0dG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJQbGF5IGJ1dHRvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iU3RvcCBidXR0b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iVGh1bWJzIHVwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iVGh1bWJzIGRvd24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJIZWFydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IlVubG9jayB0byBjb250aW51ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkxhdW5jaCBjYW5jZWxsZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iRHJvcCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB0byBkZWxldGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHdpbGwgbm90IGJlIGRlbGV0ZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IkNhbmNlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiJEZWxldGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IkRvbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiJNb2RlIGNoYW5nZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IlVubG9jayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJDYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2lsZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlNvdW5kIG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTZWFyY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iU2xpZGUgdXAgZm9yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJTbGlkZSBkb3duIGZvciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iU2xpZGUgbGVmdCBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJTbGlkZSByaWdodCBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4iQ3VycmVudCB1c2VyIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IkVtZXJnZW5jeSBjYWxsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iRm9yZ290IFBhdHRlcm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+Ildyb25nIFBhdHRlcm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiJXcm9uZyBQYXNzd29yZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJXcm9uZyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+IlRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IkRyYXcgeW91ciBwYXR0ZXJuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iRW50ZXIgU0lNIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iRW50ZXIgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IkVudGVyIFBhc3N3b3JkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNIGlzIG5vdyBkaXNhYmxlZC4gRW50ZXIgUFVLIGNvZGUgdG8gY29udGludWUuIENvbnRhY3QgY2FycmllciBmb3IgZGV0YWlscy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iRW50ZXIgZGVzaXJlZCBQSU4gY29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtIGRlc2lyZWQgUElOIGNvZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlVubG9ja2luZyBTSU0gY2FyZOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlR5cGUgYSBQSU4gdGhhdCBpcyA0IHRvIDggbnVtYmVycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsgY29kZSBzaG91bGQgYmUgOCBudW1iZXJzIG9yIG1vcmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUmUtZW50ZXIgdGhlIGNvcnJlY3QgUFVLIGNvZGUuIFJlcGVhdGVkIGF0dGVtcHRzIHdpbGwgcGVybWFuZW50bHkgZGlzYWJsZSB0aGUgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4gY29kZXMgZG8gbm90IG1hdGNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iVG9vIG1hbnkgcGF0dGVybiBhdHRlbXB0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJUbyB1bmxvY2ssIHNpZ24gaW4gd2l0aCB5b3VyIEdvb2dsZSBhY2NvdW50LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4iVXNlcm5hbWUgKGVtYWlsKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4iUGFzc3dvcmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IlNpZ24gaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IkludmFsaWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IkZvcmdvdCB5b3VyIHVzZXJuYW1lIG9yIHBhc3N3b3JkP1xuVmlzaXQgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IkNoZWNraW5nIGFjY291bnTigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IllvdSBoYXZlIGluY29ycmVjdGx5IHR5cGVkIHlvdXIgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBcblxuVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IllvdSBoYXZlIGluY29ycmVjdGx5IHR5cGVkIHlvdXIgcGFzc3dvcmQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgZHJhd24geW91ciB1bmxvY2sgcGF0dGVybiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gXG5cblRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoZSB0YWJsZXQgd2lsbCBiZSByZXNldCB0byBmYWN0b3J5IGRlZmF1bHQgYW5kIGFsbCB1c2VyIGRhdGEgd2lsbCBiZSBsb3N0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoZSBwaG9uZSB3aWxsIGJlIHJlc2V0IHRvIGZhY3RvcnkgZGVmYXVsdCBhbmQgYWxsIHVzZXIgZGF0YSB3aWxsIGJlIGxvc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBUaGUgdGFibGV0IHdpbGwgbm93IGJlIHJlc2V0IHRvIGZhY3RvcnkgZGVmYXVsdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGltZXMuIFRoZSBwaG9uZSB3aWxsIG5vdyBiZSByZXNldCB0byBmYWN0b3J5IGRlZmF1bHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB5b3Ugd2lsbCBiZSBhc2tlZCB0byB1bmxvY2sgeW91ciB0YWJsZXQgdXNpbmcgYW4gZW1haWwgYWNjb3VudC5cblxuIFRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgZHJhd24geW91ciB1bmxvY2sgcGF0dGVybiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHlvdSB3aWxsIGJlIGFza2VkIHRvIHVubG9jayB5b3VyIHBob25lIHVzaW5nIGFuIGVtYWlsIGFjY291bnQuXG5cbiBUcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJSZW1vdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkluY29ycmVjdCBTSU0gUElOIGNvZGU7IHlvdSBtdXN0IG5vdyBjb250YWN0IHlvdXIgb3BlcmF0b3IgdG8gdW5sb2NrIHlvdXIgZGV2aWNlLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iSW5jb3JyZWN0IFNJTSBQSU4gY29kZTsgeW91IGhhdmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlbWFpbmluZyBhdHRlbXB0L3MgYmVmb3JlIHlvdSBtdXN0IGNvbnRhY3QgeW91ciBjYXJyaWVyIHRvIHVubG9jayB5b3VyIGRldmljZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJJbmNvcnJlY3QgU0lNIFBJTiBjb2RlOyB5b3UgaGF2ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcmVtYWluaW5nIGF0dGVtcHQvcy4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSBpcyB1bnVzYWJsZS4gQ29udGFjdCB5b3VyIG9wZXJhdG9yLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iSW5jb3JyZWN0IFNJTSBQVUsgY29kZTsgeW91IGhhdmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlbWFpbmluZyBhdHRlbXB0L3MgYmVmb3JlIFNJTSBiZWNvbWVzIHBlcm1hbmVudGx5IHVudXNhYmxlLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkluY29ycmVjdCBTSU0gUFVLIGNvZGU7IHlvdSBoYXZlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiByZW1haW5pbmcgYXR0ZW1wdC9zIGJlZm9yZSBTSU0gYmVjb21lcyBwZXJtYW5lbnRseSB1bnVzYWJsZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlNJTSBQSU4gb3BlcmF0aW9uIGZhaWxlZCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTSBQVUsgb3BlcmF0aW9uIGZhaWxlZCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iQ29kZSBhY2NlcHRlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IlByZXZpb3VzIHRyYWNrIGJ1dHRvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Ik5leHQgdHJhY2sgYnV0dG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlBhdXNlIGJ1dHRvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+IlBsYXkgYnV0dG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4iU3RvcCBidXR0b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4iTm8gc2VydmljZS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKaW5kZXggNzg3NTgxYS4uMzhiZWNhMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkluZ3Jlc2EgZWwgY8OzZGlnbyBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJFc2NyaWJlIGVsIGPDs2RpZ28gUFVLIHkgdW4gbnVldm8gY8OzZGlnbyBQSU4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDw7NkaWdvIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTnVldm8gY8OzZGlnbyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJFc2NyaWJlIGVsIGPDs2RpZ28gUFVLIGRlIGxhIHRhcmpldGEgU0lNIHkgdW4gbnVldm8gY8OzZGlnbyBQSU4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDw7NkaWdvIFBVSyBkZSBsYSB0YXJqZXRhIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTnVldm8gY8OzZGlnbyBQSU4gZGUgbGEgdGFyamV0YSBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJUb2NhIHBhcmEgaW5ncmVzYXIgbGEgY29udHJhc2XDsWEiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJJbmdyZXNhciBjb250cmFzZcOxYSBwYXJhIGRlc2Jsb3F1ZWFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iSW5ncmVzYSBlbCBQSU4gcGFyYSBkZXNibG9xdWVhciI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJCb3TDs24gZGUgcGF1c2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkJvdMOzbiBkZSByZXByb2R1Y2Npw7NuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJCb3TDs24gZGUgZGV0ZW5jacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJWb3RvcyBhIGZhdm9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iVm90b3MgZW4gY29udHJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iQ29yYXrDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJEZXNibG9xdWVhIHBhcmEgY29udGludWFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IlNlIGNhbmNlbMOzIGVsIGluaWNpby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iU3VlbHRhIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHBhcmEgZWxpbWluYXJsby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iTm8gc2UgZWxpbWluYXLDoSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkluZ3Jlc2EgZWwgY8OzZGlnbyBQSU4gZGVzZWFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtYXIgY8OzZGlnbyBQSU4gZGVzZWFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iRGVzYmxvcXVlYW5kbyB0YXJqZXRhIFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkPDs2RpZ28gUElOIGluY29ycmVjdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJFc2NyaWJlIHVuIFBJTiBxdWUgdGVuZ2EgZGUgY3VhdHJvIGEgb2NobyBuw7ptZXJvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJFbCBjw7NkaWdvIFBVSyBkZWJlIHRlbmVyIG9jaG8gbsO6bWVyb3MgY29tbyBtw61uaW1vLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlZ1ZWx2ZSBhIGluZ3Jlc2FyIGVsIGPDs2RpZ28gUFVLIGNvcnJlY3RvLiBTaSBpbmdyZXNhcyB1biBjw7NkaWdvIGluY29ycmVjdG8gdmFyaWFzIHZlY2VzLCBzZSBpbmhhYmlsaXRhcsOhIGxhIHRhcmpldGEgU0lNLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iRGlidWphc3RlIGluY29ycmVjdGFtZW50ZSB0dSBwYXRyw7NuIGRlIGRlc2Jsb3F1ZW8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVjZXMuIEx1ZWdvIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoXMsIHNlIHRlIHNvbGljaXRhcsOhIHF1ZSBkZXNibG9xdWVlcyB0dSBkaXNwb3NpdGl2byBtZWRpYW50ZSBlbCB1c28gZGUgdW5hIGN1ZW50YSBkZSBjb3JyZW8uXG5cbiBWdWVsdmUgYSBpbnRlbnRhcmxvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkVsaW1pbmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJFbCBjw7NkaWdvIFBJTiBkZSBsYSB0YXJqZXRhIFNJTSBlcyBpbmNvcnJlY3RvLiBEZWJlcyBjb211bmljYXJ0ZSBjb24gZWwgcHJvdmVlZG9yIHBhcmEgZGVzYmxvcXVlYXIgZWwgZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJFbCBjw7NkaWdvIFBJTiBkZSBsYSB0YXJqZXRhIFNJTSBlcyBpbmNvcnJlY3RvLiBUZSBxdWVkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50byBhbnRlcyBkZSBxdWUgZGViYXMgY29tdW5pY2FydGUgY29uIGVsIHByb3ZlZWRvciBwYXJhIGRlc2Jsb3F1ZWFyIGVsIGRpc3Bvc2l0aXZvLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IkVsIGPDs2RpZ28gUElOIGRlIGxhIHRhcmpldGEgU0lNIGVzIGluY29ycmVjdG8uIFRlIHF1ZWRhbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJMYSB0YXJqZXRhIFNJTSBubyBzZSBwdWVkZSB1dGlsaXphci4gQ29tdW7DrWNhdGUgY29uIGVsIHByb3ZlZWRvci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkVsIGPDs2RpZ28gUFVLIGRlIGxhIHRhcmpldGEgU0lNIGVzIGluY29ycmVjdG8uIFRlIHF1ZWRhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBpbnRlbnRvIGFudGVzIGRlIHF1ZSBsYSB0YXJqZXRhIFNJTSBxdWVkZSBpbnV0aWxpemFibGUgcGVybWFuZW50ZW1lbnRlLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkVsIGPDs2RpZ28gUFVLIGRlIGxhIHRhcmpldGEgU0lNIGVzIGluY29ycmVjdG8uIFRlIHF1ZWRhbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MgYW50ZXMgZGUgcXVlIGxhIHRhcmpldGEgU0lNIHF1ZWRlIGludXRpbGl6YWJsZSBwZXJtYW5lbnRlbWVudGUuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJFcnJvciBhbCBkZXNibG9xdWVhciBsYSB0YXJqZXRhIFNJTSBjb24gZWwgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJFcnJvciBhbCBkZXNibG9xdWVhciBsYSB0YXJqZXRhIFNJTSBjb24gZWwgUFVLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkPDs2RpZ28gYWNlcHRhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJCb3TDs24gZGUgcGlzdGEgYW50ZXJpb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJCb3TDs24gZGUgcGlzdGEgc2lndWllbnRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IkJvdMOzbiBkZSBwYXVzYSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCmluZGV4IGQwYzc5ZWIuLmE5M2IxMGQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbApAQCAtMjEsMTYgKzIxLDE2IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJbnRyb2R1Y2UgZWwgY8OzZGlnbyBQSU4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iSW50cm9kdWNlIGVsIGPDs2RpZ28gUFVLIHkgdW4gbnVldm8gY8OzZGlnbyBQSU4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDw7NkaWdvIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTnVldm8gY8OzZGlnbyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJFc2NyaWJlIGVsIFBVSyBkZSBsYSB0YXJqZXRhIFNJTSB5IHVuIG51ZXZvIGPDs2RpZ28gUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDw7NkaWdvIFBVSyBkZSBsYSB0YXJqZXRhIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTnVldm8gY8OzZGlnbyBQSU4gZGUgdGFyamV0YSBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJUb2NhIHBhcmEgaW50cm9kdWNpciBjb250cmFzZcOxYSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IkludHJvZHVjZSBsYSBjb250cmFzZcOxYSBwYXJhIGRlc2Jsb3F1ZWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IkludHJvZHVjZSBlbCBjw7NkaWdvIFBJTiBwYXJhIGRlc2Jsb3F1ZWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IkPDs2RpZ28gUElOIGluY29ycmVjdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iUGFyYSBkZXNibG9xdWVhciBlbCB0ZWzDqWZvbm8sIHB1bHNhIGxhIHRlY2xhIGRlIG1lbsO6IHksIGEgY29udGludWFjacOzbiwgcHVsc2EgMC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iU2UgaGEgc3VwZXJhZG8gZWwgbsO6bWVybyBtw6F4aW1vIGRlIGludGVudG9zIGRlIGRlc2Jsb3F1ZW8gZmFjaWFsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4iQ2FyZ2FkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4iQ2FyZ2FkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4iQ2FyZ2FuZG8gKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4iQ29uZWN0YSBlbCBjYXJnYWRvci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+IlZlIGFsIG1lbsO6IHBhcmEgZGVzYmxvcXVlYXIgbGEgcGFudGFsbGEuIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IkJvdMOzbiBkZSBwYXVzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iQm90w7NuIGRlIHJlcHJvZHVjY2nDs24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IkJvdMOzbiBwYXJhIGRldGVuZXIgbGEgcmVwcm9kdWNjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJNZSBndXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+Ik5vIG1lIGd1c3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iQ29yYXrDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJEZXNibG9xdWVhciBwYXJhIGNvbnRpbnVhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkluaWNpbyBjYW5jZWxhZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iU3VlbHRhIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHBhcmEgZWxpbWluYXJsby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbm8gc2UgZWxpbWluYXLDoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkludHJvZHVjZSBlbCBjw7NkaWdvIFBJTiBkZXNlYWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IkNvbmZpcm1hIGVsIGPDs2RpZ28gUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJEZXNibG9xdWVhbmRvIHRhcmpldGEgU0lN4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iQ8OzZGlnbyBQSU4gaW5jb3JyZWN0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IkludHJvZHVjZSB1biBjw7NkaWdvIFBJTiBjb24gdW5hIGxvbmdpdHVkIGNvbXByZW5kaWRhIGVudHJlIGN1YXRybyB5IG9jaG8gZMOtZ2l0b3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iRWwgY8OzZGlnbyBQVUsgZGViZSB0ZW5lciBvY2hvIG7Dum1lcm9zIGNvbW8gbcOtbmltby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJWdWVsdmUgYSBpbnRyb2R1Y2lyIGVsIGPDs2RpZ28gUFVLIGNvcnJlY3RvLiBTaSBpbnRyb2R1Y2VzIHVuIGPDs2RpZ28gaW5jb3JyZWN0byB2YXJpYXMgdmVjZXMsIHNlIGluaGFiaWxpdGFyw6EgbGEgdGFyamV0YSBTSU0uIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJIYXMgZmFsbGFkbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWNlcyBhbCBkaWJ1amFyIGVsIHBhdHLDs24gZGUgZGVzYmxvcXVlby4gU2kgZmFsbGFzIG90cmFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHZlY2VzLCBkZWJlcsOhcyB1c2FyIHVuYSBjdWVudGEgZGUgY29ycmVvIGVsZWN0csOzbmljbyBwYXJhIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9uby5cblxuIEludMOpbnRhbG8gZGUgbnVldm8gZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iRWxpbWluYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkPDs2RpZ28gUElOIGRlIGxhIHRhcmpldGEgU0lNIGluY29ycmVjdG8uIERlYmVzIHBvbmVydGUgZW4gY29udGFjdG8gY29uIHR1IG9wZXJhZG9yIHBhcmEgZGVzYmxvcXVlYXIgZWwgZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJDw7NkaWdvIFBJTiBkZSBsYSB0YXJqZXRhIFNJTSBpbmNvcnJlY3RvLiBRdWVkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50byBwYXJhIHRlbmVyIHF1ZSBwb25lcnRlIGVuIGNvbnRhY3RvIGNvbiB0dSBvcGVyYWRvciBwYXJhIGRlc2Jsb3F1ZWFyIGVsIGRpc3Bvc2l0aXZvLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IkPDs2RpZ28gUElOIGRlIGxhIHRhcmpldGEgU0lNIGluY29ycmVjdG8uIFF1ZWRhbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJMYSB0YXJqZXRhIFNJTSBubyBzZSBwdWVkZSB1dGlsaXphci4gUG9udGUgZW4gY29udGFjdG8gY29uIHR1IG9wZXJhZG9yLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iQ8OzZGlnbyBQVUsgZGUgbGEgdGFyamV0YSBTSU0gaW5jb3JyZWN0by4gVGUgcXVlZGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudG8gcGFyYSBxdWUgbGEgdGFyamV0YSBTSU0gbm8gc2UgcHVlZGEgdXRpbGl6YXIgZGUgZm9ybWEgcGVybWFuZW50ZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJDw7NkaWdvIFBVSyBkZSBsYSB0YXJqZXRhIFNJTSBpbmNvcnJlY3RvLiBRdWVkYW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudG9zIHBhcmEgcXVlIGxhIHRhcmpldGEgU0lNIG5vIHNlIHB1ZWRhIHV0aWxpemFyIGRlIGZvcm1hIHBlcm1hbmVudGUuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJFcnJvciBhbCBpbnRlbnRhciBkZXNibG9xdWVhciBsYSB0YXJqZXRhIFNJTSBjb24gZWwgY8OzZGlnbyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IkVycm9yIGFsIGludGVudGFyIGRlc2Jsb3F1ZWFyIGxhIHRhcmpldGEgU0lNIGNvbiBlbCBjw7NkaWdvIFBVSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJDw7NkaWdvIGFjZXB0YWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iQm90w7NuIGRlIGNhbmNpw7NuIGFudGVyaW9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iQm90w7NuIGRlIHNpZ3VpZW50ZSBjYW5jacOzbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJCb3TDs24gZGUgcGF1c2EiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYmQ4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJTaXNlc3RhZ2UgUElOLWtvb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJTaXNlc3RhZ2UgU0lNLWkgUFVLLSBqYSB1dXMgUElOLWtvb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTS1pIFBVSy1rb29kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJVdXMgU0lNLWkgUElOLWtvb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJQdXVkdXRhZ2UgcGFyb29saSBzaXNlc3RhbWlzZWtzIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iQXZhbWlzZWtzIHNpc2VzdGFnZSBwYXJvb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJBdmFtaXNla3Mgc2lzZXN0YWdlIFBJTi1rb29kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iVmFsZSBQSU4ta29vZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iQXZhbWlzZWtzIHZhanV0YWdlIG1lbsO8w7xrbGFodmksIHNlZWrDpHJlbCBrbGFodmkgMC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iTWFrc2ltYWFsbmUgdGVlbnVzZWdhIEZhY2UgVW5sb2NrIGF2YW1pc2Uga2F0c2V0ZSBhcnYgb24gw7xsZXRhdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiJMYWV0dWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IkxhYWRpbWluZSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IsOcaGVuZGFnZSBsYWFkaWphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4iQXZhbWlzZWtzIHZhanV0YWdlIG1lbsO8w7xrbGFodmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiJWw7VyayBvbiBzdWxldHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlNJTS1rYWFydGkgcG9sZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiJUYWh2ZWxhcnZ1dGlzIHBvbGUgU0lNLWthYXJ0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IlRlbGVmb25pcyBwb2xlIFNJTS1rYWFydGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IlNpc2VzdGFnZSBTSU0ta2FhcnQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU0lNLWthYXJ0IHB1dWR1YiB2w7VpIG9uIGxvZXRhbWF0dS4gU2lzZXN0YWdlIFNJTS1rYWFydC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4iS2FzdXRhbWlza8O1bGJtYXR1IFNJTS1rYWFydC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJTSU0ta2FhcnQgb24gasOkw6RkYXZhbHQga2VlbGF0dWQuXG4gVXVlIFNJTS1rYWFyZGkgc2FhbWlzZWtzIHbDtXRrZSDDvGhlbmR1c3Qgb21hIG1vYmlpbHNpZGVvcGVyYWF0b3JpZ2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTS1rYWFydCBvbiBsdWt1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IlNJTS1rYWFydCBvbiBQVUstbHVrdXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTSU0ta2FhcmRpIGF2YW1pbmUgLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBWaWRpbiAlMiRkLyUzJGQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IlZpZGluYSBsaXNhbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IlTDvGhpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJBdmFtaXNhbGEgb24gbGFpZW5kYXR1ZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJBdmFtaXNhbGEgb24gYWhlbmRhdHVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiJLYXN1dGFqYSB2YWxpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJPbGVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4iS2FhbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJNZWVkaWEganVodG51cHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJWaWRpbmEgw7xtYmVya29ycmFsZGFtaW5lIGFsZ2FzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlZpZGluYSDDvG1iZXJrb3JyYWxkYW1pbmUgbMO1cHBlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG9uIGt1c3R1dGF0dWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4iQXZhbWlzYWxhIGxhaWVuZGFtaW5lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IkxvaGlzdGFtaXNlZ2EgYXZhbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+Ik11c3RyaWdhIGF2YW1pbmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJOw6RvZ2EgYXZhbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUElOLWtvb2RpZ2EgYXZhbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiJQYXJvb2xpZ2EgYXZhbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJNdXN0cmkgYWxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiJMb2hpc3RhbWlzYWxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4iTnVwcCBFZWxtaW5lIGx1Z3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+Ik51cHAgSsOkcmdtaW5lIGx1Z3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJOdXBwIEVzaXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ik1lZWxkaWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJFaSBtZWVsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJTw7xkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkrDpHRrYW1pc2VrcyB0w7xoaXN0YWdlIGx1a3VzdHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iS8OkaXZpdGFtaW5lIG9uIHTDvGhpc3RhdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+Ikt1c3R1dGFtaXNla3MgbGFza2UgdmlkaW4gPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbGFodGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+IlZpZGluYXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gZWkga3VzdHV0YXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJUw7xoaXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiJLdXN0dXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiJWYWxtaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiJSZcW+aWltaSBtdXV0bWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlTDtXN0dWtsYWh2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iU2lzZXN0dXNrbGFodiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iTHVrdSBhdmFtaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iSMOkw6RsZXR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkhlbGkgb24gc2VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iT3RzaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkxvaGlzdGFnZSDDvGxlczogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkxvaGlzdGFnZSBhbGxhOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iTG9oaXN0YWdlIHZhc2FrdWxlOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkxvaGlzdGFnZSBwYXJlbWFsZTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4iUHJhZWd1bmUga2FzdXRhamEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iSMOkZGFhYmlrw7VuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlVudXN0YXNpbiBtdXN0cmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IlZhbGUgbXVzdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4iVmFsZSBwYXJvb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iVmFsZSBQSU4ta29vZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iUHJvb3ZpZ2UgdXVlc3RpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiJKb29uaXN0YWdlIG9tYSBtdXN0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJTaXNlc3RhZ2UgU0lNLWkgUElOLWtvb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IlNpc2VzdGFnZSBQSU4ta29vZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiJTaXNlc3RhZ2UgcGFyb29sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNIG9uIG7DvMO8ZCBrZWVsYXR1ZC4gSsOkdGthbWlzZWtzIHNpc2VzdGFnZSBQVUsta29vZC4gw5xrc2lrYXNqdSBrw7xzaWdlIG9wZXJhYXRvcmlsdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iU2lzZXN0YWdlIHNvb3ZpdHVkIFBJTi1rb29kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+Iktpbm5pdGFnZSBzb292aXR1ZCBQSU4ta29vZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNLWthYXJkaSBhdmFtaW5lIC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlNpc2VzdGFnZSA04oCTOC1udW1icmlsaW5lIFBJTi1rb29kLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSy1rb29kaSBwaWtrdXMgcGVhYiBvbGVtYSB2w6RoZW1hbHQgOCBudW1icml0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlNpc2VzdGFnZSB1dWVzdGkgw7VpZ2UgUFVLLWtvb2QuIEtvcmR1dmthdHNldGUga29ycmFsIGtlZWxhdGFrc2UgU0lNIGrDpMOkZGF2YWx0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ta29vZGlkIGVpIG9sZSB2YXN0YXZ1c2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iTGlpZ2EgcGFsanUgbXVzdHJpa2F0c2VpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJBdmFtaXNla3MgbG9naWdlIHNpc3NlIG9tYSBHb29nbGVcJ2kga29udG9nYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+Ikthc3V0YWphbmltaSAoZS1wb3N0KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4iUGFyb29sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiJMb2dpIHNpc3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiJWYWxlIGthc3V0YWphbmltaSB2w7VpIHBhcm9vbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4iS2FzIHVudXN0YXNpdGUga2FzdXRhamFuaW1lIHbDtWkgcGFyb29saT9cbkvDvGxhc3RhZ2UgYWFkcmVzc2kgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IktvbnRvIGtvbnRyb2xsaW1pbmUgLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJPbGV0ZSBQSU4ta29vZGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBzaXNlc3RhbnVkLlxuXG5Qcm9vdmlnZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QgdXVlc3RpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJPbGV0ZSBwYXJvb2xpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgc2lzZXN0YW51ZC4gXG5cblByb292aWdlIHV1ZXN0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ikpvb25pc3Rhc2l0ZSBvbWEgYXZhbWlzbXVzdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkuXG5cblByb292aWdlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdCB1dWVzdGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4iT2xldGUgw7xyaXRhbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHRhaHZlbGFydnV0aXQgdmFsZXN0aSBhdmFkYS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBsw6RodGVzdGF0YWtzZSB0YWh2ZWxhcnZ1dGkgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlIGphIGvDtWlrIGthc3V0YWphYW5kbWVkIGzDpGhldmFkIGthb3RzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4iT2xldGUgw7xyaXRhbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHRlbGVmb25pIHZhbGVzdGkgYXZhZGEuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgbMOkaHRlc3RhdGFrc2UgdGVsZWZvbiB0ZWhhc2UgdmFpa2VzZWFkZXRlbGUgamEga8O1aWsga2FzdXRhamFhbmRtZWQgbMOkaGV2YWQga2FvdHNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4iT2xldGUgcMO8w7xkbnVkIHRhaHZlbGFydnV0aXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgYXZhZGEuIFRhaHZlbGFydnV0aSBsw6RodGVzdGF0YWtzZSBuw7zDvGQgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+Ik9sZXRlIHDDvMO8ZG51ZCB0ZWxlZm9uaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBhdmFkYS4gVGVsZWZvbiBsw6RodGVzdGF0YWtzZSBuw7zDvGQgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJKb29uaXN0YXNpdGUgb21hIGF2YW1pc211c3RyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpLiBQw6RyYXN0IHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IHBhbHV0YWtzZSB0ZWlsIHRhaHZlbGFydnV0aSBhdmFkYSBtZWlsaWtvbnRvZ2EuXG5cbiBQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSm9vbmlzdGFzaXRlIG9tYSBhdmFtaXNtdXN0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBwYWx1dGFrc2UgdGVpbCB0ZWxlZm9uIGF2YWRhIG1laWxpa29udG9nYS5cblxuIFByb292aWdlIHV1ZXN0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iRWVtYWxkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iVmFsZSBTSU0taSBQSU4ta29vZCwgc2VhZG1lIGF2YW1pc2VrcyBwZWF0ZSBuw7zDvGQgw7xoZW5kdXN0IHbDtXRtYSBvbWEgb3BlcmFhdG9yaWdhLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iVmFsZSBTSU0taSBQSU4ta29vZCwgdGVpbCBvbiBqw6TDpG51ZCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYXRzZSwgZW5uZSBrdWkgcGVhdGUgc2VhZG1lIGF2YW1pc2VrcyBvcGVyYWF0b3JpZ2Egw7xoZW5kdXN0IHbDtXRtYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJWYWxlIFNJTS1pIFBJTi1rb29kLCB0ZWlsIG9uIGrDpMOkbnVkIHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthdHNldC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSBlaSBvbGUga2FzdXRhdGF2LiBWw7V0a2Ugw7xoZW5kdXN0IG9wZXJhYXRvcmlnYS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IlZhbGUgU0lNLWkgUFVLLWtvb2QsIHRlaWwgb24gasOkw6RudWQgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2F0c2UsIGVubmUga3VpIFNJTSBww7xzaXZhbHQgbHVrdXN0YXRha3NlLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IlZhbGUgU0lNLWkgUFVLLWtvb2QsIHRlaWwgb24gasOkw6RudWQgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2F0c2V0LCBlbm5lIGt1aSBTSU0gcMO8c2l2YWx0IGx1a3VzdGF0YWtzZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlNJTS1pIFBJTi1rb29kaSB0b2ltaW5nIGViYcO1bm5lc3R1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTS1pIFBVSy1rb29kaSB0b2ltaW5nIGViYcO1bm5lc3R1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS29vZCBvbiDDtWlnZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJOdXBwIEVlbG1pbmUgbHVndSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Ik51cHAgSsOkcmdtaW5lIGx1Z3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iTnVwcCBQZWF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+Ik51cHAgRXNpdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjMwODQxNzkzMjQ4MTA1NzU3ODciPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IlRlZW51cyBwdXVkdWIuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWV0L2FjdGl2aXR5c3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWV0L2FjdGl2aXR5c3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNzFhZmMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ldC9hY3Rpdml0eXN0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAotKioKLSoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0qKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qKgotKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbmFtZSIgbXNnaWQ9IjMzNTI4ODgxODY2NzQ5ODE1OTMiPiJLZXlndWFyZFRlc3RBY3Rpdml0eSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlY3VyZV9hcHBfbmFtZSIgbXNnaWQ9Ijc5NTU0OTg3NDI4MTY4NjgwNDkiPiJVbmlmaWVkQ2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9uZV9tZW51X2l0ZW0iIG1zZ2lkPSI2MTU2NzQ3Mjg1Njg3NTUxNDI0Ij4iVHVydmFtYXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGluX21lbnVfaXRlbSIgbXNnaWQ9IjExNzk3NTY0MzMyNjg5NjIzMTEiPiJQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX21lbnVfaXRlbSIgbXNnaWQ9IjE5NTk5ODA0OTk2NjIxNTMxNjAiPiJQYXJvb2wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXR0ZXJuX21lbnVfaXRlbSIgbXNnaWQ9IjI5ODc3OTgxNTIxNzUxNDAyNDkiPiJNdXN0ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcGluX21lbnVfaXRlbSIgbXNnaWQ9IjM5NjIyODY2Mzk2NDUwODQ4ODAiPiJTSU0taSBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9wdWtfbWVudV9pdGVtIiBtc2dpZD0iNjE5MDA0NDEzMzAwODM5Mjk3NCI+IlNJTS1pIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkZF93aWRnZXRfaXRlbSIgbXNnaWQ9IjI3OTcwMjE1MjM2Njg1NzQxNSI+IlZpZGluYSB2YWxpbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbl9zY3JlZW5fdHVybmVkX29mZiIgbXNnaWQ9Ijg3NjEzOTYzMjk3NzA1MDgzNjciPiJvblNjcmVlblR1cm5lZE9mZiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9uX3NjcmVlbl90dXJuZWRfb24iIG1zZ2lkPSI5MjIyOTI2ODE4MDMwNzI4OTk5Ij4ib25TY3JlZW5UdXJuZWRPbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRvX2tleWd1YXJkIiBtc2dpZD0iOTIxMDkzNjk3NzgyMzExODc5NiI+ImRvS2V5Z3VhcmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2ZXJpZnlfdW5sb2NrIiBtc2dpZD0iODUwODcyMjI3MzMyOTMwNjk2OCI+InZlcmlmeVVubG9jayI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMTdhOWMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCi0qKgotKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlNpc2VzdGFnZSBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlNpc2VzdGFnZSBQVUsta29vZCBqYSB1dXMgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSy1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJVdXMgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJQdXVkdXRhZ2UgcGFyb29saSBzaXNlc3RhbWlzZWtzIjwvZm9udD48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iQXZhbWlzZWtzIHNpc2VzdGFnZSBwYXJvb2wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJBdmFtaXNla3Mgc2lzZXN0YWdlIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iVmFsZSBQSU4ta29vZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iQXZhbWlzZWtzIHZhanV0YWdlIG1lbsO8w7xrbGFodmksIHNlZWrDpHJlbCBrbGFodmkgMC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iTWFrc2ltYWFsbmUgdGVlbnVzZWdhIEZhY2UgVW5sb2NrIGF2YW1pc2Uga2F0c2V0ZSBhcnYgb24gw7xsZXRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiJMYWV0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IkxhYWRpbWluZSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IsOcaGVuZGFnZSBsYWFkaWphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4iQXZhbWlzZWtzIHZhanV0YWdlIG1lbsO8w7xrbGFodmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiJWw7VyayBvbiBzdWxldHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlNJTS1rYWFydGkgcG9sZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiJUYWh2ZWxhcnZ1dGlzIHBvbGUgU0lNLWthYXJ0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IlRlbGVmb25pcyBwb2xlIFNJTS1rYWFydGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IlNpc2VzdGFnZSBTSU0ta2FhcnQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU0lNLWthYXJ0IHB1dWR1YiB2w7VpIG9uIGxvZXRhbWF0dS4gU2lzZXN0YWdlIFNJTS1rYWFydC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4iS2FzdXRhbWlza8O1bGJtYXR1IFNJTS1rYWFydC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJTSU0ta2FhcnQgb24gasOkw6RkYXZhbHQga2VlbGF0dWQuXG4gVXVlIFNJTS1rYWFyZGkgc2FhbWlzZWtzIHbDtXRrZSDDvGhlbmR1c3Qgb21hIG1vYmlpbHNpZGVvcGVyYWF0b3JpZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTS1rYWFydCBvbiBsdWt1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IlNJTS1rYWFydCBvbiBQVUstbHVrdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTSU0ta2FhcmRpIGF2YW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBWaWRpbiAlMiRkLyUzJGQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IlZpZGluYSBsaXNhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IlTDvGhpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJBdmFtaXNhbGEgb24gbGFpZW5kYXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJBdmFtaXNhbGEgb24gYWhlbmRhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiJLYXN1dGFqYSB2YWxpamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJPbGVrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4iS2FhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJNZWVkaWEganVodG51cHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJWaWRpbmEgw7xtYmVya29ycmFsZGFtaW5lIGFsZ2FzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlZpZGluYSDDvG1iZXJrb3JyYWxkYW1pbmUgbMO1cHBlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG9uIGt1c3R1dGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4iQXZhbWlzYWxhIGxhaWVuZGFtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IkxvaGlzdGFtaXNlZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+Ik11c3RyaWdhIGF2YW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJOw6RvZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUElOLWtvb2RpZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiJQYXJvb2xpZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJNdXN0cmkgYWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiJMb2hpc3RhbWlzYWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4iTnVwcCBFZWxtaW5lIGx1Z3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+Ik51cHAgSsOkcmdtaW5lIGx1Z3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJOdXBwIEVzaXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IlTDvGhpc3RhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+Ikt1c3R1dGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IlZhbG1pcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IlJlxb5paW1pIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iVMO1c3R1a2xhaHYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJTaXNlc3R1c2tsYWh2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJMdWt1IGF2YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJIw6TDpGxldHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iSGVsaSBvbiBzZWVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJPdHNpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iTG9oaXN0YWdlIMO8bGVzOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iTG9oaXN0YWdlIGFsbGE6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJMb2hpc3RhZ2UgdmFzYWt1bGU6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iTG9oaXN0YWdlIHBhcmVtYWxlOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJQcmFlZ3VuZSBrYXN1dGFqYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJIw6RkYWFiaWvDtW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iVW51c3Rhc2luIG11c3RyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4iVmFsZSBtdXN0ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiJWYWxlIHBhcm9vbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJWYWxlIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiJQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+Ikpvb25pc3RhZ2Ugb21hIG11c3RlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNpc2VzdGFnZSBTSU0taSBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iU2lzZXN0YWdlIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IlNpc2VzdGFnZSBwYXJvb2wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJTSU0gb24gbsO8w7xkIGtlZWxhdHVkLiBKw6R0a2FtaXNla3Mgc2lzZXN0YWdlIFBVSy1rb29kLiDDnGtzaWthc2p1IGvDvHNpZ2Ugb3BlcmFhdG9yaWx0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJTaXNlc3RhZ2Ugc29vdml0dWQgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iS2lubml0YWdlIHNvb3ZpdHVkIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTSU0ta2FhcmRpIGF2YW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iVmFsZSBQSU4ta29vZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJTaXNlc3RhZ2UgNOKAkzgtbnVtYnJpbGluZSBQSU4ta29vZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsta29vZGkgcGlra3VzIHBlYWIgb2xlbWEgdsOkaGVtYWx0IDggbnVtYnJpdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJTaXNlc3RhZ2UgdXVlc3RpIMO1aWdlIFBVSy1rb29kLiBLb3JkdXZrYXRzZXRlIGtvcnJhbCBrZWVsYXRha3NlIFNJTSBqw6TDpGRhdmFsdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOLWtvb2RpZCBlaSBvbGUgdmFzdGF2dXNlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IkxpaWdhIHBhbGp1IG11c3RyaWthdHNlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iQXZhbWlzZWtzIGxvZ2lnZSBzaXNzZSBvbWEgR29vZ2xlXCdpIGtvbnRvZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiJLYXN1dGFqYW5pbWkgKGUtcG9zdCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IlBhcm9vbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4iTG9naSBzaXNzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4iVmFsZSBrYXN1dGFqYW5pbWkgdsO1aSBwYXJvb2wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IkthcyB1bnVzdGFzaXRlIGthc3V0YWphbmltZSB2w7VpIHBhcm9vbGk/XG5Lw7xsYXN0YWdlIGFhZHJlc3NpICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiJLb250byBrb250cm9sbGltaW5lIC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iT2xldGUgUElOLWtvb2RpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgc2lzZXN0YW51ZC5cblxuUHJvb3ZpZ2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IHV1ZXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iT2xldGUgcGFyb29saSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIHNpc2VzdGFudWQuIFxuXG5Qcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJKb29uaXN0YXNpdGUgb21hIGF2YW1pc211c3RyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpLlxuXG5Qcm9vdmlnZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QgdXVlc3RpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+Ik9sZXRlIMO8cml0YW51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB0YWh2ZWxhcnZ1dGl0IHZhbGVzdGkgYXZhZGEuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgbMOkaHRlc3RhdGFrc2UgdGFodmVsYXJ2dXRpIHRlaGFzZSB2YWlrZXNlYWRldGVsZSBqYSBrw7VpayBrYXN1dGFqYWFuZG1lZCBsw6RoZXZhZCBrYW90c2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+Ik9sZXRlIMO8cml0YW51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB0ZWxlZm9uaSB2YWxlc3RpIGF2YWRhLiBQw6RyYXN0IHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IGzDpGh0ZXN0YXRha3NlIHRlbGVmb24gdGVoYXNlIHZhaWtlc2VhZGV0ZWxlIGphIGvDtWlrIGthc3V0YWphYW5kbWVkIGzDpGhldmFkIGthb3RzaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+Ik9sZXRlIHDDvMO8ZG51ZCB0YWh2ZWxhcnZ1dGl0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIGF2YWRhLiBUYWh2ZWxhcnZ1dGkgbMOkaHRlc3RhdGFrc2UgbsO8w7xkIHRlaGFzZSB2YWlrZXNlYWRldGVsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiJPbGV0ZSBww7zDvGRudWQgdGVsZWZvbmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgYXZhZGEuIFRlbGVmb24gbMOkaHRlc3RhdGFrc2UgbsO8w7xkIHRlaGFzZSB2YWlrZXNlYWRldGVsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iSm9vbmlzdGFzaXRlIG9tYSBhdmFtaXNtdXN0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBwYWx1dGFrc2UgdGVpbCB0YWh2ZWxhcnZ1dGkgYXZhZGEgbWVpbGlrb250b2dhLlxuXG4gUHJvb3ZpZ2UgdXVlc3RpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Ikpvb25pc3Rhc2l0ZSBvbWEgYXZhbWlzbXVzdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgcGFsdXRha3NlIHRlaWwgdGVsZWZvbiBhdmFkYSBtZWlsaWtvbnRvZ2EuXG5cbiBQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkVlbWFsZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJOdXBwIEVlbG1pbmUgbHVndSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Ik51cHAgSsOkcmdtaW5lIGx1Z3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iTnVwcCBQZWF0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+Ik51cHAgRXNpdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjMwODQxNzkzMjQ4MTA1NzU3ODciPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IlRlZW51cyBwdXVkdWIuIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAppbmRleCA4M2M1YTM0Li5iNGE0YzYxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTIxLDE1ICsyMSwxNSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i2b7bjNmGINqp2K8g2LHYpyDZiNin2LHYryDaqdmG24zYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyDZiCDZvtuM2YYg2qnYryDYrNiv24zYryDYsdinINiq2KfbjNm+INqp2YbbjNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLaqdivIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i2b7bjNmGINqp2K8g2KzYr9uM2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLigI9QVUsg2LPbjNmFINqp2KfYsdiqINmIINqp2K8g2b7bjNmGINis2K/bjNivINix2Kcg2KrYp9uM2b4g2qnZhtuM2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IuKAj9qp2K8gUFVLINiz24zZhSDaqdin2LHYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4i2qnYryDZvtuM2YYg2KzYr9uM2K8g2LPbjNmFINqp2KfYsdiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i2KjYsdin24wg2KrYp9uM2b4g2q/YsNix2YjYp9qY2Ycg2YTZhdizINqp2YbbjNivIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i2KjYsdin24wg2KjYp9iy2qnYsdiv2YYg2YLZgdmE2Iwg2q/YsNix2YjYp9qY2Ycg2LHYpyDZiNin2LHYryDaqdmG24zYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+Itio2LHYp9uMINio2KfYstqp2LHYr9mGINmC2YHZhNiMINm+24zZhiDYsdinINiq2KfbjNm+INqp2YbbjNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i2b7bjNmGINqp2K8g2KfYtNiq2KjYp9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i2KjYsdin24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YTYjCDZhdmG2Ygg2LHYpyDZgdi02KfYsSDYr9mH24zYryDZiCDYs9m+2LMgMCDYsdinINmB2LTYp9ixINiv2YfbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLYr9mB2LnYp9iqINiq2YTYp9i0INio2LHYp9uMIEZhY2UgVW5sb2NrINin2LIg2K3Yr9in2qnYq9ixINmF2KzYp9iyINio24zYtNiq2LEg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLigI/Yr9mB2LnYp9iqINiq2YTYp9i0INio2LHYp9uMIEZhY2UgVW5sb2NrINin2LIg2K3Yr9in2qnYq9ixINmF2KzYp9iyINio24zYtNiq2LEg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4i2LTYp9ix2pgg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4i2LTYp9ix2pjYjCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i2LTYp9ix2pjYsSDYrtmI2K8g2LHYpyDZiNi12YQg2qnZhtuM2K8uIjwvc3RyaW5nPgpAQCAtNDEsMTEgKzQxLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4i2LPbjNmFINqp2KfYsdiqINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4i2LPbjNmFINqp2KfYsdiqINmF2YjYrNmI2K8g2YbbjNiz2Kog24zYpyDZgtin2KjZhCDYrtmI2KfZhtiv2YYg2YbbjNiz2KouINuM2qkg2LPbjNmFINqp2KfYsdiqINmI2KfYsdivINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiLYs9uM2YUg2qnYp9ix2Kog2LrbjNix2YLYp9io2YQg2KfYs9iq2YHYp9iv2Ycg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+Itiz24zZhSDaqdin2LHYqiDYtNmF2Kcg2KjZhyDYt9mI2LEg2K/Yp9im2YUg2LrbjNixINmB2LnYp9mEINi02K/ZhyDYp9iz2KouIFxu2KjYsdin24wg2K/Yp9i02KrZhiDYs9uM2YUg2qnYp9ix2Kog2K/bjNqv2LEg2KjYpyDYp9ix2KfYptmH4oCO2K/Zh9mG2K/ZhyDYs9ix2YjbjNizINio24zigI7Ys9uM2YUg2K7ZiNivINiq2YXYp9izINio2q/bjNix24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiLigI/Ys9uM2YUg2qnYp9ix2Kog2LTZhdinINio2Ycg2LfZiNixINiv2KfYptmFINi624zYsSDZgdi52KfZhCDYtNiv2Ycg2KfYs9iqLiBcbtio2LHYp9uMINiv2KfYtNiq2YYg2LPbjNmFINqp2KfYsdiqINiv24zar9ixINio2Kcg2KfYsdin2KbZh+KAjtiv2YfZhtiv2Ycg2LPYsdmI24zYsyDYqNuM4oCO2LPbjNmFINiu2YjYryDYqtmF2KfYsyDYqNqv24zYsduM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+Itiz24zZhSDaqdin2LHYqiDZgtmB2YQg2LTYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+Itiz24zZhSDaqdin2LHYqiDYqNinIFBVSyDZgtmB2YQg2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IuKAj9iz24zZhSDaqdin2LHYqiDYqNinIFBVSyDZgtmB2YQg2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+Itiv2LHYrdin2YQg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2LPbjNmFINqp2KfYsdiqLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDYp9io2LLYp9ix2qkgJTIkZCDYp9iyICUzJGQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiLigI8lMSRzLiDYp9io2LLYp9ix2qkgJTIkZCDYp9iyICUzJGQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+Itin2KjYstin2LHaqSDYp9i22KfZgdmHINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i2K7Yp9mE24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+ItmF2YbYt9mC2Ycg2KjYp9iy2q/YtNin24zbjCDar9iz2KrYsdiv2Ycg2LTYry4iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i2K/aqdmF2Ycg2KrZiNmC2YEg2YXZiNmC2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+Itiv2qnZhdmHINm+2K7YtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i2K/aqdmF2Ycg2KrZiNmC2YEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i2LHYo9uMINmF2YjYp9mB2YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLYsdij24wg2YXYrtin2YTZgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+ItmC2YTYqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+Itio2LHYp9uMINin2K/Yp9mF2Ycg2YLZgdmEINix2Kcg2KjYp9iyINqp2YbbjNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i2LHYp9mH4oCM2KfZhtiv2KfYstuMINmE2LrZiCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+Itis2YfYqiDYrdiw2YHYjCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDYsdinINio2qnYtNuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INm+2KfaqSDZhtiu2YjYp9mH2K8g2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSwxOCArMTEyLDE3IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i2b7bjNmGINqp2K8g2K/ZhNiu2YjYp9mHINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i2KrYo9uM24zYryDZvtuM2YYg2qnYryDYr9mE2K7ZiNin2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Itio2KfYstqv2LTYp9uM24wg2YLZgdmEINiz24zZhSDaqdin2LHYqi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Itm+24zZhiDaqdivINin2LTYqtio2KfZhyDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i24zaqSDZvtuM2YYg27Qg2KrYpyDbuCDYsdmC2YXbjCDYsdinINiq2KfbjNm+INqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+Itm+24zZhiDaqdivINio2KfbjNivINu4INi52K/YryDbjNinINio24zYtNiq2LEg2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i2b7bjNmGINqp2K8g2LXYrduM2K0g2LHYpyDYr9mI2KjYp9ix2Ycg2YjYp9ix2K8g2qnZhtuM2K8uINiq2YTYp9i04oCM2YfYp9uMINmF2qnYsdixINio2YfigIzYt9mI2LEg2K/Yp9im2YUg2LPbjNmFINqp2KfYsdiqINix2Kcg2LrbjNix2YHYudin2YQg2K7ZiNin2YfYryDaqdix2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+Itm+24zZhiDaqdiv2YfYpyDZhdmG2LfYqNmCINmG24zYs9iq2YbYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Itiq2YTYp9i04oCO2YfYp9uMINiy24zYp9iv24wg2KjYsdin24wg2qnYtNuM2K/ZhiDYp9mE2q/ZiCDYtdmI2LHYqiDar9ix2YHYqtmHINin2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLYqNix2KfbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhNiMINio2Kcg2K3Ys9in2KggR29vZ2xlINiu2YjYryDZiNin2LHYryDYs9uM2LPYqtmFINi02YjbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuKAj9iq2YTYp9i04oCO2YfYp9uMINiy24zYp9iv24wg2KjYsdin24wg2qnYtNuM2K/ZhiDYp9mE2q/ZiCDYtdmI2LHYqiDar9ix2YHYqtmHINin2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLigI/YqNix2KfbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhNiMINio2Kcg2K3Ys9in2KggR29vZ2xlINiu2YjYryDZiNin2LHYryDYs9uM2LPYqtmFINi02YjbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i2YbYp9mFINqp2KfYsdio2LHbjCAo2KfbjNmF24zZhCkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+Itqv2LDYsdmI2KfamNmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLZiNix2YjYryDYqNmHINiz24zYs9iq2YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+ItmG2KfZhSDaqdin2LHYqNix24wg24zYpyDar9iw2LHZiNin2pjZhyDZhtin2YXYudiq2KjYsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i2YbYp9mFINqp2KfYsdio2LHbjCDbjNinINqv2LDYsdmI2KfamNmHINiu2YjYryDYsdinINmB2LHYp9mF2YjYtCDaqdix2K/bjNiv2J9cbtin2LIgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iINio2KfYstiv24zYryDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4oCP2YbYp9mFINqp2KfYsdio2LHbjCDbjNinINqv2LDYsdmI2KfamNmHINiu2YjYryDYsdinINmB2LHYp9mF2YjYtCDaqdix2K/bjNiv2J9cbtin2LIgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iINio2KfYstiv24zYryDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLYr9ix2K3Yp9mEINio2LHYsdiz24wg2K3Ys9in2KguLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Itm+24zZhiDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINiq2KfbjNm+INqp2LHYr9uM2K8uIFxuXG7ZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLar9iw2LHZiNin2pjZhyDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINiq2KfbjNm+INqp2LHYr9uM2K8uIFxuXG7ZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KQEAgLTEyNSwxMCArMTMxLDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i2LTZhdinINio2Ycg2KfYtNiq2KjYp9mHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9mC2K/Yp9mFINio2Ycg2KjYp9iyINqp2LHYr9mGINmC2YHZhCDYqtmE2YHZhiDaqdix2K/Zh+KAjNin24zYry4g2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INiq2YTYp9i0INmG2KfZhdmI2YHZgiDYr9uM2q/YsdiMINiq2YTZgdmGINio2Ycg2b7bjNi04oCM2YHYsdi2INqp2KfYsdiu2KfZhtmHINio2KfYstmG2LTYp9mG24wg2YXbjOKAjNi02YjYryDZiCDYqtmF2KfZhSDYr9in2K/Zh+KAjNmH2KfbjCDaqdin2LHYqNixINin2LIg2K/Ys9iqINiu2YjYp9mH2K8g2LHZgdiqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4i2LTZhdinINio2Ycg2KfYtNiq2KjYp9mHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfZgtiv2KfZhSDYqNmHINio2KfYsiDaqdix2K/ZhiDZgtmB2YQg2LHYp9uM2KfZhtmHINmE2YjYrduMINqp2LHYr9mH4oCM2KfbjNivLiDYsdin24zYp9mG2Ycg2YTZiNit24wg2KfaqdmG2YjZhiDYqNmHINm+24zYtOKAjNmB2LHYtiDaqdin2LHYrtin2YbZhyDYqNin2LLZhti02KfZhtuMINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4i2LTZhdinINio2Ycg2KfYtNiq2KjYp9mHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfZgtiv2KfZhSDYqNmHINio2KfYsiDaqdix2K/ZhiDZgtmB2YQg2KrZhNmB2YYg2qnYsdiv2YfigIzYp9uM2K8uINin24zZhiDYqtmE2YHZhiDYp9qp2YbZiNmGINio2Ycg2b7bjNi04oCM2YHYsdi2INqp2KfYsdiu2KfZhtmHINio2KfYstmG2LTYp9mG24wg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCO2KfbjNivLiDYqNi52K8g2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINix2KfbjNin2YbZhyDZhNmI2K3bjCDYrtmI2K8g2LHYpyDYqNin2LIg2qnZhtuM2K8uXG5cbiDZhNi32YHYp9mLINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLYtNmF2Kcg2KfZhNqv2YjbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhCDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINqp2LTbjNiv2YfigIzYp9uM2K8uINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINiq2YTZgdmGINiu2YjYryDYsdinINio2KfYsiDaqdmG24zYry5cblxuINmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4oCP2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCO2KfbjNivLiDYqNi52K8g2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINix2KfbjNin2YbZhyDZhNmI2K3bjCDYrtmI2K8g2LHYpyDYqNin2LIg2qnZhtuM2K8uXG5cbiDZhNi32YHYp9mLINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLigI/YtNmF2Kcg2KfZhNqv2YjbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhCDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINqp2LTbjNiv2YfigIzYp9uM2K8uINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINiq2YTZgdmGINiu2YjYryDYsdinINio2KfYsiDaqdmG24zYry5cblxuINmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLYrdiw2YEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Itqp2K8g2b7bjNmGINiz24zZhSDaqdin2LHYqiDYp9i02KrYqNin2Ycg2KfYs9iq2Iwg2KfaqdmG2YjZhiDYqNix2KfbjCDar9i02YjYr9mGINmC2YHZhCDYr9iz2Krar9in2YfYqtin2YYg2KjYp9uM2K8g2KjYpyDYtNix2qnYqiDZhdiu2KfYqNix2KfYqtuMINiq2YXYp9izINio2q/bjNix24zYry4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+Itqp2K8g2b7bjNmGINiz24zZhSDaqdin2LHYqiDYp9i02KrYqNin2Ycg2KfYs9iq2IwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INio2KfYsSDYr9uM2q/YsSDZhduM4oCM2KrZiNin2YbbjNivINiq2YTYp9i0INqp2YbbjNivINmIINm+2LMg2KfYsiDYotmGINio2LHYp9uMINqv2LTZiNiv2YYg2YLZgdmEINiv2LPYqtqv2KfZh9iq2KfZhiDYqNin24zYryDYqNinINi02LHaqdiqINmF2K7Yp9io2LHYp9iq24wg2KrZhdin2LMg2Kjar9uM2LHbjNivLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+Itqp2K8g2b7bjNmGINiz24zZhSDaqdin2LHYqiDYp9i02KrYqNin2Ycg2KfYs9iq2IwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INio2KfYsSDYr9uM2q/YsSDZhduM4oCM2KrZiNin2YbbjNivINiq2YTYp9i0INqp2YbbjNivLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4i2LPbjNmFINqp2KfYsdiqINi624zYsSDZgtin2KjZhCDYp9iz2KrZgdin2K/ZhyDYp9iz2KouINio2Kcg2LTYsdqp2Kog2YXYrtin2KjYsdin2KrbjOKAjNiq2KfZhiDYqtmF2KfYsyDYqNqv24zYsduM2K8uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLigI/aqdivIFBVSyDYs9uM2YUg2qnYp9ix2Kog2KfYtNiq2KjYp9mHINin2LPYqtiMIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2K/bjNqv2LEg2YXbjOKAjNiq2YjYp9mG24zYryDYqtmE2KfYtCDaqdmG24zYryDZiCDZvtizINin2LIg2KLZhiDYs9uM2YUg2qnYp9ix2Kog2KjZhyDYtdmI2LHYqiDYr9in2KbZhSDYutuM2LEg2YLYp9io2YQg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjNi02YjYry4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiLigI/aqdivIFBVSyDYs9uM2YUg2qnYp9ix2Kog2KfYtNiq2KjYp9mHINin2LPYqtiMIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2K/bjNqv2LEg2YXbjOKAjNiq2YjYp9mG24zYryDYqtmE2KfYtCDaqdmG24zYryDZiCDZvtizINin2LIg2KLZhiDYs9uM2YUg2qnYp9ix2Kog2KjZhyDYt9mI2LEg2K/Yp9im2YUg2LrbjNixINmC2KfYqNmEINin2LPYqtmB2KfYr9mHINmF24zigIzYtNmI2K8uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiLYudmF2YTbjNin2Kog2b7bjNmGINiz24zZhSDaqdin2LHYqiDZhtin2YXZiNmB2YIg2KjZiNivISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4i4oCP2LnZhdmE24zYp9iqIFBVSyDYs9uM2YUg2qnYp9ix2Kog2YbYp9mF2YjZgdmCINio2YjYryEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i2qnYryDZvtiw24zYsdmB2KrZhyDYtNivISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+Itiv2qnZhdmHINiq2LHYp9qpINmC2KjZhNuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i2K/aqdmF2Ycg2KrYsdin2qkg2KjYudiv24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i2K/aqdmF2Ycg2KrZiNmC2YEg2YXZiNmC2KoiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbAppbmRleCBkYmNhNTBkLi5lMDc5ZmZhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkFubmEgUElOLWtvb2RpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iQW5uYSBQVUsta29vZGkgamEgdXVzaSBQSU4ta29vZGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSy1rb29kaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iVXVzaSBQSU4ta29vZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJBbm5hIFNJTS1rb3J0aW4gUFVLLWtvb2RpIGphIHV1c2kgUElOLWtvb2RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJTSU0ta29ydGluIFBVSy1rb29kaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iVXVzaSBTSU0ta29ydGluIFBJTi1rb29kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+Iktvc2tldGEgamEgYW5uYSBzYWxhc2FuYSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IlBvaXN0YSBsdWtpdHVzIGFudGFtYWxsYSBzYWxhc2FuYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IlBvaXN0YSBsdWtpdHVzIGFudGFtYWxsYSBQSU4ta29vZGkiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iVGF1a28tcGFpbmlrZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iVG9pc3RhLXBhaW5pa2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+Iktlc2tleXTDpC1wYWluaWtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlR5a2vDpMOkbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IkVuIHR5a2vDpMOkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iU3lkw6RuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iSmF0a2EgcG9pc3RhbWFsbGEgbHVraXR1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkvDpHlubmlzdHlzIHBlcnV1dGV0dHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iUG9pc3RhIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHB1ZG90dGFtYWxsYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iS29oZGV0dGEgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gZWkgcG9pc3RldGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJBbm5hIGhhbHVhbWFzaSBQSU4ta29vZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iVmFodmlzdGEgaGFsdWFtYXNpIFBJTi1rb29kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNLWtvcnRpbiBsdWtpdHVzdGEgcG9pc3RldGFhbuKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IlZpcmhlZWxsaW5lbiBQSU4ta29vZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iQW5uYSA04oCTOC1udW1lcm9pbmVuIFBJTi1rb29kaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsta29vZGlzc2EgdHVsZWUgb2xsYSB2w6RoaW50w6TDpG4gOCBudW1lcm9hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkFubmEgdXVkZWxsZWVuIG9pa2VhIFBVSy1rb29kaS4gSm9zIHRlZXQgbGlpYW4gbW9udGEgeXJpdHlzdMOkLCBTSU0ta29ydHRpIHBvaXN0ZXRhYW4ga8OkeXTDtnN0w6QgcHlzeXbDpHN0aS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlBpaXJzaXQgbHVraXR1a3NlbnBvaXN0b2t1dmlvbiB2w6TDpHJpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXJ0YWEuIEpvcyBwaWlycsOkdCBrdXZpb24gdsOkw6RyaW4gdmllbMOkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGtlcnRhYSwgc2ludWEgcHl5ZGV0w6TDpG4gcG9pc3RhbWFhbiBwdWhlbGltZXNpIGx1a2l0dXMgc8OkaGvDtnBvc3RpdGlsaW4gYXZ1bGxhLlxuXG4gWXJpdMOkIHV1ZGVsbGVlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bm5pbiBrdWx1dHR1YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJQb2lzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlZpcmhlZWxsaW5lbiBTSU0ta29ydGluIFBJTi1rb29kaS4gU2ludW4gb24gbnl0IG90ZXR0YXZhIHlodGV5cyBvcGVyYWF0dG9yaWluIGxhaXR0ZWVuIGx1a2l0dWtzZW4gYXZhYW1pc2Vrc2kuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJWaXJoZWVsbGluZW4gU0lNLWtvcnRpbiBQSU4ta29vZGkuIFNpbnVsbGEgb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHlyaXR5cyBqw6RsamVsbMOkLCBlbm5lbiBrdWluIHNpbnVuIG9uIG90ZXR0YXZhIHlodGV5cyBvcGVyYWF0dG9yaWluIGxhaXR0ZWVuIGx1a2l0dWtzZW4gYXZhYW1pc2Vrc2kuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iVmlyaGVlbGxpbmVuIFNJTS1rb3J0aW4gUElOLWtvb2RpLiBTaW51bGxhIG9uIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB5cml0eXN0w6QgasOkbGplbGzDpC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTS1rb3J0dGkgb24ga8OkeXR0w7ZrZWx2b3Rvbi4gT3RhIHlodGV5cyBvcGVyYWF0dG9yaWluLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iVmlyaGVlbGxpbmVuIFNJTS1rb3J0aW4gUFVLLWtvb2RpLiBTaW51bGxhIG9uIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB5cml0eXMgasOkbGplbGzDpCwgZW5uZW4ga3VpbiBTSU0ta29ydGlzdGEgdHVsZWUgcHlzeXbDpHN0aSBrw6R5dHTDtmtlbHZvdG9uLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IlZpcmhlZWxsaW5lbiBTSU0ta29ydGluIFBVSy1rb29kaS4gU2ludWxsYSBvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4geXJpdHlzdMOkIGrDpGxqZWxsw6QsIGVubmVuIGt1aW4gU0lNLWtvcnRpc3RhIHR1bGVlIHB5c3l2w6RzdGkga8OkeXR0w7ZrZWx2b3Rvbi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlNJTS1rb3J0aW4gUElOLXRvaW1pbnRvIGVww6Rvbm5pc3R1aSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTS1rb3J0aW4gUFVLLXRvaW1pbnRvIGVww6Rvbm5pc3R1aSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS29vZGkgaHl2w6Rrc3l0dHkhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iRWRlbGxpbmVuIGthcHBhbGUgLXBhaW5pa2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJTZXVyYWF2YSBrYXBwYWxlIC1wYWluaWtlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlRhdWtvLXBhaW5pa2UiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjI3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJTYWlzaXNzZXogbGUgTklQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IkVudHJleiBsZSBjb2RlwqBQVUsgZXQgbGUgbm91dmVhdSBOSVAgZGUgbGEgY2FydGUgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDb2RlIFBVSyBkZSBsYSBjYXJ0ZSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik5vdXZlYXUgTklQIGRlIGxhIGNhcnRlIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IkFwcHV5ZXIgcG91ciBzYWlzaXIgbW90IHBhc3NlIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iU2Fpc2lzc2V6IGxlIG1vdCBkZSBwYXNzZSBwb3VyIGTDqXZlcnJvdWlsbGVyIGxlIGNsYXZpZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iU2Fpc2lzc2V6IGxlIE5JUCBwb3VyIGTDqXZlcnJvdWlsbGVyIGxlIGNsYXZpZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iTklQIGVycm9uw6kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IlBvdXIgZMOpdmVycm91aWxsZXIgbGUgdMOpbMOpcGhvbmUsIGFwcHV5ZXogc3VyIFwiTWVudVwiLCBwdWlzIHN1ciAwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiJOb21icmUgbWF4aW1hbCBhdXRvcmlzw6kgZGUgdGVudGF0aXZlcyBGYWNlwqBVbmxvY2sgYXR0ZWludC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IkNoYXJnw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IkVuIGNoYXJnZSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqA8eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IkJyYW5jaGV6IHZvdHJlIGNoYXJnZXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4iQXBwdXlleiBzdXIgXCJNZW51XCIgcG91ciBkw6l2ZXJyb3VpbGxlciBsXCdhcHBhcmVpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+IlLDqXNlYXUgdmVycm91aWxsw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4iQXVjdW5lIGNhcnRlIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiJBdWN1bmUgY2FydGUgU0lNIG5cJ2VzdCBpbnPDqXLDqWUgZGFucyBsYSB0YWJsZXR0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IkF1Y3VuZSBjYXJ0ZSBTSU0gblwnZXN0IGluc8OpcsOpZSBkYW5zIGxlIHTDqWzDqXBob25lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJJbnPDqXJleiB1bmUgY2FydGXCoFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJDYXJ0ZcKgU0lNIGFic2VudGUgb3UgaWxsaXNpYmxlLiBWZXVpbGxleiBpbnPDqXJlciB1bmUgY2FydGXCoFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4iQ2FydGUgU0lNIGludXRpbGlzYWJsZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJWb3RyZSBjYXJ0ZcKgU0lNIGEgw6l0w6kgZMOpZmluaXRpdmVtZW50IGTDqXNhY3RpdsOpZS5cbiBWZXVpbGxleiBjb250YWN0ZXIgdm90cmUgb3DDqXJhdGV1ciBkZSB0w6lsw6lwaG9uaWUgbW9iaWxlIHBvdXIgZW4gb2J0ZW5pciB1bmUgYXV0cmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IkxhIGNhcnRlIFNJTSBlc3QgdmVycm91aWxsw6llLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4iTGEgY2FydGUgU0lNIGVzdCB2ZXJyb3VpbGzDqWUgcGFyIGNsw6kgUFVLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4iRMOpdmVycm91aWxsYWdlIGRlIGxhIGNhcnRlIFNJTSBlbiBjb3Vyc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4gV2lkZ2V0ICUyJGQgc3VyICUzJGQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IkFqb3V0ZXIgdW4gd2lkZ2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiJWaWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJEw6l2ZWxvcHBlbWVudCBkZSBsYSB6b25lIGRlIGTDqXZlcnJvdWlsbGFnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IlLDqWR1Y3Rpb24gZGUgbGEgem9uZSBkZSBkw6l2ZXJyb3VpbGxhZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiJXaWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4iU8OpbGVjdGV1ciBkXCd1dGlsaXNhdGV1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IsOJdGF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4iQ2Ftw6lyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJDb21tYW5kZXMgbXVsdGltw6lkaWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJEw6lidXQgZGUgbGEgcsOpb3JnYW5pc2F0aW9uIGRlcyB3aWRnZXRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4iRmluIGRlIGxhIHLDqW9yZ2FuaXNhdGlvbiBkZXMgd2lkZ2V0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4iTGUgd2lkZ2V0IDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IGEgw6l0w6kgc3VwcHJpbcOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IkTDqXZlbG9wcGVyIGxhIHpvbmUgZGUgZMOpdmVycm91aWxsYWdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4iRMOpdmVycm91aWxsYWdlIGVuIGZhaXNhbnQgZ2xpc3NlciB2b3RyZSBkb2lndCBzdXIgbFwnw6ljcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiJEw6l2ZXJyb3VpbGxhZ2UgcGFyIHNjaMOpbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IkTDqXZlcnJvdWlsbGFnZSBwYXIgcmVjb25uYWlzc2FuY2UgZmFjaWFsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJEw6l2ZXJyb3VpbGxhZ2UgcGFyIE5JUCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IkTDqXZlcnJvdWlsbGFnZSBwYXIgbW90IGRlIHBhc3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4iWm9uZSBkdSBzY2jDqW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IlpvbmUgb8O5IGZhaXJlIGdsaXNzZXIgdm90cmUgZG9pZ3Qgc3VyIGxcJ8OpY3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4iQm91dG9uIHBvdXIgcmV2ZW5pciBhdSB0aXRyZSBwcsOpY8OpZGVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MDczOTI4MzAwNDQ0OTA5MzIwIj4iQm91dG9uIHBvdXIgYXR0ZWluZHJlIGxlIHRpdHJlIHN1aXZhbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJCb3V0b24gZGUgcGF1c2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkJvdXRvbiBkZSBsZWN0dXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJCb3V0b24gZFwnYXJyw6p0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IkpcJ2FpbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJKZSBuXCdhaW1lIHBhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkPFk3VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iRMOpdmVycm91aWxsZXIgcG91ciBjb250aW51ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJMYW5jZW1lbnQgYW5udWzDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJEw6lwb3NleiA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBwb3VyIHN1cHByaW1lci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbmUgc2VyYSBwYXMgc3VwcHJpbcOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJBbm51bGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+IlN1cHByaW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4iVGVybWluw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiJDaGFuZ2VtZW50IGRlIG1vZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJNYWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRyw6llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJEw6l2ZXJyb3VpbGxlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJBcHBhcmVpbCBwaG90byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJNb2RlIHNpbGVuY2lldXgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU29uIGFjdGl2w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlJlY2hlcmNoZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJGYWlyZSBnbGlzc2VyIGxlIGRvaWd0IHZlcnMgbGUgaGF1dMKgOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJGYWlyZSBnbGlzc2VyIGxlIGRvaWd0IHZlcnMgbGUgYmFzwqA6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkZhaXRlcyBnbGlzc2VyIHZvdHJlIGRvaWd0IHZlcnMgbGEgZ2F1Y2hlwqBwb3VyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iRmFpdGVzIGdsaXNzZXIgdm90cmUgZG9pZ3QgdmVycyBsYSBkcm9pdGUgcG91ciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJVdGlsaXNhdGV1ciBhY3R1ZWzCoDogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJBcHBlbCBkXCd1cmdlbmNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iSlwnYWkgb3VibGnDqSBsZSBzY2jDqW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiJTY2jDqW1hIGluY29ycmVjdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiJNb3QgZGUgcGFzc2UgaW5jb3JyZWN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJOSVAgaW5jb3JyZWN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iUsOpZXNzYXlleiBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzZWNvbmRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IkRlc3NpbmV6IHZvdHJlIHNjaMOpbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iU2Fpc2lzc2V6IGxlIE5JUCBkZSBsYSBjYXJ0ZSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IlNhaXNpc3NleiBsZSBOSVAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IlNhaXNpc3NleiB2b3RyZSBtb3QgZGUgcGFzc2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iTGEgY2FydGUgU0lNIGVzdCBtYWludGVuYW50IGTDqXNhY3RpdsOpZS4gU2Fpc2lzc2V6IGxlIGNvZGUgUFVLIHBvdXIgY29udGludWVyLiBDb250YWN0ZXogdm90cmUgb3DDqXJhdGV1ciBwb3VyIGVuIHNhdm9pciBwbHVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJTYWlzaXIgbGUgTklQIHNvdWhhaXTDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtZXIgbGUgTklQIHNvdWhhaXTDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iRMOpYmxvY2FnZSBkZSBsYSBjYXJ0ZSBTSU0gZW4gY291cnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJTYWlzaXNzZXogdW4gTklQIGNvbXByZW5hbnQgZW50cmUgcXVhdHJlIGV0IGh1aXTCoGNoaWZmcmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iTGUgY29kZSBQVUsgZG9pdCBjb250ZW5pciBhdSBtb2lucyA4wqBjaGlmZnJlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJWZXVpbGxleiBzYWlzaXIgZGUgbm91dmVhdSBsZSBjb2RlIFBVSyBjb3JyZWN0LiBEZXMgdGVudGF0aXZlcyByw6lww6l0w6llcyBkw6lzYWN0aXZlbnQgZMOpZmluaXRpdmVtZW50IGxhIGNhcnRlIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iTGVzIGNvZGVzIFBJTiBuZSBjb3JyZXNwb25kZW50IHBhcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJUcm9wIGRlIHRlbnRhdGl2ZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IlBvdXIgZMOpdmVycm91aWxsZXIgbFwnYXBwYXJlaWwsIGNvbm5lY3Rlei12b3VzIGF2ZWMgdm90cmUgY29tcHRlIEdvb2dsZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+Ik5vbSBkXCd1dGlsaXNhdGV1ciAoY291cnJpZWwpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiJNb3QgZGUgcGFzc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IkNvbm5leGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4iTm9tIGRcJ3V0aWxpc2F0ZXVyIG91IG1vdCBkZSBwYXNzZSBub24gdmFsaWRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiJWb3VzIGF2ZXogb3VibGnDqSB2b3RyZSBub20gZFwndXRpbGlzYXRldXIgb3Ugdm90cmUgbW90IGRlIHBhc3NlP1xuUmVuZGV6LXZvdXMgc3VyIGxhIHBhZ2UgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IlbDqXJpZmljYXRpb24gZHUgY29tcHRlIGVuIGNvdXJz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJWb3VzIGF2ZXogc2Fpc2kgdW4gTklQIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFxuXG5WZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJWb3VzIGF2ZXogc2Fpc2kgdW4gbW90IGRlIHBhc3NlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFxuXG5WZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJWb3VzIGF2ZXogZGVzc2luw6kgdW4gc2Now6ltYSBkZSBkw6l2ZXJyb3VpbGxhZ2UgaW5jb3JyZWN0IMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy5cblxuVmV1aWxsZXogcsOpZXNzYXllciBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBzZWNvbmRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxhIHRhYmxldHRlIGRlIGZhw6dvbiBpbmNvcnJlY3RlIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2kgdm91cyDDqWNob3VleiBlbmNvcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoGZvaXMsIHNhIGNvbmZpZ3VyYXRpb24gZFwndXNpbmUgc2VyYSByw6l0YWJsaWUsIGV0IHRvdXRlcyBsZXMgZG9ubsOpZXMgdXRpbGlzYXRldXIgc2Vyb250IHBlcmR1ZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgbGUgdMOpbMOpcGhvbmUgZGUgZmHDp29uIGluY29ycmVjdGUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBTaSB2b3VzIMOpY2hvdWV6IGVuY29yZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPsKgZm9pcywgc2EgY29uZmlndXJhdGlvbiBkXCd1c2luZSBzZXJhIHLDqXRhYmxpZSwgZXQgdG91dGVzIGxlcyBkb25uw6llcyB1dGlsaXNhdGV1ciBzZXJvbnQgcGVyZHVlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgbGEgdGFibGV0dGUgZGUgZmHDp29uIGluY29ycmVjdGUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2EgY29uZmlndXJhdGlvbiBkXCd1c2luZSB2YSDDqnRyZSByw6l0YWJsaWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4iVm91cyBhdmV6IHRlbnTDqSBkZSBkw6l2ZXJyb3VpbGxlciBsZSB0w6lsw6lwaG9uZSBkZSBmYcOnb24gaW5jb3JyZWN0ZSDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBTYSBjb25maWd1cmF0aW9uIGRcJ3VzaW5lIHZhIMOqdHJlIHLDqXRhYmxpZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iVm91cyBhdmV6IGRlc3NpbsOpIHVuIHNjaMOpbWEgZGUgZMOpdmVycm91aWxsYWdlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFNpIHZvdXMgw6ljaG91ZXogZW5jb3JlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBmb2lzLCB2b3VzIGRldnJleiBkw6l2ZXJyb3VpbGxlciB2b3RyZSB0YWJsZXR0ZSDDoCBsXCdhaWRlIGRcJ3VuIGNvbXB0ZSBkZSBtZXNzYWdlcmllIMOpbGVjdHJvbmlxdWUuXG5cbiBWZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iVm91cyBhdmV6IGRlc3NpbsOpIHVuIHNjaMOpbWEgZGUgZMOpdmVycm91aWxsYWdlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFNpIHZvdXMgw6ljaG91ZXogZW5jb3JlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBmb2lzLCB2b3VzIGRldnJleiBkw6l2ZXJyb3VpbGxlciB2b3RyZSB0w6lsw6lwaG9uZSDDoCBsXCdhaWRlIGRcJ3VuIGNvbXB0ZSBkZSBtZXNzYWdlcmllIMOpbGVjdHJvbmlxdWUuXG5cbiBWZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlN1cHByaW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iTklQIGRlIGNhcnRlIFNJTSBpbmNvcnJlY3QuIFZvdXMgZGV2ZXogbWFpbnRlbmFudCBjb21tdW5pcXVlciBhdmVjIHZvdHJlIGZvdXJuaXNzZXVyIGRlIHNlcnZpY2VzIHBvdXIgZMOpdmVycm91aWxsZXIgdm90cmUgYXBwYXJlaWwuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJOSVAgZGUgY2FydGUgU0lNIGluY29ycmVjdC4gSWwgdm91cyByZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZlLiBBcHLDqHMgY2VsYSwgdm91cyBkZXZyZXogY29tbXVuaXF1ZXIgYXZlYyB2b3RyZSBmb3Vybmlzc2V1ciBkZSBzZXJ2aWNlcyBwb3VyIGTDqXZlcnJvdWlsbGVyIHZvdHJlIGFwcGFyZWlsLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+Ik5JUCBkZSBjYXJ0ZSBTSU0gaW5jb3JyZWN0LiBJbCB2b3VzIHJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmUocykuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJMYSBjYXJ0ZSBTSU0gZXN0IGludXRpbGlzYWJsZS4gQ29tbXVuaXF1ZXogYXZlYyB2b3RyZSBmb3Vybmlzc2V1ciBkZSBzZXJ2aWNlcy4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkNvZGUgUFVLIGRlIGxhIGNhcnRlIFNJTSBpbmNvcnJlY3QuIElsIHZvdXMgcmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2ZSBhdmFudCBxdWUgdm90cmUgY2FydGUgU0lNIGRldmllbm5lIGTDqWZpbml0aXZlbWVudCBpbnV0aWxpc2FibGUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iQ29kZSBQVUsgZGUgbGEgY2FydGUgU0lNIGluY29ycmVjdC4gSWwgdm91cyByZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZlKHMpIGF2YW50IHF1ZSB2b3RyZSBjYXJ0ZSBTSU0gZGV2aWVubmUgZMOpZmluaXRpdmVtZW50IGludXRpbGlzYWJsZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IkxlIGTDqXZlcnJvdWlsbGFnZSBwYXIgTklQIGRlIGxhIGNhcnRlIFNJTSBhIMOpY2hvdcOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iTGUgZMOpdmVycm91aWxsYWdlIGRlIGxhIGNhcnRlIFNJTSBwYXIgY29kZSBQVUsgYSDDqWNob3XDqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iQ29kZSBhY2NlcHTDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IkJvdXRvbiBwb3VyIHJldmVuaXIgYXUgdGl0cmUgcHLDqWPDqWRlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJCb3V0b24gcG91ciBhdHRlaW5kcmUgbGUgdGl0cmUgc3VpdmFudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJCb3V0b24gZGUgcGF1c2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiJCb3V0b24gZGUgbGVjdHVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+IkJvdXRvbiBkXCdhcnLDqnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4iQXVjdW4gc2VydmljZSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKaW5kZXggMjUwYTEzNi4uYjkxMGRkNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJTYWlzaXNzZXogbGUgY29kZcKgUElOLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlNhaXNpc3NleiBsYSBjbMOpwqBQVUsgZXQgbGUgbm91dmVhdSBjb2RlwqBQSU4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDb2RlIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTm91dmVhdSBjb2RlwqBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJTYWlzaXNzZXogbGEgY2zDqSBQVUsgZXQgbGUgbm91dmVhdSBjb2RlIFBJTiBkZSBsYSBjYXJ0ZSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDbMOpIFBVSyBkZSBsYSBjYXJ0ZSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik5vdXZlYXUgY29kZSBQSU4gZGUgbGEgY2FydGUgU0lNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iQXBwdXlleiBwb3VyIHNhaXNpciBtb3QgcGFzc2UiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJTYWlzaXNzZXogbGUgbW90IGRlIHBhc3NlIHBvdXIgZMOpdmVycm91aWxsZXIgbGUgY2xhdmllci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJTYWlzaXNzZXogbGUgY29kZcKgUElOIHBvdXIgZMOpdmVycm91aWxsZXIgbGUgY2xhdmllci4iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iQm91dG9uIGRlIHBhdXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJCb3V0b24gZGUgbGVjdHVyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iQm91dG9uIGRcJ2FycsOqdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJKXCdhaW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iSmUgblwnYWltZSBwYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJDxZN1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkTDqXZlcnJvdWlsbGV6IGxcJ2FwcGFyZWlsIHBvdXIgY29udGludWVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkxhbmNlbWVudCBhbm51bMOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJSZWzDomNoZXogbGUgd2lkZ2V0IFwiPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz5cIiBwb3VyIGxlIHN1cHByaW1lci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iTGUgd2lkZ2V0IFwiPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz5cIiBuZSB2YSBwYXMgw6p0cmUgc3VwcHJpbcOpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iU2Fpc2lyIGxlIGNvZGUgUElOIHNvdWhhaXTDqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtZXIgbGUgY29kZSBQSU4gc291aGFpdMOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJEw6libG9jYWdlIGRlIGxhIGNhcnRlIFNJTSBlbiBjb3Vyc+KApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkxlIGNvZGUgUElOIGVzdCBlcnJvbsOpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlZldWlsbGV6IHNhaXNpciB1biBjb2RlIFBJTiBjb21wcmVuYW50IGVudHJlIHF1YXRyZSBldCBodWl0wqBjaGlmZnJlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJMZSBjb2RlIFBVSyBkb2l0IGNvbnRlbmlyIGF1IG1vaW5zIDjCoGNoaWZmcmVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlZldWlsbGV6IHNhaXNpciBkZSBub3V2ZWF1IGxlIGNvZGUgUFVLIGNvcnJlY3QuIERlcyB0ZW50YXRpdmVzIHLDqXDDqXTDqWVzIGTDqXNhY3RpdmVudCBkw6lmaW5pdGl2ZW1lbnQgbGEgY2FydGUgU0lNLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iVm91cyBhdmV6IGRlc3NpbsOpIHVuIHNjaMOpbWEgZGUgZMOpdmVycm91aWxsYWdlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFNpIHZvdXMgw6ljaG91ZXogZW5jb3JlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBmb2lzLCB2b3VzIGRldnJleiBkw6l2ZXJyb3VpbGxlciB2b3RyZSB0w6lsw6lwaG9uZSDDoCBsXCdhaWRlIGRcJ3VuIGNvbXB0ZSBkZSBtZXNzYWdlcmllIMOpbGVjdHJvbmlxdWUuXG5cbiBWZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlN1cHByaW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iQ29kZSBQSU4gZGUgbGEgY2FydGUgU0lNIGluY29ycmVjdC4gVm91cyBkZXZleiBkw6lzb3JtYWlzIGNvbnRhY3RlciB2b3RyZSBvcMOpcmF0ZXVyIHBvdXIgZMOpdmVycm91aWxsZXIgdm90cmUgYXBwYXJlaWwuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJDb2RlIFBJTiBkZSBsYSBjYXJ0ZSBTSU0gaW5jb3JyZWN0LiBJbCB2b3VzIHJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgdGVudGF0aXZlLiBBcHLDqHMgY2VsYSwgdm91cyBkZXZyZXogY29udGFjdGVyIHZvdHJlIG9ww6lyYXRldXIgcG91ciBkw6l2ZXJyb3VpbGxlciB2b3RyZSBhcHBhcmVpbC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJDb2RlIFBJTiBkZSBsYSBjYXJ0ZSBTSU0gaW5jb3JyZWN0LiBJbCB2b3VzIHJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgdGVudGF0aXZlcy4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IkxhIGNhcnRlIFNJTSBlc3QgaW51dGlsaXNhYmxlLiBWZXVpbGxleiBjb250YWN0ZXIgdm90cmUgb3DDqXJhdGV1ci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkNsw6kgUFVLIGRlIGxhIGNhcnRlIFNJTSBpbmNvcnJlY3RlLiBJbCB2b3VzIHJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgdGVudGF0aXZlIGF2YW50IHF1ZSB2b3RyZSBjYXJ0ZSBTSU0gbmUgZGV2aWVubmUgZMOpZmluaXRpdmVtZW50IGludXRpbGlzYWJsZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJDbMOpIFBVSyBkZSBsYSBjYXJ0ZSBTSU0gaW5jb3JyZWN0ZS4gSWwgdm91cyByZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHRlbnRhdGl2ZXMgYXZhbnQgcXVlIHZvdHJlIGNhcnRlIFNJTSBuZSBkZXZpZW5uZSBkw6lmaW5pdGl2ZW1lbnQgaW51dGlsaXNhYmxlLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iw4ljaGVjIGR1IGTDqXZlcnJvdWlsbGFnZSDDoCBsXCdhaWRlIGR1IGNvZGUgUElOIGRlIGxhIGNhcnRlIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IsOJY2hlYyBkdSBkw6l2ZXJyb3VpbGxhZ2Ugw6AgbFwnYWlkZSBkZSBsYSBjbMOpIFBVSyBkZSBsYSBjYXJ0ZSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkNvZGUgYWNjZXB0w6kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iQm91dG9uIHBvdXIgcmV2ZW5pciBhdSB0aXRyZSBwcsOpY8OpZGVudCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IkJvdXRvbiBwb3VyIGF0dGVpbmRyZSBsZSB0aXRyZSBzdWl2YW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IkJvdXRvbiBkZSBwYXVzZSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmluZGV4IDcxNGQ5ZmIuLjhjOTRlYjMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i4KSq4KS/4KSoIOCkleCli+CkoSDgpLLgpL/gpJbgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsg4KSU4KSwIOCkqOCkr+CkviDgpKrgpL/gpKgg4KSV4KWL4KShIOCksuCkv+CkluClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIOCkleCli+CkoSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4KSo4KSv4KS+IOCkquCkv+CkqCDgpJXgpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLgpLjgpL/gpK4gUFVLIOCklOCksCDgpKjgpK/gpL4gUElOIOCkleCli+CkoSDgpLLgpL/gpJbgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IuCkuOCkv+CkriBQVUsg4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLgpKjgpK/gpL4g4KS44KS/4KSuIFBJTiDgpJXgpYvgpKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSy4KS/4KSW4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4KSq4KSw4KWN4KS2IOCkleCksOClh+CkgiI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IuCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSy4KS/4KSW4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkquCkv+CkqCDgpLLgpL/gpJbgpYfgpIIiPC9zdHJpbmc+CkBAIC02MCwxNyArNjAsMjQgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4i4KS14KS/4KSc4KWH4KSfIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOCkleCliyDgpLngpJ/gpL4g4KSm4KS/4KSv4KS+IOCkl+Ckr+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLgpIXgpKjgpLLgpYngpJUg4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkteCkv+CkuOCljeCkpOClg+CkpCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i4KS44KWN4KSy4KS+4KSH4KShIOCkheCkqOCksuClieCklS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IuCkquCljeCksOCkpOCkv+CkruCkvuCkqCDgpIXgpKjgpLLgpYngpJUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLgpIbgpJXgpL7gpLAg4KSF4KSo4KSy4KWJ4KSVLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i4KSr4KWH4KS4IOCkheCkqOCksuClieCklS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4i4KSq4KS/4KSoIOCkheCkqOCksuClieCklS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSF4KSo4KSy4KWJ4KSVLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IuCkquCljeCksOCkpOCkv+CkruCkvuCkqCDgpJXgpY3gpLfgpYfgpKTgpY3gpLAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i4KSG4KSV4KS+4KSwIOCkleCljeCkt+Clh+CkpOCljeCksC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i4KS44KWN4KSy4KS+4KSH4KShIOCkleCljeCkt+Clh+CkpOCljeCksC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+IuCkquCkv+Ckm+CksuCkviDgpJ/gpY3gpLDgpYjgpJUg4KSs4KSf4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiLgpIXgpJfgpLLgpL4g4KSf4KWN4KSw4KWI4KSVIOCkrOCkn+CkqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IuCkquClieCknOCkvCDgpJXgpLDgpYfgpIIg4KSs4KSf4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLgpJrgpLLgpL7gpI/gpIIg4KSs4KSf4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLgpLDgpYvgpJXgpYfgpIIg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IuCkquCkuOCkguCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IuCkqOCkvuCkquCkuOCkguCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IuCkpuCkv+CksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IuCknOCkvuCksOClgCDgpLDgpJbgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i4KSy4KWJ4KSo4KWN4oCN4KSaIOCksOCkpuCljeCkpiDgpJXgpLAg4KSm4KS/4KSv4KS+IOCkl+Ckr+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLgpLngpJ/gpL7gpKjgpYcg4KSV4KWHIOCksuCkv+CkjyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgpJbgpYDgpILgpJrgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOCkleCliyDgpKjgpLngpYDgpIIg4KS54KSf4KS+4KSv4KS+IOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTkyLDEyICs5OSwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgpJXgpYcg4KSy4KS/4KSPIOCkpuCkvuCkj+CkgiDgpLjgpY3igI3gpLLgpL7gpIfgpKEg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLgpIbgpKrgpL7gpKTgpJXgpL7gpLLgpYDgpKgg4KSV4KWJ4KSyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4KSq4KWN4KSw4KSk4KS/4KSu4KS+4KSoIOCkreClguCksiDgpJfgpI8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IuCkl+CksuCkpCDgpKrgpY3gpLDgpKTgpL/gpK7gpL7gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLgpIbgpJXgpL7gpLAg4KSt4KWC4KSyIOCkl+CkjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i4KSX4KSy4KSkIOCkhuCkleCkvuCksCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IuCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i4KSX4KSy4KSkIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i4KSF4KSq4KSo4KS+IOCkquCljeCksOCkpOCkv+CkruCkvuCkqCDgpIbgpLDgpYfgpJbgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLgpIXgpKrgpKjgpL4g4KSG4KSV4KS+4KSwIOCkhuCksOClh+CkluCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLgpLjgpL/gpK4gUElOIOCkoeCkvuCksuClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUElOIOCkoeCkvuCksuClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSh4KS+4KSy4KWH4KSCIjwvc3RyaW5nPgpAQCAtMTA1LDMwICsxMTIsNDIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLgpIfgpJrgpY3gpJvgpL/gpKQg4KSq4KS/4KSoIOCkleCli+CkoSDgpKHgpL7gpLLgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4KSH4KSa4KWN4KSb4KS/4KSkIOCkquCkv+CkqCDgpJXgpYvgpKEg4KSV4KWAIOCkquClgeCkt+CljeCkn+CkvyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSy4KWJ4KSVIOCkleCksCDgpLDgpLngpL4g4KS54KWI4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i4KSX4KSy4KSkIFBJTiDgpJXgpYvgpKEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4KSQ4KS44KS+IFBJTiDgpLLgpL/gpJbgpYfgpIIsIOCknOCliyA0IOCkuOClhyA4IOCkheCkguCkleCli+CkgiDgpJXgpL4g4KS54KWLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDgpJXgpYvgpKEgOCDgpK/gpL4g4KSF4KSn4KS/4KSVIOCkuOCkguCkluCljeCkr+CkviDgpLXgpL7gpLLgpL4g4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLgpLjgpLngpYAgUFVLIOCkleCli+CkoSDgpKrgpYHgpKg6IOCkoeCkvuCksuClh+Ckgi4g4KSs4KS+4KSwLeCkrOCkvuCksCDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KSo4KWHIOCkuOClhyDgpLjgpL/gpK4g4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkqiDgpLjgpYcg4KSF4KSV4KWN4KS34KSuIOCkueCliyDgpJzgpL7gpI/gpJfgpYAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IuCkquCkv+CkqCDgpJXgpYvgpKEg4KSV4KS+IOCkruCkv+CksuCkvuCkqCDgpKjgpLngpYDgpIIg4KS54KWL4KSk4KS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4KSs4KS54KWB4KSkIOCkheCkp+Ckv+CklSDgpKrgpY3gpLDgpKTgpL/gpK7gpL7gpKgg4KSq4KWN4KSw4KSv4KS+4KS4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+Ckjywg4KSF4KSq4KSo4KWHIEdvb2dsZSDgpJbgpL7gpKTgpYcg4KS44KWHIOCkuOCkvuCkh+CkqCDgpIfgpKgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuCkrOCkueClgeCkpCDgpIXgpKfgpL/gpJUg4KSG4KSV4KS+4KSwIOCkquCljeCksOCkr+CkvuCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8sIOCkheCkquCkqOClhyBHb29nbGUg4KSW4KS+4KSk4KWHIOCkuOClhyDgpKrgpY3gpLDgpLXgpYfgpLYg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriAo4KSI4KSu4KWH4KSyKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLgpLjgpL7gpIfgpKgg4KSH4KSoIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i4KSq4KWN4KSw4KS14KWH4KS2IOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4KSF4KSu4KS+4KSo4KWN4KSvIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKjgpL7gpK4g4KSv4KS+IOCkquCkvuCkuOCkteCksOCljeCkoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4KSF4KSq4KSo4KS+IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKjgpL7gpK4g4KSv4KS+IOCkquCkvuCkuOCkteCksOCljeCkoSDgpK3gpYLgpLIg4KSX4KSPP1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgpKrgpLAg4KSc4KS+4KSP4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IuCkluCkvuCkpOClhyDgpJXgpYAg4KSc4KS+4KSC4KSaIOCkleClgCDgpJzgpL4g4KSw4KS54KWAIOCkueCliOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4KSG4KSqIOCkheCkquCkqOCkviBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCksuCkv+CkliDgpJrgpYHgpJXgpYcg4KS54KWI4KSCLiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgpIbgpKog4KSF4KSq4KSo4KS+IOCkquCkvuCkuOCkteCksOCljeCkoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSy4KS/4KSWIOCkmuClgeCkleClhyDgpLngpYjgpIIuIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCkhuCkquCkqOClhyDgpIXgpKrgpKjgpL4g4KSF4KSo4KSy4KWJ4KSVIOCkquCljeCksOCkpOCkv+CkruCkvuCkqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSG4KSw4KWH4KSW4KS/4KSkIOCkleCkv+Ckr+CkviDgpLngpYguIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCkhuCkquCkqOClhyDgpIXgpKrgpKjgpL4g4KSF4KSo4KSy4KWJ4KSVIOCkhuCkleCkvuCksCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSG4KSw4KWH4KSW4KS/4KSkIOCkleCkv+Ckr+CkviDgpLngpYguIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i4KSG4KSqIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSwIOCkmuClgeCkleClhyDgpLngpYjgpIIuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkn+Clh+CkrOCksuClh+CknyDgpKvgpLzgpYjgpJXgpY3gpJ/gpLDgpYAg4KSh4KS/4KSr4KS84KWJ4KSy4KWN4KSfIOCkquCksCDgpLDgpYDgpLjgpYfgpJ8g4KS54KWLIOCknOCkvuCkj+Ckl+CkviDgpJTgpLAg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KSW4KWLIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i4KSG4KSqIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSwIOCkmuClgeCkleClhyDgpLngpYjgpIIuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkq+CkvOCli+CkqCDgpKvgpLzgpYjgpJXgpY3gpJ/gpLDgpYAg4KSh4KS/4KSr4KS84KWJ4KSy4KWN4KSfIOCkquCksCDgpLDgpYDgpLjgpYfgpJ8g4KS54KWLIOCknOCkvuCkj+Ckl+CkviDgpJTgpLAg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KSW4KWLIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuCkhuCkqiDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLAg4KSa4KWB4KSV4KWHIOCkueCliOCkgi4g4KSf4KWH4KSs4KSy4KWH4KSfIOCkheCkrCDgpKvgpLzgpYjgpJXgpY3igI3gpJ/gpLDgpYAg4KSh4KS/4KSr4KS84KWJ4KSy4KWN4oCN4KSfIOCkquCksCDgpLDgpYDgpLjgpYfgpJ8g4KS54KWLIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiLgpIbgpKog4KSr4KS84KWL4KSoIOCkleCliyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSwIOCkmuClgeCkleClhyDgpLngpYjgpIIuIOCkq+CkvOCli+CkqCDgpIXgpKwg4KSr4KS84KWI4KSV4KWN4KSf4KSw4KWAIOCkoeCkv+Ckq+CkvOClieCksuCljeCknyDgpKrgpLAg4KSw4KWA4KS44KWH4KSfIOCkueCliyDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuCkhuCkquCkqOClhyDgpIXgpKrgpKjgpYcg4KSF4KSo4KSy4KWJ4KSVIOCkquCljeCksOCkpOCkv+CkruCkvuCkqCDgpJXgpYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkhuCksOClh+CkluCkv+CkpCDgpJXgpL/gpK/gpL4g4KS54KWILiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpJTgpLAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCli+CkgiDgpJXgpYcg4KSs4KS+4KSmLCDgpIbgpKrgpLjgpYcg4KSF4KSq4KSo4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYsg4KSV4KS/4KS44KWAIOCkiOCkruClh+CksiDgpJbgpL7gpKTgpYcg4KSV4KWHIOCkieCkquCkr+Cli+CklyDgpLjgpYcg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCkueCkviDgpJzgpL7gpI/gpJfgpL4uXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpILgpKEg4KSu4KWH4KSCIOCkquClgeCkqDog4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuCkhuCkquCkqOClhyDgpIXgpKrgpKjgpYcg4KSF4KSo4KSy4KWJ4KSVIOCkquCljeCksOCkpOCkv+CkruCkvuCkqCDgpJXgpYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkhuCksOClh+CkluCkv+CkpCDgpJXgpL/gpK/gpL4g4KS54KWILiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpJTgpLAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCli+CkgiDgpJXgpYcg4KSs4KS+4KSmLCDgpIbgpKrgpLjgpYcg4KSF4KSq4KSo4KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSV4KS/4KS44KWAIOCkiOCkruClh+CksiDgpJbgpL7gpKTgpYcg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYcg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCkueCkviDgpJzgpL7gpI/gpJfgpL4uXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpILgpKEg4KSu4KWH4KSCIOCkquClgeCkqDog4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4KSG4KSq4KSo4KWHIOCkheCkquCkqOClhyDgpIXgpKjgpLLgpYngpJUg4KSG4KSV4KS+4KSwIOCkleCliyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSG4KSw4KWH4KSW4KS/4KSkIOCkleCkv+Ckr+CkviDgpLngpYguIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkhuCkquCkuOClhyDgpIXgpKrgpKjgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpJXgpL/gpLjgpYAg4KSI4KSu4KWH4KSyIOCkluCkvuCkpOClhyDgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkuOClhyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KS54KS+IOCknOCkvuCkj+Ckl+Ckvi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4KSG4KSq4KSo4KWHIOCkheCkquCkqOClhyDgpIXgpKjgpLLgpYngpJUg4KSG4KSV4KS+4KSwIOCkleCliyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSG4KSw4KWH4KSW4KS/4KSkIOCkleCkv+Ckr+CkviDgpLngpYguIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkhuCkquCkuOClhyDgpIXgpKrgpKjgpYcg4KSr4KS84KWL4KSoIOCkleCliyDgpJXgpL/gpLjgpYAg4KSI4KSu4KWH4KSyIOCkluCkvuCkpOClhyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkleClhyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KS54KS+IOCknOCkvuCkj+Ckl+Ckvi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IuCkqOCkv+CkleCkvuCksuClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i4KSX4KSy4KSkIOCkuOCkv+CkriBQSU4g4KSV4KWL4KShIOCkheCkquCkqOClhyDgpIngpKrgpJXgpLDgpKMg4KSV4KWLIOCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIXgpKwg4KSG4KSq4KSV4KWLIOCkheCkquCkqOClhyDgpLXgpL7gpLngpJUg4KS44KWHIOCkuOCkguCkquCksOCljeCklSDgpJXgpLDgpKjgpL4g4KS54KWL4KSX4KS+LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4i4KSX4KSy4KSkIOCkuOCkv+CkriBQSU4g4KSV4KWL4KShLCDgpIXgpKrgpKjgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkleCliyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSF4KSq4KSo4KWHIOCkteCkvuCkueCklSDgpLjgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkleCksOCkqOClhyDgpLjgpYcg4KSq4KS54KSy4KWHIOCkhuCkquCkleClhyDgpKrgpL7gpLggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCljeCksOCkr+CkvuCkuCDgpLbgpYfgpLcg4KS54KWILiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IuCkl+CksuCkpCDgpLjgpL/gpK4gUElOIOCkleCli+CkoSwg4KSG4KSq4KSV4KWHIOCkquCkvuCkuCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KWN4KSw4KSv4KS+4KS4IOCktuClh+CktyDgpLngpYjgpIIuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiLgpLjgpL/gpK4g4KSF4KSo4KWB4KSq4KSv4KWL4KSX4KWAIOCkueCliC4g4KSF4KSq4KSo4KWHIOCkteCkvuCkueCklSDgpLjgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IuCkl+CksuCkpCDgpLjgpL/gpK4gUFVLIOCkleCli+CkoSwg4KS44KS/4KSuIOCkleClhyDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAg4KS54KWLIOCknOCkvuCkqOClhyDgpLjgpYcg4KSq4KS54KSy4KWHIOCkhuCkquCkleClhyDgpKrgpL7gpLggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCljeCksOCkr+CkvuCkuCDgpLbgpYfgpLcg4KS54KWILiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IuCkl+CksuCkpCDgpLjgpL/gpK4gUFVLIOCkleCli+CkoSwg4KS44KS/4KSuIOCkleClhyDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAg4KS54KWLIOCknOCkvuCkqOClhyDgpLjgpYcg4KSq4KS54KSy4KWHIOCkhuCkquCkleClhyDgpKrgpL7gpLggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCljeCksOCkr+CkvuCkuCDgpLbgpYfgpLcg4KS54KWI4KSCLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4i4KS44KS/4KSuIFBJTiDgpJXgpYAg4KSV4KS+4KSw4KWN4KSv4KS14KS+4KS54KWAIOCkteCkv+Ckq+CksiDgpLDgpLngpYAhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiLgpLjgpL/gpK4gUFVLIOCkleClgCDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KS14KS/4KSr4KSyIOCksOCkueClgCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i4KSV4KWL4KShIOCkuOCljeCkteClgOCkleCkvuCksCDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+ISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IuCkquCkv+Ckm+CksuCkviDgpJ/gpY3gpLDgpYjgpJUg4KSs4KSf4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i4KSF4KSX4KSy4KS+IOCkn+CljeCksOCliOCklSDgpKzgpJ/gpKgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i4KSq4KWJ4KSc4KS8IOCkleCksOClh+CkgiDgpKzgpJ/gpKgiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAppbmRleCA3MGU2MzA1Li4zODQzNTQ5ZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJVbmVzaXRlIFBJTiBrw7RkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iVW5lc2l0ZSBQVUsgaSBub3ZpIFBJTiBrw7RkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsga8O0ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTm92aSBQSU4ga8O0ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IlVuZXNpdGUgUFVLIGkgbm92aSBQSU4ga8O0ZCBTSU0ga2FydGljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iUFVLIGvDtGQgU0lNIGthcnRpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik5vdmkgUElOIGvDtGQgU0lNIGthcnRpY2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJEb2Rpcm5pdGUgemEgdGlwa2FuamUgemFwb3JrZSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IlVuZXNpdGUgemFwb3JrdSB6YSBvdGtsanXEjWF2YW5qZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IlVuZXNpdGUgUElOIHphIG90a2xqdcSNYXZhbmplIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+Ikd1bWIgUGF1emEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+Ikd1bWIgUmVwcm9kdWtjaWphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJHdW1iIFphdXN0YXZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlBhbGFjIGdvcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJQYWxhYyBkb2xqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IlNyY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJPdGtsanXEjWFqdGUgemEgbmFzdGF2YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJQb2tyZXRhbmplIGplIG90a2F6YW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IklzcHVzdGl0ZSB3aWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gZGEgYmlzdGUgZ2EgaXpicmlzYWxpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiJXaWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbmXEh2Ugc2UgaXpicmlzYXRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iVXBpxaFpdGUgxb5lbGplbmkgUElOIGvDtGQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iUG90dnJkaXRlIMW+ZWxqZW5pIFBJTiBrw7RkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJPdGtsanXEjWF2YW5qZSBTSU0ga2FydGljZeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Ik5ldG/EjWFuIFBJTiBrw7RkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlVuZXNpdGUgUElOIGtvamkgaW1hIG9kIDQgZG8gOCBicm9qZXZhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyBrw7RkIHRyZWJhIGltYXRpIDggYnJvamV2YSBpbGkgdmnFoWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUG9ub3ZvIHVuZXNpdGUgaXNwcmF2YW4gUFVLIGvDtGQuIFBvbm92bGplbmkgcG9rdcWhYWppIHRyYWpubyDEh2Ugb25lbW9ndcSHaXRpIFNJTS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Ik5ldG/EjW5vIHN0ZSBpc2NydGFsaSBvYnJhemFjIHphIG90a2xqdcSNYXZhbmplIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHB1dGEuIE5ha29uIGpvxaEgb3ZvbGlrbyBuZXVzcGplxaFuaWggcG9rdcWhYWphOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtb3JhdCDEh2V0ZSBvdGtsanXEjWF0aSB0ZWxlZm9uIHBvbW/Eh3UgcmHEjXVuYSBlLXBvxaF0ZS5cblxuIFBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCTICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iVWtsb25pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJOZXRvxI1hbiBQSU4ga8O0ZCBTSU0ga2FydGljZTsgc2FkYSBtb3JhdGUga29udGFrdGlyYXRpIHN2b2cgbW9iaWxub2cgb3BlcmF0ZXJhIGRhIGJpIG90a2xqdcSNYW8gdmHFoSB1cmXEkWFqLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iTmV0b8SNYW4gUElOIGvDtGQgU0lNIGthcnRpY2U7IGltYXRlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBva3XFoWFqIHByaWplIG5lZ28gxaF0byBidWRldGUgbW9yYWxpIGtvbnRha3RpcmF0aSBzdm9nIG1vYmlsbm9nIG9wZXJhdGVyYSBkYSBiaSBvdGtsanXEjWFvIHZhxaEgdXJlxJFhai4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJOZXRvxI1hbiBQSU4ga8O0ZCBTSU0ga2FydGljZTsgaW1hdGUgam/FoSBvdm9saWtvIHByZW9zdGFsaWggcG9rdcWhYWphOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0ga2FydGljYSBuaWplIHVwb3RyZWJsaml2YS4gS29udGFrdGlyYWp0ZSBzdm9nIG1vYmlsbm9nIG9wZXJhdGVyYS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+Ik5ldG/EjWFuIFBVSyBrw7RkIFNJTSBrYXJ0aWNlOyBpbWF0ZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb2t1xaFhaiBwcmlqZSBuZWdvIMWhdG8gU0lNIGthcnRpY2EgcG9zdGFuZSB0cmFqbm8gbmV1cG90cmVibGppdmEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iTmV0b8SNYW4gUFVLIGvDtGQgU0lNIGthcnRpY2U7IGltYXRlIGpvxaEgbmVrb2xpa28gcHJlb3N0YWxpaCBwb2t1xaFhamEgKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikgcHJpamUgbmVnbyDFoXRvIFNJTSBrYXJ0aWNhIHBvc3RhbmUgdHJham5vIG5ldXBvdHJlYmxqaXZhLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iT3BlcmFjaWphIFBJTi1hIFNJTSBrYXJ0aWNlIG5pamUgdXNwamVsYSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+Ik9wZXJhY2lqYSBQVUstYSBTSU0ga2FydGljZSBuaWplIHVzcGplbGEhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkvDtGQgamUgcHJpaHZhxIdlbiEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJHdW1iIFByZXRob2RuaSB6YXBpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Ikd1bWIgU2xqZWRlxIdpIHphcGlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+Ikd1bWIgUGF1emEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAppbmRleCA2MTE2MDJlLi5iZjZmNTI4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IsONcmphIGJlIGEgUElOIGvDs2RvdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IsONcmphIGJlIGEgUFVLIGvDs2RvdCwgbWFqZCBheiDDumogUElOIGvDs2RvdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIGvDs2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IsOaaiBQSU4ga8OzZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IsONcmphIGJlIGEgU0lNIGvDoXJ0eWEgUFVLIGvDs2Rqw6F0LCBtYWpkIGF6IMO6aiBQSU4ga8OzZG90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJTSU0ga8OhcnR5YSBQVUsga8OzZGphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLDmmogUElOIGvDs2QgYSBTSU0ga8OhcnR5w6Fob3oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLDiXJpbnRzZW4gamVsc3rDsyBtZWdhZMOhc8OhaG96IjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iQSBmZWxvbGTDoXNob3ogw61yamEgYmUgYSBqZWxzesOzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IkZlbG9sZMOhc2hveiDDrXJqYSBiZSBhIFBJTiBrw7Nkb3QiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iU3rDvG5ldCBnb21iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJMZWrDoXRzesOhcyBnb21iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJMZcOhbGzDrXTDoXMgZ29tYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJUZXRzemlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iTmVtIHRldHN6aWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJTesOtdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkEgZm9seXRhdMOhc2hveiBvbGRqYSBmZWwgYSBiaWxsZW50ecWxesOhcmF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iSW5kw610w6FzIHTDtnLDtmx2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJFbmdlZGplIGVsIGEoeikgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gdMO2cmzDqXPDqWhlei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iQSh6KSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBuZW0gbGVzeiB0w7Zyw7ZsdmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsMTMgKzExMiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkvDrXbDoW50IFBJTiBrw7NkIG1lZ2Fkw6FzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJLw612w6FudCBQSU4ga8OzZCBtZWdlcsWRc8OtdMOpc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSBrw6FydHlhIGZlbG9sZMOhc2EuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJIZWx5dGVsZW4gUElOIGvDs2QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iNOKAkzggc3rDoW1qZWd5xbEgUElOIGvDs2RvdCDDrXJqb24gYmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iQSBQVUsga8OzZCBsZWdhbMOhYmIgIDggc3rDoW1qZWd5YsWRbCBrZWxsLCBob2d5IMOhbGxqb24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iQWRqYSBtZWcgw7pqcmEgYSBoZWx5ZXMgUFVLIGvDs2RvdC4gQXogaXNtw6l0ZWx0IHByw7Niw6Fsa296w6Fzc2FsIHbDqWdsZWdlc2VuIGxldGlsdGphIGEgU0lNIGvDoXJ0ecOhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iQSBQSU4ga8OzZG9rIG5lbSBlZ3llem5lay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJUw7psIHNvayBtaW50YXJhanpvbMOhc2kgcHLDs2LDoWxrb3rDoXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iQSBmZWxvbGTDoXNob3ogamVsZW50a2V6emVuIGJlIEdvb2dsZSBGacOza2rDoXZhbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iQSBmZWxvbGTDoXNob3ogamVsZW50a2V6emVuIGJlIEdvb2dsZS1macOza2rDoXZhbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+IkZlbGhhc3puw6Fsw7Nuw6l2IChlLW1haWwgY8OtbSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IkplbHN6w7MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IkJlamVsZW50a2V6w6lzIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBhbGthbG9tbWFsIGhlbHl0ZWxlbsO8bCByYWp6b2x0YSBsZSBhIGZlbG9sZMOhc2kgbWludMOhdC4gVG92w6FiYmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2lrZXJ0ZWxlbiBrw61zw6lybGV0IHV0w6FuIGVneSBlLW1haWwgZmnDs2sgaGFzem7DoWxhdMOhdmFsIGtlbGwgZmVsb2xkYW5pYSBhIHRlbGVmb25qw6F0LlxuXG4gS8OpcmrDvGssIHByw7Niw6FsamEgw7pqcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gbcOhc29kcGVyYyBtw7psdmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCTICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iRWx0w6F2b2zDrXTDoXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkhlbHl0ZWxlbiBQSU4ga8OzZCBhIFNJTSBrw6FydHnDoWhvejsgdmVneWUgZmVsIGEga2FwY3NvbGF0b3Qgc3pvbGfDoWx0YXTDs2rDoXZhbCBheiBlc3prw7Z6IGZlbG9sZMOhc8OhaG96LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iSGVseXRlbGVuIFBJTiBrw7NkIGEgU0lNIGvDoXJ0ecOhaG96OyBtw6lnIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcsOzYsOhbGtvesOhc2EgdmFuLCBtaWVsxZF0dCBmZWwga2VsbGVuZSB2ZW5uaWUgYSBrYXBjc29sYXRvdCBzem9sZ8OhbHRhdMOzasOhdmFsIGF6IGVzemvDtnogZmVsb2xkw6Fzw6Fob3ouIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iSGVseXRlbGVuIFBJTiBrw7NkIGEgU0lNIGvDoXJ0ecOhaG96OyBtw6lnIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcsOzYsOhbGtvesOhc2EgdmFuLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iQSBTSU0ga8OhcnR5YSBoYXN6bsOhbGhhdGF0bGFuLiBWZWd5ZSBmZWwgYSBrYXBjc29sYXRvdCBzem9sZ8OhbHRhdMOzasOhdmFsLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iSGVseXRlbGVuIFBVSyBrw7NkIGEgU0lNIGvDoXJ0ecOhaG96OyBtw6lnIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcsOzYsOhbGtvesOhc2EgdmFuLCBtaWVsxZF0dCBhIFNJTSBrw6FydHlhIHbDqWdsZWcgaGFzem7DoWxoYXRhdGxhbiBsZXN6LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkhlbHl0ZWxlbiBQVUsga8OzZCBhIFNJTSBrw6FydHnDoWhvejsgbcOpZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHLDs2LDoWxrb3rDoXNhIHZhbiwgbWllbMWRdHQgYSBTSU0ga8OhcnR5YSB2w6lnbGVnIGhhc3puw6FsaGF0YXRsYW4gbGVzei4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IkEgU0lNIGvDoXJ0eWEgUElOLW3FsXZlbGV0ZSBzaWtlcnRlbGVuISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iQSBTSU0ga8OhcnR5YSBQVUstbcWxdmVsZXRlIHNpa2VydGVsZW4hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkvDs2QgZWxmb2dhZHZhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IkVsxZF6xZEgc3rDoW0gZ29tYiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IkvDtnZldGtlesWRIHN6w6FtIGdvbWIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iU3rDvG5ldCBnb21iIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjg3OTIwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxNTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i1YTVuNaC1b/WhNWh1aPWgNWl1oQgUElOINWv1bjVpNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4i1YTVuNaC1b/WhNWh1aPWgNWl1oQgU0lNIFBVSy3VqCDWhyDVttW41oAgUElOINWv1bjVpNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJTSU0gUFVLINWv1bjVpNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLVhtW41oAgU0lNIFBJTiDVr9W41aTVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+ItWA1brVpdaEYCDVo9Wh1bLVv9W21aHVotWh1bzVqCDVtNW41oLVv9aE1aHVo9aA1aXVrNW41oIg1bDVodW01aHWgCI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+ItWE1bjWgtW/1oTVodWj1oDVpdaEINWj1aHVstW/1bbVodWi1aHVvNWoINWh1brVodWv1bjVstW61bTVodW2INWw1aHVtNWh1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLVhNW41oLVv9aE1aHVo9aA1aXWhCBQSU4t1agg1aHVutWh1a/VuNWy1brVtNWh1bYg1bDVodW01aHWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+ItWN1a3VodWsIFBJTiDVrtWh1a7Vr9Wh1aPVq9aAOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiLUsdW61aHVr9W41bLVutW01aHVtiDVsNWh1bTVodaAINW91aXVstW01aXWhCDVkdWh1bbVrywg1aHVutWhIDA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+ItSx1bzVodW+1aXVrNWh1aPVuNaC1bXVtiDUtNWl1bTWhNW41b4g1aHVutWh1a/VuNWy1brVtNWh1bYg1oPVuNaA1bHVpdaA1agg1aPVpdaA1aHVptWh1bbWgdW+1aHVriDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiLUvNWr1oHWhNWh1b7VuNaA1b7VodWuINWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiLUvNWr1oHWhNWh1b7VuNaA1bjWgtW0LCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i1YTVq9Wh1oHWgNWl1oQg1bHVpdaAINWs1avWgdaE1aHVvtW41oDVq9W51ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiLUsdW61aHVr9W41bLVutWl1azVuNaCINWw1aHVtNWh1oAg1b3VpdWy1bTVpdaEINWR1aHVttWv1ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiLVkdWh1bbWgdWoINWv1bjVstW61b7VodWuINWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlNJTSDWhNWh1oDVvyDVudWv1aEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4i1LPWgNWh1b3VodWs1avVr9W41oLVtCBTSU0g1oTVodaA1b8g1bnVr9WhOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4i1YDVpdW81aHVrdW41b3VqyDVtNWl1bsgU0lNINaE1aHWgNW/INW51a/VoToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4i1LbVpdW/1aXVstWl1oQgU0lNINaE1aHWgNW/1ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU0lNINaE1aHWgNW/1agg1aLVodaB1aHVr9Wh1bXVuNaC1bQg1acg1a/VodW0INW51asg1a/VodaA1bjVsiDVr9Wh1oDVpNWh1oHVvtWl1aw6INWE1b/WgdaA1aXWhCBTSU0g1oTVodaA1b86Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+ItSx1bbVutWr1b/VodW2IFNJTSDWhNWh1oDVvzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiLVgdWl1oAgU0lNINaE1aHWgNW/1agg1ajVttWk1bTVq9W31b8g1a/VodW91aXWgdW+1aXVrCDVpzpcbtS/1aHVutW+1aXWhCDVsdWl1oAg1aLVu9W71aHVtdWr1bYg1a7VodW81aHVtdW41oLVqdW11aHVtiDVtNWh1b/VodWv1aHWgNWh1oDVqyDVsNWl1b8g1bbVuNaAIFNJTSDWhNWh1oDVvyDVsdWl1bzWhCDVotWl1oDVpdWs1bjWgiDVsNWh1bTVodaAOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJTSU0g1oTVodaA1b/VqCDVr9W41bLVutW+1aHVriDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IlNJTSDWhNWh1oDVv9WoIFBVSy3VuNW+INWv1bjVstW61b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4iU0lNINaE1aHWgNW/1agg1aHVutWh1a/VuNWy1brVvtW41oLVtCDVpy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4g1Y7Vq9W71aXVqSAlMiRkIG9mICUzJGQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+ItSx1b7VpdWs1aHWgdW21aXVrCDVvtWr1bvVpdWpOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i1LTVodW/1aHWgNWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLUsdW61aHVr9W41bLVutW01aHVtiDVv9Wh1oDVodWu1oTVtiDVqNW21aTVrNWh1bXVttW+1aHVriDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiLUsdW61aHVr9W41bLVutW01aHVtiDVv9Wh1oDVodWu1oTVqCDVpdW/INWnINWu1aHVrNW+1aHVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDVvtWr1bvVpdWpOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiLVldWj1b/VvtW41bLVqyDVqNW21b/WgNWr1bkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLUv9Wh1oDVo9Wh1b7Vq9Wz1aHVryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+ItWW1bjVv9W41a3WgdWr1a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i1YTVpdWk1avVoSDVr9Wh1oDVo9Wh1b7VuNaA1bjWgtW01bbVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLVjtWr1bvVpdWp1bbVpdaA1asg1b7VpdaA1aHVpNWh1b3VodW+1bjWgNW41oLVtNWoINW01aXVr9W21aHWgNWv1aXVrCDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLVjtWr1bvVpdWp1asg1b7VpdaA1aHVpNWh1b3VodW+1bjWgNW41oLVtNW2INWh1b7VodaA1b/VvtWl1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiLVjtWr1bvVpdWpIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LdWoINW71bbVu9W+1aHVriDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLUuNW21aTVrNWh1bXVttWl1awg1aHVutWh1a/VuNWy1brVtNWh1bYg1b/VodaA1aHVrtW41oLVqdW11bjWgtW21ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i1LfVu9WrINWh1brVodWv1bjVstW61bjWgtW0OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i1Y3VrdWl1bTVodW11bjVviDVodW61aHVr9W41bLVutW41oLVtDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+ItS01aXVtNaE1bjVviDVodW61aHVr9W41bLVutW41oLVtDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUGluLdW2INWh1brVodWv1bjVstW61b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+ItSz1aHVstW/1bbVodWi1aHVvNWrINWh1brVodWv1bjVstW61bjWgtW0OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+ItWN1a3VpdW01aHVtdWrINW/1aHWgNWh1a7WhDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i1Y3VodWw1aXWgdW01aHVtiDVv9Wh1oDVodWu1oQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiLVhtWh1a3VuNaA1aQg1bDVpdW/1aHVo9Wu1asg1a/VuNWz1aHVr9WoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiLVgNWh1bvVuNaA1aQg1bDVpdW/1aHVo9Wu1asg1a/VuNWz1aHVr9WoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i1LTVodWk1aHWgNWrINWv1bjVs9Wh1a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+ItWG1b7VodWj1aHWgNWv1bTVodW2INWv1bjVs9Wh1a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+ItS/1aHVttWj1asg1a/VuNWz1aHVryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLUvNWh1b7VtiDVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+ItS81aHVvtWoINW51aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLVjdWr1oDVvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+ItWH1aHWgNW41oLVttWh1a/VpdWs1bjWgiDVsNWh1bTVodaAINWh1brVodWv1bjVstW61aXWhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+ItSz1bjWgNWu1aHWgNWv1bjWgtW01agg1bnVpdWy1aHWgNWv1b7VpdaBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INW+1avVu9Wl1anVqCDVu9W21bvVpdWs1bjWgiDVsNWh1bTVodaAINWi1aHWgSDVqdW41bLVpdaEINWh1bXVtiDVodW11b3Vv9Wl1bI6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INW+1avVu9Wl1anVqCDVudWrINW71bbVu9W+1as6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+ItWJ1aXVstWh1oDVr9Wl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i1YvVttW71aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4i1L/VodW/1aHWgNW+1aHVriDVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+ItWM1aXVqtWr1bTVqyDWg9W41oPVuNWt1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLVhNW41oLVv9aEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLUsdW61aHVr9W41bLVutWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i1ZbVuNW/1bjVrdaB1avVryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLUvNW41oLVvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLVgdWh1bXVttWoINW01avVodaB1bbVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLViNaA1bjVttWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i1Y3VodWw1aXWgdaA1aXWhCDVvtWl1oDWhyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t1asg1bDVodW01aHWgDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLVjdWh1bDVpdaB1oDVpdaEINaB1aHVriA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t1asg1bDVodW01aHWgDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLVjdWh1bDVpdaB1oDVpdaEINWx1aHVrWAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LdWrINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+ItWN1aHVsNWl1oHWgNWl1oQg1aHVu2AgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LdWrINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiLVhtWl1oDVr9Wh1bXVq9W9INaF1aPVv9W+1bjVstWoIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+ItSx1oDVv9Wh1a/VodaA1aMg1avWgNWh1b7Vq9Wz1aHVr9WrINWw1aXVvNWh1a3VuNW91aHVptWh1bbVoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+ItWE1bjVvNWh1oHVpdWsINWl1bQg1b3VrdWl1bTVodW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLVjdWt1aHVrCDVvdWt1aXVtNWhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i1Y3VrdWh1awg1aPVodWy1b/VttWh1aLVodW8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+ItWN1a3VodWsIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i1ZPVuNaA1bHVpdaEINWv1oDVr9Wr1bYgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INW+1aHVtdaA1a/VtdWh1bbVq9aBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i1YDVodW+1aHWhNWl1oQg1bHVpdaAINW91a3VpdW01aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+ItWE1bjWgtW/1oTVodWj1oDVpdaEIFNJTS3VqyBQSU4t1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+ItWE1bjWgtW/1oTVodWj1oDVpdaEIFBJTi3VqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiLVhNW41oLVv9aE1aHVo9aA1aXWhCDVo9Wh1bLVv9W21aHVotWh1bzVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTS3VqCDVodW11b0g1brVodWw1avVtiDVodW21bvVodW/1b7VodWuINWnOiDVhNW41oLVv9aE1aHVo9aA1aXWhCBQVUsg1a/VuNWk1agg1bfVodaA1bjWgtW21aHVr9Wl1azVuNaCINWw1aHVtNWh1oA6INWE1aHVttaA1aHVtNWh1b3VttWl1oDVqyDVsNWh1bTVodaAINWv1aHVutW+1aXWhCDWhdW61aXWgNWh1b/VuNaA1asg1bDVpdW/OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLVhNW41oLVv9aE1aHVo9aA1aXWhCDWgdWh1bbVr9Wh1azVqyBQSU4g1a7VodWu1a/VodWj1avWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+ItWA1aHVvdW/1aHVv9Wl1oQg1oHVodW21a/VodWs1asgUElOINWu1aHVrtWv1aHVo9Wr1oDVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4i1LHVutWh1a/VuNWy1brVuNaC1bQg1acgU0lNINaE1aHWgNW/1aggLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i1YTVuNaC1b/WhNWh1aPWgNWl1oTCoFBJTiwg1bjWgNWoIDQt1avWgSA4INWp1avVviDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsg1a/VuNWk1agg1brVpdW/1oQg1acg1azVq9W21asgOCDVr9Wh1bQg1aHVvtWl1azVqyDVqdWr1b46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i1Y7VpdaA1aHVtNW41oLVv9aE1aHVo9aA1aXWhCDVs9Wr1bfVvyBQVUsg1a7VodWu1a/VodWj1avWgNWoOiDUv9aA1a/VttW+1bjVsiDWg9W41oDVsdWl1oDVqCDVqNW21aTVtNWr1bfVvyDVr9Wv1aHVvdWl1oHVttWl1bYgU0lNINaE1aHWgNW/1ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDVrtWh1a7Vr9Wh1aPWgNWl1oDVqCDVudWl1bYg1bDVodW01ajVttWv1bbVuNaC1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLVidWh1oPVq9aBINW31aHVvyDVvdWt1aXVtNWh1bXVqyDWg9W41oDVsdWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i1LHVutWh1a/VuNWy1brVpdWs1bjWgiDVsNWh1bTVodaAYCDVtNW41oLVv9aEINWj1bjWgNWu1aXWhCDVsdWl1oAgR29vZ2xlINWw1aHVt9W+1bjVvjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+ItWV1aPVv9Wh1bbVuNaC1bYgKNWn1azWg9W41b3VvykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+ItSz1aHVstW/1bbVodWi1aHVvNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLVhNW41oLVv9aEINWj1bjWgNWu1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i1Y3VrdWh1awg1oXVo9W/1aHVttW41oLVtiDVr9Wh1bQg1aPVodWy1b/VttWh1aLVodW8OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLVhNW41bzVodaB1aXVntWsINWl1oQg1bHVpdaAINaF1aPVv9Wh1bbVuNaC1bbVqCDVr9Wh1bQg1aPVodWy1b/VttWh1aLVodW81ag6XG7UsdW11oHVpdWs1aXWhCAiPGI+Imdvb2dsZS5jb20gL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+ItWA1aHVt9Wr1b7VqCDVvdW/1bjWgtWj1b7VuNaC1bQg1acuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItS01bjWgtaEwqA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDVodW21aPVodW0INW91a3VodWsINWl1oQg1bTVuNaC1b/WhNWh1aPWgNWl1awg1bHVpdaAIFBJTi3VqDogXG5cbtWT1bjWgNWx1aXWhCDVr9aA1a/Vq9W2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INW+1aHVtdaA1a/VtdWh1bbVq9aBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLUtNW41oLWhCDVvdWt1aHVrCDVpdaEINW01bjWgtW/1oTVodWj1oDVpdWsINWx1aXWgCDVo9Wh1bLVv9W21aHVotWh1bzVqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDVodW21aPVodW0OiBcblxu1ZPVuNaA1bHVpdaEINWv1oDVr9Wr1bYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g1b7VodW11oDVr9W11aHVttWr1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+ItS01bjWgtaEwqA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDVodW21aPVodW0INW91a3VodWsINWl1oQg1bDVodW+1aHWhNWl1awg1bHVpdaAINWh1brVodWv1bjVstW61bTVodW2INW91a3VpdW01aHVtjogXG5cbtWT1bjWgNWx1aXWhCDVr9aA1a/Vq9W2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INW+1aHVtdaA1a/VtdWh1bbVq9aBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+ItS01bjWgtaEwqA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDVodW21aPVodW0INW91a3VodWsINaD1bjWgNWxINWl1oQg1aHWgNWl1awg1aPWgNWh1b3VodWs1avVr9W2INWh1brVodWv1bjVstW61aXVrNW41oIg1bDVodW01aHWgDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g1aHVttWj1aHVtNWr1oEg1aHVvtWl1awg1aHVttWw1aHVu9W41bIg1oPVuNaA1bHVpdaA1avWgSDVsNWl1b/VuCDVo9aA1aHVvdWh1azVq9Wv1agg1a/VvtWl1oDVodWv1aHWgNWj1aHVvtW41oDVvtWrINWj1bjWgNWu1aHWgNWh1bbVodW11avVtiDVrNW81aXVrNW11aHVtdW21assINaHINaF1aPVv9W+1bjVstWrINWi1bjVrNW41oAg1b/VvtW11aHVrNW21aXWgNWoINWv1a/VuNaA1aXVtjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i1LTVuNaC1oTCoDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INWh1bbVo9Wh1bQg1b3VrdWh1awg1oPVuNaA1bEg1aXWhCDVodaA1aXVrCDVsNWl1bzVodWt1bjVvdW2INWh1brVodWv1bjVstW61aXVrNW41oIg1bDVodW01aHWgDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g1aHVttWj1aHVtNWr1oEg1aHVvtWl1awg1aHVttWw1aHVu9W41bIg1oPVuNaA1bHVpdaA1avWgSDVsNWl1b/VuCDVsNWl1bzVodWt1bjVvdWoINWv1b7VpdaA1aHVr9Wh1oDVo9Wh1b7VuNaA1b7VqyDVo9W41oDVrtWh1oDVodW21aHVtdWr1bYg1azVvNWl1azVtdWh1bXVttWrLCDWhyDWhdWj1b/VvtW41bLVqyDVotW41azVuNaAINW/1b7VtdWh1azVttWl1oDVqCDVr9Wv1bjWgNWl1bY6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiLUtNW41oLWhCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g1aHVttWj1aHVtCDVvdWt1aHVrCDWg9W41oDVsSDVpdaEINWh1oDVpdWsINWj1oDVodW91aHVrNWr1a/VtiDVodW61aHVr9W41bLVutWl1azVuNaCINWw1aHVtNWh1oA6INSz1oDVodW91aHVrNWr1a/VtiDVodW11arVtCDVr9W+1aXWgNWh1a/VodaA1aPVodW+1bjWgNW+1asg1aPVuNaA1a7VodaA1aHVttWh1bXVq9W2INWs1bzVpdWs1bXVodW11bbVqzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiLUtNW41oLWhMKgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INWh1bbVo9Wh1bQg1b3VrdWh1awg1oPVuNaA1bEg1aXWhCDVodaA1aXVrMKg1bDVpdW81aHVrdW41b3VtiDVodW61aHVr9W41bLVutWl1azVuNaCINWw1aHVtNWh1oA6INWA1aXVvNWh1a3VuNW91bYg1aHVtdWq1bQg1a/VvtWl1oDVodWv1aHWgNWj1aHVvtW41oDVvtWrINWj1bjWgNWu1aHWgNWh1bbVodW11avVtiDVrNW81aXVrNW11aHVtdW21as6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+ItS01bjWgtaEINW91a3VodWsINWl1oQg1bDVodW+1aHWhNWl1awg1bHVpdaAINWh1brVodWv1bjVstW61bTVodW2INW91a3VpdW01aHVtiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDVodW21aPVodW0OiDUtdW+1b0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bHVq9aBINWw1aXVv9W4INWx1aXVptWh1bbVq9aBINWv1brVodWw1aHVttW71b7VqyDVodW61aHVr9W41bLVutWl1awg1bHVpdaAINWj1oDVodW91aHVrNWr1a/VqGAg1oXVo9W/1aHVo9W41oDVrtWl1azVuNW+INWn1azWg9W41b3Vv9WrINWw1aHVt9Wr1b46XG5cbiDVk9W41oDVsdWl1oQg1a/WgNWv1avVtiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDVvtWh1bXWgNWv1bXVodW21avWgToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+ItS01bjWgtaEwqA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDVodW21aPVodW0INW91a3VodWsINWl1oQg1bDVodW+1aHWhNWl1awg1bHVpdaAINWh1brVodWv1bjVstW61bTVodW2INW21bTVuNaC1bfVqDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g1aHVttWj1aHVtNWr1oEg1aHVvtWl1awg1aHVttWw1aHVu9W41bIg1oPVuNaA1bHVpdaA1avWgSDVsNWl1b/VuCDVsdWl1aYg1a/VodW81aHVu9Wh1oDVr9W+1asg1aHVutWh1a/VuNWy1brVpdWsINWx1aXWgCDVsNWl1bzVodWt1bjVvdWoYCDWhdWj1b/VodWj1bjWgNWu1aXVrNW41b4g1afVrNaD1bjVvdW/1asg1bDVodW31avVvjpcblxuINWT1bjWgNWx1aXWhCDVr9aA1a/Vq9W2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INW+1aHVtdaA1a/VtdWh1bbVq9aBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+ItWA1aXVvNWh1oHVttWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+ItWN1a3VodWsIFNJTSBQSU4g1a/VuNWk1asg1brVodW/1bPVodW81bjVviDVutWl1b/WhCDVpyDVpNWr1bTVpdaEINWx1aXWgCDWhdW61aXWgNWh1b/VuNaA1avVttWdINW91aHWgNaE1bYg1aHWgNWj1aXVrNWh1aLVodaB1aXVrNW41oIg1bDVodW01aHWgDoiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IlNJTSBQSU4g1a/VuNWk1agg1b3VrdWh1awg1ac6INWE1bbVodaBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDWg9W41oDVsSwg1bjWgNWr1oEg1bDVpdW/1bgg1brVpdW/1oQg1acg1aTVq9W01aXWhCDVsdWl1oAg1oXVutWl1oDVodW/1bjWgNWr1bbVnSDVvdWh1oDWhNW2INWh1oDVo9Wl1azVodWi1aHWgdWl1azVuNaCINWw1aHVtNWh1oA6IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iU0lNIFBJTiDVr9W41aTVqCDVvdWt1aHVrCDVpzog1YTVttWh1oEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INaD1bjWgNWxOiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNLdWoINWw1bbVodaA1aHVvtW41oAg1bnVpyDWhdWj1b/VodWj1bjWgNWu1aXVrDog1LTVq9W01aXWhCDVsdWl1oAg1oXVutWl1oDVodW/1bjWgNWr1bY6Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJTSU0gUFVLINWv1bjVpNWoINW91a3VodWsINWnOiDVhNW21aHWgSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g1oPVuNaA1bHVnSDVtNWr1bbVudaHIFNJTS3VqyDVqNW21aTVtNWr1bfVvyDVodaA1aPVpdWs1aHWg9Wh1a/VuNaC1bTVqDoiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJTSU0gUFVLINWv1bjVpNWoINW91a3VodWsINWnOiDVhNW21aHWgSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g1oPVuNaA1bHVnSDVtNWr1bbVudaHIFNJTS3VqyDVqNW21aTVtNWr1bfVvyDVodaA1aPVpdWs1aHWg9Wh1a/VuNaC1bTVqDoiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlNJTSBQSU4g1aPVuNaA1a7VuNWy1bjWgtWp1bXVuNaC1bbVqCDVsdWh1a3VuNWy1b7VpdaBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iU0lNIFBVSyDVo9W41oDVrtW41bLVuNaC1anVtdW41oLVttWoINWx1aHVrdW41bLVvtWl1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+ItS/1bjVpNW2INWo1bbVpNW41oLVttW+1aXWgToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLVhtWh1a3VuNaA1aQg1bDVpdW/1aHVo9Wu1asg1a/VuNWz1aHVryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+ItWA1aHVu9W41oDVpCDVsNWl1b/VodWj1a7VqyDVr9W41bPVodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+ItS01aHVpNWh1oDVqyDVr9W41bPVodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4i1YbVvtWh1aPVodaA1a/VtNWh1bYg1a/VuNWz1aHVryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+ItS01aHVpNWh1oDVqyDVr9W41bPVodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+ItS+1aHVvNWh1bXVuNaC1anVtdW41oLVtiDVudWv1aE6Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbAppbmRleCA5ZjczMWFiLi45ZTE5NDcyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IktldGlrIGtvZGUgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iS2V0aWsga29kZSBQVUsgZGFuIFBJTiBiYXJ1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJLb2RlIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iS29kZSBQaW4gYmFydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IktldGlrIGtvZGUgUElOIGJhcnUgZGFuIFBVSyBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IktvZGUgUFVLIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iS29kZSBQSU4gU0lNIGJhcnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJTZW50dWggdW50dWsgbWVuZ2V0aWtrYW4gc2FuZGkiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJLZXRpayBzYW5kaSB1bnR1ayBtZW1idWthIGt1bmNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iS2V0aWsgUElOIHVudHVrIG1lbWJ1a2Ega3VuY2kiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iVG9tYm9sIGplZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IlRvbWJvbCBwdXRhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iVG9tYm9sIGhlbnRpa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IkJhZ3VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iSmVsZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJIYXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iQnVrYSBrdW5jaSB1bnR1ayBtZWxhbmp1dGthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IlBlbHVuY3VyYW4gZGliYXRhbGthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJKYXR1aGthbiA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB1bnR1ayBtZW5naGFwdXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHRpZGFrIGFrYW4gZGloYXB1cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+Ik1hc3Vra2FuIGtvZGUgUElOIHlhbmcgZGlpbmdpbmthbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJLb25maXJtYXNpIGtvZGUgUElOIHlhbmcgZGlpbmdpbmthbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iTWVtYnVrYSBrdW5jaSBrYXJ0dSBTSU3igKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJLb2RlIFBJTiBzYWxhaC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJLZXRpayBQSU4geWFuZyB0ZXJkaXJpIGRhcmkgNCBzYW1wYWkgOCBhbmdrYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJLb2RlIFBVSyBoYXJ1cyB0ZXJkaXJpIGRhcmkgOCBhbmdrYSBhdGF1IGxlYmloLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Ik1hc3Vra2FuIGtlbWJhbGkga29kZSBQVUsgeWFuZyBiZW5hci4gSmlrYSBiZXJ1bGFuZyBrYWxpIGdhZ2FsLCBTSU0gYWthbiBkaW5vbmFrdGlma2FuIHNlY2FyYSBwZXJtYW5lbi4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkFuZGEgdGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaSBzYWxhaCBtZW5nZ2FtYmFyIHBvbGEgcGVtYnVrYSBrdW5jaS4gU2V0ZWxhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHVwYXlhIGdhZ2FsLCBBbmRhIGFrYW4gZGltaW50YSBtZW1idWthIGt1bmNpIHBvbnNlbCBtZW5nZ3VuYWthbiBha3VuIGVtYWlsLlxuXG5Db2JhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gZGV0aWsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iSGFwdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IktvZGUgUElOIFNJTSBzYWxhaC4gSHVidW5naSBvcGVyYXRvciB1bnR1ayBtZW1idWthIGt1bmNpIHBlcmFuZ2thdC4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IktvZGUgUElOIFNJTSBzYWxhaCwgc2lzYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcGVyY29iYWFuIHNlYmVsdW0gQW5kYSBoYXJ1cyBtZW5naHVidW5naSBvcGVyYXRvciB1bnR1ayBtZW1idWthIGt1bmNpIHBlcmFuZ2thdC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJLb2RlIFBJTiBTSU0gc2FsYWgsIHNpc2EgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBlcmNvYmFhbi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSB0aWRhayBkYXBhdCBkaWd1bmFrYW4uIEh1YnVuZ2kgb3BlcmF0b3IgQW5kYS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IktvZGUgUFVLIFNJTSBzYWxhaCwgc2lzYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcGVyY29iYWFuIHNlYmVsdW0gU0lNIHRpZGFrIGRhcGF0IGRpZ3VuYWthbiBzZWxhbWFueWEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iS29kZSBQVUsgU0lNIHNhbGFoLCBzaXNhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJjb2JhYW4gc2ViZWx1bSBTSU0gdGlkYWsgZGFwYXQgZGlndW5ha2FuIHNlbGFtYW55YS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+Ik9wZXJhc2kgUElOIFNJTSBnYWdhbCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+Ik9wZXJhc2kgUFVLIFNJTSBnYWdhbCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS29kZSBEaXRlcmltYSEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJUb21ib2wgbGFndSBzZWJlbHVtbnlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iVG9tYm9sIGxhZ3UgYmVyaWt1dG55YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJUb21ib2wgamVkYSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCmluZGV4IDRlZGEzNDguLjcyMTJlNWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iSW5zZXJpc2NpIGlsIGNvZGljZSBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJJbnNlcmlzY2kgaWwgUFVLIGUgaWwgbnVvdm8gY29kaWNlIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iQ29kaWNlIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTnVvdm8gY29kaWNlIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IkRpZ2l0YSBpbCBQVUsgZGVsbGEgU0lNIGUgaWwgbnVvdm8gY29kaWNlIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iQ29kaWNlIFBVSyBkZWxsYSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik51b3ZvIFBJTiBkZWxsYSBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJUb2NjYSBwZXIgaW5zZXJpcmUgbGEgcGFzc3dvcmQiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJJbnNlcmlzY2kgcGFzc3dvcmQgcGVyIHNibG9jY2FyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+Ikluc2VyaXNjaSBQSU4gcGVyIHNibG9jY2FyZSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJQdWxzYW50ZSBQYXVzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iUHVsc2FudGUgUmlwcm9kdWNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJQdWxzYW50ZSBkaSBhcnJlc3RvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ik1pIHBpYWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iUG9sbGljZSBnacO5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iQ3VvcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJTYmxvY2NhIHBlciBjb250aW51YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iQXZ2aW8gYW5udWxsYXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IlJpbGFzY2lhIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHBlciBlbGltaW5hcmxvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBub24gc2Fyw6AgZWxpbWluYXRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iSW5zZXJpc2NpIGlsIGNvZGljZSBQSU4gZGVzaWRlcmF0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25mZXJtYSBpbCBjb2RpY2UgUElOIGRlc2lkZXJhdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNibG9jY28gc2NoZWRhIFNJTS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkNvZGljZSBQSU4gZXJyYXRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IklsIFBJTiBkZXZlIGVzc2VyZSBkaSA0LTggbnVtZXJpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IklsIGNvZGljZSBQVUsgZG92cmViYmUgYXZlcmUgYWxtZW5vIG90dG8gbnVtZXJpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Ikluc2VyaXNjaSBkaSBudW92byBpbCBjb2RpY2UgUFVLIGNvcnJldHRvLiBSaXBldHV0aSB0ZW50YXRpdmkgY29tcG9ydGFubyBsYSBkaXNhdHRpdmF6aW9uZSBkZWZpbml0aXZhIGRlbGxhIHNjaGVkYSBTSU0uIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmkgZXJyYXRpIGRpIGluc2VyaW1lbnRvIGRlbGxhIHNlcXVlbnphIGRpIHNibG9jY28uIERvcG8gYWx0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZpIGZhbGxpdGksIHRpIHZlcnLDoCBjaGllc3RvIGRpIHNibG9jY2FyZSBpbCB0ZWxlZm9ubyBjb24gdW4gYWNjb3VudCBlbWFpbC5cblxuIFJpcHJvdmEgdHJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlY29uZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCTICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iUmltdW92aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iQ29kaWNlIFBJTiBkZWxsYSBTSU0gZXJyYXRvLiBEZXZpIGNvbnRhdHRhcmUgbFwnb3BlcmF0b3JlIHBlciBzYmxvY2NhcmUgaWwgZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJDb2RpY2UgUElOIGRlbGxhIFNJTSBlcnJhdG8uIEhhaSBhbmNvcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2byBhIGRpc3Bvc2l6aW9uZSwgZG9wb2RpY2jDqSBkb3ZyYWkgY29udGF0dGFyZSBsXCdvcGVyYXRvcmUgcGVyIHNibG9jY2FyZSBpbCBkaXNwb3NpdGl2by4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJDb2RpY2UgUElOIGRlbGxhIFNJTSBlcnJhdG8uIEhhaSBhbmNvcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBhIGRpc3Bvc2l6aW9uZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSBpbnV0aWxpenphYmlsZS4gQ29udGF0dGEgaWwgdHVvIG9wZXJhdG9yZS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkNvZGljZSBQVUsgZGVsbGEgU0lNIGVycmF0by4gSGFpIGFuY29yYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZvIGEgZGlzcG9zaXppb25lIHByaW1hIGNoZSBsYSBTSU0gZGl2ZW50aSBkZWZpbml0aXZhbWVudGUgaW51dGlsaXp6YWJpbGUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iQ29kaWNlIFBVSyBkZWxsYSBTSU0gZXJyYXRvLiBIYWkgYW5jb3JhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmkgYSBkaXNwb3NpemlvbmUgcHJpbWEgY2hlIGxhIFNJTSBkaXZlbnRpIGRlZmluaXRpdmFtZW50ZSBpbnV0aWxpenphYmlsZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+Ik9wZXJhemlvbmUgY29uIFBJTiBkZWxsYSBTSU0gbm9uIHJpdXNjaXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iT3BlcmF6aW9uZSBjb24gUFVLIGRlbGxhIFNJTSBub24gcml1c2NpdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkNvZGljZSBhY2NldHRhdG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iUHVsc2FudGUgdHJhY2NpYSBwcmVjZWRlbnRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iUHVsc2FudGUgdHJhY2NpYSBzdWNjZXNzaXZhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlB1bHNhbnRlIFBhdXNhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKaW5kZXggOGQzNjMwOS4uMTJiNDVlNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCkBAIC0yMCw0OSArMjAsNDkgQEAKIAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i15TXp9ec15Mg16fXldeTIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IteU16fXnNeTINeQ16og16fXldeTINeULVBVSyDXlden15XXkyAg15QtUElOINeU15fXk9epIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLXp9eV15MgUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLXp9eV15MgUElOINeX15PXqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IuKAj9eU16fXnNeTINen15XXkyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLigI/XlNen15zXkyDXp9eV15MgUFVLINep15wg15vXqNeY15nXoSBTSU0g15XXp9eV15MgUElOINeX15PXqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4i4oCP16fXldeTIFBVSyDXqdecINeb16jXmNeZ16EgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLigI/Xnteh16TXqCBQSU4g15fXk9epINep15wg15vXqNeY15nXoSBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLXkteiINeb15PXmSDXnNeU16fXnNeZ15Mg15DXqiDXlNeh15nXodee15QiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLXlNen15zXkyDXodeZ16HXnteUINec15HXmdeY15XXnCDXlNeg16LXmdec15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLXlNen15zXkyDXp9eV15MgUElOINec15HXmdeY15XXnCDXlNeg16LXmdec15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLXp9eV15MgUElOINep15LXldeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i4oCP15TXp9ec15Mg16fXldeTIFBJTiDXnNeR15nXmNeV15wg15TXoNei15nXnNeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4oCP16fXldeTIFBJTiDXqdeS15XXmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiLXm9eT15kg15zXkdeY15wg15DXqiDXlNeg16LXmdec15QsINec15fXpSDXotecIFwn16rXpNeo15nXmFwnINeV15zXkNeX16gg157Xm9efINei15wgMC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i15fXqNeS16og157Xnteh16TXqCDXlNeg15nXodeZ15XXoNeV16og15TXnteo15HXmSDXqdecINeW15nXlNeV15kg16TXqNem15XXoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLXl9eo15LXqiDXntee16HXpNeoINeU16DXmdeh15nXldeg15XXqiDXlNee16jXkdeZINep15wg15bXmdeU15XXmSDXpNeg15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4i15jXoteV158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IteY15XXotefLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i15fXkdeoINeQ16og15TXnteY16LXny4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+Itec15fXpSDXotecIFwn16rXpNeo15nXmFwnINeb15PXmSDXnNeR15jXnCDXkNeqINeU16DXoteZ15zXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+Iteo16nXqiDXoNei15XXnNeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IteQ15nXnyDXm9eo15jXmdehIFNJTSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiLXkNeZ158g15vXqNeY15nXoSBTSU0g15HXmNeQ15HXnNeYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4i15DXmdefINeb16jXmNeZ16EgU0lNINeR15jXnNek15XXny4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4i15TXm9eg16Eg15vXqNeY15nXoSBTSU0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4i15vXqNeY15nXoSDXlC1TSU0g15fXodeoINeQ15Ug16nXnNeQINeg15nXqtefINec16fXqNeV15Ag15DXldeq15UuINeU15vXoNehINeb16jXmNeZ16EgU0lNLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiLXnNeQINeg15nXqtefINec15TXqdeq157XqSDXkdeb16jXmNeZ16EgU0lNINeW15QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4i15vXqNeY15nXoSDXlC1TSU0g16nXnNeaINeU15XXqdeR16og15zXptee15nXqteV16ouXG7XpNeg15Qg15zXodek16cg15TXqdeZ16jXldeqINeU15DXnNeX15XXmNeZINep15zXmiDXnNen15HXnNeqINeb16jXmNeZ16EgU0lNINeQ15fXqC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4i15vXqNeY15nXoSDXlC1TSU0g16DXoteV15wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiLXm9eo15jXmdehIFNJTSDXoNei15XXnCDXkdeQ157Xptei15XXqiBQVUsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiLXnteR15jXnCDXoNei15nXnNeUINep15wg15vXqNeY15nXoSBTSU3igKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIFdpZGdldCAlMiRkINee16rXldeaICUzJGQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IteU15XXodejIFdpZGdldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4i4oCP15DXmdefINeb16jXmNeZ16EgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+IuKAj9eQ15nXnyDXm9eo15jXmdehIFNJTSDXkdeY15DXkdec15guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLigI/XkNeZ158g15vXqNeY15nXoSBTSU0g15HXmNec16TXldefLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiLigI/XlNeb16DXoSDXm9eo15jXmdehIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiLigI/Xm9eo15jXmdehINeULVNJTSDXl9eh16gg15DXlSDXqdec15Ag16DXmdeq158g15zXp9eo15XXkCDXkNeV16rXlS4g15TXm9eg16Eg15vXqNeY15nXoSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+IuKAj9ec15Ag16DXmdeq158g15zXlNep16rXntepINeR15vXqNeY15nXoSBTSU0g15bXlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiLigI/Xm9eo15jXmdehINeULVNJTSDXqdec15og15TXldep15HXqiDXnNem157Xmdeq15XXqi5cbtek16DXlCDXnNeh16TXpyDXlNep15nXqNeV16og15TXkNec15fXldeY15kg16nXnNeaINec16fXkdec16og15vXqNeY15nXoSBTSU0g15DXl9eoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiLigI/Xm9eo15jXmdehINeULVNJTSDXoNei15XXnC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IuKAj9eb16jXmNeZ16EgU0lNINeg16LXldecINeR15DXntem16LXldeqIFBVSy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+IuKAj9ee15HXmNecINeg16LXmdec15Qg16nXnCDXm9eo15jXmdehIFNJTeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4i4oCPJTEkcy4gV2lkZ2V0ICUyJGQg157XqteV15ogJTMkZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i4oCP15TXldeh16MgV2lkZ2V0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i16jXmdenIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLXkNeW15XXqCDXkdeZ15jXldecINeU16DXoteZ15zXlCDXlNeV16jXl9eRLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IteQ15bXldeoINeR15nXmNeV15wg15TXoNei15nXnNeUINeb15XXldelLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IldpZGdldCDigI88eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiLigI9XaWRnZXQg4oCPPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IteR15XXl9eoINee16nXqtee16nXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4i16HXmNeY15XXoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+Itee16bXnNee15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i16TXp9eT15kg157Xk9eZ15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+Iteh15nXk9eV16gg157Xl9eT16kg16nXnCBXaWRnZXRzINeU16rXl9eZ15wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i16HXmdeT15XXqCDXnteX15PXqSDXqdecIFdpZGdldHMg15TXodeq15nXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4iV2lkZ2V0IOKAjzx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INeg157Xl9enLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i4oCP16HXmdeT15XXqCDXnteX15PXqSDXqdecIFdpZGdldHMg15TXqteX15nXnC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLigI/XodeZ15PXldeoINee15fXk9epINep15wgV2lkZ2V0cyDXlNeh16rXmdeZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiLigI9XaWRnZXQg4oCPPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g16DXnteX16cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4i15TXqNeX15Eg15DXqiDXkNeW15XXqCDXkdeZ15jXldecINeU16DXoteZ15zXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiLXkdeZ15jXldecINeg16LXmdec15Qg15HXkNee16bXoteV16og15TXodeY15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLXkdeZ15jXldecINeg16LXmdec15Qg15HXkNee16bXoteV16og16bXmdeV16gg16fXlS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IteR15nXmNeV15wg16DXoteZ15zXlCDXkdeQ157Xptei15XXqiDXlteZ15TXldeZINek16jXpteV16MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IteR15nXmNeV15wg16DXoteZ15zXlCDXkdeQ157Xptei15XXqiDXnteh16TXqCBQSU4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiLXkdeZ15jXldecINeg16LXmdec15Qg15HXkNee16bXoteV16og15bXmdeU15XXmSDXpNeg15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4i4oCP15HXmdeY15XXnCDXoNei15nXnNeUINeR15DXntem16LXldeqINee16HXpNeoIFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLXkdeZ15jXldecINeg16LXmdec15Qg15HXkNee16bXoteV16og16HXmdeh157XlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLXkNeW15XXqCDXpteZ15XXqCDXp9eVLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLXkNeW15XXqCDXlNeh15jXlC4iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i15zXl9em158gXCfXlNep15TXlFwnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLXnNeX16bXnyBcJ9eU16TXotecXCciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+Itec15fXptefIFwn15TXpNeh16dcJyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLXkNeU15HXqteZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4i15zXkCDXkNeU15HXqteZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4i15zXkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IteR15jXnCDXoNei15nXnNeUINeb15PXmSDXnNeU157XqdeZ15oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiLXlNeU16TXotec15Qg15HXldeY15zXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLXqdeX16jXqCDXkNeqIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INec157Xl9eZ16fXlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g15zXkCDXmdeZ157Xl9enLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IteQ15HXkiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtOTUsMzAgKzEwMiwyOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i16nXm9eX16og15DXqiDXlNen15UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+Iten15Ug15HXmdeY15XXnCDXoNei15nXnNeUINep15LXldeZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i16HXmdeh157XlCDXqdeS15XXmdeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+Itee16HXpNeoIFBJTiDXqdeS15XXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiLigI/Xnteh16TXqCBQSU4g16nXkteV15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+Iteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLXqdeo15jXmCDXkNeqINen15Ug15HXmdeY15XXnCDXlNeg16LXmdec15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLXlNeW158g157Xodek16ggUElOINecLVNJTSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4i15TXltefINee16HXpNeoIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IuKAj9eU15bXnyDXnteh16TXqCBQSU4g15wtU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiLigI/XlNeW158g157Xodek16ggUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IteU15bXnyDXkNeqINeU16HXmdeh157XlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+Iteb16jXmNeZ16Eg15QtU0lNINee15XXqdeR16og15vXoteqLiDXlNeW158g16fXldeTIFBVSyDXm9eT15kg15zXlNee16nXmdeaLiDXpNeg15Qg15DXnCDXlNeh16TXpyDXnNek16jXmNeZ150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IteU15bXnyDXkNeqINen15XXkyDXlC1QSU4g15TXqNem15XXmSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLXkNep16gg15DXqiDXp9eV15Mg15QtUElOINeU16jXpteV15kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Itee15HXmNecINeg16LXmdec15Qg16nXnCDXm9eo15jXmdehIFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Iten15XXkyBQSU4g16nXkteV15kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i15TXp9ec15Mg157Xodek16ggUElOINep15DXldeo15vXlSA0INei15MgOCDXodek16jXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+Iten15XXkyBQVUsg16bXqNeZ15og15zXlNeZ15XXqiDXkdefIDgg16HXpNeo15XXqiDXkNeVINeZ15XXqteoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IteU15bXnyDXnteX15PXqSDXkNeqINen15XXkyBQVUsg15TXoNeb15XXny4g16DXmdeh15nXldeg15XXqiDXl9eV15bXqNeZ150g15nXqdeR15nXqteVINec16bXnteZ16rXldeqINeQ16og15vXqNeY15nXoSDXlC1TSU0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+Iten15XXk9eZINeULVBJTiDXkNeZ16DXnSDXqteV15DXnteZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiLigI/Xm9eo15jXmdehINeULVNJTSDXnteV16nXkdeqINeb16LXqi4g15TXltefINen15XXkyBQVUsg15vXk9eZINec15TXntep15nXmi4g16TXoNeUINeQ15wg15TXodek16cg15zXpNeo15jXmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLigI/XlNeW158g15DXqiDXp9eV15Mg15QtUElOINeU16jXpteV15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4oCP15DXqdeoINeQ16og16fXldeTINeULVBJTiDXlNeo16bXldeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLigI/XnteR15jXnCDXoNei15nXnNeUINep15wg15vXqNeY15nXoSBTSU3igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLigI/XlNen15zXkyDXnteh16TXqCBQSU4g16nXkNeV16jXm9eVIDQg16LXkyA4INeh16TXqNeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4i4oCP16fXldeTIFBVSyDXpteo15nXmiDXnNeU15nXldeqINeR158gOCDXodek16jXldeqINeQ15Ug15nXldeq16guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4oCP15TXltefINee15fXk9epINeQ16og16fXldeTIFBVSyDXlNeg15vXldefLiDXoNeZ16HXmdeV16DXldeqINeX15XXlteo15nXnSDXmdep15HXmdeq15Ug15zXptee15nXqteV16og15DXqiDXm9eo15jXmdehINeULVNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i4oCP16fXldeT15kg15QtUElOINeQ15nXoNedINeq15XXkNee15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Iteg15nXodeZ15XXoNeV16og16jXkdeZ150g157Xk9eZINec16nXqNeY15XXmCDXp9eVINeR15nXmNeV15wg16DXoteZ15zXlC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i15vXk9eZINec15HXmNecINeQ16og15TXoNei15nXnNeULCDXlNeZ15vXoNehINeR15DXntem16LXldeqINeX16nXkdeV158gR29vZ2xlINep15zXmi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4oCP15vXk9eZINec15HXmNecINeQ16og15TXoNei15nXnNeULCDXlNeZ15vXoNehINeR15DXntem16LXldeqINeX16nXkdeV158gR29vZ2xlINep15zXmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+Itep150g157Xqdeq157XqSAo15PXldeQXCLXnCkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+Iteh15nXodee15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IteU15nXm9eg16EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+Itep150g157Xqdeq157XqSDXkNeVINeh15nXodee15Qg15zXkCDXl9eV16fXmdeZ150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+Itep15vXl9eqINeQ16og16nXnSDXlNee16nXqtee16kg15DXlSDXlNeh15nXodee15Q/XG7Xkden16gg15HXm9eq15XXkdeqICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4oCP16nXm9eX16og15DXqiDXqdedINeU157Xqdeq157XqSDXkNeVINeU16HXmdeh157XlD9cbteR16fXqCDXkdeb16rXldeR16ogIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IteR15XXk9enINeX16nXkdeV15/igKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IteU16fXnNeT16og157Xodek16ggUElOINep15LXldeZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uIFxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLigI/XlNen15zXk9eqINee16HXpNeoIFBJTiDXqdeS15XXmSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLiBcblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLXlNen15zXk9eqINeh15nXodee15Qg16nXkteV15nXlCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLlxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Itep16jXmNeY16og15DXqiDXp9eVINeR15nXmNeV15wg15TXoNei15nXnNeUINeR15DXldek158g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS4gXG5cbteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLXkdeZ16bXoteqIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og16nXkteV15nXmdedINec15HXmdeY15XXnCDXoNei15nXnNeqINeU15jXnNek15XXny4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXlNeY15DXkdec15gg15nXoteR15XXqCDXkNeZ16TXldehINec15HXqNeZ16jXqiDXlNee15fXk9ecINep15wg15TXmdem16jXnyDXldeb15wg16DXqteV16DXmSDXlNee16nXqtee16kg15nXkNeR15PXlS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Itep16jXmNeY16og15DXqiDXp9eVINeR15nXmNeV15wg15TXoNei15nXnNeUINeR15DXldek158g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXqteq15HXp9epINec15HXmNecINeQ16og16DXoteZ15zXqiDXlNeY15zXpNeV158g15HXkNee16bXoteV16og15fXqdeR15XXnyDXk9eV15BcItec4oCPLlxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i15TXodeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLigI/Xnteh16TXqCBQSU4g16nXkteV15kg16nXnCDXm9eo15jXmdehINeULVNJTS4g16LXnNeZ15og15zXmdem15XXqCDXm9ei16og16fXqdeoINei150g15TXodek16cg16LXnCDXnteg16og15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU157Xm9ep15nXqC4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IuKAj9ee16HXpNeoIFBJTiDXqdeS15XXmSDXqdecINeb16jXmNeZ16Eg15QtU0lNLiDXoNeV16rXqCDXnNeaINeg15nXodeZ15XXnyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g16DXldeh16Mg15zXpNeg15kg16nXmdeU15nXlCDXotec15nXmiDXnNeZ16bXldeoINen16nXqCDXotedINeU16HXpNenINei15wg157XoNeqINec15HXmNecINeQ16og16DXoteZ15zXqiDXlNee15vXqdeZ16guIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4i4oCP157Xodek16ggUElOINep15LXldeZINep15wg15vXqNeY15nXoSDXlC1TSU0uINeg15XXqteo15Ug15zXmiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXoNeV16HXpNeZ150uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiLigI/XnNeQINeg15nXqtefINec15TXqdeq157XqSDXkdeb16jXmNeZ16Eg15QtU0lNLiDXpteV16gg16fXqdeoINei150g15TXodek16cuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLigI/Xp9eV15MgUFVLINep15LXldeZINep15wg15vXqNeY15nXoSDXlC1TSU0uINeg15XXqteoINec15og16DXmdeh15nXldefIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDXoNeV16HXoyDXnNek16DXmSDXqdeb16jXmNeZ16Eg15QtU0lNINeZ16DXotecINec16bXnteZ16rXldeqLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IuKAj9en15XXkyBQVUsg16nXkteV15kg16nXnCDXm9eo15jXmdehINeULVNJTS4g16DXldeq16jXlSDXnNeaIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINeg15XXodek15nXnSDXnNek16DXmSDXqdeb16jXmNeZ16Eg15QtU0lNINeZ16DXotecINec16bXnteZ16rXldeqLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4i4oCP16TXoteV15zXqiDXnteh16TXqCDXlC1QSU4g16nXnCDXm9eo15jXmdehINeULVNJTSDXoNeb16nXnNeUISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4i4oCP16TXoteV15zXqiDXp9eV15Mg15QtUFVLINep15wg15vXqNeY15nXoSDXlC1TSU0g16DXm9ep15zXlCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i15TXp9eV15Mg15TXqten15HXnCEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLXnNeX16bXnyBcJ9eU16jXpteV16LXlCDXlNen15XXk9ee16pcJyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Itec15fXptefIFwn15TXqNem15XXoteUINeU15HXkNeUXCciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i15zXl9em158gXCfXlNep15TXlFwnIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKaW5kZXggOTJlMzA4Yi4uNTEwNjI3MSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQSU7jgrPjg7zjg4njgpLlhaXlipsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUvjgajmlrDjgZfjgYRQSU7jgrPjg7zjg4njgpLlhaXlipsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVS+OCs+ODvOODiSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i5paw44GX44GEUElO44Kz44O844OJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iUFVL44Go5paw44GX44GEUElO44Kz44O844OJ44KS5YWl5YqbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJTSU0gUFVL44Kz44O844OJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLmlrDjgZfjgYRTSU0gUElO44Kz44O844OJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i44K/44OD44OX44GX44Gm44OR44K544Ov44O844OJ44KS5YWl5YqbIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i44Ot44OD44Kv44KS6Kej6Zmk44GZ44KL44Gr44Gv44OR44K544Ov44O844OJ44KS5YWl5YqbIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i44Ot44OD44Kv44KS6Kej6Zmk44GZ44KL44Gr44GvUElO44KS5YWl5YqbIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IuS4gOaZguWBnOatouODnOOCv+ODsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i5YaN55Sf44Oc44K/44OzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLlgZzmraLjg5zjgr/jg7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i44Kw44OD44OJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4i44Kk44Oe44Kk44OBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4i44OP44O844OIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4i57aa6KGM44GZ44KL44Gr44Gv44Ot44OD44Kv44KS6Kej6Zmk44GX44Gm44GP44Gg44GV44GEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i6LW35YuV44KS44Kt44Oj44Oz44K744Or44GX44G+44GX44GfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IuWJiumZpOOBmeOCi+OBq+OBrzx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+44KS44OJ44Ot44OD44OX44GX44Gm44GP44Gg44GV44GE44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+44Gv5YmK6Zmk44GV44KM44G+44Gb44KT44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLluIzmnJvjga5QSU7jgrPjg7zjg4njgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i5biM5pyb44GuUElO44Kz44O844OJ44KS56K66KqN44GX44Gm44GP44Gg44GV44GEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTSU3jgqvjg7zjg4njga7jg63jg4Pjgq/op6PpmaTkuK3igKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJQSU7jgrPjg7zjg4njgYzmraPjgZfjgY/jgYLjgorjgb7jgZvjgpPjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJQSU7jga80772eOOahgeOBruaVsOWtl+OBp+WFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVS+OCs+ODvOODieOBrzjmoYHku6XkuIrjga7nlarlj7fjgafjgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLmraPjgZfjgYRQVUvjgrPjg7zjg4njgpLlho3lhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgILoqqTlhaXlipvjgpLnubDjgorov5TjgZnjgajjgIFTSU3jgYzmsLjkuYXjgavnhKHlirnjgavjgarjgovjgYrjgZ3jgozjgYzjgYLjgorjgb7jgZnjgIIiPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuODreODg+OCr+ino+mZpOODkeOCv+ODvOODs+OBruWFpeWKm+OCkjx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+5Zue6ZaT6YGV44GI44G+44GX44Gf44CC44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7lm57plpPpgZXjgYjjgovjgajjgIHmkLrluK/nq6/mnKvjga7jg63jg4Pjgq/op6PpmaTjgavjg6Hjg7zjg6vjgqLjgqvjgqbjg7Pjg4jjgYzlv4XopoHjgavjgarjgorjgb7jgZnjgIJcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7np5LlvozjgavjgoLjgYbkuIDluqbjgYroqabjgZfjgY/jgaDjgZXjgYTjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiAtICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i5YmK6ZmkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJTSU0gUElO44Kz44O844OJ44GM54Sh5Yq544Gn44GZ44CC44GK5L2/44GE44Gu56uv5pyr44KS44Ot44OD44Kv6Kej6Zmk44GZ44KL44Gr44Gv5pC65biv6YCa5L+h5Lya56S+44Gr44GK5ZWP44GE5ZCI44KP44Gb44GE44Gf44Gg44GP5b+F6KaB44GM44GC44KK44G+44GZ44CCIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJTSU0gUElO44Kz44O844OJ44GM54Sh5Yq544Gn44GZ44CC5YWl5Yqb44Gn44GN44KL44Gu44Gv44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+5Zue44Gn44GZ44CC44GT44Gu5Zue5pWw44KS6LaF44GI44KL44Go44CB44GK5L2/44GE44Gu56uv5pyr44KS44Ot44OD44Kv6Kej6Zmk44GZ44KL44Gu44Gr5pC65biv6YCa5L+h5Lya56S+44Gr44GK5ZWP44GE5ZCI44KP44Gb44GE44Gf44Gg44GP5b+F6KaB44GM44GC44KK44G+44GZ44CCIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iU0lNIFBJTuOCs+ODvOODieOBjOeEoeWKueOBp+OBmeOAguWFpeWKm+OBp+OBjeOCi+OBruOBr+OBguOBqDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuWbnuOBp+OBmeOAgiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lN44Gv5L2/55So44Gn44GN44G+44Gb44KT44CC5pC65biv6YCa5L+h5Lya56S+44Gr44GK5ZWP44GE5ZCI44KP44Gb44GP44Gg44GV44GE44CCIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJTSU0gUFVL44Kz44O844OJ44GM54Sh5Yq544Gn44GZ44CC5YWl5Yqb44Gn44GN44KL44Gu44Gv44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+5Zue44Gn44GZ44CC44GT44Gu5Zue5pWw44KS6LaF44GI44KL44GoU0lN44Gv5a6M5YWo44Gr5L2/55So44Gn44GN44Gq44GP44Gq44KK44G+44GZ44CCIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iU0lNIFBVS+OCs+ODvOODieOBjOeEoeWKueOBp+OBmeOAguWFpeWKm+OBp+OBjeOCi+OBruOBr+OBguOBqDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuWbnuOBp+OBmeOAguOBk+OBruWbnuaVsOOCkui2heOBiOOCi+OBqFNJTeOBr+WujOWFqOOBq+S9v+eUqOOBp+OBjeOBquOBj+OBquOCiuOBvuOBmeOAgiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iU0lNIFBJTuaTjeS9nOOBq+WkseaVl+OBl+OBvuOBl+OBn+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iU0lNIFBVS+aTjeS9nOOBq+WkseaVl+OBl+OBvuOBl+OBn+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLjgrPjg7zjg4njgYzmib/oqo3jgZXjgozjgb7jgZfjgZ/jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLliY3jga7jg4jjg6njg4Pjgq/jg5zjgr/jg7MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLmrKHjga7jg4jjg6njg4Pjgq/jg5zjgr/jg7MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i5LiA5pmC5YGc5q2i44Oc44K/44OzIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDdhZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxNTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i4YOQ4YOZ4YOg4YOY4YOk4YOU4YOXIFBJTiDhg5nhg53hg5Phg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLhg5Phg5Dhg5Hhg5Thg63hg5Phg5Thg5cgU0lNLeGDmOGDoSBQVUsg4YOZ4YOd4YOT4YOYIOGDk+GDkCDhg5Dhg67hg5Dhg5rhg5ggUElOIOGDmeGDneGDk+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iU0lNIFBVSyDhg5nhg53hg5Phg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IlNJTS3hg5jhg6Eg4YOQ4YOu4YOQ4YOa4YOYIFBJTi3hg5jhg6Eg4YOZ4YOd4YOT4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPiLhg6jhg5Thg5Thg67hg5Thg5cgIjxmb250IHNpemU9IjE3Ij4iLeGDoSDhg57hg5Dhg6Dhg53hg5rhg5jhg6EiPC9mb250PiIg4YOT4YOQ4YOh4YOQ4YOR4YOU4YOt4YOT4YOQ4YOTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i4YOS4YOQ4YOc4YOh4YOQ4YOR4YOa4YOd4YOZ4YOQ4YOTIOGDkOGDmeGDoOGDmOGDpOGDlOGDlyDhg57hg5Dhg6Dhg53hg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLhg5Lhg5Dhg5zhg6Hhg5Dhg5Hhg5rhg53hg5nhg5Dhg5Mg4YOQ4YOZ4YOg4YOY4YOk4YOU4YOXIFBJTiDhg5nhg53hg5Phg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5ggUElOIOGDmeGDneGDk+GDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOY4YOh4YOQ4YOX4YOV4YOY4YOhIOGDk+GDkOGDkOGDreGDmOGDoOGDlOGDlyDhg5vhg5Thg5zhg5jhg6Phg6Eg4YOT4YOQIOGDqOGDlOGDm+GDk+GDlOGDkiAwLeGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i4YOh4YOQ4YOu4YOY4YOhIOGDkOGDm+GDneGDquGDnOGDneGDkeGDmOGDlyDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Eg4YOb4YOq4YOT4YOU4YOa4YOd4YOR4YOQ4YObIOGDk+GDkOGDqOGDleGDlOGDkeGDo+GDmiDhg6Dhg5Dhg53hg5Phg5Thg5zhg53hg5Hhg5Dhg6Eg4YOS4YOQ4YOT4YOQ4YOQ4YOt4YOQ4YOg4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiLhg5Phg5Dhg5vhg6Phg67hg6Lhg6Phg5rhg5jhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IuGDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlOGDneGDkeGDoSDhg5Phg5Dhg5vhg6Phg67hg6Lhg5Xhg5AgKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i4YOo4YOU4YOQ4YOU4YOg4YOX4YOU4YOXIOGDk+GDkOGDm+GDouGDlOGDnOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+IuGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDmOGDoeGDl+GDleGDmOGDoSDhg5Phg5Dhg5Dhg63hg5jhg6Dhg5Thg5cg4YOb4YOU4YOc4YOY4YOj4YOhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI5MTY5NzE3Nzc5MDU4MDM3MTY4Ij4i4YOl4YOh4YOU4YOa4YOYIOGDqeGDkOGDmeGDlOGDouGDmOGDmuGDmOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiJTSU0g4YOR4YOQ4YOg4YOQ4YOX4YOYIOGDkOGDoCDhg5Dhg6Dhg5jhg6EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4i4YOi4YOQ4YOR4YOa4YOU4YOi4YOo4YOYIOGDkOGDoCDhg5Phg5Thg5Xhg6EgU0lNIOGDkeGDkOGDoOGDkOGDl+GDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IuGDkOGDoCDhg5Dhg6Dhg5jhg6EgU0lNIOGDkeGDkOGDoOGDkOGDl+GDmCDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg6jhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IuGDqeGDkOGDk+GDlOGDlyBTSU0g4YOR4YOQ4YOg4YOQ4YOX4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iNTk2ODk4NTQ4OTQ2Mzg3MDM1OCI+IlNJTSDhg5Hhg5Dhg6Dhg5Dhg5fhg5gg4YOQ4YOgIOGDkOGDoOGDmOGDoSDhg5Dhg5wg4YOQ4YOgIOGDmOGDmeGDmOGDl+GDruGDlOGDkeGDkC4g4YOp4YOQ4YOT4YOU4YOXIFNJTSDhg5Hhg5Dhg6Dhg5Dhg5fhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+IuGDkOGDoOGDkOGDm+GDneGDruGDm+GDkOGDoOGDlOGDkeGDkOGDk+GDmCBTSU0g4YOR4YOQ4YOg4YOQ4YOX4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+IuGDl+GDpeGDleGDlOGDnOGDmCBTSU0g4YOR4YOQ4YOg4YOQ4YOX4YOYIOGDkuGDkOGDm+GDo+GDk+GDm+GDlOGDkeGDmOGDlyDhg5Lhg5Dhg5vhg53hg6Dhg5fhg6Phg5rhg5gg4YOY4YOn4YOdLlxuIOGDk+GDkOGDo+GDmeGDkOGDleGDqOGDmOGDoOGDk+GDmOGDlyDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOj4YOZ4YOQ4YOR4YOU4YOa4YOdIOGDoeGDlOGDoOGDleGDmOGDoeGDmOGDoSDhg57hg6Dhg53hg5Xhg5Dhg5jhg5Phg5Thg6Dhg6Eg4YOh4YOu4YOV4YOQIFNJTSDhg5Hhg5Dhg6Dhg5Dhg5fhg5jhg6Hhg5fhg5Xhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTSDhg5Hhg5Dhg6Dhg5Dhg5fhg5gg4YOT4YOQ4YOR4YOa4YOd4YOZ4YOY4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4iU0lNIOGDkeGDkOGDoOGDkOGDl+GDmCDhg5Phg5Dhg5Hhg5rhg53hg5nhg5jhg5rhg5jhg5AgUFVLIOGDmeGDneGDk+GDmOGDly4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+IuGDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlOGDneGDkeGDoSBTSU0g4YOR4YOQ4YOg4YOQ4YOX4YOY4YOhIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4g4YOV4YOY4YOv4YOU4YOi4YOYICUyJGQgb2YgJTMkZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i4YOV4YOY4YOv4YOU4YOi4YOY4YOhIOGDk+GDkOGDm+GDkOGDouGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i4YOq4YOQ4YOg4YOY4YOU4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Eg4YOh4YOY4YOV4YOg4YOq4YOUIOGDkuGDkOGDqOGDmuGDmOGDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiLhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Eg4YOh4YOY4YOV4YOg4YOq4YOUIOGDqeGDkOGDmeGDlOGDquGDmOGDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDhg5Xhg5jhg6/hg5Thg6Lhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IuGDm+GDneGDm+GDruGDm+GDkOGDoOGDlOGDkeGDmuGDmOGDoSDhg5Dhg5vhg53hg5vhg6Dhg6nhg5Thg5Xhg5Thg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLhg6Hhg6Lhg5Dhg6Lhg6Phg6Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLhg5nhg5Dhg5vhg5Thg6Dhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i4YOb4YOU4YOT4YOY4YOY4YOhIOGDm+GDkOGDoOGDl+GDleGDmOGDoSDhg5Thg5rhg5Thg5vhg5Thg5zhg6Lhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+IuGDk+GDkOGDmOGDrOGDp+GDnSDhg5Xhg5jhg6/hg5Thg6Lhg5jhg6Eg4YOu4YOU4YOa4YOQ4YOu4YOa4YOQIOGDkuGDkOGDnOGDmuGDkOGDkuGDlOGDkeGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLhg5Xhg5jhg6/hg5Thg6Lhg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOT4YOQ4YOu4YOQ4YOg4YOY4YOh4YOu4YOU4YOR4YOQIOGDk+GDkOGDoeGDoOGDo+GDmuGDlOGDkeGDo+GDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IuGDleGDmOGDr+GDlOGDouGDmCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDhg6zhg5Dhg5jhg6jhg5Dhg5rhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4i4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOY4YOhIOGDoeGDmOGDleGDoOGDquGDmOGDoSDhg5Lhg5Dhg6jhg5rhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i4YOS4YOQ4YOh4YOg4YOY4YOQ4YOa4YOU4YOR4YOY4YOXIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIOGDnOGDmOGDm+GDo+GDqOGDmOGDly4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkCDhg6Hhg5Dhg67hg5jhg5ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4i4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIFBpbi3hg5jhg5cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i4YOe4YOQ4YOg4YOd4YOa4YOY4YOhIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IuGDnOGDmOGDm+GDo+GDqOGDlOGDkeGDmOGDoSDhg6Hhg5jhg5Xhg6Dhg6rhg5QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IuGDkuGDkOGDk+GDkOGDoeGDoOGDmOGDkOGDmuGDlOGDkeGDmOGDoSDhg6Hhg5jhg5Xhg6Dhg6rhg5QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiLhg6zhg5jhg5zhg5Ag4YOp4YOQ4YOc4YOQ4YOs4YOU4YOg4YOY4YOhIOGDpuGDmOGDmuGDkOGDmeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MDczOTI4MzAwNDQ0OTA5MzIwIj4i4YOo4YOU4YOb4YOT4YOU4YOS4YOYIOGDqeGDkOGDnOGDkOGDrOGDlOGDoOGDmOGDoSDhg6bhg5jhg5rhg5Dhg5nhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLhg57hg5Dhg6Phg5bhg5jhg6Eg4YOm4YOY4YOa4YOQ4YOZ4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLhg5Phg5Dhg5nhg5Xhg6Dhg5jhg6Eg4YOm4YOY4YOa4YOQ4YOZ4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJTdG9wIOGDpuGDmOGDmuGDkOGDmeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLhg5bhg5Thg5Xhg5jhg5cg4YOQ4YOs4YOU4YOj4YOa4YOYIOGDquGDlOGDoOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IuGDpeGDleGDlOGDleGDmOGDlyDhg5Phg5Dhg67hg6Dhg5jhg5rhg5gg4YOq4YOU4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4i4YOS4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4i4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOU4YOXIOGDkuGDkOGDoeGDkOGDkuGDoOGDq+GDlOGDmuGDlOGDkeGDmuGDkOGDkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IuGDkuGDkOGDm+GDneGDq+GDkOGDruGDlOGDkeGDkCDhg5Lhg5Dhg6Phg6Xhg5vhg5Phg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4i4YOp4YOQ4YOQ4YOS4YOT4YOU4YOXIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOGDrOGDkOGDoeGDkOGDqOGDmuGDlOGDmuGDkOGDky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4YOQ4YOgIOGDrOGDkOGDmOGDqOGDmuGDlOGDkeGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4i4YOS4YOQ4YOj4YOl4YOb4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+IuGDrOGDkOGDqOGDmuGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4i4YOT4YOQ4YOh4YOg4YOj4YOa4YOT4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4i4YOg4YOU4YOf4YOY4YOb4YOY4YOhIOGDqOGDlOGDquGDleGDmuGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0LSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IuGDqOGDlOGDp+GDleGDkOGDnOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuGDmeGDkOGDm+GDlOGDoOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLhg6Phg67hg5vhg50iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i4YOu4YOb4YOY4YOhIOGDqeGDkOGDoOGDl+GDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4YOr4YOY4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuGDkuGDkOGDkOGDoeGDoOGDmOGDkOGDmuGDlOGDlyDhg5bhg5Thg5vhg53hg5cgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LeGDl+GDleGDmOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLhg5Lhg5Dhg5Dhg6Hhg6Dhg5jhg5Dhg5rhg5Thg5cg4YOl4YOV4YOU4YOb4YOd4YOXIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3hg5fhg5Xhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i4YOS4YOQ4YOQ4YOh4YOg4YOY4YOQ4YOa4YOU4YOXIOGDm+GDkOGDoOGDquGDruGDnOGDmOGDlSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t4YOX4YOV4YOY4YOhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLhg5Lhg5Dhg5Dhg6Hhg6Dhg5jhg5Dhg5rhg5Thg5cg4YOb4YOQ4YOg4YOv4YOV4YOc4YOY4YOVIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3hg5fhg5Xhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiLhg5Dhg5vhg5/hg5Dhg5vhg5jhg5zhg5Phg5Thg5rhg5gg4YOb4YOd4YOb4YOu4YOb4YOQ4YOg4YOU4YOR4YOU4YOa4YOYIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuGDkuGDkOGDk+GDkOGDo+GDk+GDlOGDkeGDlOGDmuGDmCDhg5Phg5Dhg67hg5vhg5Dhg6Dhg5Thg5Hhg5jhg6Eg4YOW4YOQ4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4YOT4YOQ4YOS4YOQ4YOV4YOY4YOs4YOn4YOT4YOQ4YOXIOGDnOGDmOGDm+GDo+GDqOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYIOGDnOGDmOGDm+GDo+GDqOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IuGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCDhg57hg5Dhg6Dhg53hg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i4YOZ4YOY4YOT4YOU4YOVIOGDoeGDquGDkOGDk+GDlOGDlyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOb4YOo4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i4YOT4YOQ4YOu4YOQ4YOi4YOU4YOXIOGDl+GDpeGDleGDlOGDnOGDmCDhg5zhg5jhg5vhg6Phg6jhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iU0lNIFBJTi3hg5jhg6Eg4YOo4YOU4YOn4YOV4YOQ4YOc4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiLhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg5Thg5cgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IuGDnuGDkOGDoOGDneGDmuGDmOGDoSDhg6jhg5Thg6fhg5Xhg5Dhg5zhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJTSU0g4YOQ4YOb4YOf4YOQ4YOb4YOQ4YOTIOGDk+GDlOGDkOGDpeGDouGDmOGDleGDmOGDoOGDlOGDkeGDo+GDmuGDmOGDkC4g4YOS4YOQ4YOh4YOQ4YOS4YOg4YOr4YOU4YOa4YOU4YOR4YOa4YOQ4YOTIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDlOGDlyBQVUsg4YOZ4YOd4YOT4YOYLiDhg5Phg5Thg6Lhg5Dhg5rhg5Thg5Hhg5jhg6Hhg5fhg5Xhg5jhg6Eg4YOb4YOY4YOb4YOQ4YOg4YOX4YOU4YOXIOGDm+GDneGDkeGDmOGDmuGDo+GDoCDhg53hg57hg5Thg6Dhg5Dhg6Lhg53hg6Dhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuGDoeGDkOGDoeGDo+GDoOGDleGDlOGDmuGDmCBQSU4g4YOZ4YOd4YOT4YOY4YOhIOGDqOGDlOGDp+GDleGDkOGDnOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLhg6Hhg5Dhg6Hhg6Phg6Dhg5Xhg5Thg5rhg5ggUElOIOGDmeGDneGDk+GDmOGDoSDhg5Phg5Dhg5Phg5Dhg6Hhg6Lhg6Phg6Dhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDhg5Hhg5Dhg6Dhg5Dhg5fhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQ4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4YOQ4YOZ4YOg4YOY4YOk4YOU4YOXIFBJTiwg4YOg4YOd4YOb4YOU4YOa4YOY4YOqIOGDqOGDlOGDk+GDkuGDlOGDkeGDkCA0LeGDk+GDkOGDnCA4IOGDquGDmOGDpOGDoOGDkOGDm+GDk+GDlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsg4YOZ4YOd4YOT4YOYIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOg4YOV4YOQIOGDkOGDnCDhg5vhg5Thg6Lhg5gg4YOq4YOY4YOk4YOg4YOY4YOh4YOS4YOQ4YOcIOGDqOGDlOGDm+GDk+GDkuGDkOGDoOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLhg67hg5Thg5rhg5Dhg67hg5rhg5Ag4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOU4YOXIOGDoeGDrOGDneGDoOGDmCBQVUsg4YOZ4YOd4YOT4YOYLiDhg6Dhg5Dhg5vhg5Phg5Thg5zhg5jhg5vhg5Qg4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDm+GDquGDk+GDlOGDmuGDneGDkeGDkCDhg5Lhg5Dhg5vhg53hg5jhg6zhg5Xhg5Thg5Xhg6EgU0lNIOGDkeGDkOGDoOGDkOGDl+GDmOGDoSDhg5Phg5Dhg5Hhg5rhg53hg5nhg5Xhg5Dhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDhg5nhg53hg5Phg5Thg5Hhg5gg4YOQ4YOgIOGDlOGDm+GDl+GDruGDleGDlOGDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuGDnOGDkOGDruGDkOGDouGDmCDhg5zhg5jhg5vhg6Phg6jhg5jhg6Eg4YOr4YOQ4YOa4YOY4YOQ4YOcIOGDkeGDlOGDleGDoOGDmCDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOY4YOh4YOX4YOV4YOY4YOhIOGDkuGDkOGDmOGDkOGDoOGDlOGDlyDhg5Dhg5Xhg6Lhg53hg6Dhg5jhg5bhg5Dhg6rhg5jhg5Ag4YOX4YOl4YOV4YOU4YOc4YOYIEdvb2dsZSAg4YOQ4YOc4YOS4YOQ4YOg4YOY4YOo4YOY4YOXLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4YOb4YOd4YOb4YOu4YOb4YOQ4YOg4YOU4YOR4YOa4YOY4YOhIOGDoeGDkOGDruGDlOGDmuGDmCAo4YOU4YOa4YOk4YOd4YOh4YOi4YOQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i4YOe4YOQ4YOg4YOd4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLhg6jhg5Thg6Hhg5Xhg5rhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IuGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCDhg6Hhg5Dhg67hg5Thg5rhg5gsIOGDkOGDnCDhg57hg5Dhg6Dhg53hg5rhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuGDk+GDkOGDkuGDkOGDleGDmOGDrOGDp+GDk+GDkOGDlyDhg5vhg53hg5vhg67hg5vhg5Dhg6Dhg5Thg5Hhg5rhg5jhg6Eg4YOh4YOQ4YOu4YOU4YOa4YOYIOGDk+GDkCDhg57hg5Dhg6Dhg53hg5rhg5g/XG7hg5Thg6zhg5Xhg5jhg5Thg5cgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IuGDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlOGDneGDkeGDoSDhg5Dhg5zhg5Lhg5Dhg6Dhg5jhg6jhg5jhg6Eg4YOo4YOU4YOb4YOd4YOs4YOb4YOU4YOR4YOQ4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLhg5fhg6Xhg5Xhg5Thg5wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4t4YOv4YOU4YOgIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDkOGDkyDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg5Thg5cgUElOIOGDmeGDneGDk+GDmC4gXG5cbuGDoeGDquGDkOGDk+GDlOGDlyDhg67hg5Thg5rhg5Dhg67hg5rhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOb4YOo4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLhg5fhg6Xhg5Xhg5Thg5wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4t4YOv4YOU4YOgIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDkOGDkyDhg5Phg5Dhg5Hhg5Thg63hg5Phg5Thg5cg4YOX4YOl4YOV4YOU4YOc4YOYIOGDnuGDkOGDoOGDneGDmuGDmC4gXG5cbuGDruGDlOGDmuGDkOGDruGDmuGDkCDhg6Hhg6rhg5Dhg5Phg5Thg5cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOb4YOo4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLhg5fhg6Xhg5Xhg5Thg5wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4t4YOv4YOU4YOgIOGDk+GDkOGDruGDkOGDouGDlOGDlyDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Eg4YOc4YOY4YOb4YOj4YOo4YOYLiBcblxu4YOh4YOq4YOQ4YOT4YOU4YOXIOGDruGDlOGDmuGDkOGDruGDmuGDkCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhg6zhg5Dhg5vhg6jhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i4YOX4YOl4YOV4YOU4YOcIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDkOGDkyDhg6Hhg6rhg5Dhg5Phg5Thg5cg4YOi4YOQ4YOR4YOa4YOU4YOi4YOY4YOhIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi3hg6/hg5Thg6AuIOGDmeGDmOGDk+GDlOGDlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhg6zhg5Dhg6Dhg6Phg5vhg5Dhg6Lhg5Thg5Hhg5Thg5rhg5gg4YOq4YOT4YOY4YOhIOGDqOGDlOGDm+GDk+GDlOGDkiDhg6Lhg5Dhg5Hhg5rhg5Thg6Lhg5bhg5Qg4YOT4YOQ4YOn4YOU4YOc4YOT4YOU4YOR4YOQIOGDoeGDkOGDrOGDp+GDmOGDoeGDmCwg4YOl4YOQ4YOg4YOu4YOc4YOj4YOa4YOYIOGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmCDhg5Phg5Ag4YOb4YOd4YOb4YOu4YOb4YOQ4YOg4YOU4YOR4YOa4YOY4YOhIOGDp+GDleGDlOGDmuGDkCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5gg4YOT4YOQ4YOY4YOZ4YOQ4YOg4YOS4YOU4YOR4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDoeGDquGDkOGDk+GDlOGDlyDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LeGDr+GDlOGDoC4g4YOZ4YOY4YOT4YOU4YOVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGDrOGDkOGDoOGDo+GDm+GDkOGDouGDlOGDkeGDlOGDmuGDmCDhg6rhg5Phg5jhg6Eg4YOo4YOU4YOb4YOT4YOU4YOSIOGDouGDlOGDmuGDlOGDpOGDneGDnOGDluGDlCDhg5Phg5Dhg6fhg5Thg5zhg5Phg5Thg5Hhg5Ag4YOh4YOQ4YOs4YOn4YOY4YOh4YOYLCDhg6Xhg5Dhg6Dhg67hg5zhg6Phg5rhg5gg4YOe4YOQ4YOg4YOQ4YOb4YOU4YOi4YOg4YOU4YOR4YOYIOGDk+GDkCDhg5vhg53hg5vhg67hg5vhg5Dhg6Dhg5Thg5Hhg5rhg5jhg6Eg4YOn4YOV4YOU4YOa4YOQIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDmCDhg5Phg5Dhg5jhg5nhg5Dhg6Dhg5Lhg5Thg5Hhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiLhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDoeGDquGDkOGDk+GDlOGDlyDhg6Lhg5Dhg5Hhg5rhg5Thg6Lhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi3hg6/hg5Thg6AuIOGDouGDkOGDkeGDmuGDlOGDouGDluGDlCDhg5Phg5Dhg6fhg5Thg5zhg5Phg5Thg5Hhg5Ag4YOh4YOQ4YOs4YOn4YOY4YOh4YOYLCDhg6Xhg5Dhg6Dhg67hg5zhg6Phg5rhg5gg4YOe4YOQ4YOg4YOQ4YOb4YOU4YOi4YOg4YOU4YOR4YOYIOGDk+GDkCDhg5vhg53hg5vhg67hg5vhg5Dhg6Dhg5Thg5Hhg5rhg5jhg6Eg4YOn4YOV4YOU4YOa4YOQIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDmCDhg5Phg5Dhg5jhg5nhg5Dhg6Dhg5Lhg5Thg5Hhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4i4YOX4YOl4YOV4YOU4YOcIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi3hg6/hg5Thg6Ag4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDoeGDquGDkOGDk+GDlOGDlyDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQLiDhg5Dhg5vhg5jhg6Lhg53hg5sg4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOW4YOUIOGDk+GDkOGDk+GDkuGDlOGDkeGDkCDhg6Hhg5Dhg6zhg6fhg5jhg6Hhg5gsIOGDpeGDkOGDoOGDruGDnOGDo+GDmuGDmCDhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOT4YOQ4YOu4YOQ4YOi4YOU4YOXIOGDl+GDpeGDleGDlOGDnOGDmCDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Eg4YOc4YOY4YOb4YOj4YOo4YOYIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGDr+GDlOGDoC4g4YOZ4YOY4YOT4YOU4YOVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGDrOGDkOGDoOGDo+GDm+GDkOGDouGDlOGDkeGDlOGDmuGDmCDhg6rhg5Phg5jhg6Eg4YOo4YOU4YOb4YOT4YOU4YOSIOGDm+GDneGDkuGDl+GDruGDneGDleGDlyDhg6Lhg5Dhg5Hhg5rhg5Thg6Lhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQ4YOhIOGDlOGDmuGDpOGDneGDoeGDouGDmOGDoSDhg5Dhg5zhg5Lhg5Dhg6Dhg5jhg6jhg5jhg6Eg4YOS4YOQ4YOb4YOd4YOn4YOU4YOc4YOU4YOR4YOY4YOXLlxuXG4g4YOu4YOU4YOa4YOQ4YOu4YOa4YOQIOGDoeGDquGDkOGDk+GDlOGDlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDhg6zhg5Dhg5vhg6jhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDk+GDkOGDruGDkOGDouGDlOGDlyDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOY4YOhIOGDnOGDmOGDm+GDo+GDqOGDmCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi3hg6/hg5Thg6AuIOGDmeGDmOGDk+GDlOGDlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhg6zhg5Dhg6Dhg6Phg5vhg5Dhg6Lhg5Thg5Hhg5Thg5rhg5gg4YOq4YOT4YOY4YOhIOGDqOGDlOGDm+GDk+GDlOGDkiwg4YOT4YOQ4YOS4YOt4YOY4YOg4YOT4YOU4YOR4YOQ4YOXIOGDl+GDpeGDleGDlOGDnOGDmCDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIOGDlOGDmuGDpOGDneGDoeGDouGDmOGDoSDhg5Dhg5zhg5Lhg5Dhg6Dhg5jhg6jhg5jhg6Eg4YOS4YOQ4YOb4YOd4YOn4YOU4YOc4YOU4YOR4YOY4YOXLlxuXG4g4YOu4YOU4YOa4YOQ4YOu4YOa4YOQIOGDoeGDquGDkOGDk+GDlOGDlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDhg6zhg5Dhg5vhg6jhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i4YOQ4YOb4YOd4YOo4YOa4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJTSU0t4YOY4YOhIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCBQSU4g4YOZ4YOd4YOT4YOYLiDhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOu4YOa4YOQIOGDm+GDneGDkuGDmOGDrOGDlOGDleGDlyDhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5jhg6Eg4YOS4YOQ4YOc4YOh4YOQ4YOR4YOa4YOd4YOZ4YOQ4YOTIOGDm+GDmOGDm+GDkOGDoOGDl+GDneGDlyDhg53hg57hg5Thg6Dhg5Dhg6Lhg53hg6Dhg6EuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJTSU0t4YOY4YOhIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCBQSU4g4YOZ4YOd4YOT4YOYLiDhg5fhg6Xhg5Xhg5Thg5wg4YOT4YOQ4YOS4YOg4YOp4YOQ4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5AsIOGDoeGDkOGDnOGDkOGDmyDhg5vhg53hg5Lhg5jhg6zhg5Thg5Xhg5cg4YOX4YOl4YOV4YOU4YOc4YOYIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDmOGDoSDhg5Lhg5Dhg5zhg6Hhg5Dhg5Hhg5rhg53hg5nhg5Dhg5Mg4YOd4YOe4YOU4YOg4YOQ4YOi4YOd4YOg4YOX4YOQ4YOcIOGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDkC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJTSU0t4YOY4YOhIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCBQSU4g4YOZ4YOd4YOT4YOYLiDhg5fhg6Xhg5Xhg5Thg5wg4YOT4YOQ4YOS4YOg4YOp4YOQ4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5AuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0g4YOS4YOQ4YOb4YOd4YOj4YOh4YOQ4YOT4YOU4YOS4YOQ4YOg4YOY4YOQLiDhg5Phg5Dhg6Phg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Phg5jhg5cg4YOd4YOe4YOU4YOg4YOQ4YOi4YOd4YOg4YOhLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4i4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYIFNJTSBQVUsg4YOZ4YOd4YOT4YOYLiDhg5fhg6Xhg5Xhg5Thg5wg4YOT4YOQ4YOS4YOg4YOp4YOQ4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5AsIOGDoeGDkOGDnOGDkOGDmyBTSU0g4YOh4YOQ4YOb4YOj4YOT4YOQ4YOb4YOd4YOTIOGDkuGDkOGDm+GDneGDo+GDoeGDkOGDk+GDlOGDkuGDkOGDoOGDmCDhg5Lhg5Dhg67hg5Phg5Thg5Hhg53hg5Phg5Thg6EuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4i4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYIFNJTSBQVUsg4YOZ4YOd4YOT4YOYLiDhg5fhg6Xhg5Xhg5Thg5wg4YOT4YOQ4YOS4YOg4YOp4YOQ4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5AsIOGDoeGDkOGDnOGDkOGDmyBTSU0g4YOh4YOQ4YOb4YOj4YOT4YOQ4YOb4YOd4YOTIOGDkuGDkOGDm+GDneGDo+GDoeGDkOGDk+GDlOGDkuGDkOGDoOGDmCDhg5Lhg5Dhg67hg5Phg5Thg5Hhg53hg5Phg5Thg6EuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJTSU0gUElOIOGDneGDnuGDlOGDoOGDkOGDquGDmOGDkCDhg6nhg5Dhg5jhg6jhg5Dhg5rhg5AhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJTSU0gUFVLIOGDneGDnuGDlOGDoOGDkOGDquGDmOGDkCDhg6nhg5Dhg5jhg6jhg5Dhg5rhg5AhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IuGDmeGDneGDk+GDmCDhg5vhg5jhg6bhg5Thg5Hhg6Phg5rhg5jhg5AhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i4YOs4YOY4YOc4YOQIOGDqeGDkOGDnOGDkOGDrOGDlOGDoOGDluGDlCDhg5Lhg5Dhg5Phg5Dhg6Hhg5Xhg5rhg5jhg6Eg4YOm4YOY4YOa4YOQ4YOZ4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i4YOo4YOU4YOb4YOT4YOU4YOS4YOYIOGDqeGDkOGDnOGDkOGDrOGDlOGDoOGDmOGDoSDhg6bhg5jhg5rhg5Dhg5nhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i4YOe4YOQ4YOj4YOW4YOY4YOhIOGDpuGDmOGDmuGDkOGDmeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+IuGDk+GDkOGDmeGDleGDoOGDmOGDoSDhg6bhg5jhg5rhg5Dhg5nhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjMwODQxNzkzMjQ4MTA1NzU3ODciPiLhg6jhg5Thg6nhg5Thg6Dhg5Thg5Hhg5jhg6Eg4YOm4YOY4YOa4YOQ4YOZ4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IuGDkOGDoCDhg5Dhg6Dhg5jhg6Eg4YOh4YOU4YOg4YOV4YOY4YOh4YOYLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDljNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxNTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6A4Z684Z6KIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IuGelOGeieGfkuGeheGevOGem+KAi+Gem+GfgeGegeKAi+GegOGevOGeiiBQVUsgIOGek+Get+GehOKAi+KAiyBQSU4g4Z6Q4Z+S4Z6Y4Z644oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6f4Z+K4Z644Z6YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiLhnpvhn4HhnoHigIvhnoDhnrzhnoogUFVLIOGen+GfiuGeuOGemCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4i4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6KIFBJTiDhnp/hn4rhnrjhnpjigIvhnpDhn5LhnpjhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLhnpThn4nhn4cg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+LIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCLIOKAi+GeiuGevuGemOGfkuGelOGeuOKAi+GeiuGfhOGfh+KAi+Gen+GfhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuGelOGeieGfkuGeheGevOGem+KAi+GegOGevOGeiiBQSU4g4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4Z6A4Z684Z6KIFBJTiDhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4oCLIOGeheGeu+GeheKAi+GemOGfieGeuuGek+Geu+GemeKAiyDhnpThnpPhn5LhnpHhnrbhnpThn4vhnpjhnoAgMCDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i4Z6U4Z624Z6T4oCL4Z6b4Z6+4Z6f4oCL4Z6A4Z624Z6a4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6P4Z624Z6Y4oCL4Z6R4Z6Y4Z+S4Z6a4Z6E4Z+L4oCL4Z6Y4Z674Z6BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiLhnpThnrbhnpPigIvhnpThnonhn5LhnoXhnrzhnpvigIvigIvhnpbhn4HhnokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IuGelOGeieGfkuGeheGevOGem+KAi+GekOGfkuGemCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6Q4Z+S4Z6Y4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiLhnoXhnrvhnoXigIvhnpjhn4nhnrrhnpPhnrvhnpkg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiLhnpThno7hn5LhnorhnrbhnonigIvhnofhnrbhnpThn4vigIvhnp/hn4QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6f4Z+K4Z644oCL4Z6Y4oCL4Z6A4Z624Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+IuGeguGfkuGemOGetuGek+KAi+Gen+GfiuGeuOKAi+GemOKAi+GegOGetuGej+KAi+Gek+GfheKAi+GegOGfkuGek+Geu+GehOKAi+GegOGeu+GfhuGeluGfkuGemeGevOGekeGfkOGemuKAi+GelOGek+GfkuGekeGfh+KAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6f4Z+K4Z644Z6Y4Z6A4Z624Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IuGelOGeieGfkuGeheGevOGem+KAi+KAi+KAi+Gen+GfiuGeuOKAi+GemOKAi+GegOGetuGej+KAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iNTk2ODk4NTQ4OTQ2Mzg3MDM1OCI+IuGelOGetuGej+Gfi+KAi+Gen+GfiuGeuOGemOGegOGetuGejyDhnqzigIvhnpjhnrfhnpPigIvhnqLhnrbhnoXigIvhnqLhnrbhnpPhn5Qg4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6f4Z+K4Z644Z6Y4oCL4Z6A4Z624Z6P4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+IuGen+GfiuGeuOGemOKAi+GegOGetuGej+KAi+GemOGet+Gek+KAi+GeouGetuGeheKAi+GelOGfkuGemuGevuKAi+GelOGetuGek+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+IuGelOGetuGek+KAi+GelOGet+GekeKAi+Gen+GfiuGeuOGemOKAi+GegOGetuGej+KAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+Geh+GetuKAi+GeouGeheGet+Gek+GfkuGej+GfkuGemuGfg+GemeGfjeGflFxuIOGekeGetuGegOGfi+GekeGehOKAi+KAi+GegOGfkuGemuGeu+GemOGeoOGfiuGeu+Gek+KAi+GeleGfkuGeiuGem+Gfi+KAi+Gen+GfgeGenOGetuGegOGemOGfkuGemOKAi+GepeGej+KAi+GegeGfkuGen+GfguKAi+Gen+GemOGfkuGemuGetuGelOGfi+KAi+Gen+GfiuGeuOGemOKAi+GegOGetuGej+KAi+GeleGfkuGen+GfgeGehOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiLhnp/hn4rhnrjhnpjigIvhnoDhnrbhno/igIvigIvhnofhnrbhnpThn4vigIvhnp/hn4Thn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IuGen+GfiuGeuOGemOKAi+GegOGetuGej+KAi+Geh+GetuGelOGfi+KAi+GegOGevOGeiuKAi+KAiyBQVUsg4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiLhnoDhn4bhnpbhnrvhnoTigIvhnorhn4Thn4figIvhnp/hn4TigIvhnp/hn4rhnrjhnpjigIvhnoDhnrbhno8uLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIOGekuGetuGej+Geu+KAi+GegOGfkuGemuGetuGeoOGfkuGenOGet+GegCAlMiRkIOGek+GfgyAlMyRkIOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLhnpThnpPhn5LhnpDhn4LhnpjigIvhnpLhnrbhno/hnrvigIvhnoDhn5LhnprhnrbhnqDhn5LhnpzhnrfhnoDigIvhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IuGekeGekeGfgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4i4Z6U4Z624Z6T4oCL4Z6W4Z6E4Z+S4Z6a4Z644Z6A4oCL4Z6V4Z+S4Z6R4Z+D4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4i4Z6U4Z624Z6T4oCL4Z6U4Z6E4Z+S4Z6a4Z694Z6Y4oCL4Z6V4Z+S4Z6R4Z+D4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4Z6S4Z624Z6P4Z674oCL4Z6A4Z+S4Z6a4Z624Z6g4Z+S4Z6c4Z634Z6A4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IuGep+GelOGegOGemuGejuGfjeKAi+Geh+GfkuGemuGevuGen+KAi+GeouGfkuGek+GegOKAi+GelOGfkuGemuGeviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IuGen+GfkuGekOGetuGek+Gel+GetuGeliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IuGemOGfieGetuGen+GfiuGeuOGek+KAi+GekOGejyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiLhnpbhnrfhnpPhnrfhno/hn5LhnpnigIvhnpjhn4Hhnozhn4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+IuGelOGetuGek+KAi+GeheGetuGelOGfi+GeleGfkuGeiuGevuGemOKAi+Gej+GemOGfkuGemuGfgOGelOKAi+GekuGetuGej+Geu+KAi+GegOGfkuGemuGetuGeoOGfkuGenOGet+GegOKAi+GeoeGevuGehOGenOGet+GeieGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IuGelOGetuGek+KAi+GelOGeieGfkuGeheGelOGfi+KAi+GegOGetuGemuKAi+GelOGehOGfkuGeoOGetuGeieKAi+GekuGetuGej+Geu+KAi+GegOGfkuGemuGetuGeoOGfkuGenOGet+GegOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4i4Z6U4Z624Z6T4oCL4Z6b4Z674Z6U4oCL4Z6S4Z624Z6P4Z674oCL4Z6A4Z+S4Z6a4Z624Z6g4Z+S4Z6c4Z634Z6AIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IuGeluGehOGfkuGemuGeuOGegOKAi+Gej+GfhuGelOGek+Gfi+KAi+GeiuGfhOGfh+KAi+Gen+GfhOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IuGemuGeu+GeieKAi+GeiuGfhOGfh+KAi+Gen+GfhOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i4Z6b4Z+G4Z6T4Z624Z+G4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiLhnorhn4Thn4figIvhnp/hn4TigIvhno/hnrbhnpjigIvigIvhnpHhnpjhn5LhnprhnoThn4vigIvhnpjhnrvhnoHhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4i4Z6A4Z684Z6KIFBJTiDhnorhn4Thn4figIvhnp/hn4Thn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLhnpbhnrbhnoDhn5LhnpnigIvhnp/hnpjhn5LhnoThnrbhno/hn4vigIvhnorhn4Thn4figIvhnp/hn4TigIvhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLhnpXhn5LhnpHhn4PigIvhnpvhn4bhnpPhnrbhn4bhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i4Z6V4Z+S4Z6R4Z+D4oCL4Z6a4Z674Z6J4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiLhnpThn4rhnrzhno/hnrvhnoTigIvhnpThnpHigIvhnpjhnrvhnpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+IuGelOGfiuGevOGej+Geu+GehOKAi+GelOGekeKAi+GelOGek+GfkuGekeGetuGelOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IuGelOGfiuGevOGej+Geu+GehOKAi+GeleGfkuGeouGetuGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i4Z6U4Z+K4Z684Z6P4Z674Z6E4oCL4Z6F4Z624Z6A4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLhnpThn4rhnrzhno/hnrvhnoTigIvhnpThnonhn5LhnojhnpThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i4Z6Y4Z+B4Z6K4Z+D4oCL4Z6h4Z6+4Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4i4Z6Y4Z+B4Z6K4Z+D4oCL4Z6F4Z674Z+HIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4i4Z6U4Z+B4Z+H4Z6K4Z684Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4i4Z6K4Z+E4Z+H4oCL4Z6f4Z+EIOKAi+GeiuGevuGemOGfkuGelOGeuOKAi+GelOGek+GfkuGejyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IuGelOGetuGek+KAi+GelOGfhOGfh+GelOGehOGfi+KAi+GegOGetuGemuKAi+GeheGetuGelOGfi+GeleGfkuGeiuGevuGemCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLhnpHhnpjhn5LhnpvhnrbhnoDhn4sgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6b4Z674Z6U4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOGek+GeueGehOKAi+GemOGet+Gek+KAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+Gem+Geu+GelOKAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiLhnpThn4Thn4figIvhnpThnoThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i4Z6b4Z674Z6UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLhnprhnr3hnoXhnprhnrbhnpvhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLhnpThn5LhnorhnrzhnprigIvhnprhnpThn4DhnpQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLhnorhn4Thn4figIvigIvhnp/hn4QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6Q4Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuGen+GfkuGehOGetuGej+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLhnpThnr7hnoDigIvhnp/hn4bhnqHhn4HhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuGen+GfkuGenOGfguGehOGemuGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLhnprhnrvhnonigIvhnqHhnr7hnoTigIvhnpvhnr7igIvhnorhnr7hnpjhn5LhnpThnrggPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IuGemuGeu+GeieKAi+GeheGeu+Gfh+GegOGfkuGemuGfhOGemOKAi+Gen+GemOGfkuGemuGetuGelOGfiyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i4Z6a4Z674Z6J4oCL4Z6R4Z+F4oCL4Z6G4Z+S4Z6c4Z+B4Z6E4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z64IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4i4Z6a4Z674Z6J4oCL4oCL4Z6R4Z+F4oCL4Z6f4Z+S4Z6K4Z624Z+G4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z64IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuGeouGfkuGek+GegOKAi+GelOGfkuGemuGevuKAi+GelOGeheGfkuGeheGeu+GelOGfkuGelOGek+GfkuGekyA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLhnoDhnrbhnprigIvhnqDhn4XigIvhnpbhn4HhnpvigIvhnqLhnrbhnp/hnpPhn5LhnpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLhnpfhn5Lhnpvhn4HhnoXigIvigIvhnpvhn4bhnpPhnrbhn4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IuGem+GfhuGek+GetuGfhuKAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IuGeluGetuGegOGfkuGemeKAi+Gen+GemOGfkuGehOGetuGej+Gfi+KAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiLhnoDhnrzhnoogUElOIOGemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6Y4Z+S4Z6K4Z6E4oCL4Z6R4Z+A4Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6a4Z6Z4Z+I4oCL4Z6W4Z+B4Z6bIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhnpzhnrfhnpPhnrbhnpHhnrjhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IuGeguGevOGemuKAi+Gem+GfhuGek+GetuGfhuKAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IuGelOGeieGfkuGeheGevOGem+KAi+GegOGevOGeiiBQSU4g4Z6f4Z+K4Z644Z6Y4oCL4Z6A4Z624Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiLhnpThnonhn5LhnoXhnrzhnpvigIvigIvhnoDhnrzhnoogUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IuGelOGeieGfkuGeheGevOGem+KAi+GeluGetuGegOGfkuGemeKAi+Gen+GemOGfkuGehOGetuGej+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IuGepeGeoeGevOGenOKAi+Gen+GfiuGeuOGemOGegOGetuGej+KAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+GelOGet+GekeGflCDhnpThnonhn5LhnoXhnrzhnpvigIvhnoDhnrzhnoogUFVLIOGeiuGevuGemOGfkuGelOGeuOKAi+GelOGek+GfkuGej+GflCDhnoXhn4bhnpbhn4Thn4figIvhnpbhn5Dhno/hn4zhnpjhnrbhnpPigIvhnpvhnpjhn5LhnqLhnrfhno/igIvhnpHhnrbhnoDhn4vhnpHhnoTigIvhnoDhn5LhnprhnrvhnpjhnqDhn4rhnrvhnpPigIvhnpThnonhn5LhnofhnrzhnpPigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6A4Z684Z6KIFBJTiDhnorhn4LhnpvigIvhnoXhnoThn4vigIvhnpThnrbhnpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4Z6U4Z6J4Z+S4Z6H4Z624Z6A4Z+L4oCL4Z6A4Z684Z6KIFBJTiDhnorhn4LhnpvigIvhnoXhnoThn4vigIvhnpThnrbhnpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IuGegOGfhuGeluGeu+GehOKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+KAi+Gen+GfiuGeuOGemOKAi+GegOGetuGejy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuGelOGeieGfkuGeheGevOGem+KAi+GegOGevOGeiiBQSU4g4Z6K4Z+C4Z6b4oCL4Z6Y4Z624Z6T4oCL4Z6W4Z64IOGfpCDhnorhnpvhn4sg4Z+oIOGem+GfgeGegeGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IuGegOGevOGeiiBQVUsg4Z6C4Z694Z6a4oCL4Z6P4Z+C4oCL4Z6Y4Z624Z6T4oCL4oCLIOGfqCDhnpvhn4HhnoEg4Z6s4oCL4oCL4Z6F4Z+S4Z6a4Z6+4Z6T4oCL4Z6H4Z624Z6E4oCL4Z6T4Z+B4Z+H4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6A4Z684Z6KIFBVSyDhnpjhn5LhnorhnoTigIvhnpHhn4Dhno/hn5Qg4Z6A4Z624Z6a4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z6K4Z+C4Z6b4oCL4Z6F4Z+S4Z6a4Z6+4Z6T4oCL4Z6K4Z654Z6E4oCL4Z6T4Z654Z6E4oCL4Z6U4Z634Z6R4oCL4Z6f4Z+K4Z644Z6Y4oCL4Z6A4Z624Z6P4oCL4Z6H4Z624oCL4Z6i4Z6F4Z634Z6T4Z+S4Z6P4Z+S4Z6a4Z+D4Z6Z4Z+N4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IuGegOGevOGeiiBQSU4g4Z6Y4Z634Z6T4oCL4Z6K4Z684Z6F4oCL4Z6C4Z+S4Z6T4Z62Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6b4Z+G4Z6T4Z624Z+G4oCL4Z6F4Z+S4Z6a4Z6+4Z6T4oCL4Z6W4Z+B4Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuGeiuGevuGemOGfkuGelOGeuOKAi+GeiuGfhOGfh+KAi+Gen+GfhCDhnoXhnrzhnpvigIvhnoDhn5LhnpPhnrvhnoTigIvhnoLhno7hnpPhnrggR29vZ2xlIOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4Z6I4Z+S4Z6Y4Z+E4Z+H4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z+S4Z6a4Z6+ICjhnqLhn4rhnrjigIvhnpjhn4nhn4LigIvhnpvigIspIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLhnpbhnrbhnoDhn5Lhnpnhnp/hnpjhn5LhnoThnrbhno/hn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IuGeheGevOGemyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4Z6I4Z+S4Z6Y4Z+E4Z+H4oCL4Z6i4Z+S4Z6T4Z6A4Z6U4Z+S4Z6a4Z6+IOGerOKAi+GeluGetuGegOGfkuGemeKAi+Gen+GemOGfkuGehOGetuGej+Gfi+KAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLhnpfhn5Lhnpvhn4HhnoXigIvhnojhn5Lhnpjhn4Thn4figIvhnqLhn5LhnpPhnoDhnpThn5Lhnprhnr4g4Z6s4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6AP1xu4Z6Y4Z6+4Z6bICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLhnoDhn4bhnpbhnrvhnoTigIvhnpbhnrfhnpPhnrfhno/hn5LhnpnigIvhnpjhnr7hnpvigIvhnoLhno7hnpPhnrguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuGeouGfkuGek+GegOKAi+GelOGetuGek+KAi+GelOGeieGfkuGeheGevOGem+KAi+GegOGevOGeiiBQSU4g4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6F4Z+G4Z6T4Z694Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGeiuGehOGflFxuXG4g4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6Y4Z+S4Z6K4Z6E4oCL4Z6R4Z+A4Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6a4Z6Z4Z+I4oCL4Z6W4Z+B4Z6bIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLhnqLhn5LhnpPhnoDigIvhnpThnrbhnpPigIvhnpThnonhn5LhnoXhnrzhnpvigIvhnpbhnrbhnoDhn5LhnpnigIvhnp/hnpjhn5LhnoThnrbhno/hn4vigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UXG5cbuGeluGfkuGemeGetuGemeGetuGemOKAi+GemOGfkuGeiuGehOKAi+GekeGfgOGej+KAi+GegOGfkuGek+Geu+GehOKAi+GemuGemeGfiOKAi+GeluGfgeGemyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhnpzhnrfhnpPhnrbhnpHhnrjhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4oCL4Z6C4Z684Z6a4oCL4Z6b4Z+G4Z6T4Z624Z+G4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6F4Z+G4Z6T4Z694Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGeiuGehOGflFxuXG7hnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhn5LhnorhnoTigIvhnpHhn4Dhno/igIvhnoDhn5LhnpPhnrvhnoTigIvhnprhnpnhn4jigIvhnpbhn4HhnpsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Z6c4Z634Z6T4Z624Z6R4Z644Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4oCL4Z6A4Z674Z+G4Z6W4Z+S4Z6Z4Z684Z6R4Z+Q4Z6a4oCL4Z6U4Z6T4Z+S4Z6R4Z+H4oCL4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6F4Z+G4Z6T4Z694Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGeiuGehOGflCDhnpThnpPhn5LhnpHhnrbhnpThn4vigIvhnpbhnrjigIvhnoDhnrbhnprigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhnrfhnpPigIvhnofhn4ThnoLhnofhn5DhnpnigIvigIvhnoXhn5Lhnprhnr7hnpPigIvhnofhnrbhnoQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Z6K4Z6EIOGegOGeu+GfhuGeluGfkuGemeGevOGekeGfkOGemuKAi+GelOGek+GfkuGekeGfh+KAi+KAi+Gek+GeueGehOKAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+GegOGfhuGejuGej+Gfi+KAi+GekeGfheKAi+Gem+GfhuGek+GetuGfhuGeiuGevuGemOKAi+GeiuGevOGeheKAi+GeheGfgeGeieKAi+GeluGeuOKAi+GemuGfhOGehOGeheGegOGfkuGemiDhnqDhnr7hnpnigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnqLhn5LhnpPhnoDhnpThn5Lhnprhnr7igIvhnpPhnrnhnoTigIvhnpThnrbhno/hn4vhnpThnoThn4vhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6F4Z+G4Z6T4Z694Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGeiuGehOGflCDhnpThnpPhn5LhnpHhnrbhnpThn4vigIvhnpbhnrjigIvhnoDhnrbhnprigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhnrfhnpPigIvhnofhn4ThnoLhnofhn5DhnpnigIvigIvhnoXhn5Lhnprhnr7hnpPigIvhnofhnrbhnoQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Z6K4Z6EIOGekeGevOGemuGen+GfkOGeluGfkuGekeKAi+Gek+GeueGehOKAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+GegOGfhuGejuGej+Gfi+KAi+GekeGfheKAi+Gem+GfhuGek+GetuGfhuGeiuGevuGemOKAi+GeiuGevOGeheKAi+GeheGfgeGeieKAi+GeluGeuOKAi+GemuGfhOGehOGeheGegOGfkuGemiDhnqDhnr7hnpnigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnqLhn5LhnpPhnoDhnpThn5Lhnprhnr7igIvhnpPhnrnhnoTigIvhnpThnrbhno/hn4vhnpThnoThn4vhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuGeouGfkuGek+GegOKAi+GelOGetuGek+KAi+GeluGfkuGemeGetuGemeGetuGemOKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+GegOGeu+GfhuGeluGfkuGemeGevOGekeGfkOGemuKAi+GelOGek+GfkuGekeGfh+KAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOKAi+GeheGfhuGek+GeveGek+KAiyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGegOGeu+GfhuGeluGfkuGemeGevOGekeGfkOGemuKAi+GelOGek+GfkuGekeGfh+KAi+Gek+GeueGehOKAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+GegOGfhuGejuGej+Gfi+KAi+GekeGfheKAi+Gem+GfhuGek+GetuGfhuGeiuGevuGemOKAi+GeiuGevOGeheKAi+GeheGfgeGeieKAi+GeluGeuOKAi+GemuGfhOGehOGeheGegOGfkuGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IuGeouGfkuGek+GegOKAi+GelOGetuGek+KAi+GeluGfkuGemeGetuGemeGetuGemOKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+GekeGevOGemuGen+GfkOGeluGfkuGekeKAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOKAi+GeheGfhuGek+GeveGekyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGepeGeoeGevOGenOKAi+GekeGevOGemuGen+GfkOGeluGfkuGekeKAi+Gek+GeueGehOKAi+GegOGfhuGejuGej+Gfi+KAi+GekeGfheKAi+Gem+GfhuGek+GetuGfhuKAi+GeiuGevuGemOKAi+GeiuGevOGeheKAi+GeheGfgeGeieKAi+GeluGeuOKAi+GemuGfhOGehOGeheGegOGfkuGemuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLhnqLhn5LhnpPhnoDigIvhnpThnrbhnpPigIvhnoLhnrzhnprigIvhnpvhn4bhnpPhnrbhn4bigIvhnorhn4Thn4figIvhnp/hn4TigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGelOGek+GfkuGekeGetuGelOGfi+KAi+GeluGeuOKAi+GegOGetuGemuKAi+GeluGfkuGemeGetuGemeGetuGemCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhnorhnoTigIvhnpjhnrfhnpPigIvhnofhn4ThnoLhnofhn5Dhnpkg4Z6i4Z+S4Z6T4Z6A4oCL4Z6T4Z654Z6E4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6f4Z+S4Z6T4Z6+4oCL4Z6y4Z+S4Z6Z4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6A4Z674Z+G4Z6W4Z+S4Z6Z4Z684Z6R4Z+Q4Z6a4oCL4Z6U4Z6T4Z+S4Z6R4Z+H4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6AIOGeiuGfhOGemeKAi+GelOGfkuGemuGevuKAi+GeguGejuGek+GeuOKAi+GeouGfiuGeuOGemOGfguGem+GflFxuXG4g4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6Y4Z+S4Z6K4Z6E4oCL4Z6R4Z+A4Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6a4Z6Z4Z+I4oCL4Z6W4Z+B4Z6bIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4Z6C4Z684Z6a4oCL4Z6b4Z+G4Z6T4Z624Z+G4oCL4Z6K4Z+E4Z+H4oCL4oCL4Z6f4Z+E4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6F4Z+G4Z6T4Z694Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGeiuGehOGflCDhnpThnpPhn5LhnpHhnrbhnpThn4vigIvhnpbhnrjigIvhnoDhnrbhnprigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhnrfhnpPigIvhnofhn4ThnoLhnofhn5DhnpnigIvigIvhnoXhn5Lhnprhnr7hnpPhnofhnrbhnoQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Z6K4Z6EIOGeouGfkuGek+GegOKAi+Gek+GeueGehOKAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+KAi+Gen+GfkuGek+GevuKAi+GesuGfkuGemeKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+GekeGevOGemuGen+GfkOGeluGfkuGekeKAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+GeiuGfhOGemeKAi+GelOGfkuGemuGevuKAi+GeguGejuGek+GeuOKAi+GeouGfiuGeuOGemOGfguGem+GflFxuXG4g4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6Y4Z+S4Z6K4Z6E4oCL4Z6R4Z+A4Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6a4Z6Z4Z+I4oCL4Z6W4Z+B4Z6bIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IuGem+Geu+GelOKAi+GeheGfgeGeiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6KIFBJTiDhnp/hn4rhnrjhnpjigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpwg4Z6i4Z+S4Z6T4Z6A4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6R4Z624Z6A4Z+L4Z6R4Z6E4oCL4Z6A4Z+S4Z6a4Z674Z6Y4Z6g4Z+K4Z674Z6T4oCL4Z6U4Z6J4Z+S4Z6H4Z684Z6T4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6l4Z6h4Z684Z6c4oCL4Z6T4Z+B4Z+HIOGeiuGevuGemOGfkuGelOGeuOKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+Gep+GelOGegOGemuGejuGfjeKAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOGflCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4i4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6KIFBJTiDhnp/hn4rhnrjhnpjigIvhnpjhnrfhnpPigIvigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpzigIssIOGeouGfkuGek+GegOKAi+GemOGetuGekyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Z6A4Z624Z6a4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z+C4Z6b4oCL4Z6T4Z+F4Z6f4Z6b4Z+L4oCL4Z6Y4Z674Z6T4oCL4Z6W4Z+B4Z6b4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4oCL4Z6R4Z624Z6A4Z+L4Z6R4Z6E4oCL4Z6A4Z+S4Z6a4Z674Z6Y4oCL4Z6g4Z+K4Z674Z6T4oCL4oCL4oCL4Z6U4Z6J4Z+S4Z6H4Z684Z6T4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4oCLIOGeiuGevuGemOGfkuGelOGeuOKAi+KAi+KAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+Gep+GelOGegOGemuGejuGfjeKAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+GflCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IuGem+GfgeGegeKAi+GegOGevOGeiuKAiyBQSU4g4Z6f4Z+K4Z644Z6Y4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4oCLLCDhnqLhn5LhnpPhnoDigIvhnpjhnrbhnpMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGegOGetuGemuKAi+GeluGfkuGemeGetuGemeGetuGemOKAi+GeiuGfguGem+KAi+Gek+GfheKAi+KAi+Gen+Gem+Gfi+KAi+GflCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4i4Z6f4Z+K4Z644Z6Y4oCL4Z6Y4Z634Z6T4oCL4Z6i4Z624Z6F4oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6U4Z624Z6T4Z+UIOGekeGetuGegOGfi+GekeGehOKAi+GegOGfkuGemuGeu+GemOGeoOGfiuGeu+Gek+KAi+GelOGeieGfkuGeh+GevOGek+KAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOGflCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4i4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6KIFBVSyDhnp/hn4rhnrjhnpjigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpwsIOGeouGfkuGek+GegOKAi+GemOGetuGekyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Z6A4Z624Z6a4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z+C4Z6b4oCL4Z6T4Z+F4oCL4Z6f4Z6b4Z+LIOGemOGeu+Gek+KAi+GeluGfgeGem+KAi+Gen+GfiuGeuOGemOKAi+KAi+GegOGfkuGem+GetuGemeKAi+Geh+GetuKAi+GemOGet+Gek+KAi+GeouGetuGeheKAi+GelOGfkuGemuGevuKAi+GelOGetuGek+KAi+Geh+GetuKAi+GeouGeheGet+Gek+GfkuGej+GfkuGemuGfg+GemeGfjeKAi+GflCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IuGem+GfgeGegeKAi+GegOGevOGeiiBQVUsg4Z6f4Z+K4Z644Z6Y4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6cLCDhnqLhn5LhnpPhnoDigIvhnpjhnrbhnpMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGegOGetuGemuKAi+GeluGfkuGemeGetuGemeGetuGemOKAi+GeiuGfguGem+KAi+Gek+GfheKAi+Gen+Gem+GfiyDhnpjhnrvhnpPigIvhnpbhn4HhnpvigIvhnp/hn4rhnrjhnpjigIvigIvhnoDhn5LhnpvhnrbhnpnigIvhnofhnrbigIvhnpjhnrfhnpPigIvhnqLhnrbhnoXigIvhnpThn5Lhnprhnr7igIvhnpThnrbhnpPigIvhnofhnrbigIvhnqLhnoXhnrfhnpPhn5Lhno/hn5Lhnprhn4Phnpnhn43igIvhn5QiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IuGelOGetuGek+KAi+GelOGemuGetuGeh+GfkOGemeKAi+GegOGfkuGek+Geu+GehOKAi+GegOGetuGemuKAi+GelOGfkuGemuGej+Get+GelOGej+GfkuGej+Get+KAi+Gem+GfgeGegeKAi+GegOGevOGeiiBQSU4g4Z6f4Z+K4Z644Z6YISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4i4Z6U4Z624Z6T4oCL4Z6U4Z6a4Z624Z6H4Z+Q4Z6Z4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6A4Z624Z6a4oCL4Z6U4Z+S4Z6a4Z6P4Z634Z6U4Z6P4Z+S4Z6P4Z634oCL4oCL4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6KIFBVSyDhnp/hn4rhnrjhnpghIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IuGelOGetuGek+KAi+GekeGekeGeveGem+KAi+GemeGegOKAi+Gem+GfgeGegeKAi+GegOGevOGeiuKAiyEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLhnpThn4rhnrzhno/hnrvhnoTigIvhnpThnpHigIvhnpjhnrvhnpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLhnpThn4rhnrzhno/hnrvhnoTigIvhnpThnpHigIvhnpThnpPhn5LhnpHhnrbhnpThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i4Z6U4Z+K4Z684Z6P4Z674Z6E4oCL4Z6V4Z+S4Z6i4Z624Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4i4Z6U4Z+K4Z684Z6P4Z674Z6E4oCL4Z6F4Z624Z6A4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4i4Z6U4Z+K4Z684Z6P4Z674Z6E4oCL4Z6U4Z6J4Z+S4Z6I4Z6U4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IuGeguGfkuGemOGetuGek+KAi+Gen+GfgeGenOGetuKAi+GflCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKaW5kZXggZGZhYzEwNi4uMmE3MjAwYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQSU4g7L2U65OcIOyeheugpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyDrsI8g7IOIIFBJTiDsvZTrk5wg7J6F66ClIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsg7L2U65OcIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLsg4ggUElOIOy9lOuTnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IlNJTSBQVUsg67CPIOyDiCBQSU4g7L2U65OcIOyeheugpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iU0lNIFBVSyDsvZTrk5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IuyDiCBTSU0gUElOIOy9lOuTnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+Iuu5hOuwgOuyiO2YuOulvCDsnoXroKXtlZjroKTrqbQg7YSw7LmYIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i7J6g6riIIO2VtOygnO2VmOugpOuptCDruYTrsIDrsojtmLgg7J6F66ClIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i7J6g6riI7J2EIO2VtOygnO2VmOugpOuptCBQSU4g7J6F66ClIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IuydvOyLnOykkeyngCDrsoTtirwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IuyerOyDnSDrsoTtirwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IuykkeyngCDrsoTtirwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i7KKL7JWE7JqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4i7Iur7Ja07JqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4i7ZWY7Yq4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4i6rOE7IaN7ZWY66Ck66m0IOyeoOq4iO2VtOygnO2VqeuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiLsi6Ttlokg7Leo7IaM65CoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IuyCreygnO2VmOugpOuptCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPuydhCjrpbwpIOuTnOuhre2VqeuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz7snYAo64qUKSDsgq3soJzrkJjsp4Ag7JWK7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i7JuQ7ZWY64qUIFBJTiDsvZTrk5wg7J6F66ClIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuybkO2VmOuKlCBQSU4g7L2U65OcIO2ZleyduCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNIOy5tOuTnCDsnqDquIjtlbTsoJwg7KSRLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iUElOIOy9lOuTnOqwgCDsnpjrqrvrkJjsl4jsirXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iNH447J6Q66asIOyIq+yekOuhnCDrkJwgUElO7J2EIOyeheugpe2VmOyEuOyalC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsg7L2U65Oc64qUIDjsnpDrpqwg7J207IOB7J2YIOyIq+yekOyXrOyVvCDtlanri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i7Jis67CU66W4IFBVSyDsvZTrk5zrpbwg64uk7IucIOyeheugpe2VmOyEuOyalC4g7J6F66Cl7J2EIOuwmOuzte2VtOyEnCDsi5zrj4TtlZjrqbQgU0lN7J2EIOyYgeq1rOyggeycvOuhnCDsgqzsmqntlaAg7IiYIOyXhuqyjCDrkKnri4jri6QuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLsnqDquIjtlbTsoJwg7Yyo7YS07J2EIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+7ZqMIOyemOuquyDqt7jroLjsirXri4jri6QuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+7ZqMIOuNlCDsi6TtjKjtlZjrqbQg7J2066mU7J28IOqzhOygleydhCDsgqzsmqntlZjsl6wg7Zy064yA7KCE7ZmU66W8IOyeoOq4iO2VtOygnO2VtOyVvCDtlanri4jri6QuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPuy0iCDtm4Tsl5Ag64uk7IucIOyLnOuPhO2VtCDso7zshLjsmpQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i7IKt7KCcIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJTSU0gUElOIOy9lOuTnOqwgCDsnpjrqrvrkJjsl4jsirXri4jri6QuIOydtOuPme2GteyLoOyCrOyXkCDrrLjsnZjtlZjsl6wg6riw6riw66W8IOyeoOq4iCDtlbTsoJztlbTslbwg7ZWp64uI64ukLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iU0lNIFBJTiDsvZTrk5zqsIAg7J6Y66q765CY7JeI7Iq164uI64ukLiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7tmowg7J207IOBIOyLpO2MqO2VoCDqsr3smrAg7J2064+Z7Ya17Iug7IKs7JeQIOusuOydmO2VmOyXrCDquLDquLDrpbwg7J6g6riIIO2VtOygnO2VtOyVvCDtlanri4jri6QuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iU0lNIFBJTiDsvZTrk5zqsIAg7J6Y66q765CY7JeI7Iq164uI64ukLiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7rsojsnZgg6riw7ZqM6rCAIOuCqOyVmOyKteuLiOuLpC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTeydhCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpC4g7J2064+Z7Ya17Iug7IKs7JeQIOusuOydmO2VmOyEuOyalC4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IlNJTSBQVUsg7L2U65Oc6rCAIOyemOuqu+uQmOyXiOyKteuLiOuLpC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+7ZqMIOydtOyDgSDsi6TtjKjtlaAg6rK97JqwIFNJTeydhCDsmYTsoITtnogg7IKs7Jqp7ZWgIOyImCDsl4bsirXri4jri6QuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iU0lNIFBVSyDsvZTrk5zqsIAg7J6Y66q765CY7JeI7Iq164uI64ukLiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7tmowg7J207IOBIOyLpO2MqO2VoCDqsr3smrAgU0lN7J2EIOyZhOyghO2eiCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlNJTSBQSU4g7J6R7JeF7J20IOyLpO2MqO2WiOyKteuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTSBQVUsg7J6R7JeF7J20IOyLpO2MqO2WiOyKteuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i7L2U65OcIOyKueyduCDsmYTro4wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLsnbTsoIQg7Yq4656ZIOuyhO2KvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IuuLpOydjCDtirjrnpkg67KE7Yq8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IuydvOyLnOykkeyngCDrsoTtirwiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYzEwMTgxCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxNTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i4Lqe4Lq04Lqh4Lql4Lqw4Lqr4Lqx4LqUIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IuC6m+C6sOC7gOC6nuC6lCBQVUsg4LqC4Lqt4LqHIFNJTSDgu4HguqXgurDguqXgurDguqvgurHgupQgUElOIOC7g+C7neC7iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4i4Lql4Lqw4Lqr4Lqx4LqUIFBVSyDguoLguq3guocgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLguqXgurDguqvgurHgupQgUElOIOC7g+C7neC7iOC6guC6reC6hyBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLgu4HgupXgurDgu4Dgup7gurfgu4jguq3gup7gurTguqHguqXgurDguqvgurHgupTgupzgu4jgurLgupkiPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLgup7gurTguqHguqXgurDguqvgurHgupTgu4Dgup7gurfgu4jguq3gupvgurvgupTguqXgurHguq3guoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLgup7gurTguqHguqXgurDguqvgurHgupQgUElOIOC7gOC6nuC6t+C7iOC6reC6m+C6u+C6lOC6peC6seC6reC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IuC6peC6sOC6q+C6seC6lCBQSU4g4Lqa4LuN4LuI4LqW4Lq34LqB4LqV4LuJ4Lqt4LqHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiLgu4Dgup7gurfgu4jguq3gupvgurvgupTguqXgurHguq3guoEsIOC7g+C6q+C7ieC6geC6u+C6lOC7gOC6oeC6meC6uSDgu4HguqXgu4nguqfguoHgurvgupQgMC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i4LqE4Lqn4Lqy4Lqh4Lqe4Lqw4LqN4Lqy4LqN4Lqy4Lqh4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LqU4LuJ4Lqn4LqN4Luc4LuJ4Lqy4LqZ4Lqx4LuJ4LqZIOC7gOC6geC6teC6meC6iOC6s+C6meC6p+C6meC6l+C6teC7iOC6geC6s+C6meC6u+C6lOC7geC6peC7ieC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4i4Lqq4Lqy4LqB4LuA4LqV4Lqx4Lqh4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiLguoHgurPguqXgurHguofguqrgurLguoEsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sb3dfYmF0dGVyeSIgbXNnaWQ9IjgxNDM4MDgwMTg3MTkxNzM4NTkiPiLgu4Dguorgurfgu4jguq3guqHgupXgu43gu4jguq3gurjgupvgurDguoHguq3gupnguqrgurLguoHguoLguq3guofgupfgu4jgurLgupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiLguoHgurvgupTgu4DguqHgupngurngu4Dgup7gurfgu4jguq3gupvgurvgupTguqXgurHguq3guoEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiLgu4DguoTgurfguq3guoLgu4jgurLguo3gupbgurfguoHguqXgurHguq3guoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4i4Lqa4LuN4LuI4Lqh4Lq14LqK4Lq04Lqh4LqB4Lqy4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+IuC6muC7jeC7iOC6oeC6teC6iuC6tOC6oeC6geC6suC6lOC7g+C6meC7geC6l+C6seC6muC7gOC6peC6seC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IuC6muC7jeC7iOC6oeC6teC6iuC6tOC6oeC6geC6suC6lOC6ouC6ueC7iOC7g+C6meC7guC6l+C6peC6sOC6quC6seC6mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4i4LuD4Lqq4LuIIFNJTSBjYXJkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iNTk2ODk4NTQ4OTQ2Mzg3MDM1OCI+IuC6muC7jeC7iOC6nuC6u+C6muC7gOC6q+C6seC6meC6iuC6tOC6oeC6geC6suC6lCDguqvgurzgurfguprgu43gu4jguqrgurLguqHgurLgupTguq3gu4jgurLgupnguorgurTguqHguoHgurLgupTgu4TgupTgu4kuIOC6geC6sOC6peC6uOC6meC6suC7g+C6quC7iOC6iuC6tOC6oeC6geC6suC6lOC7g+C7neC7iC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4iU0lNIGNhcmQg4Lqa4LuN4LuI4Lqq4Lqy4Lqh4Lqy4LqU4LuD4LqK4LuJ4LuE4LqU4LuJLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+IlNJTSBjYXJkIOC6guC6reC6h+C6l+C7iOC6suC6meC6luC6t+C6geC6m+C6tOC6lOC6geC6suC6meC6meC6s+C7g+C6iuC7ieC6ouC7iOC6suC6h+C6luC6suC6p+C6reC6meC7geC6peC7ieC6py5cbiDgupXgurTgupTgupXgu43gu4jgupzgurngu4jgu4Pguqvgu4nguprgu43guqXgurTguoHgurLgupnguqXgurDguprgurvguprguoLguq3guofgupfgu4jgurLgupngu4Dgup7gurfgu4jguq3guoLgu40gU0lNIGNhcmQg4LuD4Lud4LuILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiLguorgurTguqHguoHgurLgupTgupbgurfguoHguqXgurHguq3guoEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiLguorgurTguqHguoHgurLgupTgupbgurfguoHguqXgurHguq3guoHgupTgu4nguqfguo3guqXgurDguqvgurHgupQgUFVLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4i4LqB4Lqz4Lql4Lqx4LqH4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LqK4Lq04Lqh4LqB4Lqy4LqULi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDguqfgurTgupTgu4DguojgurHgupQgJTIkZCDguojgurLguoHgupfgurHguofgu53gurvgupQgJTMkZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i4LuA4Lqe4Lq14LuI4Lqh4Lqn4Lq04LqU4LuA4LqI4Lqx4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLguqvguqfgu4jgurLguofgu4Dgupvgurvgu4jgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IuC6guC6sOC6q+C6jeC6suC6jeC6nuC6t+C7ieC6meC6l+C6teC7iOC6m+C6u+C6lOC6peC6seC6reC6geC7geC6peC7ieC6py4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiLguqvguo3gu43gu4ngup7gurfgu4ngupngupfgurXgu4jgupvgurvgupTguqXgurHguq3guoHgu4HguqXgu4nguqcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4Lqn4Lq04LqU4LuA4LqI4Lqx4LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiLgu4LgupXgu4DguqXgurfguq3guoHguoLguq3guofgupzgurngu4jgu4Pguorgu4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLguqrgurDgupbgurLgupngurAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLguoHgu4nguq3guociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i4LqB4Lqy4LqZ4LqE4Lqn4Lqa4LqE4Lq44Lqh4Lqq4Lq34LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLguoHgurLgupnguojgurHgupTguq7gur3guofguqfgurTgu4DguojgurHgupTgu4Pgu53gu4jgu4DguqXgurXgu4jguqHgupXgurvgu4ngupngu4HguqXgu4nguqcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i4LqB4Lqy4LqZ4LqI4Lqx4LqU4Lqu4Lq94LqH4Lqn4Lq04LqU4LuA4LqI4Lqx4LqU4LqE4Lq34LqZ4LuD4Lud4LuI4Lqq4Lqz4LuA4Lql4Lqx4LqU4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4i4Lql4Lq24Lqa4Lqn4Lq04LqU4LuA4LqI4Lqx4LqUIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOC7geC6peC7ieC6py4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLguoLgurDguqvguo3gurLguo3guoLguq3guprgu4DguoLgupTgupvgurvgupTguqXgurHguq3guoEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i4LqB4Lqy4LqZ4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LqU4LuJ4Lqn4LqN4LqB4Lqy4LqZ4LuA4Lql4Lq34LuI4Lqt4LqZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LqU4LuJ4Lqn4LqN4Lqu4Lq54Lqa4LuB4Lqa4LqaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LqU4LuJ4Lqn4LqN4Luc4LuJ4LqyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiLgupvgurvgupTguqXgurHguq3guoHgupTgu4nguqfguo0gUElOLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IuC6geC6suC6meC6m+C6u+C6lOC6peC6seC6reC6geC6lOC7ieC6p+C6jeC6peC6sOC6q+C6seC6lOC6nOC7iOC6suC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLgup7gurfgu4ngupngupfgurXgu4jguq7gurnguprgu4HguprgupouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IuC7gOC6peC6t+C7iOC6reC6meC6nuC6t+C7ieC6meC6l+C6teC7iC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+IuC6m+C6uOC7iOC6oeC7gOC6nuC6h+C6geC7iOC6reC6meC7nOC7ieC6siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MDczOTI4MzAwNDQ0OTA5MzIwIj4i4Lqb4Lq44LuI4Lqh4LuA4Lqe4LqH4LqV4LuN4LuI4LuE4LqbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i4Lqb4Lq44LuI4Lqh4Lqi4Lq44LqU4LqK4Lq74LuI4Lqn4LqE4Lqy4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLgupvgurjgu4jguqHguqvgurzgurTgu4ngupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IuC6m+C6uOC7iOC6oeC6ouC6uOC6lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLgu4DguqXgurfgu4jguq3gupngupngurTgu4nguqfgu4Lgupvgu4nguoLgurbgu4ngupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLgu4DguqXgurfgu4jguq3gupngupngurTgu4nguqfgu4Lgupvgu4nguqXgurvguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLguqvgurvguqfgu4PguogiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLgupvgurvgupTguqXgurHguq3guoHgu4Dgup7gurfgu4jguq3gupTgurPgu4DgupngurXgupnguoHgurLgupngupXgu43gu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiLguoHgurLgupngu4DgupvgurXgupTgu4Pguorgu4ngupbgurfguoHguo3gurvguoHgu4DguqXgurXguoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4i4Lqn4Lqy4LqHIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOC7gOC6nuC6t+C7iOC6reC6peC6tuC6mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4LqI4Lqw4Lqa4LuN4LuI4LqW4Lq34LqB4Lql4Lq24Lqa4Lqt4Lqt4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuC6jeC6u+C6geC7gOC6peC6teC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiLguqXgurbgupoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IuC7geC6peC7ieC6p+C7hiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IuC6m+C7iOC6veC6meC6ruC6ueC6muC7geC6muC6miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuC6m+C6u+C6lOC6peC6seC6reC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLguoHgu4nguq3guociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i4Lqb4Lq04LqU4Lqq4Lq94LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuC7gOC6m+C6teC6lOC6quC6veC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4LqK4Lqt4LqB4Lqr4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuC7gOC6peC6t+C7iOC6reC6meC6guC6tuC7ieC6meC7gOC6nuC6t+C7iOC6rSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i4LuA4Lql4Lq34LuI4Lqt4LqZ4Lql4Lq74LqH4LuA4Lqe4Lq34LuI4LqtIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLgu4DguqXgurfgu4jguq3gupngu4TgupvgupfgurLguofguorgu4ngurLguo3gu4Dgup7gurfgu4jguq0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLgu4DguqXgurfgu4jguq3gupngu4TgupvgupfgurLguofguoLguqfgurLgu4Dgup7gurfgu4jguq0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4i4Lqc4Lq54LuI4LuD4LqK4LuJ4Lqb4Lqx4LqU4LqI4Lq44Lqa4Lqx4LqZIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLguoHgurLgupngu4LgupfguqrgurjguoHgu4DguqrgurXgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLguqXgurfguqHguq7gurnguprgu4HguprguprgupvgurvgupTguqXgurHguq3guoE/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLguq7gurnguprgu4HguprguprgupzgurTgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiLguqXgurDguqvgurHgupTgupzgu4jgurLgupnguprgu43gu4jgupbgurfguoHgupXgu4nguq3guociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i4Lql4Lqw4Lqr4Lqx4LqUIFBJTiDgupzgurTgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+IuC6peC6reC6h+C7g+C7neC7iOC7g+C6meC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Lqn4Lq04LqZ4Lqy4LqX4Lq1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i4LuB4LqV4LuJ4Lqh4Lqu4Lq54Lqa4LuB4Lqa4Lqa4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4i4LuD4Lqq4LuI4Lql4Lqw4Lqr4Lqx4LqUIFBJTiDguoLguq3guofguorgurTguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IuC7g+C6quC7iOC6peC6sOC6q+C6seC6lCBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i4LuD4Lqq4LuI4Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i4LqK4Lq04Lqh4LqW4Lq34LqB4Lqb4Lq04LqU4LqB4Lqy4LqZ4LqZ4Lqz4LuD4LqK4LuJ4LuB4Lql4LuJ4LqnLiDgupvgu4nguq3gupnguqXgurDguqvgurHgupQgUFVLIOC7gOC6nuC6t+C7iOC6reC6lOC6s+C7gOC6meC6teC6meC6geC6suC6meC6leC7jeC7iC4g4LqV4Lq04LqU4LqV4LuN4LuI4Lqc4Lq54LuI4LuD4Lqr4LuJ4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZ4Lqq4Lqz4Lql4Lqx4Lqa4Lql4Lqy4LqN4Lql4Lqw4Lqt4Lq94LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLgu4Pguqrgu4jguqXgurDguqvgurHgupQgUElOIOC6l+C6teC7iOC6leC7ieC6reC6h+C6geC6suC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4Lqi4Lq34LqZ4Lqi4Lqx4LqZ4Lql4Lqw4Lqr4Lqx4LqUIFBJTiDgupfgurXgu4jgupXgu4nguq3guofguoHgurLgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IuC6m+C6u+C6lOC6peC6seC6reC6gSBTSU0gY2FyZC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuC6nuC6tOC6oeC6peC6sOC6q+C6seC6lCBQSU4g4LqE4Lqn4Lqy4Lqh4LqN4Lqy4LqnIDQg4LuA4LqW4Lq04LqHIDgg4LuC4LqV4LuA4Lql4LqBLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IuC6peC6sOC6q+C6seC6lCBQVUsg4LqE4Lqn4LqZ4Lqh4Lq14Lqi4LuI4Lqy4LqH4Luc4LuJ4Lqt4LqNIDgg4LuC4LqV4LuA4Lql4LqBLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuC6m+C7ieC6reC6meC6peC6sOC6q+C6seC6lCBQVUsg4LqX4Lq14LuI4LqW4Lq34LqB4LqV4LuJ4Lqt4LqH4LqE4Lq34LqZ4LuD4Lud4LuILiDguoHgurLgupngup7gurDguo3gurLguo3gurLguqHgu4Pguqrgu4jguqvgurzgurLguo3gu4Dgupfgurfgu4jguq3guojgurDgu4Dguq7gurHgupTgu4Pguqvgu4nguorgurTguqHguoHgurLgupTgu4Pguorgu4nguprgu43gu4jgu4TgupTgu4ngupbgurLguqfguq3gupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IuC6peC6sOC6q+C6seC6lCBQSU4g4Lqa4LuN4LuI4LqB4Lq74LqH4LqB4Lqx4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4LuB4LqV4LuJ4Lqh4Lqu4Lq54Lqa4LuB4Lqa4Lqa4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4Lqr4Lq84Lqy4LqN4LuA4LqB4Lq14LqZ4LuE4LqbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuC7gOC6nuC6t+C7iOC6reC6m+C6u+C6lOC6peC6seC6reC6gSwg4LuA4LqC4Lq74LuJ4Lqy4Lqq4Lq54LuI4Lql4Lqw4Lqa4Lq74Lqa4LqU4LuJ4Lqn4LqN4Lqa4Lqx4LqZ4LqK4Lq1IEdvb2dsZSDguoLguq3guofgupfgu4jgurLgupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLguorgurfgu4jgupzgurngu4jgu4Pguorgu4kgKOC6reC6teC7gOC6oeC6pykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IuC6peC6sOC6q+C6seC6lOC6nOC7iOC6suC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i4LuA4LqC4Lq74LuJ4Lqy4Lqq4Lq54LuI4Lql4Lqw4Lqa4Lq74LqaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLguorgurfgu4jgupzgurngu4jgu4Pguorgu4kg4Lqr4Lq84Lq34Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZ4Lqa4LuN4LuI4LqW4Lq34LqB4LqV4LuJ4Lqt4LqHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLguqXgurfguqHguorgurfgu4jgupzgurngu4jgu4Pguorgu4kg4Lqr4Lq84Lq34Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZ4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4Lqa4LuN4LuIP1xu4LuE4Lqb4LqX4Lq14LuIICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLguoHgurPguqXgurHguofguoHguqfgupTguqrguq3guprguprgurHgupnguorgurUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuC6l+C7iOC6suC6meC6nuC6tOC6oeC6peC6sOC6q+C6seC6lCBQSU7igIsg4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4Lqc4Lq04LqUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC7geC6peC7ieC6py4gXG5cbuC6geC6sOC6peC6uOC6meC6suC6peC6reC6h+C7g+C7neC7iOC7g+C6meC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDguqfgurTgupngurLgupfgurUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuC6l+C7iOC6suC6meC6nuC6tOC6oeC6peC6sOC6q+C6seC6lOC6nOC6tOC6lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3gu4HguqXgu4nguqcuIFxuXG7guqXguq3guofgu4Pgu53gu4jgu4Pgupnguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lqn4Lq04LqZ4Lqy4LqX4Lq1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgupfgu4jgurLgupngu4HgupXgu4nguqHguq7gurnguprgu4HguprguprgupvgurvgupTguqXgurHguq3guoHguoLguq3guofgupfgu4jgurLgupngupzgurTgupQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4Lqt4LuB4Lql4LuJ4LqnLiBcblxu4LqB4Lqw4Lql4Lq44LqZ4Lqy4Lql4Lqt4LqH4LuD4Lud4LuI4LuD4LqZ4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC6p+C6tOC6meC6suC6l+C6tS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLgupfgu4jgurLgupngu4TgupTgu4ngup7gurDguo3gurLguo3gurLguqHgupvgurvgupTguqXgurHguq3guoHgu4HgupfgurHguprgu4DguqXgurHgupTguprgu43gu4jguqrgurPgu4DguqXgurHgupQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4Lqt4LuB4Lql4LuJ4LqnLiDguqvgurzgurHguofguojgurLguoHguoTguqfgurLguqHgup7gurDguo3gurLguo3gurLguqHguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4LqtIOC7geC6l+C6seC6muC7gOC6peC6seC6lOC6guC6reC6h+C6l+C7iOC6suC6meC6iOC6sOC6luC6t+C6geC6leC6seC7ieC6hyDgu4Pguqvgu4nguoHgurHguprgu4Tgupvgu4Pguorgu4nguoTgu4jgurLgu4DguqXgurXgu4jguqHgupXgurvgu4ngupnguojgurLguoHgu4Lguq7guofguofgurLgupnguoTgurfgupngu4Pgu53gu4gg4LuB4Lql4Lqw4LqC4LuN4LuJ4Lqh4Lq54LqZ4Lqc4Lq54LuI4LuD4LqK4LuJ4LqX4Lqx4LqH4Lud4Lq74LqU4LqI4Lqw4Lqq4Lq54LqZ4Lqr4Lqy4LqN4LuE4LqbLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiLgupfgu4jgurLgupngu4TgupTgu4ngup7gurDguo3gurLguo3gurLguqHgupvgurvgupTguqXgurHguq3guoHgu4LgupfguqXgurDguqrgurHguprguprgu43gu4jguqrgurPgu4DguqXgurHgupQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4Lqt4LuB4Lql4LuJ4LqnLiDguqvgurzgurHguofguojgurLguoHguoTguqfgurLguqHgup7gurDguo3gurLguo3gurLguqHguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4LqtIOC7guC6l+C6peC6sOC6quC6seC6muC6guC6reC6h+C6l+C7iOC6suC6meC6iOC6sOC6luC6t+C6geC6leC6seC7ieC6hyDgu4Pguqvgu4nguoHgurHguprgu4Tgupvgu4Pguorgu4nguoTgu4jgurLgu4DguqXgurXgu4jguqHgupXgurvgu4ngupnguojgurLguoHgu4Lguq7guofguofgurLgupnguoTgurfgupngu4Pgu53gu4gg4LuB4Lql4Lqw4LqC4LuN4LuJ4Lqh4Lq54LqZ4Lqc4Lq54LuI4LuD4LqK4LuJ4LqX4Lqx4LqH4Lud4Lq74LqU4LqI4Lqw4Lqq4Lq54LqZ4Lqr4Lqy4LqN4LuE4LqbLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4i4LqX4LuI4Lqy4LqZ4LuE4LqU4LuJ4Lqe4Lqw4LqN4Lqy4LqN4Lqy4Lqh4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LuB4LqX4Lqx4Lqa4LuA4Lql4Lqx4LqU4Lqa4LuN4LuI4Lqq4Lqz4LuA4Lql4Lqx4LqUIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3gu4HguqXgu4nguqcuIOC6leC6reC6meC6meC6teC7ieC7geC6l+C6seC6muC7gOC6peC6seC6lOC6iOC6sOC6luC6t+C6geC6leC6seC7ieC6h+C7g+C6q+C7ieC6geC6seC6muC7hOC6m+C7g+C6iuC7ieC6hOC7iOC6suC7gOC6peC6teC7iOC6oeC6leC6u+C7ieC6meC6iOC6suC6geC7guC6ruC6h+C6h+C6suC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiLgupfgu4jgurLgupngu4TgupTgu4ngup7gurDguo3gurLguo3gurLguqHgupvgurvgupTguqXgurHguq3guoHgu4LgupfguqXgurDguqrgurHguprguprgu43gu4jgupbgurfguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC7geC6peC7ieC6py4g4LqV4Lqt4LqZ4LqZ4Lq14LuJ4LuC4LqX4Lql4Lqw4Lqq4Lqx4Lqa4LqI4Lqw4LqW4Lq34LqB4Lqj4Lq14LuA4LqK4Lqx4LqU4LuA4Lqb4Lqx4LqZ4LqE4LuI4Lqy4LqI4Lqy4LqB4LuC4Lqu4LqH4LqH4Lqy4LqZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgupfgu4jgurLgupngu4HgupXgu4nguqHguq7gurnguprgu4HguprguprgupvgurvgupTguqXgurHguq3guoHgupzgurTgupQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4Lqt4LuB4Lql4LuJ4LqnLiDguqvgurzgurHguofguojgurLguoHgu4HgupXgu4nguqHgupzgurTgupTguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4LqtLCDgupfgu4jgurLgupnguojgurDgupbgurfguoHgupbgurLguqHgu4Pguqvgu4ngupvgurvgupTguqXgurHguq3guoHgu4HgupfgurHguprgu4DguqXgurHgupTguoLguq3guofgupfgu4jgurLgupkg4LqU4LuJ4Lqn4LqN4LqB4Lqy4LqZ4LuA4LqC4Lq74LuJ4Lqy4Lqq4Lq54LuI4Lql4Lqw4Lqa4Lq74Lqa4LuC4LqU4LqN4LuD4LqK4LuJ4Lqt4Lq14LuA4Lqh4Lqn4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZLlxuXG4g4LqB4Lqw4Lql4Lq44LqZ4Lqy4Lql4Lqt4LqH4LuD4Lud4LuI4Lqt4Lq14LqB4LqE4Lqx4LuJ4LqH4LuD4LqZ4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC6p+C6tOC6meC6suC6l+C6tS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuC6l+C7iOC6suC6meC7geC6leC7ieC6oeC6ruC6ueC6muC7geC6muC6muC6m+C6u+C6lOC6peC6seC6reC6geC6guC6reC6h+C6l+C7iOC6suC6meC6nOC6tOC6lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3gu4HguqXgu4nguqcuIOC6q+C6vOC6seC6h+C6iOC6suC6geC6hOC6p+C6suC6oeC6nuC6sOC6jeC6suC6jeC6suC6oeC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq0g4LqX4LuI4Lqy4LqZ4LqI4Lqw4LqW4Lq34LqB4LqW4Lqy4Lqh4LuD4Lqr4LuJ4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LuC4LqX4Lql4Lqw4Lqq4Lqx4Lqa4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4LqU4LuJ4Lqn4LqN4Lqa4Lqx4LqZ4LqK4Lq14Lqt4Lq14LuA4Lqh4LqnLlxuXG4g4Lql4Lqt4LqH4LuD4Lud4LuI4Lqt4Lq14LqB4LqE4Lqx4LuJ4LqH4LuD4LqZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC6p+C6tOC6meC6suC6l+C6tS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLguqXgurbguprguq3guq3guoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IuC6peC6sOC6q+C6seC6lCBQSU4g4LqC4Lqt4LqHIFNJTSDguprgu43gu4jgupbgurfguoHgupXgu4nguq3guofgupfgu4jgurLgupngupXgu4nguq3guofgupXgurTgupTgupXgu43gu4jguqvgurLgupzgurngu4jgu4Pguqvgu4nguprgu43guqXgurTguoHgurLgupkg4LuA4Lqe4Lq34LuI4Lqt4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZ4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4i4Lql4Lqw4Lqr4Lqx4LqUIFBJTiDguoLguq3guocgU0lNIOC6muC7jeC7iOC6luC6t+C6geC6leC7ieC6reC6hywg4LqX4LuI4Lqy4LqZ4Lqq4Lqy4Lqh4Lqy4LqU4Lql4Lqt4LqH4LuE4LqU4LuJ4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3guoHgu4jguq3gupngupfgurXgu4jgupfgu4jgurLgupnguojgurDgupXgu4nguq3guofgupXgurTgupTgupXgu43gu4jguqvgurLgupzgurngu4jgu4Pguqvgu4nguprgu43guqXgurTguoHgurLgupnguoLguq3guofgupfgu4jgurLgupkg4LuA4Lqe4Lq34LuI4Lqt4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZ4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IuC6peC6sOC6q+C6seC6lCBQSU4g4LqC4Lqt4LqHIFNJTSDguprgu43gu4jgupbgurfguoHgupXgu4nguq3guocsIOC6l+C7iOC6suC6meC6quC6suC6oeC6suC6lOC6peC6reC6h+C7hOC6lOC7ieC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4LqtLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNIOC7g+C6iuC7ieC6muC7jeC7iOC7hOC6lOC7ieC7geC6peC7ieC6py4g4LqB4Lqw4Lql4Lq44LqZ4Lqy4LqV4Lq04LqU4LqV4LuN4LuI4Lqr4Lqy4Lqc4Lq54LuI4LuD4Lqr4LuJ4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZ4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4i4Lql4Lqw4Lqr4Lqx4LqUIFBVSyDguoLguq3guocgU0lNIOC6muC7jeC7iOC6luC6t+C6geC6leC7ieC6reC6hywg4LqX4LuI4Lqy4LqZ4Lqq4Lqy4Lqh4Lqy4LqU4Lql4Lqt4LqH4LuE4LqU4LuJ4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3guoHgu4jguq3gupngupfgurXgu4ggU0lNIOC6guC6reC6h+C6l+C7iOC6suC6meC6iOC6sOC7g+C6iuC7ieC6muC7jeC7iOC7hOC6lOC7ieC6ouC7iOC6suC6h+C6luC6suC6p+C6reC6mS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiLguqXgurDguqvgurHgupQgUFVLIOC6guC6reC6hyBTSU0g4Lqa4LuN4LuI4LqW4Lq34LqB4LqV4LuJ4Lqt4LqHLCDgupfgu4jgurLgupnguqrgurLguqHgurLgupTguqXguq3guofgu4TgupTgu4nguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC6geC7iOC6reC6meC6l+C6teC7iCBTSU0g4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4LqI4Lqw4LuD4LqK4LuJ4Lqa4LuN4LuI4LuE4LqU4LuJ4Lqi4LuI4Lqy4LqH4LqW4Lqy4Lqn4Lqt4LqZLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iUElOIOC6guC6reC6hyBTSU0g4LuA4Lqu4Lqx4LqU4Lqn4Lq94LqB4Lql4Lq74LuJ4Lqh4LuA4Lqr4Lq84LqnISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iUFVLIOC6guC6reC6hyBTSU0g4LuA4Lqu4Lqx4LqU4Lqn4Lq94LqB4Lql4Lq74LuJ4Lqh4LuA4Lqr4Lq84LqnISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLguqXgurDigIvguqvgurHgupTigIvgupbgurfguoHgupXguq3guprguq7gurHguprgu4HguqXgu4nguqchIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i4Lqb4Lq44LuI4Lqh4LuA4Lqe4LqH4LqB4LuI4Lqt4LqZ4Luc4LuJ4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i4Lqb4Lq44LuI4Lqh4LuA4Lqe4LqH4LqV4LuN4LuI4LuE4LqbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IuC6m+C6uOC7iOC6oeC6ouC6uOC6lOC6iuC6u+C7iOC6p+C6hOC6suC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+IuC6m+C6uOC7iOC6oeC6q+C6vOC6tOC7ieC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+IuC6m+C6uOC7iOC6oeC6ouC6uOC6lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg3MDA2NTA0MDMwNTQwNDIxNTMiPiLguprgu43gu4jguqHgurXguprgu43guqXgurTguoHgurLgupkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCmluZGV4IDI5ZjYyYTcuLmZmMzAzNGEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4ixK52ZXNraXRlIFBJTiBrb2TEhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IsSudmVza2l0ZSBQVUsgaXIgbmF1asSFIFBJTiBrb2R1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIGtvZGFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJOYXVqYXMgUElOIGtvZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4ixK52ZXNraXRlIFNJTSBrb3J0ZWzEl3MgUFVLIGtvZMSFIGlyIG5hdWrEhSBQSU4ga29kxIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSBrb3J0ZWzEl3MgUFVLIGtvZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJOYXVqYXMgU0lNIGtvcnRlbMSXcyBQSU4ga29kYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJQYWxpZXNraXRlLCBrYWQgxK92ZXMuIHNsYXB0YcW+LiI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IkplaSBub3JpdGUgYXRyYWtpbnRpLCDEr3Zlc2tpdGUgc2xhcHRhxb5vZMSvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iSmVpIG5vcml0ZSBhdHJha2ludGksIMSvdmVza2l0ZSBQSU4ga29kxIUiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iUHJpc3RhYmR5bW8gbXlndHVrYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IlBhbGVpZGltbyBteWd0dWthcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iU3VzdGFiZHltbyBteWd0dWthcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJQYXRpbmthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iTmVwYXRpbmthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4ixaBpcmRpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkplaSBub3JpdGUgdMSZc3RpLCBhdHJha2lua2l0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IlBhbGVpZGltYXMgYXTFoWF1a3RhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJQYWxlaXNraXRlIOKAnjx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+4oCcLCBrYWQgasSvIGnFoXRyaW50dW3El3RlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiLigJ48eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPuKAnCBuZWJ1cyBpxaF0cmludGFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4ixK52ZXNraXRlIHBhZ2VpZGF1amFtxIUgUElOIGtvZMSFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IlBhdHZpcnRpbmtpdGUgcGFnZWlkYXVqYW3EhSBQSU4ga29kxIUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IkF0cmFraW5hbWEgU0lNIGtvcnRlbMSX4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iTmV0aW5rYW1hcyBQSU4ga29kYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4ixK52ZXNraXRlIFBJTiBrb2TEhSwgc3VkYXJ5dMSFIGnFoSA04oCTOCBza2FpxI1pxbMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIGtvZGFzIHR1csSXdMWzIGLFq3RpIG1hxb5pYXVzaWFpIDggc2thaXRtZW7Fsy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJQYWthcnRvdGluYWkgxK92ZXNraXRlIHRpbmthbcSFIFBVSyBrb2TEhS4gUGFrYXJ0b3RpbmFpIGJhbmRhbnQgU0lNIGJ1cyBuZWxlaWTFvmlhbWEgdmlzYW0gbGFpa3VpLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iTmV0aW5rYW1haSBudXBpZcWhxJd0ZSBhdHJha2luaW1vIHBpZcWhaW7EryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrLiBQbyBkYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbmVzxJdrbS4gYmFuZC4gYsWrc2l0ZSBwYXByYcWheXRpIGF0cmFraW50aSB0ZWxlZm9uxIUgbmF1ZG9kYW1pIOKAnkdvb2dsZeKAnCBwcmlzaWp1bmdpbW8gZHVvbWVuaXMuXG5cbiBCYW5keWtpdGUgZGFyIGthcnTEhSBwbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCTICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iUGHFoWFsaW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iTmV0aW5rYW1hcyBTSU0ga29ydGVsxJdzIFBJTiBrb2Rhcy4gUmVpa8SXcyBzdXNpc2lla3RpIHN1IG9wZXJhdG9yaXVtaSwga2FkIGF0cmFraW50xbMgxK9yZW5naW7Ery4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+Ik5ldGlua2FtYXMgU0lNIGtvcnRlbMSXcyBQSU4ga29kYXMuIEp1bXMgbGlrbyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYmFuZC4gUGFza3VpIHJlaWvEl3Mgc3VzaXNpZWt0aSBzdSBvcGVyYXRvcml1bWksIGthZCBqaXMgYXRyYWtpbnTFsyDEr3JlbmdpbsSvLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+Ik5ldGlua2FtYXMgU0lNIGtvcnRlbMSXcyBQSU4ga29kYXMsIGxpa28gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGJhbmQuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJOZWJlZ2FsaW1hIG5hdWRvdGkgU0lNIGtvcnRlbMSXcy4gU3VzaXNpZWtpdGUgc3Ugb3BlcmF0b3JpdW1pLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iTmV0aW5rYW1hcyBTSU0ga29ydGVsxJdzIFBVSyBrb2Rhcy4gTGlrbyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYmFuZC4gUGFza3VpIHZpc2nFoWthaSBuZWJlZ2FsxJdzaXRlIG5hdWRvdGkgU0lNIGtvcnRlbMSXcy4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJOZXRpbmthbWFzIFNJTSBrb3J0ZWzEl3MgUFVLIGtvZGFzLiBMaWtvIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBiYW5kLiBQYXNrdWkgdmlzacWha2FpIG5lYmVnYWzEl3NpdGUgbmF1ZG90aSBTSU0ga29ydGVsxJdzLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iTmVwYXZ5a28gYXRsaWt0aSBTSU0ga29ydGVsxJdzIFBJTiBrb2RvIG9wZXJhY2lqb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJOZXBhdnlrbyBhdGxpa3RpIFNJTSBrb3J0ZWzEl3MgUFVLIGtvZG8gb3BlcmFjaWpvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS29kYXMgcHJpaW10YXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iQW5rc3Rlc25pbyB0YWtlbGlvIG15Z3R1a2FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iS2l0byB0YWtlbGlvIG15Z3R1a2FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlByaXN0YWJkeW1vIG15Z3R1a2FzIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKaW5kZXggYWExMzkzNC4uNTM5ZjkxZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJZXZhZGlldCBQSU7CoGtvZHUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iSWV2YWRpZXQgUFVLwqBrb2R1IHVuIGphdW51IFBJTsKga29kdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVS8Kga29kcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iSmF1bnMgUElOwqBrb2RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iSWV2YWRpZXQgU0lNwqBrYXJ0ZXMgUFVLwqBrb2R1IHVuIGphdW51IFBJTsKga29kdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTcKga2FydGVzIFBVS8Kga29kcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iSmF1bnMgU0lNwqBrYXJ0ZXMgUElOwqBrb2RzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iUGllc2thcmlldGllcywgbGFpIGlldmFkxKt0dSBwYXJvbGkiPC9mb250PiIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJJZXZhZGlldCBwYXJvbGksIGxhaSBhdGJsb8S3xJN0dS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJMYWkgYXRibG/Et8STdHUsIGlldmFkaWV0IFBJTi4iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iUMSBcnRyYXVrxaFhbmFzIHBvZ2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkF0c2thxYZvxaFhbmFzIHBvZ2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IkFwdHVyxJPFoWFuYXMgcG9nYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJQYXTEq2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJOZXBhdMSrayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IlNpcmRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iQXRibG/Et8STamlldCwgbGFpIHR1cnBpbsSBdHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iUGFsYWnFoWFuYSBhdGNlbHRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IlZlbGNpZXQgbG9ncsSra3UgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4sIGxhaSB0byBpemR6xJNzdHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+IkxvZ3LEq2tzIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG5ldGlrcyBpemR6xJNzdHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJJZXZhZGlldCB2xJNsYW1vwqBQSU7CoGtvZHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IkFwc3RpcHJpbmlldCB2xJNsYW1vwqBQSU4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJOb3RpZWsgU0lNwqBrYXJ0ZXMgYXRibG/Et8STxaFhbmEuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJQSU7CoGtvZHMgbmF2IHBhcmVpenMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iSWV2YWRpZXQgUElOLCBrYXMgc2FzdMSBdiBubyA0wqBsxKtkeiA4wqBjaXBhcmllbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUvCoGtvZGFtIGlyIGrEgWLFq3QgdmlzbWF6IDjCoGNpcGFydXMgZ2FyYW0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iQXRrxIFydG90aSBpZXZhZGlldCBwYXJlaXpvIFBVS8Kga29kdS4gSmEgdmFpcsSBa2FzIHJlaXplcyBpZXZhZMSrc2lldCB0byBuZXBhcmVpemksIFNJTcKga2FydGUgdGlrcyBuZWF0Z3JpZXplbmlza2kgYXRzcMSTam90YS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkrFq3MgbmVwYXJlaXppIG5vcsSBZMSrasSBdCBhdGJsb8S3xJPFoWFuYXMga29tYmluxIFjaWp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZWl6ZXMuIFDEk2MgdsSTbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPsKgbmV2ZWlrc23Eq2dpZW0gbcSTxKNpbsSBanVtaWVtIHTEgWxydW5pcyBixatzIGrEgWF0YmxvxLfEkywgaXptYW50b2pvdCBlLXBhc3RhIGtvbnR1LlxuXG5NxJPEo2luaWV0IHbEk2xyZWl6IHDEk2MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7CoHNla3VuZMSTbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDCoOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+Ik5vxYZlbXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik5lcGFyZWl6cyBTSU3CoGthcnRlcyBQSU7CoGtvZHMuwqBMYWkgYXRibG/Et8STdHUgaWVyxKtjaSwgc2F6aW5pZXRpZXMgYXIgbW9iaWxvIHNha2FydSBvcGVyYXRvcnUuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJOZXBhcmVpenMgU0lNwqBrYXJ0ZXMgUElOwqBrb2RzLiBWYXJhdCBtxJPEo2luxIF0IHbEk2wgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqByZWl6aS4gS8S8xatkYXMgZ2FkxKtqdW3EgSBixatzIGrEgXNhemluxIFzIGFyIG1vYmlsbyBzYWthcnUgb3BlcmF0b3J1LCBsYWkgdGFzIGF0YmxvxLfEk3R1IGrFq3N1IGllcsSrY2kuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iTmVwYXJlaXpzIFNJTcKga2FydGVzIFBJTsKga29kcy4gVmFyYXQgbcSTxKNpbsSBdCB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgcmVpemkoLWVzKS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTcKga2FydGUgbmF2IGl6bWFudG9qYW1hLiBTYXppbmlldGllcyBhciBtb2JpbG8gc2FrYXJ1IG9wZXJhdG9ydS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+Ik5lcGFyZWl6cyBTSU3CoGthcnRlcyBQVUvCoGtvZHMuIFZhcmF0IG3Ek8SjaW7EgXQgdsSTbCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHJlaXppLiBLxLzFq2RhcyBnYWTEq2p1bcSBIFNJTcKga2FydGUga8S8xatzIG5laXptYW50b2phbWEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iTmVwYXJlaXpzIFNJTcKga2FydGVzIFBVS8Kga29kcy4gVmFyYXQgbcSTxKNpbsSBdCB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgcmVpemkoLWVzKS4gS8S8xatkYXMgZ2FkxKtqdW3EgSBTSU3CoGthcnRlIGvEvMWrcyBuZWl6bWFudG9qYW1hLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iU0lNwqBrYXJ0ZXMgUElOwqBrb2RhIGlldmFkxKvFoWFuYSBuZWl6ZGV2xIFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iU0lNwqBrYXJ0ZXMgUFVLwqBrb2RhIGlldmFkxKvFoWFuYSBuZWl6ZGV2xIFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJLb2RzIGlyIHBpZcWGZW10cyEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJJZXByaWVrxaHEk2rEgSBpZXJha3N0YSBwb2dhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iTsSBa2FtxIEgaWVyYWtzdGEgcG9nYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJQxIFydHJhdWvFoWFuYXMgcG9nYSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiODMzZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTU3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCisqKgorKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTiDQutC+0LTRi9CzINCx0LjRh9C90Y0g0q/SryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+ItCh0JjQnCDQn9Ku0Jot0LMg0LHQuNGH0Y3RjdC0INGI0LjQvdGNINCf0JjQnSDQutC+0LQg0L7RgNGD0YPQu9C90LAg0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4i0KHQmNCcINCf0q7QmiDQutC+0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+ItCo0LjQvdGNINCh0JjQnCDQn9CY0J0g0LrQvtC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i0J3Rg9GD0YYg0q/QsyDQsdC40YfQuNGFINCx0L7QuyDRhdKv0YDQvdGNINKv0q8iPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLQotCw0LnQu9Cw0YUg0L3Rg9GD0YYg0q/Qs9C40LnQsyDQsdC40YfQvdGNINKv0q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLQotCw0LnQu9Cw0YUgUElOLdCzINC+0YDRg9GD0LvQvdCwINGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLQkdGD0YDRg9GDIFBJTiDQutC+0LQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+ItCi0LDQudC70LDRhSDQsdC+0Lsg0KbRjdGB0LjQudCzINC00LDRgNCw0LDQtCAwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLQndKv0q/RgNGN0Y3RgCDRgtKv0LPQttGN0Y0g0YLQsNC50LvQsNGFINC+0YDQvtC70LTQu9C+0LPRi9C9INGC0L7QviDQtNGN0Y3QtCDRhdGN0LzQttGN0Y3QvdGN0Y3RgSDRhdGN0YLRjdGA0YHRjdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiLQptGN0L3RjdCz0LvRjdCz0LTRjdCyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiLQptGN0L3RjdCz0LvRjdC2INCx0LDQudC90LAsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sb3dfYmF0dGVyeSIgbXNnaWQ9IjgxNDM4MDgwMTg3MTkxNzM4NTkiPiLQptGN0L3RjdCz0LvRjdCz0YfRjdGNINGF0L7Qu9Cx0L7QvdC+INGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiLQotCw0LnQu9GFINCx0L7QuyDRhtGN0YHQuNC50LMg0LTQsNGA0L3QsCDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI5MTY5NzE3Nzc5MDU4MDM3MTY4Ij4i0KHSr9C70LbRjdGNINGC0q/Qs9C20LjQs9C00YHRjdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlNJTSDQutCw0YDRgiDQsdCw0LnRhdCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiLQotCw0LHQu9C10YIgU0lNINC60LDRgNGC0LPSr9C5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4i0KPRgtGB0LDQvdC0IFNJTSDQutCw0YDRgiDQsdCw0LnRhdCz0q/QuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4iU0lNINC60LDRgNGC0YvQsyDQvtGA0YPRg9C70L3QsCDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iNTk2ODk4NTQ4OTQ2Mzg3MDM1OCI+IlNJTSDQutCw0YDRgiDQsdCw0LnRhdCz0q/QuSDRjdGB0LLRjdC7INGD0L3RiNC40YUg0LHQvtC70L7QvNC20LPSr9C5LiBTSU0g0LrQsNGA0YIg0L7RgNGD0YPQu9C90LAg0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4i0JDRiNC40LPQu9Cw0LYg0LHQvtC70L7RhdCz0q/QuSBTSU0g0LrQsNGA0YIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4i0KLQsNC90YsgU0lNINC60LDRgNGCINCx0q/RgNC806nRgdOp0L0g0LjQtNGN0LLRhdCz0q/QuSDQsdC+0LvQvtCyLlxuINOo06nRgCBTSU0g0LrQsNGA0YIg0LDQstCw0YUg0LHQvtC7INOp06nRgNC40LnQvSDRg9GC0LDRgdCz0q/QuSDSr9C50LvRh9C40LvQs9GN0Y3QvdC40Lkg0L3QuNC50LvSr9Kv0LvRjdCz0YfRgtGN0Lkg0YXQvtC70LHQvtCz0LTQvtC90L4g0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4iU0lNINC60LDRgNGCINGC0q/Qs9C20LjQs9C00YHRjdC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4iU0lNINC60LDRgNGC0L3RiyBQVUst0YLSr9Cz0LbQuNCz0LTRgdGN0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTSU0g0LrQsNGA0YLQvdGLINGC0q/Qs9C20Y3RjdCzINCz0LDRgNCz0LDQtiDQsdCw0LnQvdCw4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiAlMyRkLiAt0L0gJTIkZCDQstC40LTQttC10YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i0JLQuNC00LbQtdGCINC90Y3QvNGN0YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLQpdC+0L7RgdC+0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+ItCi0LDQudC70LDRhSDRhdGN0YHRjdCzINC90Y3RjdCz0LTRgdGN0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4i0KLQsNC50LvQsNGFINGF0Y3RgdGN0LMg0YXQsNCw0LPQtNGB0LDQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDQstC40LTQttC10YIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+ItCl0Y3RgNGN0LPQu9GN0LPRhyDRgdC+0L3Qs9C+0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLQodGC0LDRgtGD0YEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLQmtCw0LzQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+ItCc0LXQtNC40LAg0LrQvtC90YLRgNC+0LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+ItCS0LjQtNC20LXRgiDQtNCw0YXQuNC9INGN0YDRjdC80LHRjdC70LYg0Y3RhdC70Y3Qsi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLQktC40LTQttC10YLQuNC50LMg0LTQsNGF0LjQvSDRjdGA0Y3QvNCx0Y3Qu9C2INC00YPRg9GB0LDQsi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INCy0LjQtNC20LXRgiDRg9GB0YLRgdCw0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4i0KLSr9Cz0LbRjdGN0LPSr9C5INGF0Y3RgdCz0LjQudCzINOp0YDQs9Op0YHQs9Op0YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i0KLQsNC50LvQsNGFINCz0YPQu9GB0YPRg9C70LDQu9GCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i0KLQsNC50LvQsNGFINGF0Y3RjS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+ItCd0q/Sr9GA0Y3RjdGAINGC0LDQudC70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiLQotCw0LnQu9Cw0YUg0L/QuNC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+ItCi0LDQudC70LDRhSDQvdGD0YPRhiDSr9CzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+ItCl0Y3RjdC90LjQuSDRhdGN0YHRjdCzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLQk9GD0LvRgdGD0YPQu9Cw0YUg0YXRjdGB0Y3Qsy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+ItOo0LzQvdOp0YUg0LHQuNGH0LvRjdCzINGC0L7QstGHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiLQlNCw0YDQsNCw0LPQuNC50L0g0LHQuNGH0LvRjdCzINGC0L7QstGHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i0KLSr9GAINC30L7Qs9GB0L7QvtGFINGC0L7QstGHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLQotC+0LPQu9GD0YPQu9Cw0YUg0YLQvtCy0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+ItCX0L7Qs9GB0L7QvtGFINGC0L7QstGHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+ItCh0LDQudC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4i0J7QvdGG0LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4i0JfSr9GA0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLSrtGA0LPRjdC70LbQu9Kv0q/Qu9GN0YXQuNC50L0g0YLRg9C70LQg0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQvdCwINGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiLQrdGF0LvSr9Kv0LvRjdGF0LjQudCzINGG0YPRhtCw0LvRgdCw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4i0KPRgdGC0LPQsNGF0YvQvSDRgtGD0LvQtCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi3QsyDRgtCw0LLQuNC90LAg0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g0YPRgdGC0LDRhdCz0q/QuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiLQkNCR0JIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4i0KbRg9GG0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+ItCj0YHRgtCz0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4i0JTRg9GD0YHQs9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLQk9C+0YDQuNC8INOp06nRgNGH0LvTqdGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4i0KjQuNGE0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLQntGA0YPRg9C70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i0KLQsNC50LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+ItCa0LDQvNC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i0KfQuNC80Y3RjdCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLQlNGD0YPQvdGD0YPQtCDQuNC00Y3QstGF0YLRjdC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLQpdCw0LnRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t0LMg0LPRg9C70YHRg9GD0LvQsNGFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDRhdC40LnRhSDQsdC+0Lsg0LTQvtC+0Ygg0LPRg9C70YHRg9GD0LvQsNGFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDRhdC40LnRhSDQt9Kv0q/QvdC70q/SryDQs9GD0LvRgdGD0YPQu9Cw0YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDRhdC40LnRhSDQsdC+0Lsg0LHQsNGA0YPRg9C90LvRg9GDINCz0YPQu9GB0YPRg9C70LDRhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+ItCe0LTQvtC+0LPQuNC50L0g0YXRjdGA0Y3Qs9C70Y3Qs9GHIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+ItCv0LDRgNCw0LvRgtCw0Lkg0LTRg9GD0LTQu9Cw0LPQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+ItCl0Y3RjdCzINC80LDRgNGC0YHQsNC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLQkdGD0YDRg9GDINGF0Y3RjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+ItCd0YPRg9GGINKv0LMg0LHRg9GA0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJQSU4g0LHRg9GA0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNGL0L0g0LTQsNGA0LDQsCDQtNCw0YXQuNC9INC+0YDQvtC70LTQvtC90L4g0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+ItCl0Y3RjdCzINC30YPRgNCw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJTSU0gUElOINC+0YDRg9GD0LvQvdCwINGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IlBJTiDQvtGA0YPRg9C70L3QsCDRg9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+ItCd0YPRg9GGINKv0LPRjdGNINC+0YDRg9GD0LvQvdCwINGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJTSU0g0LjQtNGN0LLRhdCz0q/QuSDQsdCw0LnQvdCwLiDSrtGA0LPRjdC70LbQu9Kv0q/Qu9GN0YUg0LHQvtC7IFBVSyDQutC+0LTRi9CzINC+0YDRg9GD0LvQvdCwINGD0YMuINCU0Y3Qu9Cz0Y3RgNGN0L3Qs9Kv0Lkg0LzRjdC00Y3RjdC70LvQuNC50LMg0L7Qv9C10YDQsNGC0L7RgNC+0L7RgSDQsNGB0YPRg9C90LAg0YPRg9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+ItCl0q/RgdGB0Y3QvSBQSU4g0LrQvtC00L7QviDQvtGA0YPRg9C70L3QsCDRg9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+ItCl0q/RgdGB0Y3QvSBQSU4g0LrQvtC00L7QviDQtNCw0YXQuNC9INC+0YDRg9GD0LvQvdCwINGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDQutCw0YDRgtC90Ysg0YLSr9Cz0LbRjdGN0LMg0LPQsNGA0LPQsNC2INCx0LDQudC90LDigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiI0LTgg0YLQvtC+0L3QvtC+0YEg0LHSr9GC0Y3RhSBQSU4t0LMg0LHQuNGH0L3RjSDSr9KvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDQutC+0LQgOC3RgSDRhtOp06nQvdCz0q/QuSDRgtC+0L7QvdC+0L7RgSDQsdKv0YLQvdGNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+ItCX06nQsiBQVUsg0LrQvtC00YvQsyDQtNCw0YXQuNC9INC+0YDRg9GD0LvQvdCwINGD0YMuINCU0LDQstGC0LDQvSDQvtGA0L7Qu9C00LLQvtC7IFNJTSDQvdGMINCx0q/RgNC806nRgdOp0L0g0LjQtNGN0LLRhdCz0q/QuSDQsdC+0LvQs9C+0L3Qvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOINC60L7QtNGD0YPQtCDRgtCw0LDRgNCw0YXQs9Kv0Lkg0LHQsNC50L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+ItCl0Y3RjSDQvtGA0YPRg9C70LDRhSDQvtGA0L7Qu9C00LvQvtCz0L4g0YXRjdGCINC+0LvQvtC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+ItCi0q/Qs9C20Y3RjdCzINGC0LDQudC70LDRhSDQsdC+0LsgR29vZ2xlINCw0LrQsNGD0L3RgtCw0LDRgNCw0LAg0L3RjdCy0YLRjdGA0L3RjSDSr9KvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i0KXRjdGA0Y3Qs9C70Y3Qs9GH0LjQudC9INC90Y3RgCAo0LjQvNGN0LnQuykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+ItCd0YPRg9GGINKv0LMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+ItCd0Y3QstGC0YDRjdGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLQpdGN0YDRjdCz0LvRjdCz0YfQuNC50L0g0L3RjdGAINGN0YHQstGN0Lsg0L3Rg9GD0YYg0q/QsyDQsdGD0YDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLQpdGN0YDRjdCz0LvRjdCz0YfQuNC50L0g0L3RjdGAINC90YPRg9GGINKv0LPRjdGNINC80LDRgNGC0YHQsNC9INGD0YM/XG4iPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIt0LQg0LfQvtGH0LjQu9C90L4g0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLQkNC60LDRg9C90YIg0YjQsNC70LPQsNC2INCx0LDQudC90LDigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItCi0LAgUElOINC60L7QtNC+0L4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQsdC40YfQuNCyLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YvQvSDQtNCw0YDQsNCwINC00LDRhdC40L0g0L7RgNC+0LvQtNC+0L3QviDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLQotCwIFBJTiDQutC+0LTQvtC+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0LHQuNGH0LjQsi4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNGL0L0g0LTQsNGA0LDQsCDQtNCw0YXQuNC9INC+0YDQvtC70LTQvtC90L4g0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i0KLQsCDRgtCw0LnQu9Cw0YUg0YXRjdGN0LMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQt9GD0YDQu9Cw0LAuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTRi9C9INC00LDRgNCw0LAg0LTQsNGF0LjQvSDQvtGA0L7Qu9C00L7QvdC+INGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i0KLQsCDRgtCw0LHQu9C10YLRi9CzINGC0LDQudC70LDRhSDQs9GN0LYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQvtGA0L7Qu9C00LvQvtC+LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQtNCw0YXQuNC9INCx0YPRgNGD0YMg0L7RgNC+0LvQtNCy0L7QuyDRgtCw0LHQu9C10YIg0q/QudC70LTQstGN0YDQuNC50L0g0q/QvdC00YHRjdC9INGD0YLQs9Cw0LDRgNCw0LAg0YLQvtGF0LjRgNGD0YPQu9Cw0LPQtNCw0YUg0LHQsCDRhdGN0YDRjdCz0LvRjdCz0YfQuNC50L0g0LTQsNGC0LAg0LHSr9GF0Y3Qu9C00Y3RjSDRg9GB0YLQsNC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+ItCi0LAg0YPRgtGB0YvQsyDRgtCw0LnQu9Cw0YUg0LPRjdC2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0L7RgNC+0LvQtNC70L7Qvi4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LTQsNGF0LjQvSDQsdGD0YDRg9GDINC+0YDQvtC70LTQstC+0Lsg0YPRgtCw0YEg0q/QudC70LTQstGN0YDQuNC50L0g0q/QvdC00YHRjdC9INGD0YLQs9Cw0LDRgNCw0LAg0YLQvtGF0LjRgNGD0YPQu9Cw0LPQtNCw0YUg0LHQsCDRhdGN0YDRjdCz0LvRjdCz0YfQuNC50L0g0LTQsNGC0LAg0LHSr9GF0Y3Qu9C00Y3RjSDRg9GB0YLQsNC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiLQotCwINGC0LDQsdC70LXRgtGL0LMg0YLQsNC50LvQsNGFINCz0Y3QtiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQvtGA0L7Qu9C00LvQvtC+LiDQotCw0LHQu9C10YIg0L7QtNC+0L4g0q/QudC70LTQstGN0YDQuNC50L0g0q/QvdC00YHRjdC9INGD0YLQs9Cw0LDRgNCw0LAg0YLQvtGF0LjRgNGD0YPQu9Cw0LPQtNCw0YUg0LHQvtC70L3Qvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiLQotCwINGD0YLRgdGL0LMg0YLQsNC50LvQsNGFINCz0Y3QtiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQvtGA0L7Qu9C00LvQvtC+LiDQo9GC0LDRgSDQvtC00L7QviDSr9C50LvQtNCy0Y3RgNC40LnQvSDSr9C90LTRgdGN0L0g0YPRgtCz0LDQsNGA0LDQsCDRgtC+0YXQuNGA0YPRg9C70LDQs9C00LDRhSDQsdC+0LvQvdC+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLQotCwINGC0LDQudC70LDRhSDRhdGN0Y3QsyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINC30YPRgNC70LDQsC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LTQsNGF0LjQvSDQsdGD0YDRg9GDINC+0YDRg9GD0LvQsdCw0LssINGC0LAg0YLQsNCx0LvQtdGC0LDQsCDRgtCw0LnQu9Cw0YXRi9C9INGC0YPQu9C0INC40LzRjdC50Lsg0LDQutCw0YPQvdGCINGI0LDQsNGA0LTQu9Cw0LPQsNGC0LDQuSDQsdC+0LvQvdC+LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YvQvSDQtNCw0YDQsNCwINC00LDRhdC40L0g0L7RgNC+0LvQtNC+0L3QviDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i0KLQsCDRgtCw0LnQu9Cw0YUg0YXRjdGN0LMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQt9GD0YDQu9Cw0LAuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINC00LDRhdC40L0g0LHRg9GA0YPRgyDQvtGA0YPRg9C70LHQsNC7LCDRgtCwINGD0YLRgdCw0LAg0YLQsNC50LvQsNGF0YvQvSDRgtGD0LvQtCDQuNC80Y3QudC7INCw0LrQsNGD0L3RgtCw0LAg0LDRiNC40LPQu9Cw0YUg0YjQsNCw0YDQtNC70LDQs9Cw0YLQsNC5INCx0L7Qu9C90L4uXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTRi9C9INC00LDRgNCw0LAg0LTQsNGF0LjQvSDQvtGA0L7Qu9C00L7QvdC+INGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i0KPRgdGC0LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLQodCY0Jwg0J/QmNCdINC60L7QtCDQsdGD0YDRg9GDLCDRgtCwINGC06nRhdOp06nRgNOp0LzQttC40LnQvSDRgtKv0LPQttGN0Y3QsyDRgtCw0LnQu9Cw0YXRi9C9INGC0YPQu9C0INC+0L/QtdGA0LDRgtC+0YAg0LrQvtC80L/QsNC90LjRgtCw0Lkg0YXQvtC70LHQvtC+INCx0LDRgNC40YUg0YjQsNCw0YDQtNC70LDQs9Cw0YLQsNC5LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4i0KHQmNCcINCf0JjQnSDQutC+0LQg0LHRg9GA0YPRgyDQsdCw0LnQvdCwLCDRgtCw0L3QtCDQvNC+0LHQsNC50Lsg0L7Qv9C10YDQsNGC0L7RgCDQutC+0LzQv9Cw0L3QuNGC0LDQuSDRhdC+0LvQsdC+0LPQtNC+0YXQs9Kv0LnQs9GN0Y3RgCDRgtOp0YXTqdOp0YDTqdC80LbQuNC50L0g0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGF0LDQtCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L7RgNC+0LvQtNC70L7Qs9C+INGF0LjQudGFINCx0L7Qu9C+0LzQtiDSr9C70LTRgdGN0L0g0LHQsNC50L3QsC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiLQodCY0Jwg0J/QmNCdINC60L7QtCDQsdGD0YDRg9GDINCx0LDQudC90LAsINGC0LDQvdC0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtGA0L7Qu9C00LvQvtCz0L4g0YXQuNC50YUg0LHQvtC70L7QvNC2INKv0LvQtNC70Y3RjS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+ItCh0JjQnCDQsNGI0LjQs9C70LDRhSDQsdC+0LvQvtC80LbQs9Kv0LkuINOo06nRgNC40LnQvSDQvtC/0LXRgNCw0YLQvtGAINC60L7QvNC/0LDQvdC40YLQsNC5INGF0L7Qu9Cx0L7QviDQsdCw0YDQuNC90LAg0YPRgy4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+ItCh0JjQnCDQn9Ku0Jog0LrQvtC0INCx0YPRgNGD0YMsINGC0LDQvdGLINCh0JjQnCDQsdKv0YDQvNOp0YHTqdC9INCw0YjQuNCz0LvQsNC70YLQs9Kv0Lkg0LHQvtC70L7RhdC+0L7RgSDTqdC80L3TqSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L7RgNC+0LvQtNC70L7Qs9C+INGF0LjQudGFINCx0L7Qu9C+0LzQtiDSr9C70LTQu9GN0Y0uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4i0KHQmNCcINCf0q7QmiDQutC+0LQg0LHRg9GA0YPRgywg0YLQsNC90Ysg0KHQmNCcINCx0q/RgNC806nRgdOp0L0g0LDRiNC40LPQu9Cw0LvRgtCz0q/QuSDQsdC+0LvQvtGF0L7QvtGBINOp0LzQvdOpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtGA0L7Qu9C00LvQvtCz0L4g0YXQuNC50YUg0LHQvtC70L7QvNC2INKv0LvQtNC70Y3RjS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+ItCh0JjQnCDQn9CY0J0g0LDQttC40LvQu9GD0YPQu9Cw0YUg0LDQvNC20LjQu9GC0LPSr9C5INCx0L7Qu9C70L7QviEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+ItCh0JjQnCDQn9Ku0Jog0LDQttC40LvQu9GD0YPQu9Cw0YUg0LDQvNC20LjQu9GC0LPSr9C5INCx0L7Qu9C70L7QviEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i0JrQvtC0INC306nQstGI06nTqdGA06nQs9C00LvTqdOpISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+ItOo0LzQvdOp0YUg0LTRg9GDINGC0L7QstGHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i0JTQsNGA0LDQsNCz0LjQudC9INC00YPRgyDRgtC+0LLRhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLQotKv0YAg0LfQvtCz0YHQvtGFINGC0L7QstGHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4i0KLQvtCz0LvRg9GD0LvQsNGFINGC0L7QstGHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4i0JfQvtCz0YHQvtC+0YUg0YLQvtCy0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i0q7QudC70YfQuNC70LPRjdGNINCx0LDQudGF0LPSr9C5LiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjg0NWJjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxNTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iVGFpcCBrb2QgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iVGFpcCBQVUsgU0lNIGRhbiBrb2QgUElOIGJhaGFydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iS29kIFBVSyBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IktvZCBQSU4gU0lNIGJhaGFydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IlNlbnR1aCB1bnR1ayBtZW5haXAga2F0YSBsYWx1YW4iPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJUYWlwIGthdGEgbGFsdWFuIHVudHVrIG1lbWJ1a2Ega3VuY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJUYWlwIFBJTiB1bnR1ayBtZW1idWthIGt1bmNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iS29kIFBJTiBzYWxhaC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iVW50dWsgbWVtYnVrYSBrdW5jaSwgdGVrYW4gTWVudSwga2VtdWRpYW4gMC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iVGVsYWggbWVsZXBhc2kgaGFkIGN1YmFhbiBCdWthIEt1bmNpIFdhamFoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiJTdWRhaCBkaWNhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4iTWVuZ2VjYXMsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sb3dfYmF0dGVyeSIgbXNnaWQ9IjgxNDM4MDgwMTg3MTkxNzM4NTkiPiJTYW1idW5na2FuIHBlbmdlY2FzIGFuZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiJUZWthbiBNZW51IHVudHVrIG1lbWJ1a2Ega3VuY2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiJSYW5na2FpYW4gZGlrdW5jaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiJUaWFkYSBrYWQgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+IlRpYWRhIGthZCBTSU0gZGFsYW0gdGFibGV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4iVGlhZGEga2FkIFNJTSBkYWxhbSB0ZWxlZm9uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJNYXN1a2thbiBrYWQgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iNTk2ODk4NTQ4OTQ2Mzg3MDM1OCI+IkthZCBTSU0gdGlhZGEgYXRhdSB0aWRhayBib2xlaCBkaWJhY2EuIFNpbGEgbWFzdWtrYW4ga2FkIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4iS2FkIFNJTSB0aWRhayBib2xlaCBkaWd1bmFrYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4iS2FkIFNJTSBhbmRhIHRlbGFoIGRpbHVtcHVoa2FuIHNlY2FyYSBrZWthbC5cbiBIdWJ1bmdpIHBlbWJla2FsIHBlcmtoaWRtYXRhbiB3YXlhcmxlcyBhbmRhIHVudHVrIG1lbmRhcGF0a2FuIGthZCBTSU0gbGFpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4iS2FkIFNJTSBkaWt1bmNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4iS2FkIFNJTSBkaWt1bmNpIGRlbmdhbiBQVUsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJNZW1idWthIGt1bmNpIGthZCBTSU0uLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIFdpZGdldCAlMiRkIGRhcmkgJTMkZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4iVGFtYmFoIHdpZGdldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+Iktvc29uZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4iQmFoYWdpYW4gYnVrYSBrdW5jaSBkaWtlbWJhbmdrYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4iQmFoYWdpYW4gYnVrYSBrdW5jaSBkaXJ1bnR1aGthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiJXaWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IlBlbWlsaWggcGVuZ2d1bmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJTdGF0dXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4iS2F3YWxhbiBtZWRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4iUGVueXVzdW5hbiBzZW11bGEgd2lkZ2V0IGRpbXVsYWthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiJQZW55dXN1bmFuIHNlbXVsYSB3aWRnZXQgdGFtYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiJXaWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gZGlwYWRhbWthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiJLZW1iYW5na2FuIGJhaGFnaWFuIGJ1a2Ega3VuY2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4iQnVrYSBrdW5jaSBsdW5jdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiJCdWthIGt1bmNpIGNvcmFrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4iV2FqYWggQnVrYSBLdW5jaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJCdWthIGt1bmNpIHBpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiJCdWthIGt1bmNpIGthdGEgbGFsdWFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+Ikthd2FzYW4gY29yYWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+Ikthd2FzYW4gbHVuY3VyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4iQnV0YW5nIGxhZ3Ugc2ViZWx1bW55YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MDczOTI4MzAwNDQ0OTA5MzIwIj4iQnV0YW5nIGxhZ3Ugc2V0ZXJ1c255YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IkJ1dGFuZyBqZWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJCdXRhbmcgbWFpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iQnV0YW5nIGJlcmhlbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ik1lbnl1a2FpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iVGlkYWsgZGl0ZXJpbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJKYW50dW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iQnVrYSBrdW5jaSB1bnR1ayBtZW5lcnVza2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iUGVsYW5jYXJhbiBkaWJhdGFsa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IkphdHVoa2FuIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHVudHVrIG1lbWFkYW0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHRpZGFrIGFrYW4gZGlwYWRhbWthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4iQmF0YWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4iUGFkYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IlNlbGVzYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiJQZXJ1YmFoYW4gbW9kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJNYXN1ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iQnVrYSBrdW5jaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2VueWFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkJ1bnlpIGRpaGlkdXBrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkNhcmlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJMdW5jdXJrYW4ga2UgYXRhcyB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iTHVuY3Vya2FuIGtlIGJhd2FoIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJMdW5jdXJrYW4ga2Uga2lyaSB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ikx1bmN1cmthbiBrZSBrYW5hbiB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJQZW5nZ3VuYSBzZW1hc2EgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iUGFuZ2dpbGFuIGtlY2VtYXNhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+Ikx1cGEgQ29yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IkNvcmFrIFNhbGFoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4iS2F0YSBMYWx1YW4gU2FsYWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIHNhbGFoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiJDdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiJMdWtpc2thbiBjb3JhayBhbmRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iTWFzdWtrYW4gUElOIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iTWFzdWtrYW4gUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+Ik1hc3Vra2FuIEthdGEgTGFsdWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iS2luaSBTSU0gZGlsdW1wdWhrYW4uIE1hc3Vra2FuIGtvZCBQVUsgdW50dWsgbWVuZXJ1c2thbi4gSHVidW5naSBwZW1iYXdhIHVudHVrIGJ1dGlyYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+Ik1hc3Vra2FuIGtvZCBQSU4geWFuZyBkaWluZ2luaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJTYWhrYW4ga29kIFBJTiB5YW5nIGRpaW5naW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJNZW1idWthIGt1bmNpIGthZCBTSU0uLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJUYWlwa2FuIFBJTiB5YW5nIG1lbmdhbmR1bmdpIDQgaGluZ2dhIDggbm9tYm9yLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IktvZCBQVUsgbWVzdGlsYWggOCBub21ib3IgYXRhdSBsZWJpaC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJNYXN1a2thbiBzZW11bGEga29kIFBJTiB5YW5nIGJldHVsLiBQZXJjdWJhYW4gYmVydWxhbmcgYWthbiBtZWx1bXB1aGthbiBTSU0gc2VjYXJhIGtla2FsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJLb2QgUElOIHRpZGFrIHNlcGFkYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJUZXJsYWx1IGJhbnlhayBwZXJjdWJhYW4gbWVsdWtpcyBjb3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJVbnR1ayBtZW1idWthIGt1bmNpLCBsb2cgbWFzdWsgZGVuZ2FuIGFrYXVuIEdvb2dsZSBhbmRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4iTmFtYSBQZW5nZ3VuYSAoRS1tZWwpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiJLYXRhIGxhbHVhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4iTG9nIG1hc3VrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiJOYW1hIHBlbmdndW5hIGF0YXUga2F0YSBsYWx1YW4gdGlkYWsgc2FoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiJMdXBhIG5hbWEgcGVuZ2d1bmEgYXRhdSBrYXRhIGxhbHVhbiBhbmRhP1xuTGF3YXRpIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+Ik1lbnllbWFrIGFrYXVu4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJBbmRhIHRlbGFoIG1lbmFpcCBQSU4gYW5kYSBzZWNhcmEgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gXG5cbkN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJBbmRhIHRlbGFoIG1lbmFpcCBrYXRhIGxhbHVhbiBhbmRhIHNlY2FyYSBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IkFuZGEgdGVsYWggdGVyc2lsYXAgbWVsdWtpcyBjb3JhayBidWthIGt1bmNpIGFuZGEgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gXG5cbkN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRhYmxldCBkZW5nYW4gc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIHRhYmxldCBha2FuIGRpdGV0YXBrYW4gc2VtdWxhIGtlcGFkYSB0ZXRhcGFuIGxhbGFpIGtpbGFuZyBkYW4gc2VtdWEgZGF0YSBwZW5nZ3VuYSBha2FuIGhpbGFuZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4iQW5kYSB0ZWxhaCBtZW5jdWJhIHVudHVrIG1lbWJ1a2Ega3VuY2kgdGVsZWZvbiBkZW5nYW4gc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIHRlbGVmb24gYWthbiBkaXRldGFwa2FuIHNlbXVsYSBrZXBhZGEgdGV0YXBhbiBsYWxhaSBraWxhbmcgZGFuIHNlbXVhIGRhdGEgcGVuZ2d1bmEgYWthbiBoaWxhbmcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiJBbmRhIHRlbGFoIG1lbmN1YmEgdW50dWsgbWVtYnVrYSBrdW5jaSB0YWJsZXQgc2VjYXJhIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWxpLiBUYWJsZXQga2luaSBha2FuIGRpdGV0YXBrYW4gc2VtdWxhIGtlIHRldGFwYW4gbGFsYWkga2lsYW5nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRlbGVmb24gc2VjYXJhIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWxpLiBUZWxlZm9uIGtpbmkgYWthbiBkaXRldGFwa2FuIHNlbXVsYSBrZSB0ZXRhcGFuIGxhbGFpIGtpbGFuZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iQW5kYSB0ZWxhaCB0ZXJzaWxhcCBtZWx1a2lzIGNvcmFrIGJ1a2Ega3VuY2kgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIGFuZGEgYWthbiBkaW1pbnRhIG1lbWJ1a2Ega3VuY2kgdGFibGV0IGFuZGEgbWVuZ2d1bmFrYW4gbG9nIG1hc3VrIEdvb2dsZSBhbmRhLlxuXG4gQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJBbmRhIHRlbGFoIHRlcnNpbGFwIGx1a2lzIGNvcmFrIGJ1a2Ega3VuY2kgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIGFuZGEgYWthbiBkaW1pbnRhIG1lbWJ1a2Ega3VuY2kgdGVsZWZvbiBhbmRhIG1lbmdndW5ha2FuIGxvZyBtYXN1ayBHb29nbGUgYW5kYS5cblxuIEN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkFsaWgga2VsdWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJLb2QgUElOIFNJTSB0aWRhayBiZXR1bCwgamFkaSBhbmRhIGhhcnVzIG1lbmdodWJ1bmdpIHBlbWJhd2EgYW5kYSB1bnR1ayBtZW1idWthIGt1bmNpIHBlcmFudGkuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJLb2QgUElOIFNJTSB0aWRhayBiZXR1bC4gQW5kYSBtZW1wdW55YWkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBlcmN1YmFhbiBsYWdpIHNlYmVsdW0gYW5kYSBoYXJ1cyBtZW5naHVidW5naSBwZW1iYXdhIGFuZGEgdW50dWsgbWVtYnVrYSBrdW5jaSBwZXJhbnRpLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IktvZCBQSU4gU0lNIHRpZGFrIGJldHVsLCBhbmRhIG1lbXB1bnlhaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcGVyY3ViYWFuIGxhZ2kuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0gdGlkYWsgYm9sZWggZGlndW5ha2FuLiBIdWJ1bmdpIHBlbWJhd2EgYW5kYS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IktvZCBQVUsgU0lNIHRpZGFrIGJldHVsLCBhbmRhIG1lbXB1bnlhaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcGVyY3ViYWFuIGxhZ2kgc2ViZWx1bSBTSU0gdGlkYWsgYm9sZWggZGlndW5ha2FuIHNlY2FyYSBrZWthbC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJLb2QgUFVLIFNJTSB0aWRhayBiZXR1bCwgYW5kYSBtZW1wdW55YWkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBlcmN1YmFhbiBsYWdpIHNlYmVsdW0gU0lNIHRpZGFrIGJvbGVoIGRpZ3VuYWthbiBzZWNhcmEga2VrYWwuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJPcGVyYXNpIFBJTiBTSU0gZ2FnYWwhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJPcGVyYXNpIFBVSyBTSU0gZ2FnYWwhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IktvZCBEaXRlcmltYSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJCdXRhbmcgbGFndSBzZWJlbHVtbnlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iQnV0YW5nIGxhZ3Ugc2V0ZXJ1c255YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJCdXRhbmcgamVkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+IkJ1dGFuZyBtYWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4iQnV0YW5nIGJlcmhlbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IlRpYWRhIHBlcmtoaWRtYXRhbi4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbXMvYWN0aXZpdHlzdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbXMvYWN0aXZpdHlzdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRlMjE4NC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1zL2FjdGl2aXR5c3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCi0qKgotKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIiBtc2dpZD0iMzM1Mjg4ODE4NjY3NDk4MTU5MyI+IktleWd1YXJkVGVzdEFjdGl2aXR5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VjdXJlX2FwcF9uYW1lIiBtc2dpZD0iNzk1NTQ5ODc0MjgxNjg2ODA0OSI+IlVuaWZpZWRDYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub25lX21lbnVfaXRlbSIgbXNnaWQ9IjYxNTY3NDcyODU2ODc1NTE0MjQiPiJUaWFkYSBrZXNlbGFtYXRhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBpbl9tZW51X2l0ZW0iIG1zZ2lkPSIxMTc5NzU2NDMzMjY4OTYyMzExIj4iUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfbWVudV9pdGVtIiBtc2dpZD0iMTk1OTk4MDQ5OTY2MjE1MzE2MCI+IkthdGEgbGFsdWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGF0dGVybl9tZW51X2l0ZW0iIG1zZ2lkPSIyOTg3Nzk4MTUyMTc1MTQwMjQ5Ij4iQ29yYWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcGluX21lbnVfaXRlbSIgbXNnaWQ9IjM5NjIyODY2Mzk2NDUwODQ4ODAiPiJQSU4gU0lNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX3B1a19tZW51X2l0ZW0iIG1zZ2lkPSI2MTkwMDQ0MTMzMDA4MzkyOTc0Ij4iUFVLIFNJTSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkZF93aWRnZXRfaXRlbSIgbXNnaWQ9IjI3OTcwMjE1MjM2Njg1NzQxNSI+IlBpbGloIHdpZGdldC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9uX3NjcmVlbl90dXJuZWRfb2ZmIiBtc2dpZD0iODc2MTM5NjMyOTc3MDUwODM2NyI+Im9uU2NyZWVuVHVybmVkT2ZmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib25fc2NyZWVuX3R1cm5lZF9vbiIgbXNnaWQ9IjkyMjI5MjY4MTgwMzA3Mjg5OTkiPiJvblNjcmVlblR1cm5lZE9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZG9fa2V5Z3VhcmQiIG1zZ2lkPSI5MjEwOTM2OTc3ODIzMTE4Nzk2Ij4iZG9LZXlndWFyZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZlcmlmeV91bmxvY2siIG1zZ2lkPSI4NTA4NzIyMjczMzI5MzA2OTY4Ij4idmVyaWZ5VW5sb2NrIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1zL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFlZWViNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1zL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKLSoqCi0qKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotKioKLSoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0qKgotKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotKioKLSoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0qKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iVGFpcCBrb2QgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iVGFpcCBQVUsgZGFuIGtvZCBQSU4gYmFoYXJ1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJLb2QgUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJLb2QgUElOIEJhaGFydSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IlNlbnR1aCB1bnR1ayBtZW5haXAga2F0YSBsYWx1YW4iPC9mb250Pjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJUYWlwIGthdGEgbGFsdWFuIHVudHVrIG1lbWJ1a2Ega3VuY2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJUYWlwIFBJTiB1bnR1ayBtZW1idWthIGt1bmNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iS29kIFBJTiBzYWxhaC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iVW50dWsgbWVtYnVrYSBrdW5jaSwgdGVrYW4gTWVudSwga2VtdWRpYW4gMC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iVGVsYWggbWVsZXBhc2kgaGFkIGN1YmFhbiBCdWthIEt1bmNpIFdhamFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiJTdWRhaCBkaWNhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4iTWVuZ2VjYXMsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sb3dfYmF0dGVyeSIgbXNnaWQ9IjgxNDM4MDgwMTg3MTkxNzM4NTkiPiJTYW1idW5na2FuIHBlbmdlY2FzIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiJUZWthbiBNZW51IHVudHVrIG1lbWJ1a2Ega3VuY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiJSYW5na2FpYW4gZGlrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiJUaWFkYSBrYWQgU0lNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+IlRpYWRhIGthZCBTSU0gZGFsYW0gdGFibGV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4iVGlhZGEga2FkIFNJTSBkYWxhbSB0ZWxlZm9uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJNYXN1a2thbiBrYWQgU0lNLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iNTk2ODk4NTQ4OTQ2Mzg3MDM1OCI+IkthZCBTSU0gdGlhZGEgYXRhdSB0aWRhayBib2xlaCBkaWJhY2EuIFNpbGEgbWFzdWtrYW4ga2FkIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4iS2FkIFNJTSB0aWRhayBib2xlaCBkaWd1bmFrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4iS2FkIFNJTSBhbmRhIHRlbGFoIGRpbHVtcHVoa2FuIHNlY2FyYSBrZWthbC5cbiBIdWJ1bmdpIHBlbWJla2FsIHBlcmtoaWRtYXRhbiB3YXlhcmxlcyBhbmRhIHVudHVrIG1lbmRhcGF0a2FuIGthZCBTSU0gbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4iS2FkIFNJTSBkaWt1bmNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4iS2FkIFNJTSBkaWt1bmNpIGRlbmdhbiBQVUsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJNZW1idWthIGt1bmNpIGthZCBTSU0uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIFdpZGdldCAlMiRkIGRhcmkgJTMkZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4iVGFtYmFoIHdpZGdldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+Iktvc29uZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4iQmFoYWdpYW4gYnVrYSBrdW5jaSBkaWtlbWJhbmdrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4iQmFoYWdpYW4gYnVrYSBrdW5jaSBkaXJ1bnR1aGthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiJXaWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IlBlbWlsaWggcGVuZ2d1bmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJTdGF0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4iS2F3YWxhbiBtZWRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4iUGVueXVzdW5hbiBzZW11bGEgd2lkZ2V0IGRpbXVsYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiJQZW55dXN1bmFuIHNlbXVsYSB3aWRnZXQgdGFtYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiJXaWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gZGlwYWRhbWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiJLZW1iYW5na2FuIGJhaGFnaWFuIGJ1a2Ega3VuY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4iQnVrYSBrdW5jaSBsdW5jdXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiJCdWthIGt1bmNpIGNvcmFrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4iV2FqYWggQnVrYSBLdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJCdWthIGt1bmNpIHBpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiJCdWthIGt1bmNpIGthdGEgbGFsdWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+Ikthd2FzYW4gY29yYWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+Ikthd2FzYW4gbHVuY3VyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4iQnV0YW5nIGxhZ3Ugc2ViZWx1bW55YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MDczOTI4MzAwNDQ0OTA5MzIwIj4iQnV0YW5nIGxhZ3Ugc2V0ZXJ1c255YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IkJ1dGFuZyBqZWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJCdXRhbmcgbWFpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iQnV0YW5nIGJlcmhlbnRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IkJhdGFsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+IlBhZGFtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiJTZWxlc2FpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4iUGVydWJhaGFuIG1vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iTWFzdWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkJ1a2Ega3VuY2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlNlbnlhcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJCdW55aSBkaWhpZHVwa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJDYXJpYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iTHVuY3Vya2FuIGtlIGF0YXMgdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ikx1bmN1cmthbiBrZSBiYXdhaCB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iTHVuY3Vya2FuIGtlIGtpcmkgdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJMdW5jdXJrYW4ga2Uga2FuYW4gdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4iUGVuZ2d1bmEgc2VtYXNhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IlBhbmdnaWxhbiBrZWNlbWFzYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJMdXBhIENvcmFrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiJDb3JhayBTYWxhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IkthdGEgTGFsdWFuIFNhbGFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IlBJTiBzYWxhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4iTHVraXNrYW4gY29yYWsgYW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+Ik1hc3Vra2FuIFBJTiBTSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+Ik1hc3Vra2FuIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiJNYXN1a2thbiBLYXRhIExhbHVhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IktpbmkgU0lNIGRpbHVtcHVoa2FuLiBNYXN1a2thbiBrb2QgUFVLIHVudHVrIG1lbmVydXNrYW4uIEh1YnVuZ2kgcGVtYmF3YSB1bnR1ayBidXRpcmFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJNYXN1a2thbiBrb2QgUElOIHlhbmcgZGlpbmdpbmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iU2Foa2FuIGtvZCBQSU4geWFuZyBkaWluZ2luaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iTWVtYnVrYSBrdW5jaSBrYWQgU0lNLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iS29kIFBJTiBzYWxhaC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJUYWlwa2FuIFBJTiB5YW5nIG1lbmdhbmR1bmdpIDQgaGluZ2dhIDggbm9tYm9yLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IktvZCBQVUsgbWVzdGlsYWggOCBub21ib3IgYXRhdSBsZWJpaC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJNYXN1a2thbiBzZW11bGEga29kIFBJTiB5YW5nIGJldHVsLiBQZXJjdWJhYW4gYmVydWxhbmcgYWthbiBtZWx1bXB1aGthbiBTSU0gc2VjYXJhIGtla2FsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJLb2QgUElOIHRpZGFrIHNlcGFkYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJUZXJsYWx1IGJhbnlhayBwZXJjdWJhYW4gbWVsdWtpcyBjb3JhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJVbnR1ayBtZW1idWthIGt1bmNpLCBsb2cgbWFzdWsgZGVuZ2FuIGFrYXVuIEdvb2dsZSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4iTmFtYSBQZW5nZ3VuYSAoRS1tZWwpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiJLYXRhIGxhbHVhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4iTG9nIG1hc3VrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiJOYW1hIHBlbmdndW5hIGF0YXUga2F0YSBsYWx1YW4gdGlkYWsgc2FoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiJMdXBhIG5hbWEgcGVuZ2d1bmEgYXRhdSBrYXRhIGxhbHVhbiBhbmRhP1xuTGF3YXRpIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+Ik1lbnllbWFrIGFrYXVu4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJBbmRhIHRlbGFoIG1lbmFpcCBQSU4gYW5kYSBzZWNhcmEgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gXG5cbkN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJBbmRhIHRlbGFoIG1lbmFpcCBrYXRhIGxhbHVhbiBhbmRhIHNlY2FyYSBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IkFuZGEgdGVsYWggdGVyc2lsYXAgbWVsdWtpcyBjb3JhayBidWthIGt1bmNpIGFuZGEgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gXG5cbkN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRhYmxldCBkZW5nYW4gc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIHRhYmxldCBha2FuIGRpdGV0YXBrYW4gc2VtdWxhIGtlcGFkYSB0ZXRhcGFuIGxhbGFpIGtpbGFuZyBkYW4gc2VtdWEgZGF0YSBwZW5nZ3VuYSBha2FuIGhpbGFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4iQW5kYSB0ZWxhaCBtZW5jdWJhIHVudHVrIG1lbWJ1a2Ega3VuY2kgdGVsZWZvbiBkZW5nYW4gc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIHRlbGVmb24gYWthbiBkaXRldGFwa2FuIHNlbXVsYSBrZXBhZGEgdGV0YXBhbiBsYWxhaSBraWxhbmcgZGFuIHNlbXVhIGRhdGEgcGVuZ2d1bmEgYWthbiBoaWxhbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiJBbmRhIHRlbGFoIG1lbmN1YmEgdW50dWsgbWVtYnVrYSBrdW5jaSB0YWJsZXQgc2VjYXJhIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWxpLiBUYWJsZXQga2luaSBha2FuIGRpdGV0YXBrYW4gc2VtdWxhIGtlIHRldGFwYW4gbGFsYWkga2lsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRlbGVmb24gc2VjYXJhIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWxpLiBUZWxlZm9uIGtpbmkgYWthbiBkaXRldGFwa2FuIHNlbXVsYSBrZSB0ZXRhcGFuIGxhbGFpIGtpbGFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iQW5kYSB0ZWxhaCB0ZXJzaWxhcCBtZWx1a2lzIGNvcmFrIGJ1a2Ega3VuY2kgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIGFuZGEgYWthbiBkaW1pbnRhIG1lbWJ1a2Ega3VuY2kgdGFibGV0IGFuZGEgbWVuZ2d1bmFrYW4gbG9nIG1hc3VrIEdvb2dsZSBhbmRhLlxuXG4gQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJBbmRhIHRlbGFoIHRlcnNpbGFwIGx1a2lzIGNvcmFrIGJ1a2Ega3VuY2kgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIGFuZGEgYWthbiBkaW1pbnRhIG1lbWJ1a2Ega3VuY2kgdGVsZWZvbiBhbmRhIG1lbmdndW5ha2FuIGxvZyBtYXN1ayBHb29nbGUgYW5kYS5cblxuIEN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkFsaWgga2VsdWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iQnV0YW5nIGxhZ3Ugc2ViZWx1bW55YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IkJ1dGFuZyBsYWd1IHNldGVydXNueWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iQnV0YW5nIGplZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiJCdXRhbmcgbWFpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+IkJ1dGFuZyBiZXJoZW50aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg3MDA2NTA0MDMwNTQwNDIxNTMiPiJUaWFkYSBwZXJraGlkbWF0YW4uIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAppbmRleCA2YTViZmE5Li43MTEzOGE1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlNrcml2IGlubiBQSU4ta29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlNrcml2IGlubiBQVUsta29kZSBvZyBueSBwZXJzb25saWcga29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLWtvZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik55IFBJTi1rb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iU2tyaXYgaW5uIFBVSy1rb2RlbiBmb3IgU0lNLWtvcnRldCBvZyBlbiBueSBQSU4ta29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iUFVLLWtvZGVuIGZvciBTSU0ta29ydGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJOeSBQSU4ta29kZSBmb3IgU0lNLWtvcnRldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IlRyeWtrIGZvciDDpSBza3JpdmUgaW5uIHBhc3NvcmQiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJTa3JpdiBpbm4gcGFzc29yZCBmb3Igw6UgbMOlc2Ugb3BwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iU2tyaXYgaW5uIFBJTi1rb2RlIGZvciDDpSBsw6VzZSBvcHAiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iUGF1c2Uta25hcHAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkF2c3BpbGxpbmdza25hcHAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IlN0b3BwLWtuYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ikxpa3QgYXYgbWVnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iU2FuZ2VyIGR1IGlra2UgbGlrZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJIamVydGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJMw6VzIG9wcCBmb3Igw6UgZm9ydHNldHRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iU3RhcnRlbiBibGUga2Fuc2VsbGVydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJTbGlwcCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBmb3Igw6Ugc2xldHRlIGRlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gYmxpciBpa2tlIHNsZXR0ZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsMTMgKzExMiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IlRhc3QgaW5uIMO4bnNrZXQgUElOLWtvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iQmVrcmVmdCDDuG5za2V0IFBJTi1rb2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJMw6VzZXIgb3BwIFNJTS1rb3J0ZXQgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iRmVpbCBQSU4ta29kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJTa3JpdiBpbm4gZW4gUElOLWtvZGUgcMOlIGZpcmUgdGlsIMOldHRlIHNpZnJlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSy1rb2RlbiBza2FsIHbDpnJlIHDDpSDDpXR0ZSBlbGxlciBmbGVyZSBzaWZmZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iU2tyaXYgaW5uIGRlbiBrb3JyZWt0ZSBQVUsta29kZW4gcMOlIG55dHQuIEdqZW50YXR0ZSBmb3Jzw7hrIGtvbW1lciB0aWwgw6UgZGVha3RpdmVyZSBTSU0ta29ydGV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ta29kZW5lIHN0ZW1tZXIgaWtrZSBvdmVyZW5zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iRm9yIG1hbmdlIGZvcnPDuGsgcMOlIHRlZ25pbmcgYXYgbcO4bnN0ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iTG9nZyBkZWcgcMOlIG1lZCBHb29nbGUta29udG9lbiBkaW4gZm9yIMOlIGzDpXNlIG9wcC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iTG9nZyBww6UgbWVkIEdvb2dsZS1rb250b2VuIGRpbiBmb3Igw6UgbMOlc2Ugb3BwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4iQnJ1a2VybmF2biAoZS1wb3N0YWRyZXNzZSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IlBhc3NvcmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IkxvZ2cgcMOlIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJEdSBoYXIgdGVnbmV0IG9wcGzDpXNuaW5nc23DuG5zdGVyZXQgZmVpbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnYW5nZXIuIEV0dGVyIHl0dGVybGlnZXJlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGdhbGUgZm9yc8O4aywgYmxpciBkdSBiZWR0IG9tIMOlIGzDpXNlIG9wcCB0ZWxlZm9uZW4gdmlhIGVuIGUtcG9zdGtvbnRvLlxuXG4gUHLDuHYgcMOlIG55dHQgb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iRmplcm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkZlaWwgUElOLWtvZGUgZm9yIFNJTS1rb3J0ZXQuIER1IG3DpSBuw6Uga29udGFrdGUgb3BlcmF0w7hyZW4gZGluIGZvciDDpSBsw6VzZSBvcHAgZW5oZXRlbi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IkZlaWwgUElOLWtvZGUgZm9yIFNJTS1rb3J0ZXQuIER1IGhhciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZm9yc8O4ayBpZ2plbiBmw7hyIGR1IG3DpSBrb250YWt0ZSBvcGVyYXTDuHJlbiBkaW4gZm9yIMOlIGzDpXNlIG9wcCBlbmhldGVuLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IkZlaWwgUElOLWtvZGUgZm9yIFNJTS1rb3J0ZXQuIER1IGhhciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZm9yc8O4ayBpZ2plbi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTS1rb3J0ZXQgZXIgdWJydWtlbGlnLiBLb250YWt0IG9wZXJhdMO4cmVuIGRpbi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkZlaWwgUFVLLWtvZGUgZm9yIFNJTS1rb3J0ZXQuIER1IGhhciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZm9yc8O4ayBpZ2plbiBmw7hyIFNJTS1rb3J0ZXQgYmxpciBwZXJtYW5lbnQgdWJydWtlbGlnLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkZlaWwgUFVLLWtvZGUgZm9yIFNJTS1rb3J0ZXQuIER1IGhhciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZm9yc8O4ayBpZ2plbiBmw7hyIFNJTS1rb3J0ZXQgYmxpciBwZXJtYW5lbnQgdWJydWtlbGlnLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iUElOLWtvZGVuIGZvciBTSU0ta29ydGV0IGJsZSBhdnZpc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJQVUsta29kZW4gZm9yIFNJTS1rb3J0ZXQgYmxlIGF2dmlzdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS29kZW4gZXIgZ29ka2plbnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iRm9ycmlnZSBzcG9yLWtuYXBwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iTmVzdGUgc3Bvci1rbmFwcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJQYXVzZS1rbmFwcCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhMTE4MgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCisqKgorKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTiDgpJXgpYvgpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyDgpLAg4KSo4KSv4KS+4KSBIFBJTiDgpJXgpYvgpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIOCkleCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4KSo4KSv4KS+4KSBIFBJTiDgpJXgpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY0iPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCBQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLgpJfgpLLgpKQgUElOIOCkleCli+CkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkruClh+CkqOClgSDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSwIOCkpOCljeCkr+CkuOCkquCkm+CkvyDgpaYg4KSl4KS/4KSa4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IuCkheCkpOCljeCkr+CkvuCkp+Ckv+CklSDgpK7gpYvgpLngpKHgpL4g4KSW4KWL4KSy4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClgiDgpKzgpKLgpYAg4KSt4KSP4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiLgpJrgpL7gpLDgpY3gpJwg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiLgpJrgpL7gpLDgpY3gpJwg4KSX4KSw4KWN4KSm4KWILCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkmuCkvuCksOCljeCknOCksCDgpJzgpYvgpKHgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KSu4KWH4KSo4KWBIOCkpeCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI5MTY5NzE3Nzc5MDU4MDM3MTY4Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCksuCklSDgpJfgpLDgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkruCkviBTSU0g4KSV4KS+4KSw4KWN4KShIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4i4KSr4KWL4KSo4KSu4KS+IOCkleClgeCkqOCliCBTSU0g4KSV4KS+4KSw4KWN4KShIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkreCkv+CkpOCljeCksCDgpLDgpL7gpJbgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkueCksOCkvuCkh+CksOCkueClh+CkleCliyDgpJsg4KS14KS+IOCkquCkouCljeCkqCDgpK/gpYvgpJfgpY3gpK8g4KSb4KWI4KSo4KWkIFNJTSDgpJXgpL7gpLDgpY3gpKEg4KS54KS+4KSy4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+IuCkquCljeCksOCkr+Cli+CklyDgpIXgpK/gpYvgpJfgpY3gpK8gU0lNIOCkleCkvuCksOCljeCkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyBTSU0g4KSV4KS+4KSw4KWN4KShIOCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckj+CkleCliyDgpJvgpaRcbiDgpIXgpLDgpY3gpJXgpYsgU0lNIOCkleCkvuCksOCljeCkoeCkleCliyDgpLLgpL7gpJfgpL8g4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkpOCkvuCksOCksOCkueCkv+CkpCDgpLjgpYfgpLXgpL4g4KSq4KWN4KSw4KSm4KS+4KSv4KSV4KS44KSB4KSXIOCkuOCkruCljeCkquCksOCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpLLgpJUg4KSX4KSw4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTSU0g4KSV4KS+4KSw4KWN4KShIFBVSy3gpLLgpJUg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkheCkqOCksuCklSDgpLngpYHgpIHgpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIOCkteCkv+CknOClh+CknyAlMiRkIG9mICUzJGTgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i4KS14KS/4KSc4KWH4KSfIOCkpeCkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IuCkluCkvuCksuClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4i4KSF4KSo4KSy4KSVIOCkleCljeCkt+Clh+CkpOCljeCksCDgpLXgpL/gpLjgpY3gpKTgpL7gpLAg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4i4KSF4KSo4KSy4KSVIOCkleCljeCkt+Clh+CkpOCljeCksCDgpK3gpKTgpY3gpJXgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgpLXgpL/gpJzgpYfgpJ/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkm+CkqOCljOCkn+CkleCksOCljeCkpOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IuCkuOCljeCkpeCkv+CkpOCkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IuCkleCljeCkr+CkvuCkruClh+CksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiLgpK7gpL/gpKHgpL/gpK/gpL4g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSj4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLgpLXgpL/gpJzgpYfgpJ8g4KSq4KWB4KSo4KSD4KSV4KWN4KSw4KSuIOCkl+CksOCljeCkqOClhyDgpLjgpYHgpLDgpYEg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i4KS14KS/4KSc4KWH4KSfIOCkquClgeCkqOCkg+CkleCljeCksOCkriDgpLjgpK7gpL7gpKrgpY3gpKQg4KSt4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4i4KS14KS/4KSc4KWH4KSfIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOCkruClh+Ckn+CkvuCkh+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i4KS44KWN4KSy4KS+4KSH4KShIOCkheCkqOCksuCkleClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i4KSi4KS+4KSB4KSa4KS+IOCkheCkqOCksuCkleClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i4KSr4KWH4KS4IOCkheCkqOCksuCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQaW4g4KSF4KSo4KSy4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkheCkqOCksuCkleClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IuCkouCkvuCkgeCkmuCkviDgpJXgpY3gpLfgpYfgpKTgpY3gpLDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i4KS44KWN4KSy4KS+4KSH4KShIOCkleCljeCkt+Clh+CkpOCljeCksOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4i4KSF4KSY4KS/4KSy4KWN4KSy4KWLIOCkquCkpSDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+IuCkheCksOCljeCkleCliyDgpKrgpKUg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i4KSw4KWL4KSV4KWN4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i4KSs4KSc4KS+4KSJ4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i4KSs4KSf4KSoIOCksOCli+CkleCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/4KWn4KWo4KWpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+IuCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4i4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4i4KSu4KWL4KShIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IuCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuCkruCljOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLgpIbgpLXgpL7gpJwg4KSa4KS+4KSy4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpL7gpKXgpL8g4KSn4KS/4KS44KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOCkleCliyDgpLLgpL7gpJfgpL8g4KSk4KSyIOCkuOCljeCksuCkvuCkh+CkoSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLgpLjgpY3gpLLgpL7gpIfgpKEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpKzgpL7gpK/gpL7gpIHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4i4KS44KWN4KSy4KS+4KSH4KShIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KSm4KS+4KSv4KS+4KSB4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiLgpIXgpLngpL/gpLLgpYfgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkleCksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IuCkouCkvuCkgeCkmuCkviDgpKzgpL/gpLDgpY3gpLjgpKjgpYEg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLgpJfgpLLgpKQg4KSi4KS+4KSB4KSa4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i4KSX4KSy4KSkIOCkquCkvuCkuOCkteCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiLgpJfgpLLgpKQgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7gpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IuCkhuCkq+CljeCkqOCliyDgpKLgpL7gpIHgpJrgpL4g4KSV4KWL4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iU0lNIFBJTiDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJQSU4g4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KS54KS/4KSy4KWHIOCkheCkuOCkleCljeCkt+CkriDgpJvgpaQg4KS44KWB4KSa4KS+4KSw4KWBIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8gUFVLIOCkleCli+CkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkICDgpLXgpL/gpLXgpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkteCkvuCkueCkleCksuCkvuCkiCDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuCkh+CkmuCljeCkm+Ckv+CkpCBQSU4g4KSV4KWL4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4KSu4KSo4KSq4KSw4KWN4KSm4KWLIFBJTiDgpJXgpYvgpKEg4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSm4KWI4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i4KSX4KSy4KSkIFBJTiDgpJXgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLgpaog4KSm4KWH4KSW4KS/IOClriDgpLXgpL7gpJ8g4KSo4KSu4KWN4KSs4KSwIOCkreCkj+CkleCliyDgpI/gpIngpJ/gpL4gUElOIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsg4KSV4KWL4KShIOClriDgpLXgpJ/gpL4g4KSo4KSu4KWN4KSs4KSwIOCkteCkviDgpLjgpYsg4KSt4KSo4KWN4KSm4KS+IOCkrOCkouClgCDgpLngpYHgpKjgpYHgpKrgpLDgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJQVUsg4KSV4KWL4KShIOCkquClgeCkqDrgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIOCkp+Clh+CksOCliCDgpKrgpYHgpKg64KSq4KWN4KSw4KSv4KS+4KS44KS54KSw4KWC4KSy4KWHIFNJTeCksuCkvuCkiCDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkqOCkv+Ckt+CljeCkleCljeCksOCkv+CkryDgpJfgpLDgpL/gpKbgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDgpJXgpYvgpKHgpLngpLDgpYIg4KSu4KWH4KSyIOCkluCkvuCkj+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuCkqOCkv+CkleCliCDgpKfgpYfgpLDgpYgg4KSi4KS+4KSB4KSa4KS+IOCkleCli+CkuOCkv+CkuOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIEdvb2dsZSDgpJbgpL7gpKTgpL7gpJXgpYsg4KS44KS+4KSlIOCkuOCkvuCkh+CkqCDgpIfgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSo4KS+4KSuICjgpIfgpK7gpYfgpLIpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IuCkuOCkvuCkh+CkqCDgpIfgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLgpIXgpK7gpL7gpKjgpY3gpK8g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KSo4KS+4KSuIOCkteCkviDgpKrgpL7gpLjgpLXgpLDgpY3gpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4KSV4KWHIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSo4KS+4KSuIOCkteCkviDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSs4KS/4KSw4KWN4KS44KSo4KWB4KSt4KSv4KWLP1xuIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iIOCkruCkviDgpJzgpL7gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLgpJbgpL7gpKTgpL4g4KSc4KS+4KSB4KSaIOCkueClgeCkgeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCklSDgpKrgpL7gpLjgpLXgpLDgpY3gpKEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkl+CksuCkpCDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleClh+CkqOCljeCkoeCkruCkviDgpKvgpYfgpLDgpL8g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4g4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSW4KS/4KSa4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSV4KWL4KS44KS/4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkquCkm+CkvyDgpKXgpKog4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClgiwg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpL7gpLDgpY3gpK/gpLbgpL7gpLLgpL7gpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCkv+CkqOClhyDgpJsg4KSwIOCkuOCkrOCliCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSh4KWH4KSf4KS+IOCkueCksOCkvuCkieCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkl+CksuCkpOCkuOCkgeCklyDgpKvgpYvgpKjgpLLgpL7gpIgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSV4KWL4KS44KS/4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpK/gpYvgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSq4KSb4KS/IOCkpeCkqiDgpIXgpLjgpKvgpLIg4KSV4KWL4KS44KS/4KS44KS54KSw4KWCLCDgpKvgpYvgpKjgpLLgpL7gpIgg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCkvuCksOCljeCkr+CktuCkvuCksuCkvuCkruCkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KS/4KSo4KWHIOCkmyDgpLAg4KS44KSs4KWIIOCkquCljeCksOCkr+Cli+CklyDgpKHgpYfgpJ/gpL4g4KS54KSw4KS+4KSJ4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkn+CljeCkr+CkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQg4KSF4KSsIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSr4KWL4KSoIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpK/gpKTgpY3gpKgg4KSX4KSw4KWN4KSo4KWB4KSt4KSv4KWL4KWkIOCkheCkrCDgpKvgpYvgpKgg4KSr4KWN4KSv4KS+4KSV4KWN4KSf4KWN4KSw4KS/IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkruCkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KS54KWB4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpIbgpKvgpY3gpKjgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSV4KWL4KSw4KWN4KSo4KWB4KSt4KSv4KWL4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkteCkv+Ckq+CksiDgpKrgpY3gpLDgpK/gpKTgpY3gpKjgpLngpLDgpYIg4KSq4KSb4KS/LCDgpKTgpKrgpL7gpIjgpILgpLLgpL7gpIgg4KSG4KSr4KWN4KSo4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpIfgpK7gpYfgpLIg4KSW4KS+4KSk4KS+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkXG5cbiDgpKvgpYfgpLDgpL8g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpLngpLDgpYLgpK7gpL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpIbgpKvgpY3gpKjgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviDgpJfgpLLgpKQg4KSw4KWC4KSq4KSu4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpKTgpL7gpKjgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKfgpYfgpLDgpYgg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClguCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkj+CkieCkn+CkviDgpIfgpK7gpYfgpLIg4KSW4KS+4KSk4KS+4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+Cli+CkqCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkuOCli+Ckp+Ckv+CkqOClhyDgpJvgpaRcblxuIOCkq+Clh+CksOCkvyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IuCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IuCkheCkmOCkv+CksuCljeCksuCliyDgpJ/gpY3gpLDgpK/gpL7gpJUg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i4KSF4KSw4KWN4KSV4KWLIOCkn+CljeCksOCkr+CkvuCklSDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i4KSw4KWL4KSV4KWN4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+IuCkrOCkn+CkqCDgpKzgpJzgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjMwODQxNzkzMjQ4MTA1NzU3ODciPiLgpKzgpJ/gpKgg4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IuCkleClgeCkqOCliCDgpLjgpYfgpLXgpL4g4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmExMTgyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDEzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsg4KSwIOCkqOCkr+CkvuCkgSBQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDgpJXgpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IuCkqOCkr+CkvuCkgSBQSU4g4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggUElOIOCkleCli+CkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4KSX4KSy4KSkIFBJTiDgpJXgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpK7gpYfgpKjgpYEg4KSl4KS/4KSa4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpKTgpY3gpK/gpLjgpKrgpJvgpL8g4KWmIOCkpeCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLgpIXgpKTgpY3gpK/gpL7gpKfgpL/gpJUg4KSu4KWL4KS54KSh4KS+IOCkluCli+CksuCljeCkqOClhyDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYIg4KSs4KSi4KWAIOCkreCkj+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4i4KSa4KS+4KSw4KWN4KScIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4i4KSa4KS+4KSw4KWN4KScIOCkl+CksOCljeCkpuCliCwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpJrgpL7gpLDgpY3gpJzgpLAg4KSc4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkruClh+CkqOClgSDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpLLgpJUg4KSX4KSw4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpK7gpL4gU0lNIOCkleCkvuCksOCljeCkoSDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IuCkq+Cli+CkqOCkruCkviDgpJXgpYHgpKjgpYggU0lNIOCkleCkvuCksOCljeCkoSDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpK3gpL/gpKTgpY3gpLAg4KSw4KS+4KSW4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU0lNIOCkleCkvuCksOCljeCkoSDgpLngpLDgpL7gpIfgpLDgpLngpYfgpJXgpYsg4KSbIOCkteCkviDgpKrgpKLgpY3gpKgg4KSv4KWL4KSX4KWN4KSvIOCkm+CliOCkqOClpCBTSU0g4KSV4KS+4KSw4KWN4KShIOCkueCkvuCksuCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiLgpKrgpY3gpLDgpK/gpYvgpJcg4KSF4KSv4KWL4KSX4KWN4KSvIFNJTSDgpJXgpL7gpLDgpY3gpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsgU0lNIOCkleCkvuCksOCljeCkoSDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpL/gpI/gpJXgpYsg4KSb4KWkXG4g4KSF4KSw4KWN4KSV4KWLIFNJTSDgpJXgpL7gpLDgpY3gpKHgpJXgpYsg4KSy4KS+4KSX4KS/IOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKTgpL7gpLDgpLDgpLngpL/gpKQg4KS44KWH4KS14KS+IOCkquCljeCksOCkpuCkvuCkr+CkleCkuOCkgeCklyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSy4KSVIOCkl+CksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4iU0lNIOCkleCkvuCksOCljeCkoSBQVUst4KSy4KSVIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4iU0lNIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpLLgpJUg4KS54KWB4KSB4KSm4KWI4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDgpLXgpL/gpJzgpYfgpJ8gJTIkZCBvZiAlMyRk4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuCkteCkv+CknOClh+CknyDgpKXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLgpJbgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KS14KS/4KS44KWN4KSk4KS+4KSwIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSt4KSk4KWN4KSV4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4KS14KS/4KSc4KWH4KSf4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJvgpKjgpYzgpJ/gpJXgpLDgpY3gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLgpLjgpY3gpKXgpL/gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i4KSu4KS/4KSh4KS/4KSv4KS+IOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCko+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i4KS14KS/4KSc4KWH4KSfIOCkquClgeCkqOCkg+CkleCljeCksOCkriDgpJfgpLDgpY3gpKjgpYcg4KS44KWB4KSw4KWBIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IuCkteCkv+CknOClh+CknyDgpKrgpYHgpKjgpIPgpJXgpY3gpLDgpK4g4KS44KSu4KS+4KSq4KWN4KSkIOCkreCkj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IuCkteCkv+CknOClh+CknyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgpK7gpYfgpJ/gpL7gpIfgpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLgpIXgpKjgpLLgpJUg4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IuCkuOCljeCksuCkvuCkh+CkoSDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IuCkouCkvuCkgeCkmuCkviDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuCkq+Clh+CkuCDgpIXgpKjgpLLgpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUGluIOCkheCkqOCksuCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IuCkquCkvuCkuOCkteCksOCljeCkoSDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLgpKLgpL7gpIHgpJrgpL4g4KSV4KWN4KS34KWH4KSk4KWN4KSw4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IuCkuOCljeCksuCkvuCkh+CkoSDgpJXgpY3gpLfgpYfgpKTgpY3gpLDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+IuCkheCkmOCkv+CksuCljeCksuCliyDgpKrgpKUg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiLgpIXgpLDgpY3gpJXgpYsg4KSq4KSlIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IuCksOCli+CkleCljeCkqOClhyDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IuCkrOCknOCkvuCkieCkqOClhyDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IuCkrOCkn+CkqCDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iP+Clp+ClqOClqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4i4KSw4KSm4KWN4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiLgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IuCkruCli+CkoSDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuCkleCljeCkr+CkvuCkruClh+CksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLgpK7gpYzgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i4KSG4KS14KS+4KScIOCkmuCkvuCksuClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4KSW4KWL4KSc4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KSu4KS+4KSl4KS/IOCkp+Ckv+CkuOCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgpJXgpYsg4KSy4KS+4KSX4KS/IOCkpOCksiDgpLjgpY3gpLLgpL7gpIfgpKEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i4KS44KWN4KSy4KS+4KSH4KShIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KSs4KS+4KSv4KS+4KSB4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuCkuOCljeCksuCkvuCkh+CkoSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkpuCkvuCkr+CkvuCkgeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4i4KSF4KS54KS/4KSy4KWH4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpJXgpLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLgpKLgpL7gpIHgpJrgpL4g4KSs4KS/4KSw4KWN4KS44KSo4KWBIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i4KSX4KSy4KSkIOCkouCkvuCkgeCkmuCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IuCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i4KSX4KSy4KSkIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLgpIbgpKvgpY3gpKjgpYsg4KSi4KS+4KSB4KSa4KS+IOCkleCli+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4g4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUElOIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkheCkueCkv+CksuClhyDgpIXgpLjgpJXgpY3gpLfgpK4g4KSb4KWkIOCkuOClgeCkmuCkvuCksOClgSDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IFBVSyDgpJXgpYvgpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCAg4KS14KS/4KS14KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpLXgpL7gpLngpJXgpLLgpL7gpIgg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLgpIfgpJrgpY3gpJvgpL/gpKQgUElOIOCkleCli+CkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuCkruCkqOCkquCksOCljeCkpuCliyBQSU4g4KSV4KWL4KShIOCkqOCkv+CktuCljeCkmuCkv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuCkl+CksuCkpCBQSU4g4KSV4KWL4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4KWqIOCkpuClh+CkluCkvyDgpa4g4KS14KS+4KSfIOCkqOCkruCljeCkrOCksCDgpK3gpI/gpJXgpYsg4KSP4KSJ4KSf4KS+IFBJTiDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIOCkleCli+CkoSDgpa4g4KS14KSf4KS+IOCkqOCkruCljeCkrOCksCDgpLXgpL4g4KS44KWLIOCkreCkqOCljeCkpuCkviDgpKzgpKLgpYAg4KS54KWB4KSo4KWB4KSq4KSw4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUFVLIOCkleCli+CkoSDgpKrgpYHgpKg64KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpKfgpYfgpLDgpYgg4KSq4KWB4KSoOuCkquCljeCksOCkr+CkvuCkuOCkueCksOClguCksuClhyBTSU3gpLLgpL7gpIgg4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpKjgpL/gpLfgpY3gpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KS/4KSm4KS/4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4g4KSV4KWL4KSh4KS54KSw4KWCIOCkruClh+CksiDgpJbgpL7gpI/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLgpKjgpL/gpJXgpYgg4KSn4KWH4KSw4KWIIOCkouCkvuCkgeCkmuCkviDgpJXgpYvgpLjgpL/gpLjgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8sIOCkpOCkquCkvuCkiOCkgeCkleCliyBHb29nbGUg4KSW4KS+4KSk4KS+4KSV4KWLIOCkuOCkvuCkpSDgpLjgpL7gpIfgpKgg4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriAo4KSH4KSu4KWH4KSyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLgpLjgpL7gpIfgpKgg4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4KSF4KSu4KS+4KSo4KWN4KSvIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuCkleClhyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkv+CksOCljeCkuOCkqOClgeCkreCkr+Cliz9cbiI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgpK7gpL4g4KSc4KS+4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i4KSW4KS+4KSk4KS+IOCknOCkvuCkgeCkmiDgpLngpYHgpIHgpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJfgpLLgpKQg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCliyDgpJvgpaQgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpLLgpJUg4KSi4KS+4KSB4KSa4KS+IOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkluCkv+CkmuCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKrgpJvgpL8g4KSl4KSqIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYIsIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSbIOCksCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkoeClh+Ckn+CkviDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKTgpLjgpIHgpJcg4KSr4KWL4KSo4KSy4KS+4KSIIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSv4KWL4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkquCkm+CkvyDgpKXgpKog4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClgiwg4KSr4KWL4KSo4KSy4KS+4KSIIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpL7gpLDgpY3gpK/gpLbgpL7gpLLgpL7gpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCkv+CkqOClhyDgpJsg4KSwIOCkuOCkrOCliCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSh4KWH4KSf4KS+IOCkueCksOCkvuCkieCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJ/gpY3gpK/gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIOCkheCkrCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCkvuCksOCljeCkr+CktuCkvuCksuCkvuCkruCkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KS/4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkq+Cli+CkqCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCDgpIXgpKwg4KSr4KWL4KSoIOCkq+CljeCkr+CkvuCkleCljeCkn+CljeCksOCkvyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkueClgeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CksOCljeCkqOClgeCkreCkr+Cli+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLXgpL/gpKvgpLIg4KSq4KWN4KSw4KSv4KSk4KWN4KSo4KS54KSw4KWCIOCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSC4KSy4KS+4KSIIOCkhuCkq+CljeCkqOCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KS44KWL4KSn4KS/4KSo4KWHIOCkm+ClpFxuXG4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KS54KSw4KWC4KSu4KS+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4g4KSX4KSy4KSkIOCksOClguCkquCkruCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSk4KS+4KSo4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSn4KWH4KSw4KWIIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8sIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpI/gpIngpJ/gpL4g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkvuCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkXG5cbiDgpKvgpYfgpLDgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLgpIXgpJjgpL/gpLLgpY3gpLLgpYsg4KSf4KWN4KSw4KSv4KS+4KSVIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IuCkheCksOCljeCkleCliyDgpJ/gpY3gpLDgpK/gpL7gpJUg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IuCksOCli+CkleCljeCkqOClhyDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiLgpKzgpJ/gpKgg4KSs4KSc4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4i4KSs4KSf4KSoIOCksOCli+CkleCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg3MDA2NTA0MDMwNTQwNDIxNTMiPiLgpJXgpYHgpKjgpYgg4KS44KWH4KS14KS+IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKaW5kZXggYjk0Y2I3MC4uMzQxNDljOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQaW5jb2RlIHR5cGVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iR2VlZiBkZSBQVUstY29kZSBlbiBkZSBuaWV1d2UgcGluY29kZSBvcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLWNvZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5pZXV3ZSBwaW5jb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iVHlwIGRlIHB1a2NvZGUgdm9vciBkZSBzaW1rYWFydCBlbiBkZSBuaWV1d2UgcGluY29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iUHVrY29kZSB2b29yIHNpbWthYXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJOaWV1d2UgcGluY29kZSB2b29yIHNpbWthYXJ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iUmFhayBhYW4gb20gd2FjaHR3b29yZCBpbiB0ZSB2b2VyZW4iPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJUeXAgaGV0IHdhY2h0d29vcmQgb20gdGUgb250Z3JlbmRlbGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iVHlwIHBpbmNvZGUgb20gdGUgb250Z3JlbmRlbGVuIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+Iktub3Agdm9vciBvbmRlcmJyZWtlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iS25vcCB2b29yIGFmc3BlbGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJLbm9wIHZvb3Igc3RvcHBlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJMZXVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iTmlldCBsZXVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iSGFydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+Ik9udGdyZW5kZWwgb20gZG9vciB0ZSBnYWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iU3RhcnQgZ2Vhbm51bGVlcmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iWmV0IDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG5lZXIgb20gdGUgdmVyd2lqZGVyZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHdvcmR0IG5pZXQgdmVyd2lqZGVyZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFsdCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+Ikdld2Vuc3RlIHBpbmNvZGUgb3BnZXZlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJHZXdlbnN0ZSBwaW5jb2RlIGJldmVzdGlnZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNpbWthYXJ0IG9udGdyZW5kZWxlbi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Ik9uanVpc3RlIHBpbmNvZGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iVm9lciBlZW4gcGluY29kZSB2YW4gNCB0b3QgOCBjaWpmZXJzIGluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IkRlIFBVSy1jb2RlIGlzIG1pbmltYWFsIGFjaHQgbnVtbWVycyBsYW5nLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkdlZWYgZGUganVpc3RlIFBVSy1jb2RlIG9wbmlldXcgb3AuIEJpaiBoZXJoYWFsZGUgcG9naW5nZW4gd29yZHQgZGUgc2lta2FhcnQgcGVybWFuZW50IHVpdGdlc2NoYWtlbGQuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJVIGhlZWZ0IHV3IG9udGdyZW5kZWxpbmdzcGF0cm9vbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZWVyIG9uanVpc3QgZ2V0ZWtlbmQuIE5hIG5vZyBlZW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1pc2x1a3RlIHBvZ2luZ2VuIHdvcmR0IHUgZ2V2cmFhZ2QgdXcgdGVsZWZvb24gdGUgb250Z3JlbmRlbGVuIHZpYSBlZW4gZS1tYWlsYWNjb3VudC5cblxuIFByb2JlZXIgaGV0IG92ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vjb25kZW4gb3BuaWV1dy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJWZXJ3aWpkZXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iT25qdWlzdGUgcGluY29kZSB2b29yIHNpbWthYXJ0LiBVIG1vZXQgbnUgY29udGFjdCBvcG5lbWVuIG1ldCB1dyBwcm92aWRlciBvbSB1dyBhcHBhcmFhdCB0ZSBvbnRncmVuZGVsZW4uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJPbmp1aXN0ZSBwaW5jb2RlIHZvb3Igc2lta2FhcnQuIFUgaGVlZnQgbm9nIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb2dpbmcgb3ZlciB2b29yZGF0IHUgY29udGFjdCBtZXQgdXcgcHJvdmlkZXIgbW9ldCBvcG5lbWVuIG9tIHV3IGFwcGFyYWF0IHRlIG9udGdyZW5kZWxlbi4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJPbmp1aXN0ZSBwaW5jb2RlIHZvb3Igc2lta2FhcnQuIFUgaGVlZnQgbm9nIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb2dpbmdlbiBvdmVyLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU2lta2FhcnQgaXMgb25icnVpa2JhYXIuIE5lZW0gY29udGFjdCBvcCBtZXQgdXcgcHJvdmlkZXIuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJPbmp1aXN0ZSBwdWtjb2RlIHZvb3Igc2lta2FhcnQuIFUgaGVlZnQgbm9nIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb2dpbmcgb3ZlciB2b29yZGF0IGRlIHNpbWthYXJ0IGRlZmluaXRpZWYgb25icnVpa2JhYXIgd29yZHQuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iT25qdWlzdGUgcHVrY29kZSB2b29yIHNpbWthYXJ0LiBVIGhlZWZ0IG5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9naW5nZW4gb3ZlciB2b29yZGF0IGRlIHNpbWthYXJ0IGRlZmluaXRpZWYgb25icnVpa2JhYXIgd29yZHQuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJCZXdlcmtpbmcgbWV0IHBpbmNvZGUgdm9vciBzaW1rYWFydCBtaXNsdWt0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iQmV3ZXJraW5nIG1ldCBwdWtjb2RlIHZvb3Igc2lta2FhcnQgaXMgbWlzbHVrdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iQ29kZSBnZWFjY2VwdGVlcmQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iS25vcCB2b29yIHZvcmlnIG51bW1lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Iktub3Agdm9vciB2b2xnZW5kIG51bW1lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJLbm9wIHZvb3Igb25kZXJicmVrZW4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbAppbmRleCAxNWE0YTdjLi5jZmNiYzQ2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IldwaXN6IGtvZCBQSU4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iV3Bpc3oga29kIFBVSyBpIG5vd3kga29kIFBJTi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IktvZCBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5vd3kgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iV3Bpc3ogUFVLIGkgbm93eSBrb2QgUElOIGthcnR5IFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iS29kIFBVSyBrYXJ0eSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik5vd3kga29kIFBJTiBrYXJ0eSBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJEb3RrbmlqLCBhYnkgd3Bpc2HEhyBoYXPFgm8uIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iV3Bpc3ogaGFzxYJvLCBhYnkgb2RibG9rb3dhxIcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iV3Bpc3oga29kIFBJTiwgYWJ5IG9kYmxva293YcSHLiI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJQcnp5Y2lzayB3c3RyenltYW5pYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iUHJ6eWNpc2sgb2R0d2FyemFuaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IlByenljaXNrIHphdHJ6eW1hbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlBvZG9iYSBtaSBzacSZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iTmllIHBvZG9iYSBtaSBzacSZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iU2VyY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJPZGJsb2t1aiwgYnkga29udHludW93YcSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iVXJ1Y2hvbWllbmllIGFudWxvd2FuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJVcHXFm8SHIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LCBieSB1c3VuxIXEhy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbmllIHpvc3RhbmllIHVzdW5pxJl0eS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IlBvZGFqIHd5YnJhbnkga29kIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJQb3R3aWVyZMW6IHd5YnJhbnkga29kIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iT2RibG9rb3d1asSZIGthcnTEmSBTSU3igKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJOaWVwcmF3aWTFgm93eSBQSU4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iV3Bpc3ogUElOIG8gZMWCdWdvxZtjaSBvZCA0IGRvIDggY3lmci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJLb2QgUFVLIG11c2kgbWllxIcgY28gbmFqbW5pZWogOCBjeWZyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlBvbm93bmllIHBvZGFqIHBvcHJhd255IGtvZCBQVUsuIE5pZXVkYW5lIHByw7NieSBzcG93b2R1asSFIHRyd2HFgmUgd3nFgsSFY3plbmllIGthcnR5IFNJTS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlBvIHJheiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBuaWVwcmF3aWTFgm93byBuYXJ5c293YcWCZcWbIHd6w7NyIG9kYmxva293YW5pYS4gUG8ga29sZWpueWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG5pZXVkYW55Y2ggcHLDs2JhY2gga29uaWVjem5lIGLEmWR6aWUgb2RibG9rb3dhbmllIHRlbGVmb251IHByenkgdcW8eWNpdSBkYW55Y2ggbG9nb3dhbmlhIG5hIGtvbnRvIEdvb2dsZS5cblxuIFNwcsOzYnVqIHBvbm93bmllIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCTICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iVXN1xYQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik5pZXByYXdpZMWCb3d5IGtvZCBQSU4ga2FydHkgU0lNLiBNdXNpc3ogdGVyYXogc2tvbnRha3Rvd2HEhyBzacSZIHogb3BlcmF0b3JlbSwgYnkgb2RibG9rb3dhxYIgVHdvamUgdXJ6xIVkemVuaWUuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJOaWVwcmF3aWTFgm93eSBrb2QgUElOIGthcnR5IFNJTS4gTWFzeiBqZXN6Y3plIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcsOzYsSZLCB6YW5pbSBixJlkemllc3ogbXVzaWHFgiBza29udGFrdG93YcSHIHNpxJkgeiBvcGVyYXRvcmVtLCBieSBvZGJsb2tvd2HFgiBUd29qZSB1cnrEhWR6ZW5pZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJOaWVwcmF3aWTFgm93eSBrb2QgUElOIGthcnR5IFNJTS4gTWFzeiBqZXN6Y3plIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcsOzYih5KS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IkthcnRhIFNJTSB6b3N0YcWCYSB0cndhbGUgemFibG9rb3dhbmEuIFNrb250YWt0dWogc2nEmSB6IG9wZXJhdG9yZW0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJOaWVwcmF3aWTFgm93eSBrb2QgUFVLIGthcnR5IFNJTS4gTWFzeiBqZXN6Y3plIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcsOzYsSZLCB6YW5pbSBrYXJ0YSBTSU0gem9zdGFuaWUgdHJ3YWxlIHphYmxva293YW5hLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+Ik5pZXByYXdpZMWCb3d5IGtvZCBQVUsga2FydHkgU0lNLiBNYXN6IGplc3pjemUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHByw7NiKHkpLCB6YW5pbSBrYXJ0YSBTSU0gem9zdGFuaWUgdHJ3YWxlIHphYmxva293YW5hLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iT3BlcmFjamEgeiBrb2RlbSBQSU4ga2FydHkgU0lNIG5pZSB1ZGHFgmEgc2nEmS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+Ik9wZXJhY2phIHoga29kZW0gUFVLIGthcnR5IFNJTSBuaWUgdWRhxYJhIHNpxJkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IktvZCB6b3N0YcWCIHphYWtjZXB0b3dhbnkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iUHJ6eWNpc2sgcG9wcnplZG5pZWdvIHV0d29ydSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IlByenljaXNrIG5hc3TEmXBuZWdvIHV0d29ydSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJQcnp5Y2lzayB3c3RyenltYW5pYSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKaW5kZXggMjIyMDUxYy4uYWJkNGZjZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkVzY3JldmEgbyBjw7NkaWdvIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IkVzY3JldmEgbyBQVUsgZSBvIG5vdm8gY8OzZGlnbyBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IkPDs2RpZ28gUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJOb3ZvIGPDs2RpZ28gUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iSW50cm9kdXppciBQVUsgZG8gY2FydMOjbyBTSU0gZSBvIG5vdm8gY8OzZGlnbyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IkPDs2RpZ28gUFVLIGRvIGNhcnTDo28gU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJOb3ZvIGPDs2RpZ28gUElOIGRvIGNhcnTDo28gU0lNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iVG9xdWUgcGFyYSBlc2NyZXZlciBhIHBhbGF2cmEtcGFzc2UiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJFc2NyZXZhIGEgcGFsYXZyYS1wYXNzZSBwYXJhIGRlc2Jsb3F1ZWFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iRXNjcmV2YSBvIFBJTiBwYXJhIGRlc2Jsb3F1ZWFyIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IkJvdMOjbyBQYXVzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iQm90w6NvIFJlcHJvZHV6aXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IkJvdMOjbyBQYXJhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJHb3N0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+Ik7Do28gZ29zdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJDb3Jhw6fDo28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJEZXNibG9xdWVhciBwYXJhIGNvbnRpbnVhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkxhbsOnYW1lbnRvIGNhbmNlbGFkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJMYXJndWUgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gcGFyYSBlbGltaW5hci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbsOjbyBzZXLDoSBlbGltaW5hZG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJJbnRyb2R1emEgbyBjw7NkaWdvIFBJTiBwcmV0ZW5kaWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IkNvbmZpcm1lIG8gY8OzZGlnbyBQSU4gcHJldGVuZGlkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iQSBkZXNibG9xdWVhciBjYXJ0w6NvIFNJTS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkPDs2RpZ28gUElOIGluY29ycmV0by4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJJbnRyb2R1emEgdW0gUElOIGVudHJlIDQgZSA4IG7Dum1lcm9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+Ik8gY8OzZGlnbyBQVUsgZGV2ZSB0ZXIgOCBvdSBtYWlzIG7Dum1lcm9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlZvbHRlIGEgaW50cm9kdXppciBvIGPDs2RpZ28gUFVLIGNvcnJldG8uIERlbWFzaWFkYXMgdGVudGF0aXZhcyBjb25zZWN1dGl2YXMgaXLDo28gZGVzYXRpdmFyIHBlcm1hbmVudGVtZW50ZSBvIFNJTS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkRlc2VuaG91IGEgc2VxdcOqbmNpYSBkZSBkZXNibG9xdWVpbyBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gRGVwb2lzIGRlIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBzZW0gc3VjZXNzbywgc2VyLWxoZS3DoSBwZWRpZG8gcGFyYSBkZXNibG9xdWVhciBvIHRlbGVtw7N2ZWwgYXRyYXbDqXMgZGUgdW1hIGNvbnRhIGRlIGVtYWlsLlxuXG4gVGVudGUgbm92YW1lbnRlIGRlbnRybyBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiAtICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iUmVtb3ZlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iQ8OzZGlnbyBQSU4gZG8gY2FydMOjbyBTSU0gaW5jb3JyZXRvLiBUZW0gZGUgY29udGFjdGFyIG8gc2V1IG9wZXJhZG9yIHBhcmEgZGVzYmxvcXVlYXIgbyBkaXNwb3NpdGl2by4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IkPDs2RpZ28gUElOIGRvIGNhcnTDo28gU0lNIGluY29ycmV0by4gVGVtIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YSBhbnRlcyBkZSBuZWNlc3NpdGFyIGRlIGNvbnRhY3RhciBvIHNldSBvcGVyYWRvciBwYXJhIGRlc2Jsb3F1ZWFyIG8gZGlzcG9zaXRpdm8uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iQ8OzZGlnbyBQSU4gZG8gY2FydMOjbyBTSU0gaW5jb3JyZXRvLiBUZW0gbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhcy4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IkNhcnTDo28gU0lNIGludXRpbGl6w6F2ZWwuIENvbnRhY3RlIG8gc2V1IG9wZXJhZG9yLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iQ8OzZGlnbyBQVUsgZG8gY2FydMOjbyBTSU0gaW5jb3JyZXRvLiBUZW0gbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhIGFudGVzIGRlIG8gY2FydMOjbyBTSU0gZmljYXIgcGVybWFuZW50ZW1lbnRlIGludXRpbGl6w6F2ZWwuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iQ8OzZGlnbyBQVUsgZG8gY2FydMOjbyBTSU0gaW5jb3JyZXRvLiBUZW0gbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBhbnRlcyBkZSBvIGNhcnTDo28gU0lNIGZpY2FyIHBlcm1hbmVudGVtZW50ZSBpbnV0aWxpesOhdmVsLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iRmFsaGEgYW8gaW50cm9kdXppciBvIFBJTiBkbyBjYXJ0w6NvIFNJTSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IkZhbGhhIGFvIGludHJvZHV6aXIgbyBQVUsgZG8gY2FydMOjbyBTSU0hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkPDs2RpZ28gYWNlaXRlISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IkJvdMOjbyBGYWl4YSBhbnRlcmlvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IkJvdMOjbyBGYWl4YSBzZWd1aW50ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJCb3TDo28gUGF1c2EiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAppbmRleCBhNTYzMzcyLi4yNGQ3OGU1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+Ikluc2lyYSBvIGPDs2RpZ28gUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iSW5zaXJhIG8gUFVLIGUgbyBub3ZvIGPDs2RpZ28gUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDw7NkaWdvIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTm92byBjw7NkaWdvIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IkRpZ2l0ZSBvIFBVSyBkbyBTSU0gZSBvIG5vdm8gY8OzZGlnbyBQSU4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDw7NkaWdvIFBVSyBkbyBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik5vdm8gY8OzZGlnbyBQSU4gZG8gU0lNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iVG9xdWUgcGFyYSBpbnNlcmlyIGEgc2VuaGEiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJEaWdpdGUgYSBzZW5oYSBwYXJhIGRlc2Jsb3F1ZWFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iSW5zaXJhIG8gUElOIHBhcmEgZGVzYmxvcXVlYXIiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iQm90w6NvIFwiUGF1c2FyXCIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkJvdMOjbyBcIlJlcHJvZHV6aXJcIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iQm90w6NvIFwiUGFyYXJcIiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJHb3N0ZWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJOw6NvIGdvc3RlaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkNvcmHDp8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkRlc2Jsb3F1ZWllIHBhcmEgY29udGludWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iSW5pY2lhbGl6YcOnw6NvIGNhbmNlbGFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJTb2x0ZSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBwYXJhIGV4Y2x1aXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG7Do28gc2Vyw6EgZXhjbHXDrWRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iRGlnaXRlIG8gY8OzZGlnbyBQSU4gZGVzZWphZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iQ29uZmlybWUgbyBjw7NkaWdvIFBJTiBkZXNlamFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iRGVzYmxvcXVlYW5kbyBvIGNhcnTDo28gU0lN4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iQ8OzZGlnbyBQSU4gaW5jb3JyZXRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IkRpZ2l0ZSB1bSBQSU4gY29tIHF1YXRybyBhIG9pdG8gbsO6bWVyb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iTyBjw7NkaWdvIFBVSyBkZXZlIHRlciA4IG7Dum1lcm9zIG91IG1haXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iSW50cm9kdXphIG5vdmFtZW50ZSBvIGPDs2RpZ28gUFVLIGNvcnJldG8uIE11aXRhcyB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcyBkZXNhdGl2YXLDo28gcGVybWFuZW50ZW1lbnRlIG8gU0lNLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iVm9jw6ogZGVzZW5ob3Ugc3VhIHNlcXXDqm5jaWEgZGUgZGVzYmxvcXVlaW8gaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIFNlIGZpemVyIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBpbmNvcnJldGFzLCBzZXLDoSBzb2xpY2l0YWRvIHF1ZSB2b2PDqiB1c2UgbyBsb2dpbiBkbyBHb29nbGUgcGFyYSBkZXNibG9xdWVhci5cblxuIFRlbnRlIG5vdmFtZW50ZSBlbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJSZW1vdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJDw7NkaWdvIFBJTiBkbyBTSU0gaW5jb3JyZXRvLiBFbnRyZSBlbSBjb250YXRvIGNvbSBhIG9wZXJhZG9yYSBwYXJhIGRlc2Jsb3F1ZWFyIG8gZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJDw7NkaWdvIFBJTiBkbyBTSU0gaW5jb3JyZXRvLiBUZW50YXRpdmFzIHJlc3RhbnRlczogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiBDYXNvIG8gY8OzZGlnbyBjb3JyZXRvIG7Do28gc2VqYSBkaWdpdGFkbywgc2Vyw6EgbmVjZXNzw6FyaW8gZW50cmFyIGVtIGNvbnRhdG8gY29tIGEgb3BlcmFkb3JhIHBhcmEgZGVzYmxvcXVlYXIgbyBkaXNwb3NpdGl2by4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJDw7NkaWdvIFBJTiBkbyBTSU0gaW5jb3JyZXRvLiBUZW50YXRpdmFzIHJlc3RhbnRlczogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iTyBTSU0gZXN0w6EgaW51dGlsaXrDoXZlbC4gRW50cmUgZW0gY29udGF0byBjb20gYSBvcGVyYWRvcmEuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJDw7NkaWdvIFBVSyBkbyBTSU0gaW5jb3JyZXRvLiBUZW50YXRpdmFzIHJlc3RhbnRlczogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IENhc28gbyBjw7NkaWdvIGNvcnJldG8gbsOjbyBzZWphIGRpZ2l0YWRvLCBvIFNJTSBzZSB0b3JuYXLDoSBwZXJtYW5lbnRlbWVudGUgaW51dGlsaXrDoXZlbC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJDw7NkaWdvIFBVSyBkbyBTSU0gaW5jb3JyZXRvLiBUZW50YXRpdmFzIHJlc3RhbnRlczogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiBDYXNvIG8gY8OzZGlnbyBjb3JyZXRvIG7Do28gc2VqYSBkaWdpdGFkbywgbyBTSU0gc2UgdG9ybmFyw6EgcGVybWFuZW50ZW1lbnRlIGludXRpbGl6w6F2ZWwuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJGYWxoYSBuYSBvcGVyYcOnw6NvIGRlIFBJTiBkbyBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJGYWxoYSBuYSBvcGVyYcOnw6NvIGRlIFBVSyBkbyBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkPDs2RpZ28gYWNlaXRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IkJvdMOjbyBcIkZhaXhhIGFudGVyaW9yXCIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJCb3TDo28gXCJQcsOzeGltYSBmYWl4YVwiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IkJvdMOjbyBcIlBhdXNhclwiIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ybS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcm0vc3RyaW5ncy54bWwKaW5kZXggOGRkYTA1NS4uZWUyNmEzZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ybS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJtL3N0cmluZ3MueG1sCkBAIC0yMiwxMSArMjIsMTEgQEAKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUgKDMwMzc2ODU3OTYwNTg0OTUwMTcpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUgKDQ4MDA3MjUyNjY5MjU4NDUzMzMpIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlICgzMDM1ODU2NTUwMjg5NzI0MzM4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQgKDEzNDExMTIxNDY3MTAwODcwNDgpIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQgKDE4MDE5NDEwNTEwOTQ5NzQ2MDkpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCAoODAyNzY4MDMyMTYxNDE5NjI1OCkgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCAoMzIwMTE1MTg0MDU3MDQ5MjUzOCkgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50ICg3ODU4NTQ3NDY0OTgyOTgxMzg0KSAtLT4KICAgICA8c2tpcCAvPgpAQCAtMTIxLDYgKzEyMSwyMCBAQAogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiAoNzY1NjM1ODQ4Mjk4MDkxMjIxNikgLS0+CiAgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24gKDQ1MzU5MzgxMjk2NjM5MDMxOTQpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24gKDgxMDE0MzM2NzcxOTIxNzc4NjEpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24gKDIzMzY5NDMyMzI0NzQ2ODk4ODcpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIgKDU0MjU4MzcyNzI0MTgxNzYxNzYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIgKDc4OTY5OTIxNzE4NzgzMDkzNTgpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0ICg0MDk2NTUwNTUyNjM0MzkxNDUxKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQgKDUwODgzMzUwNjc4MDkwOTM5MykgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTg2LDggKzIwMCw2IEBACiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlICg4OTUwMzk4MDE2OTc2ODY1NzYyKSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlICgxMTM5MzI0ODg3NDEzODQ2OTEyKSAtLT4KLSAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtnX2ludmFsaWRfc2ltX3Bpbl9oaW50ICg4Nzk1MTU5MzU4MTEwNjIwMDAxKSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtnX2ludmFsaWRfc2ltX3B1a19oaW50ICg3NTUzMzg4MzI1NjU0MzY5NTc1KSAtLT4KQEAgLTIzNCw2ICsyNDYsMjAgQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQgKDc4OTkyMDI5NzgyMDQ0Mzg3MDgpIC0tPgogICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkICgzMDUzMTAzOTQ1NTc2NDkyNCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZTpvbmUgKDgxMzQzMTM5OTc3OTk2MzgyNTQpIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlOm90aGVyICgyMjE1NzIzMzYxNTc1MzU5NDg2KSAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkICg3MDc3NTM2ODA4MjkxMzE2MjA4KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlOm9uZSAoMzI1Njg5MzYwNzU2MTA2MDY0OSkgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGU6b3RoZXIgKDU0NzczMDUyMjYwMjYzNDIwMzYpIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQgKDYyNjgyODgwOTM1NTgwMzE1NjQpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCAoMjgzODgyNDM2OTUwMjQ1NTk4NCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZ19waW5fYWNjZXB0ZWQgKDE0NDgyNDE2NzM1NzAwMjAwOTcpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24gKDgyMjkxMDg0MzAyNDU2Njk4NTQpIC0tPgogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24gKDQyOTkyNTgzMDAyODM3NzgzMDUpIC0tPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKaW5kZXggMDFkNzlmOC4uMWM3ZTg4ZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJbnRyb2R1Y2XFo2kgY29kdWwgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iSW50cm9kdWNlxaNpIGNvZHVsIFBVSyDFn2kgbm91bCBjb2QgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDb2R1bCBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5vdWwgY29kIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IkludHJvZHVjZcibaSBjb2R1bCBQVUsgcGVudHJ1IGNhcmR1bCBTSU0gyJlpIGNvZHVsIFBJTiBub3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IkNvZHVsIFBVSyBwZW50cnUgY2FyZHVsIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iQ29kdWwgUElOIG5vdSBwZW50cnUgY2FyZHVsIFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IkF0aW5nZcWjaSDFn2kgaW50cm9kdWNlxaNpIHBhcm9sYSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IkludHJvZHVjZcWjaSBwYXJvbGEgcGVudHJ1IGEgZGVibG9jYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IkludHJvZHVjZcWjaSBjb2R1bCBQSU4gcGVudHJ1IGEgZGVibG9jYSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJCdXRvbnVsIMOObnRyZXJ1cGXIm2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkJ1dG9udWwgUmVkYcibaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iQnV0b251bCBPcHJpyJtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlZvdCBwb3ppdGl2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iVm90IG5lZ2F0aXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJJbmltxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJEZWJsb2NhyJtpIHBlbnRydSBhIGNvbnRpbnVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iTGFuc2FyZSBhbnVsYXTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJFbGliZXJhyJtpIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHBlbnRydSBhIMiZdGVyZ2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+IldpZGdldHVsIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG51IHZhIGZpIMiZdGVycy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkludHJvZHVjZcWjaSBjb2R1bCBQSU4gZG9yaXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iQ29uZmlybWHFo2kgY29kdWwgUElOIGRvcml0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTZSBkZWJsb2NoZWF6xIMgY2FyZHVsIFNJTS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkNvZCBQSU4gaW5jb3JlY3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iSW50cm9kdWNlxaNpIHVuIGNvZCBQSU4gZm9ybWF0IGRpbiA0IHDDom7EgyBsYSA4IGNpZnJlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IkNvZHVsIFBVSyB0cmVidWllIHPEgyBhaWLEgyBtaW5pbXVtIDggY2lmcmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUmVpbnRyb2R1Y2XFo2kgY29kdWwgUFVLIGNvcmVjdC4gw45uY2VyY8SDcmlsZSByZXBldGF0ZSB2b3IgZGV6YWN0aXZhIGRlZmluaXRpdiBjYXJkdWwgU0lNLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iQcWjaSBkZXNlbmF0IGluY29yZWN0IG1vZGVsdWwgcGVudHJ1IGRlYmxvY2FyZSBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBvcmkuIER1cMSDIMOubmPEgyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBuZXJldcWfaXRlLCB2aSBzZSB2YSBzb2xpY2l0YSBzxIMgZGVibG9jYcWjaSB0ZWxlZm9udWwgY3UgYWp1dG9ydWwgdW51aSBjb250IGRlIGUtbWFpbC5cblxuIMOObmNlcmNhxaNpIGRpbiBub3UgcGVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gKGRlKSBzZWN1bmRlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkVsaW1pbmHFo2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkNvZHVsIFBJTiBwZW50cnUgY2FyZHVsIFNJTSBlc3RlIGluY29yZWN0LiBDb250YWN0YcibaSBvcGVyYXRvcnVsIHBlbnRydSBhIHbEgyBkZWJsb2NhIGRpc3Bveml0aXZ1bC4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IkNvZHVsIFBJTiBwZW50cnUgY2FyZHVsIFNJTSBlc3RlIGluY29yZWN0LiBWLWEgbWFpIHLEg21hcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gw65uY2VyY2FyZSwgZHVwxIMgY2FyZSB2YSB0cmVidWkgc8SDIGNvbnRhY3RhyJtpIG9wZXJhdG9ydWwgcGVudHJ1IGEgdsSDIGRlYmxvY2EgZGlzcG96aXRpdnVsLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IkNvZHVsIFBJTiBwZW50cnUgY2FyZHVsIFNJTSBlc3RlIGluY29yZWN0LiBWLWF1IG1haSByxINtYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iQ2FyZHVsIFNJTSBudSBwb2F0ZSBmaSB1dGlsaXphdC4gQ29udGFjdGHIm2kgb3BlcmF0b3J1bC4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkNvZHVsIFBVSyBwZW50cnUgY2FyZHVsIFNJTSBlc3RlIGluY29yZWN0LiBWLWEgbWFpIHLEg21hcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gw65uY2VyY2FyZSBww6JuxIMgY8OibmQgY2FyZHVsIFNJTSB2YSBkZXZlbmkgaW51dGlsaXphYmlsIGRlZmluaXRpdi4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJDb2R1bCBQVUsgcGVudHJ1IGNhcmR1bCBTSU0gZXN0ZSBpbmNvcmVjdC4gVi1hdSBtYWkgcsSDbWFzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBww6JuxIMgY8OibmQgY2FyZHVsIFNJTSB2YSBkZXZlbmkgaW51dGlsaXphYmlsIGRlZmluaXRpdi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IkRlYmxvY2FyZWEgY3UgYWp1dG9ydWwgY29kdWx1aSBQSU4gcGVudHJ1IGNhcmR1bCBTSU0gbnUgYSByZXXImWl0ISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iRGVibG9jYXJlYSBjdSBhanV0b3J1bCBjb2R1bHVpIFBVSyBwZW50cnUgY2FyZHVsIFNJTSBudSBhIHJldciZaXQhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkNvZCBhY2NlcHRhdCEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJCdXRvbnVsIE1lbG9kaWEgYW50ZXJpb2FyxIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJCdXRvbnVsIE1lbG9kaWEgdXJtxIN0b2FyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJCdXRvbnVsIMOObnRyZXJ1cGXIm2kiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbAppbmRleCAxMzY5ODJhLi4zMDRmNDc0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+ItCS0LLQtdC00LjRgtC1IFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLQktCy0LXQtNC40YLQtSBQVUst0LrQvtC0INC4INC90L7QstGL0LkgUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i0J3QvtCy0YvQuSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4i0JLQstC10LTQuNGC0LUgUFVLLdC60L7QtCDQuCDQvdC+0LLRi9C5IFBJTi3QutC+0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlBVSy3QutC+0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+ItCd0L7QstGL0LkgUElOLdC60L7QtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+ItCd0LDQttC80LjRgtC1INC00LvRjyDQstCy0L7QtNCwINC/0LDRgNC+0LvRjyI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+ItCS0LLQtdC00LjRgtC1INC/0LDRgNC+0LvRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+ItCS0LLQtdC00LjRgtC1IFBJTi3QutC+0LQiPC9zdHJpbmc+CkBAIC00Miw3ICs0Miw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJTSU0t0LrQsNGA0YLQsCDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCINC40LvQuCDQvdC10LTQvtGB0YLRg9C/0L3QsC4g0JLRgdGC0LDQstGM0YLQtSBTSU0t0LrQsNGA0YLRgy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4iU0lNLdC60LDRgNGC0LAg0L3QtdC/0YDQuNCz0L7QtNC90LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4iU0lNLdC60LDRgNGC0LAg0L7QutC+0L3Rh9Cw0YLQtdC70YzQvdC+INC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwLlxu0KfRgtC+0LHRiyDQv9C+0LvRg9GH0LjRgtGMINC90L7QstGD0Y4sINC+0LHRgNCw0YLQuNGC0LXRgdGMINC6INGB0LLQvtC10LzRgyDQvtC/0LXRgNCw0YLQvtGA0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTS3QutCw0YDRgtCwINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJTSU0t0LrQsNGA0YLQsCDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4i0JTQu9GPINGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQutC4IFNJTS3QutCw0YDRgtGLINGC0YDQtdCx0YPQtdGC0YHRjyBQVUst0LrQvtC0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4i0KDQsNC30LHQu9C+0LrQuNGA0L7QstC60LAgU0lNLdC60LDRgNGC0YvigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuINCS0LjQtNC20LXRgiAlMiRkINC40LcgJTMkZC4iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i0JrQvdC+0L/QutCwINC/0LDRg9C30YsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+ItCa0L3QvtC/0LrQsCDQstC+0YHQv9GA0L7QuNC30LLQtdC00LXQvdC40Y8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+ItCa0L3QvtC/0LrQsCDQstGL0LrQu9GO0YfQtdC90LjRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLQndGA0LDQstC40YLRgdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4i0J3QtSDQvdGA0LDQstC40YLRgdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4i0KDQtdC50YLQuNC90LMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLQoNCw0LfQsdC70L7QutC40YDRg9C50YLQtSDRjdC60YDQsNC9LCDRh9GC0L7QsdGLINC/0YDQvtC00L7Qu9C20LjRgtGMLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+ItCX0LDQv9GD0YHQuiDQvtGC0LzQtdC90LXQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4i0J7RgtC/0YPRgdGC0LjRgtC1INCy0LjQtNC20LXRgiBcIjx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+XCIsINGH0YLQvtCx0Ysg0YPQtNCw0LvQuNGC0Ywg0LXQs9C+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiLQktC40LTQttC10YIgXCI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPlwiINC90LUg0LHRg9C00LXRgiDRg9C00LDQu9C10L0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4i0JDQkdCSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLQktCy0LXQtNC40YLQtSDQttC10LvQsNC10LzRi9C5IFBJTi3QutC+0LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i0JLQstC10LTQuNGC0LUgUElOLdC60L7QtCDQtdGJ0ZEg0YDQsNC3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLQoNCw0LfQsdC70L7QutC40YDQvtCy0LrQsCBTSU0t0LrQsNGA0YLRi+KApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+ItCd0LXQstC10YDQvdGL0LkgUElOLdC60L7QtC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLQktCy0LXQtNC40YLQtSBQSU4t0LrQvtC0ICjQvtGCIDQg0LTQviA4INGG0LjRhNGAKS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUst0LrQvtC0INC00L7Qu9C20LXQvSDRgdC+0LTQtdGA0LbQsNGC0Ywg0L3QtSDQvNC10L3QtdC1IDjCoNGB0LjQvNCy0L7Qu9C+0LIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i0JLQstC10LTQuNGC0LUg0L/RgNCw0LLQuNC70YzQvdGL0LkgUFVLLdC60L7QtC4g0J/QvtGB0LvQtSDQvdC10YHQutC+0LvRjNC60LjRhSDQvdC10YPQtNCw0YfQvdGL0YUg0L/QvtC/0YvRgtC+0LogU0lNLdC60LDRgNGC0LAg0LHRg9C00LXRgiDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3QsC4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+ItCS0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YDQsNC3INC90LXQstC10YDQvdC+INGD0LrQsNC30LDQu9C4INCz0YDQsNGE0LjRh9C10YHQutC40Lkg0LrQu9GO0YcuINCf0L7RgdC70LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L3QtdCy0LXRgNC90YvRhSDQv9C+0L/Ri9GC0L7QuiDQtNC70Y8g0YDQsNC30LHQu9C+0LrQuNGA0L7QstC60Lgg0YLQtdC70LXRhNC+0L3QsCDQv9C+0YLRgNC10LHRg9C10YLRgdGPINCy0L7QudGC0Lgg0LIg0LDQutC60LDRg9C90YIgR29vZ2xlLlxuXG7Qn9C+0LLRgtC+0YAg0YfQtdGA0LXQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDRgdC10LouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCTICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i0KPQtNCw0LvQuNGC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+ItCd0LXQstC10YDQvdGL0LkgUElOLdC60L7QtC4g0J7QsdGA0LDRgtC40YLQtdGB0Ywg0Log0L7Qv9C10YDQsNGC0L7RgNGDINGB0LLRj9C30LgsINGH0YLQvtCx0Ysg0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCBTSU0t0LrQsNGA0YLRgy4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+ItCd0LXQstC10YDQvdGL0LkgUElOLdC60L7QtC4g0J7RgdGC0LDQu9C+0YHRjCDQv9C+0L/Ri9GC0L7QujogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiDQn9C+0YHQu9C1INGN0YLQvtCz0L4gU0lNLdC60LDRgNGC0LAg0LHRg9C00LXRgiDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3QsCDQuCDQstCw0Lwg0L/RgNC40LTQtdGC0YHRjyDQvtCx0YDQsNGC0LjRgtGM0YHRjyDQuiDQvtC/0LXRgNCw0YLQvtGA0YMg0YHQstGP0LfQuC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiLQndC10LLQtdGA0L3Ri9C5IFBJTi3QutC+0LQuINCe0YHRgtCw0LvQvtGB0Ywg0L/QvtC/0YvRgtC+0Lo6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTS3QutCw0YDRgtCwINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwINC90LDQstGB0LXQs9C00LAuINCe0LHRgNCw0YLQuNGC0LXRgdGMINC6INC+0L/QtdGA0LDRgtC+0YDRgyDRgdCy0Y/Qt9C4LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4i0J3QtdCy0LXRgNC90YvQuSBQVUst0LrQvtC0LiDQntGB0YLQsNC70L7RgdGMINC/0L7Qv9GL0YLQvtC6OiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uINCf0L7RgdC70LUg0Y3RgtC+0LPQviBTSU0t0LrQsNGA0YLQsCDQsdGD0LTQtdGCINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwINC90LDQstGB0LXQs9C00LAuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4i0J3QtdCy0LXRgNC90YvQuSBQVUst0LrQvtC0LiDQntGB0YLQsNC70L7RgdGMINC/0L7Qv9GL0YLQvtC6OiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uINCf0L7RgdC70LUg0Y3RgtC+0LPQviBTSU0t0LrQsNGA0YLQsCDQsdGD0LTQtdGCINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwINC90LDQstGB0LXQs9C00LAuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiLQndC1INGD0LTQsNC70L7RgdGMINGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0YwgU0lNLdC60LDRgNGC0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCBTSU0t0LrQsNGA0YLRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLQmtC+0LQg0L/RgNC40L3Rj9GCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i0JrQvdC+0L/QutCwINC/0LXRgNC10YXQvtC00LAg0Log0L/RgNC10LTRi9C00YPRidC10LzRgyDRgtGA0LXQutGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i0JrQvdC+0L/QutCwINC/0LXRgNC10YXQvtC00LAg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0YLRgNC10LrRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLQmtC90L7Qv9C60LAg0L/QsNGD0LfRiyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwNGM3ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTQwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCisqKgorKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTiDgtprgt5rgtq3gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyDgt4Pgt4Qg4Lax4LeAIFBJTiDgtprgt5rgtq3gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4Lax4LeAIFBJTiDgtprgt5rgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLgtrjgt5TgtrvgtrTgtq/gtrog4Lan4La64LeS4La04LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtrjgt5TgtrvgtrTgtq/gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcgUElOIOC2keC2miDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4LeA4LeQ4La74Lav4LeSIFBJTiDgtprgt5rgtq3gtrrgtprgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IuC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrjgtqcsIOC2uOC3meC2seC3lOC3gCDgtpTgtrbgt48g4La04LeD4LeU4LeAIDAg4LavIOC2lOC2tuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i4La44LeU4LeE4LeU4LarIOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtoXgtp/gt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LeaIOC2i+C2tOC2u+C3kuC2uCDgtrTgt4rigI3gtrvgtrrgtrHgt4rgtq3gtrrgtrHgt4og4Lac4Lar4LaxIOC2ieC2muC3iuC2uOC3gOC3jyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IuC2heC2u+C3neC2tOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4i4LaG4La74Led4La04Lar4La6IOC3gOC3meC2uOC3kuC2seC3iiwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IuC2lOC2tuC2nOC3miDgtobgtrvgt53gtrTgtprgtrrgtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+IuC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4La44LeZ4Lax4LeU4LeAIOC2lOC2tuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+IuC2ouC3j+C2vSDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiJTSU0g4La04LatIOC2seC3nOC2uOC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5ogU0lNIOC2tOC2rSDgtrHgt5zgtrjgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lat4LeU4La9IFNJTSDgtrTgtq3gtprgt4og4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJTSU0g4La04LatIOC2h+C2reC3lOC2veC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU0lNIOC2tOC2rSDgtrHgt5zgtrjgt5Dgtq0g4LeE4LedIOC2muC3kuC2uuC3gOC3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIFNJTSDgtrTgtq3gtprgt4og4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4i4La34LeP4LeA4LeS4Lat4LePIOC2muC3hSDgtrHgt5zgt4Tgt5Dgtprgt5IgU0lNIOC2tOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiLgtpTgtrbgtpzgt5ogU0lNIOC2tOC2rSDgt4Pgt4rgtq7gt5Lgtrvgt4Ag4LaF4La24La9IOC2muC2uyDgtofgtq0uXG4g4LeA4LeZ4Lax4Lat4LeKIFNJTSDgtrTgtq3gtprgt4og4LeD4Laz4LeE4LePIOC2lOC2tuC2nOC3miDgtrHgt5zgtrvgt5Dgt4Tgt5DgtrHgt4og4LeD4Lea4LeA4LePIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lac4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJTSU0g4La04LatIOC2heC2nOC3lOC3heC3lCDgtq/gtrjgt48g4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4iU0lNIOC2tOC2rSBQVUsg4LaF4Lac4LeU4LeF4LeUIOC2veC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTSU0g4La04LatIOC2heC2nOC3lOC3heC3lCDgt4Tgtrvgt5Lgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPCEtLSBTdHJpbmcuZm9ybWF0IGZhaWxlZCBmb3IgdHJhbnNsYXRpb24gLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCAoNTY3ODYyNDYyNDY4MTQwMDE5MSkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLgt4Dgt5LgtqLgtqfgtrog4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IuC3hOC3kuC3g+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4i4LaF4Lac4LeU4LeF4LeUIOC2heC2u+C3kuC2sSDgtrTgt4rigI3gtrvgtq/gt5rgt4Hgtrog4LeA4LeS4Lav4LeE4LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4LaxIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2uiDgt4Tgt5Dgtprgt5Lgtr3gt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOC3gOC3kuC2ouC2p+C3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC2reC3neC2u+C2seC3iuC2seC3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IuC2reC2reC3iuC3gOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IuC2muC3kOC2uOC2u+C3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiLgtrjgt4/gtrDgt4rigI3gtrog4La04LeP4La94LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLgt4Dgt5LgtqLgtqfgtrog4Lax4LeQ4LeA4LatIOC2heC2seC3lOC2tOC3kuC3heC3kuC3gOC3meC3heC2pyDgt4Pgt5Dgtprgt4Pgt5Lgtrgg4LaH4La74La54LeU4Lar4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IuC3gOC3kuC2ouC2p+C3iiDgtrHgt5Dgt4Dgtq0g4LaF4Lax4LeU4La04LeS4LeF4LeS4LeA4LeZ4La94LanIOC3g+C3kOC2muC3g+C3k+C2uCDgtoXgt4Dgt4Pgt4/gtrHgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5LgtqLgtqfgtrog4La44LeQ4Laa4LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLgtoXgtpzgt5Tgt4Xgt5Qg4Lax4Lec4Lav4LeQ4La44LeWIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2uiDgtrTgt5Tgt4Xgt5Tgtr3gt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IuC3g+C2u+C3iuC2tOC2qyDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i4La74Lan4LePIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiLgtrjgt5Tgt4Tgt5Tgtqsg4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2heC2n+C3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IlBJTiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IuC2uOC3lOC2u+C2tOC2ryDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IuC2u+C2p+C3jyDgtrTgt4rigI3gtrvgtq/gt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IuC3g+C2u+C3iuC2tOC2qyDgtrTgt4rigI3gtrvgtq/gt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiLgtrTgt5ngtrsg4Lac4LeT4LatIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MDczOTI4MzAwNDQ0OTA5MzIwIj4i4LaJ4Lav4LeS4La74LeSIOC2nOC3k+C2rSDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLgt4Dgt5Lgtrvgt4/gtrgg4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLgtrDgt4/gt4Dgtpog4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLgtrHgt5Dgt4Dgtq3gt5Pgtrjgt5og4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuC2heC3gOC2veC2guC2nOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLgtobgtprgt4/gtrvgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i4LaF4Laf4LeU4La9IOC2heC2u+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLgtprgt5Dgtrjgtrvgt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i4Lax4LeS4LeE4LasIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuC3geC2tuC3iuC2ryDgt4Pgtprgt4rigI3gtrvgt5Pgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgtovgtqngtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC2tOC3hOC2veC2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4LeA4La44LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4Lav4Laa4LeU4Lar4LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiLgtq/gt5DgtrHgtqcg4LeD4LeS4Lan4LeS4LaxIOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC3jyA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4La74Lan4LeP4LeAIOC2heC2uOC2reC2muC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i4LeA4LeQ4La74Lav4LeSIOC2u+C2p+C3j+C3gOC2muC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IuC3gOC3kOC2u+C2r+C3kiDgtrjgt5TgtrvgtrTgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIOC2keC2miDgt4Dgt5Dgtrvgtq/gt5Lgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+IuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LanIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IuC2lOC2tuC2nOC3miDgtrvgtqfgt4/gt4Ag4LaF4Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iU0lNIFBJTiDgtofgtq3gt5Tgtr3gt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJQSU4g4LaR4LaaIOC2h+C2reC3lOC3heC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i4La44LeU4La74La04Lav4La6IOC2h+C2reC3lOC3heC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiLgtq/gt5DgtrHgt4ogU0lNIOC2keC2miDgtoXgtrbgtr0g4Laa4La7IOC2h+C2rS4g4LaJ4Lav4LeS4La74LeS4La64LanIOC2uuC3j+C2uOC2pyBQVUsg4Laa4Lea4Lat4La6IOC2uuC3nOC2r+C2seC3iuC2sS4g4LeA4LeS4LeD4LeK4Lat4La7IOC3g+C2s+C3hOC3jyDgt4Dgt4/gt4Tgtprgtrrgt48g4LaF4La44Lat4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLgtoXgtrTgt5rgtprgt4rgt4Lgt5Lgtq0gUElOIOC2muC3muC2reC2uiDgtofgtq3gt5Tgt4Xgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuC2heC2tOC3muC2muC3iuC3guC3kuC2rSBQSU4g4Laa4Lea4Lat4La6IOC3g+C3iuC2ruC3kuC2uyDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDgtrTgtq0g4LaF4Lac4LeU4LeF4LeUIOC2heC2u+C3kuC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuC3gOC3kOC2u+C2r+C3kiBQSU4g4Laa4Lea4Lat4La64Laa4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuC2heC2guC2miA0IOC3g+C3kuC2pyA4IOC2heC2reC2uyDgt4DgtrEgUElOIOC2keC2muC2muC3iiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDgtprgt5rgtq3gtrog4LeD4LaC4Lab4LeK4oCN4La64LePIDgg4Laa4LeKIOC3hOC3nSDgt4Dgt5Dgtqngt5Ig4LeA4LeS4La6IOC2uuC3lOC2reC3lOC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLgtrHgt5Lgt4Dgt5Dgtrvgtq/gt5IgUFVLIOC2muC3muC2reC2uiDgtrHgt5Dgt4Dgtq0g4LaH4Lat4LeU4La94Lat4LeKIOC2muC2u+C2seC3iuC2sS4g4Lax4LeQ4LeA4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4LeS4La74LeT4La44LeZ4Lax4LeKIFNJTSDgtpHgtpog4LeD4LeK4Lau4LeS4La74LeA4La4IOC2heC2tuC2vSDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDgtprgt5rgtq0g4Lac4LeQ4La94La04LeTIOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuC2u+C2p+C3jyDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4LeS4La74LeT4La44LeKIOC3gOC3kOC2qeC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanLCDgtpTgtrbgtpzgt5ogR29vZ2xlIOC2nOC3kuC2q+C3lOC2uCDgt4Pgtrjgtpwg4La04LeU4La74Lax4La6IOC3gOC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgtrHgt4/gtrjgtrogKOC2ii3gtq3gt5DgtrTgt5Hgtr0pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLgtrjgt5TgtrvgtrTgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IuC2tOC3lOC2u+C2seC2uiDgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IuC3gOC2veC2guC2nOC3lCDgtrHgt5zgt4DgtrEg4La04La74LeS4LeB4LeT4La94LaaIOC2seC3j+C2uOC2uuC2muC3iiDgt4Tgt50g4La44LeU4La74La04Lav4La64Laa4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLgtpTgtrbgtpzgt5og4La04La74LeS4LeB4LeT4La94LaaIOC2seC3j+C2uOC2uiDgt4Tgt50g4La44LeU4La74La04Lav4La6IOC2heC2uOC2reC2muC2rz9cbiAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIg4LeA4LeZ4LatIOC2uuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLgtpzgt5Lgtqvgt5Tgtrgg4La04La74LeT4Laa4LeK4LeC4LePIOC2muC2u+C2uOC3kuC2seC3iuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4LaU4La2IFBJTiDgtoXgtoLgtprgtrogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4og4Laa4Lec4LanIOC2h+C2rS5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LaU4La24Lac4LeaIOC2uOC3lOC2u+C2tOC2r+C2uiDgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIOC2p+C2uuC3kuC2tOC3iiDgtprgtrsg4LaH4LatLiBcblxu4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2pyDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuC2lOC2tiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LeA4LeQ4La74Lav4LeS4La64LanIOC2h+C2syDgtofgtq0uIFxuXG7gtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2h+C2reC3lOC3heC2rSDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLgtpTgtrYg4Lan4LeQ4La24LeK4La94Lan4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LeA4LeQ4La74Lav4LeS4La64LanIOC2heC3gOC3g+C3iuC2ruC3jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgtprgt4og4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2uyDgtofgtq0uIOC2heC3gOC3g+C3iuC2ruC3jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaF4LeD4LeP4La74LeK4Lau4Laa4LeAIOC2i+C2reC3iuC3g+C3hCDgtprgt5Lgtrvgt5Pgtrjgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC2uOC3lOC2veC3iiDgtq3gtq3gt4rgt4Dgtrrgtqcg4Lax4LeQ4LeA4LatIOC2tOC2reC3iiDgt4DgtrEg4LaF4Lat4La7IOC3g+C3kuC2uuC2veC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IuC2lOC2tiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgt4Dgt4/gtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Laa4Lav4LeTIOC3gOC3kOC2u+C2r+C3kyDgtrTgt4rigI3gtrvgtrrgtq3gt4rgtrHgtrrgtrHgt4og4Lac4LeZ4LaxIOC2reC3kuC2tuC3mi4g4Lat4LeA4Lat4LeKIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtrTgt4rigI3gtrvgtrrgtq3gt4rgtrEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt4/gt4Dgt5og4LeD4LeU4La04LeU4La74LeU4Lav4LeK4Lav4LanIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrEg4LaF4Lat4La7IOC3g+C3kuC2uuC2veC3lOC2uCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4Dgt5Mg4La64La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4i4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LaU4La2IOC3gOC3kOC2u+C2r+C3kiDgtrTgt4rigI3gtrvgtrrgtq3gt4rgtrEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgtpzgt5ngtrEg4LaH4LatLiDgtq/gt5DgtrHgt4og4Lan4LeQ4La24LeK4La94Lan4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4LeD4LeU4La04LeU4La74LeU4Lav4LeK4LavIOC3gOC3meC2rSDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La4IOC2muC3meC2u+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiLgtpTgtrYg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LeA4LeP4La7IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgtprgtq/gt5Mg4LeA4LeQ4La74Lav4LeTIOC2tOC3iuKAjeC2u+C2uuC2seC3iuC2reC2uuC2seC3iiDgtpzgt5ngtrEg4Lat4LeS4La24LeaLiDgtq/gt5DgtrHgt4og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2reC3geC3j+C2veC3jyDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq/gtqcg4La04LeS4LeE4LeS4Lan4LeU4LeA4Lax4LeUIOC2veC2tuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4LaU4La2IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Lgtrjgt5og4La74Lan4LeP4LeAIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaH4LazIOC2h+C2rS4g4Lat4LeA4Lat4LeKIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtovgtq3gt4rgt4Pgt4/gt4QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtpzgt5Lgtqvgt5Tgtrgg4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2uOC3kuC2seC3iiDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LaU4La24LanIOC2tOC3gOC3g+C2seC3lCDgtofgtq0uXG5cbiDgtrHgt5Dgt4Dgtq0g4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4LaU4La2IOC3gOC3kOC2u+C2r+C3kuC2uuC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LaU4La24Lac4LeaIOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5og4La74Lan4LeP4LeAIOC2h+C2syDgtofgtq0uIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtovgtq3gt4rgt4Pgt4Qg4Laa4LeS4La74LeT4La44LeKIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2lOC2tuC2nOC3miDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2veC3kuC2tOC3kuC2seC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC2lOC2tuC2nOC3meC2seC3iiDgtoXgt4Pgtrrgt5IuXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Lax4LeKIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLgtongt4Dgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i4La04LeZ4La7IOC2nOC3k+C2rSDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLgtongtq/gt5Lgtrvgt5Ig4Lac4LeT4LatIOC2uuC2reC3lOC2uyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLgt4Dgt5Lgtrvgt4/gtrgg4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4i4Law4LeP4LeA4LaxIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+IuC2seC3kOC3gOC2reC3lOC2uOC3iiDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i4LeD4Lea4LeA4LeP4LeAIOC2seC3kOC2rS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDRjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTQwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCisqKgorKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTiDgtprgt5rgtq3gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyDgt4Pgt4Qg4Lax4LeAIFBJTiDgtprgt5rgtq3gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4Lax4LeAIFBJTiDgtprgt5rgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLgtrjgt5TgtrvgtrTgtq/gtrog4Lan4La64LeS4La04LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtrjgt5TgtrvgtrTgtq/gtrog4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcgUElOIOC2keC2miDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4LeA4LeQ4La74Lav4LeSIFBJTiDgtprgt5rgtq3gtrrgtprgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IuC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrjgtqcsIOC2uOC3meC2seC3lOC3gCDgtpTgtrbgt48g4La04LeD4LeU4LeAIDAg4LavIOC2lOC2tuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i4La44LeU4LeE4LeU4LarIOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtoXgtp/gt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LeaIOC2i+C2tOC2u+C3kuC2uCDgtrTgt4rigI3gtrvgtrrgtrHgt4rgtq3gtrrgtrHgt4og4Lac4Lar4LaxIOC2ieC2muC3iuC2uOC3gOC3jyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IuC2heC2u+C3neC2tOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4i4LaG4La74Led4La04Lar4La6IOC3gOC3meC2uOC3kuC2seC3iiwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IuC2lOC2tuC2nOC3miDgtobgtrvgt53gtrTgtprgtrrgtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+IuC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4La44LeZ4Lax4LeU4LeAIOC2lOC2tuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+IuC2ouC3j+C2vSDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiJTSU0g4La04LatIOC2seC3nOC2uOC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5ogU0lNIOC2tOC2rSDgtrHgt5zgtrjgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lat4LeU4La9IFNJTSDgtrTgtq3gtprgt4og4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJTSU0g4La04LatIOC2h+C2reC3lOC2veC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU0lNIOC2tOC2rSDgtrHgt5zgtrjgt5Dgtq0g4LeE4LedIOC2muC3kuC2uuC3gOC3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIFNJTSDgtrTgtq3gtprgt4og4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4i4La34LeP4LeA4LeS4Lat4LePIOC2muC3hSDgtrHgt5zgt4Tgt5Dgtprgt5IgU0lNIOC2tOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiLgtpTgtrbgtpzgt5ogU0lNIOC2tOC2rSDgt4Pgt4rgtq7gt5Lgtrvgt4Ag4LaF4La24La9IOC2muC2uyDgtofgtq0uXG4g4LeA4LeZ4Lax4Lat4LeKIFNJTSDgtrTgtq3gtprgt4og4LeD4Laz4LeE4LePIOC2lOC2tuC2nOC3miDgtrHgt5zgtrvgt5Dgt4Tgt5DgtrHgt4og4LeD4Lea4LeA4LePIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lac4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJTSU0g4La04LatIOC2heC2nOC3lOC3heC3lCDgtq/gtrjgt48g4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4iU0lNIOC2tOC2rSBQVUsg4LaF4Lac4LeU4LeF4LeUIOC2veC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTSU0g4La04LatIOC2heC2nOC3lOC3heC3lCDgt4Tgtrvgt5Lgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPCEtLSBTdHJpbmcuZm9ybWF0IGZhaWxlZCBmb3IgdHJhbnNsYXRpb24gLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCAoNTY3ODYyNDYyNDY4MTQwMDE5MSkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLgt4Dgt5LgtqLgtqfgtrog4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IuC3hOC3kuC3g+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4i4LaF4Lac4LeU4LeF4LeUIOC2heC2u+C3kuC2sSDgtrTgt4rigI3gtrvgtq/gt5rgt4Hgtrog4LeA4LeS4Lav4LeE4LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4LaxIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2uiDgt4Tgt5Dgtprgt5Lgtr3gt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOC3gOC3kuC2ouC2p+C3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC2reC3neC2u+C2seC3iuC2seC3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IuC2reC2reC3iuC3gOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IuC2muC3kOC2uOC2u+C3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiLgtrjgt4/gtrDgt4rigI3gtrog4La04LeP4La94LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLgt4Dgt5LgtqLgtqfgtrog4Lax4LeQ4LeA4LatIOC2heC2seC3lOC2tOC3kuC3heC3kuC3gOC3meC3heC2pyDgt4Pgt5Dgtprgt4Pgt5Lgtrgg4LaH4La74La54LeU4Lar4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IuC3gOC3kuC2ouC2p+C3iiDgtrHgt5Dgt4Dgtq0g4LaF4Lax4LeU4La04LeS4LeF4LeS4LeA4LeZ4La94LanIOC3g+C3kOC2muC3g+C3k+C2uCDgtoXgt4Dgt4Pgt4/gtrHgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5LgtqLgtqfgtrog4La44LeQ4Laa4LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLgtoXgtpzgt5Tgt4Xgt5Qg4Lax4Lec4Lav4LeQ4La44LeWIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2uiDgtrTgt5Tgt4Xgt5Tgtr3gt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IuC3g+C2u+C3iuC2tOC2qyDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i4La74Lan4LePIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiLgtrjgt5Tgt4Tgt5Tgtqsg4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2heC2n+C3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IlBJTiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IuC2uOC3lOC2u+C2tOC2ryDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IuC2u+C2p+C3jyDgtrTgt4rigI3gtrvgtq/gt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IuC3g+C2u+C3iuC2tOC2qyDgtrTgt4rigI3gtrvgtq/gt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiLgtrTgt5ngtrsg4Lac4LeT4LatIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MDczOTI4MzAwNDQ0OTA5MzIwIj4i4LaJ4Lav4LeS4La74LeSIOC2nOC3k+C2rSDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLgt4Dgt5Lgtrvgt4/gtrgg4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLgtrDgt4/gt4Dgtpog4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLgtrHgt5Dgt4Dgtq3gt5Pgtrjgt5og4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuC2heC3gOC2veC2guC2nOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLgtobgtprgt4/gtrvgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i4LaF4Laf4LeU4La9IOC2heC2u+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLgtprgt5Dgtrjgtrvgt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i4Lax4LeS4LeE4LasIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuC3geC2tuC3iuC2ryDgt4Pgtprgt4rigI3gtrvgt5Pgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgtovgtqngtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC2tOC3hOC2veC2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4LeA4La44LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4Lav4Laa4LeU4Lar4LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiLgtq/gt5DgtrHgtqcg4LeD4LeS4Lan4LeS4LaxIOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC3jyA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4La74Lan4LeP4LeAIOC2heC2uOC2reC2muC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i4LeA4LeQ4La74Lav4LeSIOC2u+C2p+C3j+C3gOC2muC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IuC3gOC3kOC2u+C2r+C3kiDgtrjgt5TgtrvgtrTgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIOC2keC2miDgt4Dgt5Dgtrvgtq/gt5Lgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+IuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LanIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IuC2lOC2tuC2nOC3miDgtrvgtqfgt4/gt4Ag4LaF4Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iU0lNIFBJTiDgtofgtq3gt5Tgtr3gt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJQSU4g4LaR4LaaIOC2h+C2reC3lOC3heC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i4La44LeU4La74La04Lav4La6IOC2h+C2reC3lOC3heC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiLgtq/gt5DgtrHgt4ogU0lNIOC2keC2miDgtoXgtrbgtr0g4Laa4La7IOC2h+C2rS4g4LaJ4Lav4LeS4La74LeS4La64LanIOC2uuC3j+C2uOC2pyBQVUsg4Laa4Lea4Lat4La6IOC2uuC3nOC2r+C2seC3iuC2sS4g4LeA4LeS4LeD4LeK4Lat4La7IOC3g+C2s+C3hOC3jyDgt4Dgt4/gt4Tgtprgtrrgt48g4LaF4La44Lat4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLgtoXgtrTgt5rgtprgt4rgt4Lgt5Lgtq0gUElOIOC2muC3muC2reC2uiDgtofgtq3gt5Tgt4Xgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuC2heC2tOC3muC2muC3iuC3guC3kuC2rSBQSU4g4Laa4Lea4Lat4La6IOC3g+C3iuC2ruC3kuC2uyDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDgtrTgtq0g4LaF4Lac4LeU4LeF4LeUIOC2heC2u+C3kuC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuC3gOC3kOC2u+C2r+C3kiBQSU4g4Laa4Lea4Lat4La64Laa4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuC2heC2guC2miA0IOC3g+C3kuC2pyA4IOC2heC2reC2uyDgt4DgtrEgUElOIOC2keC2muC2muC3iiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDgtprgt5rgtq3gtrog4LeD4LaC4Lab4LeK4oCN4La64LePIDgg4Laa4LeKIOC3hOC3nSDgt4Dgt5Dgtqngt5Ig4LeA4LeS4La6IOC2uuC3lOC2reC3lOC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLgtrHgt5Lgt4Dgt5Dgtrvgtq/gt5IgUFVLIOC2muC3muC2reC2uiDgtrHgt5Dgt4Dgtq0g4LaH4Lat4LeU4La94Lat4LeKIOC2muC2u+C2seC3iuC2sS4g4Lax4LeQ4LeA4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4LeS4La74LeT4La44LeZ4Lax4LeKIFNJTSDgtpHgtpog4LeD4LeK4Lau4LeS4La74LeA4La4IOC2heC2tuC2vSDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDgtprgt5rgtq0g4Lac4LeQ4La94La04LeTIOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuC2u+C2p+C3jyDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4LeS4La74LeT4La44LeKIOC3gOC3kOC2qeC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanLCDgtpTgtrbgtpzgt5ogR29vZ2xlIOC2nOC3kuC2q+C3lOC2uCDgt4Pgtrjgtpwg4La04LeU4La74Lax4La6IOC3gOC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgtrHgt4/gtrjgtrogKOC2ii3gtq3gt5DgtrTgt5Hgtr0pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLgtrjgt5TgtrvgtrTgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IuC2tOC3lOC2u+C2seC2uiDgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IuC3gOC2veC2guC2nOC3lCDgtrHgt5zgt4DgtrEg4La04La74LeS4LeB4LeT4La94LaaIOC2seC3j+C2uOC2uuC2muC3iiDgt4Tgt50g4La44LeU4La74La04Lav4La64Laa4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLgtpTgtrbgtpzgt5og4La04La74LeS4LeB4LeT4La94LaaIOC2seC3j+C2uOC2uiDgt4Tgt50g4La44LeU4La74La04Lav4La6IOC2heC2uOC2reC2muC2rz9cbiAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIg4LeA4LeZ4LatIOC2uuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLgtpzgt5Lgtqvgt5Tgtrgg4La04La74LeT4Laa4LeK4LeC4LePIOC2muC2u+C2uOC3kuC2seC3iuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4LaU4La2IFBJTiDgtoXgtoLgtprgtrogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4og4Laa4Lec4LanIOC2h+C2rS5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LaU4La24Lac4LeaIOC2uOC3lOC2u+C2tOC2r+C2uiDgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIOC2p+C2uuC3kuC2tOC3iiDgtprgtrsg4LaH4LatLiBcblxu4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2pyDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuC2lOC2tiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LeA4LeQ4La74Lav4LeS4La64LanIOC2h+C2syDgtofgtq0uIFxuXG7gtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2h+C2reC3lOC3heC2rSDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLgtpTgtrYg4Lan4LeQ4La24LeK4La94Lan4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LeA4LeQ4La74Lav4LeS4La64LanIOC2heC3gOC3g+C3iuC2ruC3jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgtprgt4og4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2uyDgtofgtq0uIOC2heC3gOC3g+C3iuC2ruC3jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaF4LeD4LeP4La74LeK4Lau4Laa4LeAIOC2i+C2reC3iuC3g+C3hCDgtprgt5Lgtrvgt5Pgtrjgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC2uOC3lOC2veC3iiDgtq3gtq3gt4rgt4Dgtrrgtqcg4Lax4LeQ4LeA4LatIOC2tOC2reC3iiDgt4DgtrEg4LaF4Lat4La7IOC3g+C3kuC2uuC2veC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IuC2lOC2tiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgt4Dgt4/gtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Laa4Lav4LeTIOC3gOC3kOC2u+C2r+C3kyDgtrTgt4rigI3gtrvgtrrgtq3gt4rgtrHgtrrgtrHgt4og4Lac4LeZ4LaxIOC2reC3kuC2tuC3mi4g4Lat4LeA4Lat4LeKIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtrTgt4rigI3gtrvgtrrgtq3gt4rgtrEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt4/gt4Dgt5og4LeD4LeU4La04LeU4La74LeU4Lav4LeK4Lav4LanIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrEg4LaF4Lat4La7IOC3g+C3kuC2uuC2veC3lOC2uCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4Dgt5Mg4La64La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4i4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LaU4La2IOC3gOC3kOC2u+C2r+C3kiDgtrTgt4rigI3gtrvgtrrgtq3gt4rgtrEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgtpzgt5ngtrEg4LaH4LatLiDgtq/gt5DgtrHgt4og4Lan4LeQ4La24LeK4La94Lan4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4LeD4LeU4La04LeU4La74LeU4Lav4LeK4LavIOC3gOC3meC2rSDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La4IOC2muC3meC2u+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiLgtpTgtrYg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LeA4LeP4La7IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgtprgtq/gt5Mg4LeA4LeQ4La74Lav4LeTIOC2tOC3iuKAjeC2u+C2uuC2seC3iuC2reC2uuC2seC3iiDgtpzgt5ngtrEg4Lat4LeS4La24LeaLiDgtq/gt5DgtrHgt4og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2reC3geC3j+C2veC3jyDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq/gtqcg4La04LeS4LeE4LeS4Lan4LeU4LeA4Lax4LeUIOC2veC2tuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4LaU4La2IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Lgtrjgt5og4La74Lan4LeP4LeAIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaH4LazIOC2h+C2rS4g4Lat4LeA4Lat4LeKIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtovgtq3gt4rgt4Pgt4/gt4QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtpzgt5Lgtqvgt5Tgtrgg4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2uOC3kuC2seC3iiDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LaU4La24LanIOC2tOC3gOC3g+C2seC3lCDgtofgtq0uXG5cbiDgtrHgt5Dgt4Dgtq0g4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4LaU4La2IOC3gOC3kOC2u+C2r+C3kuC2uuC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LaU4La24Lac4LeaIOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5og4La74Lan4LeP4LeAIOC2h+C2syDgtofgtq0uIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtovgtq3gt4rgt4Pgt4Qg4Laa4LeS4La74LeT4La44LeKIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2lOC2tuC2nOC3miDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2veC3kuC2tOC3kuC2seC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC2lOC2tuC2nOC3meC2seC3iiDgtoXgt4Pgtrrgt5IuXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Lax4LeKIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLgtongt4Dgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i4La04LeZ4La7IOC2nOC3k+C2rSDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLgtongtq/gt5Lgtrvgt5Ig4Lac4LeT4LatIOC2uuC2reC3lOC2uyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLgt4Dgt5Lgtrvgt4/gtrgg4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4i4Law4LeP4LeA4LaxIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+IuC2seC3kOC3gOC2reC3lOC2uOC3iiDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i4LeD4Lea4LeA4LeP4LeAIOC2seC3kOC2rS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCmluZGV4IDRiMmUxZTMuLmNkZjhjYTkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iWmFkYWp0ZSBrw7NkIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlphZGFqdGUga8OzZCBQVUsgYSBub3bDvSBrw7NkIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iS8OzZCBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5vdsO9IGvDs2QgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iWmFkYWp0ZSBrw7NkIFBVSyBrYXJ0eSBTSU0gYSBub3bDvSBrw7NkIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iS8OzZCBQVUsga2FydHkgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJOb3bDvSBrw7NkIFBJTiBrYXJ0eSBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJEb3RrbnV0w61tIHphZGFqdGUgaGVzbG8iPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJaYWRhanRlIGhlc2xvIG5hIG9kb21rbnV0aWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJaYWRhanRlIGvDs2QgUElOIG5hIG9kb21rbnV0aWUiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iVGxhxI1pZGxvIFBvemFzdGF2acWlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJUbGHEjWlkbG8gUHJlaHJhxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IlRsYcSNaWRsbyBaYXN0YXZpxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iUMOhxI1pIHNhIG1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iTmVww6HEjWkgc2EgbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJTcmRjZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+Ik9kb21rbml0ZSB6YXJpYWRlbmllIGEgcG9rcmHEjXVqdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJTcHVzdGVuaWUgYm9sbyB6cnXFoWVuw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iVXZvxL5uZW7DrW0gZG90eWt1IG1pbmlhcGxpa8OhY2l1IDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG9kc3Ryw6FuaXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiJNaW5pYXBsaWvDoWNpYSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBuZWJ1ZGUgb2RzdHLDoW5lbsOhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iWmFkYWp0ZSBwb8W+YWRvdmFuw70ga8OzZCBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iUG90dnLEj3RlIHBvxb5hZG92YW7DvSBrw7NkIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iUHJlYmllaGEgb2RvbXlrYW5pZSBrYXJ0eSBTSU0uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJOZXNwcsOhdm55IGvDs2QgUElOLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlphZGFqdGUga8OzZCBQSU4gcyBkxLrFvmtvdSA0IGHFviA4IMSNw61zbGljLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IkvDs2QgUFVLIG11c8OtIG9ic2Fob3ZhxaUgOCBhbGVibyB2aWFjIMSNw61zbGljLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Ilpub3ZhIHphZGFqdGUgc3Byw6F2bnkga8OzZCBQVUsuIE9wYWtvdmFuw6kgcG9rdXN5IHpha8Ohxb51IGthcnR1IFNJTSBuYXRydmFsby4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LWtyw6F0IHN0ZSBuZXNwcsOhdm5lIG5ha3Jlc2xpbGkgc3ZvaiBiZXpwZcSNbm9zdG7DvSB2em9yLiBQbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDEj2FsxaHDrWNoIG5lw7pzcGXFoW7DvWNoIHBva3Vzb2NoIHNhIHpvYnJhesOtIHbDvXp2YSBuYSBvZG9ta251dGllIHRlbGVmw7NudSBwb21vY291IGUtbWFpbG92w6lobyDDusSNdHUuXG5cbiBTa8O6c3RlIHRvIHpub3ZhIG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJPZHN0csOhbmnFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iTmVzcHLDoXZueSBrw7NkIFBJTiBrYXJ0eSBTSU0uIFRlcmF6IG11c8OtdGUga29udGFrdG92YcWlIHN2b2pobyBvcGVyw6F0b3JhLCBhYnkgdsOhbSBvZG9ta29sIHphcmlhZGVuaWUuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJOZXNwcsOhdm55IGvDs2QgUElOIGthcnR5IFNJTS4gWm9zdMOhdmEgdsOhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9rdXMsIGluYWsgYnVkZXRlIG11c2llxaUga29udGFrdG92YcWlIHN2b2pobyBvcGVyw6F0b3JhLCBhYnkgdsOhbSBvZG9ta29sIHphcmlhZGVuaWUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iTmVzcHLDoXZueSBrw7NkIFBJTiBrYXJ0eSBTSU0uIFBvxI1ldCB6b3N0w6F2YWrDumNpY2ggcG9rdXNvdjogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iS2FydGEgU0lNIGplIG5lcG91xb5pdGXEvm7DoS4gS29udGFrdHVqdGUgc3ZvamhvIG9wZXLDoXRvcmEuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJOZXNwcsOhdm55IGvDs2QgUFVLIGthcnR5IFNJTS4gWm9zdMOhdmEgdsOhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9rdXMsIGluYWsgc2EgdmHFoWEga2FydGEgU0lNIG5hdHJ2YWxvIHphYmxva3VqZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJOZXNwcsOhdm55IGvDs2QgUFVLIGthcnR5IFNJTS4gUG/EjWV0IHpvc3TDoXZhasO6Y2ljaCBwb2t1c292IHByZWQgdHJ2YWzDvW0gemFibG9rb3ZhbsOtbSBrYXJ0eSBTSU06IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+Ik9wZXLDoWNpYSBrw7NkdSBQSU4ga2FydHkgU0lNIHpseWhhbGEhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJPcGVyw6FjaWEga8OzZHUgUFVLIGthcnR5IFNJTSB6bHloYWxhISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJLw7NkIGJvbCBwcmlqYXTDvSEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJUbGHEjWlkbG8gUHJlZGNow6FkemFqw7pjYSBzdG9wYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IlRsYcSNaWRsbyDEjmFsxaFpYSBzdG9wYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJUbGHEjWlkbG8gUG96YXN0YXZpxaUiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbAppbmRleCBiNmNmYzFjLi5iMGVjODRlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlZuZXNpdGUga29kbyBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJWbmVzaXRlIGtvZG8gUFVLIGluIG5vdm8ga29kbyBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IktvZGEgUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJOb3ZhIGtvZGEgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iVm5lc2l0ZSBrb2RvIFBVSyBpbiBub3ZvIGtvZG8gUElOIGthcnRpY2UgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJLb2RhIFBVSyBrYXJ0aWNlIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTm92YSBrb2RhIFBJTiBrYXJ0aWNlIFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IkRvdGFrbml0ZSBzZSB6YSB2bm9zIGdlc2xhIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iVm5lc2l0ZSBnZXNsbyB6YSBvZGtsZXBhbmplIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iVm5lc2l0ZSBQSU4gemEgb2RrbGVwYW5qZSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJHdW1iIHphIHphxI1hc25vIHVzdGF2aXRldiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iR3VtYiB6YSBwcmVkdmFqYW5qZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iR3VtYiB6YSB1c3Rhdml0ZXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iVsWhZcSNIG1pIGplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iTmkgbWkgdsWhZcSNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iU3JjZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IlphIG5hZGFsamV2YW5qZSBvZGtsZW5pdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJaYWdvbiBqZSBwcmVrbGljYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iSXpwdXN0aXRlIHByaXBvbW/EjWVrIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LCBkYSBnYSBpemJyacWhZXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiJQcmlwb21vxI1layA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBuZSBibyBpemJyaXNhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IlZuZXNpdGUgxb5lbGVubyBrb2RvIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJQb3RyZGl0ZSDFvmVsZW5vIGtvZG8gUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJPZGtsZXBhbmplIGthcnRpY2UgU0lNIC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Ik5hcGHEjW5hIGtvZGEgUElOLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlZuZXNpdGUgUElOLCBraSB2c2VidWplIG9kIMWhdGlyaSBkbyBvc2VtIMWhdGV2aWxrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IktvZGEgUFVLIG1vcmEgdnNlYm92YXRpIDggYWxpIHZlxI0gxaF0ZXZrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlZub3ZpxI0gdm5lc2l0ZSBwcmF2aWxubyBrb2RvIFBVSy4gVmXEjWtyYXRuaSBwb3NrdXNpIGJvZG8gdHJham5vIG9uZW1vZ2/EjWlsaSBrYXJ0aWNvIFNJTS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlZ6b3JlYyB6YSBvZGtsZXBhbmplIHN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcmF0IG5hcGHEjW5vIHZuZXNsaS4gUG8gbmFkYWxqbmppaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBuZXVzcGXFoW5paCBwb3NrdXNpaCBib3N0ZSBwb3p2YW5pLCBkYSBvZGtsZW5ldGUgdGVsZWZvbiB6IEdvb2dsb3ZpbWkgcG9kYXRraSB6YSBwcmlqYXZvLlxuXG5Qb3NrdXNpdGUgem5vdmEgxI1leiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAkyAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+Ik9kc3RyYW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJOYXBhxI1uYSBrb2RhIFBJTiBrYXJ0aWNlIFNJTS4gWmRhaiBzZSBib3N0ZSBtb3JhbGkgemEgb2RrbGVuaXRldiBuYXByYXZlIG9icm5pdGkgbmEgb3BlcmF0ZXJqYS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+Ik5hcGHEjW5hIGtvZGEgUElOIGthcnRpY2UgU0lNLiBOYSB2b2xqbyBpbWF0ZSDFoWUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBvc2t1cy4gUG90ZW0gc2UgYm9zdGUgbW9yYWxpIHphIG9ka2xlbml0ZXYgbmFwcmF2ZSBvYnJuaXRpIG5hIG9wZXJhdGVyamEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iTmFwYcSNbmEga29kYSBQSU4ga2FydGljZSBTSU0uIFBvc2t1c2l0ZSBsYWhrbyDFoWUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LWtyYXQuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJLYXJ0aWNhIFNJTSBuaSB2ZcSNIHVwb3JhYm5hLiBPYnJuaXRlIHNlIG5hIG9wZXJhdGVyamEuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJOYXBhxI1uYSBrb2RhIFBVSyBrYXJ0aWNlIFNJTS4gTmEgdm9sam8gaW1hdGUgxaFlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb3NrdXMuIFBvdGVtIGJvIGthcnRpY2EgU0lNIHBvc3RhbGEgdHJham5vIG5ldXBvcmFibmEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iTmFwYcSNbmEga29kYSBQVUsga2FydGljZSBTSU0uIFBvc2t1c2l0ZSBsYWhrbyDFoWUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LWtyYXQuIFBvdGVtIGJvIGthcnRpY2EgU0lNIHBvc3RhbGEgdHJham5vIG5ldXBvcmFibmEuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJQb3N0b3BlayB6YSBvZGtsZXBhbmplIHMga29kbyBQSU4ga2FydGljZSBTSU0gbmkgdXNwZWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJQb3N0b3BlayB6YSBvZGtsZXBhbmplIHMga29kbyBQVUsga2FydGljZSBTSU0gbmkgdXNwZWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IktvZGEgamUgc3ByZWpldGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iR3VtYiB6YSBwcmVqxaFuam8gc2tsYWRibyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Ikd1bWIgemEgbmFzbGVkbmpvIHNrbGFkYm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iR3VtYiB6YSB6YcSNYXNubyB1c3Rhdml0ZXYiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbAppbmRleCA2NjRiODVlLi4yYmRkOGY1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+ItCj0L3QtdGB0LjRgtC1IFBJTiDQusO00LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLQo9C90LXRgdC40YLQtSBQVUsg0Lgg0L3QvtCy0LggUElOINC6w7TQtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLINC6w7TQtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i0J3QvtCy0LggUElOINC6w7TQtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+ItCj0L3QtdGB0LjRgtC1IFNJTSBQVUsg0LrDtNC0INC4INC90L7QstC4IFBJTiDQusO00LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSBQVUsg0LrDtNC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLQndC+0LLQuCBTSU0gUElOINC6w7TQtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+ItCU0L7QtNC40YDQvdC40YLQtSDQtNCwINCx0LjRgdGC0LUg0YPQvdC10LvQuCDQu9C+0LfQuNC90LrRgyI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+ItCe0YLQutGD0YbQsNGY0YLQtSDQu9C+0LfQuNC90LrRgyDQtNCwINCx0LjRgdGC0LUg0L7RgtC60ZnRg9GH0LDQu9C4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i0KPQvdC10YHQuNGC0LUgUElOINC30LAg0L7RgtC60ZnRg9GH0LDQstCw0ZrQtSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLQlNGD0LPQvNC1INC30LAg0L/QsNGD0LfRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i0JTRg9Cz0LzQtSDQt9CwINGA0LXQv9GA0L7QtNGD0LrRhtC40ZjRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i0JTRg9Cz0LzQtSDQt9CwINC30LDRg9GB0YLQsNCy0ZnQsNGa0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i0KHQstC40ZLQsCDQvNC4INGB0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLQndC1INGB0LLQuNGS0LAg0LzQuCDRgdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4i0KHRgNGG0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLQntGC0LrRmdGD0YfQsNGY0YLQtSDQtNCwINCx0LjRgdGC0LUg0L3QsNGB0YLQsNCy0LjQu9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i0J/QvtC60YDQtdGC0LDRmtC1INGY0LUg0L7RgtC60LDQt9Cw0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLQntGC0L/Rg9GB0YLQuNGC0LUg0LLQuNGf0LXRgiA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDQtNCwINCx0LjRgdGC0LUg0LPQsCDQuNC30LHRgNC40YHQsNC70LguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+ItCS0LjRn9C10YIgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g0L3QtdGb0LUg0LHQuNGC0Lgg0LjQt9Cx0YDQuNGB0LDQvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+ItCj0L3QtdGB0LjRgtC1INC20LXRmdC10L3QuCBQSU4g0LrDtNC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+ItCf0L7RgtCy0YDQtNC40YLQtSDQttC10ZnQtdC90LggUElOINC6w7TQtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4i0J7RgtC60ZnRg9GH0LDQstCw0ZrQtSBTSU0g0LrQsNGA0YLQuNGG0LXigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJQSU4g0LrDtNC0INGY0LUg0L3QtdGC0LDRh9Cw0L0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i0KPQvdC10YHQuNGC0LUgUElOINC60L7RmNC4INC40LzQsCDQvtC0IDQg0LTQviA4INCx0YDQvtGY0LXQstCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDQusO00LQg0YLRgNC10LHQsCDQtNCwINC40LzQsCA4INC40LvQuCDQstC40YjQtSDQsdGA0L7RmNC10LLQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLQn9C+0L3QvtCy0L4g0YPQvdC10YHQuNGC0LUg0LjRgdC/0YDQsNCy0L3QuCBQVUsg0LrDtNC0LiDQn9C+0L3QvtCy0ZnQtdC90Lgg0L/QvtC60YPRiNCw0ZjQuCDRm9C1INGC0YDQsNGY0L3QviDQvtC90LXQvNC+0LPRg9Gb0LjRgtC4IFNJTS4iPC9zdHJpbmc+CkBAIC0xMjksMTAgKzEzNSwyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLQndCw0YbRgNGC0LDQu9C4INGB0YLQtSDRiNCw0LHQu9C+0L0g0LfQsCDQvtGC0LrRmdGD0YfQsNCy0LDRmtC1INC90LXQuNGB0L/RgNCw0LLQvdC+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0YPRgtCwLiDQn9C+0YHQu9C1INGY0L7RiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQvdC10YPRgdC/0LXRiNC90LAo0LjRhSkg0L/QvtC60YPRiNCw0ZjQsCwg0L7QtCDQstCw0YEg0ZvQtSDQsdC40YLQuCDQt9Cw0YLRgNCw0LbQtdC90L4g0LTQsCDQvtGC0LrRmdGD0YfQsNGC0LUg0YLQtdC70LXRhNC+0L0g0L/QvtC80L7Rm9GDINC90LDQu9C+0LPQsCDQtS3Qv9C+0YjRgtC1LlxuXG7Qn9C+0LrRg9GI0LDRmNGC0LUg0L/QvtC90L7QstC+INC30LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LUo0LgpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAkyAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+ItCj0LrQu9C+0L3QuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i0J3QtdGC0LDRh9Cw0L0gU0lNIFBJTiDQusO00LQuINCh0LDQtNCwINC80L7RgNCw0YLQtSDQtNCwINC60L7QvdGC0LDQutGC0LjRgNCw0YLQtSDQvNC+0LHQuNC70L3QvtCzINC+0L/QtdGA0LDRgtC10YDQsCDQtNCwINCx0LjRgdGC0LUg0L7RgtC60ZnRg9GH0LDQu9C4INGD0YDQtdGS0LDRmC4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+ItCd0LXRgtCw0YfQsNC9IFNJTSBQSU4g0LrDtNC0LiDQmNC80LDRgtC1INGY0L7RiCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/QvtC60YPRiNCw0ZgsINCwINC+0L3QtNCwINC80L7RgNCw0YLQtSDQtNCwINC60L7QvdGC0LDQutGC0LjRgNCw0YLQtSDQvNC+0LHQuNC70L3QvtCzINC+0L/QtdGA0LDRgtC10YDQsCDQtNCwINCx0LjRgdGC0LUg0L7RgtC60ZnRg9GH0LDQu9C4INGD0YDQtdGS0LDRmC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiLQndC10YLQsNGH0LDQvSBTSU0gUElOINC6w7TQtC4g0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC/0L7QutGD0YjQsNGY0LAuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0g0LrQsNGA0YLQuNGG0LAg0ZjQtSDQvdC10YPQv9C+0YLRgNC10LHRmdC40LLQsC4g0JrQvtC90YLQsNC60YLQuNGA0LDRmNGC0LUg0LzQvtCx0LjQu9C90L7QsyDQvtC/0LXRgNCw0YLQtdGA0LAuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLQndC10YLQsNGH0LDQvSBTSU0gUFVLINC6w7TQtC4g0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC/0L7QutGD0YjQsNGYINC/0YDQtSDQvdC10LPQviDRiNGC0L4gU0lNINC60LDRgNGC0LjRhtCwINC/0L7RgdGC0LDQvdC1INGC0YDQsNGY0L3QviDQvdC10YPQv9C+0YLRgNC10LHRmdC40LLQsC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiLQndC10YLQsNGH0LDQvSBTSU0gUFVLINC6w7TQtC4g0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC/0L7QutGD0YjQsNGY0LAg0L/RgNC1INC90LXQs9C+INGI0YLQviBTSU0g0LrQsNGA0YLQuNGG0LAg0L/QvtGB0YLQsNC90LUg0YLRgNCw0ZjQvdC+INC90LXRg9C/0L7RgtGA0LXQsdGZ0LjQstCwLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4i0KDQsNC00ZrQsCDRgdCwIFNJTSBQSU4g0LrQvtC00L7QvCDQvdC40ZjQtSDRg9GB0L/QtdC70LAhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiLQoNCw0LTRmtCwINGB0LAgU0lNIFBVSyDQutC+0LTQvtC8INC90LjRmNC1INGD0YHQv9C10LvQsCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i0JrDtNC0INGY0LUg0L/RgNC40YXQstCw0ZvQtdC9ISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+ItCU0YPQs9C80LUg0LfQsCDQv9GA0LXRgtGF0L7QtNC90YMg0L/QtdGB0LzRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+ItCU0YPQs9C80LUg0LfQsCDRgdC70LXQtNC10ZvRgyDQv9C10YHQvNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+ItCU0YPQs9C80LUg0LfQsCDQv9Cw0YPQt9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4i0JTRg9Cz0LzQtSDQt9CwINGA0LXQv9GA0L7QtNGD0LrRhtC40ZjRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+ItCU0YPQs9C80LUg0LfQsCDQt9Cw0YPRgdGC0LDQstGZ0LDRmtC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+ItCS0LDQvSDQvNGA0LXQttC1INGB0YLQtS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i0J7RhNC70LDRmNC9INGB0YLQtS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCmluZGV4IGZiMGY5MTIuLmU0NDZmNjEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iQW5nZSBQSU4ta29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iQW5nZSBQVUsta29kZW4gb2NoIGVuIG55IFBJTi1rb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSy1rb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik55IFBJTi1rb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJBbmdlIFBVSy1rb2RlbiBvY2ggZW4gbnkgcGlua29kIGbDtnIgU0lNLWtvcnRldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iUFVLLWtvZCBmw7ZyIFNJTS1rb3J0ZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik55IHBpbmtvZCBmw7ZyIFNJTS1rb3J0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iVHJ5Y2sgb20gZHUgdmlsbCBhbmdlIGzDtnNlbm9yZCI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IkFuZ2UgbMO2c2Vub3JkIGbDtnIgYXR0IGzDpXNhIHVwcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IkFuZ2UgUElOLWtvZCBmw7ZyIGF0dCBsw6VzYSB1cHAiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iUGF1c2tuYXBwZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IlVwcHNwZWxuaW5nc2tuYXBwZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IlN0b3Bwa25hcHBlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJHaWxsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJUdW1tZW4gbmVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iSGrDpHJ0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkzDpXMgdXBwIG9tIGR1IHZpbGwgZm9ydHPDpHR0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkxhbnNlcmluZ2VuIGhhciBhdmJydXRpdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iVGEgYm9ydCBnZW5vbSBhdHQgc2zDpHBwYSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBow6RyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBrb21tZXIgaW50ZSBhdHQgdGFzIGJvcnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJBbmdlIMO2bnNrYWQgUElOLWtvZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJCZWtyw6RmdGEgw7Zuc2thZCBQSU4ta29kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJMw6VzZXIgdXBwIFNJTS1rb3J0IOKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkZlbCBQSU4ta29kLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IkFuZ2UgZW4gUElOLWtvZCBtZWQgNCB0aWxsIDggc2lmZnJvci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsta29kZW4gc2thIHZhcmEgbWluc3Qgw6V0dGEgc2lmZnJvci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJBbmdlIHLDpHR0IFBVSy1rb2QgaWdlbi4gT20gZsO2cnPDtmtlbiB1cHByZXBhcyBpbmFrdGl2ZXJhcyBTSU0ta29ydGV0IHBlcm1hbmVudC4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkR1IGhhciByaXRhdCBkaXR0IGdyYWZpc2thIGzDtnNlbm9yZCBmZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ8Olbmdlci4gRWZ0ZXIgeXR0ZXJsaWdhcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZsO2cnPDtmsgb21iZWRzIGR1IGzDpXNhIHVwcCBtb2JpbGVuIG1lZCBoasOkbHAgYXYgZXR0IGUtcG9zdGtvbnRvLlxuXG4gRsO2cnPDtmsgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJUYSBib3J0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJEdSBhbmdhdiBmZWwgcGlua29kIGbDtnIgU0lNLWtvcnRldCBvY2ggbcOlc3RlIG51IGtvbnRha3RhIG9wZXJhdMO2cmVuIGbDtnIgYXR0IGzDpXNhIHVwcCBlbmhldGVuLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iRHUgYW5nYXYgZmVsIHBpbmtvZCBmw7ZyIFNJTS1rb3J0ZXQuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmw7Zyc8O2ayDDpXRlcnN0w6VyIGlubmFuIGR1IG3DpXN0ZSBrb250YWt0YSBvcGVyYXTDtnJlbiBmw7ZyIGF0dCBsw6VzYSB1cHAgZW5oZXRlbi4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJEdSBhbmdhdiBmZWwgcGlua29kIGbDtnIgU0lNLWtvcnRldC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGbDtnJzw7ZrIMOldGVyc3TDpXIuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0ta29ydGV0IMOkciBvYnJ1a2JhcnQuIEtvbnRha3RhIG9wZXJhdMO2cmVuLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iRHUgYW5nYXYgZmVsIFBVSy1rb2QgZsO2ciBTSU0ta29ydGV0LiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZsO2cnPDtmsgw6V0ZXJzdMOlciBpbm5hbiBTSU0ta29ydGV0IGJsaXIgb2JydWtiYXJ0LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkR1IGFuZ2F2IGZlbCBQVUsta29kIGbDtnIgU0lNLWtvcnRldC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGbDtnJzw7ZrIMOldGVyc3TDpXIgaW5uYW4gU0lNLWtvcnRldCBibGlyIG9icnVrYmFydC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IkRldCBnaWNrIGludGUgYXR0IGzDpXNhIHVwcCBtZWQgcGlua29kZW4gZsO2ciBTSU0ta29ydGV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iRGV0IGdpY2sgaW50ZSBhdHQgbMOlc2EgdXBwIG1lZCBQVUsta29kZW4gZsO2ciBTSU0ta29ydGV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJLb2RlbiBnb2Rrw6RuZGVzISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IktuYXBwIGbDtnIgZsO2cmVnw6VlbmRlIHNww6VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iS25hcHAgZsO2ciBuw6RzdGEgc3DDpXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iUGF1c2tuYXBwZW4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAppbmRleCAyN2YxZjMwLi5jN2FiZDk4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkluZ2l6YSBtc2ltYm8gd2EgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iSW5naXphIFBVSyBuYSBtc2ltYm8gbXB5YSB3YSBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+Ik1zaW1ibyB3YSBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik1zaW1ibyBtcHlhIHdhIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IkNoYXBhIFBVSyB5YcKgU0lNIG5hIG1zaW1ibyBtcHlhIHdhIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iTXNpbWJvIHdhIFBVSyB5YSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik1zaW1ibyBtcHlhIHdhIFBJTiB5YSBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJHdXNhIGt1aW5naXphIG5lbm9zaXJpICI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IkNoYXJhemEgbmVub3NpcmkgaWxpIGt1ZnVuZ3VhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iSW5naXphIFBJTiBpbGkga3VmdW5ndWEiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iS2l0dWZlIGNoYSBrdXNpdGlzaGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IktpdHVmZSBjaGEga3VjaGV6YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iS2l0dWZlIGNoYSBrdXNpdGlzaGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iQm9tYmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJTaSBib21iYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+Ik1veW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJGdW5ndWEgaWxpIHVlbmRlbGVlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iVXppbmR1emkgdW1lZ2hhaXJpd2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iRG9uZG9zaGEgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gaWxpIHVmdXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBoYWl0YWZ1dHdhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iSW5naXphIG1zaW1ibyB3YSBQSU4gdW5hb3BlbmRlbGV3YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJUaGliaXRpc2hhIG1zaW1ibyB3YSBQSU4gdW5hb3BlbmRlbGV3YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iSW5hZnVuZ3VhIFNJTSBrYWRpLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iTXNpbWJvIHdhIFBJTiB1c2lvIHNhaGloaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJDaGFyYXphIFBJTiBpbGl5byBuYSB0YXJha2ltdSBrYXRpIHlhIDQgbmEgOC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJNc2ltYm8gd2EgUFVLIHVuYWZhYSBrdXdhIG5hIG5hbWJhcmkgOCBhdSB6YWlkaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJJbmdpemEgdXB5YSBtc2ltYm8gc2FoaWhpIHdhIFBVSy4gTWFqYXJpYmlvIHlhbmF5b3J1ZGl3YSB5YXRhbGVtYXphIFNJTSBrYWJpc2EuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJVbWVrb3NlYSBrdWNob3JhIG1jaG9ybyB3YWtvIHdhIGt1ZnVuZ3VhIG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIEJhYWRhIHlhIG1hamFyaWJpbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB5YXNpeW9mYXVsdSwgdXRhb21id2Ega3VmdW5ndWEgc2ltdSB5YWtvIGt3YSBrdXR1bWlhIGFrYXVudGkgeWEgYmFydWEgcGVwZS5cblxuIEphcmlidSB0ZW5hIGJhYWRhIHlhIHNla3VuZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iT25kb2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik1zaW1ibyB3YSBQSU4geWEgU0lNIHVzaW9zYWhpaGnCoHNhc2EgbGF6aW1hIHV3YXNpbGlhbmUgbmEgbXRvYSBodWR1bWEgd2Frb8KgaWxpIHVmdW5ndWUga2lmYWEgY2hha28uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJNc2ltYm8gd2EgUElOIHlhwqBTSU0gdXNpbyBzYWhpaGksIHVtZXNhbGlhIG5hwqBtYWphcmliaW/CoDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWJsYSB1bGF6aW1pa2Uga3V3YXNpbGlhbmHCoG5hIG10b2EgaHVkdW1hIHdha28gaWxpIHVmdW5ndWUga2lmYWEgY2hha28uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iTXNpbWJvIHdhIFBJTiB5YcKgU0lNIHVzaW8gc2FoaWhpLMKgdW1lc2FsaWEgbmEgbWFqYXJpYmlvwqA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0gaGFpd2V6aSBrdXR1bWlrYS4gV2FzaWxpYW5hIG5hIG10b2EgaHVkdW1hIHdha28uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJNc2ltYm8gd2EgUFVLIHlhIFNJTSB1c2lvIHNhaGloaSwgdW1lc2FsaWEgbmEgbWFqYXJpYmlvIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWJsYSB5YSBTSU0ga3VhY2hhIGt1dHVtaWthIGthYmlzYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJNc2ltYm8gd2EgUFVLIHlhwqBTSU0gdXNpbyBzYWhpaGkswqB1bWVzYWxpYSBuYSBtYWphcmliaW/CoDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWJsYSB5YSBTSU0ga3VhY2hhIGt1dHVtaWthIGthYmlzYS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlV0ZW5kYWthemkgd2EgUElOIHlhIFNJTcKgdW1lc2hpbmR3YSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlV0ZW5kYWthemkgd2EgUFVLIHlhIFNJTSB1bWVzaGluZHdhISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJNc2ltYm8gVW1la3ViYWxpd2EhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iS2l0dWZlIGNoYSB3aW1ibyB3YSBhd2FsaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IktpdHVmZSBjaGEgd2ltYm8gdW5hb2Z1YXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IktpdHVmZSBjaGEga3VzaXRpc2hhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKaW5kZXggZDYzMDhiNi4uYTQ0ZjlmZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLguJ7guLTguKHguJ7guYzguKPguKvguLHguKogUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i4Lie4Li04Lih4Lie4LmMIFBVSyDguYHguKXguLDguKPguKvguLHguKogUElOIOC5g+C4q+C4oeC5iCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4i4Lij4Lir4Lix4LiqIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4Lij4Lir4Lix4LiqIFBJTiDguYPguKvguKHguYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLguJ7guLTguKHguJ7guYwgUFVLIOC5geC4peC4sOC4o+C4q+C4seC4qiBQSU4g4LmD4Lir4Lih4LmIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiLguKPguKvguLHguKogUFVLIOC4guC4reC4h+C4i+C4tOC4oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4i4Lij4Lir4Lix4LiqIFBJTiDguILguK3guIfguIvguLTguKHguYPguKvguKHguYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLguYHguJXguLDguYDguJ7guLfguYjguK3guJ7guLTguKHguJ7guYzguKPguKvguLHguKrguJzguYjguLLguJkiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLguJ7guLTguKHguJ7guYzguKPguKvguLHguKrguJzguYjguLLguJnguYDguJ7guLfguYjguK3guJvguKXguJTguKXguYfguK3guIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLguJ7guLTguKHguJ7guYwgUElOIOC5gOC4nuC4t+C5iOC4reC4m+C4peC4lOC4peC5h+C4reC4gSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLguJvguLjguYjguKHguKvguKLguLjguJTguIrguLHguYjguKfguITguKPguLLguKciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IuC4m+C4uOC5iOC4oeC5gOC4peC5iOC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i4Lib4Li44LmI4Lih4Lir4Lii4Li44LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IuC4quC4uOC4lOC4ouC4reC4lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IuC5hOC4oeC5iOC4iuC4reC4miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IuC4q+C4seC4p+C5g+C4iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IuC4m+C4peC4lOC4peC5h+C4reC4geC5gOC4nuC4t+C5iOC4reC4lOC4s+C5gOC4meC4tOC4meC4geC4suC4o+C4leC5iOC4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IuC4ouC4geC5gOC4peC4tOC4geC4geC4suC4o+C5gOC4m+C4tOC4lOC5g+C4iuC5ieC4h+C4suC4meC5geC4peC5ieC4pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLguKXguLLguIEgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4LmA4Lie4Li34LmI4Lit4Lil4LiaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOC4iOC4sOC5hOC4oeC5iOC4luC4ueC4geC4peC4miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i4Lib4LmJ4Lit4LiZ4Lij4Lir4Lix4LiqIFBJTiDguJfguLXguYjguJXguYnguK3guIfguIHguLLguKMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4Lii4Li34LiZ4Lii4Lix4LiZ4Lij4Lir4Lix4LiqIFBJTiDguJfguLXguYjguJXguYnguK3guIfguIHguLLguKMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IuC4geC4s+C4peC4seC4h+C4m+C4peC4lOC4peC5h+C4reC4geC4i+C4tOC4oeC4geC4suC4o+C5jOC4lOKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuC4o+C4q+C4seC4qiBQSU4g4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4Lie4Li04Lih4Lie4LmMIFBJTiDguIvguLbguYjguIfguYDguJvguYfguJnguYDguKXguIIgNCDguJbguLbguIcgOCDguKvguKXguLHguIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiLguKPguKvguLHguKogUFVLIOC4leC5ieC4reC4h+C5gOC4m+C5h+C4meC4leC4seC4p+C5gOC4peC4guC4reC4ouC5iOC4suC4h+C4meC5ieC4reC4oiA4IOC4q+C4peC4seC4gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuC5g+C4quC5iOC4o+C4q+C4seC4qiBQVUsg4LiX4Li14LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiHIOC4geC4suC4o+C4nuC4ouC4suC4ouC4suC4oeC4i+C5ieC4s+C4q+C4peC4suC4ouC4hOC4o+C4seC5ieC4h+C4iOC4sOC4l+C4s+C5g+C4q+C5ieC4i+C4tOC4oeC4geC4suC4o+C5jOC4lOC4luC4ueC4geC4m+C4tOC4lOC5g+C4iuC5ieC4h+C4suC4meC4reC4ouC5iOC4suC4h+C4luC4suC4p+C4oyI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4LiE4Li44LiT4Lin4Liy4LiU4Lij4Li54Lib4LmB4Lia4Lia4LiB4Liy4Lij4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4h+C5geC4peC5ieC4pyDguKvguLLguIHguJfguLPguYTguKHguYjguKrguLPguYDguKPguYfguIjguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4guC4reC5g+C4q+C5ieC4hOC4uOC4k+C4m+C4peC4lOC4peC5h+C4reC4geC5guC4l+C4o+C4qOC4seC4nuC4l+C5jOC5guC4lOC4ouC5g+C4iuC5ieC4seC4muC4seC4jeC4iuC4teC4reC4teC5gOC4oeC4pVxuXG4g4LmC4Lib4Lij4LiU4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiH4LmD4LiZ4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC4p+C4tOC4meC4suC4l+C4tSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IuC4meC4s+C4reC4reC4gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i4Lij4Lir4Lix4LiqIFBJTiDguILguK3guIfguIvguLTguKHguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcg4LiV4Lit4LiZ4LiZ4Li14LmJ4LiE4Li44LiT4LiV4LmJ4Lit4LiH4LiV4Li04LiU4LiV4LmI4Lit4Lic4Li54LmJ4LmD4Lir4LmJ4Lia4Lij4Li04LiB4Liy4Lij4LmA4Lie4Li34LmI4Lit4Lib4Lil4LiU4Lil4LmH4Lit4LiB4Lit4Li44Lib4LiB4Lij4LiT4LmM4LiC4Lit4LiH4LiE4Li44LiTIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiLguKPguKvguLHguKogUElOIOC4guC4reC4h+C4i+C4tOC4oeC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyDguITguLjguJPguJ7guKLguLLguKLguLLguKHguYTguJTguYnguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4h+C4geC5iOC4reC4meC4l+C4teC5iOC4iOC4sOC4leC5ieC4reC4h+C4leC4tOC4lOC4leC5iOC4reC4nOC4ueC5ieC5g+C4q+C5ieC4muC4o+C4tOC4geC4suC4o+C5gOC4nuC4t+C5iOC4reC4m+C4peC4lOC4peC5h+C4reC4geC4reC4uOC4m+C4geC4o+C4k+C5jOC4guC4reC4h+C4hOC4uOC4kyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IuC4o+C4q+C4seC4qiBQSU4g4LiC4Lit4LiH4LiL4Li04Lih4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIOC4hOC4uOC4k+C4nuC4ouC4suC4ouC4suC4oeC5hOC4lOC5ieC4reC4teC4gSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiLguIvguLTguKHguYTguKHguYjguKrguLLguKHguLLguKPguJbguYPguIrguYnguIfguLLguJnguYTguJTguYkg4LiV4Li04LiU4LiV4LmI4Lit4Lic4Li54LmJ4LmD4Lir4LmJ4Lia4Lij4Li04LiB4Liy4Lij4LiC4Lit4LiH4LiE4Li44LiTIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLguKPguKvguLHguKogUFVLIOC4guC4reC4h+C4i+C4tOC4oeC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyDguITguLjguJPguJ7guKLguLLguKLguLLguKHguYTguJTguYnguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4h+C4geC5iOC4reC4meC4l+C4teC5iOC4i+C4tOC4oeC4iOC4sOC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC5g+C4iuC5ieC4h+C4suC4meC5hOC4lOC5ieC4reC4ouC5iOC4suC4h+C4luC4suC4p+C4oyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IuC4o+C4q+C4seC4qiBQVUsg4LiC4Lit4LiH4LiL4Li04Lih4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIOC4hOC4uOC4k+C4nuC4ouC4suC4ouC4suC4oeC5hOC4lOC5ieC4reC4teC4gSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiH4LiB4LmI4Lit4LiZ4LiX4Li14LmI4LiL4Li04Lih4LiI4Liw4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmD4LiK4LmJ4LiH4Liy4LiZ4LmE4LiU4LmJ4Lit4Lii4LmI4Liy4LiH4LiW4Liy4Lin4LijIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiLguIHguLLguKPguJvguKXguJTguKXguYfguK3guIHguJTguYnguKfguKIgUElOIOC4guC4reC4h+C4i+C4tOC4oeC4peC5ieC4oeC5gOC4q+C4peC4pyEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IuC4geC4suC4o+C4m+C4peC4lOC4peC5h+C4reC4geC4lOC5ieC4p+C4oiBQVUsg4LiC4Lit4LiH4LiL4Li04Lih4Lil4LmJ4Lih4LmA4Lir4Lil4LinISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLguKPguKvguLHguKrguYTguJTguYnguKPguLHguJrguIHguLLguKPguKLguK3guKHguKPguLHguJohIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i4Lib4Li44LmI4Lih4LmB4LiX4Lij4LmH4LiB4LiB4LmI4Lit4LiZ4Lir4LiZ4LmJ4LiyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i4Lib4Li44LmI4Lih4LmB4LiX4Lij4LmH4LiB4LiW4Lix4LiU4LmE4LibIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IuC4m+C4uOC5iOC4oeC4q+C4ouC4uOC4lOC4iuC4seC5iOC4p+C4hOC4o+C4suC4pyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCmluZGV4IGE0MWQyNjguLjY1MTY3NjYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iSS10eXBlIGFuZyBQSU4gY29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IkktdHlwZSBhbmcgUFVLIGF0IGJhZ29uZyBQSU4gY29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIGNvZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IkJhZ29uZyBQSU4gY29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IkktdHlwZSBhbmcgU0lNIFBVSyBhdCBiYWdvbmcgUElOIGNvZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlBVSyBjb2RlIG5nIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iQmFnb25nIFBJTiBjb2RlIG5nIFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IlBpbmR1dGluIHVwYW5nIGktdHlwZSBwYXNzd29yZCI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IkktdHlwZSBhbmcgcGFzc3dvcmQgdXBhbmcgaS11bmxvY2siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJJLXR5cGUgYW5nIFBJTiB1cGFuZyBpLXVubG9jayI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJCdXR0b24gbmEgSS1wYXVzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iQnV0dG9uIG5hIEktcGxheSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iQnV0dG9uIG5hIEloaW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJUaHVtYnMgdXAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJUaHVtYnMgZG93biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkhlYXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iSS11bmxvY2sgdXBhbmcgbWFncGF0dWxveSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+Ik5ha2Fuc2VsYSBhbmcgcGFnbHVuc2FkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IkktZHJvcCBhbmcgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gdXBhbmcgdGFuZ2dhbGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiJIaW5kaSB0YXRhbmdnYWxpbiBhbmcgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJJbGFnYXkgYW5nIG5pbmFuYWlzIG5hIFBJTiBjb2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+Ikt1bXBpcm1haGluIGFuZyBuaW5hbmFpcyBuYSBQSU4gY29kZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iSW5hLXVubG9jayBhbmcgU0lNIGNhcmTigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJIaW5kaSB0YW1hbmcgUElOIGNvZGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iTWFnLXR5cGUgbmcgUElOIG5hIDQgaGFuZ2dhbmcgOCBudW1lcm8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iRGFwYXQgYXkgOCBudW1lcm8gbyBoaWdpdCBwYSBhbmcgUFVLIGNvZGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iTXVsaW5nIGlsYWdheSBhbmcgdGFtYW5nIFBVSyBjb2RlLiBQZXJtYW5lbnRlbmcgaGluZGkgcGFnYWdhbmFoaW4gYW5nIFNJTSBuZyBtZ2EgcGF1bGl0LXVsaXQgbmEgcGFndGF0YW5na2EuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJOYWd1aGl0IG1vIG5hbmcgaGluZGkgdGFtYSBhbmcgaXlvbmcgcGF0dGVybiBzYSBwYWctdW5sb2NrIG5hbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gKG5hKSBiZXNlcy4gUGFna2F0YXBvcyBuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwYW5nIGhpbmRpIG1hdGFndW1wYXkgbmEgcGFndGF0YW5na2EsIGhpaGlsaW5naW4gc2EgaXlvbmcgaS11bmxvY2sgYW5nIHRlbGVwb25vIG1vIGdhbWl0IGFuZyBpc2FuZyBlbWFpbCBhY2NvdW50LlxuXG4gU3VidWthbmcgbXVsaSBzYSBsb29iIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IChuYSkgc2VndW5kby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJBbGlzaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik1hbGluZyBQSU4gY29kZSBuZyBTSU0sIGRhcGF0IGthIG5hbmcgbWFraXBhZy11Z25heSBzYSBpeW9uZyBjYXJyaWVyIHVwYW5nIGktdW5sb2NrIGFuZyBpeW9uZyBkZXZpY2UuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJNYWxpbmcgUElOIGNvZGUgbmcgU0lNLCBtYXlyb29uIGthbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IChuYSkgbmF0aXRpcmFuZyBwYWdzdWJvayBiYWdvIGthIGRhcGF0IG1ha2lwYWctdWduYXkgc2EgaXlvbmcgY2FycmllciB1cGFuZyBpLXVubG9jayBhbmcgaXlvbmcgZGV2aWNlLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+Ik1hbGluZyBQSU4gY29kZSBuZyBTSU0sIG1heXJvb24ga2FuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gKG5hKSBuYXRpdGlyYW5nIHBhZ3N1Ym9rLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iSGluZGkgbWFnYWdhbWl0IGFuZyBTSU0uIE1ha2lwYWctdWduYXkgc2EgaXlvbmcgY2Fycmllci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+Ik1hbGluZyBQVUsgY29kZSBuZyBTSU0sIG1heXJvb24ga2FuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gKG5hKSBuYXRpdGlyYW5nIHBhZ3N1Ym9rIGJhZ28gbWFnaW5nIHBlcm1hbmVudGVuZyBoaW5kaSBtYWdhZ2FtaXQgYW5nIFNJTS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJNYWxpbmcgUFVLIGNvZGUgbmcgU0lNLCBtYXlyb29uIGthbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IChuYSkgbmF0aXRpcmFuZyBwYWdzdWJvayBiYWdvIG1hZ2luZyBwZXJtYW5lbnRlbmcgaGluZGkgbWFnYWdhbWl0IGFuZyBTSU0uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJOYWJpZ28gYW5nIG9wZXJhc3lvbiBuZyBTSU0gUElOISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iTmFiaWdvIGFuZyBvcGVyYXN5b24gbmcgU0lNIFBVSyEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iVGluYW5nZ2FwIGFuZyBDb2RlISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IkJ1dHRvbiBuYSBOYWthcmFhbmcgdHJhY2siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJCdXR0b24gbmEgU3VzdW5vZCBuYSB0cmFjayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJCdXR0b24gbmEgSS1wYXVzZSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCmluZGV4IDBhZjc3NDAuLmFlZDhhNDcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iUElOIGtvZHVudSB5YXrEsW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsgdmUgeWVuaSBQSU4ga29kdW51IHlhesSxbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIGtvZHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IlllbmkgUElOIGtvZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJTSU0gUFVLIGtvZHVudSB2ZSB5ZW5pIGJpciBQSU4ga29kdSB5YXrEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJTSU0gUFVLIGtvZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IlllbmkgU0lNIFBJTiBrb2R1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4ixZ5pZnJlIHlhem1hayBpw6dpbiBkb2t1bnVuIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iS2lsaWRpIGHDp21hayBpw6dpbiDFn2lmcmV5aSB5YXrEsW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJLaWxpZGkgYcOnbWFrIGnDp2luIFBJTiBrb2R1bnUgeWF6xLFuIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IkR1cmFrbGF0IGTDvMSfbWVzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iT3luYXQgZMO8xJ9tZXNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJEdXJkdXIgZMO8xJ9tZXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IkJlxJ9lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IkJlxJ9lbm1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iS2FscCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkRldmFtIGV0bWVrIGnDp2luIGtpbGlkaW5pIGHDp8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkJhxZ9sYXRtYSBpcHRhbCBlZGlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iU2lsbWVrIGnDp2luIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHdpZGdldFwnxLFuxLEgYsSxcmFrxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBzaWxpbm1leWVjZWsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLEsHN0ZW5lbiBQSU4ga29kdW51IGdpcmluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IsSwc3RlbmVuIFBJTiBrb2R1bnUgb25heWxhecSxbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNIGthcnQga2lsaWRpIGHDp8SxbMSxeW9y4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iWWFubMSxxZ8gUElOIGtvZHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iNC04IHJha2FtZGFuIG9sdcWfYW4gYmlyIFBJTiBnaXJpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsga29kdSA4IHZleWEgZGFoYSDDp29rIGJhc2FtYWtsxLEgYmlyIHNhecSxIG9sbWFsxLFkxLFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkRvxJ9ydSBQVUsga29kdW51IHRla3JhciBnaXJpbi4gw4dvayBzYXnEsWRhIGRlbmVtZSB5YXDEsWzEsXJzYSBTSU0ga2FydCBrYWzEsWPEsSBvbGFyYWsgZGV2cmUgZMSxxZ/EsSBixLFyYWvEsWzEsXIuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJLaWxpdCBhw6dtYSBkZXNlbmluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtleiB5YW5sxLHFnyDDp2l6ZGluaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGJhxZ9hcsSxc8SxeiBkZW5lbWVkZW4gc29ucmEgdGVsZWZvbnVudXp1IGJpciBlLXBvc3RhIGhlc2FixLEga3VsbGFuYXJhayBhw6dtYW7EsXogaXN0ZW5pci5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhbml5ZSBpw6dpbmRlIHRla3JhciBkZW5leWluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkthbGTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IllhbmzEscWfIFNJTSBQSU4ga29kdS4gQ2loYXrEsW7EsXrEsW4ga2lsaWRpbmkgYcOnbWFrIGnDp2luIGFydMSxayBvcGVyYXTDtnLDvG7DvHpsZSBiYcSfbGFudMSxIGt1cm1hbsSxeiBnZXJla2l5b3IuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJZYW5sxLHFnyBTSU0gUElOIGtvZHUuIENpaGF6xLFuxLFuIGtpbGlkaW5pIGHDp21hayBpw6dpbiBvcGVyYXTDtnLDvG7DvHpsZSBiYcSfbGFudMSxIGt1cm1hayB6b3J1bmRhIGthbG1hZGFuIMO2bmNlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBkZW5lbWUgaGFra8SxbsSxeiBrYWxkxLEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iWWFubMSxxZ8gU0lNIFBJTiBrb2R1LiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZGVuZW1lIGhha2vEsW7EsXoga2FsZMSxLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNIGt1bGxhbsSxbGFtYXouIE9wZXJhdMO2csO8bsO8emxlIGJhxJ9sYW50xLEga3VydW4uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJZYW5sxLHFnyBTSU0gUFVLIGtvZHUuIFNJTSBrYWzEsWPEsSBvbGFyYWsga3VsbGFuxLFsbWF6IGhhbGUgZ2VsbWVkZW4gw7ZuY2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGRlbmVtZSBoYWtrxLFuxLF6IGthbGTEsS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJZYW5sxLHFnyBTSU0gUFVLIGtvZHUuIFNJTSBrYWzEsWPEsSBvbGFyYWsga3VsbGFuxLFsbWF6IGhhbGUgZ2VsbWVkZW4gw7ZuY2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGRlbmVtZSBoYWtrxLFuxLF6IGthbGTEsS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlNJTSBQSU4gacWfbGVtaSBiYcWfYXLEsXPEsXogb2xkdSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTSBQVUsgacWfbGVtaSBiYcWfYXLEsXPEsXogb2xkdSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS29kIEthYnVsIEVkaWxkaSEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLDlm5jZWtpIHBhcsOnYSBkw7zEn21lc2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJTb25yYWtpIHBhcsOnYSBkw7zEn21lc2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iRHVyYWtsYXQgZMO8xJ9tZXNpIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKaW5kZXggMjg3OWU4Ny4uNWUzNTVlNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLQktCy0LXQtNGW0YLRjCBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i0JLQstC10LTRltGC0YwgUFVLLdC60L7QtCDRliDQvdC+0LLQuNC5IFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSy3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+ItCd0L7QstC40LkgUElOLdC60L7QtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+ItCS0LLQtdC00ZbRgtGMIFBVSy3QutC+0LQg0ZYg0L3QvtCy0LjQuSBQSU4t0LrQvtC0IFNJTS3QutCw0YDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJQVUst0LrQvtC0IFNJTS3QutCw0YDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLQndC+0LLQuNC5IFBJTi3QutC+0LQgU0lNLdC60LDRgNGC0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLQotC+0YDQutC90ZbRgtGM0YHRjywg0YnQvtCxINCy0LLQtdGB0YLQuCDQv9Cw0YDQvtC70YwiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLQktCy0LXQtNGW0YLRjCDQv9Cw0YDQvtC70YwsINGJ0L7QsSDRgNC+0LfQsdC70L7QutGD0LLQsNGC0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLQktCy0LXQtNGW0YLRjCBQSU4t0LrQvtC0LCDRidC+0LEg0YDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4Ijwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+ItCa0L3QvtC/0LrQsCBcItCf0YDQuNC30YPQv9C40L3QuNGC0LhcIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i0JrQvdC+0L/QutCwIFwi0JLRltC00YLQstC+0YDQuNGC0LhcIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i0JrQvdC+0L/QutCwIFwi0JfRg9C/0LjQvdC40YLQuFwiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+ItCf0L7QtNC+0LHQsNGU0YLRjNGB0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLQndC1INC/0L7QtNC+0LHQsNGU0YLRjNGB0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLQoNC10LnRgtC40L3QsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+ItCg0L7Qt9Cx0LvQvtC60YPQudGC0LUsINGJ0L7QsSDQv9GA0L7QtNC+0LLQttC40YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+ItCX0LDQv9GD0YHQuiDRgdC60LDRgdC+0LLQsNC90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4i0JLRltC00L/Rg9GB0YLRltGC0YwgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4sINGJ0L7QsSDQstC40LTQsNC70LjRgtC4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDQvdC1INCx0YPQtNC1INCy0LjQtNCw0LvQtdC90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLQktCy0LXQtNGW0YLRjCDQv9C+0YLRgNGW0LHQvdC40LkgUElOLdC60L7QtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLQn9GW0LTRgtCy0LXRgNC00YzRgtC1INC/0L7RgtGA0ZbQsdC90LjQuSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLQoNC+0LfQsdC70L7QutGD0LLQsNC90L3RjyBTSU0t0LrQsNGA0YLQuOKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+ItCd0LXQv9GA0LDQstC40LvRjNC90LjQuSBQSU4t0LrQvtC0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+ItCS0LLQtdC00ZbRgtGMIFBJTi3QutC+0LQg0ZbQtyA04oCTOCDRhtC40YTRgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUst0LrQvtC0INC80LDRlCDRgdC60LvQsNC00LDRgtC40YHRjyDQt9GWINGJ0L7QvdCw0LnQvNC10L3RiNC1IDgg0YbQuNGE0YAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i0J/QvtCy0YLQvtGA0L3QviDQstCy0LXQtNGW0YLRjCDQv9GA0LDQstC40LvRjNC90LjQuSBQVUst0LrQvtC0LiDQp9C40YHQu9C10L3QvdGWINGB0L/RgNC+0LHQuCDQvdCw0LfQsNCy0LbQtNC4INCy0LjQvNC60L3Rg9GC0YwgU0lNLdC60LDRgNGC0YMuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLQmtC70Y7RhyDRgNC+0LfQsdC70L7QutGD0LLQsNC90L3RjyDQvdC10L/RgNCw0LLQuNC70YzQvdC+INC90LDQvNCw0LvRjNC+0LLQsNC90L4g0YHRgtGW0LvRjNC60Lgg0YDQsNC30ZbQsjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uINCjINCy0LDRgSDRlCDRidC1INGB0YLRltC70YzQutC4INGB0L/RgNC+0LE6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LiDQoyDRgNCw0LfRliDQvdC10LLQtNCw0YfRliDQt+KAmdGP0LLQuNGC0YzRgdGPINC30LDQv9C40YIg0YDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4INGC0LXQu9C10YTQvtC9INC30LAg0LTQvtC/0L7QvNC+0LPQvtGOINC+0LHQu9GW0LrQvtCy0L7Qs9C+INC30LDQv9C40YHRgyDQtdC70LXQutGC0YDQvtC90L3QvtGXINC/0L7RiNGC0LguXG5cbiDQn9C+0LLRgtC+0YDRltGC0Ywg0YHQv9GA0L7QsdGDINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YHQtdC6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAkyAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+ItCS0LjQu9GD0YfQuNGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+ItCd0LXQv9GA0LDQstC40LvRjNC90LjQuSBQSU4t0LrQvtC0IFNJTS3QutCw0YDRgtC4LiDQl9Cy4oCZ0Y/QttGW0YLRjNGB0Y8g0LfRliDRgdCy0L7Rl9C8INC+0L/QtdGA0LDRgtC+0YDQvtC8LCDRidC+0LEg0YDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4INC/0YDQuNGB0YLRgNGW0LkuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiLQndC10L/RgNCw0LLQuNC70YzQvdC40LkgUElOLdC60L7QtCBTSU0t0LrQsNGA0YLQuC4g0KMg0LLQsNGBINC30LDQu9C40YjQuNC70LDRgdGMIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRgdC/0YDQvtCx0LAuINCf0ZbRgdC70Y8g0YbRjNC+0LPQviDQv9C+0YLRgNGW0LHQvdC+INCx0YPQtNC1INC30LLigJnRj9C30LDRgtC40YHRjyDQtyDQvtC/0LXRgNCw0YLQvtGA0L7QvCwg0YnQvtCxINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCDQv9GA0LjRgdGC0YDRltC5LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+ItCd0LXQv9GA0LDQstC40LvRjNC90LjQuSBQSU4t0LrQvtC0IFNJTS3QutCw0YDRgtC4LiDQoyDQstCw0YEg0LfQsNC70LjRiNC40LvQvtGB0Y8g0YHRgtGW0LvRjNC60Lgg0YHQv9GA0L7QsTogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNLdC60LDRgNGC0YMg0LfQsNCx0LvQvtC60L7QstCw0L3Qvi4g0JfQsuKAmdGP0LbRltGC0YzRgdGPINC3INC+0L/QtdGA0LDRgtC+0YDQvtC8LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4i0J3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5IFBVSy3QutC+0LQgU0lNLdC60LDRgNGC0LguINCjINCy0LDRgSDQt9Cw0LvQuNGI0LjQu9Cw0YHRjCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0YHQv9GA0L7QsdCwLiDQn9GW0YHQu9GPINGG0YzQvtCz0L4gU0lNLdC60LDRgNGC0YMg0LHRg9C00LUg0L3QsNC30LDQstC20LTQuCDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC+LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+ItCd0LXQv9GA0LDQstC40LvRjNC90LjQuSBQVUst0LrQvtC0IFNJTS3QutCw0YDRgtC4LiDQoyDQstCw0YEg0LfQsNC70LjRiNC40LvQvtGB0Y8g0YHRgtGW0LvRjNC60Lgg0YHQv9GA0L7QsTogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiDQn9GW0YHQu9GPINGG0YzQvtCz0L4gU0lNLdC60LDRgNGC0YMg0LHRg9C00LUg0L3QsNC30LDQstC20LTQuCDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4i0J/QvtC80LjQu9C60LAg0LLQstC10LTQtdC90L3RjyBQSU4t0LrQvtC00YMgU0lNLdC60LDRgNGC0LguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiLQn9C+0LzQuNC70LrQsCDQstCy0LXQtNC10L3QvdGPIFBVSy3QutC+0LTRgyBTSU0t0LrQsNGA0YLQuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i0JrQvtC0INC/0YDQuNC50L3Rj9GC0L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i0JrQvdC+0L/QutCwIFwi0J/QvtC/0LXRgNC10LTQvdGPINC60L7QvNC/0L7Qt9C40YbRltGPXCIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLQmtC90L7Qv9C60LAgXCLQndCw0YHRgtGD0L/QvdCwINC60L7QvNC/0L7Qt9C40YbRltGPXCIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i0JrQvdC+0L/QutCwIFwi0J/RgNC40LfRg9C/0LjQvdC40YLQuFwiIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKaW5kZXggNzBkM2M3My4uMTllYjRjNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJOaOG6rXAgbcOjIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+Ik5o4bqtcCBQVUsgdsOgIG3DoyBQSU4gbeG7m2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+Ik3DoyBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik3DoyBQSU4gbeG7m2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJOaOG6rXAgbcOjIFBJTiBt4bubaSB2w6AgbcOjIFBVSyBj4bunYSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+Ik3DoyBQVUsgY+G7p2EgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJNw6MgUElOIG3hu5tpIGPhu6dhIFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IkNo4bqhbSDEkeG7gyBuaOG6rXAgbeG6rXQga2jhuql1IjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iTmjhuq1wIG3huq10IGto4bqpdSDEkeG7gyBt4bufIGtow7NhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iTmjhuq1wIG3DoyBQSU4gxJHhu4MgbeG7nyBraMOzYSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJOw7p0IHThuqFtIGThu6tuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iTsO6dCBwaMOhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iTsO6dCBk4burbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iQsOgaSBow6F0IMSRxrDhu6NjIMSRw6FuaCBk4bqldSB0aMOtY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJCw6BpIGjDoXQgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGtow7RuZyB0aMOtY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJUcsOhaSB0aW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJN4bufIGtow7NhIMSR4buDIHRp4bq/cCB04bulYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IlF1w6EgdHLDrG5oIGto4bufaSBjaOG6oXkgYuG7iyBo4buneSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJUaOG6oyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDEkeG7gyB4w7NhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBz4bq9IGtow7RuZyBi4buLIHjDs2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJOaOG6rXAgbcOjIFBJTiBtb25nIG114buRbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJYw6FjIG5o4bqtbiBtw6MgUElOIG1vbmcgbXXhu5FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLEkGFuZyBt4bufIGtow7NhIHRo4bq7IFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Ik3DoyBQSU4ga2jDtG5nIGNow61uaCB4w6FjLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+Ik5o4bqtcCBtw6MgUElOIGPDsyB04burIDQgxJHhur9uIDggc+G7kS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJNw6MgUFVLIHBo4bqjaSBjw7MgdOG7qyA4IHPhu5EgdHLhu58gbMOqbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJIw6N5IG5o4bqtcCBs4bqhaSBtw6MgUFVLIGNow61uaCB4w6FjLiBOaGnhu4F1IGzhuqduIGzhurdwIGzhuqFpIHPhur0gdsO0IGhp4buHdSBow7NhIHbEqW5oIHZp4buFbiB0aOG6uyBTSU0uIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJC4bqhbiDEkcOjIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGzhuqduIHbhur0ga2jDtG5nIGNow61uaCB4w6FjIGjDrG5oIG3hu58ga2jDs2EgY+G7p2EgbcOsbmguIFNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBs4bqnbiB0aOG7rSBraMO0bmcgdGjDoG5oIGPDtG5nIG7hu69hLCBi4bqhbiBz4bq9IMSRxrDhu6NjIHnDqnUgY+G6p3UgbeG7nyBraMOzYSDEkWnhu4duIHRob+G6oWkgYuG6sW5nIHTDoGkga2hv4bqjbiBlbWFpbC5cblxuIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gZ2nDonkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iWMOzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iTcOjIFBJTiBj4bunYSBTSU0ga2jDtG5nIGNow61uaCB4w6FjLCBiw6J5IGdp4budIGLhuqFuIHBo4bqjaSBsacOqbiBo4buHIHbhu5tpIG5ow6AgY3VuZyBj4bqlcCBk4buLY2ggduG7pSDEkeG7gyBt4bufIGtow7NhIHRoaeG6v3QgYuG7iyBj4bunYSBi4bqhbi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+Ik3DoyBQSU4gY+G7p2EgU0lNIGtow7RuZyBjaMOtbmggeMOhYywgYuG6oW4gY8OybiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbOG6p24gdGjhu60gdHLGsOG7m2Mga2hpIGLhuqFuIHBo4bqjaSBsacOqbiBo4buHIHbhu5tpIG5ow6AgY3VuZyBj4bqlcCBk4buLY2ggduG7pSDEkeG7gyBt4bufIGtow7NhIHRoaeG6v3QgYuG7iyBj4bunYSBi4bqhbi4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJNw6MgUElOIGPhu6dhIFNJTSBraMO0bmcgY2jDrW5oIHjDoWMsIGLhuqFuIGPDsm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGzhuqduIHRo4butLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNIGtow7RuZyB0aOG7gyBz4butIGThu6VuZyDEkcaw4bujYy4gTGnDqm4gaOG7hyB24bubaSBuaMOgIGN1bmcgY+G6pXAgZOG7i2NoIHbhu6UgY+G7p2EgYuG6oW4uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJNw6MgUFVLIGPhu6dhIFNJTSBraMO0bmcgY2jDrW5oIHjDoWMsIGLhuqFuIGPDsm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGzhuqduIHRo4butIHRyxrDhu5tjIGtoaSBTSU0gdsSpbmggdmnhu4VuIGtow7RuZyB0aOG7gyBz4butIGThu6VuZyDEkcaw4bujYy4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJNw6MgUFVLIGPhu6dhIFNJTSBraMO0bmcgY2jDrW5oIHjDoWMsIGLhuqFuIGPDsm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGzhuqduIHRo4butIHRyxrDhu5tjIGtoaSBTSU0gdsSpbmggdmnhu4VuIGtow7RuZyB0aOG7gyBz4butIGThu6VuZyDEkcaw4bujYy4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlRoYW8gdMOhYyBtw6MgUElOIGPhu6dhIFNJTSBraMO0bmcgdGjDoG5oIGPDtG5nISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iVGhhbyB0w6FjIG3DoyBQVUsgY+G7p2EgU0lNIGtow7RuZyB0aMOgbmggY8O0bmchIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+Ik3DoyDEkcaw4bujYyBjaOG6pXAgbmjhuq1uISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+Ik7DunQgYuG6o24gbmjhuqFjIHRyxrDhu5tjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iTsO6dCBi4bqjbiBuaOG6oWMgdGnhur9wIHRoZW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iTsO6dCB04bqhbSBk4burbmciPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCmluZGV4IGNkYjE5NDRlLi4xODU3OGU0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i6L6T5YWlIFBJTiDnoIEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLor7fovpPlhaUgUFVLIOeggeWSjOaWsOeahCBQSU4g56CBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsg56CBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLmlrDnmoQgUElOIOeggSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+Iuivt+i+k+WFpSBTSU0g5Y2hIFBVSyDnoIHlkozmlrDnmoQgUElOIOeggSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iU0lNIOWNoSBQVUsg56CBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLmlrAgU0lNIOWNoSBQSU4g56CBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i6Kem5pG45Y+v6L6T5YWl5a+G56CBIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i6L6T5YWl5a+G56CB5Lul6Kej6ZSBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i6L6T5YWlIFBJTiDov5vooYzop6PplIEiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i5pqC5YGc5oyJ6ZKuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLmkq3mlL7mjInpkq4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IuWBnOatouaMiemSriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLmiJHllpzmrKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLkuI3llpzmrKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLniLHlv4MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLop6PplIHljbPlj6/nu6fnu60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiLlkK/liqjlt7Llj5bmtogiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4i5pS+5LiLPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz7ljbPlj6/lsIblhbbliKDpmaTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz7lsIbkuI3kvJrooqvliKDpmaTjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+Iuivt+i+k+WFpeaJgOmcgCBQSU4g56CBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+Iuivt+ehruiupOaJgOmcgCBQSU4g56CBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLmraPlnKjop6PplIEgU0lNIOWNoS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IlBJTiDnoIHmnInor6/jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLor7fovpPlhaUgNCDoh7MgOCDkvY3mlbDnmoQgUElO44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIOeggeW6lOiHs+WwkeWMheWQqyA4IOS9jeaVsOWtl+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Iuivt+mHjeaWsOi+k+WFpeato+ehrueahCBQVUsg56CB44CC5aaC5p6c5bCd6K+V6ZSZ6K+v5qyh5pWw6L+H5aSa77yMU0lNIOWNoeWwhuawuOS5heWBnOeUqOOAgiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i5oKo5bey57uPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoemUmeivr+WcsOe7mOWItuS6huino+mUgeWbvuahiOOAguWmguaenOWGjeWwneivlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHlkI7ku43kuI3miJDlip/vvIzns7vnu5/lsLHkvJropoHmsYLmgqjkvb/nlKjoh6rlt7HnmoTnlLXlrZDpgq7ku7bluJDmiLfop6PplIHmiYvmnLrjgIJcblxu6K+35ZyoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOenkuWQjumHjeivleOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IuWIoOmZpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iU0lNIOWNoSBQSU4g56CB5LiN5q2j56Gu77yM5oKo546w5Zyo5b+F6aG76IGU57O76L+Q6JCl5ZWG5Li65oKo6Kej6ZSB6K6+5aSH44CCIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJTSU0g5Y2hIFBJTiDnoIHkuI3mraPnoa7vvIzmgqjov5jmnIk8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7mrKHlsJ3or5XmnLrkvJrjgILlpoLmnpzku43nhLblpLHotKXvvIzliJnlv4XpobvogZTns7vov5DokKXllYbluK7mgqjop6PplIHorr7lpIfjgIIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJTSU0g5Y2hIFBJTiDnoIHkuI3mraPnoa7vvIzmgqjov5jmnIk8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7mrKHlsJ3or5XmnLrkvJrjgIIiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSDljaHml6Dms5Xkvb/nlKjvvIzor7fkuI7mgqjnmoTov5DokKXllYbogZTns7vjgIIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IlNJTSDljaEgUFVLIOeggeS4jeato+ehru+8jOaCqOi/mOaciTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuasoeWwneivleacuuS8muOAguWmguaenOS7jeeEtuWksei0pe+8jFNJTSDljaHlsIbmsLjov5zml6Dms5Xkvb/nlKjjgIIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJTSU0g5Y2hIFBVSyDnoIHkuI3mraPnoa7vvIzmgqjov5jmnIk8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7mrKHlsJ3or5XmnLrkvJrjgILlpoLmnpzku43nhLblpLHotKXvvIxTSU0g5Y2h5bCG5rC46L+c5peg5rOV5L2/55So44CCIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJTSU0g5Y2hIFBJTiDnoIHmk43kvZzlpLHotKXvvIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTSDljaEgUFVLIOeggeaTjeS9nOWksei0pe+8gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLku6PnoIHmraPnoa7vvIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLigJzkuIrkuIDmm7LigJ3mjInpkq4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLigJzkuIvkuIDmm7LigJ3mjInpkq4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i4oCc5pqC5YGc4oCd5oyJ6ZKuIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTBhZDJmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxNTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i6Ly45YWlIFBJTiDnorwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLoq4vovLjlhaUgU0lNIFBVSyDnorzlkozmlrAgUElOIOeivCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iU0lNIFBVSyDnorwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IuaWsCBTSU0gUElOIOeivCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+Iui8leinuOWNs+WPr+i8uOWFpeWvhueivCI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+Iui8uOWFpeWvhueivOWNs+WPr+ino+mOliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+Iui8uOWFpSBQSU4g56K85Y2z5Y+v6Kej6Y6WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iUElOIOeivOS4jeato+eiuuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiLlpoLopoHop6PpjpbvvIzoq4vmjInpgbjllq7pjbXvvIznhLblvozmjIkgMOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLlt7LotoXpgY7oh4nlrrnop6PpjpblmJfoqabmrKHmlbjkuIrpmZAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IuWFhembu+WujOaIkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4i5YWF6Zu75LitICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+Iuiri+mAo+aOpeWFhembu+WZqOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4i5oyJ6YG45Zau6Y216Kej6Y6W44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiLntrLntaHlt7LpjpblrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4i5om+5LiN5YiwIFNJTSDljaEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4i5bmz5p2/6Zu76IWm5Lit5rKS5pyJIFNJTSDljaHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IuaJi+apn+S4reaykuaciSBTSU0g5Y2h44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+Iuiri+aPkuWFpSBTSU0g5Y2h44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4i5om+5LiN5YiwIFNJTSDljaHmiJbnhKHms5XoroDlj5YgU0lNIOWNoe+8jOiri+aPkuWFpSBTSU0g5Y2h44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+IlNJTSDljaHnhKHms5Xkvb/nlKjjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiLmgqjnmoQgU0lNIOWNoeW3suiiq+awuOS5heWBnOeUqOOAglxu6KuL6IiH5oKo55qE54Sh57ea5pyN5YuZ5L6b5oeJ5ZWG6IGv57Wh77yM5Lul5Y+W5b6X5Y+m5LiA5by1IFNJTSDljaHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4iU0lNIOWNoeiZleaWvOmOluWumueLgOaFi+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4iU0lNIOWNoeiZleaWvCBQVUsg6Y6W5a6a54uA5oWL44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiLmraPlnKjop6PplovkuIrpjpbnmoQgU0lNIOWNoS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkc+OAguesrCAlMiRkIOWAi+Wwj+W3peWFt++8jOWFsSAlMyRkIOWAi+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLmlrDlop7lsI/lt6XlhbfjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IuepuueZvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4i6Kej6Y6W5Y2A5Z+f5bey5bGV6ZaL44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4i6Kej6Y6W5Y2A5Z+f5bey5pS25ZCI44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz7lsI/lt6XlhbfjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4i55So5oi26YG45Y+W5bel5YW3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4i54uA5oWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i55u45qmfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+IuWqkumrlOaOp+WItiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i5bey6ZaL5aeL54K65bCP5bel5YW36YeN5paw5o6S5YiX5qyh5bqP44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i5bey5a6M5oiQ54K65bCP5bel5YW36YeN5paw5o6S5YiX5qyh5bqP44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPuWwj+W3peWFt+W3suWIqumZpOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IuWxlemWi+ino+mOluWNgOWfn+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+Iua7keWLleino+mOluOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i5ZyW5qGI6Kej6Y6W44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiLoh4nlrrnop6PpjpbjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUElOIOino+mOluOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IuWvhueivOino+mOluOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IuWcluahiOWNgOWfn+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLmu5Hli5XljYDln5/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+IlvkuIrkuIDpppbmm7Lnm65dIOaMiemIlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MDczOTI4MzAwNDQ0OTA5MzIwIj4iW+S4i+S4gOmmluabsuebrl0g5oyJ6YiVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iW+aaq+WBnF0g5oyJ6YiVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJb5pKt5pS+XSDmjInpiJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IlvlgZzmraJdIOaMiemIlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLllpzmraEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLkuI3llpzmraEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLlv4PlvaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLoq4vop6Ppjpbku6XnubznuowiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiLlt7Llj5bmtojllZ/li5UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4i5ouW5pS+44CMPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz7jgI3ljbPlj6/liKrpmaTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4i44CMPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz7jgI3lsIfkuI3mnIPooqvliKrpmaTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4i77yfMTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiLlj5bmtogiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i5Yiq6ZmkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLlrozmiJAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLmqKHlvI/mm7TmlLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCDpjbUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciDpjbUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Iuino+mOliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLnm7jmqZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i6Z2c6Z+zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+Iumfs+aViOW3sumWi+WVnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i5pCc5bCLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuWQkeS4iua7keWLleWNs+WPrzx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IuWQkeS4i+a7keWLleWNs+WPrzx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuWQkeW3pua7keWLleWNs+WPrzx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLlkJHlj7Pmu5Hli5XljbPlj688eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuebruWJjeeahOeUqOaItuaYrzx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i57eK5oCl6Zu76KmxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i5b+Y6KiY5ZyW5qGIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLlnJbmoYjpjK/oqqQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiLlr4bnorzpjK/oqqQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIOmMr+iqpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i6KuL5ZyoIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IueVq+WHuuWcluahiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+Iui8uOWFpSBTSU0g5Y2hIFBJTiDnorwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+Iui8uOWFpSBQSU4g56K8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+Iui8uOWFpeWvhueivCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTSDljaHnj77lt7LlgZznlKjvvIzoq4vovLjlhaUgUFVLIOeivOS7pee5vOe6jOOAguips+aDheiri+iIh+a1geWLlee2sue1oeS+m+aHieWVhuiBr+e1oeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLovLjlhaXmiYDpnIDnmoQgUElOIOeivCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLnorroqo3miYDpnIDnmoQgUElOIOeivCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4i5q2j5Zyo6Kej6ZaL5LiK6Y6W55qEIFNJTSDljaEuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLoq4vovLjlhaXkuIDlgIsgNCDoh7MgOCDkvY3mlbjnmoQgUElOIOeivOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDnorzmh4nnlLEgOCDlgIvmiJbku6XkuIrmlbjlrZfntYTmiJDjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLoq4vph43mlrDovLjlhaXmraPnorrnmoQgUFVLIOeivOOAguWmguaenOWYl+ippui8uOWFpeeahOasoeaVuOmBjuWkmu+8jFNJTSDljaHlsIfmsLjkuYXlgZznlKjjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIOeivOS4jeespiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuWcluahiOWYl+ippuasoeaVuOmBjuWkmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLlpoLopoHop6PpjpbvvIzoq4vku6UgR29vZ2xlIOW4s+aItueZu+WFpeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i55So5oi25ZCN56ixICjpm7vlrZDpg7Xku7YpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLlr4bnorwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IueZu+WFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i54Sh5pWI55qE55So5oi25ZCN56ix5oiW5a+G56K844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuW/mOiomOeUqOaItuWQjeeoseaIluWvhueivO+8n1xu6KuL54CP6Ka9ICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+Iuato+WcqOaqouafpeW4s+aItuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i5oKo5bey6Ly45YWl6Yyv6Kqk55qEIFBJTiDnorwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g5qyh44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i5oKo5bey6Ly45YWl6Yyv6Kqk55qE5a+G56K8IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoeOAglxuXG7oq4vlnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g56eS5b6M5YaN6Kmm5LiA5qyh44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuaCqOW3sueVq+mMr+ino+mOluWcluahiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHjgIJcblxu6KuL5ZyoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IuaCqOWYl+ippuS6hiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHku43mnKrog73miJDlip/op6PplovpgJnpg6jkuIrpjpbnmoTlubPmnb/pm7vohabjgILlpoLmnpzlho3lmJfoqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM5bmz5p2/6Zu76IWm5bCH5Zue5b6p5Y6f5bug6Kit5a6a77yM5omA5pyJ55So5oi26LOH5paZ5Z2H5pyD5aSx5Y6744CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IuaCqOWYl+ippuS6hiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHku43mnKrog73miJDlip/op6PplovpgJnpg6jkuIrpjpbnmoTmiYvmqZ/jgILlpoLmnpzlho3lmJfoqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM5omL5qmf5bCH5Zue5b6p5Y6f5bug6Kit5a6a77yM5omA5pyJ55So5oi26LOH5paZ5Z2H5pyD5aSx5Y6744CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiLmgqjlmJfoqabkuoYgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoeS7jeacquiDveaIkOWKn+ino+mWi+mAmemDqOS4iumOlueahOW5s+adv+mbu+iFpuOAguW5s+adv+mbu+iFpuePvuWcqOWwh+WbnuW+qeWOn+W7oOioreWumuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IuaCqOWYl+ippuS6hiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh5LuN5pyq6IO95oiQ5Yqf6Kej6ZaL6YCZ6YOo5LiK6Y6W55qE5omL5qmf44CC5omL5qmf54++5Zyo5bCH5Zue5b6p5Y6f5bug6Kit5a6a44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuaCqOW3sueVq+mMr+ino+mOluWcluahiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHvvIzlpoLmnpzlho3lmJfoqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM57O757Wx5pyD6KaB5rGC5oKo6YCP6YGO6Zu76YO15biz5oi26Kej6ZaL5LiK6Y6W55qE5bmz5p2/6Zu76IWm44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuaCqOW3sueVq+mMr+ino+mOluWcluahiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHvvIzlpoLmnpzlho3lmJfoqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM57O757Wx5pyD6KaB5rGC5oKo6YCP6YGO6Zu76YO15biz5oi26Kej6ZaL5LiK6Y6W55qE5omL5qmf44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLnp7vpmaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlNJTSBQSU4g56K85LiN5q2j56K677yM5oKo54++5Zyo5b+F6aCI6IGv57Wh5rWB5YuV57ay57Wh5L6b5oeJ5ZWG54K65oKo55qE6KOd572u6Kej6Y6W44CCIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJTSU0gUElOIOeivOS4jeato+eiuu+8jOaCqOWJqeS4iyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh5qmf5pyD6Ly45YWl44CC5aaC5p6c5LuN54S26Ly45YWl6Yyv6Kqk77yM5oKo5b+F6aCI6IGv57Wh5rWB5YuV57ay57Wh5L6b5oeJ5ZWG54K65oKo55qE6KOd572u6Kej6Y6W44CCIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iU0lNIFBJTiDnorzkuI3mraPnorrvvIzmgqjliankuIsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoeapn+acg+i8uOWFpeOAgiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNIOeEoeazleS9v+eUqO+8jOiri+iBr+e1oeaCqOeahOa1geWLlee2sue1oeS+m+aHieWVhuOAgiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iU0lNIFBVSyDnorzkuI3mraPnorrvvIzmgqjliankuIsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoeapn+acg+i8uOWFpeOAguWmguaenOS7jeeEtui8quWFpemMr+iqpO+8jFNJTSDlsIfmsLjkuYXnhKHms5Xkvb/nlKjjgIIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJTSU0gUFVLIOeivOS4jeato+eiuu+8jOaCqOWJqeS4iyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh5qmf5pyD6Ly45YWl44CC5aaC5p6c5LuN54S26Ly45YWl6Yyv6Kqk77yMU0lNIOWwh+awuOS5heeEoeazleS9v+eUqOOAgiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iU0lNIFBJTiDnorzmk43kvZzlpLHmlZfvvIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTSBQVUsg56K85pON5L2c5aSx5pWX77yBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IuWvhueivOato+eiuu+8gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IlvkuIrkuIDpppbmm7Lnm65dIOaMiemIlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IlvkuIvkuIDpppbmm7Lnm65dIOaMiemIlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJb5pqr5YGcXSDmjInpiJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiJb5pKt5pS+XSDmjInpiJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjMwODQxNzkzMjQ4MTA1NzU3ODciPiJb5YGc5q2iXSDmjInpiJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i5rKS5pyJ5pyN5YuZ44CCIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCmluZGV4IDcyYTFjMGYuLmQ4MWNjMTYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLovLjlhaUgUElOIOeivCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+Iui8uOWFpSBQVUsg56K85ZKM5pawIFBJTiDnorwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDnorwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IuaWsCBQSU4g56K8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4i6Ly45YWlIFNJTSDljaEgUFVLIOeivOWSjOaWsCBQSU4g56K8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJTSU0g5Y2hIFBVSyDnorwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IuaWsOWiniBTSU0g5Y2hIFBJTiDnorwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLovJXop7jljbPlj6/ovLjlhaXlr4bnorwiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLovLjlhaXlr4bnorzljbPlj6/op6PpjpYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLovLjlhaUgUElOIOWNs+WPr+ino+mOliI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJb5pqr5YGcXSDmjInpiJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+Ilvmkq3mlL5dIOaMiemIlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iW+WBnOatol0g5oyJ6YiVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IuWWnOatoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IuS4jeWWnOatoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IuaEm+W/gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IuWFiOino+mOluaJjeiDvee5vOe6jOaTjeS9nCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IuW3suWPlua2iOWVn+WLlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLmi5bmlL7jgIw8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPuOAjeWNs+WPr+Wwh+WFtuWIqumZpOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiLjgIw8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPuOAjeWwh+S4jeacg+mBreWIsOWIqumZpOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i6Ly45YWl5omA6ZyA55qEIFBJTiDnorwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i56K66KqN5omA6ZyA55qEIFBJTiDnorwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Iuato+WcqOino+mZpCBTSU0g5Y2h6Y6W5a6aLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iUElOIOeivOS4jeato+eiuuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+Iuiri+i8uOWFpSA0IOWIsCA4IOeivOeahCBQSU7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsg56K86Iez5bCR5b+F6aCI54K6IDgg56K844CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i6YeN5paw6Ly45YWl5q2j56K655qEIFBVSyDnorzjgILlpoLmnpzpjK/oqqTmrKHmlbjpgY7lpJrvvIxTSU0g5Y2h5bCH5pyD5rC45LmF5YGc55So44CCIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLmgqjnmoTop6PpjpblnJblvaLlt7LnlavpjK8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g5qyh77yM5aaC5p6c5YaN5ZiX6KmmIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOasoeS7jeacquaIkOWKn++8jOezu+e1seWwseacg+imgeaxguaCqOmAj+mBjumbu+WtkOmDteS7tuW4s+aItuino+mZpOaJi+apn+eahOmOluWumueLgOaFi+OAglxuXG7oq4vlnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g56eS5b6M5YaN6Kmm5LiA5qyh44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i56e76ZmkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJTSU0g5Y2h55qEIFBJTiDnorzovLjlhaXpjK/oqqTvvIzmgqjnj77lnKjlv4XpoIjoq4vooYzli5XpgJroqIrmpa3ogIXngrroo53nva7op6PpjpbjgIIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IlNJTSDljaHnmoQgUElOIOeivOi8uOWFpemMr+iqpO+8jOaCqOmChOWPr+S7peWGjeippiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh44CC5aaC5p6c5LuN54S25aSx5pWX77yM5bCx5b+F6aCI6KuL6KGM5YuV6YCa6KiK5qWt6ICF54K66KOd572u6Kej6Y6W44CCIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iU0lNIOWNoeeahCBQSU4g56K86Ly45YWl6Yyv6Kqk77yM5oKo6YKE5Y+v5Lul5YaN6KmmIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHjgIIiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSDljaHnhKHms5Xkvb/nlKjvvIzoq4voiIfmgqjnmoTooYzli5XpgJroqIrmpa3ogIXoga/ntaHjgIIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IlNJTSDljaHnmoQgUFVLIOeivOi8uOWFpemMr+iqpO+8jOaCqOmChOWPr+S7peWGjeippiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh44CC5aaC5p6c5LuN54S25aSx5pWX77yMU0lNIOWNoeWwh+awuOS5heeEoeazleS9v+eUqOOAgiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IlNJTSDljaHnmoQgUFVLIOeivOi8uOWFpemMr+iqpO+8jOaCqOmChOWPr+S7peWGjeippiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh44CC5aaC5p6c5LuN54S25aSx5pWX77yMU0lNIOWNoeWwh+awuOS5heeEoeazleS9v+eUqOOAgiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iU0lNIOWNoSBQSU4g56K85pON5L2c5aSx5pWX77yBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJTSU0g5Y2hIFBVSyDnorzmk43kvZzlpLHmlZfvvIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i5a+G56K85q2j56K677yBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iW+S4iuS4gOmmluabsuebrl0g5oyJ6YiVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iW+S4i+S4gOmmluabsuebrl0g5oyJ6YiVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlvmmqvlgZxdIOaMiemIlSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCmluZGV4IDE4NWVhMDMuLmIyMDU2MzQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iRmFrYSBpa2hvZGkgeWUtUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iRmFrYSBpLVBVSyBuZXBoaW5pa2hvZGkgZW50c2hhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJJa2hvZGkgbGUtUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJJcGhpbmlraG9kaSBlbnRzaGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJUaGF5aXBoYSBpLVBVSyB5ZS1TSU0gbmVraG9kaSB5ZXBoaW5pa2hvZGkgZW50c2hhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJJa2hvZGkgeWUtUFVLIHllLVNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iSWtob2RpIGVudHNoYSB5ZXBoaW5pa2hvZGkgeWUtU0lNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iVGhpbnRhIHVrdWJoYWxhIGlwaGFzaXdlZGkiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJCaGFsYSBpcGhhc2l3ZWRpIHVrdXplIGt1dnVsZWtlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iRmFrYSBpLVBJTiB1a3V2dWxhIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+Iklua2lub2JobyB5b2t1bWlzd2EgaXNpa2hhc2hhbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+Iklua2lub2JobyB5b2t1ZGxhbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+Iklua2lub2JobyB5b2t1bWlzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJPa3VzaGFwaHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJBa3VsdW5naWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iSW5obGl6aXlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iVnVsYSB1a3V6ZSB1cWh1YmVrZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IlVrdXFhbGlzYSBrdWtoYW5zZWxpd2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iTGFobGEgaS08eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB1a3V6ZSB1eWlzdXNlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBuZ2VrZSBpc3Vzd2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJGYWthIGlwaGluaWtob2RpIG95aXRoYW5kYXlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IlFpbmlzZWthIGlwaGluaWtob2RpIG95aXRoYW5kYXlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJJdnVsYSBpa2hhZGkgbGUtU0lNLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iSXBoaW5pa2hvZGkgZW5nYWx1bmdpbGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iVGhheWlwaGEgaXBoaW5pa2hvZGkgZW5lemlub21ib2xvIGV6aW5ndS00IGt1eWEga3dlemluZ3UtOC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJJa2hvZGkgeWUtUFVLIGt1ZmFuZWxlIGliZSB5aXppbm9tYm9sbyBlemluZ3UtOCBub21hIGV6aW5pbmdpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkZha2Ega2FidXNoYSBpa2hvZGkgeWUtUFVLIGVsdW5naWxlLiBJbWl6YW1vIGVwaGluZGl3ZSBpem9raHViYXphIHVuYXBoYWthZGUgaS1TSU0uIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJVa3VsYXlpc2hhIHVuZ2VuaXNhIGlwaGF0aGluaSB5YWtobyB5b2t1dnVsYSBuZ2VuZGxlbGEgZW5nYWx1bmdpbGUgaXppa2hhdGhpIGV6aS08eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBFbXZhIGt3ZW1pbnllIGltaXphbW8gZW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiwgdXpvY2Vsd2EgdWt1dnVsYSBpZm9uaSB5YWtobyB1c2ViZW56aXNhIHVrdW5nZW5hIG5nZW12dW1lIGt1LUdvb2dsZVxuXG4gWmFtZSBmdXRoaSBlbXVtdmEga3dlbmd1LSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBhbWFzZWtob25kaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJTdXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJJa2hvZGkgeWVwaGluaWtob2RpIHllLVNJTSBlbmdhbHVuZ2lsZSBtYW5qZSBrdW1lbGUgdXhodW1hbmUgbmVua2FtcGluaSB5ZW5ldGhpd2VraGkgeWFraG8gdWt1dnVsYSBpZGl2YXlpc2kgeWFraG8uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJJa2hvZGkgeWVwaGluaWtob2RpIHllLVNJTSBlbmdhbHVuZ2lsZSwgdW5lbWl6YW1vIGVuZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGVzZWxlIG5nYXBoYW1iaSBrb2t1YmEgdXhodW1hbmUgbmVua2FtcGluaSB5ZW5ldGhpd2VraGkuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iSWtob2RpIHllcGhpbmlraG9kaSB5ZS1TSU0gZW5nYWx1bmdpbGUsIHVuZW1pemFtbyBlc2VsZSBlbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IkktU0lNIGF5aXNlYmVuemlzZWtpLiBYaHVtYW5hIG5lbWthbXBpbmkgeWVuZXRoaXdla2hpIHlha2hvLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iSWtob2RpIHllLVBVSyB5ZS1TSU3CoGVuZ2FsdW5naWxlLCB1bmVtaXphbW8gZW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZXNlbGUgbmdhcGhhbWJpIGtva3ViYSBpLVNJTSBpYmUgZW5nYXNlYmVuemlzZWtpwqB1bmFwaGFrYWRlLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IklraG9kaSB5ZS1QVUsgeWUtU0lNIGVuZ2FsdW5naWxlLCB1bmVtaXphbW8gZW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZXNlbGUgbmdhcGhhbWJpIGtva3ViYSBpLVNJTSBpYmEgZW5nYXNlYmVuemlzZWtpIHVuYXBoYWthZGUuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJVbXNlYmVuemkgd2VwaGluaWtob2RpIHllLVNJTSB3ZWhsdWxla2lsZSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlVtc2ViZW56aSB3ZS1QVUvCoHllLVNJTcKgd2VobHVsZWtpbGUhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IklraG9kaSB5YW11a2Vsd2UhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iSW5raW5vbWJvIHlldGhyZWtoaSB5YW5nYXBoYW1iaWxpbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJJbmtpbm9iaG8geWV0aHJla2hpIGVsYW5kZWxheW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iSW5raW5vYmhvIHlva3VtaXN3YSBpc2lraGFzaGFuYSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZENpcmNsZUZyYW1lZERyYXdhYmxlLmphdmEgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRDaXJjbGVGcmFtZWREcmF3YWJsZS5qYXZhCmluZGV4IDYzYjYxYWQuLjBlMDhjZjQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZENpcmNsZUZyYW1lZERyYXdhYmxlLmphdmEKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkQ2lyY2xlRnJhbWVkRHJhd2FibGUuamF2YQpAQCAtMjksOCArMjksNiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGNsYXNzIEtleWd1YXJkQ2lyY2xlRnJhbWVkRHJhd2FibGUgZXh0ZW5kcyBEcmF3YWJsZSB7CiAKICAgICBwcml2YXRlIGZpbmFsIEJpdG1hcCBtQml0bWFwOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkSG9zdFZpZXcuamF2YSBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZEhvc3RWaWV3LmphdmEKaW5kZXggMWJhZTliOC4uZGZjZDhhOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkSG9zdFZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRIb3N0Vmlldy5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQua2V5Z3VhcmQ7CiAKK2ltcG9ydCBhbmRyb2lkLm5mYy5OZmNVbmxvY2s7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0LkxvY2tQYXR0ZXJuVXRpbHM7CiBpbXBvcnQgY29tLmFuZHJvaWQua2V5Z3VhcmQuS2V5Z3VhcmRTZWN1cml0eU1vZGVsLlNlY3VyaXR5TW9kZTsKIGltcG9ydCBjb20uYW5kcm9pZC5rZXlndWFyZC5LZXlndWFyZFVwZGF0ZU1vbml0b3IuRGlzcGxheUNsaWVudFN0YXRlOwpAQCAtNTAsNiArNTEsNyBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKKwogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CkBAIC0yOTYsNiArMjk4LDExIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbk5mY1VubG9jaygpIHsKKyAgICAgICAgICAgIGlmIChOZmNVbmxvY2suZ2V0UHJvcGVydHlFbmFibGVkKCkpIG1DYWxsYmFjay5kaXNtaXNzKHRydWUpOworICAgICAgICB9CisKICAgICB9OwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc011c2ljUGxheWluZyhpbnQgcGxheWJhY2tTdGF0ZSkgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkTWVzc2FnZUFyZWEuamF2YSBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZE1lc3NhZ2VBcmVhLmphdmEKaW5kZXggNzUxNTcyYy4uMmU0ZGJkZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkTWVzc2FnZUFyZWEuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRNZXNzYWdlQXJlYS5qYXZhCkBAIC0yMywxNiArMjMsMTAgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLm9zLkJhdHRlcnlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkUElOVmlldy5qYXZhIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkUElOVmlldy5qYXZhCmluZGV4IDNkMWMzZjMuLmNhMmQ2MTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFBJTlZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRQSU5WaWV3LmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgY29tLmFuZHJvaWQua2V5Z3VhcmQ7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnRleHQuRWRpdGFibGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LklucHV0VHlwZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFdhdGNoZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXh0Lm1ldGhvZC5EaWdpdHNLZXlMaXN0ZW5lcjsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFBhc3N3b3JkVmlldy5qYXZhIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkUGFzc3dvcmRWaWV3LmphdmEKaW5kZXggNGUzNTY4Yi4uZTczM2FmYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkUGFzc3dvcmRWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkUGFzc3dvcmRWaWV3LmphdmEKQEAgLTE2LDEzICsxNiwxMCBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLmtleWd1YXJkOwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuYWRtaW4uRGV2aWNlUG9saWN5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC50ZXh0LkVkaXRhYmxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5JbnB1dFR5cGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRXYXRjaGVyOwotaW1wb3J0IGFuZHJvaWQudGV4dC5tZXRob2QuRGlnaXRzS2V5TGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXh0Lm1ldGhvZC5UZXh0S2V5TGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKQEAgLTMxLDkgKzI4LDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RTdWJ0eXBlOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3Lk9uRWRpdG9yQWN0aW9uTGlzdGVuZXI7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuUGFzc3dvcmRFbnRyeUtleWJvYXJkSGVscGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5QYXNzd29yZEVudHJ5S2V5Ym9hcmRWaWV3OwotCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAvKioKICAqIERpc3BsYXlzIGFuIGFscGhhbnVtZXJpYyAobGF0aW4tMSkga2V5IGVudHJ5IGZvciB0aGUgdXNlciB0byBlbnRlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkU2VsZWN0b3JWaWV3LmphdmEgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRTZWxlY3RvclZpZXcuamF2YQppbmRleCA2M2JlMTAyLi43MThiMDZlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRTZWxlY3RvclZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRTZWxlY3RvclZpZXcuamF2YQpAQCAtMTYsMTkgKzE2LDE0IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLmtleWd1YXJkOwogCiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VhcmNoTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5hZG1pbi5EZXZpY2VQb2xpY3lNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKLWltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5UZWxlcGhvbnlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFNpbVBpblZpZXcuamF2YSBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFNpbVBpblZpZXcuamF2YQppbmRleCA5YWNjYmI0Li5hZTdhYzk3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRTaW1QaW5WaWV3LmphdmEKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkU2ltUGluVmlldy5qYXZhCkBAIC0yMCwxNiArMjAsMTIgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuUGhvbmVDb25zdGFudHM7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nLkJ1aWxkZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuRGlhbG9nOwogaW1wb3J0IGFuZHJvaWQuYXBwLlByb2dyZXNzRGlhbG9nOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudGV4dC5FZGl0YWJsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuSW5wdXRUeXBlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0V2F0Y2hlcjsKIGltcG9ydCBhbmRyb2lkLnRleHQubWV0aG9kLkRpZ2l0c0tleUxpc3RlbmVyOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkU2ltUHVrVmlldy5qYXZhIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkU2ltUHVrVmlldy5qYXZhCmluZGV4IDZlOWU4M2UuLjgyYjU0NjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFNpbVB1a1ZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRTaW1QdWtWaWV3LmphdmEKQEAgLTE3LDE0ICsxNywxMiBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5rZXlndWFyZDsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yU2V0LkJ1aWxkZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2c7CiBpbXBvcnQgYW5kcm9pZC5hcHAuRGlhbG9nOwogaW1wb3J0IGFuZHJvaWQuYXBwLlByb2dyZXNzRGlhbG9nOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LkVkaXRhYmxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5JbnB1dFR5cGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRXYXRjaGVyOwogaW1wb3J0IGFuZHJvaWQudGV4dC5tZXRob2QuRGlnaXRzS2V5TGlzdGVuZXI7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRUcmFuc3BvcnRDb250cm9sVmlldy5qYXZhIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVHJhbnNwb3J0Q29udHJvbFZpZXcuamF2YQppbmRleCAzNDkwNzhmLi5hN2NkOTA5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRUcmFuc3BvcnRDb250cm9sVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFRyYW5zcG9ydENvbnRyb2xWaWV3LmphdmEKQEAgLTMyLDcgKzMyLDYgQEAKIGltcG9ydCBhbmRyb2lkLm1lZGlhLlJlbW90ZUNvbnRyb2xsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC50cmFuc2l0aW9uLkNoYW5nZUJvdW5kczsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFVwZGF0ZU1vbml0b3IuamF2YSBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFVwZGF0ZU1vbml0b3IuamF2YQppbmRleCBhODQ5MzE2Li4zYjcxMmU5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRVcGRhdGVNb25pdG9yLmphdmEKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVXBkYXRlTW9uaXRvci5qYXZhCkBAIC0zNiw2ICszNiw3IEBACiBpbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuQmF0dGVyeU1hbmFnZXIuRVhUUkFfSEVBTFRIOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuSVJlbW90ZUNvbnRyb2xEaXNwbGF5OworaW1wb3J0IGFuZHJvaWQubmZjLk5mY1VubG9jazsKIGltcG9ydCBhbmRyb2lkLm9zLkJhdHRlcnlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKQEAgLTk0LDYgKzk1LDcgQEAKICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNU0dfUkVQT1JUX0VNRVJHRU5DWV9DQUxMX0FDVElPTiA9IDMxODsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NDUkVFTl9UVVJORURfT04gPSAzMTk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19TQ1JFRU5fVFVSTkVEX09GRiA9IDMyMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX05GQ19VTkxPQ0sgPSAzMjE7CiAKICAgICBwcml2YXRlIHN0YXRpYyBLZXlndWFyZFVwZGF0ZU1vbml0b3Igc0luc3RhbmNlOwogCkBAIC0xOTQsNiArMTk2LDkgQEAKICAgICAgICAgICAgICAgICBjYXNlIE1TR19TQ1JFRU5fVFVSTkVEX09OOgogICAgICAgICAgICAgICAgICAgICBoYW5kbGVTY3JlZW5UdXJuZWRPbigpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19ORkNfVU5MT0NLOgorICAgICAgICAgICAgICAgICAgICBoYW5kbGVOZmNVbmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9OwpAQCAtMzExLDYgKzMxNiwxNSBAQAogICAgICAgICB9CiAgICAgfTsKIAorICAgIHByaXZhdGUgZmluYWwgQnJvYWRjYXN0UmVjZWl2ZXIgbU5mY1VubG9ja1JlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICAgICAgaWYgKE5mY1VubG9jay5BQ1RJT05fTkZDX1VOTE9DSy5lcXVhbHMoaW50ZW50LmdldEFjdGlvbigpKSkgeworICAgICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1lc3NhZ2UoTVNHX05GQ19VTkxPQ0spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIDsKICAgICAvKioKICAgICAgKiBXaGVuIHdlIHJlY2VpdmUgYQogICAgICAqIHtAbGluayBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuVGVsZXBob255SW50ZW50cyNBQ1RJT05fU0lNX1NUQVRFX0NIQU5HRUR9IGJyb2FkY2FzdCwKQEAgLTQ5NSw2ICs1MDksMTUgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgdm9pZCBoYW5kbGVOZmNVbmxvY2soKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUNhbGxiYWNrcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgS2V5Z3VhcmRVcGRhdGVNb25pdG9yQ2FsbGJhY2sgY2IgPSBtQ2FsbGJhY2tzLmdldChpKS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChjYiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY2Iub25OZmNVbmxvY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgS2V5Z3VhcmRVcGRhdGVNb25pdG9yKENvbnRleHQgY29udGV4dCkgewogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CiAKQEAgLTUyNCw2ICs1NDcsMTEgQEAKICAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1VTRVJfUkVNT1ZFRCk7CiAgICAgICAgIGNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcihtQnJvYWRjYXN0UmVjZWl2ZXIsIGZpbHRlcik7CiAKKyAgICAgICAgZmluYWwgSW50ZW50RmlsdGVyIG5mY1VubG9ja0ludGVudEZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKTsKKyAgICAgICAgbmZjVW5sb2NrSW50ZW50RmlsdGVyLmFkZEFjdGlvbihOZmNVbmxvY2suQUNUSU9OX05GQ19VTkxPQ0spOworICAgICAgICBjb250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIobU5mY1VubG9ja1JlY2VpdmVyLCBuZmNVbmxvY2tJbnRlbnRGaWx0ZXIsCisgICAgICAgICAgICAgICAgTmZjVW5sb2NrLk5GQ19VTkxPQ0tfUEVSTUlTU0lPTiwgbnVsbCAvKiBydW4gb24gZGVmYXVsdCBzY2hlZHVsZXIgKi8pOworCiAgICAgICAgIGZpbmFsIEludGVudEZpbHRlciBib290Q29tcGxldGVGaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKCk7CiAgICAgICAgIGJvb3RDb21wbGV0ZUZpbHRlci5zZXRQcmlvcml0eShJbnRlbnRGaWx0ZXIuU1lTVEVNX0hJR0hfUFJJT1JJVFkpOwogICAgICAgICBib290Q29tcGxldGVGaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fQk9PVF9DT01QTEVURUQpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVXBkYXRlTW9uaXRvckNhbGxiYWNrLmphdmEgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRVcGRhdGVNb25pdG9yQ2FsbGJhY2suamF2YQppbmRleCBjMDg4ODBkLi40ODFkMTMyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRVcGRhdGVNb25pdG9yQ2FsbGJhY2suamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRVcGRhdGVNb25pdG9yQ2FsbGJhY2suamF2YQpAQCAtMjAsNiArMjAsNyBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlclBvbGljeTsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5JY2NDYXJkQ29uc3RhbnRzOwpAQCAtMTcyLDQgKzE3Myw5IEBACiAgICAgICogICB7QGxpbmsgV2luZG93TWFuYWdlclBvbGljeSNPRkZfQkVDQVVTRV9PRl9QUk9YX1NFTlNPUn0uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgb25TY3JlZW5UdXJuZWRPZmYoaW50IHdoeSkgeyB9CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgd2hlbiB0aGUgTkZDIFNlcnZpY2UgaGFzIGZvdW5kIGEgdGFnIHRoYXQgaXMgcmVnaXN0ZXJlZCBmb3IgTkZDIHVubG9jay4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvbk5mY1VubG9jaygpIHsgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVmlld01hbmFnZXIuamF2YSBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFZpZXdNYW5hZ2VyLmphdmEKaW5kZXggNmFhMGE0Yi4uZjI4NTNjOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVmlld01hbmFnZXIuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRWaWV3TWFuYWdlci5qYXZhCkBAIC0xNiwxMyArMTYsMTEgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5rZXlndWFyZDsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5CaXRtYXBEcmF3YWJsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuSUtleWd1YXJkU2hvd0NhbGxiYWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5Mb2NrUGF0dGVyblV0aWxzOwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwd2lkZ2V0LkFwcFdpZGdldE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRWaWV3TWVkaWF0b3IuamF2YSBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFZpZXdNZWRpYXRvci5qYXZhCmluZGV4IDQwODZmODQuLmUyMjE5ZDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFZpZXdNZWRpYXRvci5qYXZhCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFZpZXdNZWRpYXRvci5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQua2V5Z3VhcmQ7CiAKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuSUtleWd1YXJkRXhpdENhbGxiYWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeS5JS2V5Z3VhcmRTaG93Q2FsbGJhY2s7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuU3lzdGVtLlNDUkVFTl9PRkZfVElNRU9VVDsKQEAgLTQ5LDcgKzQ4LDYgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuRXZlbnRMb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5OwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVmlld1N0YXRlTWFuYWdlci5qYXZhIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVmlld1N0YXRlTWFuYWdlci5qYXZhCmluZGV4IDE2OTg5OWYuLmE3YjcyZTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFZpZXdTdGF0ZU1hbmFnZXIuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRWaWV3U3RhdGVNYW5hZ2VyLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvckxpc3RlbmVyQWRhcHRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIAogcHVibGljIGNsYXNzIEtleWd1YXJkVmlld1N0YXRlTWFuYWdlciBpbXBsZW1lbnRzCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRXaWRnZXRQYWdlci5qYXZhIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkV2lkZ2V0UGFnZXIuamF2YQppbmRleCA5OWY3NzU3Li42MTIwMTI3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRXaWRnZXRQYWdlci5qYXZhCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFdpZGdldFBhZ2VyLmphdmEKQEAgLTk1MywxNyArOTUzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGtlZXAgZXZlbnQgZGlzcGF0Y2ggaGFwcHkuCiAgICAgICAgICAgICAgICAgICAgIG1DYW1lcmFFdmVudEluUHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB1c2VyQWN0aXZpdHkoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRQYWdlV2FycChjYW1lcmFQYWdlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fVVA6CiAgICAgICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fQ0FOQ0VMOgogICAgICAgICAgICAgICAgICAgICBtQ2FtZXJhRXZlbnRJblByb2dyZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGVuZFdhcnAgPSBpc1dhcnBpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkaXNwYXRjaFRvdWNoRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgLy8gVGhpcyBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZSBldmVudCBoYXMgYmVlbiBoYW5kbGVkIGJ5IHRoZSByZWFsIHdpZGdldCBwYWdlcgotICAgICAgICAgICAgaWYgKGVuZFdhcnApIHN0b3BQYWdlV2FycCgpOwogICAgICAgICB9CiAgICAgICAgIGVuZENhbWVyYUV2ZW50KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL011bHRpUGFuZUNoYWxsZW5nZUxheW91dC5qYXZhIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL011bHRpUGFuZUNoYWxsZW5nZUxheW91dC5qYXZhCmluZGV4IDRjZmM5ZGMuLjM0MGE0ZDUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9NdWx0aVBhbmVDaGFsbGVuZ2VMYXlvdXQuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvTXVsdGlQYW5lQ2hhbGxlbmdlTGF5b3V0LmphdmEKQEAgLTI4LDcgKzI4LDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk1lYXN1cmVTcGVjOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKIAogcHVibGljIGNsYXNzIE11bHRpUGFuZUNoYWxsZW5nZUxheW91dCBleHRlbmRzIFZpZXdHcm91cCBpbXBsZW1lbnRzIENoYWxsZW5nZUxheW91dCB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvUGFnZWRWaWV3LmphdmEgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvUGFnZWRWaWV3LmphdmEKaW5kZXggNTNjMTdhNS4uZDIzM2VlOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL1BhZ2VkVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9QYWdlZFZpZXcuamF2YQpAQCAtMzYsMTUgKzM2LDcgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5JbnB1dERldmljZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5WZWxvY2l0eVRyYWNrZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdDb25maWd1cmF0aW9uOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdQYXJlbnQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdQcm9wZXJ0eUFuaW1hdG9yOworaW1wb3J0IGFuZHJvaWQudmlldy4qOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CkBAIC0yNjIsNiArMjU0LDcgQEAKICAgICAvLyBQYWdlIHdhcnBpbmcKICAgICBwcml2YXRlIGludCBtUGFnZVN3YXBJbmRleCA9IC0xOyAvLyB0aGUgcGFnZSB3ZSBzd2FwcGVkIG91dCBpZiBuZWVkZWQKICAgICBwcml2YXRlIGludCBtUGFnZVdhcnBJbmRleCA9IC0xOyAvLyB0aGUgcGFnZSB3ZSBpbnRlbmQgdG8gd2FycAorCiAgICAgcHJpdmF0ZSBib29sZWFuIG1XYXJwUGFnZUV4cG9zZWQ7CiAgICAgcHJpdmF0ZSBWaWV3UHJvcGVydHlBbmltYXRvciBtV2FycEFuaW1hdGlvbjsKIApAQCAtNDk0LDkgKzQ4Nyw2IEBACiAgICAgICAgICAgICBtSXNQYWdlTW92aW5nID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChpc1dhcnBpbmcoKSkgewogICAgICAgICAgICAgICAgIGRpc3BhdGNoT25QYWdlQmVnaW5XYXJwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1QYWdlU3dhcEluZGV4ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3YXBQYWdlcyhtUGFnZVN3YXBJbmRleCwgbVBhZ2VXYXJwSW5kZXgpOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG9uUGFnZUJlZ2luTW92aW5nKCk7CiAgICAgICAgIH0KQEAgLTUyMywyMiArNTEzLDEzIEBACiAgICAgICAgIGlmIChtSXNQYWdlTW92aW5nKSB7CiAgICAgICAgICAgICBtSXNQYWdlTW92aW5nID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoaXNXYXJwaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobVBhZ2VTd2FwSW5kZXggIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dhcFBhZ2VzKG1QYWdlU3dhcEluZGV4LCBtUGFnZVdhcnBJbmRleCk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGRpc3BhdGNoT25QYWdlRW5kV2FycCgpOwotICAgICAgICAgICAgICAgIHJlc2V0UGFnZVdhcnAoKTsKKyAgICAgICAgICAgICAgICBtV2FycFBhZ2VFeHBvc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvblBhZ2VFbmRNb3ZpbmcoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCByZXNldFBhZ2VXYXJwKCkgewotICAgICAgICAvLyBUT0RPOiBWZXJpZnkgcGFnZXMgaGF2ZSBiZWVuIHJlc2V0IGNvcnJlY3RseQotICAgICAgICBtUGFnZVN3YXBJbmRleCA9IC0xOwotICAgICAgICBtUGFnZVdhcnBJbmRleCA9IC0xOwotICAgIH0KLQogICAgIHByb3RlY3RlZCBib29sZWFuIGlzUGFnZU1vdmluZygpIHsKICAgICAgICAgcmV0dXJuIG1Jc1BhZ2VNb3Zpbmc7CiAgICAgfQpAQCAtNzk0LDExICs3NzUsNiBAQAogICAgICAgICAgICAgc2V0SG9yaXpvbnRhbFNjcm9sbEJhckVuYWJsZWQodHJ1ZSk7CiAgICAgICAgICAgICBtRmlyc3RMYXlvdXQgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAvLyBJZiBhIHBhZ2Ugd2FzIHN3YXBwZWQgd2hlbiB3ZSByZWJ1aWx0IHRoZSBsYXlvdXQsIHN3YXAgaXQgYWdhaW4gbm93LgotICAgICAgICBpZiAobVBhZ2VTd2FwSW5kZXggICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUdfV0FSUCkgTG9nLnYoVEFHLCAib25MYXlvdXQ6IHN3YXBwaW5nIHBhZ2VzIik7Ci0gICAgICAgICAgICBzd2FwUGFnZXMobVBhZ2VTd2FwSW5kZXgsIG1QYWdlV2FycEluZGV4KTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIHNjcmVlblNjcm9sbGVkKGludCBzY3JlZW5DZW50ZXIpIHsKQEAgLTEyNTIsNiArMTIyOCwyNSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBib29sZWFuIGlzSG9yaXpvbnRhbENhbWVyYVNjcm9sbChNb3Rpb25FdmVudCBldikgeworICAgICAgICAvLyBEaXNhbGxvdyBzY3JvbGxpbmcgaWYgd2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIHBvaW50ZXIgaW5kZXgKKyAgICAgICAgZmluYWwgaW50IHBvaW50ZXJJbmRleCA9IGV2LmZpbmRQb2ludGVySW5kZXgobUFjdGl2ZVBvaW50ZXJJZCk7CisgICAgICAgIGlmIChwb2ludGVySW5kZXggPT0gLTEpIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBJZiB3ZSdyZSBvbmx5IGFsbG93aW5nIGVkZ2Ugc3dpcGVzLCB3ZSBicmVhayBvdXQgZWFybHkgaWYgdGhlIGRvd24gZXZlbnQgd2Fzbid0CisgICAgICAgIC8vIGF0IHRoZSBlZGdlLgorICAgICAgICBpZiAobU9ubHlBbGxvd0VkZ2VTd2lwZXMgJiYgIW1Eb3duRXZlbnRPbkVkZ2UpIHJldHVybiBmYWxzZTsKKworICAgICAgICBmaW5hbCBmbG9hdCB4ID0gZXYuZ2V0WChwb2ludGVySW5kZXgpOworICAgICAgICBmaW5hbCBpbnQgeERpZmYgPSAoaW50KSBNYXRoLmFicyh4IC0gbURvd25Nb3Rpb25YKTsKKworICAgICAgICBmaW5hbCBpbnQgdG91Y2hTbG9wID0gTWF0aC5yb3VuZChUT1VDSF9TTE9QX1NDQUxFICogbVRvdWNoU2xvcCk7CisgICAgICAgIGJvb2xlYW4geFBhZ2VkID0geERpZmYgPiBtUGFnaW5nVG91Y2hTbG9wOworICAgICAgICBib29sZWFuIHhNb3ZlZCA9IHhEaWZmID4gdG91Y2hTbG9wOworCisgICAgICAgIHJldHVybiBtSXNDYW1lcmFFdmVudCAmJiAobVVzZVBhZ2luZ1RvdWNoU2xvcCA/IHhQYWdlZCA6IHhNb3ZlZCk7CisgICAgfQorCiAgICAgLyoKICAgICAgKiBEZXRlcm1pbmVzIGlmIHdlIHNob3VsZCBjaGFuZ2UgdGhlIHRvdWNoIHN0YXRlIHRvIHN0YXJ0IHNjcm9sbGluZyBhZnRlciB0aGUKICAgICAgKiB1c2VyIG1vdmVzIHRoZWlyIHRvdWNoIHBvaW50IHRvbyBmYXIuCkBAIC0xMjcxLDE0ICsxMjY2LDEyIEBACiAgICAgICAgIGlmIChtT25seUFsbG93RWRnZVN3aXBlcyAmJiAhbURvd25FdmVudE9uRWRnZSkgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGZpbmFsIGludCB4RGlmZiA9IChpbnQpIE1hdGguYWJzKHggLSBtTGFzdE1vdGlvblgpOwotICAgICAgICBmaW5hbCBpbnQgeURpZmYgPSAoaW50KSBNYXRoLmFicyh5IC0gbUxhc3RNb3Rpb25ZKTsKIAogICAgICAgICBmaW5hbCBpbnQgdG91Y2hTbG9wID0gTWF0aC5yb3VuZChUT1VDSF9TTE9QX1NDQUxFICogbVRvdWNoU2xvcCk7CiAgICAgICAgIGJvb2xlYW4geFBhZ2VkID0geERpZmYgPiBtUGFnaW5nVG91Y2hTbG9wOwogICAgICAgICBib29sZWFuIHhNb3ZlZCA9IHhEaWZmID4gdG91Y2hTbG9wOwotICAgICAgICBib29sZWFuIHlNb3ZlZCA9IHlEaWZmID4gdG91Y2hTbG9wOwogCi0gICAgICAgIHJldHVybiAoeE1vdmVkIHx8IHhQYWdlZCB8fCB5TW92ZWQpICYmIChtVXNlUGFnaW5nVG91Y2hTbG9wID8geFBhZ2VkIDogeE1vdmVkKTsKKyAgICAgICAgcmV0dXJuIG1Vc2VQYWdpbmdUb3VjaFNsb3AgPyB4UGFnZWQgOiB4TW92ZWQ7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0U2Nyb2xsaW5nKE1vdGlvbkV2ZW50IGV2KSB7CkBAIC0xNDQ2LDcgKzE0MzksNyBAQAogICAgICAgICAgICAgICAgICAgICBtVG91Y2hYICs9IGRlbHRhWDsKICAgICAgICAgICAgICAgICAgICAgbVNtb290aGluZ1RpbWUgPSBTeXN0ZW0ubmFub1RpbWUoKSAvIE5BTk9USU1FX0RJVjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzV2FycGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBLZXlndWFyZFdpZGdldEZyYW1lIHYgPSAoS2V5Z3VhcmRXaWRnZXRGcmFtZSkgZ2V0UGFnZUF0KG1QYWdlV2FycEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEtleWd1YXJkV2lkZ2V0RnJhbWUgdiA9IChLZXlndWFyZFdpZGdldEZyYW1lKSBnZXRQYWdlQXQoZ2V0UGFnZVdhcnBJbmRleCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHYuc2V0VHJhbnNsYXRpb25YKHYuZ2V0VHJhbnNsYXRpb25YKCkgLSBkZWx0YVgpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtRGVmZXJTY3JvbGxVcGRhdGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEJ5KChpbnQpIGRlbHRhWCwgMCk7CkBAIC0xNTY1LDggKzE1NTgsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2FsbGJhY2tzKG1TaWRlUGFnZUhvdmVyUnVubmFibGUpOwogICAgICAgICAgICAgICAgICAgICBtU2lkZVBhZ2VIb3ZlckluZGV4ID0gLTE7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChtSXNDYW1lcmFFdmVudCB8fCBkZXRlcm1pbmVTY3JvbGxpbmdTdGFydChldikpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV0ZXJtaW5lU2Nyb2xsaW5nU3RhcnQoZXYpKSB7CiAgICAgICAgICAgICAgICAgc3RhcnRTY3JvbGxpbmcoZXYpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0hvcml6b250YWxDYW1lcmFTY3JvbGwoZXYpKSB7CisgICAgICAgICAgICAgICAgc3RhcnRTY3JvbGxpbmcoZXYpOworICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gY2FuY2VsIHRoZSBjYW1lcmEgYW5pbWF0aW9uCisgICAgICAgICAgICAgICAgS2V5Z3VhcmRXaWRnZXRGcmFtZSB2ID0gKEtleWd1YXJkV2lkZ2V0RnJhbWUpIGdldFBhZ2VBdChnZXRQYWdlV2FycEluZGV4KCkpOworICAgICAgICAgICAgICAgIHYuYW5pbWF0ZSgpLmNhbmNlbCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTE2MTIsNyArMTYxMCw4IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoKGlzU2lnbmlmaWNhbnRNb3ZlICYmIGRlbHRhWCA8IDAgJiYgIWlzRmxpbmcpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAoaXNGbGluZyAmJiB2ZWxvY2l0eVggPCAwKSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50UGFnZSA8IGdldENoaWxkQ291bnQoKSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWxQYWdlID0gcmV0dXJuVG9PcmlnaW5hbFBhZ2UgPyBtQ3VycmVudFBhZ2UgOiBtQ3VycmVudFBhZ2UgKyAxOworICAgICAgICAgICAgICAgICAgICBmaW5hbFBhZ2UgPSByZXR1cm5Ub09yaWdpbmFsUGFnZSA/IG1DdXJyZW50UGFnZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNXYXJwaW5nKCkgPyBnZXRQYWdlV2FycEluZGV4KCkgOiBtQ3VycmVudFBhZ2UgKyAxOwogICAgICAgICAgICAgICAgICAgICBzbmFwVG9QYWdlV2l0aFZlbG9jaXR5KGZpbmFsUGFnZSwgdmVsb2NpdHlYKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbmFwVG9EZXN0aW5hdGlvbigpOwpAQCAtMTkyOSwyMCArMTkyOCwxOSBAQAogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIHNuYXBUb1BhZ2UoaW50IHdoaWNoUGFnZSwgaW50IGRlbHRhLCBpbnQgZHVyYXRpb24sIGJvb2xlYW4gaW1tZWRpYXRlKSB7Ci0gICAgICAgIGlmIChtUGFnZVN3YXBJbmRleCAhPSAtMSAmJiB3aGljaFBhZ2UgPT0gbVBhZ2VTd2FwSW5kZXgpIHsKLSAgICAgICAgICAgIG1OZXh0UGFnZSA9IG1QYWdlV2FycEluZGV4OyAvLyBqdW1wIHRvIHRoZSB3YXJwIHBhZ2UKKyAgICAgICAgaWYgKGlzV2FycGluZygpICYmIHdoaWNoUGFnZSA9PSBtQ3VycmVudFBhZ2UrMSkgeworICAgICAgICAgICAgbU5leHRQYWdlID0gZ2V0UGFnZVdhcnBJbmRleCgpOyAvLyBqdW1wIHRvIHRoZSB3YXJwIHBhZ2UKICAgICAgICAgICAgIGlmIChERUJVR19XQVJQKSBMb2cudihUQUcsICJzbmFwVG9QYWdlKCIgKyB3aGljaFBhZ2UgKyAiKSA6IHJlc2V0IG1QYWdlU3dhcEluZGV4Iik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtTmV4dFBhZ2UgPSB3aGljaFBhZ2U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNXYXJwaW5nKCkpIHsKKyAgICAgICAgaWYobVdhcnBQYWdlRXhwb3NlZCkgewogICAgICAgICAgICAgZGlzcGF0Y2hPblBhZ2VFbmRXYXJwKCk7Ci0gICAgICAgICAgICBub3RpZnlQYWdlU3dpdGNoaW5nKHdoaWNoUGFnZSk7Ci0gICAgICAgICAgICByZXNldFBhZ2VXYXJwKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBub3RpZnlQYWdlU3dpdGNoaW5nKHdoaWNoUGFnZSk7CisgICAgICAgICAgICBtV2FycFBhZ2VFeHBvc2VkID0gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgbm90aWZ5UGFnZVN3aXRjaGluZyh3aGljaFBhZ2UpOworCiAKICAgICAgICAgVmlldyBmb2N1c2VkQ2hpbGQgPSBnZXRGb2N1c2VkQ2hpbGQoKTsKICAgICAgICAgaWYgKGZvY3VzZWRDaGlsZCAhPSBudWxsICYmIHdoaWNoUGFnZSAhPSBtQ3VycmVudFBhZ2UgJiYKQEAgLTE5NzMsNyArMTk3MSw3IEBACiAgICAgfQogCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNXYXJwaW5nKCkgewotICAgICAgICByZXR1cm4gbVBhZ2VXYXJwSW5kZXggIT0gLTE7CisgICAgICAgIHJldHVybiBtV2FycFBhZ2VFeHBvc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNjcm9sbExlZnQoKSB7CkBAIC0yNzE2LDYgKzI3MTQsMTIgQEAKICAgICAgICAgICAgICAgICBhbmltYXRlV2FycFBhZ2VPZmZTY3JlZW4oIm9uU2NyZWVuIGVuZCIsIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uQ2FuY2VsKEFuaW1hdG9yIGFuaW1hdGlvbikgeworICAgICAgICAgICAgc3VwZXIub25BbmltYXRpb25DYW5jZWwoYW5pbWF0aW9uKTsKKyAgICAgICAgICAgIG1XYXJwQW5pbWF0aW9uID0gbnVsbDsKKyAgICAgICAgfQogICAgIH07CiAKICAgICBBbmltYXRvckxpc3RlbmVyQWRhcHRlciBtT2ZmU2NyZWVuQW5pbWF0aW9uTGlzdGVuZXIgPSBuZXcgQW5pbWF0b3JMaXN0ZW5lckFkYXB0ZXIoKSB7CkBAIC0yNzIzLDYgKzI3MjcsMTQgQEAKICAgICAgICAgcHVibGljIHZvaWQgb25BbmltYXRpb25FbmQoQW5pbWF0b3IgYW5pbWF0aW9uKSB7CiAgICAgICAgICAgICBtV2FycEFuaW1hdGlvbiA9IG51bGw7CiAgICAgICAgICAgICBtV2FycFBhZ2VFeHBvc2VkID0gZmFsc2U7CisgICAgICAgICAgICBLZXlndWFyZFdpZGdldEZyYW1lIHYgPSAoS2V5Z3VhcmRXaWRnZXRGcmFtZSkgZ2V0UGFnZUF0KGdldFBhZ2VXYXJwSW5kZXgoKSk7CisgICAgICAgICAgICB2LnNldFRyYW5zbGF0aW9uWCgwLjBmKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvbkNhbmNlbChBbmltYXRvciBhbmltYXRpb24pIHsKKyAgICAgICAgICAgIHN1cGVyLm9uQW5pbWF0aW9uQ2FuY2VsKGFuaW1hdGlvbik7CisgICAgICAgICAgICBtV2FycEFuaW1hdGlvbiA9IG51bGw7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yNzMxLDcgKzI3NDMsNyBAQAogICAgICAgICBpZiAoYWJvcnRBbmltYXRpb24pIHsKICAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGUgYW5pbWF0aW9uIGFuZCBtb3ZpbmcgdG8gYSBuZXcgcGFnZS4gIExldCB0aGUgc2Nyb2xsZXIKICAgICAgICAgICAgIC8vIHRha2Ugb3ZlciB0aGUgYW5pbWF0aW9uLgotICAgICAgICAgICAgS2V5Z3VhcmRXaWRnZXRGcmFtZSB2ID0gKEtleWd1YXJkV2lkZ2V0RnJhbWUpIGdldFBhZ2VBdChtUGFnZVdhcnBJbmRleCk7CisgICAgICAgICAgICBLZXlndWFyZFdpZGdldEZyYW1lIHYgPSAoS2V5Z3VhcmRXaWRnZXRGcmFtZSkgZ2V0UGFnZUF0KGdldFBhZ2VXYXJwSW5kZXgoKSk7CiAgICAgICAgICAgICB2LmFuaW1hdGUoKS5jYW5jZWwoKTsKICAgICAgICAgICAgIC8vIE1ha2UgdGhlIHNjcm9sbCBhbW91bnQgbWF0Y2ggdGhlIGN1cnJlbnQgd2FycCBwb3NpdGlvbi4KICAgICAgICAgICAgIHNjcm9sbEJ5KE1hdGgucm91bmQoLXYuZ2V0VHJhbnNsYXRpb25YKCkpLCAwKTsKQEAgLTI3NDcsMjggKzI3NTksNDMgQEAKIAogICAgIHByaXZhdGUgdm9pZCBhbmltYXRlV2FycFBhZ2VPblNjcmVlbihTdHJpbmcgcmVhc29uKSB7CiAgICAgICAgIGlmIChERUJVR19XQVJQKSBMb2cudihUQUcsICJhbmltYXRlV2FycFBhZ2VPblNjcmVlbigiICsgcmVhc29uICsgIikiKTsKLSAgICAgICAgaWYgKGlzV2FycGluZygpICYmICFtV2FycFBhZ2VFeHBvc2VkKSB7CisgICAgICAgIGlmICghbVdhcnBQYWdlRXhwb3NlZCkgewogICAgICAgICAgICAgbVdhcnBQYWdlRXhwb3NlZCA9IHRydWU7CiAgICAgICAgICAgICBkaXNwYXRjaE9uUGFnZUJlZ2luV2FycCgpOwotICAgICAgICAgICAgS2V5Z3VhcmRXaWRnZXRGcmFtZSB2ID0gKEtleWd1YXJkV2lkZ2V0RnJhbWUpIGdldFBhZ2VBdChtUGFnZVdhcnBJbmRleCk7CisgICAgICAgICAgICBLZXlndWFyZFdpZGdldEZyYW1lIHYgPSAoS2V5Z3VhcmRXaWRnZXRGcmFtZSkgZ2V0UGFnZUF0KGdldFBhZ2VXYXJwSW5kZXgoKSk7CiAgICAgICAgICAgICBpZiAoREVCVUdfV0FSUCkgTG9nLnYoVEFHLCAibW92aW5nIHBhZ2Ugb24gc2NyZWVuOiBUeD0iICsgdi5nZXRUcmFuc2xhdGlvblgoKSk7CiAgICAgICAgICAgICBEZWNlbGVyYXRlSW50ZXJwb2xhdG9yIGludGVycCA9IG5ldyBEZWNlbGVyYXRlSW50ZXJwb2xhdG9yKDEuNWYpOworICAgICAgICAgICAgaW50IHRvdGFsT2Zmc2V0ID0gZ2V0Q3VycmVudFdhcnBPZmZzZXQoKTsKKyAgICAgICAgICAgIHYuc2V0VHJhbnNsYXRpb25YKHRvdGFsT2Zmc2V0KTsKICAgICAgICAgICAgIG1XYXJwQW5pbWF0aW9uID0gdi5hbmltYXRlKCk7Ci0gICAgICAgICAgICBtV2FycEFuaW1hdGlvbi50cmFuc2xhdGlvblgobVdhcnBQZWVrQW1vdW50KQorICAgICAgICAgICAgbVdhcnBBbmltYXRpb24udHJhbnNsYXRpb25YKG1XYXJwUGVla0Ftb3VudCt0b3RhbE9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihpbnRlcnApCiAgICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihXQVJQX1BFRUtfQU5JTUFUSU9OX0RVUkFUSU9OKQogICAgICAgICAgICAgICAgICAgICAuc2V0TGlzdGVuZXIobU9uU2NyZWVuQW5pbWF0aW9uTGlzdGVuZXIpOwogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBpbnQgZ2V0Q3VycmVudFdhcnBPZmZzZXQoKSB7CisgICAgICAgIGlmIChtQ3VycmVudFBhZ2UgPT0gZ2V0UGFnZVdhcnBJbmRleCgpKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBWaWV3IHZpZXdSaWdodCA9IGdldFBhZ2VBdChtQ3VycmVudFBhZ2UgKyAxKTsKKyAgICAgICAgVmlldyB3YXJwVmlldyA9IGdldFBhZ2VBdChnZXRQYWdlV2FycEluZGV4KCkpOworICAgICAgICBpZiAodmlld1JpZ2h0ICE9IHdhcnBWaWV3ICYmIHZpZXdSaWdodCAhPSBudWxsICYmIHdhcnBWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiB2aWV3UmlnaHQuZ2V0TGVmdCgpIC0gd2FycFZpZXcuZ2V0TGVmdCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCBhbmltYXRlV2FycFBhZ2VPZmZTY3JlZW4oU3RyaW5nIHJlYXNvbiwgYm9vbGVhbiBhbmltYXRlKSB7CiAgICAgICAgIGlmIChERUJVR19XQVJQKSBMb2cudihUQUcsICJhbmltYXRlV2FycFBhZ2VPZmZTY3JlZW4oIiArIHJlYXNvbiArICIgYW5pbToiICsgYW5pbWF0ZSArICIpIik7Ci0gICAgICAgIGlmIChpc1dhcnBpbmcoKSkgeworICAgICAgICBpZiAobVdhcnBQYWdlRXhwb3NlZCkgewogICAgICAgICAgICAgZGlzcGF0Y2hPblBhZ2VFbmRXYXJwKCk7Ci0gICAgICAgICAgICBLZXlndWFyZFdpZGdldEZyYW1lIHYgPSAoS2V5Z3VhcmRXaWRnZXRGcmFtZSkgZ2V0UGFnZUF0KG1QYWdlV2FycEluZGV4KTsKKyAgICAgICAgICAgIEtleWd1YXJkV2lkZ2V0RnJhbWUgdiA9IChLZXlndWFyZFdpZGdldEZyYW1lKSBnZXRQYWdlQXQoZ2V0UGFnZVdhcnBJbmRleCgpKTsKICAgICAgICAgICAgIGlmIChERUJVR19XQVJQKSBMb2cudihUQUcsICJtb3ZpbmcgcGFnZSBvZmYgc2NyZWVuOiBUeD0iICsgdi5nZXRUcmFuc2xhdGlvblgoKSk7CiAgICAgICAgICAgICBBY2NlbGVyYXRlSW50ZXJwb2xhdG9yIGludGVycCA9IG5ldyBBY2NlbGVyYXRlSW50ZXJwb2xhdG9yKDEuNWYpOwotICAgICAgICAgICAgdi5hbmltYXRlKCkudHJhbnNsYXRpb25YKDAuMGYpCisgICAgICAgICAgICBpbnQgdG90YWxPZmZzZXQgPSBnZXRDdXJyZW50V2FycE9mZnNldCgpOworICAgICAgICAgICAgdi5hbmltYXRlKCkudHJhbnNsYXRpb25YKHRvdGFsT2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKGludGVycCkKICAgICAgICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKGFuaW1hdGUgPyBXQVJQX1BFRUtfQU5JTUFUSU9OX0RVUkFUSU9OIDogMCkKICAgICAgICAgICAgICAgICAgICAgLnNldExpc3RlbmVyKG1PZmZTY3JlZW5BbmltYXRpb25MaXN0ZW5lcik7CkBAIC0yNzk5LDcgKzI4MjYsNyBAQAogICAgIH0KIAogICAgIHByb3RlY3RlZCBpbnQgZ2V0UGFnZVdhcnBJbmRleCgpIHsKLSAgICAgICAgcmV0dXJuIG1QYWdlV2FycEluZGV4OworICAgICAgICByZXR1cm4gZ2V0UGFnZUNvdW50KCkgLSAxOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHN0b3BQYWdlV2FycCgpIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwYTVhMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IkRydWt3YWdseXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iRHJ1a2tlcmluc3RlbGxpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iRHJ1ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlN0b29yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iQmVzdGVtbWluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJBZnNrcmlmdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlBhcGllcmdyb290dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJLbGV1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yacOrbnRhc2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iQmxhZHN5ZSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iYnYuIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iRHJ1a3Zvb3Jza291Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJJbnN0YWxsZWVyIFBERi1iZWt5a2VyIHZpciB2b29yc2tvdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iRHJ1a2tlcnByb2dyYW0gaGV0IG9tZ2V2YWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iQmxhZHN5ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyZWVyIHVpdGRydWt0YWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU3Rvb3IgYXMgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IkFsbGUgZHJ1a2tlcnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkRydWtkaWFsb29nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IkRldXJzb2VrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IkFsbGUgZHJ1a2tlcnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJWb2VnIGRpZW5zIGJ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iU29la2thc3NpZSB2ZXJ0b29uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlNvZWtrYXNzaWUgd2VnZ2VzdGVlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IlZvZWcgZHJ1a2tlciBieSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IktpZXMgZHJ1a2tlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlZlcmdlZXQgZHJ1a2tlciI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBkcnVra2VyIGdla3J5IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBkcnVra2VycyBnZWtyeSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IktpZXMgZHJ1a2RpZW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTb2VrIHRhbnMgdmlyIGRydWtrZXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iR2VlbiBkcnVra2VycyBnZWtyeSBuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJEcnVrIHRhbnMgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkthbnNlbGxlZXIgdGFucyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJEcnVra2VyZm91dCBieSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iRHJ1a2tlciBoZXQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBnZWJsb2trZWVyIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4tdWl0ZHJ1a3RhYWsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+LXVpdGRydWt0YWtlIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkthbnNlbGxlZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IkhlcmJlZ2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkdlZW4gdmVyYmluZGluZyBtZXQgZHJ1a2tlciBuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJvbmJla2VuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgbmllIGJlc2tpa2JhYXIgbmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IktvbiBuaWUgdWl0ZHJ1a3RhYWsgZ2VuZXJlZXIgbmllIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IlN3YXJ0IGVuIHdpdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJLbGV1ciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0cmV0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IkxhbmRza2FwIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJBbGxlcyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJSZWlrd3lkdGUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjk0ZDZkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4i4Yuo4YiF4Ym14YiY4Ym1IOGKoOGIteGJsOGIi+GIi+GNiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLhi6jhiqDhibPhiJog4YmF4YqV4Yml4Yiu4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4i4Yqg4Ym14YidIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i4Yqg4Yi14YmA4Yid4YylIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4i4YiY4Yu14Yio4Yi7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IuGJheGMguGLjuGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4i4Yuo4YuI4Yio4YmA4Ym1IOGImOGMoOGKlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IuGJgOGIiOGInSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IuGKoOGJgOGIm+GImOGMoCDhjIjhjYUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLhjIjhjL7hib0gKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IuGIiOGIneGIs+GIjOGNpiAx4oCTNSw4LDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IuGLqOGIheGJteGImOGJtSDhiYXhi7XhiJgg4Yql4Yut4YmzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLhiIjhiYXhi7XhiJgt4Yql4Yut4YmzIOGLqOGNkiDhi7Ig4Yqk4Y2NIOGImOGImOGIjeGKqOGJuyDhi63hjKvhipEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IuGLqOGKoOGJs+GImiDhiJjhibDhjI3hiaDhiKrhi6sg4Ymw4Ymg4YiL4Yi94Ym34YiNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IuGMiOGNhuGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IuGLqOGIheGJteGImOGJtSDhiLXhiKvhipUg4Ymg4Yib4YiY4YqV4Yyo4Ym1IOGIi+GLrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IuGKpeGKleGLsCDhjZIg4YuyIOGKpOGNjSDhiqDhiLXhiYDhiJ3hjKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i4YiB4YiJ4YidIOGKoOGJs+GImuGLjuGJveKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4i4Yuo4YiF4Ym14YiY4Ym1IOGImOGMiOGKk+GKmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLhjY3hiIjhjIsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i4YiB4YiJ4YidIOGKoOGJs+GImuGLjuGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IuGKoOGMiOGIjeGMjeGIjuGJtSDhiqDhiq3hiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLhi6jhjY3hiIjhjIsg4Yiz4Yyl4YqVIOGLreGJs+GLq+GIjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLhi6jhjY3hiIjhjIsg4Yiz4Yyl4YqVIOGJsOGLsOGJpeGJi+GIjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuGKoOGJs+GImiDhiqDhiq3hiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLhiqDhibPhiJog4Yid4Yio4YylIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i4Yqg4Ymz4YiaIOGKpeGIreGIsyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDhiqDhibPhiJog4Ymw4YyI4Yqd4Ym34YiNIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDhiqDhibPhiJrhi47hib0g4Ymw4YyI4Yqd4Ymw4YuL4YiNIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4Yuo4YiF4Ym14YiY4Ym1IOGKoOGMiOGIjeGMjeGIjuGJtSDhi63hiJ3hiKjhjKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuGKoOGJs+GImuGLjuGJveGKlSDhiaDhiJjhjYjhiIjhjI0g4YiL4YutIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i4Yid4YqV4YidIOGKoOGJs+GImuGLjuGJvSDhiqDhiI3hibDhjIjhipnhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4YqVIOGJoOGIm+GJsOGInSDhiIvhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4YqVIOGJoOGImOGJsOGLjSDhiIvhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuGLqOGKoOGJs+GImiDhiLXhiIXhibDhibUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuGKoOGJs+GImiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4YqVIOGKoOGMjeGLt+GIjSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOGLqOGIheGJteGImOGJtSDhiLXhiKsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOGLqOGIheGJteGImOGJtSDhiLXhiKvhi47hib0iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i4Yiw4Yit4YudIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLhiqXhipXhi7DhjIjhipMg4YyA4Yid4YitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuGKqOGKoOGJs+GImiDhjIvhiK0g4Yid4YqV4YidIOGMjeGKleGKmeGKkOGJtSDhi6jhiIjhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLhiqDhi63hibPhi4jhiYXhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIOGKoOGLreGMiOGKneGInSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLhi6jhiIXhibXhiJjhibUg4Yi14Yir4YqVIOGIm+GImOGKleGMqOGJtSDhiqDhiI3hibDhibvhiIjhiJ0iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i4Yyl4YmB4YitIOGKpeGKkyDhipDhjK0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i4YmA4YiI4YidIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IuGLqOGJgeGInSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLhi6jhi4jhiK3hi7UiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IuGIgeGIieGInSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLhiJ3hjKXhjKXhipAg4YyI4Yy94YmzIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4M2Y5MwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4i2KXYudiv2KfYr9in2Kog2KfZhNi32KfYqNi52KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLYt9io2KfYudipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i2K3Zgdi4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4i2KfZhNmI2KzZh9ipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+Iti52K/YryDYp9mE2YbYs9iuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLYrdis2YUg2KfZhNmI2LHZgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+Itij2YTZiNin2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLYp9mE2KfYqtis2KfZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+Itin2YTYtdmB2K3Yp9iqICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLYudmE2Ykg2LPYqNmK2YQg2KfZhNmF2KvYp9mE2IwgMeKAlDXYjDjYjDEx4oCUMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+ItmF2LnYp9mK2YbYqSDZgtio2YQg2KfZhNi32KjYp9i52KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuKAj9iq2KvYqNmK2Kog2KjYsdmG2KfZhdisINi52LHYtiBQREYg2YTZhNmF2LnYp9mK2YbYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i2KrYudi32ZHZhCDYqti32KjZitmCINin2YTYt9io2KfYudipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+Itin2YTYtdmB2K3Yp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i2KzYp9ix2Y0g2KXZhti02KfYoSDZhdmH2YXYqSDYp9mE2LfYqNin2LnYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IuKAj9it2YHYuCDYqNiq2YbYs9mK2YIgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+Itis2YXZiti5INin2YTYt9in2KjYudin2KrigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+ItmF2LHYqNi5INit2YjYp9ixINin2YTYt9io2KfYudipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+Itio2K3YqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiLYrNmF2YrYuSDYp9mE2LfYp9io2LnYp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i2KXYttin2YHYqSDYrtiv2YXYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Itiq2YUg2KXYuNmH2KfYsSDZhdix2KjYuSDYp9mE2KjYrdirIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+Itiq2YUg2KXYrtmB2KfYoSDZhdix2KjYuSDYp9mE2KjYrdirIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i2KXYttin2YHYqSDYt9in2KjYudipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4i2K3Yr9ivINin2YTYt9in2KjYudipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i2KrYrNin2YfZhCDYp9mE2LfYp9io2LnYqSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i2KrZhSDYp9mE2LnYq9mI2LEg2LnZhNmJIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g2LfYp9io2LnYqSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Itiq2YUg2KfZhNi52KvZiNixINi52YTZiSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INmF2YYg2KfZhNi32KfYqNi52KfYqiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+Itin2K7YqtixINiu2K/ZhdipINi32KjYp9i52KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Itin2YTYqNit2Ksg2LnZhiDYt9in2KjYudin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLZhNmFINmK2KrZhSDYp9mE2LnYq9mI2LEg2LnZhNmJINi32KfYqNi52KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+Itis2KfYsdmNINi32KjYp9i52KkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Itis2KfYsdmNINil2YTYutin2KEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i2K7Yt9inINmB2Yog2KfZhNi32KfYqNi52KkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+Itix2YHYttiqINin2YTYt9in2KjYudipIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiDZhdmH2YXYqSDYt9io2KfYudipIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiDZhdmGINmF2YfYp9mFINin2YTYt9io2KfYudipIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+Itil2YTYutin2KEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+Itil2LnYp9iv2Kkg2KrYtNi62YrZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLZhNinINmK2YjYrNivINin2KrYtdin2YQg2KjYp9mE2LfYp9io2LnYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+Iti62YrYsSDZhdi52LHZiNmBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyDYutmK2LEg2YXYqtin2K3YqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLYqti52LDYsSDYpdmG2LTYp9ihINi52YXZhNmK2Kkg2KfZhNi32KjYp9i52KkiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i2KPYqNmK2LYg2YjYo9iz2YjYryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLZhdmE2YjZhtipIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+Iti52YXZiNiv2YoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4i2KPZgdmC2YoiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+Itin2YTZg9mEIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+Itin2YTZhti32KfZgiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZS9hcnJheXMueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYmUvYXJyYXlzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQwMjc4Yy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZS9hcnJheXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxyZXNvdXJjZXM+Ci0KLSAgICA8c3RyaW5nLWFycmF5IG5hbWU9InBkZl9wcmludGVyX21lZGlhX3NpemVzIiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KLSAgICAgICAgPGl0ZW0+TkFfTEVUVEVSPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9HT1ZUX0xFVFRFUjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfTEVHQUw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0pVTklPUl9MRUdBTDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfTEVER0VSPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9UQUJMT0lEPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9JTkRFWF8zWDU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0lOREVYXzRYNjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfSU5ERVhfNVg4PC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9NT05BUkNIPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9RVUFSVE88L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0ZPT0xTQ0FQPC9pdGVtPgotICAgIDwvc3RyaW5nLWFycmF5PgotCi08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJlL2Rvbm90dHJhbnNsYXRlLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJlL2Rvbm90dHJhbnNsYXRlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUzN2FhNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZS9kb25vdHRyYW5zbGF0ZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08cmVzb3VyY2VzPgotCi0gICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfZGVmYXVsdCI+TkFfTEVUVEVSPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfc3RhbmRhcmQiPkBzdHJpbmcvbWVkaWFzaXplX3N0YW5kYXJkX25vcnRoX2FtZXJpY2E8L3N0cmluZz4KLQotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMDlhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiLQodC/0YPQu9C10YAg0LfQsCDQv9C10YfQsNGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+ItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwINC/0YDQuNC90YLQtdGA0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLQn9C10YfQsNGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i0JfQsNC/0LDQt9Cy0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4i0JzQtdGB0YLQvtC90LDQt9C90LDRh9C10L3QuNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+ItCa0L7Qv9C40Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+ItCg0LDQt9C80LXRgCDQvdCwINGF0LDRgNGC0LjRj9GC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLQptCy0Y/RgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+ItCe0YDQuNC10L3RgtCw0YbQuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i0KHRgtGA0LDQvdC40YbQuCAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i0L3QsNC/0YAuIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y8g0LfQsCDQv9C10YfQsNGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLQmNC90YHRgtCw0LvQuNGA0LDQvdC1INC90LAg0LLQuNC30YPQsNC70LjQt9Cw0YLQvtGAINC90LAgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLQn9C+0LvRg9GH0Lgg0YHQtSDRgdGA0LjQsiDQsiDQv9GA0LjQu9C+0LbQtdC90LjQtdGC0L4g0LfQsCDQvtGC0L/QtdGH0LDRgtCy0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+ItCh0YLRgNCw0L3QuNGG0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLQl9Cw0LTQsNC90LjQtdGC0L4g0LfQsCDQv9C10YfQsNGCINGB0LUg0LPQtdC90LXRgNC40YDQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+ItCX0LDQv9Cw0LfQstCw0L3QtSDQutCw0YLQviBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i0JLRgdC40YfQutC4INC/0YDQuNC90YLQtdGA0LjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+ItCU0LjQsNC70L7Qs9C+0LIg0L/RgNC+0LfQvtGA0LXRhiDQt9CwINC+0YLQv9C10YfQsNGC0LLQsNC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i0KLRitGA0YHQtdC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i0JLRgdC40YfQutC4INC/0YDQuNC90YLQtdGA0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0YPRgdC70YPQs9CwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i0J/QvtC70LXRgtC+INC30LAg0YLRitGA0YHQtdC90LUg0LUg0L/QvtC60LDQt9Cw0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLQn9C+0LvQtdGC0L4g0LfQsCDRgtGK0YDRgdC10L3QtSDQtSDRgdC60YDQuNGC0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0L/RgNC40L3RgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLQmNC30LHQuNGA0LDQvdC1INC90LAg0L/RgNC40L3RgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLQl9Cw0LHRgNCw0LLRj9C90LUg0L3QsCDQv9GA0LjQvdGC0LXRgNCwIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiLQndCw0LzQtdGA0LXQvSDQtSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INC/0YDQuNC90YLQtdGAIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i0J3QsNC80LXRgNC10L3QuCDRgdCwIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g0L/RgNC40L3RgtC10YDQsCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+ItCY0LfQsdC40YDQsNC90LUg0L3QsCDRg9GB0LvRg9Cz0LAg0LfQsCDQvtGC0L/QtdGH0LDRgtCy0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQotGK0YDRgdGP0YIg0YHQtSDQv9GA0LjQvdGC0LXRgNC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i0J3Rj9C80LAg0L3QsNC80LXRgNC10L3QuCDQv9GA0LjQvdGC0LXRgNC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i4oCePHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuKAnCDRgdC1INC+0YLQv9C10YfQsNGC0LLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IuKAnjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwg0YHQtSDQsNC90YPQu9C40YDQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i0JPRgNC10YjQutCwINCyINC/0YDQuNC90YLQtdGA0LAg0L/RgNC4IOKAnjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLQn9GA0LjQvdGC0LXRgNGK0YIg0LHQu9C+0LrQuNGA0LAg0L/RgNC4IOKAnjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4i0JfQsNC00LDQvdC40LUg0LfQsCDQvtGC0L/QtdGH0LDRgtCy0LDQvdC1OiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4i0JfQsNC00LDQvdC40Y8g0LfQsCDQvtGC0L/QtdGH0LDRgtCy0LDQvdC1OiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+ItCe0YLQutCw0LciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+ItCg0LXRgdGC0LDRgNGC0LjRgNCw0L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLQndGP0LzQsCDQstGA0YrQt9C60LAg0YEg0L/RgNC40L3RgtC10YDQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ItC90Y/QvNCwINC00LDQvdC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTINC90LUg0LUg0L3QsNC70LjRhtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+ItCX0LDQtNCw0L3QuNC10YLQviDQt9CwINC+0YLQv9C10YfQsNGC0LLQsNC90LUg0L3QtSDQvNC+0LbQsCDQtNCwINGB0LUg0LPQtdC90LXRgNC40YDQsCI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLQp9C10YDQvdC+LdCx0Y/Qu9C+IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+ItCm0LLQtdGC0L3QviI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLQktC10YDRgtC40LrQsNC70L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLQpdC+0YDQuNC30L7QvdGC0LDQu9C90L4iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+ItCS0YHQuNGH0LrQuCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLQn9C+0YDQtdC00LjRhtCwIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWNhL2FycmF5cy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jYS9hcnJheXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDAyNzhjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWNhL2FycmF5cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHJlc291cmNlcz4KLQotICAgIDxzdHJpbmctYXJyYXkgbmFtZT0icGRmX3ByaW50ZXJfbWVkaWFfc2l6ZXMiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgotICAgICAgICA8aXRlbT5OQV9MRVRURVI8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0dPVlRfTEVUVEVSPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9MRUdBTDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfSlVOSU9SX0xFR0FMPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9MRURHRVI8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX1RBQkxPSUQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0lOREVYXzNYNTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfSU5ERVhfNFg2PC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9JTkRFWF81WDg8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX01PTkFSQ0g8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX1FVQVJUTzwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfRk9PTFNDQVA8L2l0ZW0+Ci0gICAgPC9zdHJpbmctYXJyYXk+Ci0KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDI5ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iR2VzdC4gY3VlcyBpbXByLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJDb25maWd1cmFjacOzIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJbXByaW1laXgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJEZXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iRGVzdGluYWNpw7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ8OycGllcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iTWlkYSBkZWwgcGFwZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJDb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGFjacOzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iUMOgZ2luZXMgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InAuIGV4LiAxLTUsIDgsIDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJWaXN1YWxpdHphY2nDsyBwcsOodmlhIGltcHJlc3Npw7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbMK3bGEgdW4gbGVjdG9yIGRlIFBERiBwZXIgYSB2aXN1YWxpdHouIHByw6h2aWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkxcJ2FwbGljYWNpw7MgZFwnaW1wcmVzc2nDsyBoYSBmYWxsYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iUMOgZ2luZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHZW5lcmFudCB0YXNjYSBpbXByZXNzacOzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iRGVzYSBjb20gYSBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iVG90ZXMgbGVzIGltcHJlc3NvcmVz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJEacOgbGVnIGRcJ2ltcHJlc3Npw7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iQ2VyY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVG90ZXMgbGVzIGltcHJlc3NvcmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iQWZlZ2VpeCB1biBzZXJ2ZWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJFcyBtb3N0cmEgZWwgcXVhZHJlIGRlIGNlcmNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlNcJ2hhIGFtYWdhdCBlbCBxdWFkcmUgZGUgY2VyY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJBZmVnZWl4IHVuYSBpbXByZXNzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU2VsZWNjaW9uYSB1bmEgaW1wcmVzc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Ik9ibGlkYSBsYSBpbXByZXNzb3JhIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiJTXCdoYSB0cm9iYXQgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBpbXByZXNzb3JhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iU1wnaGFuIHRyb2JhdCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltcHJlc3NvcmVzIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iU2VsZWNjacOzIGRlbCBzZXJ2ZWkgZFwnaW1wcmVzc2nDsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iQ2VyY2EgZFwnaW1wcmVzc29yZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJObyBzXCdoYSB0cm9iYXQgY2FwIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJTXCdlc3TDoCBpbXByaW1pbnQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IlNcJ2VzdMOgIGNhbmNlbMK3bGFudCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJvciBkXCdpbXByZXNzb3JhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJJbXByZXNzb3JhIGJsb3F1ZWphZGEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJUYXNjYSBkXCdpbXByZXNzacOzIHBlciBhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJUYXNxdWVzIGRcJ2ltcHJlc3Npw7MgcGVyIGEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJDYW5jZWzCt2xhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJSZWluaWNpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJObyBoaSBoYSBjb25uZXhpw7MgYW1iIGxhIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJkZXNjb25lZ3V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+OiBubyBkaXNwb25pYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+Ik5vIHNcJ2hhIHBvZ3V0IGdlbmVyYXIgbGEgdGFzY2EgZFwnaW1wcmVzc2nDsyI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJCbGFuYyBpIG5lZ3JlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IkNvbG9yIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IlZlcnRpY2FsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Ikhvcml0em9udGFsIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJUb3RzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IkludGVydmFsIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RkYzcwMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iTmFzdGF2ZW7DrSB0aXNrw6FybnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJUaXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iVWxvxb5pdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkPDrWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iS29waWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlZlbGlrb3N0IHBhcMOtcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJCYXJ2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGFjZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNUUsOBTktZICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJuYXDFmS4gMeKAkzUsIDgsIDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+Ik7DoWhsZWQgdGlza3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ik5haW5zdGFsb3ZhdCBwcm9obMOtxb5lxI0gUERGICh1bW/Fvm7DrSBuw6FobGVkKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iQXBsaWthY2UgdGlza3Ugc2VsaGFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJTdHLDoW5reSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyb3bDoW7DrSDDumxvaHkgdGlza3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJVbG/Fvml0IHZlIGZvcm3DoXR1IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJWxaFlY2hueSB0aXNrw6FybnnigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkRpYWxvZyB0aXNrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJIbGVkYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVsWhZWNobnkgdGlza8Ohcm55Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iUMWZaWRhdCBzbHXFvmJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iVnlobGVkw6F2YWPDrSBwb2xlIHNlIHpvYnJhenVqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJWeWhsZWTDoXZhY8OtIHBvbGUgamUgc2tyeXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iUMWZaWRhdCB0aXNrw6FybnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJWeWJyYXQgdGlza8Ohcm51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iT2RzdHJhbml0IHRpc2vDoXJudSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iUG/EjWV0IG5hbGV6ZW7DvWNoIHRpc2vDoXJlbjogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+IlBvxI1ldCBuYWxlemVuw71jaCB0aXNrw6FyZW46IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJadm9sdGUgc2x1xb5idSB0aXNrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iVnlobGVkw6F2w6Fuw60gdGlza8OhcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTmVieWx5IG5hbGV6ZW55IMW+w6FkbsOpIHRpc2vDoXJueSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IlRpc2sgw7psb2h5IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJSdcWhZW7DrSDDumxvaHkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iQ2h5YmEgdGlza8Ohcm55IHUgw7psb2h5IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJUaXNrw6FybmEgYmxva3VqZSDDumxvaHUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJQb8SNZXQgdGlza292w71jaCDDumxvaDogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlBvxI1ldCB0aXNrb3bDvWNoIMO6bG9oOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IlpydcWhaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlc3RhcnRvdmF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik5lbHplIHNlIHDFmWlwb2ppdCBrIHRpc2vDoXJuxJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJuZXpuw6Ftw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIG5lbsOtIGsgZGlzcG96aWNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IlRpc2tvdm91IMO6bG9odSBuZWx6ZSB2eXR2b8WZaXQiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4ixIxlcm5vYsOtbGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iQmFyZXZuxJsiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iTmEgdsO9xaFrdSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJOYSDFocOtxZlrdSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVsWhZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJSb3pzYWgiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDE5MGI0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJpbnQgU3Bvb2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJQcmludGVyaW5kc3RpbGxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IlVkc2tyaXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJHZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5hdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJLb3BpZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlBhcGlyc3TDuHJyZWxzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IkZhcnZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iUmV0bmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNpZGVyICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJmLmVrcy4gMS01LDgsMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlZpcyB1ZHNrcmlmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsbGVyIGV0IFBERi12aXNuaW5nc3Byb2cuIGZvciBhdCBzZSBla3NlbXBlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iVWRza3Jpdm5pbmdzYXBwIGdpayBuZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iU2lkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJVZHNrcmlmdGVuIGdlbmVyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJHZW0gc29tIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJBbGxlIHByaW50ZXJlLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJVZHNrcmlmdHNkaWFsb2ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU8O4ZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJBbGxlIHByaW50ZXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iVGlsZsO4aiB0amVuZXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IlPDuGdlZmVsdGV0IHZpc2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlPDuGdlZmVsdGV0IGVyIHNranVsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IlRpbGbDuGogcHJpbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IlbDpmxnIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJHbGVtIHByaW50ZXIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IkRlciBibGV2IGZ1bmRldCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiJEZXIgYmxldiBmdW5kZXQgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVyZSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlbDpmxnIHVkc2tyaWZ0c3RqZW5lc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTw7hnZXIgZWZ0ZXIgcHJpbnRlcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJEZXIgYmxldiBpa2tlIGZ1bmRldCBub2dlbiBwcmludGVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gdWRza3JpdmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBhbm51bGxlcmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJVZHNrcmlmdGVuIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gbWlzbHlra2VkZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGVyZW4gaGFyIGJsb2tlcmV0IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPi11ZHNrcmlmdHNqb2IiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+LXVkc2tyaWZ0c2pvYnMiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQW5udWxsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IkdlbnN0YXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkluZ2VuIGZvcmJpbmRlbHNlIHRpbCBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idWtlbmR0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBpa2tlIHRpbGfDpm5nZWxpZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJEZXIga3VubmUgaWtrZSBnZW5lcmVyZXMgZXQgdWRza3JpZnRzam9iIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IlNvcnQvaHZpZCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJGYXJ2ZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0csOmdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJMYW5kc2thYiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iQWxsZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJJbnRlcnZhbCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiODNhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJEcnVjay1TcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IkRydWNrZXJlaW5zdGVsbHVuZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iRHJ1Y2tlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlNwZWljaGVybiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IlppZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iRXhlbXBsYXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQYXBpZXJncsO2w59lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iRmFyYmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJBdXNyaWNodHVuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNlaXRlbiAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iei7CoEIuIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJWb3JzY2hhdSBkcnVja2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJQREYtVmlld2VyIGbDvHIgVm9yc2NoYXUgaW5zdGFsbGllcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJEcnVjay1BcHAgYWJnZXN0w7xyenQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iU2VpdGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iRHJ1Y2thdWZ0cmFnIHdpcmQgZ2VuZXJpZXJ0Li4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iQWxzIFBERiBzcGVpY2hlcm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iQWxsZSBEcnVja2Vy4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJEcnVja2RpYWxvZ2ZlbGQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU3VjaGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IkFsbGUgRHJ1Y2tlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IkRpZW5zdCBoaW56dWbDvGdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IlN1Y2hmZWxkIGFuZ2V6ZWlndCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJTdWNoZmVsZCBhdXNnZWJsZW5kZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJEcnVja2VyIGhpbnp1ZsO8Z2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iRHJ1Y2tlciBhdXN3w6RobGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iRHJ1Y2tlciB3aWVkZXIgdmVyZ2Vzc2VuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IERydWNrZXIgZ2VmdW5kZW4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IERydWNrZXIgZ2VmdW5kZW4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJEcnVja2RpZW5zdCBhdXN3w6RobGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTdWNoZSBuYWNoIERydWNrZXJuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iS2VpbmUgRHJ1Y2tlciBnZWZ1bmRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gd2lyZCBnZWRydWNrdC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gd2lyZCBhYmdlYnJvY2hlbi4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iRHJ1Y2tlcmZlaGxlciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iRHJ1Y2tlciBoYXQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBibG9ja2llcnQuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IkRydWNrYXVmdHJhZyBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz5cIiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IkRydWNrYXVmdHLDpGdlIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPlwiIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFiYnJlY2hlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iTmV1IHN0YXJ0ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iS2VpbmUgVmVyYmluZHVuZyB6dW0gRHJ1Y2tlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+InVuYmVrYW5udCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgbmljaHQgdmVyZsO8Z2JhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJEcnVja2F1ZnRyYWcga29ubnRlIG5pY2h0IGdlbmVyaWVydCB3ZXJkZW4uIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IlNjaHdhcnotd2Vpw58iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iRmFyYmUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iSG9jaGZvcm1hdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJRdWVyZm9ybWF0IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJBbGxlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IkJlcmVpY2giPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTVlNzMwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4izpvOv86zzrnPg868zrnOus+MIM6/z4XPgc6sz4IgzrXOus+Ez43PgM+Jz4POt8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+Is6hz4XOuM68zq/Pg861zrnPgiDOtc66z4TPhc+Az4nPhM6uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4izpXOus+Ez43PgM+Jz4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+Is6Rz4DOv864zq7Ous61z4XPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4izqDPgc6/zr/Pgc65z4POvM+Mz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4izpHOvc+Ezq/Os8+BzrHPhs6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLOnM6tzrPOtc64zr/PgiDPh86xz4HPhM65zr/PjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+Is6nz4HPjs68zrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLOoM+Bzr/Pg86xzr3Osc+Ezr/Ou865z4POvM+Mz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLOo861zrvOr860zrXPgiAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iz4Auz4cuIDEtNSw4LDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLOoM+Bzr/Otc+AzrnPg866z4zPgM63z4POtyDOtc66z4TPjc+Az4nPg863z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Is6VzrPOus6xz4TOsc+Dz4TOrs+Dz4TOtSDPhM6/IFBERiB2aWV3ZXIgzrPOuc6xIM+Az4HOv861z4DOuc+DzrrPjM+AzrfPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLOlM65zrHOus6/z4DOriDOu861zrnPhM6/z4XPgc6zzq/Osc+CIM61z4bOsc+BzrzOv86zzq7PgiDOtc66z4TPjc+Az4nPg863z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4izqPOtc67zq/OtM61z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLOlM63zrzOuc6/z4XPgc6zzq/OsSDOtc+BzrPOsc+Dzq/Osc+CIM61zrrPhM+Nz4DPic+DzrfPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+Is6Rz4DOv864zq7Ous61z4XPg863IM+Jz4IgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+Is6MzrvOv865IM6/zrkgzrXOus+Ez4XPgM+Jz4TOrc+C4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLOoM67zrHOr8+DzrnOvyDOtM65zrHOu8+MzrPOv8+FIM61zrrPhM+Nz4DPic+DzrfPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLOkc69zrHOts6uz4TOt8+DzrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4izozOu86/zrkgzr/OuSDOtc66z4TPhc+Az4nPhM6tz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiLOoM+Bzr/Pg864zq7Ous63IM+Fz4DOt8+BzrXPg86vzrHPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Is6VzrzPhs6szr3Ouc+Dzrcgz4DOu86xzrnPg86vzr/PhSDOsc69zrHOts6uz4TOt8+DzrfPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLOkc+Az4zOus+Bz4XPiM63IM+AzrvOsc65z4POr86/z4UgzrHOvc6xzrbOrs+EzrfPg863z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLOoM+Bzr/Pg864zq7Ous63IM61zrrPhM+Fz4DPic+Ezq4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLOlc+AzrnOu86/zrPOriDOtc66z4TPhc+Az4nPhM6uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4izpTOuc6xzrPPgc6xz4bOriDOtc66z4TPhc+Az4nPhM6uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiLOks+Bzq3OuM63zrrOtSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IM61zrrPhM+Fz4DPic+Ezq7PgiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Is6Sz4HOrc64zrfOus6xzr0gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDOtc66z4TPhc+Az4nPhM6tz4IiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLOlc+AzrnOu86tzr7PhM61IM+Fz4DOt8+BzrXPg86vzrEgzrXOus+Ez43PgM+Jz4POt8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLOkc69zrHOts6uz4TOt8+DzrcgzrPOuc6xIM61zrrPhM+Fz4DPic+Ezq3PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Is6UzrXOvSDOss+Bzq3OuM63zrrOsc69IM61zrrPhM+Fz4DPic+Ezq3PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+Is6VzrrPhM+Nz4DPic+DzrcgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Is6RzrrPjc+Bz4nPg863IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Is6jz4bOrM67zrzOsSDOtc66z4TPhc+Az4nPhM6uIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLOnyDOtc66z4TPhc+Az4nPhM6uz4IgzrHPgM6tzrrOu861zrnPg861IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4izrXPgc6zzrHPg86vzrEgzrXOus+Ez43PgM+Jz4POt8+CIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiLOtc+BzrPOsc+Dzq/Otc+CIM61zrrPhM+Nz4DPic+DzrfPgiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+Is6RzrrPjc+Bz4nPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLOlc+AzrHOvc61zrrOus6vzr3Ot8+DzrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4izpTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Dz43Ovc60zrXPg863IM68zrUgzrXOus+Ez4XPgM+Jz4TOriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+Is6szrPOvc+Jz4PPhM6/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyDOvM63IM60zrnOsc64zq3Pg865zrzOvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLOlM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM60zrfOvM65zr/Phc+BzrPOr86xIM61z4HOs86xz4POr86xz4IgzrXOus+Ez43PgM+Jz4POt8+CIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+Is6Rz4PPgM+Bz4zOvM6xz4XPgc6/IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+Is6nz4HPjs68zrEiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4izqDOv8+Bz4TPgc6xzq/PhM6/IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Is6fz4HOuc62z4zOvc+EzrnOsSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4izozOu86xIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+Is6Vz43Pgc6/z4IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzcyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJpbnQgU3Bvb2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJQcmludGVyIHNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iUHJpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJTYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iRGVzdGluYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ29waWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQYXBlciBTaXplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iQ29sb3VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQYWdlcyAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iZS5nLiAx4oCTNSw4LDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByaW50IHByZXZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGwgUERGIHZpZXdlciBmb3IgcHJldmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iUHJpbnRpbmcgYXBwIGNyYXNoZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iUGFnZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHZW5lcmF0aW5nIHByaW50IGpvYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNhdmUgYXMgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IkFsbCBwcmludGVyc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iUHJpbnQgZGlhbG9ndWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IkFsbCBwcmludGVycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IkFkZCBzZXJ2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iU2VhcmNoIGJveCBzaG93biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJTZWFyY2ggYm94IGhpZGRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkFkZCBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU2VsZWN0IHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJGb3JnZXQgcHJpbnRlciI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVyIGZvdW5kIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVycyBmb3VuZCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkNob29zZSBwcmludCBzZXJ2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTZWFyY2hpbmcgZm9yIHByaW50ZXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTm8gcHJpbnRlcnMgZm91bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJQcmludGluZyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQ2FuY2VsbGluZyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJQcmludGVyIGVycm9yIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGVyIGJsb2NrZWQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IHByaW50IGpvYiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4gcHJpbnQgam9icyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJDYW5jZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlc3RhcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iTm8gY29ubmVjdGlvbiB0byBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idW5rbm93biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgdW5hdmFpbGFibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iQ291bGRuXCd0IGdlbmVyYXRlIHByaW50IGpvYiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJCbGFjayAmYW1wOyBXaGl0ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJDb2xvdXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUG9ydHJhaXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTGFuZHNjYXBlIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJBbGwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iUmFuZ2UiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzcyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJpbnQgU3Bvb2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJQcmludGVyIHNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iUHJpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJTYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iRGVzdGluYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ29waWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQYXBlciBTaXplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iQ29sb3VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQYWdlcyAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iZS5nLiAx4oCTNSw4LDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByaW50IHByZXZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGwgUERGIHZpZXdlciBmb3IgcHJldmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iUHJpbnRpbmcgYXBwIGNyYXNoZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iUGFnZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHZW5lcmF0aW5nIHByaW50IGpvYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNhdmUgYXMgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IkFsbCBwcmludGVyc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iUHJpbnQgZGlhbG9ndWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IkFsbCBwcmludGVycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IkFkZCBzZXJ2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iU2VhcmNoIGJveCBzaG93biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJTZWFyY2ggYm94IGhpZGRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkFkZCBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU2VsZWN0IHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJGb3JnZXQgcHJpbnRlciI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVyIGZvdW5kIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVycyBmb3VuZCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkNob29zZSBwcmludCBzZXJ2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTZWFyY2hpbmcgZm9yIHByaW50ZXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTm8gcHJpbnRlcnMgZm91bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJQcmludGluZyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQ2FuY2VsbGluZyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJQcmludGVyIGVycm9yIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGVyIGJsb2NrZWQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IHByaW50IGpvYiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4gcHJpbnQgam9icyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJDYW5jZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlc3RhcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iTm8gY29ubmVjdGlvbiB0byBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idW5rbm93biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgdW5hdmFpbGFibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iQ291bGRuXCd0IGdlbmVyYXRlIHByaW50IGpvYiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJCbGFjayAmYW1wOyBXaGl0ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJDb2xvdXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUG9ydHJhaXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTGFuZHNjYXBlIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJBbGwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iUmFuZ2UiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXMtclVTL2FycmF5cy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvYXJyYXlzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQwMjc4Yy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvYXJyYXlzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08cmVzb3VyY2VzPgotCi0gICAgPHN0cmluZy1hcnJheSBuYW1lPSJwZGZfcHJpbnRlcl9tZWRpYV9zaXplcyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+Ci0gICAgICAgIDxpdGVtPk5BX0xFVFRFUjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfR09WVF9MRVRURVI8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0xFR0FMPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9KVU5JT1JfTEVHQUw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0xFREdFUjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfVEFCTE9JRDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfSU5ERVhfM1g1PC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9JTkRFWF80WDY8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0lOREVYXzVYODwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfTU9OQVJDSDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfUVVBUlRPPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9GT09MU0NBUDwvaXRlbT4KLSAgICA8L3N0cmluZy1hcnJheT4KLQotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdkMTJhZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJDb2xhIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iQ29uZmlnLiBkZSBpbXByZXNvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJbXByaW1pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+Ikd1YXJkYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IkNvcGlhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iVGFtYcOxbyBkZWwgcGFwZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJDb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGFjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlDDoWdpbmFzICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJFai46IDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlZpc3RhIHByZXZpYSBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJJbnN0YWxhciB2aXN1YWxpemFkb3IgZGUgUERGIHBhcmEgdmlzdGEgcHJldmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJMYSBhcGxpY2FjacOzbiBkZSBpbXByZXNpw7NuIGZhbGzDsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJQw6FnaW5hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyYW5kbyB0cmFiYWpvIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJHdWFyZGFyIGNvbW8gUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlRvZGFzIGxhcyBpbXByZXNvcmFz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJDdWFkcm8gZGUgZGnDoWxvZ28gZGUgaW1wcmVzacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJCdXNjYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVG9kYXMgbGFzIGltcHJlc29yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJBZ3JlZ2FyIHNlcnZpY2lvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iQ3VhZHJvIGRlIGLDunNxdWVkYSB2aXNpYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IkN1YWRybyBkZSBiw7pzcXVlZGEgb2N1bHRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iQWdyZWdhciBpbXByZXNvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJTZWxlY2Npb25hciBpbXByZXNvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJObyByZWNvcmRhciBpbXByZXNvcmEiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IlNlIGVuY29udHLDsyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltcHJlc29yYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiJTZSBlbmNvbnRyYXJvbiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltcHJlc29yYXMuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iRWxlZ2lyIHNlcnZpY2lvIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IkJ1c2NhbmRvIGltcHJlc29yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJObyBzZSBlbmNvbnRyYXJvbiBpbXByZXNvcmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSW1wcmltaWVuZG8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkNhbmNlbGFuZG8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iRXJyb3IgZGUgaW1wcmVzb3JhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJMYSBpbXByZXNvcmEgYmxvcXVlw7MgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iVHJhYmFqbyBkZSBpbXByZXNpw7NuIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJUcmFiYWpvcyBkZSBpbXByZXNpw7NuIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQ2FuY2VsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlaW5pY2lhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJObyBoYXkgY29uZXhpw7NuIGNvbiBsYSBpbXByZXNvcmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4iZGVzY29ub2NpZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz46IG5vIGRpc3BvbmlibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iRXJyb3IgYWwgZ2VuZXJhciBlbCB0cmFiYWpvIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iQmxhbmNvIHkgbmVncm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iQ29sb3IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iVmVydGljYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iSG9yaXpvbnRhbCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVG9kYXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iSW50ZXJ2YWxvIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyNWNhZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IkNvbGEgZGUgaW1wcmVzacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJBanVzdGVzIGRlIGltcHJlc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkltcHJpbWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iR3VhcmRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkRlc3Rpbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ29waWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJUYW1hw7FvIGRlbCBwYXBlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IkNvbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YWNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iUMOhZ2luYXMgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InAuIGVqLjogMS01LCA4LCAxMS0xMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iVmlzdGEgcHJldmlhIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGFyIHZpc29yIFBERiBwYXJhIG9idGVuZXIgdmlzdGEgcHJldmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJFcnJvciBkZSBhcGxpY2FjacOzbiBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlDDoWdpbmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iR2VuZXJhbmRvIHRyYWJham8gZGUgaW1wcmVzacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+Ikd1YXJkYXIgY29tbyBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iVG9kYXMgbGFzIGltcHJlc29yYXPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkN1YWRybyBkZSBkacOhbG9nbyBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IkJ1c2NhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJUb2RhcyBsYXMgaW1wcmVzb3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IkHDsWFkaXIgc2VydmljaW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJDdWFkcm8gZGUgYsO6c3F1ZWRhIHZpc2libGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iQ3VhZHJvIGRlIGLDunNxdWVkYSBvY3VsdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJBw7FhZGlyIGltcHJlc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IlNlbGVjY2lvbmFyIGltcHJlc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IkJvcnJhciBpbXByZXNvcmEiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IlNlIGhhIGVuY29udHJhZG8gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBpbXByZXNvcmEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiJTZSBoYW4gZW5jb250cmFkbyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltcHJlc29yYXMiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJTZWxlY2Npb25hciBzZXJ2aWNpbyBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJCdXNjYW5kbyBpbXByZXNvcmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTm8gc2UgZW5jb250cmFyb24gaW1wcmVzb3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IkltcHJpbWllbmRvIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJDYW5jZWxhbmRvIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVycm9yIGRlIGltcHJlc29yYSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iTGEgaW1wcmVzb3JhIGhhIGJsb3F1ZWFkbyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlRyYWJham8gZGUgaW1wcmVzacOzbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iVHJhYmFqb3MgZGUgaW1wcmVzacOzbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkNhbmNlbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJWb2x2ZXIgYSBlbXBlemFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik5vIGhheSBjb25leGnDs24gY29uIGxhIGltcHJlc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ImRlc2Nvbm9jaWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBubyBkaXNwb25pYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IkVycm9yIGFsIGdlbmVyYXIgZWwgdHJhYmFqbyBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IkJsYW5jbyB5IG5lZ3JvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IkNvbG9yIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IlZlcnRpY2FsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Ikhvcml6b250YWwiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IlRvZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iSW50ZXJ2YWxvIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjNiMzUyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW5kaXNwdXVsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iUHJpbnRlcmkgc2VhZGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iUHJpbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iU2FsdmVzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJTaWh0a29odCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJLb29waWFpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iUGFiZXJpZm9ybWFhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IlbDpHJ2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iU3V1bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJMZWh0aSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4ibnQgMeKAkzUsIDgsIDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByaW5kaSBlZWx2YWFkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iUERGLXZhYXR1cmkgaW5zdGFsbGltaW5lIGVlbHZhYXRlIGt1dmFtaXNla3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IlByaW50aW1pc3Jha2VuZHVzIGpvb2tzaXMga29ra3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iTGVoZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJQcmluZGl0w7bDtiBsb29taW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU2FsdmVzdGEgUERGLWluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJLw7VpayBwcmludGVyaWQg4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJQcmludGltaXNkaWFsb29nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+Ik90c2luZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJLw7VpayBwcmludGVyaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJMaXNhIHRlZW51cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Ik90c2luZ3VrYXN0IG9uIGt1dmF0dWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iT3RzaW5ndWthc3Qgb24gcGVpZGV0dWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJMaXNhIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJQcmludGVyaSB2YWxpbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlByaW50ZXJpIHVudXN0YW1pbmUiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IkxlaXRpIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlciI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+IkxlaXRpIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlcml0IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iUHJpbmRpdGVlbnVzZSB2YWxpbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJpbnRlcml0ZSBvdHNpbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IlByaW50ZXJlaWQgZWkgbGVpdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iUHJpbmRpdMO2w7YgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBwcmludGltaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iUHJpbmRpdMO2w7YgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiB0w7xoaXN0YW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlByaW50ZXJpIHZpZ2E6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGVyIGJsb2tlZXJpcyB0w7bDtiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlByaW5kaXTDtsO2IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJQcmluZGl0w7bDtmQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJUw7xoaXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iVGFhc2vDpGl2aXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IlByaW50ZXJpw7xoZW5kdXMgcHV1ZHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idGVhZG1hdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIHBvbGUgc2FhZGF2YWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iUHJpbmRpdMO2w7ZkIGVpIHNhYW51ZCBsdXVhIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+Ik11c3R2YWxnZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJWw6RydiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJWZXJ0aWthYWxwYWlndXR1cyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJIb3Jpc29udGFhbHBhaWd1dHVzIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJLw7VpayI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJWYWhlbWlrIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliYWUzMjMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiLZh9mF2KfZh9mG2q/igIzaqdmG2YbYr9mHINqG2KfZviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLYqtmG2LjbjNmF2KfYqiDahtin2b7ar9ixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4i2obYp9m+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i2LDYrtuM2LHZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+ItmF2YLYtdivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+Itqp2b7bjOKAjNmH2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+Itin2YbYr9in2LLZhyDaqdin2LrYsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+Itix2Ybar9uMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i2KzZh9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i2LXZgdit2KfYqiAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i4oCP4oCP4oCO2YXYq9mE2KfZi8Kg27HigJTbtdiM4oCP27nYjNu34oCU27HbsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i2b7bjNi04oCM2YbZhdin24zYtCDahtin2b4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuKAj9mG2LXYqCDZhtmF2KfbjNi02q/YsSBQREYg2KjYsdin24wg2b7bjNi04oCM2YbZhdin24zYtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i2KjYsdmG2KfZhdmHINqG2KfZviDYrtix2KfYqCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+Iti12YHYrdin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLYr9ixINit2KfZhCDYp9uM2KzYp9ivINqp2KfYsSDahtin2b4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiLigI/YsNiu24zYsdmHINio2YfigIzYudmG2YjYp9mGIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLZh9mF2Ycg2obYp9m+2q/YsdmH2KcuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+ItqG2KfZviDar9mB2Krar9mIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+Itis2LPYqtis2YgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i2YfZhdmHINqG2KfZvtqv2LHZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i2KfZgdiy2YjYr9mGINiz2LHZiNuM2LMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLaqdin2K/YsSDYrNiz2KrYrNmIINmG2YXYp9uM2KfZhiDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+Itqp2KfYr9ixINis2LPYqtis2Ygg2b7ZhtmH2KfZhiDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i2KfZgdiy2YjYr9mGINqG2KfZvtqv2LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLYp9mG2KrYrtin2Kgg2obYp9m+2q/YsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+ItmB2LHYp9mF2YjYtCDaqdix2K/ZhiDahtin2b7ar9ixIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INqG2KfZvtqv2LEg24zYp9mB2Kog2LTYryI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g2obYp9m+2q/YsSDbjNin2YHYqiDYtNivIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i2KfZhtiq2K7Yp9ioINiz2LHZiNuM2LMg2obYp9m+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLYr9ixINit2KfZhCDYrNiz2KrYrNmIINio2LHYp9uMINqG2KfZvtqv2LHZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i2YfbjNqGINqG2KfZvtqv2LHbjCDbjNin2YHYqiDZhti02K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLYr9ixINit2KfZhCDahtin2b4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Itiv2LEg2K3Yp9mEINmE2LrZiCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLYrti32KfbjCDahtin2b7ar9ixIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLahtin2b7ar9ix2Iwg2qnYp9ixIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g2LHYpyDZhdiz2K/ZiNivINqp2LHYryI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiLaqdin2LEg2obYp9m+IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiLaqdin2LHZh9in24wg2obYp9m+IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i2YTYutmIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLYsdin2YfigIzYp9mG2K/Yp9iy24wg2YXYrNiv2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i2KfYqti12KfZhCDYqNinINqG2KfZvtqv2LEg2KjYsdmC2LHYp9ixINmG24zYs9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i2YbYp9mF2LnZhNmI2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gLSDYr9ixINiv2LPYqtix2LMg2YbbjNiz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i2qnYp9ixINqG2KfZviDYp9uM2KzYp9ivINmG2LTYryI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLYs9uM2KfZhyDZiCDYs9mB24zYryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLYsdmG2q/bjCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLYudmF2YjYr9uMIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Itin2YHZgtuMIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLZh9mF2YciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i2YXYrdiv2YjYr9mHIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1OGUwNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlRhdXN0YXR1bG9zdHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IlR1bG9zdGltZW4gYXNldHVrc2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iVHVsb3N0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlRhbGxlbm5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iS29oZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iS29waW90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQYXBlcmlrb2tvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iVsOkcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJTdXVudGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJTaXZ1dCAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iZXNpbS4gMeKAkzUsOCwxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJUdWxvc3R1a3NlbiBlc2lrYXRzZWx1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJBc2VubmEgUERGLWthdHNlbHVvaGplbG1hIGVzaWthdHNlbHVhIHZhcnRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iVHVsb3N0dXNzb3ZlbGx1cyBrYWF0dWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iU2l2dXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJMdW9kYWFuIHR1bG9zdHVzdHnDtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlRhbGxlbm5hIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJLYWlra2kgdHVsb3N0aW1ldOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iVHVsb3N0dXNpa2t1bmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iSGFrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJLYWlra2kgdHVsb3N0aW1ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+Ikxpc8Okw6QgcGFsdmVsdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Ikhha3VrZW50dMOkIG7DpGt5dmlzc8OkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+Ikhha3VrZW50dMOkIHBpaWxvdGV0dHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJMaXPDpMOkIHR1bG9zdGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iVmFsaXRzZSB0dWxvc3RpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlVub2hkYSB0dWxvc3RpbiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iTMO2eXR5aSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHR1bG9zdGluIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iTMO2eXR5aSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHR1bG9zdGludGEiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJWYWxpdHNlIHR1bG9zdHVzcGFsdmVsdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iRXRzaXTDpMOkbiB0dWxvc3RpbWlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iVHVsb3N0aW1pYSBlaSBsw7Z5ZHkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJUdWxvc3RldGFhbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iUGVydXV0ZXRhYW4gdHnDtiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJUdWxvc3RpbnZpcmhlIHR5w7ZsbGUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlR1bG9zdGluIGVzdGkgdHnDtm4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJUdWxvc3R1c3R5w7YgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlR1bG9zdHVzdHnDtnQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJQZXJ1dXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJLw6R5bm5pc3TDpCB1dWRlbGxlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iRWkgeWh0ZXl0dMOkIHR1bG9zdGltZWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idHVudGVtYXRvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgZWkga8OkeXRldHTDpHZpc3PDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJUdWxvc3R1c3R5w7Z0w6QgZWkgdm9pdHUgbHVvZGEiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iTXVzdGF2YWxrb2luZW4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iVsOkcmkiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUHlzdHkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iVmFha2EiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IkthaWtraSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJWw6RsaSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzMzUyYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJGaWxlIGRcJ2F0dC4gaW1wci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iUGFyYW3DqHRyZXMgZGUgbFwnaW1wcmltYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkltcHJpbWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iRW5yZWdpc3RyZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5hdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJDb3BpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IkZvcm1hdCBkdSBwYXBpZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJDb3VsZXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQYWdlcyAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4icC4gZXguIDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IkFwZXLDp3UgYXZhbnQgaW1wcmVzc2lvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsbGVyIHVuIGxlY3RldXIgUERGIHBvdXIgdm9pciBsXCdhcGVyw6d1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJMXCdhcHBsaWNhdGlvbiDDoCBsXCdvcmlnaW5lIGRlIGxcJ2ltcHJlc3Npb24gYSBwbGFudMOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlBhZ2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iR8OpbsOpcmF0aW9uIHTDomNoZSBpbXByZXNzaW9u4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iRW5yZWdpc3RyZXIgZW4gZm9ybWF0IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJUb3V0ZXMgbGVzIGltcHJpbWFudGVz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJCb8OudGUgZGUgZGlhbG9ndWUgZFwnaW1wcmVzc2lvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJSZWNoZXJjaGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlRvdXRlcyBsZXMgaW1wcmltYW50ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJBam91dGVyIGxlIHNlcnZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJDaGFtcCBkZSByZWNoZXJjaGUgYWZmaWNow6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iQ2hhbXAgZGUgcmVjaGVyY2hlIG1hc3F1w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJBam91dGVyIHVuZSBpbXByaW1hbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU8OpbGVjdGlvbm5lciB1bmUgaW1wcmltYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlN1cHByaW1lciBsXCdpbXByaW1hbnRlIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+wqBpbXByaW1hbnRlIHRyb3V2w6llIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPsKgaW1wcmltYW50ZXMgdHJvdXbDqWVzIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iU8OpbGVjdGlvbm5lciBsZSBzZXJ2aWNlIGRcJ2ltcHJlc3Npb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlJlY2hlcmNoZSBkXCdpbXByaW1hbnRlcyBlbiBjb3Vycy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IkF1Y3VuZSBpbXByaW1hbnRlIHRyb3V2w6llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSW1wcmVzc2lvbiBkZSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IGVuIGNvdXJz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQW5udWxhdGlvbiBkZSDCq8KgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPsKgwrvigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVycmV1ciBpbXByZXNzaW9uIDogwqvCoDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7CoMK7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iSW1wcmVzc2lvbiBkZSDCq8KgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPsKgwrsgYmxvcXXDqWUiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iVMOiY2hlIGRcJ2ltcHJlc3Npb24gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlTDomNoZXMgZFwnaW1wcmVzc2lvbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFubnVsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlY29tbWVuY2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkF1Y3VuZSBjb25uZXhpb24gw6AgbFwnaW1wcmltYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ImluY29ubnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCUIGluZGlzcG9uaWJsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJJbXBvc3NpYmxlIGRlIGfDqW7DqXJlciBsYSB0w6JjaGUgZFwnaW1wcmVzc2lvbiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJOb2lyIGV0IGJsYW5jIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IkNvdWxldXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUG9ydHJhaXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iUGF5c2FnZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVG91cyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJQbGFnZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYjU1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJTcG91bGVyIGltcHJlc3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IlBhcmFtw6h0cmVzIGRlIGxcJ2ltcHJpbWFudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJbXByaW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IkVucmVnaXN0cmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iRGVzdGluYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ29waWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJGb3JtYXQgZHUgcGFwaWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iQ291bGV1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGF0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iUGFnZXMgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+ImV4LsKgOiAxLTUsIDgsIDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJBcGVyw6d1IGF2YW50IGltcHJlc3Npb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGxlciB1biBsZWN0ZXVyIFBERiBwb3VyIGFmZmljaGVyIGxcJ2FwZXLDp3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkxcJ2FwcGxpY2F0aW9uIMOgIGxcJ29yaWdpbmUgZGUgbFwnaW1wcmVzc2lvbiBhIHBsYW50w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iUGFnZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHw6luw6lyYXRpb24gdMOiY2hlIGltcHJlc3Npb27igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJFbnJlZ2lzdHJlciBhdSBmb3JtYXQgLlBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJUb3V0ZXMgbGVzIGltcHJpbWFudGVz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJCb8OudGUgZGUgZGlhbG9ndWUgZFwnaW1wcmVzc2lvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJSZWNoZXJjaGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlRvdXRlcyBsZXMgaW1wcmltYW50ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJBam91dGVyIHVuIHNlcnZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJDaGFtcCBkZSByZWNoZXJjaGUgYWZmaWNow6kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IkNoYW1wIGRlIHJlY2hlcmNoZSBtYXNxdcOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkFqb3V0ZXIgdW5lIGltcHJpbWFudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJTw6lsZWN0aW9ubmVyIHVuZSBpbXByaW1hbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iU3VwcHJpbWVyIGxcJ2ltcHJpbWFudGUiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz7CoGltcHJpbWFudGUgdHJvdXbDqWUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPsKgaW1wcmltYW50ZXMgdHJvdXbDqWVzLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlPDqWxlY3Rpb25uZXIgbGUgc2VydmljZSBkXCdpbXByZXNzaW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJSZWNoZXJjaGUgZFwnaW1wcmltYW50ZXMgZW4gY291cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJBdWN1bmUgaW1wcmltYW50ZSB0cm91dsOpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IkltcHJlc3Npb24gZGUgXCI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+XCIgZW4gY291cnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJBbm51bGF0aW9uIGRlIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwiIGVuIGNvdXJz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJldXIgaW1wcmVzc2lvbiBwb3VyIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iSW1wcmVzc2lvbiBkZSBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiBibG9xdcOpZSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IHTDomNoZSBkXCdpbXByZXNzaW9uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiB0w6JjaGVzIGRcJ2ltcHJlc3Npb24iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQW5udWxlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iUmVkw6ltYXJyZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iQXVjdW5lIGNvbm5leGlvbiDDoCBsXCdpbXByaW1hbnRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ImluY29ubnVlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBpbmRpc3BvbmlibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iSW1wb3NzaWJsZSBkZSBnw6luw6lyZXIgbGEgdMOiY2hlIGRcJ2ltcHJlc3Npb24uIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+Ik5vaXIgZXQgYmxhbmMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iQ291bGV1ciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0cmFpdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJQYXlzYWdlIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJUb3V0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IlBsYWdlIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0MDZiNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuCkquCljeCksOCkv+CkguCknyDgpLjgpY3gpKrgpYLgpLLgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkuOClh+Ckn+Ckv+CkguCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IuCkquCljeCksOCkv+CkguCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLgpLjgpLngpYfgpJzgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLgpJfgpILgpKTgpLXgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i4KSq4KWN4KSw4KSk4KS/4KSv4KS+4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLgpJXgpL7gpJfgpJzgpLwg4KSV4KS+IOCkhuCkleCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IuCksOCkguCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IuCkheCkreCkv+CkteCkv+CkqOCljeKAjeCkr+CkvuCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IuCkquClg+Ckt+CljeKAjeCkoCAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i4KSJ4KSm4KS+LiAx4oCUNSw4LDEx4oCUMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IuCkquCljeCksOCkv+CkguCknyDgpKrgpYLgpLDgpY3gpLXgpL7gpLXgpLLgpYvgpJXgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuCkquClguCksOCljeCkteCkvuCkteCksuCli+CkleCkqCDgpJXgpYcg4KSy4KS/4KSPIFBERiDgpLXgpY3gpK/gpYLgpIXgpLAg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KS/4KSC4KSXIOCkj+CkquCljeCksuCkv+CkleClh+CktuCkqCDgpJXgpY3gpLDgpYjgpLYg4KS54KWLIOCkl+Ckr+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiLgpKrgpYPgpLfgpY3gpKAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLgpKrgpY3gpLDgpL/gpILgpJ8g4KSV4KS+4KSw4KWN4KSvIOCknOCkqOCksOClh+CknyDgpLngpYsg4KSw4KS54KS+IOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlBERiDgpJXgpYcg4KSw4KWC4KSqIOCkruClh+CkgiDgpLjgpLngpYfgpJzgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i4KS44KSt4KWAIOCkquCljeCksOCkv+CkguCkn+CksC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4i4KSq4KWN4KSw4KS/4KSC4KSfIOCkuOCkguCkteCkvuCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLgpJbgpYvgpJzgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i4KS44KSt4KWAIOCkquCljeCksOCkv+CkguCkn+CksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IuCkuOClh+CkteCkviDgpJzgpYvgpKHgpLzgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLgpJbgpYvgpJwg4KSs4KWJ4KSV4KWN4KS4IOCkquCljeCksOCkpuCksOCljeCktuCkv+CkpCDgpLngpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4i4KSW4KWL4KScIOCkrOClieCkleCljeCkuCDgpJvgpL/gpKrgpL4g4KS54KWB4KSGIOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuCkquCljeCksOCkv+CkguCkn+CksCDgpJzgpYvgpKHgpLzgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLgpKrgpY3gpLDgpL/gpILgpJ/gpLAg4KSa4KWB4KSo4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkleCliyDgpK3gpYLgpLIg4KSc4KS+4KSP4KSCIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IOCkquCljeCksOCkv+CkguCkn+CksCDgpK7gpL/gpLLgpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IOCkquCljeCksOCkv+CkguCkn+CksCDgpK7gpL/gpLLgpYciPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLgpKrgpY3gpLDgpL/gpILgpJ8g4KS44KWH4KS14KS+IOCkmuClgeCkqOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkluCli+CknCDgpLDgpLngpL4g4KS54KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i4KSV4KWL4KSIIOCkquCljeCksOCkv+CkguCkn+CksCDgpKjgpLngpYDgpIIg4KSu4KS/4KSy4KWHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpKrgpY3gpLDgpL/gpILgpJ8g4KS54KWLIOCksOCkueCkviDgpLngpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCksOCkpuCljeCkpiDgpLngpYsg4KSw4KS54KS+IOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkpOCljeCksOClgeCkn+CkvyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkheCkteCksOCli+Ckp+Ckv+CkpCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g4KSq4KWN4KSw4KS/4KSC4KSfIOCkleCkvuCksOCljeCkryI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g4KSq4KWN4KSw4KS/4KSC4KSfIOCkleCkvuCksOCljeCkryI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLgpLDgpKbgpY3gpKYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLgpKrgpYHgpKg6IOCkhuCksOCkguCkrSDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkleClhyDgpLLgpL/gpI8g4KSV4KWL4KSIIOCkleCkqOClh+CkleCljeCktuCkqCDgpKjgpLngpYDgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLgpIXgpJzgpY3gpJ7gpL7gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIOCkheCkqOClgeCkquCksuCkrOCljeCkpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLgpKrgpY3gpLDgpL/gpILgpJ8g4KSV4KS+4KSw4KWN4KSvIOCknOCkqOCksOClh+CknyDgpKjgpLngpYDgpIIg4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpL4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i4KS24KWN4KSv4KS+4KSuIOCklOCksCDgpLbgpY3gpLXgpYfgpKQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i4KSw4KSC4KSXIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IuCkquCli+CksOCljeCkn+CljeCksOClh+CknyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLgpLLgpYjgpILgpKHgpLjgpY3gpJXgpYfgpKoiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IuCkuOCkreClgCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLgpLjgpYDgpK7gpL4iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTgyY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJpbnQgU3Bvb2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJQb3N0YXZrZSBwaXNhxI1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iSXNwaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJTcHJlbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJPZHJlZGnFoXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IktvcGlqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iVmVsacSNaW5hIHBhcGlyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IlUgYm9qaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWplbnRhY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlN0cmFuaWNlICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJucHIuIDEg4oCTIDUsOCwxMSDigJMgMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByZWdsZWQgaXNwaXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJJbnN0YWxpcmFqIFBERiBwcmVnbGVkbmlrIHphIHByZWdsZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IlNydcWhaWxhIHNlIGFwbGlrYWNpamEgemEgaXNwaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iU3RyYW5pY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHZW5lcmlyYW5qZSB6YWRhdGthIGlzcGlzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNwcmVtaSBrYW8gUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlN2aSBwaXNhxI1p4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJEaWphbG/FoWtpIG9rdmlyIHphIGlzcGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IlByZXRyYcW+aXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlN2aSBwaXNhxI1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iRG9kYWogdXNsdWd1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iT2t2aXIgemEgcHJldHJhxb5pdmFuamUgcHJpa2F6YW4gamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iT2t2aXIgemEgcHJldHJhxb5pdmFuamUgc2tyaXZlbiBqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkRvZGFqIHBpc2HEjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+Ik9kYWJlcml0ZSBwaXNhxI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJaYWJvcmF2aXRlIHBpc2HEjSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iUHJvbmHEkWVuIGplIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gcGlzYcSNIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iUHJvbmHEkWVuIGplIHNsamVkZcSHaSBicm9qIHBpc2HEjWE6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJPZGFiZXJpdGUgdXNsdWd1IGlzcGlzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iVHJhxb5lbmplIHBpc2HEjWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJOaWplIHByb25hxJFlbiBuaWplZGFuIHBpc2HEjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IklzcGlzaXZhbmplIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJPdGtheml2YW5qZSB6YWRhdGthIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlBvZ3JlxaFrYSBwaXNhxI1hIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQaXNhxI0gamUgYmxva2lyYW8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJaYWRhdGFrIGlzcGlzYSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iQnJvaiB6YWRhdGFrYSBpc3Bpc2E6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iT2R1c3RhbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlBvbm92byBwb2tyZW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik5lbWEgdmV6ZSBzIHBpc2HEjWVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4ibmVwb3puYXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyB6YWRhdGFrIG5pamUgZG9zdHVwYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iWmFkYXRhayBpc3Bpc2EgbmlqZSBnZW5lcmlyYW4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iQ3Juby1iaWplbG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iVSBib2ppIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IlBvcnRyZXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iUGVqemHFviI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iU3ZlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IlJhc3BvbiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMDc0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJOeW9tdGF0w6FzaXNvci1rZXplbMWRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+Ik55b210YXTDs2Jlw6FsbMOtdMOhc29rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iTnlvbXRhdMOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+Ik1lbnTDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJDw6lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IlDDqWxkw6FueXN6w6FtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQYXDDrXJtw6lyZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJTesOtbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IlTDoWpvbMOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+Ik9sZGFsc3rDoW0gKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InBsLiAx4oCTNSwgOCwgMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iRWzFkW7DqXpldCBueW9tdGF0w6FzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iQXogZWzFkW7DqXpldGhleiB0ZWxlcMOtdHNlIGEgUERGLW1lZ3Rla2ludMWRdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkEgbnlvbXRhdMOhc2kgYWxrYWxtYXrDoXMgw7Zzc3plb21sb3R0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJPbGRhbGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iTnlvbXRhdMOhc2kgZmVsYWRhdCBsw6l0cmVob3rDoXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iTWVudMOpcyBQREYta8OpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iQXogw7Zzc3plcyBueW9tdGF0w7PigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+Ik55b210YXTDoXNpIHDDoXJiZXN6w6lkYWJsYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iS2VyZXPDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iQXogw7Zzc3plcyBueW9tdGF0w7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJTem9sZ8OhbHRhdMOhcyBob3p6w6FhZMOhc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJLZXJlc8WRbWV6xZEgbWVnamVsZW7DrXR2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJLZXJlc8WRbWV6xZEgZWxyZWp0dmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJOeW9tdGF0w7MgaG96esOhYWTDoXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iTnlvbXRhdMOzIGtpdsOhbGFzenTDoXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iTnlvbXRhdMOzIGVsZmVsZWp0w6lzZSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBueW9tdGF0w7Mgw6lzemxlbHZlIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBueW9tdGF0w7Mgw6lzemxlbHZlIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iTnlvbXRhdMOhc2kgc3pvbGfDoWx0YXTDoXMga2l2w6FsYXN6dMOhc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Ik55b210YXTDs2sga2VyZXPDqXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTmVtIHRhbMOhbGhhdMOzIG55b210YXTDsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IkEoeikgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBueW9tdGF0w6FzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkEoeikgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiB0w7ZybMOpc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Ik55b210YXTDoXNpIGhpYmE6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJBKHopIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gbGV0aWx0dmEuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g4oCTIG55b210YXTDoXNpIGZlbGFkYXQiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOKAkyBueW9tdGF0w6FzaSBmZWxhZGF0b2siPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iTcOpZ3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLDmmpyYWluZMOtdMOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJOaW5jcyBrYXBjc29sYXQgYSBueW9tdGF0w7N2YWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJpc21lcmV0bGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBuZW0gw6lyaGV0xZEgZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iTmVtIHNpa2Vyw7xsdCBsw6l0cmVob3puaSBhIG55b210YXTDoXNpIGZlbGFkYXRvdC4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iRmVrZXRlLWZlaMOpciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJTesOtbiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLDgWxsw7MiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iRmVrdsWRIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLDlnNzemVzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IlRhcnRvbcOhbnkiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjNiODIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4i1Y/VutW01aHVtiDVr9Wh1oDVo9Wh1b7VodaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+ItWP1brVq9W51asg1a/VodaA1aPVodW+1bjWgNW41oLVtNW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+ItWP1brVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i1YrVodWw1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+ItWG1brVodW/1aHVr9Wh1a/VpdW/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+ItWK1aHVv9Wz1aXVttW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4i1LnVstWp1asg1bnVodaD1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLUs9W41oLVtdW21agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLUtNWr1oDWhNWh1b7VuNaA1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i1LfVu9Wl1oAgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+ItaF1oAu1Z0gMS01LCA4LCAxMS0xMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i1Y/VutWl1azVuNaCINW21aHVrdWh1aTVq9W/1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLVhtWh1a3VodWk1avVv9W01aHVtiDVsNWh1bTVodaAINW/1aXVstWh1aTWgNWl1oQgUERGINWk1avVv9Wh1oDVr9Wr1bkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+ItWP1brVpdWs1bjWgiDVrtaA1aHVo9Wr1oDVqCDVvtWp1aHWgNWrINWnINWl1bbVqdWh1oDVr9W+1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiLUt9W71aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+ItWB1ofVodW+1bjWgNW+1bjWgtW0INWnINW/1brVpdWs1bjWgiDVodW31a3VodW/1aHVttaE1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiLVitWh1bDVpdWsINW41oDVutWl1b0gUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+ItSy1bjVrNW41oAg1b/VutWr1bnVttWl1oDVqC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4i1Y/VutWl1azVuNaCINWl1oDVr9Wt1bjVvdW41oLVqdW11aHVtiDVutWh1b/VuNaC1bDVodW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+ItWI1oDVuNW21aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiLUstW41azVuNaAINW/1brVq9W51bbVpdaA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiLUsdW+1aXVrNWh1oHVttWl1awg1a7VodW81aHVtdW41oLVqdW11bjWgtW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i1YjWgNW41bbVtNWh1bYg1b7VodW21aTVodWv1agg1oHVuNaC1oHVodWk1oDVvtWh1a4g1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4i1YjWgNW41bbVtNWh1bYg1b7VodW21aTVodWv1agg1anVodaE1oHVvtWl1awg1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLUsdW+1aXVrNWh1oHVttWl1awg1b/VutWr1bkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLUuNW21b/WgNWl1awg1b/VutWr1bkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLVhNW41bzVodW21aHVrCDVv9W61avVudWoIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INW/1brVq9W5INWnINWj1b/VttW+1aXVrCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g1b/VutWr1bkg1acg1aPVv9W21b7VpdWsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i1LjVttW/1oDVpdaEINW/1brVpdWs1bjWgiDVrtWh1bzVodW11bjWgtWp1bXVuNaC1bbVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i1Y/VutWr1bnVttWl1oDVqyDVuNaA1bjVttW41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+ItWP1brVq9W51bbVpdaAINW51aXVtiDVo9W/1bbVvtWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLVj9W61b7VuNaC1bQg1afVnSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPi3VqCDVudWl1bLVodaA1a/VvtW41oLVtCDVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i1Y/VutWr1bnVqyDVvdWt1aHVrCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i1Y/VutWr1bnVtiDVodaA1aPVpdWs1aHWg9Wh1a/VpdWsINWnIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4t1agiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiDVv9W61bTVodW2INWh1bfVrdWh1b/VodW21oQiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+INW/1brVtNWh1bYg1aHVt9Wt1aHVv9Wh1bbWhNW21aXWgCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLVidWl1bLVodaA1a/VpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLVjtWl1oDVodWj1bjWgNWu1aHWgNWv1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLVj9W61avVudWrINWw1aXVvyDVr9Wh1bog1bnVr9WhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i1aHVttWw1aHVtdW/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+INW/1brVq9W51bYg1aHVttWw1aHVvdWh1bbVpdWs1asg1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i1YnVr9Wh1oDVuNWy1aHWgdWh1bbWhCDVtNW31aHVr9Wl1awg1b/VutW01aHVtiDVodW31a3VodW/1aHVttaE1agiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i1Y3WhyDVuNaCINW91brVq9W/1aHVryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLUs9W41oLVtdW21agiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4i1LTVq9W01aHVttWv1aHWgCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLUvNWh1bbVpNW31aHWhtW/IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLUstW41azVuNaA1agiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i1YTVq9W71aHVr9Wh1bXWhCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiODBkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IlNldGVsYW4gcHJpbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkNldGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iU2ltcGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iVHVqdWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IlNhbGluYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlVrdXJhbiBLZXJ0YXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJXYXJuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGFzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+Iig8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIGhhbGFtYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+Im1pc2FsbnlhIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iUHJhdGluamF1IGNldGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJQYXNhbmcgcGVuYW1waWwgUERGIHVudHVrIHByYXRpbmphdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iQXBsaWthc2kgcGVuY2V0YWthbiBtb2dvayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJIYWxhbWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iTWVtYnVhdCB0dWdhcyBwZW5jZXRha2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU2ltcGFuIHNlYmFnYWkgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlNlbXVhIHByaW50ZXLigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkNldGFrIGRpYWxvZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJDYXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlNlbXVhIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJUYW1iYWhrYW4gbGF5YW5hbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IktvdGFrIHRlbHVzdXIgZGl0YW1waWxrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iS290YWsgdGVsdXN1ciBkaXNlbWJ1bnlpa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iVGFtYmFoa2FuIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJQaWxpaCBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iTHVwYWthbiBwcmludGVyIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIgZGl0ZW11a2FuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVyIGRpdGVtdWthbiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlBpbGloIGxheWFuYW4gY2V0YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Ik1lbmNhcmkgcHJpbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IlRpZGFrIGRpdGVtdWthbiBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iTWVuY2V0YWsgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ik1lbWJhdGFsa2FuIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkFkYSBrZXNhbGFoYW4gcHJpbnRlciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iUHJpbnRlciBtZW1ibG9raXIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJUdWdhcyBjZXRhayA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iVHVnYXMgY2V0YWsgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJCYXRhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iTXVsYWkgVWxhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iVGlkYWsgYWRhIHNhbWJ1bmdhbiBrZSBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idGFrIGRpa2V0YWh1aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgdGlkYWsgdGVyc2VkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iVGlkYWsgZGFwYXQgbWVtYnVhdCB0dWdhcyBjZXRhayI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJIaXRhbSAmYW1wOyBQdXRpaCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJXYXJuYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3RyZXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTGFuc2thcCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iU2VtdWEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iUmVudGFuZyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YzNiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IkltcG9zdGF6aW9uaSBzdGFtcGFudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJTdGFtcGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJTYWx2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkRlc3RpbmF6aW9uZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJDb3BpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iRm9ybWF0byBjYXJ0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IkEgY29sb3JpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iUGFnaW5lICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJFcy46IDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IkFudGVwcmltYSBkaSBzdGFtcGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGxhIHZpc3VhbGl6emF0b3JlIFBERiBwZXIgYW50ZXByaW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJBcnJlc3RvIGFub21hbG8gZGVsbFwnYXBwIGRpIHN0YW1wYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJQYWdpbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHZW5lcmF6aW9uZSBwcm9jZXNzbyBkaSBzdGFtcGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJTYWx2YSBpbiBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iVHV0dGUgbGUgc3RhbXBhbnRp4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJGaW5lc3RyYSBkaSBkaWFsb2dvIFN0YW1wYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJDZXJjYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJUdXR0ZSBsZSBzdGFtcGFudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJBZ2dpdW5naSBzZXJ2aXppbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IkNhc2VsbGEgZGkgcmljZXJjYSB2aXN1YWxpenphdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iQ2FzZWxsYSBkaSByaWNlcmNhIG5hc2Nvc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iQWdnaXVuZ2kgc3RhbXBhbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU2VsZXppb25hIHN0YW1wYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IkVsaW1pbmEgc3RhbXBhbnRlIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHN0YW1wYW50ZSB0cm92YXRhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBzdGFtcGFudGkgdHJvdmF0ZSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlNjZWdsaSBzZXJ2aXppbyBkaSBzdGFtcGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlJpY2VyY2EgZGkgc3RhbXBhbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTmVzc3VuYSBzdGFtcGFudGUgdHJvdmF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IlN0YW1wYSBkaSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQW5udWxsYW1lbnRvIGRpIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVycm9yZSBkZWxsYSBzdGFtcGFudGU6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJMYSBzdGFtcGFudGUgaGEgYmxvY2NhdG8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJQcm9jZXNzbyBkaSBzdGFtcGEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlByb2Nlc3NpIGRpIHN0YW1wYSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFubnVsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJpYXZ2aWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iTmVzc3VuIGNvbGxlZ2FtZW50byBhbGxhIHN0YW1wYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+InNjb25vc2NpdXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IC0gbm9uIGRpc3BvbmliaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IkltcG9zc2liaWxlIGdlbmVyYXJlIHByb2Nlc3NvIGRpIHN0YW1wYSI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJCaWFuY28gZSBuZXJvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IkEgY29sb3JpIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IlZlcnRpY2FsZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJPcml6em9udGFsZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVHV0dGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iSW50ZXJ2YWxsbyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMGU3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IteU15LXk9eo15XXqiDXnteT16TXodeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4i15TXk9ek16EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLXqdee15XXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IteZ16LXkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiLXoteV16rXp9eZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IteS15XXk9ecINeg15nXmdeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4i16bXkdeiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i15vXmdeV15XXnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+Itei157XldeT15nXnSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i15zXntep15wgMeKAkzXigI8sOCzigI8xMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLXqtem15XXkteUINee16fXk9eZ157XlCDXqdecINeU15PXpNeh15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuKAj9eU16rXp9efINee16bXmdeSIFBERiDXnNeZ16bXmdeo16og16rXpteV15LXlCDXnten15PXmdee15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IteQ16TXnNeZ16fXpteZ15nXqiDXlNeU15PXpNeh15Qg16fXqNeh15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i16LXnteV15PXmdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i15nXldem16gg16LXkdeV15PXqiDXlNeT16TXodeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4i4oCP16nXnteV16gg15stUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+Iteb15wg15TXnteT16TXodeV16rigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+Iteq15nXkdeqINeT15Ug16nXmdeXINep15wg157Xk9ek16HXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLXl9ek16kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i15vXnCDXlNee15PXpNeh15XXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IteU15XXodejINep15nXqNeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLXqteZ15HXqiDXlNeX15nXpNeV16kg157Xldem15LXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLXqteZ15HXqiDXlNeX15nXpNeV16kg157Xldeh16rXqNeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i15TXldeh16Mg157Xk9ek16HXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IteR15fXqCDXnteT16TXodeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i16nXm9eXINeQ16og15TXnteT16TXodeqIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiLXoNee16bXkNeUINee15PXpNeh16ogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Iteg157XpteQ15UgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDXnteT16TXodeV16oiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLXkdeX16gg16nXmdeo15XXqiDXlNeT16TXodeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLXnteX16TXqSDXnteT16TXodeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLXnNeQINeg157XpteQ15Ug157Xk9ek16HXldeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i157Xk9ek15nXoSDXkNeqIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiLXnteR15jXnCDXkNeqIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Itep15LXmdeQ16og157Xk9ek16HXqiDXkS08eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i15TXnteT16TXodeqINeX16HXnteUINeQ16ogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiLXoteR15XXk9eqINeU15PXpNeh15QgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g16LXkdeV15PXldeqINeU15PXpNeh15QiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i15HXmNecIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLXlNek16LXnCDXnteX15PXqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLXkNeZ158g15fXmdeR15XXqCDXnNee15PXpNeh16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLXnNeQINeZ15PXldeiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyDXnNeQINeW157Xmdeg15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i15zXkCDXoNeZ16rXnyDXlNeZ15Qg15zXmdem15XXqCDXkNeqINei15HXldeT16og15TXlNeT16TXodeUIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+Itep15fXldeoINeV15zXkdefIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+Item15HXoiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLXnNeQ15XXqNeaIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Itec16jXldeX15EiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IteU15vXnCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLXmNeV15XXlyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YmU1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiLljbDliLfjgrnjg5fjg7zjg6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4i44OX44Oq44Oz44K/44Gu6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4i5Y2w5Yi3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i5L+d5a2YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4i5Y2w5Yi35YWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IumDqOaVsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4i55So57SZ44K144Kk44K6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4i44Kr44Op44O8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i5pa55ZCRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i44Oa44O844K477yIPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+77yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLkvos6IDEtNSw4LDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLljbDliLfjg5fjg6zjg5Pjg6Xjg7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuODl+ODrOODk+ODpeODvOeUqFBERuODk+ODpeODvOOCouOCkuOCpOODs+OCueODiOODvOODqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i5Y2w5Yi344Ki44OX44Oq44Gn44Gu6Zqc5a6z55m655SfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IuODmuODvOOCuOaVsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IuWNsOWIt+OCuOODp+ODluOCkueUn+aIkOOBl+OBpuOBhOOBvuOBmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlBERuW9ouW8j+OBp+S/neWtmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLjgZnjgbnjgabjga7jg5fjg6rjg7Pjgr/igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IuWNsOWIt+ODgOOCpOOCouODreOCsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLmpJzntKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i44GZ44G544Gm44Gu44OX44Oq44Oz44K/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i44K144O844OT44K544KS6L+95YqgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i5qSc57Si44Oc44OD44Kv44K544Gv6KGo56S644GV44KM44Gm44GE44G+44GZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuaknOe0ouODnOODg+OCr+OCueOBr+ihqOekuuOBleOCjOOBpuOBhOOBvuOBm+OCkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuODl+ODquODs+OCv+OCkui/veWKoCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IuODl+ODquODs+OCv+OCkumBuOaKniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IuODl+ODquODs+OCv+OCkuWIh+aWrSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPuWPsOOBruODl+ODquODs+OCv+OBjOimi+OBpOOBi+OCiuOBvuOBl+OBnyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz7lj7Djga7jg5fjg6rjg7Pjgr/jgYzopovjgaTjgYvjgorjgb7jgZfjgZ8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLljbDliLfjgrXjg7zjg5Pjgrnjga7pgbjmip4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuODl+ODquODs+OCv+OBruaknOe0ouS4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IuODl+ODquODs+OCv+OBjOimi+OBpOOBi+OCiuOBvuOBm+OCkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7jgpLljbDliLfjgZfjgabjgYTjgb7jgZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+44KS44Kt44Oj44Oz44K744Or44GX44Gm44GE44G+44GZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLjg5fjg6rjg7Pjgr/jgqjjg6njg7w6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+44KS44OW44Ot44OD44Kv44GX44G+44GX44GfIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz7jga7ljbDliLfjgrjjg6fjg5YiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+44Gu5Y2w5Yi344K444On44OWIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuOCreODo+ODs+OCu+ODqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i5YaN6Kmm6KGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuODl+ODquODs+OCv+OBq+aOpee2muOBleOCjOOBpuOBhOOBvuOBm+OCkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+IuS4jeaYjiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuKAk+S9v+eUqOS4jeWPryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLljbDliLfjgrjjg6fjg5bjgpLnlJ/miJDjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ8iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i44Oi44OO44Kv44OtIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IuiJsiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLnuKblkJHjgY0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4i5qiq5ZCR44GNIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLjgZnjgbnjgaYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i56+E5ZuyIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzZiN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuGDkeGDlOGDreGDk+GDleGDmOGDoSBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IuGDnuGDoOGDmOGDnOGDouGDlOGDoOGDmOGDoSDhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLhg5Hhg5Thg63hg5Phg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLhg6jhg5Thg5zhg5Dhg67hg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLhg5Phg5Dhg5zhg5jhg6jhg5zhg6Phg5rhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i4YOQ4YOh4YOa4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLhg6Thg6Phg6Dhg6rhg5rhg5jhg6Eg4YOW4YOd4YOb4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4i4YOk4YOU4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i4YOd4YOg4YOY4YOU4YOc4YOi4YOQ4YOq4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i4YOS4YOV4YOU4YOg4YOT4YOU4YOR4YOYICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLhg5vhg5Dhg5IuIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLhg5zhg5Dhg67hg5Xhg5Ag4YOQ4YOb4YOd4YOR4YOU4YOt4YOT4YOV4YOQ4YOb4YOT4YOUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLhg5Lhg5Dhg5Phg5Dhg67hg5Thg5Phg5Xhg5jhg6Hhg5fhg5Xhg5jhg6Eg4YOT4YOQ4YOQ4YOn4YOU4YOc4YOU4YOXIFBERiDhg5vhg5zhg5Dhg67hg5Xhg5Thg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IuGDkeGDlOGDreGDk+GDleGDmOGDoSDhg5Dhg57hg5gg4YOQ4YOV4YOQ4YOg4YOY4YOj4YOa4YOQ4YOTIOGDkuGDkOGDmOGDl+GDmOGDqOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiLhg5Lhg5Xhg5Thg6Dhg5Phg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLhg5vhg5jhg5vhg5Phg5jhg5zhg5Dhg6Dhg5Thg53hg5Hhg5jhg6Eg4YOR4YOU4YOt4YOT4YOV4YOY4YOhIOGDk+GDkOGDleGDkOGDmuGDlOGDkeGDmOGDoSDhg6jhg5Thg6Xhg5vhg5zhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJQREYt4YOQ4YOTIOGDqOGDlOGDnOGDkOGDruGDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLhg6fhg5Xhg5Thg5rhg5Ag4YOe4YOg4YOY4YOc4YOi4YOU4YOg4YOY4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLhg5Hhg5Thg63hg5Phg5Xhg5jhg6Eg4YOh4YOQ4YOg4YOZ4YOb4YOU4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IuGDq+GDmOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiLhg6fhg5Xhg5Thg5rhg5Ag4YOe4YOg4YOY4YOc4YOi4YOU4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i4YOh4YOU4YOg4YOV4YOY4YOh4YOY4YOhIOGDk+GDkOGDm+GDkOGDouGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IuGDoeGDkOGDq+GDmOGDlOGDkeGDnSDhg5Xhg5Thg5rhg5gg4YOc4YOQ4YOp4YOV4YOU4YOc4YOU4YOR4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuGDoeGDkOGDq+GDmOGDlOGDkeGDnSDhg5Xhg5Thg5rhg5gg4YOT4YOQ4YOb4YOQ4YOa4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i4YOe4YOg4YOY4YOc4YOi4YOU4YOg4YOY4YOhIOGDk+GDkOGDm+GDkOGDouGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IuGDnuGDoOGDmOGDnOGDouGDlOGDoOGDmOGDoSDhg5Dhg6Dhg6nhg5Thg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLhg57hg6Dhg5jhg5zhg6Lhg5Thg6Dhg5jhg6Eg4YOT4YOQ4YOV4YOY4YOs4YOn4YOU4YOR4YOQIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiLhg5zhg5Dhg57hg53hg5Xhg5zhg5jhg5AgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDhg57hg6Dhg5jhg5zhg6Lhg5Thg6Dhg5giPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiLhg5zhg5Dhg57hg53hg5Xhg5zhg5jhg5AgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDhg57hg6Dhg5jhg5zhg6Lhg5Thg6Dhg5giPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOR4YOU4YOt4YOT4YOV4YOY4YOhIOGDoeGDlOGDoOGDleGDmOGDoeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOU4YOd4YOR4YOhIOGDnuGDoOGDmOGDnOGDouGDlOGDoOGDlOGDkeGDmOGDoSDhg6vhg5jhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLhg57hg6Dhg5jhg5zhg6Lhg5Thg6Dhg5Thg5Hhg5gg4YOV4YOU4YOgIOGDm+GDneGDmOGDq+GDlOGDkeGDnOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IuGDmOGDkeGDlOGDreGDk+GDlOGDkeGDkCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOU4YOd4YOR4YOhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4t4YOY4YOhIOGDkuGDkOGDo+GDpeGDm+GDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i4YOR4YOU4YOt4YOT4YOV4YOY4YOhIOGDqOGDlOGDquGDk+GDneGDm+GDkCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i4YOe4YOg4YOY4YOc4YOi4YOU4YOg4YOb4YOQIOGDk+GDkOGDkeGDmuGDneGDmeGDkCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IuGDkeGDlOGDreGDk+GDleGDmOGDoSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOGDk+GDkOGDleGDkOGDmuGDlOGDkeGDkCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IuGDkeGDlOGDreGDk+GDleGDmOGDoSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOGDk+GDkOGDleGDkOGDmuGDlOGDkeGDkCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLhg5Lhg5Dhg6Phg6Xhg5vhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuGDkuGDkOGDk+GDkOGDouGDleGDmOGDoOGDl+GDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLhg57hg6Dhg5jhg5zhg6Lhg5Thg6Dhg5fhg5Dhg5wg4YOZ4YOQ4YOV4YOo4YOY4YOg4YOYIOGDkOGDoCDhg5Dhg6Dhg5jhg6EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLhg6Phg6rhg5zhg53hg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIOGDm+GDmOGDo+GDrOGDleGDk+GDneGDm+GDlOGDmuGDmOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLhg5Hhg5Thg63hg5Phg5Xhg5jhg6Eg4YOT4YOQ4YOV4YOQ4YOa4YOU4YOR4YOY4YOhIOGDkuGDlOGDnOGDlOGDoOGDkOGDquGDmOGDkCDhg5Xhg5Thg6Ag4YOu4YOU4YOg4YOu4YOT4YOU4YOR4YOQIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IuGDqOGDkOGDlS3hg5fhg5Thg5fhg6Dhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i4YOk4YOU4YOg4YOYIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IuGDnuGDneGDoOGDouGDoOGDlOGDouGDmCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLhg57hg5Thg5jhg5bhg5Dhg5/hg5jhg6Eg4YOg4YOU4YOf4YOY4YOb4YOYIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLhg6fhg5Xhg5Thg5rhg5AiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i4YOT4YOY4YOQ4YOe4YOQ4YOW4YOd4YOc4YOYIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODlmOWJmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuGelOGfhOGfh+GeluGeu+GemOGfkuGeluKAi+Gen+GfkuGeluGevOGem+GfkOGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLhnoDhnrbhnprigIvhnoDhn4bhno7hno/hn4vigIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLhnprhnoDhn5Lhnp/hnrbhnpHhnrvhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLhnpHhnrfhnp/hnorhn4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i4Z6F4Z+S4Z6U4Z624Z6U4Z+L4oCL4Z6F4Z6Y4Z+S4Z6b4Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLhnpHhn4bhnqDhn4bigIvhnoDhn5Lhnprhnorhnrbhnp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLhnpbhno7hn4wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLhnpHhnrfhnp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLhnpHhn4bhnpbhn5DhnpogKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IuGepy4gMeKAlDUsOCwxMeKAlDEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLhnpjhnr7hnpvigIvhnpjhnrvhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuGeiuGfhuGeoeGevuGehOKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GemOGevuGemyBQREYg4Z6f4Z6Y4Z+S4Z6a4Z624Z6U4Z+L4oCL4Z6A4Z624Z6a4oCL4Z6Y4Z6+4Z6b4oCL4Z6H4Z624oCL4Z6Y4Z674Z6TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpbigIvhnoLhnrbhn4bhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i4Z6R4Z+G4Z6W4Z+Q4Z6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i4oCL4Z6U4Z6E4Z+S4Z6A4Z6+4Z6P4oCL4Z6A4Z624Z6a4oCL4Z6E4Z624Z6a4oCL4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4i4Z6a4Z6A4Z+S4Z6f4Z624oCL4Z6R4Z674Z6A4oCL4Z6H4Z62IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpbigIvhnpHhnrbhn4bhnoThnqLhnp/hn4sgLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLhnpThn5LhnprhnqLhnpThn4vigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i4Z6f4Z+S4Z6c4Z+C4Z6E4Z6a4Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IuGemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeluKAi+GekeGetuGfhuGehOGeouGen+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IuGelOGek+GfkuGekOGfguGemOKAi+Gen+GfgeGenOGetuGegOGemOGfkuGemCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IuGelOGetuGek+KAi+GelOGehOGfkuGeoOGetuGeieKAi+GelOGfkuGemuKAi+GeouGelOGfi+KAi+Gen+GfkuGenOGfguGehOGemuGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLhnpThnrbhnpPigIvhnpvhnrbhnoDhn4vigIvhnpThn5LhnprhnqLhnpThn4vigIvhnp/hn5Lhnpzhn4LhnoThnprhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLhnpThnpPhn5LhnpDhn4LhnpjigIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLhnofhn5Lhnprhnr7hnp/igIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLhnpfhn5Lhnpvhn4HhnoXigIvigIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IuGemuGegOKAi+Geg+GevuGeieKAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i4Z6a4Z6A4oCL4Z6D4Z6+4Z6J4oCL4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6WIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLhnofhn5Lhnprhnr7hnp/igIvhnp/hn4HhnpzhnrbigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuGen+GfkuGenOGfguGehOGemuGegOKAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IuGemuGegOKAi+GemOGet+Gek+KAi+Geg+GevuGeieKAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IuGegOGfhuGeluGeu+GehOKAi+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i4Z6A4Z624Z6a4oCL4Z6U4Z+E4Z+H4Z6U4Z6E4Z+LIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuGegOGfhuGeoOGeu+Gen+KAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6W4oCL4Z6U4Z624Z6T4oCL4Z6R4Z6U4Z+L4Z6f4Z+S4Z6A4Z624Z6P4Z+LIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4i4Z6A4Z624Z6a4Z6E4Z624Z6a4oCL4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6WIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiLhnoDhnrbhnprhnoThnrbhnprigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLhnpThn4Thn4fhnpThnoThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuGeheGetuGelOGfi+GeleGfkuGeiuGevuGemOKAi+GeoeGevuGehOGenOGet+GeiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLhnoLhn5LhnpjhnrbhnpPigIvigIvigIvhnoDhnrbhnprigIvhnpfhn5LhnofhnrbhnpThn4vigIvhnpHhn4XigIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLhnpjhnrfhnpPigIvhnp/hn5LhnoLhnrbhnpvhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIOGemOGet+Gek+KAi+GeouGetuGeheKAi+GelOGfkuGemuGevuKAi+GelOGetuGekyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLhnpjhnrfhnpPigIvhnqLhnrbhnoXigIvhnpThnoThn5LhnoDhnr7hno/igIvhnoDhnrbhnprigIvhnoThnrbhnprigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i4Z6fICZhbXA7IOGegeGfkuGemOGfhSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLhnpbhno7hn4wiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4i4Z6U4Z6J4Z+S4Z6I4Z6aIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IuGeleGfkuGeiuGfgeGegCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4i4Z6R4Z624Z+G4Z6E4oCL4Z6i4Z6f4Z+LIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IuGeh+GeveGemiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMmZlZjcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiLsnbjsh4Qg7Iqk7ZKA65+sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+Iu2UhOumsO2EsCDshKTsoJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLsnbjsh4QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLsoIDsnqUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLrjIDsg4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i66ek7IiYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLsmqnsp4Ag7YGs6riwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4i7IOJ7IOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i67Cp7ZalIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i7Y6Y7J207KeAIOyImCg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLsmIg6IDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IuyduOyHhCDrr7jrpqzrs7TquLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuuvuOumrOuztOq4sOyaqSBQREYg67ew7Ja0IOyEpOy5mCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i7J247IeEIOyVseyXkCDsmKTrpZgg67Cc7IOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+Iu2OmOydtOyngCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IuyduOyHhCDsnpHsl4Ug7IOd7ISxIOykkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlBERuuhnCDsoIDsnqUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i66qo65OgIO2UhOumsO2EsOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4i7J247IeEIOuMgO2ZlOyDgeyekCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLqsoDsg4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i66qo65OgIO2UhOumsO2EsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IuyEnOu5hOyKpCDstpTqsIAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLqsoDsg4nssL0g7ZGc7Iuc65CoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuqygOyDieywvSDsiKjqsqjsp5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLtlITrprDthLAg7LaU6rCAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4i7ZSE66aw7YSwIOyEoO2DnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Iu2UhOumsO2EsCDsgq3soJwiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Iu2UhOumsO2EsCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+64yAIOqygOyDieuQqCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Iu2UhOumsO2EsCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+64yAIOqygOyDieuQqCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuyduOyHhCDshJzruYTsiqQg7ISg7YOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLtlITrprDthLAg6rKA7IOJIOykkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Iu2UhOumsO2EsCDsl4bsnYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOyduOyHhCDspJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOy3qOyGjCDspJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Iu2UhOumsO2EsCDsmKTrpZg6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLssKjri6jrkJwg7ZSE66aw7YSwOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g7J247IeEIOyekeyXhSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g7J247IeEIOyekeyXhSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLst6jshowiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuuLpOyLnCDsi5zsnpEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i7ZSE66aw7YSw7JmAIOyXsOqysOuQmOyngCDslYrsnYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLslYwg7IiYIOyXhuydjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMg7IKs7Jqp7ZWgIOyImCDsl4bsnYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i7J247IeEIOyekeyXheydhCDsg53shLHtlaAg7IiYIOyXhuyKteuLiOuLpC4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i7Z2R67CxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+Iuy7rOufrCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLshLjroZwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4i6rCA66GcIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLrqqjrkZAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i67KU7JyEIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTU0NjA2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuC6leC6u+C6p+C6iOC6seC6lOC6hOC6tOC6p+C6geC6suC6meC6nuC6tOC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLguoHgurLgupngupXgurHgu4nguofguoTgu4jgurLgu4DguoTgurfgu4jguq3guofgup7gurTguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLgup7gurTguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLguprgurHgupngupfgurbguoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLgupvgurLguo3gupfgurLguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i4Lqq4Lqz4LuA4LqZ4Lq74LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLguoLgurDgu5zgurLgupTguoLguq3guofgu5zgu4ngurLgu4Dguojgu4nguo0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLguqrgurUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLguqXguqfguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiIoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSDgu5zgu4ngurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IuC6leC6u+C6p+C6ouC7iOC6suC6hzogMeKAlDUsOCwxMeKAlDEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLgu4DguprgurTgu4jguofguoHgu4jguq3gupngup7gurTguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuC6leC6tOC6lOC6leC6seC7ieC6h+C7guC6m+C6vOC7geC6geC6vOC6oeC7gOC6muC6tOC7iOC6hyBQREYg4LuA4Lqe4Lq34LuI4Lqt4LuA4Lqa4Lq04LuI4LqH4LqV4Lq74Lqn4Lqi4LuI4Lqy4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLgu4Hguq3gurHguprguq/gup7gurTguqHguqXgurvgu4nguqHgu4DguqvguqXguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i4Luc4LuJ4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i4LqB4Lqz4Lql4Lqx4LqH4Lqq4LuJ4Lqy4LqH4Lqn4Lq94LqB4Lqe4Lq04LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4i4Lqa4Lqx4LqZ4LqX4Lq24LqB4LuA4Lqb4Lqx4oCL4oCL4LqZIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLgupfgurjguoHgu4DguoTgurfgu4jguq3guofgup7gurTguqEuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IuC7nOC7ieC6suC6leC7iOC6suC6h+C6geC6suC6meC6nuC6tOC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLguorguq3guoHguqvgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i4LqX4Lq44LqB4LuA4LqE4Lq34LuI4Lqt4LqH4Lqe4Lq04LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i4LuA4Lqe4Lq14LuI4Lqh4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i4LqB4LuI4Lqt4LqH4LqK4Lqt4LqB4Lqr4Lqy4LqW4Lq34LqB4Lqq4Lqw4LuB4LqU4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuC6geC7iOC6reC6h+C6iuC6reC6geC6q+C6suC6luC6t+C6geC7gOC6iuC6t+C7iOC6reC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuC7gOC6nuC6teC7iOC6oeC7gOC6hOC6t+C7iOC6reC6h+C6nuC6tOC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IuC7gOC6peC6t+C6reC6geC7gOC6hOC6t+C7iOC6reC6h+C6nuC6tOC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IuC6peC6t+C6oeC7gOC6hOC6t+C7iOC6reC6h+C6nuC6tOC6oSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i4Lqe4Lq74LqaIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g4LuA4LqE4Lq34LuI4Lqt4LqH4Lqe4Lq04LqhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i4Lqe4Lq74LqaIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g4LuA4LqE4Lq34LuI4Lqt4LqH4Lqe4Lq04LqhIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4LuA4Lql4Lq34Lqt4LqB4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZ4LqB4Lqy4LqZ4Lqe4Lq04LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLguoHgurPguqXgurHguofguorguq3guoHguqvgurLgu4DguoTgurfgu4jguq3guofgup7gurTguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLguprgu43gu4jgup7gurvguprgu4DguoTgurfgu4jguq3guofgup7gurTguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLguoHgurPguqXgurHguofgup7gurTguqEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IuC6geC6s+C6peC6seC6h+C6jeC6u+C6geC7gOC6peC6teC6gSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLgu4DguoTgurfgu4jguq3guofgup7gurTguqHgu4DguoHgurXgupTguoLgu43gu4ngupzgurTgupTgup7gurLgupQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuC7gOC6hOC6t+C7iOC6reC6h+C6nuC6tOC6oeC6luC6t+C6geC6muC6peC6reC6gSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IuC6h+C6suC6meC6nuC6tOC6oSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4i4LqH4Lqy4LqZ4Lqe4Lq04LqhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i4LqN4Lq74LqB4LuA4Lql4Lq14LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLgupvgurTgupTgu4DgupvgurXgupTgu4Pgu53gu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4Lqa4LuN4LuI4Lqh4Lq14LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4Lqr4Lqy4LuA4LqE4Lq34LuI4Lqt4LqH4Lqe4Lq04LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i4Lqa4LuN4LuI4Lqu4Lq54LuJ4LqI4Lqx4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IC0g4Lqa4LuN4LuI4Lqh4Lq14Lqi4Lq54LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IuC6muC7jeC7iOKAi+C6quC6suKAi+C6oeC6suC6lOKAi+C6quC7ieC6suC6h+C6p+C6veC6geC6nuC6tOC6oeC7hOC6lOC7iSI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLguoLgurLguqfgupTgurMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i4Lqq4Lq1IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IuC6peC6p+C6h+C6leC6seC7ieC6hyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLguqXguqfguofgupnguq3gupkiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IuC6l+C6seC6h+C7neC6u+C6lCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLgu4TguqXguo3gurAiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzRlMzg2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJpbnQgU3Bvb2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJTcGF1c2RpbnR1dm8gbnVzdGF0eW1haSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IlNwYXVzZGludGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJJxaFzYXVnb3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iUGFza2lydGllcyB2aWV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJLb3Bpam9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQb3BpZXJpYXVzIGR5ZGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iU3BhbHZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YWNpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQdXNsYXBpYWkgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InB2ei4sIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJTcGF1ZGluaW8gcGVyxb5pxatyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4ixK5kaWVndGkgUERGIHBlcsW+acWrcm9zIHByaWVtb27EmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iU3BhdXNkaW5pbW8gcHJvZ3JhbWEgdcW+c3RyaWdvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlB1c2xhcGlhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVydW9qYW1hIHNwYXVzZC4gdcW+ZHVvdGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iScWhc2F1Z290aSBrYWlwIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJWaXNpIHNwYXVzZGludHV2YWnigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IlNwYXVzZGluaW1vIGRpYWxvZ28gbGFuZ2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IkllxaFrb3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlZpc2kgc3BhdXNkaW50dXZhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IlByaWTEl3RpIHBhc2xhdWfEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IlBhaWXFoWtvcyBsYXVrZWxpcyByb2RvbWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlBhaWXFoWtvcyBsYXVrZWxpcyBwYXNsxJdwdGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iUHJpZMSXdGkgc3BhdXNkaW50dXbEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IlBhc2lyaW5rdGkgc3BhdXNkaW50dXbEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlBhbWlyxaF0aSBzcGF1c2RpbnR1dsSFIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiJSYXN0YSBzcGF1c2RpbnR1dsWzOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iUmFzdGEgc3BhdXNkaW50dXbFszogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlBhc2lyaW5raXRlIHNwYXVzZGluaW1vIHBhc2xhdWfEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iSWXFoWtvbWEgc3BhdXNkaW50dXbFsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Ik5lcmFzdGEgc3BhdXNkaW50dXbFsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IlNwYXVzZGluYW1hOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQXTFoWF1a2lhbWE6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlNwYXVzZGludHV2byBrbGFpZGE6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJTcGF1c2RpbnR1dmFzIHXFvmJsb2thdm86IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iU3BhdXNkaW5pbW8gdcW+ZHVvdGlzOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iU3BhdXNkaW5pbW8gdcW+ZHVvdHlzOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkF0xaFhdWt0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iUGFsZWlzdGkgacWhIG5hdWpvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik7El3JhIHJ5xaFpbyBzdSBzcGF1c2RpbnR1dnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJuZcW+aW5vbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+IuKAnjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwg4oCTIG5lcGFzaWVraWFtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJOZXBhdnlrbyBzdWt1cnRpIHNwYXVzZGluaW1vIHXFvmR1b3RpZXMiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iTmVzcGFsdm90YXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iU3BhbHZhIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IlN0YcSNaWFzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Ikd1bHPEjWlhcyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVmlzaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJEaWFwYXpvbmFzIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmZmRmZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iUHJpbnRlcmEgaWVzdGF0xKtqdW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iRHJ1a8SBdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlNhZ2xhYsSBdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkdhbGFtxJNyxLdpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJFa3NlbXBsxIFyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iUGFwxKtyYSBpem3Ek3JzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iS3LEgXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iVmlyemllbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJMYXBhc8KgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InBpZW0uLCAx4oCTNSw4LDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IkRydWthcyBwcmlla8Whc2thdMSranVtcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsxJN0IFBERsKgc2thdMSrdMSBanUgcHJpZWvFoXNrYXTEq8WhYW5haSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iRHJ1a2FzIGxpZXRvdG5lIGF2YXLEk2phIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IkxhcGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4ixKJlbmVyxJMgZHJ1a2FzIGRhcmJ14oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU2FnbGFixIF0IGvEgcKgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlZpc2kgcHJpbnRlcmnigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkRydWvEgcWhYW5hcyBkaWFsb2dsb2R6acWGxaEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iTWVrbMSTdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJWaXNpIHByaW50ZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iUGlldmllbm90IHBha2FscG9qdW11Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iTWVrbMSTxaFhbmFzIGxvZHppxYbFoSBpciByZWR6YW1zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJNZWtsxJPFoWFuYXMgbG9kemnFhsWhIGlyIHBhc2zEk3B0cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJQaWV2aWVub3QgcHJpbnRlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJBdGxhc8SrdCBwcmludGVyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Ik5lYXRjZXLEk3RpZXMgcHJpbnRlcmkiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IkF0cmFzdHMgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPsKgcHJpbnRlcmlzIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iQXRyYXN0aSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+wqBwcmludGVyaSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+Ikl6dsSTbGlldGllcyBkcnVrxIHFoWFuYXMgcGFrYWxwb2p1bXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlByaW50ZXJ1IG1la2zEk8WhYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTmV0aWthIGF0cmFzdHMgbmV2aWVucyBwcmludGVyaXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iTm90aWVrIGRhcmJhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gZHJ1a8SBxaFhbmHigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJQxIFydHJhdWMgZHJ1a2FzIGRhcmJ1IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlByaW50ZXJhIGvEvMWrZGEgYXIgZGFyYnUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlByaW50ZXJpcyBibG/Et8STamEgZGFyYnUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJEcnVrYXMgZGFyYnMgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IkRydWthcyBkYXJiaSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkF0Y2VsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iUmVzdGFydMSTdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJOYXYgc2F2aWVub2p1bWEgYXIgcHJpbnRlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJuZXppbsSBbXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7CoOKAlCBuYXYgcGllZWphbXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iTmV2YXLEk2phIMSjZW5lcsSTdCBkcnVrYXMgZGFyYnUiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iTWVsbmJhbHRzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IktyxIFzYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0cmV0cyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJBaW5hdmEiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IlZpc2kiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iRGlhcGF6b25zIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDI5Mzg3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+ItCl0Y3QstC70Y3Qs9GH0LjQudC9INCx0YPRhNC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4i0J/RgNC40L3RgtC10YDQuNC50L0g0YLQvtGF0LjRgNCz0L7QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+ItCl0Y3QstC70Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+ItCl0LDQtNCz0LDQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLQpdKv0LvRjdGN0L0g0LDQstCw0LPRhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiLQpdGD0YPQu9Cx0LDRgNGD0YPQtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4i0KbQsNCw0YHQvdGLINGF0Y3QvNC20Y3RjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+ItOo0L3Qs9OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i0KfQuNCz0LvRjdC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikg0YXRg9GD0LTQsNGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLQti7QvdGMLiAx4oCTNSwgOCwgMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i0KXRjdCy0LvRjdGF0Y3RjdGAINGD0YDRjNC00YfQuNC70LDQvSDRhdCw0YDQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLQo9GA0YzQtNGH0LjQu9Cw0L0g0YXQsNGA0LDRhdGL0L0g0YLRg9C70LQgUERGINGF0LDRgNCw0LPRh9C40LnQsyDRgdGD0YPQu9Cz0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i0KXRjdCy0LvRjdCz0Ycg0LDQv9C/INCz0LDRhtGB0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiLQpdGD0YPQtNCw0YEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLQpdGN0LLQu9GN0YUg0LDQttC40Lsg0q/Sr9GB0LPRjdC2INCx0LDQudC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJQREYg0LHQvtC70LPQvtC2INGF0LDQtNCz0LDQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i0JHSr9GFINC/0YDQuNC90YLQtdGA0q/Sr9C04oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLQpdGN0LLQu9GN0YUg0LTQuNCw0LvQvtCz0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i0KXQsNC50YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i0JHSr9GFINC/0YDQuNC90YLQtdGA0q/Sr9C0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i0q7QudC70YfQuNC70LPRjdGNINC90Y3QvNGN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLQpdCw0LnQu9GC0YvQvSDQvdKv0LTQuNC50LMg0LPQsNGA0LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+ItCl0LDQudC70YLRi9C9INC90q/QtNC40LnQsyDQtNCw0LvQtNC70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+ItCf0YDQuNC90YLQtdGAINC90Y3QvNGN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLQn9GA0LjQvdGC0LXRgCDRgdC+0L3Qs9C+0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLQn9GA0LjQvdGC0LXRgNC40LnQsyDQvNCw0YDRgtCw0YUiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g0L/RgNC40L3RgtC10YAg0L7Qu9C00YHQvtC9IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDQv9GA0LjQvdGC0LXRgCDQvtC70LTRgdC+0L0iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQpdGN0LLQu9GN0YUg0q/QudC70YfQuNC70LPRjdGN0LMg0YHQvtC90LPQvtGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQn9GA0LjQvdGC0LXRgCDRhdCw0LnQtiDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i0J/RgNC40L3RgtC10YAg0L7Qu9C00YHQvtC90LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i0KXRjdCy0LvRjdC2INCx0LDQudC90LAgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+ItCm0YPRhtC70LDQtiDQsdCw0LnQvdCwIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+ItCf0YDQuNC90YLQtdGA0LjQudC9INCw0LvQtNCw0LAgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+ItCf0YDQuNC90YLQtdGAINGF0L7RgNC40LPQu9C+0LPQtNGB0L7QvSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g0YXRjdCy0LvRjdGFINCw0LbQuNC7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiDRhdGN0LLQu9GN0YUg0LDQttC70YPRg9C0IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+ItCm0YPRhtC70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i0JTQsNGF0LjQvSDRjdGF0LvSr9Kv0LvRjdGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+ItCf0YDQuNC90YLQtdGAINGF0L7Qu9Cx0L7Qs9C00L7QvtCz0q/QuSDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i0YLQvtC00L7RgNGF0L7QudCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMg0LDRiNC40LPQu9Cw0YUg0LHQvtC70L7QvNC20LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+ItCl0Y3QstC70Y3RhSDQsNC20LvRi9CzINKv0q/RgdCz0Y3QtiDRh9Cw0LTRgdCw0L3Qs9Kv0LkiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i0KXQsNGAICZhbXA7INCm0LDQs9Cw0LDQvSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLTqNC90LPTqSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLQkdC+0YHQvtC+IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+ItCl0Y3QstGC0Y3RjSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4i0JHSr9Cz0LQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i0KXSr9GA0Y3RjSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhNWQyYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQZW5zcHVsIENldGFrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iVGV0YXBhbiBwZW5jZXRhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkNldGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iU2ltcGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iRGVzdGluYXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IlNhbGluYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlNhaXogS2VydGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iV2FybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJPcmllbnRhc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJIYWxhbWFuICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJjdGguIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iUHJhdG9udG9uIGNldGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJQYXNhbmcgcGVtYXBhciBQREYgdW50dWsgcHJhdG9udG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJBcGwgcGVyY2V0YWthbiByYW5hcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJIYWxhbWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iTWVuamFuYSBrZXJqYSBjZXRhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNpbXBhbiBzZWJhZ2FpIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJTZW11YSBwZW5jZXRhay4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iRGlhbG9nIGNldGFrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iQ2FyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJTZW11YSBwZW5jZXRhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IlRhbWJhaGthbiBwZXJraGlkbWF0YW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJLb3RhayBjYXJpYW4gZGl0dW5qdWtrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iS290YWsgY2FyaWFuIHRlcnNlbWJ1bnlpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iVGFtYmFoIHBlbmNldGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iUGlsaWggcGVuY2V0YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJMdXBha2FuIHBlbmNldGFrIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHBlbmNldGFrIGRpdGVtdWkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHBlbmNldGFrIGRpdGVtdWkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJQaWxpaCBwZXJraGlkbWF0YW4gY2V0YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Ik1lbmNhcmkgcGVuY2V0YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJUaWFkYSBwZW5jZXRhayBkaXRlbXVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iTWVuY2V0YWsgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ik1lbWJhdGFsa2FuIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlJhbGF0IHBlbmNldGFrIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQZW5jZXRhayBkaXNla2F0IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iS2VyamEgY2V0YWthbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iS2VyamEgY2V0YWthbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkJhdGFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJNdWxha2FuIHNlbXVsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJUaWFkYSBzYW1idW5nYW4ga2UgcGVuY2V0YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJ0aWRhayBkaWtldGFodWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIHRpZGFrIHRlcnNlZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IlRpZGFrIGRhcGF0IG1lbmphbmEga2VyamEgY2V0YWthbiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJIaXRhbSAmYW1wOyBQdXRpaCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJXYXJuYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3RyZXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTGFuZHNrYXAiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IlNlbXVhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+Ikp1bGF0IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhNjBjNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlV0c2tyaWZ0c2vDuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJTa3JpdmVyaW5uc3RpbGxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IlNrcml2IHV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iTGFncmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5hc2pvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJLb3BpZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlBhcGlyc3TDuHJyZWxzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IkZhcmdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iUmV0bmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNpZGVyICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJmLmVrcy4gMeKAkzUsIDgsMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iVXRza3JpZnRzZm9yaMOlbmRzdmlzbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsbGVyIFBERi1sZXNlciBmb3IgZm9yaMOlbmRzdmlzbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iVXRza3JpZnRzYXBwZW4ga3Jhc2pldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJTaWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyZXJlciB1dHNrcmlmdHNqb2JiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iTGFncmUgc29tIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJBbGxlIHNrcml2ZXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJTa3JpdiB1dCBkaWFsb2ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU8O4ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJBbGxlIHNrcml2ZXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iTGVnZyB0aWwgdGplbmVzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJTw7hrZWZlbHRldCB2aXNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJTw7hrZWZlbHRldCBlciBza2p1bHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJMZWdnIHRpbCBza3JpdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iVmVsZyBza3JpdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iR2xlbSBza3JpdmVyZW4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gc2tyaXZlciBibGUgZnVubmV0IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBza3JpdmVyZSBibGUgZnVubmV0IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iVmVsZyB1dHNrcmlmdHN0amVuZXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iU8O4a2VyIGV0dGVyIHNrcml2ZXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iRmFudCBpbmdlbiBza3JpdmVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IlNrcml2ZXIgdXQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkF2YnJ5dGVyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlNrcml2ZXJmZWlsIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJTa3JpdmVyZW4gYmxva2tlcnRlIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iVXRza3JpZnRzam9iYiBmb3IgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlV0c2tyaWZ0c2pvYmJlciBmb3IgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJBdmJyeXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlN0YXJ0IHDDpSBueXR0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkluZ2VuIGZvcmJpbmRlbHNlIG1lZCBza3JpdmVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJ1a2plbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIHV0aWxnamVuZ2VsaWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iS3VubmUgaWtrZSBnZW5lcmVyZSB1dHNrcmlmdHNqb2JiZW4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iU3ZhcnQgb2cgaHZpdHQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iRmFyZ2UiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iU3TDpWVuZGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTGlnZ2VuZGUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IkFsbGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iT21yw6VkZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMTI1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJBZmRydWtzcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IlByaW50ZXJpbnN0ZWxsaW5nZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJBZmRydWtrZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJPcHNsYWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iQmVzdGVtbWluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJBYW50YWwgZXhlbXBsYXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iUGFwaWVyZm9ybWFhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IktsZXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iU3RhbmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQYWdpbmFcJ3MgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+ImJpanYuIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iQWZkcnVrdm9vcmJlZWxkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJQZGYtdmlld2VyIGluc3RhbGxlcmVuIHZvb3Igdm9vcmJlZWxkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJBZmRydWstYXBwIGdlY3Jhc2h0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlBhZ2luYVwncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkFmZHJ1a3RhYWsgZ2VuZXJlcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iT3BzbGFhbiBhbHMgcGRmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IkFsbGUgcHJpbnRlcnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkFmZHJ1a2RpYWxvb2d2ZW5zdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IlpvZWtlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJBbGxlIHByaW50ZXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iU2VydmljZSB0b2V2b2VnZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJab2VrdmFrIHdlZXJnZWdldmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlpvZWt2YWsgdmVyYm9yZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iUHJpbnRlciB0b2V2b2VnZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJQcmludGVyIHNlbGVjdGVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJQcmludGVyIHZlcmdldGVuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIgZ2V2b25kZW4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXJzIGdldm9uZGVuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQWZkcnVrc2VydmljZSBraWV6ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlByaW50ZXJzIHpvZWtlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IkdlZW4gcHJpbnRlcnMgZ2V2b25kZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IGFmZHJ1a2tlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gYW5udWxlcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJQcmludGVyZm91dCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBnZWJsb2trZWVyZCBkb29yIHByaW50ZXIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiBhZmRydWt0YWFrIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiBhZmRydWt0YWtlbiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJBbm51bGVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+Ik9wbmlldXcgc3RhcnRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJHZWVuIHZlcmJpbmRpbmcgbWV0IHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJvbmJla2VuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgbmlldCBiZXNjaGlrYmFhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJLYW4gZGUgYWZkcnVrdGFhayBuaWV0IGdlbmVyZXJlbiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJad2FydC13aXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iS2xldXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUG9ydHJldCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJMYW5kc2NoYXAiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IkFsbGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iQmVyZWlrIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhY2M3NgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IkJ1Zm9yIHd5ZHJ1a3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iVXN0YXdpZW5pYSBkcnVrYXJraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkRydWt1aiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlphcGlzeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+Ik1pZWpzY2UgZG9jZWxvd2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iS29waWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlJvem1pYXIgcGFwaWVydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IktvbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YWNqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlN0cm9ueSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4ibnAuIDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlBvZGdsxIVkIHd5ZHJ1a3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IlphaW5zdGFsdWogcHJ6ZWdsxIVkYXJrxJkgUERGLCBieSB6b2JhY3p5xIcgcG9kZ2zEhWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkFwbGlrYWNqYSBkcnVrdWrEhWNhIHVsZWfFgmEgYXdhcmlpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlN0cm9ueSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyb3dhbmllIHphZGFuaWEgd3lkcnVrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlphcGlzeiBqYWtvIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJXc3p5c3RraWUgZHJ1a2Fya2nigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+Ik9rbm8gZHJ1a293YW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJTenVrYWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iV3N6eXN0a2llIGRydWthcmtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iRG9kYWogdXPFgnVnxJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJQb2xlIHd5c3p1a2l3YW5pYSBqZXN0IHdpZG9jem5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlBvbGUgd3lzenVraXdhbmlhIGplc3QgdWtyeXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iRG9kYWogZHJ1a2Fya8SZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iV3liaWVyeiBkcnVrYXJrxJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJOaWUgemFwYW1pxJl0dWogZHJ1a2Fya2kiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IlpuYWxlemlvbm8gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBkcnVrYXJrxJkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiJabmFsZXppb25lIGRydWthcmtpOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iV3liaWVyeiB1c8WCdWfEmSBkcnVrb3dhbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTenVrYW5pZSBkcnVrYXJlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Ik5pZSB6bmFsZXppb25vIGRydWthcmVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iRHJ1a293YW5pZTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkFudWxvd2FuaWU6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkLFgsSFZCBkcnVrYXJraTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IkRydWthcmthIHphYmxva293YcWCYSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4gemFkYW5pZSBkcnVrb3dhbmlhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iWmFkYW5pYSBkcnVrb3dhbmlhOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFudWx1aiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iT2Qgbm93YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJCcmFrIHBvxYLEhWN6ZW5pYSB6IGRydWthcmvEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ImJyYWsgaW5mb3JtYWNqaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgbmllZG9zdMSZcG5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+Ik5pZSB1ZGHFgm8gc2nEmSB3eWdlbmVyb3dhxIcgemFkYW5pYSBkcnVrb3dhbmlhIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IkN6YXJuby1iaWHFgmUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iS29sb3IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUGlvbm93YSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJQb3ppb21hIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJXc3p5c3RraWUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iWmFrcmVzIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmZjMzk1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iRGVmaW5pw6fDtWVzIGRhIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJbXByaW1pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+Ikd1YXJkYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IkPDs3BpYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlRhbWFuaG8gZG8gcGFwZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJDb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJPcmllbnRhw6fDo28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQw6FnaW5hcyAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4icC4gZXguIDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByw6ktdmlzdWFsaXphw6fDo28gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsYXIgbyBsZWl0b3IgZGUgUERGIHBhcmEgcHLDqS12aXN1YWxpemHDp8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iQSBhcGxpY2HDp8OjbyBkZSBpbXByZXNzw6NvIGJsb3F1ZW91Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlDDoWdpbmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iQSBnZXJhciB0YXJlZmEgZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+Ikd1YXJkYXIgY29tbyBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iVG9kYXMgYXMgaW1wcmVzc29yYXMuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkNhaXhhIGRlIGRpw6Fsb2dvIGRlIGltcHJlc3PDo28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iUGVzcXVpc2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlRvZGFzIGFzIGltcHJlc3NvcmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iQWRpY2lvbmFyIHNlcnZpw6dvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iQ2FpeGEgZGUgcGVzcXVpc2EgYXByZXNlbnRhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iQ2FpeGEgZGUgcGVzcXVpc2Egb2N1bHRhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJBZGljaW9uYXIgaW1wcmVzc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IlNlbGVjaW9uYXIgaW1wcmVzc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IkVzcXVlY2VyIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYSBlbmNvbnRyYWRhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBpbXByZXNzb3JhcyBlbmNvbnRyYWRhcyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkVzY29saGVyIG8gc2VydmnDp28gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iQSBwcm9jdXJhciBpbXByZXNzb3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Ik5lbmh1bWEgaW1wcmVzc29yYSBlbmNvbnRyYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iQSBpbXByaW1pciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQSBjYW5jZWxhciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJvIGRhIGltcHJlc3NvcmEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IkEgaW1wcmVzc29yYSBibG9xdWVvdSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlRhcmVmYSBkZSBpbXByZXNzw6NvOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iVGFyZWZhcyBkZSBpbXByZXNzw6NvOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkNhbmNlbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJSZWluaWNpYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iU2VtIGxpZ2HDp8OjbyDDoCBpbXByZXNzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4iZGVzY29uaGVjaWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBpbmRpc3BvbsOtdmVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+Ik7Do28gZm9pIHBvc3PDrXZlbCBnZXJhciBhIHRhcmVmYSBkZSBpbXByZXNzw6NvIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IlByZXRvIGUgYnJhbmNvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IkNvciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJWZXJ0aWNhbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJIb3Jpem9udGFsIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJUb2RhcyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJJbnRlcnZhbG8iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmMxNTdkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iU3AuIGRlIGltcHJlc3PDo28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iQ29uZmlndXIuIGRhIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJbXByaW1pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlNhbHZhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkRlc3Rpbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ8OzcGlhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iVGFtYW5obyBkbyBwYXBlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IkNvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGHDp8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlDDoWdpbmFzICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJFeC46IDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJWaXN1YWxpemHDp8OjbyBkZSBpbXByZXNzw6NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJJbnN0YWxhciBvIHZpc3VhbGl6YWRvciBkZSBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+Ik8gYXBsaWNhdGl2byBkZSBpbXByZXNzw6NvIGZhbGhvdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJQw6FnaW5hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlcmFuZG8gdHJhYmFsaG8gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNhbHZhciBjb21vIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJUb2RhcyBhcyBpbXByZXNzb3Jhc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iRGnDoWxvZ28gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJQZXNxdWlzYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVG9kYXMgYXMgaW1wcmVzc29yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJBZGljaW9uYXIgc2VydmnDp28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJDYWl4YSBkZSBwZXNxdWlzYSBleGliaWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IkNhaXhhIGRlIHBlc3F1aXNhIG9jdWx0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkFkaWNpb25hciBpbXByZXNzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU2VsZWNpb25hciBpbXByZXNzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iRXNxdWVjZXIgaW1wcmVzc29yYSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBpbXByZXNzb3JhIGVuY29udHJhZGEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltcHJlc3NvcmFzIGVuY29udHJhZGFzIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iU2VsZWNpb25lIG8gc2VydmnDp28gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJvY3VyYW5kbyBpbXByZXNzb3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Ik5lbmh1bWEgaW1wcmVzc29yYSBlbmNvbnRyYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSW1wcmltaW5kbyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQ2FuY2VsYW5kbyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJvIGFvIGltcHJpbWlyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJBIGltcHJlc3NvcmEgYmxvcXVlb3UgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJUcmFiYWxobyBkZSBpbXByZXNzw6NvIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJUcmFiYWxob3MgZGUgaW1wcmVzc8OjbyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkNhbmNlbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJSZWluaWNpYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iU2VtIGNvbmV4w6NvIGNvbSBhIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJkZXNjb25oZWNpZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIG7Do28gZGlzcG9uw612ZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iTsOjbyBmb2kgcG9zc8OtdmVsIGdlcmFyIG8gdHJhYmFsaG8gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJQcmV0byBlIGJyYW5jbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJDb3IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUmV0cmF0byI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJQYWlzYWdlbSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVG9kYXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iSW50ZXJ2YWxvIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljM2JkYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IkRlcnVsYXRvciBwcmludC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iU2V0xINyaWxlIGltcHJpbWFudGVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iUHJpbnRhyJtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iU2FsdmHIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5hyJtpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJDb3BpaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iRm9ybWF0dWwgaMOicnRpZWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJDb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGFyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlBhZ2luaSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iZGUgZXguIDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByZXZpenVhbGl6YcibaSBwcmludGFyZWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGHIm2kgUERGIHZpZXdlciBwZW50cnUgcHJldml6dWFsaXphcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkFwbGljYcibaWEgZGUgcHJpbnRhcmUgcy1hIGJsb2NhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJQYWdpbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJTZSBnZW5lcmVhesSDIHNhcmNpbsSDIHByaW50YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU2FsdmHIm2kgY2EgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlRvYXRlIGltcHJpbWFudGVsZS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iQ2FzZXRhIGRlIGRpYWxvZyBkZSBwcmludGFyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJDxIN1dGHIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVG9hdGUgaW1wcmltYW50ZWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iQWTEg3VnYcibaSB1biBzZXJ2aWNpdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IkNhc2V0YSBkZSBjxIN1dGFyZSBlc3RlIGFmaciZYXTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJDYXNldGEgZGUgY8SDdXRhcmUgZXN0ZSBhc2N1bnPEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkFkxIN1Z2HIm2kgbyBpbXByaW1hbnTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IlNlbGVjdGHIm2kgaW1wcmltYW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Ik9taXRlyJtpIGltcHJpbWFudGEiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gaW1wcmltYW50xIMgZ8SDc2l0xIMiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IChkZSkgaW1wcmltYW50ZSBnxINzaXRlIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQWxlZ2XIm2kgc2VydmljaXVsIGRlIHByaW50YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTZSBjYXV0xIMgaW1wcmltYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Ik51IGF1IGZvc3QgZ8SDc2l0ZSBpbXByaW1hbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iU2UgcHJpbnRlYXrEgyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iU2UgYW51bGVhesSDIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVyb2FyZSBkZSBwcmludGFyZTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlByaW50YXJlIGJsb2NhdMSDOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlNhcmNpbsSDIGRlIHByaW50YXJlIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJTYXJjaW5pIGRlIHByaW50YXJlIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQW51bGHIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlcG9ybmnIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iTnUgZXhpc3TEgyBjb25leGl1bmUgbGEgbyBpbXByaW1hbnTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+Im5lY3Vub3NjdXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gLSBpbmRpc3BvbmliaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iTnUgcy1hIHB1dHV0IGdlbmVyYSBzYXJjaW5hIGRlIHByaW50YXJlIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IkFsYi1uZWdydSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJDb2xvciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0cmV0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IlBlaXNhaiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVG9hdGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iSW50ZXJ2YWwiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjdmM2M4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4i0KHQv9GD0LvQtdGAINC/0LXRh9Cw0YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLQndCw0YHRgtGA0L7QudC60Lgg0L/RgNC40L3RgtC10YDQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+ItCf0LXRh9Cw0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+ItCh0L7RhdGA0LDQvdC40YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+ItCf0YDQuNC90YLQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+ItCa0L7Qv9C40LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+ItCk0L7RgNC80LDRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+ItCf0LXRh9Cw0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+ItCe0YDQuNC10L3RgtCw0YbQuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i0KHQotCg0JDQndCY0KbQqyAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i0L3QsNC/0YAuLCAx4oCTNSwgOCwgMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+ItCj0YHRgtCw0L3QvtCy0LjRgtGMINGB0YDQtdC00YHRgtCy0L4g0L/RgNC+0YHQvNC+0YLRgNCwIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i0KHQsdC+0Lkg0L/RgNC40LvQvtC20LXQvdC40Y8g0L/QtdGH0LDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+ItCa0L7Qu9C40YfQtdGB0YLQstC+INGB0YLRgNCw0L3QuNGGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i0KHQvtC30LTQsNC90LjQtSDQt9Cw0LTQsNC90LjRjyDQv9C10YfQsNGC0LjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiLQodC+0YXRgNCw0L3QuNGC0Ywg0LrQsNC6IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLQktGB0LUg0L/RgNC40L3RgtC10YDRiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4i0JTQuNCw0LvQvtCz0L7QstC+0LUg0L7QutC90L4g0L/QtdGH0LDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+ItCf0L7QuNGB0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i0JLRgdC1INC/0YDQuNC90YLQtdGA0YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiLQlNC+0LHQsNCy0LjRgtGMINGB0LvRg9C20LHRgyDQv9C10YfQsNGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLQntC60L3QviDQv9C+0LjRgdC60LAg0L/QvtC60LDQt9Cw0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLQntC60L3QviDQv9C+0LjRgdC60LAg0YHQutGA0YvRgtC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i0JTQvtCx0LDQstC40YLRjCDQv9GA0LjQvdGC0LXRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+ItCS0YvQsdGA0LDRgtGMINC/0YDQuNC90YLQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i0KPQtNCw0LvQuNGC0Ywg0L/RgNC40L3RgtC10YAiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+ItCd0LDQudC00LXQvSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INC/0YDQuNC90YLQtdGAIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i0J3QsNC50LTQtdC90L4g0L/RgNC40L3RgtC10YDQvtCyOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i0JLRi9Cx0LXRgNC40YLQtSDRgdC70YPQttCx0YMg0L/QtdGH0LDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQn9C+0LjRgdC6INC/0YDQuNC90YLQtdGA0L7QsuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+ItCd0LjRh9C10LPQviDQvdC1INC90LDQudC00LXQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i0J/QtdGH0LDRgtGMINC30LDQtNCw0L3QuNGPIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwi4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i0J7RgtC80LXQvdCwINC30LDQtNCw0L3QuNGPIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+ItCe0YjQuNCx0LrQsCDQt9Cw0LTQsNC90LjRjyBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+ItCX0LDQtNCw0L3QuNC1IFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwiINC30LDQsdC70L7QutC40YDQvtCy0LDQvdC+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+ItCX0LDQtNCw0L3QuNC1INC/0LXRh9Cw0YLQuDogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+ItCX0LDQtNCw0L3QuNGPINC/0LXRh9Cw0YLQuDogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLQntGC0LzQtdC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+ItCf0L7QstGC0L7RgNC40YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLQndC10YIg0YHQstGP0LfQuCDRgSDQv9GA0LjQvdGC0LXRgNC+0LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLQvdC10LjQt9Cy0LXRgdGC0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPsKg4oCTINC90LXQtNC+0YHRgtGD0L/QtdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC/0YDQsNCy0LjRgtGMINC00L7QutGD0LzQtdC90YIg0L3QsCDQv9C10YfQsNGC0YwuIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+ItCn0LXRgNC90L4t0LHQtdC70LDRjyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLQptCy0LXRgtC90LDRjyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLQmtC90LjQs9CwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+ItCQ0LvRjNCx0L7QvCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4i0JLRgdC1IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+ItCU0LjQsNC/0LDQt9C+0L0iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWEwMjJkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iWmFyYcSPb3ZhxI0gdGxhxI1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+Ik5hc3RhdmVuaWEgdGxhxI1pYXJuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IlRsYcSNacWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iVWxvxb5pxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJDaWXEviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJLw7NwaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlZlxL5rb3PFpSBwYXBpZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iRmFyYmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJPcmllbnTDoWNpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNUUsOBTktZICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJuYXByLiAx4oCTNSwgOCwgMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iVWvDocW+a2EgcHJlZCB0bGHEjW91Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJJbsWhdGFsb3ZhxaUgem9icmF6b3ZhxI0gUERGIG5hIHpvYnJhemVuaWUgdWvDocW+a3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkFwbGlrw6FjaWEgcHJlIHRsYcSNIHpseWhhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iU3RyYW55Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iR2VuZXJ1amUgc2EgdGxhxI1vdsOhIMO6bG9oYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlVsb8W+acWlIGFrbyBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iVsWhZXRreSB0bGHEjWlhcm5lLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJEaWFsw7Nnb3bDqSBva25vIHRsYcSNZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJWWUjEvUFEw4FWQU5JRSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJWxaFldGt5IHRsYcSNaWFybmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJQcmlkYcWlIHNsdcW+YnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJWeWjEvmFkw6F2YWNpZSBwb2xlIHNhIHpvYnJhenVqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJWeWjEvmFkw6F2YWNpZSBwb2xlIGplIHNrcnl0w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJQcmlkYcWlIHRsYcSNaWFyZcWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iVnlicmHFpSB0bGHEjWlhcmXFiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Ik9kc3Ryw6FuacWlIHRsYcSNaWFyZcWIIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiJOYcWhbGEgc2EgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiB0bGHEjWlhcmXFiCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+IlBvxI1ldCBuw6FqZGVuw71jaCB0bGHEjWlhcm7DrTogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlbDvWJlciB0bGHEjW92ZWogc2x1xb5ieSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iVnloxL5hZMOhdmFuaWUgdGxhxI1pYXJuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJOZW5hxaFsaSBzYSDFvmlhZG5lIHRsYcSNaWFybmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJQcmViaWVoYSB0bGHEjSDDumxvaHkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IlByZWJpZWhhIHpydcWhZW5pZSDDumxvaHkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iQ2h5YmEgdGxhxI1pYXJuZSDigJMgw7psb2hhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJUbGHEjWlhcmXFiCB6YWJsb2suIMO6bG9odSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlBvxI1ldCB0bGHEjW92w71jaCDDumxvaDogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlBvxI1ldCB0bGHEjW92w71jaCDDumxvaDogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJacnXFoWnFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iU3B1c3RpxaUgem5vdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4ixb1pYWRuZSBwcmlwb2plbmllIGsgdGxhxI1pYXJuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+Im5lem7DoW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBuaWUgamUgayBkaXNwb3rDrWNpaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJUbGHEjW92w7ogw7psb2h1IG5pZSBqZSBtb8W+bsOpIHZ5dHZvcmnFpSI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLEjGllcm5vYmllbGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iRmFyYmEiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iTmEgdsO9xaFrdSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJOYSDFocOtcmt1IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJWxaFldGt5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IlJvenNhaCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNGZlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJUaXNrLiB2IG96YWRqdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJOYXN0YXZpdHZlIHRpc2thbG5pa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJOYXRpc25pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iU2hyYW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iQ2lsaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiLFoHQuIGtvcGlqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJWZWxpa29zdCBwYXBpcmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iQmFydm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iUG9zdGF2aXRldiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IsWgdC4gc3RyYW5pICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJucHIuIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJQcmVkb2dsZWQgdGlza2FuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IlphIHByZWRvZ2xlZCBuYW1lc3RpdGUgcHJlZ2xlZG92YWxuaWsgemEgUERGLWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJBcGxpa2FjaWphIHphIHRpc2thbmplIHNlIGplIHpydcWhaWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IsWgdC4gc3RyYW5pOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IlVzdHZhcmphbmplIHphaHRldmUgemEgdGlzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNocmFuaSBrb3QgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlZzaSB0aXNrYWxuaWtpIOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iUG9nb3Zvcm5vIG9rbm8gemEgdGlza2FuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iSXNrYW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJWc2kgdGlza2FsbmlraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IkRvZGFqIHN0b3JpdGV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iSXNrYWxubyBwb2xqZSBqZSBwcmlrYXphbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iSXNrYWxubyBwb2xqZSBqZSBza3JpdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJEb2RhamFuamUgdGlza2FsbmlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+Ikl6YmlyYSB0aXNrYWxuaWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iT2RzdHJhbml0ZXYgdGlza2FsbmlrYSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iTmFqZGVuIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gdGlza2FsbmlrIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4ixaB0ZXZpbG8gbmFqZGVuaWggdGlza2Fsbmlrb3Y6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJJemJlcml0ZSB0aXNrYWxubyBzdG9yaXRldiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iSXNrYW5qZSB0aXNrYWxuaWtvdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IlRpc2thbG5pa292IG5pIG1vZ2/EjWUgbmFqdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJUaXNrYW5qZTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IlByZWtsaWM6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Ik5hcGFrYSB0aXNrYWxuaWthOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iVGlza2FsbmlrIGplIGJsb2tpcmFsIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iVGlza2Fsbm8gb3ByYXZpbG86IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJUaXNrYWxuYSBvcHJhdmlsYTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJQcmVrbGnEjWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlphxI1uaSB6bm92YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJOaSBwb3ZlemF2ZSBzIHRpc2thbG5pa29tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4ibmV6bmFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgbmkgbmEgdm9sam8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iVGlza2FsbmVnYSBvcHJhdmlsYSBuaSBiaWxvIG1vZ2/EjWUgdXN0dmFyaXRpIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IsSMcm5vLWJlbG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iQmFydm5vIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+Ik5hdnBpxI1ubyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJMZcW+ZcSNZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVnNlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+Ik9ic2VnIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhYjFhNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+ItCo0YLQsNC80L8uINC40Lcg0LzQtdC80L7RgC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4i0J/QvtC00LXRiNCw0LLQsNGa0LAg0YjRgtCw0LzQv9Cw0YfQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+ItCo0YLQsNC80L/QsNGYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i0KHQsNGH0YPQstCw0ZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLQntC00YDQtdC00LjRiNGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i0JrQvtC/0LjRmNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLQktC10LvQuNGH0LjQvdCwINC/0LDQv9C40YDQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+ItCR0L7RmNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i0J/QvtC70L7QttCw0ZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLQodGC0YDQsNC90LjRhtC1ICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLQvdC/0YAuIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLQn9GA0LXQs9C70LXQtCDQv9GA0LUg0YjRgtCw0LzQv9Cw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4i0JjQvdGB0YLQsNC70LjRgNCw0ZggUERGINC/0YDQuNC60LDQt9C40LLQsNGHINC30LAg0L/RgNC10LPQu9C10LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+ItCQ0L/Qu9C40LrQsNGG0LjRmNCwINC30LAg0YjRgtCw0LzQv9Cw0ZrQtSDRmNC1INC+0YLQutCw0LfQsNC70LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i0KHRgtGA0LDQvdC40YbQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+ItCT0LXQvdC10YDQuNGB0LDRmtC1INC30LDQtNCw0YLQutCwINC30LAg0YjRgtCw0LzQv9Cw0ZrQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+ItCh0LDRh9GD0LLQsNGYINC60LDQviBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i0KHQstC4INGI0YLQsNC80L/QsNGH0LjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+ItCU0LjRmNCw0LvQvtCzINC30LAg0YjRgtCw0LzQv9Cw0ZrQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLQn9GA0LXRgtGA0LDQttC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+ItCh0LLQuCDRiNGC0LDQvNC/0LDRh9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i0JTQvtC00LDRmCDRg9GB0LvRg9Cz0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLQntC60LLQuNGAINC30LAg0L/RgNC10YLRgNCw0LPRgyDRmNC1INC/0YDQuNC60LDQt9Cw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4i0J7QutCy0LjRgCDQt9CwINC/0YDQtdGC0YDQsNCz0YMg0ZjQtSDRgdCw0LrRgNC40LLQtdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i0JTQvtC00LDRmCDRiNGC0LDQvNC/0LDRhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+ItCY0LfQsNCx0LXRgNC4INGI0YLQsNC80L/QsNGHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i0JfQsNCx0L7RgNCw0LLQuCDRiNGC0LDQvNC/0LDRhyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i0J/RgNC+0L3QsNGS0LXQvSDRmNC1IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g0YjRgtCw0LzQv9Cw0YciPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiLQn9GA0L7QvdCw0ZLQtdC90L4g0ZjQtSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INGI0YLQsNC80L/QsNGH0LAiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQmNC30LDQsdC10YDQuNGC0LUg0YPRgdC70YPQs9GDINGI0YLQsNC80L/QsNGa0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+ItCf0YDQtdGC0YDQsNCz0LAg0YjRgtCw0LzQv9Cw0YfQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+ItCd0LjRmNC1INC/0YDQvtC90LDRktC10L0g0L3QuNGY0LXQtNCw0L0g0YjRgtCw0LzQv9Cw0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLQqNGC0LDQvNC/0LAg0YHQtSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i0J7RgtC60LDQt9GD0ZjQtSDRgdC1IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+ItCT0YDQtdGI0LrQsCDRiNGC0LDQvNC/0LDRh9CwIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLQqNGC0LDQvNC/0LDRhyDRmNC1INCx0LvQvtC60LjRgNCw0L4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiLQl9Cw0LTQsNGC0LDQuiDRiNGC0LDQvNC/0LDRmtCwIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiLQl9Cw0LTQsNGG0Lgg0YjRgtCw0LzQv9Cw0ZrQsCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+ItCe0YLQutCw0LbQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i0J/QvtC90L7QstC+INC/0L7QutGA0LXQvdC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+ItCd0LXQvNCwINCy0LXQt9C1INGB0LAg0YjRgtCw0LzQv9Cw0YfQtdC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i0L3QtdC/0L7Qt9C90LDRgtC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyDQvdC10LTQvtGB0YLRg9C/0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLQndC40ZjQtSDQvNC+0LPRg9Gb0LUg0LPQtdC90LXRgNC40YHQsNGC0Lgg0LfQsNC00LDRgtCw0Log0LfQsCDRiNGC0LDQvNC/0LDRmtC1Ijwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+ItCm0YDQvdC+LdCx0LXQu9C+IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+ItCR0L7RmNCwIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+ItCj0YHQv9GA0LDQstC90L4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4i0JLQvtC00L7RgNCw0LLQvdC+IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLQodCy0LUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i0J7Qv9GB0LXQsyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyODZmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJVdHNrcmlmdHNrw7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iU2tyaXZhcmluc3TDpGxsbmluZ2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iU2tyaXYgdXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJTcGFyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkRlc3RpbmF0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IktvcGlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iUGFwcGVyc3N0b3JsZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJGw6RyZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGVyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iU2lkb3IgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InQuZXguIDHigJM1LDgsMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iRsO2cmhhbmRzZ3JhbnNrbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsbGVyYSBQREYtbMOkc2FyZSBmw7ZyIGbDtnJoYW5kc2dyYW5za25pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IlV0c2tyaWZ0c2FwcGVuIGtyYXNjaGFkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJTaWRvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyZXJhciB1dHNrcmlmdHNqb2JiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU3BhcmEgc29tIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJBbGxhIHNrcml2YXJlIC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iRGlhbG9ncnV0YW4gU2tyaXYgdXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU8O2ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJBbGxhIHNrcml2YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iTMOkZ2cgdGlsbCB0asOkbnN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iU8O2a3J1dGFuIHZpc2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlPDtmtydXRhbiDDpHIgZG9sZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkzDpGdnIHRpbGwgc2tyaXZhcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJWw6RsaiBlbiBza3JpdmFyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlRhIGJvcnQgZW4gc2tyaXZhcmUiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gc2tyaXZhcmUgaGl0dGFkZXMiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHNrcml2YXJlIGhpdHRhZGVzIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iVsOkbGogdXRza3JpZnRzdGrDpG5zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iU8O2a2VyIGVmdGVyIHNrcml2YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iRGV0IGdpY2sgaW50ZSBhdHQgaGl0dGEgbsOlZ3JhIHNrcml2YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iU2tyaXZlciB1dCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQXZicnl0ZXIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iU2tyaXZhcmZlbCBmw7ZyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJTa3JpdmFyZW4gaGFyIGJsb2NrZXJhdCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlV0c2tyaWZ0c2pvYmIg4oCTIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJVdHNrcmlmdHNqb2JiIOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkF2YnJ5dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iU3RhcnRhIG9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkluZ2VuIGFuc2x1dG5pbmcgdGlsbCBza3JpdmFyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJva8OkbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIGludGUgdGlsbGfDpG5nbGlnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IkRldCBnaWNrIGludGUgYXR0IHNrYXBhIHV0c2tyaWZ0c2pvYmJldCI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJTdmFydHZpdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJGw6RyZyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJTdMOlZW5kZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJMaWdnYW5kZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iQWxsYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJJbnRlcnZhbGwiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWM4Njg3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJvZ3JhbXUgeWEga3VhbmRhYSBQcmludGEga3dhIGFqaWxpIHlhIEt1Y2hhcGlzaGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iTWlwYW5naWxpbyB5YSBwcmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJDaGFwaXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IkhpZmFkaGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJJdGFrYXBvZmlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJOYWthbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlVrdWJ3YSB3YSBLYXJhdGFzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IlJhbmdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iTWthbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+Ikt1cmFzYSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iay5tLiAx4oCTNSwgOCwgMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iQ2h1bmd1bGlhIGt3YW56YSBrYWJsYSB5YSBrdWNoYXBpc2hhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJTYWtpbmlzaGEga2l0YXphbWFqaSBjaGEgUERGIGt3YSBvbnllc2hvIGxhIGt1Y2h1bmd1bGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJQcm9ncmFtdSB5YSBrdWNoYXBpc2hhIGltZWFjaGEga3VmYW55YSBrYXppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+Ikt1cmFzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkluYXphbnppc2hhIGthemkgeWEga3VjaGFwaXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IkhpZmFkaGkga2FtYSBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iUHJpbnRhIHpvdGUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkNoYXBpc2hhIG1henVuZ3Vtem8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iVGFmdXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlByaW50YSB6b3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iT25nZXphIGh1ZHVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Iktpc2FuZHVrdSBjaGEga3V0YWZ1dGlhIGtpbWVvbnllc2h3YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJLaXNhbmR1a3UgY2hhIGt1dGFmdXRpYSBraW1lZmljaHdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iT25nZXphIHByaW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IkNoYWd1YSBwcmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJTYWhhdSBwcmludGEiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IlByaW50YSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltZXBhdGlrYW5hIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iUHJpbnRhIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gemltZXBhdGlrYW5hIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQ2hhZ3VhIGh1ZHVtYSB5YSBwcmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IkluYXRhZnV0YSBwcmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJIYWt1bmEgcHJpbnRhIHppbGl6b3BhdGlrYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSW5hY2hhcGlzaGEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkluYWdoYWlyaSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJIaXRpbGFmdSB5YSBrdWNoYXBpc2hhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGEgaW1lZnVuZ3dhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iS2F6aSB5YSBrdWNoYXBpc2hhIHlhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJLYXppIHphIGt1Y2hhcGlzaGEgemEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJHaGFpcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IkFuemlzaGEgdXB5YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJIYWt1bmEgbXV1bmdhbmlzaG8ga3dhIHByaW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ImhhaWp1bGlrYW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IC0gaGFpcGF0aWthbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iSGFpa3V3ZXphIGt1dW5kYSBrYXppIHlhIGt1Y2hhcGlzaGEiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iTnlldXNpIG5hIE55ZXVwZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJSYW5naSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJXaW1hIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Ik1sYWxvIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJab3RlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+Ik1hc2FmYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMDFkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IuC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IuC4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IuC4muC4seC4meC4l+C4tuC4gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IuC4m+C4peC4suC4ouC4l+C4suC4hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiLguKrguLPguYDguJnguLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IuC4guC4meC4suC4lOC4guC4reC4h+C4geC4o+C4sOC4lOC4suC4qSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IuC4quC4tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IuC4geC4suC4o+C4p+C4suC4h+C5geC4meC4pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IuC4q+C4meC5ieC4siAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i4LmA4LiK4LmI4LiZIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i4LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiH4LiB4LmI4Lit4LiZ4Lie4Li04Lih4Lie4LmMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLguJXguLTguJTguJXguLHguYnguIfguYLguJvguKPguYHguIHguKPguKHguJTguLkgUERGIOC5gOC4nuC4t+C5iOC4reC4lOC4ueC4q+C4meC5ieC4suC4leC4seC4p+C4reC4ouC5iOC4suC4hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i4LmB4Lit4Lib4LiB4Liy4Lij4Lie4Li04Lih4Lie4LmM4LiC4Lix4LiU4LiC4LmJ4Lit4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IuC4q+C4meC5ieC4siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IuC4geC4s+C4peC4seC4h+C4quC4o+C5ieC4suC4h+C4h+C4suC4meC4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IuC4muC4seC4meC4l+C4tuC4geC5gOC4m+C5h+C4mSBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmM4LiX4Lix4LmJ4LiH4Lir4Lih4LiU4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLguIrguYjguK3guIfguYLguJXguYnguJXguK3guJrguIHguLLguKPguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i4LiE4LmJ4LiZ4Lir4LiyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IuC5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jOC4l+C4seC5ieC4h+C4q+C4oeC4lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IuC5gOC4nuC4tOC5iOC4oeC4muC4o+C4tOC4geC4suC4oyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IuC5geC4quC4lOC4h+C4iuC5iOC4reC4h+C4hOC5ieC4meC4q+C4suC4reC4ouC4ueC5iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLguIvguYjguK3guJnguIrguYjguK3guIfguITguYnguJnguKvguLLguK3guKLguLnguYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLguYDguJ7guLTguYjguKHguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLguYDguKXguLfguK3guIHguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLguYTguKHguYjguJXguYnguK3guIfguIjguLPguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IuC4nuC4muC5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IOC5gOC4hOC4o+C4t+C5iOC4reC4hyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+IuC4nuC4muC5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IOC5gOC4hOC4o+C4t+C5iOC4reC4hyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuC5gOC4peC4t+C4reC4geC4muC4o+C4tOC4geC4suC4o+C4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4LiB4Liz4Lil4Lix4LiH4LiE4LmJ4LiZ4Lir4Liy4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i4LmE4Lih4LmI4Lie4Lia4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i4LiB4Liz4Lil4Lix4LiH4Lie4Li04Lih4Lie4LmMIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiLguIHguLPguKXguLHguIfguKLguIHguYDguKXguLTguIEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i4LiC4LmJ4Lit4Lic4Li04LiU4Lie4Lil4Liy4LiU4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmMIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYzguYTguJTguYnguJrguKXguYfguK3guIEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiLguIfguLLguJnguJ7guLTguKHguJ7guYwgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IuC4h+C4suC4meC4nuC4tOC4oeC4nuC5jCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuC4ouC4geC5gOC4peC4tOC4gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4LmD4Lir4Lih4LmIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuC5hOC4oeC5iOC4oeC4teC4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4reC5hOC4m+C4ouC4seC4h+C5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+IuC5hOC4oeC5iOC4l+C4o+C4suC4miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDguYTguKHguYjguJ7guKPguYnguK3guKHguYPguIrguYnguIfguLLguJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4Liq4Lij4LmJ4Liy4LiH4LiH4Liy4LiZ4Lie4Li04Lih4Lie4LmMIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IuC4guC4suC4p+C4lOC4syI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLguKrguLUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4i4LmB4LiZ4Lin4LiV4Lix4LmJ4LiHIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IuC5geC4meC4p+C4meC4reC4mSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4i4LiX4Lix4LmJ4LiH4Lir4Lih4LiUIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IuC4iuC5iOC4p+C4hyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MmM5MzcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+Ik1nYSBzZXR0aW5nIG5nIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJLXByaW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iSS1zYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iUGF0dXR1bmd1aGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+Ik1nYSBLb3B5YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iTGFraSBuZyBQYXBlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+Ikt1bGF5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3J5ZW50YXN5b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJNZ2EgUGFoaW5hICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJoYWwuIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iUHJldmlldyBzYSBwYWctcHJpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ik1hZy1pbnN0YWxsIG5nIFBERiB2aWV3ZXIgcGFyYSBzYSBwYWctcHJldmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iTmFnLWNyYXNoIGFuZyBhcHAgc2EgcGFnLXByaW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+Ik1nYSBQYWhpbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHdW1hZ2F3YSBuZyBwYWctcHJpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJJLXNhdmUgYmlsYW5nIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJMYWhhdCBuZyBwcmludGVy4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJEaWFsb2cgbmcgcGFnLXByaW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IkhhbmFwaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iTGFoYXQgbmcgcHJpbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+Ik1hZ2RhZ2RhZyBuZyBzZXJiaXN5byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IklwaW5hcGFraXRhIGFuZyBib3ggcGFyYSBzYSBwYWdoYWhhbmFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+Ik5ha2F0YWdvIGFuZyBib3ggcGFyYSBzYSBwYWdoYWhhbmFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iTWFnZGFnZGFnIG5nIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJQaWxpaW4gYW5nIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJLYWxpbXV0YW4gYW5nIHByaW50ZXIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlciBhbmcgbmFraXRhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiAobmEpIHByaW50ZXIgYW5nIG5ha2l0YSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlB1bWlsaSBuZyBzZXJiaXN5byBuZyBwYWctcHJpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Ik5hZ2hhaGFuYXAgbmcgbWdhIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJXYWxhbmcgbWdhIHByaW50ZXIgbmEgbmFraXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iUGluaS1wcmludCBhbmcgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IktpbmFrYW5zZWxhIGFuZyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJvciBzYSBwcmludGVyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJOYWthLWJsb2NrIGFuZyBQcmludGVyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iUGFnLXByaW50IG5nIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJNZ2EgcGFnLXByaW50IG5nIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iS2Fuc2VsYWhpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iSS1yZXN0YXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkhpbmRpIG5ha2Frb25la3RhIHNhIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJoaW5kaSBhbGFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBoaW5kaSBhdmFpbGFibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iSGluZGkgbWFidW8gYW5nIHBhZy1wcmludCI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJCbGFjayAmYW1wOyBXaGl0ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJLdWxheSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0cmFpdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJMYW5kc2NhcGUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IkxhaGF0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IlNha29wIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlMzAyZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iWWF6xLFjxLEgYXlhcmxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iWWF6ZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IktheWRldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkhlZGVmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IktvcHlhIHNhecSxc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJLYcSfxLF0IEJveXV0dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IlJlbmtsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IlNheWZhIHnDtm7DvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNheWZhICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLDtnIuIDEtNSw4LDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJZYXpkxLFybWF5xLEgw7ZuaXpsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iw5ZuaXpsZW1layBpw6dpbiBQREYgZ8O2csO8bnTDvGxleWljaSB5w7xrbGV5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IllhemTEsXJtYSB1eWd1bGFtYXPEsSBraWxpdGxlbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlNheWZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iWWF6ZMSxcm1hIGnFn2kgb2x1xZ90dXJ1bHV5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJQREYgb2xhcmFrIGtheWRldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJUw7xtIHlhesSxY8SxbGFy4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJZYXpkxLFybWEgaWxldGnFn2ltIGt1dHVzdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJBcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVMO8bSB5YXrEsWPEsWxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+Ikhpem1ldCBla2xlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iQXJhbWEga3V0dXN1IGfDtnN0ZXJpbGl5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iQXJhbWEga3V0dXN1IGdpemxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iWWF6xLFjxLEgZWtsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IllhesSxY8SxIHNlw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJZYXrEsWPEsXnEsSB1bnV0Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHlhesSxY8SxIGJ1bHVuZHUiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHlhesSxY8SxIGJ1bHVuZHUiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJZYXpkxLFybWEgaGl6bWV0aW5pIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iWWF6xLFjxLFsYXIgYXJhbsSxeW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iWWF6xLFjxLEgYnVsdW5hbWFkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IHlhemTEsXLEsWzEsXlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gaXB0YWwgZWRpbGl5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IllhesSxY8SxIGhhdGFzxLE6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJZYXrEsWPEsSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IGnFn2luaSBlbmdlbGxlZGkiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiB5YXpkxLFybWEgacWfaSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4geWF6ZMSxcm1hIGnFn2xlcmkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4ixLBwdGFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJZZW5pZGVuIGJhxZ9sYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iWWF6xLFjxLEgYmHEn2xhbnTEsXPEsSB5b2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJiaWxpbm1peW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBrdWxsYW7EsWxhbcSxeW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IllhemTEsXJtYSBpxZ9pIG9sdcWfdHVydWxhbWFkxLEiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iU2l5YWggQmV5YXoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iUmVua2xpIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IkRpa2V5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IllhdGF5IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJUw7xtw7wiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iQXJhbMSxayI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNTI2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+ItCd0LDQu9Cw0YjRgtGD0LLQsNC90L3RjyDQv9GA0LjQvdGC0LXRgNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4i0JTRgNGD0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLQl9Cx0LXRgNC10LPRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4i0JzRltGB0YbQtSDQv9GA0LjQt9C90LDRhy3QvdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+ItCa0L7Qv9GW0ZciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+ItCg0L7Qt9C80ZbRgCDQv9Cw0L/QtdGA0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLQmtC+0LvRltGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i0J7RgNGW0ZTQvdGC0LDRhtGW0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLQodGC0L7RgNGW0L3QutC4ICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLQvdCw0L/RgC4sMeKAkzUsIDgsIDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+ItCS0LXRgNGB0ZbRjyDQtNC70Y8g0LTRgNGD0LrRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4i0KPRgdGC0LDQvdC+0LLQuNGC0Lgg0LfQsNGB0ZbQsSDQv9C10YDQtdCz0LvRj9C00YMgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLQn9GA0L7Qs9GA0LDQvNCwINC00YDRg9C60YMg0LDQstCw0YDRltC50L3QviDQt9Cw0LLQtdGA0YjQuNC70LAg0YDQvtCx0L7RgtGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+ItCh0YLQvtGA0ZbQvdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLQodGC0LLQvtGA0Y7RlNGC0YzRgdGPINC30LDQstC00LDQvdC90Y8g0LTRgNGD0LrRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+ItCX0LHQtdGA0LXQs9GC0Lgg0Y/QuiBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i0KPRgdGWINC/0YDQuNC90YLQtdGA0LjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+ItCU0ZbQsNC70L7Qs9C+0LLQtSDQstGW0LrQvdC+INC00YDRg9C60YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i0J/QvtGI0YPQuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiLQo9GB0ZYg0L/RgNC40L3RgtC10YDQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+ItCU0L7QtNCw0YLQuCDRgdC70YPQttCx0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLQktGW0LrQvdC+INC/0L7RiNGD0LrRgyDQv9C+0LrQsNC30LDQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+ItCS0ZbQutC90L4g0L/QvtGI0YPQutGDINGB0YXQvtCy0LDQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i0JTQvtC00LDRgtC4INC/0YDQuNC90YLQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4i0JLQuNCx0YDQsNGC0Lgg0L/RgNC40L3RgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLQhtCz0L3QvtGA0YPQstCw0YLQuCDQv9GA0LjQvdGC0LXRgCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i0JfQvdCw0LnQtNC10L3QviDQv9GA0LjQvdGC0LXRgNGW0LI6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiLQl9C90LDQudC00LXQvdC+INC/0YDQuNC90YLQtdGA0ZbQsjogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+ItCS0LjQsdGA0LDRgtC4INGB0LvRg9C20LHRgyDQtNGA0YPQutGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQn9C+0YjRg9C6INC/0YDQuNC90YLQtdGA0ZbQsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+ItCf0YDQuNC90YLQtdGA0Lgg0L3QtSDQt9C90LDQudC00LXQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i0JfQsNCy0LTQsNC90L3RjyBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiDQtNGA0YPQutGD0ZTRgtGM0YHRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+ItCX0LDQstC00LDQvdC90Y8gXCI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+XCIg0YHQutCw0YHQvtCy0YPRlNGC0YzRgdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLQn9C+0LzQuNC70LrQsCDQt9Cw0LLQtNCw0L3QvdGPIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i0JfQsNCy0LTQsNC90L3RjyBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+ItCX0LDQstC00LDQvdC90Y8g0LTRgNGD0LrRgyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4i0JfQsNCy0LTQsNC90L3RjyDQtNGA0YPQutGDIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i0KHQutCw0YHRg9Cy0LDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLQn9C10YDQtdC30LDQv9GD0YHRgtC40YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLQndC10LzQsNGUINC34oCZ0ZTQtNC90LDQvdC90Y8g0Lcg0L/RgNC40L3RgtC10YDQvtC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i0L3QtdCy0ZbQtNC+0LzQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4i0JfQsNCy0LTQsNC90L3RjyBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiDQvdC1INC00L7RgdGC0YPQv9C90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i0J3QtSDQstC00LDQu9C+0YHRjyDRgdGC0LLQvtGA0LjRgtC4INC30LDQstC00LDQvdC90Y8g0LTRgNGD0LrRgyI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLQp9C+0YDQvdC+LdCx0ZbQu9C40LkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i0JrQvtC70ZbRgCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLQmtC90LjQttC60L7QstCwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+ItCQ0LvRjNCx0L7QvNC90LAiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+ItCj0YHRliI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLQlNGW0LDQv9Cw0LfQvtC9IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIxMTcyYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iQ8OgaSDEkeG6t3QgbcOheSBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iTMawdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IsSQw61jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJC4bqjbiBzYW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IkvDrWNoIHRoxrDhu5tjIHRyYW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iTcOgdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IkjGsOG7m25nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iVHJhbmcgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IlbDrSBk4bulOiAx4oCUNSwgOCwgMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iWGVtIHRyxrDhu5tjIGLhuqNuIGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJDw6BpIMSR4bq3dCB0csOsbmggeGVtIFBERiDEkeG7gyB4ZW0gdHLGsOG7m2MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IuG7qG5nIGThu6VuZyBpbiBn4bq3cCBs4buXaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJUcmFuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IsSQYW5nIHThuqFvIGzhu4duaCBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IkzGsHUgZMaw4bubaSBk4bqhbmcgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlThuqV0IGPhuqMgbcOheSBpbuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iSOG7mXAgdGhv4bqhaSBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJUw6xtIGtp4bq/bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJU4bqldCBj4bqjIG3DoXkgaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJUaMOqbSBk4buLY2ggduG7pSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Ikhp4buDbiB0aOG7iyBo4buZcCB0w6xtIGtp4bq/bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLhuqhuIGjhu5lwIHTDrG0ga2nhur9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iVGjDqm0gbcOheSBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IkNo4buNbiBtw6F5IGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iQuG7jyBxdWEgbcOheSBpbiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4ixJDDoyB0w6xtIHRo4bqleSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IG3DoXkgaW4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiLEkMOjIHTDrG0gdGjhuqV5IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gbcOheSBpbiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkNo4buNbiBk4buLY2ggduG7pSBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4ixJBhbmcgdMOsbSBraeG6v20gbcOheSBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Iktow7RuZyB0w6xtIHRo4bqleSBtw6F5IGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSW4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ikjhu6d5IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Ikzhu5dpIG3DoXkgaW4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+Ik3DoXkgaW4gxJHDoyBjaOG6t24gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJM4buHbmggaW4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ikzhu4duaCBpbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+Ikjhu6d5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJC4bqvdCDEkeG6p3UgbOG6oWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iS2jDtG5nIGPDsyBr4bq/dCBu4buRaSBuw6BvIHbhu5tpIG3DoXkgaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJraMO0bmcgeMOhYyDEkeG7i25oIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBraMO0bmcga2jhuqMgZOG7pW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+Iktow7RuZyB0aOG7gyB04bqhbyBs4buHbmggaW4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4ixJBlbiB0cuG6r25nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+Ik3DoHUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iROG7jWMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTmdhbmciPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IlThuqV0IGPhuqMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iRMOjeSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16aC1yQ04vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9hcnJheXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmM3NWRiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9hcnJheXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxyZXNvdXJjZXM+Ci0KLSAgICA8c3RyaW5nLWFycmF5IG5hbWU9InBkZl9wcmludGVyX21lZGlhX3NpemVzIiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KLSAgICAgICAgPGl0ZW0+Uk9DXzhLPC9pdGVtPgotICAgICAgICA8aXRlbT5ST0NfMTZLPC9pdGVtPgotICAgICAgICA8aXRlbT5QUkNfMTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+UFJDXzI8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPlBSQ18zPC9pdGVtPgotICAgICAgICA8aXRlbT5QUkNfNDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+UFJDXzU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPlBSQ182PC9pdGVtPgotICAgICAgICA8aXRlbT5QUkNfNzwvaXRlbT4KLSAgICAgICAgPGl0ZW0+UFJDXzg8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPlBSQ185PC9pdGVtPgotICAgICAgICA8aXRlbT5QUkNfMTA8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPlBSQ18xNks8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk9NX1BBX0tBSTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+T01fREFJX1BBX0tBSTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+T01fSlVVUk9fS1VfS0FJPC9pdGVtPgotICAgIDwvc3RyaW5nLWFycmF5PgotCi08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDNlYTYwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuaJk+WNsOWkhOeQhuacjeWKoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLmiZPljbDmnLrorr7nva4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLmiZPljbAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLkv53lrZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLnm67nmoTlnLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i5Lu95pWwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLnurjlvKDlsLrlr7giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLpopzoibIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLmlrnlkJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLpobXmlbAgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IuS+i+Wmgu+8mjEtNeOAgTjjgIExMS0xMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i5omT5Y2w6aKE6KeIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLlronoo4UgUERGIOafpeeci+WZqOS7peS+v+mihOiniCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i5omT5Y2w5bqU55So5bSp5rqD5LqGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IumhteaVsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+Iuato+WcqOeUn+aIkOaJk+WNsOS9nOS4miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IuS/neWtmOS4uiBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i5omA5pyJ5omT5Y2w5py64oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLmiZPljbDlr7nor53moYYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i5pCc57SiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IuaJgOacieaJk+WNsOacuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+Iua3u+WKoOacjeWKoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IuaQnOe0ouahhuW3suaYvuekuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLmkJzntKLmoYblt7LpmpDol48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLmt7vliqDmiZPljbDmnLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLpgInmi6nmiZPljbDmnLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLlj5bmtojkv53lrZjmiZPljbDmnLoiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IuaJvuWIsDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz7lj7DmiZPljbDmnLoiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiLmib7liLA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+5Y+w5omT5Y2w5py6IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i6YCJ5oup5omT5Y2w5pyN5YqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLmraPlnKjmkJzntKLmiZPljbDmnLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLmib7kuI3liLDmiZPljbDmnLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLmraPlnKjmiZPljbDigJw8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4oCdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i5q2j5Zyo5Y+W5raI5omT5Y2w4oCcPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuKAnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i5omT5Y2w5py65Zyo5omT5Y2w4oCcPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuKAneaXtuWHuumUmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuaJk+WNsOacuuaLkue7neaJk+WNsOKAnDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJ0iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4i4oCcPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPuKAneaJk+WNsOS9nOS4miI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IuKAnDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz7igJ3miZPljbDkvZzkuJoiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i5Y+W5raIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLph43mlrDlvIDlp4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i5pyq5LiO5omT5Y2w5py65bu656uL6L+e5o6lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i5pyq55+lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IC0g5peg5rOV5L2/55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IuaXoOazleeUn+aIkOaJk+WNsOS9nOS4miI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLpu5Hnmb0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i5b2p6ImyIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+Iue6teWQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLmqKrlkJEiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IuWFqOmDqCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLojIPlm7QiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQyMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuWIl+WNsOWkmuW3pee3qeihneiZleeQhuWZqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLmiZPljbDmqZ/oqK3lrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLliJfljbAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLlhLLlrZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLnm67nmoTlnLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i5Lu95pW4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLntJnlvLXlpKflsI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLpoY/oibIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLmlrnlkJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLpoIHmlbggKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IuS+i+Wmgu+8mjEtNSw4LDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLpoJDopr3liJfljbAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuWuieijnemgkOimveaJgOmcgOeahCBQREYg5qqi6KaW5ZmoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLliJfljbDmh4nnlKjnqIvlvI/nlbbmqZ/kuoYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i6aCB5pW4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i5q2j5Zyo55Si55Sf5YiX5Y2w5bel5L2cIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4i5YSy5a2Y54K6IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLmiYDmnInmiZPljbDmqZ/igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IuWIl+WNsOWwjeipseaWueWhiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLmkJzlsIsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i5omA5pyJ5omT5Y2w5qmfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i5paw5aKe5pyN5YuZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i5pCc5bCL5qGG5bey6aGv56S6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuaQnOWwi+ahhuW3sumaseiXjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuaWsOWinuaJk+WNsOapnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IumBuOWPluaJk+WNsOapnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Iuenu+mZpOaJk+WNsOapnyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g6YOo5omT5Y2w5qmfIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g6YOo5omT5Y2w5qmfIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i6YG45pOH5YiX5Y2w5pyN5YuZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLmraPlnKjmkJzlsIvmiZPljbDmqZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLmib7kuI3liLDmiZPljbDmqZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLmraPlnKjliJfljbAgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Iuato+WcqOWPlua2iCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLmiZPljbDmqZ/pjK/oqqTvvJo8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i5omT5Y2w5qmf5bey5bCB6Y6WIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4i5LiA6aCFIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g5YiX5Y2w5bel5L2cIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4i5aSa6aCFIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g5YiX5Y2w5bel5L2cIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuWPlua2iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i6YeN5paw6ZaL5aeLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuWwmuacquiIh+aJk+WNsOapn+mAo+e3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+IuS4jeaYjiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMg54Sh5rOV5L2/55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IueEoeazleeUoueUn+WIl+WNsOW3peS9nCI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLpu5Hnmb0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i5b2p6ImyIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IuebtOWQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLmqavlkJEiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IuWFqOmDqCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLnr4TlnI0iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZTg4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4i5YiX5Y2w5aSa5bel57ep6KGd6JmV55CG5ZmoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IuWNsOihqOapn+ioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IuWIl+WNsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IuWEsuWtmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IuebrueahOWcsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiLku73mlbgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+Iue0meW8teWkp+WwjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IuiJsuW9qSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IuaWueWQkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IumggeaVuCAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i5L6L5aaC77yaMeKAlDUsOCwxMeKAlDEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLliJfljbDpoJDopr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuWuieijnemgkOimveaJgOmcgOeahCBQREYg5qqi6KaW5ZmoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLliJfljbDmh4nnlKjnqIvlvI/nlbbmqZ/kuoYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i6aCB5pW4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i5q2j5Zyo55Si55Sf5YiX5Y2w5bel5L2cIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4i5YSy5a2Y54K6IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLmiYDmnInljbDooajmqZ/igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IuWNsOihqOapn+WwjeipseaWueWhiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLmkJzlsIsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i5omA5pyJ5Y2w6KGo5qmfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i5paw5aKe5pyN5YuZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i5pCc5bCL5qGG5bey6aGv56S6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuaQnOWwi+ahhuW3sumaseiXjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuaWsOWinuWNsOihqOapnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IumBuOWPluWNsOihqOapnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Iuenu+mZpOWNsOihqOapnyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g5Y+w5Y2w6KGo5qmfIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g5Y+w5Y2w6KGo5qmfIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i6YG45pOH5YiX5Y2w5pyN5YuZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLmraPlnKjmkJzlsIvljbDooajmqZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLmib7kuI3liLDljbDooajmqZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLmraPlnKjliJfljbAgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Iuato+WcqOWPlua2iCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLljbDooajmqZ/nmbznlJ/pjK/oqqTvvJo8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i5Y2w6KGo5qmf5bCB6Y6W5LqGIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiDlgIvliJfljbDlt6XkvZwiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOWAi+WIl+WNsOW3peS9nCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLlj5bmtogiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IumHjeaWsOmWi+WniyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLlsJrmnKroiIfljbDooajmqZ/lu7rnq4vpgKPnt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLkuI3mmI4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIOeEoeazleS9v+eUqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLnhKHms5XnlKLnlJ/liJfljbDlt6XkvZwiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i6buR55m9IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IuW9qeiJsiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLnuLHlkJEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4i5qmr5ZCRIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLlhajpg6giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i56+E5ZyNIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlMzFlMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IklzcHVsaSBzZXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iSXppbHVuZ2lzZWxlbG8gemVwaHJpbnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iUGhyaW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IkxvbmRvbG96YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkluZGF3byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJBbWFraG9waGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlVzYXlpemkgd2VwaGVwaGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJVbWJhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJVbXVtbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IkFtYWtoYXNpICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJpc2IuIDHigJQ1LCA4LCAxMeKAlDEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJVa3VidWthIGt1cWFsYSBrb2t1cGhyaW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iRmFrYSBpc2lidWtlbGkgc2UtUERGIHVrdXplIHVobG9sZSBrdXFhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IlVrdXBocmludGEgdWhsZWxvIGxva3VzZWJlbnphIGt1a2h1YmF6ZWtpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iQW1ha2hhc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJJa2hpcWl6YSB1bXNlYmVuemkgd29rdXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJMb25kb2xvemEgbmplbmdlLVBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJXb25rZSBhbWFwaHJpbnRh4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJJbmd4b3hvIHlva3VwaHJpbnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IlNlc2hhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IldvbmtlIGFtYXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJFbmdlemEgaXNldmlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IkliaG9raXNpIGxva3VobG9sYSBsaWJvbmlzaXdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IkliaG9raXNpIGxva3VzZXNoYSBsaWZpaGxpd2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJFbmdlemEgaXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJLaGV0aGEgaXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJLaG9obHdhIGlwaHJpbnRhIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGlwaHJpbnRhIGl0aG9saXdlIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBhbWFwaHJpbnRhIGF0aG9saXdlIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iS2hldGhhIGlzZXZpc2kgeWVwaHJpbnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJJc2VzaGEgYW1hcGhyaW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IkF3ZWtobyBhbWFwaHJpbnRhIGF0aG9saXdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSXBocmludGEgaS08eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iSWtoYW5zZWxhIGktPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iSXBodXRoYSBsZXBocmludGEgeWUtPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IklwaHJpbnRhIGVuZ3UtPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBpdmluamVsd2UiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiB1bXNlYmVuemkgd29rdXBocmludGEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IGltaXNlYmVuemkgeW9rdXBocmludGEiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iS2hhbnNlbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlFhbGEga2FidXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJBa3VraG8gdWt1eGh1bWFuYSBrdXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJha3dheml3YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iSS08eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBheWl0aG9sYWthbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iQXlpa3dhemFuZ2EgdWt1a2hpcWl6YSB1bXNlYmVuemkgd29rdXBocmludGEiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iT2t1bW55YW1hIG5va3VtaGxvcGhlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IlVtYmFsYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJVa3VtYSBuZ29idWRlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IlVrd2FraGVrYSBrd2V6d2UiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IktvbmtlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IkliYW5nYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9QcmludEpvYkNvbmZpZ0FjdGl2aXR5LmphdmEgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9QcmludEpvYkNvbmZpZ0FjdGl2aXR5LmphdmEKaW5kZXggYzFjN2E0ZS4uZTNkOGQwNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvUHJpbnRKb2JDb25maWdBY3Rpdml0eS5qYXZhCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL1ByaW50Sm9iQ29uZmlnQWN0aXZpdHkuamF2YQpAQCAtNDU0LDcgKzQ1NCwxMSBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbUNvbnRyb2xsZXJTdGF0ZSA9IENPTlRST0xMRVJfU1RBVEVfTEFZT1VUX0NPTVBMRVRFRDsKKyAgICAgICAgICAgIGZpbmFsIGludCBvbGRDb250cm9sbGVyU3RhdGUgPSBtQ29udHJvbGxlclN0YXRlOworCisgICAgICAgICAgICBpZiAobUNvbnRyb2xsZXJTdGF0ZSA9PSBDT05UUk9MTEVSX1NUQVRFX0xBWU9VVF9TVEFSVEVEKSB7CisgICAgICAgICAgICAgICAgbUNvbnRyb2xsZXJTdGF0ZSA9IENPTlRST0xMRVJfU1RBVEVfTEFZT1VUX0NPTVBMRVRFRDsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRm9yIGxheW91dCBwdXJwb3NlcyB3ZSBjYXJlIG9ubHkgd2hldGhlciB0aGUgdHlwZSBvciB0aGUgcGFnZQogICAgICAgICAgICAgLy8gY291bnQgY2hhbmdlZC4gV2Ugc3RpbGwgZG8gbm90IGhhdmUgdGhlIHNpemUgc2luY2Ugd2UgZGlkIG5vdApAQCAtNDc3LDYgKzQ4MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtUHJpbnRKb2JJZCwgbnVsbCk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIFBhZ2VSYW5nZVtdIG9sZFJlcXVlc3RlZFBhZ2VzID0gbVJlcXVlc3RlZFBhZ2VzOworCiAgICAgICAgICAgICAvLyBObyBwYWdlcyBtZWFucyB0aGF0IHRoZSB1c2VyIHNlbGVjdGVkIGFuIGludmFsaWQgcmFuZ2Ugd2hpbGUgd2UKICAgICAgICAgICAgIC8vIHdlcmUgZG9pbmcgYSBsYXlvdXQgb3IgdGhlIGxheW91dCByZXR1cm5lZCBhIGRvY3VtZW50IGluZm8gZm9yCiAgICAgICAgICAgICAvLyB3aGljaCB0aGUgc2VsZWN0ZWQgcmFuZ2UgaXMgaW52YWxpZC4gSW4gc3VjaCBhIGNhc2Ugd2UgZG8gbm90CkBAIC01MDQsMTQgKzUxMCwyMSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gSWYgdGhlIGluZm8gYW5kIHRoZSBsYXlvdXQgZGlkIG5vdCBjaGFuZ2UgYW5kIHdlIGFscmVhZHkgaGF2ZQotICAgICAgICAgICAgLy8gdGhlIHJlcXVlc3RlZCBwYWdlcywgdGhlbiBub3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgICAgICAvLyBJZiB0aGUgaW5mbyBhbmQgdGhlIGxheW91dCBkaWQgbm90IGNoYW5nZS4uLgogICAgICAgICAgICAgaWYgKCFpbmZvQ2hhbmdlZCAmJiAhbGF5b3V0Q2hhbmdlZAotICAgICAgICAgICAgICAgICAgICAmJiBQYWdlUmFuZ2VVdGlscy5jb250YWlucyhtRG9jdW1lbnQucGFnZXMsIG1SZXF1ZXN0ZWRQYWdlcykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgdGhlIHJlcXVlc3RlZCBwYWdlcyAuLi4gCisgICAgICAgICAgICAgICAgICAgICYmIChQYWdlUmFuZ2VVdGlscy5jb250YWlucyhtRG9jdW1lbnQucGFnZXMsIG1SZXF1ZXN0ZWRQYWdlcykpCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5vciB0aGUgcmVxdWVzdGVkIHBhZ2VzIGFyZSBiZWluZyB3cml0dGVuLi4uCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAob2xkQ29udHJvbGxlclN0YXRlID09IENPTlRST0xMRVJfU1RBVEVfV1JJVEVfU1RBUlRFRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZFJlcXVlc3RlZFBhZ2VzICE9IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBQYWdlUmFuZ2VVdGlscy5jb250YWlucyhvbGRSZXF1ZXN0ZWRQYWdlcywgbVJlcXVlc3RlZFBhZ2VzKSkpIHsKICAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIGludGVyZXN0aW5nIGNoYW5nZWQgYW5kIHdlIGhhdmUgYWxsIHJlcXVlc3RlZCBwYWdlcy4KICAgICAgICAgICAgICAgICAvLyBUaGVuIHVwZGF0ZSB0aGUgcHJpbnQgam9icydzIHBhZ2VzIGFzIHdlIHdpbGwgbm90IGRvIGEgd3JpdGUKICAgICAgICAgICAgICAgICAvLyBhbmQgd2UgdXN1YWxseSB1cGRhdGUgdGhlIHBhZ2VzIGluIHRoZSB3cml0ZSBjb21wbGV0ZSBjYWxsYmFjay4KLSAgICAgICAgICAgICAgICB1cGRhdGVQcmludEpvYlBhZ2VzKG1Eb2N1bWVudC5wYWdlcywgbVJlcXVlc3RlZFBhZ2VzKTsKKyAgICAgICAgICAgICAgICBpZiAobURvY3VtZW50LnBhZ2VzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBwcmludCBqb2IncyBwYWdlcyBnaXZlbiB3ZSBoYXZlIHRoZW0uCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByaW50Sm9iUGFnZXMobURvY3VtZW50LnBhZ2VzLCBtUmVxdWVzdGVkUGFnZXMpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtRWRpdG9yLnVwZGF0ZVVpKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1FZGl0b3IuaXNEb25lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENyZWF0ZVBkZkZpbGVPckZpbmlzaCgpOwpAQCAtNjE2LDcgKzYyOSw5IEBACiAgICAgICAgICAgICAgICAgLy8gV2UgZGlkIG5vdCBnZXQgdGhlIHBhZ2VzIHdlIHJlcXVlc3RlZCwgdGhlbiB0aGUgYXBwbGljYXRpb24KICAgICAgICAgICAgICAgICAvLyBtaXNiZWhhdmVzLCBzbyB3ZSBmYWlsIHF1aWNrbHkuCiAgICAgICAgICAgICAgICAgbUNvbnRyb2xsZXJTdGF0ZSA9IENPTlRST0xMRVJfU1RBVEVfRkFJTEVEOwotICAgICAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJSZWNlaXZlZCBpbnZhbGlkIHBhZ2VzIGZyb20gdGhlIGFwcCIpOworICAgICAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJSZWNlaXZlZCBpbnZhbGlkIHBhZ2VzIGZyb20gdGhlIGFwcDogcmVxdWVzdGVkPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgQXJyYXlzLnRvU3RyaW5nKHJlcXVlc3RlZFBhZ2VzKSArICIgd3JpdHRlbj0iCisgICAgICAgICAgICAgICAgICAgICAgICArIEFycmF5cy50b1N0cmluZyh3cml0dGVuUGFnZXMpKTsKICAgICAgICAgICAgICAgICBtRWRpdG9yLnNob3dVaShFZGl0b3IuVUlfRVJST1IsIG51bGwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMjc2LDcgKzEyOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAvLyBJbml0aWFsbHksIHdlIGhhdmUgb25seSBzYWZlIHRvIFBERiBhcyBhIHByaW50ZXIgYnV0IGFmdGVyIHNvbWUKICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnRlcnMgYXJlIGxvYWRlZCB3ZSB3YW50IHRvIHNlbGVjdCB0aGUgdXNlcidzIGZhdm9yaXRlIG9uZQogICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBpcyB0aGUgZmlyc3QuCi0gICAgICAgICAgICAgICAgICAgIGlmICghbUZhdm9yaXRlUHJpbnRlclNlbGVjdGVkICYmIG1EZXN0aW5hdGlvblNwaW5uZXJBZGFwdGVyLmdldENvdW50KCkgPiAyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbUZhdm9yaXRlUHJpbnRlclNlbGVjdGVkICYmIG1EZXN0aW5hdGlvblNwaW5uZXJBZGFwdGVyLmdldENvdW50KCkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtRmF2b3JpdGVQcmludGVyU2VsZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgbURlc3RpbmF0aW9uU3Bpbm5lci5zZXRTZWxlY3Rpb24oMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGFnYWluIHRoZSB3ZWlyZCBzcGlubmVyIGJlaGF2aW9yIHRvIG5vdGlmeSBmb3Igc2VsZWN0aW9uCkBAIC0xMzUwLDYgKzEzNjUsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudFByaW50ZXIuZ2V0Q2FwYWJpbGl0aWVzKCkgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW50ZXIuZ2V0Q2FwYWJpbGl0aWVzKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByaW50QXR0cmlidXRlcyhwcmludGVyLmdldENhcGFiaWxpdGllcygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbUN1cnJlbnRQcmludGVyLmdldENhcGFiaWxpdGllcygpLmVxdWFscygKQEAgLTIxOTAsMTIgKzIyMDYsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlbGVjdCB0aGUgb2xkIGNvbG9yIG1vZGUgLSBub3RoaW5nIHJlYWxseSBjaGFuZ2VkLgogICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29sb3JNb2RlU3Bpbm5lclNlbGVjdGlvbk5vQ2FsbGJhY2sob2xkQ29sb3JNb2RlTmV3SW5kZXgpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHNlbGVjdGVkQ29sb3JNb2RlSW5kZXggPSBJbnRlZ2VyLm51bWJlck9mVHJhaWxpbmdaZXJvcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvck1vZGVzICYgZGVmYXVsdEF0dHJpYnV0ZXMuZ2V0Q29sb3JNb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbG9yTW9kZVNwaW5uZXJTZWxlY3Rpb25Ob0NhbGxiYWNrKHNlbGVjdGVkQ29sb3JNb2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJQcmludEF0dHJpYnV0ZXMuc2V0Q29sb3JNb2RlKG1Db2xvck1vZGVTcGlubmVyQWRhcHRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0SXRlbShzZWxlY3RlZENvbG9yTW9kZUluZGV4KS52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzb21lQXR0cmlidXRlU2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc2VsZWN0ZWRDb2xvck1vZGUgPSBjb2xvck1vZGVzICYgZGVmYXVsdEF0dHJpYnV0ZXMuZ2V0Q29sb3JNb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgaXRlbUNvdW50ID0gbUNvbG9yTW9kZVNwaW5uZXJBZGFwdGVyLmdldENvdW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1Db3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Bpbm5lckl0ZW08SW50ZWdlcj4gaXRlbSA9IG1Db2xvck1vZGVTcGlubmVyQWRhcHRlci5nZXRJdGVtKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZENvbG9yTW9kZSA9PSBpdGVtLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbG9yTW9kZVNwaW5uZXJTZWxlY3Rpb25Ob0NhbGxiYWNrKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyclByaW50QXR0cmlidXRlcy5zZXRDb2xvck1vZGUoc2VsZWN0ZWRDb2xvck1vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb21lQXR0cmlidXRlU2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1Db2xvck1vZGVTcGlubmVyLnNldEVuYWJsZWQodHJ1ZSk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGQwZDQzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NTY3NTY2MDk4NTI4NTg4ODYzIj4iUGFyYW1ldHJsyZlyIERlcG9zdSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDBkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+IlBhcmFtZXRybMmZciBEZXBvc3UiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE2NGFjNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NTY3NTY2MDk4NTI4NTg4ODYzIj4i0JfQsNGF0L7RntCy0LDQvdC90LUg0L3QsNC70LDQtCI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5ZmRkNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+IlNldHRpbmdzIFN0b3JhZ2UiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkwZWIwOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+IlN0b2NrYWdlIGRlcyBwYXJhbcOodHJlcyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmMWFmYgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+ItS/1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oDVqyDVutWh1bDVuNaC1b3VvyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxYTJlOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+IuGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmOGDoSDhg6Hhg5Dhg6rhg5Dhg5Xhg5giPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTYyNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NTY3NTY2MDk4NTI4NTg4ODYzIj4i4Z6A4Z+G4Z6O4Z6P4Z+L4oCL4Z6A4Z624Z6a4oCL4Z6V4Z+S4Z6R4Z674Z6AIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTU3OTM2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NTY3NTY2MDk4NTI4NTg4ODYzIj4i4Lqa4LuI4Lqt4LqZ4LuA4LqB4Lqx4Lqa4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqB4Lqy4LqZ4LqV4Lqx4LuJ4LqH4LqE4LuI4LqyIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDUyMTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NTY3NTY2MDk4NTI4NTg4ODYzIj4i0KLQvtGF0LjRgNCz0L7QvtC90Ysg0KHQsNC9Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbXMvc3RyaW5ncy54bWwKcmVuYW1lIHRvIHBhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNmVmNjIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ1Njc1NjYwOTg1Mjg1ODg4NjMiPiLgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbmUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbmUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY2ZWY2MgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NTY3NTY2MDk4NTI4NTg4ODYzIj4i4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkreCko+CljeCkoeCkvuCksOCkoyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlZjc5OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+IuC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtpzgtrbgtqngt4/gt4AiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGVmNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ1Njc1NjYwOTg1Mjg1ODg4NjMiPiLgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4Lac4La24Lap4LeP4LeAIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzdjOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NTY3NTY2MDk4NTI4NTg4ODYzIj4i6Kit5a6a5YSy5a2Y56m66ZaTIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMvZGVmYXVsdHMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzL2RlZmF1bHRzLnhtbAppbmRleCBhMWQ4ZjIyLi4yOGY1MGJjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMvZGVmYXVsdHMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy9kZWZhdWx0cy54bWwKQEAgLTE3Myw0ICsxNzMsMTAgQEAKICAgICAgICAgIDAgbWVhbnMgbm8gdGltZW91dDsgYmF0dGVyeSBzb3VuZHMgd2lsbCBhbHdheXMgcGxheQogICAgICAgICAgPjAgaXMgbWlsbGlzZWNvbmRzIG9mIHNjcmVlbi1vZmYgdGltZSBhZnRlciB3aGljaCBiYXR0ZXJ5IHNvdW5kcyB3aWxsIG5vdCBwbGF5IC0tPgogICAgIDxpbnRlZ2VyIG5hbWU9ImRlZl9sb3dfYmF0dGVyeV9zb3VuZF90aW1lb3V0Ij4wPC9pbnRlZ2VyPgorCisgICAgPCEtLSBJbml0aWFsIHZhbHVlIGZvciB0aGUgU2V0dGluZ3MuU2VjdXJlLklNTUVSU0lWRV9NT0RFX0NPTkZJUk1BVElPTlMgc2V0dGluZywKKyAgICAgICAgIHdoaWNoIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBubyBsb25nZXIgbmVlZCBjb25maXJtYXRpb24KKyAgICAgICAgIGZvciBpbW1lcnNpdmUgbW9kZS4KKyAgICAgICAgIE92ZXJyaWRlIHRvIGRpc2FibGUgaW1tZXJzaXZlIG1vZGUgY29uZmlybWF0aW9uIGZvciBjZXJ0YWluIHBhY2thZ2VzLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZl9pbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb25zIiB0cmFuc2xhdGFibGU9ImZhbHNlIj48L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL0RhdGFiYXNlSGVscGVyLmphdmEgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvRGF0YWJhc2VIZWxwZXIuamF2YQppbmRleCAwOWMyMWYzLi5lM2EzNjkxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvRGF0YWJhc2VIZWxwZXIuamF2YQorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvRGF0YWJhc2VIZWxwZXIuamF2YQpAQCAtMzksMTMgKzM5LDEwIEBACiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLkdsb2JhbDsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLlNlY3VyZTsKLWltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5UZWxlcGhvbnlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmNvbnRlbnQuUGFja2FnZUhlbHBlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuUGhvbmU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LlBob25lQ29uc3RhbnRzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5SSUxDb25zdGFudHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LmNkbWEuQ2RtYVN1YnNjcmlwdGlvblNvdXJjZU1hbmFnZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5YbWxVdGlsczsKQEAgLTIxMTQsNiArMjExMSwxMCBAQAogCiAgICAgICAgICAgICBsb2FkQm9vbGVhblNldHRpbmcoc3RtdCwgU2V0dGluZ3MuU2VjdXJlLlVTRVJfU0VUVVBfQ09NUExFVEUsCiAgICAgICAgICAgICAgICAgICAgIFIuYm9vbC5kZWZfdXNlcl9zZXR1cF9jb21wbGV0ZSk7CisKKyAgICAgICAgICAgIGxvYWRTdHJpbmdTZXR0aW5nKHN0bXQsIFNldHRpbmdzLlNlY3VyZS5JTU1FUlNJVkVfTU9ERV9DT05GSVJNQVRJT05TLAorICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuZGVmX2ltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbnMpOworCiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAoc3RtdCAhPSBudWxsKSBzdG10LmNsb3NlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEwOGUzOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiJTaGVsbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiJCYXEgcmFwb3J0IGFsxLFuZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4iWMmZdGFuxLEgxZ9pa2F5yZl0aW5pIHBheWxhxZ9tYXEgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4iQmFxIHJhcG9ydGxhcsSxIHNpc3RlbWluIG3DvHh0yZlsaWYganVybmFsIGZheWxsYXLEsW5kYW4gZGF0YSBpw6fJmXJpciBraSwgYnVuYSDFn8mZeHNpIHbJmSBrb25maWRlbnNpYWwgbcmZbHVtYXRsYXIgZGEgYWlkZGlyLiBZYWxuxLF6IGluYW5kxLHEn8SxbsSxeiBhZGFtbGFybGEgYmFxIHJhcG9ydGxhcsSxbsSxIHBheWxhxZ/EsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IkJ1IG1lc2FqxLEgbsO2dmLJmXRpIGTJmWbJmSBnw7ZzdMmZciI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEwOGUzOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+IlNoZWxsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IkJhcSByYXBvcnQgYWzEsW5kxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiJYyZl0YW7EsSDFn2lrYXnJmXRpbmkgcGF5bGHFn21hcSDDvMOnw7xuIHRveHVudW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiJCYXEgcmFwb3J0bGFyxLEgc2lzdGVtaW4gbcO8eHTJmWxpZiBqdXJuYWwgZmF5bGxhcsSxbmRhbiBkYXRhIGnDp8mZcmlyIGtpLCBidW5hIMWfyZl4c2kgdsmZIGtvbmZpZGVuc2lhbCBtyZlsdW1hdGxhciBkYSBhaWRkaXIuIFlhbG7EsXogaW5hbmTEscSfxLFuxLF6IGFkYW1sYXJsYSBiYXEgcmFwb3J0bGFyxLFuxLEgcGF5bGHFn8Sxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybV9yZXBlYXQiIG1zZ2lkPSI0OTI2ODQyNDYwNjg4NjQ1MDU4Ij4iQnUgbWVzYWrEsSBuw7Z2YsmZdGkgZMmZZsmZIGfDtnN0yZlyIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTcxMzk3NS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gIAotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAKLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+ItCQ0LHQsNC70L7QvdC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4i0KHQv9GA0LDQstCw0LfQtNCw0YfQsCDQv9GA0LAg0LfQsdC+0Lkg0LfQsNGF0LDQstCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINC/0LDQtNC30Y/Qu9GW0YbRhtCwINGB0LLQsNGR0Lkg0YHQv9GA0LDQstCw0LfQtNCw0YfQsNC5INC/0YDQsCDQt9Cx0L7QuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+ItCh0L/RgNCw0LLQsNC30LTQsNGH0LAg0L/RgNCwINC/0LDQvNGL0LvQutGDINGe0YLRgNGL0LzQu9GW0LLQsNC1INC00LDQtNC30LXQvdGL0Y8g0Lcg0LNp0YHRgtC+0YDRi2kg0YHRltGB0YLRjdC80L3Ri9GFINGE0LDQudC70LDRniwg0YMg0YLRi9C8INC70ZbQutGDINC/0LXRgNGB0LDQvdCw0LvRjNC90YPRjiDRliDQv9GA0YvQstCw0YLQvdGD0Y4g0ZbQvdGE0LDRgNC80LDRhtGL0Y4uINCU0LfRj9C7adGG0LXRgdGPINGB0L/RgNCw0LLQsNC30LTQsNGH0LDQvGkg0L/RgNCwINC30LHQvmkg0YLQvtC70YzQumkg0Lcg0L/RgNCw0LLQtdGA0LDQvdGL0LxpINC60LDRgNGL0YHRgtCw0LvRjNC9adC60LDQvGkgaSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LxpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiLQoyDQvdCw0YHRgtGD0L/QvdGLINGA0LDQtyDQv9Cw0LrQsNC30LLQsNGG0Ywg0LPRjdGC0LAg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdC1Ijwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAppbmRleCBlZmZkY2I5Li4zZjFjOTIxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTE3LDggKzE3LDggQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiJQcm9zdMWZZWTDrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiJCeWxhIHZ5dHZvxZllbmEgenByw6F2YSBvIGNoeWLEmyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IlpwcsOhdnUgbyBjaHlixJsgbcWvxb5ldGUgc2TDrWxldCBrbGVwbnV0w61tLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IlpwcsOhdnkgbyBjaHliw6FjaCBvYnNhaHVqw60gZGF0YSB6IHLFr3puw71jaCBzb3Vib3LFryBwcm90b2tvbMWvIHN5c3TDqW11IHbEjWV0bsSbIG9zb2Juw61jaCBhIHNvdWtyb23DvWNoIGluZm9ybWFjw60uIFpwcsOhdnkgbyBjaHliw6FjaCBzZMOtbGVqdGUgcG91emUgcyBhcGxpa2FjZW1pIGEgdcW+aXZhdGVsaSwga3RlcsO9bSBkxa92xJvFmXVqZXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiJCeWxvIHZ5dHZvxZllbm8gY2h5Ym92w6kgaGzDocWhZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IkNoeWJvdsOpIGhsw6HFoWVuw60gbcWvxb5ldGUgc2TDrWxldCBrbGVwbnV0w61tLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IkNoeWJvdsOhIGhsw6HFoWVuw60gb2JzYWh1asOtIGRhdGEgesKgcsWvem7DvWNoIHNvdWJvcsWvIHByb3Rva29sxa8gc3lzdMOpbXUgdsSNZXRuxJsgb3NvYm7DrWNoIGHCoHNvdWtyb23DvWNoIGluZm9ybWFjw60uIENoeWJvdsOhIGhsw6HFoWVuw60gc2TDrWxlanRlIHBvdXplIHPCoGFwbGlrYWNlbWkgYcKgdcW+aXZhdGVsaSwga3RlcsO9bSBkxa92xJvFmXVqZXRlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiJab2JyYXppdCB0dXRvIHpwcsOhdnUgcMWZw63FoXTEmyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKaW5kZXggMDFlYTQyYi4uZmEzMGM5NiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCkBAIC0xOSw2ICsxOSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4iU2hlbGwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4iRmVqbHJhcHBvcnRlbiBlciByZWdpc3RyZXJldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IlRyeWsgZm9yIGF0IGRlbGUgZGluIGZlamxyYXBwb3J0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4iRmVqbHJhcHBvcnRlciBpbmRlaG9sZGVyIGRhdGEgZnJhIHN5c3RlbWV0cyBmb3Jza2VsbGlnZSBsb2dmaWxlciwgaGVydW5kZXIgcGVyc29ubGlnZSBvZyBwcml2YXRlIG9wbHlzbmluZ2VyLiBEZWwga3VuIGZlamxyYXBwb3J0ZXIgbWVkIGFwcHMgb2cgcGVyc29uZXIsIGR1IGhhciB0aWxsaWQgdGlsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiJWaXMgZGVubmUgbWVkZGVsZWxzZSBuw6ZzdGUgZ2FuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IkZlamxyYXBwb3J0ZXIgaW5kZWhvbGRlciBkYXRhIGZyYSBzeXN0ZW1ldHMgZm9yc2tlbGxpZ2UgbG9nZmlsZXIsIGYuZWtzLiBwZXJzb25saWdlIG9nIHByaXZhdGUgb3BseXNuaW5nZXIuIERlbCBrdW4gZmVqbHJhcHBvcnRlciBtZWQgYXBwcyBvZyBwZXJzb25lciwgZHUgaGFyIHRpbGxpZCB0aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IlZpcyBkZW5uZSB1bmRlcnJldG5pbmcgbsOmc3RlIGdhbmciPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3MDhlMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiJTaGVsbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiJCdWcgcmVwb3J0IGNhcHR1cmVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4iVG91Y2ggdG8gc2hhcmUgeW91ciBidWcgcmVwb3J0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4iQnVnIHJlcG9ydHMgY29udGFpbiBkYXRhIGZyb20gdGhlIHN5c3RlbVwncyB2YXJpb3VzIGxvZyBmaWxlcywgaW5jbHVkaW5nIHBlcnNvbmFsIGFuZCBwcml2YXRlIGluZm9ybWF0aW9uLiBPbmx5IHNoYXJlIGJ1ZyByZXBvcnRzIHdpdGggYXBwcyBhbmQgcGVvcGxlIHRoYXQgeW91IHRydXN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiJTaG93IHRoaXMgbWVzc2FnZSBuZXh0IHRpbWUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3MmYyMwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiJTaGVsbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiJSYXBwb3J0IGRlIGJvZ3VlIGVucmVnaXN0csOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4iQXBwdXllciBpY2kgcG91ciBwYXJ0YWdlciB2b3RyZSByYXBwb3J0IGRlIGJvZ3VlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4iTGVzIHJhcHBvcnRzIGRlIGJvZ3VlIGNvbnRpZW5uZW50IGRlcyBkb25uw6llcyBkZXMgZmljaGllcnMgam91cm5hdXggZHUgc3lzdMOobWUsIHkgY29tcHJpcyBkZXMgaW5mb3JtYXRpb25zIHBlcnNvbm5lbGxlcyBldCBwcml2w6llcy4gTmUgcGFydGFnZXogbGVzIHJhcHBvcnRzIGRlIGJvZ3VlIHF1XCdhdmVjIGxlcyBhcHBsaWNhdGlvbnMgZXQgbGVzIHBlcnNvbm5lcyBxdWUgdm91cyBlc3RpbWV6IGZpYWJsZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IkFmZmljaGVyIGNlIG1lc3NhZ2UgbGEgcHJvY2hhaW5lIGZvaXMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmluZGV4IDRlYTA2NjQuLmY4ODkzMTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMTksNiArMTksNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+IuCktuClh+CksiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiLgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSfIOCkleCliOCkquCljeCkmuCksCDgpJXgpLAg4KSy4KWAIOCkl+CkiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IuCkheCkquCkqOClgCDgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSfIOCkuOCkvuCkneCkviDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpY3gpKrgpLDgpY3gpLYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4i4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCknyDgpK7gpYfgpIIg4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCklOCksCDgpKjgpL/gpJzgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkuOCkueCkv+CkpCwg4KS44KS/4KS44KWN4KSf4KSuIOCkleClgCDgpLXgpL/gpK3gpL/gpKjgpY3gpKgg4KSy4KWJ4KSXIOCkq+CkvOCkvuCkh+CksuCli+CkgiDgpJXgpL4g4KSh4KWH4KSf4KS+IOCkueCli+CkpOCkviDgpLngpYguIOCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KSV4KWH4KS14KSyIOCkteCkv+CktuCljeCkteCkuOCkqOClgOCkryDgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSU4KSwIOCkteCljeCkr+CkleCljeCkpOCkv+Ckr+Cli+CkgiDgpLjgpYcg4KS54KWAIOCkuOCkvuCkneCkviDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4i4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCknyDgpK7gpYfgpIIg4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCklOCksCDgpKjgpL/gpJzgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkuOCkueCkv+CkpCwg4KS44KS/4KS44KWN4KSf4KSuIOCkleClgCDgpLXgpL/gpK3gpL/gpKjgpY3gpKgg4KSy4KWJ4KSXIOCkq+CkvOCkvuCkh+CksuCli+CkgiDgpJXgpL4g4KSh4KWH4KSf4KS+IOCkueCli+CkpOCkviDgpLngpYguIOCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KSV4KWH4KS14KSyIOCkteCkv+CktuCljeCkteCkuOCkqOClgOCkryDgpJDgpKrgpY3gpLggIOCklOCksCDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpK/gpYvgpIIg4KS44KWHIOCkueClgCDgpLjgpL7gpJ3gpL4g4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiLgpK/gpLkg4KS44KSC4KSm4KWH4KS2IOCkheCkl+CksuClgCDgpKzgpL7gpLAg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhN2ZhOWYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4i1L3VpdaB1asiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4i1Y7WgNWr1brVodWv1asg1abVpdWv1bjWgtW11oEg1b3Vv9Wh1oHVvtWl1oEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiLVgNW61aXWhGAg1bHVpdaAINW+1oDVq9W61aHVr9WrINW01aHVvdWr1bYg1abVpdWv1bjWgtW11oHVqCDVv9Wh1oDVodWu1aXVrNW41oIg1bDVodW01aHWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+ItWO1oDVq9W61aHVr9WrINWm1aXVr9W41oLVtdaB1bbVpdaA1agg1brVodaA1bjWgtW21aHVr9W41oLVtCDVpdW2INW/1b7VtdWh1azVttWl1oAg1bDVodW01aHVr9Wh1oDVo9WrINW/1aHWgNWi1aXWgCDVtNW41oLVv9aE1asg1obVodW11azVpdaA1avWgSwg1aHVtdWkINWp1b7VuNaC1bQg1bbVodaHINWh1bbVsNWh1b/VodWv1aHVtiDigIvigIvWhyDVo9Wh1bLVv9W21asg1b/VpdWy1aXVr9W41oLVqdW11bjWgtW21bbVpdaAOiDVjtaA1avVutWh1a/VqyDVptWl1a/VuNaC1bXWgdW21aXWgNWowqDVr9Wr1b3VpdaEINW01avVodW11bYg1aHVtdW2INWw1aHVvtWl1azVvtWh1a7VttWl1oDVqyDWhyDVtNWh1oDVpNWv1aHVttaBINWw1aXVvywg1bjWgNW41bbWgSDVvtW91b/VodWw1bjWgtW0INWl1oQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+ItSx1bXVvSDVsNWh1bLVuNaA1aTVodWj1oDVuNaC1anVtdW41oLVttWoINaB1bjWgtW11oEg1b/VodWsINWw1aHVu9W41oDVpCDVodW21aPVodW0Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAppbmRleCBlNzcxNWU5Li5kZWQ4NjBjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKQEAgLTE5LDYgKzE5LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiLXntei15jXpNeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IteT15XXlyDXlNeR15DXkteZ150g16bXldec150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiLXkteiINeb15PXmSDXnNep16rXoyDXkNeqINeT15XXlyDXlNeR15DXkteZ150g16nXnNeaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4i15PXldeX15XXqiDXotecINeR15DXkteZ150g15vXldec15zXmdedINeg16rXldeg15nXnSDXnten15XXkdem15kg15TXmdeV157XnyDXlNep15XXoNeZ150g15HXntei16jXm9eqLCDXm9eV15zXnCDXnteZ15PXoiDXkNeZ16nXmSDXldek16jXmNeZLiDXqdeq16Mg15PXldeX15XXqiDXkdeQ15LXmdedINeo16cg16LXnSDXmdeZ16nXldee15nXnSDXldeQ16DXqdeZ150g16nXkNeq15Qg16HXldee15og16LXnNeZ15TXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiLXk9eV15fXldeqINei15wg15HXkNeS15nXnSDXm9eV15zXnNeZ150g16DXqteV16DXmdedINee16fXldeR16bXmSDXlNeZ15XXntefINeU16nXldeg15nXnSDXkdee16LXqNeb16osINeb15XXnNecINee15nXk9eiINeQ15nXqdeZINeV16TXqNeY15kuINep16rXoyDXk9eV15fXldeqINeR15DXkteZ150g16jXpyDXotedINeQ16TXnNeZ16fXpteZ15XXqiDXldeQ16DXqdeZ150g16nXkNeq15Qg16HXldee15og16LXnNeZ15TXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybV9yZXBlYXQiIG1zZ2lkPSI0OTI2ODQyNDYwNjg4NjQ1MDU4Ij4i15TXpteSINeQ16og15TXlNeV15PXoteUINeU15bXlSDXkdek16LXnSDXlNeR15DXlCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDljNzJhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+IuGDkuGDkOGDoOGDlOGDmeGDkOGDnOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiLhg5Dhg5zhg5Lhg5Dhg6Dhg5jhg6jhg5gg4YOu4YOQ4YOg4YOV4YOU4YOW4YOU4YOR4YOY4YOhIOGDqOGDlOGDoeGDkOGDruGDlOGDkSDhg6jhg5Thg6Xhg5vhg5zhg5jhg5rhg5jhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiLhg6jhg5Thg5Thg67hg5Thg5cg4YOX4YOl4YOV4YOU4YOc4YOYIOGDruGDkOGDoOGDleGDlOGDluGDlOGDkeGDmOGDoSDhg5Dhg5zhg5Lhg5Dhg6Dhg5jhg6jhg5jhg6Eg4YOS4YOQ4YOh4YOQ4YOW4YOY4YOQ4YOg4YOU4YOR4YOa4YOQ4YOTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4i4YOu4YOQ4YOg4YOV4YOU4YOW4YOY4YOhIOGDkOGDnOGDkuGDkOGDoOGDmOGDqOGDlOGDkeGDmCDhg5vhg53hg5jhg6rhg5Dhg5Xhg6Eg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOU4YOR4YOhIOGDoeGDruGDleGDkOGDk+GDkOGDoeGDruGDleGDkCDhg6Hhg5jhg6Hhg6Lhg5Thg5vhg6Phg6Dhg5gg4YOf4YOj4YOg4YOc4YOQ4YOa4YOY4YOhIOGDpOGDkOGDmOGDmuGDlOGDkeGDmOGDk+GDkOGDnCwg4YOb4YOQ4YOXIOGDqOGDneGDoOGDmOGDoSDhg57hg5jhg6Dhg5Dhg5Mg4YOT4YOQIOGDmeGDneGDnOGDpOGDmOGDk+GDlOGDnOGDquGDmOGDkOGDmuGDo+GDoCDhg5jhg5zhg6Thg53hg6Dhg5vhg5Dhg6rhg5jhg5Dhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IuGDqOGDlOGDm+GDk+GDkuGDneGDm+GDqOGDmCDhg5Dhg6nhg5Xhg5Thg5zhg5Qg4YOU4YOhIOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDkCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmIzNDVjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+IuGen+GfguGemyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiLhnpThnrbhnpPigIvhnoXhnrbhnpThn4vigIvhnpnhnoDigIvhnprhnpThnrbhnpnhnoDhnrbhnprhno7hn43igIvhnoDhn4bhnqDhnrvhnp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiLhnpThn4nhn4figIsg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6F4Z+C4Z6A4oCL4Z6a4Z+G4Z6b4Z+C4Z6A4oCL4Z6a4Z6U4Z624Z6Z4Z6A4Z624Z6a4Z6O4Z+N4oCL4Z6A4Z+G4Z6g4Z674Z6f4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4i4Z6a4Z6U4Z624Z6Z4Z6A4Z624Z6a4Z6O4Z+N4oCL4Z6A4Z+G4Z6g4Z674Z6f4oCL4Z6a4Z694Z6Y4Z6Y4Z624Z6T4oCL4Z6v4Z6A4Z6f4Z624Z6a4oCL4Z6A4Z+G4Z6O4Z6P4Z+L4oCL4Z6g4Z+B4Z6P4Z674oCL4Z6V4Z+S4Z6f4Z+B4Z6E4Z+X4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6U4Z+S4Z6a4Z6W4Z+Q4Z6T4Z+S4Z6SIOGemuGeveGemOGemOGetuGek+KAi+GeluGfkOGej+GfjOGemOGetuGek+KAi+GeleGfkuGekeGetuGem+Gfi+GegeGfkuGem+GeveGekyDhnpPhnrfhnoTigIvhnq/hnoDhnofhnpPhn5Qg4Z6F4Z+C4Z6A4Z6a4Z+G4Z6b4Z+C4Z6A4oCL4Z6a4Z6U4Z624Z6Z4Z6A4Z624Z6a4Z6O4Z+N4oCL4Z6A4Z+G4Z6g4Z674Z6f4oCL4Z6H4Z624oCL4Z6Y4Z694Z6Z4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z64IOGek+Get+GehOKAi+GemOGek+Geu+Gen+GfkuGen+KAi+GeiuGfguGem+KAi+GeouGfkuGek+GegOKAi+GekeGeu+GegOKAi+GeheGet+Gej+GfkuGej+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiLhnpThnoThn5LhnqDhnrbhnonigIvhnp/hnrbhnprigIvhnpPhn4Hhn4figIvhnpbhn4HhnpvigIvhnoDhn5Lhnprhn4ThnpkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzN2Q0OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiJTaGVsbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiLguqXgurLguo3guofgurLgupnguojgurjgupTguprgurvguoHgup7gu4jguq3guofgupbgurfguoHgu4DguoHgurHguprguoHgurPgu4HguqXgu4nguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiLgu4HgupXgurDgu4Dgup7gurfgu4jguq3guqrgurvgu4jguofguoHgurLgupnguqXgurLguo3guofgurLgupngupvgurHgupnguqvgurLguoLguq3guofgupfgu4jgurLgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiLguoHgurLgupnguqXgurLguo3guofgurLgupnguoLgu43gu4ngupzgurTgupTgup7gurLgupTgupvgurDguoHguq3guprguqHgurUg4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqI4Lqy4LqB4LuE4Lqf4Lql4LuM4Lqa4Lqx4LqZ4LqX4Lq24LqB4LqC4Lqt4LqH4Lql4Lqw4Lqa4Lq74Lqa4Lqr4Lq84Lqy4LqN4LuE4Lqf4Lql4LuMLCDguq7guqfguqHgupfgurHguofguoLgu43gu4nguqHgurngupnguqrgu4jguqfgupngu4LgupXgupngurMuIOC6l+C7iOC6suC6meC6leC7ieC6reC6h+C7geC6muC7iOC6h+C6m+C6seC6meC6peC6suC6jeC6h+C6suC6meC6guC7jeC7ieC6nOC6tOC6lOC6nuC6suC6lOC7g+C6q+C7ieC7geC6reC6seC6muC6ryDgu4HguqXgurDguoTgurvgupngupfgurXgu4jgupfgu4jgurLgupngu4Dguorgurfgu4jguq3gupbgurfgu4TgupTgu4ngu4Dgupfgurvgu4jgurLgupngurHgu4ngupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IuC6quC6sOC7geC6lOC6h+C6guC7jeC7ieC6hOC6p+C6suC6oeC6meC6teC7ieC6reC6teC6geC7g+C6meC7gOC6l+C6t+C7iOC6reC6leC7jeC7iOC7hOC6myI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzQyOThkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+ItCo0LXQuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiLQkNC70LTQsNCw0L3RiyDQvNGN0LTRjdGN0LvRjdC7INGF0q/Qu9GN0Y3QvSDQsNCy0LDQsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+ItCi0LAg0LDQu9C00LDQsNC90Ysg0LzRjdC00Y3Qs9C00LvQuNC50LMg0YXRg9Cy0LDQsNC70YbQsNGFINCx0L7QuyDRhdKv0YDQvdGNINKv0q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiLQkNC70LTQsNCw0L3RiyDRgNC10L/QvtGA0YIg0L3RjCDRhdGD0LLQuNC50L0g0LHQvtC70L7QvSDQvdGD0YPRhiDQvNGN0LTRjdGN0LvRjdC7INC30Y3RgNCz0LjQudCzINCw0LPRg9GD0LvRgdCw0L0g0YHQuNGB0YLQtdC80LjQudC9INGC06nRgNOp0Lsg0LHSr9GA0LjQudC9INC70L7QsyDRhNCw0LnQu9GL0L0g0LTQsNGC0LDQsyDQsNCz0YPRg9C70L3QsC4g0JDQu9C00LDQsNC90Ysg0YDQtdC/0L7RgNGC0YvQsyDQt9Op0LLRhdOp0L0g0LjRgtCz0Y3Qu9GC0Y3QuSDQsNC/0L8g0LHQvtC70L7QvSDRhdKv0LzSr9Kv0YHRgiDRhdGD0LLQsNCw0LvRhtCw0L3QsCDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiLQrdC90Y0g0LzQtdGB0YHQtdC20LjQudCzINC00LDRgNCw0LDQs9C40LnQvSDRg9C00LDQsCDRhdCw0YDRg9GD0LvQsNGFIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1zL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXMvc3RyaW5ncy54bWwKcmVuYW1lIHRvIHBhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMDk0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4i4KS44KWH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IuCkrOCklyDgpKrgpY3gpLDgpKTgpL/gpLXgpYfgpKbgpKgg4KS44KSu4KS+4KSk4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4i4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiLgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWC4KSu4KS+IOCkquCljeCksOCko+CkvuCksuClgOCkleCkviDgpLXgpL/gpK3gpL/gpKjgpY3gpKgg4KSy4KSXIOCkq+CkvuCkh+CksuCkueCksOClguCkrOCkvuCknyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSk4KSl4KS+IOCkqOClgOCknOCkvyDgpLjgpYLgpJrgpKjgpL7gpLjgpLngpL/gpKTgpJXgpYsg4KSh4KWH4KSf4KS+IOCksOCkueCkqOCljeCkm+ClpCAg4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCkn+CkueCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSwIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpLXgpL/gpLbgpY3gpLXgpL7gpLgg4KSX4KSw4KWH4KSV4KS+IOCkteCljeCkr+CkleCljeCkpOCkv+CkueCksOClguCkuOCkgeCklyDgpK7gpL7gpKTgpY3gpLAg4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiLgpK/gpYsg4KS44KSo4KWN4KSm4KWH4KS2IOCkheCksOCljeCkleCliyDgpKrgpJ/gpJUg4KSm4KWH4KSW4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjA5NDMzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4i4KS44KWH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IuCkrOCklyDgpKrgpY3gpLDgpKTgpL/gpLXgpYfgpKbgpKgg4KS44KSu4KS+4KSk4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4i4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiLgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWC4KSu4KS+IOCkquCljeCksOCko+CkvuCksuClgOCkleCkviDgpLXgpL/gpK3gpL/gpKjgpY3gpKgg4KSy4KSXIOCkq+CkvuCkh+CksuCkueCksOClguCkrOCkvuCknyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSk4KSl4KS+IOCkqOClgOCknOCkvyDgpLjgpYLgpJrgpKjgpL7gpLjgpLngpL/gpKTgpJXgpYsg4KSh4KWH4KSf4KS+IOCksOCkueCkqOCljeCkm+ClpCAg4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCkn+CkueCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSwIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpLXgpL/gpLbgpY3gpLXgpL7gpLgg4KSX4KSw4KWH4KSV4KS+IOCkteCljeCkr+CkleCljeCkpOCkv+CkueCksOClguCkuOCkgeCklyDgpK7gpL7gpKTgpY3gpLAg4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiLgpK/gpYsg4KS44KSo4KWN4KSm4KWH4KS2IOCkheCksOCljeCkleCliyDgpKrgpJ/gpJUg4KSm4KWH4KSW4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ODA3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4i4LeC4LeZ4La94LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IuC2r+C3neC3giDgt4Dgt4/gtrvgt4rgtq3gt4/gt4Ag4La94La24LeP4Lac4Lax4LeK4Lax4LePIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IuC2lOC2tuC2nOC3miDgtq/gt53gt4Ig4LeA4LeP4La74LeK4Lat4LeP4LeAIOC2tuC3meC2r+C3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IuC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgt4Pgt4Qg4La04Lee4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4La04Lav4LeK4Law4Lat4LeS4La64LeaIOC3gOC3kuC3gOC3kuC2sCDgtr3gt5zgtpzgt4og4Lac4Lec4Lax4LeUIOC3gOC2vSDgtq/gtq3gt4rgtq0g4Lav4Led4LeCIOC3gOC3j+C2u+C3iuC2reC3j+C3gOC3miDgtoXgtqngtoLgtpzgt5Qg4LeA4LeaLiDgtpTgtrbgtqcg4LeA4LeS4LeB4LeK4LeA4LeP4LeD4LeA4Lax4LeK4LatIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgt4Qg4La04LeU4Lav4LeK4Lac4La94La64LeS4Lax4LeKIOC3g+C2uOC2nyDgtrTgtrjgtqvgtprgt4og4Lav4Led4LeCIOC3gOC3j+C2u+C3iuC2reC3jyDgtrbgt5ngtq/gt48g4Lac4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiLgtorgt4Xgtp8g4LeA4LeZ4La94LeP4LeA4LeaIOC2uOC3meC2uCDgtrTgtqvgt5Lgt4Dgt5Lgtqngtrog4La04LeZ4Lax4LeK4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzgwNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4i4LeC4LeZ4La94LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IuC2r+C3neC3giDgt4Dgt4/gtrvgt4rgtq3gt4/gt4Ag4La94La24LeP4Lac4Lax4LeK4Lax4LePIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IuC2lOC2tuC2nOC3miDgtq/gt53gt4Ig4LeA4LeP4La74LeK4Lat4LeP4LeAIOC2tuC3meC2r+C3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IuC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgt4Pgt4Qg4La04Lee4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4La04Lav4LeK4Law4Lat4LeS4La64LeaIOC3gOC3kuC3gOC3kuC2sCDgtr3gt5zgtpzgt4og4Lac4Lec4Lax4LeUIOC3gOC2vSDgtq/gtq3gt4rgtq0g4Lav4Led4LeCIOC3gOC3j+C2u+C3iuC2reC3j+C3gOC3miDgtoXgtqngtoLgtpzgt5Qg4LeA4LeaLiDgtpTgtrbgtqcg4LeA4LeS4LeB4LeK4LeA4LeP4LeD4LeA4Lax4LeK4LatIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgt4Qg4La04LeU4Lav4LeK4Lac4La94La64LeS4Lax4LeKIOC3g+C2uOC2nyDgtrTgtrjgtqvgtprgt4og4Lav4Led4LeCIOC3gOC3j+C2u+C3iuC2reC3jyDgtrbgt5ngtq/gt48g4Lac4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiLgtorgt4Xgtp8g4LeA4LeZ4La94LeP4LeA4LeaIOC2uOC3meC2uCDgtrTgtqvgt5Lgt4Dgt5Lgtqngtrog4La04LeZ4Lax4LeK4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjE5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4i5ZG95Luk5LuL6Z2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IuW3suaTt+WPlumMr+iqpOWgseWRiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+Iui8leinuOWNs+WPr+WIhuS6q+aCqOeahOmMr+iqpOWgseWRiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IumMr+iqpOWgseWRiuS4reacieS+huiHquezu+e1seWQhOWAi+iomOmMhOaqlOahiOeahOizh+aWme+8jOWMheaLrOWAi+S6uuWSjOengeS6uuizh+aWmeOAguiri+WPquiIh+aCqOS/oeS7u+eahOaHieeUqOeoi+W8j+WSjOeUqOaItuWIhuS6q+mMr+iqpOWgseWRiuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiLkuIvmrKHlho3poa/npLrpgJnliYfoqIrmga8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19hY3RpdmF0ZWQucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvcmUvcmVzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19hY3RpdmF0ZWQucG5nCnJlbmFtZSB0byBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfYWN0aXZhdGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfbm9ybWFsLnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb3JlL3Jlcy9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfbm9ybWFsLnBuZwpyZW5hbWUgdG8gcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX25vcm1hbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdC5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvcmUvcmVzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdC5wbmcKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfYWN0aXZhdGVkLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29yZS9yZXMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19hY3RpdmF0ZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX25vcm1hbC5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvcmUvcmVzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nCnJlbmFtZSB0byBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfbm9ybWFsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtbWRwaS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29yZS9yZXMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZwpyZW5hbWUgdG8gcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvcmUvcmVzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfYWN0aXZhdGVkLnBuZwpyZW5hbWUgdG8gcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19hY3RpdmF0ZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfbm9ybWFsLnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfbm9ybWFsLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29yZS9yZXMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nCnJlbmFtZSB0byBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX25vcm1hbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdC5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29yZS9yZXMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdC5wbmcKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19hY3RpdmF0ZWQucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb3JlL3Jlcy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19hY3RpdmF0ZWQucG5nCnJlbmFtZSB0byBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19hY3RpdmF0ZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX25vcm1hbC5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb3JlL3Jlcy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nCnJlbmFtZSB0byBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29yZS9yZXMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QucG5nCnJlbmFtZSB0byBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYy54bWwKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWMueG1sCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvbm90aWZpY2F0aW9uX3Jvd19sZWdhY3lfYmcueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL25vdGlmaWNhdGlvbl9yb3dfbGVnYWN5X2JnLnhtbAppbmRleCAwZTFiZGQzLi5jZTMzNzJlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvbm90aWZpY2F0aW9uX3Jvd19sZWdhY3lfYmcueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9ub3RpZmljYXRpb25fcm93X2xlZ2FjeV9iZy54bWwKQEAgLTE3LDYgKzE3LDYgQEAKIDxzZWxlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgIGFuZHJvaWQ6ZXhpdEZhZGVEdXJhdGlvbj0iQGFuZHJvaWQ6aW50ZWdlci9jb25maWdfbWVkaXVtQW5pbVRpbWUiPgogCi0gICAgPGl0ZW0gYW5kcm9pZDpzdGF0ZV9wcmVzc2VkPSJ0cnVlIiAgYW5kcm9pZDpkcmF3YWJsZT0iQCphbmRyb2lkOmRyYXdhYmxlL25vdGlmaWNhdGlvbl9pdGVtX2JhY2tncm91bmRfY29sb3JfcHJlc3NlZCIgLz4KKyAgICA8aXRlbSBhbmRyb2lkOnN0YXRlX3ByZXNzZWQ9InRydWUiICBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvbm90aWZpY2F0aW9uX2l0ZW1fYmFja2dyb3VuZF9jb2xvcl9wcmVzc2VkIiAvPgogICAgIDxpdGVtIGFuZHJvaWQ6c3RhdGVfcHJlc3NlZD0iZmFsc2UiIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9ub3RpZmljYXRpb25faXRlbV9iYWNrZ3JvdW5kX2xlZ2FjeV9jb2xvciIgLz4KIDwvc2VsZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvc3RhdHVzX2Jhcl9pdGVtX2JhY2tncm91bmQueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3N0YXR1c19iYXJfaXRlbV9iYWNrZ3JvdW5kLnhtbAppbmRleCBiODJmZWQ5Li4zYTUwYWE5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvc3RhdHVzX2Jhcl9pdGVtX2JhY2tncm91bmQueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9zdGF0dXNfYmFyX2l0ZW1fYmFja2dyb3VuZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKICAgICBhbmRyb2lkOm9wYWNpdHk9InRyYW5zbHVjZW50IgogICAgID4KICAgICA8aXRlbQotICAgICAgICBhbmRyb2lkOmRyYXdhYmxlPSJAKmFuZHJvaWQ6ZHJhd2FibGUvbm90aWZpY2F0aW9uX2l0ZW1fYmFja2dyb3VuZF9jb2xvciIKKyAgICAgICAgYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL25vdGlmaWNhdGlvbl9pdGVtX2JhY2tncm91bmRfY29sb3IiCiAgICAgICAgIC8+CiA8L2xheWVyLWxpc3Q+CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9zdGF0dXNfYmFyX3RpY2tlcl9iYWNrZ3JvdW5kLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9zdGF0dXNfYmFyX3RpY2tlcl9iYWNrZ3JvdW5kLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NiNjRjMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvc3RhdHVzX2Jhcl90aWNrZXJfYmFja2dyb3VuZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICAKLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPGJpdG1hcAotICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnRpbGVNb2RlPSJyZXBlYXQiCi0gICAgYW5kcm9pZDpzcmM9IkAqYW5kcm9pZDpkcmF3YWJsZS9ub3RpZnlfcGFuZWxfbm90aWZpY2F0aW9uX2ljb25fYmciCi0gICAgLz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9zeXN0ZW1fYmFyX3RpY2tlcl9iYWNrZ3JvdW5kLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9zeXN0ZW1fYmFyX3RpY2tlcl9iYWNrZ3JvdW5kLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NiNjRjMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvc3lzdGVtX2Jhcl90aWNrZXJfYmFja2dyb3VuZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICAKLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPGJpdG1hcAotICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnRpbGVNb2RlPSJyZXBlYXQiCi0gICAgYW5kcm9pZDpzcmM9IkAqYW5kcm9pZDpkcmF3YWJsZS9ub3RpZnlfcGFuZWxfbm90aWZpY2F0aW9uX2ljb25fYmciCi0gICAgLz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS90aWNrZXJfYmFja2dyb3VuZC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdGlja2VyX2JhY2tncm91bmQueG1sCmluZGV4IDA3YjQ0Y2EuLjczMjBmYTAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS90aWNrZXJfYmFja2dyb3VuZC54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3RpY2tlcl9iYWNrZ3JvdW5kLnhtbApAQCAtMjAsNyArMjAsNyBAQAogICAgID4KICAgICA8IS0tIHRoZSBsYXJnZSBpY29uIGV4dGVuZHMgMTJkcCBiZXlvbmQgdGhlIGVkZ2Ugb2YgdGhlIHN0YXR1cyBiYXIgLS0+CiAgICAgPGl0ZW0KLSAgICAgICAgYW5kcm9pZDpkcmF3YWJsZT0iQCphbmRyb2lkOmRyYXdhYmxlL25vdGlmaWNhdGlvbl9pdGVtX2JhY2tncm91bmRfY29sb3IiCisgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9ub3RpZmljYXRpb25faXRlbV9iYWNrZ3JvdW5kX2NvbG9yIgogICAgICAgICBhbmRyb2lkOnRvcD0iMTJkcCIKICAgICAgICAgLz4KIDwvbGF5ZXItbGlzdD4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQtbGFuZC9zdGF0dXNfYmFyX3NlYXJjaF9wYW5lbC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0LWxhbmQvc3RhdHVzX2Jhcl9zZWFyY2hfcGFuZWwueG1sCmluZGV4IGExMDkxOTEuLmRkZmZkNmUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQtbGFuZC9zdGF0dXNfYmFyX3NlYXJjaF9wYW5lbC54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC1sYW5kL3N0YXR1c19iYXJfc2VhcmNoX3BhbmVsLnhtbApAQCAtNTEsMTMgKzUxLDEzIEBACiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpkaXJlY3Rpb25EZXNjcmlwdGlvbnM9IkBhcnJheS9uYXZiYXJfc2VhcmNoX2RpcmVjdGlvbl9kZXNjcmlwdGlvbnMiCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpvdXRlclJpbmdEcmF3YWJsZT0iQGRyYXdhYmxlL25hdmJhcl9zZWFyY2hfb3V0ZXJyaW5nIgogICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6b3V0ZXJSYWRpdXM9IkBkaW1lbi9uYXZiYXJfc2VhcmNoX291dGVycmluZ19yYWRpdXMiCi0gICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDppbm5lclJhZGl1cz0iQCphbmRyb2lkOmRpbWVuL2dsb3dwYWR2aWV3X2lubmVyX3JhZGl1cyIKKyAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmlubmVyUmFkaXVzPSJAZGltZW4vZ2xvd3BhZHZpZXdfaW5uZXJfcmFkaXVzIgogICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6c25hcE1hcmdpbj0iQGRpbWVuL25hdmJhcl9zZWFyY2hfc25hcF9tYXJnaW4iCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpmZWVkYmFja0NvdW50PSIwIgogICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6dmlicmF0aW9uRHVyYXRpb249IkBpbnRlZ2VyL2NvbmZpZ192aWJyYXRpb25fZHVyYXRpb24iCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDphbHdheXNUcmFja0Zpbmdlcj0idHJ1ZSIKLSAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmdsb3dSYWRpdXM9IkAqYW5kcm9pZDpkaW1lbi9nbG93cGFkdmlld19nbG93X3JhZGl1cyIKLSAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOnBvaW50RHJhd2FibGU9IkAqYW5kcm9pZDpkcmF3YWJsZS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QiCisgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpnbG93UmFkaXVzPSJAZGltZW4vZ2xvd3BhZHZpZXdfZ2xvd19yYWRpdXMiCisgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpwb2ludERyYXdhYmxlPSJAZHJhd2FibGUvaWNfbG9ja3NjcmVlbl9nbG93ZG90IgogICAgICAgICAgICAgICAgIC8+CiAKICAgICAgICAgPC9SZWxhdGl2ZUxheW91dD4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQtc3c2MDBkcC9zdGF0dXNfYmFyX3NlYXJjaF9wYW5lbC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0LXN3NjAwZHAvc3RhdHVzX2Jhcl9zZWFyY2hfcGFuZWwueG1sCmluZGV4IDFmYTY3YmQuLjA4ZjYxYmIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQtc3c2MDBkcC9zdGF0dXNfYmFyX3NlYXJjaF9wYW5lbC54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC1zdzYwMGRwL3N0YXR1c19iYXJfc2VhcmNoX3BhbmVsLnhtbApAQCAtMzcsMTIgKzM3LDEyIEBACiAgICAgICAgIHBydmFuZHJvaWQ6ZGlyZWN0aW9uRGVzY3JpcHRpb25zPSJAYXJyYXkvbmF2YmFyX3NlYXJjaF9kaXJlY3Rpb25fZGVzY3JpcHRpb25zIgogICAgICAgICBwcnZhbmRyb2lkOm91dGVyUmluZ0RyYXdhYmxlPSJAZHJhd2FibGUvbmF2YmFyX3NlYXJjaF9vdXRlcnJpbmciCiAgICAgICAgIHBydmFuZHJvaWQ6b3V0ZXJSYWRpdXM9IkBkaW1lbi9uYXZiYXJfc2VhcmNoX291dGVycmluZ19yYWRpdXMiCi0gICAgICAgIHBydmFuZHJvaWQ6aW5uZXJSYWRpdXM9IkAqYW5kcm9pZDpkaW1lbi9nbG93cGFkdmlld19pbm5lcl9yYWRpdXMiCisgICAgICAgIHBydmFuZHJvaWQ6aW5uZXJSYWRpdXM9IkBkaW1lbi9nbG93cGFkdmlld19pbm5lcl9yYWRpdXMiCiAgICAgICAgIHBydmFuZHJvaWQ6c25hcE1hcmdpbj0iQGRpbWVuL25hdmJhcl9zZWFyY2hfc25hcF9tYXJnaW4iCiAgICAgICAgIHBydmFuZHJvaWQ6ZmVlZGJhY2tDb3VudD0iMCIKICAgICAgICAgcHJ2YW5kcm9pZDp2aWJyYXRpb25EdXJhdGlvbj0iQGludGVnZXIvY29uZmlnX3ZpYnJhdGlvbl9kdXJhdGlvbiIKICAgICAgICAgcHJ2YW5kcm9pZDphbHdheXNUcmFja0Zpbmdlcj0idHJ1ZSIKLSAgICAgICAgcHJ2YW5kcm9pZDpnbG93UmFkaXVzPSJAKmFuZHJvaWQ6ZGltZW4vZ2xvd3BhZHZpZXdfZ2xvd19yYWRpdXMiCi0gICAgICAgIHBydmFuZHJvaWQ6cG9pbnREcmF3YWJsZT0iQCphbmRyb2lkOmRyYXdhYmxlL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdCIvPgorICAgICAgICBwcnZhbmRyb2lkOmdsb3dSYWRpdXM9IkBkaW1lbi9nbG93cGFkdmlld19nbG93X3JhZGl1cyIKKyAgICAgICAgcHJ2YW5kcm9pZDpwb2ludERyYXdhYmxlPSJAZHJhd2FibGUvaWNfbG9ja3NjcmVlbl9nbG93ZG90Ii8+CiAKIDwvY29tLmFuZHJvaWQuc3lzdGVtdWkuU2VhcmNoUGFuZWxWaWV3PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyX3NlYXJjaF9wYW5lbC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfc2VhcmNoX3BhbmVsLnhtbAppbmRleCBiODcxYmVmLi5jMDFkYjdjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfc2VhcmNoX3BhbmVsLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfc2VhcmNoX3BhbmVsLnhtbApAQCAtNTEsMTMgKzUxLDEzIEBACiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpkaXJlY3Rpb25EZXNjcmlwdGlvbnM9IkBhcnJheS9uYXZiYXJfc2VhcmNoX2RpcmVjdGlvbl9kZXNjcmlwdGlvbnMiCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpvdXRlclJpbmdEcmF3YWJsZT0iQGRyYXdhYmxlL25hdmJhcl9zZWFyY2hfb3V0ZXJyaW5nIgogICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6b3V0ZXJSYWRpdXM9IkBkaW1lbi9uYXZiYXJfc2VhcmNoX291dGVycmluZ19yYWRpdXMiCi0gICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDppbm5lclJhZGl1cz0iQCphbmRyb2lkOmRpbWVuL2dsb3dwYWR2aWV3X2lubmVyX3JhZGl1cyIKKyAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmlubmVyUmFkaXVzPSJAZGltZW4vZ2xvd3BhZHZpZXdfaW5uZXJfcmFkaXVzIgogICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6c25hcE1hcmdpbj0iQGRpbWVuL25hdmJhcl9zZWFyY2hfc25hcF9tYXJnaW4iCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpmZWVkYmFja0NvdW50PSIwIgogICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6dmlicmF0aW9uRHVyYXRpb249IkBpbnRlZ2VyL2NvbmZpZ192aWJyYXRpb25fZHVyYXRpb24iCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDphbHdheXNUcmFja0Zpbmdlcj0idHJ1ZSIKLSAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmdsb3dSYWRpdXM9IkAqYW5kcm9pZDpkaW1lbi9nbG93cGFkdmlld19nbG93X3JhZGl1cyIKLSAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOnBvaW50RHJhd2FibGU9IkAqYW5kcm9pZDpkcmF3YWJsZS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QiCisgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpnbG93UmFkaXVzPSJAZGltZW4vZ2xvd3BhZHZpZXdfZ2xvd19yYWRpdXMiCisgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpwb2ludERyYXdhYmxlPSJAZHJhd2FibGUvaWNfbG9ja3NjcmVlbl9nbG93ZG90IgogICAgICAgICAgICAgICAgLz4KIAogICAgICAgICA8L1JlbGF0aXZlTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKaW5kZXggOWRkZjQyYS4uMzE0MjhiNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IkxhYXQgYWx0eWQgdG9lIHZhbiBoaWVyZGllIHJla2VuYWFyIGFmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWm9lbSBvbSBza2VybSB0ZSB2dWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iU3RyZWsgb20gc2tlcm0gdGUgdnVsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iVmVyc29lbmJhYXJoZWlkc3pvZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iQXMgXCduIHByb2dyYW0gdmlyIFwnbiBrbGVpbmVyIHNrZXJtIG9udHdlcnAgaXMsIHNhbCBcJ24gem9lbWtvbnRyb2xlIG5hYnkgZGllIGhvcmxvc2llIHZlcnNreW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iU3Rvb3IgdGFucyBza2VybWtpZWtpZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlN0b29yIHRhbnMgc2tlcm1raWVraWUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlNrZXJta2lla2llIHdvcmQgdGFucyBnZXN0b29yLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJUdWlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iS2llc2x5cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+Ik9ubGFuZ3NlIHByb2dyYW1tZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IkRldXJzb2VrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkthbWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iS25vcHBpZSB2aXIgd2lzc2VsIHZhbiBpbnZvZXJtZXRvZGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlZlcnNvZW5iYWFyaGVpZC16b2VtIHNlIGtub3BwaWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab2VtIGtsZWluZXIgbmEgZ3JvdGVyIHNrZXJtLiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkJhdHRlcnkgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJWbGllZ3R1aWdtb2R1cyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJMaWdnaW5nIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iV2Vra2VyIGdlc3RlbCB2aXIgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRy1kYXRhIGdlZGVha3RpdmVlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIGRhdGEgZ2VkZWFrdGl2ZWVyIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIGdla29wcGVsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJTb2VrIHZpciBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iTGlnZ2luZyBkZXVyIEdQUyBnZXN0ZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJMaWdnaW5ndmVyc29la2UgYWt0aWVmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iVmVyd3lkZXIgYWxsZSBrZW5uaXNnZXdpbmdzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJQcm9ncmFtaW5saWd0aW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJEaWUgc2tlcm0gc2FsIG91dG9tYXRpZXMgZHJhYWkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJTa2VybSBpcyBpbiBsYW5kc2thcHNvcmnDq250YXNpZSBnZXNsdWl0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJTa2VybSBpcyBpbiBwb3J0cmV0b3Jpw6tudGFzaWUgZ2VzbHVpdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iTmFnZXJlZ2thcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJTbHVpbWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IlZsaWVndHVpZ21vZHVzIjwvc3RyaW5nPgpAQCAtMTgxLDExICsxODMsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iSGVsZGVyaGVpZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iT3V0b3JvdGVlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJSb3Rhc2llIGdlc2x1aXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iR2VzbHVpdCBvcCBwb3J0cmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiJHZXNsdWl0IG9wIGxhbmRza2FwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ikludm9lcm1ldG9kZSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCAoNTAxMTMyNzA0ODc0ODc2MjI1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwgKDc0NjQ1NDQwODY1MDczMzE0NTkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJMaWdnaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IkxpZ2dpbmcgYWYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iTWVkaWF0b2VzdGVsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJOZXQgbm9vZG9wcm9lcGUiPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzE5OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5pZSBnZWtvcHBlbCBuaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iR2VlbiBuZXR3ZXJrIG5pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIGFmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpLXNrZXJtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iRHJhYWRsb3NlIGFhbnNpZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJTYWFpIG5hIHNrZXJtIHVpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkhlbGRlcmhlaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iT1VUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJLZW5uaXNnZXdpbmdzIHZlcnNreW4gaGllciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IlZlcmtyeSBlbmlnZSB0eWQgdG9lZ2FuZyB0b3QgaHVsbGUgZGV1ciBhZiB0ZSBzbGVlcC5cblNsZWVwIHdlZXIgYWYgdmlyIHN0ZWxzZWxrb250cm9sZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iU2xlZXAgcmFuZCB2YW4gc2tlcm0gb20gYmFsayB0ZSB3eXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlNsZWVwIHZhbiByYW5kIHZhbiBza2VybSBhZiBvbSBzdGVsc2VsYmFsayB0ZSB3eXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iS2xldXItb21rZXJpbmdtb2R1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IlZlcmJldGVyZGUga29udHJhc21vZHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJLbGV1cnJlZ3N0ZWxsaW5nbW9kdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ik5ldHdlcmsgd29yZFxuZGFsayBnZW1vbml0b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlNvZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iR2x5IG9wIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iR2x5IGxpbmtzIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAppbmRleCAxZDgxZWE3Li5lMzkzYzkwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i4YiB4YiN4YyK4YucIOGKqOGLmuGIhSDhiq7hiJ3hjZLhi43hibDhiK0g4Y2N4YmA4Yu1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i4Yib4YurIOGKpeGKleGLsuGInuGIiyDhiqDhjInhiIsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i4Yib4YurIOGIiOGImOGImeGIiOGJtSDhiLPhiaUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLhi6jhibDhirPhiovhip3hipDhibUg4Yqg4YyJ4YiLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IuGJteGMjeGJoOGIqyDhiIjhibXhipXhiL0g4Yib4YurIOGIsuGKkOGLsOGNjeGNoyDhi6jhiqDhjInhiIsg4YiY4YmG4YiY4Yyj4Yyg4Yiq4YurIOGJoOGIsOGLk+GJtSDhiaDhiqnhiI0g4Yml4YmFIOGLreGIi+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLhiYXhjL3hiaDhibPhi4og4YyI4Yy9IOGKpeGLreGJsyDhiaDhiJvhiLXhiYDhiJjhjKUg4YiL4YutLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i4YmF4Yy94Ymg4Ymz4YuKIOGMiOGMvSDhiqXhi63hibMg4Ymg4Yib4Yi14YmA4YiY4YylIOGIi+GLrS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i4YmF4Yy94Ymg4Ymz4YuKIOGMiOGMvSDhiqXhi63hibMg4Yql4Yuo4Ymw4YmA4YiY4YygIOGKkOGLjTo6Ijwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IuGImOGKkOGIuyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IuGIneGKk+GIjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IuGLqOGJheGIreGJpSDhjIrhi5wgIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IuGNiOGIjeGMjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLhiqvhiJzhiKsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IuGLqOGMjeGJpOGJtSDhiLXhiI3hibUg4Yqg4Yud4Yir4YitIOGJgOGLreGIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLhi6jhibDhirPhiovhip3hiqDhjInhiIsg4Yqg4Yud4Yir4Yit4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLhiqDhipDhiLXhibDhipvhi43hipUg4Yib4YurIOGLiOGLsCDhibXhiI3hiYUg4Yqg4YyJ4YiL4Y2iIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i4Ymj4Ym14YiqIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLhi6jhiqDhi43hiK7hjZXhiIvhipUg4YiB4YqQ4YmzIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i4Yml4YiJ4Ymx4YudIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLhiqDhiqvhiaPhiaIgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz7hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IuGIm+GKleGJguGLqyDhiIg8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+IOGJsOGLi+GJheGIr+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLTNHIOGLjeGIguGJpSDhiabhi53hipfhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyDhi43hiILhiaUg4Ymm4Yud4YqX4YiNIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIOGJsOGLq+GLreGLn+GIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i4YiIR1BTIOGJoOGImOGNiOGIiOGMjSDhiIvhi60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i4YmgIEdQUyDhi6jhibDhi5jhjIvhjIAg4Yil4Y2N4YirIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i4Yuo4Yqg4Yqr4Ymj4YmiIOGMpeGLq+GJhOGLjuGJvSDhipDhiYXhibDhi4vhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLhiIHhiInhipXhiJ0g4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGKoOGMveGLsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLhi6jhiJjhibDhjI3hiaDhiKrhi6sg4YiY4Yio4YyDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLhiJvhi6sg4YyI4Yy9IOGJoOGIq+GItSDhiLDhiK0g4Yut4Yue4Yir4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLhiJvhi6sg4YyI4Yy9IOGJoOGLiOGIreGLtSDhjIjhjYUg4Yqg4YmA4Yib4YiY4YylIOGJsOGJhuGIjeGNj+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLhiJvhi6sg4YyI4Yy9IOGJoOGJgeGInSDhjIjhjYUg4Yqg4YmA4Yib4YiY4YylIOGJsOGJhuGIjeGNj+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiLhi6jhiJvhi4jhiKvhiKjhjIMg4Yid4YyN4Ymm4Ym9IOGImOGLq+GLoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLhi6jhiYDhipUg4YiF4YiN4YidIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4i4Yqk4Ymw4Yit4YqU4Ym1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLhi6jhiqDhi43hiK7hjZXhiIvhipUg4YiB4YqQ4YmzIjwvc3RyaW5nPgpAQCAtMTgxLDYgKzE4Myw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IuGJpeGIqeGIheGKkOGJtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4i4Yir4Yi1LeGKoOGLmeGIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLhiqDhi5nhiKrhibUg4Ymw4YmG4YiN4Y2P4YiNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IuGLiOGLsCDhiYHhiJjhibUg4Yqg4YmA4Yib4YiY4YylIOGJsOGJhuGIjeGNj+GIjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4i4YuI4YuwIOGImOGIrOGJtSDhjIjhjL3hibMg4Ymw4YmG4YiN4Y2P4YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IuGLqOGMjeGJpOGJtSDhiLXhiI3hibUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLhiqDhiqvhiaPhiaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i4Yqg4Yqr4Ymj4YmiIOGMoOGNjeGJt+GIjSI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i4Yqg4YiN4Ymw4YyI4YqT4YqY4YidIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IuGIneGKleGInSDhiqDhi43hibPhiKgg4YiY4Yio4YmlIOGLqOGIiOGInSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIOGMoOGNjeGJt+GIjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiLhi6hXaS1GaSDhiJvhiLPhi6siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLhjIjhiJjhi7Ug4Yqg4YiN4YmjIOGIm+GIs+GLqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLhiJvhi6sg4YyI4Yy9IOGLjeGIsOGLtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuGJpeGIqeGIheGKkOGJtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLhiKvhiLUt4Yiw4YitIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IuGIm+GIs+GLiOGJguGLq+GLjuGJvSDhiqXhi5rhiIUg4YiL4YutIOGLreGJs+GLq+GIiSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IuGLiOGLsCDhibPhib0g4Ymg4Yib4YqV4Yi44Yir4Ymw4Ym1IOGJoOGIm+GKleGKm+GLjeGInSDhjIrhi5wg4Yut4Yu14Yio4Yix4Ymj4Ym44YuN4Y2iXG5Td2lwZSDhi6jhiLXhiK3hi5PhibUg4YiY4YmG4Yyj4Yyg4Yiq4Yur4YuO4Ym94YqVIOGIiOGIm+GIneGMo+GJtSDhiqXhipXhi7DhjIjhipMg4YuI4YuwIOGJs+GJvSDhi6vhipXhiLjhiKvhibXhibHhjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLhiqDhiJ7hiIzhi43hipUg4YiI4Yib4Yiz4Yuo4Ym1IOGLqOGIm+GLqyDhjIjhjLnhipUg4Yyg4Yit4YudIOGIi+GLrSDhi6vhipXhiLjhiKvhibXhibEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IuGKoOGInuGIjOGLjeGKlSDhiIjhiJvhiLPhi6jhibUg4Yqo4Yib4YurIOGMiOGMuSDhjKDhiK3hi50g4YyA4Yid4Yio4YuNIOGLq+GKleGIuOGIq+GJteGJsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLhi6jhibDhiYPhiKvhipIg4YmA4YiI4YidIOGIgeGKkOGJsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IuGLqOGJsOGIu+GIu+GIiCDhipXhjYXhjYXhiK0g4YiB4YqQ4YmzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLhi6jhiYDhiIjhiJ0g4Yql4Yit4Yib4Ym1IOGIgeGKkOGJsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i4Yqg4YuN4Ymz4YioIOGImOGIqOGJpVxu4Yqt4Ym14Ym14YiNIOGIiuGLsOGIqOGMjeGJoOGJtSDhi63hib3hiIvhiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuGNjeGIiOGMiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLhiIg8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4YuI4YuwIOGIi+GLrSDhiqDhipXhiLjhiKvhibXhibXhjaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLhiIg8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4YuI4YuwIOGMjeGIqyDhiqDhipXhiLjhiKvhibXhibXhjaIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCmluZGV4IGMzMWQ2ZDkuLjAwNjAwMDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApAQCAtMjcsMTUgKzI3LDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+Itil2LLYp9mE2Kkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYrdiv2YrYq9ipIjwvc3RyaW5nPgogICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgogICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4i2KrYt9io2YrZgiDYrdiv2YrYqyDZiNin2K3YryI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTA0MDc4NDM1OTc5NDg5MDc0NCI+IiVkINmF2YYg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYrdiv2YrYq9ipIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4i4oCPJWQg2YXZhiDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNit2K/Zitir2KkiPC9pdGVtPgogICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i2YTZitizINmH2YbYp9mDINij2Yog2KrZhtio2YrZh9in2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i2YTZitizINmH2YbYp9mDINij2Yog2KfYtNi52KfYsdin2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+ItmF2LPYqtmF2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4i2KfZhNiq2YbYqNmK2YfYp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+Itin2YTYpdi02LnYp9ix2KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+Itiq2YjYtdmK2YQg2KfZhNi02KfYrdmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4i2KfZhtiu2YHYttiqINi32KfZgtipINin2YTYqNi32KfYsdmK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4i2KfZhNmF2KrYqNmC2Yo6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+Iti02K3ZhiBVU0Ig2LrZitixINmF2LnYqtmF2K8uXG7Yp9iz2KrYrtiv2YUg2KfZhNi02KfYrdmGINin2YTZhdmI2YHYsSDZgdmC2LcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IuKAj9i02K3ZhiBVU0Ig2LrZitixINmF2LnYqtmF2K8uXG7Yp9iz2KrYrtiv2YUg2KfZhNi02KfYrdmGINin2YTZhdmI2YHYsSDZgdmC2LcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+Itin2LPYqtiu2K/Yp9mFINin2YTYqNi32KfYsdmK2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiLYp9mE2KXYudiv2KfYr9in2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgpAQCAtNDMsMjYgKzQzLDI0IEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4i2KfZhNiq2K/ZiNmK2LEg2KfZhNiq2YTZgtin2KbZiiDZhNmE2LTYp9i02KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiLZg9iq2YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+Itiq2YTZgtin2KbZiiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+Itin2YTYqtmG2KjZitmH2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+Itin2YTYpdi02LnYp9ix2KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiLYqtmFINil2YbYtNin2KEg2KfZhNin2KrYtdin2YQg2KjYp9mE2KXZhtiq2LHZhtiqINi52YYg2LfYsdmK2YIg2KfZhNio2YTZiNiq2YjYqy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiLYpdi52K/Yp9ivINij2LPZhNmI2Kgg2KfZhNil2K/Yrtin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiLZhNmI2K3YqSDZhdmB2KfYqtmK2K0g2YHYudmE2YrYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiLZh9mEINiq2LHZitivINin2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INio2KfZhNiv2K7ZiNmEINil2YTZiSDYrNmH2KfYsiBVU0LYnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4i2YfZhCDYqtix2YrYryDYp9mE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDYqNin2YTYr9iu2YjZhCDYpdmE2Ykg2YXZhNit2YIgVVNC2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+ItmH2YQg2KrYsdmK2K8g2YHYqtitIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g2LnZhtivINiq2YjYtdmK2YQg2KzZh9in2LIgVVNCINmH2LDYp9ifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLZh9mEINiq2LHZitivINmB2KrYrSA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+INi52YbYryDYqtmI2LXZitmEINmF2YTYrdmCIFVTQiDZh9iw2KfYnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+ItmE2Kcg2YrYudmF2YQg2KPZiiDYqti32KjZitmCINmF2KvYqNiqINmF2Lkg2YXZhNit2YIgVUVCINmH2LDYpy4g2YXYstmK2K8g2YXZhiDYp9mE2YXYudmE2YjZhdin2Kog2LnZhiDZh9iw2Kcg2KfZhNmF2YTYrdmCINi52YTZiSA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+ItmF2YTYrdmCIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiLigI/Zh9mEINiq2LHZitivINin2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INio2KfZhNiv2K7ZiNmEINil2YTZiSDYrNmH2KfYsiBVU0LYnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4i4oCP2YfZhCDYqtix2YrYryDYp9mE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDYqNin2YTYr9iu2YjZhCDYpdmE2Ykg2YXZhNit2YIgVVNC2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IuKAj9mH2YQg2KrYsdmK2K8g2YHYqtitIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g2LnZhtivINiq2YjYtdmK2YQg2KzZh9in2LIgVVNCINmH2LDYp9ifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLigI/Zh9mEINiq2LHZitivINmB2KrYrSA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+INi52YbYryDYqtmI2LXZitmEINmF2YTYrdmCIFVTQiDZh9iw2KfYnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IuKAj9mE2Kcg2YrYudmF2YQg2KPZiiDYqti32KjZitmCINmF2KvYqNiqINmF2Lkg2YXZhNit2YIgVUVCINmH2LDYpy4g2YXYstmK2K8g2YXZhiDYp9mE2YXYudmE2YjZhdin2Kog2LnZhiDZh9iw2Kcg2KfZhNmF2YTYrdmCINi52YTZiSA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IuKAj9mF2YTYrdmCIFVTQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4i2LnYsdi2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4i2KfZhNin2LPYqtiu2K/Yp9mFINio2LTZg9mEINin2YHYqtix2KfYttmKINmE2KzZh9in2LIgVVNCINmH2LDYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+Itin2YTYp9iz2KrYrtiv2KfZhSDYqNi02YPZhCDYp9mB2KrYsdin2LbZiiDZhNmF2YTYrdmCIFVTQiDZh9iw2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+ItmH2YQg2KrYsdmK2K8g2KfZhNiz2YXYp9itINio2KrYtdit2YrYrSDYo9iu2LfYp9ihIFVTQtifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+Itin2YTZhdmE2YEg2KfZhNmF2LHYrNi52Yog2KfZhNix2KbZitiz2Yog2YTZgCBSU0Eg2YHZiiDZh9iw2Kcg2KfZhNmD2YXYqNmK2YjYqtixINmH2Yg6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4i4oCP2KfZhNin2LPYqtiu2K/Yp9mFINio2LTZg9mEINin2YHYqtix2KfYttmKINmE2KzZh9in2LIgVVNCINmH2LDYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IuKAj9in2YTYp9iz2KrYrtiv2KfZhSDYqNi02YPZhCDYp9mB2KrYsdin2LbZiiDZhNmF2YTYrdmCIFVTQiDZh9iw2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IuKAj9mH2YQg2KrYsdmK2K8g2KfZhNiz2YXYp9itINio2KrYtdit2YrYrSDYo9iu2LfYp9ihIFVTQtifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+IuKAj9in2YTZhdmE2YEg2KfZhNmF2LHYrNi52Yog2KfZhNix2KbZitiz2Yog2YTZgCBSU0Eg2YHZiiDZh9iw2Kcg2KfZhNmD2YXYqNmK2YjYqtixINmH2Yg6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLYp9mE2LPZhdin2K0g2K/Yp9im2YXZi9inINmF2YYg2YfYsNinINin2YTZg9mF2KjZitmI2KrYsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Itiq2YPYqNmK2LEv2KrYtdi62YrYsSDZhNmF2YTYoSDYp9mE2LTYp9i02KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i2KrZiNiz2YrYuSDYqNmF2YTYoSDYp9mE2LTYp9i02KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLYqtmD2KjZitixL9iq2LXYutmK2LEg2KfZhNiq2YjYp9mB2YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i2LnZhtivINiq2LXZhdmK2YUg2KrYt9io2YrZgiDZhNi02KfYtNipINij2LXYutix2Iwg2LPZiti42YfYsSDYudmG2LXYsSDYqtit2YPZhSDZgdmKINin2YTYqtmD2KjZitixL9in2YTYqti12LrZitixINio2KzZiNin2LEg2KfZhNiz2KfYudipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLYrNin2LHZjSDYrdmB2Lgg2YTZgti32Kkg2KfZhNi02KfYtNipLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i2KzYp9ix2Y0g2K3Zgdi4INmE2YLYt9ipINin2YTYtNin2LTYqS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i2YrYqtmFINit2YHYuCDZhNmC2LfYqS4iPC9zdHJpbmc+CkBAIC03MCwxNCArNjgsMTYgQEAKICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLYp9mE2YXYsyDZhNi52LHYtiDZhNmC2LfYqSDYp9mE2LTYp9i02KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLYqti52LDYsSDYp9mE2KrZgtin2Lcg2YTZgti32Kkg2KfZhNi02KfYtNipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4i2KrYudiw2LEg2K3Zgdi4INmE2YLYt9ipINin2YTYtNin2LTYqS4g2YLYryDZitmD2YjZhiDYp9mE2KrYrtiy2YrZhiDZgtmK2K8g2KfZhNin2LPYqtiu2K/Yp9mFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+Itiu2YrYp9ix2KfYqiDZhtmC2YQg2KfZhNmF2YTZgdin2Kog2LnYqNixIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+Itiq2K3ZhdmK2YQg2YPZhdi02LrZhCDZiNiz2KfYpti3IChNVFApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i2KrYrdmF2YrZhCDZg9mD2KfZhdmK2LHYpyAoUFRQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4i2KrYq9io2YrYqiDYqti32KjZitmCIEFuZHJvaWQgRmlsZSBUcmFuc2ZlciDZhNmAIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IuKAj9iu2YrYp9ix2KfYqiDZhtmC2YQg2KfZhNmF2YTZgdin2Kog2LnYqNixIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IuKAj9iq2K3ZhdmK2YQg2YPZhdi02LrZhCDZiNiz2KfYpti3IChNVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i4oCP2KrYrdmF2YrZhCDZg9mD2KfZhdmK2LHYpyAoUFRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4i4oCP2KrYq9io2YrYqiDYqti32KjZitmCIEFuZHJvaWQgRmlsZSBUcmFuc2ZlciDZhNmAIE1hYyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+Itix2KzZiNi5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+Itin2YTYsdim2YrYs9mK2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLYp9mE2YLYp9im2YXYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+Itin2YTYqti32KjZitmC2KfYqiDYp9mE2K3Yr9mK2KvYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+Itio2K3YqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLYp9mE2YPYp9mF2YrYsdinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLYstixINiq2KjYr9mK2YQg2LfYsdmK2YLYqSDYp9mE2KXYr9iu2KfZhC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i2LLYsSDYqtmD2KjZitixL9iq2LXYutmK2LEg2YTZhNiq2YjYp9mB2YIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLYp9iz2KrYrtiv2KfZhSDYp9mE2KrZg9io2YrYsS/Yp9mE2KrYtdi62YrYsSDZhNiq2K3ZiNmK2YQg2LTYp9i02Kkg2LXYutmK2LHYqSDYpdmE2Ykg2LTYp9i02Kkg2KPZg9io2LEiPC9zdHJpbmc+CkBAIC05OCwxNyArOTgsMTcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiLYpdi02KfYsdipINin2YTYqNmK2KfZhtin2Kog2KrYqtmD2YjZhiDZhdmGINi02LHZiti32YrZhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiLYpdi02KfYsdipINin2YTYqNmK2KfZhtin2Kog2KrYqtmD2YjZhiDZhdmGINir2YTYp9ir2Kkg2KPYtNix2LfYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i2KXYtNin2LHYqSDYp9mE2KjZitin2YbYp9iqINmD2KfZhdmE2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiLYqtmFINil2YrZgtin2YEgV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+Itiq2YUg2YLYt9i5INin2KrYtdin2YQgV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4i2KXYtNin2LHYqSBXaS1GaSDYqtiq2YPZiNmGINmF2YYg2LTYsdmK2Lcg2YjYp9it2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+Itil2LTYp9ix2KkgV2ktRmkg2KrYqtmD2YjZhiDZhdmGINi02LHZiti32YrZhi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiLYpdi02KfYsdipIFdpLUZpINiq2KrZg9mI2YYg2YXZhiDYq9mE2KfYq9ipINij2LTYsdi32KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+Itil2LTYp9ix2KkgV2ktRmkg2YPYp9mF2YTYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+ItmE2YrYsyDZh9mG2KfZgyBXaU1BWC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X29uZV9iYXIiIG1zZ2lkPSI0MTcwOTk0Mjk5MDExODYzNjQ4Ij4i2LTYsdmK2LcgV2lNQVgg2YjYp9it2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiLYtNix2YrYt9inIFdpTUFYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiLYo9i02LHYt9ipIFdpTUFYINin2YTYq9mE2KfYq9ipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4i2KXYtNin2LHYqSBXaU1BWCDZg9in2YXZhNipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4i4oCP2KrZhSDYpdmK2YLYp9mBIFdpLUZpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2lmaSIgbXNnaWQ9IjE0MjU0NzY1NTE4Mjc5MjQ0NzQiPiLigI/YqtmFINmC2LfYuSDYp9iq2LXYp9mEIFdpLUZpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vbmVfYmFyIiBtc2dpZD0iNzczNTg5MzE3ODAxMDcyNDM3NyI+IuKAj9il2LTYp9ix2KkgV2ktRmkg2KrYqtmD2YjZhiDZhdmGINi02LHZiti3INmI2KfYrdivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiLigI/Ypdi02KfYsdipIFdpLUZpINiq2KrZg9mI2YYg2YXZhiDYtNix2YrYt9mK2YYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4i4oCP2KXYtNin2LHYqSBXaS1GaSDYqtiq2YPZiNmGINmF2YYg2KvZhNin2KvYqSDYo9i02LHYt9ipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiLigI/Ypdi02KfYsdipIFdpLUZpINmD2KfZhdmE2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiLigI/ZhNmK2LMg2YfZhtin2YMgV2lNQVguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IuKAj9i02LHZiti3IFdpTUFYINmI2KfYrdivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4i4oCP2LTYsdmK2LfYpyBXaU1BWC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4i4oCP2KPYtNix2LfYqSBXaU1BWCDYp9mE2KvZhNin2KvYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IuKAj9il2LTYp9ix2KkgV2lNQVgg2YPYp9mF2YTYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiLZhNmK2LPYqiDZh9mG2KfZgyDYpdi02KfYsdipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjYzOTUzMjYyNzYyMTM0MDI4ODMiPiLYutmK2LEg2YXYqti12YQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4i2YTZitiz2Kog2YfZhtin2YMg2KPYtNix2LfYqS4iPC9zdHJpbmc+CkBAIC0xMjMsMjIgKzEyMywyMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIx4oCOIFjigI4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiLYtNio2YPYqSDYp9mE2KzZitmEINin2YTYq9in2YTYqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4i2LTYqNmD2KkgMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4i4oCP2LTYqNmD2KkgMy41RyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+Iti02KjZg9ipINin2YTYrNmK2YQg2KfZhNix2KfYqNi5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i2KrYrNmI2KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2VkZ2UiIG1zZ2lkPSI0NDc3NDU3MDUxNjMxOTc5Mjc4Ij4iRWRnZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiLZhNmK2LPYqiDZh9mG2KfZgyDYqNi32KfZgtipIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiLigI/ZhNmK2LPYqiDZh9mG2KfZgyDYqNi32KfZgtipIFNJTS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4i2LHYqNi3INin2YTYqNmE2YjYqtmI2KsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4i2YjYtti5INin2YTYt9in2KbYsdipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiLZhdiz2KrZiNmJINin2YTYqNi32KfYsdmK2KkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INmB2Yog2KfZhNmF2KfYptipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4i2KXYudiv2KfYr9in2Kog2KfZhNmG2LjYp9mFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4i2KfZhNil2LTYudin2LHYp9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLZhdit2Ygg2KfZhNil2LTYudin2LEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiLYqtmFINiq2YXZg9mK2YYgR1BTLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiLYp9mE2K3YtdmI2YQg2LnZhNmJIEdQUy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IuKAj9iq2YUg2KrZhdmD2YrZhiBHUFMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IuKAj9in2YTYrdi12YjZhCDYudmE2YkgR1BTLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4i2KrZhSDYqtmF2YPZitmGINin2YTZhdio2LHZgtipINin2YTZg9in2KrYqNipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLYsdmG2YrZhiDZhdi5INin2YTYp9mH2KrYstin2LIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+Itix2YbZitmGINi12KfZhdiqLiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+Itin2YTYqNi32KfYsdmK2KkgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLZiNi22Lkg2KfZhNi32KfYptix2KkgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i2KfZhNio2YTZiNiq2YjYqyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+Itit2KfZhNipINin2YTZhdmI2YLYuTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLYqtmFINi22KjYtyDYp9mE2YXZhtio2Ycg2LnZhNmJIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i2KrZhSDYqti52LfZitmEINio2YrYp9mG2KfYqiDYtNio2YPYp9iqINin2YTYrNmK2YQg2KfZhNir2KfZhtmKINmI2KfZhNis2YrZhCDYp9mE2KvYp9mE2KsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLYqtmFINiq2LnYt9mK2YQg2KjZitin2YbYp9iqINi02KjZg9ipINin2YTYrNmK2YQg2KfZhNix2KfYqNi5Ijwvc3RyaW5nPgpAQCAtMTYxLDE1ICsxNjIsMTYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+ItmE2YLYryDZiNi12YTYqiDYpdmE2Ykg2K3YryDYp9iz2KrYrtiv2KfZhSDYp9mE2KjZitin2YbYp9iqINin2YTZhdit2K/Yry4gXG4gXG4g2KXYsNinINij2LnYr9iqINiq2YXZg9mK2YYg2KfZhNio2YrYp9mG2KfYqiDYjCDZgdmC2K8g2YrYqtmFINiq2K3YtdmK2YQg2LHYs9mI2YUg2YXZhtmDINmF2YYg2YLYqNmEINmF2LTYutmEINi02KjZg9ipINin2YTYrNmI2KfZhC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4i2KXYudin2K/YqSDYqtmF2YPZitmGINin2YTYqNmK2KfZhtin2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4i2YTYpyDZitmI2KzYryDYp9iq2LXYp9mEINil2YbYqtix2YbYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpINmF2KrYtdmEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLYrNin2LHZjSDYp9mE2KjYrdirINi52YYgR1BTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+Itiq2YUg2KrYudmK2YrZhiDYp9mE2YXZiNmC2Lkg2KjZiNin2LPYt9ipIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IuKAj1dpLUZpINmF2KrYtdmEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLigI/YrNin2LHZjSDYp9mE2KjYrdirINi52YYgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IuKAj9iq2YUg2KrYudmK2YrZhiDYp9mE2YXZiNmC2Lkg2KjZiNin2LPYt9ipIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+Iti32YTYqNin2Kog2KfZhNmF2YjZgti5INmG2LTYt9ipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i2YXYrdmIINis2YXZiti5INin2YTYpdi02LnYp9ix2KfYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i2YXYudmE2YjZhdin2Kog2KfZhNiq2LfYqNmK2YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+Itiz2YrYqtmFINiq2K/ZiNmK2LEg2KfZhNi02KfYtNipINiq2YTZgtin2KbZitmL2KcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLYqtmFINiq2KPZhdmK2YYg2KfZhNi02KfYtNipINmB2Yog2KfZhNin2KrYrNin2Ycg2KfZhNij2YHZgtmKLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLYqtmFINiq2KPZhdmK2YYg2KfZhNi02KfYtNipINmB2Yog2KfZhNin2KrYrNin2Ycg2KfZhNi52YXZiNiv2YouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+Itit2KfZhNipINin2YTYrdmE2YjZitin2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i2K3ZhNmFINin2YTZitmC2LjYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLZiNi22Lkg2KfZhNi32KfYptix2KkiPC9zdHJpbmc+CkBAIC0xODEsNiArMTgzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i2KfZhNiz2LfZiNi5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLYqtiv2YjZitixINiq2YTZgtin2KbZiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLYqtmFINmC2YHZhCDYp9mE2KrYr9mI2YrYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiLYqtmFINin2YTZgtmB2YQg2LnZhNmJINin2YTZiNi22Lkg2KfZhNi52YXZiNiv2YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+Itiq2YUg2KfZhNmC2YHZhCDYudmE2Ykg2KfZhNmI2LbYuSDYp9mE2KPZgdmC2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i2KPYs9mE2YjYqCDYp9mE2KXYr9iu2KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Itin2YTZhdmI2YLYuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLYp9mE2YXZiNmC2Lkg2YLZitivINin2YTYpdmK2YLYp9mBIjwvc3RyaW5nPgpAQCAtMTkzLDEzICsxOTcsMTUgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i2YTZitiz2Kog2YXYqti12YTYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLZhNinINiq2KrZiNmB2LEg2LTYqNmD2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiLYpdmK2YLYp9mBIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+Iti52LHYtiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+Iti52LHYtiDYtNin2LTYqSDZhNin2LPZhNmD2YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiLigI/YpdmK2YLYp9mBIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+Itio2Ksg2KfZhNi02KfYtNipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i2KfZhNiz2LfZiNi5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+Itiq2YTZgtin2KbZiiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLYqti42YfYsSDYp9mE2KXYtNi52KfYsdin2Kog2YfZhtinIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i2YrZhdmD2YbZgyDYp9mE2K/YrtmI2YQg2KXZhNmK2YfYpyDZgdmKINij2Yog2YjZgtiqINio2KfZhNiq2YXYsdmK2LEg2KfZhNiz2LHZiti5INil2YTZiSDYo9iz2YHZhC5cbtmK2YXZg9mG2YMg2KfZhNiq2YXYsdmK2LEg2KfZhNiz2LHZiti5INil2YTZiSDYo9iz2YHZhCDZhdix2Kkg2KPYrtix2Ykg2YTZhNmI2LXZiNmEINil2YTZiSDYudmG2KfYtdixINiq2K3Zg9mFINin2YTZhti42KfZhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLZhdix2LEg2LPYsdmK2LnZi9inINmE2K3Yp9mB2Kkg2KfZhNi02KfYtNipINmE2KXYuNmH2KfYsSDYp9mE2LTYsdmK2LciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+ItmF2LHYsSDYs9ix2YrYudmL2Kcg2YXZhiDYrdin2YHYqSDYp9mE2LTYp9i02Kkg2YTYpdi42YfYp9ixINi02LHZiti3INin2YTZhti42KfZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLZiNi22Lkg2KfZhti52YPYp9izINin2YTZhNmI2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLZiNi22Lkg2KfZhNiq2KjYp9mK2YYg2KfZhNmF2K3Ys9mGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLZiNi22Lkg2KrYtdit2YrYrSDYp9mE2KPZhNmI2KfZhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i2YLYryDYqtmD2YjZhiDYp9mE2LTYqNmD2Klcbtiu2KfYtti52Kkg2YTZhNix2YLYp9io2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Itio2K3YqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLYqtmF2LHZitixINmE2KPYudmE2Ykg2YTZgCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i2KrZhdix2YrYsSDZhNmE2YrYs9in2LEg2YTZgCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6LWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6LWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViNjk3OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXotbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4iSGF6xLFyZGEgZWtyYW4gbGFuZMWfYWZ0IG9yaWVudGFzaXlhc8SxbmRhIGtpbGlkbMmZbmliLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hei1yQVotbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXotckFaLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViNjk3OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXotckFaLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IkhhesSxcmRhIGVrcmFuIGxhbmTFn2FmdCBvcmllbnRhc2l5YXPEsW5kYSBraWxpZGzJmW5pYi4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2NWVlZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjA2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4iU2lzdGVtaW4gxLBzdGlmYWTJmSDEsG50ZXJmZXlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiJUyZltaXpsyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiJTaXlhaMSxZGFuIHNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiJUyZl0YmlxIGluZm9zdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4iWWVuaSB0yZl0YmlxIHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4iU29uIHTJmXRiaXFsyZlyaSBryZluYXJsYcWfZMSxciI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEgc29uIHTJmXRiaXEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCBzb24gdMmZdGJpcSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiJCaWxkaXJpxZ8geW94ZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+IkRhdmFtIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4iQmlsZGlyacWfbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+IkFkYXB0ZXJpIHFvxZ91biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IkJhdGFyZXlhIGF6YWzEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4gcWFsxLFiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IlVTQiBpbMmZIGVsZWt0cmlrIGRvbGR1cm1hIGTJmXN0yZlrbMmZbm1pci5cbllhbG7EsXogYWRhcHRlciBpc3RpZmFkyZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4iQmF0YXJleWEgaXN0aWZhZMmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiJBeWFybGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0ODc5ODc5Njk4NTAwOTU1MzAwIj4iVMmZeXlhcsmZIHJlamltaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiJFa3JhbsSxbiBhdnRvLWTDtm7DvMWfw7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiJTVVNEVVIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IkFWVE8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiJCaWxkaXJpxZ9syZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aCB0ZXplcmlucSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IkRheGlsZXRtyZkgbWV0b2RsYXLEsW7EsSBheWFybGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4iRml6aWtpIGtsYXZpYXR1cmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiB0yZl0YmlxaW7JmSBVU0IgY2loYXrEsW5hIGRheGlsIG9sbWHEn2EgaWNhesmZIHZlcmlsc2luPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiB0yZl0YmlxaW7JmSBVU0IgYWtzZXN1YXLEsW5hIHFvxZ91bG1hxJ9hIGljYXrJmSB2ZXJpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4iVVNCIGNpaGF6IHFvxZ91bHUgb2xhbiB6YW1hbiA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IGHDp8SxbHPEsW4gbcSxPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4iVVNCIGFrc2VzdWFyIHFvxZ91bHUgb2xhbiB6YW1hbiA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IGHDp8SxbHPEsW4gbcSxPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+Ikhlw6cgYmlyIHF1cmHFn2TEsXLEsWxtxLHFnyB0yZl0YmlxIGJ1IFVTQiBha3Nlc3VhciBpbMmZIGnFn2zJmW1pci4gQnUgYWtzZXN1YXIgaGFxccSxbmRhIGRhaGEgyZl0cmFmbMSxIG3JmWx1bWF0xLEgPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4gYWRyZXNpbmTJmW4gw7Z5csmZbmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJVU0IgYWtzZXN1YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+IkfDtnN0yZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4iQnUgVVNCIGNpaGF6IMO8w6fDvG4gZGVmb2x0IG9sYXJhcSBpc3RpZmFkyZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiJCdSBVU0IgYWtzZXN1YXIgw7zDp8O8biBkZWZvbHQgaXN0aWZhZMmZIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IlVTQiBzYXpsYW1heWEgaWNhesmZIHZlcmlsc2luPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiJLb21ww7x0ZXJpbiBSU0EgYmFybWFxIGl6aTogXG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJCdSBrb21ww7x0ZXJkyZluIGjJmW1pxZ/JmSBpY2F6yZkgdmVyaWxzaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJFa3JhbsSxIGRvbGR1cm1hcSDDvMOnw7xuIHlheMSxbmxhxZ9kxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IkVrcmFuxLEgZG9sZHVybWFxIMO8w6fDvG4gdXphdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTa3JpbsWfb3QgeWFkZGEgc2F4bGFuxLFsxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU2tyaW7Fn290IHlhZGRhIHNheGxhbsSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iU2tyaW7Fn290IHlhZGRhIHNheGxhbsSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IlNrcmluxZ9vdCDDp8mZa2lsZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IlNrcmluxZ9vdHVudXphIGJheG1hcSDDvMOnw7xuIHRveHVudW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+IlNrcmluxZ9vdCBnw7Z0w7xyw7xsyZkgYmlsaW5tyZlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IlNrcmluxZ9vdHUgeWFkZGEgc2F4bGFtYXEgYWzEsW5tYWTEsSwgecmZcWluIHlhZGRhxZ8gaXN0aWZhZMmZIG9sdW51ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJVU0IgZmF5bCB0cmFuc2Zlcmkgc2XDp2ltbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiJNZWRpYSBwbGV5ZXIgKE1UUCkga2ltaSBtb250YWogZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+IkthbWVyYSBraW1pIGJpcmzJmcWfZGlyIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiJNYWMgw7zDp8O8biBBbmRyb2lkIEZpbGUgVHJhbnNmZXIgdMmZdGJpcWluaSBxdXJhxZ9kxLFyxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4iR2VyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJBbmEgc8mZaGlmyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW55dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IlNvbiB0yZl0YmlxbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iRGF4aWxldG3JmSBtZXRvZHUgZMO8eW3JmXNpbsmZIGtlw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iVXnEn3VubHVxIHpvb20gZMO8eW3JmXNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iRGFoYSBiw7Z5w7xrIGVrcmFuZGEgdXphcWxhxZ9kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiJCbHVldG9vdGggcW/Fn3VsdWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IkJsdWV0b290aCDJmWxhccmZc2kga8mZc2lsZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4iQmF0YXJleWEgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IkJhdGFyZXlhIGJpciB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiJCYXRhcmV5YSBpa2kgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiJCYXRhcmV5YSDDvMOnIHjJmXRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4iQmF0YXJleWEgZG9sdWR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4iVGVsZWZvbiB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9vbmVfYmFyIiBtc2dpZD0iNjg3Njk5Mjc4MTMyNjY0MTE1Ij4ixZ7JmWLJmWvJmSBiaXIgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IsWeyZliyZlryZkgaWtpIHjJmXRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90aHJlZV9iYXJzIiBtc2dpZD0iODUyMTkwNDg0MzkxOTk3MTg4NSI+IsWeyZliyZlryZkgw7zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4iVGFtIMWfyZliyZlryZkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+Ik3JmWx1bWF0IHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiJEYXRhIGJpciB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiJEYXRhIGlraSB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IkRhdGEgw7zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiJEYXRhIHNpcW5hbMSxIHRhbWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiJXaWZpIHPDtm7DvGzDvGTDvHIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IldpZmkgYmHEn2xhbnTEsSBryZlzaWxkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaWZpIGJpciB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiJXaWZpIGlraSB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IldpZmkgw7zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiJXaWZpIHNpcW5hbMSxIHRhbWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiJXaU1BWCB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIGJpciB4yZl0dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYIGlraSB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWCDDvMOnIHjJmXRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiJXaU1BWCBzaXFuYWzEsSB0YW1kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+IlNpcW5hbCB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+IlFvxZ91bHUgZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4iU8SxZsSxciB4yZl0dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4iQmlyIHjJmXR0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4ixLBraSB4yZl0dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4iw5zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4iU2lxbmFsIHRhbWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IkFrdGl2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4iRGVha3RpdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19jb25uZWN0ZWQiIG1zZ2lkPSI4MzY2MjU2NjkzNzE5NDk5NjY1Ij4iUW/Fn3VsdWR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiJSb3VtaW5xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IlNJTSB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4iQmx1ZXRvb3RoIHRlemVyaW5nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+IlXDp3XFnyByZWppbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4iQmF0YXJleWEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZhaXpkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiJTaXN0ZW0gcGFyYW1ldHJsyZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4iQmlsZGlyacWfbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlbW92ZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIzNjAzMDk5NTE0OTAyMTgyMzUwIj4iQmlsZGlyacWfaSB0yZltaXpsyZkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMgYWt0aXZkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IkdQUyDJmWxkyZkgZWRpbGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4iVGVsZVR5cGV3cml0ZXIgYWt0aXZsyZnFn2RpcmlsaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IlrJmW5nIHZpYnJhc2l5YXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJayZluZ3Z1cmFuIHPJmXNzaXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDDp8SxeGFyxLFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IkJpbGRpcmnFnyB1emFxbGHFn2TEsXLEsWxkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiJCaWxkaXJpxZ8ga8O2bGfJmXNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiJUZXogYXlhcmxhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4iQXjEsXLEsW5jxLEgdMmZdGJpcWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IsSwc3RpZmFkyZnDp2kgPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+Ik1vYmlsIDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0YXJleWEgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJUyZl5eWFyyZkgUmVqaW1pIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4gw7zDp8O8biBxdXJ1bHViLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLTNHIGRhdGEgcWV5cmktYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyBkYXRhIGRlYWt0aXYgZWRpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+Ik1vYmlsIGRhdGEgcWV5cmktYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiJEYXRhIHFleXJpLWFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4iR8O2c3TJmXJpbG1pxZ8gZGF0YSBpc3RpZmFkyZkgbGltaXRpbsmZIMOnYXRkxLFuxLF6LlxuXG7Gj2fJmXIgZGF0YW7EsSB5ZW5pZMmZbiBha3RpdmzJmcWfZGlyc8mZbml6LCBvcGVyYXRvciB0yZlyyZlmaW5kyZluIMmZbGF2yZkgdGFyaWZsyZlyIHTJmXRiaXEgb2x1bmEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiJEYXRhbsSxIHllbmlkyZluIGFrdGl2IGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IsSwbnRlcm5ldCBiYcSfbGFudMSxc8SxIHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIHFvxZ91bHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJHUFMgQXh0YXLEscWfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iWWVyIEdQUyB0yZlyyZlmaW5kyZluIG3DvMmZeXnJmW4gZWRpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iTcmZa2FuIHNvcsSfdWxhcsSxIGFyeGl2aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IkLDvHTDvG4gYmlsZGlyacWfbMmZcmkgc2lsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJUyZl0YmlxIGluZm9zdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iRWtyYW4gYXZ0b21hdGlrIGTDtm5kyZlyaWzJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJFa3JhbiBsYW5kxZ9hZnQgb3JpZW50YXNpeWFzxLFuZGEga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkVrcmFuIHBvcnRyZXQgb3JpZW50YXNpeWFzxLFuZGEga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IljJmXlhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJVw6d1xZ8gcmVqaW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IkRvbHVyLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IkRvbHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IkJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IkJsdWV0b290aCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IENpaGF6KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4iQmx1ZXRvb3RoIGJhxJ9sxLFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJQYXJsYXFsxLFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdnRvZsSxcmxhbm1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IkbEsXJsYXRtYSBraWxpZGxpZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IkRheGlsZXRtyZkgbWV0b2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iWWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IlllciBEZWFrdGl2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+Ik1lZGlhIGNpaGF6xLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IllhbG7EsXogZsO2dnHJmWxhZMmZIHrJmW5nbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+Ik5pemFtbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdGltZV9sYWJlbCIgbXNnaWQ9IjQ2MzU5NjkxODIyMzk3MzY0MDgiPiJWYXh0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl9sYWJlbCIgbXNnaWQ9IjUyMzg5OTU2MzIxMzA4OTc4NDAiPiJNyZluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9sYWJlbCIgbXNnaWQ9IjkxMzUzNDQ3MDQ4OTk1NDYwNDEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJCYcSfbGFudMSxIHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLFnsmZYsmZa8mZIHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIHPDtm7DvGzDvGTDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmkgRWtyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJTaW1zaXogRWtyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJQYXJsYXFsxLFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFWVE8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iNTg0ODQwMjEyNzQ1NTAyMTcxNCI+IsWeyZliyZlryZkgbW9uaXRvciBlZGlsyZkgYmlsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9idXR0b24iIG1zZ2lkPSIxNzU5Mzg3MTgxNzY2NjAzMzYxIj4iSGF6xLFyZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X2RpYWxvZ190aXRsZSIgbXNnaWQ9IjEyNzM3OTY5NjcwOTIwMjcyOTEiPiLFnsmZYsmZa8mZIE1vbml0b3JpbnFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfaW5mb19tZXNzYWdlIiBtc2dpZD0iNTQzMDMyMDUzOTU1NTM1ODQ1MiI+IkJ1IGNpaGF6IDx4bGlmZjpnIGlkPSJNQU5BR0lOR19ET01BSU4iPiVzPC94bGlmZjpnPiB0yZlyyZlmaW5kyZluIGlkYXLJmSBlZGlsaXIgLiBcbiBcbiBTaXppbiBhZG1pbmlzdHJhdG9yIMWfyZliyZlryZkgZsmZYWxpeXnJmXRpbml6aW4sIGjJmW3Dp2luaW4gZS1wb8OndCwgdMmZdGJpcWzJmXIgdsmZIHTJmWhsw7xryZlzaXogdmViIHNheXRsYXLEsW7EsXrEsW4gbW9uaXRvcmlucWluaSBldG3JmXnJmSBxYWRpcmRpci4gXG4gXG4gxo90cmFmbMSxIG3JmWx1bWF0IMO8w6fDvG4gYWRtaW5pc3RyYXRvciBpbMmZIMmZbGFxyZkgc2F4bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmdfbWVzc2FnZSIgbXNnaWQ9IjIwMzMwOTE2NTYxMjk5NjM2NjkiPiLDnMOnw7xuY8O8IHTJmXLJmWYgXG4gxZ/JmWLJmWvJmSBmyZlhbGl5ecmZdGluaXppbiwgaMmZbcOnaW5pbiBlLXBvw6d0LCB0yZl0YmlxbMmZciB2yZkgdMmZaGzDvGvJmXNpeiB2ZWIgc2F5dGxhcsSxbsSxesSxbiBtb25pdG9yaW5xaW5pIGV0bcmZecmZIHFhZGlyZGlyLiAuIFxuIFxuQ2loYW56xLFuxLF6YSB5w7xrbMmZbm1pxZ8gZXRpYmFybMSxIGV0aW1hZCBidW51IG3DvG1rw7xuIGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk0Njk1Njk3NzM3NzE2NjcwOSI+IkV0aWJhcmzEsSBldGltYWRsYXLEsSB5b3hsYXnEsW4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDhhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjA4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4iU2lzdGVtaW4gxLBzdGlmYWTJmSDEsG50ZXJmZXlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiJUyZltaXpsyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiJTaXlhaMSxZGFuIHNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiJUyZl0YmlxIGluZm9zdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4iWWVuaSB0yZl0YmlxIHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4iU29uIHTJmXRiaXFsyZlyaSBryZluYXJsYcWfZMSxciI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEgc29uIHTJmXRiaXEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCBzb24gdMmZdGJpcSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiJCaWxkaXJpxZ8geW94ZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+IkRhdmFtIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4iQmlsZGlyacWfbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+IkFkYXB0ZXJpIHFvxZ91biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IkJhdGFyZXlhIGF6YWzEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4gcWFsxLFiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IlVTQiBpbMmZIGVsZWt0cmlrIGRvbGR1cm1hIGTJmXN0yZlrbMmZbm1pci5cbllhbG7EsXogYWRhcHRlciBpc3RpZmFkyZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4iQmF0YXJleWEgaXN0aWZhZMmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiJBeWFybGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0ODc5ODc5Njk4NTAwOTU1MzAwIj4iVMmZeXlhcsmZIHJlamltaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiJFa3JhbsSxbiBhdnRvLWTDtm7DvMWfw7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiJTVVNEVVIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IkFWVE8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiJCaWxkaXJpxZ9syZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aCB0ZXplcmlucSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IkRheGlsZXRtyZkgbWV0b2RsYXLEsW7EsSBheWFybGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4iRml6aWtpIGtsYXZpYXR1cmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiB0yZl0YmlxaW7JmSBVU0IgY2loYXrEsW5hIGRheGlsIG9sbWHEn2EgaWNhesmZIHZlcmlsc2luPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiB0yZl0YmlxaW7JmSBVU0IgYWtzZXN1YXLEsW5hIHFvxZ91bG1hxJ9hIGljYXrJmSB2ZXJpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4iVVNCIGNpaGF6IHFvxZ91bHUgb2xhbiB6YW1hbiA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IGHDp8SxbHPEsW4gbcSxPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4iVVNCIGFrc2VzdWFyIHFvxZ91bHUgb2xhbiB6YW1hbiA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IGHDp8SxbHPEsW4gbcSxPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+Ikhlw6cgYmlyIHF1cmHFn2TEsXLEsWxtxLHFnyB0yZl0YmlxIGJ1IFVTQiBha3Nlc3VhciBpbMmZIGnFn2zJmW1pci4gQnUgYWtzZXN1YXIgaGFxccSxbmRhIGRhaGEgyZl0cmFmbMSxIG3JmWx1bWF0xLEgPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4gYWRyZXNpbmTJmW4gw7Z5csmZbmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJVU0IgYWtzZXN1YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+IkfDtnN0yZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4iQnUgVVNCIGNpaGF6IMO8w6fDvG4gZGVmb2x0IG9sYXJhcSBpc3RpZmFkyZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiJCdSBVU0IgYWtzZXN1YXIgw7zDp8O8biBkZWZvbHQgaXN0aWZhZMmZIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IlVTQiBzYXpsYW1heWEgaWNhesmZIHZlcmlsc2luPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiJLb21ww7x0ZXJpbiBSU0EgYmFybWFxIGl6aTogXG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJCdSBrb21ww7x0ZXJkyZluIGjJmW1pxZ/JmSBpY2F6yZkgdmVyaWxzaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJFa3JhbsSxIGRvbGR1cm1hcSDDvMOnw7xuIHlheMSxbmxhxZ9kxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IkVrcmFuxLEgZG9sZHVybWFxIMO8w6fDvG4gdXphdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTa3JpbsWfb3QgeWFkZGEgc2F4bGFuxLFsxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU2tyaW7Fn290IHlhZGRhIHNheGxhbsSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iU2tyaW7Fn290IHlhZGRhIHNheGxhbsSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IlNrcmluxZ9vdCDDp8mZa2lsZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IlNrcmluxZ9vdHVudXphIGJheG1hcSDDvMOnw7xuIHRveHVudW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+IlNrcmluxZ9vdCBnw7Z0w7xyw7xsyZkgYmlsaW5tyZlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IlNrcmluxZ9vdHUgeWFkZGEgc2F4bGFtYXEgYWzEsW5tYWTEsSwgecmZcWluIHlhZGRhxZ8gaXN0aWZhZMmZIG9sdW51ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJVU0IgZmF5bCB0cmFuc2Zlcmkgc2XDp2ltbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiJNZWRpYSBwbGV5ZXIgKE1UUCkga2ltaSBtb250YWogZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+IkthbWVyYSBraW1pIGJpcmzJmcWfZGlyIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiJNYWMgw7zDp8O8biBBbmRyb2lkIEZpbGUgVHJhbnNmZXIgdMmZdGJpcWluaSBxdXJhxZ9kxLFyxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4iR2VyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJBbmEgc8mZaGlmyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW55dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IlNvbiB0yZl0YmlxbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iRGF4aWxldG3JmSBtZXRvZHUgZMO8eW3JmXNpbsmZIGtlw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iVXnEn3VubHVxIHpvb20gZMO8eW3JmXNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iRGFoYSBiw7Z5w7xrIGVrcmFuZGEgdXphcWxhxZ9kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiJCbHVldG9vdGggcW/Fn3VsdWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IkJsdWV0b290aCDJmWxhccmZc2kga8mZc2lsZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4iQmF0YXJleWEgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IkJhdGFyZXlhIGJpciB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiJCYXRhcmV5YSBpa2kgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiJCYXRhcmV5YSDDvMOnIHjJmXRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4iQmF0YXJleWEgZG9sdWR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4iVGVsZWZvbiB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9vbmVfYmFyIiBtc2dpZD0iNjg3Njk5Mjc4MTMyNjY0MTE1Ij4ixZ7JmWLJmWvJmSBiaXIgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IsWeyZliyZlryZkgaWtpIHjJmXRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90aHJlZV9iYXJzIiBtc2dpZD0iODUyMTkwNDg0MzkxOTk3MTg4NSI+IsWeyZliyZlryZkgw7zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4iVGFtIMWfyZliyZlryZkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+Ik3JmWx1bWF0IHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiJEYXRhIGJpciB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiJEYXRhIGlraSB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IkRhdGEgw7zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiJEYXRhIHNpcW5hbMSxIHRhbWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiJXaWZpIHPDtm7DvGzDvGTDvHIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IldpZmkgYmHEn2xhbnTEsSBryZlzaWxkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaWZpIGJpciB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiJXaWZpIGlraSB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IldpZmkgw7zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiJXaWZpIHNpcW5hbMSxIHRhbWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiJXaU1BWCB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIGJpciB4yZl0dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYIGlraSB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWCDDvMOnIHjJmXRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiJXaU1BWCBzaXFuYWzEsSB0YW1kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+IlNpcW5hbCB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+IlFvxZ91bHUgZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4iU8SxZsSxciB4yZl0dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4iQmlyIHjJmXR0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4ixLBraSB4yZl0dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4iw5zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4iU2lxbmFsIHRhbWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IkFrdGl2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4iRGVha3RpdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19jb25uZWN0ZWQiIG1zZ2lkPSI4MzY2MjU2NjkzNzE5NDk5NjY1Ij4iUW/Fn3VsdWR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiJSb3VtaW5xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IlNJTSB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4iQmx1ZXRvb3RoIHRlemVyaW5nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+IlXDp3XFnyByZWppbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4iQmF0YXJleWEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZhaXpkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiJTaXN0ZW0gcGFyYW1ldHJsyZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4iQmlsZGlyacWfbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlbW92ZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIzNjAzMDk5NTE0OTAyMTgyMzUwIj4iQmlsZGlyacWfaSB0yZltaXpsyZkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMgYWt0aXZkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IkdQUyDJmWxkyZkgZWRpbGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4iVGVsZVR5cGV3cml0ZXIgYWt0aXZsyZnFn2RpcmlsaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IlrJmW5nIHZpYnJhc2l5YXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJayZluZ3Z1cmFuIHPJmXNzaXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDDp8SxeGFyxLFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IkJpbGRpcmnFnyB1emFxbGHFn2TEsXLEsWxkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiJCaWxkaXJpxZ8ga8O2bGfJmXNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiJUZXogYXlhcmxhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4iQXjEsXLEsW5jxLEgdMmZdGJpcWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IsSwc3RpZmFkyZnDp2kgPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+Ik1vYmlsIDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0YXJleWEgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJUyZl5eWFyyZkgUmVqaW1pIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4gw7zDp8O8biBxdXJ1bHViLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLTNHIGRhdGEgcWV5cmktYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyBkYXRhIGRlYWt0aXYgZWRpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+Ik1vYmlsIGRhdGEgcWV5cmktYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiJEYXRhIHFleXJpLWFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4iR8O2c3TJmXJpbG1pxZ8gZGF0YSBpc3RpZmFkyZkgbGltaXRpbsmZIMOnYXRkxLFuxLF6LlxuXG7Gj2fJmXIgZGF0YW7EsSB5ZW5pZMmZbiBha3RpdmzJmcWfZGlyc8mZbml6LCBvcGVyYXRvciB0yZlyyZlmaW5kyZluIMmZbGF2yZkgdGFyaWZsyZlyIHTJmXRiaXEgb2x1bmEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiJEYXRhbsSxIHllbmlkyZluIGFrdGl2IGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IsSwbnRlcm5ldCBiYcSfbGFudMSxc8SxIHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIHFvxZ91bHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJHUFMgQXh0YXLEscWfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iWWVyIEdQUyB0yZlyyZlmaW5kyZluIG3DvMmZeXnJmW4gZWRpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iTcmZa2FuIHNvcsSfdWxhcsSxIGFyeGl2aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IkLDvHTDvG4gYmlsZGlyacWfbMmZcmkgc2lsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJUyZl0YmlxIGluZm9zdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iRWtyYW4gYXZ0b21hdGlrIGTDtm5kyZlyaWzJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJFa3JhbiBsYW5kxZ9hZnQgb3JpZW50YXNpeWFzxLFuZGEga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkVrcmFuIHBvcnRyZXQgb3JpZW50YXNpeWFzxLFuZGEga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IljJmXlhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJVw6d1xZ8gcmVqaW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IkRvbHVyLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IkRvbHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IkJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IkJsdWV0b290aCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IENpaGF6KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4iQmx1ZXRvb3RoIGJhxJ9sxLFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJQYXJsYXFsxLFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdnRvZsSxcmxhbm1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IkbEsXJsYXRtYSBraWxpZGxpZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IkRheGlsZXRtyZkgbWV0b2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iWWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IlllciBEZWFrdGl2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+Ik1lZGlhIGNpaGF6xLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IllhbG7EsXogZsO2dnHJmWxhZMmZIHrJmW5nbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+Ik5pemFtbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdGltZV9sYWJlbCIgbXNnaWQ9IjQ2MzU5NjkxODIyMzk3MzY0MDgiPiJWYXh0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl9sYWJlbCIgbXNnaWQ9IjUyMzg5OTU2MzIxMzA4OTc4NDAiPiJNyZluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9sYWJlbCIgbXNnaWQ9IjkxMzUzNDQ3MDQ4OTk1NDYwNDEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJCYcSfbGFudMSxIHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLFnsmZYsmZa8mZIHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIHPDtm7DvGzDvGTDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmkgRWtyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJTaW1zaXogRWtyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJQYXJsYXFsxLFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFWVE8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iQmlsZGlyacWfbMmZciBidXJhZGEgZ8O2csO8bsO8ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IkHFn2HEn8SxIHPDvHLDvMWfZMO8cm3JmWtsyZkgaXN0yZluaWzJmW4gdmF4dCBvbmxhcsSxIMmZbGTJmSBlZGluLlxuU2lzdGVtaSBuyZl6YXLJmXRpIMO8w6fDvG4geWVuyZkgZMmZIGHFn2HEn8SxIHPDvHLDvMWfZMO8csO8bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iNTg0ODQwMjEyNzQ1NTAyMTcxNCI+IsWeyZliyZlryZkgbW9uaXRvciBlZGlsyZkgYmlsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9idXR0b24iIG1zZ2lkPSIxNzU5Mzg3MTgxNzY2NjAzMzYxIj4iSGF6xLFyZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X2RpYWxvZ190aXRsZSIgbXNnaWQ9IjEyNzM3OTY5NjcwOTIwMjcyOTEiPiLFnsmZYsmZa8mZIE1vbml0b3JpbnFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfaW5mb19tZXNzYWdlIiBtc2dpZD0iNTQzMDMyMDUzOTU1NTM1ODQ1MiI+IkJ1IGNpaGF6IDx4bGlmZjpnIGlkPSJNQU5BR0lOR19ET01BSU4iPiVzPC94bGlmZjpnPiB0yZlyyZlmaW5kyZluIGlkYXLJmSBlZGlsaXIgLiBcbiBcbiBTaXppbiBhZG1pbmlzdHJhdG9yIMWfyZliyZlryZkgZsmZYWxpeXnJmXRpbml6aW4sIGjJmW3Dp2luaW4gZS1wb8OndCwgdMmZdGJpcWzJmXIgdsmZIHTJmWhsw7xryZlzaXogdmViIHNheXRsYXLEsW7EsXrEsW4gbW9uaXRvcmlucWluaSBldG3JmXnJmSBxYWRpcmRpci4gXG4gXG4gxo90cmFmbMSxIG3JmWx1bWF0IMO8w6fDvG4gYWRtaW5pc3RyYXRvciBpbMmZIMmZbGFxyZkgc2F4bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmdfbWVzc2FnZSIgbXNnaWQ9IjIwMzMwOTE2NTYxMjk5NjM2NjkiPiLDnMOnw7xuY8O8IHTJmXLJmWYgXG4gxZ/JmWLJmWvJmSBmyZlhbGl5ecmZdGluaXppbiwgaMmZbcOnaW5pbiBlLXBvw6d0LCB0yZl0YmlxbMmZciB2yZkgdMmZaGzDvGvJmXNpeiB2ZWIgc2F5dGxhcsSxbsSxesSxbiBtb25pdG9yaW5xaW5pIGV0bcmZecmZIHFhZGlyZGlyLiAuIFxuIFxuQ2loYW56xLFuxLF6YSB5w7xrbMmZbm1pxZ8gZXRpYmFybMSxIGV0aW1hZCBidW51IG3DvG1rw7xuIGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk0Njk1Njk3NzM3NzE2NjcwOSI+IkV0aWJhcmzEsSBldGltYWRsYXLEsSB5b3hsYXnEsW4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjA4Yjc5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCi0gKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+ItCG0L3RgtGN0YDRhNC10LnRgSDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCDRgdGW0YHRgtGN0LzRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiLQkNGH0YvRgdGG0ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4i0JLRi9C00LDQu9GW0YbRjCDRgdCwINGB0L/RltGB0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4i0JfQstC10YHRgtC60ZYg0LDQsSDQv9GA0YvQutC70LDQtNCw0L3QvdGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLQkNC/0L7RiNC90ZbRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4g0L3Rj9C80LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+ItCX0LDQutGA0YvRhtGMINC90Y/QtNCw0Z7QvdGW0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L1pIjwvc3RyaW5nPgotICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMSDQvdGP0LTQsNGe0L3Rj9C1INC/0YDRi9C60LvQsNC00LDQvdC90LUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiLQndGP0LTQsNGe0L3RltGPINC/0YDRi9C60LvQsNC00LDQvdC9aTogJWQiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i0JHQtdC3INCw0L/QsNCy0Y/RiNGH0Y3QvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4i0J/QsNGB0YLQsNGP0L3QvdGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4i0JDQv9Cw0LLRj9GI0YfRjdC90L3RliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+ItCf0LDQtNC70YPRh9GL0YbQtSDQt9Cw0YDQsNC00L3Rg9GOINC/0YDRi9C70LDQtNGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+ItCX0LDRgNCw0LQg0LHQsNGC0LDRgNGN0ZYg0YHRgtCw0L3QvtCy0ZbRhtGG0LAg0L3RltC30LrRltC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+ItCh0L/RgNC+0LEg0LfQsNGB0YLQsNC70L7RgdGPOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0It0LfQsNGA0LDQtNC60LAg0L3QtSDQv9Cw0LTRgtGA0YvQvNC70ZbQstCw0LXRhtGG0LAuXG7QmtCw0YDRi9GB0YLQsNC50YbQtdGB0Y8g0YLQvtC70YzQutGWINC30LDRgNCw0LTQutCw0Lkg0LTQu9GPINC/0YDRi9C70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiLQktGL0LrQsNGA0YvRgdGC0LDQvdC90LUg0LHQsNGC0LDRgNGN0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiLQndCw0LvQsNC00YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiLQoNGN0LbRi9C8INC/0LDQu9GR0YLRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiLQkNGe0YLQsNC80LDRgtGL0YfQvdGLINC/0LDQstCw0YDQvtGCINGN0LrRgNCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+ItCR0K/Ql9CT0KPQp9Cd0JAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+ItCQ0I7QotCQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i0J/QsNCy0LXQtNCw0LzQu9C10L3QvdGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+ItCf0YDRi9Cy0Y/Qt9Cw0L3Ri9GPINC/0YDQsNC3IEJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+ItCd0LDQu9Cw0LTQsCDQvNC10YLQsNC00LDRniDRg9Cy0L7QtNGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4i0KTRltC30ZbRh9C90LDRjyDQutC70LDQstGW0Y/RgtGD0YDQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiLQlNCw0LfQstC+0LvRltGG0Ywg0L/RgNCw0YvQutC70LDQtNCw0L3QvdGOIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g0LDRgtGA0YvQvNC7adCy0LDRhtGMINC00L7RgdGC0YPQvyDQtNCwINC/0YDRi9C70LDQtNGLIFVTQj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+ItCU0LDQt9Cy0L7Qu9GW0YbRjCDQv9GA0YvQutC70LDQtNCw0L3QvdGOIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g0LTQvtGB0YLRg9C/INC00LAg0L/RgNGL0LvQsNC00YsgVVNCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i0JDQtNC60YDRi9GG0YwgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiwg0LrQsNC70ZYg0LPRjdGC0LDRjyBVU0It0L/RgNGL0LvQsNC00LAg0L/QsNC00LvRg9GH0LDQvdCw0Y8/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLQkNC00LrRgNGL0YbRjCA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+LCDQutCw0LvRliDQs9GN0YLQsNGPIFVTQi3Qv9GA0YvQu9Cw0LTQsCDQv9Cw0LTQu9GD0YfQsNC90LDRjz8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLQndGP0LzQsCDRntGB0YLQsNC70Y/Qsi4g0L/RgNGL0LrQuy4g0LTQu9GPINC/0YDQsNGG0Ysg0Lcg0LPRjdGC0LDQuSDQv9GA0YvQuy4gVVNCLiDQkdC+0LvRjNGIINC/0LDQtNGA0LDQsS4g0L/RgNCwINCz0Y3RgtGD0Y4g0L/RgNGL0LsuOiA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCLdC/0YDRi9C70LDQtNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiLQn9GA0LDQs9C70Y/QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+ItCS0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0L3QsNC70LDQtNGLINC/0LAg0LfQvNCw0Z7Rh9Cw0L3QvdGWINC00LvRjyDQtNCw0LTQt9C10L3QsNC5IFVTQi3Qv9GA0YvQu9Cw0LTRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+ItCS0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0L3QsNC70LDQtNGLINC/0LAg0LfQvNCw0Z7Rh9Cw0L3QvdGWINC00LvRjyDQtNCw0LTQt9C10L3QsNC5IFVTQi3Qv9GA0YvQu9Cw0LTRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4i0JTQsNC30LLQvtC70ZbRhtGMINCw0LTQu9Cw0LTQutGDIFVTQj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i0JDQtNCxadGC0LDQuiDQutC70Y7Rh9CwIFJTQSDQvdCwINCz0Y3RgtGL0Lwg0LrQsNC80L9cJ9GO0YLQsNGA0Ys6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLQl9Cw0Z7RgdGR0LTRiyDQtNCw0LfQstCw0LvRj9GG0Ywg0Lcg0LPRjdGC0LDQs9CwINC60LDQvNC/XCfRjtGC0LDRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i0J/QsNCy0Y/Quy4g0L3QsCDRntCy0LXRgdGMINGN0LrRgNCw0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i0KDQsNGB0YbRj9Cz0L0uINC90LAg0Z7QstC10YHRjCDRjdC60YDQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4i0JzQsNGI0YLQsNCx0LDQstCw0L3QvdC1INC00LvRjyDRgdGD0LzRj9GI0YfQsNC70YzQvdCw0YHRhmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i0JrQsNC70ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSDRgNCw0YHQv9GA0LDRhtCw0LLQsNC90LDQtSDQtNC70Y8g0L3QtdCy0Y/Qu9GW0LrRltGFINGN0LrRgNCw0L3QsNGeLCDQutCw0LvRjyDQs9Cw0LTQt9GW0L3QvdGW0LrQsCDQt1wn0Y/QstGW0YbRhtCwINC60ZbRgNCw0LLQsNC90L3QtSDQvNCw0YjRgtCw0LHQsNCy0LDQvdC90LXQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i0JfQsNGF0LDQstCw0L3QvdC1INGB0LrRgNGL0L3RiNC+0YLQsC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+ItCX0LDRhdCw0LLQsNC90L3QtSDRgdC60YDRi9C90YjQvtGC0LAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+ItCh0LrRgNGL0L3RiNC+0YIg0LfQsNGF0LDQstCw0L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+ItCh0LrRgNGL0L3RiNC+0YIg0LfRgNC+0LHQu9C10L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLQndCw0YbRltGB0L3RltGG0LUsINC60LDQsSDQv9GA0LDQs9C70LXQtNC30LXRhtGMINGB0LrRgNGL0L3RiNC+0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+ItCd0LUg0LDRgtGA0YvQvNCw0LvQsNGB0Y8g0LfRgNCw0LFp0YbRjCDRgdC60YDRi9C90YjQvtGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4i0J3QtdC80LDQs9GH0YvQvNCwINC30LDRhdCw0LLQsNGG0Ywg0YHQutGA0YvQvdGI0L7Rgi4g0JzQsNCz0YfRi9C80LAsINC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQuiDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDQtdGG0YbQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiLQn9Cw0YDQsNC8LiDQv9C10YDQsNC00LDRh9GLINGE0LDQudC70LDRniDQv9CwIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+ItCf0LDQtNC70YPRh9GL0YbRjCDRj9C6INC80LXQtNGL0Y/Qv9GA0LDQudCz0YDQsNCy0LDQu9GM0L3RltC6ICjQodCh0J8pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i0J/QsNC00LvRg9GH0YvRhtGMINGP0Log0LrQsNC80LXRgNGDIChQVFApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLQo9GB0YLQsNC70Y/QstCw0YbRjCDQv9GA0YvQutC70LDQtC4gQW5kcm9pZCBGaWxlIFRyYW5zZmVyINC00LvRjyBNYWMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiLQndCw0LfQsNC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+ItCd0LAg0JPQsNC70L7RntC90YPRjiDRgdGC0LDRgNC+0L3QutGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i0JzQtdC90Y4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLQndGP0LTQsNGe0L3RltGPINC/0YDRi9C60LvQsNC00LDQvdC90ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+ItCa0L3QvtC/0LrQsCDQv9C10YDQsNC60LvRjtGH0Y3QvdC90Y8g0LzQtdGC0LDQtNGDINGe0LLQvtC00YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+ItCa0L3QvtC/0LrQsCDRgdGD0LzRj9GI0YfQsNC70YzQvdCw0YHRhtGWINC80LDRiNGC0LDQsdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i0JzQsNGI0YLQsNCx0LDQstCw0L3QvdC1INC80LDQu9GL0YUg0Y3Qu9C10LzQtdC90YLQsNGeINC00LvRjyDQsdC+0LvRjNGI0LDQs9CwINGN0LrRgNCw0L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4iQmx1ZXRvb3RoLdGB0YPQstGP0LfRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4iQmx1ZXRvb3RoINCw0LTQutC70Y7Rh9Cw0L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiLQkdC10Lcg0LDQutGD0LzRg9C70Y/RgtCw0YDQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiLQkNC00L3QsCDQv9C70LDQvdC60LAg0LDQutGD0LzRg9C70Y/RgtCw0YDQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdHdvX2JhcnMiIG1zZ2lkPSI4NTAwNjUwNDM4NzM1MDA5OTczIj4iMiDQv9C70LDQvdC60ZYg0LDQutGD0LzRg9C70Y/RgtCw0YDQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiLQotGA0Ysg0L/Qu9Cw0L3QutGWINCw0LrRg9C80YPQu9GP0YLQsNGA0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4i0JDQutGD0LzRg9C70Y/RgtCw0YAg0L/QvtGe0L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+ItCd0Y/QvNCwINGC0Y3Qu9C10YTQvtC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9vbmVfYmFyIiBtc2dpZD0iNjg3Njk5Mjc4MTMyNjY0MTE1Ij4i0JDQtNC90LAg0L/Qu9Cw0L3QutCwINC90LAg0YLRjdC70LXRhNC+0L3QtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IjIg0L/Qu9Cw0L3QutGWINGC0Y3Qu9C10YTQvtC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90aHJlZV9iYXJzIiBtc2dpZD0iODUyMTkwNDg0MzkxOTk3MTg4NSI+IjMg0L/Qu9Cw0L3QutGWINGC0Y3Qu9C10YTQvtC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY0NzE4MzQ4Njg1ODA3NTc4OTgiPiLQn9C+0Z7QvdGLINGB0ZbQs9C90LDQuyDRgtGN0LvQtdGE0L7QvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiLQndGP0LzQsCDQtNCw0LTQt9C10L3Ri9GFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9vbmVfYmFyIiBtc2dpZD0iMTQxNTYyNTgzMzIzODI3MzYyOCI+ItCQ0LTQvdCwINC/0LvQsNC90LrQsCDQtNCw0LTQt9C10L3Ri9GFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiIyINC/0LvQsNC90LrRliDQtNCw0LTQt9C10L3Ri9GFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IjMg0L/Qu9Cw0L3QutGWINC00LDQtNC30LXQvdGL0YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3NpZ25hbF9mdWxsIiBtc2dpZD0iMjcwODM4NDYwODEyNDUxOTM2OSI+ItCf0L7RntC90Ysg0YHRltCz0L3QsNC7INC/0LXRgNCw0LTQsNGH0Ysg0LTQsNC00LfQtdC90YvRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpLUZpINCy0YvQutC70Y7Rh9Cw0L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2ktRmkg0LDQtNC60LvRjtGH0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vbmVfYmFyIiBtc2dpZD0iNzczNTg5MzE3ODAxMDcyNDM3NyI+ItCQ0LTQt2nQvSDRgdC70YPQv9C+0LogV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+ItCU0LLQsCDRgdC70YPQv9C6aSBXaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiLQotGA0Ysg0YHQu9GD0L/QumkgV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+ItCf0L7RntC90Ysg0YHRltCz0L3QsNC7IFdpLUZpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4i0J3Rj9C80LAg0YFp0LPQvdCw0LvRgyBXaU1BWC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X29uZV9iYXIiIG1zZ2lkPSI0MTcwOTk0Mjk5MDExODYzNjQ4Ij4i0JDQtNC3adC9INGB0LvRg9C/0L7QuiDRgWnQs9C90LDQu9GDIFdpTUFYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4i0JTQstCwINGB0LvRg9C/0LppINGBadCz0L3QsNC70YMgV2lNQVguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+ItCi0YDRiyDRgdC70YPQv9C6aSDRgWnQs9C90LDQu9GDIFdpTUFYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4i0JzQvtGG0L3RiyDRgWnQs9C90LDQuyBXaU1BWC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiLQndGP0LzQsCDRgdGW0LPQvdCw0LvRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4i0J3Rj9C80LAg0L/QsNC00LrQu9GO0YfRjdC90L3Rjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiLQndGP0LzQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4i0JDQtNC3adC9INGB0LvRg9C/0L7Qui4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+ItCU0LLQsCDRgdC70YPQv9C6aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4i0KLRgNGLINGB0LvRg9C/0LppLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4i0KHRltCz0L3QsNC7INC/0L7RntC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+ItCj0LrQu9GO0YfQsNC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29mZiIgbXNnaWQ9IjY0NzU1MDgxNTc3ODY4NTMxNTciPiLQkNC00LrQu9GO0YfQsNC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiLQn9Cw0LTQutC70Y7Rh9Cw0L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiLQoNC+0Z7QvNGW0L3QsyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2VkZ2UiIG1zZ2lkPSI0NDc3NDU3MDUxNjMxOTc5Mjc4Ij4iRWRnZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiLQndGP0LzQsCBTSU0t0LrQsNGA0YLRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4i0KHRg9Cy0Y/Qt9GMINC/0LAgQmx1ZXRvb3RoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+ItCg0Y3QttGL0Lwg0L/QsNC70ZHRgtGDLiI8L3N0cmluZz4KLSAgICA8IS0tIFN0cmluZy5mb3JtYXQgZmFpbGVkIGZvciB0cmFuc2xhdGlvbiAtLT4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwgKDc0NTE0NzQxODcxMTMzNzE5NjUpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+ItCh0ZbRgdGC0Y3QvNC90YvRjyDQvdCw0LvQsNC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiLQkNC/0LDQstGP0YjRh9GN0L3QvdGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLQktGL0LTQsNC70ZbRhtGMINCw0L/QsNCy0Y/RiNGH0Y3QvdC90LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMg0YPQutC70Y7Rh9Cw0L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4i0JDRgtGA0YvQvNCw0L3QvdC1IEdQUy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IlRlbGVUeXBld3JpdGVyINGD0LrQu9GO0YfQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+ItCS0YvQutC70ZbQuiDQtyDQstGW0LHRgNCw0YbRi9GP0LkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+ItCc0LDRntC60LvRltCy0Ysg0LLRi9C60LvRltC6LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g0LLRi9C00LDQu9C10L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiLQkNC/0LDQstGP0YjRh9GN0L3QvdC1INC/0YDQsNC/0YPRiNGH0LDQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i0KbQtdC90Ywg0LDQv9Cw0LLRj9GI0YfRjdC90L3Rjy4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+ItCl0YPRgtC60ZbRjyDQvdCw0LvQsNC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+ItCQ0L/QvtGI0L3RltGPINC/0YDRi9C60LvQsNC00LDQvdC90ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbQujogPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+ItCc0LDQsWnQu9GM0L3RiyDRgWnQs9C90LDQuzogPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLQkNC60YPQvNGD0LvRj9GC0LDRgDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLQoNGN0LbRi9C8INC/0LDQu9GR0YLRgzogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+ItCd0LDQu9Cw0LTQttCw0L3RiyDQsdGD0LTQt2nQu9GM0L1p0Lo6IDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i0JTQsNC00LfQtdC90YvRjyAyRy0zRyDQsNC00LrQu9GO0YfQsNC90YvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+ItCU0LDQtNC30LXQvdGL0Y8gNEcg0LDQtNC60LvRjtGH0LDQvdGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4i0JzQsNCx0ZbQu9GM0L3QsNGPINC/0LXRgNCw0LTQsNGH0LAg0LTQsNC00LfQtdC90YvRhSDQsNC00LrQu9GO0YfQsNC90LDRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+ItCU0LDQtNC30LXQvdGL0Y8g0LDQtNC60LvRjtGH0LDQvdGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiLQktGLINC/0LXRgNCw0LLRi9GBadC7aSDRntGB0YLQsNC70Y/QstCw0L3RiyDQu2nQvGnRgiDQvdCwINCy0YvQutCw0YDRi9GB0YLQsNC90L3QtS4gXG5cbtCa0LDQu9GWINCy0Ysg0L/QsNGe0YLQvtGA0L3QsCDRntC60LvRjtGH0YvRhtC1INC/0LXRgNCw0LTQsNGH0YMg0LTQsNC00LfQtdC90YvRhSwg0LzQvtC20LAg0YHQv9Cw0LPQsNC90Y/RhtGG0LAg0L/Qu9Cw0YLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4i0J/QsNGe0YLQvtGA0L3QsCDRntC60LvRjtGH0YvRhtGMINC00LDQtNC30LXQvdGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4i0J3Rj9C80LAg0L/QsNC00LrQu9GO0YfRjdC90L3RjyDQtNCwIEnQvdGC0Y3RgNC90Y3RgtGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg0L/QsNC00LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+ItCf0L7RiNGD0LogR1BTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+ItCc0LXRgdGG0LAg0LfQsNC00LDQvdCwINC/0YDQsNC3IEdQUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+ItCS0YvQtNCw0Ltp0YbRjCDRg9GB0LUg0LDQv9Cw0LLRj9GI0YfRjdC90L1pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLQhtC90YTQsNGA0LzQsNGG0YvRjyDQv9GA0LAg0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i0K3QutGA0LDQvSDQv9Cw0LLQsNGA0L7Rh9Cy0LDQtdGG0YbQsCDQsNGe0YLQsNC80LDRgtGL0YfQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i0K3QutGA0LDQvSDQt9Cw0LHQu9Cw0Lpp0YDQsNCy0LDQvdGLINGeINCw0LvRjNCx0L7QvNC90LDQuSDQsNGA0YvQtdC90YLQsNGG0YvRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i0K3QutGA0LDQvSDQt9Cw0LHQu9Cw0Lpp0YDQsNCy0LDQvdGLINGeINC/0LDRgNGC0YDRjdGC0L3QsNC5INCw0YDRi9C10L3RgtCw0YbRi9GWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLQnNGA0L5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+ItCg0Y3QttGL0Lwg0L/QsNC70ZHRgtGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+ItCX0LDRgNCw0LTQutCwLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+ItCX0LDRgNCw0LTQttCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKNC/0YDRi9C70LDQtNGLOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCbHVldG9vdGgg0LLRi9C60LvRjtGH0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLQr9GA0LrQsNGB0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4i0JDRntGC0LDQv9Cw0LLQsNGA0L7RgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLQn9Cw0LLQsNGA0L7RgiDQt9Cw0LHQsNGA0L7QvdC10L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLQnNC10YLQsNC0INGD0LLQvtC00YMiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsICg3NDY0NTQ0MDg2NTA3MzMxNDU5KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+ItCc0YPQu9GM0YLRi9C80LXQtNGL0LnQvdCw0Y8g0L/RgNGL0LvQsNC00LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+ItCi0L7Qu9GM0LrRliDRjdC60YHRgtGA0LDQvdGL0Y8g0LLRi9C60LvRltC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiLQndCw0LvQsNC00YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+ItCn0LDRgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4i0K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+ItCd0Y/QvNCwINC/0LDQtNC60LvRjtGH0Y3QvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i0J3Rj9C80LAg0YHQtdGC0LppIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg0LDQtNC60LvRjtGH0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+ItCU0YvRgdC/0LvQtdC5IFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4i0JHQtdGB0L/RgNCw0LLQsNC00L3RiyDQtNGL0YHQv9C70LXQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+ItCv0YDQutCw0YHRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+ItCQ0I7QotCQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+ItCQ0L/QsNCy0Y/RiNGH0Y3QvdC90ZYg0LdcJ9GP0Z7Qu9GP0Y7RhtGG0LAg0YLRg9GCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i0JDRgtGA0YvQvNC70ZbQstCw0LnRhtC1INC00L7RgdGC0YPQvyDQtNCwINGW0YUg0YMg0LvRjtCx0Ysg0YfQsNGBLCDQv9GA0LDQstC+0LTQt9GP0YfRiyDQv9Cw0LvRjNGG0LDQvCDRg9C90ZbQty5cbtCf0YDQsNCy0Y/QtNC30ZbRhtC1INC/0LDQu9GM0YbQsNC8INGD0L3RltC3INGP0YjRh9GNINGA0LDQtywg0LrQsNCxINCw0YLRgNGL0LzQsNGG0Ywg0LTQvtGB0YLRg9C/INC00LAg0YHRgNC+0LTQutCw0Z4g0LrRltGA0LDQstCw0L3QvdGPINGB0ZbRgdGC0Y3QvNCw0LkuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlICg5MDUwODY5NTQ4OTUxMDQ0MzcxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmcgKDcxMTc2OTI3OTUxNjM2MjA2MjYpIC0tPgotICAgIDxza2lwIC8+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCmluZGV4IDYxOTRmZDguLjE0ODg4NjQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLQktC40L3QsNCz0Lgg0LTQsCDRgdC1INGA0LDQt9GA0LXRiNCw0LLQsCDQvtGCINGC0L7Qt9C4INC60L7QvNC/0Y7RgtGK0YAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLQnNCw0YnQsNCxIOKAkyDQt9Cw0L/RitC70LLQsCDQtdC60YDQsNC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i0KDQsNC30L/RitCy0LDQvdC1IOKAkyDQt9Cw0L/RitC70LLQsCDQtdC60YDQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLQn9GA0L7QvNGP0L3QsCDQvdCwINC80LDRidCw0LHQsCDQt9CwINGB0YrQstC80LXRgdGC0LjQvNC+0YHRgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiLQmtC+0LPQsNGC0L4g0LTQsNC00LXQvdC+INC/0YDQuNC70L7QttC10L3QuNC1INC1INGB0YrQt9C00LDQtNC10L3QviDQt9CwINC/0L4t0LzQsNC70YrQuiDQtdC60YDQsNC9LCDQtNC+INGH0LDRgdC+0LLQvdC40LrQsCDRidC1INGB0LUg0L/QvtC60LDQttC1INGD0L/RgNCw0LLQu9C10L3QuNC1INC30LAg0L/RgNC+0LzRj9C90LAg0L3QsCDQvNCw0YnQsNCx0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+ItCV0LrRgNCw0L3QvdCw0YLQsCDRgdC90LjQvNC60LAg0YHQtSDQt9Cw0L/QsNC30LLQsC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+ItCV0LrRgNCw0L3QvdCw0YLQsCDRgdC90LjQvNC60LAg0YHQtSDQt9Cw0L/QsNC30LLQsC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i0JXQutGA0LDQvdC90LDRgtCwINGB0L3QuNC80LrQsCDRgdC1INC30LDQv9Cw0LfQstCwLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLQndCw0YfQsNC70L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLQnNC10L3RjiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+ItCh0LrQvtGA0L7RiNC90Lgg0L/RgNC40LvQvtC20LXQvdC40Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiLQotGK0YDRgdC10L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLQmtCw0LzQtdGA0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+ItCR0YPRgtC+0L0g0LfQsCDQv9GA0LXQstC60LvRjtGH0LLQsNC90LUg0L3QsCDQvNC10YLQvtC00LAg0L3QsCDQstGK0LLQtdC20LTQsNC90LUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+ItCR0YPRgtC+0L0g0LfQsCDQv9GA0L7QvNGP0L3QsCDQvdCwINC80LDRidCw0LHQsCDRgSDRhtC10Lsg0YHRitCy0LzQtdGB0YLQuNC80L7RgdGCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i0J/RgNC+0LzRj9C90LAg0L3QsCDQvNCw0YnQsNCx0LAg0L3QsCDQtdC60YDQsNC90LAg0L7RgiDQv9C+LdC80LDQu9GK0Log0LTQviDQv9C+LdCz0L7Qu9GP0LwuIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i0JHQsNGC0LXRgNC40Y86IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i0KHQsNC80L7Qu9C10YLQtdC9INGA0LXQttC40Lw6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLQnNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC10YLQviDQtSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+ItCR0YPQtNC40LvQvdC40LrRitGCINC1INC90LDQstC40YIg0LfQsCA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLTNHINC00LDQvdC90LjRgtC1INGB0LAg0LTQtdCw0LrRgtC40LLQuNGA0LDQvdC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcg0LTQsNC90L3QuNGC0LUg0YHQsCDQtNC10LDQutGC0LjQstC40YDQsNC90LgiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmk6INCY0LzQsCDQstGA0YrQt9C60LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+ItCi0YrRgNGB0Lgg0YHQtSBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i0JzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtdGC0L4g0LUg0LfQsNC00LDQtNC10L3QviDQvtGCIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+ItCQ0LrRgtC40LLQvdC4INC30LDRj9Cy0LrQuCDQt9CwINC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLQmNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQuNC30LLQtdGB0YLQuNGPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLQmNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0YDQuNC70L7QttC10L3QuNC10YLQviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i0JXQutGA0LDQvdGK0YIg0YnQtSDRgdC1INC30LDQstGK0YDRgtCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLQldC60YDQsNC90YrRgiDQtSDQt9Cw0LrQu9GO0YfQtdC9INCyINGF0L7RgNC40LfQvtC90YLQsNC70L3QsCDQvtGA0LjQtdC90YLQsNGG0LjRjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i0JXQutGA0LDQvdGK0YIg0LUg0LfQsNC60LvRjtGH0LXQvSDQstGK0LIg0LLQtdGA0YLQuNC60LDQu9C90LAg0L7RgNC40LXQvdGC0LDRhtC40Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+ItCS0LjRgtGA0LjQvdCwINGBINC00LXRgdC10YDRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+ItCc0LXRh9GC0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i0KHQsNC80L7Qu9C10YLQtdC9INGA0LXQttC40LwiPC9zdHJpbmc+CkBAIC0xODEsMTEgKzE4MywxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLQr9GA0LrQvtGB0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+ItCQ0LLRgtC+0LzQsNGC0LjRh9C90LAg0L7RgNC40LXQvdGC0LDRhtC40Y8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i0J7RgNC40LXQvdGC0LDRhtC40Y/RgtCwINC1INC30LDQutC70Y7Rh9C10L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiLQl9Cw0LrQu9GO0YfQtdC90L4g0LLRitCyINCy0LXRgNGC0LjQutCw0LvQtdC9INGA0LXQttC40LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+ItCX0LDQutC70Y7Rh9C10L3QviDQsiDRhdC+0YDQuNC30L7QvdGC0LDQu9C10L0g0YDQtdC20LjQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLQnNC10YLQvtC0INC90LAg0LLRitCy0LXQttC00LDQvdC1Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+ItCc0LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i0JzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtdGC0L4g0LUg0LjQt9C60LvRjtGH0LXQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+ItCc0YPQu9GC0LjQvNC10LTQuNC50L3QviDRg9GB0YLRgNC+0LnRgdGC0LLQviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4i0JjQvdC00LjQutCw0YLQvtGAINC30LAg0YHQuNC70LDRgtCwINC90LAg0L/QvtC70YPRh9C10L3QuNGPINGB0LjQs9C90LDQuyAoUlNTSSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+ItCh0LDQvNC+INGB0L/QtdGI0L3QuCDQvtCx0LDQttC00LDQvdC40Y8iPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzE5OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+ItCd0Y/QvNCwINCy0YDRitC30LrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLQndGP0LzQsCDQvNGA0LXQttCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg0LUg0LjQt9C60LvRjtGH0LXQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiLQlNC40YHQv9C70LXQuSDQv9GA0LXQtyBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+ItCR0LXQt9C20LjRh9C10L0g0LTQuNGB0L/Qu9C10LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4i0JXQutGA0LDQvSDQt9CwINC/0YDQtdC00LDQstCw0L3QtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+ItCv0YDQutC+0YHRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLQkNCS0KIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+ItCY0LfQstC10YHRgtC40Y/RgtCwINGB0LUg0L/QvtC60LDQt9Cy0LDRgiDRgtGD0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLQntGB0YrRidC10YHRgtCy0Y/QstCw0LnRgtC1INC00L7RgdGC0YrQvyDQtNC+INGC0Y/RhSDQv9C+INCy0YHRj9C60L4g0LLRgNC10LzQtSwg0LrQsNGC0L4g0L/RgNC10LrQsNGA0LDRgtC1INC/0YDRitGB0YIg0L3QsNC00L7Qu9GDLlxu0J3QsNC/0YDQsNCy0LXRgtC1INCz0L4g0L7RgtC90L7QstC+INC30LAg0YHQuNGB0YLQtdC80L3QuNGC0LUg0LrQvtC90YLRgNC+0LvQuC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLQn9GA0LXQutCw0YDQsNC50YLQtSDQv9GA0YrRgdGCINC/0L4g0YDRitCx0LAg0L3QsCDQtdC60YDQsNC90LAsINC30LAg0LTQsCDRgdC1INC/0L7QutCw0LbQtSDQu9C10L3RgtCw0YLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i0J/RgNC10LrQsNGA0LDQudGC0LUg0L/RgNGK0YHRgiDQvtGCINGA0YrQsdCwINC90LAg0LXQutGA0LDQvdCwLCDQt9CwINC00LAg0YHQtSDQv9C+0LrQsNC20LUg0YHQuNGB0YLQtdC80L3QsNGC0LAg0LvQtdC90YLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLQoNC10LbQuNC8INC90LAg0LjQvdCy0LXRgNGC0LjRgNCw0L3QtSDQvdCwINGG0LLQtdGC0L7QstC10YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+ItCg0LXQttC40Lwg0L3QsCDQv9C+0LTQvtCx0YDQtdC9INC60L7QvdGC0YDQsNGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+ItCg0LXQttC40Lwg0L3QsCDQutC+0YDQuNCz0LjRgNCw0L3QtSDQvdCwINGG0LLQtdGC0L7QstC10YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i0JzRgNC10LbQsNGC0LAg0LzQvtC20LVcbtC00LAg0YHQtSDQvdCw0LHQu9GO0LTQsNCy0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+ItCi0YrRgNGB0LXQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+ItCf0LvRitC30L3QtdGC0LUg0L3QsNCz0L7RgNC1INC30LAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+ItCf0LvRitC30L3QtdGC0LUg0L3QsNC70Y/QstC+INC30LAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKaW5kZXggZWRkZWRhMy4uMzI5ZTkxZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCkBAIC02MSw5ICs2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IkTDs25hIHNlbXByZSBwZXJtw61zIGRlcyBkXCdhcXVlc3QgZXF1aXAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab29tIHBlciBvbXBsaXIgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iRXN0aXJhIHBlciBvbXBsaXIgcGFudC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJab29tIGRlIGNvbXBhdGliaWxpdGF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IlF1YW4gdW5hIGFwbGljYWNpw7Mgc1wnaGFnaSBkaXNzZW55YXQgcGVyIGEgdW5hIHBhbnRhbGxhIG3DqXMgcGV0aXRhLCBhcGFyZWl4ZXLDoCB1biBjb250cm9sIGRlIHpvb20gYWwgY29zdGF0IGRlbCByZWxsb3RnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iRGVzYW50IGNhcHR1cmEgZGUgcGFudGFsbGEuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iU1wnZXN0w6AgZGVzYW50IGNhcHR1cmEgZGUgcGFudGFsbGEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJTXCdlc3TDoCBkZXNhbnQgbGEgY2FwdHVyYSBkZSBwYW50YWxsYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iTGEgY2FwdHVyYSBkZSBwYW50YWxsYSBzXCdoYSBkZXNhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IlNcJ2hhIGZldCB1bmEgY2FwdHVyYSBkZSBwYW50YWxsYS4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iUMOgZ2luYSBkXCdpbmljaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbsO6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iQXBsaWNhY2lvbnMgcmVjZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IkNlcmNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkPDoG1lcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IkJvdMOzIGRlIGNhbnZpIGRlbCBtw6h0b2RlIGRcJ2VudHJhZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IkJvdMOzIGRlIHpvb20gZGUgY29tcGF0aWJpbGl0YXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJBbXBsaWEgbWVueXMgY29tIG3DqXMgZ3JhbiBzaWd1aSBsYSBwYW50YWxsYS4iPC9zdHJpbmc+CkBAIC0xNTUsNiArMTU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcmlhIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTW9kZSBkXCdhdmnDsyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJVYmljYWNpw7M6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm1hIGVzdGFibGVydGEgYSBsZXMgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEYWRlcyAyRy0zRyBkZXNhY3RpdmFkZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJEYWRlcyA0RyBkZXNhY3RpdmFkZXMiPC9zdHJpbmc+CkBAIC0xNjYsMTIgKzE2NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmk6IGNvbm5lY3RhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlNcJ2VzdMOgIGNlcmNhbnQgdW4gR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IlNcJ2hhIGVzdGFibGVydCBsYSB1YmljYWNpw7MgcGVyIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IlNvbMK3bGljaXR1ZHMgZFwndWJpY2FjacOzIGFjdGl2ZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJFc2JvcnJhIHRvdGVzIGxlcyBub3RpZmljYWNpb25zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvcm1hY2nDsyBkZSBsXCdhcGxpY2FjacOzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJMYSBwYW50YWxsYSBnaXJhcsOgIGF1dG9tw6B0aWNhbWVudC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkxhIHBhbnRhbGxhIGVzdMOgIGJsb3F1ZWphZGEgZW4gb3JpZW50YWNpw7MgaG9yaXR6b250YWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkxhIHBhbnRhbGxhIGVzdMOgIGJsb3F1ZWphZGEgZW4gb3JpZW50YWNpw7MgdmVydGljYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkNhcHNhIGRlIHBvc3RyZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRXN0YWx2aSBkZSBwYW50YWxsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2RlIGRcJ2F2acOzIjwvc3RyaW5nPgpAQCAtMTgzLDYgKzE4NSw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IkJyaWxsYW50b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IlJvdGFjacOzIGF1dG9tw6B0aWNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IlJvdGFjacOzIGJsb3F1ZWphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iQmxvcXVlamF0IGVuIG1vZGUgdmVydGljYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IkJsb3F1ZWphdCBlbiBtb2RlIGhvcml0em9udGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ik3DqHRvZGUgZFwnZW50cmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IlViaWNhY2nDsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJVYmljYWNpw7MgZGVzYWN0aXZhZGEiPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzIwMCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IkRlc2Nvbm5lY3RhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJObyBoaSBoYSBjYXAgeGFyeGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBkZXNjb25uZWN0YWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IlBhbnRhbGxhIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iUGFudGFsbGEgc2Vuc2UgZmlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IlBhbnRhbGxhIGRcJ2VtaXNzacOzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iQnJpbGxhbnRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTcOAVElDQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJMZXMgbm90aWZpY2FjaW9ucyBhcGFyZWl4ZW4gYXF1w60iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJBY2NlZGVpeC1oaSBlbiBxdWFsc2V2b2wgbW9tZW50OiBub23DqXMgaGFzIGRlIGZlciBsbGlzY2FyIGVsIGRpdCBjYXAgYXZhbGwuXG5Ub3JuYSBhIGZlciBsbGlzY2FyIGVsIGRpdCBjYXAgYXZhbGwgcGVyIGZlciBxdWUgZXMgbW9zdHJpbiBlbHMgY29udHJvbHMgZGVsIHNpc3RlbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iRmVzIGxsaXNjYXIgZWwgZGl0IHBlciBsYSB2b3JhIGRlIGxhIHBhbnRhbGxhIHBlcnF1w6ggZXMgbW9zdHJpIGxhIGJhcnJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJGZXMgbGxpc2NhciBlbCBkaXQgZGVzIGRlIGxhIHZvcmEgZGUgbGEgcGFudGFsbGEgcGVycXXDqCBlcyBtb3N0cmkgbGEgYmFycmEgZGVsIHNpc3RlbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iTW9kZSBkXCdpbnZlcnNpw7MgZGUgY29sb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2RlIGRlIGNvbnRyYXN0IG1pbGxvcmF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJNb2RlIGRlIGNvcnJlY2Npw7MgZGUgY29sb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IsOJcyBwb3NzaWJsZSBxdWUgbGEgeGFyeGFcbmVzdGlndWkgY29udHJvbGFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iQ2VyY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRmVzIGxsaXNjYXIgZWwgZGl0IGNhcCBhbXVudCBwZXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkZlcyBsbGlzY2FyIGVsIGRpdCBjYXAgYSBsXCdlc3F1ZXJyYSBwZXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKaW5kZXggODdiYTY3YS4uYjMyNjIyMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlbFvmR5IHBvdm9saXQgeiB0b2hvdG8gcG/EjcOtdGHEjWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJQxZlpYmzDrcW+aXQgbmEgY2Vsb3Ugb2JyYXpvdmt1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+Ik5hIGNlbG91IG9icmF6b3ZrdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IsOacHJhdmEgdmVsaWtvc3RpIHogZMWvdm9kdSBrb21wYXRpYmlsaXR5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IlBva3VkIGplIGFwbGlrYWNlIG5hdnLFvmVuYSBwcm8gbWVuxaHDrSBvYnJhem92a3UsIHpvYnJhesOtIHNlIHZlZGxlIGhvZGluIG92bMOhZGFjw60gcHJ2ZWsgcMWZaWJsw63FvmVuw60uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IlVrbMOhZMOhbsOtIHNuw61ta3Ugb2JyYXpvdmt5Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iVWtsw6Fkw6Fuw60gc27DrW1rdSBvYnJhem92a3kuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlByb2LDrWjDoSB1a2zDoWTDoW7DrSBzbsOtbWt1IG9icmF6b3ZreS4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iRG9txa8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW51Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iTm92w6kgYXBsaWthY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJIbGVkYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iRm90b2FwYXLDoXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlRsYcSNw610a28gcMWZZXBudXTDrSBtZXRvZHkgemFkw6F2w6Fuw60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iVGxhxI3DrXRrbyDDunByYXZ5IHZlbGlrb3N0aSB6IGTFr3ZvZHUga29tcGF0aWJpbGl0eSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iWnbEm3TFoWl0IG1lbsWhw60gb2Jyw6F6ZWsgbmEgdsSbdMWhw60gb2JyYXpvdmt1LiI8L3N0cmluZz4KQEAgLTE1NSw2ICsxNTUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkJhdGVyaWU6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iUmXFvmltIFYgbGV0YWRsZTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IlBvbG9oYTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkJ1ZMOtayBqZSBuYXN0YXZlbiBuYSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkRhdG92w6kgcMWZZW5vc3kgMkcgYSAzRyBqc291IHpha8OhesOhbnkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJEYXRvdsOpIHDFmWVub3N5IDRHIGpzb3UgemFrw6F6w6FueSI8L3N0cmluZz4KQEAgLTE2NiwxMiArMTY3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaTogcMWZaXBvamVubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iVnlobGVkw6F2w6Fuw60gc2F0ZWxpdMWvIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJQb2xvaGEgbmFzdGF2ZW5hIHBvbW9jw60gc3lzdMOpbXUgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iQWt0aXZuw60gxb7DoWRvc3RpIG8gcG9sb2h1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iVnltYXphdCB2xaFlY2huYSBvem7DoW1lbsOtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvcm1hY2UgbyBhcGxpa2FjaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iT2JyYXpvdmthIHNlIGF1dG9tYXRpY2t5IG90b8SNw60uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJPYnJhem92a2EgamUgdXphbcSNZW5hIHYgb3JpZW50YWNpIG5hIMWhw63FmWt1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJPYnJhem92a2EgamUgdXphbcSNZW5hIHYgb3JpZW50YWNpIG5hIHbDvcWha3UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IlB1bHQgc2Ugc2xhZGtvc3RtaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJTcG/FmWnEjSBvYnJhem92a3kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iUmXFvmltIFYgbGV0YWRsZSI8L3N0cmluZz4KQEAgLTE4MywxMSArMTg1LDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IkphcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iQXV0b21hdGlja8OpIG90w6HEjWVuw60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iT3TDocSNZW7DrSBqZSB1emFtxI1lbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iVXphbcSNZW4gcmXFvmltIG5hIHbDvcWha3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IlV6YW3EjWVuIHJlxb5pbSBuYSDFocOtxZlrdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJNZXRvZGEgemFkw6F2w6Fuw60gZGF0Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IlBvbG9oYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJQb2xvaGEgdnlwbnV0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJNZWRpw6FsbsOtIHphxZnDrXplbsOtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJQb3V6ZSB0w61zxYhvdsOhIHZvbMOhbsOtIjwvc3RyaW5nPgpAQCAtMTk4LDEyICsyMDAsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOZXDFmWlwb2plbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4ixb3DoWRuw6Egc8OtxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSB2eXBudXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IkRpc3BsZWogcMWZZXMgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJCZXpkcsOhdG92w70gZGlzcGxlaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJWemTDoWxlbsOhIG9icmF6b3ZrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkphcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTUFUSUNLWSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJaZGUgc2Ugem9icmF6dWrDrSBvem7DoW1lbsOtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iTcWvxb5ldGUgamUga2R5a29saSB6b2JyYXppdCB0w61tLCDFvmUgcMWZZWplZGV0ZSBwcnN0ZW0gZG9sxa8uXG5QxZllamVkZXRlLWxpIHByc3RlbSBkb2zFryBqZcWhdMSbIGplZG5vdSwgem9icmF6w60gc2Ugb3Zsw6FkYWPDrSBwcnZreSBzeXN0w6ltdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJQYW5lbCB6b2JyYXrDrXRlIHDFmWVqZXTDrW0gcMWZZXMgb2tyYWogb2JyYXpvdmt5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJTeXN0w6ltb3bDvSBwYW5lbCB6b2JyYXrDrXRlIHDFmWVqZXTDrW0gcMWZZXMgb2tyYWogb2JyYXpvdmt5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IlJlxb5pbSBwxZlldnLDoWNlbsOtIGJhcmV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iUmXFvmltIHp2w73FoWVuw6lobyBrb250cmFzdHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IlJlxb5pbSBrb3Jla2NlIGJhcmV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJTw63FpSBtxa/FvmUgYsO9dFxubW9uaXRvcm92w6FuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iVnlobGVkw6F2w6Fuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iUMWZZWplxI90ZSBwcnN0ZW0gbmFob3J1OiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJQxZllamXEj3RlIHByc3RlbSBkb2xldmE6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKaW5kZXggYWY0YmIzMy4uMDRiM2Q2OSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiIxIHNlbmVzdGUgYXBwIjwvaXRlbT4KICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQgc2VuZXN0ZSBhcHBzIjwvaXRlbT4KICAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IkluZ2VuIG1lZGRlbGVsc2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IkluZ2VuIHVuZGVycmV0bmluZ2VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiJJIGdhbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4iVW5kZXJyZXRuaW5nZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiJUaWxzbHV0IG9wbGFkZXIiPC9zdHJpbmc+CkBAIC00NCw3ICs0NCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiJMWURMw5hTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiJBVVRPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4iVW5kZXJyZXRuaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4iQmx1ZXRvb3RoLXRldGhlcmluZyBhbnZlbmR0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+Ik5ldGRlbGluZyB2aWEgQmx1ZXRvb3RoIGFudmVuZHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiJLb25maWd1cmVyIGlucHV0bWV0b2RlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+IkZ5c2lzayB0YXN0YXR1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiJUaWxsYWQsIGF0IGFwcGVuIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4ga2FuIGbDpSBhZGdhbmcgdGlsIFVTQi1lbmhlZGVuPyI8L3N0cmluZz4KQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iVGlsbGFkIGFsdGlkIGZyYSBkZW5uZSBjb21wdXRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb20gdGlsIGZ1bGQgc2vDpnJtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IlN0csOmayB0aWwgZnVsZCBza8Omcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJLb21wYXRpYmlsaXRldHN6b29tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+Ik7DpXIgZW4gYXBwIGVyIHVkdmlrbGV0IHRpbCBlbiBtaW5kcmUgc2vDpnJtLCB2aXNlcyBkZXIgZW4gem9vbWZ1bmt0aW9uIHZlZCB1cmV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJHZW1tZXIgc2vDpnJtYmlsbGVkZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IkdlbW1lciBza8Omcm1iaWxsZWRlLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJTa8Omcm1iaWxsZWRldCBnZW1tZXMuIjwvc3RyaW5nPgpAQCAtNzUsOSArNzMsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+Iklzw6Z0IHNvbSBldCBrYW1lcmEgKFBUUCkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+Ikluc3RhbGxlciBhcHBlbiBBbmRyb2lkIEZpbG92ZXJmw7hyc2VsIHRpbCBNYWMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiJUaWxiYWdlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlN0YXJ0c2lkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJTdGFydHNrw6ZybSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJTZW5lc3RlIGFwcHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJTw7hnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkthbWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iU2tpZnQgaW5kdGFzdG5pbmdzbWV0b2RlLWtuYXBwZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IktuYXAgZm9yIGtvbXBhdGliaWxpdGV0c3pvb20uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tIG1pbmRyZSB0aWwgc3TDuHJyZSBza8Omcm0uIjwvc3RyaW5nPgpAQCAtMTM2LDcgKzEzNiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4iQmF0dGVyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHJvY2VudC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IlN5c3RlbWluZHN0aWxsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiJVbmRlcnJldG5pbmdlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlbW92ZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIzNjAzMDk5NTE0OTAyMTgyMzUwIj4iUnlkIG1lZGRlbGVsc2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IlJ5ZCB1bmRlcnJldG5pbmcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMgYWt0aXZlcmV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMgc2FtbGVyIGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJUZWxlVHlwZXdyaXRlciBha3RpdmVyZXQuIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0dGVyaSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IkZseXRpbHN0YW5kIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IlBsYWNlcmluZyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtZW4gZXIgaW5kc3RpbGxldCB0aWwgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRy1kYXRhIGVyIGRlYWt0aXZlcmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEctZGF0YSBlciBkZWFrdGl2ZXJldCI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBlciBmb3JidW5kZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlPDuGdlciBlZnRlciBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iUGxhY2VyaW5nZW4gZXIgYW5naXZldCB2ZWQgaGrDpmxwIGFmIEdQUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IlJ5ZCBhbGxlIG1lZGRlbGVsc2VyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IkFrdGl2ZSBwbGFjZXJpbmdzYW5tb2RuaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJSeWQgYWxsZSB1bmRlcnJldG5pbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iT3BseXNuaW5nZXIgb20gYXBwZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IlNrw6ZybWVuIHJvdGVyZXIgYXV0b21hdGlzay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IlNrw6ZybWVuIGVyIG51IGzDpXN0IGkgbGlnZ2VuZGUgcmV0bmluZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iU2vDpnJtZW4gZXIgbnUgbMOlc3QgaSBzdMOlZW5kZSByZXRuaW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJEZXNzZXJ0Y2FzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYWdkcsO4bSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJGbHl0aWxzdGFuZCI8L3N0cmluZz4KQEAgLTE4MSw2ICsxODMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJMeXNzdHlya2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkF1dG9tYXRpc2sgcm90YXRpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUm90YXRpb24gZXIgbMOlc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iTMOlc3QgaSBwb3J0csOmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iTMOlc3QgaSBsYW5kc2thYiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJJbnB1dG1ldG9kZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IlBsYWNlcmluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJQbGFjZXJpbmcgZnJhIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJJa2tlIGZvcmJ1bmRldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJJbnRldCBuZXR2w6ZyayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIHNsw6VldCBmcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmkgRGlzcGxheSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IlRyw6VkbMO4cyBza8Omcm0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iQ2FzdC1za8Omcm0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJMeXNzdHlya2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJVbmRlcnJldG5pbmdlciB2aXNlcyBoZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJGw6UgYWRnYW5nIHRpbCBkZW0gbsOlciBzb20gaGVsc3QgdmVkIGF0IHN0cnlnZSBuZWQuXG5TdHJ5ZyBuZWQgaWdlbiBmb3IgYXQga29tbWUgdGlsIHN5c3RlbWluZHN0aWxsaW5nZXJuZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJTdHJ5ZyBrYW50ZW4gYWYgc2vDpnJtZW4gZm9yIGF0IHNlIGJqw6Zsa2VuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJTdHJ5ZyBmcmEgc2vDpnJtZW5zIGthbnQgZm9yIGF0IHNlIHN5c3RlbWJqw6Zsa2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IkZhcnZlaW52ZXJ0ZXJpbmdzdGlsc3RhbmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJUaWxzdGFuZCBmb3IgZm9yYmVkcmV0IGtvbnRyYXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJGYXJ2ZWtvcnJpZ2VyaW5nc3RpbHN0YW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJOZXR2w6Zya2V0IGthblxudsOmcmUgb3ZlcnbDpWdldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iU8O4Z25pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iR2xpZCBvcCBmb3IgYXQgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkdsaWQgdGlsIHZlbnN0cmUgZm9yIGF0IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCmluZGV4IGVjNTJlZGUuLmZkNDE3NTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJWb24gZGllc2VtIENvbXB1dGVyIGltbWVyIHp1bGFzc2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWm9vbSBhdWYgQmlsZHNjaGlybWdyw7bDn2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iQXVmIEJpbGRzY2hpcm1ncsO2w59lIGFucGFzc2VuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iS29tcGF0aWJpbGl0w6R0c3pvb20iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iV2VubiBlaW5lIEFwcCBmw7xyIGVpbmVuIGtsZWluZXJlbiBCaWxkc2NoaXJtIGF1c2dlbGVndCBpc3QsIHdpcmQgZWluIFpvb20tU3RldWVyZWxlbWVudCBuZWJlbiBkZXIgVWhyIGFuZ2V6ZWlndC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iU2NyZWVuc2hvdCB3aXJkIGdlc3BlaWNoZXJ0Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU2NyZWVuc2hvdCB3aXJkIGdlc3BlaWNoZXJ0Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJTY3JlZW5zaG90IHdpcmQgZ2VzcGVpY2hlcnQuLi4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iU3RhcnRiaWxkc2NoaXJtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVuw7wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJLw7xyemxpY2ggZ2XDtmZmbmV0ZSBBcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iU3VjaGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkthbWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iU2NoYWx0ZmzDpGNoZSB6dW0gw4RuZGVybiBkZXIgRWluZ2FiZW1ldGhvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iU2NoYWx0ZmzDpGNoZSBmw7xyIEtvbXBhdGliaWxpdMOkdHN6b29tIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tIGF1ZiBlaW5lbiBncsO2w59lcmVuIEJpbGRzY2hpcm0iPC9zdHJpbmc+CkBAIC0xNTUsNiArMTU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJBa2t1OiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iRmx1Z21vZHVzOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IlN0YW5kb3J0IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJXZWNrZXIgZ2VzdGVsbHQgZsO8ciA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctLzNHLURhdGVuIGRlYWt0aXZpZXJ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEctRGF0ZW4gZGVha3RpdmllcnQiPC9zdHJpbmc+CkBAIC0xNjYsMTIgKzE2NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV0xBTiB2ZXJidW5kZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQUyB3aXJkIGdlc3VjaHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iU3RhbmRvcnQgZHVyY2ggR1BTIGZlc3RnZWxlZ3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJTdGFuZG9ydGFuZnJhZ2VuIGFrdGl2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iQWxsZSBCZW5hY2hyaWNodGlndW5nZW4gbMO2c2NoZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iQXBwLURldGFpbHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkJpbGRzY2hpcm0gd2lyZCBhdXRvbWF0aXNjaCBnZWRyZWh0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iQmlsZHNjaGlybSBibGVpYnQgaW0gUXVlcmZvcm1hdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iQmlsZHNjaGlybSBibGVpYnQgaW0gSG9jaGZvcm1hdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iRGVzc2VydGJlaMOkbHRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJGbHVnbW9kdXMiPC9zdHJpbmc+CkBAIC0xODMsMTEgKzE4NSwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJIZWxsaWdrZWl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdXRvbS4gZHJlaGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IkRyZWh1bmcgZ2VzcGVycnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iQXVmIEhvY2hmb3JtYXQgZ2VzcGVycnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IkF1ZiBRdWVyZm9ybWF0IGdlc3BlcnJ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IkVpbmdhYmVtZXRob2RlIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IlN0YW5kb3J0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IlN0YW5kb3J0IGF1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJNZWRpZW5nZXLDpHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+Ik51ciBOb3RydWZlIjwvc3RyaW5nPgpAQCAtMTk4LDEyICsyMDAsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOaWNodCB2ZXJidW5kZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iS2VpbiBOZXR6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV0xBTiBhdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV0xBTi1EaXNwbGF5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iS2FiZWxsb3NlIMOcYmVydHJhZ3VuZyAoV2lEaSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iQmlsZHNjaGlybSDDvGJlcnRyYWdlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkhlbGxpZ2tlaXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJCZW5hY2hyaWNodGlndW5nZW4gZXJzY2hlaW5lbiBoaWVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iR3JlaWZlbiBTaWUgamVkZXJ6ZWl0IGF1ZiBzaWUgenUsIGluZGVtIFNpZSBuYWNoIHVudGVuIHdpc2NoZW4uXG5XaXNjaGVuIFNpZSBmw7xyIFN5c3RlbWVpbnN0ZWxsdW5nZW4gZXJuZXV0IG5hY2ggdW50ZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iWnVtIEVpbmJsZW5kZW4gZGVyIExlaXN0ZSB2b20gUmFuZCB3aXNjaGVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJadW0gRWluYmxlbmRlbiBkZXIgU3lzdGVtbGVpc3RlIHZvbSBEaXNwbGF5LVJhbmQgd2VnIHdpc2NoZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iRmFyYmludmVyc2lvbnNtb2R1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IktvbnRyYXN0dmVyYmVzc2VydW5nc21vZHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJGYXJia29ycmVrdHVybW9kdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ik5ldHp3ZXJrIHdpcmRcbmV2ZW50dWVsbCDDvGJlcndhY2h0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iU3VjaGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iWnVtIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiBuYWNoIG9iZW4gc2NoaWViZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJadW0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IG5hY2ggbGlua3Mgc2NoaWViZW4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCmluZGV4IGFiNDMwODEuLjk2ZTJhYWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLOnc6xIM61z4DOuc+Ez4HOrc+AzrXPhM6xzrkgz4DOrM69z4TOsSDOsc+Az4wgzrHPhc+Ez4zOvSDPhM6/zr0gz4XPgM6/zrvOv86zzrnPg8+Ezq4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLOls6/z4XOvCDPg861IM+AzrvOrs+Bzrcgzr/OuM+Mzr3OtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLOoM+Bzr/Osm/Ou86uIM+DzrUgz4DOu86uz4HOtyDOv864LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+Is6Wzr/Phc68IM6zzrnOsSDPg8+FzrzOss6xz4TPjM+EzrfPhM6xIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+Is6Mz4TOsc69IM68zrnOsSDOtc+GzrHPgc68zr/Os86uIM6tz4fOtc65IM+Dz4fOtc60zrnOsc+Dz4TOtc6vIM6zzrnOsSDPgM+Bzr/Oss6/zrvOriDPg861IM68zrnOus+Bz4zPhM61z4HOtyDOv864z4zOvc63LCDOtM6vz4DOu86xIM6xz4DPjCDPhM6/IM+Bzr/Ou8+MzrkgzrjOsSDOtc68z4bOsc69zrnPg8+EzrXOryDOrc69zrEgz4PPhM6/zrnPh861zq/OvyDOtc67zq3Os8+Hzr/PhSDOts6/z4XOvC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4izpHPgM6/zrjOrs66LiDPg8+EzrnOs868zrnPjM+Ez4XPgM6/z4Ugzr/OuM+Mzr3Ot8+CLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4izpHPgM6/zrjOrs66zrXPhc+Dzrcgz4PPhM65zrPOvM65z4zPhM+Fz4DOv8+FIM6/zrjPjM69zrfPgi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4izpPOr869zrXPhM6xzrkgzrHPgM6/zrjOrs66zrXPhc+Dzrcgz4TOv8+FIM+Dz4TOuc6zzrzOuc+Mz4TPhc+Azr/PhSDOv864z4zOvc63z4IuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+Is6Rz4HPh865zrrOriDPg861zrvOr860zrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLOnM61zr3Ov8+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4izqDPgc+Mz4PPhs6xz4TOtc+CIM61z4bOsc+BzrzOv86zzq3PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+Is6Rzr3Osc62zq7PhM63z4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLOps+Jz4TOv86zz4HOsc+GzrnOus6uIM68zrfPh86xzr3OriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4izprOv8+FzrzPgM6vIM61zr3Osc67zrvOsc6zzq7PgiDOvM61zrjPjM60zr/PhSDOtc65z4PPjM60zr/PhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLOms6/z4XOvM+Azq8gzrXPg8+Ezq/Osc+DzrfPgiDPg8+FzrzOss6xz4TPjM+EzrfPhM6xz4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLOls6/z4XOvCDOsc+Az4wgzrzOuc66z4HPjM+EzrXPgc63IM+DzrUgzrzOtc6zzrHOu8+Nz4TOtc+Bzrcgzr/OuM+Mzr3Oty4iPC9zdHJpbmc+CkBAIC0xNTUsNiArMTU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLOnM+AzrHPhM6xz4HOr86xIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4izpvOtc65z4TOv8+Fz4HOs86vzrEgz4DPhM6uz4POt8+CIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+Is6kzr/PgM6/zrjOtc+Dzq/OsSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+Is6kzr8gzr7Phc+Azr3Ot8+Ezq7Pgc65IM6tz4fOtc65IM6/z4HOuc+Dz4TOtc6vIM+Dz4TOuc+CIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4izqTOsSDOtM61zrTOv868zq3Ovc6xIDJHLTNHIM6xz4DOtc69zrXPgc6zzr/PgM6/zrnOrs64zrfOus6xzr0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLOpM6xIM60zrXOtM6/zrzOrc69zrEgNEcgzrHPgM61zr3Otc+BzrPOv8+Azr/Ouc6uzrjOt866zrHOvSI8L3N0cmluZz4KQEAgLTE2NiwxMiArMTY3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSDPg8+Fzr3OtM61zrTOtc68zq3Ovc6/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLOkc69zrHOts6uz4TOt8+DzrcgzrPOuc6xIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiLOoc+NzrjOvM65z4POtyDPhM6/z4DOv864zrXPg86vzrHPgiDOvM61IEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+Is6kzrEgzrHOuc+Ezq7OvM6xz4TOsSDPhM6/z4DOv864zrXPg86vzrHPgiDOrc+Hzr/Phc69IM61zr3Otc+BzrPOv8+Azr/Ouc63zrjOtc6vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4izpXOus66zrHOuM6sz4HOuc+Dzrcgz4zOu8+Jzr0gz4TPic69IM61zrnOtM6/z4DOv865zq7Pg861z4nOvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4izqDOu863z4HOv8+Gzr/Pgc6vzrXPgiDOtc+GzrHPgc68zr/Os86uz4IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+Is6YzrEgzrPOr869zrXPhM6xzrkgzrHPhc+Ez4zOvM6xz4TOtyDPgM61z4HOuc+Dz4TPgc6/z4bOriDPhM63z4Igzr/OuM+Mzr3Ot8+CLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4izpcgzr/OuM+Mzr3OtyDOrc+HzrXOuSDOus67zrXOuc60z4nOuM61zq8gz4POtSDOv8+BzrnOts+Mzr3PhM65zr8gz4DPgc6/z4POsc69zrHPhM6/zrvOuc+DzrzPjC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4izpcgzr/OuM+Mzr3OtyDOrc+HzrXOuSDOus67zrXOuc60z4nOuM61zq8gz4POtSDOus6xz4TOsc66z4zPgc+Fz4bOvyDPgM+Bzr/Pg86xzr3Osc+Ezr/Ou865z4POvM+MLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiLOlc+AzrnOtM+Mz4HPgM65zr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4izpvOtc65z4TOv8+Fz4HOs86vzrEgz4DPhM6uz4POt8+CIjwvc3RyaW5nPgpAQCAtMTgzLDYgKzE4NSw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+Is6mz4nPhM61zrnOvc+Mz4TOt8+EzrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+Is6Rz4XPhM+MzrzOsc+Ezrcgz4DOtc+BzrnPg8+Ez4HOv8+Gzq4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4izpcgz4DOtc+BzrnPg8+Ez4HOv8+Gzq4gzrXOr869zrHOuSDOus67zrXOuc60z4nOvM6tzr3OtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiLOms67zrXOuc60z4nOvM6tzr3OvyDPg8+EzrfOvSDOus6xz4TOsc66z4zPgc+Fz4bOtyDPgM+Bzr/Oss6/zrvOriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4izprOu861zrnOtM+JzrzOrc69zr8gz4PPhM63zr0gzr/Pgc65zrbPjM69z4TOuc6xIM+Az4HOv86yzr/Ou86uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Is6czq3OuM6/zrTOv8+CIM61zrnPg86xzrPPic6zzq7PgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Is6kzr/PgM6/zrjOtc+Dzq/OsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLOpM6/z4DOv864zrXPg86vzrEgzrHPgM61zr3Otc+BzrPOv8+Azr/Ouc63zrzOrc69zrciPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzIwMCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Is6czrcgz4PPhc69zrTOtc60zrXOvM6tzr3OvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLOms6xzr3Orc69zrEgzrTOr866z4TPhc6/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgzrHOvc61zr3Otc+BzrPPjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiLOn864z4zOvc63IFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4izpHPg8+Nz4HOvM6xz4TOtyDOv864z4zOvc63Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+Is6czrXPhM6szrTOv8+Dzrcgzr/OuM+Mzr3Ot8+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4izqbPic+EzrXOuc69z4zPhM63z4TOsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLOkc6lzqTOn86czpHOpM6XIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+Is6fzrkgzrXOuc60zr/PgM6/zrnOrs+DzrXOuc+CIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDOtc60z44iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLOnM61z4TOsc6yzrXOr8+EzrUgz4POtSDOsc+Fz4TOrc+CIM6xzr3OrCDPgM6sz4POsSDPg8+EzrnOs868zq4gz4PPjc+Bzr/Ovc+EzrHPgiDPgM+Bzr/PgiDPhM6xIM66zqzPhM+JLlxuzqPPjc+BzrXPhM61IM6+zrHOvc6sIM+Az4HOv8+CIM+EzrEgzrrOrM+Ez4kgzrPOuc6xIM+EzrEgz4PPhM6/zrnPh861zq/OsSDOtc67zq3Os8+Hzr/PhSDPg8+Fz4PPhM6uzrzOsc+Ezr/Pgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLOo8+Nz4HOtc+EzrUgzrHPgM+MIM+EzrfOvSDOrM66z4HOtyDPhM63z4Igzr/OuM+Mzr3Ot8+CIM6zzrnOsSDOvc6xIM61zrzPhs6xzr3Or8+DzrXPhM61IM+EzrcgzrPPgc6xzrzOvM6uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiLOo8+Nz4HOtc+EzrUgzrHPgM+MIM+EzrfOvSDOrM66z4HOtyDPhM63z4Igzr/OuM+Mzr3Ot8+CIM6zzrnOsSDOvc6xIM61zrzPhs6xzr3Or8+DzrXPhM61IM+EzrcgzrPPgc6xzrzOvM6uIM+Dz4XPg8+Ezq7OvM6xz4TOv8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+Is6bzrXOuc+Ezr/Phc+BzrPOr86xIM6xzr3Osc+Dz4TPgc6/z4bOrs+CIM+Hz4HPjs68zrHPhM6/z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLOm861zrnPhM6/z4XPgc6zzq/OsSDOss61zrvPhM6vz4nPg863z4IgzrHOvc+Ezq/OuM61z4POt8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLOm861zrnPhM6/z4XPgc6zzq/OsSDOtM65z4zPgc64z4nPg863z4Igz4fPgc+OzrzOsc+Ezr/PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4izqTOvyDOtM6vzrrPhM+Fzr8gzrzPgM6/z4HOtc6vXG7Ovc6xIM+AzrHPgc6xzrrOv867zr/Phc64zrXOr8+EzrHOuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4izpHOvc6xzrbOrs+EzrfPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Is6az43Ou865z4POtyDPgM+Bzr/PgiDPhM6xIM61z4DOrM69z4kgzrPOuc6xIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLOms+NzrvOuc+Dzrcgz4DPgc6/z4Igz4TOsSDOsc+BzrnPg8+EzrXPgc6sIM6zzrnOsSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCmluZGV4IDYwMjc1NTNmLi4zNDIwNjFlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJBbHdheXMgYWxsb3cgZnJvbSB0aGlzIGNvbXB1dGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWm9vbSB0byBmaWxsIHNjcmVlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJTdHJldGNoIHRvIGZpbGwgc2NyZWVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iQ29tcGF0aWJpbGl0eSB6b29tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IldoZW4gYW4gYXBwIHdhcyBkZXNpZ25lZCBmb3IgYSBzbWFsbGVyIHNjcmVlbiwgYSB6b29tIGNvbnRyb2wgd2lsbCBhcHBlYXIgYnkgdGhlIGNsb2NrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTYXZpbmcgc2NyZWVuc2hvdOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNhdmluZyBzY3JlZW5zaG904oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJTY3JlZW5zaG90IGlzIGJlaW5nIHNhdmVkLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJIb21lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IlJlY2VudCBhcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkNhbWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iU3dpdGNoIGlucHV0IG1ldGhvZCBidXR0b24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IkNvbXBhdGliaWxpdHkgem9vbSBidXR0b24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tIHNtYWxsZXIgdG8gbGFyZ2VyIHNjcmVlbi4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXR0ZXJ5IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iQWVyb3BsYW5lIE1vZGUgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iTG9jYXRpb24gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybSBzZXQgZm9yIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cgZGF0YSBkaXNhYmxlZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIGRhdGEgZGlzYWJsZWQiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkgY29ubmVjdGVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJTZWFyY2hpbmcgZm9yIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMb2NhdGlvbiBzZXQgYnkgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iTG9jYXRpb24gcmVxdWVzdHMgYWN0aXZlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iQ2xlYXIgYWxsIG5vdGlmaWNhdGlvbnMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkFwcCBpbmZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJTY3JlZW4gd2lsbCByb3RhdGUgYXV0b21hdGljYWxseS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IlNjcmVlbiBpcyBsb2NrZWQgaW4gbGFuZHNjYXBlIG9yaWVudGF0aW9uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJTY3JlZW4gaXMgbG9ja2VkIGluIHBvcnRyYWl0IG9yaWVudGF0aW9uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJEZXNzZXJ0IENhc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iQWVyb3BsYW5lIG1vZGUiPC9zdHJpbmc+CkBAIC0xODEsNiArMTgzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iQnJpZ2h0bmVzcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iQXV0byBSb3RhdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUm90YXRpb24gTG9ja2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IkxvY2tlZCB0byBQb3J0cmFpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iTG9ja2VkIHRvIExhbmRzY2FwZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJJbnB1dCBNZXRob2QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJMb2NhdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJMb2NhdGlvbiBPZmYiPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5vdCBDb25uZWN0ZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iTm8gTmV0d29yayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIE9mZiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GaSBEaXNwbGF5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iV2lyZWxlc3MgRGlzcGxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJDYXN0IFNjcmVlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkJyaWdodG5lc3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJOb3RpZmljYXRpb25zIGFwcGVhciBoZXJlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iQWNjZXNzIHRoZW0gYW55IHRpbWUgYnkgc3dpcGluZyBkb3duLlxuU3dpcGUgZG93biBhZ2FpbiBmb3Igc3lzdGVtIGNvbnRyb2xzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IlN3aXBlIGVkZ2Ugb2Ygc2NyZWVuIHRvIHJldmVhbCBiYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlN3aXBlIGZyb20gZWRnZSBvZiBzY3JlZW4gdG8gcmV2ZWFsIHN5c3RlbSBiYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iQ29sb3VyIGludmVyc2lvbiBtb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iRW5oYW5jZWQgY29udHJhc3QgbW9kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iQ29sb3VyIGNvcnJlY3Rpb24gbW9kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iTmV0d29yayBtYXlcbmJlIG1vbml0b3JlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlNsaWRlIHVwIGZvciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iU2xpZGUgbGVmdCBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1ySU4tbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE3NzNiOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IlNjcmVlbiBpcyBub3cgbG9ja2VkIGluIGxhbmRzY2FwZSBvcmllbnRhdGlvbi4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyMDYxZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4iU3lzdGVtIFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+IkNsZWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4iUmVtb3ZlIGZyb20gbGlzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiJBcHAgaW5mbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4iTm8gcmVjZW50IGFwcHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IkRpc21pc3MgcmVjZW50IGFwcHMiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiIxIHJlY2VudCBhcHAiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCByZWNlbnQgYXBwcyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiJObyBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiJPbmdvaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+Ik5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiJDb25uZWN0IGNoYXJnZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiJUaGUgYmF0dGVyeSBpcyBnZXR0aW5nIGxvdy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiByZW1haW5pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4iVVNCIGNoYXJnaW5nIG5vdCBzdXBwb3J0ZWQuXG5Vc2Ugb25seSB0aGUgc3VwcGxpZWQgY2hhcmdlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4iQmF0dGVyeSB1c2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiJTZXR0aW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+IkFlcm9wbGFuZSBtb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IkF1dG8tcm90YXRlIHNjcmVlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+Ik1VVEUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IkFVVE8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiJOb3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aCB0ZXRoZXJlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IlNldCB1cCBpbnB1dCBtZXRob2RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4iUGh5c2ljYWwga2V5Ym9hcmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4iQWxsb3cgdGhlIGFwcCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IHRvIGFjY2VzcyB0aGUgVVNCIGRldmljZT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IkFsbG93IHRoZSBhcHAgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiB0byBhY2Nlc3MgdGhlIFVTQiBhY2Nlc3Nvcnk/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiJPcGVuIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4gd2hlbiB0aGlzIFVTQiBkZXZpY2UgaXMgY29ubmVjdGVkPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4iT3BlbiA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IHdoZW4gdGhpcyBVU0IgYWNjZXNzb3J5IGlzIGNvbm5lY3RlZD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiJObyBpbnN0YWxsZWQgYXBwcyB3b3JrIHdpdGggdGhpcyBVU0IgYWNjZXNzb3J5LiBMZWFybiBtb3JlIGFib3V0IHRoaXMgYWNjZXNzb3J5IGF0IDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJVU0IgYWNjZXNzb3J5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4iVXNlIGJ5IGRlZmF1bHQgZm9yIHRoaXMgVVNCIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IlVzZSBieSBkZWZhdWx0IGZvciB0aGlzIFVTQiBhY2Nlc3NvcnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IkFsbG93IFVTQiBkZWJ1Z2dpbmc/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+IlRoZSBjb21wdXRlclwncyBSU0Ega2V5IGZpbmdlcnByaW50IGlzOlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iQWx3YXlzIGFsbG93IGZyb20gdGhpcyBjb21wdXRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb20gdG8gZmlsbCBzY3JlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iU3RyZXRjaCB0byBmaWxsIHNjcmVlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTYXZpbmcgc2NyZWVuc2hvdOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNhdmluZyBzY3JlZW5zaG904oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJTY3JlZW5zaG90IGlzIGJlaW5nIHNhdmVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4iU2NyZWVuc2hvdCBjYXB0dXJlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4iVG91Y2ggdG8gdmlldyB5b3VyIHNjcmVlbnNob3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiJDb3VsZG5cJ3QgY2FwdHVyZSBzY3JlZW5zaG90LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4iQ291bGRuXCd0IHNhdmUgc2NyZWVuc2hvdC4gU3RvcmFnZSBtYXkgYmUgaW4gdXNlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IlVTQiBmaWxlIHRyYW5zZmVyIG9wdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiJNb3VudCBhcyBhIG1lZGlhIHBsYXllciAoTVRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+Ik1vdW50IGFzIGEgY2FtZXJhIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiJJbnN0YWxsIEFuZHJvaWQgRmlsZSBUcmFuc2ZlciBhcHBsaWNhdGlvbiBmb3IgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4iQmFjayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJIb21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IlJlY2VudCBhcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkNhbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iU3dpdGNoIGlucHV0IG1ldGhvZCBidXR0b24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IkNvbXBhdGliaWxpdHkgem9vbSBidXR0b24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tIHNtYWxsZXIgdG8gbGFyZ2VyIHNjcmVlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4iQmx1ZXRvb3RoIGNvbm5lY3RlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4iQmx1ZXRvb3RoIGRpc2Nvbm5lY3RlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiJObyBiYXR0ZXJ5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IkJhdHRlcnkgb25lIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdHdvX2JhcnMiIG1zZ2lkPSI4NTAwNjUwNDM4NzM1MDA5OTczIj4iQmF0dGVyeSB0d28gYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiJCYXR0ZXJ5IHRocmVlIGJhcnMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4iQmF0dGVyeSBmdWxsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4iTm8gcGhvbmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9vbmVfYmFyIiBtc2dpZD0iNjg3Njk5Mjc4MTMyNjY0MTE1Ij4iUGhvbmUgb25lIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IlBob25lIHR3byBiYXJzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiJQaG9uZSB0aHJlZSBiYXJzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4iUGhvbmUgc2lnbmFsIGZ1bGwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+Ik5vIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4iRGF0YSBvbmUgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiJEYXRhIHR3byBiYXJzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IkRhdGEgdGhyZWUgYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4iRGF0YSBzaWduYWwgZnVsbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpLUZpIG9mZi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2ktRmkgZGlzY29ubmVjdGVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vbmVfYmFyIiBtc2dpZD0iNzczNTg5MzE3ODAxMDcyNDM3NyI+IldpLUZpIG9uZSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IldpLUZpIHR3byBiYXJzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IldpLUZpIHRocmVlIGJhcnMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IldpLUZpIHNpZ25hbCBmdWxsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iTm8gV2lNQVguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIG9uZSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWCB0d28gYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iV2lNQVggdGhyZWUgYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IldpTUFYIHNpZ25hbCBmdWxsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+Ik5vIHNpZ25hbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4iTm90IGNvbm5lY3RlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiJaZXJvIGJhcnMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+Ik9uZSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90d29fYmFycyIgbXNnaWQ9IjY0MzczNjM2NDgzODUyMDY2NzkiPiJUd28gYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4iVGhyZWUgYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+IlNpZ25hbCBmdWxsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiJPbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+Ik9mZi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IkNvbm5lY3RlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiJSb2FtaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+Ik5vIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4iQmx1ZXRvb3RoIHRldGhlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+IkFlcm9wbGFuZSBtb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+IkJhdHRlcnkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBlciBjZW50LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4iU3lzdGVtIHNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiJOb3RpZmljYXRpb25zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiJDbGVhciBub3RpZmljYXRpb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMgZW5hYmxlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4iR1BTIGFjcXVpcmluZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IlRlbGVUeXBld3JpdGVyIGVuYWJsZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IlJpbmdlciB2aWJyYXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJSaW5nZXIgc2lsZW50LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gZGlzbWlzc2VkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+Ik5vdGlmaWNhdGlvbiBkaXNtaXNzZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiJOb3RpZmljYXRpb24gc2hhZGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IlF1aWNrIHNldHRpbmdzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiJSZWNlbnQgYXBwcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiJVc2VyIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiJNb2JpbGUgPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXR0ZXJ5IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iQWVyb3BsYW5lIE1vZGUgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iTG9jYXRpb24gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybSBzZXQgZm9yIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cgZGF0YSBkaXNhYmxlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIGRhdGEgZGlzYWJsZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4iTW9iaWxlIGRhdGEgZGlzYWJsZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiJEYXRhIGRpc2FibGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4iWW91XCd2ZSByZWFjaGVkIHRoZSBzcGVjaWZpZWQgZGF0YSB1c2FnZSBsaW1pdC5cblxuSWYgeW91IHJlLWVuYWJsZSBkYXRhLCB5b3UgbWF5IGJlIGNoYXJnZWQgYnkgdGhlIG9wZXJhdG9yLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiJSZWVuYWJsZSBkYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+Ik5vIEludGVybmV0IGNvbm5lY3Rpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBjb25uZWN0ZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlNlYXJjaGluZyBmb3IgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkxvY2F0aW9uIHNldCBieSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJMb2NhdGlvbiByZXF1ZXN0cyBhY3RpdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJDbGVhciBhbGwgbm90aWZpY2F0aW9ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iQXBwIGluZm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IlNjcmVlbiB3aWxsIHJvdGF0ZSBhdXRvbWF0aWNhbGx5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iU2NyZWVuIGlzIGxvY2tlZCBpbiBsYW5kc2NhcGUgb3JpZW50YXRpb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IlNjcmVlbiBpcyBsb2NrZWQgaW4gcG9ydHJhaXQgb3JpZW50YXRpb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkRlc3NlcnQgQ2FzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJBZXJvcGxhbmUgbW9kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiJDaGFyZ2luZywgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiJDaGFyZ2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IkJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IkJsdWV0b290aCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IERldmljZXMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCbHVldG9vdGggT2ZmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJCcmlnaHRuZXNzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdXRvIFJvdGF0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJSb3RhdGlvbiBMb2NrZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iTG9ja2VkIHRvIFBvcnRyYWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiJMb2NrZWQgdG8gTGFuZHNjYXBlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IklucHV0IE1ldGhvZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IkxvY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IkxvY2F0aW9uIE9mZiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJNZWRpYSBkZXZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IkVtZXJnZW5jeSBDYWxscyBPbmx5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2V0dGluZ3NfbGFiZWwiIG1zZ2lkPSI1MzI2NTU2NTkyNTc4MDY1NDAxIj4iU2V0dGluZ3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+IlRpbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc191c2VyX2xhYmVsIiBtc2dpZD0iNTIzODk5NTYzMjEzMDg5Nzg0MCI+Ik1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9sYWJlbCIgbXNnaWQ9IjkxMzUzNDQ3MDQ4OTk1NDYwNDEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOb3QgQ29ubmVjdGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+Ik5vIE5ldHdvcmsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBPZmYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iQ2FzdCBTY3JlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJCcmlnaHRuZXNzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iQ29sb3VyIGludmVyc2lvbiBtb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iRW5oYW5jZWQgY29udHJhc3QgbW9kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iQ29sb3VyIGNvcnJlY3Rpb24gbW9kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iTmV0d29yayBtYXlcbmJlIG1vbml0b3JlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlNsaWRlIHVwIGZvciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iU2xpZGUgbGVmdCBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAppbmRleCA2MmY2YzIwLi5hODJlMmQ3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJQZXJtaXRpciBzaWVtcHJlIGRlc2RlIGVzdGEgY29tcHV0YWRvcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab29tIHBhcmEgb2N1cGFyIGxhIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IkVzdGlyYXIgcC8gb2N1cGFyIGxhIHBhbnRhbGxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iWm9vbSBkZSBjb21wYXRpYmlsaWRhZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJDdWFuZG8gdW5hIGFwbGljYWNpw7NuIGZ1ZSBkaXNlw7FhZGEgcGFyYSB1bmEgcGFudGFsbGEgbcOhcyBwZXF1ZcOxYSwgYXBhcmVjZSB1biBjb250cm9sIGRlIHpvb20ganVudG8gYWwgcmVsb2ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Ikd1YXJkYW5kbyBjYXB0dXJhIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iR3VhcmRhbmRvIGxhIGNhcHR1cmEgZGUgcGFudGFsbGEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IkxhIGNhcHR1cmEgZGUgcGFudGFsbGEgc2UgZXN0w6EgZ3VhcmRhbmRvLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJQw6FnaW5hIHByaW5jaXBhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbsO6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iQXBsaWNhY2lvbmVzIHJlY2llbnRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IkJ1c2NhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJDw6FtYXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJCb3TDs24gQ2FtYmlhciBtw6l0b2RvIGRlIGVudHJhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iQm90w7NuIGRlIHpvb20gZGUgY29tcGF0aWJpbGlkYWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ilpvb20gZGUgcGFudGFsbGEgbcOhcyBwZXF1ZcOxYSBhIG3DoXMgZ3JhbmRlIjwvc3RyaW5nPgpAQCAtMTU1LDYgKzE1NSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0ZXLDrWEgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Ik1vZG8gYXZpw7NuIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJVYmljYWNpw7NuIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybWE6IDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEYXRvcyBkZSAyRy0zRyBpbmhhYmlsaXRhZG9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iRGF0b3MgZGUgNEcgaW5oYWJpbGl0YWRvcyI8L3N0cmluZz4KQEAgLTE2NiwxMiArMTY3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBjb25lY3RhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkJ1c2NhbmRvIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMYSB1YmljYWNpw7NuIHNlIGVzdGFibGVjacOzIHBvciBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJTb2xpY2l0dWRlcyBkZSB1YmljYWNpw7NuIGFjdGl2YXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJFbGltaW5hciB0b2RhcyBsYXMgbm90aWZpY2FjaW9uZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iSW5mb3JtYWNpw7NuIGRlIGxhIGFwbGljYWNpw7NuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJMYSBwYW50YWxsYSBnaXJhcsOhIGF1dG9tw6F0aWNhbWVudGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJMYSBwYW50YWxsYSBlc3TDoSBibG9xdWVhZGEgZW4gbW9kbyBob3Jpem9udGFsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJMYSBwYW50YWxsYSBlc3TDoSBibG9xdWVhZGEgZW4gbW9kbyB2ZXJ0aWNhbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iQ2FqYSBwYXJhIHBvc3RyZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iQWN0aXZhciBwcm90ZWN0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTW9kbyBhdmnDs24iPC9zdHJpbmc+CkBAIC0xODMsMTEgKzE4NSwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJCcmlsbG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkdpcmFyIGF1dG9tw6F0aWNhbWVudGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUm90YWNpw7NuIGJsb3F1ZWFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiJCbG9xdWVhZGEgZW4gdmVydGljYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IkJsb3F1ZWFkYSBlbiBob3Jpem9udGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ik3DqXRvZG8gZGUgaW50cm9kdWNjacOzbiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCAoNTAxMTMyNzA0ODc0ODc2MjI1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwgKDc0NjQ1NDQwODY1MDczMzE0NTkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJVYmljYWNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IlViaWNhY2nDs24gZGVzYWN0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iRGlzcG9zaXRpdm8gbXVsdGltZWRpYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4iU29sbyBlbWVyZ2VuY2lhIjwvc3RyaW5nPgpAQCAtMTk4LDEyICsyMDAsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJTaW4gY29uZXhpw7NuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IlNpbiByZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBkZXNhY3RpdmFkYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJQYW50YWxsYSBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IlBhbnRhbGxhIGluYWzDoW1icmljYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJQYW50YWxsYSBkZSBDYXN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iQnJpbGxvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE9Nw4FUSUNPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IkxhcyBub3RpZmljYWNpb25lcyBhcGFyZWNlbiBhcXXDrS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgYWJham8gcGFyYSBhY2NlZGVyIGFsIGNvbnRlbmlkby5cblZ1ZWx2ZSBhIGRlc2xpemFyIGVsIGRlZG8gaGFjaWEgYWJham8gcGFyYSBhY2NlZGVyIGEgbG9zIGNvbnRyb2xlcyBkZWwgc2lzdGVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJEZXNsaXphIGVsIGRlZG8gZGVzZGUgZWwgYm9yZGUgZGUgbGEgcGFudGFsbGEgcGFyYSBtb3N0cmFyIGxhIGJhcnJhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iRGVzbGl6YSBlbCBkZWRvIGRlc2RlIGVsIGJvcmRlIGRlIGxhIHBhbnRhbGxhIHBhcmEgbW9zdHJhciBsYSBiYXJyYSBkZWwgc2lzdGVtYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iTW9kbyBkZSBpbnZlcnNpw7NuIGRlIGNvbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iTW9kbyBkZSBjb250cmFzdGUgbWVqb3JhZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZG8gZGUgY29ycmVjY2nDs24gZGUgY29sb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IkVzIHBvc2libGUgcXVlIGxhIHJlZFxuZXN0w6kgc3VwZXJ2aXNhZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJCdXNjYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRGVzbGl6YSBlbCBkZWRvIGhhY2lhIGFycmliYSBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgbGEgaXpxdWllcmRhIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKaW5kZXggNjRjM2NhYi4uMmE5NzdlZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlBlcm1pdGlyIHNpZW1wcmUgZGVzZGUgZXN0ZSBvcmRlbmFkb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab29tIHBhcmEgYWp1c3RhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJFeHBhbmRpciBwYXJhIGFqdXN0YXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJab29tIGRlIGNvbXBhdGliaWxpZGFkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IlNpIGxhIGFwbGljYWNpw7NuIHNlIGhhIGRpc2XDsWFkbyBwYXJhIHVuYSBwYW50YWxsYSBtw6FzIHBlcXVlw7FhLCBhcGFyZWNlcsOhIHVuIGNvbnRyb2wgZGUgem9vbSBqdW50byBhbCByZWxvai4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iR3VhcmRhbmRvIGNhcHR1cmEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJHdWFyZGFuZG8gY2FwdHVyYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iTGEgY2FwdHVyYSBkZSBwYW50YWxsYSBzZSBlc3TDoSBndWFyZGFuZG8uIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IkluaWNpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbsO6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iQXBsaWNhY2lvbmVzIHJlY2llbnRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IkJ1c2NhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJDw6FtYXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJCb3TDs24gQ2FtYmlhciBtw6l0b2RvIGRlIGVudHJhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iQm90w7NuIGRlIHpvb20gZGUgY29tcGF0aWJpbGlkYWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ilpvb20gZGUgcGFudGFsbGEgbcOhcyBwZXF1ZcOxYSBhIG3DoXMgZ3JhbmRlIjwvc3RyaW5nPgpAQCAtMTE2LDggKzExNiw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IkRvcyBiYXJyYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4iVHJlcyBiYXJyYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+IlNlw7FhbCBhbCBtw6F4aW1vIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IkFjdGl2YWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29mZiIgbXNnaWQ9IjY0NzU1MDgxNTc3ODY4NTMxNTciPiJEZXNhY3RpdmFkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiJTw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+Ik5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiJDb25lY3RhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkJhdGVyw61hIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJNb2RvIGF2acOzbiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iVWJpY2FjacOzbiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkxhIGFsYXJtYSBzb25hcsOhIGEgbGEocykgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEYXRvcyAyRy0zRyBpbmhhYmlsaXRhZG9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iRGF0b3MgNEcgaW5oYWJpbGl0YWRvcyI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJDb24gY29uZXhpw7NuIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJCdXNjYW5kbyBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iVWJpY2FjacOzbiBkZWZpbmlkYSBwb3IgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iU29saWNpdHVkZXMgZGUgdWJpY2FjacOzbiBhY3RpdmFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iQm9ycmFyIHRvZGFzIGxhcyBub3RpZmljYWNpb25lcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvcm1hY2nDs24gZGUgbGEgYXBsaWNhY2nDs24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkxhIHBhbnRhbGxhIGdpcmFyw6EgYXV0b23DoXRpY2FtZW50ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkxhIHBhbnRhbGxhIGVzdMOhIGJsb3F1ZWFkYSBlbiBtb2RvIGhvcml6b250YWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkxhIHBhbnRhbGxhIGVzdMOhIGJsb3F1ZWFkYSBlbiBtb2RvIHZlcnRpY2FsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJDYWphIHBhcmEgcG9zdHJlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJTYWx2YXBhbnRhbGxhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2RvIGF2acOzbiI8L3N0cmluZz4KQEAgLTE4MSw2ICsxODMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJCcmlsbG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkdpcmFyIGF1dG9tw6F0aWNhbWVudGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUm90YWNpw7NuIGJsb3F1ZWFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiJCbG9xdWVhZG8gZW4gdmVydGljYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IkJsb3F1ZWFkbyBlbiBob3Jpem9udGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ik3DqXRvZG8gZGUgZW50cmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IlViaWNhY2nDs24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iVWJpY2FjacOzbiBkZXNhY3RpdmFkYSI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iTm8gY29uZWN0YWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+Ik5vIGhheSByZWQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgZGVzYWN0aXZhZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iUGFudGFsbGEgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJQYW50YWxsYSBpbmFsw6FtYnJpY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iUGFudGFsbGEgZGUgQ2FzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkJyaWxsbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IkxhcyBub3RpZmljYWNpb25lcyBhcGFyZWNlbiBhcXXDrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IkRlc2xpemEgZWwgZGVkbyBoYWNpYSBhYmFqbyBwYXJhIGFjY2VkZXIgYWwgY29udGVuaWRvLlxuVnVlbHZlIGEgZGVzbGl6YXIgZWwgZGVkbyBoYWNpYSBhYmFqbyBwYXJhIGFjY2VkZXIgYSBsb3MgY29udHJvbGVzIGRlbCBzaXN0ZW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IkRlc2xpemEgZWwgYm9yZGUgZGUgbGEgcGFudGFsbGEgcGFyYSBtb3N0cmFyIGxhIGJhcnJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJEZXNsaXphIGVsIGJvcmRlIGRlIGxhIHBhbnRhbGxhIHBhcmEgbW9zdHJhciBsYSBiYXJyYSBkZWwgc2lzdGVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2RvIGRlIGludmVyc2nDs24gZGUgY29sb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2RvIGRlIGNvbnRyYXN0ZSBtZWpvcmFkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iTW9kbyBkZSBjb3JyZWNjacOzbiBkZSBjb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iTGEgcmVkIHNlXG5wdWVkZSBzdXBlcnZpc2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJCdXNjYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRGVzbGl6YSBlbCBkZWRvIGhhY2lhIGFycmliYSBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgbGEgaXpxdWllcmRhIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldC1yRUUtbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXQtckVFLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiMGNlMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXQtckVFLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IkVrcmFhbiBvbiBuw7zDvGQgbHVrdXN0YXR1ZCBob3Jpc29udGFhbGFzZW5kaXNzZS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIxYzFkZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4iU8O8c3RlZW1pIFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+Ikt1c3R1dGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiJMb2VuZGlzdCBlZW1hbGRhbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiJSYWtlbmR1c2UgdGVhdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IlV1c2kgcmFrZW5kdXNpIHBvbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+Ikxvb2J1IGhpbGp1dGlzdGVzdCByYWtlbmR1c3Rlc3QiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiIxIGhpbGp1dGluZSByYWtlbmR1cyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTA0MDc4NDM1OTc5NDg5MDc0NCI+IiVkIGhpbGp1dGlzdCByYWtlbmR1c3QiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4iVGVhdGlzaSBwb2xlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiJKw6R0a3V2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IlRlYWRpc3R1c2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4iw5xoZW5kYWdlIGxhYWRpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiJBa3UgaGFra2FiIHTDvGhqZW5lbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4gb24gYWxsZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4iVVNCIGxhYWRpbWlzdCBlaSB0b2V0YXRhLlxuS2FzdXRhZ2UgYWludWx0IHRvb3RqYSBsYWFkaWphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiJBa3VrYXN1dHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4iU2VhZGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiJMZW5udXJlxb5paW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4iUMO2w7ZyYSBla3JhYW5pIGF1dG9tYWF0c2VsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+IlNVTU1VVEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IkFVVE8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiJUZWF0aXNlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiJCbHVldG9vdGggb24gamFnYXR1ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IlNlYWRpc3RhIHNpc2VzdHVzbWVldG9kZWlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4iRsO8w7xzaWxpbmUga2xhdmlhdHV1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiJLYXMgbHViYXRlIHJha2VuZHVzZWwgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBVU0Itc2VhZG1lbGUganV1cmRlIHDDpMOkc2VkYT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IkthcyBsdWJhdGUgcmFrZW5kdXNlbCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IFVTQi1zZWFkbWVsZSBqdXVyZGUgcMOkw6RzZWRhPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4iS2FzIGF2YWRhIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4sIGt1aSBzZWUgVVNCLXNlYWRlIG9uIMO8aGVuZGF0dWQ/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiJLYXMgYXZhZGEgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiwga3VpIFVTQi1saXNhc2VhZGUgb24gw7xoZW5kYXR1ZD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiJJbnN0LiByYWsuIGVpIHTDtsO2dGEgc2VsbGUgVVNCLXNlYWRtZWdhLiBMaXNhdGVhdmV0IGxpc2FzZWFkbWUga29odGEgdnQgc2lpdDogPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IlVTQi1saXNhc2VhZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+Ikt1dmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiJLYXN1dGEgdmFpa2ltaXNpIHNlbGxlIFVTQi1zZWFkbWUgamFva3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiJWYWlraW1pc2kga2FzdXRhIHNlZGEgVVNCLWxpc2FzZWFkZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IkthcyBsdWJhbiBVU0Igc2lsdW1pc2U/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+IkFydnV0aSBSU0EtdsO1dG1lIHPDtXJtZWrDpGxnOlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iTHViYSBhbGF0aSBzZWxsZXN0IGFydnV0aXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iU3V1bWkgZWtyYWFuaSB0w6RpdG1pc2VrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJWZW5pdGEgZWtyYWFuaSB0w6RpdG1pc2VrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJLdXZhdMO1bW1pc2Ugc2FsdmVzdGFtaW5lIC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+Ikt1dmF0w7VtbWlzZSBzYWx2ZXN0YW1pbmUgLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJLdXZhdMO1bW1pc3Qgc2FsdmVzdGF0YWtzZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IkVrcmFhbmlwaWx0IG9uIGrDpMOkZHZ1c3RhdHVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiJQdXVkdXRhZ2Uga3V2YXTDtW1taXNlIHZhYXRhbWlzZWtzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RpdGxlIiBtc2dpZD0iNzA1NzgxMTE2NzQ2OTIyNzcxIj4iS3V2YXTDtW1taXN0IGVpIHNhYW51ZCBqw6TDpGR2dXN0YWRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4iS3V2YXTDtW1taXN0IGVpIHNhYSBzYWx2ZXN0YWRhLiBNw6RsdXNlYWRlIHbDtWliIG9sbGEga2FzdXR1c2VzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IlVTQi1mYWlsaWVkYXN0dXNlIHZhbGlrdWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiJQYWlnYWxkYSBtZWVkaXVtaW3DpG5naWphbmEgKE1UUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiJQYWlnYWxkYSBrYWFtZXJhbmEgKFBUUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+IkFuZHJvaWQgRmlsZSBUcmFuc2ZlcmkgaW5zdGFsbGltaW5lIE1hY2lsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IlRhZ2FzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJLb2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVuw7zDvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IkhpbGp1dGlzZWQgcmFrZW5kdXNlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+Ik90c2luZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJLYWFtZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJTaXNlc3R1c21lZXRvZGkgdmFoZXRhbWlzZSBudXBwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJTb2JpdnVzc3V1bWkgbnVwcC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IlN1dW1pIHN1dXJlbWFsZSBla3JhYW5pbGUgdsOkaGVtLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiJCbHVldG9vdGggb24gw7xoZW5kYXR1ZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4iQmx1ZXRvb3RoaSDDvGhlbmR1cyBrYXRrZXN0YXR1ZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiJBa3UgcHV1ZHViLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IkFrdTogw7xrcyBwdWxrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiJBa3U6IGtha3MgcHVsa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4iQWt1OiBrb2xtIHB1bGthLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+IkFrdSB0w6Rpcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+IlRlbGVmb25pc2lnbmFhbCBwdXVkdWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiJUZWxlZm9uaXNpZ25hYWw6IMO8a3MgcHVsay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IlRlbGVmb25pc2lnbmFhbDoga2FrcyBwdWxrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3RocmVlX2JhcnMiIG1zZ2lkPSI4NTIxOTA0ODQzOTE5OTcxODg1Ij4iVGVsZWZvbmlzaWduYWFsOiBrb2xtIHB1bGthLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4iVGVsZWZvbmlzaWduYWFsIG9uIHR1Z2V2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiJBbmRtZWQgcHV1ZHV2YWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4iQW5kbWVzaWduYWFsOiDDvGtzIHB1bGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+IkFuZG1lc2lkZToga2FrcyBwdWxrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiJBbmRtZXNpZGU6IGtvbG0gcHVsa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3NpZ25hbF9mdWxsIiBtc2dpZD0iMjcwODM4NDYwODEyNDUxOTM2OSI+IkFuZG1lc2lnbmFhbCBvbiB0dWdldi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpZmkgb24gdsOkbGphcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2lmaS3DvGhlbmR1cyBvbiBrYXRrZXN0YXR1ZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaUZpOiDDvGtzIHB1bGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IldpRmk6IGtha3MgcHVsa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4iV2lGaToga29sbSBwdWxrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4iV2lGaS1zaWduYWFsIG9uIHR1Z2V2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iV2lNQVgtaSBwb2xlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWC1pIG9uIMO8a3MgcmliYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYLWkgb24ga2FrcyByaWJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWC1pIG9uIGtvbG0gcmliYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IldpTUFYLWkgc2lnbmFhbCBvbiB0dWdldi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiJTaWduYWFsIHB1dWR1Yi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4iw5xoZW5kdXMgcHV1ZHViLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+Ik51bGwgcHVsa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IsOca3MgcHVsay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+Iktha3MgcHVsa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IktvbG0gcHVsa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiJTaWduYWFsIG9uIHR1Z2V2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiJTZWVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4iVsOkbGphcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IsOcaGVuZGF0dWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMyw1RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4iUsOkbmRsdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IlNlcnYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJTSU0ta2FhcnRpIHBvbGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IkJsdWV0b290aGkgamFnYW1pbmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4iTGVubnVyZcW+aWltLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiJBa3U6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcm90c2VudGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiJTw7xzdGVlbWlzZWFkZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IlRlYXRpc2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IlRlYXRpc2Uga3VzdHV0YW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IkdQUyBvbiBsdWJhdHVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMtc2lnbmFhbGkgb3RzaW1pbmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJUZWxlVHlwZXdyaXRlciBsdWJhdHVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiJWaWJyZWVyaXYga8O1bGlzdGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlZhaWtuZSBrw7VsaXN0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iTG9vYnVzaXRlIHJha2VuZHVzZXN0IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiJNw6RyZ3VhbmRlc3Qgb24gbG9vYnV0dWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiJNw6RyZ3VhbmRlIHZhcmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IktpaXJzZWFkZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IkhpbGp1dGlzZWQgcmFrZW5kdXNlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiJLYXN1dGFqYSA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4iTW9iaWlsaSA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkFrdTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJMZW5udWtpcmXFvmlpbTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IkFzdWtvaHQ6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iTcOkw6RyYXR1ZCDDpHJhdHVzOiA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkfigJMzRyBhbmRtZXNpZGUga2VlbGF0dWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyBhbmRtZXNpZGUga2VlbGF0dWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4iTW9iaWlsbmUgYW5kbWVzaWRlIGtlZWxhdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4iQW5kbWVrYXN1dHVzIGtlZWxhdHVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+Ik9sZXRlIGrDtXVkbnVkIG3DpMOkcmF0dWQgYW5kbWVrYXN1dHVzZSBwaWlyaW5pLlxuXG5LdWkgbMO8bGl0YXRlIGFuZG1lc2lkZSB1dWVzdGkgc2lzc2UsIHNpaXMgdsO1aWIgb3BlcmFhdG9yIHRlaWx0IHRhc3UgdsO1dHRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiJMdWJhIGFuZG1lc2lkZSB1dWVzdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4iSW50ZXJuZXRpLcO8aGVuZHVzIHB1dWR1YiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpRmkgb24gw7xoZW5kYXR1ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iR1BTLWkgb3RzaW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iR1BTLWkgbcOkw6RyYXR1ZCBhc3Vrb2h0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iQXN1a29oYSB0YW90bHVzZWQgb24gYWt0aWl2c2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iS3VzdHV0YSBrw7VpayB0ZWF0aXNlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iUmFrZW5kdXNlIHRlYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJFa3JhYW5pIHDDtsO2cmFtaW5lIHRvaW11YiBhdXRvbWFhdHNlbHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJFa3JhYW4gb24gbHVrdXN0YXR1ZCBob3Jpc29udGFhbHN1dW5hcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iRWtyYWFuIG9uIGx1a3VzdGF0dWQgdmVydGlrYWFsc3V1bmFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJNYWl1c3R1c2Vrb3J2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IlVuaXN0dXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTGVubnVyZcW+aWltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IkxhYWRpbWluZSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiJMYWV0dWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4iQmx1ZXRvb3RoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4iQmx1ZXRvb3RoICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gc2VhZGV0KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4iQmx1ZXRvb3RoIG9uIHbDpGxqYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IkhlbGVkdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkF1dG9tYWF0bmUgcMO2w7ZyYW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUMO2w7ZyYW1pbmUgbHVrdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iTHVrdXN0YXR1ZCB2ZXJ0aWthYWxwYWlndXR1c3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiJMdWt1c3RhdHVkIGhvcmlzb250YWFscGFpZ3V0dXNzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJTaXNlc3R1c21lZXRvZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IkFzdWtvaHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iQXN1a29odCBvbiB2w6RsamFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+Ik1lZWRpYXNlYWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJBaW51bHQgaMOkZGFhYmlrw7VuZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiJTZWFkZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+IkFlZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4iTWluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2lGaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLDnGhlbmR1cyBwdXVkdWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iVsO1cmt1IHBvbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaUZpLcO8aGVuZHVzIG9uIHbDpGxqYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iQ2FzdC1la3JhYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJIZWxlZHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE9NQUFUTkUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iVsOkcnZpZGUgw7xtYmVycMO2w7ZyYW1pc2UgcmXFvmlpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IlTDpGl1c3RhdHVkIGtvbnRyYXN0aSByZcW+aWltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJWw6RydmlwYXJhbmR1c3Jlxb5paW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IlbDtXJrdSB2w7VpZGFrc2VcbmrDpGxnaWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJPdHNpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iTG9oaXN0YWdlIMO8bGVzOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iTG9oaXN0YWdlIHZhc2FrdWxlOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ5YzgzOC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyoqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCi0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiJTw7xzdGVlbWkgVUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4iS3VzdHV0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IkxvZW5kaXN0IGVlbWFsZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+IlJha2VuZHVzZSB0ZWF2ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4iVXVzaSByYWtlbmR1c2kgcG9sZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4iTG9vYnUgaGlsanV0aXN0ZXN0IHJha2VuZHVzdGVzdCI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEgaGlsanV0aW5lIHJha2VuZHVzIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQgaGlsanV0aXN0IHJha2VuZHVzdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiJUZWF0aXNpIHBvbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+IkrDpHRrdXYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4iVGVhZGlzdHVzZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiLDnGhlbmRhZ2UgbGFhZGlqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IkFrdSBoYWtrYWIgdMO8aGplbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiBvbiBhbGxlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0IgbGFhZGltaXN0IGVpIHRvZXRhdGEuXG5LYXN1dGFnZSBhaW51bHQgdG9vdGphIGxhYWRpamEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+IkFrdWthc3V0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiJTZWFkZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+Ikxlbm51cmXFvmlpbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiJQw7bDtnJhIGVrcmFhbmkgYXV0b21hYXRzZWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4iU1VNTVVUQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IlRlYXRpc2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aCBvbiBqYWdhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4iU2VhZGlzdGEgc2lzZXN0dXNtZWV0b2RlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiJGw7zDvHNpbGluZSBrbGF2aWF0dXVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IkthcyBsdWJhdGUgcmFrZW5kdXNlbCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IFVTQi1zZWFkbWVsZSBqdXVyZGUgcMOkw6RzZWRhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4iS2FzIGx1YmF0ZSByYWtlbmR1c2VsIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gVVNCLXNlYWRtZWxlIGp1dXJkZSBww6TDpHNlZGE/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiJLYXMgYXZhZGEgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiwga3VpIHNlZSBVU0Itc2VhZGUgb24gw7xoZW5kYXR1ZD8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IkthcyBhdmFkYSA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+LCBrdWkgVVNCLWxpc2FzZWFkZSBvbiDDvGhlbmRhdHVkPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+Ikluc3QuIHJhay4gZWkgdMO2w7Z0YSBzZWxsZSBVU0Itc2VhZG1lZ2EuIExpc2F0ZWF2ZXQgbGlzYXNlYWRtZSBrb2h0YSB2dCBzaWl0OiA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCLWxpc2FzZWFkZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4iS3V2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+Ikthc3V0YSB2YWlraW1pc2kgc2VsbGUgVVNCLXNlYWRtZSBqYW9rcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IlZhaWtpbWlzaSBrYXN1dGEgc2VkYSBVU0ItbGlzYXNlYWRldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4iS2FzIGx1YmFuIFVTQiBzaWx1bWlzZT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4iQXJ2dXRpIFJTQS12w7V0bWUgc8O1cm1lasOkbGc6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJMdWJhIGFsYXRpIHNlbGxlc3QgYXJ2dXRpc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJTdXVtaSBla3JhYW5pIHTDpGl0bWlzZWtzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IlZlbml0YSBla3JhYW5pIHTDpGl0bWlzZWtzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iU29iaXZ1c3N1dW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iS3VpIHJha2VuZHVzIG9uIG3DtWVsZHVkIHbDpGlrc2VtYWxlIGVrcmFhbmlsZSwga3V2YXRha3NlIGtlbGxhIGvDtXJ2YWwgc3V1bWkganVodG51cHAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Ikt1dmF0w7VtbWlzZSBzYWx2ZXN0YW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iS3V2YXTDtW1taXNlIHNhbHZlc3RhbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+Ikt1dmF0w7VtbWlzdCBzYWx2ZXN0YXRha3NlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4iRWtyYWFuaXBpbHQgb24gasOkw6RkdnVzdGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IlB1dWR1dGFnZSBrdXZhdMO1bW1pc2UgdmFhdGFtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiJLdXZhdMO1bW1pc3QgZWkgc2FhbnVkIGrDpMOkZHZ1c3RhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiJLdXZhdMO1bW1pc3QgZWkgc2FhIHNhbHZlc3RhZGEuIE3DpGx1c2VhZGUgdsO1aWIgb2xsYSBrYXN1dHVzZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iVVNCLWZhaWxpZWRhc3R1c2UgdmFsaWt1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IlBhaWdhbGRhIG1lZWRpdW1pbcOkbmdpamFuYSAoTVRQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+IlBhaWdhbGRhIGthYW1lcmFuYSAoUFRQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iQW5kcm9pZCBGaWxlIFRyYW5zZmVyaSBpbnN0YWxsaW1pbmUgTWFjaWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4iVGFnYXNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IktvZHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW7DvMO8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iSGlsanV0aXNlZCByYWtlbmR1c2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJTaXNlc3R1c21lZXRvZGkgdmFoZXRhbWlzZSBudXBwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJTb2JpdnVzc3V1bWkgbnVwcC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IlN1dW1pIHN1dXJlbWFsZSBla3JhYW5pbGUgdsOkaGVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiJCbHVldG9vdGggb24gw7xoZW5kYXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4iQmx1ZXRvb3RoaSDDvGhlbmR1cyBrYXRrZXN0YXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiJBa3UgcHV1ZHViLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IkFrdTogw7xrcyBwdWxrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiJBa3U6IGtha3MgcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4iQWt1OiBrb2xtIHB1bGthLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+IkFrdSB0w6Rpcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+IlRlbGVmb25pc2lnbmFhbCBwdXVkdWIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiJUZWxlZm9uaXNpZ25hYWw6IMO8a3MgcHVsay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IlRlbGVmb25pc2lnbmFhbDoga2FrcyBwdWxrYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3RocmVlX2JhcnMiIG1zZ2lkPSI4NTIxOTA0ODQzOTE5OTcxODg1Ij4iVGVsZWZvbmlzaWduYWFsOiBrb2xtIHB1bGthLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4iVGVsZWZvbmlzaWduYWFsIG9uIHR1Z2V2LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiJBbmRtZWQgcHV1ZHV2YWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4iQW5kbWVzaWduYWFsOiDDvGtzIHB1bGsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+IkFuZG1lc2lkZToga2FrcyBwdWxrYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiJBbmRtZXNpZGU6IGtvbG0gcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3NpZ25hbF9mdWxsIiBtc2dpZD0iMjcwODM4NDYwODEyNDUxOTM2OSI+IkFuZG1lc2lnbmFhbCBvbiB0dWdldi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpZmkgb24gdsOkbGphcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2lmaS3DvGhlbmR1cyBvbiBrYXRrZXN0YXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaUZpOiDDvGtzIHB1bGsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IldpRmk6IGtha3MgcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4iV2lGaToga29sbSBwdWxrYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4iV2lGaS1zaWduYWFsIG9uIHR1Z2V2LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iV2lNQVgtaSBwb2xlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWC1pIG9uIMO8a3MgcmliYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYLWkgb24ga2FrcyByaWJhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWC1pIG9uIGtvbG0gcmliYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IldpTUFYLWkgc2lnbmFhbCBvbiB0dWdldi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiJTaWduYWFsIHB1dWR1Yi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4iw5xoZW5kdXMgcHV1ZHViLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+Ik51bGwgcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IsOca3MgcHVsay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+Iktha3MgcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IktvbG0gcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiJTaWduYWFsIG9uIHR1Z2V2LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiJTZWVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4iVsOkbGphcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IsOcaGVuZGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMyw1RyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4iUsOkbmRsdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IlNlcnYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJTSU0ta2FhcnRpIHBvbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IkJsdWV0b290aGkgamFnYW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4iTGVubnVyZcW+aWltLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiJBa3U6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcm90c2VudGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiJTw7xzdGVlbWlzZWFkZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IlRlYXRpc2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IlRlYXRpc2Uga3VzdHV0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IkdQUyBvbiBsdWJhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMtc2lnbmFhbGkgb3RzaW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJUZWxlVHlwZXdyaXRlciBsdWJhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiJWaWJyZWVyaXYga8O1bGlzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlZhaWtuZSBrw7VsaXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iTG9vYnVzaXRlIHJha2VuZHVzZXN0IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiJNw6RyZ3VhbmRlc3Qgb24gbG9vYnV0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiJNw6RyZ3VhbmRlIHZhcmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IktpaXJzZWFkZWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IkhpbGp1dGlzZWQgcmFrZW5kdXNlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiJLYXN1dGFqYSA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4iTW9iaWlsaSA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkFrdTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJMZW5udWtpcmXFvmlpbTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+Ik3DpMOkcmF0dWQgw6RyYXR1czogPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJH4oCTM0cgYW5kbWVzaWRlIGtlZWxhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcgYW5kbWVzaWRlIGtlZWxhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+Ik1vYmlpbG5lIGFuZG1lc2lkZSBrZWVsYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IkFuZG1la2FzdXR1cyBrZWVsYXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiJPbGV0ZSBqw7V1ZG51ZCBtw6TDpHJhdHVkIGFuZG1la2FzdXR1c2UgcGlpcmluaS5cblxuS3VpIGzDvGxpdGF0ZSBhbmRtZXNpZGUgdXVlc3RpIHNpc3NlLCBzaWlzIHbDtWliIG9wZXJhYXRvciB0ZWlsdCB0YXN1IHbDtXR0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4iTHViYSBhbmRtZXNpZGUgdXVlc3RpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IkludGVybmV0aS3DvGhlbmR1cyBwdXVkdWIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaUZpIG9uIMO8aGVuZGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQUy1pIG90c2ltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkdQUy1pIG3DpMOkcmF0dWQgYXN1a29odCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+Ikt1c3R1dGEga8O1aWsgdGVhdGlzZWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IlJha2VuZHVzZSB0ZWF2ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iRWtyYWFuaSBww7bDtnJhbWluZSB0b2ltdWIgYXV0b21hYXRzZWx0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iRWtyYWFuIG9uIGx1a3VzdGF0dWQgaG9yaXNvbnRhYWxzdXVuYXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkVrcmFhbiBvbiBsdWt1c3RhdHVkIHZlcnRpa2FhbHN1dW5hcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iVW5pc3R1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJMZW5udXJlxb5paW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnaW5nX2xhYmVsIiBtc2dpZD0iNDkwMDc0Nzc0NDY1MzA5MjA5Ij4iTGFhZGltaW5lLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IkxhZXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzZWFkZXQpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCbHVldG9vdGggb24gdsOkbGphcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iSGVsZWR1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iQXV0b21hYXRuZSBww7bDtnJhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJQw7bDtnJhbWluZSBsdWt1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJTaXNlc3R1c21lZXRvZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IkFzdWtvaHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iQXN1a29odCBvbiB2w6RsamFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+Ik1lZWRpYXNlYWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJBaW51bHQgaMOkZGFhYmlrw7VuZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiJTZWFkZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+IkFlZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4iTWluYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2lGaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLDnGhlbmR1cyBwdXVkdWIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iVsO1cmt1IHBvbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaUZpLcO8aGVuZHVzIG9uIHbDpGxqYXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2lGaS1la3JhYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJKdWh0bWV0YSBla3JhYW5pw7xoZW5kdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJIZWxlZHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE9NQUFUTkUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iTcOkcmd1YW5kZWQgaWxtdXZhZCBzaWlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iSnV1cmRlcMOkw6RzIGlnYWwgYWphbCBzw7VybWVnYSBhbGxhIHDDvGhraWRlcy5cblPDvHN0ZWVtaSBqdWh0bnVwcHVkZSBqYW9rcyBww7xoa2lnZSB1dWVzdGkgYWxsYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJSaWJhIGt1dmFtaXNla3MgcMO8aGtpZ2UgZWtyYWFuaSBzZXJ2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iU8O8c3RlZW1pcmliYSBrdXZhbWlzZWtzIHDDvGhraWdlIGVrcmFhbmkgc2VydmFzdCI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKaW5kZXggYjA5NTUxOS4uMmNiNDBhMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+Itix2K8g2qnYsdiv2YYg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINin2K7bjNixIjwvc3RyaW5nPgogICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgogICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMSDYqNix2YbYp9mF2Ycg2KfYrtuM2LEiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCDYqNix2YbYp9mF2YfigIwg2KfYrtuM2LEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiLigI8lZCDYqNix2YbYp9mF2YfigIwg2KfYrtuM2LEiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i2KfYudmE2KfZhtuMINmF2YjYrNmI2K8g2YbbjNiz2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+Itiv2LEg2K3Yp9mEINin2YbYrNin2YUiPC9zdHJpbmc+CkBAIC0zNSw3ICszNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiLYtNin2LHamNixINix2Kcg2YXYqti12YQg2qnZhtuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiLYqNin2KrYsduMINiv2LEg2K3Yp9mEINqp2YUg2LTYr9mGINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiDYqNin2YLbjNmF2KfZhtiv2Ycg2KfYs9iqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+Iti02KfYsdqYIFVTQiDZvti02KrbjNio2KfZhtuMINmG2YXbjOKAjNi02YjYry5cbtmB2YLYtyDYp9iyINi02KfYsdqY2LEg2KfYsdin2KbZhyDYtNiv2Ycg2KfYs9iq2YHYp9iv2Ycg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IuKAj9i02KfYsdqYIFVTQiDZvti02KrbjNio2KfZhtuMINmG2YXbjOKAjNi02YjYry5cbtmB2YLYtyDYp9iyINi02KfYsdqY2LEg2KfYsdin2KbZhyDYtNiv2Ycg2KfYs9iq2YHYp9iv2Ycg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+Itin2LPYqtmB2KfYr9mHINin2LIg2KjYp9iq2LHbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+Itiq2YbYuNuM2YXYp9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaS1GaSI8L3N0cmluZz4KQEAgLTQ3LDIyICs0NywyMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+Itin2KrYtdin2YQg2KfbjNmG2KrYsdmG2KrbjCDYqNinINio2YTZiNiq2YjYqyDYqtmE2YHZhiDZh9mF2LHYp9mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i2KrZhti424zZhSDYsdmI2LTigIzZh9in24wg2YjYsdmI2K/bjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+Iti12YHYrdmH4oCM2qnZhNuM2K8g2YHbjNiy24zaqduMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+Itio2Ycg2KjYsdmG2KfZhdmHIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g2KfYrNin2LLZhyDZhduM4oCM2K/Zh9uM2K8g2KjZhyDYr9iz2Krar9in2YcgVVNCINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNiv2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+Itio2Ycg2KjYsdmG2KfZhdmHIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINiq2Kcg2KjZhyDZiNiz24zZhNmHINis2KfZhtio24wgVVNCINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNiv2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+ItmI2YLYqtuMINin24zZhiDYr9iz2Krar9in2YcgVVNCINmI2LXZhCDYp9iz2KrYjCA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+INio2KfYsiDYtNmI2K/YnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4i2YjZgtiq24wg2KfbjNmGINmI2LPbjNmE2Ycg2KzYp9mG2KjbjCBVU0Ig2YjYtdmEINin2LPYqtiMIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g2KjYp9iyINi02YjYr9ifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i2YfbjNqGINio2LHZhtin2YXZh9mUINqp2KfYsdio2LHYr9uMINmG2LXYqCDYtNiv2YfigIzYp9uMINio2Kcg2KfbjNmGINmI2LPbjNmE2Ycg2KzYp9mG2KjbjCBVU0Ig2qnYp9ixINmG2YXbjOKAjNqp2YbYry4g2K/YsSA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiDYr9ix2KjYp9ix2YfZlCDYp9uM2YYg2YjYs9uM2YTZhyDYrNin2YbYqNuMINin2LfZhNin2LnYp9iqINio24zYtNiq2LHbjCDaqdiz2Kgg2qnZhtuM2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+ItmE2YjYp9iy2YUg2KzYp9mG2KjbjCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4i4oCP2KjZhyDYqNix2YbYp9mF2YcgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDYp9is2KfYstmHINmF24zigIzYr9mH24zYryDYqNmHINiv2LPYqtqv2KfZhyBVU0Ig2K/Ys9iq2LHYs9uMINiv2KfYtNiq2Ycg2KjYp9i02K/YnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4i4oCP2KjZhyDYqNix2YbYp9mF2YcgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDYqNmHINmI2LPbjNmE2Ycg2KzYp9mG2KjbjCBVU0Ig2K/Ys9iq2LHYs9uMINiv2KfYtNiq2Ycg2KjYp9i02K/YnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i4oCP2YjZgtiq24wg2KfbjNmGINiv2LPYqtqv2KfZhyBVU0Ig2YjYtdmEINin2LPYqtiMIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g2KjYp9iyINi02YjYr9ifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLigI/ZiNmC2KrbjCDYp9uM2YYg2YjYs9uM2YTZhyDYrNin2YbYqNuMIFVTQiDZiNi12YQg2KfYs9iq2IwgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDYqNin2LIg2LTZiNiv2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLigI/Zh9uM2oYg2KjYsdmG2KfZhdmH2ZQg2qnYp9ix2KjYsdiv24wg2YbYtdioINi02K/Zh+KAjNin24wg2KjYpyDYp9uM2YYg2YjYs9uM2YTZhyDYrNin2YbYqNuMIFVTQiDaqdin2LEg2YbZhduM4oCM2qnZhtivLiDYr9ixIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+INiv2LHYqNin2LHZh9mUINin24zZhiDZiNiz24zZhNmHINis2KfZhtio24wg2KfYt9mE2KfYudin2Kog2KjbjNi02KrYsduMINqp2LPYqCDaqdmG24zYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4i4oCP2YTZiNin2LLZhSDYrNin2YbYqNuMIFVTQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4i2YXYtNin2YfYr9mHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4i2KfYs9iq2YHYp9iv2Ycg2KjZhyDYtdmI2LHYqiDZvtuM2LTigIzZgdix2LYg2KjYsdin24wg2KfbjNmGINiv2LPYqtqv2KfZhyBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiLYp9iz2KrZgdin2K/ZhyDYqNmHINi12YjYsdiqINm+24zYtOKAjNmB2LHYtiDYqNix2KfbjCDYp9uM2YYg2K/Ys9iq2q/Yp9mHIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4i2KfYrNin2LLZhyDYqNmHINin2LTaqdin2YTigIzYstiv2KfbjNuMIFVTQtifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+Itin2KvYsSDYp9mG2q/YtNiqINqp2YTbjNivIFJTQSDYsdin24zYp9mG2Yc6IFxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IuKAj9in2LPYqtmB2KfYr9mHINio2Ycg2LXZiNix2Kog2b7bjNi04oCM2YHYsdi2INio2LHYp9uMINin24zZhiDYr9iz2Krar9in2YcgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i4oCP2KfYs9iq2YHYp9iv2Ycg2KjZhyDYtdmI2LHYqiDZvtuM2LTigIzZgdix2LYg2KjYsdin24wg2KfbjNmGINiv2LPYqtqv2KfZhyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IuKAj9in2KzYp9iy2Ycg2KjZhyDYp9i02qnYp9mE4oCM2LLYr9in24zbjCBVU0LYnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiLigI/Yp9ir2LEg2KfZhtqv2LTYqiDaqdmE24zYryBSU0Eg2LHYp9uM2KfZhtmHOiBcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+ItmH2YXbjNi02Ycg2KfYsiDYp9uM2YYg2LHYp9uM2KfZhtmHINin2YbYrNin2YUg2LTZiNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i2KjYstix2q/ZhtmF2KfbjNuMINio2LHYp9uMINm+2LEg2qnYsdiv2YYg2LXZgdit2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i2q/Ys9iq2LHYr9mHINqp2LHYr9mGINio2LHYp9uMINm+2LEg2qnYsdiv2YYg2LXZgdit2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLYqNiy2LHar9mG2YXYp9uM24wg2LPYp9iy2q/Yp9ix24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i2Kfar9ixINuM2qkg2KjYsdmG2KfZhdmHINio2LHYp9uMINi12YHYrdmHINqp2YjahtqpINiq2LHbjCDYt9ix2KfYrduMINi02K/ZhyDYqNin2LTYr9iMINuM2qkg2qnZhtiq2LHZhCDYqNiy2LHar9mG2YXYp9uM24wg2KrZiNiz2Lcg2LPYp9i52Kog2YbYtNin2YYg2K/Yp9iv2Ycg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i2K/YsSDYrdin2YQg2LDYrtuM2LHZhyDYqti12YjbjNixINi12YHYrdmHLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i2K/YsSDYrdin2YQg2LDYrtuM2LHZhyDYqti12YjbjNixINi12YHYrdmHLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLYqti12YjbjNixINi12YHYrdmHINiw2K7bjNix2Ycg2LTYry4iPC9zdHJpbmc+CkBAIC03MCwxNCArNjgsMTYgQEAKICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLYqNix2KfbjCDZhdi02KfZh9iv2Ycg2KrYtdmI24zYsSDYtdmB2K3ZhyDYrtmI2K/YjCDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLYqti12YjbjNixINi12YHYrdmHINqv2LHZgdiq2Ycg2YbYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4i2KrYtdmI24zYsSDYtdmB2K3ZhyDYsNiu24zYsdmHINmG2LTYry4g2YXZhdqp2YYg2KfYs9iqINiv2LPYqtqv2KfZhyDYsNiu24zYsdmH4oCMINiv2LEg2K3Yp9mEINin2LPYqtmB2KfYr9mHINio2KfYtNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+Itqv2LLbjNmG2YfigIzZh9in24wg2KfZhtiq2YLYp9mEINmB2KfbjNmEIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+ItmG2LXYqCDYqNmH4oCM2LnZhtmI2KfZhiDYr9iz2Krar9in2Ycg2b7Yrti0INix2LPYp9mG2YcgKE1UUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLYqti12Kgg2KjZh+KAjNi52YbZiNin2YYg2K/ZiNix2KjbjNmGIChQVFApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLYqNix2YbYp9mF2YcgQW5kcm9pZCBGaWxlIFRyYW5zZmVyINix2Kcg2KjYsdin24wgTWFjINmG2LXYqCDaqdmG24zYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IuKAj9qv2LLbjNmG2YfigIzZh9in24wg2KfZhtiq2YLYp9mEINmB2KfbjNmEIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IuKAj9mG2LXYqCDYqNmH4oCM2LnZhtmI2KfZhiDYr9iz2Krar9in2Ycg2b7Yrti0INix2LPYp9mG2YcgKE1UUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLigI/Yqti12Kgg2KjZh+KAjNi52YbZiNin2YYg2K/ZiNix2KjbjNmGIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLigI/YqNix2YbYp9mF2YcgQW5kcm9pZCBGaWxlIFRyYW5zZmVyINix2Kcg2KjYsdin24wgTWFjINmG2LXYqCDaqdmG24zYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+Itio2LHar9i02KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i2LXZgdit2YfZlCDYp9i12YTbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+ItmF2YbZiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+Itio2LHZhtin2YXZh+KAjNmH2KfbjCDYp9iu24zYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+Itis2LPYqtis2YgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i2K/ZiNix2KjbjNmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLaqdmE24zYryDYqti624zbjNixINix2YjYtCDZiNix2YjYryDZhdiq2YYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+Itiv2qnZhdmHINio2LLYsdqv2YbZhdin24zbjCDYs9in2LLar9in2LEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLYqNiy2LHar9mG2YXYp9uM24wg2KfYsiDYtdmB2K3Zh+KAjNmH2KfbjCDaqdmI2obaqSDYqtinINio2LLYsdqvLiI8L3N0cmluZz4KQEAgLTk4LDE3ICs5OCwxNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+Itiv2Ygg2YbZiNin2LEg2KjYsdin24wg2K/Yp9iv2YcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i2LPZhyDZhtmI2KfYsSDYqNix2KfbjCDYr9in2K/Zhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i2YLYr9ix2Kog2LPbjNqv2YbYp9mEINiv2KfYr9mHINqp2KfZhdmEINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+Ildp4oCRRmkg2K7Yp9mF2YjYtC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2ktRmkg2YLYt9i54oCM2LTYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiLbjNqpINmG2YjYp9ixINio2LHYp9uMIFdp4oCRRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+Itiv2Ygg2YbZiNin2LEg2KjYsdin24wgV2nigJFGaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiLYs9mHINmG2YjYp9ixINio2LHYp9uMIFdp4oCRRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+ItmC2K/YsdiqINiz24zar9mG2KfZhCBXaeKAkUZpINqp2KfZhdmEINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+IldpTUFYINmI2KzZiNivINmG2K/Yp9ix2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYINiv2KfYsdin24wg24zaqSDZhtmI2KfYsSDYp9iz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWCDYr9in2LHYp9uMINiv2Ygg2YbZiNin2LEg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWCDYr9in2LHYp9uMINiz2Ycg2YbZiNin2LEg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4i2YLYr9ix2Kog2LPbjNqv2YbYp9mEIFdpTUFYINqp2KfZhdmEINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IuKAj1dp4oCRRmkg2K7Yp9mF2YjYtC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4i4oCPV2ktRmkg2YLYt9i54oCM2LTYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiLigI/bjNqpINmG2YjYp9ixINio2LHYp9uMIFdp4oCRRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IuKAj9iv2Ygg2YbZiNin2LEg2KjYsdin24wgV2nigJFGaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiLigI/Ys9mHINmG2YjYp9ixINio2LHYp9uMIFdp4oCRRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IuKAj9mC2K/YsdiqINiz24zar9mG2KfZhCBXaeKAkUZpINqp2KfZhdmEINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+IuKAj1dpTUFYINmI2KzZiNivINmG2K/Yp9ix2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IuKAj1dpTUFYINiv2KfYsdin24wg24zaqSDZhtmI2KfYsSDYp9iz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiLigI9XaU1BWCDYr9in2LHYp9uMINiv2Ygg2YbZiNin2LEg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiLigI9XaU1BWCDYr9in2LHYp9uMINiz2Ycg2YbZiNin2LEg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4i4oCP2YLYr9ix2Kog2LPbjNqv2YbYp9mEIFdpTUFYINqp2KfZhdmEINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiLZgdin2YLYryDYs9uM2q/Zhtin2YQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+ItmF2KrYtdmEINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+Itio2K/ZiNmGINmF24zZhNmHLiI8L3N0cmluZz4KQEAgLTEzNyw5ICsxMzcsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiLYqtmG2LjbjNmF2KfYqiDYs9uM2LPYqtmFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4i2KfYudmE2KfZhuKAjNmH2KcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+Itm+2KfaqSDaqdix2K/ZhiDYp9i52YTYp9mGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMg2YHYudin2YQg2LTYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4i2K/Ys9iq24zYp9io24wg2KjZhyBHUFMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJUZWxlVHlwZXdyaXRlciDZgdi52KfZhCDYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4i4oCPR1BTINmB2LnYp9mEINi02K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IuKAj9iv2LPYqtuM2KfYqNuMINio2YcgR1BTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4i4oCPVGVsZVR5cGV3cml0ZXIg2YHYudin2YQg2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl92aWJyYXRlIiBtc2dpZD0iNjY2NTg1MzYzMzY0MTU1MDU1Ij4i2LLZhtqvINmE2LHYsti024wuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+Itiy2YbaryDYqNuM4oCM2LXYr9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2YbYp9iv24zYr9mHINqv2LHZgdiq2Ycg2LTYry4iPC9zdHJpbmc+CkBAIC0xNTMsMjMgKzE1MywyNSBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+Itio2KfYqtix24wgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLYrdin2YTYqiDZh9mI2KfZvtuM2YXYpyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiLYqNmE2YjYqtmI2KsgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLZhdqp2KfZhiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+ItmH2LTYr9in2LEg2KjYsdin24wgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiDYqtmG2LjbjNmFINi02K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i2K/Yp9iv2YcgMkctM0cg2LrbjNix2YHYudin2YQg2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+Itiv2KfYr9mHIDRHINi624zYsSDZgdi52KfZhCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i4oCP2K/Yp9iv2YcgMkctM0cg2LrbjNix2YHYudin2YQg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IuKAj9iv2KfYr9mHIDRHINi624zYsSDZgdi52KfZhCDYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+Itiv2KfYr9mH4oCM2YfYp9uMINiq2YTZgdmGINmH2YXYsdin2Ycg2LrbjNix2YHYudin2YQg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4i2K/Yp9iv2Ycg2LrbjNix2YHYudin2YQg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+Itio2Ycg2K3Yr9in2qnYq9ixINmF2K3Yr9mI2K/ZhyDZhdi02K7YtSDYtNiv2Ycg2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYr9in2K/ZhyDYsdiz24zYr9mH4oCM2KfbjNivLlxuXG7Yr9ixINi12YjYsdiqINmB2LnYp9mEINqp2LHYr9mGINmF2KzYr9ivINiv2KfYr9mH2Iwg2YXZhdqp2YYg2KfYs9iqINin2LIg2LfYsdmBINin2b7Ysdin2KrZiNixINio2LHYp9uMINi02YXYpyDZh9iy24zZhtmHINmF2K3Yp9iz2KjZhyDYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+ItmB2LnYp9mEINqp2LHYr9mGINmF2KzYr9ivINiv2KfYr9mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+Itin2KrYtdin2YQg2KfbjNmG2KrYsdmG2KrbjCDZiNis2YjYryDZhtiv2KfYsdivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg2YXYqti12YQg2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i2KzYs9iq2KzZiCDYqNix2KfbjCBHUFMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i2YXaqdin2YYg2KrZhti424zZhSDYtNiv2Ycg2KrZiNiz2LcgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4i4oCPV2ktRmkg2YXYqti12YQg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i4oCP2KzYs9iq2KzZiCDYqNix2KfbjCBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i4oCP2YXaqdin2YYg2KrZhti424zZhSDYtNiv2Ycg2KrZiNiz2LcgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i2K/Ysdiu2YjYp9iz2KrigIzZh9in24wg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2YHYudin2YQg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i2b7Yp9qpINqp2LHYr9mGINiq2YXYp9mFINin2LnZhNin2YbigIzZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+Itin2LfZhNin2LnYp9iqINio2LHZhtin2YXZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i2LXZgdit2Ycg2KjZhyDYtdmI2LHYqiDYrtmI2K/aqdin2LEg2YXbjOKAjNqG2LHYrtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i2LXZgdit2Ycg2KfaqdmG2YjZhiDYr9ixINis2YfYqiDYp9mB2YLbjCDZgtmB2YQg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLYtdmB2K3ZhyDYp9qp2YbZiNmGINiv2LEg2KzZh9iqINi52YXZiNiv24wg2YLZgdmEINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i2YjbjNiq2LHbjNmGINiv2LPYsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLYsdmI24zYp9m+2LHYr9in2LLbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+Itin2KrYsdmG2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+Itit2KfZhNiqINmH2YjYp9m+24zZhdinIjwvc3RyaW5nPgpAQCAtMTgxLDExICsxODMsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i2LHZiNi02YbYp9uM24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+ItqG2LHYrti0INiu2YjYr9qp2KfYsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLahtix2K7YtCDZgtmB2YQg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiLZgtmB2YQg2LTYr9mHINiv2LEg2K3Yp9mE2Kog2LnZhdmI2K/bjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4i2YLZgdmEINi02K/ZhyDYr9ixINit2KfZhNiqINin2YHZgtuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Itix2YjYtCDZiNix2YjYr9uMIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+ItmF2qnYp9mGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+ItmF2qnYp9mGINiu2KfZhdmI2LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i2K/Ys9iq2q/Yp9mHINix2LPYp9mG2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+ItmB2YLYtyDYqtmF2KfYs+KAjNmH2KfbjCDYp9i22LfYsdin2LHbjCI8L3N0cmluZz4KQEAgLTE5NSwxMyArMTk3LDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+ItmF2KrYtdmEINmG24zYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+Iti02KjaqdmH4oCM2KfbjCDZhdmI2KzZiNivINmG24zYs9iqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg2K7Yp9mF2YjYtCDYp9iz2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmkgRGlzcGxheSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+ItmG2YXYp9uM2LQg2KjYr9mI2YYg2LPbjNmFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4i4oCPV2ktRmkg2K7Yp9mF2YjYtCDYp9iz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4i2YHYsdiz2KrYp9iv2YYg2LXZgdit2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLYsdmI2LTZhtin24zbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLYrtmI2K/aqdin2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i2KfYudmE2KfZhuKAjNmH2Kcg2K/YsSDYp9uM2YbYrNinINmG2YXYp9uM2LQg2K/Yp9iv2Ycg2YXbjOKAjNi02YjZhtivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i2KjYpyDaqdi024zYr9mGINin2Ybar9i02Kog2KjZhyDYt9ix2YEg2b7Yp9uM24zZhiDYqNmHINii2YbZh9inINiv2LPYqtix2LPbjCDZvtuM2K/YpyDaqdmG24zYry5cbtio2LHYp9uMINqp2YbYqtix2YTigIzZh9in24wg2LPbjNiz2KrZhSDYr9mI2KjYp9ix2Ycg2KfZhtqv2LTYqiDYrtmI2K8g2LHYpyDYqNmHINiz2YXYqiDZvtin24zbjNmGINio2qnYtNuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4i2KjYsdin24wg2YbZhdin24zYtCDZhtmI2KfYsdiMINin2Ybar9i02Kog2K7ZiNivINix2KfCoNin2LIg2YTYqNmH4oCMINi12YHYrdmHINio2Ycg2K/Yp9iu2YQg2Kjaqdi024zYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i2KjYsdin24wg2YbZhdin24zYtCDZhtmI2KfYsSDYs9uM2LPYqtmF2Iwg2KfZhtqv2LTYqiDYrtmI2K8g2LHYpyDYp9iyINmE2KjZh+KAjCDYtdmB2K3ZhyDYqNmHINiv2KfYrtmEINio2qnYtNuM2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i2K3Yp9mE2Kog2YjYp9ix2YjZhtqv24wg2LHZhtqvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i2K3Yp9mE2Kog2qnZhtiq2LHYp9iz2Kog2KjZh9io2YjYr9uM2KfZgdiq2YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Itit2KfZhNiqINiq2LXYrduM2K0g2LHZhtqvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiLZhdmF2qnZhiDYp9iz2Kog2LTYqNqp2Ydcbtiq2K3YqiDZhti42KfYsdiqINio2KfYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLYrNiz2KrYrNmIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+ItmE2LrYstin2YbYr9mGINio2Ycg2KjYp9mE2Kcg2KjYsdin24wgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+ItmE2LrYstin2YbYr9mGINio2Ycg2obZviDYqNix2KfbjCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbAppbmRleCAwNmUxOTI2Li40MWEwYmQ0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iU2FsbGkgYWluYSB0w6RsbMOkIHRpZXRva29uZWVsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab29tYWEga29rbyBuw6R5dHTDtsO2biI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJWZW55dMOkIGtva28gbsOkeXR0w7bDtm4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJZaHRlZW5zb3BpdnV1c3pvb21hdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iSm9zIHNvdmVsbHVzIG9uIHN1dW5uaXRlbHR1IHBpZW5lbW3DpGxsZSBuw6R5dMO2bGxlLCBrZWxsb24gdmllcmVlbiB0dWxlZSBuw6RreXZpaW4gem9vbWF1c3PDpMOkZGluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJUYWxsZW5uZXRhYW4ga3V2YWthYXBwYXVzdGEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJUYWxsZW5uZXRhYW4ga3V2YWthYXBwYXVzdGEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+Ikt1dmFrYWFwcGF1c3RhIHRhbGxlbm5ldGFhbi4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iQWxvaXR1c3BhaW5pa2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJWYWxpa2tvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iVmlpbWVhaWthaXNldCBzb3ZlbGx1a3NldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+Ikhha3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iS2FtZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJTecO2dHTDtnRhdmFuIHZhaWh0b3BhaW5pa2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IllodGVlbnNvcGl2dXVzem9vbWF1cy1wYWluaWtlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iWm9vbWFhIHBpZW5lbW3DpGx0w6Qgc3V1cmVtbWFsbGUgcnV1ZHVsbGUuIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQWtrdTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJMZW50b2tvbmV0aWxhIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJTaWphaW50aSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkjDpGx5dHlzIGFzZXRldHR1LCBhaWthOiA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLTNHLXRpZWRvbnNpaXJ0byBwb2lzIGvDpHl0w7ZzdMOkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEctdGllZG9uc2lpcnRvIHBvaXMga8OkeXTDtnN0w6QiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2lmaSB5aGRpc3RldHR5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJIYWV0YWFuIEdQUy15aHRleXR0w6QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iU2lqYWludGkgbcOkw6RyaXRldHR5IEdQUzpuIGF2dWxsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IlNpamFpbnRpcHl5bm7DtnQgYWt0aWl2aXNldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IlR5aGplbm7DpCBrYWlra2kgaWxtb2l0dWtzZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IlNvdmVsbHVrc2VuIHRpZWRvdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iUnV1dHUga8Okw6RudHl5IGF1dG9tYWF0dGlzZXN0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IlJ1dXR1IG9uIGx1a2l0dHUgdmFha2FzdXVudGFhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iUnV1dHUgb24gbHVraXR0dSBweXN0eXN1dW50YWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJKw6Rsa2lydW9rYXZpdHJpaW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IlVuZWxtYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTGVudG9rb25ldGlsYSI8L3N0cmluZz4KQEAgLTE4MSw2ICsxODMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJLaXJra2F1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iQXV0b21hYXR0aW5lbiBrw6TDpG50w7YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iS8Okw6RudMO2IGx1a2l0dHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iVmFha2EgbHVraXR0dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iUHlzdHkgbHVraXR0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJTecO2dHTDtnRhcGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJTaWphaW50aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJTaWphaW50aSBlaSBrw6R5dMO2c3PDpCI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iRWkgeWh0ZXl0dMOkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IkVpIHZlcmtrb2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaWZpLXlodGV5cyBwb2lzIGvDpHl0w7ZzdMOkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpZmktbsOkeXR0w7YiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJMYW5nYXRvbiBuw6R5dHTDtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJMw6RoZXR5c27DpHl0dMO2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iS2lya2thdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJJbG1vaXR1a3NldCBuw6RreXbDpHQgdMOkc3PDpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+Ik7DpGV0IGlsbW9pdHVrc2V0IGxpdVwndXR0YW1hbGxhIHNvcm1lYSBhbGFzIHJ1dWR1bGxhLlxuVm9pdCBwYWxhdXR0YWEgasOkcmplc3RlbG3DpG4gb2hqYWltZXQgbsOka3l2aWluIGxpdVwndXR0YW1hbGxhIHNvcm1lYSBhbGFzIHV1ZGVsbGVlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJUdW8gcGFsa2tpIG7DpGt5dmlpbiBsaXVcJ3V0dGFtYWxsYSBydXVkdW4gcmV1bmFzdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlR1byBqw6RyamVzdGVsbcOkcGFsa2tpIG7DpGt5dmlpbiBsaXVcJ3V0dGFtYWxsYSBydXVkdW4gcmV1bmFzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iS8Okw6RudGVpbmVuIHbDpHJpdGlsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IktvbnRyYXN0aW5wYXJhbm51c3RpbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IlbDpHJpbmtvcmphdXN0aWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJWZXJra29hIHNhYXRldGFhblxudmFsdm9hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJIYWt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkxpdVwndXRhIHlsw7ZzIGphIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJMaXVcJ3V0YSB2YXNlbW1hbGxlIGphIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnItckNBLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZyLXJDQS1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NzVmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZyLXJDQS1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiJMXCfDqWNyYW4gZXN0IGTDqXNvcm1haXMgdmVycm91aWxsw6kgYXUgZm9ybWF0IHBheXNhZ2UuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwODIzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+IklVIHN5c3TDqG1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+IkVmZmFjZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiJTdXBwcmltZXIgZGUgbGEgbGlzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4iSW5mb3JtYXRpb25zIHN1ciBsXCdhcHBsaWNhdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4iQXVjdW5lIGFwcGxpY2F0aW9uIHLDqWNlbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiJNYXNxdWVyIGxlcyBhcHBsaWNhdGlvbnMgcsOpY2VudGVzIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMcKgYXBwbGljYXRpb24gcsOpY2VudGUiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZMKgYXBwbGljYXRpb25zIHLDqWNlbnRlcyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiJBdWN1bmUgbm90aWZpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiJFbiBjb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbGF0ZXN0X2V2ZW50c190aXRsZSIgbXNnaWQ9IjY1OTQ3Njc0Mzg1Nzc1OTMxNzIiPiJOb3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4iQnJhbmNoZXIgbGUgY2hhcmdldXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiJMZSBuaXZlYXUgZGUgbGEgYmF0dGVyaWUgZXN0IGZhaWJsZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiByZXN0YW50KHMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IkNoYXJnZW1lbnQgVVNCIG5vbiBjb21wYXRpYmxlLlxuVm91cyBkZXZleiB1dGlsaXNlciBsZSBjaGFyZ2V1ciBmb3VybmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+IlV0aWxpc2F0aW9uIGRlIGxhIGJhdHRlcmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4iUGFyYW3DqHRyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiJNb2RlIEF2aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IlJvdGF0aW9uIGF1dG8gZGUgbFwnw6ljcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4iTVVFVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4iQVVUT01BVElRVUUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiJOb3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkNvbm5leGlvbiBCbHVldG9vdGggcGFydGFnw6llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4iQ29uZmlndXJlciBsZXMgbW9kZXMgZGUgc2Fpc2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4iQ2xhdmllciBwaHlzaXF1ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiJBdXRvcmlzZXIgbFwnYXBwbGljYXRpb24gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDDoCBhY2PDqWRlciBhdSBww6lyaXBow6lyaXF1ZSBVU0I/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiJBdXRvcmlzZXIgbFwnYXBwbGljYXRpb24gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDDoCBhY2PDqWRlciDDoCBsXCdhY2Nlc3NvaXJlIFVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+Ik91dnJpciA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IGxvcnMgZGUgbGEgY29ubmV4aW9uIGRlIGNlIHDDqXJpcGjDqXJpcXVlIFVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+Ik91dnJpciA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IGxvcnMgZGUgbGEgY29ubmV4aW9uIGRlIGNldCBhY2Nlc3NvaXJlIFVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiJBdWN1bmUgYXBwbGljYXRpb24gaW5zdGFsbMOpZSBjb21wYXRpYmxlIGF2ZWMgYWNjZXNzb2lyZSBVU0IuIEVuIHNhdm9pciBwbHVzIHN1ciA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iQWNjZXNzb2lyZSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+IkFmZmljaGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4iVXRpbGlzZXIgcGFyIGTDqWZhdXQgcG91ciBjZSBww6lyaXBow6lyaXF1ZSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiJVdGlsaXNlciBwYXIgZMOpZmF1dCBwb3VyIGNldCBhY2Nlc3NvaXJlIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4iQXV0b3Jpc2VyIGxlIGTDqWJvZ2FnZSBVU0I/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+IkVtcHJlaW50ZSBudW3DqXJpcXVlIGRlIGxhIGNsw6kgUlNBIGRlIGxcJ29yZGluYXRldXLCoDogXG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJUb3Vqb3VycyBhdXRvcmlzZXIgc3VyIGNldCBvcmRpbmF0ZXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWm9vbWVyIHBvdXIgcmVtcGxpciBsXCfDqWNyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iw4l0aXJlciBwb3VyIHJlbXBsaXIgbFwnw6ljcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IkVucmVnaXN0cmVtZW50IGNhcHR1cmUgw6ljcmFu4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iRW5yZWdpc3RyZW1lbnQgY2FwdHVyZSDDqWNyYW7igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IkVucmVnaXN0cmVtZW50IGRlIGxhIGNhcHR1cmUgZFwnw6ljcmFuIGVuIGNvdXJz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiJDYXB0dXJlIGRcJ8OpY3JhbiByw6l1c3NpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiJBcHB1eWV6IHBvdXIgYWZmaWNoZXIgdm90cmUgY2FwdHVyZSBkXCfDqWNyYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiJJbXBvc3NpYmxlIGRlIHLDqWFsaXNlciB1bmUgY2FwdHVyZSBkXCfDqWNyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IkltcG9zc2libGUgZW5yZWdpc3RyZXIgY2FwdHVyZSBkXCfDqWNyYW4uIFDDqXJpcGjDqXJpcXVlIGRlIHN0b2NrYWdlIHBldXQtw6p0cmUgZW4gY291cnMgZFwndXRpbGlzYXRpb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iT3B0aW9ucyB0cmFuc2ZlcnQgZmljaGllcnMgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4iSW5zdGFsbGVyIGNvbW1lIHVuIGxlY3RldXIgbXVsdGltw6lkaWEgKE1UUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiJJbnN0YWxsZXIgY29tbWUgdW4gYXBwYXJlaWwgcGhvdG8gKFBUUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+Ikluc3RhbGxlciBhcHBsaWNhdGlvbiBBbmRyb2lkwqBGaWxlwqBUcmFuc2ZlciAoTWFjKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IlByw6ljw6lkZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IkRvbWljaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IkFwcGxpY2F0aW9ucyByw6ljZW50ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJSZWNoZXJjaGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkFwcGFyZWlsIHBob3RvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJCb3V0b24gXCJDaGFuZ2VyIGxlIG1vZGUgZGUgc2Fpc2llXCIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iQm91dG9uIFwiWm9vbSBkZSBjb21wYXRpYmlsaXTDqVwiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tIGRlIGNvbXBhdGliaWxpdMOpIGF2ZWMgbGEgdGFpbGxlIGRlIGxcJ8OpY3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiJCbHVldG9vdGggY29ubmVjdMOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IkJsdWV0b290aCBkw6ljb25uZWN0w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiJCYXR0ZXJpZSB2aWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X29uZV9iYXIiIG1zZ2lkPSI3Nzc0ODg3NzIxODkxMDU3NTIzIj4iTml2ZWF1IGRlIGJhdHRlcmllwqA6IGZhaWJsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiJOaXZlYXUgZGUgYmF0dGVyaWXCoDogbW95ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiJOaXZlYXUgZGUgYmF0dGVyaWXCoDogYm9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4iQmF0dGVyaWUgcGxlaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19waG9uZSIgbXNnaWQ9IjQ4OTQ3MDg5MzcwNTI2MTEyODEiPiJBdWN1biBzaWduYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiJTaWduYWzCoDogZmFpYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiJTaWduYWzCoDogbW95ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3RocmVlX2JhcnMiIG1zZ2lkPSI4NTIxOTA0ODQzOTE5OTcxODg1Ij4iU2lnbmFswqA6IGJvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4iU2lnbmFsIGV4Y2VsbGVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiJBdWN1biBzaWduYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiJTaWduYWwgZmFpYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+IlNpZ25hbCBtb3llbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IlNpZ25hbCBib24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4iU2lnbmFsIGV4Y2VsbGVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4iV2ktRmkgZMOpc2FjdGl2w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2ktRmkgZMOpY29ubmVjdMOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4iU2lnbmFsIFdpLUZpIGZhaWJsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiJTaWduYWwgV2ktRmkgbW95ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiJTaWduYWwgV2ktRmkgYm9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IlNpZ25hbCBXaS1GaSBleGNlbGxlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+IkF1Y3VuIHNpZ25hbCBXaU1BWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJTaWduYWwgV2lNQVjCoDogZmFpYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJTaWduYWwgV2lNQVjCoDogbW95ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iU2lnbmFsIFdpTUFYwqA6IGJvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4iU2lnbmFsIFdpTUFYIDogZXhjZWxsZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaWduYWwiIG1zZ2lkPSI3MDY0NjQ1MzIwNzgyNTg1MTY3Ij4iQXVjdW4gc2lnbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+Ik5vbiBjb25uZWN0w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiJBdWN1biBzaWduYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4iU2lnbmFsIGZhaWJsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4iTW95ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4iQm9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiJTaWduYWwgZXhjZWxsZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IkFjdGl2w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IkTDqXNhY3RpdsOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiJDb25uZWN0w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjF4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25faHNwYSIgbXNnaWQ9IjIwMzIzMjg4NTU0NjI2NDUxOTgiPiIzRysiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iM0crIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiJJdGluw6lyYW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2VkZ2UiIG1zZ2lkPSI0NDc3NDU3MDUxNjMxOTc5Mjc4Ij4iRURHRSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJBdWN1bmUgY2FydGUgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IlBhcnRhZ2UgZGUgY29ubmV4aW9uIEJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+Ik1vZGUgQXZpb24iPC9zdHJpbmc+CisgICAgPCEtLSBTdHJpbmcuZm9ybWF0IGZhaWxlZCBmb3IgdHJhbnNsYXRpb24gLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsICg3NDUxNDc0MTg3MTEzMzcxOTY1KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiJQYXJhbcOodHJlcyBzeXN0w6htZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4iTm90aWZpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiJTdXBwcmltZXIgbGEgbm90aWZpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMgYWN0aXbDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJBY3F1aXNpdGlvbiBkZSBkb25uw6llcyBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IlTDqWzDqXNjcmlwdGV1ciBhY3RpdsOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IlNvbm5lcmllIGVuIG1vZGUgdmlicmV1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJTb25uZXJpZSBlbiBtb2RlIHNpbGVuY2lldXgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iQXBwbGljYXRpb24gXCI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz5cIiBpZ25vcsOpZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiJOb3RpZmljYXRpb24gbWFzcXXDqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfbm90aWZpY2F0aW9uX3NoYWRlIiBtc2dpZD0iNDY5MDI3NDg0NDQ0NzUwNDIwOCI+IlZvbGV0IGRlcyBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IlBhcmFtw6h0cmVzIHJhcGlkZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4iQXBwbGljYXRpb25zIHLDqWNlbnRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiJVdGlsaXNhdGV1ciA6IDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+IlNpZ25hbCBtb2JpbGXCoDogPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkJhdHRlcmllwqA6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJNb2RlIEF2aW9uwqA6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RowqA6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJMb2NhbGlzYXRpb24gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtZSByw6lnbMOpZSBzdXIgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkRvbm7DqWVzIDJHLTNHICBkw6lzYWN0aXbDqWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iRG9ubsOpZXMgNEcgZMOpc2FjdGl2w6llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX21vYmlsZV90aXRsZSIgbXNnaWQ9IjEwNDYwNDcyNDg4NDQ4MjEyMDIiPiJEb25uw6llcyBtb2JpbGVzIGTDqXNhY3RpdsOpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiJEb25uw6llcyBkw6lzYWN0aXbDqWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4iVm91cyBhdmV6IGF0dGVpbnQgbGUgcGxhZm9uZCBkZSBjb25zb21tYXRpb24gZGUgZG9ubsOpZXMgc3DDqWNpZmnDqS5cblxuU2kgdm91cyB1dGlsaXNleiBkZXMgZG9ubsOpZXMgc3VwcGzDqW1lbnRhaXJlcywgY2VsbGVzLWNpIHBvdXJyb250IMOqdHJlIGZhY3R1csOpZXMgcGFyIGxcJ29ww6lyYXRldXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+IlLDqWFjdGl2ZXIgY29ubmV4aW9uIGRvbm7DqWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IkF1Y3VuZSBjb25uZXhpb24gSW50ZXJuZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJDb25uZWN0w6kgYXUgV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlJlY2hlcmNoZSBkZSBHUFMuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iUG9zaXRpb24gZMOpZmluaWUgcGFyIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IkRlbWFuZGVzIGRlIGxvY2FsaXNhdGlvbiBhY3RpdmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iU3VwcHJpbWVyIHRvdXRlcyBsZXMgbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvcm1hdGlvbnMgc3VyIGxcJ2FwcGxpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJMXCfDqWNyYW4gcGl2b3RlIGF1dG9tYXRpcXVlbWVudC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkxcJ8OpY3JhbiBlc3QgdmVycm91aWxsw6kgZW4gbW9kZSBwYXlzYWdlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJMXCfDqWNyYW4gZXN0IHZlcnJvdWlsbMOpIGVuIG1vZGUgcG9ydHJhaXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IlZpdHJpbmUgZGVzIGRlc3NlcnRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IsOJY3JhbiBkZSB2ZWlsbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTW9kZSBBdmlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiJFbiBjaGFyZ2UgKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IkNoYXJnw6llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IkJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IkJsdWV0b290aCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqBhcHBhcmVpbHMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCTFVFVE9PVEggRMOJU0FDVElWw4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+Ikx1bWlub3NpdMOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJSb3RhdGlvbiBhdXRvbWF0aXF1ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJSb3RhdGlvbiB2ZXJyb3VpbGzDqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iVmVycm91aWxsw6kgZW4gbW9kZSBwb3J0cmFpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iVmVycm91aWxsw6kgZW4gbW9kZSBwYXlzYWdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ik1vZGUgZGUgc2Fpc2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iUG9zaXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iTG9jYWxpc2F0aW9uIGTDqXNhY3RpdsOpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJBcHBhcmVpbCBtdWx0aW3DqWRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4iQXBwZWxzIGRcJ3VyZ2VuY2UgdW5pcXVlbWVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+IlBhcmFtw6h0cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdGltZV9sYWJlbCIgbXNnaWQ9IjQ2MzU5NjkxODIyMzk3MzY0MDgiPiJIZXVyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc191c2VyX2xhYmVsIiBtc2dpZD0iNTIzODk5NTYzMjEzMDg5Nzg0MCI+Ik1vaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iTm9uIGNvbm5lY3TDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJBdWN1biByw6lzZWF1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgZMOpc2FjdGl2w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iw4ljcmFuIGRpc3RhbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJMdW1pbm9zaXTDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTUFUSVFVRSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2RlIGRcJ2ludmVyc2lvbiBkZXMgY291bGV1cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2RlIGRcJ2FjY2VudHVhdGlvbiBkdSBjb250cmFzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZGUgZGUgY29ycmVjdGlvbiBkZXMgY291bGV1cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IkxlIHLDqXNlYXUgcGV1dFxuw6p0cmUgc3VydmVpbGzDqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlJlY2hlcmNoZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJGYWlyZSBnbGlzc2VyIGxlIGRvaWd0IHZlcnMgbGUgaGF1dMKgOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJGYWl0ZXMgZ2xpc3NlciB2b3RyZSBkb2lndCB2ZXJzIGxhIGdhdWNoZcKgcG91ciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAppbmRleCA3ZGIwN2UyLi43MGIzMGU2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iVG91am91cnMgYXV0b3Jpc2VyIHN1ciBjZXQgb3JkaW5hdGV1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb21lciBwb3VyIHJlbXBsaXIgbFwnw6ljcmFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IsOJdGlyZXIgcG91ciByZW1wbGlyIGxcJ8OpY3JhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+Ilpvb20gZGUgY29tcGF0aWJpbGl0w6kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iU2kgdW5lIGFwcGxpY2F0aW9uIGEgw6l0w6kgY29uw6d1ZSBwb3VyIHVuIMOpY3JhbiBwbHVzIHBldGl0LCB1bmUgY29tbWFuZGUgZGUgem9vbSBzXCdhZmZpY2hlIMOgIGPDtHTDqSBkZSBsXCdob3Jsb2dlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJFbnJlZ2lzdHJlbWVudCBjYXB0dXJlIMOpY3JhbuKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IkVucmVnaXN0cmVtZW50IGRlIGxhIGNhcHR1cmUgZFwnw6ljcmFu4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJFbnJlZ2lzdHJlbWVudCBkZSBsYSBjYXB0dXJlIGRcJ8OpY3JhbiBlbiBjb3Vyc+KApiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJBY2N1ZWlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IkFwcGxpY2F0aW9ucyByw6ljZW50ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJSZWNoZXJjaGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkFwcGFyZWlsIHBob3RvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJCb3V0b24gXCJDaGFuZ2VyIGxlIG1vZGUgZGUgc2Fpc2llXCIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iQm91dG9uIFwiWm9vbSBkZSBjb21wYXRpYmlsaXTDqVwiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tIGRlIGNvbXBhdGliaWxpdMOpIGF2ZWMgbGEgdGFpbGxlIGRlIGxcJ8OpY3JhbiI8L3N0cmluZz4KQEAgLTE1NSw2ICsxNTUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkJhdHRlcmllwqA6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJNb2RlIEF2aW9uwqA6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RowqA6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJMb2NhbGlzYXRpb24gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtZSByw6lnbMOpZSBzdXIgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkRvbm7DqWVzIDJHLTNHIGTDqXNhY3RpdsOpZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJEb25uw6llcyA0RyBkw6lzYWN0aXbDqWVzIjwvc3RyaW5nPgpAQCAtMTY2LDEyICsxNjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IkNvbm5lY3TDqSBhdSBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iUmVjaGVyY2hlIGRlIEdQUy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJQb3NpdGlvbiBkw6lmaW5pZSBwYXIgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iRGVtYW5kZXMgZGUgbG9jYWxpc2F0aW9uIGFjdGl2ZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJTdXBwcmltZXIgdG91dGVzIGxlcyBub3RpZmljYXRpb25zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkluZm9ybWF0aW9ucyBzdXIgbFwnYXBwbGljYXRpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkxcJ8OpY3JhbiBwaXZvdGUgYXV0b21hdGlxdWVtZW50LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iTFwnw6ljcmFuIGVzdCB2ZXJyb3VpbGzDqSBlbiBtb2RlIHBheXNhZ2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkxcJ8OpY3JhbiBlc3QgdmVycm91aWxsw6kgZW4gbW9kZSBwb3J0cmFpdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iVml0cmluZSBkZXMgZGVzc2VydHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iw4ljcmFuIGRlIHZlaWxsZSBpbnRlcmFjdGlmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+Ik1vZGUgYXZpb24iPC9zdHJpbmc+CkBAIC0xODMsMTEgKzE4NSwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJMdW1pbm9zaXTDqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iUm90YXRpb24gYXV0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJSb3RhdGlvbiBibG9xdcOpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiJWZXJyb3VpbGzDqSBlbiBtb2RlIHBvcnRyYWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiJWZXJyb3VpbGzDqSBlbiBtb2RlIHBheXNhZ2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iTW9kZSBkZSBzYWlzaWUiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsICg3NDY0NTQ0MDg2NTA3MzMxNDU5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iTG9jYWxpc2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IkxvY2FsaXNhdGlvbiBkw6lzYWN0aXbDqWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iQXBwYXJlaWwgbXVsdGltw6lkaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IkFwcGVscyBkXCd1cmdlbmNlIHVuaXF1ZW1lbnQiPC9zdHJpbmc+CkBAIC0xOTgsMTIgKzIwMCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5vbiBjb25uZWN0w6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iQXVjdW4gcsOpc2VhdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIGTDqXNhY3RpdsOpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpwqBEaXNwbGF5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iQWZmaWNoYWdlIHNhbnMgZmlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IsOJY3JhbiBzdXIgbGVxdWVsIGxcJ2FmZmljaGFnZSBlc3QgZGlmZnVzw6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJMdW1pbm9zaXTDqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTUFUSVFVRSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJMZXMgbm90aWZpY2F0aW9ucyBz4oCZYWZmaWNoZW50IGljaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IkFjY8OpZGV6LXkgw6AgdG91dCBtb21lbnQgZW4gZmFpc2FudCBnbGlzc2VyIGxlIGRvaWd0IHZlcnMgbGUgYmFzLlxuUsOpcMOpdGV6IGxcJ29ww6lyYXRpb24gcG91ciBhY2PDqWRlciBhdXggY29tbWFuZGVzIGR1IHN5c3TDqG1lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IkZhaXRlcyBnbGlzc2VyIHZvdHJlIGRvaWd0IHN1ciBsZSBjw7R0w6kgZGUgbFwnw6ljcmFuIHBvdXIgYWZmaWNoZXIgbGEgYmFycmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJGYWl0ZXMgZ2xpc3NlciB2b3RyZSBkb2lndCDDoCBwYXJ0aXIgZFwndW4gY8O0dMOpIGRlIGxcJ8OpY3JhbiBwb3VyIGFmZmljaGVyIGxhIGJhcnJlIHN5c3TDqG1lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2RlIGRcJ2ludmVyc2lvbiBkZXMgY291bGV1cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2RlIGRcJ2FjY2VudHVhdGlvbiBkdSBjb250cmFzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZGUgZGUgY29ycmVjdGlvbiBkZXMgY291bGV1cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IkxlIHLDqXNlYXUgcGV1dFxuw6p0cmUgc3VydmVpbGzDqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlJlY2hlcmNoZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRmFpdGVzIGdsaXNzZXIgdmVycyBsZSBoYXV0IHBvdXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkZhaXRlcyBnbGlzc2VyIHZlcnMgbGEgZ2F1Y2hlIHBvdXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKaW5kZXggODYyZTJlZi4uMzE2N2ZlNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiLgpLjgpL/gpLjgpY3igI3gpJ/gpK4gVUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4i4KS44KS+4KSr4KS8IOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IuCkuOClguCkmuClgCDgpLjgpYcg4KSo4KS/4KSV4KS+4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+IuCkj+CkquCljeKAjeCksuCkv+CkleClh+CktuCkqCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IuCkleCli+CkiCDgpLngpL7gpLIg4KS54KWAIOCkleClhyDgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSo4KS54KWA4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiLgpLngpL7gpLIg4KS54KWAIOCkleClhyDgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSW4KS+4KSw4KS/4KScIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiLgpJDgpKrgpY3gpLgg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLgpJXgpYvgpIgg4KS54KS+4KSyIOCkueClgCDgpJXgpYcg4KSQ4KSq4KWN4KS4ICDgpKjgpLngpYDgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IuCkueCkvuCksiDgpLngpYAg4KSV4KWHIOCkkOCkquCljeCkuCAg4KSW4KS+4KSw4KS/4KScIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEg4KS54KS+4KSyIOCkueClgCDgpJXgpL4g4KSP4KSq4KWN4KSy4KS/4KSV4KWH4KS24KSoIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQg4KS54KS+4KSyIOCkueClgCDgpJXgpYcg4KSP4KSq4KWN4KSy4KS/4KSV4KWH4KS24KSoIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEg4KS54KS+4KSyIOCkueClgCDgpJXgpL4g4KSQ4KSq4KWN4KS4IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQg4KS54KS+4KSyIOCkueClgCDgpJXgpYcg4KSQ4KSq4KWN4KS4IjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IuCkleCli+CkiCDgpLjgpYLgpJrgpKjgpL4g4KSo4KS54KWA4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiLgpJHgpKjgpJfgpYvgpIfgpILgpJciPC9zdHJpbmc+CkBAIC00MCwxOCArNDAsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+IuCkuOClh+Ckn+Ckv+CkguCklyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+IuCkueCkteCkvuCkiCDgpJzgpLngpL7gpJwg4KSu4KWL4KShIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IuCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpLjgpY3igI3gpLXgpKQ6IOCkmOClgeCkruCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KSF4KSq4KSo4KWH4KSG4KSqIOCkmOClgeCkruCkvuCkj+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+IuCkruCljeCkr+ClguCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IuCkuOCljeCkteCkpDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiLgpLjgpYLgpJrgpKjgpL7gpI/gpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4iQmx1ZXRvb3RoIOCkn+ClgOCkpuCksCDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i4KSH4KSo4KSq4KWB4KSfIOCkquCkpuCljeCkp+CkpOCkvyDgpLjgpYfgpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4i4KSt4KWM4KSk4KS/4KSVIOCkleClgOCkrOCli+CksOCljeCkoSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiLgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKggPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgpJXgpYsgVVNCIOCkieCkquCkleCksOCkoyDgpKTgpJUg4KSq4KS54KWB4KSC4KSa4KSo4KWHIOCkpuClh+Ckgj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IuCkj+CkquCljeCksuCkv+CkleClh+CktuCkqCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOCkleCliyBVU0Ig4KS44KS54KS+4KSv4KSVIOCkieCkquCkleCksOCkoyDgpKTgpJUg4KSq4KS54KWB4KSC4KSa4KSo4KWHIOCkpuClh+Ckgj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4i4KSQ4KSq4KWN4KS4ICA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOCkleCliyBVU0Ig4KSJ4KSq4KSV4KSw4KSjIOCkpOCklSDgpKrgpLngpYHgpILgpJrgpKjgpYcg4KSm4KWH4KSCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4i4KSQ4KSq4KWN4KS4ICA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOCkleCliyBVU0Ig4KS44KS54KS+4KSv4KSVIOCkieCkquCkleCksOCkoyDgpKTgpJUg4KSq4KS54KWB4KSC4KSa4KSo4KWHIOCkpuClh+Ckgj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IuCknOCkrCDgpK/gpLkgVVNCIOCkieCkquCkleCksOCkoyDgpJXgpKjgpYfgpJXgpY3gpJ8g4KSV4KS/4KSv4KS+IOCknOCkvuCkjywg4KSk4KSsIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g4KSV4KWLIOCkluCli+CksuClh+Ckgj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IuCknOCkrCDgpK/gpLkgVVNCIOCkj+CkuOClh+CkuOCksOClgCDgpJXgpKjgpYfgpJXgpY3gpJ8g4KSV4KWAIOCknOCkvuCkjywg4KSk4KSsIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g4KSV4KWLIOCkluCli+CksuClh+Ckgj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLgpIfgpLggVVNCIOCkuOCkueCkvuCkr+CklSDgpIngpKrgpJXgpLDgpKMg4KSV4KWHIOCkuOCkvuCkpSDgpJXgpYvgpIgg4KSt4KWAIOCkh+CkguCkuOCljeCkn+ClieCksiDgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KS+4KSuIOCkqOCkueClgOCkgiDgpJXgpLDgpKTgpL4uIOCkh+CkuCDgpLjgpLngpL7gpK/gpJUg4KSJ4KSq4KSV4KSw4KSjIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkr+CkueCkvuCkgiDgpIXgpKfgpL/gpJUg4KSc4KS+4KSo4KWH4KSCOiA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IuCkh+CkuCBVU0Ig4KS44KS54KS+4KSv4KSVIOCkieCkquCkleCksOCkoyDgpJXgpYcg4KS44KS+4KSlIOCkleCli+CkiCDgpK3gpYAg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkkOCkquCljeCkuCAg4KSV4KS+4KSuIOCkqOCkueClgOCkgiDgpJXgpLDgpKTgpL4uIOCkh+CkuCDgpLjgpLngpL7gpK/gpJUg4KSJ4KSq4KSV4KSw4KSjIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkr+CkueCkvuCkgiDgpIXgpKfgpL/gpJUg4KSc4KS+4KSo4KWH4KSCOiA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCIOCkuOCkueCkvuCkr+CklSDgpLjgpL7gpKfgpKgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+IuCkpuClh+CkluClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IuCkh+CkuCBVU0Ig4KSJ4KSq4KSV4KSw4KSjIOCkleClhyDgpLLgpL/gpI8g4KSh4KS/4KSr4KS84KWJ4KSy4KWN4oCN4KSfIOCksOClguCkqiDgpLjgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkleCksOClh+CkgiI8L3N0cmluZz4KQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i4KSH4KS4IOCkleCkguCkquCljeCkr+ClguCkn+CksCDgpLjgpYcg4KS54KSu4KWH4KS24KS+IOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KSt4KSw4KSo4KWHIOCkueClh+CkpOClgSDgpJzgpLzgpYLgpK4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IuCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpJXgpYsg4KSt4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSW4KWA4KSC4KSa4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4i4KS44KSC4KSX4KSk4KSk4KS+IOCknOCkvOClguCkriI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiLgpJzgpKwg4KSV4KS/4KS44KWAIOCkm+Cli+Ckn+ClgCDgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KSV4KWHIOCksuCkv+CkjyDgpI/gpKrgpY3igI3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KWLIOCkoeCkv+CknOCkvOCkvuCkh+CkqCDgpJXgpL/gpK/gpL4g4KSc4KS+4KSk4KS+IOCkueCliCwg4KSk4KWLIOCknOCkvOClguCkriDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpKMg4KSV4KWN4KSy4KWJ4KSVIOCkleClhyDgpKrgpL7gpLgg4KSm4KS/4KSW4KS+4KSIIOCkpuClh+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSo4KS24KWJ4KSfIOCkuOCkueClh+CknOCkviDgpJzgpL4g4KSw4KS54KS+IOCkueCliC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IuCkuOCljeCkleCljeCksOClgOCkqOCktuClieCknyDgpLjgpLngpYfgpJzgpL4g4KSc4KS+IOCksOCkueCkviDgpLngpYguLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IuCkuOCljeCkleCljeCksOClgOCkqOCktuClieCknyDgpLjgpLngpYfgpJzgpL4g4KSc4KS+IOCksOCkueCkviDgpLngpYguIjwvc3RyaW5nPgpAQCAtNzMsMTEgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJVU0Ig4KSr4KS84KS+4KSH4KSyIOCkuOCljeCkpeCkvuCkqOCkvuCkguCkpOCksOCkoyDgpLXgpL/gpJXgpLLgpY3gpKoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLgpK7gpYDgpKHgpL/gpK/gpL4g4KSq4KWN4KSy4KWH4KSv4KSwIOCkleClhyDgpLDgpYLgpKog4KSu4KWH4KSCIOCkruCkvuCkieCkguCknyDgpJXgpLDgpYfgpIIgKE1UUCkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLgpJXgpYjgpK7gpLDgpYcg4KSV4KWHIOCksOClguCkqiDgpK7gpYfgpIIg4KSu4KS+4KSJ4KSC4KSfIOCkleCksOClh+CkgiAoUFRQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iTWFjIOCkleClhyDgpLLgpL/gpI8gQW5kcm9pZCBGaWxlIFRyYW5zZmVyIOCkj+CkquCljeCksuCkvy4g4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iTWFjIOCkleClhyDgpLLgpL/gpI8gQW5kcm9pZCBGaWxlIFRyYW5zZmVyIOCkkOCkquCljeCkuCDgpIfgpILgpLjgpY3gpJ/gpYngpLIg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4i4KS14KS+4KSq4KS4IOCknOCkvuCkj+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLgpLngpYvgpK4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLgpK7gpYfgpKjgpYIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLgpLngpL7gpLIg4KS54KWAIOCkleClhyDgpI/gpKrgpY3igI3gpLLgpL/gpJXgpYfgpLbgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLgpLngpL7gpLIg4KS54KWAIOCkleClhyDgpJDgpKrgpY3gpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiLgpJbgpYvgpJzgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i4KSV4KWI4KSu4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLgpIfgpKjgpKrgpYHgpJ8g4KSq4KSm4KWN4KSn4KSk4KS/4oCNIOCkrOCkn+CkqCDgpLjgpY3gpLXgpL/gpJog4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLgpLjgpILgpJfgpKTgpKTgpL4g4KSc4KS84KWC4KSuIOCkrOCkn+CkqC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IuCkm+Cli+Ckn+ClgCDgpLjgpYcg4KSs4KSh4KS84KWAIOCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpKrgpLAg4KSc4KS84KWC4KSuIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CkBAIC0xNDYsMTMgKzE0NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i4KS44KWC4KSa4KSo4KS+IOCkluCkvuCksOCkv+CknCDgpJXgpYAg4KSX4KSILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i4KS44KWC4KSa4KSo4KS+IOCktuClh+CkoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4i4KSk4KWN4KS14KSw4KS/4KSkIOCkuOClh+Ckn+Ckv+CkguCkly4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4i4KS54KS+4KSyIOCkueClgCDgpJXgpYcg4KSP4KSq4KWN4oCN4KSy4KS/4KSV4KWH4KS24KSoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLgpLngpL7gpLIg4KS54KWAIOCkleClhyDgpJDgpKrgpY3gpLguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IuCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4i4KSu4KWL4KSs4KS+4KSH4KSyIDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i4KSs4KWI4KSf4KSw4KWAIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i4KS54KS14KS+4KSIIOCknOCkueCkvuCknOCkvCDgpK7gpYvgpKEgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4i4KS44KWN4KSl4KS+4KSoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiDgpJXgpYcg4KSy4KS/4KSPIOCkheCksuCkvuCksOCljeCkriDgpLjgpYfgpJ8g4KSV4KS/4KSv4KS+IOCkl+Ckr+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyDgpKHgpYfgpJ/gpL4g4KSF4KSV4KWN4KS34KSuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcg4KSh4KWH4KSf4KS+IOCkheCkleCljeCkt+CkriI8L3N0cmluZz4KQEAgLTE2NCwxMyArMTY1LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSDgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSV4KS/4KSv4KS+IOCkl+Ckr+CkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iR1BTIOCkleCliyDgpJbgpYvgpJzgpL4g4KSc4KS+IOCksOCkueCkviDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iR1BTIOCkpuCljeCkteCkvuCksOCkviDgpLjgpYfgpJ8g4KSV4KS/4KSv4KS+IOCkl+Ckr+CkviDgpLjgpY3igI3gpKXgpL7gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLgpLjgpY3gpKXgpL7gpKgg4KSF4KSo4KWB4KSw4KWL4KSnIOCkuOCkleCljeCksOCkv+CkryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IuCkuOCkreClgCDgpLjgpYLgpJrgpKjgpL7gpI/gpIIg4KS44KS+4KSr4KS8IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i4KSP4KSq4KWN4oCN4KSy4KS/4KSV4KWH4KS24KSoIOCknOCkvuCkqOCkleCkvuCksOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLgpJDgpKrgpY3gpLgg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KS44KWN4oCN4KS14KSa4KS+4KSy4KS/4KSkIOCksOClguCkqiDgpLjgpYcg4KSY4KWC4KSu4KWH4KSX4KWALiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCksuCliOCkguCkoeCkuOCljeCkleClh+CkqiDgpIXgpK3gpL/gpLXgpL/gpKjgpY3gpK/gpL7gpLgg4KSu4KWH4KSCIOCksuClieCklSDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IuCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpKrgpYvgpLDgpY3gpJ/gpY3gpLDgpYfgpJ8g4KSF4KSt4KS/4KS14KS/4KSo4KWN4oCN4KSv4KS+4KS4IOCkruClh+CkgiDgpLLgpYngpJUg4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiLgpK7gpL/gpKDgpL7gpIgg4KSV4KS+IOCkoeCkv+CkrOCljeCkrOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLgpKbgpL/gpLXgpL7gpLjgpY3gpLXgpKrgpY3gpKgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiLgpIjgpKXgpLDgpKjgpYfgpJ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IuCkueCkteCkvuCkiCDgpJzgpLngpL7gpJzgpLwg4KSu4KWL4KShIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IuCkmuCkvuCksOCljeCknCDgpLngpYsg4KSw4KS54KWAIOCkueCliCwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KQEAgLTE3OCw5ICsxODAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpIngpKrgpJXgpLDgpKMpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCbHVldG9vdGgg4KSs4KSC4KSmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLgpJrgpK7gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IuCkuOCljeCkleCljeCksOClgOCkqCDgpJXgpYAg4KSw4KWL4KS24KSo4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLgpLjgpY3gpLXgpKQ6IOCksOCli+Ckn+Clh+CknyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLgpLDgpYvgpJ/gpYfgpLbgpKgg4KSy4KWJ4KSVIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4i4KSq4KWL4KSw4KWN4KSf4KWN4KSw4KWH4KSfIOCkquCksCDgpLLgpYngpJUg4KSV4KS/4KSv4KS+IOCkl+Ckr+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4i4KSt4KWCLeCkpuClg+CktuCljeCkryDgpKrgpLAg4KSy4KWJ4KSVIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i4KSH4KSo4KSq4KWB4KSfIOCkteCkv+Ckp+CkvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IuCkuOCljeCkpeCkvuCkqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLgpLjgpY3gpKXgpL7gpKgg4KSs4KSC4KSmIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLgpJXgpKjgpYfgpJXgpY3gpJ8g4KSo4KS54KWA4KSCIOCkueCliCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLgpJXgpYvgpIgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkqOCkueClgOCkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIOCkrOCkguCkpiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GaSDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLgpLXgpL7gpK/gpLDgpLLgpYfgpLgg4KSh4KS/4KS44KWN4KSq4KWN4KSy4KWHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i4KSa4KSu4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IuCkuOCljeCkleCljeCksOClgOCkqCDgpJXgpL7gpLjgpY3gpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleClgCDgpLDgpYvgpLbgpKjgpYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i4KS44KWN4KS14KSkOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLgpLjgpYLgpJrgpKjgpL7gpI/gpIIg4KSv4KS54KS+4KSCIOCkpuCkv+CkluCkvuCkiCDgpKbgpYfgpKTgpYAg4KS54KWI4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i4KSo4KWA4KSa4KWHIOCkuOCljeCkteCkvuCkh+CkqiDgpJXgpLDgpJXgpYcg4KSJ4KSoIOCkpOCklSDgpJXgpK3gpYAg4KSt4KWAIOCkquCkueClgeCkguCkmuClh+Ckgi5cbuCkuOCkv+CkuOCljeCkn+CkriDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpKPgpYvgpIIg4KSV4KWHIOCksuCkv+CkjyDgpKrgpYHgpKg6IOCkqOClgOCkmuClhyDgpLjgpY3gpLXgpL7gpIfgpKog4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IuCkrOCkvuCksCDgpKbgpL/gpJbgpL7gpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KWHIOCkleCkv+CkqOCkvuCksOClhyDgpJXgpYsg4KS44KWN4KS14KS+4KSH4KSqIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i4KS44KS/4KS44KWN4KSf4KSuIOCkrOCkvuCksCDgpKbgpL/gpJbgpL7gpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KWHIOCkleCkv+CkqOCkvuCksOClhyDgpLjgpYcg4KS44KWN4KS14KS+4KSH4KSqIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLgpLDgpILgpJcg4KS14KWN4KSv4KWB4KSk4KWN4KSV4KWN4KSw4KSuIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IuCkieCkqOCljeCkqOCkpCDgpJXgpILgpJ/gpY3gpLDgpL7gpLjgpY3gpJ8g4KSu4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLgpLDgpILgpJcg4KS44KWB4KSn4KS+4KSwIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkleCli1xu4KSu4KWJ4KSo4KWA4KSf4KSwIOCkleCkv+Ckr+CkviDgpJzgpL4g4KS44KSV4KSk4KS+IOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4KSW4KWL4KSc4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgpJXgpYcg4KSy4KS/4KSPIOCkiuCkquCksCDgpLjgpY3igI3gpLLgpL7gpIfgpKEg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgpJXgpYcg4KSy4KS/4KSPIOCkrOCkvuCkj+CkgiDgpLjgpY3igI3gpLLgpL7gpIfgpKEg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKaW5kZXggNjMxZDU0OS4uNTI5Zjg5MSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlV2aWplayBkb3B1c3RpIHMgb3ZvZyByYcSNdW5hbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJadW1pcmFqIGkgaXNwdW5pIHphc2xvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJSYXN0ZWduaSBpIGlzcHVuaSB6YXNsb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJLb21wYXRpYmlsbm8genVtaXJhbmplIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IkthZGEgamUgYXBsaWthY2lqYSBkaXpham5pcmFuYSB6YSBtYW5qaSB6YXNsb24sIGtvbnRyb2xlIHp1bWlyYW5qYSBwcmlrYXp1anUgc2UgcG9yZWQgc2F0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iU3ByZW1hbmplIHNuaW1rZSB6YXNsb25hLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU3ByZW1hbmplIHNuaW1rZSB6YXNsb25hLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJTcHJlbWFuamUgc25pbWtlIHphc2xvbmEuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlBvxI1ldG5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iSXpib3JuaWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJOZWRhdm5lIGFwbGlrYWNpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJQcmV0cmHFvmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iRm90b2FwYXJhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iR3VtYiB6YSBwcm9tamVudSBuYcSNaW5hIHVub3NhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJHdW1iIHphIGtvbXBhdGliaWxub3N0IHp1bWlyYW5qYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ilp1bWlyYW5qZSBtYW5qZWcgemFzbG9uYSBuYSB2ZcSHaS4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcmlqYSDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJOYcSNaW4gcmFkYSB1IHpyYWtvcGxvdnUgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+Ikxva2FjaWphIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iVnJpamVtZSBhbGFybWE6IDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iT25lbW9ndcSHZW5pIHN1IDJHLTNHIHBvZGFjaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+Ik9uZW1vZ3XEh2VuaSBzdSA0RyBwb2RhY2kiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkgcG92ZXphbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iVHJhxb5lbmplIEdQUy1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+Ikxva2FjaWp1IHV0dnJkaW8gR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iWmFodGpldmkgemEgbG9rYWNpanUgYWt0aXZuaSBzdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IkJyaXNhbmplIHN2aWggb2JhdmlqZXN0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iSW5mb3JtYWNpamUgbyBhcGxpa2FjaWppIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJaYXNsb24gxIdlIHNlIGF1dG9tYXRza2kgemFrcmVudXRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iWmFzbG9uIGplIHpha2xqdcSNYW4gdSBwZWp6YcW+bm9qIG9yaWplbnRhY2lqaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iWmFzbG9uIGplIHpha2xqdcSNYW4gdSBwb3J0cmV0bm9qIG9yaWplbnRhY2lqaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iSXpsb2cgemEgc2xhc3RpY2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iU2FuamFyZW5qZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJOYcSNaW4gcmFkYSB1IHpyYWtvcGxvdnUiPC9zdHJpbmc+CkBAIC0xODEsNiArMTgzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iU3ZqZXRsaW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdXRvbWF0c2thIHJvdGFjaWphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IlJvdGFjaWphIHpha2xqdcSNYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IkJsb2tpcmFubyB1IHBvcnRyZXRub20gcHJpa2F6dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iQmxva2lyYW5vIHUgcGVqemHFvm5vbSBwcmlrYXp1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ik5hxI1pbiB1bm9zYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Ikxva2FjaWphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+Ikxva2FjaWphIGplIGlza2xqdcSNZW5hIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOaWplIHBvdmV6YW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+Ik5lbWEgbXJlxb5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgaXNrbGp1xI1lbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GaSB6YXNsb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJCZcW+acSNbmkgcHJpa2F6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IkVtaXRpcmFuamUgemFzbG9uYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IlN2amV0bGluYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTUFUU0tJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+Ik9iYXZpamVzdGkgc2UgcHJpa2F6dWp1IG92ZGplIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iUHJpc3R1cGl0ZSBpbSB1IGJpbG8ga29qZW0gdHJlbnV0a3UgdGFrbyBkYSBwcnN0b20gdHJ6bmV0ZSBwcmVtYSBkb2xqZS4gXG5Qb25vdm8gcHJzdG9tIHRyem5pdGUgcHJlbWEgZG9samUgemEga29udHJvbGUgc3VzdGF2YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJQcmlqZcSRaXRlIHByc3RvbSBwbyBydWJ1IHphc2xvbmEgZGEgYmkgc2UgcHJpa2F6YWxhIHRyYWthIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJQcmlqZcSRaXRlIHByc3RvbSBvZCBydWJhIHphc2xvbmEgZGEgYmkgc2UgcHJpa2F6YWxhIHRyYWthIHN1c3RhdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iTmHEjWluIGludmVyemlqZSBib2plIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iTmHEjWluIHBvamHEjWFub2cga29udHJhc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJOYcSNaW4ga29yZWtjaWplIGJvamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ik1yZcW+YSBzZVxubW/FvmRhIHByYXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJQcmV0cmHFvml2YW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJLbGl6bml0ZSBwcmVtYSBnb3JlIHphIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJLbGl6bml0ZSBsaWpldm8gemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKaW5kZXggYzFjOTEzNmIuLjdlMDY0ZGQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJNaW5kaWcgZW5nZWTDqWx5ZXp6ZSBlcnLFkWwgYSBzesOhbcOtdMOzZ8OpcHLFkWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJOYWd5w610w6FzIGEga2l0w7ZsdMOpc2hleiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJOecO6anTDoXMga2l0w7ZsdMOpc2hleiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IktvbXBhdGliaWxpdMOhcyAtLSBuYWd5w610w6FzL2tpY3NpbnnDrXTDqXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iSGEgZWd5IGFsa2FsbWF6w6FzdCBraXNlYmIga8OpcGVybnnFkXJlIHRlcnZlenRlaywgYWtrb3IgYSBuYWd5w610w6FzL2tpY3NpbnnDrXTDqXMgdmV6w6lybMWRamUgYXogw7NyYSBtZWxsZXR0IGplbGVuaWsgbWVnLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJLw6lwZXJuecWRa8OpcCBtZW50w6lzZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IkvDqXBlcm55xZFrw6lwIG1lbnTDqXNlLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJLw6lwZXJuecWRa8OpcCBtZW50w6lzZS4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iRsWRb2xkYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW7DvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IkxlZ8O6amFiYiBhbGthbG1hesOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IktlcmVzw6lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkthbWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iQmV2aXRlbGkgbcOzZCB2w6FsdMOhc2EgZ29tYi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iS29tcGF0aWJpbGl0w6FzaSB6b29tIGdvbWIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJLaWNzaW55w610c2VuIGEgbmFneW9iYiBrw6lwZXJuecWRaMO2ei4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJBa2t1bXVsw6F0b3IgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJSZXDDvGzFkXMgw7x6ZW1tw7NkIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IkhlbHlhZGF0b2s6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iw4licmVzenTDqXMgaWTFkXBvbnRqYTogPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyBhZGF0Zm9yZ2Fsb20gbGV0aWx0dmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyBhZGF0Zm9yZ2Fsb20gbGV0aWx0dmEiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkgY3NhdGxha296dGF0dmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQUyBrZXJlc8Opc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iQSBHUFMgYmXDoWxsw610b3R0YSBhIGhlbHlldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IkFrdMOtdiBoZWx5bGVrw6lyw6lzZWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJNaW5kZW4gw6lydGVzw610w6lzIHTDtnJsw6lzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJBbGthbG1hesOhc2luZm9ybcOhY2nDsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iQSBrw6lwZXJuecWRIGF1dG9tYXRpa3VzYW4gZm9yb2duaSBmb2cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJBIGvDqXBlcm55xZEgesOhcm9sdmEgdmFuIGZla3bFkSB0w6Fqb2zDoXNiYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkEga8OpcGVybnnFkSB6w6Fyb2x2YSB2YW4gw6FsbMOzIHTDoWpvbMOhc2Jhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iRGVzc2VydCBDYXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IsOBbG1vZG96w6FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IlJlcMO8bMWRZ8OpcCDDvHplbW3Ds2QiPC9zdHJpbmc+CkBAIC0xODEsNiArMTgzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iRsOpbnllcsWRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdXRvbWF0aWt1cyBmb3JnYXTDoXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iRm9yZ2F0w6FzIHrDoXJvbHZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IsOBbGzDsyBuw6l6ZXQgesOhcm9sdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IkZla3bFkSBuw6l6ZXQgesOhcm9sdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iQmV2aXRlbGkgbcOzZHN6ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJUYXJ0w7N6a29kw6FzaSBoZWx5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IkhlbHkga2lrYXBjc29sdmEiPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5pbmNzIGthcGNzb2xhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJOaW5jcyBow6Fsw7N6YXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBraWthcGNzb2x2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GaSBraWplbHrFkSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IlZlemV0w6lrIG7DqWxrw7xsaSBraWplbHrFkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJLw6lwZXJuecWRIHRhcnRhbG3DoW5hayDDoXRrw7xsZMOpc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJGw6lueWVyxZEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iYXV0b21hdGlrdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iQXogw6lydGVzw610w6lzZWsgaXR0IGplbGVubmVrIG1lZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJCw6FybWlrb3IgZWzDqXJoZXRpIMWRa2V0LCBoYSBsZWZlbMOpIGjDunp6YSBheiB1amrDoXQuXG5Iw7p6emEgbGUgYXogdWpqw6F0IG3DqWcgZWd5c3plciBhIHJlbmRzemVyYmXDoWxsw610w6Fzb2sgZWzDqXLDqXPDqWhlei4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJDc8O6c3p0YXNzYSB1amrDoXQgYSBrw6lwZXJuecWRIHN6w6lsw6luIGEgc8OhdiBtZWdqZWxlbsOtdMOpc8OpaGV6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJDc8O6c3p0YXNzYSB1amrDoXQgYSBrw6lwZXJuecWRIHN6w6lsw6l0xZFsIGEgcmVuZHN6ZXJzw6F2IG1lZ2plbGVuw610w6lzw6loZXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iU3rDrW5pbnZlcnTDoWzDoXMgbcOzZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IktvbnRyYXN6dGphdsOtdMOhcyBtw7NkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJTesOtbmphdsOtdMOhcyBtw7NkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJMZWhldCwgaG9neSBhXG5ow6Fsw7N6YXQgZmVsw7xneWVsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iS2VyZXPDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iQSh6KSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gbcWxdmVsZXRoZXogY3PDunN6dGFzc2EgZmVsZmVsw6kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iQSh6KSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gbcWxdmVsZXRoZXogY3PDunN6dGFzc2EgYmFscmEuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh5LWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh5LWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwNTM1YwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHktbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4i1LfVr9aA1aHVttW2INWh1bXVqtW0INWv1bjVstW61b7VodWuINWnINWw1bjWgNWr1abVuNW21aHVr9Wh1bYg1aTVq9aA1oTVodW+1bjWgNW01aHVtiDVtNWl1bs6Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh5LXJBTS1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oeS1yQU0tbGFuZC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzA1MzVjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oeS1yQU0tbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4i1LfVr9aA1aHVttW2INWh1bXVqtW0INWv1bjVstW61b7VodWuINWnINWw1bjWgNWr1abVuNW21aHVr9Wh1bYg1aTVq9aA1oTVodW+1bjWgNW01aHVtiDVtNWl1bs6Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjQxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+ItWA1aHVtNWh1a/VodaA1aPVodW11avVtiBVSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiLVhNWh1oTWgNWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiLVgNWl1bzVodaB1bbVpdWsINaB1aHVttWv1avWgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiLVj9Wl1bLVpdWv1bjWgtWp1bXVuNaC1bbVttWl1oAg1a7WgNWh1aPWgNWrINW01aHVvdWr1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+ItS51aHWgNW0INWw1aHVvtWl1azVvtWh1a7VttWl1oAg1bnVr9Wh1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+ItSx1bbVv9Wl1b3VpdWsINW+1aXWgNW71avVtiDVrtaA1aHVo9aA1aXWgNWoIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMSDVttW41oAg1a7WgNWh1aPVq9aAIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQg1bbVuNaAINWu1oDVodWj1avWgCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiLUvtWh1bbVuNaC1oHVuNaC1bTVttWl1oAg1bnVr9Wh1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+ItS41bbVqdWh1oHVq9WvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+ItS+1aHVttW41oLWgdW41oLVtNW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+ItWE1avVodaB1oDVpdaEINWs1avWgdaE1aHVvtW41oDVq9W51agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiLVhNWh1oDVv9Wv1bjWgdWoINWs1avWgdaE1aHVqdWh1oPVvtW41oLVtCDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiLVtNW21bjWgtW0INWnIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IlVTQiDVrNWr1oHWhNWh1b7VuNaA1bjWgtW01agg1bnVqyDVodW71aHVr9aB1b7VuNaC1bQ6XG7VldWj1b/VvtWl1oQg1bTVq9Wh1bXVtiDVo9W41oDVrtW41bIg1azVq9aB1oTVodW+1bjWgNWr1bnVq9aBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiLVhNWh1oDVv9Wv1bjWgdWrINaF1aPVv9Wh1aPVuNaA1a7VuNaC1bTVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+ItS/1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiLUu9W21oTVttWh1anVq9W81aHVtdWr1bYg1bzVpdWq1avVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiLUu9W21oTVttWh1brVv9W/1b7VuNWyINWn1a/WgNWh1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiLVgNWh1bTWgNWl1oHVttWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+ItS71bbWhNW21aHVt9Wt1aHVvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+ItS+1aHVttW41oLWgdW41oLVtNW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiJCbHVldG9vdGgt1agg1a/VodW61b7VodWuINWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i1L/VodaA1aPVodW+1bjWgNWl1awg1bTVuNaC1b/WhNWh1aPWgNW01aHVtiDVpdWy1aHVttWh1a/VttWl1oDVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+ItWW1avVptWr1a/VodWv1aHVtiDVvdW/1aXVstW21aHVt9Wh1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4i1LnVuNaC1bXVrNWh1b/WgNWl1Z7VrCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INWw1aHVvtWl1azVvtWh1a7VqyDVtNW41oLVv9aE1aggVVNCINW91aHWgNaEOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4i1LnVuNaC1bXVrNWh1b/WgNWl1Z7VrCwg1bjWgCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INWw1aHVvtWl1azVvtWh1a7VqCDVtNW41oLVv9aEINWj1bjWgNWu1asgVVNCINWs1oDVodW91aHWgNaEOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i1LLVodaB1aXVntWsIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4t1agsINWl1oDVoiDVodW11b0gVVNCINWv1oDVq9W51agg1a/VodW61aHVr9aB1b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4i1LLVodaB1aXVntWsIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4t1agsINWl1oDVoiDVodW11b0gVVNCINWs1oDVodW91aHWgNaE1agg1a/VodW61aHVr9aB1b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+ItSx1bXVvSBVU0Ig1azWgNWh1b3VodaA1oTVqyDVsNWl1b8g1bjVuSDVtNWrINWw1aHVvtWl1azVvtWh1a4g1bnVqyDVodW31a3VodW/1bjWgtW0OiDUu9W01aHWgdWl1oQg1aHVvtWl1azVq9W2INWh1bXVvcKg1azWgNWh1b3VodaA1oTVqyDVtNWh1b3Vq9W2IDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+LdW41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCINWs1oDVodW91aHWgNaEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiLUtNWr1b/VpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4i1ZXVo9W/1aHVo9W41oDVrtWl1awg1azVvNWl1azVtdWh1bXVtiDVodW11b0gVVNCINW91aHWgNaE1asg1bDVodW01aHWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+ItWV1aPVv9Wh1aPVuNaA1a7VpdWsINWs1bzVpdWs1bXVodW11bYg1aHVtdW9IFVTQiDVrNaA1aHVvdWh1oDWhNWrINWw1aHVtNWh1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+ItS51bjWgtW11azVodW/1oDVpdWe1awgVVNCLdWrINWv1aHWgNWj1aHVotWl1oDVuNaC1bTVqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i1YDVodW01aHVr9Wh1oDVo9W51asgUlNBLdWrINWi1aHVttWh1azVqyDVtNWh1b/VttWh1bDVpdW/1oTVtiDVp2Bcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+ItWE1avVt9W/INWp1bjWgtW11azVodW/1oDVpdWsINWh1bXVvSDVsNWh1bTVodWv1aHWgNWj1bnVq9aBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i1L3VuNW31bjWgNWh1oHVttWl1axgINWn1a/WgNWh1bbVqCDVrNaB1bbVpdWs1bjWgiDVsNWh1bTVodaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+ItWB1aPVpdWsYCDVp9Wv1oDVodW21agg1azWgdW21aXVrNW41oIg1bDVodW01aHWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLVitWh1bDVuNaC1bQg1acg1afVr9aA1aHVttWrINWw1aHVttW41oLVtdWp1ajigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLVitWh1bDVuNaC1bQg1acg1afVr9aA1aHVttWrINWw1aHVttW41oLVtdWp1aguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+ItS31a/WgNWh1bbVqyDVsNWh1bbVuNaC1bXVqdWoINW61aHVsNW+1bjWgtW0INWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4i1LfVr9aA1aHVttWrINWw1aHVttW41oLVtdWp1agg1azVuNaC1b3VodW21a/VodaA1b7VpdWsINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLVgNW61aXWhCDVsdWl1oAg1afVr9aA1aHVttWrINWw1aHVttW41oLVtdWp1agg1b/VpdW91bbVpdWs1bjWgiDVsNWh1bTVodaAOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RpdGxlIiBtc2dpZD0iNzA1NzgxMTE2NzQ2OTIyNzcxIj4i1YnVsNWh1bvVuNWy1b7VpdaBINWs1bjWgtW91aHVttWv1aHWgNWl1awg1afVr9aA1aHVttWrINWw1aHVttW41oLVtdWp1ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiLVidWw1aHVu9W41bLVvtWl1oEg1brVodWw1aXVrCDVp9Wv1oDVodW21asg1bDVodW21bjWgtW11anVqDog1YDVttWh1oDVodW+1bjWgCDVp2Ag1brVodWw1bjWgdW2INaF1aPVv9Wh1aPVuNaA1a7VtNWh1bYg1bTVpdW7INWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IlVTQiDWhtWh1bXVrNWl1oDVqyDWg9W41a3VodW21oHVtNWh1bYg1ajVttW/1oDVodW21oTVttWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLVhNWr1aHWgdW21aXVrCDVuNaA1brVpdW9INW01aXVpNWr1aEg1bbVvtWh1aPVodaA1a/Vq9W5IChNVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i1YTVq9Wh1oHVttWl1awg1bjWgNW61aXVvSDWhtW41b/VuNWt1oHVq9WvIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLVj9Wl1bLVodWk1oDVpdWsIEFuZHJvaWQg1obVodW11azVpdaA1asg1oPVuNWt1aHVttaB1bTVodW2INWw1aHVvtWl1azVvtWh1a7VqCBNYWMt1asg1bDVodW01aHWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+ItWA1aXVvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLVj9W41oLVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+ItWR1aHVttWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i1Y7VpdaA1bvVq9W2INWu1oDVodWj1oDVpdaA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiLViNaA1bjVttWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i1ZbVuNW/1bjVrdaB1avVryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i1YTVq9Wh1oHVttWl1awg1bTVuNaC1b/WhNWh1aPWgNW01aHVtiDVpdWy1aHVttWh1a/VqyDVr9W41bPVodWv1ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+ItWA1aHVtNWh1b/VpdWy1aXVrNWr1bjWgtWp1bXVodW2INWt1bjVt9W41oDVodaB1bTVodW2INWv1bjVs9Wh1a/VqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+ItS01avVv9Wh1oPVuNWt1aXVrCDWg9W41oTWgNWr1oEg1aHVvtWl1azVqyDVtNWl1a4g1afVr9aA1aHVtjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4iQmx1ZXRvb3RoLdWoINW01avVodaB1b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9Ijc0MTY2NDg2Njk5NzY4NzAxNzUiPiJCbHVldG9vdGgt1bYg1aHVttW71aHVv9W+1aHVriDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiLVhNWh1oDVv9Wv1bjWgSDVudWv1aE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X29uZV9iYXIiIG1zZ2lkPSI3Nzc0ODg3NzIxODkxMDU3NTIzIj4i1YTVodaA1b/Vr9W41oHVqyDVtNWl1a8g1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiLVhNWh1oDVv9Wv1bjWgdWrINWl1oDVr9W41oIg1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+ItWE1aHWgNW/1a/VuNaB1asg1aXWgNWl1oQg1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+ItWE1aHWgNW/1a/VuNaB1agg1azVq9aE1bYg1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19waG9uZSIgbXNnaWQ9IjQ4OTQ3MDg5MzcwNTI2MTEyODEiPiLVgNWl1bzVodWt1bjVvSDVudWv1aE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9vbmVfYmFyIiBtc2dpZD0iNjg3Njk5Mjc4MTMyNjY0MTE1Ij4i1YDVpdW81aHVrdW41b3VqyDVtNWl1a8g1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdHdvX2JhcnMiIG1zZ2lkPSI4Mzg0OTA1MzgyODA0ODE1MjAxIj4i1YDVpdW81aHVrdW41b3VqyDVpdaA1a/VuNaCINWj1avVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3RocmVlX2JhcnMiIG1zZ2lkPSI4NTIxOTA0ODQzOTE5OTcxODg1Ij4i1YDVpdW81aHVrdW41b3VqyDVpdaA1aXWhCDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY0NzE4MzQ4Njg1ODA3NTc4OTgiPiLVgNWl1bzVodWt1bjVvdWrINWh1abVpNWh1bbVt9Wh1bbVqCDVrNWr1oTVtiDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2RhdGEiIG1zZ2lkPSI0NzkxOTY2Mjk1MDk2ODY3NTU1Ij4i1Y/VvtW11aHVrNW21aXWgCDVudWv1aHVtjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiLVj9W+1bXVodWs1bbVpdaA1asg1bTVpdWvINWj1avVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4i1Y/VvtW11aHVrNW21aXWgNWrINWl1oDVr9W41oIg1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+ItWP1b7VtdWh1azVttWl1oDVqyDVpdaA1aXWhCDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3NpZ25hbF9mdWxsIiBtc2dpZD0iMjcwODM4NDYwODEyNDUxOTM2OSI+ItWP1b7VtdWh1azVttWl1oDVqyDVodWm1aTVodW21bfVodW21agg1azWgNWr1b4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiJXaWZpLdWoINWh1bbVu9Wh1b/VvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IldpRmkt1agg1aHVttW71aHVv9W+1aHVriDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaWZpLdWrINW01aXVryDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IldpZmkt1asg1aXWgNWv1bjWgiDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4iV2lGaS3VqyDVpdaA1aXWhCDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IldpZmkt1asg1aHVptWk1aHVttW31aHVttWoINWs1avWhNW2INWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iV2lNQVgg1bnVr9WhOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWC3VqyDVtNWl1a8g1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4iV2lNQVgt1asg1aXWgNWv1bjWgiDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+IldpTUFYLdWrINWl1oDVpdaEINWj1avVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IldpTUFYLdWrINWh1abVpNWh1bbVt9Wh1bbVqCDVrNWr1oTVtiDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiLUsdWm1aTVodW21bfVodW2INW51a/VoToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4i1YTVq9Wh1oHVvtWh1a4g1bnVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiLUttaA1bgg1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfb25lX2JhciIgbXNnaWQ9IjE2ODU3MzAxMTMxOTIwODE4OTUiPiLVhNWl1a8g1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4i1LXWgNWv1bjWgiDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+ItS11oDVpdaEINWj1avVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+ItSx1abVpNWh1bbVt9Wh1bbVqCDVrNaA1avVviDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4i1YTVq9Wh1oHVvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29mZiIgbXNnaWQ9IjY0NzU1MDgxNTc3ODY4NTMxNTciPiLUsdW21bvVodW/1b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19jb25uZWN0ZWQiIG1zZ2lkPSI4MzY2MjU2NjkzNzE5NDk5NjY1Ij4i1YTVq9Wh1oHVvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i1YzVuNW41oLVtNWr1bbVoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2VkZ2UiIG1zZ2lkPSI0NDc3NDU3MDUxNjMxOTc5Mjc4Ij4iRWRnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJTSU0g1bnVr9WhOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiJCbHVldG9vdGgt1agg1a/VodW61b7VuNaC1bQg1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4i1LvVttaE1bbVodWp1avVvNWh1bXVq9W2INW81aXVqtWr1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4i1YTVodaA1b/Vr9W41oHVqCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g1b/VuNWv1bjVvSDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+ItWA1aHVtNWh1a/VodaA1aPVqyDVr9Wh1oDVo9Wh1b7VuNaA1bjWgtW01bbVpdaAOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4i1L7VodW21bjWgtaB1bjWgtW01bbVpdaAOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLVhNWh1oTWgNWl1awg1a7VodW21bjWgtaB1bjWgtW01ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMt1agg1bTVq9Wh1oHVvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IkdQUy3VqyDVvdW/1aHWgdW41oLVtDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+ItWA1aXVvNWh1bTVuNaC1b/WhNWh1aPWgNWr1bnVqCDVtNWr1aHWgdW+1aHVriDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl92aWJyYXRlIiBtc2dpZD0iNjY2NTg1MzYzMzY0MTU1MDU1Ij4i1LbVodW21aPVqyDVqdaA1anVvNW41oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+ItS21aHVttWj1aHVr9WoINWs1bzVpdaB1b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4t1agg1aHVttW/1aXVvdW+1aHVriDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiLUvtWh1bbVuNaC1oHVuNaC1bTVqCDVodW21b/VpdW91b7VpdaBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i1L7VodW21bjWgtaB1bjWgtW01bbVpdaA1asg1b7VodWw1aHVttWh1a86Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+ItSx1oDVodWjINWv1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+ItWO1aXWgNW71avVtiDVsNWh1b7VpdWs1b7VodWu1bbVpdaA1ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+ItWV1aPVv9W+1bjVsiA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4i1YfVodaA1arVodWv1aHVtiA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+ItWE1aHWgNW/1a/VuNaB1aggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLUu9W21oTVttWh1anVq9W81aHVtdWr1bYg1bzVpdWq1avVtNWoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+INWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aC3VqCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+ItWP1aXVstWh1aTWgNW41oLVqdW11bjWgtW21ajVnSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+ItS21aHWgNWp1bjWgtaB1avVudWoINWk1oDVvtWh1a4g1acgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi3Vq9W2OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLTNHINW/1b7VtdWh1azVttWl1oDVqCDVodW21bvVodW/1b7VodWuINWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyDVv9W+1bXVodWs1bbVpdaA1agg1aHVttW71aHVv9W+1aHVriDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+ItWH1aHWgNWq1aHVr9Wh1bYg1b/VvtW11aHVrNW21aXWgNWoINWh1bbVu9Wh1b/VvtWh1a4g1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+ItWP1b7VtdWh1azVttWl1oDVqCDVodW21bvVodW/1b7VodWuINWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiLUtNW41oLWhCDVsNWh1b3VpdWsINWl1oQg1bbVt9W+1aHVriDVv9W+1bXVodWs1bbVpdaA1asg1oXVo9W/1aHVo9W41oDVrtW01aHVtiDVvdWh1bDVtNWh1bbVq9W2OlxuXG4g1LXVqdWlINWk1bjWgtaEINWv1oDVr9Wr1bYg1aHVr9W/1avVvtWh1oHVttWl1oQg1b/VvtW11aHVrNW21aXWgNWoLCDVodW11bYg1a/VodaA1bjVsiDVpyDVo9Wh1bbVsdW+1aXVrCDWhdW61aXWgNWh1b/VuNaA1asg1a/VuNWy1bTVq9aBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiLVjtWl1oDVodW01avVodaB1bbVpdWsINW/1b7VtdWh1azVttWl1oDVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiLUu9W21b/VpdaA1bbVpdW/INWv1aHVuiDVudWv1aEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaS3VqCDVtNWr1aHWgdW+1aHVriDVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i1YjWgNW41bbVuNaC1bQg1acgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+ItWP1aXVstWh1aTWgNW41oLVqdW11bjWgtW21agg1a/VodaA1aPVodW+1bjWgNW+1aXVrCDVpyBHUFMt1asg1a/VuNWy1bTVq9aBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i1Y/VpdWy1aHVpNaA1bjWgtWp1bXVodW2INWw1aHWgNaB1bjWgtW01bbVpdaA1bYg1aHVr9W/1avVviDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i1YTVodaE1oDVpdWsINWi1bjVrNW41oAg1a7VodW21bjWgtaB1bjWgtW01bbVpdaA1ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+ItWP1aXVstWl1a/VuNaC1anVtdW41oLVttW21aXWgCDVrtaA1aHVo9aA1asg1bTVodW91avVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i1LfVr9aA1aHVttWoINWr1bbWhNW21bjWgtaA1bjWgtW11bYg1a/VutW/1b/VvtWrOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i1LfVr9aA1aHVttWoINWv1bjVstW61b7VodWuINWnINWw1bjWgNWr1abVuNW21aHVr9Wh1bYg1aTVq9aA1oTVodW+1bjWgNW01aHVtiDVtNWl1bs6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+ItS31a/WgNWh1bbVqCDVr9W41bLVutW+1aHVriDVpyDVuNaC1bLVstWh1bHVq9WjINWk1avWgNaE1aHVvtW41oDVtNWh1bTVojoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iRGVzc2VydCBDYXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+ItWR1aXWgNWl1a/VodW11avVtiDVvNWl1arVq9W0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+ItS71bbWhNW21aHVqdWr1bzVodW11avVtiDVvNWl1arVq9W0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+ItS81avWgdaE1aHVvtW41oDVuNaC1bRgIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnZWRfbGFiZWwiIG1zZ2lkPSI4ODY1NDEzMDc5NDE0MjQ2MDgxIj4i1LzVq9aB1oTVodW+1bjWgNW+1aHVriDVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDVvdWh1oDWhCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IkJsdWV0b290aC3VtiDVodW21bvVodW/1b7VodWuINWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLVitWh1bXVrtWh1bzVuNaC1anVtdW41oLVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4i1LvVttaE1bbVodW61b/Vv9W41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLVitW/1b/VuNaC1bTVqCDVr9W41bLVutW+1aHVriDVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiLVhNWr1aHVtdW2INW41oLVstWy1aHVsdWr1aMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+ItWE1avVodW11bYg1bDVuNaA1avVptW41bbVodWv1aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLVhNW41oLVv9aE1aHVo9aA1bTVodW2INWl1bLVodW21aHVr9WoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i1Y/VpdWy1aHVpNaA1bjWgtWp1bXVuNaC1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i1LHVttW71aHVv9Wl1awg1b/VpdWy1aHVpNaA1bjWgtWp1bXVuNaC1bbVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLVhNWl1aTVq9WhINW91aHWgNaEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLVhNWr1aHVtdW2INWh1oDVv9Wh1a/VodaA1aMg1avWgNWh1b7Vq9Wz1aHVr9W21aXWgNWrINWm1aHVttWj1aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+ItS/1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+ItS61aHVtNWh1bbVodWv1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc191c2VyX2xhYmVsIiBtc2dpZD0iNTIzODk5NTYzMjEzMDg5Nzg0MCI+ItS11b0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+ItWE1avVodaB1b7VodWuINW51aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i1ZHVodW21oEg1bnVr9WhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkt1agg1aHVttW71aHVv9W+1aHVriDVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLVgNWl1bzVodWv1aEg1afVr9aA1aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+ItWK1aHVtdWu1aHVvNW41oLVqdW11bjWgtW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+ItS71bbWhNW21aHVt9Wt1aHVvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLUs9W41oLVttWh1bfWgNW71bTVodW2INW81aXVqtWr1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLUuNW21aTVrNWh1bXVttW+1aHVriDWgdWh1bXVv9W41oLVttW41oLVqdW11aHVtiDVvNWl1arVq9W0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLUs9W41oLVtdW21aXWgNWrINWv1aHWgNWj1aHVvtW41oDVtNWh1bYg1bzVpdWq1avVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i1ZHVodW21oHVqCDVr9Wh1oDVuNWyINWnXG7VvtWl1oDVodWw1b3Vr9W+1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i1YjWgNW41bbVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+ItWN1aHVsNWl1oHWgNWl1oQg1b7VpdaA1ocgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LdWrINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i1Y3VodWw1aXWgdaA1aXWhCDVsdWh1a1gIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3VqyDVsNWh1bTVodaAOiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKaW5kZXggNmE3MDJiOS4uMTY3YjEwMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlNlbGFsdSBpemlua2FuIGRhcmkga29tcHV0ZXIgaW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iUGVyYmVzYXIgdXRrIG1lbmdpc2kgbGF5YXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iUmVudGFuZ2tuIHV0ayBtbmdpc2kgbGF5YXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJQZXJiZXNhci9wZXJrZWNpbCB1bnR1ayBrb21wYXRpYmlsaXRhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJTYWF0IGFwbCBkaXJhbmNhbmcgdW50dWsgbGF5YXIgeWFuZyBsZWJpaCBrZWNpbCwga29udHJvbCB6b29tIGFrYW4gdGFtcGlsIGRpIGRla2F0IGphbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iTWVueWltcGFuIHRhbmdrYXBhbiBsYXlhci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+Ik1lbnlpbXBhbiB0YW5na2FwYW4gbGF5YXIuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlRhbmdrYXBhbiBsYXlhciBzZWRhbmcgZGlzaW1wYW4uIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlV0YW1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IkFwbCB0ZXJiYXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iVGVsdXN1cmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iS2FtZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJUb21ib2wgYmVyYWxpaCBtZXRvZGUgbWFzdWthbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iVG9tYm9sIHBlcmJlc2FyL3BlcmtlY2lsIGtvbXBhdGliaWxpdGFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iUGVyYmVzYXIgZGFyaSBsYXlhciBrZWNpbCBrZSBiZXNhci4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcmFpIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTW9kZSBQZXNhd2F0IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+Ikxva2FzaSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtIGRpc2V0ZWwga2UgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEYXRhIDJHLTNHIGRpbm9uYWt0aWZrYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJEYXRhIDRHIGRpbm9uYWt0aWZrYW4iPC9zdHJpbmc+CkBAIC0xNjQsMjggKzE2NSwyOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkgdGVyc2FtYnVuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iTWVuZWx1c3VyaSBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iTG9rYXNpIHlhbmcgZGlzZXRlbCBvbGVoIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IlBlcm1pbnRhYW4gbG9rYXNpIGFrdGlmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iTWVuZ2hhcHVzIHNlbXVhIHBlbWJlcml0YWh1YW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkluZm8gYXBsaWthc2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkxheWFyIGFrYW4gZGlwdXRhciBzZWNhcmEgb3RvbWF0aXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJMYXlhciBkaWt1bmNpIGRhbGFtIG9yaWVudGFzaSBsYW5za2FwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJMYXlhciBkaWt1bmNpIGRhbGFtIG9yaWVudGFzaSBwb3RyZXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkV0YWxhc2UgSGlkYW5nYW4gUGVudXR1cCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJMYW11bmFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+Ik1vZGUgcGVzYXdhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiJNZW5naXNpIGJhdGVyYWksIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnZWRfbGFiZWwiIG1zZ2lkPSI4ODY1NDEzMDc5NDE0MjQ2MDgxIj4iRGl0YWdpaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiJUZXJpc2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4iQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4iQmx1ZXRvb3RoICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gUGVyYW5na2F0KSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4iQmx1ZXRvb3RoIE1hdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IktlY2VyYWhhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iUm90YXNpIE90b21hdGlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IlJvdGFzaSBEaWt1bmNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IlRlcmt1bmNpIGtlIFBvdHJldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iVGVya3VuY2kga2UgTGFuc2thcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJNZXRvZGUgTWFzdWthbiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCAoNTAxMTMyNzA0ODc0ODc2MjI1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwgKDc0NjQ1NDQwODY1MDczMzE0NTkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJMb2thc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iTG9rYXNpIE1hdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iUGVyYW5na2F0IG1lZGlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJQYW5nZ2lsYW4gRGFydXJhdCBTYWphIjwvc3RyaW5nPgpAQCAtMTk2LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJUaWRhayBUZXJzYW1idW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IlRpZGFrIEFkYSBKYXJpbmdhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIE1hdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iVGFtcGlsYW4gV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJMYXlhciBOaXJrYWJlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJMYXlhciBUcmFuc21pc2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJLZWNlcmFoYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iT1RPTUFUSVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iUGVtYmVyaXRhaHVhbiBtdW5jdWwgZGkgc2luaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IkFrc2VzIGthcGFuIHNhamEgZGVuZ2FuIG1lbmdnZXNlayBrZSBiYXdhaC5cbkdlc2VrIGtlIGJhd2FoIHNla2FsaSBsYWdpIHVudHVrIGtvbnRyb2wgc2lzdGVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+Ikdlc2VrIHRlcGkgbGF5YXIgdW50dWsgbWVtYnVrYSBiaWxhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iR2VzZWsgZGFyaSBiYWdpYW4gdGVwaSBsYXlhciB1bnR1ayBtZW1idWthIGJpbGFoIHNpc3RlbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2RlIGludmVyc2kgd2FybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2RlIGtvbnRyYXMgeWFuZyBkaXNlbXB1cm5ha2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJNb2RlIGtvcmVrc2kgd2FybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IkphcmluZ2FuIGJpc2FcbmRpYXdhc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlRlbHVzdXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ikdlc2VyIGtlIGF0YXMgdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ikdlc2VyIGtlIGtpcmkgdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKaW5kZXggYTM1MGQzOC4uNjMyMTg3MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IkNvbnNlbnRpIHNlbXByZSBkYSBxdWVzdG8gY29tcHV0ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab29tIHBlciByaWVtcGlyZSBzY2hlcm1vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IkVzdGVuZGkgcGVyIHJpZW1wLiBzY2hlcm1vIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iWm9vbSBjb21wYXRpYmlsaXTDoCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJTZSB1blwnYXBwbGljYXppb25lIMOoIHN0YXRhIHByb2dldHRhdGEgcGVyIHVubyBzY2hlcm1vIHBpw7kgcGljY29sbywgYWNjYW50byBhbGxcJ29yb2xvZ2lvIHZpZW5lIHZpc3VhbGl6emF0byB1biBjb250cm9sbG8gZGVsbG8gem9vbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iU2FsdmF0YWdnaW8gc2NyZWVuc2hvdC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNhbHZhdGFnZ2lvIHNjcmVlbnNob3QuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlNjcmVlbnNob3QgaW4gY29yc28gZGkgc2FsdmF0YWdnaW8uIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IkhvbWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW51Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iQXBwbGljYXppb25pIHJlY2VudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJDZXJjYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJGb3RvY2FtZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJQdWxzYW50ZSBwZXIgY2FtYmlhcmUgbWV0b2RvIGRpIGltbWlzc2lvbmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlB1bHNhbnRlIHpvb20gY29tcGF0aWJpbGl0w6AuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tIGluZmVyaW9yZSBwZXIgc2NoZXJtbyBwacO5IGdyYW5kZS4iPC9zdHJpbmc+CkBAIC0xMTYsOCArMTE2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4iRHVlIGJhcnJlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdGhyZWVfYmFycyIgbXNnaWQ9IjI2NDgyNDE0MTUxMTkzOTY2NDgiPiJUcmUgYmFycmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiJNYXNzaW1vIHNlZ25hbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IkF0dGl2by4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+Ik5vbiBhdHRpdm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+Ik9OIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29mZiIgbXNnaWQ9IjY0NzU1MDgxNTc3ODY4NTMxNTciPiJPRkYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IkNvbm5lc3NvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2dwcnMiIG1zZ2lkPSIxNjA2NDc3MjI0NDg2NzQ3NzUxIj4iR1BSUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzF4IiBtc2dpZD0iOTk0MTMzNDY4MTIwMjQ0MDE4Ij4iMSBYIjwvc3RyaW5nPgpAQCAtMTU1LDYgKzE1NSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0dGVyaWE6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTW9kYWxpdMOgIGFlcmVvOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGg6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iUG9zaXppb25lOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsbGFybWUgaW1wb3N0YXRvIHBlcjogPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEYXRpIDJHLTNHIGRpc2F0dGl2YXRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iRGF0aSA0RyBkaXNhdHRpdmF0aSI8L3N0cmluZz4KQEAgLTE2NiwxMiArMTY3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBjb25uZXNzbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iUmljZXJjYSBkZWwgR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IlBvc2l6aW9uZSBzdGFiaWxpdGEgZGFsIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IlJpY2hpZXN0ZSBkaSBhY2Nlc3NvIGFsbGEgcG9zaXppb25lIGF0dGl2ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IkNhbmNlbGxhIHR1dHRlIGxlIG5vdGlmaWNoZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iSW5mb3JtYXppb25pIGFwcGxpY2F6aW9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iTG8gc2NoZXJtbyBydW90ZXLDoCBhdXRvbWF0aWNhbWVudGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJMbyBzY2hlcm1vIMOoIGJsb2NjYXRvIGluIG9yaWVudGFtZW50byBvcml6em9udGFsZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iTG8gc2NoZXJtbyDDqCBibG9jY2F0byBpbiBvcmllbnRhbWVudG8gdmVydGljYWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJWZXRyaW5hIGRpIGRvbGNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkRheWRyZWFtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+Ik1vZGFsaXTDoCBhZXJlbyI8L3N0cmluZz4KQEAgLTE4Myw4ICsxODUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iTHVtaW5vc2l0w6AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IlJvdGF6aW9uZSBhdXRvbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUm90YXppb25lIGJsb2NjYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IkJsb2NjYXRvIGluIHZlcnRpY2FsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iQmxvY2NhdG8gaW4gb3JpenpvbnRhbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iTWV0b2RvIGRpIGltbWlzc2lvbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJQb3NpemlvbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJHZW9sb2NhbGl6emF6aW9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJQb3NpemlvbmUgbm9uIGF0dGl2YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJEaXNwb3NpdGl2byBtdWx0aW1lZGlhbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzIwMCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5vbiBjb25uZXNzbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJOZXNzdW5hIHJldGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBkaXNhdHRpdmF0byI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJEaXNwbGF5IFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iVmlzdWFsaXp6YXppb25lIHdpcmVsZXNzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IlRyYXNtZXR0aSBzY2hlcm1vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iTHVtaW5vc2l0w6AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJMZSBub3RpZmljaGUgdmVuZ29ubyB2aXN1YWxpenphdGUgcXVpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iUHVvaSBhY2NlZGVydmkgaW4gcXVhbHNpYXNpIG1vbWVudG8gc2NvcnJlbmRvIHZlcnNvIGlsIGJhc3NvLlxuRmFpIHNjb3JyZXJlIGRpIG51b3ZvIHZlcnNvIGlsIGJhc3NvIHBlciB2aXN1YWxpenphcmUgaSBjb250cm9sbGkgZGVsIHNpc3RlbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iRmFpIHNjb3JyZXJlIGlsIGJvcmRvIGRlbGxvIHNjaGVybW8gcGVyIHZpc3VhbGl6emFyZSBsYSBiYXJyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iRmFpIHNjb3JyZXJlIGlsIGRpdG8gZGFsIGJvcmRvIGRlbGxvIHNjaGVybW8gcGVyIHZpc3VhbGl6emFyZSBsYSBiYXJyYSBkaSBzaXN0ZW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+Ik1vZGFsaXTDoCBpbnZlcnNpb25lIGNvbG9yaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+Ik1vZGFsaXTDoCBkaSBjb250cmFzdG8gYXZhbnphdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZGFsaXTDoCBkaSBjb3JyZXppb25lIGRlbCBjb2xvcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IkxhIHJldGUgcG90cmViYmVcbmVzc2VyZSBtb25pdG9yYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJSaWNlcmNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlN1IHBlciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iQSBzaW5pc3RyYSBwZXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKaW5kZXggYjI3NGRjYy4uMjQxMTRmNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiLXntee16nXpyDXntep16rXntepINep15wg15TXntei16jXm9eqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+Iteg16fXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IteU16HXqCDXnteU16jXqdeZ157XlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiLXpNeo15jXmSDXmdeZ16nXldedIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLXkNeZ158g15nXmdep15XXnteZ150g15DXl9eo15XXoNeZ150iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+Iteh15LXldeoINeZ15nXqdeV157XmdedINeQ15fXqNeV16DXmdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+Itek16jXmNeZINeQ16TXnNeZ16fXpteZ15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IteQ15nXnyDXkNek15zXmden16bXmdeV16og15DXl9eo15XXoNeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+Iteh15LXldeoINeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeg15XXqiI8L3N0cmluZz4KICAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IteZ15nXqdeV150g15DXl9eo15XXnyDXkNeX15MiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCDXlNeZ15nXqdeV157XmdedINeU15DXl9eo15XXoNeZ150iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4i15DXpNec15nXp9em15nXlCDXkNeX16jXldeg15Qg15DXl9eqIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4i4oCPJWQg15TXkNek15zXmden16bXmdeV16og15TXkNeX16jXldeg15XXqiI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiLXkNeZ158g15TXqteo15DXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiLXnteq157XqdeaIjwvc3RyaW5nPgpAQCAtMzUsNyArMzUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4i15fXkdeoINee15jXotefIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4i15TXodeV15zXnNeUINeg15fXnNep16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4i16DXldeq16jXlSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiLXmNei15nXoNeUINeR15DXntem16LXldeqIFVTQiDXkNeZ16DXlCDXoNeq157Xm9eqLlxu15TXqdeq157XqSDXkNeaINeV16jXpyDXkdee15jXotefINep16HXldek16cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IuKAj9eY16LXmdeg15Qg15HXkNee16bXoteV16ogVVNCINeQ15nXoNeUINeg16rXnteb16ouXG7XlNep16rXntepINeQ15og15XXqNenINeR157XmNei158g16nXodeV16TXpy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4i16bXqNeZ15vXqiDXodeV15zXnNeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4i15TXkteT16jXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaS1GaSI8L3N0cmluZz4KQEAgLTQ0LDI1ICs0NCwyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4i15TXqdeq16ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IteQ15XXmNeV157XmNeZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i15TXqteo15DXldeqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aCDXp9ep15XXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiLigI9CbHVldG9vdGgg16fXqdeV16giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiLXlNeS15PXqCDXqdeZ15jXldeqINen15zXmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+Itee16fXnNeT16og16TXmdeW15nXqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiLXnNeQ16TXqdeoINec15nXmdep15XXnSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INeS15nXqdeUINec15TXqten158g15QtVVNCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4i15zXkNek16nXqCDXnNeZ15nXqdeV150gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDXkteZ16nXlCDXnNeQ15HXmdeW16gg15QtVVNCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i15TXkNedINec16TXqteV15cg15DXqiA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+INeb15DXqdeoINee15vXqdeZ16ggVVNCINeW15Qg157Xl9eV15HXqD8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IteU15DXnSDXnNek16rXldeXINeQ16ogPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDXm9eQ16nXqCDXkNeR15nXlteoIFVTQiDXlteUINee15fXldeR16g/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i15DXmdefINeZ15nXqdeV157XmdedINee15XXqten16DXmdedINeU16TXldei15zXmdedINei150g15DXkdeZ15bXqCDXlC1VU0IuINec157XmdeT16Ig16DXldeh16Mg16LXnCDXkNeR15nXlteoINeW15Qg15HXp9eoINeR15vXqteV15HXqiA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4i15DXkdeZ15bXqCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4i4oCP15zXkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15QgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDXkteZ16nXlCDXnNeU16rXp9efINeULVVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IuKAj9ec15DXpNep16gg15zXkNek15zXmden16bXmdeUIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g15LXmdep15Qg15zXkNeR15nXlteoINeULVVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IuKAj9eU15DXnSDXnNek16rXldeXINeQ16ogPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDXm9eQ16nXqCDXnteb16nXmdeoIFVTQiDXlteUINee15fXldeR16g/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLigI/XlNeQ150g15zXpNeq15XXlyDXkNeqIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g15vXkNep16gg15DXkdeZ15bXqCBVU0Ig15bXlCDXnteX15XXkdeoPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IuKAj9eQ15nXnyDXkNek15zXmden16bXmdeV16og157Xldeq16fXoNeV16og15TXpNeV16LXnNeV16og16LXnSDXkNeR15nXlteoINeULVVTQi4g15zXnteZ15PXoiDXoNeV16HXoyDXotecINeQ15HXmdeW16gg15bXlCDXkden16gg15HXm9eq15XXkdeqIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiLigI/XkNeR15nXlteoIFVTQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4i15TXpteSIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4i15TXqdeq157XqSDXm9eR16jXmdeo16og157Xl9eT15wg16LXkdeV16gg157Xm9ep15nXqCBVU0Ig15bXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IteU16nXqtee16kg15vXkdeo15nXqNeqINee15fXk9ecINei15HXldeoINeQ15HXmdeW16ggVVNCINeW15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IteU15DXnSDXnNeQ16TXqdeoINeg15nXp9eV15kg15HXkNeS15nXnSDXkS1VU0I/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+IteY15HXmdei16og15TXkNem15HXoiDXqdecINee16TXqteXINeULVJTQSDXqdecINeU157Xl9ep15Eg15TXmdeQOlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IuKAj9eU16nXqtee16kg15vXkdeo15nXqNeqINee15fXk9ecINei15HXldeoINee15vXqdeZ16ggVVNCINeW15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiLigI/XlNep16rXntepINeb15HXqNeZ16jXqiDXnteX15PXnCDXoteR15XXqCDXkNeR15nXlteoIFVTQiDXlteUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiLigI/XlNeQ150g15zXkNek16nXqCDXoNeZ16fXldeZINeR15DXkteZ150g15EtVVNCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiLigI/XmNeR15nXoteqINeU15DXpteR16Ig16nXnCDXntek16rXlyDXlC1SU0Eg16nXnCDXlNee15fXqdeRINeU15nXkDpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IteQ16TXqdeoINeq157XmdeTINee157Xl9ep15Eg15bXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IteU15LXk9ecINeq16bXldeS15Qg15vXk9eZINec157XnNeQINeQ16og15TXnteh15oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i157XqteXINeb15PXmSDXnNee15zXkCDXkNeqINeU157XodeaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4i16nXmdeg15XXmSDXnteo15fXpyDXnteq16bXldeS15Qg15zXpteV16jXmiDXqteQ15nXnteV16oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i15vXkNep16gg15nXmdep15XXnSDXnteZ15XXoteTINec157XodeaINen15jXnyDXmdeV16rXqCwg16TXp9eTINep15wg157XqNeX16cg157Xqtem15XXkteUINeZ15XXpNeZ16Ig15zXmdeTINeU16nXoteV158uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Itep15XXnteoINem15nXnNeV150g157XodeaLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i16nXldee16gg16bXmdec15XXnSDXnteh15ouLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+Itee16rXkdem16LXqiDXqdee15nXqNeUINep15wg16bXmdec15XXnSDXlNee16HXmi4iPC9zdHJpbmc+CkBAIC03MCwxOSArNjgsMjEgQEAKICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLXkteiINeb15PXmSDXnNeU16bXmdeSINeQ16og16bXmdec15XXnSDXlNee16HXmiDXqdec15oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+Itec15Ag16DXmdeq158g15zXkdem16Ig16bXmdec15XXnSDXnteh15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiLXnNeQINeg15nXqtefINec16nXnteV16gg15DXqiDXpteZ15zXldedINeU157XodeaLiDXmdeZ16rXm9efINep16DXotep15Qg16nXmdee15XXqSDXkdeQ157Xptei15kg15DXl9eh15XXny4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiLXkNek16nXqNeV15nXldeqINeU16LXkdeo16og16fXkdem15nXnSDXkS1VU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLXmNei158g15vXoNeS158g157Xk9eZ15QgKE1UUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLXmNei158g15vXntem15zXnteUIChQVFApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLXlNeq16fXnyDXkNeqINeZ15nXqdeV150g15TXoteR16jXqiDXlNen15HXpteZ150g16nXnCBBbmRyb2lkINei15HXldeoIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IuKAj9eQ16TXqdeo15XXmdeV16og15TXoteR16jXqiDXp9eR16bXmdedINeRLVVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IuKAj9eY16LXnyDXm9eg15LXnyDXnteT15nXlCAoTVRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+IuKAj9eY16LXnyDXm9ee16bXnNee15QgKFBUUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+IuKAj9eU16rXp9efINeQ16og15DXpNec15nXp9em15nXmdeqINeU16LXkdeo16og15TXp9eR16bXmdedINep15wgQW5kcm9pZCDXoteR15XXqCBNYWMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiLXlNen15XXk9edIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IteR15nXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Iteq16TXqNeZ15giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLXmdeZ16nXldee15nXnSDXkNeX16jXldeg15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IteQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeg15XXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IteX16TXqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLXntem15zXnteUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLXnNeX16bXnyDXlNeX15zXpNeqINep15nXmNeqINen15zXmC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i15zXl9em158g157XqNeX16cg157Xqtem15XXkteUINep15wg16rXkNeZ157XldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i16nXoNeUINee16jXl9enINee16rXpteV15LXlCDXqdecINee16HXmiDXp9eY158g15zXkteT15XXnCDXmdeV16rXqC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4iQmx1ZXRvb3RoINee15fXldeR16guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IkJsdWV0b290aCDXnteg15XXqtenLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiLigI9CbHVldG9vdGgg157Xl9eV15HXqC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4i4oCPQmx1ZXRvb3RoINee16DXldeq16cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4i15DXmdefINeh15XXnNec15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X29uZV9iYXIiIG1zZ2lkPSI3Nzc0ODg3NzIxODkxMDU3NTIzIj4i16TXoSDXkNeX15Mg16nXnCDXodeV15zXnNeULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiLXqdeg15kg16TXodeZ150g16nXnCDXodeV15zXnNeULiI8L3N0cmluZz4KQEAgLTk4LDE3ICs5OCwxNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+Itep16DXmSDXpNeh15nXnSDXqdecINeg16rXldeg15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiLXqdec15XXqdeUINek16HXmdedINep15wg16DXqteV16DXmdedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiLXkNeV16og15TXoNeq15XXoNeZ150g157XnNeQLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4iV2ktRmkg15vXkdeV15kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IldpLUZpINee16DXldeq16cuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4i16TXoSDXkNeX15Mg16nXnCBXaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4i16nXoNeZINek16HXmdedINep15wgV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4i16nXnNeV16nXlCDXpNeh15nXnSDXqdecIFdpLUZpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiLXkNeV16og15QtV2ktRmkg157XnNeQLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4i15zXnNeQIFdpTUFYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiLXpNehINeQ15fXkyDXqdecIFdpTUFYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4i16nXoNeZINek16HXmdedINep15wgV2lNQVguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+Itep15zXldep15Qg16TXodeZ150g16nXnCBXaU1BWC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IteQ15XXqiDXlC1XaU1BWCDXntec15AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiLigI9XaS1GaSDXm9eR15XXmS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4i4oCPV2ktRmkg157XoNeV16rXpy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiLigI/XpNehINeQ15fXkyDXqdecIFdpLUZpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiLigI/Xqdeg15kg16TXodeZ150g16nXnCBXaS1GaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiLigI/Xqdec15XXqdeUINek16HXmdedINep15wgV2ktRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IuKAj9eQ15XXqiDXlC1XaS1GaSDXntec15AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiLigI/XnNec15AgV2lNQVguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IuKAj9ek16Eg15DXl9eTINep15wgV2lNQVguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiLigI/Xqdeg15kg16TXodeZ150g16nXnCBXaU1BWC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4i4oCP16nXnNeV16nXlCDXpNeh15nXnSDXqdecIFdpTUFYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4i4oCP15DXldeqINeULVdpTUFYINee15zXkC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiLXkNeZ158g15DXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjYzOTUzMjYyNzYyMTM0MDI4ODMiPiLXnNeQINee15fXldeR16guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4i15DXpNehINek16HXmdedLiI8L3N0cmluZz4KQEAgLTEzMCw1NyArMTMwLDYxIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9yb2FtaW5nIiBtc2dpZD0iNTk3NzM2MjMzMzQ2NjU1NjA5NCI+Iteg15PXmdeT15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+Iten16bXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiLXkNeZ158g15vXqNeY15nXoSBTSU0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+Itep15nXqteV16Mg15DXmdeg15jXqNeg15gg15HXmdefINeg15nXmdeT15nXnSDXqdecIEJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IuKAj9eQ15nXnyDXm9eo15jXmdehIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4i4oCP16nXmdeq15XXoyDXkNeZ16DXmNeo16DXmCDXk9eo15ogQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4i157XpteRINeY15nXodeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDXkNeX15XXlteZ150g16nXnCDXodeV15zXnNeULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4i15TXkteT16jXldeqINee16LXqNeb16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IteU16rXqNeQ15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLXoNen15Qg15TXqteo15DXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTINee15XXpNei15wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IteU16nXkteqIEdQUy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IlRlbGVUeXBld3JpdGVyINee15XXpNei15wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IuKAj0dQUyDXnteV16TXotecLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiLigI/XlNep15LXqiBHUFMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiLigI9UZWxlVHlwZXdyaXRlciDXnteV16TXotecIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+Item15zXpteV15wg15XXqNeY15guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+Item15zXpteV15wg16nXp9eYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g16DXk9eX15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i15TXldeT16LXlCDXoNeT15fXqteULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i16rXqNeZ16Eg15TXqteo15DXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiLXlNeS15PXqNeV16og157XlNeZ16jXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLXmdeZ16nXldee15nXnSDXkNeX16jXldeg15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLXkNek15zXmden16bXmdeV16og15DXl9eo15XXoNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4i157Xqdeq157XqSA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPuKAjy4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4i16DXmdeZ15MgPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4u4oCPIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPi7igI8gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+LuKAjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLXodeV15zXnNeUIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i157XpteRINeY15nXodeUIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCDigI88eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiLigI9CbHVldG9vdGgg4oCPPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLXlNee15nXp9eV150gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLXlNeU16rXqNeQ15Qg16DXp9eR16LXlCDXnC08eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+Iteg16rXldeg15kgMkctM0cg157Xldep15HXqteZ150iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLXoNeq15XXoNeZIDRHINee15XXqdeR16rXmdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i4oCP16DXqteV16DXmSAyRy0zRyDXnteV16nXkdeq15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IuKAj9eg16rXldeg15kgNEcg157Xldep15HXqteZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4i16DXqteV16DXmdedINec16DXmdeZ15Mg157Xldep15HXqteZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiLXlNeg16rXldeg15nXnSDXnteV16nXkdeq15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+IteU15LXoteqINec15LXkdeV15wg15TXnteV15LXk9eoINep15wg16nXmdee15XXqSDXkdeg16rXldeg15nXnS5cblxu15DXnSDXqtek16LXmdecINee15fXk9epINeg16rXldeg15nXnSwg15nXmdeq15vXnyDXqdeq15fXldeZ15Eg16LXnCDXmdeT15kg15TXodek16cg16nXnNeaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiLXlNek16LXnCDXnteX15PXqSDXkNeqINeU16DXqteV16DXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IteQ15nXnyDXl9eZ15HXldeoINec15DXmdeg15jXqNeg15giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSDXnteX15XXkdeoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLXnteX16TXqSBHUFMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i157Xmden15XXnSDXnteV15LXk9eoINei15wg15nXk9eZIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IuKAj1dpLUZpINee15fXldeR16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IuKAj9ee15fXpNepIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiLigI/XnteZ16fXldedINee15XXkteT16gg16LXnCDXmdeT15kgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i15HXp9ep15XXqiDXnteZ16fXldedINek16LXmdec15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+Iteg16fXlCDXkNeqINeb15wg15TXlNeq16jXkNeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+Itek16jXmNeZINeZ15nXqdeV150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i16TXqNeY15kg15DXpNec15nXp9em15nXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i15TXnteh15og15nXodeq15XXkdeRINeR15DXldek158g15DXldeY15XXnteY15kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLXlNee16HXmiDXoNei15XXnCDXm9ei16og15zXqNeV15fXkS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i15TXnteh15og16DXoteV15wg15vXoteqINec15DXldeo15ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+Itee15bXoNeV158g16fXmdeg15XXl9eZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i15fXnNeV150g15HXlNen15nXpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLXntem15Eg15jXmdeh15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnaW5nX2xhYmVsIiBtc2dpZD0iNDkwMDc0Nzc0NDY1MzA5MjA5Ij4i15jXldei158gKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+Itee15zXkNeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IkJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IkJsdWV0b290aCDigI8oPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INee15vXqdeZ16jXmdedKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4iQmx1ZXRvb3RoINee15XXpNeh16ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiLigI9CbHVldG9vdGgg4oCPKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDXnteb16nXmdeo15nXnSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IuKAj0JsdWV0b290aCDXnteV16TXodenIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLXkdeU15nXqNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+Iteh15nXkdeV15Eg15DXldeY15XXnteY15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i16HXmdeR15XXkSDXoNei15XXnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiLXoNei15XXnCDXkdee16bXkSDXlNem15LXlCDXnNeQ15XXqNeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiLXoNei15XXnCDXkdee16bXkSDXlNem15LXlCDXnNeo15XXl9eRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Itep15nXmNeqINen15zXmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Itee15nXp9eV150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i157Xmden15XXnSDXm9eR15XXmSI8L3N0cmluZz4KQEAgLTE5MywxMyArMTk3LDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Itec15Ag157Xl9eV15HXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLXkNeZ158g16jXqdeqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg15vXkdeV15kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4i16rXpteV15LXqiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+Iteq16bXldeS16ogV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiLigI9XaS1GaSDXm9eR15XXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLXlNei15HXqCDXnteh15oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLXkdeU15nXqNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i15DXldeY15XXnteY15kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i15TXldeT16LXldeqINee15XXpNeZ16LXldeqINeb15DXnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IteS16kg15DXnNeZ15TXnSDXkdeb15wg16LXqiDXotecINeZ15PXmSDXlNeX15zXp9eUINec157XmNeULlxu15TXl9ec16cg15zXnteY15Qg16nXldeRINec157XoteR16gg15zXnteo15vXliDXlNeR16fXqNeUINep15wg15TXntei16jXm9eqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IteU15fXnNenINee16fXpteUINeU157XodeaINeb15PXmSDXnNeU16bXmdeSINeQ16og15TXodeo15LXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i15TXl9ec16cg157Xp9em15Qg15TXnteh15og15vXk9eZINec15TXpteZ15Ig15DXqiDXodeo15LXnCDXlNee16LXqNeb16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i157XpteRINeU15nXpNeV15og16bXkdei15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+Itee16bXkSDXoNeZ15LXldeT15nXldeqINee15XXkteR16jXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4i157XpteRINeq15nXp9eV158g16bXkdeiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiLXmdeZ16rXm9efINep15TXqNep16pcbtee16DXldeY16jXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i15fXmdek15XXqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLXlNeh15gg15zXntei15zXlCDXm9eT15kg15zXlNem15nXkiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i15TXodeYINep157XkNec15Qg15vXk9eZINec15TXpteZ15IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKaW5kZXggNzM5MmFlOS4uMGJlZTlmMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IuOBk+OBruODkeOCveOCs+ODs+OBi+OCieOBrlVTQuODh+ODkOODg+OCsOOCkuW4uOOBq+ioseWPr+OBmeOCiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IueUu+mdouOCteOCpOOCuuOBq+WQiOOCj+OBm+OBpuaLoeWkpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLnlLvpnaLjgrXjgqTjgrrjgavlkIjjgo/jgZvjgabmi6HlpKciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLkupLmj5vjgrrjg7zjg6AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i44KI44KK5bCP5Z6L44Gu55S76Z2i5ZCR44GR44Gu44Ki44OX44Oq44Gu5aC05ZCI44Gv44CB44K644O844Og44Kz44Oz44OI44Ot44O844Or44GM5pmC6KiI44Gu44Gd44Gw44Gr6KGo56S644GV44KM44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IuOCueOCr+ODquODvOODs+OCt+ODp+ODg+ODiOOCkuS/neWtmOS4rS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IuOCueOCr+ODquODvOODs+OCt+ODp+ODg+ODiOOCkuS/neWtmOOBl+OBpuOBhOOBvuOBmS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i44K544Kv44Oq44O844Oz44K344On44OD44OI44KS5L+d5a2Y44GX44Gm44GE44G+44GZ44CCIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IuODm+ODvOODoCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IuODoeODi+ODpeODvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IuacgOi/keS9v+OBo+OBn+OCouODl+ODqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IuaknOe0oiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLjgqvjg6Hjg6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IuWFpeWKm+aWueazleOBruWIh+OCiuabv+OBiOODnOOCv+ODs+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLkupLmj5vjgrrjg7zjg6Djg5zjgr/jg7PjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IuWwj+OBleOBhOeUu+mdouOBi+OCieWkp+OBjeOBhOeUu+mdouOBq+aLoeWkp+OAgiI8L3N0cmluZz4KQEAgLTE1NSw2ICsxNTUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+Iumbu+axoDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLmqZ/lhoXjg6Ljg7zjg4k8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4i54++5Zyo5ZywOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4i44Ki44Op44O844Og44GvPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPuOBq+ioreWumuOBleOCjOOBpuOBhOOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJH772eM0fjg4fjg7zjgr/jgYznhKHlirnjgavjgarjgorjgb7jgZfjgZ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0R+ODh+ODvOOCv+OBjOeEoeWKueOBq+OBquOCiuOBvuOBl+OBnyI8L3N0cmluZz4KQEAgLTE2NiwxMiArMTY3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaeaOpee2mua4iOOBvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iR1BT44Gn5qSc57Si5LitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkdQU+OBq+OCiOOCiuePvuWcqOWcsOOBjOioreWumuOBleOCjOOBvuOBl+OBnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IuePvuWcqOWcsOODquOCr+OCqOOCueODiOOBjOOCouOCr+ODhuOCo+ODliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IumAmuefpeOCkuOBmeOBueOBpua2iOWOu+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLjgqLjg5fjg6rmg4XloLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IueUu+mdouOBr+iHquWLleeahOOBq+Wbnui7ouOBl+OBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i55S76Z2i44Gv5qiq5ZCR44GN44Gr44Ot44OD44Kv44GV44KM44Gm44GE44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IueUu+mdouOBr+e4puWQkeOBjeOBq+ODreODg+OCr+OBleOCjOOBpuOBhOOBvuOBmeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiLjg4fjgrbjg7zjg4jjgrHjg7zjgrkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i44K544Kv44Oq44O844Oz44K744O844OQ44O8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4i44Kk44O844K144ON44OD44OIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLmqZ/lhoXjg6Ljg7zjg4kiPC9zdHJpbmc+CkBAIC0xODMsNiArMTg1LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i55S76Z2i44Gu5piO44KL44GVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLoh6rli5Xlm57ou6IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i55S76Z2i44Gu5ZCR44GN44KS44Ot44OD44KvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+Iue4puWQkeOBjeOBq+ODreODg+OCr+a4iOOBvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4i5qiq5ZCR44GN44Gr44Ot44OD44Kv5riI44G/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IuWFpeWKm+aWueazlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IuePvuWcqOWcsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLnj77lnKjlnLBPRkYiPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzIwMCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IuaOpee2muOBleOCjOOBpuOBhOOBvuOBm+OCkyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLjg43jg4Pjg4jjg6/jg7zjgq/jgarjgZciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBPRkYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmnjg4fjgqPjgrnjg5fjg6zjgqQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLjg6/jgqTjg6Tjg6zjgrnjg4fjgqPjgrnjg5fjg6zjgqQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4i55S76Z2i44Gu44Kt44Oj44K544OIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i55S76Z2i44Gu5piO44KL44GVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuiHquWLlSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLjgZPjgZPjgavpgJrnn6XjgYzooajnpLrjgZXjgozjgb7jgZkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLkuIvjgavjgrnjg6/jgqTjg5fjgZnjgovjgajjgIHjgYTjgaTjgafjgoLpgJrnn6XjgpLooajnpLrjgafjgY3jgb7jgZnjgIJcbuOCt+OCueODhuODoOOCkueuoeeQhuOBmeOCi+OBq+OBr+OCguOBhuS4gOW6puS4i+OBq+OCueODr+OCpOODl+OBl+OBpuOBj+OBoOOBleOBhOOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IuODkOODvOOCkuihqOekuuOBmeOCi+OBq+OBr+OAgeeUu+mdouOBruerr+OBi+OCieOCueODr+OCpOODl+OBl+OBvuOBmSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i44K344K544OG44Og44OQ44O844KS6KGo56S644GZ44KL44Gr44Gv44CB55S76Z2i44Gu56uv44GL44KJ44K544Ov44Kk44OX44GX44G+44GZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IuiJsuWPjei7ouODouODvOODiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IuaLoeW8teOCs+ODs+ODiOODqeOCueODiOODouODvOODiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4i6Imy6KOc5q2j44Oi44O844OJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiLjg43jg4Pjg4jjg6/jg7zjgq/jgYznm6PoppbjgZXjgozjgotcbuWgtOWQiOOBjOOBguOCiuOBvuOBmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i5qSc57Si44GX44G+44GZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuS4iuOBq+OCueODqeOCpOODieOBl+OBpjx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOCkuihjOOBhOOBvuOBmeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuW3puOBq+OCueODqeOCpOODieOBl+OBpjx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOCkuihjOOBhOOBvuOBmeOAgiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rYS1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rYS1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMjA5MzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWthLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IuGDlOGDmeGDoOGDkOGDnOGDmCDhg5Dhg5vhg5/hg5Dhg5vhg5Dhg5Mg4YOT4YOQ4YOR4YOa4YOd4YOZ4YOY4YOa4YOY4YOQIOGDl+GDkOGDoOGDkOGDluGDo+GDmiDhg53hg6Dhg5jhg5Thg5zhg6Lhg5Dhg6rhg5jhg5Dhg6jhg5giPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta2EtckdFLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWthLXJHRS1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMjA5MzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWthLXJHRS1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiLhg5Thg5nhg6Dhg5Dhg5zhg5gg4YOQ4YOb4YOf4YOQ4YOb4YOQ4YOTIOGDk+GDkOGDkeGDmuGDneGDmeGDmOGDmuGDmOGDkCDhg5fhg5Dhg6Dhg5Dhg5bhg6Phg5og4YOd4YOg4YOY4YOU4YOc4YOi4YOQ4YOq4YOY4YOQ4YOo4YOYIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMGEwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+IuGDoeGDmOGDoeGDouGDlOGDm+GDmOGDoSBVSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiLhg5Lhg5Dhg6Hhg6Phg6Thg5fhg5Dhg5Xhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiLhg6Hhg5jhg5jhg5Phg5Dhg5wg4YOQ4YOb4YOd4YOo4YOa4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+IuGDkOGDnuGDmOGDoSDhg6jhg5Thg6Hhg5Dhg67hg5Thg5EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IuGDkeGDneGDmuGDneGDoSDhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Thg5Hhg6Phg5rhg5gg4YOQ4YOe4YOU4YOR4YOY4YOhIOGDoeGDmOGDkCDhg6rhg5Dhg6Dhg5jhg5Thg5rhg5jhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IuGDkeGDneGDmuGDnSDhg5Dhg57hg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOj4YOl4YOb4YOU4YOR4YOQIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMSDhg5Hhg53hg5rhg50g4YOQ4YOe4YOYIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQg4YOR4YOd4YOa4YOdIOGDkOGDnuGDmCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiLhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Thg5Hhg5gg4YOQ4YOgIOGDkOGDoOGDmOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+IuGDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbGF0ZXN0X2V2ZW50c190aXRsZSIgbXNnaWQ9IjY1OTQ3Njc0Mzg1Nzc1OTMxNzIiPiLhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiLhg6jhg5Thg5Dhg5Thg6Dhg5fhg5Thg5cg4YOT4YOQ4YOb4YOi4YOU4YOc4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IuGDkeGDkOGDouGDkOGDoOGDlOGDkCDhg6/hg5Phg5Thg5Hhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4i4YOT4YOQ4YOg4YOp4YOU4YOc4YOY4YOa4YOY4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IlVTQi3hg5jhg5cg4YOT4YOQ4YOi4YOU4YOc4YOV4YOQIOGDkOGDoCDhg5Dhg6Dhg5jhg6Eg4YOb4YOu4YOQ4YOg4YOT4YOQ4YOt4YOU4YOg4YOY4YOa4YOYLlxu4YOS4YOQ4YOb4YOd4YOY4YOn4YOU4YOc4YOU4YOXIOGDm+GDruGDneGDmuGDneGDkyDhg5Thg5rhg5Thg6Xhg6Lhg6Dhg50t4YOT4YOQ4YOb4YOi4YOU4YOc4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiLhg5Thg5rhg5Thg5vhg5Thg5zhg6Lhg5jhg6Eg4YOS4YOQ4YOb4YOd4YOn4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4i4YOe4YOQ4YOg4YOQ4YOb4YOU4YOi4YOg4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0ODc5ODc5Njk4NTAwOTU1MzAwIj4i4YOX4YOV4YOY4YOX4YOb4YOk4YOg4YOY4YOc4YOQ4YOV4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiLhg5Dhg5Xhg6Lhg53hg6Dhg53hg6Lhg5Dhg6rhg5jhg5jhg6Eg4YOU4YOZ4YOg4YOQ4YOc4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4i4YOT4YOQ4YOT4YOj4YOb4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiLhg5Dhg5Xhg6Lhg50uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aCDhg5vhg5jhg5Thg6Dhg5fhg5Thg5Hhg6Phg5rhg5jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i4YOo4YOU4YOn4YOV4YOQ4YOc4YOY4YOhIOGDm+GDlOGDl+GDneGDk+GDlOGDkeGDmOGDoSDhg5Phg5Dhg6fhg5Thg5zhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiLhg6Thg5jhg5bhg5jhg5nhg6Phg6Dhg5gg4YOZ4YOa4YOQ4YOV4YOY4YOQ4YOi4YOj4YOg4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IuGDkuGDoeGDo+GDoOGDlywg4YOb4YOY4YOh4YOq4YOU4YOXIOGDkOGDnuGDmuGDmOGDmeGDkOGDquGDmOGDkOGDoSDigJ48eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+4oCcIFVTQiDhg5vhg5Thg67hg6Hhg5jhg5Thg6Dhg5Thg5Hhg5Dhg6Hhg5fhg5Dhg5wg4YOs4YOV4YOT4YOd4YOb4YOY4YOhIOGDo+GDpOGDmuGDlOGDkeGDkD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IuGDkuGDoeGDo+GDoOGDlywg4YOb4YOY4YOh4YOq4YOU4YOXIOGDkOGDnuGDmuGDmOGDmeGDkOGDquGDmOGDkOGDoSDigJ48eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+4oCcIFVTQiDhg5Dhg6Xhg6Hhg5Thg6Hhg6Phg5Dhg6Dhg5fhg5Dhg5wg4YOs4YOV4YOT4YOd4YOb4YOY4YOhIOGDo+GDpOGDmuGDlOGDkeGDkD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IuGDkuGDoeGDo+GDoOGDlyA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+ICwg4YOg4YOd4YOT4YOU4YOh4YOQ4YOqIOGDlOGDoSBVU0Ig4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOQIOGDqOGDlOGDlOGDoOGDl+GDlOGDkeGDo+GDmuGDmOGDkD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IuGDkuGDoeGDo+GDoOGDlyA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+ICwg4YOg4YOd4YOT4YOU4YOh4YOQ4YOqIOGDlOGDoSBVU0Ig4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOQIOGDqOGDlOGDlOGDoOGDl+GDlOGDkeGDo+GDmuGDmOGDkD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLhg5Dhg6Dhg6rhg5Thg6Dhg5fhg5gg4YOT4YOQ4YOn4YOU4YOc4YOU4YOR4YOj4YOa4YOYIOGDkOGDnuGDmCDhg5Dhg6Ag4YOb4YOj4YOo4YOQ4YOd4YOR4YOhIOGDkOGDmyBVU0Ig4YOQ4YOl4YOh4YOU4YOh4YOj4YOQ4YOg4YOX4YOQ4YOcLiDhg6jhg5Thg5jhg6Lhg6fhg5Xhg5Thg5cg4YOb4YOU4YOi4YOYIOGDkOGDmyDhg5Dhg6Xhg6Hhg5Thg6Hhg6Phg5Dhg6Dhg5jhg6Eg4YOo4YOU4YOh4YOQ4YOu4YOU4YORIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJVU0Ig4YOQ4YOl4YOh4YOU4YOh4YOj4YOQ4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiLhg5zhg5Dhg67hg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLhg5Dhg5sgVVNCIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDmOGDoSDhg5zhg5Dhg5Lhg6Phg5rhg5jhg6Hhg67hg5vhg5Thg5Xhg5Dhg5Mg4YOS4YOQ4YOb4YOd4YOn4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i4YOQ4YOV4YOi4YOd4YOb4YOQ4YOi4YOj4YOg4YOQ4YOTIOGDkuGDkOGDm+GDneGDmOGDp+GDlOGDnOGDlCDhg5Dhg5sgVVNCIOGDkOGDpeGDoeGDlOGDoeGDo+GDkOGDoOGDmOGDoeGDl+GDleGDmOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IuGDkuGDkOGDkOGDpeGDouGDmOGDo+GDoOGDk+GDlOGDoSBVU0Ig4YOS4YOQ4YOb4YOQ4YOg4YOX4YOV4YOQPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiLhg5nhg53hg5vhg57hg5jhg6Phg6Lhg5Thg6Dhg5jhg6EgUlNBIOGDkuGDkOGDoeGDkOGDpuGDlOGDkeGDmOGDoSDhg5fhg5jhg5fhg5jhg6Eg4YOQ4YOc4YOQ4YOR4YOU4YOt4YOT4YOY4YOQOlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i4YOn4YOd4YOV4YOU4YOa4YOX4YOV4YOY4YOhIOGDk+GDkOGDoOGDl+GDlCDhg5zhg5Thg5Hhg5Ag4YOQ4YObIOGDmeGDneGDm+GDnuGDmOGDo+GDouGDlOGDoOGDmOGDk+GDkOGDnC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLhg5vhg5Dhg6Hhg6jhg6Lhg5Dhg5Hhg5gg4YOo4YOU4YOq4YOV4YOQ4YOa4YOU4YOXIOGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg6jhg5Thg6Hhg5Dhg5Xhg6Hhg5Thg5Hhg5Dhg5MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IuGDkuGDkOGDrOGDmOGDlOGDlyDhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOo4YOU4YOh4YOQ4YOV4YOh4YOU4YOR4YOQ4YOTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLhg6Hhg5nhg6Dhg5jhg5zhg6jhg53hg6Lhg5jhg6Eg4YOo4YOU4YOc4YOQ4YOu4YOV4YOQ4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDoeGDo+GDoOGDkOGDl+GDmOGDoSDhg6jhg5Thg5zhg5Dhg67hg5Xhg5DigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IuGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg6Hhg6Phg6Dhg5Dhg5fhg5gg4YOo4YOU4YOc4YOQ4YOu4YOj4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4i4YOh4YOZ4YOg4YOY4YOc4YOo4YOd4YOi4YOYIOGDkuGDkOGDk+GDkOGDpuGDlOGDkeGDo+GDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4i4YOo4YOU4YOU4YOu4YOU4YOXIOGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg6Hhg6Phg6Dhg5Dhg5fhg5jhg6Eg4YOh4YOQ4YOc4YOQ4YOu4YOQ4YOV4YOQ4YOTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RpdGxlIiBtc2dpZD0iNzA1NzgxMTE2NzQ2OTIyNzcxIj4i4YOV4YOU4YOgIOGDm+GDneGDruGDlOGDoOGDruGDk+GDkCDhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOQ4YOc4YOQ4YOR4YOU4YOt4YOT4YOY4YOhIOGDkuGDkOGDk+GDkOGDpuGDlOGDkeGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IuGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg6Hhg6Phg6Dhg5Dhg5fhg5gg4YOV4YOU4YOgIOGDqOGDlOGDmOGDnOGDkOGDruGDkC4g4YOo4YOU4YOh4YOQ4YOr4YOa4YOd4YOQLCDhg5vhg5Thg67hg6Hhg5jhg5Thg6Dhg5Thg5Hhg5Ag4YOj4YOZ4YOV4YOUIOGDk+GDkOGDmeGDkOGDleGDlOGDkeGDo+GDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJVU0Ig4YOk4YOQ4YOY4YOa4YOY4YOhIOGDouGDoOGDkOGDnOGDoeGDpOGDlOGDoOGDmOGDoSDhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLhg5vhg5Thg5Phg5jhg5At4YOh4YOQ4YOZ4YOg4YOQ4YOV4YOQ4YOTIChNVFApIOGDqeGDkOGDoOGDl+GDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+IuGDm+GDmOGDo+GDlOGDoOGDl+GDlOGDlyDhg6Dhg53hg5Lhg53hg6Dhg6og4YOZ4YOQ4YOb4YOU4YOg4YOQIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiJBbmRyb2lkIEZpbGUgVHJhbnNmZXIg4YOQ4YOe4YOY4YOhIOGDk+GDkOGDp+GDlOGDnOGDlOGDkeGDkCBNYWMt4YOX4YOV4YOY4YOhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4i4YOj4YOZ4YOQ4YOcIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IuGDoeGDkOGDrOGDp+GDmOGDoeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IuGDm+GDlOGDnOGDmOGDoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IuGDkeGDneGDmuGDneGDoSDhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Thg5Hhg6Phg5rhg5gg4YOQ4YOe4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i4YOr4YOY4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IuGDmeGDkOGDm+GDlOGDoOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i4YOo4YOU4YOn4YOV4YOQ4YOc4YOY4YOhIOGDm+GDlOGDl+GDneGDk+GDmOGDoSDhg5Lhg5Dhg5Phg5Dhg6Dhg5fhg5Xhg5jhg6Eg4YOm4YOY4YOa4YOQ4YOZ4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLhg5fhg5Dhg5Xhg6Hhg5Thg5Hhg5Dhg5Phg5gg4YOb4YOQ4YOh4YOo4YOi4YOQ4YOR4YOY4YOg4YOU4YOR4YOY4YOhIOGDpuGDmOGDmuGDkOGDmeGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IuGDqOGDlOGDquGDleGDkOGDmuGDlOGDlyDhg57hg5Dhg6Lhg5Dhg6Dhg5Ag4YOU4YOZ4YOg4YOQ4YOc4YOYIOGDo+GDpOGDoOGDnSDhg5Phg5jhg5Phg5jhg5cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iMjcwNzAyNzYzMzI0Mjk4MzM3MCI+IkJsdWV0b290aCDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg6Phg5rhg5jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IkJsdWV0b290aCDhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5gg4YOS4YOQ4YOs4YOn4YOV4YOU4YOi4YOY4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IuGDkeGDkOGDouGDkOGDoOGDlOGDkCDhg5Phg5Dhg5vhg6/hg5Phg5Dhg6Dhg5jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X29uZV9iYXIiIG1zZ2lkPSI3Nzc0ODg3NzIxODkxMDU3NTIzIj4i4YOR4YOQ4YOi4YOQ4YOg4YOU4YOY4YOQIOGDlOGDoOGDlyDhg5bhg53hg5rhg5bhg5Thg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+IuGDlOGDmuGDlOGDm+GDlOGDnOGDouGDmCDhg53hg6Ag4YOW4YOd4YOa4YOW4YOULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+IuGDlOGDmuGDlOGDm+GDlOGDnOGDouGDmCDhg6Hhg5Dhg5sg4YOW4YOd4YOa4YOW4YOULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+IuGDlOGDmuGDlOGDm+GDlOGDnOGDouGDmCDhg6Hhg5Dhg5Xhg6Hhg5Thg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19waG9uZSIgbXNnaWQ9IjQ4OTQ3MDg5MzcwNTI2MTEyODEiPiLhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5gg4YOQ4YOgIOGDkOGDoOGDmOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiLhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOh4YOY4YOS4YOc4YOQ4YOa4YOYIOGDlOGDoOGDlyDhg5bhg53hg5rhg5bhg5Thg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiLhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOh4YOY4YOS4YOc4YOQ4YOa4YOYIOGDneGDoCDhg5bhg53hg5rhg5bhg5Thg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90aHJlZV9iYXJzIiBtc2dpZD0iODUyMTkwNDg0MzkxOTk3MTg4NSI+IuGDouGDlOGDmuGDlOGDpOGDneGDnOGDmOGDoSDhg6Hhg5jhg5Lhg5zhg5Dhg5rhg5gg4YOh4YOQ4YObIOGDluGDneGDmuGDluGDlOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjQ3MTgzNDg2ODU4MDc1Nzg5OCI+IuGDouGDlOGDmuGDlOGDpOGDneGDnOGDmOGDoSDhg6Hhg5jhg5Lhg5zhg5Dhg5rhg5gg4YOh4YOg4YOj4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiLhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg5gg4YOQ4YOgIOGDkOGDoOGDmOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiLhg5fhg5Dhg6Dhg5jhg6bhg5gg4YOW4YOd4YOa4YOW4YOULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiLhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOT4YOQ4YOq4YOU4YOb4YOQOiDhg53hg6Dhg5gg4YOW4YOd4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOU4YOR4YOY4YOhIOGDkuGDkOGDk+GDkOGDquGDlOGDm+GDkDog4YOh4YOQ4YOb4YOYIOGDluGDneGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiLhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5fhg5Ag4YOS4YOQ4YOT4YOQ4YOq4YOU4YOb4YOY4YOhIOGDoeGDkOGDmOGDm+GDlOGDk+GDnSDhg6Hhg5jhg5Lhg5zhg5Dhg5rhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiJXaWZpIOGDkuGDkOGDm+GDneGDoOGDl+GDo+GDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2lmaSDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIOGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDo+GDmuGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaWZpIOGDoeGDmOGDkuGDnOGDkOGDmuGDmCDhg5Thg6Dhg5cg4YOW4YOd4YOa4YOW4YOU4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiJXaWZpIOGDoeGDmOGDkuGDnOGDkOGDmuGDmCDhg53hg6Ag4YOW4YOd4YOa4YOW4YOU4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IldpZmkg4YOh4YOQ4YOb4YOYIOGDluGDneGDmuGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4iV2lmaSDhg6Hhg5jhg5Lhg5zhg5Dhg5rhg5gg4YOh4YOg4YOj4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iV2lNQVgg4YOQ4YOgIOGDkOGDoOGDmOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X29uZV9iYXIiIG1zZ2lkPSI0MTcwOTk0Mjk5MDExODYzNjQ4Ij4iV2lNQVgg4YOU4YOg4YOX4YOYIOGDoeGDleGDlOGDouGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYLeGDmOGDoSDhg53hg6Dhg5gg4YOW4YOd4YOa4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWC3hg5jhg6Eg4YOh4YOQ4YOb4YOYIOGDluGDneGDmuGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IldpTUFYIOGDoeGDmOGDkuGDnOGDkOGDmuGDmCDhg6Hhg6Dhg6Phg5rhg5jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaWduYWwiIG1zZ2lkPSI3MDY0NjQ1MzIwNzgyNTg1MTY3Ij4i4YOh4YOY4YOS4YOc4YOQ4YOa4YOYIOGDkOGDoCDhg5Dhg6Dhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+IuGDkOGDoCDhg5Dhg6Dhg5jhg6Eg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOj4YOa4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IuGDoeGDmOGDkuGDnOGDkOGDmuGDmCDhg5zhg6Phg5og4YOW4YOd4YOa4YOW4YOU4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfb25lX2JhciIgbXNnaWQ9IjE2ODU3MzAxMTMxOTIwODE4OTUiPiLhg5Thg6Dhg5fhg5gg4YOW4YOd4YOa4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4i4YOd4YOg4YOYIOGDoeGDleGDlOGDouGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4i4YOh4YOQ4YOb4YOYIOGDluGDneGDmuGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+IuGDoeGDoOGDo+GDmuGDmCDhg6Hhg5jhg5Lhg5zhg5Dhg5rhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IuGDqeGDkOGDoOGDl+GDo+GDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4i4YOS4YOQ4YOb4YOd4YOg4YOX4YOj4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19jb25uZWN0ZWQiIG1zZ2lkPSI4MzY2MjU2NjkzNzE5NDk5NjY1Ij4i4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOj4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2dwcnMiIG1zZ2lkPSIxNjA2NDc3MjI0NDg2NzQ3NzUxIj4iR1BSUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzF4IiBtc2dpZD0iOTk0MTMzNDY4MTIwMjQ0MDE4Ij4iMSBYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25faHNwYSIgbXNnaWQ9IjIwMzIzMjg4NTU0NjI2NDUxOTgiPiJIU1BBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fM2ciIG1zZ2lkPSI4NjI4NTYyMzA1MDAzNTY4MjYwIj4iM0ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zLjVnIiBtc2dpZD0iODY2NDg0NTYwOTk4MTY5MjAwMSI+IjMuNeGDkuGDkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i4YOg4YOd4YOj4YOb4YOY4YOc4YOS4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IlNJTSDhg5Dhg6Ag4YOQ4YOg4YOY4YOhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiJCbHVldG9vdGgt4YOY4YOhIOGDqeGDkOGDoOGDl+GDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+IuGDl+GDleGDmOGDl+GDm+GDpOGDoOGDmOGDnOGDkOGDleGDmOGDoSDhg6Dhg5Thg5/hg5jhg5vhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4i4YOR4YOQ4YOi4YOQ4YOg4YOU4YOQOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YOe4YOg4YOd4YOq4YOU4YOc4YOi4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4i4YOh4YOY4YOh4YOi4YOU4YOb4YOY4YOhIOGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IuGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOh4YOj4YOk4YOX4YOQ4YOV4YOU4YOR4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTIOGDkuGDkOGDkOGDpeGDouGDmOGDo+GDoOGDk+GDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4iR1BTLeGDmOGDoSDhg5Phg5Dhg5Phg5Lhg5Thg5zhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiLhg6Lhg5Thg5rhg5Thg6Lhg5Dhg5jhg57hg5gg4YOp4YOQ4YOg4YOX4YOj4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLhg5Xhg5jhg5Hhg6Dhg5Dhg6rhg5jhg5jhg6Eg4YOg4YOU4YOf4YOY4YOb4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLhg6Phg67hg5vhg50g4YOg4YOU4YOf4YOY4YOb4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4YOQ4YOb4YOd4YOo4YOa4YOY4YOa4YOY4YOQIOGDoeGDmOGDmOGDk+GDkOGDnC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiLhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Ag4YOs4YOQ4YOY4YOo4YOQ4YOa4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOY4YOhIOGDpOGDkOGDoOGDk+GDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiLhg6Hhg6zhg6Dhg5Dhg6Thg5gg4YOe4YOQ4YOg4YOQ4YOb4YOU4YOi4YOg4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IuGDkeGDneGDmuGDnSDhg5Dhg57hg5Thg5Hhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IuGDm+GDneGDm+GDruGDm+GDkOGDoOGDlOGDkeGDlOGDmuGDmDogPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+IuGDm+GDneGDkeGDmOGDmuGDo+GDoOGDmOGDoSA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IuGDlOGDmuGDlOGDm+GDlOGDnOGDouGDmDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLhg5fhg5Xhg5jhg5fhg5vhg6Thg6Dhg5jhg5zhg5Dhg5Xhg5jhg6Eg4YOg4YOU4YOf4YOY4YOb4YOYIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IuGDm+GDk+GDlOGDkeGDkOGDoOGDlOGDneGDkeGDkCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IuGDm+GDkOGDpuGDleGDmOGDq+GDkOGDoOGDkCDhg5Phg5Dhg6fhg5Thg5zhg5Thg5Hhg6Phg5rhg5jhg5A6IDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyDhg5jhg5zhg6Lhg5Thg6Dhg5zhg5Thg6Lhg5gg4YOS4YOQ4YOY4YOX4YOY4YOo4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDlOGDkeGDmCDhg5Lhg5Dhg5fhg5jhg6jhg6Phg5rhg5jhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4i4YOb4YOd4YOR4YOY4YOa4YOj4YOg4YOYIOGDmOGDnOGDouGDlOGDoOGDnOGDlOGDouGDmCDhg5Lhg5Dhg5jhg5fhg5jhg6jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4i4YOY4YOc4YOi4YOU4YOg4YOc4YOU4YOi4YOYIOGDkuGDkOGDmOGDl+GDmOGDqOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOb4YOY4YOQ4YOm4YOs4YOY4YOU4YOXIOGDmOGDnOGDouGDlOGDoOGDnOGDlOGDouGDmOGDoSDhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOc4YOh4YOQ4YOW4YOm4YOV4YOg4YOj4YOaIOGDmuGDmOGDm+GDmOGDouGDoS5cblxu4YOX4YOjIOGDkuGDkOGDkOGDpeGDouGDmOGDo+GDoOGDlOGDkeGDlyDhg5jhg5zhg6Lhg5Thg6Dhg5zhg5Thg6Lhg6EsIOGDqOGDlOGDoeGDkOGDq+GDmuGDneGDkCDhg5vhg53hg5Hhg5jhg5rhg6Phg6Dhg5gg4YOd4YOe4YOU4YOg4YOQ4YOi4YOd4YOg4YOY4YOh4YOX4YOV4YOY4YOhIOGDk+GDkOGDm+GDkOGDouGDlOGDkeGDmOGDl+GDmCDhg5fhg5Dhg5zhg67hg5jhg6Eg4YOS4YOQ4YOT4YOQ4YOu4YOT4YOQIOGDm+GDneGDkuGDmOGDrOGDmOGDneGDly4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4i4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOU4YOR4YOY4YOhIOGDruGDlOGDmuGDkOGDruGDmuGDkCDhg6nhg5Dhg6Dhg5fhg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4i4YOY4YOc4YOi4YOU4YOg4YOc4YOU4YOiIOGDmeGDkOGDleGDqOGDmOGDoOGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJHUFMt4YOY4YOhIOGDq+GDlOGDkeGDnOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFMt4YOY4YOXIOGDk+GDkOGDk+GDkuGDlOGDnOGDmOGDmuGDmCDhg5vhg5Phg5Thg5Hhg5Dhg6Dhg5Thg53hg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLhg5vhg5Phg5Thg5Hhg5Dhg6Dhg5Thg53hg5Hhg5jhg6Eg4YOb4YOd4YOX4YOu4YOd4YOV4YOc4YOU4YOR4YOYIOGDkOGDpeGDouGDmOGDo+GDoOGDmOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IuGDp+GDleGDlOGDmuGDkCDhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5jhg6Eg4YOs4YOQ4YOo4YOa4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IuGDkOGDnuGDmOGDoSDhg6jhg5Thg6Hhg5Dhg67hg5Thg5EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IuGDlOGDmeGDoOGDkOGDnOGDmCDhg6jhg5Thg6Lhg6Dhg5jhg5Dhg5rhg5Phg5Thg5Hhg5Ag4YOQ4YOV4YOi4YOd4YOb4YOQ4YOi4YOj4YOg4YOQ4YOTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i4YOU4YOZ4YOg4YOQ4YOc4YOYIOGDk+GDkOGDkeGDmuGDneGDmeGDmOGDmuGDmOGDkCDhg5fhg5Dhg6Dhg5Dhg5bhg6Phg5og4YOd4YOg4YOY4YOU4YOc4YOi4YOQ4YOq4YOY4YOQ4YOo4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IuGDlOGDmeGDoOGDkOGDnOGDmCDhg5Phg5Dhg5Hhg5rhg53hg5nhg5jhg5rhg5jhg5Ag4YOe4YOd4YOg4YOi4YOg4YOU4YOi4YOY4YOhIOGDneGDoOGDmOGDlOGDnOGDouGDkOGDquGDmOGDkOGDqOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i4YOh4YOQ4YOT4YOU4YOh4YOU4YOg4YOi4YOdIOGDp+GDo+GDl+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IuGDlOGDl+GDlOGDoOGDnOGDlOGDouGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i4YOX4YOV4YOY4YOX4YOb4YOk4YOg4YOY4YOc4YOQ4YOV4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiLhg5Phg5Dhg5vhg6Phg67hg6Lhg5Xhg5AsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnZWRfbGFiZWwiIG1zZ2lkPSI4ODY1NDEzMDc5NDE0MjQ2MDgxIj4i4YOT4YOQ4YOb4YOj4YOu4YOi4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IkJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IkJsdWV0b290aCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDkCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IkJsdWV0b290aCDhg5Lhg5Dhg5vhg53hg6Dhg5fhg6Phg5rhg5jhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IuGDoeGDmOGDmeGDkOGDqOGDmeGDkOGDqOGDlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4i4YOQ4YOV4YOi4YOdIOGDm+GDneGDkeGDoOGDo+GDnOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLhg6Dhg53hg6Lhg5Dhg6rhg5jhg5jhg6Eg4YOp4YOQ4YOZ4YOU4YOi4YOV4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IuGDnuGDneGDoOGDouGDoOGDlOGDouGDluGDlCDhg6nhg5Dhg5nhg5Thg6Lhg5jhg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IuGDmuGDkOGDnOGDk+GDqOGDkOGDpOGDouGDluGDlCDhg6nhg5Dhg5nhg5Thg6Lhg5jhg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i4YOo4YOU4YOn4YOV4YOQ4YOc4YOY4YOhIOGDm+GDlOGDl+GDneGDk+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IuGDm+GDk+GDlOGDkeGDkOGDoOGDlOGDneGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLhg5vhg5Phg5Thg5Hhg5Dhg6Dhg5Thg53hg5Hhg5Ag4YOS4YOQ4YOb4YOd4YOg4YOX4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+IuGDm+GDlOGDk+GDmOGDkCDhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IuGDm+GDruGDneGDmuGDneGDkyDhg5Lhg5Dhg5Phg5Dhg6Phg5Phg5Thg5Hhg5Thg5rhg5gg4YOT4YOQ4YOu4YOb4YOQ4YOg4YOU4YOR4YOY4YOhIOGDluGDkOGDoOGDlOGDkeGDmOGDoeGDl+GDleGDmOGDoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+IuGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4i4YOT4YOg4YOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl9sYWJlbCIgbXNnaWQ9IjUyMzg5OTU2MzIxMzA4OTc4NDAiPiLhg5vhg5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IuGDkOGDoCDhg5Dhg6Dhg5jhg6Eg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOj4YOa4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLhg6Xhg6Hhg5Thg5rhg5gg4YOQ4YOgIOGDkOGDoOGDmOGDoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIOGDkuGDkOGDm+GDneGDoOGDl+GDo+GDmuGDmOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJDYXN0IFNjcmVlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuGDkuGDkOGDnOGDkOGDl+GDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLhg5Dhg5Xhg6Lhg53hg5vhg5Dhg6Lhg6Phg6Dhg5Dhg5MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i4YOk4YOU4YOg4YOX4YOQIOGDmOGDnOGDleGDlOGDoOGDoeGDmOGDmOGDoSDhg6Dhg5Thg5/hg5jhg5vhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLhg5Lhg5Dhg6Phg5vhg6/hg53hg5Hhg5Thg6Hhg5Thg5Hhg6Phg5rhg5gg4YOZ4YOd4YOc4YOi4YOg4YOQ4YOh4YOi4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4i4YOk4YOU4YOg4YOX4YOQIOGDmeGDneGDoOGDlOGDpeGDquGDmOGDmOGDoSDhg6Dhg5Thg5/hg5jhg5vhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IuGDqOGDlOGDoeGDkOGDq+GDmuGDneGDkCDhg6Xhg6Hhg5Thg5rhg5bhg5RcbuGDm+GDneGDnOGDmOGDouGDneGDoOGDmOGDnOGDkuGDmCDhg67hg53hg6Dhg6rhg5jhg5Thg5rhg5Phg5Thg5Hhg53hg5Phg5Thg6EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuGDq+GDmOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLhg5Lhg5Dhg5Dhg6Hhg6Dhg5jhg5Dhg5rhg5Thg5cg4YOW4YOU4YOb4YOd4YOXIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3hg5fhg5Xhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i4YOS4YOQ4YOQ4YOh4YOg4YOY4YOQ4YOa4YOU4YOXIOGDm+GDkOGDoOGDquGDruGDnOGDmOGDlSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t4YOX4YOV4YOY4YOhLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNDhjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWttLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IuGepeGeoeGevOGenOKAi+GeouGfgeGegOGfkuGemuGehOGfi+KAi+KAi+Geh+GetuGelOGfi+KAi+Gen+GfhOKAi+GegOGfkuGek+Geu+GehOKAi+GekeGet+Gen+KAi+GeleGfkuGeiuGfgeGegOGflCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1yS0gtbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta20tcktILWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE0OGNjMwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta20tcktILWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IuGepeGeoeGevOGenOKAi+GeouGfgeGegOGfkuGemuGehOGfi+KAi+KAi+Geh+GetuGelOGfi+KAi+Gen+GfhOKAi+GegOGfkuGek+Geu+GehOKAi+GekeGet+Gen+KAi+GeleGfkuGeiuGfgeGegOGflCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzAzMDlhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiLhnoXhn4bhno7hnrvhnoXigIvhnpThn5LhnprhnpHhnrbhnoDhn4vigIvhnpThn5Lhnprhnpbhn5DhnpPhn5LhnpIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4i4Z6f4Z6Y4Z+S4Z6i4Z624Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4i4Z6Z4Z6A4oCL4Z6F4Z+B4Z6J4oCL4Z6W4Z644oCL4Z6U4Z6J4Z+S4Z6H4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+IuGeluGfkOGej+GfjOGemOGetuGek+KAi+GegOGemOGfkuGemOGenOGet+GekuGeuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6Q4Z+S4Z6Y4Z644Z+XIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiLhnpThnorhnrfhnp/hn4HhnpLigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpDhn5Lhnpjhnrjhn5ciPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiLhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpDhn5Lhnpjhnrgg4Z+hIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4i4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6Q4Z+S4Z6Y4Z644Z+XICVkIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IuGeguGfkuGemOGetuGek+KAi+GegOGetuGemuKAi+Geh+GevOGek+KAi+GeiuGfhuGejuGeueGehCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4i4Z6U4Z6T4Z+S4Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IuGegOGetuGemuKAi+Geh+GevOGek+KAi+GeiuGfhuGejuGeueGehCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+IuGel+GfkuGeh+GetuGelOGfi+KAi+Gep+GelOGegOGemuGejuGfjeKAi+GelOGeieGfkuGeheGevOGem+KAi+GekOGfkuGemCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IuGeh+Get+Gej+KAi+GeouGen+Gfi+KAi+GekOGfkuGemOKAi+GeoOGevuGemeGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+IuGek+GfheKAi+Gen+Gem+GfiyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiLhnpjhnrfhnpPigIvhnoLhnrbhn4bhnpHhn5LhnprigIvhnoDhnrbhnprigIvhnpThnonhn5LhnoXhnrzhnpvigIvhno/hnrbhnpjigIvhnpnhnrzhnqLhn4Hhnp/hnpThn4rhnrjhn5RcbuGelOGfkuGemuGevuKAi+Gej+GfguKAi+Gep+GelOGegOGemuGejuGfjeKAi+GelOGeieGfkuGeheGevOGem+KAi+GekOGfkuGemOKAi+GeiuGfguGem+KAi+GelOGetuGek+KAi+GeleGfkuGeiuGem+Gfi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiLhnoDhnrbhnprigIvhnpThn5Lhnprhnr7igIvhnpDhn5LhnpgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiLhnoDhnrbhnprigIvhnoDhn4bhno7hno/hn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IuGenOGfieGetuGemeGeoOGfkuGenOGetuGemSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0ODc5ODc5Njk4NTAwOTU1MzAwIj4i4Z6W4Z+B4Z6b4oCL4Z6H4Z634Z+H4oCL4Z6Z4Z6T4Z+S4Z6P4Z6g4Z+E4Z+HIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IuGelOGehOGfkuGenOGet+Gem+KAi+GeouGfgeGegOGfkuGemuGehOGfi+KAi+Gen+GfkuGenOGfkOGemeKAi+GelOGfkuGemuGenOGej+GfkuGej+GetyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+IuGen+GfkuGehOGetuGej+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4i4Z6f4Z+S4Z6c4Z+Q4Z6Z4Z6U4Z+S4Z6a4Z6c4Z6P4Z+S4Z6P4Z63Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i4Z6A4Z624Z6a4oCL4Z6H4Z684Z6T4oCL4Z6K4Z+G4Z6O4Z654Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IuGelOGetuGek+KAi+Gel+GfkuGeh+GetuGelOGfi+KAi+GelOGfiuGfkuGem+GevOGekuGevOGenyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IuGemuGfgOGelOGeheGfhuKAi+GenOGet+GekuGeuOGen+GetuGen+GfkuGej+GfkuGemuKAi+GelOGeieGfkuGeheGevOGemyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+IuGegOGfkuGeiuGetuGemuKAi+GeheGeu+GeheKAi+GeluGet+Gej+GelOGfkuGemuGetuGegOGeiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiLhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrggPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDhnoXhnrzhnpvigIvhnorhn4bhno7hnr7hnprhnoDhnrbhnprigIvhnqfhnpThnoDhnprhno7hn43igIvhnpnhnrzhnqLhn4Hhnp/hnpThn4rhnrg/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiLhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrggPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDhnoXhnrzhnpvigIvhnorhn4bhno7hnr7hnprhnoDhnrbhnprigIvhnqfhnpThnoDhnprhno7hn43igIvhnpnhnrzhnqLhn4Hhnp/hnpThn4rhnrg/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiLhnpThnr7hnoAgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDhnpbhn4HhnpvigIvhnpThnrbhnpPigIvhnpfhn5LhnofhnrbhnpThn4vigIvhnqfhnpThnoDhnprhno7hn43igIvhnpnhnrzhnqLhn4Hhnp/hnpThn4rhnrjigIvhnpPhn4Hhn4c/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLhnpThnr7hnoAgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDhnpbhn4HhnpvigIvhnpThnrbhnpPigIvhnpfhn5LhnofhnrbhnpThn4vigIvhnqfhnpThnoDhnprhno7hn43igIvhnpnhnrzhnqLhn4Hhnp/hnpThn4rhnrg/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6U4Z624Z6T4oCL4Z6K4Z+G4Z6h4Z6+4Z6E4oCL4Z6K4Z+G4Z6O4Z6+4Z6a4Z6A4Z624Z6a4oCL4Z6H4Z624oCL4Z6Y4Z694Z6Z4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6Z4Z684Z6i4Z+B4Z6f4Z6U4Z+K4Z644Z+UIOGen+GfkuGenOGfguGehOGemeGem+Gfi+KAi+GelOGek+GfkuGekOGfguGemOKAi+GeouGfhuGeluGeuOKAi+Gep+GelOGegOGemuGejuGfjeKAi+Gek+GfgeGfh+KAi+Gek+GfhSA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4i4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6Z4Z684Z6i4Z+B4Z6f4Z6U4Z+K4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiLhnpjhnr7hnpsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLhnpThn5Lhnprhnr7igIvhno/hnrbhnpjigIvhnpvhn4bhnpPhnrbhn4bhnorhnr7hnpjigIvhnp/hnpjhn5LhnprhnrbhnpThn4vigIvhnqfhnpThnoDhnprhno7hn43igIvhnpnhnrzhnqLhn4Hhnp/hnpThn4rhnrjigIvhnpPhn4Hhn4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiLhnpThn5Lhnprhnr7igIvhno/hnrbhnpjigIvhnpvhn4bhnpPhnrbhn4bhnorhnr7hnpjigIvhnp/hnpjhn5LhnprhnrbhnpThn4vigIvhnoHhn5Lhnp/hn4LigIvhnpnhnrzhnqLhn4Hhnp/hnpThn4rhnrjigIvhnpPhn4Hhn4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IuGeouGek+Geu+GeieGfkuGeieGetuGej+KAi+GegOGetuGemuKAi+GegOGfguKAi+GegOGfhuGeoOGeu+Gen+KAi+GemeGevOGeouGfgeGen+GelOGfiuGeuD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i4Z6f4Z+S4Z6T4Z624Z6Y4oCL4Z6Y4Z+S4Z6a4Z624Z6Y4oCL4Z6K4Z+D4oCLIFJTQSDhnprhnpThnp/hn4vigIvhnoDhnrvhn4bhnpbhn5LhnpnhnrzhnpHhn5DhnprigIvhnoLhnrrhn5YgXG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLhnqLhnpPhnrvhnonhn5Lhnonhnrbhno/igIvhnofhnrbigIvhnpPhnrfhnoXhn5LhnoXigIvhnp/hnpjhn5LhnprhnrbhnpThn4vigIvhnoDhnrvhn4bhnpbhn5LhnpnhnrzhnpHhn5DhnprigIvhnpPhn4Hhn4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLhnpbhnoThn5LhnprhnrjhnoDigIvigIvhnorhnr7hnpjhn5LhnpThnrjigIvhnrLhn5LhnpnigIvhnpbhn4HhnonigIvhnqLhn4HhnoDhn5LhnprhnoThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i4Z6R4Z624Z6J4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6y4Z+S4Z6Z4oCL4Z6W4Z+B4Z6J4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IuGegOGfhuGeluGeu+GehOKAi+GemuGegOGfkuGen+GetuGekeGeu+GegOKAi+GemuGevOGelOGekOGej+KAi+GeouGfgeGegOGfkuGemuGehOGfi+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IuGegOGfhuGeluGeu+GehOKAi+GemuGegOGfkuGen+GetuGekeGeu+GegOKAi+GemuGevOGelOGekOGej+KAi+GeouGfgeGegOGfkuGemuGehOGfiy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i4Z6a4Z684Z6U4Z6Q4Z6P4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4Z6A4Z+G4Z6W4Z674Z6E4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6a4Z6A4Z+S4Z6f4Z624Z6R4Z674Z6A4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiLhnpThnrbhnpPigIvhnoXhnrbhnpThn4vigIvhnpnhnoDigIvhnprhnrzhnpThnpDhno/igIvhnqLhn4HhnoDhn5LhnprhnoThn4vhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4i4Z6U4Z+J4Z+HIOKAi+GeiuGevuGemOGfkuGelOGeuOKAi+GemOGevuGem+KAi+GemuGevOGelOGekOGej+KAi+GeouGfgeGegOGfkuGemuGehOGfi+KAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RpdGxlIiBtc2dpZD0iNzA1NzgxMTE2NzQ2OTIyNzcxIj4i4Z6Y4Z634Z6T4oCL4Z6i4Z624Z6F4oCL4Z6F4Z624Z6U4Z+L4oCL4Z6Z4Z6A4oCL4Z6a4Z684Z6U4oCL4Z6Q4Z6P4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiLhnpjhnrfhnpPigIvhnqLhnrbhnoXigIvhnprhnoDhn5Lhnp/hnrbhnpHhnrvhnoDigIvhnprhnrzhnpThnpDhno/igIvhnqLhn4HhnoDhn5LhnprhnoThn4vigIvhn5Qg4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6V4Z+S4Z6R4Z674Z6A4oCL4Z6i4Z624Z6F4oCL4Z6A4Z+G4Z6W4Z674Z6E4oCL4Z6U4Z+S4Z6a4Z6+4oCL4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4i4Z6H4Z6Y4Z+S4Z6a4Z6+4Z6f4oCL4Z6V4Z+S4Z6R4Z+B4Z6a4oCL4Z6v4Z6A4Z6f4Z624Z6a4oCL4Z6P4Z624Z6Y4oCL4Z6Z4Z684Z6i4Z+B4Z6f4Z6U4Z+K4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4i4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6H4Z624oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6F4Z624Z6A4Z+L4oCL4Z6Y4Z+B4Z6M4Z+AIChNVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6H4Z624oCL4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6Q4Z6PIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLhnorhn4bhnqHhnr7hnoTigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpXhn5LhnpHhn4HhnprigIvhnq/hnoDhnp/hnrbhnpogQW5kcm9pZCDhnp/hnpjhn5LhnprhnrbhnpThn4sgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4i4Z6Q4Z6Z4Z6A4Z+S4Z6a4Z+E4Z6ZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IuGeguGfgeGeoOKAi+GekeGfhuGeluGfkOGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IuGemOGfieGeuuGek+Geu+GemSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IuGegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GekOGfkuGemOGeuOGflyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IuGen+GfkuGenOGfguGehOGemuGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpDhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IuGelOGfkuGeiuGevOGemuKAi+GelOGfiuGevOGej+Geu+GehOKAi+GenOGet+GekuGeuOGen+GetuGen+GfkuGej+GfkuGemuKAi+GelOGeieGfkuGeheGevOGem+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLhnpThn4rhnrzhno/hnrvhnoTigIvhnpbhnoThn5LhnprhnrjhnoDigIvhno/hn5LhnprhnrzhnpzigIvhnoLhn5LhnpPhnrbhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IuGeluGehOGfkuGemuGeuOGegC/hnpThnoThn5Lhnprhnr3hnpjigIvigIvhnqLhn4HhnoDhn5LhnprhnoThn4vigIvhnpbhnrjigIvigIvhnpHhn4XhnpLhn4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4i4Z6U4Z624Z6T4oCL4Z6P4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6U4Z+K4Z+S4Z6b4Z684Z6S4Z684Z6f4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IuGelOGetuGek+KAi+GeleGfkuGeiuGetuGeheGfi+KAi+KAi+GelOGfiuGfkuGem+GevOGekuGevOGen+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IuGeguGfkuGemOGetuGek+KAi+GekOGfkuGemOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IuGekOGfkuGemOKAi+GemOGeveGemeKAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiLhnpDhn5LhnpjigIvhnpbhnrjhnprigIvhnoDhnrbhn4bhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiLhnpDhn5LhnpjigIvhnpHhnrbhn4bhnoTigIvhnpThnrjigIvigIvhnoDhnrbhn4bigIvhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfZnVsbCIgbXNnaWQ9Ijg5MDkxMjI0MDE3MjAxNTg1ODIiPiLhnpDhn5LhnpjigIvhnpbhn4HhnonigIvhnqDhnr7hnpnhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+IuGeguGfkuGemOGetuGek+KAi+GekeGevOGemuGen+GfkOGeluGfkuGekeGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IuGen+GfgeGenOGetuKAi+GekeGevOGemuGen+GfkOGeluGfkuGekeKAi+GemOGeveGemeKAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdHdvX2JhcnMiIG1zZ2lkPSI4Mzg0OTA1MzgyODA0ODE1MjAxIj4i4Z6f4Z+B4Z6c4Z624oCL4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4oCL4Z6W4Z644Z6a4oCL4Z6A4Z624Z+G4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90aHJlZV9iYXJzIiBtc2dpZD0iODUyMTkwNDg0MzkxOTk3MTg4NSI+IuGen+GfgeGenOGetuKAi+GekeGevOGemuGen+GfkOGeluGfkuGekeKAi+GelOGeuOKAi+GegOGetuGfhuKAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4i4Z6f4Z+B4Z6c4Z624oCL4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4oCL4Z6W4Z+B4Z6J4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+IuGeguGfkuGemOGetuGek+KAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9vbmVfYmFyIiBtc2dpZD0iMTQxNTYyNTgzMzIzODI3MzYyOCI+IuGekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GemOGeveGemeKAi+KAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiLhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnpbhnrjhnprigIvigIvhnoDhnrbhn4bhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiLhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnpThnrjigIvhnoDhnrbhn4bhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i4Z6f4Z6J4Z+S4Z6J4Z624oCL4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4oCL4Z6W4Z+B4Z6J4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiLhnpThnrfhnpHigIvhnpzhn4nhnrbhnpnhnqDhn5Lhnpzhnrbhnpnhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4i4Z6U4Z624Z6T4oCL4Z6V4Z+S4Z6K4Z624Z6F4Z+L4oCL4Z6c4Z+J4Z624Z6Z4Z6g4Z+S4Z6c4Z624Z6Z4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4i4Z6f4Z6J4Z+S4Z6J4Z624oCL4Z6c4Z+J4Z624Z6Z4Z6g4Z+S4Z6c4Z624Z6Z4oCL4Z6Y4Z694Z6Z4oCL4Z6A4Z624Z+G4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IuGen+GfgeGenOGetuKAi+GenOGfieGetuGemeGeoOGfkuGenOGetuGemeKAi+GeluGeuOGemuKAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IuGenOGfieGetuGemeGeoOGfkuGenOGetuGemeKAi+GelOGeuOKAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiLhnp/hnonhn5LhnonhnrbigIvhnpzhn4nhnrbhnpnhnqDhn5LhnpzhnrbhnpnigIvhnpbhn4Hhnonhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+IuGeguGfkuGemOGetuGekyBXaU1BWCDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X29uZV9iYXIiIG1zZ2lkPSI0MTcwOTk0Mjk5MDExODYzNjQ4Ij4iV2lNQVgg4Z6Y4Z694Z6Z4oCL4Z6A4Z624Z+G4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWCDhnpbhnrjhnprigIvhnoDhnrbhn4bhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iV2lNQVgg4Z6U4Z644oCL4Z6A4Z624Z+G4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiLhnp/hnonhn5LhnonhnrYgV2lNQVgg4Z6W4Z+B4Z6J4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaWduYWwiIG1zZ2lkPSI3MDY0NjQ1MzIwNzgyNTg1MTY3Ij4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6f4Z6J4Z+S4Z6J4Z624Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+IuGemOGet+Gek+KAi+GelOGetuGek+KAi+Gej+Gel+GfkuGeh+GetuGelOGfi+KAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IuGen+GevOGek+GfkuGemeKAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfb25lX2JhciIgbXNnaWQ9IjE2ODU3MzAxMTMxOTIwODE4OTUiPiLhnpjhnr3hnpnigIvhnoDhnrbhn4bhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IuGeluGeuOGemuKAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdGhyZWVfYmFycyIgbXNnaWQ9IjI2NDgyNDE0MTUxMTkzOTY2NDgiPiLhnpThnrjigIvhnoDhnrbhn4bhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+IuGen+GeieGfkuGeieGetuKAi+GeluGfgeGeieKAi+KAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiLhnpThnr7hnoDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IuGelOGet+GekSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19jb25uZWN0ZWQiIG1zZ2lkPSI4MzY2MjU2NjkzNzE5NDk5NjY1Ij4i4Z6U4Z624Z6T4oCL4Z6P4Z6X4Z+S4Z6H4Z624Z6U4Z+L4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i4Z6a4Z+J4Z684oCL4Z6Y4Z644Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiLhnpzhn4nhnrbhnpnhnqDhn5LhnpzhnrbhnpkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiLhnoLhn5LhnpjhnrbhnpPigIvhnp/hn4rhnrjhnpjigIvhnoDhnrbhno/hn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4i4Z6A4Z624Z6a4oCL4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6U4Z+K4Z+S4Z6b4Z684Z6S4Z684Z6f4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4i4Z6a4Z6U4Z+A4Z6U4oCL4oCL4Z6W4Z+B4Z6b4Z6H4Z634Z+H4oCL4Z6Z4Z6T4Z+S4Z6P4Z6g4Z+E4Z+HIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+IuGekOGfkuGemCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Z6X4Z624Z6C4Z6a4Z6Z4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiLhnoDhnrbhnprigIvhnoDhn4bhno7hno/hn4vigIvhnpThn5Lhnprhnpbhn5DhnpPhn5LhnpLigIvhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IuGegOGetuGemuKAi+Geh+GevOGek+KAi+GeiuGfhuGejuGeueGehOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLhnp/hnpjhn5LhnqLhnrbhno/igIvhnoDhnrbhnprigIvhnofhnrzhnpPigIvhnorhn4bhno7hnrnhnoThn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IuGelOGetuGek+KAi+GelOGevuGegCBHUFMg4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IuGekeGekeGeveGem+KAi+KAiyBHUFMg4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiLhnpThnrbhnpPigIvhnpThnr7hnoDigIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnqLhnoThn5LhnoLhnrvhnpvhnrjhnpvhn4HhnoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl92aWJyYXRlIiBtc2dpZD0iNjY2NTg1MzYzMzY0MTU1MDU1Ij4i4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6a4Z+E4Z6R4Z+N4oCL4Z6J4Z+Q4Z6a4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuGegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GemuGfhOGekeGfjeKAi+Gen+GfkuGehOGetuGej+Gfi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4Z6U4Z6K4Z634Z6f4Z+B4Z6S4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i4Z6U4Z624Z6T4oCL4Z6U4Z6K4Z634Z6f4Z+B4Z6S4oCL4Z6A4Z624Z6a4oCL4Z6H4Z684Z6T4Z6K4Z+G4Z6O4Z654Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiLhnpbhno7hn4zigIvhnoDhnrbhnprigIvhnofhnrzhnpPigIvhnorhn4bhno7hnrnhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4i4Z6A4Z624Z6a4oCL4Z6A4Z+G4Z6O4Z6P4Z+L4oCL4Z6a4Z6g4Z+Q4Z6f4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IuGegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GekOGfkuGemOGeuOKAi+Gfl+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiLhnqLhn5LhnpPhnoDigIvhnpThn5Lhnprhnr4gPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+IuGeheGem+GfkOGejyA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IuGekOGfkuGemCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IuGemuGelOGfgOGelOGeluGfgeGem+KAi+Geh+Get+Gfh+KAi+GemeGek+GfkuGej+KAi+GeoOGfhOGfhyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiLhnpThn4rhn5LhnpvhnrzhnpLhnrzhnp8gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLhnpHhnrjhno/hnrbhn4bhnoQgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLhnoDhn4bhno7hno/hn4vigIvhnp/hn4bhnqHhn4HhnoTigIvhnprhn4ThnpHhn43igIvhnp/hnpjhn5LhnprhnrbhnpThn4sgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiLhnpThnrbhnpPigIvhnpThnrfhnpHigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpkgMkctM0ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLhnpThnrbhnpPigIvhnpThnrfhnpHigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpkgNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4i4Z6U4Z624Z6T4oCL4Z6U4Z634Z6R4oCL4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4oCL4Z6F4Z6b4Z+Q4Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4i4Z6U4Z624Z6T4oCL4Z6U4Z634Z6R4oCL4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6ZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4Z6K4Z6b4Z+L4oCL4Z6K4Z+C4Z6T4oCL4Z6A4Z+G4Z6O4Z6P4Z+L4oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4oCL4Z6U4Z624Z6T4oCL4Z6U4Z6J4Z+S4Z6H4Z624Z6A4Z+L4Z+UXG5cbuGelOGevuKAi+GeouGfkuGek+GegOKAi+GelOGevuGegOKAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GeoeGevuGehOGenOGet+GeiSDhnqLhn5LhnpPhnoDigIvhnqLhnrbhnoXigIvhno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvhnpThn5LhnorhnrzhnprigIvhnorhn4ThnpnigIvhnpThn5Lhnprhno/hnrfhnpThno/hn5Lhno/hnrfigIvhnoDhnprhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4i4Z6U4Z6+4Z6A4oCL4oCL4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4oCL4Z6h4Z6+4Z6E4Z6c4Z634Z6JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IuGeguGfkuGemOGetuGek+KAi+GegOGetuGemuKAi+Gej+Gel+GfkuGeh+GetuGelOGfi+KAi+GeouGfiuGeuOGek+GekuGeuuGejuGet+GejyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IuGelOGetuGek+KAi+Gel+GfkuGeh+GetuGelOGfi+KAi+GenOGfieGetuGemeGeoOGfkuGenOGetuGemSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i4Z6f4Z+S4Z6c4Z+C4Z6E4Z6a4Z6AIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiLhnpHhnrjhno/hnrbhn4bhnoTigIvigIvigIvigIvigIvhnoDhn4bhno7hno/hn4vigIvhnorhn4ThnpkgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i4Z6f4Z+G4Z6O4Z6+4oCL4Z6R4Z644Z6P4Z624Z+G4Z6E4oCL4Z6f4Z6A4Z6Y4Z+S4Z6YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i4Z6f4Z6Y4Z+S4Z6i4Z624Z6P4oCL4Z6A4Z624Z6a4oCL4Z6H4Z684Z6T4oCL4Z6K4Z+G4Z6O4Z654Z6E4oCL4Z6R4Z624Z+G4Z6E4Z6i4Z6f4Z+L4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IuGeluGfkOGej+GfjOGemOGetuGek+KAi+GegOGemOGfkuGemOGenOGet+GekuGeuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i4Z6T4Z654Z6E4oCL4Z6U4Z6E4Z+S4Z6c4Z634Z6b4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4Z6f4Z+S4Z6c4Z+Q4Z6Z4oCL4Z6U4Z+S4Z6a4Z6c4Z6P4Z+S4Z6P4Z634Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLhnqLhn4HhnoDhn5LhnprhnoThn4vigIvhnofhnrbhnpThn4vigIvhnp/hn4TigIvhnoDhn5LhnpPhnrvhnoTigIvhnpHhnrfhnp/igIvhnpXhn5Lhnorhn4HhnoDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i4Z6U4Z624oCL4Z6T4oCL4Z6F4Z624Z6A4Z+L4oCL4Z6f4Z+E4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6R4Z634Z6f4oCL4Z6U4Z6J4Z+S4Z6I4Z6a4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IuGegOGemuGejuGeuCBEZXNzZXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IuGen+GfkuGemuGemOGevuKAi+Gen+GfkuGemuGemOGfgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IuGeouGfiuGeuOGen+GeuuGemuGejuGet+GejyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i4Z6a4Z6U4Z+A4Z6U4Z6W4Z+B4Z6b4oCL4oCL4Z6H4Z634Z+H4oCL4Z6Z4Z6T4Z+S4Z6P4Z6g4Z+E4Z+HIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IuGelOGeieGfkuGeheGevOGem+KAi+GekOGfkuGemCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gPHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiLhnpThnrbhnpPigIvhnpThnonhn5LhnoXhnrzhnpvigIvhnpbhn4HhnokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4i4Z6U4Z+K4Z+S4Z6b4Z684Z6S4Z684Z6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4i4Z6U4Z+K4Z+S4Z6b4Z684Z6S4Z684Z6fICjhnqfhnpThnoDhnprhno7hn40gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4i4oCL4Z6U4Z+K4Z+S4Z6b4Z684Z6S4Z684Z6f4oCL4Z6U4Z624Z6T4oCL4Z6U4Z634Z6RIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLhnpbhnpPhn5LhnpvhnroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IuGelOGehOGfkuGenOGet+Gem+KAi+KAi+Gen+GfkuGenOGfkOGemeKAi+GelOGfkuGemuGenOGej+GfkuGej+GetyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLhnpThnrbhnpPigIvhnoXhnrbhnoDhn4vigIvhnp/hn4TigIvhnoDhnrbhnprigIvhnpThnoThn5LhnpzhnrfhnpsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4i4Z6F4Z624Z6A4Z+L4oCL4Z6f4Z+E4oCL4oCL4Z6U4Z6J4Z+S4Z6I4Z6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiLhnoXhnrbhnoDhn4vigIvhnp/hn4TigIvigIvigIvhnpXhn5Lhnorhn4HhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i4Z6c4Z634Z6S4Z644Z6f4Z624Z6f4Z+S4Z6P4Z+S4Z6a4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6bIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i4Z6R4Z644oCL4Z6P4Z624Z+G4Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IuGekeGeuOGej+GetuGfhuGehOKAi+GelOGetuGek+KAi+GelOGet+GekSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLhnqfhnpThnoDhnprhno7hn43igIvhnpjhn4Hhnozhn4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IuGen+GemOGfkuGemuGetuGelOGfi+KAi+Gej+GfguKAi+GegOGetuGemuKAi+GeoOGfheKAi+GeluGfgeGem+KAi+GeouGetuGen+Gek+GfkuGekyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+IuGegOGetuGemuKAi+GegOGfhuGejuGej+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4i4Z6W4Z+B4Z6b4Z6c4Z+B4Z6b4Z62Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl9sYWJlbCIgbXNnaWQ9IjUyMzg5OTU2MzIxMzA4OTc4NDAiPiLhnoHhn5Lhnonhnrvhn4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IuGenOGfieGetuGemeGeoOGfkuGenOGetuGemSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLhnpjhnrfhnpPigIvhnpThnrbhnpPigIvhno/hnpfhn5LhnofhnrbhnpThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6U4Z6O4Z+S4Z6K4Z624Z6JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4i4Z6c4Z+J4Z624Z6Z4Z6g4Z+S4Z6c4Z624Z6Z4oCL4Z6U4Z624Z6T4Z6U4Z634Z6RIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IuGeheGetuGej+Gfi+KAi+GekOGfkuGek+GetuGegOGfi+KAi+GeouGfgeGegOGfkuGemuGehOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuGeluGek+GfkuGem+GeuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLhnp/hn5Lhnpzhn5DhnpnhnpThn5Lhnprhnpzhno/hn5Lhno/hnrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i4Z6a4Z6U4Z+A4Z6U4oCL4oCL4Z6U4Z6J4Z+S4Z6F4Z+S4Z6a4Z624Z6f4oCL4Z6W4Z6O4Z+MIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i4Z6a4Z6U4Z+A4Z6U4oCL4Z6A4Z6Y4Z+S4Z6a4Z634Z6P4oCL4Z6W4Z6O4Z+M4oCL4Z6U4Z+S4Z6a4oCL4Z6f4Z6+4oCL4Z6a4oCL4Z6h4Z6+4Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLhnprhnpThn4DhnpTigIvhnoDhn4LigIvhnpbhno7hn4wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IuGelOGejuGfkuGeiuGetuGeieKAi+GeouGetuGeheKAi1xu4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6P4Z+S4Z6a4Z694Z6P4Z6W4Z634Z6T4Z634Z6P4Z+S4Z6ZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLhnp/hn5Lhnpzhn4LhnoThnprhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i4Z6a4Z674Z6J4oCL4Z6h4Z6+4Z6E4oCL4Z6b4Z6+4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z64IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLhnprhnrvhnonigIvhnpHhn4XigIvhnobhn5Lhnpzhn4HhnoTigIvhnorhnr7hnpjhn5LhnpThnrggPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKaW5kZXggMTQzNzYwMS4uZjcyNTQ5ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IuydtCDsu7Ttk6jthLDsl5DshJwg7ZWt7IOBIO2XiOyaqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IuyghOyytO2ZlOuptCDrqqjrk5zroZwg7ZmV64yAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IuyghOyytO2ZlOuptCDrqqjrk5zroZwg7ZmV64yAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4i7Zi47ZmY7ISxIO2ZleuMgC/stpXshowiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i7JWx7J20IOyekeydgCDtmZTrqbTsl5Ag66ee64+E66GdIOyEpOqzhOuQnCDqsr3smrAg7Iuc6rOEIOyYhuyXkCDtmZXrjIAv7LaV7IaMIOy7qO2KuOuhpOydtCDtkZzsi5zrkKnri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Iuy6oeyzkO2ZlOuptCDsoIDsnqUg7KSRLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i7Lqh7LOQ7ZmU66m0IOyggOyepSDspJEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+Iuy6oeyzkO2ZlOuptOydhCDsoIDsnqXtlZjripQg7KSR7J6F64uI64ukLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLtmYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLrqZTribQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLstZzqt7zsl5Ag7IKs7Jqp7ZWcIOyVsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IuqygOyDiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLsubTrqZTrnbwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IuyeheugpSDrsKnrspUg67KE7Yq87J2EIOyghO2ZmO2VqeuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i7Zi47ZmY7ISxIO2ZleuMgC/stpXshowg67KE7Yq87J6F64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i7J6R7J2AIO2ZlOuptOydhCDtgbAg7ZmU66m07Jy866GcIO2ZleuMgO2VqeuLiOuLpC4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLrsLDthLDrpqwgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Iuu5hO2Wieq4sCDrqqjrk5zqsIAgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4g7IOB7YOc7J6F64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+Iuu4lOujqO2IrOyKpCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4i7JyE7LmYIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLslYzrnozsnbQgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPijsnLwp66GcIOyEpOygleuQmOyXiOyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyDrjbDsnbTthLAg7IKs7Jqp7KSR7KeA65CoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcg642w7J207YSwIOyCrOyaqeykkeyngOuQqCI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSDsl7DqsrDrkKgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQUyDqsoDsg4kg7KSRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkdQU+yXkOyEnCDsnITsuZgg7ISk7KCVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i7JyE7LmYIOyalOyyrSDsnojsnYwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLrqqjrk6Ag7JWM66a8IOyngOyasOq4sCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLslbEg7KCV67O0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLtmZTrqbTsnbQg7J6Q64+Z7Jy866GcIO2ajOyghOuQqeuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+Iu2ZlOuptOydtCDqsIDroZwg67Cp7Zal7Jy866GcIOyeoOqyqCDsnojsirXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+Iu2ZlOuptOydtCDshLjroZwg67Cp7Zal7Jy866GcIOyeoOqyqCDsnojsirXri4jri6QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IuuUlOyggO2KuCDsvIDsnbTsiqQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i7ZmU66m0IOuztO2YuOq4sCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IuydtOuNlOuEtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i67mE7ZaJ6riwIOuqqOuTnCI8L3N0cmluZz4KQEAgLTE4MSwxMSArMTgzLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+Iuuwneq4sCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4i7J6Q64+ZIO2ajOyghCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLtmozsoIQg7J6g6riIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IuyEuOuhnCDrqqjrk5zroZwg6rOg7KCV65CoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiLqsIDroZwg66qo65Oc66GcIOqzoOygleuQqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLsnoXroKUg67Cp67KVIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IuychOy5mCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLsnITsuZgg7IKs7JqpIOykkeyngCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLrr7jrlJTslrQg6riw6riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLquLTquIkg7Ya17ZmU66eMIO2XiOyaqSI8L3N0cmluZz4KQEAgLTE5NiwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i7Jew6rKw65CY7Ja0IOyeiOyngCDslYrsnYwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i64Sk7Yq47JuM7YGs6rCAIOyXsOqysOuQmOyngCDslYrsnYwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSDqurzsp5AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmkg65SU7Iqk7ZSM66CI7J20Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4i66y07ISgIOuUlOyKpO2UjOugiOydtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLtmZTrqbQg7KCE7IahIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i67Cd6riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuyekOuPmSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLslYzrprzsnbQg7Jes6riw7JeQIO2RnOyLnOuQqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IuyVhOuemOuhnCDsiqTsmYDsnbTtlITtlZjsl6wg7Ja47KCc65OgIOyVoeyEuOyKpO2VmOyEuOyalC5cbu2VnCDrsogg642UIOyVhOuemOuhnCDsiqTsmYDsnbTtlITtlZjrqbQg7Iuc7Iqk7YWcIOq0gOumrOuhnCDsnbTrj5ntlanri4jri6QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4i7ZmU66m0IOqwgOyepeyekOumrOyXkOyEnCDsiqTsmYDsnbTtlITtlZjsl6wg7ZGc7Iuc7KSEIO2RnOyLnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i7ZmU66m0IOqwgOyepeyekOumrOyXkOyEnCDsiqTsmYDsnbTtlITtlZjsl6wg7Iuc7Iqk7YWcIO2RnOyLnOykhCDtkZzsi5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i7IOJ7IOBIOuwmOyghCDrqqjrk5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLtlqXsg4HrkJwg64yA67mEIOuqqOuTnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4i7IOJ7IOBIOuztOyglSDrqqjrk5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IuuEpO2KuOybjO2BrOqwgFxu66qo64uI7YSw66eB65CgIOyImCDsnojsnYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuqygOyDiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7tlZjroKTrqbQg7JyE66GcIOyKrOudvOydtOuTnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPu2VmOugpOuptCDsmbzsqr3snLzroZwg7Iqs65287J2065OcIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbGFuZC9hcnJheXMueG1sCmluZGV4IDc0YTZjODEuLmMzMmNlMTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbGFuZC9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbGFuZC9hcnJheXMueG1sCkBAIC0yMiwyMSArMjIsMjEgQEAKICAgICA8YXJyYXkgbmFtZT0ibmF2YmFyX3NlYXJjaF90YXJnZXRzIj4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgotICAgICAgICA8aXRlbT5AKmFuZHJvaWQ6ZHJhd2FibGUvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljPC9pdGVtPgorICAgICAgICA8aXRlbT5AZHJhd2FibGUvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICA8L2FycmF5PgogCiAgICAgPGFycmF5IG5hbWU9Im5hdmJhcl9zZWFyY2hfdGFyZ2V0X2Rlc2NyaXB0aW9ucyI+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QCphbmRyb2lkOnN0cmluZy9kZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoPC9pdGVtPgorICAgICAgICA8aXRlbT5Ac3RyaW5nL2Rlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2g8L2l0ZW0+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgIDwvYXJyYXk+CiAKICAgICA8YXJyYXkgbmFtZT0ibmF2YmFyX3NlYXJjaF9kaXJlY3Rpb25fZGVzY3JpcHRpb25zIj4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgotICAgICAgICA8aXRlbT5AKmFuZHJvaWQ6c3RyaW5nL2Rlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0PC9pdGVtPgorICAgICAgICA8aXRlbT5Ac3RyaW5nL2Rlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0PC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICA8L2FycmF5PgogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxvLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxvLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzOGExNQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbG8tbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4i4Luc4LuJ4Lqy4LqI4LuN4LqV4Lqt4LqZ4LqZ4Lq14LuJ4LqW4Lq34LqB4Lql4Lqx4Lqt4LqB4LuE4Lqn4LuJ4LuD4LqZ4LuB4Lqa4Lqa4Lql4Lqn4LqH4LqZ4Lqt4LqZLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sby1yTEEtbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbG8tckxBLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzOGExNQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbG8tckxBLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IuC7nOC7ieC6suC6iOC7jeC6leC6reC6meC6meC6teC7ieC6luC6t+C6geC6peC6seC6reC6geC7hOC6p+C7ieC7g+C6meC7geC6muC6muC6peC6p+C6h+C6meC6reC6mS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZjUyMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4i4Lqq4LuI4Lqn4LqZ4LqV4Lq04LqU4LqV4LuN4LuI4Lqc4Lq54LuI4LuD4LqK4LuJ4LqC4Lqt4LqH4Lql4Lqw4Lqa4Lq74LqaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+IuC6peC6tuC6miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IuC7gOC6reC6u+C6suC6reC6reC6geC6iOC6suC6geC6peC6suC6jeC6geC6suC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiLguoLgu43gu4nguqHgurngupngu4Hguq3gurHguprguq8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IuC6muC7jeC7iOC6oeC6teC7geC6reC6seC6muC6r+C6l+C6teC7iOC6q+C6suC6geC7jeC7g+C6iuC7iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4i4Lqb4Lq04LqU4LuB4Lqt4Lqx4Lqa4Lqv4Lqr4Lq84LuJ4Lqy4Lqq4Lq44LqU4LqX4Lq14LuI4LuD4LqK4LuJIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMSDgu4Hguq3gurHguprguq/guqvgurzgu4ngurLguqrgurjgupQiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCDgu4Hguq3gurHguprguq/guqvgurzgu4ngurLguqrgurjgupQiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i4Lqa4LuN4LuI4Lqh4Lq14LqB4Lqy4LqZ4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiLgupTgurPgu4DgupngurXgupnguqLgurngu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4i4LqB4Lqy4LqZ4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4i4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4Lqq4Lqy4LqN4Lqq4Lqy4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4i4LuB4Lqa4Lqx4LqU4LuA4LqV4Lq14Lqj4Lq14LuA4Lqr4Lq84Lq34Lqt4Luc4LuJ4Lqt4LqN4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+IuC6jeC6seC6h+C7gOC6q+C6vOC6t+C6reC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiLguprgu43gu4jguq7guq3guofguq7gurHguprguoHgurLgupnguqrgurLguoHgu4Tgup/gupTgu4nguqfguo0gVVNCLlxu4LqV4LuJ4Lqt4LqH4LuD4LqK4LuJ4Lqq4Lqw4LuA4Lqe4Lqy4Lqw4LuA4LqE4Lq34LuI4Lqt4LqH4Lqq4Lqy4LqB4LqX4Lq14LuI4LuB4LqW4Lqh4Lqh4Lqy4LqZ4Lqz4LuA4LqX4Lq74LuI4Lqy4LqZ4Lqx4LuJ4LqZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiLguoHgurLgupngupngurPgu4Pguorgu4ngu4HguprgurHgupTgu4DgupXgurXguqPgurUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiLguoHgurLgupngupXgurHgu4nguofguoTgu4jgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiLgu4Lgu53gupTgu4DgupfgurTguofguo3gurvgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4i4Lud4Lq44LqZ4Luc4LuJ4Lqy4LqI4LuN4Lqt4Lqx4LqU4LqV4Lqw4LuC4LqZ4Lqh4Lqx4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4i4Lqb4Lq04LqU4Lqq4Lq94LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiLguq3gurHgupTgupXgurDgu4LgupnguqHgurHgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiLguoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4i4Lqb4LuI4Lqt4LqN4Lqq4Lqx4LqZ4LqN4Lqy4LqZ4Lqc4LuI4Lqy4LqZIEJsdWV0b290aCDgu4HguqXgu4nguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiLgupXgurHgu4nguofguoTgu4jgurLguqfgurTgupfgurXguoHgurLgupngupvgu4nguq3gupnguoLgu43gu4nguqHgurngupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiLgu4Hgupvgu4ngupngup7gurTguqHgu4Hgupfgu4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4i4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LuD4Lqr4LuJ4LuB4Lqt4Lqx4Lqa4LqvIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4LuA4LqC4Lq74LuJ4Lqy4LuA4LqW4Lq04LqH4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZIFVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC7geC6reC6seC6muC6ryA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOC7gOC6guC6u+C7ieC6suC7gOC6luC6tOC6h+C6reC6uOC6m+C6sOC6geC6reC6meC6nuC7iOC6p+C6hyBVU0I/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiLgu4DgupvgurXgupQgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDgu4DguqHgurfgu4jguq3gu4Dguorgurfgu4jguq3guqHgupXgu43gu4jguoHgurHguprguq3gurjgupvgurDguoHguq3gupkgVVNCIOC6meC6teC7ieC6q+C6vOC6t+C6muC7jeC7iD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IuC7gOC6m+C6teC6lCA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOC7gOC6oeC6t+C7iOC6reC6oeC6teC6geC6suC6meC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC6geC6seC6muC6reC6uOC6m+C6sOC6geC6reC6meC7gOC6quC6teC6oSBVU0Ig4LqZ4Lq14LuJ4Lqr4Lq84Lq34Lqa4LuN4LuIPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IuC6muC7jeC7iOC6oeC6teC7geC6reC6seC6muC6r+C7g+C6lOC6l+C6teC7iOC6leC6tOC6lOC6leC6seC7ieC6h+C7hOC6m+C7geC6peC7ieC6pyDguqrgurLguqHgurLgupTgu4Dguq7gurHgupTguqfgur3guoHguq7gu4jguqfguqHguoHgurHguprguq3gurjgupvgurDguoHguq3gupngu4DguqrgurXguqEgVVNCIOC6meC6teC7ieC7hOC6lOC7iS4g4Lqq4Lq24LqB4Lqq4Lqy4LuA4Lqe4Lq14LuI4Lqh4LuA4LqV4Lq14Lqh4LqB4LuI4Lq94Lqn4LqB4Lqx4Lqa4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZ4LuA4Lqq4Lq14Lqh4LqZ4Lq14LuJ4LqX4Lq14LuIIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiLguq3gurjgupvgurDguoHguq3gupngu4DguqrgurXguqEgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiLgu4DguprgurTgu4jguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLgu4Pguorgu4ngu4DgupvgurHgupnguoTgu4jgurLgu4DguqXgurXgu4jguqHgupXgurvgu4ngupnguqrgurPguqXgurHguprguq3gurjgupvgurDguoHguq3gupkgVVNCIOC6meC6teC7iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IuC7g+C6iuC7ieC6hOC7iOC6suC7gOC6peC6teC7iOC6oeC6leC6u+C7ieC6meC6quC6s+C6peC6seC6muC6reC6uOC6m+C6sOC6geC6reC6meC7gOC6quC6teC6oSBVU0Ig4LqZ4Lq14LuJLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4i4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LqB4Lqy4LqZ4LqU4Lq14Lqa4Lqx4LuK4LqB4Lqc4LuI4Lqy4LqZIFVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i4Lql4Lqy4LqN4LqZ4Lq04LuJ4Lqh4Lq3IFJTQSDguoLguq3guofguoTguq3guqHgup7gurTguqfgu4DgupXgurXgu4HguqHgu4jgupk6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLguq3gurDgupngurjguo3gurLgupTguojgurLguoHguoTguq3guqHgup7gurTguqfgu4DgupXgurXgupngurXgu4ngupXgurDguqvgurzguq3gupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLguorgurnguqHgu4Pguqvgu4ngu4DgupXgurHguqHgu5zgu4ngurLguojgu40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i4Lqb4Lqx4Lqa4LuD4Lqr4LuJ4LuA4LqV4Lqx4Lqh4Luc4LuJ4Lqy4LqI4LuNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IuC6geC6s+C6peC6seC6h+C6muC6seC6meC6l+C6tuC6geC6ruC6ueC6muC7nOC7ieC6suC6iOC7jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IuC6geC6s+C6peC6seC6h+C6muC6seC6meC6l+C6tuC6geC6nuC6suC6muC7nOC7ieC6suC6iOC7jS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i4LqB4Lqz4Lql4Lqx4LqH4Lqa4Lqx4LqZ4LqX4Lq24LqB4Lqe4Lqy4Lqa4Luc4LuJ4Lqy4LqI4LuNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4i4LqW4LuI4Lqy4LqN4Lqu4Lq54Lqa4Luc4LuJ4Lqy4LqI4LuN4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IuC7geC6leC6sOC7gOC6nuC6t+C7iOC6reC7gOC6muC6tOC7iOC6h+C6nuC6suC6muC7nOC7ieC6suC6iOC7jeC6guC6reC6h+C6l+C7iOC6suC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+IuC6muC7jeC7iOC6quC6suC6oeC6suC6lOC6luC7iOC6suC6jeC6ruC6ueC6muC7nOC7ieC6suC6iOC7jeC7hOC6lOC7iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4i4Lqa4LuN4LuI4Lqq4Lqy4Lqh4Lqy4LqU4Lqa4Lqx4LqZ4LqX4Lq24LqB4Lqe4Lqy4Lqa4Luc4LuJ4Lqy4LqI4LuN4LuE4LqU4LuJLiDguprgu4jguq3gupnguojgurHgupTgu4DguoHgurHguprguq3gurLgupTguoHgurPguqXgurHguofgupbgurfguoHgupngurPgu4Pguorgu4nguqLgurngu4guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iVVNCIOC7guC6leC7gOC6peC6t+C6reC6geC6geC6suC6meC6jeC7ieC6suC6jeC7hOC6n+C6peC7jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IuC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC7gOC6m+C6seC6mSBtZWRpYSBwbGF5ZXIgKE1UUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLgu4Dguorgurfgu4jguq3guqHgupXgu43gu4jgu4DgupvgurHgupnguoHgu4nguq3guofgupbgu4jgurLguo3guq7gurngupogKFBUUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+IuC6leC6tOC6lOC6leC6seC7ieC6h+C7geC6reC6seC6muC6ryBBbmRyb2lkIEZpbGUgVHJhbnNmZXIg4Lqq4Lqz4Lql4Lqx4LqaIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IuC6geC6seC6muC6hOC6t+C6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLgu5zgu4ngurLgupfgurPguq3gurTgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLgu4DguqHgupngurkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLgu4Hguq3gurHguprguq/guqvgurzgu4ngurLguqrgurjgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiLguorguq3guoHguqvgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i4LqB4LuJ4Lqt4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLgupvgurjgu4jguqHguqrgurDguqXgurHguprguq7gurnguprgu4HguprguprguoHgurLgupngupvgu4nguq3gupnguoLgu43gu4nguqHgurngupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IuC6m+C6uOC7iOC6oeC6iuC6ueC6oeC6l+C6teC7iOC7g+C6iuC7ieC6ruC7iOC6p+C6oeC6geC6seC6meC7hOC6lOC7iS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IuC6iuC6ueC6oeC6iOC7jeC6meC7ieC6reC6jeC7hOC6m+C7gOC6m+C6seC6meC6iOC7jeC6guC6sOC6q+C6meC6suC6lOC7g+C6q+C6jeC7iC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4i4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuIIEJsdWV0b290aCDgu4HguqXgu4nguqcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IkJsdWV0b290aCDgupbgurfguoHgupXgurHgupTguoHgurLgupngu4Dguorgurfgu4jguq3guqHgupXgu43gu4jgu4HguqXgu4nguqcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4i4LuB4Lqa4Lqx4LqU4LuA4LqV4Lq14Lqj4Lq14Lud4Lq74LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IuC7geC6muC6seC6lOC7gOC6leC6teC6o+C6teC6meC6tuC7iOC6h+C6guC6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdHdvX2JhcnMiIG1zZ2lkPSI4NTAwNjUwNDM4NzM1MDA5OTczIj4i4LuB4Lqa4Lqx4LqU4LuA4LqV4Lq14Lqj4Lq14Lqq4Lqt4LqH4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+IuC7geC6muC6seC6lOC7gOC6leC6teC6o+C6teC6quC6suC6oeC6guC6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfZnVsbCIgbXNnaWQ9Ijg5MDkxMjI0MDE3MjAxNTg1ODIiPiLgu4HguprgurHgupTgu4DgupXgurXguqPgurXgu4DgupXgurHguqEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19waG9uZSIgbXNnaWQ9IjQ4OTQ3MDg5MzcwNTI2MTEyODEiPiLguprgu43gu4jguqHgurXgu4LgupfguqXgurDguqrgurHgupouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9vbmVfYmFyIiBtc2dpZD0iNjg3Njk5Mjc4MTMyNjY0MTE1Ij4i4Lqq4Lqx4LqZ4LqN4Lqy4LqZ4LqZ4Lq24LuI4LqH4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdHdvX2JhcnMiIG1zZ2lkPSI4Mzg0OTA1MzgyODA0ODE1MjAxIj4i4Lqq4Lqx4LqZ4LqN4Lqy4LqZ4Lqq4Lqt4LqH4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiLguqrgurHgupnguo3gurLgupnguqrgurLguqHguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY0NzE4MzQ4Njg1ODA3NTc4OTgiPiLguqrgurHgupnguo3gurLgupngu4DgupXgurHguqEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+IuC6muC7jeC7iOC6oeC6teC6guC7jeC7ieC6oeC6ueC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiLguoLgu43gu4nguqHgurngupngupngurbgu4jguofguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+IuC6guC7jeC7ieC6oeC6ueC6meC6quC6reC6h+C6guC6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiLguoLgu43gu4nguqHgurngupnguqrgurLguqHguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3NpZ25hbF9mdWxsIiBtc2dpZD0iMjcwODM4NDYwODEyNDUxOTM2OSI+IuC6quC6seC6meKAi+C6jeC6suC6meC6guC7jeC7ieC6oeC6ueC6meKAi+C7gOC6leC6seC6oS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpRmkg4Lqb4Lq04LqU4Lqi4Lq54LuILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2lmaSIgbXNnaWQ9IjE0MjU0NzY1NTE4Mjc5MjQ0NzQiPiLgupXgurHgupTguoHgurLgupngu4Dguorgurfgu4jguq3guqHgupXgu43gu4ggV2ktRmkg4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vbmVfYmFyIiBtc2dpZD0iNzczNTg5MzE3ODAxMDcyNDM3NyI+IuC6quC6seC6meC6jeC6suC6mSBXaS1GaSDgupngurbgu4jguofguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IuC6quC6seC6meC6jeC6suC6mSBXaS1GaSDguqrguq3guofguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4iV2lmaSDguqrgurLguqHguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IuC6quC6seC6meC6jeC6suC6mSBXaS1GaSDgu4DgupXgurHguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+IuC6muC7jeC7iOC6oeC6tSBXaU1BWC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X29uZV9iYXIiIG1zZ2lkPSI0MTcwOTk0Mjk5MDExODYzNjQ4Ij4iV2lNQVgg4LqZ4Lq24LuI4LqH4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4iV2lNQVgg4Lqq4Lqt4LqH4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWCDguqrgurLguqHguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiLguqrgurHgupnigIvguo3gurLgupkgV2lNQVgg4LuA4LqV4Lqx4LqhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+IuC6muC7jeC7iOC6oeC6teC6quC6seC6meC6jeC6suC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4i4Lqa4LuN4LuI4LuE4LqU4LuJ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IuC6muC7jeC7iOC6oeC6teC6iOC6seC6geC6guC6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4i4LqZ4Lq24LuI4LqH4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4i4Lqq4Lqt4LqH4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdGhyZWVfYmFycyIgbXNnaWQ9IjI2NDgyNDE0MTUxMTkzOTY2NDgiPiLguqrgurLguqHguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiLguqrgurHgupnguo3gurLgupngu4DgupXgurHguqEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IuC7gOC6m+C6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IuC6m+C6tOC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IuC7gOC6iuC6t+C7iOC6reC6oeKAi+C6leC7jeC7iOC7geC6peC7ieC6py4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiLgu4LguqPguqHguqHgurTguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IkVkZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4i4Lqa4LuN4LuI4Lqh4Lq14LqK4Lq04LqhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiLguoHgurLgupngupvgu4jguq3guo3guqrgurHgupnguo3gurLgupkgQmx1ZXRvb3RoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+IuC7guC7neC6lOC7g+C6meC6jeC6u+C6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4i4LuB4Lqa4Lqx4LqU4LuA4LqV4Lq14Lqj4Lq1IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgu4DgupvgurXgu4DguorgurHgupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiLguoHgurLgupngupXgurHgu4nguofguoTgu4jgurLguqXgurDguprgurvgupouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiLguoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IuC6peC6tuC6muC6peC7ieC6suC6h+C6geC6suC6meC7geC6iOC7ieC6h+C7gOC6leC6t+C6reC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IkdQUyDgu4DgupvgurXgupTgu4HguqXgu4nguqcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IuC6geC6s+C6peC6seC6h+C6iuC6reC6geC6q+C6siBHUFMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJUZWxlVHlwZXdyaXRlciDgupbgurfguoHgu4DgupvgurXgupTguqLgurngu4guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IuC6quC6seC7iOC6meC7gOC6leC6t+C6reC6meC6nuC7ieC6reC6oeC6quC6veC6h+C7gOC6reC6teC7ieC6meC7gOC6guC6u+C7ieC6si4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i4Lqb4Lq04LqU4Lqq4Lq94LqHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiLgupvgurTgupQgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC7geC6peC7ieC6py4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiLgupvgurTgupTguoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupngu4HguqXgu4nguqcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiLgu5zgu4ngurLguojgu43gu4Hguojgu4nguofgu4DgupXgurfguq3gupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IuC6geC6suC6meC6leC6seC7ieC6h+C6hOC7iOC6suC6lOC7iOC6p+C6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4i4LuB4Lqt4Lqx4Lqa4Lqv4LqX4Lq14LuI4Lqr4Lqy4LqB4LuN4LuD4LqK4LuJLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiLgupzgurngu4jgu4Pguorgu4kgPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+IuC6oeC6t+C6luC6tyA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IuC7geC6muC6seC6lOC7gOC6leC6teC6o+C6tSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IuC7guC7neC6lOC7g+C6meC6jeC6u+C6mSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLguqrgurDigIvgupbgurLgupnigIvgupfgurXgu4ggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLgupXgurHgu4nguofgu4LguqHguofgupvgurjguoEgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiDgu4HguqXgu4nguqcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i4Lqt4Lq04LqZ4LuA4LqV4Lq14LuA4LqZ4Lqx4LqUIDJH4oCLLCAzRyDgupbgurfguoHgupvgurTgupTgu4HguqXgu4nguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLguoHgurLgupngupngurPgu4Pguorgu4nguoLgu43gu4nguqHgurngupkgNEcg4LqW4Lq34LqB4Lqb4Lq04LqU4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+IuC6reC6tOC6meC7gOC6leC6teC7gOC6meC6seC6lOC7g+C6meC6oeC6t+C6luC6t+C6luC6t+C6geC6m+C6tOC6lOC6geC6suC6meC6meC6s+C7g+C6iuC7ieC7geC6peC7ieC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IuC6reC6tOC6meC7gOC6leC6teC7gOC6meC6seC6lOC6luC6t+C6geC6m+C6tOC6lOC6geC6suC6meC6meC6s+C7g+C6iuC7ieC7geC6peC7ieC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+IuC6l+C7iOC6suC6meC7hOC6lOC7ieC7g+C6iuC7ieC6guC7jeC7ieC6oeC6ueC6meC6iOC6u+C6meC6ruC6reC6lOC6iOC6s+C6meC6p+C6meC6l+C6teC7iOC6iOC6s+C6geC6seC6lOC7hOC6p+C7ieC7geC6peC7ieC6py5cblxu4Lqr4Lqy4LqB4LqX4LuI4Lqy4LqZ4LuA4Lqb4Lq14LqU4LqZ4Lqz4LuD4LqK4LuJ4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqE4Lq34LqZ4Lqt4Lq14LqB4LqE4Lqx4LuJ4LqHLCDgupfgu4jgurLgupnguq3gurLgupTgupbgurfguoHguq7gur3guoHgu4DguoHgurHguprgu4DguofgurTgupngu4LgupTguo3gupzgurngu4jgu4Pguqvgu4nguprgu43guqXgurTguoHgurLgupngu4TgupTgu4kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+IuC7gOC6m+C6teC6lOC6meC6s+C7g+C6iuC7ieC6guC7jeC7ieC6oeC6ueC6meC6hOC6t+C6meC7g+C7neC7iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiLguprgu43gu4jguqHgurXguoHgurLgupngu4Dguorgurfgu4jguq3guqHgupXgu43gu4jguq3gurTgupngu4DgupXgurXgu4DgupngurHgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiLgu4Dguorgurfgu4jguq3guqHigIvgupXgu43gu4ggV2kt4oCLLUZpIOC7geC6peC7ieC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i4LqB4Lqz4Lql4Lqx4LqH4LqK4Lqt4LqB4Lqr4LqyIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiLguqrgurDgupbgurLgupngupfgurXgu4jguoHgurPgupngurvgupTgu4LgupTguo0gR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i4LqB4Lqy4LqZ4Lqu4LuJ4Lqt4LqH4LqC4LuN4Lqq4Lqw4LqW4Lqy4LqZ4LqX4Lq14LuI4LqX4Lq14LuI4LuA4Lqu4Lqx4LqU4Lqn4Lq94LqB4Lqi4Lq54LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i4Lql4Lq24Lqa4LqB4Lqy4LqZ4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZ4LqX4Lqx4LqH4Lud4Lq74LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLguoLgu43gu4nguqHgurngupngu4Hguq3gurHguprguq8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IuC7nOC7ieC6suC6iOC7jeC6iOC6sOC7neC6uOC6meC7guC6lOC6jeC6reC6seC6lOC6leC6sOC7guC6meC6oeC6seC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IuC7nOC7ieC6suC6iOC7jeC6luC6t+C6geC6peC6seC6reC6geC7g+C6meC6peC6p+C6h+C6meC6reC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i4Luc4LuJ4Lqy4LqI4LuN4LqW4Lq34LqB4Lql4Lqx4Lqt4LqB4Lqi4Lq54LuI4LuD4LqZ4LuC4Lud4LqU4LuB4LqZ4Lqn4LqV4Lqx4LuJ4LqHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiLguoHgu4jguq3guofguoLguq3guofguqvguqfgurLgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i4LuC4Lud4LqU4Lqi4Lq54LuI4LuD4LqZ4LqN4Lq74LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IuC6geC6s+C6peC6seC6h+C6quC6suC6gSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiLguqrgurLguoHgu4DgupXgurHguqHgu4HguqXgu4nguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4iQmx1ZXRvb3RoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4iQmx1ZXRvb3RoICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4iQmx1ZXRvb3RoIOC6m+C6tOC6lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i4LqE4Lqn4Lqy4Lqh4Lqq4Lqw4Lqr4Lqn4LuI4Lqy4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLgu53gurjgupngu5zgu4ngurLguojgu43guq3gurHgupTgupXgurDgu4LgupnguqHgurHgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i4Lql4Lqx4Lqt4LqB4LqB4Lqy4LqZ4Lqb4LuI4Lq94LqZ4Lql4Lqn4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IuC6peC6seC6reC6geC7gOC6m+C6seC6meC6ruC6ueC6muC6peC6p+C6h+C6leC6seC7ieC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4i4Lql4Lqx4Lqt4LqB4LuA4Lqb4Lqx4LqZ4Lqu4Lq54Lqa4Lql4Lqn4LqH4LqZ4Lqt4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IuC6p+C6tOC6l+C6teC6geC6suC6meC6m+C7ieC6reC6meC6guC7jeC7ieC6oeC6ueC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IuC6quC6sOC6luC6suC6meC6l+C6teC7iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLguoLgu43gu4nguqHgurngupnguqrgurDgupbgurLgupngupfgurXgu4jgupvgurTgupTguqLgurngu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZ4Lqq4Lq34LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLgu4LgupfguqrgurjguoHgu4DguqrgurXgupngu4Dgupfgurvgu4jgurLgupngurHgu4ngupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiLguoHgurLgupngupXgurHgu4nguofguoTgu4jgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+IuC7gOC6p+C6peC6siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4i4LqC4LuJ4Lqt4LqNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9sYWJlbCIgbXNnaWQ9IjkxMzUzNDQ3MDQ4OTk1NDYwNDEiPiJXaeKAiy1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLguprgu43gu4jgu4TgupTgu4ngu4Dguorgurfgu4jguq3guqHgupXgu43gu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i4Lqa4LuN4LuI4Lqh4Lq14LuA4LqE4Lq34Lqt4LqC4LuI4Lqy4LqNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2nigIstRmkg4Lqb4Lq04LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IuC6lOC6tuC6h+C7nOC7ieC6suC6iOC7jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuC6hOC6p+C6suC6oeC7geC6iOC7ieC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLguq3gurHgupTgupXgurDgu4LgupnguqHgurHgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i4LuC4Lud4LqU4Lqq4Lqw4Lql4Lqx4Lqa4Lqq4Lq1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i4LuC4Lud4LqU4LqE4Lqn4Lqy4Lqh4LqV4LuI4Lqy4LqH4LuB4Lqq4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLgu4Lgu53gupTguoHgurLgupngu4HguoHgu4ngu4TguoLguqrgurUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IuC7gOC6hOC6t+C6reC6hOC7iOC6suC6jeC6reC6suC6lFxu4LqW4Lq34LqB4LqV4Lq04LqU4LqV4Lqy4LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLguorguq3guoHguqvgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i4LuA4Lql4Lq34LuI4Lqt4LqZ4LqC4Lq24LuJ4LqZ4LuA4Lqe4Lq34LuI4LqtIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLgu4DguqXgurfgu4jguq3gupngu4TgupvgupfgurLguofguorgu4ngurLguo3gu4Dgup7gurfgu4jguq0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKaW5kZXggYmY4NjYyYS4uNzk3ZjcxMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlZpc2FkYSBsZWlzdGkgacWhIMWhaW8ga29tcGl1dGVyaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJLZWlzdGkgbWFzdC4sIGthZCBhdGl0LiBla3IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IknFoXRlbXB0aSwga2FkIGF0aXQuIGVrci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJTdWRlcmluYW11bW8gbWFzdGVsaW8ga2VpdGltYXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iS2FpIHByb2dyYW1hIGJ1cyBwcml0YWlreXRhIG1hxb5lc25pYW0gZWtyYW51aSwgbWFzdGVsaW8ga2VpdGltbyB2YWxkaWtsaXMgYnVzIHBhcm9keXRhcyDFoWFsaWEgbGFpa3JvZMW+aW8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IknFoXNhdWdvbWEgZWtyYW5vIGtvcGlqYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IknFoXNhdWdvbWEgZWtyYW5vIGtvcGlqYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iScWhc2F1Z29tYSBla3Jhbm8ga29waWphLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJQYWdyaW5kaW5pcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbml1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iTmF1amF1c2lvcyBwcm9ncmFtb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJJZcWha290aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJGb3RvYXBhcmF0YXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlBlcmp1bmd0aSDEr3Zlc3RpZXMgbWV0b2RvIG15Z3R1a8SFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJTdWRlcmluYW11bW8gcHJpYXJ0aW5pbW8gbXlndHVrYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJQYWRpZGludGkgZWtyYW7EhS4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJBa3VtdWxpYXRvcml1cyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IkzEl2t0dXZvIHJlxb5pbWFzIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IuKAnkJsdWV0b290aOKAnCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IlZpZXRvdsSXIOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IlNpZ25hbGFzIG51c3RhdHl0YXMgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyR+KAkzNHIGR1b21lbnlzIG5lbGVpZMW+aWFtaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIGR1b21lbnlzIG5lbGVpZMW+aWFtaSI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJQcmlzaWouIHByaWUg4oCeV2ktRmnigJwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkllxaFrb21hIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFMgbnVzdGF0eXRhIHZpZXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iVmlldG92xJdzIHXFvmtsYXVzb3MgYWt0eXZpb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJJxaF2YWx5dGkgdmlzdXMgcHJhbmXFoWltdXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IlByb2dyYW1vcyBpbmZvcm1hY2lqYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iRWtyYW5hcyBidXMgc3VrYW1hcyBhdXRvbWF0acWha2FpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iVcW+cmFraW50YXMgZWtyYW5hcyB5cmEgaG9yaXpvbnRhbGlvcyBvcmllbnRhY2lqb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IlXFvnJha2ludGFzIGVrcmFuYXMgeXJhIHZlcnRpa2FsaW9zIG9yaWVudGFjaWpvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iRGVzZXJ0xbMgZMSXa2xhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJTdmFqb27ElyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0ZXJuZXRhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTMSXa3R1dm8gcmXFvmltYXMiPC9zdHJpbmc+CkBAIC0xODEsNiArMTgzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iU2thaXN0aXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkF1dG9tYXRpxaFrYWkgc3VrdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iU3VraW1hcyB1xb5yYWtpbnRhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiJVxb5yYWtpbnRhIHN0YcSNaWEgcGFkxJd0aXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IlXFvnJha2ludGEgZ3Vsc8SNaWEgcGFkxJd0aXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4ixK52ZXN0aWVzIG1ldG9kYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJWaWV0b3bElyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJWaWV0b3bElyBpxaFqdW5ndGEiPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5lcHJpc2lqdW5ndGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iVGlua2xvIG7El3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4i4oCeV2ktRmnigJwgacWhanVuZ3RhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IuKAnldpLUZp4oCcIHBhdGVpa3RpcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IkJlbGFpZGlzIHJvZHltYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iUGVyZHVvdGkgZWtyYW7EhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IlNrYWlzdGlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE9NQVRJTklTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IlByYW5lxaFpbWFpIHJvZG9taSDEjWlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iUGVyYnJhdWvEmSDFvmVteW4gYmV0IGt1cml1byBtZXR1IHBhc2lla3NpdGUgcHJhbmXFoWltdXMuXG5KZWkgbm9yaXRlIG5hdWRvdGkgc2lzdGVtb3MgdmFsZGlrbGl1cywgcGVyYnJhdWtpdGUgxb5lbXluIGRhciBrYXJ0xIUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iSmVpIG5vcml0ZSwga2FkIGLFq3TFsyByb2RvbWEganVvc3RhLCBwZXJicmF1a2l0ZSBla3Jhbm8ga3JhxaF0ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iSmVpIG5vcml0ZSwga2FkIGLFq3TFsyByb2RvbWEgc2lzdGVtb3MganVvc3RhLCBwZXJicmF1a2l0ZSBpxaEgZWtyYW5vIGtyYcWhdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iU3BhbHbFsyBpbnZlcnNpam9zIHJlxb5pbWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iUGF0b2J1bGludG8ga29udHJhc3RvIHJlxb5pbWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJTcGFsdsWzIHRhaXN5bW8gcmXFvmltYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IlRpbmtsYXMgZ2FsaVxuYsWrdGkgc3RlYmltYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlBhaWXFoWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlNseXNraXRlIGF1a8WhdHluIGxpbmsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlNseXNraXRlIMSvIGthaXLEmSBsaW5rIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCmluZGV4IGI5NmE3ODYuLjQyMzBiMmUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJWaWVubcSTciBhdMS8YXV0IG5vIMWhxKsgZGF0b3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iVMSBbHVtbS4sIGxhaSBhaXpwLiBla3IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IlN0aWVwaWV0LCBsYWkgYWl6cC4gZWtyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IlNhZGVyxKtiYXMgdMSBbHVtbWFpxYZhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IkphIGxpZXRvdG5lIGlyIHBhcmVkesSTdGEgbWF6xIFrYW0gZWtyxIFuYW0sIGJsYWt1cyBwdWxrc3RlbmltIHRpa3MgcGFyxIFkxKt0YSB0xIFsdW1tYWnFhmFzIHZhZMSra2xhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTYWdsYWLEgSBla3LEgW51esWGxJNtdW114oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iTm90aWVrIGVrcsSBbnV6xYbEk211bWEgc2FnbGFixIHFoWFuYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iTm90aWVrIGVrcsSBbnV6xYbEk211bWEgc2FnbGFixIHFoWFuYS4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iU8SBa3VtcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ikl6dsSTbG5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iTmVzZW4gaXptYW50b3TEgXMgbGlldG90bmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iTWVrbMSTdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJLYW1lcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IklldmFkZXMgbWV0b2RlcyBtYWnFhmFzIHBvZ2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlNhZGVyxKtiYXMgdMSBbHVtbWFpxYZhcyBwb2dhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iVmVpa3QgdMSBbHVtbWFpxYZ1IG5vIG1hesSBa2EgZWtyxIFuYSB1eiBsaWVsxIFrdS4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJBa3VtdWxhdG9yYSBzdGF0dXNzOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTGlkb2p1bWEgcmXFvsSrbWEgc3RhdHVzczogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggc3RhdHVzczogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IkF0cmHFoWFuxIFzIHZpZXRhOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IlNpZ27EgWxzIGlyIGllc3RhdMSrdHMgdXo6IDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkfigJMzRyBkYXRpIGF0c3DEk2pvdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0R8KgZGF0aSBhdHNwxJNqb3RpIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+Ikl6di4gc2F2LiBhciBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iTm90aWVrIEdQUyBtZWtsxJPFoWFuYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFPCoGllc3RhdMSrdMSBIGF0cmHFoWFuxIFzIHZpZXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iQWt0xKt2aSBhdHJhxaFhbsSBcyB2aWV0dSBwaWVwcmFzxKtqdW1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iTm90xKtyxKt0IHZpc3VzIHBhemnFhm9qdW11cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvcm3EgWNpamEgcGFyIGxpZXRvdG5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJFa3LEgW5zIHRpa3MgcGFncmllenRzIGF1dG9txIF0aXNraS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkVrcsSBbnMgdGFnYWQgaXIgYmxvxLfEk3RzIGFpbmF2YXMgb3JpZW50xIFjaWrEgS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iRWtyxIFucyB0YWdhZCBpciBibG/Et8STdHMgcG9ydHJldGEgb3JpZW50xIFjaWrEgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iU2FsZG8gxJNkaWVudSBzdGVuZHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRWtyxIFuc2F1ZHrEk3TEgWpzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iVMSra2xzIEV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJMaWRvanVtYSByZcW+xKttcyI8L3N0cmluZz4KQEAgLTE4MSw2ICsxODMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJTcGlsZ3R1bXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkF1dG9txIF0aXNrYSBwYWdyaWXFoWFuYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJQYWdyaWXFoWFuYSBibG/Et8STdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iRmlrc8STdHMgcG9ydHJldGEgcmXFvsSrbcSBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiJGaWtzxJN0cyBhaW5hdmFzIHJlxb7Eq23EgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJJZXZhZGVzIG1ldG9kZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IkF0cmHFoWFuxIFzIHZpZXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IkF0cmHFoWFuxIFzIHZpZXRhIGl6c2zEk2d0YSI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iTmF2IGl6dmVpZG90cyBzYXZpZW5vanVtcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJOYXYgdMSra2xhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgaXIgaXpzbMSTZ3RzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpIGRpc3BsZWpzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iQmV6dmFkdSBhdHTEk2xvxaFhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iQXByYWlkZXMgZWtyxIFucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IlNwaWxndHVtcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTcSAVElTS0kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4ixaBlaXQgdGllayByxIFkxKt0aSBwYXppxYZvanVtaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IlBpZWvEvMWrc3RpZXQgdGllbSBqZWJrdXLEgSBsYWlrxIEsIHZlbGtvdCB1eiBsZWp1LlxuVsSTbHJlaXogdmVsY2lldCwgbGFpIHRpa3R1IHBhcsSBZMSrdGFzIHNpc3TEk21hcyB2YWTEq2tsYXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iVmVsY2lldCBubyBla3LEgW5hIG1hbGFzLCBsYWkgcGlla8S8xat0dSBqb3NsYWkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJWZWxjaWV0IG5vIGVrcsSBbmEgbWFsYXMsIGxhaSBwaWVrxLzFq3R1IHNpc3TEk21hcyBqb3NsYWkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IktyxIFzdSBpbnZlcnNpamFzIHJlxb7Eq21zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iVXpsYWJvdGEga29udHJhc3RhIHJlxb7Eq21zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJLcsSBc3Uga29yZWtjaWphcyByZcW+xKttcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iVMSra2xzIHZhclxudGlrdCB1enJhdWR6xKt0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iTWVrbMSTdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJWZWxjaWV0IHV6IGF1Z8WhdSwgbGFpIHZlaWt0dSDFocSBZHUgZGFyYsSrYnU6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJWZWxjaWV0IHBhIGtyZWlzaSwgbGFpIHZlaWt0dSDFocSBZHUgZGFyYsSrYnU6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbW4tbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbW4tbGFuZC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQ2MTZmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tbi1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiLQlNGN0LvQs9GN0YYg0YXRjdCy0YLRjdGNINGH0LjQs9C70Y3Qu9C0INGC0q/Qs9C20LjQs9C00YHRjdC9LiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tbi1yTU4tbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbW4tck1OLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0NjE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbW4tck1OLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+ItCU0Y3Qu9Cz0Y3RhiDRhdGN0LLRgtGN0Y0g0YfQuNCz0LvRjdC70LQg0YLSr9Cz0LbQuNCz0LTRgdGN0L0uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YzY4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+ItCh0LjRgdGC0LXQvCBVSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiLQptGN0LLRjdGA0LvRjdGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4i0JbQsNCz0YHQsNCw0LvRgtCw0LDRgSDRg9GB0YLQs9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4i0JDQv9C/INC80Y3QtNGN0Y3Qu9GN0LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+ItCh0q/Sr9C70LjQudC9INCw0L/QvyDRhdC+0L7RgdC+0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+ItCh0q/Sr9C70LjQudC9INCw0L/Qvy3Rg9GD0LTRi9CzINGF0LDQsNGFIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMSDRgdKv0q/Qu9C40LnQvSDQsNC/0L8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCDRgdKv0q/Qu9C40LnQvSDQsNC/0L8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i0JzRjdC00Y3Qs9C00Y3QuyDQsdCw0LnRhdCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4i0JPQsNGA0YHQsNC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+ItCc0Y3QtNGN0LPQtNGN0LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiLQptGN0L3RjdCz0LvRjdCz0YfQuNC50LMg0YXQvtC70LHQvtC90L4g0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+ItCR0LDRgtC10YDQtdC5INC00YPRg9GB0LDQtiDQsdCw0LnQvdCwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+INKv0LvQtNGB0Y3QvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0Ig0YbRjdC90Y3Qs9C70Y3Qu9GCINC00Y3QvNC20LjQs9C00Y3RhdCz0q/QuSDQsdCw0LnQvdCwLlxu0JfTqdCy0YXTqdC9INC90LjQudC70q/Sr9C70Y3Qs9C00YHRjdC9INGG0Y3QvdGN0LPQu9GN0LPRh9C40LnQsyDQsNGI0LjQs9C70LDQvdCwINGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+ItCR0LDRgtC10YDQtdC5INCw0YjQuNCz0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4i0KLQvtGF0LjRgNCz0L7QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+ItCd0LjRgdC70Y3Qs9C40LnQvSDQs9C+0YDQuNC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+ItCU0Y3Qu9Cz0Y3RhtC40LnQsyDQsNCy0YLQvtC80LDRgtCw0LDRgCDRjdGA0LPSr9Kv0LvRjdGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4i0KXQkNCQ0KUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+ItCQ0JLQotCe0JzQkNCiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i0JzRjdC00Y3Qs9C00Y3QuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiLQkdC70Y7RgtKv0q/RgtGL0LMg0LzQvtC00LXQvCDQsdC+0LvQs9C+0LYg0LHQsNC50L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+ItCe0YDRg9GD0LvQsNGFINCw0YDQs9GL0LMg0YLQvtGF0LjRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiLQkdC+0LTQuNGCINCz0LDRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INCw0L/Qvy3QsyBVU0Ig0YLTqdGF06nTqdGA06nQvNC20LjQtCDRhdCw0L3QtNCw0YXRi9CzINC306nQstGI06nTqdGA06nRhSDSr9KvPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDQsNC/0L8t0LMgVVNCINGC06nRhdOp06nRgNOp0LzQttC40LQg0YXQsNC90LTQsNGF0YvQsyDQt9Op0LLRiNOp06nRgNOp0YUg0q/Srz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+ItCt0L3RjSBVU0Ig0YLTqdGF06nTqdGA06nQvNC2INGF0L7Qu9Cx0L7Qs9C00L7RhSDSr9C10LQgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPi3QsyDQvdGN0Y3RhSDSr9KvPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4i0K3QvdGNIFVTQiDRgtOp0YXTqdOp0YDTqdC80LYg0YXQvtC70LHQvtCz0LTQvtGFINKv0LXQtCA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+LdCzINC90Y3RjdGFINKv0q8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i0K3QvdGNIFVTQiDRhdGN0YDRjdCz0YHRjdC7INC00Y3RjdGAINGB0YPRg9C70LPQsNGB0LDQvSDQsNC/0L8g0LDQttC40LvQu9Cw0LDQs9Kv0Lkg0LHQsNC50L3QsC4g0K3QvdGNINGF0Y3RgNGN0LPRgdC70LjQudC9INGC0LDQu9Cw0LDRgCA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPi3RgSDQtNGN0LvQs9GN0YDRjdC90LPSr9C5INKv0LfQvdGNINKv0q8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJVU0Ig0YLTqdGF06nTqdGA06nQvNC2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiLSrtC30Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+ItCt0L3RjSBVU0Ig0YLTqdGF06nTqdGA06nQvNC20LjQudCzINKv0L3QtNGB0Y3QvSDQsdC+0LvQs9C+0L0g0LDRiNC40LPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiLQrdC90Y0gVVNCINGC06nRhdOp06nRgNOp0LzQttC40LnQsyDSr9C90LTRgdGN0L0g0LHQvtC70LPQvtC9INCw0YjQuNCz0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiJVU0Ig0LTQtdCx0LDQsyDRhdC40LnRhdC40LnQsyDQt9Op0LLRiNOp06nRgNOp0YUg0q/Srz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i0JrQvtC80L/RjNGO0YLQtdGA0LjQudC9IFJTQSDRgtKv0LvRhdKv0q/RgNC40LnQvSDRhdGD0YDRg9GD0L3RiyDRhdGN0Y0gOlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i0K3QvdGNINC60L7QvNC/0YzRjtGC0LXRgNGN0Y3RgSDQvtGA0L7RhdGL0LMg0LHQsNC50L3Qs9CwINC306nQstGI06nTqdGA06nRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+ItCU0Y3Qu9Cz0Y3RhiDQtNKv0q/RgNCz0Y3RhSDQsdC+0Lsg06nRgdCz06nQvdOpINKv0q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i0JTRjdC70LPRjdGGINC00q/Sr9GA0LPRjdGFINCx0L7QuyDRgtCw0YLQvdCwINGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i0JTRjdC70LPRjdGG0LjQudC9INCw0LPRiNC40L3QsyDRhdCw0LTQs9Cw0LvQtiDQsdCw0LnQvdCw4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i0JTRjdC70LPRjdGG0LjQudC9INCw0LPRiNC40L3QsyDRhdCw0LTQs9Cw0LvQtiDQsdCw0LnQvdCw4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLQlNGN0LvQs9GN0YbQuNC50L0g0LDQs9GI0LjQvSDRhdCw0LTQs9Cw0LvQsNCz0LTQsNCyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4i0JTRjdC70LPRjdGG0LjQudC9INCw0LPRiNC40L3QsyDQsNCy0YHQsNC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLQlNGN0LvQs9GN0YbQuNC50L0g0LDQs9GI0L3Ri9CzINGF0LDRgNCw0YUg0LHQvtC7INGF0q/RgNC90Y0g0q/Sry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+ItCU0Y3Qu9Cz0Y3RhtC40LnQvSDQsNCz0YjQuNC90LMg0LDQstGHINGH0LDQtNGB0LDQvdCz0q/QuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+ItCU0Y3Qu9Cz0Y3RhtC40LnQvSDQsNCz0YjQuNC90LMg0YXQsNC00LPQsNC70LYg0YfQsNC00YHQsNC90LPSr9C5LiDQodCw0L0g0LDRiNC40LPQu9Cw0LPQtNCw0LYg0LHQsNC50LPQsNCwINCx0L7Qu9C+0LvRgtC+0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iVVNCINGE0LDQudC7INGI0LjQu9C20q/Sr9C70Y3RhSDRgdC+0L3Qs9C+0LvRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+ItCc0LXQtNC40LAg0YLQvtCz0LvRg9GD0LvQsNCz0YcoTVRQKSDQsdC+0LvQs9C+0L0g0LfQsNC70LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i0JrQsNC80LXRgCDQsdC+0LvQs9C+0L0oUFRQKSDQt9Cw0LvQs9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+ItCc0LDRgS3QtCDQt9C+0YDQuNGD0LvRgdCw0L0gINCQ0L3QtNGA0L7QudC0INCk0LDQudC7INCo0LjQu9C20q/Sr9C70Y3RhSDQsNC/0L8t0LMg0YHRg9GD0LvQs9Cw0L3QsCDRg9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4i0JHRg9GG0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLQk9GN0YDQuNC50L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLQptGN0YEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLQodKv0q/Qu9C40LnQvSDQsNC/0L8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiLQpdCw0LnRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLQmtCw0LzQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLQntGA0YPRg9C70LDRhSDQsNGA0LPRi9CzINGB0Y3Qu9Cz0Y3RhSDRgtC+0LLRhy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i0KLQvtGF0LjRgNC+0LzQttGC0L7QuSDTqdGB0LPTqdGFINGC0L7QstGHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i0JbQuNC20LPRjdGN0YEg0YLQvtC8INC00Y3Qu9Cz0Y3RhtGA0q/SryDTqdGB0LPTqdGFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiLQkdC70Y7RgtKv0q/RgiDRhdC+0LvQsdC+0LPQtNGB0L7QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4i0JHQu9GO0YLSr9Kv0YIg0YLQsNGB0YDQsNCyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+ItCR0LDRgtC10YDQtdC5INCx0LDQudGF0LPSr9C5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+ItCR0LDRgtC10YDQtdC5INC90Y3QsyDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+ItCR0LDRgtC10YDQtdC5INGF0L7RkdGAINCx0LDQs9Cw0L3QsNGC0LDQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiLQkdCw0YLQtdGA0LXQuSDQs9GD0YDQstCw0L0g0LHQsNCz0LDQvdCw0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+ItCR0LDRgtC10YDQtdC5INC00q/Sr9GA0Y3QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+ItCj0YLQsNGBINCx0LDQudGF0LPSr9C5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+ItCj0YLQsNGBINC90Y3QsyDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiLQo9GC0LDRgSDRhdC+0ZHRgCDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90aHJlZV9iYXJzIiBtc2dpZD0iODUyMTkwNDg0MzkxOTk3MTg4NSI+ItCj0YLQsNGBINCz0YPRgNCy0LDQvSDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY0NzE4MzQ4Njg1ODA3NTc4OTgiPiLQo9GC0LDRgdC90Ysg0LTQvtGF0LjQviDQtNKv0q/RgNGN0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+ItCU0LDRgtCwINCx0LDQudGF0LPSr9C5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9vbmVfYmFyIiBtc2dpZD0iMTQxNTYyNTgzMzIzODI3MzYyOCI+ItCU0LDRgtCwINC90Y3QsyDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+ItCU0LDRgtCwINGF0L7RkdGAINCx0LDQs9Cw0L3QsNGC0LDQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiLQlNCw0YLQsCDQs9GD0YDQstCw0L0g0LHQsNCz0LDQvdCw0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiLQlNCw0YLQsCDQtNC+0YXQuNC+INC00q/Sr9GA0Y3QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpZmkg0YPQvdGC0LDRgNGB0LDQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2lmaSDRgdCw0LvQsNCyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vbmVfYmFyIiBtc2dpZD0iNzczNTg5MzE3ODAxMDcyNDM3NyI+IldpZmkg0L3RjdCzINCx0LDQs9Cw0L3QsNGC0LDQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4iV2lmaSDRhdC+0ZHRgCDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4iV2lmaSDQs9GD0YDQstCw0L0g0LHQsNCz0LDQvdCw0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiJXaWZpINC00L7RhdC40L4g0LTSr9Kv0YDRjdC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iV2lNQVgg0LHQsNC50YXQs9Kv0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYINC90Y3QsyDQsdCw0LPQsNC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWCDRhdC+0ZHRgCDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+IldpTUFYINCz0YPRgNCy0LDQvSDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiJXaU1BWCDQtNC+0YXQuNC+INC00q/Sr9GA0Y3QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiLQlNC+0YXQuNC+INCx0LDQudGF0LPSr9C5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjYzOTUzMjYyNzYyMTM0MDI4ODMiPiLQpdC+0LvQsdC+0LPQtNC+0L7Qs9Kv0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4i0KLRjdCzINCx0LDQs9Cw0L3QsNGC0LDQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4i0J3RjdCzINCx0LDQs9Cw0L3QsNGC0LDQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+ItCl0L7RkdGAINCx0LDQs9Cw0L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4i0JPRg9GA0LLQsNC9INCx0LDQs9Cw0L3QsNGC0LDQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+ItCU0L7RhdC40L4g0LTSr9Kv0YDRjdC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiLQmNC00Y3QstGF0LjQttGB0Y3QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+ItCj0L3RgtGA0LDQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiLQpdC+0LvQsdC+0LPQtNGB0L7QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiLQoNKv0q/QvNC40L3QsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2VkZ2UiIG1zZ2lkPSI0NDc3NDU3MDUxNjMxOTc5Mjc4Ij4iRWRnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJTSU0g0LHQsNC50YXQs9Kv0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+ItCR0LvRjtGC0q/Sr9GCINC80L7QtNC10Lwg0LHQvtC70LYg0LHQsNC50L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiLQndC40YHQu9GN0LPQuNC50L0g0LPQvtGA0LjQvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiLQkdCw0YLQtdGA0LXQuSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0YXRg9Cy0YzRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiLQodC40YHRgtC10LzQuNC50L0g0YLQvtGF0LjRgNCz0L7Qvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+ItCc0Y3QtNGN0LPQtNGN0LsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+ItCc0Y3QtNGN0LPQtNC70LjQudCzINGG0Y3QstGN0YDQu9GN0YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMg0LjQtNGN0LLRhdGC0Y3QuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4iR1BTINGF0LDQudC2INCx0LDQudC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJUZWxlVHlwZXdyaXRlciDQuNC00Y3QstGF0YLRjdC5INCx0L7Qu9C+0LIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+ItCl0L7QvdGF0L3RiyDRh9C40YfQuNGA0LPRjdGNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLQpdC+0L3RhdGL0LMg0YXQsNCw0YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDQsdCw0LnRhdCz0q/QuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiLQnNGN0LTRjdCz0LTRjdC7INGF0LDQsNCz0LTRgdCw0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiLQnNGN0LTRjdCz0LTQu9C40LnQvSDRhdGD0YDQsNCw0L3Qs9GD0Lkg0YHQsNC80LHQsNGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+ItCo0YPRg9GA0YXQsNC5INGC0L7RhdC40YDQs9C+0L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+ItCh0q/Sr9C70LjQudC9INCw0L/QvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiLQpdGN0YDRjdCz0LvRjdCz0YcgPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+ItCc0L7QsdCw0LnQuyA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+ItCR0LDRgtC10YDQtdC5IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i0J3QuNGB0LvRjdCz0LjQudC9INCz0L7RgNC40LwgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i0JHQu9GO0YLSr9Kv0YIgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLQkdCw0LnRgNGI0LjQuyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+ItCh0Y3RgNKv0q/Qu9Cz0LjQudCzIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4t0LQg0YLQvtGF0LjRgNGD0YPQu9GB0LDQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyDQtNCw0YLQsCDQuNC00Y3QstGF0LPSr9C5INCx0L7Qu9C+0LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyDQtNCw0YLQsCDQuNC00Y3QstGF0LPSr9C5INCx0LDQudC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4i0JzQvtCx0LDQudC7INC00LDRgtCwINC40LTRjdCy0YXQs9Kv0Lkg0LHQvtC70L7QsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+ItCU0LDRgtCwINC40LTRjdCy0YXQs9Kv0Lkg0LHQvtC70L7QsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+ItCi0LAg0LfQsNCw0YHQsNC9INC00LDRgtCwINCw0YjQuNCz0LvQsNC70YLRi9C9INGF0Y/Qt9Cz0LDQsNGA0YIg0YXSr9GA0Y3Qsi5cblxu0KXRjdGA0Y3QsiDRgtCwINC00LDRgtCw0LMg0LTQsNGF0LjQvSDQuNC00Y3QstGF0LbSr9Kv0LvQsdGN0Lsg0L7Qv9C10YDQsNGC0L7RgNGCINGC06nQu9Cx06nRgCDRgtOp0LvTqdGFINGF0Y3RgNGN0LPRgtGN0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+ItCU0LDRgtCwINC00LDRhdC40L0g0LjQtNGN0LLRhdC20q/Sr9C70Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiLQmNC90YLQtdGA0L3QtdGCINGF0L7Qu9Cx0L7Qu9GCINCx0LDQudGF0LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg0YXQvtC70LHQvtCz0LTRgdC+0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQUyDRhdCw0LnQtiDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkdQUyDQsdCw0LnRgNGI0LjQuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+ItCR0LDQudGA0YjQu9GL0L0g0YXSr9GB0Y3Qu9GC0q/Sr9C0INC40LTRjdCy0YXRgtGN0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLQkdKv0YUg0LzRjdC00Y3Qs9C00LvQuNC50LMg0YbRjdCy0Y3RgNC70Y3RhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i0JDQv9C/INC80Y3QtNGN0Y3Qu9GN0LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+ItCU0Y3Qu9Cz0Y3RhiDQsNCy0YLQvtC80LDRgtCw0LDRgCDRjdGA0LPRjdC90Y0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLQlNGN0LvQs9GN0YYg0YXRjdCy0YLRjdGNINGH0LjQs9C70Y3Qu9C0INGC0q/Qs9C20LjQs9C00YHRjdC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLQlNGN0LvQs9GN0YYg0LHQvtGB0L7QviDRh9C40LPQu9GN0LvRjdGN0YAg0YLSr9Cz0LbQuNCz0LTRgdGN0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+ItCQ0LzRgtGC0LDQvdGLINGF0LDQudGA0YbQsNCzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkRheWRyZWFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4i0K3RgtC10YDQvdC10YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+ItCd0LjRgdC70Y3Qs9C40LnQvSDQs9C+0YDQuNC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+ItCm0Y3QvdGN0LPQu9GN0LYg0LHQsNC50L3QsCwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiLQptGN0L3RjdCz0LvRjdCz0LTRgdGN0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4i0JHQu9GO0YLSr9Kv0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiLQkdC70Y7RgtKv0q/RgiAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INGC06nRhdOp06nRgNOp0LzQtikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+ItCR0LvRjtGC0q/Sr9GCINGD0L3RgtGA0LDQsNC70YLRgtCw0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+ItCi0L7QtNGA0L7QuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4i0JDQstGC0L7QvNCw0YIg0Y3RgNCz0Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLQrdGA0LPSr9Kv0LvRjdC70YIg0YLSr9Cz0LbQuNCz0LTRgdGN0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4i0JHQvtGB0L7QviDQsdCw0LnQtNC70LDQsNGAINGC0q/Qs9C20YHRjdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiLQpdGN0LLRgtGN0Y0g0LHQsNC50LTQu9Cw0LDRgCDRgtKv0LPQttGB0Y3QvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLQntGA0YPRg9C70LDRhSDQsNGA0LPQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+ItCR0LDQudGA0YjQuNC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+ItCR0LDQudGA0YjQuNC7INC40LTRjdCy0YXQs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i0JzQtdC00LjQsCDRgtOp0YXTqdOp0YDTqdC80LYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+ItCX06nQstGF06nQvSDRj9Cw0YDQsNC70YLQsNC5INC00YPRg9C00LvQsNCz0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiLQotC+0YXQuNGA0LPQvtC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdGltZV9sYWJlbCIgbXNnaWQ9IjQ2MzU5NjkxODIyMzk3MzY0MDgiPiLQptCw0LMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc191c2VyX2xhYmVsIiBtc2dpZD0iNTIzODk5NTYzMjEzMDg5Nzg0MCI+ItCR0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+ItCl0L7Qu9Cx0L7Qs9C00L7QvtCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLQodKv0LvQttGN0Y3Qs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSDRg9C90YLQsNGA0YHQsNC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+ItCU0LDQvNC20YPRg9C70LDRhSDQtNGN0LvQs9GN0YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLQotC+0LTRgNC+0LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i0JDQktCi0J7QnNCQ0KIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i06jQvdCz06kg0YPRgNCy0YPRg9C70LDRhSDQs9C+0YDQuNC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i0KHQsNC50LbRgNGD0YPQu9GB0LDQvSDRj9C70LPQsNGA0LDQu9GC0LDQuSDQs9C+0YDQuNC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLTqNC90LPTqSDQt9Cw0LvRgNGD0YPQu9Cw0YUg0LPQvtGA0LjQvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i0KHSr9C70LbRjdGNINGF0Y/QvdCw0LPQtNCw0LZcbtCx0LDQudC2INCx0L7Qu9C30L7RiNCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i0KXQsNC50YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LdCzINCz0YPQu9GB0YPRg9C70LDRhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g0YXQuNC50YUg0LfSr9Kv0L3Qu9Kv0q8g0LPRg9C70YHRg9GD0LvQsNGFLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tcy1yTVktbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXMtck1ZLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1YjBmYQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXMtck1ZLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IlNrcmluIGtpbmkgZGlrdW5jaSBkYWxhbSBvcmllbnRhc2kgbGFuZHNrYXAuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNGQwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+IlNpc3RlbSBVSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiJQZG0gYmVyc2loIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4iQWxpaCBrZWx1YXIgZGFyaSBzZW5hcmFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+Ik1ha2x1bWF0IGFwbGlrYXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiJUaWFkYSBhcGxpa2FzaSB0ZXJiYWhhcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IkJ1YW5nIGFwbGlrYXNpIHRlcmJhaGFydSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEgYXBsaWthc2kgdGVyYmFoYXJ1IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQgYXBsaWthc2kgdGVyYmFoYXJ1IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IlRpYWRhIHBlbWJlcml0YWh1YW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+IlNlZGFuZyBiZXJsYW5nc3VuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbGF0ZXN0X2V2ZW50c190aXRsZSIgbXNnaWQ9IjY1OTQ3Njc0Mzg1Nzc1OTMxNzIiPiJQZW1iZXJpdGFodWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4iU2FtYnVuZ2thbiBwZW5nZWNhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IkJhdGVyaSBzZW1ha2luIGxlbWFoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+IkJlcmJha2kgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4iUGVuZ2VjYXNhbiBVU0IgdGlkYWsgZGlzb2tvbmcuXG5HdW5ha2FuIGhhbnlhIHBlbmdlY2FzIHlhbmcgZGliZWthbGthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4iUGVuZ2d1bmFhbiBiYXRlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiJUZXRhcGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0ODc5ODc5Njk4NTAwOTU1MzAwIj4iTW9kIHBlc2F3YXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4iQXV0b3B1dGFyIHNrcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4iUkVEQU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IkFVVE8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiJQZW1iZXJpdGFodWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aCBkaXRhbWJhdGthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IlNlZGlha2FuIGthZWRhaCBpbnB1dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+IlBhcGFuIGtla3VuY2kgZml6aWthbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiJCZW5hcmthbiBhcGxpa2FzaSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IG1lbmdha3NlcyBwZXJhbnRpIFVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IkJlbmFya2FuIGFwbGlrYXNpIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gbWVuZ2Frc2VzIGFrc2Vzb3JpIFVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IkJ1a2EgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBhcGFiaWxhIHBlcmFudGkgVVNCIGluaSBkaXNhbWJ1bmdrYW4/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiJCdWthIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4gYXBhYmlsYSBha3Nlc29yaSBVU0IgaW5pIGRpc2FtYnVuZ2thbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiJUaWFkYSBhcGwgeWcgZGlwc2cgYmZ1bmdzaSBkZ24gYWtzZXNvcmkgVVNCIGluaS4gS2V0YWh1aSBsZyB0dGcgYWtzZXNvcmkgaW5pIGRpIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJBa3Nlc29yaSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+IkxpaGF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4iR3VuYWthbiBzZWNhcmEgbGFsYWkgdW50dWsgcGVyYW50aSBVU0IgaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4iR3VuYWthbiBzZWNhcmEgbGFsYWkgdW50dWsgYWtzZXNvcmkgVVNCIGluaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4iQmVuYXJrYW4gcGVueWFocGVwaWphdGFuIFVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4iQ2FwIGphcmkga2VrdW5jaSBSU0Ega29tcHV0ZXIgaWFsYWg6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJTZW50aWFzYSBiZW5hcmthbiBrb21wdXRlciBpbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJadW0gdW50dWsgbWVtZW51aGkgc2tyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iUmVnYW5nIHV0ayBtZW1lbnVoaSBza3JpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJNZW55aW1wYW4gdGFuZ2thcGFuIHNrcmluLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iTWVueWltcGFuIHRhbmdrYXBhbiBza3Jpbi4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iVGFuZ2thcGFuIHNrcmluIHNlZGFuZyBkaXNpbXBhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IlRhbmdrYXBhbiBza3JpbiBkaXRhbmdrYXAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IlNlbnR1aCB1bnR1ayBtZWxpaGF0IHRhbmdrYXBhbiBza3JpbiBhbmRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RpdGxlIiBtc2dpZD0iNzA1NzgxMTE2NzQ2OTIyNzcxIj4iVGlkYWsgZGFwYXQgbWVuYW5na2FwIHRhbmdrYXBhbiBza3Jpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IlRpZGFrIGJvbGVoIG1lbnlpbXBhbiB0YW5na2FwYW4gc2tyaW4uIFN0b3JhbiBtdW5na2luIHNlZGFuZyBkaWd1bmFrYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iUGlsaWhhbiBwZW1pbmRhaGFuIGZhaWwgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4iTGVrYXBrYW4gc2ViYWdhaSBwZW1haW4gbWVkaWEgKE1UUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiJMZWthcGthbiBzZWJhZ2FpIGthbWVyYSAoUFRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iUGFzYW5nIGFwbGlrYXNpIFBpbmRhaGFuIEZhaWwgQW5kcm9pZCB1bnR1ayBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiJLZW1iYWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlJ1bWFoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IkFwbGlrYXNpIHRlcmJhaGFydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IkNhcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iS2FtZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJCdXRhbmcgdHVrYXIga2FlZGFoIGlucHV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJCdXRhbmcgenVtIGtlc2VyYXNpYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJTa3JpbiB6dW0gbGViaWgga2VjaWwga2VwYWRhIGxlYmloIGJlc2FyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiJCbHVldG9vdGggZGlzYW1idW5na2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9Ijc0MTY2NDg2Njk5NzY4NzAxNzUiPiJCbHVldG9vdGggZGlwdXR1c2thbiBzYW1idW5nYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4iVGlhZGEgYmF0ZXJpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IkJhdGVyaSBzYXR1IGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdHdvX2JhcnMiIG1zZ2lkPSI4NTAwNjUwNDM4NzM1MDA5OTczIj4iQmF0ZXJpIGR1YSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4iQmF0ZXJpIHRpZ2EgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+IkJhdGVyaSBwZW51aC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+IlRpYWRhIHRlbGVmb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9vbmVfYmFyIiBtc2dpZD0iNjg3Njk5Mjc4MTMyNjY0MTE1Ij4iVGVsZWZvbiBzYXR1IGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IlRlbGVmb24gZHVhIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3RocmVlX2JhcnMiIG1zZ2lkPSI4NTIxOTA0ODQzOTE5OTcxODg1Ij4iVGVsZWZvbiB0aWdhIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjQ3MTgzNDg2ODU4MDc1Nzg5OCI+IklzeWFyYXQgdGVsZWZvbiBwZW51aC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2RhdGEiIG1zZ2lkPSI0NzkxOTY2Mjk1MDk2ODY3NTU1Ij4iVGlhZGEgZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiJEYXRhIHNhdHUgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiJEYXRhIGR1YSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4iRGF0YSB0aWdhIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4iSXN5YXJhdCBkYXRhIHBlbnVoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4iV2lmaSBkaW1hdGlrYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IldpZmkgZGlwdXR1c2thbiBzYW1idW5nYW5ueWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4iV2lGaSBzYXR1IGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4iV2lGaSBkdWEgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IldpRmkgdGlnYSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IklzeWFyYXQgV2lGaSBwZW51aC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+IlRpYWRhIFdpTUFYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIHNhdHUgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4iV2lNQVggZHVhIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iV2lNQVggdGlnYSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiJJc3lhcmF0IFdpTUFYIHBlbnVoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+IlRpYWRhIGlzeWFyYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+IlRpZGFrIGRpc2FtYnVuZ2thbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiJUaWFkYSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IlNhdHUgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4iRHVhIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4iVGlnYSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiJJc3lhcmF0IHBlbnVoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiJEaWhpZHVwa2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4iRGltYXRpa2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19jb25uZWN0ZWQiIG1zZ2lkPSI4MzY2MjU2NjkzNzE5NDk5NjY1Ij4iRGlzYW1idW5na2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2dwcnMiIG1zZ2lkPSIxNjA2NDc3MjI0NDg2NzQ3NzUxIj4iR1BSUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzF4IiBtc2dpZD0iOTk0MTMzNDY4MTIwMjQ0MDE4Ij4iMSBYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25faHNwYSIgbXNnaWQ9IjIwMzIzMjg4NTU0NjI2NDUxOTgiPiJIU1BBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fM2ciIG1zZ2lkPSI4NjI4NTYyMzA1MDAzNTY4MjYwIj4iM0ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zLjVnIiBtc2dpZD0iODY2NDg0NTYwOTk4MTY5MjAwMSI+IjMuNUciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl80ZyIgbXNnaWQ9Ijc3NDEwMDA3NTA2MzAwODk2MTIiPiI0RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2x0ZSIgbXNnaWQ9IjU0MTM0Njg4MDg2Mzc1NDA2NTgiPiJMVEUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9jZG1hIiBtc2dpZD0iNjEzMjY0ODE5Mzk3ODgyMzAyMyI+IkNETUEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9yb2FtaW5nIiBtc2dpZD0iNTk3NzM2MjMzMzQ2NjU1NjA5NCI+IlBlcmF5YXVhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2VkZ2UiIG1zZ2lkPSI0NDc3NDU3MDUxNjMxOTc5Mjc4Ij4iRWRnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJUaWFkYSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IlBlbmFtYmF0YW4gQmx1ZXRvb3RoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+Ik1vZCBwZXNhd2F0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+IkJhdGVyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcGVyYXR1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IlRldGFwYW4gc2lzdGVtLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4iUGVtYmVyaXRhaHVhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlbW92ZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIzNjAzMDk5NTE0OTAyMTgyMzUwIj4iUGFkYW1rYW4gcGVtYmVyaXRhaHVhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IkdQUyBkaWRheWFrYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IkdQUyBzZWRhbmcgbWVuZGFwYXRrYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJNZXNpbiBUZWxldGFpcCBkaWRheWFrYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IlBlbmRlcmluZyBiZXJnZXRhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iUGVuZGVyaW5nIHNlbnlhcC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGRpdG9sYWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4iUGVtYmVyaXRhaHVhbiBkaWtldGVwaWthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfbm90aWZpY2F0aW9uX3NoYWRlIiBtc2dpZD0iNDY5MDI3NDg0NDQ0NzUwNDIwOCI+IkJpZGFpIHBlbWJlcml0YWh1YW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IlRldGFwYW4gcGFudGFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiJBcGwgdGVyYmFydS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4iUGVuZ2d1bmEgPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+Ik11ZGFoIEFsaWggPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcmkgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJNb2QgUGVzYXdhdCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJMb2thc2kgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJQZW5nZ2VyYSBkaXRldGFwa2FuIHBhZGEgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEYXRhIDJHLTNHIGRpbHVtcHVoa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iRGF0YSA0RyBkaWx1bXB1aGthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX21vYmlsZV90aXRsZSIgbXNnaWQ9IjEwNDYwNDcyNDg4NDQ4MjEyMDIiPiJEYXRhIG11ZGFoIGFsaWggZGlsdW1wdWhrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiJEYXRhIGRpbHVtcHVoa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4iQW5kYSB0ZWxhaCBtZW5jYXBhaSBoYWQgcGVuZ2d1bmFhbiBkYXRhIHlhbmcgZGlueWF0YWthbi5cblxuSmlrYSBhbmRhIG1lbmRheWFrYW4gc2VtdWxhIGRhdGEsIGFuZGEgbXVuZ2tpbiBkaWtlbmFrYW4gY2FqIG9sZWggb3BlcmF0b3IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+IkRheWFrYW4gc2VtdWxhIGRhdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4iVGlhZGEgc21iZyBJbnRlcm5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIGRpc2FtYnVuZ2thbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iTWVuY2FyaSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iTG9rYXNpIGRpdGV0YXBrYW4gb2xlaCBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJQZXJtaW50YWFuIGxva2FzaSBha3RpZiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IlBhZGFta2FuIHNlbXVhIHBlbWJlcml0YWh1YW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+Ik1ha2x1bWF0IGFwbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iU2tyaW4gYWthbiBiZXJwdXRhciBzZWNhcmEgYXV0b21hdGlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iU2tyaW4gZGlrdW5jaSBkYWxhbSBvcmllbnRhc2kgbGFuZHNrYXAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IlNrcmluIGRpa3VuY2kgZGFsYW0gb3JpZW50YXNpIHBvdHJldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iQmVrYXMgUGVuY3VjaSBNdWx1dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJMYW11biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2Qga2FwYWwgdGVyYmFuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiJNZW5nZWNhcywgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiJTdWRhaCBkaWNhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBQZXJhbnRpKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4iQmx1ZXRvb3RoIERpbWF0aWthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iS2VjZXJhaGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdXRvIFB1dGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IlB1dGFyYW4gRGlrdW5jaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiJEaWt1bmNpIGtlcGFkYSBQb3RyZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IkRpa3VuY2kga2VwYWRhIExhbmRza2FwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IkthZWRhaCBJbnB1dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Ikxva2FzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJMb2thc2kgRGltYXRpa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+IlBlcmFudGkgbWVkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IlBhbmdnaWxhbiBLZWNlbWFzYW4gU2FoYWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2V0dGluZ3NfbGFiZWwiIG1zZ2lkPSI1MzI2NTU2NTkyNTc4MDY1NDAxIj4iVGV0YXBhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4iTWFzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4iU2F5YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iVGlkYWsgRGlzYW1idW5na2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IlRpYWRhIFJhbmdrYWlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIERpbWF0aWthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJTa3JpbiBDYXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iS2VjZXJhaGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iTW9kIHBlbnlvbmdzYW5nYW4gd2FybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2Qga29udHJhcyBkaXBlcnRpbmdrYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZCBwZW1iZXR1bGFuIHdhcm5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJSYW5na2FpYW4gbXVuZ2tpblxuYm9sZWggZGlwYW50YXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkNhcmlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJMdW5jdXJrYW4ga2UgYXRhcyB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iTHVuY3Vya2FuIGtlIGtpcmkgdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXMvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMTJjY2IuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4iU2lzdGVtIFVJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+IlBkbSBiZXJzaWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiJBbGloIGtlbHVhciBkYXJpIHNlbmFyYWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4iTWFrbHVtYXQgYXBsaWthc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IlRpYWRhIGFwbGlrYXNpIHRlcmJhaGFydSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4iQnVhbmcgYXBsaWthc2kgdGVyYmFoYXJ1Ijwvc3RyaW5nPgotICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMSBhcGxpa2FzaSB0ZXJiYWhhcnUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCBhcGxpa2FzaSB0ZXJiYWhhcnUiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4iVGlhZGEgcGVtYmVyaXRhaHVhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4iU2VkYW5nIGJlcmxhbmdzdW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IlBlbWJlcml0YWh1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiJTYW1idW5na2FuIHBlbmdlY2FzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4iQmF0ZXJpIHNlbWFraW4gbGVtYWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4iQmVyYmFraSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJQZW5nZWNhc2FuIFVTQiB0aWRhayBkaXNva29uZy5cbkd1bmFrYW4gaGFueWEgcGVuZ2VjYXMgeWFuZyBkaWJla2Fsa2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiJQZW5nZ3VuYWFuIGJhdGVyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+IlRldGFwYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiJNb2QgcGVzYXdhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiJBdXRvcHV0YXIgc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiJSRURBTSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IlBlbWJlcml0YWh1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4iQmx1ZXRvb3RoIGRpdGFtYmF0a2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4iU2VkaWFrYW4ga2FlZGFoIGlucHV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4iUGFwYW4ga2VrdW5jaSBmaXppa2FsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IkJlbmFya2FuIGFwbGlrYXNpIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gbWVuZ2Frc2VzIHBlcmFudGkgVVNCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4iQmVuYXJrYW4gYXBsaWthc2kgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBtZW5nYWtzZXMgYWtzZXNvcmkgVVNCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4iQnVrYSA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IGFwYWJpbGEgcGVyYW50aSBVU0IgaW5pIGRpc2FtYnVuZ2thbj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IkJ1a2EgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBhcGFiaWxhIGFrc2Vzb3JpIFVTQiBpbmkgZGlzYW1idW5na2FuPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IlRpYWRhIGFwbCB5ZyBkaXBzZyBiZnVuZ3NpIGRnbiBha3Nlc29yaSBVU0IgaW5pLiBLZXRhaHVpIGxnIHR0ZyBha3Nlc29yaSBpbmkgZGkgPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IkFrc2Vzb3JpIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4iTGloYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiJHdW5ha2FuIHNlY2FyYSBsYWxhaSB1bnR1ayBwZXJhbnRpIFVTQiBpbmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiJHdW5ha2FuIHNlY2FyYSBsYWxhaSB1bnR1ayBha3Nlc29yaSBVU0IgaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiJCZW5hcmthbiBwZW55YWhwZXBpamF0YW4gVVNCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiJDYXAgamFyaSBrZWt1bmNpIFJTQSBrb21wdXRlciBpYWxhaDpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlNlbnRpYXNhIGJlbmFya2FuIGtvbXB1dGVyIGluaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilp1bSB1bnR1ayBtZW1lbnVoaSBza3JpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJSZWdhbmcgdXRrIG1lbWVudWhpIHNrcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iWnVtIGtlc2VyYXNpYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iQXBhYmlsYSBhcGwgZGlyZWthIHVudHVrIHNrcmluIHlhbmcgbGViaWgga2VjaWwsIGthd2FsYW4genVtIGFrYW4gbXVuY3VsIGRpIHRlcGkgamFtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJNZW55aW1wYW4gdGFuZ2thcGFuIHNrcmluLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iTWVueWltcGFuIHRhbmdrYXBhbiBza3Jpbi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iVGFuZ2thcGFuIHNrcmluIHNlZGFuZyBkaXNpbXBhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IlRhbmdrYXBhbiBza3JpbiBkaXRhbmdrYXAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IlNlbnR1aCB1bnR1ayBtZWxpaGF0IHRhbmdrYXBhbiBza3JpbiBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RpdGxlIiBtc2dpZD0iNzA1NzgxMTE2NzQ2OTIyNzcxIj4iVGlkYWsgZGFwYXQgbWVuYW5na2FwIHRhbmdrYXBhbiBza3Jpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IlRpZGFrIGJvbGVoIG1lbnlpbXBhbiB0YW5na2FwYW4gc2tyaW4uIFN0b3JhbiBtdW5na2luIHNlZGFuZyBkaWd1bmFrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iUGlsaWhhbiBwZW1pbmRhaGFuIGZhaWwgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4iTGVrYXBrYW4gc2ViYWdhaSBwZW1haW4gbWVkaWEgKE1UUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiJMZWthcGthbiBzZWJhZ2FpIGthbWVyYSAoUFRQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iUGFzYW5nIGFwbGlrYXNpIFBpbmRhaGFuIEZhaWwgQW5kcm9pZCB1bnR1ayBNYWMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiJLZW1iYWxpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlJ1bWFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IkFwbGlrYXNpIHRlcmJhaGFydSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iQnV0YW5nIHR1a2FyIGthZWRhaCBpbnB1dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iQnV0YW5nIHp1bSBrZXNlcmFzaWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iU2tyaW4genVtIGxlYmloIGtlY2lsIGtlcGFkYSBsZWJpaCBiZXNhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4iQmx1ZXRvb3RoIGRpc2FtYnVuZ2thbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4iQmx1ZXRvb3RoIGRpcHV0dXNrYW4gc2FtYnVuZ2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IlRpYWRhIGJhdGVyaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiJCYXRlcmkgc2F0dSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+IkJhdGVyaSBkdWEgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+IkJhdGVyaSB0aWdhIGJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfZnVsbCIgbXNnaWQ9Ijg5MDkxMjI0MDE3MjAxNTg1ODIiPiJCYXRlcmkgcGVudWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19waG9uZSIgbXNnaWQ9IjQ4OTQ3MDg5MzcwNTI2MTEyODEiPiJUaWFkYSB0ZWxlZm9uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IlRlbGVmb24gc2F0dSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiJUZWxlZm9uIGR1YSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90aHJlZV9iYXJzIiBtc2dpZD0iODUyMTkwNDg0MzkxOTk3MTg4NSI+IlRlbGVmb24gdGlnYSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY0NzE4MzQ4Njg1ODA3NTc4OTgiPiJJc3lhcmF0IHRlbGVmb24gcGVudWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+IlRpYWRhIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4iRGF0YSBzYXR1IGJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4iRGF0YSBkdWEgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IkRhdGEgdGlnYSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3NpZ25hbF9mdWxsIiBtc2dpZD0iMjcwODM4NDYwODEyNDUxOTM2OSI+IklzeWFyYXQgZGF0YSBwZW51aC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpZmkgZGltYXRpa2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2lmaSIgbXNnaWQ9IjE0MjU0NzY1NTE4Mjc5MjQ0NzQiPiJXaWZpIGRpcHV0dXNrYW4gc2FtYnVuZ2FubnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vbmVfYmFyIiBtc2dpZD0iNzczNTg5MzE3ODAxMDcyNDM3NyI+IldpRmkgc2F0dSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IldpRmkgZHVhIGJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiJXaUZpIHRpZ2EgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiJJc3lhcmF0IFdpRmkgcGVudWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiJUaWFkYSBXaU1BWCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWCBzYXR1IGJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYIGR1YSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+IldpTUFYIHRpZ2EgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4iSXN5YXJhdCBXaU1BWCBwZW51aC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiJUaWFkYSBpc3lhcmF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjYzOTUzMjYyNzYyMTM0MDI4ODMiPiJUaWRhayBkaXNhbWJ1bmdrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4iVGlhZGEgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfb25lX2JhciIgbXNnaWQ9IjE2ODU3MzAxMTMxOTIwODE4OTUiPiJTYXR1IGJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IkR1YSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IlRpZ2EgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4iSXN5YXJhdCBwZW51aC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4iRGloaWR1cGthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IkRpbWF0aWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IkRpc2FtYnVuZ2thbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiJQZXJheWF1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IkVkZ2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4iVGlhZGEgU0lNLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiJQZW5hbWJhdGFuIEJsdWV0b290aC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiJNb2QgcGVzYXdhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiJCYXRlcmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBlcmF0dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiJUZXRhcGFuIHNpc3RlbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IlBlbWJlcml0YWh1YW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IlBhZGFta2FuIHBlbWJlcml0YWh1YW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMgZGlkYXlha2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMgc2VkYW5nIG1lbmRhcGF0a2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4iTWVzaW4gVGVsZXRhaXAgZGlkYXlha2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiJQZW5kZXJpbmcgYmVyZ2V0YXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlBlbmRlcmluZyBzZW55YXAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBkaXRvbGFrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IlBlbWJlcml0YWh1YW4gZGlrZXRlcGlrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiJCaWRhaSBwZW1iZXJpdGFodWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiJUZXRhcGFuIHBhbnRhcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4iQXBsIHRlcmJhcnUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IlBlbmdndW5hIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiJNdWRhaCBBbGloIDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0ZXJpIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTW9kIFBlc2F3YXQgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iUGVuZ2dlcmEgZGl0ZXRhcGthbiBwYWRhIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iRGF0YSAyRy0zRyBkaWx1bXB1aGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkRhdGEgNEcgZGlsdW1wdWhrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4iRGF0YSBtdWRhaCBhbGloIGRpbHVtcHVoa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4iRGF0YSBkaWx1bXB1aGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+IkFuZGEgdGVsYWggbWVuY2FwYWkgaGFkIHBlbmdndW5hYW4gZGF0YSB5YW5nIGRpbnlhdGFrYW4uXG5cbkppa2EgYW5kYSBtZW5kYXlha2FuIHNlbXVsYSBkYXRhLCBhbmRhIG11bmdraW4gZGlrZW5ha2FuIGNhaiBvbGVoIG9wZXJhdG9yLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiJEYXlha2FuIHNlbXVsYSBkYXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IlRpYWRhIHNtYmcgSW50ZXJuZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBkaXNhbWJ1bmdrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+Ik1lbmNhcmkgR1BTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+Ikxva2FzaSBkaXRldGFwa2FuIG9sZWggR1BTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iUGFkYW1rYW4gc2VtdWEgcGVtYmVyaXRhaHVhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iTWFrbHVtYXQgYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJTa3JpbiBha2FuIGJlcnB1dGFyIHNlY2FyYSBhdXRvbWF0aWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJTa3JpbiBkaWt1bmNpIGRhbGFtIG9yaWVudGFzaSBsYW5kc2thcC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iU2tyaW4gZGlrdW5jaSBkYWxhbSBvcmllbnRhc2kgcG90cmV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJMYW11biI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2Qga2FwYWwgdGVyYmFuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiJNZW5nZWNhcywgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiJTdWRhaCBkaWNhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBQZXJhbnRpKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4iQmx1ZXRvb3RoIERpbWF0aWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iS2VjZXJhaGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdXRvIFB1dGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IlB1dGFyYW4gRGlrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJLYWVkYWggSW5wdXQiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsICg3NDY0NTQ0MDg2NTA3MzMxNDU5KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+IlBlcmFudGkgbWVkaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IlBhbmdnaWxhbiBLZWNlbWFzYW4gU2FoYWphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2V0dGluZ3NfbGFiZWwiIG1zZ2lkPSI1MzI2NTU2NTkyNTc4MDY1NDAxIj4iVGV0YXBhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4iTWFzYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4iU2F5YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iVGlkYWsgRGlzYW1idW5na2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IlRpYWRhIFJhbmdrYWlhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIERpbWF0aWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJQYXBhcmFuIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iUGFwYXJhbiBXYXlhcmxlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IktlY2VyYWhhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IlBlbWJlcml0YWh1YW4gZGlwYXBhcmthbiBkaSBzaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iQWtzZXMgcGFuZWwgcGFkYSBiaWxhLWJpbGEgbWFzYSBkZW5nYW4gbWVsZXJldCBrZSBiYXdhaC5cbkxlcmV0IGtlIGJhd2FoIHNla2FsaSBsYWdpIHVudHVrIG1lbmRhcGF0a2FuIGthd2FsYW4gc2lzdGVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IkxlcmV0IGtlIGJhaGFnaWFuIHRlcGkgc2tyaW4gdW50dWsgbWVuYW1wYWtrYW4gYmFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJMZXJldCBkYXJpIHRlcGkgc2tyaW4gdW50dWsgbWVuYW1wYWtrYW4gYmFyIHNpc3RlbSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKaW5kZXggNzc4YmU4My4uMGZhOWQ0YyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4iU3lzLmdyLnNuaXR0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+IkZqZXJuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4iRmplcm4gZnJhIGxpc3RlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiJJbmZvIG9tIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiJJbmZvIG9tIGFwcGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiJJbmdlbiBueWxpZ2UgYXBwZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IkF2dmlzIG55bGlnZSBhcHBlciI8L3N0cmluZz4KICAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iVGlsbGF0IGFsbHRpZCBmcmEgZGVubmUgZGF0YW1hc2tpbmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWm9vbSBmb3Igw6UgZnlsbGUgc2tqZXJtZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iU3RyZWtrIGZvciDDpSBmeWxsZSBza2plcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJLb21wYXRpYmlsaXRldHMtem9vbWluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJOw6VyIGVuIGFwcCBlciB1dGZvcm1ldCBmb3IgZW4gbWluZHJlIHNramVybSwgdmlzZXMgZGV0IGVuIHpvb21rb250cm9sbCB2ZWQga2xva2tlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iTGFncmVyIHNramVybWR1bXBlbiDigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJMYWdyZXIgc2tqZXJtZHVtcGVuIOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iU2tqZXJtZHVtcGVuIGxhZ3Jlcy4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iU3RhcnRzaWRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVueSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+Ik55bGlnZSBhcHBlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IlPDuGsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iS2FtZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJCeXR0IGtuYXBwIGZvciBpbm5kYXRhbWV0b2RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJab29ta25hcHAgZm9yIGtvbXBhdGliaWxpdGV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iWm9vbSBmcmEgbWluZHJlIHRpbCBzdMO4cnJlIHNramVybS4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXR0ZXJpIOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IkZseW1vZHVzIOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGgg4oCTIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iUG9zaXNqb24gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybWVuIGJsZSBzdGlsdCBmb3IgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRy1kYXRhIGVyIGRlYWt0aXZlcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0Ry1kYXRhIGVyIGRlYWt0aXZlcnQiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkgdGlsa29ibGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJTw7hrZXIgZXR0ZXIgR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IlBvc2lzam9uIGFuZ2l0dCBhdiBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJBa3RpdmUgc3RlZHNmb3Jlc3DDuHJzbGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iRmplcm4gYWxsZSB2YXJzbGluZ2VyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvIG9tIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvIG9tIGFwcGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJTa2plcm1lbiByb3RlcmVyIGF1dG9tYXRpc2suIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJTa2plcm1lbiBlciBsw6VzdCBpIGxpZ2dlbmRlIHJldG5pbmcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IlNramVybWVuIGVyIGzDpXN0IGkgc3TDpWVuZGUgcmV0bmluZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iRGVzc2VydG1vbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYWdkcsO4bSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJGbHltb2R1cyI8L3N0cmluZz4KQEAgLTE4MSw2ICsxODMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJMeXNzdHlya2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkF1dG9tYXRpc2sgcm90YXNqb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUm90YXNqb24gZXIgbMOlc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iTMOlc3QgdGlsIHN0w6VlbmRlIGZvcm1hdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iTMOlc3QgdGlsIGxpZ2dlbmRlIGZvcm1hdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJJbm5kYXRhbWV0b2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iU3RlZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJQb3Npc2pvbiBhdiI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iSWtrZSB0aWxrb2JsZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iSW5nZW4gbmV0dHZlcmsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBlciBhdiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GaS1za2plcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJUcsOlZGzDuHMgc2tqZXJtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IlNlbmQgc2tqZXJtZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJMeXNzdHlya2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJWYXJzbGVuZSB2aXNlcyBoZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJCcnVrIGRlbSBuw6VyIHNvbSBoZWxzdCB2ZWQgw6Ugc3ZlaXBlIG5lZG92ZXIuXG5TdmVpcCBuZWRvdmVyIGlnamVuIGZvciDDpSBnw6UgdGlsIHN5c3RlbWtvbnRyb2xsZW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IlN2ZWlwIHDDpSBrYW50ZW4gYXYgc2tqZXJtZW4gZm9yIMOlIGbDpSBmcmVtIGZlbHRldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iU3ZlaXAgZnJhIGthbnRlbiBww6Ugc2tqZXJtZW4gZm9yIMOlIGbDpSBmcmVtIHN5c3RlbWZlbHRldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2R1cyBmb3IgZmFyZ2VpbnZlcnRlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IkZvcmJlZHJldCBrb250cmFzdG1vZHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJNb2R1cyBmb3IgZmFyZ2Vrb3JyaWdlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iTmV0dHZlcmtldCBrYW5cbnbDpnJlIG92ZXJ2w6VrZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlPDuGsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRHJhIG9wcCBmb3Igw6UgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkRyYSB0aWwgdmVuc3RyZSBmb3Igw6UgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTI4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5lLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpIXgpLngpL/gpLLgpYcg4KSy4KWN4KSv4KS+4KSo4KWN4KSh4KS44KWN4KSV4KWH4KSqIOCkheCkteCkuOCljeCkpeCkvuCkruCkviDgpKzgpKjgpY3gpKYg4KSb4KWkIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5lLXJOUC1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS1yTlAtbGFuZC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDUyODZlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS1yTlAtbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkheCkueCkv+CksuClhyDgpLLgpY3gpK/gpL7gpKjgpY3gpKHgpLjgpY3gpJXgpYfgpKog4KSF4KS14KS44KWN4KSl4KS+4KSu4KS+IOCkrOCkqOCljeCkpiDgpJvgpaQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllMjc0NAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjA2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+IuCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IuCkuOClguCkmuClgOCkrOCkvuCknyDgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCknOCkvuCkqOCkleCkvuCksOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4i4KSV4KWB4KSo4KWIIOCkqOCkr+CkvuCkgSDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSb4KWI4KSo4KSo4KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiLgpKjgpK/gpL7gpIEg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkluCkvuCksOClh+CknCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiLgpacg4KSt4KSw4KSW4KSw4KWIIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTA0MDc4NDM1OTc5NDg5MDc0NCI+IiVkIOCkreCksOCkluCksOCliOCkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i4KSV4KWB4KSo4KWIIOCkuOClguCkmuCkqOCkvuCkueCksOClgiDgpJvgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+IuCkmuCksuCkv+CksOCkueClh+CkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbGF0ZXN0X2V2ZW50c190aXRsZSIgbXNnaWQ9IjY1OTQ3Njc0Mzg1Nzc1OTMxNzIiPiLgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiLgpJrgpL7gpLDgpY3gpJzgpLAg4KSc4KSh4KS+4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkvyDgpKjgpY3gpK/gpYLgpKgg4KS54KWB4KSB4KSm4KWIIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+IOCkrOCkvuCkgeCkleClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0Ig4KSa4KS+4KSw4KWN4KScIOCkl+CksOCljeCkqCDgpLjgpK7gpLDgpY3gpKXgpL/gpKQg4KSb4KWI4KSo4KWkXG4g4KSG4KSq4KWC4KSw4KWN4KSk4KS/IOCkl+CksOCkv+Ckj+CkleCliyDgpJrgpL7gpLDgpY3gpJzgpLAg4KSu4KS+4KSk4KWN4KSwIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkquCljeCksOCkr+Cli+CklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+IuCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4i4KS14KS+4KSHLeCkq+CkvuCkhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0ODc5ODc5Njk4NTAwOTU1MzAwIj4i4KS54KS14KS+4KSH4KSc4KS54KS+4KScIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiLgpLjgpY3gpLXgpKQ64KSY4KWB4KSu4KWN4KSo4KWHIOCkuOCljeCkleCljeCksOCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+IuCkruCljeCkr+ClgeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IuCkuOCljeCkteCkpOCkgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IuCkuOClguCkmuCkqOCkvuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUg4KSf4KWH4KSl4KSwIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IuCkh+CkqOCkquClgeCknyDgpLXgpL/gpKfgpL/gpLngpLDgpYIg4KS44KWH4KSf4KSF4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+IuCkq+Ckv+CknOCkv+CkleCksiDgpJXgpL/gpKzgpYvgpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBVU0Ig4KSJ4KSq4KSV4KSw4KSj4KSy4KS+4KSIIOCkquCkueClgeCkgeCkmiDgpKbgpL/gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWHIOCkueCliz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gVVNCIOCkquCkvuCkn+CkquClgeCksOCljeCknOCkvuCksuCkvuCkiCDgpKrgpLngpYHgpIHgpJog4KSm4KS/4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiLgpK/gpYsgVVNCIOCkieCkquCkleCksOCkoyDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSs4KWH4KSy4KS+IDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g4KSW4KWL4KSy4KWN4KSo4KWHIOCkueCliz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IuCkr+CliyBVU0Ig4KS44KS54KS+4KSv4KSVIOCknOCkoeCkvuCkqCDgpLngpYHgpIHgpKbgpL4gPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDgpJbgpYvgpLLgpY3gpKjgpYcg4KS54KWLPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IuCkr+CkuCBVU0Ig4KSJ4KSq4KSV4KSw4KSj4KS44KSB4KSXIOCkuOCljeCkpeCkvuCkquCkv+CkpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSV4KS+4KSuIOCkl+CksOCljeCkpuCliOCkqOClpCDgpK/gpLgg4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiDgpK7gpL4g4KSn4KWH4KSw4KWIIOCknOCkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCIOCkuOCkueCkr+Cli+Ckl+ClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4i4KSm4KWD4KS24KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4i4KSv4KWLIFVTQiDgpIngpKrgpJXgpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i4KSv4KS4IFVTQiDgpLjgpLngpL7gpK/gpJUg4KS44KS+4KSu4KS+4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4iVVNCIOCkoeCkv+CkrOCklyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYcg4KS54KWLPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiLgpJXgpK7gpY3gpKrgpY3gpK/gpYHgpJ/gpLDgpJXgpYsgUlNBIOCkleClgeCknuCljeCknOClgCDgpJTgpILgpLLgpL7gpJvgpL7gpKo6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLgpK/gpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSs4KS+4KSfIOCkuOCkp+CliOCkgSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkreCksOCljeCkqCDgpJzgpYHgpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpK3gpLDgpY3gpKgg4KSk4KSo4KWN4KSV4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IuCkuOCljeCkleCljeCksOCkv+CkqOCkuOCknyDgpKzgpJrgpKQg4KSX4KSw4KWN4KSm4KWI4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSfIOCkrOCkmuCkpCDgpJfgpLDgpY3gpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IuCkuOCljeCkleCljeCksOCkv+CkqOCkuOCknyDgpKzgpJrgpKQg4KS54KWB4KSB4KSm4KWIIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSfIOCkleCljeCkr+CkvuCkquCljeCkmuCksCDgpJfgpLDgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCljeCkleCljeCksOCkv+CkqOCkuOCknyDgpLngpYfgpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLjgpJ8g4KSV4KWN4KSv4KS+4KSq4KWN4KSa4KSwIOCkl+CksOCljeCkqCDgpLjgpJXgpL/gpI/gpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IuCkuOCljeCkleCljeCksOCkv+CkqOCkuOCkn+CksuCkvuCkiCDgpKzgpJrgpKQg4KSX4KSw4KWN4KSoIOCkuOCkleClh+CkqOClpCDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSJ4KSq4KSv4KWL4KSX4KSu4KS+IOCkueClgeCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJVU0Ig4KSr4KS+4KSH4KSyIOCkuOCkvuCksOCljeCkqOClhyDgpLXgpL/gpJXgpLLgpY3gpKrgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLgpK7gpL/gpKHgpL/gpK/gpL4g4KSq4KWN4KSy4KWH4KSv4KSwKE1UUCngpJXgpYsg4KSw4KWC4KSq4KSu4KS+IOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL7gpJXgpYsg4KSw4KWC4KSq4KSu4KS+IOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gKFBUUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+IuCkruCljeCkr+CkvuCkleCkleCliyDgpLLgpL7gpJfgpL8g4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkq+CkvuCkh+CksiDgpJ/gpY3gpLDgpL7gpKjgpY3gpLjgpKvgpLAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCljeCkpeCkvuCkquCkqOCkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiLgpKrgpJvgpL7gpKHgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i4KSX4KWD4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i4KSu4KWH4KSo4KWBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i4KSt4KSw4KWN4KSW4KSw4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i4KSH4KSo4KSq4KWB4KSfIOCkteCkv+Ckp+CkvyDgpKzgpJ/gpKgg4KS44KWN4KS14KS/4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLgpK7gpL/gpLLgpL7gpIngpKjgpYcg4KSc4KWB4KSuIOCkrOCkn+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSy4KS+4KSIIOCkuOCkvuCkqOCli+CkrOCkvuCknyDgpKDgpYLgpLLgpYsg4KSq4KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iMjcwNzAyNzYzMzI0Mjk4MzM3MCI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpJzgpKHgpL7gpKgg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IuCkrOCljeCksuClgeCkn+ClgeCkpeCkuOCkgeCklyDgpLXgpL/gpJrgpY3gpJvgpYfgpKYg4KSX4KSw4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4i4KSV4KWB4KSo4KWIIOCkrOCljeCkr+CkvuCkn+CljeCksOCkvyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSP4KSJ4KSf4KS+IOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL/gpJXgpL4g4KSm4KWB4KSI4KS14KSf4KS+IOCkquCkn+CljeCkn+Ckv+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkv+CkleCkviDgpKTgpL/gpKjgpLXgpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkquClguCksOCljeCkoyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+IuCkq+Cli+CkqCDgpJvgpYjgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiLgpKvgpYvgpKgg4KSP4KSJ4KSf4KS+IOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdHdvX2JhcnMiIG1zZ2lkPSI4Mzg0OTA1MzgyODA0ODE1MjAxIj4i4KSr4KWL4KSoIOCkpuClgeCkiCDgpKrgpJ/gpY3gpJ/gpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3RocmVlX2JhcnMiIG1zZ2lkPSI4NTIxOTA0ODQzOTE5OTcxODg1Ij4i4KSr4KWL4KSoIOCkpOCkv+CkqCDgpKrgpJ/gpY3gpJ/gpL/gpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjQ3MTgzNDg2ODU4MDc1Nzg5OCI+IuCkq+Cli+CkqCDgpLjgpJngpY3gpJXgpYfgpKQg4KSt4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+IuCkoeClh+Ckn+CkviDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiLgpKHgpYfgpJ/gpL7gpJXgpYsg4KSP4KSJ4KSf4KS+IOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiLgpKHgpYfgpJ/gpL4g4KSm4KWB4KSIIOCkrOCkvuCkp+CkvuCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IuCkoeClh+Ckn+CkviDgpKTgpL/gpKgg4KSs4KS+4KSn4KS+4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3NpZ25hbF9mdWxsIiBtc2dpZD0iMjcwODM4NDYwODEyNDUxOTM2OSI+IuCkoeClh+Ckn+CkviDgpLjgpILgpJXgpYfgpKQg4KSq4KWC4KSw4KWN4KSj4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSs4KSo4KWN4KSm4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpLXgpL/gpJrgpY3gpJvgpYfgpKYg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4i4KS14KS+4KSH4KSr4KS+4KSHIOCkj+CklSDgpKrgpJ/gpY3gpJ/gpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4i4KS14KS+4KSH4KSr4KS+4KSHIOCkpuClgeCkiCDgpKrgpJ/gpY3gpJ/gpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSk4KS/4KSoIOCkrOCkvuCksOCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KS44KSZ4KWN4KSV4KWH4KSkIOCkreCksOCkv+Ckj+CkleCli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4i4KS14KS+4KSH4KSu4KWN4KSv4KS+4KS4IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWCDgpI/gpIngpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiLgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KSm4KWB4KSI4KS14KSf4KS+IOCkrOCkvuCksOCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiLgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KSk4KS/4KSo4KS14KSf4KS+IOCkrOCkvuCksOCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4i4KS14KS+4KSH4KSu4KWN4KSv4KS+4KSV4KWN4KS4IOCkuOCkmeCljeCkleClh+CkpCDgpK3gpLDgpL/gpI/gpJXgpL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiLgpLjgpJngpY3gpJXgpYfgpKQg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+IuCknOCkoeCkvuCkqCDgpKjgpJfgpLDgpL/gpI/gpJXgpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiLgpLbgpYLgpKjgpY3gpK8g4KSq4KSf4KWN4KSf4KS/4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IuCkj+CkieCkn+CkviDgpKzgpL7gpLDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IuCkpuClgeCkiCDgpKrgpJ/gpY3gpJ/gpL/gpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4i4KSk4KS/4KSo4KS14KSf4KS+IOCkquCkn+CljeCkn+Ckv+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4i4KS44KSZ4KWN4KSV4KWH4KSkIOCkquClguCksOCljeCkoyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4i4KSa4KS+4KSy4KWB4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29mZiIgbXNnaWQ9IjY0NzU1MDgxNTc3ODY4NTMxNTciPiLgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiLgpJzgpKHgpL7gpKgg4KSX4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i4KSw4KWL4KSu4KS/4KSZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiLgpLXgpL7gpIct4KSr4KS+4KSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4iU0lNIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUg4KSf4KS/4KSl4KSwIOCkl+CksOCljeCkpuCliOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+IuCkueCkteCkvuCkh+CknOCkueCkvuCknCDgpK7gpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpY3gpLDgpKTgpL/gpLbgpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IuCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IuCkuOClguCkmuCkqOCkvuCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLgpLjgpYLgpJrgpKjgpL4g4KSW4KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpL/gpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4iR1BTIOCkquCljeCksOCkvuCkquCljeCkpCDgpLngpYHgpIHgpKbgpYjgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IuCkn+Clh+CksuCkvyDgpJ/gpL7gpIfgpKrgpLDgpL7gpIfgpJ/gpLAg4KS44KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLgpKzgpJzgpY3gpKjgpYcg4KSV4KSu4KWN4KSq4KSoIOCkueClgeCkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLgpJjgpKjgpY3gpJ/gpYAg4KSu4KWM4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgpJbgpL7gpLDgpYfgpJwg4KSX4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IuCkuOClguCkmuCkqOCkviDgpJbgpL7gpLDgpYfgpJzgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfbm90aWZpY2F0aW9uX3NoYWRlIiBtc2dpZD0iNDY5MDI3NDg0NDQ0NzUwNDIwOCI+IuCkuOClguCkmuCkqOCkviDgpJXgpJXgpY3gpLfgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4i4KSm4KWN4KSw4KWB4KSkIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+4KWkIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+IuCkruCli+CkteCkvuCkh+CksiA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPuClpCA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz7gpaQgPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkvyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i4KS54KS14KS+4KSc4KS54KS+4KScIOCkruCli+CkoSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IuCkrOCljeCksuClgeCkn+ClgeCkpSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KS44KSZ4KWN4KSV4KWH4KSkIOCkmOCkqOCljeCkn+ClgCDgpLjgpYfgpJ8g4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cg4KSh4KWH4KSf4KS+IOCkheCkleCljeCkt+CkriDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyDgpKHgpYfgpJ/gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX21vYmlsZV90aXRsZSIgbXNnaWQ9IjEwNDYwNDcyNDg4NDQ4MjEyMDIiPiLgpK7gpYvgpKzgpL7gpIfgpLIg4KSh4KWH4KSf4KS+IOCkheCkleCljeCkt+CkriDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiLgpKHgpYfgpJ/gpL4g4KSF4KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+IuCkpOCkquCkvuCkiOCkgSDgpKjgpL/gpLDgpY3gpKbgpL/gpLfgpY3gpJ8g4KSh4KWH4KSf4KS+IOCkieCkquCkr+Cli+CklyDgpLjgpYDgpK7gpL7gpK7gpL4g4KSq4KWB4KSX4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaRcblxu4KSv4KSm4KS/IOCkpOCkquCkvuCkiOCkgeCksuClhyDgpKHgpYfgpJ/gpL7gpLLgpL7gpIgg4KSq4KWB4KSo4KSD4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqOClgSDgpK3gpK/gpYsg4KSt4KSo4KWHIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpIXgpLDgpY3gpJXgpYsg4KS44KSC4KSa4KS+4KSy4KSV4KSs4KS+4KSfIOCktuClgeCksuCljeCklSDgpLLgpJfgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+IuCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIMg4KS44KSV4KWN4KS34KSuIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiLgpIfgpKjgpY3gpJ/gpLDgpKjgpYfgpJ8g4KSc4KSh4KS+4KSoIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSc4KSh4KS/4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJHUFPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkluCli+CknOClgCDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iR1BTIOCkpuCljeCkteCkvuCksOCkviDgpLjgpY3gpKXgpL7gpKgg4KS44KWH4KSfIOCkl+CksOCkv+Ckj+CkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IuCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpLDgpYvgpKfgpLngpLDgpYIg4KS44KSV4KWN4KSw4KS/4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i4KS44KSs4KWIIOCkuOClguCkmuCkqOCkvuCkueCksOClgiDgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCknOCkvuCkqOCkleCkvuCksOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkuOCljeCkteCkpOCkgyDgpJjgpYHgpK7gpY3gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLLgpL7gpIgg4KSy4KWN4KSv4KS+4KSo4KWN4KSh4KS44KWN4KSV4KWH4KSqIOCkheCkteCkuOCljeCkpeCkvuCkruCkviDgpKzgpKjgpY3gpKYg4KSX4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSq4KWL4KSw4KWN4KSf4KWH4KSfIOCkheCkreCkv+CkruClguCkluCkruCkviDgpLLgpJUg4KSX4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLgpKbgpL/gpLXgpL7gpLjgpKrgpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i4KS54KS14KS+4KSH4KSc4KS54KS+4KScIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiLgpJrgpL7gpLDgpY3gpJwg4KS54KWB4KSB4KSm4KWILCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IuCkmuCkvuCksOCljeCknCDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWCKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkrOCkqOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i4KSa4KSu4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLgpLjgpY3gpLXgpKTgpIMg4KSY4KWB4KSu4KS+4KSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IuCkmOClgeCkruCljeCkqOClhyDgpLLgpJUg4KSX4KSw4KWH4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IuCkhuCkl+CkpCDgpLXgpL/gpKfgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLgpLjgpY3gpKXgpL7gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i4KS44KWN4KSl4KS+4KSoIOCkrOCkqOCljeCkpiDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i4KSu4KS/4KSh4KS/4KSv4KS+IOCkieCkquCkleCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4i4KSG4KSV4KS44KWN4KSu4KS/4KSVIOCkleCksiDgpK7gpL7gpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiLgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+IuCkuOCkruCkryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4i4KSu4KSy4KS+4KSIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9sYWJlbCIgbXNnaWQ9IjkxMzUzNDQ3MDQ4OTk1NDYwNDEiPiLgpLXgpL7gpIct4KSr4KS+4KSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IuCknOCli+CkoeCkv+Ckj+CkleCliyDgpJvgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4i4KSk4KS+4KSw4KSw4KS54KS/4KSkIOCkquCljeCksOCkpuCksOCljeCktuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuCkieCknOCljeCkr+CkvuCksuCkquCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLgpLjgpY3gpLXgpKTgpIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iNTg0ODQwMjEyNzQ1NTAyMTcxNCI+IuCkuOCknuCljeCknOCkvuCksiDgpIXgpKjgpYHgpJfgpK7gpL/gpKQg4KS54KWB4KSoIOCkuOCkleCljeCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfYnV0dG9uIiBtc2dpZD0iMTc1OTM4NzE4MTc2NjYwMzM2MSI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X2RpYWxvZ190aXRsZSIgbXNnaWQ9IjEyNzM3OTY5NjcwOTIwMjcyOTEiPiLgpLjgpJ7gpY3gpJzgpL7gpLIg4KSo4KS/4KSX4KSw4KS+4KSo4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfaW5mb19tZXNzYWdlIiBtc2dpZD0iNTQzMDMyMDUzOTU1NTM1ODQ1MiI+IuCkr+CliyDgpIngpKrgpJXgpLDgpKMgPHhsaWZmOmcgaWQ9Ik1BTkFHSU5HX0RPTUFJTiI+JXM8L3hsaWZmOmc+4KSm4KWN4KS14KS+4KSw4KS+IOCkquCljeCksOCkrOCkqOCljeCkp+Ckv+CkpCDgpJvgpaQgXG4gXG4g4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCljeCksOCktuCkvuCkuOCklSDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCksCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KS14KWH4KSsIOCkuOCkvuCkh+CknyDgpLLgpJfgpL7gpK/gpKQg4KS44KSe4KWN4KSc4KS+4KSyIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpIXgpKjgpYHgpJfgpK7gpKgg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkt+CkriDgpJvgpaQgXG4gXG4g4KSl4KSqIOCknOCkvuCkqOCkleCkvuCksOClgOCkleCliyDgpLLgpL7gpJfgpL8g4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCljeCksOCktuCkvuCkuOCkleCkuOCkgeCklyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSw4KS+4KSW4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZ19tZXNzYWdlIiBtc2dpZD0iMjAzMzA5MTY1NjEyOTk2MzY2OSI+IuCkj+CklSDgpKTgpYfgpLjgpY3gpLDgpYsg4KSq4KSV4KWN4KS3IOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpJ7gpY3gpJzgpL7gpLJcbiDgpJfgpKTgpL/gpLXgpL/gpKfgpL8sIOCkh+CkruClh+Cksiwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCksCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KS14KWH4KSs4KS44KS+4KSH4KSfIOCkheCkqOClgeCkl+CkruCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KS34KSuIOCkm+ClpCBcbiBcbiDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkuOCljeCkpeCkvuCkquCkv+CkpCDgpI/gpJUg4KS14KS/4KS24KWN4KS14KS44KSo4KWA4KSvIOCkquCljeCksOCkvuCkruCkvuCko+Ckv+CklSDgpKHgpYfgpJ/gpL7gpLLgpYcg4KS44KSu4KWN4KSt4KS1IOCkpOClgeCksuCljeCkr+CkvuCkh+CksOCkueClh+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTQ2OTU2OTc3Mzc3MTY2NzA5Ij4i4KS14KS/4KS24KWN4KS14KS44KSo4KWA4KSvIOCkquCljeCksOCkvuCkruCkvuCko+Ckv+CklSDgpKHgpYfgpJ/gpL4g4KSc4KS+4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNlZWUwMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAgVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4i4KS54KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4i4KS44KWC4KSa4KWA4KSs4KS+4KSfIOCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLgpJXgpYHgpKjgpYgg4KSo4KSv4KS+4KSBIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpJvgpYjgpKjgpKjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IuCkqOCkr+CkvuCkgSDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSW4KS+4KSw4KWH4KScIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IuClpyDgpK3gpLDgpJbgpLDgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQg4KSt4KSw4KSW4KSw4KWI4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiLgpJXgpYHgpKjgpYgg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4i4KSa4KSy4KS/4KSw4KS54KWH4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IuCkuOClguCkmuCkqOCkvuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+IuCkmuCkvuCksOCljeCknOCksCDgpJzgpKHgpL7gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkqOCljeCkr+ClguCkqCDgpLngpYHgpIHgpKbgpYgg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4g4KSs4KS+4KSB4KSV4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IlVTQiDgpJrgpL7gpLDgpY3gpJwg4KSX4KSw4KWN4KSoIOCkuOCkruCksOCljeCkpeCkv+CkpCDgpJvgpYjgpKjgpaRcbiDgpIbgpKrgpYLgpLDgpY3gpKTgpL8g4KSX4KSw4KS/4KSP4KSV4KWLIOCkmuCkvuCksOCljeCknOCksCDgpK7gpL7gpKTgpY3gpLAg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSq4KWN4KSw4KSv4KWL4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4i4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiLgpLXgpL7gpIct4KSr4KS+4KSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiLgpLngpLXgpL7gpIfgpJzgpLngpL7gpJwg4KSu4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IuCkuOCljeCkteCkpDrgpJjgpYHgpK7gpY3gpKjgpYcg4KS44KWN4KSV4KWN4KSw4KS/4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4i4KSu4KWN4KSv4KWB4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4i4KS44KWN4KS14KSk4KSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpJ/gpYfgpKXgpLAg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i4KSH4KSo4KSq4KWB4KSfIOCkteCkv+Ckp+Ckv+CkueCksOClgiDgpLjgpYfgpJ/gpIXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4i4KSr4KS/4KSc4KS/4KSV4KSyIOCkleCkv+CkrOCli+CksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IFVTQiDgpIngpKrgpJXgpLDgpKPgpLLgpL7gpIgg4KSq4KS54KWB4KSB4KSaIOCkpuCkv+CkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYcg4KS54KWLPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBVU0Ig4KSq4KS+4KSf4KSq4KWB4KSw4KWN4KSc4KS+4KSy4KS+4KSIIOCkquCkueClgeCkgeCkmiDgpKbgpL/gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWHIOCkueCliz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IuCkr+CliyBVU0Ig4KSJ4KSq4KSV4KSw4KSjIOCknOCli+CkoeCkv+Ckj+CkleCliyDgpKzgpYfgpLLgpL4gPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDgpJbgpYvgpLLgpY3gpKjgpYcg4KS54KWLPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4i4KSv4KWLIFVTQiDgpLjgpLngpL7gpK/gpJUg4KSc4KSh4KS+4KSoIOCkueClgeCkgeCkpuCkviA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOCkluCli+CksuCljeCkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i4KSv4KS4IFVTQiDgpIngpKrgpJXgpLDgpKPgpLjgpIHgpJcg4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpJXgpL7gpK4g4KSX4KSw4KWN4KSm4KWI4KSo4KWkIOCkr+CkuCDgpIngpKrgpJXgpLDgpKPgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+IOCkruCkviDgpKfgpYfgpLDgpYgg4KSc4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJVU0Ig4KS44KS54KSv4KWL4KSX4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiLgpKbgpYPgpLbgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLgpK/gpYsgVVNCIOCkieCkquCkleCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSs4KS+4KSfIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiLgpK/gpLggVVNCIOCkuOCkueCkvuCkr+CklSDgpLjgpL7gpK7gpL7gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiJVU0Ig4KSh4KS/4KSs4KSXIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+IuCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkleCliyBSU0Eg4KSV4KWB4KSe4KWN4KSc4KWAIOCklOCkguCksuCkvuCkm+CkvuCkqjpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IuCkr+CliyDgpJXgpK7gpY3gpKrgpY3gpK/gpYHgpJ/gpLDgpKzgpL7gpJ8g4KS44KSn4KWI4KSBIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSt4KSw4KWN4KSoIOCknOClgeCkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkreCksOCljeCkqCDgpKTgpKjgpY3gpJXgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKTgpL4g4KSc4KWB4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IuCknOCkrCDgpJXgpYHgpKjgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCkvuCkqOCliyDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkrOCkqOCkvuCkh+Ckj+CkleCliyDgpLngpYHgpKjgpY3gpJssIOCkpOCkrCDgpJzgpYHgpK4g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkmOCkoeClgOCkleCliyDgpKjgpJzgpL/gpJUg4KSm4KWH4KSW4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IuCkuOCljeCkleCljeCksOCkv+CkqOCkuOCknyDgpKzgpJrgpKQg4KSX4KSw4KWN4KSm4KWI4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSfIOCkrOCkmuCkpCDgpJfgpLDgpY3gpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IuCkuOCljeCkleCljeCksOCkv+CkqOCkuOCknyDgpKzgpJrgpKQg4KS54KWB4KSB4KSm4KWIIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSfIOCkleCljeCkr+CkvuCkquCljeCkmuCksCDgpJfgpLDgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCljeCkleCljeCksOCkv+CkqOCkuOCknyDgpLngpYfgpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLjgpJ8g4KSV4KWN4KSv4KS+4KSq4KWN4KSa4KSwIOCkl+CksOCljeCkqCDgpLjgpJXgpL/gpI/gpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IuCkuOCljeCkleCljeCksOCkv+CkqOCkuOCkn+CksuCkvuCkiCDgpKzgpJrgpKQg4KSX4KSw4KWN4KSoIOCkuOCkleClh+CkqOClpCDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSJ4KSq4KSv4KWL4KSX4KSu4KS+IOCkueClgeCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJVU0Ig4KSr4KS+4KSH4KSyIOCkuOCkvuCksOCljeCkqOClhyDgpLXgpL/gpJXgpLLgpY3gpKrgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLgpK7gpL/gpKHgpL/gpK/gpL4g4KSq4KWN4KSy4KWH4KSv4KSwKE1UUCngpJXgpYsg4KSw4KWC4KSq4KSu4KS+IOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL7gpJXgpYsg4KSw4KWC4KSq4KSu4KS+IOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gKFBUUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+IuCkruCljeCkr+CkvuCkleCkleCliyDgpLLgpL7gpJfgpL8g4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkq+CkvuCkh+CksiDgpJ/gpY3gpLDgpL7gpKjgpY3gpLjgpKvgpLAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCljeCkpeCkvuCkquCkqOCkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiLgpKrgpJvgpL7gpKHgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i4KSX4KWD4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i4KSu4KWH4KSo4KWBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i4KSt4KSw4KWN4KSW4KSw4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i4KSH4KSo4KSq4KWB4KSfIOCkteCkv+Ckp+CkvyDgpKzgpJ/gpKgg4KS44KWN4KS14KS/4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLgpK7gpL/gpLLgpL7gpIngpKjgpYcg4KSc4KWB4KSuIOCkrOCkn+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSy4KS+4KSIIOCkuOCkvuCkqOCli+CkrOCkvuCknyDgpKDgpYLgpLLgpYsg4KSq4KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iMjcwNzAyNzYzMzI0Mjk4MzM3MCI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpJzgpKHgpL7gpKgg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IuCkrOCljeCksuClgeCkn+ClgeCkpeCkuOCkgeCklyDgpLXgpL/gpJrgpY3gpJvgpYfgpKYg4KSX4KSw4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4i4KSV4KWB4KSo4KWIIOCkrOCljeCkr+CkvuCkn+CljeCksOCkvyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSP4KSJ4KSf4KS+IOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL/gpJXgpL4g4KSm4KWB4KSI4KS14KSf4KS+IOCkquCkn+CljeCkn+Ckv+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkv+CkleCkviDgpKTgpL/gpKjgpLXgpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkquClguCksOCljeCkoyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+IuCkq+Cli+CkqCDgpJvgpYjgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiLgpKvgpYvgpKgg4KSP4KSJ4KSf4KS+IOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdHdvX2JhcnMiIG1zZ2lkPSI4Mzg0OTA1MzgyODA0ODE1MjAxIj4i4KSr4KWL4KSoIOCkpuClgeCkiCDgpKrgpJ/gpY3gpJ/gpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3RocmVlX2JhcnMiIG1zZ2lkPSI4NTIxOTA0ODQzOTE5OTcxODg1Ij4i4KSr4KWL4KSoIOCkpOCkv+CkqCDgpKrgpJ/gpY3gpJ/gpL/gpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjQ3MTgzNDg2ODU4MDc1Nzg5OCI+IuCkq+Cli+CkqCDgpLjgpJngpY3gpJXgpYfgpKQg4KSt4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+IuCkoeClh+Ckn+CkviDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiLgpKHgpYfgpJ/gpL7gpJXgpYsg4KSP4KSJ4KSf4KS+IOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiLgpKHgpYfgpJ/gpL4g4KSm4KWB4KSIIOCkrOCkvuCkp+CkvuCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IuCkoeClh+Ckn+CkviDgpKTgpL/gpKgg4KSs4KS+4KSn4KS+4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3NpZ25hbF9mdWxsIiBtc2dpZD0iMjcwODM4NDYwODEyNDUxOTM2OSI+IuCkoeClh+Ckn+CkviDgpLjgpILgpJXgpYfgpKQg4KSq4KWC4KSw4KWN4KSj4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSs4KSo4KWN4KSm4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpLXgpL/gpJrgpY3gpJvgpYfgpKYg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4i4KS14KS+4KSH4KSr4KS+4KSHIOCkj+CklSDgpKrgpJ/gpY3gpJ/gpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4i4KS14KS+4KSH4KSr4KS+4KSHIOCkpuClgeCkiCDgpKrgpJ/gpY3gpJ/gpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSk4KS/4KSoIOCkrOCkvuCksOCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KS44KSZ4KWN4KSV4KWH4KSkIOCkreCksOCkv+Ckj+CkleCli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4i4KS14KS+4KSH4KSu4KWN4KSv4KS+4KS4IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWCDgpI/gpIngpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiLgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KSm4KWB4KSI4KS14KSf4KS+IOCkrOCkvuCksOCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiLgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KSk4KS/4KSo4KS14KSf4KS+IOCkrOCkvuCksOCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4i4KS14KS+4KSH4KSu4KWN4KSv4KS+4KSV4KWN4KS4IOCkuOCkmeCljeCkleClh+CkpCDgpK3gpLDgpL/gpI/gpJXgpL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiLgpLjgpJngpY3gpJXgpYfgpKQg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+IuCknOCkoeCkvuCkqCDgpKjgpJfgpLDgpL/gpI/gpJXgpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiLgpLbgpYLgpKjgpY3gpK8g4KSq4KSf4KWN4KSf4KS/4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IuCkj+CkieCkn+CkviDgpKzgpL7gpLDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IuCkpuClgeCkiCDgpKrgpJ/gpY3gpJ/gpL/gpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4i4KSk4KS/4KSo4KS14KSf4KS+IOCkquCkn+CljeCkn+Ckv+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4i4KS44KSZ4KWN4KSV4KWH4KSkIOCkquClguCksOCljeCkoyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4i4KSa4KS+4KSy4KWB4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29mZiIgbXNnaWQ9IjY0NzU1MDgxNTc3ODY4NTMxNTciPiLgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiLgpJzgpKHgpL7gpKgg4KSX4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i4KSw4KWL4KSu4KS/4KSZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiLgpLXgpL7gpIct4KSr4KS+4KSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4iU0lNIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUg4KSf4KS/4KSl4KSwIOCkl+CksOCljeCkpuCliOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+IuCkueCkteCkvuCkh+CknOCkueCkvuCknCDgpK7gpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpY3gpLDgpKTgpL/gpLbgpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IuCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IuCkuOClguCkmuCkqOCkvuCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLgpLjgpYLgpJrgpKjgpL4g4KSW4KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpL/gpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4iR1BTIOCkquCljeCksOCkvuCkquCljeCkpCDgpLngpYHgpIHgpKbgpYjgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IuCkn+Clh+CksuCkvyDgpJ/gpL7gpIfgpKrgpLDgpL7gpIfgpJ/gpLAg4KS44KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLgpKzgpJzgpY3gpKjgpYcg4KSV4KSu4KWN4KSq4KSoIOCkueClgeCkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLgpJjgpKjgpY3gpJ/gpYAg4KSu4KWM4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgpJbgpL7gpLDgpYfgpJwg4KSX4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IuCkuOClguCkmuCkqOCkviDgpJbgpL7gpLDgpYfgpJzgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfbm90aWZpY2F0aW9uX3NoYWRlIiBtc2dpZD0iNDY5MDI3NDg0NDQ0NzUwNDIwOCI+IuCkuOClguCkmuCkqOCkviDgpJXgpJXgpY3gpLfgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4i4KSm4KWN4KSw4KWB4KSkIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+4KWkIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+IuCkruCli+CkteCkvuCkh+CksiA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPuClpCA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz7gpaQgPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkvyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i4KS54KS14KS+4KSc4KS54KS+4KScIOCkruCli+CkoSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IuCkrOCljeCksuClgeCkn+ClgeCkpSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KS44KSZ4KWN4KSV4KWH4KSkIOCkmOCkqOCljeCkn+ClgCDgpLjgpYfgpJ8g4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cg4KSh4KWH4KSf4KS+IOCkheCkleCljeCkt+CkriDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyDgpKHgpYfgpJ/gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX21vYmlsZV90aXRsZSIgbXNnaWQ9IjEwNDYwNDcyNDg4NDQ4MjEyMDIiPiLgpK7gpYvgpKzgpL7gpIfgpLIg4KSh4KWH4KSf4KS+IOCkheCkleCljeCkt+CkriDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiLgpKHgpYfgpJ/gpL4g4KSF4KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+IuCkpOCkquCkvuCkiOCkgSDgpKjgpL/gpLDgpY3gpKbgpL/gpLfgpY3gpJ8g4KSh4KWH4KSf4KS+IOCkieCkquCkr+Cli+CklyDgpLjgpYDgpK7gpL7gpK7gpL4g4KSq4KWB4KSX4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaRcblxu4KSv4KSm4KS/IOCkpOCkquCkvuCkiOCkgeCksuClhyDgpKHgpYfgpJ/gpL7gpLLgpL7gpIgg4KSq4KWB4KSo4KSD4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqOClgSDgpK3gpK/gpYsg4KSt4KSo4KWHIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpIXgpLDgpY3gpJXgpYsg4KS44KSC4KSa4KS+4KSy4KSV4KSs4KS+4KSfIOCktuClgeCksuCljeCklSDgpLLgpJfgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+IuCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIMg4KS44KSV4KWN4KS34KSuIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiLgpIfgpKjgpY3gpJ/gpLDgpKjgpYfgpJ8g4KSc4KSh4KS+4KSoIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSc4KSh4KS/4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJHUFPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkluCli+CknOClgCDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iR1BTIOCkpuCljeCkteCkvuCksOCkviDgpLjgpY3gpKXgpL7gpKgg4KS44KWH4KSfIOCkl+CksOCkv+Ckj+CkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IuCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpLDgpYvgpKfgpLngpLDgpYIg4KS44KSV4KWN4KSw4KS/4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i4KS44KSs4KWIIOCkuOClguCkmuCkqOCkvuCkueCksOClgiDgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCknOCkvuCkqOCkleCkvuCksOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkuOCljeCkteCkpOCkgyDgpJjgpYHgpK7gpY3gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLLgpL7gpIgg4KSy4KWN4KSv4KS+4KSo4KWN4KSh4KS44KWN4KSV4KWH4KSqIOCkheCkteCkuOCljeCkpeCkvuCkruCkviDgpKzgpKjgpY3gpKYg4KSX4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSq4KWL4KSw4KWN4KSf4KWH4KSfIOCkheCkreCkv+CkruClguCkluCkruCkviDgpLLgpJUg4KSX4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLgpKbgpL/gpLXgpL7gpLjgpKrgpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i4KSJ4KSh4KS+4KSoIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiLgpJrgpL7gpLDgpY3gpJwg4KS54KWB4KSB4KSm4KWILCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IuCkmuCkvuCksOCljeCknCDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWCKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkrOCkqOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i4KSa4KSu4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLgpLjgpY3gpLXgpKTgpIMg4KSY4KWB4KSu4KS+4KSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IuCkmOClgeCkruCljeCkqOClhyDgpLLgpJUg4KSX4KSw4KWH4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IuCkhuCkl+CkpCDgpLXgpL/gpKfgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLgpLjgpY3gpKXgpL7gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i4KS44KWN4KSl4KS+4KSoIOCkrOCkqOCljeCkpiDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i4KSu4KS/4KSh4KS/4KSv4KS+IOCkieCkquCkleCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4i4KSG4KSV4KS44KWN4KSu4KS/4KSVIOCkleCksiDgpK7gpL7gpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiLgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+IuCkuOCkruCkryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4i4KSu4KSy4KS+4KSIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9sYWJlbCIgbXNnaWQ9IjkxMzUzNDQ3MDQ4OTk1NDYwNDEiPiLgpLXgpL7gpIct4KSr4KS+4KSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IuCknOCli+CkoeCkv+Ckj+CkleCliyDgpJvgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4i4KSk4KS+4KSw4KSw4KS54KS/4KSkIOCkquCljeCksOCkpuCksOCljeCktuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuCkieCknOCljeCkr+CkvuCksuCkquCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLgpLjgpY3gpLXgpKTgpIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i4KSv4KS54KS+4KSBIOCknOCkvuCkqOCkleCkvuCksOClgOCkueCksOClgiDgpKbgpYfgpJbgpL4g4KSq4KSw4KWN4KSb4KSo4KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i4KSk4KSyIOCkueClgeCkpOCljeCkpOCljeCkr+CkvuCkj+CksCDgpKTgpL/gpKjgpYDgpLngpLDgpYLgpLLgpL7gpIgg4KS44KSn4KWI4KSCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY1cbuCkquCljeCksOCko+CkvuCksuClgCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkquClgeCkqOCkgyDgpKTgpLIg4KS54KWB4KSk4KWN4KSk4KWN4KSv4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbAppbmRleCBhYjc3ODM5Li5hYzVmN2ZmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iQWx0aWpkIHRvZXN0YWFuIHZhbmFmIGRlemUgY29tcHV0ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab29tIG9tIHNjaGVybSB0ZSB2dWxsZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iUmVrIHVpdCB2LiBzY2hlcm12dWxsaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iQ29tcGF0aWJpbGl0ZWl0c3pvb20iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iV2FubmVlciBlZW4gYXBwIGlzIG9udHdvcnBlbiB2b29yIGVlbiBrbGVpbmVyIHNjaGVybSwgd29yZHQgbmFhc3QgZGUga2xvayBlZW4gem9vbWtub3Agd2VlcmdlZ2V2ZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IlNjcmVlbnNob3Qgb3BzbGFhbi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNjcmVlbnNob3Qgb3BzbGFhbi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iU2NyZWVuc2hvdCB3b3JkdCBvcGdlc2xhZ2VuLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJTdGFydHBhZ2luYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJSZWNlbnRlIGFwcHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJab2VrZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iQ2FtZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJLbm9wIHZvb3Igd2lqemlnZW4gaW52b2VybWV0aG9kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iS25vcCB2b29yIGNvbXBhdGliaWxpdGVpdHN6b29tLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iS2xlaW5lciBzY2hlcm0gdWl0em9vbWVuIG5hYXIgZ3JvdGVyIHNjaGVybS4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJBY2N1OiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IlZsaWVnbW9kdXM6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJMb2NhdGllIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm0gaXMgaW5nZXN0ZWxkIG9wIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctLzNHLWdlZ2V2ZW5zIHVpdGdlc2NoYWtlbGQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0Ry1nZWdldmVucyB1aXRnZXNjaGFrZWxkIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IlZlcmJvbmRlbiB2aWEgd2lmaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iWm9la2VuIG5hYXIgR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkxvY2F0aWUgYmVwYWFsZCBtZXQgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iTG9jYXRpZXZlcnpvZWtlbiBhY3RpZWYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJBbGxlIG1lbGRpbmdlbiB3aXNzZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkFwcC1pbmZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJTY2hlcm0gd29yZHQgYXV0b21hdGlzY2ggZ2Vyb3RlZXJkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iSGV0IHNjaGVybSBpcyBudSB2ZXJncmVuZGVsZCBpbiBsaWdnZW5kZSBzdGFuZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iSGV0IHNjaGVybSBpcyBudSB2ZXJncmVuZGVsZCBpbiBzdGFhbmRlIHN0YW5kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJEZXNzZXJ0c2hvd2Nhc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGFnZHJvb20iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iVmxpZWdtb2R1cyI8L3N0cmluZz4KQEAgLTE4MSw2ICsxODMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJIZWxkZXJoZWlkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdXRvbWF0aXNjaGUgcm90YXRpZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJSb3RhdGllIHZlcmdyZW5kZWxkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IlZlcmdyZW5kZWxkIGluIHN0YWFuZGUgc3RhbmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IlZlcmdyZW5kZWxkIGluIGxpZ2dlbmRlIHN0YW5kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ikludm9lcm1ldGhvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJMb2NhdGllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IkxvY2F0aWUgdWl0Ijwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOaWV0IHZlcmJvbmRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJHZWVuIG5ldHdlcmsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaWZpIHVpdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaWZpLXdlZXJnYXZlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iRHJhYWRsb3plIGRpc3BsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iU2NoZXJtIHN0dXJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkhlbGRlcmhlaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUT01BVElTQ0giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iTWVsZGluZ2VuIHdvcmRlbiBoaWVyIHdlZXJnZWdldmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iVSBrdW50IGRlIG1lbGRpbmdlbiBvcCBlbGsgZ2V3ZW5zdCBtb21lbnQgb3BlbmVuIGRvb3IgbWV0IHV3IHZpbmdlciBvbWxhYWcgdGUgdmVnZW4uXG5WZWVnIG5vZ21hYWxzIG1ldCB1dyB2aW5nZXIgb21sYWFnIG9tIGRlIHN5c3RlZW1iZXN0dXJpbmdzZWxlbWVudGVuIHdlZXIgdGUgZ2V2ZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iVmVlZyB2YW5hZiBkZSByYW5kIG9tIGJhbGsgd2VlciB0ZSBnZXZlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iVmVlZyB2YW5hZiBkZSByYW5kIHZhbiBoZXQgc2NoZXJtIG9tIGRlIHN5c3RlZW1iYWxrIHdlZXIgdGUgZ2V2ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iTW9kdXMgdm9vciBrbGV1cmludmVyc2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iTW9kdXMgdm9vciB2ZXJiZXRlcmQgY29udHJhc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZHVzIHZvb3Iga2xldXJjb3JyZWN0aWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ik5ldHdlcmsga2FuXG53b3JkZW4gZ2Vjb250cm9sZWVyZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iWm9la2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlZlZWcgb21ob29nIHZvb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlZlZWcgbmFhciBsaW5rcyB2b29yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCmluZGV4IGM5NGNmYzguLmIyNjI4ZTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJaYXdzemUgemV6d2FsYWogeiB0ZWdvIGtvbXB1dGVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IlBvd2nEmWtzeiwgYWJ5IHd5cGXFgm5pxIcgZWtyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iUm96Y2nEhWduaWosIGFieSB3eXBlxYJuacSHIGVrcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iUG93acSZa3N6ZW5pZSB3IHRyeWJpZSB6Z29kbm/Fm2NpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IkplxZtsaSBhcGxpa2FjamEgem9zdGHFgmEgcHJ6eXN0b3Nvd2FuYSBkbyBtbmllanN6ZWdvIGVrcmFudSwgb2JvayB6ZWdhcmEgem9zdGFuaWUgd3nFm3dpZXRsb255IGVsZW1lbnQgc3RlcnVqxIVjeSBwb3dpxJlrc3plbmllbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iWmFwaXN5d2FuaWUgenJ6dXR1IGVrcmFudS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlphcGlzeXdhbmllIHpyenV0dSBla3JhbnUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlphcGlzeXdhbmllIHpyenV0dSBla3JhbnUuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IkVrcmFuIGfFgsOzd255Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+Ik9zdGF0bmllIGFwbGlrYWNqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IlN6dWthaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJBcGFyYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlByenljaXNrIHByemXFgsSFY3phbmlhIG1ldG9keSB3cHJvd2FkemFuaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlByenljaXNrIHBvd2nEmWtzemVuaWEgbmEgcG90cnplYnkgemdvZG5vxZtjaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IlBvd2nEmWtzemEgbW5pZWpzenkgZWtyYW4gZG8gd2nEmWtzemVnby4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcmlhOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IlRyeWIgc2Ftb2xvdG93eTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+Ikxva2FsaXphY2phIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm0gdXN0YXdpb255IG5hIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iV3nFgsSFY3pvbm8gdHJhbnNtaXNqxJkgZGFueWNoIDJHLzNHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iV3nFgsSFY3pvbm8gdHJhbnNtaXNqxJkgZGFueWNoIDRHIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpOiBwb8WCxIVjem9ubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iV3lzenVraXdhbmllIHN5Z25hxYJ1IEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMb2thbGl6YWNqYSB6IEdQU2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJQcm/Fm2J5IG8gbG9rYWxpemFjasSZIHPEhSBha3R5d25lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iVXN1xYQgd3N6eXN0a2llIHBvd2lhZG9taWVuaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+Ik8gYXBsaWthY2ppIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJFa3JhbiB6b3N0YW5pZSBvYnLDs2NvbnkgYXV0b21hdHljem5pZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkVrcmFuIGplc3QgemFibG9rb3dhbnkgdyBvcmllbnRhY2ppIHBvemlvbWVqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJFa3JhbiBqZXN0IHphYmxva293YW55IHcgb3JpZW50YWNqaSBwaW9ub3dlai4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iUMOzxYJrYSB6ZSBzxYJvZGtvxZtjaWFtaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJXeWdhc3phY3ogZWtyYW51Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IlRyeWIgc2Ftb2xvdG93eSI8L3N0cmluZz4KQEAgLTE4MSw2ICsxODMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJKYXNub8WbxIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkF1dG9vYnJhY2FuaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iT2JyYWNhbmllIGplc3QgemFibG9rb3dhbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iWmFibG9rb3dhbm8gdyBvcmllbnRhY2ppIHBpb25vd2VqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiJaYWJsb2tvd2FubyB3IG9yaWVudGFjamkgcG96aW9tZWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iTWV0b2RhIHdwcm93YWR6YW5pYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Ikxva2FsaXphY2phIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+Ikxva2FsaXphY2phIHd5xYLEhWN6b25hIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJCcmFrIHBvxYLEhWN6ZW5pYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJCcmFrIHNpZWNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV3nFgsSFY3ogV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV3nFm3dpZXRsYWN6IFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iV3nFm3dpZXRsYWN6IGJlenByemV3b2Rvd3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iRWtyYW4gQ2FzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+Ikphc25vxZvEhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTUFUWUNaTkEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iVHV0YWogcG9rYXp1asSFIHNpxJkgcG93aWFkb21pZW5pYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+Ik1vxbxlc3ogamUgb3R3b3J6ecSHIHcgZG93b2xuZWogY2h3aWxpLCBwcnplc3V3YWrEhWMgdyBkw7PFgi5cblByemVzdcWEIGplc3pjemUgcmF6IHcgZMOzxYIsIGJ5IG90d29yennEhyB1c3Rhd2llbmlhIHN5c3RlbW93ZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJQcnplc3XFhCBwYWxjZW0gb2Qga3Jhd8SZZHppIGVrcmFudSwgYnkgb2RrcnnEhyBwYXNlayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iUHJ6ZXN1xYQgcGFsY2VtIG9kIGtyYXfEmWR6aSBla3JhbnUsIGJ5IG9ka3J5xIcgcGFzZWsgc3lzdGVtdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJUcnliIG9kd3LDs2NlbmlhIGtvbG9yw7N3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iVHJ5YiB6d2nEmWtzem9uZWdvIGtvbnRyYXN0dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iVHJ5YiBrb3Jla2NqaSBrb2xvcsOzdyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iU2llxIcgbW/FvGUgYnnEh1xubW9uaXRvcm93YW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTenVrYWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iUHJ6ZXN1xYQgdyBnw7NyxJk6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJQcnplc3XFhCB3IGxld286IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKaW5kZXggYzEwNjMyOS4uZmMyNWVhOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iUGVybWl0aXIgc2VtcHJlIGEgcGFydGlyIGRlc3RlIGNvbXB1dGFkb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab29tIHBhcmEgcHJlZW5jaGVyIG8gZWNyw6MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iRXN0aWNhciBwLiBjYWJlciBlbSBlYy4gaW50LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+Ilpvb20gZGUgY29tcGF0aWJpbGlkYWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IlNlbXByZSBxdWUgdW1hIGFwbGljYcOnw6NvIHRpdmVyIHNpZG8gY29uY2ViaWRhIHBhcmEgZWNyw6NzIG1haXMgcGVxdWVub3MsIGFwYXJlY2Vyw6EgdW0gY29udHJvbG8gZGUgem9vbSBqdW50byBhbyByZWzDs2dpby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iQSBndWFyZGFyIGNhcHR1cmEgZGUgZWNyw6MuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJBIGd1YXJkYXIgY2FwdHVyYSBkZSBlY3LDoy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iQSBndWFyZGFyIGNhcHR1cmEgZGUgZWNyw6MuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlDDoWdpbmEgaW5pY2lhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJBcGxpY2HDp8O1ZXMgcmVjZW50ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJQZXNxdWlzYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iQ8OibWFyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iQWx0ZXJuYXIgYm90w6NvIGRlIG3DqXRvZG8gZGUgaW50cm9kdcOnw6NvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJCb3TDo28gem9vbSBkZSBjb21wYXRpYmlsaWRhZGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tIG1lbm9yIHBhcmEgZWNyw6MgbWFpb3IuIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0ZXJpYSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Ik1vZG8gZGUgQXZpw6NvIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IkxvY2FsaXphw6fDo28gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybWUgZGVmaW5pZG8gcGFyYSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+Ik9zIGRhZG9zIDJHLTNHIGVzdMOjbyBkZXNhdGl2YWRvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+Ik9zIGRhZG9zIDRHIGVzdMOjbyBkZXNhdGl2YWRvcyI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBsaWdhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkEgcHJvY3VyYXIgR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkxvY2FsaXphw6fDo28gZGVmaW5pZGEgcG9yIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IlBlZGlkb3MgZGUgbG9jYWxpemHDp8OjbyBhdGl2b3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJMaW1wYXIgdG9kYXMgYXMgbm90aWZpY2HDp8O1ZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkluZm9ybWHDp8O1ZXMgZGEgYXBsaWNhw6fDo28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+Ik8gZWNyw6Mgc2Vyw6Egcm9kYWRvIGF1dG9tYXRpY2FtZW50ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+Ik8gZWNyw6MgZXN0w6EgYmxvcXVlYWRvIG5hIG9yaWVudGHDp8OjbyBob3Jpem9udGFsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJPIGVjcsOjIGVzdMOhIGJsb3F1ZWFkbyBuYSBvcmllbnRhw6fDo28gdmVydGljYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IlZpdHJpbmEgZGUgc29icmVtZXNhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2RvIGRlIGF2acOjbyI8L3N0cmluZz4KQEAgLTE4MSw2ICsxODMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJCcmlsaG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IlJvZGFyIGF1dG9tYXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IlJvdGHDp8OjbyBCbG9xdWVhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iQmxvcXVlYWRvIGVtIHJldHJhdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IkJsb3F1ZWFkbyBlbSBwYWlzYWdlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJNw6l0b2RvIGRlIEludHJvZHXDp8OjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IkxvY2FsaXphw6fDo28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iTG9jYWxpemHDp8OjbyBEZXNhdGl2YWRhIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOw6NvIExpZ2FkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJTZW0gUmVkZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIERlc2xpZ2FkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJWaXN1YWxpemHDp8OjbyBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IkRpc3BsYXkgU2VtIEZpb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iVHJhbnNtaXRpciBlY3LDoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkJyaWxobyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTcOBVElDTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJBcyBub3RpZmljYcOnw7VlcyBzw6NvIGFwcmVzZW50YWRhcyBhcXVpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iUG9kZSBhY2VkZXIgZW0gcXVhbHF1ZXIgYWx0dXJhLCBkZXNsaXphbmRvIHJhcGlkYW1lbnRlIHBhcmEgYmFpeG8gY29tIG8gZGVkby5cbkRlc2xpemUgbm92YW1lbnRlIHBhcmEgYmFpeG8gcGFyYSBhY2VkZXIgYW9zIGNvbnRyb2xvcyBkbyBzaXN0ZW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IkRlc2xpemUgZGEgZXh0cmVtaWRhZGUgZG8gZWNyw6MgcGFyYSByZXZlbGFyIGEgYmFycmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IkRlc2xpemUgZGEgZXh0cmVtaWRhZGUgZG8gZWNyw6MgcGFyYSByZXZlbGFyIGEgYmFycmEgZG8gc2lzdGVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2RvIGRlIGludmVyc8OjbyBkZSBjb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2RvIGRlIGNvbnRyYXN0ZSBtZWxob3JhZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZG8gZGUgY29ycmXDp8OjbyBkZSBjb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IkEgcmVkZSBwb2RlIHNlclxubW9uaXRvcml6YWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJQZXNxdWlzYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRGVzbGl6ZSBwYXJhIGNpbWEgcGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkRlc2xpemUgcGFyYSBhIGVzcXVlcmRhIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCmluZGV4IDkxZTdmMDIuLmUwNzdmYzYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJTZW1wcmUgcGVybWl0aXIgYSBwYXJ0aXIgZGVzdGUgY29tcHV0YWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb20gcC8gcHJlZW5jaGVyIGEgdGVsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJBbXBsaWFyIHAvIHByZWVuY2hlciB0ZWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iWm9vbSBlbSBtb2RvIGRlIGNvbXBhdGliaWxpZGFkZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJRdWFuZG8gdW0gYXBsaWNhdGl2byDDqSBkZXNlbnZvbHZpZG8gcGFyYSB1bWEgdGVsYSBtZW5vciwgdW0gY29udHJvbGUgZGUgem9vbSDDqSBleGliaWRvIHBlcnRvIGRvIHJlbMOzZ2lvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTYWx2YW5kbyBjYXB0dXJhIGRlIHRlbGEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJTYWx2YW5kbyBjYXB0dXJhIGRlIHRlbGEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IkEgY2FwdHVyYSBkZSB0ZWxhIGVzdMOhIHNlbmRvIHNhbHZhLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJQw6FnaW5hIGluaWNpYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW51Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iQXBsaWNhdGl2b3MgcmVjZW50ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJQZXNxdWlzYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iQ8OibWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iQWx0ZXJhciBib3TDo28gZG8gbcOpdG9kbyBkZSBlbnRyYWRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJCb3TDo28gZGUgem9vbSBkYSBjb21wYXRpYmlsaWRhZGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJBdW1lbnRhciBhIHRlbGEgY29tIHpvb20uIjwvc3RyaW5nPgpAQCAtMTU1LDYgKzE1NSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0ZXJpYSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Ik1vZG8gYXZpw6NvIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IkxvY2FsaXphw6fDo28gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybWUgZGVmaW5pZG8gcGFyYSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkRhZG9zIDJHIGUgM0cgZGVzYXRpdmFkb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJEYWRvcyA0RyBkZXNhdGl2YWRvcyI8L3N0cmluZz4KQEAgLTE2NiwxMiArMTY3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBjb25lY3RhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkJ1c2NhbmRvIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMb2NhbCBkZWZpbmlkbyBwb3IgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iU29saWNpdGHDp8O1ZXMgZGUgbG9jYWxpemHDp8OjbyBhdGl2YXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJMaW1wYXIgdG9kYXMgYXMgbm90aWZpY2HDp8O1ZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkluZm9ybWHDp8O1ZXMgZG8gYXBsaWNhdGl2byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iQSB0ZWxhIGdpcmFyw6EgYXV0b21hdGljYW1lbnRlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iQSB0ZWxhIGVzdMOhIGJsb3F1ZWFkYSBuYSBvcmllbnRhw6fDo28gcGFpc2FnZW0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkEgdGVsYSBlc3TDoSBibG9xdWVhZGEgbmEgb3JpZW50YcOnw6NvIHJldHJhdG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+Ik1vc3RydcOhcmlvIGRlIHNvYnJlbWVzYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTW9kbyBhdmnDo28iPC9zdHJpbmc+CkBAIC0xODMsMTEgKzE4NSwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJCcmlsaG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkdpcmFyIGF1dG9tYXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IlJvdGHDp8OjbyBibG9xdWVhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iQmxvcXVlYWRvIG5vIG1vZG8gcmV0cmF0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iQmxvcXVlYWRvIG5vIG1vZG8gcGFpc2FnZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iTcOpdG9kbyBkZSBlbnRyYWRhIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IkxvY2FsaXphw6fDo28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iTG9jYWxpemHDp8OjbyBkZXNhdGl2YWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+IkRpc3Bvc2l0aXZvIGRlIG3DrWRpYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4iU29tZW50ZSBjaGFtYWRhcyBkZSBlbWVyZ8OqbmNpYSI8L3N0cmluZz4KQEAgLTE5OCwxMiArMjAwLDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iTsOjbyBjb25lY3RhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iU2VtIHJlZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBkZXNsaWdhZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmkgRGlzcGxheSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IkRpc3BsYXkgc2VtIGZpbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJUcmFuc21pdGlyIHRlbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJCcmlsaG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJBcyBub3RpZmljYcOnw7VlcyBhcGFyZWNlbSBhcXVpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iQWNlc3NlIGEgcXVhbHF1ZXIgbW9tZW50byBkZXNsaXphbmRvIHBhcmEgYmFpeG8uXG5EZXNsaXplIHBhcmEgYmFpeG8gbm92YW1lbnRlIHBhcmEgYWNlc3NhciBvcyBjb250cm9sZXMgZG8gc2lzdGVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJEZXNsaXplIGEgYm9yZGEgZGEgdGVsYSBwYXJhIHZlciBhIGJhcnJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJEZXNsaXplIGEgcGFydGlyIGRhIGJvcmRhIGRhIHRlbGEgdmVyIGEgYmFycmEgZG8gc2lzdGVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2RvIGRlIGludmVyc8OjbyBkZSBjb3JlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+Ik1vZG8gZGUgY29udHJhc3RlIGFwcmltb3JhZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZG8gZGUgY29ycmXDp8OjbyBkZSBjb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IkEgcmVkZSBwb2RlIGVzdGFyXG5zb2IgbW9uaXRvcmHDp8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iUGVzcXVpc2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LCBkZXNsaXplIHBhcmEgY2ltYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJQYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiwgZGVzbGl6ZSBwYXJhIGEgZXNxdWVyZGEuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJtL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ybS9zdHJpbmdzLnhtbAppbmRleCBkNzc3MmVkLi5hZGY1NGJjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJtL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcm0vc3RyaW5ncy54bWwKQEAgLTkyLDEwICs5Miw2IEBACiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBjb21wYXRfbW9kZV9vZmYgKDQ0MzQ0Njc1NzI0NjEzMjc4OTgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgY29tcGF0X21vZGVfaGVscF9oZWFkZXIgKDc5Njk0OTM5ODkzOTc1Mjk5MTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgY29tcGF0X21vZGVfaGVscF9ib2R5ICg0OTQ2NzI2Nzc2MzU5MjcwMDQwKSAtLT4KLSAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciAoNzQwMzY1Mjg5NDA1NjY5MzUxNSkgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzY3JlZW5zaG90X3NhdmluZ190aXRsZSAoODI0MjI4MjE0NDUzNTU1NTY5NykgLS0+CkBAIC0xMjYsNiArMTIyLDEwIEBACiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3JlY2VudCAoODU3MTM1MDU5ODk4Nzk1Mjg4MykgLS0+CiAgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCAoMTEwMzg2NzU5NjMzMDI3MTg0OCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24gKDgwNjQ2NzE1ODI4MjAzNTgxNTIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiAoNTAzMjkyNjEzNDc0MDQ1NjQyNCkgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24gKDg0NjExMTUzMTg3NDIzNTA2OTkpIC0tPgpAQCAtMjc2LDYgKzI3Niw4IEBACiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCAoNTc0OTA1NDk3MTM0MTg4MjM0MCkgLS0+CiAgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uICg0NTc3MjgyMzI5ODY2ODEzMTAwKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0gKDM5NTk5MDg5NzI4OTcyOTU2NjApIC0tPgogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUgKDUyNTc4MzM4ODE2OTg2NDQ2ODcpIC0tPgpAQCAtMjk4LDYgKzMwMCw4IEBACiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQgKDQ2MTkyNzQyNDQxNDY0NDY0NjQpIC0tPgogICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUgKDI0MjcyOTAxNDYxMzgxNjkwMTQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwgKDUyMzU5Mzg1NTkyNDcxNjQ5MjUpIC0tPgogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlICgxMTYzNTQ3NzI5MDE1MzkwMjUwKSAtLT4KQEAgLTMwOCw3ICszMTIsNyBAQAogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0ICg1ODA5MzY3NTIxNjQ0MDEyMTE1KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGplbGx5X2JlYW5fZHJlYW1fbmFtZSAoNTk5MjAyNjU0MzYzNjgxNjc5MikgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZGVzc2VydF9jYXNlICgxMjk1MTYxNzc2MjIzOTU5MjIxKSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHN0YXJ0X2RyZWFtcyAoNzIxOTU3NTg1ODM0ODcxOTc5MCkgLS0+CiAgICAgPHNraXAgLz4KQEAgLTMzMiw2ICszMzYsMTAgQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCAoODA1ODY0NjQ0NzI0MjU2NTQ4NikgLS0+CiAgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwgKDE1NTMxMzEyOTAwNjYyMzA3NzUpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCAoNzIxNjI2NTY3MTI3NjA4NjU5MykgLS0+CisgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19pbWVfbGFiZWwgKDcwNzM0NjMwNjQzNjk0Njg0MjkpIC0tPgogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgpAQCAtMzU4LDIwICszNjYsMjQgQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsICg3NTU4Nzc4MTAwODQzODg1ODY0KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCAoNjg5MzU5Mjk2NDQ2MzYyNDMzMykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCAoMjM1NTI5ODc0MDc2NTczNjkxOCkgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCAoMzcyMTA3Njk5Mjc0MzkxMjkwKSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlICg4NTk5Njc0MDU3NjczNjA1MzY4KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCAoNTA2NDk4Mjc0Mzc4NDA3MTIxOCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzdGF0dXNfYmFyX2hlbHBfdGl0bGUgKDExOTkyMzc3NDQwODY0NjkyMTcpIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCAoMTY2NjM1ODc4NDI4MzAyMDc2MikgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzdGF0dXNfYmFyX2hlbHBfdGV4dCAoNzg3NDYwNzE1NTA1MjA3NjMyMykgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwgKDMzMTk1MDc1NTE2ODkxMDg2OTIpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UgKDkwNTA4Njk1NDg5NTEwNDQzNzEpIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsICg4NTM0NDM2ODk3NDU1ODQ3NzApIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyAoNzExNzY5Mjc5NTE2MzYyMDYyNikgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc3NsX2NhX2NlcnRfd2FybmluZyAoOTAwNTk1NDEwNjkwMjA1MzY0MSkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoICgzMDkxNTg3MjQ5Nzc2MDMzMTM5KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCAoNzE2OTAzMjQ3ODI1OTQ4NTE4MCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCAoNzIwNzQ3ODcxOTgwNTU2MjE2NSkgLS0+CiAgICAgPHNraXAgLz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKaW5kZXggNDJlMmQ0OC4uOWNmYjMyOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlBlcm1pdGXFo2kgw65udG90ZGVhdW5hIGRlIHBlIGFjZXN0IGNvbXB1dGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWm9vbSBwdC4gYSB1bXBsZSBlY3JhbnVsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IsOObnQuIHB0LiBhIHVtcGxlIGVjcmFudWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJab29tIGRlIGNvbXBhdGliaWxpdGF0ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJBdHVuY2kgY8OibmQgbyBhcGxpY2HFo2llIGEgZm9zdCBjb25jZXB1dMSDIHBlbnRydSB1biBlY3JhbiBtYWkgbWljLCBvIGNvbWFuZMSDIHBlbnRydSBtxINyaXJlL21pY8Wfb3JhcmUgdmEgYXDEg3JlYSBhbMSDdHVyaSBkZSBjZWFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTZSBzYWx2LiBjYXB0dXJhIGRlIGVjcmFuLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU2Ugc2FsdmVhesSDIGNhcHR1cmEgZGUgZWNyYW4uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IkNhcHR1cmEgZGUgZWNyYW4gZXN0ZSBzYWx2YXTEgy4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iRWNyYW51bCBkZSBwb3JuaXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVuaXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJBcGxpY2HFo2lpIHJlY2VudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJDxIN1dGHIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iQ2FtZXLEgyBmb3RvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJCdXRvbiBwZW50cnUgY29tdXRhcmVhIG1ldG9kZWkgZGUgaW50cm9kdWNlcmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IkJ1dG9uIHpvb20gcGVudHJ1IGNvbXBhdGliaWxpdGF0ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IkZhY2XFo2kgem9vbSBkZSBsYSBvIGltYWdpbmUgbWFpIG1pY8SDIGxhIHVuYSBtYWkgbWFyZS4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcmllIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTW9kIEF2aW9uIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IkxvY2HIm2llOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtxIMgc2V0YXTEgyBwZW50cnUgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEYXRlbGUgMkctM0cgYXUgZm9zdCBkZXphY3RpdmF0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkRhdGVsZSA0RyBhdSBmb3N0IGRlemFjdGl2YXRlIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIGNvbmVjdGF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJTZSBjYXV0xIMgR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkxvY2HFo2llIHNldGF0xIMgcHJpbiBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJTb2xpY2l0xINyacKgbG9jYcibaWUgYWN0aXZlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iyJh0ZXJnZcWjaSB0b2F0ZSBub3RpZmljxINyaWxlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvcm1hxaNpaSBkZXNwcmUgYXBsaWNhxaNpZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iRWNyYW51bCBzZSB2YSByb3RpIMOubiBtb2QgYXV0b21hdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkVjcmFudWwgZXN0ZSBibG9jYXQgw65uIG9yaWVudGFyZWEgZGUgdGlwIHBlaXNhai4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iRWNyYW51bCBlc3RlIGJsb2NhdCDDrm4gb3JpZW50YXJlYSBkZSB0aXAgcG9ydHJldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iVml0cmluYSBjdSBkdWxjaXVyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2QgQXZpb24iPC9zdHJpbmc+CkBAIC0xODEsMTEgKzE4MywxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJMdW1pbm96aXRhdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IlJvdGlyZSBhdXRvbWF0xIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUm90aXJlIGJsb2NhdMSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IkJsb2NhdCBsYSBhZmnImWFyZWEg4oCecG9ydHJldOKAnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iQmxvY2F0IGxhIGFmaciZYXJlYSDigJ5wZWlzYWrigJ0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iTWV0b2TEgyBkZSBpbnRyb2R1Y2VyZSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCAoNTAxMTMyNzA0ODc0ODc2MjI1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwgKDc0NjQ1NDQwODY1MDczMzE0NTkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJMb2NhyJtpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJMb2NhbGl6YXJlYSBlc3RlIGRlemFjdGl2YXTEgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJEaXNwb3ppdGl2IG1lZGlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJOdW1haSBhcGVsdXJpIGRlIHVyZ2VuxaPEgyI8L3N0cmluZz4KQEAgLTE5NiwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iTmVjb25lY3RhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJOaWNpbyByZcWjZWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBkZWNvbmVjdGF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IkFmacWfYWogV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJFY3JhbiB3aXJlbGVzcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJFY3JhbiBkZSBhZmnImWFyZSBhIHRyYW5zbWlzaXVuaWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJMdW1pbm96aXRhdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUT01BVCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJOb3RpZmljxINyaWxlIHNlIGFmacWfZWF6xIMgYWljaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IkFjY2VzYcWjaS1sZSBvcmljw6JuZCBnbGlzw6JuZCDDrm4gam9zLlxuR2xpc2HFo2kgw65uIGpvcyBkaW4gbm91IHBlbnRydSBjb21lbnppbGUgc2lzdGVtdWx1aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJHbGlzYcibaSBkaW5zcHJlIG1hcmdpbmVhIGVjcmFudWx1aSBwZW50cnUgYSBhZmnImWEgYmFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iR2xpc2HIm2kgZGluc3ByZSBtYXJnaW5lYSBlY3JhbnVsdWkgcGVudHJ1IGEgYWZpyJlhIGJhcmEgZGUgc2lzdGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+Ik1vZCBkZSBpbnZlcnNhcmUgYSBjdWxvcmlsb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2QgY29udHJhc3Qgw65tYnVuxIN0xIPIm2l0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJNb2QgZGUgY29yZWN0YXJlIGEgY3Vsb3JpbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJSZcibZWF1YSBwb2F0ZVxuZmkgbW9uaXRvcml6YXTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iQ8SDdXRhxaNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkdsaXNhxaNpIMOubiBzdXMgcGVudHJ1IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJHbGlzYcWjaSBzcHJlIHN0w6JuZ2EgcGVudHJ1IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCmluZGV4IDIzM2ZlZThhOC4uN2E4OWQyNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+ItCS0YHQtdCz0LTQsCDRgNCw0LfRgNC10YjQsNGC0Ywg0L7RgtC70LDQtNC60YMg0YEg0Y3RgtC+0LPQviDQutC+0LzQv9GM0Y7RgtC10YDQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+ItCf0L7QtNC+0LPQvdCw0YLRjCDQv9C+INGA0LDQt9C80LXRgNCw0Lwg0Y3QutGA0LDQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+ItCg0LDRgdGC0Y/QvdGD0YLRjCDQvdCwINCy0LXRgdGMINGN0LrRgNCw0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLQnNCw0YHRiNGC0LDQsSDQuCDRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiLQldGB0LvQuCDQv9GA0LjQu9C+0LbQtdC90LjQtSDRgNCw0YHRgdGH0LjRgtCw0L3QviDQvdCwINGN0LrRgNCw0L0g0LzQtdC90YzRiNC40YUg0YDQsNC30LzQtdGA0L7Qsiwg0YDRj9C00L7QvCDRgSDRh9Cw0YHQsNC80Lgg0L/QvtGP0LLRj9GC0YHRjyDRgdGA0LXQtNGB0YLQstCwINC80LDRgdGI0YLQsNCx0LjRgNC+0LLQsNC90LjRjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i0KHQvtGF0YDQsNC90LXQvdC40LUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLQodC+0YXRgNCw0L3QtdC90LjQtS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i0KHQvtGF0YDQsNC90LXQvdC40LUuLi4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i0JTQvtC80L7QuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+ItCc0LXQvdGOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i0J3QtdC00LDQstC90LjQtSDQv9GA0LjQu9C+0LbQtdC90LjRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+ItCf0L7QuNGB0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i0JrQsNC80LXRgNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLQmtC90L7Qv9C60LAg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNGPINGB0L/QvtGB0L7QsdCwINCy0LLQvtC00LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+ItCa0L3QvtC/0LrQsCDQvNCw0YHRiNGC0LDQsdC40YDQvtCy0LDQvdC40Y8gKNGA0LXQttC40Lwg0YHQvtCy0LzQtdGB0YLQuNC80L7RgdGC0LgpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLQo9C80LXQvdGM0YjQtdC90LjQtSDQuNC30L7QsdGA0LDQttC10L3QuNGPINC00LvRjyDRg9Cy0LXQu9C40YfQtdC90LjRjyDRgdCy0L7QsdC+0LTQvdC+0LPQviDQvNC10YHRgtCwINC90LAg0Y3QutGA0LDQvdC1LiI8L3N0cmluZz4KQEAgLTE1NSw2ICsxNTUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+ItCR0LDRgtCw0YDQtdGPOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i0KDQtdC20LjQvCDQv9C+0LvQtdGC0LAgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+ItCU0L7RgdGC0YPQvyDQuiDQs9C10L7QtNCw0L3QvdGL0LwgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+ItCR0YPQtNC40LvRjNC90LjQuiDRg9GB0YLQsNC90L7QstC70LXQvSDQvdCwIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiLQn9C10YDQtdC00LDRh9CwINC00LDQvdC90YvRhSDQv9C+INC60LDQvdCw0LvQsNC8IDJHINC4IDNHINC+0YLQutC70Y7Rh9C10L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+ItCf0LXRgNC10LTQsNGH0LAg0LTQsNC90L3Ri9GFINC/0L4g0LrQsNC90LDQu9GDIDRHINC+0YLQutC70Y7Rh9C10L3QsCI8L3N0cmluZz4KQEAgLTE2NiwxMiArMTY3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSDQv9C+0LTQutC70Y7Rh9C10L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i0J/QvtC40YHQuiBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i0JrQvtC+0YDQtNC40L3QsNGC0Ysg0L/QviBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLQldGB0YLRjCDQsNC60YLQuNCy0L3Ri9C1INC30LDQv9GA0L7RgdGLINC90LAg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i0KPQtNCw0LvQuNGC0Ywg0LLRgdC1INGD0LLQtdC00L7QvNC70LXQvdC40Y8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i0J4g0L/RgNC40LvQvtC20LXQvdC40LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+ItCt0LrRgNCw0L0g0LHRg9C00LXRgiDQv9C+0LLQvtGA0LDRh9C40LLQsNGC0YzRgdGPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i0JLRi9Cx0YDQsNC90LAg0YLQvtC70YzQutC+INCw0LvRjNCx0L7QvNC90LDRjyDQvtGA0LjQtdC90YLQsNGG0LjRjyDRjdC60YDQsNC90LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+ItCS0YvQsdGA0LDQvdCwINGC0L7Qu9GM0LrQviDQutC90LjQttC90LDRjyDQvtGA0LjQtdC90YLQsNGG0LjRjyDRjdC60YDQsNC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+ItCa0L7RgNC+0LHQutCwINGB0L4g0YHQu9Cw0LTQvtGB0YLRj9C80LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i0JfQsNGB0YLQsNCy0LrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLQoNC10LbQuNC8INC/0L7Qu9C10YLQsCI8L3N0cmluZz4KQEAgLTE4NSwxMSArMTg3LDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+ItCv0YDQutC+0YHRgtGMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLQkNCy0YLQvtC/0L7QstC+0YDQvtGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+ItCQ0LLRgtC+0L/QvtCy0L7RgNC+0YIg0LLRi9C60LsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+ItCi0L7Qu9GM0LrQviDQstC10YDRgtC40LrQsNC70YzQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiLQotC+0LvRjNC60L4g0LPQvtGA0LjQt9C+0L3RgtCw0LvRjNC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i0KHQv9C+0YHQvtCxINCy0LLQvtC00LAiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsICg3NDY0NTQ0MDg2NTA3MzMxNDU5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i0J/QtdGA0LXQtNCw0YfQsCDQs9C10L7QtNCw0L3QvdGL0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i0JzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtSDQstGL0LrQuy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i0KDQtdC20LjQvCDQvNC10LTQuNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLQrdC60YHRgtGALiDQstGL0LfQvtCyIjwvc3RyaW5nPgpAQCAtMjAwLDEyICsyMDIsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLQndC10YIg0YHQvtC10LTQuNC90LXQvdC40Y8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i0J3QtdGCINGB0LXRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg0LLRi9C60LsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+ItCf0YDQvtC10LrRgtC+0YAgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJXaS1GaS3QvNC+0L3QuNGC0L7RgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJXaS1GaS3QvNC+0L3QuNGC0L7RgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+ItCv0YDQutC+0YHRgtGMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+ItCQ0JLQotCe0J3QkNCh0KLQoNCe0JnQmtCQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+ItCt0YLQviDQv9Cw0L3QtdC70Ywg0YPQstC10LTQvtC80LvQtdC90LjQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+ItCV0LUg0LzQvtC20L3QviDQvtGC0LrRgNGL0YLRjCwg0L/RgNC+0LvQuNGB0YLQvdGD0LIg0Y3QutGA0LDQvSDQstC90LjQty5cbtCn0YLQvtCx0Ysg0L7RgtC60YDRi9GC0Ywg0L3QsNGB0YLRgNC+0LnQutC4LCDQv9GA0L7QstC10LTQuNGC0LUg0L/QsNC70YzRhtC10Lwg0LLQvdC40Lcg0LXRidGRINGA0LDQty4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLQp9GC0L7QsdGLINC+0YLQutGA0YvRgtGMINC/0LDQvdC10LvRjCwg0L/RgNC+0LLQtdC00LjRgtC1INC/0LDQu9GM0YbQtdC8INC+0YIg0LrRgNCw0Y8g0Log0YbQtdC90YLRgNGDINGN0LrRgNCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i0KfRgtC+0LHRiyDQvtGC0LrRgNGL0YLRjCDQv9Cw0L3QtdC70Ywg0L3QsNCy0LjQs9Cw0YbQuNC4LCDQv9GA0L7QstC10LTQuNGC0LUg0L/QsNC70YzRhtC10Lwg0L7RgiDQutGA0LDRjyDQuiDRhtC10L3RgtGA0YMg0Y3QutGA0LDQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+ItCY0L3QstC10YDRgdC40Y8g0YbQstC10YLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+ItCa0L7QvdGC0YDQsNGB0YLQvdC+0YHRgtGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLQmtC+0YDRgNC10LrRhtC40Y8g0YbQstC10YLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i0JTQtdC50YHRgtCy0LjRjyDQsiDRgdC10YLQuFxu0LzQvtCz0YPRgiDQvtGC0YHQu9C10LbQuNCy0LDRgtGM0YHRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i0J/QvtC40YHQuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLQn9GA0L7QstC10LTQuNGC0LUg0LLQstC10YDRhSwg0YfRgtC+0LHRiyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i0J/RgNC+0LLQtdC00LjRgtC1INCy0LvQtdCy0L4sINGH0YLQvtCx0YsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YWJhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNpLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IuC2reC3kuC2u+C2uiDgtq/gt5DgtrHgt4og4Lat4LeS4La74LeD4LeKIOC2r+C3kuC3geC3j+C2seC2reC3kuC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2ktckxLLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNpLXJMSy1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YWJhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNpLXJMSy1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiLgtq3gt5Lgtrvgtrog4Lav4LeQ4Lax4LeKIOC2reC3kuC2u+C3g+C3iiDgtq/gt5Lgt4Hgt4/gtrHgtq3gt5Lgtrog4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YWNjZDEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIwNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+IuC2tOC2r+C3iuC2sOC2reC3kiBVSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiLgt4Tgt5Lgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4i4La94LeQ4La64LeS4LeD4LeK4Lat4LeU4LeA4LeZ4Lax4LeKIOC2ieC3gOC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4i4La64LeZ4Lav4LeU4La44LeKIOC2reC3nOC2u+C2reC3lOC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4i4La44LeR4LatIOC2i+C2tOC3j+C2guC2nCDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IuC2uOC3keC2rSDgtrrgt5ngtq/gt5Tgtrjgt4og4LaJ4LeA4Lat4La94Lax4LeK4LaxIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4i4La44LeR4LatIOC2uuC3meC2r+C3lOC2uOC3iiAxIOC2muC3iiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTA0MDc4NDM1OTc5NDg5MDc0NCI+IuC2uOC3keC2rSDgtrrgt5ngtq/gt5Tgtrjgt4ogJWQg4Laa4LeKIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+IuC2r+C3kOC2seC2pyDgtrTgt4Dgtq3gt5LgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4i4LaF4La74Led4La04Laa4La64LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiLgtrbgt5Dgtqfgtrvgt5Lgtrog4LaF4Lap4LeUIOC3gOC3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4g4Laa4LeKIOC2ieC2reC3kuC2u+C3kuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0Ig4LaG4La74Led4La04Lar4La6IOC3g+C3hOC2uiDgtrHgt5zgtq/gtprgt4rgt4Dgtrrgt5IuXG7gt4PgtrTgtrrgtrEg4La94LavIOC2huC2u+C3neC2tOC2muC2uiDgtrTgtrjgtqvgtprgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4i4La24LeQ4Lan4La74LeSIOC2t+C3j+C3gOC3kuC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+IuC3g+C3kOC2muC3g+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+IuC2heC3hOC3g+C3iuC2uuC3j+C2seC3jyDgtobgtprgt4/gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4i4LeD4LeK4LeA4La64LaC4Laa4LeK4oCN4La74LeT4La64LeALeC2t+C3iuKAjeC2u+C2uOC2q+C2uiDgt4DgtrEg4Lat4LeS4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4i4Lax4LeS4LeB4LeK4LeB4La24LeK4LavIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4i4LeD4LeK4LeA4La64LaC4Laa4LeK4oCN4La74LeT4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtqfgt5ngtq/gtrvgt4og4Laa4La74LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uCDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiLgtrfgt57gtq3gt5Lgtpog4La64Lat4LeU4La74LeUIOC2tOC3lOC3gOC2u+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiJVU0Ig4LaL4La04LeP4LaC4Lac4La6IOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgtprgt5Lgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3gOC3j+C2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IlVTQiDgtrjgt5ngt4Dgtr3gtrgg4La04LeK4oCN4La74LeA4Lea4LeBIOC2muC3kuC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeA4LeP4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i4La44LeZ4La4IFVTQiDgtovgtrTgt4/gtoLgtpzgtrog4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kuC2pyA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOC3gOC3kuC3gOC3mOC2rSDgtprgtrvgtrHgt4rgtrHgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLgtrjgt5ngtrggVVNCIOC2uOC3meC3gOC2veC2uOC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeTIOC2h+C2reC3kiDgt4Dgt5LgtqcgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5Lgt4Dgt5jgtq0g4Laa4La74Lax4LeK4Lax4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IuC2uOC3meC2uCBVU0Ig4La44LeZ4LeA4La94La4IOC3g+C2uOC2nCDgtprgt4rigI3gtrvgt5Lgtrrgt48g4Laa4La74LaxIOC3g+C3iuC2ruC3j+C2tOC3kuC2rSDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4Lec4La44LeQ4LatLiA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiDgt4Dgtr3gt5LgtrHgt4og4La44LeZ4La4IOC2uOC3meC3gOC2veC2uCDgtpzgt5DgtrEg4Lat4LeAIOC2r+C3kOC2seC2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCIOC2uOC3meC3gOC2veC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4i4La04LeZ4Lax4LeU4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4i4La44LeZ4La4IFVTQiDgtovgtrTgt4/gtoLgtpzgtrog4LeD4Laz4LeE4LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i4La44LeaIFVTQiDgtrjgt5ngt4Dgtr3gtrgg4LeD4Laz4LeE4LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4iVVNCIOC2seC3kuC2r+C3nOC3g+C3iuC2muC2u+C2q+C2uuC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeA4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiLgtrjgt5ngtrgg4La04La74LeS4Lac4Lar4Laa4La64LeaIFJTQSDgtrrgtq3gt5Tgtrvgt5Qg4LaH4Laf4LeS4La94LeSIOC3g+C2p+C3hOC2sSDgt4DgtrHgt4rgtrHgt5o6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLgt4Pgt5Dgtrgg4LeA4LeS4Lan4La4IOC2uOC3meC2uCDgtrTgtrvgt5Lgtpzgtqvgtprgtrrgt5ngtrHgt4og4LaJ4LapIOC2veC2tuC3jyDgtq/gt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLgtq3gt5Lgtrvgtrog4La04LeS4La74LeA4LeT4La44LanIOC3gOC3kuC3geC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i4Lat4LeS4La74La6IOC2tOC3kuC2u+C3gOC3k+C2uOC2pyDgtoXgtq/gt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i4Lat4LeS4La7IOC2u+C3lOC3gCDgt4Pgt5Tgtrvgtprgt5Lgtrjgt5LgtrHgt4rigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLgtq3gt5Lgtrsg4La74LeU4LeAIOC3g+C3lOC2u+C3kOC2muC3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5PigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IuC2reC3kuC2uyDgtrvgt5Tgt4Ag4LeD4LeU4La74LeQ4Laa4LeZ4La44LeS4Lax4LeKIOC2tOC3gOC2reC3ky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IuC2reC3kuC2uyDgtrvgt5Tgt4Ag4Lac4LeK4oCN4La74LeE4Lar4La6IOC2muC2u+C2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IuC2lOC2tuC2nOC3miDgtq3gt5Lgtrsg4La74LeU4LeAIOC2tuC3kOC2veC3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RpdGxlIiBtc2dpZD0iNzA1NzgxMTE2NzQ2OTIyNzcxIj4i4Lat4LeS4La7IOC2u+C3lOC3gCDgtpzgt4rigI3gtrvgt4Tgtqvgtrog4Laa4LeS4La74LeT4La44LanIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiLgtq3gt5Lgtrsg4La74LeU4LeAIOC3g+C3lOC2u+C3kOC2muC3k+C2uOC2pyDgtrHgt5zgt4Tgt5Dgtprgt5Ig4LeA4LeS4La6LiDgtobgtqDgtrrgtrHgtrog4La34LeP4LeA4LeS4Lat4LeP4LeA4LeaIOC2reC3kuC2tuC3meC2seC3gOC3jyDgt4Dgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IlVTQiDgtpzgt5zgtrHgt5Qg4LeE4LeU4LeA4La44LeP4La74LeUIOC3gOC3kuC2muC2veC3iuC2tCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IuC2uOC2sOC3iuKAjeC2uiDgtrDgt4/gt4Dgtprgtrrgtprgt4ogKE1UUCkg4La94LeZ4LeDIOC3g+C3gOC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLgtprgt5Dgtrjgtrvgt4/gt4Dgtprgt4ogKFBUUCkg4La94LeZ4LeDIOC3g+C3gOC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+Ik1hYyDgt4PgtrPgt4Tgt48gQW5kcm9pZCDgtpzgt5zgtrHgt5Qg4LeE4LeU4LeA4La44LeP4La74LeUIOC2uuC3meC2r+C3lOC2uCDgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4i4LaG4La04LeD4LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IuC2uOC3lOC2veC3iiDgtrTgt5Lgtqfgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLgtrjgt5ngtrHgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLgtrjgt5Hgtq0g4La64LeZ4Lav4LeU4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La44La6IOC2uOC3j+C2u+C3lCDgtprgt5Lgtrvgt5Pgtrjgt5og4La24Lec4Lat4LeK4Lat4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLgtpzgt5Dgt4XgtrTgt5ngtrEg4LeA4LeS4LeB4LeP4La94LaxIOC2tuC3nOC2reC3iuC2reC2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IuC3gOC3kuC3geC3j+C2vSDgtq3gt5Lgtrvgtrog4LeA4LeZ4LatIOC2muC3lOC2qeC3j+C3gCDgt4Dgt5Lgt4Hgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9Ijc0MTY2NDg2Njk5NzY4NzAxNzUiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4i4La24LeQ4Lan4La74LeS4La6IOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiLgtrbgt5Dgtqfgtrvgt5Lgtrog4Lat4LeT4La74LeUIOC2keC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdHdvX2JhcnMiIG1zZ2lkPSI4NTAwNjUwNDM4NzM1MDA5OTczIj4i4La24LeQ4Lan4La74LeS4La6IOC2reC3k+C2u+C3lCDgtq/gt5ngtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4i4La24LeQ4Lan4La74LeS4La6IOC2reC3k+C2u+C3lCDgtq3gt5TgtrHgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4i4La24LeQ4Lan4La74LeS4La6IOC2tOC3kuC2u+C3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19waG9uZSIgbXNnaWQ9IjQ4OTQ3MDg5MzcwNTI2MTEyODEiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrrgtprgt4og4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtq3gt5Pgtrvgt5Qg4LaR4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdHdvX2JhcnMiIG1zZ2lkPSI4Mzg0OTA1MzgyODA0ODE1MjAxIj4i4Lav4LeU4La74Laa4Lau4Lax4La6IOC2reC3k+C2u+C3lCDgtq/gt5ngtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90aHJlZV9iYXJzIiBtc2dpZD0iODUyMTkwNDg0MzkxOTk3MTg4NSI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtq3gt5Pgtrvgt5Qg4Lat4LeU4Lax4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4i4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC3g+C2guC2peC3j+C3gCDgtrTgt5Lgtrvgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiLgtq/gtq3gt4rgtq0g4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9vbmVfYmFyIiBtc2dpZD0iMTQxNTYyNTgzMzIzODI3MzYyOCI+IuC2r+C2reC3iuC2rSDgtq3gt5Pgtrvgt5Qg4LaR4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiLgtq/gtq3gt4rgtq0g4Lat4LeT4La74LeUIDIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i4Lav4Lat4LeK4LatIOC2reC3k+C2u+C3lCAzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiLgtq/gtq3gt4rgtq0g4LeD4LaC4Lal4LeP4LeAIOC2tOC3kuC2u+C3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiJXaWZpIOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2lmaSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La7IOC2seC3nOC2uOC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaWZpIOC2reC3k+C2u+C3lCDgtpHgtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IldpZmkg4Lat4LeT4La74LeUIOC2r+C3meC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiJXaUZpIOC2reC3k+C2u+C3lCDgtq3gt5TgtrHgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IldpZmkg4LeD4LaC4Lal4LeP4LeAIOC2tOC3kuC2u+C3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiJXaU1BWCDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIOC2reC3k+C2u+C3lCDgtpHgtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWCDgtq3gt5Pgtrvgt5Qg4Lav4LeZ4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWCDgtq3gt5Pgtrvgt5Qg4Lat4LeU4Lax4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4iV2lNQVgg4LeD4LaC4Lal4LeP4LeAIOC2tOC3kuC2u+C3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaWduYWwiIG1zZ2lkPSI3MDY0NjQ1MzIwNzgyNTg1MTY3Ij4i4LeD4LaC4Lal4LePIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4i4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kyDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4i4Lat4LeT4La74LeUIOC3geC3lOC2seC3iuKAjeC2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4i4Lat4LeT4La74LeUIOC2keC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IuC2reC3k+C2u+C3lCDgtq/gt5ngtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IuC2reC3k+C2u+C3lCDgtq3gt5TgtrHgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiLgt4PgtoLgtqXgt4/gt4Ag4La04LeS4La74LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4i4LeD4Laa4LeK4oCN4La74LeT4La64La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4i4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiLgtrvgt53gtrjgt5LgtoIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IkVkZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4iU0lNIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC2p+C3meC2r+C2u+C3kuC2seC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiLgtoXgt4Tgt4Pgt4rgtrrgt4/gtrHgt48g4LaG4Laa4LeP4La74La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiLgtrbgt5Dgtqfgtrvgt5Ig4La04LeK4oCN4La74Lat4LeS4LeB4Lat4La6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4i4La04Lav4LeK4Law4Lat4LeSIOC3g+C3kOC2muC3g+C3k+C2uOC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlbW92ZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIzNjAzMDk5NTE0OTAyMTgyMzUwIj4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La4IOC3hOC3kuC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMg4LeD4La24La9IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IkdQUyDgtr3gtrbgt48g4Lac4Lax4LeS4La44LeS4Lax4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4iVGVsZVR5cGV3cml0ZXIg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLgt4Tgtqwg4Lax4Laf4Lax4La6IOC2muC2uOC3iuC2tOC2seC2uiDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuC3hOC2rCDgtrHgtp/gtrHgtrog4Lax4LeS4LeB4LeK4LeB4La24LeK4Lav4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4LaF4LeD4LeKIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La4IOC2seC3kuC3guC3iuC2tOC3iuKAjeC2u+C2t+C3jyDgtprgtrvgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4LaG4LeA4La74Lar4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiLgtprgt4rgt4Lgtqvgt5Lgtpog4LeD4LeQ4Laa4LeD4LeT4La44LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLgtrjgt5Hgtq0g4Laa4LeP4La94LeT4LaxIOC2uuC3meC2r+C3lOC2uOC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4i4La04La74LeS4LeB4LeT4La94Laa4La64LePIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiLgtqLgtoLgtpzgtrggPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLgtrbgt5Dgtqfgtrvgt5LgtrogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLgtoXgt4Tgt4Pgt4rgtrrgt4/gtrHgt48g4LaG4Laa4LeP4La74La6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+Ijx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC3g+C3k+C2seC3lOC3gCDgt4Pgtprgt4Pgt4og4Laa4La7IOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyDgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyDgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4i4Lai4LaC4Lac4La4IOC2r+C2reC3iuC2rSDgtoXgtrbgtr0g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IuC2r+C2reC3iuC2rSDgtoXgtrbgtr0g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+IuC2lOC2tiDgtrHgt5Lgtrrgtrjgt5Lgtq0g4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2rSDgt4Pgt5Pgtrjgt4/gt4Dgtqcg4LeF4Laf4LePIOC3gOC3kyDgtofgtq0uXG5cbuC2lOC2tiDgtq/gtq3gt4rgtq0g4Lax4LeQ4LeA4LatIOC3g+C2tuC2vSDgtprgt4Xgt4Tgt5zgtq3gt4og4LeA4LeP4LeE4Laa4La64LePIOC2lOC2tuC2nOC3meC2seC3iiDgtofgtq3gt5Dgtrjgt4og4LeA4LeS4LanIOC2heC2uiDgtprgtrvgtpzgtq0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiLgtrHgt5Dgt4Dgtq0g4Lav4Lat4LeK4LatIOC3g+C2tuC2vSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4i4LaF4Lax4LeK4Lat4La74LeK4Lai4LeP4La9IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC2muC3iiDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQUyDgt4PgtrPgt4Tgt48g4LeD4Lec4La64La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkdQUyDgtrjgtp/gt5LgtrHgt4og4LeD4LeK4Lau4LeP4Lax4La6IOC3g+C2muC3g+C3jyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLgtrTgt5Lgt4Tgt5Lgtqfgt5Pgtrjgt4og4LaJ4La94LeK4La94LeT4La44LeKIOC3g+C2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IuC3g+C3kuC2uuC2veC3lCDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4LeE4LeS4LeD4LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i4La64LeZ4Lav4LeU4La44LeKIOC2reC3nOC2u+C2reC3lOC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i4Lat4LeS4La74La6IOC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uuC3gCDgtprgtrvgtprgt5Dgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLgtq3gt5Lgtrvgtrog4Lat4LeS4La74LeD4LeKIOC2r+C3kuC3geC3j+C2seC2reC3kuC2uuC3meC3hOC3kiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i4Lat4LeS4La74La6IOC3g+C3kuC2u+C3g+C3iiDgtq/gt5Lgt4Hgt4/gtrHgtq3gt5Lgtrog4Lat4LeU4LeFIOC2heC2nOC3lOC3heC3lCDgt4Dgt5Dgtqfgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLgtq/gt4Dgtr3gt4og4LeE4LeT4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4i4LaK4Lat4La7IOC2seC3meC2p+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i4LaF4LeE4LeD4LeK4La64LeP4Lax4LePIOC2huC2muC3j+C2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiLgtobgtrvgt53gtrTgtqvgtrog4LeA4LeZ4La44LeS4Lax4LeKLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IuC2heC2u+C3neC2tOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4ogKOC2i+C2tOC3j+C2guC2nCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LaF4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLgtq/gt5PgtrTgt4rgtq3gt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uiDgtprgtrvgtprgt5Dgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i4La34LeK4oCN4La74La44Lar4La6IOC2heC2nOC3lOC3heC3lCDgtq/gtrjgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IuC2huC2r+C3j+C2sSDgtprgt4rigI3gtrvgtrjgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLgt4Pgt4rgtq7gt4/gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i4LeD4LeK4Lau4LeP4Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLgtrjgt4/gtrDgt4rigI3gtrog4LaL4La04LeP4LaC4Lac4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La44LeKIOC2tOC2uOC2q+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+IuC3g+C3kOC2muC3g+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4i4LeA4Lea4La94LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl9sYWJlbCIgbXNnaWQ9IjUyMzg5OTU2MzIxMzA4OTc4NDAiPiLgtrjgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Mg4Lax4Lec4La44LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IuC2ouC3j+C2veC2uuC2muC3iiDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmkg4LeD4LaC4Lav4La74LeK4LeB4Laa4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4i4Lax4Lec4La74LeQ4LeE4LeQ4Lax4LeKIOC3g+C2guC2r+C2u+C3iuC3geC2muC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuC2r+C3k+C2tOC3iuC2reC3kuC2uOC2reC3iiDgtrbgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i4LeD4LeK4LeA4La64LaC4Laa4LeK4oCN4La74LeT4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjU4NDg0MDIxMjc0NTUwMjE3MTQiPiLgtofgtq3gt5Dgtrjgt4og4LeA4LeS4LanIOC2ouC3j+C2veC2uiDgtrHgt5Lgtrvgt5Pgtprgt4rgt4Lgtqvgtrog4LeA4LeS4La6IOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfYnV0dG9uIiBtc2dpZD0iMTc1OTM4NzE4MTc2NjYwMzM2MSI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X2RpYWxvZ190aXRsZSIgbXNnaWQ9IjEyNzM3OTY5NjcwOTIwMjcyOTEiPiLgtqLgt4/gtr0g4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X2luZm9fbWVzc2FnZSIgbXNnaWQ9IjU0MzAzMjA1Mzk1NTUzNTg0NTIiPiLgtrjgt5ngtrgg4LaL4La04LeP4LaC4Lac4La6IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgtrvgtrHgt5Tgtrrgt5o6IDx4bGlmZjpnIGlkPSJNQU5BR0lOR19ET01BSU4iPiVzPC94bGlmZjpnPi5cblxu4LaU4La24Lac4LeaIOC2tOC2u+C3kuC2tOC3j+C2veC2muC2uuC3jyDgtoot4Lat4LeQ4La04LeQ4La94LeKLCDgtrrgt5ngtq/gt5Tgtrjgt4osIOC3g+C3hCDgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LeA4LeZ4La24LeKIOC2heC2qeC3gOC3kiDgtofgtq3gt5Tgt4Xgt5Tgt4Ag4LaU4La24Lac4LeaIOC2ouC3j+C2vSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt5Dgtprgt5Lgtrrgt4/gt4Ag4LaH4LatLlxuXG7gt4Dgt5Dgtqngt5Ig4LeA4LeS4LeD4LeK4Lat4La7IOC3g+C2s+C3hOC3jywg4LaU4La24LeaIOC2tOC2u+C3kuC2tOC3j+C2veC2muC2uuC3jyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lac4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmdfbWVzc2FnZSIgbXNnaWQ9IjIwMzMwOTE2NTYxMjk5NjM2NjkiPiLgtq3gt5TgtrHgt4rgt4DgtrEg4La04LeP4La74LeK4LeB4LeA4La64Laa4LanIOC2lOC2tuC2nOC3miDgtqLgt4/gtr3gtrog4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt5Dgtprgt5Lgtrrgt4/gt4Ag4LaH4LatXG7gtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4osIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4osIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgt4Qg4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC3gOC3meC2tuC3iiDgtoXgtqngt4Dgt5Ig4LaH4Lat4LeU4LeF4LeU4LeALlxuXG7gtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La6IOC2uOC2rSDgt4Pgt4rgtq7gt4/gtrTgt5Lgtq0g4LeA4LeS4LeB4LeK4LeA4LeP4LeD4Lav4La64LeTIOC2heC2muC3iuC2reC2tOC2reC3iuKAjeC2uyDgtrjgt5ngtrog4LeD4LeS4Lav4LeU4LeA4LeT4La44LeaIOC3hOC3kOC2muC3kuC2uuC3j+C3gCDgtofgtq3gt5Lgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk0Njk1Njk3NzM3NzE2NjcwOSI+IuC3gOC3kuC3geC3iuC3gOC3j+C3g+C2r+C3j+C2uuC3kyDgtoXgtprgt4rgtq3gtrTgtq3gt4rigI3gtrsg4La04La74LeS4Laa4LeK4LeC4LePIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4Y2QxNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiLgtrTgtq/gt4rgtrDgtq3gt5IgVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4i4LeE4LeS4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IuC2veC3kOC2uuC3kuC3g+C3iuC2reC3lOC3gOC3meC2seC3iiDgtongt4Dgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IuC2uOC3keC2rSDgtovgtrTgt4/gtoLgtpwg4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiLgtrjgt5Hgtq0g4La64LeZ4Lav4LeU4La44LeKIOC2ieC3gOC2reC2veC2seC3iuC2sSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IuC2uOC3keC2rSDgtrrgt5ngtq/gt5Tgtrjgt4ogMSDgtprgt4oiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiLgtrjgt5Hgtq0g4La64LeZ4Lav4LeU4La44LeKICVkIOC2muC3iiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiLgtq/gt5DgtrHgtqcg4La04LeA4Lat4LeS4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+IuC2heC2u+C3neC2tOC2muC2uuC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4i4La24LeQ4Lan4La74LeS4La6IOC2heC2qeC3lCDgt4Dgt5ngtrjgt5LgtrHgt4og4La04LeA4Lat4LeTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+IOC2muC3iiDgtongtq3gt5Lgtrvgt5Lgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4iVVNCIOC2huC2u+C3neC2tOC2q+C2uiDgt4Pgt4Tgtrog4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLlxu4LeD4La04La64LaxIOC2veC2ryDgtobgtrvgt53gtrTgtprgtrog4La04La44Lar4Laa4LeKIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+IuC2tuC3kOC2p+C2u+C3kiDgtrfgt4/gt4Dgt5Lgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiLgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiLgtoXgt4Tgt4Pgt4rgtrrgt4/gtrHgt48g4LaG4Laa4LeP4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uuC3gC3gtrfgt4rigI3gtrvgtrjgtqvgtrog4LeA4LaxIOC2reC3kuC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+IuC2seC3kuC3geC3iuC3geC2tuC3iuC2ryDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4Lan4LeZ4Lav4La74LeKIOC2muC2u+C3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IuC2huC2r+C3j+C2sSDgtprgt4rigI3gtrvgtrgg4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4i4La34Lee4Lat4LeS4LaaIOC2uuC2reC3lOC2u+C3lCDgtrTgt5Tgt4Dgtrvgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4iVVNCIOC2i+C2tOC3j+C2guC2nOC2uiDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4Laa4LeS4La74LeT4La44LanIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4Dgt4/gtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiJVU0Ig4La44LeZ4LeA4La94La4IOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgtprgt5Lgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3gOC3j+C2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IuC2uOC3meC2uCBVU0Ig4LaL4La04LeP4LaC4Lac4La6IOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5LgtqcgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5Lgt4Dgt5jgtq0g4Laa4La74Lax4LeK4Lax4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4i4La44LeZ4La4IFVTQiDgtrjgt5ngt4Dgtr3gtrjgtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kyDgtofgtq3gt5Ig4LeA4LeS4LanIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g4LeA4LeS4LeA4LeY4LatIOC2muC2u+C2seC3iuC2seC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLgtrjgt5ngtrggVVNCIOC2uOC3meC3gOC2veC2uCDgt4Pgtrjgtpwg4Laa4LeK4oCN4La74LeS4La64LePIOC2muC2u+C2sSDgt4Pgt4rgtq7gt4/gtrTgt5Lgtq0g4La64LeZ4Lav4LeU4La44LeKIOC2seC3nOC2uOC3kOC2rS4gPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4g4LeA4La94LeS4Lax4LeKIOC2uOC3meC2uCDgtrjgt5ngt4Dgtr3gtrgg4Lac4LeQ4LaxIOC2reC3gCDgtq/gt5DgtrHgtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IlVTQiDgtrjgt5ngt4Dgtr3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+IuC2tOC3meC2seC3lOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IuC2uOC3meC2uCBVU0Ig4LaL4La04LeP4LaC4Lac4La6IOC3g+C2s+C3hOC3jyDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq/gt5ngtrHgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IuC2uOC3miBVU0Ig4La44LeZ4LeA4La94La4IOC3g+C2s+C3hOC3jyDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq/gt5ngtrHgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IlVTQiDgtrHgt5Lgtq/gt5zgt4Pgt4rgtprgtrvgtqvgtrrgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3gOC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i4La44LeZ4La4IOC2tOC2u+C3kuC2nOC2q+C2muC2uuC3miBSU0Eg4La64Lat4LeU4La74LeUIOC2h+C2n+C3kuC2veC3kiDgt4Pgtqfgt4TgtrEg4LeA4Lax4LeK4Lax4LeaOlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i4LeD4LeQ4La4IOC3gOC3kuC2p+C2uCDgtrjgt5ngtrgg4La04La74LeS4Lac4Lar4Laa4La64LeZ4Lax4LeKIOC2ieC2qSDgtr3gtrbgt48g4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i4Lat4LeS4La74La6IOC2tOC3kuC2u+C3gOC3k+C2uOC2pyDgt4Dgt5Lgt4Hgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IuC2reC3kuC2u+C2uiDgtrTgt5Lgtrvgt4Dgt5Pgtrjgtqcg4LaF4Lav4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4i4Lac4LeQ4LeF4La04LeZ4LaxIOC3gOC3kuC3geC3j+C2veC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiLgtprgt5Tgtqngt48g4Lat4LeS4La74La64Laa4LeKIOC3g+C2s+C3hOC3jyDgtrrgt5ngtq/gt5Tgtrjgtprgt4og4Lax4LeS4La74LeK4La44LeP4Lar4La6IOC2muC3hSDgt4Dgt5LgtqcsIOC3gOC3kuC3geC3j+C2veC2seC2uiDgtrTgt4/gtr3gtprgtrog4LaU4La74La94Led4LeD4LeU4LeAIOC3heC2n+C3kuC2seC3iiDgtrTgt5ngtrHgt4rgt4Dgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IuC2reC3kuC2uyDgtrvgt5Tgt4Ag4LeD4LeU4La74Laa4LeS4La44LeS4Lax4LeK4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i4Lat4LeS4La7IOC2u+C3lOC3gCDgt4Pgt5Tgtrvgt5Dgtprgt5ngtrjgt5LgtrHgt4og4La04LeA4Lat4LeT4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLgtq3gt5Lgtrsg4La74LeU4LeAIOC3g+C3lOC2u+C3kOC2muC3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiLgtq3gt5Lgtrsg4La74LeU4LeAIOC2nOC3iuKAjeC2u+C3hOC2q+C2uiDgtprgtrvgtrEg4La94Lav4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLgtpTgtrbgtpzgt5og4Lat4LeS4La7IOC2u+C3lOC3gCDgtrbgt5Dgtr3gt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+IuC2reC3kuC2uyDgtrvgt5Tgt4Ag4Lac4LeK4oCN4La74LeE4Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrHgt5zgt4Tgt5Dgtprgt5Ig4LeA4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4i4Lat4LeS4La7IOC2u+C3lOC3gCDgt4Pgt5Tgtrvgt5Dgtprgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4g4LaG4Lag4La64Lax4La6IOC2t+C3j+C3gOC3kuC2reC3j+C3gOC3miDgtq3gt5Lgtrbgt5ngtrHgt4Dgt48g4LeA4LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJVU0Ig4Lac4Lec4Lax4LeUIOC3hOC3lOC3gOC2uOC3j+C2u+C3lCDgt4Dgt5Lgtprgtr3gt4rgtrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLgtrjgtrDgt4rigI3gtrog4Law4LeP4LeA4Laa4La64Laa4LeKIChNVFApIOC2veC3meC3gyDgt4Pgt4Dgt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i4Laa4LeQ4La44La74LeP4LeA4Laa4LeKIChQVFApIOC2veC3meC3gyDgt4Pgt4Dgt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiJNYWMg4LeD4Laz4LeE4LePIEFuZHJvaWQg4Lac4Lec4Lax4LeUIOC3hOC3lOC3gOC2uOC3j+C2u+C3lCDgtrrgt5ngtq/gt5Tgtrgg4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IuC2huC2tOC3g+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLgtrjgt5Tgtr3gt4og4La04LeS4Lan4LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i4La44LeZ4Lax4LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i4La44LeR4LatIOC2uuC3meC2r+C3lOC2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uOC2uiDgtrjgt4/gtrvgt5Qg4Laa4LeS4La74LeT4La44LeaIOC2tuC3nOC2reC3iuC2reC2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i4Lac4LeQ4LeF4La04LeZ4LaxIOC3gOC3kuC3geC3j+C2veC2sSDgtrbgt5zgtq3gt4rgtq3gtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLgt4Dgt5Lgt4Hgt4/gtr0g4Lat4LeS4La74La6IOC3gOC3meC2rSDgtprgt5Tgtqngt4/gt4Ag4LeA4LeS4LeB4LeP4La94Lax4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IuC2tuC3kOC2p+C2u+C3kuC2uiDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X29uZV9iYXIiIG1zZ2lkPSI3Nzc0ODg3NzIxODkxMDU3NTIzIj4i4La24LeQ4Lan4La74LeS4La6IOC2reC3k+C2u+C3lCDgtpHgtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+IuC2tuC3kOC2p+C2u+C3kuC2uiDgtq3gt5Pgtrvgt5Qg4Lav4LeZ4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+IuC2tuC3kOC2p+C2u+C3kuC2uiDgtq3gt5Pgtrvgt5Qg4Lat4LeU4Lax4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+IuC2tuC3kOC2p+C2u+C3kuC2uiDgtrTgt5Lgtrvgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4i4Lav4LeU4La74Laa4Lau4Lax4La64Laa4LeKIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lat4LeT4La74LeUIOC2keC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtq3gt5Pgtrvgt5Qg4Lav4LeZ4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lat4LeT4La74LeUIOC2reC3lOC2seC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjQ3MTgzNDg2ODU4MDc1Nzg5OCI+IuC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgt4PgtoLgtqXgt4/gt4Ag4La04LeS4La74LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2RhdGEiIG1zZ2lkPSI0NzkxOTY2Mjk1MDk2ODY3NTU1Ij4i4Lav4Lat4LeK4LatIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiLgtq/gtq3gt4rgtq0g4Lat4LeT4La74LeUIOC2keC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4i4Lav4Lat4LeK4LatIOC2reC3k+C2u+C3lCAyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IuC2r+C2reC3iuC2rSDgtq3gt5Pgtrvgt5QgMy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i4Lav4Lat4LeK4LatIOC3g+C2guC2peC3j+C3gCDgtrTgt5Lgtrvgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4iV2lmaSDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IldpZmkg4LeD4La44LeK4La24Lax4LeK4LawIOC2muC2uyDgtrHgt5zgtrjgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4iV2lmaSDgtq3gt5Pgtrvgt5Qg4LaR4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiJXaWZpIOC2reC3k+C2u+C3lCDgtq/gt5ngtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4iV2lGaSDgtq3gt5Pgtrvgt5Qg4Lat4LeU4Lax4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiJXaWZpIOC3g+C2guC2peC3j+C3gCDgtrTgt5Lgtrvgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iV2lNQVgg4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWCDgtq3gt5Pgtrvgt5Qg4LaR4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4iV2lNQVgg4Lat4LeT4La74LeUIOC2r+C3meC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iV2lNQVgg4Lat4LeT4La74LeUIOC2reC3lOC2seC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IldpTUFYIOC3g+C2guC2peC3j+C3gCDgtrTgt5Lgtrvgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+IuC3g+C2guC2peC3jyDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Mg4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IuC2reC3k+C2u+C3lCDgt4Hgt5TgtrHgt4rigI3gtrrgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IuC2reC3k+C2u+C3lCDgtpHgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90d29fYmFycyIgbXNnaWQ9IjY0MzczNjM2NDgzODUyMDY2NzkiPiLgtq3gt5Pgtrvgt5Qg4Lav4LeZ4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdGhyZWVfYmFycyIgbXNnaWQ9IjI2NDgyNDE0MTUxMTkzOTY2NDgiPiLgtq3gt5Pgtrvgt5Qg4Lat4LeU4Lax4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4i4LeD4LaC4Lal4LeP4LeAIOC2tOC3kuC2u+C3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IuC3g+C2muC3iuKAjeC2u+C3k+C2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IuC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiLgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i4La74Led4La44LeS4LaCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IlNJTSDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtqfgt5ngtq/gtrvgt5LgtrHgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4i4LaF4LeE4LeD4LeK4La64LeP4Lax4LePIOC2huC2muC3j+C2u+C2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4i4La24LeQ4Lan4La74LeSIOC2tOC3iuKAjeC2u+C2reC3kuC3geC2reC2uiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IuC2tOC2r+C3iuC2sOC2reC3kiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uCDgt4Tgt5Lgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTIOC3g+C2tuC2vSDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMg4La94La24LePIOC2nOC2seC3kuC2uOC3kuC2seC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IlRlbGVUeXBld3JpdGVyIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl92aWJyYXRlIiBtc2dpZD0iNjY2NTg1MzYzMzY0MTU1MDU1Ij4i4LeE4LasIOC2seC2n+C2seC2uiDgtprgtrjgt4rgtrTgtrHgtrog4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLgt4Tgtqwg4Lax4Laf4Lax4La6IOC2seC3kuC3geC3iuC3geC2tuC3iuC2r+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC2heC3g+C3iiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uCDgtrHgt5Lgt4Lgt4rgtrTgt4rigI3gtrvgtrfgt48g4Laa4La74LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2huC3gOC2u+C2q+C2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4i4Laa4LeK4LeC4Lar4LeS4LaaIOC3g+C3kOC2muC3g+C3k+C2uOC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4i4La44LeR4LatIOC2muC3j+C2veC3k+C2sSDgtrrgt5ngtq/gt5Tgtrjgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IuC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC3jyA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4i4Lai4LaC4Lac4La4IDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i4La24LeQ4Lan4La74LeS4La6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i4LaF4LeE4LeD4LeK4La64LeP4Lax4LePIOC2huC2muC3j+C2u+C2uiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4ogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiI8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgt4Pgt5PgtrHgt5Tgt4Ag4LeD4Laa4LeD4LeKIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cg4Lav4Lat4LeK4LatIOC2heC2tuC2vSDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcg4Lav4Lat4LeK4LatIOC2heC2tuC2vSDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+IuC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiLgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiLgtpTgtrYg4Lax4LeS4La64La44LeS4LatIOC2r+C2reC3iuC2rSDgtrfgt4/gt4Dgt5Lgtq0g4LeD4LeT4La44LeP4LeA4LanIOC3heC2n+C3jyDgt4Dgt5Mg4LaH4LatLlxuXG7gtpTgtrYg4Lav4Lat4LeK4LatIOC2seC3kOC3gOC2rSDgt4Pgtrbgtr0g4Laa4LeF4LeE4Lec4Lat4LeKIOC3gOC3j+C3hOC2muC2uuC3jyDgtpTgtrbgtpzgt5ngtrHgt4og4LaH4Lat4LeQ4La44LeKIOC3gOC3kuC2pyDgtoXgtrog4Laa4La74Lac4LatIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4i4Lax4LeQ4LeA4LatIOC2r+C2reC3iuC2rSDgt4Pgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IuC2heC2seC3iuC2reC2u+C3iuC2ouC3j+C2vSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Dgtrrgtprgt4og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJHUFMg4LeD4Laz4LeE4LePIOC3g+C3nOC2uuC2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFMg4La44Laf4LeS4Lax4LeKIOC3g+C3iuC2ruC3j+C2seC2uiDgt4Pgtprgt4Pgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i4La04LeS4LeE4LeS4Lan4LeT4La44LeKIOC2ieC2veC3iuC2veC3k+C2uOC3iiDgt4Pgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLgt4Pgt5Lgtrrgtr3gt5Qg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC3hOC3kuC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IuC2reC3kuC2u+C2uiDgt4Pgt4rgt4DgtrrgtoLgtprgt4rigI3gtrvgt5Pgtrrgt4Ag4Laa4La74Laa4LeQ4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i4Lat4LeS4La74La6IOC2reC3kuC2u+C3g+C3iiDgtq/gt5Lgt4Hgt4/gtrHgtq3gt5Lgtrrgt5ngt4Tgt5Ig4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IuC2reC3kuC2u+C2uiDgt4Pgt5Lgtrvgt4Pgt4og4Lav4LeS4LeB4LeP4Lax4Lat4LeS4La6IOC2reC3lOC3hSDgtoXgtpzgt5Tgt4Xgt5Qg4LeA4LeQ4Lan4LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i4Lav4LeA4La94LeKIOC3hOC3k+C2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IuC2iuC2reC2uyDgtrHgt5ngtqfgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IuC2heC3hOC3g+C3iuC2uuC3j+C2seC3jyDgtobgtprgt4/gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnaW5nX2xhYmVsIiBtc2dpZD0iNDkwMDc0Nzc0NDY1MzA5MjA5Ij4i4LaG4La74Led4La04Lar4La6IOC3gOC3meC2uOC3kuC2seC3iiwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiLgtoXgtrvgt53gtrTgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKICjgtovgtrTgt4/gtoLgtpwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i4Lav4LeT4La04LeK4Lat4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLgt4Pgt4rgt4DgtrrgtoLgtprgt4rigI3gtrvgt5Pgtrog4Laa4La74Laa4LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IuC2t+C3iuKAjeC2u+C2uOC2q+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La44La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i4LeD4LeK4Lau4LeP4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IuC3g+C3iuC2ruC3j+C2seC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i4La44LeP4Law4LeK4oCN4La6IOC2i+C2tOC3j+C2guC2nOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4i4LeE4Lav4LeS4LeD4LeSIOC2h+C2uOC2reC3lOC2uOC3iiDgtrTgtrjgtqvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiLgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+IuC3gOC3muC2veC3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4i4La44La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9sYWJlbCIgbXNnaWQ9IjkxMzUzNDQ3MDQ4OTk1NDYwNDEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeTIOC2seC3nOC2uOC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLgtqLgt4/gtr3gtrrgtprgt4og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg4LaF4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpIOC3g+C2guC2r+C2u+C3iuC3geC2muC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IuC2seC3nOC2u+C3kOC3hOC3kOC2seC3iiDgt4PgtoLgtq/gtrvgt4rgt4HgtprgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLgtq/gt5PgtrTgt4rgtq3gt5Lgtrjgtq3gt4og4La24LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4La44LeZ4Lat4LaxIOC2tOC3meC2seC3iuC2seC3lOC2uOC3iiDgtprgtrvgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLgtrTgt4Tgtr3gtqcg4LeD4La74LeK4La04Lar4La6IOC2muC3kuC2u+C3k+C2uOC3meC2seC3iiDgtpXgtrHgt5Hgtrgg4LeA4LeZ4La94LeP4LeA4LaaIOC2kuC3gOC3jyDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeZ4Lax4LeK4LaxLlxu4La04Lav4LeK4Law4Lat4LeSIOC2tOC3j+C2veC2miDgt4PgtrPgt4Tgt48g4Lax4LeQ4LeA4LatIOC2tOC3hOC3heC2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKaW5kZXggYzU0NTQwYy4uMTNjNjA5NDYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApAQCAtMjQsNyArMjQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4iT2RzdHLDoW5pxaUgem8gem96bmFtdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiJJbmZvcm3DoWNpZSBvIGFwbGlrw6FjaWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IsW9aWFkbmUgbmVkw6F2bmUgYXBsaWvDoWNpZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4iT2RtaWV0bnXFpSBub3bDqSBhcGxpa8OhY2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiJaYXR2b3JpxaUgbmVkw6F2bmUgYXBsaWvDoWNpZSI8L3N0cmluZz4KICAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KICAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEgbm92w6EgYXBsaWvDoWNpYSI8L2l0ZW0+CiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTA0MDc4NDM1OTc5NDg5MDc0NCI+IlBvxI1ldCBub3bDvWNoIGFwbGlrw6FjacOtOiAlZCI8L2l0ZW0+CkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlbFvmR5IHBvdm9sacWlIHogdG9odG8gcG/EjcOtdGHEjWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJQcmlibMOtxb5pxaUgbmEgY2Vsw7ogb2JyYXpvdmt1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+Ik5hIGNlbMO6IG9icmF6b3ZrdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IsOacHJhdmEgdmXEvmtvc3RpIHogZMO0dm9kdSBrb21wYXRpYmlsaXR5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IkFrIGplIGFwbGlrw6FjaWEgbmF2cmhudXTDoSBwcmUgbWVuxaFpdSBvYnJhem92a3UsIHpvYnJhesOtIHNhIHZlZMS+YSBob2TDrW4gb3Zsw6FkYWPDrSBwcnZvayBwcmlibMOtxb5lbmlhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJQcmViaWVoYSB1a2xhZGFuaWUgc27DrW1reSBvYnJhem92a3kuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJQcmViaWVoYSB1a2xhZGFuaWUgc27DrW1reSBvYnJhem92a3kuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlNuw61ta2Egb2JyYXpvdmt5IHNhIHVrbGFkw6EuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlBsb2NoYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJOb3bDqSBhcGxpa8OhY2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iSMS+YWRhxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iRm90b2FwYXLDoXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlRsYcSNaWRsbyBwcmVwbnV0aWEgbWV0w7NkeSB2c3R1cHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlRsYcSNaWRsbyDDunByYXZ5IHZlxL5rb3N0aSB6IGTDtHZvZHUga29tcGF0aWJpbGl0eS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ilp2w6TEjcWhacWlIG1lbsWhw60gb2Jyw6F6b2sgbmEgdsOkxI3FoWl1IG9icmF6b3ZrdS4iPC9zdHJpbmc+CkBAIC0xNTUsNiArMTU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXTDqXJpYTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJSZcW+aW0gViBsaWV0YWRsZTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IlBvbG9oYTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJCdWTDrWsgbmFzdGF2ZW7DvSBuYSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkTDoXRvdsOpIHByZW5vc3kgMkcgYSAzRyBzw7ogemFrw6F6YW7DqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkTDoXRvdsOpIHByZW5vc3kgNEcgc8O6IHpha8OhemFuw6kiPC9zdHJpbmc+CkBAIC0xNjYsMTIgKzE2NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmk6IHByaXBvamVuw6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlZ5aMS+YWTDoXZhbmllIHNhdGVsaXRvdiBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iUG9sb2hhIG5hc3RhdmVuw6EgcG9tb2NvdSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLFvWlhZG9zdGkgbyBwb2xvaHUgc8O6IGFrdMOtdm5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iVnltYXphxaUgdsWhZXRreSB1cG96b3JuZW5pYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iSW5mb3Jtw6FjaWUgbyBhcGxpa8OhY2lpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJPYnJhem92a2Egc2EgYXV0b21hdGlja3kgb3RvxI3DrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+Ik9icmF6b3ZrYSBqZSB1emFta251dMOhIHYgb3JpZW50w6FjaWkgbmEgxaHDrXJrdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iT2JyYXpvdmthIGplIHV6YW1rbnV0w6EgdiBvcmllbnTDoWNpaSBuYSB2w73FoWt1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJQdWx0IHMgZGV6ZXJ0YW1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IsWgZXRyacSNIG9icmF6b3ZreSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJSZcW+aW0gViBsaWV0YWRsZSI8L3N0cmluZz4KQEAgLTE4Myw2ICsxODUsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJKYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkF1dG9tYXRpY2vDqSBvdMOhxI1hbmllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+Ik90w6HEjWFuaWUgdXphbWtudXTDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiJVemFta251dMOpIG5hIHbDvcWha3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IlV6YW1rbnV0w6kgbmEgxaHDrXJrdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJNZXTDs2RhIHZzdHVwdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IlBvbG9oYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJQb2xvaGEgdnlwbnV0w6EiPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzIwMCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5lcHJpcG9qZW7DqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLFvWlhZG5hIHNpZcWlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iU2llxaUgV2ktRmkgamUgdnlwbnV0w6EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iT2JyYXpvdmthIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iQmV6ZHLDtHRvdsO9IGRpc3BsZWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iVnpkaWFsZW7DoSBvYnJhem92a2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJKYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUT01BVElDS1kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iVHUgc2Egem9icmF6dWrDuiB1cG96b3JuZW5pYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+Ik3DtMW+ZXRlIGljaCBrZWR5a2/EvnZlayB6b2JyYXppxaUgdGFrLCDFvmUgcG9zdW5pZXRlIHByc3RvbSBuYWRvbC5cbkFrIHBvc3VuaWV0ZSBwcnN0b20gbmFkb2wgZcWhdGUgcmF6LCB6b2JyYXppYSBzYSBvdmzDoWRhY2llIHBydmt5IHN5c3TDqW11LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IlBhbmVsIHpvYnJhesOtdGUgcG9zdW51dMOtbSBjZXogb2tyYWogb2JyYXpvdmt5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJTeXN0w6ltb3bDvSBwYW5lbCB6b2JyYXrDrXRlIHBvc3VudXTDrW0gY2V6IG9rcmFqIG9icmF6b3ZreSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJSZcW+aW0gcHJldnLDoXRlbmlhIGZhcmllYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IlJlxb5pbSB6dsO9xaFlbsOpaG8ga29udHJhc3R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJSZcW+aW0ga29yZWtjaWUgZmFyaWViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJTaWXFpSBtw7TFvmUgYnnFpVxubW9uaXRvcm92YW7DoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iVnloxL5hZMOhdmFuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iUHJlamRpdGUgcHJzdG9tIG5haG9yOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iUHJlamRpdGUgcHJzdG9tIGRvxL5hdmE6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCmluZGV4IDNmYzQ4ODIuLmE1YjMyNDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJWZWRubyBkb3ZvbGkgaXogdGVnYSByYcSNdW5hbG5pa2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJQb3ZlxI1hdmEgxI1leiBjZWwgemFzbG9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IlJhenRlZ25pdGV2IMSNZXogemFzbG9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iUmF6xaFpcml0ZXYgemRydcW+bGppdm9zdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4ixIxlIGplIHByb2dyYW0gaXpkZWxhbiB6YSBtYW5qxaFlIHphc2xvbmUsIHNlIG9iIHVyaSBwb2thxb5lIGtvbnRyb2xuaWsgemEgcG92ZcSNYXZvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTaHJhbmpldi4gcG9zbmV0a2EgemFzbG9uYSAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJTaHJhbmpldmFuamUgcG9zbmV0a2EgemFzbG9uYSAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlNocmFuamV2YW5qZSBwb3NuZXRrYSB6YXNsb25hLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJaYcSNZXRuaSB6YXNsb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iTmVkYXZuaSBwcm9ncmFtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+Iklza2FuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iRm90b2FwYXJhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iR3VtYiB6YSBwcmVrbG9wIG5hxI1pbmEgdm5vc2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+Ikd1bWIgcG92ZcSNYXZlIHphIHpkcnXFvmxqaXZvc3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJQb3ZlxI1hdmEgbWFuasWhZWdhIG5hIHZlxI1qaSB6YXNsb24uIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0ZXJpamE6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTGV0YWxza2kgbmHEjWluOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGg6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iTG9rYWNpamE6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm0gamUgbmFzdGF2bGplbiBuYSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IlBvZGF0a2kgMkctM0cgc28gb25lbW9nb8SNZW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iUG9kYXRraSA0RyBzbyBvbmVtb2dvxI1lbmkiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkgcG92ZXphbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iSXNrYW5qZSBHUFMtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMb2thY2lqYSBuYXN0YXZsamVuYSB6IEdQUy1vbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IkFrdGl2bmUgemFodGV2ZSB6YSBsb2thY2lqbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+Ikl6YnJpxaFpIHZzYSBvYnZlc3RpbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IlBvZGF0a2kgbyBhcGxpa2FjaWppIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJaYXNsb24gc2UgYm8gc2Ftb2Rlam5vIHphc3VrYWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJaYXNsb24gamUgemFrbGVuamVuIHYgbGXFvmXEjWkgdXNtZXJqZW5vc3RpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJaYXNsb24gamUgemFrbGVuamVuIHYgcG9rb27EjW5pIHVzbWVyamVub3N0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iVml0cmluYSB6YSBzbGFkaWNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IlNhbmphcmplbmplIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+Ik5hxI1pbiB6YSBsZXRhbG8iPC9zdHJpbmc+CkBAIC0xODEsNiArMTgzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iU3ZldGxvc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IlNhbW9kZWpubyB2cnRlbmplIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+Ilpha2xlbmplbm8gdnJ0ZW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiJaYWtsZW5qZW5vIG5hIG5hdnBpxI1ubyBwb3N0YXZpdGV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiJaYWtsZW5qZW5vIG5hIGxlxb5lxI1vIHBvc3Rhdml0ZXYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iTmHEjWluIHZub3NhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iTG9rYWNpamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iTG9rYWNpamEgaXprbG9wbGplbmEiPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IlBvdmV6YXZhIG5pIHZ6cG9zdGF2bGplbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iTmkgb21yZcW+amEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBpemtsb3BsamVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+Ilphc2xvbiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IlByaWtheiBicmV6xb5pxI1uaWggbmFwcmF2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+Ilphc2xvbiB6YSBwcmVkdmFqYW5qZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IlN2ZXRsb3N0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IlNBTU9ERUpOTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJPYnZlc3RpbGEgc28gcHJpa2F6YW5hIHR1a2FqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iRG8gbmppaCBsYWhrbyBrYWRhciBrb2xpIGRvc3RvcGF0ZSB0YWtvLCBkYSBwb3ZsZcSNZXRlIG5hdnpkb2wuXG5aYSBwcmlrYXogc2lzdGVtc2tpaCBrb250cm9sbmlrb3Ygem5vdmEgcG92bGVjaXRlIG5hdnpkb2wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iVnJzdGljbyBwcmlrYcW+ZXRlIHRha28sIGRhIHBvdmxlxI1ldGUgeiByb2JhIHphc2xvbmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlNpc3RlbXNrbyB2cnN0aWNvIHByaWthxb5ldGUgdGFrbywgZGEgcG92bGXEjWV0ZSB6IHJvYmEgemFzbG9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJOYcSNaW4gaW52ZXJ6aWplIGJhcnYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJOYcSNaW4gaXpib2xqxaFhbmVnYSBrb250cmFzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik5hxI1pbiBwb3ByYXZsamFuamEgYmFydiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iT21yZcW+amUgamVcbmxhaGtvIHNwcmVtbGphbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Iklza2FuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iUG92bGVjaXRlIG5hdnpnb3IgemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlBvdmxlY2l0ZSB2IGxldm8gemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCmluZGV4IDdiYTJkYTUuLjBiZGNjZWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLQo9Cy0LXQuiDQtNC+0LfQstC+0LvQuCDRgdCwINC+0LLQvtCzINGA0LDRh9GD0L3QsNGA0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLQl9GD0LzQuNGA0LDRmCDQvdCwINGG0LXQu9C+0Lwg0LXQutGA0LDQvdGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+ItCg0LDQt9Cy0YPRhtC4INC90LAg0YbQtdC+INC10LrRgNCw0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLQmtC+0LzQv9Cw0YLQuNCx0LjQu9C90L4g0LfRg9C80LjRgNCw0ZrQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiLQmtCw0LTQsCDRmNC1INCw0L/Qu9C40LrQsNGG0LjRmNCwINC90LDQvNC10ZrQtdC90LAg0LzQsNGa0LXQvCDQtdC60YDQsNC90YMsINC60L7QvdGC0YDQvtC70LAg0LfRg9C80LjRgNCw0ZrQsCDQv9GA0LjQutCw0LfRg9GY0LUg0YHQtSDQv9C+0YDQtdC0INGB0LDRgtCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLQp9GD0LLQsNGa0LUg0YHQvdC40LzQutCwINC10LrRgNCw0L3QsC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+ItCn0YPQstCw0ZrQtSDRgdC90LjQvNC60LAg0LXQutGA0LDQvdCwLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLQodC90LjQvNCw0Log0LXQutGA0LDQvdCwINGB0LUg0YfRg9Cy0LAuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+ItCf0L7Rh9C10YLQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i0JzQtdC90LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLQndC10LTQsNCy0L3QtSDQsNC/0LvQuNC60LDRhtC40ZjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+ItCf0YDQtdGC0YDQsNC20LjRgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+ItCa0LDQvNC10YDQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i0JTRg9Cz0LzQtSDQn9GA0L7QvNC10L3QuCDQvNC10YLQvtC0INGD0L3QvtGB0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+ItCU0YPQs9C80LUg0JfRg9C8INC60L7QvNC/0LDRgtC40LHQuNC70L3QvtGB0YLQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+ItCX0YPQvNC40YDQsNGa0LUg0YHQsCDQvNCw0ZrQtdCzINC90LAg0LLQtdGb0Lgg0LXQutGA0LDQvS4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLQkdCw0YLQtdGA0LjRmNCwOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+ItCg0LXQttC40Lwg0YDQsNC00LAg0YMg0LDQstC40L7QvdGDOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGg6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4i0JvQvtC60LDRhtC40ZjQsCDRmNC1IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4i0JDQu9Cw0YDQvCDRmNC1INC/0L7QtNC10YjQtdC9INC30LAgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyR+KAkzNHINC/0L7QtNCw0YbQuCDRgdGDINC+0L3QtdC80L7Qs9GD0ZvQtdC90LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyDQv9C+0LTQsNGG0Lgg0YHRgyDQvtC90LXQvNC+0LPRg9Gb0LXQvdC4Ijwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpINGY0LUg0L/QvtCy0LXQt9Cw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+ItCi0YDQsNC20Lgg0YHQtSBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i0JvQvtC60LDRhtC40ZjRgyDRmNC1INC/0L7QtNC10YHQuNC+IEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+ItCY0LzQsCDQsNC60YLQuNCy0L3QuNGFINC30LDRhdGC0LXQstCwINC30LAg0LvQvtC60LDRhtC40ZjRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+ItCe0LHRgNC40YjQuCDRgdCy0LAg0L7QsdCw0LLQtdGI0YLQtdGa0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+ItCY0L3RhNC+0YDQvNCw0YbQuNGY0LUg0L4g0LDQv9C70LjQutCw0YbQuNGY0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+ItCV0LrRgNCw0L0g0ZvQtSDRgdC1INCw0YPRgtC+0LzQsNGC0YHQutC4INGA0L7RgtC40YDQsNGC0LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLQldC60YDQsNC9INGY0LUg0LfQsNC60ZnRg9GH0LDQvSDRgyDRhdC+0YDQuNC30L7QvdGC0LDQu9C90L7QvCDQv9C+0LvQvtC20LDRmNGDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLQldC60YDQsNC9INGY0LUg0LfQsNC60ZnRg9GH0LDQvSDRgyDQstC10YDRgtC40LrQsNC70L3QvtC8INC/0L7Qu9C+0LbQsNGY0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+ItCS0LjRgtGA0LjQvdCwINGB0LAg0L/QvtGB0LvQsNGB0YLQuNGG0LDQvNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+ItCh0LDRmtCw0YDQtdGa0LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiLQldGC0LXRgNC90LXRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i0KDQtdC20LjQvCDRgNCw0LTQsCDRgyDQsNCy0LjQvtC90YMiPC9zdHJpbmc+CkBAIC0xODEsNiArMTgzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i0J7RgdCy0LXRgtGZ0LXQvdC+0YHRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4i0JDRg9GC0L7QvNCw0YLRgdC60L4g0YDQvtGC0LjRgNCw0ZrQtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLQoNC+0YLQuNGA0LDRmtC1INGY0LUg0LfQsNC60ZnRg9GH0LDQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+ItCX0LDQutGZ0YPRh9Cw0L3QviDQvdCwINCj0YHQv9GA0LDQstC90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+ItCX0LDQutGZ0YPRh9Cw0L3QviDQvdCwINCS0L7QtNC+0YDQsNCy0L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLQnNC10YLQvtC0INGD0L3QvtGB0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLQm9C+0LrQsNGG0LjRmNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+ItCb0L7QutCw0YbQuNGY0LAg0ZjQtSDQuNGB0LrRmdGD0YfQtdC90LAiPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+ItCS0LXQt9CwINC90LjRmNC1INGD0YHQv9C+0YHRgtCw0LLRmdC10L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLQndC10LzQsCDQvNGA0LXQttC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg0ZjQtSDQuNGB0LrRmdGD0YfQtdC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpINC10LrRgNCw0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLQkdC10LbQuNGH0L3QuCDQtdC60YDQsNC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+ItCf0YDQtdCx0LDRhtC4INC10LrRgNCw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLQntGB0LLQtdGC0ZnQtdC90L7RgdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+ItCQ0KPQotCe0JzQkNCi0KHQmtCQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+ItCe0LHQsNCy0LXRiNGC0LXRmtCwINGB0LUg0L/QvtGY0LDQstGZ0YPRmNGDINC+0LLQtNC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i0J/RgNC40YHRgtGD0L/QuNGC0LUg0LjQvCDRgyDQsdC40LvQviDQutC+0Lwg0YLRgNC10L3Rg9GC0LrRgyDQu9C40YHRgtCw0ZrQtdC8INC90LDQtNC+0LvQtS5cbtCf0L7QvdC+0LLQviDQu9C40YHRgtCw0ZjRgtC1INC90LDQtNC+0LvQtSDQtNCwINCx0Lgg0YHQtSDQv9GA0LjQutCw0LfQsNC70LUg0YHQuNGB0YLQtdC80YHQutC1INC60L7QvdGC0YDQvtC70LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4i0J/RgNC10LLRg9GG0LjRgtC1INC/0L4g0LjQstC40YbQuCDQtdC60YDQsNC90LAg0LTQsCDQsdC4INGB0LUg0L/RgNC40LrQsNC30LDQu9CwINGC0YDQsNC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+ItCf0YDQtdCy0YPRhtC40YLQtSDQvtC0INC40LLQuNGG0LUg0LXQutGA0LDQvdCwINC00LAg0LHQuCDRgdC1INC/0YDQuNC60LDQt9Cw0LvQsCDRgdC40YHRgtC10LzRgdC60LAg0YLRgNCw0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLQoNC10LbQuNC8INC40L3QstC10YDQt9C40ZjQtSDQsdC+0ZjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+ItCg0LXQttC40Lwg0YPQvdCw0L/RgNC10ZLQtdC90L7QsyDQutC+0L3RgtGA0LDRgdGC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+ItCg0LXQttC40Lwg0LrQvtGA0LXQutGG0LjRmNC1INCx0L7RmNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiLQnNGA0LXQttCwINGB0LUg0LzQvtC20LTQsFxu0L3QsNC00LPQu9C10LTQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i0J/RgNC10YLRgNCw0LPQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLQn9GA0LXQstGD0YbQuNGC0LUg0L3QsNCz0L7RgNC1INC30LAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+ItCf0YDQtdCy0YPRhtC40YLQtSDRg9C70LXQstC+INC30LAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKaW5kZXggMDIyZTJmMi4uZjVlMjU2OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlRpbGzDpXQgYWxsdGlkIHDDpSBkZW4gaMOkciBkYXRvcm4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab29tYSBmw7ZyIGF0dCBmeWxsYSBza8Okcm0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iRHJhIGbDtnIgYXR0IGZ5bGxhIHNrw6RybWVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iWm9vbSBpIGtvbXBhdGliaWxpdGV0c2zDpGdlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+Ik7DpHIgZW4gYXBwIMOkciBhbnBhc3NhZCBmw7ZyIGVuIG1pbmRyZSBza8Okcm0gdmlzYXMgZXR0IHpvb21yZWdsYWdlIHZpZCBrbG9ja2FuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTa8Okcm1kdW1wZW4gc3BhcmFzIC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNrw6RybWR1bXBlbiBzcGFyYXMgLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJTa8Okcm1kdW1wZW4gc3BhcmFzLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJTdGFydHNpZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW55Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iU2VuYXN0ZSBhcHBhcm5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iU8O2ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJLYW1lcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IktuYXBwIGbDtnIgYnl0ZSBhdiBpbm1hdG5pbmdzbWV0b2QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IktuYXBwIGbDtnIga29tcGF0aWJpbGl0ZXRzem9vbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ilpvb21hIG1pbmRyZSBza8Okcm0gdGlsbCBzdMO2cnJlLiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkJhdHRlcmkgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJGbHlncGxhbnNsw6RnZSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJQbGF0cyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtZXQgcmluZ2VyIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iRGF0YSB2aWEgMkctM0cgaGFyIGluYWt0aXZlcmF0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkRhdGEgdmlhIDRHIGhhciBpbmFrdGl2ZXJhdHMiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmktYW5zbHV0ZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlPDtmtuaW5nIGVmdGVyIEdQUyBww6Vnw6VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IlBsYXRzZW4gaGFyIGlkZW50aWZpZXJhdHMgYXYgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iRGV0IGZpbm5zIGFrdGl2YSBwbGF0c2JlZ8OkcmFuZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iVGEgYm9ydCBhbGxhIG1lZGRlbGFuZGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvIG9tIGFwcGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJTa8Okcm1lbiByb3RlcmFzIGF1dG9tYXRpc2t0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iQmlsZHNrw6RybWVucyByaWt0bmluZyDDpHIgbnUgbMOlc3QgaSBsaWdnYW5kZSBmb3JtYXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkJpbGRza8Okcm1lbnMgcmlrdG5pbmcgw6RyIG51IGzDpXN0IGkgc3TDpWVuZGUgZm9ybWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJEZXNzZXJ0ZGlza2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkRhZ2Ryw7ZtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IkZseWdwbGFuc2zDpGdlIjwvc3RyaW5nPgpAQCAtMTgxLDYgKzE4Myw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IkxqdXNzdHlya2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IlJvdGVyYSBhdXRvbWF0aXNrdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJSb3RhdGlvbmVuIGhhciBsw6VzdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iTMOlc3QgaSBzdMOlZW5kZSBsw6RnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iTMOlc3QgaSBsaWdnYW5kZSBsw6RnZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJJbm1hdG5pbmdzbWV0b2QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJQbGF0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJQbGF0cyBoYXIgaW5ha3RpdmVyYXRzIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJFaiBhbnNsdXRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJJbmdldCBuw6R0dmVyayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIGF2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpLXNrw6RybSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IlRyw6VkbMO2cyBza8Okcm0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iw5Z2ZXJmw7ZyIHNrw6RybWVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iTGp1c3N0eXJrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+Ik1lZGRlbGFuZGVuIHZpc2FzIGjDpHIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJEdSBrb21tZXIgw6V0IGRlbSBuw6RyIHNvbSBoZWxzdCBnZW5vbSBhdHQgZHJhIG5lZMOldC5cbkRyYSBuZWTDpXQgaWdlbiBvbSBkdSB2aWxsIHZpc2Egc3lzdGVta29udHJvbGxlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJEcmEgZnLDpW4ga2FudGVuIGF2IHNrw6RybWVuIG9tIGR1IHZpbGwgdmlzYSBmw6RsdGV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJEcmEgZnLDpW4ga2FudGVuIGF2IHNrw6RybWVuIG9tIGR1IHZpbGwgdmlzYSBzeXN0ZW1mw6RsdGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IkbDpHJnaW52ZXJ0ZXJpbmdzbMOkZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJLb250cmFzdGbDtnJiw6R0dHJpbmdzbMOkZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IkbDpHJna29ycmlnZXJpbmdzbMOkZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ik7DpHR2ZXJrZXQga2FuXG52YXJhIMO2dmVydmFrYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlPDtmsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRHJhIHVwcMOldCBmw7ZyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRHJhIMOldCB2w6Ruc3RlciBmw7ZyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAppbmRleCAyN2Y1NTZjLi4xYTZlMDZmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTU5LDggKzU5LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iUnVodXN1IGt1dG9rYSBrd2VueWUga29tcHl1dGEgaGlpIGtpbGEgd2FrYXRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iS3V6YSBpbGkga3VqYXphIHNrcmluaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJUYW51YSBpbGkga3VqYXphIHNrcmluaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+Ikt1a3V6YSBrd2EgVXRhbmdhbWFuaWZ1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+Ildha2F0aSBwcm9ncmFtdSBpbGlidW5pd2Ega3dhIHNrcmluaSBuZG9nbywga2lkaGliaXRpIGNoYSBrdWt1emEga2l0YW9uZWthbmEga3dhIHNhYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iSW5haGlmYWRoaSBwaWNoYSB5YSBza3JpbmkuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJJbmFoaWZhZGhpIHBpY2hhIHlhIHNrcmluaS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iUGljaGEgeWEgc2tyaW5pIGluYWhpZmFkaGl3YSI8L3N0cmluZz4KQEAgLTc2LDYgKzc0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJOeXVtYmFuaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnl1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iUHJvZ3JhbXUgemEgaGl2aSBrYXJpYnVuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IlRhZnV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJLYW1lcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlN3aWNoaSBraXR1ZmUgY2hhIG1iaW51IGluZ2l6aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iS2ljaHVwbyBjaGEga3VrdXphIGt3YSB1dGFuZ2FtYW5pZnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ikt1emEga2lkb2dvIGt3YSBza3Jpbmkga3Vid2EuIjwvc3RyaW5nPgpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4iSGFrdW5hIFNJTS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4iU2hpcmlraSBpbnRhbmV0aSBrd2EgQmx1ZXRvb3RoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+Ik1vZGkgeWEgbmRlZ2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4iSGFsaSB5YSBuZGVnZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4iQXNpbGltaWEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHlhIGJldHJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiJNaXBhbmdpbGlvIHlhIG1mdW1vLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4iQXJpZmEuIjwvc3RyaW5nPgpAQCAtMTUxLDYgKzE1MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmV0cmkgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJIYWxpIHlhIE5kZWdlIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+Ik1haGFsaSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IktlbmdlbGUgaW1ld2Vrd2EgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEYXRhIHlhIDJHLTNHIGltZWxlbWF6d2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJEYXRhIHlhIDRHIGltZWxlbWF6d2EiPC9zdHJpbmc+CkBAIC0xNjIsMTUgKzE2MywxNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iTXRhbmRhby1oZXdhIHVtZXVuZ2FuaXNod2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkluYXRhZnV0YSBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iTWFoYWxpIHBhbWV3ZWt3YSBuYSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJNYW9tYmkgeWEgZW5lbyB5YW5hdHVtaWthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iRnV0YSBhcmlmYSB6b3RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJUYWFyaWZhIHlhIHByb2dyYW11Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJTa3JpbmkgaXRhenVuZ3VrYSBraW90b21hdGlraS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IlNrcmluaSBpbWVmdW5nd2Egc2FzYSBrYXRpa2EgdWVsZWtlem8gd2EgbWFuZGhhcmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IlNrcmluaSBpbWVmdW5nd2Ega2F0aWthIHVlbGVrZW8gd2EgcGljaGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IlNhbmR1a3UgbGEgVml0aW5kYW1sbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJIYWxpIFR1bGl2dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2RpIHlhIG5kZWdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJIYWxpIHlhIG5kZWdlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IkluYWNoYWppLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IkltZWNoYWppd2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4iQmx1ZXRvb3RoIjwvc3RyaW5nPgpAQCAtMTc5LDExICsxODEsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iVW5nXCdhdnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+Ilp1bmd1c2hhIE90b21hdGlraSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJNenVuZ3VrbyBVbWVmdW5nd2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iSW1lZnVuZ3dhIGthdGlrYSBta2FtbyBXaW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiJJbWVmdW5nd2Ega2F0aWthIG1rYW8gTWxhbG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iTWJpbnUgeWEgdWluZ2l6YWppIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Ikt1dGFtYnVhIEVuZW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iS2l0YW1idWEgZW5lbyBraW1lemltd2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iS2lmYWEgY2hhIG1pZGlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJTaW11IHphIERoYXJ1cmEgUGVrZWUiPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IkhhaWphdW5nYW5pc2h3YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJIYWt1bmEgTXRhbmRhbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIEltZXppbXdhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+Ik9ueWVzaG8gbGEgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJVb255ZXNoYWppIFBhc2l3YXlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IlV0dW1hamkgd2EgU2tyaW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iVW5nXCdhdnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iS0lPVE9NQVRJS0kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iQXJpZmEgeml0YW9uZWthbmEgaGFwYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IlppZmlraWUgd2FrYXRpIHdvd290ZSBrd2Ega3V0ZWxlemVzaGEgY2hpbmkuXG5UZWxlemVzaGEgY2hpbmkgdGVuYSBrdXBhdGEgdmlkaGliaXRpIHZ5YSBtZnVtby4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJQYXBhc2Ega3dhIGthc2kga3V0b2thIHVraW5nbyB3YSBza3JpbmkgaWxpIGt1b255ZXNoYSB1cGF1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJQYXBhc2Ega3dhIGthc2kga3V0b2thIHVraW5nbyB3YSBza3JpbmkgaWxpIGt1b255ZXNoYSB1cGF1IHdhIG1mdW1vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IkhhbGkgeWEgdWdldXphamkga2lueXVtZSB3YSByYW5naSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IkhhbGkgeWEgdXRvZmF1dGlzaGFqaSB1bGlvYm9yZXNod2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IkhhbGkgeWEga3VzYWhpaGlzaGEgcmFuZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ikh1ZW5kYSBtdGFuZGFvXG51bmFmdWF0aWxpd2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlRhZnV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJTb2dlemEganV1IGt3YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlNvZ2V6YSBrdXNob3RvIGt3YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdzYwMGRwL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3NjAwZHAvYXJyYXlzLnhtbAppbmRleCBmM2ExNzcxLi4yMWM0YmQzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3NjAwZHAvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3NjAwZHAvYXJyYXlzLnhtbApAQCAtMjEsMjEgKzIxLDIxIEBACiAKICAgICA8YXJyYXkgbmFtZT0ibmF2YmFyX3NlYXJjaF90YXJnZXRzIj4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkAqYW5kcm9pZDpkcmF3YWJsZS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWM8L2l0ZW0+CisgICAgICAgIDxpdGVtPkBkcmF3YWJsZS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWM8L2l0ZW0+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICA8L2FycmF5PgogCiAgICAgPGFycmF5IG5hbWU9Im5hdmJhcl9zZWFyY2hfdGFyZ2V0X2Rlc2NyaXB0aW9ucyI+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgotICAgICAgICA8aXRlbT5AKmFuZHJvaWQ6c3RyaW5nL2Rlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2g8L2l0ZW0+CisgICAgICAgIDxpdGVtPkBzdHJpbmcvZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaDwvaXRlbT4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgIDwvYXJyYXk+CiAKICAgICA8YXJyYXkgbmFtZT0ibmF2YmFyX3NlYXJjaF9kaXJlY3Rpb25fZGVzY3JpcHRpb25zIj4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkAqYW5kcm9pZDpzdHJpbmcvZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtPkBzdHJpbmcvZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQ8L2l0ZW0+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICA8L2FycmF5PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdzYwMGRwL2NvbmZpZy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3NjAwZHAvY29uZmlnLnhtbAppbmRleCA0OGEwMmFiLi5iNzdmMWUwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3NjAwZHAvY29uZmlnLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3NjAwZHAvY29uZmlnLnhtbApAQCAtMjksOSArMjksNiBAQAogICAgIDwhLS0gVGhlIG51bWJlciBvZiBjb2x1bW5zIHRoYXQgdGhlIHRvcCBsZXZlbCB0aWxlcyBzcGFuIGluIHRoZSBRdWlja1NldHRpbmdzIC0tPgogICAgIDxpbnRlZ2VyIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfdGltZV9zZXR0aW5nc190aWxlX3NwYW4iPjE8L2ludGVnZXI+CiAKLSAgICA8IS0tIFdoZXRoZXIgcm90YXRpb24gbG9jayBzaG93cyB1cCBpbiBxdWljayBzZXR0aW5ncyBvciBub3QgLS0+Ci0gICAgPGJvb2wgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2hvd19yb3RhdGlvbl9sb2NrIj50cnVlPC9ib29sPgotCiAgICAgPCEtLSBFbmFibGUgdGhlICJmbGlwIHNldHRpbmdzIiBwYW5lbCAtLT4KICAgICA8Ym9vbCBuYW1lPSJjb25maWdfaGFzRmxpcFNldHRpbmdzUGFuZWwiPmZhbHNlPC9ib29sPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAppbmRleCBkYzY0M2M0Li5iNWMyNGQ3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i4Lit4LiZ4Li44LiN4Liy4LiV4LiI4Liy4LiB4LiE4Lit4Lih4Lie4Li04Lin4LmA4LiV4Lit4Lij4LmM4LmA4LiE4Lij4Li34LmI4Lit4LiH4LiZ4Li14LmJ4LmA4Liq4Lih4LitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i4LiC4Lii4Liy4Lii4LiI4LiZ4LmA4LiV4LmH4Lih4Lir4LiZ4LmJ4Liy4LiI4LitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IuC4ouC4t+C4lOC4iOC4meC5gOC4leC5h+C4oeC4q+C4meC5ieC4suC4iOC4rSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IuC4hOC4p+C4suC4oeC5gOC4guC5ieC4suC4geC4seC4meC5hOC4lOC5ieC4guC4reC4h+C4geC4suC4o+C4ouC5iOC4rS/guILguKLguLLguKIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4LiX4Li14LmI4Lit4Lit4LiB4LmB4Lia4Lia4Lih4Liy4Liq4Liz4Lir4Lij4Lix4Lia4Lir4LiZ4LmJ4Liy4LiI4Lit4LiC4LiZ4Liy4LiU4LmA4Lil4LmH4LiBIOC4leC4seC4p+C4hOC4p+C4muC4hOC4uOC4oeC4geC4suC4o+C4ouC5iOC4rS/guILguKLguLLguKLguIjguLDguJvguKPguLLguIHguI/guILguLbguYnguJnguILguYnguLLguIfguJnguLLguKzguLTguIHguLIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i4LiB4Liz4Lil4Lix4LiH4Lia4Lix4LiZ4LiX4Li24LiB4Lig4Liy4Lie4Lir4LiZ4LmJ4Liy4LiI4LitLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i4LiB4Liz4Lil4Lix4LiH4Lia4Lix4LiZ4LiX4Li24LiB4Lig4Liy4Lie4Lir4LiZ4LmJ4Liy4LiI4LitLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLguIHguLPguKXguLHguIfguJrguLHguJnguJfguLbguIHguKDguLLguJ7guKvguJnguYnguLLguIjguK0iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i4Lir4LiZ4LmJ4Liy4LmB4Lij4LiBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i4LmA4Lih4LiZ4Li5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4Lil4LmI4Liy4Liq4Li44LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i4LiE4LmJ4LiZ4Lir4LiyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IuC4geC4peC5ieC4reC4h+C4luC5iOC4suC4ouC4o+C4ueC4myI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i4Lib4Li44LmI4Lih4Liq4Lil4Lix4Lia4Lin4Li04LiY4Li14LiB4Liy4Lij4Lib4LmJ4Lit4LiZ4LiC4LmJ4Lit4Lih4Li54LilIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IuC4m+C4uOC5iOC4oeC4i+C4ueC4oeC4l+C4teC5iOC5g+C4iuC5ieC4h+C4suC4meC4o+C5iOC4p+C4oeC4geC4seC4meC5hOC4lOC5iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i4LiL4Li54Lih4Lir4LiZ4LmJ4Liy4LiI4Lit4LmD4Lir4LmJ4Lih4Li14LiC4LiZ4Liy4LiU4LmD4Lir4LiN4LmI4LiC4Li24LmJ4LiZIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i4LmB4Lia4LiV4LmA4LiV4Lit4Lij4Li14LmIIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLguYLguKvguKHguJTguYPguIrguYnguIfguLLguJnguJrguJnguYDguITguKPguLfguYjguK3guIfguJrguLTguJkgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiLguJrguKXguLnguJfguLnguJggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IuC4quC4luC4suC4meC4l+C4teC5iCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4i4LiV4Lix4LmJ4LiH4LmA4Lin4Lil4Liy4Lib4Lil4Li44LiB4LmE4Lin4LmJ4LiX4Li14LmIIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiLguJvguLTguJTguYPguIrguYnguIfguLLguJnguILguYnguK3guKHguLnguKUgMkctM0cg4LmB4Lil4LmJ4LinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4i4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZ4LiC4LmJ4Lit4Lih4Li54LilIDRHIOC5geC4peC5ieC4pyI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiLguYDguIrguLfguYjguK3guKHguJXguYjguK0gV2lGaSDguYHguKXguYnguKciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IuC4geC4s+C4peC4seC4h+C4hOC5ieC4meC4q+C4siBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i4LiV4Liz4LmB4Lir4LiZ4LmI4LiH4LiX4Li14LmI4LiB4Liz4Lir4LiZ4LiU4LmC4LiU4LiiIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IuC4hOC4s+C4guC4reC4leC4s+C5geC4q+C4meC5iOC4h+C4l+C4teC5iOC4oeC4teC4geC4suC4o+C5g+C4iuC5ieC4h+C4suC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IuC4peC5ieC4suC4h+C4geC4suC4o+C5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4meC4l+C4seC5ieC4h+C4q+C4oeC4lCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLguILguYnguK3guKHguLnguKXguYHguK3guJsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IuC4q+C4meC5ieC4suC4iOC4reC4iOC4sOC4q+C4oeC4uOC4meC5guC4lOC4ouC4reC4seC4leC5guC4meC4oeC4seC4leC4tCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i4LiC4LiT4Liw4LiZ4Li14LmJ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiW4Li54LiB4Lil4LmH4Lit4LiB4LmD4Lir4LmJ4Lin4Liy4LiH4LmD4LiZ4LmB4LiZ4Lin4LiZ4Lit4LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IuC4guC4k+C4sOC4meC4teC5ieC4q+C4meC5ieC4suC4iOC4reC4luC4ueC4geC4peC5h+C4reC4geC5g+C4q+C5ieC4p+C4suC4h+C5g+C4meC5geC4meC4p+C4leC4seC5ieC4hyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiLguIrguLHguYnguJnguYHguKrguJTguIfguILguK3guIfguKvguKfguLLguJkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiLguK3guLXguYDguJfguK3guKPguYzguYDguJnguYfguJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IuC5guC4q+C4oeC4lOC5g+C4iuC5ieC4h+C4suC4meC4muC4meC5gOC4hOC4o+C4t+C5iOC4reC4h+C4muC4tOC4mSI8L3N0cmluZz4KQEAgLTE4MSw2ICsxODMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLguITguKfguLLguKHguKrguKfguYjguLLguIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IuC4q+C4oeC4uOC4meC4reC4seC4leC5guC4meC4oeC4seC4leC4tCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLguKXguYfguK3guIHguIHguLLguKPguKvguKHguLjguJnguYHguKXguYnguKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4i4Lil4LmH4Lit4LiB4LiX4Li14LmI4LmB4LiZ4Lin4LiV4Lix4LmJ4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiLguKXguYfguK3guIHguJfguLXguYjguYHguJnguKfguJnguK3guJkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i4Lin4Li04LiY4Li14Lib4LmJ4Lit4LiZ4LiC4LmJ4Lit4Lih4Li54LilIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i4LiV4Liz4LmB4Lir4LiZ4LmI4LiHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IuC4m+C4tOC4lOC4leC4s+C5geC4q+C4meC5iOC4hyI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i4LmE4Lih4LmI4LmE4LiU4LmJ4LmA4LiK4Li34LmI4Lit4Lih4LiV4LmI4LitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IuC5hOC4oeC5iOC4oeC4teC5gOC4hOC4o+C4t+C4reC4guC5iOC4suC4oiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IuC4m+C4tOC4lCBXaUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IuC4geC4suC4o+C5geC4quC4lOC4h+C4nOC4pSBXaUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4i4LiI4Lit4LmB4Liq4LiU4LiH4Lic4Lil4LmE4Lij4LmJ4Liq4Liy4LiiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IuC4quC5iOC4h+C4q+C4meC5ieC4suC4iOC4rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuC4hOC4p+C4suC4oeC4quC4p+C5iOC4suC4hyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLguK3guLHguJXguYLguJnguKHguLHguJXguLQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZ4LiI4Liw4LmB4Liq4LiU4LiH4LiC4Li24LmJ4LiZ4LiX4Li14LmI4LiZ4Li14LmIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i4LmA4LiC4LmJ4Liy4LiW4Li24LiH4LmE4LiU4LmJ4LiX4Li44LiB4LmA4Lih4Li34LmI4Lit4LiU4LmJ4Lin4Lii4LiB4Liy4Lij4LiB4Lin4Liy4LiU4LiZ4Li04LmJ4Lin4Lil4LiHXG7guIHguKfguLLguJTguJnguLTguYnguKfguKXguIfguK3guLXguIHguITguKPguLHguYnguIfguKrguLPguKvguKPguLHguJrguIHguLLguKPguITguKfguJrguITguLjguKHguKPguLDguJrguJoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLguIHguKfguLLguJTguILguK3guJrguILguK3guIfguKvguJnguYnguLLguIjguK3guYDguJ7guLfguYjguK3guYHguKrguJTguIfguYHguJbguJoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IuC4geC4p+C4suC4lOC4iOC4suC4geC4guC4reC4muC4guC4reC4h+C4q+C4meC5ieC4suC4iOC4reC5gOC4nuC4t+C5iOC4reC5geC4quC4lOC4h+C5geC4luC4muC4o+C4sOC4muC4miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLguYLguKvguKHguJTguIHguLLguKPguIHguKXguLHguJrguKrguLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLguYLguKvguKHguJTguITguK3guJnguJfguKPguLLguKrguJXguYzguJfguLXguYjguJvguKPguLHguJrguJvguKPguLjguIfguYHguKXguYnguKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IuC5guC4q+C4oeC4lOC4geC4suC4o+C5geC4geC5ieC5hOC4guC4quC4tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i4LmA4LiE4Lij4Li34Lit4LiC4LmI4Liy4Lii4Lit4Liy4LiIXG7guJbguLnguIHguJXguKPguKfguIjguKrguK3guJoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuC4hOC5ieC4meC4q+C4siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLguYDguKXguLfguYjguK3guJnguILguLbguYnguJnguYDguJ7guLfguYjguK0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i4LmA4Lil4Li34LmI4Lit4LiZ4LmE4Lib4LiX4Liy4LiH4LiL4LmJ4Liy4Lii4LmA4Lie4Li34LmI4LitIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKaW5kZXggMDA1M2JlNC4uMzcwNGM0OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlBhbGFnaW5nIHBheWFnYW4gbXVsYSBzYSBjb21wdXRlciBuYSBpdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJJLXpvb20gdXBhbmcgcHVuYW4gc2NyZWVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+Ikktc3RyZXRjaCB1cGFuZyBtYXB1bm8gc2NyZWVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iWm9vbSBzYSBwYWdpZ2luZyBUdWdtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJLYXBhZyBuYWthZGlzZW55byBhbmcgaXNhbmcgYXBwIHBhcmEgc2EgbWFzIG1hbGlpdCBuYSBzY3JlZW4sIGlzYW5nIGtvbnRyb2wgbmcgem9vbSBhbmcgbGFsYWJhcyBzYSBtYXkgb3Jhc2FuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTaW5lLXNhdmUgYW5nIHNjcmVlbnNob3TigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJTaW5lLXNhdmUgYW5nIHNjcmVlbnNob3TigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlNpbmUtc2F2ZSBhbmcgc2NyZWVuc2hvdC4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iSG9tZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJLYW1ha2FpbGFuZyBhcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iSGFuYXBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJDYW1lcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IklsaXBhdCBhbmcgYnV0dG9uIG5hIHBhbWFtYXJhYW4gbmcgcGFnLWlucHV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJCdXR0b24gbmcgem9vbSBuZyBwYWdpZ2luZyB0dWdtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ik1hZy16b29tIG5hbmcgbWFzIG1hbGlpdCBzYSBtYXMgbWFsYWtpbmcgc2NyZWVuLiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+Ijx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+IG5nIGJhdGVyeWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiI8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiBuZyBBaXJwbGFuZSBNb2RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+Ijx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+IG5nIEJsdWV0b290aC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+Ikxva2FzeW9uIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm0gc2V0IHBhcmEgc2EgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEaSBwaW5hcGFnYW5hIGFuZyAyRy0zRyBuYSBkYXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iSGluZGkgcGluYXBhZ2FuYSBhbmcgNEcgbmEgZGF0YSI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJuYWtha29uZWt0YSBhbmcgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+Ik5hZ2hhaGFuYXAgbmcgR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+Ikxva2FzeW9uZyBpdGluYXRha2RhIG5nIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IkFrdGlibyBhbmcgbWdhIGthaGlsaW5nYW4gbmcgbG9rYXN5b24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJJLWNsZWFyIGFuZyBsYWhhdCBuZyBub3RpZmljYXRpb24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkltcG9ybWFzeW9uIG5nIGFwcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iQXd0b21hdGlrb25nIGlpa290IGFuZyBzY3JlZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJOYWthLWxvY2sgYW5nIHNjcmVlbiBzYSBwYWhpZ2FuZyBvcnllbnRhc3lvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iTmFrYS1sb2NrIGFuZyBzY3JlZW4gc2EgcGF0YXlvbmcgb3J5ZW50YXN5b24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkRlc3NlcnQgQ2FzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJBaXJwbGFuZSBtb2RlIjwvc3RyaW5nPgpAQCAtMTgxLDYgKzE4Myw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IkJyaWdodG5lc3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkktYXV0byBSb3RhdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iTmFrYS1sb2NrIGFuZyBQYWctcm90YXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+Ik5ha2EtbG9jayBzYSBQb3J0cmFpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iTmFrYS1sb2NrIHNhIExhbmRzY2FwZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJQYW1hbWFyYWFuIG5nIFBhZy1pbnB1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Ikxva2FzeW9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+Ik5ha2Etb2ZmIGFuZyBMb2thc3lvbiI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iSGluZGkgTmFrYWtvbmVrdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iV2FsYW5nIE5ldHdvcmsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJOYWthLW9mZiBhbmcgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iRGlzcGxheSBuZyBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IldpcmVsZXNzIERpc3BsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iSS1jYXN0IGFuZyBTY3JlZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJCcmlnaHRuZXNzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iRGl0byBsdW1hbGFiYXMgYW5nIG1nYSBub3RpZmljYXRpb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJJLWFjY2VzcyBhbmcgbWdhIGl0byBhbnVtYW5nIG9yYXMgc2EgcGFtYW1hZ2l0YW4gbmcgcGFnLXN3aXBlIHBhYmFiYS5cbk11bGluZyBtYWctc3dpcGUgcGFiYWJhIHBhcmEgc2EgbWdhIGtvbnRyb2wgbmcgc3lzdGVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+Ik1hZy1zd2lwZSBzYSBnaWxpZCBuZyBzY3JlZW4gdXBhbmcgaXBha2l0YSBhbmcgYmFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJNYWctc3dpcGUgbXVsYSBzYSBnaWxpZCBuZyBzY3JlZW4gdXBhbmcgaXBha2l0YSBhbmcgc3lzdGVtIGJhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2RlIG5nIHBhZy1pbnZlcnQgbmcga3VsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2RlIG5hIGRpbmFnZGFnYW4gYW5nIGNvbnRyYXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJNb2RlIG5nIHBhZ3RhdGFtYSBuZyBrdWxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iTWFhYXJpbmdcbnNpbnVzdWJheWJheWFuIGFuZyBuZXR3b3JrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJNYWdoYW5hcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJNYWctc2xpZGUgcGF0YWFzIHBhcmEgc2EgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ik1hZy1zbGlkZSBwYWthbGl3YSBwYXJhIHNhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCmluZGV4IGYzOWY4YmMuLjU2ZTVjODggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJCdSBiaWxnaXNheWFyZGFuIGhlciB6YW1hbiBpemluIHZlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Illha8SxbmxhxZ90xLFyIChla3JhbsSxIGthcGxhc8SxbikiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iR2VuacWfbGV0IChla3JhbiBrYXBhbnPEsW4pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iVXl1bWx1bHVrIHlha8SxbmxhxZ90xLFybWFzxLEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iVXlndWxhbWEga8O8w6fDvGsgYmlyIGVrcmFuIGnDp2luIHRhc2FybGFubcSxxZ9zYSBzYWF0aW4geWFuxLFuZGEgYmlyIHlha8SxbmxhxZ90xLFybWEgZGVuZXRpbWkgZ8O2csO8bsO8ci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iRWtyYW4gZ8O2csO8bnTDvHPDvCBrYXlkZWRpbGl5b3IuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJFa3JhbiBnw7Zyw7xudMO8c8O8IGtheWRlZGlsaXlvci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iRWtyYW4gZ8O2csO8bnTDvHPDvCBrYXlkZWRpbGl5b3IuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IkFuYSBzYXlmYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbsO8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iU29uIHV5Z3VsYW1hbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iQXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkthbWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iR2lyacWfIHnDtm50ZW1pbmkgZGXEn2nFn3Rpcm1lIGTDvMSfbWVzaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iVXl1bWx1bHVrIHp1bSBkw7zEn21lc2kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJEYWhhIGLDvHnDvGsgZWtyYW5hIGRhaGEga8O8w6fDvGsgeWFrxLFubGHFn3TEsXIuIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iUGlsIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iVcOnYWsgTW9kdSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJLb251bTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybSBzYWF0aTogPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyB2ZXJpbGVyaSBkZXZyZSBkxLHFn8SxIGLEsXJha8SxbGTEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIHZlcmlsZXJpIGRldnJlIGTEscWfxLEiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iS2FibG9zdXogYmHEn2xhbmTEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iR1BTIGFyYW7EsXlvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJLb251bSBHUFMgaWxlIGJlbGlybGVuZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJLb251bSBiaWxnaXNpIGlzdGVrbGVyaSBldGtpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IlTDvG0gYmlsZGlyaW1sZXJpIHRlbWl6bGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iVXlndWxhbWEgYmlsZ2lsZXJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJFa3JhbiBvdG9tYXRpayBvbGFyYWsgZMO2bmVjZWt0aXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJFa3JhbiB5YXRheSB5w7ZuZGUga2lsaXRsZW5kaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iRWtyYW4gZGlrZXkgecO2bmRlIGtpbGl0bGVuZGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IlRhdGzEsSBLdXR1c3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iSGFmaWYgdXlrdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJVw6dhayBtb2R1Ijwvc3RyaW5nPgpAQCAtMTgxLDExICsxODMsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iUGFybGFrbMSxayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iT3RvbWF0aWsgRMO2bmTDvHIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iRMO2bm1lIEtpbGl0bGVuZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4iRGlrZXkgR8O2csO8bsO8bWUgS2lsaXRsZW5kaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4iWWF0YXkgR8O2csO8bsO8bWUgS2lsaXRsZW5kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJHaXJpxZ8gWcO2bnRlbWkiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsICg3NDY0NTQ0MDg2NTA3MzMxNDU5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iS29udW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iS29udW0gQmlsZ2lzaSBLYXBhbMSxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+Ik1lZHlhIGNpaGF6xLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IllhbG7EsXpjYSBBY2lsIMOHYcSfcsSxbGFyIMSww6dpbiI8L3N0cmluZz4KQEAgLTE5NiwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iQmHEn2zEsSBEZcSfaWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iQcSfIHlvayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IkthYmxvc3V6IEthcGFsxLEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iS2FibG9zdXogRWtyYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJLYWJsb3N1eiBFa3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJZYXnEsW5sYW1hIEVrcmFuxLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJQYXJsYWtsxLFrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+Ik9UT01BVMSwSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJCaWxkaXJpbWxlciBidXJhZGEgZ8O2csO8bsO8ciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IkHFn2HEn8SxeWEgaMSxemzEsWNhIGtheWTEsXJhcmFrIGJ1bmxhcmEgaXN0ZWRpxJ9pbml6IHphbWFuIGVyacWfZWJpbGlyc2luaXouXG5TaXN0ZW0gZGVuZXRpbWxlcmkgacOnaW4gdGVrcmFyIGjEsXpsxLFjYSBhxZ9hxJ/EsSBrYXlkxLFyxLFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IsOHdWJ1xJ91IGfDtnLDvG50w7xsZW1layBpw6dpbiBla3JhbsSxbiBrZW5hcsSxbmRhbiBoxLF6bMSxY2Ega2F5ZMSxcsSxbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iU2lzdGVtIMOndWJ1xJ91bnUgZ8O2csO8bnTDvGxlbWVrIGnDp2luIGVrcmFuxLFuIGtlbmFyxLFuZGFuIGjEsXpsxLFjYSBrYXlkxLFyxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IlJlbmsgdGVycyDDp2V2aXJtZSBtb2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iR2VsacWfdGlyaWxtacWfIGtvbnRyYXN0IG1vZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IlJlbmsgZMO8emVsdG1lIG1vZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IkHEnyBpemxlbml5b3Jcbm9sYWJpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJBcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IGnDp2luIHl1a2FyxLEga2F5ZMSxcsSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gacOnaW4gc29sYSBrYXlkxLFyxLFuLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKaW5kZXggMThmNjdhMi4uM2E0NzRhNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+ItCX0LDQstC20LTQuCDQtNC+0LfQstC+0LvRj9GC0Lgg0Lcg0YbRjNC+0LPQviDQutC+0LzQv+KAmdGO0YLQtdGA0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLQnNCw0YHRiNGC0LDQsdGD0LIuINC90LAg0LLQtdGB0Ywg0LXQutGA0LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLQoNC+0LfRgtGP0LPQvdGD0YLQuCDQvdCwINCy0LXRgdGMINC10LrRgNCw0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLQnNCw0YHRiNGC0LDQsdGD0LLQsNC90L3RjyDQtNC70Y8g0YHRg9C80ZbRgdC90L7RgdGC0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i0K/QutGJ0L4g0L/RgNC+0LPRgNCw0LzRgyDQv9GA0LjQt9C90LDRh9C10L3QviDQtNC70Y8g0LzQtdC90YjQuNGFINC10LrRgNCw0L3RltCyLCDQtdC70LXQvNC10L3RgiDQutC10YDRg9Cy0LDQvdC90Y8g0LzQsNGB0YjRgtCw0LHQvtC8INCx0YPQtNC1INCy0ZbQtNC+0LHRgNCw0LbQsNGC0LjRgdGPINCx0ZbQu9GPINCz0L7QtNC40L3QvdC40LrQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i0JfQsdC10YDQtdC20LXQvdC90Y8g0LfQvdGW0LzQutCwINC10LrRgNCw0L3QsC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+ItCX0LHQtdGA0LXQttC10L3QvdGPINC30L3RltC80LrQsCDQtdC60YDQsNC90LAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+ItCX0LHQtdGA0ZbQs9Cw0ZTRgtGM0YHRjyDQt9C90ZbQvNC+0Log0LXQutGA0LDQvdCwLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLQk9C+0LvQvtCy0L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+ItCc0LXQvdGOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i0J7RgdGC0LDQvdC90ZYg0L/RgNC+0LPRgNCw0LzQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+ItCf0L7RiNGD0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i0JrQsNC80LXRgNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLQmtC90L7Qv9C60LAg0L/QtdGA0LXQvNC40LrQsNC90L3RjyDQvNC10YLQvtC00YMg0LLQstC10LTQtdC90L3Rjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i0JrQvdC+0L/QutCwINC80LDRgdGI0YLQsNCx0YPQstCw0L3QvdGPINGB0YPQvNGW0YHQvdC+0YHRgtGWLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i0JfQsdGW0LvRjNGI0LXQvdC90Y8g0LXQutGA0LDQvdCwLiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+ItCQ0LrRg9C80YPQu9GP0YLQvtGAOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+ItCg0LXQttC40Lwg0L/QvtC70YzQvtGC0YM6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLQnNGW0YHRhtC10LfQvdCw0YXQvtC00LbQtdC90L3RjyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+ItCh0LjQs9C90LDQuyDRg9GB0YLQsNC90L7QstC70LXQvdC+INC90LAgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiLQlNCw0L3RliAyR+KAkzNHINCy0LjQvNC60L3QtdC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLQlNCw0L3RliA0RyDQstC40LzQutC90LXQvdC+Ijwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpINC/0ZbQtOKAmdGU0LTQvdCw0L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i0JLQuNC60L7QvdGD0ZTRgtGM0YHRjyDQv9C+0YjRg9C6IEdQUy3RgdC40LPQvdCw0LvRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiLQnNGW0YHRhtC10LfQvdCw0YXQvtC00LbQtdC90L3RjyDQstGB0YLQsNC90L7QstC70LXQvdC+INC30LAg0LTQvtC/0L7QvNC+0LPQvtGOIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+ItCX0LDQv9C40YLQuCDQv9GA0L4g0LzRltGB0YbQtdC30L3QsNGF0L7QtNC20LXQvdC90Y8g0LDQutGC0LjQstC90ZYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLQntGH0LjRgdGC0LjRgtC4INCy0YHRliDRgdC/0L7QstGW0YnQtdC90L3Rjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i0IbQvdGE0L7RgNC80LDRhtGW0Y8g0L/RgNC+INC/0YDQvtCz0YDQsNC80YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+ItCV0LrRgNCw0L0g0L7QsdC10YDRgtCw0YLQuNC80LXRgtGM0YHRjyDQsNCy0YLQvtC80LDRgtC40YfQvdC+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i0JXQutGA0LDQvSDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC+INCyINCw0LvRjNCx0L7QvNC90ZbQuSDQvtGA0ZbRlNC90YLQsNGG0ZbRly4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i0JXQutGA0LDQvSDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC+INCyINC60L3QuNC20LrQvtCy0ZbQuSDQvtGA0ZbRlNC90YLQsNGG0ZbRly4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i0JLRltGC0YDQuNC90LAg0LTQtdGB0LXRgNGC0ZbQsiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLQl9Cw0YHRgtCw0LLQutCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+ItCg0LXQttC40Lwg0L/QvtC70YzQvtGC0YMiPC9zdHJpbmc+CkBAIC0xODEsNiArMTgzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i0K/RgdC60YDQsNCy0ZbRgdGC0YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+ItCe0LHQtdGA0YLQsNGC0Lgg0LDQstGC0L7QvNCw0YLQuNGH0L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLQntCx0LXRgNGC0LDQvdC90Y8g0LfQsNCx0LvQvtC60L7QstCw0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiLQl9Cw0LHQu9C+0LrQvtCy0LDQvdC+INCyINC60L3QuNC20LrQvtCy0ZbQuSDQvtGA0ZbRlNC90YLQsNGG0ZbRlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4i0JfQsNCx0LvQvtC60L7QstCw0L3QviDQsiDQsNC70YzQsdC+0LzQvdGW0Lkg0L7RgNGW0ZTQvdGC0LDRhtGW0ZciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i0JzQtdGC0L7QtCDQstCy0LXQtNC10L3QvdGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i0JzRltGB0YbQtdC30L3QsNGF0L7QtNC20LXQvdC90Y8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i0JzRltGB0YbQtdC30L3QsNGF0L7QtNC20LXQvdC90Y8g0LLQuNC80LrQvdC10L3QviI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i0J3QtSDQv9GW0LTigJnRlNC00L3QsNC90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+ItCd0LXQvNCw0ZQg0LzQtdGA0LXQttGWIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg0LLQuNC80LrQvdC10L3QviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiLQktGW0LTQvtCx0YDQsNC20LXQvdC90Y8gV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLQkdC10LfQtNGA0L7RgtC+0LLQtSDQstGW0LTQvtCx0YDQsNC20LXQvdC90Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4i0KLRgNCw0L3RgdC70Y7QstCw0YLQuCDQtdC60YDQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i0K/RgdC60YDQsNCy0ZbRgdGC0YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i0JDQktCi0J4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i0KHQv9C+0LLRltGJ0LXQvdC90Y8g0LfigJnRj9Cy0LvRj9GO0YLRjNGB0Y8g0YLRg9GCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i0J7RgtGA0LjQvNGD0LnRgtC1INC00L4g0L3QuNGFINC00L7RgdGC0YPQvyDQsdGD0LTRjC3QutC+0LvQuCwg0L/RgNC+0LLRltCy0YjQuCDQv9Cw0LvRjNGG0LXQvCDRg9C90LjQty5cbtCX0L3QvtCy0YMg0L/RgNC+0LLQtdC00ZbRgtGMINGD0L3QuNC3LCDRidC+0LEg0LLRltC00LrRgNC40YLQuCDQtdC70LXQvNC10L3RgtC4INC60LXRgNGD0LLQsNC90L3RjyDRgdC40YHRgtC10LzQuC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLQk9C+0YDRgtCw0LnRgtC1INCy0ZbQtCDQutGA0LDRjiDQtdC60YDQsNC90LAsINGJ0L7QsSDQt+KAmdGP0LLQuNC70LDRgdGMINC/0LDQvdC10LvRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i0J/RgNC+0LLQtdC00ZbRgtGMINC/0LDQu9GM0YbQtdC8INCy0ZbQtCDQutGA0LDRjiDQtdC60YDQsNC90LAsINGJ0L7QsSDQt+KAmdGP0LLQuNC70LDRgdGMINC90LDQstGW0LPQsNGG0ZbQudC90LAg0L/QsNC90LXQu9GMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+ItCg0LXQttC40Lwg0ZbQvdCy0LXRgNGB0ZbRlyDQutC+0LvRjNC+0YDRltCyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i0KDQtdC20LjQvCDQv9C+0YHQuNC70LXQvdC+0LPQviDQutC+0L3RgtGA0LDRgdGC0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+ItCg0LXQttC40Lwg0LrQvtGA0LjQs9GD0LLQsNC90L3RjyDQutC+0LvRjNC+0YDRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i0JzQtdGA0LXQttCwINC80L7QttC1XG7QstGW0LTRgdGC0LXQttGD0LLQsNGC0LjRgdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLQn9C+0YjRg9C6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+ItCf0YDQvtCy0LXQtNGW0YLRjCDQv9Cw0LvRjNGG0LXQvCDRg9Cz0L7RgNGDLCDRidC+0LEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+ItCf0YDQvtCy0LXQtNGW0YLRjCDQv9Cw0LvRjNGG0LXQvCDQu9GW0LLQvtGA0YPRhywg0YnQvtCxIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCmluZGV4IGFjYzdlMGU1Li43MDBjMjBkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iTHXDtG4gY2hvIHBow6lwIHThu6sgbcOheSB0w61uaCBuw6B5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iVC5waMOzbmcgxJHhu4MgbOG6pXAgxJHhuqd5IG0uaMOsbmgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iR2nDo24gcmEgxJHhu4MgbOG6pXAgxJHhuqd5IG0uaMOsbmgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJUaHUgcGjDs25nIHTGsMahbmcgdGjDrWNoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IktoaSDhu6luZyBk4bulbmcgxJHGsOG7o2MgdGhp4bq/dCBr4bq/IGNobyBt4buZdCBtw6BuIGjDrG5oIG5o4buPIGjGoW4sIMSRaeG7gXUga2hp4buDbiB0aHUgcGjDs25nIHPhur0geHXhuqV0IGhp4buHbiBiw6puIGPhuqFuaCDEkeG7k25nIGjhu5MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IsSQYW5nIGzGsHUg4bqjbmggY2jhu6VwIG3DoG4gaMOsbmguLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLEkGFuZyBsxrB1IOG6o25oIGNo4bulcCBtw6BuIGjDrG5oLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLhuqJuaCBjaOG7pXAgbcOgbiBow6xuaCDEkWFuZyDEkcaw4bujYyBsxrB1LiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJUcmFuZyBjaOG7pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IlRyw6xuaCDEkcahbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IuG7qG5nIGThu6VuZyBn4bqnbiDEkcOieSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IlTDrG0ga2nhur9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+Ik3DoXkg4bqjbmgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+Ik7DunQgY2h1eeG7g24gcGjGsMahbmcgdGjhu6ljIG5o4bqtcC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iTsO6dCB0aHUgcGjDs25nIGto4bqjIG7Eg25nIHTGsMahbmcgdGjDrWNoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iVGh1IHBow7NuZyBtw6BuIGjDrG5oIGzhu5tuIGjGoW4gaG/hurdjIG5o4buPIGjGoW4uIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iUGluIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iQ2jhur8gxJHhu5kgdHLDqm4gbcOheSBiYXkgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iVuG7iyB0csOtIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQsOhbyB0aOG7qWMgxJHGsOG7o2MgxJHhurd0IGNobyA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IsSQw6MgdOG6r3QgZOG7ryBsaeG7h3UgMkctM0ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLEkMOjIHThuq90IGThu68gbGnhu4d1IDRHIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IsSQw6Mga+G6v3QgbuG7kWkgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IsSQYW5nIHTDrG0ga2nhur9tIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJW4buLIHRyw60gxJHhurd0IGLhu59pIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IlnDqnUgY+G6p3UgduG7gSB0aMO0bmcgdGluIHbhu4sgdHLDrSDEkWFuZyBob+G6oXQgxJHhu5luZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IljDs2EgdOG6pXQgY+G6oyB0aMO0bmcgYsOhby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iVGjDtG5nIHRpbiB24buBIOG7qW5nIGThu6VuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iTcOgbiBow6xuaCBz4bq9IHhvYXkgdOG7sSDEkeG7mW5nLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iTcOgbiBow6xuaCBoaeG7h24gYuG7iyBraMOzYSB0aGVvIGjGsOG7m25nIG5nYW5nLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJNw6BuIGjDrG5oIGhp4buHbiBi4buLIGtow7NhIHRoZW8gaMaw4bubbmcgZOG7jWMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IlThu6cgdHLGsG5nIGLDoHkgYsOhbmggbmfhu410Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkNo4bq/IMSR4buZIG5n4bunIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IkNo4bq/IMSR4buZIHRyw6puIG3DoXkgYmF5Ijwvc3RyaW5nPgpAQCAtMTgxLDYgKzE4Myw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IsSQ4buZIHPDoW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJU4buxIMSR4buZbmcgeG9heSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJLaMOzYSB4b2F5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IsSQw6Mga2jDs2Eg4bufIGNo4bq/IMSR4buZIHhvYXkgZOG7jWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IsSQw6Mga2jDs2Eg4bufIGNo4bq/IMSR4buZIHhvYXkgbmdhbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iUGjGsMahbmcgdGjhu6ljIG5o4bqtcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Ilbhu4sgdHLDrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJU4bqvdCB24buLIHRyw60iPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IkNoxrBhIMSRxrDhu6NjIGvhur90IG7hu5FpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+Iktow7RuZyBjw7MgbeG6oW5nIG7DoG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJU4bqvdCBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJIaeG7g24gdGjhu4sgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJIaeG7g24gdGjhu4sga2jDtG5nIGTDonkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iVHJ1eeG7gW4gbcOgbiBow6xuaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IsSQ4buZIHPDoW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IlThu7AgxJDhu5hORyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJUaMO0bmcgYsOhbyB4deG6pXQgaGnhu4duIHThuqFpIMSRw6J5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iVHJ1eSBj4bqtcCB2w6BvIGNow7puZyBi4bqldCBr4buzIGzDumMgbsOgbyBi4bqxbmcgY8OhY2ggdnXhu5F0IHh14buRbmcuXG5WdeG7kXQgbOG6oWkgeHXhu5FuZyDEkeG7gyBoaeG7g24gdGjhu4sgY8OhYyDEkWnhu4F1IGtoaeG7g24gaOG7hyB0aOG7kW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IlZ14buRdCBj4bqhbmggbcOgbiBow6xuaCDEkeG7gyBoaeG7g24gdGjhu4sgdGhhbmgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlZ14buRdCB04burIGPhuqFuaCBtw6BuIGjDrG5oIMSR4buDIGhp4buDbiB0aOG7iyB0aGFuaCBo4buHIHRo4buRbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iQ2jhur8gxJHhu5kgxJHhuqNvIG5nxrDhu6NjIG3DoHUgc+G6r2MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJDaOG6vyDEkeG7mSB0xrDGoW5nIHBo4bqjbiB0xINuZyBjxrDhu51uZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iQ2jhur8gxJHhu5kgaGnhu4d1IGNo4buJbmggbcOgdSBz4bqvYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iTeG6oW5nIGPDsyB0aOG7g1xuxJHGsOG7o2MgZ2nDoW0gc8OhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iVMOsbSBraeG6v20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iVHLGsOG7o3QgbMOqbiDEkeG7gyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iVHLGsOG7o3Qgc2FuZyB0csOhaSDEkeG7gyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCmluZGV4IDBhNjJlZTMuLjU5MDlmYmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IuS4gOW+i+WFgeiuuOS9v+eUqOi/meWPsOiuoeeul+acuui/m+ihjOiwg+ivlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Iue8qeaUvuS7peWhq+a7oeWxj+W5lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLmi4nkvLjku6Xloavmu6HlsY/luZUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLlhbzlrrnmgKfnvKnmlL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i5aaC5p6c5bqU55So5piv6ZKI5a+56L6D5bCP5bGP5bmV6K6+6K6h55qE77yM5YiZ5pe26ZKf5peB5Lya5pi+56S657yp5pS+5o6n5Lu244CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Iuato+WcqOS/neWtmOWxj+W5leaIquWbvi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+Iuato+WcqOS/neWtmOWxj+W5leaIquWbvi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i5q2j5Zyo5L+d5a2Y5bGP5bmV5oiq5Zu+44CCIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IuS4u+Wxj+W5lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IuiPnOWNlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IuacgOi/kei/kOihjOeahOW6lOeUqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IuaQnOe0oiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLnm7jmnLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+Iui+k+WFpeazleWIh+aNouaMiemSruOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLlhbzlrrnmgKfnvKnmlL7mjInpkq7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IuWwhuWwj+Wxj+W5leeahOWbvueJh+aUvuWkp+WcqOi+g+Wkp+Wxj+W5leS4iuaYvuekuuOAgiI8L3N0cmluZz4KQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+IuW3suWIoOmZpDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IuW3suWFs+mXremAmuefpeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i6YCa55+l5qCP44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IuW/q+mAn+iuvue9ruOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiLlv6vmjbforr7nva7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4i5pyA6L+R5L2/55So55qE5bqU55So44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IueUqOaIt++8mjx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz7vvIw8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CkBAIC0xNTUsMjMgKzE1NSwyNSBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IueUteaxoOeUtemHj++8mjx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLpo57ooYzmqKHlvI/vvJo8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IuiTneeJme+8mjx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLkvY3nva7kv6Hmga/mnI3liqE8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4i6Ze56ZKf5bey6K6+572u5Li677yaPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLTNHIOaVsOaNrue9kee7nOW3suWBnOeUqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIOaVsOaNrue9kee7nOW3suWBnOeUqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX21vYmlsZV90aXRsZSIgbXNnaWQ9IjEwNDYwNDcyNDg4NDQ4MjEyMDIiPiLnp7vliqjmlbDmja7lt7LlgZznlKgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiLmlbDmja7lt7LlgZznlKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4i56e75Yqo5pWw5o2u572R57uc5bey5YGc55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4i5pWw5o2u572R57uc5bey5YGc55SoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4i5oKo5bey6L6+5Yiw5oyH5a6a55qE5pWw5o2u5rWB6YeP5LiK6ZmQ44CCXG5cbuWmguaenOaCqOmHjeaWsOWQr+eUqOaVsOaNru+8jOi/kOiQpeWVhuWPr+iDveS8muaUtuWPluebuOW6lOeahOi0ueeUqOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiLph43mlrDlkK/nlKjmlbDmja7ov57mjqUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4i5pyq6L+e5o6l5LqS6IGU572RIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV0xBTiDlt7Lov57mjqUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+Iuato+WcqOaQnOe0oiBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i5bey6YCa6L+HIEdQUyDnoa7lrprkvY3nva4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLlupTnlKjlj5Hlh7rkuobmnInmlYjkvY3nva7kv6Hmga/or7fmsYIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLmuIXpmaTmiYDmnInpgJrnn6XjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i5bqU55So5L+h5oGvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLlsY/luZXkvJroh6rliqjml4vovazjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IuWxj+W5lemUgeWumuS4uuaoquWQkeaooeW8j+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLlsY/luZXplIHlrprkuLrnurXlkJHmqKHlvI/jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4i5p6c5Ya76LGG5aSn5Lmx6IieIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IueUnOWTgeebkiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLkupLliqjlsY/kv50iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiLku6XlpKrnvZEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IumjnuihjOaooeW8jyI8L3N0cmluZz4KQEAgLTE3OSwxNSArMTgxLDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnZWRfbGFiZWwiIG1zZ2lkPSI4ODY1NDEzMDc5NDE0MjQ2MDgxIj4i5YWF55S15a6M5oiQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IuiTneeJmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IuiTneeJme+8iDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDlj7Dorr7lpIfvvIkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IuiTneeJmeW3suWFs+mXrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4i6JOd54mZ77ya5YWz6ZetIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLkuq7luqYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IuiHquWKqOaXi+i9rCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLlsY/luZXmlrnlkJHlt7LplIHlrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i5bGP5bmV5pa55ZCR77ya6ZSB5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+IumUgeWumuS4uue6teWQkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwiIG1zZ2lkPSI3MjE2MjY1NjcxMjc2MDg2NTkzIj4i6ZSB5a6a5Li65qiq5ZCRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Iui+k+WFpeazlSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCAoNTAxMTMyNzA0ODc0ODc2MjI1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwgKDc0NjQ1NDQwODY1MDczMzE0NTkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLkvY3nva7kv6Hmga8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i5L2N572u5L+h5oGv5pyN5Yqh5bey5YWz6ZetIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+IuWqkuS9k+iuvuWkhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4i5Y+q6IO95ouo5omT57Sn5oCl5ZG85pWR55S16K+dIjwvc3RyaW5nPgpAQCAtMTk3LDEzICsxOTksMTUgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV0xBTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLmnKrov57mjqUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i5peg572R57ucIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV0xBTiDlt7LlhbPpl60iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV0xBTiDmmL7npLoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLml6Dnur/mmL7npLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXTEFO77ya5YWz6ZetIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IuaKleWwhOWxj+W5lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuS6ruW6piI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLoh6rliqgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i6YCa55+l5Lya5pi+56S65Zyo6L+Z6YeMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i5ZCR5LiL5ruR5Yqo5Y+v6ZqP5pe25p+l55yL6YCa55+l44CCXG7lho3mrKHlkJHkuIvmu5Hliqjlj6/kvb/nlKjns7vnu5/mjqfliLblip/og73jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLku47ovrnnvJjlkJHph4zmu5Hlj6/mmL7npLrns7vnu5/moI8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IuS7juWxj+W5lei+uee8mOWQkemHjOa7keWKqOWNs+WPr+aYvuekuuezu+e7n+agjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLpopzoibLlj43ovazmqKHlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLlop7lvLrlr7nmr5TluqbmqKHlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IuminOiJsuagoeato+aooeW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i572R57uc5Y+v6IO95LyaXG7lj5fliLDnm5HmjqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuaQnOe0oiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLlkJHkuIrmu5Hliqjku6U8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLlkJHlt6bmu5Hliqjku6U8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckhLLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJISy1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTVkZjQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJISy1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiLlsY/luZXnj77lt7LpjpblrprngrrmqavlkJHmqKHlvI8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyOTM0NwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4i57O757Wx55So5oi25LuL6Z2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+Iua4hemZpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IuW+nua4heWWruS4reenu+mZpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiLmh4nnlKjnqIvlvI/os4foqIoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IuaykuacieacgOi/keeahOaHieeUqOeoi+W8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4i6Zec6ZaJ5pyA6L+R5L2/55So55qE5oeJ55So56iL5byPIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMSDlgIvmnIDov5Hkvb/nlKjnmoTmh4nnlKjnqIvlvI8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCDlgIvmnIDov5Hkvb/nlKjnmoTmh4nnlKjnqIvlvI8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i54Sh6YCa55+lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiLmjIHnuozpgLLooYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4i6YCa55+lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4i6YCj5o6l5YWF6Zu75ZmoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4i6Zu75rGg5Y2z5bCH55So55uh44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4i5Ymp6aSYIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IuS4jeaUr+aPtCBVU0Ig5YWF6Zu744CCXG7lg4Xog73kvb/nlKjpmqjpmYTnmoTlhYXpm7vlmajjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4i6Zu75rGg5L2/55So5oOF5rOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4i6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0ODc5ODc5Njk4NTAwOTU1MzAwIj4i6aOb6KGM5qih5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IuiHquWLleaXi+i9ieieouW5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+IumXnOmWiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4i6Ieq5YuVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i6YCa55+lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IuW3sue2k+eUseiXjeeJmemAsuihjOe2sue1oeWFseS6qyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IuioreWumui8uOWFpeaWueW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+IuWvpumrlOmNteebpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiLlhYHoqLHjgIw8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+44CN5oeJ55So56iL5byP5a2Y5Y+WIFVTQiDoo53nva7ll47vvJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IuWFgeioseOAjDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz7jgI3mh4nnlKjnqIvlvI/lrZjlj5YgVVNCIOmFjeS7tuWXju+8nyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i6YCj5o6l6YCZ5YCLIFVTQiDoo53nva7mmYLllZ/nlKggPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDll47vvJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IumAo+aOpemAmeWAiyBVU0Ig6YWN5Lu25pmC5ZWf55SoIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g5ZeO77yfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i5bey5a6J6KOd55qE5oeJ55So56iL5byP5Z2H54Sh5rOV5a2Y5Y+W6YCZ5YCLIFVTQiDphY3ku7bvvIzlpoLopoHpgLLkuIDmraXnnq3op6PpgJnlgIvphY3ku7bvvIzoq4vngI/opr0gPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IlVTQiDphY3ku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+IuingOeciyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IumgkOioreeUqOaWvOmAmeWAiyBVU0Ig6KOd572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i6aCQ6Kit55So5pa86YCZ5YCLIFVTQiDphY3ku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IuWFgeiosSBVU0Ig6Zmk6Yyv5ZeO77yfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+IumAmemDqOmbu+iFpueahCBSU0Eg5a+G6ZGw5oyH57SL5aaC5LiL77yaXG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLkuIDlvovlhYHoqLHpgI/pgY7pgJnpg6jpm7vohabpgLLooYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLmlL7lpKfngrrlhajonqLluZUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i5pS+5aSn54K65YWo6J6i5bmVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Iuato+WcqOWEsuWtmOWxj+W5leaTt+WPlueVq+mdoi4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+Iuato+WcqOWEsuWtmOWxj+W5leaTt+WPlueVq+mdoi4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i5q2j5Zyo5YSy5a2Y5bGP5bmV5pO35Y+W55Wr6Z2i44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiLlt7Lmk7flj5blsY/luZXnlavpnaLjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4i6LyV6Ke45Y2z5Y+v5p+l55yL5bGP5bmV5pO35Y+W55Wr6Z2i44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLnhKHms5Xmk7flj5blsY/luZXnlavpnaLjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IueEoeazleWEsuWtmOWxj+W5leaTt+WPlueVq+mdou+8jOWEsuWtmOijnee9ruWPr+iDveato+WcqOS9v+eUqOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IlVTQiDmqpTmoYjlgrPovLjpgbjpoIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLmjpvmjqXngrrlqpLpq5Tmkq3mlL7lmaggKE1UUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLmjpvmjqXngrrnm7jmqZ8gKFBUUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+IuWuieijnSBNYWMg5bCI55So55qE44CMQW5kcm9pZCDmqpTmoYjlgrPovLjjgI3mh4nnlKjnqIvlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiLov5Tlm54iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i6aaW6aCBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i6YG45ZauIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i5pyA6L+R5L2/55So55qE5oeJ55So56iL5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i5pCc5bCLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IuebuOapnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i5YiH5o+b6Ly45YWl5rOV5oyJ6YiV44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IuebuOWuueaAp+e4ruaUvuaMiemIleOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i5bCH6LyD5bCP6J6i5bmV55qE55Wr6Z2i5pS+5aSn5Zyo6LyD5aSn6J6i5bmV5LiK6aGv56S644CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iMjcwNzAyNzYzMzI0Mjk4MzM3MCI+IuiXjeeJmemAo+e3muW3suW7uueri+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9Ijc0MTY2NDg2Njk5NzY4NzAxNzUiPiLol43niZnpgKPnt5rlt7LkuK3mlrfjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiLmnKrlronoo53pm7vmsaDjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiLpm7vmsaDpm7vph4/ngrrkuIDmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdHdvX2JhcnMiIG1zZ2lkPSI4NTAwNjUwNDM4NzM1MDA5OTczIj4i6Zu75rGg6Zu76YeP54K65YWp5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4i6Zu75rGg6Zu76YeP54K65LiJ5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4i6Zu75rGg5bey5ru/44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19waG9uZSIgbXNnaWQ9IjQ4OTQ3MDg5MzcwNTI2MTEyODEiPiLmspLmnInpm7voqbHoqIromZ/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiLpm7voqbHoqIromZ/lvLfluqbngrrkuIDmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+Iumbu+ipseioiuiZn+W8t+W6pueCuuWFqeagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiLpm7voqbHoqIromZ/lvLfluqbngrrkuInmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjQ3MTgzNDg2ODU4MDc1Nzg5OCI+Iumbu+ipseioiuiZn+a7v+agvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiLmspLmnInmlbjmk5rntrLntaHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiLmlbjmk5rntrLntaHoqIromZ/lvLfluqbngrrkuIDmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4i5pW45pOa57ay57Wh6KiK6Jmf5by35bqm54K65YWp5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i5pW45pOa57ay57Wh6KiK6Jmf5by35bqm54K65LiJ5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3NpZ25hbF9mdWxsIiBtc2dpZD0iMjcwODM4NDYwODEyNDUxOTM2OSI+IuaVuOaTmue2sue1oeioiuiZn+a7v+agvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4iV2lGaSDlt7Lpl5zplonjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2lGaSDpgKPnt5rlt7LkuK3mlrfjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaUZpIOioiuiZn+W8t+W6pueCuuS4gOagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiJXaUZpIOioiuiZn+W8t+W6pueCuuWFqeagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IldpRmkg6KiK6Jmf5by35bqm54K65LiJ5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IldpRmkg6KiK6Jmf5bey5ru/44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiLmspLmnIkgV2lNQVgg6KiK6Jmf44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIOioiuiZn+W8t+W6puS4gOagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4iV2lNQVgg6KiK6Jmf5by35bqm5YWp5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+IldpTUFYIOioiuiZn+W8t+W6puS4ieagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4iV2lNQVgg6KiK6Jmf5ru/5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaWduYWwiIG1zZ2lkPSI3MDY0NjQ1MzIwNzgyNTg1MTY3Ij4i5rKS5pyJ6KiK6Jmf44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+IuacqumAo+e3muOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IuioiuiZn+W8t+W6pueCuumbtuagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfb25lX2JhciIgbXNnaWQ9IjE2ODU3MzAxMTMxOTIwODE4OTUiPiLoqIromZ/lvLfluqbngrrkuIDmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IuioiuiZn+W8t+W6pueCuuWFqeagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdGhyZWVfYmFycyIgbXNnaWQ9IjI2NDgyNDE0MTUxMTkzOTY2NDgiPiLoqIromZ/lvLfluqbngrrkuInmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+IuioiuiZn+W3sua7v+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiLplovllZ/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IumXnOmWieOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19jb25uZWN0ZWQiIG1zZ2lkPSI4MzY2MjU2NjkzNzE5NDk5NjY1Ij4i5bey6YCj57ea44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i5ryr6YGKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IueEoSBTSU0g5Y2h44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IuiXjeeJmeaVuOaTmumAo+e3muOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+Iumjm+iIquaooeW8j+OAgiI8L3N0cmluZz4KKyAgICA8IS0tIFN0cmluZy5mb3JtYXQgZmFpbGVkIGZvciB0cmFuc2xhdGlvbiAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwgKDc0NTE0NzQxODcxMTMzNzE5NjUpIC0tPgorICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+Iuezu+e1seioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4i6YCa55+l44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+Iua4hemZpOmAmuefpeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTIOW3suWVn+eUqOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiLmraPlnKjlj5blvpcgR1BTIOioiuiZn+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4iVGVsZVR5cGV3cml0ZXIgKFRUWSkg5bey5ZWf55So44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IumItOiBsumch+WLleOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLpiLTogbLpnZzpn7PjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4i44CMPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+44CN5bey6Zec6ZaJ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i6YCa55+l5bey6Zec6ZaJ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiLpgJrnn6XmrITjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4i5b+r6YCf6Kit5a6a44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IuacgOi/keS9v+eUqOeahOaHieeUqOeoi+W8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiLnlKjmiLbvvJo8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+44CBPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4i5rWB5YuV5pW45pOa6YCj57ea77yaPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz7jgIE8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz7jgIE8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i6Zu75rGg6Zu76YeP77yaPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Iumjm+iIquaooeW8j++8mjx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i6JeN54mZ77yaPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IuWumuS9jeacjeWLmTx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLprKfpkJjlt7LoqK3lrprngrrvvJo8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i5bey5YGc55SoIDJHLTNHIOaVuOaTmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IuW3suWBnOeUqCA0RyDmlbjmk5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4i5bey5YGc55So5rWB5YuV5pW45pOaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4i5pW45pOa5YGc55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4i5oKo5bey5Yiw6YGU5oyH5a6a55qE5pW45pOa55So6YeP5LiK6ZmQ44CCXG5cbuWmguaenOaCqOmHjeaWsOWVn+eUqOaVuOaTmuWCs+i8uO+8jOa1geWLlee2sue1oeS+m+aHieWVhuWPr+iDveacg+WQkeaCqOaUtuiyu+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiLph43mlrDllZ/nlKjmlbjmk5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4i5rKS5pyJ5LqS6IGv57ay6YCj57eaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg5bey6YCj57eaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLmraPlnKjmkJzlsIsgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkdQUyDlt7LlrprkvY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLkvY3nva7opoHmsYLllZ/li5XkuK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLmuIXpmaTmiYDmnInpgJrnn6XjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i5oeJ55So56iL5byP6LOH6KiKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLlsY/luZXmnIPoh6rli5Xml4vovYnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IuWxj+W5leW3sumOluWumueCuuapq+WQkeaooeW8j+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLlsY/luZXlt7LpjpblrprngrrlnoLnm7TmqKHlvI/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iRGVzc2VydCBDYXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkRheWRyZWFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4i5Lul5aSq57ayIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLpo5vooYzmqKHlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnaW5nX2xhYmVsIiBtc2dpZD0iNDkwMDc0Nzc0NDY1MzA5MjA5Ij4i5YWF6Zu75LitICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiLlhYXpm7vlrozmiJAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4i6JeN54mZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4i6JeN54mZICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g6YOo6KOd572uKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4i6JeN54mZ6Zec6ZaJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLkuq7luqYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IuiHquWLleaXi+i9iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLlt7LpjpblrprlsY/luZXml4vovYnlip/og70iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSIxNTUzMTMxMjkwMDY2MjMwNzc1Ij4i5bey6Y6W5a6a54K655u05ZCRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiLlt7LpjpblrprngrrmqavlkJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i6Ly45YWl5rOVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i5L2N572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IuS9jee9rumXnOmWiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLlqpLpq5Too53nva4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IuWPquWPr+aSpeaJk+e3iuaApembu+ipsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+IuioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4i5pmC6ZaTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl9sYWJlbCIgbXNnaWQ9IjUyMzg5OTU2MzIxMzA4OTc4NDAiPiLmiJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IuacqumAo+e3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLmspLmnInntrLntaEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSDpl5zplokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4i5pS+6YCB6J6i5bmVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i5Lqu5bqmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuiHquWLlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLoibLlvanlj43ovYnmqKHlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLlop7lvLflsI3mr5TmqKHlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IuiJsuW9qeagoea6luaooeW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i57ay57Wh5Y+v6IO95pyDXG7lj5fliLDnm6PmjqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuaQnOWwiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLlkJHkuIrmu5Hli5XljbPlj688eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLlkJHlt6bmu5Hli5XljbPlj688eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKaW5kZXggMmNmZGI1OS4uODNmZGQxMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i5LiA5b6L5YWB6Kix6YCP6YGO6YCZ5Y+w6Zu76IWm6YCy6KGMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i5pS+5aSn54K65YWo6J6i5bmVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IuaUvuWkp+eCuuWFqOieouW5lSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IuebuOWuueaAp+e4ruaUviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiLln7fooYzlsIjngrrovIPlsI/onqLluZXoqK3oqIjnmoTmh4nnlKjnqIvlvI/mmYLvvIzns7vntbHmnIPlnKjmmYLpkJjml4Hpoa/npLrnuK7mlL7mjqfliLbpoIXjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i5q2j5Zyo5YSy5a2Y6J6i5bmV5pO35Y+W55Wr6Z2i4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i5q2j5Zyo5YSy5a2Y6J6i5bmV5pO35Y+W55Wr6Z2i4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLmraPlnKjlhLLlrZjonqLluZXmk7flj5bnlavpnaLjgIIiPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i5Li76J6i5bmVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i6YG45ZauIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i5pyA6L+R5L2/55So55qE5oeJ55So56iL5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i5pCc5bCLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IuebuOapnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i5YiH5o+b6Ly45YWl5rOV5oyJ6YiV44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IuebuOWuueaAp+e4ruaUvuaMiemIleOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i5bCH6LyD5bCP6J6i5bmV55qE55Wr6Z2i5pS+5aSn5Zyo6LyD5aSn6J6i5bmV5LiK6aGv56S644CCIjwvc3RyaW5nPgpAQCAtMTU1LDYgKzE1NSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i6Zu75rGg6Zu76YeP77yaPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Iumjm+iIquaooeW8j++8mjx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i6JeN54mZ77yaPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IuWumuS9jeacjeWLmTx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLprKfpkJjlt7LoqK3lrprngrrvvJo8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i5bey5YGc55SoIDJHLTNHIOaVuOaTmiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IuW3suWBnOeUqCA0RyDmlbjmk5oiPC9zdHJpbmc+CkBAIC0xNjYsMTIgKzE2NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg5bey6YCj57eaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLmraPlnKjmkJzlsIsgR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkdQUyDlt7LlrprkvY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLmnInkvY3nva7os4foqIropoHmsYIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLmuIXpmaTmiYDmnInpgJrnn6XjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i5oeJ55So56iL5byP6LOH6KiKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLonqLluZXmnIPoh6rli5Xml4vovYnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IuieouW5leW3sumOluWumueCuuapq+WQkeaooeW8j+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLonqLluZXlt7LpjpblrprngrrlnoLnm7TmqKHlvI/jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iRGVzc2VydCBDYXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IuS8keecoOaooeW8jyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IuS5meWkque2sui3ryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i6aOb6Iiq5qih5byPIjwvc3RyaW5nPgpAQCAtMTgzLDYgKzE4NSw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IuS6ruW6piI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4i6Ieq5YuV5peL6L2JIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IuW3sumOluWumuieouW5leaXi+i9ieWKn+iDvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCIgbXNnaWQ9IjE1NTMxMzEyOTAwNjYyMzA3NzUiPiLlt7LpjpblrprngrrnuLHlkJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iNzIxNjI2NTY3MTI3NjA4NjU5MyI+IuW3sumOluWumueCuuapq+WQkSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLovLjlhaXms5UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLlrprkvY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i5a6a5L2N5pyN5YuZ5bey6Zec6ZaJIjwvc3RyaW5nPgpAQCAtMTk2LDEyICsyMDAsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLmnKrpgKPnt5oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i5rKS5pyJ57ay6LevIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4i6Zec6ZaJIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpIOmhr+ekuuijnee9riI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IueEoee3muieouW5leWIhuS6qyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLmipXmlL7onqLluZUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLkuq7luqYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i6Ieq5YuVIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+Iuezu+e1seacg+WcqOmAmeijoemhr+ekuumAmuefpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IuWQkeS4i+a7keWLleWNs+WPr+maqOaZguWtmOWPlumAmuefpeOAglxu5YaN5qyh5ZCR5LiL5ruR5YuV5Y2z5Y+v5L2/55So57O757Wx5o6n5Yi26aCF44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4i5ruR5YuV6J6i5bmV6YKK57ej5Y2z5Y+v6aGv56S65bCO6Ka95YiXIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiLlvp7onqLluZXpgornt6PlkJHlhafmu5Hli5XljbPlj6/poa/npLrlsI7opr3liJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i5b2p6Imy5Y+N6L2J5qih5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i5aKe5by35bCN5q+U5qih5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLoibLlvanmoKHmraPmqKHlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Iue2sui3r+WPr+iDvVxu5Y+X5Yiw55uj5o6nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLmkJzlsIsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i5ZCR5LiK5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i5ZCR5bem5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAppbmRleCAwMDdkMzM4Li5kNjc2YjVjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTI0LDEwICsyNCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4iU3VzYSBvaGx3aW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+IlVsd2F6aSBsd2Vuc2l6YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4iQXppa2hvIGl6aW5obGVsbyB6b2t1c2ViZW56YSB6YWthbXV2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4iU3VzYSBpemluc2l6YSB6YWthbXVtdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IlN1c2EgaXppbmhsZWxvIHpva3VzZWJlbnphIHpha2FtdW12YSI8L3N0cmluZz4KICAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KICAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+Ikluc2l6YSBleWktMSB5YWthbXVtdmEiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCBpemluc2l6YSB6YWthbXVtdmEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCBpemluaGxlbG8gem9rdXNlYmVuemEgemFrYW11bXZhIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IkF6aWtobyBpemF6aXNvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiJPa3VxaHViZWtheW8iPC9zdHJpbmc+CkBAIC00NywxMSArNDcsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiJVa3VzZWJlbnppc2EgaS1CbHVldG9vdGggbmplbmdlbW9kZW11Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4iSXppbHVuZ2lzZWxlbG8gemV6aW5kbGVsYSB6b2t1ZmFrd2F5byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+IlVrd2FraGVrYSBrd2VraGliaG9kaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiJWdW1lbGEgaW5zaXphIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gdWt1dGhpIHVmaW55ZWxlbGUgZXppbnR3ZW5pIGV6aXBodW1hIG5lLVVTQj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IlZ1bWVsYSBpbnNpemEgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiB1a3V0aGkgdWZpbnllbGVsZSBlemludHdlbmkgZXppcGh1bWEgbmUtVVNCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiJWdW1lbGEgdWhsZWxvIGxva3VzZWJlbnphIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gdWt1dGhpIHVmaW55ZWxlbGUgZXppbnR3ZW5pIGV6aXBodW1hIG5lLVVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IlZ1bWVsYSB1aGxlbG8gbG9rdXNlYmVuemEgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiB1a3V0aGkgdWZpbnllbGVsZSBlemludHdlbmkgZXppcGh1bWEgbmUtVVNCPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4iVnVsYSA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IHVtYSBsZWRpdmF5aXNpIHllLVVTQiBpeGh1bnlpd2U/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiJWdWxhIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4gdW1hIGxlLWFjY2Vzc29yeSB5ZS1VU0IgaXhodW55aXdlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4iQXppa2hvIGl6aW5zaXphIGV6aXNlYmVuemUgbmdlemludG8gemUtVVNCLiBGdW5kYSBva3dlbmdleml3ZSBuZ2FsZSBpbnRvIGt3aSA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IkF6aWtobyBpemluaGxlbG8gem9rdXNlYmVuemEgZXppc2ViZW56ZSBuZ2V6aW50byB6ZS1VU0IuIEZ1bmRhIG9rd2VuZ2V6aXdlIG5nYWxlIGludG8ga3dpIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJhbWEtYWNjZXNzb3J5IGUtVVNCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiJCdWthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4iU2ViZW56aXNhIG5nb2t1emVuemFrYWxlbGF5byB5YWxlIGRpdmF5aXNpIHllLVVTQiI8L3N0cmluZz4KQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iSGxhbGEgdXZ1bWVsYSBuamFsbyBrdXN1a2Ega3VsZSBraG9tcHl1dGhhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iU29uZGV6YSB1a3VnY3dhbGlzYSBpc2lrcmluaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJOd2ViYSB1a3VnY3dhbGlzYSBpc2lrcmluaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IlVrdWhhbWJlbGFuYSBLb2t1c29uZGV6YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJVbWEgdWhsZWxvIGxva3VzZWJlbnphIGx3ZW56ZWx3ZSBpc2lrcmluaSBlemluY2FuZSwgaXNpbGF3dWxpIHNva3Vzb25kZXphIHNpem92ZWxhIG5nYWt1eWl3YXNoaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iSWxvbmRvbG96IHVtZmFuZWtpc28gd2Vza3JpbmkuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJJbG9uZG9sb3ogdW1mYW5la2lzbyB3ZXNrcmluaS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iVW1mYW5la2lzbyB3ZXNrcmluaSB1eWFsb25kb2xvendhLiI8L3N0cmluZz4KQEAgLTczLDExICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iT2t1a2hldGh3YSBrb2t1ZGx1bGlzd2Ega3dlZmF5ZWxhIHllLVVTQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+Ikxlbmdpc2Egbmplbmdlc2lkbGFsaSBzZW1lZGl5YSAoTVRQKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+Ikxlbmdpc2EgaWtoYW1lcmEgKFBUUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+IkZha2EgaW5zaXphIHlva3VkbHVsaXN3YSBLd2VmYXllbGEgeWUtQW5kcm9pZCBrd2ktTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiJGYWthIHVobGVsbyBsb2t1c2ViZW56YSB5b2t1ZGx1bGlzd2EgS3dlZmF5ZWxhIHllLUFuZHJvaWQga3dpLU1hYyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IkVtdXZhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IkVraGF5YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IkltZW55dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+Ikl6aW5obGVsbyB6b2t1c2ViZW56YSB6YWthbXV2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IlNlc2hhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IklraGFtZWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJWdWxhIGluZGxlbGEgeW9rdW5nZW5hIHllbmtpbm9iaG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iSW5raW5vYmhvIGV2dW1lbGVraWxlIHlva3Vzb25kZXphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJTb25kZXphIGthbmNhbmUgZXNpa3JpbmluaSBlc2lraHVkbHdhbmEiPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJJYmhldGhyaSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Ikltb2RpIHllbmRpemEgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iSS1CbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJJbmRhd28gaS08eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkktYWxhbXUgaXNldGhpd2UgbmdvLTx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iaWRhdGhhIHllLTJHLTNHIGl2aW1iZWx3ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IklkYXRoYSB5ZS00RyBpdmltYmVsd2UiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iSS1XaS1GaSBpeGh1bnlpd2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IklzZXNoYSBpLUdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJJbmRhd28gaWhsZWx3ZSBpLUdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+Ikl6aWNlbG8gemVuZGF3byB6aXlhc2ViZW56YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IlN1c2Egem9ua2UgaXphemlzby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iVWx3YXppIGxvaGxlbG8gbG9rdXNlYmVuemEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IklzaWtyaW5pIHNpem9waGVuZHVrYSBuZ29rdXplbnpha2FsZWxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iSXNpa3Jpbmkgc2lraGl5ZWx3ZSBuZ29tdW1vIHdlLWxhbmRzY2FwZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iSXNpa3Jpbmkgc2lraGl5ZWx3ZSBuZ29tdW1vIHdlLXBvcnRyYWl0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJJLUJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IklzaWtod2FtYSBzb3N3aWRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IlVrdXBodXBoYSBlbWluaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkktRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IklzaW1vIHNlbmRpemEiPC9zdHJpbmc+CkBAIC0xODEsNiArMTgzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iVWt1Z3FhbWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IlVrdXBoZW5kdWxhIG5nb2t1emVuemFrYWxlbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iVWt1cGhlbmR1bGEga3VraGl5aXdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsIiBtc2dpZD0iMTU1MzEzMTI5MDA2NjIzMDc3NSI+Ikt1a2hpeWVsd2UgZWt1bWVuaSBuZ29idWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9IjcyMTYyNjU2NzEyNzYwODY1OTMiPiJLdWtoaXllbHdlIGVrd2FraGl3ZW5pIGt3ZXp3ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJJbmRsZWxhIHlva3VuZ2VuYXlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iSW5kYXdvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IkluZGF3byBpdmFsaXdlIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJBa3V4aHVueWl3ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJBeWlraG8gaW5ldGhpd2VraGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJJLVdpLUZpIGljaW1pbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iVWt1Ym9uaXN3YSBrd2UtV2ktIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iVWt1Ym9uaXNhIG9rdW5nZW5hemludGFtYm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iSXNpa3Jpbmkgc2FiYWxpbmdpc2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJVa3VncWFtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJPS1VaRU5aQUtBTEVMQVlPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+Ikl6YXppc28geml2ZWxhIGxhcGhhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iS3VmaW55ZWxlbGUgbm9tYSBrdW5pbmkgbmdva3Vzd2F5aXBoZWxhIHBoYW5zaS5cblN3YXlpcGhlbGEgcGhhbnNpIGZ1dGhpIG5nZXppbGF3dWxpIHplc2lzdGltdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJTd2F5aXBoYSB1bnFlbnFlbWEgd2VzaWtyaW5pIHVrdXplIHV2ZXplIGliaGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlN3YXlpcGhhIGt1c3VrZWxhIGt1bnFlbnFlbWEgdWt1emUgdXZlemUgaWJoYSB5ZXNpc3RpbXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iSW1vZGkgeW9rdWd1cXVsd2Ega29tYmFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+Ikltb2RpIGV0aHV0aHVraXNpd2UgeW9rdWdxYW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJJbW9kaSB5b2t1bHVuZ2lzYSB1bWJhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ikt1bmdlbnpla2EgaW5ldGhpd2VraGlcbmlxYXNoaXdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTZXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJTaGVsZWxpc2VsYSBuZ2VuaGxhIGt1LTx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJTaGVsZWxpc2VsYSBuZ2Frd2Vzb2t1bnhlbGUga3UtPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9hcnJheXMueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9hcnJheXMueG1sCmluZGV4IGJmYjYwMGQuLjFjZTQ5ODMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2FycmF5cy54bWwKQEAgLTIxLDIxICsyMSwyMSBAQAogICAgIAogICAgIDxhcnJheSBuYW1lPSJuYXZiYXJfc2VhcmNoX3RhcmdldHMiPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QCphbmRyb2lkOmRyYXdhYmxlL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYzwvaXRlbT4KKyAgICAgICAgPGl0ZW0+QGRyYXdhYmxlL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYzwvaXRlbT4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgIDwvYXJyYXk+CiAKICAgICA8YXJyYXkgbmFtZT0ibmF2YmFyX3NlYXJjaF90YXJnZXRfZGVzY3JpcHRpb25zIj4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkAqYW5kcm9pZDpzdHJpbmcvZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaDwvaXRlbT4KKyAgICAgICAgPGl0ZW0+QHN0cmluZy9kZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgPC9hcnJheT4KIAogICAgIDxhcnJheSBuYW1lPSJuYXZiYXJfc2VhcmNoX2RpcmVjdGlvbl9kZXNjcmlwdGlvbnMiPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QCphbmRyb2lkOnN0cmluZy9kZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXA8L2l0ZW0+CisgICAgICAgIDxpdGVtPkBzdHJpbmcvZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgPC9hcnJheT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvY29sb3JzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvY29sb3JzLnhtbAppbmRleCAwYmJkZWFkLi45MzAxNjE4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2NvbG9ycy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9jb2xvcnMueG1sCkBAIC0zNCw2ICszNCw4IEBACiAgICAgPGNvbG9yIG5hbWU9Im5vdGlmaWNhdGlvbl9wYW5lbF9zY3JpbV9jb2xvciI+I0IwMDAwMDAwPC9jb2xvcj4KICAgICA8Y29sb3IgbmFtZT0iYmF0dGVyeW1ldGVyX2ZyYW1lX2NvbG9yIj4jNjZGRkZGRkY8L2NvbG9yPjwhLS0gNDAlIHdoaXRlIC0tPgogICAgIDxjb2xvciBuYW1lPSJiYXR0ZXJ5bWV0ZXJfY2hhcmdlX2NvbG9yIj4jRkZGRkZGRkY8L2NvbG9yPgotICAgIDxjb2xvciBuYW1lPSJiYXR0ZXJ5bWV0ZXJfYm9sdF9jb2xvciI+I0IyMDAwMDAwPC9jb2xvcj48IS0tIDcwJSBibGFjayAtLT4KKyAgICA8Y29sb3IgbmFtZT0iYmF0dGVyeW1ldGVyX2JvbHRfY29sb3IiPiNGRkZGRkZGRjwvY29sb3I+CiAgICAgPGNvbG9yIG5hbWU9InN0YXR1c19iYXJfY2xvY2tfY29sb3IiPiNGRkZGRkZGRjwvY29sb3I+CisgICAgPGRyYXdhYmxlIG5hbWU9Im5vdGlmaWNhdGlvbl9pdGVtX2JhY2tncm91bmRfY29sb3IiPiNmZjExMTExMTwvZHJhd2FibGU+CisgICAgPGRyYXdhYmxlIG5hbWU9Im5vdGlmaWNhdGlvbl9pdGVtX2JhY2tncm91bmRfY29sb3JfcHJlc3NlZCI+I2ZmNDU0NTQ1PC9kcmF3YWJsZT4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9jb25maWcueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9jb25maWcueG1sCmluZGV4IDM4NjlkYjMuLjFkZDkzMDAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvY29uZmlnLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2NvbmZpZy54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICA8IS0tIFdoZW4gdHJ1ZSwgc2hvdyAxLzJHIG5ldHdvcmtzIGFzIDNHLiAtLT4KICAgICA8Ym9vbCBuYW1lPSJjb25maWdfc2hvd01pbjNHIj5mYWxzZTwvYm9vbD4KIAotICAgIDwhLS0gU2hvdyByb3RhdGlvbiBsb2NrIGJ1dHRvbiBpbiBwaG9uZS1zdHlsZSBub3RpZmljYXRpb24gcGFuZWwuIC0tPgorICAgIDwhLS0gU2hvdyByb3RhdGlvbiBsb2NrIHRvZ2dsZSBpbiBTeXN0ZW0gVUktLT4KICAgICA8Ym9vbCBuYW1lPSJjb25maWdfc2hvd1JvdGF0aW9uTG9jayI+dHJ1ZTwvYm9vbD4KIAogICAgIDwhLS0gQW1vdW50IG9mIHRpbWUgdG8gaG9sZCBvZmYgYmVmb3JlIHNob3dpbmcgdGhlIHNlYXJjaCBwYW5lbCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgaG9tZSAtLT4KQEAgLTg0LDkgKzg0LDYgQEAKICAgICA8IS0tIFRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGF0IHRoZSB0b3AgbGV2ZWwgdGlsZXMgc3BhbiBpbiB0aGUgUXVpY2tTZXR0aW5ncyAtLT4KICAgICA8aW50ZWdlciBuYW1lPSJxdWlja19zZXR0aW5nc191c2VyX3RpbWVfc2V0dGluZ3NfdGlsZV9zcGFuIj4xPC9pbnRlZ2VyPgogCi0gICAgPCEtLSBXaGV0aGVyIHJvdGF0aW9uIGxvY2sgc2hvd3MgdXAgaW4gcXVpY2sgc2V0dGluZ3Mgb3Igbm90IC0tPgotICAgIDxib29sIG5hbWU9InF1aWNrX3NldHRpbmdzX3Nob3dfcm90YXRpb25fbG9jayI+ZmFsc2U8L2Jvb2w+Ci0KICAgICA8IS0tIFdoZXRoZXIgb3Igbm90IHRoZSBSU1NJIHRpbGUgaXMgY2FwaXRhbGl6ZWQgb3Igbm90LiAtLT4KICAgICA8Ym9vbCBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX3RpbGVfY2FwaXRhbGl6YXRpb24iPnRydWU8L2Jvb2w+CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvZGltZW5zLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvZGltZW5zLnhtbAppbmRleCBjYzc4Y2I0Li5lNmIyYjhiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2RpbWVucy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9kaW1lbnMueG1sCkBAIC0yMjAsNCArMjIwLDEwIEBACiAKICAgICA8IS0tIHVzZWQgYnkgRGVzc2VydENhc2UgLS0+CiAgICAgPGRpbWVuIG5hbWU9ImRlc3NlcnRfY2FzZV9jZWxsX3NpemUiPjE5MmRwPC9kaW1lbj4KKworICAgIDwhLS0gRGVmYXVsdCBnbG93IHJhZGl1cyBmb3IgR2xvd1BhZFZpZXcgLS0+CisgICAgPGRpbWVuIG5hbWU9Imdsb3dwYWR2aWV3X2dsb3dfcmFkaXVzIj43NWRpcDwvZGltZW4+CisKKyAgICA8IS0tIERlZmF1bHQgZGlzdGFuY2UgZnJvbSBlYWNoIHNuYXAgdGFyZ2V0IHRoYXQgR2xvd1BhZFZpZXcgY29uc2lkZXJzIGEgImhpdCIgLS0+CisgICAgPGRpbWVuIG5hbWU9Imdsb3dwYWR2aWV3X2lubmVyX3JhZGl1cyI+MTVkaXA8L2RpbWVuPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAppbmRleCBlMzZjYThlLi45NDc5NmFmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTQ2NCw2ICs0NjQsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIj5BdXRvIFJvdGF0ZTwvc3RyaW5nPgogICAgIDwhLS0gUXVpY2tTZXR0aW5nczogUm90YXRpb24gTG9ja2VkIFtDSEFSIExJTUlUPU5PTkVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIj5Sb3RhdGlvbiBMb2NrZWQ8L3N0cmluZz4KKyAgICA8IS0tIFF1aWNrU2V0dGluZ3M6IExvY2tlZCB0byBQb3J0cmFpdCBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbCI+TG9ja2VkIHRvIFBvcnRyYWl0PC9zdHJpbmc+CisgICAgPCEtLSBRdWlja1NldHRpbmdzOiBMb2NrZWQgdG8gTGFuZHNjYXBlIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCI+TG9ja2VkIHRvIExhbmRzY2FwZTwvc3RyaW5nPgogICAgIDwhLS0gUXVpY2tTZXR0aW5nczogSU1FIFtDSEFSIExJTUlUPU5PTkVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIj5JbnB1dCBNZXRob2Q8L3N0cmluZz4KICAgICA8IS0tIFF1aWNrU2V0dGluZ3M6IExvY2F0aW9uIFtDSEFSIExJTUlUPU5PTkVdIC0tPgpAQCAtNDk2LDYgKzUwMCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiPkJyaWdodG5lc3M8L3N0cmluZz4KICAgICA8IS0tIFF1aWNrU2V0dGluZ3M6IEJyaWdodG5lc3MgZGlhbG9nIGF1dG8gYnJpZ2h0bmVzcyBidXR0b24gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiPkFVVE88L3N0cmluZz4KKyAgICA8IS0tIFF1aWNrU2V0dGluZ3M6IExhYmVsIGZvciB0aGUgdG9nZ2xlIHRoYXQgY29udHJvbHMgd2hldGhlciBkaXNwbGF5IGludmVyc2lvbiBpcyBlbmFibGVkLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCI+Q29sb3IgaW52ZXJzaW9uIG1vZGU8L3N0cmluZz4KKyAgICA8IS0tIFF1aWNrU2V0dGluZ3M6IExhYmVsIGZvciB0aGUgdG9nZ2xlIHRoYXQgY29udHJvbHMgd2hldGhlciBkaXNwbGF5IGNvbnRyYXN0IGVuaGFuY2VtZW50IGlzIGVuYWJsZWQuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiPkVuaGFuY2VkIGNvbnRyYXN0IG1vZGU8L3N0cmluZz4KKyAgICA8IS0tIFF1aWNrU2V0dGluZ3M6IExhYmVsIGZvciB0aGUgdG9nZ2xlIHRoYXQgY29udHJvbHMgd2hldGhlciBkaXNwbGF5IGNvbG9yIGNvcnJlY3Rpb24gaXMgZW5hYmxlZC4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCI+Q29sb3IgY29ycmVjdGlvbiBtb2RlPC9zdHJpbmc+CiAKIAogICAgIDwhLS0gR2x5cGggdG8gYmUgb3ZlcmxhaWQgYXRvcCB0aGUgYmF0dGVyeSB3aGVuIHRoZSBsZXZlbCBpcyBleHRyZW1lbHkgbG93LiBEbyBub3QgdHJhbnNsYXRlLiAtLT4KQEAgLTUwNyw0ICs1MTcsMTAgQEAKICAgICAgICAgIGxpbmVicmVhayB0byBwb3NpdGlvbiBpdCBjb3JyZWN0bHkuICBbQ0hBUiBMSU1JVD00NV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIj5OZXR3b3JrIG1heVxuYmUgbW9uaXRvcmVkPC9zdHJpbmc+CiAKKyAgICA8IS0tIERlc2NyaXB0aW9uIG9mIHRoZSB1bmxvY2sgdGFyZ2V0IGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giPlNlYXJjaDwvc3RyaW5nPgorICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgdGhlIHVwIGRpcmVjdGlvbiBpbiB3aGljaCBvbmUgY2FuIHRvIHNsaWRlIHRoZSBoYW5kbGUgaW4gdGhlIFNsaWRlIHVubG9jayBzY3JlZW4uIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIj5TbGlkZSB1cCBmb3IgPHhsaWZmOmcgaWQ9InRhcmdldF9kZXNjcmlwdGlvbiIgZXhhbXBsZT0iVW5sb2NrIj4lczwveGxpZmY6Zz4uPC9zdHJpbmc+CisgICAgPCEtLSBEZXNjcmlwdGlvbiBvZiB0aGUgbGVmdCBkaXJlY3Rpb24gaW4gd2hpY2ggb25lIGNhbiB0byBzbGlkZSB0aGUgaGFuZGxlIGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0Ij4iU2xpZGUgbGVmdCBmb3IgPHhsaWZmOmcgaWQ9InRhcmdldF9kZXNjcmlwdGlvbiIgZXhhbXBsZT0iVW5sb2NrIj4lczwveGxpZmY6Zz4uPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9CYXR0ZXJ5TWV0ZXJWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvQmF0dGVyeU1ldGVyVmlldy5qYXZhCmluZGV4IDEzYWFmYjIuLjU1NzllMTkgMTAwNzU1Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9CYXR0ZXJ5TWV0ZXJWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL0JhdHRlcnlNZXRlclZpZXcuamF2YQpAQCAtMjcsNyArMjcsNiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGF0aDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmY7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmWGZlcm1vZGU7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5UeXBlZmFjZTsKIGltcG9ydCBhbmRyb2lkLm9zLkJhdHRlcnlNYW5hZ2VyOwpAQCAtNDAsMjAgKzM5LDIwIEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gQmF0dGVyeU1ldGVyVmlldy5jbGFzcy5nZXRTaW1wbGVOYW1lKCk7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0xFVkVMX1RFU1QgPSAiY29tLmFuZHJvaWQuc3lzdGVtdWkuQkFUVEVSWV9MRVZFTF9URVNUIjsKIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBFTkFCTEVfUEVSQ0VOVCA9IHRydWU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIFNJTkdMRV9ESUdJVF9QRVJDRU5UID0gZmFsc2U7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIFNIT1dfMTAwX1BFUkNFTlQgPSBmYWxzZTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIEVOQUJMRV9QRVJDRU5UID0gdHJ1ZTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFNJTkdMRV9ESUdJVF9QRVJDRU5UID0gZmFsc2U7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBTSE9XXzEwMF9QRVJDRU5UID0gZmFsc2U7CiAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGVUxMID0gOTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU1QVFkgPSA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGVUxMID0gOTY7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVNUFRZID0gNDsKIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgZmxvYXQgU1VCUElYRUwgPSAwLjRmOyAgLy8gaW5zZXQgcmVjdHMgZm9yIHNvZnRlciBlZGdlcworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0IFNVQlBJWEVMID0gMC40ZjsgIC8vIGluc2V0IHJlY3RzIGZvciBzb2Z0ZXIgZWRnZXMKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBCT0xUX0xFVkVMX1RIUkVTSE9MRCA9IDAuM2Y7ICAvLyBvcGFxdWUgYm9sdCBiZWxvdyB0aGlzIGZyYWN0aW9uCiAKLSAgICBpbnRbXSBtQ29sb3JzOworICAgIHByaXZhdGUgZmluYWwgaW50W10gbUNvbG9yczsKIAogICAgIGJvb2xlYW4gbVNob3dQZXJjZW50ID0gdHJ1ZTsKLSAgICBQYWludCBtRnJhbWVQYWludCwgbUJhdHRlcnlQYWludCwgbVdhcm5pbmdUZXh0UGFpbnQsIG1UZXh0UGFpbnQsIG1Cb2x0UGFpbnQ7Ci0gICAgaW50IG1CdXR0b25IZWlnaHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtRnJhbWVQYWludCwgbUJhdHRlcnlQYWludCwgbVdhcm5pbmdUZXh0UGFpbnQsIG1UZXh0UGFpbnQsIG1Cb2x0UGFpbnQ7CiAgICAgcHJpdmF0ZSBmbG9hdCBtVGV4dEhlaWdodCwgbVdhcm5pbmdUZXh0SGVpZ2h0OwogCiAgICAgcHJpdmF0ZSBpbnQgbUhlaWdodDsKQEAgLTY1LDkgKzY0LDExIEBACiAKICAgICBwcml2YXRlIGZpbmFsIFJlY3RGIG1GcmFtZSA9IG5ldyBSZWN0RigpOwogICAgIHByaXZhdGUgZmluYWwgUmVjdEYgbUJ1dHRvbkZyYW1lID0gbmV3IFJlY3RGKCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBSZWN0RiBtQ2xpcEZyYW1lID0gbmV3IFJlY3RGKCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBSZWN0RiBtQm9sdEZyYW1lID0gbmV3IFJlY3RGKCk7CiAKKyAgICBwcml2YXRlIGZpbmFsIFBhdGggbVNoYXBlUGF0aCA9IG5ldyBQYXRoKCk7CisgICAgcHJpdmF0ZSBmaW5hbCBQYXRoIG1DbGlwUGF0aCA9IG5ldyBQYXRoKCk7CisKICAgICBwcml2YXRlIGNsYXNzIEJhdHRlcnlUcmFja2VyIGV4dGVuZHMgQnJvYWRjYXN0UmVjZWl2ZXIgewogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTktOT1dOX0xFVkVMID0gLTE7CiAKQEAgLTE4OSw3ICsxOTAsOSBAQAogICAgICAgICBjb2xvcnMucmVjeWNsZSgpOwogICAgICAgICBtU2hvd1BlcmNlbnQgPSBFTkFCTEVfUEVSQ0VOVCAmJiAwICE9IFNldHRpbmdzLlN5c3RlbS5nZXRJbnQoCiAgICAgICAgICAgICAgICAgY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwgInN0YXR1c19iYXJfc2hvd19iYXR0ZXJ5X3BlcmNlbnQiLCAwKTsKLQorICAgICAgICBpZiAobVNob3dQZXJjZW50KSB7CisgICAgICAgICAgICBzZXRMYXllclR5cGUoVmlldy5MQVlFUl9UWVBFX1NPRlRXQVJFLCBudWxsKTsKKyAgICAgICAgfQogICAgICAgICBtV2FybmluZ1N0cmluZyA9IGNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJhdHRlcnlfbWV0ZXJfdmVyeV9sb3dfb3ZlcmxheV9zeW1ib2wpOwogCiAgICAgICAgIG1GcmFtZVBhaW50ID0gbmV3IFBhaW50KFBhaW50LkFOVElfQUxJQVNfRkxBRyk7CkBAIC0xOTcsNyArMjAwLDYgQEAKICAgICAgICAgbUZyYW1lUGFpbnQuc2V0RGl0aGVyKHRydWUpOwogICAgICAgICBtRnJhbWVQYWludC5zZXRTdHJva2VXaWR0aCgwKTsKICAgICAgICAgbUZyYW1lUGFpbnQuc2V0U3R5bGUoUGFpbnQuU3R5bGUuRklMTF9BTkRfU1RST0tFKTsKLSAgICAgICAgbUZyYW1lUGFpbnQuc2V0WGZlcm1vZGUobmV3IFBvcnRlckR1ZmZYZmVybW9kZShQb3J0ZXJEdWZmLk1vZGUuRFNUX0FUT1ApKTsKIAogICAgICAgICBtQmF0dGVyeVBhaW50ID0gbmV3IFBhaW50KFBhaW50LkFOVElfQUxJQVNfRkxBRyk7CiAgICAgICAgIG1CYXR0ZXJ5UGFpbnQuc2V0RGl0aGVyKHRydWUpOwpAQCAtMjA1LDggKzIwNyw3IEBACiAgICAgICAgIG1CYXR0ZXJ5UGFpbnQuc2V0U3R5bGUoUGFpbnQuU3R5bGUuRklMTF9BTkRfU1RST0tFKTsKIAogICAgICAgICBtVGV4dFBhaW50ID0gbmV3IFBhaW50KFBhaW50LkFOVElfQUxJQVNfRkxBRyk7Ci0gICAgICAgIG1UZXh0UGFpbnQuc2V0Q29sb3IoMHhGRkZGRkZGRik7Ci0gICAgICAgIFR5cGVmYWNlIGZvbnQgPSBUeXBlZmFjZS5jcmVhdGUoInNhbnMtc2VyaWYtY29uZGVuc2VkIiwgVHlwZWZhY2UuTk9STUFMKTsKKyAgICAgICAgVHlwZWZhY2UgZm9udCA9IFR5cGVmYWNlLmNyZWF0ZSgic2Fucy1zZXJpZi1jb25kZW5zZWQiLCBUeXBlZmFjZS5CT0xEKTsKICAgICAgICAgbVRleHRQYWludC5zZXRUeXBlZmFjZShmb250KTsKICAgICAgICAgbVRleHRQYWludC5zZXRUZXh0QWxpZ24oUGFpbnQuQWxpZ24uQ0VOVEVSKTsKIApAQCAtMjE4LDExICsyMTksOSBAQAogCiAgICAgICAgIG1DaGFyZ2VDb2xvciA9IGdldFJlc291cmNlcygpLmdldENvbG9yKFIuY29sb3IuYmF0dGVyeW1ldGVyX2NoYXJnZV9jb2xvcik7CiAKLSAgICAgICAgbUJvbHRQYWludCA9IG5ldyBQYWludCgpOwotICAgICAgICBtQm9sdFBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICAgICAgbUJvbHRQYWludCA9IG5ldyBQYWludChQYWludC5BTlRJX0FMSUFTX0ZMQUcpOwogICAgICAgICBtQm9sdFBhaW50LnNldENvbG9yKHJlcy5nZXRDb2xvcihSLmNvbG9yLmJhdHRlcnltZXRlcl9ib2x0X2NvbG9yKSk7CiAgICAgICAgIG1Cb2x0UG9pbnRzID0gbG9hZEJvbHRQb2ludHMocmVzKTsKLSAgICAgICAgc2V0TGF5ZXJUeXBlKFZpZXcuTEFZRVJfVFlQRV9TT0ZUV0FSRSwgbnVsbCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmxvYXRbXSBsb2FkQm9sdFBvaW50cyhSZXNvdXJjZXMgcmVzKSB7CkBAIC0yNzAsMzYgKzI2OSwzNCBAQAogICAgICAgICBmaW5hbCBpbnQgcGwgPSBnZXRQYWRkaW5nTGVmdCgpOwogICAgICAgICBmaW5hbCBpbnQgcHIgPSBnZXRQYWRkaW5nUmlnaHQoKTsKICAgICAgICAgZmluYWwgaW50IHBiID0gZ2V0UGFkZGluZ0JvdHRvbSgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gbUhlaWdodCAtIHB0IC0gcGI7Ci0gICAgICAgIGludCB3aWR0aCA9IG1XaWR0aCAtIHBsIC0gcHI7CisgICAgICAgIGZpbmFsIGludCBoZWlnaHQgPSBtSGVpZ2h0IC0gcHQgLSBwYjsKKyAgICAgICAgZmluYWwgaW50IHdpZHRoID0gbVdpZHRoIC0gcGwgLSBwcjsKIAotICAgICAgICBtQnV0dG9uSGVpZ2h0ID0gKGludCkgKGhlaWdodCAqIDAuMTJmKTsKKyAgICAgICAgZmluYWwgaW50IGJ1dHRvbkhlaWdodCA9IChpbnQpIChoZWlnaHQgKiAwLjEyZik7CiAKICAgICAgICAgbUZyYW1lLnNldCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgbUZyYW1lLm9mZnNldChwbCwgcHQpOwogCisgICAgICAgIC8vIGJ1dHRvbi1mcmFtZTogYXJlYSBhYm92ZSB0aGUgYmF0dGVyeSBib2R5CiAgICAgICAgIG1CdXR0b25GcmFtZS5zZXQoCiAgICAgICAgICAgICAgICAgbUZyYW1lLmxlZnQgKyB3aWR0aCAqIDAuMjVmLAogICAgICAgICAgICAgICAgIG1GcmFtZS50b3AsCiAgICAgICAgICAgICAgICAgbUZyYW1lLnJpZ2h0IC0gd2lkdGggKiAwLjI1ZiwKLSAgICAgICAgICAgICAgICBtRnJhbWUudG9wICsgbUJ1dHRvbkhlaWdodCArIDUgLypjb3ZlciBmcmFtZSBib3JkZXIgb2YgaW50ZXJzZWN0aW5nIGFyZWEqLyk7CisgICAgICAgICAgICAgICAgbUZyYW1lLnRvcCArIGJ1dHRvbkhlaWdodCk7CiAKICAgICAgICAgbUJ1dHRvbkZyYW1lLnRvcCArPSBTVUJQSVhFTDsKICAgICAgICAgbUJ1dHRvbkZyYW1lLmxlZnQgKz0gU1VCUElYRUw7CiAgICAgICAgIG1CdXR0b25GcmFtZS5yaWdodCAtPSBTVUJQSVhFTDsKIAotICAgICAgICBtRnJhbWUudG9wICs9IG1CdXR0b25IZWlnaHQ7CisgICAgICAgIC8vIGZyYW1lOiBiYXR0ZXJ5IGJvZHkgYXJlYQorICAgICAgICBtRnJhbWUudG9wICs9IGJ1dHRvbkhlaWdodDsKICAgICAgICAgbUZyYW1lLmxlZnQgKz0gU1VCUElYRUw7CiAgICAgICAgIG1GcmFtZS50b3AgKz0gU1VCUElYRUw7CiAgICAgICAgIG1GcmFtZS5yaWdodCAtPSBTVUJQSVhFTDsKICAgICAgICAgbUZyYW1lLmJvdHRvbSAtPSBTVUJQSVhFTDsKIAotICAgICAgICAvLyBmaXJzdCwgZHJhdyB0aGUgYmF0dGVyeSBzaGFwZQotICAgICAgICBjLmRyYXdSZWN0KG1GcmFtZSwgbUZyYW1lUGFpbnQpOwotCi0gICAgICAgIC8vIGZpbGwgJ2VyIHVwCi0gICAgICAgIGZpbmFsIGludCBjb2xvciA9IHRyYWNrZXIucGx1Z2dlZCA/IG1DaGFyZ2VDb2xvciA6IGdldENvbG9yRm9yTGV2ZWwobGV2ZWwpOwotICAgICAgICBtQmF0dGVyeVBhaW50LnNldENvbG9yKGNvbG9yKTsKKyAgICAgICAgLy8gc2V0IHRoZSBiYXR0ZXJ5IGNoYXJnaW5nIGNvbG9yCisgICAgICAgIG1CYXR0ZXJ5UGFpbnQuc2V0Q29sb3IodHJhY2tlci5wbHVnZ2VkID8gbUNoYXJnZUNvbG9yIDogZ2V0Q29sb3JGb3JMZXZlbChsZXZlbCkpOwogCiAgICAgICAgIGlmIChsZXZlbCA+PSBGVUxMKSB7CiAgICAgICAgICAgICBkcmF3RnJhYyA9IDFmOwpAQCAtMzA3LDE4ICszMDQsMjMgQEAKICAgICAgICAgICAgIGRyYXdGcmFjID0gMGY7CiAgICAgICAgIH0KIAotICAgICAgICBjLmRyYXdSZWN0KG1CdXR0b25GcmFtZSwgZHJhd0ZyYWMgPT0gMWYgPyBtQmF0dGVyeVBhaW50IDogbUZyYW1lUGFpbnQpOworICAgICAgICBmaW5hbCBmbG9hdCBsZXZlbFRvcCA9IGRyYXdGcmFjID09IDFmID8gbUJ1dHRvbkZyYW1lLnRvcAorICAgICAgICAgICAgICAgIDogKG1GcmFtZS50b3AgKyAobUZyYW1lLmhlaWdodCgpICogKDFmIC0gZHJhd0ZyYWMpKSk7CiAKLSAgICAgICAgbUNsaXBGcmFtZS5zZXQobUZyYW1lKTsKLSAgICAgICAgbUNsaXBGcmFtZS50b3AgKz0gKG1GcmFtZS5oZWlnaHQoKSAqICgxZiAtIGRyYXdGcmFjKSk7Ci0KLSAgICAgICAgYy5zYXZlKENhbnZhcy5DTElQX1NBVkVfRkxBRyk7Ci0gICAgICAgIGMuY2xpcFJlY3QobUNsaXBGcmFtZSk7Ci0gICAgICAgIGMuZHJhd1JlY3QobUZyYW1lLCBtQmF0dGVyeVBhaW50KTsKLSAgICAgICAgYy5yZXN0b3JlKCk7CisgICAgICAgIC8vIGRlZmluZSB0aGUgYmF0dGVyeSBzaGFwZQorICAgICAgICBtU2hhcGVQYXRoLnJlc2V0KCk7CisgICAgICAgIG1TaGFwZVBhdGgubW92ZVRvKG1CdXR0b25GcmFtZS5sZWZ0LCBtQnV0dG9uRnJhbWUudG9wKTsKKyAgICAgICAgbVNoYXBlUGF0aC5saW5lVG8obUJ1dHRvbkZyYW1lLnJpZ2h0LCBtQnV0dG9uRnJhbWUudG9wKTsKKyAgICAgICAgbVNoYXBlUGF0aC5saW5lVG8obUJ1dHRvbkZyYW1lLnJpZ2h0LCBtRnJhbWUudG9wKTsKKyAgICAgICAgbVNoYXBlUGF0aC5saW5lVG8obUZyYW1lLnJpZ2h0LCBtRnJhbWUudG9wKTsKKyAgICAgICAgbVNoYXBlUGF0aC5saW5lVG8obUZyYW1lLnJpZ2h0LCBtRnJhbWUuYm90dG9tKTsKKyAgICAgICAgbVNoYXBlUGF0aC5saW5lVG8obUZyYW1lLmxlZnQsIG1GcmFtZS5ib3R0b20pOworICAgICAgICBtU2hhcGVQYXRoLmxpbmVUbyhtRnJhbWUubGVmdCwgbUZyYW1lLnRvcCk7CisgICAgICAgIG1TaGFwZVBhdGgubGluZVRvKG1CdXR0b25GcmFtZS5sZWZ0LCBtRnJhbWUudG9wKTsKKyAgICAgICAgbVNoYXBlUGF0aC5saW5lVG8obUJ1dHRvbkZyYW1lLmxlZnQsIG1CdXR0b25GcmFtZS50b3ApOwogCiAgICAgICAgIGlmICh0cmFja2VyLnBsdWdnZWQpIHsKLSAgICAgICAgICAgIC8vIGRyYXcgdGhlIGJvbHQKKyAgICAgICAgICAgIC8vIGRlZmluZSB0aGUgYm9sdCBzaGFwZQogICAgICAgICAgICAgZmluYWwgZmxvYXQgYmwgPSBtRnJhbWUubGVmdCArIG1GcmFtZS53aWR0aCgpIC8gNC41ZjsKICAgICAgICAgICAgIGZpbmFsIGZsb2F0IGJ0ID0gbUZyYW1lLnRvcCArIG1GcmFtZS5oZWlnaHQoKSAvIDZmOwogICAgICAgICAgICAgZmluYWwgZmxvYXQgYnIgPSBtRnJhbWUucmlnaHQgLSBtRnJhbWUud2lkdGgoKSAvIDdmOwpAQCAtMzM5LDI0ICszNDEsNTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1Cb2x0RnJhbWUubGVmdCArIG1Cb2x0UG9pbnRzWzBdICogbUJvbHRGcmFtZS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgbUJvbHRGcmFtZS50b3AgKyBtQm9sdFBvaW50c1sxXSAqIG1Cb2x0RnJhbWUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYy5kcmF3UGF0aChtQm9sdFBhdGgsIG1Cb2x0UGFpbnQpOwotICAgICAgICB9IGVsc2UgaWYgKGxldmVsIDw9IEVNUFRZKSB7Ci0gICAgICAgICAgICBmaW5hbCBmbG9hdCB4ID0gbVdpZHRoICogMC41ZjsKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IHkgPSAobUhlaWdodCArIG1XYXJuaW5nVGV4dEhlaWdodCkgKiAwLjQ4ZjsKLSAgICAgICAgICAgIGMuZHJhd1RleHQobVdhcm5pbmdTdHJpbmcsIHgsIHksIG1XYXJuaW5nVGV4dFBhaW50KTsKLSAgICAgICAgfSBlbHNlIGlmIChtU2hvd1BlcmNlbnQgJiYgISh0cmFja2VyLmxldmVsID09IDEwMCAmJiAhU0hPV18xMDBfUEVSQ0VOVCkpIHsKLSAgICAgICAgICAgIG1UZXh0UGFpbnQuc2V0VGV4dFNpemUoaGVpZ2h0ICoKLSAgICAgICAgICAgICAgICAgICAgKFNJTkdMRV9ESUdJVF9QRVJDRU5UID8gMC43NWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh0cmFja2VyLmxldmVsID09IDEwMCA/IDAuMzhmIDogMC41ZikpKTsKLSAgICAgICAgICAgIG1UZXh0SGVpZ2h0ID0gLW1UZXh0UGFpbnQuZ2V0Rm9udE1ldHJpY3MoKS5hc2NlbnQ7CiAKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzdHIgPSBTdHJpbmcudmFsdWVPZihTSU5HTEVfRElHSVRfUEVSQ0VOVCA/IChsZXZlbC8xMCkgOiBsZXZlbCk7Ci0gICAgICAgICAgICBmaW5hbCBmbG9hdCB4ID0gbVdpZHRoICogMC41ZjsKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IHkgPSAobUhlaWdodCArIG1UZXh0SGVpZ2h0KSAqIDAuNDdmOwotICAgICAgICAgICAgYy5kcmF3VGV4dChzdHIsCi0gICAgICAgICAgICAgICAgICAgIHgsCi0gICAgICAgICAgICAgICAgICAgIHksCi0gICAgICAgICAgICAgICAgICAgIG1UZXh0UGFpbnQpOworICAgICAgICAgICAgZmxvYXQgYm9sdFBjdCA9IChtQm9sdEZyYW1lLmJvdHRvbSAtIGxldmVsVG9wKSAvIChtQm9sdEZyYW1lLmJvdHRvbSAtIG1Cb2x0RnJhbWUudG9wKTsKKyAgICAgICAgICAgIGJvbHRQY3QgPSBNYXRoLm1pbihNYXRoLm1heChib2x0UGN0LCAwKSwgMSk7CisgICAgICAgICAgICBpZiAoYm9sdFBjdCA8PSBCT0xUX0xFVkVMX1RIUkVTSE9MRCkgeworICAgICAgICAgICAgICAgIC8vIGRyYXcgdGhlIGJvbHQgaWYgb3BhcXVlCisgICAgICAgICAgICAgICAgYy5kcmF3UGF0aChtQm9sdFBhdGgsIG1Cb2x0UGFpbnQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgY3V0IHRoZSBib2x0IG91dCBvZiB0aGUgb3ZlcmFsbCBzaGFwZQorICAgICAgICAgICAgICAgIG1TaGFwZVBhdGgub3AobUJvbHRQYXRoLCBQYXRoLk9wLkRJRkZFUkVOQ0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gZHJhdyB0aGUgYmF0dGVyeSBzaGFwZSBiYWNrZ3JvdW5kCisgICAgICAgIGMuZHJhd1BhdGgobVNoYXBlUGF0aCwgbUZyYW1lUGFpbnQpOworCisgICAgICAgIC8vIGRyYXcgdGhlIGJhdHRlcnkgc2hhcGUsIGNsaXBwZWQgdG8gY2hhcmdpbmcgbGV2ZWwKKyAgICAgICAgbUZyYW1lLnRvcCA9IGxldmVsVG9wOworICAgICAgICBtQ2xpcFBhdGgucmVzZXQoKTsKKyAgICAgICAgbUNsaXBQYXRoLmFkZFJlY3QobUZyYW1lLCAgUGF0aC5EaXJlY3Rpb24uQ0NXKTsKKyAgICAgICAgbVNoYXBlUGF0aC5vcChtQ2xpcFBhdGgsIFBhdGguT3AuSU5URVJTRUNUKTsKKyAgICAgICAgYy5kcmF3UGF0aChtU2hhcGVQYXRoLCBtQmF0dGVyeVBhaW50KTsKKworICAgICAgICBpZiAoIXRyYWNrZXIucGx1Z2dlZCkgeworICAgICAgICAgICAgaWYgKGxldmVsIDw9IEVNUFRZKSB7CisgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgd2FybmluZyB0ZXh0CisgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgeCA9IG1XaWR0aCAqIDAuNWY7CisgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgeSA9IChtSGVpZ2h0ICsgbVdhcm5pbmdUZXh0SGVpZ2h0KSAqIDAuNDhmOworICAgICAgICAgICAgICAgIGMuZHJhd1RleHQobVdhcm5pbmdTdHJpbmcsIHgsIHksIG1XYXJuaW5nVGV4dFBhaW50KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobVNob3dQZXJjZW50ICYmICEodHJhY2tlci5sZXZlbCA9PSAxMDAgJiYgIVNIT1dfMTAwX1BFUkNFTlQpKSB7CisgICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgcGVyY2VudGFnZSB0ZXh0CisgICAgICAgICAgICAgICAgbVRleHRQYWludC5zZXRDb2xvcihnZXRDb2xvckZvckxldmVsKGxldmVsKSk7CisgICAgICAgICAgICAgICAgbVRleHRQYWludC5zZXRUZXh0U2l6ZShoZWlnaHQgKgorICAgICAgICAgICAgICAgICAgICAgICAgKFNJTkdMRV9ESUdJVF9QRVJDRU5UID8gMC43NWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodHJhY2tlci5sZXZlbCA9PSAxMDAgPyAwLjM4ZiA6IDAuNWYpKSk7CisgICAgICAgICAgICAgICAgbVRleHRIZWlnaHQgPSAtbVRleHRQYWludC5nZXRGb250TWV0cmljcygpLmFzY2VudDsKKworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzdHIgPSBTdHJpbmcudmFsdWVPZihTSU5HTEVfRElHSVRfUEVSQ0VOVCA/IChsZXZlbC8xMCkgOiBsZXZlbCk7CisgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgeCA9IG1XaWR0aCAqIDAuNWY7CisgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgeSA9IChtSGVpZ2h0ICsgbVRleHRIZWlnaHQpICogMC40N2Y7CisKKyAgICAgICAgICAgICAgICBib29sZWFuIG9wYXF1ZSA9IGxldmVsVG9wID4geTsKKyAgICAgICAgICAgICAgICBpZiAob3BhcXVlKSB7CisgICAgICAgICAgICAgICAgICAgIG1UZXh0UGFpbnQuc2V0WGZlcm1vZGUobnVsbCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbVRleHRQYWludC5zZXRYZmVybW9kZShuZXcgUG9ydGVyRHVmZlhmZXJtb2RlKFBvcnRlckR1ZmYuTW9kZS5EU1RfT1VUKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYy5kcmF3VGV4dChzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1UZXh0UGFpbnQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvRGVtb01vZGUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9EZW1vTW9kZS5qYXZhCmluZGV4IDhkMjcxZTQuLmMxNmMzYTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9EZW1vTW9kZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9EZW1vTW9kZS5qYXZhCkBAIC0zMSw0ICszMSw1IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NTUFORF9ORVRXT1JLID0gIm5ldHdvcmsiOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1BTkRfQkFSUyA9ICJiYXJzIjsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NQU5EX1NUQVRVUyA9ICJzdGF0dXMiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1BTkRfTk9USUZJQ0FUSU9OUyA9ICJub3RpZmljYXRpb25zIjsKIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9EZXNzZXJ0Q2FzZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL0Rlc3NlcnRDYXNlLmphdmEKaW5kZXggZDc5N2UzOC4uYTk2ZjAyNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL0Rlc3NlcnRDYXNlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL0Rlc3NlcnRDYXNlLmphdmEKQEAgLTE2LDEzICsxNiwxMCBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpOwogCi1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkRlY2VsZXJhdGVJbnRlcnBvbGF0b3I7CiAKIHB1YmxpYyBjbGFzcyBEZXNzZXJ0Q2FzZSBleHRlbmRzIEFjdGl2aXR5IHsKICAgICBEZXNzZXJ0Q2FzZVZpZXcgbVZpZXc7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvSW1hZ2VXYWxscGFwZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9JbWFnZVdhbGxwYXBlci5qYXZhCmluZGV4IDRiMGMyY2IuLjc0NDgzY2MgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9JbWFnZVdhbGxwYXBlci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9JbWFnZVdhbGxwYXBlci5qYXZhCkBAIC0yNywxMyArMjcsMTYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWdpb24uT3A7CiBpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xVdGlsczsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CiBpbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWF0cml4NGY7CiBpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLndhbGxwYXBlci5XYWxscGFwZXJTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwpAQCAtMTA3LDEwICsxMTAsMTIgQEAKICAgICAgICAgcHJpdmF0ZSBXYWxscGFwZXJPYnNlcnZlciBtUmVjZWl2ZXI7CiAKICAgICAgICAgQml0bWFwIG1CYWNrZ3JvdW5kOworICAgICAgICBpbnQgbUJhY2tncm91bmRXaWR0aCA9IC0xLCBtQmFja2dyb3VuZEhlaWdodCA9IC0xOwogICAgICAgICBpbnQgbUxhc3RTdXJmYWNlV2lkdGggPSAtMSwgbUxhc3RTdXJmYWNlSGVpZ2h0ID0gLTE7CiAgICAgICAgIGludCBtTGFzdFJvdGF0aW9uID0gLTE7Ci0gICAgICAgIGZsb2F0IG1YT2Zmc2V0OwotICAgICAgICBmbG9hdCBtWU9mZnNldDsKKyAgICAgICAgZmxvYXQgbVhPZmZzZXQgPSAwLjVmOworICAgICAgICBmbG9hdCBtWU9mZnNldCA9IDAuNWY7CisgICAgICAgIGZsb2F0IG1TY2FsZSA9IDFmOwogCiAgICAgICAgIGJvb2xlYW4gbVZpc2libGUgPSB0cnVlOwogICAgICAgICBib29sZWFuIG1SZWRyYXdOZWVkZWQ7CkBAIC0xNTUsNiArMTYwLDggQEAKIAogICAgICAgICAgICAgICAgIG1MYXN0U3VyZmFjZVdpZHRoID0gbUxhc3RTdXJmYWNlSGVpZ2h0ID0gLTE7CiAgICAgICAgICAgICAgICAgbUJhY2tncm91bmQgPSBudWxsOworICAgICAgICAgICAgICAgIG1CYWNrZ3JvdW5kV2lkdGggPSAtMTsKKyAgICAgICAgICAgICAgICBtQmFja2dyb3VuZEhlaWdodCA9IC0xOwogICAgICAgICAgICAgICAgIG1SZWRyYXdOZWVkZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGRyYXdGcmFtZSgpOwogICAgICAgICAgICAgfQpAQCAtMTczLDYgKzE4MCw4IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1CYWNrZ3JvdW5kLnJlY3ljbGUoKTsKICAgICAgICAgICAgICAgICBtQmFja2dyb3VuZCA9IG51bGw7CisgICAgICAgICAgICAgICAgbUJhY2tncm91bmRXaWR0aCA9IC0xOworICAgICAgICAgICAgICAgIG1CYWNrZ3JvdW5kSGVpZ2h0ID0gLTE7CiAgICAgICAgICAgICAgICAgbVdhbGxwYXBlck1hbmFnZXIuZm9yZ2V0TG9hZGVkV2FsbHBhcGVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIwNCwyMSArMjEzLDQwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25EZXNpcmVkU2l6ZUNoYW5nZWQoaW50IGRlc2lyZWRXaWR0aCwgaW50IGRlc2lyZWRIZWlnaHQpIHsKLSAgICAgICAgICAgIHN1cGVyLm9uRGVzaXJlZFNpemVDaGFuZ2VkKGRlc2lyZWRXaWR0aCwgZGVzaXJlZEhlaWdodCk7Ci0gICAgICAgICAgICBTdXJmYWNlSG9sZGVyIHN1cmZhY2VIb2xkZXIgPSBnZXRTdXJmYWNlSG9sZGVyKCk7Ci0gICAgICAgICAgICBpZiAoc3VyZmFjZUhvbGRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlU3VyZmFjZVNpemUoc3VyZmFjZUhvbGRlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIHVwZGF0ZVN1cmZhY2VTaXplKFN1cmZhY2VIb2xkZXIgc3VyZmFjZUhvbGRlcikgeworICAgICAgICAgICAgUG9pbnQgcCA9IGdldERlZmF1bHREaXNwbGF5U2l6ZSgpOworCisgICAgICAgICAgICAvLyBMb2FkIGJhY2tncm91bmQgaW1hZ2UgZGltZW5zaW9ucywgaWYgd2UgaGF2ZW4ndCBzYXZlZCB0aGVtIHlldAorICAgICAgICAgICAgaWYgKG1CYWNrZ3JvdW5kV2lkdGggPD0gMCB8fCBtQmFja2dyb3VuZEhlaWdodCA8PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBsb2FkIHRoZSBpbWFnZSB0byBnZXQgZGltZW5zaW9ucworICAgICAgICAgICAgICAgIG1XYWxscGFwZXJNYW5hZ2VyLmZvcmdldExvYWRlZFdhbGxwYXBlcigpOworICAgICAgICAgICAgICAgIHVwZGF0ZVdhbGxwYXBlckxvY2tlZCgpOworICAgICAgICAgICAgICAgIGlmIChtQmFja2dyb3VuZFdpZHRoIDw9IDAgfHwgbUJhY2tncm91bmRIZWlnaHQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHRvIHRoZSBkaXNwbGF5IHNpemUgaWYgd2UgY2FuJ3QgZmluZCB0aGUgZGltZW5zaW9ucworICAgICAgICAgICAgICAgICAgICBtQmFja2dyb3VuZFdpZHRoID0gcC54OworICAgICAgICAgICAgICAgICAgICBtQmFja2dyb3VuZEhlaWdodCA9IHAueTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZvcmNlIHRoZSB3YWxscGFwZXIgdG8gY292ZXIgdGhlIHNjcmVlbiBpbiBib3RoIGRpbWVuc2lvbnMKKyAgICAgICAgICAgIGludCBzdXJmYWNlV2lkdGggPSBNYXRoLm1heChwLngsIG1CYWNrZ3JvdW5kV2lkdGgpOworICAgICAgICAgICAgaW50IHN1cmZhY2VIZWlnaHQgPSBNYXRoLm1heChwLnksIG1CYWNrZ3JvdW5kSGVpZ2h0KTsKKworICAgICAgICAgICAgLy8gSWYgdGhlIHN1cmZhY2UgZGltZW5zaW9ucyBoYXZlbid0IGNoYW5nZWQsIHRoZW4ganVzdCByZXR1cm4KKyAgICAgICAgICAgIGZpbmFsIFJlY3QgZnJhbWUgPSBzdXJmYWNlSG9sZGVyLmdldFN1cmZhY2VGcmFtZSgpOworICAgICAgICAgICAgaWYgKGZyYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZHcgPSBmcmFtZS53aWR0aCgpOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBkaCA9IGZyYW1lLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGlmIChzdXJmYWNlV2lkdGggPT0gZHcgJiYgc3VyZmFjZUhlaWdodCA9PSBkaCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoRklYRURfU0laRURfU1VSRkFDRSkgewogICAgICAgICAgICAgICAgIC8vIFVzZWQgYSBmaXhlZCBzaXplIHN1cmZhY2UsIGJlY2F1c2Ugd2UgYXJlIHNwZWNpYWwuICBXZSBjYW4gZG8KICAgICAgICAgICAgICAgICAvLyB0aGlzIGJlY2F1c2Ugd2Uga25vdyB0aGUgY3VycmVudCBkZXNpZ24gb2Ygd2luZG93IGFuaW1hdGlvbnMgZG9lc24ndAogICAgICAgICAgICAgICAgIC8vIGNhdXNlIHRoaXMgdG8gYnJlYWsuCi0gICAgICAgICAgICAgICAgc3VyZmFjZUhvbGRlci5zZXRGaXhlZFNpemUoZ2V0RGVzaXJlZE1pbmltdW1XaWR0aCgpLCBnZXREZXNpcmVkTWluaW11bUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBzdXJmYWNlSG9sZGVyLnNldEZpeGVkU2l6ZShzdXJmYWNlV2lkdGgsIHN1cmZhY2VIZWlnaHQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdXJmYWNlSG9sZGVyLnNldFNpemVGcm9tTGF5b3V0KCk7CiAgICAgICAgICAgICB9CkBAIC0yOTgsMTMgKzMyNiwzMCBAQAogICAgICAgICAgICAgZHJhd0ZyYW1lKCk7CiAgICAgICAgIH0KIAorICAgICAgICBwcml2YXRlIFBvaW50IGdldERlZmF1bHREaXNwbGF5U2l6ZSgpIHsKKyAgICAgICAgICAgIFBvaW50IHAgPSBuZXcgUG9pbnQoKTsKKyAgICAgICAgICAgIENvbnRleHQgYyA9IEltYWdlV2FsbHBhcGVyLnRoaXMuZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7CisgICAgICAgICAgICBXaW5kb3dNYW5hZ2VyIHdtID0gKFdpbmRvd01hbmFnZXIpYy5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOworICAgICAgICAgICAgRGlzcGxheSBkID0gd20uZ2V0RGVmYXVsdERpc3BsYXkoKTsKKyAgICAgICAgICAgIGQuZ2V0UmVhbFNpemUocCk7CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgZHJhd0ZyYW1lKCkgeworICAgICAgICAgICAgaW50IG5ld1JvdGF0aW9uID0gKChXaW5kb3dNYW5hZ2VyKSBnZXRTeXN0ZW1TZXJ2aWNlKFdJTkRPV19TRVJWSUNFKSkuCisgICAgICAgICAgICAgICAgICAgIGdldERlZmF1bHREaXNwbGF5KCkuZ2V0Um90YXRpb24oKTsKKworICAgICAgICAgICAgLy8gU29tZXRpbWVzIGEgd2FsbHBhcGVyIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY292ZXIgdGhlIHNjcmVlbiBpbiBvbmUgZGltZW5zaW9uLgorICAgICAgICAgICAgLy8gQ2FsbCB1cGRhdGVTdXJmYWNlU2l6ZSAtLSBpdCB3aWxsIG9ubHkgYWN0dWFsbHkgZG8gdGhlIHVwZGF0ZSBpZiB0aGUgZGltZW5zaW9ucworICAgICAgICAgICAgLy8gc2hvdWxkIGNoYW5nZQorICAgICAgICAgICAgaWYgKG5ld1JvdGF0aW9uICE9IG1MYXN0Um90YXRpb24pIHsKKyAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc3VyZmFjZSBzaXplIChpZiBuZWNlc3NhcnkpCisgICAgICAgICAgICAgICAgdXBkYXRlU3VyZmFjZVNpemUoZ2V0U3VyZmFjZUhvbGRlcigpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN1cmZhY2VIb2xkZXIgc2ggPSBnZXRTdXJmYWNlSG9sZGVyKCk7CiAgICAgICAgICAgICBmaW5hbCBSZWN0IGZyYW1lID0gc2guZ2V0U3VyZmFjZUZyYW1lKCk7CiAgICAgICAgICAgICBmaW5hbCBpbnQgZHcgPSBmcmFtZS53aWR0aCgpOwogICAgICAgICAgICAgZmluYWwgaW50IGRoID0gZnJhbWUuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBpbnQgbmV3Um90YXRpb24gPSAoKFdpbmRvd01hbmFnZXIpIGdldFN5c3RlbVNlcnZpY2UoV0lORE9XX1NFUlZJQ0UpKS4KLSAgICAgICAgICAgICAgICAgICAgZ2V0RGVmYXVsdERpc3BsYXkoKS5nZXRSb3RhdGlvbigpOwogICAgICAgICAgICAgYm9vbGVhbiBzdXJmYWNlRGltZW5zaW9uc0NoYW5nZWQgPSBkdyAhPSBtTGFzdFN1cmZhY2VXaWR0aCB8fCBkaCAhPSBtTGFzdFN1cmZhY2VIZWlnaHQ7CiAKICAgICAgICAgICAgIGJvb2xlYW4gcmVkcmF3TmVlZGVkID0gc3VyZmFjZURpbWVuc2lvbnNDaGFuZ2VkIHx8IG5ld1JvdGF0aW9uICE9IG1MYXN0Um90YXRpb247CkBAIC0zNDMsMTAgKzM4OCwyMSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmluYWwgaW50IGF2YWlsdyA9IGR3IC0gbUJhY2tncm91bmQuZ2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBhdmFpbGggPSBkaCAtIG1CYWNrZ3JvdW5kLmdldEhlaWdodCgpOwotICAgICAgICAgICAgaW50IHhQaXhlbHMgPSBhdmFpbHcgPCAwID8gKGludCkoYXZhaWx3ICogbVhPZmZzZXQgKyAuNWYpIDogKGF2YWlsdyAvIDIpOwotICAgICAgICAgICAgaW50IHlQaXhlbHMgPSBhdmFpbGggPCAwID8gKGludCkoYXZhaWxoICogbVlPZmZzZXQgKyAuNWYpIDogKGF2YWlsaCAvIDIpOworICAgICAgICAgICAgLy8gQ2VudGVyIHRoZSBzY2FsZWQgaW1hZ2UKKyAgICAgICAgICAgIG1TY2FsZSA9IE1hdGgubWF4KDFmLCBNYXRoLm1heChkdyAvIChmbG9hdCkgbUJhY2tncm91bmQuZ2V0V2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgZGggLyAoZmxvYXQpIG1CYWNrZ3JvdW5kLmdldEhlaWdodCgpKSk7CisgICAgICAgICAgICBmaW5hbCBpbnQgYXZhaWx3ID0gZHcgLSAoaW50KSAobUJhY2tncm91bmQuZ2V0V2lkdGgoKSAqIG1TY2FsZSk7CisgICAgICAgICAgICBmaW5hbCBpbnQgYXZhaWxoID0gZGggLSAoaW50KSAobUJhY2tncm91bmQuZ2V0SGVpZ2h0KCkgKiBtU2NhbGUpOworICAgICAgICAgICAgaW50IHhQaXhlbHMgPSBhdmFpbHcgLyAyOworICAgICAgICAgICAgaW50IHlQaXhlbHMgPSBhdmFpbGggLyAyOworCisgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGltYWdlIGZvciB4T2Zmc2V0L3lPZmZzZXQgdmFsdWVzLiBJZiB3aW5kb3cgbWFuYWdlciBpcyBoYW5kbGluZyBvZmZzZXRzLAorICAgICAgICAgICAgLy8gbVhPZmZzZXQgYW5kIG1ZT2Zmc2V0IGFyZSBzZXQgdG8gMC41ZiBieSBkZWZhdWx0IGFuZCB0aGVyZWZvcmUgeFBpeGVscyBhbmQgeVBpeGVscworICAgICAgICAgICAgLy8gd2lsbCByZW1haW4gdW5jaGFuZ2VkCisgICAgICAgICAgICBmaW5hbCBpbnQgYXZhaWx3VW5zY2FsZWQgPSBkdyAtIG1CYWNrZ3JvdW5kLmdldFdpZHRoKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgYXZhaWxoVW5zY2FsZWQgPSBkaCAtIG1CYWNrZ3JvdW5kLmdldEhlaWdodCgpOworICAgICAgICAgICAgaWYgKGF2YWlsd1Vuc2NhbGVkIDwgMCkgeFBpeGVscyArPSAoaW50KShhdmFpbHdVbnNjYWxlZCAqIChtWE9mZnNldCAtIC41ZikgKyAuNWYpOworICAgICAgICAgICAgaWYgKGF2YWlsaFVuc2NhbGVkIDwgMCkgeVBpeGVscyArPSAoaW50KShhdmFpbGhVbnNjYWxlZCAqIChtWU9mZnNldCAtIC41ZikgKyAuNWYpOwogCiAgICAgICAgICAgICBtT2Zmc2V0c0NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAgIG1SZWRyYXdOZWVkZWQgPSBmYWxzZTsKQEAgLTM1NCw4ICs0MTAsNiBAQAogICAgICAgICAgICAgICAgIG1MYXN0U3VyZmFjZVdpZHRoID0gZHc7CiAgICAgICAgICAgICAgICAgbUxhc3RTdXJmYWNlSGVpZ2h0ID0gZGg7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtTGFzdFhUcmFuc2xhdGlvbiA9IHhQaXhlbHM7Ci0gICAgICAgICAgICBtTGFzdFlUcmFuc2xhdGlvbiA9IHlQaXhlbHM7CiAgICAgICAgICAgICBpZiAoIXJlZHJhd05lZWRlZCAmJiB4UGl4ZWxzID09IG1MYXN0WFRyYW5zbGF0aW9uICYmIHlQaXhlbHMgPT0gbUxhc3RZVHJhbnNsYXRpb24pIHsKICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiU3VwcHJlc3NlZCBkcmF3RnJhbWUgc2luY2UgdGhlIGltYWdlIGhhcyBub3QgIgpAQCAtMzYzLDYgKzQxNyw4IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1MYXN0WFRyYW5zbGF0aW9uID0geFBpeGVsczsKKyAgICAgICAgICAgIG1MYXN0WVRyYW5zbGF0aW9uID0geVBpeGVsczsKIAogICAgICAgICAgICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiUmVkcmF3aW5nIHdhbGxwYXBlciIpOwpAQCAtMzkxLDcgKzQ0NywxMSBAQAogICAgICAgICAgICAgVGhyb3dhYmxlIGV4Y2VwdGlvbiA9IG51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1CYWNrZ3JvdW5kID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtQmFja2dyb3VuZFdpZHRoID0gLTE7CisgICAgICAgICAgICAgICAgbUJhY2tncm91bmRIZWlnaHQgPSAtMTsKICAgICAgICAgICAgICAgICBtQmFja2dyb3VuZCA9IG1XYWxscGFwZXJNYW5hZ2VyLmdldEJpdG1hcCgpOworICAgICAgICAgICAgICAgIG1CYWNrZ3JvdW5kV2lkdGggPSBtQmFja2dyb3VuZC5nZXRXaWR0aCgpOworICAgICAgICAgICAgICAgIG1CYWNrZ3JvdW5kSGVpZ2h0ID0gbUJhY2tncm91bmQuZ2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBleGNlcHRpb24gPSBlOwogICAgICAgICAgICAgfSBjYXRjaCAoT3V0T2ZNZW1vcnlFcnJvciBlKSB7CkBAIC00MDAsNiArNDYwLDggQEAKIAogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbUJhY2tncm91bmQgPSBudWxsOworICAgICAgICAgICAgICAgIG1CYWNrZ3JvdW5kV2lkdGggPSAtMTsKKyAgICAgICAgICAgICAgICBtQmFja2dyb3VuZEhlaWdodCA9IC0xOwogICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpZiB3ZSBkbyBmYWlsIGF0IHRoaXMsIGFuZCB0aGUgZGVmYXVsdCB3YWxscGFwZXIgY2FuJ3QKICAgICAgICAgICAgICAgICAvLyBiZSBsb2FkZWQsIHdlIHdpbGwgZ28gaW50byBhIGN5Y2xlLiAgRG9uJ3QgZG8gYSBidWlsZCB3aGVyZSB0aGUKICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHdhbGxwYXBlciBjYW4ndCBiZSBsb2FkZWQuCkBAIC00MTMsMjQgKzQ3NSwyNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSB2b2lkIGRyYXdXYWxscGFwZXJXaXRoQ2FudmFzKFN1cmZhY2VIb2xkZXIgc2gsIGludCB3LCBpbnQgaCwgaW50IHgsIGludCB5KSB7CisgICAgICAgIHByaXZhdGUgdm9pZCBkcmF3V2FsbHBhcGVyV2l0aENhbnZhcyhTdXJmYWNlSG9sZGVyIHNoLCBpbnQgdywgaW50IGgsIGludCBsZWZ0LCBpbnQgdG9wKSB7CiAgICAgICAgICAgICBDYW52YXMgYyA9IHNoLmxvY2tDYW52YXMoKTsKICAgICAgICAgICAgIGlmIChjICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIlJlZHJhd2luZzogeD0iICsgeCArICIsIHk9IiArIHkpOworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiUmVkcmF3aW5nOiBsZWZ0PSIgKyBsZWZ0ICsgIiwgdG9wPSIgKyB0b3ApOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgYy50cmFuc2xhdGUoeCwgeSk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IHJpZ2h0ID0gbGVmdCArIG1CYWNrZ3JvdW5kLmdldFdpZHRoKCkgKiBtU2NhbGU7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IGJvdHRvbSA9IHRvcCArIG1CYWNrZ3JvdW5kLmdldEhlaWdodCgpICogbVNjYWxlOwogICAgICAgICAgICAgICAgICAgICBpZiAodyA8IDAgfHwgaCA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGMuc2F2ZShDYW52YXMuQ0xJUF9TQVZFX0ZMQUcpOwotICAgICAgICAgICAgICAgICAgICAgICAgYy5jbGlwUmVjdCgwLCAwLCBtQmFja2dyb3VuZC5nZXRXaWR0aCgpLCBtQmFja2dyb3VuZC5nZXRIZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGMuY2xpcFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcC5ESUZGRVJFTkNFKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGMuZHJhd0NvbG9yKDB4ZmYwMDAwMDApOwogICAgICAgICAgICAgICAgICAgICAgICAgYy5yZXN0b3JlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKG1CYWNrZ3JvdW5kICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGMuZHJhd0JpdG1hcChtQmFja2dyb3VuZCwgMCwgMCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWN0RiBkZXN0ID0gbmV3IFJlY3RGKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgYSBmaWx0ZXIgYml0bWFwPworICAgICAgICAgICAgICAgICAgICAgICAgYy5kcmF3Qml0bWFwKG1CYWNrZ3JvdW5kLCBudWxsLCBkZXN0LCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgICAgIHNoLnVubG9ja0NhbnZhc0FuZFBvc3QoYyk7CkBAIC00NDEsOCArNTA2LDggQEAKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIGRyYXdXYWxscGFwZXJXaXRoT3BlbkdMKFN1cmZhY2VIb2xkZXIgc2gsIGludCB3LCBpbnQgaCwgaW50IGxlZnQsIGludCB0b3ApIHsKICAgICAgICAgICAgIGlmICghaW5pdEdMKHNoKSkgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBmaW5hbCBmbG9hdCByaWdodCA9IGxlZnQgKyBtQmFja2dyb3VuZC5nZXRXaWR0aCgpOwotICAgICAgICAgICAgZmluYWwgZmxvYXQgYm90dG9tID0gdG9wICsgbUJhY2tncm91bmQuZ2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBmaW5hbCBmbG9hdCByaWdodCA9IGxlZnQgKyBtQmFja2dyb3VuZC5nZXRXaWR0aCgpICogbVNjYWxlOworICAgICAgICAgICAgZmluYWwgZmxvYXQgYm90dG9tID0gdG9wICsgbUJhY2tncm91bmQuZ2V0SGVpZ2h0KCkgKiBtU2NhbGU7CiAKICAgICAgICAgICAgIGZpbmFsIFJlY3QgZnJhbWUgPSBzaC5nZXRTdXJmYWNlRnJhbWUoKTsKICAgICAgICAgICAgIGZpbmFsIE1hdHJpeDRmIG9ydGhvID0gbmV3IE1hdHJpeDRmKCk7CkBAIC00NzEsNyArNTM2LDcgQEAKIAogICAgICAgICAgICAgY2hlY2tHbEVycm9yKCk7CiAKLSAgICAgICAgICAgIGlmICh3IDwgMCB8fCBoIDwgMCkgeworICAgICAgICAgICAgaWYgKHcgPiAwIHx8IGggPiAwKSB7CiAgICAgICAgICAgICAgICAgZ2xDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwogICAgICAgICAgICAgICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvTG9hZEF2ZXJhZ2VTZXJ2aWNlLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvTG9hZEF2ZXJhZ2VTZXJ2aWNlLmphdmEKaW5kZXggNjEwZTQyYi4uNTlmZmUwMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL0xvYWRBdmVyYWdlU2VydmljZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9Mb2FkQXZlcmFnZVNlcnZpY2UuamF2YQpAQCAtMTk1LDkgKzE5NSwxMCBAQAogICAgICAgICAgICAgaW50IHN5c3RlbVcgPSAoc3lzdGVtVGltZSpXKS90b3RhbFRpbWU7CiAgICAgICAgICAgICBpbnQgaXJxVyA9ICgoaW93YWl0VGltZStpcnFUaW1lK3NvZnRJcnFUaW1lKSpXKS90b3RhbFRpbWU7CiAKLSAgICAgICAgICAgIGludCB4ID0gUklHSFQgLSBtUGFkZGluZ1JpZ2h0OwotICAgICAgICAgICAgaW50IHRvcCA9IG1QYWRkaW5nVG9wICsgMjsKLSAgICAgICAgICAgIGludCBib3R0b20gPSBtUGFkZGluZ1RvcCArIG1GSCAtIDI7CisgICAgICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gZ2V0UGFkZGluZ1JpZ2h0KCk7CisgICAgICAgICAgICBpbnQgeCA9IFJJR0hUIC0gcGFkZGluZ1JpZ2h0OworICAgICAgICAgICAgaW50IHRvcCA9IGdldFBhZGRpbmdUb3AoKSArIDI7CisgICAgICAgICAgICBpbnQgYm90dG9tID0gZ2V0UGFkZGluZ1RvcCgpICsgbUZIIC0gMjsKIAogICAgICAgICAgICAgaWYgKGlycVcgPiAwKSB7CiAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdSZWN0KHgtaXJxVywgdG9wLCB4LCBib3R0b20sIG1JcnFQYWludCk7CkBAIC0yMTIsMTYgKzIxMywxNiBAQAogICAgICAgICAgICAgICAgIHggLT0gdXNlclc7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGludCB5ID0gbVBhZGRpbmdUb3AgLSAoaW50KW1Bc2NlbnQ7Ci0gICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoc3RhdHMubUxvYWRUZXh0LCBSSUdIVC1tUGFkZGluZ1JpZ2h0LXN0YXRzLm1Mb2FkV2lkdGgtMSwKKyAgICAgICAgICAgIGludCB5ID0gZ2V0UGFkZGluZ1RvcCgpIC0gKGludCltQXNjZW50OworICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KHN0YXRzLm1Mb2FkVGV4dCwgUklHSFQtcGFkZGluZ1JpZ2h0LXN0YXRzLm1Mb2FkV2lkdGgtMSwKICAgICAgICAgICAgICAgICAgICAgeS0xLCBtU2hhZG93UGFpbnQpOwotICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KHN0YXRzLm1Mb2FkVGV4dCwgUklHSFQtbVBhZGRpbmdSaWdodC1zdGF0cy5tTG9hZFdpZHRoLTEsCisgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoc3RhdHMubUxvYWRUZXh0LCBSSUdIVC1wYWRkaW5nUmlnaHQtc3RhdHMubUxvYWRXaWR0aC0xLAogICAgICAgICAgICAgICAgICAgICB5KzEsIG1TaGFkb3dQYWludCk7Ci0gICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoc3RhdHMubUxvYWRUZXh0LCBSSUdIVC1tUGFkZGluZ1JpZ2h0LXN0YXRzLm1Mb2FkV2lkdGgrMSwKKyAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dChzdGF0cy5tTG9hZFRleHQsIFJJR0hULXBhZGRpbmdSaWdodC1zdGF0cy5tTG9hZFdpZHRoKzEsCiAgICAgICAgICAgICAgICAgICAgIHktMSwgbVNoYWRvdzJQYWludCk7Ci0gICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoc3RhdHMubUxvYWRUZXh0LCBSSUdIVC1tUGFkZGluZ1JpZ2h0LXN0YXRzLm1Mb2FkV2lkdGgrMSwKKyAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dChzdGF0cy5tTG9hZFRleHQsIFJJR0hULXBhZGRpbmdSaWdodC1zdGF0cy5tTG9hZFdpZHRoKzEsCiAgICAgICAgICAgICAgICAgICAgIHkrMSwgbVNoYWRvdzJQYWludCk7Ci0gICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoc3RhdHMubUxvYWRUZXh0LCBSSUdIVC1tUGFkZGluZ1JpZ2h0LXN0YXRzLm1Mb2FkV2lkdGgsCisgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoc3RhdHMubUxvYWRUZXh0LCBSSUdIVC1wYWRkaW5nUmlnaHQtc3RhdHMubUxvYWRXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgeSwgbUxvYWRQYWludCk7CiAKICAgICAgICAgICAgIGludCBOID0gc3RhdHMuY291bnRXb3JraW5nU3RhdHMoKTsKQEAgLTIzMyw3ICsyMzQsNyBAQAogCiAgICAgICAgICAgICAgICAgdXNlclcgPSAoc3QucmVsX3V0aW1lKlcpL3RvdGFsVGltZTsKICAgICAgICAgICAgICAgICBzeXN0ZW1XID0gKHN0LnJlbF9zdGltZSpXKS90b3RhbFRpbWU7Ci0gICAgICAgICAgICAgICAgeCA9IFJJR0hUIC0gbVBhZGRpbmdSaWdodDsKKyAgICAgICAgICAgICAgICB4ID0gUklHSFQgLSBwYWRkaW5nUmlnaHQ7CiAgICAgICAgICAgICAgICAgaWYgKHN5c3RlbVcgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3UmVjdCh4LXN5c3RlbVcsIHRvcCwgeCwgYm90dG9tLCBtU3lzdGVtUGFpbnQpOwogICAgICAgICAgICAgICAgICAgICB4IC09IHN5c3RlbVc7CkBAIC0yNDMsMTggKzI0NCwxOCBAQAogICAgICAgICAgICAgICAgICAgICB4IC09IHVzZXJXOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dChzdC5uYW1lLCBSSUdIVC1tUGFkZGluZ1JpZ2h0LXN0Lm5hbWVXaWR0aC0xLAorICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dChzdC5uYW1lLCBSSUdIVC1wYWRkaW5nUmlnaHQtc3QubmFtZVdpZHRoLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICB5LTEsIG1TaGFkb3dQYWludCk7Ci0gICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KHN0Lm5hbWUsIFJJR0hULW1QYWRkaW5nUmlnaHQtc3QubmFtZVdpZHRoLTEsCisgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KHN0Lm5hbWUsIFJJR0hULXBhZGRpbmdSaWdodC1zdC5uYW1lV2lkdGgtMSwKICAgICAgICAgICAgICAgICAgICAgICAgIHkrMSwgbVNoYWRvd1BhaW50KTsKLSAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoc3QubmFtZSwgUklHSFQtbVBhZGRpbmdSaWdodC1zdC5uYW1lV2lkdGgrMSwKKyAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoc3QubmFtZSwgUklHSFQtcGFkZGluZ1JpZ2h0LXN0Lm5hbWVXaWR0aCsxLAogICAgICAgICAgICAgICAgICAgICAgICAgeS0xLCBtU2hhZG93MlBhaW50KTsKLSAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoc3QubmFtZSwgUklHSFQtbVBhZGRpbmdSaWdodC1zdC5uYW1lV2lkdGgrMSwKKyAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoc3QubmFtZSwgUklHSFQtcGFkZGluZ1JpZ2h0LXN0Lm5hbWVXaWR0aCsxLAogICAgICAgICAgICAgICAgICAgICAgICAgeSsxLCBtU2hhZG93MlBhaW50KTsKICAgICAgICAgICAgICAgICBQYWludCBwID0gbUxvYWRQYWludDsKICAgICAgICAgICAgICAgICBpZiAoc3QuYWRkZWQpIHAgPSBtQWRkZWRQYWludDsKICAgICAgICAgICAgICAgICBpZiAoc3QucmVtb3ZlZCkgcCA9IG1SZW1vdmVkUGFpbnQ7Ci0gICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KHN0Lm5hbWUsIFJJR0hULW1QYWRkaW5nUmlnaHQtc3QubmFtZVdpZHRoLCB5LCBwKTsKKyAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoc3QubmFtZSwgUklHSFQtcGFkZGluZ1JpZ2h0LXN0Lm5hbWVXaWR0aCwgeSwgcCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMjcwLDggKzI3MSw4IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQgbmVlZGVkV2lkdGggPSBtUGFkZGluZ0xlZnQgKyBtUGFkZGluZ1JpZ2h0ICsgbWF4V2lkdGg7Ci0gICAgICAgICAgICBpbnQgbmVlZGVkSGVpZ2h0ID0gbVBhZGRpbmdUb3AgKyBtUGFkZGluZ0JvdHRvbSArIChtRkgqKDErTlcpKTsKKyAgICAgICAgICAgIGludCBuZWVkZWRXaWR0aCA9IGdldFBhZGRpbmdMZWZ0KCkgKyBnZXRQYWRkaW5nUmlnaHQoKSArIG1heFdpZHRoOworICAgICAgICAgICAgaW50IG5lZWRlZEhlaWdodCA9IGdldFBhZGRpbmdUb3AoKSArIGdldFBhZGRpbmdCb3R0b20oKSArIChtRkgqKDErTlcpKTsKICAgICAgICAgICAgIGlmIChuZWVkZWRXaWR0aCAhPSBtTmVlZGVkV2lkdGggfHwgbmVlZGVkSGVpZ2h0ICE9IG1OZWVkZWRIZWlnaHQpIHsKICAgICAgICAgICAgICAgICBtTmVlZGVkV2lkdGggPSBuZWVkZWRXaWR0aDsKICAgICAgICAgICAgICAgICBtTmVlZGVkSGVpZ2h0ID0gbmVlZGVkSGVpZ2h0OwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL1NlYXJjaFBhbmVsVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL1NlYXJjaFBhbmVsVmlldy5qYXZhCmluZGV4IGM3ZjBlMTcuLmIwOTZlYWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9TZWFyY2hQYW5lbFZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvU2VhcmNoUGFuZWxWaWV3LmphdmEKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgICAgICBwdWJsaWMgdm9pZCBvblRyaWdnZXIoVmlldyB2LCBmaW5hbCBpbnQgdGFyZ2V0KSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgcmVzSWQgPSBtR2xvd1BhZFZpZXcuZ2V0UmVzb3VyY2VJZEZvclRhcmdldCh0YXJnZXQpOwogICAgICAgICAgICAgc3dpdGNoIChyZXNJZCkgewotICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kcmF3YWJsZS5pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWM6CisgICAgICAgICAgICAgICAgY2FzZSBSLmRyYXdhYmxlLmljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYzoKICAgICAgICAgICAgICAgICAgICAgbVdhaXRpbmdGb3JMYXVuY2ggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBzdGFydEFzc2lzdEFjdGl2aXR5KCk7CiAgICAgICAgICAgICAgICAgICAgIHZpYnJhdGUoKTsKQEAgLTE3NSw3ICsxNzUsNyBAQAogICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wb25lbnQgPSBpbnRlbnQuZ2V0Q29tcG9uZW50KCk7CiAgICAgICAgICAgICBpZiAoY29tcG9uZW50ID09IG51bGwgfHwgIW1HbG93UGFkVmlldy5yZXBsYWNlVGFyZ2V0RHJhd2FibGVzSWZQcmVzZW50KGNvbXBvbmVudCwKICAgICAgICAgICAgICAgICAgICAgQVNTSVNUX0lDT05fTUVUQURBVEFfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kcmF3YWJsZS5pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWMpKSB7CisgICAgICAgICAgICAgICAgICAgIFIuZHJhd2FibGUuaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljKSkgewogICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiQ291bGRuJ3QgZ3JhYiBpY29uIGZvciBjb21wb25lbnQgIiArIGNvbXBvbmVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnQvUmVjZW50c0hvcml6b250YWxTY3JvbGxWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50L1JlY2VudHNIb3Jpem9udGFsU2Nyb2xsVmlldy5qYXZhCmluZGV4IGJlNDJiYzAuLjM1YzgyNGIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnQvUmVjZW50c0hvcml6b250YWxTY3JvbGxWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudC9SZWNlbnRzSG9yaXpvbnRhbFNjcm9sbFZpZXcuamF2YQpAQCAtNTcsNyArNTcsNyBAQAogICAgIHB1YmxpYyBSZWNlbnRzSG9yaXpvbnRhbFNjcm9sbFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIDApOwogICAgICAgICBmbG9hdCBkZW5zaXR5U2NhbGUgPSBnZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpLmRlbnNpdHk7Ci0gICAgICAgIGZsb2F0IHBhZ2luZ1RvdWNoU2xvcCA9IFZpZXdDb25maWd1cmF0aW9uLmdldChtQ29udGV4dCkuZ2V0U2NhbGVkUGFnaW5nVG91Y2hTbG9wKCk7CisgICAgICAgIGZsb2F0IHBhZ2luZ1RvdWNoU2xvcCA9IFZpZXdDb25maWd1cmF0aW9uLmdldChnZXRDb250ZXh0KCkpLmdldFNjYWxlZFBhZ2luZ1RvdWNoU2xvcCgpOwogICAgICAgICBtU3dpcGVIZWxwZXIgPSBuZXcgU3dpcGVIZWxwZXIoU3dpcGVIZWxwZXIuWSwgdGhpcywgZGVuc2l0eVNjYWxlLCBwYWdpbmdUb3VjaFNsb3ApOwogICAgICAgICBtRmFkZWRFZGdlRHJhd0hlbHBlciA9IEZhZGVkRWRnZURyYXdIZWxwZXIuY3JlYXRlKGNvbnRleHQsIGF0dHJzLCB0aGlzLCBmYWxzZSk7CiAgICAgICAgIG1SZWN5Y2xlZFZpZXdzID0gbmV3IEhhc2hTZXQ8Vmlldz4oKTsKQEAgLTIzOSw5ICsyMzksOSBAQAogICAgICAgICBpZiAobUZhZGVkRWRnZURyYXdIZWxwZXIgIT0gbnVsbCkgewogCiAgICAgICAgICAgICBtRmFkZWRFZGdlRHJhd0hlbHBlci5kcmF3Q2FsbGJhY2soY2FudmFzLAotICAgICAgICAgICAgICAgICAgICBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG1TY3JvbGxYLCBtU2Nyb2xsWSwKKyAgICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBnZXRTY3JvbGxYKCksIGdldFNjcm9sbFkoKSwKICAgICAgICAgICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgZ2V0TGVmdEZhZGluZ0VkZ2VTdHJlbmd0aCgpLCBnZXRSaWdodEZhZGluZ0VkZ2VTdHJlbmd0aCgpLCBtUGFkZGluZ1RvcCk7CisgICAgICAgICAgICAgICAgICAgIGdldExlZnRGYWRpbmdFZGdlU3RyZW5ndGgoKSwgZ2V0UmlnaHRGYWRpbmdFZGdlU3RyZW5ndGgoKSwgZ2V0UGFkZGluZ1RvcCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjgwLDcgKzI4MCw3IEBACiAgICAgICAgIHN1cGVyLm9uRmluaXNoSW5mbGF0ZSgpOwogICAgICAgICBzZXRTY3JvbGxiYXJGYWRpbmdFbmFibGVkKHRydWUpOwogICAgICAgICBtTGluZWFyTGF5b3V0ID0gKExpbmVhckxheW91dCkgZmluZFZpZXdCeUlkKFIuaWQucmVjZW50c19saW5lYXJfbGF5b3V0KTsKLSAgICAgICAgZmluYWwgaW50IGxlZnRQYWRkaW5nID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkKKyAgICAgICAgZmluYWwgaW50IGxlZnRQYWRkaW5nID0gZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpCiAgICAgICAgICAgICAuZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQoUi5kaW1lbi5zdGF0dXNfYmFyX3JlY2VudHNfdGh1bWJuYWlsX2xlZnRfbWFyZ2luKTsKICAgICAgICAgc2V0T3ZlclNjcm9sbEVmZmVjdFBhZGRpbmcobGVmdFBhZGRpbmcsIDApOwogICAgIH0KQEAgLTI5Nyw3ICsyOTcsNyBAQAogICAgICAgICBzdXBlci5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKG5ld0NvbmZpZyk7CiAgICAgICAgIGZsb2F0IGRlbnNpdHlTY2FsZSA9IGdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eTsKICAgICAgICAgbVN3aXBlSGVscGVyLnNldERlbnNpdHlTY2FsZShkZW5zaXR5U2NhbGUpOwotICAgICAgICBmbG9hdCBwYWdpbmdUb3VjaFNsb3AgPSBWaWV3Q29uZmlndXJhdGlvbi5nZXQobUNvbnRleHQpLmdldFNjYWxlZFBhZ2luZ1RvdWNoU2xvcCgpOworICAgICAgICBmbG9hdCBwYWdpbmdUb3VjaFNsb3AgPSBWaWV3Q29uZmlndXJhdGlvbi5nZXQoZ2V0Q29udGV4dCgpKS5nZXRTY2FsZWRQYWdpbmdUb3VjaFNsb3AoKTsKICAgICAgICAgbVN3aXBlSGVscGVyLnNldFBhZ2luZ1RvdWNoU2xvcChwYWdpbmdUb3VjaFNsb3ApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudC9SZWNlbnRzUGFuZWxWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50L1JlY2VudHNQYW5lbFZpZXcuamF2YQppbmRleCA3ODhlODQzLi5lZjU2MDQ0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50L1JlY2VudHNQYW5lbFZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50L1JlY2VudHNQYW5lbFZpZXcuamF2YQpAQCAtMzMwLDcgKzMzMCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNob3dJbXBsKGJvb2xlYW4gc2hvdykgewotICAgICAgICBzZW5kQ2xvc2VTeXN0ZW1XaW5kb3dzKG1Db250ZXh0LCBCYXNlU3RhdHVzQmFyLlNZU1RFTV9ESUFMT0dfUkVBU09OX1JFQ0VOVF9BUFBTKTsKKyAgICAgICAgc2VuZENsb3NlU3lzdGVtV2luZG93cyhnZXRDb250ZXh0KCksIEJhc2VTdGF0dXNCYXIuU1lTVEVNX0RJQUxPR19SRUFTT05fUkVDRU5UX0FQUFMpOwogCiAgICAgICAgIG1TaG93aW5nID0gc2hvdzsKIApAQCAtMzcyLDExICszNzIsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkaXNtaXNzKCkgewotICAgICAgICAoKFJlY2VudHNBY3Rpdml0eSkgbUNvbnRleHQpLmRpc21pc3NBbmRHb0hvbWUoKTsKKyAgICAgICAgKChSZWNlbnRzQWN0aXZpdHkpIGdldENvbnRleHQoKSkuZGlzbWlzc0FuZEdvSG9tZSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRpc21pc3NBbmRHb0JhY2soKSB7Ci0gICAgICAgICgoUmVjZW50c0FjdGl2aXR5KSBtQ29udGV4dCkuZGlzbWlzc0FuZEdvQmFjaygpOworICAgICAgICAoKFJlY2VudHNBY3Rpdml0eSkgZ2V0Q29udGV4dCgpKS5kaXNtaXNzQW5kR29CYWNrKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgb25BbmltYXRpb25DYW5jZWwoQW5pbWF0b3IgYW5pbWF0aW9uKSB7CkBAIC00MjQsNyArNDI0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB1cGRhdGVWYWx1ZXNGcm9tUmVzb3VyY2VzKCkgewotICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGZpbmFsIFJlc291cmNlcyByZXMgPSBnZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCk7CiAgICAgICAgIG1UaHVtYm5haWxXaWR0aCA9IE1hdGgucm91bmQocmVzLmdldERpbWVuc2lvbihSLmRpbWVuLnN0YXR1c19iYXJfcmVjZW50c190aHVtYm5haWxfd2lkdGgpKTsKICAgICAgICAgbUZpdFRodW1ibmFpbFRvWFkgPSByZXMuZ2V0Qm9vbGVhbihSLmJvb2wuY29uZmlnX3JlY2VudHNfdGh1bWJuYWlsX2ltYWdlX2ZpdHNfdG9feHkpOwogICAgIH0KQEAgLTQ0MCw3ICs0NDAsNyBAQAogICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7Ci0gICAgICAgIG1MaXN0QWRhcHRlciA9IG5ldyBUYXNrRGVzY3JpcHRpb25BZGFwdGVyKG1Db250ZXh0KTsKKyAgICAgICAgbUxpc3RBZGFwdGVyID0gbmV3IFRhc2tEZXNjcmlwdGlvbkFkYXB0ZXIoZ2V0Q29udGV4dCgpKTsKICAgICAgICAgbVJlY2VudHNDb250YWluZXIuc2V0QWRhcHRlcihtTGlzdEFkYXB0ZXIpOwogICAgICAgICBtUmVjZW50c0NvbnRhaW5lci5zZXRDYWxsYmFjayh0aGlzKTsKIApAQCAtNDc0LDcgKzQ3NCw3IEBACiAgICAgICAgICAgICBpZiAoc2hvdyAmJiBoLmljb25WaWV3LmdldFZpc2liaWxpdHkoKSAhPSBWaWV3LlZJU0lCTEUpIHsKICAgICAgICAgICAgICAgICBpZiAoYW5pbSkgewogICAgICAgICAgICAgICAgICAgICBoLmljb25WaWV3LnNldEFuaW1hdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmltYXRpb25VdGlscy5sb2FkQW5pbWF0aW9uKG1Db250ZXh0LCBSLmFuaW0ucmVjZW50X2FwcGVhcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvblV0aWxzLmxvYWRBbmltYXRpb24oZ2V0Q29udGV4dCgpLCBSLmFuaW0ucmVjZW50X2FwcGVhcikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBoLmljb25WaWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKICAgICAgICAgICAgIH0KQEAgLTUwNiw3ICs1MDYsNyBAQAogICAgICAgICAgICAgaWYgKHNob3cgJiYgaC50aHVtYm5haWxWaWV3LmdldFZpc2liaWxpdHkoKSAhPSBWaWV3LlZJU0lCTEUpIHsKICAgICAgICAgICAgICAgICBpZiAoYW5pbSkgewogICAgICAgICAgICAgICAgICAgICBoLnRodW1ibmFpbFZpZXcuc2V0QW5pbWF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvblV0aWxzLmxvYWRBbmltYXRpb24obUNvbnRleHQsIFIuYW5pbS5yZWNlbnRfYXBwZWFyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5pbWF0aW9uVXRpbHMubG9hZEFuaW1hdGlvbihnZXRDb250ZXh0KCksIFIuYW5pbS5yZWNlbnRfYXBwZWFyKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGgudGh1bWJuYWlsVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CiAgICAgICAgICAgICB9CkBAIC02MTcsNyArNjE3LDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1SZWNlbnRUYXNrRGVzY3JpcHRpb25zLmFkZEFsbCh0YXNrcyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCgoUmVjZW50c0FjdGl2aXR5KSBtQ29udGV4dCkuaXNBY3Rpdml0eVNob3dpbmcoKSkgeworICAgICAgICBpZiAoKChSZWNlbnRzQWN0aXZpdHkpIGdldENvbnRleHQoKSkuaXNBY3Rpdml0eVNob3dpbmcoKSkgewogICAgICAgICAgICAgcmVmcmVzaFZpZXdzKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC03MjYsMTMgKzcyNiwxMyBAQAogICAgICAgICAvLyBDdXJyZW50bHksIGVpdGhlciBkaXJlY3Rpb24gbWVhbnMgdGhlIHNhbWUgdGhpbmcsIHNvIGlnbm9yZSBkaXJlY3Rpb24gYW5kIHJlbW92ZQogICAgICAgICAvLyB0aGUgdGFzay4KICAgICAgICAgZmluYWwgQWN0aXZpdHlNYW5hZ2VyIGFtID0gKEFjdGl2aXR5TWFuYWdlcikKLSAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQUNUSVZJVFlfU0VSVklDRSk7CisgICAgICAgICAgICAgICAgZ2V0Q29udGV4dCgpLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BQ1RJVklUWV9TRVJWSUNFKTsKICAgICAgICAgaWYgKGFtICE9IG51bGwpIHsKICAgICAgICAgICAgIGFtLnJlbW92ZVRhc2soYWQucGVyc2lzdGVudFRhc2tJZCwgQWN0aXZpdHlNYW5hZ2VyLlJFTU9WRV9UQVNLX0tJTExfUFJPQ0VTUyk7CiAKICAgICAgICAgICAgIC8vIEFjY2Vzc2liaWxpdHkgZmVlZGJhY2sKICAgICAgICAgICAgIHNldENvbnRlbnREZXNjcmlwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCwgYWQuZ2V0TGFiZWwoKSkpOworICAgICAgICAgICAgICAgICAgICBnZXRDb250ZXh0KCkuZ2V0U3RyaW5nKFIuc3RyaW5nLmFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCwgYWQuZ2V0TGFiZWwoKSkpOwogICAgICAgICAgICAgc2VuZEFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX1NFTEVDVEVEKTsKICAgICAgICAgICAgIHNldENvbnRlbnREZXNjcmlwdGlvbihudWxsKTsKICAgICAgICAgfQpAQCAtNzQxLDcgKzc0MSw3IEBACiAgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0QXBwbGljYXRpb25EZXRhaWxzQWN0aXZpdHkoU3RyaW5nIHBhY2thZ2VOYW1lKSB7CiAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFNldHRpbmdzLkFDVElPTl9BUFBMSUNBVElPTl9ERVRBSUxTX1NFVFRJTkdTLAogICAgICAgICAgICAgICAgIFVyaS5mcm9tUGFydHMoInBhY2thZ2UiLCBwYWNrYWdlTmFtZSwgbnVsbCkpOwotICAgICAgICBpbnRlbnQuc2V0Q29tcG9uZW50KGludGVudC5yZXNvbHZlQWN0aXZpdHkobUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKSkpOworICAgICAgICBpbnRlbnQuc2V0Q29tcG9uZW50KGludGVudC5yZXNvbHZlQWN0aXZpdHkoZ2V0Q29udGV4dCgpLmdldFBhY2thZ2VNYW5hZ2VyKCkpKTsKICAgICAgICAgVGFza1N0YWNrQnVpbGRlci5jcmVhdGUoZ2V0Q29udGV4dCgpKQogICAgICAgICAgICAgICAgIC5hZGROZXh0SW50ZW50V2l0aFBhcmVudFN0YWNrKGludGVudCkuc3RhcnRBY3Rpdml0aWVzKCk7CiAgICAgfQpAQCAtNzU4LDcgKzc1OCw3IEBACiAgICAgICAgICAgICBmaW5hbCBWaWV3IHNlbGVjdGVkVmlldywgZmluYWwgVmlldyBhbmNob3JWaWV3LCBmaW5hbCBWaWV3IHRodW1ibmFpbFZpZXcpIHsKICAgICAgICAgdGh1bWJuYWlsVmlldy5zZXRTZWxlY3RlZCh0cnVlKTsKICAgICAgICAgZmluYWwgUG9wdXBNZW51IHBvcHVwID0KLSAgICAgICAgICAgIG5ldyBQb3B1cE1lbnUobUNvbnRleHQsIGFuY2hvclZpZXcgPT0gbnVsbCA/IHNlbGVjdGVkVmlldyA6IGFuY2hvclZpZXcpOworICAgICAgICAgICAgbmV3IFBvcHVwTWVudShnZXRDb250ZXh0KCksIGFuY2hvclZpZXcgPT0gbnVsbCA/IHNlbGVjdGVkVmlldyA6IGFuY2hvclZpZXcpOwogICAgICAgICBtUG9wdXAgPSBwb3B1cDsKICAgICAgICAgcG9wdXAuZ2V0TWVudUluZmxhdGVyKCkuaW5mbGF0ZShSLm1lbnUucmVjZW50X3BvcHVwX21lbnUsIHBvcHVwLmdldE1lbnUoKSk7CiAgICAgICAgIHBvcHVwLnNldE9uTWVudUl0ZW1DbGlja0xpc3RlbmVyKG5ldyBQb3B1cE1lbnUuT25NZW51SXRlbUNsaWNrTGlzdGVuZXIoKSB7CkBAIC03OTMsMTUgKzc5MywxNSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRpc3BhdGNoRHJhdyhDYW52YXMgY2FudmFzKSB7CiAgICAgICAgIHN1cGVyLmRpc3BhdGNoRHJhdyhjYW52YXMpOwogCi0gICAgICAgIGludCBwYWRkaW5nTGVmdCA9IG1QYWRkaW5nTGVmdDsKKyAgICAgICAgaW50IHBhZGRpbmdMZWZ0ID0gZ2V0UGFkZGluZ0xlZnQoKTsKICAgICAgICAgZmluYWwgYm9vbGVhbiBvZmZzZXRSZXF1aXJlZCA9IGlzUGFkZGluZ09mZnNldFJlcXVpcmVkKCk7CiAgICAgICAgIGlmIChvZmZzZXRSZXF1aXJlZCkgewogICAgICAgICAgICAgcGFkZGluZ0xlZnQgKz0gZ2V0TGVmdFBhZGRpbmdPZmZzZXQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBsZWZ0ID0gbVNjcm9sbFggKyBwYWRkaW5nTGVmdDsKLSAgICAgICAgaW50IHJpZ2h0ID0gbGVmdCArIG1SaWdodCAtIG1MZWZ0IC0gbVBhZGRpbmdSaWdodCAtIHBhZGRpbmdMZWZ0OwotICAgICAgICBpbnQgdG9wID0gbVNjcm9sbFkgKyBnZXRGYWRlVG9wKG9mZnNldFJlcXVpcmVkKTsKKyAgICAgICAgaW50IGxlZnQgPSBnZXRTY3JvbGxYKCkgKyBwYWRkaW5nTGVmdDsKKyAgICAgICAgaW50IHJpZ2h0ID0gbGVmdCArIGdldFJpZ2h0KCkgLSBnZXRMZWZ0KCkgLSBnZXRQYWRkaW5nUmlnaHQoKSAtIHBhZGRpbmdMZWZ0OworICAgICAgICBpbnQgdG9wID0gZ2V0U2Nyb2xsWSgpICsgZ2V0RmFkZVRvcChvZmZzZXRSZXF1aXJlZCk7CiAgICAgICAgIGludCBib3R0b20gPSB0b3AgKyBnZXRGYWRlSGVpZ2h0KG9mZnNldFJlcXVpcmVkKTsKIAogICAgICAgICBpZiAob2Zmc2V0UmVxdWlyZWQpIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnQvUmVjZW50c1ZlcnRpY2FsU2Nyb2xsVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudC9SZWNlbnRzVmVydGljYWxTY3JvbGxWaWV3LmphdmEKaW5kZXggNmRkZGMzOS4uMjk3ZmUwZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudC9SZWNlbnRzVmVydGljYWxTY3JvbGxWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudC9SZWNlbnRzVmVydGljYWxTY3JvbGxWaWV3LmphdmEKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBwdWJsaWMgUmVjZW50c1ZlcnRpY2FsU2Nyb2xsVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewogICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgMCk7CiAgICAgICAgIGZsb2F0IGRlbnNpdHlTY2FsZSA9IGdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eTsKLSAgICAgICAgZmxvYXQgcGFnaW5nVG91Y2hTbG9wID0gVmlld0NvbmZpZ3VyYXRpb24uZ2V0KG1Db250ZXh0KS5nZXRTY2FsZWRQYWdpbmdUb3VjaFNsb3AoKTsKKyAgICAgICAgZmxvYXQgcGFnaW5nVG91Y2hTbG9wID0gVmlld0NvbmZpZ3VyYXRpb24uZ2V0KGdldENvbnRleHQoKSkuZ2V0U2NhbGVkUGFnaW5nVG91Y2hTbG9wKCk7CiAgICAgICAgIG1Td2lwZUhlbHBlciA9IG5ldyBTd2lwZUhlbHBlcihTd2lwZUhlbHBlci5YLCB0aGlzLCBkZW5zaXR5U2NhbGUsIHBhZ2luZ1RvdWNoU2xvcCk7CiAKICAgICAgICAgbUZhZGVkRWRnZURyYXdIZWxwZXIgPSBGYWRlZEVkZ2VEcmF3SGVscGVyLmNyZWF0ZShjb250ZXh0LCBhdHRycywgdGhpcywgdHJ1ZSk7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgc2Nyb2xsUG9zaXRpb25PZk1vc3RSZWNlbnQoKSB7Ci0gICAgICAgIHJldHVybiBtTGluZWFyTGF5b3V0LmdldEhlaWdodCgpIC0gZ2V0SGVpZ2h0KCkgKyBtUGFkZGluZ1RvcDsKKyAgICAgICAgcmV0dXJuIG1MaW5lYXJMYXlvdXQuZ2V0SGVpZ2h0KCkgLSBnZXRIZWlnaHQoKSArIGdldFBhZGRpbmdUb3AoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYWRkVG9SZWN5Y2xlZFZpZXdzKFZpZXcgdikgewpAQCAtMjQ4LDkgKzI0OCw5IEBACiAgICAgICAgIGlmIChtRmFkZWRFZGdlRHJhd0hlbHBlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIG9mZnNldFJlcXVpcmVkID0gaXNQYWRkaW5nT2Zmc2V0UmVxdWlyZWQoKTsKICAgICAgICAgICAgIG1GYWRlZEVkZ2VEcmF3SGVscGVyLmRyYXdDYWxsYmFjayhjYW52YXMsCi0gICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCB0b3AgKyBnZXRGYWRlVG9wKG9mZnNldFJlcXVpcmVkKSwgYm90dG9tLCBtU2Nyb2xsWCwgbVNjcm9sbFksCisgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCB0b3AgKyBnZXRGYWRlVG9wKG9mZnNldFJlcXVpcmVkKSwgYm90dG9tLCBnZXRTY3JvbGxYKCksIGdldFNjcm9sbFkoKSwKICAgICAgICAgICAgICAgICAgICAgZ2V0VG9wRmFkaW5nRWRnZVN0cmVuZ3RoKCksIGdldEJvdHRvbUZhZGluZ0VkZ2VTdHJlbmd0aCgpLAotICAgICAgICAgICAgICAgICAgICAwLCAwLCBtUGFkZGluZ1RvcCk7CisgICAgICAgICAgICAgICAgICAgIDAsIDAsIGdldFBhZGRpbmdUb3AoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI4OSw3ICsyODksNyBAQAogICAgICAgICBzdXBlci5vbkZpbmlzaEluZmxhdGUoKTsKICAgICAgICAgc2V0U2Nyb2xsYmFyRmFkaW5nRW5hYmxlZCh0cnVlKTsKICAgICAgICAgbUxpbmVhckxheW91dCA9IChMaW5lYXJMYXlvdXQpIGZpbmRWaWV3QnlJZChSLmlkLnJlY2VudHNfbGluZWFyX2xheW91dCk7Ci0gICAgICAgIGZpbmFsIGludCBsZWZ0UGFkZGluZyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpCisgICAgICAgIGZpbmFsIGludCBsZWZ0UGFkZGluZyA9IGdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKQogICAgICAgICAgICAgLmdldERpbWVuc2lvblBpeGVsT2Zmc2V0KFIuZGltZW4uc3RhdHVzX2Jhcl9yZWNlbnRzX3RodW1ibmFpbF9sZWZ0X21hcmdpbik7CiAgICAgICAgIHNldE92ZXJTY3JvbGxFZmZlY3RQYWRkaW5nKGxlZnRQYWRkaW5nLCAwKTsKICAgICB9CkBAIC0zMDYsNyArMzA2LDcgQEAKICAgICAgICAgc3VwZXIub25Db25maWd1cmF0aW9uQ2hhbmdlZChuZXdDb25maWcpOwogICAgICAgICBmbG9hdCBkZW5zaXR5U2NhbGUgPSBnZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpLmRlbnNpdHk7CiAgICAgICAgIG1Td2lwZUhlbHBlci5zZXREZW5zaXR5U2NhbGUoZGVuc2l0eVNjYWxlKTsKLSAgICAgICAgZmxvYXQgcGFnaW5nVG91Y2hTbG9wID0gVmlld0NvbmZpZ3VyYXRpb24uZ2V0KG1Db250ZXh0KS5nZXRTY2FsZWRQYWdpbmdUb3VjaFNsb3AoKTsKKyAgICAgICAgZmxvYXQgcGFnaW5nVG91Y2hTbG9wID0gVmlld0NvbmZpZ3VyYXRpb24uZ2V0KGdldENvbnRleHQoKSkuZ2V0U2NhbGVkUGFnaW5nVG91Y2hTbG9wKCk7CiAgICAgICAgIG1Td2lwZUhlbHBlci5zZXRQYWdpbmdUb3VjaFNsb3AocGFnaW5nVG91Y2hTbG9wKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnQvVGFza0Rlc2NyaXB0aW9uLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50L1Rhc2tEZXNjcmlwdGlvbi5qYXZhCmluZGV4IDJiYzI4MjEuLjJlMGVlMzYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnQvVGFza0Rlc2NyaXB0aW9uLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudC9UYXNrRGVzY3JpcHRpb24uamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIAogcHVibGljIGZpbmFsIGNsYXNzIFRhc2tEZXNjcmlwdGlvbiB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc2V0dGluZ3MvQnJpZ2h0bmVzc0RpYWxvZy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3NldHRpbmdzL0JyaWdodG5lc3NEaWFsb2cuamF2YQppbmRleCBmZjc5ZjA0Li5iZDVlNWU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc2V0dGluZ3MvQnJpZ2h0bmVzc0RpYWxvZy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zZXR0aW5ncy9CcmlnaHRuZXNzRGlhbG9nLmphdmEKQEAgLTIxLDYgKzIxLDggQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CitpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OwpAQCAtNjcsOSArNjksMTUgQEAKICAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CiAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CiAgICAgICAgIFdpbmRvdyB3aW5kb3cgPSBnZXRXaW5kb3coKTsKLSAgICAgICAgd2luZG93LnNldFR5cGUoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9WT0xVTUVfT1ZFUkxBWSk7Ci0gICAgICAgIHdpbmRvdy5nZXRBdHRyaWJ1dGVzKCkucHJpdmF0ZUZsYWdzIHw9CisgICAgICAgIHdpbmRvdy5zZXRHcmF2aXR5KEdyYXZpdHkuVE9QKTsKKyAgICAgICAgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMgbHAgPSB3aW5kb3cuZ2V0QXR0cmlidXRlcygpOworICAgICAgICAvLyBPZmZzZXQgZnJvbSB0aGUgdG9wCisgICAgICAgIGxwLnkgPSBnZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi52b2x1bWVfcGFuZWxfdG9wKTsKKyAgICAgICAgbHAudHlwZSA9IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfVk9MVU1FX09WRVJMQVk7CisgICAgICAgIGxwLnByaXZhdGVGbGFncyB8PQogICAgICAgICAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlBSSVZBVEVfRkxBR19TSE9XX0ZPUl9BTExfVVNFUlM7CisgICAgICAgIHdpbmRvdy5zZXRBdHRyaWJ1dGVzKGxwKTsKICAgICAgICAgd2luZG93LmNsZWFyRmxhZ3MoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19ESU1fQkVISU5EKTsKICAgICAgICAgd2luZG93LnJlcXVlc3RGZWF0dXJlKFdpbmRvdy5GRUFUVVJFX05PX1RJVExFKTsKIApAQCAtMTA4LDQgKzExNiwxMyBAQAogICAgICAgICBtSGFuZGxlci5yZW1vdmVDYWxsYmFja3MobURpc21pc3NEaWFsb2dSdW5uYWJsZSk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25LZXlEb3duKGludCBrZXlDb2RlLCBLZXlFdmVudCBldmVudCkgeworICAgICAgICBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX1ZPTFVNRV9ET1dOIHx8CisgICAgICAgICAgICAgICAga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX1ZPTFVNRV9VUCB8fAorICAgICAgICAgICAgICAgIGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfTVVURSkgeworICAgICAgICAgICAgZGlzbWlzcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdXBlci5vbktleURvd24oa2V5Q29kZSwgZXZlbnQpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvQW5pbWF0ZWRJbWFnZVZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvQW5pbWF0ZWRJbWFnZVZpZXcuamF2YQppbmRleCA3ZDNlODcwLi45ODM5ZmU5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0FuaW1hdGVkSW1hZ2VWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9BbmltYXRlZEltYWdlVmlldy5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUFuaW0oKSB7Ci0gICAgICAgIERyYXdhYmxlIGRyYXdhYmxlID0gbUF0dGFjaGVkID8gZ2V0RHJhd2FibGUoKSA6IG51bGw7CisgICAgICAgIERyYXdhYmxlIGRyYXdhYmxlID0gZ2V0RHJhd2FibGUoKTsKICAgICAgICAgaWYgKG1BdHRhY2hlZCAmJiBtQW5pbSAhPSBudWxsKSB7CiAgICAgICAgICAgICBtQW5pbS5zdG9wKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uRGF0YS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25EYXRhLmphdmEKaW5kZXggNTI2NDk5OC4uNDRiMzg0MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25EYXRhLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25EYXRhLmphdmEKQEAgLTIxLDggKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwotCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9TdGF0dXNCYXJJY29uVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9TdGF0dXNCYXJJY29uVmlldy5qYXZhCmluZGV4IDlmOTUyNGIuLjZmODM5YmQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvU3RhdHVzQmFySWNvblZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL1N0YXR1c0Jhckljb25WaWV3LmphdmEKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFudW1iZXJFcXVhbHMpIHsKLSAgICAgICAgICAgIGlmIChpY29uLm51bWJlciA+IDAgJiYgbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0Qm9vbGVhbigKKyAgICAgICAgICAgIGlmIChpY29uLm51bWJlciA+IDAgJiYgZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpLmdldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgICAgICAgICBSLmJvb2wuY29uZmlnX3N0YXR1c0JhclNob3dOdW1iZXIpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1OdW1iZXJCYWNrZ3JvdW5kID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgbU51bWJlckJhY2tncm91bmQgPSBnZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0RHJhd2FibGUoCkBAIC0yNDAsMTAgKzI0MCwxMCBAQAogCiAgICAgdm9pZCBwbGFjZU51bWJlcigpIHsKICAgICAgICAgZmluYWwgU3RyaW5nIHN0cjsKLSAgICAgICAgZmluYWwgaW50IHRvb0JpZyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldEludGVnZXIoCisgICAgICAgIGZpbmFsIGludCB0b29CaWcgPSBnZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKICAgICAgICAgICAgICAgICBhbmRyb2lkLlIuaW50ZWdlci5zdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX21heG51bSk7CiAgICAgICAgIGlmIChtSWNvbi5udW1iZXIgPiB0b29CaWcpIHsKLSAgICAgICAgICAgIHN0ciA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldFN0cmluZygKKyAgICAgICAgICAgIHN0ciA9IGdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKS5nZXRTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLlIuc3RyaW5nLnN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3cpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgTnVtYmVyRm9ybWF0IGYgPSBOdW1iZXJGb3JtYXQuZ2V0SW50ZWdlckluc3RhbmNlKCk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL0JhclRyYW5zaXRpb25zLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL0JhclRyYW5zaXRpb25zLmphdmEKaW5kZXggY2IxN2FjNi4uZWI2M2E1NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9CYXJUcmFuc2l0aW9ucy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvQmFyVHJhbnNpdGlvbnMuamF2YQpAQCAtMzcsNiArMzcsOCBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0NPTE9SUyA9IGZhbHNlOwogCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIEhJR0hfRU5EID0gQWN0aXZpdHlNYW5hZ2VyLmlzSGlnaEVuZEdmeCgpOworCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9ERV9PUEFRVUUgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1PREVfU0VNSV9UUkFOU1BBUkVOVCA9IDE7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9ERV9UUkFOU0xVQ0VOVCA9IDI7CkBAIC00OCw3ICs1MCw2IEBACiAKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtVGFnOwogICAgIHByaXZhdGUgZmluYWwgVmlldyBtVmlldzsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVN1cHBvcnRzVHJhbnNpdGlvbnMgPSBBY3Rpdml0eU1hbmFnZXIuaXNIaWdoRW5kR2Z4KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBCYXJCYWNrZ3JvdW5kRHJhd2FibGUgbUJhckJhY2tncm91bmQ7CiAKICAgICBwcml2YXRlIGludCBtTW9kZTsKQEAgLTU3LDcgKzU4LDcgQEAKICAgICAgICAgbVRhZyA9ICJCYXJUcmFuc2l0aW9ucy4iICsgdmlldy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKICAgICAgICAgbVZpZXcgPSB2aWV3OwogICAgICAgICBtQmFyQmFja2dyb3VuZCA9IG5ldyBCYXJCYWNrZ3JvdW5kRHJhd2FibGUobVZpZXcuZ2V0Q29udGV4dCgpLCBncmFkaWVudFJlc291cmNlSWQpOwotICAgICAgICBpZiAobVN1cHBvcnRzVHJhbnNpdGlvbnMpIHsKKyAgICAgICAgaWYgKEhJR0hfRU5EKSB7CiAgICAgICAgICAgICBtVmlldy5zZXRCYWNrZ3JvdW5kKG1CYXJCYWNrZ3JvdW5kKTsKICAgICAgICAgfQogICAgIH0KQEAgLTY3LDE4ICs2OCwyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRyYW5zaXRpb25UbyhpbnQgbW9kZSwgYm9vbGVhbiBhbmltYXRlKSB7CisgICAgICAgIC8vIGxvdy1lbmQgZGV2aWNlcyBkbyBub3Qgc3VwcG9ydCB0cmFuc2x1Y2VudCBtb2RlcywgZmFsbGJhY2sgdG8gb3BhcXVlCisgICAgICAgIGlmICghSElHSF9FTkQgJiYgKG1vZGUgPT0gTU9ERV9TRU1JX1RSQU5TUEFSRU5UIHx8IG1vZGUgPT0gTU9ERV9UUkFOU0xVQ0VOVCkpIHsKKyAgICAgICAgICAgIG1vZGUgPSBNT0RFX09QQVFVRTsKKyAgICAgICAgfQogICAgICAgICBpZiAobU1vZGUgPT0gbW9kZSkgcmV0dXJuOwogICAgICAgICBpbnQgb2xkTW9kZSA9IG1Nb2RlOwogICAgICAgICBtTW9kZSA9IG1vZGU7CiAgICAgICAgIGlmIChERUJVRykgTG9nLmQobVRhZywgU3RyaW5nLmZvcm1hdCgiJXMgLT4gJXMgYW5pbWF0ZT0lcyIsCiAgICAgICAgICAgICAgICAgbW9kZVRvU3RyaW5nKG9sZE1vZGUpLCBtb2RlVG9TdHJpbmcobW9kZSksICBhbmltYXRlKSk7Ci0gICAgICAgIGlmIChtU3VwcG9ydHNUcmFuc2l0aW9ucykgewotICAgICAgICAgICAgb25UcmFuc2l0aW9uKG9sZE1vZGUsIG1Nb2RlLCBhbmltYXRlKTsKLSAgICAgICAgfQorICAgICAgICBvblRyYW5zaXRpb24ob2xkTW9kZSwgbU1vZGUsIGFuaW1hdGUpOwogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIG9uVHJhbnNpdGlvbihpbnQgb2xkTW9kZSwgaW50IG5ld01vZGUsIGJvb2xlYW4gYW5pbWF0ZSkgewotICAgICAgICBhcHBseU1vZGVCYWNrZ3JvdW5kKG9sZE1vZGUsIG5ld01vZGUsIGFuaW1hdGUpOworICAgICAgICBpZiAoSElHSF9FTkQpIHsKKyAgICAgICAgICAgIGFwcGx5TW9kZUJhY2tncm91bmQob2xkTW9kZSwgbmV3TW9kZSwgYW5pbWF0ZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBhcHBseU1vZGVCYWNrZ3JvdW5kKGludCBvbGRNb2RlLCBpbnQgbmV3TW9kZSwgYm9vbGVhbiBhbmltYXRlKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL0RlbW9TdGF0dXNJY29ucy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9EZW1vU3RhdHVzSWNvbnMuamF2YQppbmRleCBhYmE3YWZhLi5hM2NmMGYyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL0RlbW9TdGF0dXNJY29ucy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvRGVtb1N0YXR1c0ljb25zLmphdmEKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIFN0YXR1c0Jhckljb24gaWNvbiA9IG5ldyBTdGF0dXNCYXJJY29uKGljb25Qa2csIFVzZXJIYW5kbGUuQ1VSUkVOVCwgaWNvbklkLCAwLCAwLCAiRGVtbyIpOwotICAgICAgICBTdGF0dXNCYXJJY29uVmlldyB2ID0gbmV3IFN0YXR1c0Jhckljb25WaWV3KG1Db250ZXh0LCBudWxsKTsKKyAgICAgICAgU3RhdHVzQmFySWNvblZpZXcgdiA9IG5ldyBTdGF0dXNCYXJJY29uVmlldyhnZXRDb250ZXh0KCksIG51bGwpOwogICAgICAgICB2LnNldFRhZyhzbG90KTsKICAgICAgICAgdi5zZXQoaWNvbik7CiAgICAgICAgIGFkZFZpZXcodiwgMCwgbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMobUljb25TaXplLCBtSWNvblNpemUpKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvS2V5Z3VhcmRUb3VjaERlbGVnYXRlLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL0tleWd1YXJkVG91Y2hEZWxlZ2F0ZS5qYXZhCmluZGV4IGMxNjQ2YmEuLjFlYTkyMGQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvS2V5Z3VhcmRUb3VjaERlbGVnYXRlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9LZXlndWFyZFRvdWNoRGVsZWdhdGUuamF2YQpAQCAtMjYsMTAgKzI2LDExIEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwucG9saWN5LklLZXlndWFyZEV4aXRDYWxsYmFjazsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuSUtleWd1YXJkU2hvd0NhbGxiYWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeS5JS2V5Z3VhcmRTZXJ2aWNlOwogCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKwogCiAvKioKICAqIEZhY2lsaXRhdGVzIGV2ZW50IGNvbW11bmljYXRpb24gYmV0d2VlbiBuYXZpZ2F0aW9uIGJhciBhbmQga2V5Z3VhcmQuICBDdXJyZW50bHkgdXNlZCB0bwpAQCAtNDIsNiArNDMsOCBAQAogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZR1VBUkRfQ0xBU1MgPSAiY29tLmFuZHJvaWQua2V5Z3VhcmQuS2V5Z3VhcmRTZXJ2aWNlIjsKIAogICAgIHByaXZhdGUgc3RhdGljIEtleWd1YXJkVG91Y2hEZWxlZ2F0ZSBzSW5zdGFuY2U7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdDxPbktleWd1YXJkQ29ubmVjdGlvbkxpc3RlbmVyPiBzQ29ubmVjdGlvbkxpc3RlbmVycyA9CisgICAgICAgICAgICBuZXcgQXJyYXlMaXN0PE9uS2V5Z3VhcmRDb25uZWN0aW9uTGlzdGVuZXI+KCk7CiAKICAgICBwcml2YXRlIHZvbGF0aWxlIElLZXlndWFyZFNlcnZpY2UgbVNlcnZpY2U7CiAKQEAgLTU0LDYgKzU3LDEwIEBACiAgICAgICAgICAgICBTbG9nLnYoVEFHLCAiQ29ubmVjdGVkIHRvIGtleWd1YXJkIik7CiAgICAgICAgICAgICBtU2VydmljZSA9IElLZXlndWFyZFNlcnZpY2UuU3R1Yi5hc0ludGVyZmFjZShzZXJ2aWNlKTsKIAorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzQ29ubmVjdGlvbkxpc3RlbmVycy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIE9uS2V5Z3VhcmRDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBzQ29ubmVjdGlvbkxpc3RlbmVycy5nZXQoaSk7CisgICAgICAgICAgICAgICAgbGlzdGVuZXIub25LZXlndWFyZFNlcnZpY2VDb25uZWN0ZWQoS2V5Z3VhcmRUb3VjaERlbGVnYXRlLnRoaXMpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC02MSw2ICs2OCwxMSBAQAogICAgICAgICAgICAgU2xvZy52KFRBRywgIkRpc2Nvbm5lY3RlZCBmcm9tIGtleWd1YXJkIik7CiAgICAgICAgICAgICBtU2VydmljZSA9IG51bGw7CiAgICAgICAgICAgICBzSW5zdGFuY2UgPSBudWxsOyAvLyBmb3JjZSByZWNvbm5lY3Rpb24gaWYgdGhpcyBnb2VzIGF3YXkKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzQ29ubmVjdGlvbkxpc3RlbmVycy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIE9uS2V5Z3VhcmRDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBzQ29ubmVjdGlvbkxpc3RlbmVycy5nZXQoaSk7CisgICAgICAgICAgICAgICAgbGlzdGVuZXIub25LZXlndWFyZFNlcnZpY2VEaXNjb25uZWN0ZWQoS2V5Z3VhcmRUb3VjaERlbGVnYXRlLnRoaXMpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICB9OwpAQCAtMTg0LDQgKzE5NiwxMyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFkZExpc3RlbmVyKE9uS2V5Z3VhcmRDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgc0Nvbm5lY3Rpb25MaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIE9uS2V5Z3VhcmRDb25uZWN0aW9uTGlzdGVuZXIgeworCisgICAgICAgIHZvaWQgb25LZXlndWFyZFNlcnZpY2VDb25uZWN0ZWQoS2V5Z3VhcmRUb3VjaERlbGVnYXRlIGtleWd1YXJkVG91Y2hEZWxlZ2F0ZSk7CisgICAgICAgIHZvaWQgb25LZXlndWFyZFNlcnZpY2VEaXNjb25uZWN0ZWQoS2V5Z3VhcmRUb3VjaERlbGVnYXRlIGtleWd1YXJkVG91Y2hEZWxlZ2F0ZSk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9OYXZpZ2F0aW9uQmFyVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9OYXZpZ2F0aW9uQmFyVmlldy5qYXZhCmluZGV4IDgzOTAxNmQuLjBmM2FkZDMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvTmF2aWdhdGlvbkJhclZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL05hdmlnYXRpb25CYXJWaWV3LmphdmEKQEAgLTU3LDYgKzU3LDggQEAKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CiAKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLktleWd1YXJkVG91Y2hEZWxlZ2F0ZS5PbktleWd1YXJkQ29ubmVjdGlvbkxpc3RlbmVyOworCiBwdWJsaWMgY2xhc3MgTmF2aWdhdGlvbkJhclZpZXcgZXh0ZW5kcyBMaW5lYXJMYXlvdXQgewogICAgIGZpbmFsIHN0YXRpYyBib29sZWFuIERFQlVHID0gZmFsc2U7CiAgICAgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiUGhvbmVTdGF0dXNCYXIvTmF2aWdhdGlvbkJhclZpZXciOwpAQCAtMTcyLDYgKzE3NCwyNSBAQAogICAgICAgICB9CiAgICAgfTsKIAorICAgIHByaXZhdGUgZmluYWwgT25LZXlndWFyZENvbm5lY3Rpb25MaXN0ZW5lciBtS2V5Z3VhcmRDb25uZWN0aW9uTGlzdGVuZXIgPQorICAgICAgICAgICAgbmV3IE9uS2V5Z3VhcmRDb25uZWN0aW9uTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25LZXlndWFyZFNlcnZpY2VDb25uZWN0ZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBLZXlndWFyZFRvdWNoRGVsZWdhdGUga2V5Z3VhcmRUb3VjaERlbGVnYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHBvc3QobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNhbWVyYURpc2FibGVkQnlEcG0gPSBpc0NhbWVyYURpc2FibGVkQnlEcG0oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25LZXlndWFyZFNlcnZpY2VEaXNjb25uZWN0ZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBLZXlndWFyZFRvdWNoRGVsZWdhdGUga2V5Z3VhcmRUb3VjaERlbGVnYXRlKSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKwogICAgIHByaXZhdGUgY2xhc3MgSCBleHRlbmRzIEhhbmRsZXIgewogICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbSkgewogICAgICAgICAgICAgc3dpdGNoIChtLndoYXQpIHsKQEAgLTIwMSw3ICsyMjIsNyBAQAogICAgICAgICBtRGlzcGxheSA9ICgoV2luZG93TWFuYWdlciljb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCiAgICAgICAgICAgICAgICAgQ29udGV4dC5XSU5ET1dfU0VSVklDRSkpLmdldERlZmF1bHREaXNwbGF5KCk7CiAKLSAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpOworICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpOwogICAgICAgICBtQmFyU2l6ZSA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5uYXZpZ2F0aW9uX2Jhcl9zaXplKTsKICAgICAgICAgbVZlcnRpY2FsID0gZmFsc2U7CiAgICAgICAgIG1TaG93TWVudSA9IGZhbHNlOwpAQCAtMjExLDYgKzIzMiw3IEBACiAKICAgICAgICAgbUJhclRyYW5zaXRpb25zID0gbmV3IE5hdmlnYXRpb25CYXJUcmFuc2l0aW9ucyh0aGlzKTsKIAorICAgICAgICBLZXlndWFyZFRvdWNoRGVsZWdhdGUuYWRkTGlzdGVuZXIobUtleWd1YXJkQ29ubmVjdGlvbkxpc3RlbmVyKTsKICAgICAgICAgbUNhbWVyYURpc2FibGVkQnlEcG0gPSBpc0NhbWVyYURpc2FibGVkQnlEcG0oKTsKICAgICAgICAgd2F0Y2hGb3JEZXZpY2VQb2xpY3lDaGFuZ2VzKCk7CiAgICAgfQpAQCAtMjE4LDcgKzI0MCw3IEBACiAgICAgcHJpdmF0ZSB2b2lkIHdhdGNoRm9yRGV2aWNlUG9saWN5Q2hhbmdlcygpIHsKICAgICAgICAgZmluYWwgSW50ZW50RmlsdGVyIGZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKTsKICAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihEZXZpY2VQb2xpY3lNYW5hZ2VyLkFDVElPTl9ERVZJQ0VfUE9MSUNZX01BTkFHRVJfU1RBVEVfQ0hBTkdFRCk7Ci0gICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIobmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgeworICAgICAgICBnZXRDb250ZXh0KCkucmVnaXN0ZXJSZWNlaXZlcihuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7CiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CiAgICAgICAgICAgICAgICAgcG9zdChuZXcgUnVubmFibGUoKSB7CiAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtMzAyLDcgKzMyNCw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRMYXlvdXREaXJlY3Rpb24oaW50IGxheW91dERpcmVjdGlvbikgewotICAgICAgICBnZXRJY29ucyhtQ29udGV4dC5nZXRSZXNvdXJjZXMoKSk7CisgICAgICAgIGdldEljb25zKGdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKSk7CiAKICAgICAgICAgc3VwZXIuc2V0TGF5b3V0RGlyZWN0aW9uKGxheW91dERpcmVjdGlvbik7CiAgICAgfQpAQCAtMzIzLDcgKzM0NSw3IEBACiAgICAgICAgICAgICBtVHJhbnNpdGlvbkxpc3RlbmVyLm9uQmFja0FsdENsZWFyZWQoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIGFuZHJvaWQud2lkZ2V0LlRvYXN0Lm1ha2VUZXh0KG1Db250ZXh0LAorICAgICAgICAgICAgYW5kcm9pZC53aWRnZXQuVG9hc3QubWFrZVRleHQoZ2V0Q29udGV4dCgpLAogICAgICAgICAgICAgICAgICJOYXZpZ2F0aW9uIGljb24gaGludHMgPSAiICsgaGludHMsCiAgICAgICAgICAgICAgICAgNTAwKS5zaG93KCk7CiAgICAgICAgIH0KQEAgLTM5NSw3ICs0MTcsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2FtZXJhRGlzYWJsZWRCeURwbSgpIHsKICAgICAgICAgZmluYWwgRGV2aWNlUG9saWN5TWFuYWdlciBkcG0gPQotICAgICAgICAgICAgICAgIChEZXZpY2VQb2xpY3lNYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuREVWSUNFX1BPTElDWV9TRVJWSUNFKTsKKyAgICAgICAgICAgICAgICAoRGV2aWNlUG9saWN5TWFuYWdlcikgZ2V0Q29udGV4dCgpLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5ERVZJQ0VfUE9MSUNZX1NFUlZJQ0UpOwogICAgICAgICBpZiAoZHBtICE9IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuZ2V0Q3VycmVudFVzZXIoKS5pZDsKQEAgLTQ1Nyw3ICs0NzksNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHdhdGNoRm9yQWNjZXNzaWJpbGl0eUNoYW5nZXMoKSB7CiAgICAgICAgIGZpbmFsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyIGFtID0KLSAgICAgICAgICAgICAgICAoQWNjZXNzaWJpbGl0eU1hbmFnZXIpIG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BQ0NFU1NJQklMSVRZX1NFUlZJQ0UpOworICAgICAgICAgICAgICAgIChBY2Nlc3NpYmlsaXR5TWFuYWdlcikgZ2V0Q29udGV4dCgpLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BQ0NFU1NJQklMSVRZX1NFUlZJQ0UpOwogCiAgICAgICAgIC8vIFNldCB0aGUgaW5pdGlhbCBzdGF0ZQogICAgICAgICBlbmFibGVBY2Nlc3NpYmlsaXR5KGFtLmlzVG91Y2hFeHBsb3JhdGlvbkVuYWJsZWQoKSk7CkBAIC00OTQsNyArNTE2LDcgQEAKICAgICAgICAgaWYgKGhhc0NhbWVyYSkgewogICAgICAgICAgICAgLy8gV2FybSB1cCBLZXlndWFyZFRvdWNoRGVsZWdhdGUgc28gaXQncyByZWFkeSBieSB0aGUgdGltZSB0aGUgY2FtZXJhIGJ1dHRvbiBpcyB0b3VjaGVkLgogICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGNvbm5lY3QgdG8gS2V5Z3VhcmRTZXJ2aWNlIHNvIHRoYXQgdG91Y2ggZXZlbnRzIGFyZSBwcm9jZXNzZWQuCi0gICAgICAgICAgICBLZXlndWFyZFRvdWNoRGVsZWdhdGUuZ2V0SW5zdGFuY2UobUNvbnRleHQpOworICAgICAgICAgICAgS2V5Z3VhcmRUb3VjaERlbGVnYXRlLmdldEluc3RhbmNlKGdldENvbnRleHQoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU3MCw3ICs1OTIsNyBAQAogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0UmVzb3VyY2VOYW1lKGludCByZXNJZCkgewogICAgICAgICBpZiAocmVzSWQgIT0gMCkgewotICAgICAgICAgICAgZmluYWwgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMgcmVzID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgICAgICBmaW5hbCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcyByZXMgPSBnZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCk7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiByZXMuZ2V0UmVzb3VyY2VOYW1lKHJlc0lkKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1Bob25lU3RhdHVzQmFyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1Bob25lU3RhdHVzQmFyLmphdmEKaW5kZXggYmJhYzRlZi4uMTI0YTZiYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QaG9uZVN0YXR1c0Jhci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUGhvbmVTdGF0dXNCYXIuamF2YQpAQCAtNTM0LDcgKzUzNCwxMCBAQAogICAgICAgICBtQmF0dGVyeUNvbnRyb2xsZXIgPSBuZXcgQmF0dGVyeUNvbnRyb2xsZXIobUNvbnRleHQpOwogICAgICAgICBtTmV0d29ya0NvbnRyb2xsZXIgPSBuZXcgTmV0d29ya0NvbnRyb2xsZXIobUNvbnRleHQpOwogICAgICAgICBtQmx1ZXRvb3RoQ29udHJvbGxlciA9IG5ldyBCbHVldG9vdGhDb250cm9sbGVyKG1Db250ZXh0KTsKLSAgICAgICAgbVJvdGF0aW9uTG9ja0NvbnRyb2xsZXIgPSBuZXcgUm90YXRpb25Mb2NrQ29udHJvbGxlcihtQ29udGV4dCk7CisgICAgICAgIGlmIChtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRCb29sZWFuKFIuYm9vbC5jb25maWdfc2hvd1JvdGF0aW9uTG9jaykKKyAgICAgICAgICAgICAgICB8fCBRdWlja1NldHRpbmdzLkRFQlVHX0dPTkVfVElMRVMpIHsKKyAgICAgICAgICAgIG1Sb3RhdGlvbkxvY2tDb250cm9sbGVyID0gbmV3IFJvdGF0aW9uTG9ja0NvbnRyb2xsZXIobUNvbnRleHQpOworICAgICAgICB9CiAgICAgICAgIGZpbmFsIFNpZ25hbENsdXN0ZXJWaWV3IHNpZ25hbENsdXN0ZXIgPQogICAgICAgICAgICAgICAgIChTaWduYWxDbHVzdGVyVmlldyltU3RhdHVzQmFyVmlldy5maW5kVmlld0J5SWQoUi5pZC5zaWduYWxfY2x1c3Rlcik7CiAKQEAgLTE0MjksNiArMTQzMiw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlbGVhc2VGb2N1cygpIHsKKyAgICAgICAgaWYgKG1TdGF0dXNCYXJXaW5kb3cgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcyBscCA9CiAgICAgICAgICAgICAgICAgKFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zKSBtU3RhdHVzQmFyV2luZG93LmdldExheW91dFBhcmFtcygpOwogICAgICAgICBscC5mbGFncyB8PSBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX05PVF9GT0NVU0FCTEU7CkBAIC0xNDYwLDggKzE0NjQsMTAgQEAKICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1lc3NhZ2UoTVNHX0NMT1NFX1NFQVJDSF9QQU5FTCk7CiAgICAgICAgIH0KIAotICAgICAgICBtU3RhdHVzQmFyV2luZG93LmNhbmNlbEV4cGFuZEhlbHBlcigpOwotICAgICAgICBtU3RhdHVzQmFyVmlldy5jb2xsYXBzZUFsbFBhbmVscyh0cnVlKTsKKyAgICAgICAgaWYgKG1TdGF0dXNCYXJXaW5kb3cgIT0gbnVsbCkgeworICAgICAgICAgICAgbVN0YXR1c0JhcldpbmRvdy5jYW5jZWxFeHBhbmRIZWxwZXIoKTsKKyAgICAgICAgICAgIG1TdGF0dXNCYXJWaWV3LmNvbGxhcHNlQWxsUGFuZWxzKHRydWUpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIFZpZXdQcm9wZXJ0eUFuaW1hdG9yIHNldFZpc2liaWxpdHlXaGVuRG9uZSgKQEAgLTE2NzAsNyArMTY3Niw3IEBACiAgICAgICAgIGlmIChTUEVXKSBMb2cuZChUQUcsICJtYWtlRXhwYW5kZWRJbnZpc2libGU6IG1FeHBhbmRlZFZpc2libGU9IiArIG1FeHBhbmRlZFZpc2libGUKICAgICAgICAgICAgICAgICArICIgbUV4cGFuZGVkVmlzaWJsZT0iICsgbUV4cGFuZGVkVmlzaWJsZSk7CiAKLSAgICAgICAgaWYgKCFtRXhwYW5kZWRWaXNpYmxlKSB7CisgICAgICAgIGlmICghbUV4cGFuZGVkVmlzaWJsZSB8fCBtU3RhdHVzQmFyV2luZG93ID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMDczLDcgKzIwNzksOCBAQAogICAgICAgICAvLyB1bnRpbCBzdGF0dXMgYmFyIHdpbmRvdyBpcyBhdHRhY2hlZCB0byB0aGUgd2luZG93IG1hbmFnZXIsCiAgICAgICAgIC8vIGJlY2F1c2UuLi4gIHdlbGwsIHdoYXQncyB0aGUgcG9pbnQgb3RoZXJ3aXNlPyAgQW5kIHRyeWluZyB0bwogICAgICAgICAvLyBydW4gYSB0aWNrZXIgd2l0aG91dCBiZWluZyBhdHRhY2hlZCB3aWxsIGNyYXNoIQotICAgICAgICBpZiAobi5nZXROb3RpZmljYXRpb24oKS50aWNrZXJUZXh0ICE9IG51bGwgJiYgbVN0YXR1c0JhcldpbmRvdy5nZXRXaW5kb3dUb2tlbigpICE9IG51bGwpIHsKKyAgICAgICAgaWYgKG4uZ2V0Tm90aWZpY2F0aW9uKCkudGlja2VyVGV4dCAhPSBudWxsICYmIG1TdGF0dXNCYXJXaW5kb3cgIT0gbnVsbAorICAgICAgICAgICAgICAgICYmIG1TdGF0dXNCYXJXaW5kb3cuZ2V0V2luZG93VG9rZW4oKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoMCA9PSAobURpc2FibGVkICYgKFN0YXR1c0Jhck1hbmFnZXIuRElTQUJMRV9OT1RJRklDQVRJT05fSUNPTlMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFN0YXR1c0Jhck1hbmFnZXIuRElTQUJMRV9OT1RJRklDQVRJT05fVElDS0VSKSkpIHsKICAgICAgICAgICAgICAgICBtVGlja2VyLmFkZEVudHJ5KG4pOwpAQCAtMjcyMyw5ICsyNzMwLDExIEBACiAgICAgICAgIHN1cGVyLmRlc3Ryb3koKTsKICAgICAgICAgaWYgKG1TdGF0dXNCYXJXaW5kb3cgIT0gbnVsbCkgewogICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIucmVtb3ZlVmlld0ltbWVkaWF0ZShtU3RhdHVzQmFyV2luZG93KTsKKyAgICAgICAgICAgIG1TdGF0dXNCYXJXaW5kb3cgPSBudWxsOwogICAgICAgICB9CiAgICAgICAgIGlmIChtTmF2aWdhdGlvbkJhclZpZXcgIT0gbnVsbCkgewogICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIucmVtb3ZlVmlld0ltbWVkaWF0ZShtTmF2aWdhdGlvbkJhclZpZXcpOworICAgICAgICAgICAgbU5hdmlnYXRpb25CYXJWaWV3ID0gbnVsbDsKICAgICAgICAgfQogICAgICAgICBtQ29udGV4dC51bnJlZ2lzdGVyUmVjZWl2ZXIobUJyb2FkY2FzdFJlY2VpdmVyKTsKICAgICB9CkBAIC0yNzY2LDYgKzI3NzUsMTUgQEAKICAgICAgICAgaWYgKG1OZXR3b3JrQ29udHJvbGxlciAhPSBudWxsICYmIChtb2RlQ2hhbmdlIHx8IGNvbW1hbmQuZXF1YWxzKENPTU1BTkRfTkVUV09SSykpKSB7CiAgICAgICAgICAgICBtTmV0d29ya0NvbnRyb2xsZXIuZGlzcGF0Y2hEZW1vQ29tbWFuZChjb21tYW5kLCBhcmdzKTsKICAgICAgICAgfQorICAgICAgICBpZiAobW9kZUNoYW5nZSB8fCBjb21tYW5kLmVxdWFscyhDT01NQU5EX05PVElGSUNBVElPTlMpKSB7CisgICAgICAgICAgICBWaWV3IG5vdGlmaWNhdGlvbnMgPSBtU3RhdHVzQmFyVmlldyA9PSBudWxsID8gbnVsbAorICAgICAgICAgICAgICAgICAgICA6IG1TdGF0dXNCYXJWaWV3LmZpbmRWaWV3QnlJZChSLmlkLm5vdGlmaWNhdGlvbl9pY29uX2FyZWEpOworICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbnMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFN0cmluZyB2aXNpYmxlID0gYXJncy5nZXRTdHJpbmcoInZpc2libGUiKTsKKyAgICAgICAgICAgICAgICBpbnQgdmlzID0gbURlbW9Nb2RlICYmICJmYWxzZSIuZXF1YWxzKHZpc2libGUpID8gVmlldy5JTlZJU0lCTEUgOiBWaWV3LlZJU0lCTEU7CisgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9ucy5zZXRWaXNpYmlsaXR5KHZpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgaWYgKGNvbW1hbmQuZXF1YWxzKENPTU1BTkRfQkFSUykpIHsKICAgICAgICAgICAgIFN0cmluZyBtb2RlID0gYXJncy5nZXRTdHJpbmcoIm1vZGUiKTsKICAgICAgICAgICAgIGludCBiYXJNb2RlID0gIm9wYXF1ZSIuZXF1YWxzKG1vZGUpID8gTU9ERV9PUEFRVUUgOgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QaG9uZVN0YXR1c0JhclZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUGhvbmVTdGF0dXNCYXJWaWV3LmphdmEKaW5kZXggZDBlOWE5OS4uZDllM2ZkZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QaG9uZVN0YXR1c0JhclZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1Bob25lU3RhdHVzQmFyVmlldy5qYXZhCkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICAgICAgbUJhci5tYWtlRXhwYW5kZWRJbnZpc2libGVTb29uKCk7CiAgICAgICAgIG1GYWRpbmdQYW5lbCA9IG51bGw7CiAgICAgICAgIG1MYXN0RnVsbHlPcGVuZWRQYW5lbCA9IG51bGw7Ci0gICAgICAgIGlmIChtU2NyaW1Db2xvciAhPSAwICYmIEFjdGl2aXR5TWFuYWdlci5pc0hpZ2hFbmRHZngoKSkgeworICAgICAgICBpZiAobVNjcmltQ29sb3IgIT0gMCAmJiBBY3Rpdml0eU1hbmFnZXIuaXNIaWdoRW5kR2Z4KCkgJiYgbUJhci5tU3RhdHVzQmFyV2luZG93ICE9IG51bGwpIHsKICAgICAgICAgICAgIG1CYXIubVN0YXR1c0JhcldpbmRvdy5zZXRCYWNrZ3JvdW5kQ29sb3IoMCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTQsNyArMjE0LDggQEAKICAgICAgICAgICAgIExvZy52KFRBRywgInBhbmVsRXhwYW5zaW9uQ2hhbmdlZDogZj0iICsgZnJhYyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocGFuZWwgPT0gbUZhZGluZ1BhbmVsICYmIG1TY3JpbUNvbG9yICE9IDAgJiYgQWN0aXZpdHlNYW5hZ2VyLmlzSGlnaEVuZEdmeCgpKSB7CisgICAgICAgIGlmIChwYW5lbCA9PSBtRmFkaW5nUGFuZWwgJiYgbVNjcmltQ29sb3IgIT0gMCAmJiBBY3Rpdml0eU1hbmFnZXIuaXNIaWdoRW5kR2Z4KCkKKyAgICAgICAgICAgICAgICAmJiBtQmFyLm1TdGF0dXNCYXJXaW5kb3cgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKG1TaG91bGRGYWRlKSB7CiAgICAgICAgICAgICAgICAgZnJhYyA9IG1QYW5lbEV4cGFuZGVkRnJhY3Rpb25TdW07IC8vIGRvbid0IGp1ZGdlIG1lCiAgICAgICAgICAgICAgICAgLy8gbGV0J3Mgc3RhcnQgdGhpcyAyMCUgb2YgdGhlIHdheSBkb3duIHRoZSBzY3JlZW4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUXVpY2tTZXR0aW5ncy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1NldHRpbmdzLmphdmEKaW5kZXggZTdiOGZhMS4uNGQ3ZmY1ZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1NldHRpbmdzLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1NldHRpbmdzLmphdmEKQEAgLTI1LDYgKzI1LDcgQEAKIGltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhBZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXI7CkBAIC04NCw2ICs4NSw3IEBACiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfR09ORV9USUxFUyA9IGZhbHNlOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUXVpY2tTZXR0aW5ncyI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIFNIT1dfSU1FX1RJTEUgPSBmYWxzZTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gU0hPV19BQ0NFU1NJQklMSVRZX1RJTEVTID0gdHJ1ZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBMT05HX1BSRVNTX1RPR0dMRVMgPSB0cnVlOwogCkBAIC0xNzQsNyArMTc2LDkgQEAKICAgICAgICAgYmx1ZXRvb3RoQ29udHJvbGxlci5hZGRTdGF0ZUNoYW5nZWRDYWxsYmFjayhtTW9kZWwpOwogICAgICAgICBiYXR0ZXJ5Q29udHJvbGxlci5hZGRTdGF0ZUNoYW5nZWRDYWxsYmFjayhtTW9kZWwpOwogICAgICAgICBsb2NhdGlvbkNvbnRyb2xsZXIuYWRkU2V0dGluZ3NDaGFuZ2VkQ2FsbGJhY2sobU1vZGVsKTsKLSAgICAgICAgcm90YXRpb25Mb2NrQ29udHJvbGxlci5hZGRSb3RhdGlvbkxvY2tDb250cm9sbGVyQ2FsbGJhY2sobU1vZGVsKTsKKyAgICAgICAgaWYgKHJvdGF0aW9uTG9ja0NvbnRyb2xsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgcm90YXRpb25Mb2NrQ29udHJvbGxlci5hZGRSb3RhdGlvbkxvY2tDb250cm9sbGVyQ2FsbGJhY2sobU1vZGVsKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBxdWVyeUZvclNzbENhQ2VydHMoKSB7CkBAIC0zNzQsNiArMzc4LDM1IEBACiAgICAgICAgICAgICAgICAgbmV3IFF1aWNrU2V0dGluZ3NNb2RlbC5CYXNpY1JlZnJlc2hDYWxsYmFjayhzZXR0aW5nc1RpbGUpKTsKICAgICAgICAgcGFyZW50LmFkZFZpZXcoc2V0dGluZ3NUaWxlKTsKICAgICAgICAgbUR5bmFtaWNTcGFubmVkVGlsZXMuYWRkKHNldHRpbmdzVGlsZSk7CisKKyAgICAgICAgaWYgKFNIT1dfQUNDRVNTSUJJTElUWV9USUxFUykgeworICAgICAgICAgICAgLy8gQ29sb3IgaW52ZXJzaW9uIHRpbGUKKyAgICAgICAgICAgIGZpbmFsIFN5c3RlbVNldHRpbmdUaWxlIGludmVyc2lvblRpbGUgPSBuZXcgU3lzdGVtU2V0dGluZ1RpbGUobUNvbnRleHQpOworICAgICAgICAgICAgaW52ZXJzaW9uVGlsZS5zZXRVcmkoU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9JTlZFUlNJT05fRU5BQkxFRCwKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtU2V0dGluZ1RpbGUuVFlQRV9TRUNVUkUpOworICAgICAgICAgICAgaW52ZXJzaW9uVGlsZS5zZXRGcmFnbWVudCgiU2V0dGluZ3MkQWNjZXNzaWJpbGl0eUludmVyc2lvblNldHRpbmdzQWN0aXZpdHkiKTsKKyAgICAgICAgICAgIG1Nb2RlbC5hZGRJbnZlcnNpb25UaWxlKGludmVyc2lvblRpbGUsIGludmVyc2lvblRpbGUuZ2V0UmVmcmVzaENhbGxiYWNrKCkpOworICAgICAgICAgICAgcGFyZW50LmFkZFZpZXcoaW52ZXJzaW9uVGlsZSk7CisgICAgICAgICAgICBtRHluYW1pY1NwYW5uZWRUaWxlcy5hZGQoaW52ZXJzaW9uVGlsZSk7CisKKyAgICAgICAgICAgIC8vIENvbnRyYXN0IGVuaGFuY2VtZW50IHRpbGUKKyAgICAgICAgICAgIGZpbmFsIFN5c3RlbVNldHRpbmdUaWxlIGNvbnRyYXN0VGlsZSA9IG5ldyBTeXN0ZW1TZXR0aW5nVGlsZShtQ29udGV4dCk7CisgICAgICAgICAgICBjb250cmFzdFRpbGUuc2V0VXJpKFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09OVFJBU1RfRU5BQkxFRCwKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtU2V0dGluZ1RpbGUuVFlQRV9TRUNVUkUpOworICAgICAgICAgICAgY29udHJhc3RUaWxlLnNldEZyYWdtZW50KCJTZXR0aW5ncyRBY2Nlc3NpYmlsaXR5Q29udHJhc3RTZXR0aW5nc0FjdGl2aXR5Iik7CisgICAgICAgICAgICBtTW9kZWwuYWRkQ29udHJhc3RUaWxlKGNvbnRyYXN0VGlsZSwgY29udHJhc3RUaWxlLmdldFJlZnJlc2hDYWxsYmFjaygpKTsKKyAgICAgICAgICAgIHBhcmVudC5hZGRWaWV3KGNvbnRyYXN0VGlsZSk7CisgICAgICAgICAgICBtRHluYW1pY1NwYW5uZWRUaWxlcy5hZGQoY29udHJhc3RUaWxlKTsKKworICAgICAgICAgICAgLy8gQ29sb3Igc3BhY2UgYWRqdXN0bWVudCB0aWxlCisgICAgICAgICAgICBmaW5hbCBTeXN0ZW1TZXR0aW5nVGlsZSBjb2xvclNwYWNlVGlsZSA9IG5ldyBTeXN0ZW1TZXR0aW5nVGlsZShtQ29udGV4dCk7CisgICAgICAgICAgICBjb2xvclNwYWNlVGlsZS5zZXRVcmkoU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9EQUxUT05JWkVSX0VOQUJMRUQsCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbVNldHRpbmdUaWxlLlRZUEVfU0VDVVJFKTsKKyAgICAgICAgICAgIGNvbG9yU3BhY2VUaWxlLnNldEZyYWdtZW50KCJTZXR0aW5ncyRBY2Nlc3NpYmlsaXR5RGFsdG9uaXplclNldHRpbmdzQWN0aXZpdHkiKTsKKyAgICAgICAgICAgIG1Nb2RlbC5hZGRDb2xvclNwYWNlVGlsZShjb2xvclNwYWNlVGlsZSwgY29sb3JTcGFjZVRpbGUuZ2V0UmVmcmVzaENhbGxiYWNrKCkpOworICAgICAgICAgICAgcGFyZW50LmFkZFZpZXcoY29sb3JTcGFjZVRpbGUpOworICAgICAgICAgICAgbUR5bmFtaWNTcGFubmVkVGlsZXMuYWRkKGNvbG9yU3BhY2VUaWxlKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhZGRTeXN0ZW1UaWxlcyhWaWV3R3JvdXAgcGFyZW50LCBMYXlvdXRJbmZsYXRlciBpbmZsYXRlcikgewpAQCAtNDcyLDggKzUwNSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBSb3RhdGlvbiBMb2NrCi0gICAgICAgIGlmIChtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRCb29sZWFuKFIuYm9vbC5xdWlja19zZXR0aW5nc19zaG93X3JvdGF0aW9uX2xvY2spCi0gICAgICAgICAgICAgICAgfHwgREVCVUdfR09ORV9USUxFUykgeworICAgICAgICBpZiAobVJvdGF0aW9uTG9ja0NvbnRyb2xsZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgZmluYWwgUXVpY2tTZXR0aW5nc0Jhc2ljVGlsZSByb3RhdGlvbkxvY2tUaWxlCiAgICAgICAgICAgICAgICAgICAgID0gbmV3IFF1aWNrU2V0dGluZ3NCYXNpY1RpbGUobUNvbnRleHQpOwogICAgICAgICAgICAgcm90YXRpb25Mb2NrVGlsZS5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewpAQCAtOTE4LDQgKzk1MCwxMDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKworICAgIC8qKgorICAgICAqIFF1aWNrIFNldHRpbmcgdGlsZSB0aGF0IHJlcHJlc2VudHMgYSBzZWN1cmUgc2V0dGluZy4gVGhpcyB0eXBlIG9mIHRpbGUKKyAgICAgKiBjYW4gdG9nZ2xlIGEgVVJJIHdpdGhpbiBTZXR0aW5ncy5TZWN1cmUgb24gY2xpY2sgYW5kIGxhdW5jaCBhIFNldHRpbmdzCisgICAgICogZnJhZ21lbnQgb24gbG9uZy1jbGljay4KKyAgICAgKi8KKyAgICBwdWJsaWMgY2xhc3MgU3lzdGVtU2V0dGluZ1RpbGUgZXh0ZW5kcyBRdWlja1NldHRpbmdzQmFzaWNUaWxlIHsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRZUEVfR0xPQkFMID0gMDsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRZUEVfU0VDVVJFID0gMTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRZUEVfU1lTVEVNID0gMjsKKworICAgICAgICBwcml2YXRlIGZpbmFsIFF1aWNrU2V0dGluZ3NNb2RlbC5CYXNpY1JlZnJlc2hDYWxsYmFjayBtUmVmcmVzaENhbGxiYWNrOworCisgICAgICAgIHByaXZhdGUgU3RyaW5nIG1GcmFnbWVudDsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbU5hbWU7CisgICAgICAgIHByaXZhdGUgaW50IG1UeXBlOworCisgICAgICAgIHB1YmxpYyBTeXN0ZW1TZXR0aW5nVGlsZShDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQpOworCisgICAgICAgICAgICBtUmVmcmVzaENhbGxiYWNrID0gbmV3IFF1aWNrU2V0dGluZ3NNb2RlbC5CYXNpY1JlZnJlc2hDYWxsYmFjayh0aGlzKTsKKyAgICAgICAgICAgIG1SZWZyZXNoQ2FsbGJhY2suc2V0U2hvd1doZW5FbmFibGVkKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHBlcmZvcm1Mb25nQ2xpY2soKSB7CisgICAgICAgICAgICBpZiAobUZyYWdtZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb2xsYXBzZVBhbmVscygpOworCisgICAgICAgICAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBpbnRlbnQuc2V0Q29tcG9uZW50KG5ldyBDb21wb25lbnROYW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLnNldHRpbmdzIiwgImNvbS5hbmRyb2lkLnNldHRpbmdzLiIgKyBtRnJhZ21lbnQpKTsKKyAgICAgICAgICAgICAgICBzdGFydFNldHRpbmdzQWN0aXZpdHkoaW50ZW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtQ2xpY2soKSB7CisgICAgICAgICAgICBpZiAobU5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvbGxhcHNlUGFuZWxzKCk7CisKKyAgICAgICAgICAgICAgICBmaW5hbCBDb250ZW50UmVzb2x2ZXIgY3IgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1UeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9HTE9CQUw6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZW5hYmxlID0gU2V0dGluZ3MuR2xvYmFsLmdldEludChjciwgbU5hbWUsIDApID09IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwucHV0SW50KGNyLCBtTmFtZSwgZW5hYmxlID8gMSA6IDApOworICAgICAgICAgICAgICAgICAgICB9IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfU0VDVVJFOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGVuYWJsZSA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjciwgbU5hbWUsIDAsIFVzZXJIYW5kbGUuVVNFUl9DVVJSRU5UKSA9PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyLCBtTmFtZSwgZW5hYmxlID8gMSA6IDAsIFVzZXJIYW5kbGUuVVNFUl9DVVJSRU5UKTsKKyAgICAgICAgICAgICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1NZU1RFTTogeworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBlbmFibGUgPSBTZXR0aW5ncy5TeXN0ZW0uZ2V0SW50Rm9yVXNlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3IsIG1OYW1lLCAwLCBVc2VySGFuZGxlLlVTRVJfQ1VSUkVOVCkgPT0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlN5c3RlbS5wdXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjciwgbU5hbWUsIGVuYWJsZSA/IDEgOiAwLCBVc2VySGFuZGxlLlVTRVJfQ1VSUkVOVCk7CisgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyB0aGUgZnJhZ21lbnQgd2l0aGluIHRoZSBjb20uYW5kcm9pZC5zZXR0aW5ncyBwYWNrYWdlIHRvCisgICAgICAgICAqIGxhdW5jaCB3aGVuIHRoaXMgdGlsZSBpcyBsb25nLWNsaWNrZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBmcmFnbWVudCBhIGZyYWdtZW50IG5hbWUgd2l0aGluIHRoZSBjb20uYW5kcm9pZC5zZXR0aW5ncworICAgICAgICAgKiAgICAgICAgICAgIHBhY2thZ2UKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEZyYWdtZW50KFN0cmluZyBmcmFnbWVudCkgeworICAgICAgICAgICAgbUZyYWdtZW50ID0gZnJhZ21lbnQ7CisgICAgICAgICAgICBzZXRMb25nQ2xpY2thYmxlKGZyYWdtZW50ICE9IG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyB0aGUgc2V0dGluZyBuYW1lIGFuZCB0eXBlIHRvIHRvZ2dsZSB3aGVuIHRoaXMgdGlsZSBpcworICAgICAgICAgKiBjbGlja2VkLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gbmFtZSBhIHNldHRpbmcgbmFtZQorICAgICAgICAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSBvZiBzZXR0aW5nLCBvbmUgb2Y6CisgICAgICAgICAqICAgICAgICAgICAgPHVsPgorICAgICAgICAgKiAgICAgICAgICAgIDxsaT57QGxpbmsgI1RZUEVfR0xPQkFMfQorICAgICAgICAgKiAgICAgICAgICAgIDxsaT57QGxpbmsgI1RZUEVfU0VDVVJFfQorICAgICAgICAgKiAgICAgICAgICAgIDxsaT57QGxpbmsgI1RZUEVfU1lTVEVNfQorICAgICAgICAgKiAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBzZXRVcmkoU3RyaW5nIG5hbWUsIGludCB0eXBlKSB7CisgICAgICAgICAgICBtTmFtZSA9IG5hbWU7CisgICAgICAgICAgICBtVHlwZSA9IHR5cGU7CisgICAgICAgICAgICBzZXRDbGlja2FibGUobU5hbWUgIT0gbnVsbCk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQHJldHVybiB0aGUgcmVmcmVzaCBjYWxsYmFjayBmb3IgdGhpcyB0aWxlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgUXVpY2tTZXR0aW5nc01vZGVsLkJhc2ljUmVmcmVzaENhbGxiYWNrIGdldFJlZnJlc2hDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIHJldHVybiBtUmVmcmVzaENhbGxiYWNrOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1NldHRpbmdzTW9kZWwuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUXVpY2tTZXR0aW5nc01vZGVsLmphdmEKaW5kZXggNDIyMDFjNS4uMTFjYmE3YiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1NldHRpbmdzTW9kZWwuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1F1aWNrU2V0dGluZ3NNb2RlbC5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5Db250ZW50T2JzZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKQEAgLTkxLDYgKzkyLDE5IEBACiAgICAgc3RhdGljIGNsYXNzIEJyaWdodG5lc3NTdGF0ZSBleHRlbmRzIFN0YXRlIHsKICAgICAgICAgYm9vbGVhbiBhdXRvQnJpZ2h0bmVzczsKICAgICB9CisgICAgc3RhdGljIGNsYXNzIEludmVyc2lvblN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBib29sZWFuIHRvZ2dsZWQ7CisgICAgICAgIGludCB0eXBlOworICAgIH0KKyAgICBzdGF0aWMgY2xhc3MgQ29udHJhc3RTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgYm9vbGVhbiB0b2dnbGVkOworICAgICAgICBmbG9hdCBjb250cmFzdDsKKyAgICAgICAgZmxvYXQgYnJpZ2h0bmVzczsKKyAgICB9CisgICAgc3RhdGljIGNsYXNzIENvbG9yU3BhY2VTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgYm9vbGVhbiB0b2dnbGVkOworICAgICAgICBpbnQgdHlwZTsKKyAgICB9CiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCbHVldG9vdGhTdGF0ZSBleHRlbmRzIFN0YXRlIHsKICAgICAgICAgYm9vbGVhbiBjb25uZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgU3RyaW5nIHN0YXRlQ29udGVudERlc2NyaXB0aW9uOwpAQCAtMTk5LDYgKzIxMyw4NyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqIENvbnRlbnRPYnNlcnZlciB0byB3YXRjaCBkaXNwbGF5IGludmVyc2lvbiAqLworICAgIHByaXZhdGUgY2xhc3MgRGlzcGxheUludmVyc2lvbk9ic2VydmVyIGV4dGVuZHMgQ29udGVudE9ic2VydmVyIHsKKyAgICAgICAgcHVibGljIERpc3BsYXlJbnZlcnNpb25PYnNlcnZlcihIYW5kbGVyIGhhbmRsZXIpIHsKKyAgICAgICAgICAgIHN1cGVyKGhhbmRsZXIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlKGJvb2xlYW4gc2VsZkNoYW5nZSkgeworICAgICAgICAgICAgb25JbnZlcnNpb25DaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzdGFydE9ic2VydmluZygpIHsKKyAgICAgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBjciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOworICAgICAgICAgICAgY3IudW5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcih0aGlzKTsKKyAgICAgICAgICAgIGNyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfSU5WRVJTSU9OX0VOQUJMRUQpLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdGhpcywgbVVzZXJUcmFja2VyLmdldEN1cnJlbnRVc2VySWQoKSk7CisgICAgICAgICAgICBjci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9RVUlDS19TRVRUSU5HX0VOQUJMRUQpLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdGhpcywgbVVzZXJUcmFja2VyLmdldEN1cnJlbnRVc2VySWQoKSk7CisgICAgICAgICAgICBjci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTiksCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0aGlzLCBtVXNlclRyYWNrZXIuZ2V0Q3VycmVudFVzZXJJZCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBDb250ZW50T2JzZXJ2ZXIgdG8gd2F0Y2ggZGlzcGxheSBjb250cmFzdCAqLworICAgIHByaXZhdGUgY2xhc3MgRGlzcGxheUNvbnRyYXN0T2JzZXJ2ZXIgZXh0ZW5kcyBDb250ZW50T2JzZXJ2ZXIgeworICAgICAgICBwdWJsaWMgRGlzcGxheUNvbnRyYXN0T2JzZXJ2ZXIoSGFuZGxlciBoYW5kbGVyKSB7CisgICAgICAgICAgICBzdXBlcihoYW5kbGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZShib29sZWFuIHNlbGZDaGFuZ2UpIHsKKyAgICAgICAgICAgIG9uQ29udHJhc3RDaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzdGFydE9ic2VydmluZygpIHsKKyAgICAgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBjciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOworICAgICAgICAgICAgY3IudW5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcih0aGlzKTsKKyAgICAgICAgICAgIGNyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09OVFJBU1RfRU5BQkxFRCksCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0aGlzLCBtVXNlclRyYWNrZXIuZ2V0Q3VycmVudFVzZXJJZCgpKTsKKyAgICAgICAgICAgIGNyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09OVFJBU1RfUVVJQ0tfU0VUVElOR19FTkFCTEVEKSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRoaXMsIG1Vc2VyVHJhY2tlci5nZXRDdXJyZW50VXNlcklkKCkpOworICAgICAgICAgICAgY3IucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT05UUkFTVCksCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0aGlzLCBtVXNlclRyYWNrZXIuZ2V0Q3VycmVudFVzZXJJZCgpKTsKKyAgICAgICAgICAgIGNyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQlJJR0hUTkVTUyksCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0aGlzLCBtVXNlclRyYWNrZXIuZ2V0Q3VycmVudFVzZXJJZCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBDb250ZW50T2JzZXJ2ZXIgdG8gd2F0Y2ggZGlzcGxheSBjb2xvciBzcGFjZSBhZGp1c3RtZW50ICovCisgICAgcHJpdmF0ZSBjbGFzcyBEaXNwbGF5Q29sb3JTcGFjZU9ic2VydmVyIGV4dGVuZHMgQ29udGVudE9ic2VydmVyIHsKKyAgICAgICAgcHVibGljIERpc3BsYXlDb2xvclNwYWNlT2JzZXJ2ZXIoSGFuZGxlciBoYW5kbGVyKSB7CisgICAgICAgICAgICBzdXBlcihoYW5kbGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZShib29sZWFuIHNlbGZDaGFuZ2UpIHsKKyAgICAgICAgICAgIG9uQ29sb3JTcGFjZUNoYW5nZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0T2JzZXJ2aW5nKCkgeworICAgICAgICAgICAgZmluYWwgQ29udGVudFJlc29sdmVyIGNyID0gbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7CisgICAgICAgICAgICBjci51bnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKHRoaXMpOworICAgICAgICAgICAgY3IucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9EQUxUT05JWkVSX0VOQUJMRUQpLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdGhpcywgbVVzZXJUcmFja2VyLmdldEN1cnJlbnRVc2VySWQoKSk7CisgICAgICAgICAgICBjci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0RBTFRPTklaRVJfUVVJQ0tfU0VUVElOR19FTkFCTEVEKSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRoaXMsIG1Vc2VyVHJhY2tlci5nZXRDdXJyZW50VXNlcklkKCkpOworICAgICAgICAgICAgY3IucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9EQUxUT05JWkVSKSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRoaXMsIG1Vc2VyVHJhY2tlci5nZXRDdXJyZW50VXNlcklkKCkpOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqIENhbGxiYWNrIGZvciBjaGFuZ2VzIHRvIHJlbW90ZSBkaXNwbGF5IHJvdXRlcy4gKi8KICAgICBwcml2YXRlIGNsYXNzIFJlbW90ZURpc3BsYXlSb3V0ZUNhbGxiYWNrIGV4dGVuZHMgTWVkaWFSb3V0ZXIuU2ltcGxlQ2FsbGJhY2sgewogICAgICAgICBAT3ZlcnJpZGUKQEAgLTIyOSw2ICszMjQsOSBAQAogICAgIHByaXZhdGUgZmluYWwgTmV4dEFsYXJtT2JzZXJ2ZXIgbU5leHRBbGFybU9ic2VydmVyOwogICAgIHByaXZhdGUgZmluYWwgQnVncmVwb3J0T2JzZXJ2ZXIgbUJ1Z3JlcG9ydE9ic2VydmVyOwogICAgIHByaXZhdGUgZmluYWwgQnJpZ2h0bmVzc09ic2VydmVyIG1CcmlnaHRuZXNzT2JzZXJ2ZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBEaXNwbGF5SW52ZXJzaW9uT2JzZXJ2ZXIgbUludmVyc2lvbk9ic2VydmVyOworICAgIHByaXZhdGUgZmluYWwgRGlzcGxheUNvbnRyYXN0T2JzZXJ2ZXIgbUNvbnRyYXN0T2JzZXJ2ZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBEaXNwbGF5Q29sb3JTcGFjZU9ic2VydmVyIG1Db2xvclNwYWNlT2JzZXJ2ZXI7CiAKICAgICBwcml2YXRlIGZpbmFsIE1lZGlhUm91dGVyIG1NZWRpYVJvdXRlcjsKICAgICBwcml2YXRlIGZpbmFsIFJlbW90ZURpc3BsYXlSb3V0ZUNhbGxiYWNrIG1SZW1vdGVEaXNwbGF5Um91dGVDYWxsYmFjazsKQEAgLTI4Nyw2ICszODUsMTggQEAKICAgICBwcml2YXRlIFJlZnJlc2hDYWxsYmFjayBtQnJpZ2h0bmVzc0NhbGxiYWNrOwogICAgIHByaXZhdGUgQnJpZ2h0bmVzc1N0YXRlIG1CcmlnaHRuZXNzU3RhdGUgPSBuZXcgQnJpZ2h0bmVzc1N0YXRlKCk7CiAKKyAgICBwcml2YXRlIFF1aWNrU2V0dGluZ3NUaWxlVmlldyBtSW52ZXJzaW9uVGlsZTsKKyAgICBwcml2YXRlIFJlZnJlc2hDYWxsYmFjayBtSW52ZXJzaW9uQ2FsbGJhY2s7CisgICAgcHJpdmF0ZSBJbnZlcnNpb25TdGF0ZSBtSW52ZXJzaW9uU3RhdGUgPSBuZXcgSW52ZXJzaW9uU3RhdGUoKTsKKworICAgIHByaXZhdGUgUXVpY2tTZXR0aW5nc1RpbGVWaWV3IG1Db250cmFzdFRpbGU7CisgICAgcHJpdmF0ZSBSZWZyZXNoQ2FsbGJhY2sgbUNvbnRyYXN0Q2FsbGJhY2s7CisgICAgcHJpdmF0ZSBDb250cmFzdFN0YXRlIG1Db250cmFzdFN0YXRlID0gbmV3IENvbnRyYXN0U3RhdGUoKTsKKworICAgIHByaXZhdGUgUXVpY2tTZXR0aW5nc1RpbGVWaWV3IG1Db2xvclNwYWNlVGlsZTsKKyAgICBwcml2YXRlIFJlZnJlc2hDYWxsYmFjayBtQ29sb3JTcGFjZUNhbGxiYWNrOworICAgIHByaXZhdGUgQ29sb3JTcGFjZVN0YXRlIG1Db2xvclNwYWNlU3RhdGUgPSBuZXcgQ29sb3JTcGFjZVN0YXRlKCk7CisKICAgICBwcml2YXRlIFF1aWNrU2V0dGluZ3NUaWxlVmlldyBtQnVncmVwb3J0VGlsZTsKICAgICBwcml2YXRlIFJlZnJlc2hDYWxsYmFjayBtQnVncmVwb3J0Q2FsbGJhY2s7CiAgICAgcHJpdmF0ZSBTdGF0ZSBtQnVncmVwb3J0U3RhdGUgPSBuZXcgU3RhdGUoKTsKQEAgLTMwMCw2ICs0MTAsNyBAQAogICAgIHByaXZhdGUgU3RhdGUgbVNzbENhQ2VydFdhcm5pbmdTdGF0ZSA9IG5ldyBTdGF0ZSgpOwogCiAgICAgcHJpdmF0ZSBSb3RhdGlvbkxvY2tDb250cm9sbGVyIG1Sb3RhdGlvbkxvY2tDb250cm9sbGVyOworICAgIHByaXZhdGUgaW50IG1Sb3RhdGlvbkxvY2tlZExhYmVsOwogCiAgICAgcHVibGljIFF1aWNrU2V0dGluZ3NNb2RlbChDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwpAQCAtMzA4LDggKzQxOSwxNCBAQAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblVzZXJTd2l0Y2hlZChpbnQgbmV3VXNlcklkKSB7CiAgICAgICAgICAgICAgICAgbUJyaWdodG5lc3NPYnNlcnZlci5zdGFydE9ic2VydmluZygpOworICAgICAgICAgICAgICAgIG1JbnZlcnNpb25PYnNlcnZlci5zdGFydE9ic2VydmluZygpOworICAgICAgICAgICAgICAgIG1Db250cmFzdE9ic2VydmVyLnN0YXJ0T2JzZXJ2aW5nKCk7CisgICAgICAgICAgICAgICAgbUNvbG9yU3BhY2VPYnNlcnZlci5zdGFydE9ic2VydmluZygpOwogICAgICAgICAgICAgICAgIHJlZnJlc2hSb3RhdGlvbkxvY2tUaWxlKCk7CiAgICAgICAgICAgICAgICAgb25CcmlnaHRuZXNzTGV2ZWxDaGFuZ2VkKCk7CisgICAgICAgICAgICAgICAgb25JbnZlcnNpb25DaGFuZ2VkKCk7CisgICAgICAgICAgICAgICAgb25Db250cmFzdENoYW5nZWQoKTsKKyAgICAgICAgICAgICAgICBvbkNvbG9yU3BhY2VDaGFuZ2VkKCk7CiAgICAgICAgICAgICAgICAgb25OZXh0QWxhcm1DaGFuZ2VkKCk7CiAgICAgICAgICAgICAgICAgb25CdWdyZXBvcnRDaGFuZ2VkKCk7CiAgICAgICAgICAgICAgICAgcmViaW5kTWVkaWFSb3V0ZXJBc0N1cnJlbnRVc2VyKCk7CkBAIC0zMjIsNiArNDM5LDEyIEBACiAgICAgICAgIG1CdWdyZXBvcnRPYnNlcnZlci5zdGFydE9ic2VydmluZygpOwogICAgICAgICBtQnJpZ2h0bmVzc09ic2VydmVyID0gbmV3IEJyaWdodG5lc3NPYnNlcnZlcihtSGFuZGxlcik7CiAgICAgICAgIG1CcmlnaHRuZXNzT2JzZXJ2ZXIuc3RhcnRPYnNlcnZpbmcoKTsKKyAgICAgICAgbUludmVyc2lvbk9ic2VydmVyID0gbmV3IERpc3BsYXlJbnZlcnNpb25PYnNlcnZlcihtSGFuZGxlcik7CisgICAgICAgIG1JbnZlcnNpb25PYnNlcnZlci5zdGFydE9ic2VydmluZygpOworICAgICAgICBtQ29udHJhc3RPYnNlcnZlciA9IG5ldyBEaXNwbGF5Q29udHJhc3RPYnNlcnZlcihtSGFuZGxlcik7CisgICAgICAgIG1Db250cmFzdE9ic2VydmVyLnN0YXJ0T2JzZXJ2aW5nKCk7CisgICAgICAgIG1Db2xvclNwYWNlT2JzZXJ2ZXIgPSBuZXcgRGlzcGxheUNvbG9yU3BhY2VPYnNlcnZlcihtSGFuZGxlcik7CisgICAgICAgIG1Db2xvclNwYWNlT2JzZXJ2ZXIuc3RhcnRPYnNlcnZpbmcoKTsKIAogICAgICAgICBtTWVkaWFSb3V0ZXIgPSAoTWVkaWFSb3V0ZXIpY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuTUVESUFfUk9VVEVSX1NFUlZJQ0UpOwogICAgICAgICByZWJpbmRNZWRpYVJvdXRlckFzQ3VycmVudFVzZXIoKTsKQEAgLTc5OCw2ICs5MjEsMTIgQEAKICAgICAgICAgbVJvdGF0aW9uTG9ja1RpbGUgPSB2aWV3OwogICAgICAgICBtUm90YXRpb25Mb2NrQ2FsbGJhY2sgPSBjYjsKICAgICAgICAgbVJvdGF0aW9uTG9ja0NvbnRyb2xsZXIgPSByb3RhdGlvbkxvY2tDb250cm9sbGVyOworICAgICAgICBmaW5hbCBpbnQgbG9ja09yaWVudGF0aW9uID0gbVJvdGF0aW9uTG9ja0NvbnRyb2xsZXIuZ2V0Um90YXRpb25Mb2NrT3JpZW50YXRpb24oKTsKKyAgICAgICAgbVJvdGF0aW9uTG9ja2VkTGFiZWwgPSBsb2NrT3JpZW50YXRpb24gPT0gQ29uZmlndXJhdGlvbi5PUklFTlRBVElPTl9QT1JUUkFJVAorICAgICAgICAgICAgICAgICAgICA/IFIuc3RyaW5nLnF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9wb3J0cmFpdF9sYWJlbAorICAgICAgICAgICAgICAgICAgICA6IGxvY2tPcmllbnRhdGlvbiA9PSBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX0xBTkRTQ0FQRQorICAgICAgICAgICAgICAgICAgICA/IFIuc3RyaW5nLnF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYW5kc2NhcGVfbGFiZWwKKyAgICAgICAgICAgICAgICAgICAgOiBSLnN0cmluZy5xdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWw7CiAgICAgICAgIG9uUm90YXRpb25Mb2NrQ2hhbmdlZCgpOwogICAgIH0KICAgICB2b2lkIG9uUm90YXRpb25Mb2NrQ2hhbmdlZCgpIHsKQEAgLTgxMiw3ICs5NDEsNyBAQAogICAgICAgICAgICAgICAgID8gUi5kcmF3YWJsZS5pY19xc19yb3RhdGlvbl9sb2NrZWQKICAgICAgICAgICAgICAgICA6IFIuZHJhd2FibGUuaWNfcXNfYXV0b19yb3RhdGU7CiAgICAgICAgIG1Sb3RhdGlvbkxvY2tTdGF0ZS5sYWJlbCA9IHJvdGF0aW9uTG9ja2VkCi0gICAgICAgICAgICAgICAgPyBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcucXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsKQorICAgICAgICAgICAgICAgID8gbUNvbnRleHQuZ2V0U3RyaW5nKG1Sb3RhdGlvbkxvY2tlZExhYmVsKQogICAgICAgICAgICAgICAgIDogbUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLnF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsKTsKICAgICAgICAgbVJvdGF0aW9uTG9ja0NhbGxiYWNrLnJlZnJlc2hWaWV3KG1Sb3RhdGlvbkxvY2tUaWxlLCBtUm90YXRpb25Mb2NrU3RhdGUpOwogICAgIH0KQEAgLTg0Nyw2ICs5NzYsOTAgQEAKICAgICAgICAgb25CcmlnaHRuZXNzTGV2ZWxDaGFuZ2VkKCk7CiAgICAgfQogCisgICAgLy8gQ29sb3IgaW52ZXJzaW9uCisgICAgdm9pZCBhZGRJbnZlcnNpb25UaWxlKFF1aWNrU2V0dGluZ3NUaWxlVmlldyB2aWV3LCBSZWZyZXNoQ2FsbGJhY2sgY2IpIHsKKyAgICAgICAgbUludmVyc2lvblRpbGUgPSB2aWV3OworICAgICAgICBtSW52ZXJzaW9uQ2FsbGJhY2sgPSBjYjsKKyAgICAgICAgb25JbnZlcnNpb25DaGFuZ2VkKCk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIG9uSW52ZXJzaW9uQ2hhbmdlZCgpIHsKKyAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpOworICAgICAgICBmaW5hbCBDb250ZW50UmVzb2x2ZXIgY3IgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKyAgICAgICAgZmluYWwgaW50IGN1cnJlbnRVc2VySWQgPSBtVXNlclRyYWNrZXIuZ2V0Q3VycmVudFVzZXJJZCgpOworICAgICAgICBmaW5hbCBib29sZWFuIHF1aWNrU2V0dGluZ0VuYWJsZWQgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0SW50Rm9yVXNlcigKKyAgICAgICAgICAgICAgICBjciwgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9JTlZFUlNJT05fUVVJQ0tfU0VUVElOR19FTkFCTEVELCAwLAorICAgICAgICAgICAgICAgIGN1cnJlbnRVc2VySWQpID09IDE7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gZW5hYmxlZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9FTkFCTEVELCAwLCBjdXJyZW50VXNlcklkKSA9PSAxOworICAgICAgICBmaW5hbCBpbnQgdHlwZSA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTiwgMCwgY3VycmVudFVzZXJJZCk7CisgICAgICAgIG1JbnZlcnNpb25TdGF0ZS5lbmFibGVkID0gcXVpY2tTZXR0aW5nRW5hYmxlZDsKKyAgICAgICAgbUludmVyc2lvblN0YXRlLnRvZ2dsZWQgPSBlbmFibGVkOworICAgICAgICBtSW52ZXJzaW9uU3RhdGUudHlwZSA9IHR5cGU7CisgICAgICAgIC8vIFRPRE86IEFkZCByZWFsIGljb24gYXNzZXRzLgorICAgICAgICBtSW52ZXJzaW9uU3RhdGUuaWNvbklkID0gZW5hYmxlZCA/IFIuZHJhd2FibGUuaWNfcXNfYmx1ZXRvb3RoX29uCisgICAgICAgICAgICAgICAgOiBSLmRyYXdhYmxlLmljX3FzX2JsdWV0b290aF9vZmY7CisgICAgICAgIG1JbnZlcnNpb25TdGF0ZS5sYWJlbCA9IHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcucXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsKTsKKyAgICAgICAgbUludmVyc2lvbkNhbGxiYWNrLnJlZnJlc2hWaWV3KG1JbnZlcnNpb25UaWxlLCBtSW52ZXJzaW9uU3RhdGUpOworICAgIH0KKworICAgIC8vIENvbnRyYXN0IGVuaGFuY2VtZW50CisgICAgdm9pZCBhZGRDb250cmFzdFRpbGUoUXVpY2tTZXR0aW5nc1RpbGVWaWV3IHZpZXcsIFJlZnJlc2hDYWxsYmFjayBjYikgeworICAgICAgICBtQ29udHJhc3RUaWxlID0gdmlldzsKKyAgICAgICAgbUNvbnRyYXN0Q2FsbGJhY2sgPSBjYjsKKyAgICAgICAgb25Db250cmFzdENoYW5nZWQoKTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgb25Db250cmFzdENoYW5nZWQoKSB7CisgICAgICAgIGZpbmFsIFJlc291cmNlcyByZXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgZmluYWwgQ29udGVudFJlc29sdmVyIGNyID0gbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7CisgICAgICAgIGZpbmFsIGludCBjdXJyZW50VXNlcklkID0gbVVzZXJUcmFja2VyLmdldEN1cnJlbnRVc2VySWQoKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBxdWlja1NldHRpbmdFbmFibGVkID0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgY3IsIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09OVFJBU1RfUVVJQ0tfU0VUVElOR19FTkFCTEVELCAwLAorICAgICAgICAgICAgICAgIGN1cnJlbnRVc2VySWQpID09IDE7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gZW5hYmxlZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTlRSQVNUX0VOQUJMRUQsIDAsIGN1cnJlbnRVc2VySWQpID09IDE7CisgICAgICAgIGZpbmFsIGZsb2F0IGNvbnRyYXN0ID0gU2V0dGluZ3MuU2VjdXJlLmdldEZsb2F0Rm9yVXNlcigKKyAgICAgICAgICAgICAgICBjciwgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT05UUkFTVCwgMSwgY3VycmVudFVzZXJJZCk7CisgICAgICAgIGZpbmFsIGZsb2F0IGJyaWdodG5lc3MgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0RmxvYXRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0JSSUdIVE5FU1MsIDAsIGN1cnJlbnRVc2VySWQpOworICAgICAgICBtQ29udHJhc3RTdGF0ZS5lbmFibGVkID0gcXVpY2tTZXR0aW5nRW5hYmxlZDsKKyAgICAgICAgbUNvbnRyYXN0U3RhdGUudG9nZ2xlZCA9IGVuYWJsZWQ7CisgICAgICAgIG1Db250cmFzdFN0YXRlLmNvbnRyYXN0ID0gY29udHJhc3Q7CisgICAgICAgIG1Db250cmFzdFN0YXRlLmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOworICAgICAgICAvLyBUT0RPOiBBZGQgcmVhbCBpY29uIGFzc2V0cy4KKyAgICAgICAgbUNvbnRyYXN0U3RhdGUuaWNvbklkID0gZW5hYmxlZCA/IFIuZHJhd2FibGUuaWNfcXNfYmx1ZXRvb3RoX29uCisgICAgICAgICAgICAgICAgOiBSLmRyYXdhYmxlLmljX3FzX2JsdWV0b290aF9vZmY7CisgICAgICAgIG1Db250cmFzdFN0YXRlLmxhYmVsID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy5xdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCk7CisgICAgICAgIG1Db250cmFzdENhbGxiYWNrLnJlZnJlc2hWaWV3KG1Db250cmFzdFRpbGUsIG1Db250cmFzdFN0YXRlKTsKKyAgICB9CisKKyAgICAvLyBDb2xvciBzcGFjZSBhZGp1c3RtZW50CisgICAgdm9pZCBhZGRDb2xvclNwYWNlVGlsZShRdWlja1NldHRpbmdzVGlsZVZpZXcgdmlldywgUmVmcmVzaENhbGxiYWNrIGNiKSB7CisgICAgICAgIG1Db2xvclNwYWNlVGlsZSA9IHZpZXc7CisgICAgICAgIG1Db2xvclNwYWNlQ2FsbGJhY2sgPSBjYjsKKyAgICAgICAgb25Db2xvclNwYWNlQ2hhbmdlZCgpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBvbkNvbG9yU3BhY2VDaGFuZ2VkKCkgeworICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBjciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOworICAgICAgICBmaW5hbCBpbnQgY3VycmVudFVzZXJJZCA9IG1Vc2VyVHJhY2tlci5nZXRDdXJyZW50VXNlcklkKCk7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gcXVpY2tTZXR0aW5nRW5hYmxlZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0RBTFRPTklaRVJfUVVJQ0tfU0VUVElOR19FTkFCTEVELCAwLAorICAgICAgICAgICAgICAgIGN1cnJlbnRVc2VySWQpID09IDE7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gZW5hYmxlZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKGNyLAorICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUl9FTkFCTEVELCAwLCBjdXJyZW50VXNlcklkKSA9PSAxOworICAgICAgICBmaW5hbCBpbnQgdHlwZSA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0RBTFRPTklaRVIsIDAsIGN1cnJlbnRVc2VySWQpOworICAgICAgICBtQ29sb3JTcGFjZVN0YXRlLmVuYWJsZWQgPSBxdWlja1NldHRpbmdFbmFibGVkOworICAgICAgICBtQ29sb3JTcGFjZVN0YXRlLnRvZ2dsZWQgPSBlbmFibGVkOworICAgICAgICBtQ29sb3JTcGFjZVN0YXRlLnR5cGUgPSB0eXBlOworICAgICAgICAvLyBUT0RPOiBBZGQgcmVhbCBpY29uIGFzc2V0cy4KKyAgICAgICAgbUNvbG9yU3BhY2VTdGF0ZS5pY29uSWQgPSBlbmFibGVkID8gUi5kcmF3YWJsZS5pY19xc19ibHVldG9vdGhfb24KKyAgICAgICAgICAgICAgICA6IFIuZHJhd2FibGUuaWNfcXNfYmx1ZXRvb3RoX29mZjsKKyAgICAgICAgbUNvbG9yU3BhY2VTdGF0ZS5sYWJlbCA9IHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcucXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwpOworICAgICAgICBtQ29sb3JTcGFjZUNhbGxiYWNrLnJlZnJlc2hWaWV3KG1Db2xvclNwYWNlVGlsZSwgbUNvbG9yU3BhY2VTdGF0ZSk7CisgICAgfQorCiAgICAgLy8gU1NMIENBIENlcnQgd2FybmluZy4KICAgICBwdWJsaWMgdm9pZCBhZGRTc2xDYUNlcnRXYXJuaW5nVGlsZShRdWlja1NldHRpbmdzVGlsZVZpZXcgdmlldywgUmVmcmVzaENhbGxiYWNrIGNiKSB7CiAgICAgICAgIG1Tc2xDYUNlcnRXYXJuaW5nVGlsZSA9IHZpZXc7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1F1aWNrU2V0dGluZ3NTY3JvbGxWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1F1aWNrU2V0dGluZ3NTY3JvbGxWaWV3LmphdmEKaW5kZXggOGEyZjhkNi4uMTc1ODA1YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1NldHRpbmdzU2Nyb2xsVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUXVpY2tTZXR0aW5nc1Njcm9sbFZpZXcuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBpZiAoZ2V0Q2hpbGRDb3VudCgpID4gMCkgewogICAgICAgICAgICAgVmlldyBjaGlsZCA9IGdldENoaWxkQXQoMCk7CiAgICAgICAgICAgICBzY3JvbGxSYW5nZSA9IE1hdGgubWF4KDAsCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkLmdldEhlaWdodCgpIC0gKGdldEhlaWdodCgpIC0gbVBhZGRpbmdCb3R0b20gLSBtUGFkZGluZ1RvcCkpOworICAgICAgICAgICAgICAgICAgICBjaGlsZC5nZXRIZWlnaHQoKSAtIChnZXRIZWlnaHQoKSAtIGdldFBhZGRpbmdCb3R0b20oKSAtIGdldFBhZGRpbmdUb3AoKSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzY3JvbGxSYW5nZTsKICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1N0YXR1c0JhcldpbmRvd1ZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvU3RhdHVzQmFyV2luZG93Vmlldy5qYXZhCmluZGV4IDQ5MDE4MjMuLjdiMDMxOTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvU3RhdHVzQmFyV2luZG93Vmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvU3RhdHVzQmFyV2luZG93Vmlldy5qYXZhCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgIG1Ob3RpZmljYXRpb25QYW5lbCA9IChOb3RpZmljYXRpb25QYW5lbFZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLm5vdGlmaWNhdGlvbl9wYW5lbCk7CiAgICAgICAgIGludCBtaW5IZWlnaHQgPSBnZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5ub3RpZmljYXRpb25fcm93X21pbl9oZWlnaHQpOwogICAgICAgICBpbnQgbWF4SGVpZ2h0ID0gZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ubm90aWZpY2F0aW9uX3Jvd19tYXhfaGVpZ2h0KTsKLSAgICAgICAgbUV4cGFuZEhlbHBlciA9IG5ldyBFeHBhbmRIZWxwZXIobUNvbnRleHQsIGxhdGVzdEl0ZW1zLCBtaW5IZWlnaHQsIG1heEhlaWdodCk7CisgICAgICAgIG1FeHBhbmRIZWxwZXIgPSBuZXcgRXhwYW5kSGVscGVyKGdldENvbnRleHQoKSwgbGF0ZXN0SXRlbXMsIG1pbkhlaWdodCwgbWF4SGVpZ2h0KTsKICAgICAgICAgbUV4cGFuZEhlbHBlci5zZXRFdmVudFNvdXJjZSh0aGlzKTsKICAgICAgICAgbUV4cGFuZEhlbHBlci5zZXRTY3JvbGxWaWV3KG1TY3JvbGxWaWV3KTsKIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvRGF0ZVZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L0RhdGVWaWV3LmphdmEKaW5kZXggYjdmM2NmZS4uY2FkYjQ0YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvRGF0ZVZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9EYXRlVmlldy5qYXZhCkBAIC0yMSw5ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1BhcmVudDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CkBAIC03Myw3ICs3MCw3IEBACiAgICAgICAgIGZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9USU1FX0NIQU5HRUQpOwogICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fVElNRVpPTkVfQ0hBTkdFRCk7CiAgICAgICAgIGZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9MT0NBTEVfQ0hBTkdFRCk7Ci0gICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIobUludGVudFJlY2VpdmVyLCBmaWx0ZXIsIG51bGwsIG51bGwpOworICAgICAgICBnZXRDb250ZXh0KCkucmVnaXN0ZXJSZWNlaXZlcihtSW50ZW50UmVjZWl2ZXIsIGZpbHRlciwgbnVsbCwgbnVsbCk7CiAKICAgICAgICAgdXBkYXRlQ2xvY2soKTsKICAgICB9CkBAIC04Myw3ICs4MCw3IEBACiAgICAgICAgIHN1cGVyLm9uRGV0YWNoZWRGcm9tV2luZG93KCk7CiAKICAgICAgICAgbURhdGVGb3JtYXQgPSBudWxsOyAvLyByZWxvYWQgdGhlIGxvY2FsZSBuZXh0IHRpbWUKLSAgICAgICAgbUNvbnRleHQudW5yZWdpc3RlclJlY2VpdmVyKG1JbnRlbnRSZWNlaXZlcik7CisgICAgICAgIGdldENvbnRleHQoKS51bnJlZ2lzdGVyUmVjZWl2ZXIobUludGVudFJlY2VpdmVyKTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVDbG9jaygpIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L0hlYWRzVXBOb3RpZmljYXRpb25WaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9IZWFkc1VwTm90aWZpY2F0aW9uVmlldy5qYXZhCmluZGV4IGYxZmRhNzguLjQ2N2UxOWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L0hlYWRzVXBOb3RpZmljYXRpb25WaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvSGVhZHNVcE5vdGlmaWNhdGlvblZpZXcuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3k7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKQEAgLTI3LDcgKzI2LDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0NvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5FeHBhbmRIZWxwZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKQEAgLTEyOCw3ICsxMjYsNyBAQAogCiAgICAgICAgIGludCBtaW5IZWlnaHQgPSBnZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5ub3RpZmljYXRpb25fcm93X21pbl9oZWlnaHQpOwogICAgICAgICBpbnQgbWF4SGVpZ2h0ID0gZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ubm90aWZpY2F0aW9uX3Jvd19tYXhfaGVpZ2h0KTsKLSAgICAgICAgbUV4cGFuZEhlbHBlciA9IG5ldyBFeHBhbmRIZWxwZXIobUNvbnRleHQsIHRoaXMsIG1pbkhlaWdodCwgbWF4SGVpZ2h0KTsKKyAgICAgICAgbUV4cGFuZEhlbHBlciA9IG5ldyBFeHBhbmRIZWxwZXIoZ2V0Q29udGV4dCgpLCB0aGlzLCBtaW5IZWlnaHQsIG1heEhlaWdodCk7CiAKICAgICAgICAgbUNvbnRlbnRIb2xkZXIgPSAoVmlld0dyb3VwKSBmaW5kVmlld0J5SWQoUi5pZC5jb250ZW50X2hvbGRlcik7CiAgICAgICAgIG1Db250ZW50U2xpZGVyID0gKFZpZXdHcm91cCkgZmluZFZpZXdCeUlkKFIuaWQuY29udGVudF9zbGlkZXIpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvTG9jYXRpb25Db250cm9sbGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Mb2NhdGlvbkNvbnRyb2xsZXIuamF2YQppbmRleCAzMTJiYmEzLi5mNWVlOTViIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Mb2NhdGlvbkNvbnRyb2xsZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Mb2NhdGlvbkNvbnRyb2xsZXIuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLkxvY2F0aW9uTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvTm90aWZpY2F0aW9uUm93TGF5b3V0LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Ob3RpZmljYXRpb25Sb3dMYXlvdXQuamF2YQppbmRleCAyNTk0MjJkLi4yNjZjZWNmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Ob3RpZmljYXRpb25Sb3dMYXlvdXQuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Ob3RpZmljYXRpb25Sb3dMYXlvdXQuamF2YQpAQCAtMzMsNyArMzMsNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuU3dpcGVIZWxwZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLkV4cGFuZGFibGVOb3RpZmljYXRpb25Sb3c7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLk5vdGlmaWNhdGlvbkRhdGE7CiAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIApAQCAtOTQsNyArOTMsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgZmxvYXQgZGVuc2l0eVNjYWxlID0gZ2V0UmVzb3VyY2VzKCkuZ2V0RGlzcGxheU1ldHJpY3MoKS5kZW5zaXR5OwotICAgICAgICBmbG9hdCBwYWdpbmdUb3VjaFNsb3AgPSBWaWV3Q29uZmlndXJhdGlvbi5nZXQobUNvbnRleHQpLmdldFNjYWxlZFBhZ2luZ1RvdWNoU2xvcCgpOworICAgICAgICBmbG9hdCBwYWdpbmdUb3VjaFNsb3AgPSBWaWV3Q29uZmlndXJhdGlvbi5nZXQoZ2V0Q29udGV4dCgpKS5nZXRTY2FsZWRQYWdpbmdUb3VjaFNsb3AoKTsKICAgICAgICAgbVN3aXBlSGVscGVyID0gbmV3IFN3aXBlSGVscGVyKFN3aXBlSGVscGVyLlgsIHRoaXMsIGRlbnNpdHlTY2FsZSwgcGFnaW5nVG91Y2hTbG9wKTsKICAgICB9CiAKQEAgLTIxOSw3ICsyMTgsNyBAQAogICAgICAgICBzdXBlci5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKG5ld0NvbmZpZyk7CiAgICAgICAgIGZsb2F0IGRlbnNpdHlTY2FsZSA9IGdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eTsKICAgICAgICAgbVN3aXBlSGVscGVyLnNldERlbnNpdHlTY2FsZShkZW5zaXR5U2NhbGUpOwotICAgICAgICBmbG9hdCBwYWdpbmdUb3VjaFNsb3AgPSBWaWV3Q29uZmlndXJhdGlvbi5nZXQobUNvbnRleHQpLmdldFNjYWxlZFBhZ2luZ1RvdWNoU2xvcCgpOworICAgICAgICBmbG9hdCBwYWdpbmdUb3VjaFNsb3AgPSBWaWV3Q29uZmlndXJhdGlvbi5nZXQoZ2V0Q29udGV4dCgpKS5nZXRTY2FsZWRQYWdpbmdUb3VjaFNsb3AoKTsKICAgICAgICAgbVN3aXBlSGVscGVyLnNldFBhZ2luZ1RvdWNoU2xvcChwYWdpbmdUb3VjaFNsb3ApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvUm90YXRpb25Mb2NrQ29udHJvbGxlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvUm90YXRpb25Mb2NrQ29udHJvbGxlci5qYXZhCmluZGV4IDZmNjFlYzguLjk4ZDIwNWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L1JvdGF0aW9uTG9ja0NvbnRyb2xsZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Sb3RhdGlvbkxvY2tDb250cm9sbGVyLmphdmEKQEAgLTE3LDYgKzE3LDcgQEAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeTsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3LlJvdGF0aW9uUG9saWN5OwpAQCAtNDIsNDIgKzQzLDMyIEBACiAKICAgICBwdWJsaWMgUm90YXRpb25Mb2NrQ29udHJvbGxlcihDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBub3RpZnlDaGFuZ2VkKCk7Ci0gICAgICAgIGlmIChSb3RhdGlvblBvbGljeS5pc1JvdGF0aW9uTG9ja1RvZ2dsZVN1cHBvcnRlZChtQ29udGV4dCkpIHsKLSAgICAgICAgICAgIFJvdGF0aW9uUG9saWN5LnJlZ2lzdGVyUm90YXRpb25Qb2xpY3lMaXN0ZW5lcihtQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgbVJvdGF0aW9uUG9saWN5TGlzdGVuZXIsIFVzZXJIYW5kbGUuVVNFUl9BTEwpOwotICAgICAgICB9CisgICAgICAgIFJvdGF0aW9uUG9saWN5LnJlZ2lzdGVyUm90YXRpb25Qb2xpY3lMaXN0ZW5lcihtQ29udGV4dCwKKyAgICAgICAgICAgICAgICBtUm90YXRpb25Qb2xpY3lMaXN0ZW5lciwgVXNlckhhbmRsZS5VU0VSX0FMTCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYWRkUm90YXRpb25Mb2NrQ29udHJvbGxlckNhbGxiYWNrKFJvdGF0aW9uTG9ja0NvbnRyb2xsZXJDYWxsYmFjayBjYWxsYmFjaykgewogICAgICAgICBtQ2FsbGJhY2tzLmFkZChjYWxsYmFjayk7CiAgICAgfQogCisgICAgcHVibGljIGludCBnZXRSb3RhdGlvbkxvY2tPcmllbnRhdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIFJvdGF0aW9uUG9saWN5LmdldFJvdGF0aW9uTG9ja09yaWVudGF0aW9uKG1Db250ZXh0KTsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiBpc1JvdGF0aW9uTG9ja2VkKCkgewotICAgICAgICBpZiAoUm90YXRpb25Qb2xpY3kuaXNSb3RhdGlvbkxvY2tUb2dnbGVTdXBwb3J0ZWQobUNvbnRleHQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUm90YXRpb25Qb2xpY3kuaXNSb3RhdGlvbkxvY2tlZChtQ29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gUm90YXRpb25Qb2xpY3kuaXNSb3RhdGlvbkxvY2tlZChtQ29udGV4dCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0Um90YXRpb25Mb2NrZWQoYm9vbGVhbiBsb2NrZWQpIHsKLSAgICAgICAgaWYgKFJvdGF0aW9uUG9saWN5LmlzUm90YXRpb25Mb2NrVG9nZ2xlU3VwcG9ydGVkKG1Db250ZXh0KSkgewotICAgICAgICAgICAgUm90YXRpb25Qb2xpY3kuc2V0Um90YXRpb25Mb2NrKG1Db250ZXh0LCBsb2NrZWQpOwotICAgICAgICB9CisgICAgICAgIFJvdGF0aW9uUG9saWN5LnNldFJvdGF0aW9uTG9jayhtQ29udGV4dCwgbG9ja2VkKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1JvdGF0aW9uTG9ja0FmZm9yZGFuY2VWaXNpYmxlKCkgewotICAgICAgICBpZiAoUm90YXRpb25Qb2xpY3kuaXNSb3RhdGlvbkxvY2tUb2dnbGVTdXBwb3J0ZWQobUNvbnRleHQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUm90YXRpb25Qb2xpY3kuaXNSb3RhdGlvbkxvY2tUb2dnbGVWaXNpYmxlKG1Db250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBSb3RhdGlvblBvbGljeS5pc1JvdGF0aW9uTG9ja1RvZ2dsZVZpc2libGUobUNvbnRleHQpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICAgIGlmIChSb3RhdGlvblBvbGljeS5pc1JvdGF0aW9uTG9ja1RvZ2dsZVN1cHBvcnRlZChtQ29udGV4dCkpIHsKLSAgICAgICAgICAgIFJvdGF0aW9uUG9saWN5LnVucmVnaXN0ZXJSb3RhdGlvblBvbGljeUxpc3RlbmVyKG1Db250ZXh0LAotICAgICAgICAgICAgICAgICAgICBtUm90YXRpb25Qb2xpY3lMaXN0ZW5lcik7Ci0gICAgICAgIH0KKyAgICAgICAgUm90YXRpb25Qb2xpY3kudW5yZWdpc3RlclJvdGF0aW9uUG9saWN5TGlzdGVuZXIobUNvbnRleHQsIG1Sb3RhdGlvblBvbGljeUxpc3RlbmVyKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5Q2hhbmdlZCgpIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAppbmRleCA3ZmM5ODk3Li5hMzA1ZTMwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCkBAIC0xNyw4ICsxNyw4IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOGLqCBWUE4g4Ymw4Yur4Yur4YulIOGIiOGImOGNjeGMoOGIrSDhiJ7hiq3hiK/hiI3hjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+IuGJoOGIm+GIteGKqOGJsOGIjeGNoyDhibXhjI3hiaDhiKvhi40g4YiB4YiJ4YqV4YidIOGLqOGKoOGLjeGJs+GIqCDhiJjhiKjhiaUg4Ym14Yir4Y2K4YqtIOGKpeGKleGLsuGLq+GMqOGKk+GMjeGNjSDhjYjhiYPhi7Ug4Yql4Yuo4Yiw4YyhIOGKkOGLjeGNoiI8Yj4iICDhibXhjI3hiaDhiKvhi43hipUg4Yqr4YiL4YiY4YqR4Ym1IOGKoOGLreGJgOGJoOGIieGNoiI8L2I+IiAg4Yqg4YiI4Ymg4YiI4Yua4Yur4Y2jIOGLjeGIguGJpeGLjiDhiaDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGItuGNjeGJteGLjOGIrSDhiLXhjIvhibUg4YuN4Yi14YylIOGLreGMiOGKm+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjI4ODkyMjY0MDg3NjU4MTAxNzMiPiLhi63hiIXhipUg4Ym14YyN4Ymg4YirIOGKoOGIneGKk+GIiOGIgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4i4Ymg4Yib4Yi14Yqo4Ymw4YiN4Y2jIOGImOGJsOGMjeGJoOGIquGLq+GLjSDhiIHhiInhipXhiJ0g4Yuo4Yqg4YuN4Ymz4YioIOGImOGIqOGJpSDhibXhiKvhjYrhiq0g4Yql4YqV4Yuy4Yur4Yyo4YqT4YyN4Y2NIOGNiOGJg+GLtSDhiqXhi6jhiLDhjKEg4YqQ4YuN4Y2iIjxiPiIgIOGImOGJsOGMjeGJoOGIquGLq+GLjeGKlSDhiqvhiIvhiJjhipHhibUg4Yqg4Yut4YmA4Ymg4YiJ4Y2iIjwvYj4iICDhiqDhiIjhiaDhiIjhi5rhi6vhjaMg4YuN4YiC4Yml4YuOIOGJoOGJsOGKleGKruGIjSDhiqDhi5jhiI0g4Yi24Y2N4Ym14YuM4YitIOGIteGMi+GJtSDhi43hiLXhjKUg4Yut4YyI4Yqb4YiN4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IuGLreGIheGKlSDhiJjhibDhjI3hiaDhiKrhi6sg4Yqg4Yid4YqT4YiI4YiBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X3RpdGxlIiBtc2dpZD0iMTkyOTM2MjUwMDY2NTgwOTY0Ij4iVlBOIOGJsOGLq+GLreGLn+GIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLhiqDhi4vhiYXhiK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i4Yqg4YiI4Yur4YutIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCmluZGV4IDIzODBmYTIuLmJmODNhNDEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKQEAgLTE2LDEwICsxNiwxMCBAQAogCiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4i2YrYrdin2YjZhCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2KXZhti02KfYoSDYp9iq2LXYp9mEINi02KjZg9ipINi42KfZh9ix2YrYqSDYrtin2LXYqSAoVlBOKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4i4oCP2YrYrdin2YjZhCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2KXZhti02KfYoSDYp9iq2LXYp9mEINi02KjZg9ipINi42KfZh9ix2YrYqSDYrtin2LXYqSAoVlBOKS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+Itiq2LnYryDYp9mE2YXYqtin2KjYudipINio2YXYq9in2KjYqSDYpdiw2YYg2YTZhNiq2LfYqNmK2YIg2KjYp9i52KrYsdin2LYg2KzZhdmK2Lkg2K3YsdmD2KfYqiDZhdix2YjYsSDYp9mE2KjZitin2YbYp9iqINi52KjYsSDYp9mE2LTYqNmD2KkuICI8Yj4iXCLZhNinXCIg2KrZiNin2YHZgiDYpdmE2Kcg2KXYsNinINmD2YbYqiDYqtir2YIg2YHZiiDYp9mE2KrYt9io2YrZgi4iPC9iPiIg2YjYpdmE2Kcg2YHZgtivINiq2KrYudix2LYg2KjZitin2YbYp9iq2YMg2YTYrti32YjYsdipINin2YTYp9iu2KrYsdin2YIg2KjZiNin2LPYt9ipINio2LHYp9mF2Kwg2LbYp9ix2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+Itij2KvZgiDZgdmKINmH2LDYpyDYp9mE2KrYt9io2YrZgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4g2YXYqti12YTYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IuKAj1ZQTiDZhdiq2LXZhNipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+Itiq2YfZitim2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i2YLYt9i5INin2YTYp9iq2LXYp9mEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiLYp9mE2KzZhNiz2KkiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGViMDZmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiJWUE4gYmHEn2xhbnTEsXPEsSB5YXJhdG1hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBjyZloZGzJmXJpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4iQnVudSBoyZl5YXRhIGtlw6dpcm3JmWtsyZksIHNpeiB0yZl0YmlxyZkgYsO8dMO8biDFn8mZYsmZa8mZIGjJmXLJmWvJmXRpbsmZIHFhcsSxxZ9tYcSfYSBpY2F6yZkgdmVyaXJzaW5pei4gIjxiPiIgVMmZdGJpccmZIGfDvHbJmW5taXJzaXpzyZkgccmZYnVsIGV0bcmZeWluLiAiPC9iPiIgxo9rcyBoYWxkYSwgZGF0YW7EsXrEsW4gdMmZaGzDvGvJmWxpIHByb3FyYW1sYXIgdMmZcsmZZmluZMmZbiDJmWzJmSBrZcOnaXJpbG3JmSByaXNraW5pIGFsxLFyc8SxbsSxei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4iQnUgdMmZdGJpccmZIGfDvHbJmW5pcsmZbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4gcW/Fn3VsdWR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiJLb25maXF1cmFzaXlhIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4ixo9sYXHJmW5pIGvJmXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+IlNlc3NpeWE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVyYXRpb24iIG1zZ2lkPSIzNTg0NzgyNDU5OTI4NzE5NDM1Ij4iTcO8ZGTJmXQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiJHw7ZuZMmZcmlsyZluOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfcmVjZWl2ZWQiIG1zZ2lkPSI0MDYyNzc2OTI5Mzc2MDY3ODIwIj4iUcmZYnVsIGVkaWzJmW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiBiYXl0IC8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRzPC94bGlmZjpnPiBwYWtldCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZWIwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4iVlBOIGJhxJ9sYW50xLFzxLEgeWFyYXRtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gY8mZaGRsyZlyaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+IkJ1bnUgaMmZeWF0YSBrZcOnaXJtyZlrbMmZLCBzaXogdMmZdGJpccmZIGLDvHTDvG4gxZ/JmWLJmWvJmSBoyZlyyZlryZl0aW7JmSBxYXLEscWfbWHEn2EgaWNhesmZIHZlcmlyc2luaXouICI8Yj4iIFTJmXRiaXHJmSBnw7x2yZlubWlyc2l6c8mZIHHJmWJ1bCBldG3JmXlpbi4gIjwvYj4iIMaPa3MgaGFsZGEsIGRhdGFuxLF6xLFuIHTJmWhsw7xryZlsaSBwcm9xcmFtbGFyIHTJmXLJmWZpbmTJmW4gyZlsyZkga2XDp2lyaWxtyZkgcmlza2luaSBhbMSxcnPEsW7EsXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IkJ1IHTJmXRiaXHJmSBnw7x2yZluaXLJmW0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X3RpdGxlIiBtc2dpZD0iMTkyOTM2MjUwMDY2NTgwOTY0Ij4iVlBOIHFvxZ91bHVkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmUiIG1zZ2lkPSI0OTA1NTE4Mzc1NTc0NzkxMzc1Ij4iS29uZmlxdXJhc2l5YSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+IsaPbGFxyZluaSBryZlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiJTZXNzaXlhOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+Ik3DvGRkyZl0OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdHJhbnNtaXR0ZWQiIG1zZ2lkPSI3OTg4MTY3NjcyOTgyMTk5MDYxIj4iR8O2bmTJmXJpbMmZbjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+IlHJmWJ1bCBlZGlsyZluOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkczwveGxpZmY6Zz4gYmF5dCAvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkczwveGxpZmY6Zz4gcGFrZXQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY0M2FlZi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g0YHQv9GA0LDQsdGD0LUg0YHRgtCy0LDRgNGL0YbRjCDQt9C70YPRh9GN0L3QvdC1IFZQTi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+ItCf0YDQsNGG0Y/Qs9Cy0LDRjtGH0YssINCy0Ysg0LTQsNC30LLQsNC70Y/QtdGG0LUg0L/RgNCw0LPRgNCw0LzQtSDQv9C10YDQsNGF0LDQv9GW0YbRjCDRntCy0LXRgdGMINGB0LXRgtC60LDQstGLINGC0YDQsNGE0ZbQui4gIjxiPiIg0J3QlSDQstGL0LrQsNGA0YvRgdGC0L7QstGL0LLQsNC50YbQtSwg0L/QsNC60YPQu9GMINCy0Ysg0L3QtSDQtNCw0LLRj9GA0LDQtdGG0LUg0L/RgNCw0LPRgNCw0LzQtS4gIjwvYj4iINCjINCw0LTQstCw0YDQvtGC0L3Ri9C8INCy0YvQv9Cw0LTQutGDINCy0Ysg0YDRi9C30YvQutGD0LXRhtC1INC/0LDRiNC60L7QtNC30ZbRhtGMINCy0LDRiNGLINC00LDQtNC30LXQvdGL0Y8g0YjQutC+0LTQvdCw0YHQvdGL0LzRliDQv9GA0LDQs9GA0LDQvNCw0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i0K8g0LTQsNCy0Y/RgNCw0Y4g0LPRjdGC0LDQvNGDINC00LDQtNCw0YLQutGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDQv9Cw0LTQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLQndCw0LvQsNC00LfRltGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i0JDQtNC60LvRjtGH0YvRhtGG0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+ItCh0LXRgdGB0ZbRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+ItCf0YDQsNGG0Y/Qs9C70LDRgdGG0Yw6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiLQkNC00L/RgNCw0Z7Qu9C10L3QsDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+ItCQ0YLRgNGL0LzQsNC90LA6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiDQsdCw0LnRgiAvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkczwveGxpZmY6Zz4g0L/QsNC60LXRgtGLIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmM0NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gYXR0ZW1wdHMgdG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiJCeSBwcm9jZWVkaW5nLCB5b3UgYXJlIGdpdmluZyB0aGUgYXBwbGljYXRpb24gcGVybWlzc2lvbiB0byBpbnRlcmNlcHQgYWxsIG5ldHdvcmsgdHJhZmZpYy4gIjxiPiJEbyBOT1QgYWNjZXB0IHVubGVzcyB5b3UgdHJ1c3QgdGhlIGFwcGxpY2F0aW9uLiI8L2I+IiBPdGhlcndpc2UsIHlvdSBydW4gdGhlIHJpc2sgb2YgaGF2aW5nIHlvdXIgZGF0YSBjb21wcm9taXNlZCBieSBtYWxpY2lvdXMgc29mdHdhcmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IkkgdHJ1c3QgdGhpcyBhcHBsaWNhdGlvbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4gaXMgY29ubmVjdGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IkNvbmZpZ3VyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc2Nvbm5lY3QiIG1zZ2lkPSI5NzE0MTIzMzgzMDQyMDAwNTYiPiJEaXNjb25uZWN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiJTZXNzaW9uOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+IkR1cmF0aW9uOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdHJhbnNtaXR0ZWQiIG1zZ2lkPSI3OTg4MTY3NjcyOTgyMTk5MDYxIj4iU2VudDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+IlJlY2VpdmVkOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkczwveGxpZmY6Zz4gYnl0ZXMgLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+IHBhY2tldHMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCmluZGV4IGVjMTYzYWYuLjdjMGFhZmUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTE2LDEwICsxNiwxMCBAQAogCiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INiq2YTYp9i0INmF24zigIzaqdmG2K8g24zaqSDYp9iq2LXYp9mEIFZQTiDYp9uM2KzYp9ivINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4i4oCPPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INiq2YTYp9i0INmF24zigIzaqdmG2K8g24zaqSDYp9iq2LXYp9mEIFZQTiDYp9uM2KzYp9ivINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+Itio2Kcg2KfYr9in2YXZhyDYr9in2K/ZhtiMINio2Ycg2KjYsdmG2KfZhdmH2ZQg2qnYp9ix2KjYsdiv24wg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9uM2K8g2KrZhdin2YUg2KrYsdin2YHbjNqpINi02KjaqdmHINix2Kcg2LHZh9qv24zYsduMINqp2YbYry4gIjxiPiLYqtinINio2Ycg2KjYsdmG2KfZhdmHINin2LnYqtmF2KfYryDZhtqp2LHYr9uM2K8g2KLZhiDYsdinINmC2KjZiNmEINmG2qnZhtuM2K8uIjwvYj4iINiv2LEg2LrbjNixINin24zZhiDYtdmI2LHYqtiMINin24zZhiDYsduM2LPaqSDYsdinINmC2KjZiNmEINmF24zigIzaqdmG24zYryDaqdmHINiv2KfYr9mH4oCM2YfYp9uMINi02YXYpyDYqtmI2LPYtyDbjNqpINmG2LHZheKAjNin2YHYstin2LEg2YXYrtix2Kgg2KjZhyDYrti32LEg2KjbjNmB2KrYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i2YXZhiDYqNmHINin24zZhiDYqNix2YbYp9mF2Ycg2KfYudiq2YXYp9ivINiv2KfYsdmFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDZhdiq2LXZhCDYp9iz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiLigI9WUE4g2YXYqti12YQg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+Itm+24zaqdix2KjZhtiv24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i2YLYt9i5INin2KrYtdin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+Itis2YTYs9mHOiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjhmODMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiB0ZW50ZSBkZSBjcsOpZXIgdW5lIGNvbm5leGlvbiBWUE4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiJFbiBjb250aW51YW50LCB2b3VzIGF1dG9yaXNleiBsXCdhcHBsaWNhdGlvbiDDoCBpbnRlcmNlcHRlciBsXCdlbnNlbWJsZSBkdSB0cmFmaWMgcsOpc2VhdS4gIjxiPiJOXCdhY2NlcHRleiBQQVMsIHNhdWYgc2kgdm91cyBhdmV6IGNvbmZpYW5jZSBlbiBsXCdhcHBsaWNhdGlvbi4iPC9iPiJTaW5vbiwgdm9zIGRvbm7DqWVzIHJpc3F1ZW50IGRcJ8OqdHJlIHBpcmF0w6llcyBwYXIgdW4gbG9naWNpZWwgbWFsdmVpbGxhbnQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IkpcJ2FpIGNvbmZpYW5jZSBlbiBjZXR0ZSBhcHBsaWNhdGlvbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4gY29ubmVjdMOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IkNvbmZpZ3VyZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4iRMOpY29ubmVjdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiJTZXNzaW9uwqA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVyYXRpb24iIG1zZ2lkPSIzNTg0NzgyNDU5OTI4NzE5NDM1Ij4iRHVyw6llIDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3RyYW5zbWl0dGVkIiBtc2dpZD0iNzk4ODE2NzY3Mjk4MjE5OTA2MSI+IkRhdGUgZFwnZW52b2nCoDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+IlJlw6d1IGxlwqA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPsKgb2N0ZXRzIC8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRzPC94bGlmZjpnPsKgcGFxdWV0cyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmluZGV4IGUyY2I1MWEuLmI1NzBhNmQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKQEAgLTE3LDggKzE3LDggQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4KSP4KSVIFZQTiDgpJXgpKjgpYfgpJXgpY3igI3gpLbgpKgg4KSs4KSo4KS+4KSo4KWHIOCkleCkviDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+IuCknOCkvuCksOClgCDgpLDgpJbgpJXgpLAsIOCkhuCkqiDgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KWLIOCkuOCkreClgCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSf4KWN4KSw4KWI4KSr4KS84KS/4KSVIOCkheCkteCksOCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpKTgpYcg4KS54KWI4KSCLiAiPGI+IuCknOCkrCDgpKTgpJUg4KSG4KSq4KSV4KWLIOCkj+CkquCljeCksuCkv+CkleClh+CktuCkqCDgpKrgpLAg4KS14KS/4KS24KWN4KS14KS+4KS4IOCkqCDgpLngpYsg4KS44KWN4oCN4KS14KWA4KSV4KS+4KSwIOCkqCDgpJXgpLDgpYfgpIIuIjwvYj4iIOCkheCkqOCljeKAjeCkr+CkpeCkviwg4KSG4KSq4KSV4KWLIOCkheCkquCkqOClhyDgpKHgpYfgpJ/gpL4g4KSV4KWHIOCkuOCkvuCkpSDgpJXgpL/gpLjgpYAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkuOClieCkq+CkvOCljeCkn+CkteClh+Ckr+CksCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSb4KWH4KSh4KS84KSb4KS+4KSh4KS8IOCkleCkv+CkjyDgpJzgpL7gpKjgpYcg4KSV4KS+IOCknOCli+CkluCkv+CkriDgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i4KSu4KWB4KSd4KWHIOCkh+CkuCDgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSq4KSwIOCkteCkv+CktuCljeCkteCkvuCkuCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiLgpJzgpL7gpLDgpYAg4KSw4KSW4KSV4KSwLCDgpIbgpKog4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KSt4KWAIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJ/gpY3gpLDgpYjgpKvgpLzgpL/gpJUg4KSF4KS14KSw4KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkpOClhyDgpLngpYjgpIIuICI8Yj4i4KSc4KSsIOCkpOCklSDgpIbgpKrgpJXgpYsg4KSQ4KSq4KWN4KS4ICDgpKrgpLAg4KS14KS/4KS24KWN4KS14KS+4KS4IOCkqCDgpLngpYsg4KS44KWN4oCN4KS14KWA4KSV4KS+4KSwIOCkqCDgpJXgpLDgpYfgpIIuIjwvYj4iIOCkheCkqOCljeKAjeCkr+CkpeCkviwg4KSG4KSq4KSV4KWLIOCkheCkquCkqOClhyDgpKHgpYfgpJ/gpL4g4KSV4KWHIOCkuOCkvuCkpSDgpJXgpL/gpLjgpYAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkuOClieCkq+CkvOCljeCkn+CkteClh+Ckr+CksCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSb4KWH4KSh4KS84KSb4KS+4KSh4KS8IOCkleCkv+CkjyDgpJzgpL7gpKjgpYcg4KSV4KS+IOCknOCli+CkluCkv+CkriDgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i4KSu4KWB4KSd4KWHIOCkh+CkuCDgpJDgpKrgpY3gpLggIOCkquCksCDgpLXgpL/gpLbgpY3gpLXgpL7gpLgg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KS54KWIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IuCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i4KSh4KS/4KS44KWN4oCN4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZGI1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi3VqCDWg9W41oDVsdW41oLVtCDVpyDVvdW/1aXVstWu1aXVrCBWUE4g1a/VodW6OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4i1YfVodaA1bjWgtW21aHVr9Wl1azVuNW+YCDVpNW41oLWhCDVsNWh1b7VpdWs1b7VodWu1avVtiDVqdW41oLVtdWs1aHVv9aA1bjWgtW0INWl1oQg1a/VodW21aPVttWl1oHVttWl1awg1aHVtNWi1bjVstW7INaB1aHVttaB1aHVtdWr1bYg1bfVodaA1arVqDogIjxiPiLVhNWrINWo1bbVpNW41oLVttWl1oQsINWl1anVpSDVudWl1oQg1b7VvdW/1aHVsNW41oLVtCDVsNWh1b7VpdWs1b7VodWu1avVtjoiPC9iPiIg1LHVtdWs1aHVutWl1b0g1bzVq9W91a8g1a/VoSDVsdWl1oAg1b/VvtW11aHVrNW21aXWgNWoINW+1b/VodW21aPVpdWs1bjWgiDVvtW21aHVvdWh1oDVodaAINWw1aHVvtWl1azVvtWh1a7VttWl1oDVqyDVr9W41bLVtNWr1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+ItS11b0g1b7VvdW/1aHVsNW41oLVtCDVpdW0INWh1bXVvSDVrtaA1aHVo9aA1avVtjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4t1agg1a/VodW61aHVr9aB1b7VodWuINWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+ItS/1aHWgNWj1aHVvtW41oDVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+ItSx1bbVu9Wh1b/VpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiLUsdW31a3VodW/1aHVt9aA1bvVodW2YCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+ItWP1ofVuNWy1bjWgtWp1bXVuNaC1bbVqNWdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiLViNaC1bLVodaA1a/VvtWl1awg1afVnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfcmVjZWl2ZWQiIG1zZ2lkPSI0MDYyNzc2OTI5Mzc2MDY3ODIwIj4i1Y3Vv9Wh1oHVvtWl1awg1afVnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkczwveGxpZmY6Zz4g1aLVodW11akgLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+INaD1aHVqdWl1akiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAppbmRleCBiYjg0NWVlLi4zMzVmNWU0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCkBAIC0xNiwxMCArMTYsMTAgQEAKIAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDXnteg16HXlCDXnNeZ16bXldeoINeX15nXkdeV16ggVlBOLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4i15DXnSDXqtee16nXmdeaLCDXkNeq15Qg157Xoteg15nXpyDXnNeZ15nXqdeV150g15TXqNep15DXlCDXnNei15vXkSDXkNeqINeb15wg15TXqteg15XXoteUINeR16jXqdeqLiAiPGI+IiDXkNecINeq16fXkdecINeQ15zXkCDXkNedINeb158g15DXqteUINeh15XXnteaINei15wg15TXmdeZ16nXldedLiAiPC9iPiIg15DXl9eo16osINeQ16rXlCDXl9eV16nXoyDXkNeqINeU16DXqteV16DXmdedINep15zXmiDXnNeh15vXoNeUINep15wg16TXkteZ16LXlCDXotecLdeZ15PXmSDXqteV15vXoNeUINeW15PXldeg15nXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i15DXoNeZINeh15XXnteaINei15wg15nXmdep15XXnSDXlteULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDXnteX15XXkdeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+IuKAjzx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDXnteg16HXlCDXnNeZ16bXldeoINeX15nXkdeV16ggVlBOLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4i15DXnSDXqtee16nXmdeaLCDXkNeq15Qg157Xoteg15nXpyDXnNeQ16TXnNeZ16fXpteZ15Qg15TXqNep15DXlCDXnNei15vXkSDXkNeqINeb15wg15TXqteg15XXoteUINeR16jXqdeqLiAiPGI+IiDXkNecINeq16fXkdecINeQ15zXkCDXkNedINeb158g15DXqteUINeh15XXnteaINei15wg15TXkNek15zXmden16bXmdeULiAiPC9iPiIg15DXl9eo16osINeQ16rXlCDXl9eV16nXoyDXkNeqINeU16DXqteV16DXmdedINep15zXmiDXnNeh15vXoNeUINep15wg16TXkteZ16LXlCDXotecLdeZ15PXmSDXqteV15vXoNeUINeW15PXldeg15nXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i15DXoNeZINeh15XXnteaINei15wg15DXpNec15nXp9em15nXlCDXlteVLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IuKAj1ZQTiDXnteX15XXkdeoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IteU15LXk9eoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+Iteg16rXpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlc3Npb24iIG1zZ2lkPSI2NDcwNjI4NTQ5NDczNjQxMDMwIj4i15TXpNei15zXlCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MGQzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDhg6rhg5Phg5jhg5rhg53hg5Hhg6EgVlBOIOGDmeGDkOGDleGDqOGDmOGDoOGDmOGDoSDhg6jhg5Thg6Xhg5vhg5zhg5Dhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiLhg5Lhg5Dhg5Lhg6Dhg6vhg5Thg5rhg5Thg5Hhg5jhg6Eg4YOo4YOU4YOb4YOX4YOu4YOV4YOU4YOV4YOQ4YOo4YOYLCDhg5Dhg57hg5rhg5jhg5nhg5Dhg6rhg5jhg5Dhg6Eg4YOU4YOl4YOc4YOU4YOR4YOQIOGDpeGDoeGDlOGDmuGDqOGDmCDhg5Lhg5Dhg5Phg5Dhg6rhg5Thg5vhg6Phg5rhg5gg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOU4YOR4YOY4YOhIOGDm+GDneGDnuGDneGDleGDlOGDkeGDmOGDoSDhg6Hhg5Dhg6jhg6Phg5Dhg5rhg5Thg5Hhg5AuICI8Yj4i4YOQ4YOgIOGDkuGDkOGDnOGDkOGDkuGDoOGDq+GDneGDlywg4YOX4YOjIOGDkOGDoCDhg5Thg5zhg5Phg53hg5Hhg5jhg5cg4YOQ4YOe4YOa4YOY4YOZ4YOQ4YOq4YOY4YOQ4YOhLiI8L2I+IiDhg6zhg5jhg5zhg5Dhg5Dhg6bhg5vhg5Phg5Thg5Ig4YOo4YOU4YOb4YOX4YOV4YOU4YOV4YOQ4YOo4YOYIOGDqOGDlOGDoeGDkOGDq+GDmuGDneGDkCDhg5vhg5Dhg5Xhg5zhg5Qg4YOe4YOg4YOd4YOS4YOg4YOQ4YOb4YOQ4YOhIOGDl+GDpeGDleGDlOGDnCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg5fhg5Dhg5wg4YOs4YOV4YOT4YOd4YOb4YOY4YOhIOGDoeGDkOGDqOGDo+GDkOGDmuGDlOGDkeGDkCDhg5vhg5jhg5Thg6rhg5Thg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IuGDleGDlOGDnOGDk+GDneGDkeGDmCDhg5Dhg5sg4YOQ4YOe4YOa4YOY4YOZ4YOQ4YOq4YOY4YOQ4YOhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg6Phg5rhg5jhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmUiIG1zZ2lkPSI0OTA1NTE4Mzc1NTc0NzkxMzc1Ij4i4YOZ4YOd4YOc4YOk4YOY4YOS4YOj4YOg4YOQ4YOq4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+IuGDmeGDkOGDleGDqOGDmOGDoOGDmOGDoSDhg5Lhg5Dhg6zhg6fhg5Xhg5Thg6Lhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+IuGDoeGDlOGDoeGDmOGDkDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkdXJhdGlvbiIgbXNnaWQ9IjM1ODQ3ODI0NTk5Mjg3MTk0MzUiPiLhg67hg5Dhg5zhg5Lhg6Dhg6vhg5rhg5jhg5Xhg53hg5Hhg5A6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiLhg5Lhg5Dhg5Lhg5bhg5Dhg5Xhg5zhg5jhg5rhg5g6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV9yZWNlaXZlZCIgbXNnaWQ9IjQwNjI3NzY5MjkzNzYwNjc4MjAiPiLhg5vhg5jhg6bhg5Thg5Hhg6Phg5rhg5g6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiDhg5Hhg5Dhg5jhg6Lhg5ggLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+IOGDnuGDkOGDmeGDlOGDouGDmCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3OWUyNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOGeluGfkuGemeGetuGemeGetuGemOKAi+GelOGehOGfkuGegOGevuGej+KAi+GegOGetuGemuKAi+Gej+Gel+GfkuGeh+GetuGelOGfiyBWUE4g4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiLhnorhn4ThnpnigIvhnpThnpPhn5Lhno8g4Z6i4Z+S4Z6T4Z6A4oCL4Z6A4Z+G4Z6W4Z674Z6E4oCL4Z6V4Z+S4Z6K4Z6b4Z+L4oCL4Z6f4Z634Z6R4Z+S4Z6S4Z634oCL4Z6y4Z+S4Z6Z4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6R4Z6U4Z+L4Z6f4Z+S4Z6A4Z624Z6P4Z+L4oCL4Z6F4Z6a4Z624Z6F4Z6a4Z6O4Z+N4oCL4Z6U4Z6O4Z+S4Z6K4Z624Z6J4Z+UICI8Yj4i4Z6A4Z674Z+G4oCL4Z6R4Z6R4Z694Z6b4oCLIOGem+Geu+Gfh+KAi+Gej+GfkuGemuGetuKAi+Gej+GfguKAi+GeouGfkuGek+GegOKAi+GekeGeu+GegOKAi+GeheGet+Gej+GfkuGej+KAi+GegOGemOGfkuGemOGenOGet+GekuGeuOGflCI8L2I+IiDhnpThnr7igIvhnpjhnrfhnpPigIvhnorhnrzhnoXhn5LhnpPhn4Hhn4figIvhnpHhn4Eg4Z6i4Z+S4Z6T4Z6A4oCL4Z6K4Z+G4Z6O4Z6+4Z6a4Z6A4Z624Z6a4oCL4Z6U4Z+S4Z6a4Z6I4Z6Y4oCL4Z6T4Z654Z6E4oCL4Z6C4Z+S4Z6a4Z+E4Z+H4Z6Q4Z+S4Z6T4Z624Z6A4Z+LIOGeiuGfhOGemeKAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+GelOGetuGek+KAi+Gen+GemOGfkuGemuGelOGen+GemOGfkuGemuGeveGem+KAi+GeiuGfhOGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GeluGfkuGemeGetuGelOGetuGekeGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjI4ODkyMjY0MDg3NjU4MTAxNzMiPiLhnoHhn5Lhnonhnrvhn4bigIvhnpHhnrvhnoDhnoXhnrfhno/hn5Lhno/igIvigIvigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpPhn4Hhn4figIvhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiLhnpThnrbigIvhnpPigIvhnpfhn5LhnofhnrbhnpThn4sgVlBOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IuGegOGfhuGejuGej+Gfi+KAi+GemuGeheGek+GetuGen+GemOGfkuGeluGfkOGek+GfkuGekiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc2Nvbm5lY3QiIG1zZ2lkPSI5NzE0MTIzMzgzMDQyMDAwNTYiPiLhnpXhn5LhnorhnrbhnoXhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+IuGen+GemOGfkOGemeGfliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+IuGekOGet+GemuGenOGfgeGem+GetuGfliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdHJhbnNtaXR0ZWQiIG1zZ2lkPSI3OTg4MTY3NjcyOTgyMTk5MDYxIj4i4Z6U4Z624Z6T4oCL4Z6V4Z+S4Z6J4Z6+4Z+WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV9yZWNlaXZlZCIgbXNnaWQ9IjQwNjI3NzY5MjkzNzYwNjc4MjAiPiLhnpThnrbhnpPigIvhnpHhnpHhnr3hnpvhn5YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3ZhbHVlX2Zvcm1hdCIgbXNnaWQ9IjIxOTI0NjY1NTc4MjY4OTc1ODAiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJHM8L3hsaWZmOmc+IOGelOGfgyAvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkczwveGxpZmY6Zz4g4Z6A4Z6J4Z+S4Z6F4Z6U4Z+L4oCL4Z6W4Z+Q4Z6P4Z+M4Z6Y4Z624Z6TIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjUyMTZiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4Lqe4Lqw4LqN4Lqy4LqN4Lqy4Lqh4Lqq4LuJ4Lqy4LqH4LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuIIFZQTi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+IuC6luC7ieC6suC6lOC6s+C7gOC6meC6teC6meC6leC7jeC7iCwg4LuB4Lqh4LuI4LqZ4LqX4LuI4Lqy4LqZ4LqB4Lqz4Lql4Lqx4LqH4LqI4Lqw4LuD4Lqr4LuJ4Lqq4Lq04LqU4LuB4LqB4LuI4LuB4Lqt4Lqx4Lqa4Lqe4Lql4Lq04LuA4LqE4LqK4Lqx4LqZIOC7g+C6meC6geC6suC6meC6lOC6seC6geC6guC7jeC7ieC6oeC6ueC6meC6iOC6sOC6peC6suC6iOC6reC6meC7g+C6meC7gOC6hOC6t+C6reC6guC7iOC6suC6jeC6l+C6seC6h+C7neC6u+C6lC4gIjxiPiLguqLgu4jgurLguo3guq3guqHguq7gurHgupog4LqZ4Lqt4LqB4LqI4Lqy4LqB4Lqn4LuI4Lqy4LqX4LuI4Lqy4LqZ4LqI4Lqw4LuA4LqK4Lq34LuI4Lqt4LuD4LqI4LuB4Lqt4Lqx4Lqa4Lqe4Lql4Lq04LuA4LqE4LqK4Lqx4LqZ4LqU4Lqx4LuI4LqH4LqB4LuI4Lqy4LqnLiI8L2I+IiDgupbgu4ngurLguprgu43gu4jgupTgurHgu4jguofgupngurHgu4ngupksIOC6l+C7iOC6suC6meC6iOC6sOC6leC6u+C6geC6ouC6ueC7iOC7g+C6meC6hOC6p+C6suC6oeC6quC7iOC6veC6hyDgupfgurXgu4jguoLgu43gu4nguqHgurngupnguoLguq3guofgupfgu4jgurLgupnguojgurDgupbgurfguoHguoTgurjguoHguoTgurLguqHgu4LgupTguo3guorguq3guprgu4HguqfgupfgurXgu4jgu4DgupvgurHgupnguq3gurHgupngupXgurDguqXgurLguo0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IuC6guC7ieC6reC6jeC7gOC6iuC6t+C7iOC6reC7geC6reC6seC6muC6nuC6peC6tOC7gOC6hOC6iuC6seC6meC6meC6teC7iS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiLgu4Dguorgurfgu4jguq3guqHgupXgu43gu4ggVlBOIOC7geC6peC7ieC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLgupvgurHguprguoTgu4jgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i4LqV4Lqx4LqU4LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiLgu4DguorguqrguorgurHgupk6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVyYXRpb24iIG1zZ2lkPSIzNTg0NzgyNDU5OTI4NzE5NDM1Ij4i4LuE4Lql4LqN4Lqw4LuA4Lqn4Lql4LqyOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdHJhbnNtaXR0ZWQiIG1zZ2lkPSI3OTg4MTY3NjcyOTgyMTk5MDYxIj4i4Lqq4Lq74LuI4LqHOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfcmVjZWl2ZWQiIG1zZ2lkPSI0MDYyNzc2OTI5Mzc2MDY3ODIwIj4i4Lqu4Lqx4LqaOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkczwveGxpZmY6Zz4g4LuE4LqaIC8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRzPC94bGlmZjpnPiDgu4Hgup7gurHguoHgu4DguoHgurHgupQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4N2JiNzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBWUE4g0YXQvtC70LHQvtC70YLRi9CzINKv0q/RgdCz0Y3RhSDQs9GN0LYg0LHQsNC50L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+ItKu0YDQs9GN0LvQttC70q/Sr9C70YHRjdC90Y3RjdGAwqDRgtCwINCw0L/Qv9C70LjQutC10YjQvdC0INCx0q/RhSDRgdKv0LvQttGN0Y3QvdC40Lkg0YPRgNGB0LPQsNC70YvQsyDRgtCw0YHQu9Cw0YUg0LfTqdCy0YjTqdOp0YDQu9C40LnQsyDTqdCz06nRhSDQsdC+0LvQvdC+LiAiPGI+ItCQ0L/Qv9C40LrQtdGI0L0g0LHQsNGC0LDQu9Cz0LDQsNCz0q/QuSDQs9GN0LYg0q/Qt9GB0Y3QvSDRgtC+0YXQuNC+0LvQtNC+0LvQtCDQuyDQt9Op0LLRiNOp06nRgNGHINCx0L7Qu9C+0YDRhdCz0q/QuS4iPC9iPiIg0JHRg9GB0LDQtCDRgtC+0YXQuNC+0LvQtNC+0LvQtCDRgtCwINOp06nRgNC40LnQvSDQtNCw0YLQsNCzINGF0L7RgNGC0L7QuSDRgdC+0YTRgtCy0LXRgNC40LnQvSDQsNGO0YPQu9C0INOp0YDRgtOp0YUg0Y3RgNGB0LTRjdC70LjQudCzINKv0q/RgdCz0Y3QtiDQsdCw0LnQvdCwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjI4ODkyMjY0MDg3NjU4MTAxNzMiPiLQkdC4INGN0L3RjSDQsNC/0L/Qu9C40LrQtdGI0L3QtCDQuNGC0LPRjdC2INCx0LDQudC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X3RpdGxlIiBtc2dpZD0iMTkyOTM2MjUwMDY2NTgwOTY0Ij4iVlBOINGF0L7Qu9Cx0L7Qs9C00L7QsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLQotC+0YXQuNGA0YPRg9C70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc2Nvbm5lY3QiIG1zZ2lkPSI5NzE0MTIzMzgzMDQyMDAwNTYiPiLQodCw0LvQs9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+ItCh0LXRiNC9OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+ItKu0YDQs9GN0LvQttC70Y3RhSDRhdGD0LPQsNGG0LDQsDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3RyYW5zbWl0dGVkIiBtc2dpZD0iNzk4ODE2NzY3Mjk4MjE5OTA2MSI+ItCY0LvQs9GN0Y3RgdGN0L06Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV9yZWNlaXZlZCIgbXNnaWQ9IjQwNjI3NzY5MjkzNzYwNjc4MjAiPiLQpdKv0LvRjdGN0L0g0LDQstGB0LDQvToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3ZhbHVlX2Zvcm1hdCIgbXNnaWQ9IjIxOTI0NjY1NTc4MjY4OTc1ODAiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJHM8L3hsaWZmOmc+INCx0LDQudGCLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+INC/0LDQutC10YIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCmluZGV4IGY3MTY0MjIuLjZiZmZjOTggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKQEAgLTE3LDggKzE3LDggQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gZm9yc8O4a2VyIMOlIGV0YWJsZXJlIGVuIFZQTi10aWxrb2JsaW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4iVmVkIMOlIGZvcnRzZXR0ZSBnaXIgZHUgYXBwbGlrYXNqb25lbiB0aWxsYXRlbHNlIHRpbCDDpSBmYW5nZSBvcHAgYWxsIG5ldHR2ZXJrc3RyYWZpa2suICI8Yj4iSUtLRSBnb2R0YSBtZWQgbWluZHJlIGR1IHN0b2xlciBww6UgYXBwbGlrYXNqb25lbi4iPC9iPiIgRWxsZXJzIHJpc2lrZXJlciBkdSBhdCBkYXRhZW5lIGRpbmUga29tcHJvbWl0dGVyZXMgYXYgZW4gb25kc2lubmV0IHByb2dyYW12YXJlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjI4ODkyMjY0MDg3NjU4MTAxNzMiPiJKZWcgc3RvbGVyIHDDpSBkZW5uZSBhcHBsaWthc2pvbmVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4iVmVkIMOlIGZvcnRzZXR0ZSBnaXIgZHUgYXBwZW4gdGlsbGF0ZWxzZSB0aWwgw6UgZmFuZ2Ugb3BwIGFsbCBuZXR0dmVya3N0cmFmaWtrLiAiPGI+IklLS0UgZ29kdGEgbWVkIG1pbmRyZSBkdSBzdG9sZXIgcMOlIGFwcGVuLiI8L2I+IiBFbGxlcnMgcmlzaWtlcmVyIGR1IGF0IGRhdGFlbmUgZGluZSBrb21wcm9taXR0ZXJlcyBhdiBlbiBvbmRzaW5uZXQgcHJvZ3JhbXZhcmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IkplZyBzdG9sZXIgcMOlIGRlbm5lIGFwcGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiBlciB0aWxrb2JsZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmUiIG1zZ2lkPSI0OTA1NTE4Mzc1NTc0NzkxMzc1Ij4iS29uZmlndXJlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc2Nvbm5lY3QiIG1zZ2lkPSI5NzE0MTIzMzgzMDQyMDAwNTYiPiJLb2JsZSBmcmEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzIxMWNiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4KSP4KSJ4KSf4KS+IFZQTiDgpJzgpKHgpL7gpKgg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+IuCkheCkl+CkvuCkoeClgCDgpKzgpKLgpYfgpLAsIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpK/gpLgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkrOCliCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpJXgpYsg4KSf4KWN4KSw4KS+4KSr4KS/4KSVIOCkheCkteCksOCli+CkpyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgSDgpLngpYHgpIHgpKbgpYjgpJvgpaQgIjxiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpL7gpIgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkteCkv+CktuCljeCkteCkvuCkuCDgpKjgpLLgpL7gpJfgpYfgpLjgpK7gpY3gpK4g4KSv4KS44KSy4KS+4KSIIOCkuOCljeCkteClgOCkleCkvuCksCDgpKjgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9iPiIg4KSF4KSo4KWN4KSv4KSl4KS+LCDgpKTgpKrgpL7gpIjgpIEg4KSG4KSr4KWN4KSo4KWLIOCkoeClh+Ckn+CkviDgpJbgpLDgpL7gpKwg4KS44KSr4KWN4KSf4KS14KWH4KSw4KSm4KWN4KS14KS+4KSw4KS+IOCknOCli+CkluCkv+CkruCkruCkviDgpKrgpLDgpY3gpKjgpYEg4KS54KWB4KSo4KWH4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IuCkriDgpK/gpLgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkteCkv+CktuCljeCkteCkvuCkuCDgpJfgpLDgpY3gpJvgpYHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4g4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLgpJXgpKjgpY3gpKvgpL/gpJfgpLAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+IuCkteCkv+CkmuCljeCkm+Clh+CkpuCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+IuCkuOCkpOCljeCksDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkdXJhdGlvbiIgbXNnaWQ9IjM1ODQ3ODI0NTk5Mjg3MTk0MzUiPiLgpIXgpLXgpKfgpL86Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiLgpKrgpKDgpL7gpIfgpK/gpYs6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV9yZWNlaXZlZCIgbXNnaWQ9IjQwNjI3NzY5MjkzNzYwNjc4MjAiPiLgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSt4KSv4KWLOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkczwveGxpZmY6Zz4g4KSs4KS+4KSH4KSf4KS54KSw4KWCIC8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRzPC94bGlmZjpnPiDgpKrgpY3gpK/gpL7gpJXgpYfgpJ/gpLngpLDgpYIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzIxMWNiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgpI/gpIngpJ/gpL4gVlBOIOCknOCkoeCkvuCkqCDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4i4KSF4KSX4KS+4KSh4KWAIOCkrOCkouClh+CksCwg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSs4KWIIOCkqOClh+Ckn+CkteCksOCljeCkleCkleCliyDgpJ/gpY3gpLDgpL7gpKvgpL/gpJUg4KSF4KS14KSw4KWL4KSnIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWBIOCkueClgeCkgeCkpuCliOCkm+ClpCAiPGI+IuCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KS14KS/4KS24KWN4KS14KS+4KS4IOCkqOCksuCkvuCkl+Clh+CkuOCkruCljeCkriDgpK/gpLjgpLLgpL7gpIgg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkqOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L2I+IiDgpIXgpKjgpY3gpK/gpKXgpL4sIOCkpOCkquCkvuCkiOCkgSDgpIbgpKvgpY3gpKjgpYsg4KSh4KWH4KSf4KS+IOCkluCksOCkvuCkrCDgpLjgpKvgpY3gpJ/gpLXgpYfgpLDgpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KWL4KSW4KS/4KSu4KSu4KS+IOCkquCksOCljeCkqOClgSDgpLngpYHgpKjgpYfgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i4KSuIOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS/4KS24KWN4KS14KS+4KS4IOCkl+CksOCljeCkm+ClgeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IuCkleCkqOCljeCkq+Ckv+Ckl+CksCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i4KS14KS/4KSa4KWN4KSb4KWH4KSm4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlc3Npb24iIG1zZ2lkPSI2NDcwNjI4NTQ5NDczNjQxMDMwIj4i4KS44KSk4KWN4KSwOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+IuCkheCkteCkp+CkvzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3RyYW5zbWl0dGVkIiBtc2dpZD0iNzk4ODE2NzY3Mjk4MjE5OTA2MSI+IuCkquCkoOCkvuCkh+Ckr+ClizoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+IuCkquCljeCksOCkvuCkquCljeCkpCDgpK3gpK/gpYs6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiDgpKzgpL7gpIfgpJ/gpLngpLDgpYIgLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+IOCkquCljeCkr+CkvuCkleClh+Ckn+CkueCksOClgiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlMGVkNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4iVlBOIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC2muC3iiDgt4Pgt5Dgtq/gt5PgtrjgtqcgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiLgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4La64LeP4La44LeZ4Lax4LeKLCDgt4Pgt5Lgtrrgtr3gt5Qg4Lai4LeP4La9IOC2reC2r+C2tuC2r+C2uiDgtrjgtpzgtq/gt5Mg4LaF4La94LeK4La94LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtpTgtrYg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuICI8Yj4i4LaU4La2IOC2uuC3meC2r+C3lOC2uCDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Mg4Lax4Lec4Laa4La74La64LeSIOC2seC2uOC3iiDgtrTgt5Lgt4Xgt5LgtpzgtrHgt4rgtrEg4LaR4La04LePIjwvYj4iIOC2seC3kOC2reC3hOC3nOC2reC3iiwg4LaF4Lax4LeS4LeC4LeK4LanIOC2uOC3mOC2r+C3lOC2muC3j+C2guC2nOC2uuC2muC3iiDgtrjgtp/gt5LgtrHgt4og4LaU4La24Lac4LeaIOC2r+C2reC3iuC2rSDgtrHgt5Lgtrvgt4/gt4Dgtrvgtqvgtrog4LeA4LeT4La44LeaIOC2heC3gOC2r+C3j+C2seC2uOC2muC3iiDgtpTgtrbgtqcg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjI4ODkyMjY0MDg3NjU4MTAxNzMiPiLgtrjgt5ngtrgg4La64LeZ4Lav4LeU4La4IOC2uOC2pyDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Pgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X3RpdGxlIiBtc2dpZD0iMTkyOTM2MjUwMDY2NTgwOTY0Ij4iVlBOIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+IuC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+IuC3g+C3kOC3g+C3kuC2ujoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkdXJhdGlvbiIgbXNnaWQ9IjM1ODQ3ODI0NTk5Mjg3MTk0MzUiPiLgtprgt4/gtr0g4LeD4LeT4La44LeP4LeAOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdHJhbnNtaXR0ZWQiIG1zZ2lkPSI3OTg4MTY3NjcyOTgyMTk5MDYxIj4i4La64LeA4LaxIOC2veC2rzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+IuC2veC3kOC2tuC3kuC2q+C3kjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3ZhbHVlX2Zvcm1hdCIgbXNnaWQ9IjIxOTI0NjY1NTc4MjY4OTc1ODAiPiLgtrbgtrrgt5LgtqcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiAvIOC2tOC3kOC2muC3kOC2p+C3iuC2p+C3lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlMGVkNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiJWUE4g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64Laa4LeKIOC3g+C3kOC2r+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+IuC2ieC2r+C3kuC2u+C3kuC2uuC2pyDgtrrgt4/gtrjgt5ngtrHgt4osIOC3g+C3kuC2uuC2veC3lCDgtqLgt4/gtr0g4Lat4Lav4La24Lav4La6IOC2uOC2nOC2r+C3kyDgtoXgtr3gt4rgtr3gt48g4Lac4LeQ4Lax4LeT4La44LanIOC2lOC2tiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4gIjxiPiLgtpTgtrYg4La64LeZ4Lav4LeU4La4IOC3gOC3kuC3geC3iuC3gOC3j+C3gyDgtrHgt5zgtprgtrvgtrrgt5Ig4Lax4La44LeKIOC2tOC3kuC3heC3kuC2nOC2seC3iuC2sSDgtpHgtrTgt48iPC9iPiIg4Lax4LeQ4Lat4LeE4Lec4Lat4LeKLCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La44LeY4Lav4LeU4Laa4LeP4LaC4Lac4La64Laa4LeKIOC2uOC2n+C3kuC2seC3iiDgtpTgtrbgtpzgt5og4Lav4Lat4LeK4LatIOC2seC3kuC2u+C3j+C3gOC2u+C2q+C2uiDgt4Dgt5Pgtrjgt5og4LaF4LeA4Lav4LeP4Lax4La44Laa4LeKIOC2lOC2tuC2pyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IuC2uOC3meC2uCDgtrrgt5ngtq/gt5Tgtrgg4La44LanIOC3gOC3kuC3geC3iuC3gOC3j+C3g+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4g4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IuC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlc3Npb24iIG1zZ2lkPSI2NDcwNjI4NTQ5NDczNjQxMDMwIj4i4LeD4LeQ4LeD4LeS4La6OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+IuC2muC3j+C2vSDgt4Pgt5Pgtrjgt4/gt4A6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiLgtrrgt4DgtrEg4La94LavOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfcmVjZWl2ZWQiIG1zZ2lkPSI0MDYyNzc2OTI5Mzc2MDY3ODIwIj4i4La94LeQ4La24LeS4Lar4LeSOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+IuC2tuC2uuC3kuC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJHM8L3hsaWZmOmc+IC8g4La04LeQ4Laa4LeQ4Lan4LeK4Lan4LeUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMjVkNDEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDlmJfoqablu7rnq4sgVlBOIOmAo+e3muOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4i5aaC5p6c57m857qM6YCy6KGM77yM5Y2z6KGo56S65oKo5YWB6Kix6Kmy5oeJ55So56iL5byP5pSU5oiq5omA5pyJ57ay57Wh5rWB6YeP44CCIjxiPiLpmaTpnZ7mgqjkv6Hku7voqbLmh4nnlKjnqIvlvI/vvIzlkKbliYfkuI3mh4nmjqXlj5fjgIIiPC9iPiLkuI3nhLblsLHmnIPorpPmgqjnmoTos4fmlpnpmbfmlrzpga3mg6HmhI/nqIvlvI/lhaXkvrXnmoTpoqjpmqrjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i5oiR5L+h5Lu76YCZ5YCL5oeJ55So56iL5byP44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X3RpdGxlIiBtc2dpZD0iMTkyOTM2MjUwMDY2NTgwOTY0Ij4iVlBOIOW3sumAo+e3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLoqK3lrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i5Lit5pa36YCj57eaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiLmmYLmrrXvvJoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkdXJhdGlvbiIgbXNnaWQ9IjM1ODQ3ODI0NTk5Mjg3MTk0MzUiPiLmjIHnuozmmYLplpPvuLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3RyYW5zbWl0dGVkIiBtc2dpZD0iNzk4ODE2NzY3Mjk4MjE5OTA2MSI+IuW3suWCs+mAge+8miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfcmVjZWl2ZWQiIG1zZ2lkPSI0MDYyNzc2OTI5Mzc2MDY3ODIwIj4i5bey5o6l5pS277yaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiDkvY3lhYPntYQgLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+IOWwgeWMhSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9zcmMvY29tL2FuZHJvaWQvdnBuZGlhbG9ncy9Db25maXJtRGlhbG9nLmphdmEgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3NyYy9jb20vYW5kcm9pZC92cG5kaWFsb2dzL0NvbmZpcm1EaWFsb2cuamF2YQppbmRleCA2ZmFmNGUwLi5kZGFmYzY2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3NyYy9jb20vYW5kcm9pZC92cG5kaWFsb2dzL0NvbmZpcm1EaWFsb2cuamF2YQorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3NyYy9jb20vYW5kcm9pZC92cG5kaWFsb2dzL0NvbmZpcm1EaWFsb2cuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubmV0LklDb25uZWN0aXZpdHlNYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9zcmMvY29tL2FuZHJvaWQvdnBuZGlhbG9ncy9NYW5hZ2VEaWFsb2cuamF2YSBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3Mvc3JjL2NvbS9hbmRyb2lkL3ZwbmRpYWxvZ3MvTWFuYWdlRGlhbG9nLmphdmEKaW5kZXggM2Q1NjU0YS4uZWIyMDk5NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvVnBuRGlhbG9ncy9zcmMvY29tL2FuZHJvaWQvdnBuZGlhbG9ncy9NYW5hZ2VEaWFsb2cuamF2YQorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3NyYy9jb20vYW5kcm9pZC92cG5kaWFsb2dzL01hbmFnZURpYWxvZy5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuSUNvbm5lY3Rpdml0eU1hbmFnZXI7CkBAIC0yOCw5ICsyNyw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5Db21wb3VuZEJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuQWxlcnRBY3Rpdml0eTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvcmVzL3ZhbHVlcy9jb25maWcueG1sIGIvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9yZXMvdmFsdWVzL2NvbmZpZy54bWwKaW5kZXggMWIyNDE5MC4uMmUyZmE2ZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9yZXMvdmFsdWVzL2NvbmZpZy54bWwKKysrIGIvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9yZXMvdmFsdWVzL2NvbmZpZy54bWwKQEAgLTE1LDQgKzE1LDcgQEAKIC0tPgogPHJlc291cmNlcz4KICAgICA8Ym9vbCBuYW1lPSJhbGxvd19yb3RhdGlvbiI+ZmFsc2U8L2Jvb2w+CisgICAgPCEtLSBTcGVjaWZpZXMgd2hldGhlciB0byBleHBhbmQgdGhlIGNyb3BwZWQgYXJlYSBvbiBib3RoIHNpZGVzIChyYXRoZXIKKyAgICAgICAgIHRoYW4ganVzdCB0byBvbmUgc2lkZSkgLS0+CisgICAgPGJvb2wgbmFtZT0iY2VudGVyX2Nyb3AiPnRydWU8L2Jvb2w+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL2dhbGxlcnkzZC9leGlmL0V4aWZNb2RpZmllci5qYXZhIGIvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvZ2FsbGVyeTNkL2V4aWYvRXhpZk1vZGlmaWVyLmphdmEKaW5kZXggZjAwMzYyYi4uMDUzMWNiYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvZ2FsbGVyeTNkL2V4aWYvRXhpZk1vZGlmaWVyLmphdmEKKysrIGIvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvZ2FsbGVyeTNkL2V4aWYvRXhpZk1vZGlmaWVyLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKLWltcG9ydCBqYXZhLmlvLkNsb3NlYWJsZTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL2dhbGxlcnkzZC9nbHJlbmRlcmVyL0dMQ2FudmFzLmphdmEgYi9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC9nYWxsZXJ5M2QvZ2xyZW5kZXJlci9HTENhbnZhcy5qYXZhCmluZGV4IDMwNWU5MDUuLjViMDc0NzcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL2dhbGxlcnkzZC9nbHJlbmRlcmVyL0dMQ2FudmFzLmphdmEKKysrIGIvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvZ2FsbGVyeTNkL2dscmVuZGVyZXIvR0xDYW52YXMuamF2YQpAQCAtMjAsOCArMjAsNiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3RGOwogCi1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0wxMTsKLQogLy8KIC8vIEdMQ2FudmFzIGdpdmVzIGEgY29udmVuaWVudCBpbnRlcmZhY2UgdG8gZHJhdyB1c2luZyBPcGVuR0wuCiAvLwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvcGhvdG9zL0JpdG1hcFJlZ2lvblRpbGVTb3VyY2UuamF2YSBiL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL3Bob3Rvcy9CaXRtYXBSZWdpb25UaWxlU291cmNlLmphdmEKaW5kZXggODUxMWRlMi4uY2RjNWNkYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvcGhvdG9zL0JpdG1hcFJlZ2lvblRpbGVTb3VyY2UuamF2YQorKysgYi9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC9waG90b3MvQml0bWFwUmVnaW9uVGlsZVNvdXJjZS5qYXZhCkBAIC0yNCw5ICsyNCw3IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwUmVnaW9uRGVjb2RlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC93YWxscGFwZXJjcm9wcGVyL0Nyb3BWaWV3LmphdmEgYi9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC93YWxscGFwZXJjcm9wcGVyL0Nyb3BWaWV3LmphdmEKaW5kZXggMTRmN2MxZC4uYzNlZjMwMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvd2FsbHBhcGVyY3JvcHBlci9Dcm9wVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL3dhbGxwYXBlcmNyb3BwZXIvQ3JvcFZpZXcuamF2YQpAQCAtMTY1LDcgKzE2NSw4IEBACiAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgaW1hZ2VXaWR0aCA9IGltYWdlRGltc1swXTsKICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBpbWFnZUhlaWdodCA9IGltYWdlRGltc1sxXTsKICAgICAgICAgICAgICAgICBtTWluU2NhbGUgPSBNYXRoLm1heCh3IC8gaW1hZ2VXaWR0aCwgaCAvIGltYWdlSGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyZXIuc2NhbGUgPSBNYXRoLm1heChtTWluU2NhbGUsIG1SZW5kZXJlci5zY2FsZSk7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLnNjYWxlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KG1NaW5TY2FsZSwgcmVzZXRTY2FsZSA/IEZsb2F0Lk1JTl9WQUxVRSA6IG1SZW5kZXJlci5zY2FsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC93YWxscGFwZXJjcm9wcGVyL1dhbGxwYXBlckNyb3BBY3Rpdml0eS5qYXZhIGIvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvd2FsbHBhcGVyY3JvcHBlci9XYWxscGFwZXJDcm9wQWN0aXZpdHkuamF2YQppbmRleCA1N2MwNTgxLi5jYmYwYzUyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC93YWxscGFwZXJjcm9wcGVyL1dhbGxwYXBlckNyb3BBY3Rpdml0eS5qYXZhCisrKyBiL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL3dhbGxwYXBlcmNyb3BwZXIvV2FsbHBhcGVyQ3JvcEFjdGl2aXR5LmphdmEKQEAgLTcxLDYgKzcxLDggQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhfQk1BUF9JTl9JTlRFTlQgPSA3NTAwMDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgV0FMTFBBUEVSX1NDUkVFTlNfU1BBTiA9IDJmOwogCisgICAgcHJvdGVjdGVkIHN0YXRpYyBQb2ludCBzRGVmYXVsdFdhbGxwYXBlclNpemU7CisKICAgICBwcm90ZWN0ZWQgQ3JvcFZpZXcgbUNyb3BWaWV3OwogICAgIHByb3RlY3RlZCBVcmkgbVVyaTsKIApAQCAtMjA0LDMyICsyMDYsMzQgQEAKICAgICB9CiAKICAgICBzdGF0aWMgcHJvdGVjdGVkIFBvaW50IGdldERlZmF1bHRXYWxscGFwZXJTaXplKFJlc291cmNlcyByZXMsIFdpbmRvd01hbmFnZXIgd2luZG93TWFuYWdlcikgewotICAgICAgICBQb2ludCBtaW5EaW1zID0gbmV3IFBvaW50KCk7Ci0gICAgICAgIFBvaW50IG1heERpbXMgPSBuZXcgUG9pbnQoKTsKLSAgICAgICAgd2luZG93TWFuYWdlci5nZXREZWZhdWx0RGlzcGxheSgpLmdldEN1cnJlbnRTaXplUmFuZ2UobWluRGltcywgbWF4RGltcyk7CisgICAgICAgIGlmIChzRGVmYXVsdFdhbGxwYXBlclNpemUgPT0gbnVsbCkgeworICAgICAgICAgICAgUG9pbnQgbWluRGltcyA9IG5ldyBQb2ludCgpOworICAgICAgICAgICAgUG9pbnQgbWF4RGltcyA9IG5ldyBQb2ludCgpOworICAgICAgICAgICAgd2luZG93TWFuYWdlci5nZXREZWZhdWx0RGlzcGxheSgpLmdldEN1cnJlbnRTaXplUmFuZ2UobWluRGltcywgbWF4RGltcyk7CiAKLSAgICAgICAgaW50IG1heERpbSA9IE1hdGgubWF4KG1heERpbXMueCwgbWF4RGltcy55KTsKLSAgICAgICAgaW50IG1pbkRpbSA9IE1hdGgubWF4KG1pbkRpbXMueCwgbWluRGltcy55KTsKKyAgICAgICAgICAgIGludCBtYXhEaW0gPSBNYXRoLm1heChtYXhEaW1zLngsIG1heERpbXMueSk7CisgICAgICAgICAgICBpbnQgbWluRGltID0gTWF0aC5tYXgobWluRGltcy54LCBtaW5EaW1zLnkpOwogCi0gICAgICAgIGlmIChhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTl9NUjEpIHsKLSAgICAgICAgICAgIFBvaW50IHJlYWxTaXplID0gbmV3IFBvaW50KCk7Ci0gICAgICAgICAgICB3aW5kb3dNYW5hZ2VyLmdldERlZmF1bHREaXNwbGF5KCkuZ2V0UmVhbFNpemUocmVhbFNpemUpOwotICAgICAgICAgICAgbWF4RGltID0gTWF0aC5tYXgocmVhbFNpemUueCwgcmVhbFNpemUueSk7Ci0gICAgICAgICAgICBtaW5EaW0gPSBNYXRoLm1pbihyZWFsU2l6ZS54LCByZWFsU2l6ZS55KTsKKyAgICAgICAgICAgIGlmIChhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTl9NUjEpIHsKKyAgICAgICAgICAgICAgICBQb2ludCByZWFsU2l6ZSA9IG5ldyBQb2ludCgpOworICAgICAgICAgICAgICAgIHdpbmRvd01hbmFnZXIuZ2V0RGVmYXVsdERpc3BsYXkoKS5nZXRSZWFsU2l6ZShyZWFsU2l6ZSk7CisgICAgICAgICAgICAgICAgbWF4RGltID0gTWF0aC5tYXgocmVhbFNpemUueCwgcmVhbFNpemUueSk7CisgICAgICAgICAgICAgICAgbWluRGltID0gTWF0aC5taW4ocmVhbFNpemUueCwgcmVhbFNpemUueSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgZW5vdWdoIGV4dHJhIHNwYWNlIGluIHRoZSB3YWxscGFwZXIKKyAgICAgICAgICAgIC8vIGZvciB0aGUgaW50ZW5kZWQgcGFyYWxsYXggZWZmZWN0cworICAgICAgICAgICAgZmluYWwgaW50IGRlZmF1bHRXaWR0aCwgZGVmYXVsdEhlaWdodDsKKyAgICAgICAgICAgIGlmIChpc1NjcmVlbkxhcmdlKHJlcykpIHsKKyAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGggPSAoaW50KSAobWF4RGltICogd2FsbHBhcGVyVHJhdmVsVG9TY3JlZW5XaWR0aFJhdGlvKG1heERpbSwgbWluRGltKSk7CisgICAgICAgICAgICAgICAgZGVmYXVsdEhlaWdodCA9IG1heERpbTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFdpZHRoID0gTWF0aC5tYXgoKGludCkgKG1pbkRpbSAqIFdBTExQQVBFUl9TQ1JFRU5TX1NQQU4pLCBtYXhEaW0pOworICAgICAgICAgICAgICAgIGRlZmF1bHRIZWlnaHQgPSBtYXhEaW07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzRGVmYXVsdFdhbGxwYXBlclNpemUgPSBuZXcgUG9pbnQoZGVmYXVsdFdpZHRoLCBkZWZhdWx0SGVpZ2h0KTsKICAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgZW5vdWdoIGV4dHJhIHNwYWNlIGluIHRoZSB3YWxscGFwZXIKLSAgICAgICAgLy8gZm9yIHRoZSBpbnRlbmRlZAotICAgICAgICAvLyBwYXJhbGxheCBlZmZlY3RzCi0gICAgICAgIGZpbmFsIGludCBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQ7Ci0gICAgICAgIGlmIChpc1NjcmVlbkxhcmdlKHJlcykpIHsKLSAgICAgICAgICAgIGRlZmF1bHRXaWR0aCA9IChpbnQpIChtYXhEaW0gKiB3YWxscGFwZXJUcmF2ZWxUb1NjcmVlbldpZHRoUmF0aW8obWF4RGltLCBtaW5EaW0pKTsKLSAgICAgICAgICAgIGRlZmF1bHRIZWlnaHQgPSBtYXhEaW07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWZhdWx0V2lkdGggPSBNYXRoLm1heCgoaW50KSAobWluRGltICogV0FMTFBBUEVSX1NDUkVFTlNfU1BBTiksIG1heERpbSk7Ci0gICAgICAgICAgICBkZWZhdWx0SGVpZ2h0ID0gbWF4RGltOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgUG9pbnQoZGVmYXVsdFdpZHRoLCBkZWZhdWx0SGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIHNEZWZhdWx0V2FsbHBhcGVyU2l6ZTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGludCBnZXRSb3RhdGlvbkZyb21FeGlmKFN0cmluZyBwYXRoKSB7CkBAIC0zMjYsMTAgKzMzMCwxMCBAQAogCiAgICAgcHJvdGVjdGVkIHZvaWQgY3JvcEltYWdlQW5kU2V0V2FsbHBhcGVyKFVyaSB1cmksCiAgICAgICAgICAgICBPbkJpdG1hcENyb3BwZWRIYW5kbGVyIG9uQml0bWFwQ3JvcHBlZEhhbmRsZXIsIGZpbmFsIGJvb2xlYW4gZmluaXNoQWN0aXZpdHlXaGVuRG9uZSkgeworICAgICAgICBib29sZWFuIGNlbnRlckNyb3AgPSBnZXRSZXNvdXJjZXMoKS5nZXRCb29sZWFuKFIuYm9vbC5jZW50ZXJfY3JvcCk7CiAgICAgICAgIC8vIEdldCB0aGUgY3JvcAogICAgICAgICBib29sZWFuIGx0ciA9IG1Dcm9wVmlldy5nZXRMYXlvdXREaXJlY3Rpb24oKSA9PSBWaWV3LkxBWU9VVF9ESVJFQ1RJT05fTFRSOwogCi0KICAgICAgICAgRGlzcGxheSBkID0gZ2V0V2luZG93TWFuYWdlcigpLmdldERlZmF1bHREaXNwbGF5KCk7CiAKICAgICAgICAgUG9pbnQgZGlzcGxheVNpemUgPSBuZXcgUG9pbnQoKTsKQEAgLTM1NCwxNSArMzU4LDI1IEBACiAgICAgICAgIC8vIEFESlVTVCBDUk9QIFdJRFRICiAgICAgICAgIC8vIEV4dGVuZCB0aGUgY3JvcCBhbGwgdGhlIHdheSB0byB0aGUgcmlnaHQsIGZvciBwYXJhbGxheAogICAgICAgICAvLyAob3IgYWxsIHRoZSB3YXkgdG8gdGhlIGxlZnQsIGluIFJUTCkKLSAgICAgICAgZmxvYXQgZXh0cmFTcGFjZSA9IGx0ciA/IHJvdGF0ZWRJblNpemVbMF0gLSBjcm9wUmVjdC5yaWdodCA6IGNyb3BSZWN0LmxlZnQ7CisgICAgICAgIGZsb2F0IGV4dHJhU3BhY2U7CisgICAgICAgIGlmIChjZW50ZXJDcm9wKSB7CisgICAgICAgICAgICBleHRyYVNwYWNlID0gMmYgKiBNYXRoLm1pbihyb3RhdGVkSW5TaXplWzBdIC0gY3JvcFJlY3QucmlnaHQsIGNyb3BSZWN0LmxlZnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXh0cmFTcGFjZSA9IGx0ciA/IHJvdGF0ZWRJblNpemVbMF0gLSBjcm9wUmVjdC5yaWdodCA6IGNyb3BSZWN0LmxlZnQ7CisgICAgICAgIH0KICAgICAgICAgLy8gQ2FwIHRoZSBhbW91bnQgb2YgZXh0cmEgd2lkdGgKICAgICAgICAgZmxvYXQgbWF4RXh0cmFTcGFjZSA9IGRlZmF1bHRXYWxscGFwZXJTaXplLnggLyBjcm9wU2NhbGUgLSBjcm9wUmVjdC53aWR0aCgpOwogICAgICAgICBleHRyYVNwYWNlID0gTWF0aC5taW4oZXh0cmFTcGFjZSwgbWF4RXh0cmFTcGFjZSk7CiAKLSAgICAgICAgaWYgKGx0cikgewotICAgICAgICAgICAgY3JvcFJlY3QucmlnaHQgKz0gZXh0cmFTcGFjZTsKKyAgICAgICAgaWYgKGNlbnRlckNyb3ApIHsKKyAgICAgICAgICAgIGNyb3BSZWN0LmxlZnQgLT0gZXh0cmFTcGFjZSAvIDJmOworICAgICAgICAgICAgY3JvcFJlY3QucmlnaHQgKz0gZXh0cmFTcGFjZSAvIDJmOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY3JvcFJlY3QubGVmdCAtPSBleHRyYVNwYWNlOworICAgICAgICAgICAgaWYgKGx0cikgeworICAgICAgICAgICAgICAgIGNyb3BSZWN0LnJpZ2h0ICs9IGV4dHJhU3BhY2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNyb3BSZWN0LmxlZnQgLT0gZXh0cmFTcGFjZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8vIEFESlVTVCBDUk9QIEhFSUdIVApAQCAtNTUwLDYgKzU2NCw4IEBACiAgICAgICAgICAgICAgICAgUmVjdCByb3VuZGVkVHJ1ZUNyb3AgPSBuZXcgUmVjdCgpOwogICAgICAgICAgICAgICAgIE1hdHJpeCByb3RhdGVNYXRyaXggPSBuZXcgTWF0cml4KCk7CiAgICAgICAgICAgICAgICAgTWF0cml4IGludmVyc2VSb3RhdGVNYXRyaXggPSBuZXcgTWF0cml4KCk7CisKKyAgICAgICAgICAgICAgICBQb2ludCBib3VuZHMgPSBnZXRJbWFnZUJvdW5kcygpOwogICAgICAgICAgICAgICAgIGlmIChtUm90YXRpb24gPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZU1hdHJpeC5zZXRSb3RhdGUobVJvdGF0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgaW52ZXJzZVJvdGF0ZU1hdHJpeC5zZXRSb3RhdGUoLW1Sb3RhdGlvbik7CkBAIC01NTcsNyArNTczLDYgQEAKICAgICAgICAgICAgICAgICAgICAgbUNyb3BCb3VuZHMucm91bmRPdXQocm91bmRlZFRydWVDcm9wKTsKICAgICAgICAgICAgICAgICAgICAgbUNyb3BCb3VuZHMgPSBuZXcgUmVjdEYocm91bmRlZFRydWVDcm9wKTsKIAotICAgICAgICAgICAgICAgICAgICBQb2ludCBib3VuZHMgPSBnZXRJbWFnZUJvdW5kcygpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYm91bmRzID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KExPR1RBRywgImNhbm5vdCBnZXQgYm91bmRzIGZvciBpbWFnZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZSA9IHRydWU7CkBAIC02MjksMTIgKzY0NCwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuY2xvc2VTaWxlbnRseShpcyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bGxTaXplICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgb3V0IHRoZSB0cnVlIHNhbXBsZSBzaXplIHRoYXQgd2FzIHVzZWQgYnkgdGhlIGRlY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlRG93blNhbXBsZVNpemUgPSBib3VuZHMueCAvIGZ1bGxTaXplLmdldFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtQ3JvcEJvdW5kcy5sZWZ0IC89IHNjYWxlRG93blNhbXBsZVNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICBtQ3JvcEJvdW5kcy50b3AgLz0gc2NhbGVEb3duU2FtcGxlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1Dcm9wQm91bmRzLmJvdHRvbSAvPSBzY2FsZURvd25TYW1wbGVTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgbUNyb3BCb3VuZHMucmlnaHQgLz0gc2NhbGVEb3duU2FtcGxlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1Dcm9wQm91bmRzLnJvdW5kT3V0KHJvdW5kZWRUcnVlQ3JvcCk7CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCB2YWx1ZXMgdG8gYWNjb3VudCBmb3IgaXNzdWVzIHJlbGF0ZWQgdG8gcm91bmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3VuZGVkVHJ1ZUNyb3Aud2lkdGgoKSA+IGZ1bGxTaXplLmdldFdpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIHdpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRlZFRydWVDcm9wLnJpZ2h0ID0gcm91bmRlZFRydWVDcm9wLmxlZnQgKyBmdWxsU2l6ZS5nZXRXaWR0aCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdW5kZWRUcnVlQ3JvcC5yaWdodCA+IGZ1bGxTaXplLmdldFdpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGxlZnQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRqdXN0bWVudCA9IHJvdW5kZWRUcnVlQ3JvcC5sZWZ0IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KDAsIHJvdW5kZWRUcnVlQ3JvcC5yaWdodCAtIHJvdW5kZWRUcnVlQ3JvcC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkVHJ1ZUNyb3AubGVmdCAtPSBhZGp1c3RtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kZWRUcnVlQ3JvcC5yaWdodCAtPSBhZGp1c3RtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdW5kZWRUcnVlQ3JvcC5oZWlnaHQoKSA+IGZ1bGxTaXplLmdldEhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBoZWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkVHJ1ZUNyb3AuYm90dG9tID0gcm91bmRlZFRydWVDcm9wLnRvcCArIGZ1bGxTaXplLmdldEhlaWdodCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdW5kZWRUcnVlQ3JvcC5ib3R0b20gPiBmdWxsU2l6ZS5nZXRIZWlnaHQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgdG9wIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkanVzdG1lbnQgPSByb3VuZGVkVHJ1ZUNyb3AudG9wIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KDAsIHJvdW5kZWRUcnVlQ3JvcC5ib3R0b20gLSByb3VuZGVkVHJ1ZUNyb3AuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kZWRUcnVlQ3JvcC50b3AgLT0gYWRqdXN0bWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkVHJ1ZUNyb3AuYm90dG9tIC09IGFkanVzdG1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgICAgIGNyb3AgPSBCaXRtYXAuY3JlYXRlQml0bWFwKGZ1bGxTaXplLCByb3VuZGVkVHJ1ZUNyb3AubGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRlZFRydWVDcm9wLnRvcCwgcm91bmRlZFRydWVDcm9wLndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kZWRUcnVlQ3JvcC5oZWlnaHQoKSk7CkBAIC03NTgsMTUgKzc5OSwxMyBAQAogICAgICAgICAgICAgV2luZG93TWFuYWdlciB3aW5kb3dNYW5hZ2VyLAogICAgICAgICAgICAgZmluYWwgV2FsbHBhcGVyTWFuYWdlciB3YWxscGFwZXJNYW5hZ2VyKSB7CiAgICAgICAgIGZpbmFsIFBvaW50IGRlZmF1bHRXYWxscGFwZXJTaXplID0gZ2V0RGVmYXVsdFdhbGxwYXBlclNpemUocmVzLCB3aW5kb3dNYW5hZ2VyKTsKLQotICAgICAgICBuZXcgVGhyZWFkKCJzdWdnZXN0V2FsbHBhcGVyRGltZW5zaW9uIikgewotICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgc2F2ZWQgYSB3YWxscGFwZXIgd2lkdGgvaGVpZ2h0LCB1c2UgdGhhdCBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgaW50IHNhdmVkV2lkdGggPSBzaGFyZWRQcmVmcy5nZXRJbnQoV0FMTFBBUEVSX1dJRFRIX0tFWSwgZGVmYXVsdFdhbGxwYXBlclNpemUueCk7Ci0gICAgICAgICAgICAgICAgaW50IHNhdmVkSGVpZ2h0ID0gc2hhcmVkUHJlZnMuZ2V0SW50KFdBTExQQVBFUl9IRUlHSFRfS0VZLCBkZWZhdWx0V2FsbHBhcGVyU2l6ZS55KTsKLSAgICAgICAgICAgICAgICB3YWxscGFwZXJNYW5hZ2VyLnN1Z2dlc3REZXNpcmVkRGltZW5zaW9ucyhzYXZlZFdpZHRoLCBzYXZlZEhlaWdodCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0uc3RhcnQoKTsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBzYXZlZCBhIHdhbGxwYXBlciB3aWR0aC9oZWlnaHQsIHVzZSB0aGF0IGluc3RlYWQKKyAgICAgICAgaW50IHNhdmVkV2lkdGggPSBzaGFyZWRQcmVmcy5nZXRJbnQoV0FMTFBBUEVSX1dJRFRIX0tFWSwgZGVmYXVsdFdhbGxwYXBlclNpemUueCk7CisgICAgICAgIGludCBzYXZlZEhlaWdodCA9IHNoYXJlZFByZWZzLmdldEludChXQUxMUEFQRVJfSEVJR0hUX0tFWSwgZGVmYXVsdFdhbGxwYXBlclNpemUueSk7CisgICAgICAgIGlmIChzYXZlZFdpZHRoICE9IHdhbGxwYXBlck1hbmFnZXIuZ2V0RGVzaXJlZE1pbmltdW1XaWR0aCgpIHx8CisgICAgICAgICAgICAgICAgc2F2ZWRIZWlnaHQgIT0gd2FsbHBhcGVyTWFuYWdlci5nZXREZXNpcmVkTWluaW11bUhlaWdodCgpKSB7CisgICAgICAgICAgICB3YWxscGFwZXJNYW5hZ2VyLnN1Z2dlc3REZXNpcmVkRGltZW5zaW9ucyhzYXZlZFdpZHRoLCBzYXZlZEhlaWdodCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwcm90ZWN0ZWQgc3RhdGljIFJlY3RGIGdldE1heENyb3BSZWN0KApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvc2VydmljZXMvUHJveHkvc3JjL2NvbS9hbmRyb2lkL3Byb3h5aGFuZGxlci9Qcm94eVNlcnZlci5qYXZhIGIvcGFja2FnZXMvc2VydmljZXMvUHJveHkvc3JjL2NvbS9hbmRyb2lkL3Byb3h5aGFuZGxlci9Qcm94eVNlcnZlci5qYXZhCmluZGV4IDEwYmNkYWQuLmVkYjE2MzAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL3NlcnZpY2VzL1Byb3h5L3NyYy9jb20vYW5kcm9pZC9wcm94eWhhbmRsZXIvUHJveHlTZXJ2ZXIuamF2YQorKysgYi9wYWNrYWdlcy9zZXJ2aWNlcy9Qcm94eS9zcmMvY29tL2FuZHJvaWQvcHJveHloYW5kbGVyL1Byb3h5U2VydmVyLmphdmEKQEAgLTE1LDcgKzE1LDYgQEAKICAqLwogcGFja2FnZSBjb20uYW5kcm9pZC5wcm94eWhhbmRsZXI7CiAKLWltcG9ydCBhbmRyb2lkLm5ldC5Qcm94eVByb3BlcnRpZXM7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApAQCAtMjUsNyArMjQsNiBAQAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5JbmV0U29ja2V0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5Qcm94eTsKIGltcG9ydCBqYXZhLm5ldC5Qcm94eVNlbGVjdG9yOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvc2VydmljZXMvUHJveHkvc3JjL2NvbS9hbmRyb2lkL3Byb3h5aGFuZGxlci9Qcm94eVNlcnZpY2UuamF2YSBiL3BhY2thZ2VzL3NlcnZpY2VzL1Byb3h5L3NyYy9jb20vYW5kcm9pZC9wcm94eWhhbmRsZXIvUHJveHlTZXJ2aWNlLmphdmEKaW5kZXggMTA5NDM1Yy4uY2JlYTE4OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvc2VydmljZXMvUHJveHkvc3JjL2NvbS9hbmRyb2lkL3Byb3h5aGFuZGxlci9Qcm94eVNlcnZpY2UuamF2YQorKysgYi9wYWNrYWdlcy9zZXJ2aWNlcy9Qcm94eS9zcmMvY29tL2FuZHJvaWQvcHJveHloYW5kbGVyL1Byb3h5U2VydmljZS5qYXZhCkBAIC0xNywxMiArMTcsOCBAQAogCiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQubmV0LlByb3h5OwotaW1wb3J0IGFuZHJvaWQubmV0LlByb3h5UHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLm5ldC5JUHJveHlDYWxsYmFjazsKIGltcG9ydCBjb20uYW5kcm9pZC5uZXQuSVByb3h5UG9ydExpc3RlbmVyOwpkaWZmIC0tZ2l0IGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9JY29uVXRpbGl0aWVzLmphdmEgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL0ljb25VdGlsaXRpZXMuamF2YQppbmRleCBhNDdjOTA0Li44MmYyNmFkIDEwMDY0NAotLS0gYS9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL0ljb25VdGlsaXRpZXMuamF2YQorKysgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL0ljb25VdGlsaXRpZXMuamF2YQpAQCAtMjQsMjIgKzI0LDEzIEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CbHVyTWFza0ZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yTWF0cml4OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JNYXRyaXhDb2xvckZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnRGbGFnc0RyYXdGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QaXhlbEZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmY7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5UYWJsZU1hc2tGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5UeXBlZmFjZTsKLWltcG9ydCBhbmRyb2lkLnRleHQuTGF5b3V0LkFsaWdubWVudDsKLWltcG9ydCBhbmRyb2lkLnRleHQuU3RhdGljTGF5b3V0OwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0UGFpbnQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRUaGVtZVdyYXBwZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiAKZGlmZiAtLWdpdCBhL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvSW1tZXJzaXZlTW9kZUNvbmZpcm1hdGlvbi5qYXZhIGIvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9JbW1lcnNpdmVNb2RlQ29uZmlybWF0aW9uLmphdmEKaW5kZXggM2U1N2E3Ny4uYjczNGM0MSAxMDA2NDQKLS0tIGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9JbW1lcnNpdmVNb2RlQ29uZmlybWF0aW9uLmphdmEKKysrIGIvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9JbW1lcnNpdmVNb2RlQ29uZmlybWF0aW9uLmphdmEKQEAgLTE3OCw2ICsxNzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfCBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX0hBUkRXQVJFX0FDQ0VMRVJBVEVECiAgICAgICAgICAgICAgICAgLAogICAgICAgICAgICAgICAgIFBpeGVsRm9ybWF0LlRSQU5TTFVDRU5UKTsKKyAgICAgICAgbHAucHJpdmF0ZUZsYWdzIHw9IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlBSSVZBVEVfRkxBR19TSE9XX0ZPUl9BTExfVVNFUlM7CiAgICAgICAgIGxwLnNldFRpdGxlKCJJbW1lcnNpdmVNb2RlQ29uZmlybWF0aW9uIik7CiAgICAgICAgIGxwLndpbmRvd0FuaW1hdGlvbnMgPSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlLkFuaW1hdGlvbl9SZWNlbnRBcHBsaWNhdGlvbnM7CiAgICAgICAgIGxwLmdyYXZpdHkgPSBHcmF2aXR5LkZJTEw7CmRpZmYgLS1naXQgYS9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lTGF5b3V0SW5mbGF0ZXIuamF2YSBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvUGhvbmVMYXlvdXRJbmZsYXRlci5qYXZhCmluZGV4IDk2ODk3NmIuLmRmNmZjYTRjIDEwMDY0NAotLS0gYS9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lTGF5b3V0SW5mbGF0ZXIuamF2YQorKysgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lTGF5b3V0SW5mbGF0ZXIuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeS5pbXBsOwogCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CmRpZmYgLS1naXQgYS9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lV2luZG93LmphdmEgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lV2luZG93LmphdmEKaW5kZXggNDRmYzFmOC4uZDBhYmU5YyAxMDA2NDQKLS0tIGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9QaG9uZVdpbmRvdy5qYXZhCisrKyBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvUGhvbmVXaW5kb3cuamF2YQpAQCAtMjIsNiArMjIsMTEgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuKjsKIAoraW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5T3B0aW9uczsKK2ltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmU7CitpbXBvcnQgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb247CitpbXBvcnQgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb25JbmZsYXRlcjsKK2ltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdDb25maWd1cmF0aW9uOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKQEAgLTUyLDcgKzU3LDYgQEAKIGltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5EZWJ1ZzsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwpAQCAtNjIsNyArNjYsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRXZlbnRMb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkFjdGlvbk1vZGU7CkBAIC0xNDYsNiArMTQ5LDEwIEBACiAgICAgcHJpdmF0ZSBBY3Rpb25NZW51UHJlc2VudGVyQ2FsbGJhY2sgbUFjdGlvbk1lbnVQcmVzZW50ZXJDYWxsYmFjazsKICAgICBwcml2YXRlIFBhbmVsTWVudVByZXNlbnRlckNhbGxiYWNrIG1QYW5lbE1lbnVQcmVzZW50ZXJDYWxsYmFjazsKIAorICAgIHByaXZhdGUgVHJhbnNpdGlvbk1hbmFnZXIgbVRyYW5zaXRpb25NYW5hZ2VyOworICAgIHByaXZhdGUgU2NlbmUgbUNvbnRlbnRTY2VuZTsKKyAgICBwcml2YXRlIEJ1bmRsZSBtVHJhbnNpdGlvbk9wdGlvbnM7CisKICAgICAvLyBUaGUgaWNvbiByZXNvdXJjZSBoYXMgYmVlbiBleHBsaWNpdGx5IHNldCBlbHNld2hlcmUKICAgICAvLyBhbmQgc2hvdWxkIG5vdCBiZSBvdmVyd3JpdHRlbiB3aXRoIGEgZGVmYXVsdC4KICAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfUkVTT1VSQ0VfU0VUX0lDT04gPSAxIDw8IDA7CkBAIC0yODEsMTMgKzI4OCw0MyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBUcmFuc2l0aW9uTWFuYWdlciBnZXRUcmFuc2l0aW9uTWFuYWdlcigpIHsKKyAgICAgICAgcmV0dXJuIG1UcmFuc2l0aW9uTWFuYWdlcjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2l0aW9uTWFuYWdlcihUcmFuc2l0aW9uTWFuYWdlciB0bSkgeworICAgICAgICBtVHJhbnNpdGlvbk1hbmFnZXIgPSB0bTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU2NlbmUgZ2V0Q29udGVudFNjZW5lKCkgeworICAgICAgICByZXR1cm4gbUNvbnRlbnRTY2VuZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2l0aW9uT3B0aW9ucyhCdW5kbGUgb3B0aW9ucykgeworICAgICAgICBtVHJhbnNpdGlvbk9wdGlvbnMgPSBvcHRpb25zOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldENvbnRlbnRWaWV3KGludCBsYXlvdXRSZXNJRCkgeworICAgICAgICAvLyBOb3RlOiBGRUFUVVJFX0NPTlRFTlRfVFJBTlNJVElPTlMgbWF5IGJlIHNldCBpbiB0aGUgcHJvY2VzcyBvZiBpbnN0YWxsaW5nIHRoZSB3aW5kb3cKKyAgICAgICAgLy8gZGVjb3IsIHdoZW4gdGhlbWUgYXR0cmlidXRlcyBhbmQgdGhlIGxpa2UgYXJlIGNyeXN0YWxpemVkLiBEbyBub3QgY2hlY2sgdGhlIGZlYXR1cmUKKyAgICAgICAgLy8gYmVmb3JlIHRoaXMgaGFwcGVucy4KICAgICAgICAgaWYgKG1Db250ZW50UGFyZW50ID09IG51bGwpIHsKICAgICAgICAgICAgIGluc3RhbGxEZWNvcigpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UgaWYgKCFoYXNGZWF0dXJlKEZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OUykpIHsKICAgICAgICAgICAgIG1Db250ZW50UGFyZW50LnJlbW92ZUFsbFZpZXdzKCk7CiAgICAgICAgIH0KLSAgICAgICAgbUxheW91dEluZmxhdGVyLmluZmxhdGUobGF5b3V0UmVzSUQsIG1Db250ZW50UGFyZW50KTsKKworICAgICAgICBpZiAoaGFzRmVhdHVyZShGRUFUVVJFX0NPTlRFTlRfVFJBTlNJVElPTlMpKSB7CisgICAgICAgICAgICBmaW5hbCBTY2VuZSBuZXdTY2VuZSA9IFNjZW5lLmdldFNjZW5lRm9yTGF5b3V0KG1Db250ZW50UGFyZW50LCBsYXlvdXRSZXNJRCwKKyAgICAgICAgICAgICAgICAgICAgZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb25UbyhuZXdTY2VuZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtTGF5b3V0SW5mbGF0ZXIuaW5mbGF0ZShsYXlvdXRSZXNJRCwgbUNvbnRlbnRQYXJlbnQpOworICAgICAgICB9CiAgICAgICAgIGZpbmFsIENhbGxiYWNrIGNiID0gZ2V0Q2FsbGJhY2soKTsKICAgICAgICAgaWYgKGNiICE9IG51bGwgJiYgIWlzRGVzdHJveWVkKCkpIHsKICAgICAgICAgICAgIGNiLm9uQ29udGVudENoYW5nZWQoKTsKQEAgLTMwMSwxMiArMzM4LDIyIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50VmlldyhWaWV3IHZpZXcsIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgcGFyYW1zKSB7CisgICAgICAgIC8vIE5vdGU6IEZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OUyBtYXkgYmUgc2V0IGluIHRoZSBwcm9jZXNzIG9mIGluc3RhbGxpbmcgdGhlIHdpbmRvdworICAgICAgICAvLyBkZWNvciwgd2hlbiB0aGVtZSBhdHRyaWJ1dGVzIGFuZCB0aGUgbGlrZSBhcmUgY3J5c3RhbGl6ZWQuIERvIG5vdCBjaGVjayB0aGUgZmVhdHVyZQorICAgICAgICAvLyBiZWZvcmUgdGhpcyBoYXBwZW5zLgogICAgICAgICBpZiAobUNvbnRlbnRQYXJlbnQgPT0gbnVsbCkgewogICAgICAgICAgICAgaW5zdGFsbERlY29yKCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZSBpZiAoIWhhc0ZlYXR1cmUoRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TKSkgewogICAgICAgICAgICAgbUNvbnRlbnRQYXJlbnQucmVtb3ZlQWxsVmlld3MoKTsKICAgICAgICAgfQotICAgICAgICBtQ29udGVudFBhcmVudC5hZGRWaWV3KHZpZXcsIHBhcmFtcyk7CisKKyAgICAgICAgaWYgKGhhc0ZlYXR1cmUoRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TKSkgeworICAgICAgICAgICAgdmlldy5zZXRMYXlvdXRQYXJhbXMocGFyYW1zKTsKKyAgICAgICAgICAgIGZpbmFsIFNjZW5lIG5ld1NjZW5lID0gbmV3IFNjZW5lKG1Db250ZW50UGFyZW50LCB2aWV3KTsKKyAgICAgICAgICAgIHRyYW5zaXRpb25UbyhuZXdTY2VuZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQ29udGVudFBhcmVudC5hZGRWaWV3KHZpZXcsIHBhcmFtcyk7CisgICAgICAgIH0KICAgICAgICAgZmluYWwgQ2FsbGJhY2sgY2IgPSBnZXRDYWxsYmFjaygpOwogICAgICAgICBpZiAoY2IgIT0gbnVsbCAmJiAhaXNEZXN0cm95ZWQoKSkgewogICAgICAgICAgICAgY2Iub25Db250ZW50Q2hhbmdlZCgpOwpAQCAtMzE4LDYgKzM2NSwxMSBAQAogICAgICAgICBpZiAobUNvbnRlbnRQYXJlbnQgPT0gbnVsbCkgewogICAgICAgICAgICAgaW5zdGFsbERlY29yKCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc0ZlYXR1cmUoRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TKSkgeworICAgICAgICAgICAgLy8gVE9ETyBBdWdtZW50IHRoZSBzY2VuZXMvdHJhbnNpdGlvbnMgQVBJIHRvIHN1cHBvcnQgdGhpcy4KKyAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgImFkZENvbnRlbnRWaWV3IGRvZXMgbm90IHN1cHBvcnQgY29udGVudCB0cmFuc2l0aW9ucyIpOworICAgICAgICB9CiAgICAgICAgIG1Db250ZW50UGFyZW50LmFkZFZpZXcodmlldywgcGFyYW1zKTsKICAgICAgICAgZmluYWwgQ2FsbGJhY2sgY2IgPSBnZXRDYWxsYmFjaygpOwogICAgICAgICBpZiAoY2IgIT0gbnVsbCAmJiAhaXNEZXN0cm95ZWQoKSkgewpAQCAtMzI1LDYgKzM3NywzMyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSB2b2lkIHRyYW5zaXRpb25UbyhTY2VuZSBzY2VuZSkgeworICAgICAgICBUcmFuc2l0aW9uIHNlbGVjdGVkID0gbnVsbDsKKyAgICAgICAgaWYgKG1UcmFuc2l0aW9uT3B0aW9ucyAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eU9wdGlvbnMgb3B0cyA9IG5ldyBBY3Rpdml0eU9wdGlvbnMobVRyYW5zaXRpb25PcHRpb25zKTsKKyAgICAgICAgICAgIG1UcmFuc2l0aW9uT3B0aW9ucyA9IG51bGw7CisKKyAgICAgICAgICAgIFN0cmluZyBzZWxlY3RlZE5hbWUgPSBudWxsOworICAgICAgICAgICAgZm9yIChTdHJpbmcgc2NlbmVOYW1lIDogb3B0cy5nZXREZXN0U2NlbmVOYW1lcygpKSB7CisgICAgICAgICAgICAgICAgZmluYWwgVHJhbnNpdGlvbiB0ID0gbVRyYW5zaXRpb25NYW5hZ2VyLmdldE5hbWVkVHJhbnNpdGlvbihzY2VuZU5hbWUsIHNjZW5lKTsKKyAgICAgICAgICAgICAgICBpZiAodCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gaGFuZGxlIGFyZ3Mvc3RhdGU7IGluamVjdCBpbnRvIHQvY2xvbmUgd2l0aCBwYXJhbXMKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSB0OworICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE5hbWUgPSBzY2VuZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9wdHMuZGlzcGF0Y2hTY2VuZVRyYW5zaXRpb25TdGFydGVkKHNlbGVjdGVkTmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2VsZWN0ZWQgIT0gbnVsbCkgeworICAgICAgICAgICAgVHJhbnNpdGlvbk1hbmFnZXIuZ28oc2NlbmUsIHNlbGVjdGVkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1UcmFuc2l0aW9uTWFuYWdlci50cmFuc2l0aW9uVG8oc2NlbmUpOworICAgICAgICB9CisgICAgICAgIG1Db250ZW50U2NlbmUgPSBzY2VuZTsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgVmlldyBnZXRDdXJyZW50Rm9jdXMoKSB7CiAgICAgICAgIHJldHVybiBtRGVjb3IgIT0gbnVsbCA/IG1EZWNvci5maW5kRm9jdXMoKSA6IG51bGw7CkBAIC0zNjYsNiArNDQ1LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKKyAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyB2b2lkIHNldFRpdGxlQ29sb3IoaW50IHRleHRDb2xvcikgewogICAgICAgICBpZiAobVRpdGxlVmlldyAhPSBudWxsKSB7CiAgICAgICAgICAgICBtVGl0bGVWaWV3LnNldFRleHRDb2xvcih0ZXh0Q29sb3IpOwpAQCAtMjg5MCw2ICsyOTcwLDkgQEAKICAgICAgICAgICAgIGEuZ2V0VmFsdWUoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuV2luZG93X3dpbmRvd0ZpeGVkSGVpZ2h0TWlub3IsCiAgICAgICAgICAgICAgICAgICAgIG1GaXhlZEhlaWdodE1pbm9yKTsKICAgICAgICAgfQorICAgICAgICBpZiAoYS5nZXRCb29sZWFuKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLldpbmRvd193aW5kb3dDb250ZW50VHJhbnNpdGlvbnMsIGZhbHNlKSkgeworICAgICAgICAgICAgcmVxdWVzdEZlYXR1cmUoRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TKTsKKyAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKICAgICAgICAgZmluYWwgaW50IHRhcmdldFNkayA9IGNvbnRleHQuZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbjsKQEAgLTMxNzksNiArMzI2MiwyMCBAQAogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9ubHkgaW5mbGF0ZSBvciBjcmVhdGUgYSBuZXcgVHJhbnNpdGlvbk1hbmFnZXIgaWYgdGhlIGNhbGxlciBoYXNuJ3QKKyAgICAgICAgICAgIC8vIGFscmVhZHkgc2V0IGEgY3VzdG9tIG9uZS4KKyAgICAgICAgICAgIGlmIChoYXNGZWF0dXJlKEZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OUykgJiYgbVRyYW5zaXRpb25NYW5hZ2VyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdHJhbnNpdGlvblJlcyA9IGdldFdpbmRvd1N0eWxlKCkuZ2V0UmVzb3VyY2VJZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLldpbmRvd193aW5kb3dDb250ZW50VHJhbnNpdGlvbk1hbmFnZXIsIDApOworICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uUmVzICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgVHJhbnNpdGlvbkluZmxhdGVyIGluZmxhdGVyID0gVHJhbnNpdGlvbkluZmxhdGVyLmZyb20oZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25NYW5hZ2VyID0gaW5mbGF0ZXIuaW5mbGF0ZVRyYW5zaXRpb25NYW5hZ2VyKHRyYW5zaXRpb25SZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRlbnRQYXJlbnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2l0aW9uTWFuYWdlciA9IG5ldyBUcmFuc2l0aW9uTWFuYWdlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9QaG9uZVdpbmRvd01hbmFnZXIuamF2YSBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvUGhvbmVXaW5kb3dNYW5hZ2VyLmphdmEKaW5kZXggZjMzYWI0MC4uOGU4MzI1NSAxMDA2NDQKLS0tIGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9QaG9uZVdpbmRvd01hbmFnZXIuamF2YQorKysgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lV2luZG93TWFuYWdlci5qYXZhCkBAIC0yMjIsNiArMjIyLDkgQEAKICAgICAvLyBWaWJyYXRvciBwYXR0ZXJuIGZvciBhIHNob3J0IHZpYnJhdGlvbi4KICAgICBsb25nW10gbUtleWJvYXJkVGFwVmliZVBhdHRlcm47CiAKKyAgICAvLyBWaWJyYXRvciBwYXR0ZXJuIGZvciBhIHNob3J0IHZpYnJhdGlvbiB3aGVuIHRhcHBpbmcgb24gYW4gaG91ci9taW51dGUgdGljayBvZiBhIENsb2NrLgorICAgIGxvbmdbXSBtQ2xvY2tUaWNrVmliZVBhdHRlcm47CisKICAgICAvLyBWaWJyYXRvciBwYXR0ZXJuIGZvciBoYXB0aWMgZmVlZGJhY2sgZHVyaW5nIGJvb3Qgd2hlbiBzYWZlIG1vZGUgaXMgZGlzYWJsZWQuCiAgICAgbG9uZ1tdIG1TYWZlTW9kZURpc2FibGVkVmliZVBhdHRlcm47CiAKQEAgLTMwNCwxNyArMzA3LDYgQEAKICAgICBXaW5kb3dTdGF0ZSBtRm9jdXNlZFdpbmRvdzsKICAgICBJQXBwbGljYXRpb25Ub2tlbiBtRm9jdXNlZEFwcDsKIAotICAgIHByaXZhdGUgZmluYWwgY2xhc3MgUG9pbnRlckxvY2F0aW9uUG9pbnRlckV2ZW50TGlzdGVuZXIgaW1wbGVtZW50cyBQb2ludGVyRXZlbnRMaXN0ZW5lciB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblBvaW50ZXJFdmVudChNb3Rpb25FdmVudCBtb3Rpb25FdmVudCkgewotICAgICAgICAgICAgaWYgKG1Qb2ludGVyTG9jYXRpb25WaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtUG9pbnRlckxvY2F0aW9uVmlldy5hZGRQb2ludGVyRXZlbnQobW90aW9uRXZlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUG9pbnRlciBsb2NhdGlvbiB2aWV3IHN0YXRlLCBvbmx5IG1vZGlmaWVkIG9uIHRoZSBtSGFuZGxlciBMb29wZXIuCi0gICAgUG9pbnRlckxvY2F0aW9uUG9pbnRlckV2ZW50TGlzdGVuZXIgbVBvaW50ZXJMb2NhdGlvblBvaW50ZXJFdmVudExpc3RlbmVyOwogICAgIFBvaW50ZXJMb2NhdGlvblZpZXcgbVBvaW50ZXJMb2NhdGlvblZpZXc7CiAKICAgICAvLyBUaGUgY3VycmVudCBzaXplIG9mIHRoZSBzY3JlZW47IHJlYWxseTsgZXh0ZW5kcyBpbnRvIHRoZSBvdmVyc2NhbiBhcmVhIG9mCkBAIC05NjQsNiArOTU2LDggQEAKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmFycmF5LmNvbmZpZ192aXJ0dWFsS2V5VmliZVBhdHRlcm4pOwogICAgICAgICBtS2V5Ym9hcmRUYXBWaWJlUGF0dGVybiA9IGdldExvbmdJbnRBcnJheShtQ29udGV4dC5nZXRSZXNvdXJjZXMoKSwKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmFycmF5LmNvbmZpZ19rZXlib2FyZFRhcFZpYmVQYXR0ZXJuKTsKKyAgICAgICAgbUNsb2NrVGlja1ZpYmVQYXR0ZXJuID0gZ2V0TG9uZ0ludEFycmF5KG1Db250ZXh0LmdldFJlc291cmNlcygpLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXJyYXkuY29uZmlnX2Nsb2NrVGlja1ZpYmVQYXR0ZXJuKTsKICAgICAgICAgbVNhZmVNb2RlRGlzYWJsZWRWaWJlUGF0dGVybiA9IGdldExvbmdJbnRBcnJheShtQ29udGV4dC5nZXRSZXNvdXJjZXMoKSwKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmFycmF5LmNvbmZpZ19zYWZlTW9kZURpc2FibGVkVmliZVBhdHRlcm4pOwogICAgICAgICBtU2FmZU1vZGVFbmFibGVkVmliZVBhdHRlcm4gPSBnZXRMb25nSW50QXJyYXkobUNvbnRleHQuZ2V0UmVzb3VyY2VzKCksCkBAIC0xMTgzLDcgKzExNzcsNiBAQAogICAgICAgICBpZiAobVBvaW50ZXJMb2NhdGlvblZpZXcgPT0gbnVsbCkgewogICAgICAgICAgICAgbVBvaW50ZXJMb2NhdGlvblZpZXcgPSBuZXcgUG9pbnRlckxvY2F0aW9uVmlldyhtQ29udGV4dCk7CiAgICAgICAgICAgICBtUG9pbnRlckxvY2F0aW9uVmlldy5zZXRQcmludENvb3JkcyhmYWxzZSk7Ci0KICAgICAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zIGxwID0gbmV3IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zKAogICAgICAgICAgICAgICAgICAgICBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsCiAgICAgICAgICAgICAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCk7CkBAIC0xMjAzLDIyICsxMTk2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSU5ET1dfU0VSVklDRSk7CiAgICAgICAgICAgICBscC5pbnB1dEZlYXR1cmVzIHw9IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLklOUFVUX0ZFQVRVUkVfTk9fSU5QVVRfQ0hBTk5FTDsKICAgICAgICAgICAgIHdtLmFkZFZpZXcobVBvaW50ZXJMb2NhdGlvblZpZXcsIGxwKTsKLQotICAgICAgICAgICAgbVBvaW50ZXJMb2NhdGlvblBvaW50ZXJFdmVudExpc3RlbmVyID0gbmV3IFBvaW50ZXJMb2NhdGlvblBvaW50ZXJFdmVudExpc3RlbmVyKCk7Ci0gICAgICAgICAgICBtV2luZG93TWFuYWdlckZ1bmNzLnJlZ2lzdGVyUG9pbnRlckV2ZW50TGlzdGVuZXIobVBvaW50ZXJMb2NhdGlvblBvaW50ZXJFdmVudExpc3RlbmVyKTsKKyAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyRnVuY3MucmVnaXN0ZXJQb2ludGVyRXZlbnRMaXN0ZW5lcihtUG9pbnRlckxvY2F0aW9uVmlldyk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGlzYWJsZVBvaW50ZXJMb2NhdGlvbigpIHsKLSAgICAgICAgaWYgKG1Qb2ludGVyTG9jYXRpb25Qb2ludGVyRXZlbnRMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtV2luZG93TWFuYWdlckZ1bmNzLnVucmVnaXN0ZXJQb2ludGVyRXZlbnRMaXN0ZW5lcigKLSAgICAgICAgICAgICAgICAgICAgbVBvaW50ZXJMb2NhdGlvblBvaW50ZXJFdmVudExpc3RlbmVyKTsKLSAgICAgICAgICAgIG1Qb2ludGVyTG9jYXRpb25Qb2ludGVyRXZlbnRMaXN0ZW5lciA9IG51bGw7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAobVBvaW50ZXJMb2NhdGlvblZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgV2luZG93TWFuYWdlciB3bSA9IChXaW5kb3dNYW5hZ2VyKQotICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOworICAgICAgICAgICAgbVdpbmRvd01hbmFnZXJGdW5jcy51bnJlZ2lzdGVyUG9pbnRlckV2ZW50TGlzdGVuZXIobVBvaW50ZXJMb2NhdGlvblZpZXcpOworICAgICAgICAgICAgV2luZG93TWFuYWdlciB3bSA9IChXaW5kb3dNYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOwogICAgICAgICAgICAgd20ucmVtb3ZlVmlldyhtUG9pbnRlckxvY2F0aW9uVmlldyk7CiAgICAgICAgICAgICBtUG9pbnRlckxvY2F0aW9uVmlldyA9IG51bGw7CiAgICAgICAgIH0KQEAgLTMyNzUsOCArMzI2MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtUmVzdHJpY3RlZFNjcmVlbldpZHRoOwogICAgICAgICAgICAgICAgICAgICBwZi5ib3R0b20gPSBkZi5ib3R0b20gPSBvZi5ib3R0b20gPSBjZi5ib3R0b20gPSBtUmVzdHJpY3RlZFNjcmVlblRvcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbVJlc3RyaWN0ZWRTY3JlZW5IZWlnaHQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRycy50eXBlID09IFRZUEVfVE9BU1QgfHwgYXR0cnMudHlwZSA9PSBUWVBFX1NZU1RFTV9BTEVSVCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUb2FzdHMgYXJlIHN0YWJsZSB0byBpbnRlcmltIGRlY29yIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRycy50eXBlID09IFRZUEVfVE9BU1QgfHwgYXR0cnMudHlwZSA9PSBUWVBFX1NZU1RFTV9BTEVSVAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0cnMudHlwZSA9PSBUWVBFX1ZPTFVNRV9PVkVSTEFZKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIGRpYWxvZ3MgYXJlIHN0YWJsZSB0byBpbnRlcmltIGRlY29yIGNoYW5nZXMuCiAgICAgICAgICAgICAgICAgICAgIHBmLmxlZnQgPSBkZi5sZWZ0ID0gb2YubGVmdCA9IGNmLmxlZnQgPSBtU3RhYmxlTGVmdDsKICAgICAgICAgICAgICAgICAgICAgcGYudG9wID0gZGYudG9wID0gb2YudG9wID0gY2YudG9wID0gbVN0YWJsZVRvcDsKICAgICAgICAgICAgICAgICAgICAgcGYucmlnaHQgPSBkZi5yaWdodCA9IG9mLnJpZ2h0ID0gY2YucmlnaHQgPSBtU3RhYmxlUmlnaHQ7CkBAIC0zMzgwLDEzICszMzY2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zIGF0dHJzKSB7CiAgICAgICAgIGlmIChERUJVR19MQVlPVVQpIFNsb2cuaShUQUcsICJXaW4gIiArIHdpbiArICI6IGlzVmlzaWJsZU9yQmVoaW5kS2V5Z3VhcmRMdz0iCiAgICAgICAgICAgICAgICAgKyB3aW4uaXNWaXNpYmxlT3JCZWhpbmRLZXlndWFyZEx3KCkpOwotICAgICAgICBpZiAobVRvcEZ1bGxzY3JlZW5PcGFxdWVXaW5kb3dTdGF0ZSA9PSBudWxsICYmICh3aW4uZ2V0QXR0cnMoKS5wcml2YXRlRmxhZ3MKLSAgICAgICAgICAgICAgICAmV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuUFJJVkFURV9GTEFHX0ZPUkNFX1NIT1dfTkFWX0JBUikgIT0gMAotICAgICAgICAgICAgICAgIHx8ICh3aW4uaXNWaXNpYmxlTHcoKSAmJiBhdHRycy50eXBlID09IFRZUEVfSU5QVVRfTUVUSE9EKSkgewotICAgICAgICAgICAgaWYgKG1Gb3JjaW5nU2hvd05hdkJhckxheWVyIDwgMCkgewotICAgICAgICAgICAgICAgIG1Gb3JjaW5nU2hvd05hdkJhciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbUZvcmNpbmdTaG93TmF2QmFyTGF5ZXIgPSB3aW4uZ2V0U3VyZmFjZUxheWVyKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChtVG9wRnVsbHNjcmVlbk9wYXF1ZVdpbmRvd1N0YXRlID09IG51bGwKKyAgICAgICAgICAgICAgICAmJiB3aW4uaXNWaXNpYmxlTHcoKSAmJiBhdHRycy50eXBlID09IFRZUEVfSU5QVVRfTUVUSE9EKSB7CisgICAgICAgICAgICBtRm9yY2luZ1Nob3dOYXZCYXIgPSB0cnVlOworICAgICAgICAgICAgbUZvcmNpbmdTaG93TmF2QmFyTGF5ZXIgPSB3aW4uZ2V0U3VyZmFjZUxheWVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1Ub3BGdWxsc2NyZWVuT3BhcXVlV2luZG93U3RhdGUgPT0gbnVsbCAmJgogICAgICAgICAgICAgICAgIHdpbi5pc1Zpc2libGVPckJlaGluZEtleWd1YXJkTHcoKSAmJiAhd2luLmlzR29uZUZvckxheW91dEx3KCkpIHsKQEAgLTUwMTksNiArNTAwMiw5IEBACiAgICAgICAgICAgICBjYXNlIEhhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzLktFWUJPQVJEX1RBUDoKICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gbUtleWJvYXJkVGFwVmliZVBhdHRlcm47CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEhhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzLkNMT0NLX1RJQ0s6CisgICAgICAgICAgICAgICAgcGF0dGVybiA9IG1DbG9ja1RpY2tWaWJlUGF0dGVybjsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSGFwdGljRmVlZGJhY2tDb25zdGFudHMuU0FGRV9NT0RFX0RJU0FCTEVEOgogICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBtU2FmZU1vZGVEaXNhYmxlZFZpYmVQYXR0ZXJuOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTIyMCw2ICs1MjA2LDExIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRJbnB1dE1ldGhvZFdpbmRvd1Zpc2libGVIZWlnaHRMdygpIHsKKyAgICAgICAgcmV0dXJuIG1Eb2NrQm90dG9tIC0gbUN1ckJvdHRvbTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50VXNlckx3KGludCBuZXdVc2VySWQpIHsKICAgICAgICAgbUN1cnJlbnRVc2VySWQgPSBuZXdVc2VySWQ7CiAgICAgICAgIGlmIChtS2V5Z3VhcmREZWxlZ2F0ZSAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1JlY2VudEFwcGxpY2F0aW9uc0JhY2tncm91bmQuamF2YSBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvUmVjZW50QXBwbGljYXRpb25zQmFja2dyb3VuZC5qYXZhCmluZGV4IDhkODc3MjguLjM0OTBiZDQgMTAwNjQ0Ci0tLSBhL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvUmVjZW50QXBwbGljYXRpb25zQmFja2dyb3VuZC5qYXZhCisrKyBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvUmVjZW50QXBwbGljYXRpb25zQmFja2dyb3VuZC5qYXZhCkBAIC0yMSw3ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKZGlmZiAtLWdpdCBhL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvU2hvcnRjdXRNYW5hZ2VyLmphdmEgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Nob3J0Y3V0TWFuYWdlci5qYXZhCmluZGV4IDc1YTFiMDEuLmJiODk4ZjcgMTAwNjQ0Ci0tLSBhL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvU2hvcnRjdXRNYW5hZ2VyLmphdmEKKysrIGIvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9TaG9ydGN1dE1hbmFnZXIuamF2YQpAQCAtMjUsNyArMjUsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5LZXlDaGFyYWN0ZXJNYXA7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwogCiBpbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwogCmRpZmYgLS1naXQgYS9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL2tleWd1YXJkL0tleWd1YXJkU2VydmljZURlbGVnYXRlLmphdmEgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL2tleWd1YXJkL0tleWd1YXJkU2VydmljZURlbGVnYXRlLmphdmEKaW5kZXggZTVhZjcxNi4uODEyZTgxNyAxMDA2NDQKLS0tIGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9rZXlndWFyZC9LZXlndWFyZFNlcnZpY2VEZWxlZ2F0ZS5qYXZhCisrKyBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwva2V5Z3VhcmQvS2V5Z3VhcmRTZXJ2aWNlRGVsZWdhdGUuamF2YQpAQCAtMTIsNyArMTIsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvcHJlbG9hZGVkLWNsYXNzZXMgYi9wcmVsb2FkZWQtY2xhc3NlcwppbmRleCAzNDIxMjZkLi40MjQxMmM2IDEwMDY0NAotLS0gYS9wcmVsb2FkZWQtY2xhc3NlcworKysgYi9wcmVsb2FkZWQtY2xhc3NlcwpAQCAtOTc3LDE0ICs5NzcsMTMgQEAKIGFuZHJvaWQudmlldy5EaXNwbGF5SW5mbwogYW5kcm9pZC52aWV3LkRpc3BsYXlJbmZvJDEKIGFuZHJvaWQudmlldy5EaXNwbGF5TGlzdAorYW5kcm9pZC52aWV3LkRpc3BsYXlMaXN0JERpc3BsYXlMaXN0RmluYWxpemVyCiBhbmRyb2lkLnZpZXcuRmFsbGJhY2tFdmVudEhhbmRsZXIKIGFuZHJvaWQudmlldy5Gb2N1c0ZpbmRlcgogYW5kcm9pZC52aWV3LkZvY3VzRmluZGVyJDEKIGFuZHJvaWQudmlldy5Gb2N1c0ZpbmRlciRTZXF1ZW50aWFsRm9jdXNDb21wYXJhdG9yCiBhbmRyb2lkLnZpZXcuR0xFUzIwQ2FudmFzCiBhbmRyb2lkLnZpZXcuR0xFUzIwQ2FudmFzJENhbnZhc0ZpbmFsaXplcgotYW5kcm9pZC52aWV3LkdMRVMyMERpc3BsYXlMaXN0Ci1hbmRyb2lkLnZpZXcuR0xFUzIwRGlzcGxheUxpc3QkRGlzcGxheUxpc3RGaW5hbGl6ZXIKIGFuZHJvaWQudmlldy5HTEVTMjBMYXllcgogYW5kcm9pZC52aWV3LkdMRVMyMExheWVyJEZpbmFsaXplcgogYW5kcm9pZC52aWV3LkdMRVMyMFJlY29yZGluZ0NhbnZhcwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTkxYjU0Ci0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uLmphdmEKQEAgLTAsMCArMSwxODY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OworaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CitpbXBvcnQgYW5kcm9pZC5vcy5UcmFjZTsKKworLyoqCisgKiA8cD4gVGhpcyBjbGFzcyBwcm92aWRlcyB0aGUgcHJpbWFyeSBtZXRob2QgdGhyb3VnaCB3aGljaCBkYXRhIGlzIHBhc3NlZCB0bworICogYW5kIGZyb20gUmVuZGVyU2NyaXB0IGtlcm5lbHMuICBBbiBBbGxvY2F0aW9uIHByb3ZpZGVzIHRoZSBiYWNraW5nIHN0b3JlIGZvcgorICogYSBnaXZlbiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuVHlwZX0uICA8L3A+CisgKgorICogPHA+QW4gQWxsb2NhdGlvbiBhbHNvIGNvbnRhaW5zIGEgc2V0IG9mIHVzYWdlIGZsYWdzIHRoYXQgZGVub3RlIGhvdyB0aGUKKyAqIEFsbG9jYXRpb24gY291bGQgYmUgdXNlZC4gRm9yIGV4YW1wbGUsIGFuIEFsbG9jYXRpb24gbWF5IGhhdmUgdXNhZ2UgZmxhZ3MKKyAqIHNwZWNpZnlpbmcgdGhhdCBpdCBjYW4gYmUgdXNlZCBmcm9tIGEgc2NyaXB0IGFzIHdlbGwgYXMgaW5wdXQgdG8gYSB7QGxpbmsKKyAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LlNhbXBsZXJ9LiBBIGRldmVsb3BlciBtdXN0IHN5bmNocm9uaXplIGFjcm9zcyB0aGVzZQorICogZGlmZmVyZW50IHVzYWdlcyB1c2luZyB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiNzeW5jQWxsfSBpbgorICogb3JkZXIgdG8gZW5zdXJlIHRoYXQgZGlmZmVyZW50IHVzZXJzIG9mIHRoZSBBbGxvY2F0aW9uIGhhdmUgYSBjb25zaXN0ZW50IHZpZXcKKyAqIG9mIG1lbW9yeS4gRm9yIGV4YW1wbGUsIGluIHRoZSBjYXNlIHdoZXJlIGFuIEFsbG9jYXRpb24gaXMgdXNlZCBhcyB0aGUgb3V0cHV0CisgKiBvZiBvbmUga2VybmVsIGFuZCBhcyBTYW1wbGVyIGlucHV0IGluIGEgbGF0ZXIga2VybmVsLCBhIGRldmVsb3BlciBtdXN0IGNhbGwKKyAqIHtAbGluayAjc3luY0FsbCBzeW5jQWxsKEFsbG9jYXRpb24uVVNBR0VfU0NSSVBUKX0gcHJpb3IgdG8gbGF1bmNoaW5nIHRoZQorICogc2Vjb25kIGtlcm5lbCB0byBlbnN1cmUgY29ycmVjdG5lc3MuCisgKgorICogPHA+QW4gQWxsb2NhdGlvbiBjYW4gYmUgcG9wdWxhdGVkIHdpdGggdGhlIHtAbGluayAjY29weUZyb219IHJvdXRpbmVzLiBGb3IKKyAqIG1vcmUgY29tcGxleCBFbGVtZW50IHR5cGVzLCB0aGUge0BsaW5rICNjb3B5RnJvbVVuY2hlY2tlZH0gbWV0aG9kcyBjYW4gYmUKKyAqIHVzZWQgdG8gY29weSBmcm9tIGJ5dGUgYXJyYXlzIG9yIHNpbWlsYXIgY29uc3RydWN0cy48L3A+CisgKgorICogPGRpdiBjbGFzcz0ic3BlY2lhbCByZWZlcmVuY2UiPgorICogPGgzPkRldmVsb3BlciBHdWlkZXM8L2gzPgorICogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIFJlbmRlclNjcmlwdCwgcmVhZCB0aGUKKyAqIDxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVuZGVyc2NyaXB0L2luZGV4Lmh0bWwiPlJlbmRlclNjcmlwdDwvYT4gZGV2ZWxvcGVyIGd1aWRlLjwvcD4KKyAqIDwvZGl2PgorICoqLworcHVibGljIGNsYXNzIEFsbG9jYXRpb24gZXh0ZW5kcyBCYXNlT2JqIHsKKyAgICBUeXBlIG1UeXBlOworICAgIEJpdG1hcCBtQml0bWFwOworICAgIGludCBtVXNhZ2U7CisgICAgQWxsb2NhdGlvbiBtQWRhcHRlZEFsbG9jYXRpb247CisgICAgaW50IG1TaXplOworCisgICAgYm9vbGVhbiBtQ29uc3RyYWluZWRMT0Q7CisgICAgYm9vbGVhbiBtQ29uc3RyYWluZWRGYWNlOworICAgIGJvb2xlYW4gbUNvbnN0cmFpbmVkWTsKKyAgICBib29sZWFuIG1Db25zdHJhaW5lZFo7CisgICAgYm9vbGVhbiBtUmVhZEFsbG93ZWQgPSB0cnVlOworICAgIGJvb2xlYW4gbVdyaXRlQWxsb3dlZCA9IHRydWU7CisgICAgaW50IG1TZWxlY3RlZFk7CisgICAgaW50IG1TZWxlY3RlZFo7CisgICAgaW50IG1TZWxlY3RlZExPRDsKKyAgICBUeXBlLkN1YmVtYXBGYWNlIG1TZWxlY3RlZEZhY2UgPSBUeXBlLkN1YmVtYXBGYWNlLlBPU0lUSVZFX1g7CisKKyAgICBpbnQgbUN1cnJlbnREaW1YOworICAgIGludCBtQ3VycmVudERpbVk7CisgICAgaW50IG1DdXJyZW50RGltWjsKKyAgICBpbnQgbUN1cnJlbnRDb3VudDsKKyAgICBzdGF0aWMgSGFzaE1hcDxMb25nLCBBbGxvY2F0aW9uPiBtQWxsb2NhdGlvbk1hcCA9CisgICAgICAgICAgICBuZXcgSGFzaE1hcDxMb25nLCBBbGxvY2F0aW9uPigpOworICAgIE9uQnVmZmVyQXZhaWxhYmxlTGlzdGVuZXIgbUJ1ZmZlck5vdGlmaWVyOworCisgICAgcHJpdmF0ZSBFbGVtZW50LkRhdGFUeXBlIHZhbGlkYXRlT2JqZWN0SXNQcmltaXRpdmVBcnJheShPYmplY3QgZCwgYm9vbGVhbiBjaGVja1R5cGUpIHsKKyAgICAgICAgZmluYWwgQ2xhc3MgYyA9IGQuZ2V0Q2xhc3MoKTsKKyAgICAgICAgaWYgKCFjLmlzQXJyYXkoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPYmplY3QgcGFzc2VkIGlzIG5vdCBhbiBhcnJheSBvZiBwcmltaXRpdmVzLiIpOworICAgICAgICB9CisgICAgICAgIGZpbmFsIENsYXNzIGNtcCA9IGMuZ2V0Q29tcG9uZW50VHlwZSgpOworICAgICAgICBpZiAoIWNtcC5pc1ByaW1pdGl2ZSgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk9iamVjdCBwYXNzZWQgaXMgbm90IGFuIEFycmF5IG9mIHByaW1pdGl2ZXMuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY21wID09IExvbmcuVFlQRSkgeworICAgICAgICAgICAgaWYgKGNoZWNrVHlwZSkgeworICAgICAgICAgICAgICAgIHZhbGlkYXRlSXNJbnQ2NCgpOworICAgICAgICAgICAgICAgIHJldHVybiBtVHlwZS5tRWxlbWVudC5tVHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF82NDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbXAgPT0gSW50ZWdlci5UWVBFKSB7CisgICAgICAgICAgICBpZiAoY2hlY2tUeXBlKSB7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVJc0ludDMyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1UeXBlLm1FbGVtZW50Lm1UeXBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzMyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNtcCA9PSBTaG9ydC5UWVBFKSB7CisgICAgICAgICAgICBpZiAoY2hlY2tUeXBlKSB7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVJc0ludDE2KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1UeXBlLm1FbGVtZW50Lm1UeXBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzE2OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNtcCA9PSBCeXRlLlRZUEUpIHsKKyAgICAgICAgICAgIGlmIChjaGVja1R5cGUpIHsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUlzSW50OCgpOworICAgICAgICAgICAgICAgIHJldHVybiBtVHlwZS5tRWxlbWVudC5tVHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF84OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNtcCA9PSBGbG9hdC5UWVBFKSB7CisgICAgICAgICAgICBpZiAoY2hlY2tUeXBlKSB7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVJc0Zsb2F0MzIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNtcCA9PSBEb3VibGUuVFlQRSkgeworICAgICAgICAgICAgaWYgKGNoZWNrVHlwZSkgeworICAgICAgICAgICAgICAgIHZhbGlkYXRlSXNGbG9hdDY0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gRWxlbWVudC5EYXRhVHlwZS5GTE9BVF82NDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFRoZSB1c2FnZSBvZiB0aGUgQWxsb2NhdGlvbi4gIFRoZXNlIHNpZ25hbCB0byBSZW5kZXJTY3JpcHQgd2hlcmUgdG8gcGxhY2UKKyAgICAgKiB0aGUgQWxsb2NhdGlvbiBpbiBtZW1vcnkuCisgICAgICoKKyAgICAgKi8KKworICAgIC8qKgorICAgICAqIFRoZSBBbGxvY2F0aW9uIHdpbGwgYmUgYm91bmQgdG8gYW5kIGFjY2Vzc2VkIGJ5IHNjcmlwdHMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNBR0VfU0NSSVBUID0gMHgwMDAxOworCisgICAgLyoqCisgICAgICogVGhlIEFsbG9jYXRpb24gd2lsbCBiZSB1c2VkIGFzIGEgdGV4dHVyZSBzb3VyY2UgYnkgb25lIG9yIG1vcmUgZ3JhcGhpY3MKKyAgICAgKiBwcm9ncmFtcy4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTQUdFX0dSQVBISUNTX1RFWFRVUkUgPSAweDAwMDI7CisKKyAgICAvKioKKyAgICAgKiBUaGUgQWxsb2NhdGlvbiB3aWxsIGJlIHVzZWQgYXMgYSBncmFwaGljcyBtZXNoLgorICAgICAqCisgICAgICogVGhpcyB3YXMgZGVwcmVjYXRlZCBpbiBBUEkgbGV2ZWwgMTYuCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0FHRV9HUkFQSElDU19WRVJURVggPSAweDAwMDQ7CisKKworICAgIC8qKgorICAgICAqIFRoZSBBbGxvY2F0aW9uIHdpbGwgYmUgdXNlZCBhcyB0aGUgc291cmNlIG9mIHNoYWRlciBjb25zdGFudHMgYnkgb25lIG9yCisgICAgICogbW9yZSBwcm9ncmFtcy4KKyAgICAgKgorICAgICAqIFRoaXMgd2FzIGRlcHJlY2F0ZWQgaW4gQVBJIGxldmVsIDE2LgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNBR0VfR1JBUEhJQ1NfQ09OU1RBTlRTID0gMHgwMDA4OworCisgICAgLyoqCisgICAgICogVGhlIEFsbG9jYXRpb24gd2lsbCBiZSB1c2VkIGFzIGEgdGFyZ2V0IGZvciBvZmZzY3JlZW4gcmVuZGVyaW5nCisgICAgICoKKyAgICAgKiBUaGlzIHdhcyBkZXByZWNhdGVkIGluIEFQSSBsZXZlbCAxNi4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTQUdFX0dSQVBISUNTX1JFTkRFUl9UQVJHRVQgPSAweDAwMTA7CisKKyAgICAvKioKKyAgICAgKiBUaGUgQWxsb2NhdGlvbiB3aWxsIGJlIHVzZWQgYXMgYSB7QGxpbmsgYW5kcm9pZC52aWV3LlN1cmZhY2V9CisgICAgICogY29uc3VtZXIuICBUaGlzIHVzYWdlIHdpbGwgY2F1c2UgdGhlIEFsbG9jYXRpb24gdG8gYmUgY3JlYXRlZAorICAgICAqIGFzIHJlYWQtb25seS4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTQUdFX0lPX0lOUFVUID0gMHgwMDIwOworCisgICAgLyoqCisgICAgICogVGhlIEFsbG9jYXRpb24gd2lsbCBiZSB1c2VkIGFzIGEge0BsaW5rIGFuZHJvaWQudmlldy5TdXJmYWNlfQorICAgICAqIHByb2R1Y2VyLiAgVGhlIGRpbWVuc2lvbnMgYW5kIGZvcm1hdCBvZiB0aGUge0BsaW5rCisgICAgICogYW5kcm9pZC52aWV3LlN1cmZhY2V9IHdpbGwgYmUgZm9yY2VkIHRvIHRob3NlIG9mIHRoZQorICAgICAqIEFsbG9jYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0FHRV9JT19PVVRQVVQgPSAweDAwNDA7CisKKyAgICAvKioKKyAgICAgKiBUaGUgQWxsb2NhdGlvbidzIGJhY2tpbmcgc3RvcmUgd2lsbCBiZSBpbmhlcml0ZWQgZnJvbSBhbm90aGVyIG9iamVjdAorICAgICAqICh1c3VhbGx5IGEge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwfSk7IGNvcHlpbmcgdG8gb3IgZnJvbSB0aGUKKyAgICAgKiBvcmlnaW5hbCBzb3VyY2UgQml0bWFwIHdpbGwgY2F1c2UgYSBzeW5jaHJvbml6YXRpb24gcmF0aGVyIHRoYW4gYSBmdWxsCisgICAgICogY29weS4gIHtAbGluayAjc3luY0FsbH0gbWF5IGFsc28gYmUgdXNlZCB0byBzeW5jaHJvbml6ZSB0aGUgQWxsb2NhdGlvbgorICAgICAqIGFuZCB0aGUgc291cmNlIEJpdG1hcC4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgaXMgc2V0IGJ5IGRlZmF1bHQgZm9yIGFsbG9jYXRpb25zIGNyZWF0ZWQgd2l0aCB7QGxpbmsKKyAgICAgKiAjY3JlYXRlRnJvbUJpdG1hcH0gaW4gQVBJIHZlcnNpb24gMTggYW5kIGhpZ2hlci48L3A+CisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0FHRV9TSEFSRUQgPSAweDAwODA7CisKKyAgICAvKioKKyAgICAgKiBDb250cm9scyBtaXBtYXAgYmVoYXZpb3Igd2hlbiB1c2luZyB0aGUgYml0bWFwIGNyZWF0aW9uIGFuZCB1cGRhdGUKKyAgICAgKiBmdW5jdGlvbnMuCisgICAgICovCisgICAgcHVibGljIGVudW0gTWlwbWFwQ29udHJvbCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBObyBtaXBtYXBzIHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCB0aGUgdHlwZSBnZW5lcmF0ZWQgZnJvbSB0aGUgaW5jb21pbmcKKyAgICAgICAgICogYml0bWFwIHdpbGwgbm90IGNvbnRhaW4gYWRkaXRpb25hbCBMT0RzLgorICAgICAgICAgKi8KKyAgICAgICAgTUlQTUFQX05PTkUoMCksCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgZnVsbCBtaXBtYXAgY2hhaW4gd2lsbCBiZSBjcmVhdGVkIGluIHNjcmlwdCBtZW1vcnkuICBUaGUgVHlwZSBvZgorICAgICAgICAgKiB0aGUgQWxsb2NhdGlvbiB3aWxsIGNvbnRhaW4gYSBmdWxsIG1pcG1hcCBjaGFpbi4gIE9uIHVwbG9hZCwgdGhlIGZ1bGwKKyAgICAgICAgICogY2hhaW4gd2lsbCBiZSB0cmFuc2ZlcnJlZC4KKyAgICAgICAgICovCisgICAgICAgIE1JUE1BUF9GVUxMKDEpLAorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgVHlwZSBvZiB0aGUgQWxsb2NhdGlvbiB3aWxsIGJlIHRoZSBzYW1lIGFzIE1JUE1BUF9OT05FLiAgSXQgd2lsbAorICAgICAgICAgKiBub3QgY29udGFpbiBtaXBtYXBzLiAgT24gdXBsb2FkLCB0aGUgYWxsb2NhdGlvbiBkYXRhIHdpbGwgY29udGFpbiBhCisgICAgICAgICAqIGZ1bGwgbWlwbWFwIGNoYWluIGdlbmVyYXRlZCBmcm9tIHRoZSB0b3AgbGV2ZWwgaW4gc2NyaXB0IG1lbW9yeS4KKyAgICAgICAgICovCisgICAgICAgIE1JUE1BUF9PTl9TWU5DX1RPX1RFWFRVUkUoMik7CisKKyAgICAgICAgaW50IG1JRDsKKyAgICAgICAgTWlwbWFwQ29udHJvbChpbnQgaWQpIHsKKyAgICAgICAgICAgIG1JRCA9IGlkOworICAgICAgICB9CisgICAgfQorCisKKyAgICBwcml2YXRlIGxvbmcgZ2V0SURTYWZlKCkgeworICAgICAgICBpZiAobUFkYXB0ZWRBbGxvY2F0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBtQWRhcHRlZEFsbG9jYXRpb24uZ2V0SUQobVJTKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2V0SUQobVJTKTsKKyAgICB9CisKKworICAgLyoqCisgICAgICogR2V0IHRoZSB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gb2YgdGhlIHtAbGluaworICAgICAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LlR5cGV9IG9mIHRoZSBBbGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHJldHVybiBFbGVtZW50CisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCkgeworICAgICAgICByZXR1cm4gbVR5cGUuZ2V0RWxlbWVudCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgdXNhZ2UgZmxhZ3Mgb2YgdGhlIEFsbG9jYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHVzYWdlIHRoaXMgQWxsb2NhdGlvbidzIHNldCBvZiB0aGUgVVNBR0VfKiBmbGFncyBPUidkIHRvZ2V0aGVyCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFVzYWdlKCkgeworICAgICAgICByZXR1cm4gbVVzYWdlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgQWxsb2NhdGlvbiBpbiBieXRlcy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gc2l6ZSBvZiB0aGUgQWxsb2NhdGlvbiBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0Qnl0ZXNTaXplKCkgeworICAgICAgICBpZiAobVR5cGUubURpbVl1diAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gKGludClNYXRoLmNlaWwobVR5cGUuZ2V0Q291bnQoKSAqIG1UeXBlLmdldEVsZW1lbnQoKS5nZXRCeXRlc1NpemUoKSAqIDEuNSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1UeXBlLmdldENvdW50KCkgKiBtVHlwZS5nZXRFbGVtZW50KCkuZ2V0Qnl0ZXNTaXplKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUNhY2hlSW5mbyhUeXBlIHQpIHsKKyAgICAgICAgbUN1cnJlbnREaW1YID0gdC5nZXRYKCk7CisgICAgICAgIG1DdXJyZW50RGltWSA9IHQuZ2V0WSgpOworICAgICAgICBtQ3VycmVudERpbVogPSB0LmdldFooKTsKKyAgICAgICAgbUN1cnJlbnRDb3VudCA9IG1DdXJyZW50RGltWDsKKyAgICAgICAgaWYgKG1DdXJyZW50RGltWSA+IDEpIHsKKyAgICAgICAgICAgIG1DdXJyZW50Q291bnQgKj0gbUN1cnJlbnREaW1ZOworICAgICAgICB9CisgICAgICAgIGlmIChtQ3VycmVudERpbVogPiAxKSB7CisgICAgICAgICAgICBtQ3VycmVudENvdW50ICo9IG1DdXJyZW50RGltWjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRCaXRtYXAoQml0bWFwIGIpIHsKKyAgICAgICAgbUJpdG1hcCA9IGI7CisgICAgfQorCisgICAgQWxsb2NhdGlvbihsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMsIFR5cGUgdCwgaW50IHVzYWdlKSB7CisgICAgICAgIHN1cGVyKGlkLCBycyk7CisgICAgICAgIGlmICgodXNhZ2UgJiB+KFVTQUdFX1NDUklQVCB8CisgICAgICAgICAgICAgICAgICAgICAgIFVTQUdFX0dSQVBISUNTX1RFWFRVUkUgfAorICAgICAgICAgICAgICAgICAgICAgICBVU0FHRV9HUkFQSElDU19WRVJURVggfAorICAgICAgICAgICAgICAgICAgICAgICBVU0FHRV9HUkFQSElDU19DT05TVEFOVFMgfAorICAgICAgICAgICAgICAgICAgICAgICBVU0FHRV9HUkFQSElDU19SRU5ERVJfVEFSR0VUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgVVNBR0VfSU9fSU5QVVQgfAorICAgICAgICAgICAgICAgICAgICAgICBVU0FHRV9JT19PVVRQVVQgfAorICAgICAgICAgICAgICAgICAgICAgICBVU0FHRV9TSEFSRUQpKSAhPSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVua25vd24gdXNhZ2Ugc3BlY2lmaWVkLiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCh1c2FnZSAmIFVTQUdFX0lPX0lOUFVUKSAhPSAwKSB7CisgICAgICAgICAgICBtV3JpdGVBbGxvd2VkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICgodXNhZ2UgJiB+KFVTQUdFX0lPX0lOUFVUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQUdFX0dSQVBISUNTX1RFWFRVUkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBR0VfU0NSSVBUKSkgIT0gMCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCB1c2FnZSBjb21iaW5hdGlvbi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1UeXBlID0gdDsKKyAgICAgICAgbVVzYWdlID0gdXNhZ2U7CisKKyAgICAgICAgaWYgKHQgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gVE9ETzogQTNEIGRvZXNuJ3QgaGF2ZSBUeXBlIGluZm8gZHVyaW5nIGNyZWF0aW9uLCBzbyB3ZSBjYW4ndAorICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBzaXplIGFoZWFkIG9mIHRpbWUuIFdlIGNhbiBwb3NzaWJseSBhZGQgYSBtZXRob2QKKyAgICAgICAgICAgIC8vIHRvIHVwZGF0ZSB0aGUgc2l6ZSBpbiB0aGUgZnV0dXJlIGlmIGl0IHNlZW1zIHJlYXNvbmFibGUuCisgICAgICAgICAgICBtU2l6ZSA9IG1UeXBlLmdldENvdW50KCkgKiBtVHlwZS5nZXRFbGVtZW50KCkuZ2V0Qnl0ZXNTaXplKCk7CisgICAgICAgICAgICB1cGRhdGVDYWNoZUluZm8odCk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFJlbmRlclNjcmlwdC5yZWdpc3Rlck5hdGl2ZUFsbG9jYXRpb24uaW52b2tlKFJlbmRlclNjcmlwdC5zUnVudGltZSwgbVNpemUpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmUoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJDb3VsZG4ndCBpbnZva2UgcmVnaXN0ZXJOYXRpdmVBbGxvY2F0aW9uOiIgKyBlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIkNvdWxkbid0IGludm9rZSByZWdpc3Rlck5hdGl2ZUFsbG9jYXRpb246IiArIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgUmVuZGVyU2NyaXB0LnJlZ2lzdGVyTmF0aXZlRnJlZS5pbnZva2UoUmVuZGVyU2NyaXB0LnNSdW50aW1lLCBtU2l6ZSk7CisgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlSXNJbnQ2NCgpIHsKKyAgICAgICAgaWYgKChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF82NCkgfHwKKyAgICAgICAgICAgIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlVOU0lHTkVEXzY0KSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICI2NCBiaXQgaW50ZWdlciBzb3VyY2UgZG9lcyBub3QgbWF0Y2ggYWxsb2NhdGlvbiB0eXBlICIgKyBtVHlwZS5tRWxlbWVudC5tVHlwZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlSXNJbnQzMigpIHsKKyAgICAgICAgaWYgKChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF8zMikgfHwKKyAgICAgICAgICAgIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlVOU0lHTkVEXzMyKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICIzMiBiaXQgaW50ZWdlciBzb3VyY2UgZG9lcyBub3QgbWF0Y2ggYWxsb2NhdGlvbiB0eXBlICIgKyBtVHlwZS5tRWxlbWVudC5tVHlwZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlSXNJbnQxNigpIHsKKyAgICAgICAgaWYgKChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF8xNikgfHwKKyAgICAgICAgICAgIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlVOU0lHTkVEXzE2KSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICIxNiBiaXQgaW50ZWdlciBzb3VyY2UgZG9lcyBub3QgbWF0Y2ggYWxsb2NhdGlvbiB0eXBlICIgKyBtVHlwZS5tRWxlbWVudC5tVHlwZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlSXNJbnQ4KCkgeworICAgICAgICBpZiAoKG1UeXBlLm1FbGVtZW50Lm1UeXBlID09IEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzgpIHx8CisgICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5VTlNJR05FRF84KSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICI4IGJpdCBpbnRlZ2VyIHNvdXJjZSBkb2VzIG5vdCBtYXRjaCBhbGxvY2F0aW9uIHR5cGUgIiArIG1UeXBlLm1FbGVtZW50Lm1UeXBlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVJc0Zsb2F0MzIoKSB7CisgICAgICAgIGlmIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgIjMyIGJpdCBmbG9hdCBzb3VyY2UgZG9lcyBub3QgbWF0Y2ggYWxsb2NhdGlvbiB0eXBlICIgKyBtVHlwZS5tRWxlbWVudC5tVHlwZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlSXNGbG9hdDY0KCkgeworICAgICAgICBpZiAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5GTE9BVF82NCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICI2NCBiaXQgZmxvYXQgc291cmNlIGRvZXMgbm90IG1hdGNoIGFsbG9jYXRpb24gdHlwZSAiICsgbVR5cGUubUVsZW1lbnQubVR5cGUpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUlzT2JqZWN0KCkgeworICAgICAgICBpZiAoKG1UeXBlLm1FbGVtZW50Lm1UeXBlID09IEVsZW1lbnQuRGF0YVR5cGUuUlNfRUxFTUVOVCkgfHwKKyAgICAgICAgICAgIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlJTX1RZUEUpIHx8CisgICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5SU19BTExPQ0FUSU9OKSB8fAorICAgICAgICAgICAgKG1UeXBlLm1FbGVtZW50Lm1UeXBlID09IEVsZW1lbnQuRGF0YVR5cGUuUlNfU0FNUExFUikgfHwKKyAgICAgICAgICAgIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlJTX1NDUklQVCkgfHwKKyAgICAgICAgICAgIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlJTX01FU0gpIHx8CisgICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5SU19QUk9HUkFNX0ZSQUdNRU5UKSB8fAorICAgICAgICAgICAgKG1UeXBlLm1FbGVtZW50Lm1UeXBlID09IEVsZW1lbnQuRGF0YVR5cGUuUlNfUFJPR1JBTV9WRVJURVgpIHx8CisgICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5SU19QUk9HUkFNX1JBU1RFUikgfHwKKyAgICAgICAgICAgIChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlJTX1BST0dSQU1fU1RPUkUpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgIk9iamVjdCBzb3VyY2UgZG9lcyBub3QgbWF0Y2ggYWxsb2NhdGlvbiB0eXBlICIgKyBtVHlwZS5tRWxlbWVudC5tVHlwZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCB1cGRhdGVGcm9tTmF0aXZlKCkgeworICAgICAgICBzdXBlci51cGRhdGVGcm9tTmF0aXZlKCk7CisgICAgICAgIGxvbmcgdHlwZUlEID0gbVJTLm5BbGxvY2F0aW9uR2V0VHlwZShnZXRJRChtUlMpKTsKKyAgICAgICAgaWYodHlwZUlEICE9IDApIHsKKyAgICAgICAgICAgIG1UeXBlID0gbmV3IFR5cGUodHlwZUlELCBtUlMpOworICAgICAgICAgICAgbVR5cGUudXBkYXRlRnJvbU5hdGl2ZSgpOworICAgICAgICAgICAgdXBkYXRlQ2FjaGVJbmZvKG1UeXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LlR5cGV9IG9mIHRoZSBBbGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHJldHVybiBUeXBlCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgVHlwZSBnZXRUeXBlKCkgeworICAgICAgICByZXR1cm4gbVR5cGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJvcGFnYXRlIGNoYW5nZXMgZnJvbSBvbmUgdXNhZ2Ugb2YgdGhlIEFsbG9jYXRpb24gdG8gdGhlCisgICAgICogb3RoZXIgdXNhZ2VzIG9mIHRoZSBBbGxvY2F0aW9uLgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3luY0FsbChpbnQgc3JjTG9jYXRpb24pIHsKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAic3luY0FsbCIpOworICAgICAgICBzd2l0Y2ggKHNyY0xvY2F0aW9uKSB7CisgICAgICAgIGNhc2UgVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRToKKyAgICAgICAgY2FzZSBVU0FHRV9TQ1JJUFQ6CisgICAgICAgICAgICBpZiAoKG1Vc2FnZSAmIFVTQUdFX1NIQVJFRCkgIT0gMCkgeworICAgICAgICAgICAgICAgIGNvcHlGcm9tKG1CaXRtYXApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVVNBR0VfR1JBUEhJQ1NfQ09OU1RBTlRTOgorICAgICAgICBjYXNlIFVTQUdFX0dSQVBISUNTX1ZFUlRFWDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVTQUdFX1NIQVJFRDoKKyAgICAgICAgICAgIGlmICgobVVzYWdlICYgVVNBR0VfU0hBUkVEKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgY29weVRvKG1CaXRtYXApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNvdXJjZSBtdXN0IGJlIGV4YWN0bHkgb25lIHVzYWdlIHR5cGUuIik7CisgICAgICAgIH0KKyAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgIG1SUy5uQWxsb2NhdGlvblN5bmNBbGwoZ2V0SURTYWZlKCksIHNyY0xvY2F0aW9uKTsKKyAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VuZCBhIGJ1ZmZlciB0byB0aGUgb3V0cHV0IHN0cmVhbS4gIFRoZSBjb250ZW50cyBvZiB0aGUgQWxsb2NhdGlvbiB3aWxsCisgICAgICogYmUgdW5kZWZpbmVkIGFmdGVyIHRoaXMgb3BlcmF0aW9uLiBUaGlzIG9wZXJhdGlvbiBpcyBvbmx5IHZhbGlkIGlmIHtAbGluaworICAgICAqICNVU0FHRV9JT19PVVRQVVR9IGlzIHNldCBvbiB0aGUgQWxsb2NhdGlvbi4KKyAgICAgKgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHZvaWQgaW9TZW5kKCkgeworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJpb1NlbmQiKTsKKyAgICAgICAgaWYgKChtVXNhZ2UgJiBVU0FHRV9JT19PVVRQVVQpID09IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiQ2FuIG9ubHkgc2VuZCBidWZmZXIgaWYgSU9fT1VUUFVUIHVzYWdlIHNwZWNpZmllZC4iKTsKKyAgICAgICAgfQorICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgbVJTLm5BbGxvY2F0aW9uSW9TZW5kKGdldElEKG1SUykpOworICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWNlaXZlIHRoZSBsYXRlc3QgaW5wdXQgaW50byB0aGUgQWxsb2NhdGlvbi4gVGhpcyBvcGVyYXRpb24KKyAgICAgKiBpcyBvbmx5IHZhbGlkIGlmIHtAbGluayAjVVNBR0VfSU9fSU5QVVR9IGlzIHNldCBvbiB0aGUgQWxsb2NhdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGlvUmVjZWl2ZSgpIHsKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiaW9SZWNlaXZlIik7CisgICAgICAgIGlmICgobVVzYWdlICYgVVNBR0VfSU9fSU5QVVQpID09IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiQ2FuIG9ubHkgcmVjZWl2ZSBpZiBJT19JTlBVVCB1c2FnZSBzcGVjaWZpZWQuIik7CisgICAgICAgIH0KKyAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgIG1SUy5uQWxsb2NhdGlvbklvUmVjZWl2ZShnZXRJRChtUlMpKTsKKyAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29weSBhbiBhcnJheSBvZiBSUyBvYmplY3RzIHRvIHRoZSBBbGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGQgU291cmNlIGFycmF5LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKEJhc2VPYmpbXSBkKSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHlGcm9tIik7CisgICAgICAgIG1SUy52YWxpZGF0ZSgpOworICAgICAgICB2YWxpZGF0ZUlzT2JqZWN0KCk7CisgICAgICAgIGlmIChkLmxlbmd0aCAhPSBtQ3VycmVudENvdW50KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFycmF5IHNpemUgbWlzbWF0Y2gsIGFsbG9jYXRpb24gc2l6ZVggPSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudENvdW50ICsgIiwgYXJyYXkgbGVuZ3RoID0gIiArIGQubGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogcmVxdWlyZXMgNjQtYml0IHBhdGgKKworICAgICAgICBpbnQgaVtdID0gbmV3IGludFtkLmxlbmd0aF07CisgICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgZC5sZW5ndGg7IGN0KyspIHsKKyAgICAgICAgICAgIGlbY3RdID0gKGludClkW2N0XS5nZXRJRChtUlMpOworICAgICAgICB9CisgICAgICAgIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCBtQ3VycmVudENvdW50LCBpKTsKKyAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlQml0bWFwRm9ybWF0KEJpdG1hcCBiKSB7CisgICAgICAgIEJpdG1hcC5Db25maWcgYmMgPSBiLmdldENvbmZpZygpOworICAgICAgICBpZiAoYmMgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCaXRtYXAgaGFzIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCBmb3IgdGhpcyBvcGVyYXRpb24iKTsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGJjKSB7CisgICAgICAgIGNhc2UgQUxQSEFfODoKKyAgICAgICAgICAgIGlmIChtVHlwZS5nZXRFbGVtZW50KCkubUtpbmQgIT0gRWxlbWVudC5EYXRhS2luZC5QSVhFTF9BKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBbGxvY2F0aW9uIGtpbmQgaXMgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UeXBlLmdldEVsZW1lbnQoKS5tS2luZCArICIsIHR5cGUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UeXBlLmdldEVsZW1lbnQoKS5tVHlwZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb2YgIiArIG1UeXBlLmdldEVsZW1lbnQoKS5nZXRCeXRlc1NpemUoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYnl0ZXMsIHBhc3NlZCBiaXRtYXAgd2FzICIgKyBiYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBUkdCXzg4ODg6CisgICAgICAgICAgICBpZiAoKG1UeXBlLmdldEVsZW1lbnQoKS5tS2luZCAhPSBFbGVtZW50LkRhdGFLaW5kLlBJWEVMX1JHQkEpIHx8CisgICAgICAgICAgICAgICAgKG1UeXBlLmdldEVsZW1lbnQoKS5nZXRCeXRlc1NpemUoKSAhPSA0KSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQWxsb2NhdGlvbiBraW5kIGlzICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHlwZS5nZXRFbGVtZW50KCkubUtpbmQgKyAiLCB0eXBlICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHlwZS5nZXRFbGVtZW50KCkubVR5cGUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG9mICIgKyBtVHlwZS5nZXRFbGVtZW50KCkuZ2V0Qnl0ZXNTaXplKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGJ5dGVzLCBwYXNzZWQgYml0bWFwIHdhcyAiICsgYmMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkdCXzU2NToKKyAgICAgICAgICAgIGlmICgobVR5cGUuZ2V0RWxlbWVudCgpLm1LaW5kICE9IEVsZW1lbnQuRGF0YUtpbmQuUElYRUxfUkdCKSB8fAorICAgICAgICAgICAgICAgIChtVHlwZS5nZXRFbGVtZW50KCkuZ2V0Qnl0ZXNTaXplKCkgIT0gMikpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFsbG9jYXRpb24ga2luZCBpcyAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVR5cGUuZ2V0RWxlbWVudCgpLm1LaW5kICsgIiwgdHlwZSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVR5cGUuZ2V0RWxlbWVudCgpLm1UeXBlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvZiAiICsgbVR5cGUuZ2V0RWxlbWVudCgpLmdldEJ5dGVzU2l6ZSgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBieXRlcywgcGFzc2VkIGJpdG1hcCB3YXMgIiArIGJjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFSR0JfNDQ0NDoKKyAgICAgICAgICAgIGlmICgobVR5cGUuZ2V0RWxlbWVudCgpLm1LaW5kICE9IEVsZW1lbnQuRGF0YUtpbmQuUElYRUxfUkdCQSkgfHwKKyAgICAgICAgICAgICAgICAobVR5cGUuZ2V0RWxlbWVudCgpLmdldEJ5dGVzU2l6ZSgpICE9IDIpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBbGxvY2F0aW9uIGtpbmQgaXMgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UeXBlLmdldEVsZW1lbnQoKS5tS2luZCArICIsIHR5cGUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UeXBlLmdldEVsZW1lbnQoKS5tVHlwZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb2YgIiArIG1UeXBlLmdldEVsZW1lbnQoKS5nZXRCeXRlc1NpemUoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYnl0ZXMsIHBhc3NlZCBiaXRtYXAgd2FzICIgKyBiYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlQml0bWFwU2l6ZShCaXRtYXAgYikgeworICAgICAgICBpZigobUN1cnJlbnREaW1YICE9IGIuZ2V0V2lkdGgoKSkgfHwgKG1DdXJyZW50RGltWSAhPSBiLmdldEhlaWdodCgpKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3QgdXBkYXRlIGFsbG9jYXRpb24gZnJvbSBiaXRtYXAsIHNpemVzIG1pc21hdGNoIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29weUZyb21VbmNoZWNrZWQoT2JqZWN0IGFycmF5LCBFbGVtZW50LkRhdGFUeXBlIGR0LCBpbnQgYXJyYXlMZW4pIHsKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weUZyb21VbmNoZWNrZWQiKTsKKyAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgIGlmIChtQ3VycmVudERpbVogPiAwKSB7CisgICAgICAgICAgICBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoMCwgMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIG1DdXJyZW50RGltWiwgYXJyYXksIGR0LCBhcnJheUxlbik7CisgICAgICAgIH0gZWxzZSBpZiAobUN1cnJlbnREaW1ZID4gMCkgeworICAgICAgICAgICAgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKDAsIDAsIG1DdXJyZW50RGltWCwgbUN1cnJlbnREaW1ZLCBhcnJheSwgZHQsIGFycmF5TGVuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCBtQ3VycmVudENvdW50LCBhcnJheSwgZHQsIGFycmF5TGVuKTsKKyAgICAgICAgfQorICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGludG8gdGhpcyBBbGxvY2F0aW9uIGZyb20gYW4gYXJyYXkuIFRoaXMgbWV0aG9kIGRvZXMgbm90IGd1YXJhbnRlZQorICAgICAqIHRoYXQgdGhlIEFsbG9jYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnB1dCBidWZmZXI7IGl0IGNvcGllcyBtZW1vcnkKKyAgICAgKiB3aXRob3V0IHJlaW50ZXJwcmV0YXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYXJyYXkgVGhlIHNvdXJjZSBkYXRhIGFycmF5CisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weUZyb21VbmNoZWNrZWQoT2JqZWN0IGFycmF5KSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHlGcm9tVW5jaGVja2VkIik7CisgICAgICAgIGNvcHlGcm9tVW5jaGVja2VkKGFycmF5LCB2YWxpZGF0ZU9iamVjdElzUHJpbWl0aXZlQXJyYXkoYXJyYXksIGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLnJlZmxlY3QuQXJyYXkuZ2V0TGVuZ3RoKGFycmF5KSk7CisgICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgaW50byB0aGlzIEFsbG9jYXRpb24gZnJvbSBhbiBhcnJheS4gVGhpcyBtZXRob2QgZG9lcyBub3QgZ3VhcmFudGVlCisgICAgICogdGhhdCB0aGUgQWxsb2NhdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGlucHV0IGJ1ZmZlcjsgaXQgY29waWVzIG1lbW9yeQorICAgICAqIHdpdGhvdXQgcmVpbnRlcnByZXRhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tVW5jaGVja2VkKGludFtdIGQpIHsKKyAgICAgICAgY29weUZyb21VbmNoZWNrZWQoZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMzIsIGQubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGludG8gdGhpcyBBbGxvY2F0aW9uIGZyb20gYW4gYXJyYXkuIFRoaXMgbWV0aG9kIGRvZXMgbm90IGd1YXJhbnRlZQorICAgICAqIHRoYXQgdGhlIEFsbG9jYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnB1dCBidWZmZXI7IGl0IGNvcGllcyBtZW1vcnkKKyAgICAgKiB3aXRob3V0IHJlaW50ZXJwcmV0YXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbVVuY2hlY2tlZChzaG9ydFtdIGQpIHsKKyAgICAgICAgY29weUZyb21VbmNoZWNrZWQoZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMTYsIGQubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGludG8gdGhpcyBBbGxvY2F0aW9uIGZyb20gYW4gYXJyYXkuIFRoaXMgbWV0aG9kIGRvZXMgbm90IGd1YXJhbnRlZQorICAgICAqIHRoYXQgdGhlIEFsbG9jYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnB1dCBidWZmZXI7IGl0IGNvcGllcyBtZW1vcnkKKyAgICAgKiB3aXRob3V0IHJlaW50ZXJwcmV0YXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbVVuY2hlY2tlZChieXRlW10gZCkgeworICAgICAgICBjb3B5RnJvbVVuY2hlY2tlZChkLCBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF84LCBkLmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29weSBpbnRvIHRoaXMgQWxsb2NhdGlvbiBmcm9tIGFuIGFycmF5LiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBndWFyYW50ZWUKKyAgICAgKiB0aGF0IHRoZSBBbGxvY2F0aW9uIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgaW5wdXQgYnVmZmVyOyBpdCBjb3BpZXMgbWVtb3J5CisgICAgICogd2l0aG91dCByZWludGVycHJldGF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGQgdGhlIHNvdXJjZSBkYXRhIGFycmF5CisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weUZyb21VbmNoZWNrZWQoZmxvYXRbXSBkKSB7CisgICAgICAgIGNvcHlGcm9tVW5jaGVja2VkKGQsIEVsZW1lbnQuRGF0YVR5cGUuRkxPQVRfMzIsIGQubGVuZ3RoKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENvcHkgaW50byB0aGlzIEFsbG9jYXRpb24gZnJvbSBhbiBhcnJheS4gIFRoaXMgdmFyaWFudCBpcyB0eXBlIGNoZWNrZWQKKyAgICAgKiBhbmQgd2lsbCBnZW5lcmF0ZSBleGNlcHRpb25zIGlmIHRoZSBBbGxvY2F0aW9uJ3Mge0BsaW5rCisgICAgICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gZG9lcyBub3QgbWF0Y2ggdGhlIGFycmF5J3MKKyAgICAgKiBwcmltaXRpdmUgdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhcnJheSBUaGUgc291cmNlIGRhdGEgYXJyYXkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbShPYmplY3QgYXJyYXkpIHsKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weUZyb20iKTsKKyAgICAgICAgY29weUZyb21VbmNoZWNrZWQoYXJyYXksIHZhbGlkYXRlT2JqZWN0SXNQcmltaXRpdmVBcnJheShhcnJheSwgdHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5yZWZsZWN0LkFycmF5LmdldExlbmd0aChhcnJheSkpOworICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGludG8gdGhpcyBBbGxvY2F0aW9uIGZyb20gYW4gYXJyYXkuICBUaGlzIHZhcmlhbnQgaXMgdHlwZSBjaGVja2VkCisgICAgICogYW5kIHdpbGwgZ2VuZXJhdGUgZXhjZXB0aW9ucyBpZiB0aGUgQWxsb2NhdGlvbidzIHtAbGluaworICAgICAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnR9IGlzIG5vdCBhIDMyIGJpdCBpbnRlZ2VyIHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbShpbnRbXSBkKSB7CisgICAgICAgIHZhbGlkYXRlSXNJbnQzMigpOworICAgICAgICBjb3B5RnJvbVVuY2hlY2tlZChkLCBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF8zMiwgZC5sZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgaW50byB0aGlzIEFsbG9jYXRpb24gZnJvbSBhbiBhcnJheS4gIFRoaXMgdmFyaWFudCBpcyB0eXBlIGNoZWNrZWQKKyAgICAgKiBhbmQgd2lsbCBnZW5lcmF0ZSBleGNlcHRpb25zIGlmIHRoZSBBbGxvY2F0aW9uJ3Mge0BsaW5rCisgICAgICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gaXMgbm90IGEgMTYgYml0IGludGVnZXIgdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKHNob3J0W10gZCkgeworICAgICAgICB2YWxpZGF0ZUlzSW50MTYoKTsKKyAgICAgICAgY29weUZyb21VbmNoZWNrZWQoZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMTYsIGQubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGludG8gdGhpcyBBbGxvY2F0aW9uIGZyb20gYW4gYXJyYXkuICBUaGlzIHZhcmlhbnQgaXMgdHlwZSBjaGVja2VkCisgICAgICogYW5kIHdpbGwgZ2VuZXJhdGUgZXhjZXB0aW9ucyBpZiB0aGUgQWxsb2NhdGlvbidzIHtAbGluaworICAgICAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnR9IGlzIG5vdCBhbiA4IGJpdCBpbnRlZ2VyIHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbShieXRlW10gZCkgeworICAgICAgICB2YWxpZGF0ZUlzSW50OCgpOworICAgICAgICBjb3B5RnJvbVVuY2hlY2tlZChkLCBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF84LCBkLmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29weSBpbnRvIHRoaXMgQWxsb2NhdGlvbiBmcm9tIGFuIGFycmF5LiAgVGhpcyB2YXJpYW50IGlzIHR5cGUgY2hlY2tlZAorICAgICAqIGFuZCB3aWxsIGdlbmVyYXRlIGV4Y2VwdGlvbnMgaWYgdGhlIEFsbG9jYXRpb24ncyB7QGxpbmsKKyAgICAgKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50fSBpcyBub3QgYSAzMiBiaXQgZmxvYXQgdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKGZsb2F0W10gZCkgeworICAgICAgICB2YWxpZGF0ZUlzRmxvYXQzMigpOworICAgICAgICBjb3B5RnJvbVVuY2hlY2tlZChkLCBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyLCBkLmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29weSBpbnRvIGFuIEFsbG9jYXRpb24gZnJvbSBhIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcH0uICBUaGUKKyAgICAgKiBoZWlnaHQsIHdpZHRoLCBhbmQgZm9ybWF0IG9mIHRoZSBiaXRtYXAgbXVzdCBtYXRjaCB0aGUgZXhpc3RpbmcKKyAgICAgKiBhbGxvY2F0aW9uLgorICAgICAqCisgICAgICogPHA+SWYgdGhlIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcH0gaXMgdGhlIHNhbWUgYXMgdGhlIHtAbGluaworICAgICAqIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwfSB1c2VkIHRvIGNyZWF0ZSB0aGUgQWxsb2NhdGlvbiB3aXRoIHtAbGluaworICAgICAqICNjcmVhdGVGcm9tQml0bWFwfSBhbmQge0BsaW5rICNVU0FHRV9TSEFSRUR9IGlzIHNldCBvbiB0aGUgQWxsb2NhdGlvbiwKKyAgICAgKiB0aGlzIHdpbGwgc3luY2hyb25pemUgdGhlIEFsbG9jYXRpb24gd2l0aCB0aGUgbGF0ZXN0IGRhdGEgZnJvbSB0aGUge0BsaW5rCisgICAgICogYW5kcm9pZC5ncmFwaGljcy5CaXRtYXB9LCBwb3RlbnRpYWxseSBhdm9pZGluZyB0aGUgYWN0dWFsIGNvcHkuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGIgdGhlIHNvdXJjZSBiaXRtYXAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbShCaXRtYXAgYikgeworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbSIpOworICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgaWYgKGIuZ2V0Q29uZmlnKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgQml0bWFwIG5ld0JpdG1hcCA9IEJpdG1hcC5jcmVhdGVCaXRtYXAoYi5nZXRXaWR0aCgpLCBiLmdldEhlaWdodCgpLCBCaXRtYXAuQ29uZmlnLkFSR0JfODg4OCk7CisgICAgICAgICAgICBDYW52YXMgYyA9IG5ldyBDYW52YXMobmV3Qml0bWFwKTsKKyAgICAgICAgICAgIGMuZHJhd0JpdG1hcChiLCAwLCAwLCBudWxsKTsKKyAgICAgICAgICAgIGNvcHlGcm9tKG5ld0JpdG1hcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFsaWRhdGVCaXRtYXBTaXplKGIpOworICAgICAgICB2YWxpZGF0ZUJpdG1hcEZvcm1hdChiKTsKKyAgICAgICAgbVJTLm5BbGxvY2F0aW9uQ29weUZyb21CaXRtYXAoZ2V0SUQobVJTKSwgYik7CisgICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgYW4gQWxsb2NhdGlvbiBmcm9tIGFuIEFsbG9jYXRpb24uICBUaGUgdHlwZXMgb2YgYm90aCBhbGxvY2F0aW9ucworICAgICAqIG11c3QgYmUgaWRlbnRpY2FsLgorICAgICAqCisgICAgICogQHBhcmFtIGEgdGhlIHNvdXJjZSBhbGxvY2F0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weUZyb20oQWxsb2NhdGlvbiBhKSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHlGcm9tIik7CisgICAgICAgIG1SUy52YWxpZGF0ZSgpOworICAgICAgICBpZiAoIW1UeXBlLmVxdWFscyhhLmdldFR5cGUoKSkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVHlwZXMgb2YgYWxsb2NhdGlvbnMgbXVzdCBtYXRjaC4iKTsKKyAgICAgICAgfQorICAgICAgICBjb3B5MkRSYW5nZUZyb20oMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIGEsIDAsIDApOworICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBhdXRvLWdlbmVyYXRlZCBjb2RlIHJlZmxlY3RlZCBmcm9tCisgICAgICogdGhlIFJlbmRlclNjcmlwdCBzY3JpcHQgZmlsZXMgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBkZXZlbG9wZXJzLgorICAgICAqCisgICAgICogQHBhcmFtIHhvZmYKKyAgICAgKiBAcGFyYW0gZnAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRGcm9tRmllbGRQYWNrZXIoaW50IHhvZmYsIEZpZWxkUGFja2VyIGZwKSB7CisgICAgICAgIG1SUy52YWxpZGF0ZSgpOworICAgICAgICBpbnQgZVNpemUgPSBtVHlwZS5tRWxlbWVudC5nZXRCeXRlc1NpemUoKTsKKyAgICAgICAgZmluYWwgYnl0ZVtdIGRhdGEgPSBmcC5nZXREYXRhKCk7CisKKyAgICAgICAgaW50IGNvdW50ID0gZGF0YS5sZW5ndGggLyBlU2l6ZTsKKyAgICAgICAgaWYgKChlU2l6ZSAqIGNvdW50KSAhPSBkYXRhLmxlbmd0aCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJGaWVsZCBwYWNrZXIgbGVuZ3RoICIgKyBkYXRhLmxlbmd0aCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbm90IGRpdmlzaWJsZSBieSBlbGVtZW50IHNpemUgIiArIGVTaXplICsgIi4iKTsKKyAgICAgICAgfQorICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgY291bnQsIGRhdGEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGF1dG8tZ2VuZXJhdGVkIGNvZGUgcmVmbGVjdGVkIGZyb20KKyAgICAgKiB0aGUgUmVuZGVyU2NyaXB0IHNjcmlwdCBmaWxlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB4b2ZmCisgICAgICogQHBhcmFtIGNvbXBvbmVudF9udW1iZXIKKyAgICAgKiBAcGFyYW0gZnAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRGcm9tRmllbGRQYWNrZXIoaW50IHhvZmYsIGludCBjb21wb25lbnRfbnVtYmVyLCBGaWVsZFBhY2tlciBmcCkgeworICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgaWYgKGNvbXBvbmVudF9udW1iZXIgPj0gbVR5cGUubUVsZW1lbnQubUVsZW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb21wb25lbnRfbnVtYmVyICIgKyBjb21wb25lbnRfbnVtYmVyICsgIiBvdXQgb2YgcmFuZ2UuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYoeG9mZiA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiT2Zmc2V0IG11c3QgYmUgPj0gMC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGJ5dGVbXSBkYXRhID0gZnAuZ2V0RGF0YSgpOworICAgICAgICBpbnQgZVNpemUgPSBtVHlwZS5tRWxlbWVudC5tRWxlbWVudHNbY29tcG9uZW50X251bWJlcl0uZ2V0Qnl0ZXNTaXplKCk7CisgICAgICAgIGVTaXplICo9IG1UeXBlLm1FbGVtZW50Lm1BcnJheVNpemVzW2NvbXBvbmVudF9udW1iZXJdOworCisgICAgICAgIGlmIChkYXRhLmxlbmd0aCAhPSBlU2l6ZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJGaWVsZCBwYWNrZXIgc2l6ZWxlbmd0aCAiICsgZGF0YS5sZW5ndGggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRvZXMgbm90IG1hdGNoIGNvbXBvbmVudCBzaXplICIgKyBlU2l6ZSArICIuIik7CisgICAgICAgIH0KKworICAgICAgICBtUlMubkFsbG9jYXRpb25FbGVtZW50RGF0YTFEKGdldElEU2FmZSgpLCB4b2ZmLCBtU2VsZWN0ZWRMT0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50X251bWJlciwgZGF0YSwgZGF0YS5sZW5ndGgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkYXRhMURDaGVja3MoaW50IG9mZiwgaW50IGNvdW50LCBpbnQgbGVuLCBpbnQgZGF0YVNpemUpIHsKKyAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgIGlmKG9mZiA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiT2Zmc2V0IG11c3QgYmUgPj0gMC4iKTsKKyAgICAgICAgfQorICAgICAgICBpZihjb3VudCA8IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ291bnQgbXVzdCBiZSA+PSAxLiIpOworICAgICAgICB9CisgICAgICAgIGlmKChvZmYgKyBjb3VudCkgPiBtQ3VycmVudENvdW50KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk92ZXJmbG93LCBBdmFpbGFibGUgY291bnQgIiArIG1DdXJyZW50Q291bnQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBnb3QgIiArIGNvdW50ICsgIiBhdCBvZmZzZXQgIiArIG9mZiArICIuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYobGVuIDwgZGF0YVNpemUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQXJyYXkgdG9vIHNtYWxsIGZvciBhbGxvY2F0aW9uIHR5cGUuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZSBhIG1pcG1hcCBjaGFpbi4gVGhpcyBpcyBvbmx5IHZhbGlkIGlmIHRoZSBUeXBlIG9mIHRoZSBBbGxvY2F0aW9uCisgICAgICogaW5jbHVkZXMgbWlwbWFwcy4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSBhIGNvbXBsZXRlIHNldCBvZiBtaXBtYXBzIGZyb20gdGhlIHRvcAorICAgICAqIGxldmVsIExPRCBhbmQgcGxhY2UgdGhlbSBpbnRvIHRoZSBzY3JpcHQgbWVtb3J5IHNwYWNlLjwvcD4KKyAgICAgKgorICAgICAqIDxwPklmIHRoZSBBbGxvY2F0aW9uIGlzIGFsc28gdXNpbmcgb3RoZXIgbWVtb3J5IHNwYWNlcywgYSBjYWxsIHRvIHtAbGluaworICAgICAqICNzeW5jQWxsIHN5bmNBbGwoQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpfSBpcyByZXF1aXJlZC48L3A+CisgICAgICovCisgICAgcHVibGljIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCkgeworICAgICAgICBtUlMubkFsbG9jYXRpb25HZW5lcmF0ZU1pcG1hcHMoZ2V0SUQobVJTKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQgb2ZmLCBpbnQgY291bnQsIE9iamVjdCBhcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuRGF0YVR5cGUgZHQsIGludCBhcnJheUxlbikgeworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQiKTsKKyAgICAgICAgZmluYWwgaW50IGRhdGFTaXplID0gbVR5cGUubUVsZW1lbnQuZ2V0Qnl0ZXNTaXplKCkgKiBjb3VudDsKKyAgICAgICAgZGF0YTFEQ2hlY2tzKG9mZiwgY291bnQsIGFycmF5TGVuICogZHQubVNpemUsIGRhdGFTaXplKTsKKyAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTFEKGdldElEU2FmZSgpLCBvZmYsIG1TZWxlY3RlZExPRCwgY291bnQsIGFycmF5LCBkYXRhU2l6ZSwgZHQpOworICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGFuIGFycmF5IGludG8gcGFydCBvZiB0aGlzIEFsbG9jYXRpb24uICBUaGlzIG1ldGhvZCBkb2VzIG5vdAorICAgICAqIGd1YXJhbnRlZSB0aGF0IHRoZSBBbGxvY2F0aW9uIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgaW5wdXQgYnVmZmVyLgorICAgICAqCisgICAgICogQHBhcmFtIG9mZiBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBlbGVtZW50IHRvIGJlIGNvcGllZC4KKyAgICAgKiBAcGFyYW0gY291bnQgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBiZSBjb3BpZWQuCisgICAgICogQHBhcmFtIGFycmF5IFRoZSBzb3VyY2UgZGF0YSBhcnJheQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQgb2ZmLCBpbnQgY291bnQsIE9iamVjdCBhcnJheSkgeworICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdElzUHJpbWl0aXZlQXJyYXkoYXJyYXksIGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5yZWZsZWN0LkFycmF5LmdldExlbmd0aChhcnJheSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgYW4gYXJyYXkgaW50byBwYXJ0IG9mIHRoaXMgQWxsb2NhdGlvbi4gIFRoaXMgbWV0aG9kIGRvZXMgbm90CisgICAgICogZ3VhcmFudGVlIHRoYXQgdGhlIEFsbG9jYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnB1dCBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb2ZmIFRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG8gYmUgY29waWVkLgorICAgICAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGNvcGllZC4KKyAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoaW50IG9mZiwgaW50IGNvdW50LCBpbnRbXSBkKSB7CisgICAgICAgIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChvZmYsIGNvdW50LCAoT2JqZWN0KWQsIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzMyLCBkLmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29weSBhbiBhcnJheSBpbnRvIHBhcnQgb2YgdGhpcyBBbGxvY2F0aW9uLiAgVGhpcyBtZXRob2QgZG9lcyBub3QKKyAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgQWxsb2NhdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGlucHV0IGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvZmYgVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb3BpZWQuCisgICAgICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgY29waWVkLgorICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQgb2ZmLCBpbnQgY291bnQsIHNob3J0W10gZCkgeworICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgKE9iamVjdClkLCBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF8xNiwgZC5sZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgYW4gYXJyYXkgaW50byBwYXJ0IG9mIHRoaXMgQWxsb2NhdGlvbi4gIFRoaXMgbWV0aG9kIGRvZXMgbm90CisgICAgICogZ3VhcmFudGVlIHRoYXQgdGhlIEFsbG9jYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnB1dCBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb2ZmIFRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG8gYmUgY29waWVkLgorICAgICAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGNvcGllZC4KKyAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoaW50IG9mZiwgaW50IGNvdW50LCBieXRlW10gZCkgeworICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgKE9iamVjdClkLCBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF84LCBkLmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29weSBhbiBhcnJheSBpbnRvIHBhcnQgb2YgdGhpcyBBbGxvY2F0aW9uLiAgVGhpcyBtZXRob2QgZG9lcyBub3QKKyAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgQWxsb2NhdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGlucHV0IGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvZmYgVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb3BpZWQuCisgICAgICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgY29waWVkLgorICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQgb2ZmLCBpbnQgY291bnQsIGZsb2F0W10gZCkgeworICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgKE9iamVjdClkLCBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyLCBkLmxlbmd0aCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDb3B5IGFuIGFycmF5IGludG8gcGFydCBvZiB0aGlzIEFsbG9jYXRpb24uICBUaGlzIHZhcmlhbnQgaXMgdHlwZSBjaGVja2VkCisgICAgICogYW5kIHdpbGwgZ2VuZXJhdGUgZXhjZXB0aW9ucyBpZiB0aGUgQWxsb2NhdGlvbiB0eXBlIGRvZXMgbm90CisgICAgICogbWF0Y2ggdGhlIGNvbXBvbmVudCB0eXBlIG9mIHRoZSBhcnJheSBwYXNzZWQgaW4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gb2ZmIFRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG8gYmUgY29waWVkLgorICAgICAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGNvcGllZC4KKyAgICAgKiBAcGFyYW0gYXJyYXkgVGhlIHNvdXJjZSBkYXRhIGFycmF5LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbShpbnQgb2ZmLCBpbnQgY291bnQsIE9iamVjdCBhcnJheSkgeworICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdElzUHJpbWl0aXZlQXJyYXkoYXJyYXksIHRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLnJlZmxlY3QuQXJyYXkuZ2V0TGVuZ3RoKGFycmF5KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29weSBhbiBhcnJheSBpbnRvIHBhcnQgb2YgdGhpcyBBbGxvY2F0aW9uLiAgVGhpcyB2YXJpYW50IGlzIHR5cGUgY2hlY2tlZAorICAgICAqIGFuZCB3aWxsIGdlbmVyYXRlIGV4Y2VwdGlvbnMgaWYgdGhlIEFsbG9jYXRpb24gdHlwZSBpcyBub3QgYSAzMiBiaXQKKyAgICAgKiBpbnRlZ2VyIHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb2ZmIFRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG8gYmUgY29waWVkLgorICAgICAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGNvcGllZC4KKyAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50IG9mZiwgaW50IGNvdW50LCBpbnRbXSBkKSB7CisgICAgICAgIHZhbGlkYXRlSXNJbnQzMigpOworICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMzIsIGQubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGFuIGFycmF5IGludG8gcGFydCBvZiB0aGlzIEFsbG9jYXRpb24uICBUaGlzIHZhcmlhbnQgaXMgdHlwZSBjaGVja2VkCisgICAgICogYW5kIHdpbGwgZ2VuZXJhdGUgZXhjZXB0aW9ucyBpZiB0aGUgQWxsb2NhdGlvbiB0eXBlIGlzIG5vdCBhIDE2IGJpdAorICAgICAqIGludGVnZXIgdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvZmYgVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb3BpZWQuCisgICAgICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgY29waWVkLgorICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbShpbnQgb2ZmLCBpbnQgY291bnQsIHNob3J0W10gZCkgeworICAgICAgICB2YWxpZGF0ZUlzSW50MTYoKTsKKyAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKG9mZiwgY291bnQsIGQsIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzE2LCBkLmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29weSBhbiBhcnJheSBpbnRvIHBhcnQgb2YgdGhpcyBBbGxvY2F0aW9uLiAgVGhpcyB2YXJpYW50IGlzIHR5cGUgY2hlY2tlZAorICAgICAqIGFuZCB3aWxsIGdlbmVyYXRlIGV4Y2VwdGlvbnMgaWYgdGhlIEFsbG9jYXRpb24gdHlwZSBpcyBub3QgYW4gOCBiaXQKKyAgICAgKiBpbnRlZ2VyIHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb2ZmIFRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG8gYmUgY29waWVkLgorICAgICAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGNvcGllZC4KKyAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50IG9mZiwgaW50IGNvdW50LCBieXRlW10gZCkgeworICAgICAgICB2YWxpZGF0ZUlzSW50OCgpOworICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfOCwgZC5sZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgYW4gYXJyYXkgaW50byBwYXJ0IG9mIHRoaXMgQWxsb2NhdGlvbi4gIFRoaXMgdmFyaWFudCBpcyB0eXBlIGNoZWNrZWQKKyAgICAgKiBhbmQgd2lsbCBnZW5lcmF0ZSBleGNlcHRpb25zIGlmIHRoZSBBbGxvY2F0aW9uIHR5cGUgaXMgbm90IGEgMzIgYml0IGZsb2F0CisgICAgICogdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvZmYgVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb3BpZWQuCisgICAgICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgY29waWVkLgorICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50IG9mZiwgaW50IGNvdW50LCBmbG9hdFtdIGQpIHsKKyAgICAgICAgdmFsaWRhdGVJc0Zsb2F0MzIoKTsKKyAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKG9mZiwgY291bnQsIGQsIEVsZW1lbnQuRGF0YVR5cGUuRkxPQVRfMzIsIGQubGVuZ3RoKTsKKyAgICB9CisKKyAgICAgLyoqCisgICAgICogQ29weSBwYXJ0IG9mIGFuIEFsbG9jYXRpb24gaW50byB0aGlzIEFsbG9jYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gb2ZmIFRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG8gYmUgY29waWVkLgorICAgICAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGNvcGllZC4KKyAgICAgKiBAcGFyYW0gZGF0YSB0aGUgc291cmNlIGRhdGEgYWxsb2NhdGlvbi4KKyAgICAgKiBAcGFyYW0gZGF0YU9mZiBvZmYgVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiBkYXRhIHRvCisgICAgICogICAgICAgICAgYmUgY29waWVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbShpbnQgb2ZmLCBpbnQgY291bnQsIEFsbG9jYXRpb24gZGF0YSwgaW50IGRhdGFPZmYpIHsKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTFEUmFuZ2VGcm9tIik7CisgICAgICAgIG1SUy5uQWxsb2NhdGlvbkRhdGEyRChnZXRJRFNhZmUoKSwgb2ZmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkTE9ELCBtU2VsZWN0ZWRGYWNlLm1JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LCAxLCBkYXRhLmdldElEKG1SUyksIGRhdGFPZmYsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1TZWxlY3RlZExPRCwgZGF0YS5tU2VsZWN0ZWRGYWNlLm1JRCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlMkRSYW5nZShpbnQgeG9mZiwgaW50IHlvZmYsIGludCB3LCBpbnQgaCkgeworICAgICAgICBpZiAobUFkYXB0ZWRBbGxvY2F0aW9uICE9IG51bGwpIHsKKworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICBpZiAoeG9mZiA8IDAgfHwgeW9mZiA8IDApIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk9mZnNldCBjYW5ub3QgYmUgbmVnYXRpdmUuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaCA8IDAgfHwgdyA8IDApIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkhlaWdodCBvciB3aWR0aCBjYW5ub3QgYmUgbmVnYXRpdmUuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKCh4b2ZmICsgdykgPiBtQ3VycmVudERpbVgpIHx8ICgoeW9mZiArIGgpID4gbUN1cnJlbnREaW1ZKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVXBkYXRlZCByZWdpb24gbGFyZ2VyIHRoYW4gYWxsb2NhdGlvbi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHcsIGludCBoLCBPYmplY3QgYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudC5EYXRhVHlwZSBkdCwgaW50IGFycmF5TGVuKSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkyRFJhbmdlRnJvbVVuY2hlY2tlZCIpOworICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgdmFsaWRhdGUyRFJhbmdlKHhvZmYsIHlvZmYsIHcsIGgpOworICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhMkQoZ2V0SURTYWZlKCksIHhvZmYsIHlvZmYsIG1TZWxlY3RlZExPRCwgbVNlbGVjdGVkRmFjZS5tSUQsIHcsIGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSwgYXJyYXlMZW4gKiBkdC5tU2l6ZSwgZHQpOworICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGZyb20gYW4gYXJyYXkgaW50byBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBpbiB0aGlzIEFsbG9jYXRpb24uICBUaGUKKyAgICAgKiBhcnJheSBpcyBhc3N1bWVkIHRvIGJlIHRpZ2h0bHkgcGFja2VkLgorICAgICAqCisgICAgICogQHBhcmFtIHhvZmYgWCBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHlvZmYgWSBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHcgV2lkdGggb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gaCBIZWlnaHQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gYXJyYXkgRGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgQWxsb2NhdGlvbgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHkyRFJhbmdlRnJvbShpbnQgeG9mZiwgaW50IHlvZmYsIGludCB3LCBpbnQgaCwgT2JqZWN0IGFycmF5KSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkyRFJhbmdlRnJvbSIpOworICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgeW9mZiwgdywgaCwgYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdElzUHJpbWl0aXZlQXJyYXkoYXJyYXksIHRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLnJlZmxlY3QuQXJyYXkuZ2V0TGVuZ3RoKGFycmF5KSk7CisgICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgZnJvbSBhbiBhcnJheSBpbnRvIGEgcmVjdGFuZ3VsYXIgcmVnaW9uIGluIHRoaXMgQWxsb2NhdGlvbi4gIFRoZQorICAgICAqIGFycmF5IGlzIGFzc3VtZWQgdG8gYmUgdGlnaHRseSBwYWNrZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0geG9mZiBYIG9mZnNldCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZSBpbiB0aGlzIEFsbG9jYXRpb24KKyAgICAgKiBAcGFyYW0geW9mZiBZIG9mZnNldCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZSBpbiB0aGlzIEFsbG9jYXRpb24KKyAgICAgKiBAcGFyYW0gdyBXaWR0aCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZQorICAgICAqIEBwYXJhbSBoIEhlaWdodCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZQorICAgICAqIEBwYXJhbSBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBBbGxvY2F0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weTJEUmFuZ2VGcm9tKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHcsIGludCBoLCBieXRlW10gZGF0YSkgeworICAgICAgICB2YWxpZGF0ZUlzSW50OCgpOworICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgeW9mZiwgdywgaCwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzgsIGRhdGEubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGZyb20gYW4gYXJyYXkgaW50byBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBpbiB0aGlzIEFsbG9jYXRpb24uICBUaGUKKyAgICAgKiBhcnJheSBpcyBhc3N1bWVkIHRvIGJlIHRpZ2h0bHkgcGFja2VkLgorICAgICAqCisgICAgICogQHBhcmFtIHhvZmYgWCBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHlvZmYgWSBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHcgV2lkdGggb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gaCBIZWlnaHQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gZGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgQWxsb2NhdGlvbgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHkyRFJhbmdlRnJvbShpbnQgeG9mZiwgaW50IHlvZmYsIGludCB3LCBpbnQgaCwgc2hvcnRbXSBkYXRhKSB7CisgICAgICAgIHZhbGlkYXRlSXNJbnQxNigpOworICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgeW9mZiwgdywgaCwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzE2LCBkYXRhLmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29weSBmcm9tIGFuIGFycmF5IGludG8gYSByZWN0YW5ndWxhciByZWdpb24gaW4gdGhpcyBBbGxvY2F0aW9uLiAgVGhlCisgICAgICogYXJyYXkgaXMgYXNzdW1lZCB0byBiZSB0aWdodGx5IHBhY2tlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB4b2ZmIFggb2Zmc2V0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlIGluIHRoaXMgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSB5b2ZmIFkgb2Zmc2V0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlIGluIHRoaXMgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSB3IFdpZHRoIG9mIHRoZSByZWdpb24gdG8gdXBkYXRlCisgICAgICogQHBhcmFtIGggSGVpZ2h0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlCisgICAgICogQHBhcmFtIGRhdGEgdG8gYmUgcGxhY2VkIGludG8gdGhlIEFsbG9jYXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5MkRSYW5nZUZyb20oaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgdywgaW50IGgsIGludFtdIGRhdGEpIHsKKyAgICAgICAgdmFsaWRhdGVJc0ludDMyKCk7CisgICAgICAgIGNvcHkyRFJhbmdlRnJvbVVuY2hlY2tlZCh4b2ZmLCB5b2ZmLCB3LCBoLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMzIsIGRhdGEubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGZyb20gYW4gYXJyYXkgaW50byBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBpbiB0aGlzIEFsbG9jYXRpb24uICBUaGUKKyAgICAgKiBhcnJheSBpcyBhc3N1bWVkIHRvIGJlIHRpZ2h0bHkgcGFja2VkLgorICAgICAqCisgICAgICogQHBhcmFtIHhvZmYgWCBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHlvZmYgWSBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHcgV2lkdGggb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gaCBIZWlnaHQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gZGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgQWxsb2NhdGlvbgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHkyRFJhbmdlRnJvbShpbnQgeG9mZiwgaW50IHlvZmYsIGludCB3LCBpbnQgaCwgZmxvYXRbXSBkYXRhKSB7CisgICAgICAgIHZhbGlkYXRlSXNGbG9hdDMyKCk7CisgICAgICAgIGNvcHkyRFJhbmdlRnJvbVVuY2hlY2tlZCh4b2ZmLCB5b2ZmLCB3LCBoLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudC5EYXRhVHlwZS5GTE9BVF8zMiwgZGF0YS5sZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgYSByZWN0YW5ndWxhciByZWdpb24gZnJvbSBhbiBBbGxvY2F0aW9uIGludG8gYSByZWN0YW5ndWxhciByZWdpb24gaW4KKyAgICAgKiB0aGlzIEFsbG9jYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0geG9mZiBYIG9mZnNldCBvZiB0aGUgcmVnaW9uIGluIHRoaXMgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSB5b2ZmIFkgb2Zmc2V0IG9mIHRoZSByZWdpb24gaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHcgV2lkdGggb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUuCisgICAgICogQHBhcmFtIGggSGVpZ2h0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlLgorICAgICAqIEBwYXJhbSBkYXRhIHNvdXJjZSBBbGxvY2F0aW9uLgorICAgICAqIEBwYXJhbSBkYXRhWG9mZiBYIG9mZnNldCBpbiBzb3VyY2UgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSBkYXRhWW9mZiBZIG9mZnNldCBpbiBzb3VyY2UgQWxsb2NhdGlvbgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHkyRFJhbmdlRnJvbShpbnQgeG9mZiwgaW50IHlvZmYsIGludCB3LCBpbnQgaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbiBkYXRhLCBpbnQgZGF0YVhvZmYsIGludCBkYXRhWW9mZikgeworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MkRSYW5nZUZyb20iKTsKKyAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgIHZhbGlkYXRlMkRSYW5nZSh4b2ZmLCB5b2ZmLCB3LCBoKTsKKyAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTJEKGdldElEU2FmZSgpLCB4b2ZmLCB5b2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkTE9ELCBtU2VsZWN0ZWRGYWNlLm1JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIGRhdGEuZ2V0SUQobVJTKSwgZGF0YVhvZmYsIGRhdGFZb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tU2VsZWN0ZWRMT0QsIGRhdGEubVNlbGVjdGVkRmFjZS5tSUQpOworICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGEge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwfSBpbnRvIGFuIEFsbG9jYXRpb24uICBUaGUgaGVpZ2h0CisgICAgICogYW5kIHdpZHRoIG9mIHRoZSB1cGRhdGUgd2lsbCB1c2UgdGhlIGhlaWdodCBhbmQgd2lkdGggb2YgdGhlIHtAbGluaworICAgICAqIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwfS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB4b2ZmIFggb2Zmc2V0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlIGluIHRoaXMgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSB5b2ZmIFkgb2Zmc2V0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlIGluIHRoaXMgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSBkYXRhIHRoZSBCaXRtYXAgdG8gYmUgY29waWVkCisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weTJEUmFuZ2VGcm9tKGludCB4b2ZmLCBpbnQgeW9mZiwgQml0bWFwIGRhdGEpIHsKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTJEUmFuZ2VGcm9tIik7CisgICAgICAgIG1SUy52YWxpZGF0ZSgpOworICAgICAgICBpZiAoZGF0YS5nZXRDb25maWcoKSA9PSBudWxsKSB7CisgICAgICAgICAgICBCaXRtYXAgbmV3Qml0bWFwID0gQml0bWFwLmNyZWF0ZUJpdG1hcChkYXRhLmdldFdpZHRoKCksIGRhdGEuZ2V0SGVpZ2h0KCksIEJpdG1hcC5Db25maWcuQVJHQl84ODg4KTsKKyAgICAgICAgICAgIENhbnZhcyBjID0gbmV3IENhbnZhcyhuZXdCaXRtYXApOworICAgICAgICAgICAgYy5kcmF3Qml0bWFwKGRhdGEsIDAsIDAsIG51bGwpOworICAgICAgICAgICAgY29weTJEUmFuZ2VGcm9tKHhvZmYsIHlvZmYsIG5ld0JpdG1hcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFsaWRhdGVCaXRtYXBGb3JtYXQoZGF0YSk7CisgICAgICAgIHZhbGlkYXRlMkRSYW5nZSh4b2ZmLCB5b2ZmLCBkYXRhLmdldFdpZHRoKCksIGRhdGEuZ2V0SGVpZ2h0KCkpOworICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhMkQoZ2V0SURTYWZlKCksIHhvZmYsIHlvZmYsIG1TZWxlY3RlZExPRCwgbVNlbGVjdGVkRmFjZS5tSUQsIGRhdGEpOworICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGUzRFJhbmdlKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCB3LCBpbnQgaCwgaW50IGQpIHsKKyAgICAgICAgaWYgKG1BZGFwdGVkQWxsb2NhdGlvbiAhPSBudWxsKSB7CisKKyAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgaWYgKHhvZmYgPCAwIHx8IHlvZmYgPCAwIHx8IHpvZmYgPCAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPZmZzZXQgY2Fubm90IGJlIG5lZ2F0aXZlLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGggPCAwIHx8IHcgPCAwIHx8IGQgPCAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJIZWlnaHQgb3Igd2lkdGggY2Fubm90IGJlIG5lZ2F0aXZlLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCgoeG9mZiArIHcpID4gbUN1cnJlbnREaW1YKSB8fCAoKHlvZmYgKyBoKSA+IG1DdXJyZW50RGltWSkgfHwgKCh6b2ZmICsgZCkgPiBtQ3VycmVudERpbVopKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVcGRhdGVkIHJlZ2lvbiBsYXJnZXIgdGhhbiBhbGxvY2F0aW9uLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IHcsIGludCBoLCBpbnQgZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBhcnJheSwgRWxlbWVudC5EYXRhVHlwZSBkdCwgaW50IGFycmF5TGVuKSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkzRFJhbmdlRnJvbVVuY2hlY2tlZCIpOworICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgdmFsaWRhdGUzRFJhbmdlKHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQpOworICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhM0QoZ2V0SURTYWZlKCksIHhvZmYsIHlvZmYsIHpvZmYsIG1TZWxlY3RlZExPRCwgdywgaCwgZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LCBhcnJheUxlbiAqIGR0Lm1TaXplLCBkdCk7CisgICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICogQ29weSBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBmcm9tIHRoZSBhcnJheSBpbnRvIHRoZSBhbGxvY2F0aW9uLgorICAgICAqIFRoZSBhcnJheSBpcyBhc3N1bWVkIHRvIGJlIHRpZ2h0bHkgcGFja2VkLgorICAgICAqCisgICAgICogQHBhcmFtIHhvZmYgWCBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHlvZmYgWSBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHpvZmYgWiBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHcgV2lkdGggb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gaCBIZWlnaHQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gZCBEZXB0aCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZQorICAgICAqIEBwYXJhbSBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBhbGxvY2F0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weTNEUmFuZ2VGcm9tKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCB3LCBpbnQgaCwgaW50IGQsIE9iamVjdCBhcnJheSkgeworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5M0RSYW5nZUZyb20iKTsKKyAgICAgICAgY29weTNEUmFuZ2VGcm9tVW5jaGVja2VkKHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQsIGFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVPYmplY3RJc1ByaW1pdGl2ZUFycmF5KGFycmF5LCB0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5yZWZsZWN0LkFycmF5LmdldExlbmd0aChhcnJheSkpOworICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqIENvcHkgYSByZWN0YW5ndWxhciByZWdpb24gaW50byB0aGUgYWxsb2NhdGlvbiBmcm9tIGFub3RoZXIKKyAgICAgKiBhbGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHhvZmYgWCBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHlvZmYgWSBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHpvZmYgWiBvZmZzZXQgb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUgaW4gdGhpcyBBbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHcgV2lkdGggb2YgdGhlIHJlZ2lvbiB0byB1cGRhdGUuCisgICAgICogQHBhcmFtIGggSGVpZ2h0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlLgorICAgICAqIEBwYXJhbSBkIERlcHRoIG9mIHRoZSByZWdpb24gdG8gdXBkYXRlLgorICAgICAqIEBwYXJhbSBkYXRhIHNvdXJjZSBhbGxvY2F0aW9uLgorICAgICAqIEBwYXJhbSBkYXRhWG9mZiBYIG9mZnNldCBvZiB0aGUgcmVnaW9uIGluIHRoZSBzb3VyY2UgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSBkYXRhWW9mZiBZIG9mZnNldCBvZiB0aGUgcmVnaW9uIGluIHRoZSBzb3VyY2UgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSBkYXRhWm9mZiBaIG9mZnNldCBvZiB0aGUgcmVnaW9uIGluIHRoZSBzb3VyY2UgQWxsb2NhdGlvbgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHkzRFJhbmdlRnJvbShpbnQgeG9mZiwgaW50IHlvZmYsIGludCB6b2ZmLCBpbnQgdywgaW50IGgsIGludCBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uIGRhdGEsIGludCBkYXRhWG9mZiwgaW50IGRhdGFZb2ZmLCBpbnQgZGF0YVpvZmYpIHsKKyAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgIHZhbGlkYXRlM0RSYW5nZSh4b2ZmLCB5b2ZmLCB6b2ZmLCB3LCBoLCBkKTsKKyAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTNEKGdldElEU2FmZSgpLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtU2VsZWN0ZWRMT0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBkLCBkYXRhLmdldElEKG1SUyksIGRhdGFYb2ZmLCBkYXRhWW9mZiwgZGF0YVpvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1TZWxlY3RlZExPRCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDb3B5IGZyb20gdGhlIEFsbG9jYXRpb24gaW50byBhIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcH0uICBUaGUKKyAgICAgKiBiaXRtYXAgbXVzdCBtYXRjaCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgQWxsb2NhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBiIFRoZSBiaXRtYXAgdG8gYmUgc2V0IGZyb20gdGhlIEFsbG9jYXRpb24uCisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weVRvKEJpdG1hcCBiKSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHlUbyIpOworICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgdmFsaWRhdGVCaXRtYXBGb3JtYXQoYik7CisgICAgICAgIHZhbGlkYXRlQml0bWFwU2l6ZShiKTsKKyAgICAgICAgbVJTLm5BbGxvY2F0aW9uQ29weVRvQml0bWFwKGdldElEKG1SUyksIGIpOworICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29weVRvKE9iamVjdCBhcnJheSwgRWxlbWVudC5EYXRhVHlwZSBkdCwgaW50IGFycmF5TGVuKSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHlUbyIpOworICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgbVJTLm5BbGxvY2F0aW9uUmVhZChnZXRJRChtUlMpLCBhcnJheSwgZHQpOworICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGZyb20gdGhlIEFsbG9jYXRpb24gaW50byBhbiBhcnJheS4gIFRoZSBhcnJheSBtdXN0IGJlIGF0CisgICAgICogbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIEFsbG9jYXRpb24uICBUaGUKKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gbXVzdCBtYXRjaCB0aGUgY29tcG9uZW50CisgICAgICogdHlwZSBvZiB0aGUgYXJyYXkgcGFzc2VkIGluLgorICAgICAqCisgICAgICogQHBhcmFtIGFycmF5IFRoZSBhcnJheSB0byBiZSBzZXQgZnJvbSB0aGUgQWxsb2NhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5VG8oT2JqZWN0IGFycmF5KSB7CisgICAgICAgIGNvcHlUbyhhcnJheSwgdmFsaWRhdGVPYmplY3RJc1ByaW1pdGl2ZUFycmF5KGFycmF5LCB0cnVlKSwKKyAgICAgICAgICAgICAgIGphdmEubGFuZy5yZWZsZWN0LkFycmF5LmdldExlbmd0aChhcnJheSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgZnJvbSB0aGUgQWxsb2NhdGlvbiBpbnRvIGEgYnl0ZSBhcnJheS4gIFRoZSBhcnJheSBtdXN0IGJlIGF0IGxlYXN0CisgICAgICogYXMgbGFyZ2UgYXMgdGhlIEFsbG9jYXRpb24uICBUaGUgYWxsb2NhdGlvbiBtdXN0IGJlIG9mIGFuIDggYml0IGludGVnZXIKKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkIFRoZSBhcnJheSB0byBiZSBzZXQgZnJvbSB0aGUgQWxsb2NhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5VG8oYnl0ZVtdIGQpIHsKKyAgICAgICAgdmFsaWRhdGVJc0ludDgoKTsKKyAgICAgICAgY29weVRvKGQsIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzgsIGQubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGZyb20gdGhlIEFsbG9jYXRpb24gaW50byBhIHNob3J0IGFycmF5LiAgVGhlIGFycmF5IG11c3QgYmUgYXQgbGVhc3QKKyAgICAgKiBhcyBsYXJnZSBhcyB0aGUgQWxsb2NhdGlvbi4gIFRoZSBhbGxvY2F0aW9uIG11c3QgYmUgb2YgYW4gMTYgYml0IGludGVnZXIKKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkIFRoZSBhcnJheSB0byBiZSBzZXQgZnJvbSB0aGUgQWxsb2NhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5VG8oc2hvcnRbXSBkKSB7CisgICAgICAgIHZhbGlkYXRlSXNJbnQxNigpOworICAgICAgICBjb3B5VG8oZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMTYsIGQubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGZyb20gdGhlIEFsbG9jYXRpb24gaW50byBhIGludCBhcnJheS4gIFRoZSBhcnJheSBtdXN0IGJlIGF0IGxlYXN0IGFzCisgICAgICogbGFyZ2UgYXMgdGhlIEFsbG9jYXRpb24uICBUaGUgYWxsb2NhdGlvbiBtdXN0IGJlIG9mIGFuIDMyIGJpdCBpbnRlZ2VyCisgICAgICoge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnR9IHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZCBUaGUgYXJyYXkgdG8gYmUgc2V0IGZyb20gdGhlIEFsbG9jYXRpb24uCisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weVRvKGludFtdIGQpIHsKKyAgICAgICAgdmFsaWRhdGVJc0ludDMyKCk7CisgICAgICAgIGNvcHlUbyhkLCBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF8zMiwgZC5sZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgZnJvbSB0aGUgQWxsb2NhdGlvbiBpbnRvIGEgZmxvYXQgYXJyYXkuICBUaGUgYXJyYXkgbXVzdCBiZSBhdCBsZWFzdAorICAgICAqIGFzIGxhcmdlIGFzIHRoZSBBbGxvY2F0aW9uLiAgVGhlIGFsbG9jYXRpb24gbXVzdCBiZSBvZiBhbiAzMiBiaXQgZmxvYXQKKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkIFRoZSBhcnJheSB0byBiZSBzZXQgZnJvbSB0aGUgQWxsb2NhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5VG8oZmxvYXRbXSBkKSB7CisgICAgICAgIHZhbGlkYXRlSXNGbG9hdDMyKCk7CisgICAgICAgIGNvcHlUbyhkLCBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyLCBkLmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVzaXplIGEgMUQgYWxsb2NhdGlvbi4gIFRoZSBjb250ZW50cyBvZiB0aGUgYWxsb2NhdGlvbiBhcmUgcHJlc2VydmVkLgorICAgICAqIElmIG5ldyBlbGVtZW50cyBhcmUgYWxsb2NhdGVkIG9iamVjdHMgYXJlIGNyZWF0ZWQgd2l0aCBudWxsIGNvbnRlbnRzIGFuZAorICAgICAqIHRoZSBuZXcgcmVnaW9uIGlzIG90aGVyd2lzZSB1bmRlZmluZWQuCisgICAgICoKKyAgICAgKiA8cD5JZiB0aGUgbmV3IHJlZ2lvbiBpcyBzbWFsbGVyIHRoZSByZWZlcmVuY2VzIG9mIGFueSBvYmplY3RzIG91dHNpZGUgdGhlCisgICAgICogbmV3IHJlZ2lvbiB3aWxsIGJlIHJlbGVhc2VkLjwvcD4KKyAgICAgKgorICAgICAqIDxwPkEgbmV3IHR5cGUgd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhlIG5ldyBkaW1lbnNpb24uPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGRpbVggVGhlIG5ldyBzaXplIG9mIHRoZSBhbGxvY2F0aW9uLgorICAgICAqCisgICAgICogQGRlcHJlY2F0ZWQgUmVuZGVyU2NyaXB0IG9iamVjdHMgc2hvdWxkIGJlIGltbXV0YWJsZSBvbmNlIGNyZWF0ZWQuICBUaGUKKyAgICAgKiByZXBsYWNlbWVudCBpcyB0byBjcmVhdGUgYSBuZXcgYWxsb2NhdGlvbiBhbmQgY29weSB0aGUgY29udGVudHMuCisgICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2l6ZShpbnQgZGltWCkgeworICAgICAgICBpZiAoKG1UeXBlLmdldFkoKSA+IDApfHwgKG1UeXBlLmdldFooKSA+IDApIHx8IG1UeXBlLmhhc0ZhY2VzKCkgfHwgbVR5cGUuaGFzTWlwbWFwcygpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIlJlc2l6ZSBvbmx5IHN1cHBvcnQgZm9yIDFEIGFsbG9jYXRpb25zIGF0IHRoaXMgdGltZS4iKTsKKyAgICAgICAgfQorICAgICAgICBtUlMubkFsbG9jYXRpb25SZXNpemUxRChnZXRJRChtUlMpLCBkaW1YKTsKKyAgICAgICAgbVJTLmZpbmlzaCgpOyAgLy8gTmVjZXNzYXJ5IGJlY2F1c2UgcmVzaXplIGlzIGZpZm9lZCBhbmQgdXBkYXRlIGlzIGFzeW5jLgorCisgICAgICAgIGxvbmcgdHlwZUlEID0gbVJTLm5BbGxvY2F0aW9uR2V0VHlwZShnZXRJRChtUlMpKTsKKyAgICAgICAgbVR5cGUgPSBuZXcgVHlwZSh0eXBlSUQsIG1SUyk7CisgICAgICAgIG1UeXBlLnVwZGF0ZUZyb21OYXRpdmUoKTsKKyAgICAgICAgdXBkYXRlQ2FjaGVJbmZvKG1UeXBlKTsKKyAgICB9CisKKworICAgIC8vIGNyZWF0aW9uCisKKyAgICBzdGF0aWMgQml0bWFwRmFjdG9yeS5PcHRpb25zIG1CaXRtYXBPcHRpb25zID0gbmV3IEJpdG1hcEZhY3RvcnkuT3B0aW9ucygpOworICAgIHN0YXRpYyB7CisgICAgICAgIG1CaXRtYXBPcHRpb25zLmluU2NhbGVkID0gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBBbGxvY2F0aW9uIHdpdGggdGhlIGdpdmVuIHtAbGluaworICAgICAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LlR5cGV9LCBtaXBtYXAgZmxhZywgYW5kIHVzYWdlIGZsYWdzLgorICAgICAqCisgICAgICogQHBhcmFtIHR5cGUgUmVuZGVyU2NyaXB0IHR5cGUgZGVzY3JpYmluZyBkYXRhIGxheW91dAorICAgICAqIEBwYXJhbSBtaXBzIHNwZWNpZmllcyBkZXNpcmVkIG1pcG1hcCBiZWhhdmlvdXIgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgIGFsbG9jYXRpb24KKyAgICAgKiBAcGFyYW0gdXNhZ2UgYml0IGZpZWxkIHNwZWNpZnlpbmcgaG93IHRoZSBBbGxvY2F0aW9uIGlzCisgICAgICogICAgICAgICAgICAgIHV0aWxpemVkCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBBbGxvY2F0aW9uIGNyZWF0ZVR5cGVkKFJlbmRlclNjcmlwdCBycywgVHlwZSB0eXBlLCBNaXBtYXBDb250cm9sIG1pcHMsIGludCB1c2FnZSkgeworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjcmVhdGVUeXBlZCIpOworICAgICAgICBycy52YWxpZGF0ZSgpOworICAgICAgICBpZiAodHlwZS5nZXRJRChycykgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJCYWQgVHlwZSIpOworICAgICAgICB9CisgICAgICAgIGxvbmcgaWQgPSBycy5uQWxsb2NhdGlvbkNyZWF0ZVR5cGVkKHR5cGUuZ2V0SUQocnMpLCBtaXBzLm1JRCwgdXNhZ2UsIDApOworICAgICAgICBpZiAoaWQgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiQWxsb2NhdGlvbiBjcmVhdGlvbiBmYWlsZWQuIik7CisgICAgICAgIH0KKyAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7CisgICAgICAgIHJldHVybiBuZXcgQWxsb2NhdGlvbihpZCwgcnMsIHR5cGUsIHVzYWdlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIEFsbG9jYXRpb24gd2l0aCB0aGUgc2l6ZSBzcGVjaWZpZWQgYnkgdGhlIHR5cGUgYW5kIG5vIG1pcG1hcHMKKyAgICAgKiBnZW5lcmF0ZWQgYnkgZGVmYXVsdAorICAgICAqCisgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIGFsbG9jYXRpb24gd2lsbCBiZWxvbmcuCisgICAgICogQHBhcmFtIHR5cGUgcmVuZGVyc2NyaXB0IHR5cGUgZGVzY3JpYmluZyBkYXRhIGxheW91dAorICAgICAqIEBwYXJhbSB1c2FnZSBiaXQgZmllbGQgc3BlY2lmeWluZyBob3cgdGhlIGFsbG9jYXRpb24gaXMKKyAgICAgKiAgICAgICAgICAgICAgdXRpbGl6ZWQKKyAgICAgKgorICAgICAqIEByZXR1cm4gYWxsb2NhdGlvbgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbiBjcmVhdGVUeXBlZChSZW5kZXJTY3JpcHQgcnMsIFR5cGUgdHlwZSwgaW50IHVzYWdlKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVUeXBlZChycywgdHlwZSwgTWlwbWFwQ29udHJvbC5NSVBNQVBfTk9ORSwgdXNhZ2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gQWxsb2NhdGlvbiBmb3IgdXNlIGJ5IHNjcmlwdHMgd2l0aCBhIGdpdmVuIHtAbGluaworICAgICAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LlR5cGV9IGFuZCBubyBtaXBtYXBzCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgQWxsb2NhdGlvbiB3aWxsIGJlbG9uZy4KKyAgICAgKiBAcGFyYW0gdHlwZSBSZW5kZXJTY3JpcHQgVHlwZSBkZXNjcmliaW5nIGRhdGEgbGF5b3V0CisgICAgICoKKyAgICAgKiBAcmV0dXJuIGFsbG9jYXRpb24KKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIEFsbG9jYXRpb24gY3JlYXRlVHlwZWQoUmVuZGVyU2NyaXB0IHJzLCBUeXBlIHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVkKHJzLCB0eXBlLCBNaXBtYXBDb250cm9sLk1JUE1BUF9OT05FLCBVU0FHRV9TQ1JJUFQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gQWxsb2NhdGlvbiB3aXRoIGEgc3BlY2lmaWVkIG51bWJlciBvZiBnaXZlbiBlbGVtZW50cworICAgICAqCisgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIEFsbG9jYXRpb24gd2lsbCBiZWxvbmcuCisgICAgICogQHBhcmFtIGUgRWxlbWVudCB0byB1c2UgaW4gdGhlIEFsbG9jYXRpb24KKyAgICAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiBFbGVtZW50cyBpbiB0aGUgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSB1c2FnZSBiaXQgZmllbGQgc3BlY2lmeWluZyBob3cgdGhlIEFsbG9jYXRpb24gaXMKKyAgICAgKiAgICAgICAgICAgICAgdXRpbGl6ZWQKKyAgICAgKgorICAgICAqIEByZXR1cm4gYWxsb2NhdGlvbgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbiBjcmVhdGVTaXplZChSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgdXNhZ2UpIHsKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY3JlYXRlU2l6ZWQiKTsKKyAgICAgICAgcnMudmFsaWRhdGUoKTsKKyAgICAgICAgVHlwZS5CdWlsZGVyIGIgPSBuZXcgVHlwZS5CdWlsZGVyKHJzLCBlKTsKKyAgICAgICAgYi5zZXRYKGNvdW50KTsKKyAgICAgICAgVHlwZSB0ID0gYi5jcmVhdGUoKTsKKworICAgICAgICBsb25nIGlkID0gcnMubkFsbG9jYXRpb25DcmVhdGVUeXBlZCh0LmdldElEKHJzKSwgTWlwbWFwQ29udHJvbC5NSVBNQVBfTk9ORS5tSUQsIHVzYWdlLCAwKTsKKyAgICAgICAgaWYgKGlkID09IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIkFsbG9jYXRpb24gY3JlYXRpb24gZmFpbGVkLiIpOworICAgICAgICB9CisgICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICByZXR1cm4gbmV3IEFsbG9jYXRpb24oaWQsIHJzLCB0LCB1c2FnZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBBbGxvY2F0aW9uIHdpdGggYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGdpdmVuIGVsZW1lbnRzCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgQWxsb2NhdGlvbiB3aWxsIGJlbG9uZy4KKyAgICAgKiBAcGFyYW0gZSBFbGVtZW50IHRvIHVzZSBpbiB0aGUgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIEVsZW1lbnRzIGluIHRoZSBBbGxvY2F0aW9uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGFsbG9jYXRpb24KKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIEFsbG9jYXRpb24gY3JlYXRlU2l6ZWQoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUsIGludCBjb3VudCkgeworICAgICAgICByZXR1cm4gY3JlYXRlU2l6ZWQocnMsIGUsIGNvdW50LCBVU0FHRV9TQ1JJUFQpOworICAgIH0KKworICAgIHN0YXRpYyBFbGVtZW50IGVsZW1lbnRGcm9tQml0bWFwKFJlbmRlclNjcmlwdCBycywgQml0bWFwIGIpIHsKKyAgICAgICAgZmluYWwgQml0bWFwLkNvbmZpZyBiYyA9IGIuZ2V0Q29uZmlnKCk7CisgICAgICAgIGlmIChiYyA9PSBCaXRtYXAuQ29uZmlnLkFMUEhBXzgpIHsKKyAgICAgICAgICAgIHJldHVybiBFbGVtZW50LkFfOChycyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJjID09IEJpdG1hcC5Db25maWcuQVJHQl80NDQ0KSB7CisgICAgICAgICAgICByZXR1cm4gRWxlbWVudC5SR0JBXzQ0NDQocnMpOworICAgICAgICB9CisgICAgICAgIGlmIChiYyA9PSBCaXRtYXAuQ29uZmlnLkFSR0JfODg4OCkgeworICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnQuUkdCQV84ODg4KHJzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmMgPT0gQml0bWFwLkNvbmZpZy5SR0JfNTY1KSB7CisgICAgICAgICAgICByZXR1cm4gRWxlbWVudC5SR0JfNTY1KHJzKTsKKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkJhZCBiaXRtYXAgdHlwZTogIiArIGJjKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0eXBlRnJvbUJpdG1hcChSZW5kZXJTY3JpcHQgcnMsIEJpdG1hcCBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlwbWFwQ29udHJvbCBtaXApIHsKKyAgICAgICAgRWxlbWVudCBlID0gZWxlbWVudEZyb21CaXRtYXAocnMsIGIpOworICAgICAgICBUeXBlLkJ1aWxkZXIgdGIgPSBuZXcgVHlwZS5CdWlsZGVyKHJzLCBlKTsKKyAgICAgICAgdGIuc2V0WChiLmdldFdpZHRoKCkpOworICAgICAgICB0Yi5zZXRZKGIuZ2V0SGVpZ2h0KCkpOworICAgICAgICB0Yi5zZXRNaXBtYXBzKG1pcCA9PSBNaXBtYXBDb250cm9sLk1JUE1BUF9GVUxMKTsKKyAgICAgICAgcmV0dXJuIHRiLmNyZWF0ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gQWxsb2NhdGlvbiBmcm9tIGEge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwfS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmVsb25nLgorICAgICAqIEBwYXJhbSBiIEJpdG1hcCBzb3VyY2UgZm9yIHRoZSBhbGxvY2F0aW9uIGRhdGEKKyAgICAgKiBAcGFyYW0gbWlwcyBzcGVjaWZpZXMgZGVzaXJlZCBtaXBtYXAgYmVoYXZpb3VyIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICBhbGxvY2F0aW9uCisgICAgICogQHBhcmFtIHVzYWdlIGJpdCBmaWVsZCBzcGVjaWZ5aW5nIGhvdyB0aGUgYWxsb2NhdGlvbiBpcworICAgICAqICAgICAgICAgICAgICB1dGlsaXplZAorICAgICAqCisgICAgICogQHJldHVybiBBbGxvY2F0aW9uIGNvbnRhaW5pbmcgYml0bWFwIGRhdGEKKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbiBjcmVhdGVGcm9tQml0bWFwKFJlbmRlclNjcmlwdCBycywgQml0bWFwIGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlwbWFwQ29udHJvbCBtaXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1c2FnZSkgeworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjcmVhdGVGcm9tQml0bWFwIik7CisgICAgICAgIHJzLnZhbGlkYXRlKCk7CisKKyAgICAgICAgLy8gV0FSIHVuZG9jdW1lbnRlZCBjb2xvciBmb3JtYXRzCisgICAgICAgIGlmIChiLmdldENvbmZpZygpID09IG51bGwpIHsKKyAgICAgICAgICAgIGlmICgodXNhZ2UgJiBVU0FHRV9TSEFSRUQpICE9IDApIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVTQUdFX1NIQVJFRCBjYW5ub3QgYmUgdXNlZCB3aXRoIGEgQml0bWFwIHRoYXQgaGFzIGEgbnVsbCBjb25maWcuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBCaXRtYXAgbmV3Qml0bWFwID0gQml0bWFwLmNyZWF0ZUJpdG1hcChiLmdldFdpZHRoKCksIGIuZ2V0SGVpZ2h0KCksIEJpdG1hcC5Db25maWcuQVJHQl84ODg4KTsKKyAgICAgICAgICAgIENhbnZhcyBjID0gbmV3IENhbnZhcyhuZXdCaXRtYXApOworICAgICAgICAgICAgYy5kcmF3Qml0bWFwKGIsIDAsIDAsIG51bGwpOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21CaXRtYXAocnMsIG5ld0JpdG1hcCwgbWlwcywgdXNhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgVHlwZSB0ID0gdHlwZUZyb21CaXRtYXAocnMsIGIsIG1pcHMpOworCisgICAgICAgIC8vIGVuYWJsZSBvcHRpbWl6ZWQgYml0bWFwIHBhdGggb25seSB3aXRoIG5vIG1pcG1hcCBhbmQgc2NyaXB0LW9ubHkgdXNhZ2UKKyAgICAgICAgaWYgKG1pcHMgPT0gTWlwbWFwQ29udHJvbC5NSVBNQVBfTk9ORSAmJgorICAgICAgICAgICAgdC5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuUkdCQV84ODg4KHJzKSkgJiYKKyAgICAgICAgICAgIHVzYWdlID09IChVU0FHRV9TSEFSRUQgfCBVU0FHRV9TQ1JJUFQgfCBVU0FHRV9HUkFQSElDU19URVhUVVJFKSkgeworICAgICAgICAgICAgbG9uZyBpZCA9IHJzLm5BbGxvY2F0aW9uQ3JlYXRlQml0bWFwQmFja2VkQWxsb2NhdGlvbih0LmdldElEKHJzKSwgbWlwcy5tSUQsIGIsIHVzYWdlKTsKKyAgICAgICAgICAgIGlmIChpZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiTG9hZCBmYWlsZWQuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIEJpdG1hcCBhcm91bmQgdG8gcHJldmVudCBHQworICAgICAgICAgICAgQWxsb2NhdGlvbiBhbGxvYyA9IG5ldyBBbGxvY2F0aW9uKGlkLCBycywgdCwgdXNhZ2UpOworICAgICAgICAgICAgYWxsb2Muc2V0Qml0bWFwKGIpOworICAgICAgICAgICAgcmV0dXJuIGFsbG9jOworICAgICAgICB9CisKKworICAgICAgICBsb25nIGlkID0gcnMubkFsbG9jYXRpb25DcmVhdGVGcm9tQml0bWFwKHQuZ2V0SUQocnMpLCBtaXBzLm1JRCwgYiwgdXNhZ2UpOworICAgICAgICBpZiAoaWQgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiTG9hZCBmYWlsZWQuIik7CisgICAgICAgIH0KKyAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7CisgICAgICAgIHJldHVybiBuZXcgQWxsb2NhdGlvbihpZCwgcnMsIHQsIHVzYWdlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBoYW5kbGUgdG8gYSByYXcgYnVmZmVyIHRoYXQgaXMgYmVpbmcgbWFuYWdlZCBieSB0aGUgc2NyZWVuCisgICAgICogY29tcG9zaXRvci4gVGhpcyBvcGVyYXRpb24gaXMgb25seSB2YWxpZCBmb3IgQWxsb2NhdGlvbnMgd2l0aCB7QGxpbmsKKyAgICAgKiAjVVNBR0VfSU9fSU5QVVR9LgorICAgICAqCisgICAgICogQHJldHVybiBTdXJmYWNlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggYWxsb2NhdGlvbgorICAgICAqCisgICAgICovCisgICAgcHVibGljIFN1cmZhY2UgZ2V0U3VyZmFjZSgpIHsKKyAgICAgICAgaWYgKChtVXNhZ2UgJiBVU0FHRV9JT19JTlBVVCkgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJBbGxvY2F0aW9uIGlzIG5vdCBhIHN1cmZhY2UgdGV4dHVyZS4iKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbVJTLm5BbGxvY2F0aW9uR2V0U3VyZmFjZShnZXRJRChtUlMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBc3NvY2lhdGUgYSB7QGxpbmsgYW5kcm9pZC52aWV3LlN1cmZhY2V9IHdpdGggdGhpcyBBbGxvY2F0aW9uLiBUaGlzCisgICAgICogb3BlcmF0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIEFsbG9jYXRpb25zIHdpdGgge0BsaW5rICNVU0FHRV9JT19PVVRQVVR9LgorICAgICAqCisgICAgICogQHBhcmFtIHN1ciBTdXJmYWNlIHRvIGFzc29jaWF0ZSB3aXRoIGFsbG9jYXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTdXJmYWNlKFN1cmZhY2Ugc3VyKSB7CisgICAgICAgIG1SUy52YWxpZGF0ZSgpOworICAgICAgICBpZiAoKG1Vc2FnZSAmIFVTQUdFX0lPX09VVFBVVCkgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJBbGxvY2F0aW9uIGlzIG5vdCBVU0FHRV9JT19PVVRQVVQuIik7CisgICAgICAgIH0KKworICAgICAgICBtUlMubkFsbG9jYXRpb25TZXRTdXJmYWNlKGdldElEKG1SUyksIHN1cik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBBbGxvY2F0aW9uIGZyb20gYSB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXB9LgorICAgICAqCisgICAgICogPHA+V2l0aCB0YXJnZXQgQVBJIHZlcnNpb24gMTggb3IgZ3JlYXRlciwgdGhpcyBBbGxvY2F0aW9uIHdpbGwgYmUgY3JlYXRlZAorICAgICAqIHdpdGgge0BsaW5rICNVU0FHRV9TSEFSRUR9LCB7QGxpbmsgI1VTQUdFX1NDUklQVH0sIGFuZCB7QGxpbmsKKyAgICAgKiAjVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRX0uIFdpdGggdGFyZ2V0IEFQSSB2ZXJzaW9uIDE3IG9yIGxvd2VyLCB0aGlzCisgICAgICogQWxsb2NhdGlvbiB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB7QGxpbmsgI1VTQUdFX0dSQVBISUNTX1RFWFRVUkV9LjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmVsb25nLgorICAgICAqIEBwYXJhbSBiIGJpdG1hcCBzb3VyY2UgZm9yIHRoZSBhbGxvY2F0aW9uIGRhdGEKKyAgICAgKgorICAgICAqIEByZXR1cm4gQWxsb2NhdGlvbiBjb250YWluaW5nIGJpdG1hcCBkYXRhCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIEFsbG9jYXRpb24gY3JlYXRlRnJvbUJpdG1hcChSZW5kZXJTY3JpcHQgcnMsIEJpdG1hcCBiKSB7CisgICAgICAgIGlmIChycy5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKS5nZXRBcHBsaWNhdGlvbkluZm8oKS50YXJnZXRTZGtWZXJzaW9uID49IDE4KSB7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUJpdG1hcChycywgYiwgTWlwbWFwQ29udHJvbC5NSVBNQVBfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQUdFX1NIQVJFRCB8IFVTQUdFX1NDUklQVCB8IFVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjcmVhdGVGcm9tQml0bWFwKHJzLCBiLCBNaXBtYXBDb250cm9sLk1JUE1BUF9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FHRV9HUkFQSElDU19URVhUVVJFKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY3ViZW1hcCBBbGxvY2F0aW9uIGZyb20gYSB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXB9CisgICAgICogY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBsaXN0IG9mIGN1YmUgZmFjZXMuIEVhY2ggZmFjZSBtdXN0IGJlIGEgc3F1YXJlLAorICAgICAqIGhhdmUgdGhlIHNhbWUgc2l6ZSBhcyBhbGwgb3RoZXIgZmFjZXMsIGFuZCBoYXZlIGEgd2lkdGggdGhhdCBpcyBhIHBvd2VyCisgICAgICogb2YgMi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmVsb25nLgorICAgICAqIEBwYXJhbSBiIEJpdG1hcCB3aXRoIGN1YmVtYXAgZmFjZXMgbGF5ZWQgb3V0IGluIHRoZSBmb2xsb3dpbmcKKyAgICAgKiAgICAgICAgICBmb3JtYXQ6IHJpZ2h0LCBsZWZ0LCB0b3AsIGJvdHRvbSwgZnJvbnQsIGJhY2sKKyAgICAgKiBAcGFyYW0gbWlwcyBzcGVjaWZpZXMgZGVzaXJlZCBtaXBtYXAgYmVoYXZpb3VyIGZvciB0aGUgY3ViZW1hcAorICAgICAqIEBwYXJhbSB1c2FnZSBiaXQgZmllbGQgc3BlY2lmeWluZyBob3cgdGhlIGN1YmVtYXAgaXMgdXRpbGl6ZWQKKyAgICAgKgorICAgICAqIEByZXR1cm4gYWxsb2NhdGlvbiBjb250YWluaW5nIGN1YmVtYXAgZGF0YQorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBBbGxvY2F0aW9uIGNyZWF0ZUN1YmVtYXBGcm9tQml0bWFwKFJlbmRlclNjcmlwdCBycywgQml0bWFwIGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pcG1hcENvbnRyb2wgbWlwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVzYWdlKSB7CisgICAgICAgIHJzLnZhbGlkYXRlKCk7CisKKyAgICAgICAgaW50IGhlaWdodCA9IGIuZ2V0SGVpZ2h0KCk7CisgICAgICAgIGludCB3aWR0aCA9IGIuZ2V0V2lkdGgoKTsKKworICAgICAgICBpZiAod2lkdGggJSA2ICE9IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ3ViZW1hcCBoZWlnaHQgbXVzdCBiZSBtdWx0aXBsZSBvZiA2Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdpZHRoIC8gNiAhPSBoZWlnaHQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiT25seSBzcXVhcmUgY3ViZSBtYXAgZmFjZXMgc3VwcG9ydGVkIik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbGVhbiBpc1BvdzIgPSAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSA9PSAwOworICAgICAgICBpZiAoIWlzUG93MikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPbmx5IHBvd2VyIG9mIDIgY3ViZSBmYWNlcyBzdXBwb3J0ZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIEVsZW1lbnQgZSA9IGVsZW1lbnRGcm9tQml0bWFwKHJzLCBiKTsKKyAgICAgICAgVHlwZS5CdWlsZGVyIHRiID0gbmV3IFR5cGUuQnVpbGRlcihycywgZSk7CisgICAgICAgIHRiLnNldFgoaGVpZ2h0KTsKKyAgICAgICAgdGIuc2V0WShoZWlnaHQpOworICAgICAgICB0Yi5zZXRGYWNlcyh0cnVlKTsKKyAgICAgICAgdGIuc2V0TWlwbWFwcyhtaXBzID09IE1pcG1hcENvbnRyb2wuTUlQTUFQX0ZVTEwpOworICAgICAgICBUeXBlIHQgPSB0Yi5jcmVhdGUoKTsKKworICAgICAgICBsb25nIGlkID0gcnMubkFsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcCh0LmdldElEKHJzKSwgbWlwcy5tSUQsIGIsIHVzYWdlKTsKKyAgICAgICAgaWYoaWQgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiTG9hZCBmYWlsZWQgZm9yIGJpdG1hcCAiICsgYiArICIgZWxlbWVudCAiICsgZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBBbGxvY2F0aW9uKGlkLCBycywgdCwgdXNhZ2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBub24tbWlwbWFwcGVkIGN1YmVtYXAgQWxsb2NhdGlvbiBmb3IgdXNlIGFzIGEgZ3JhcGhpY3MgdGV4dHVyZQorICAgICAqIGZyb20gYSB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXB9IGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgbGlzdCBvZgorICAgICAqIGN1YmUgZmFjZXMuIEVhY2ggZmFjZSBtdXN0IGJlIGEgc3F1YXJlLCBoYXZlIHRoZSBzYW1lIHNpemUgYXMgYWxsIG90aGVyCisgICAgICogZmFjZXMsIGFuZCBoYXZlIGEgd2lkdGggdGhhdCBpcyBhIHBvd2VyIG9mIDIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJlbG9uZy4KKyAgICAgKiBAcGFyYW0gYiBiaXRtYXAgd2l0aCBjdWJlbWFwIGZhY2VzIGxheWVkIG91dCBpbiB0aGUgZm9sbG93aW5nCisgICAgICogICAgICAgICAgZm9ybWF0OiByaWdodCwgbGVmdCwgdG9wLCBib3R0b20sIGZyb250LCBiYWNrCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGFsbG9jYXRpb24gY29udGFpbmluZyBjdWJlbWFwIGRhdGEKKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbiBjcmVhdGVDdWJlbWFwRnJvbUJpdG1hcChSZW5kZXJTY3JpcHQgcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcCBiKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVDdWJlbWFwRnJvbUJpdG1hcChycywgYiwgTWlwbWFwQ29udHJvbC5NSVBNQVBfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBjdWJlbWFwIEFsbG9jYXRpb24gZnJvbSA2IHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcH0KKyAgICAgKiBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIGN1YmUgZmFjZXMuIEVhY2ggZmFjZSBtdXN0IGJlIGEgc3F1YXJlLCBoYXZlIHRoZQorICAgICAqIHNhbWUgc2l6ZSBhcyBhbGwgb3RoZXIgZmFjZXMsIGFuZCBoYXZlIGEgd2lkdGggdGhhdCBpcyBhIHBvd2VyIG9mIDIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJlbG9uZy4KKyAgICAgKiBAcGFyYW0geHBvcyBjdWJlbWFwIGZhY2UgaW4gdGhlIHBvc2l0aXZlIHggZGlyZWN0aW9uCisgICAgICogQHBhcmFtIHhuZWcgY3ViZW1hcCBmYWNlIGluIHRoZSBuZWdhdGl2ZSB4IGRpcmVjdGlvbgorICAgICAqIEBwYXJhbSB5cG9zIGN1YmVtYXAgZmFjZSBpbiB0aGUgcG9zaXRpdmUgeSBkaXJlY3Rpb24KKyAgICAgKiBAcGFyYW0geW5lZyBjdWJlbWFwIGZhY2UgaW4gdGhlIG5lZ2F0aXZlIHkgZGlyZWN0aW9uCisgICAgICogQHBhcmFtIHpwb3MgY3ViZW1hcCBmYWNlIGluIHRoZSBwb3NpdGl2ZSB6IGRpcmVjdGlvbgorICAgICAqIEBwYXJhbSB6bmVnIGN1YmVtYXAgZmFjZSBpbiB0aGUgbmVnYXRpdmUgeiBkaXJlY3Rpb24KKyAgICAgKiBAcGFyYW0gbWlwcyBzcGVjaWZpZXMgZGVzaXJlZCBtaXBtYXAgYmVoYXZpb3VyIGZvciB0aGUgY3ViZW1hcAorICAgICAqIEBwYXJhbSB1c2FnZSBiaXQgZmllbGQgc3BlY2lmeWluZyBob3cgdGhlIGN1YmVtYXAgaXMgdXRpbGl6ZWQKKyAgICAgKgorICAgICAqIEByZXR1cm4gYWxsb2NhdGlvbiBjb250YWluaW5nIGN1YmVtYXAgZGF0YQorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBBbGxvY2F0aW9uIGNyZWF0ZUN1YmVtYXBGcm9tQ3ViZUZhY2VzKFJlbmRlclNjcmlwdCBycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwIHhwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcCB4bmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAgeXBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwIHluZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcCB6cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAgem5lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlwbWFwQ29udHJvbCBtaXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNhZ2UpIHsKKyAgICAgICAgaW50IGhlaWdodCA9IHhwb3MuZ2V0SGVpZ2h0KCk7CisgICAgICAgIGlmICh4cG9zLmdldFdpZHRoKCkgIT0gaGVpZ2h0IHx8CisgICAgICAgICAgICB4bmVnLmdldFdpZHRoKCkgIT0gaGVpZ2h0IHx8IHhuZWcuZ2V0SGVpZ2h0KCkgIT0gaGVpZ2h0IHx8CisgICAgICAgICAgICB5cG9zLmdldFdpZHRoKCkgIT0gaGVpZ2h0IHx8IHlwb3MuZ2V0SGVpZ2h0KCkgIT0gaGVpZ2h0IHx8CisgICAgICAgICAgICB5bmVnLmdldFdpZHRoKCkgIT0gaGVpZ2h0IHx8IHluZWcuZ2V0SGVpZ2h0KCkgIT0gaGVpZ2h0IHx8CisgICAgICAgICAgICB6cG9zLmdldFdpZHRoKCkgIT0gaGVpZ2h0IHx8IHpwb3MuZ2V0SGVpZ2h0KCkgIT0gaGVpZ2h0IHx8CisgICAgICAgICAgICB6bmVnLmdldFdpZHRoKCkgIT0gaGVpZ2h0IHx8IHpuZWcuZ2V0SGVpZ2h0KCkgIT0gaGVpZ2h0KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk9ubHkgc3F1YXJlIGN1YmUgbWFwIGZhY2VzIHN1cHBvcnRlZCIpOworICAgICAgICB9CisgICAgICAgIGJvb2xlYW4gaXNQb3cyID0gKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT0gMDsKKyAgICAgICAgaWYgKCFpc1BvdzIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiT25seSBwb3dlciBvZiAyIGN1YmUgZmFjZXMgc3VwcG9ydGVkIik7CisgICAgICAgIH0KKworICAgICAgICBFbGVtZW50IGUgPSBlbGVtZW50RnJvbUJpdG1hcChycywgeHBvcyk7CisgICAgICAgIFR5cGUuQnVpbGRlciB0YiA9IG5ldyBUeXBlLkJ1aWxkZXIocnMsIGUpOworICAgICAgICB0Yi5zZXRYKGhlaWdodCk7CisgICAgICAgIHRiLnNldFkoaGVpZ2h0KTsKKyAgICAgICAgdGIuc2V0RmFjZXModHJ1ZSk7CisgICAgICAgIHRiLnNldE1pcG1hcHMobWlwcyA9PSBNaXBtYXBDb250cm9sLk1JUE1BUF9GVUxMKTsKKyAgICAgICAgVHlwZSB0ID0gdGIuY3JlYXRlKCk7CisgICAgICAgIEFsbG9jYXRpb24gY3ViZW1hcCA9IEFsbG9jYXRpb24uY3JlYXRlVHlwZWQocnMsIHQsIG1pcHMsIHVzYWdlKTsKKworICAgICAgICBBbGxvY2F0aW9uQWRhcHRlciBhZGFwdGVyID0gQWxsb2NhdGlvbkFkYXB0ZXIuY3JlYXRlMkQocnMsIGN1YmVtYXApOworICAgICAgICBhZGFwdGVyLnNldEZhY2UoVHlwZS5DdWJlbWFwRmFjZS5QT1NJVElWRV9YKTsKKyAgICAgICAgYWRhcHRlci5jb3B5RnJvbSh4cG9zKTsKKyAgICAgICAgYWRhcHRlci5zZXRGYWNlKFR5cGUuQ3ViZW1hcEZhY2UuTkVHQVRJVkVfWCk7CisgICAgICAgIGFkYXB0ZXIuY29weUZyb20oeG5lZyk7CisgICAgICAgIGFkYXB0ZXIuc2V0RmFjZShUeXBlLkN1YmVtYXBGYWNlLlBPU0lUSVZFX1kpOworICAgICAgICBhZGFwdGVyLmNvcHlGcm9tKHlwb3MpOworICAgICAgICBhZGFwdGVyLnNldEZhY2UoVHlwZS5DdWJlbWFwRmFjZS5ORUdBVElWRV9ZKTsKKyAgICAgICAgYWRhcHRlci5jb3B5RnJvbSh5bmVnKTsKKyAgICAgICAgYWRhcHRlci5zZXRGYWNlKFR5cGUuQ3ViZW1hcEZhY2UuUE9TSVRJVkVfWik7CisgICAgICAgIGFkYXB0ZXIuY29weUZyb20oenBvcyk7CisgICAgICAgIGFkYXB0ZXIuc2V0RmFjZShUeXBlLkN1YmVtYXBGYWNlLk5FR0FUSVZFX1opOworICAgICAgICBhZGFwdGVyLmNvcHlGcm9tKHpuZWcpOworCisgICAgICAgIHJldHVybiBjdWJlbWFwOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBub24tbWlwbWFwcGVkIGN1YmVtYXAgQWxsb2NhdGlvbiBmb3IgdXNlIGFzIGEgc2FtcGxlciBpbnB1dAorICAgICAqIGZyb20gNiB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXB9IG9iamVjdHMgY29udGFpbmluZyB0aGUgY3ViZQorICAgICAqIGZhY2VzLiBFYWNoIGZhY2UgbXVzdCBiZSBhIHNxdWFyZSwgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIGFsbCBvdGhlciBmYWNlcywKKyAgICAgKiBhbmQgaGF2ZSBhIHdpZHRoIHRoYXQgaXMgYSBwb3dlciBvZiAyLgorICAgICAqCisgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIGFsbG9jYXRpb24gd2lsbCBiZWxvbmcuCisgICAgICogQHBhcmFtIHhwb3MgY3ViZW1hcCBmYWNlIGluIHRoZSBwb3NpdGl2ZSB4IGRpcmVjdGlvbgorICAgICAqIEBwYXJhbSB4bmVnIGN1YmVtYXAgZmFjZSBpbiB0aGUgbmVnYXRpdmUgeCBkaXJlY3Rpb24KKyAgICAgKiBAcGFyYW0geXBvcyBjdWJlbWFwIGZhY2UgaW4gdGhlIHBvc2l0aXZlIHkgZGlyZWN0aW9uCisgICAgICogQHBhcmFtIHluZWcgY3ViZW1hcCBmYWNlIGluIHRoZSBuZWdhdGl2ZSB5IGRpcmVjdGlvbgorICAgICAqIEBwYXJhbSB6cG9zIGN1YmVtYXAgZmFjZSBpbiB0aGUgcG9zaXRpdmUgeiBkaXJlY3Rpb24KKyAgICAgKiBAcGFyYW0gem5lZyBjdWJlbWFwIGZhY2UgaW4gdGhlIG5lZ2F0aXZlIHogZGlyZWN0aW9uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGFsbG9jYXRpb24gY29udGFpbmluZyBjdWJlbWFwIGRhdGEKKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbiBjcmVhdGVDdWJlbWFwRnJvbUN1YmVGYWNlcyhSZW5kZXJTY3JpcHQgcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcCB4cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAgeG5lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwIHlwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcCB5bmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAgenBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwIHpuZWcpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUN1YmVtYXBGcm9tQ3ViZUZhY2VzKHJzLCB4cG9zLCB4bmVnLCB5cG9zLCB5bmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenBvcywgem5lZywgTWlwbWFwQ29udHJvbC5NSVBNQVBfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gQWxsb2NhdGlvbiBmcm9tIHRoZSBCaXRtYXAgcmVmZXJlbmNlZAorICAgICAqIGJ5IHJlc291cmNlIElELgorICAgICAqCisgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIGFsbG9jYXRpb24gd2lsbCBiZWxvbmcuCisgICAgICogQHBhcmFtIHJlcyBhcHBsaWNhdGlvbiByZXNvdXJjZXMKKyAgICAgKiBAcGFyYW0gaWQgcmVzb3VyY2UgaWQgdG8gbG9hZCB0aGUgZGF0YSBmcm9tCisgICAgICogQHBhcmFtIG1pcHMgc3BlY2lmaWVzIGRlc2lyZWQgbWlwbWFwIGJlaGF2aW91ciBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgYWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSB1c2FnZSBiaXQgZmllbGQgc3BlY2lmeWluZyBob3cgdGhlIGFsbG9jYXRpb24gaXMKKyAgICAgKiAgICAgICAgICAgICAgdXRpbGl6ZWQKKyAgICAgKgorICAgICAqIEByZXR1cm4gQWxsb2NhdGlvbiBjb250YWluaW5nIHJlc291cmNlIGRhdGEKKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbiBjcmVhdGVGcm9tQml0bWFwUmVzb3VyY2UoUmVuZGVyU2NyaXB0IHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VzIHJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pcG1hcENvbnRyb2wgbWlwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1c2FnZSkgeworCisgICAgICAgIHJzLnZhbGlkYXRlKCk7CisgICAgICAgIGlmICgodXNhZ2UgJiAoVVNBR0VfU0hBUkVEIHwgVVNBR0VfSU9fSU5QVVQgfCBVU0FHRV9JT19PVVRQVVQpKSAhPSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuc3VwcG9ydGVkIHVzYWdlIHNwZWNpZmllZC4iKTsKKyAgICAgICAgfQorICAgICAgICBCaXRtYXAgYiA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlUmVzb3VyY2UocmVzLCBpZCk7CisgICAgICAgIEFsbG9jYXRpb24gYWxsb2MgPSBjcmVhdGVGcm9tQml0bWFwKHJzLCBiLCBtaXBzLCB1c2FnZSk7CisgICAgICAgIGIucmVjeWNsZSgpOworICAgICAgICByZXR1cm4gYWxsb2M7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5vbi1taXBtYXBwZWQgQWxsb2NhdGlvbiB0byB1c2UgYXMgYSBncmFwaGljcyB0ZXh0dXJlIGZyb20gdGhlCisgICAgICoge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwfSByZWZlcmVuY2VkIGJ5IHJlc291cmNlIElELgorICAgICAqCisgICAgICogPHA+V2l0aCB0YXJnZXQgQVBJIHZlcnNpb24gMTggb3IgZ3JlYXRlciwgdGhpcyBhbGxvY2F0aW9uIHdpbGwgYmUgY3JlYXRlZAorICAgICAqIHdpdGgge0BsaW5rICNVU0FHRV9TQ1JJUFR9IGFuZCB7QGxpbmsgI1VTQUdFX0dSQVBISUNTX1RFWFRVUkV9LiBXaXRoCisgICAgICogdGFyZ2V0IEFQSSB2ZXJzaW9uIDE3IG9yIGxvd2VyLCB0aGlzIGFsbG9jYXRpb24gd2lsbCBiZSBjcmVhdGVkIHdpdGgKKyAgICAgKiB7QGxpbmsgI1VTQUdFX0dSQVBISUNTX1RFWFRVUkV9LjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmVsb25nLgorICAgICAqIEBwYXJhbSByZXMgYXBwbGljYXRpb24gcmVzb3VyY2VzCisgICAgICogQHBhcmFtIGlkIHJlc291cmNlIGlkIHRvIGxvYWQgdGhlIGRhdGEgZnJvbQorICAgICAqCisgICAgICogQHJldHVybiBBbGxvY2F0aW9uIGNvbnRhaW5pbmcgcmVzb3VyY2UgZGF0YQorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBBbGxvY2F0aW9uIGNyZWF0ZUZyb21CaXRtYXBSZXNvdXJjZShSZW5kZXJTY3JpcHQgcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZXMgcmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkKSB7CisgICAgICAgIGlmIChycy5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKS5nZXRBcHBsaWNhdGlvbkluZm8oKS50YXJnZXRTZGtWZXJzaW9uID49IDE4KSB7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUJpdG1hcFJlc291cmNlKHJzLCByZXMsIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXBtYXBDb250cm9sLk1JUE1BUF9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FHRV9TQ1JJUFQgfCBVU0FHRV9HUkFQSElDU19URVhUVVJFKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUJpdG1hcFJlc291cmNlKHJzLCByZXMsIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pcG1hcENvbnRyb2wuTUlQTUFQX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBBbGxvY2F0aW9uIGNvbnRhaW5pbmcgc3RyaW5nIGRhdGEgZW5jb2RlZCBpbiBVVEYtOCBmb3JtYXQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJlbG9uZy4KKyAgICAgKiBAcGFyYW0gc3RyIHN0cmluZyB0byBjcmVhdGUgdGhlIGFsbG9jYXRpb24gZnJvbQorICAgICAqIEBwYXJhbSB1c2FnZSBiaXQgZmllbGQgc3BlY2lmeWluZyBob3cgdGhlIGFsbG9jYWl0b24gaXMKKyAgICAgKiAgICAgICAgICAgICAgdXRpbGl6ZWQKKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbiBjcmVhdGVGcm9tU3RyaW5nKFJlbmRlclNjcmlwdCBycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1c2FnZSkgeworICAgICAgICBycy52YWxpZGF0ZSgpOworICAgICAgICBieXRlW10gYWxsb2NBcnJheSA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBhbGxvY0FycmF5ID0gc3RyLmdldEJ5dGVzKCJVVEYtOCIpOworICAgICAgICAgICAgQWxsb2NhdGlvbiBhbGxvYyA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQocnMsIEVsZW1lbnQuVTgocnMpLCBhbGxvY0FycmF5Lmxlbmd0aCwgdXNhZ2UpOworICAgICAgICAgICAgYWxsb2MuY29weUZyb20oYWxsb2NBcnJheSk7CisgICAgICAgICAgICByZXR1cm4gYWxsb2M7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8gdXRmLTguIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbnRlcmZhY2UgdG8gaGFuZGxlIG5vdGlmaWNhdGlvbiB3aGVuIG5ldyBidWZmZXJzIGFyZSBhdmFpbGFibGUgdmlhCisgICAgICoge0BsaW5rICNVU0FHRV9JT19JTlBVVH0uIEFuIGFwcGxpY2F0aW9uIHdpbGwgcmVjZWl2ZSBvbmUgbm90aWZpY2F0aW9uCisgICAgICogd2hlbiBhIGJ1ZmZlciBpcyBhdmFpbGFibGUuIEFkZGl0aW9uYWwgYnVmZmVycyB3aWxsIG5vdCB0cmlnZ2VyIG5ldworICAgICAqIG5vdGlmaWNhdGlvbnMgdW50aWwgYSBidWZmZXIgaXMgcHJvY2Vzc2VkLgorICAgICAqLworICAgIHB1YmxpYyBpbnRlcmZhY2UgT25CdWZmZXJBdmFpbGFibGVMaXN0ZW5lciB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uQnVmZmVyQXZhaWxhYmxlKEFsbG9jYXRpb24gYSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IGEgbm90aWZpY2F0aW9uIGhhbmRsZXIgZm9yIHtAbGluayAjVVNBR0VfSU9fSU5QVVR9LgorICAgICAqCisgICAgICogQHBhcmFtIGNhbGxiYWNrIGluc3RhbmNlIG9mIHRoZSBPbkJ1ZmZlckF2YWlsYWJsZUxpc3RlbmVyCisgICAgICogICAgICAgICAgICAgICAgIGNsYXNzIHRvIGJlIGNhbGxlZCB3aGVuIGJ1ZmZlciBhcnJpdmUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0T25CdWZmZXJBdmFpbGFibGVMaXN0ZW5lcihPbkJ1ZmZlckF2YWlsYWJsZUxpc3RlbmVyIGNhbGxiYWNrKSB7CisgICAgICAgIHN5bmNocm9uaXplZChtQWxsb2NhdGlvbk1hcCkgeworICAgICAgICAgICAgbUFsbG9jYXRpb25NYXAucHV0KG5ldyBMb25nKGdldElEKG1SUykpLCB0aGlzKTsKKyAgICAgICAgICAgIG1CdWZmZXJOb3RpZmllciA9IGNhbGxiYWNrOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgc2VuZEJ1ZmZlck5vdGlmaWNhdGlvbihpbnQgaWQpIHsKKyAgICAgICAgc3luY2hyb25pemVkKG1BbGxvY2F0aW9uTWFwKSB7CisgICAgICAgICAgICBBbGxvY2F0aW9uIGEgPSBtQWxsb2NhdGlvbk1hcC5nZXQobmV3IExvbmcoaWQpKTsKKworICAgICAgICAgICAgaWYgKChhICE9IG51bGwpICYmIChhLm1CdWZmZXJOb3RpZmllciAhPSBudWxsKSkgeworICAgICAgICAgICAgICAgIGEubUJ1ZmZlck5vdGlmaWVyLm9uQnVmZmVyQXZhaWxhYmxlKGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb25BZGFwdGVyLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb25BZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMxYjFlZAotLS0gL2Rldi9udWxsCisrKyBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbkFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKKy8qKgorICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KKyAqCisgKiovCitwdWJsaWMgY2xhc3MgQWxsb2NhdGlvbkFkYXB0ZXIgZXh0ZW5kcyBBbGxvY2F0aW9uIHsKKyAgICBBbGxvY2F0aW9uQWRhcHRlcihsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMsIEFsbG9jYXRpb24gYWxsb2MpIHsKKyAgICAgICAgc3VwZXIoaWQsIHJzLCBhbGxvYy5tVHlwZSwgYWxsb2MubVVzYWdlKTsKKyAgICAgICAgbUFkYXB0ZWRBbGxvY2F0aW9uID0gYWxsb2M7CisgICAgfQorCisgICAgbG9uZyBnZXRJRChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgIlRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBhZGFwdGVycyBhdCB0aGlzIHRpbWUuIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdWJEYXRhKGludCB4b2ZmLCBGaWVsZFBhY2tlciBmcCkgeworICAgICAgICBzdXBlci5zZXRGcm9tRmllbGRQYWNrZXIoeG9mZiwgZnApOworICAgIH0KKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN1YkVsZW1lbnREYXRhKGludCB4b2ZmLCBpbnQgY29tcG9uZW50X251bWJlciwgRmllbGRQYWNrZXIgZnApIHsKKyAgICAgICAgc3VwZXIuc2V0RnJvbUZpZWxkUGFja2VyKHhvZmYsIGNvbXBvbmVudF9udW1iZXIsIGZwKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdWJEYXRhMUQoaW50IG9mZiwgaW50IGNvdW50LCBpbnRbXSBkKSB7CisgICAgICAgIHN1cGVyLmNvcHkxRFJhbmdlRnJvbShvZmYsIGNvdW50LCBkKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdWJEYXRhMUQoaW50IG9mZiwgaW50IGNvdW50LCBzaG9ydFtdIGQpIHsKKyAgICAgICAgc3VwZXIuY29weTFEUmFuZ2VGcm9tKG9mZiwgY291bnQsIGQpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN1YkRhdGExRChpbnQgb2ZmLCBpbnQgY291bnQsIGJ5dGVbXSBkKSB7CisgICAgICAgIHN1cGVyLmNvcHkxRFJhbmdlRnJvbShvZmYsIGNvdW50LCBkKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdWJEYXRhMUQoaW50IG9mZiwgaW50IGNvdW50LCBmbG9hdFtdIGQpIHsKKyAgICAgICAgc3VwZXIuY29weTFEUmFuZ2VGcm9tKG9mZiwgY291bnQsIGQpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN1YkRhdGEyRChpbnQgeG9mZiwgaW50IHlvZmYsIGludCB3LCBpbnQgaCwgaW50W10gZCkgeworICAgICAgICBzdXBlci5jb3B5MkRSYW5nZUZyb20oeG9mZiwgeW9mZiwgdywgaCwgZCk7CisgICAgfQorICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3ViRGF0YTJEKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHcsIGludCBoLCBmbG9hdFtdIGQpIHsKKyAgICAgICAgc3VwZXIuY29weTJEUmFuZ2VGcm9tKHhvZmYsIHlvZmYsIHcsIGgsIGQpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlYWREYXRhKGludFtdIGQpIHsKKyAgICAgICAgc3VwZXIuY29weVRvKGQpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlYWREYXRhKGZsb2F0W10gZCkgeworICAgICAgICBzdXBlci5jb3B5VG8oZCk7CisgICAgfQorCisgICAgdm9pZCBpbml0TE9EKGludCBsb2QpIHsKKyAgICAgICAgaWYgKGxvZCA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQXR0ZW1wdGluZyB0byBzZXQgbmVnYXRpdmUgbG9kICgiICsgbG9kICsgIikuIik7CisgICAgICAgIH0KKworICAgICAgICBpbnQgdHggPSBtQWRhcHRlZEFsbG9jYXRpb24ubVR5cGUuZ2V0WCgpOworICAgICAgICBpbnQgdHkgPSBtQWRhcHRlZEFsbG9jYXRpb24ubVR5cGUuZ2V0WSgpOworICAgICAgICBpbnQgdHogPSBtQWRhcHRlZEFsbG9jYXRpb24ubVR5cGUuZ2V0WigpOworCisgICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgbG9kOyBjdCsrKSB7CisgICAgICAgICAgICBpZiAoKHR4PT0xKSAmJiAodHkgPT0gMSkgJiYgKHR6ID09IDEpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBdHRlbXB0aW5nIHRvIHNldCBsb2QgKCIgKyBsb2QgKyAiKSBvdXQgb2YgcmFuZ2UuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eCA+IDEpIHR4ID4+PSAxOworICAgICAgICAgICAgaWYgKHR5ID4gMSkgdHkgPj49IDE7CisgICAgICAgICAgICBpZiAodHogPiAxKSB0eiA+Pj0gMTsKKyAgICAgICAgfQorCisgICAgICAgIG1DdXJyZW50RGltWCA9IHR4OworICAgICAgICBtQ3VycmVudERpbVkgPSB0eTsKKyAgICAgICAgbUN1cnJlbnREaW1aID0gdHo7CisgICAgICAgIG1DdXJyZW50Q291bnQgPSBtQ3VycmVudERpbVg7CisgICAgICAgIGlmIChtQ3VycmVudERpbVkgPiAxKSB7CisgICAgICAgICAgICBtQ3VycmVudENvdW50ICo9IG1DdXJyZW50RGltWTsKKyAgICAgICAgfQorICAgICAgICBpZiAobUN1cnJlbnREaW1aID4gMSkgeworICAgICAgICAgICAgbUN1cnJlbnRDb3VudCAqPSBtQ3VycmVudERpbVo7CisgICAgICAgIH0KKyAgICAgICAgbVNlbGVjdGVkWSA9IDA7CisgICAgICAgIG1TZWxlY3RlZFogPSAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgYWN0aXZlIExPRC4gIFRoZSBMT0QgbXVzdCBiZSB3aXRoaW4gdGhlIHJhbmdlIGZvciB0aGUKKyAgICAgKiB0eXBlIGJlaW5nIGFkYXB0ZWQuICBUaGUgYmFzZSBhbGxvY2F0aW9uIG11c3QgaGF2ZSBtaXBtYXBzLgorICAgICAqCisgICAgICogQmVjYXVzZSB0aGlzIGNoYW5nZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGFkYXB0ZXIgdGhlCisgICAgICogY3VycmVudCBZIGFuZCBaIHdpbGwgYmUgcmVzZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbG9kIFRoZSBMT0QgdG8gbWFrZSBhY3RpdmUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TE9EKGludCBsb2QpIHsKKyAgICAgICAgaWYgKCFtQWRhcHRlZEFsbG9jYXRpb24uZ2V0VHlwZSgpLmhhc01pcG1hcHMoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJDYW5ub3Qgc2V0IExPRCB3aGVuIHRoZSBhbGxvY2F0aW9uIHR5cGUgZG9lcyBub3QgaW5jbHVkZSBtaXBtYXBzLiIpOworICAgICAgICB9CisgICAgICAgIGlmICghbUNvbnN0cmFpbmVkTE9EKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBzZXQgTE9EIHdoZW4gdGhlIGFkYXB0ZXIgaW5jbHVkZXMgbWlwbWFwcy4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGluaXRMT0QobG9kKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGFjdGl2ZSBGYWNlLiAgVGhlIGJhc2UgYWxsb2NhdGlvbiBtdXN0IGJlIG9mIGEgdHlwZQorICAgICAqIHRoYXQgaW5jbHVkZXMgZmFjZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2YgVGhlIGZhY2UgdG8gbWFrZSBhY3RpdmUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RmFjZShUeXBlLkN1YmVtYXBGYWNlIGNmKSB7CisgICAgICAgIGlmICghbUFkYXB0ZWRBbGxvY2F0aW9uLmdldFR5cGUoKS5oYXNGYWNlcygpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBzZXQgRmFjZSB3aGVuIHRoZSBhbGxvY2F0aW9uIHR5cGUgZG9lcyBub3QgaW5jbHVkZSBmYWNlcy4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1Db25zdHJhaW5lZEZhY2UpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IHNldCBMT0Qgd2hlbiB0aGUgYWRhcHRlciBpbmNsdWRlcyBtaXBtYXBzLiIpOworICAgICAgICB9CisgICAgICAgIGlmIChjZiA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNhbm5vdCBzZXQgbnVsbCBmYWNlLiIpOworICAgICAgICB9CisKKyAgICAgICAgbVNlbGVjdGVkRmFjZSA9IGNmOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgYWN0aXZlIFkuICBUaGUgeSB2YWx1ZSBtdXN0IGJlIHdpdGhpbiB0aGUgcmFuZ2UgZm9yCisgICAgICogdGhlIGFsbG9jYXRpb24gYmVpbmcgYWRhcHRlZC4gIFRoZSBiYXNlIGFsbG9jYXRpb24gbXVzdAorICAgICAqIGNvbnRhaW4gdGhlIFkgZGltZW5zaW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHkgVGhlIHkgdG8gbWFrZSBhY3RpdmUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0WShpbnQgeSkgeworICAgICAgICBpZiAobUFkYXB0ZWRBbGxvY2F0aW9uLmdldFR5cGUoKS5nZXRZKCkgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJDYW5ub3Qgc2V0IFkgd2hlbiB0aGUgYWxsb2NhdGlvbiB0eXBlIGRvZXMgbm90IGluY2x1ZGUgWSBkaW0uIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1BZGFwdGVkQWxsb2NhdGlvbi5nZXRUeXBlKCkuZ2V0WSgpIDw9IHkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IHNldCBZIGdyZWF0ZXIgdGhhbiBkaW1lbnNpb24gb2YgYWxsb2NhdGlvbi4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1Db25zdHJhaW5lZFkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IHNldCBZIHdoZW4gdGhlIGFkYXB0ZXIgaW5jbHVkZXMgWS4iKTsKKyAgICAgICAgfQorCisgICAgICAgIG1TZWxlY3RlZFkgPSB5OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgYWN0aXZlIFouICBUaGUgeiB2YWx1ZSBtdXN0IGJlIHdpdGhpbiB0aGUgcmFuZ2UgZm9yCisgICAgICogdGhlIGFsbG9jYXRpb24gYmVpbmcgYWRhcHRlZC4gIFRoZSBiYXNlIGFsbG9jYXRpb24gbXVzdAorICAgICAqIGNvbnRhaW4gdGhlIFogZGltZW5zaW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHogVGhlIHogdG8gbWFrZSBhY3RpdmUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0WihpbnQgeikgeworICAgICAgICBpZiAobUFkYXB0ZWRBbGxvY2F0aW9uLmdldFR5cGUoKS5nZXRaKCkgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJDYW5ub3Qgc2V0IFogd2hlbiB0aGUgYWxsb2NhdGlvbiB0eXBlIGRvZXMgbm90IGluY2x1ZGUgWiBkaW0uIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1BZGFwdGVkQWxsb2NhdGlvbi5nZXRUeXBlKCkuZ2V0WigpIDw9IHopIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IHNldCBaIGdyZWF0ZXIgdGhhbiBkaW1lbnNpb24gb2YgYWxsb2NhdGlvbi4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1Db25zdHJhaW5lZFopIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IHNldCBaIHdoZW4gdGhlIGFkYXB0ZXIgaW5jbHVkZXMgWi4iKTsKKyAgICAgICAgfQorCisgICAgICAgIG1TZWxlY3RlZFogPSB6OworICAgIH0KKworICAgIHN0YXRpYyBwdWJsaWMgQWxsb2NhdGlvbkFkYXB0ZXIgY3JlYXRlMUQoUmVuZGVyU2NyaXB0IHJzLCBBbGxvY2F0aW9uIGEpIHsKKyAgICAgICAgcnMudmFsaWRhdGUoKTsKKyAgICAgICAgQWxsb2NhdGlvbkFkYXB0ZXIgYWEgPSBuZXcgQWxsb2NhdGlvbkFkYXB0ZXIoMCwgcnMsIGEpOworICAgICAgICBhYS5tQ29uc3RyYWluZWRMT0QgPSB0cnVlOworICAgICAgICBhYS5tQ29uc3RyYWluZWRGYWNlID0gdHJ1ZTsKKyAgICAgICAgYWEubUNvbnN0cmFpbmVkWSA9IHRydWU7CisgICAgICAgIGFhLm1Db25zdHJhaW5lZFogPSB0cnVlOworICAgICAgICBhYS5pbml0TE9EKDApOworICAgICAgICByZXR1cm4gYWE7CisgICAgfQorCisgICAgc3RhdGljIHB1YmxpYyBBbGxvY2F0aW9uQWRhcHRlciBjcmVhdGUyRChSZW5kZXJTY3JpcHQgcnMsIEFsbG9jYXRpb24gYSkgeworICAgICAgICBhbmRyb2lkLnV0aWwuTG9nLmUoInJzIiwgImNyZWF0ZTJkICIgKyBhKTsKKyAgICAgICAgcnMudmFsaWRhdGUoKTsKKyAgICAgICAgQWxsb2NhdGlvbkFkYXB0ZXIgYWEgPSBuZXcgQWxsb2NhdGlvbkFkYXB0ZXIoMCwgcnMsIGEpOworICAgICAgICBhYS5tQ29uc3RyYWluZWRMT0QgPSB0cnVlOworICAgICAgICBhYS5tQ29uc3RyYWluZWRGYWNlID0gdHJ1ZTsKKyAgICAgICAgYWEubUNvbnN0cmFpbmVkWSA9IGZhbHNlOworICAgICAgICBhYS5tQ29uc3RyYWluZWRaID0gdHJ1ZTsKKyAgICAgICAgYWEuaW5pdExPRCgwKTsKKyAgICAgICAgcmV0dXJuIGFhOworICAgIH0KKworCisgICAgLyoqCisgICAgICogT3ZlcnJpZGUgdGhlIEFsbG9jYXRpb24gcmVzaXplLiAgUmVzaXppbmcgYWRhcHRlcnMgaXMgbm90CisgICAgICogYWxsb3dlZCBhbmQgd2lsbCB0aHJvdyBhIFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGRpbVggaWdub3JlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVzaXplKGludCBkaW1YKSB7CisgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiUmVzaXplIG5vdCBhbGxvd2VkIGZvciBBZGFwdGVycy4iKTsKKyAgICB9CisKK30KKworCmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmouamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQmFzZU9iai5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZTQ5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmouamF2YQpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRSZWFkV3JpdGVMb2NrOworCisvKioKKyAqIEJhc2VPYmogaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBSZW5kZXJTY3JpcHQgb2JqZWN0cyBvd25lZCBieSBhIFJTIGNvbnRleHQuCisgKiBJdCBpcyByZXNwb25zaWJsZSBmb3IgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgdHJhY2tpbmcuIFRoaXMgY2xhc3MKKyAqIHNob3VsZCBub3QgYmUgdXNlZCBieSBhIHVzZXIgYXBwbGljYXRpb24uCisgKgorICoqLworcHVibGljIGNsYXNzIEJhc2VPYmogeworICAgIEJhc2VPYmoobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIHJzLnZhbGlkYXRlKCk7CisgICAgICAgIG1SUyA9IHJzOworICAgICAgICBtSUQgPSBpZDsKKyAgICAgICAgbURlc3Ryb3llZCA9IGZhbHNlOworICAgIH0KKworICAgIHZvaWQgc2V0SUQoaW50IGlkKSB7CisgICAgICAgIGlmIChtSUQgIT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiSW50ZXJuYWwgRXJyb3IsIHJlc2V0IG9mIG9iamVjdCBJRC4iKTsKKyAgICAgICAgfQorICAgICAgICBtSUQgPSBpZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMb29rdXAgdGhlIG5hdGl2ZSBvYmplY3QgSUQgZm9yIHRoaXMgb2JqZWN0LiAgUHJpbWFyaWx5IHVzZWQgYnkgdGhlCisgICAgICogZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgorICAgICAqCisgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gdmVyaWZ5IGFnYWluc3QgaW50ZXJuYWwgY29udGV4dCBmb3IKKyAgICAgKiAgICAgICAgICAgbWF0Y2guCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGxvbmcKKyAgICAgKi8KKyAgICBsb25nIGdldElEKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgaWYgKG1EZXN0cm95ZWQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigidXNpbmcgYSBkZXN0cm95ZWQgb2JqZWN0LiIpOworICAgICAgICB9CisgICAgICAgIGlmIChtSUQgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IE9iamVjdCBpZCAwLiIpOworICAgICAgICB9CisgICAgICAgIGlmICgocnMgIT0gbnVsbCkgJiYgKHJzICE9IG1SUykpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigidXNpbmcgb2JqZWN0IHdpdGggbWlzbWF0Y2hlZCBjb250ZXh0LiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtSUQ7CisgICAgfQorCisgICAgdm9pZCBjaGVja1ZhbGlkKCkgeworICAgICAgICBpZiAobUlEID09IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBvYmplY3QuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGxvbmcgbUlEOworICAgIHByaXZhdGUgYm9vbGVhbiBtRGVzdHJveWVkOworICAgIHByaXZhdGUgU3RyaW5nIG1OYW1lOworICAgIFJlbmRlclNjcmlwdCBtUlM7CisKKyAgICAvKioKKyAgICAgKiBzZXROYW1lIGFzc2lnbnMgYSBuYW1lIHRvIGFuIG9iamVjdC4gIFRoaXMgb2JqZWN0IGNhbiBsYXRlciBiZSBsb29rZWQgdXAKKyAgICAgKiBieSB0aGlzIG5hbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byBhc3NpZ24gdG8gdGhlIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIGlmIChuYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAic2V0TmFtZSByZXF1aXJlcyBhIHN0cmluZyBvZiBub24temVybyBsZW5ndGguIik7CisgICAgICAgIH0KKyAgICAgICAgaWYobmFtZS5sZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAic2V0TmFtZSBkb2VzIG5vdCBhY2NlcHQgYSB6ZXJvIGxlbmd0aCBzdHJpbmcuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYobU5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICJzZXROYW1lIG9iamVjdCBhbHJlYWR5IGhhcyBhIG5hbWUuIik7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gbmFtZS5nZXRCeXRlcygiVVRGLTgiKTsKKyAgICAgICAgICAgIG1SUy5uQXNzaWduTmFtZShtSUQsIGJ5dGVzKTsKKyAgICAgICAgICAgIG1OYW1lID0gbmFtZTsKKyAgICAgICAgfSBjYXRjaCAoamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBuYW1lIG9mIHRoZSByZW5kZXJzY3JpcHQgb2JqZWN0CisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgICByZXR1cm4gbU5hbWU7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhlbHBEZXN0cm95KCkgeworICAgICAgICBib29sZWFuIHNob3VsZERlc3Ryb3kgPSBmYWxzZTsKKyAgICAgICAgc3luY2hyb25pemVkKHRoaXMpIHsKKyAgICAgICAgICAgIGlmICghbURlc3Ryb3llZCkgeworICAgICAgICAgICAgICAgIHNob3VsZERlc3Ryb3kgPSB0cnVlOworICAgICAgICAgICAgICAgIG1EZXN0cm95ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZERlc3Ryb3kpIHsKKyAgICAgICAgICAgIC8vIG11c3QgaW5jbHVkZSBuT2JqRGVzdHJveSBpbiB0aGUgY3JpdGljYWwgc2VjdGlvbgorICAgICAgICAgICAgUmVlbnRyYW50UmVhZFdyaXRlTG9jay5SZWFkTG9jayBybG9jayA9IG1SUy5tUldMb2NrLnJlYWRMb2NrKCk7CisgICAgICAgICAgICBybG9jay5sb2NrKCk7CisgICAgICAgICAgICBpZihtUlMuaXNBbGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgbVJTLm5PYmpEZXN0cm95KG1JRCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBybG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIG1SUyA9IG51bGw7CisgICAgICAgICAgICBtSUQgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgaGVscERlc3Ryb3koKTsKKyAgICAgICAgc3VwZXIuZmluYWxpemUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGcmVlcyBhbnkgbmF0aXZlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuICBUaGUKKyAgICAgKiBwcmltYXJ5IHVzZSBpcyB0byBmb3JjZSBpbW1lZGlhdGUgY2xlYW51cCBvZiByZXNvdXJjZXMgd2hlbiBpdCBpcworICAgICAqIGJlbGlldmVkIHRoZSBHQyB3aWxsIG5vdCByZXNwb25kIHF1aWNrbHkgZW5vdWdoLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CisgICAgICAgIGlmKG1EZXN0cm95ZWQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiT2JqZWN0IGFscmVhZHkgZGVzdHJveWVkLiIpOworICAgICAgICB9CisgICAgICAgIGhlbHBEZXN0cm95KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSWYgYW4gb2JqZWN0IGNhbWUgZnJvbSBhbiBhM2QgZmlsZSwgamF2YSBmaWVsZHMgbmVlZCB0byBiZQorICAgICAqIGNyZWF0ZWQgd2l0aCBvYmplY3RzIGZyb20gdGhlIG5hdGl2ZSBsYXllcgorICAgICAqLworICAgIHZvaWQgdXBkYXRlRnJvbU5hdGl2ZSgpIHsKKyAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgIG1OYW1lID0gbVJTLm5HZXROYW1lKGdldElEKG1SUykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGN1bGF0ZXMgdGhlIGhhc2ggY29kZSB2YWx1ZSBmb3IgYSBCYXNlT2JqLgorICAgICAqCisgICAgICogQHJldHVybiBpbnQKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworICAgICAgICByZXR1cm4gKGludCkoKG1JRCAmIDB4ZmZmZmZmZikgXiAobUlEID4+IDMyKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGFyZSB0aGUgY3VycmVudCBCYXNlT2JqIHdpdGggYW5vdGhlciBCYXNlT2JqIGZvciBlcXVhbGl0eS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byBjaGVjayBlcXVhbGl0eSB3aXRoLgorICAgICAqCisgICAgICogQHJldHVybiBib29sZWFuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKyAgICAgICAgLy8gRWFybHktb3V0IGNoZWNrIHRvIHNlZSBpZiBib3RoIEJhc2VPYmpzIGFyZSBhY3R1YWxseSB0aGUgc2FtZQorICAgICAgICBpZiAodGhpcyA9PSBvYmopCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoZ2V0Q2xhc3MoKSAhPSBvYmouZ2V0Q2xhc3MoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgQmFzZU9iaiBiID0gKEJhc2VPYmopIG9iajsKKyAgICAgICAgcmV0dXJuIG1JRCA9PSBiLm1JRDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTIuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQ3OWU0Ci0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlMi5qYXZhCkBAIC0wLDAgKzEsMzkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKKworCisvKioKKyAqIENsYXNzIGZvciBleHBvc2luZyB0aGUgbmF0aXZlIFJlbmRlclNjcmlwdCBieXRlMiB0eXBlIGJhY2sgdG8gdGhlIEFuZHJvaWQgc3lzdGVtLgorICoKKyAqKi8KK3B1YmxpYyBjbGFzcyBCeXRlMiB7CisgICAgcHVibGljIGJ5dGUgeDsKKyAgICBwdWJsaWMgYnl0ZSB5OworCisgICAgcHVibGljIEJ5dGUyKCkgeworICAgIH0KKworICAgIHB1YmxpYyBCeXRlMihieXRlIGluaXRYLCBieXRlIGluaXRZKSB7CisgICAgICAgIHggPSBpbml0WDsKKyAgICAgICAgeSA9IGluaXRZOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBCeXRlMihCeXRlMiBzb3VyY2UpIHsKKyAgICAgICAgdGhpcy54ID0gc291cmNlLng7CisgICAgICAgIHRoaXMueSA9IHNvdXJjZS55OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkKEJ5dGUyIGEpIHsKKyAgICAgICAgdGhpcy54ICs9IGEueDsKKyAgICAgICAgdGhpcy55ICs9IGEueTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgYWRkCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTIgYWRkKEJ5dGUyIGEsIEJ5dGUyIGIpIHsKKyAgICAgICAgQnl0ZTIgcmVzdWx0ID0gbmV3IEJ5dGUyKCk7CisgICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCArIGIueCk7CisgICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSArIGIueSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgYWRkCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGQoYnl0ZSB2YWx1ZSkgeworICAgICAgICB4ICs9IHZhbHVlOworICAgICAgICB5ICs9IHZhbHVlOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlMiBhZGQoQnl0ZTIgYSwgYnl0ZSBiKSB7CisgICAgICAgIEJ5dGUyIHJlc3VsdCA9IG5ldyBCeXRlMigpOworICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggKyBiKTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55ICsgYik7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3ViKEJ5dGUyIGEpIHsKKyAgICAgICAgdGhpcy54IC09IGEueDsKKyAgICAgICAgdGhpcy55IC09IGEueTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlMiBzdWIoQnl0ZTIgYSwgQnl0ZTIgYikgeworICAgICAgICBCeXRlMiByZXN1bHQgPSBuZXcgQnl0ZTIoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54IC0gYi54KTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55IC0gYi55KTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3ViKGJ5dGUgdmFsdWUpIHsKKyAgICAgICAgeCAtPSB2YWx1ZTsKKyAgICAgICAgeSAtPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlMiBzdWIoQnl0ZTIgYSwgYnl0ZSBiKSB7CisgICAgICAgIEJ5dGUyIHJlc3VsdCA9IG5ldyBCeXRlMigpOworICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggLSBiKTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55IC0gYik7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgbXVsKEJ5dGUyIGEpIHsKKyAgICAgICAgdGhpcy54ICo9IGEueDsKKyAgICAgICAgdGhpcy55ICo9IGEueTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlMiBtdWwoQnl0ZTIgYSwgQnl0ZTIgYikgeworICAgICAgICBCeXRlMiByZXN1bHQgPSBuZXcgQnl0ZTIoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54ICogYi54KTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55ICogYi55KTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgbXVsKGJ5dGUgdmFsdWUpIHsKKyAgICAgICAgeCAqPSB2YWx1ZTsKKyAgICAgICAgeSAqPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlMiBtdWwoQnl0ZTIgYSwgYnl0ZSBiKSB7CisgICAgICAgIEJ5dGUyIHJlc3VsdCA9IG5ldyBCeXRlMigpOworICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggKiBiKTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55ICogYik7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZGl2aXNpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGl2KEJ5dGUyIGEpIHsKKyAgICAgICAgdGhpcy54IC89IGEueDsKKyAgICAgICAgdGhpcy55IC89IGEueTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZGl2aXNpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlMiBkaXYoQnl0ZTIgYSwgQnl0ZTIgYikgeworICAgICAgICBCeXRlMiByZXN1bHQgPSBuZXcgQnl0ZTIoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54IC8gYi54KTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55IC8gYi55KTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkaXZpc2lvbgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGl2KGJ5dGUgdmFsdWUpIHsKKyAgICAgICAgeCAvPSB2YWx1ZTsKKyAgICAgICAgeSAvPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZGl2aXNpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlMiBkaXYoQnl0ZTIgYSwgYnl0ZSBiKSB7CisgICAgICAgIEJ5dGUyIHJlc3VsdCA9IG5ldyBCeXRlMigpOworICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggLyBiKTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55IC8gYik7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBnZXQgdmVjdG9yIGxlbmd0aAorICAgICAqCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBieXRlIGxlbmd0aCgpIHsKKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogc2V0IHZlY3RvciBuZWdhdGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBuZWdhdGUoKSB7CisgICAgICAgIHRoaXMueCA9IChieXRlKSgteCk7CisgICAgICAgIHRoaXMueSA9IChieXRlKSgteSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRvdCBQcm9kdWN0CisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgYnl0ZSBkb3RQcm9kdWN0KEJ5dGUyIGEpIHsKKyAgICAgICAgcmV0dXJuIChieXRlKSgoeCAqIGEueCkgKyAoeSAqIGEueSkpOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJ5dGUgZG90UHJvZHVjdChCeXRlMiBhLCBCeXRlMiBiKSB7CisgICAgICAgIHJldHVybiAoYnl0ZSkoKGIueCAqIGEueCkgKyAoYi55ICogYS55KSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGFkZCBNdWx0aXBsZQorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gZmFjdG9yCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkTXVsdGlwbGUoQnl0ZTIgYSwgYnl0ZSBmYWN0b3IpIHsKKyAgICAgICAgeCArPSBhLnggKiBmYWN0b3I7CisgICAgICAgIHkgKz0gYS55ICogZmFjdG9yOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHNldCB2ZWN0b3IgdmFsdWUgYnkgQnl0ZTIKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0KEJ5dGUyIGEpIHsKKyAgICAgICAgdGhpcy54ID0gYS54OworICAgICAgICB0aGlzLnkgPSBhLnk7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogc2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgQ2hhcgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlcyhieXRlIGEsIGJ5dGUgYikgeworICAgICAgICB0aGlzLnggPSBhOworICAgICAgICB0aGlzLnkgPSBiOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHJldHVybiB0aGUgZWxlbWVudCBzdW0gb2YgdmVjdG9yCisgICAgICoKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGJ5dGUgZWxlbWVudFN1bSgpIHsKKyAgICAgICAgcmV0dXJuIChieXRlKSh4ICsgeSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogZ2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKKyAgICAgKgorICAgICAqIEBwYXJhbSBpCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBieXRlIGdldChpbnQgaSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBzZXQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBpbmRleAorICAgICAqCisgICAgICogQHBhcmFtIGkKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRBdChpbnQgaSwgYnl0ZSB2YWx1ZSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgeCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICB5ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIGFkZCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4CisgICAgICoKKyAgICAgKiBAcGFyYW0gaQorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZEF0KGludCBpLCBieXRlIHZhbHVlKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICB4ICs9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICB5ICs9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBjb3B5IHRoZSB2ZWN0b3IgdG8gQ2hhciBhcnJheQorICAgICAqCisgICAgICogQHBhcmFtIGRhdGEKKyAgICAgKiBAcGFyYW0gb2Zmc2V0CisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weVRvKGJ5dGVbXSBkYXRhLCBpbnQgb2Zmc2V0KSB7CisgICAgICAgIGRhdGFbb2Zmc2V0XSA9IHg7CisgICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSB5OworICAgIH0KKworfQorCisKKworCmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGUzLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGUzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEzODMxMwotLS0gL2Rldi9udWxsCisrKyBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTMuamF2YQpAQCAtMCwwICsxLDQyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKKworLyoqCisgKiBDbGFzcyBmb3IgZXhwb3NpbmcgdGhlIG5hdGl2ZSBSZW5kZXJTY3JpcHQgYnl0ZTMgdHlwZSBiYWNrIHRvIHRoZSBBbmRyb2lkIHN5c3RlbS4KKyAqCisgKiovCitwdWJsaWMgY2xhc3MgQnl0ZTMgeworICAgIHB1YmxpYyBieXRlIHg7CisgICAgcHVibGljIGJ5dGUgeTsKKyAgICBwdWJsaWMgYnl0ZSB6OworCisgICAgcHVibGljIEJ5dGUzKCkgeworICAgIH0KKworICAgIHB1YmxpYyBCeXRlMyhieXRlIGluaXRYLCBieXRlIGluaXRZLCBieXRlIGluaXRaKSB7CisgICAgICAgIHggPSBpbml0WDsKKyAgICAgICAgeSA9IGluaXRZOworICAgICAgICB6ID0gaW5pdFo7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIEJ5dGUzKEJ5dGUzIHNvdXJjZSkgeworICAgICAgICB0aGlzLnggPSBzb3VyY2UueDsKKyAgICAgICAgdGhpcy55ID0gc291cmNlLnk7CisgICAgICAgIHRoaXMueiA9IHNvdXJjZS56OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkKEJ5dGUzIGEpIHsKKyAgICAgICAgdGhpcy54ICs9IGEueDsKKyAgICAgICAgdGhpcy55ICs9IGEueTsKKyAgICAgICAgdGhpcy56ICs9IGEuejsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgYWRkCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTMgYWRkKEJ5dGUzIGEsIEJ5dGUzIGIpIHsKKyAgICAgICAgQnl0ZTMgcmVzdWx0ID0gbmV3IEJ5dGUzKCk7CisgICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCArIGIueCk7CisgICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSArIGIueSk7CisgICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiArIGIueik7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgYWRkCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGQoYnl0ZSB2YWx1ZSkgeworICAgICAgICB4ICs9IHZhbHVlOworICAgICAgICB5ICs9IHZhbHVlOworICAgICAgICB6ICs9IHZhbHVlOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlMyBhZGQoQnl0ZTMgYSwgYnl0ZSBiKSB7CisgICAgICAgIEJ5dGUzIHJlc3VsdCA9IG5ldyBCeXRlMygpOworICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggKyBiKTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55ICsgYik7CisgICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiArIGIpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN1YihCeXRlMyBhKSB7CisgICAgICAgIHRoaXMueCAtPSBhLng7CisgICAgICAgIHRoaXMueSAtPSBhLnk7CisgICAgICAgIHRoaXMueiAtPSBhLno7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTMgc3ViKEJ5dGUzIGEsIEJ5dGUzIGIpIHsKKyAgICAgICAgQnl0ZTMgcmVzdWx0ID0gbmV3IEJ5dGUzKCk7CisgICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCAtIGIueCk7CisgICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAtIGIueSk7CisgICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiAtIGIueik7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN1YihieXRlIHZhbHVlKSB7CisgICAgICAgIHggLT0gdmFsdWU7CisgICAgICAgIHkgLT0gdmFsdWU7CisgICAgICAgIHogLT0gdmFsdWU7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTMgc3ViKEJ5dGUzIGEsIGJ5dGUgYikgeworICAgICAgICBCeXRlMyByZXN1bHQgPSBuZXcgQnl0ZTMoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54IC0gYik7CisgICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAtIGIpOworICAgICAgICByZXN1bHQueiA9IChieXRlKShhLnogLSBiKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtdWwoQnl0ZTMgYSkgeworICAgICAgICB0aGlzLnggKj0gYS54OworICAgICAgICB0aGlzLnkgKj0gYS55OworICAgICAgICB0aGlzLnogKj0gYS56OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEJ5dGUzIG11bChCeXRlMyBhLCBCeXRlMyBiKSB7CisgICAgICAgIEJ5dGUzIHJlc3VsdCA9IG5ldyBCeXRlMygpOworICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggKiBiLngpOworICAgICAgICByZXN1bHQueSA9IChieXRlKShhLnkgKiBiLnkpOworICAgICAgICByZXN1bHQueiA9IChieXRlKShhLnogKiBiLnopOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtdWwoYnl0ZSB2YWx1ZSkgeworICAgICAgICB4ICo9IHZhbHVlOworICAgICAgICB5ICo9IHZhbHVlOworICAgICAgICB6ICo9IHZhbHVlOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEJ5dGUzIG11bChCeXRlMyBhLCBieXRlIGIpIHsKKyAgICAgICAgQnl0ZTMgcmVzdWx0ID0gbmV3IEJ5dGUzKCk7CisgICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCAqIGIpOworICAgICAgICByZXN1bHQueSA9IChieXRlKShhLnkgKiBiKTsKKyAgICAgICAgcmVzdWx0LnogPSAoYnl0ZSkoYS56ICogYik7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZGl2aXNpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGl2KEJ5dGUzIGEpIHsKKyAgICAgICAgdGhpcy54IC89IGEueDsKKyAgICAgICAgdGhpcy55IC89IGEueTsKKyAgICAgICAgdGhpcy56IC89IGEuejsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZGl2aXNpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlMyBkaXYoQnl0ZTMgYSwgQnl0ZTMgYikgeworICAgICAgICBCeXRlMyByZXN1bHQgPSBuZXcgQnl0ZTMoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54IC8gYi54KTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55IC8gYi55KTsKKyAgICAgICAgcmVzdWx0LnogPSAoYnl0ZSkoYS56IC8gYi56KTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkaXZpc2lvbgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGl2KGJ5dGUgdmFsdWUpIHsKKyAgICAgICAgeCAvPSB2YWx1ZTsKKyAgICAgICAgeSAvPSB2YWx1ZTsKKyAgICAgICAgeiAvPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZGl2aXNpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlMyBkaXYoQnl0ZTMgYSwgYnl0ZSBiKSB7CisgICAgICAgIEJ5dGUzIHJlc3VsdCA9IG5ldyBCeXRlMygpOworICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggLyBiKTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55IC8gYik7CisgICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiAvIGIpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogZ2V0IHZlY3RvciBsZW5ndGgKKyAgICAgKgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgYnl0ZSBsZW5ndGgoKSB7CisgICAgICAgIHJldHVybiAzOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHNldCB2ZWN0b3IgbmVnYXRlCisgICAgICovCisgICAgcHVibGljIHZvaWQgbmVnYXRlKCkgeworICAgICAgICB0aGlzLnggPSAoYnl0ZSkoLXgpOworICAgICAgICB0aGlzLnkgPSAoYnl0ZSkoLXkpOworICAgICAgICB0aGlzLnogPSAoYnl0ZSkoLXopOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGJ5dGUgZG90UHJvZHVjdChCeXRlMyBhKSB7CisgICAgICAgIHJldHVybiAoYnl0ZSkoKGJ5dGUpKChieXRlKSh4ICogYS54KSArIChieXRlKSh5ICogYS55KSkgKyAoYnl0ZSkoeiAqIGEueikpOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJ5dGUgZG90UHJvZHVjdChCeXRlMyBhLCBCeXRlMyBiKSB7CisgICAgICAgIHJldHVybiAoYnl0ZSkoKGJ5dGUpKChieXRlKShiLnggKiBhLngpICsgKGJ5dGUpKGIueSAqIGEueSkpICsgKGJ5dGUpKGIueiAqIGEueikpOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQgTXVsdGlwbGUKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGZhY3RvcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZE11bHRpcGxlKEJ5dGUzIGEsIGJ5dGUgZmFjdG9yKSB7CisgICAgICAgIHggKz0gYS54ICogZmFjdG9yOworICAgICAgICB5ICs9IGEueSAqIGZhY3RvcjsKKyAgICAgICAgeiArPSBhLnogKiBmYWN0b3I7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogc2V0IHZlY3RvciB2YWx1ZSBieSBCeXRlMworICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXQoQnl0ZTMgYSkgeworICAgICAgICB0aGlzLnggPSBhLng7CisgICAgICAgIHRoaXMueSA9IGEueTsKKyAgICAgICAgdGhpcy56ID0gYS56OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHNldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IENoYXIKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcGFyYW0gYworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlcyhieXRlIGEsIGJ5dGUgYiwgYnl0ZSBjKSB7CisgICAgICAgIHRoaXMueCA9IGE7CisgICAgICAgIHRoaXMueSA9IGI7CisgICAgICAgIHRoaXMueiA9IGM7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogcmV0dXJuIHRoZSBlbGVtZW50IHN1bSBvZiB2ZWN0b3IKKyAgICAgKgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgYnl0ZSBlbGVtZW50U3VtKCkgeworICAgICAgICByZXR1cm4gKGJ5dGUpKHggKyB5ICsgeik7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogZ2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKKyAgICAgKgorICAgICAqIEBwYXJhbSBpCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBieXRlIGdldChpbnQgaSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXR1cm4gejsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogc2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKKyAgICAgKgorICAgICAqIEBwYXJhbSBpCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0QXQoaW50IGksIGJ5dGUgdmFsdWUpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHggPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgeSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB6ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIGFkZCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4CisgICAgICoKKyAgICAgKiBAcGFyYW0gaQorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZEF0KGludCBpLCBieXRlIHZhbHVlKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICB4ICs9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICB5ICs9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB6ICs9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBjb3B5IHRoZSB2ZWN0b3IgdG8gQ2hhciBhcnJheQorICAgICAqCisgICAgICogQHBhcmFtIGRhdGEKKyAgICAgKiBAcGFyYW0gb2Zmc2V0CisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weVRvKGJ5dGVbXSBkYXRhLCBpbnQgb2Zmc2V0KSB7CisgICAgICAgIGRhdGFbb2Zmc2V0XSA9IHg7CisgICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSB5OworICAgICAgICBkYXRhW29mZnNldCArIDJdID0gejsKKyAgICB9Cit9CisKKworCisKZGlmZiAtLWdpdCBhL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTQuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTRjMTNkCi0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlNC5qYXZhCkBAIC0wLDAgKzEsNDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKKworCisvKioKKyAqIENsYXNzIGZvciBleHBvc2luZyB0aGUgbmF0aXZlIFJlbmRlclNjcmlwdCBieXRlNCB0eXBlIGJhY2sgdG8gdGhlIEFuZHJvaWQgc3lzdGVtLgorICoKKyAqKi8KK3B1YmxpYyBjbGFzcyBCeXRlNCB7CisgICAgcHVibGljIGJ5dGUgeDsKKyAgICBwdWJsaWMgYnl0ZSB5OworICAgIHB1YmxpYyBieXRlIHo7CisgICAgcHVibGljIGJ5dGUgdzsKKworICAgIHB1YmxpYyBCeXRlNCgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgQnl0ZTQoYnl0ZSBpbml0WCwgYnl0ZSBpbml0WSwgYnl0ZSBpbml0WiwgYnl0ZSBpbml0VykgeworICAgICAgICB4ID0gaW5pdFg7CisgICAgICAgIHkgPSBpbml0WTsKKyAgICAgICAgeiA9IGluaXRaOworICAgICAgICB3ID0gaW5pdFc7CisgICAgfQorICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBCeXRlNChCeXRlNCBzb3VyY2UpIHsKKyAgICAgICAgdGhpcy54ID0gc291cmNlLng7CisgICAgICAgIHRoaXMueSA9IHNvdXJjZS55OworICAgICAgICB0aGlzLnogPSBzb3VyY2UuejsKKyAgICAgICAgdGhpcy53ID0gc291cmNlLnc7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGFkZAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGQoQnl0ZTQgYSkgeworICAgICAgICB0aGlzLnggKz0gYS54OworICAgICAgICB0aGlzLnkgKz0gYS55OworICAgICAgICB0aGlzLnogKz0gYS56OworICAgICAgICB0aGlzLncgKz0gYS53OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlNCBhZGQoQnl0ZTQgYSwgQnl0ZTQgYikgeworICAgICAgICBCeXRlNCByZXN1bHQgPSBuZXcgQnl0ZTQoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54ICsgYi54KTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55ICsgYi55KTsKKyAgICAgICAgcmVzdWx0LnogPSAoYnl0ZSkoYS56ICsgYi56KTsKKyAgICAgICAgcmVzdWx0LncgPSAoYnl0ZSkoYS53ICsgYi53KTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZChieXRlIHZhbHVlKSB7CisgICAgICAgIHggKz0gdmFsdWU7CisgICAgICAgIHkgKz0gdmFsdWU7CisgICAgICAgIHogKz0gdmFsdWU7CisgICAgICAgIHcgKz0gdmFsdWU7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGFkZAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEJ5dGU0IGFkZChCeXRlNCBhLCBieXRlIGIpIHsKKyAgICAgICAgQnl0ZTQgcmVzdWx0ID0gbmV3IEJ5dGU0KCk7CisgICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCArIGIpOworICAgICAgICByZXN1bHQueSA9IChieXRlKShhLnkgKyBiKTsKKyAgICAgICAgcmVzdWx0LnogPSAoYnl0ZSkoYS56ICsgYik7CisgICAgICAgIHJlc3VsdC53ID0gKGJ5dGUpKGEudyArIGIpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN1YihCeXRlNCBhKSB7CisgICAgICAgIHRoaXMueCAtPSBhLng7CisgICAgICAgIHRoaXMueSAtPSBhLnk7CisgICAgICAgIHRoaXMueiAtPSBhLno7CisgICAgICAgIHRoaXMudyAtPSBhLnc7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTQgc3ViKEJ5dGU0IGEsIEJ5dGU0IGIpIHsKKyAgICAgICAgQnl0ZTQgcmVzdWx0ID0gbmV3IEJ5dGU0KCk7CisgICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCAtIGIueCk7CisgICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAtIGIueSk7CisgICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiAtIGIueik7CisgICAgICAgIHJlc3VsdC53ID0gKGJ5dGUpKGEudyAtIGIudyk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN1YihieXRlIHZhbHVlKSB7CisgICAgICAgIHggLT0gdmFsdWU7CisgICAgICAgIHkgLT0gdmFsdWU7CisgICAgICAgIHogLT0gdmFsdWU7CisgICAgICAgIHcgLT0gdmFsdWU7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZTQgc3ViKEJ5dGU0IGEsIGJ5dGUgYikgeworICAgICAgICBCeXRlNCByZXN1bHQgPSBuZXcgQnl0ZTQoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54IC0gYik7CisgICAgICAgIHJlc3VsdC55ID0gKGJ5dGUpKGEueSAtIGIpOworICAgICAgICByZXN1bHQueiA9IChieXRlKShhLnogLSBiKTsKKyAgICAgICAgcmVzdWx0LncgPSAoYnl0ZSkoYS53IC0gYik7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgbXVsKEJ5dGU0IGEpIHsKKyAgICAgICAgdGhpcy54ICo9IGEueDsKKyAgICAgICAgdGhpcy55ICo9IGEueTsKKyAgICAgICAgdGhpcy56ICo9IGEuejsKKyAgICAgICAgdGhpcy53ICo9IGEudzsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlNCBtdWwoQnl0ZTQgYSwgQnl0ZTQgYikgeworICAgICAgICBCeXRlNCByZXN1bHQgPSBuZXcgQnl0ZTQoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoYnl0ZSkoYS54ICogYi54KTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55ICogYi55KTsKKyAgICAgICAgcmVzdWx0LnogPSAoYnl0ZSkoYS56ICogYi56KTsKKyAgICAgICAgcmVzdWx0LncgPSAoYnl0ZSkoYS53ICogYi53KTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgbXVsKGJ5dGUgdmFsdWUpIHsKKyAgICAgICAgeCAqPSB2YWx1ZTsKKyAgICAgICAgeSAqPSB2YWx1ZTsKKyAgICAgICAgeiAqPSB2YWx1ZTsKKyAgICAgICAgdyAqPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCeXRlNCBtdWwoQnl0ZTQgYSwgYnl0ZSBiKSB7CisgICAgICAgIEJ5dGU0IHJlc3VsdCA9IG5ldyBCeXRlNCgpOworICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggKiBiKTsKKyAgICAgICAgcmVzdWx0LnkgPSAoYnl0ZSkoYS55ICogYik7CisgICAgICAgIHJlc3VsdC56ID0gKGJ5dGUpKGEueiAqIGIpOworICAgICAgICByZXN1bHQudyA9IChieXRlKShhLncgKiBiKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkaXZpc2lvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXYoQnl0ZTQgYSkgeworICAgICAgICB0aGlzLnggLz0gYS54OworICAgICAgICB0aGlzLnkgLz0gYS55OworICAgICAgICB0aGlzLnogLz0gYS56OworICAgICAgICB0aGlzLncgLz0gYS53OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkaXZpc2lvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEJ5dGU0IGRpdihCeXRlNCBhLCBCeXRlNCBiKSB7CisgICAgICAgIEJ5dGU0IHJlc3VsdCA9IG5ldyBCeXRlNCgpOworICAgICAgICByZXN1bHQueCA9IChieXRlKShhLnggLyBiLngpOworICAgICAgICByZXN1bHQueSA9IChieXRlKShhLnkgLyBiLnkpOworICAgICAgICByZXN1bHQueiA9IChieXRlKShhLnogLyBiLnopOworICAgICAgICByZXN1bHQudyA9IChieXRlKShhLncgLyBiLncpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRpdmlzaW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXYoYnl0ZSB2YWx1ZSkgeworICAgICAgICB4IC89IHZhbHVlOworICAgICAgICB5IC89IHZhbHVlOworICAgICAgICB6IC89IHZhbHVlOworICAgICAgICB3IC89IHZhbHVlOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkaXZpc2lvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEJ5dGU0IGRpdihCeXRlNCBhLCBieXRlIGIpIHsKKyAgICAgICAgQnl0ZTQgcmVzdWx0ID0gbmV3IEJ5dGU0KCk7CisgICAgICAgIHJlc3VsdC54ID0gKGJ5dGUpKGEueCAvIGIpOworICAgICAgICByZXN1bHQueSA9IChieXRlKShhLnkgLyBiKTsKKyAgICAgICAgcmVzdWx0LnogPSAoYnl0ZSkoYS56IC8gYik7CisgICAgICAgIHJlc3VsdC53ID0gKGJ5dGUpKGEudyAvIGIpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogZ2V0IHZlY3RvciBsZW5ndGgKKyAgICAgKgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgYnl0ZSBsZW5ndGgoKSB7CisgICAgICAgIHJldHVybiA0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHNldCB2ZWN0b3IgbmVnYXRlCisgICAgICovCisgICAgcHVibGljIHZvaWQgbmVnYXRlKCkgeworICAgICAgICB0aGlzLnggPSAoYnl0ZSkoLXgpOworICAgICAgICB0aGlzLnkgPSAoYnl0ZSkoLXkpOworICAgICAgICB0aGlzLnogPSAoYnl0ZSkoLXopOworICAgICAgICB0aGlzLncgPSAoYnl0ZSkoLXcpOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGJ5dGUgZG90UHJvZHVjdChCeXRlNCBhKSB7CisgICAgICAgIHJldHVybiAoYnl0ZSkoKHggKiBhLngpICsgKHkgKiBhLnkpICsgKHogKiBhLnopICsgKHcgKiBhLncpKTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZG90IFByb2R1Y3QKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBieXRlIGRvdFByb2R1Y3QoQnl0ZTQgYSwgQnl0ZTQgYikgeworICAgICAgICByZXR1cm4gKGJ5dGUpKChiLnggKiBhLngpICsgKGIueSAqIGEueSkgKyAoYi56ICogYS56KSArIChiLncgKiBhLncpKTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgYWRkIE11bHRpcGxlCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBmYWN0b3IKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRNdWx0aXBsZShCeXRlNCBhLCBieXRlIGZhY3RvcikgeworICAgICAgICB4ICs9IGEueCAqIGZhY3RvcjsKKyAgICAgICAgeSArPSBhLnkgKiBmYWN0b3I7CisgICAgICAgIHogKz0gYS56ICogZmFjdG9yOworICAgICAgICB3ICs9IGEudyAqIGZhY3RvcjsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBzZXQgdmVjdG9yIHZhbHVlIGJ5IEJ5dGU0CisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldChCeXRlNCBhKSB7CisgICAgICAgIHRoaXMueCA9IGEueDsKKyAgICAgICAgdGhpcy55ID0gYS55OworICAgICAgICB0aGlzLnogPSBhLno7CisgICAgICAgIHRoaXMudyA9IGEudzsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBzZXQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZXMKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcGFyYW0gYworICAgICAqIEBwYXJhbSBkCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VmFsdWVzKGJ5dGUgYSwgYnl0ZSBiLCBieXRlIGMsIGJ5dGUgZCkgeworICAgICAgICB0aGlzLnggPSBhOworICAgICAgICB0aGlzLnkgPSBiOworICAgICAgICB0aGlzLnogPSBjOworICAgICAgICB0aGlzLncgPSBkOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHJldHVybiB0aGUgZWxlbWVudCBzdW0gb2YgdmVjdG9yCisgICAgICoKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGJ5dGUgZWxlbWVudFN1bSgpIHsKKyAgICAgICAgcmV0dXJuIChieXRlKSh4ICsgeSArIHogKyB3KTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBnZXQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBpbmRleAorICAgICAqCisgICAgICogQHBhcmFtIGkKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGJ5dGUgZ2V0KGludCBpKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiB6OworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICByZXR1cm4gdzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogc2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKKyAgICAgKgorICAgICAqIEBwYXJhbSBpCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0QXQoaW50IGksIGJ5dGUgdmFsdWUpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHggPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgeSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB6ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHcgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogYWRkIHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKKyAgICAgKgorICAgICAqIEBwYXJhbSBpCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkQXQoaW50IGksIGJ5dGUgdmFsdWUpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHggKz0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHkgKz0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHogKz0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHcgKz0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIGNvcHkgdGhlIHZlY3RvciB0byBDaGFyIGFycmF5CisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF0YQorICAgICAqIEBwYXJhbSBvZmZzZXQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5VG8oYnl0ZVtdIGRhdGEsIGludCBvZmZzZXQpIHsKKyAgICAgICAgZGF0YVtvZmZzZXRdID0geDsKKyAgICAgICAgZGF0YVtvZmZzZXQgKyAxXSA9IHk7CisgICAgICAgIGRhdGFbb2Zmc2V0ICsgMl0gPSB6OworICAgICAgICBkYXRhW29mZnNldCArIDNdID0gdzsKKyAgICB9Cit9CisKKworCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTIuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTIuamF2YQpyZW5hbWUgdG8gcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyLmphdmEKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMy5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUzLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMy5qYXZhCnJlbmFtZSB0byBycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTMuamF2YQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGU0LmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGU0LmphdmEKcmVuYW1lIHRvIHJzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlNC5qYXZhCmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZTgzOWUKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQuamF2YQpAQCAtMCwwICsxLDExMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisvKioKKyAqIDxwPkFuIEVsZW1lbnQgcmVwcmVzZW50cyBvbmUgaXRlbSB3aXRoaW4gYW4ge0BsaW5rCisgKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9ufS4gIEFuIEVsZW1lbnQgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGEgQworICogdHlwZSBpbiBhIFJlbmRlclNjcmlwdCBrZXJuZWwuIEVsZW1lbnRzIG1heSBiZSBiYXNpYyBvciBjb21wbGV4LiBTb21lIGJhc2ljCisgKiBlbGVtZW50cyBhcmU8L3A+IDx1bD4gPGxpPkEgc2luZ2xlIGZsb2F0IHZhbHVlIChlcXVpdmFsZW50IHRvIGEgZmxvYXQgaW4gYQorICoga2VybmVsKTwvbGk+IDxsaT5BIGZvdXItZWxlbWVudCBmbG9hdCB2ZWN0b3IgKGVxdWl2YWxlbnQgdG8gYSBmbG9hdDQgaW4gYQorICoga2VybmVsKTwvbGk+IDxsaT5BbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciAoZXF1aXZhbGVudCB0byBhbiB1bnNpZ25lZCBpbnQgaW4KKyAqIGEga2VybmVsKTwvbGk+IDxsaT5BIHNpbmdsZSBzaWduZWQgOC1iaXQgaW50ZWdlciAoZXF1aXZhbGVudCB0byBhIGNoYXIgaW4gYQorICoga2VybmVsKTwvbGk+IDwvdWw+IDxwPkEgY29tcGxleCBlbGVtZW50IGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBhIEMgc3RydWN0CisgKiBhbmQgY29udGFpbnMgYSBudW1iZXIgb2YgYmFzaWMgb3IgY29tcGxleCBFbGVtZW50cy4gRnJvbSBKYXZhIGNvZGUsIGEgY29tcGxleAorICogZWxlbWVudCBjb250YWlucyBhIGxpc3Qgb2Ygc3ViLWVsZW1lbnRzIGFuZCBuYW1lcyB0aGF0IHJlcHJlc2VudHMgYQorICogcGFydGljdWxhciBkYXRhIHN0cnVjdHVyZS4gU3RydWN0cyB1c2VkIGluIFJTIHNjcmlwdHMgYXJlIGF2YWlsYWJsZSB0byBKYXZhCisgKiBjb2RlIGJ5IHVzaW5nIHRoZSB7QGNvZGUgU2NyaXB0RmllbGRfc3RydWN0bmFtZX0gY2xhc3MgdGhhdCBpcyByZWZsZWN0ZWQgZnJvbQorICogYSBwYXJ0aWN1bGFyIHNjcmlwdC48L3A+CisgKgorICogPHA+QmFzaWMgRWxlbWVudHMgYXJlIGNvbXByaXNlZCBvZiBhIHtAbGluaworICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudC5EYXRhVHlwZX0gYW5kIGEge0BsaW5rCisgKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LkRhdGFLaW5kfS4gVGhlIERhdGFUeXBlIGVuY29kZXMgQyB0eXBlCisgKiBpbmZvcm1hdGlvbiBvZiBhbiBFbGVtZW50LCB3aGlsZSB0aGUgRGF0YUtpbmQgZW5jb2RlcyBob3cgdGhhdCBFbGVtZW50IHNob3VsZAorICogYmUgaW50ZXJwcmV0ZWQgYnkgYSB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2FtcGxlcn0uIE5vdGUgdGhhdCB7QGxpbmsKKyAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb259IG9iamVjdHMgd2l0aCBEYXRhS2luZCB7QGxpbmsKKyAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQuRGF0YUtpbmQjVVNFUn0gY2Fubm90IGJlIHVzZWQgYXMgaW5wdXQgZm9yIGEKKyAqIHtAbGluayBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TYW1wbGVyfS4gSW4gZ2VuZXJhbCwge0BsaW5rCisgKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9ufSBvYmplY3RzIHRoYXQgYXJlIGludGVuZGVkIGZvciB1c2Ugd2l0aCBhCisgKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2FtcGxlcn0gc2hvdWxkIHVzZSBiaXRtYXAtZGVyaXZlZCBFbGVtZW50cyBzdWNoCisgKiBhcyB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudCNSR0JBXzg4ODh9IG9yIHtAbGluaworICogYW5kcm9pZC5yZW5kZXJzY3JpcHQjRWxlbWVudC5BXzh9LjwvcD4KKyAqCisgKiA8ZGl2IGNsYXNzPSJzcGVjaWFsIHJlZmVyZW5jZSI+CisgKiA8aDM+RGV2ZWxvcGVyIEd1aWRlczwvaDM+CisgKiA8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjcmVhdGluZyBhbiBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgUmVuZGVyU2NyaXB0LCByZWFkIHRoZQorICogPGEgaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZW5kZXJzY3JpcHQvaW5kZXguaHRtbCI+UmVuZGVyU2NyaXB0PC9hPiBkZXZlbG9wZXIgZ3VpZGUuPC9wPgorICogPC9kaXY+CisgKiovCitwdWJsaWMgY2xhc3MgRWxlbWVudCBleHRlbmRzIEJhc2VPYmogeworICAgIGludCBtU2l6ZTsKKyAgICBFbGVtZW50W10gbUVsZW1lbnRzOworICAgIFN0cmluZ1tdIG1FbGVtZW50TmFtZXM7CisgICAgaW50W10gbUFycmF5U2l6ZXM7CisgICAgaW50W10gbU9mZnNldEluQnl0ZXM7CisKKyAgICBpbnRbXSBtVmlzaWJsZUVsZW1lbnRNYXA7CisKKyAgICBEYXRhVHlwZSBtVHlwZTsKKyAgICBEYXRhS2luZCBtS2luZDsKKyAgICBib29sZWFuIG1Ob3JtYWxpemVkOworICAgIGludCBtVmVjdG9yU2l6ZTsKKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVWaXNpYmxlU3ViRWxlbWVudHMoKSB7CisgICAgICAgIGlmIChtRWxlbWVudHMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW50IG5vUGFkZGluZ0ZpZWxkQ291bnQgPSAwOworICAgICAgICBpbnQgZmllbGRDb3VudCA9IG1FbGVtZW50TmFtZXMubGVuZ3RoOworICAgICAgICAvLyBGaW5kIG91dCBob3cgbWFueSBlbGVtZW50cyBhcmUgbm90IHBhZGRpbmcKKyAgICAgICAgZm9yIChpbnQgY3QgPSAwOyBjdCA8IGZpZWxkQ291bnQ7IGN0ICsrKSB7CisgICAgICAgICAgICBpZiAobUVsZW1lbnROYW1lc1tjdF0uY2hhckF0KDApICE9ICcjJykgeworICAgICAgICAgICAgICAgIG5vUGFkZGluZ0ZpZWxkQ291bnQgKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbVZpc2libGVFbGVtZW50TWFwID0gbmV3IGludFtub1BhZGRpbmdGaWVsZENvdW50XTsKKworICAgICAgICAvLyBNYWtlIGEgbWFwIHRoYXQgcG9pbnRzIHVzIGF0IG5vbi1wYWRkaW5nIGVsZW1lbnRzCisgICAgICAgIGZvciAoaW50IGN0ID0gMCwgY3ROb1BhZGRpbmcgPSAwOyBjdCA8IGZpZWxkQ291bnQ7IGN0ICsrKSB7CisgICAgICAgICAgICBpZiAobUVsZW1lbnROYW1lc1tjdF0uY2hhckF0KDApICE9ICcjJykgeworICAgICAgICAgICAgICAgIG1WaXNpYmxlRWxlbWVudE1hcFtjdE5vUGFkZGluZyArK10gPSBjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICogQHJldHVybiBlbGVtZW50IHNpemUgaW4gYnl0ZXMKKyAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0Qnl0ZXNTaXplKCkge3JldHVybiBtU2l6ZTt9CisKKyAgICAvKioKKyAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB2ZWN0b3IgY29tcG9uZW50cy4gMiBmb3IgZmxvYXQyLCA0IGZvcgorICAgICogZmxvYXQ0LCBldGMuCisgICAgKiBAcmV0dXJuIGVsZW1lbnQgdmVjdG9yIHNpemUKKyAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0VmVjdG9yU2l6ZSgpIHtyZXR1cm4gbVZlY3RvclNpemU7fQorCisKKyAgICAvKioKKyAgICAgKiBEYXRhVHlwZSByZXByZXNlbnRzIHRoZSBiYXNpYyB0eXBlIGluZm9ybWF0aW9uIGZvciBhIGJhc2ljIGVsZW1lbnQuICBUaGUKKyAgICAgKiBuYW1pbmcgY29udmVudGlvbiBmb2xsb3dzLiAgRm9yIG51bWVyaWMgdHlwZXMgaXQgaXMgRkxPQVQsCisgICAgICogU0lHTkVELCBvciBVTlNJR05FRCBmb2xsb3dlZCBieSB0aGUgX0JJVFMgd2hlcmUgQklUUyBpcyB0aGUKKyAgICAgKiBzaXplIG9mIHRoZSBkYXRhLiAgQk9PTEVBTiBpcyBhIHRydWUgLyBmYWxzZSAoMSwwKQorICAgICAqIHJlcHJlc2VudGVkIGluIGFuIDggYml0IGNvbnRhaW5lci4gIFRoZSBVTlNJR05FRCB2YXJpYW50cworICAgICAqIHdpdGggbXVsdGlwbGUgYml0IGRlZmluaXRpb25zIGFyZSBmb3IgcGFja2VkIGdyYXBoaWNhbCBkYXRhCisgICAgICogZm9ybWF0cyBhbmQgcmVwcmVzZW50IHZlY3RvcnMgd2l0aCBwZXIgdmVjdG9yIG1lbWJlciBzaXplcworICAgICAqIHdoaWNoIGFyZSB0cmVhdGVkIGFzIGEgc2luZ2xlIHVuaXQgZm9yIHBhY2tpbmcgYW5kIGFsaWdubWVudAorICAgICAqIHB1cnBvc2VzLgorICAgICAqCisgICAgICogTUFUUklYIHRoZSB0aHJlZSBtYXRyaXggdHlwZXMgY29udGFpbiBGTE9BVF8zMiBlbGVtZW50cyBhbmQgYXJlIHRyZWF0ZWQKKyAgICAgKiBhcyAzMiBiaXRzIGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCisgICAgICoKKyAgICAgKiBSU18qIG9iamVjdHMuICAzMiBiaXQgb3BhcXVlIGhhbmRsZXMuCisgICAgICovCisgICAgcHVibGljIGVudW0gRGF0YVR5cGUgeworICAgICAgICBOT05FICgwLCAwKSwKKyAgICAgICAgLy9GTE9BVF8xNiAoMSwgMiksCisgICAgICAgIEZMT0FUXzMyICgyLCA0KSwKKyAgICAgICAgRkxPQVRfNjQgKDMsIDgpLAorICAgICAgICBTSUdORURfOCAoNCwgMSksCisgICAgICAgIFNJR05FRF8xNiAoNSwgMiksCisgICAgICAgIFNJR05FRF8zMiAoNiwgNCksCisgICAgICAgIFNJR05FRF82NCAoNywgOCksCisgICAgICAgIFVOU0lHTkVEXzggKDgsIDEpLAorICAgICAgICBVTlNJR05FRF8xNiAoOSwgMiksCisgICAgICAgIFVOU0lHTkVEXzMyICgxMCwgNCksCisgICAgICAgIFVOU0lHTkVEXzY0ICgxMSwgOCksCisKKyAgICAgICAgQk9PTEVBTigxMiwgMSksCisKKyAgICAgICAgVU5TSUdORURfNV82XzUgKDEzLCAyKSwKKyAgICAgICAgVU5TSUdORURfNV81XzVfMSAoMTQsIDIpLAorICAgICAgICBVTlNJR05FRF80XzRfNF80ICgxNSwgMiksCisKKyAgICAgICAgTUFUUklYXzRYNCAoMTYsIDY0KSwKKyAgICAgICAgTUFUUklYXzNYMyAoMTcsIDM2KSwKKyAgICAgICAgTUFUUklYXzJYMiAoMTgsIDE2KSwKKworICAgICAgICBSU19FTEVNRU5UICgxMDAwLCA0KSwKKyAgICAgICAgUlNfVFlQRSAoMTAwMSwgNCksCisgICAgICAgIFJTX0FMTE9DQVRJT04gKDEwMDIsIDQpLAorICAgICAgICBSU19TQU1QTEVSICgxMDAzLCA0KSwKKyAgICAgICAgUlNfU0NSSVBUICgxMDA0LCA0KSwKKyAgICAgICAgUlNfTUVTSCAoMTAwNSwgNCksCisgICAgICAgIFJTX1BST0dSQU1fRlJBR01FTlQgKDEwMDYsIDQpLAorICAgICAgICBSU19QUk9HUkFNX1ZFUlRFWCAoMTAwNywgNCksCisgICAgICAgIFJTX1BST0dSQU1fUkFTVEVSICgxMDA4LCA0KSwKKyAgICAgICAgUlNfUFJPR1JBTV9TVE9SRSAoMTAwOSwgNCksCisgICAgICAgIFJTX0ZPTlQgKDEwMTAsIDQpOworCisgICAgICAgIGludCBtSUQ7CisgICAgICAgIGludCBtU2l6ZTsKKyAgICAgICAgRGF0YVR5cGUoaW50IGlkLCBpbnQgc2l6ZSkgeworICAgICAgICAgICAgbUlEID0gaWQ7CisgICAgICAgICAgICBtU2l6ZSA9IHNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiB0aGUgZGF0YSBpZiByZXF1aXJlZC4gIFRoaXMgaXMgcHJpbWFybHkKKyAgICAgKiB1c2VmdWwgZm9yIGdyYXBoaWNhbCBkYXRhLiAgVVNFUiBpbmRpY2F0ZXMgbm8gc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBpcworICAgICAqIGV4cGVjdGVkLiAgUElYRUwgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBzdGFuZGFyZCBkYXRhIHR5cGVzIGZvcgorICAgICAqIHJlcHJlc2VudGluZyB0ZXh0dXJlIGZvcm1hdHMuCisgICAgICovCisgICAgcHVibGljIGVudW0gRGF0YUtpbmQgeworICAgICAgICBVU0VSICgwKSwKKworICAgICAgICBQSVhFTF9MICg3KSwKKyAgICAgICAgUElYRUxfQSAoOCksCisgICAgICAgIFBJWEVMX0xBICg5KSwKKyAgICAgICAgUElYRUxfUkdCICgxMCksCisgICAgICAgIFBJWEVMX1JHQkEgKDExKSwKKyAgICAgICAgUElYRUxfREVQVEggKDEyKSwKKyAgICAgICAgUElYRUxfWVVWKDEzKTsKKworICAgICAgICBpbnQgbUlEOworICAgICAgICBEYXRhS2luZChpbnQgaWQpIHsKKyAgICAgICAgICAgIG1JRCA9IGlkOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGlmIGEgZWxlbWVudCBpcyB0b28gY29tcGxleCBmb3IgdXNlIGFzIGEgZGF0YSBzb3VyY2UgZm9yIGEgTWVzaCBvcgorICAgICAqIGEgUHJvZ3JhbS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gYm9vbGVhbgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ29tcGxleCgpIHsKKyAgICAgICAgaWYgKG1FbGVtZW50cyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBtRWxlbWVudHMubGVuZ3RoOyBjdCsrKSB7CisgICAgICAgICAgICBpZiAobUVsZW1lbnRzW2N0XS5tRWxlbWVudHMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIEVsZW1lbnRzIGNvdWxkIGJlIHNpbXBsZSwgc3VjaCBhcyBhbiBpbnQgb3IgYSBmbG9hdCwgb3IgYQorICAgICogc3RydWN0dXJlIHdpdGggbXVsdGlwbGUgc3ViIGVsZW1lbnRzLCBzdWNoIGFzIGEgY29sbGVjdGlvbiBvZgorICAgICogZmxvYXRzLCBmbG9hdDIsIGZsb2F0NC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gZm9yIHNpbXBsZQorICAgICogZWxlbWVudHMgb3IgdGhlIG51bWJlciBvZiBzdWItZWxlbWVudHMgb3RoZXJ3aXNlLgorICAgICogQHJldHVybiBudW1iZXIgb2Ygc3ViLWVsZW1lbnRzIGluIHRoaXMgZWxlbWVudAorICAgICovCisgICAgcHVibGljIGludCBnZXRTdWJFbGVtZW50Q291bnQoKSB7CisgICAgICAgIGlmIChtVmlzaWJsZUVsZW1lbnRNYXAgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1WaXNpYmxlRWxlbWVudE1hcC5sZW5ndGg7CisgICAgfQorCisgICAgLyoqCisgICAgKiBGb3IgY29tcGxleCBlbGVtZW50cywgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUKKyAgICAqIHN1Yi1lbGVtZW50IGF0IGluZGV4CisgICAgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIHN1Yi1lbGVtZW50IHRvIHJldHVybgorICAgICogQHJldHVybiBzdWItZWxlbWVudCBpbiB0aGlzIGVsZW1lbnQgYXQgZ2l2ZW4gaW5kZXgKKyAgICAqLworICAgIHB1YmxpYyBFbGVtZW50IGdldFN1YkVsZW1lbnQoaW50IGluZGV4KSB7CisgICAgICAgIGlmIChtVmlzaWJsZUVsZW1lbnRNYXAgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJFbGVtZW50IGNvbnRhaW5zIG5vIHN1Yi1lbGVtZW50cyIpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVZpc2libGVFbGVtZW50TWFwLmxlbmd0aCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIHN1Yi1lbGVtZW50IGluZGV4Iik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1FbGVtZW50c1ttVmlzaWJsZUVsZW1lbnRNYXBbaW5kZXhdXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIEZvciBjb21wbGV4IGVsZW1lbnRzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZQorICAgICogc3ViLWVsZW1lbnQgbmFtZSBhdCBpbmRleAorICAgICogQHBhcmFtIGluZGV4IGluZGV4IG9mIHRoZSBzdWItZWxlbWVudAorICAgICogQHJldHVybiBzdWItZWxlbWVudCBpbiB0aGlzIGVsZW1lbnQgYXQgZ2l2ZW4gaW5kZXgKKyAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3ViRWxlbWVudE5hbWUoaW50IGluZGV4KSB7CisgICAgICAgIGlmIChtVmlzaWJsZUVsZW1lbnRNYXAgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJFbGVtZW50IGNvbnRhaW5zIG5vIHN1Yi1lbGVtZW50cyIpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVZpc2libGVFbGVtZW50TWFwLmxlbmd0aCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIHN1Yi1lbGVtZW50IGluZGV4Iik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1FbGVtZW50TmFtZXNbbVZpc2libGVFbGVtZW50TWFwW2luZGV4XV07CisgICAgfQorCisgICAgLyoqCisgICAgKiBGb3IgY29tcGxleCBlbGVtZW50cywgc29tZSBzdWItZWxlbWVudHMgY291bGQgYmUgc3RhdGljYWxseQorICAgICogc2l6ZWQgYXJyYXlzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBhcnJheSBzaXplIGZvcgorICAgICogc3ViLWVsZW1lbnQgYXQgaW5kZXgKKyAgICAqIEBwYXJhbSBpbmRleCBpbmRleCBvZiB0aGUgc3ViLWVsZW1lbnQKKyAgICAqIEByZXR1cm4gYXJyYXkgc2l6ZSBvZiBzdWItZWxlbWVudCBpbiB0aGlzIGVsZW1lbnQgYXQgZ2l2ZW4gaW5kZXgKKyAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0U3ViRWxlbWVudEFycmF5U2l6ZShpbnQgaW5kZXgpIHsKKyAgICAgICAgaWYgKG1WaXNpYmxlRWxlbWVudE1hcCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkVsZW1lbnQgY29udGFpbnMgbm8gc3ViLWVsZW1lbnRzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtVmlzaWJsZUVsZW1lbnRNYXAubGVuZ3RoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgc3ViLWVsZW1lbnQgaW5kZXgiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbUFycmF5U2l6ZXNbbVZpc2libGVFbGVtZW50TWFwW2luZGV4XV07CisgICAgfQorCisgICAgLyoqCisgICAgKiBUaGlzIGZ1bmN0aW9uIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgYSBzdWItZWxlbWVudCB3aXRoaW4KKyAgICAqIHRoZSBlbGVtZW50CisgICAgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIHN1Yi1lbGVtZW50CisgICAgKiBAcmV0dXJuIG9mZnNldCBpbiBieXRlcyBvZiBzdWItZWxlbWVudCBpbiB0aGlzIGVsZW1lbnQgYXQgZ2l2ZW4gaW5kZXgKKyAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0U3ViRWxlbWVudE9mZnNldEJ5dGVzKGludCBpbmRleCkgeworICAgICAgICBpZiAobVZpc2libGVFbGVtZW50TWFwID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBjb250YWlucyBubyBzdWItZWxlbWVudHMiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1WaXNpYmxlRWxlbWVudE1hcC5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBzdWItZWxlbWVudCBpbmRleCIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtT2Zmc2V0SW5CeXRlc1ttVmlzaWJsZUVsZW1lbnRNYXBbaW5kZXhdXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIEByZXR1cm4gZWxlbWVudCBkYXRhIHR5cGUKKyAgICAqLworICAgIHB1YmxpYyBEYXRhVHlwZSBnZXREYXRhVHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIG1UeXBlOworICAgIH0KKworICAgIC8qKgorICAgICogQHJldHVybiBlbGVtZW50IGRhdGEga2luZAorICAgICovCisgICAgcHVibGljIERhdGFLaW5kIGdldERhdGFLaW5kKCkgeworICAgICAgICByZXR1cm4gbUtpbmQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0dXJuaW5nIGFuIEVsZW1lbnQgY29udGFpbmluZyBhIHNpbmdsZSBCb29sZWFuLgorICAgICAqCisgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIGVsZW1lbnQgd2lsbCBiZWxvbmcuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEVsZW1lbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgQk9PTEVBTihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfQk9PTEVBTiA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9CT09MRUFOID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuQk9PTEVBTik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0JPT0xFQU47CisgICAgfQorCisgICAgLyoqCisgICAgICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0dXJuaW5nIGFuIEVsZW1lbnQgY29udGFpbmluZyBhIHNpbmdsZSBVTlNJR05FRF84LgorICAgICAqCisgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIGVsZW1lbnQgd2lsbCBiZWxvbmcuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEVsZW1lbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVTgoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1U4ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1U4ID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuVU5TSUdORURfOCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1U4OworICAgIH0KKworICAgIC8qKgorICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHVybmluZyBhbiBFbGVtZW50IGNvbnRhaW5pbmcgYSBzaW5nbGUgU0lHTkVEXzguCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgZWxlbWVudCB3aWxsIGJlbG9uZy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gRWxlbWVudAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJOChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfSTggPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfSTggPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5TSUdORURfOCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0k4OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVMTYoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1UxNiA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9VMTYgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5VTlNJR05FRF8xNik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1UxNjsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTE2KFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9JMTYgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfSTE2ID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuU0lHTkVEXzE2KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfSTE2OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVMzIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1UzMiA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9VMzIgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5VTlNJR05FRF8zMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1UzMjsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTMyKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9JMzIgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfSTMyID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuU0lHTkVEXzMyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfSTMyOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVNjQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1U2NCA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9VNjQgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5VTlNJR05FRF82NCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1U2NDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSTY0KFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9JNjQgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfSTY0ID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuU0lHTkVEXzY0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfSTY0OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBGMzIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X0YzMiA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9GMzIgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5GTE9BVF8zMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0YzMjsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgRjY0KFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9GNjQgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfRjY0ID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuRkxPQVRfNjQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9GNjQ7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEVMRU1FTlQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X0VMRU1FTlQgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfRUxFTUVOVCA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlJTX0VMRU1FTlQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9FTEVNRU5UOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBUWVBFKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9UWVBFID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1RZUEUgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5SU19UWVBFKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfVFlQRTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgQUxMT0NBVElPTihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfQUxMT0NBVElPTiA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9BTExPQ0FUSU9OID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuUlNfQUxMT0NBVElPTik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0FMTE9DQVRJT047CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFNBTVBMRVIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1NBTVBMRVIgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfU0FNUExFUiA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlJTX1NBTVBMRVIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9TQU1QTEVSOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBTQ1JJUFQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1NDUklQVCA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9TQ1JJUFQgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5SU19TQ1JJUFQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9TQ1JJUFQ7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IE1FU0goUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X01FU0ggPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfTUVTSCA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlJTX01FU0gpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9NRVNIOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBQUk9HUkFNX0ZSQUdNRU5UKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9QUk9HUkFNX0ZSQUdNRU5UID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1BST0dSQU1fRlJBR01FTlQgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5SU19QUk9HUkFNX0ZSQUdNRU5UKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfUFJPR1JBTV9GUkFHTUVOVDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgUFJPR1JBTV9WRVJURVgoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1BST0dSQU1fVkVSVEVYID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1BST0dSQU1fVkVSVEVYID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuUlNfUFJPR1JBTV9WRVJURVgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9QUk9HUkFNX1ZFUlRFWDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgUFJPR1JBTV9SQVNURVIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1BST0dSQU1fUkFTVEVSID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1BST0dSQU1fUkFTVEVSID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuUlNfUFJPR1JBTV9SQVNURVIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9QUk9HUkFNX1JBU1RFUjsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgUFJPR1JBTV9TVE9SRShSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfUFJPR1JBTV9TVE9SRSA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9QUk9HUkFNX1NUT1JFID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuUlNfUFJPR1JBTV9TVE9SRSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1BST0dSQU1fU1RPUkU7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEZPTlQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X0ZPTlQgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfRk9OVCA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLlJTX0ZPTlQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9GT05UOworICAgIH0KKworCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEFfOChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfQV84ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X0FfOCA9IGNyZWF0ZVBpeGVsKHJzLCBEYXRhVHlwZS5VTlNJR05FRF84LCBEYXRhS2luZC5QSVhFTF9BKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfQV84OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBSR0JfNTY1KFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9SR0JfNTY1ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1JHQl81NjUgPSBjcmVhdGVQaXhlbChycywgRGF0YVR5cGUuVU5TSUdORURfNV82XzUsIERhdGFLaW5kLlBJWEVMX1JHQik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1JHQl81NjU7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFJHQl84ODgoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1JHQl84ODggPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfUkdCXzg4OCA9IGNyZWF0ZVBpeGVsKHJzLCBEYXRhVHlwZS5VTlNJR05FRF84LCBEYXRhS2luZC5QSVhFTF9SR0IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9SR0JfODg4OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBSR0JBXzU1NTEoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1JHQkFfNTU1MSA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9SR0JBXzU1NTEgPSBjcmVhdGVQaXhlbChycywgRGF0YVR5cGUuVU5TSUdORURfNV81XzVfMSwgRGF0YUtpbmQuUElYRUxfUkdCQSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1JHQkFfNTU1MTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgUkdCQV80NDQ0KFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9SR0JBXzQ0NDQgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfUkdCQV80NDQ0ID0gY3JlYXRlUGl4ZWwocnMsIERhdGFUeXBlLlVOU0lHTkVEXzRfNF80XzQsIERhdGFLaW5kLlBJWEVMX1JHQkEpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9SR0JBXzQ0NDQ7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFJHQkFfODg4OChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfUkdCQV84ODg4ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1JHQkFfODg4OCA9IGNyZWF0ZVBpeGVsKHJzLCBEYXRhVHlwZS5VTlNJR05FRF84LCBEYXRhS2luZC5QSVhFTF9SR0JBKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfUkdCQV84ODg4OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBGMzJfMihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfRkxPQVRfMiA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9GTE9BVF8yID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5GTE9BVF8zMiwgMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0ZMT0FUXzI7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEYzMl8zKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9GTE9BVF8zID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X0ZMT0FUXzMgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLkZMT0FUXzMyLCAzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfRkxPQVRfMzsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgRjMyXzQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X0ZMT0FUXzQgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfRkxPQVRfNCA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuRkxPQVRfMzIsIDQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9GTE9BVF80OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBGNjRfMihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfRE9VQkxFXzIgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfRE9VQkxFXzIgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLkZMT0FUXzY0LCAyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfRE9VQkxFXzI7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEY2NF8zKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9ET1VCTEVfMyA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9ET1VCTEVfMyA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuRkxPQVRfNjQsIDMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9ET1VCTEVfMzsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgRjY0XzQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X0RPVUJMRV80ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X0RPVUJMRV80ID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5GTE9BVF82NCwgNCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0RPVUJMRV80OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVOF8yKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9VQ0hBUl8yID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1VDSEFSXzIgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlVOU0lHTkVEXzgsIDIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VQ0hBUl8yOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVOF8zKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9VQ0hBUl8zID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1VDSEFSXzMgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlVOU0lHTkVEXzgsIDMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VQ0hBUl8zOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVOF80KFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9VQ0hBUl80ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1VDSEFSXzQgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlVOU0lHTkVEXzgsIDQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VQ0hBUl80OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJOF8yKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9DSEFSXzIgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfQ0hBUl8yID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5TSUdORURfOCwgMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0NIQVJfMjsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgSThfMyhSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfQ0hBUl8zID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X0NIQVJfMyA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuU0lHTkVEXzgsIDMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9DSEFSXzM7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IEk4XzQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X0NIQVJfNCA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9DSEFSXzQgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlNJR05FRF84LCA0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfQ0hBUl80OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVMTZfMihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfVVNIT1JUXzIgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfVVNIT1JUXzIgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlVOU0lHTkVEXzE2LCAyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfVVNIT1JUXzI7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFUxNl8zKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9VU0hPUlRfMyA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9VU0hPUlRfMyA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuVU5TSUdORURfMTYsIDMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VU0hPUlRfMzsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVTE2XzQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1VTSE9SVF80ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1VTSE9SVF80ID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5VTlNJR05FRF8xNiwgNCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1VTSE9SVF80OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJMTZfMihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfU0hPUlRfMiA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9TSE9SVF8yID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5TSUdORURfMTYsIDIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9TSE9SVF8yOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJMTZfMyhSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfU0hPUlRfMyA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9TSE9SVF8zID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5TSUdORURfMTYsIDMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9TSE9SVF8zOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJMTZfNChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfU0hPUlRfNCA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9TSE9SVF80ID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5TSUdORURfMTYsIDQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9TSE9SVF80OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVMzJfMihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfVUlOVF8yID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1VJTlRfMiA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuVU5TSUdORURfMzIsIDIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VSU5UXzI7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFUzMl8zKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9VSU5UXzMgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfVUlOVF8zID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5VTlNJR05FRF8zMiwgMyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1VJTlRfMzsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVTMyXzQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1VJTlRfNCA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9VSU5UXzQgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlVOU0lHTkVEXzMyLCA0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfVUlOVF80OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJMzJfMihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfSU5UXzIgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfSU5UXzIgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlNJR05FRF8zMiwgMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0lOVF8yOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJMzJfMyhSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfSU5UXzMgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfSU5UXzMgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlNJR05FRF8zMiwgMyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0lOVF8zOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJMzJfNChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfSU5UXzQgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfSU5UXzQgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlNJR05FRF8zMiwgNCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X0lOVF80OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBVNjRfMihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfVUxPTkdfMiA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9VTE9OR18yID0gY3JlYXRlVmVjdG9yKHJzLCBEYXRhVHlwZS5VTlNJR05FRF82NCwgMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1VMT05HXzI7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IFU2NF8zKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9VTE9OR18zID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X1VMT05HXzMgPSBjcmVhdGVWZWN0b3IocnMsIERhdGFUeXBlLlVOU0lHTkVEXzY0LCAzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfVUxPTkdfMzsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgVTY0XzQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X1VMT05HXzQgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfVUxPTkdfNCA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuVU5TSUdORURfNjQsIDQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9VTE9OR180OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJNjRfMihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfTE9OR18yID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X0xPTkdfMiA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuU0lHTkVEXzY0LCAyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfTE9OR18yOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJNjRfMyhSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfTE9OR18zID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X0xPTkdfMyA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuU0lHTkVEXzY0LCAzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfTE9OR18zOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBJNjRfNChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfTE9OR180ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X0xPTkdfNCA9IGNyZWF0ZVZlY3RvcihycywgRGF0YVR5cGUuU0lHTkVEXzY0LCA0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfTE9OR180OworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBZVVYoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmIChycy5tRWxlbWVudF9ZVVYgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfWVVWID0gY3JlYXRlUGl4ZWwocnMsIERhdGFUeXBlLlVOU0lHTkVEXzgsIERhdGFLaW5kLlBJWEVMX1lVVik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X1lVVjsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgTUFUUklYXzRYNChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubUVsZW1lbnRfTUFUUklYXzRYNCA9PSBudWxsKSB7CisgICAgICAgICAgICBycy5tRWxlbWVudF9NQVRSSVhfNFg0ID0gY3JlYXRlVXNlcihycywgRGF0YVR5cGUuTUFUUklYXzRYNCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X01BVFJJWF80WDQ7CisgICAgfQorCisgICAgLyoqIEBkZXByZWNhdGVkIHVzZSBNQVRSSVhfNFg0CisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgTUFUUklYNFg0KFJlbmRlclNjcmlwdCBycykgeworICAgICAgICByZXR1cm4gTUFUUklYXzRYNChycyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBFbGVtZW50IE1BVFJJWF8zWDMoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1FbGVtZW50X01BVFJJWF8zWDMgPT0gbnVsbCkgeworICAgICAgICAgICAgcnMubUVsZW1lbnRfTUFUUklYXzNYMyA9IGNyZWF0ZVVzZXIocnMsIERhdGFUeXBlLk1BVFJJWF8zWDMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tRWxlbWVudF9NQVRSSVhfM1gzOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBNQVRSSVhfMlgyKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tRWxlbWVudF9NQVRSSVhfMlgyID09IG51bGwpIHsKKyAgICAgICAgICAgIHJzLm1FbGVtZW50X01BVFJJWF8yWDIgPSBjcmVhdGVVc2VyKHJzLCBEYXRhVHlwZS5NQVRSSVhfMlgyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubUVsZW1lbnRfTUFUUklYXzJYMjsKKyAgICB9CisKKyAgICBFbGVtZW50KGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycywgRWxlbWVudFtdIGUsIFN0cmluZ1tdIG4sIGludFtdIGFzKSB7CisgICAgICAgIHN1cGVyKGlkLCBycyk7CisgICAgICAgIG1TaXplID0gMDsKKyAgICAgICAgbVZlY3RvclNpemUgPSAxOworICAgICAgICBtRWxlbWVudHMgPSBlOworICAgICAgICBtRWxlbWVudE5hbWVzID0gbjsKKyAgICAgICAgbUFycmF5U2l6ZXMgPSBhczsKKyAgICAgICAgbVR5cGUgPSBEYXRhVHlwZS5OT05FOworICAgICAgICBtS2luZCA9IERhdGFLaW5kLlVTRVI7CisgICAgICAgIG1PZmZzZXRJbkJ5dGVzID0gbmV3IGludFttRWxlbWVudHMubGVuZ3RoXTsKKyAgICAgICAgZm9yIChpbnQgY3QgPSAwOyBjdCA8IG1FbGVtZW50cy5sZW5ndGg7IGN0KysgKSB7CisgICAgICAgICAgICBtT2Zmc2V0SW5CeXRlc1tjdF0gPSBtU2l6ZTsKKyAgICAgICAgICAgIG1TaXplICs9IG1FbGVtZW50c1tjdF0ubVNpemUgKiBtQXJyYXlTaXplc1tjdF07CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlVmlzaWJsZVN1YkVsZW1lbnRzKCk7CisgICAgfQorCisgICAgRWxlbWVudChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMsIERhdGFUeXBlIGR0LCBEYXRhS2luZCBkaywgYm9vbGVhbiBub3JtLCBpbnQgc2l6ZSkgeworICAgICAgICBzdXBlcihpZCwgcnMpOworICAgICAgICBpZiAoKGR0ICE9IERhdGFUeXBlLlVOU0lHTkVEXzVfNl81KSAmJgorICAgICAgICAgICAgKGR0ICE9IERhdGFUeXBlLlVOU0lHTkVEXzRfNF80XzQpICYmCisgICAgICAgICAgICAoZHQgIT0gRGF0YVR5cGUuVU5TSUdORURfNV81XzVfMSkpIHsKKyAgICAgICAgICAgIGlmIChzaXplID09IDMpIHsKKyAgICAgICAgICAgICAgICBtU2l6ZSA9IGR0Lm1TaXplICogNDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVNpemUgPSBkdC5tU2l6ZSAqIHNpemU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtU2l6ZSA9IGR0Lm1TaXplOworICAgICAgICB9CisgICAgICAgIG1UeXBlID0gZHQ7CisgICAgICAgIG1LaW5kID0gZGs7CisgICAgICAgIG1Ob3JtYWxpemVkID0gbm9ybTsKKyAgICAgICAgbVZlY3RvclNpemUgPSBzaXplOworICAgIH0KKworICAgIEVsZW1lbnQobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIHN1cGVyKGlkLCBycyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCB1cGRhdGVGcm9tTmF0aXZlKCkgeworICAgICAgICBzdXBlci51cGRhdGVGcm9tTmF0aXZlKCk7CisKKyAgICAgICAgLy8gRklYTUU6IHVwZGF0ZUZyb21OYXRpdmUgaXMgYnJva2VuIGluIEpOSSBmb3IgNjQtYml0CisKKyAgICAgICAgLy8gd2Ugd2lsbCBwYWNrIG1UeXBlOyBtS2luZDsgbU5vcm1hbGl6ZWQ7IG1WZWN0b3JTaXplOyBOdW1TdWJFbGVtZW50cworICAgICAgICBpbnRbXSBkYXRhQnVmZmVyID0gbmV3IGludFs1XTsKKyAgICAgICAgbVJTLm5FbGVtZW50R2V0TmF0aXZlRGF0YShnZXRJRChtUlMpLCBkYXRhQnVmZmVyKTsKKworICAgICAgICBtTm9ybWFsaXplZCA9IGRhdGFCdWZmZXJbMl0gPT0gMSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgbVZlY3RvclNpemUgPSBkYXRhQnVmZmVyWzNdOworICAgICAgICBtU2l6ZSA9IDA7CisgICAgICAgIGZvciAoRGF0YVR5cGUgZHQ6IERhdGFUeXBlLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZihkdC5tSUQgPT0gZGF0YUJ1ZmZlclswXSl7CisgICAgICAgICAgICAgICAgbVR5cGUgPSBkdDsKKyAgICAgICAgICAgICAgICBtU2l6ZSA9IG1UeXBlLm1TaXplICogbVZlY3RvclNpemU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChEYXRhS2luZCBkazogRGF0YUtpbmQudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmKGRrLm1JRCA9PSBkYXRhQnVmZmVyWzFdKXsKKyAgICAgICAgICAgICAgICBtS2luZCA9IGRrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50IG51bVN1YkVsZW1lbnRzID0gZGF0YUJ1ZmZlcls0XTsKKyAgICAgICAgaWYobnVtU3ViRWxlbWVudHMgPiAwKSB7CisgICAgICAgICAgICBtRWxlbWVudHMgPSBuZXcgRWxlbWVudFtudW1TdWJFbGVtZW50c107CisgICAgICAgICAgICBtRWxlbWVudE5hbWVzID0gbmV3IFN0cmluZ1tudW1TdWJFbGVtZW50c107CisgICAgICAgICAgICBtQXJyYXlTaXplcyA9IG5ldyBpbnRbbnVtU3ViRWxlbWVudHNdOworICAgICAgICAgICAgbU9mZnNldEluQnl0ZXMgPSBuZXcgaW50W251bVN1YkVsZW1lbnRzXTsKKworICAgICAgICAgICAgaW50W10gc3ViRWxlbWVudElkcyA9IG5ldyBpbnRbbnVtU3ViRWxlbWVudHNdOworICAgICAgICAgICAgbVJTLm5FbGVtZW50R2V0U3ViRWxlbWVudHMoZ2V0SUQobVJTKSwgc3ViRWxlbWVudElkcywgbUVsZW1lbnROYW1lcywgbUFycmF5U2l6ZXMpOworICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bVN1YkVsZW1lbnRzOyBpICsrKSB7CisgICAgICAgICAgICAgICAgbUVsZW1lbnRzW2ldID0gbmV3IEVsZW1lbnQoc3ViRWxlbWVudElkc1tpXSwgbVJTKTsKKyAgICAgICAgICAgICAgICBtRWxlbWVudHNbaV0udXBkYXRlRnJvbU5hdGl2ZSgpOworICAgICAgICAgICAgICAgIG1PZmZzZXRJbkJ5dGVzW2ldID0gbVNpemU7CisgICAgICAgICAgICAgICAgbVNpemUgKz0gbUVsZW1lbnRzW2ldLm1TaXplICogbUFycmF5U2l6ZXNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlVmlzaWJsZVN1YkVsZW1lbnRzKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgY3VzdG9tIEVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCBEYXRhVHlwZS4gIFRoZSBEYXRhS2luZCB3aWxsIGJlCisgICAgICogc2V0IHRvIFVTRVIgYW5kIHRoZSB2ZWN0b3Igc2l6ZSB0byAxIGluZGljYXRpbmcgbm9uLXZlY3Rvci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBUaGUgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldyBFbGVtZW50LgorICAgICAqIEBwYXJhbSBkdCBUaGUgRGF0YVR5cGUgZm9yIHRoZSBuZXcgZWxlbWVudC4KKyAgICAgKiBAcmV0dXJuIEVsZW1lbnQKKyAgICAgKi8KKyAgICBzdGF0aWMgRWxlbWVudCBjcmVhdGVVc2VyKFJlbmRlclNjcmlwdCBycywgRGF0YVR5cGUgZHQpIHsKKyAgICAgICAgRGF0YUtpbmQgZGsgPSBEYXRhS2luZC5VU0VSOworICAgICAgICBib29sZWFuIG5vcm0gPSBmYWxzZTsKKyAgICAgICAgaW50IHZlY1NpemUgPSAxOworICAgICAgICBsb25nIGlkID0gcnMubkVsZW1lbnRDcmVhdGUoZHQubUlELCBkay5tSUQsIG5vcm0sIHZlY1NpemUpOworICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnQoaWQsIHJzLCBkdCwgZGssIG5vcm0sIHZlY1NpemUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGN1c3RvbSB2ZWN0b3IgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIERhdGFUeXBlIGFuZCB2ZWN0b3Igc2l6ZS4KKyAgICAgKiBEYXRhS2luZCB3aWxsIGJlIHNldCB0byBVU0VSLiBPbmx5IHByaW1pdGl2ZSB0eXBlcyAoRkxPQVRfMzIsIEZMT0FUXzY0LAorICAgICAqIFNJR05FRF84LCBTSUdORURfMTYsIFNJR05FRF8zMiwgU0lHTkVEXzY0LCBVTlNJR05FRF84LCBVTlNJR05FRF8xNiwKKyAgICAgKiBVTlNJR05FRF8zMiwgVU5TSUdORURfNjQsIEJPT0xFQU4pIGFyZSBzdXBwb3J0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgVGhlIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXcgRWxlbWVudC4KKyAgICAgKiBAcGFyYW0gZHQgVGhlIERhdGFUeXBlIGZvciB0aGUgbmV3IEVsZW1lbnQuCisgICAgICogQHBhcmFtIHNpemUgVmVjdG9yIHNpemUgZm9yIHRoZSBuZXcgRWxlbWVudC4gIFJhbmdlIDItNCBpbmNsdXNpdmUKKyAgICAgKiAgICAgICAgICAgICBzdXBwb3J0ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEVsZW1lbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgY3JlYXRlVmVjdG9yKFJlbmRlclNjcmlwdCBycywgRGF0YVR5cGUgZHQsIGludCBzaXplKSB7CisgICAgICAgIGlmIChzaXplIDwgMiB8fCBzaXplID4gNCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJWZWN0b3Igc2l6ZSBvdXQgb2YgcmFuZ2UgMi00LiIpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChkdCkgeworICAgICAgICAvLyBTdXBwb3J0IG9ubHkgcHJpbWl0aXZlIGludGVnZXIvZmxvYXQvYm9vbGVhbiB0eXBlcyBhcyB2ZWN0b3JzLgorICAgICAgICBjYXNlIEZMT0FUXzMyOgorICAgICAgICBjYXNlIEZMT0FUXzY0OgorICAgICAgICBjYXNlIFNJR05FRF84OgorICAgICAgICBjYXNlIFNJR05FRF8xNjoKKyAgICAgICAgY2FzZSBTSUdORURfMzI6CisgICAgICAgIGNhc2UgU0lHTkVEXzY0OgorICAgICAgICBjYXNlIFVOU0lHTkVEXzg6CisgICAgICAgIGNhc2UgVU5TSUdORURfMTY6CisgICAgICAgIGNhc2UgVU5TSUdORURfMzI6CisgICAgICAgIGNhc2UgVU5TSUdORURfNjQ6CisgICAgICAgIGNhc2UgQk9PTEVBTjogeworICAgICAgICAgICAgRGF0YUtpbmQgZGsgPSBEYXRhS2luZC5VU0VSOworICAgICAgICAgICAgYm9vbGVhbiBub3JtID0gZmFsc2U7CisgICAgICAgICAgICBsb25nIGlkID0gcnMubkVsZW1lbnRDcmVhdGUoZHQubUlELCBkay5tSUQsIG5vcm0sIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGlkLCBycywgZHQsIGRrLCBub3JtLCBzaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2Fubm90IGNyZWF0ZSB2ZWN0b3Igb2YgIiArCisgICAgICAgICAgICAgICAgIm5vbi1wcmltaXRpdmUgdHlwZS4iKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IHBpeGVsIEVsZW1lbnQgdHlwZS4gIEEgbWF0Y2hpbmcgRGF0YVR5cGUgYW5kIERhdGFLaW5kIG11c3QKKyAgICAgKiBiZSBwcm92aWRlZC4gIFRoZSBEYXRhVHlwZSBhbmQgRGF0YUtpbmQgbXVzdCBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZgorICAgICAqIGNvbXBvbmVudHMuICBWZWN0b3Igc2l6ZSB3aWxsIGJlIHNldCB0byAxLgorICAgICAqCisgICAgICogQHBhcmFtIHJzIFRoZSBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV3IEVsZW1lbnQuCisgICAgICogQHBhcmFtIGR0IFRoZSBEYXRhVHlwZSBmb3IgdGhlIG5ldyBlbGVtZW50LgorICAgICAqIEBwYXJhbSBkayBUaGUgRGF0YUtpbmQgdG8gc3BlY2lmeSB0aGUgbWFwcGluZyBvZiBlYWNoIGNvbXBvbmVudCBpbiB0aGUKKyAgICAgKiAgICAgICAgICAgRGF0YVR5cGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEVsZW1lbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgY3JlYXRlUGl4ZWwoUmVuZGVyU2NyaXB0IHJzLCBEYXRhVHlwZSBkdCwgRGF0YUtpbmQgZGspIHsKKyAgICAgICAgaWYgKCEoZGsgPT0gRGF0YUtpbmQuUElYRUxfTCB8fAorICAgICAgICAgICAgICBkayA9PSBEYXRhS2luZC5QSVhFTF9BIHx8CisgICAgICAgICAgICAgIGRrID09IERhdGFLaW5kLlBJWEVMX0xBIHx8CisgICAgICAgICAgICAgIGRrID09IERhdGFLaW5kLlBJWEVMX1JHQiB8fAorICAgICAgICAgICAgICBkayA9PSBEYXRhS2luZC5QSVhFTF9SR0JBIHx8CisgICAgICAgICAgICAgIGRrID09IERhdGFLaW5kLlBJWEVMX0RFUFRIIHx8CisgICAgICAgICAgICAgIGRrID09IERhdGFLaW5kLlBJWEVMX1lVVikpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgRGF0YUtpbmQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShkdCA9PSBEYXRhVHlwZS5VTlNJR05FRF84IHx8CisgICAgICAgICAgICAgIGR0ID09IERhdGFUeXBlLlVOU0lHTkVEXzE2IHx8CisgICAgICAgICAgICAgIGR0ID09IERhdGFUeXBlLlVOU0lHTkVEXzVfNl81IHx8CisgICAgICAgICAgICAgIGR0ID09IERhdGFUeXBlLlVOU0lHTkVEXzRfNF80XzQgfHwKKyAgICAgICAgICAgICAgZHQgPT0gRGF0YVR5cGUuVU5TSUdORURfNV81XzVfMSkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgRGF0YVR5cGUiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHQgPT0gRGF0YVR5cGUuVU5TSUdORURfNV82XzUgJiYgZGsgIT0gRGF0YUtpbmQuUElYRUxfUkdCKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkJhZCBraW5kIGFuZCB0eXBlIGNvbWJvIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGR0ID09IERhdGFUeXBlLlVOU0lHTkVEXzVfNV81XzEgJiYgZGsgIT0gRGF0YUtpbmQuUElYRUxfUkdCQSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCYWQga2luZCBhbmQgdHlwZSBjb21ibyIpOworICAgICAgICB9CisgICAgICAgIGlmIChkdCA9PSBEYXRhVHlwZS5VTlNJR05FRF80XzRfNF80ICYmIGRrICE9IERhdGFLaW5kLlBJWEVMX1JHQkEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQmFkIGtpbmQgYW5kIHR5cGUgY29tYm8iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHQgPT0gRGF0YVR5cGUuVU5TSUdORURfMTYgJiYKKyAgICAgICAgICAgIGRrICE9IERhdGFLaW5kLlBJWEVMX0RFUFRIKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkJhZCBraW5kIGFuZCB0eXBlIGNvbWJvIik7CisgICAgICAgIH0KKworICAgICAgICBpbnQgc2l6ZSA9IDE7CisgICAgICAgIHN3aXRjaCAoZGspIHsKKyAgICAgICAgY2FzZSBQSVhFTF9MQToKKyAgICAgICAgICAgIHNpemUgPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUElYRUxfUkdCOgorICAgICAgICAgICAgc2l6ZSA9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQSVhFTF9SR0JBOgorICAgICAgICAgICAgc2l6ZSA9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQSVhFTF9ERVBUSDoKKyAgICAgICAgICAgIHNpemUgPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIG5vcm0gPSB0cnVlOworICAgICAgICBsb25nIGlkID0gcnMubkVsZW1lbnRDcmVhdGUoZHQubUlELCBkay5tSUQsIG5vcm0sIHNpemUpOworICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnQoaWQsIHJzLCBkdCwgZGssIG5vcm0sIHNpemUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IEVsZW1lbnQgaXMgY29tcGF0aWJsZSB3aXRoIGFub3RoZXIgRWxlbWVudC4KKyAgICAgKiBQcmltaXRpdmUgRWxlbWVudHMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSBzaGFyZSB0aGUgc2FtZSB1bmRlcmx5aW5nCisgICAgICogc2l6ZSBhbmQgdHlwZSAoaS5lLiBVOCBpcyBjb21wYXRpYmxlIHdpdGggQV84KS4gVXNlci1kZWZpbmVkIEVsZW1lbnRzCisgICAgICogbXVzdCBiZSBlcXVhbCBpbiBvcmRlciB0byBiZSBjb21wYXRpYmxlLiBUaGlzIHJlcXVpcmVzIHN0cmljdCBuYW1lCisgICAgICogZXF1aXZhbGVuY2UgZm9yIGFsbCBzdWItRWxlbWVudHMgKGluIGFkZGl0aW9uIHRvIHN0cnVjdHVyYWwgZXF1aXZhbGVuY2UpLgorICAgICAqCisgICAgICogQHBhcmFtIGUgVGhlIEVsZW1lbnQgdG8gY2hlY2sgY29tcGF0aWJpbGl0eSB3aXRoLgorICAgICAqCisgICAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhlIEVsZW1lbnRzIGFyZSBjb21wYXRpYmxlLCBvdGhlcndpc2UgZmFsc2UuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNDb21wYXRpYmxlKEVsZW1lbnQgZSkgeworICAgICAgICAvLyBUcnkgc3RyaWN0IEJhc2VPYmogZXF1YWxpdHkgdG8gc3RhcnQgd2l0aC4KKyAgICAgICAgaWYgKHRoaXMuZXF1YWxzKGUpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElnbm9yZSBtS2luZCBiZWNhdXNlIGl0IGlzIGFsbG93ZWQgdG8gYmUgZGlmZmVyZW50ICh1c2VyIHZzLiBwaXhlbCkuCisgICAgICAgIC8vIFdlIGFsc28gaWdub3JlIG1Ob3JtYWxpemVkIGJlY2F1c2UgaXQgY2FuIGJlIGRpZmZlcmVudC4gVGhlIG1UeXBlCisgICAgICAgIC8vIGZpZWxkIG11c3Qgbm90IGJlIE5PTkUgc2luY2Ugd2UgcmVxdWlyZSBuYW1lIGVxdWl2YWxlbmNlIGZvcgorICAgICAgICAvLyBhbGwgdXNlci1jcmVhdGVkIEVsZW1lbnRzLgorICAgICAgICByZXR1cm4gKChtU2l6ZSA9PSBlLm1TaXplKSAmJgorICAgICAgICAgICAgICAgIChtVHlwZSAhPSBEYXRhVHlwZS5OT05FKSAmJgorICAgICAgICAgICAgICAgIChtVHlwZSA9PSBlLm1UeXBlKSAmJgorICAgICAgICAgICAgICAgIChtVmVjdG9yU2l6ZSA9PSBlLm1WZWN0b3JTaXplKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQnVpbGRlciBjbGFzcyBmb3IgcHJvZHVjaW5nIGNvbXBsZXggZWxlbWVudHMgd2l0aCBtYXRjaGluZyBmaWVsZCBhbmQgbmFtZQorICAgICAqIHBhaXJzLiAgVGhlIGJ1aWxkZXIgc3RhcnRzIGVtcHR5LiAgVGhlIG9yZGVyIGluIHdoaWNoIGVsZW1lbnRzIGFyZSBhZGRlZAorICAgICAqIGlzIHJldGFpbmVkIGZvciB0aGUgbGF5b3V0IGluIG1lbW9yeS4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlciB7CisgICAgICAgIFJlbmRlclNjcmlwdCBtUlM7CisgICAgICAgIEVsZW1lbnRbXSBtRWxlbWVudHM7CisgICAgICAgIFN0cmluZ1tdIG1FbGVtZW50TmFtZXM7CisgICAgICAgIGludFtdIG1BcnJheVNpemVzOworICAgICAgICBpbnQgbUNvdW50OworICAgICAgICBpbnQgbVNraXBQYWRkaW5nOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGUgYSBidWlsZGVyIG9iamVjdC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHJzCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgICAgIG1SUyA9IHJzOworICAgICAgICAgICAgbUNvdW50ID0gMDsKKyAgICAgICAgICAgIG1FbGVtZW50cyA9IG5ldyBFbGVtZW50WzhdOworICAgICAgICAgICAgbUVsZW1lbnROYW1lcyA9IG5ldyBTdHJpbmdbOF07CisgICAgICAgICAgICBtQXJyYXlTaXplcyA9IG5ldyBpbnRbOF07CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQWRkIGFuIGFycmF5IG9mIGVsZW1lbnRzIHRvIHRoaXMgZWxlbWVudC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGVsZW1lbnQKKyAgICAgICAgICogQHBhcmFtIG5hbWUKKyAgICAgICAgICogQHBhcmFtIGFycmF5U2l6ZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG5hbWUsIGludCBhcnJheVNpemUpIHsKKyAgICAgICAgICAgIGlmIChhcnJheVNpemUgPCAxKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBcnJheSBzaXplIGNhbm5vdCBiZSBsZXNzIHRoYW4gMS4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2tpcCBwYWRkaW5nIGZpZWxkcyBhZnRlciBhIHZlY3RvciAzIHR5cGUuCisgICAgICAgICAgICBpZiAobVNraXBQYWRkaW5nICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCIjcGFkZGluZ18iKSkgeworICAgICAgICAgICAgICAgICAgICBtU2tpcFBhZGRpbmcgPSAwOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm1WZWN0b3JTaXplID09IDMpIHsKKyAgICAgICAgICAgICAgICBtU2tpcFBhZGRpbmcgPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtU2tpcFBhZGRpbmcgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZihtQ291bnQgPT0gbUVsZW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIEVsZW1lbnRbXSBlID0gbmV3IEVsZW1lbnRbbUNvdW50ICsgOF07CisgICAgICAgICAgICAgICAgU3RyaW5nW10gcyA9IG5ldyBTdHJpbmdbbUNvdW50ICsgOF07CisgICAgICAgICAgICAgICAgaW50W10gYXMgPSBuZXcgaW50W21Db3VudCArIDhdOworICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobUVsZW1lbnRzLCAwLCBlLCAwLCBtQ291bnQpOworICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobUVsZW1lbnROYW1lcywgMCwgcywgMCwgbUNvdW50KTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1BcnJheVNpemVzLCAwLCBhcywgMCwgbUNvdW50KTsKKyAgICAgICAgICAgICAgICBtRWxlbWVudHMgPSBlOworICAgICAgICAgICAgICAgIG1FbGVtZW50TmFtZXMgPSBzOworICAgICAgICAgICAgICAgIG1BcnJheVNpemVzID0gYXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtRWxlbWVudHNbbUNvdW50XSA9IGVsZW1lbnQ7CisgICAgICAgICAgICBtRWxlbWVudE5hbWVzW21Db3VudF0gPSBuYW1lOworICAgICAgICAgICAgbUFycmF5U2l6ZXNbbUNvdW50XSA9IGFycmF5U2l6ZTsKKyAgICAgICAgICAgIG1Db3VudCsrOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQWRkIGEgc2luZ2xlIGVsZW1lbnQgdG8gdGhpcyBFbGVtZW50LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gZWxlbWVudAorICAgICAgICAgKiBAcGFyYW0gbmFtZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBhZGQoZWxlbWVudCwgbmFtZSwgMSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ3JlYXRlIHRoZSBlbGVtZW50IGZyb20gdGhpcyBidWlsZGVyLgorICAgICAgICAgKgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIEVsZW1lbnQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBFbGVtZW50IGNyZWF0ZSgpIHsKKyAgICAgICAgICAgIG1SUy52YWxpZGF0ZSgpOworICAgICAgICAgICAgRWxlbWVudFtdIGVpbiA9IG5ldyBFbGVtZW50W21Db3VudF07CisgICAgICAgICAgICBTdHJpbmdbXSBzaW4gPSBuZXcgU3RyaW5nW21Db3VudF07CisgICAgICAgICAgICBpbnRbXSBhc2luID0gbmV3IGludFttQ291bnRdOworICAgICAgICAgICAgamF2YS5sYW5nLlN5c3RlbS5hcnJheWNvcHkobUVsZW1lbnRzLCAwLCBlaW4sIDAsIG1Db3VudCk7CisgICAgICAgICAgICBqYXZhLmxhbmcuU3lzdGVtLmFycmF5Y29weShtRWxlbWVudE5hbWVzLCAwLCBzaW4sIDAsIG1Db3VudCk7CisgICAgICAgICAgICBqYXZhLmxhbmcuU3lzdGVtLmFycmF5Y29weShtQXJyYXlTaXplcywgMCwgYXNpbiwgMCwgbUNvdW50KTsKKworICAgICAgICAgICAgLy8gRklYTUU6IGJyb2tlbiBmb3IgNjQtYml0CisgICAgICAgICAgICBpbnRbXSBpZHMgPSBuZXcgaW50W2Vpbi5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgY3QgPSAwOyBjdCA8IGVpbi5sZW5ndGg7IGN0KysgKSB7CisgICAgICAgICAgICAgICAgaWRzW2N0XSA9IChpbnQpZWluW2N0XS5nZXRJRChtUlMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9uZyBpZCA9IG1SUy5uRWxlbWVudENyZWF0ZTIoaWRzLCBzaW4sIGFzaW4pOworICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGlkLCBtUlMsIGVpbiwgc2luLCBhc2luKTsKKyAgICAgICAgfQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWVsZFBhY2tlci5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWVsZFBhY2tlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyM2FiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpZWxkUGFja2VyLmphdmEKQEAgLTAsMCArMSw2MDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCitpbXBvcnQgamF2YS51dGlsLkJpdFNldDsKKworLyoqCisgKiBVdGlsaXR5IGNsYXNzIGZvciBwYWNraW5nIGFyZ3VtZW50cyBhbmQgc3RydWN0dXJlcyBmcm9tIEFuZHJvaWQgc3lzdGVtIG9iamVjdHMgdG8KKyAqIFJlbmRlclNjcmlwdCBvYmplY3RzLgorICoKKyAqIFRoaXMgY2xhc3MgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHN1cHBvcnQgdGhlCisgKiByZWZsZWN0ZWQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIFJTIHRvb2wgY2hhaW4uICBJdCBzaG91bGQgbm90CisgKiBiZSBjYWxsZWQgZGlyZWN0bHkuCisgKgorICoqLworcHVibGljIGNsYXNzIEZpZWxkUGFja2VyIHsKKyAgICBwdWJsaWMgRmllbGRQYWNrZXIoaW50IGxlbikgeworICAgICAgICBtUG9zID0gMDsKKyAgICAgICAgbUxlbiA9IGxlbjsKKyAgICAgICAgbURhdGEgPSBuZXcgYnl0ZVtsZW5dOworICAgICAgICBtQWxpZ25tZW50ID0gbmV3IEJpdFNldCgpOworICAgIH0KKworICAgIHB1YmxpYyBGaWVsZFBhY2tlcihieXRlW10gZGF0YSkgeworICAgICAgICBtUG9zID0gMDsKKyAgICAgICAgbUxlbiA9IGRhdGEubGVuZ3RoOworICAgICAgICBtRGF0YSA9IGRhdGE7CisgICAgICAgIG1BbGlnbm1lbnQgPSBuZXcgQml0U2V0KCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWxpZ24oaW50IHYpIHsKKyAgICAgICAgaWYgKCh2IDw9IDApIHx8ICgodiAmICh2IC0gMSkpICE9IDApKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFyZ3VtZW50IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbm9uLXplcm8gcG93ZXIgb2YgMjogIiArIHYpOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKChtUG9zICYgKHYgLSAxKSkgIT0gMCkgeworICAgICAgICAgICAgbUFsaWdubWVudC5mbGlwKG1Qb3MpOworICAgICAgICAgICAgbURhdGFbbVBvcysrXSA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzdWJhbGlnbihpbnQgdikgeworICAgICAgICBpZiAoKHYgJiAodiAtIDEpKSAhPSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFyZ3VtZW50IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbm9uLXplcm8gcG93ZXIgb2YgMjogIiArIHYpOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKChtUG9zICYgKHYgLSAxKSkgIT0gMCkgeworICAgICAgICAgICAgbVBvcy0tOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Qb3MgPiAwKSB7CisgICAgICAgICAgICB3aGlsZSAobUFsaWdubWVudC5nZXQobVBvcyAtIDEpID09IHRydWUpIHsKKyAgICAgICAgICAgICAgICBtUG9zLS07CisgICAgICAgICAgICAgICAgbUFsaWdubWVudC5mbGlwKG1Qb3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZXNldCgpIHsKKyAgICAgICAgbVBvcyA9IDA7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHJlc2V0KGludCBpKSB7CisgICAgICAgIGlmICgoaSA8IDApIHx8IChpID49IG1MZW4pKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm91dCBvZiByYW5nZSBhcmd1bWVudDogIiArIGkpOworICAgICAgICB9CisgICAgICAgIG1Qb3MgPSBpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNraXAoaW50IGkpIHsKKyAgICAgICAgaW50IHJlcyA9IG1Qb3MgKyBpOworICAgICAgICBpZiAoKHJlcyA8IDApIHx8IChyZXMgPiBtTGVuKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJvdXQgb2YgcmFuZ2UgYXJndW1lbnQ6ICIgKyBpKTsKKyAgICAgICAgfQorICAgICAgICBtUG9zID0gcmVzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZEk4KGJ5dGUgdikgeworICAgICAgICBtRGF0YVttUG9zKytdID0gdjsKKyAgICB9CisKKyAgICBwdWJsaWMgYnl0ZSBzdWJJOCgpIHsKKyAgICAgICAgc3ViYWxpZ24oMSk7CisgICAgICAgIHJldHVybiBtRGF0YVstLW1Qb3NdOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZEkxNihzaG9ydCB2KSB7CisgICAgICAgIGFsaWduKDIpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKHYgJiAweGZmKTsKKyAgICAgICAgbURhdGFbbVBvcysrXSA9IChieXRlKSh2ID4+IDgpOworICAgIH0KKworICAgIHB1YmxpYyBzaG9ydCBzdWJJMTYoKSB7CisgICAgICAgIHN1YmFsaWduKDIpOworICAgICAgICBzaG9ydCB2ID0gMDsKKyAgICAgICAgdiA9IChzaG9ydCkoKG1EYXRhWy0tbVBvc10gJiAweGZmKSA8PCA4KTsKKyAgICAgICAgdiA9IChzaG9ydCkodiB8IChzaG9ydCkobURhdGFbLS1tUG9zXSAmIDB4ZmYpKTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCisKKyAgICBwdWJsaWMgdm9pZCBhZGRJMzIoaW50IHYpIHsKKyAgICAgICAgYWxpZ24oNCk7CisgICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkodiAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDgpICYgMHhmZik7CisgICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gMTYpICYgMHhmZik7CisgICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gMjQpICYgMHhmZik7CisgICAgfQorCisgICAgcHVibGljIGludCBzdWJJMzIoKSB7CisgICAgICAgIHN1YmFsaWduKDQpOworICAgICAgICBpbnQgdiA9IDA7CisgICAgICAgIHYgPSAoKG1EYXRhWy0tbVBvc10gJiAweGZmKSA8PCAyNCk7CisgICAgICAgIHYgPSB2IHwgKChtRGF0YVstLW1Qb3NdICYgMHhmZikgPDwgMTYpOworICAgICAgICB2ID0gdiB8ICgobURhdGFbLS1tUG9zXSAmIDB4ZmYpIDw8IDgpOworICAgICAgICB2ID0gdiB8ICgobURhdGFbLS1tUG9zXSAmIDB4ZmYpKTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCisKKyAgICBwdWJsaWMgdm9pZCBhZGRJNjQobG9uZyB2KSB7CisgICAgICAgIGFsaWduKDgpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKHYgJiAweGZmKTsKKyAgICAgICAgbURhdGFbbVBvcysrXSA9IChieXRlKSgodiA+PiA4KSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDE2KSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDI0KSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDMyKSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDQwKSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDQ4KSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDU2KSAmIDB4ZmYpOworICAgIH0KKworICAgIHB1YmxpYyBsb25nIHN1Ykk2NCgpIHsKKyAgICAgICAgc3ViYWxpZ24oOCk7CisgICAgICAgIGxvbmcgdiA9IDA7CisgICAgICAgIGJ5dGUgeCA9IDA7CisgICAgICAgIHggPSAoKG1EYXRhWy0tbVBvc10pKTsKKyAgICAgICAgdiA9IChsb25nKSh2IHwgKCgobG9uZyl4KSAmIDB4ZmYpIDw8IDU2bCk7CisgICAgICAgIHggPSAoKG1EYXRhWy0tbVBvc10pKTsKKyAgICAgICAgdiA9IChsb25nKSh2IHwgKCgobG9uZyl4KSAmIDB4ZmYpIDw8IDQ4bCk7CisgICAgICAgIHggPSAoKG1EYXRhWy0tbVBvc10pKTsKKyAgICAgICAgdiA9IChsb25nKSh2IHwgKCgobG9uZyl4KSAmIDB4ZmYpIDw8IDQwbCk7CisgICAgICAgIHggPSAoKG1EYXRhWy0tbVBvc10pKTsKKyAgICAgICAgdiA9IChsb25nKSh2IHwgKCgobG9uZyl4KSAmIDB4ZmYpIDw8IDMybCk7CisgICAgICAgIHggPSAoKG1EYXRhWy0tbVBvc10pKTsKKyAgICAgICAgdiA9IChsb25nKSh2IHwgKCgobG9uZyl4KSAmIDB4ZmYpIDw8IDI0bCk7CisgICAgICAgIHggPSAoKG1EYXRhWy0tbVBvc10pKTsKKyAgICAgICAgdiA9IChsb25nKSh2IHwgKCgobG9uZyl4KSAmIDB4ZmYpIDw8IDE2bCk7CisgICAgICAgIHggPSAoKG1EYXRhWy0tbVBvc10pKTsKKyAgICAgICAgdiA9IChsb25nKSh2IHwgKCgobG9uZyl4KSAmIDB4ZmYpIDw8IDhsKTsKKyAgICAgICAgeCA9ICgobURhdGFbLS1tUG9zXSkpOworICAgICAgICB2ID0gKGxvbmcpKHYgfCAoKChsb25nKXgpICYgMHhmZikpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRVOChzaG9ydCB2KSB7CisgICAgICAgIGlmICgodiA8IDApIHx8ICh2ID4gMHhmZikpIHsKKyAgICAgICAgICAgIGFuZHJvaWQudXRpbC5Mb2cuZSgicnMiLCAiRmllbGRQYWNrZXIuYWRkVTgoICIgKyB2ICsgIiApIik7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTYXZpbmcgdmFsdWUgb3V0IG9mIHJhbmdlIGZvciB0eXBlIik7CisgICAgICAgIH0KKyAgICAgICAgbURhdGFbbVBvcysrXSA9IChieXRlKXY7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkVTE2KGludCB2KSB7CisgICAgICAgIGlmICgodiA8IDApIHx8ICh2ID4gMHhmZmZmKSkgeworICAgICAgICAgICAgYW5kcm9pZC51dGlsLkxvZy5lKCJycyIsICJGaWVsZFBhY2tlci5hZGRVMTYoICIgKyB2ICsgIiApIik7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTYXZpbmcgdmFsdWUgb3V0IG9mIHJhbmdlIGZvciB0eXBlIik7CisgICAgICAgIH0KKyAgICAgICAgYWxpZ24oMik7CisgICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkodiAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKHYgPj4gOCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkVTMyKGxvbmcgdikgeworICAgICAgICBpZiAoKHYgPCAwKSB8fCAodiA+IDB4ZmZmZmZmZmZMKSkgeworICAgICAgICAgICAgYW5kcm9pZC51dGlsLkxvZy5lKCJycyIsICJGaWVsZFBhY2tlci5hZGRVMzIoICIgKyB2ICsgIiApIik7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTYXZpbmcgdmFsdWUgb3V0IG9mIHJhbmdlIGZvciB0eXBlIik7CisgICAgICAgIH0KKyAgICAgICAgYWxpZ24oNCk7CisgICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkodiAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDgpICYgMHhmZik7CisgICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gMTYpICYgMHhmZik7CisgICAgICAgIG1EYXRhW21Qb3MrK10gPSAoYnl0ZSkoKHYgPj4gMjQpICYgMHhmZik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkVTY0KGxvbmcgdikgeworICAgICAgICBpZiAodiA8IDApIHsKKyAgICAgICAgICAgIGFuZHJvaWQudXRpbC5Mb2cuZSgicnMiLCAiRmllbGRQYWNrZXIuYWRkVTY0KCAiICsgdiArICIgKSIpOworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU2F2aW5nIHZhbHVlIG91dCBvZiByYW5nZSBmb3IgdHlwZSIpOworICAgICAgICB9CisgICAgICAgIGFsaWduKDgpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKHYgJiAweGZmKTsKKyAgICAgICAgbURhdGFbbVBvcysrXSA9IChieXRlKSgodiA+PiA4KSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDE2KSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDI0KSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDMyKSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDQwKSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDQ4KSAmIDB4ZmYpOworICAgICAgICBtRGF0YVttUG9zKytdID0gKGJ5dGUpKCh2ID4+IDU2KSAmIDB4ZmYpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZEYzMihmbG9hdCB2KSB7CisgICAgICAgIGFkZEkzMihGbG9hdC5mbG9hdFRvUmF3SW50Qml0cyh2KSk7CisgICAgfQorCisgICAgcHVibGljIGZsb2F0IHN1YkYzMigpIHsKKyAgICAgICAgcmV0dXJuIEZsb2F0LmludEJpdHNUb0Zsb2F0KHN1YkkzMigpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRGNjQoZG91YmxlIHYpIHsKKyAgICAgICAgYWRkSTY0KERvdWJsZS5kb3VibGVUb1Jhd0xvbmdCaXRzKHYpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgZG91YmxlIHN1YkY2NCgpIHsKKyAgICAgICAgcmV0dXJuIERvdWJsZS5sb25nQml0c1RvRG91YmxlKHN1Ykk2NCgpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRPYmooQmFzZU9iaiBvYmopIHsKKyAgICAgICAgaWYgKG9iaiAhPSBudWxsKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyBmaW5lIGZvciAzMi1iaXQgYnV0IG5lZWRzIGEgcGF0aCBmb3IgNjQtYml0CisgICAgICAgICAgICBhZGRJMzIoKGludClvYmouZ2V0SUQobnVsbCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWRkSTMyKDApOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkRjMyKEZsb2F0MiB2KSB7CisgICAgICAgIGFkZEYzMih2LngpOworICAgICAgICBhZGRGMzIodi55KTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgYWRkRjMyKEZsb2F0MyB2KSB7CisgICAgICAgIGFkZEYzMih2LngpOworICAgICAgICBhZGRGMzIodi55KTsKKyAgICAgICAgYWRkRjMyKHYueik7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIGFkZEYzMihGbG9hdDQgdikgeworICAgICAgICBhZGRGMzIodi54KTsKKyAgICAgICAgYWRkRjMyKHYueSk7CisgICAgICAgIGFkZEYzMih2LnopOworICAgICAgICBhZGRGMzIodi53KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRGNjQoRG91YmxlMiB2KSB7CisgICAgICAgIGFkZEY2NCh2LngpOworICAgICAgICBhZGRGNjQodi55KTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgYWRkRjY0KERvdWJsZTMgdikgeworICAgICAgICBhZGRGNjQodi54KTsKKyAgICAgICAgYWRkRjY0KHYueSk7CisgICAgICAgIGFkZEY2NCh2LnopOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBhZGRGNjQoRG91YmxlNCB2KSB7CisgICAgICAgIGFkZEY2NCh2LngpOworICAgICAgICBhZGRGNjQodi55KTsKKyAgICAgICAgYWRkRjY0KHYueik7CisgICAgICAgIGFkZEY2NCh2LncpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZEk4KEJ5dGUyIHYpIHsKKyAgICAgICAgYWRkSTgodi54KTsKKyAgICAgICAgYWRkSTgodi55KTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgYWRkSTgoQnl0ZTMgdikgeworICAgICAgICBhZGRJOCh2LngpOworICAgICAgICBhZGRJOCh2LnkpOworICAgICAgICBhZGRJOCh2LnopOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBhZGRJOChCeXRlNCB2KSB7CisgICAgICAgIGFkZEk4KHYueCk7CisgICAgICAgIGFkZEk4KHYueSk7CisgICAgICAgIGFkZEk4KHYueik7CisgICAgICAgIGFkZEk4KHYudyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkVTgoU2hvcnQyIHYpIHsKKyAgICAgICAgYWRkVTgodi54KTsKKyAgICAgICAgYWRkVTgodi55KTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgYWRkVTgoU2hvcnQzIHYpIHsKKyAgICAgICAgYWRkVTgodi54KTsKKyAgICAgICAgYWRkVTgodi55KTsKKyAgICAgICAgYWRkVTgodi56KTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgYWRkVTgoU2hvcnQ0IHYpIHsKKyAgICAgICAgYWRkVTgodi54KTsKKyAgICAgICAgYWRkVTgodi55KTsKKyAgICAgICAgYWRkVTgodi56KTsKKyAgICAgICAgYWRkVTgodi53KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRJMTYoU2hvcnQyIHYpIHsKKyAgICAgICAgYWRkSTE2KHYueCk7CisgICAgICAgIGFkZEkxNih2LnkpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBhZGRJMTYoU2hvcnQzIHYpIHsKKyAgICAgICAgYWRkSTE2KHYueCk7CisgICAgICAgIGFkZEkxNih2LnkpOworICAgICAgICBhZGRJMTYodi56KTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgYWRkSTE2KFNob3J0NCB2KSB7CisgICAgICAgIGFkZEkxNih2LngpOworICAgICAgICBhZGRJMTYodi55KTsKKyAgICAgICAgYWRkSTE2KHYueik7CisgICAgICAgIGFkZEkxNih2LncpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZFUxNihJbnQyIHYpIHsKKyAgICAgICAgYWRkVTE2KHYueCk7CisgICAgICAgIGFkZFUxNih2LnkpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBhZGRVMTYoSW50MyB2KSB7CisgICAgICAgIGFkZFUxNih2LngpOworICAgICAgICBhZGRVMTYodi55KTsKKyAgICAgICAgYWRkVTE2KHYueik7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIGFkZFUxNihJbnQ0IHYpIHsKKyAgICAgICAgYWRkVTE2KHYueCk7CisgICAgICAgIGFkZFUxNih2LnkpOworICAgICAgICBhZGRVMTYodi56KTsKKyAgICAgICAgYWRkVTE2KHYudyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkSTMyKEludDIgdikgeworICAgICAgICBhZGRJMzIodi54KTsKKyAgICAgICAgYWRkSTMyKHYueSk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIGFkZEkzMihJbnQzIHYpIHsKKyAgICAgICAgYWRkSTMyKHYueCk7CisgICAgICAgIGFkZEkzMih2LnkpOworICAgICAgICBhZGRJMzIodi56KTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgYWRkSTMyKEludDQgdikgeworICAgICAgICBhZGRJMzIodi54KTsKKyAgICAgICAgYWRkSTMyKHYueSk7CisgICAgICAgIGFkZEkzMih2LnopOworICAgICAgICBhZGRJMzIodi53KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRVMzIoTG9uZzIgdikgeworICAgICAgICBhZGRVMzIodi54KTsKKyAgICAgICAgYWRkVTMyKHYueSk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIGFkZFUzMihMb25nMyB2KSB7CisgICAgICAgIGFkZFUzMih2LngpOworICAgICAgICBhZGRVMzIodi55KTsKKyAgICAgICAgYWRkVTMyKHYueik7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIGFkZFUzMihMb25nNCB2KSB7CisgICAgICAgIGFkZFUzMih2LngpOworICAgICAgICBhZGRVMzIodi55KTsKKyAgICAgICAgYWRkVTMyKHYueik7CisgICAgICAgIGFkZFUzMih2LncpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZEk2NChMb25nMiB2KSB7CisgICAgICAgIGFkZEk2NCh2LngpOworICAgICAgICBhZGRJNjQodi55KTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgYWRkSTY0KExvbmczIHYpIHsKKyAgICAgICAgYWRkSTY0KHYueCk7CisgICAgICAgIGFkZEk2NCh2LnkpOworICAgICAgICBhZGRJNjQodi56KTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgYWRkSTY0KExvbmc0IHYpIHsKKyAgICAgICAgYWRkSTY0KHYueCk7CisgICAgICAgIGFkZEk2NCh2LnkpOworICAgICAgICBhZGRJNjQodi56KTsKKyAgICAgICAgYWRkSTY0KHYudyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkVTY0KExvbmcyIHYpIHsKKyAgICAgICAgYWRkVTY0KHYueCk7CisgICAgICAgIGFkZFU2NCh2LnkpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBhZGRVNjQoTG9uZzMgdikgeworICAgICAgICBhZGRVNjQodi54KTsKKyAgICAgICAgYWRkVTY0KHYueSk7CisgICAgICAgIGFkZFU2NCh2LnopOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBhZGRVNjQoTG9uZzQgdikgeworICAgICAgICBhZGRVNjQodi54KTsKKyAgICAgICAgYWRkVTY0KHYueSk7CisgICAgICAgIGFkZFU2NCh2LnopOworICAgICAgICBhZGRVNjQodi53KTsKKyAgICB9CisKKworICAgIHB1YmxpYyBGbG9hdDIgc3ViRmxvYXQyKCkgeworICAgICAgICBGbG9hdDIgdiA9IG5ldyBGbG9hdDIoKTsKKyAgICAgICAgdi55ID0gc3ViRjMyKCk7CisgICAgICAgIHYueCA9IHN1YkYzMigpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisgICAgcHVibGljIEZsb2F0MyBzdWJGbG9hdDMoKSB7CisgICAgICAgIEZsb2F0MyB2ID0gbmV3IEZsb2F0MygpOworICAgICAgICB2LnogPSBzdWJGMzIoKTsKKyAgICAgICAgdi55ID0gc3ViRjMyKCk7CisgICAgICAgIHYueCA9IHN1YkYzMigpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisgICAgcHVibGljIEZsb2F0NCBzdWJGbG9hdDQoKSB7CisgICAgICAgIEZsb2F0NCB2ID0gbmV3IEZsb2F0NCgpOworICAgICAgICB2LncgPSBzdWJGMzIoKTsKKyAgICAgICAgdi56ID0gc3ViRjMyKCk7CisgICAgICAgIHYueSA9IHN1YkYzMigpOworICAgICAgICB2LnggPSBzdWJGMzIoKTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCisgICAgcHVibGljIERvdWJsZTIgc3ViRG91YmxlMigpIHsKKyAgICAgICAgRG91YmxlMiB2ID0gbmV3IERvdWJsZTIoKTsKKyAgICAgICAgdi55ID0gc3ViRjY0KCk7CisgICAgICAgIHYueCA9IHN1YkY2NCgpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisgICAgcHVibGljIERvdWJsZTMgc3ViRG91YmxlMygpIHsKKyAgICAgICAgRG91YmxlMyB2ID0gbmV3IERvdWJsZTMoKTsKKyAgICAgICAgdi56ID0gc3ViRjY0KCk7CisgICAgICAgIHYueSA9IHN1YkY2NCgpOworICAgICAgICB2LnggPSBzdWJGNjQoKTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorICAgIHB1YmxpYyBEb3VibGU0IHN1YkRvdWJsZTQoKSB7CisgICAgICAgIERvdWJsZTQgdiA9IG5ldyBEb3VibGU0KCk7CisgICAgICAgIHYudyA9IHN1YkY2NCgpOworICAgICAgICB2LnogPSBzdWJGNjQoKTsKKyAgICAgICAgdi55ID0gc3ViRjY0KCk7CisgICAgICAgIHYueCA9IHN1YkY2NCgpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisKKyAgICBwdWJsaWMgQnl0ZTIgc3ViQnl0ZTIoKSB7CisgICAgICAgIEJ5dGUyIHYgPSBuZXcgQnl0ZTIoKTsKKyAgICAgICAgdi55ID0gc3ViSTgoKTsKKyAgICAgICAgdi54ID0gc3ViSTgoKTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorICAgIHB1YmxpYyBCeXRlMyBzdWJCeXRlMygpIHsKKyAgICAgICAgQnl0ZTMgdiA9IG5ldyBCeXRlMygpOworICAgICAgICB2LnogPSBzdWJJOCgpOworICAgICAgICB2LnkgPSBzdWJJOCgpOworICAgICAgICB2LnggPSBzdWJJOCgpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisgICAgcHVibGljIEJ5dGU0IHN1YkJ5dGU0KCkgeworICAgICAgICBCeXRlNCB2ID0gbmV3IEJ5dGU0KCk7CisgICAgICAgIHYudyA9IHN1Ykk4KCk7CisgICAgICAgIHYueiA9IHN1Ykk4KCk7CisgICAgICAgIHYueSA9IHN1Ykk4KCk7CisgICAgICAgIHYueCA9IHN1Ykk4KCk7CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworICAgIHB1YmxpYyBTaG9ydDIgc3ViU2hvcnQyKCkgeworICAgICAgICBTaG9ydDIgdiA9IG5ldyBTaG9ydDIoKTsKKyAgICAgICAgdi55ID0gc3ViSTE2KCk7CisgICAgICAgIHYueCA9IHN1YkkxNigpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisgICAgcHVibGljIFNob3J0MyBzdWJTaG9ydDMoKSB7CisgICAgICAgIFNob3J0MyB2ID0gbmV3IFNob3J0MygpOworICAgICAgICB2LnogPSBzdWJJMTYoKTsKKyAgICAgICAgdi55ID0gc3ViSTE2KCk7CisgICAgICAgIHYueCA9IHN1YkkxNigpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisgICAgcHVibGljIFNob3J0NCBzdWJTaG9ydDQoKSB7CisgICAgICAgIFNob3J0NCB2ID0gbmV3IFNob3J0NCgpOworICAgICAgICB2LncgPSBzdWJJMTYoKTsKKyAgICAgICAgdi56ID0gc3ViSTE2KCk7CisgICAgICAgIHYueSA9IHN1YkkxNigpOworICAgICAgICB2LnggPSBzdWJJMTYoKTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCisgICAgcHVibGljIEludDIgc3ViSW50MigpIHsKKyAgICAgICAgSW50MiB2ID0gbmV3IEludDIoKTsKKyAgICAgICAgdi55ID0gc3ViSTMyKCk7CisgICAgICAgIHYueCA9IHN1YkkzMigpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisgICAgcHVibGljIEludDMgc3ViSW50MygpIHsKKyAgICAgICAgSW50MyB2ID0gbmV3IEludDMoKTsKKyAgICAgICAgdi56ID0gc3ViSTMyKCk7CisgICAgICAgIHYueSA9IHN1YkkzMigpOworICAgICAgICB2LnggPSBzdWJJMzIoKTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorICAgIHB1YmxpYyBJbnQ0IHN1YkludDQoKSB7CisgICAgICAgIEludDQgdiA9IG5ldyBJbnQ0KCk7CisgICAgICAgIHYudyA9IHN1YkkzMigpOworICAgICAgICB2LnogPSBzdWJJMzIoKTsKKyAgICAgICAgdi55ID0gc3ViSTMyKCk7CisgICAgICAgIHYueCA9IHN1YkkzMigpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZzIgc3ViTG9uZzIoKSB7CisgICAgICAgIExvbmcyIHYgPSBuZXcgTG9uZzIoKTsKKyAgICAgICAgdi55ID0gc3ViSTY0KCk7CisgICAgICAgIHYueCA9IHN1Ykk2NCgpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisgICAgcHVibGljIExvbmczIHN1YkxvbmczKCkgeworICAgICAgICBMb25nMyB2ID0gbmV3IExvbmczKCk7CisgICAgICAgIHYueiA9IHN1Ykk2NCgpOworICAgICAgICB2LnkgPSBzdWJJNjQoKTsKKyAgICAgICAgdi54ID0gc3ViSTY0KCk7CisgICAgICAgIHJldHVybiB2OworICAgIH0KKyAgICBwdWJsaWMgTG9uZzQgc3ViTG9uZzQoKSB7CisgICAgICAgIExvbmc0IHYgPSBuZXcgTG9uZzQoKTsKKyAgICAgICAgdi53ID0gc3ViSTY0KCk7CisgICAgICAgIHYueiA9IHN1Ykk2NCgpOworICAgICAgICB2LnkgPSBzdWJJNjQoKTsKKyAgICAgICAgdi54ID0gc3ViSTY0KCk7CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworCisKKyAgICBwdWJsaWMgdm9pZCBhZGRNYXRyaXgoTWF0cml4NGYgdikgeworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCB2Lm1NYXQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGFkZEYzMih2Lm1NYXRbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIE1hdHJpeDRmIHN1Yk1hdHJpeDRmKCkgeworICAgICAgICBNYXRyaXg0ZiB2ID0gbmV3IE1hdHJpeDRmKCk7CisgICAgICAgIGZvciAoaW50IGkgPSB2Lm1NYXQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIHYubU1hdFtpXSA9IHN1YkYzMigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZE1hdHJpeChNYXRyaXgzZiB2KSB7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHYubU1hdC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgYWRkRjMyKHYubU1hdFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgTWF0cml4M2Ygc3ViTWF0cml4M2YoKSB7CisgICAgICAgIE1hdHJpeDNmIHYgPSBuZXcgTWF0cml4M2YoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHYubU1hdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgdi5tTWF0W2ldID0gc3ViRjMyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkTWF0cml4KE1hdHJpeDJmIHYpIHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgdi5tTWF0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBhZGRGMzIodi5tTWF0W2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBNYXRyaXgyZiBzdWJNYXRyaXgyZigpIHsKKyAgICAgICAgTWF0cml4MmYgdiA9IG5ldyBNYXRyaXgyZigpOworICAgICAgICBmb3IgKGludCBpID0gdi5tTWF0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICB2Lm1NYXRbaV0gPSBzdWJGMzIoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRCb29sZWFuKGJvb2xlYW4gdikgeworICAgICAgICBhZGRJOCgoYnl0ZSkodiA/IDEgOiAwKSk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc3ViQm9vbGVhbigpIHsKKyAgICAgICAgYnl0ZSB2ID0gc3ViSTgoKTsKKyAgICAgICAgaWYgKHYgPT0gMSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBieXRlW10gZ2V0RGF0YSgpIHsKKyAgICAgICAgcmV0dXJuIG1EYXRhOworICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgYnl0ZSBtRGF0YVtdOworICAgIHByaXZhdGUgaW50IG1Qb3M7CisgICAgcHJpdmF0ZSBpbnQgbUxlbjsKKyAgICBwcml2YXRlIEJpdFNldCBtQWxpZ25tZW50OworCit9CisKKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWxlQTNELmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpbGVBM0QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGFjYjU2Ci0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWxlQTNELmphdmEKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOworCisvKioKKyAqIEBoaWRlCisgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAqIEZpbGVBM0QgYWxsb3dzIHVzZXJzIHRvIGxvYWQgUmVuZGVyU2NyaXB0IG9iamVjdHMgZnJvbSBmaWxlcworICogb3IgcmVzb3VyY2VzIHN0b3JlZCBvbiBkaXNrLiBJdCBjb3VsZCBiZSB1c2VkIHRvIGxvYWQgaXRlbXMKKyAqIHN1Y2ggYXMgM0QgZ2VvbWV0cnkgZGF0YSBjb252ZXJ0ZWQgdG8gYSBSZW5kZXJTY3JpcHQgZm9ybWF0IGZyb20KKyAqIGNvbnRlbnQgY3JlYXRpb24gdG9vbHMuIEN1cnJlbnRseSBvbmx5IG1lc2hlcyBhcmUgc3VwcG9ydGVkCisgKiBpbiBGaWxlQTNELgorICoKKyAqIFdoZW4gc3VjY2Vzc2Z1bGx5IGxvYWRlZCwgRmlsZUEzRCB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mCisgKiBpbmRleCBlbnRyaWVzIGZvciBhbGwgdGhlIG9iamVjdHMgc3RvcmVkIGluc2lkZSBpdC4KKyAqCisgKiovCitwdWJsaWMgY2xhc3MgRmlsZUEzRCBleHRlbmRzIEJhc2VPYmogeworCisgICAgLyoqCisgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAqIFNwZWNpZmllcyB3aGF0IHJlbmRlcnNjcmlwdCBvYmplY3QgdHlwZSBpcyBjb250YWluZWQgd2l0aGluCisgICAgKiB0aGUgRmlsZUEzRCBJbmRleEVudHJ5CisgICAgKiovCisgICAgcHVibGljIGVudW0gRW50cnlUeXBlIHsKKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBVbmtub3duIG9yIG9yIGludmFsaWQgb2JqZWN0LCBub3RoaW5nIHdpbGwgYmUgbG9hZGVkCisgICAgICAgICoqLworICAgICAgICBVTktOT1dOICgwKSwKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogUmVuZGVyU2NyaXB0IE1lc2ggb2JqZWN0CisgICAgICAgICoqLworICAgICAgICBNRVNIICgxKTsKKworICAgICAgICBpbnQgbUlEOworICAgICAgICBFbnRyeVR5cGUoaW50IGlkKSB7CisgICAgICAgICAgICBtSUQgPSBpZDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBFbnRyeVR5cGUgdG9FbnRyeVR5cGUoaW50IGludElEKSB7CisgICAgICAgICAgICByZXR1cm4gRW50cnlUeXBlLnZhbHVlcygpW2ludElEXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgKiBJbmRleEVudHJ5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9uZSBvZiB0aGUgUmVuZGVyU2NyaXB0CisgICAgKiBvYmplY3RzIGluc2lkZSB0aGUgZmlsZSdzIGluZGV4LiBJdCBjb3VsZCBiZSB1c2VkIHRvIHF1ZXJ5IHRoZQorICAgICogb2JqZWN0J3MgdHlwZSBhbmQgYWxzbyBuYW1lIGFuZCBsb2FkIHRoZSBvYmplY3QgaXRzZWxmIGlmCisgICAgKiBuZWNlc3NhcnkuCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEluZGV4RW50cnkgeworICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOworICAgICAgICBpbnQgbUluZGV4OworICAgICAgICBsb25nIG1JRDsKKyAgICAgICAgU3RyaW5nIG1OYW1lOworICAgICAgICBFbnRyeVR5cGUgbUVudHJ5VHlwZTsKKyAgICAgICAgQmFzZU9iaiBtTG9hZGVkT2JqOworCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSByZW5kZXJzY3JpcHQgb2JqZWN0IHRoZSBpbmRleCBlbnRyeQorICAgICAgICAqIGRlc2NyaWJlcworICAgICAgICAqCisgICAgICAgICogQHJldHVybiBuYW1lIG9mIGEgcmVuZGVyc2NyaXB0IG9iamVjdCB0aGUgaW5kZXggZW50cnkKKyAgICAgICAgKiBkZXNjcmliZXMKKyAgICAgICAgKgorICAgICAgICAqLworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgICAgICByZXR1cm4gbU5hbWU7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIGEgcmVuZGVyc2NyaXB0IG9iamVjdCB0aGUgaW5kZXggZW50cnkKKyAgICAgICAgKiBkZXNjcmliZXMKKyAgICAgICAgKiBAcmV0dXJuIHR5cGUgb2YgYSByZW5kZXJzY3JpcHQgb2JqZWN0IHRoZSBpbmRleCBlbnRyeQorICAgICAgICAqICAgICAgICAgZGVzY3JpYmVzCisgICAgICAgICovCisgICAgICAgIHB1YmxpYyBFbnRyeVR5cGUgZ2V0RW50cnlUeXBlKCkgeworICAgICAgICAgICAgcmV0dXJuIG1FbnRyeVR5cGU7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBVc2VkIHRvIGxvYWQgdGhlIG9iamVjdCBkZXNjcmliZWQgYnkgdGhlIGluZGV4IGVudHJ5CisgICAgICAgICogQHJldHVybiBiYXNlIHJlbmRlcnNjcmlwdCBvYmplY3QgZGVzY3JpYmVkIGJ5IHRoZSBlbnRyeQorICAgICAgICAqLworICAgICAgICBwdWJsaWMgQmFzZU9iaiBnZXRPYmplY3QoKSB7CisgICAgICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgICAgIEJhc2VPYmogb2JqID0gaW50ZXJuYWxDcmVhdGUobVJTLCB0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBvYmo7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBVc2VkIHRvIGxvYWQgdGhlIG1lc2ggZGVzY3JpYmVkIGJ5IHRoZSBpbmRleCBlbnRyeSwgb2JqZWN0CisgICAgICAgICogZGVzY3JpYmVkIGJ5IHRoZSBpbmRleCBlbnRyeSBtdXN0IGJlIGEgcmVuZGVyc2NyaXB0IG1lc2gKKyAgICAgICAgKgorICAgICAgICAqIEByZXR1cm4gcmVuZGVyc2NyaXB0IG1lc2ggb2JqZWN0IGRlc2NyaWJlZCBieSB0aGUgZW50cnkKKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIE1lc2ggZ2V0TWVzaCgpIHsKKyAgICAgICAgICAgIHJldHVybiAoTWVzaClnZXRPYmplY3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBzeW5jaHJvbml6ZWQgQmFzZU9iaiBpbnRlcm5hbENyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIEluZGV4RW50cnkgZW50cnkpIHsKKyAgICAgICAgICAgIGlmKGVudHJ5Lm1Mb2FkZWRPYmogIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS5tTG9hZGVkT2JqOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB0byBiZSBwdXJnZWQgb24gY2xlYW51cAorICAgICAgICAgICAgaWYoZW50cnkubUVudHJ5VHlwZSA9PSBFbnRyeVR5cGUuVU5LTk9XTikgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgb2JqZWN0SUQgPSBycy5uRmlsZUEzREdldEVudHJ5QnlJbmRleChlbnRyeS5tSUQsIGVudHJ5Lm1JbmRleCk7CisgICAgICAgICAgICBpZihvYmplY3RJRCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoZW50cnkubUVudHJ5VHlwZSkgeworICAgICAgICAgICAgY2FzZSBNRVNIOgorICAgICAgICAgICAgICAgIGVudHJ5Lm1Mb2FkZWRPYmogPSBuZXcgTWVzaChvYmplY3RJRCwgcnMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnRyeS5tTG9hZGVkT2JqLnVwZGF0ZUZyb21OYXRpdmUoKTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS5tTG9hZGVkT2JqOworICAgICAgICB9CisKKyAgICAgICAgSW5kZXhFbnRyeShSZW5kZXJTY3JpcHQgcnMsIGludCBpbmRleCwgbG9uZyBpZCwgU3RyaW5nIG5hbWUsIEVudHJ5VHlwZSB0eXBlKSB7CisgICAgICAgICAgICBtUlMgPSByczsKKyAgICAgICAgICAgIG1JbmRleCA9IGluZGV4OworICAgICAgICAgICAgbUlEID0gaWQ7CisgICAgICAgICAgICBtTmFtZSA9IG5hbWU7CisgICAgICAgICAgICBtRW50cnlUeXBlID0gdHlwZTsKKyAgICAgICAgICAgIG1Mb2FkZWRPYmogPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgSW5kZXhFbnRyeVtdIG1GaWxlRW50cmllczsKKyAgICBJbnB1dFN0cmVhbSBtSW5wdXRTdHJlYW07CisKKyAgICBGaWxlQTNEKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycywgSW5wdXRTdHJlYW0gc3RyZWFtKSB7CisgICAgICAgIHN1cGVyKGlkLCBycyk7CisgICAgICAgIG1JbnB1dFN0cmVhbSA9IHN0cmVhbTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaW5pdEVudHJpZXMoKSB7CisgICAgICAgIGludCBudW1GaWxlRW50cmllcyA9IG1SUy5uRmlsZUEzREdldE51bUluZGV4RW50cmllcyhnZXRJRChtUlMpKTsKKyAgICAgICAgaWYobnVtRmlsZUVudHJpZXMgPD0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbUZpbGVFbnRyaWVzID0gbmV3IEluZGV4RW50cnlbbnVtRmlsZUVudHJpZXNdOworICAgICAgICBpbnRbXSBpZHMgPSBuZXcgaW50W251bUZpbGVFbnRyaWVzXTsKKyAgICAgICAgU3RyaW5nW10gbmFtZXMgPSBuZXcgU3RyaW5nW251bUZpbGVFbnRyaWVzXTsKKworICAgICAgICBtUlMubkZpbGVBM0RHZXRJbmRleEVudHJpZXMoZ2V0SUQobVJTKSwgbnVtRmlsZUVudHJpZXMsIGlkcywgbmFtZXMpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1GaWxlRW50cmllczsgaSArKykgeworICAgICAgICAgICAgbUZpbGVFbnRyaWVzW2ldID0gbmV3IEluZGV4RW50cnkobVJTLCBpLCBnZXRJRChtUlMpLCBuYW1lc1tpXSwgRW50cnlUeXBlLnRvRW50cnlUeXBlKGlkc1tpXSkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBvYmplY3RzIHN0b3JlZCBpbnNpZGUgdGhlIGEzZCBmaWxlCisgICAgKgorICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgc3RvcmVkIGluc2lkZSB0aGUgYTNkIGZpbGUKKyAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXhFbnRyeUNvdW50KCkgeworICAgICAgICBpZihtRmlsZUVudHJpZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1GaWxlRW50cmllcy5sZW5ndGg7CisgICAgfQorCisgICAgLyoqCisgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAqIFJldHVybnMgYW4gaW5kZXggZW50cnkgZnJvbSB0aGUgbGlzdCBvZiBhbGwgb2JqZWN0cyBpbnNpZGUKKyAgICAqIEZpbGVBM0QKKyAgICAqCisgICAgKiBAcGFyYW0gaW5kZXggbnVtYmVyIG9mIHRoZSBlbnRyeSBmcm9tIHRoZSBsaXN0IHRvIHJldHVybgorICAgICoKKyAgICAqIEByZXR1cm4gZW50cnkgaW4gdGhlIGEzZCBmaWxlIGRlc2NyaWJlZCBieSB0aGUgaW5kZXgKKyAgICAqLworICAgIHB1YmxpYyBJbmRleEVudHJ5IGdldEluZGV4RW50cnkoaW50IGluZGV4KSB7CisgICAgICAgIGlmKGdldEluZGV4RW50cnlDb3VudCgpID09IDAgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IG1GaWxlRW50cmllcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtRmlsZUVudHJpZXNbaW5kZXhdOworICAgIH0KKworICAgIC8qKgorICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgKiBDcmVhdGVzIGEgRmlsZUEzRCBvYmplY3QgZnJvbSBhbiBhc3NldCBzdG9yZWQgb24gZGlzaworICAgICoKKyAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBvYmplY3Qgd2lsbCBiZWxvbmcuCisgICAgKiBAcGFyYW0gbWdyIGFzc2V0IG1hbmFnZXIgdXNlZCB0byBsb2FkIGFzc2V0CisgICAgKiBAcGFyYW0gcGF0aCBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0byBsb2FkCisgICAgKgorICAgICogQHJldHVybiBhM2QgZmlsZSBjb250YWluaW5nIHJlbmRlcnNjcmlwdCBvYmplY3RzCisgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIEZpbGVBM0QgY3JlYXRlRnJvbUFzc2V0KFJlbmRlclNjcmlwdCBycywgQXNzZXRNYW5hZ2VyIG1nciwgU3RyaW5nIHBhdGgpIHsKKyAgICAgICAgcnMudmFsaWRhdGUoKTsKKyAgICAgICAgbG9uZyBmaWxlSWQgPSBycy5uRmlsZUEzRENyZWF0ZUZyb21Bc3NldChtZ3IsIHBhdGgpOworCisgICAgICAgIGlmKGZpbGVJZCA9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gY3JlYXRlIGEzZCBmaWxlIGZyb20gYXNzZXQgIiArIHBhdGgpOworICAgICAgICB9CisgICAgICAgIEZpbGVBM0QgZmEzZCA9IG5ldyBGaWxlQTNEKGZpbGVJZCwgcnMsIG51bGwpOworICAgICAgICBmYTNkLmluaXRFbnRyaWVzKCk7CisgICAgICAgIHJldHVybiBmYTNkOworICAgIH0KKworICAgIC8qKgorICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgKiBDcmVhdGVzIGEgRmlsZUEzRCBvYmplY3QgZnJvbSBhIGZpbGUgc3RvcmVkIG9uIGRpc2sKKyAgICAqCisgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgb2JqZWN0IHdpbGwgYmVsb25nLgorICAgICogQHBhcmFtIHBhdGggbG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gbG9hZAorICAgICoKKyAgICAqIEByZXR1cm4gYTNkIGZpbGUgY29udGFpbmluZyByZW5kZXJzY3JpcHQgb2JqZWN0cworICAgICovCisgICAgc3RhdGljIHB1YmxpYyBGaWxlQTNEIGNyZWF0ZUZyb21GaWxlKFJlbmRlclNjcmlwdCBycywgU3RyaW5nIHBhdGgpIHsKKyAgICAgICAgbG9uZyBmaWxlSWQgPSBycy5uRmlsZUEzRENyZWF0ZUZyb21GaWxlKHBhdGgpOworCisgICAgICAgIGlmKGZpbGVJZCA9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gY3JlYXRlIGEzZCBmaWxlIGZyb20gIiArIHBhdGgpOworICAgICAgICB9CisgICAgICAgIEZpbGVBM0QgZmEzZCA9IG5ldyBGaWxlQTNEKGZpbGVJZCwgcnMsIG51bGwpOworICAgICAgICBmYTNkLmluaXRFbnRyaWVzKCk7CisgICAgICAgIHJldHVybiBmYTNkOworICAgIH0KKworICAgIC8qKgorICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgKiBDcmVhdGVzIGEgRmlsZUEzRCBvYmplY3QgZnJvbSBhIGZpbGUgc3RvcmVkIG9uIGRpc2sKKyAgICAqCisgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgb2JqZWN0IHdpbGwgYmVsb25nLgorICAgICogQHBhcmFtIHBhdGggbG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gbG9hZAorICAgICoKKyAgICAqIEByZXR1cm4gYTNkIGZpbGUgY29udGFpbmluZyByZW5kZXJzY3JpcHQgb2JqZWN0cworICAgICovCisgICAgc3RhdGljIHB1YmxpYyBGaWxlQTNEIGNyZWF0ZUZyb21GaWxlKFJlbmRlclNjcmlwdCBycywgRmlsZSBwYXRoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVGcm9tRmlsZShycywgcGF0aC5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAqIENyZWF0ZXMgYSBGaWxlQTNEIG9iamVjdCBmcm9tIGFuIGFwcGxpY2F0aW9uIHJlc291cmNlCisgICAgKgorICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIG9iamVjdCB3aWxsIGJlbG9uZy4KKyAgICAqIEBwYXJhbSByZXMgcmVzb3VyY2UgbWFuYWdlciB1c2VkIGZvciBsb2FkaW5nCisgICAgKiBAcGFyYW0gaWQgcmVzb3VyY2UgdG8gY3JlYXRlIEZpbGVBM0QgZnJvbQorICAgICoKKyAgICAqIEByZXR1cm4gYTNkIGZpbGUgY29udGFpbmluZyByZW5kZXJzY3JpcHQgb2JqZWN0cworICAgICovCisgICAgc3RhdGljIHB1YmxpYyBGaWxlQTNEIGNyZWF0ZUZyb21SZXNvdXJjZShSZW5kZXJTY3JpcHQgcnMsIFJlc291cmNlcyByZXMsIGludCBpZCkgeworCisgICAgICAgIHJzLnZhbGlkYXRlKCk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlzID0gcmVzLm9wZW5SYXdSZXNvdXJjZShpZCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gb3BlbiByZXNvdXJjZSAiICsgaWQpOworICAgICAgICB9CisKKyAgICAgICAgbG9uZyBmaWxlSWQgPSAwOworICAgICAgICBpZiAoaXMgaW5zdGFuY2VvZiBBc3NldE1hbmFnZXIuQXNzZXRJbnB1dFN0cmVhbSkgeworICAgICAgICAgICAgaW50IGFzc2V0ID0gKChBc3NldE1hbmFnZXIuQXNzZXRJbnB1dFN0cmVhbSkgaXMpLmdldEFzc2V0SW50KCk7CisgICAgICAgICAgICBmaWxlSWQgPSBycy5uRmlsZUEzRENyZWF0ZUZyb21Bc3NldFN0cmVhbShhc3NldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBhc3NldCBzdHJlYW0iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGZpbGVJZCA9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gY3JlYXRlIGEzZCBmaWxlIGZyb20gcmVzb3VyY2UgIiArIGlkKTsKKyAgICAgICAgfQorICAgICAgICBGaWxlQTNEIGZhM2QgPSBuZXcgRmlsZUEzRChmaWxlSWQsIHJzLCBpcyk7CisgICAgICAgIGZhM2QuaW5pdEVudHJpZXMoKTsKKyAgICAgICAgcmV0dXJuIGZhM2Q7CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0Mi5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWY4Y2E3Ci0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDIuamF2YQpAQCAtMCwwICsxLDM4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKKy8qKgorICogVmVjdG9yIHZlcnNpb24gb2YgdGhlIGJhc2ljIGZsb2F0IHR5cGUuCisgKiBQcm92aWRlcyB0d28gZmxvYXQgZmllbGRzIHBhY2tlZC4KKyAqLworcHVibGljICBjbGFzcyBGbG9hdDIgeworICAgIHB1YmxpYyBmbG9hdCB4OworICAgIHB1YmxpYyBmbG9hdCB5OworCisgICAgcHVibGljIEZsb2F0MigpIHsKKyAgICB9CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIEZsb2F0MihGbG9hdDIgZGF0YSkgeworICAgICAgICB0aGlzLnggPSBkYXRhLng7CisgICAgICAgIHRoaXMueSA9IGRhdGEueTsKKyAgICB9CisKKyAgICBwdWJsaWMgRmxvYXQyKGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgdGhpcy55ID0geTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgYWRkCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgRmxvYXQyIGFkZChGbG9hdDIgYSwgRmxvYXQyIGIpIHsKKyAgICAgICAgRmxvYXQyIHJlcyA9IG5ldyBGbG9hdDIoKTsKKyAgICAgICAgcmVzLnggPSBhLnggKyBiLng7CisgICAgICAgIHJlcy55ID0gYS55ICsgYi55OworCisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGFkZAorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkKEZsb2F0MiB2YWx1ZSkgeworICAgICAgICB4ICs9IHZhbHVlLng7CisgICAgICAgIHkgKz0gdmFsdWUueTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgYWRkCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGQoZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgeCArPSB2YWx1ZTsKKyAgICAgICAgeSArPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgYWRkCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgRmxvYXQyIGFkZChGbG9hdDIgYSwgZmxvYXQgYikgeworICAgICAgICBGbG9hdDIgcmVzID0gbmV3IEZsb2F0MigpOworICAgICAgICByZXMueCA9IGEueCArIGI7CisgICAgICAgIHJlcy55ID0gYS55ICsgYjsKKworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3ViKEZsb2F0MiB2YWx1ZSkgeworICAgICAgICB4IC09IHZhbHVlLng7CisgICAgICAgIHkgLT0gdmFsdWUueTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBGbG9hdDIgc3ViKEZsb2F0MiBhLCBGbG9hdDIgYikgeworICAgICAgICBGbG9hdDIgcmVzID0gbmV3IEZsb2F0MigpOworICAgICAgICByZXMueCA9IGEueCAtIGIueDsKKyAgICAgICAgcmVzLnkgPSBhLnkgLSBiLnk7CisKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN1YihmbG9hdCB2YWx1ZSkgeworICAgICAgICB4IC09IHZhbHVlOworICAgICAgICB5IC09IHZhbHVlOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEZsb2F0MiBzdWIoRmxvYXQyIGEsIGZsb2F0IGIpIHsKKyAgICAgICAgRmxvYXQyIHJlcyA9IG5ldyBGbG9hdDIoKTsKKyAgICAgICAgcmVzLnggPSBhLnggLSBiOworICAgICAgICByZXMueSA9IGEueSAtIGI7CisKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG11bChGbG9hdDIgdmFsdWUpIHsKKyAgICAgICAgeCAqPSB2YWx1ZS54OworICAgICAgICB5ICo9IHZhbHVlLnk7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgRmxvYXQyIG11bChGbG9hdDIgYSwgRmxvYXQyIGIpIHsKKyAgICAgICAgRmxvYXQyIHJlcyA9IG5ldyBGbG9hdDIoKTsKKyAgICAgICAgcmVzLnggPSBhLnggKiBiLng7CisgICAgICAgIHJlcy55ID0gYS55ICogYi55OworCisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtdWwoZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgeCAqPSB2YWx1ZTsKKyAgICAgICAgeSAqPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBGbG9hdDIgbXVsKEZsb2F0MiBhLCBmbG9hdCBiKSB7CisgICAgICAgIEZsb2F0MiByZXMgPSBuZXcgRmxvYXQyKCk7CisgICAgICAgIHJlcy54ID0gYS54ICogYjsKKyAgICAgICAgcmVzLnkgPSBhLnkgKiBiOworCisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRpdmlzaW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXYoRmxvYXQyIHZhbHVlKSB7CisgICAgICAgIHggLz0gdmFsdWUueDsKKyAgICAgICAgeSAvPSB2YWx1ZS55OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkaXZpc2lvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEZsb2F0MiBkaXYoRmxvYXQyIGEsIEZsb2F0MiBiKSB7CisgICAgICAgIEZsb2F0MiByZXMgPSBuZXcgRmxvYXQyKCk7CisgICAgICAgIHJlcy54ID0gYS54IC8gYi54OworICAgICAgICByZXMueSA9IGEueSAvIGIueTsKKworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkaXZpc2lvbgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGl2KGZsb2F0IHZhbHVlKSB7CisgICAgICAgIHggLz0gdmFsdWU7CisgICAgICAgIHkgLz0gdmFsdWU7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRpdmlzaW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgRmxvYXQyIGRpdihGbG9hdDIgYSwgZmxvYXQgYikgeworICAgICAgICBGbG9hdDIgcmVzID0gbmV3IEZsb2F0MigpOworICAgICAgICByZXMueCA9IGEueCAvIGI7CisgICAgICAgIHJlcy55ID0gYS55IC8gYjsKKworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGZsb2F0IGRvdFByb2R1Y3QoRmxvYXQyIGEpIHsKKyAgICAgICAgcmV0dXJuICh4ICogYS54KSArICh5ICogYS55KTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZG90IFByb2R1Y3QKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmbG9hdCBkb3RQcm9kdWN0KEZsb2F0MiBhLCBGbG9hdDIgYikgeworICAgICAgICByZXR1cm4gKGIueCAqIGEueCkgKyAoYi55ICogYS55KTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgYWRkIE11bHRpcGxlCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBmYWN0b3IKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRNdWx0aXBsZShGbG9hdDIgYSwgZmxvYXQgZmFjdG9yKSB7CisgICAgICAgIHggKz0gYS54ICogZmFjdG9yOworICAgICAgICB5ICs9IGEueSAqIGZhY3RvcjsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBzZXQgdmVjdG9yIHZhbHVlIGJ5IGZsb2F0MgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXQoRmxvYXQyIGEpIHsKKyAgICAgICAgdGhpcy54ID0gYS54OworICAgICAgICB0aGlzLnkgPSBhLnk7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogc2V0IHZlY3RvciBuZWdhdGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBuZWdhdGUoKSB7CisgICAgICAgIHggPSAteDsKKyAgICAgICAgeSA9IC15OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIGdldCB2ZWN0b3IgbGVuZ3RoCisgICAgICoKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGludCBsZW5ndGgoKSB7CisgICAgICAgIHJldHVybiAyOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHJldHVybiB0aGUgZWxlbWVudCBzdW0gb2YgdmVjdG9yCisgICAgICoKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGZsb2F0IGVsZW1lbnRTdW0oKSB7CisgICAgICAgIHJldHVybiB4ICsgeTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBnZXQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBpbmRleAorICAgICAqCisgICAgICogQHBhcmFtIGkKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGZsb2F0IGdldChpbnQgaSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBzZXQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBpbmRleAorICAgICAqCisgICAgICogQHBhcmFtIGkKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRBdChpbnQgaSwgZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHggPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgeSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBhZGQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBpbmRleAorICAgICAqCisgICAgICogQHBhcmFtIGkKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRBdChpbnQgaSwgZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHggKz0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHkgKz0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHNldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlCisgICAgICoKKyAgICAgKiBAcGFyYW0geAorICAgICAqIEBwYXJhbSB5CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VmFsdWVzKGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgdGhpcy55ID0geTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBjb3B5IHRoZSB2ZWN0b3IgdG8gZmxvYXQgYXJyYXkKKyAgICAgKgorICAgICAqIEBwYXJhbSBkYXRhCisgICAgICogQHBhcmFtIG9mZnNldAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHlUbyhmbG9hdFtdIGRhdGEsIGludCBvZmZzZXQpIHsKKyAgICAgICAgZGF0YVtvZmZzZXRdID0geDsKKyAgICAgICAgZGF0YVtvZmZzZXQgKyAxXSA9IHk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDMuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQzLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQzLmphdmEKcmVuYW1lIHRvIHJzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQzLmphdmEKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQ0LmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0NC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0NC5qYXZhCnJlbmFtZSB0byBycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0NC5qYXZhCmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ZvbnQuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRm9udC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDg5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ZvbnQuamF2YQpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldE1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CisKKy8qKgorICogQGhpZGUKKyAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICogPHA+VGhpcyBjbGFzcyBnaXZlcyB1c2VycyBhIHNpbXBsZSB3YXkgdG8gZHJhdyBoYXJkd2FyZSBhY2NlbGVyYXRlZCB0ZXh0LgorICogSW50ZXJuYWxseSwgdGhlIGdseXBocyBhcmUgcmVuZGVyZWQgdXNpbmcgdGhlIEZyZWV0eXBlIGxpYnJhcnkgYW5kIGFuIGludGVybmFsIGNhY2hlIG9mCisgKiByZW5kZXJlZCBnbHlwaCBiaXRtYXBzIGlzIG1haW50YWluZWQuIEVhY2ggZm9udCBvYmplY3QgcmVwcmVzZW50cyBhIGNvbWJpbmF0aW9uIG9mIGEgdHlwZWZhY2UsCisgKiBhbmQgcG9pbnQgc2l6ZS4gWW91IGNhbiBjcmVhdGUgbXVsdGlwbGUgZm9udCBvYmplY3RzIHRvIHJlcHJlc2VudCBzdHlsZXMgc3VjaCBhcyBib2xkIG9yIGl0YWxpYyB0ZXh0LAorICogZmFjZXMsIGFuZCBkaWZmZXJlbnQgZm9udCBzaXplcy4gRHVyaW5nIGNyZWF0aW9uLCB0aGUgQW5kcm9pZCBzeXN0ZW0gcXVpZXJpZXMgZGV2aWNlJ3Mgc2NyZWVuIERQSSB0bworICogZW5zdXJlIHByb3BlciBzaXppbmcgYWNyb3NzIG11bHRpcGxlIGRldmljZSBjb25maWd1cmF0aW9ucy48L3A+CisgKiA8cD5Gb250cyBhcmUgcmVuZGVyZWQgdXNpbmcgc2NyZWVuLXNwYWNlIHBvc2l0aW9ucyBhbmQgbm8gc3RhdGUgc2V0dXAgYmV5b25kIGJpbmRpbmcgYQorICogZm9udCB0byB0aGUgUmVuZGVyU2NyaXB0IGlzIHJlcXVpcmVkLiBBIG5vdGUgb2YgY2F1dGlvbiBvbiBwZXJmb3JtYW5jZSwgdGhvdWdoIHRoZSBzdGF0ZSBjaGFuZ2VzCisgKiBhcmUgdHJhbnNwYXJlbnQgdG8gdGhlIHVzZXIsIHRoZXkgZG8gaGFwcGVuIGludGVybmFsbHksIGFuZCBpdCBpcyBtb3JlIGVmZmljaWVudCB0bworICogcmVuZGVyIGxhcmdlIGJhdGNoZXMgb2YgdGV4dCBpbiBzZXF1ZW5jZS4gSXQgaXMgYWxzbyBtb3JlIGVmZmljaWVudCB0byByZW5kZXIgbXVsdGlwbGUKKyAqIGNoYXJhY3RlcnMgYXQgb25jZSBpbnN0ZWFkIG9mIG9uZSBieSBvbmUgdG8gaW1wcm92ZSBkcmF3IGNhbGwgYmF0Y2hpbmcuPC9wPgorICogPHA+Rm9udCBjb2xvciBhbmQgdHJhbnNwYXJlbmN5IGFyZSBub3QgcGFydCBvZiB0aGUgZm9udCBvYmplY3QgYW5kIHlvdSBjYW4gZnJlZWx5IG1vZGlmeQorICogdGhlbSBpbiB0aGUgc2NyaXB0IHRvIHN1aXQgdGhlIHVzZXIncyByZW5kZXJpbmcgbmVlZHMuIEZvbnQgY29sb3JzIHdvcmsgYXMgYSBzdGF0ZSBtYWNoaW5lLgorICogRXZlcnkgbmV3IGNhbGwgdG8gZHJhdyB0ZXh0IHVzZXMgdGhlIGxhc3QgY29sb3Igc2V0IGluIHRoZSBzY3JpcHQuPC9wPgorICoqLworcHVibGljIGNsYXNzIEZvbnQgZXh0ZW5kcyBCYXNlT2JqIHsKKworICAgIC8vVGhlc2UgaGVscCB1cyBjcmVhdGUgYSBmb250IGJ5IGZhbWlseSBuYW1lCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gc1NhbnNOYW1lcyA9IHsKKyAgICAgICAgInNhbnMtc2VyaWYiLCAiYXJpYWwiLCAiaGVsdmV0aWNhIiwgInRhaG9tYSIsICJ2ZXJkYW5hIgorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzU2VyaWZOYW1lcyA9IHsKKyAgICAgICAgInNlcmlmIiwgInRpbWVzIiwgInRpbWVzIG5ldyByb21hbiIsICJwYWxhdGlubyIsICJnZW9yZ2lhIiwgImJhc2tlcnZpbGxlIiwKKyAgICAgICAgImdvdWR5IiwgImZhbnRhc3kiLCAiY3Vyc2l2ZSIsICJJVEMgU3RvbmUgU2VyaWYiCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHNNb25vTmFtZXMgPSB7CisgICAgICAgICJtb25vc3BhY2UiLCAiY291cmllciIsICJjb3VyaWVyIG5ldyIsICJtb25hY28iCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEZvbnRGYW1pbHkgeworICAgICAgICBTdHJpbmdbXSBtTmFtZXM7CisgICAgICAgIFN0cmluZyBtTm9ybWFsRmlsZU5hbWU7CisgICAgICAgIFN0cmluZyBtQm9sZEZpbGVOYW1lOworICAgICAgICBTdHJpbmcgbUl0YWxpY0ZpbGVOYW1lOworICAgICAgICBTdHJpbmcgbUJvbGRJdGFsaWNGaWxlTmFtZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBGb250RmFtaWx5PiBzRm9udEZhbWlseU1hcDsKKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqLworICAgIHB1YmxpYyBlbnVtIFN0eWxlIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKi8KKyAgICAgICAgTk9STUFMLAorICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAqLworICAgICAgICBCT0xELAorICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAqLworICAgICAgICBJVEFMSUMsCisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICovCisgICAgICAgIEJPTERfSVRBTElDOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYWRkRmFtaWx5VG9NYXAoRm9udEZhbWlseSBmYW1pbHkpIHsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGZhbWlseS5tTmFtZXMubGVuZ3RoOyBpICsrKSB7CisgICAgICAgICAgICBzRm9udEZhbWlseU1hcC5wdXQoZmFtaWx5Lm1OYW1lc1tpXSwgZmFtaWx5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgaW5pdEZvbnRGYW1pbHlNYXAoKSB7CisgICAgICAgIHNGb250RmFtaWx5TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBGb250RmFtaWx5PigpOworCisgICAgICAgIEZvbnRGYW1pbHkgc2Fuc0ZhbWlseSA9IG5ldyBGb250RmFtaWx5KCk7CisgICAgICAgIHNhbnNGYW1pbHkubU5hbWVzID0gc1NhbnNOYW1lczsKKyAgICAgICAgc2Fuc0ZhbWlseS5tTm9ybWFsRmlsZU5hbWUgPSAiUm9ib3RvLVJlZ3VsYXIudHRmIjsKKyAgICAgICAgc2Fuc0ZhbWlseS5tQm9sZEZpbGVOYW1lID0gIlJvYm90by1Cb2xkLnR0ZiI7CisgICAgICAgIHNhbnNGYW1pbHkubUl0YWxpY0ZpbGVOYW1lID0gIlJvYm90by1JdGFsaWMudHRmIjsKKyAgICAgICAgc2Fuc0ZhbWlseS5tQm9sZEl0YWxpY0ZpbGVOYW1lID0gIlJvYm90by1Cb2xkSXRhbGljLnR0ZiI7CisgICAgICAgIGFkZEZhbWlseVRvTWFwKHNhbnNGYW1pbHkpOworCisgICAgICAgIEZvbnRGYW1pbHkgc2VyaWZGYW1pbHkgPSBuZXcgRm9udEZhbWlseSgpOworICAgICAgICBzZXJpZkZhbWlseS5tTmFtZXMgPSBzU2VyaWZOYW1lczsKKyAgICAgICAgc2VyaWZGYW1pbHkubU5vcm1hbEZpbGVOYW1lID0gIkRyb2lkU2VyaWYtUmVndWxhci50dGYiOworICAgICAgICBzZXJpZkZhbWlseS5tQm9sZEZpbGVOYW1lID0gIkRyb2lkU2VyaWYtQm9sZC50dGYiOworICAgICAgICBzZXJpZkZhbWlseS5tSXRhbGljRmlsZU5hbWUgPSAiRHJvaWRTZXJpZi1JdGFsaWMudHRmIjsKKyAgICAgICAgc2VyaWZGYW1pbHkubUJvbGRJdGFsaWNGaWxlTmFtZSA9ICJEcm9pZFNlcmlmLUJvbGRJdGFsaWMudHRmIjsKKyAgICAgICAgYWRkRmFtaWx5VG9NYXAoc2VyaWZGYW1pbHkpOworCisgICAgICAgIEZvbnRGYW1pbHkgbW9ub0ZhbWlseSA9IG5ldyBGb250RmFtaWx5KCk7CisgICAgICAgIG1vbm9GYW1pbHkubU5hbWVzID0gc01vbm9OYW1lczsKKyAgICAgICAgbW9ub0ZhbWlseS5tTm9ybWFsRmlsZU5hbWUgPSAiRHJvaWRTYW5zTW9uby50dGYiOworICAgICAgICBtb25vRmFtaWx5Lm1Cb2xkRmlsZU5hbWUgPSAiRHJvaWRTYW5zTW9uby50dGYiOworICAgICAgICBtb25vRmFtaWx5Lm1JdGFsaWNGaWxlTmFtZSA9ICJEcm9pZFNhbnNNb25vLnR0ZiI7CisgICAgICAgIG1vbm9GYW1pbHkubUJvbGRJdGFsaWNGaWxlTmFtZSA9ICJEcm9pZFNhbnNNb25vLnR0ZiI7CisgICAgICAgIGFkZEZhbWlseVRvTWFwKG1vbm9GYW1pbHkpOworICAgIH0KKworICAgIHN0YXRpYyB7CisgICAgICAgIGluaXRGb250RmFtaWx5TWFwKCk7CisgICAgfQorCisgICAgc3RhdGljIFN0cmluZyBnZXRGb250RmlsZU5hbWUoU3RyaW5nIGZhbWlseU5hbWUsIFN0eWxlIHN0eWxlKSB7CisgICAgICAgIEZvbnRGYW1pbHkgZmFtaWx5ID0gc0ZvbnRGYW1pbHlNYXAuZ2V0KGZhbWlseU5hbWUpOworICAgICAgICBpZihmYW1pbHkgIT0gbnVsbCkgeworICAgICAgICAgICAgc3dpdGNoKHN0eWxlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBOT1JNQUw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYW1pbHkubU5vcm1hbEZpbGVOYW1lOworICAgICAgICAgICAgICAgIGNhc2UgQk9MRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbWlseS5tQm9sZEZpbGVOYW1lOworICAgICAgICAgICAgICAgIGNhc2UgSVRBTElDOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFtaWx5Lm1JdGFsaWNGaWxlTmFtZTsKKyAgICAgICAgICAgICAgICBjYXNlIEJPTERfSVRBTElDOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFtaWx5Lm1Cb2xkSXRhbGljRmlsZU5hbWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFsbGJhY2sgaWYgd2UgY291bGQgbm90IGZpbmQgdGhlIGRlc2lyZWQgZmFtaWx5CisgICAgICAgIHJldHVybiAiRHJvaWRTYW5zLnR0ZiI7CisgICAgfQorCisgICAgRm9udChpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBzdXBlcihpZCwgcnMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIFRha2VzIGEgc3BlY2lmaWMgZmlsZSBuYW1lIGFzIGFuIGFyZ3VtZW50CisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBGb250IGNyZWF0ZUZyb21GaWxlKFJlbmRlclNjcmlwdCBycywgUmVzb3VyY2VzIHJlcywgU3RyaW5nIHBhdGgsIGZsb2F0IHBvaW50U2l6ZSkgeworICAgICAgICBycy52YWxpZGF0ZSgpOworICAgICAgICBpbnQgZHBpID0gcmVzLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eURwaTsKKyAgICAgICAgaW50IGZvbnRJZCA9IHJzLm5Gb250Q3JlYXRlRnJvbUZpbGUocGF0aCwgcG9pbnRTaXplLCBkcGkpOworCisgICAgICAgIGlmKGZvbnRJZCA9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gY3JlYXRlIGZvbnQgZnJvbSBmaWxlICIgKyBwYXRoKTsKKyAgICAgICAgfQorICAgICAgICBGb250IHJzRm9udCA9IG5ldyBGb250KGZvbnRJZCwgcnMpOworCisgICAgICAgIHJldHVybiByc0ZvbnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBGb250IGNyZWF0ZUZyb21GaWxlKFJlbmRlclNjcmlwdCBycywgUmVzb3VyY2VzIHJlcywgRmlsZSBwYXRoLCBmbG9hdCBwb2ludFNpemUpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21GaWxlKHJzLCByZXMsIHBhdGguZ2V0QWJzb2x1dGVQYXRoKCksIHBvaW50U2l6ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBGb250IGNyZWF0ZUZyb21Bc3NldChSZW5kZXJTY3JpcHQgcnMsIFJlc291cmNlcyByZXMsIFN0cmluZyBwYXRoLCBmbG9hdCBwb2ludFNpemUpIHsKKyAgICAgICAgcnMudmFsaWRhdGUoKTsKKyAgICAgICAgQXNzZXRNYW5hZ2VyIG1nciA9IHJlcy5nZXRBc3NldHMoKTsKKyAgICAgICAgaW50IGRwaSA9IHJlcy5nZXREaXNwbGF5TWV0cmljcygpLmRlbnNpdHlEcGk7CisKKyAgICAgICAgaW50IGZvbnRJZCA9IHJzLm5Gb250Q3JlYXRlRnJvbUFzc2V0KG1nciwgcGF0aCwgcG9pbnRTaXplLCBkcGkpOworICAgICAgICBpZihmb250SWQgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGNyZWF0ZSBmb250IGZyb20gYXNzZXQgIiArIHBhdGgpOworICAgICAgICB9CisgICAgICAgIEZvbnQgcnNGb250ID0gbmV3IEZvbnQoZm9udElkLCBycyk7CisgICAgICAgIHJldHVybiByc0ZvbnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBGb250IGNyZWF0ZUZyb21SZXNvdXJjZShSZW5kZXJTY3JpcHQgcnMsIFJlc291cmNlcyByZXMsIGludCBpZCwgZmxvYXQgcG9pbnRTaXplKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gIlIuIiArIEludGVnZXIudG9TdHJpbmcoaWQpOworCisgICAgICAgIHJzLnZhbGlkYXRlKCk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlzID0gcmVzLm9wZW5SYXdSZXNvdXJjZShpZCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gb3BlbiByZXNvdXJjZSAiICsgaWQpOworICAgICAgICB9CisKKyAgICAgICAgaW50IGRwaSA9IHJlcy5nZXREaXNwbGF5TWV0cmljcygpLmRlbnNpdHlEcGk7CisKKyAgICAgICAgaW50IGZvbnRJZCA9IDA7CisgICAgICAgIGlmIChpcyBpbnN0YW5jZW9mIEFzc2V0TWFuYWdlci5Bc3NldElucHV0U3RyZWFtKSB7CisgICAgICAgICAgICBpbnQgYXNzZXQgPSAoKEFzc2V0TWFuYWdlci5Bc3NldElucHV0U3RyZWFtKSBpcykuZ2V0QXNzZXRJbnQoKTsKKyAgICAgICAgICAgIGZvbnRJZCA9IHJzLm5Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtKG5hbWUsIHBvaW50U2l6ZSwgZHBpLCBhc3NldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBhc3NldCBzdHJlYW0gY3JlYXRlZCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYoZm9udElkID09IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBjcmVhdGUgZm9udCBmcm9tIHJlc291cmNlICIgKyBpZCk7CisgICAgICAgIH0KKyAgICAgICAgRm9udCByc0ZvbnQgPSBuZXcgRm9udChmb250SWQsIHJzKTsKKyAgICAgICAgcmV0dXJuIHJzRm9udDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKiBBY2NlcHRzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZhbWlseSBuYW1lcyBhcyBhbiBhcmd1bWVudAorICAgICAqIGFuZCB3aWxsIGF0dGVtcHQgdG8gcHJvZHVjZSB0aGUgYmVzdCBtYXRjaCB3aXRoIGEgc3lzdGVtIGZvbnQ6CisgICAgICoKKyAgICAgKiAic2Fucy1zZXJpZiIgImFyaWFsIiAiaGVsdmV0aWNhIiAidGFob21hIiAidmVyZGFuYSIKKyAgICAgKiAic2VyaWYiICJ0aW1lcyIgInRpbWVzIG5ldyByb21hbiIgInBhbGF0aW5vIiAiZ2VvcmdpYSIgImJhc2tlcnZpbGxlIgorICAgICAqICJnb3VkeSIgImZhbnRhc3kiICJjdXJzaXZlIiAiSVRDIFN0b25lIFNlcmlmIgorICAgICAqICJtb25vc3BhY2UiICJjb3VyaWVyIiAiY291cmllciBuZXciICJtb25hY28iCisgICAgICoKKyAgICAgKiBSZXR1cm5zIGRlZmF1bHQgZm9udCBpZiBubyBtYXRjaCBjb3VsZCBiZSBmb3VuZC4KKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIEZvbnQgY3JlYXRlKFJlbmRlclNjcmlwdCBycywgUmVzb3VyY2VzIHJlcywgU3RyaW5nIGZhbWlseU5hbWUsIFN0eWxlIGZvbnRTdHlsZSwgZmxvYXQgcG9pbnRTaXplKSB7CisgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGdldEZvbnRGaWxlTmFtZShmYW1pbHlOYW1lLCBmb250U3R5bGUpOworICAgICAgICBTdHJpbmcgZm9udFBhdGggPSBFbnZpcm9ubWVudC5nZXRSb290RGlyZWN0b3J5KCkuZ2V0QWJzb2x1dGVQYXRoKCk7CisgICAgICAgIGZvbnRQYXRoICs9ICIvZm9udHMvIiArIGZpbGVOYW1lOworICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUZpbGUocnMsIHJlcywgZm9udFBhdGgsIHBvaW50U2l6ZSk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ludDIuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvSW50Mi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ludDIuamF2YQpyZW5hbWUgdG8gcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9JbnQyLmphdmEKZGlmZiAtLWdpdCBhL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvSW50My5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9JbnQzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzMWI5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ludDMuamF2YQpAQCAtMCwwICsxLDQ3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKKy8qKgorICogVmVjdG9yIHZlcnNpb24gb2YgdGhlIGJhc2ljIGludCB0eXBlLgorICogUHJvdmlkZXMgdGhyZWUgaW50IGZpZWxkcyBwYWNrZWQuCisgKi8KK3B1YmxpYyBjbGFzcyBJbnQzIHsKKyAgICBwdWJsaWMgaW50IHg7CisgICAgcHVibGljIGludCB5OworICAgIHB1YmxpYyBpbnQgejsKKworICAgIHB1YmxpYyBJbnQzKCkgeworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBJbnQzKGludCBpKSB7CisgICAgICAgIHRoaXMueCA9IHRoaXMueSA9IHRoaXMueiA9IGk7CisgICAgfQorCisgICAgcHVibGljIEludDMoaW50IHgsIGludCB5LCBpbnQgeikgeworICAgICAgICB0aGlzLnggPSB4OworICAgICAgICB0aGlzLnkgPSB5OworICAgICAgICB0aGlzLnogPSB6OworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBJbnQzKEludDMgc291cmNlKSB7CisgICAgICAgIHRoaXMueCA9IHNvdXJjZS54OworICAgICAgICB0aGlzLnkgPSBzb3VyY2UueTsKKyAgICAgICAgdGhpcy56ID0gc291cmNlLno7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGFkZAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGQoSW50MyBhKSB7CisgICAgICAgIHRoaXMueCArPSBhLng7CisgICAgICAgIHRoaXMueSArPSBhLnk7CisgICAgICAgIHRoaXMueiArPSBhLno7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGFkZAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEludDMgYWRkKEludDMgYSwgSW50MyBiKSB7CisgICAgICAgIEludDMgcmVzdWx0ID0gbmV3IEludDMoKTsKKyAgICAgICAgcmVzdWx0LnggPSBhLnggKyBiLng7CisgICAgICAgIHJlc3VsdC55ID0gYS55ICsgYi55OworICAgICAgICByZXN1bHQueiA9IGEueiArIGIuejsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZChpbnQgdmFsdWUpIHsKKyAgICAgICAgeCArPSB2YWx1ZTsKKyAgICAgICAgeSArPSB2YWx1ZTsKKyAgICAgICAgeiArPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgYWRkCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSW50MyBhZGQoSW50MyBhLCBpbnQgYikgeworICAgICAgICBJbnQzIHJlc3VsdCA9IG5ldyBJbnQzKCk7CisgICAgICAgIHJlc3VsdC54ID0gYS54ICsgYjsKKyAgICAgICAgcmVzdWx0LnkgPSBhLnkgKyBiOworICAgICAgICByZXN1bHQueiA9IGEueiArIGI7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3ViKEludDMgYSkgeworICAgICAgICB0aGlzLnggLT0gYS54OworICAgICAgICB0aGlzLnkgLT0gYS55OworICAgICAgICB0aGlzLnogLT0gYS56OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEludDMgc3ViKEludDMgYSwgSW50MyBiKSB7CisgICAgICAgIEludDMgcmVzdWx0ID0gbmV3IEludDMoKTsKKyAgICAgICAgcmVzdWx0LnggPSBhLnggLSBiLng7CisgICAgICAgIHJlc3VsdC55ID0gYS55IC0gYi55OworICAgICAgICByZXN1bHQueiA9IGEueiAtIGIuejsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3ViKGludCB2YWx1ZSkgeworICAgICAgICB4IC09IHZhbHVlOworICAgICAgICB5IC09IHZhbHVlOworICAgICAgICB6IC09IHZhbHVlOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEludDMgc3ViKEludDMgYSwgaW50IGIpIHsKKyAgICAgICAgSW50MyByZXN1bHQgPSBuZXcgSW50MygpOworICAgICAgICByZXN1bHQueCA9IGEueCAtIGI7CisgICAgICAgIHJlc3VsdC55ID0gYS55IC0gYjsKKyAgICAgICAgcmVzdWx0LnogPSBhLnogLSBiOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG11bChJbnQzIGEpIHsKKyAgICAgICAgdGhpcy54ICo9IGEueDsKKyAgICAgICAgdGhpcy55ICo9IGEueTsKKyAgICAgICAgdGhpcy56ICo9IGEuejsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBJbnQzIG11bChJbnQzIGEsIEludDMgYikgeworICAgICAgICBJbnQzIHJlc3VsdCA9IG5ldyBJbnQzKCk7CisgICAgICAgIHJlc3VsdC54ID0gYS54ICogYi54OworICAgICAgICByZXN1bHQueSA9IGEueSAqIGIueTsKKyAgICAgICAgcmVzdWx0LnogPSBhLnogKiBiLno7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG11bChpbnQgdmFsdWUpIHsKKyAgICAgICAgeCAqPSB2YWx1ZTsKKyAgICAgICAgeSAqPSB2YWx1ZTsKKyAgICAgICAgeiAqPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBJbnQzIG11bChJbnQzIGEsIGludCBiKSB7CisgICAgICAgIEludDMgcmVzdWx0ID0gbmV3IEludDMoKTsKKyAgICAgICAgcmVzdWx0LnggPSBhLnggKiBiOworICAgICAgICByZXN1bHQueSA9IGEueSAqIGI7CisgICAgICAgIHJlc3VsdC56ID0gYS56ICogYjsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkaXZpc2lvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXYoSW50MyBhKSB7CisgICAgICAgIHRoaXMueCAvPSBhLng7CisgICAgICAgIHRoaXMueSAvPSBhLnk7CisgICAgICAgIHRoaXMueiAvPSBhLno7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRpdmlzaW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSW50MyBkaXYoSW50MyBhLCBJbnQzIGIpIHsKKyAgICAgICAgSW50MyByZXN1bHQgPSBuZXcgSW50MygpOworICAgICAgICByZXN1bHQueCA9IGEueCAvIGIueDsKKyAgICAgICAgcmVzdWx0LnkgPSBhLnkgLyBiLnk7CisgICAgICAgIHJlc3VsdC56ID0gYS56IC8gYi56OworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRpdmlzaW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXYoaW50IHZhbHVlKSB7CisgICAgICAgIHggLz0gdmFsdWU7CisgICAgICAgIHkgLz0gdmFsdWU7CisgICAgICAgIHogLz0gdmFsdWU7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRpdmlzaW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSW50MyBkaXYoSW50MyBhLCBpbnQgYikgeworICAgICAgICBJbnQzIHJlc3VsdCA9IG5ldyBJbnQzKCk7CisgICAgICAgIHJlc3VsdC54ID0gYS54IC8gYjsKKyAgICAgICAgcmVzdWx0LnkgPSBhLnkgLyBiOworICAgICAgICByZXN1bHQueiA9IGEueiAvIGI7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgTW9kdWxvCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG1vZChJbnQzIGEpIHsKKyAgICAgICAgdGhpcy54ICU9IGEueDsKKyAgICAgICAgdGhpcy55ICU9IGEueTsKKyAgICAgICAgdGhpcy56ICU9IGEuejsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgTW9kdWxvCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSW50MyBtb2QoSW50MyBhLCBJbnQzIGIpIHsKKyAgICAgICAgSW50MyByZXN1bHQgPSBuZXcgSW50MygpOworICAgICAgICByZXN1bHQueCA9IGEueCAlIGIueDsKKyAgICAgICAgcmVzdWx0LnkgPSBhLnkgJSBiLnk7CisgICAgICAgIHJlc3VsdC56ID0gYS56ICUgYi56OworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIE1vZHVsbworICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgbW9kKGludCB2YWx1ZSkgeworICAgICAgICB4ICU9IHZhbHVlOworICAgICAgICB5ICU9IHZhbHVlOworICAgICAgICB6ICU9IHZhbHVlOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBNb2R1bG8KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBJbnQzIG1vZChJbnQzIGEsIGludCBiKSB7CisgICAgICAgIEludDMgcmVzdWx0ID0gbmV3IEludDMoKTsKKyAgICAgICAgcmVzdWx0LnggPSBhLnggJSBiOworICAgICAgICByZXN1bHQueSA9IGEueSAlIGI7CisgICAgICAgIHJlc3VsdC56ID0gYS56ICUgYjsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIGdldCB2ZWN0b3IgbGVuZ3RoCisgICAgICoKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGludCBsZW5ndGgoKSB7CisgICAgICAgIHJldHVybiAzOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHNldCB2ZWN0b3IgbmVnYXRlCisgICAgICovCisgICAgcHVibGljIHZvaWQgbmVnYXRlKCkgeworICAgICAgICB0aGlzLnggPSAteDsKKyAgICAgICAgdGhpcy55ID0gLXk7CisgICAgICAgIHRoaXMueiA9IC16OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGludCBkb3RQcm9kdWN0KEludDMgYSkgeworICAgICAgICByZXR1cm4gKGludCkoKHggKiBhLngpICsgKHkgKiBhLnkpICsgKHogKiBhLnopKTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZG90IFByb2R1Y3QKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnQgZG90UHJvZHVjdChJbnQzIGEsIEludDMgYikgeworICAgICAgICByZXR1cm4gKGludCkoKGIueCAqIGEueCkgKyAoYi55ICogYS55KSArIChiLnogKiBhLnopKTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgYWRkIE11bHRpcGxlCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBmYWN0b3IKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRNdWx0aXBsZShJbnQzIGEsIGludCBmYWN0b3IpIHsKKyAgICAgICAgeCArPSBhLnggKiBmYWN0b3I7CisgICAgICAgIHkgKz0gYS55ICogZmFjdG9yOworICAgICAgICB6ICs9IGEueiAqIGZhY3RvcjsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBzZXQgdmVjdG9yIHZhbHVlIGJ5IEludDMKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0KEludDMgYSkgeworICAgICAgICB0aGlzLnggPSBhLng7CisgICAgICAgIHRoaXMueSA9IGEueTsKKyAgICAgICAgdGhpcy56ID0gYS56OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHNldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IEludAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEBwYXJhbSBjCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VmFsdWVzKGludCBhLCBpbnQgYiwgaW50IGMpIHsKKyAgICAgICAgdGhpcy54ID0gYTsKKyAgICAgICAgdGhpcy55ID0gYjsKKyAgICAgICAgdGhpcy56ID0gYzsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiByZXR1cm4gdGhlIGVsZW1lbnQgc3VtIG9mIHZlY3RvcgorICAgICAqCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZWxlbWVudFN1bSgpIHsKKyAgICAgICAgcmV0dXJuIChpbnQpKHggKyB5ICsgeik7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogZ2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKKyAgICAgKgorICAgICAqIEBwYXJhbSBpCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0KGludCBpKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICByZXR1cm4gKGludCkoeCk7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAoaW50KSh5KTsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIChpbnQpKHopOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBzZXQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBpbmRleAorICAgICAqCisgICAgICogQHBhcmFtIGkKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRBdChpbnQgaSwgaW50IHZhbHVlKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICB4ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHkgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgeiA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBhZGQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBpbmRleAorICAgICAqCisgICAgICogQHBhcmFtIGkKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRBdChpbnQgaSwgaW50IHZhbHVlKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICB4ICs9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICB5ICs9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB6ICs9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBjb3B5IHRoZSB2ZWN0b3IgdG8gaW50IGFycmF5CisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF0YQorICAgICAqIEBwYXJhbSBvZmZzZXQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5VG8oaW50W10gZGF0YSwgaW50IG9mZnNldCkgeworICAgICAgICBkYXRhW29mZnNldF0gPSAoaW50KSh4KTsKKyAgICAgICAgZGF0YVtvZmZzZXQgKyAxXSA9IChpbnQpKHkpOworICAgICAgICBkYXRhW29mZnNldCArIDJdID0gKGludCkoeik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9JbnQ0LmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ludDQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9JbnQ0LmphdmEKcmVuYW1lIHRvIHJzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvSW50NC5qYXZhCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0xvbmcyLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0xvbmcyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTG9uZzIuamF2YQpyZW5hbWUgdG8gcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nMi5qYXZhCmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0xvbmczLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0xvbmczLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyNDNjYwotLS0gL2Rldi9udWxsCisrKyBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTG9uZzMuamF2YQpAQCAtMCwwICsxLDQ3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKKy8qKgorICogVmVjdG9yIHZlcnNpb24gb2YgdGhlIGJhc2ljIGxvbmcgdHlwZS4KKyAqIFByb3ZpZGVzIHRocmVlIGxvbmcgZmllbGRzIHBhY2tlZC4KKyAqLworcHVibGljIGNsYXNzIExvbmczIHsKKyAgICBwdWJsaWMgbG9uZyB4OworICAgIHB1YmxpYyBsb25nIHk7CisgICAgcHVibGljIGxvbmcgejsKKworICAgIHB1YmxpYyBMb25nMygpIHsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgTG9uZzMobG9uZyBpKSB7CisgICAgICAgIHRoaXMueCA9IHRoaXMueSA9IHRoaXMueiA9IGk7CisgICAgfQorCisgICAgcHVibGljIExvbmczKGxvbmcgeCwgbG9uZyB5LCBsb25nIHopIHsKKyAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgdGhpcy55ID0geTsKKyAgICAgICAgdGhpcy56ID0gejsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgTG9uZzMoTG9uZzMgc291cmNlKSB7CisgICAgICAgIHRoaXMueCA9IHNvdXJjZS54OworICAgICAgICB0aGlzLnkgPSBzb3VyY2UueTsKKyAgICAgICAgdGhpcy56ID0gc291cmNlLno7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGFkZAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGQoTG9uZzMgYSkgeworICAgICAgICB0aGlzLnggKz0gYS54OworICAgICAgICB0aGlzLnkgKz0gYS55OworICAgICAgICB0aGlzLnogKz0gYS56OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBMb25nMyBhZGQoTG9uZzMgYSwgTG9uZzMgYikgeworICAgICAgICBMb25nMyByZXN1bHQgPSBuZXcgTG9uZzMoKTsKKyAgICAgICAgcmVzdWx0LnggPSBhLnggKyBiLng7CisgICAgICAgIHJlc3VsdC55ID0gYS55ICsgYi55OworICAgICAgICByZXN1bHQueiA9IGEueiArIGIuejsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZChsb25nIHZhbHVlKSB7CisgICAgICAgIHggKz0gdmFsdWU7CisgICAgICAgIHkgKz0gdmFsdWU7CisgICAgICAgIHogKz0gdmFsdWU7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGFkZAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIExvbmczIGFkZChMb25nMyBhLCBsb25nIGIpIHsKKyAgICAgICAgTG9uZzMgcmVzdWx0ID0gbmV3IExvbmczKCk7CisgICAgICAgIHJlc3VsdC54ID0gYS54ICsgYjsKKyAgICAgICAgcmVzdWx0LnkgPSBhLnkgKyBiOworICAgICAgICByZXN1bHQueiA9IGEueiArIGI7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3ViKExvbmczIGEpIHsKKyAgICAgICAgdGhpcy54IC09IGEueDsKKyAgICAgICAgdGhpcy55IC09IGEueTsKKyAgICAgICAgdGhpcy56IC09IGEuejsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBMb25nMyBzdWIoTG9uZzMgYSwgTG9uZzMgYikgeworICAgICAgICBMb25nMyByZXN1bHQgPSBuZXcgTG9uZzMoKTsKKyAgICAgICAgcmVzdWx0LnggPSBhLnggLSBiLng7CisgICAgICAgIHJlc3VsdC55ID0gYS55IC0gYi55OworICAgICAgICByZXN1bHQueiA9IGEueiAtIGIuejsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3ViKGxvbmcgdmFsdWUpIHsKKyAgICAgICAgeCAtPSB2YWx1ZTsKKyAgICAgICAgeSAtPSB2YWx1ZTsKKyAgICAgICAgeiAtPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3Igc3VidHJhY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBMb25nMyBzdWIoTG9uZzMgYSwgbG9uZyBiKSB7CisgICAgICAgIExvbmczIHJlc3VsdCA9IG5ldyBMb25nMygpOworICAgICAgICByZXN1bHQueCA9IGEueCAtIGI7CisgICAgICAgIHJlc3VsdC55ID0gYS55IC0gYjsKKyAgICAgICAgcmVzdWx0LnogPSBhLnogLSBiOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG11bChMb25nMyBhKSB7CisgICAgICAgIHRoaXMueCAqPSBhLng7CisgICAgICAgIHRoaXMueSAqPSBhLnk7CisgICAgICAgIHRoaXMueiAqPSBhLno7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTG9uZzMgbXVsKExvbmczIGEsIExvbmczIGIpIHsKKyAgICAgICAgTG9uZzMgcmVzdWx0ID0gbmV3IExvbmczKCk7CisgICAgICAgIHJlc3VsdC54ID0gYS54ICogYi54OworICAgICAgICByZXN1bHQueSA9IGEueSAqIGIueTsKKyAgICAgICAgcmVzdWx0LnogPSBhLnogKiBiLno7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG11bChsb25nIHZhbHVlKSB7CisgICAgICAgIHggKj0gdmFsdWU7CisgICAgICAgIHkgKj0gdmFsdWU7CisgICAgICAgIHogKj0gdmFsdWU7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIG11bHRpcGxpY2F0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTG9uZzMgbXVsKExvbmczIGEsIGxvbmcgYikgeworICAgICAgICBMb25nMyByZXN1bHQgPSBuZXcgTG9uZzMoKTsKKyAgICAgICAgcmVzdWx0LnggPSBhLnggKiBiOworICAgICAgICByZXN1bHQueSA9IGEueSAqIGI7CisgICAgICAgIHJlc3VsdC56ID0gYS56ICogYjsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkaXZpc2lvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXYoTG9uZzMgYSkgeworICAgICAgICB0aGlzLnggLz0gYS54OworICAgICAgICB0aGlzLnkgLz0gYS55OworICAgICAgICB0aGlzLnogLz0gYS56OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkaXZpc2lvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIExvbmczIGRpdihMb25nMyBhLCBMb25nMyBiKSB7CisgICAgICAgIExvbmczIHJlc3VsdCA9IG5ldyBMb25nMygpOworICAgICAgICByZXN1bHQueCA9IGEueCAvIGIueDsKKyAgICAgICAgcmVzdWx0LnkgPSBhLnkgLyBiLnk7CisgICAgICAgIHJlc3VsdC56ID0gYS56IC8gYi56OworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRpdmlzaW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXYobG9uZyB2YWx1ZSkgeworICAgICAgICB4IC89IHZhbHVlOworICAgICAgICB5IC89IHZhbHVlOworICAgICAgICB6IC89IHZhbHVlOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkaXZpc2lvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIExvbmczIGRpdihMb25nMyBhLCBsb25nIGIpIHsKKyAgICAgICAgTG9uZzMgcmVzdWx0ID0gbmV3IExvbmczKCk7CisgICAgICAgIHJlc3VsdC54ID0gYS54IC8gYjsKKyAgICAgICAgcmVzdWx0LnkgPSBhLnkgLyBiOworICAgICAgICByZXN1bHQueiA9IGEueiAvIGI7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgTW9kdWxvCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG1vZChMb25nMyBhKSB7CisgICAgICAgIHRoaXMueCAlPSBhLng7CisgICAgICAgIHRoaXMueSAlPSBhLnk7CisgICAgICAgIHRoaXMueiAlPSBhLno7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIE1vZHVsbworICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIExvbmczIG1vZChMb25nMyBhLCBMb25nMyBiKSB7CisgICAgICAgIExvbmczIHJlc3VsdCA9IG5ldyBMb25nMygpOworICAgICAgICByZXN1bHQueCA9IGEueCAlIGIueDsKKyAgICAgICAgcmVzdWx0LnkgPSBhLnkgJSBiLnk7CisgICAgICAgIHJlc3VsdC56ID0gYS56ICUgYi56OworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIE1vZHVsbworICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgbW9kKGxvbmcgdmFsdWUpIHsKKyAgICAgICAgeCAlPSB2YWx1ZTsKKyAgICAgICAgeSAlPSB2YWx1ZTsKKyAgICAgICAgeiAlPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgTW9kdWxvCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTG9uZzMgbW9kKExvbmczIGEsIGxvbmcgYikgeworICAgICAgICBMb25nMyByZXN1bHQgPSBuZXcgTG9uZzMoKTsKKyAgICAgICAgcmVzdWx0LnggPSBhLnggJSBiOworICAgICAgICByZXN1bHQueSA9IGEueSAlIGI7CisgICAgICAgIHJlc3VsdC56ID0gYS56ICUgYjsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIGdldCB2ZWN0b3IgbGVuZ3RoCisgICAgICoKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIGxvbmcgbGVuZ3RoKCkgeworICAgICAgICByZXR1cm4gMzsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBzZXQgdmVjdG9yIG5lZ2F0ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG5lZ2F0ZSgpIHsKKyAgICAgICAgdGhpcy54ID0gLXg7CisgICAgICAgIHRoaXMueSA9IC15OworICAgICAgICB0aGlzLnogPSAtejsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZG90IFByb2R1Y3QKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBsb25nIGRvdFByb2R1Y3QoTG9uZzMgYSkgeworICAgICAgICByZXR1cm4gKGxvbmcpKCh4ICogYS54KSArICh5ICogYS55KSArICh6ICogYS56KSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRvdCBQcm9kdWN0CisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgbG9uZyBkb3RQcm9kdWN0KExvbmczIGEsIExvbmczIGIpIHsKKyAgICAgICAgcmV0dXJuIChsb25nKSgoYi54ICogYS54KSArIChiLnkgKiBhLnkpICsgKGIueiAqIGEueikpOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQgTXVsdGlwbGUKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGZhY3RvcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZE11bHRpcGxlKExvbmczIGEsIGxvbmcgZmFjdG9yKSB7CisgICAgICAgIHggKz0gYS54ICogZmFjdG9yOworICAgICAgICB5ICs9IGEueSAqIGZhY3RvcjsKKyAgICAgICAgeiArPSBhLnogKiBmYWN0b3I7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogc2V0IHZlY3RvciB2YWx1ZSBieSBMb25nMworICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXQoTG9uZzMgYSkgeworICAgICAgICB0aGlzLnggPSBhLng7CisgICAgICAgIHRoaXMueSA9IGEueTsKKyAgICAgICAgdGhpcy56ID0gYS56OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHNldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IExvbmcKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcGFyYW0gYworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlcyhsb25nIGEsIGxvbmcgYiwgbG9uZyBjKSB7CisgICAgICAgIHRoaXMueCA9IGE7CisgICAgICAgIHRoaXMueSA9IGI7CisgICAgICAgIHRoaXMueiA9IGM7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogcmV0dXJuIHRoZSBlbGVtZW50IHN1bSBvZiB2ZWN0b3IKKyAgICAgKgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBlbGVtZW50U3VtKCkgeworICAgICAgICByZXR1cm4gKGxvbmcpKHggKyB5ICsgeik7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogZ2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKKyAgICAgKgorICAgICAqIEBwYXJhbSBpCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBsb25nIGdldChpbnQgaSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgcmV0dXJuIChsb25nKSh4KTsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIChsb25nKSh5KTsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIChsb25nKSh6KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogc2V0IHRoZSB2ZWN0b3IgZmllbGQgdmFsdWUgYnkgaW5kZXgKKyAgICAgKgorICAgICAqIEBwYXJhbSBpCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0QXQoaW50IGksIGxvbmcgdmFsdWUpIHsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHggPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgeSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB6ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIGFkZCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4CisgICAgICoKKyAgICAgKiBAcGFyYW0gaQorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZEF0KGludCBpLCBsb25nIHZhbHVlKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICB4ICs9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICB5ICs9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB6ICs9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkluZGV4OiBpIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBjb3B5IHRoZSB2ZWN0b3IgdG8gbG9uZyBhcnJheQorICAgICAqCisgICAgICogQHBhcmFtIGRhdGEKKyAgICAgKiBAcGFyYW0gb2Zmc2V0CisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weVRvKGxvbmdbXSBkYXRhLCBpbnQgb2Zmc2V0KSB7CisgICAgICAgIGRhdGFbb2Zmc2V0XSA9IChsb25nKSh4KTsKKyAgICAgICAgZGF0YVtvZmZzZXQgKyAxXSA9IChsb25nKSh5KTsKKyAgICAgICAgZGF0YVtvZmZzZXQgKyAyXSA9IChsb25nKSh6KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0xvbmc0LmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0xvbmc0LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTG9uZzQuamF2YQpyZW5hbWUgdG8gcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nNC5qYXZhCmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDJmLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDJmLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ4MjYyZAotLS0gL2Rldi9udWxsCisrKyBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4MmYuamF2YQpAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKKworCisvKioKKyAqIENsYXNzIGZvciBleHBvc2luZyB0aGUgbmF0aXZlIFJlbmRlclNjcmlwdCByc19tYXRyaXgyeDIgdHlwZSBiYWNrIHRvIHRoZSBBbmRyb2lkIHN5c3RlbS4KKyAqCisgKiovCitwdWJsaWMgY2xhc3MgTWF0cml4MmYgeworCisgICAgLyoqCisgICAgKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IDJ4MiBtYXRyaXgKKyAgICAqLworICAgIHB1YmxpYyBNYXRyaXgyZigpIHsKKyAgICAgICAgbU1hdCA9IG5ldyBmbG9hdFs0XTsKKyAgICAgICAgbG9hZElkZW50aXR5KCk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBDcmVhdGVzIGEgbmV3IG1hdHJpeCBhbmQgc2V0cyBpdHMgdmFsdWVzIGZyb20gdGhlIGdpdmVuCisgICAgKiBwYXJhbWV0ZXIKKyAgICAqCisgICAgKiBAcGFyYW0gZGF0YUFycmF5IHZhbHVlcyB0byBzZXQgdGhlIG1hdHJpeCB0bywgbXVzdCBiZSA0CisgICAgKiAgICAgICAgICAgICAgICAgIGZsb2F0cyBsb25nCisgICAgKi8KKyAgICBwdWJsaWMgTWF0cml4MmYoZmxvYXRbXSBkYXRhQXJyYXkpIHsKKyAgICAgICAgbU1hdCA9IG5ldyBmbG9hdFs0XTsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShkYXRhQXJyYXksIDAsIG1NYXQsIDAsIG1NYXQubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgYXJyYXkgcmVwcmVzZW50aW5nIG1hdHJpeAorICAgICogdmFsdWVzLiBNb2RpZnlpbmcgdGhpcyBhcnJheSB3aWxsIGFsc28gY2hhbmdlIHRoZSBtYXRyaXgKKyAgICAqCisgICAgKiBAcmV0dXJuIGludGVybmFsIGFycmF5IHJlcHJlc2VudGluZyB0aGUgbWF0cml4CisgICAgKi8KKyAgICBwdWJsaWMgZmxvYXRbXSBnZXRBcnJheSgpIHsKKyAgICAgICAgcmV0dXJuIG1NYXQ7CisgICAgfQorCisgICAgLyoqCisgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiByb3cgYW5kIGNvbHVtbgorICAgICoKKyAgICAqIEBwYXJhbSB4IGNvbHVtbiBvZiB0aGUgdmFsdWUgdG8gcmV0dXJuCisgICAgKiBAcGFyYW0geSByb3cgb2YgdGhlIHZhbHVlIHRvIHJldHVybgorICAgICoKKyAgICAqIEByZXR1cm4gdmFsdWUgaW4gdGhlIHl0aCByb3cgYW5kIHh0aCBjb2x1bW4KKyAgICAqLworICAgIHB1YmxpYyBmbG9hdCBnZXQoaW50IHgsIGludCB5KSB7CisgICAgICAgIHJldHVybiBtTWF0W3gqMiArIHldOworICAgIH0KKworICAgIC8qKgorICAgICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gcm93IGFuZCBjb2x1bW4KKyAgICAqCisgICAgKiBAcGFyYW0geCBjb2x1bW4gb2YgdGhlIHZhbHVlIHRvIHNldAorICAgICogQHBhcmFtIHkgcm93IG9mIHRoZSB2YWx1ZSB0byBzZXQKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldChpbnQgeCwgaW50IHksIGZsb2F0IHYpIHsKKyAgICAgICAgbU1hdFt4KjIgKyB5XSA9IHY7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIHRoZSBtYXRyaXggdmFsdWVzIHRvIGlkZW50aXR5CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkSWRlbnRpdHkoKSB7CisgICAgICAgIG1NYXRbMF0gPSAxOworICAgICAgICBtTWF0WzFdID0gMDsKKworICAgICAgICBtTWF0WzJdID0gMDsKKyAgICAgICAgbU1hdFszXSA9IDE7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIG1hdHJpeCB0byB0aG9zZSBvZiB0aGUgcGFyYW1ldGVyCisgICAgKgorICAgICogQHBhcmFtIHNyYyBtYXRyaXggdG8gbG9hZCB0aGUgdmFsdWVzIGZyb20KKyAgICAqLworICAgIHB1YmxpYyB2b2lkIGxvYWQoTWF0cml4MmYgc3JjKSB7CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3JjLmdldEFycmF5KCksIDAsIG1NYXQsIDAsIG1NYXQubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgYSByb3RhdGlvbiBtYXRyaXggb2YgZ2l2ZW4gYW5nbGUKKyAgICAqCisgICAgKiBAcGFyYW0gcm90IHJvdGF0aW9uIGFuZ2xlCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkUm90YXRlKGZsb2F0IHJvdCkgeworICAgICAgICBmbG9hdCBjLCBzOworICAgICAgICByb3QgKj0gKGZsb2F0KShqYXZhLmxhbmcuTWF0aC5QSSAvIDE4MC4wZik7CisgICAgICAgIGMgPSAoZmxvYXQpamF2YS5sYW5nLk1hdGguY29zKHJvdCk7CisgICAgICAgIHMgPSAoZmxvYXQpamF2YS5sYW5nLk1hdGguc2luKHJvdCk7CisgICAgICAgIG1NYXRbMF0gPSBjOworICAgICAgICBtTWF0WzFdID0gLXM7CisgICAgICAgIG1NYXRbMl0gPSBzOworICAgICAgICBtTWF0WzNdID0gYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgYSBzY2FsZSBtYXRyaXggb2YgZ2l2ZW4gZGltZW5zaW9ucworICAgICoKKyAgICAqIEBwYXJhbSB4IHNjYWxlIGNvbXBvbmVudCB4CisgICAgKiBAcGFyYW0geSBzY2FsZSBjb21wb25lbnQgeQorICAgICovCisgICAgcHVibGljIHZvaWQgbG9hZFNjYWxlKGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgbG9hZElkZW50aXR5KCk7CisgICAgICAgIG1NYXRbMF0gPSB4OworICAgICAgICBtTWF0WzNdID0geTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgdGhlIHJlc3VsdCBvZiBtdWx0aXBseWluZyB0d28gZ2l2ZW4KKyAgICAqIG1hdHJpY2VzCisgICAgKgorICAgICogQHBhcmFtIGxocyBsZWZ0IGhhbmQgc2lkZSBtYXRyaXgKKyAgICAqIEBwYXJhbSByaHMgcmlnaHQgaGFuZCBzaWRlIG1hdHJpeAorICAgICovCisgICAgcHVibGljIHZvaWQgbG9hZE11bHRpcGx5KE1hdHJpeDJmIGxocywgTWF0cml4MmYgcmhzKSB7CisgICAgICAgIGZvciAoaW50IGk9MCA7IGk8MiA7IGkrKykgeworICAgICAgICAgICAgZmxvYXQgcmkwID0gMDsKKyAgICAgICAgICAgIGZsb2F0IHJpMSA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBqPTAgOyBqPDIgOyBqKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCByaHNfaWogPSByaHMuZ2V0KGksaik7CisgICAgICAgICAgICAgICAgcmkwICs9IGxocy5nZXQoaiwwKSAqIHJoc19pajsKKyAgICAgICAgICAgICAgICByaTEgKz0gbGhzLmdldChqLDEpICogcmhzX2lqOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0KGksMCwgcmkwKTsKKyAgICAgICAgICAgIHNldChpLDEsIHJpMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAqIFBvc3QtbXVsdGlwbGllcyB0aGUgY3VycmVudCBtYXRyaXggYnkgYSBnaXZlbiBwYXJhbWV0ZXIKKyAgICAqCisgICAgKiBAcGFyYW0gcmhzIHJpZ2h0IGhhbmQgc2lkZSB0byBtdWx0aXBseSBieQorICAgICovCisgICAgcHVibGljIHZvaWQgbXVsdGlwbHkoTWF0cml4MmYgcmhzKSB7CisgICAgICAgIE1hdHJpeDJmIHRtcCA9IG5ldyBNYXRyaXgyZigpOworICAgICAgICB0bXAubG9hZE11bHRpcGx5KHRoaXMsIHJocyk7CisgICAgICAgIGxvYWQodG1wKTsKKyAgICB9CisgICAgLyoqCisgICAgKiBNb2RpZmllcyB0aGUgY3VycmVudCBtYXRyaXggYnkgcG9zdC1tdWx0aXBseWluZyBpdCB3aXRoIGEKKyAgICAqIHJvdGF0aW9uIG1hdHJpeCBvZiBnaXZlbiBhbmdsZQorICAgICoKKyAgICAqIEBwYXJhbSByb3QgYW5nbGUgb2Ygcm90YXRpb24KKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHJvdGF0ZShmbG9hdCByb3QpIHsKKyAgICAgICAgTWF0cml4MmYgdG1wID0gbmV3IE1hdHJpeDJmKCk7CisgICAgICAgIHRtcC5sb2FkUm90YXRlKHJvdCk7CisgICAgICAgIG11bHRpcGx5KHRtcCk7CisgICAgfQorICAgIC8qKgorICAgICogTW9kaWZpZXMgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHBvc3QtbXVsdGlwbHlpbmcgaXQgd2l0aCBhCisgICAgKiBzY2FsZSBtYXRyaXggb2YgZ2l2ZW4gZGltZW5zaW9ucworICAgICoKKyAgICAqIEBwYXJhbSB4IHNjYWxlIGNvbXBvbmVudCB4CisgICAgKiBAcGFyYW0geSBzY2FsZSBjb21wb25lbnQgeQorICAgICovCisgICAgcHVibGljIHZvaWQgc2NhbGUoZmxvYXQgeCwgZmxvYXQgeSkgeworICAgICAgICBNYXRyaXgyZiB0bXAgPSBuZXcgTWF0cml4MmYoKTsKKyAgICAgICAgdG1wLmxvYWRTY2FsZSh4LCB5KTsKKyAgICAgICAgbXVsdGlwbHkodG1wKTsKKyAgICB9CisgICAgLyoqCisgICAgKiBTZXRzIHRoZSBjdXJyZW50IG1hdHJpeCB0byBpdHMgdHJhbnNwb3NlCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0cmFuc3Bvc2UoKSB7CisgICAgICAgIGZsb2F0IHRlbXAgPSBtTWF0WzFdOworICAgICAgICBtTWF0WzFdID0gbU1hdFsyXTsKKyAgICAgICAgbU1hdFsyXSA9IHRlbXA7CisgICAgfQorCisgICAgZmluYWwgZmxvYXRbXSBtTWF0OworfQorCisKKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgzZi5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgzZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNGFmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDNmLmphdmEKQEAgLTAsMCArMSwzMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKKworLyoqCisgKiBDbGFzcyBmb3IgZXhwb3NpbmcgdGhlIG5hdGl2ZSBSZW5kZXJTY3JpcHQgcnNfbWF0cml4M3gzIHR5cGUgYmFjayB0byB0aGUgQW5kcm9pZCBzeXN0ZW0uCisgKgorICoqLworcHVibGljIGNsYXNzIE1hdHJpeDNmIHsKKworICAgIC8qKgorICAgICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSAzeDMgbWF0cml4CisgICAgKi8KKyAgICBwdWJsaWMgTWF0cml4M2YoKSB7CisgICAgICAgIG1NYXQgPSBuZXcgZmxvYXRbOV07CisgICAgICAgIGxvYWRJZGVudGl0eSgpOworICAgIH0KKworICAgIC8qKgorICAgICogQ3JlYXRlcyBhIG5ldyBtYXRyaXggYW5kIHNldHMgaXRzIHZhbHVlcyBmcm9tIHRoZSBnaXZlbgorICAgICogcGFyYW1ldGVyCisgICAgKgorICAgICogQHBhcmFtIGRhdGFBcnJheSB2YWx1ZXMgdG8gc2V0IHRoZSBtYXRyaXggdG8sIG11c3QgYmUgOQorICAgICogICAgICAgICAgICAgICAgICBmbG9hdHMgbG9uZworICAgICovCisgICAgcHVibGljIE1hdHJpeDNmKGZsb2F0W10gZGF0YUFycmF5KSB7CisgICAgICAgIG1NYXQgPSBuZXcgZmxvYXRbOV07CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZGF0YUFycmF5LCAwLCBtTWF0LCAwLCBtTWF0Lmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBSZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGludGVybmFsIGFycmF5IHJlcHJlc2VudGluZyBtYXRyaXgKKyAgICAqIHZhbHVlcy4gTW9kaWZ5aW5nIHRoaXMgYXJyYXkgd2lsbCBhbHNvIGNoYW5nZSB0aGUgbWF0cml4CisgICAgKgorICAgICogQHJldHVybiBpbnRlcm5hbCBhcnJheSByZXByZXNlbnRpbmcgdGhlIG1hdHJpeAorICAgICovCisgICAgcHVibGljIGZsb2F0W10gZ2V0QXJyYXkoKSB7CisgICAgICAgIHJldHVybiBtTWF0OworICAgIH0KKworICAgIC8qKgorICAgICogUmV0dXJucyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gcm93IGFuZCBjb2x1bW4KKyAgICAqCisgICAgKiBAcGFyYW0geCBjb2x1bW4gb2YgdGhlIHZhbHVlIHRvIHJldHVybgorICAgICogQHBhcmFtIHkgcm93IG9mIHRoZSB2YWx1ZSB0byByZXR1cm4KKyAgICAqCisgICAgKiBAcmV0dXJuIHZhbHVlIGluIHRoZSB5dGggcm93IGFuZCB4dGggY29sdW1uCisgICAgKi8KKyAgICBwdWJsaWMgZmxvYXQgZ2V0KGludCB4LCBpbnQgeSkgeworICAgICAgICByZXR1cm4gbU1hdFt4KjMgKyB5XTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIGdpdmVuIHJvdyBhbmQgY29sdW1uCisgICAgKgorICAgICogQHBhcmFtIHggY29sdW1uIG9mIHRoZSB2YWx1ZSB0byBzZXQKKyAgICAqIEBwYXJhbSB5IHJvdyBvZiB0aGUgdmFsdWUgdG8gc2V0CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXQoaW50IHgsIGludCB5LCBmbG9hdCB2KSB7CisgICAgICAgIG1NYXRbeCozICsgeV0gPSB2OworICAgIH0KKworICAgIC8qKgorICAgICogU2V0cyB0aGUgbWF0cml4IHZhbHVlcyB0byBpZGVudGl0eQorICAgICovCisgICAgcHVibGljIHZvaWQgbG9hZElkZW50aXR5KCkgeworICAgICAgICBtTWF0WzBdID0gMTsKKyAgICAgICAgbU1hdFsxXSA9IDA7CisgICAgICAgIG1NYXRbMl0gPSAwOworCisgICAgICAgIG1NYXRbM10gPSAwOworICAgICAgICBtTWF0WzRdID0gMTsKKyAgICAgICAgbU1hdFs1XSA9IDA7CisKKyAgICAgICAgbU1hdFs2XSA9IDA7CisgICAgICAgIG1NYXRbN10gPSAwOworICAgICAgICBtTWF0WzhdID0gMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFNldHMgdGhlIHZhbHVlcyBvZiB0aGUgbWF0cml4IHRvIHRob3NlIG9mIHRoZSBwYXJhbWV0ZXIKKyAgICAqCisgICAgKiBAcGFyYW0gc3JjIG1hdHJpeCB0byBsb2FkIHRoZSB2YWx1ZXMgZnJvbQorICAgICovCisgICAgcHVibGljIHZvaWQgbG9hZChNYXRyaXgzZiBzcmMpIHsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShzcmMuZ2V0QXJyYXkoKSwgMCwgbU1hdCwgMCwgbU1hdC5sZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICogU2V0cyBjdXJyZW50IHZhbHVlcyB0byBiZSBhIHJvdGF0aW9uIG1hdHJpeCBvZiBjZXJ0YWluIGFuZ2xlCisgICAgKiBhYm91dCBhIGdpdmVuIGF4aXMKKyAgICAqCisgICAgKiBAcGFyYW0gcm90IGFuZ2xlIG9mIHJvdGF0aW9uCisgICAgKiBAcGFyYW0geCByb3RhdGlvbiBheGlzIHgKKyAgICAqIEBwYXJhbSB5IHJvdGF0aW9uIGF4aXMgeQorICAgICogQHBhcmFtIHogcm90YXRpb24gYXhpcyB6CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkUm90YXRlKGZsb2F0IHJvdCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeworICAgICAgICBmbG9hdCBjLCBzOworICAgICAgICByb3QgKj0gKGZsb2F0KShqYXZhLmxhbmcuTWF0aC5QSSAvIDE4MC4wZik7CisgICAgICAgIGMgPSAoZmxvYXQpamF2YS5sYW5nLk1hdGguY29zKHJvdCk7CisgICAgICAgIHMgPSAoZmxvYXQpamF2YS5sYW5nLk1hdGguc2luKHJvdCk7CisKKyAgICAgICAgZmxvYXQgbGVuID0gKGZsb2F0KWphdmEubGFuZy5NYXRoLnNxcnQoeCp4ICsgeSp5ICsgeip6KTsKKyAgICAgICAgaWYgKCEobGVuICE9IDEpKSB7CisgICAgICAgICAgICBmbG9hdCByZWNpcExlbiA9IDEuZiAvIGxlbjsKKyAgICAgICAgICAgIHggKj0gcmVjaXBMZW47CisgICAgICAgICAgICB5ICo9IHJlY2lwTGVuOworICAgICAgICAgICAgeiAqPSByZWNpcExlbjsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBuYyA9IDEuMGYgLSBjOworICAgICAgICBmbG9hdCB4eSA9IHggKiB5OworICAgICAgICBmbG9hdCB5eiA9IHkgKiB6OworICAgICAgICBmbG9hdCB6eCA9IHogKiB4OworICAgICAgICBmbG9hdCB4cyA9IHggKiBzOworICAgICAgICBmbG9hdCB5cyA9IHkgKiBzOworICAgICAgICBmbG9hdCB6cyA9IHogKiBzOworICAgICAgICBtTWF0WzBdID0geCp4Km5jICsgIGM7CisgICAgICAgIG1NYXRbM10gPSAgeHkqbmMgLSB6czsKKyAgICAgICAgbU1hdFs2XSA9ICB6eCpuYyArIHlzOworICAgICAgICBtTWF0WzFdID0gIHh5Km5jICsgenM7CisgICAgICAgIG1NYXRbNF0gPSB5KnkqbmMgKyAgYzsKKyAgICAgICAgbU1hdFs3XSA9ICB5eipuYyAtIHhzOworICAgICAgICBtTWF0WzJdID0gIHp4Km5jIC0geXM7CisgICAgICAgIG1NYXRbNV0gPSAgeXoqbmMgKyB4czsKKyAgICAgICAgbU1hdFs4XSA9IHoqeipuYyArICBjOworICAgIH0KKworICAgIC8qKgorICAgICogTWFrZXMgdGhlIHVwcGVyIDJ4MiBhIHJvdGF0aW9uIG1hdHJpeCBvZiB0aGUgZ2l2ZW4gYW5nbGUKKyAgICAqCisgICAgKiBAcGFyYW0gcm90IHJvdGF0aW9uIGFuZ2xlCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkUm90YXRlKGZsb2F0IHJvdCkgeworICAgICAgICBsb2FkSWRlbnRpdHkoKTsKKyAgICAgICAgZmxvYXQgYywgczsKKyAgICAgICAgcm90ICo9IChmbG9hdCkoamF2YS5sYW5nLk1hdGguUEkgLyAxODAuMGYpOworICAgICAgICBjID0gKGZsb2F0KWphdmEubGFuZy5NYXRoLmNvcyhyb3QpOworICAgICAgICBzID0gKGZsb2F0KWphdmEubGFuZy5NYXRoLnNpbihyb3QpOworICAgICAgICBtTWF0WzBdID0gYzsKKyAgICAgICAgbU1hdFsxXSA9IC1zOworICAgICAgICBtTWF0WzNdID0gczsKKyAgICAgICAgbU1hdFs0XSA9IGM7CisgICAgfQorCisgICAgLyoqCisgICAgKiBNYWtlcyB0aGUgdXBwZXIgMngyIGEgc2NhbGUgbWF0cml4IG9mIGdpdmVuIGRpbWVuc2lvbnMKKyAgICAqCisgICAgKiBAcGFyYW0geCBzY2FsZSBjb21wb25lbnQgeAorICAgICogQHBhcmFtIHkgc2NhbGUgY29tcG9uZW50IHkKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIGxvYWRTY2FsZShmbG9hdCB4LCBmbG9hdCB5KSB7CisgICAgICAgIGxvYWRJZGVudGl0eSgpOworICAgICAgICBtTWF0WzBdID0geDsKKyAgICAgICAgbU1hdFs0XSA9IHk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIGN1cnJlbnQgdmFsdWVzIHRvIGJlIGEgc2NhbGUgbWF0cml4IG9mIGdpdmVuIGRpbWVuc2lvbnMKKyAgICAqCisgICAgKiBAcGFyYW0geCBzY2FsZSBjb21wb25lbnQgeAorICAgICogQHBhcmFtIHkgc2NhbGUgY29tcG9uZW50IHkKKyAgICAqIEBwYXJhbSB6IHNjYWxlIGNvbXBvbmVudCB6CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkU2NhbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeworICAgICAgICBsb2FkSWRlbnRpdHkoKTsKKyAgICAgICAgbU1hdFswXSA9IHg7CisgICAgICAgIG1NYXRbNF0gPSB5OworICAgICAgICBtTWF0WzhdID0gejsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgYSB0cmFuc2xhdGlvbiBtYXRyaXggb2YgZ2l2ZW4KKyAgICAqIGRpbWVuc2lvbnMKKyAgICAqCisgICAgKiBAcGFyYW0geCB0cmFuc2xhdGlvbiBjb21wb25lbnQgeAorICAgICogQHBhcmFtIHkgdHJhbnNsYXRpb24gY29tcG9uZW50IHkKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIGxvYWRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgeworICAgICAgICBsb2FkSWRlbnRpdHkoKTsKKyAgICAgICAgbU1hdFs2XSA9IHg7CisgICAgICAgIG1NYXRbN10gPSB5OworICAgIH0KKworICAgIC8qKgorICAgICogU2V0cyBjdXJyZW50IHZhbHVlcyB0byBiZSB0aGUgcmVzdWx0IG9mIG11bHRpcGx5aW5nIHR3byBnaXZlbgorICAgICogbWF0cmljZXMKKyAgICAqCisgICAgKiBAcGFyYW0gbGhzIGxlZnQgaGFuZCBzaWRlIG1hdHJpeAorICAgICogQHBhcmFtIHJocyByaWdodCBoYW5kIHNpZGUgbWF0cml4CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkTXVsdGlwbHkoTWF0cml4M2YgbGhzLCBNYXRyaXgzZiByaHMpIHsKKyAgICAgICAgZm9yIChpbnQgaT0wIDsgaTwzIDsgaSsrKSB7CisgICAgICAgICAgICBmbG9hdCByaTAgPSAwOworICAgICAgICAgICAgZmxvYXQgcmkxID0gMDsKKyAgICAgICAgICAgIGZsb2F0IHJpMiA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBqPTAgOyBqPDMgOyBqKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCByaHNfaWogPSByaHMuZ2V0KGksaik7CisgICAgICAgICAgICAgICAgcmkwICs9IGxocy5nZXQoaiwwKSAqIHJoc19pajsKKyAgICAgICAgICAgICAgICByaTEgKz0gbGhzLmdldChqLDEpICogcmhzX2lqOworICAgICAgICAgICAgICAgIHJpMiArPSBsaHMuZ2V0KGosMikgKiByaHNfaWo7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXQoaSwwLCByaTApOworICAgICAgICAgICAgc2V0KGksMSwgcmkxKTsKKyAgICAgICAgICAgIHNldChpLDIsIHJpMik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAqIFBvc3QtbXVsdGlwbGllcyB0aGUgY3VycmVudCBtYXRyaXggYnkgYSBnaXZlbiBwYXJhbWV0ZXIKKyAgICAqCisgICAgKiBAcGFyYW0gcmhzIHJpZ2h0IGhhbmQgc2lkZSB0byBtdWx0aXBseSBieQorICAgICovCisgICAgcHVibGljIHZvaWQgbXVsdGlwbHkoTWF0cml4M2YgcmhzKSB7CisgICAgICAgIE1hdHJpeDNmIHRtcCA9IG5ldyBNYXRyaXgzZigpOworICAgICAgICB0bXAubG9hZE11bHRpcGx5KHRoaXMsIHJocyk7CisgICAgICAgIGxvYWQodG1wKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIE1vZGlmaWVzIHRoZSBjdXJyZW50IG1hdHJpeCBieSBwb3N0LW11bHRpcGx5aW5nIGl0IHdpdGggYQorICAgICogcm90YXRpb24gbWF0cml4IG9mIGNlcnRhaW4gYW5nbGUgYWJvdXQgYSBnaXZlbiBheGlzCisgICAgKgorICAgICogQHBhcmFtIHJvdCBhbmdsZSBvZiByb3RhdGlvbgorICAgICogQHBhcmFtIHggcm90YXRpb24gYXhpcyB4CisgICAgKiBAcGFyYW0geSByb3RhdGlvbiBheGlzIHkKKyAgICAqIEBwYXJhbSB6IHJvdGF0aW9uIGF4aXMgegorICAgICovCisgICAgcHVibGljIHZvaWQgcm90YXRlKGZsb2F0IHJvdCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeworICAgICAgICBNYXRyaXgzZiB0bXAgPSBuZXcgTWF0cml4M2YoKTsKKyAgICAgICAgdG1wLmxvYWRSb3RhdGUocm90LCB4LCB5LCB6KTsKKyAgICAgICAgbXVsdGlwbHkodG1wKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIE1vZGlmaWVzIHRoZSB1cHBlciAyeDIgb2YgdGhlIGN1cnJlbnQgbWF0cml4IGJ5CisgICAgKiBwb3N0LW11bHRpcGx5aW5nIGl0IHdpdGggYSByb3RhdGlvbiBtYXRyaXggb2YgZ2l2ZW4gYW5nbGUKKyAgICAqCisgICAgKiBAcGFyYW0gcm90IGFuZ2xlIG9mIHJvdGF0aW9uCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByb3RhdGUoZmxvYXQgcm90KSB7CisgICAgICAgIE1hdHJpeDNmIHRtcCA9IG5ldyBNYXRyaXgzZigpOworICAgICAgICB0bXAubG9hZFJvdGF0ZShyb3QpOworICAgICAgICBtdWx0aXBseSh0bXApOworICAgIH0KKworICAgIC8qKgorICAgICogTW9kaWZpZXMgdGhlIHVwcGVyIDJ4MiBvZiB0aGUgY3VycmVudCBtYXRyaXggYnkKKyAgICAqIHBvc3QtbXVsdGlwbHlpbmcgaXQgd2l0aCBhIHNjYWxlIG1hdHJpeCBvZiBnaXZlbiBkaW1lbnNpb25zCisgICAgKgorICAgICogQHBhcmFtIHggc2NhbGUgY29tcG9uZW50IHgKKyAgICAqIEBwYXJhbSB5IHNjYWxlIGNvbXBvbmVudCB5CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzY2FsZShmbG9hdCB4LCBmbG9hdCB5KSB7CisgICAgICAgIE1hdHJpeDNmIHRtcCA9IG5ldyBNYXRyaXgzZigpOworICAgICAgICB0bXAubG9hZFNjYWxlKHgsIHkpOworICAgICAgICBtdWx0aXBseSh0bXApOworICAgIH0KKworICAgIC8qKgorICAgICogTW9kaWZpZXMgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHBvc3QtbXVsdGlwbHlpbmcgaXQgd2l0aCBhCisgICAgKiBzY2FsZSBtYXRyaXggb2YgZ2l2ZW4gZGltZW5zaW9ucworICAgICoKKyAgICAqIEBwYXJhbSB4IHNjYWxlIGNvbXBvbmVudCB4CisgICAgKiBAcGFyYW0geSBzY2FsZSBjb21wb25lbnQgeQorICAgICogQHBhcmFtIHogc2NhbGUgY29tcG9uZW50IHoKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHNjYWxlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsKKyAgICAgICAgTWF0cml4M2YgdG1wID0gbmV3IE1hdHJpeDNmKCk7CisgICAgICAgIHRtcC5sb2FkU2NhbGUoeCwgeSwgeik7CisgICAgICAgIG11bHRpcGx5KHRtcCk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBNb2RpZmllcyB0aGUgY3VycmVudCBtYXRyaXggYnkgcG9zdC1tdWx0aXBseWluZyBpdCB3aXRoIGEKKyAgICAqIHRyYW5zbGF0aW9uIG1hdHJpeCBvZiBnaXZlbiBkaW1lbnNpb25zCisgICAgKgorICAgICogQHBhcmFtIHggdHJhbnNsYXRpb24gY29tcG9uZW50IHgKKyAgICAqIEBwYXJhbSB5IHRyYW5zbGF0aW9uIGNvbXBvbmVudCB5CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgeworICAgICAgICBNYXRyaXgzZiB0bXAgPSBuZXcgTWF0cml4M2YoKTsKKyAgICAgICAgdG1wLmxvYWRUcmFuc2xhdGUoeCwgeSk7CisgICAgICAgIG11bHRpcGx5KHRtcCk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIHRoZSBjdXJyZW50IG1hdHJpeCB0byBpdHMgdHJhbnNwb3NlCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0cmFuc3Bvc2UoKSB7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgICAgIGZvcihpbnQgaiA9IGkgKyAxOyBqIDwgMzsgKytqKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgdGVtcCA9IG1NYXRbaSozICsgal07CisgICAgICAgICAgICAgICAgbU1hdFtpKjMgKyBqXSA9IG1NYXRbaiozICsgaV07CisgICAgICAgICAgICAgICAgbU1hdFtqKjMgKyBpXSA9IHRlbXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaW5hbCBmbG9hdFtdIG1NYXQ7Cit9CisKKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXg0Zi5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXg0Zi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNWJmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDRmLmphdmEKQEAgLTAsMCArMSw0OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKK2ltcG9ydCBqYXZhLmxhbmcuTWF0aDsKKworCisvKioKKyAqIENsYXNzIGZvciBleHBvc2luZyB0aGUgbmF0aXZlIFJlbmRlclNjcmlwdCByc19tYXRyaXg0eDQgdHlwZSBiYWNrIHRvIHRoZSBBbmRyb2lkIHN5c3RlbS4KKyAqCisgKiovCitwdWJsaWMgY2xhc3MgTWF0cml4NGYgeworCisgICAgLyoqCisgICAgKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IDR4NCBtYXRyaXgKKyAgICAqLworICAgIHB1YmxpYyBNYXRyaXg0ZigpIHsKKyAgICAgICAgbU1hdCA9IG5ldyBmbG9hdFsxNl07CisgICAgICAgIGxvYWRJZGVudGl0eSgpOworICAgIH0KKworICAgIC8qKgorICAgICogQ3JlYXRlcyBhIG5ldyBtYXRyaXggYW5kIHNldHMgaXRzIHZhbHVlcyBmcm9tIHRoZSBnaXZlbgorICAgICogcGFyYW1ldGVyCisgICAgKgorICAgICogQHBhcmFtIGRhdGFBcnJheSB2YWx1ZXMgdG8gc2V0IHRoZSBtYXRyaXggdG8sIG11c3QgYmUgMTYKKyAgICAqICAgICAgICAgICAgICAgICAgZmxvYXRzIGxvbmcKKyAgICAqLworICAgIHB1YmxpYyBNYXRyaXg0ZihmbG9hdFtdIGRhdGFBcnJheSkgeworICAgICAgICBtTWF0ID0gbmV3IGZsb2F0WzE2XTsKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShkYXRhQXJyYXksIDAsIG1NYXQsIDAsIG1NYXQubGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgYXJyYXkgcmVwcmVzZW50aW5nIG1hdHJpeAorICAgICogdmFsdWVzLiBNb2RpZnlpbmcgdGhpcyBhcnJheSB3aWxsIGFsc28gY2hhbmdlIHRoZSBtYXRyaXgKKyAgICAqCisgICAgKiBAcmV0dXJuIGludGVybmFsIGFycmF5IHJlcHJlc2VudGluZyB0aGUgbWF0cml4CisgICAgKi8KKyAgICBwdWJsaWMgZmxvYXRbXSBnZXRBcnJheSgpIHsKKyAgICAgICAgcmV0dXJuIG1NYXQ7CisgICAgfQorCisgICAgLyoqCisgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiByb3cgYW5kIGNvbHVtbgorICAgICoKKyAgICAqIEBwYXJhbSB4IGNvbHVtbiBvZiB0aGUgdmFsdWUgdG8gcmV0dXJuCisgICAgKiBAcGFyYW0geSByb3cgb2YgdGhlIHZhbHVlIHRvIHJldHVybgorICAgICoKKyAgICAqIEByZXR1cm4gdmFsdWUgaW4gdGhlIHl0aCByb3cgYW5kIHh0aCBjb2x1bW4KKyAgICAqLworICAgIHB1YmxpYyBmbG9hdCBnZXQoaW50IHgsIGludCB5KSB7CisgICAgICAgIHJldHVybiBtTWF0W3gqNCArIHldOworICAgIH0KKworICAgIC8qKgorICAgICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gcm93IGFuZCBjb2x1bW4KKyAgICAqCisgICAgKiBAcGFyYW0geCBjb2x1bW4gb2YgdGhlIHZhbHVlIHRvIHNldAorICAgICogQHBhcmFtIHkgcm93IG9mIHRoZSB2YWx1ZSB0byBzZXQKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldChpbnQgeCwgaW50IHksIGZsb2F0IHYpIHsKKyAgICAgICAgbU1hdFt4KjQgKyB5XSA9IHY7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIHRoZSBtYXRyaXggdmFsdWVzIHRvIGlkZW50aXR5CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkSWRlbnRpdHkoKSB7CisgICAgICAgIG1NYXRbMF0gPSAxOworICAgICAgICBtTWF0WzFdID0gMDsKKyAgICAgICAgbU1hdFsyXSA9IDA7CisgICAgICAgIG1NYXRbM10gPSAwOworCisgICAgICAgIG1NYXRbNF0gPSAwOworICAgICAgICBtTWF0WzVdID0gMTsKKyAgICAgICAgbU1hdFs2XSA9IDA7CisgICAgICAgIG1NYXRbN10gPSAwOworCisgICAgICAgIG1NYXRbOF0gPSAwOworICAgICAgICBtTWF0WzldID0gMDsKKyAgICAgICAgbU1hdFsxMF0gPSAxOworICAgICAgICBtTWF0WzExXSA9IDA7CisKKyAgICAgICAgbU1hdFsxMl0gPSAwOworICAgICAgICBtTWF0WzEzXSA9IDA7CisgICAgICAgIG1NYXRbMTRdID0gMDsKKyAgICAgICAgbU1hdFsxNV0gPSAxOworICAgIH0KKworICAgIC8qKgorICAgICogU2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBtYXRyaXggdG8gdGhvc2Ugb2YgdGhlIHBhcmFtZXRlcgorICAgICoKKyAgICAqIEBwYXJhbSBzcmMgbWF0cml4IHRvIGxvYWQgdGhlIHZhbHVlcyBmcm9tCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkKE1hdHJpeDRmIHNyYykgeworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHNyYy5nZXRBcnJheSgpLCAwLCBtTWF0LCAwLCBtTWF0Lmxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIG1hdHJpeCB0byB0aG9zZSBvZiB0aGUgcGFyYW1ldGVyCisgICAgKgorICAgICogQHBhcmFtIHNyYyBtYXRyaXggdG8gbG9hZCB0aGUgdmFsdWVzIGZyb20KKyAgICAqIEBoaWRlCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkKE1hdHJpeDNmIHNyYykgeworICAgICAgICBtTWF0WzBdID0gc3JjLm1NYXRbMF07CisgICAgICAgIG1NYXRbMV0gPSBzcmMubU1hdFsxXTsKKyAgICAgICAgbU1hdFsyXSA9IHNyYy5tTWF0WzJdOworICAgICAgICBtTWF0WzNdID0gMDsKKworICAgICAgICBtTWF0WzRdID0gc3JjLm1NYXRbM107CisgICAgICAgIG1NYXRbNV0gPSBzcmMubU1hdFs0XTsKKyAgICAgICAgbU1hdFs2XSA9IHNyYy5tTWF0WzVdOworICAgICAgICBtTWF0WzddID0gMDsKKworICAgICAgICBtTWF0WzhdID0gc3JjLm1NYXRbNl07CisgICAgICAgIG1NYXRbOV0gPSBzcmMubU1hdFs3XTsKKyAgICAgICAgbU1hdFsxMF0gPSBzcmMubU1hdFs4XTsKKyAgICAgICAgbU1hdFsxMV0gPSAwOworCisgICAgICAgIG1NYXRbMTJdID0gMDsKKyAgICAgICAgbU1hdFsxM10gPSAwOworICAgICAgICBtTWF0WzE0XSA9IDA7CisgICAgICAgIG1NYXRbMTVdID0gMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFNldHMgY3VycmVudCB2YWx1ZXMgdG8gYmUgYSByb3RhdGlvbiBtYXRyaXggb2YgY2VydGFpbiBhbmdsZQorICAgICogYWJvdXQgYSBnaXZlbiBheGlzCisgICAgKgorICAgICogQHBhcmFtIHJvdCBhbmdsZSBvZiByb3RhdGlvbgorICAgICogQHBhcmFtIHggcm90YXRpb24gYXhpcyB4CisgICAgKiBAcGFyYW0geSByb3RhdGlvbiBheGlzIHkKKyAgICAqIEBwYXJhbSB6IHJvdGF0aW9uIGF4aXMgegorICAgICovCisgICAgcHVibGljIHZvaWQgbG9hZFJvdGF0ZShmbG9hdCByb3QsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsKKyAgICAgICAgZmxvYXQgYywgczsKKyAgICAgICAgbU1hdFszXSA9IDA7CisgICAgICAgIG1NYXRbN10gPSAwOworICAgICAgICBtTWF0WzExXT0gMDsKKyAgICAgICAgbU1hdFsxMl09IDA7CisgICAgICAgIG1NYXRbMTNdPSAwOworICAgICAgICBtTWF0WzE0XT0gMDsKKyAgICAgICAgbU1hdFsxNV09IDE7CisgICAgICAgIHJvdCAqPSAoZmxvYXQpKGphdmEubGFuZy5NYXRoLlBJIC8gMTgwLjBmKTsKKyAgICAgICAgYyA9IChmbG9hdClqYXZhLmxhbmcuTWF0aC5jb3Mocm90KTsKKyAgICAgICAgcyA9IChmbG9hdClqYXZhLmxhbmcuTWF0aC5zaW4ocm90KTsKKworICAgICAgICBmbG9hdCBsZW4gPSAoZmxvYXQpamF2YS5sYW5nLk1hdGguc3FydCh4KnggKyB5KnkgKyB6KnopOworICAgICAgICBpZiAoIShsZW4gIT0gMSkpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlY2lwTGVuID0gMS5mIC8gbGVuOworICAgICAgICAgICAgeCAqPSByZWNpcExlbjsKKyAgICAgICAgICAgIHkgKj0gcmVjaXBMZW47CisgICAgICAgICAgICB6ICo9IHJlY2lwTGVuOworICAgICAgICB9CisgICAgICAgIGZsb2F0IG5jID0gMS4wZiAtIGM7CisgICAgICAgIGZsb2F0IHh5ID0geCAqIHk7CisgICAgICAgIGZsb2F0IHl6ID0geSAqIHo7CisgICAgICAgIGZsb2F0IHp4ID0geiAqIHg7CisgICAgICAgIGZsb2F0IHhzID0geCAqIHM7CisgICAgICAgIGZsb2F0IHlzID0geSAqIHM7CisgICAgICAgIGZsb2F0IHpzID0geiAqIHM7CisgICAgICAgIG1NYXRbIDBdID0geCp4Km5jICsgIGM7CisgICAgICAgIG1NYXRbIDRdID0gIHh5Km5jIC0genM7CisgICAgICAgIG1NYXRbIDhdID0gIHp4Km5jICsgeXM7CisgICAgICAgIG1NYXRbIDFdID0gIHh5Km5jICsgenM7CisgICAgICAgIG1NYXRbIDVdID0geSp5Km5jICsgIGM7CisgICAgICAgIG1NYXRbIDldID0gIHl6Km5jIC0geHM7CisgICAgICAgIG1NYXRbIDJdID0gIHp4Km5jIC0geXM7CisgICAgICAgIG1NYXRbIDZdID0gIHl6Km5jICsgeHM7CisgICAgICAgIG1NYXRbMTBdID0geip6Km5jICsgIGM7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIGN1cnJlbnQgdmFsdWVzIHRvIGJlIGEgc2NhbGUgbWF0cml4IG9mIGdpdmVuIGRpbWVuc2lvbnMKKyAgICAqCisgICAgKiBAcGFyYW0geCBzY2FsZSBjb21wb25lbnQgeAorICAgICogQHBhcmFtIHkgc2NhbGUgY29tcG9uZW50IHkKKyAgICAqIEBwYXJhbSB6IHNjYWxlIGNvbXBvbmVudCB6CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkU2NhbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeworICAgICAgICBsb2FkSWRlbnRpdHkoKTsKKyAgICAgICAgbU1hdFswXSA9IHg7CisgICAgICAgIG1NYXRbNV0gPSB5OworICAgICAgICBtTWF0WzEwXSA9IHo7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIGN1cnJlbnQgdmFsdWVzIHRvIGJlIGEgdHJhbnNsYXRpb24gbWF0cml4IG9mIGdpdmVuCisgICAgKiBkaW1lbnNpb25zCisgICAgKgorICAgICogQHBhcmFtIHggdHJhbnNsYXRpb24gY29tcG9uZW50IHgKKyAgICAqIEBwYXJhbSB5IHRyYW5zbGF0aW9uIGNvbXBvbmVudCB5CisgICAgKiBAcGFyYW0geiB0cmFuc2xhdGlvbiBjb21wb25lbnQgegorICAgICovCisgICAgcHVibGljIHZvaWQgbG9hZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7CisgICAgICAgIGxvYWRJZGVudGl0eSgpOworICAgICAgICBtTWF0WzEyXSA9IHg7CisgICAgICAgIG1NYXRbMTNdID0geTsKKyAgICAgICAgbU1hdFsxNF0gPSB6OworICAgIH0KKworICAgIC8qKgorICAgICogU2V0cyBjdXJyZW50IHZhbHVlcyB0byBiZSB0aGUgcmVzdWx0IG9mIG11bHRpcGx5aW5nIHR3byBnaXZlbgorICAgICogbWF0cmljZXMKKyAgICAqCisgICAgKiBAcGFyYW0gbGhzIGxlZnQgaGFuZCBzaWRlIG1hdHJpeAorICAgICogQHBhcmFtIHJocyByaWdodCBoYW5kIHNpZGUgbWF0cml4CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkTXVsdGlwbHkoTWF0cml4NGYgbGhzLCBNYXRyaXg0ZiByaHMpIHsKKyAgICAgICAgZm9yIChpbnQgaT0wIDsgaTw0IDsgaSsrKSB7CisgICAgICAgICAgICBmbG9hdCByaTAgPSAwOworICAgICAgICAgICAgZmxvYXQgcmkxID0gMDsKKyAgICAgICAgICAgIGZsb2F0IHJpMiA9IDA7CisgICAgICAgICAgICBmbG9hdCByaTMgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaj0wIDsgajw0IDsgaisrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgcmhzX2lqID0gcmhzLmdldChpLGopOworICAgICAgICAgICAgICAgIHJpMCArPSBsaHMuZ2V0KGosMCkgKiByaHNfaWo7CisgICAgICAgICAgICAgICAgcmkxICs9IGxocy5nZXQoaiwxKSAqIHJoc19pajsKKyAgICAgICAgICAgICAgICByaTIgKz0gbGhzLmdldChqLDIpICogcmhzX2lqOworICAgICAgICAgICAgICAgIHJpMyArPSBsaHMuZ2V0KGosMykgKiByaHNfaWo7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXQoaSwwLCByaTApOworICAgICAgICAgICAgc2V0KGksMSwgcmkxKTsKKyAgICAgICAgICAgIHNldChpLDIsIHJpMik7CisgICAgICAgICAgICBzZXQoaSwzLCByaTMpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXQgY3VycmVudCB2YWx1ZXMgdG8gYmUgYW4gb3J0aG9ncmFwaGljIHByb2plY3Rpb24gbWF0cml4CisgICAgKgorICAgICogQHBhcmFtIGwgbG9jYXRpb24gb2YgdGhlIGxlZnQgdmVydGljYWwgY2xpcHBpbmcgcGxhbmUKKyAgICAqIEBwYXJhbSByIGxvY2F0aW9uIG9mIHRoZSByaWdodCB2ZXJ0aWNhbCBjbGlwcGluZyBwbGFuZQorICAgICogQHBhcmFtIGIgbG9jYXRpb24gb2YgdGhlIGJvdHRvbSBob3Jpem9udGFsIGNsaXBwaW5nIHBsYW5lCisgICAgKiBAcGFyYW0gdCBsb2NhdGlvbiBvZiB0aGUgdG9wIGhvcml6b250YWwgY2xpcHBpbmcgcGxhbmUKKyAgICAqIEBwYXJhbSBuIGxvY2F0aW9uIG9mIHRoZSBuZWFyIGNsaXBwaW5nIHBsYW5lCisgICAgKiBAcGFyYW0gZiBsb2NhdGlvbiBvZiB0aGUgZmFyIGNsaXBwaW5nIHBsYW5lCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkT3J0aG8oZmxvYXQgbCwgZmxvYXQgciwgZmxvYXQgYiwgZmxvYXQgdCwgZmxvYXQgbiwgZmxvYXQgZikgeworICAgICAgICBsb2FkSWRlbnRpdHkoKTsKKyAgICAgICAgbU1hdFswXSA9IDIgLyAociAtIGwpOworICAgICAgICBtTWF0WzVdID0gMiAvICh0IC0gYik7CisgICAgICAgIG1NYXRbMTBdPSAtMiAvIChmIC0gbik7CisgICAgICAgIG1NYXRbMTJdPSAtKHIgKyBsKSAvIChyIC0gbCk7CisgICAgICAgIG1NYXRbMTNdPSAtKHQgKyBiKSAvICh0IC0gYik7CisgICAgICAgIG1NYXRbMTRdPSAtKGYgKyBuKSAvIChmIC0gbik7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXQgY3VycmVudCB2YWx1ZXMgdG8gYmUgYW4gb3J0aG9ncmFwaGljIHByb2plY3Rpb24gbWF0cml4CisgICAgKiB3aXRoIHRoZSByaWdodCBhbmQgYm90dG9tIGNsaXBwaW5nIHBsYW5lcyBzZXQgdG8gdGhlIGdpdmVuCisgICAgKiB2YWx1ZXMuIExlZnQgYW5kIHRvcCBjbGlwcGluZyBwbGFuZXMgYXJlIHNldCB0byAwLiBOZWFyIGFuZAorICAgICogZmFyIGFyZSBzZXQgdG8gLTEsIDEgcmVzcGVjdGl2ZWx5CisgICAgKgorICAgICogQHBhcmFtIHcgbG9jYXRpb24gb2YgdGhlIHJpZ2h0IHZlcnRpY2FsIGNsaXBwaW5nIHBsYW5lCisgICAgKiBAcGFyYW0gaCBsb2NhdGlvbiBvZiB0aGUgYm90dG9tIGhvcml6b250YWwgY2xpcHBpbmcgcGxhbmUKKyAgICAqCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkT3J0aG9XaW5kb3coaW50IHcsIGludCBoKSB7CisgICAgICAgIGxvYWRPcnRobygwLHcsIGgsMCwgLTEsMSk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIGN1cnJlbnQgdmFsdWVzIHRvIGJlIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXgKKyAgICAqCisgICAgKiBAcGFyYW0gbCBsb2NhdGlvbiBvZiB0aGUgbGVmdCB2ZXJ0aWNhbCBjbGlwcGluZyBwbGFuZQorICAgICogQHBhcmFtIHIgbG9jYXRpb24gb2YgdGhlIHJpZ2h0IHZlcnRpY2FsIGNsaXBwaW5nIHBsYW5lCisgICAgKiBAcGFyYW0gYiBsb2NhdGlvbiBvZiB0aGUgYm90dG9tIGhvcml6b250YWwgY2xpcHBpbmcgcGxhbmUKKyAgICAqIEBwYXJhbSB0IGxvY2F0aW9uIG9mIHRoZSB0b3AgaG9yaXpvbnRhbCBjbGlwcGluZyBwbGFuZQorICAgICogQHBhcmFtIG4gbG9jYXRpb24gb2YgdGhlIG5lYXIgY2xpcHBpbmcgcGxhbmUsIG11c3QgYmUgcG9zaXRpdmUKKyAgICAqIEBwYXJhbSBmIGxvY2F0aW9uIG9mIHRoZSBmYXIgY2xpcHBpbmcgcGxhbmUsIG11c3QgYmUgcG9zaXRpdmUKKyAgICAqCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkRnJ1c3R1bShmbG9hdCBsLCBmbG9hdCByLCBmbG9hdCBiLCBmbG9hdCB0LCBmbG9hdCBuLCBmbG9hdCBmKSB7CisgICAgICAgIGxvYWRJZGVudGl0eSgpOworICAgICAgICBtTWF0WzBdID0gMiAqIG4gLyAociAtIGwpOworICAgICAgICBtTWF0WzVdID0gMiAqIG4gLyAodCAtIGIpOworICAgICAgICBtTWF0WzhdID0gKHIgKyBsKSAvIChyIC0gbCk7CisgICAgICAgIG1NYXRbOV0gPSAodCArIGIpIC8gKHQgLSBiKTsKKyAgICAgICAgbU1hdFsxMF09IC0oZiArIG4pIC8gKGYgLSBuKTsKKyAgICAgICAgbU1hdFsxMV09IC0xOworICAgICAgICBtTWF0WzE0XT0gLTIqZipuIC8gKGYgLSBuKTsKKyAgICAgICAgbU1hdFsxNV09IDA7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIGN1cnJlbnQgdmFsdWVzIHRvIGJlIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXgKKyAgICAqCisgICAgKiBAcGFyYW0gZm92eSB2ZXJ0aWNhbCBmaWVsZCBvZiB2aWV3IGFuZ2xlIGluIGRlZ3JlZXMKKyAgICAqIEBwYXJhbSBhc3BlY3QgYXNwZWN0IHJhdGlvIG9mIHRoZSBzY3JlZW4KKyAgICAqIEBwYXJhbSBuZWFyIG5lYXIgY2xpcGluZyBwbGFuZSwgbXVzdCBiZSBwb3NpdGl2ZQorICAgICogQHBhcmFtIGZhciBmYXIgY2xpcHBpbmcgcGxhbmUsIG11c3QgYmUgcG9zaXRpdmUKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIGxvYWRQZXJzcGVjdGl2ZShmbG9hdCBmb3Z5LCBmbG9hdCBhc3BlY3QsIGZsb2F0IG5lYXIsIGZsb2F0IGZhcikgeworICAgICAgICBmbG9hdCB0b3AgPSBuZWFyICogKGZsb2F0KU1hdGgudGFuKChmbG9hdCkgKGZvdnkgKiBNYXRoLlBJIC8gMzYwLjBmKSk7CisgICAgICAgIGZsb2F0IGJvdHRvbSA9IC10b3A7CisgICAgICAgIGZsb2F0IGxlZnQgPSBib3R0b20gKiBhc3BlY3Q7CisgICAgICAgIGZsb2F0IHJpZ2h0ID0gdG9wICogYXNwZWN0OworICAgICAgICBsb2FkRnJ1c3R1bShsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcik7CisgICAgfQorCisgICAgLyoqCisgICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2V0IHRoZSBjdXJyZW50IHZhbHVlcyB0byBhIHBlcnNwZWN0aXZlCisgICAgKiBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIGFzcGVjdCByYXRpbyBkZWZpbmVkIGJ5IHRoZSBwYXJhbWV0ZXJzCisgICAgKiBhbmQgKG5lYXIsIGZhciksIChib3R0b20sIHRvcCkgbWFwcGluZyB0byAoLTEsIDEpIGF0IHogPSAwCisgICAgKgorICAgICogQHBhcmFtIHcgc2NyZWVuIHdpZHRoCisgICAgKiBAcGFyYW0gaCBzY3JlZW4gaGVpZ2h0CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkUHJvamVjdGlvbk5vcm1hbGl6ZWQoaW50IHcsIGludCBoKSB7CisgICAgICAgIC8vIHJhbmdlIC0xLDEgaW4gdGhlIG5hcnJvdyBheGlzIGF0IHogPSAwLgorICAgICAgICBNYXRyaXg0ZiBtMSA9IG5ldyBNYXRyaXg0ZigpOworICAgICAgICBNYXRyaXg0ZiBtMiA9IG5ldyBNYXRyaXg0ZigpOworCisgICAgICAgIGlmKHcgPiBoKSB7CisgICAgICAgICAgICBmbG9hdCBhc3BlY3QgPSAoKGZsb2F0KXcpIC8gaDsKKyAgICAgICAgICAgIG0xLmxvYWRGcnVzdHVtKC1hc3BlY3QsYXNwZWN0LCAgLTEsMSwgIDEsMTAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZsb2F0IGFzcGVjdCA9ICgoZmxvYXQpaCkgLyB3OworICAgICAgICAgICAgbTEubG9hZEZydXN0dW0oLTEsMSwgLWFzcGVjdCxhc3BlY3QsIDEsMTAwKTsKKyAgICAgICAgfQorCisgICAgICAgIG0yLmxvYWRSb3RhdGUoMTgwLCAwLCAxLCAwKTsKKyAgICAgICAgbTEubG9hZE11bHRpcGx5KG0xLCBtMik7CisKKyAgICAgICAgbTIubG9hZFNjYWxlKC0yLCAyLCAxKTsKKyAgICAgICAgbTEubG9hZE11bHRpcGx5KG0xLCBtMik7CisKKyAgICAgICAgbTIubG9hZFRyYW5zbGF0ZSgwLCAwLCAyKTsKKyAgICAgICAgbTEubG9hZE11bHRpcGx5KG0xLCBtMik7CisKKyAgICAgICAgbG9hZChtMSk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBQb3N0LW11bHRpcGxpZXMgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IGEgZ2l2ZW4gcGFyYW1ldGVyCisgICAgKgorICAgICogQHBhcmFtIHJocyByaWdodCBoYW5kIHNpZGUgdG8gbXVsdGlwbHkgYnkKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIG11bHRpcGx5KE1hdHJpeDRmIHJocykgeworICAgICAgICBNYXRyaXg0ZiB0bXAgPSBuZXcgTWF0cml4NGYoKTsKKyAgICAgICAgdG1wLmxvYWRNdWx0aXBseSh0aGlzLCByaHMpOworICAgICAgICBsb2FkKHRtcCk7CisgICAgfQorICAgIC8qKgorICAgICogTW9kaWZpZXMgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHBvc3QtbXVsdGlwbHlpbmcgaXQgd2l0aCBhCisgICAgKiByb3RhdGlvbiBtYXRyaXggb2YgY2VydGFpbiBhbmdsZSBhYm91dCBhIGdpdmVuIGF4aXMKKyAgICAqCisgICAgKiBAcGFyYW0gcm90IGFuZ2xlIG9mIHJvdGF0aW9uCisgICAgKiBAcGFyYW0geCByb3RhdGlvbiBheGlzIHgKKyAgICAqIEBwYXJhbSB5IHJvdGF0aW9uIGF4aXMgeQorICAgICogQHBhcmFtIHogcm90YXRpb24gYXhpcyB6CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByb3RhdGUoZmxvYXQgcm90LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7CisgICAgICAgIE1hdHJpeDRmIHRtcCA9IG5ldyBNYXRyaXg0ZigpOworICAgICAgICB0bXAubG9hZFJvdGF0ZShyb3QsIHgsIHksIHopOworICAgICAgICBtdWx0aXBseSh0bXApOworICAgIH0KKworICAgIC8qKgorICAgICogTW9kaWZpZXMgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHBvc3QtbXVsdGlwbHlpbmcgaXQgd2l0aCBhCisgICAgKiBzY2FsZSBtYXRyaXggb2YgZ2l2ZW4gZGltZW5zaW9ucworICAgICoKKyAgICAqIEBwYXJhbSB4IHNjYWxlIGNvbXBvbmVudCB4CisgICAgKiBAcGFyYW0geSBzY2FsZSBjb21wb25lbnQgeQorICAgICogQHBhcmFtIHogc2NhbGUgY29tcG9uZW50IHoKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHNjYWxlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsKKyAgICAgICAgTWF0cml4NGYgdG1wID0gbmV3IE1hdHJpeDRmKCk7CisgICAgICAgIHRtcC5sb2FkU2NhbGUoeCwgeSwgeik7CisgICAgICAgIG11bHRpcGx5KHRtcCk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBNb2RpZmllcyB0aGUgY3VycmVudCBtYXRyaXggYnkgcG9zdC1tdWx0aXBseWluZyBpdCB3aXRoIGEKKyAgICAqIHRyYW5zbGF0aW9uIG1hdHJpeCBvZiBnaXZlbiBkaW1lbnNpb25zCisgICAgKgorICAgICogQHBhcmFtIHggdHJhbnNsYXRpb24gY29tcG9uZW50IHgKKyAgICAqIEBwYXJhbSB5IHRyYW5zbGF0aW9uIGNvbXBvbmVudCB5CisgICAgKiBAcGFyYW0geiB0cmFuc2xhdGlvbiBjb21wb25lbnQgegorICAgICovCisgICAgcHVibGljIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsKKyAgICAgICAgTWF0cml4NGYgdG1wID0gbmV3IE1hdHJpeDRmKCk7CisgICAgICAgIHRtcC5sb2FkVHJhbnNsYXRlKHgsIHksIHopOworICAgICAgICBtdWx0aXBseSh0bXApOworICAgIH0KKyAgICBwcml2YXRlIGZsb2F0IGNvbXB1dGVDb2ZhY3RvcihpbnQgaSwgaW50IGopIHsKKyAgICAgICAgaW50IGMwID0gKGkrMSkgJSA0OworICAgICAgICBpbnQgYzEgPSAoaSsyKSAlIDQ7CisgICAgICAgIGludCBjMiA9IChpKzMpICUgNDsKKyAgICAgICAgaW50IHIwID0gKGorMSkgJSA0OworICAgICAgICBpbnQgcjEgPSAoaisyKSAlIDQ7CisgICAgICAgIGludCByMiA9IChqKzMpICUgNDsKKworICAgICAgICBmbG9hdCBtaW5vciA9IChtTWF0W2MwICsgNCpyMF0gKiAobU1hdFtjMSArIDQqcjFdICogbU1hdFtjMiArIDQqcjJdIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1hdFtjMSArIDQqcjJdICogbU1hdFtjMiArIDQqcjFdKSkKKyAgICAgICAgICAgICAgICAgICAgIC0gKG1NYXRbYzAgKyA0KnIxXSAqIChtTWF0W2MxICsgNCpyMF0gKiBtTWF0W2MyICsgNCpyMl0gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWF0W2MxICsgNCpyMl0gKiBtTWF0W2MyICsgNCpyMF0pKQorICAgICAgICAgICAgICAgICAgICAgKyAobU1hdFtjMCArIDQqcjJdICogKG1NYXRbYzEgKyA0KnIwXSAqIG1NYXRbYzIgKyA0KnIxXSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NYXRbYzEgKyA0KnIxXSAqIG1NYXRbYzIgKyA0KnIwXSkpOworCisgICAgICAgIGZsb2F0IGNvZmFjdG9yID0gKChpK2opICYgMSkgIT0gMCA/IC1taW5vciA6IG1pbm9yOworICAgICAgICByZXR1cm4gY29mYWN0b3I7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIHRoZSBjdXJyZW50IG1hdHJpeCB0byBpdHMgaW52ZXJzZQorICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaW52ZXJzZSgpIHsKKworICAgICAgICBNYXRyaXg0ZiByZXN1bHQgPSBuZXcgTWF0cml4NGYoKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyArK2opIHsKKyAgICAgICAgICAgICAgICByZXN1bHQubU1hdFs0KmkgKyBqXSA9IGNvbXB1dGVDb2ZhY3RvcihpLCBqKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIERvdCBwcm9kdWN0IG9mIDB0aCBjb2x1bW4gb2Ygc291cmNlIGFuZCAwdGggcm93IG9mIHJlc3VsdAorICAgICAgICBmbG9hdCBkZXQgPSBtTWF0WzBdKnJlc3VsdC5tTWF0WzBdICsgbU1hdFs0XSpyZXN1bHQubU1hdFsxXSArCisgICAgICAgICAgICAgICAgICAgICBtTWF0WzhdKnJlc3VsdC5tTWF0WzJdICsgbU1hdFsxMl0qcmVzdWx0Lm1NYXRbM107CisKKyAgICAgICAgaWYgKE1hdGguYWJzKGRldCkgPCAxZS02KSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBkZXQgPSAxLjBmIC8gZGV0OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyArK2kpIHsKKyAgICAgICAgICAgIG1NYXRbaV0gPSByZXN1bHQubU1hdFtpXSAqIGRldDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICogU2V0cyB0aGUgY3VycmVudCBtYXRyaXggdG8gaXRzIGludmVyc2UgdHJhbnNwb3NlCisgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpbnZlcnNlVHJhbnNwb3NlKCkgeworCisgICAgICAgIE1hdHJpeDRmIHJlc3VsdCA9IG5ldyBNYXRyaXg0ZigpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7ICsraikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5tTWF0WzQqaiArIGldID0gY29tcHV0ZUNvZmFjdG9yKGksIGopOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgZGV0ID0gbU1hdFswXSpyZXN1bHQubU1hdFswXSArIG1NYXRbNF0qcmVzdWx0Lm1NYXRbNF0gKworICAgICAgICAgICAgICAgICAgICAgbU1hdFs4XSpyZXN1bHQubU1hdFs4XSArIG1NYXRbMTJdKnJlc3VsdC5tTWF0WzEyXTsKKworICAgICAgICBpZiAoTWF0aC5hYnMoZGV0KSA8IDFlLTYpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGRldCA9IDEuMGYgLyBkZXQ7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7ICsraSkgeworICAgICAgICAgICAgbU1hdFtpXSA9IHJlc3VsdC5tTWF0W2ldICogZGV0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTZXRzIHRoZSBjdXJyZW50IG1hdHJpeCB0byBpdHMgdHJhbnNwb3NlCisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0cmFuc3Bvc2UoKSB7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGZvcihpbnQgaiA9IGkgKyAxOyBqIDwgNDsgKytqKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgdGVtcCA9IG1NYXRbaSo0ICsgal07CisgICAgICAgICAgICAgICAgbU1hdFtpKjQgKyBqXSA9IG1NYXRbaio0ICsgaV07CisgICAgICAgICAgICAgICAgbU1hdFtqKjQgKyBpXSA9IHRlbXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaW5hbCBmbG9hdFtdIG1NYXQ7Cit9CmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2guamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZWNjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2guamF2YQpAQCAtMCwwICsxLDgyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKKworaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7CisKKy8qKgorICogQGhpZGUKKyAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICogPHA+VGhpcyBjbGFzcyBpcyBhIGNvbnRhaW5lciBmb3IgZ2VvbWV0cmljIGRhdGEgZGlzcGxheWVkIHdpdGgKKyAqIFJlbmRlclNjcmlwdC4gSW50ZXJuYWxseSwgYSBtZXNoIGlzIGEgY29sbGVjdGlvbiBvZiBhbGxvY2F0aW9ucyB0aGF0CisgKiByZXByZXNlbnQgdmVydGV4IGRhdGEgKHBvc2l0aW9ucywgbm9ybWFscywgdGV4dHVyZQorICogY29vcmRpbmF0ZXMpIGFuZCBpbmRleCBkYXRhIHN1Y2ggYXMgdHJpYW5nbGVzIGFuZCBsaW5lcy4gPC9wPgorICogPHA+CisgKiBWZXJ0ZXggZGF0YSBjb3VsZCBlaXRoZXIgYmUgaW50ZXJsZWF2ZWQgd2l0aGluIG9uZQorICogYWxsb2NhdGlvbiB0aGF0IGlzIHByb3ZpZGVkIHNlcGFyYXRlbHksIGFzIG11bHRpcGxlIGFsbG9jYXRpb24KKyAqIG9iamVjdHMsIG9yIGRvbmUgYXMgYSBjb21iaW5hdGlvbiBvZiBib3RoLiBXaGVuIGEKKyAqIHZlcnRleCBjaGFubmVsIG5hbWUgbWF0Y2hlcyBhbiBpbnB1dCBpbiB0aGUgdmVydGV4IHByb2dyYW0sCisgKiBSZW5kZXJTY3JpcHQgYXV0b21hdGljYWxseSBjb25uZWN0cyB0aGUgdHdvIHRvZ2V0aGVyLgorICogPC9wPgorICogPHA+CisgKiAgUGFydHMgb2YgdGhlIG1lc2ggY2FuIGJlIHJlbmRlcmVkIHdpdGggZWl0aGVyIGV4cGxpY2l0CisgKiAgaW5kZXggc2V0cyBvciBwcmltaXRpdmUgdHlwZXMuCisgKiA8L3A+CisgKiovCitwdWJsaWMgY2xhc3MgTWVzaCBleHRlbmRzIEJhc2VPYmogeworCisgICAgLyoqCisgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAqIERlc2NyaWJlcyB0aGUgd2F5IG1lc2ggdmVydGV4IGRhdGEgaXMgaW50ZXJwcmV0ZWQgd2hlbiByZW5kZXJpbmcKKyAgICAqCisgICAgKiovCisgICAgcHVibGljIGVudW0gUHJpbWl0aXZlIHsKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogVmVydGV4IGRhdGEgd2lsbCBiZSByZW5kZXJlZCBhcyBhIHNlcmllcyBvZiBwb2ludHMKKyAgICAgICAgKi8KKyAgICAgICAgUE9JTlQgKDApLAorICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBWZXJ0ZXggcGFpcnMgd2lsbCBiZSByZW5kZXJlZCBhcyBsaW5lcworICAgICAgICAqLworICAgICAgICBMSU5FICgxKSwKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogVmVydGV4IGRhdGEgd2lsbCBiZSByZW5kZXJlZCBhcyBhIGNvbm5lY3RlZCBsaW5lIHN0cmlwCisgICAgICAgICovCisgICAgICAgIExJTkVfU1RSSVAgKDIpLAorICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBWZXJ0aWNlcyB3aWxsIGJlIHJlbmRlcmVkIGFzIGluZGl2aWR1YWwgdHJpYW5nbGVzCisgICAgICAgICovCisgICAgICAgIFRSSUFOR0xFICgzKSwKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogVmVydGljZXMgd2lsbCBiZSByZW5kZXJlZCBhcyBhIGNvbm5lY3RlZCB0cmlhbmdsZSBzdHJpcAorICAgICAgICAqIGRlZmluZWQgYnkgdGhlIGZpcnN0IHRocmVlIHZlcnRpY2VzIHdpdGggZWFjaCBhZGRpdGlvbmFsCisgICAgICAgICogdHJpYW5nbGUgZGVmaW5lZCBieSBhIG5ldyB2ZXJ0ZXgKKyAgICAgICAgKi8KKyAgICAgICAgVFJJQU5HTEVfU1RSSVAgKDQpLAorICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBWZXJ0aWNlcyB3aWxsIGJlIHJlbmRlcmVkIGFzIGEgc2VxdWVuY2Ugb2YgdHJpYW5nbGVzIHRoYXQgYWxsCisgICAgICAgICogc2hhcmUgZmlyc3QgdmVydGV4IGFzIHRoZSBvcmlnaW4KKyAgICAgICAgKi8KKyAgICAgICAgVFJJQU5HTEVfRkFOICg1KTsKKworICAgICAgICBpbnQgbUlEOworICAgICAgICBQcmltaXRpdmUoaW50IGlkKSB7CisgICAgICAgICAgICBtSUQgPSBpZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFsbG9jYXRpb25bXSBtVmVydGV4QnVmZmVyczsKKyAgICBBbGxvY2F0aW9uW10gbUluZGV4QnVmZmVyczsKKyAgICBQcmltaXRpdmVbXSBtUHJpbWl0aXZlczsKKworICAgIE1lc2gobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIHN1cGVyKGlkLCBycyk7CisgICAgfQorCisgICAgLyoqCisgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAqIEByZXR1cm4gbnVtYmVyIG9mIGFsbG9jYXRpb25zIGNvbnRhaW5pbmcgdmVydGV4IGRhdGEKKyAgICAqCisgICAgKiovCisgICAgcHVibGljIGludCBnZXRWZXJ0ZXhBbGxvY2F0aW9uQ291bnQoKSB7CisgICAgICAgIGlmKG1WZXJ0ZXhCdWZmZXJzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtVmVydGV4QnVmZmVycy5sZW5ndGg7CisgICAgfQorICAgIC8qKgorICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgKiBAcGFyYW0gc2xvdCBpbmRleCBpbiB0aGUgbGlzdCBvZiBhbGxvY2F0aW9ucyB0byByZXR1cm4KKyAgICAqIEByZXR1cm4gdmVydGV4IGRhdGEgYWxsb2NhdGlvbiBhdCB0aGUgZ2l2ZW4gaW5kZXgKKyAgICAqCisgICAgKiovCisgICAgcHVibGljIEFsbG9jYXRpb24gZ2V0VmVydGV4QWxsb2NhdGlvbihpbnQgc2xvdCkgeworICAgICAgICByZXR1cm4gbVZlcnRleEJ1ZmZlcnNbc2xvdF07CisgICAgfQorCisgICAgLyoqCisgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAqIEByZXR1cm4gbnVtYmVyIG9mIHByaW1pdGl2ZXMgb3IgaW5kZXggc2V0cyBpbiB0aGUgbWVzaAorICAgICoKKyAgICAqKi8KKyAgICBwdWJsaWMgaW50IGdldFByaW1pdGl2ZUNvdW50KCkgeworICAgICAgICBpZihtSW5kZXhCdWZmZXJzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtSW5kZXhCdWZmZXJzLmxlbmd0aDsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICogQHBhcmFtIHNsb3QgbG9jYXRvbiB3aXRoaW4gdGhlIGxpc3Qgb2YgaW5kZXggc2V0IGFsbG9jYXRpb24KKyAgICAqIEByZXR1cm4gYWxsb2NhdGlvbiBjb250YWluaW5nIHByaW10aXZlIGluZGV4IGRhdGEgb3IgbnVsbCBpZgorICAgICogICAgICAgICB0aGUgaW5kZXggZGF0YSBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHkKKyAgICAqCisgICAgKiovCisgICAgcHVibGljIEFsbG9jYXRpb24gZ2V0SW5kZXhTZXRBbGxvY2F0aW9uKGludCBzbG90KSB7CisgICAgICAgIHJldHVybiBtSW5kZXhCdWZmZXJzW3Nsb3RdOworICAgIH0KKyAgICAvKioKKyAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICogQHBhcmFtIHNsb3QgbG9jYWl0b24gd2l0aGluIHRoZSBsaXN0IG9mIGluZGV4IHNldCBwcmltaXRpdmVzCisgICAgKiBAcmV0dXJuIGluZGV4IHNldCBwcmltaXRpdmUgdHlwZQorICAgICoKKyAgICAqKi8KKyAgICBwdWJsaWMgUHJpbWl0aXZlIGdldFByaW1pdGl2ZShpbnQgc2xvdCkgeworICAgICAgICByZXR1cm4gbVByaW1pdGl2ZXNbc2xvdF07CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCB1cGRhdGVGcm9tTmF0aXZlKCkgeworICAgICAgICBzdXBlci51cGRhdGVGcm9tTmF0aXZlKCk7CisgICAgICAgIGludCB2dHhDb3VudCA9IG1SUy5uTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50KGdldElEKG1SUykpOworICAgICAgICBpbnQgaWR4Q291bnQgPSBtUlMubk1lc2hHZXRJbmRleENvdW50KGdldElEKG1SUykpOworCisgICAgICAgIGludFtdIHZ0eElEcyA9IG5ldyBpbnRbdnR4Q291bnRdOworICAgICAgICBpbnRbXSBpZHhJRHMgPSBuZXcgaW50W2lkeENvdW50XTsKKyAgICAgICAgaW50W10gcHJpbWl0aXZlcyA9IG5ldyBpbnRbaWR4Q291bnRdOworCisgICAgICAgIG1SUy5uTWVzaEdldFZlcnRpY2VzKGdldElEKG1SUyksIHZ0eElEcywgdnR4Q291bnQpOworICAgICAgICBtUlMubk1lc2hHZXRJbmRpY2VzKGdldElEKG1SUyksIGlkeElEcywgcHJpbWl0aXZlcywgaWR4Q291bnQpOworCisgICAgICAgIG1WZXJ0ZXhCdWZmZXJzID0gbmV3IEFsbG9jYXRpb25bdnR4Q291bnRdOworICAgICAgICBtSW5kZXhCdWZmZXJzID0gbmV3IEFsbG9jYXRpb25baWR4Q291bnRdOworICAgICAgICBtUHJpbWl0aXZlcyA9IG5ldyBQcmltaXRpdmVbaWR4Q291bnRdOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB2dHhDb3VudDsgaSArKykgeworICAgICAgICAgICAgaWYodnR4SURzW2ldICE9IDApIHsKKyAgICAgICAgICAgICAgICBtVmVydGV4QnVmZmVyc1tpXSA9IG5ldyBBbGxvY2F0aW9uKHZ0eElEc1tpXSwgbVJTLCBudWxsLCBBbGxvY2F0aW9uLlVTQUdFX1NDUklQVCk7CisgICAgICAgICAgICAgICAgbVZlcnRleEJ1ZmZlcnNbaV0udXBkYXRlRnJvbU5hdGl2ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGlkeENvdW50OyBpICsrKSB7CisgICAgICAgICAgICBpZihpZHhJRHNbaV0gIT0gMCkgeworICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlcnNbaV0gPSBuZXcgQWxsb2NhdGlvbihpZHhJRHNbaV0sIG1SUywgbnVsbCwgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOworICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlcnNbaV0udXBkYXRlRnJvbU5hdGl2ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVByaW1pdGl2ZXNbaV0gPSBQcmltaXRpdmUudmFsdWVzKClbcHJpbWl0aXZlc1tpXV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICogTWVzaCBidWlsZGVyIG9iamVjdC4gSXQgc3RhcnRzIGVtcHR5IGFuZCByZXF1aXJlcyB5b3UgdG8KKyAgICAqIGFkZCB0aGUgdHlwZXMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSB2ZXJ0ZXggYW5kIGluZGV4CisgICAgKiBhbGxvY2F0aW9ucy4KKyAgICAqCisgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgeworICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOworICAgICAgICBpbnQgbVVzYWdlOworCisgICAgICAgIGNsYXNzIEVudHJ5IHsKKyAgICAgICAgICAgIFR5cGUgdDsKKyAgICAgICAgICAgIEVsZW1lbnQgZTsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgUHJpbWl0aXZlIHByaW07CisgICAgICAgICAgICBpbnQgdXNhZ2U7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbVZlcnRleFR5cGVDb3VudDsKKyAgICAgICAgRW50cnlbXSBtVmVydGV4VHlwZXM7CisgICAgICAgIFZlY3RvciBtSW5kZXhUeXBlczsKKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBDcmVhdGVzIGJ1aWxkZXIgb2JqZWN0CisgICAgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIG1lc2ggd2lsbCBiZWxvbmcuCisgICAgICAgICogQHBhcmFtIHVzYWdlIHNwZWNpZmllcyBob3cgdGhlIG1lc2ggYWxsb2NhdGlvbnMgYXJlIHRvIGJlCisgICAgICAgICogICAgICAgICAgICAgIGhhbmRsZWQsIHdoZXRoZXIgdGhleSBuZWVkIHRvIGJlIHVwbG9hZGVkIHRvIGEKKyAgICAgICAgKiAgICAgICAgICAgICAgYnVmZmVyIG9uIHRoZSBncHUsIG1haW50YWluIGEgY3B1IGNvcHksIGV0YworICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMsIGludCB1c2FnZSkgeworICAgICAgICAgICAgbVJTID0gcnM7CisgICAgICAgICAgICBtVXNhZ2UgPSB1c2FnZTsKKyAgICAgICAgICAgIG1WZXJ0ZXhUeXBlQ291bnQgPSAwOworICAgICAgICAgICAgbVZlcnRleFR5cGVzID0gbmV3IEVudHJ5WzE2XTsKKyAgICAgICAgICAgIG1JbmRleFR5cGVzID0gbmV3IFZlY3RvcigpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogQHJldHVybiBpbnRlcm5hbCBpbmRleCBvZiB0aGUgbGFzdCB2ZXJ0ZXggYnVmZmVyIHR5cGUgYWRkZWQgdG8KKyAgICAgICAgKiAgICAgICAgIGJ1aWxkZXIKKyAgICAgICAgKiovCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0Q3VycmVudFZlcnRleFR5cGVJbmRleCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtVmVydGV4VHlwZUNvdW50IC0gMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIEByZXR1cm4gaW50ZXJuYWwgaW5kZXggb2YgdGhlIGxhc3QgaW5kZXggc2V0IGFkZGVkIHRvIHRoZQorICAgICAgICAqICAgICAgICAgYnVpbGRlcgorICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIGludCBnZXRDdXJyZW50SW5kZXhTZXRJbmRleCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtSW5kZXhUeXBlcy5zaXplKCkgLSAxOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogQWRkcyBhIHZlcnRleCBkYXRhIHR5cGUgdG8gdGhlIGJ1aWxkZXIgb2JqZWN0CisgICAgICAgICoKKyAgICAgICAgKiBAcGFyYW0gdCB0eXBlIG9mIHRoZSB2ZXJ0ZXggZGF0YSBhbGxvY2F0aW9uIHRvIGJlIGNyZWF0ZWQKKyAgICAgICAgKgorICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkVmVydGV4VHlwZShUeXBlIHQpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24geworICAgICAgICAgICAgaWYgKG1WZXJ0ZXhUeXBlQ291bnQgPj0gbVZlcnRleFR5cGVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk1heCB2ZXJ0ZXggdHlwZXMgZXhjZWVkZWQuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1WZXJ0ZXhUeXBlc1ttVmVydGV4VHlwZUNvdW50XSA9IG5ldyBFbnRyeSgpOworICAgICAgICAgICAgbVZlcnRleFR5cGVzW21WZXJ0ZXhUeXBlQ291bnRdLnQgPSB0OworICAgICAgICAgICAgbVZlcnRleFR5cGVzW21WZXJ0ZXhUeXBlQ291bnRdLmUgPSBudWxsOworICAgICAgICAgICAgbVZlcnRleFR5cGVDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBBZGRzIGEgdmVydGV4IGRhdGEgdHlwZSB0byB0aGUgYnVpbGRlciBvYmplY3QKKyAgICAgICAgKgorICAgICAgICAqIEBwYXJhbSBlIGVsZW1lbnQgZGVzY3JpYmluZyB0aGUgdmVydGV4IGRhdGEgbGF5b3V0CisgICAgICAgICogQHBhcmFtIHNpemUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBidWZmZXIKKyAgICAgICAgKgorICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkVmVydGV4VHlwZShFbGVtZW50IGUsIGludCBzaXplKSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGlmIChtVmVydGV4VHlwZUNvdW50ID49IG1WZXJ0ZXhUeXBlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJNYXggdmVydGV4IHR5cGVzIGV4Y2VlZGVkLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtVmVydGV4VHlwZXNbbVZlcnRleFR5cGVDb3VudF0gPSBuZXcgRW50cnkoKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhUeXBlc1ttVmVydGV4VHlwZUNvdW50XS50ID0gbnVsbDsKKyAgICAgICAgICAgIG1WZXJ0ZXhUeXBlc1ttVmVydGV4VHlwZUNvdW50XS5lID0gZTsKKyAgICAgICAgICAgIG1WZXJ0ZXhUeXBlc1ttVmVydGV4VHlwZUNvdW50XS5zaXplID0gc2l6ZTsKKyAgICAgICAgICAgIG1WZXJ0ZXhUeXBlQ291bnQrKzsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogQWRkcyBhbiBpbmRleCBzZXQgZGF0YSB0eXBlIHRvIHRoZSBidWlsZGVyIG9iamVjdAorICAgICAgICAqCisgICAgICAgICogQHBhcmFtIHQgdHlwZSBvZiB0aGUgaW5kZXggc2V0IGRhdGEsIGNvdWxkIGJlIG51bGwKKyAgICAgICAgKiBAcGFyYW0gcCBwcmltaXRpdmUgdHlwZQorICAgICAgICAqCisgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICoqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRJbmRleFNldFR5cGUoVHlwZSB0LCBQcmltaXRpdmUgcCkgeworICAgICAgICAgICAgRW50cnkgaW5kZXhUeXBlID0gbmV3IEVudHJ5KCk7CisgICAgICAgICAgICBpbmRleFR5cGUudCA9IHQ7CisgICAgICAgICAgICBpbmRleFR5cGUuZSA9IG51bGw7CisgICAgICAgICAgICBpbmRleFR5cGUuc2l6ZSA9IDA7CisgICAgICAgICAgICBpbmRleFR5cGUucHJpbSA9IHA7CisgICAgICAgICAgICBtSW5kZXhUeXBlcy5hZGRFbGVtZW50KGluZGV4VHlwZSk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIEFkZHMgYW4gaW5kZXggc2V0IHByaW1pdGl2ZSB0eXBlIHRvIHRoZSBidWlsZGVyIG9iamVjdAorICAgICAgICAqCisgICAgICAgICogQHBhcmFtIHAgcHJpbWl0aXZlIHR5cGUKKyAgICAgICAgKgorICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkSW5kZXhTZXRUeXBlKFByaW1pdGl2ZSBwKSB7CisgICAgICAgICAgICBFbnRyeSBpbmRleFR5cGUgPSBuZXcgRW50cnkoKTsKKyAgICAgICAgICAgIGluZGV4VHlwZS50ID0gbnVsbDsKKyAgICAgICAgICAgIGluZGV4VHlwZS5lID0gbnVsbDsKKyAgICAgICAgICAgIGluZGV4VHlwZS5zaXplID0gMDsKKyAgICAgICAgICAgIGluZGV4VHlwZS5wcmltID0gcDsKKyAgICAgICAgICAgIG1JbmRleFR5cGVzLmFkZEVsZW1lbnQoaW5kZXhUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogQWRkcyBhbiBpbmRleCBzZXQgZGF0YSB0eXBlIHRvIHRoZSBidWlsZGVyIG9iamVjdAorICAgICAgICAqCisgICAgICAgICogQHBhcmFtIGUgZWxlbWVudCBkZXNjcmliaW5nIHRoZSBpbmRleCBzZXQgZGF0YSBsYXlvdXQKKyAgICAgICAgKiBAcGFyYW0gc2l6ZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGJ1ZmZlcgorICAgICAgICAqIEBwYXJhbSBwIHByaW1pdGl2ZSB0eXBlCisgICAgICAgICoKKyAgICAgICAgKiBAcmV0dXJuIHRoaXMKKyAgICAgICAgKiovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZEluZGV4U2V0VHlwZShFbGVtZW50IGUsIGludCBzaXplLCBQcmltaXRpdmUgcCkgeworICAgICAgICAgICAgRW50cnkgaW5kZXhUeXBlID0gbmV3IEVudHJ5KCk7CisgICAgICAgICAgICBpbmRleFR5cGUudCA9IG51bGw7CisgICAgICAgICAgICBpbmRleFR5cGUuZSA9IGU7CisgICAgICAgICAgICBpbmRleFR5cGUuc2l6ZSA9IHNpemU7CisgICAgICAgICAgICBpbmRleFR5cGUucHJpbSA9IHA7CisgICAgICAgICAgICBtSW5kZXhUeXBlcy5hZGRFbGVtZW50KGluZGV4VHlwZSk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIFR5cGUgbmV3VHlwZShFbGVtZW50IGUsIGludCBzaXplKSB7CisgICAgICAgICAgICBUeXBlLkJ1aWxkZXIgdGIgPSBuZXcgVHlwZS5CdWlsZGVyKG1SUywgZSk7CisgICAgICAgICAgICB0Yi5zZXRYKHNpemUpOworICAgICAgICAgICAgcmV0dXJuIHRiLmNyZWF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogQ3JlYXRlIGEgTWVzaCBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYnVpbGRlcgorICAgICAgICAqCisgICAgICAgICoqLworICAgICAgICBwdWJsaWMgTWVzaCBjcmVhdGUoKSB7CisgICAgICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgICAgIGludFtdIHZ0eCA9IG5ldyBpbnRbbVZlcnRleFR5cGVDb3VudF07CisgICAgICAgICAgICBpbnRbXSBpZHggPSBuZXcgaW50W21JbmRleFR5cGVzLnNpemUoKV07CisgICAgICAgICAgICBpbnRbXSBwcmltID0gbmV3IGludFttSW5kZXhUeXBlcy5zaXplKCldOworCisgICAgICAgICAgICBBbGxvY2F0aW9uW10gdmVydGV4QnVmZmVycyA9IG5ldyBBbGxvY2F0aW9uW21WZXJ0ZXhUeXBlQ291bnRdOworICAgICAgICAgICAgQWxsb2NhdGlvbltdIGluZGV4QnVmZmVycyA9IG5ldyBBbGxvY2F0aW9uW21JbmRleFR5cGVzLnNpemUoKV07CisgICAgICAgICAgICBQcmltaXRpdmVbXSBwcmltaXRpdmVzID0gbmV3IFByaW1pdGl2ZVttSW5kZXhUeXBlcy5zaXplKCldOworCisgICAgICAgICAgICBmb3IoaW50IGN0ID0gMDsgY3QgPCBtVmVydGV4VHlwZUNvdW50OyBjdCArKykgeworICAgICAgICAgICAgICAgIEFsbG9jYXRpb24gYWxsb2MgPSBudWxsOworICAgICAgICAgICAgICAgIEVudHJ5IGVudHJ5ID0gbVZlcnRleFR5cGVzW2N0XTsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnkudCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGFsbG9jID0gQWxsb2NhdGlvbi5jcmVhdGVUeXBlZChtUlMsIGVudHJ5LnQsIG1Vc2FnZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGVudHJ5LmUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBhbGxvYyA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQobVJTLCBlbnRyeS5lLCBlbnRyeS5zaXplLCBtVXNhZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJzW2N0XSA9IGFsbG9jOworICAgICAgICAgICAgICAgIHZ0eFtjdF0gPSAoaW50KWFsbG9jLmdldElEKG1SUyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvcihpbnQgY3QgPSAwOyBjdCA8IG1JbmRleFR5cGVzLnNpemUoKTsgY3QgKyspIHsKKyAgICAgICAgICAgICAgICBBbGxvY2F0aW9uIGFsbG9jID0gbnVsbDsKKyAgICAgICAgICAgICAgICBFbnRyeSBlbnRyeSA9IChFbnRyeSltSW5kZXhUeXBlcy5lbGVtZW50QXQoY3QpOworICAgICAgICAgICAgICAgIGlmIChlbnRyeS50ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxsb2MgPSBBbGxvY2F0aW9uLmNyZWF0ZVR5cGVkKG1SUywgZW50cnkudCwgbVVzYWdlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYoZW50cnkuZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGFsbG9jID0gQWxsb2NhdGlvbi5jcmVhdGVTaXplZChtUlMsIGVudHJ5LmUsIGVudHJ5LnNpemUsIG1Vc2FnZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvbmcgYWxsb2NJRCA9IChhbGxvYyA9PSBudWxsKSA/IDAgOiBhbGxvYy5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyc1tjdF0gPSBhbGxvYzsKKyAgICAgICAgICAgICAgICBwcmltaXRpdmVzW2N0XSA9IGVudHJ5LnByaW07CisKKyAgICAgICAgICAgICAgICBpZHhbY3RdID0gKGludClhbGxvY0lEOworICAgICAgICAgICAgICAgIHByaW1bY3RdID0gZW50cnkucHJpbS5tSUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvbmcgaWQgPSBtUlMubk1lc2hDcmVhdGUodnR4LCBpZHgsIHByaW0pOworICAgICAgICAgICAgTWVzaCBuZXdNZXNoID0gbmV3IE1lc2goaWQsIG1SUyk7CisgICAgICAgICAgICBuZXdNZXNoLm1WZXJ0ZXhCdWZmZXJzID0gdmVydGV4QnVmZmVyczsKKyAgICAgICAgICAgIG5ld01lc2gubUluZGV4QnVmZmVycyA9IGluZGV4QnVmZmVyczsKKyAgICAgICAgICAgIG5ld01lc2gubVByaW1pdGl2ZXMgPSBwcmltaXRpdmVzOworCisgICAgICAgICAgICByZXR1cm4gbmV3TWVzaDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgKiBNZXNoIGJ1aWxkZXIgb2JqZWN0LiBJdCBzdGFydHMgZW1wdHkgYW5kIHJlcXVpcmVzIHRoZSB1c2VyIHRvCisgICAgKiBhZGQgYWxsIHRoZSB2ZXJ0ZXggYW5kIGluZGV4IGFsbG9jYXRpb25zIHRoYXQgY29tcHJpc2UgdGhlCisgICAgKiBtZXNoCisgICAgKgorICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBBbGxvY2F0aW9uQnVpbGRlciB7CisgICAgICAgIFJlbmRlclNjcmlwdCBtUlM7CisKKyAgICAgICAgY2xhc3MgRW50cnkgeworICAgICAgICAgICAgQWxsb2NhdGlvbiBhOworICAgICAgICAgICAgUHJpbWl0aXZlIHByaW07CisgICAgICAgIH0KKworICAgICAgICBpbnQgbVZlcnRleFR5cGVDb3VudDsKKyAgICAgICAgRW50cnlbXSBtVmVydGV4VHlwZXM7CisKKyAgICAgICAgVmVjdG9yIG1JbmRleFR5cGVzOworCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIEFsbG9jYXRpb25CdWlsZGVyKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICAgICAgbVJTID0gcnM7CisgICAgICAgICAgICBtVmVydGV4VHlwZUNvdW50ID0gMDsKKyAgICAgICAgICAgIG1WZXJ0ZXhUeXBlcyA9IG5ldyBFbnRyeVsxNl07CisgICAgICAgICAgICBtSW5kZXhUeXBlcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIEByZXR1cm4gaW50ZXJuYWwgaW5kZXggb2YgdGhlIGxhc3QgdmVydGV4IGJ1ZmZlciB0eXBlIGFkZGVkIHRvCisgICAgICAgICogICAgICAgICBidWlsZGVyCisgICAgICAgICoqLworICAgICAgICBwdWJsaWMgaW50IGdldEN1cnJlbnRWZXJ0ZXhUeXBlSW5kZXgoKSB7CisgICAgICAgICAgICByZXR1cm4gbVZlcnRleFR5cGVDb3VudCAtIDE7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBAcmV0dXJuIGludGVybmFsIGluZGV4IG9mIHRoZSBsYXN0IGluZGV4IHNldCBhZGRlZCB0byB0aGUKKyAgICAgICAgKiAgICAgICAgIGJ1aWxkZXIKKyAgICAgICAgKiovCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0Q3VycmVudEluZGV4U2V0SW5kZXgoKSB7CisgICAgICAgICAgICByZXR1cm4gbUluZGV4VHlwZXMuc2l6ZSgpIC0gMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIEFkZHMgYW4gYWxsb2NhdGlvbiBjb250YWluaW5nIHZlcnRleCBidWZmZXIgZGF0YSB0byB0aGUKKyAgICAgICAgKiBidWlsZGVyCisgICAgICAgICoKKyAgICAgICAgKiBAcGFyYW0gYSB2ZXJ0ZXggZGF0YSBhbGxvY2F0aW9uCisgICAgICAgICoKKyAgICAgICAgKiBAcmV0dXJuIHRoaXMKKyAgICAgICAgKiovCisgICAgICAgIHB1YmxpYyBBbGxvY2F0aW9uQnVpbGRlciBhZGRWZXJ0ZXhBbGxvY2F0aW9uKEFsbG9jYXRpb24gYSkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICBpZiAobVZlcnRleFR5cGVDb3VudCA+PSBtVmVydGV4VHlwZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTWF4IHZlcnRleCB0eXBlcyBleGNlZWRlZC4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVZlcnRleFR5cGVzW21WZXJ0ZXhUeXBlQ291bnRdID0gbmV3IEVudHJ5KCk7CisgICAgICAgICAgICBtVmVydGV4VHlwZXNbbVZlcnRleFR5cGVDb3VudF0uYSA9IGE7CisgICAgICAgICAgICBtVmVydGV4VHlwZUNvdW50Kys7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIEFkZHMgYW4gYWxsb2NhdGlvbiBjb250YWluaW5nIGluZGV4IGJ1ZmZlciBkYXRhIGFuZCBpbmRleCB0eXBlCisgICAgICAgICogdG8gdGhlIGJ1aWxkZXIKKyAgICAgICAgKgorICAgICAgICAqIEBwYXJhbSBhIGluZGV4IHNldCBkYXRhIGFsbG9jYXRpb24sIGNvdWxkIGJlIG51bGwKKyAgICAgICAgKiBAcGFyYW0gcCBpbmRleCBzZXQgcHJpbWl0aXZlIHR5cGUKKyAgICAgICAgKgorICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIEFsbG9jYXRpb25CdWlsZGVyIGFkZEluZGV4U2V0QWxsb2NhdGlvbihBbGxvY2F0aW9uIGEsIFByaW1pdGl2ZSBwKSB7CisgICAgICAgICAgICBFbnRyeSBpbmRleFR5cGUgPSBuZXcgRW50cnkoKTsKKyAgICAgICAgICAgIGluZGV4VHlwZS5hID0gYTsKKyAgICAgICAgICAgIGluZGV4VHlwZS5wcmltID0gcDsKKyAgICAgICAgICAgIG1JbmRleFR5cGVzLmFkZEVsZW1lbnQoaW5kZXhUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogQWRkcyBhbiBpbmRleCBzZXQgdHlwZSB0byB0aGUgYnVpbGRlcgorICAgICAgICAqCisgICAgICAgICogQHBhcmFtIHAgaW5kZXggc2V0IHByaW1pdGl2ZSB0eXBlCisgICAgICAgICoKKyAgICAgICAgKiBAcmV0dXJuIHRoaXMKKyAgICAgICAgKiovCisgICAgICAgIHB1YmxpYyBBbGxvY2F0aW9uQnVpbGRlciBhZGRJbmRleFNldFR5cGUoUHJpbWl0aXZlIHApIHsKKyAgICAgICAgICAgIEVudHJ5IGluZGV4VHlwZSA9IG5ldyBFbnRyeSgpOworICAgICAgICAgICAgaW5kZXhUeXBlLmEgPSBudWxsOworICAgICAgICAgICAgaW5kZXhUeXBlLnByaW0gPSBwOworICAgICAgICAgICAgbUluZGV4VHlwZXMuYWRkRWxlbWVudChpbmRleFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBDcmVhdGUgYSBNZXNoIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBidWlsZGVyCisgICAgICAgICoKKyAgICAgICAgKiovCisgICAgICAgIHB1YmxpYyBNZXNoIGNyZWF0ZSgpIHsKKyAgICAgICAgICAgIG1SUy52YWxpZGF0ZSgpOworCisgICAgICAgICAgICBpbnRbXSB2dHggPSBuZXcgaW50W21WZXJ0ZXhUeXBlQ291bnRdOworICAgICAgICAgICAgaW50W10gaWR4ID0gbmV3IGludFttSW5kZXhUeXBlcy5zaXplKCldOworICAgICAgICAgICAgaW50W10gcHJpbSA9IG5ldyBpbnRbbUluZGV4VHlwZXMuc2l6ZSgpXTsKKworICAgICAgICAgICAgQWxsb2NhdGlvbltdIGluZGV4QnVmZmVycyA9IG5ldyBBbGxvY2F0aW9uW21JbmRleFR5cGVzLnNpemUoKV07CisgICAgICAgICAgICBQcmltaXRpdmVbXSBwcmltaXRpdmVzID0gbmV3IFByaW1pdGl2ZVttSW5kZXhUeXBlcy5zaXplKCldOworICAgICAgICAgICAgQWxsb2NhdGlvbltdIHZlcnRleEJ1ZmZlcnMgPSBuZXcgQWxsb2NhdGlvblttVmVydGV4VHlwZUNvdW50XTsKKworICAgICAgICAgICAgZm9yKGludCBjdCA9IDA7IGN0IDwgbVZlcnRleFR5cGVDb3VudDsgY3QgKyspIHsKKyAgICAgICAgICAgICAgICBFbnRyeSBlbnRyeSA9IG1WZXJ0ZXhUeXBlc1tjdF07CisgICAgICAgICAgICAgICAgdmVydGV4QnVmZmVyc1tjdF0gPSBlbnRyeS5hOworICAgICAgICAgICAgICAgIHZ0eFtjdF0gPSAoaW50KWVudHJ5LmEuZ2V0SUQobVJTKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yKGludCBjdCA9IDA7IGN0IDwgbUluZGV4VHlwZXMuc2l6ZSgpOyBjdCArKykgeworICAgICAgICAgICAgICAgIEVudHJ5IGVudHJ5ID0gKEVudHJ5KW1JbmRleFR5cGVzLmVsZW1lbnRBdChjdCk7CisgICAgICAgICAgICAgICAgbG9uZyBhbGxvY0lEID0gKGVudHJ5LmEgPT0gbnVsbCkgPyAwIDogZW50cnkuYS5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyc1tjdF0gPSBlbnRyeS5hOworICAgICAgICAgICAgICAgIHByaW1pdGl2ZXNbY3RdID0gZW50cnkucHJpbTsKKworICAgICAgICAgICAgICAgIGlkeFtjdF0gPSAoaW50KWFsbG9jSUQ7CisgICAgICAgICAgICAgICAgcHJpbVtjdF0gPSBlbnRyeS5wcmltLm1JRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9uZyBpZCA9IG1SUy5uTWVzaENyZWF0ZSh2dHgsIGlkeCwgcHJpbSk7CisgICAgICAgICAgICBNZXNoIG5ld01lc2ggPSBuZXcgTWVzaChpZCwgbVJTKTsKKyAgICAgICAgICAgIG5ld01lc2gubVZlcnRleEJ1ZmZlcnMgPSB2ZXJ0ZXhCdWZmZXJzOworICAgICAgICAgICAgbmV3TWVzaC5tSW5kZXhCdWZmZXJzID0gaW5kZXhCdWZmZXJzOworICAgICAgICAgICAgbmV3TWVzaC5tUHJpbWl0aXZlcyA9IHByaW1pdGl2ZXM7CisKKyAgICAgICAgICAgIHJldHVybiBuZXdNZXNoOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAqIEJ1aWxkZXIgdGhhdCBhbGxvd3MgY3JlYXRpb24gb2YgYSBtZXNoIG9iamVjdCBwb2ludCBieSBwb2ludAorICAgICogYW5kIHRyaWFuZ2xlIGJ5IHRyaWFuZ2xlCisgICAgKgorICAgICoqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJpYW5nbGVNZXNoQnVpbGRlciB7CisgICAgICAgIGZsb2F0IG1WdHhEYXRhW107CisgICAgICAgIGludCBtVnR4Q291bnQ7CisgICAgICAgIGludCBtTWF4SW5kZXg7CisgICAgICAgIHNob3J0IG1JbmRleERhdGFbXTsKKyAgICAgICAgaW50IG1JbmRleENvdW50OworICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOworICAgICAgICBFbGVtZW50IG1FbGVtZW50OworCisgICAgICAgIGZsb2F0IG1OWCA9IDA7CisgICAgICAgIGZsb2F0IG1OWSA9IDA7CisgICAgICAgIGZsb2F0IG1OWiA9IC0xOworICAgICAgICBmbG9hdCBtUzAgPSAwOworICAgICAgICBmbG9hdCBtVDAgPSAwOworICAgICAgICBmbG9hdCBtUiA9IDE7CisgICAgICAgIGZsb2F0IG1HID0gMTsKKyAgICAgICAgZmxvYXQgbUIgPSAxOworICAgICAgICBmbG9hdCBtQSA9IDE7CisKKyAgICAgICAgaW50IG1WdHhTaXplOworICAgICAgICBpbnQgbUZsYWdzOworCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1IgPSAweDAwMDE7CisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9STUFMID0gMHgwMDAyOworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFWFRVUkVfMCA9IDB4MDEwMDsKKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgbWVzaCB3aWxsIGJlbG9uZy4KKyAgICAgICAgKiBAcGFyYW0gdnR4U2l6ZSBzcGVjaWZpZXMgd2hldGhlciB0aGUgdmVydGV4IGlzIGEgZmxvYXQyIG9yCisgICAgICAgICogICAgICAgICAgICAgICAgZmxvYXQzCisgICAgICAgICogQHBhcmFtIGZsYWdzIGJpdGZpZWxkIHRoYXQgaXMgYSBjb21iaW5hdGlvbiBvZiBDT0xPUiwgTk9STUFMLAorICAgICAgICAqICAgICAgICAgICAgICBhbmQgVEVYVFVSRV8wIHRoYXQgc3BlY2lmaWVzIHdoYXQgdmVydGV4IGRhdGEKKyAgICAgICAgKiAgICAgICAgICAgICAgY2hhbm5lbHMgYXJlIHByZXNlbnQgaW4gdGhlIG1lc2gKKyAgICAgICAgKgorICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIFRyaWFuZ2xlTWVzaEJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzLCBpbnQgdnR4U2l6ZSwgaW50IGZsYWdzKSB7CisgICAgICAgICAgICBtUlMgPSByczsKKyAgICAgICAgICAgIG1WdHhDb3VudCA9IDA7CisgICAgICAgICAgICBtTWF4SW5kZXggPSAwOworICAgICAgICAgICAgbUluZGV4Q291bnQgPSAwOworICAgICAgICAgICAgbVZ0eERhdGEgPSBuZXcgZmxvYXRbMTI4XTsKKyAgICAgICAgICAgIG1JbmRleERhdGEgPSBuZXcgc2hvcnRbMTI4XTsKKyAgICAgICAgICAgIG1WdHhTaXplID0gdnR4U2l6ZTsKKyAgICAgICAgICAgIG1GbGFncyA9IGZsYWdzOworCisgICAgICAgICAgICBpZiAodnR4U2l6ZSA8IDIgfHwgdnR4U2l6ZSA+IDMpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJWZXJ0ZXggc2l6ZSBvdXQgb2YgcmFuZ2UuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgbWFrZVNwYWNlKGludCBjb3VudCkgeworICAgICAgICAgICAgaWYgKChtVnR4Q291bnQgKyBjb3VudCkgPj0gbVZ0eERhdGEubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgdFtdID0gbmV3IGZsb2F0W21WdHhEYXRhLmxlbmd0aCAqIDJdOworICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobVZ0eERhdGEsIDAsIHQsIDAsIG1WdHhEYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgbVZ0eERhdGEgPSB0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIGxhdGNoKCkgeworICAgICAgICAgICAgaWYgKChtRmxhZ3MgJiBDT0xPUikgIT0gMCkgeworICAgICAgICAgICAgICAgIG1ha2VTcGFjZSg0KTsKKyAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtUjsKKyAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtRzsKKyAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtQjsKKyAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtQTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgobUZsYWdzICYgVEVYVFVSRV8wKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgbWFrZVNwYWNlKDIpOworICAgICAgICAgICAgICAgIG1WdHhEYXRhW21WdHhDb3VudCsrXSA9IG1TMDsKKyAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtVDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKG1GbGFncyAmIE5PUk1BTCkgIT0gMCkgeworICAgICAgICAgICAgICAgIG1ha2VTcGFjZSg0KTsKKyAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSBtTlg7CisgICAgICAgICAgICAgICAgbVZ0eERhdGFbbVZ0eENvdW50KytdID0gbU5ZOworICAgICAgICAgICAgICAgIG1WdHhEYXRhW21WdHhDb3VudCsrXSA9IG1OWjsKKyAgICAgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSAwLjBmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbU1heEluZGV4ICsrOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogQWRkcyBhIGZsb2F0MiB2ZXJ0ZXggdG8gdGhlIG1lc2gKKyAgICAgICAgKgorICAgICAgICAqIEBwYXJhbSB4IHBvc2l0aW9uIHgKKyAgICAgICAgKiBAcGFyYW0geSBwb3NpdGlvbiB5CisgICAgICAgICoKKyAgICAgICAgKiBAcmV0dXJuIHRoaXMKKyAgICAgICAgKgorICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIFRyaWFuZ2xlTWVzaEJ1aWxkZXIgYWRkVmVydGV4KGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgICAgIGlmIChtVnR4U2l6ZSAhPSAyKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiYWRkIG1pc3RtYXRjaCB3aXRoIGRlY2xhcmVkIGNvbXBvbmVudHMuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYWtlU3BhY2UoMik7CisgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSB4OworICAgICAgICAgICAgbVZ0eERhdGFbbVZ0eENvdW50KytdID0geTsKKyAgICAgICAgICAgIGxhdGNoKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIEFkZHMgYSBmbG9hdDMgdmVydGV4IHRvIHRoZSBtZXNoCisgICAgICAgICoKKyAgICAgICAgKiBAcGFyYW0geCBwb3NpdGlvbiB4CisgICAgICAgICogQHBhcmFtIHkgcG9zaXRpb24geQorICAgICAgICAqIEBwYXJhbSB6IHBvc2l0aW9uIHoKKyAgICAgICAgKgorICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAqCisgICAgICAgICoqLworICAgICAgICBwdWJsaWMgVHJpYW5nbGVNZXNoQnVpbGRlciBhZGRWZXJ0ZXgoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeworICAgICAgICAgICAgaWYgKG1WdHhTaXplICE9IDMpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJhZGQgbWlzdG1hdGNoIHdpdGggZGVjbGFyZWQgY29tcG9uZW50cy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ha2VTcGFjZSg0KTsKKyAgICAgICAgICAgIG1WdHhEYXRhW21WdHhDb3VudCsrXSA9IHg7CisgICAgICAgICAgICBtVnR4RGF0YVttVnR4Q291bnQrK10gPSB5OworICAgICAgICAgICAgbVZ0eERhdGFbbVZ0eENvdW50KytdID0gejsKKyAgICAgICAgICAgIG1WdHhEYXRhW21WdHhDb3VudCsrXSA9IDEuMGY7CisgICAgICAgICAgICBsYXRjaCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBTZXRzIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGUgZm9yIHRoZSB2ZXJ0aWNlcyB0aGF0IGFyZSBhZGRlZCBhZnRlciB0aGlzIG1ldGhvZCBjYWxsLgorICAgICAgICAqCisgICAgICAgICogQHBhcmFtIHMgdGV4dHVyZSBjb29yZGluYXRlIHMKKyAgICAgICAgKiBAcGFyYW0gdCB0ZXh0dXJlIGNvb3JkaW5hdGUgdAorICAgICAgICAqCisgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICoqLworICAgICAgICBwdWJsaWMgVHJpYW5nbGVNZXNoQnVpbGRlciBzZXRUZXh0dXJlKGZsb2F0IHMsIGZsb2F0IHQpIHsKKyAgICAgICAgICAgIGlmICgobUZsYWdzICYgVEVYVFVSRV8wKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiYWRkIG1pc3RtYXRjaCB3aXRoIGRlY2xhcmVkIGNvbXBvbmVudHMuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtUzAgPSBzOworICAgICAgICAgICAgbVQwID0gdDsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogU2V0cyB0aGUgbm9ybWFsIHZlY3RvciBmb3IgdGhlIHZlcnRpY2VzIHRoYXQgYXJlIGFkZGVkIGFmdGVyIHRoaXMgbWV0aG9kIGNhbGwuCisgICAgICAgICoKKyAgICAgICAgKiBAcGFyYW0geCBub3JtYWwgdmVjdG9yIHgKKyAgICAgICAgKiBAcGFyYW0geSBub3JtYWwgdmVjdG9yIHkKKyAgICAgICAgKiBAcGFyYW0geiBub3JtYWwgdmVjdG9yIHoKKyAgICAgICAgKgorICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIFRyaWFuZ2xlTWVzaEJ1aWxkZXIgc2V0Tm9ybWFsKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsKKyAgICAgICAgICAgIGlmICgobUZsYWdzICYgTk9STUFMKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiYWRkIG1pc3RtYXRjaCB3aXRoIGRlY2xhcmVkIGNvbXBvbmVudHMuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtTlggPSB4OworICAgICAgICAgICAgbU5ZID0geTsKKyAgICAgICAgICAgIG1OWiA9IHo7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIFNldHMgdGhlIGNvbG9yIGZvciB0aGUgdmVydGljZXMgdGhhdCBhcmUgYWRkZWQgYWZ0ZXIgdGhpcyBtZXRob2QgY2FsbC4KKyAgICAgICAgKgorICAgICAgICAqIEBwYXJhbSByIHJlZCBjb21wb25lbnQKKyAgICAgICAgKiBAcGFyYW0gZyBncmVlbiBjb21wb25lbnQKKyAgICAgICAgKiBAcGFyYW0gYiBibHVlIGNvbXBvbmVudAorICAgICAgICAqIEBwYXJhbSBhIGFscGhhIGNvbXBvbmVudAorICAgICAgICAqCisgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICoqLworICAgICAgICBwdWJsaWMgVHJpYW5nbGVNZXNoQnVpbGRlciBzZXRDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKSB7CisgICAgICAgICAgICBpZiAoKG1GbGFncyAmIENPTE9SKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiYWRkIG1pc3RtYXRjaCB3aXRoIGRlY2xhcmVkIGNvbXBvbmVudHMuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtUiA9IHI7CisgICAgICAgICAgICBtRyA9IGc7CisgICAgICAgICAgICBtQiA9IGI7CisgICAgICAgICAgICBtQSA9IGE7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIEFkZHMgYSBuZXcgdHJpYW5nbGUgdG8gdGhlIG1lc2ggYnVpbGRlcgorICAgICAgICAqCisgICAgICAgICogQHBhcmFtIGlkeDEgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleCBpbiB0aGUgdHJpYW5nbGUKKyAgICAgICAgKiBAcGFyYW0gaWR4MiBpbmRleCBvZiB0aGUgc2Vjb25kIHZlcnRleCBpbiB0aGUgdHJpYW5nbGUKKyAgICAgICAgKiBAcGFyYW0gaWR4MyBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4IGluIHRoZSB0cmlhbmdsZQorICAgICAgICAqCisgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICoqLworICAgICAgICBwdWJsaWMgVHJpYW5nbGVNZXNoQnVpbGRlciBhZGRUcmlhbmdsZShpbnQgaWR4MSwgaW50IGlkeDIsIGludCBpZHgzKSB7CisgICAgICAgICAgICBpZigoaWR4MSA+PSBtTWF4SW5kZXgpIHx8IChpZHgxIDwgMCkgfHwKKyAgICAgICAgICAgICAgIChpZHgyID49IG1NYXhJbmRleCkgfHwgKGlkeDIgPCAwKSB8fAorICAgICAgICAgICAgICAgKGlkeDMgPj0gbU1heEluZGV4KSB8fCAoaWR4MyA8IDApKSB7CisgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJJbmRleCBwcm92aWRlZCBncmVhdGVyIHRoYW4gdmVydGV4IGNvdW50LiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChtSW5kZXhDb3VudCArIDMpID49IG1JbmRleERhdGEubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgc2hvcnQgdFtdID0gbmV3IHNob3J0W21JbmRleERhdGEubGVuZ3RoICogMl07CisgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtSW5kZXhEYXRhLCAwLCB0LCAwLCBtSW5kZXhEYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgbUluZGV4RGF0YSA9IHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtSW5kZXhEYXRhW21JbmRleENvdW50KytdID0gKHNob3J0KWlkeDE7CisgICAgICAgICAgICBtSW5kZXhEYXRhW21JbmRleENvdW50KytdID0gKHNob3J0KWlkeDI7CisgICAgICAgICAgICBtSW5kZXhEYXRhW21JbmRleENvdW50KytdID0gKHNob3J0KWlkeDM7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIENyZWF0ZXMgdGhlIG1lc2ggb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1aWxkZXIKKyAgICAgICAgKgorICAgICAgICAqIEBwYXJhbSB1cGxvYWRUb0J1ZmZlck9iamVjdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgdmVydGV4IGRhdGEKKyAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgdXBsb2FkZWQgaW50byB0aGUgYnVmZmVyCisgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpbmRpY2F0aW5nIHRoYXQgaXQncyBsaWtlbHkKKyAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGdvaW5nIHRvIGJlIG1vZGlmaWVkIGFuZAorICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCBtYW55IHRpbWVzLgorICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCBpdCBpbmRpY2F0ZXMgdGhlCisgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2ggZGF0YSB3aWxsIGJlIHVwZGF0ZWQKKyAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbnRseSBhbmQgcmVtYWluIGluIHNjcmlwdAorICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpYmxlIG1lbW9yeQorICAgICAgICAqCisgICAgICAgICoqLworICAgICAgICBwdWJsaWMgTWVzaCBjcmVhdGUoYm9vbGVhbiB1cGxvYWRUb0J1ZmZlck9iamVjdCkgeworICAgICAgICAgICAgRWxlbWVudC5CdWlsZGVyIGIgPSBuZXcgRWxlbWVudC5CdWlsZGVyKG1SUyk7CisgICAgICAgICAgICBiLmFkZChFbGVtZW50LmNyZWF0ZVZlY3RvcihtUlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZ0eFNpemUpLCAicG9zaXRpb24iKTsKKyAgICAgICAgICAgIGlmICgobUZsYWdzICYgQ09MT1IpICE9IDApIHsKKyAgICAgICAgICAgICAgICBiLmFkZChFbGVtZW50LkYzMl80KG1SUyksICJjb2xvciIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChtRmxhZ3MgJiBURVhUVVJFXzApICE9IDApIHsKKyAgICAgICAgICAgICAgICBiLmFkZChFbGVtZW50LkYzMl8yKG1SUyksICJ0ZXh0dXJlMCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChtRmxhZ3MgJiBOT1JNQUwpICE9IDApIHsKKyAgICAgICAgICAgICAgICBiLmFkZChFbGVtZW50LkYzMl8zKG1SUyksICJub3JtYWwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1FbGVtZW50ID0gYi5jcmVhdGUoKTsKKworICAgICAgICAgICAgaW50IHVzYWdlID0gQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQ7CisgICAgICAgICAgICBpZiAodXBsb2FkVG9CdWZmZXJPYmplY3QpIHsKKyAgICAgICAgICAgICAgICB1c2FnZSB8PSBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1ZFUlRFWDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQnVpbGRlciBzbWIgPSBuZXcgQnVpbGRlcihtUlMsIHVzYWdlKTsKKyAgICAgICAgICAgIHNtYi5hZGRWZXJ0ZXhUeXBlKG1FbGVtZW50LCBtTWF4SW5kZXgpOworICAgICAgICAgICAgc21iLmFkZEluZGV4U2V0VHlwZShFbGVtZW50LlUxNihtUlMpLCBtSW5kZXhDb3VudCwgUHJpbWl0aXZlLlRSSUFOR0xFKTsKKworICAgICAgICAgICAgTWVzaCBzbSA9IHNtYi5jcmVhdGUoKTsKKworICAgICAgICAgICAgc20uZ2V0VmVydGV4QWxsb2NhdGlvbigwKS5jb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoMCwgbU1heEluZGV4LCBtVnR4RGF0YSk7CisgICAgICAgICAgICBpZih1cGxvYWRUb0J1ZmZlck9iamVjdCkgeworICAgICAgICAgICAgICAgIGlmICh1cGxvYWRUb0J1ZmZlck9iamVjdCkgeworICAgICAgICAgICAgICAgICAgICBzbS5nZXRWZXJ0ZXhBbGxvY2F0aW9uKDApLnN5bmNBbGwoQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc20uZ2V0SW5kZXhTZXRBbGxvY2F0aW9uKDApLmNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCBtSW5kZXhDb3VudCwgbUluZGV4RGF0YSk7CisgICAgICAgICAgICBpZiAodXBsb2FkVG9CdWZmZXJPYmplY3QpIHsKKyAgICAgICAgICAgICAgICBzbS5nZXRJbmRleFNldEFsbG9jYXRpb24oMCkuc3luY0FsbChBbGxvY2F0aW9uLlVTQUdFX1NDUklQVCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBzbTsKKyAgICAgICAgfQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9QYXRoLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1BhdGguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzUwMmFhCi0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9QYXRoLmphdmEKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKKy8qKgorICogQGhpZGUKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBQYXRoIGV4dGVuZHMgQmFzZU9iaiB7CisKKyAgICBwdWJsaWMgZW51bSBQcmltaXRpdmUgeworICAgICAgICBRVUFEUkFUSUNfQkVaSUVSKDApLAorICAgICAgICBDVUJJQ19CRVpJRVIoMSk7CisKKyAgICAgICAgaW50IG1JRDsKKyAgICAgICAgUHJpbWl0aXZlKGludCBpZCkgeworICAgICAgICAgICAgbUlEID0gaWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBbGxvY2F0aW9uIG1WZXJ0ZXhCdWZmZXI7CisgICAgQWxsb2NhdGlvbiBtTG9vcEJ1ZmZlcjsKKyAgICBQcmltaXRpdmUgbVByaW1pdGl2ZTsKKyAgICBmbG9hdCBtUXVhbGl0eTsKKyAgICBib29sZWFuIG1Db3ZlcmFnZVRvQWxwaGE7CisKKyAgICBQYXRoKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycywgUHJpbWl0aXZlIHAsIEFsbG9jYXRpb24gdnR4LCBBbGxvY2F0aW9uIGxvb3AsIGZsb2F0IHEpIHsKKyAgICAgICAgc3VwZXIoaWQsIHJzKTsKKyAgICAgICAgbVZlcnRleEJ1ZmZlciA9IHZ0eDsKKyAgICAgICAgbUxvb3BCdWZmZXIgPSBsb29wOworICAgICAgICBtUHJpbWl0aXZlID0gcDsKKyAgICAgICAgbVF1YWxpdHkgPSBxOworICAgIH0KKworICAgIHB1YmxpYyBBbGxvY2F0aW9uIGdldFZlcnRleEFsbG9jYXRpb24oKSB7CisgICAgICAgIHJldHVybiBtVmVydGV4QnVmZmVyOworICAgIH0KKworICAgIHB1YmxpYyBBbGxvY2F0aW9uIGdldExvb3BBbGxvY2F0aW9uKCkgeworICAgICAgICByZXR1cm4gbUxvb3BCdWZmZXI7CisgICAgfQorCisgICAgcHVibGljIFByaW1pdGl2ZSBnZXRQcmltaXRpdmUoKSB7CisgICAgICAgIHJldHVybiBtUHJpbWl0aXZlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgdXBkYXRlRnJvbU5hdGl2ZSgpIHsKKyAgICB9CisKKworICAgIHB1YmxpYyBzdGF0aWMgUGF0aCBjcmVhdGVTdGF0aWNQYXRoKFJlbmRlclNjcmlwdCBycywgUHJpbWl0aXZlIHAsIGZsb2F0IHF1YWxpdHksIEFsbG9jYXRpb24gdnR4KSB7CisgICAgICAgIGxvbmcgaWQgPSBycy5uUGF0aENyZWF0ZShwLm1JRCwgZmFsc2UsIHZ0eC5nZXRJRChycyksIDAsIHF1YWxpdHkpOworICAgICAgICBQYXRoIG5ld1BhdGggPSBuZXcgUGF0aChpZCwgcnMsIHAsIG51bGwsIG51bGwsIHF1YWxpdHkpOworICAgICAgICByZXR1cm4gbmV3UGF0aDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFBhdGggY3JlYXRlU3RhdGljUGF0aChSZW5kZXJTY3JpcHQgcnMsIFByaW1pdGl2ZSBwLCBmbG9hdCBxdWFsaXR5LCBBbGxvY2F0aW9uIHZ0eCwgQWxsb2NhdGlvbiBsb29wcykgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFBhdGggY3JlYXRlRHluYW1pY1BhdGgoUmVuZGVyU2NyaXB0IHJzLCBQcmltaXRpdmUgcCwgZmxvYXQgcXVhbGl0eSwgQWxsb2NhdGlvbiB2dHgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBQYXRoIGNyZWF0ZUR5bmFtaWNQYXRoKFJlbmRlclNjcmlwdCBycywgUHJpbWl0aXZlIHAsIGZsb2F0IHF1YWxpdHksIEFsbG9jYXRpb24gdnR4LCBBbGxvY2F0aW9uIGxvb3BzKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworCit9CisKKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWI5Yjc1Ci0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtLmphdmEKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworCisvKioKKyAqIEBoaWRlCisgKgorICogUHJvZ3JhbSBpcyBhIGJhc2UgY2xhc3MgZm9yIGFsbCB0aGUgb2JqZWN0cyB0aGF0IG1vZGlmeQorICogdmFyaW91cyBzdGFnZXMgb2YgdGhlIGdyYXBoaWNzIHBpcGVsaW5lCisgKgorICoqLworcHVibGljIGNsYXNzIFByb2dyYW0gZXh0ZW5kcyBCYXNlT2JqIHsKKyAgICBzdGF0aWMgZmluYWwgaW50IE1BWF9JTlBVVCA9IDg7CisgICAgc3RhdGljIGZpbmFsIGludCBNQVhfT1VUUFVUID0gODsKKyAgICBzdGF0aWMgZmluYWwgaW50IE1BWF9DT05TVEFOVCA9IDg7CisgICAgc3RhdGljIGZpbmFsIGludCBNQVhfVEVYVFVSRSA9IDg7CisKKyAgICAvKioKKyAgICAgKgorICAgICAqIFRleHR1cmVUeXBlIHNwZWNpZmllcyB3aGF0IHRleHR1cmVzIGFyZSBhdHRhY2hlZCB0byBQcm9ncmFtCisgICAgICogb2JqZWN0cworICAgICAqCisgICAgICoqLworICAgIHB1YmxpYyBlbnVtIFRleHR1cmVUeXBlIHsKKyAgICAgICAgVEVYVFVSRV8yRCAoMCksCisgICAgICAgIFRFWFRVUkVfQ1VCRSAoMSk7CisKKyAgICAgICAgaW50IG1JRDsKKyAgICAgICAgVGV4dHVyZVR5cGUoaW50IGlkKSB7CisgICAgICAgICAgICBtSUQgPSBpZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGVudW0gUHJvZ3JhbVBhcmFtIHsKKyAgICAgICAgSU5QVVQgKDApLAorICAgICAgICBPVVRQVVQgKDEpLAorICAgICAgICBDT05TVEFOVCAoMiksCisgICAgICAgIFRFWFRVUkVfVFlQRSAoMyk7CisKKyAgICAgICAgaW50IG1JRDsKKyAgICAgICAgUHJvZ3JhbVBhcmFtKGludCBpZCkgeworICAgICAgICAgICAgbUlEID0gaWQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgRWxlbWVudCBtSW5wdXRzW107CisgICAgRWxlbWVudCBtT3V0cHV0c1tdOworICAgIFR5cGUgbUNvbnN0YW50c1tdOworICAgIFRleHR1cmVUeXBlIG1UZXh0dXJlc1tdOworICAgIFN0cmluZyBtVGV4dHVyZU5hbWVzW107CisgICAgaW50IG1UZXh0dXJlQ291bnQ7CisgICAgU3RyaW5nIG1TaGFkZXI7CisKKyAgICBQcm9ncmFtKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBzdXBlcihpZCwgcnMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFByb2dyYW0gb2JqZWN0IGNhbiBoYXZlIHplcm8gb3IgbW9yZSBjb25zdGFudCBhbGxvY2F0aW9ucworICAgICAqIGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdG90YWwgY291bnQuCisgICAgICogQHJldHVybiBudW1iZXIgb2YgY29uc3RhbnQgaW5wdXQgdHlwZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldENvbnN0YW50Q291bnQoKSB7CisgICAgICAgIHJldHVybiBtQ29uc3RhbnRzICE9IG51bGwgPyBtQ29uc3RhbnRzLmxlbmd0aCA6IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgY29uc3RhbnQgYnVmZmVyIHVzZWQgaW4gdGhlIHByb2dyYW0KKyAgICAgKiBvYmplY3QuIEl0IGNvdWxkIGJlIHVzZWQgdG8gcXVlcnkgaW50ZXJuYWwgZWxlbWVudHMgb3IgY3JlYXRlCisgICAgICogYW4gYWxsb2NhdGlvbiB0byBzdG9yZSBjb25zdGFudCBkYXRhLgorICAgICAqIEBwYXJhbSBzbG90IGluZGV4IG9mIHRoZSBjb25zdGFudCBpbnB1dCB0eXBlIHRvIHJldHVybgorICAgICAqIEByZXR1cm4gY29uc3RhbnQgaW5wdXQgdHlwZQorICAgICAqLworICAgIHB1YmxpYyBUeXBlIGdldENvbnN0YW50KGludCBzbG90KSB7CisgICAgICAgIGlmIChzbG90IDwgMCB8fCBzbG90ID49IG1Db25zdGFudHMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTbG90IElEIG91dCBvZiByYW5nZS4iKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbUNvbnN0YW50c1tzbG90XTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGV4dHVyZXMgdXNlZCBpbiB0aGlzIHByb2dyYW0gb2JqZWN0CisgICAgICogQHJldHVybiBudW1iZXIgb2YgdGV4dHVyZSBpbnB1dHMKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFRleHR1cmVDb3VudCgpIHsKKyAgICAgICAgcmV0dXJuIG1UZXh0dXJlQ291bnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0ZXh0dXJlIGF0IGEgZ2l2ZW4gc2xvdC4gZS5nLiAyRCBvciBDdWJlCisgICAgICogQHBhcmFtIHNsb3QgaW5kZXggb2YgdGhlIHRleHR1cmUgaW5wdXQKKyAgICAgKiBAcmV0dXJuIHRleHR1cmUgaW5wdXQgdHlwZQorICAgICAqLworICAgIHB1YmxpYyBUZXh0dXJlVHlwZSBnZXRUZXh0dXJlVHlwZShpbnQgc2xvdCkgeworICAgICAgICBpZiAoKHNsb3QgPCAwKSB8fCAoc2xvdCA+PSBtVGV4dHVyZUNvdW50KSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU2xvdCBJRCBvdXQgb2YgcmFuZ2UuIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1UZXh0dXJlc1tzbG90XTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0ZXh0dXJlIGlucHV0IGF0IGEgZ2l2ZW4gc2xvdC4gZS5nLgorICAgICAqIHRleDAsIGRpZmZ1c2UsIHNwZWMKKyAgICAgKiBAcGFyYW0gc2xvdCBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbnB1dAorICAgICAqIEByZXR1cm4gdGV4dHVyZSBpbnB1dCBuYW1lCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRUZXh0dXJlTmFtZShpbnQgc2xvdCkgeworICAgICAgICBpZiAoKHNsb3QgPCAwKSB8fCAoc2xvdCA+PSBtVGV4dHVyZUNvdW50KSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU2xvdCBJRCBvdXQgb2YgcmFuZ2UuIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1UZXh0dXJlTmFtZXNbc2xvdF07CisgICAgfQorCisgICAgLyoqCisgICAgICogQmluZHMgYSBjb25zdGFudCBidWZmZXIgdG8gYmUgdXNlZCBhcyB1bmlmb3JtIGlucHV0cyB0byB0aGUKKyAgICAgKiBwcm9ncmFtCisgICAgICoKKyAgICAgKiBAcGFyYW0gYSBhbGxvY2F0aW9uIGNvbnRhaW5pbmcgdW5pZm9ybSBkYXRhCisgICAgICogQHBhcmFtIHNsb3QgaW5kZXggd2l0aGluIHRoZSBwcm9ncmFtJ3MgbGlzdCBvZiBjb25zdGFudAorICAgICAqICAgICAgICAgICAgIGJ1ZmZlciBhbGxvY2F0aW9ucworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGJpbmRDb25zdGFudHMoQWxsb2NhdGlvbiBhLCBpbnQgc2xvdCkgeworICAgICAgICBpZiAoc2xvdCA8IDAgfHwgc2xvdCA+PSBtQ29uc3RhbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU2xvdCBJRCBvdXQgb2YgcmFuZ2UuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGEgIT0gbnVsbCAmJgorICAgICAgICAgICAgYS5nZXRUeXBlKCkuZ2V0SUQobVJTKSAhPSBtQ29uc3RhbnRzW3Nsb3RdLmdldElEKG1SUykpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFsbG9jYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBzbG90IHR5cGUuIik7CisgICAgICAgIH0KKyAgICAgICAgbG9uZyBpZCA9IGEgIT0gbnVsbCA/IGEuZ2V0SUQobVJTKSA6IDA7CisgICAgICAgIG1SUy5uUHJvZ3JhbUJpbmRDb25zdGFudHMoZ2V0SUQobVJTKSwgc2xvdCwgaWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEJpbmRzIGEgdGV4dHVyZSB0byBiZSB1c2VkIGluIHRoZSBwcm9ncmFtCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmEgYWxsb2NhdGlvbiBjb250YWluaW5nIHRleHR1cmUgZGF0YQorICAgICAqIEBwYXJhbSBzbG90IGluZGV4IHdpdGhpbiB0aGUgcHJvZ3JhbSdzIGxpc3Qgb2YgdGV4dHVyZXMKKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGJpbmRUZXh0dXJlKEFsbG9jYXRpb24gdmEsIGludCBzbG90KQorICAgICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKKyAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgIGlmICgoc2xvdCA8IDApIHx8IChzbG90ID49IG1UZXh0dXJlQ291bnQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTbG90IElEIG91dCBvZiByYW5nZS4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmEgIT0gbnVsbCAmJiB2YS5nZXRUeXBlKCkuaGFzRmFjZXMoKSAmJgorICAgICAgICAgICAgbVRleHR1cmVzW3Nsb3RdICE9IFRleHR1cmVUeXBlLlRFWFRVUkVfQ1VCRSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2Fubm90IGJpbmQgY3ViZW1hcCB0byAyZCB0ZXh0dXJlIHNsb3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIGxvbmcgaWQgPSB2YSAhPSBudWxsID8gdmEuZ2V0SUQobVJTKSA6IDA7CisgICAgICAgIG1SUy5uUHJvZ3JhbUJpbmRUZXh0dXJlKGdldElEKG1SUyksIHNsb3QsIGlkKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBCaW5kcyBhbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgaG93IGEgdGV4dHVyZSBhdCB0aGUKKyAgICAgKiBjb3JyZXNwb25kaW5nIGxvY2F0aW9uIGlzIHNhbXBsZWQKKyAgICAgKgorICAgICAqIEBwYXJhbSB2cyBzYW1wbGVyIGZvciBhIGNvcnJlc3BvbmRpbmcgdGV4dHVyZQorICAgICAqIEBwYXJhbSBzbG90IGluZGV4IHdpdGhpbiB0aGUgcHJvZ3JhbSdzIGxpc3Qgb2YgdGV4dHVyZXMgdG8KKyAgICAgKiAgICAgICAgICAgICB1c2UgdGhlIHNhbXBsZXIgb24KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGJpbmRTYW1wbGVyKFNhbXBsZXIgdnMsIGludCBzbG90KQorICAgICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKKyAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgIGlmICgoc2xvdCA8IDApIHx8IChzbG90ID49IG1UZXh0dXJlQ291bnQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTbG90IElEIG91dCBvZiByYW5nZS4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGxvbmcgaWQgPSB2cyAhPSBudWxsID8gdnMuZ2V0SUQobVJTKSA6IDA7CisgICAgICAgIG1SUy5uUHJvZ3JhbUJpbmRTYW1wbGVyKGdldElEKG1SUyksIHNsb3QsIGlkKTsKKyAgICB9CisKKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQmFzZVByb2dyYW1CdWlsZGVyIHsKKyAgICAgICAgUmVuZGVyU2NyaXB0IG1SUzsKKyAgICAgICAgRWxlbWVudCBtSW5wdXRzW107CisgICAgICAgIEVsZW1lbnQgbU91dHB1dHNbXTsKKyAgICAgICAgVHlwZSBtQ29uc3RhbnRzW107CisgICAgICAgIFR5cGUgbVRleHR1cmVzW107CisgICAgICAgIFRleHR1cmVUeXBlIG1UZXh0dXJlVHlwZXNbXTsKKyAgICAgICAgU3RyaW5nIG1UZXh0dXJlTmFtZXNbXTsKKyAgICAgICAgaW50IG1JbnB1dENvdW50OworICAgICAgICBpbnQgbU91dHB1dENvdW50OworICAgICAgICBpbnQgbUNvbnN0YW50Q291bnQ7CisgICAgICAgIGludCBtVGV4dHVyZUNvdW50OworICAgICAgICBTdHJpbmcgbVNoYWRlcjsKKworCisgICAgICAgIHByb3RlY3RlZCBCYXNlUHJvZ3JhbUJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgICAgICBtUlMgPSByczsKKyAgICAgICAgICAgIG1JbnB1dHMgPSBuZXcgRWxlbWVudFtNQVhfSU5QVVRdOworICAgICAgICAgICAgbU91dHB1dHMgPSBuZXcgRWxlbWVudFtNQVhfT1VUUFVUXTsKKyAgICAgICAgICAgIG1Db25zdGFudHMgPSBuZXcgVHlwZVtNQVhfQ09OU1RBTlRdOworICAgICAgICAgICAgbUlucHV0Q291bnQgPSAwOworICAgICAgICAgICAgbU91dHB1dENvdW50ID0gMDsKKyAgICAgICAgICAgIG1Db25zdGFudENvdW50ID0gMDsKKyAgICAgICAgICAgIG1UZXh0dXJlQ291bnQgPSAwOworICAgICAgICAgICAgbVRleHR1cmVUeXBlcyA9IG5ldyBUZXh0dXJlVHlwZVtNQVhfVEVYVFVSRV07CisgICAgICAgICAgICBtVGV4dHVyZU5hbWVzID0gbmV3IFN0cmluZ1tNQVhfVEVYVFVSRV07CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgR0xTTCBzaGFkZXIgY29kZSB0byBiZSB1c2VkIGluIHRoZSBwcm9ncmFtCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBzIEdMU0wgc2hhZGVyIHN0cmluZworICAgICAgICAgKiBAcmV0dXJuICBzZWxmCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQmFzZVByb2dyYW1CdWlsZGVyIHNldFNoYWRlcihTdHJpbmcgcykgeworICAgICAgICAgICAgbVNoYWRlciA9IHM7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBHTFNMIHNoYWRlciBjb2RlIHRvIGJlIHVzZWQgaW4gdGhlIHByb2dyYW0KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHJlc291cmNlcyBhcHBsaWNhdGlvbiByZXNvdXJjZXMKKyAgICAgICAgICogQHBhcmFtIHJlc291cmNlSUQgaWQgb2YgdGhlIGZpbGUgY29udGFpbmluZyBHTFNMIHNoYWRlciBjb2RlCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gIHNlbGYKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCYXNlUHJvZ3JhbUJ1aWxkZXIgc2V0U2hhZGVyKFJlc291cmNlcyByZXNvdXJjZXMsIGludCByZXNvdXJjZUlEKSB7CisgICAgICAgICAgICBieXRlW10gc3RyOworICAgICAgICAgICAgaW50IHN0ckxlbmd0aDsKKyAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcmVzb3VyY2VzLm9wZW5SYXdSZXNvdXJjZShyZXNvdXJjZUlEKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgc3RyID0gbmV3IGJ5dGVbMTAyNF07CisgICAgICAgICAgICAgICAgICAgIHN0ckxlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBieXRlc0xlZnQgPSBzdHIubGVuZ3RoIC0gc3RyTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzTGVmdCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIGJ1ZjIgPSBuZXcgYnl0ZVtzdHIubGVuZ3RoICogMl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShzdHIsIDAsIGJ1ZjIsIDAsIHN0ci5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IGJ1ZjI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNMZWZ0ID0gc3RyLmxlbmd0aCAtIHN0ckxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBieXRlc1JlYWQgPSBpcy5yZWFkKHN0ciwgc3RyTGVuZ3RoLCBieXRlc0xlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJMZW5ndGggKz0gYnl0ZXNSZWFkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgaXMuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNoYWRlciA9IG5ldyBTdHJpbmcoc3RyLCAwLCBzdHJMZW5ndGgsICJVVEYtOCIpOworICAgICAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoIlJlbmRlclNjcmlwdCBzaGFkZXIgY3JlYXRpb24iLCAiQ291bGQgbm90IGRlY29kZSBzaGFkZXIgc3RyaW5nIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFF1ZXJpZXMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGFkZGVkIGNvbnN0YW50IGJ1ZmZlciB0eXBlCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldEN1cnJlbnRDb25zdGFudEluZGV4KCkgeworICAgICAgICAgICAgcmV0dXJuIG1Db25zdGFudENvdW50IC0gMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBRdWVyaWVzIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBhZGRlZCB0ZXh0dXJlIHR5cGUKKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0Q3VycmVudFRleHR1cmVJbmRleCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtVGV4dHVyZUNvdW50IC0gMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBBZGRzIGNvbnN0YW50ICh1bmlmb3JtKSBpbnB1dHMgdG8gdGhlIHByb2dyYW0KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHQgVHlwZSB0aGF0IGRlc2NyaWJlcyB0aGUgbGF5b3V0IG9mIHRoZSBBbGxvY2F0aW9uCisgICAgICAgICAqICAgICAgICAgIG9iamVjdCB0byBiZSB1c2VkIGFzIGNvbnN0YW50IGlucHV0cyB0byB0aGUgUHJvZ3JhbQorICAgICAgICAgKiBAcmV0dXJuICBzZWxmCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQmFzZVByb2dyYW1CdWlsZGVyIGFkZENvbnN0YW50KFR5cGUgdCkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAvLyBTaG91bGQgY2hlY2sgZm9yIGNvbnNpc3RhbnQgYW5kIG5vbi1jb25mbGljdGluZyBuYW1lcy4uLgorICAgICAgICAgICAgaWYobUNvbnN0YW50Q291bnQgPj0gTUFYX0NPTlNUQU5UKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNYXggaW5wdXQgY291bnQgZXhjZWVkZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodC5nZXRFbGVtZW50KCkuaXNDb21wbGV4KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNvbXBsZXggZWxlbWVudHMgbm90IGFsbG93ZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ29uc3RhbnRzW21Db25zdGFudENvdW50XSA9IHQ7CisgICAgICAgICAgICBtQ29uc3RhbnRDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQWRkcyBhIHRleHR1cmUgaW5wdXQgdG8gdGhlIFByb2dyYW0KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHRleFR5cGUgZGVzY3JpYmVzIHRoYXQgdGhlIHRleHR1cmUgdG8gYXBwZW5kIGl0ICgyRCwKKyAgICAgICAgICogICAgICAgICAgICAgICAgQ3ViZW1hcCwgZXRjLikKKyAgICAgICAgICogQHJldHVybiAgc2VsZgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJhc2VQcm9ncmFtQnVpbGRlciBhZGRUZXh0dXJlKFRleHR1cmVUeXBlIHRleFR5cGUpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24geworICAgICAgICAgICAgYWRkVGV4dHVyZSh0ZXhUeXBlLCAiVGV4IiArIG1UZXh0dXJlQ291bnQpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQWRkcyBhIHRleHR1cmUgaW5wdXQgdG8gdGhlIFByb2dyYW0KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHRleFR5cGUgZGVzY3JpYmVzIHRoYXQgdGhlIHRleHR1cmUgdG8gYXBwZW5kIGl0ICgyRCwKKyAgICAgICAgICogICAgICAgICAgICAgICAgQ3ViZW1hcCwgZXRjLikKKyAgICAgICAgICogQHBhcmFtIHRleE5hbWUgd2hhdCB0aGUgdGV4dHVyZSBzaG91bGQgYmUgY2FsbGVkIGluIHRoZQorICAgICAgICAgKiAgICAgICAgICAgICAgICBzaGFkZXIKKyAgICAgICAgICogQHJldHVybiAgc2VsZgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJhc2VQcm9ncmFtQnVpbGRlciBhZGRUZXh0dXJlKFRleHR1cmVUeXBlIHRleFR5cGUsIFN0cmluZyB0ZXhOYW1lKQorICAgICAgICAgICAgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7CisgICAgICAgICAgICBpZihtVGV4dHVyZUNvdW50ID49IE1BWF9URVhUVVJFKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTWF4IHRleHR1cmUgY291bnQgZXhjZWVkZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtVGV4dHVyZVR5cGVzW21UZXh0dXJlQ291bnRdID0gdGV4VHlwZTsKKyAgICAgICAgICAgIG1UZXh0dXJlTmFtZXNbbVRleHR1cmVDb3VudF0gPSB0ZXhOYW1lOworICAgICAgICAgICAgbVRleHR1cmVDb3VudCArKzsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgaW5pdFByb2dyYW0oUHJvZ3JhbSBwKSB7CisgICAgICAgICAgICBwLm1JbnB1dHMgPSBuZXcgRWxlbWVudFttSW5wdXRDb3VudF07CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1JbnB1dHMsIDAsIHAubUlucHV0cywgMCwgbUlucHV0Q291bnQpOworICAgICAgICAgICAgcC5tT3V0cHV0cyA9IG5ldyBFbGVtZW50W21PdXRwdXRDb3VudF07CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1PdXRwdXRzLCAwLCBwLm1PdXRwdXRzLCAwLCBtT3V0cHV0Q291bnQpOworICAgICAgICAgICAgcC5tQ29uc3RhbnRzID0gbmV3IFR5cGVbbUNvbnN0YW50Q291bnRdOworICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtQ29uc3RhbnRzLCAwLCBwLm1Db25zdGFudHMsIDAsIG1Db25zdGFudENvdW50KTsKKyAgICAgICAgICAgIHAubVRleHR1cmVDb3VudCA9IG1UZXh0dXJlQ291bnQ7CisgICAgICAgICAgICBwLm1UZXh0dXJlcyA9IG5ldyBUZXh0dXJlVHlwZVttVGV4dHVyZUNvdW50XTsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobVRleHR1cmVUeXBlcywgMCwgcC5tVGV4dHVyZXMsIDAsIG1UZXh0dXJlQ291bnQpOworICAgICAgICAgICAgcC5tVGV4dHVyZU5hbWVzID0gbmV3IFN0cmluZ1ttVGV4dHVyZUNvdW50XTsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobVRleHR1cmVOYW1lcywgMCwgcC5tVGV4dHVyZU5hbWVzLCAwLCBtVGV4dHVyZUNvdW50KTsKKyAgICAgICAgfQorICAgIH0KKworfQorCisKZGlmZiAtLWdpdCBhL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbUZyYWdtZW50LmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MDQxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudC5qYXZhCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisKKy8qKgorICogQGhpZGUKKyAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICogPHA+VGhlIFJlbmRlclNjcmlwdCBmcmFnbWVudCBwcm9ncmFtLCBhbHNvIGtub3duIGFzIGZyYWdtZW50IHNoYWRlciBpcyByZXNwb25zaWJsZQorICogZm9yIG1hbmlwdWxhdGluZyBwaXhlbCBkYXRhIGluIGEgdXNlciBkZWZpbmVkIHdheS4gSXQncyBjb25zdHJ1Y3RlZCBmcm9tIGEgR0xTTAorICogc2hhZGVyIHN0cmluZyBjb250YWluaW5nIHRoZSBwcm9ncmFtIGJvZHksIHRleHR1cmVzIGlucHV0cywgYW5kIGEgVHlwZSBvYmplY3QKKyAqIHRoYXQgZGVzY3JpYmVzIHRoZSBjb25zdGFudHMgdXNlZCBieSB0aGUgcHJvZ3JhbS4gU2ltaWxhciB0byB0aGUgdmVydGV4IHByb2dyYW1zLAorICogd2hlbiBhbiBhbGxvY2F0aW9uIHdpdGggY29uc3RhbnQgaW5wdXQgdmFsdWVzIGlzIGJvdW5kIHRvIHRoZSBzaGFkZXIsIGl0cyB2YWx1ZXMKKyAqIGFyZSBzZW50IHRvIHRoZSBncmFwaGljcyBwcm9ncmFtIGF1dG9tYXRpY2FsbHkuPC9wPgorICogPHA+IFRoZSB2YWx1ZXMgaW5zaWRlIHRoZSBhbGxvY2F0aW9uIGFyZSBub3QgZXhwbGljaXRseSB0cmFja2VkLiBJZiB0aGV5IGNoYW5nZSBiZXR3ZWVuIHR3byBkcmF3CisgKiBjYWxscyB1c2luZyB0aGUgc2FtZSBwcm9ncmFtIG9iamVjdCwgdGhlIHJ1bnRpbWUgbmVlZHMgdG8gYmUgbm90aWZpZWQgb2YgdGhhdAorICogY2hhbmdlIGJ5IGNhbGxpbmcgcnNnQWxsb2NhdGlvblN5bmNBbGwgc28gaXQgY291bGQgc2VuZCB0aGUgbmV3IHZhbHVlcyB0byBoYXJkd2FyZS4KKyAqIENvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmVydGV4IGFuZCBmcmFnbWVudCBwcm9ncmFtcyBpcyBoYW5kbGVkIGludGVybmFsbHkgaW4gdGhlCisgKiBHTFNMIGNvZGUuIEZvciBleGFtcGxlLCBpZiB0aGUgZnJhZ21lbnQgcHJvZ3JhbSBpcyBleHBlY3RpbmcgYSB2YXJ5aW5nIGlucHV0IGNhbGxlZAorICogdmFyVGV4MCwgdGhlIEdMU0wgY29kZSBpbnNpZGUgdGhlIHByb2dyYW0gdmVydGV4IG11c3QgcHJvdmlkZSBpdC4KKyAqIDwvcD4KKyAqCisgKiovCitwdWJsaWMgY2xhc3MgUHJvZ3JhbUZyYWdtZW50IGV4dGVuZHMgUHJvZ3JhbSB7CisgICAgUHJvZ3JhbUZyYWdtZW50KGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBzdXBlcihpZCwgcnMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlciBleHRlbmRzIEJhc2VQcm9ncmFtQnVpbGRlciB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICogQ3JlYXRlIGEgYnVpbGRlciBvYmplY3QuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBwcm9ncmFtIHdpbGwgYmVsb25nLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgICAgICBzdXBlcihycyk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAqIENyZWF0ZXMgUHJvZ3JhbUZyYWdtZW50IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1aWxkZXIKKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiAgUHJvZ3JhbUZyYWdtZW50CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgUHJvZ3JhbUZyYWdtZW50IGNyZWF0ZSgpIHsKKyAgICAgICAgICAgIG1SUy52YWxpZGF0ZSgpOworICAgICAgICAgICAgaW50W10gdG1wID0gbmV3IGludFsobUlucHV0Q291bnQgKyBtT3V0cHV0Q291bnQgKyBtQ29uc3RhbnRDb3VudCArIG1UZXh0dXJlQ291bnQpICogMl07CisgICAgICAgICAgICBTdHJpbmdbXSB0ZXhOYW1lcyA9IG5ldyBTdHJpbmdbbVRleHR1cmVDb3VudF07CisgICAgICAgICAgICBpbnQgaWR4ID0gMDsKKworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbUlucHV0Q291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uSU5QVVQubUlEOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1JbnB1dHNbaV0uZ2V0SUQobVJTKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1PdXRwdXRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5PVVRQVVQubUlEOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1PdXRwdXRzW2ldLmdldElEKG1SUyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtQ29uc3RhbnRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5DT05TVEFOVC5tSUQ7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbUNvbnN0YW50c1tpXS5nZXRJRChtUlMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbVRleHR1cmVDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5URVhUVVJFX1RZUEUubUlEOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1UZXh0dXJlVHlwZXNbaV0ubUlEOworICAgICAgICAgICAgICAgIHRleE5hbWVzW2ldID0gbVRleHR1cmVOYW1lc1tpXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9uZyBpZCA9IG1SUy5uUHJvZ3JhbUZyYWdtZW50Q3JlYXRlKG1TaGFkZXIsIHRleE5hbWVzLCB0bXApOworICAgICAgICAgICAgUHJvZ3JhbUZyYWdtZW50IHBmID0gbmV3IFByb2dyYW1GcmFnbWVudChpZCwgbVJTKTsKKyAgICAgICAgICAgIGluaXRQcm9ncmFtKHBmKTsKKyAgICAgICAgICAgIHJldHVybiBwZjsKKyAgICAgICAgfQorICAgIH0KK30KKworCisKZGlmZiAtLWdpdCBhL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFjMzVjNQotLS0gL2Rldi9udWxsCisrKyBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisKKy8qKgorICogQGhpZGUKKyAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICogPHA+UHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbiBpcyBhIGhlbHBlciBjbGFzcyB0aGF0IHByb3ZpZGVzCisgKiBhIHdheSB0byBtYWtlIGEgc2ltcGxlIGZyYWdtZW50IHNoYWRlciB3aXRob3V0IHdyaXRpbmcgYW55CisgKiBHTFNMIGNvZGUuIFRoaXMgY2xhc3MgYWxsb3dzIGZvciBkaXNwbGF5IG9mIGNvbnN0YW50IGNvbG9yLCBpbnRlcnBvbGF0ZWQKKyAqIGNvbG9yIGZyb20gdGhlIHZlcnRleCBzaGFkZXIsIG9yIGNvbWJpbmF0aW9ucyBvZiB0aGUgYm90aAorICogYmxlbmRlZCB3aXRoIHJlc3VsdHMgb2YgdXAgdG8gdHdvIHRleHR1cmUgbG9va3Vwcy48L3AKKyAqCisgKiovCitwdWJsaWMgY2xhc3MgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbiBleHRlbmRzIFByb2dyYW1GcmFnbWVudCB7CisgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbihsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgc3VwZXIoaWQsIHJzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgSW50ZXJuYWxCdWlsZGVyIGV4dGVuZHMgQmFzZVByb2dyYW1CdWlsZGVyIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEludGVybmFsQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgICAgIHN1cGVyKHJzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICogQ3JlYXRlcyBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUKKyAgICAgICAgICogb2YgdGhlIGJ1aWxkZXIKKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24gY3JlYXRlKCkgeworICAgICAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgICAgICBpbnRbXSB0bXAgPSBuZXcgaW50WyhtSW5wdXRDb3VudCArIG1PdXRwdXRDb3VudCArIG1Db25zdGFudENvdW50ICsgbVRleHR1cmVDb3VudCkgKiAyXTsKKyAgICAgICAgICAgIFN0cmluZ1tdIHRleE5hbWVzID0gbmV3IFN0cmluZ1ttVGV4dHVyZUNvdW50XTsKKyAgICAgICAgICAgIGludCBpZHggPSAwOworCisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtSW5wdXRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5JTlBVVC5tSUQ7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbUlucHV0c1tpXS5nZXRJRChtUlMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbU91dHB1dENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLk9VVFBVVC5tSUQ7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbU91dHB1dHNbaV0uZ2V0SUQobVJTKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1Db25zdGFudENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLkNPTlNUQU5ULm1JRDsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gKGludCltQ29uc3RhbnRzW2ldLmdldElEKG1SUyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtVGV4dHVyZUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLlRFWFRVUkVfVFlQRS5tSUQ7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbVRleHR1cmVUeXBlc1tpXS5tSUQ7CisgICAgICAgICAgICAgICAgdGV4TmFtZXNbaV0gPSBtVGV4dHVyZU5hbWVzW2ldOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb25nIGlkID0gbVJTLm5Qcm9ncmFtRnJhZ21lbnRDcmVhdGUobVNoYWRlciwgdGV4TmFtZXMsIHRtcCk7CisgICAgICAgICAgICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uIHBmID0gbmV3IFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24oaWQsIG1SUyk7CisgICAgICAgICAgICBpbml0UHJvZ3JhbShwZik7CisgICAgICAgICAgICByZXR1cm4gcGY7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgeworICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhfVEVYVFVSRSA9IDI7CisgICAgICAgIGludCBtTnVtVGV4dHVyZXM7CisgICAgICAgIGJvb2xlYW4gbVBvaW50U3ByaXRlRW5hYmxlOworICAgICAgICBib29sZWFuIG1WYXJ5aW5nQ29sb3JFbmFibGU7CisgICAgICAgIFN0cmluZyBtU2hhZGVyOworICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICogRW52TW9kZSBkZXNjcmliZXMgaG93IHRleHR1cmVzIGFyZSBjb21iaW5lZCB3aXRoIHRoZSBleGlzdGluZworICAgICAgICAgKiBjb2xvciBpbiB0aGUgZml4ZWQgZnVuY3Rpb24gZnJhZ21lbnQgc2hhZGVyCisgICAgICAgICAqCisgICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIGVudW0gRW52TW9kZSB7CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgICAgICoqLworICAgICAgICAgICAgUkVQTEFDRSAoMSksCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgICAgICoqLworICAgICAgICAgICAgTU9EVUxBVEUgKDIpLAorICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICAgICAqKi8KKyAgICAgICAgICAgIERFQ0FMICgzKTsKKworICAgICAgICAgICAgaW50IG1JRDsKKyAgICAgICAgICAgIEVudk1vZGUoaW50IGlkKSB7CisgICAgICAgICAgICAgICAgbUlEID0gaWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAqIEZvcm1hdCBkZXNjcmliZXMgdGhlIHBpeGVsIGZvcm1hdCBvZiB0ZXh0dXJlcyBpbiB0aGUgZml4ZWQKKyAgICAgICAgICogZnVuY3Rpb24gZnJhZ21lbnQgc2hhZGVyIGFuZCBob3cgdGhleSBhcmUgc2FtcGxlZAorICAgICAgICAgKgorICAgICAgICAgKiovCisgICAgICAgIHB1YmxpYyBlbnVtIEZvcm1hdCB7CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgICAgICoqLworICAgICAgICAgICAgQUxQSEEgKDEpLAorICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICAgICAqKi8KKyAgICAgICAgICAgIExVTUlOQU5DRV9BTFBIQSAoMiksCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgICAgICoqLworICAgICAgICAgICAgUkdCICgzKSwKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAgICAgKiovCisgICAgICAgICAgICBSR0JBICg0KTsKKworICAgICAgICAgICAgaW50IG1JRDsKKyAgICAgICAgICAgIEZvcm1hdChpbnQgaWQpIHsKKyAgICAgICAgICAgICAgICBtSUQgPSBpZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgY2xhc3MgU2xvdCB7CisgICAgICAgICAgICBFbnZNb2RlIGVudjsKKyAgICAgICAgICAgIEZvcm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBTbG90KEVudk1vZGUgX2VudiwgRm9ybWF0IF9mbXQpIHsKKyAgICAgICAgICAgICAgICBlbnYgPSBfZW52OworICAgICAgICAgICAgICAgIGZvcm1hdCA9IF9mbXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgU2xvdFtdIG1TbG90czsKKworICAgICAgICBwcml2YXRlIHZvaWQgYnVpbGRTaGFkZXJTdHJpbmcoKSB7CisgICAgICAgICAgICBtU2hhZGVyICA9ICIvL3JzX3NoYWRlcl9pbnRlcm5hbFxuIjsKKyAgICAgICAgICAgIG1TaGFkZXIgKz0gInZhcnlpbmcgbG93cCB2ZWM0IHZhckNvbG9yO1xuIjsKKyAgICAgICAgICAgIG1TaGFkZXIgKz0gInZhcnlpbmcgdmVjMiB2YXJUZXgwO1xuIjsKKworICAgICAgICAgICAgbVNoYWRlciArPSAidm9pZCBtYWluKCkge1xuIjsKKyAgICAgICAgICAgIGlmIChtVmFyeWluZ0NvbG9yRW5hYmxlKSB7CisgICAgICAgICAgICAgICAgbVNoYWRlciArPSAiICBsb3dwIHZlYzQgY29sID0gdmFyQ29sb3I7XG4iOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtU2hhZGVyICs9ICIgIGxvd3AgdmVjNCBjb2wgPSBVTklfQ29sb3I7XG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobU51bVRleHR1cmVzICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAobVBvaW50U3ByaXRlRW5hYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgdmVjMiB0MCA9IGdsX1BvaW50Q29vcmQ7XG4iOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgdmVjMiB0MCA9IHZhclRleDAueHk7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG1OdW1UZXh0dXJlczsgaSArKykgeworICAgICAgICAgICAgICAgIHN3aXRjaChtU2xvdHNbaV0uZW52KSB7CisgICAgICAgICAgICAgICAgY2FzZSBSRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1TbG90c1tpXS5mb3JtYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBTFBIQToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgY29sLmEgPSB0ZXh0dXJlMkQoVU5JX1RleDAsIHQwKS5hO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgY29sLnJnYmEgPSB0ZXh0dXJlMkQoVU5JX1RleDAsIHQwKS5yZ2JhO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFJHQjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgY29sLnJnYiA9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLnJnYjtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSR0JBOgorICAgICAgICAgICAgICAgICAgICAgICAgbVNoYWRlciArPSAiICBjb2wucmdiYSA9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLnJnYmE7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNT0RVTEFURToKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtU2xvdHNbaV0uZm9ybWF0KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQUxQSEE6CisgICAgICAgICAgICAgICAgICAgICAgICBtU2hhZGVyICs9ICIgIGNvbC5hICo9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLmE7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgICAgICAgICAgICAgbVNoYWRlciArPSAiICBjb2wucmdiYSAqPSB0ZXh0dXJlMkQoVU5JX1RleDAsIHQwKS5yZ2JhO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFJHQjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgY29sLnJnYiAqPSB0ZXh0dXJlMkQoVU5JX1RleDAsIHQwKS5yZ2I7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUkdCQToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgY29sLnJnYmEgKj0gdGV4dHVyZTJEKFVOSV9UZXgwLCB0MCkucmdiYTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIERFQ0FMOgorICAgICAgICAgICAgICAgICAgICBtU2hhZGVyICs9ICIgIGNvbCA9IHRleHR1cmUyRChVTklfVGV4MCwgdDApO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU2hhZGVyICs9ICIgIGdsX0ZyYWdDb2xvciA9IGNvbDtcbiI7CisgICAgICAgICAgICBtU2hhZGVyICs9ICJ9XG4iOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkCisgICAgICAgICAqIENyZWF0ZXMgYSBidWlsZGVyIGZvciBmaXhlZCBmdW5jdGlvbiBmcmFnbWVudCBwcm9ncmFtCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBwcm9ncmFtIHdpbGwgYmVsb25nLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgICAgICBtUlMgPSByczsKKyAgICAgICAgICAgIG1TbG90cyA9IG5ldyBTbG90W01BWF9URVhUVVJFXTsKKyAgICAgICAgICAgIG1Qb2ludFNwcml0ZUVuYWJsZSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKiBBZGRzIGEgdGV4dHVyZSB0byBiZSBmZXRjaGVkIGFzIHBhcnQgb2YgdGhlIGZpeGVkIGZ1bmN0aW9uCisgICAgICAgICAqIGZyYWdtZW50IHByb2dyYW0KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGVudiBzcGVjaWZpZXMgaG93IHRoZSB0ZXh0dXJlIGlzIGNvbWJpbmVkIHdpdGggdGhlCisgICAgICAgICAqICAgICAgICAgICAgY3VycmVudCBjb2xvcgorICAgICAgICAgKiBAcGFyYW0gZm10IHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlIGFuZCBob3cgaXRzCisgICAgICAgICAqICAgICAgICAgICAgY29tcG9uZW50cyB3aWxsIGJlIHVzZWQgdG8gY29tYmluZSB3aXRoIHRoZQorICAgICAgICAgKiAgICAgICAgICAgIGN1cnJlbnQgY29sb3IKKyAgICAgICAgICogQHBhcmFtIHNsb3QgaW5kZXggb2YgdGhlIHRleHR1cmUgdG8gYXBwbHkgdGhlIG9wZXJhdGlvbnMgb24KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRUZXh0dXJlKEVudk1vZGUgZW52LCBGb3JtYXQgZm10LCBpbnQgc2xvdCkKKyAgICAgICAgICAgIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24geworICAgICAgICAgICAgaWYoKHNsb3QgPCAwKSB8fCAoc2xvdCA+PSBNQVhfVEVYVFVSRSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNQVhfVEVYVFVSRSBleGNlZWRlZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TbG90c1tzbG90XSA9IG5ldyBTbG90KGVudiwgZm10KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgdGV4dHVyZSBjb29yZGluYXRlIHBhc3NlZCBmcm9tIHRoZQorICAgICAgICAgKiB2ZXJ0ZXggcHJvZ3JhbSBpcyByZXBsYWNlZCB3aXRoIGFuIG9wZW5HTCBpbnRlcm5hbCBwb2ludAorICAgICAgICAgKiBzcHJpdGUgdGV4dHVyZSBjb29yZGluYXRlCisgICAgICAgICAqCisgICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0UG9pbnRTcHJpdGVUZXhDb29yZGluYXRlUmVwbGFjZW1lbnQoYm9vbGVhbiBlbmFibGUpIHsKKyAgICAgICAgICAgIG1Qb2ludFNwcml0ZUVuYWJsZSA9IGVuYWJsZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgdmFyeWluZyBjb2xvciBwYXNzZWQgZnJvbSB0aGUgdmVydGV4CisgICAgICAgICAqIHByb2dyYW0gb3IgdGhlIGNvbnN0YW50IGNvbG9yIHNldCBvbiB0aGUgZnJhZ21lbnQgcHJvZ3JhbSBpcworICAgICAgICAgKiB1c2VkIGluIHRoZSBmaW5hbCBjb2xvciBjYWxjdWxhdGlvbiBpbiB0aGUgZml4ZWQgZnVuY3Rpb24KKyAgICAgICAgICogZnJhZ21lbnQgc2hhZGVyCisgICAgICAgICAqCisgICAgICAgICAqKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0VmFyeWluZ0NvbG9yKGJvb2xlYW4gZW5hYmxlKSB7CisgICAgICAgICAgICBtVmFyeWluZ0NvbG9yRW5hYmxlID0gZW5hYmxlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICogQ3JlYXRlcyB0aGUgZml4ZWQgZnVuY3Rpb24gZnJhZ21lbnQgcHJvZ3JhbSBmcm9tIHRoZSBjdXJyZW50CisgICAgICAgICogc3RhdGUgb2YgdGhlIGJ1aWxkZXIuCisgICAgICAgICoKKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24gY3JlYXRlKCkgeworICAgICAgICAgICAgSW50ZXJuYWxCdWlsZGVyIHNiID0gbmV3IEludGVybmFsQnVpbGRlcihtUlMpOworICAgICAgICAgICAgbU51bVRleHR1cmVzID0gMDsKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVEVYVFVSRTsgaSArKykgeworICAgICAgICAgICAgICAgIGlmKG1TbG90c1tpXSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1OdW1UZXh0dXJlcyArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWlsZFNoYWRlclN0cmluZygpOworICAgICAgICAgICAgc2Iuc2V0U2hhZGVyKG1TaGFkZXIpOworCisgICAgICAgICAgICBUeXBlIGNvbnN0VHlwZSA9IG51bGw7CisgICAgICAgICAgICBpZiAoIW1WYXJ5aW5nQ29sb3JFbmFibGUpIHsKKyAgICAgICAgICAgICAgICBFbGVtZW50LkJ1aWxkZXIgYiA9IG5ldyBFbGVtZW50LkJ1aWxkZXIobVJTKTsKKyAgICAgICAgICAgICAgICBiLmFkZChFbGVtZW50LkYzMl80KG1SUyksICJDb2xvciIpOworICAgICAgICAgICAgICAgIFR5cGUuQnVpbGRlciB0eXBlQnVpbGRlciA9IG5ldyBUeXBlLkJ1aWxkZXIobVJTLCBiLmNyZWF0ZSgpKTsKKyAgICAgICAgICAgICAgICB0eXBlQnVpbGRlci5zZXRYKDEpOworICAgICAgICAgICAgICAgIGNvbnN0VHlwZSA9IHR5cGVCdWlsZGVyLmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIHNiLmFkZENvbnN0YW50KGNvbnN0VHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1OdW1UZXh0dXJlczsgaSArKykgeworICAgICAgICAgICAgICAgIHNiLmFkZFRleHR1cmUoVGV4dHVyZVR5cGUuVEVYVFVSRV8yRCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24gcGYgPSBzYi5jcmVhdGUoKTsKKyAgICAgICAgICAgIHBmLm1UZXh0dXJlQ291bnQgPSBNQVhfVEVYVFVSRTsKKyAgICAgICAgICAgIGlmICghbVZhcnlpbmdDb2xvckVuYWJsZSkgeworICAgICAgICAgICAgICAgIEFsbG9jYXRpb24gY29uc3RhbnREYXRhID0gQWxsb2NhdGlvbi5jcmVhdGVUeXBlZChtUlMsY29uc3RUeXBlKTsKKyAgICAgICAgICAgICAgICBGaWVsZFBhY2tlciBmcCA9IG5ldyBGaWVsZFBhY2tlcigxNik7CisgICAgICAgICAgICAgICAgRmxvYXQ0IGY0ID0gbmV3IEZsb2F0NCgxLmYsIDEuZiwgMS5mLCAxLmYpOworICAgICAgICAgICAgICAgIGZwLmFkZEYzMihmNCk7CisgICAgICAgICAgICAgICAgY29uc3RhbnREYXRhLnNldEZyb21GaWVsZFBhY2tlcigwLCBmcCk7CisgICAgICAgICAgICAgICAgcGYuYmluZENvbnN0YW50cyhjb25zdGFudERhdGEsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBmOworICAgICAgICB9CisgICAgfQorfQorCisKKworCmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1SYXN0ZXIuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVJhc3Rlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjN2M5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1SYXN0ZXIuamF2YQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKKworLyoqCisgKiBAaGlkZQorICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgKiBQcm9ncmFtIHJhc3RlciBpcyBwcmltYXJpbHkgdXNlZCB0byBzcGVjaWZ5IHdoZXRoZXIgcG9pbnQgc3ByaXRlcyBhcmUgZW5hYmxlZCBhbmQgdG8gY29udHJvbAorICogdGhlIGN1bGxpbmcgbW9kZS4gQnkgZGVmYXVsdCwgYmFjayBmYWNlcyBhcmUgY3VsbGVkLgorICoqLworcHVibGljIGNsYXNzIFByb2dyYW1SYXN0ZXIgZXh0ZW5kcyBCYXNlT2JqIHsKKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqKi8KKyAgICBwdWJsaWMgZW51bSBDdWxsTW9kZSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICoqLworICAgICAgICBCQUNLICgwKSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKiovCisgICAgICAgIEZST05UICgxKSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKiovCisgICAgICAgIE5PTkUgKDIpOworCisgICAgICAgIGludCBtSUQ7CisgICAgICAgIEN1bGxNb2RlKGludCBpZCkgeworICAgICAgICAgICAgbUlEID0gaWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sZWFuIG1Qb2ludFNwcml0ZTsKKyAgICBDdWxsTW9kZSBtQ3VsbE1vZGU7CisKKyAgICBQcm9ncmFtUmFzdGVyKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBzdXBlcihpZCwgcnMpOworCisgICAgICAgIG1Qb2ludFNwcml0ZSA9IGZhbHNlOworICAgICAgICBtQ3VsbE1vZGUgPSBDdWxsTW9kZS5CQUNLOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHZlcnRpY2VzIGFyZSByZW5kZXJlZCBhcyBzY3JlZW4gYWxpZ25lZAorICAgICAqIGVsZW1lbnRzIG9mIGEgc3BlY2lmaWVkIHNpemUKKyAgICAgKiBAcmV0dXJuIHdoZXRoZXIgcG9pbnQgc3ByaXRlcyBhcmUgZW5hYmxlZAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzUG9pbnRTcHJpdGVFbmFibGVkKCkgeworICAgICAgICByZXR1cm4gbVBvaW50U3ByaXRlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIFNwZWNpZmllcyBob3cgdHJpYW5nbGVzIGFyZSBjdWxsZWQgYmFzZWQgb24gdGhlaXIgb3JpZW50YXRpb24KKyAgICAgKiBAcmV0dXJuIGN1bGwgbW9kZQorICAgICAqLworICAgIHB1YmxpYyBDdWxsTW9kZSBnZXRDdWxsTW9kZSgpIHsKKyAgICAgICAgcmV0dXJuIG1DdWxsTW9kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFByb2dyYW1SYXN0ZXIgQ1VMTF9CQUNLKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tUHJvZ3JhbVJhc3Rlcl9DVUxMX0JBQ0sgPT0gbnVsbCkgeworICAgICAgICAgICAgUHJvZ3JhbVJhc3Rlci5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJvZ3JhbVJhc3Rlci5CdWlsZGVyKHJzKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0Q3VsbE1vZGUoQ3VsbE1vZGUuQkFDSyk7CisgICAgICAgICAgICBycy5tUHJvZ3JhbVJhc3Rlcl9DVUxMX0JBQ0sgPSBidWlsZGVyLmNyZWF0ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tUHJvZ3JhbVJhc3Rlcl9DVUxMX0JBQ0s7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBQcm9ncmFtUmFzdGVyIENVTExfRlJPTlQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1Qcm9ncmFtUmFzdGVyX0NVTExfRlJPTlQgPT0gbnVsbCkgeworICAgICAgICAgICAgUHJvZ3JhbVJhc3Rlci5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJvZ3JhbVJhc3Rlci5CdWlsZGVyKHJzKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0Q3VsbE1vZGUoQ3VsbE1vZGUuRlJPTlQpOworICAgICAgICAgICAgcnMubVByb2dyYW1SYXN0ZXJfQ1VMTF9GUk9OVCA9IGJ1aWxkZXIuY3JlYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1Qcm9ncmFtUmFzdGVyX0NVTExfRlJPTlQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBQcm9ncmFtUmFzdGVyIENVTExfTk9ORShSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubVByb2dyYW1SYXN0ZXJfQ1VMTF9OT05FID09IG51bGwpIHsKKyAgICAgICAgICAgIFByb2dyYW1SYXN0ZXIuQnVpbGRlciBidWlsZGVyID0gbmV3IFByb2dyYW1SYXN0ZXIuQnVpbGRlcihycyk7CisgICAgICAgICAgICBidWlsZGVyLnNldEN1bGxNb2RlKEN1bGxNb2RlLk5PTkUpOworICAgICAgICAgICAgcnMubVByb2dyYW1SYXN0ZXJfQ1VMTF9OT05FID0gYnVpbGRlci5jcmVhdGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubVByb2dyYW1SYXN0ZXJfQ1VMTF9OT05FOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlciB7CisgICAgICAgIFJlbmRlclNjcmlwdCBtUlM7CisgICAgICAgIGJvb2xlYW4gbVBvaW50U3ByaXRlOworICAgICAgICBDdWxsTW9kZSBtQ3VsbE1vZGU7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgICAgICBtUlMgPSByczsKKyAgICAgICAgICAgIG1Qb2ludFNwcml0ZSA9IGZhbHNlOworICAgICAgICAgICAgbUN1bGxNb2RlID0gQ3VsbE1vZGUuQkFDSzsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFBvaW50U3ByaXRlRW5hYmxlZChib29sZWFuIGVuYWJsZSkgeworICAgICAgICAgICAgbVBvaW50U3ByaXRlID0gZW5hYmxlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRDdWxsTW9kZShDdWxsTW9kZSBtKSB7CisgICAgICAgICAgICBtQ3VsbE1vZGUgPSBtOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgUHJvZ3JhbVJhc3RlciBjcmVhdGUoKSB7CisgICAgICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgICAgIGxvbmcgaWQgPSBtUlMublByb2dyYW1SYXN0ZXJDcmVhdGUobVBvaW50U3ByaXRlLCBtQ3VsbE1vZGUubUlEKTsKKyAgICAgICAgICAgIFByb2dyYW1SYXN0ZXIgcHJvZ3JhbVJhc3RlciA9IG5ldyBQcm9ncmFtUmFzdGVyKGlkLCBtUlMpOworICAgICAgICAgICAgcHJvZ3JhbVJhc3Rlci5tUG9pbnRTcHJpdGUgPSBtUG9pbnRTcHJpdGU7CisgICAgICAgICAgICBwcm9ncmFtUmFzdGVyLm1DdWxsTW9kZSA9IG1DdWxsTW9kZTsKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtUmFzdGVyOworICAgICAgICB9CisgICAgfQorCit9CisKKworCisKKworCmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZS5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzBjNTFiCi0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUuamF2YQpAQCAtMCwwICsxLDQ0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKKworLyoqCisgKiBAaGlkZQorICogPHA+UHJvZ3JhbVN0b3JlIGNvbnRhaW5zIGEgc2V0IG9mIHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIGhvdworICogdGhlIGdyYXBoaWNzIGhhcmR3YXJlIGhhbmRsZXMgd3JpdGVzIHRvIHRoZSBmcmFtZWJ1ZmZlci4KKyAqIEl0IGNvdWxkIGJlIHVzZWQgdG86PC9wPgorICogPHVsPgorICogICA8bGk+ZW5hYmxlL2Rpc2FibGUgZGVwdGggdGVzdGluZzwvbGk+CisgKiAgIDxsaT5zcGVjaWZ5IHdoZWF0aGVyIGRlcHRoIHdyaXRlcyBhcmUgcGVyZm9ybWVkPC9saT4KKyAqICAgPGxpPnNldHVwIHZhcmlvdXMgYmxlbmRpbmcgbW9kZXMgZm9yIHVzZSBpbiBlZmZlY3RzIGxpa2UKKyAqICAgICB0cmFuc3BhcmVuY3k8L2xpPgorICogICA8bGk+ZGVmaW5lIHdyaXRlIG1hc2tzIGZvciBjb2xvciBjb21wb25lbnRzIHdyaXR0ZW4gaW50byB0aGUKKyAqICAgICBmcmFtZWJ1ZmZlcjwvbGk+CisgKiAgPC91bD4KKyAqCisgKiovCitwdWJsaWMgY2xhc3MgUHJvZ3JhbVN0b3JlIGV4dGVuZHMgQmFzZU9iaiB7CisgICAgLyoqCisgICAgKiBTcGVjaWZpZXMgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBmcmFnbWVudAorICAgICogd2lsbCBiZSBkcmF3biBkdXJpbmcgdGhlIGRlcHRoIHRlc3Rpbmcgc3RhZ2UgaW4gdGhlIHJlbmRlcmluZworICAgICogcGlwZWxpbmUgYnkgY29tcGFyaW5nIGl0cyB2YWx1ZSB3aXRoIHRoYXQgYWxyZWFkeSBpbiB0aGUgZGVwdGgKKyAgICAqIGJ1ZmZlci4gRGVwdGhGdW5jIGlzIG9ubHkgdmFsaWQgd2hlbiBkZXB0aCBidWZmZXIgaXMgcHJlc2VudAorICAgICogYW5kIGRlcHRoIHRlc3RpbmcgaXMgZW5hYmxlZAorICAgICovCisgICAgcHVibGljIGVudW0gRGVwdGhGdW5jIHsKKworICAgICAgICAvKioKKyAgICAgICAgKiBBbHdheXMgZHJhd24KKyAgICAgICAgKi8KKyAgICAgICAgQUxXQVlTICgwKSwKKyAgICAgICAgLyoqCisgICAgICAgICogRHJhd24gaWYgdGhlIGluY29taW5nIGRlcHRoIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGF0IGluIHRoZQorICAgICAgICAqIGRlcHRoIGJ1ZmZlcgorICAgICAgICAqLworICAgICAgICBMRVNTICgxKSwKKyAgICAgICAgLyoqCisgICAgICAgICogRHJhd24gaWYgdGhlIGluY29taW5nIGRlcHRoIHZhbHVlIGlzIGxlc3Mgb3IgZXF1YWwgdG8gdGhhdCBpbgorICAgICAgICAqIHRoZSBkZXB0aCBidWZmZXIKKyAgICAgICAgKi8KKyAgICAgICAgTEVTU19PUl9FUVVBTCAoMiksCisgICAgICAgIC8qKgorICAgICAgICAqIERyYXduIGlmIHRoZSBpbmNvbWluZyBkZXB0aCB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhhdCBpbiB0aGUKKyAgICAgICAgKiBkZXB0aCBidWZmZXIKKyAgICAgICAgKi8KKyAgICAgICAgR1JFQVRFUiAoMyksCisgICAgICAgIC8qKgorICAgICAgICAqIERyYXduIGlmIHRoZSBpbmNvbWluZyBkZXB0aCB2YWx1ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoYXQKKyAgICAgICAgKiBpbiB0aGUgZGVwdGggYnVmZmVyCisgICAgICAgICovCisgICAgICAgIEdSRUFURVJfT1JfRVFVQUwgKDQpLAorICAgICAgICAvKioKKyAgICAgICAgKiBEcmF3biBpZiB0aGUgaW5jb21pbmcgZGVwdGggdmFsdWUgaXMgZXF1YWwgdG8gdGhhdCBpbiB0aGUKKyAgICAgICAgKiBkZXB0aCBidWZmZXIKKyAgICAgICAgKi8KKyAgICAgICAgRVFVQUwgKDUpLAorICAgICAgICAvKioKKyAgICAgICAgKiBEcmF3biBpZiB0aGUgaW5jb21pbmcgZGVwdGggdmFsdWUgaXMgbm90IGVxdWFsIHRvIHRoYXQgaW4gdGhlCisgICAgICAgICogZGVwdGggYnVmZmVyCisgICAgICAgICovCisgICAgICAgIE5PVF9FUVVBTCAoNik7CisKKyAgICAgICAgaW50IG1JRDsKKyAgICAgICAgRGVwdGhGdW5jKGludCBpZCkgeworICAgICAgICAgICAgbUlEID0gaWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAqIFNwZWNpZmllcyB0aGUgZnVuY3Rpb25zIHVzZWQgdG8gY29tYmluZSBpbmNvbWluZyBwaXhlbHMgd2l0aAorICAgICogdGhvc2UgYWxyZWFkeSBpbiB0aGUgZnJhbWUgYnVmZmVyLgorICAgICoKKyAgICAqIEJsZW5kU3JjRnVuYyBkZXNjcmliZXMgaG93IHRoZSBjb2VmZmljaWVudCB1c2VkIHRvIHNjYWxlIHRoZQorICAgICogc291cmNlIHBpeGVscyBkdXJpbmcgdGhlIGJsZW5kaW5nIG9wZXJhdGlvbiBpcyBjb21wdXRlZAorICAgICoKKyAgICAqLworICAgIHB1YmxpYyBlbnVtIEJsZW5kU3JjRnVuYyB7CisgICAgICAgIFpFUk8gKDApLAorICAgICAgICBPTkUgKDEpLAorICAgICAgICBEU1RfQ09MT1IgKDIpLAorICAgICAgICBPTkVfTUlOVVNfRFNUX0NPTE9SICgzKSwKKyAgICAgICAgU1JDX0FMUEhBICg0KSwKKyAgICAgICAgT05FX01JTlVTX1NSQ19BTFBIQSAoNSksCisgICAgICAgIERTVF9BTFBIQSAoNiksCisgICAgICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgKDcpLAorICAgICAgICBTUkNfQUxQSEFfU0FUVVJBVEUgKDgpOworCisgICAgICAgIGludCBtSUQ7CisgICAgICAgIEJsZW5kU3JjRnVuYyhpbnQgaWQpIHsKKyAgICAgICAgICAgIG1JRCA9IGlkOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgKiBTcGVjaWZpZXMgdGhlIGZ1bmN0aW9ucyB1c2VkIHRvIGNvbWJpbmUgaW5jb21pbmcgcGl4ZWxzIHdpdGgKKyAgICAqIHRob3NlIGFscmVhZHkgaW4gdGhlIGZyYW1lIGJ1ZmZlci4KKyAgICAqCisgICAgKiBCbGVuZERzdEZ1bmMgZGVzY3JpYmVzIGhvdyB0aGUgY29lZmZpY2llbnQgdXNlZCB0byBzY2FsZSB0aGUKKyAgICAqIHBpeGVscyBhbHJlYWR5IGluIHRoZSBmcmFtZWJ1ZmZlciBpcyBjb21wdXRlZCBkdXJpbmcgdGhlCisgICAgKiBibGVuZGluZyBvcGVyYXRpb24KKyAgICAqCisgICAgKi8KKyAgICBwdWJsaWMgZW51bSBCbGVuZERzdEZ1bmMgeworICAgICAgICBaRVJPICgwKSwKKyAgICAgICAgT05FICgxKSwKKyAgICAgICAgU1JDX0NPTE9SICgyKSwKKyAgICAgICAgT05FX01JTlVTX1NSQ19DT0xPUiAoMyksCisgICAgICAgIFNSQ19BTFBIQSAoNCksCisgICAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKDUpLAorICAgICAgICBEU1RfQUxQSEEgKDYpLAorICAgICAgICBPTkVfTUlOVVNfRFNUX0FMUEhBICg3KTsKKworICAgICAgICBpbnQgbUlEOworICAgICAgICBCbGVuZERzdEZ1bmMoaW50IGlkKSB7CisgICAgICAgICAgICBtSUQgPSBpZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIERlcHRoRnVuYyBtRGVwdGhGdW5jOworICAgIGJvb2xlYW4gbURlcHRoTWFzazsKKyAgICBib29sZWFuIG1Db2xvck1hc2tSOworICAgIGJvb2xlYW4gbUNvbG9yTWFza0c7CisgICAgYm9vbGVhbiBtQ29sb3JNYXNrQjsKKyAgICBib29sZWFuIG1Db2xvck1hc2tBOworICAgIEJsZW5kU3JjRnVuYyBtQmxlbmRTcmM7CisgICAgQmxlbmREc3RGdW5jIG1CbGVuZERzdDsKKyAgICBib29sZWFuIG1EaXRoZXI7CisKKyAgICBQcm9ncmFtU3RvcmUoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgc3VwZXIoaWQsIHJzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFJldHVybnMgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gdGVzdCB3cml0aW5nIGludG8gdGhlIGRlcHRoCisgICAgKiBidWZmZXIKKyAgICAqIEByZXR1cm4gZGVwdGggZnVuY3Rpb24KKyAgICAqLworICAgIHB1YmxpYyBEZXB0aEZ1bmMgZ2V0RGVwdGhGdW5jKCkgeworICAgICAgICByZXR1cm4gbURlcHRoRnVuYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFF1ZXJpZXMgd2hldGhlciB3cml0ZXMgYXJlIGVuYWJsZWQgaW50byB0aGUgZGVwdGggYnVmZmVyCisgICAgKiBAcmV0dXJuIGRlcHRoIG1hc2sKKyAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzRGVwdGhNYXNrRW5hYmxlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1EZXB0aE1hc2s7CisgICAgfQorCisgICAgLyoqCisgICAgKiBRdWVyaWVzIHdoZXRoZXIgcmVkIGNoYW5uZWwgaXMgd3JpdHRlbgorICAgICogQHJldHVybiByZWQgY29sb3IgY2hhbm5lbCBtYXNrCisgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0NvbG9yTWFza1JlZEVuYWJsZWQoKSB7CisgICAgICAgIHJldHVybiBtQ29sb3JNYXNrUjsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFF1ZXJpZXMgd2hldGhlciBncmVlbiBjaGFubmVsIGlzIHdyaXR0ZW4KKyAgICAqIEByZXR1cm4gZ3JlZW4gY29sb3IgY2hhbm5lbCBtYXNrCisgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0NvbG9yTWFza0dyZWVuRW5hYmxlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1Db2xvck1hc2tHOworICAgIH0KKworICAgIC8qKgorICAgICogUXVlcmllcyB3aGV0aGVyIGJsdWUgY2hhbm5lbCBpcyB3cml0dGVuCisgICAgKiBAcmV0dXJuIGJsdWUgY29sb3IgY2hhbm5lbCBtYXNrCisgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0NvbG9yTWFza0JsdWVFbmFibGVkKCkgeworICAgICAgICByZXR1cm4gbUNvbG9yTWFza0I7CisgICAgfQorCisgICAgLyoqCisgICAgKiBRdWVyaWVzIHdoZXRoZXIgYWxwaGEgY2hhbm5lbCBpcyB3cml0dGVuCisgICAgKiBAcmV0dXJuIGFscGhhIGNoYW5uZWwgbWFzaworICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNDb2xvck1hc2tBbHBoYUVuYWJsZWQoKSB7CisgICAgICAgIHJldHVybiBtQ29sb3JNYXNrQTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFNwZWNpZmllcyBob3cgdGhlIHNvdXJjZSBibGVuZGluZyBmYWN0b3IgaXMgY29tcHV0ZWQKKyAgICAqIEByZXR1cm4gc291cmNlIGJsZW5kIGZ1bmN0aW9uCisgICAgKi8KKyAgICBwdWJsaWMgQmxlbmRTcmNGdW5jIGdldEJsZW5kU3JjRnVuYygpIHsKKyAgICAgICAgcmV0dXJuIG1CbGVuZFNyYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFNwZWNpZmllcyBob3cgdGhlIGRlc3RpbmF0aW9uIGJsZW5kaW5nIGZhY3RvciBpcyBjb21wdXRlZAorICAgICogQHJldHVybiBkZXN0aW5hdGlvbiBibGVuZCBmdW5jdGlvbgorICAgICovCisgICAgcHVibGljIEJsZW5kRHN0RnVuYyBnZXRCbGVuZERzdEZ1bmMoKSB7CisgICAgICAgIHJldHVybiBtQmxlbmREc3Q7CisgICAgfQorCisgICAgLyoqCisgICAgKiBTcGVjaWZpZXMgd2hldGhlciBjb2xvcnMgYXJlIGRpdGhlcmVkIGJlZm9yZSB3cml0aW5nIGludG8gdGhlCisgICAgKiBmcmFtZWJ1ZmZlcgorICAgICogQHJldHVybiB3aGV0aGVyIGRpdGhlciBpcyBlbmFibGVkCisgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0RpdGhlckVuYWJsZWQoKSB7CisgICAgICAgIHJldHVybiBtRGl0aGVyOworICAgIH0KKworICAgIC8qKgorICAgICogUmV0dXJucyBhIHByZS1kZWZpbmVkIHByb2dyYW0gc3RvcmUgb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZworICAgICogY2hhcmFjdGVyaXN0aWNzOgorICAgICogIC0gaW5jb21pbmcgcGl4ZWxzIGFyZSBkcmF3biBpZiB0aGVpciBkZXB0aCB2YWx1ZSBpcyBsZXNzIHRoYW4KKyAgICAqICAgIHRoZSBzdG9yZWQgdmFsdWUgaW4gdGhlIGRlcHRoIGJ1ZmZlci4gSWYgdGhlIHBpeGVsIGlzCisgICAgKiAgICBkcmF3biwgaXRzIHZhbHVlIGlzIGFsc28gc3RvcmVkIGluIHRoZSBkZXB0aCBidWZmZXIKKyAgICAqICAtIGluY29taW5nIHBpeGVscyBvdmVycmlkZSB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBjb2xvcgorICAgICogICAgYnVmZmVyIGlmIGl0IHBhc3NlcyB0aGUgZGVwdGggdGVzdAorICAgICoKKyAgICAqICBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgcHJvZ3JhbSB3aWxsIGJlbG9uZy4KKyAgICAqKi8KKyAgICBwdWJsaWMgc3RhdGljIFByb2dyYW1TdG9yZSBCTEVORF9OT05FX0RFUFRIX1RFU1QoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1Qcm9ncmFtU3RvcmVfQkxFTkRfTk9ORV9ERVBUSF9URVNUID09IG51bGwpIHsKKyAgICAgICAgICAgIFByb2dyYW1TdG9yZS5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJvZ3JhbVN0b3JlLkJ1aWxkZXIocnMpOworICAgICAgICAgICAgYnVpbGRlci5zZXREZXB0aEZ1bmMoUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYy5MRVNTKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0QmxlbmRGdW5jKEJsZW5kU3JjRnVuYy5PTkUsIEJsZW5kRHN0RnVuYy5aRVJPKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0RGl0aGVyRW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICBidWlsZGVyLnNldERlcHRoTWFza0VuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICBycy5tUHJvZ3JhbVN0b3JlX0JMRU5EX05PTkVfREVQVEhfVEVTVCA9IGJ1aWxkZXIuY3JlYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1Qcm9ncmFtU3RvcmVfQkxFTkRfTk9ORV9ERVBUSF9URVNUOworICAgIH0KKyAgICAvKioKKyAgICAqIFJldHVybnMgYSBwcmUtZGVmaW5lZCBwcm9ncmFtIHN0b3JlIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcKKyAgICAqIGNoYXJhY3RlcmlzdGljczoKKyAgICAqICAtIGluY29taW5nIHBpeGVscyBhbHdheXMgcGFzcyB0aGUgZGVwdGggdGVzdCBhbmQgdGhlaXIgdmFsdWUKKyAgICAqICAgIGlzIG5vdCBzdG9yZWQgaW4gdGhlIGRlcHRoIGJ1ZmZlcgorICAgICogIC0gaW5jb21pbmcgcGl4ZWxzIG92ZXJyaWRlIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIGNvbG9yCisgICAgKiAgICBidWZmZXIKKyAgICAqCisgICAgKiAgQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHByb2dyYW0gd2lsbCBiZWxvbmcuCisgICAgKiovCisgICAgcHVibGljIHN0YXRpYyBQcm9ncmFtU3RvcmUgQkxFTkRfTk9ORV9ERVBUSF9OT05FKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tUHJvZ3JhbVN0b3JlX0JMRU5EX05PTkVfREVQVEhfTk9fREVQVEggPT0gbnVsbCkgeworICAgICAgICAgICAgUHJvZ3JhbVN0b3JlLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBQcm9ncmFtU3RvcmUuQnVpbGRlcihycyk7CisgICAgICAgICAgICBidWlsZGVyLnNldERlcHRoRnVuYyhQcm9ncmFtU3RvcmUuRGVwdGhGdW5jLkFMV0FZUyk7CisgICAgICAgICAgICBidWlsZGVyLnNldEJsZW5kRnVuYyhCbGVuZFNyY0Z1bmMuT05FLCBCbGVuZERzdEZ1bmMuWkVSTyk7CisgICAgICAgICAgICBidWlsZGVyLnNldERpdGhlckVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgYnVpbGRlci5zZXREZXB0aE1hc2tFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgIHJzLm1Qcm9ncmFtU3RvcmVfQkxFTkRfTk9ORV9ERVBUSF9OT19ERVBUSCA9IGJ1aWxkZXIuY3JlYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1Qcm9ncmFtU3RvcmVfQkxFTkRfTk9ORV9ERVBUSF9OT19ERVBUSDsKKyAgICB9CisgICAgLyoqCisgICAgKiBSZXR1cm5zIGEgcHJlLWRlZmluZWQgcHJvZ3JhbSBzdG9yZSBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nCisgICAgKiBjaGFyYWN0ZXJpc3RpY3M6CisgICAgKiAgLSBpbmNvbWluZyBwaXhlbHMgYXJlIGRyYXduIGlmIHRoZWlyIGRlcHRoIHZhbHVlIGlzIGxlc3MgdGhhbgorICAgICogICAgdGhlIHN0b3JlZCB2YWx1ZSBpbiB0aGUgZGVwdGggYnVmZmVyLiBJZiB0aGUgcGl4ZWwgaXMKKyAgICAqICAgIGRyYXduLCBpdHMgdmFsdWUgaXMgYWxzbyBzdG9yZWQgaW4gdGhlIGRlcHRoIGJ1ZmZlcgorICAgICogIC0gaWYgdGhlIGluY29taW5nIChTb3VyY2UpIHBpeGVsIHBhc3NlcyBkZXB0aCB0ZXN0LCBpdHMgdmFsdWUKKyAgICAqICAgIGlzIGNvbWJpbmVkIHdpdGggdGhlIHN0b3JlZCBjb2xvciAoRGVzdCkgdXNpbmcgdGhlCisgICAgKiAgICBmb2xsb3dpbmcgZm9ybXVsYQorICAgICogIEZpbmFsLlJHQiA9IFNvdXJjZS5SR0IgKiBTb3VyY2UuQSArIERlc3QuUkdCICogKDEgLSBTb3VyY2UuQSkKKyAgICAqCisgICAgKiAgQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHByb2dyYW0gd2lsbCBiZWxvbmcuCisgICAgKiovCisgICAgcHVibGljIHN0YXRpYyBQcm9ncmFtU3RvcmUgQkxFTkRfQUxQSEFfREVQVEhfVEVTVChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubVByb2dyYW1TdG9yZV9CTEVORF9BTFBIQV9ERVBUSF9URVNUID09IG51bGwpIHsKKyAgICAgICAgICAgIFByb2dyYW1TdG9yZS5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJvZ3JhbVN0b3JlLkJ1aWxkZXIocnMpOworICAgICAgICAgICAgYnVpbGRlci5zZXREZXB0aEZ1bmMoUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYy5MRVNTKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0QmxlbmRGdW5jKEJsZW5kU3JjRnVuYy5TUkNfQUxQSEEsIEJsZW5kRHN0RnVuYy5PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0RGl0aGVyRW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICBidWlsZGVyLnNldERlcHRoTWFza0VuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICBycy5tUHJvZ3JhbVN0b3JlX0JMRU5EX0FMUEhBX0RFUFRIX1RFU1QgPSBidWlsZGVyLmNyZWF0ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tUHJvZ3JhbVN0b3JlX0JMRU5EX0FMUEhBX0RFUFRIX1RFU1Q7CisgICAgfQorICAgIC8qKgorICAgICogUmV0dXJucyBhIHByZS1kZWZpbmVkIHByb2dyYW0gc3RvcmUgb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZworICAgICogY2hhcmFjdGVyaXN0aWNzOgorICAgICogIC0gaW5jb21pbmcgcGl4ZWxzIGFsd2F5cyBwYXNzIHRoZSBkZXB0aCB0ZXN0IGFuZCB0aGVpciB2YWx1ZQorICAgICogICAgaXMgbm90IHN0b3JlZCBpbiB0aGUgZGVwdGggYnVmZmVyCisgICAgKiAgLSBpbmNvbWluZyBwaXhlbCdzIHZhbHVlIGlzIGNvbWJpbmVkIHdpdGggdGhlIHN0b3JlZCBjb2xvcgorICAgICogICAgKERlc3QpIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybXVsYQorICAgICogIEZpbmFsLlJHQiA9IFNvdXJjZS5SR0IgKiBTb3VyY2UuQSArIERlc3QuUkdCICogKDEgLSBTb3VyY2UuQSkKKyAgICAqCisgICAgKiAgQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHByb2dyYW0gd2lsbCBiZWxvbmcuCisgICAgKiovCisgICAgcHVibGljIHN0YXRpYyBQcm9ncmFtU3RvcmUgQkxFTkRfQUxQSEFfREVQVEhfTk9ORShSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubVByb2dyYW1TdG9yZV9CTEVORF9BTFBIQV9ERVBUSF9OT19ERVBUSCA9PSBudWxsKSB7CisgICAgICAgICAgICBQcm9ncmFtU3RvcmUuQnVpbGRlciBidWlsZGVyID0gbmV3IFByb2dyYW1TdG9yZS5CdWlsZGVyKHJzKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0RGVwdGhGdW5jKFByb2dyYW1TdG9yZS5EZXB0aEZ1bmMuQUxXQVlTKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0QmxlbmRGdW5jKEJsZW5kU3JjRnVuYy5TUkNfQUxQSEEsIEJsZW5kRHN0RnVuYy5PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0RGl0aGVyRW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICBidWlsZGVyLnNldERlcHRoTWFza0VuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgcnMubVByb2dyYW1TdG9yZV9CTEVORF9BTFBIQV9ERVBUSF9OT19ERVBUSCA9IGJ1aWxkZXIuY3JlYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1Qcm9ncmFtU3RvcmVfQkxFTkRfQUxQSEFfREVQVEhfTk9fREVQVEg7CisgICAgfQorCisgICAgLyoqCisgICAgKiBCdWlsZGVyIGNsYXNzIGZvciBQcm9ncmFtU3RvcmUgb2JqZWN0LiBJZiB0aGUgYnVpbGRlciBpcyBsZWZ0CisgICAgKiBlbXB0eSwgdGhlIGVxdWl2YWxlbnQgb2YgQkxFTkRfTk9ORV9ERVBUSF9OT05FIHdvdWxkIGJlCisgICAgKiByZXR1cm5lZAorICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKKyAgICAgICAgUmVuZGVyU2NyaXB0IG1SUzsKKyAgICAgICAgRGVwdGhGdW5jIG1EZXB0aEZ1bmM7CisgICAgICAgIGJvb2xlYW4gbURlcHRoTWFzazsKKyAgICAgICAgYm9vbGVhbiBtQ29sb3JNYXNrUjsKKyAgICAgICAgYm9vbGVhbiBtQ29sb3JNYXNrRzsKKyAgICAgICAgYm9vbGVhbiBtQ29sb3JNYXNrQjsKKyAgICAgICAgYm9vbGVhbiBtQ29sb3JNYXNrQTsKKyAgICAgICAgQmxlbmRTcmNGdW5jIG1CbGVuZFNyYzsKKyAgICAgICAgQmxlbmREc3RGdW5jIG1CbGVuZERzdDsKKyAgICAgICAgYm9vbGVhbiBtRGl0aGVyOworCisgICAgICAgIHB1YmxpYyBCdWlsZGVyKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICAgICAgbVJTID0gcnM7CisgICAgICAgICAgICBtRGVwdGhGdW5jID0gRGVwdGhGdW5jLkFMV0FZUzsKKyAgICAgICAgICAgIG1EZXB0aE1hc2sgPSBmYWxzZTsKKyAgICAgICAgICAgIG1Db2xvck1hc2tSID0gdHJ1ZTsKKyAgICAgICAgICAgIG1Db2xvck1hc2tHID0gdHJ1ZTsKKyAgICAgICAgICAgIG1Db2xvck1hc2tCID0gdHJ1ZTsKKyAgICAgICAgICAgIG1Db2xvck1hc2tBID0gdHJ1ZTsKKyAgICAgICAgICAgIG1CbGVuZFNyYyA9IEJsZW5kU3JjRnVuYy5PTkU7CisgICAgICAgICAgICBtQmxlbmREc3QgPSBCbGVuZERzdEZ1bmMuWkVSTzsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIFNwZWNpZmllcyB0aGUgZGVwdGggdGVzdGluZyBiZWhhdmlvcgorICAgICAgICAqCisgICAgICAgICogQHBhcmFtIGZ1bmMgZnVuY3Rpb24gdXNlZCBmb3IgZGVwdGggdGVzdGluZworICAgICAgICAqCisgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldERlcHRoRnVuYyhEZXB0aEZ1bmMgZnVuYykgeworICAgICAgICAgICAgbURlcHRoRnVuYyA9IGZ1bmM7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEVuYWJsZXMgd3JpdGVzIGludG8gdGhlIGRlcHRoIGJ1ZmZlcgorICAgICAgICAqCisgICAgICAgICogQHBhcmFtIGVuYWJsZSBzcGVjaWZpZXMgd2hldGhlciBkZXB0aCB3cml0ZXMgYXJlCisgICAgICAgICogICAgICAgICBlbmFibGVkIG9yIGRpc2FibGVkCisgICAgICAgICoKKyAgICAgICAgKiBAcmV0dXJuIHRoaXMKKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RGVwdGhNYXNrRW5hYmxlZChib29sZWFuIGVuYWJsZSkgeworICAgICAgICAgICAgbURlcHRoTWFzayA9IGVuYWJsZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICogRW5hYmxlcyB3cml0ZXMgaW50byB0aGUgY29sb3IgYnVmZmVyCisgICAgICAgICoKKyAgICAgICAgKiBAcGFyYW0gciBzcGVjaWZpZXMgd2hldGhlciByZWQgY2hhbm5lbCBpcyB3cml0dGVuCisgICAgICAgICogQHBhcmFtIGcgc3BlY2lmaWVzIHdoZXRoZXIgZ3JlZW4gY2hhbm5lbCBpcyB3cml0dGVuCisgICAgICAgICogQHBhcmFtIGIgc3BlY2lmaWVzIHdoZXRoZXIgYmx1ZSBjaGFubmVsIGlzIHdyaXR0ZW4KKyAgICAgICAgKiBAcGFyYW0gYSBzcGVjaWZpZXMgd2hldGhlciBhbHBoYSBjaGFubmVsIGlzIHdyaXR0ZW4KKyAgICAgICAgKgorICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRDb2xvck1hc2tFbmFibGVkKGJvb2xlYW4gciwgYm9vbGVhbiBnLCBib29sZWFuIGIsIGJvb2xlYW4gYSkgeworICAgICAgICAgICAgbUNvbG9yTWFza1IgPSByOworICAgICAgICAgICAgbUNvbG9yTWFza0cgPSBnOworICAgICAgICAgICAgbUNvbG9yTWFza0IgPSBiOworICAgICAgICAgICAgbUNvbG9yTWFza0EgPSBhOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBTcGVjaWZpZXMgaG93IGluY29taW5nIHBpeGVscyBhcmUgY29tYmluZWQgd2l0aCB0aGUgcGl4ZWxzCisgICAgICAgICogc3RvcmVkIGluIHRoZSBmcmFtZWJ1ZmZlcgorICAgICAgICAqCisgICAgICAgICogQHBhcmFtIHNyYyBzcGVjaWZpZXMgaG93IHRoZSBzb3VyY2UgYmxlbmRpbmcgZmFjdG9yIGlzCisgICAgICAgICogICAgICAgICAgICBjb21wdXRlZAorICAgICAgICAqIEBwYXJhbSBkc3Qgc3BlY2lmaWVzIGhvdyB0aGUgZGVzdGluYXRpb24gYmxlbmRpbmcgZmFjdG9yIGlzCisgICAgICAgICogICAgICAgICAgICBjb21wdXRlZAorICAgICAgICAqCisgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEJsZW5kRnVuYyhCbGVuZFNyY0Z1bmMgc3JjLCBCbGVuZERzdEZ1bmMgZHN0KSB7CisgICAgICAgICAgICBtQmxlbmRTcmMgPSBzcmM7CisgICAgICAgICAgICBtQmxlbmREc3QgPSBkc3Q7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEVuYWJsZXMgZGl0aGVyaW5nCisgICAgICAgICoKKyAgICAgICAgKiBAcGFyYW0gZW5hYmxlIHNwZWNpZmllcyB3aGV0aGVyIGRpdGhlcmluZyBpcyBlbmFibGVkIG9yCisgICAgICAgICogICAgICAgICAgICAgICBkaXNhYmxlZAorICAgICAgICAqCisgICAgICAgICogQHJldHVybiB0aGlzCisgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldERpdGhlckVuYWJsZWQoYm9vbGVhbiBlbmFibGUpIHsKKyAgICAgICAgICAgIG1EaXRoZXIgPSBlbmFibGU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIENyZWF0ZXMgYSBwcm9ncmFtIHN0b3JlIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1aWxkZXIKKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFByb2dyYW1TdG9yZSBjcmVhdGUoKSB7CisgICAgICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgICAgIGludCBpZCA9IG1SUy5uUHJvZ3JhbVN0b3JlQ3JlYXRlKG1Db2xvck1hc2tSLCBtQ29sb3JNYXNrRywgbUNvbG9yTWFza0IsIG1Db2xvck1hc2tBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURlcHRoTWFzaywgbURpdGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1CbGVuZFNyYy5tSUQsIG1CbGVuZERzdC5tSUQsIG1EZXB0aEZ1bmMubUlEKTsKKyAgICAgICAgICAgIFByb2dyYW1TdG9yZSBwcm9ncmFtU3RvcmUgPSBuZXcgUHJvZ3JhbVN0b3JlKGlkLCBtUlMpOworICAgICAgICAgICAgcHJvZ3JhbVN0b3JlLm1EZXB0aEZ1bmMgPSBtRGVwdGhGdW5jOworICAgICAgICAgICAgcHJvZ3JhbVN0b3JlLm1EZXB0aE1hc2sgPSBtRGVwdGhNYXNrOworICAgICAgICAgICAgcHJvZ3JhbVN0b3JlLm1Db2xvck1hc2tSID0gbUNvbG9yTWFza1I7CisgICAgICAgICAgICBwcm9ncmFtU3RvcmUubUNvbG9yTWFza0cgPSBtQ29sb3JNYXNrRzsKKyAgICAgICAgICAgIHByb2dyYW1TdG9yZS5tQ29sb3JNYXNrQiA9IG1Db2xvck1hc2tCOworICAgICAgICAgICAgcHJvZ3JhbVN0b3JlLm1Db2xvck1hc2tBID0gbUNvbG9yTWFza0E7CisgICAgICAgICAgICBwcm9ncmFtU3RvcmUubUJsZW5kU3JjID0gbUJsZW5kU3JjOworICAgICAgICAgICAgcHJvZ3JhbVN0b3JlLm1CbGVuZERzdCA9IG1CbGVuZERzdDsKKyAgICAgICAgICAgIHByb2dyYW1TdG9yZS5tRGl0aGVyID0gbURpdGhlcjsKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtU3RvcmU7CisgICAgICAgIH0KKyAgICB9CisKK30KKworCisKKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtVmVydGV4LmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1WZXJ0ZXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTk0YmE5Ci0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtVmVydGV4LmphdmEKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBoaWRlCisgKiA8cD5UaGUgUmVuZGVyU2NyaXB0IHZlcnRleCBwcm9ncmFtLCBhbHNvIGtub3duIGFzIGEgdmVydGV4IHNoYWRlciwgZGVzY3JpYmVzIGEgc3RhZ2UgaW4KKyAqIHRoZSBncmFwaGljcyBwaXBlbGluZSByZXNwb25zaWJsZSBmb3IgbWFuaXB1bGF0aW5nIGdlb21ldHJpYyBkYXRhIGluIGEgdXNlci1kZWZpbmVkIHdheS4KKyAqIFRoZSBvYmplY3QgaXMgY29uc3RydWN0ZWQgYnkgcHJvdmlkaW5nIHRoZSBSZW5kZXJTY3JpcHQgc3lzdGVtIHdpdGggdGhlIGZvbGxvd2luZyBkYXRhOjwvcD4KKyAqIDx1bD4KKyAqICAgPGxpPkVsZW1lbnQgZGVzY3JpYmluZyBpdHMgdmFyeWluZyBpbnB1dHMgb3IgYXR0cmlidXRlczwvbGk+CisgKiAgIDxsaT5HTFNMIHNoYWRlciBzdHJpbmcgdGhhdCBkZWZpbmVzIHRoZSBib2R5IG9mIHRoZSBwcm9ncmFtPC9saT4KKyAqICAgPGxpPmEgVHlwZSB0aGF0IGRlc2NyaWJlcyB0aGUgbGF5b3V0IG9mIGFuIEFsbG9jYXRpb24gY29udGFpbmluZyBjb25zdGFudCBvciB1bmlmb3JtIGlucHV0czwvbGk+CisgKiA8L3VsPgorICoKKyAqIDxwPk9uY2UgdGhlIHByb2dyYW0gaXMgY3JlYXRlZCwgeW91IGJpbmQgaXQgdG8gdGhlIGdyYXBoaWNzIGNvbnRleHQsIFJlbmRlclNjcmlwdEdMLCBhbmQgaXQgd2lsbCBiZSB1c2VkIGZvcgorICogYWxsIHN1YnNlcXVlbnQgZHJhdyBjYWxscyB1bnRpbCB5b3UgYmluZCBhIG5ldyBwcm9ncmFtLiBJZiB0aGUgcHJvZ3JhbSBoYXMgY29uc3RhbnQgaW5wdXRzLAorICogdGhlIHVzZXIgbmVlZHMgdG8gYmluZCBhbiBhbGxvY2F0aW9uIGNvbnRhaW5pbmcgdGhvc2UgaW5wdXRzLiBUaGUgYWxsb2NhdGlvbidzIHR5cGUgbXVzdCBtYXRjaAorICogdGhlIG9uZSBwcm92aWRlZCBkdXJpbmcgY3JlYXRpb24uIFRoZSBSZW5kZXJTY3JpcHQgbGlicmFyeSB0aGVuIGRvZXMgYWxsIHRoZSBuZWNlc3NhcnkgcGx1bWJpbmcKKyAqIHRvIHNlbmQgdGhvc2UgY29uc3RhbnRzIHRvIHRoZSBncmFwaGljcyBoYXJkd2FyZS4gVmFyeWluZyBpbnB1dHMgdG8gdGhlIHNoYWRlciwgc3VjaCBhcyBwb3NpdGlvbiwgbm9ybWFsLAorICogYW5kIHRleHR1cmUgY29vcmRpbmF0ZXMgYXJlIG1hdGNoZWQgYnkgbmFtZSBiZXR3ZWVuIHRoZSBpbnB1dCBFbGVtZW50IGFuZCB0aGUgTWVzaCBvYmplY3QgYmVpbmcgZHJhd24uCisgKiBUaGUgc2lnbmF0dXJlcyBkb24ndCBoYXZlIHRvIGJlIGV4YWN0IG9yIGluIGFueSBzdHJpY3Qgb3JkZXIuIEFzIGxvbmcgYXMgdGhlIGlucHV0IG5hbWUgaW4gdGhlIHNoYWRlcgorICogbWF0Y2hlcyBhIGNoYW5uZWwgbmFtZSBhbmQgc2l6ZSBhdmFpbGFibGUgb24gdGhlIG1lc2gsIHRoZSBydW50aW1lIHRha2VzIGNhcmUgb2YgY29ubmVjdGluZyB0aGUKKyAqIHR3by4gVW5saWtlIE9wZW5HTCwgdGhlcmUgaXMgbm8gbmVlZCB0byBsaW5rIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHByb2dyYW1zLjwvcD4KKyAqCisgKiovCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisKKy8qKgorICogQGhpZGUKKyAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICogUHJvZ3JhbVZlcnRleCwgYWxzbyBrbm93IGFzIGEgdmVydGV4IHNoYWRlciwgZGVzY3JpYmVzIGEKKyAqIHN0YWdlIGluIHRoZSBncmFwaGljcyBwaXBlbGluZSByZXNwb25zaWJsZSBmb3IgbWFuaXB1bGF0aW5nCisgKiBnZW9tZXRyaWMgZGF0YSBpbiBhIHVzZXItZGVmaW5lZCB3YXkuCisgKgorICoqLworcHVibGljIGNsYXNzIFByb2dyYW1WZXJ0ZXggZXh0ZW5kcyBQcm9ncmFtIHsKKworICAgIFByb2dyYW1WZXJ0ZXgobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIHN1cGVyKGlkLCBycyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogQHJldHVybiBudW1iZXIgb2YgaW5wdXQgYXR0cmlidXRlIGVsZW1lbnRzCisgICAgICovCisgICAgcHVibGljIGludCBnZXRJbnB1dENvdW50KCkgeworICAgICAgICByZXR1cm4gbUlucHV0cyAhPSBudWxsID8gbUlucHV0cy5sZW5ndGggOiAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIEBwYXJhbSBzbG90IGxvY2F0aW9uIG9mIHRoZSBpbnB1dCB0byByZXR1cm4KKyAgICAgKiBAcmV0dXJuIGlucHV0IGF0dHJpYnV0ZSBlbGVtZW50CisgICAgICovCisgICAgcHVibGljIEVsZW1lbnQgZ2V0SW5wdXQoaW50IHNsb3QpIHsKKyAgICAgICAgaWYgKHNsb3QgPCAwIHx8IHNsb3QgPj0gbUlucHV0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNsb3QgSUQgb3V0IG9mIHJhbmdlLiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtSW5wdXRzW3Nsb3RdOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogQnVpbGRlciBjbGFzcyBmb3IgY3JlYXRpbmcgUHJvZ3JhbVZlcnRleCBvYmplY3RzLgorICAgICAqIFRoZSBidWlsZGVyIHN0YXJ0cyBlbXB0eSBhbmQgdGhlIHVzZXIgbXVzdCBtaW5pbWFsbHkgcHJvdmlkZQorICAgICAqIHRoZSBHTFNMIHNoYWRlciBjb2RlLCBhbmQgdGhlIHZhcnlpbmcgaW5wdXRzLiBDb25zdGFudCwgb3IKKyAgICAgKiB1bmlmb3JtIHBhcmFtZXRlcnMgdG8gdGhlIHNoYWRlciBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBhcworICAgICAqIHdlbGwuCisgICAgICoKKyAgICAgKiovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIGV4dGVuZHMgQmFzZVByb2dyYW1CdWlsZGVyIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKiBDcmVhdGUgYSBidWlsZGVyIG9iamVjdC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHByb2dyYW0gd2lsbCBiZWxvbmcuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgICAgIHN1cGVyKHJzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICogQWRkIHZhcnlpbmcgaW5wdXRzIHRvIHRoZSBwcm9ncmFtCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBlIGVsZW1lbnQgZGVzY3JpYmluZyB0aGUgbGF5b3V0IG9mIHRoZSB2YXJ5aW5nIGlucHV0CisgICAgICAgICAqICAgICAgICAgIHN0cnVjdHVyZQorICAgICAgICAgKiBAcmV0dXJuICBzZWxmCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRJbnB1dChFbGVtZW50IGUpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24geworICAgICAgICAgICAgLy8gU2hvdWxkIGNoZWNrIGZvciBjb25zaXN0YW50IGFuZCBub24tY29uZmxpY3RpbmcgbmFtZXMuLi4KKyAgICAgICAgICAgIGlmKG1JbnB1dENvdW50ID49IE1BWF9JTlBVVCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTWF4IGlucHV0IGNvdW50IGV4Y2VlZGVkLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGUuaXNDb21wbGV4KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNvbXBsZXggZWxlbWVudHMgbm90IGFsbG93ZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtSW5wdXRzW21JbnB1dENvdW50KytdID0gZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKiBDcmVhdGVzIFByb2dyYW1WZXJ0ZXggZnJvbSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYnVpbGRlcgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuICBQcm9ncmFtVmVydGV4CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgUHJvZ3JhbVZlcnRleCBjcmVhdGUoKSB7CisgICAgICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgICAgIGludFtdIHRtcCA9IG5ldyBpbnRbKG1JbnB1dENvdW50ICsgbU91dHB1dENvdW50ICsgbUNvbnN0YW50Q291bnQgKyBtVGV4dHVyZUNvdW50KSAqIDJdOworICAgICAgICAgICAgU3RyaW5nW10gdGV4TmFtZXMgPSBuZXcgU3RyaW5nW21UZXh0dXJlQ291bnRdOworICAgICAgICAgICAgaW50IGlkeCA9IDA7CisKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1JbnB1dENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLklOUFVULm1JRDsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gKGludCltSW5wdXRzW2ldLmdldElEKG1SUyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtT3V0cHV0Q291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uT1VUUFVULm1JRDsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gKGludCltT3V0cHV0c1tpXS5nZXRJRChtUlMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbUNvbnN0YW50Q291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uQ09OU1RBTlQubUlEOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1Db25zdGFudHNbaV0uZ2V0SUQobVJTKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1UZXh0dXJlQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uVEVYVFVSRV9UWVBFLm1JRDsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gKGludCltVGV4dHVyZVR5cGVzW2ldLm1JRDsKKyAgICAgICAgICAgICAgICB0ZXhOYW1lc1tpXSA9IG1UZXh0dXJlTmFtZXNbaV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvbmcgaWQgPSBtUlMublByb2dyYW1WZXJ0ZXhDcmVhdGUobVNoYWRlciwgdGV4TmFtZXMsIHRtcCk7CisgICAgICAgICAgICBQcm9ncmFtVmVydGV4IHB2ID0gbmV3IFByb2dyYW1WZXJ0ZXgoaWQsIG1SUyk7CisgICAgICAgICAgICBpbml0UHJvZ3JhbShwdik7CisgICAgICAgICAgICByZXR1cm4gcHY7CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDI4MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5qYXZhCkBAIC0wLDAgKzEsMjg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisKKy8qKgorICogQGhpZGUKKyAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICogUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24gaXMgYSBoZWxwZXIgY2xhc3MgdGhhdCBwcm92aWRlcyBhCisgKiBzaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIGZpeGVkIGZ1bmN0aW9uIGVtdWxhdGlvbiB2ZXJ0ZXggc2hhZGVyCisgKiB3aXRob3V0IHdyaXRpbmcgYW55IEdMU0wgY29kZS4KKyAqCisgKiovCitwdWJsaWMgY2xhc3MgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24gZXh0ZW5kcyBQcm9ncmFtVmVydGV4IHsKKworICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBzdXBlcihpZCwgcnMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIEJpbmRzIHRoZSBjb25zdGFudCBidWZmZXIgY29udGFpbmluZyBmaXhlZCBmdW5jdGlvbiBlbXVsYXRpb24KKyAgICAgKiBtYXRyaWNlcworICAgICAqCisgICAgICogQHBhcmFtIHZhIGFsbG9jYXRpb24gY29udGFpbmluZyBmaXhlZCBmdW5jdGlvbiBtYXRyaWNlcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGJpbmRDb25zdGFudHMoQ29uc3RhbnRzIHZhKSB7CisgICAgICAgIG1SUy52YWxpZGF0ZSgpOworICAgICAgICBiaW5kQ29uc3RhbnRzKHZhLmdldEFsbG9jYXRpb24oKSwgMCk7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEludGVybmFsQnVpbGRlciBleHRlbmRzIEJhc2VQcm9ncmFtQnVpbGRlciB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBJbnRlcm5hbEJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgICAgICBzdXBlcihycyk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgSW50ZXJuYWxCdWlsZGVyIGFkZElucHV0KEVsZW1lbnQgZSkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAvLyBTaG91bGQgY2hlY2sgZm9yIGNvbnNpc3RhbnQgYW5kIG5vbi1jb25mbGljdGluZyBuYW1lcy4uLgorICAgICAgICAgICAgaWYobUlucHV0Q291bnQgPj0gTUFYX0lOUFVUKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNYXggaW5wdXQgY291bnQgZXhjZWVkZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZS5pc0NvbXBsZXgoKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29tcGxleCBlbGVtZW50cyBub3QgYWxsb3dlZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1JbnB1dHNbbUlucHV0Q291bnQrK10gPSBlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAqIENyZWF0ZXMgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24gZnJvbSB0aGUgY3VycmVudCBzdGF0ZSBvZgorICAgICAgICAgKiB0aGUgYnVpbGRlcgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuICBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uIGNyZWF0ZSgpIHsKKyAgICAgICAgICAgIG1SUy52YWxpZGF0ZSgpOworICAgICAgICAgICAgaW50W10gdG1wID0gbmV3IGludFsobUlucHV0Q291bnQgKyBtT3V0cHV0Q291bnQgKyBtQ29uc3RhbnRDb3VudCArIG1UZXh0dXJlQ291bnQpICogMl07CisgICAgICAgICAgICBTdHJpbmdbXSB0ZXhOYW1lcyA9IG5ldyBTdHJpbmdbbVRleHR1cmVDb3VudF07CisgICAgICAgICAgICBpbnQgaWR4ID0gMDsKKworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbUlucHV0Q291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uSU5QVVQubUlEOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1JbnB1dHNbaV0uZ2V0SUQobVJTKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1PdXRwdXRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5PVVRQVVQubUlEOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1PdXRwdXRzW2ldLmdldElEKG1SUyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtQ29uc3RhbnRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5DT05TVEFOVC5tSUQ7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbUNvbnN0YW50c1tpXS5nZXRJRChtUlMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbVRleHR1cmVDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5URVhUVVJFX1RZUEUubUlEOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1UZXh0dXJlVHlwZXNbaV0ubUlEOworICAgICAgICAgICAgICAgIHRleE5hbWVzW2ldID0gbVRleHR1cmVOYW1lc1tpXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9uZyBpZCA9IG1SUy5uUHJvZ3JhbVZlcnRleENyZWF0ZShtU2hhZGVyLCB0ZXhOYW1lcywgdG1wKTsKKyAgICAgICAgICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uIHB2ID0gbmV3IFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uKGlkLCBtUlMpOworICAgICAgICAgICAgaW5pdFByb2dyYW0ocHYpOworICAgICAgICAgICAgcmV0dXJuIHB2OworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKKyAgICAgICAgYm9vbGVhbiBtVGV4dHVyZU1hdHJpeEVuYWJsZTsKKyAgICAgICAgU3RyaW5nIG1TaGFkZXI7CisgICAgICAgIFJlbmRlclNjcmlwdCBtUlM7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKiBDcmVhdGVzIGEgYnVpbGRlciBmb3IgZml4ZWQgZnVuY3Rpb24gdmVydGV4IHByb2dyYW0KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHByb2dyYW0gd2lsbCBiZWxvbmcuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlcihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgICAgIG1SUyA9IHJzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0ZXh0dXJlIG1hdHJpeCBjYWxjdWxhdGlvbnMgYXJlIHRvIGJlIGFkZGVkCisgICAgICAgICAqIHRvIHRoZSBzaGFkZXIKKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFRleHR1cmVNYXRyaXhFbmFibGUoYm9vbGVhbiBlbmFibGUpIHsKKyAgICAgICAgICAgIG1UZXh0dXJlTWF0cml4RW5hYmxlID0gZW5hYmxlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFR5cGUgZ2V0Q29uc3RhbnRJbnB1dFR5cGUoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgICAgICBFbGVtZW50LkJ1aWxkZXIgYiA9IG5ldyBFbGVtZW50LkJ1aWxkZXIocnMpOworICAgICAgICAgICAgYi5hZGQoRWxlbWVudC5NQVRSSVg0WDQocnMpLCAiTVYiKTsKKyAgICAgICAgICAgIGIuYWRkKEVsZW1lbnQuTUFUUklYNFg0KHJzKSwgIlAiKTsKKyAgICAgICAgICAgIGIuYWRkKEVsZW1lbnQuTUFUUklYNFg0KHJzKSwgIlRleE1hdHJpeCIpOworICAgICAgICAgICAgYi5hZGQoRWxlbWVudC5NQVRSSVg0WDQocnMpLCAiTVZQIik7CisKKyAgICAgICAgICAgIFR5cGUuQnVpbGRlciB0eXBlQnVpbGRlciA9IG5ldyBUeXBlLkJ1aWxkZXIocnMsIGIuY3JlYXRlKCkpOworICAgICAgICAgICAgdHlwZUJ1aWxkZXIuc2V0WCgxKTsKKyAgICAgICAgICAgIHJldHVybiB0eXBlQnVpbGRlci5jcmVhdGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBidWlsZFNoYWRlclN0cmluZygpIHsKKworICAgICAgICAgICAgbVNoYWRlciAgPSAiLy9yc19zaGFkZXJfaW50ZXJuYWxcbiI7CisgICAgICAgICAgICBtU2hhZGVyICs9ICJ2YXJ5aW5nIHZlYzQgdmFyQ29sb3I7XG4iOworICAgICAgICAgICAgbVNoYWRlciArPSAidmFyeWluZyB2ZWMyIHZhclRleDA7XG4iOworCisgICAgICAgICAgICBtU2hhZGVyICs9ICJ2b2lkIG1haW4oKSB7XG4iOworICAgICAgICAgICAgbVNoYWRlciArPSAiICBnbF9Qb3NpdGlvbiA9IFVOSV9NVlAgKiBBVFRSSUJfcG9zaXRpb247XG4iOworICAgICAgICAgICAgbVNoYWRlciArPSAiICBnbF9Qb2ludFNpemUgPSAxLjA7XG4iOworCisgICAgICAgICAgICBtU2hhZGVyICs9ICIgIHZhckNvbG9yID0gQVRUUklCX2NvbG9yO1xuIjsKKyAgICAgICAgICAgIGlmIChtVGV4dHVyZU1hdHJpeEVuYWJsZSkgeworICAgICAgICAgICAgICAgIG1TaGFkZXIgKz0gIiAgdmFyVGV4MCA9IChVTklfVGV4TWF0cml4ICogdmVjNChBVFRSSUJfdGV4dHVyZTAsIDAuMCwgMS4wKSkueHk7XG4iOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtU2hhZGVyICs9ICIgIHZhclRleDAgPSBBVFRSSUJfdGV4dHVyZTA7XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVNoYWRlciArPSAifVxuIjsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICogQ3JlYXRlcyBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbiBmcm9tIHRoZSBjdXJyZW50IHN0YXRlIG9mCisgICAgICAgICAqIHRoZSBidWlsZGVyCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gRml4ZWQgZnVuY3Rpb24gZW11bGF0aW9uIFByb2dyYW1WZXJ0ZXgKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbiBjcmVhdGUoKSB7CisgICAgICAgICAgICBidWlsZFNoYWRlclN0cmluZygpOworCisgICAgICAgICAgICBJbnRlcm5hbEJ1aWxkZXIgc2IgPSBuZXcgSW50ZXJuYWxCdWlsZGVyKG1SUyk7CisgICAgICAgICAgICBzYi5zZXRTaGFkZXIobVNoYWRlcik7CisgICAgICAgICAgICBzYi5hZGRDb25zdGFudChnZXRDb25zdGFudElucHV0VHlwZShtUlMpKTsKKworICAgICAgICAgICAgRWxlbWVudC5CdWlsZGVyIGIgPSBuZXcgRWxlbWVudC5CdWlsZGVyKG1SUyk7CisgICAgICAgICAgICBiLmFkZChFbGVtZW50LkYzMl80KG1SUyksICJwb3NpdGlvbiIpOworICAgICAgICAgICAgYi5hZGQoRWxlbWVudC5GMzJfNChtUlMpLCAiY29sb3IiKTsKKyAgICAgICAgICAgIGIuYWRkKEVsZW1lbnQuRjMyXzMobVJTKSwgIm5vcm1hbCIpOworICAgICAgICAgICAgYi5hZGQoRWxlbWVudC5GMzJfMihtUlMpLCAidGV4dHVyZTAiKTsKKyAgICAgICAgICAgIHNiLmFkZElucHV0KGIuY3JlYXRlKCkpOworCisgICAgICAgICAgICByZXR1cm4gc2IuY3JlYXRlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKiBIZWxwZXIgY2xhc3MgdG8gc3RvcmUgbW9kZWx2aWV3LCBwcm9qZWN0aW9uIGFuZCB0ZXh0dXJlCisgICAgICogbWF0cmljZXMgZm9yIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbnN0YW50cyB7CisgICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgTU9ERUxWSUVXX09GRlNFVCA9IDA7CisgICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgUFJPSkVDVElPTl9PRkZTRVQgPSAxNjsKKyAgICAgICAgc3RhdGljIGZpbmFsIGludCBURVhUVVJFX09GRlNFVCA9IDMyOworCisgICAgICAgIE1hdHJpeDRmIG1Nb2RlbDsKKyAgICAgICAgTWF0cml4NGYgbVByb2plY3Rpb247CisgICAgICAgIE1hdHJpeDRmIG1UZXh0dXJlOworCisgICAgICAgIEFsbG9jYXRpb24gbUFsbG9jOworICAgICAgICBBbGxvY2F0aW9uIGdldEFsbG9jYXRpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gbUFsbG9jOworICAgICAgICB9CisgICAgICAgIHByaXZhdGUgRmllbGRQYWNrZXIgbUlPQnVmZmVyOworCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIENyZWF0ZXMgYSBidWZmZXIgdG8gc3RvcmUgZml4ZWQgZnVuY3Rpb24gZW11bGF0aW9uIG1hdHJpY2VzCisgICAgICAgICoKKyAgICAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJlbG9uZy4KKyAgICAgICAgKiovCisgICAgICAgIHB1YmxpYyBDb25zdGFudHMoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgICAgICBUeXBlIGNvbnN0SW5wdXRUeXBlID0gUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQnVpbGRlci5nZXRDb25zdGFudElucHV0VHlwZShycyk7CisgICAgICAgICAgICBtQWxsb2MgPSBBbGxvY2F0aW9uLmNyZWF0ZVR5cGVkKHJzLCBjb25zdElucHV0VHlwZSk7CisgICAgICAgICAgICBpbnQgYnVmZmVyU2l6ZSA9IGNvbnN0SW5wdXRUeXBlLmdldEVsZW1lbnQoKS5nZXRCeXRlc1NpemUoKSoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RJbnB1dFR5cGUuZ2V0Q291bnQoKTsKKyAgICAgICAgICAgIG1JT0J1ZmZlciA9IG5ldyBGaWVsZFBhY2tlcihidWZmZXJTaXplKTsKKyAgICAgICAgICAgIG1Nb2RlbCA9IG5ldyBNYXRyaXg0ZigpOworICAgICAgICAgICAgbVByb2plY3Rpb24gPSBuZXcgTWF0cml4NGYoKTsKKyAgICAgICAgICAgIG1UZXh0dXJlID0gbmV3IE1hdHJpeDRmKCk7CisgICAgICAgICAgICBzZXRNb2RlbHZpZXcobmV3IE1hdHJpeDRmKCkpOworICAgICAgICAgICAgc2V0UHJvamVjdGlvbihuZXcgTWF0cml4NGYoKSk7CisgICAgICAgICAgICBzZXRUZXh0dXJlKG5ldyBNYXRyaXg0ZigpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAqIEZvcmNlcyBkZWFsbG9jYXRpb24gb2YgbWVtb3J5IGJhY2tpbmcgdGhlIGNvbnRhbnQgbWF0cmljZXMuCisgICAgICAgICogTm9ybWFsbHksIHRoaXMgaXMgdW5uZWNlc3NhcnkgYW5kIHdpbGwgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQKKyAgICAgICAgKgorICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgeworICAgICAgICAgICAgbUFsbG9jLmRlc3Ryb3koKTsKKyAgICAgICAgICAgIG1BbGxvYyA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgYWRkVG9CdWZmZXIoaW50IG9mZnNldCwgTWF0cml4NGYgbSkgeworICAgICAgICAgICAgbUlPQnVmZmVyLnJlc2V0KG9mZnNldCk7CisgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTY7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBtSU9CdWZmZXIuYWRkRjMyKG0ubU1hdFtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQWxsb2Muc2V0RnJvbUZpZWxkUGFja2VyKDAsIG1JT0J1ZmZlcik7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBTZXRzIHRoZSBtb2RlbHZpZXcgbWF0cml4IGluIHRoZSBmaXhlZCBmdW5jdGlvbiBtYXRyaXggYnVmZmVyCisgICAgICAgICoKKyAgICAgICAgKiBAcGFyYW0gbSBtb2RlbHZpZXcgbWF0cml4CisgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHNldE1vZGVsdmlldyhNYXRyaXg0ZiBtKSB7CisgICAgICAgICAgICBtTW9kZWwubG9hZChtKTsKKyAgICAgICAgICAgIGFkZFRvQnVmZmVyKE1PREVMVklFV19PRkZTRVQqNCwgbSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBTZXRzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBpbiB0aGUgZml4ZWQgZnVuY3Rpb24gbWF0cml4IGJ1ZmZlcgorICAgICAgICAqCisgICAgICAgICogQHBhcmFtIG0gcHJvamVjdGlvbiBtYXRyaXgKKyAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgc2V0UHJvamVjdGlvbihNYXRyaXg0ZiBtKSB7CisgICAgICAgICAgICBtUHJvamVjdGlvbi5sb2FkKG0pOworICAgICAgICAgICAgYWRkVG9CdWZmZXIoUFJPSkVDVElPTl9PRkZTRVQqNCwgbSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgKiBTZXRzIHRoZSB0ZXh0dXJlIG1hdHJpeCBpbiB0aGUgZml4ZWQgZnVuY3Rpb24gbWF0cml4IGJ1ZmZlci4KKyAgICAgICAgKiBUZXh0dXJlIG1hdHJpeCBtdXN0IGJlIGVuYWJsZWQgaW4gdGhlCisgICAgICAgICogUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24gYnVpbGRlciBmb3IgdGhlIHNoYWRlciB0byB1dGlsaXplCisgICAgICAgICogaXQuCisgICAgICAgICoKKyAgICAgICAgKiBAcGFyYW0gbSBtb2RlbHZpZXcgbWF0cml4CisgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFRleHR1cmUoTWF0cml4NGYgbSkgeworICAgICAgICAgICAgbVRleHR1cmUubG9hZChtKTsKKyAgICAgICAgICAgIGFkZFRvQnVmZmVyKFRFWFRVUkVfT0ZGU0VUKjQsIG0pOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU0RyaXZlckV4Y2VwdGlvbi5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU0RyaXZlckV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JTRHJpdmVyRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHJzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNEcml2ZXJFeGNlcHRpb24uamF2YQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHJzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uamF2YQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbi5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JTSW52YWxpZFN0YXRlRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHJzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24uamF2YQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU1J1bnRpbWVFeGNlcHRpb24uamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNSdW50aW1lRXhjZXB0aW9uLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNSdW50aW1lRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHJzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNSdW50aW1lRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNTdXJmYWNlVmlldy5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU1N1cmZhY2VWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiNzJkOQotLS0gL2Rldi9udWxsCisrKyBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNTdXJmYWNlVmlldy5qYXZhCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7CisKKy8qKgorICogQGhpZGUKKyAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICogVGhlIFN1cmZhY2UgVmlldyBmb3IgYSBncmFwaGljcyByZW5kZXJzY3JpcHQgKFJlbmRlclNjcmlwdEdMKSB0byBkcmF3IG9uLgorICoKKyAqIDxkaXYgY2xhc3M9InNwZWNpYWwgcmVmZXJlbmNlIj4KKyAqIDxoMz5EZXZlbG9wZXIgR3VpZGVzPC9oMz4KKyAqIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyBSZW5kZXJTY3JpcHQsIHJlYWQgdGhlCisgKiA8YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3JlbmRlcnNjcmlwdC9pbmRleC5odG1sIj5SZW5kZXJTY3JpcHQ8L2E+IGRldmVsb3BlciBndWlkZS48L3A+CisgKiA8L2Rpdj4KKyAqLworcHVibGljIGNsYXNzIFJTU3VyZmFjZVZpZXcgZXh0ZW5kcyBTdXJmYWNlVmlldyBpbXBsZW1lbnRzIFN1cmZhY2VIb2xkZXIuQ2FsbGJhY2sgeworICAgIHByaXZhdGUgU3VyZmFjZUhvbGRlciBtU3VyZmFjZUhvbGRlcjsKKyAgICBwcml2YXRlIFJlbmRlclNjcmlwdEdMIG1SUzsKKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIFN0YW5kYXJkIFZpZXcgY29uc3RydWN0b3IuIEluIG9yZGVyIHRvIHJlbmRlciBzb21ldGhpbmcsIHlvdQorICAgICAqIG11c3QgY2FsbCB7QGxpbmsgYW5kcm9pZC5vcGVuZ2wuR0xTdXJmYWNlVmlldyNzZXRSZW5kZXJlcn0gdG8KKyAgICAgKiByZWdpc3RlciBhIHJlbmRlcmVyLgorICAgICAqLworICAgIHB1YmxpYyBSU1N1cmZhY2VWaWV3KENvbnRleHQgY29udGV4dCkgeworICAgICAgICBzdXBlcihjb250ZXh0KTsKKyAgICAgICAgaW5pdCgpOworICAgICAgICAvL0xvZy52KFJlbmRlclNjcmlwdC5MT0dfVEFHLCAiUlNTdXJmYWNlVmlldyIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIFN0YW5kYXJkIFZpZXcgY29uc3RydWN0b3IuIEluIG9yZGVyIHRvIHJlbmRlciBzb21ldGhpbmcsIHlvdQorICAgICAqIG11c3QgY2FsbCB7QGxpbmsgYW5kcm9pZC5vcGVuZ2wuR0xTdXJmYWNlVmlldyNzZXRSZW5kZXJlcn0gdG8KKyAgICAgKiByZWdpc3RlciBhIHJlbmRlcmVyLgorICAgICAqLworICAgIHB1YmxpYyBSU1N1cmZhY2VWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICAgICAgaW5pdCgpOworICAgICAgICAvL0xvZy52KFJlbmRlclNjcmlwdC5MT0dfVEFHLCAiUlNTdXJmYWNlVmlldyIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBpbml0KCkgeworICAgICAgICAvLyBJbnN0YWxsIGEgU3VyZmFjZUhvbGRlci5DYWxsYmFjayBzbyB3ZSBnZXQgbm90aWZpZWQgd2hlbiB0aGUKKyAgICAgICAgLy8gdW5kZXJseWluZyBzdXJmYWNlIGlzIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZAorICAgICAgICBTdXJmYWNlSG9sZGVyIGhvbGRlciA9IGdldEhvbGRlcigpOworICAgICAgICBob2xkZXIuYWRkQ2FsbGJhY2sodGhpcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogVGhpcyBtZXRob2QgaXMgcGFydCBvZiB0aGUgU3VyZmFjZUhvbGRlci5DYWxsYmFjayBpbnRlcmZhY2UsIGFuZCBpcworICAgICAqIG5vdCBub3JtYWxseSBjYWxsZWQgb3Igc3ViY2xhc3NlZCBieSBjbGllbnRzIG9mIFJTU3VyZmFjZVZpZXcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3VyZmFjZUNyZWF0ZWQoU3VyZmFjZUhvbGRlciBob2xkZXIpIHsKKyAgICAgICAgbVN1cmZhY2VIb2xkZXIgPSBob2xkZXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogVGhpcyBtZXRob2QgaXMgcGFydCBvZiB0aGUgU3VyZmFjZUhvbGRlci5DYWxsYmFjayBpbnRlcmZhY2UsIGFuZCBpcworICAgICAqIG5vdCBub3JtYWxseSBjYWxsZWQgb3Igc3ViY2xhc3NlZCBieSBjbGllbnRzIG9mIFJTU3VyZmFjZVZpZXcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3VyZmFjZURlc3Ryb3llZChTdXJmYWNlSG9sZGVyIGhvbGRlcikgeworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIC8vIFN1cmZhY2Ugd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB3ZSByZXR1cm4KKyAgICAgICAgICAgIGlmIChtUlMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1SUy5zZXRTdXJmYWNlKG51bGwsIDAsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogVGhpcyBtZXRob2QgaXMgcGFydCBvZiB0aGUgU3VyZmFjZUhvbGRlci5DYWxsYmFjayBpbnRlcmZhY2UsIGFuZCBpcworICAgICAqIG5vdCBub3JtYWxseSBjYWxsZWQgb3Igc3ViY2xhc3NlZCBieSBjbGllbnRzIG9mIFJTU3VyZmFjZVZpZXcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoU3VyZmFjZUhvbGRlciBob2xkZXIsIGludCBmb3JtYXQsIGludCB3LCBpbnQgaCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIGlmIChtUlMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1SUy5zZXRTdXJmYWNlKGhvbGRlciwgdywgaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIEluZm9ybSB0aGUgdmlldyB0aGF0IHRoZSBhY3Rpdml0eSBpcyBwYXVzZWQuIFRoZSBvd25lciBvZiB0aGlzIHZpZXcgbXVzdAorICAgICAqIGNhbGwgdGhpcyBtZXRob2Qgd2hlbiB0aGUgYWN0aXZpdHkgaXMgcGF1c2VkLiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwKKyAgICAgKiBwYXVzZSB0aGUgcmVuZGVyaW5nIHRocmVhZC4KKyAgICAgKiBNdXN0IG5vdCBiZSBjYWxsZWQgYmVmb3JlIGEgcmVuZGVyZXIgaGFzIGJlZW4gc2V0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHBhdXNlKCkgeworICAgICAgICBpZihtUlMgIT0gbnVsbCkgeworICAgICAgICAgICAgbVJTLnBhdXNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKiBJbmZvcm0gdGhlIHZpZXcgdGhhdCB0aGUgYWN0aXZpdHkgaXMgcmVzdW1lZC4gVGhlIG93bmVyIG9mIHRoaXMgdmlldyBtdXN0CisgICAgICogY2FsbCB0aGlzIG1ldGhvZCB3aGVuIHRoZSBhY3Rpdml0eSBpcyByZXN1bWVkLiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwKKyAgICAgKiByZWNyZWF0ZSB0aGUgT3BlbkdMIGRpc3BsYXkgYW5kIHJlc3VtZSB0aGUgcmVuZGVyaW5nCisgICAgICogdGhyZWFkLgorICAgICAqIE11c3Qgbm90IGJlIGNhbGxlZCBiZWZvcmUgYSByZW5kZXJlciBoYXMgYmVlbiBzZXQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVzdW1lKCkgeworICAgICAgICBpZihtUlMgIT0gbnVsbCkgeworICAgICAgICAgICAgbVJTLnJlc3VtZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICoqLworICAgIHB1YmxpYyBSZW5kZXJTY3JpcHRHTCBjcmVhdGVSZW5kZXJTY3JpcHRHTChSZW5kZXJTY3JpcHRHTC5TdXJmYWNlQ29uZmlnIHNjKSB7CisgICAgICBSZW5kZXJTY3JpcHRHTCBycyA9IG5ldyBSZW5kZXJTY3JpcHRHTCh0aGlzLmdldENvbnRleHQoKSwgc2MpOworICAgICAgICBzZXRSZW5kZXJTY3JpcHRHTChycyk7CisgICAgICAgIHJldHVybiByczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKiovCisgICAgcHVibGljIHZvaWQgZGVzdHJveVJlbmRlclNjcmlwdEdMKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIG1SUy5kZXN0cm95KCk7CisgICAgICAgICAgICBtUlMgPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICoqLworICAgIHB1YmxpYyB2b2lkIHNldFJlbmRlclNjcmlwdEdMKFJlbmRlclNjcmlwdEdMIHJzKSB7CisgICAgICAgIG1SUyA9IHJzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqKi8KKyAgICBwdWJsaWMgUmVuZGVyU2NyaXB0R0wgZ2V0UmVuZGVyU2NyaXB0R0woKSB7CisgICAgICAgIHJldHVybiBtUlM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU1RleHR1cmVWaWV3LmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JTVGV4dHVyZVZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjMyNThhCi0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU1RleHR1cmVWaWV3LmphdmEKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudmlldy5UZXh0dXJlVmlldzsKKworLyoqCisgKiBAaGlkZQorICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgKiBUaGUgVGV4dHVyZSBWaWV3IGZvciBhIGdyYXBoaWNzIHJlbmRlcnNjcmlwdCAoUmVuZGVyU2NyaXB0R0wpCisgKiB0byBkcmF3IG9uLgorICoKKyAqLworcHVibGljIGNsYXNzIFJTVGV4dHVyZVZpZXcgZXh0ZW5kcyBUZXh0dXJlVmlldyBpbXBsZW1lbnRzIFRleHR1cmVWaWV3LlN1cmZhY2VUZXh0dXJlTGlzdGVuZXIgeworICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOworICAgIHByaXZhdGUgU3VyZmFjZVRleHR1cmUgbVN1cmZhY2VUZXh0dXJlOworCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogU3RhbmRhcmQgVmlldyBjb25zdHJ1Y3Rvci4gSW4gb3JkZXIgdG8gcmVuZGVyIHNvbWV0aGluZywgeW91CisgICAgICogbXVzdCBjYWxsIHtAbGluayBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3I3NldFJlbmRlcmVyfSB0bworICAgICAqIHJlZ2lzdGVyIGEgcmVuZGVyZXIuCisgICAgICovCisgICAgcHVibGljIFJTVGV4dHVyZVZpZXcoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQpOworICAgICAgICBpbml0KCk7CisgICAgICAgIC8vTG9nLnYoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJSU1N1cmZhY2VWaWV3Iik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogU3RhbmRhcmQgVmlldyBjb25zdHJ1Y3Rvci4gSW4gb3JkZXIgdG8gcmVuZGVyIHNvbWV0aGluZywgeW91CisgICAgICogbXVzdCBjYWxsIHtAbGluayBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3I3NldFJlbmRlcmVyfSB0bworICAgICAqIHJlZ2lzdGVyIGEgcmVuZGVyZXIuCisgICAgICovCisgICAgcHVibGljIFJTVGV4dHVyZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOworICAgICAgICBpbml0KCk7CisgICAgICAgIC8vTG9nLnYoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJSU1N1cmZhY2VWaWV3Iik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7CisgICAgICAgIHNldFN1cmZhY2VUZXh0dXJlTGlzdGVuZXIodGhpcyk7CisgICAgICAgIC8vYW5kcm9pZC51dGlsLkxvZy5lKCJycyIsICJnZXRTdXJmYWNlVGV4dHVyZUxpc3Rlcm5lciAiICsgZ2V0U3VyZmFjZVRleHR1cmVMaXN0ZW5lcigpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VUZXh0dXJlQXZhaWxhYmxlKFN1cmZhY2VUZXh0dXJlIHN1cmZhY2UsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICAvL0xvZy5lKFJlbmRlclNjcmlwdC5MT0dfVEFHLCAib25TdXJmYWNlVGV4dHVyZUF2YWlsYWJsZSIpOworICAgICAgICBtU3VyZmFjZVRleHR1cmUgPSBzdXJmYWNlOworCisgICAgICAgIGlmIChtUlMgIT0gbnVsbCkgeworICAgICAgICAgICAgbVJTLnNldFN1cmZhY2VUZXh0dXJlKG1TdXJmYWNlVGV4dHVyZSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VUZXh0dXJlU2l6ZUNoYW5nZWQoU3VyZmFjZVRleHR1cmUgc3VyZmFjZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgIC8vTG9nLmUoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJvblN1cmZhY2VUZXh0dXJlU2l6ZUNoYW5nZWQiKTsKKyAgICAgICAgbVN1cmZhY2VUZXh0dXJlID0gc3VyZmFjZTsKKworICAgICAgICBpZiAobVJTICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1SUy5zZXRTdXJmYWNlVGV4dHVyZShtU3VyZmFjZVRleHR1cmUsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25TdXJmYWNlVGV4dHVyZURlc3Ryb3llZChTdXJmYWNlVGV4dHVyZSBzdXJmYWNlKSB7CisgICAgICAgIC8vTG9nLmUoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJvblN1cmZhY2VUZXh0dXJlRGVzdHJveWVkIik7CisgICAgICAgIG1TdXJmYWNlVGV4dHVyZSA9IHN1cmZhY2U7CisKKyAgICAgICAgaWYgKG1SUyAhPSBudWxsKSB7CisgICAgICAgICAgICBtUlMuc2V0U3VyZmFjZVRleHR1cmUobnVsbCwgMCwgMCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VUZXh0dXJlVXBkYXRlZChTdXJmYWNlVGV4dHVyZSBzdXJmYWNlKSB7CisgICAgICAgIC8vTG9nLmUoUmVuZGVyU2NyaXB0LkxPR19UQUcsICJvblN1cmZhY2VUZXh0dXJlVXBkYXRlZCIpOworICAgICAgICBtU3VyZmFjZVRleHR1cmUgPSBzdXJmYWNlOworICAgIH0KKworICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogSW5mb3JtIHRoZSB2aWV3IHRoYXQgdGhlIGFjdGl2aXR5IGlzIHBhdXNlZC4gVGhlIG93bmVyIG9mIHRoaXMgdmlldyBtdXN0CisgICAgICogY2FsbCB0aGlzIG1ldGhvZCB3aGVuIHRoZSBhY3Rpdml0eSBpcyBwYXVzZWQuIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbAorICAgICAqIHBhdXNlIHRoZSByZW5kZXJpbmcgdGhyZWFkLgorICAgICAqIE11c3Qgbm90IGJlIGNhbGxlZCBiZWZvcmUgYSByZW5kZXJlciBoYXMgYmVlbiBzZXQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcGF1c2UoKSB7CisgICAgICAgIGlmKG1SUyAhPSBudWxsKSB7CisgICAgICAgICAgICBtUlMucGF1c2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIEluZm9ybSB0aGUgdmlldyB0aGF0IHRoZSBhY3Rpdml0eSBpcyByZXN1bWVkLiBUaGUgb3duZXIgb2YgdGhpcyB2aWV3IG11c3QKKyAgICAgKiBjYWxsIHRoaXMgbWV0aG9kIHdoZW4gdGhlIGFjdGl2aXR5IGlzIHJlc3VtZWQuIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbAorICAgICAqIHJlY3JlYXRlIHRoZSBPcGVuR0wgZGlzcGxheSBhbmQgcmVzdW1lIHRoZSByZW5kZXJpbmcKKyAgICAgKiB0aHJlYWQuCisgICAgICogTXVzdCBub3QgYmUgY2FsbGVkIGJlZm9yZSBhIHJlbmRlcmVyIGhhcyBiZWVuIHNldC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZXN1bWUoKSB7CisgICAgICAgIGlmKG1SUyAhPSBudWxsKSB7CisgICAgICAgICAgICBtUlMucmVzdW1lKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKiBDcmVhdGUgYSBuZXcgUmVuZGVyU2NyaXB0R0wgb2JqZWN0IGFuZCBhdHRhY2ggaXQgdG8gdGhlCisgICAgICogVGV4dHVyZVZpZXcgaWYgcHJlc2VudC4KKyAgICAgKgorICAgICAqCisgICAgICogQHBhcmFtIHNjIFRoZSBSUyBzdXJmYWNlIGNvbmZpZyB0byBjcmVhdGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFJlbmRlclNjcmlwdEdMIFRoZSBuZXcgb2JqZWN0IGNyZWF0ZWQuCisgICAgICovCisgICAgcHVibGljIFJlbmRlclNjcmlwdEdMIGNyZWF0ZVJlbmRlclNjcmlwdEdMKFJlbmRlclNjcmlwdEdMLlN1cmZhY2VDb25maWcgc2MpIHsKKyAgICAgICAgUmVuZGVyU2NyaXB0R0wgcnMgPSBuZXcgUmVuZGVyU2NyaXB0R0wodGhpcy5nZXRDb250ZXh0KCksIHNjKTsKKyAgICAgICAgc2V0UmVuZGVyU2NyaXB0R0wocnMpOworICAgICAgICBpZiAobVN1cmZhY2VUZXh0dXJlICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1SUy5zZXRTdXJmYWNlVGV4dHVyZShtU3VyZmFjZVRleHR1cmUsIGdldFdpZHRoKCksIGdldEhlaWdodCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnM7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogRGVzdHJveSB0aGUgUmVuZGVyU2NyaXB0R0wgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogVGV4dHVyZVZpZXcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGVzdHJveVJlbmRlclNjcmlwdEdMKCkgeworICAgICAgICBtUlMuZGVzdHJveSgpOworICAgICAgICBtUlMgPSBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIFNldCBhIG5ldyBSZW5kZXJTY3JpcHRHTCBvYmplY3QuICBUaGlzIGFsc28gd2lsbCBhdHRhY2ggdGhlCisgICAgICogbmV3IG9iamVjdCB0byB0aGUgVGV4dHVyZVZpZXcgaWYgcHJlc2VudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBUaGUgbmV3IFJTIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRSZW5kZXJTY3JpcHRHTChSZW5kZXJTY3JpcHRHTCBycykgeworICAgICAgICBtUlMgPSByczsKKyAgICAgICAgaWYgKG1TdXJmYWNlVGV4dHVyZSAhPSBudWxsKSB7CisgICAgICAgICAgICBtUlMuc2V0U3VyZmFjZVRleHR1cmUobVN1cmZhY2VUZXh0dXJlLCBnZXRXaWR0aCgpLCBnZXRIZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKiBSZXR1cm5zIHRoZSBwcmV2aW91c2x5IHNldCBSZW5kZXJTY3JpcHRHTCBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFJlbmRlclNjcmlwdEdMCisgICAgICovCisgICAgcHVibGljIFJlbmRlclNjcmlwdEdMIGdldFJlbmRlclNjcmlwdEdMKCkgeworICAgICAgICByZXR1cm4gbVJTOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlZjE1NgotLS0gL2Rldi9udWxsCisrKyBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0LmphdmEKQEAgLTAsMCArMSwxMjMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRSZWFkV3JpdGVMb2NrOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldE1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CitpbXBvcnQgYW5kcm9pZC5vcy5UcmFjZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGFjY2VzcyB0byBhIFJlbmRlclNjcmlwdCBjb250ZXh0LCB3aGljaCBjb250cm9scyBSZW5kZXJTY3JpcHQKKyAqIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgdGVhcmRvd24uIEFuIGluc3RhbmNlIG9mIHRoZSBSZW5kZXJTY3JpcHQKKyAqIGNsYXNzIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUgYW55IG90aGVyIFJTIG9iamVjdHMgY2FuIGJlIGNyZWF0ZWQuCisgKgorICogPGRpdiBjbGFzcz0ic3BlY2lhbCByZWZlcmVuY2UiPgorICogPGgzPkRldmVsb3BlciBHdWlkZXM8L2gzPgorICogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIFJlbmRlclNjcmlwdCwgcmVhZCB0aGUKKyAqIDxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVuZGVyc2NyaXB0L2luZGV4Lmh0bWwiPlJlbmRlclNjcmlwdDwvYT4gZGV2ZWxvcGVyIGd1aWRlLjwvcD4KKyAqIDwvZGl2PgorICoqLworcHVibGljIGNsYXNzIFJlbmRlclNjcmlwdCB7CisgICAgc3RhdGljIGZpbmFsIGxvbmcgVFJBQ0VfVEFHID0gVHJhY2UuVFJBQ0VfVEFHX1JTOworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBMT0dfVEFHID0gIlJlbmRlclNjcmlwdF9qbmkiOworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHICA9IGZhbHNlOworICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsiVW51c2VkRGVjbGFyYXRpb24iLCAiZGVwcmVjYXRpb24ifSkKKyAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBMT0dfRU5BQkxFRCA9IGZhbHNlOworCisgICAgcHJpdmF0ZSBDb250ZXh0IG1BcHBsaWNhdGlvbkNvbnRleHQ7CisKKyAgICAvKgorICAgICAqIFdlIHVzZSBhIGNsYXNzIGluaXRpYWxpemVyIHRvIGFsbG93IHRoZSBuYXRpdmUgY29kZSB0byBjYWNoZSBzb21lCisgICAgICogZmllbGQgb2Zmc2V0cy4KKyAgICAgKi8KKyAgICBAU3VwcHJlc3NXYXJuaW5ncyh7IkZpZWxkQ2FuQmVMb2NhbCIsICJVbnVzZWREZWNsYXJhdGlvbiJ9KSAvLyBUT0RPOiBub3cgdXNlZCBsb2NhbGx5OyByZW1vdmU/CisgICAgc3RhdGljIGJvb2xlYW4gc0luaXRpYWxpemVkOworICAgIG5hdGl2ZSBzdGF0aWMgdm9pZCBfbkluaXQoKTsKKworICAgIHN0YXRpYyBPYmplY3Qgc1J1bnRpbWU7CisgICAgc3RhdGljIE1ldGhvZCByZWdpc3Rlck5hdGl2ZUFsbG9jYXRpb247CisgICAgc3RhdGljIE1ldGhvZCByZWdpc3Rlck5hdGl2ZUZyZWU7CisKKyAgICBzdGF0aWMgeworICAgICAgICBzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFTeXN0ZW1Qcm9wZXJ0aWVzLmdldEJvb2xlYW4oImNvbmZpZy5kaXNhYmxlX3JlbmRlcnNjcmlwdCIsIGZhbHNlKSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBDbGFzczw/PiB2bV9ydW50aW1lID0gQ2xhc3MuZm9yTmFtZSgiZGFsdmlrLnN5c3RlbS5WTVJ1bnRpbWUiKTsKKyAgICAgICAgICAgICAgICBNZXRob2QgZ2V0X3J1bnRpbWUgPSB2bV9ydW50aW1lLmdldERlY2xhcmVkTWV0aG9kKCJnZXRSdW50aW1lIik7CisgICAgICAgICAgICAgICAgc1J1bnRpbWUgPSBnZXRfcnVudGltZS5pbnZva2UobnVsbCk7CisgICAgICAgICAgICAgICAgcmVnaXN0ZXJOYXRpdmVBbGxvY2F0aW9uID0gdm1fcnVudGltZS5nZXREZWNsYXJlZE1ldGhvZCgicmVnaXN0ZXJOYXRpdmVBbGxvY2F0aW9uIiwgSW50ZWdlci5UWVBFKTsKKyAgICAgICAgICAgICAgICByZWdpc3Rlck5hdGl2ZUZyZWUgPSB2bV9ydW50aW1lLmdldERlY2xhcmVkTWV0aG9kKCJyZWdpc3Rlck5hdGl2ZUZyZWUiLCBJbnRlZ2VyLlRZUEUpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiRXJyb3IgbG9hZGluZyBHQyBtZXRob2RzOiAiICsgZSk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiRXJyb3IgbG9hZGluZyBHQyBtZXRob2RzOiAiICsgZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5sb2FkTGlicmFyeSgicnNfam5pIik7CisgICAgICAgICAgICAgICAgX25Jbml0KCk7CisgICAgICAgICAgICAgICAgc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFVuc2F0aXNmaWVkTGlua0Vycm9yIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiRXJyb3IgbG9hZGluZyBSUyBqbmkgbGlicmFyeTogIiArIGUpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIkVycm9yIGxvYWRpbmcgUlMgam5pIGxpYnJhcnk6ICIgKyBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vbi10aHJlYWRzYWZlIGZ1bmN0aW9ucy4KKyAgICBuYXRpdmUgbG9uZyAgbkRldmljZUNyZWF0ZSgpOworICAgIG5hdGl2ZSB2b2lkIG5EZXZpY2VEZXN0cm95KGxvbmcgZGV2KTsKKyAgICBuYXRpdmUgdm9pZCBuRGV2aWNlU2V0Q29uZmlnKGxvbmcgZGV2LCBpbnQgcGFyYW0sIGludCB2YWx1ZSk7CisgICAgbmF0aXZlIGludCBuQ29udGV4dEdldFVzZXJNZXNzYWdlKGxvbmcgY29uLCBpbnRbXSBkYXRhKTsKKyAgICBuYXRpdmUgU3RyaW5nIG5Db250ZXh0R2V0RXJyb3JNZXNzYWdlKGxvbmcgY29uKTsKKyAgICBuYXRpdmUgaW50ICBuQ29udGV4dFBlZWtNZXNzYWdlKGxvbmcgY29uLCBpbnRbXSBzdWJJRCk7CisgICAgbmF0aXZlIHZvaWQgbkNvbnRleHRJbml0VG9DbGllbnQobG9uZyBjb24pOworICAgIG5hdGl2ZSB2b2lkIG5Db250ZXh0RGVpbml0VG9DbGllbnQobG9uZyBjb24pOworCisgICAgc3RhdGljIEZpbGUgbUNhY2hlRGlyOworCisgICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRpcmVjdG9yeSB0byB1c2UgYXMgYSBwZXJzaXN0ZW50IHN0b3JhZ2UgZm9yIHRoZQorICAgICAqIHJlbmRlcnNjcmlwdCBvYmplY3QgZmlsZSBjYWNoZS4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICogQHBhcmFtIGNhY2hlRGlyIEEgZGlyZWN0b3J5IHRoZSBjdXJyZW50IHByb2Nlc3MgY2FuIHdyaXRlIHRvCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwRGlza0NhY2hlKEZpbGUgY2FjaGVEaXIpIHsKKyAgICAgICAgaWYgKCFzSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJSZW5kZXJTY3JpcHQuc2V0dXBEaXNrQ2FjaGUoKSBjYWxsZWQgd2hlbiBkaXNhYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRGVmZXIgY3JlYXRpb24gb2YgY2FjaGUgcGF0aCB0byBuU2NyaXB0Q0NyZWF0ZSgpLgorICAgICAgICBtQ2FjaGVEaXIgPSBjYWNoZURpcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb250ZXh0VHlwZSBzcGVjaWZpZXMgdGhlIHNwZWNpZmljIHR5cGUgb2YgY29udGV4dCB0byBiZSBjcmVhdGVkLgorICAgICAqCisgICAgICovCisgICAgcHVibGljIGVudW0gQ29udGV4dFR5cGUgeworICAgICAgICAvKioKKyAgICAgICAgICogTk9STUFMIGNvbnRleHQsIHRoaXMgaXMgdGhlIGRlZmF1bHQgYW5kIHdoYXQgc2hpcHBpbmcgYXBwcyBzaG91bGQKKyAgICAgICAgICogdXNlLgorICAgICAgICAgKi8KKyAgICAgICAgTk9STUFMICgwKSwKKworICAgICAgICAvKioKKyAgICAgICAgICogREVCVUcgY29udGV4dCwgcGVyZm9ybSBleHRyYSBydW50aW1lIGNoZWNrcyB0byB2YWxpZGF0ZSB0aGUKKyAgICAgICAgICoga2VybmVscyBhbmQgQVBJcyBhcmUgYmVpbmcgdXNlZCBhcyBpbnRlbmRlZC4gIEdldCBhbmQgU2V0RWxlbWVudEF0CisgICAgICAgICAqIHdpbGwgYmUgYm91bmRzIGNoZWNrZWQgaW4gdGhpcyBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgREVCVUcgKDEpLAorCisgICAgICAgIC8qKgorICAgICAgICAgKiBQUk9GSUxFIGNvbnRleHQsIEludGVuZGVkIHRvIGJlIHVzZWQgb25jZSB0aGUgZmlyc3QgdGltZSBhbgorICAgICAgICAgKiBhcHBsaWNhdGlvbiBpcyBydW4gb24gYSBuZXcgZGV2aWNlLiAgVGhpcyBtb2RlIGFsbG93cyB0aGUgcnVudGltZSB0bworICAgICAgICAgKiBkbyBhZGRpdGlvbmFsIHRlc3RpbmcgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4KKyAgICAgICAgICovCisgICAgICAgIFBST0ZJTEUgKDIpOworCisgICAgICAgIGludCBtSUQ7CisgICAgICAgIENvbnRleHRUeXBlKGludCBpZCkgeworICAgICAgICAgICAgbUlEID0gaWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDb250ZXh0VHlwZSBtQ29udGV4dFR5cGU7CisgICAgUmVlbnRyYW50UmVhZFdyaXRlTG9jayBtUldMb2NrOworCisgICAgLy8gTWV0aG9kcyBiZWxvdyBhcmUgd3JhcHBlZCB0byBwcm90ZWN0IHRoZSBub24tdGhyZWFkc2FmZQorICAgIC8vIGxvY2tsZXNzIGZpZm8uCisgICAgbmF0aXZlIGxvbmcgIHJzbkNvbnRleHRDcmVhdGVHTChsb25nIGRldiwgaW50IHZlciwgaW50IHNka1ZlciwKKyAgICAgICAgICAgICAgICAgaW50IGNvbG9yTWluLCBpbnQgY29sb3JQcmVmLAorICAgICAgICAgICAgICAgICBpbnQgYWxwaGFNaW4sIGludCBhbHBoYVByZWYsCisgICAgICAgICAgICAgICAgIGludCBkZXB0aE1pbiwgaW50IGRlcHRoUHJlZiwKKyAgICAgICAgICAgICAgICAgaW50IHN0ZW5jaWxNaW4sIGludCBzdGVuY2lsUHJlZiwKKyAgICAgICAgICAgICAgICAgaW50IHNhbXBsZXNNaW4sIGludCBzYW1wbGVzUHJlZiwgZmxvYXQgc2FtcGxlc1EsIGludCBkcGkpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5Db250ZXh0Q3JlYXRlR0wobG9uZyBkZXYsIGludCB2ZXIsIGludCBzZGtWZXIsCisgICAgICAgICAgICAgICAgIGludCBjb2xvck1pbiwgaW50IGNvbG9yUHJlZiwKKyAgICAgICAgICAgICAgICAgaW50IGFscGhhTWluLCBpbnQgYWxwaGFQcmVmLAorICAgICAgICAgICAgICAgICBpbnQgZGVwdGhNaW4sIGludCBkZXB0aFByZWYsCisgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsTWluLCBpbnQgc3RlbmNpbFByZWYsCisgICAgICAgICAgICAgICAgIGludCBzYW1wbGVzTWluLCBpbnQgc2FtcGxlc1ByZWYsIGZsb2F0IHNhbXBsZXNRLCBpbnQgZHBpKSB7CisgICAgICAgIHJldHVybiByc25Db250ZXh0Q3JlYXRlR0woZGV2LCB2ZXIsIHNka1ZlciwgY29sb3JNaW4sIGNvbG9yUHJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYU1pbiwgYWxwaGFQcmVmLCBkZXB0aE1pbiwgZGVwdGhQcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZW5jaWxNaW4sIHN0ZW5jaWxQcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXNNaW4sIHNhbXBsZXNQcmVmLCBzYW1wbGVzUSwgZHBpKTsKKyAgICB9CisgICAgbmF0aXZlIGxvbmcgIHJzbkNvbnRleHRDcmVhdGUobG9uZyBkZXYsIGludCB2ZXIsIGludCBzZGtWZXIsIGludCBjb250ZXh0VHlwZSk7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkNvbnRleHRDcmVhdGUobG9uZyBkZXYsIGludCB2ZXIsIGludCBzZGtWZXIsIGludCBjb250ZXh0VHlwZSkgeworICAgICAgICByZXR1cm4gcnNuQ29udGV4dENyZWF0ZShkZXYsIHZlciwgc2RrVmVyLCBjb250ZXh0VHlwZSk7CisgICAgfQorICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHREZXN0cm95KGxvbmcgY29uKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dERlc3Ryb3koKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisKKyAgICAgICAgLy8gdGFrZSB0ZWFyZG93biBsb2NrCisgICAgICAgIC8vIHRlYXJkb3duIGxvY2sgY2FuIG9ubHkgYmUgdGFrZW4gd2hlbiBubyBvYmplY3RzIGFyZSBiZWluZyBkZXN0cm95ZWQKKyAgICAgICAgUmVlbnRyYW50UmVhZFdyaXRlTG9jay5Xcml0ZUxvY2sgd2xvY2sgPSBtUldMb2NrLndyaXRlTG9jaygpOworICAgICAgICB3bG9jay5sb2NrKCk7CisKKyAgICAgICAgbG9uZyBjdXJDb24gPSBtQ29udGV4dDsKKyAgICAgICAgLy8gY29udGV4dCBpcyBjb25zaWRlcmVkIGRlYWQgYXMgb2YgdGhpcyBwb2ludAorICAgICAgICBtQ29udGV4dCA9IDA7CisKKyAgICAgICAgd2xvY2sudW5sb2NrKCk7CisgICAgICAgIHJzbkNvbnRleHREZXN0cm95KGN1ckNvbik7CisgICAgfQorICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRTZXRTdXJmYWNlKGxvbmcgY29uLCBpbnQgdywgaW50IGgsIFN1cmZhY2Ugc3VyKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dFNldFN1cmZhY2UoaW50IHcsIGludCBoLCBTdXJmYWNlIHN1cikgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25Db250ZXh0U2V0U3VyZmFjZShtQ29udGV4dCwgdywgaCwgc3VyKTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dFNldFN1cmZhY2VUZXh0dXJlKGxvbmcgY29uLCBpbnQgdywgaW50IGgsIFN1cmZhY2VUZXh0dXJlIHN1cik7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRTZXRTdXJmYWNlVGV4dHVyZShpbnQgdywgaW50IGgsIFN1cmZhY2VUZXh0dXJlIHN1cikgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25Db250ZXh0U2V0U3VyZmFjZVRleHR1cmUobUNvbnRleHQsIHcsIGgsIHN1cik7CisgICAgfQorICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRTZXRQcmlvcml0eShsb25nIGNvbiwgaW50IHApOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0U2V0UHJpb3JpdHkoaW50IHApIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuQ29udGV4dFNldFByaW9yaXR5KG1Db250ZXh0LCBwKTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dER1bXAobG9uZyBjb24sIGludCBiaXRzKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dER1bXAoaW50IGJpdHMpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuQ29udGV4dER1bXAobUNvbnRleHQsIGJpdHMpOworICAgIH0KKyAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0RmluaXNoKGxvbmcgY29uKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dEZpbmlzaCgpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuQ29udGV4dEZpbmlzaChtQ29udGV4dCk7CisgICAgfQorCisgICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dFNlbmRNZXNzYWdlKGxvbmcgY29uLCBpbnQgaWQsIGludFtdIGRhdGEpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0U2VuZE1lc3NhZ2UoaW50IGlkLCBpbnRbXSBkYXRhKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzbkNvbnRleHRTZW5kTWVzc2FnZShtQ29udGV4dCwgaWQsIGRhdGEpOworICAgIH0KKworICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRCaW5kUm9vdFNjcmlwdChsb25nIGNvbiwgaW50IHNjcmlwdCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRCaW5kUm9vdFNjcmlwdChpbnQgc2NyaXB0KSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzbkNvbnRleHRCaW5kUm9vdFNjcmlwdChtQ29udGV4dCwgc2NyaXB0KTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dEJpbmRTYW1wbGVyKGxvbmcgY29uLCBpbnQgc2FtcGxlciwgaW50IHNsb3QpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0QmluZFNhbXBsZXIoaW50IHNhbXBsZXIsIGludCBzbG90KSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzbkNvbnRleHRCaW5kU2FtcGxlcihtQ29udGV4dCwgc2FtcGxlciwgc2xvdCk7CisgICAgfQorICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlKGxvbmcgY29uLCBpbnQgcGZzKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dEJpbmRQcm9ncmFtU3RvcmUoaW50IHBmcykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25Db250ZXh0QmluZFByb2dyYW1TdG9yZShtQ29udGV4dCwgcGZzKTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dEJpbmRQcm9ncmFtRnJhZ21lbnQobG9uZyBjb24sIGludCBwZik7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50KGludCBwZikgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25Db250ZXh0QmluZFByb2dyYW1GcmFnbWVudChtQ29udGV4dCwgcGYpOworICAgIH0KKyAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0QmluZFByb2dyYW1WZXJ0ZXgobG9uZyBjb24sIGludCBwdik7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleChpbnQgcHYpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuQ29udGV4dEJpbmRQcm9ncmFtVmVydGV4KG1Db250ZXh0LCBwdik7CisgICAgfQorICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRCaW5kUHJvZ3JhbVJhc3Rlcihsb25nIGNvbiwgaW50IHByKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dEJpbmRQcm9ncmFtUmFzdGVyKGludCBwcikgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIobUNvbnRleHQsIHByKTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dFBhdXNlKGxvbmcgY29uKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dFBhdXNlKCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25Db250ZXh0UGF1c2UobUNvbnRleHQpOworICAgIH0KKyAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0UmVzdW1lKGxvbmcgY29uKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dFJlc3VtZSgpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuQ29udGV4dFJlc3VtZShtQ29udGV4dCk7CisgICAgfQorCisgICAgbmF0aXZlIHZvaWQgcnNuQXNzaWduTmFtZShsb25nIGNvbiwgbG9uZyBvYmosIGJ5dGVbXSBuYW1lKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQXNzaWduTmFtZShsb25nIG9iaiwgYnl0ZVtdIG5hbWUpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuQXNzaWduTmFtZShtQ29udGV4dCwgb2JqLCBuYW1lKTsKKyAgICB9CisgICAgbmF0aXZlIFN0cmluZyByc25HZXROYW1lKGxvbmcgY29uLCBsb25nIG9iaik7CisgICAgc3luY2hyb25pemVkIFN0cmluZyBuR2V0TmFtZShsb25nIG9iaikgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuR2V0TmFtZShtQ29udGV4dCwgb2JqKTsKKyAgICB9CisKKyAgICAvLyBuT2JqRGVzdHJveSBpcyBleHBsaWNpdGx5IF9ub3RfIHN5bmNocm9ub3VzIHRvIHByZXZlbnQgY3Jhc2hlcyBpbiBmaW5hbGl6ZXJzCisgICAgbmF0aXZlIHZvaWQgcnNuT2JqRGVzdHJveShsb25nIGNvbiwgbG9uZyBpZCk7CisgICAgdm9pZCBuT2JqRGVzdHJveShsb25nIGlkKSB7CisgICAgICAgIC8vIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gaGVyZS4gIFRoZSBjYWxsaW5nIGNvZGUgbWF5IGJlIHJ1bgorICAgICAgICAvLyBieSB0aGUgZ2Mgd2hpbGUgdGVhcmRvd24gaXMgb2NjdXJpbmcuICBUaGlzIHByb3RlY3RzIGFnYWludHMKKyAgICAgICAgLy8gZGVsZXRpbmcgZGVhZCBvYmplY3RzLgorICAgICAgICBpZiAobUNvbnRleHQgIT0gMCkgeworICAgICAgICAgICAgcnNuT2JqRGVzdHJveShtQ29udGV4dCwgaWQpOworICAgICAgICB9CisgICAgfQorCisgICAgbmF0aXZlIGxvbmcgcnNuRWxlbWVudENyZWF0ZShsb25nIGNvbiwgbG9uZyB0eXBlLCBpbnQga2luZCwgYm9vbGVhbiBub3JtLCBpbnQgdmVjU2l6ZSk7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkVsZW1lbnRDcmVhdGUobG9uZyB0eXBlLCBpbnQga2luZCwgYm9vbGVhbiBub3JtLCBpbnQgdmVjU2l6ZSkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuRWxlbWVudENyZWF0ZShtQ29udGV4dCwgdHlwZSwga2luZCwgbm9ybSwgdmVjU2l6ZSk7CisgICAgfQorICAgIG5hdGl2ZSBsb25nIHJzbkVsZW1lbnRDcmVhdGUyKGxvbmcgY29uLCBpbnRbXWVsZW1lbnRzLCBTdHJpbmdbXSBuYW1lcywgaW50W10gYXJyYXlTaXplcyk7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkVsZW1lbnRDcmVhdGUyKGludFtdIGVsZW1lbnRzLCBTdHJpbmdbXSBuYW1lcywgaW50W10gYXJyYXlTaXplcykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuRWxlbWVudENyZWF0ZTIobUNvbnRleHQsIGVsZW1lbnRzLCBuYW1lcywgYXJyYXlTaXplcyk7CisgICAgfQorICAgIG5hdGl2ZSB2b2lkIHJzbkVsZW1lbnRHZXROYXRpdmVEYXRhKGxvbmcgY29uLCBsb25nIGlkLCBpbnRbXSBlbGVtZW50RGF0YSk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkVsZW1lbnRHZXROYXRpdmVEYXRhKGxvbmcgaWQsIGludFtdIGVsZW1lbnREYXRhKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzbkVsZW1lbnRHZXROYXRpdmVEYXRhKG1Db250ZXh0LCBpZCwgZWxlbWVudERhdGEpOworICAgIH0KKyAgICBuYXRpdmUgdm9pZCByc25FbGVtZW50R2V0U3ViRWxlbWVudHMobG9uZyBjb24sIGxvbmcgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIElEcywgU3RyaW5nW10gbmFtZXMsIGludFtdIGFycmF5U2l6ZXMpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5FbGVtZW50R2V0U3ViRWxlbWVudHMobG9uZyBpZCwgaW50W10gSURzLCBTdHJpbmdbXSBuYW1lcywgaW50W10gYXJyYXlTaXplcykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25FbGVtZW50R2V0U3ViRWxlbWVudHMobUNvbnRleHQsIGlkLCBJRHMsIG5hbWVzLCBhcnJheVNpemVzKTsKKyAgICB9CisKKyAgICBuYXRpdmUgbG9uZyByc25UeXBlQ3JlYXRlKGxvbmcgY29uLCBsb25nIGVpZCwgaW50IHgsIGludCB5LCBpbnQgeiwgYm9vbGVhbiBtaXBzLCBib29sZWFuIGZhY2VzLCBpbnQgeXV2KTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuVHlwZUNyZWF0ZShsb25nIGVpZCwgaW50IHgsIGludCB5LCBpbnQgeiwgYm9vbGVhbiBtaXBzLCBib29sZWFuIGZhY2VzLCBpbnQgeXV2KSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25UeXBlQ3JlYXRlKG1Db250ZXh0LCBlaWQsIHgsIHksIHosIG1pcHMsIGZhY2VzLCB5dXYpOworICAgIH0KKyAgICBuYXRpdmUgdm9pZCByc25UeXBlR2V0TmF0aXZlRGF0YShsb25nIGNvbiwgbG9uZyBpZCwgaW50W10gdHlwZURhdGEpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5UeXBlR2V0TmF0aXZlRGF0YShsb25nIGlkLCBpbnRbXSB0eXBlRGF0YSkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25UeXBlR2V0TmF0aXZlRGF0YShtQ29udGV4dCwgaWQsIHR5cGVEYXRhKTsKKyAgICB9CisKKyAgICBuYXRpdmUgbG9uZyByc25BbGxvY2F0aW9uQ3JlYXRlVHlwZWQobG9uZyBjb24sIGxvbmcgdHlwZSwgaW50IG1pcCwgaW50IHVzYWdlLCBpbnQgcG9pbnRlcik7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkFsbG9jYXRpb25DcmVhdGVUeXBlZChsb25nIHR5cGUsIGludCBtaXAsIGludCB1c2FnZSwgaW50IHBvaW50ZXIpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzbkFsbG9jYXRpb25DcmVhdGVUeXBlZChtQ29udGV4dCwgdHlwZSwgbWlwLCB1c2FnZSwgcG9pbnRlcik7CisgICAgfQorICAgIG5hdGl2ZSBsb25nIHJzbkFsbG9jYXRpb25DcmVhdGVGcm9tQml0bWFwKGxvbmcgY29uLCBsb25nIHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSk7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkFsbG9jYXRpb25DcmVhdGVGcm9tQml0bWFwKGxvbmcgdHlwZSwgaW50IG1pcCwgQml0bWFwIGJtcCwgaW50IHVzYWdlKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25BbGxvY2F0aW9uQ3JlYXRlRnJvbUJpdG1hcChtQ29udGV4dCwgdHlwZSwgbWlwLCBibXAsIHVzYWdlKTsKKyAgICB9CisKKyAgICBuYXRpdmUgbG9uZyByc25BbGxvY2F0aW9uQ3JlYXRlQml0bWFwQmFja2VkQWxsb2NhdGlvbihsb25nIGNvbiwgbG9uZyB0eXBlLCBpbnQgbWlwLCBCaXRtYXAgYm1wLCBpbnQgdXNhZ2UpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5BbGxvY2F0aW9uQ3JlYXRlQml0bWFwQmFja2VkQWxsb2NhdGlvbihsb25nIHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24obUNvbnRleHQsIHR5cGUsIG1pcCwgYm1wLCB1c2FnZSk7CisgICAgfQorCisgICAgbmF0aXZlIGxvbmcgcnNuQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwKGxvbmcgY29uLCBsb25nIHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSk7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkFsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcChsb25nIHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwKG1Db250ZXh0LCB0eXBlLCBtaXAsIGJtcCwgdXNhZ2UpOworICAgIH0KKyAgICBuYXRpdmUgbG9uZyAgcnNuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcFJlZihsb25nIGNvbiwgbG9uZyB0eXBlLCBCaXRtYXAgYm1wKTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcFJlZihsb25nIHR5cGUsIEJpdG1hcCBibXApIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzbkFsbG9jYXRpb25DcmVhdGVCaXRtYXBSZWYobUNvbnRleHQsIHR5cGUsIGJtcCk7CisgICAgfQorICAgIG5hdGl2ZSBsb25nICByc25BbGxvY2F0aW9uQ3JlYXRlRnJvbUFzc2V0U3RyZWFtKGxvbmcgY29uLCBpbnQgbWlwcywgaW50IGFzc2V0U3RyZWFtLCBpbnQgdXNhZ2UpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5BbGxvY2F0aW9uQ3JlYXRlRnJvbUFzc2V0U3RyZWFtKGludCBtaXBzLCBpbnQgYXNzZXRTdHJlYW0sIGludCB1c2FnZSkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkNyZWF0ZUZyb21Bc3NldFN0cmVhbShtQ29udGV4dCwgbWlwcywgYXNzZXRTdHJlYW0sIHVzYWdlKTsKKyAgICB9CisKKyAgICBuYXRpdmUgdm9pZCAgcnNuQWxsb2NhdGlvbkNvcHlUb0JpdG1hcChsb25nIGNvbiwgbG9uZyBhbGxvYywgQml0bWFwIGJtcCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAobG9uZyBhbGxvYywgQml0bWFwIGJtcCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25BbGxvY2F0aW9uQ29weVRvQml0bWFwKG1Db250ZXh0LCBhbGxvYywgYm1wKTsKKyAgICB9CisKKworICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25TeW5jQWxsKGxvbmcgY29uLCBsb25nIGFsbG9jLCBpbnQgc3JjKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvblN5bmNBbGwobG9uZyBhbGxvYywgaW50IHNyYykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25BbGxvY2F0aW9uU3luY0FsbChtQ29udGV4dCwgYWxsb2MsIHNyYyk7CisgICAgfQorICAgIG5hdGl2ZSBTdXJmYWNlIHJzbkFsbG9jYXRpb25HZXRTdXJmYWNlKGxvbmcgY29uLCBsb25nIGFsbG9jKTsKKyAgICBzeW5jaHJvbml6ZWQgU3VyZmFjZSBuQWxsb2NhdGlvbkdldFN1cmZhY2UobG9uZyBhbGxvYykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkdldFN1cmZhY2UobUNvbnRleHQsIGFsbG9jKTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvblNldFN1cmZhY2UobG9uZyBjb24sIGxvbmcgYWxsb2MsIFN1cmZhY2Ugc3VyKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvblNldFN1cmZhY2UobG9uZyBhbGxvYywgU3VyZmFjZSBzdXIpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuQWxsb2NhdGlvblNldFN1cmZhY2UobUNvbnRleHQsIGFsbG9jLCBzdXIpOworICAgIH0KKyAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uSW9TZW5kKGxvbmcgY29uLCBsb25nIGFsbG9jKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbklvU2VuZChsb25nIGFsbG9jKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzbkFsbG9jYXRpb25Jb1NlbmQobUNvbnRleHQsIGFsbG9jKTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbklvUmVjZWl2ZShsb25nIGNvbiwgbG9uZyBhbGxvYyk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25Jb1JlY2VpdmUobG9uZyBhbGxvYykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25BbGxvY2F0aW9uSW9SZWNlaXZlKG1Db250ZXh0LCBhbGxvYyk7CisgICAgfQorCisKKyAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uR2VuZXJhdGVNaXBtYXBzKGxvbmcgY29uLCBsb25nIGFsbG9jKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyhsb25nIGFsbG9jKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzbkFsbG9jYXRpb25HZW5lcmF0ZU1pcG1hcHMobUNvbnRleHQsIGFsbG9jKTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgIHJzbkFsbG9jYXRpb25Db3B5RnJvbUJpdG1hcChsb25nIGNvbiwgbG9uZyBhbGxvYywgQml0bWFwIGJtcCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25Db3B5RnJvbUJpdG1hcChsb25nIGFsbG9jLCBCaXRtYXAgYm1wKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzbkFsbG9jYXRpb25Db3B5RnJvbUJpdG1hcChtQ29udGV4dCwgYWxsb2MsIGJtcCk7CisgICAgfQorCisKKyAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTFEKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIE9iamVjdCBkLCBpbnQgc2l6ZUJ5dGVzLCBpbnQgZHQpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRGF0YTFEKGxvbmcgaWQsIGludCBvZmYsIGludCBtaXAsIGludCBjb3VudCwgT2JqZWN0IGQsIGludCBzaXplQnl0ZXMsIEVsZW1lbnQuRGF0YVR5cGUgZHQpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuQWxsb2NhdGlvbkRhdGExRChtQ29udGV4dCwgaWQsIG9mZiwgbWlwLCBjb3VudCwgZCwgc2l6ZUJ5dGVzLCBkdC5tSUQpOworICAgIH0KKworICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25FbGVtZW50RGF0YTFEKGxvbmcgY29uLGxvbmcgaWQsIGludCB4b2ZmLCBpbnQgbWlwLCBpbnQgY29tcElkeCwgYnl0ZVtdIGQsIGludCBzaXplQnl0ZXMpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRWxlbWVudERhdGExRChsb25nIGlkLCBpbnQgeG9mZiwgaW50IG1pcCwgaW50IGNvbXBJZHgsIGJ5dGVbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzbkFsbG9jYXRpb25FbGVtZW50RGF0YTFEKG1Db250ZXh0LCBpZCwgeG9mZiwgbWlwLCBjb21wSWR4LCBkLCBzaXplQnl0ZXMpOworICAgIH0KKworICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhMkQobG9uZyBjb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRzdEFsbG9jLCBpbnQgZHN0WG9mZiwgaW50IGRzdFlvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0TWlwLCBpbnQgZHN0RmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3JjQWxsb2MsIGludCBzcmNYb2ZmLCBpbnQgc3JjWW9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNNaXAsIGludCBzcmNGYWNlKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkRhdGEyRChsb25nIGRzdEFsbG9jLCBpbnQgZHN0WG9mZiwgaW50IGRzdFlvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRzdE1pcCwgaW50IGRzdEZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3JjQWxsb2MsIGludCBzcmNYb2ZmLCBpbnQgc3JjWW9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjTWlwLCBpbnQgc3JjRmFjZSkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25BbGxvY2F0aW9uRGF0YTJEKG1Db250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdEFsbG9jLCBkc3RYb2ZmLCBkc3RZb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdE1pcCwgZHN0RmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0FsbG9jLCBzcmNYb2ZmLCBzcmNZb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY01pcCwgc3JjRmFjZSk7CisgICAgfQorCisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEyRChsb25nIGNvbiwgbG9uZyBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3LCBpbnQgaCwgT2JqZWN0IGQsIGludCBzaXplQnl0ZXMsIGludCBkdCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMkQobG9uZyBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdywgaW50IGgsIE9iamVjdCBkLCBpbnQgc2l6ZUJ5dGVzLCBFbGVtZW50LkRhdGFUeXBlIGR0KSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMkQobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCBtaXAsIGZhY2UsIHcsIGgsIGQsIHNpemVCeXRlcywgZHQubUlEKTsKKyAgICB9CisKKyAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTJEKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCBtaXAsIGludCBmYWNlLCBCaXRtYXAgYik7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMkQobG9uZyBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwgQml0bWFwIGIpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuQWxsb2NhdGlvbkRhdGEyRChtQ29udGV4dCwgaWQsIHhvZmYsIHlvZmYsIG1pcCwgZmFjZSwgYik7CisgICAgfQorCisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEzRChsb25nIGNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZHN0QWxsb2MsIGludCBkc3RYb2ZmLCBpbnQgZHN0WW9mZiwgaW50IGRzdFpvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0TWlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNyY0FsbG9jLCBpbnQgc3JjWG9mZiwgaW50IHNyY1lvZmYsIGludCBzcmNab2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY01pcCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhM0QobG9uZyBkc3RBbGxvYywgaW50IGRzdFhvZmYsIGludCBkc3RZb2ZmLCBpbnQgZHN0Wm9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0TWlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3JjQWxsb2MsIGludCBzcmNYb2ZmLCBpbnQgc3JjWW9mZiwgaW50IHNyY1pvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY01pcCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25BbGxvY2F0aW9uRGF0YTNEKG1Db250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdEFsbG9jLCBkc3RYb2ZmLCBkc3RZb2ZmLCBkc3Rab2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdE1pcCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjQWxsb2MsIHNyY1hvZmYsIHNyY1lvZmYsIHNyY1pvZmYsIHNyY01pcCk7CisgICAgfQorCisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEzRChsb25nIGNvbiwgbG9uZyBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IG1pcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3LCBpbnQgaCwgaW50IGRlcHRoLCBPYmplY3QgZCwgaW50IHNpemVCeXRlcywgaW50IGR0KTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkRhdGEzRChsb25nIGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCB6b2ZmLCBpbnQgbWlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3LCBpbnQgaCwgaW50IGRlcHRoLCBPYmplY3QgZCwgaW50IHNpemVCeXRlcywgRWxlbWVudC5EYXRhVHlwZSBkdCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25BbGxvY2F0aW9uRGF0YTNEKG1Db250ZXh0LCBpZCwgeG9mZiwgeW9mZiwgem9mZiwgbWlwLCB3LCBoLCBkZXB0aCwgZCwgc2l6ZUJ5dGVzLCBkdC5tSUQpOworICAgIH0KKworICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25SZWFkKGxvbmcgY29uLCBsb25nIGlkLCBPYmplY3QgZCwgaW50IGR0KTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvblJlYWQobG9uZyBpZCwgT2JqZWN0IGQsIEVsZW1lbnQuRGF0YVR5cGUgZHQpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuQWxsb2NhdGlvblJlYWQobUNvbnRleHQsIGlkLCBkLCBkdC5tSUQpOworICAgIH0KKworICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25SZWFkMUQobG9uZyBjb24sIGxvbmcgaWQsIGludCBvZmYsIGludCBtaXAsIGludCBjb3VudCwgT2JqZWN0IGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZUJ5dGVzLCBpbnQgZHQpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uUmVhZDFEKGxvbmcgaWQsIGludCBvZmYsIGludCBtaXAsIGludCBjb3VudCwgT2JqZWN0IGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemVCeXRlcywgRWxlbWVudC5EYXRhVHlwZSBkdCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25BbGxvY2F0aW9uUmVhZDFEKG1Db250ZXh0LCBpZCwgb2ZmLCBtaXAsIGNvdW50LCBkLCBzaXplQnl0ZXMsIGR0Lm1JRCk7CisgICAgfQorCisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvblJlYWQyRChsb25nIGNvbiwgbG9uZyBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3LCBpbnQgaCwgT2JqZWN0IGQsIGludCBzaXplQnl0ZXMsIGludCBkdCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25SZWFkMkQobG9uZyBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdywgaW50IGgsIE9iamVjdCBkLCBpbnQgc2l6ZUJ5dGVzLCBFbGVtZW50LkRhdGFUeXBlIGR0KSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzbkFsbG9jYXRpb25SZWFkMkQobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCBtaXAsIGZhY2UsIHcsIGgsIGQsIHNpemVCeXRlcywgZHQubUlEKTsKKyAgICB9CisKKyAgICBuYXRpdmUgbG9uZyAgcnNuQWxsb2NhdGlvbkdldFR5cGUobG9uZyBjb24sIGxvbmcgaWQpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5BbGxvY2F0aW9uR2V0VHlwZShsb25nIGlkKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25BbGxvY2F0aW9uR2V0VHlwZShtQ29udGV4dCwgaWQpOworICAgIH0KKworICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25SZXNpemUxRChsb25nIGNvbiwgbG9uZyBpZCwgaW50IGRpbVgpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uUmVzaXplMUQobG9uZyBpZCwgaW50IGRpbVgpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuQWxsb2NhdGlvblJlc2l6ZTFEKG1Db250ZXh0LCBpZCwgZGltWCk7CisgICAgfQorCisgICAgbmF0aXZlIGxvbmcgcnNuRmlsZUEzRENyZWF0ZUZyb21Bc3NldFN0cmVhbShsb25nIGNvbiwgaW50IGFzc2V0U3RyZWFtKTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuRmlsZUEzRENyZWF0ZUZyb21Bc3NldFN0cmVhbShpbnQgYXNzZXRTdHJlYW0pIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXRTdHJlYW0obUNvbnRleHQsIGFzc2V0U3RyZWFtKTsKKyAgICB9CisgICAgbmF0aXZlIGxvbmcgcnNuRmlsZUEzRENyZWF0ZUZyb21GaWxlKGxvbmcgY29uLCBTdHJpbmcgcGF0aCk7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkZpbGVBM0RDcmVhdGVGcm9tRmlsZShTdHJpbmcgcGF0aCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuRmlsZUEzRENyZWF0ZUZyb21GaWxlKG1Db250ZXh0LCBwYXRoKTsKKyAgICB9CisgICAgbmF0aXZlIGxvbmcgcnNuRmlsZUEzRENyZWF0ZUZyb21Bc3NldChsb25nIGNvbiwgQXNzZXRNYW5hZ2VyIG1nciwgU3RyaW5nIHBhdGgpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0KEFzc2V0TWFuYWdlciBtZ3IsIFN0cmluZyBwYXRoKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0KG1Db250ZXh0LCBtZ3IsIHBhdGgpOworICAgIH0KKyAgICBuYXRpdmUgaW50ICByc25GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzKGxvbmcgY29uLCBsb25nIGZpbGVBM0QpOworICAgIHN5bmNocm9uaXplZCBpbnQgbkZpbGVBM0RHZXROdW1JbmRleEVudHJpZXMobG9uZyBmaWxlQTNEKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzKG1Db250ZXh0LCBmaWxlQTNEKTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgcnNuRmlsZUEzREdldEluZGV4RW50cmllcyhsb25nIGNvbiwgbG9uZyBmaWxlQTNELCBpbnQgbnVtRW50cmllcywgaW50W10gSURzLCBTdHJpbmdbXSBuYW1lcyk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkZpbGVBM0RHZXRJbmRleEVudHJpZXMobG9uZyBmaWxlQTNELCBpbnQgbnVtRW50cmllcywgaW50W10gSURzLCBTdHJpbmdbXSBuYW1lcykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25GaWxlQTNER2V0SW5kZXhFbnRyaWVzKG1Db250ZXh0LCBmaWxlQTNELCBudW1FbnRyaWVzLCBJRHMsIG5hbWVzKTsKKyAgICB9CisgICAgbmF0aXZlIGludCAgcnNuRmlsZUEzREdldEVudHJ5QnlJbmRleChsb25nIGNvbiwgbG9uZyBmaWxlQTNELCBpbnQgaW5kZXgpOworICAgIHN5bmNocm9uaXplZCBpbnQgbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXgobG9uZyBmaWxlQTNELCBpbnQgaW5kZXgpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXgobUNvbnRleHQsIGZpbGVBM0QsIGluZGV4KTsKKyAgICB9CisKKyAgICBuYXRpdmUgaW50ICByc25Gb250Q3JlYXRlRnJvbUZpbGUobG9uZyBjb24sIFN0cmluZyBmaWxlTmFtZSwgZmxvYXQgc2l6ZSwgaW50IGRwaSk7CisgICAgc3luY2hyb25pemVkIGludCBuRm9udENyZWF0ZUZyb21GaWxlKFN0cmluZyBmaWxlTmFtZSwgZmxvYXQgc2l6ZSwgaW50IGRwaSkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuRm9udENyZWF0ZUZyb21GaWxlKG1Db250ZXh0LCBmaWxlTmFtZSwgc2l6ZSwgZHBpKTsKKyAgICB9CisgICAgbmF0aXZlIGludCAgcnNuRm9udENyZWF0ZUZyb21Bc3NldFN0cmVhbShsb25nIGNvbiwgU3RyaW5nIG5hbWUsIGZsb2F0IHNpemUsIGludCBkcGksIGludCBhc3NldFN0cmVhbSk7CisgICAgc3luY2hyb25pemVkIGludCBuRm9udENyZWF0ZUZyb21Bc3NldFN0cmVhbShTdHJpbmcgbmFtZSwgZmxvYXQgc2l6ZSwgaW50IGRwaSwgaW50IGFzc2V0U3RyZWFtKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtKG1Db250ZXh0LCBuYW1lLCBzaXplLCBkcGksIGFzc2V0U3RyZWFtKTsKKyAgICB9CisgICAgbmF0aXZlIGludCAgcnNuRm9udENyZWF0ZUZyb21Bc3NldChsb25nIGNvbiwgQXNzZXRNYW5hZ2VyIG1nciwgU3RyaW5nIHBhdGgsIGZsb2F0IHNpemUsIGludCBkcGkpOworICAgIHN5bmNocm9uaXplZCBpbnQgbkZvbnRDcmVhdGVGcm9tQXNzZXQoQXNzZXRNYW5hZ2VyIG1nciwgU3RyaW5nIHBhdGgsIGZsb2F0IHNpemUsIGludCBkcGkpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzbkZvbnRDcmVhdGVGcm9tQXNzZXQobUNvbnRleHQsIG1nciwgcGF0aCwgc2l6ZSwgZHBpKTsKKyAgICB9CisKKworICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEJpbmRBbGxvY2F0aW9uKGxvbmcgY29uLCBsb25nIHNjcmlwdCwgbG9uZyBhbGxvYywgaW50IHNsb3QpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRCaW5kQWxsb2NhdGlvbihsb25nIHNjcmlwdCwgbG9uZyBhbGxvYywgaW50IHNsb3QpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuU2NyaXB0QmluZEFsbG9jYXRpb24obUNvbnRleHQsIHNjcmlwdCwgYWxsb2MsIHNsb3QpOworICAgIH0KKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRTZXRUaW1lWm9uZShsb25nIGNvbiwgbG9uZyBzY3JpcHQsIGJ5dGVbXSB0aW1lWm9uZSk7CisgICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdFNldFRpbWVab25lKGxvbmcgc2NyaXB0LCBieXRlW10gdGltZVpvbmUpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuU2NyaXB0U2V0VGltZVpvbmUobUNvbnRleHQsIHNjcmlwdCwgdGltZVpvbmUpOworICAgIH0KKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRJbnZva2UobG9uZyBjb24sIGxvbmcgaWQsIGludCBzbG90KTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0SW52b2tlKGxvbmcgaWQsIGludCBzbG90KSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzblNjcmlwdEludm9rZShtQ29udGV4dCwgaWQsIHNsb3QpOworICAgIH0KKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRGb3JFYWNoKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCwgbG9uZyBhaW4sIGxvbmcgYW91dCwgYnl0ZVtdIHBhcmFtcyk7CisgICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0Rm9yRWFjaChsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QsIGxvbmcgYWluLCBsb25nIGFvdXQpOworICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEZvckVhY2hDbGlwcGVkKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCwgbG9uZyBhaW4sIGxvbmcgYW91dCwgYnl0ZVtdIHBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHN0YXJ0LCBpbnQgeGVuZCwgaW50IHlzdGFydCwgaW50IHllbmQsIGludCB6c3RhcnQsIGludCB6ZW5kKTsKKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRGb3JFYWNoQ2xpcHBlZChsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QsIGxvbmcgYWluLCBsb25nIGFvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHhzdGFydCwgaW50IHhlbmQsIGludCB5c3RhcnQsIGludCB5ZW5kLCBpbnQgenN0YXJ0LCBpbnQgemVuZCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdEZvckVhY2gobG9uZyBpZCwgaW50IHNsb3QsIGxvbmcgYWluLCBsb25nIGFvdXQsIGJ5dGVbXSBwYXJhbXMpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgaWYgKHBhcmFtcyA9PSBudWxsKSB7CisgICAgICAgICAgICByc25TY3JpcHRGb3JFYWNoKG1Db250ZXh0LCBpZCwgc2xvdCwgYWluLCBhb3V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJzblNjcmlwdEZvckVhY2gobUNvbnRleHQsIGlkLCBzbG90LCBhaW4sIGFvdXQsIHBhcmFtcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0Rm9yRWFjaENsaXBwZWQobG9uZyBpZCwgaW50IHNsb3QsIGxvbmcgYWluLCBsb25nIGFvdXQsIGJ5dGVbXSBwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4c3RhcnQsIGludCB4ZW5kLCBpbnQgeXN0YXJ0LCBpbnQgeWVuZCwgaW50IHpzdGFydCwgaW50IHplbmQpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgaWYgKHBhcmFtcyA9PSBudWxsKSB7CisgICAgICAgICAgICByc25TY3JpcHRGb3JFYWNoQ2xpcHBlZChtQ29udGV4dCwgaWQsIHNsb3QsIGFpbiwgYW91dCwgeHN0YXJ0LCB4ZW5kLCB5c3RhcnQsIHllbmQsIHpzdGFydCwgemVuZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByc25TY3JpcHRGb3JFYWNoQ2xpcHBlZChtQ29udGV4dCwgaWQsIHNsb3QsIGFpbiwgYW91dCwgcGFyYW1zLCB4c3RhcnQsIHhlbmQsIHlzdGFydCwgeWVuZCwgenN0YXJ0LCB6ZW5kKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEludm9rZVYobG9uZyBjb24sIGxvbmcgaWQsIGludCBzbG90LCBieXRlW10gcGFyYW1zKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0SW52b2tlVihsb25nIGlkLCBpbnQgc2xvdCwgYnl0ZVtdIHBhcmFtcykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25TY3JpcHRJbnZva2VWKG1Db250ZXh0LCBpZCwgc2xvdCwgcGFyYW1zKTsKKyAgICB9CisKKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRTZXRWYXJJKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCwgaW50IHZhbCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdFNldFZhckkobG9uZyBpZCwgaW50IHNsb3QsIGludCB2YWwpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuU2NyaXB0U2V0VmFySShtQ29udGV4dCwgaWQsIHNsb3QsIHZhbCk7CisgICAgfQorICAgIG5hdGl2ZSBpbnQgcnNuU2NyaXB0R2V0VmFySShsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QpOworICAgIHN5bmNocm9uaXplZCBpbnQgblNjcmlwdEdldFZhckkobG9uZyBpZCwgaW50IHNsb3QpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzblNjcmlwdEdldFZhckkobUNvbnRleHQsIGlkLCBzbG90KTsKKyAgICB9CisKKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRTZXRWYXJKKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCwgbG9uZyB2YWwpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRTZXRWYXJKKGxvbmcgaWQsIGludCBzbG90LCBsb25nIHZhbCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25TY3JpcHRTZXRWYXJKKG1Db250ZXh0LCBpZCwgc2xvdCwgdmFsKTsKKyAgICB9CisgICAgbmF0aXZlIGxvbmcgcnNuU2NyaXB0R2V0VmFySihsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5TY3JpcHRHZXRWYXJKKGxvbmcgaWQsIGludCBzbG90KSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25TY3JpcHRHZXRWYXJKKG1Db250ZXh0LCBpZCwgc2xvdCk7CisgICAgfQorCisgICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFyRihsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QsIGZsb2F0IHZhbCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdFNldFZhckYobG9uZyBpZCwgaW50IHNsb3QsIGZsb2F0IHZhbCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25TY3JpcHRTZXRWYXJGKG1Db250ZXh0LCBpZCwgc2xvdCwgdmFsKTsKKyAgICB9CisgICAgbmF0aXZlIGZsb2F0IHJzblNjcmlwdEdldFZhckYobG9uZyBjb24sIGxvbmcgaWQsIGludCBzbG90KTsKKyAgICBzeW5jaHJvbml6ZWQgZmxvYXQgblNjcmlwdEdldFZhckYobG9uZyBpZCwgaW50IHNsb3QpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzblNjcmlwdEdldFZhckYobUNvbnRleHQsIGlkLCBzbG90KTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFyRChsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QsIGRvdWJsZSB2YWwpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRTZXRWYXJEKGxvbmcgaWQsIGludCBzbG90LCBkb3VibGUgdmFsKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzblNjcmlwdFNldFZhckQobUNvbnRleHQsIGlkLCBzbG90LCB2YWwpOworICAgIH0KKyAgICBuYXRpdmUgZG91YmxlIHJzblNjcmlwdEdldFZhckQobG9uZyBjb24sIGxvbmcgaWQsIGludCBzbG90KTsKKyAgICBzeW5jaHJvbml6ZWQgZG91YmxlIG5TY3JpcHRHZXRWYXJEKGxvbmcgaWQsIGludCBzbG90KSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25TY3JpcHRHZXRWYXJEKG1Db250ZXh0LCBpZCwgc2xvdCk7CisgICAgfQorICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFZhclYobG9uZyBjb24sIGxvbmcgaWQsIGludCBzbG90LCBieXRlW10gdmFsKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFyVihsb25nIGlkLCBpbnQgc2xvdCwgYnl0ZVtdIHZhbCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25TY3JpcHRTZXRWYXJWKG1Db250ZXh0LCBpZCwgc2xvdCwgdmFsKTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0R2V0VmFyVihsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QsIGJ5dGVbXSB2YWwpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRHZXRWYXJWKGxvbmcgaWQsIGludCBzbG90LCBieXRlW10gdmFsKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzblNjcmlwdEdldFZhclYobUNvbnRleHQsIGlkLCBzbG90LCB2YWwpOworICAgIH0KKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRTZXRWYXJWRShsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QsIGJ5dGVbXSB2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBlLCBpbnRbXSBkaW1zKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFyVkUobG9uZyBpZCwgaW50IHNsb3QsIGJ5dGVbXSB2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZSwgaW50W10gZGltcykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25TY3JpcHRTZXRWYXJWRShtQ29udGV4dCwgaWQsIHNsb3QsIHZhbCwgZSwgZGltcyk7CisgICAgfQorICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFZhck9iaihsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QsIGxvbmcgdmFsKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFyT2JqKGxvbmcgaWQsIGludCBzbG90LCBsb25nIHZhbCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25TY3JpcHRTZXRWYXJPYmoobUNvbnRleHQsIGlkLCBzbG90LCB2YWwpOworICAgIH0KKworICAgIG5hdGl2ZSBpbnQgIHJzblNjcmlwdENDcmVhdGUobG9uZyBjb24sIFN0cmluZyByZXNOYW1lLCBTdHJpbmcgY2FjaGVEaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10gc2NyaXB0LCBpbnQgbGVuZ3RoKTsKKyAgICBzeW5jaHJvbml6ZWQgaW50IG5TY3JpcHRDQ3JlYXRlKFN0cmluZyByZXNOYW1lLCBTdHJpbmcgY2FjaGVEaXIsIGJ5dGVbXSBzY3JpcHQsIGludCBsZW5ndGgpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzblNjcmlwdENDcmVhdGUobUNvbnRleHQsIHJlc05hbWUsIGNhY2hlRGlyLCBzY3JpcHQsIGxlbmd0aCk7CisgICAgfQorCisgICAgbmF0aXZlIGxvbmcgcnNuU2NyaXB0SW50cmluc2ljQ3JlYXRlKGxvbmcgY29uLCBpbnQgaWQsIGxvbmcgZWlkKTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuU2NyaXB0SW50cmluc2ljQ3JlYXRlKGludCBpZCwgbG9uZyBlaWQpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzblNjcmlwdEludHJpbnNpY0NyZWF0ZShtQ29udGV4dCwgaWQsIGVpZCk7CisgICAgfQorCisgICAgbmF0aXZlIGxvbmcgIHJzblNjcmlwdEtlcm5lbElEQ3JlYXRlKGxvbmcgY29uLCBsb25nIHNpZCwgaW50IHNsb3QsIGludCBzaWcpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5TY3JpcHRLZXJuZWxJRENyZWF0ZShsb25nIHNpZCwgaW50IHNsb3QsIGludCBzaWcpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzblNjcmlwdEtlcm5lbElEQ3JlYXRlKG1Db250ZXh0LCBzaWQsIHNsb3QsIHNpZyk7CisgICAgfQorCisgICAgbmF0aXZlIGxvbmcgIHJzblNjcmlwdEZpZWxkSURDcmVhdGUobG9uZyBjb24sIGxvbmcgc2lkLCBpbnQgc2xvdCk7CisgICAgc3luY2hyb25pemVkIGxvbmcgblNjcmlwdEZpZWxkSURDcmVhdGUobG9uZyBzaWQsIGludCBzbG90KSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25TY3JpcHRGaWVsZElEQ3JlYXRlKG1Db250ZXh0LCBzaWQsIHNsb3QpOworICAgIH0KKworICAgIG5hdGl2ZSBsb25nIHJzblNjcmlwdEdyb3VwQ3JlYXRlKGxvbmcgY29uLCBpbnRbXSBrZXJuZWxzLCBpbnRbXSBzcmMsIGludFtdIGRzdGssIGludFtdIGRzdGYsIGludFtdIHR5cGVzKTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuU2NyaXB0R3JvdXBDcmVhdGUoaW50W10ga2VybmVscywgaW50W10gc3JjLCBpbnRbXSBkc3RrLCBpbnRbXSBkc3RmLCBpbnRbXSB0eXBlcykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuU2NyaXB0R3JvdXBDcmVhdGUobUNvbnRleHQsIGtlcm5lbHMsIHNyYywgZHN0aywgZHN0ZiwgdHlwZXMpOworICAgIH0KKworICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEdyb3VwU2V0SW5wdXQobG9uZyBjb24sIGxvbmcgZ3JvdXAsIGxvbmcga2VybmVsLCBsb25nIGFsbG9jKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0R3JvdXBTZXRJbnB1dChsb25nIGdyb3VwLCBsb25nIGtlcm5lbCwgbG9uZyBhbGxvYykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25TY3JpcHRHcm91cFNldElucHV0KG1Db250ZXh0LCBncm91cCwga2VybmVsLCBhbGxvYyk7CisgICAgfQorCisgICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0R3JvdXBTZXRPdXRwdXQobG9uZyBjb24sIGxvbmcgZ3JvdXAsIGxvbmcga2VybmVsLCBsb25nIGFsbG9jKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0R3JvdXBTZXRPdXRwdXQobG9uZyBncm91cCwgbG9uZyBrZXJuZWwsIGxvbmcgYWxsb2MpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuU2NyaXB0R3JvdXBTZXRPdXRwdXQobUNvbnRleHQsIGdyb3VwLCBrZXJuZWwsIGFsbG9jKTsKKyAgICB9CisKKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRHcm91cEV4ZWN1dGUobG9uZyBjb24sIGxvbmcgZ3JvdXApOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRHcm91cEV4ZWN1dGUobG9uZyBncm91cCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25TY3JpcHRHcm91cEV4ZWN1dGUobUNvbnRleHQsIGdyb3VwKTsKKyAgICB9CisKKyAgICBuYXRpdmUgaW50ICByc25TYW1wbGVyQ3JlYXRlKGxvbmcgY29uLCBpbnQgbWFnRmlsdGVyLCBpbnQgbWluRmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdyYXBTLCBpbnQgd3JhcFQsIGludCB3cmFwUiwgZmxvYXQgYW5pc28pOworICAgIHN5bmNocm9uaXplZCBpbnQgblNhbXBsZXJDcmVhdGUoaW50IG1hZ0ZpbHRlciwgaW50IG1pbkZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3cmFwUywgaW50IHdyYXBULCBpbnQgd3JhcFIsIGZsb2F0IGFuaXNvKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25TYW1wbGVyQ3JlYXRlKG1Db250ZXh0LCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgd3JhcFMsIHdyYXBULCB3cmFwUiwgYW5pc28pOworICAgIH0KKworICAgIG5hdGl2ZSBpbnQgIHJzblByb2dyYW1TdG9yZUNyZWF0ZShsb25nIGNvbiwgYm9vbGVhbiByLCBib29sZWFuIGcsIGJvb2xlYW4gYiwgYm9vbGVhbiBhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGRlcHRoTWFzaywgYm9vbGVhbiBkaXRoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNNb2RlLCBpbnQgZHN0TW9kZSwgaW50IGRlcHRoRnVuYyk7CisgICAgc3luY2hyb25pemVkIGludCBuUHJvZ3JhbVN0b3JlQ3JlYXRlKGJvb2xlYW4gciwgYm9vbGVhbiBnLCBib29sZWFuIGIsIGJvb2xlYW4gYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBkZXB0aE1hc2ssIGJvb2xlYW4gZGl0aGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjTW9kZSwgaW50IGRzdE1vZGUsIGludCBkZXB0aEZ1bmMpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzblByb2dyYW1TdG9yZUNyZWF0ZShtQ29udGV4dCwgciwgZywgYiwgYSwgZGVwdGhNYXNrLCBkaXRoZXIsIHNyY01vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0TW9kZSwgZGVwdGhGdW5jKTsKKyAgICB9CisKKyAgICBuYXRpdmUgbG9uZyByc25Qcm9ncmFtUmFzdGVyQ3JlYXRlKGxvbmcgY29uLCBib29sZWFuIHBvaW50U3ByaXRlLCBpbnQgY3VsbE1vZGUpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5Qcm9ncmFtUmFzdGVyQ3JlYXRlKGJvb2xlYW4gcG9pbnRTcHJpdGUsIGludCBjdWxsTW9kZSkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuUHJvZ3JhbVJhc3RlckNyZWF0ZShtQ29udGV4dCwgcG9pbnRTcHJpdGUsIGN1bGxNb2RlKTsKKyAgICB9CisKKyAgICBuYXRpdmUgdm9pZCByc25Qcm9ncmFtQmluZENvbnN0YW50cyhsb25nIGNvbiwgbG9uZyBwdiwgaW50IHNsb3QsIGxvbmcgbUlEKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuUHJvZ3JhbUJpbmRDb25zdGFudHMobG9uZyBwdiwgaW50IHNsb3QsIGxvbmcgbUlEKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzblByb2dyYW1CaW5kQ29uc3RhbnRzKG1Db250ZXh0LCBwdiwgc2xvdCwgbUlEKTsKKyAgICB9CisgICAgbmF0aXZlIHZvaWQgcnNuUHJvZ3JhbUJpbmRUZXh0dXJlKGxvbmcgY29uLCBsb25nIHZwZiwgaW50IHNsb3QsIGxvbmcgYSk7CisgICAgc3luY2hyb25pemVkIHZvaWQgblByb2dyYW1CaW5kVGV4dHVyZShsb25nIHZwZiwgaW50IHNsb3QsIGxvbmcgYSkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25Qcm9ncmFtQmluZFRleHR1cmUobUNvbnRleHQsIHZwZiwgc2xvdCwgYSk7CisgICAgfQorICAgIG5hdGl2ZSB2b2lkIHJzblByb2dyYW1CaW5kU2FtcGxlcihsb25nIGNvbiwgbG9uZyB2cGYsIGludCBzbG90LCBsb25nIHMpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5Qcm9ncmFtQmluZFNhbXBsZXIobG9uZyB2cGYsIGludCBzbG90LCBsb25nIHMpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcnNuUHJvZ3JhbUJpbmRTYW1wbGVyKG1Db250ZXh0LCB2cGYsIHNsb3QsIHMpOworICAgIH0KKyAgICBuYXRpdmUgbG9uZyByc25Qcm9ncmFtRnJhZ21lbnRDcmVhdGUobG9uZyBjb24sIFN0cmluZyBzaGFkZXIsIFN0cmluZ1tdIHRleE5hbWVzLCBpbnRbXSBwYXJhbXMpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5Qcm9ncmFtRnJhZ21lbnRDcmVhdGUoU3RyaW5nIHNoYWRlciwgU3RyaW5nW10gdGV4TmFtZXMsIGludFtdIHBhcmFtcykgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuUHJvZ3JhbUZyYWdtZW50Q3JlYXRlKG1Db250ZXh0LCBzaGFkZXIsIHRleE5hbWVzLCBwYXJhbXMpOworICAgIH0KKyAgICBuYXRpdmUgbG9uZyByc25Qcm9ncmFtVmVydGV4Q3JlYXRlKGxvbmcgY29uLCBTdHJpbmcgc2hhZGVyLCBTdHJpbmdbXSB0ZXhOYW1lcywgaW50W10gcGFyYW1zKTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuUHJvZ3JhbVZlcnRleENyZWF0ZShTdHJpbmcgc2hhZGVyLCBTdHJpbmdbXSB0ZXhOYW1lcywgaW50W10gcGFyYW1zKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25Qcm9ncmFtVmVydGV4Q3JlYXRlKG1Db250ZXh0LCBzaGFkZXIsIHRleE5hbWVzLCBwYXJhbXMpOworICAgIH0KKworICAgIG5hdGl2ZSBsb25nIHJzbk1lc2hDcmVhdGUobG9uZyBjb24sIGludFtdIHZ0eCwgaW50W10gaWR4LCBpbnRbXSBwcmltKTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuTWVzaENyZWF0ZShpbnRbXSB2dHgsIGludFtdIGlkeCwgaW50W10gcHJpbSkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuTWVzaENyZWF0ZShtQ29udGV4dCwgdnR4LCBpZHgsIHByaW0pOworICAgIH0KKyAgICBuYXRpdmUgaW50ICByc25NZXNoR2V0VmVydGV4QnVmZmVyQ291bnQobG9uZyBjb24sIGxvbmcgaWQpOworICAgIHN5bmNocm9uaXplZCBpbnQgbk1lc2hHZXRWZXJ0ZXhCdWZmZXJDb3VudChsb25nIGlkKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiByc25NZXNoR2V0VmVydGV4QnVmZmVyQ291bnQobUNvbnRleHQsIGlkKTsKKyAgICB9CisgICAgbmF0aXZlIGludCAgcnNuTWVzaEdldEluZGV4Q291bnQobG9uZyBjb24sIGxvbmcgaWQpOworICAgIHN5bmNocm9uaXplZCBpbnQgbk1lc2hHZXRJbmRleENvdW50KGxvbmcgaWQpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIHJzbk1lc2hHZXRJbmRleENvdW50KG1Db250ZXh0LCBpZCk7CisgICAgfQorICAgIG5hdGl2ZSB2b2lkIHJzbk1lc2hHZXRWZXJ0aWNlcyhsb25nIGNvbiwgbG9uZyBpZCwgaW50W10gdnR4SWRzLCBpbnQgdnR4SWRDb3VudCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbk1lc2hHZXRWZXJ0aWNlcyhsb25nIGlkLCBpbnRbXSB2dHhJZHMsIGludCB2dHhJZENvdW50KSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJzbk1lc2hHZXRWZXJ0aWNlcyhtQ29udGV4dCwgaWQsIHZ0eElkcywgdnR4SWRDb3VudCk7CisgICAgfQorICAgIG5hdGl2ZSB2b2lkIHJzbk1lc2hHZXRJbmRpY2VzKGxvbmcgY29uLCBsb25nIGlkLCBpbnRbXSBpZHhJZHMsIGludFtdIHByaW1pdGl2ZXMsIGludCB2dHhJZENvdW50KTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuTWVzaEdldEluZGljZXMobG9uZyBpZCwgaW50W10gaWR4SWRzLCBpbnRbXSBwcmltaXRpdmVzLCBpbnQgdnR4SWRDb3VudCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25NZXNoR2V0SW5kaWNlcyhtQ29udGV4dCwgaWQsIGlkeElkcywgcHJpbWl0aXZlcywgdnR4SWRDb3VudCk7CisgICAgfQorCisgICAgbmF0aXZlIGxvbmcgcnNuUGF0aENyZWF0ZShsb25nIGNvbiwgaW50IHByaW0sIGJvb2xlYW4gaXNTdGF0aWMsIGxvbmcgdnR4LCBpbnQgbG9vcCwgZmxvYXQgcSk7CisgICAgc3luY2hyb25pemVkIGxvbmcgblBhdGhDcmVhdGUoaW50IHByaW0sIGJvb2xlYW4gaXNTdGF0aWMsIGxvbmcgdnR4LCBpbnQgbG9vcCwgZmxvYXQgcSkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gcnNuUGF0aENyZWF0ZShtQ29udGV4dCwgcHJpbSwgaXNTdGF0aWMsIHZ0eCwgbG9vcCwgcSk7CisgICAgfQorCisgICAgbG9uZyAgICAgbURldjsKKyAgICBsb25nICAgICBtQ29udGV4dDsKKyAgICBAU3VwcHJlc3NXYXJuaW5ncyh7IkZpZWxkQ2FuQmVMb2NhbCJ9KQorICAgIE1lc3NhZ2VUaHJlYWQgbU1lc3NhZ2VUaHJlYWQ7CisKKyAgICBFbGVtZW50IG1FbGVtZW50X1U4OworICAgIEVsZW1lbnQgbUVsZW1lbnRfSTg7CisgICAgRWxlbWVudCBtRWxlbWVudF9VMTY7CisgICAgRWxlbWVudCBtRWxlbWVudF9JMTY7CisgICAgRWxlbWVudCBtRWxlbWVudF9VMzI7CisgICAgRWxlbWVudCBtRWxlbWVudF9JMzI7CisgICAgRWxlbWVudCBtRWxlbWVudF9VNjQ7CisgICAgRWxlbWVudCBtRWxlbWVudF9JNjQ7CisgICAgRWxlbWVudCBtRWxlbWVudF9GMzI7CisgICAgRWxlbWVudCBtRWxlbWVudF9GNjQ7CisgICAgRWxlbWVudCBtRWxlbWVudF9CT09MRUFOOworCisgICAgRWxlbWVudCBtRWxlbWVudF9FTEVNRU5UOworICAgIEVsZW1lbnQgbUVsZW1lbnRfVFlQRTsKKyAgICBFbGVtZW50IG1FbGVtZW50X0FMTE9DQVRJT047CisgICAgRWxlbWVudCBtRWxlbWVudF9TQU1QTEVSOworICAgIEVsZW1lbnQgbUVsZW1lbnRfU0NSSVBUOworICAgIEVsZW1lbnQgbUVsZW1lbnRfTUVTSDsKKyAgICBFbGVtZW50IG1FbGVtZW50X1BST0dSQU1fRlJBR01FTlQ7CisgICAgRWxlbWVudCBtRWxlbWVudF9QUk9HUkFNX1ZFUlRFWDsKKyAgICBFbGVtZW50IG1FbGVtZW50X1BST0dSQU1fUkFTVEVSOworICAgIEVsZW1lbnQgbUVsZW1lbnRfUFJPR1JBTV9TVE9SRTsKKyAgICBFbGVtZW50IG1FbGVtZW50X0ZPTlQ7CisKKyAgICBFbGVtZW50IG1FbGVtZW50X0FfODsKKyAgICBFbGVtZW50IG1FbGVtZW50X1JHQl81NjU7CisgICAgRWxlbWVudCBtRWxlbWVudF9SR0JfODg4OworICAgIEVsZW1lbnQgbUVsZW1lbnRfUkdCQV81NTUxOworICAgIEVsZW1lbnQgbUVsZW1lbnRfUkdCQV80NDQ0OworICAgIEVsZW1lbnQgbUVsZW1lbnRfUkdCQV84ODg4OworCisgICAgRWxlbWVudCBtRWxlbWVudF9GTE9BVF8yOworICAgIEVsZW1lbnQgbUVsZW1lbnRfRkxPQVRfMzsKKyAgICBFbGVtZW50IG1FbGVtZW50X0ZMT0FUXzQ7CisKKyAgICBFbGVtZW50IG1FbGVtZW50X0RPVUJMRV8yOworICAgIEVsZW1lbnQgbUVsZW1lbnRfRE9VQkxFXzM7CisgICAgRWxlbWVudCBtRWxlbWVudF9ET1VCTEVfNDsKKworICAgIEVsZW1lbnQgbUVsZW1lbnRfVUNIQVJfMjsKKyAgICBFbGVtZW50IG1FbGVtZW50X1VDSEFSXzM7CisgICAgRWxlbWVudCBtRWxlbWVudF9VQ0hBUl80OworCisgICAgRWxlbWVudCBtRWxlbWVudF9DSEFSXzI7CisgICAgRWxlbWVudCBtRWxlbWVudF9DSEFSXzM7CisgICAgRWxlbWVudCBtRWxlbWVudF9DSEFSXzQ7CisKKyAgICBFbGVtZW50IG1FbGVtZW50X1VTSE9SVF8yOworICAgIEVsZW1lbnQgbUVsZW1lbnRfVVNIT1JUXzM7CisgICAgRWxlbWVudCBtRWxlbWVudF9VU0hPUlRfNDsKKworICAgIEVsZW1lbnQgbUVsZW1lbnRfU0hPUlRfMjsKKyAgICBFbGVtZW50IG1FbGVtZW50X1NIT1JUXzM7CisgICAgRWxlbWVudCBtRWxlbWVudF9TSE9SVF80OworCisgICAgRWxlbWVudCBtRWxlbWVudF9VSU5UXzI7CisgICAgRWxlbWVudCBtRWxlbWVudF9VSU5UXzM7CisgICAgRWxlbWVudCBtRWxlbWVudF9VSU5UXzQ7CisKKyAgICBFbGVtZW50IG1FbGVtZW50X0lOVF8yOworICAgIEVsZW1lbnQgbUVsZW1lbnRfSU5UXzM7CisgICAgRWxlbWVudCBtRWxlbWVudF9JTlRfNDsKKworICAgIEVsZW1lbnQgbUVsZW1lbnRfVUxPTkdfMjsKKyAgICBFbGVtZW50IG1FbGVtZW50X1VMT05HXzM7CisgICAgRWxlbWVudCBtRWxlbWVudF9VTE9OR180OworCisgICAgRWxlbWVudCBtRWxlbWVudF9MT05HXzI7CisgICAgRWxlbWVudCBtRWxlbWVudF9MT05HXzM7CisgICAgRWxlbWVudCBtRWxlbWVudF9MT05HXzQ7CisKKyAgICBFbGVtZW50IG1FbGVtZW50X1lVVjsKKworICAgIEVsZW1lbnQgbUVsZW1lbnRfTUFUUklYXzRYNDsKKyAgICBFbGVtZW50IG1FbGVtZW50X01BVFJJWF8zWDM7CisgICAgRWxlbWVudCBtRWxlbWVudF9NQVRSSVhfMlgyOworCisgICAgU2FtcGxlciBtU2FtcGxlcl9DTEFNUF9ORUFSRVNUOworICAgIFNhbXBsZXIgbVNhbXBsZXJfQ0xBTVBfTElORUFSOworICAgIFNhbXBsZXIgbVNhbXBsZXJfQ0xBTVBfTElORUFSX01JUF9MSU5FQVI7CisgICAgU2FtcGxlciBtU2FtcGxlcl9XUkFQX05FQVJFU1Q7CisgICAgU2FtcGxlciBtU2FtcGxlcl9XUkFQX0xJTkVBUjsKKyAgICBTYW1wbGVyIG1TYW1wbGVyX1dSQVBfTElORUFSX01JUF9MSU5FQVI7CisgICAgU2FtcGxlciBtU2FtcGxlcl9NSVJST1JFRF9SRVBFQVRfTkVBUkVTVDsKKyAgICBTYW1wbGVyIG1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9MSU5FQVI7CisgICAgU2FtcGxlciBtU2FtcGxlcl9NSVJST1JFRF9SRVBFQVRfTElORUFSX01JUF9MSU5FQVI7CisKKyAgICBQcm9ncmFtU3RvcmUgbVByb2dyYW1TdG9yZV9CTEVORF9OT05FX0RFUFRIX1RFU1Q7CisgICAgUHJvZ3JhbVN0b3JlIG1Qcm9ncmFtU3RvcmVfQkxFTkRfTk9ORV9ERVBUSF9OT19ERVBUSDsKKyAgICBQcm9ncmFtU3RvcmUgbVByb2dyYW1TdG9yZV9CTEVORF9BTFBIQV9ERVBUSF9URVNUOworICAgIFByb2dyYW1TdG9yZSBtUHJvZ3JhbVN0b3JlX0JMRU5EX0FMUEhBX0RFUFRIX05PX0RFUFRIOworCisgICAgUHJvZ3JhbVJhc3RlciBtUHJvZ3JhbVJhc3Rlcl9DVUxMX0JBQ0s7CisgICAgUHJvZ3JhbVJhc3RlciBtUHJvZ3JhbVJhc3Rlcl9DVUxMX0ZST05UOworICAgIFByb2dyYW1SYXN0ZXIgbVByb2dyYW1SYXN0ZXJfQ1VMTF9OT05FOworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLworCisgICAgLyoqCisgICAgICogVGhlIGJhc2UgY2xhc3MgZnJvbSB3aGljaCBhbiBhcHBsaWNhdGlvbiBzaG91bGQgZGVyaXZlIGluIG9yZGVyCisgICAgICogdG8gcmVjZWl2ZSBSUyBtZXNzYWdlcyBmcm9tIHNjcmlwdHMuIFdoZW4gYSBzY3JpcHQgY2FsbHMge0Bjb2RlCisgICAgICogcnNTZW5kVG9DbGllbnR9LCB0aGUgZGF0YSBmaWVsZHMgd2lsbCBiZSBmaWxsZWQsIGFuZCB0aGUgcnVuCisgICAgICogbWV0aG9kIHdpbGwgYmUgY2FsbGVkIG9uIGEgc2VwYXJhdGUgdGhyZWFkLiAgVGhpcyB3aWxsIG9jY3VyCisgICAgICogc29tZSB0aW1lIGFmdGVyIHtAY29kZSByc1NlbmRUb0NsaWVudH0gY29tcGxldGVzIGluIHRoZSBzY3JpcHQsCisgICAgICogYXMge0Bjb2RlIHJzU2VuZFRvQ2xpZW50fSBpcyBhc3luY2hyb25vdXMuIE1lc3NhZ2UgaGFuZGxlcnMgYXJlCisgICAgICogbm90IGd1YXJhbnRlZWQgdG8gaGF2ZSBjb21wbGV0ZWQgd2hlbiB7QGxpbmsKKyAgICAgKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHQjZmluaXNofSByZXR1cm5zLgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBSU01lc3NhZ2VIYW5kbGVyIGltcGxlbWVudHMgUnVubmFibGUgeworICAgICAgICBwcm90ZWN0ZWQgaW50W10gbURhdGE7CisgICAgICAgIHByb3RlY3RlZCBpbnQgbUlEOworICAgICAgICBwcm90ZWN0ZWQgaW50IG1MZW5ndGg7CisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBJZiBhbiBhcHBsaWNhdGlvbiBpcyBleHBlY3RpbmcgbWVzc2FnZXMsIGl0IHNob3VsZCBzZXQgdGhpcworICAgICAqIGZpZWxkIHRvIGFuIGluc3RhbmNlIG9mIHtAbGluayBSU01lc3NhZ2VIYW5kbGVyfS4gIFRoaXMKKyAgICAgKiBpbnN0YW5jZSB3aWxsIHJlY2VpdmUgYWxsIHRoZSB1c2VyIG1lc3NhZ2VzIHNlbnQgZnJvbSB7QGNvZGUKKyAgICAgKiBzZW5kVG9DbGllbnR9IGJ5IHNjcmlwdHMgZnJvbSB0aGlzIGNvbnRleHQuCisgICAgICoKKyAgICAgKi8KKyAgICBSU01lc3NhZ2VIYW5kbGVyIG1NZXNzYWdlQ2FsbGJhY2sgPSBudWxsOworCisgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZUhhbmRsZXIoUlNNZXNzYWdlSGFuZGxlciBtc2cpIHsKKyAgICAgICAgbU1lc3NhZ2VDYWxsYmFjayA9IG1zZzsKKyAgICB9CisgICAgcHVibGljIFJTTWVzc2FnZUhhbmRsZXIgZ2V0TWVzc2FnZUhhbmRsZXIoKSB7CisgICAgICAgIHJldHVybiBtTWVzc2FnZUNhbGxiYWNrOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBsYWNlIGEgbWVzc2FnZSBpbnRvIHRoZSBtZXNzYWdlIHF1ZXVlIHRvIGJlIHNlbnQgYmFjayB0byB0aGUgbWVzc2FnZQorICAgICAqIGhhbmRsZXIgb25jZSBhbGwgcHJldmlvdXMgY29tbWFuZHMgaGF2ZSBiZWVuIGV4ZWN1dGVkLgorICAgICAqCisgICAgICogQHBhcmFtIGlkCisgICAgICogQHBhcmFtIGRhdGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShpbnQgaWQsIGludFtdIGRhdGEpIHsKKyAgICAgICAgbkNvbnRleHRTZW5kTWVzc2FnZShpZCwgZGF0YSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhlIHJ1bnRpbWUgZXJyb3IgaGFuZGxlciBiYXNlIGNsYXNzLiAgQW4gYXBwbGljYXRpb24gc2hvdWxkIGRlcml2ZSBmcm9tIHRoaXMgY2xhc3MKKyAgICAgKiBpZiBpdCB3aXNoZXMgdG8gaW5zdGFsbCBhbiBlcnJvciBoYW5kbGVyLiAgV2hlbiBlcnJvcnMgb2NjdXIgYXQgcnVudGltZSwKKyAgICAgKiB0aGUgZmllbGRzIGluIHRoaXMgY2xhc3Mgd2lsbCBiZSBmaWxsZWQsIGFuZCB0aGUgcnVuIG1ldGhvZCB3aWxsIGJlIGNhbGxlZC4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUlNFcnJvckhhbmRsZXIgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgICAgICAgIHByb3RlY3RlZCBTdHJpbmcgbUVycm9yTWVzc2FnZTsKKyAgICAgICAgcHJvdGVjdGVkIGludCBtRXJyb3JOdW07CisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGxpY2F0aW9uIEVycm9yIGhhbmRsZXIuICBBbGwgcnVudGltZSBlcnJvcnMgd2lsbCBiZSBkaXNwYXRjaGVkIHRvIHRoZQorICAgICAqIGluc3RhbmNlIG9mIFJTQXN5bmNFcnJvciBzZXQgaGVyZS4gIElmIHRoaXMgZmllbGQgaXMgbnVsbCBhCisgICAgICoge0BsaW5rIFJTUnVudGltZUV4Y2VwdGlvbn0gd2lsbCBpbnN0ZWFkIGJlIHRocm93biB3aXRoIGRldGFpbHMgYWJvdXQgdGhlIGVycm9yLgorICAgICAqIFRoaXMgd2lsbCBjYXVzZSBwcm9ncmFtIHRlcm1haW5hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIFJTRXJyb3JIYW5kbGVyIG1FcnJvckNhbGxiYWNrID0gbnVsbDsKKworICAgIHB1YmxpYyB2b2lkIHNldEVycm9ySGFuZGxlcihSU0Vycm9ySGFuZGxlciBtc2cpIHsKKyAgICAgICAgbUVycm9yQ2FsbGJhY2sgPSBtc2c7CisgICAgfQorICAgIHB1YmxpYyBSU0Vycm9ySGFuZGxlciBnZXRFcnJvckhhbmRsZXIoKSB7CisgICAgICAgIHJldHVybiBtRXJyb3JDYWxsYmFjazsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW5kZXJTY3JpcHQgd29ya2VyIHRocmVhZCBwcmlvcml0eSBlbnVtZXJhdGlvbi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzCisgICAgICogTk9STUFMLiAgQXBwbGljYXRpb25zIHdpc2hpbmcgdG8gZG8gYmFja2dyb3VuZCBwcm9jZXNzaW5nIHNob3VsZCBzZXQKKyAgICAgKiB0aGVpciBwcmlvcml0eSB0byBMT1cgdG8gYXZvaWQgc3RhcnZpbmcgZm9yZ3JvdW5kIHByb2Nlc3Nlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgZW51bSBQcmlvcml0eSB7CisgICAgICAgIExPVyAoUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfQkFDS0dST1VORCArICg1ICogUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfTEVTU19GQVZPUkFCTEUpKSwKKyAgICAgICAgTk9STUFMIChQcm9jZXNzLlRIUkVBRF9QUklPUklUWV9ESVNQTEFZKTsKKworICAgICAgICBpbnQgbUlEOworICAgICAgICBQcmlvcml0eShpbnQgaWQpIHsKKyAgICAgICAgICAgIG1JRCA9IGlkOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB2YWxpZGF0ZSgpIHsKKyAgICAgICAgaWYgKG1Db250ZXh0ID09IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ2FsbGluZyBSUyB3aXRoIG5vIENvbnRleHQgYWN0aXZlLiIpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDaGFuZ2UgdGhlIHByaW9yaXR5IG9mIHRoZSB3b3JrZXIgdGhyZWFkcyBmb3IgdGhpcyBjb250ZXh0LgorICAgICAqCisgICAgICogQHBhcmFtIHAgTmV3IHByaW9yaXR5IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQcmlvcml0eShQcmlvcml0eSBwKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIG5Db250ZXh0U2V0UHJpb3JpdHkocC5tSUQpOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBNZXNzYWdlVGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKKyAgICAgICAgUmVuZGVyU2NyaXB0IG1SUzsKKyAgICAgICAgYm9vbGVhbiBtUnVuID0gdHJ1ZTsKKyAgICAgICAgaW50W10gbUF1eERhdGEgPSBuZXcgaW50WzJdOworCisgICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgUlNfTUVTU0FHRV9UT19DTElFTlRfTk9ORSA9IDA7CisgICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgUlNfTUVTU0FHRV9UT19DTElFTlRfRVhDRVBUSU9OID0gMTsKKyAgICAgICAgc3RhdGljIGZpbmFsIGludCBSU19NRVNTQUdFX1RPX0NMSUVOVF9SRVNJWkUgPSAyOworICAgICAgICBzdGF0aWMgZmluYWwgaW50IFJTX01FU1NBR0VfVE9fQ0xJRU5UX0VSUk9SID0gMzsKKyAgICAgICAgc3RhdGljIGZpbmFsIGludCBSU19NRVNTQUdFX1RPX0NMSUVOVF9VU0VSID0gNDsKKyAgICAgICAgc3RhdGljIGZpbmFsIGludCBSU19NRVNTQUdFX1RPX0NMSUVOVF9ORVdfQlVGRkVSID0gNTsKKworICAgICAgICBzdGF0aWMgZmluYWwgaW50IFJTX0VSUk9SX0ZBVEFMX0RFQlVHID0gMHgwODAwOworICAgICAgICBzdGF0aWMgZmluYWwgaW50IFJTX0VSUk9SX0ZBVEFMX1VOS05PV04gPSAweDEwMDA7CisKKyAgICAgICAgTWVzc2FnZVRocmVhZChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgICAgIHN1cGVyKCJSU01lc3NhZ2VUaHJlYWQiKTsKKyAgICAgICAgICAgIG1SUyA9IHJzOworCisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uLiAgVGhlIGZpbmFsIHNvbHV0aW9uIHdpbGwKKyAgICAgICAgICAgIC8vIHVzZWQgdHlwZWQgYWxsb2NhdGlvbnMgd2hlcmUgdGhlIG1lc3NhZ2UgaWQgaXMgdGhlIHR5cGUgaW5kaWNhdG9yLgorICAgICAgICAgICAgaW50W10gcmJ1ZiA9IG5ldyBpbnRbMTZdOworICAgICAgICAgICAgbVJTLm5Db250ZXh0SW5pdFRvQ2xpZW50KG1SUy5tQ29udGV4dCk7CisgICAgICAgICAgICB3aGlsZShtUnVuKSB7CisgICAgICAgICAgICAgICAgcmJ1ZlswXSA9IDA7CisgICAgICAgICAgICAgICAgaW50IG1zZyA9IG1SUy5uQ29udGV4dFBlZWtNZXNzYWdlKG1SUy5tQ29udGV4dCwgbUF1eERhdGEpOworICAgICAgICAgICAgICAgIGludCBzaXplID0gbUF1eERhdGFbMV07CisgICAgICAgICAgICAgICAgaW50IHN1YklEID0gbUF1eERhdGFbMF07CisKKyAgICAgICAgICAgICAgICBpZiAobXNnID09IFJTX01FU1NBR0VfVE9fQ0xJRU5UX1VTRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChzaXplPj4yKSA+PSByYnVmLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmJ1ZiA9IG5ldyBpbnRbKHNpemUgKyAzKSA+PiAyXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobVJTLm5Db250ZXh0R2V0VXNlck1lc3NhZ2UobVJTLm1Db250ZXh0LCByYnVmKSAhPQorICAgICAgICAgICAgICAgICAgICAgICAgUlNfTUVTU0FHRV9UT19DTElFTlRfVVNFUikgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTRHJpdmVyRXhjZXB0aW9uKCJFcnJvciBwcm9jZXNzaW5nIG1lc3NhZ2UgZnJvbSBSZW5kZXJTY3JpcHQuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZihtUlMubU1lc3NhZ2VDYWxsYmFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtUlMubU1lc3NhZ2VDYWxsYmFjay5tRGF0YSA9IHJidWY7CisgICAgICAgICAgICAgICAgICAgICAgICBtUlMubU1lc3NhZ2VDYWxsYmFjay5tSUQgPSBzdWJJRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1SUy5tTWVzc2FnZUNhbGxiYWNrLm1MZW5ndGggPSBzaXplOworICAgICAgICAgICAgICAgICAgICAgICAgbVJTLm1NZXNzYWdlQ2FsbGJhY2sucnVuKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIlJlY2VpdmVkIGEgbWVzc2FnZSBmcm9tIHRoZSBzY3JpcHQgd2l0aCBubyBtZXNzYWdlIGhhbmRsZXIgaW5zdGFsbGVkLiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtc2cgPT0gUlNfTUVTU0FHRV9UT19DTElFTlRfRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGUgPSBtUlMubkNvbnRleHRHZXRFcnJvck1lc3NhZ2UobVJTLm1Db250ZXh0KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBUaHJvdyBSU1J1bnRpbWVFeGNlcHRpb24gdW5kZXIgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAxKSBJdCBpcyBhbiB1bmtub3duIGZhdGFsIGVycm9yLgorICAgICAgICAgICAgICAgICAgICAvLyAyKSBJdCBpcyBhIGRlYnVnIGZhdGFsIGVycm9yLCBhbmQgd2UgYXJlIG5vdCBpbiBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgIGRlYnVnIGNvbnRleHQuCisgICAgICAgICAgICAgICAgICAgIC8vIDMpIEl0IGlzIGEgZGVidWcgZmF0YWwgZXJyb3IsIGFuZCB3ZSBkbyBub3QgaGF2ZSBhbgorICAgICAgICAgICAgICAgICAgICAvLyAgICBlcnJvciBjYWxsYmFjay4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1YklEID49IFJTX0VSUk9SX0ZBVEFMX1VOS05PV04gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzdWJJRCA+PSBSU19FUlJPUl9GQVRBTF9ERUJVRyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIChtUlMubUNvbnRleHRUeXBlICE9IENvbnRleHRUeXBlLkRFQlVHIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1SUy5tRXJyb3JDYWxsYmFjayA9PSBudWxsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIkZhdGFsIGVycm9yICIgKyBzdWJJRCArICIsIGRldGFpbHM6ICIgKyBlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKG1SUy5tRXJyb3JDYWxsYmFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtUlMubUVycm9yQ2FsbGJhY2subUVycm9yTWVzc2FnZSA9IGU7CisgICAgICAgICAgICAgICAgICAgICAgICBtUlMubUVycm9yQ2FsbGJhY2subUVycm9yTnVtID0gc3ViSUQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtUlMubUVycm9yQ2FsbGJhY2sucnVuKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLnV0aWwuTG9nLmUoTE9HX1RBRywgIm5vbiBmYXRhbCBSUyBlcnJvciwgIiArIGUpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IHRocm93IGhlcmUuIEluIHRoZXNlIGNhc2VzLCB3ZSBkbyBub3QgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBmYXRhbCBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobXNnID09IFJTX01FU1NBR0VfVE9fQ0xJRU5UX05FV19CVUZGRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5zZW5kQnVmZmVyTm90aWZpY2F0aW9uKHN1YklEKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gMjogdGVhcmRvd24uCisgICAgICAgICAgICAgICAgLy8gQnV0IHdlIHdhbnQgdG8gYXZvaWQgc3RhcnZpbmcgb3RoZXIgdGhyZWFkcyBkdXJpbmcKKyAgICAgICAgICAgICAgICAvLyB0ZWFyZG93biBieSB5aWVsZGluZyB1bnRpbCB0aGUgbmV4dCBsaW5lIGluIHRoZSBkZXN0cnVjdG9yCisgICAgICAgICAgICAgICAgLy8gY2FuIGV4ZWN1dGUgdG8gc2V0IG1SdW4gPSBmYWxzZQorICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHNsZWVwKDEsIDApOworICAgICAgICAgICAgICAgIH0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vTG9nLmQoTE9HX1RBRywgIk1lc3NhZ2VUaHJlYWQgZXhpdGluZy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlbmRlclNjcmlwdChDb250ZXh0IGN0eCkgeworICAgICAgICBtQ29udGV4dFR5cGUgPSBDb250ZXh0VHlwZS5OT1JNQUw7CisgICAgICAgIGlmIChjdHggIT0gbnVsbCkgeworICAgICAgICAgICAgbUFwcGxpY2F0aW9uQ29udGV4dCA9IGN0eC5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICAgICAgfQorICAgICAgICBtUldMb2NrID0gbmV3IFJlZW50cmFudFJlYWRXcml0ZUxvY2soKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgUmVuZGVyU2NyaXB0IGNvbnRleHQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBhcHBsaWNhdGlvbiBjb250ZXh0LgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBDb250ZXh0IGdldEFwcGxpY2F0aW9uQ29udGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG1BcHBsaWNhdGlvbkNvbnRleHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlbmRlclNjcmlwdCBjcmVhdGUoQ29udGV4dCBjdHgsIGludCBzZGtWZXJzaW9uKSB7CisgICAgICAgIHJldHVybiBjcmVhdGUoY3R4LCBzZGtWZXJzaW9uLCBDb250ZXh0VHlwZS5OT1JNQUwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIFJlbmRlclNjcmlwdCBjb250ZXh0LgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0LgorICAgICAqIEByZXR1cm4gUmVuZGVyU2NyaXB0CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBSZW5kZXJTY3JpcHQgY3JlYXRlKENvbnRleHQgY3R4LCBpbnQgc2RrVmVyc2lvbiwgQ29udGV4dFR5cGUgY3QpIHsKKyAgICAgICAgaWYgKCFzSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJSZW5kZXJTY3JpcHQuY3JlYXRlKCkgY2FsbGVkIHdoZW4gZGlzYWJsZWQ7IHNvbWVvbmUgaXMgbGlrZWx5IHRvIGNyYXNoIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIFJlbmRlclNjcmlwdCBycyA9IG5ldyBSZW5kZXJTY3JpcHQoY3R4KTsKKworICAgICAgICBycy5tRGV2ID0gcnMubkRldmljZUNyZWF0ZSgpOworICAgICAgICBycy5tQ29udGV4dCA9IHJzLm5Db250ZXh0Q3JlYXRlKHJzLm1EZXYsIDAsIHNka1ZlcnNpb24sIGN0Lm1JRCk7CisgICAgICAgIHJzLm1Db250ZXh0VHlwZSA9IGN0OworICAgICAgICBpZiAocnMubUNvbnRleHQgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTRHJpdmVyRXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRlIFJTIGNvbnRleHQuIik7CisgICAgICAgIH0KKyAgICAgICAgcnMubU1lc3NhZ2VUaHJlYWQgPSBuZXcgTWVzc2FnZVRocmVhZChycyk7CisgICAgICAgIHJzLm1NZXNzYWdlVGhyZWFkLnN0YXJ0KCk7CisgICAgICAgIHJldHVybiByczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBSZW5kZXJTY3JpcHQgY29udGV4dC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQuCisgICAgICogQHJldHVybiBSZW5kZXJTY3JpcHQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlbmRlclNjcmlwdCBjcmVhdGUoQ29udGV4dCBjdHgpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShjdHgsIENvbnRleHRUeXBlLk5PUk1BTCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgUmVuZGVyU2NyaXB0IGNvbnRleHQuCisgICAgICoKKyAgICAgKgorICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQuCisgICAgICogQHBhcmFtIGN0IFRoZSB0eXBlIG9mIGNvbnRleHQgdG8gYmUgY3JlYXRlZC4KKyAgICAgKiBAcmV0dXJuIFJlbmRlclNjcmlwdAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgUmVuZGVyU2NyaXB0IGNyZWF0ZShDb250ZXh0IGN0eCwgQ29udGV4dFR5cGUgY3QpIHsKKyAgICAgICAgaW50IHYgPSBjdHguZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbjsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShjdHgsIHYsIGN0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcmludCB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mCisgICAgICogdGhlIFJTIGNvbnRleHQgdG8gdGhlIGxvZy4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvbnRleHREdW1wKCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICBuQ29udGV4dER1bXAoMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogV2FpdCBmb3IgYW55IHBlbmRpbmcgYXN5bmNocm9ub3VzIG9wZWF0aW9ucyAoc3VjaCBhcyBjb3BpZXMgdG8gYSBSUworICAgICAqIGFsbG9jYXRpb24gb3IgUlMgc2NyaXB0IGV4ZWN1dGlvbnMpIHRvIGNvbXBsZXRlLgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHZvaWQgZmluaXNoKCkgeworICAgICAgICBuQ29udGV4dEZpbmlzaCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlc3Ryb3lzIHRoaXMgUmVuZGVyU2NyaXB0IGNvbnRleHQuICBPbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLAorICAgICAqIHVzaW5nIHRoaXMgY29udGV4dCBvciBhbnkgb2JqZWN0cyBiZWxvbmdpbmcgdG8gdGhpcyBjb250ZXh0IGlzCisgICAgICogaWxsZWdhbC4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIG5Db250ZXh0RmluaXNoKCk7CisKKyAgICAgICAgbkNvbnRleHREZWluaXRUb0NsaWVudChtQ29udGV4dCk7CisgICAgICAgIG1NZXNzYWdlVGhyZWFkLm1SdW4gPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1NZXNzYWdlVGhyZWFkLmpvaW4oKTsKKyAgICAgICAgfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKworICAgICAgICBuQ29udGV4dERlc3Ryb3koKTsKKworICAgICAgICBuRGV2aWNlRGVzdHJveShtRGV2KTsKKyAgICAgICAgbURldiA9IDA7CisgICAgfQorCisgICAgYm9vbGVhbiBpc0FsaXZlKCkgeworICAgICAgICByZXR1cm4gbUNvbnRleHQgIT0gMDsKKyAgICB9CisKKyAgICBsb25nIHNhZmVJRChCYXNlT2JqIG8pIHsKKyAgICAgICAgaWYobyAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gby5nZXRJRCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdEdMLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdEdMLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE0ZTgzNQotLS0gL2Rldi9udWxsCisrKyBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0R0wuamF2YQpAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOworaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOworaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOworCisvKioKKyAqIEBoaWRlCisgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAqIFRoZSBHcmFwaGljcyBkZXJpdml0aXZlIG9mIFJlbmRlclNjcmlwdC4gIEV4dGVuZHMgdGhlIGJhc2ljIGNvbnRleHQgdG8gYWRkIGEKKyAqIHJvb3Qgc2NyaXB0IHdoaWNoIGlzIHRoZSBkaXNwbGF5IHdpbmRvdyBmb3IgZ3JhcGhpY2FsIG91dHB1dC4gIFdoZW4gdGhlCisgKiBzeXN0ZW0gbmVlZHMgdG8gdXBkYXRlIHRoZSBkaXNwbGF5IHRoZSBjdXJyZW50bHkgYm91bmQgcm9vdCBzY3JpcHQgd2lsbCBiZQorICogY2FsbGVkLiAgVGhpcyBzY3JpcHQgaXMgZXhwZWN0ZWQgdG8gaXNzdWUgdGhlIHJlbmRlcmluZyBjb21tYW5kcyB0byByZXBhaW50CisgKiB0aGUgc2NyZWVuLgorICoKKyAqIDxkaXYgY2xhc3M9InNwZWNpYWwgcmVmZXJlbmNlIj4KKyAqIDxoMz5EZXZlbG9wZXIgR3VpZGVzPC9oMz4KKyAqIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyBSZW5kZXJTY3JpcHQsIHJlYWQgdGhlCisgKiA8YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3JlbmRlcnNjcmlwdC9pbmRleC5odG1sIj5SZW5kZXJTY3JpcHQ8L2E+IGRldmVsb3BlciBndWlkZS48L3A+CisgKiA8L2Rpdj4KKyAqKi8KK3B1YmxpYyBjbGFzcyBSZW5kZXJTY3JpcHRHTCBleHRlbmRzIFJlbmRlclNjcmlwdCB7CisgICAgaW50IG1XaWR0aDsKKyAgICBpbnQgbUhlaWdodDsKKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIENsYXNzIHdoaWNoIGlzIHVzZWQgdG8gZGVzY3JpYmUgYSBwaXhlbCBmb3JtYXQgZm9yIGEgZ3JhcGhpY2FsIGJ1ZmZlci4KKyAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGludGVuZGVkIGZvcm1hdCBvZiB0aGUgZGlzcGxheSBzdXJmYWNlLgorICAgICAqCisgICAgICogVGhlIGNvbmZpZ3VyYXRpb24gaXMgZGVzY3JpYmVkIGJ5IHBhaXJzIG9mIG1pbmltdW0gYW5kIHByZWZlcnJlZCBiaXQKKyAgICAgKiBkZXB0aHMgZm9yIGVhY2ggY29tcG9uZW50IHdpdGhpbiB0aGUgY29uZmlnIGFuZCBhZGRpdGlvbmFsIHN0cnVjdHVyYWwKKyAgICAgKiBpbmZvcm1hdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN1cmZhY2VDb25maWcgeworICAgICAgICBpbnQgbURlcHRoTWluICAgICAgID0gMDsKKyAgICAgICAgaW50IG1EZXB0aFByZWYgICAgICA9IDA7CisgICAgICAgIGludCBtU3RlbmNpbE1pbiAgICAgPSAwOworICAgICAgICBpbnQgbVN0ZW5jaWxQcmVmICAgID0gMDsKKyAgICAgICAgaW50IG1Db2xvck1pbiAgICAgICA9IDg7CisgICAgICAgIGludCBtQ29sb3JQcmVmICAgICAgPSA4OworICAgICAgICBpbnQgbUFscGhhTWluICAgICAgID0gMDsKKyAgICAgICAgaW50IG1BbHBoYVByZWYgICAgICA9IDA7CisgICAgICAgIGludCBtU2FtcGxlc01pbiAgICAgPSAxOworICAgICAgICBpbnQgbVNhbXBsZXNQcmVmICAgID0gMTsKKyAgICAgICAgZmxvYXQgbVNhbXBsZXNRICAgICA9IDEuZjsKKworICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgU3VyZmFjZUNvbmZpZygpIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdXJmYWNlQ29uZmlnKFN1cmZhY2VDb25maWcgc2MpIHsKKyAgICAgICAgICAgIG1EZXB0aE1pbiA9IHNjLm1EZXB0aE1pbjsKKyAgICAgICAgICAgIG1EZXB0aFByZWYgPSBzYy5tRGVwdGhQcmVmOworICAgICAgICAgICAgbVN0ZW5jaWxNaW4gPSBzYy5tU3RlbmNpbE1pbjsKKyAgICAgICAgICAgIG1TdGVuY2lsUHJlZiA9IHNjLm1TdGVuY2lsUHJlZjsKKyAgICAgICAgICAgIG1Db2xvck1pbiA9IHNjLm1Db2xvck1pbjsKKyAgICAgICAgICAgIG1Db2xvclByZWYgPSBzYy5tQ29sb3JQcmVmOworICAgICAgICAgICAgbUFscGhhTWluID0gc2MubUFscGhhTWluOworICAgICAgICAgICAgbUFscGhhUHJlZiA9IHNjLm1BbHBoYVByZWY7CisgICAgICAgICAgICBtU2FtcGxlc01pbiA9IHNjLm1TYW1wbGVzTWluOworICAgICAgICAgICAgbVNhbXBsZXNQcmVmID0gc2MubVNhbXBsZXNQcmVmOworICAgICAgICAgICAgbVNhbXBsZXNRID0gc2MubVNhbXBsZXNROworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlUmFuZ2UoaW50IHVtaW4sIGludCB1cHJlZiwgaW50IHJtaW4sIGludCBybWF4KSB7CisgICAgICAgICAgICBpZiAodW1pbiA8IHJtaW4gfHwgdW1pbiA+IHJtYXgpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk1pbmltdW0gdmFsdWUgcHJvdmlkZWQgb3V0IG9mIHJhbmdlLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVwcmVmIDwgdW1pbikgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicHJlZmVycmVkIG11c3QgYmUgPj0gTWluaW11bS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICogU2V0IHRoZSBwZXItY29tcG9uZW50IGJpdCBkZXB0aCBmb3IgY29sb3IgKHJlZCwgZ3JlZW4sIGJsdWUpLiAgVGhpcworICAgICAgICAgKiBjb25maWd1cmVzIHRoZSBzdXJmYWNlIGZvciBhbiB1bnNpZ25lZCBpbnRlZ2VyIGJ1ZmZlciB0eXBlLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gbWluaW11bQorICAgICAgICAgKiBAcGFyYW0gcHJlZmVycmVkCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBzZXRDb2xvcihpbnQgbWluaW11bSwgaW50IHByZWZlcnJlZCkgeworICAgICAgICAgICAgdmFsaWRhdGVSYW5nZShtaW5pbXVtLCBwcmVmZXJyZWQsIDUsIDgpOworICAgICAgICAgICAgbUNvbG9yTWluID0gbWluaW11bTsKKyAgICAgICAgICAgIG1Db2xvclByZWYgPSBwcmVmZXJyZWQ7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICAgICAqIFNldCB0aGUgYml0IGRlcHRoIGZvciBhbHBoYS4gVGhpcyBjb25maWd1cmVzIHRoZSBzdXJmYWNlIGZvcgorICAgICAgICAgKiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGJ1ZmZlciB0eXBlLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gbWluaW11bQorICAgICAgICAgKiBAcGFyYW0gcHJlZmVycmVkCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBzZXRBbHBoYShpbnQgbWluaW11bSwgaW50IHByZWZlcnJlZCkgeworICAgICAgICAgICAgdmFsaWRhdGVSYW5nZShtaW5pbXVtLCBwcmVmZXJyZWQsIDAsIDgpOworICAgICAgICAgICAgbUFscGhhTWluID0gbWluaW11bTsKKyAgICAgICAgICAgIG1BbHBoYVByZWYgPSBwcmVmZXJyZWQ7CisgICAgICAgIH0KKworICAgICAgICAgLyoqCisgICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAgICAgKiBTZXQgdGhlIGJpdCBkZXB0aCBmb3IgdGhlIGRlcHRoIGJ1ZmZlci4gVGhpcyBjb25maWd1cmVzIHRoZQorICAgICAgICAgKiBzdXJmYWNlIGZvciBhbiB1bnNpZ25lZCBpbnRlZ2VyIGJ1ZmZlciB0eXBlLiAgSWYgYSBtaW5pbXVtIG9mIDAKKyAgICAgICAgICogaXMgc3BlY2lmaWVkIHRoZW4gaXRzIHBvc3NpYmxlIG5vIGRlcHRoIGJ1ZmZlciB3aWxsIGJlCisgICAgICAgICAqIGFsbG9jYXRlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG1pbmltdW0KKyAgICAgICAgICogQHBhcmFtIHByZWZlcnJlZAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgc2V0RGVwdGgoaW50IG1pbmltdW0sIGludCBwcmVmZXJyZWQpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlUmFuZ2UobWluaW11bSwgcHJlZmVycmVkLCAwLCAyNCk7CisgICAgICAgICAgICBtRGVwdGhNaW4gPSBtaW5pbXVtOworICAgICAgICAgICAgbURlcHRoUHJlZiA9IHByZWZlcnJlZDsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgICAgICogQ29uZmlndXJlIHRoZSBtdWx0aXNhbXBsZSByZW5kZXJpbmcuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBtaW5pbXVtIFRoZSByZXF1aXJlZCBudW1iZXIgb2Ygc2FtcGxlcywgbXVzdCBiZSBhdCBsZWFzdCAxLgorICAgICAgICAgKiBAcGFyYW0gcHJlZmVycmVkIFRoZSB0YXJnZSBudW1iZXIgb2Ygc2FtcGxlcywgbXVzdCBiZSBhdCBsZWFzdAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgIG1pbmltdW0KKyAgICAgICAgICogQHBhcmFtIFEgIFRoZSBxdWFsaXR5IG9mIHNhbXBsZXMsIHJhbmdlIDAtMS4gIFVzZWQgdG8gZGVjaWRlIGJldHdlZW4KKyAgICAgICAgICogICAgICAgICAgIGRpZmZlcmVudCBmb3JtYXRzIHdoaWNoIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHNhbXBsZXMgYnV0CisgICAgICAgICAqICAgICAgICAgICBkaWZmZXJlbnQgcmVuZGVyaW5nIHF1YWxpdHkuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBzZXRTYW1wbGVzKGludCBtaW5pbXVtLCBpbnQgcHJlZmVycmVkLCBmbG9hdCBRKSB7CisgICAgICAgICAgICB2YWxpZGF0ZVJhbmdlKG1pbmltdW0sIHByZWZlcnJlZCwgMSwgMzIpOworICAgICAgICAgICAgaWYgKFEgPCAwLjBmIHx8IFEgPiAxLjBmKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJRdWFsaXR5IG91dCBvZiAwLTEgcmFuZ2UuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtU2FtcGxlc01pbiA9IG1pbmltdW07CisgICAgICAgICAgICBtU2FtcGxlc1ByZWYgPSBwcmVmZXJyZWQ7CisgICAgICAgICAgICBtU2FtcGxlc1EgPSBROworICAgICAgICB9CisgICAgfTsKKworICAgIFN1cmZhY2VDb25maWcgbVN1cmZhY2VDb25maWc7CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgUmVuZGVyU2NyaXB0R0wgY29udGV4dC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQuCisgICAgICogQHBhcmFtIHNjIFRoZSBkZXNpcmVkIGZvcm1hdCBvZiB0aGUgcHJpbWFyeSByZW5kZXJpbmcgc3VyZmFjZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgUmVuZGVyU2NyaXB0R0woQ29udGV4dCBjdHgsIFN1cmZhY2VDb25maWcgc2MpIHsKKyAgICAgICAgc3VwZXIoY3R4KTsKKyAgICAgICAgbVN1cmZhY2VDb25maWcgPSBuZXcgU3VyZmFjZUNvbmZpZyhzYyk7CisKKyAgICAgICAgaW50IHNka1ZlcnNpb24gPSBjdHguZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbjsKKworICAgICAgICBtV2lkdGggPSAwOworICAgICAgICBtSGVpZ2h0ID0gMDsKKyAgICAgICAgbURldiA9IG5EZXZpY2VDcmVhdGUoKTsKKyAgICAgICAgaW50IGRwaSA9IGN0eC5nZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpLmRlbnNpdHlEcGk7CisgICAgICAgIG1Db250ZXh0ID0gbkNvbnRleHRDcmVhdGVHTChtRGV2LCAwLCBzZGtWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1cmZhY2VDb25maWcubUNvbG9yTWluLCBtU3VyZmFjZUNvbmZpZy5tQ29sb3JQcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1cmZhY2VDb25maWcubUFscGhhTWluLCBtU3VyZmFjZUNvbmZpZy5tQWxwaGFQcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1cmZhY2VDb25maWcubURlcHRoTWluLCBtU3VyZmFjZUNvbmZpZy5tRGVwdGhQcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN1cmZhY2VDb25maWcubVN0ZW5jaWxNaW4sIG1TdXJmYWNlQ29uZmlnLm1TdGVuY2lsUHJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXJmYWNlQ29uZmlnLm1TYW1wbGVzTWluLCBtU3VyZmFjZUNvbmZpZy5tU2FtcGxlc1ByZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VyZmFjZUNvbmZpZy5tU2FtcGxlc1EsIGRwaSk7CisgICAgICAgIGlmIChtQ29udGV4dCA9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNEcml2ZXJFeGNlcHRpb24oIkZhaWxlZCB0byBjcmVhdGUgUlMgY29udGV4dC4iKTsKKyAgICAgICAgfQorICAgICAgICBtTWVzc2FnZVRocmVhZCA9IG5ldyBNZXNzYWdlVGhyZWFkKHRoaXMpOworICAgICAgICBtTWVzc2FnZVRocmVhZC5zdGFydCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIEJpbmQgYW4gb3Mgc3VyZmFjZQorICAgICAqCisgICAgICoKKyAgICAgKiBAcGFyYW0gdworICAgICAqIEBwYXJhbSBoCisgICAgICogQHBhcmFtIHN1cgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFN1cmZhY2UoU3VyZmFjZUhvbGRlciBzdXIsIGludCB3LCBpbnQgaCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICBTdXJmYWNlIHMgPSBudWxsOworICAgICAgICBpZiAoc3VyICE9IG51bGwpIHsKKyAgICAgICAgICAgIHMgPSBzdXIuZ2V0U3VyZmFjZSgpOworICAgICAgICB9CisgICAgICAgIG1XaWR0aCA9IHc7CisgICAgICAgIG1IZWlnaHQgPSBoOworICAgICAgICBuQ29udGV4dFNldFN1cmZhY2UodywgaCwgcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogQmluZCBhbiBvcyBzdXJmYWNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gdworICAgICAqIEBwYXJhbSBoCisgICAgICogQHBhcmFtIHN1cgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFN1cmZhY2VUZXh0dXJlKFN1cmZhY2VUZXh0dXJlIHN1ciwgaW50IHcsIGludCBoKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIC8vYW5kcm9pZC51dGlsLkxvZy52KCJycyIsICJzZXQgc3VyZmFjZSAiICsgc3VyICsgIiB3PSIgKyB3ICsgIiwgaD0iICsgaCk7CisKKyAgICAgICAgbVdpZHRoID0gdzsKKyAgICAgICAgbUhlaWdodCA9IGg7CisgICAgICAgIG5Db250ZXh0U2V0U3VyZmFjZVRleHR1cmUodywgaCwgc3VyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKiByZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUgbGFzdCBzZXQgc3VyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gaW50CisgICAgICovCisgICAgcHVibGljIGludCBnZXRIZWlnaHQoKSB7CisgICAgICAgIHJldHVybiBtSGVpZ2h0OworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIHJldHVybiB0aGUgd2lkdGggb2YgdGhlIGxhc3Qgc2V0IHN1cmZhY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGludAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0V2lkdGgoKSB7CisgICAgICAgIHJldHVybiBtV2lkdGg7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogVGVtcG9yYXJseSBoYWx0IGNhbGxzIHRvIHRoZSByb290IHJlbmRlcmluZyBzY3JpcHQuCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBwYXVzZSgpIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgbkNvbnRleHRQYXVzZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIFJlc3VtZSBjYWxscyB0byB0aGUgcm9vdCByZW5kZXJpbmcgc2NyaXB0LgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVzdW1lKCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICBuQ29udGV4dFJlc3VtZSgpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogU2V0IHRoZSBzY3JpcHQgdG8gaGFuZGxlIGNhbGxzIHRvIHJlbmRlciB0aGUgcHJpbWFyeSBzdXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtIHMgR3JhcGhpY3Mgc2NyaXB0IHRvIHByb2Nlc3MgcmVuZGVyaW5nIHJlcXVlc3RzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGJpbmRSb290U2NyaXB0KFNjcmlwdCBzKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIG5Db250ZXh0QmluZFJvb3RTY3JpcHQoKGludClzYWZlSUQocykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIGluIEFQSSAxNgorICAgICAqIFNldCB0aGUgZGVmYXVsdCBQcm9ncmFtU3RvcmUgb2JqZWN0IHNlZW4gYXMgdGhlIHBhcmVudCBzdGF0ZSBieSB0aGUgcm9vdAorICAgICAqIHJlbmRlcmluZyBzY3JpcHQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGJpbmRQcm9ncmFtU3RvcmUoUHJvZ3JhbVN0b3JlIHApIHsKKyAgICAgICAgdmFsaWRhdGUoKTsKKyAgICAgICAgbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlKChpbnQpc2FmZUlEKHApKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKiBTZXQgdGhlIGRlZmF1bHQgUHJvZ3JhbUZyYWdtZW50IG9iamVjdCBzZWVuIGFzIHRoZSBwYXJlbnQgc3RhdGUgYnkgdGhlCisgICAgICogcm9vdCByZW5kZXJpbmcgc2NyaXB0LgorICAgICAqCisgICAgICogQHBhcmFtIHAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBiaW5kUHJvZ3JhbUZyYWdtZW50KFByb2dyYW1GcmFnbWVudCBwKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIG5Db250ZXh0QmluZFByb2dyYW1GcmFnbWVudCgoaW50KXNhZmVJRChwKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CisgICAgICogU2V0IHRoZSBkZWZhdWx0IFByb2dyYW1SYXN0ZXIgb2JqZWN0IHNlZW4gYXMgdGhlIHBhcmVudCBzdGF0ZSBieSB0aGUKKyAgICAgKiByb290IHJlbmRlcmluZyBzY3JpcHQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGJpbmRQcm9ncmFtUmFzdGVyKFByb2dyYW1SYXN0ZXIgcCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICBuQ29udGV4dEJpbmRQcm9ncmFtUmFzdGVyKChpbnQpc2FmZUlEKHApKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKKyAgICAgKiBTZXQgdGhlIGRlZmF1bHQgUHJvZ3JhbVZlcnRleCBvYmplY3Qgc2VlbiBhcyB0aGUgcGFyZW50IHN0YXRlIGJ5IHRoZQorICAgICAqIHJvb3QgcmVuZGVyaW5nIHNjcmlwdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwCisgICAgICovCisgICAgcHVibGljIHZvaWQgYmluZFByb2dyYW1WZXJ0ZXgoUHJvZ3JhbVZlcnRleCBwKSB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIG5Db250ZXh0QmluZFByb2dyYW1WZXJ0ZXgoKGludClzYWZlSUQocCkpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NhbXBsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWI4NjdiCi0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyLmphdmEKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisvKioKKyAqIFNhbXBsZXIgb2JqZWN0IHRoYXQgZGVmaW5lcyBob3cgQWxsb2NhdGlvbnMgY2FuIGJlIHJlYWQgYXMgdGV4dHVyZXMgd2l0aGluIGEKKyAqIGtlcm5lbC4gU2FtcGxlcnMgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUge0Bjb2RlIHJzU2FtcGxlfSBydW50aW1lCisgKiBmdW5jdGlvbiB0byByZXR1cm4gdmFsdWVzIGZyb20gbm9ybWFsaXplZCBjb29yZGluYXRlcy4KKyAqCisgKiBBbnkgQWxsb2NhdGlvbiB1c2VkIHdpdGggYSBTYW1wbGVyIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgd2l0aCB7QGxpbmsKKyAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24jVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRX07IHVzaW5nIGEgU2FtcGxlciBvbgorICogYW4ge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb259IHRoYXQgd2FzIG5vdCBjcmVhdGVkIHdpdGgge0BsaW5rCisgKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uI1VTQUdFX0dSQVBISUNTX1RFWFRVUkV9IGlzIHVuZGVmaW5lZC4KKyAqKi8KK3B1YmxpYyBjbGFzcyBTYW1wbGVyIGV4dGVuZHMgQmFzZU9iaiB7CisgICAgcHVibGljIGVudW0gVmFsdWUgeworICAgICAgICBORUFSRVNUICgwKSwKKyAgICAgICAgTElORUFSICgxKSwKKyAgICAgICAgTElORUFSX01JUF9MSU5FQVIgKDIpLAorICAgICAgICBMSU5FQVJfTUlQX05FQVJFU1QgKDUpLAorICAgICAgICBXUkFQICgzKSwKKyAgICAgICAgQ0xBTVAgKDQpLAorICAgICAgICBNSVJST1JFRF9SRVBFQVQgKDYpOworCisgICAgICAgIGludCBtSUQ7CisgICAgICAgIFZhbHVlKGludCBpZCkgeworICAgICAgICAgICAgbUlEID0gaWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWYWx1ZSBtTWluOworICAgIFZhbHVlIG1NYWc7CisgICAgVmFsdWUgbVdyYXBTOworICAgIFZhbHVlIG1XcmFwVDsKKyAgICBWYWx1ZSBtV3JhcFI7CisgICAgZmxvYXQgbUFuaXNvOworCisgICAgU2FtcGxlcihpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBzdXBlcihpZCwgcnMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gbWluaWZpY2F0aW9uIHNldHRpbmcgZm9yIHRoZSBzYW1wbGVyCisgICAgICovCisgICAgcHVibGljIFZhbHVlIGdldE1pbmlmaWNhdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIG1NaW47CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBtYWduaWZpY2F0aW9uIHNldHRpbmcgZm9yIHRoZSBzYW1wbGVyCisgICAgICovCisgICAgcHVibGljIFZhbHVlIGdldE1hZ25pZmljYXRpb24oKSB7CisgICAgICAgIHJldHVybiBtTWFnOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gUyB3cmFwcGluZyBtb2RlIGZvciB0aGUgc2FtcGxlcgorICAgICAqLworICAgIHB1YmxpYyBWYWx1ZSBnZXRXcmFwUygpIHsKKyAgICAgICAgcmV0dXJuIG1XcmFwUzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFQgd3JhcHBpbmcgbW9kZSBmb3IgdGhlIHNhbXBsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgVmFsdWUgZ2V0V3JhcFQoKSB7CisgICAgICAgIHJldHVybiBtV3JhcFQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBhbmlzb3Ryb3B5IHNldHRpbmcgZm9yIHRoZSBzYW1wbGVyCisgICAgICovCisgICAgcHVibGljIGZsb2F0IGdldEFuaXNvdHJvcHkoKSB7CisgICAgICAgIHJldHVybiBtQW5pc287CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0cmlldmUgYSBzYW1wbGVyIHdpdGggbWluIGFuZCBtYWcgc2V0IHRvIG5lYXJlc3QgYW5kIHdyYXAgbW9kZXMgc2V0IHRvCisgICAgICogY2xhbXAuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgc2FtcGxlciB3aWxsIGJlbG9uZy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gU2FtcGxlcgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2FtcGxlciBDTEFNUF9ORUFSRVNUKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBpZihycy5tU2FtcGxlcl9DTEFNUF9ORUFSRVNUID09IG51bGwpIHsKKyAgICAgICAgICAgIEJ1aWxkZXIgYiA9IG5ldyBCdWlsZGVyKHJzKTsKKyAgICAgICAgICAgIGIuc2V0TWluaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOworICAgICAgICAgICAgYi5zZXRNYWduaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOworICAgICAgICAgICAgYi5zZXRXcmFwUyhWYWx1ZS5DTEFNUCk7CisgICAgICAgICAgICBiLnNldFdyYXBUKFZhbHVlLkNMQU1QKTsKKyAgICAgICAgICAgIHJzLm1TYW1wbGVyX0NMQU1QX05FQVJFU1QgPSBiLmNyZWF0ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tU2FtcGxlcl9DTEFNUF9ORUFSRVNUOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIGEgc2FtcGxlciB3aXRoIG1pbiBhbmQgbWFnIHNldCB0byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgc2V0IHRvCisgICAgICogY2xhbXAuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgc2FtcGxlciB3aWxsIGJlbG9uZy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gU2FtcGxlcgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2FtcGxlciBDTEFNUF9MSU5FQVIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1TYW1wbGVyX0NMQU1QX0xJTkVBUiA9PSBudWxsKSB7CisgICAgICAgICAgICBCdWlsZGVyIGIgPSBuZXcgQnVpbGRlcihycyk7CisgICAgICAgICAgICBiLnNldE1pbmlmaWNhdGlvbihWYWx1ZS5MSU5FQVIpOworICAgICAgICAgICAgYi5zZXRNYWduaWZpY2F0aW9uKFZhbHVlLkxJTkVBUik7CisgICAgICAgICAgICBiLnNldFdyYXBTKFZhbHVlLkNMQU1QKTsKKyAgICAgICAgICAgIGIuc2V0V3JhcFQoVmFsdWUuQ0xBTVApOworICAgICAgICAgICAgcnMubVNhbXBsZXJfQ0xBTVBfTElORUFSID0gYi5jcmVhdGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubVNhbXBsZXJfQ0xBTVBfTElORUFSOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIGEgc2FtcGxlciB3aXRoIG1hZyBzZXQgdG8gbGluZWFyLCBtaW4gbGluZWFyIG1pcG1hcCBsaW5lYXIsIGFuZAorICAgICAqIHdyYXAgbW9kZXMgc2V0IHRvIGNsYW1wLgorICAgICAqCisgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHNhbXBsZXIgd2lsbCBiZWxvbmcuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNhbXBsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFNhbXBsZXIgQ0xBTVBfTElORUFSX01JUF9MSU5FQVIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1TYW1wbGVyX0NMQU1QX0xJTkVBUl9NSVBfTElORUFSID09IG51bGwpIHsKKyAgICAgICAgICAgIEJ1aWxkZXIgYiA9IG5ldyBCdWlsZGVyKHJzKTsKKyAgICAgICAgICAgIGIuc2V0TWluaWZpY2F0aW9uKFZhbHVlLkxJTkVBUl9NSVBfTElORUFSKTsKKyAgICAgICAgICAgIGIuc2V0TWFnbmlmaWNhdGlvbihWYWx1ZS5MSU5FQVIpOworICAgICAgICAgICAgYi5zZXRXcmFwUyhWYWx1ZS5DTEFNUCk7CisgICAgICAgICAgICBiLnNldFdyYXBUKFZhbHVlLkNMQU1QKTsKKyAgICAgICAgICAgIHJzLm1TYW1wbGVyX0NMQU1QX0xJTkVBUl9NSVBfTElORUFSID0gYi5jcmVhdGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnMubVNhbXBsZXJfQ0xBTVBfTElORUFSX01JUF9MSU5FQVI7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0cmlldmUgYSBzYW1wbGVyIHdpdGggbWluIGFuZCBtYWcgc2V0IHRvIG5lYXJlc3QgYW5kIHdyYXAgbW9kZXMgc2V0IHRvCisgICAgICogd3JhcC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBzYW1wbGVyIHdpbGwgYmVsb25nLgorICAgICAqCisgICAgICogQHJldHVybiBTYW1wbGVyCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTYW1wbGVyIFdSQVBfTkVBUkVTVChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubVNhbXBsZXJfV1JBUF9ORUFSRVNUID09IG51bGwpIHsKKyAgICAgICAgICAgIEJ1aWxkZXIgYiA9IG5ldyBCdWlsZGVyKHJzKTsKKyAgICAgICAgICAgIGIuc2V0TWluaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOworICAgICAgICAgICAgYi5zZXRNYWduaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOworICAgICAgICAgICAgYi5zZXRXcmFwUyhWYWx1ZS5XUkFQKTsKKyAgICAgICAgICAgIGIuc2V0V3JhcFQoVmFsdWUuV1JBUCk7CisgICAgICAgICAgICBycy5tU2FtcGxlcl9XUkFQX05FQVJFU1QgPSBiLmNyZWF0ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tU2FtcGxlcl9XUkFQX05FQVJFU1Q7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0cmlldmUgYSBzYW1wbGVyIHdpdGggbWluIGFuZCBtYWcgc2V0IHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyBzZXQgdG8KKyAgICAgKiB3cmFwLgorICAgICAqCisgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHNhbXBsZXIgd2lsbCBiZWxvbmcuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNhbXBsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFNhbXBsZXIgV1JBUF9MSU5FQVIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1TYW1wbGVyX1dSQVBfTElORUFSID09IG51bGwpIHsKKyAgICAgICAgICAgIEJ1aWxkZXIgYiA9IG5ldyBCdWlsZGVyKHJzKTsKKyAgICAgICAgICAgIGIuc2V0TWluaWZpY2F0aW9uKFZhbHVlLkxJTkVBUik7CisgICAgICAgICAgICBiLnNldE1hZ25pZmljYXRpb24oVmFsdWUuTElORUFSKTsKKyAgICAgICAgICAgIGIuc2V0V3JhcFMoVmFsdWUuV1JBUCk7CisgICAgICAgICAgICBiLnNldFdyYXBUKFZhbHVlLldSQVApOworICAgICAgICAgICAgcnMubVNhbXBsZXJfV1JBUF9MSU5FQVIgPSBiLmNyZWF0ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tU2FtcGxlcl9XUkFQX0xJTkVBUjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZSBhIHNhbXBsZXIgd2l0aCBtYWcgc2V0IHRvIGxpbmVhciwgbWluIGxpbmVhciBtaXBtYXAgbGluZWFyLCBhbmQKKyAgICAgKiB3cmFwIG1vZGVzIHNldCB0byB3cmFwLgorICAgICAqCisgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHNhbXBsZXIgd2lsbCBiZWxvbmcuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNhbXBsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFNhbXBsZXIgV1JBUF9MSU5FQVJfTUlQX0xJTkVBUihSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgaWYocnMubVNhbXBsZXJfV1JBUF9MSU5FQVJfTUlQX0xJTkVBUiA9PSBudWxsKSB7CisgICAgICAgICAgICBCdWlsZGVyIGIgPSBuZXcgQnVpbGRlcihycyk7CisgICAgICAgICAgICBiLnNldE1pbmlmaWNhdGlvbihWYWx1ZS5MSU5FQVJfTUlQX0xJTkVBUik7CisgICAgICAgICAgICBiLnNldE1hZ25pZmljYXRpb24oVmFsdWUuTElORUFSKTsKKyAgICAgICAgICAgIGIuc2V0V3JhcFMoVmFsdWUuV1JBUCk7CisgICAgICAgICAgICBiLnNldFdyYXBUKFZhbHVlLldSQVApOworICAgICAgICAgICAgcnMubVNhbXBsZXJfV1JBUF9MSU5FQVJfTUlQX0xJTkVBUiA9IGIuY3JlYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1TYW1wbGVyX1dSQVBfTElORUFSX01JUF9MSU5FQVI7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0cmlldmUgYSBzYW1wbGVyIHdpdGggbWluIGFuZCBtYWcgc2V0IHRvIG5lYXJlc3QgYW5kIHdyYXAgbW9kZXMgc2V0IHRvCisgICAgICogbWlycm9yZWQgcmVwZWF0LgorICAgICAqCisgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gd2hpY2ggdGhlIHNhbXBsZXIgd2lsbCBiZWxvbmcuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNhbXBsZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFNhbXBsZXIgTUlSUk9SRURfUkVQRUFUX05FQVJFU1QoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9ORUFSRVNUID09IG51bGwpIHsKKyAgICAgICAgICAgIEJ1aWxkZXIgYiA9IG5ldyBCdWlsZGVyKHJzKTsKKyAgICAgICAgICAgIGIuc2V0TWluaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOworICAgICAgICAgICAgYi5zZXRNYWduaWZpY2F0aW9uKFZhbHVlLk5FQVJFU1QpOworICAgICAgICAgICAgYi5zZXRXcmFwUyhWYWx1ZS5NSVJST1JFRF9SRVBFQVQpOworICAgICAgICAgICAgYi5zZXRXcmFwVChWYWx1ZS5NSVJST1JFRF9SRVBFQVQpOworICAgICAgICAgICAgcnMubVNhbXBsZXJfTUlSUk9SRURfUkVQRUFUX05FQVJFU1QgPSBiLmNyZWF0ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBycy5tU2FtcGxlcl9NSVJST1JFRF9SRVBFQVRfTkVBUkVTVDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZSBhIHNhbXBsZXIgd2l0aCBtaW4gYW5kIG1hZyBzZXQgdG8gbGluZWFyIGFuZCB3cmFwIG1vZGVzIHNldCB0bworICAgICAqIG1pcnJvcmVkIHJlcGVhdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBDb250ZXh0IHRvIHdoaWNoIHRoZSBzYW1wbGVyIHdpbGwgYmVsb25nLgorICAgICAqCisgICAgICogQHJldHVybiBTYW1wbGVyCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTYW1wbGVyIE1JUlJPUkVEX1JFUEVBVF9MSU5FQVIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9MSU5FQVIgPT0gbnVsbCkgeworICAgICAgICAgICAgQnVpbGRlciBiID0gbmV3IEJ1aWxkZXIocnMpOworICAgICAgICAgICAgYi5zZXRNaW5pZmljYXRpb24oVmFsdWUuTElORUFSKTsKKyAgICAgICAgICAgIGIuc2V0TWFnbmlmaWNhdGlvbihWYWx1ZS5MSU5FQVIpOworICAgICAgICAgICAgYi5zZXRXcmFwUyhWYWx1ZS5NSVJST1JFRF9SRVBFQVQpOworICAgICAgICAgICAgYi5zZXRXcmFwVChWYWx1ZS5NSVJST1JFRF9SRVBFQVQpOworICAgICAgICAgICAgcnMubVNhbXBsZXJfTUlSUk9SRURfUkVQRUFUX0xJTkVBUiA9IGIuY3JlYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9MSU5FQVI7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0cmlldmUgYSBzYW1wbGVyIHdpdGggbWluIGFuZCBtYWcgc2V0IHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyBzZXQgdG8KKyAgICAgKiBtaXJyb3JlZCByZXBlYXQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgQ29udGV4dCB0byB3aGljaCB0aGUgc2FtcGxlciB3aWxsIGJlbG9uZy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gU2FtcGxlcgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2FtcGxlciBNSVJST1JFRF9SRVBFQVRfTElORUFSX01JUF9MSU5FQVIoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIGlmKHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9MSU5FQVJfTUlQX0xJTkVBUiA9PSBudWxsKSB7CisgICAgICAgICAgICBCdWlsZGVyIGIgPSBuZXcgQnVpbGRlcihycyk7CisgICAgICAgICAgICBiLnNldE1pbmlmaWNhdGlvbihWYWx1ZS5MSU5FQVJfTUlQX0xJTkVBUik7CisgICAgICAgICAgICBiLnNldE1hZ25pZmljYXRpb24oVmFsdWUuTElORUFSKTsKKyAgICAgICAgICAgIGIuc2V0V3JhcFMoVmFsdWUuTUlSUk9SRURfUkVQRUFUKTsKKyAgICAgICAgICAgIGIuc2V0V3JhcFQoVmFsdWUuTUlSUk9SRURfUkVQRUFUKTsKKyAgICAgICAgICAgIHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9MSU5FQVJfTUlQX0xJTkVBUiA9IGIuY3JlYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJzLm1TYW1wbGVyX01JUlJPUkVEX1JFUEVBVF9MSU5FQVJfTUlQX0xJTkVBUjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBCdWlsZGVyIGZvciBjcmVhdGluZyBub24tc3RhbmRhcmQgc2FtcGxlcnMuICBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmCisgICAgICogYSBTYW1wbGVyIHdpdGggZGlmZmVyZW50IG1pbiBhbmQgbWFnIG1vZGVzIGlzIGRlc2lyZWQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKKyAgICAgICAgUmVuZGVyU2NyaXB0IG1SUzsKKyAgICAgICAgVmFsdWUgbU1pbjsKKyAgICAgICAgVmFsdWUgbU1hZzsKKyAgICAgICAgVmFsdWUgbVdyYXBTOworICAgICAgICBWYWx1ZSBtV3JhcFQ7CisgICAgICAgIFZhbHVlIG1XcmFwUjsKKyAgICAgICAgZmxvYXQgbUFuaXNvOworCisgICAgICAgIHB1YmxpYyBCdWlsZGVyKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICAgICAgbVJTID0gcnM7CisgICAgICAgICAgICBtTWluID0gVmFsdWUuTkVBUkVTVDsKKyAgICAgICAgICAgIG1NYWcgPSBWYWx1ZS5ORUFSRVNUOworICAgICAgICAgICAgbVdyYXBTID0gVmFsdWUuV1JBUDsKKyAgICAgICAgICAgIG1XcmFwVCA9IFZhbHVlLldSQVA7CisgICAgICAgICAgICBtV3JhcFIgPSBWYWx1ZS5XUkFQOworICAgICAgICAgICAgbUFuaXNvID0gMS4wZjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldE1pbmlmaWNhdGlvbihWYWx1ZSB2KSB7CisgICAgICAgICAgICBpZiAodiA9PSBWYWx1ZS5ORUFSRVNUIHx8CisgICAgICAgICAgICAgICAgdiA9PSBWYWx1ZS5MSU5FQVIgfHwKKyAgICAgICAgICAgICAgICB2ID09IFZhbHVlLkxJTkVBUl9NSVBfTElORUFSIHx8CisgICAgICAgICAgICAgICAgdiA9PSBWYWx1ZS5MSU5FQVJfTUlQX05FQVJFU1QpIHsKKyAgICAgICAgICAgICAgICBtTWluID0gdjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0TWFnbmlmaWNhdGlvbihWYWx1ZSB2KSB7CisgICAgICAgICAgICBpZiAodiA9PSBWYWx1ZS5ORUFSRVNUIHx8IHYgPT0gVmFsdWUuTElORUFSKSB7CisgICAgICAgICAgICAgICAgbU1hZyA9IHY7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgdmFsdWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFdyYXBTKFZhbHVlIHYpIHsKKyAgICAgICAgICAgIGlmICh2ID09IFZhbHVlLldSQVAgfHwgdiA9PSBWYWx1ZS5DTEFNUCB8fCB2ID09IFZhbHVlLk1JUlJPUkVEX1JFUEVBVCkgeworICAgICAgICAgICAgICAgIG1XcmFwUyA9IHY7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgdmFsdWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFdyYXBUKFZhbHVlIHYpIHsKKyAgICAgICAgICAgIGlmICh2ID09IFZhbHVlLldSQVAgfHwgdiA9PSBWYWx1ZS5DTEFNUCB8fCB2ID09IFZhbHVlLk1JUlJPUkVEX1JFUEVBVCkgeworICAgICAgICAgICAgICAgIG1XcmFwVCA9IHY7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgdmFsdWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEFuaXNvdHJvcHkoZmxvYXQgdikgeworICAgICAgICAgICAgaWYodiA+PSAwLjBmKSB7CisgICAgICAgICAgICAgICAgbUFuaXNvID0gdjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFNhbXBsZXIgY3JlYXRlKCkgeworICAgICAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgICAgICBpbnQgaWQgPSBtUlMublNhbXBsZXJDcmVhdGUobU1hZy5tSUQsIG1NaW4ubUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XcmFwUy5tSUQsIG1XcmFwVC5tSUQsIG1XcmFwUi5tSUQsIG1Bbmlzbyk7CisgICAgICAgICAgICBTYW1wbGVyIHNhbXBsZXIgPSBuZXcgU2FtcGxlcihpZCwgbVJTKTsKKyAgICAgICAgICAgIHNhbXBsZXIubU1pbiA9IG1NaW47CisgICAgICAgICAgICBzYW1wbGVyLm1NYWcgPSBtTWFnOworICAgICAgICAgICAgc2FtcGxlci5tV3JhcFMgPSBtV3JhcFM7CisgICAgICAgICAgICBzYW1wbGVyLm1XcmFwVCA9IG1XcmFwVDsKKyAgICAgICAgICAgIHNhbXBsZXIubVdyYXBSID0gbVdyYXBSOworICAgICAgICAgICAgc2FtcGxlci5tQW5pc28gPSBtQW5pc287CisgICAgICAgICAgICByZXR1cm4gc2FtcGxlcjsKKyAgICAgICAgfQorICAgIH0KKworfQorCmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdC5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWYyMjg3Ci0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQuamF2YQpAQCAtMCwwICsxLDQ3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKKworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKKworLyoqCisgKiBUaGUgcGFyZW50IGNsYXNzIGZvciBhbGwgZXhlY3V0YWJsZSBzY3JpcHRzLiBUaGlzIHNob3VsZCBub3QgYmUgdXNlZCBieQorICogYXBwbGljYXRpb25zLgorICoqLworcHVibGljIGNsYXNzIFNjcmlwdCBleHRlbmRzIEJhc2VPYmogeworCisgICAgLyoqCisgICAgICogS2VybmVsSUQgaXMgYW4gaWRlbnRpZmllciBmb3IgYSBTY3JpcHQgKyByb290IGZ1bmN0aW9uIHBhaXIuIEl0IGlzIHVzZWQKKyAgICAgKiBhcyBhbiBpZGVudGlmaWVyIGZvciBTY3JpcHRHcm91cCBjcmVhdGlvbi4KKyAgICAgKgorICAgICAqIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBkaXJlY3RseSBjcmVhdGVkLiBJbnN0ZWFkIHVzZSB0aGUgbWV0aG9kIGluIHRoZQorICAgICAqIHJlZmxlY3RlZCBvciBpbnRyaW5zaWMgY29kZSAiZ2V0S2VybmVsSURfZnVuY25hbWUoKSIuCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEtlcm5lbElEIGV4dGVuZHMgQmFzZU9iaiB7CisgICAgICAgIFNjcmlwdCBtU2NyaXB0OworICAgICAgICBpbnQgbVNsb3Q7CisgICAgICAgIGludCBtU2lnOworICAgICAgICBLZXJuZWxJRChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMsIFNjcmlwdCBzLCBpbnQgc2xvdCwgaW50IHNpZykgeworICAgICAgICAgICAgc3VwZXIoaWQsIHJzKTsKKyAgICAgICAgICAgIG1TY3JpcHQgPSBzOworICAgICAgICAgICAgbVNsb3QgPSBzbG90OworICAgICAgICAgICAgbVNpZyA9IHNpZzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8S2VybmVsSUQ+IG1LSURzID0gbmV3IFNwYXJzZUFycmF5PEtlcm5lbElEPigpOworICAgIC8qKgorICAgICAqIE9ubHkgdG8gYmUgdXNlZCBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNsYXNzZXMuCisgICAgICovCisgICAgcHJvdGVjdGVkIEtlcm5lbElEIGNyZWF0ZUtlcm5lbElEKGludCBzbG90LCBpbnQgc2lnLCBFbGVtZW50IGVpbiwgRWxlbWVudCBlb3V0KSB7CisgICAgICAgIEtlcm5lbElEIGsgPSBtS0lEcy5nZXQoc2xvdCk7CisgICAgICAgIGlmIChrICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBrOworICAgICAgICB9CisKKyAgICAgICAgbG9uZyBpZCA9IG1SUy5uU2NyaXB0S2VybmVsSURDcmVhdGUoZ2V0SUQobVJTKSwgc2xvdCwgc2lnKTsKKyAgICAgICAgaWYgKGlkID09IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0RyaXZlckV4Y2VwdGlvbigiRmFpbGVkIHRvIGNyZWF0ZSBLZXJuZWxJRCIpOworICAgICAgICB9CisKKyAgICAgICAgayA9IG5ldyBLZXJuZWxJRChpZCwgbVJTLCB0aGlzLCBzbG90LCBzaWcpOworICAgICAgICBtS0lEcy5wdXQoc2xvdCwgayk7CisgICAgICAgIHJldHVybiBrOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpZWxkSUQgaXMgYW4gaWRlbnRpZmllciBmb3IgYSBTY3JpcHQgKyBleHBvcnRlZCBmaWVsZCBwYWlyLiBJdCBpcyB1c2VkCisgICAgICogYXMgYW4gaWRlbnRpZmllciBmb3IgU2NyaXB0R3JvdXAgY3JlYXRpb24uCisgICAgICoKKyAgICAgKiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgZGlyZWN0bHkgY3JlYXRlZC4gSW5zdGVhZCB1c2UgdGhlIG1ldGhvZCBpbiB0aGUKKyAgICAgKiByZWZsZWN0ZWQgb3IgaW50cmluc2ljIGNvZGUgImdldEZpZWxkSURfZnVuY25hbWUoKSIuCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZpZWxkSUQgZXh0ZW5kcyBCYXNlT2JqIHsKKyAgICAgICAgU2NyaXB0IG1TY3JpcHQ7CisgICAgICAgIGludCBtU2xvdDsKKyAgICAgICAgRmllbGRJRChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMsIFNjcmlwdCBzLCBpbnQgc2xvdCkgeworICAgICAgICAgICAgc3VwZXIoaWQsIHJzKTsKKyAgICAgICAgICAgIG1TY3JpcHQgPSBzOworICAgICAgICAgICAgbVNsb3QgPSBzbG90OworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBTcGFyc2VBcnJheTxGaWVsZElEPiBtRklEcyA9IG5ldyBTcGFyc2VBcnJheSgpOworICAgIC8qKgorICAgICAqIE9ubHkgdG8gYmUgdXNlZCBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNsYXNzZXMuCisgICAgICovCisgICAgcHJvdGVjdGVkIEZpZWxkSUQgY3JlYXRlRmllbGRJRChpbnQgc2xvdCwgRWxlbWVudCBlKSB7CisgICAgICAgIEZpZWxkSUQgZiA9IG1GSURzLmdldChzbG90KTsKKyAgICAgICAgaWYgKGYgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGY7CisgICAgICAgIH0KKworICAgICAgICBsb25nIGlkID0gbVJTLm5TY3JpcHRGaWVsZElEQ3JlYXRlKGdldElEKG1SUyksIHNsb3QpOworICAgICAgICBpZiAoaWQgPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTRHJpdmVyRXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRlIEZpZWxkSUQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGYgPSBuZXcgRmllbGRJRChpZCwgbVJTLCB0aGlzLCBzbG90KTsKKyAgICAgICAgbUZJRHMucHV0KHNsb3QsIGYpOworICAgICAgICByZXR1cm4gZjsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIE9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCisgICAgICoKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBpbnZva2UoaW50IHNsb3QpIHsKKyAgICAgICAgbVJTLm5TY3JpcHRJbnZva2UoZ2V0SUQobVJTKSwgc2xvdCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KKyAgICAgKgorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGludm9rZShpbnQgc2xvdCwgRmllbGRQYWNrZXIgdikgeworICAgICAgICBpZiAodiAhPSBudWxsKSB7CisgICAgICAgICAgICBtUlMublNjcmlwdEludm9rZVYoZ2V0SUQobVJTKSwgc2xvdCwgdi5nZXREYXRhKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVJTLm5TY3JpcHRJbnZva2UoZ2V0SUQobVJTKSwgc2xvdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgorICAgICAqCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgZm9yRWFjaChpbnQgc2xvdCwgQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCwgRmllbGRQYWNrZXIgdikgeworICAgICAgICBpZiAoYWluID09IG51bGwgJiYgYW91dCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkF0IGxlYXN0IG9uZSBvZiBhaW4gb3IgYW91dCBpcyByZXF1aXJlZCB0byBiZSBub24tbnVsbC4iKTsKKyAgICAgICAgfQorICAgICAgICBsb25nIGluX2lkID0gMDsKKyAgICAgICAgaWYgKGFpbiAhPSBudWxsKSB7CisgICAgICAgICAgICBpbl9pZCA9IGFpbi5nZXRJRChtUlMpOworICAgICAgICB9CisgICAgICAgIGxvbmcgb3V0X2lkID0gMDsKKyAgICAgICAgaWYgKGFvdXQgIT0gbnVsbCkgeworICAgICAgICAgICAgb3V0X2lkID0gYW91dC5nZXRJRChtUlMpOworICAgICAgICB9CisgICAgICAgIGJ5dGVbXSBwYXJhbXMgPSBudWxsOworICAgICAgICBpZiAodiAhPSBudWxsKSB7CisgICAgICAgICAgICBwYXJhbXMgPSB2LmdldERhdGEoKTsKKyAgICAgICAgfQorICAgICAgICBtUlMublNjcmlwdEZvckVhY2goZ2V0SUQobVJTKSwgc2xvdCwgaW5faWQsIG91dF9pZCwgcGFyYW1zKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgorICAgICAqCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgZm9yRWFjaChpbnQgc2xvdCwgQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCwgRmllbGRQYWNrZXIgdiwgTGF1bmNoT3B0aW9ucyBzYykgeworICAgICAgICBpZiAoYWluID09IG51bGwgJiYgYW91dCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkF0IGxlYXN0IG9uZSBvZiBhaW4gb3IgYW91dCBpcyByZXF1aXJlZCB0byBiZSBub24tbnVsbC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzYyA9PSBudWxsKSB7CisgICAgICAgICAgICBmb3JFYWNoKHNsb3QsIGFpbiwgYW91dCwgdik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbG9uZyBpbl9pZCA9IDA7CisgICAgICAgIGlmIChhaW4gIT0gbnVsbCkgeworICAgICAgICAgICAgaW5faWQgPSBhaW4uZ2V0SUQobVJTKTsKKyAgICAgICAgfQorICAgICAgICBsb25nIG91dF9pZCA9IDA7CisgICAgICAgIGlmIChhb3V0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG91dF9pZCA9IGFvdXQuZ2V0SUQobVJTKTsKKyAgICAgICAgfQorICAgICAgICBieXRlW10gcGFyYW1zID0gbnVsbDsKKyAgICAgICAgaWYgKHYgIT0gbnVsbCkgeworICAgICAgICAgICAgcGFyYW1zID0gdi5nZXREYXRhKCk7CisgICAgICAgIH0KKyAgICAgICAgbVJTLm5TY3JpcHRGb3JFYWNoQ2xpcHBlZChnZXRJRChtUlMpLCBzbG90LCBpbl9pZCwgb3V0X2lkLCBwYXJhbXMsIHNjLnhzdGFydCwgc2MueGVuZCwgc2MueXN0YXJ0LCBzYy55ZW5kLCBzYy56c3RhcnQsIHNjLnplbmQpOworICAgIH0KKworICAgIFNjcmlwdChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgc3VwZXIoaWQsIHJzKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIE9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBiaW5kQWxsb2NhdGlvbihBbGxvY2F0aW9uIHZhLCBpbnQgc2xvdCkgeworICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgaWYgKHZhICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChtUlMuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkuZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbiA+PSAyMCkgeworICAgICAgICAgICAgICAgIGZpbmFsIFR5cGUgdCA9IHZhLm1UeXBlOworICAgICAgICAgICAgICAgIGlmICh0Lmhhc01pcG1hcHMoKSB8fCB0Lmhhc0ZhY2VzKCkgfHwgKHQuZ2V0WSgpICE9IDApIHx8ICh0LmdldFooKSAhPSAwKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAiQVBJIDIwKyBvbmx5IGFsbG93cyBzaW1wbGUgMUQgYWxsb2NhdGlvbnMgdG8gYmUgdXNlZCB3aXRoIGJpbmQuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbVJTLm5TY3JpcHRCaW5kQWxsb2NhdGlvbihnZXRJRChtUlMpLCB2YS5nZXRJRChtUlMpLCBzbG90KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1SUy5uU2NyaXB0QmluZEFsbG9jYXRpb24oZ2V0SUQobVJTKSwgMCwgc2xvdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VmFyKGludCBpbmRleCwgZmxvYXQgdikgeworICAgICAgICBtUlMublNjcmlwdFNldFZhckYoZ2V0SUQobVJTKSwgaW5kZXgsIHYpOworICAgIH0KKyAgICBwdWJsaWMgZmxvYXQgZ2V0VmFyRihpbnQgaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIG1SUy5uU2NyaXB0R2V0VmFyRihnZXRJRChtUlMpLCBpbmRleCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFZhcihpbnQgaW5kZXgsIGRvdWJsZSB2KSB7CisgICAgICAgIG1SUy5uU2NyaXB0U2V0VmFyRChnZXRJRChtUlMpLCBpbmRleCwgdik7CisgICAgfQorICAgIHB1YmxpYyBkb3VibGUgZ2V0VmFyRChpbnQgaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIG1SUy5uU2NyaXB0R2V0VmFyRChnZXRJRChtUlMpLCBpbmRleCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFZhcihpbnQgaW5kZXgsIGludCB2KSB7CisgICAgICAgIG1SUy5uU2NyaXB0U2V0VmFySShnZXRJRChtUlMpLCBpbmRleCwgdik7CisgICAgfQorICAgIHB1YmxpYyBpbnQgZ2V0VmFySShpbnQgaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIG1SUy5uU2NyaXB0R2V0VmFySShnZXRJRChtUlMpLCBpbmRleCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VmFyKGludCBpbmRleCwgbG9uZyB2KSB7CisgICAgICAgIG1SUy5uU2NyaXB0U2V0VmFySihnZXRJRChtUlMpLCBpbmRleCwgdik7CisgICAgfQorICAgIHB1YmxpYyBsb25nIGdldFZhckooaW50IGluZGV4KSB7CisgICAgICAgIHJldHVybiBtUlMublNjcmlwdEdldFZhckooZ2V0SUQobVJTKSwgaW5kZXgpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFZhcihpbnQgaW5kZXgsIGJvb2xlYW4gdikgeworICAgICAgICBtUlMublNjcmlwdFNldFZhckkoZ2V0SUQobVJTKSwgaW5kZXgsIHYgPyAxIDogMCk7CisgICAgfQorICAgIHB1YmxpYyBib29sZWFuIGdldFZhckIoaW50IGluZGV4KSB7CisgICAgICAgIHJldHVybiBtUlMublNjcmlwdEdldFZhckkoZ2V0SUQobVJTKSwgaW5kZXgpID4gMCA/IHRydWUgOiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VmFyKGludCBpbmRleCwgQmFzZU9iaiBvKSB7CisgICAgICAgIG1SUy5uU2NyaXB0U2V0VmFyT2JqKGdldElEKG1SUyksIGluZGV4LCAobyA9PSBudWxsKSA/IDAgOiBvLmdldElEKG1SUykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRWYXIoaW50IGluZGV4LCBGaWVsZFBhY2tlciB2KSB7CisgICAgICAgIG1SUy5uU2NyaXB0U2V0VmFyVihnZXRJRChtUlMpLCBpbmRleCwgdi5nZXREYXRhKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRWYXIoaW50IGluZGV4LCBGaWVsZFBhY2tlciB2LCBFbGVtZW50IGUsIGludFtdIGRpbXMpIHsKKyAgICAgICAgbVJTLm5TY3JpcHRTZXRWYXJWRShnZXRJRChtUlMpLCBpbmRleCwgdi5nZXREYXRhKCksIGUuZ2V0SUQobVJTKSwgZGltcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGdldFZhclYoaW50IGluZGV4LCBGaWVsZFBhY2tlciB2KSB7CisgICAgICAgIG1SUy5uU2NyaXB0R2V0VmFyVihnZXRJRChtUlMpLCBpbmRleCwgdi5nZXREYXRhKCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFRpbWVab25lKFN0cmluZyB0aW1lWm9uZSkgeworICAgICAgICBtUlMudmFsaWRhdGUoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1SUy5uU2NyaXB0U2V0VGltZVpvbmUoZ2V0SUQobVJTKSwgdGltZVpvbmUuZ2V0Qnl0ZXMoIlVURi04IikpOworICAgICAgICB9IGNhdGNoIChqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgZ2VuZXJhdGVkIHJlZmxlY3RlZCBjb2RlLgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKKyAgICAgICAgUmVuZGVyU2NyaXB0IG1SUzsKKworICAgICAgICBCdWlsZGVyKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICAgICAgbVJTID0gcnM7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqIE9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieSBnZW5lcmF0ZWQgcmVmbGVjdGVkIGNvZGUuCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEZpZWxkQmFzZSB7CisgICAgICAgIHByb3RlY3RlZCBFbGVtZW50IG1FbGVtZW50OworICAgICAgICBwcm90ZWN0ZWQgQWxsb2NhdGlvbiBtQWxsb2NhdGlvbjsKKworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBpbml0KFJlbmRlclNjcmlwdCBycywgaW50IGRpbXgpIHsKKyAgICAgICAgICAgIG1BbGxvY2F0aW9uID0gQWxsb2NhdGlvbi5jcmVhdGVTaXplZChycywgbUVsZW1lbnQsIGRpbXgsIEFsbG9jYXRpb24uVVNBR0VfU0NSSVBUKTsKKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCB2b2lkIGluaXQoUmVuZGVyU2NyaXB0IHJzLCBpbnQgZGlteCwgaW50IHVzYWdlcykgeworICAgICAgICAgICAgbUFsbG9jYXRpb24gPSBBbGxvY2F0aW9uLmNyZWF0ZVNpemVkKHJzLCBtRWxlbWVudCwgZGlteCwgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQgfCB1c2FnZXMpOworICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIEZpZWxkQmFzZSgpIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQoKSB7CisgICAgICAgICAgICByZXR1cm4gbUVsZW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgVHlwZSBnZXRUeXBlKCkgeworICAgICAgICAgICAgcmV0dXJuIG1BbGxvY2F0aW9uLmdldFR5cGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBBbGxvY2F0aW9uIGdldEFsbG9jYXRpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gbUFsbG9jYXRpb247CisgICAgICAgIH0KKworICAgICAgICAvL0BPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVBbGxvY2F0aW9uKCkgeworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDbGFzcyB1c2VkIHRvIHNwZWNpZnkgY2xpcHBpbmcgZm9yIGEga2VybmVsIGxhdW5jaC4KKyAgICAgKgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgTGF1bmNoT3B0aW9ucyB7CisgICAgICAgIHByaXZhdGUgaW50IHhzdGFydCA9IDA7CisgICAgICAgIHByaXZhdGUgaW50IHlzdGFydCA9IDA7CisgICAgICAgIHByaXZhdGUgaW50IHhlbmQgPSAwOworICAgICAgICBwcml2YXRlIGludCB5ZW5kID0gMDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgenN0YXJ0ID0gMDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgemVuZCA9IDA7CisgICAgICAgIHByaXZhdGUgaW50IHN0cmF0ZWd5OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIFggcmFuZ2UuICBJZiB0aGUgZW5kIHZhbHVlIGlzIHNldCB0byAwIHRoZSBYIGRpbWVuc2lvbiBpcyBub3QKKyAgICAgICAgICogY2xpcHBlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHhzdGFydEFyZyBNdXN0IGJlID49IDAKKyAgICAgICAgICogQHBhcmFtIHhlbmRBcmcgTXVzdCBiZSA+PSB4c3RhcnRBcmcKKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBMYXVuY2hPcHRpb25zCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgTGF1bmNoT3B0aW9ucyBzZXRYKGludCB4c3RhcnRBcmcsIGludCB4ZW5kQXJnKSB7CisgICAgICAgICAgICBpZiAoeHN0YXJ0QXJnIDwgMCB8fCB4ZW5kQXJnIDw9IHhzdGFydEFyZykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4c3RhcnQgPSB4c3RhcnRBcmc7CisgICAgICAgICAgICB4ZW5kID0geGVuZEFyZzsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldCB0aGUgWSByYW5nZS4gIElmIHRoZSBlbmQgdmFsdWUgaXMgc2V0IHRvIDAgdGhlIFkgZGltZW5zaW9uIGlzIG5vdAorICAgICAgICAgKiBjbGlwcGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0geXN0YXJ0QXJnIE11c3QgYmUgPj0gMAorICAgICAgICAgKiBAcGFyYW0geWVuZEFyZyBNdXN0IGJlID49IHlzdGFydEFyZworICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIExhdW5jaE9wdGlvbnMKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBMYXVuY2hPcHRpb25zIHNldFkoaW50IHlzdGFydEFyZywgaW50IHllbmRBcmcpIHsKKyAgICAgICAgICAgIGlmICh5c3RhcnRBcmcgPCAwIHx8IHllbmRBcmcgPD0geXN0YXJ0QXJnKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHlzdGFydCA9IHlzdGFydEFyZzsKKyAgICAgICAgICAgIHllbmQgPSB5ZW5kQXJnOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0IHRoZSBaIHJhbmdlLiAgSWYgdGhlIGVuZCB2YWx1ZSBpcyBzZXQgdG8gMCB0aGUgWiBkaW1lbnNpb24gaXMgbm90CisgICAgICAgICAqIGNsaXBwZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB6c3RhcnRBcmcgTXVzdCBiZSA+PSAwCisgICAgICAgICAqIEBwYXJhbSB6ZW5kQXJnIE11c3QgYmUgPj0genN0YXJ0QXJnCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gTGF1bmNoT3B0aW9ucworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIExhdW5jaE9wdGlvbnMgc2V0WihpbnQgenN0YXJ0QXJnLCBpbnQgemVuZEFyZykgeworICAgICAgICAgICAgaWYgKHpzdGFydEFyZyA8IDAgfHwgemVuZEFyZyA8PSB6c3RhcnRBcmcpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgenN0YXJ0ID0genN0YXJ0QXJnOworICAgICAgICAgICAgemVuZCA9IHplbmRBcmc7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgWCBzdGFydAorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIGludCBjdXJyZW50IHZhbHVlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldFhTdGFydCgpIHsKKyAgICAgICAgICAgIHJldHVybiB4c3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgWCBlbmQKKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBpbnQgY3VycmVudCB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBnZXRYRW5kKCkgeworICAgICAgICAgICAgcmV0dXJuIHhlbmQ7CisgICAgICAgIH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgWSBzdGFydAorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIGludCBjdXJyZW50IHZhbHVlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldFlTdGFydCgpIHsKKyAgICAgICAgICAgIHJldHVybiB5c3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgWSBlbmQKKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBpbnQgY3VycmVudCB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBnZXRZRW5kKCkgeworICAgICAgICAgICAgcmV0dXJuIHllbmQ7CisgICAgICAgIH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgWiBzdGFydAorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIGludCBjdXJyZW50IHZhbHVlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldFpTdGFydCgpIHsKKyAgICAgICAgICAgIHJldHVybiB6c3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgWiBlbmQKKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBpbnQgY3VycmVudCB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGludCBnZXRaRW5kKCkgeworICAgICAgICAgICAgcmV0dXJuIHplbmQ7CisgICAgICAgIH0KKworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRDLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzk3OWY2Ci0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRDLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworCisvKioKKyAqIFRoZSBzdXBlcmNsYXNzIGZvciBhbGwgdXNlci1kZWZpbmVkIHNjcmlwdHMuIFRoaXMgaXMgb25seQorICogaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB0aGUgZ2VuZXJhdGVkIGRlcml2ZWQgY2xhc3Nlcy4KKyAqKi8KK3B1YmxpYyBjbGFzcyBTY3JpcHRDIGV4dGVuZHMgU2NyaXB0IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlNjcmlwdEMiOworCisgICAgLyoqCisgICAgICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IHRoZSBnZW5lcmF0ZWQgZGVyaXZlZCBjbGFzc2VzLgorICAgICAqCisgICAgICogQHBhcmFtIGlkCisgICAgICogQHBhcmFtIHJzCisgICAgICovCisgICAgcHJvdGVjdGVkIFNjcmlwdEMoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgc3VwZXIoaWQsIHJzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPbmx5IGludGVuZGVkIGZvciB1c2UgYnkgdGhlIGdlbmVyYXRlZCBkZXJpdmVkIGNsYXNzZXMuCisgICAgICoKKyAgICAgKgorICAgICAqIEBwYXJhbSBycworICAgICAqIEBwYXJhbSByZXNvdXJjZXMKKyAgICAgKiBAcGFyYW0gcmVzb3VyY2VJRAorICAgICAqLworICAgIHByb3RlY3RlZCBTY3JpcHRDKFJlbmRlclNjcmlwdCBycywgUmVzb3VyY2VzIHJlc291cmNlcywgaW50IHJlc291cmNlSUQpIHsKKyAgICAgICAgc3VwZXIoMCwgcnMpOworICAgICAgICBpbnQgaWQgPSBpbnRlcm5hbENyZWF0ZShycywgcmVzb3VyY2VzLCByZXNvdXJjZUlEKTsKKyAgICAgICAgaWYgKGlkID09IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIkxvYWRpbmcgb2YgU2NyaXB0QyBzY3JpcHQgZmFpbGVkLiIpOworICAgICAgICB9CisgICAgICAgIHNldElEKGlkKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOYW1lIG9mIHRoZSBmaWxlIHRoYXQgaG9sZHMgdGhlIG9iamVjdCBjYWNoZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FDSEVfUEFUSCA9ICJjb20uYW5kcm9pZC5yZW5kZXJzY3JpcHQuY2FjaGUiOworCisgICAgc3RhdGljIFN0cmluZyBtQ2FjaGVQYXRoOworCisgICAgcHJpdmF0ZSBzdGF0aWMgc3luY2hyb25pemVkIGludCBpbnRlcm5hbENyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIFJlc291cmNlcyByZXNvdXJjZXMsIGludCByZXNvdXJjZUlEKSB7CisgICAgICAgIGJ5dGVbXSBwZ207CisgICAgICAgIGludCBwZ21MZW5ndGg7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gcmVzb3VyY2VzLm9wZW5SYXdSZXNvdXJjZShyZXNvdXJjZUlEKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcGdtID0gbmV3IGJ5dGVbMTAyNF07CisgICAgICAgICAgICAgICAgcGdtTGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBieXRlc0xlZnQgPSBwZ20ubGVuZ3RoIC0gcGdtTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZXNMZWZ0ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBidWYyID0gbmV3IGJ5dGVbcGdtLmxlbmd0aCAqIDJdOworICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShwZ20sIDAsIGJ1ZjIsIDAsIHBnbS5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgcGdtID0gYnVmMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzTGVmdCA9IHBnbS5sZW5ndGggLSBwZ21MZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGlzLnJlYWQocGdtLCBwZ21MZW5ndGgsIGJ5dGVzTGVmdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChieXRlc1JlYWQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGdtTGVuZ3RoICs9IGJ5dGVzUmVhZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHJlc05hbWUgPSByZXNvdXJjZXMuZ2V0UmVzb3VyY2VFbnRyeU5hbWUocmVzb3VyY2VJRCk7CisKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBSUyBjYWNoZSBwYXRoIGlmIHdlIGhhdmVuJ3QgZG9uZSBzbyBhbHJlYWR5LgorICAgICAgICBpZiAobUNhY2hlUGF0aCA9PSBudWxsKSB7CisgICAgICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShycy5tQ2FjaGVEaXIsIENBQ0hFX1BBVEgpOworICAgICAgICAgICAgbUNhY2hlUGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCk7CisgICAgICAgICAgICBmLm1rZGlycygpOworICAgICAgICB9CisgICAgICAgIC8vICAgICAgICBMb2cudihUQUcsICJDcmVhdGUgc2NyaXB0IGZvciByZXNvdXJjZSA9ICIgKyByZXNOYW1lKTsKKyAgICAgICAgcmV0dXJuIHJzLm5TY3JpcHRDQ3JlYXRlKHJlc05hbWUsIG1DYWNoZVBhdGgsIHBnbSwgcGdtTGVuZ3RoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFhNzI3MwotLS0gL2Rldi9udWxsCisrKyBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0R3JvdXAuamF2YQpAQCAtMCwwICsxLDQ3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCisvKioKKyAqIFNjcmlwdEdyb3VwIGNyZWF0ZXMgYSBncm91cCBvZiBrZXJuZWxzIHRoYXQgYXJlIGV4ZWN1dGVkCisgKiB0b2dldGhlciB3aXRoIG9uZSBleGVjdXRpb24gY2FsbCBhcyBpZiB0aGV5IHdlcmUgYSBzaW5nbGUga2VybmVsLgorICogVGhlIGtlcm5lbHMgbWF5IGJlIGNvbm5lY3RlZCBpbnRlcm5hbGx5IG9yIHRvIGFuIGV4dGVybmFsIGFsbG9jYXRpb24uCisgKiBUaGUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgZm9yIGludGVybmFsIGNvbm5lY3Rpb25zIGFyZSBub3Qgb2JzZXJ2YWJsZQorICogYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgc2NyaXB0LgorICogPHA+CisgKiBFeHRlcm5hbCBjb25uZWN0aW9ucyBhcmUgZ3JvdXBlZCBpbnRvIGlucHV0cyBhbmQgb3V0cHV0cy4KKyAqIEFsbCBvdXRwdXRzIGFyZSBwcm9kdWNlZCBieSBhIHNjcmlwdCBrZXJuZWwgYW5kIHBsYWNlZCBpbnRvIGEKKyAqIHVzZXItc3VwcGxpZWQgYWxsb2NhdGlvbi4gSW5wdXRzIHByb3ZpZGUgdGhlIGlucHV0IG9mIGEga2VybmVsLgorICogSW5wdXRzIGJvdW5kIHRvIHNjcmlwdCBnbG9iYWxzIGFyZSBzZXQgZGlyZWN0bHkgdXBvbiB0aGUgc2NyaXB0LgorICogPHA+CisgKiBBIFNjcmlwdEdyb3VwIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUga2VybmVsLiBBIFNjcmlwdEdyb3VwCisgKiBtdXN0IGNvbnRhaW4gb25seSBhIHNpbmdsZSBkaXJlY3RlZCBhY3ljbGljIGdyYXBoIChEQUcpIG9mCisgKiBzY3JpcHQga2VybmVscyBhbmQgY29ubmVjdGlvbnMuIEF0dGVtcHRpbmcgdG8gY3JlYXRlIGEKKyAqIFNjcmlwdEdyb3VwIHdpdGggbXVsdGlwbGUgREFHcyBvciBhdHRlbXB0aW5nIHRvIGNyZWF0ZQorICogYSBjeWNsZSB3aXRoaW4gYSBTY3JpcHRHcm91cCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KKyAqIDxwPgorICogQ3VycmVudGx5LCBhbGwga2VybmVscyBpbiBhIFNjcmlwdEdyb3VwIG11c3QgYmUgZnJvbSBzZXBhcmF0ZQorICogU2NyaXB0IG9iamVjdHMuIEF0dGVtcHRpbmcgdG8gdXNlIG11bHRpcGxlIGtlcm5lbHMgZnJvbSB0aGUgc2FtZQorICogU2NyaXB0IG9iamVjdCB3aWxsIHJlc3VsdCBpbiBhbiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUlNJbnZhbGlkU3RhdGVFeGNlcHRpb259LgorICoKKyAqKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRHcm91cCBleHRlbmRzIEJhc2VPYmogeworICAgIElPIG1PdXRwdXRzW107CisgICAgSU8gbUlucHV0c1tdOworCisgICAgc3RhdGljIGNsYXNzIElPIHsKKyAgICAgICAgU2NyaXB0Lktlcm5lbElEIG1LSUQ7CisgICAgICAgIEFsbG9jYXRpb24gbUFsbG9jYXRpb247CisKKyAgICAgICAgSU8oU2NyaXB0Lktlcm5lbElEIHMpIHsKKyAgICAgICAgICAgIG1LSUQgPSBzOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIENvbm5lY3RMaW5lIHsKKyAgICAgICAgQ29ubmVjdExpbmUoVHlwZSB0LCBTY3JpcHQuS2VybmVsSUQgZnJvbSwgU2NyaXB0Lktlcm5lbElEIHRvKSB7CisgICAgICAgICAgICBtRnJvbSA9IGZyb207CisgICAgICAgICAgICBtVG9LID0gdG87CisgICAgICAgICAgICBtQWxsb2NhdGlvblR5cGUgPSB0OworICAgICAgICB9CisKKyAgICAgICAgQ29ubmVjdExpbmUoVHlwZSB0LCBTY3JpcHQuS2VybmVsSUQgZnJvbSwgU2NyaXB0LkZpZWxkSUQgdG8pIHsKKyAgICAgICAgICAgIG1Gcm9tID0gZnJvbTsKKyAgICAgICAgICAgIG1Ub0YgPSB0bzsKKyAgICAgICAgICAgIG1BbGxvY2F0aW9uVHlwZSA9IHQ7CisgICAgICAgIH0KKworICAgICAgICBTY3JpcHQuRmllbGRJRCBtVG9GOworICAgICAgICBTY3JpcHQuS2VybmVsSUQgbVRvSzsKKyAgICAgICAgU2NyaXB0Lktlcm5lbElEIG1Gcm9tOworICAgICAgICBUeXBlIG1BbGxvY2F0aW9uVHlwZTsKKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgTm9kZSB7CisgICAgICAgIFNjcmlwdCBtU2NyaXB0OworICAgICAgICBBcnJheUxpc3Q8U2NyaXB0Lktlcm5lbElEPiBtS2VybmVscyA9IG5ldyBBcnJheUxpc3Q8U2NyaXB0Lktlcm5lbElEPigpOworICAgICAgICBBcnJheUxpc3Q8Q29ubmVjdExpbmU+IG1JbnB1dHMgPSBuZXcgQXJyYXlMaXN0PENvbm5lY3RMaW5lPigpOworICAgICAgICBBcnJheUxpc3Q8Q29ubmVjdExpbmU+IG1PdXRwdXRzID0gbmV3IEFycmF5TGlzdDxDb25uZWN0TGluZT4oKTsKKyAgICAgICAgaW50IGRhZ051bWJlcjsKKworICAgICAgICBOb2RlIG1OZXh0OworCisgICAgICAgIE5vZGUoU2NyaXB0IHMpIHsKKyAgICAgICAgICAgIG1TY3JpcHQgPSBzOworICAgICAgICB9CisgICAgfQorCisKKyAgICBTY3JpcHRHcm91cChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgc3VwZXIoaWQsIHJzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGlucHV0IG9mIHRoZSBTY3JpcHRHcm91cC4gVGhpcyBzcGVjaWZpZXMgYW4KKyAgICAgKiBBbGxvY2F0aW9uIHRvIGJlIHVzZWQgZm9yIGtlcm5lbHMgdGhhdCByZXF1aXJlIGFuIGlucHV0CisgICAgICogQWxsb2NhdGlvbiBwcm92aWRlZCBmcm9tIG91dHNpZGUgb2YgdGhlIFNjcmlwdEdyb3VwLgorICAgICAqCisgICAgICogQHBhcmFtIHMgVGhlIElEIG9mIHRoZSBrZXJuZWwgd2hlcmUgdGhlIGFsbG9jYXRpb24gc2hvdWxkIGJlCisgICAgICogICAgICAgICAgY29ubmVjdGVkLgorICAgICAqIEBwYXJhbSBhIFRoZSBhbGxvY2F0aW9uIHRvIGNvbm5lY3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SW5wdXQoU2NyaXB0Lktlcm5lbElEIHMsIEFsbG9jYXRpb24gYSkgeworICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IG1JbnB1dHMubGVuZ3RoOyBjdCsrKSB7CisgICAgICAgICAgICBpZiAobUlucHV0c1tjdF0ubUtJRCA9PSBzKSB7CisgICAgICAgICAgICAgICAgbUlucHV0c1tjdF0ubUFsbG9jYXRpb24gPSBhOworICAgICAgICAgICAgICAgIG1SUy5uU2NyaXB0R3JvdXBTZXRJbnB1dChnZXRJRChtUlMpLCBzLmdldElEKG1SUyksIG1SUy5zYWZlSUQoYSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNjcmlwdCBub3QgZm91bmQiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIG91dHB1dCBvZiB0aGUgU2NyaXB0R3JvdXAuIFRoaXMgc3BlY2lmaWVzIGFuCisgICAgICogQWxsb2NhdGlvbiB0byBiZSB1c2VkIGZvciB0aGUga2VybmVscyB0aGF0IHJlcXVpcmUgYW4gb3V0cHV0CisgICAgICogQWxsb2NhdGlvbiB2aXNpYmxlIGFmdGVyIHRoZSBTY3JpcHRHcm91cCBpcyBleGVjdXRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzIFRoZSBJRCBvZiB0aGUga2VybmVsIHdoZXJlIHRoZSBhbGxvY2F0aW9uIHNob3VsZCBiZQorICAgICAqICAgICAgICAgIGNvbm5lY3RlZC4KKyAgICAgKiBAcGFyYW0gYSBUaGUgYWxsb2NhdGlvbiB0byBjb25uZWN0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE91dHB1dChTY3JpcHQuS2VybmVsSUQgcywgQWxsb2NhdGlvbiBhKSB7CisgICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgbU91dHB1dHMubGVuZ3RoOyBjdCsrKSB7CisgICAgICAgICAgICBpZiAobU91dHB1dHNbY3RdLm1LSUQgPT0gcykgeworICAgICAgICAgICAgICAgIG1PdXRwdXRzW2N0XS5tQWxsb2NhdGlvbiA9IGE7CisgICAgICAgICAgICAgICAgbVJTLm5TY3JpcHRHcm91cFNldE91dHB1dChnZXRJRChtUlMpLCBzLmdldElEKG1SUyksIG1SUy5zYWZlSUQoYSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNjcmlwdCBub3QgZm91bmQiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBTY3JpcHRHcm91cC4gIFRoaXMgd2lsbCBydW4gYWxsIHRoZSBrZXJuZWxzIGluCisgICAgICogdGhlIFNjcmlwdEdyb3VwLiAgTm8gaW50ZXJuYWwgY29ubmVjdGlvbiByZXN1bHRzIHdpbGwgYmUgdmlzaWJsZQorICAgICAqIGFmdGVyIGV4ZWN1dGlvbiBvZiB0aGUgU2NyaXB0R3JvdXAuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKKyAgICAgICAgbVJTLm5TY3JpcHRHcm91cEV4ZWN1dGUoZ2V0SUQobVJTKSk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBIZWxwZXIgY2xhc3MgdG8gYnVpbGQgYSBTY3JpcHRHcm91cC4gQSBTY3JpcHRHcm91cCBpcworICAgICAqIGNyZWF0ZWQgaW4gdHdvIHN0ZXBzLgorICAgICAqIDxwPgorICAgICAqIEZpcnN0LCBhbGwga2VybmVscyB0byBiZSB1c2VkIGJ5IHRoZSBTY3JpcHRHcm91cCBzaG91bGQgYmUgYWRkZWQuCisgICAgICogPHA+CisgICAgICogU2Vjb25kLCBhZGQgY29ubmVjdGlvbnMgYmV0d2VlbiBrZXJuZWxzLiBUaGVyZSBhcmUgdHdvIHR5cGVzCisgICAgICogb2YgY29ubmVjdGlvbnM6IGtlcm5lbCB0byBrZXJuZWwgYW5kIGtlcm5lbCB0byBmaWVsZC4KKyAgICAgKiBLZXJuZWwgdG8ga2VybmVsIGFsbG93cyBhIGtlcm5lbCdzIG91dHB1dCB0byBiZSBwYXNzZWQgdG8KKyAgICAgKiBhbm90aGVyIGtlcm5lbCBhcyBpbnB1dC4gS2VybmVsIHRvIGZpZWxkIGFsbG93cyB0aGUgb3V0cHV0IG9mCisgICAgICogb25lIGtlcm5lbCB0byBiZSBib3VuZCBhcyBhIHNjcmlwdCBnbG9iYWwuIEtlcm5lbCB0byBrZXJuZWwgaXMKKyAgICAgKiBoaWdoZXIgcGVyZm9ybWFuY2UgYW5kIHNob3VsZCBiZSB1c2VkIHdoZXJlIHBvc3NpYmxlLgorICAgICAqIDxwPgorICAgICAqIEEgU2NyaXB0R3JvdXAgbXVzdCBjb250YWluIGEgc2luZ2xlIGRpcmVjdGVkIGFjeWNsaWMgZ3JhcGggKERBRyk7IGl0CisgICAgICogY2Fubm90IGNvbnRhaW4gY3ljbGVzLiBDdXJyZW50bHksIGFsbCBrZXJuZWxzIHVzZWQgaW4gYSBTY3JpcHRHcm91cAorICAgICAqIG11c3QgY29tZSBmcm9tIGRpZmZlcmVudCBTY3JpcHQgb2JqZWN0cy4gQWRkaXRpb25hbGx5LCBhbGwga2VybmVscworICAgICAqIGluIGEgU2NyaXB0R3JvdXAgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBpbnB1dCwgb3V0cHV0LCBvciBpbnRlcm5hbAorICAgICAqIGNvbm5lY3Rpb24uCisgICAgICogPHA+CisgICAgICogT25jZSBhbGwgY29ubmVjdGlvbnMgYXJlIG1hZGUsIGEgY2FsbCB0byB7QGxpbmsgI2NyZWF0ZX0gd2lsbAorICAgICAqIHJldHVybiB0aGUgU2NyaXB0R3JvdXAgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBCdWlsZGVyIHsKKyAgICAgICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHQgbVJTOworICAgICAgICBwcml2YXRlIEFycmF5TGlzdDxOb2RlPiBtTm9kZXMgPSBuZXcgQXJyYXlMaXN0PE5vZGU+KCk7CisgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0PENvbm5lY3RMaW5lPiBtTGluZXMgPSBuZXcgQXJyYXlMaXN0PENvbm5lY3RMaW5lPigpOworICAgICAgICBwcml2YXRlIGludCBtS2VybmVsQ291bnQ7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZSBhIEJ1aWxkZXIgZm9yIGdlbmVyYXRpbmcgYSBTY3JpcHRHcm91cC4KKyAgICAgICAgICoKKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHJzIFRoZSBSZW5kZXJTY3JpcHQgY29udGV4dC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICAgICAgbVJTID0gcnM7CisgICAgICAgIH0KKworICAgICAgICAvLyBkbyBhIERGUyBmcm9tIG9yaWdpbmFsIG5vZGUsIGxvb2tpbmcgZm9yIG9yaWdpbmFsIG5vZGUKKyAgICAgICAgLy8gYW55IGN5Y2xlIHRoYXQgY291bGQgYmUgY3JlYXRlZCBtdXN0IGNvbnRhaW4gb3JpZ2luYWwgbm9kZQorICAgICAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVDeWNsZShOb2RlIHRhcmdldCwgTm9kZSBvcmlnaW5hbCkgeworICAgICAgICAgICAgZm9yIChpbnQgY3QgPSAwOyBjdCA8IHRhcmdldC5tT3V0cHV0cy5zaXplKCk7IGN0KyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBDb25uZWN0TGluZSBjbCA9IHRhcmdldC5tT3V0cHV0cy5nZXQoY3QpOworICAgICAgICAgICAgICAgIGlmIChjbC5tVG9LICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSB0biA9IGZpbmROb2RlKGNsLm1Ub0subVNjcmlwdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bi5lcXVhbHMob3JpZ2luYWwpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkxvb3BzIGluIGdyb3VwIG5vdCBhbGxvd2VkLiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQ3ljbGUodG4sIG9yaWdpbmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNsLm1Ub0YgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBOb2RlIHRuID0gZmluZE5vZGUoY2wubVRvRi5tU2NyaXB0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRuLmVxdWFscyhvcmlnaW5hbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiTG9vcHMgaW4gZ3JvdXAgbm90IGFsbG93ZWQuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVDeWNsZSh0biwgb3JpZ2luYWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBtZXJnZURBR3MoaW50IHZhbHVlVXNlZCwgaW50IHZhbHVlS2lsbGVkKSB7CisgICAgICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IG1Ob2Rlcy5zaXplKCk7IGN0KyspIHsKKyAgICAgICAgICAgICAgICBpZiAobU5vZGVzLmdldChjdCkuZGFnTnVtYmVyID09IHZhbHVlS2lsbGVkKQorICAgICAgICAgICAgICAgICAgICBtTm9kZXMuZ2V0KGN0KS5kYWdOdW1iZXIgPSB2YWx1ZVVzZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVEQUdSZWN1cnNlKE5vZGUgbiwgaW50IGRhZ051bWJlcikgeworICAgICAgICAgICAgLy8gY29tYmluZSBEQUdzIGlmIHRoaXMgbm9kZSBoYXMgYmVlbiBzZWVuIGFscmVhZHkKKyAgICAgICAgICAgIGlmIChuLmRhZ051bWJlciAhPSAwICYmIG4uZGFnTnVtYmVyICE9IGRhZ051bWJlcikgeworICAgICAgICAgICAgICAgIG1lcmdlREFHcyhuLmRhZ051bWJlciwgZGFnTnVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG4uZGFnTnVtYmVyID0gZGFnTnVtYmVyOworICAgICAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBuLm1PdXRwdXRzLnNpemUoKTsgY3QrKykgeworICAgICAgICAgICAgICAgIGZpbmFsIENvbm5lY3RMaW5lIGNsID0gbi5tT3V0cHV0cy5nZXQoY3QpOworICAgICAgICAgICAgICAgIGlmIChjbC5tVG9LICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSB0biA9IGZpbmROb2RlKGNsLm1Ub0subVNjcmlwdCk7CisgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlREFHUmVjdXJzZSh0biwgZGFnTnVtYmVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNsLm1Ub0YgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBOb2RlIHRuID0gZmluZE5vZGUoY2wubVRvRi5tU2NyaXB0KTsKKyAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVEQUdSZWN1cnNlKHRuLCBkYWdOdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZURBRygpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgbU5vZGVzLnNpemUoKTsgY3QrKykgeworICAgICAgICAgICAgICAgIE5vZGUgbiA9IG1Ob2Rlcy5nZXQoY3QpOworICAgICAgICAgICAgICAgIGlmIChuLm1JbnB1dHMuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4ubU91dHB1dHMuc2l6ZSgpID09IDAgJiYgbU5vZGVzLnNpemUoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiR3JvdXBzIGNhbm5vdCBjb250YWluIHVuY29ubmVjdGVkIHNjcmlwdHMiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZURBR1JlY3Vyc2UobiwgY3QrMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGRhZ051bWJlciA9IG1Ob2Rlcy5nZXQoMCkuZGFnTnVtYmVyOworICAgICAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBtTm9kZXMuc2l6ZSgpOyBjdCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1Ob2Rlcy5nZXQoY3QpLmRhZ051bWJlciAhPSBkYWdOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJNdWx0aXBsZSBEQUdzIGluIGdyb3VwIG5vdCBhbGxvd2VkLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgTm9kZSBmaW5kTm9kZShTY3JpcHQgcykgeworICAgICAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBtTm9kZXMuc2l6ZSgpOyBjdCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHMgPT0gbU5vZGVzLmdldChjdCkubVNjcmlwdCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbU5vZGVzLmdldChjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIE5vZGUgZmluZE5vZGUoU2NyaXB0Lktlcm5lbElEIGspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgbU5vZGVzLnNpemUoKTsgY3QrKykgeworICAgICAgICAgICAgICAgIE5vZGUgbiA9IG1Ob2Rlcy5nZXQoY3QpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGN0Mj0wOyBjdDIgPCBuLm1LZXJuZWxzLnNpemUoKTsgY3QyKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT0gbi5tS2VybmVscy5nZXQoY3QyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBBZGRzIGEgS2VybmVsIHRvIHRoZSBncm91cC4KKyAgICAgICAgICoKKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGsgVGhlIGtlcm5lbCB0byBhZGQuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gQnVpbGRlciBSZXR1cm5zIHRoaXMuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRLZXJuZWwoU2NyaXB0Lktlcm5lbElEIGspIHsKKyAgICAgICAgICAgIGlmIChtTGluZXMuc2l6ZSgpICE9IDApIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJLZXJuZWxzIG1heSBub3QgYmUgYWRkZWQgb25jZSBjb25uZWN0aW9ucyBleGlzdC4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9hbmRyb2lkLnV0aWwuTG9nLnYoIlJTUiIsICJhZGRLZXJuZWwgMSBrPSIgKyBrKTsKKyAgICAgICAgICAgIGlmIChmaW5kTm9kZShrKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL2FuZHJvaWQudXRpbC5Mb2cudigiUlNSIiwgImFkZEtlcm5lbCAyICIpOworICAgICAgICAgICAgbUtlcm5lbENvdW50Kys7CisgICAgICAgICAgICBOb2RlIG4gPSBmaW5kTm9kZShrLm1TY3JpcHQpOworICAgICAgICAgICAgaWYgKG4gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vYW5kcm9pZC51dGlsLkxvZy52KCJSU1IiLCAiYWRkS2VybmVsIDMgIik7CisgICAgICAgICAgICAgICAgbiA9IG5ldyBOb2RlKGsubVNjcmlwdCk7CisgICAgICAgICAgICAgICAgbU5vZGVzLmFkZChuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG4ubUtlcm5lbHMuYWRkKGspOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQWRkcyBhIGNvbm5lY3Rpb24gdG8gdGhlIGdyb3VwLgorICAgICAgICAgKgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gdCBUaGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbi4gVGhpcyBpcyB1c2VkIHRvCisgICAgICAgICAqICAgICAgICAgIGRldGVybWluZSB0aGUga2VybmVsIGxhdW5jaCBzaXplcyBvbiB0aGUgc291cmNlIHNpZGUKKyAgICAgICAgICogICAgICAgICAgb2YgdGhpcyBjb25uZWN0aW9uLgorICAgICAgICAgKiBAcGFyYW0gZnJvbSBUaGUgc291cmNlIGZvciB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgICogQHBhcmFtIHRvIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBCdWlsZGVyIFJldHVybnMgdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkQ29ubmVjdGlvbihUeXBlIHQsIFNjcmlwdC5LZXJuZWxJRCBmcm9tLCBTY3JpcHQuRmllbGRJRCB0bykgeworICAgICAgICAgICAgLy9hbmRyb2lkLnV0aWwuTG9nLnYoIlJTUiIsICJhZGRDb25uZWN0aW9uICIgKyB0ICsiLCAiICsgZnJvbSArICIsICIgKyB0byk7CisKKyAgICAgICAgICAgIE5vZGUgbmYgPSBmaW5kTm9kZShmcm9tKTsKKyAgICAgICAgICAgIGlmIChuZiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJGcm9tIHNjcmlwdCBub3QgZm91bmQuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE5vZGUgbnQgPSBmaW5kTm9kZSh0by5tU2NyaXB0KTsKKyAgICAgICAgICAgIGlmIChudCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJUbyBzY3JpcHQgbm90IGZvdW5kLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDb25uZWN0TGluZSBjbCA9IG5ldyBDb25uZWN0TGluZSh0LCBmcm9tLCB0byk7CisgICAgICAgICAgICBtTGluZXMuYWRkKG5ldyBDb25uZWN0TGluZSh0LCBmcm9tLCB0bykpOworCisgICAgICAgICAgICBuZi5tT3V0cHV0cy5hZGQoY2wpOworICAgICAgICAgICAgbnQubUlucHV0cy5hZGQoY2wpOworCisgICAgICAgICAgICB2YWxpZGF0ZUN5Y2xlKG5mLCBuZik7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBBZGRzIGEgY29ubmVjdGlvbiB0byB0aGUgZ3JvdXAuCisgICAgICAgICAqCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB0IFRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uLiBUaGlzIGlzIHVzZWQgdG8KKyAgICAgICAgICogICAgICAgICAgZGV0ZXJtaW5lIHRoZSBrZXJuZWwgbGF1bmNoIHNpemVzIGZvciBib3RoIHNpZGVzIG9mCisgICAgICAgICAqICAgICAgICAgIHRoaXMgY29ubmVjdGlvbi4KKyAgICAgICAgICogQHBhcmFtIGZyb20gVGhlIHNvdXJjZSBmb3IgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgICAqIEBwYXJhbSB0byBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gQnVpbGRlciBSZXR1cm5zIHRoaXMKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZENvbm5lY3Rpb24oVHlwZSB0LCBTY3JpcHQuS2VybmVsSUQgZnJvbSwgU2NyaXB0Lktlcm5lbElEIHRvKSB7CisgICAgICAgICAgICAvL2FuZHJvaWQudXRpbC5Mb2cudigiUlNSIiwgImFkZENvbm5lY3Rpb24gIiArIHQgKyIsICIgKyBmcm9tICsgIiwgIiArIHRvKTsKKworICAgICAgICAgICAgTm9kZSBuZiA9IGZpbmROb2RlKGZyb20pOworICAgICAgICAgICAgaWYgKG5mID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkZyb20gc2NyaXB0IG5vdCBmb3VuZC4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTm9kZSBudCA9IGZpbmROb2RlKHRvKTsKKyAgICAgICAgICAgIGlmIChudCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJUbyBzY3JpcHQgbm90IGZvdW5kLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDb25uZWN0TGluZSBjbCA9IG5ldyBDb25uZWN0TGluZSh0LCBmcm9tLCB0byk7CisgICAgICAgICAgICBtTGluZXMuYWRkKG5ldyBDb25uZWN0TGluZSh0LCBmcm9tLCB0bykpOworCisgICAgICAgICAgICBuZi5tT3V0cHV0cy5hZGQoY2wpOworICAgICAgICAgICAgbnQubUlucHV0cy5hZGQoY2wpOworCisgICAgICAgICAgICB2YWxpZGF0ZUN5Y2xlKG5mLCBuZik7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisKKworICAgICAgICAvKioKKyAgICAgICAgICogQ3JlYXRlcyB0aGUgU2NyaXB0IGdyb3VwLgorICAgICAgICAgKgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIFNjcmlwdEdyb3VwIFRoZSBuZXcgU2NyaXB0R3JvdXAKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTY3JpcHRHcm91cCBjcmVhdGUoKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyBicm9rZW4gZm9yIDY0LWJpdAorCisgICAgICAgICAgICBpZiAobU5vZGVzLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJFbXB0eSBzY3JpcHQgZ3JvdXBzIGFyZSBub3QgYWxsb3dlZCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyByZXNldCBEQUcgbnVtYmVycyBpbiBjYXNlIHdlJ3JlIGJ1aWxkaW5nIGEgc2Vjb25kIGdyb3VwCisgICAgICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IG1Ob2Rlcy5zaXplKCk7IGN0KyspIHsKKyAgICAgICAgICAgICAgICBtTm9kZXMuZ2V0KGN0KS5kYWdOdW1iZXIgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsaWRhdGVEQUcoKTsKKworICAgICAgICAgICAgQXJyYXlMaXN0PElPPiBpbnB1dHMgPSBuZXcgQXJyYXlMaXN0PElPPigpOworICAgICAgICAgICAgQXJyYXlMaXN0PElPPiBvdXRwdXRzID0gbmV3IEFycmF5TGlzdDxJTz4oKTsKKworICAgICAgICAgICAgaW50W10ga2VybmVscyA9IG5ldyBpbnRbbUtlcm5lbENvdW50XTsKKyAgICAgICAgICAgIGludCBpZHggPSAwOworICAgICAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBtTm9kZXMuc2l6ZSgpOyBjdCsrKSB7CisgICAgICAgICAgICAgICAgTm9kZSBuID0gbU5vZGVzLmdldChjdCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY3QyPTA7IGN0MiA8IG4ubUtlcm5lbHMuc2l6ZSgpOyBjdDIrKykgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBTY3JpcHQuS2VybmVsSUQga2lkID0gbi5tS2VybmVscy5nZXQoY3QyKTsKKyAgICAgICAgICAgICAgICAgICAga2VybmVsc1tpZHgrK10gPSAoaW50KWtpZC5nZXRJRChtUlMpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaGFzSW5wdXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBoYXNPdXRwdXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY3QzPTA7IGN0MyA8IG4ubUlucHV0cy5zaXplKCk7IGN0MysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi5tSW5wdXRzLmdldChjdDMpLm1Ub0sgPT0ga2lkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW5wdXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGN0Mz0wOyBjdDMgPCBuLm1PdXRwdXRzLnNpemUoKTsgY3QzKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLm1PdXRwdXRzLmdldChjdDMpLm1Gcm9tID09IGtpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc091dHB1dCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNJbnB1dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzLmFkZChuZXcgSU8oa2lkKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNPdXRwdXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYWRkKG5ldyBJTyhraWQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlkeCAhPSBtS2VybmVsQ291bnQpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJDb3VudCBtaXNtYXRjaCwgc2hvdWxkIG5vdCBoYXBwZW4uIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludFtdIHNyYyA9IG5ldyBpbnRbbUxpbmVzLnNpemUoKV07CisgICAgICAgICAgICBpbnRbXSBkc3RrID0gbmV3IGludFttTGluZXMuc2l6ZSgpXTsKKyAgICAgICAgICAgIGludFtdIGRzdGYgPSBuZXcgaW50W21MaW5lcy5zaXplKCldOworICAgICAgICAgICAgaW50W10gdHlwZXMgPSBuZXcgaW50W21MaW5lcy5zaXplKCldOworCisgICAgICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IG1MaW5lcy5zaXplKCk7IGN0KyspIHsKKyAgICAgICAgICAgICAgICBDb25uZWN0TGluZSBjbCA9IG1MaW5lcy5nZXQoY3QpOworICAgICAgICAgICAgICAgIHNyY1tjdF0gPSAoaW50KWNsLm1Gcm9tLmdldElEKG1SUyk7CisgICAgICAgICAgICAgICAgaWYgKGNsLm1Ub0sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBkc3RrW2N0XSA9IChpbnQpY2wubVRvSy5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2wubVRvRiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGRzdGZbY3RdID0gKGludCljbC5tVG9GLmdldElEKG1SUyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHR5cGVzW2N0XSA9IChpbnQpY2wubUFsbG9jYXRpb25UeXBlLmdldElEKG1SUyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvbmcgaWQgPSBtUlMublNjcmlwdEdyb3VwQ3JlYXRlKGtlcm5lbHMsIHNyYywgZHN0aywgZHN0ZiwgdHlwZXMpOworICAgICAgICAgICAgaWYgKGlkID09IDApIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJPYmplY3QgY3JlYXRpb24gZXJyb3IsIHNob3VsZCBub3QgaGFwcGVuLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTY3JpcHRHcm91cCBzZyA9IG5ldyBTY3JpcHRHcm91cChpZCwgbVJTKTsKKyAgICAgICAgICAgIHNnLm1PdXRwdXRzID0gbmV3IElPW291dHB1dHMuc2l6ZSgpXTsKKyAgICAgICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgb3V0cHV0cy5zaXplKCk7IGN0KyspIHsKKyAgICAgICAgICAgICAgICBzZy5tT3V0cHV0c1tjdF0gPSBvdXRwdXRzLmdldChjdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNnLm1JbnB1dHMgPSBuZXcgSU9baW5wdXRzLnNpemUoKV07CisgICAgICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IGlucHV0cy5zaXplKCk7IGN0KyspIHsKKyAgICAgICAgICAgICAgICBzZy5tSW5wdXRzW2N0XSA9IGlucHV0cy5nZXQoY3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gc2c7CisgICAgICAgIH0KKworICAgIH0KKworCit9CisKKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWMuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcxOWUwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYy5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisvKioKKyAqIEJhc2UgY2xhc3MgZm9yIGFsbCBJbnRyaW5zaWMgc2NyaXB0cy4gQW4gaW50cmluc2ljIGEgc2NyaXB0CisgKiB3aGljaCBpbXBsZW1lbnRzIGEgcHJlLWRlZmluZWQgZnVuY3Rpb24uIEludHJpbnNpY3MgYXJlCisgKiBwcm92aWRlZCB0byBwcm92aWRlIGVmZmVjaWVudCBpbXBsZW10YXRpb25zIG9mIGNvbW1vbgorICogb3BlcmF0aW9ucy4KKyAqCisgKiBOb3QgaW50ZW5kZWQgZm9yIGRpcmVjdCB1c2UuCisgKiovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2NyaXB0SW50cmluc2ljIGV4dGVuZHMgU2NyaXB0IHsKKyAgICBTY3JpcHRJbnRyaW5zaWMobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIHN1cGVyKGlkLCBycyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWMzRExVVC5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWMzRExVVC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMTQ5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYzNETFVULmphdmEKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisvKioKKyAqCisgKiBJbnRyaW5zaWMgZm9yIGNvbnZlcnRpbmcgUkdCIHRvIFJHQkEgYnkgdXNpbmcgYSAzRCBsb29rdXAgdGFibGUuICBUaGUKKyAqIGluY29taW5nIHIsZyxiIHZhbHVlcyBhcmUgdXNlIGFzIG5vcm1hbGl6ZWQgeCx5LHogY29vcmRpbmF0ZXMgaW50byBhIDNECisgKiBhbGxvY2F0aW9uLiAgVGhlIDggbmVhcmVzdCB2YWx1ZXMgYXJlIHNhbXBsZWQgYW5kIGxpbmVhcmx5IGludGVycG9sYXRlZC4gIFRoZQorICogcmVzdWx0IGlzIHBsYWNlZCBpbiB0aGUgb3V0cHV0LgorICoKKyAqKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRJbnRyaW5zaWMzRExVVCBleHRlbmRzIFNjcmlwdEludHJpbnNpYyB7CisgICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1MVVQ7CisgICAgcHJpdmF0ZSBFbGVtZW50IG1FbGVtZW50OworCisgICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWMzRExVVChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSkgeworICAgICAgICBzdXBlcihpZCwgcnMpOworICAgICAgICBtRWxlbWVudCA9IGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3VwcG9ydGVkIGVsZW1lbnRzIHR5cGVzIGFyZSB7QGxpbmsgRWxlbWVudCNVOF80fQorICAgICAqCisgICAgICogVGhlIGRlZmF1bHRzIHRhYmxlcyBhcmUgaWRlbnRpdHkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgVGhlIFJlbmRlclNjcmlwdCBjb250ZXh0CisgICAgICogQHBhcmFtIGUgRWxlbWVudCB0eXBlIGZvciBpbnRwdXRzIGFuZCBvdXRwdXRzCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdEludHJpbnNpYzNETFVUCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTY3JpcHRJbnRyaW5zaWMzRExVVCBjcmVhdGUoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUpIHsKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoOCwgZS5nZXRJRChycykpOworCisgICAgICAgIGlmICghZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KHJzKSkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB1Y2hhcjQuIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3IFNjcmlwdEludHJpbnNpYzNETFVUKGlkLCBycywgZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb259IHRvIGJlIHVzZWQgYXMgdGhlIGxvb2t1cCB0YWJsZS4KKyAgICAgKgorICAgICAqIFRoZSBsb29rdXAgdGFibGUgbXVzdCB1c2UgdGhlIHNhbWUge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnR9IGFzIHRoZSBpbnRyaW5zaWMuCisgICAgICoKKyAgICAgKi8KKworICAgIHB1YmxpYyB2b2lkIHNldExVVChBbGxvY2F0aW9uIGx1dCkgeworICAgICAgICBmaW5hbCBUeXBlIHQgPSBsdXQuZ2V0VHlwZSgpOworCisgICAgICAgIGlmICh0LmdldFooKSA9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkxVVCBtdXN0IGJlIDNkLiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0LmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUobUVsZW1lbnQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkxVVCBlbGVtZW50IHR5cGUgbXVzdCBtYXRjaC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIG1MVVQgPSBsdXQ7CisgICAgICAgIHNldFZhcigwLCBtTFVUKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIEludm9rZSB0aGUga2VybmVsIGFuZCBhcHBseSB0aGUgbG9va3VwIHRvIGVhY2ggY2VsbCBvZiBhaW4KKyAgICAgKiBhbmQgY29weSB0byBhb3V0LgorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBJbnB1dCBhbGxvY2F0aW9uCisgICAgICogQHBhcmFtIGFvdXQgT3V0cHV0IGFsbG9jYXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgZm9yRWFjaChhaW4sIGFvdXQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEludm9rZSB0aGUga2VybmVsIGFuZCBhcHBseSB0aGUgbG9va3VwIHRvIGVhY2ggY2VsbCBvZiBhaW4KKyAgICAgKiBhbmQgY29weSB0byBhb3V0LgorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBJbnB1dCBhbGxvY2F0aW9uCisgICAgICogQHBhcmFtIGFvdXQgT3V0cHV0IGFsbG9jYXRpb24KKyAgICAgKiBAcGFyYW0gb3B0IExhdW5jaCBvcHRpb25zIGZvciBrZXJuZWwKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQsIFNjcmlwdC5MYXVuY2hPcHRpb25zIG9wdCkgeworICAgICAgICBmb3JFYWNoKDAsIGFpbiwgYW91dCwgbnVsbCwgb3B0KTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGlzIGludHJpbnNpYyBrZXJuZWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSUQoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCgwLCAzLCBudWxsLCBudWxsKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQmxlbmQuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQmxlbmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDAzOGMyCi0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNCbGVuZC5qYXZhCkBAIC0wLDAgKzEsNjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKKworCisvKioKKyAqIEludHJpbnNpYyBrZXJuZWxzIGZvciBibGVuZGluZyB0d28ge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb259IG9iamVjdHMuCisgKiovCitwdWJsaWMgY2xhc3MgU2NyaXB0SW50cmluc2ljQmxlbmQgZXh0ZW5kcyBTY3JpcHRJbnRyaW5zaWMgeworICAgIFNjcmlwdEludHJpbnNpY0JsZW5kKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBzdXBlcihpZCwgcnMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN1cHBvcnRlZCBlbGVtZW50cyB0eXBlcyBhcmUge0BsaW5rIEVsZW1lbnQjVThfNH0KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBUaGUgUmVuZGVyU2NyaXB0IGNvbnRleHQKKyAgICAgKiBAcGFyYW0gZSBFbGVtZW50IHR5cGUgZm9yIGlucHV0cyBhbmQgb3V0cHV0cworICAgICAqCisgICAgICogQHJldHVybiBTY3JpcHRJbnRyaW5zaWNCbGVuZAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljQmxlbmQgY3JlYXRlKFJlbmRlclNjcmlwdCBycywgRWxlbWVudCBlKSB7CisgICAgICAgIC8vIDcgY29tZXMgZnJvbSBSU19TQ1JJUFRfSU5UUklOU0lDX0lEX0JMRU5EIGluIHJzRGVmaW5lcy5oCisgICAgICAgIGxvbmcgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDcsIGUuZ2V0SUQocnMpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRJbnRyaW5zaWNCbGVuZChpZCwgcnMpOworCisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGJsZW5kKGludCBpZCwgQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCwgU2NyaXB0LkxhdW5jaE9wdGlvbnMgb3B0KSB7CisgICAgICAgIGlmICghYWluLmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KG1SUykpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklucHV0IGlzIG5vdCBvZiBleHBlY3RlZCBmb3JtYXQuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFhb3V0LmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KG1SUykpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk91dHB1dCBpcyBub3Qgb2YgZXhwZWN0ZWQgZm9ybWF0LiIpOworICAgICAgICB9CisgICAgICAgIGZvckVhY2goaWQsIGFpbiwgYW91dCwgbnVsbCwgb3B0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGRzdCA9IHswLCAwLCAwLCAwfQorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoQ2xlYXIoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBmb3JFYWNoQ2xlYXIoYWluLCBhb3V0LCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGRzdCA9IHswLCAwLCAwLCAwfQorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgKiBAcGFyYW0gb3B0IExhdW5jaE9wdGlvbnMgZm9yIGNsaXBwaW5nCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yRWFjaENsZWFyKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQsIFNjcmlwdC5MYXVuY2hPcHRpb25zIG9wdCkgeworICAgICAgICBibGVuZCgwLCBhaW4sIGFvdXQsIG9wdCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoZSBDbGVhciBrZXJuZWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURDbGVhcigpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDAsIDMsIG51bGwsIG51bGwpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogU2V0cyBkc3QgPSBzcmMKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yRWFjaFNyYyhBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGZvckVhY2hTcmMoYWluLCBhb3V0LCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGRzdCA9IHNyYworICAgICAqCisgICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgKiBAcGFyYW0gb3B0IExhdW5jaE9wdGlvbnMgZm9yIGNsaXBwaW5nCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yRWFjaFNyYyhBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0LCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgZm9yRWFjaERzdChhaW4sIGFvdXQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgU3JjIGtlcm5lbC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRFNyYygpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDEsIDMsIG51bGwsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgZHN0ID0gZHN0CisgICAgICoKKyAgICAgKiBUaGlzIGlzIGEgTk9QLgorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoRHN0KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgLy8gTk9QCisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyBkc3QgPSBkc3QKKyAgICAgKgorICAgICAqIFRoaXMgaXMgYSBOT1AuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBzb3VyY2UgYnVmZmVyCisgICAgICogQHBhcmFtIGFvdXQgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBvcHQgTGF1bmNoT3B0aW9ucyBmb3IgY2xpcHBpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoRHN0KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQsIFNjcmlwdC5MYXVuY2hPcHRpb25zIG9wdCkgeworICAgICAgICAvLyBOLCBvcHRPUAorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgRHN0IGtlcm5lbC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRERzdCgpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDIsIDMsIG51bGwsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgZHN0ID0gc3JjICsgZHN0ICogKDEuMCAtIHNyYy5hKQorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoU3JjT3ZlcihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGZvckVhY2hTcmNPdmVyKGFpbiwgYW91dCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyBkc3QgPSBzcmMgKyBkc3QgKiAoMS4wIC0gc3JjLmEpCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBzb3VyY2UgYnVmZmVyCisgICAgICogQHBhcmFtIGFvdXQgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBvcHQgTGF1bmNoT3B0aW9ucyBmb3IgY2xpcHBpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoU3JjT3ZlcihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0LCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgYmxlbmQoMywgYWluLCBhb3V0LCBvcHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgU3JjT3ZlciBrZXJuZWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURTcmNPdmVyKCkgeworICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoMywgMywgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyBkc3QgPSBkc3QgKyBzcmMgKiAoMS4wIC0gZHN0LmEpCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBzb3VyY2UgYnVmZmVyCisgICAgICogQHBhcmFtIGFvdXQgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hEc3RPdmVyKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgZm9yRWFjaERzdE92ZXIoYWluLCBhb3V0LCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGRzdCA9IGRzdCArIHNyYyAqICgxLjAgLSBkc3QuYSkKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hEc3RPdmVyKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQsIFNjcmlwdC5MYXVuY2hPcHRpb25zIG9wdCkgeworICAgICAgICBibGVuZCg0LCBhaW4sIGFvdXQsIG9wdCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoZSBEc3RPdmVyIGtlcm5lbC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRERzdE92ZXIoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCg0LCAzLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGRzdCA9IHNyYyAqIGRzdC5hCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBzb3VyY2UgYnVmZmVyCisgICAgICogQHBhcmFtIGFvdXQgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hTcmNJbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGZvckVhY2hTcmNJbihhaW4sIGFvdXQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgZHN0ID0gc3JjICogZHN0LmEKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hTcmNJbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0LCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgYmxlbmQoNSwgYWluLCBhb3V0LCBvcHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgU3JjSW4ga2VybmVsLgorICAgICAqCisgICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEU3JjSW4oKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCg1LCAzLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGRzdCA9IGRzdCAqIHNyYy5hCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBzb3VyY2UgYnVmZmVyCisgICAgICogQHBhcmFtIGFvdXQgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hEc3RJbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGZvckVhY2hEc3RJbihhaW4sIGFvdXQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgZHN0ID0gZHN0ICogc3JjLmEKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hEc3RJbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0LCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgYmxlbmQoNiwgYWluLCBhb3V0LCBvcHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgRHN0SW4ga2VybmVsLgorICAgICAqCisgICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElERHN0SW4oKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCg2LCAzLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGRzdCA9IHNyYyAqICgxLjAgLSBkc3QuYSkKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yRWFjaFNyY091dChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGZvckVhY2hTcmNPdXQoYWluLCBhb3V0LCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGRzdCA9IHNyYyAqICgxLjAgLSBkc3QuYSkKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hTcmNPdXQoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCwgU2NyaXB0LkxhdW5jaE9wdGlvbnMgb3B0KSB7CisgICAgICAgIGJsZW5kKDcsIGFpbiwgYW91dCwgb3B0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhlIFNyY091dCBrZXJuZWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURTcmNPdXQoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCg3LCAzLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGRzdCA9IGRzdCAqICgxLjAgLSBzcmMuYSkKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yRWFjaERzdE91dChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGZvckVhY2hEc3RPdXQoYWluLCBhb3V0LCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGRzdCA9IGRzdCAqICgxLjAgLSBzcmMuYSkKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hEc3RPdXQoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCwgU2NyaXB0LkxhdW5jaE9wdGlvbnMgb3B0KSB7CisgICAgICAgIGJsZW5kKDgsIGFpbiwgYW91dCwgb3B0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhlIERzdE91dCBrZXJuZWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSUREc3RPdXQoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCg4LCAzLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBkc3QucmdiID0gc3JjLnJnYiAqIGRzdC5hICsgKDEuMCAtIHNyYy5hKSAqIGRzdC5yZ2IKKyAgICAgKiBkc3QuYSA9IGRzdC5hCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBzb3VyY2UgYnVmZmVyCisgICAgICogQHBhcmFtIGFvdXQgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hTcmNBdG9wKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgZm9yRWFjaFNyY0F0b3AoYWluLCBhb3V0LCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBkc3QucmdiID0gc3JjLnJnYiAqIGRzdC5hICsgKDEuMCAtIHNyYy5hKSAqIGRzdC5yZ2IKKyAgICAgKiBkc3QuYSA9IGRzdC5hCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBzb3VyY2UgYnVmZmVyCisgICAgICogQHBhcmFtIGFvdXQgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBvcHQgTGF1bmNoT3B0aW9ucyBmb3IgY2xpcHBpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoU3JjQXRvcChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0LCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgYmxlbmQoOSwgYWluLCBhb3V0LCBvcHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgU3JjQXRvcCBrZXJuZWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURTcmNBdG9wKCkgeworICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoOSwgMywgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogZHN0ID0gZHN0LnJnYiAqIHNyYy5hICsgKDEuMCAtIGRzdC5hKSAqIHNyYy5yZ2IKKyAgICAgKiBkc3QuYSA9IHNyYy5hCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBzb3VyY2UgYnVmZmVyCisgICAgICogQHBhcmFtIGFvdXQgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hEc3RBdG9wKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgZm9yRWFjaERzdEF0b3AoYWluLCBhb3V0LCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBkc3QgPSBkc3QucmdiICogc3JjLmEgKyAoMS4wIC0gZHN0LmEpICogc3JjLnJnYgorICAgICAqIGRzdC5hID0gc3JjLmEKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hEc3RBdG9wKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQsIFNjcmlwdC5MYXVuY2hPcHRpb25zIG9wdCkgeworICAgICAgICBibGVuZCgxMCwgYWluLCBhb3V0LCBvcHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgRHN0QXRvcCBrZXJuZWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSUREc3RBdG9wKCkgeworICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoMTAsIDMsIG51bGwsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgZHN0ID0ge3NyYy5yIF4gZHN0LnIsIHNyYy5nIF4gZHN0LmcsIHNyYy5iIF4gZHN0LmIsIHNyYy5hIF4gZHN0LmF9CisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBzb3VyY2UgYnVmZmVyCisgICAgICogQHBhcmFtIGFvdXQgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hYb3IoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBmb3JFYWNoWG9yKGFpbiwgYW91dCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyBkc3QgPSB7c3JjLnIgXiBkc3Quciwgc3JjLmcgXiBkc3QuZywgc3JjLmIgXiBkc3QuYiwgc3JjLmEgXiBkc3QuYX0KKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hYb3IoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCwgU2NyaXB0LkxhdW5jaE9wdGlvbnMgb3B0KSB7CisgICAgICAgIGJsZW5kKDExLCBhaW4sIGFvdXQsIG9wdCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoZSBYb3Iga2VybmVsLgorICAgICAqCisgICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEWG9yKCkgeworICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoMTEsIDMsIG51bGwsIG51bGwpOworICAgIH0KKworICAgIC8vLy8vLy8vCisvKgorICAgIHB1YmxpYyB2b2lkIGZvckVhY2hOb3JtYWwoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBibGVuZCgxMiwgYWluLCBhb3V0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoQXZlcmFnZShBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGJsZW5kKDEzLCBhaW4sIGFvdXQpOworICAgIH0KKyovCisgICAgLyoqCisgICAgICogU2V0cyBkc3QgPSBzcmMgKiBkc3QKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yRWFjaE11bHRpcGx5KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgZm9yRWFjaE11bHRpcGx5KGFpbiwgYW91dCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyBkc3QgPSBzcmMgKiBkc3QKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIHNvdXJjZSBidWZmZXIKKyAgICAgKiBAcGFyYW0gYW91dCBUaGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hNdWx0aXBseShBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0LCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgYmxlbmQoMTQsIGFpbiwgYW91dCwgb3B0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhlIE11bHRpcGx5IGtlcm5lbC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRE11bHRpcGx5KCkgeworICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoMTQsIDMsIG51bGwsIG51bGwpOworICAgIH0KKworLyoKKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoU2NyZWVuKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgYmxlbmQoMTUsIGFpbiwgYW91dCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9yRWFjaERhcmtlbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGJsZW5kKDE2LCBhaW4sIGFvdXQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hMaWdodGVuKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgYmxlbmQoMTcsIGFpbiwgYW91dCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9yRWFjaE92ZXJsYXkoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBibGVuZCgxOCwgYWluLCBhb3V0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoSGFyZGxpZ2h0KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgYmxlbmQoMTksIGFpbiwgYW91dCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9yRWFjaFNvZnRsaWdodChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGJsZW5kKDIwLCBhaW4sIGFvdXQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hEaWZmZXJlbmNlKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgYmxlbmQoMjEsIGFpbiwgYW91dCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9yRWFjaE5lZ2F0aW9uKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgYmxlbmQoMjIsIGFpbiwgYW91dCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9yRWFjaEV4Y2x1c2lvbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGJsZW5kKDIzLCBhaW4sIGFvdXQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hDb2xvckRvZGdlKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgYmxlbmQoMjQsIGFpbiwgYW91dCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9yRWFjaEludmVyc2VDb2xvckRvZGdlKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgYmxlbmQoMjUsIGFpbiwgYW91dCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9yRWFjaFNvZnREb2RnZShBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGJsZW5kKDI2LCBhaW4sIGFvdXQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hDb2xvckJ1cm4oQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBibGVuZCgyNywgYWluLCBhb3V0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoSW52ZXJzZUNvbG9yQnVybihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGJsZW5kKDI4LCBhaW4sIGFvdXQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hTb2Z0QnVybihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGJsZW5kKDI5LCBhaW4sIGFvdXQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hSZWZsZWN0KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgYmxlbmQoMzAsIGFpbiwgYW91dCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9yRWFjaEdsb3coQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBibGVuZCgzMSwgYWluLCBhb3V0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoRnJlZXplKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgYmxlbmQoMzIsIGFpbiwgYW91dCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZm9yRWFjaEhlYXQoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBibGVuZCgzMywgYWluLCBhb3V0KTsKKyAgICB9CisqLworICAgIC8qKgorICAgICAqIFNldHMgZHN0ID0gbWluKHNyYyArIGRzdCwgMS4wKQorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoQWRkKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgZm9yRWFjaEFkZChhaW4sIGFvdXQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgZHN0ID0gbWluKHNyYyArIGRzdCwgMS4wKQorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgKiBAcGFyYW0gb3B0IExhdW5jaE9wdGlvbnMgZm9yIGNsaXBwaW5nCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yRWFjaEFkZChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0LCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgYmxlbmQoMzQsIGFpbiwgYW91dCwgb3B0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhlIEFkZCBrZXJuZWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSURBZGQoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCgzNCwgMywgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyBkc3QgPSBtYXgoZHN0IC0gc3JjLCAwLjApCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBzb3VyY2UgYnVmZmVyCisgICAgICogQHBhcmFtIGFvdXQgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hTdWJ0cmFjdChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGZvckVhY2hTdWJ0cmFjdChhaW4sIGFvdXQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgZHN0ID0gbWF4KGRzdCAtIHNyYywgMC4wKQorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBUaGUgc291cmNlIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBhb3V0IFRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgKiBAcGFyYW0gb3B0IExhdW5jaE9wdGlvbnMgZm9yIGNsaXBwaW5nCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yRWFjaFN1YnRyYWN0KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQsIFNjcmlwdC5MYXVuY2hPcHRpb25zIG9wdCkgeworICAgICAgICBibGVuZCgzNSwgYWluLCBhb3V0LCBvcHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGUgU3VidHJhY3Qga2VybmVsLgorICAgICAqCisgICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEU3VidHJhY3QoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCgzNSwgMywgbnVsbCwgbnVsbCk7CisgICAgfQorCisvKgorICAgIHB1YmxpYyB2b2lkIGZvckVhY2hTdGFtcChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGJsZW5kKDM2LCBhaW4sIGFvdXQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hSZWQoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBibGVuZCgzNywgYWluLCBhb3V0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoR3JlZW4oQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBibGVuZCgzOCwgYWluLCBhb3V0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoQmx1ZShBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGJsZW5kKDM5LCBhaW4sIGFvdXQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hIdWUoQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBibGVuZCg0MCwgYWluLCBhb3V0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoU2F0dXJhdGlvbihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGJsZW5kKDQxLCBhaW4sIGFvdXQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hDb2xvcihBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0KSB7CisgICAgICAgIGJsZW5kKDQyLCBhaW4sIGFvdXQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hMdW1pbm9zaXR5KEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgYmxlbmQoNDMsIGFpbiwgYW91dCk7CisgICAgfQorKi8KK30KKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNCbHVyLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0JsdXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2UzM2I4Ci0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNCbHVyLmphdmEKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisvKioKKyAqIEludHJpbnNpYyBHYXVzaWFuIGJsdXIgZmlsdGVyLiBBcHBsaWVzIGEgZ2F1c3NpYW4gYmx1ciBvZiB0aGUKKyAqIHNwZWNpZmllZCByYWRpdXMgdG8gYWxsIGVsZW1lbnRzIG9mIGFuIGFsbG9jYXRpb24uCisgKgorICoKKyAqKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRJbnRyaW5zaWNCbHVyIGV4dGVuZHMgU2NyaXB0SW50cmluc2ljIHsKKyAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVZhbHVlcyA9IG5ldyBmbG9hdFs5XTsKKyAgICBwcml2YXRlIEFsbG9jYXRpb24gbUlucHV0OworCisgICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWNCbHVyKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBzdXBlcihpZCwgcnMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhbiBpbnRyaW5zaWMgZm9yIGFwcGx5aW5nIGEgYmx1ciB0byBhbiBhbGxvY2F0aW9uLiBUaGUKKyAgICAgKiBkZWZhdWx0IHJhZGl1cyBpcyA1LjAuCisgICAgICoKKyAgICAgKiBTdXBwb3J0ZWQgZWxlbWVudHMgdHlwZXMgYXJlIHtAbGluayBFbGVtZW50I1U4XzR9CisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgVGhlIFJlbmRlclNjcmlwdCBjb250ZXh0CisgICAgICogQHBhcmFtIGUgRWxlbWVudCB0eXBlIGZvciBpbnB1dHMgYW5kIG91dHB1dHMKKyAgICAgKgorICAgICAqIEByZXR1cm4gU2NyaXB0SW50cmluc2ljQmx1cgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljQmx1ciBjcmVhdGUoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUpIHsKKyAgICAgICAgaWYgKCghZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KHJzKSkpICYmICghZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOChycykpKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnN1cG9ydGVkIGVsZW1lbnQgdHlwZS4iKTsKKyAgICAgICAgfQorICAgICAgICBsb25nIGlkID0gcnMublNjcmlwdEludHJpbnNpY0NyZWF0ZSg1LCBlLmdldElEKHJzKSk7CisgICAgICAgIFNjcmlwdEludHJpbnNpY0JsdXIgc2liID0gbmV3IFNjcmlwdEludHJpbnNpY0JsdXIoaWQsIHJzKTsKKyAgICAgICAgc2liLnNldFJhZGl1cyg1LmYpOworICAgICAgICByZXR1cm4gc2liOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgaW5wdXQgb2YgdGhlIGJsdXIuCisgICAgICogTXVzdCBtYXRjaCB0aGUgZWxlbWVudCB0eXBlIHN1cHBsaWVkIGR1cmluZyBjcmVhdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBpbnB1dCBhbGxvY2F0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SW5wdXQoQWxsb2NhdGlvbiBhaW4pIHsKKyAgICAgICAgbUlucHV0ID0gYWluOworICAgICAgICBzZXRWYXIoMSwgYWluKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHJhZGl1cyBvZiB0aGUgQmx1ci4KKyAgICAgKgorICAgICAqIFN1cHBvcnRlZCByYW5nZSAwIDwgcmFkaXVzIDw9IDI1CisgICAgICoKKyAgICAgKiBAcGFyYW0gcmFkaXVzIFRoZSByYWRpdXMgb2YgdGhlIGJsdXIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRSYWRpdXMoZmxvYXQgcmFkaXVzKSB7CisgICAgICAgIGlmIChyYWRpdXMgPD0gMCB8fCByYWRpdXMgPiAyNSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSYWRpdXMgb3V0IG9mIHJhbmdlICgwIDwgciA8PSAyNSkuIik7CisgICAgICAgIH0KKyAgICAgICAgc2V0VmFyKDAsIHJhZGl1cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwbHkgdGhlIGZpbHRlciB0byB0aGUgaW5wdXQgYW5kIHNhdmUgdG8gdGhlIHNwZWNpZmllZAorICAgICAqIGFsbG9jYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYW91dCBPdXRwdXQgYWxsb2NhdGlvbi4gTXVzdCBtYXRjaCBjcmVhdGlvbiBlbGVtZW50CisgICAgICogICAgICAgICAgICAgdHlwZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoKEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBmb3JFYWNoKGFvdXQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGx5IHRoZSBmaWx0ZXIgdG8gdGhlIGlucHV0IGFuZCBzYXZlIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBhbGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGFvdXQgT3V0cHV0IGFsbG9jYXRpb24uIE11c3QgbWF0Y2ggY3JlYXRpb24gZWxlbWVudAorICAgICAqICAgICAgICAgICAgIHR5cGUuCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2goQWxsb2NhdGlvbiBhb3V0LCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgZm9yRWFjaCgwLCBudWxsLCBhb3V0LCBudWxsLCBvcHQpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoaXMgaW50cmluc2ljIGtlcm5lbC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRCgpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDAsIDIsIG51bGwsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEZpZWxkSUQgZm9yIHRoZSBpbnB1dCBmaWVsZCBvZiB0aGlzIGludHJpbnNpYy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gU2NyaXB0LkZpZWxkSUQgVGhlIEZpZWxkSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuRmllbGRJRCBnZXRGaWVsZElEX0lucHV0KCkgeworICAgICAgICByZXR1cm4gY3JlYXRlRmllbGRJRCgxLCBudWxsKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXguamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2Q5MTdjCi0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeC5qYXZhCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKKworLyoqCisgKiBJbnRyaW5zaWMgZm9yIGFwcGx5aW5nIGEgY29sb3IgbWF0cml4IHRvIGFsbG9jYXRpb25zLgorICoKKyAqIElmIHRoZSBlbGVtZW50IHR5cGUgaXMge0BsaW5rIEVsZW1lbnQuRGF0YVR5cGUjVU5TSUdORURfOH0sCisgKiBpdCBpcyBjb252ZXJ0ZWQgdG8ge0BsaW5rIEVsZW1lbnQuRGF0YVR5cGUjRkxPQVRfMzJ9IGFuZAorICogbm9ybWFsaXplZCBmcm9tICgwLTI1NSkgdG8gKDAtMSkuIElmIHRoZSBpbmNvbWluZyB2ZWN0b3Igc2l6ZQorICogaXMgbGVzcyB0aGFuIGZvdXIsIGEge0BsaW5rIEVsZW1lbnQjRjMyXzR9IGlzIGNyZWF0ZWQgYnkKKyAqIGZpbGxpbmcgdGhlIG1pc3NpbmcgdmVjdG9yIGNoYW5uZWxzIHdpdGggemVyby4gVGhpcyB2YWx1ZSBpcworICogdGhlbiBtdWx0aXBsaWVkIGJ5IHRoZSA0eDQgY29sb3IgbWF0cml4IGFzIHBlcmZvcm1lZCBieQorICogcnNNYXRyaXhNdWx0aXBseSgpLCBhZGRpbmcgYSB7QGxpbmsgRWxlbWVudCNGMzJfNH0sIGFuZCB0aGVuCisgKiB3cml0aW5nIGl0IHRvIHRoZSBvdXRwdXQge0BsaW5rIEFsbG9jYXRpb259LgorICoKKyAqIElmIHRoZSBvdXB0dXQgdHlwZSBpcyB1bnNpZ25lZCwgdGhlIHZhbHVlIGlzIG5vcm1hbGl6ZWQgZnJvbQorICogKDAtMSkgdG8gKDAtMjU1KSBhbmQgY29udmVydGVkLiBJZiB0aGUgb3V0cHV0IHZlY3RvciBzaXplIGlzCisgKiBsZXNzIHRoYW4gZm91ciwgdGhlIHVudXNlZCBjaGFubmVscyBhcmUgZGlzY2FyZGVkLgorICoKKyAqIFN1cHBvcnRlZCBlbGVtZW50cyB0eXBlcyBhcmUge0BsaW5rIEVsZW1lbnQjVTh9LCB7QGxpbmsKKyAqIEVsZW1lbnQjVThfMn0sIHtAbGluayBFbGVtZW50I1U4XzN9LCB7QGxpbmsgRWxlbWVudCNVOF80fSwKKyAqIHtAbGluayBFbGVtZW50I0YzMn0sIHtAbGluayBFbGVtZW50I0YzMl8yfSwge0BsaW5rCisgKiBFbGVtZW50I0YzMl8zfSwgYW5kIHtAbGluayBFbGVtZW50I0YzMl80fS4KKyAqKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeCBleHRlbmRzIFNjcmlwdEludHJpbnNpYyB7CisgICAgcHJpdmF0ZSBmaW5hbCBNYXRyaXg0ZiBtTWF0cml4ID0gbmV3IE1hdHJpeDRmKCk7CisgICAgcHJpdmF0ZSBmaW5hbCBGbG9hdDQgbUFkZCA9IG5ldyBGbG9hdDQoKTsKKworICAgIHByaXZhdGUgU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXgobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIHN1cGVyKGlkLCBycyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIGludHJpbnNpYyBmb3IgYXBwbHlpbmcgYSBjb2xvciBtYXRyaXggdG8gYW4KKyAgICAgKiBhbGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHJzIFRoZSBSZW5kZXJTY3JpcHQgY29udGV4dAorICAgICAqIEBwYXJhbSBlIEVsZW1lbnQgdHlwZSBmb3IgaW5wdXRzIGFuZCBvdXRwdXRzLCBBcyBvZiBBUEkgMTksCisgICAgICogICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gVGhlIEVsZW1lbnQgdHlwZSBjaGVjayBpcworICAgICAqICAgICAgICAgIHBlcmZvcm1lZCBpbiB0aGUga2VybmVsIGxhdW5jaC4KKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgc2luZ2xlIGFyZ3VtZW50IHZlcnNpb24gYXMgRWxlbWVudCBpcyBub3cKKyAgICAgKiAgICAgICAgICAgICBpZ25vcmVkLgorICAgICAqCisgICAgICogQHJldHVybiBTY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeAorICAgICAqLworICAgIEBEZXByZWNhdGVkCisgICAgcHVibGljIHN0YXRpYyBTY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeCBjcmVhdGUoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShycyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIGludHJpbnNpYyBmb3IgYXBwbHlpbmcgYSBjb2xvciBtYXRyaXggdG8gYW4KKyAgICAgKiBhbGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHJzIFRoZSBSZW5kZXJTY3JpcHQgY29udGV4dAorICAgICAqCisgICAgICogQHJldHVybiBTY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXggY3JlYXRlKFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBsb25nIGlkID0gcnMublNjcmlwdEludHJpbnNpY0NyZWF0ZSgyLCAwKTsKKyAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeChpZCwgcnMpOworCisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldE1hdHJpeCgpIHsKKyAgICAgICAgRmllbGRQYWNrZXIgZnAgPSBuZXcgRmllbGRQYWNrZXIoMTYqNCk7CisgICAgICAgIGZwLmFkZE1hdHJpeChtTWF0cml4KTsKKyAgICAgICAgc2V0VmFyKDAsIGZwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGNvbG9yIG1hdHJpeCB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBjZWxsIG9mCisgICAgICogdGhlIGltYWdlLgorICAgICAqCisgICAgICogQHBhcmFtIG0gVGhlIDR4NCBtYXRyaXggdG8gc2V0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvbG9yTWF0cml4KE1hdHJpeDRmIG0pIHsKKyAgICAgICAgbU1hdHJpeC5sb2FkKG0pOworICAgICAgICBzZXRNYXRyaXgoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGNvbG9yIG1hdHJpeCB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBjZWxsIG9mIHRoZSBpbWFnZS4KKyAgICAgKiBUaGlzIHdpbGwgc2V0IHRoZSBhbHBoYSBjaGFubmVsIHRvIGJlIGEgY29weS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtIFRoZSAzeDMgbWF0cml4IHRvIHNldC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb2xvck1hdHJpeChNYXRyaXgzZiBtKSB7CisgICAgICAgIG1NYXRyaXgubG9hZChtKTsKKyAgICAgICAgc2V0TWF0cml4KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSB0byBiZSBhZGRlZCBhZnRlciB0aGUgY29sb3IgbWF0cml4IGhhcyBiZWVuCisgICAgICogYXBwbGllZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgezAsIDAsIDAsIDB9CisgICAgICoKKyAgICAgKiBAcGFyYW0gZiBUaGUgZmxvYXQ0IHZhbHVlIHRvIGJlIGFkZGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEFkZChGbG9hdDQgZikgeworICAgICAgICBtQWRkLnggPSBmLng7CisgICAgICAgIG1BZGQueSA9IGYueTsKKyAgICAgICAgbUFkZC56ID0gZi56OworICAgICAgICBtQWRkLncgPSBmLnc7CisKKyAgICAgICAgRmllbGRQYWNrZXIgZnAgPSBuZXcgRmllbGRQYWNrZXIoNCo0KTsKKyAgICAgICAgZnAuYWRkRjMyKGYueCk7CisgICAgICAgIGZwLmFkZEYzMihmLnkpOworICAgICAgICBmcC5hZGRGMzIoZi56KTsKKyAgICAgICAgZnAuYWRkRjMyKGYudyk7CisgICAgICAgIHNldFZhcigxLCBmcCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSB0byBiZSBhZGRlZCBhZnRlciB0aGUgY29sb3IgbWF0cml4IGhhcyBiZWVuCisgICAgICogYXBwbGllZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgezAsIDAsIDAsIDB9CisgICAgICoKKyAgICAgKiBAcGFyYW0gciBUaGUgcmVkIGFkZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gZyBUaGUgZ3JlZW4gYWRkIHZhbHVlLgorICAgICAqIEBwYXJhbSBiIFRoZSBibHVlIGFkZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gYSBUaGUgYWxwaGEgYWRkIHZhbHVlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEFkZChmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKSB7CisgICAgICAgIG1BZGQueCA9IHI7CisgICAgICAgIG1BZGQueSA9IGc7CisgICAgICAgIG1BZGQueiA9IGI7CisgICAgICAgIG1BZGQudyA9IGE7CisKKyAgICAgICAgRmllbGRQYWNrZXIgZnAgPSBuZXcgRmllbGRQYWNrZXIoNCo0KTsKKyAgICAgICAgZnAuYWRkRjMyKG1BZGQueCk7CisgICAgICAgIGZwLmFkZEYzMihtQWRkLnkpOworICAgICAgICBmcC5hZGRGMzIobUFkZC56KTsKKyAgICAgICAgZnAuYWRkRjMyKG1BZGQudyk7CisgICAgICAgIHNldFZhcigxLCBmcCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IGEgY29sb3IgbWF0cml4IHRvIGNvbnZlcnQgZnJvbSBSR0IgdG8gbHVtaW5hbmNlLiBUaGUgYWxwaGEgY2hhbm5lbAorICAgICAqIHdpbGwgYmUgYSBjb3B5LgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0R3JleXNjYWxlKCkgeworICAgICAgICBtTWF0cml4LmxvYWRJZGVudGl0eSgpOworICAgICAgICBtTWF0cml4LnNldCgwLCAwLCAwLjI5OWYpOworICAgICAgICBtTWF0cml4LnNldCgxLCAwLCAwLjU4N2YpOworICAgICAgICBtTWF0cml4LnNldCgyLCAwLCAwLjExNGYpOworICAgICAgICBtTWF0cml4LnNldCgwLCAxLCAwLjI5OWYpOworICAgICAgICBtTWF0cml4LnNldCgxLCAxLCAwLjU4N2YpOworICAgICAgICBtTWF0cml4LnNldCgyLCAxLCAwLjExNGYpOworICAgICAgICBtTWF0cml4LnNldCgwLCAyLCAwLjI5OWYpOworICAgICAgICBtTWF0cml4LnNldCgxLCAyLCAwLjU4N2YpOworICAgICAgICBtTWF0cml4LnNldCgyLCAyLCAwLjExNGYpOworICAgICAgICBzZXRNYXRyaXgoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIG1hdHJpeCB0byBjb252ZXJ0IGZyb20gWVVWIHRvIFJHQiB3aXRoIGEgZGlyZWN0IGNvcHkgb2YgdGhlIDR0aAorICAgICAqIGNoYW5uZWwuCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRZVVZ0b1JHQigpIHsKKyAgICAgICAgbU1hdHJpeC5sb2FkSWRlbnRpdHkoKTsKKyAgICAgICAgbU1hdHJpeC5zZXQoMCwgMCwgMS5mKTsKKyAgICAgICAgbU1hdHJpeC5zZXQoMSwgMCwgMC5mKTsKKyAgICAgICAgbU1hdHJpeC5zZXQoMiwgMCwgMS4xMzk4M2YpOworICAgICAgICBtTWF0cml4LnNldCgwLCAxLCAxLmYpOworICAgICAgICBtTWF0cml4LnNldCgxLCAxLCAtMC4zOTQ2NWYpOworICAgICAgICBtTWF0cml4LnNldCgyLCAxLCAtMC41ODA2Zik7CisgICAgICAgIG1NYXRyaXguc2V0KDAsIDIsIDEuZik7CisgICAgICAgIG1NYXRyaXguc2V0KDEsIDIsIDIuMDMyMTFmKTsKKyAgICAgICAgbU1hdHJpeC5zZXQoMiwgMiwgMC5mKTsKKyAgICAgICAgc2V0TWF0cml4KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBtYXRyaXggdG8gY29udmVydCBmcm9tIFJHQiB0byBZVVYgd2l0aCBhIGRpcmVjdCBjb3B5IG9mIHRoZSA0dGgKKyAgICAgKiBjaGFubmVsLgorICAgICAqCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UkdCdG9ZVVYoKSB7CisgICAgICAgIG1NYXRyaXgubG9hZElkZW50aXR5KCk7CisgICAgICAgIG1NYXRyaXguc2V0KDAsIDAsIDAuMjk5Zik7CisgICAgICAgIG1NYXRyaXguc2V0KDEsIDAsIDAuNTg3Zik7CisgICAgICAgIG1NYXRyaXguc2V0KDIsIDAsIDAuMTE0Zik7CisgICAgICAgIG1NYXRyaXguc2V0KDAsIDEsIC0wLjE0NzEzZik7CisgICAgICAgIG1NYXRyaXguc2V0KDEsIDEsIC0wLjI4ODg2Zik7CisgICAgICAgIG1NYXRyaXguc2V0KDIsIDEsIDAuNDM2Zik7CisgICAgICAgIG1NYXRyaXguc2V0KDAsIDIsIDAuNjE1Zik7CisgICAgICAgIG1NYXRyaXguc2V0KDEsIDIsIC0wLjUxNDk5Zik7CisgICAgICAgIG1NYXRyaXguc2V0KDIsIDIsIC0wLjEwMDAxZik7CisgICAgICAgIHNldE1hdHJpeCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEludm9rZSB0aGUga2VybmVsIGFuZCBhcHBseSB0aGUgbWF0cml4IHRvIGVhY2ggY2VsbCBvZiBpbnB1dAorICAgICAqIHtAbGluayBBbGxvY2F0aW9ufSBhbmQgY29weSB0byB0aGUgb3V0cHV0IHtAbGluayBBbGxvY2F0aW9ufS4KKyAgICAgKgorICAgICAqIElmIHRoZSB2ZWN0b3Igc2l6ZSBvZiB0aGUgaW5wdXQgaXMgbGVzcyB0aGFuIGZvdXIsIHRoZQorICAgICAqIHJlbWFpbmluZyBjb21wb25lbnRzIGFyZSB0cmVhdGVkIGFzIHplcm8gZm9yIHRoZSBtYXRyaXgKKyAgICAgKiBtdWx0aXBseS4KKyAgICAgKgorICAgICAqIElmIHRoZSBvdXRwdXQgdmVjdG9yIHNpemUgaXMgbGVzcyB0aGFuIGZvdXIsIHRoZSB1bnVzZWQKKyAgICAgKiB2ZWN0b3IgY29tcG9uZW50cyBhcmUgZGlzY2FyZGVkLgorICAgICAqCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIElucHV0IGFsbG9jYXRpb24KKyAgICAgKiBAcGFyYW0gYW91dCBPdXRwdXQgYWxsb2NhdGlvbgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2goQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBmb3JFYWNoKGFpbiwgYW91dCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW52b2tlIHRoZSBrZXJuZWwgYW5kIGFwcGx5IHRoZSBtYXRyaXggdG8gZWFjaCBjZWxsIG9mIGlucHV0CisgICAgICoge0BsaW5rIEFsbG9jYXRpb259IGFuZCBjb3B5IHRvIHRoZSBvdXRwdXQge0BsaW5rIEFsbG9jYXRpb259LgorICAgICAqCisgICAgICogSWYgdGhlIHZlY3RvciBzaXplIG9mIHRoZSBpbnB1dCBpcyBsZXNzIHRoYW4gZm91ciwgdGhlCisgICAgICogcmVtYWluaW5nIGNvbXBvbmVudHMgYXJlIHRyZWF0ZWQgYXMgemVybyBmb3IgdGhlIG1hdHJpeAorICAgICAqIG11bHRpcGx5LgorICAgICAqCisgICAgICogSWYgdGhlIG91dHB1dCB2ZWN0b3Igc2l6ZSBpcyBsZXNzIHRoYW4gZm91ciwgdGhlIHVudXNlZAorICAgICAqIHZlY3RvciBjb21wb25lbnRzIGFyZSBkaXNjYXJkZWQuCisgICAgICoKKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gSW5wdXQgYWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSBhb3V0IE91dHB1dCBhbGxvY2F0aW9uCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2goQWxsb2NhdGlvbiBhaW4sIEFsbG9jYXRpb24gYW91dCwgU2NyaXB0LkxhdW5jaE9wdGlvbnMgb3B0KSB7CisgICAgICAgIGlmICghYWluLmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOChtUlMpKSAmJgorICAgICAgICAgICAgIWFpbi5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMihtUlMpKSAmJgorICAgICAgICAgICAgIWFpbi5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMyhtUlMpKSAmJgorICAgICAgICAgICAgIWFpbi5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfNChtUlMpKSAmJgorICAgICAgICAgICAgIWFpbi5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuRjMyKG1SUykpICYmCisgICAgICAgICAgICAhYWluLmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5GMzJfMihtUlMpKSAmJgorICAgICAgICAgICAgIWFpbi5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuRjMyXzMobVJTKSkgJiYKKyAgICAgICAgICAgICFhaW4uZ2V0RWxlbWVudCgpLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMl80KG1SUykpKSB7CisKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5zdXBvcnRlZCBlbGVtZW50IHR5cGUuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFvdXQuZ2V0RWxlbWVudCgpLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4KG1SUykpICYmCisgICAgICAgICAgICAhYW91dC5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMihtUlMpKSAmJgorICAgICAgICAgICAgIWFvdXQuZ2V0RWxlbWVudCgpLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4XzMobVJTKSkgJiYKKyAgICAgICAgICAgICFhb3V0LmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KG1SUykpICYmCisgICAgICAgICAgICAhYW91dC5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuRjMyKG1SUykpICYmCisgICAgICAgICAgICAhYW91dC5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuRjMyXzIobVJTKSkgJiYKKyAgICAgICAgICAgICFhb3V0LmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5GMzJfMyhtUlMpKSAmJgorICAgICAgICAgICAgIWFvdXQuZ2V0RWxlbWVudCgpLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMl80KG1SUykpKSB7CisKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5zdXBvcnRlZCBlbGVtZW50IHR5cGUuIik7CisgICAgICAgIH0KKworICAgICAgICBmb3JFYWNoKDAsIGFpbiwgYW91dCwgbnVsbCwgb3B0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhpcyBpbnRyaW5zaWMga2VybmVsLgorICAgICAqCisgICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEKCkgeworICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoMCwgMywgbnVsbCwgbnVsbCk7CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29udm9sdmUzeDMuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29udm9sdmUzeDMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjkxZmRjCi0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb252b2x2ZTN4My5qYXZhCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKKworLyoqCisgKiBJbnRyaW5zaWMgZm9yIGFwcGx5aW5nIGEgM3gzIGNvbnZvbHZlIHRvIGFuIGFsbG9jYXRpb24uCisgKgorICoqLworcHVibGljIGZpbmFsIGNsYXNzIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzIGV4dGVuZHMgU2NyaXB0SW50cmluc2ljIHsKKyAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVZhbHVlcyA9IG5ldyBmbG9hdFs5XTsKKyAgICBwcml2YXRlIEFsbG9jYXRpb24gbUlucHV0OworCisgICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWNDb252b2x2ZTN4Myhsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgc3VwZXIoaWQsIHJzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdXBwb3J0ZWQgZWxlbWVudHMgdHlwZXMgYXJlIHtAbGluayBFbGVtZW50I1U4fSwge0BsaW5rCisgICAgICogRWxlbWVudCNVOF8yfSwge0BsaW5rIEVsZW1lbnQjVThfM30sIHtAbGluayBFbGVtZW50I1U4XzR9LAorICAgICAqIHtAbGluayBFbGVtZW50I0YzMn0sIHtAbGluayBFbGVtZW50I0YzMl8yfSwge0BsaW5rCisgICAgICogRWxlbWVudCNGMzJfM30sIGFuZCB7QGxpbmsgRWxlbWVudCNGMzJfNH0KKyAgICAgKgorICAgICAqIFRoZSBkZWZhdWx0IGNvZWZmaWNpZW50cyBhcmUuCisgICAgICoKKyAgICAgKiA8Y29kZT4KKyAgICAgKiA8cD4gWyAwLCAgMCwgIDAgXQorICAgICAqIDxwPiBbIDAsICAxLCAgMCBdCisgICAgICogPHA+IFsgMCwgIDAsICAwIF0KKyAgICAgKiA8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgVGhlIFJlbmRlclNjcmlwdCBjb250ZXh0CisgICAgICogQHBhcmFtIGUgRWxlbWVudCB0eXBlIGZvciBpbnRwdXRzIGFuZCBvdXRwdXRzCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTY3JpcHRJbnRyaW5zaWNDb252b2x2ZTN4MyBjcmVhdGUoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUpIHsKKyAgICAgICAgZmxvYXQgZltdID0geyAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwfTsKKyAgICAgICAgaWYgKCFlLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4KHJzKSkgJiYKKyAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4XzIocnMpKSAmJgorICAgICAgICAgICAgIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMyhycykpICYmCisgICAgICAgICAgICAhZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KHJzKSkgJiYKKyAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMihycykpICYmCisgICAgICAgICAgICAhZS5pc0NvbXBhdGlibGUoRWxlbWVudC5GMzJfMihycykpICYmCisgICAgICAgICAgICAhZS5pc0NvbXBhdGlibGUoRWxlbWVudC5GMzJfMyhycykpICYmCisgICAgICAgICAgICAhZS5pc0NvbXBhdGlibGUoRWxlbWVudC5GMzJfNChycykpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuc3Vwb3J0ZWQgZWxlbWVudCB0eXBlLiIpOworICAgICAgICB9CisgICAgICAgIGxvbmcgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDEsIGUuZ2V0SUQocnMpKTsKKyAgICAgICAgU2NyaXB0SW50cmluc2ljQ29udm9sdmUzeDMgc2kgPSBuZXcgU2NyaXB0SW50cmluc2ljQ29udm9sdmUzeDMoaWQsIHJzKTsKKyAgICAgICAgc2kuc2V0Q29lZmZpY2llbnRzKGYpOworICAgICAgICByZXR1cm4gc2k7CisKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGlucHV0IG9mIHRoZSBibHVyLgorICAgICAqIE11c3QgbWF0Y2ggdGhlIGVsZW1lbnQgdHlwZSBzdXBwbGllZCBkdXJpbmcgY3JlYXRlLgorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBUaGUgaW5wdXQgYWxsb2NhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRJbnB1dChBbGxvY2F0aW9uIGFpbikgeworICAgICAgICBtSW5wdXQgPSBhaW47CisgICAgICAgIHNldFZhcigxLCBhaW4pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUgY29udm9sdmUuCisgICAgICoKKyAgICAgKiBUaGUgY29udm9sdmUgbGF5b3V0IGlzCisgICAgICogPGNvZGU+CisgICAgICogPHA+IFsgMCwgIDEsICAyIF0KKyAgICAgKiA8cD4gWyAzLCAgNCwgIDUgXQorICAgICAqIDxwPiBbIDYsICA3LCAgOCBdCisgICAgICogPC9jb2RlPgorICAgICAqCisgICAgICogQHBhcmFtIHYgVGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cyB0byBzZXQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb2VmZmljaWVudHMoZmxvYXQgdltdKSB7CisgICAgICAgIEZpZWxkUGFja2VyIGZwID0gbmV3IEZpZWxkUGFja2VyKDkqNCk7CisgICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgbVZhbHVlcy5sZW5ndGg7IGN0KyspIHsKKyAgICAgICAgICAgIG1WYWx1ZXNbY3RdID0gdltjdF07CisgICAgICAgICAgICBmcC5hZGRGMzIobVZhbHVlc1tjdF0pOworICAgICAgICB9CisgICAgICAgIHNldFZhcigwLCBmcCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwbHkgdGhlIGZpbHRlciB0byB0aGUgaW5wdXQgYW5kIHNhdmUgdG8gdGhlIHNwZWNpZmllZAorICAgICAqIGFsbG9jYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYW91dCBPdXRwdXQgYWxsb2NhdGlvbi4gTXVzdCBtYXRjaCBjcmVhdGlvbiBlbGVtZW50CisgICAgICogICAgICAgICAgICAgdHlwZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoKEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBmb3JFYWNoKGFvdXQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGx5IHRoZSBmaWx0ZXIgdG8gdGhlIGlucHV0IGFuZCBzYXZlIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBhbGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGFvdXQgT3V0cHV0IGFsbG9jYXRpb24uIE11c3QgbWF0Y2ggY3JlYXRpb24gZWxlbWVudAorICAgICAqICAgICAgICAgICAgIHR5cGUuCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2goQWxsb2NhdGlvbiBhb3V0LCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgZm9yRWFjaCgwLCBudWxsLCBhb3V0LCBudWxsLCBvcHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGlzIGludHJpbnNpYyBrZXJuZWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSUQoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCgwLCAyLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBGaWVsZElEIGZvciB0aGUgaW5wdXQgZmllbGQgb2YgdGhpcyBpbnRyaW5zaWMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5GaWVsZElEIFRoZSBGaWVsZElEIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU2NyaXB0LkZpZWxkSUQgZ2V0RmllbGRJRF9JbnB1dCgpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZpZWxkSUQoMSwgbnVsbCk7CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29udm9sdmU1eDUuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29udm9sdmU1eDUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzU3NTYwCi0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb252b2x2ZTV4NS5qYXZhCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKKworLyoqCisgKiBJbnRyaW5zaWMgZm9yIGFwcGx5aW5nIGEgNXg1IGNvbnZvbHZlIHRvIGFuIGFsbG9jYXRpb24uCisgKgorICoqLworcHVibGljIGZpbmFsIGNsYXNzIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlNXg1IGV4dGVuZHMgU2NyaXB0SW50cmluc2ljIHsKKyAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVZhbHVlcyA9IG5ldyBmbG9hdFsyNV07CisgICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1JbnB1dDsKKworICAgIHByaXZhdGUgU2NyaXB0SW50cmluc2ljQ29udm9sdmU1eDUobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIHN1cGVyKGlkLCBycyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3VwcG9ydGVkIGVsZW1lbnRzIHR5cGVzIGFyZSB7QGxpbmsgRWxlbWVudCNVOH0sIHtAbGluaworICAgICAqIEVsZW1lbnQjVThfMn0sIHtAbGluayBFbGVtZW50I1U4XzN9LCB7QGxpbmsgRWxlbWVudCNVOF80fSwKKyAgICAgKiB7QGxpbmsgRWxlbWVudCNGMzJ9LCB7QGxpbmsgRWxlbWVudCNGMzJfMn0sIHtAbGluaworICAgICAqIEVsZW1lbnQjRjMyXzN9LCBhbmQge0BsaW5rIEVsZW1lbnQjRjMyXzR9CisgICAgICoKKyAgICAgKiBUaGUgZGVmYXVsdCBjb2VmZmljaWVudHMgYXJlLgorICAgICAqIDxjb2RlPgorICAgICAqIDxwPiBbIDAsICAwLCAgMCwgIDAsICAwICBdCisgICAgICogPHA+IFsgMCwgIDAsICAwLCAgMCwgIDAgIF0KKyAgICAgKiA8cD4gWyAwLCAgMCwgIDEsICAwLCAgMCAgXQorICAgICAqIDxwPiBbIDAsICAwLCAgMCwgIDAsICAwICBdCisgICAgICogPHA+IFsgMCwgIDAsICAwLCAgMCwgIDAgIF0KKyAgICAgKiA8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgVGhlIFJlbmRlclNjcmlwdCBjb250ZXh0CisgICAgICogQHBhcmFtIGUgRWxlbWVudCB0eXBlIGZvciBpbnRwdXRzIGFuZCBvdXRwdXRzCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlNXg1CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTY3JpcHRJbnRyaW5zaWNDb252b2x2ZTV4NSBjcmVhdGUoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUpIHsKKyAgICAgICAgaWYgKCFlLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4KHJzKSkgJiYKKyAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4XzIocnMpKSAmJgorICAgICAgICAgICAgIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMyhycykpICYmCisgICAgICAgICAgICAhZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KHJzKSkgJiYKKyAgICAgICAgICAgICFlLmlzQ29tcGF0aWJsZShFbGVtZW50LkYzMihycykpICYmCisgICAgICAgICAgICAhZS5pc0NvbXBhdGlibGUoRWxlbWVudC5GMzJfMihycykpICYmCisgICAgICAgICAgICAhZS5pc0NvbXBhdGlibGUoRWxlbWVudC5GMzJfMyhycykpICYmCisgICAgICAgICAgICAhZS5pc0NvbXBhdGlibGUoRWxlbWVudC5GMzJfNChycykpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuc3Vwb3J0ZWQgZWxlbWVudCB0eXBlLiIpOworICAgICAgICB9CisKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoNCwgZS5nZXRJRChycykpOworICAgICAgICByZXR1cm4gbmV3IFNjcmlwdEludHJpbnNpY0NvbnZvbHZlNXg1KGlkLCBycyk7CisKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGlucHV0IG9mIHRoZSBibHVyLgorICAgICAqIE11c3QgbWF0Y2ggdGhlIGVsZW1lbnQgdHlwZSBzdXBwbGllZCBkdXJpbmcgY3JlYXRlLgorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBUaGUgaW5wdXQgYWxsb2NhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRJbnB1dChBbGxvY2F0aW9uIGFpbikgeworICAgICAgICBtSW5wdXQgPSBhaW47CisgICAgICAgIHNldFZhcigxLCBhaW4pOworICAgIH0KKworICAgIC8qKgorICAgICogU2V0IHRoZSBjb2VmZmljaWVudHMgZm9yIHRoZSBjb252b2x2ZS4KKyAgICAqCisgICAgKiBUaGUgY29udm9sdmUgbGF5b3V0IGlzCisgICAgKiA8Y29kZT4KKyAgICAqIDxwPiBbIDAsICAxLCAgMiwgIDMsICA0ICBdCisgICAgKiA8cD4gWyA1LCAgNiwgIDcsICA4LCAgOSAgXQorICAgICogPHA+IFsgMTAsIDExLCAxMiwgMTMsIDE0IF0KKyAgICAqIDxwPiBbIDE1LCAxNiwgMTcsIDE4LCAxOSBdCisgICAgKiA8cD4gWyAyMCwgMjEsIDIyLCAyMywgMjQgXQorICAgICogPC9jb2RlPgorICAgICoKKyAgICAqIEBwYXJhbSB2IFRoZSBhcnJheSBvZiBjb2VmZmljaWVudHMgdG8gc2V0CisgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb2VmZmljaWVudHMoZmxvYXQgdltdKSB7CisgICAgICAgIEZpZWxkUGFja2VyIGZwID0gbmV3IEZpZWxkUGFja2VyKDI1KjQpOworICAgICAgICBmb3IgKGludCBjdD0wOyBjdCA8IG1WYWx1ZXMubGVuZ3RoOyBjdCsrKSB7CisgICAgICAgICAgICBtVmFsdWVzW2N0XSA9IHZbY3RdOworICAgICAgICAgICAgZnAuYWRkRjMyKG1WYWx1ZXNbY3RdKTsKKyAgICAgICAgfQorICAgICAgICBzZXRWYXIoMCwgZnApOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGx5IHRoZSBmaWx0ZXIgdG8gdGhlIGlucHV0IGFuZCBzYXZlIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBhbGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGFvdXQgT3V0cHV0IGFsbG9jYXRpb24uIE11c3QgbWF0Y2ggY3JlYXRpb24gZWxlbWVudAorICAgICAqICAgICAgICAgICAgIHR5cGUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yRWFjaChBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgZm9yRWFjaChhb3V0LCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcHBseSB0aGUgZmlsdGVyIHRvIHRoZSBpbnB1dCBhbmQgc2F2ZSB0byB0aGUgc3BlY2lmaWVkCisgICAgICogYWxsb2NhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhb3V0IE91dHB1dCBhbGxvY2F0aW9uLiBNdXN0IG1hdGNoIGNyZWF0aW9uIGVsZW1lbnQKKyAgICAgKiAgICAgICAgICAgICB0eXBlLgorICAgICAqIEBwYXJhbSBvcHQgTGF1bmNoT3B0aW9ucyBmb3IgY2xpcHBpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoKEFsbG9jYXRpb24gYW91dCwgU2NyaXB0LkxhdW5jaE9wdGlvbnMgb3B0KSB7CisgICAgICAgIGZvckVhY2goMCwgbnVsbCwgYW91dCwgbnVsbCwgb3B0KTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGlzIGludHJpbnNpYyBrZXJuZWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSUQoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCgwLCAyLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBGaWVsZElEIGZvciB0aGUgaW5wdXQgZmllbGQgb2YgdGhpcyBpbnRyaW5zaWMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5GaWVsZElEIFRoZSBGaWVsZElEIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU2NyaXB0LkZpZWxkSUQgZ2V0RmllbGRJRF9JbnB1dCgpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZpZWxkSUQoMSwgbnVsbCk7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0hpc3RvZ3JhbS5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNIaXN0b2dyYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWI2MTBhCi0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNIaXN0b2dyYW0uamF2YQpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKKy8qKgorICogSW50cmluc2ljIEhpc3RvZ3JhbSBmaWx0ZXIuCisgKgorICoKKyAqKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRJbnRyaW5zaWNIaXN0b2dyYW0gZXh0ZW5kcyBTY3JpcHRJbnRyaW5zaWMgeworICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtT3V0OworCisgICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWNIaXN0b2dyYW0obG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIHN1cGVyKGlkLCBycyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIGludHJpbnNpYyBmb3IgY2FsY3VsYXRpbmcgdGhlIGhpc3RvZ3JhbSBvZiBhbiB1Y2hhcgorICAgICAqIG9yIHVjaGFyNCBpbWFnZS4KKyAgICAgKgorICAgICAqIFN1cHBvcnRlZCBlbGVtZW50cyB0eXBlcyBhcmUKKyAgICAgKiB7QGxpbmsgRWxlbWVudCNVOF80fSwge0BsaW5rIEVsZW1lbnQjVThfM30sCisgICAgICoge0BsaW5rIEVsZW1lbnQjVThfMn0sIHtAbGluayBFbGVtZW50I1U4fQorICAgICAqCisgICAgICogQHBhcmFtIHJzIFRoZSBSZW5kZXJTY3JpcHQgY29udGV4dAorICAgICAqIEBwYXJhbSBlIEVsZW1lbnQgdHlwZSBmb3IgaW5wdXRzCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdEludHJpbnNpY0hpc3RvZ3JhbQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljSGlzdG9ncmFtIGNyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSkgeworICAgICAgICBpZiAoKCFlLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4XzQocnMpKSkgJiYKKyAgICAgICAgICAgICghZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF8zKHJzKSkpICYmCisgICAgICAgICAgICAoIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfMihycykpKSAmJgorICAgICAgICAgICAgKCFlLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4KHJzKSkpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuc3Vwb3J0ZWQgZWxlbWVudCB0eXBlLiIpOworICAgICAgICB9CisgICAgICAgIGxvbmcgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDksIGUuZ2V0SUQocnMpKTsKKyAgICAgICAgU2NyaXB0SW50cmluc2ljSGlzdG9ncmFtIHNpYiA9IG5ldyBTY3JpcHRJbnRyaW5zaWNIaXN0b2dyYW0oaWQsIHJzKTsKKyAgICAgICAgcmV0dXJuIHNpYjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm9jZXNzIGFuIGlucHV0IGJ1ZmZlciBhbmQgcGxhY2UgdGhlIGhpc3RvZ3JhbSBpbnRvIHRoZQorICAgICAqIG91dHB1dCBhbGxvY2F0aW9uLiBUaGUgb3V0cHV0IGFsbG9jYXRpb24gbWF5IGJlIGEgbmFycm93ZXIKKyAgICAgKiB2ZWN0b3Igc2l6ZSB0aGFuIHRoZSBpbnB1dC4gSW4gdGhpcyBjYXNlIHRoZSB2ZWN0b3Igc2l6ZSBvZgorICAgICAqIHRoZSBvdXRwdXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IG1hbnkgb2YgdGhlIGlucHV0CisgICAgICogY2hhbm5lbHMgYXJlIHVzZWQgaW4gdGhlIGNvbXB1dGF0aW9uLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UKKyAgICAgKiBoYXZlIGFuIFJHQkEgaW5wdXQgYnVmZmVyIGJ1dCBvbmx5IHdhbnQgdGhlIGhpc3RvZ3JhbSBmb3IKKyAgICAgKiBSR0IuCisgICAgICoKKyAgICAgKiAxRCBhbmQgMkQgaW5wdXQgYWxsb2NhdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIGlucHV0IGltYWdlCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yRWFjaChBbGxvY2F0aW9uIGFpbikgeworICAgICAgICBmb3JFYWNoKGFpbiwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJvY2VzcyBhbiBpbnB1dCBidWZmZXIgYW5kIHBsYWNlIHRoZSBoaXN0b2dyYW0gaW50byB0aGUKKyAgICAgKiBvdXRwdXQgYWxsb2NhdGlvbi4gVGhlIG91dHB1dCBhbGxvY2F0aW9uIG1heSBiZSBhIG5hcnJvd2VyCisgICAgICogdmVjdG9yIHNpemUgdGhhbiB0aGUgaW5wdXQuIEluIHRoaXMgY2FzZSB0aGUgdmVjdG9yIHNpemUgb2YKKyAgICAgKiB0aGUgb3V0cHV0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IG9mIHRoZSBpbnB1dAorICAgICAqIGNoYW5uZWxzIGFyZSB1c2VkIGluIHRoZSBjb21wdXRhdGlvbi4gVGhpcyBpcyB1c2VmdWwgaWYgeW91CisgICAgICogaGF2ZSBhbiBSR0JBIGlucHV0IGJ1ZmZlciBidXQgb25seSB3YW50IHRoZSBoaXN0b2dyYW0gZm9yCisgICAgICogUkdCLgorICAgICAqCisgICAgICogMUQgYW5kIDJEIGlucHV0IGFsbG9jYXRpb25zIGFyZSBzdXBwb3J0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWluIFRoZSBpbnB1dCBpbWFnZQorICAgICAqIEBwYXJhbSBvcHQgTGF1bmNoT3B0aW9ucyBmb3IgY2xpcHBpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoKEFsbG9jYXRpb24gYWluLCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgaWYgKGFpbi5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpLmdldFZlY3RvclNpemUoKSA8CisgICAgICAgICAgICBtT3V0LmdldFR5cGUoKS5nZXRFbGVtZW50KCkuZ2V0VmVjdG9yU2l6ZSgpKSB7CisKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiSW5wdXQgdmVjdG9yIHNpemUgbXVzdCBiZSA+PSBvdXRwdXQgdmVjdG9yIHNpemUuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFpbi5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4KG1SUykpICYmCisgICAgICAgICAgICBhaW4uZ2V0VHlwZSgpLmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KG1SUykpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk91dHB1dCB0eXBlIG11c3QgYmUgVTMyIG9yIEkzMi4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvckVhY2goMCwgYWluLCBudWxsLCBudWxsLCBvcHQpOworICAgIH0KKworCisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGNvZWZmaWNpZW50cyB1c2VkIGZvciB0aGUgUkdCQSB0byBMdW1pbm9jaXR5CisgICAgICogY2FsY3VsYXRpb24uIFRoZSBkZWZhdWx0IGlzIHswLjI5OWYsIDAuNTg3ZiwgMC4xMTRmLCAwLmZ9LgorICAgICAqCisgICAgICogQ29lZmZpY2llbnRzIG11c3QgYmUgPj0gMCBhbmQgc3VtIHRvIDEuMCBvciBsZXNzLgorICAgICAqCisgICAgICogQHBhcmFtIHIgUmVkIGNvZWZmaWNpZW50CisgICAgICogQHBhcmFtIGcgR3JlZW4gY29lZmZpY2llbnQKKyAgICAgKiBAcGFyYW0gYiBCbHVlIGNvZWZmaWNpZW50CisgICAgICogQHBhcmFtIGEgQWxwaGEgY29lZmZpY2llbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXREb3RDb2VmZmljaWVudHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkgeworICAgICAgICBpZiAoKHIgPCAwLmYpIHx8IChnIDwgMC5mKSB8fCAoYiA8IDAuZikgfHwgKGEgPCAwLmYpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNvZWZmaWNpZW50IG1heSBub3QgYmUgbmVnYXRpdmUuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChyICsgZyArIGIgKyBhKSA+IDEuZikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTdW0gb2YgY29lZmZpY2llbnRzIG11c3QgYmUgMS4wIG9yIGxlc3MuIik7CisgICAgICAgIH0KKworICAgICAgICBGaWVsZFBhY2tlciBmcCA9IG5ldyBGaWVsZFBhY2tlcigxNik7CisgICAgICAgIGZwLmFkZEYzMihyKTsKKyAgICAgICAgZnAuYWRkRjMyKGcpOworICAgICAgICBmcC5hZGRGMzIoYik7CisgICAgICAgIGZwLmFkZEYzMihhKTsKKyAgICAgICAgc2V0VmFyKDAsIGZwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIG91dHB1dCBvZiB0aGUgaGlzdG9ncmFtLiAgMzIgYml0IGludGVnZXIgdHlwZXMgYXJlCisgICAgICogc3VwcG9ydGVkLgorICAgICAqCisgICAgICogQHBhcmFtIGFvdXQgVGhlIG91dHB1dCBhbGxvY2F0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0T3V0cHV0KEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBtT3V0ID0gYW91dDsKKyAgICAgICAgaWYgKG1PdXQuZ2V0VHlwZSgpLmdldEVsZW1lbnQoKSAhPSBFbGVtZW50LlUzMihtUlMpICYmCisgICAgICAgICAgICBtT3V0LmdldFR5cGUoKS5nZXRFbGVtZW50KCkgIT0gRWxlbWVudC5VMzJfMihtUlMpICYmCisgICAgICAgICAgICBtT3V0LmdldFR5cGUoKS5nZXRFbGVtZW50KCkgIT0gRWxlbWVudC5VMzJfMyhtUlMpICYmCisgICAgICAgICAgICBtT3V0LmdldFR5cGUoKS5nZXRFbGVtZW50KCkgIT0gRWxlbWVudC5VMzJfNChtUlMpICYmCisgICAgICAgICAgICBtT3V0LmdldFR5cGUoKS5nZXRFbGVtZW50KCkgIT0gRWxlbWVudC5JMzIobVJTKSAmJgorICAgICAgICAgICAgbU91dC5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpICE9IEVsZW1lbnQuSTMyXzIobVJTKSAmJgorICAgICAgICAgICAgbU91dC5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpICE9IEVsZW1lbnQuSTMyXzMobVJTKSAmJgorICAgICAgICAgICAgbU91dC5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpICE9IEVsZW1lbnQuSTMyXzQobVJTKSkgeworCisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk91dHB1dCB0eXBlIG11c3QgYmUgVTMyIG9yIEkzMi4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG1PdXQuZ2V0VHlwZSgpLmdldFgoKSAhPSAyNTYpIHx8CisgICAgICAgICAgICAobU91dC5nZXRUeXBlKCkuZ2V0WSgpICE9IDApIHx8CisgICAgICAgICAgICBtT3V0LmdldFR5cGUoKS5oYXNNaXBtYXBzKCkgfHwKKyAgICAgICAgICAgIChtT3V0LmdldFR5cGUoKS5nZXRZdXYoKSAhPSAwKSkgeworCisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk91dHB1dCBtdXN0IGJlIDFELCAyNTYgZWxlbWVudHMuIik7CisgICAgICAgIH0KKyAgICAgICAgc2V0VmFyKDEsIGFvdXQpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogUHJvY2VzcyBhbiBpbnB1dCBidWZmZXIgYW5kIHBsYWNlIHRoZSBoaXN0b2dyYW0gaW50byB0aGUKKyAgICAgKiBvdXRwdXQgYWxsb2NhdGlvbi4gVGhlIGRvdCBwcm9kdWN0IG9mIHRoZSBpbnB1dCBjaGFubmVsIGFuZAorICAgICAqIHRoZSBjb2VmZmljaWVudHMgZnJvbSAnc2V0RG90Q29lZmZpY2llbnRzJyBhcmUgdXNlZCB0bworICAgICAqIGNhbGN1bGF0ZSB0aGUgb3V0cHV0IHZhbHVlcy4KKyAgICAgKgorICAgICAqIDFEIGFuZCAyRCBpbnB1dCBhbGxvY2F0aW9ucyBhcmUgc3VwcG9ydGVkLgorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBUaGUgaW5wdXQgaW1hZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoX0RvdChBbGxvY2F0aW9uIGFpbikgeworICAgICAgICBmb3JFYWNoX0RvdChhaW4sIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFByb2Nlc3MgYW4gaW5wdXQgYnVmZmVyIGFuZCBwbGFjZSB0aGUgaGlzdG9ncmFtIGludG8gdGhlCisgICAgICogb3V0cHV0IGFsbG9jYXRpb24uIFRoZSBkb3QgcHJvZHVjdCBvZiB0aGUgaW5wdXQgY2hhbm5lbCBhbmQKKyAgICAgKiB0aGUgY29lZmZpY2llbnRzIGZyb20gJ3NldERvdENvZWZmaWNpZW50cycgYXJlIHVzZWQgdG8KKyAgICAgKiBjYWxjdWxhdGUgdGhlIG91dHB1dCB2YWx1ZXMuCisgICAgICoKKyAgICAgKiAxRCBhbmQgMkQgaW5wdXQgYWxsb2NhdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIGlucHV0IGltYWdlCisgICAgICogQHBhcmFtIG9wdCBMYXVuY2hPcHRpb25zIGZvciBjbGlwcGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvckVhY2hfRG90KEFsbG9jYXRpb24gYWluLCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgaWYgKG1PdXQuZ2V0VHlwZSgpLmdldEVsZW1lbnQoKS5nZXRWZWN0b3JTaXplKCkgIT0gMSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPdXRwdXQgdmVjdG9yIHNpemUgbXVzdCBiZSBvbmUuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFpbi5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4KG1SUykpICYmCisgICAgICAgICAgICBhaW4uZ2V0VHlwZSgpLmdldEVsZW1lbnQoKS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KG1SUykpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk91dHB1dCB0eXBlIG11c3QgYmUgVTMyIG9yIEkzMi4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvckVhY2goMSwgYWluLCBudWxsLCBudWxsLCBvcHQpOworICAgIH0KKworCisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBLZXJuZWxJRCBmb3IgdGhpcyBpbnRyaW5zaWMga2VybmVsLgorICAgICAqCisgICAgICogQHJldHVybiBTY3JpcHQuS2VybmVsSUQgVGhlIEtlcm5lbElEIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU2NyaXB0Lktlcm5lbElEIGdldEtlcm5lbElEX1NlcGFyYXRlKCkgeworICAgICAgICByZXR1cm4gY3JlYXRlS2VybmVsSUQoMCwgMywgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGEgRmllbGRJRCBmb3IgdGhlIGlucHV0IGZpZWxkIG9mIHRoaXMgaW50cmluc2ljLgorICAgICAqCisgICAgICogQHJldHVybiBTY3JpcHQuRmllbGRJRCBUaGUgRmllbGRJRCBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIFNjcmlwdC5GaWVsZElEIGdldEZpZWxkSURfSW5wdXQoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVGaWVsZElEKDEsIG51bGwpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNMVVQuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljTFVULmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlmZjY0YQotLS0gL2Rldi9udWxsCisrKyBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljTFVULmphdmEKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisvKioKKyAqIEludHJpbnNpYyBmb3IgYXBwbHlpbmcgYSBwZXItY2hhbm5lbCBsb29rdXAgdGFibGUuIEVhY2gKKyAqIGNoYW5uZWwgb2YgdGhlIGlucHV0IGhhcyBhbiBpbmRlcGVuZGFudCBsb29rdXAgdGFibGUuIFRoZQorICogdGFibGVzIGFyZSAyNTYgZW50cmllcyBpbiBzaXplIGFuZCBjYW4gY292ZXIgdGhlIGZ1bGwgdmFsdWUKKyAqIHJhbmdlIG9mIHtAbGluayBFbGVtZW50I1U4XzR9LgorICoqLworcHVibGljIGZpbmFsIGNsYXNzIFNjcmlwdEludHJpbnNpY0xVVCBleHRlbmRzIFNjcmlwdEludHJpbnNpYyB7CisgICAgcHJpdmF0ZSBmaW5hbCBNYXRyaXg0ZiBtTWF0cml4ID0gbmV3IE1hdHJpeDRmKCk7CisgICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1UYWJsZXM7CisgICAgcHJpdmF0ZSBmaW5hbCBieXRlIG1DYWNoZVtdID0gbmV3IGJ5dGVbMTAyNF07CisgICAgcHJpdmF0ZSBib29sZWFuIG1EaXJ0eSA9IHRydWU7CisKKyAgICBwcml2YXRlIFNjcmlwdEludHJpbnNpY0xVVChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICAgICAgc3VwZXIoaWQsIHJzKTsKKyAgICAgICAgbVRhYmxlcyA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQocnMsIEVsZW1lbnQuVTgocnMpLCAxMDI0KTsKKyAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCAyNTY7IGN0KyspIHsKKyAgICAgICAgICAgIG1DYWNoZVtjdF0gPSAoYnl0ZSljdDsKKyAgICAgICAgICAgIG1DYWNoZVtjdCArIDI1Nl0gPSAoYnl0ZSljdDsKKyAgICAgICAgICAgIG1DYWNoZVtjdCArIDUxMl0gPSAoYnl0ZSljdDsKKyAgICAgICAgICAgIG1DYWNoZVtjdCArIDc2OF0gPSAoYnl0ZSljdDsKKyAgICAgICAgfQorICAgICAgICBzZXRWYXIoMCwgbVRhYmxlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3VwcG9ydGVkIGVsZW1lbnRzIHR5cGVzIGFyZSB7QGxpbmsgRWxlbWVudCNVOF80fQorICAgICAqCisgICAgICogVGhlIGRlZmF1bHRzIHRhYmxlcyBhcmUgaWRlbnRpdHkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgVGhlIFJlbmRlclNjcmlwdCBjb250ZXh0CisgICAgICogQHBhcmFtIGUgRWxlbWVudCB0eXBlIGZvciBpbnRwdXRzIGFuZCBvdXRwdXRzCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdEludHJpbnNpY0xVVAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljTFVUIGNyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSkgeworICAgICAgICBsb25nIGlkID0gcnMublNjcmlwdEludHJpbnNpY0NyZWF0ZSgzLCBlLmdldElEKHJzKSk7CisgICAgICAgIHJldHVybiBuZXcgU2NyaXB0SW50cmluc2ljTFVUKGlkLCBycyk7CisKKyAgICB9CisKKworICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZShpbnQgaW5kZXgsIGludCB2YWx1ZSkgeworICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gMjU1KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkluZGV4IG91dCBvZiByYW5nZSAoMC0yNTUpLiIpOworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiAyNTUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVmFsdWUgb3V0IG9mIHJhbmdlICgwLTI1NSkuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgYW4gZW50cnkgaW4gdGhlIHJlZCBjaGFubmVsIGxvb2t1cCB0YWJsZQorICAgICAqCisgICAgICogQHBhcmFtIGluZGV4IE11c3QgYmUgMC0yNTUKKyAgICAgKiBAcGFyYW0gdmFsdWUgTXVzdCBiZSAwLTI1NQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFJlZChpbnQgaW5kZXgsIGludCB2YWx1ZSkgeworICAgICAgICB2YWxpZGF0ZShpbmRleCwgdmFsdWUpOworICAgICAgICBtQ2FjaGVbaW5kZXhdID0gKGJ5dGUpdmFsdWU7CisgICAgICAgIG1EaXJ0eSA9IHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IGFuIGVudHJ5IGluIHRoZSBncmVlbiBjaGFubmVsIGxvb2t1cCB0YWJsZQorICAgICAqCisgICAgICogQHBhcmFtIGluZGV4IE11c3QgYmUgMC0yNTUKKyAgICAgKiBAcGFyYW0gdmFsdWUgTXVzdCBiZSAwLTI1NQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEdyZWVuKGludCBpbmRleCwgaW50IHZhbHVlKSB7CisgICAgICAgIHZhbGlkYXRlKGluZGV4LCB2YWx1ZSk7CisgICAgICAgIG1DYWNoZVtpbmRleCsyNTZdID0gKGJ5dGUpdmFsdWU7CisgICAgICAgIG1EaXJ0eSA9IHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IGFuIGVudHJ5IGluIHRoZSBibHVlIGNoYW5uZWwgbG9va3VwIHRhYmxlCisgICAgICoKKyAgICAgKiBAcGFyYW0gaW5kZXggTXVzdCBiZSAwLTI1NQorICAgICAqIEBwYXJhbSB2YWx1ZSBNdXN0IGJlIDAtMjU1CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Qmx1ZShpbnQgaW5kZXgsIGludCB2YWx1ZSkgeworICAgICAgICB2YWxpZGF0ZShpbmRleCwgdmFsdWUpOworICAgICAgICBtQ2FjaGVbaW5kZXgrNTEyXSA9IChieXRlKXZhbHVlOworICAgICAgICBtRGlydHkgPSB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCBhbiBlbnRyeSBpbiB0aGUgYWxwaGEgY2hhbm5lbCBsb29rdXAgdGFibGUKKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBNdXN0IGJlIDAtMjU1CisgICAgICogQHBhcmFtIHZhbHVlIE11c3QgYmUgMC0yNTUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRBbHBoYShpbnQgaW5kZXgsIGludCB2YWx1ZSkgeworICAgICAgICB2YWxpZGF0ZShpbmRleCwgdmFsdWUpOworICAgICAgICBtQ2FjaGVbaW5kZXgrNzY4XSA9IChieXRlKXZhbHVlOworICAgICAgICBtRGlydHkgPSB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEludm9rZSB0aGUga2VybmVsIGFuZCBhcHBseSB0aGUgbG9va3VwIHRvIGVhY2ggY2VsbCBvZiBhaW4KKyAgICAgKiBhbmQgY29weSB0byBhb3V0LgorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBJbnB1dCBhbGxvY2F0aW9uCisgICAgICogQHBhcmFtIGFvdXQgT3V0cHV0IGFsbG9jYXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoKEFsbG9jYXRpb24gYWluLCBBbGxvY2F0aW9uIGFvdXQpIHsKKyAgICAgICAgZm9yRWFjaChhaW4sIGFvdXQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEludm9rZSB0aGUga2VybmVsIGFuZCBhcHBseSB0aGUgbG9va3VwIHRvIGVhY2ggY2VsbCBvZiBhaW4KKyAgICAgKiBhbmQgY29weSB0byBhb3V0LgorICAgICAqCisgICAgICogQHBhcmFtIGFpbiBJbnB1dCBhbGxvY2F0aW9uCisgICAgICogQHBhcmFtIGFvdXQgT3V0cHV0IGFsbG9jYXRpb24KKyAgICAgKiBAcGFyYW0gb3B0IE9wdGlvbnMgZm9yIGNsaXBwaW5nCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yRWFjaChBbGxvY2F0aW9uIGFpbiwgQWxsb2NhdGlvbiBhb3V0LCBTY3JpcHQuTGF1bmNoT3B0aW9ucyBvcHQpIHsKKyAgICAgICAgaWYgKG1EaXJ0eSkgeworICAgICAgICAgICAgbURpcnR5ID0gZmFsc2U7CisgICAgICAgICAgICBtVGFibGVzLmNvcHlGcm9tVW5jaGVja2VkKG1DYWNoZSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yRWFjaCgwLCBhaW4sIGFvdXQsIG51bGwsIG9wdCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGEgS2VybmVsSUQgZm9yIHRoaXMgaW50cmluc2ljIGtlcm5lbC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gU2NyaXB0Lktlcm5lbElEIFRoZSBLZXJuZWxJRCBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIFNjcmlwdC5LZXJuZWxJRCBnZXRLZXJuZWxJRCgpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUtlcm5lbElEKDAsIDMsIG51bGwsIG51bGwpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNZdXZUb1JHQi5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNZdXZUb1JHQi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NDI5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY1l1dlRvUkdCLmphdmEKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CisKKworLyoqCisgKiBJbnRyaW5zaWMgZm9yIGNvbnZlcnRpbmcgYW4gQW5kcm9pZCBZVVYgYnVmZmVyIHRvIFJHQi4KKyAqCisgKiBUaGUgaW5wdXQgYWxsb2NhdGlvbiBzaG91bGQgYmUgc3VwcGxpZWQgaW4gYSBzdXBwb3J0ZWQgWVVWIGZvcm1hdAorICogYXMgYSBZVVYgZWxlbWVudCBBbGxvY2F0aW9uLiBUaGUgb3V0cHV0IGlzIFJHQkE7IHRoZSBhbHBoYSBjaGFubmVsCisgKiB3aWxsIGJlIHNldCB0byAyNTUuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRJbnRyaW5zaWNZdXZUb1JHQiBleHRlbmRzIFNjcmlwdEludHJpbnNpYyB7CisgICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1JbnB1dDsKKworICAgIFNjcmlwdEludHJpbnNpY1l1dlRvUkdCKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgICAgICBzdXBlcihpZCwgcnMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhbiBpbnRyaW5zaWMgZm9yIGNvbnZlcnRpbmcgWVVWIHRvIFJHQi4KKyAgICAgKgorICAgICAqIFN1cHBvcnRlZCBlbGVtZW50cyB0eXBlcyBhcmUge0BsaW5rIEVsZW1lbnQjVThfNH0KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBUaGUgUmVuZGVyU2NyaXB0IGNvbnRleHQKKyAgICAgKiBAcGFyYW0gZSBFbGVtZW50IHR5cGUgZm9yIG91dHB1dAorICAgICAqCisgICAgICogQHJldHVybiBTY3JpcHRJbnRyaW5zaWNZdXZUb1JHQgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljWXV2VG9SR0IgY3JlYXRlKFJlbmRlclNjcmlwdCBycywgRWxlbWVudCBlKSB7CisgICAgICAgIC8vIDYgY29tZXMgZnJvbSBSU19TQ1JJUFRfSU5UUklOU0lDX1lVVl9UT19SR0IgaW4gcnNEZWZpbmVzLmgKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoNiwgZS5nZXRJRChycykpOworICAgICAgICBTY3JpcHRJbnRyaW5zaWNZdXZUb1JHQiBzaSA9IG5ldyBTY3JpcHRJbnRyaW5zaWNZdXZUb1JHQihpZCwgcnMpOworICAgICAgICByZXR1cm4gc2k7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGlucHV0IHl1diBhbGxvY2F0aW9uLCBtdXN0IGJlIHtAbGluayBFbGVtZW50I1U4fS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhaW4gVGhlIGlucHV0IGFsbG9jYXRpb24uCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SW5wdXQoQWxsb2NhdGlvbiBhaW4pIHsKKyAgICAgICAgbUlucHV0ID0gYWluOworICAgICAgICBzZXRWYXIoMCwgYWluKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IHRoZSBpbWFnZSB0byBSR0IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYW91dCBPdXRwdXQgYWxsb2NhdGlvbi4gTXVzdCBtYXRjaCBjcmVhdGlvbiBlbGVtZW50CisgICAgICogICAgICAgICAgICAgdHlwZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmb3JFYWNoKEFsbG9jYXRpb24gYW91dCkgeworICAgICAgICBmb3JFYWNoKDAsIG51bGwsIGFvdXQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEtlcm5lbElEIGZvciB0aGlzIGludHJpbnNpYyBrZXJuZWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5LZXJuZWxJRCBUaGUgS2VybmVsSUQgb2JqZWN0LgorICAgICAqLworICAgIHB1YmxpYyBTY3JpcHQuS2VybmVsSUQgZ2V0S2VybmVsSUQoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVLZXJuZWxJRCgwLCAyLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBGaWVsZElEIGZvciB0aGUgaW5wdXQgZmllbGQgb2YgdGhpcyBpbnRyaW5zaWMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFNjcmlwdC5GaWVsZElEIFRoZSBGaWVsZElEIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU2NyaXB0LkZpZWxkSUQgZ2V0RmllbGRJRF9JbnB1dCgpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZpZWxkSUQoMCwgbnVsbCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDIuamF2YSBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2hvcnQyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4MDlmNwotLS0gL2Rldi9udWxsCisrKyBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2hvcnQyLmphdmEKQEAgLTAsMCArMSw0NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisKKy8qKgorICogQ2xhc3MgZm9yIGV4cG9zaW5nIHRoZSBuYXRpdmUgUmVuZGVyU2NyaXB0IFNob3J0MiB0eXBlIGJhY2sgdG8gdGhlIEFuZHJvaWQgc3lzdGVtLgorICoKKyAqIFZlY3RvciB2ZXJzaW9uIG9mIHRoZSBiYXNpYyBzaG9ydCB0eXBlLgorICogUHJvdmlkZXMgdHdvIHNob3J0IGZpZWxkcyBwYWNrZWQuCisgKi8KK3B1YmxpYyBjbGFzcyBTaG9ydDIgeworICAgIHB1YmxpYyBzaG9ydCB4OworICAgIHB1YmxpYyBzaG9ydCB5OworCisgICAgcHVibGljIFNob3J0MigpIHsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgU2hvcnQyKHNob3J0IGkpIHsKKyAgICAgICAgdGhpcy54ID0gdGhpcy55ID0gaTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2hvcnQyKHNob3J0IHgsIHNob3J0IHkpIHsKKyAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgdGhpcy55ID0geTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgU2hvcnQyKFNob3J0MiBzb3VyY2UpIHsKKyAgICAgICAgdGhpcy54ID0gc291cmNlLng7CisgICAgICAgIHRoaXMueSA9IHNvdXJjZS55OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkKFNob3J0MiBhKSB7CisgICAgICAgIHRoaXMueCArPSBhLng7CisgICAgICAgIHRoaXMueSArPSBhLnk7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGFkZAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFNob3J0MiBhZGQoU2hvcnQyIGEsIFNob3J0MiBiKSB7CisgICAgICAgIFNob3J0MiByZXN1bHQgPSBuZXcgU2hvcnQyKCk7CisgICAgICAgIHJlc3VsdC54ID0gKHNob3J0KShhLnggKyBiLngpOworICAgICAgICByZXN1bHQueSA9IChzaG9ydCkoYS55ICsgYi55KTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZChzaG9ydCB2YWx1ZSkgeworICAgICAgICB4ICs9IHZhbHVlOworICAgICAgICB5ICs9IHZhbHVlOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTaG9ydDIgYWRkKFNob3J0MiBhLCBzaG9ydCBiKSB7CisgICAgICAgIFNob3J0MiByZXN1bHQgPSBuZXcgU2hvcnQyKCk7CisgICAgICAgIHJlc3VsdC54ID0gKHNob3J0KShhLnggKyBiKTsKKyAgICAgICAgcmVzdWx0LnkgPSAoc2hvcnQpKGEueSArIGIpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN1YihTaG9ydDIgYSkgeworICAgICAgICB0aGlzLnggLT0gYS54OworICAgICAgICB0aGlzLnkgLT0gYS55OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFNob3J0MiBzdWIoU2hvcnQyIGEsIFNob3J0MiBiKSB7CisgICAgICAgIFNob3J0MiByZXN1bHQgPSBuZXcgU2hvcnQyKCk7CisgICAgICAgIHJlc3VsdC54ID0gKHNob3J0KShhLnggLSBiLngpOworICAgICAgICByZXN1bHQueSA9IChzaG9ydCkoYS55IC0gYi55KTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBzdWJ0cmFjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3ViKHNob3J0IHZhbHVlKSB7CisgICAgICAgIHggLT0gdmFsdWU7CisgICAgICAgIHkgLT0gdmFsdWU7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIHN1YnRyYWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2hvcnQyIHN1YihTaG9ydDIgYSwgc2hvcnQgYikgeworICAgICAgICBTaG9ydDIgcmVzdWx0ID0gbmV3IFNob3J0MigpOworICAgICAgICByZXN1bHQueCA9IChzaG9ydCkoYS54IC0gYik7CisgICAgICAgIHJlc3VsdC55ID0gKHNob3J0KShhLnkgLSBiKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtdWwoU2hvcnQyIGEpIHsKKyAgICAgICAgdGhpcy54ICo9IGEueDsKKyAgICAgICAgdGhpcy55ICo9IGEueTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTaG9ydDIgbXVsKFNob3J0MiBhLCBTaG9ydDIgYikgeworICAgICAgICBTaG9ydDIgcmVzdWx0ID0gbmV3IFNob3J0MigpOworICAgICAgICByZXN1bHQueCA9IChzaG9ydCkoYS54ICogYi54KTsKKyAgICAgICAgcmVzdWx0LnkgPSAoc2hvcnQpKGEueSAqIGIueSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgbXVsdGlwbGljYXRpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG11bChzaG9ydCB2YWx1ZSkgeworICAgICAgICB4ICo9IHZhbHVlOworICAgICAgICB5ICo9IHZhbHVlOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBtdWx0aXBsaWNhdGlvbgorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFNob3J0MiBtdWwoU2hvcnQyIGEsIHNob3J0IGIpIHsKKyAgICAgICAgU2hvcnQyIHJlc3VsdCA9IG5ldyBTaG9ydDIoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoc2hvcnQpKGEueCAqIGIpOworICAgICAgICByZXN1bHQueSA9IChzaG9ydCkoYS55ICogYik7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZGl2aXNpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGl2KFNob3J0MiBhKSB7CisgICAgICAgIHRoaXMueCAvPSBhLng7CisgICAgICAgIHRoaXMueSAvPSBhLnk7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRpdmlzaW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2hvcnQyIGRpdihTaG9ydDIgYSwgU2hvcnQyIGIpIHsKKyAgICAgICAgU2hvcnQyIHJlc3VsdCA9IG5ldyBTaG9ydDIoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoc2hvcnQpKGEueCAvIGIueCk7CisgICAgICAgIHJlc3VsdC55ID0gKHNob3J0KShhLnkgLyBiLnkpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRpdmlzaW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXYoc2hvcnQgdmFsdWUpIHsKKyAgICAgICAgeCAvPSB2YWx1ZTsKKyAgICAgICAgeSAvPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgZGl2aXNpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTaG9ydDIgZGl2KFNob3J0MiBhLCBzaG9ydCBiKSB7CisgICAgICAgIFNob3J0MiByZXN1bHQgPSBuZXcgU2hvcnQyKCk7CisgICAgICAgIHJlc3VsdC54ID0gKHNob3J0KShhLnggLyBiKTsKKyAgICAgICAgcmVzdWx0LnkgPSAoc2hvcnQpKGEueSAvIGIpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIE1vZHVsbworICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtb2QoU2hvcnQyIGEpIHsKKyAgICAgICAgdGhpcy54ICU9IGEueDsKKyAgICAgICAgdGhpcy55ICU9IGEueTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBWZWN0b3IgTW9kdWxvCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEBwYXJhbSBiCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU2hvcnQyIG1vZChTaG9ydDIgYSwgU2hvcnQyIGIpIHsKKyAgICAgICAgU2hvcnQyIHJlc3VsdCA9IG5ldyBTaG9ydDIoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoc2hvcnQpKGEueCAlIGIueCk7CisgICAgICAgIHJlc3VsdC55ID0gKHNob3J0KShhLnkgJSBiLnkpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIE1vZHVsbworICAgICAqCisgICAgICogQHBhcmFtIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHZvaWQgbW9kKHNob3J0IHZhbHVlKSB7CisgICAgICAgIHggJT0gdmFsdWU7CisgICAgICAgIHkgJT0gdmFsdWU7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIE1vZHVsbworICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFNob3J0MiBtb2QoU2hvcnQyIGEsIHNob3J0IGIpIHsKKyAgICAgICAgU2hvcnQyIHJlc3VsdCA9IG5ldyBTaG9ydDIoKTsKKyAgICAgICAgcmVzdWx0LnggPSAoc2hvcnQpKGEueCAlIGIpOworICAgICAgICByZXN1bHQueSA9IChzaG9ydCkoYS55ICUgYik7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBnZXQgdmVjdG9yIGxlbmd0aAorICAgICAqCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBzaG9ydCBsZW5ndGgoKSB7CisgICAgICAgIHJldHVybiAyOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHNldCB2ZWN0b3IgbmVnYXRlCisgICAgICovCisgICAgcHVibGljIHZvaWQgbmVnYXRlKCkgeworICAgICAgICB0aGlzLnggPSAoc2hvcnQpKC14KTsKKyAgICAgICAgdGhpcy55ID0gKHNob3J0KSgteSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogVmVjdG9yIGRvdCBQcm9kdWN0CisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc2hvcnQgZG90UHJvZHVjdChTaG9ydDIgYSkgeworICAgICAgICByZXR1cm4gKHNob3J0KSgoeCAqIGEueCkgKyAoeSAqIGEueSkpOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBkb3QgUHJvZHVjdAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHNob3J0IGRvdFByb2R1Y3QoU2hvcnQyIGEsIFNob3J0MiBiKSB7CisgICAgICAgIHJldHVybiAoc2hvcnQpKChiLnggKiBhLngpICsgKGIueSAqIGEueSkpOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIFZlY3RvciBhZGQgTXVsdGlwbGUKKyAgICAgKgorICAgICAqIEBwYXJhbSBhCisgICAgICogQHBhcmFtIGZhY3RvcgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZE11bHRpcGxlKFNob3J0MiBhLCBzaG9ydCBmYWN0b3IpIHsKKyAgICAgICAgeCArPSBhLnggKiBmYWN0b3I7CisgICAgICAgIHkgKz0gYS55ICogZmFjdG9yOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHNldCB2ZWN0b3IgdmFsdWUgYnkgU2hvcnQyCisgICAgICoKKyAgICAgKiBAcGFyYW0gYQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldChTaG9ydDIgYSkgeworICAgICAgICB0aGlzLnggPSBhLng7CisgICAgICAgIHRoaXMueSA9IGEueTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUKKyAgICAgKiBzZXQgdGhlIHZlY3RvciBmaWVsZCB2YWx1ZSBieSBTaG9ydAorICAgICAqCisgICAgICogQHBhcmFtIGEKKyAgICAgKiBAcGFyYW0gYgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlcyhzaG9ydCBhLCBzaG9ydCBiKSB7CisgICAgICAgIHRoaXMueCA9IGE7CisgICAgICAgIHRoaXMueSA9IGI7CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogcmV0dXJuIHRoZSBlbGVtZW50IHN1bSBvZiB2ZWN0b3IKKyAgICAgKgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc2hvcnQgZWxlbWVudFN1bSgpIHsKKyAgICAgICAgcmV0dXJuIChzaG9ydCkoeCArIHkpOworICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIGdldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4CisgICAgICoKKyAgICAgKiBAcGFyYW0gaQorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgc2hvcnQgZ2V0KGludCBpKSB7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICByZXR1cm4gKHNob3J0KSh4KTsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIChzaG9ydCkoeSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIHNldCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4CisgICAgICoKKyAgICAgKiBAcGFyYW0gaQorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEF0KGludCBpLCBzaG9ydCB2YWx1ZSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgeCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICB5ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXg6IGkiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBAaGlkZQorICAgICAqIGFkZCB0aGUgdmVjdG9yIGZpZWxkIHZhbHVlIGJ5IGluZGV4CisgICAgICoKKyAgICAgKiBAcGFyYW0gaQorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZEF0KGludCBpLCBzaG9ydCB2YWx1ZSkgeworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgeCArPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgeSArPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJJbmRleDogaSIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIEBoaWRlCisgICAgICogY29weSB0aGUgdmVjdG9yIHRvIHNob3J0IGFycmF5CisgICAgICoKKyAgICAgKiBAcGFyYW0gZGF0YQorICAgICAqIEBwYXJhbSBvZmZzZXQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5VG8oc2hvcnRbXSBkYXRhLCBpbnQgb2Zmc2V0KSB7CisgICAgICAgIGRhdGFbb2Zmc2V0XSA9IChzaG9ydCkoeCk7CisgICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSAoc2hvcnQpKHkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2hvcnQzLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Nob3J0My5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Nob3J0My5qYXZhCnJlbmFtZSB0byBycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Nob3J0My5qYXZhCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Nob3J0NC5qYXZhIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDQuamF2YQpyZW5hbWUgdG8gcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDQuamF2YQpkaWZmIC0tZ2l0IGEvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlLmphdmEgYi9ycy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2JmNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlLmphdmEKQEAgLTAsMCArMSw0MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OworCisvKioKKyAqIDxwPkEgVHlwZSBkZXNjcmliZXMgdGhlIHtAbGluayBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50fSBhbmQgZGltZW5zaW9ucyB1c2VkIGZvciBhbiB7QGxpbmsKKyAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb259IG9yIGEgcGFyYWxsZWwgb3BlcmF0aW9uLiBUeXBlcyBhcmUgY3JlYXRlZCB0aHJvdWdoIHtAbGluaworICogYW5kcm9pZC5yZW5kZXJzY3JpcHQuVHlwZS5CdWlsZGVyfS48L3A+CisgKgorICogPHA+QSBUeXBlIGFsd2F5cyBpbmNsdWRlcyBhbiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudH0gYW5kIGFuIFgKKyAqIGRpbWVuc2lvbi4gQSBUeXBlIG1heSBiZSBtdWx0aWRpbWVuc2lvbmFsLCB1cCB0byB0aHJlZSBkaW1lbnNpb25zLiBBIG5vbnplcm8KKyAqIHZhbHVlIGluIHRoZSBZIG9yIFogZGltZW5zaW9ucyBpbmRpY2F0ZXMgdGhhdCB0aGUgZGltZW5zaW9uIGlzIHByZXNlbnQuIE5vdGUKKyAqIHRoYXQgYSBUeXBlIHdpdGggb25seSBhIGdpdmVuIFggZGltZW5zaW9uIGFuZCBhIFR5cGUgd2l0aCB0aGUgc2FtZSBYCisgKiBkaW1lbnNpb24gYnV0IFkgPSAxIGFyZSBub3QgZXF1aXZhbGVudC48L3A+CisgKgorICogPHA+QSBUeXBlIGFsc28gc3VwcG9ydHMgaW5jbHVzaW9uIG9mIGxldmVsIG9mIGRldGFpbCAoTE9EKSBvciBjdWJlIG1hcAorICogZmFjZXMuIExPRCBhbmQgY3ViZSBtYXAgZmFjZXMgYXJlIGJvb2xlYW5zIHRvIGluZGljYXRlIHByZXNlbnQgb3Igbm90CisgKiBwcmVzZW50LiA8L3A+CisgKgorICogPHA+QSBUeXBlIGFsc28gc3VwcG9ydHMgWVVWIGZvcm1hdCBpbmZvcm1hdGlvbiB0byBzdXBwb3J0IGFuCisgKiB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbn0gaW4gYSBZVVYgZm9ybWF0LiBUaGUgWVVWIGZvcm1hdHMKKyAqIHN1cHBvcnRlZCBhcmUge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuSW1hZ2VGb3JtYXQjWVYxMn0sCisgKiB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdCNOVjIxfSwgYW5kCisgKiB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdCNZVVZfNDIwXzg4OH08L3A+CisgKgorICogPGRpdiBjbGFzcz0ic3BlY2lhbCByZWZlcmVuY2UiPgorICogPGgzPkRldmVsb3BlciBHdWlkZXM8L2gzPgorICogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIFJlbmRlclNjcmlwdCwgcmVhZCB0aGUKKyAqIDxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVuZGVyc2NyaXB0L2luZGV4Lmh0bWwiPlJlbmRlclNjcmlwdDwvYT4gZGV2ZWxvcGVyIGd1aWRlLjwvcD4KKyAqIDwvZGl2PgorICoqLworcHVibGljIGNsYXNzIFR5cGUgZXh0ZW5kcyBCYXNlT2JqIHsKKyAgICBpbnQgbURpbVg7CisgICAgaW50IG1EaW1ZOworICAgIGludCBtRGltWjsKKyAgICBib29sZWFuIG1EaW1NaXBtYXBzOworICAgIGJvb2xlYW4gbURpbUZhY2VzOworICAgIGludCBtRGltWXV2OworICAgIGludCBtRWxlbWVudENvdW50OworICAgIEVsZW1lbnQgbUVsZW1lbnQ7CisKKyAgICBwdWJsaWMgZW51bSBDdWJlbWFwRmFjZSB7CisgICAgICAgIFBPU0lUSVZFX1ggKDApLAorICAgICAgICBORUdBVElWRV9YICgxKSwKKyAgICAgICAgUE9TSVRJVkVfWSAoMiksCisgICAgICAgIE5FR0FUSVZFX1kgKDMpLAorICAgICAgICBQT1NJVElWRV9aICg0KSwKKyAgICAgICAgTkVHQVRJVkVfWiAoNSksCisgICAgICAgIEBEZXByZWNhdGVkCisgICAgICAgIFBPU0lUVkVfWCAoMCksCisgICAgICAgIEBEZXByZWNhdGVkCisgICAgICAgIFBPU0lUVkVfWSAoMiksCisgICAgICAgIEBEZXByZWNhdGVkCisgICAgICAgIFBPU0lUVkVfWiAoNCk7CisKKyAgICAgICAgaW50IG1JRDsKKyAgICAgICAgQ3ViZW1hcEZhY2UoaW50IGlkKSB7CisgICAgICAgICAgICBtSUQgPSBpZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBUeXBlLgorICAgICAqCisgICAgICogQHJldHVybiBFbGVtZW50CisgICAgICovCisgICAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIG1FbGVtZW50OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIFggZGltZW5zaW9uLgorICAgICAqCisgICAgICogQHJldHVybiBpbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFgoKSB7CisgICAgICAgIHJldHVybiBtRGltWDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBZIGRpbWVuc2lvbiBvciAwIGZvciBhIDFEIGFsbG9jYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGludAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0WSgpIHsKKyAgICAgICAgcmV0dXJuIG1EaW1ZOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIFogZGltZW5zaW9uIG9yIDAgZm9yIGEgMUQgb3IgMkQgYWxsb2NhdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gaW50CisgICAgICovCisgICAgcHVibGljIGludCBnZXRaKCkgeworICAgICAgICByZXR1cm4gbURpbVo7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBZVVYgZm9ybWF0CisgICAgICoKKyAgICAgKgorICAgICAqIEByZXR1cm4gaW50CisgICAgICovCisgICAgcHVibGljIGludCBnZXRZdXYoKSB7CisgICAgICAgIHJldHVybiBtRGltWXV2OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBpZiB0aGUgVHlwZSBoYXMgYSBtaXBtYXAgY2hhaW4uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGJvb2xlYW4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNNaXBtYXBzKCkgeworICAgICAgICByZXR1cm4gbURpbU1pcG1hcHM7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGlmIHRoZSBUeXBlIGlzIGEgY3ViZSBtYXAuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGJvb2xlYW4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNGYWNlcygpIHsKKyAgICAgICAgcmV0dXJuIG1EaW1GYWNlczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBhY2Nlc3NhYmxlIGNlbGxzIGluIHRoZSBUeXBlLgorICAgICAqCisgICAgICogQHJldHVybiBpbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldENvdW50KCkgeworICAgICAgICByZXR1cm4gbUVsZW1lbnRDb3VudDsKKyAgICB9CisKKyAgICB2b2lkIGNhbGNFbGVtZW50Q291bnQoKSB7CisgICAgICAgIGJvb2xlYW4gaGFzTG9kID0gaGFzTWlwbWFwcygpOworICAgICAgICBpbnQgeCA9IGdldFgoKTsKKyAgICAgICAgaW50IHkgPSBnZXRZKCk7CisgICAgICAgIGludCB6ID0gZ2V0WigpOworICAgICAgICBpbnQgZmFjZXMgPSAxOworICAgICAgICBpZiAoaGFzRmFjZXMoKSkgeworICAgICAgICAgICAgZmFjZXMgPSA2OworICAgICAgICB9CisgICAgICAgIGlmICh4ID09IDApIHsKKyAgICAgICAgICAgIHggPSAxOworICAgICAgICB9CisgICAgICAgIGlmICh5ID09IDApIHsKKyAgICAgICAgICAgIHkgPSAxOworICAgICAgICB9CisgICAgICAgIGlmICh6ID09IDApIHsKKyAgICAgICAgICAgIHogPSAxOworICAgICAgICB9CisKKyAgICAgICAgaW50IGNvdW50ID0geCAqIHkgKiB6ICogZmFjZXM7CisKKyAgICAgICAgd2hpbGUgKGhhc0xvZCAmJiAoKHggPiAxKSB8fCAoeSA+IDEpIHx8ICh6ID4gMSkpKSB7CisgICAgICAgICAgICBpZih4ID4gMSkgeworICAgICAgICAgICAgICAgIHggPj49IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZih5ID4gMSkgeworICAgICAgICAgICAgICAgIHkgPj49IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZih6ID4gMSkgeworICAgICAgICAgICAgICAgIHogPj49IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvdW50ICs9IHggKiB5ICogeiAqIGZhY2VzOworICAgICAgICB9CisgICAgICAgIG1FbGVtZW50Q291bnQgPSBjb3VudDsKKyAgICB9CisKKworICAgIFR5cGUobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgICAgIHN1cGVyKGlkLCBycyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCB1cGRhdGVGcm9tTmF0aXZlKCkgeworICAgICAgICAvLyBGSVhNRTogcnNhVHlwZUdldE5hdGl2ZURhdGEgbmVlZHMgMzItYml0IGFuZCA2NC1iaXQgcGF0aHMKKworICAgICAgICAvLyBXZSBoYXZlIDYgaW50ZWdlciB0byBvYnRhaW4gbURpbVg7IG1EaW1ZOyBtRGltWjsKKyAgICAgICAgLy8gbURpbUxPRDsgbURpbUZhY2VzOyBtRWxlbWVudDsKKyAgICAgICAgaW50W10gZGF0YUJ1ZmZlciA9IG5ldyBpbnRbNl07CisgICAgICAgIG1SUy5uVHlwZUdldE5hdGl2ZURhdGEoKGludClnZXRJRChtUlMpLCBkYXRhQnVmZmVyKTsKKworICAgICAgICBtRGltWCA9IGRhdGFCdWZmZXJbMF07CisgICAgICAgIG1EaW1ZID0gZGF0YUJ1ZmZlclsxXTsKKyAgICAgICAgbURpbVogPSBkYXRhQnVmZmVyWzJdOworICAgICAgICBtRGltTWlwbWFwcyA9IGRhdGFCdWZmZXJbM10gPT0gMSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgbURpbUZhY2VzID0gZGF0YUJ1ZmZlcls0XSA9PSAxID8gdHJ1ZSA6IGZhbHNlOworCisgICAgICAgIGludCBlbGVtZW50SUQgPSBkYXRhQnVmZmVyWzVdOworICAgICAgICBpZihlbGVtZW50SUQgIT0gMCkgeworICAgICAgICAgICAgbUVsZW1lbnQgPSBuZXcgRWxlbWVudChlbGVtZW50SUQsIG1SUyk7CisgICAgICAgICAgICBtRWxlbWVudC51cGRhdGVGcm9tTmF0aXZlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2FsY0VsZW1lbnRDb3VudCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGJhc2ljIDFEIHR5cGVzLiBUaGUgdHlwZSBpcworICAgICAqIGNyZWF0ZWQgd2l0aG91dCBtaXBtYXBzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgVGhlIFJlbmRlclNjcmlwdCBjb250ZXh0CisgICAgICogQHBhcmFtIGUgVGhlIEVsZW1lbnQgZm9yIHRoZSBUeXBlCisgICAgICogQHBhcmFtIGRpbVggVGhlIFggZGltZW5zaW9uLCBtdXN0IGJlID4gMAorICAgICAqCisgICAgICogQHJldHVybiBUeXBlCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBUeXBlIGNyZWF0ZVgoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUsIGludCBkaW1YKSB7CisgICAgICAgIGlmIChkaW1YIDwgMSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJEaW1lbnNpb24gbXVzdCBiZSA+PSAxLiIpOworICAgICAgICB9CisKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5UeXBlQ3JlYXRlKGUuZ2V0SUQocnMpLCBkaW1YLCAwLCAwLCBmYWxzZSwgZmFsc2UsIDApOworICAgICAgICBUeXBlIHQgPSBuZXcgVHlwZShpZCwgcnMpOworICAgICAgICB0Lm1FbGVtZW50ID0gZTsKKyAgICAgICAgdC5tRGltWCA9IGRpbVg7CisgICAgICAgIHQuY2FsY0VsZW1lbnRDb3VudCgpOworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBiYXNpYyAyRCB0eXBlcy4gVGhlIHR5cGUgaXMKKyAgICAgKiBjcmVhdGVkIHdpdGhvdXQgbWlwbWFwcyBvciBjdWJlbWFwcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBUaGUgUmVuZGVyU2NyaXB0IGNvbnRleHQKKyAgICAgKiBAcGFyYW0gZSBUaGUgRWxlbWVudCBmb3IgdGhlIFR5cGUKKyAgICAgKiBAcGFyYW0gZGltWCBUaGUgWCBkaW1lbnNpb24sIG11c3QgYmUgPiAwCisgICAgICogQHBhcmFtIGRpbVkgVGhlIFkgZGltZW5zaW9uLCBtdXN0IGJlID4gMAorICAgICAqCisgICAgICogQHJldHVybiBUeXBlCisgICAgICovCisgICAgc3RhdGljIHB1YmxpYyBUeXBlIGNyZWF0ZVhZKFJlbmRlclNjcmlwdCBycywgRWxlbWVudCBlLCBpbnQgZGltWCwgaW50IGRpbVkpIHsKKyAgICAgICAgaWYgKChkaW1YIDwgMSkgfHwgKGRpbVkgPCAxKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJEaW1lbnNpb24gbXVzdCBiZSA+PSAxLiIpOworICAgICAgICB9CisKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5UeXBlQ3JlYXRlKGUuZ2V0SUQocnMpLCBkaW1YLCBkaW1ZLCAwLCBmYWxzZSwgZmFsc2UsIDApOworICAgICAgICBUeXBlIHQgPSBuZXcgVHlwZShpZCwgcnMpOworICAgICAgICB0Lm1FbGVtZW50ID0gZTsKKyAgICAgICAgdC5tRGltWCA9IGRpbVg7CisgICAgICAgIHQubURpbVkgPSBkaW1ZOworICAgICAgICB0LmNhbGNFbGVtZW50Q291bnQoKTsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYmFzaWMgM0QgdHlwZXMuIFRoZSB0eXBlIGlzCisgICAgICogY3JlYXRlZCB3aXRob3V0IG1pcG1hcHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcnMgVGhlIFJlbmRlclNjcmlwdCBjb250ZXh0CisgICAgICogQHBhcmFtIGUgVGhlIEVsZW1lbnQgZm9yIHRoZSBUeXBlCisgICAgICogQHBhcmFtIGRpbVggVGhlIFggZGltZW5zaW9uLCBtdXN0IGJlID4gMAorICAgICAqIEBwYXJhbSBkaW1ZIFRoZSBZIGRpbWVuc2lvbiwgbXVzdCBiZSA+IDAKKyAgICAgKiBAcGFyYW0gZGltWiBUaGUgWiBkaW1lbnNpb24sIG11c3QgYmUgPiAwCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFR5cGUKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIFR5cGUgY3JlYXRlWFlaKFJlbmRlclNjcmlwdCBycywgRWxlbWVudCBlLCBpbnQgZGltWCwgaW50IGRpbVksIGludCBkaW1aKSB7CisgICAgICAgIGlmICgoZGltWCA8IDEpIHx8IChkaW1ZIDwgMSkgfHwgKGRpbVogPCAxKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJEaW1lbnNpb24gbXVzdCBiZSA+PSAxLiIpOworICAgICAgICB9CisKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5UeXBlQ3JlYXRlKGUuZ2V0SUQocnMpLCBkaW1YLCBkaW1ZLCBkaW1aLCBmYWxzZSwgZmFsc2UsIDApOworICAgICAgICBUeXBlIHQgPSBuZXcgVHlwZShpZCwgcnMpOworICAgICAgICB0Lm1FbGVtZW50ID0gZTsKKyAgICAgICAgdC5tRGltWCA9IGRpbVg7CisgICAgICAgIHQubURpbVkgPSBkaW1ZOworICAgICAgICB0Lm1EaW1aID0gZGltWjsKKyAgICAgICAgdC5jYWxjRWxlbWVudENvdW50KCk7CisgICAgICAgIHJldHVybiB0OworICAgIH0KKworICAgIC8qKgorICAgICAqIEJ1aWxkZXIgY2xhc3MgZm9yIFR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgeworICAgICAgICBSZW5kZXJTY3JpcHQgbVJTOworICAgICAgICBpbnQgbURpbVggPSAxOworICAgICAgICBpbnQgbURpbVk7CisgICAgICAgIGludCBtRGltWjsKKyAgICAgICAgYm9vbGVhbiBtRGltTWlwbWFwczsKKyAgICAgICAgYm9vbGVhbiBtRGltRmFjZXM7CisgICAgICAgIGludCBtWXV2OworCisgICAgICAgIEVsZW1lbnQgbUVsZW1lbnQ7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZSBhIG5ldyBidWlsZGVyIG9iamVjdC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHJzCisgICAgICAgICAqIEBwYXJhbSBlIFRoZSBlbGVtZW50IGZvciB0aGUgdHlwZSB0byBiZSBjcmVhdGVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUpIHsKKyAgICAgICAgICAgIGUuY2hlY2tWYWxpZCgpOworICAgICAgICAgICAgbVJTID0gcnM7CisgICAgICAgICAgICBtRWxlbWVudCA9IGU7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQWRkIGEgZGltZW5zaW9uIHRvIHRoZSBUeXBlLgorICAgICAgICAgKgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gdmFsdWUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFgoaW50IHZhbHVlKSB7CisgICAgICAgICAgICBpZih2YWx1ZSA8IDEpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlZhbHVlcyBvZiBsZXNzIHRoYW4gMSBmb3IgRGltZW5zaW9uIFggYXJlIG5vdCB2YWxpZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1EaW1YID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFkoaW50IHZhbHVlKSB7CisgICAgICAgICAgICBpZih2YWx1ZSA8IDEpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlZhbHVlcyBvZiBsZXNzIHRoYW4gMSBmb3IgRGltZW5zaW9uIFkgYXJlIG5vdCB2YWxpZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1EaW1ZID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFooaW50IHZhbHVlKSB7CisgICAgICAgICAgICBpZih2YWx1ZSA8IDEpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlZhbHVlcyBvZiBsZXNzIHRoYW4gMSBmb3IgRGltZW5zaW9uIFogYXJlIG5vdCB2YWxpZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1EaW1aID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE1pcG1hcHMoYm9vbGVhbiB2YWx1ZSkgeworICAgICAgICAgICAgbURpbU1pcG1hcHMgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RmFjZXMoYm9vbGVhbiB2YWx1ZSkgeworICAgICAgICAgICAgbURpbUZhY2VzID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIFlVViBsYXlvdXQgZm9yIGEgVHlwZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHl1dkZvcm1hdCB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdCNZVjEyfSwge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MuSW1hZ2VGb3JtYXQjTlYyMX0sIG9yCisgICAgICAgICAqIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLkltYWdlRm9ybWF0I1lVVl80MjBfODg4fS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFl1dkZvcm1hdChpbnQgeXV2Rm9ybWF0KSB7CisgICAgICAgICAgICBzd2l0Y2ggKHl1dkZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBhbmRyb2lkLmdyYXBoaWNzLkltYWdlRm9ybWF0Lk5WMjE6CisgICAgICAgICAgICBjYXNlIGFuZHJvaWQuZ3JhcGhpY3MuSW1hZ2VGb3JtYXQuWVYxMjoKKyAgICAgICAgICAgIGNhc2UgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdC5ZVVZfNDIwXzg4ODoKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJPbmx5IEltYWdlRm9ybWF0Lk5WMjEsIC5ZVjEyLCBhbmQgLllVVl80MjBfODg4IGFyZSBzdXBwb3J0ZWQuLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtWXV2ID0geXV2Rm9ybWF0OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworCisgICAgICAgIC8qKgorICAgICAgICAgKiBWYWxpZGF0ZSBzdHJ1Y3R1cmUgYW5kIGNyZWF0ZSBhIG5ldyBUeXBlLgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIFR5cGUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBUeXBlIGNyZWF0ZSgpIHsKKyAgICAgICAgICAgIGlmIChtRGltWiA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoKG1EaW1YIDwgMSkgfHwgKG1EaW1ZIDwgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJCb3RoIFggYW5kIFkgZGltZW5zaW9uIHJlcXVpcmVkIHdoZW4gWiBpcyBwcmVzZW50LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobURpbUZhY2VzKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ3ViZSBtYXBzIG5vdCBzdXBwb3J0ZWQgd2l0aCAzRCB0eXBlcy4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobURpbVkgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKG1EaW1YIDwgMSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIlggZGltZW5zaW9uIHJlcXVpcmVkIHdoZW4gWSBpcyBwcmVzZW50LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtRGltRmFjZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAobURpbVkgPCAxKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigiQ3ViZSBtYXBzIHJlcXVpcmUgMkQgVHlwZXMuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVl1diAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKChtRGltWiAhPSAwKSB8fCBtRGltRmFjZXMgfHwgbURpbU1pcG1hcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJZVVYgb25seSBzdXBwb3J0cyBiYXNpYyAyRC4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvbmcgaWQgPSBtUlMublR5cGVDcmVhdGUobUVsZW1lbnQuZ2V0SUQobVJTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGltWCwgbURpbVksIG1EaW1aLCBtRGltTWlwbWFwcywgbURpbUZhY2VzLCBtWXV2KTsKKyAgICAgICAgICAgIFR5cGUgdCA9IG5ldyBUeXBlKGlkLCBtUlMpOworICAgICAgICAgICAgdC5tRWxlbWVudCA9IG1FbGVtZW50OworICAgICAgICAgICAgdC5tRGltWCA9IG1EaW1YOworICAgICAgICAgICAgdC5tRGltWSA9IG1EaW1ZOworICAgICAgICAgICAgdC5tRGltWiA9IG1EaW1aOworICAgICAgICAgICAgdC5tRGltTWlwbWFwcyA9IG1EaW1NaXBtYXBzOworICAgICAgICAgICAgdC5tRGltRmFjZXMgPSBtRGltRmFjZXM7CisgICAgICAgICAgICB0Lm1EaW1ZdXYgPSBtWXV2OworCisgICAgICAgICAgICB0LmNhbGNFbGVtZW50Q291bnQoKTsKKyAgICAgICAgICAgIHJldHVybiB0OworICAgICAgICB9CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L3BhY2thZ2UuaHRtbCBiL3JzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvcGFja2FnZS5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L3BhY2thZ2UuaHRtbApyZW5hbWUgdG8gcnMvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9wYWNrYWdlLmh0bWwKZGlmZiAtLWdpdCBhL3JzL2puaS9BbmRyb2lkLm1rIGIvcnMvam5pL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiNWIzYgotLS0gL2Rldi9udWxsCisrKyBiL3JzL2puaS9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMzggQEAKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUzo9IFwKKyAgICBhbmRyb2lkX3JlbmRlcnNjcmlwdF9SZW5kZXJTY3JpcHQuY3BwCisKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAorICAgICAgICBsaWJhbmRyb2lkX3J1bnRpbWUgXAorICAgICAgICBsaWJhbmRyb2lkZncgXAorICAgICAgICBsaWJuYXRpdmVoZWxwZXIgXAorICAgICAgICBsaWJSUyBcCisgICAgICAgIGxpYmN1dGlscyBcCisgICAgICAgIGxpYmxvZyBcCisgICAgICAgIGxpYnNraWEgXAorICAgICAgICBsaWJ1dGlscyBcCisgICAgICAgIGxpYnVpIFwKKyAgICAgICAgbGliZ3VpCisKK0xPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0KKworcnNfZ2VuZXJhdGVkX2luY2x1ZGVfZGlyIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsU0hBUkVEX0xJQlJBUklFUyxsaWJSUywsKQorCitMT0NBTF9DX0lOQ0xVREVTICs9IFwKKwkkKEpOSV9IX0lOQ0xVREUpIFwKKwlmcmFtZXdvcmtzL3JzIFwKKwkkKHJzX2dlbmVyYXRlZF9pbmNsdWRlX2RpcikgXAorCSQoY2FsbCBpbmNsdWRlLXBhdGgtZm9yLCBjb3JlY2cgZ3JhcGhpY3MpCisKK0xPQ0FMX0NGTEFHUyArPSAtV25vLXVudXNlZC1wYXJhbWV0ZXIKKworTE9DQUxfTERMSUJTIDo9IC1scHRocmVhZAorTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChhZGRwcmVmaXggJChyc19nZW5lcmF0ZWRfaW5jbHVkZV9kaXIpLyxyc2dBcGlGdW5jRGVjbC5oKQorTE9DQUxfTU9EVUxFOj0gbGlicnNfam5pCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyArPSAkKHJzX2dlbmVyYXRlZF9zb3VyY2UpCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSBsaWJSUyBsaWJSU0RyaXZlcgorCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9ycy9qbmkvYW5kcm9pZF9yZW5kZXJzY3JpcHRfUmVuZGVyU2NyaXB0LmNwcCBiL3JzL2puaS9hbmRyb2lkX3JlbmRlcnNjcmlwdF9SZW5kZXJTY3JpcHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZjNhODMKLS0tIC9kZXYvbnVsbAorKysgYi9ycy9qbmkvYW5kcm9pZF9yZW5kZXJzY3JpcHRfUmVuZGVyU2NyaXB0LmNwcApAQCAtMCwwICsxLDE2NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAibGliUlNfam5pIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx1dGlscy9taXNjLmg+CisKKyNpbmNsdWRlIDxjb3JlL1NrQml0bWFwLmg+CisjaW5jbHVkZSA8Y29yZS9Ta1BpeGVsUmVmLmg+CisjaW5jbHVkZSA8Y29yZS9Ta1N0cmVhbS5oPgorI2luY2x1ZGUgPGNvcmUvU2tUZW1wbGF0ZXMuaD4KKworI2luY2x1ZGUgPGFuZHJvaWRmdy9Bc3NldC5oPgorI2luY2x1ZGUgPGFuZHJvaWRmdy9Bc3NldE1hbmFnZXIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oPgorCisjaW5jbHVkZSAiam5pLmgiCisjaW5jbHVkZSAiSk5JSGVscC5oIgorI2luY2x1ZGUgImFuZHJvaWRfcnVudGltZS9BbmRyb2lkUnVudGltZS5oIgorI2luY2x1ZGUgImFuZHJvaWRfcnVudGltZS9hbmRyb2lkX3ZpZXdfU3VyZmFjZS5oIgorI2luY2x1ZGUgImFuZHJvaWRfcnVudGltZS9hbmRyb2lkX3V0aWxfQXNzZXRNYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDxycy5oPgorI2luY2x1ZGUgPHJzRW52Lmg+CisjaW5jbHVkZSA8Z3VpL1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxndWkvR0xDb25zdW1lci5oPgorI2luY2x1ZGUgPGd1aS9TdXJmYWNlLmg+CisjaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL2FuZHJvaWRfZ3JhcGhpY3NfU3VyZmFjZVRleHR1cmUuaD4KKworLy8jZGVmaW5lIExPR19BUEkgQUxPR0UKKyNkZWZpbmUgTE9HX0FQSSguLi4pCisKK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOworCisjZGVmaW5lIFBFUl9BUlJBWV9UWVBFKGZsYWcsIGZuYywgLi4uKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGppbnQgbGVuID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkICpwdHIgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc2l6ZV90IHR5cGVCeXRlcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN3aXRjaChkYXRhVHlwZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFJTX1RZUEVfRkxPQVRfMzI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKChqZmxvYXRBcnJheSlkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwdHIgPSBfZW52LT5HZXRGbG9hdEFycmF5RWxlbWVudHMoKGpmbG9hdEFycmF5KWRhdGEsIGZsYWcpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdHlwZUJ5dGVzID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZuYyhfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfZW52LT5SZWxlYXNlRmxvYXRBcnJheUVsZW1lbnRzKChqZmxvYXRBcnJheSlkYXRhLCAoamZsb2F0ICopcHRyLCBKTklfQUJPUlQpOyAgIFwKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBSU19UWVBFX0ZMT0FUXzY0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aCgoamRvdWJsZUFycmF5KWRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHRyID0gX2Vudi0+R2V0RG91YmxlQXJyYXlFbGVtZW50cygoamRvdWJsZUFycmF5KWRhdGEsIGZsYWcpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGVCeXRlcyA9IDg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmbmMoX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2Vudi0+UmVsZWFzZURvdWJsZUFycmF5RWxlbWVudHMoKGpkb3VibGVBcnJheSlkYXRhLCAoamRvdWJsZSAqKXB0ciwgSk5JX0FCT1JUKTtcCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUlNfVFlQRV9TSUdORURfODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFJTX1RZUEVfVU5TSUdORURfODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKChqYnl0ZUFycmF5KWRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cygoamJ5dGVBcnJheSlkYXRhLCBmbGFnKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdHlwZUJ5dGVzID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZuYyhfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoKGpieXRlQXJyYXkpZGF0YSwgKGpieXRlKilwdHIsIEpOSV9BQk9SVCk7ICAgICAgIFwKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBSU19UWVBFX1NJR05FRF8xNjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUlNfVFlQRV9VTlNJR05FRF8xNjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoKGpzaG9ydEFycmF5KWRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHB0ciA9IF9lbnYtPkdldFNob3J0QXJyYXlFbGVtZW50cygoanNob3J0QXJyYXkpZGF0YSwgZmxhZyk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0eXBlQnl0ZXMgPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm5jKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9lbnYtPlJlbGVhc2VTaG9ydEFycmF5RWxlbWVudHMoKGpzaG9ydEFycmF5KWRhdGEsIChqc2hvcnQgKilwdHIsIEpOSV9BQk9SVCk7ICAgXAorICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFJTX1RZUEVfU0lHTkVEXzMyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBSU19UWVBFX1VOU0lHTkVEXzMyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aCgoamludEFycmF5KWRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cygoamludEFycmF5KWRhdGEsIGZsYWcpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGVCeXRlcyA9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmbmMoX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoKGppbnRBcnJheSlkYXRhLCAoamludCAqKXB0ciwgSk5JX0FCT1JUKTsgICAgICAgICBcCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUlNfVFlQRV9TSUdORURfNjQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFJTX1RZUEVfVU5TSUdORURfNjQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKChqbG9uZ0FycmF5KWRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwdHIgPSBfZW52LT5HZXRMb25nQXJyYXlFbGVtZW50cygoamxvbmdBcnJheSlkYXRhLCBmbGFnKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdHlwZUJ5dGVzID0gODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZuYyhfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfZW52LT5SZWxlYXNlTG9uZ0FycmF5RWxlbWVudHMoKGpsb25nQXJyYXkpZGF0YSwgKGpsb25nICopcHRyLCBKTklfQUJPUlQpOyAgICAgIFwKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKworY2xhc3MgQXV0b0phdmFTdHJpbmdUb1VURjggeworcHVibGljOgorICAgIEF1dG9KYXZhU3RyaW5nVG9VVEY4KEpOSUVudiogZW52LCBqc3RyaW5nIHN0cikgOiBmRW52KGVudiksIGZKU3RyKHN0cikgeworICAgICAgICBmQ1N0ciA9IGVudi0+R2V0U3RyaW5nVVRGQ2hhcnMoc3RyLCBOVUxMKTsKKyAgICAgICAgZkxlbmd0aCA9IGVudi0+R2V0U3RyaW5nVVRGTGVuZ3RoKHN0cik7CisgICAgfQorICAgIH5BdXRvSmF2YVN0cmluZ1RvVVRGOCgpIHsKKyAgICAgICAgZkVudi0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGZKU3RyLCBmQ1N0cik7CisgICAgfQorICAgIGNvbnN0IGNoYXIqIGNfc3RyKCkgY29uc3QgeyByZXR1cm4gZkNTdHI7IH0KKyAgICBqc2l6ZSBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBmTGVuZ3RoOyB9CisKK3ByaXZhdGU6CisgICAgSk5JRW52KiAgICAgZkVudjsKKyAgICBqc3RyaW5nICAgICBmSlN0cjsKKyAgICBjb25zdCBjaGFyKiBmQ1N0cjsKKyAgICBqc2l6ZSAgICAgICBmTGVuZ3RoOworfTsKKworY2xhc3MgQXV0b0phdmFTdHJpbmdBcnJheVRvVVRGOCB7CitwdWJsaWM6CisgICAgQXV0b0phdmFTdHJpbmdBcnJheVRvVVRGOChKTklFbnYqIGVudiwgam9iamVjdEFycmF5IHN0cmluZ3MsIGpzaXplIHN0cmluZ3NMZW5ndGgpCisgICAgOiBtRW52KGVudiksIG1TdHJpbmdzKHN0cmluZ3MpLCBtU3RyaW5nc0xlbmd0aChzdHJpbmdzTGVuZ3RoKSB7CisgICAgICAgIG1DU3RyaW5ncyA9IE5VTEw7CisgICAgICAgIG1TaXplQXJyYXkgPSBOVUxMOworICAgICAgICBpZiAoc3RyaW5nc0xlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIG1DU3RyaW5ncyA9IChjb25zdCBjaGFyICoqKWNhbGxvYyhzdHJpbmdzTGVuZ3RoLCBzaXplb2YoY2hhciAqKSk7CisgICAgICAgICAgICBtU2l6ZUFycmF5ID0gKHNpemVfdCopY2FsbG9jKHN0cmluZ3NMZW5ndGgsIHNpemVvZihzaXplX3QpKTsKKyAgICAgICAgICAgIGZvciAoanNpemUgY3QgPSAwOyBjdCA8IHN0cmluZ3NMZW5ndGg7IGN0ICsrKSB7CisgICAgICAgICAgICAgICAganN0cmluZyBzID0gKGpzdHJpbmcpbUVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KG1TdHJpbmdzLCBjdCk7CisgICAgICAgICAgICAgICAgbUNTdHJpbmdzW2N0XSA9IG1FbnYtPkdldFN0cmluZ1VURkNoYXJzKHMsIE5VTEwpOworICAgICAgICAgICAgICAgIG1TaXplQXJyYXlbY3RdID0gbUVudi0+R2V0U3RyaW5nVVRGTGVuZ3RoKHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIH5BdXRvSmF2YVN0cmluZ0FycmF5VG9VVEY4KCkgeworICAgICAgICBmb3IgKGpzaXplIGN0PTA7IGN0IDwgbVN0cmluZ3NMZW5ndGg7IGN0KyspIHsKKyAgICAgICAgICAgIGpzdHJpbmcgcyA9IChqc3RyaW5nKW1FbnYtPkdldE9iamVjdEFycmF5RWxlbWVudChtU3RyaW5ncywgY3QpOworICAgICAgICAgICAgbUVudi0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKHMsIG1DU3RyaW5nc1tjdF0pOworICAgICAgICB9CisgICAgICAgIGZyZWUobUNTdHJpbmdzKTsKKyAgICAgICAgZnJlZShtU2l6ZUFycmF5KTsKKyAgICB9CisgICAgY29uc3QgY2hhciAqKmNfc3RyKCkgY29uc3QgeyByZXR1cm4gbUNTdHJpbmdzOyB9CisgICAgc2l6ZV90ICpjX3N0cl9sZW4oKSBjb25zdCB7IHJldHVybiBtU2l6ZUFycmF5OyB9CisgICAganNpemUgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbVN0cmluZ3NMZW5ndGg7IH0KKworcHJpdmF0ZToKKyAgICBKTklFbnYgICAgICAqbUVudjsKKyAgICBqb2JqZWN0QXJyYXkgbVN0cmluZ3M7CisgICAgY29uc3QgY2hhciAqKm1DU3RyaW5nczsKKyAgICBzaXplX3QgICAgICAqbVNpemVBcnJheTsKKyAgICBqc2l6ZSAgICAgICAgbVN0cmluZ3NMZW5ndGg7Cit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIGpmaWVsZElEIGdDb250ZXh0SWQgPSAwOworc3RhdGljIGpmaWVsZElEIGdOYXRpdmVCaXRtYXBJRCA9IDA7CitzdGF0aWMgamZpZWxkSUQgZ1R5cGVOYXRpdmVDYWNoZSA9IDA7CisKK3N0YXRpYyB2b2lkIF9uSW5pdChKTklFbnYgKl9lbnYsIGpjbGFzcyBfdGhpcykKK3sKKyAgICBnQ29udGV4dElkICAgICAgICAgICAgID0gX2Vudi0+R2V0RmllbGRJRChfdGhpcywgIm1Db250ZXh0IiwgIkoiKTsKKworICAgIGpjbGFzcyBiaXRtYXBDbGFzcyA9IF9lbnYtPkZpbmRDbGFzcygiYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAiKTsKKyAgICBnTmF0aXZlQml0bWFwSUQgPSBfZW52LT5HZXRGaWVsZElEKGJpdG1hcENsYXNzLCAibU5hdGl2ZUJpdG1hcCIsICJJIik7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgdm9pZAorbkNvbnRleHRGaW5pc2goSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24pCit7CisgICAgTE9HX0FQSSgibkNvbnRleHRGaW5pc2gsIGNvbiglcCkiLCAoUnNDb250ZXh0KWNvbik7CisgICAgcnNDb250ZXh0RmluaXNoKChSc0NvbnRleHQpY29uKTsKK30KKworc3RhdGljIHZvaWQKK25Bc3NpZ25OYW1lKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBvYmosIGpieXRlQXJyYXkgc3RyKQoreworICAgIExPR19BUEkoIm5Bc3NpZ25OYW1lLCBjb24oJXApLCBvYmooJXApIiwgKFJzQ29udGV4dCljb24sICh2b2lkICopb2JqKTsKKyAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHN0cik7CisgICAgamJ5dGUgKiBjcHRyID0gKGpieXRlICopIF9lbnYtPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoc3RyLCAwKTsKKyAgICByc0Fzc2lnbk5hbWUoKFJzQ29udGV4dCljb24sICh2b2lkICopb2JqLCAoY29uc3QgY2hhciAqKWNwdHIsIGxlbik7CisgICAgX2Vudi0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoc3RyLCBjcHRyLCBKTklfQUJPUlQpOworfQorCitzdGF0aWMganN0cmluZworbkdldE5hbWUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIG9iaikKK3sKKyAgICBMT0dfQVBJKCJuR2V0TmFtZSwgY29uKCVwKSwgb2JqKCVwKSIsIChSc0NvbnRleHQpY29uLCAodm9pZCAqKW9iaik7CisgICAgY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisgICAgcnNhR2V0TmFtZSgoUnNDb250ZXh0KWNvbiwgKHZvaWQgKilvYmosICZuYW1lKTsKKyAgICBpZihuYW1lID09IE5VTEwgfHwgc3RybGVuKG5hbWUpID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBfZW52LT5OZXdTdHJpbmdVVEYobmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCituT2JqRGVzdHJveShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgb2JqKQoreworICAgIExPR19BUEkoIm5PYmpEZXN0cm95LCBjb24oJXApIG9iaiglcCkiLCAoUnNDb250ZXh0KWNvbiwgKHZvaWQgKilvYmopOworICAgIHJzT2JqRGVzdHJveSgoUnNDb250ZXh0KWNvbiwgKHZvaWQgKilvYmopOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIGpsb25nCituRGV2aWNlQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcykKK3sKKyAgICBMT0dfQVBJKCJuRGV2aWNlQ3JlYXRlIik7CisgICAgcmV0dXJuIChqaW50KXJzRGV2aWNlQ3JlYXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkCituRGV2aWNlRGVzdHJveShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGRldikKK3sKKyAgICBMT0dfQVBJKCJuRGV2aWNlRGVzdHJveSIpOworICAgIHJldHVybiByc0RldmljZURlc3Ryb3koKFJzRGV2aWNlKWRldik7Cit9CisKK3N0YXRpYyB2b2lkCituRGV2aWNlU2V0Q29uZmlnKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgZGV2LCBqaW50IHAsIGppbnQgdmFsdWUpCit7CisgICAgTE9HX0FQSSgibkRldmljZVNldENvbmZpZyAgZGV2KCVwKSwgcGFyYW0oJWkpLCB2YWx1ZSglaSkiLCAodm9pZCAqKWRldiwgcCwgdmFsdWUpOworICAgIHJldHVybiByc0RldmljZVNldENvbmZpZygoUnNEZXZpY2UpZGV2LCAoUnNEZXZpY2VQYXJhbSlwLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBqbG9uZworbkNvbnRleHRDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBkZXYsIGppbnQgdmVyLCBqaW50IHNka1ZlciwgamludCBjdCkKK3sKKyAgICBMT0dfQVBJKCJuQ29udGV4dENyZWF0ZSIpOworICAgIHJldHVybiAoamludClyc0NvbnRleHRDcmVhdGUoKFJzRGV2aWNlKWRldiwgdmVyLCBzZGtWZXIsIChSc0NvbnRleHRUeXBlKWN0LCAwKTsKK30KKworc3RhdGljIGpsb25nCituQ29udGV4dENyZWF0ZUdMKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgZGV2LCBqaW50IHZlciwgamludCBzZGtWZXIsCisgICAgICAgICAgICAgICAgIGludCBjb2xvck1pbiwgaW50IGNvbG9yUHJlZiwKKyAgICAgICAgICAgICAgICAgaW50IGFscGhhTWluLCBpbnQgYWxwaGFQcmVmLAorICAgICAgICAgICAgICAgICBpbnQgZGVwdGhNaW4sIGludCBkZXB0aFByZWYsCisgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsTWluLCBpbnQgc3RlbmNpbFByZWYsCisgICAgICAgICAgICAgICAgIGludCBzYW1wbGVzTWluLCBpbnQgc2FtcGxlc1ByZWYsIGZsb2F0IHNhbXBsZXNRLAorICAgICAgICAgICAgICAgICBpbnQgZHBpKQoreworICAgIFJzU3VyZmFjZUNvbmZpZyBzYzsKKyAgICBzYy5hbHBoYU1pbiA9IGFscGhhTWluOworICAgIHNjLmFscGhhUHJlZiA9IGFscGhhUHJlZjsKKyAgICBzYy5jb2xvck1pbiA9IGNvbG9yTWluOworICAgIHNjLmNvbG9yUHJlZiA9IGNvbG9yUHJlZjsKKyAgICBzYy5kZXB0aE1pbiA9IGRlcHRoTWluOworICAgIHNjLmRlcHRoUHJlZiA9IGRlcHRoUHJlZjsKKyAgICBzYy5zYW1wbGVzTWluID0gc2FtcGxlc01pbjsKKyAgICBzYy5zYW1wbGVzUHJlZiA9IHNhbXBsZXNQcmVmOworICAgIHNjLnNhbXBsZXNRID0gc2FtcGxlc1E7CisKKyAgICBMT0dfQVBJKCJuQ29udGV4dENyZWF0ZUdMIik7CisgICAgcmV0dXJuIChqaW50KXJzQ29udGV4dENyZWF0ZUdMKChSc0RldmljZSlkZXYsIHZlciwgc2RrVmVyLCBzYywgZHBpKTsKK30KKworc3RhdGljIHZvaWQKK25Db250ZXh0U2V0UHJpb3JpdHkoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnQgcCkKK3sKKyAgICBMT0dfQVBJKCJDb250ZXh0U2V0UHJpb3JpdHksIGNvbiglcCksIHByaW9yaXR5KCVpKSIsIChSc0NvbnRleHQpY29uLCBwKTsKKyAgICByc0NvbnRleHRTZXRQcmlvcml0eSgoUnNDb250ZXh0KWNvbiwgcCk7Cit9CisKKworCitzdGF0aWMgdm9pZAorbkNvbnRleHRTZXRTdXJmYWNlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqaW50IHdpZHRoLCBqaW50IGhlaWdodCwgam9iamVjdCB3bmQpCit7CisgICAgTE9HX0FQSSgibkNvbnRleHRTZXRTdXJmYWNlLCBjb24oJXApLCB3aWR0aCglaSksIGhlaWdodCglaSksIHN1cmZhY2UoJXApIiwgKFJzQ29udGV4dCljb24sIHdpZHRoLCBoZWlnaHQsIChTdXJmYWNlICopd25kKTsKKworICAgIEFOYXRpdmVXaW5kb3cgKiB3aW5kb3cgPSBOVUxMOworICAgIGlmICh3bmQgPT0gTlVMTCkgeworCisgICAgfSBlbHNlIHsKKyAgICAgICAgd2luZG93ID0gYW5kcm9pZF92aWV3X1N1cmZhY2VfZ2V0TmF0aXZlV2luZG93KF9lbnYsIHduZCkuZ2V0KCk7CisgICAgfQorCisgICAgcnNDb250ZXh0U2V0U3VyZmFjZSgoUnNDb250ZXh0KWNvbiwgd2lkdGgsIGhlaWdodCwgd2luZG93KTsKK30KKworc3RhdGljIHZvaWQKK25Db250ZXh0RGVzdHJveShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbikKK3sKKyAgICBMT0dfQVBJKCJuQ29udGV4dERlc3Ryb3ksIGNvbiglcCkiLCAoUnNDb250ZXh0KWNvbik7CisgICAgcnNDb250ZXh0RGVzdHJveSgoUnNDb250ZXh0KWNvbik7Cit9CisKK3N0YXRpYyB2b2lkCituQ29udGV4dER1bXAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnQgYml0cykKK3sKKyAgICBMT0dfQVBJKCJuQ29udGV4dER1bXAsIGNvbiglcCkgIGJpdHMoJWkpIiwgKFJzQ29udGV4dCljb24sIGJpdHMpOworICAgIHJzQ29udGV4dER1bXAoKFJzQ29udGV4dCljb24sIGJpdHMpOworfQorCitzdGF0aWMgdm9pZAorbkNvbnRleHRQYXVzZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbikKK3sKKyAgICBMT0dfQVBJKCJuQ29udGV4dFBhdXNlLCBjb24oJXApIiwgKFJzQ29udGV4dCljb24pOworICAgIHJzQ29udGV4dFBhdXNlKChSc0NvbnRleHQpY29uKTsKK30KKworc3RhdGljIHZvaWQKK25Db250ZXh0UmVzdW1lKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uKQoreworICAgIExPR19BUEkoIm5Db250ZXh0UmVzdW1lLCBjb24oJXApIiwgKFJzQ29udGV4dCljb24pOworICAgIHJzQ29udGV4dFJlc3VtZSgoUnNDb250ZXh0KWNvbik7Cit9CisKKworc3RhdGljIGpzdHJpbmcKK25Db250ZXh0R2V0RXJyb3JNZXNzYWdlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uKQoreworICAgIExPR19BUEkoIm5Db250ZXh0R2V0RXJyb3JNZXNzYWdlLCBjb24oJXApIiwgKFJzQ29udGV4dCljb24pOworICAgIGNoYXIgYnVmWzEwMjRdOworCisgICAgc2l6ZV90IHJlY2VpdmVMZW47CisgICAgdWludDMyX3Qgc3ViSUQ7CisgICAgaW50IGlkID0gcnNDb250ZXh0R2V0TWVzc2FnZSgoUnNDb250ZXh0KWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVjZWl2ZUxlbiwgc2l6ZW9mKHJlY2VpdmVMZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1YklELCBzaXplb2Yoc3ViSUQpKTsKKyAgICBpZiAoIWlkICYmIHJlY2VpdmVMZW4pIHsKKyAgICAgICAgQUxPR1YoIm1lc3NhZ2UgcmVjZWl2ZSBidWZmZXIgdG9vIHNtYWxsLiAgJWkiLCByZWNlaXZlTGVuKTsKKyAgICB9CisgICAgcmV0dXJuIF9lbnYtPk5ld1N0cmluZ1VURihidWYpOworfQorCitzdGF0aWMgamludAorbkNvbnRleHRHZXRVc2VyTWVzc2FnZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamludEFycmF5IGRhdGEpCit7CisgICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKKyAgICBMT0dfQVBJKCJuQ29udGV4dEdldE1lc3NhZ2UsIGNvbiglcCksIGxlbiglaSkiLCAoUnNDb250ZXh0KWNvbiwgbGVuKTsKKyAgICBqaW50ICpwdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOworICAgIHNpemVfdCByZWNlaXZlTGVuOworICAgIHVpbnQzMl90IHN1YklEOworICAgIGludCBpZCA9IHJzQ29udGV4dEdldE1lc3NhZ2UoKFJzQ29udGV4dCljb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIsIGxlbiAqIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVjZWl2ZUxlbiwgc2l6ZW9mKHJlY2VpdmVMZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1YklELCBzaXplb2Yoc3ViSUQpKTsKKyAgICBpZiAoIWlkICYmIHJlY2VpdmVMZW4pIHsKKyAgICAgICAgQUxPR1YoIm1lc3NhZ2UgcmVjZWl2ZSBidWZmZXIgdG9vIHNtYWxsLiAgJWkiLCByZWNlaXZlTGVuKTsKKyAgICB9CisgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCAwKTsKKyAgICByZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyBqaW50CituQ29udGV4dFBlZWtNZXNzYWdlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqaW50QXJyYXkgYXV4RGF0YSkKK3sKKyAgICBMT0dfQVBJKCJuQ29udGV4dFBlZWtNZXNzYWdlLCBjb24oJXApIiwgKFJzQ29udGV4dCljb24pOworICAgIGppbnQgKmF1eERhdGFQdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGF1eERhdGEsIE5VTEwpOworICAgIHNpemVfdCByZWNlaXZlTGVuOworICAgIHVpbnQzMl90IHN1YklEOworICAgIGludCBpZCA9IHJzQ29udGV4dFBlZWtNZXNzYWdlKChSc0NvbnRleHQpY29uLCAmcmVjZWl2ZUxlbiwgc2l6ZW9mKHJlY2VpdmVMZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJJRCwgc2l6ZW9mKHN1YklEKSk7CisgICAgYXV4RGF0YVB0clswXSA9IChqaW50KXN1YklEOworICAgIGF1eERhdGFQdHJbMV0gPSAoamludClyZWNlaXZlTGVuOworICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKGF1eERhdGEsIGF1eERhdGFQdHIsIDApOworICAgIHJldHVybiBpZDsKK30KKworc3RhdGljIHZvaWQgbkNvbnRleHRJbml0VG9DbGllbnQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24pCit7CisgICAgTE9HX0FQSSgibkNvbnRleHRJbml0VG9DbGllbnQsIGNvbiglcCkiLCAoUnNDb250ZXh0KWNvbik7CisgICAgcnNDb250ZXh0SW5pdFRvQ2xpZW50KChSc0NvbnRleHQpY29uKTsKK30KKworc3RhdGljIHZvaWQgbkNvbnRleHREZWluaXRUb0NsaWVudChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbikKK3sKKyAgICBMT0dfQVBJKCJuQ29udGV4dERlaW5pdFRvQ2xpZW50LCBjb24oJXApIiwgKFJzQ29udGV4dCljb24pOworICAgIHJzQ29udGV4dERlaW5pdFRvQ2xpZW50KChSc0NvbnRleHQpY29uKTsKK30KKworc3RhdGljIHZvaWQKK25Db250ZXh0U2VuZE1lc3NhZ2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnQgaWQsIGppbnRBcnJheSBkYXRhKQoreworICAgIGppbnQgKnB0ciA9IE5VTEw7CisgICAgamludCBsZW4gPSAwOworICAgIGlmIChkYXRhKSB7CisgICAgICAgIGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOworICAgICAgICBwdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOworICAgIH0KKyAgICBMT0dfQVBJKCJuQ29udGV4dFNlbmRNZXNzYWdlLCBjb24oJXApLCBpZCglaSksIGxlbiglaSkiLCAoUnNDb250ZXh0KWNvbiwgaWQsIGxlbik7CisgICAgcnNDb250ZXh0U2VuZE1lc3NhZ2UoKFJzQ29udGV4dCljb24sIGlkLCAoY29uc3QgdWludDhfdCAqKXB0ciwgbGVuICogc2l6ZW9mKGludCkpOworICAgIGlmIChkYXRhKSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgSk5JX0FCT1JUKTsKKyAgICB9Cit9CisKKworCitzdGF0aWMgamxvbmcKK25FbGVtZW50Q3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyB0eXBlLCBqaW50IGtpbmQsIGpib29sZWFuIG5vcm0sIGppbnQgc2l6ZSkKK3sKKyAgICBMT0dfQVBJKCJuRWxlbWVudENyZWF0ZSwgY29uKCVwKSwgdHlwZSglaSksIGtpbmQoJWkpLCBub3JtKCVpKSwgc2l6ZSglaSkiLCAoUnNDb250ZXh0KWNvbiwgdHlwZSwga2luZCwgbm9ybSwgc2l6ZSk7CisgICAgcmV0dXJuIChqbG9uZylyc0VsZW1lbnRDcmVhdGUoKFJzQ29udGV4dCljb24sIChSc0RhdGFUeXBlKXR5cGUsIChSc0RhdGFLaW5kKWtpbmQsIG5vcm0sIHNpemUpOworfQorCitzdGF0aWMgamxvbmcKK25FbGVtZW50Q3JlYXRlMihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwKKyAgICAgICAgICAgICAgICBqaW50QXJyYXkgX2lkcywgam9iamVjdEFycmF5IF9uYW1lcywgamludEFycmF5IF9hcnJheVNpemVzKQoreworICAgIGludCBmaWVsZENvdW50ID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoX2lkcyk7CisgICAgTE9HX0FQSSgibkVsZW1lbnRDcmVhdGUyLCBjb24oJXApIiwgKFJzQ29udGV4dCljb24pOworCisgICAgamludCAqaWRzID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfaWRzLCBOVUxMKTsKKyAgICBqaW50ICphcnJheVNpemVzID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfYXJyYXlTaXplcywgTlVMTCk7CisKKyAgICBBdXRvSmF2YVN0cmluZ0FycmF5VG9VVEY4IG5hbWVzKF9lbnYsIF9uYW1lcywgZmllbGRDb3VudCk7CisKKyAgICBjb25zdCBjaGFyICoqbmFtZUFycmF5ID0gbmFtZXMuY19zdHIoKTsKKyAgICBzaXplX3QgKnNpemVBcnJheSA9IG5hbWVzLmNfc3RyX2xlbigpOworCisgICAgamxvbmcgaWQgPSAoamxvbmcpcnNFbGVtZW50Q3JlYXRlMigoUnNDb250ZXh0KWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNFbGVtZW50ICopaWRzLCBmaWVsZENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVBcnJheSwgZmllbGRDb3VudCAqIHNpemVvZihzaXplX3QpLCAgc2l6ZUFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1aW50MzJfdCAqKWFycmF5U2l6ZXMsIGZpZWxkQ291bnQpOworCisgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX2lkcywgaWRzLCBKTklfQUJPUlQpOworICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF9hcnJheVNpemVzLCBhcnJheVNpemVzLCBKTklfQUJPUlQpOworICAgIHJldHVybiAoamludClpZDsKK30KKworc3RhdGljIHZvaWQKK25FbGVtZW50R2V0TmF0aXZlRGF0YShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgaWQsIGppbnRBcnJheSBfZWxlbWVudERhdGEpCit7CisgICAgaW50IGRhdGFTaXplID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoX2VsZW1lbnREYXRhKTsKKyAgICBMT0dfQVBJKCJuRWxlbWVudEdldE5hdGl2ZURhdGEsIGNvbiglcCkiLCAoUnNDb250ZXh0KWNvbik7CisKKyAgICAvLyB3ZSB3aWxsIHBhY2sgbVR5cGU7IG1LaW5kOyBtTm9ybWFsaXplZDsgbVZlY3RvclNpemU7IE51bVN1YkVsZW1lbnRzCisgICAgYXNzZXJ0KGRhdGFTaXplID09IDUpOworCisgICAgdWludDMyX3QgZWxlbWVudERhdGFbNV07CisgICAgcnNhRWxlbWVudEdldE5hdGl2ZURhdGEoKFJzQ29udGV4dCljb24sIChSc0VsZW1lbnQpaWQsIGVsZW1lbnREYXRhLCBkYXRhU2l6ZSk7CisKKyAgICBmb3IoamludCBpID0gMDsgaSA8IGRhdGFTaXplOyBpICsrKSB7CisgICAgICAgIF9lbnYtPlNldEludEFycmF5UmVnaW9uKF9lbGVtZW50RGF0YSwgaSwgMSwgKGNvbnN0IGppbnQqKSZlbGVtZW50RGF0YVtpXSk7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkCituRWxlbWVudEdldFN1YkVsZW1lbnRzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgamludEFycmF5IF9JRHMsCisgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3RBcnJheSBfbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgIGppbnRBcnJheSBfYXJyYXlTaXplcykKK3sKKyAgICBpbnQgZGF0YVNpemUgPSBfZW52LT5HZXRBcnJheUxlbmd0aChfSURzKTsKKyAgICBMT0dfQVBJKCJuRWxlbWVudEdldFN1YkVsZW1lbnRzLCBjb24oJXApIiwgKFJzQ29udGV4dCljb24pOworCisgICAgdWludDMyX3QgKmlkcyA9ICh1aW50MzJfdCAqKW1hbGxvYygodWludDMyX3QpZGF0YVNpemUgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICBjb25zdCBjaGFyICoqbmFtZXMgPSAoY29uc3QgY2hhciAqKiltYWxsb2MoKHVpbnQzMl90KWRhdGFTaXplICogc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworICAgIHVpbnQzMl90ICphcnJheVNpemVzID0gKHVpbnQzMl90ICopbWFsbG9jKCh1aW50MzJfdClkYXRhU2l6ZSAqIHNpemVvZih1aW50MzJfdCkpOworCisgICAgcnNhRWxlbWVudEdldFN1YkVsZW1lbnRzKChSc0NvbnRleHQpY29uLCAoUnNFbGVtZW50KWlkLCBpZHMsIG5hbWVzLCBhcnJheVNpemVzLCAodWludDMyX3QpZGF0YVNpemUpOworCisgICAgZm9yKGppbnQgaSA9IDA7IGkgPCBkYXRhU2l6ZTsgaSsrKSB7CisgICAgICAgIF9lbnYtPlNldE9iamVjdEFycmF5RWxlbWVudChfbmFtZXMsIGksIF9lbnYtPk5ld1N0cmluZ1VURihuYW1lc1tpXSkpOworICAgICAgICBfZW52LT5TZXRJbnRBcnJheVJlZ2lvbihfSURzLCBpLCAxLCAoY29uc3QgamludCopJmlkc1tpXSk7CisgICAgICAgIF9lbnYtPlNldEludEFycmF5UmVnaW9uKF9hcnJheVNpemVzLCBpLCAxLCAoY29uc3QgamludCopJmFycmF5U2l6ZXNbaV0pOworICAgIH0KKworICAgIGZyZWUoaWRzKTsKKyAgICBmcmVlKG5hbWVzKTsKKyAgICBmcmVlKGFycmF5U2l6ZXMpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgamxvbmcKK25UeXBlQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBlaWQsCisgICAgICAgICAgICBqaW50IGRpbXgsIGppbnQgZGlteSwgamludCBkaW16LCBqYm9vbGVhbiBtaXBzLCBqYm9vbGVhbiBmYWNlcywgamludCB5dXYpCit7CisgICAgTE9HX0FQSSgiblR5cGVDcmVhdGUsIGNvbiglcCkgZWlkKCVwKSwgeCglaSksIHkoJWkpLCB6KCVpKSwgbWlwcyglaSksIGZhY2VzKCVpKSwgeXV2KCVpKSIsCisgICAgICAgICAgICAoUnNDb250ZXh0KWNvbiwgZWlkLCBkaW14LCBkaW15LCBkaW16LCBtaXBzLCBmYWNlcywgeXV2KTsKKworICAgIHJldHVybiAoamxvbmcpcnNUeXBlQ3JlYXRlKChSc0NvbnRleHQpY29uLCAoUnNFbGVtZW50KWVpZCwgZGlteCwgZGlteSwgZGlteiwgbWlwcywgZmFjZXMsIHl1dik7Cit9CisKK3N0YXRpYyB2b2lkCituVHlwZUdldE5hdGl2ZURhdGEoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGlkLCBqaW50QXJyYXkgX3R5cGVEYXRhKQoreworICAgIC8vIFdlIGFyZSBwYWNraW5nIDYgaXRlbXM6IG1EaW1YOyBtRGltWTsgbURpbVo7CisgICAgLy8gbURpbUxPRDsgbURpbUZhY2VzOyBtRWxlbWVudDsgaW50byB0eXBlRGF0YQorICAgIGludCBlbGVtZW50Q291bnQgPSBfZW52LT5HZXRBcnJheUxlbmd0aChfdHlwZURhdGEpOworCisgICAgYXNzZXJ0KGVsZW1lbnRDb3VudCA9PSA2KTsKKyAgICBMT0dfQVBJKCJuVHlwZUNyZWF0ZSwgY29uKCVwKSIsIChSc0NvbnRleHQpY29uKTsKKworICAgIHVpbnQzMl90IHR5cGVEYXRhWzZdOworICAgIHJzYVR5cGVHZXROYXRpdmVEYXRhKChSc0NvbnRleHQpY29uLCAoUnNUeXBlKWlkLCB0eXBlRGF0YSwgNik7CisKKyAgICBmb3IoamludCBpID0gMDsgaSA8IGVsZW1lbnRDb3VudDsgaSArKykgeworICAgICAgICBfZW52LT5TZXRJbnRBcnJheVJlZ2lvbihfdHlwZURhdGEsIGksIDEsIChjb25zdCBqaW50KikmdHlwZURhdGFbaV0pOworICAgIH0KK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIGpsb25nCituQWxsb2NhdGlvbkNyZWF0ZVR5cGVkKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyB0eXBlLCBqaW50IG1pcHMsIGppbnQgdXNhZ2UsIGppbnQgcG9pbnRlcikKK3sKKyAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbkNyZWF0ZVR5cGVkLCBjb24oJXApLCB0eXBlKCVwKSwgbWlwKCVpKSwgdXNhZ2UoJWkpLCBwdHIoJXApIiwgKFJzQ29udGV4dCljb24sIChSc0VsZW1lbnQpdHlwZSwgbWlwcywgdXNhZ2UsICh2b2lkICopcG9pbnRlcik7CisgICAgcmV0dXJuIChqaW50KSByc0FsbG9jYXRpb25DcmVhdGVUeXBlZCgoUnNDb250ZXh0KWNvbiwgKFJzVHlwZSl0eXBlLCAoUnNBbGxvY2F0aW9uTWlwbWFwQ29udHJvbCltaXBzLCAodWludDMyX3QpdXNhZ2UsICh1aW50MzJfdClwb2ludGVyKTsKK30KKworc3RhdGljIHZvaWQKK25BbGxvY2F0aW9uU3luY0FsbChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgYSwgamludCBiaXRzKQoreworICAgIExPR19BUEkoIm5BbGxvY2F0aW9uU3luY0FsbCwgY29uKCVwKSwgYSglcCksIGJpdHMoMHglMDh4KSIsIChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWEsIGJpdHMpOworICAgIHJzQWxsb2NhdGlvblN5bmNBbGwoKFJzQ29udGV4dCljb24sIChSc0FsbG9jYXRpb24pYSwgKFJzQWxsb2NhdGlvblVzYWdlVHlwZSliaXRzKTsKK30KKworc3RhdGljIGpvYmplY3QKK25BbGxvY2F0aW9uR2V0U3VyZmFjZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgYSkKK3sKKyAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbkdldFN1cmZhY2UsIGNvbiglcCksIGEoJXApIiwgKFJzQ29udGV4dCljb24sIChSc0FsbG9jYXRpb24pYSk7CisKKyAgICBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyICp2ID0gKElHcmFwaGljQnVmZmVyUHJvZHVjZXIgKilyc0FsbG9jYXRpb25HZXRTdXJmYWNlKChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWEpOworICAgIHNwPElHcmFwaGljQnVmZmVyUHJvZHVjZXI+IGJwID0gdjsKKyAgICB2LT5kZWNTdHJvbmcoTlVMTCk7CisKKyAgICBqb2JqZWN0IG8gPSBhbmRyb2lkX3ZpZXdfU3VyZmFjZV9jcmVhdGVGcm9tSUdyYXBoaWNCdWZmZXJQcm9kdWNlcihfZW52LCBicCk7CisgICAgcmV0dXJuIG87Cit9CisKK3N0YXRpYyB2b2lkCituQWxsb2NhdGlvblNldFN1cmZhY2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGFsbG9jLCBqb2JqZWN0IHN1cikKK3sKKyAgICBMT0dfQVBJKCJuQWxsb2NhdGlvblNldFN1cmZhY2UsIGNvbiglcCksIGFsbG9jKCVwKSwgc3VyZmFjZSglcCkiLAorICAgICAgICAgICAgKFJzQ29udGV4dCljb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIChTdXJmYWNlICopc3VyKTsKKworICAgIHNwPFN1cmZhY2U+IHM7CisgICAgaWYgKHN1ciAhPSAwKSB7CisgICAgICAgIHMgPSBhbmRyb2lkX3ZpZXdfU3VyZmFjZV9nZXRTdXJmYWNlKF9lbnYsIHN1cik7CisgICAgfQorCisgICAgcnNBbGxvY2F0aW9uU2V0U3VyZmFjZSgoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgc3RhdGljX2Nhc3Q8QU5hdGl2ZVdpbmRvdyAqPihzLmdldCgpKSk7Cit9CisKK3N0YXRpYyB2b2lkCituQWxsb2NhdGlvbklvU2VuZChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgYWxsb2MpCit7CisgICAgTE9HX0FQSSgibkFsbG9jYXRpb25Jb1NlbmQsIGNvbiglcCksIGFsbG9jKCVwKSIsIChSc0NvbnRleHQpY29uLCBhbGxvYyk7CisgICAgcnNBbGxvY2F0aW9uSW9TZW5kKChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jKTsKK30KKworc3RhdGljIHZvaWQKK25BbGxvY2F0aW9uSW9SZWNlaXZlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBhbGxvYykKK3sKKyAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbklvUmVjZWl2ZSwgY29uKCVwKSwgYWxsb2MoJXApIiwgKFJzQ29udGV4dCljb24sIGFsbG9jKTsKKyAgICByc0FsbG9jYXRpb25Jb1JlY2VpdmUoKFJzQ29udGV4dCljb24sIChSc0FsbG9jYXRpb24pYWxsb2MpOworfQorCisKK3N0YXRpYyB2b2lkCituQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgYWxsb2MpCit7CisgICAgTE9HX0FQSSgibkFsbG9jYXRpb25HZW5lcmF0ZU1pcG1hcHMsIGNvbiglcCksIGEoJXApIiwgKFJzQ29udGV4dCljb24sIChSc0FsbG9jYXRpb24pYWxsb2MpOworICAgIHJzQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcygoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYyk7Cit9CisKK3N0YXRpYyBqbG9uZworbkFsbG9jYXRpb25DcmVhdGVGcm9tQml0bWFwKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyB0eXBlLCBqaW50IG1pcCwgam9iamVjdCBqYml0bWFwLCBqaW50IHVzYWdlKQoreworICAgIFNrQml0bWFwIGNvbnN0ICogbmF0aXZlQml0bWFwID0KKyAgICAgICAgICAgIChTa0JpdG1hcCBjb25zdCAqKV9lbnYtPkdldEludEZpZWxkKGpiaXRtYXAsIGdOYXRpdmVCaXRtYXBJRCk7CisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgqbmF0aXZlQml0bWFwKTsKKworICAgIGJpdG1hcC5sb2NrUGl4ZWxzKCk7CisgICAgY29uc3Qgdm9pZCogcHRyID0gYml0bWFwLmdldFBpeGVscygpOworICAgIGpsb25nIGlkID0gKGpsb25nKXJzQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAoKFJzQ29udGV4dCljb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc1R5cGUpdHlwZSwgKFJzQWxsb2NhdGlvbk1pcG1hcENvbnRyb2wpbWlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIsIGJpdG1hcC5nZXRTaXplKCksIHVzYWdlKTsKKyAgICBiaXRtYXAudW5sb2NrUGl4ZWxzKCk7CisgICAgcmV0dXJuIGlkOworfQorCitzdGF0aWMgamxvbmcKK25BbGxvY2F0aW9uQ3JlYXRlQml0bWFwQmFja2VkQWxsb2NhdGlvbihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgdHlwZSwgamludCBtaXAsIGpvYmplY3QgamJpdG1hcCwgamludCB1c2FnZSkKK3sKKyAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9CisgICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKilfZW52LT5HZXRJbnRGaWVsZChqYml0bWFwLCBnTmF0aXZlQml0bWFwSUQpOworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKm5hdGl2ZUJpdG1hcCk7CisKKyAgICBiaXRtYXAubG9ja1BpeGVscygpOworICAgIGNvbnN0IHZvaWQqIHB0ciA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKKyAgICBqbG9uZyBpZCA9IChqbG9uZylyc0FsbG9jYXRpb25DcmVhdGVUeXBlZCgoUnNDb250ZXh0KWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzVHlwZSl0eXBlLCAoUnNBbGxvY2F0aW9uTWlwbWFwQ29udHJvbCltaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCl1c2FnZSwgKHNpemVfdClwdHIpOworICAgIGJpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICByZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyBqbG9uZworbkFsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgdHlwZSwgamludCBtaXAsIGpvYmplY3QgamJpdG1hcCwgamludCB1c2FnZSkKK3sKKyAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9CisgICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKilfZW52LT5HZXRJbnRGaWVsZChqYml0bWFwLCBnTmF0aXZlQml0bWFwSUQpOworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKm5hdGl2ZUJpdG1hcCk7CisKKyAgICBiaXRtYXAubG9ja1BpeGVscygpOworICAgIGNvbnN0IHZvaWQqIHB0ciA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKKyAgICBqbG9uZyBpZCA9IChqbG9uZylyc0FsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcCgoUnNDb250ZXh0KWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc1R5cGUpdHlwZSwgKFJzQWxsb2NhdGlvbk1pcG1hcENvbnRyb2wpbWlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyLCBiaXRtYXAuZ2V0U2l6ZSgpLCB1c2FnZSk7CisgICAgYml0bWFwLnVubG9ja1BpeGVscygpOworICAgIHJldHVybiBpZDsKK30KKworc3RhdGljIHZvaWQKK25BbGxvY2F0aW9uQ29weUZyb21CaXRtYXAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGFsbG9jLCBqb2JqZWN0IGpiaXRtYXApCit7CisgICAgU2tCaXRtYXAgY29uc3QgKiBuYXRpdmVCaXRtYXAgPQorICAgICAgICAgICAgKFNrQml0bWFwIGNvbnN0ICopX2Vudi0+R2V0SW50RmllbGQoamJpdG1hcCwgZ05hdGl2ZUJpdG1hcElEKTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCpuYXRpdmVCaXRtYXApOworICAgIGludCB3ID0gYml0bWFwLndpZHRoKCk7CisgICAgaW50IGggPSBiaXRtYXAuaGVpZ2h0KCk7CisKKyAgICBiaXRtYXAubG9ja1BpeGVscygpOworICAgIGNvbnN0IHZvaWQqIHB0ciA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKKyAgICByc0FsbG9jYXRpb24yRERhdGEoKFJzQ29udGV4dCljb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgIDAsIFJTX0FMTE9DQVRJT05fQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1gsCisgICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIHB0ciwgYml0bWFwLmdldFNpemUoKSwgMCk7CisgICAgYml0bWFwLnVubG9ja1BpeGVscygpOworfQorCitzdGF0aWMgdm9pZAorbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGFsbG9jLCBqb2JqZWN0IGpiaXRtYXApCit7CisgICAgU2tCaXRtYXAgY29uc3QgKiBuYXRpdmVCaXRtYXAgPQorICAgICAgICAgICAgKFNrQml0bWFwIGNvbnN0ICopX2Vudi0+R2V0SW50RmllbGQoamJpdG1hcCwgZ05hdGl2ZUJpdG1hcElEKTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCpuYXRpdmVCaXRtYXApOworCisgICAgYml0bWFwLmxvY2tQaXhlbHMoKTsKKyAgICB2b2lkKiBwdHIgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7CisgICAgcnNBbGxvY2F0aW9uQ29weVRvQml0bWFwKChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBwdHIsIGJpdG1hcC5nZXRTaXplKCkpOworICAgIGJpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICBiaXRtYXAubm90aWZ5UGl4ZWxzQ2hhbmdlZCgpOworfQorCitzdGF0aWMgdm9pZCBSZWxlYXNlQml0bWFwQ2FsbGJhY2sodm9pZCAqYm1wKQoreworICAgIFNrQml0bWFwIGNvbnN0ICogbmF0aXZlQml0bWFwID0gKFNrQml0bWFwIGNvbnN0ICopYm1wOworICAgIG5hdGl2ZUJpdG1hcC0+dW5sb2NrUGl4ZWxzKCk7Cit9CisKKworc3RhdGljIHZvaWQKK25BbGxvY2F0aW9uRGF0YTFEKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBfYWxsb2MsIGppbnQgb2Zmc2V0LCBqaW50IGxvZCwKKyAgICAgICAgICAgICAgICAgIGppbnQgY291bnQsIGpvYmplY3QgZGF0YSwgaW50IHNpemVCeXRlcywgaW50IGRhdGFUeXBlKQoreworICAgIFJzQWxsb2NhdGlvbiAqYWxsb2MgPSAoUnNBbGxvY2F0aW9uICopX2FsbG9jOworICAgIExPR19BUEkoIm5BbGxvY2F0aW9uMUREYXRhLCBjb24oJXApLCBhZGFwdGVyKCVwKSwgb2Zmc2V0KCVpKSwgY291bnQoJWkpLCBzaXplQnl0ZXMoJWkpLCBkYXRhVHlwZSglaSkiLAorICAgICAgICAgICAgKFJzQ29udGV4dCljb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIG9mZnNldCwgY291bnQsIHNpemVCeXRlcywgZGF0YVR5cGUpOworICAgIFBFUl9BUlJBWV9UWVBFKE5VTEwsIHJzQWxsb2NhdGlvbjFERGF0YSwgKFJzQ29udGV4dCljb24sIGFsbG9jLCBvZmZzZXQsIGxvZCwgY291bnQsIHB0ciwgc2l6ZUJ5dGVzKTsKK30KKworc3RhdGljIHZvaWQKKy8vICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25FbGVtZW50RGF0YTFEKGludCBjb24sIGludCBpZCwgaW50IHhvZmYsIGludCBjb21wSWR4LCBieXRlW10gZCwgaW50IHNpemVCeXRlcyk7CituQWxsb2NhdGlvbkVsZW1lbnREYXRhMUQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGFsbG9jLCBqaW50IG9mZnNldCwgamludCBsb2QsIGppbnQgY29tcElkeCwgamJ5dGVBcnJheSBkYXRhLCBpbnQgc2l6ZUJ5dGVzKQoreworICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7CisgICAgTE9HX0FQSSgibkFsbG9jYXRpb25FbGVtZW50RGF0YTFELCBjb24oJXApLCBhbGxvYyglcCksIG9mZnNldCglaSksIGNvbXAoJWkpLCBsZW4oJWkpLCBzaXplQnl0ZXMoJWkpIiwgKFJzQ29udGV4dCljb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIG9mZnNldCwgY29tcElkeCwgbGVuLCBzaXplQnl0ZXMpOworICAgIGpieXRlICpwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKKyAgICByc0FsbG9jYXRpb24xREVsZW1lbnREYXRhKChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBvZmZzZXQsIGxvZCwgcHRyLCBzaXplQnl0ZXMsIGNvbXBJZHgpOworICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Cit9CisKK3N0YXRpYyB2b2lkCituQWxsb2NhdGlvbkRhdGEyRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgX2FsbG9jLCBqaW50IHhvZmYsIGppbnQgeW9mZiwgamludCBsb2QsIGppbnQgX2ZhY2UsCisgICAgICAgICAgICAgICAgICBqaW50IHcsIGppbnQgaCwgam9iamVjdCBkYXRhLCBpbnQgc2l6ZUJ5dGVzLCBpbnQgZGF0YVR5cGUpCit7CisgICAgUnNBbGxvY2F0aW9uICphbGxvYyA9IChSc0FsbG9jYXRpb24gKilfYWxsb2M7CisgICAgUnNBbGxvY2F0aW9uQ3ViZW1hcEZhY2UgZmFjZSA9IChSc0FsbG9jYXRpb25DdWJlbWFwRmFjZSlfZmFjZTsKKyAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjJERGF0YSwgY29uKCVwKSwgYWRhcHRlciglcCksIHhvZmYoJWkpLCB5b2ZmKCVpKSwgdyglaSksIGgoJWkpLCBsZW4oJWkpIHR5cGUoJWkpIiwKKyAgICAgICAgICAgIChSc0NvbnRleHQpY29uLCBhbGxvYywgeG9mZiwgeW9mZiwgdywgaCwgc2l6ZUJ5dGVzLCBkYXRhVHlwZSk7CisgICAgUEVSX0FSUkFZX1RZUEUoTlVMTCwgcnNBbGxvY2F0aW9uMkREYXRhLCAoUnNDb250ZXh0KWNvbiwgYWxsb2MsIHhvZmYsIHlvZmYsIGxvZCwgZmFjZSwgdywgaCwgcHRyLCBzaXplQnl0ZXMsIDApOworfQorCitzdGF0aWMgdm9pZAorbkFsbG9jYXRpb25EYXRhMkRfYWxsb2MoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sCisgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBkc3RBbGxvYywgamludCBkc3RYb2ZmLCBqaW50IGRzdFlvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGRzdE1pcCwgamludCBkc3RGYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgamludCB3aWR0aCwgamludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBzcmNBbGxvYywgamludCBzcmNYb2ZmLCBqaW50IHNyY1lvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNyY01pcCwgamludCBzcmNGYWNlKQoreworICAgIExPR19BUEkoIm5BbGxvY2F0aW9uMkREYXRhX3MsIGNvbiglcCksIGRzdEFsbG9jKCVwKSwgZHN0WG9mZiglaSksIGRzdFlvZmYoJWkpLCIKKyAgICAgICAgICAgICIgZHN0TWlwKCVpKSwgZHN0RmFjZSglaSksIHdpZHRoKCVpKSwgaGVpZ2h0KCVpKSwiCisgICAgICAgICAgICAiIHNyY0FsbG9jKCVwKSwgc3JjWG9mZiglaSksIHNyY1lvZmYoJWkpLCBzcmNNaXAoJWkpLCBzcmNGYWNlKCVpKSIsCisgICAgICAgICAgICAoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilkc3RBbGxvYywgZHN0WG9mZiwgZHN0WW9mZiwgZHN0TWlwLCBkc3RGYWNlLAorICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgKFJzQWxsb2NhdGlvbilzcmNBbGxvYywgc3JjWG9mZiwgc3JjWW9mZiwgc3JjTWlwLCBzcmNGYWNlKTsKKworICAgIHJzQWxsb2NhdGlvbkNvcHkyRFJhbmdlKChSc0NvbnRleHQpY29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc0FsbG9jYXRpb24pZHN0QWxsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0WG9mZiwgZHN0WW9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RNaXAsIGRzdEZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNBbGxvY2F0aW9uKXNyY0FsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1hvZmYsIHNyY1lvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTWlwLCBzcmNGYWNlKTsKK30KKworc3RhdGljIHZvaWQKK25BbGxvY2F0aW9uRGF0YTNEKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBfYWxsb2MsIGppbnQgeG9mZiwgamludCB5b2ZmLCBqaW50IHpvZmYsIGppbnQgbG9kLAorICAgICAgICAgICAgICAgICAgICBqaW50IHcsIGppbnQgaCwgamludCBkLCBqb2JqZWN0IGRhdGEsIGludCBzaXplQnl0ZXMsIGludCBkYXRhVHlwZSkKK3sKKyAgICBSc0FsbG9jYXRpb24gKmFsbG9jID0gKFJzQWxsb2NhdGlvbiAqKV9hbGxvYzsKKyAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjNERGF0YSwgY29uKCVwKSwgYWxsb2MoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHpvZmYoJWkpLCBsb2QoJWkpLCB3KCVpKSwgaCglaSksIGQoJWkpLCBzaXplQnl0ZXMoJWkpIiwKKyAgICAgICAgICAgIChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBsb2QsIHcsIGgsIGQsIHNpemVCeXRlcyk7CisgICAgUEVSX0FSUkFZX1RZUEUoTlVMTCwgcnNBbGxvY2F0aW9uM0REYXRhLCAoUnNDb250ZXh0KWNvbiwgYWxsb2MsIHhvZmYsIHlvZmYsIHpvZmYsIGxvZCwgdywgaCwgZCwgcHRyLCBzaXplQnl0ZXMsIDApOworfQorCitzdGF0aWMgdm9pZAorbkFsbG9jYXRpb25EYXRhM0RfYWxsb2MoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sCisgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBkc3RBbGxvYywgamludCBkc3RYb2ZmLCBqaW50IGRzdFlvZmYsIGppbnQgZHN0Wm9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgZHN0TWlwLAorICAgICAgICAgICAgICAgICAgICAgICAgamludCB3aWR0aCwgamludCBoZWlnaHQsIGppbnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBzcmNBbGxvYywgamludCBzcmNYb2ZmLCBqaW50IHNyY1lvZmYsIGppbnQgc3JjWm9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgc3JjTWlwKQoreworICAgIExPR19BUEkoIm5BbGxvY2F0aW9uRGF0YTNEX2FsbG9jLCBjb24oJXApLCBkc3RBbGxvYyglcCksIGRzdFhvZmYoJWkpLCBkc3RZb2ZmKCVpKSwiCisgICAgICAgICAgICAiIGRzdE1pcCglaSksIHdpZHRoKCVpKSwgaGVpZ2h0KCVpKSwiCisgICAgICAgICAgICAiIHNyY0FsbG9jKCVwKSwgc3JjWG9mZiglaSksIHNyY1lvZmYoJWkpLCBzcmNNaXAoJWkpIiwKKyAgICAgICAgICAgIChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWRzdEFsbG9jLCBkc3RYb2ZmLCBkc3RZb2ZmLCBkc3RNaXAsCisgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCAoUnNBbGxvY2F0aW9uKXNyY0FsbG9jLCBzcmNYb2ZmLCBzcmNZb2ZmLCBzcmNNaXApOworCisgICAgcnNBbGxvY2F0aW9uQ29weTNEUmFuZ2UoKFJzQ29udGV4dCljb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzQWxsb2NhdGlvbilkc3RBbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RYb2ZmLCBkc3RZb2ZmLCBkc3Rab2ZmLCBkc3RNaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzQWxsb2NhdGlvbilzcmNBbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNYb2ZmLCBzcmNZb2ZmLCBzcmNab2ZmLCBzcmNNaXApOworfQorCisKK3N0YXRpYyB2b2lkCituQWxsb2NhdGlvblJlYWQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIF9hbGxvYywgam9iamVjdCBkYXRhLCBpbnQgZGF0YVR5cGUpCit7CisgICAgUnNBbGxvY2F0aW9uICphbGxvYyA9IChSc0FsbG9jYXRpb24gKilfYWxsb2M7CisgICAgTE9HX0FQSSgibkFsbG9jYXRpb25SZWFkLCBjb24oJXApLCBhbGxvYyglcCkiLCAoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYyk7CisgICAgUEVSX0FSUkFZX1RZUEUoMCwgcnNBbGxvY2F0aW9uUmVhZCwgKFJzQ29udGV4dCljb24sIGFsbG9jLCBwdHIsIGxlbiAqIHR5cGVCeXRlcyk7Cit9CisKK3N0YXRpYyB2b2lkCituQWxsb2NhdGlvblJlYWQxRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgX2FsbG9jLCBqaW50IG9mZnNldCwgamludCBsb2QsCisgICAgICAgICAgICAgICAgICBqaW50IGNvdW50LCBqb2JqZWN0IGRhdGEsIGludCBzaXplQnl0ZXMsIGludCBkYXRhVHlwZSkKK3sKKyAgICBSc0FsbG9jYXRpb24gKmFsbG9jID0gKFJzQWxsb2NhdGlvbiAqKV9hbGxvYzsKKyAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjFEUmVhZCwgY29uKCVwKSwgYWRhcHRlciglcCksIG9mZnNldCglaSksIGNvdW50KCVpKSwgc2l6ZUJ5dGVzKCVpKSwgZGF0YVR5cGUoJWkpIiwKKyAgICAgICAgICAgIChSc0NvbnRleHQpY29uLCBhbGxvYywgb2Zmc2V0LCBjb3VudCwgc2l6ZUJ5dGVzLCBkYXRhVHlwZSk7CisgICAgUEVSX0FSUkFZX1RZUEUoMCwgcnNBbGxvY2F0aW9uMURSZWFkLCAoUnNDb250ZXh0KWNvbiwgYWxsb2MsIG9mZnNldCwgbG9kLCBjb3VudCwgcHRyLCBzaXplQnl0ZXMpOworfQorCitzdGF0aWMgdm9pZAorbkFsbG9jYXRpb25SZWFkMkQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIF9hbGxvYywgamludCB4b2ZmLCBqaW50IHlvZmYsIGppbnQgbG9kLCBqaW50IF9mYWNlLAorICAgICAgICAgICAgICAgICAgamludCB3LCBqaW50IGgsIGpvYmplY3QgZGF0YSwgaW50IHNpemVCeXRlcywgaW50IGRhdGFUeXBlKQoreworICAgIFJzQWxsb2NhdGlvbiAqYWxsb2MgPSAoUnNBbGxvY2F0aW9uICopX2FsbG9jOworICAgIFJzQWxsb2NhdGlvbkN1YmVtYXBGYWNlIGZhY2UgPSAoUnNBbGxvY2F0aW9uQ3ViZW1hcEZhY2UpX2ZhY2U7CisgICAgTE9HX0FQSSgibkFsbG9jYXRpb24yRFJlYWQsIGNvbiglcCksIGFkYXB0ZXIoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHcoJWkpLCBoKCVpKSwgbGVuKCVpKSB0eXBlKCVpKSIsCisgICAgICAgICAgICAoUnNDb250ZXh0KWNvbiwgYWxsb2MsIHhvZmYsIHlvZmYsIHcsIGgsIHNpemVCeXRlcywgZGF0YVR5cGUpOworICAgIFBFUl9BUlJBWV9UWVBFKDAsIHJzQWxsb2NhdGlvbjJEUmVhZCwgKFJzQ29udGV4dCljb24sIGFsbG9jLCB4b2ZmLCB5b2ZmLCBsb2QsIGZhY2UsIHcsIGgsIHB0ciwgc2l6ZUJ5dGVzLCAwKTsKK30KKworc3RhdGljIGpsb25nCituQWxsb2NhdGlvbkdldFR5cGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGEpCit7CisgICAgTE9HX0FQSSgibkFsbG9jYXRpb25HZXRUeXBlLCBjb24oJXApLCBhKCVwKSIsIChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWEpOworICAgIHJldHVybiAoamxvbmcpIHJzYUFsbG9jYXRpb25HZXRUeXBlKChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWEpOworfQorCitzdGF0aWMgdm9pZAorbkFsbG9jYXRpb25SZXNpemUxRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgYWxsb2MsIGppbnQgZGltWCkKK3sKKyAgICBMT0dfQVBJKCJuQWxsb2NhdGlvblJlc2l6ZTFELCBjb24oJXApLCBhbGxvYyglcCksIHNpemVYKCVpKSIsIChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBkaW1YKTsKKyAgICByc0FsbG9jYXRpb25SZXNpemUxRCgoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgZGltWCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBqbG9uZworbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXRTdHJlYW0oSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIG5hdGl2ZV9hc3NldCkKK3sKKyAgICBBTE9HVigiX19fX19fbkZpbGVBM0QgJXUiLCAodWludDMyX3QpIG5hdGl2ZV9hc3NldCk7CisKKyAgICBBc3NldCogYXNzZXQgPSByZWludGVycHJldF9jYXN0PEFzc2V0Kj4obmF0aXZlX2Fzc2V0KTsKKworICAgIGpsb25nIGlkID0gKGpsb25nKXJzYUZpbGVBM0RDcmVhdGVGcm9tTWVtb3J5KChSc0NvbnRleHQpY29uLCBhc3NldC0+Z2V0QnVmZmVyKGZhbHNlKSwgYXNzZXQtPmdldExlbmd0aCgpKTsKKyAgICByZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyBqbG9uZworbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpvYmplY3QgX2Fzc2V0TWdyLCBqc3RyaW5nIF9wYXRoKQoreworICAgIEFzc2V0TWFuYWdlciogbWdyID0gYXNzZXRNYW5hZ2VyRm9ySmF2YU9iamVjdChfZW52LCBfYXNzZXRNZ3IpOworICAgIGlmIChtZ3IgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBBdXRvSmF2YVN0cmluZ1RvVVRGOCBzdHIoX2VudiwgX3BhdGgpOworICAgIEFzc2V0KiBhc3NldCA9IG1nci0+b3BlbihzdHIuY19zdHIoKSwgQXNzZXQ6OkFDQ0VTU19CVUZGRVIpOworICAgIGlmIChhc3NldCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGpsb25nIGlkID0gKGpsb25nKXJzYUZpbGVBM0RDcmVhdGVGcm9tQXNzZXQoKFJzQ29udGV4dCljb24sIGFzc2V0KTsKKyAgICByZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyBqbG9uZworbkZpbGVBM0RDcmVhdGVGcm9tRmlsZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwganN0cmluZyBmaWxlTmFtZSkKK3sKKyAgICBBdXRvSmF2YVN0cmluZ1RvVVRGOCBmaWxlTmFtZVVURihfZW52LCBmaWxlTmFtZSk7CisgICAgamxvbmcgaWQgPSAoamxvbmcpcnNhRmlsZUEzRENyZWF0ZUZyb21GaWxlKChSc0NvbnRleHQpY29uLCBmaWxlTmFtZVVURi5jX3N0cigpKTsKKworICAgIHJldHVybiBpZDsKK30KKworc3RhdGljIGppbnQKK25GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBmaWxlQTNEKQoreworICAgIGludDMyX3QgbnVtRW50cmllcyA9IDA7CisgICAgcnNhRmlsZUEzREdldE51bUluZGV4RW50cmllcygoUnNDb250ZXh0KWNvbiwgJm51bUVudHJpZXMsIChSc0ZpbGUpZmlsZUEzRCk7CisgICAgcmV0dXJuIG51bUVudHJpZXM7Cit9CisKK3N0YXRpYyB2b2lkCituRmlsZUEzREdldEluZGV4RW50cmllcyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgZmlsZUEzRCwgamludCBudW1FbnRyaWVzLCBqaW50QXJyYXkgX2lkcywgam9iamVjdEFycmF5IF9lbnRyaWVzKQoreworICAgIEFMT0dWKCJfX19fX19uRmlsZUEzRCAldSIsICh1aW50MzJfdCkgZmlsZUEzRCk7CisgICAgUnNGaWxlSW5kZXhFbnRyeSAqZmlsZUVudHJpZXMgPSAoUnNGaWxlSW5kZXhFbnRyeSopbWFsbG9jKCh1aW50MzJfdCludW1FbnRyaWVzICogc2l6ZW9mKFJzRmlsZUluZGV4RW50cnkpKTsKKworICAgIHJzYUZpbGVBM0RHZXRJbmRleEVudHJpZXMoKFJzQ29udGV4dCljb24sIGZpbGVFbnRyaWVzLCAodWludDMyX3QpbnVtRW50cmllcywgKFJzRmlsZSlmaWxlQTNEKTsKKworICAgIGZvcihqaW50IGkgPSAwOyBpIDwgbnVtRW50cmllczsgaSArKykgeworICAgICAgICBfZW52LT5TZXRPYmplY3RBcnJheUVsZW1lbnQoX2VudHJpZXMsIGksIF9lbnYtPk5ld1N0cmluZ1VURihmaWxlRW50cmllc1tpXS5vYmplY3ROYW1lKSk7CisgICAgICAgIF9lbnYtPlNldEludEFycmF5UmVnaW9uKF9pZHMsIGksIDEsIChjb25zdCBqaW50KikmZmlsZUVudHJpZXNbaV0uY2xhc3NJRCk7CisgICAgfQorCisgICAgZnJlZShmaWxlRW50cmllcyk7Cit9CisKK3N0YXRpYyBpbnQKK25GaWxlQTNER2V0RW50cnlCeUluZGV4KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBmaWxlQTNELCBqaW50IGluZGV4KQoreworICAgIEFMT0dWKCJfX19fX19uRmlsZUEzRCAldSIsICh1aW50MzJfdCkgZmlsZUEzRCk7CisgICAgamludCBpZCA9IChqaW50KXJzYUZpbGVBM0RHZXRFbnRyeUJ5SW5kZXgoKFJzQ29udGV4dCljb24sICh1aW50MzJfdClpbmRleCwgKFJzRmlsZSlmaWxlQTNEKTsKKyAgICByZXR1cm4gaWQ7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBpbnQKK25Gb250Q3JlYXRlRnJvbUZpbGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sCisgICAgICAgICAgICAgICAgICAgIGpzdHJpbmcgZmlsZU5hbWUsIGpmbG9hdCBmb250U2l6ZSwgamludCBkcGkpCit7CisgICAgQXV0b0phdmFTdHJpbmdUb1VURjggZmlsZU5hbWVVVEYoX2VudiwgZmlsZU5hbWUpOworICAgIGppbnQgaWQgPSAoamludClyc0ZvbnRDcmVhdGVGcm9tRmlsZSgoUnNDb250ZXh0KWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWVVVEYuY19zdHIoKSwgZmlsZU5hbWVVVEYubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplLCBkcGkpOworCisgICAgcmV0dXJuIGlkOworfQorCitzdGF0aWMgaW50CituRm9udENyZWF0ZUZyb21Bc3NldFN0cmVhbShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdHJpbmcgbmFtZSwgamZsb2F0IGZvbnRTaXplLCBqaW50IGRwaSwgamludCBuYXRpdmVfYXNzZXQpCit7CisgICAgQXNzZXQqIGFzc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxBc3NldCo+KG5hdGl2ZV9hc3NldCk7CisgICAgQXV0b0phdmFTdHJpbmdUb1VURjggbmFtZVVURihfZW52LCBuYW1lKTsKKworICAgIGppbnQgaWQgPSAoamludClyc0ZvbnRDcmVhdGVGcm9tTWVtb3J5KChSc0NvbnRleHQpY29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVVVEYuY19zdHIoKSwgbmFtZVVURi5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZSwgZHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0LT5nZXRCdWZmZXIoZmFsc2UpLCBhc3NldC0+Z2V0TGVuZ3RoKCkpOworICAgIHJldHVybiBpZDsKK30KKworc3RhdGljIGludAorbkZvbnRDcmVhdGVGcm9tQXNzZXQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpvYmplY3QgX2Fzc2V0TWdyLCBqc3RyaW5nIF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgamZsb2F0IGZvbnRTaXplLCBqaW50IGRwaSkKK3sKKyAgICBBc3NldE1hbmFnZXIqIG1nciA9IGFzc2V0TWFuYWdlckZvckphdmFPYmplY3QoX2VudiwgX2Fzc2V0TWdyKTsKKyAgICBpZiAobWdyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQXV0b0phdmFTdHJpbmdUb1VURjggc3RyKF9lbnYsIF9wYXRoKTsKKyAgICBBc3NldCogYXNzZXQgPSBtZ3ItPm9wZW4oc3RyLmNfc3RyKCksIEFzc2V0OjpBQ0NFU1NfQlVGRkVSKTsKKyAgICBpZiAoYXNzZXQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBqaW50IGlkID0gKGppbnQpcnNGb250Q3JlYXRlRnJvbU1lbW9yeSgoUnNDb250ZXh0KWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIuY19zdHIoKSwgc3RyLmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplLCBkcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXQtPmdldEJ1ZmZlcihmYWxzZSksIGFzc2V0LT5nZXRMZW5ndGgoKSk7CisgICAgZGVsZXRlIGFzc2V0OworICAgIHJldHVybiBpZDsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIHZvaWQKK25TY3JpcHRCaW5kQWxsb2NhdGlvbihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqbG9uZyBhbGxvYywgamludCBzbG90KQoreworICAgIExPR19BUEkoIm5TY3JpcHRCaW5kQWxsb2NhdGlvbiwgY29uKCVwKSwgc2NyaXB0KCVwKSwgYWxsb2MoJXApLCBzbG90KCVpKSIsIChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2NyaXB0LCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBzbG90KTsKKyAgICByc1NjcmlwdEJpbmRBbGxvY2F0aW9uKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2NyaXB0LCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBzbG90KTsKK30KKworc3RhdGljIHZvaWQKK25TY3JpcHRTZXRWYXJJKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBzY3JpcHQsIGppbnQgc2xvdCwgamludCB2YWwpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdFNldFZhckksIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSwgdmFsKCVpKSIsIChSc0NvbnRleHQpY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCwgdmFsKTsKKyAgICByc1NjcmlwdFNldFZhckkoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHZhbCk7Cit9CisKK3N0YXRpYyBqaW50CituU2NyaXB0R2V0VmFySShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdEdldFZhckksIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIChSc0NvbnRleHQpY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7CisgICAgaW50IHZhbHVlID0gMDsKKyAgICByc1NjcmlwdEdldFZhclYoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdm9pZAorblNjcmlwdFNldFZhck9iaihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QsIGpsb25nIHZhbCkKK3sKKyAgICBMT0dfQVBJKCJuU2NyaXB0U2V0VmFyT2JqLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSksIHZhbCglaSkiLCAoUnNDb250ZXh0KWNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QsIHZhbCk7CisgICAgcnNTY3JpcHRTZXRWYXJPYmooKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIChSc09iamVjdEJhc2UpdmFsKTsKK30KKworc3RhdGljIHZvaWQKK25TY3JpcHRTZXRWYXJKKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBzY3JpcHQsIGppbnQgc2xvdCwgamxvbmcgdmFsKQoreworICAgIExPR19BUEkoIm5TY3JpcHRTZXRWYXJKLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSksIHZhbCglbGxpKSIsIChSc0NvbnRleHQpY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCwgdmFsKTsKKyAgICByc1NjcmlwdFNldFZhckooKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHZhbCk7Cit9CisKK3N0YXRpYyBqbG9uZworblNjcmlwdEdldFZhckooSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHNjcmlwdCwgamludCBzbG90KQoreworICAgIExPR19BUEkoIm5TY3JpcHRHZXRWYXJKLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSkiLCAoUnNDb250ZXh0KWNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QpOworICAgIGpsb25nIHZhbHVlID0gMDsKKyAgICByc1NjcmlwdEdldFZhclYoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdm9pZAorblNjcmlwdFNldFZhckYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHNjcmlwdCwgamludCBzbG90LCBmbG9hdCB2YWwpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdFNldFZhckYsIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSwgdmFsKCVmKSIsIChSc0NvbnRleHQpY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCwgdmFsKTsKKyAgICByc1NjcmlwdFNldFZhckYoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHZhbCk7Cit9CisKK3N0YXRpYyBqZmxvYXQKK25TY3JpcHRHZXRWYXJGKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBzY3JpcHQsIGppbnQgc2xvdCkKK3sKKyAgICBMT0dfQVBJKCJuU2NyaXB0R2V0VmFyRiwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgKFJzQ29udGV4dCljb24sICh2b2lkICopc2NyaXB0LCBzbG90KTsKKyAgICBqZmxvYXQgdmFsdWUgPSAwOworICAgIHJzU2NyaXB0R2V0VmFyVigoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkCituU2NyaXB0U2V0VmFyRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QsIGRvdWJsZSB2YWwpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdFNldFZhckQsIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSwgdmFsKCVsZikiLCAoUnNDb250ZXh0KWNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QsIHZhbCk7CisgICAgcnNTY3JpcHRTZXRWYXJEKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCB2YWwpOworfQorCitzdGF0aWMgamRvdWJsZQorblNjcmlwdEdldFZhckQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHNjcmlwdCwgamludCBzbG90KQoreworICAgIExPR19BUEkoIm5TY3JpcHRHZXRWYXJELCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSkiLCAoUnNDb250ZXh0KWNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QpOworICAgIGpkb3VibGUgdmFsdWUgPSAwOworICAgIHJzU2NyaXB0R2V0VmFyVigoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkCituU2NyaXB0U2V0VmFyVihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QsIGpieXRlQXJyYXkgZGF0YSkKK3sKKyAgICBMT0dfQVBJKCJuU2NyaXB0U2V0VmFyViwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgKFJzQ29udGV4dCljb24sICh2b2lkICopc2NyaXB0LCBzbG90KTsKKyAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOworICAgIGpieXRlICpwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKKyAgICByc1NjcmlwdFNldFZhclYoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHB0ciwgbGVuKTsKKyAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOworfQorCitzdGF0aWMgdm9pZAorblNjcmlwdEdldFZhclYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHNjcmlwdCwgamludCBzbG90LCBqYnl0ZUFycmF5IGRhdGEpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdFNldFZhclYsIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIChSc0NvbnRleHQpY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7CisgICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKKyAgICBqYnl0ZSAqcHRyID0gX2Vudi0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7CisgICAgcnNTY3JpcHRHZXRWYXJWKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCBwdHIsIGxlbik7CisgICAgX2Vudi0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgSk5JX0FCT1JUKTsKK30KKworc3RhdGljIHZvaWQKK25TY3JpcHRTZXRWYXJWRShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QsIGpieXRlQXJyYXkgZGF0YSwgamxvbmcgZWxlbSwgamludEFycmF5IGRpbXMpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdFNldFZhclZFLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSkiLCAoUnNDb250ZXh0KWNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QpOworICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7CisgICAgamJ5dGUgKnB0ciA9IF9lbnYtPkdldEJ5dGVBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOworICAgIGppbnQgZGltc0xlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRpbXMpICogc2l6ZW9mKGludCk7CisgICAgamludCAqZGltc1B0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoZGltcywgTlVMTCk7CisgICAgcnNTY3JpcHRTZXRWYXJWRSgoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgcHRyLCBsZW4sIChSc0VsZW1lbnQpZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaXplX3QqKSBkaW1zUHRyLCBkaW1zTGVuKTsKKyAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOworICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKGRpbXMsIGRpbXNQdHIsIEpOSV9BQk9SVCk7Cit9CisKKworc3RhdGljIHZvaWQKK25TY3JpcHRTZXRUaW1lWm9uZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqYnl0ZUFycmF5IHRpbWVab25lKQoreworICAgIExPR19BUEkoIm5TY3JpcHRDU2V0VGltZVpvbmUsIGNvbiglcCksIHMoJXApIiwgKFJzQ29udGV4dCljb24sICh2b2lkICopc2NyaXB0KTsKKworICAgIGppbnQgbGVuZ3RoID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgodGltZVpvbmUpOworICAgIGpieXRlKiB0aW1lWm9uZV9wdHI7CisgICAgdGltZVpvbmVfcHRyID0gKGpieXRlICopIF9lbnYtPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwodGltZVpvbmUsIChqYm9vbGVhbiAqKTApOworCisgICAgcnNTY3JpcHRTZXRUaW1lWm9uZSgoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgKGNvbnN0IGNoYXIgKil0aW1lWm9uZV9wdHIsIGxlbmd0aCk7CisKKyAgICBpZiAodGltZVpvbmVfcHRyKSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKHRpbWVab25lLCB0aW1lWm9uZV9wdHIsIDApOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK25TY3JpcHRJbnZva2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIG9iaiwgamludCBzbG90KQoreworICAgIExPR19BUEkoIm5TY3JpcHRJbnZva2UsIGNvbiglcCksIHNjcmlwdCglcCkiLCAoUnNDb250ZXh0KWNvbiwgKHZvaWQgKilvYmopOworICAgIHJzU2NyaXB0SW52b2tlKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpb2JqLCBzbG90KTsKK30KKworc3RhdGljIHZvaWQKK25TY3JpcHRJbnZva2VWKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBzY3JpcHQsIGppbnQgc2xvdCwgamJ5dGVBcnJheSBkYXRhKQoreworICAgIExPR19BUEkoIm5TY3JpcHRJbnZva2VWLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSkiLCAoUnNDb250ZXh0KWNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QpOworICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7CisgICAgamJ5dGUgKnB0ciA9IF9lbnYtPkdldEJ5dGVBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOworICAgIHJzU2NyaXB0SW52b2tlVigoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgcHRyLCBsZW4pOworICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Cit9CisKK3N0YXRpYyB2b2lkCituU2NyaXB0Rm9yRWFjaChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwKKyAgICAgICAgICAgICAgIGpsb25nIHNjcmlwdCwgamludCBzbG90LCBqbG9uZyBhaW4sIGpsb25nIGFvdXQpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdEZvckVhY2gsIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIChSc0NvbnRleHQpY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7CisgICAgcnNTY3JpcHRGb3JFYWNoKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAoUnNBbGxvY2F0aW9uKWFpbiwgKFJzQWxsb2NhdGlvbilhb3V0LCBOVUxMLCAwLCBOVUxMLCAwKTsKK30KK3N0YXRpYyB2b2lkCituU2NyaXB0Rm9yRWFjaFYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sCisgICAgICAgICAgICAgICAgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QsIGpsb25nIGFpbiwgamxvbmcgYW91dCwgamJ5dGVBcnJheSBwYXJhbXMpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdEZvckVhY2gsIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIChSc0NvbnRleHQpY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7CisgICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbXMpOworICAgIGpieXRlICpwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhwYXJhbXMsIE5VTEwpOworICAgIHJzU2NyaXB0Rm9yRWFjaCgoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgKFJzQWxsb2NhdGlvbilhaW4sIChSc0FsbG9jYXRpb24pYW91dCwgcHRyLCBsZW4sIE5VTEwsIDApOworICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhwYXJhbXMsIHB0ciwgSk5JX0FCT1JUKTsKK30KKworc3RhdGljIHZvaWQKK25TY3JpcHRGb3JFYWNoQ2xpcHBlZChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwKKyAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBzY3JpcHQsIGppbnQgc2xvdCwgamxvbmcgYWluLCBqbG9uZyBhb3V0LAorICAgICAgICAgICAgICAgICAgICAgIGppbnQgeHN0YXJ0LCBqaW50IHhlbmQsCisgICAgICAgICAgICAgICAgICAgICAgamludCB5c3RhcnQsIGppbnQgeWVuZCwgamludCB6c3RhcnQsIGppbnQgemVuZCkKK3sKKyAgICBMT0dfQVBJKCJuU2NyaXB0Rm9yRWFjaENsaXBwZWQsIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIChSc0NvbnRleHQpY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7CisgICAgUnNTY3JpcHRDYWxsIHNjOworICAgIHNjLnhTdGFydCA9IHhzdGFydDsKKyAgICBzYy54RW5kID0geGVuZDsKKyAgICBzYy55U3RhcnQgPSB5c3RhcnQ7CisgICAgc2MueUVuZCA9IHllbmQ7CisgICAgc2MuelN0YXJ0ID0genN0YXJ0OworICAgIHNjLnpFbmQgPSB6ZW5kOworICAgIHNjLnN0cmF0ZWd5ID0gUlNfRk9SX0VBQ0hfU1RSQVRFR1lfRE9OVF9DQVJFOworICAgIHNjLmFycmF5U3RhcnQgPSAwOworICAgIHNjLmFycmF5RW5kID0gMDsKKyAgICByc1NjcmlwdEZvckVhY2goKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIChSc0FsbG9jYXRpb24pYWluLCAoUnNBbGxvY2F0aW9uKWFvdXQsIE5VTEwsIDAsICZzYywgc2l6ZW9mKHNjKSk7Cit9CisKK3N0YXRpYyB2b2lkCituU2NyaXB0Rm9yRWFjaENsaXBwZWRWKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLAorICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBzY3JpcHQsIGppbnQgc2xvdCwgamxvbmcgYWluLCBqbG9uZyBhb3V0LAorICAgICAgICAgICAgICAgICAgICAgICBqYnl0ZUFycmF5IHBhcmFtcywgamludCB4c3RhcnQsIGppbnQgeGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgamludCB5c3RhcnQsIGppbnQgeWVuZCwgamludCB6c3RhcnQsIGppbnQgemVuZCkKK3sKKyAgICBMT0dfQVBJKCJuU2NyaXB0Rm9yRWFjaENsaXBwZWQsIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIChSc0NvbnRleHQpY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7CisgICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbXMpOworICAgIGpieXRlICpwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhwYXJhbXMsIE5VTEwpOworICAgIFJzU2NyaXB0Q2FsbCBzYzsKKyAgICBzYy54U3RhcnQgPSB4c3RhcnQ7CisgICAgc2MueEVuZCA9IHhlbmQ7CisgICAgc2MueVN0YXJ0ID0geXN0YXJ0OworICAgIHNjLnlFbmQgPSB5ZW5kOworICAgIHNjLnpTdGFydCA9IHpzdGFydDsKKyAgICBzYy56RW5kID0gemVuZDsKKyAgICBzYy5zdHJhdGVneSA9IFJTX0ZPUl9FQUNIX1NUUkFURUdZX0RPTlRfQ0FSRTsKKyAgICBzYy5hcnJheVN0YXJ0ID0gMDsKKyAgICBzYy5hcnJheUVuZCA9IDA7CisgICAgcnNTY3JpcHRGb3JFYWNoKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAoUnNBbGxvY2F0aW9uKWFpbiwgKFJzQWxsb2NhdGlvbilhb3V0LCBwdHIsIGxlbiwgJnNjLCBzaXplb2Yoc2MpKTsKKyAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMocGFyYW1zLCBwdHIsIEpOSV9BQk9SVCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBqaW50CituU2NyaXB0Q0NyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwKKyAgICAgICAgICAgICAgIGpzdHJpbmcgcmVzTmFtZSwganN0cmluZyBjYWNoZURpciwKKyAgICAgICAgICAgICAgIGpieXRlQXJyYXkgc2NyaXB0UmVmLCBqaW50IGxlbmd0aCkKK3sKKyAgICBMT0dfQVBJKCJuU2NyaXB0Q0NyZWF0ZSwgY29uKCVwKSIsIChSc0NvbnRleHQpY29uKTsKKworICAgIEF1dG9KYXZhU3RyaW5nVG9VVEY4IHJlc05hbWVVVEYoX2VudiwgcmVzTmFtZSk7CisgICAgQXV0b0phdmFTdHJpbmdUb1VURjggY2FjaGVEaXJVVEYoX2VudiwgY2FjaGVEaXIpOworICAgIGppbnQgcmV0ID0gMDsKKyAgICBqYnl0ZSogc2NyaXB0X3B0ciA9IE5VTEw7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBqaW50IHJlbWFpbmluZzsKKyAgICBpZiAoIXNjcmlwdFJlZikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgLy9qbmlUaHJvd0V4Y2VwdGlvbihfZW52LCAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIsICJzY3JpcHQgPT0gbnVsbCIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChsZW5ndGggPCAwKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICAvL2puaVRocm93RXhjZXB0aW9uKF9lbnYsICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIiwgImxlbmd0aCA8IDAiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICByZW1haW5pbmcgPSBfZW52LT5HZXRBcnJheUxlbmd0aChzY3JpcHRSZWYpOworICAgIGlmIChyZW1haW5pbmcgPCBsZW5ndGgpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIC8vam5pVGhyb3dFeGNlcHRpb24oX2VudiwgImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLAorICAgICAgICAvLyAgICAgICAgImxlbmd0aCA+IHNjcmlwdC5sZW5ndGggLSBvZmZzZXQiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBzY3JpcHRfcHRyID0gKGpieXRlICopCisgICAgICAgIF9lbnYtPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoc2NyaXB0UmVmLCAoamJvb2xlYW4gKikwKTsKKworICAgIC8vcnNTY3JpcHRDU2V0VGV4dCgoUnNDb250ZXh0KWNvbiwgKGNvbnN0IGNoYXIgKilzY3JpcHRfcHRyLCBsZW5ndGgpOworCisgICAgcmV0ID0gKGppbnQpcnNTY3JpcHRDQ3JlYXRlKChSc0NvbnRleHQpY29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNOYW1lVVRGLmNfc3RyKCksIHJlc05hbWVVVEYubGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRGlyVVRGLmNfc3RyKCksIGNhY2hlRGlyVVRGLmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKXNjcmlwdF9wdHIsIGxlbmd0aCk7CisKK2V4aXQ6CisgICAgaWYgKHNjcmlwdF9wdHIpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoc2NyaXB0UmVmLCBzY3JpcHRfcHRyLAorICAgICAgICAgICAgICAgIF9leGNlcHRpb24gPyBKTklfQUJPUlQ6IDApOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBqbG9uZworblNjcmlwdEludHJpbnNpY0NyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamludCBpZCwgamxvbmcgZWlkKQoreworICAgIExPR19BUEkoIm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUsIGNvbiglcCkgaWQoJWkpIGVsZW1lbnQoJXApIiwgKFJzQ29udGV4dCljb24sIGlkLCAodm9pZCAqKWVpZCk7CisgICAgcmV0dXJuIChqbG9uZylyc1NjcmlwdEludHJpbnNpY0NyZWF0ZSgoUnNDb250ZXh0KWNvbiwgaWQsIChSc0VsZW1lbnQpZWlkKTsKK30KKworc3RhdGljIGpsb25nCituU2NyaXB0S2VybmVsSURDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHNpZCwgamludCBzbG90LCBqaW50IHNpZykKK3sKKyAgICBMT0dfQVBJKCJuU2NyaXB0S2VybmVsSURDcmVhdGUsIGNvbiglcCkgc2NyaXB0KCVwKSwgc2xvdCglaSksIHNpZyglaSkiLCAoUnNDb250ZXh0KWNvbiwgKHZvaWQgKilzaWQsIHNsb3QsIHNpZyk7CisgICAgcmV0dXJuIChqaW50KXJzU2NyaXB0S2VybmVsSURDcmVhdGUoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzaWQsIHNsb3QsIHNpZyk7Cit9CisKK3N0YXRpYyBqbG9uZworblNjcmlwdEZpZWxkSURDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHNpZCwgamludCBzbG90KQoreworICAgIExPR19BUEkoIm5TY3JpcHRGaWVsZElEQ3JlYXRlLCBjb24oJXApIHNjcmlwdCglcCksIHNsb3QoJWkpIiwgKFJzQ29udGV4dCljb24sICh2b2lkICopc2lkLCBzbG90KTsKKyAgICByZXR1cm4gKGppbnQpcnNTY3JpcHRGaWVsZElEQ3JlYXRlKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2lkLCBzbG90KTsKK30KKworc3RhdGljIGpsb25nCituU2NyaXB0R3JvdXBDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnRBcnJheSBfa2VybmVscywgamludEFycmF5IF9zcmMsCisgICAgamludEFycmF5IF9kc3RrLCBqaW50QXJyYXkgX2RzdGYsIGppbnRBcnJheSBfdHlwZXMpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdEdyb3VwQ3JlYXRlLCBjb24oJXApIiwgKFJzQ29udGV4dCljb24pOworCisgICAgamludCBrZXJuZWxzTGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoX2tlcm5lbHMpICogc2l6ZW9mKGludCk7CisgICAgamludCAqa2VybmVsc1B0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX2tlcm5lbHMsIE5VTEwpOworICAgIGppbnQgc3JjTGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoX3NyYykgKiBzaXplb2YoaW50KTsKKyAgICBqaW50ICpzcmNQdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9zcmMsIE5VTEwpOworICAgIGppbnQgZHN0a0xlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKF9kc3RrKSAqIHNpemVvZihpbnQpOworICAgIGppbnQgKmRzdGtQdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9kc3RrLCBOVUxMKTsKKyAgICBqaW50IGRzdGZMZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChfZHN0ZikgKiBzaXplb2YoaW50KTsKKyAgICBqaW50ICpkc3RmUHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfZHN0ZiwgTlVMTCk7CisgICAgamludCB0eXBlc0xlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKF90eXBlcykgKiBzaXplb2YoaW50KTsKKyAgICBqaW50ICp0eXBlc1B0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX3R5cGVzLCBOVUxMKTsKKworICAgIGludCBpZCA9IChpbnQpcnNTY3JpcHRHcm91cENyZWF0ZSgoUnNDb250ZXh0KWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNTY3JpcHRLZXJuZWxJRCAqKWtlcm5lbHNQdHIsIGtlcm5lbHNMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzU2NyaXB0S2VybmVsSUQgKilzcmNQdHIsIHNyY0xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNTY3JpcHRLZXJuZWxJRCAqKWRzdGtQdHIsIGRzdGtMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzU2NyaXB0RmllbGRJRCAqKWRzdGZQdHIsIGRzdGZMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzVHlwZSAqKXR5cGVzUHRyLCB0eXBlc0xlbik7CisKKyAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfa2VybmVscywga2VybmVsc1B0ciwgMCk7CisgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX3NyYywgc3JjUHRyLCAwKTsKKyAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfZHN0aywgZHN0a1B0ciwgMCk7CisgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX2RzdGYsIGRzdGZQdHIsIDApOworICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF90eXBlcywgdHlwZXNQdHIsIDApOworICAgIHJldHVybiBpZDsKK30KKworc3RhdGljIHZvaWQKK25TY3JpcHRHcm91cFNldElucHV0KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBnaWQsIGpsb25nIGtpZCwgamxvbmcgYWxsb2MpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdEdyb3VwU2V0SW5wdXQsIGNvbiglcCkgZ3JvdXAoJXApLCBrZXJuZWxJZCglcCksIGFsbG9jKCVwKSIsIChSc0NvbnRleHQpY29uLAorICAgICAgICAodm9pZCAqKWdpZCwgKHZvaWQgKilraWQsICh2b2lkICopYWxsb2MpOworICAgIHJzU2NyaXB0R3JvdXBTZXRJbnB1dCgoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0R3JvdXApZ2lkLCAoUnNTY3JpcHRLZXJuZWxJRClraWQsIChSc0FsbG9jYXRpb24pYWxsb2MpOworfQorCitzdGF0aWMgdm9pZAorblNjcmlwdEdyb3VwU2V0T3V0cHV0KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBnaWQsIGpsb25nIGtpZCwgamxvbmcgYWxsb2MpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdEdyb3VwU2V0T3V0cHV0LCBjb24oJXApIGdyb3VwKCVwKSwga2VybmVsSWQoJXApLCBhbGxvYyglcCkiLCAoUnNDb250ZXh0KWNvbiwKKyAgICAgICAgKHZvaWQgKilnaWQsICh2b2lkICopa2lkLCAodm9pZCAqKWFsbG9jKTsKKyAgICByc1NjcmlwdEdyb3VwU2V0T3V0cHV0KChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHRHcm91cClnaWQsIChSc1NjcmlwdEtlcm5lbElEKWtpZCwgKFJzQWxsb2NhdGlvbilhbGxvYyk7Cit9CisKK3N0YXRpYyB2b2lkCituU2NyaXB0R3JvdXBFeGVjdXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBnaWQpCit7CisgICAgTE9HX0FQSSgiblNjcmlwdEdyb3VwU2V0T3V0cHV0LCBjb24oJXApIGdyb3VwKCVwKSIsIChSc0NvbnRleHQpY29uLCAodm9pZCAqKWdpZCk7CisgICAgcnNTY3JpcHRHcm91cEV4ZWN1dGUoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdEdyb3VwKWdpZCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgamludAorblByb2dyYW1TdG9yZUNyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwKKyAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gY29sb3JNYXNrUiwgamJvb2xlYW4gY29sb3JNYXNrRywgamJvb2xlYW4gY29sb3JNYXNrQiwgamJvb2xlYW4gY29sb3JNYXNrQSwKKyAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gZGVwdGhNYXNrLCBqYm9vbGVhbiBkaXRoZXJFbmFibGUsCisgICAgICAgICAgICAgICAgICAgIGppbnQgc3JjRnVuYywgamludCBkZXN0RnVuYywKKyAgICAgICAgICAgICAgICAgICAgamludCBkZXB0aEZ1bmMpCit7CisgICAgTE9HX0FQSSgiblByb2dyYW1TdG9yZUNyZWF0ZSwgY29uKCVwKSIsIChSc0NvbnRleHQpY29uKTsKKyAgICByZXR1cm4gKGppbnQpcnNQcm9ncmFtU3RvcmVDcmVhdGUoKFJzQ29udGV4dCljb24sIGNvbG9yTWFza1IsIGNvbG9yTWFza0csIGNvbG9yTWFza0IsIGNvbG9yTWFza0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoTWFzaywgZGl0aGVyRW5hYmxlLCAoUnNCbGVuZFNyY0Z1bmMpc3JjRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzQmxlbmREc3RGdW5jKWRlc3RGdW5jLCAoUnNEZXB0aEZ1bmMpZGVwdGhGdW5jKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyB2b2lkCituUHJvZ3JhbUJpbmRDb25zdGFudHMoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHZwdiwgamludCBzbG90LCBqbG9uZyBhKQoreworICAgIExPR19BUEkoIm5Qcm9ncmFtQmluZENvbnN0YW50cywgY29uKCVwKSwgdnBmKCVwKSwgc2xvYXQoJWkpLCBhKCVwKSIsIChSc0NvbnRleHQpY29uLCAoUnNQcm9ncmFtVmVydGV4KXZwdiwgc2xvdCwgKFJzQWxsb2NhdGlvbilhKTsKKyAgICByc1Byb2dyYW1CaW5kQ29uc3RhbnRzKChSc0NvbnRleHQpY29uLCAoUnNQcm9ncmFtKXZwdiwgc2xvdCwgKFJzQWxsb2NhdGlvbilhKTsKK30KKworc3RhdGljIHZvaWQKK25Qcm9ncmFtQmluZFRleHR1cmUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHZwZiwgamludCBzbG90LCBqbG9uZyBhKQoreworICAgIExPR19BUEkoIm5Qcm9ncmFtQmluZFRleHR1cmUsIGNvbiglcCksIHZwZiglcCksIHNsb3QoJWkpLCBhKCVwKSIsIChSc0NvbnRleHQpY29uLCAoUnNQcm9ncmFtRnJhZ21lbnQpdnBmLCBzbG90LCAoUnNBbGxvY2F0aW9uKWEpOworICAgIHJzUHJvZ3JhbUJpbmRUZXh0dXJlKChSc0NvbnRleHQpY29uLCAoUnNQcm9ncmFtRnJhZ21lbnQpdnBmLCBzbG90LCAoUnNBbGxvY2F0aW9uKWEpOworfQorCitzdGF0aWMgdm9pZAorblByb2dyYW1CaW5kU2FtcGxlcihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgdnBmLCBqaW50IHNsb3QsIGpsb25nIGEpCit7CisgICAgTE9HX0FQSSgiblByb2dyYW1CaW5kU2FtcGxlciwgY29uKCVwKSwgdnBmKCVwKSwgc2xvdCglaSksIGEoJXApIiwgKFJzQ29udGV4dCljb24sIChSc1Byb2dyYW1GcmFnbWVudCl2cGYsIHNsb3QsIChSc1NhbXBsZXIpYSk7CisgICAgcnNQcm9ncmFtQmluZFNhbXBsZXIoKFJzQ29udGV4dCljb24sIChSc1Byb2dyYW1GcmFnbWVudCl2cGYsIHNsb3QsIChSc1NhbXBsZXIpYSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgamxvbmcKK25Qcm9ncmFtRnJhZ21lbnRDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpzdHJpbmcgc2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0QXJyYXkgdGV4TmFtZXMsIGppbnRBcnJheSBwYXJhbXMpCit7CisgICAgQXV0b0phdmFTdHJpbmdUb1VURjggc2hhZGVyVVRGKF9lbnYsIHNoYWRlcik7CisgICAgamludCAqcGFyYW1QdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKHBhcmFtcywgTlVMTCk7CisgICAgamludCBwYXJhbUxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHBhcmFtcyk7CisKKyAgICBpbnQgdGV4Q291bnQgPSBfZW52LT5HZXRBcnJheUxlbmd0aCh0ZXhOYW1lcyk7CisgICAgQXV0b0phdmFTdHJpbmdBcnJheVRvVVRGOCBuYW1lcyhfZW52LCB0ZXhOYW1lcywgdGV4Q291bnQpOworICAgIGNvbnN0IGNoYXIgKiogbmFtZUFycmF5ID0gbmFtZXMuY19zdHIoKTsKKyAgICBzaXplX3QqIHNpemVBcnJheSA9IG5hbWVzLmNfc3RyX2xlbigpOworCisgICAgTE9HX0FQSSgiblByb2dyYW1GcmFnbWVudENyZWF0ZSwgY29uKCVwKSwgcGFyYW1MZW4oJWkpIiwgKFJzQ29udGV4dCljb24sIHBhcmFtTGVuKTsKKworICAgIGpsb25nIHJldCA9IChqbG9uZylyc1Byb2dyYW1GcmFnbWVudENyZWF0ZSgoUnNDb250ZXh0KWNvbiwgc2hhZGVyVVRGLmNfc3RyKCksIHNoYWRlclVURi5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVBcnJheSwgdGV4Q291bnQsIHNpemVBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXBhcmFtUHRyLCBwYXJhbUxlbik7CisKKyAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhwYXJhbXMsIHBhcmFtUHRyLCBKTklfQUJPUlQpOworICAgIHJldHVybiByZXQ7Cit9CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBqbG9uZworblByb2dyYW1WZXJ0ZXhDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpzdHJpbmcgc2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgam9iamVjdEFycmF5IHRleE5hbWVzLCBqaW50QXJyYXkgcGFyYW1zKQoreworICAgIEF1dG9KYXZhU3RyaW5nVG9VVEY4IHNoYWRlclVURihfZW52LCBzaGFkZXIpOworICAgIGppbnQgKnBhcmFtUHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhwYXJhbXMsIE5VTEwpOworICAgIGppbnQgcGFyYW1MZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbXMpOworCisgICAgTE9HX0FQSSgiblByb2dyYW1WZXJ0ZXhDcmVhdGUsIGNvbiglcCksIHBhcmFtTGVuKCVpKSIsIChSc0NvbnRleHQpY29uLCBwYXJhbUxlbik7CisKKyAgICBpbnQgdGV4Q291bnQgPSBfZW52LT5HZXRBcnJheUxlbmd0aCh0ZXhOYW1lcyk7CisgICAgQXV0b0phdmFTdHJpbmdBcnJheVRvVVRGOCBuYW1lcyhfZW52LCB0ZXhOYW1lcywgdGV4Q291bnQpOworICAgIGNvbnN0IGNoYXIgKiogbmFtZUFycmF5ID0gbmFtZXMuY19zdHIoKTsKKyAgICBzaXplX3QqIHNpemVBcnJheSA9IG5hbWVzLmNfc3RyX2xlbigpOworCisgICAgamxvbmcgcmV0ID0gKGpsb25nKXJzUHJvZ3JhbVZlcnRleENyZWF0ZSgoUnNDb250ZXh0KWNvbiwgc2hhZGVyVVRGLmNfc3RyKCksIHNoYWRlclVURi5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lQXJyYXksIHRleENvdW50LCBzaXplQXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopcGFyYW1QdHIsIHBhcmFtTGVuKTsKKworICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKHBhcmFtcywgcGFyYW1QdHIsIEpOSV9BQk9SVCk7CisgICAgcmV0dXJuIHJldDsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBqbG9uZworblByb2dyYW1SYXN0ZXJDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpib29sZWFuIHBvaW50U3ByaXRlLCBqaW50IGN1bGwpCit7CisgICAgTE9HX0FQSSgiblByb2dyYW1SYXN0ZXJDcmVhdGUsIGNvbiglcCksIHBvaW50U3ByaXRlKCVpKSwgY3VsbCglaSkiLCAoUnNDb250ZXh0KWNvbiwgcG9pbnRTcHJpdGUsIGN1bGwpOworICAgIHJldHVybiAoamludClyc1Byb2dyYW1SYXN0ZXJDcmVhdGUoKFJzQ29udGV4dCljb24sIHBvaW50U3ByaXRlLCAoUnNDdWxsTW9kZSljdWxsKTsKK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIHZvaWQKK25Db250ZXh0QmluZFJvb3RTY3JpcHQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnQgc2NyaXB0KQoreworICAgIExPR19BUEkoIm5Db250ZXh0QmluZFJvb3RTY3JpcHQsIGNvbiglcCksIHNjcmlwdCglcCkiLCAoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCk7CisgICAgcnNDb250ZXh0QmluZFJvb3RTY3JpcHQoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQpOworfQorCitzdGF0aWMgdm9pZAorbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqaW50IHBmcykKK3sKKyAgICBMT0dfQVBJKCJuQ29udGV4dEJpbmRQcm9ncmFtU3RvcmUsIGNvbiglcCksIHBmcyglcCkiLCAoUnNDb250ZXh0KWNvbiwgKFJzUHJvZ3JhbVN0b3JlKXBmcyk7CisgICAgcnNDb250ZXh0QmluZFByb2dyYW1TdG9yZSgoUnNDb250ZXh0KWNvbiwgKFJzUHJvZ3JhbVN0b3JlKXBmcyk7Cit9CisKK3N0YXRpYyB2b2lkCituQ29udGV4dEJpbmRQcm9ncmFtRnJhZ21lbnQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnQgcGYpCit7CisgICAgTE9HX0FQSSgibkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50LCBjb24oJXApLCBwZiglcCkiLCAoUnNDb250ZXh0KWNvbiwgKFJzUHJvZ3JhbUZyYWdtZW50KXBmKTsKKyAgICByc0NvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50KChSc0NvbnRleHQpY29uLCAoUnNQcm9ncmFtRnJhZ21lbnQpcGYpOworfQorCitzdGF0aWMgdm9pZAorbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamludCBwZikKK3sKKyAgICBMT0dfQVBJKCJuQ29udGV4dEJpbmRQcm9ncmFtVmVydGV4LCBjb24oJXApLCBwZiglcCkiLCAoUnNDb250ZXh0KWNvbiwgKFJzUHJvZ3JhbVZlcnRleClwZik7CisgICAgcnNDb250ZXh0QmluZFByb2dyYW1WZXJ0ZXgoKFJzQ29udGV4dCljb24sIChSc1Byb2dyYW1WZXJ0ZXgpcGYpOworfQorCitzdGF0aWMgdm9pZAorbkNvbnRleHRCaW5kUHJvZ3JhbVJhc3RlcihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamludCBwZikKK3sKKyAgICBMT0dfQVBJKCJuQ29udGV4dEJpbmRQcm9ncmFtUmFzdGVyLCBjb24oJXApLCBwZiglcCkiLCAoUnNDb250ZXh0KWNvbiwgKFJzUHJvZ3JhbVJhc3RlcilwZik7CisgICAgcnNDb250ZXh0QmluZFByb2dyYW1SYXN0ZXIoKFJzQ29udGV4dCljb24sIChSc1Byb2dyYW1SYXN0ZXIpcGYpOworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgamludAorblNhbXBsZXJDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnQgbWFnRmlsdGVyLCBqaW50IG1pbkZpbHRlciwKKyAgICAgICAgICAgICAgIGppbnQgd3JhcFMsIGppbnQgd3JhcFQsIGppbnQgd3JhcFIsIGpmbG9hdCBhbmlzbykKK3sKKyAgICBMT0dfQVBJKCJuU2FtcGxlckNyZWF0ZSwgY29uKCVwKSIsIChSc0NvbnRleHQpY29uKTsKKyAgICByZXR1cm4gKGppbnQpcnNTYW1wbGVyQ3JlYXRlKChSc0NvbnRleHQpY29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzU2FtcGxlclZhbHVlKW1hZ0ZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc1NhbXBsZXJWYWx1ZSltaW5GaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNTYW1wbGVyVmFsdWUpd3JhcFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNTYW1wbGVyVmFsdWUpd3JhcFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNTYW1wbGVyVmFsdWUpd3JhcFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmlzbyk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgamxvbmcKK25QYXRoQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqaW50IHByaW0sIGpib29sZWFuIGlzU3RhdGljLCBqbG9uZyBfdnR4LCBqaW50IF9sb29wLCBqZmxvYXQgcSkgeworICAgIExPR19BUEkoIm5QYXRoQ3JlYXRlLCBjb24oJXApIiwgKFJzQ29udGV4dCljb24pOworCisgICAgamxvbmcgaWQgPSAoamxvbmcpcnNQYXRoQ3JlYXRlKChSc0NvbnRleHQpY29uLCAoUnNQYXRoUHJpbWl0aXZlKXByaW0sIGlzU3RhdGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNBbGxvY2F0aW9uKV92dHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc0FsbG9jYXRpb24pX2xvb3AsIHEpOworICAgIHJldHVybiBpZDsKK30KKworc3RhdGljIGpsb25nCituTWVzaENyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamludEFycmF5IF92dHgsIGppbnRBcnJheSBfaWR4LCBqaW50QXJyYXkgX3ByaW0pCit7CisgICAgTE9HX0FQSSgibk1lc2hDcmVhdGUsIGNvbiglcCkiLCAoUnNDb250ZXh0KWNvbik7CisKKyAgICBqaW50IHZ0eExlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKF92dHgpOworICAgIGppbnQgKnZ0eFB0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX3Z0eCwgTlVMTCk7CisgICAgamludCBpZHhMZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChfaWR4KTsKKyAgICBqaW50ICppZHhQdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9pZHgsIE5VTEwpOworICAgIGppbnQgcHJpbUxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKF9wcmltKTsKKyAgICBqaW50ICpwcmltUHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfcHJpbSwgTlVMTCk7CisKKyAgICBpbnQgaWQgPSAoaW50KXJzTWVzaENyZWF0ZSgoUnNDb250ZXh0KWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNBbGxvY2F0aW9uICopdnR4UHRyLCB2dHhMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzQWxsb2NhdGlvbiAqKWlkeFB0ciwgaWR4TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXByaW1QdHIsIHByaW1MZW4pOworCisgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX3Z0eCwgdnR4UHRyLCAwKTsKKyAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfaWR4LCBpZHhQdHIsIDApOworICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF9wcmltLCBwcmltUHRyLCAwKTsKKyAgICByZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyBqaW50CituTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBtZXNoKQoreworICAgIExPR19BUEkoIm5NZXNoR2V0VmVydGV4QnVmZmVyQ291bnQsIGNvbiglcCksIE1lc2goJXApIiwgKFJzQ29udGV4dCljb24sIChSc01lc2gpbWVzaCk7CisgICAgamludCB2dHhDb3VudCA9IDA7CisgICAgcnNhTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50KChSc0NvbnRleHQpY29uLCAoUnNNZXNoKW1lc2gsICZ2dHhDb3VudCk7CisgICAgcmV0dXJuIHZ0eENvdW50OworfQorCitzdGF0aWMgamludAorbk1lc2hHZXRJbmRleENvdW50KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBtZXNoKQoreworICAgIExPR19BUEkoIm5NZXNoR2V0SW5kZXhDb3VudCwgY29uKCVwKSwgTWVzaCglcCkiLCAoUnNDb250ZXh0KWNvbiwgKFJzTWVzaCltZXNoKTsKKyAgICBqaW50IGlkeENvdW50ID0gMDsKKyAgICByc2FNZXNoR2V0SW5kZXhDb3VudCgoUnNDb250ZXh0KWNvbiwgKFJzTWVzaCltZXNoLCAmaWR4Q291bnQpOworICAgIHJldHVybiBpZHhDb3VudDsKK30KKworc3RhdGljIHZvaWQKK25NZXNoR2V0VmVydGljZXMoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIG1lc2gsIGppbnRBcnJheSBfaWRzLCBpbnQgbnVtVnR4SURzKQoreworICAgIExPR19BUEkoIm5NZXNoR2V0VmVydGljZXMsIGNvbiglcCksIE1lc2goJXApIiwgKFJzQ29udGV4dCljb24sIChSc01lc2gpbWVzaCk7CisKKyAgICBSc0FsbG9jYXRpb24gKmFsbG9jcyA9IChSc0FsbG9jYXRpb24qKW1hbGxvYygodWludDMyX3QpbnVtVnR4SURzICogc2l6ZW9mKFJzQWxsb2NhdGlvbikpOworICAgIHJzYU1lc2hHZXRWZXJ0aWNlcygoUnNDb250ZXh0KWNvbiwgKFJzTWVzaCltZXNoLCBhbGxvY3MsICh1aW50MzJfdCludW1WdHhJRHMpOworCisgICAgZm9yKGppbnQgaSA9IDA7IGkgPCBudW1WdHhJRHM7IGkgKyspIHsKKyAgICAgICAgX2Vudi0+U2V0SW50QXJyYXlSZWdpb24oX2lkcywgaSwgMSwgKGNvbnN0IGppbnQqKSZhbGxvY3NbaV0pOworICAgIH0KKworICAgIGZyZWUoYWxsb2NzKTsKK30KKworc3RhdGljIHZvaWQKK25NZXNoR2V0SW5kaWNlcyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgbWVzaCwgamludEFycmF5IF9pZHhJZHMsIGppbnRBcnJheSBfcHJpbWl0aXZlcywgaW50IG51bUluZGljZXMpCit7CisgICAgTE9HX0FQSSgibk1lc2hHZXRWZXJ0aWNlcywgY29uKCVwKSwgTWVzaCglcCkiLCAoUnNDb250ZXh0KWNvbiwgKFJzTWVzaCltZXNoKTsKKworICAgIFJzQWxsb2NhdGlvbiAqYWxsb2NzID0gKFJzQWxsb2NhdGlvbiopbWFsbG9jKCh1aW50MzJfdCludW1JbmRpY2VzICogc2l6ZW9mKFJzQWxsb2NhdGlvbikpOworICAgIHVpbnQzMl90ICpwcmltcz0gKHVpbnQzMl90KiltYWxsb2MoKHVpbnQzMl90KW51bUluZGljZXMgKiBzaXplb2YodWludDMyX3QpKTsKKworICAgIHJzYU1lc2hHZXRJbmRpY2VzKChSc0NvbnRleHQpY29uLCAoUnNNZXNoKW1lc2gsIGFsbG9jcywgcHJpbXMsICh1aW50MzJfdCludW1JbmRpY2VzKTsKKworICAgIGZvcihqaW50IGkgPSAwOyBpIDwgbnVtSW5kaWNlczsgaSArKykgeworICAgICAgICBfZW52LT5TZXRJbnRBcnJheVJlZ2lvbihfaWR4SWRzLCBpLCAxLCAoY29uc3QgamludCopJmFsbG9jc1tpXSk7CisgICAgICAgIF9lbnYtPlNldEludEFycmF5UmVnaW9uKF9wcmltaXRpdmVzLCBpLCAxLCAoY29uc3QgamludCopJnByaW1zW2ldKTsKKyAgICB9CisKKyAgICBmcmVlKGFsbG9jcyk7CisgICAgZnJlZShwcmltcyk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK3N0YXRpYyBjb25zdCBjaGFyICpjbGFzc1BhdGhOYW1lID0gImFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdCI7CisKK3N0YXRpYyBKTklOYXRpdmVNZXRob2QgbWV0aG9kc1tdID0geworeyJfbkluaXQiLCAgICAgICAgICAgICAgICAgICAgICAgICAiKClWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKV9uSW5pdCB9LAorCit7Im5EZXZpY2VDcmVhdGUiLCAgICAgICAgICAgICAgICAgICIoKUoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkRldmljZUNyZWF0ZSB9LAoreyJuRGV2aWNlRGVzdHJveSIsICAgICAgICAgICAgICAgICAiKEopViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5EZXZpY2VEZXN0cm95IH0sCit7Im5EZXZpY2VTZXRDb25maWciLCAgICAgICAgICAgICAgICIoSklJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkRldmljZVNldENvbmZpZyB9LAoreyJuQ29udGV4dEdldFVzZXJNZXNzYWdlIiwgICAgICAgICAiKEpbSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0R2V0VXNlck1lc3NhZ2UgfSwKK3sibkNvbnRleHRHZXRFcnJvck1lc3NhZ2UiLCAgICAgICAgIihKKUxqYXZhL2xhbmcvU3RyaW5nOyIsICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dEdldEVycm9yTWVzc2FnZSB9LAoreyJuQ29udGV4dFBlZWtNZXNzYWdlIiwgICAgICAgICAgICAiKEpbSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0UGVla01lc3NhZ2UgfSwKKworeyJuQ29udGV4dEluaXRUb0NsaWVudCIsICAgICAgICAgICAiKEopViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0SW5pdFRvQ2xpZW50IH0sCit7Im5Db250ZXh0RGVpbml0VG9DbGllbnQiLCAgICAgICAgICIoSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHREZWluaXRUb0NsaWVudCB9LAorCisKKy8vIEFsbCBtZXRob2RzIGJlbG93IGFyZSB0aHJlYWQgcHJvdGVjdGVkIGluIGphdmEuCit7InJzbkNvbnRleHRDcmVhdGUiLCAgICAgICAgICAgICAgICAgIihKSUlJKUoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRDcmVhdGUgfSwKK3sicnNuQ29udGV4dENyZWF0ZUdMIiwgICAgICAgICAgICAgICAiKEpJSUlJSUlJSUlJSUlGSSlKIiwgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dENyZWF0ZUdMIH0sCit7InJzbkNvbnRleHRGaW5pc2giLCAgICAgICAgICAgICAgICAgIihKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRGaW5pc2ggfSwKK3sicnNuQ29udGV4dFNldFByaW9yaXR5IiwgICAgICAgICAgICAiKEpJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dFNldFByaW9yaXR5IH0sCit7InJzbkNvbnRleHRTZXRTdXJmYWNlIiwgICAgICAgICAgICAgIihKSUlMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiLCAgICAgICAgICAodm9pZCopbkNvbnRleHRTZXRTdXJmYWNlIH0sCit7InJzbkNvbnRleHREZXN0cm95IiwgICAgICAgICAgICAgICAgIihKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHREZXN0cm95IH0sCit7InJzbkNvbnRleHREdW1wIiwgICAgICAgICAgICAgICAgICAgIihKSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHREdW1wIH0sCit7InJzbkNvbnRleHRQYXVzZSIsICAgICAgICAgICAgICAgICAgIihKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRQYXVzZSB9LAoreyJyc25Db250ZXh0UmVzdW1lIiwgICAgICAgICAgICAgICAgICIoSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0UmVzdW1lIH0sCit7InJzbkNvbnRleHRTZW5kTWVzc2FnZSIsICAgICAgICAgICAgIihKSVtJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRTZW5kTWVzc2FnZSB9LAoreyJyc25Bc3NpZ25OYW1lIiwgICAgICAgICAgICAgICAgICAgICIoSkpbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Bc3NpZ25OYW1lIH0sCit7InJzbkdldE5hbWUiLCAgICAgICAgICAgICAgICAgICAgICAgIihKSilMamF2YS9sYW5nL1N0cmluZzsiLCAgICAgICAgICAgICAgICAodm9pZCopbkdldE5hbWUgfSwKK3sicnNuT2JqRGVzdHJveSIsICAgICAgICAgICAgICAgICAgICAiKEpKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluT2JqRGVzdHJveSB9LAorCit7InJzbkZpbGVBM0RDcmVhdGVGcm9tRmlsZSIsICAgICAgICAgIihKTGphdmEvbGFuZy9TdHJpbmc7KUoiLCAgICAgICAgICAgICAgICAodm9pZCopbkZpbGVBM0RDcmVhdGVGcm9tRmlsZSB9LAoreyJyc25GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0U3RyZWFtIiwgICIoSkkpSiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0U3RyZWFtIH0sCit7InJzbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXQiLCAgICAgICAgIihKTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyO0xqYXZhL2xhbmcvU3RyaW5nOylKIiwgICAgICAgICAgICAodm9pZCopbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXQgfSwKK3sicnNuRmlsZUEzREdldE51bUluZGV4RW50cmllcyIsICAgICAiKEpKKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluRmlsZUEzREdldE51bUluZGV4RW50cmllcyB9LAoreyJyc25GaWxlQTNER2V0SW5kZXhFbnRyaWVzIiwgICAgICAgICIoSkpJW0lbTGphdmEvbGFuZy9TdHJpbmc7KVYiLCAgICAgICAgICAgKHZvaWQqKW5GaWxlQTNER2V0SW5kZXhFbnRyaWVzIH0sCit7InJzbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXgiLCAgICAgICAgIihKSkkpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXggfSwKKworeyJyc25Gb250Q3JlYXRlRnJvbUZpbGUiLCAgICAgICAgICAgICIoSkxqYXZhL2xhbmcvU3RyaW5nO0ZJKUkiLCAgICAgICAgICAgICAgKHZvaWQqKW5Gb250Q3JlYXRlRnJvbUZpbGUgfSwKK3sicnNuRm9udENyZWF0ZUZyb21Bc3NldFN0cmVhbSIsICAgICAiKEpMamF2YS9sYW5nL1N0cmluZztGSUkpSSIsICAgICAgICAgICAgICh2b2lkKiluRm9udENyZWF0ZUZyb21Bc3NldFN0cmVhbSB9LAoreyJyc25Gb250Q3JlYXRlRnJvbUFzc2V0IiwgICAgICAgICIoSkxhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlcjtMamF2YS9sYW5nL1N0cmluZztGSSlJIiwgICAgICAgICAgICAodm9pZCopbkZvbnRDcmVhdGVGcm9tQXNzZXQgfSwKKworeyJyc25FbGVtZW50Q3JlYXRlIiwgICAgICAgICAgICAgICAgICIoSkpJWkkpSiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5FbGVtZW50Q3JlYXRlIH0sCit7InJzbkVsZW1lbnRDcmVhdGUyIiwgICAgICAgICAgICAgICAgIihKW0lbTGphdmEvbGFuZy9TdHJpbmc7W0kpSiIsICAgICAgICAgICAodm9pZCopbkVsZW1lbnRDcmVhdGUyIH0sCit7InJzbkVsZW1lbnRHZXROYXRpdmVEYXRhIiwgICAgICAgICAgIihKSltJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkVsZW1lbnRHZXROYXRpdmVEYXRhIH0sCit7InJzbkVsZW1lbnRHZXRTdWJFbGVtZW50cyIsICAgICAgICAgIihKSltJW0xqYXZhL2xhbmcvU3RyaW5nO1tJKVYiLCAgICAgICAgICAodm9pZCopbkVsZW1lbnRHZXRTdWJFbGVtZW50cyB9LAorCit7InJzblR5cGVDcmVhdGUiLCAgICAgICAgICAgICAgICAgICAgIihKSklJSVpaSSlKIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblR5cGVDcmVhdGUgfSwKK3sicnNuVHlwZUdldE5hdGl2ZURhdGEiLCAgICAgICAgICAgICAiKEpKW0kpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluVHlwZUdldE5hdGl2ZURhdGEgfSwKKworeyJyc25BbGxvY2F0aW9uQ3JlYXRlVHlwZWQiLCAgICAgICAgICIoSkpJSUkpSiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkNyZWF0ZVR5cGVkIH0sCit7InJzbkFsbG9jYXRpb25DcmVhdGVGcm9tQml0bWFwIiwgICAgIihKSklMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7SSlKIiwgICAgICAodm9pZCopbkFsbG9jYXRpb25DcmVhdGVGcm9tQml0bWFwIH0sCit7InJzbkFsbG9jYXRpb25DcmVhdGVCaXRtYXBCYWNrZWRBbGxvY2F0aW9uIiwgICAgIihKSklMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7SSlKIiwgICAgICAodm9pZCopbkFsbG9jYXRpb25DcmVhdGVCaXRtYXBCYWNrZWRBbGxvY2F0aW9uIH0sCit7InJzbkFsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcCIsIihKSklMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7SSlKIiwgICAgICAodm9pZCopbkFsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcCB9LAorCit7InJzbkFsbG9jYXRpb25Db3B5RnJvbUJpdG1hcCIsICAgICAgIihKSkxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIsICAgICAgICAodm9pZCopbkFsbG9jYXRpb25Db3B5RnJvbUJpdG1hcCB9LAoreyJyc25BbGxvY2F0aW9uQ29weVRvQml0bWFwIiwgICAgICAgICIoSkpMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KVYiLCAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uQ29weVRvQml0bWFwIH0sCisKK3sicnNuQWxsb2NhdGlvblN5bmNBbGwiLCAgICAgICAgICAgICAiKEpKSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvblN5bmNBbGwgfSwKK3sicnNuQWxsb2NhdGlvbkdldFN1cmZhY2UiLCAgICAgICAgICAiKEpKKUxhbmRyb2lkL3ZpZXcvU3VyZmFjZTsiLCAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkdldFN1cmZhY2UgfSwKK3sicnNuQWxsb2NhdGlvblNldFN1cmZhY2UiLCAgICAgICAgICAiKEpKTGFuZHJvaWQvdmlldy9TdXJmYWNlOylWIiwgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvblNldFN1cmZhY2UgfSwKK3sicnNuQWxsb2NhdGlvbklvU2VuZCIsICAgICAgICAgICAgICAiKEpKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbklvU2VuZCB9LAoreyJyc25BbGxvY2F0aW9uSW9SZWNlaXZlIiwgICAgICAgICAgICIoSkopViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uSW9SZWNlaXZlIH0sCit7InJzbkFsbG9jYXRpb25EYXRhMUQiLCAgICAgICAgICAgICAgIihKSklJSUxqYXZhL2xhbmcvT2JqZWN0O0lJKVYiLCAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhMUQgfSwKK3sicnNuQWxsb2NhdGlvbkVsZW1lbnREYXRhMUQiLCAgICAgICAiKEpKSUlJW0JJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkVsZW1lbnREYXRhMUQgfSwKK3sicnNuQWxsb2NhdGlvbkRhdGEyRCIsICAgICAgICAgICAgICAiKEpKSUlJSUlJTGphdmEvbGFuZy9PYmplY3Q7SUkpViIsICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGEyRCB9LAoreyJyc25BbGxvY2F0aW9uRGF0YTJEIiwgICAgICAgICAgICAgICIoSkpJSUlJSUlKSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTJEX2FsbG9jIH0sCit7InJzbkFsbG9jYXRpb25EYXRhM0QiLCAgICAgICAgICAgICAgIihKSklJSUlJSUlMamF2YS9sYW5nL09iamVjdDtJSSlWIiwgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhM0QgfSwKK3sicnNuQWxsb2NhdGlvbkRhdGEzRCIsICAgICAgICAgICAgICAiKEpKSUlJSUlJSUpJSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGEzRF9hbGxvYyB9LAoreyJyc25BbGxvY2F0aW9uUmVhZCIsICAgICAgICAgICAgICAgICIoSkpMamF2YS9sYW5nL09iamVjdDtJKVYiLCAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uUmVhZCB9LAoreyJyc25BbGxvY2F0aW9uUmVhZDFEIiwgICAgICAgICAgICAgICIoSkpJSUlMamF2YS9sYW5nL09iamVjdDtJSSlWIiwgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uUmVhZDFEIH0sCit7InJzbkFsbG9jYXRpb25SZWFkMkQiLCAgICAgICAgICAgICAgIihKSklJSUlJSUxqYXZhL2xhbmcvT2JqZWN0O0lJKVYiLCAgICAgICAodm9pZCopbkFsbG9jYXRpb25SZWFkMkQgfSwKK3sicnNuQWxsb2NhdGlvbkdldFR5cGUiLCAgICAgICAgICAgICAiKEpKKUoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkdldFR5cGV9LAoreyJyc25BbGxvY2F0aW9uUmVzaXplMUQiLCAgICAgICAgICAgICIoSkpJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uUmVzaXplMUQgfSwKK3sicnNuQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyIsICAgICAiKEpKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyB9LAorCit7InJzblNjcmlwdEJpbmRBbGxvY2F0aW9uIiwgICAgICAgICAgIihKSkpJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEJpbmRBbGxvY2F0aW9uIH0sCit7InJzblNjcmlwdFNldFRpbWVab25lIiwgICAgICAgICAgICAgIihKSltCKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdFNldFRpbWVab25lIH0sCit7InJzblNjcmlwdEludm9rZSIsICAgICAgICAgICAgICAgICAgIihKSkkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEludm9rZSB9LAoreyJyc25TY3JpcHRJbnZva2VWIiwgICAgICAgICAgICAgICAgICIoSkpJW0IpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRJbnZva2VWIH0sCit7InJzblNjcmlwdEZvckVhY2giLCAgICAgICAgICAgICAgICAgIihKSklKSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEZvckVhY2ggfSwKK3sicnNuU2NyaXB0Rm9yRWFjaCIsICAgICAgICAgICAgICAgICAiKEpKSUpKW0IpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0Rm9yRWFjaFYgfSwKK3sicnNuU2NyaXB0Rm9yRWFjaENsaXBwZWQiLCAgICAgICAgICAiKEpKSUpKSUlJSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0Rm9yRWFjaENsaXBwZWQgfSwKK3sicnNuU2NyaXB0Rm9yRWFjaENsaXBwZWQiLCAgICAgICAgICAiKEpKSUpKW0JJSUlJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0Rm9yRWFjaENsaXBwZWRWIH0sCit7InJzblNjcmlwdFNldFZhckkiLCAgICAgICAgICAgICAgICAgIihKSklJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdFNldFZhckkgfSwKK3sicnNuU2NyaXB0R2V0VmFySSIsICAgICAgICAgICAgICAgICAiKEpKSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R2V0VmFySSB9LAoreyJyc25TY3JpcHRTZXRWYXJKIiwgICAgICAgICAgICAgICAgICIoSkpJSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRTZXRWYXJKIH0sCit7InJzblNjcmlwdEdldFZhckoiLCAgICAgICAgICAgICAgICAgIihKSkkpSiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEdldFZhckogfSwKK3sicnNuU2NyaXB0U2V0VmFyRiIsICAgICAgICAgICAgICAgICAiKEpKSUYpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VmFyRiB9LAoreyJyc25TY3JpcHRHZXRWYXJGIiwgICAgICAgICAgICAgICAgICIoSkpJKUYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHZXRWYXJGIH0sCit7InJzblNjcmlwdFNldFZhckQiLCAgICAgICAgICAgICAgICAgIihKSklEKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdFNldFZhckQgfSwKK3sicnNuU2NyaXB0R2V0VmFyRCIsICAgICAgICAgICAgICAgICAiKEpKSSlEIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R2V0VmFyRCB9LAoreyJyc25TY3JpcHRTZXRWYXJWIiwgICAgICAgICAgICAgICAgICIoSkpJW0IpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRTZXRWYXJWIH0sCit7InJzblNjcmlwdEdldFZhclYiLCAgICAgICAgICAgICAgICAgIihKSklbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEdldFZhclYgfSwKK3sicnNuU2NyaXB0U2V0VmFyVkUiLCAgICAgICAgICAgICAgICAiKEpKSVtCSltJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VmFyVkUgfSwKK3sicnNuU2NyaXB0U2V0VmFyT2JqIiwgICAgICAgICAgICAgICAiKEpKSUopViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VmFyT2JqIH0sCisKK3sicnNuU2NyaXB0Q0NyZWF0ZSIsICAgICAgICAgICAgICAgICAiKEpMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbQkkpSSIsICAodm9pZCopblNjcmlwdENDcmVhdGUgfSwKK3sicnNuU2NyaXB0SW50cmluc2ljQ3JlYXRlIiwgICAgICAgICAiKEpJSilKIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0SW50cmluc2ljQ3JlYXRlIH0sCit7InJzblNjcmlwdEtlcm5lbElEQ3JlYXRlIiwgICAgICAgICAgIihKSklJKUoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEtlcm5lbElEQ3JlYXRlIH0sCit7InJzblNjcmlwdEZpZWxkSURDcmVhdGUiLCAgICAgICAgICAgIihKSkkpSiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEZpZWxkSURDcmVhdGUgfSwKK3sicnNuU2NyaXB0R3JvdXBDcmVhdGUiLCAgICAgICAgICAgICAiKEpbSVtJW0lbSVtJKUoiLCAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R3JvdXBDcmVhdGUgfSwKK3sicnNuU2NyaXB0R3JvdXBTZXRJbnB1dCIsICAgICAgICAgICAiKEpKSkopViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R3JvdXBTZXRJbnB1dCB9LAoreyJyc25TY3JpcHRHcm91cFNldE91dHB1dCIsICAgICAgICAgICIoSkpKSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHcm91cFNldE91dHB1dCB9LAoreyJyc25TY3JpcHRHcm91cEV4ZWN1dGUiLCAgICAgICAgICAgICIoSkopViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHcm91cEV4ZWN1dGUgfSwKKworeyJyc25Qcm9ncmFtU3RvcmVDcmVhdGUiLCAgICAgICAgICAgICIoSlpaWlpaWklJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtU3RvcmVDcmVhdGUgfSwKKworeyJyc25Qcm9ncmFtQmluZENvbnN0YW50cyIsICAgICAgICAgICIoSkpJSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtQmluZENvbnN0YW50cyB9LAoreyJyc25Qcm9ncmFtQmluZFRleHR1cmUiLCAgICAgICAgICAgICIoSkpJSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtQmluZFRleHR1cmUgfSwKK3sicnNuUHJvZ3JhbUJpbmRTYW1wbGVyIiwgICAgICAgICAgICAiKEpKSUopViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluUHJvZ3JhbUJpbmRTYW1wbGVyIH0sCisKK3sicnNuUHJvZ3JhbUZyYWdtZW50Q3JlYXRlIiwgICAgICAgICAiKEpMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7W0kpSiIsICAgICAgICAgICAgICAodm9pZCopblByb2dyYW1GcmFnbWVudENyZWF0ZSB9LAoreyJyc25Qcm9ncmFtUmFzdGVyQ3JlYXRlIiwgICAgICAgICAgICIoSlpJKUoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtUmFzdGVyQ3JlYXRlIH0sCit7InJzblByb2dyYW1WZXJ0ZXhDcmVhdGUiLCAgICAgICAgICAgIihKTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO1tJKUoiLCAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtVmVydGV4Q3JlYXRlIH0sCisKK3sicnNuQ29udGV4dEJpbmRSb290U2NyaXB0IiwgICAgICAgICAiKEpJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dEJpbmRSb290U2NyaXB0IH0sCit7InJzbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlIiwgICAgICAgIihKSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlIH0sCit7InJzbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50IiwgICAgIihKSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50IH0sCit7InJzbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleCIsICAgICAgIihKSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleCB9LAoreyJyc25Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIiLCAgICAgICIoSkkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIgfSwKKworeyJyc25TYW1wbGVyQ3JlYXRlIiwgICAgICAgICAgICAgICAgICIoSklJSUlJRilJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TYW1wbGVyQ3JlYXRlIH0sCisKK3sicnNuUGF0aENyZWF0ZSIsICAgICAgICAgICAgICAgICAgICAiKEpJWkpJRilKIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluUGF0aENyZWF0ZSB9LAoreyJyc25NZXNoQ3JlYXRlIiwgICAgICAgICAgICAgICAgICAgICIoSltJW0lbSSlKIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5NZXNoQ3JlYXRlIH0sCisKK3sicnNuTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50IiwgICAgICAiKEpKKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50IH0sCit7InJzbk1lc2hHZXRJbmRleENvdW50IiwgICAgICAgICAgICAgIihKSilJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbk1lc2hHZXRJbmRleENvdW50IH0sCit7InJzbk1lc2hHZXRWZXJ0aWNlcyIsICAgICAgICAgICAgICAgIihKSltJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbk1lc2hHZXRWZXJ0aWNlcyB9LAoreyJyc25NZXNoR2V0SW5kaWNlcyIsICAgICAgICAgICAgICAgICIoSkpbSVtJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5NZXNoR2V0SW5kaWNlcyB9LAorCit9OworCitzdGF0aWMgaW50IHJlZ2lzdGVyRnVuY3MoSk5JRW52ICpfZW52KQoreworICAgIHJldHVybiBhbmRyb2lkOjpBbmRyb2lkUnVudGltZTo6cmVnaXN0ZXJOYXRpdmVNZXRob2RzKAorICAgICAgICAgICAgX2VudiwgY2xhc3NQYXRoTmFtZSwgbWV0aG9kcywgTkVMRU0obWV0aG9kcykpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworamludCBKTklfT25Mb2FkKEphdmFWTSogdm0sIHZvaWQqIHJlc2VydmVkKQoreworICAgIEpOSUVudiogZW52ID0gTlVMTDsKKyAgICBqaW50IHJlc3VsdCA9IC0xOworCisgICAgaWYgKHZtLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSAhPSBKTklfT0spIHsKKyAgICAgICAgQUxPR0UoIkVSUk9SOiBHZXRFbnYgZmFpbGVkXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBhc3NlcnQoZW52ICE9IE5VTEwpOworCisgICAgaWYgKHJlZ2lzdGVyRnVuY3MoZW52KSA8IDApIHsKKyAgICAgICAgQUxPR0UoIkVSUk9SOiBNZWRpYVBsYXllciBuYXRpdmUgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICAvKiBzdWNjZXNzIC0tIHJldHVybiB2YWxpZCB2ZXJzaW9uIG51bWJlciAqLworICAgIHJlc3VsdCA9IEpOSV9WRVJTSU9OXzFfNDsKKworYmFpbDoKKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvc2F4L2phdmEvYW5kcm9pZC9zYXgvRWxlbWVudC5qYXZhIGIvc2F4L2phdmEvYW5kcm9pZC9zYXgvRWxlbWVudC5qYXZhCmluZGV4IDhjODMzNGMuLmMzZTI3NWYgMTAwNjQ0Ci0tLSBhL3NheC9qYXZhL2FuZHJvaWQvc2F4L0VsZW1lbnQuamF2YQorKysgYi9zYXgvamF2YS9hbmRyb2lkL3NheC9FbGVtZW50LmphdmEKQEAgLTIxLDggKzIxLDYgQEAKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEFuIFhNTCBlbGVtZW50LiBQcm92aWRlcyBhY2Nlc3MgdG8gY2hpbGQgZWxlbWVudHMgYW5kIGhvb2tzIHRvIGxpc3RlbgogICogZm9yIGV2ZW50cyByZWxhdGVkIHRvIHRoaXMgZWxlbWVudC4KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2UuamF2YQppbmRleCBjY2FjMGQzLi40M2UxZjEyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC00NCw2ICs0NCw3IEBACiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5kaXNwbGF5LkRpc3BsYXlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuaW5wdXQuSW5wdXRNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5NYXRyaXg7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKQEAgLTUxLDYgKzUyLDcgQEAKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUNhbGxiYWNrTGlzdDsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKQEAgLTEyOTcsNiArMTI5OSw3IEBACiAgICAgICAgIHVwZGF0ZUZpbHRlcktleUV2ZW50c0xvY2tlZCh1c2VyU3RhdGUpOwogICAgICAgICB1cGRhdGVUb3VjaEV4cGxvcmF0aW9uTG9ja2VkKHVzZXJTdGF0ZSk7CiAgICAgICAgIHVwZGF0ZUVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eUxvY2tlZCh1c2VyU3RhdGUpOworICAgICAgICB1cGRhdGVEaXNwbGF5Q29sb3JBZGp1c3RtZW50U2V0dGluZ3NMb2NrZWQodXNlclN0YXRlKTsKICAgICAgICAgc2NoZWR1bGVVcGRhdGVJbnB1dEZpbHRlcih1c2VyU3RhdGUpOwogICAgICAgICBzY2hlZHVsZVVwZGF0ZUNsaWVudHNJZk5lZWRlZExvY2tlZCh1c2VyU3RhdGUpOwogICAgIH0KQEAgLTEzNTUsNiArMTM1OCw3IEBACiAgICAgICAgIHNvbXRoaW5nQ2hhbmdlZCB8PSByZWFkVG91Y2hFeHBsb3JhdGlvbkVuYWJsZWRTZXR0aW5nTG9ja2VkKHVzZXJTdGF0ZSk7CiAgICAgICAgIHNvbXRoaW5nQ2hhbmdlZCB8PSByZWFkRW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5RW5hYmxlZENoYW5nZWRMb2NrZWQodXNlclN0YXRlKTsKICAgICAgICAgc29tdGhpbmdDaGFuZ2VkIHw9IHJlYWREaXNwbGF5TWFnbmlmaWNhdGlvbkVuYWJsZWRTZXR0aW5nTG9ja2VkKHVzZXJTdGF0ZSk7CisgICAgICAgIHNvbXRoaW5nQ2hhbmdlZCB8PSByZWFkRGlzcGxheUNvbG9yQWRqdXN0bWVudFNldHRpbmdzTG9ja2VkKHVzZXJTdGF0ZSk7CiAgICAgICAgIHJldHVybiBzb210aGluZ0NoYW5nZWQ7CiAgICAgfQogCkBAIC0xNDAzLDYgKzE0MDcsMTggQEAKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBwcml2YXRlIGJvb2xlYW4gcmVhZERpc3BsYXlDb2xvckFkanVzdG1lbnRTZXR0aW5nc0xvY2tlZChVc2VyU3RhdGUgdXNlclN0YXRlKSB7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gZGlzcGxheUFkanVzdG1lbnRzRW5hYmxlZCA9IERpc3BsYXlBZGp1c3RtZW50VXRpbHMuaGFzQWRqdXN0bWVudHMobUNvbnRleHQsCisgICAgICAgICAgICAgICAgdXNlclN0YXRlLm1Vc2VySWQpOworICAgICAgICBpZiAoZGlzcGxheUFkanVzdG1lbnRzRW5hYmxlZCAhPSB1c2VyU3RhdGUubUhhc0Rpc3BsYXlDb2xvckFkanVzdG1lbnQpIHsKKyAgICAgICAgICAgIHVzZXJTdGF0ZS5tSGFzRGlzcGxheUNvbG9yQWRqdXN0bWVudCA9IGRpc3BsYXlBZGp1c3RtZW50c0VuYWJsZWQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiBkaXNwbGF5IGFkanVzdG1lbnQgaXMgZW5hYmxlZCwgYWx3YXlzIGFzc3VtZSB0aGVyZSB3YXMgYSBjaGFuZ2UgaW4KKyAgICAgICAgLy8gdGhlIGFkanVzdG1lbnQgc2V0dGluZ3MuCisgICAgICAgIHJldHVybiBkaXNwbGF5QWRqdXN0bWVudHNFbmFibGVkOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUb3VjaEV4cGxvcmF0aW9uTG9ja2VkKFVzZXJTdGF0ZSB1c2VyU3RhdGUpIHsKICAgICAgICAgYm9vbGVhbiBlbmFibGVkID0gZmFsc2U7CiAgICAgICAgIGZpbmFsIGludCBzZXJ2aWNlQ291bnQgPSB1c2VyU3RhdGUubUJvdW5kU2VydmljZXMuc2l6ZSgpOwpAQCAtMTQ5MCw2ICsxNTA2LDEwIEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlRGlzcGxheUNvbG9yQWRqdXN0bWVudFNldHRpbmdzTG9ja2VkKFVzZXJTdGF0ZSB1c2VyU3RhdGUpIHsKKyAgICAgICAgRGlzcGxheUFkanVzdG1lbnRVdGlscy5hcHBseUFkanVzdG1lbnRzKG1Db250ZXh0LCB1c2VyU3RhdGUubVVzZXJJZCk7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgZHVtcChGaWxlRGVzY3JpcHRvciBmZCwgZmluYWwgUHJpbnRXcml0ZXIgcHcsIFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgbVNlY3VyaXR5UG9saWN5LmVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNYW5pZmVzdC5wZXJtaXNzaW9uLkRVTVAsIEZVTkNUSU9OX0RVTVApOwpAQCAtMjk1Miw2ICsyOTcyLDcgQEAKICAgICAgICAgcHVibGljIGJvb2xlYW4gbUlzRW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5RW5hYmxlZDsKICAgICAgICAgcHVibGljIGJvb2xlYW4gbUlzRGlzcGxheU1hZ25pZmljYXRpb25FbmFibGVkOwogICAgICAgICBwdWJsaWMgYm9vbGVhbiBtSXNGaWx0ZXJLZXlFdmVudHNFbmFibGVkOworICAgICAgICBwdWJsaWMgYm9vbGVhbiBtSGFzRGlzcGxheUNvbG9yQWRqdXN0bWVudDsKIAogICAgICAgICBwcml2YXRlIFNlcnZpY2UgbVVpQXV0b21hdGlvblNlcnZpY2U7CiAgICAgICAgIHByaXZhdGUgSUFjY2Vzc2liaWxpdHlTZXJ2aWNlQ2xpZW50IG1VaUF1dG9tYXRpb25TZXJ2aWNlQ2xpZW50OwpAQCAtMzA0Myw2ICszMDY0LDIzIEBACiAgICAgICAgIHByaXZhdGUgZmluYWwgVXJpIG1FbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHlVcmkgPSBTZXR0aW5ncy5TZWN1cmUKICAgICAgICAgICAgICAgICAuZ2V0VXJpRm9yKFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX1NDUklQVF9JTkpFQ1RJT04pOwogCisgICAgICAgIHByaXZhdGUgZmluYWwgVXJpIG1EaXNwbGF5Q29udHJhc3RFbmFibGVkVXJpID0gU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTlRSQVNUX0VOQUJMRUQpOworICAgICAgICBwcml2YXRlIGZpbmFsIFVyaSBtRGlzcGxheUNvbnRyYXN0VXJpID0gU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTlRSQVNUKTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbURpc3BsYXlCcmlnaHRuZXNzVXJpID0gU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0JSSUdIVE5FU1MpOworCisgICAgICAgIHByaXZhdGUgZmluYWwgVXJpIG1EaXNwbGF5SW52ZXJzaW9uRW5hYmxlZFVyaSA9IFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoCisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9JTlZFUlNJT05fRU5BQkxFRCk7CisgICAgICAgIHByaXZhdGUgZmluYWwgVXJpIG1EaXNwbGF5SW52ZXJzaW9uVXJpID0gU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTik7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbURpc3BsYXlEYWx0b25pemVyRW5hYmxlZFVyaSA9IFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoCisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9EQUxUT05JWkVSX0VOQUJMRUQpOworICAgICAgICBwcml2YXRlIGZpbmFsIFVyaSBtRGlzcGxheURhbHRvbml6ZXJVcmkgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUik7CisKICAgICAgICAgcHVibGljIEFjY2Vzc2liaWxpdHlDb250ZW50T2JzZXJ2ZXIoSGFuZGxlciBoYW5kbGVyKSB7CiAgICAgICAgICAgICBzdXBlcihoYW5kbGVyKTsKICAgICAgICAgfQpAQCAtMzA2MSw2ICszMDk5LDIwIEBACiAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0aGlzLCBVc2VySGFuZGxlLlVTRVJfQUxMKTsKICAgICAgICAgICAgIGNvbnRlbnRSZXNvbHZlci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihtRW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5VXJpLAogICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdGhpcywgVXNlckhhbmRsZS5VU0VSX0FMTCk7CisgICAgICAgICAgICBjb250ZW50UmVzb2x2ZXIucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoCisgICAgICAgICAgICAgICAgICAgIG1EaXNwbGF5Q29udHJhc3RFbmFibGVkVXJpLCBmYWxzZSwgdGhpcywgVXNlckhhbmRsZS5VU0VSX0FMTCk7CisgICAgICAgICAgICBjb250ZW50UmVzb2x2ZXIucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoCisgICAgICAgICAgICAgICAgICAgIG1EaXNwbGF5Q29udHJhc3RVcmksIGZhbHNlLCB0aGlzLCBVc2VySGFuZGxlLlVTRVJfQUxMKTsKKyAgICAgICAgICAgIGNvbnRlbnRSZXNvbHZlci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcigKKyAgICAgICAgICAgICAgICAgICAgbURpc3BsYXlCcmlnaHRuZXNzVXJpLCBmYWxzZSwgdGhpcywgVXNlckhhbmRsZS5VU0VSX0FMTCk7CisgICAgICAgICAgICBjb250ZW50UmVzb2x2ZXIucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoCisgICAgICAgICAgICAgICAgICAgIG1EaXNwbGF5SW52ZXJzaW9uRW5hYmxlZFVyaSwgZmFsc2UsIHRoaXMsIFVzZXJIYW5kbGUuVVNFUl9BTEwpOworICAgICAgICAgICAgY29udGVudFJlc29sdmVyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKAorICAgICAgICAgICAgICAgICAgICBtRGlzcGxheUludmVyc2lvblVyaSwgZmFsc2UsIHRoaXMsIFVzZXJIYW5kbGUuVVNFUl9BTEwpOworICAgICAgICAgICAgY29udGVudFJlc29sdmVyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKAorICAgICAgICAgICAgICAgICAgICBtRGlzcGxheURhbHRvbml6ZXJFbmFibGVkVXJpLCBmYWxzZSwgdGhpcywgVXNlckhhbmRsZS5VU0VSX0FMTCk7CisgICAgICAgICAgICBjb250ZW50UmVzb2x2ZXIucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoCisgICAgICAgICAgICAgICAgICAgIG1EaXNwbGF5RGFsdG9uaXplclVyaSwgZmFsc2UsIHRoaXMsIFVzZXJIYW5kbGUuVVNFUl9BTEwpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0zMTI1LDYgKzMxNzcsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobURpc3BsYXlDb250cmFzdEVuYWJsZWRVcmkuZXF1YWxzKHVyaSkKKyAgICAgICAgICAgICAgICAgICAgfHwgbURpc3BsYXlJbnZlcnNpb25FbmFibGVkVXJpLmVxdWFscyh1cmkpCisgICAgICAgICAgICAgICAgICAgIHx8IG1EaXNwbGF5RGFsdG9uaXplckVuYWJsZWRVcmkuZXF1YWxzKHVyaSkKKyAgICAgICAgICAgICAgICAgICAgfHwgbURpc3BsYXlDb250cmFzdFVyaS5lcXVhbHModXJpKQorICAgICAgICAgICAgICAgICAgICB8fCBtRGlzcGxheUJyaWdodG5lc3NVcmkuZXF1YWxzKHVyaSkKKyAgICAgICAgICAgICAgICAgICAgfHwgbURpc3BsYXlJbnZlcnNpb25VcmkuZXF1YWxzKHVyaSkKKyAgICAgICAgICAgICAgICAgICAgfHwgbURpc3BsYXlEYWx0b25pemVyVXJpLmVxdWFscyh1cmkpKSB7CisgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIHVwZGF0ZSB3aGVuIHRoZSBhdXRvbWF0aW9uIHNlcnZpY2UgZGllcy4KKyAgICAgICAgICAgICAgICAgICAgVXNlclN0YXRlIHVzZXJTdGF0ZSA9IGdldEN1cnJlbnRVc2VyU3RhdGVMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJTdGF0ZS5tVWlBdXRvbWF0aW9uU2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZERpc3BsYXlDb2xvckFkanVzdG1lbnRTZXR0aW5nc0xvY2tlZCh1c2VyU3RhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRGlzcGxheUNvbG9yQWRqdXN0bWVudFNldHRpbmdzTG9ja2VkKHVzZXJTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FjY2Vzc2liaWxpdHkvRGlzcGxheUFkanVzdG1lbnRVdGlscy5qYXZhIGIvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2Nlc3NpYmlsaXR5L0Rpc3BsYXlBZGp1c3RtZW50VXRpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmJkZWRhCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2Nlc3NpYmlsaXR5L0Rpc3BsYXlBZGp1c3RtZW50VXRpbHMuamF2YQpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLmFjY2Vzc2liaWxpdHk7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQub3BlbmdsLk1hdHJpeDsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyOworCisvKioKKyAqIFV0aWxpdHkgbWV0aG9kcyBmb3IgcGVyZm9ybWluZyBhY2Nlc3NpYmlsaXR5IGRpc3BsYXkgYWRqdXN0bWVudHMuCisgKi8KK2NsYXNzIERpc3BsYXlBZGp1c3RtZW50VXRpbHMgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0dfVEFHID0gRGlzcGxheUFkanVzdG1lbnRVdGlscy5jbGFzcy5nZXRTaW1wbGVOYW1lKCk7CisKKyAgICAvKiogTWF0cml4IGFuZCBvZmZzZXQgdXNlZCBmb3IgY29udmVydGluZyBjb2xvciB0byBncmF5LXNjYWxlLiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0W10gR1JBWVNDQUxFX01BVFJJWCA9IG5ldyBmbG9hdFtdIHsKKyAgICAgICAgLjIxMjZmLCAuMjEyNmYsIC4yMTI2ZiwgMCwKKyAgICAgICAgLjcxNTJmLCAuNzE1MmYsIC43MTUyZiwgMCwKKyAgICAgICAgLjA3MjJmLCAuMDcyMmYsIC4wNzIyZiwgMCwKKyAgICAgICAgICAgICAwLCAgICAgIDAsICAgICAgMCwgMQorICAgIH07CisKKyAgICAvKiogTWF0cml4IGFuZCBvZmZzZXQgdXNlZCBmb3Igc3RhbmRhcmQgZGlzcGxheSBpbnZlcnNpb24uICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXRbXSBJTlZFUlNJT05fTUFUUklYX1NUQU5EQVJEID0gbmV3IGZsb2F0W10geworICAgICAgICAtMSwgIDAsICAwLCAwLAorICAgICAgICAgMCwgLTEsICAwLCAwLAorICAgICAgICAgMCwgIDAsIC0xLCAwLAorICAgICAgICAgMSwgIDEsICAxLCAxCisgICAgfTsKKworICAgIC8qKiBNYXRyaXggYW5kIG9mZnNldCB1c2VkIGZvciBodWUtb25seSBkaXNwbGF5IGludmVyc2lvbi4gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdFtdIElOVkVSU0lPTl9NQVRSSVhfSFVFX09OTFkgPSBuZXcgZmxvYXRbXSB7CisgICAgICAgICAgMCwgLjVmLCAuNWYsIDAsCisgICAgICAgIC41ZiwgICAwLCAuNWYsIDAsCisgICAgICAgIC41ZiwgLjVmLCAgIDAsIDAsCisgICAgICAgICAgMCwgICAwLCAgIDAsIDEKKyAgICB9OworCisgICAgLyoqIE1hdHJpeCBhbmQgb2Zmc2V0IHVzZWQgZm9yIHZhbHVlLW9ubHkgZGlzcGxheSBpbnZlcnNpb24uICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXRbXSBJTlZFUlNJT05fTUFUUklYX1ZBTFVFX09OTFkgPSBuZXcgZmxvYXRbXSB7CisgICAgICAgICAgIDAsIC0uNWYsIC0uNWYsIDAsCisgICAgICAgIC0uNWYsICAgIDAsIC0uNWYsIDAsCisgICAgICAgIC0uNWYsIC0uNWYsICAgIDAsIDAsCisgICAgICAgICAgIDEsICAgIDEsICAgIDEsIDEKKyAgICB9OworCisgICAgLyoqIERlZmF1bHQgY29udHJhc3QgZm9yIGRpc3BsYXkgY29udHJhc3QgZW5oYW5jZW1lbnQuICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgREVGQVVMVF9ESVNQTEFZX0NPTlRSQVNUID0gMjsKKworICAgIC8qKiBEZWZhdWx0IGJyaWdodG5lc3MgZm9yIGRpc3BsYXkgY29udHJhc3QgZW5oYW5jZW1lbnQuICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgREVGQVVMVF9ESVNQTEFZX0JSSUdIVE5FU1MgPSAwOworCisgICAgLyoqIERlZmF1bHQgaW52ZXJzaW9uIG1vZGUgZm9yIGRpc3BsYXkgY29sb3IgaW52ZXJzaW9uLiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX0RJU1BMQVlfSU5WRVJTSU9OID0gQWNjZXNzaWJpbGl0eU1hbmFnZXIuSU5WRVJTSU9OX1NUQU5EQVJEOworCisgICAgLyoqIERlZmF1bHQgaW52ZXJzaW9uIG1vZGUgZm9yIGRpc3BsYXkgY29sb3IgY29ycmVjdGlvbi4gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9ESVNQTEFZX0RBTFRPTklaRVIgPQorICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU1hbmFnZXIuREFMVE9OSVpFUl9DT1JSRUNUX0RFVVRFUkFOT01BTFk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB1c2VyIHdpdGggaGFzIGFueSBkaXNwbGF5IGNvbG9yCisgICAgICogYWRqdXN0bWVudHMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc0FkanVzdG1lbnRzKENvbnRleHQgY29udGV4dCwgaW50IHVzZXJJZCkgeworICAgICAgICBmaW5hbCBDb250ZW50UmVzb2x2ZXIgY3IgPSBjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOworCisgICAgICAgIGJvb2xlYW4gaGFzQ29sb3JUcmFuc2Zvcm0gPSBTZXR0aW5ncy5TZWN1cmUuZ2V0SW50Rm9yVXNlcigKKyAgICAgICAgICAgICAgICBjciwgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9JTlZFUlNJT05fRU5BQkxFRCwgMCwgdXNlcklkKSA9PSAxOworCisgICAgICAgIGlmICghaGFzQ29sb3JUcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgIGhhc0NvbG9yVHJhbnNmb3JtIHw9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTlRSQVNUX0VOQUJMRUQsIDAsIHVzZXJJZCkgPT0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaGFzQ29sb3JUcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgIGhhc0NvbG9yVHJhbnNmb3JtIHw9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0RBTFRPTklaRVJfRU5BQkxFRCwgMCwgdXNlcklkKSA9PSAxOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGhhc0NvbG9yVHJhbnNmb3JtOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGxpZXMgdGhlIHNwZWNpZmllZCB1c2VyJ3MgZGlzcGxheSBjb2xvciBhZGp1c3RtZW50cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXBwbHlBZGp1c3RtZW50cyhDb250ZXh0IGNvbnRleHQsIGludCB1c2VySWQpIHsKKyAgICAgICAgZmluYWwgQ29udGVudFJlc29sdmVyIGNyID0gY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKyAgICAgICAgZmxvYXRbXSBjb2xvck1hdHJpeCA9IG5ldyBmbG9hdFsxNl07CisgICAgICAgIGZsb2F0W10gb3V0cHV0TWF0cml4ID0gbmV3IGZsb2F0WzE2XTsKKyAgICAgICAgYm9vbGVhbiBoYXNDb2xvclRyYW5zZm9ybSA9IGZhbHNlOworCisgICAgICAgIE1hdHJpeC5zZXRJZGVudGl0eU0oY29sb3JNYXRyaXgsIDApOworCisgICAgICAgIGZpbmFsIGJvb2xlYW4gaW52ZXJzaW9uRW5hYmxlZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9FTkFCTEVELCAwLCB1c2VySWQpID09IDE7CisgICAgICAgIGlmIChpbnZlcnNpb25FbmFibGVkKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgaW52ZXJzaW9uTW9kZSA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKGNyLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTiwgREVGQVVMVF9ESVNQTEFZX0lOVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgdXNlcklkKTsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0W10gaW52ZXJzaW9uTWF0cml4OworICAgICAgICAgICAgc3dpdGNoIChpbnZlcnNpb25Nb2RlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5TWFuYWdlci5JTlZFUlNJT05fSFVFX09OTFk6CisgICAgICAgICAgICAgICAgICAgIGludmVyc2lvbk1hdHJpeCA9IElOVkVSU0lPTl9NQVRSSVhfSFVFX09OTFk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eU1hbmFnZXIuSU5WRVJTSU9OX1ZBTFVFX09OTFk6CisgICAgICAgICAgICAgICAgICAgIGludmVyc2lvbk1hdHJpeCA9IElOVkVSU0lPTl9NQVRSSVhfVkFMVUVfT05MWTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgaW52ZXJzaW9uTWF0cml4ID0gSU5WRVJTSU9OX01BVFJJWF9TVEFOREFSRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWF0cml4Lm11bHRpcGx5TU0ob3V0cHV0TWF0cml4LCAwLCBjb2xvck1hdHJpeCwgMCwgaW52ZXJzaW9uTWF0cml4LCAwKTsKKworICAgICAgICAgICAgY29sb3JNYXRyaXggPSBvdXRwdXRNYXRyaXg7CisgICAgICAgICAgICBvdXRwdXRNYXRyaXggPSBjb2xvck1hdHJpeDsKKworICAgICAgICAgICAgaGFzQ29sb3JUcmFuc2Zvcm0gPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBjb250cmFzdEVuYWJsZWQgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0SW50Rm9yVXNlcigKKyAgICAgICAgICAgICAgICBjciwgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT05UUkFTVF9FTkFCTEVELCAwLCB1c2VySWQpID09IDE7CisgICAgICAgIGlmIChjb250cmFzdEVuYWJsZWQpIHsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IGNvbnRyYXN0ID0gU2V0dGluZ3MuU2VjdXJlLmdldEZsb2F0Rm9yVXNlcihjciwKKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT05UUkFTVCwgREVGQVVMVF9ESVNQTEFZX0NPTlRSQVNULAorICAgICAgICAgICAgICAgICAgICB1c2VySWQpOworICAgICAgICAgICAgZmluYWwgZmxvYXQgYnJpZ2h0bmVzcyA9IFNldHRpbmdzLlNlY3VyZS5nZXRGbG9hdEZvclVzZXIoY3IsCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQlJJR0hUTkVTUywgREVGQVVMVF9ESVNQTEFZX0JSSUdIVE5FU1MsCisgICAgICAgICAgICAgICAgICAgIHVzZXJJZCk7CisgICAgICAgICAgICBmaW5hbCBmbG9hdCBvZmYgPSBicmlnaHRuZXNzICogY29udHJhc3QgLSAwLjVmICogY29udHJhc3QgKyAwLjVmOworICAgICAgICAgICAgZmluYWwgZmxvYXRbXSBjb250cmFzdE1hdHJpeCA9IHsKKyAgICAgICAgICAgICAgICAgICAgY29udHJhc3QsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgIDAsIGNvbnRyYXN0LCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAwLCAwLCBjb250cmFzdCwgMCwKKyAgICAgICAgICAgICAgICAgICAgb2ZmLCBvZmYsIG9mZiwgMQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgTWF0cml4Lm11bHRpcGx5TU0ob3V0cHV0TWF0cml4LCAwLCBjb2xvck1hdHJpeCwgMCwgY29udHJhc3RNYXRyaXgsIDApOworCisgICAgICAgICAgICBjb2xvck1hdHJpeCA9IG91dHB1dE1hdHJpeDsKKyAgICAgICAgICAgIG91dHB1dE1hdHJpeCA9IGNvbG9yTWF0cml4OworCisgICAgICAgICAgICBoYXNDb2xvclRyYW5zZm9ybSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBib29sZWFuIGRhbHRvbml6ZXJFbmFibGVkID0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgY3IsIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUl9FTkFCTEVELCAwLCB1c2VySWQpICE9IDA7CisgICAgICAgIGlmIChkYWx0b25pemVyRW5hYmxlZCkgeworICAgICAgICAgICAgZmluYWwgaW50IGRhbHRvbml6ZXJNb2RlID0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoY3IsCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUiwgREVGQVVMVF9ESVNQTEFZX0RBTFRPTklaRVIsCisgICAgICAgICAgICAgICAgICAgIHVzZXJJZCk7CisgICAgICAgICAgICAvLyBNb25vY2hyb21hY3kgaXNuJ3Qgc3VwcG9ydGVkIGJ5IHRoZSBuYXRpdmUgRGFsdG9uaXplci4KKyAgICAgICAgICAgIGlmIChkYWx0b25pemVyTW9kZSA9PSBBY2Nlc3NpYmlsaXR5TWFuYWdlci5EQUxUT05JWkVSX1NJTVVMQVRFX01PTk9DSFJPTUFDWSkgeworICAgICAgICAgICAgICAgIE1hdHJpeC5tdWx0aXBseU1NKG91dHB1dE1hdHJpeCwgMCwgY29sb3JNYXRyaXgsIDAsIEdSQVlTQ0FMRV9NQVRSSVgsIDApOworCisgICAgICAgICAgICAgICAgZmluYWwgZmxvYXRbXSB0ZW1wID0gY29sb3JNYXRyaXg7CisgICAgICAgICAgICAgICAgY29sb3JNYXRyaXggPSBvdXRwdXRNYXRyaXg7CisgICAgICAgICAgICAgICAgb3V0cHV0TWF0cml4ID0gdGVtcDsKKworICAgICAgICAgICAgICAgIGhhc0NvbG9yVHJhbnNmb3JtID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBuYXRpdmVTZXREYWx0b25pemVyTW9kZShBY2Nlc3NpYmlsaXR5TWFuYWdlci5EQUxUT05JWkVSX0RJU0FCTEVEKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmF0aXZlU2V0RGFsdG9uaXplck1vZGUoZGFsdG9uaXplck1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmF0aXZlU2V0RGFsdG9uaXplck1vZGUoQWNjZXNzaWJpbGl0eU1hbmFnZXIuREFMVE9OSVpFUl9ESVNBQkxFRCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGFzQ29sb3JUcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgIG5hdGl2ZVNldENvbG9yVHJhbnNmb3JtKGNvbG9yTWF0cml4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5hdGl2ZVNldENvbG9yVHJhbnNmb3JtKG51bGwpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgc3VyZmFjZSBmbGluZ2VyJ3MgRGFsdG9uaXphdGlvbiBtb2RlLiBUaGlzIGFkanVzdHMgdGhlIGNvbG9yCisgICAgICogc3BhY2UgdG8gY29ycmVjdCBmb3Igb3Igc2ltdWxhdGUgdmFyaW91cyB0eXBlcyBvZiBjb2xvciBibGluZG5lc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9kZSBuZXcgRGFsdG9uaXphdGlvbiBtb2RlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBuYXRpdmVTZXREYWx0b25pemVyTW9kZShpbnQgbW9kZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgSUJpbmRlciBmbGluZ2VyID0gU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZSgiU3VyZmFjZUZsaW5nZXIiKTsKKyAgICAgICAgICAgIGlmIChmbGluZ2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oImFuZHJvaWQudWkuSVN1cmZhY2VDb21wb3NlciIpOworICAgICAgICAgICAgICAgIGRhdGEud3JpdGVJbnQobW9kZSk7CisgICAgICAgICAgICAgICAgZmxpbmdlci50cmFuc2FjdCgxMDE0LCBkYXRhLCBudWxsLCAwKTsKKyAgICAgICAgICAgICAgICBkYXRhLnJlY3ljbGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBTbG9nLmUoTE9HX1RBRywgIkZhaWxlZCB0byBzZXQgRGFsdG9uaXplciBtb2RlIiwgZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgc3VyZmFjZSBmbGluZ2VyJ3MgY29sb3IgdHJhbnNmb3JtYXRpb24gYXMgYSA0eDQgbWF0cml4LiBJZiB0aGUKKyAgICAgKiBtYXRyaXggaXMgbnVsbCwgY29sb3IgdHJhbnNmb3JtYXRpb25zIGFyZSBkaXNhYmxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtIHRoZSBmbG9hdCBhcnJheSB0aGF0IGhvbGRzIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIG9yIG51bGwgdG8KKyAgICAgKiAgICAgICAgICAgIGRpc2FibGUgdHJhbnNmb3JtYXRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG5hdGl2ZVNldENvbG9yVHJhbnNmb3JtKGZsb2F0W10gbSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgSUJpbmRlciBmbGluZ2VyID0gU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZSgiU3VyZmFjZUZsaW5nZXIiKTsKKyAgICAgICAgICAgIGlmIChmbGluZ2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oImFuZHJvaWQudWkuSVN1cmZhY2VDb21wb3NlciIpOworICAgICAgICAgICAgICAgIGlmIChtICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS53cml0ZUludCgxKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLndyaXRlRmxvYXQobVtpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkYXRhLndyaXRlSW50KDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmbGluZ2VyLnRyYW5zYWN0KDEwMTUsIGRhdGEsIG51bGwsIDApOworICAgICAgICAgICAgICAgIGRhdGEucmVjeWNsZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRmFpbGVkIHRvIHNldCBjb2xvciB0cmFuc2Zvcm0iLCBleCk7CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2FwcHdpZGdldC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hcHB3aWRnZXQvQXBwV2lkZ2V0U2VydmljZUltcGwuamF2YSBiL3NlcnZpY2VzL2FwcHdpZGdldC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hcHB3aWRnZXQvQXBwV2lkZ2V0U2VydmljZUltcGwuamF2YQppbmRleCA5OGRlYWQzLi5iNjM5MWI2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hcHB3aWRnZXQvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYXBwd2lkZ2V0L0FwcFdpZGdldFNlcnZpY2VJbXBsLmphdmEKKysrIGIvc2VydmljZXMvYXBwd2lkZ2V0L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FwcHdpZGdldC9BcHBXaWRnZXRTZXJ2aWNlSW1wbC5qYXZhCkBAIC00MiwxNiArNDIsMTMgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXRvbWljRmlsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9iYWNrdXAvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYmFja3VwL0JhY2t1cE1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9iYWNrdXAvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYmFja3VwL0JhY2t1cE1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggYzZkYzVlNi4uOTI3N2NjZTIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2JhY2t1cC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9iYWNrdXAvQmFja3VwTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9iYWNrdXAvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYmFja3VwL0JhY2t1cE1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTgyLDcgKzgyLDYgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5iYWNrdXAuQmFja3VwQ29uc3RhbnRzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmJhY2t1cC5JQmFja3VwVHJhbnNwb3J0OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmJhY2t1cC5JT2JiQmFja3VwU2VydmljZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5iYWNrdXAuTG9jYWxUcmFuc3BvcnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLkV2ZW50TG9nVGFnczsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuU3lzdGVtU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuYmFja3VwLlBhY2thZ2VNYW5hZ2VyQmFja3VwQWdlbnQuTWV0YWRhdGE7CkBAIC0yMjE3LDYgKzIyMTYsNyBAQAogICAgICAgICAgICAgbVNhdmVkU3RhdGVOYW1lID0gbmV3IEZpbGUobVN0YXRlRGlyLCBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICBtQmFja3VwRGF0YU5hbWUgPSBuZXcgRmlsZShtRGF0YURpciwgcGFja2FnZU5hbWUgKyAiLmRhdGEiKTsKICAgICAgICAgICAgIG1OZXdTdGF0ZU5hbWUgPSBuZXcgRmlsZShtU3RhdGVEaXIsIHBhY2thZ2VOYW1lICsgIi5uZXciKTsKKyAgICAgICAgICAgIGlmIChNT1JFX0RFQlVHKSBTbG9nLmQoVEFHLCAiZGF0YSBmaWxlOiAiICsgbUJhY2t1cERhdGFOYW1lKTsKIAogICAgICAgICAgICAgbVNhdmVkU3RhdGUgPSBudWxsOwogICAgICAgICAgICAgbUJhY2t1cERhdGEgPSBudWxsOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9CYXR0ZXJ5U2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9CYXR0ZXJ5U2VydmljZS5qYXZhCmluZGV4IGNjOTA1NWQuLjZlNzJlMjQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQmF0dGVyeVNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0JhdHRlcnlTZXJ2aWNlLmphdmEKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAiREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL3N3aXRjaC9pbnZhbGlkX2NoYXJnZXIiKTsKICAgICAgICAgfQogCi0gICAgICAgIElCaW5kZXIgYiA9IFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoImJhdHRlcnlwcm9wcmVnIik7CisgICAgICAgIElCaW5kZXIgYiA9IFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoImJhdHRlcnlwcm9wZXJ0aWVzIik7CiAgICAgICAgIGZpbmFsIElCYXR0ZXJ5UHJvcGVydGllc1JlZ2lzdHJhciBiYXR0ZXJ5UHJvcGVydGllc1JlZ2lzdHJhciA9CiAgICAgICAgICAgICAgICAgSUJhdHRlcnlQcm9wZXJ0aWVzUmVnaXN0cmFyLlN0dWIuYXNJbnRlcmZhY2UoYik7CiAgICAgICAgIHRyeSB7CkBAIC0zMTEsOCArMzExLDYgQEAKICAgICAgICAgICAgICAgICAgICAgKyAiLCBiYXR0ZXJ5TGV2ZWw9IiArIG1CYXR0ZXJ5UHJvcHMuYmF0dGVyeUxldmVsCiAgICAgICAgICAgICAgICAgICAgICsgIiwgYmF0dGVyeVRlY2hub2xvZ3k9IiArIG1CYXR0ZXJ5UHJvcHMuYmF0dGVyeVRlY2hub2xvZ3kKICAgICAgICAgICAgICAgICAgICAgKyAiLCBiYXR0ZXJ5Vm9sdGFnZT0iICsgbUJhdHRlcnlQcm9wcy5iYXR0ZXJ5Vm9sdGFnZQotICAgICAgICAgICAgICAgICAgICArICIsIGJhdHRlcnlDdXJyZW50Tm93PSIgKyBtQmF0dGVyeVByb3BzLmJhdHRlcnlDdXJyZW50Tm93Ci0gICAgICAgICAgICAgICAgICAgICsgIiwgYmF0dGVyeUNoYXJnZUNvdW50ZXI9IiArIG1CYXR0ZXJ5UHJvcHMuYmF0dGVyeUNoYXJnZUNvdW50ZXIKICAgICAgICAgICAgICAgICAgICAgKyAiLCBiYXR0ZXJ5VGVtcGVyYXR1cmU9IiArIG1CYXR0ZXJ5UHJvcHMuYmF0dGVyeVRlbXBlcmF0dXJlCiAgICAgICAgICAgICAgICAgICAgICsgIiwgbUJhdHRlcnlMZXZlbENyaXRpY2FsPSIgKyBtQmF0dGVyeUxldmVsQ3JpdGljYWwKICAgICAgICAgICAgICAgICAgICAgKyAiLCBtUGx1Z1R5cGU9IiArIG1QbHVnVHlwZSk7CkBAIC02MTMsMTUgKzYxMSw2IEBACiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiICBsZXZlbDogIiArIG1CYXR0ZXJ5UHJvcHMuYmF0dGVyeUxldmVsKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIgIHNjYWxlOiAiICsgQkFUVEVSWV9TQ0FMRSk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiICB2b2x0YWdlOiAiICsgbUJhdHRlcnlQcm9wcy5iYXR0ZXJ5Vm9sdGFnZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobUJhdHRlcnlQcm9wcy5iYXR0ZXJ5Q3VycmVudE5vdyAhPSBJbnRlZ2VyLk1JTl9WQUxVRSkgewotICAgICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIgIGN1cnJlbnQgbm93OiAiICsgbUJhdHRlcnlQcm9wcy5iYXR0ZXJ5Q3VycmVudE5vdyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1CYXR0ZXJ5UHJvcHMuYmF0dGVyeUNoYXJnZUNvdW50ZXIgIT0gSW50ZWdlci5NSU5fVkFMVUUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiICBjaGFyZ2UgY291bnRlcjogIiArIG1CYXR0ZXJ5UHJvcHMuYmF0dGVyeUNoYXJnZUNvdW50ZXIpOwotICAgICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIiAgdGVtcGVyYXR1cmU6ICIgKyBtQmF0dGVyeVByb3BzLmJhdHRlcnlUZW1wZXJhdHVyZSk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiICB0ZWNobm9sb2d5OiAiICsgbUJhdHRlcnlQcm9wcy5iYXR0ZXJ5VGVjaG5vbG9neSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09IDMgJiYgInNldCIuZXF1YWxzKGFyZ3NbMF0pKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0NvbW1vblRpbWVNYW5hZ2VtZW50U2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Db21tb25UaW1lTWFuYWdlbWVudFNlcnZpY2UuamF2YQppbmRleCA3MTBmYjlkLi42MGIzNjZhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0NvbW1vblRpbWVNYW5hZ2VtZW50U2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29tbW9uVGltZU1hbmFnZW1lbnRTZXJ2aWNlLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKQEAgLTI2LDEwICsyNSw4IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5JQ29ubmVjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5JTmV0d29ya01hbmFnZW1lbnRFdmVudE9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQubmV0LkludGVyZmFjZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0luZm87CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Db21tb25UaW1lQ29uZmlnOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29ubmVjdGl2aXR5U2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Db25uZWN0aXZpdHlTZXJ2aWNlLmphdmEKaW5kZXggZDQyYWUzYS4uNjU3NDg5OCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Db25uZWN0aXZpdHlTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Db25uZWN0aXZpdHlTZXJ2aWNlLmphdmEKQEAgLTExMiw2ICsxMTIsNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5EY3RDb25zdGFudHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LlBob25lOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5QaG9uZUNvbnN0YW50czsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuVGVsZXBob255SW50ZW50czsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkluZGVudGluZ1ByaW50V3JpdGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmFtLkJhdHRlcnlTdGF0c1NlcnZpY2U7CkBAIC0xNDIsNyArMTQzLDYgQEAKIGltcG9ydCBqYXZhLm5ldC5JbmV0NkFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247CiBpbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwpAQCAtMjMyNSwzNiArMjMyNSw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgaGFuZGxlQ2FwdGl2ZVBvcnRhbFRyYWNrZXJDaGVjayhOZXR3b3JrSW5mbyBpbmZvKSB7Ci0gICAgICAgIGlmIChEQkcpIGxvZygiQ2FwdGl2ZSBwb3J0YWwgY2hlY2sgIiArIGluZm8pOwotICAgICAgICBpbnQgdHlwZSA9IGluZm8uZ2V0VHlwZSgpOwotICAgICAgICBmaW5hbCBOZXR3b3JrU3RhdGVUcmFja2VyIHRoaXNOZXQgPSBtTmV0VHJhY2tlcnNbdHlwZV07Ci0gICAgICAgIGlmIChtTmV0Q29uZmlnc1t0eXBlXS5pc0RlZmF1bHQoKSkgewotICAgICAgICAgICAgaWYgKG1BY3RpdmVEZWZhdWx0TmV0d29yayAhPSAtMSAmJiBtQWN0aXZlRGVmYXVsdE5ldHdvcmsgIT0gdHlwZSkgewotICAgICAgICAgICAgICAgIGlmIChpc05ld05ldFR5cGVQcmVmZXJyZWRPdmVyQ3VycmVudE5ldFR5cGUodHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJDYXB0aXZlIGNoZWNrIG9uICIgKyBpbmZvLmdldFR5cGVOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICBtQ2FwdGl2ZVBvcnRhbFRyYWNrZXIuZGV0ZWN0Q2FwdGl2ZVBvcnRhbChuZXcgTmV0d29ya0luZm8oaW5mbykpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJUZWFyIGRvd24gbG93IHByaW9yaXR5IG5ldCAiICsgaW5mby5nZXRUeXBlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24odGhpc05ldCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoREJHKSBsb2coImhhbmRsZUNhcHRpdmVQb3J0YWxUcmFja2VyQ2hlY2s6IGNhbGwgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGUgbmk9IiArIGluZm8pOwotICAgICAgICB0aGlzTmV0LmNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGUoTmV0d29ya0luZm8gaW5mbykgewotICAgICAgICBlbmZvcmNlQ29ubmVjdGl2aXR5SW50ZXJuYWxQZXJtaXNzaW9uKCk7Ci0gICAgICAgIGlmIChEQkcpIGxvZygiY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGU6IG5pPSIgKyBpbmZvKTsKLSAgICAgICAgbU5ldFRyYWNrZXJzW2luZm8uZ2V0VHlwZSgpXS5jYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZSgpOwotICAgIH0KLQogICAgIC8qKiBAaGlkZSAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlZChOZXR3b3JrSW5mbyBpbmZvLCBib29sZWFuIGlzQ2FwdGl2ZVBvcnRhbCkgewpAQCAtMjk4MSw5ICsyOTUxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uZ2V0RGV0YWlsZWRTdGF0ZSgpID09CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZS5GQUlMRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNvbm5lY3Rpb25GYWlsdXJlKGluZm8pOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZm8uZ2V0RGV0YWlsZWRTdGF0ZSgpID09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV0YWlsZWRTdGF0ZS5DQVBUSVZFX1BPUlRBTF9DSEVDSykgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FwdGl2ZVBvcnRhbFRyYWNrZXJDaGVjayhpbmZvKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmZvLmlzQ29ubmVjdGVkVG9Qcm92aXNpb25pbmdOZXR3b3JrKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgICAgICogVE9ETzogQ3JlYXRlIENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9NT0JJTEVfUFJPVklTSU9OSU5HCkBAIC00NTYzLDE1ICs0NTMwLDI3IEBACiAgICAgICAgICAgICBtZHN0LmVuYWJsZU1vYmlsZVByb3Zpc2lvbmluZyh1cmwpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKERCRykgbG9nKCJoYW5kbGVNb2JpbGVQcm92aXNpb25pbmdBY3Rpb246IG9uIGRlZmF1bHQgbmV0d29yayIpOwotICAgICAgICAgICAgSW50ZW50IG5ld0ludGVudCA9IEludGVudC5tYWtlTWFpblNlbGVjdG9yQWN0aXZpdHkoSW50ZW50LkFDVElPTl9NQUlOLAotICAgICAgICAgICAgICAgICAgICBJbnRlbnQuQ0FURUdPUllfQVBQX0JST1dTRVIpOwotICAgICAgICAgICAgbmV3SW50ZW50LnNldERhdGEoVXJpLnBhcnNlKHVybCkpOwotICAgICAgICAgICAgbmV3SW50ZW50LnNldEZsYWdzKEludGVudC5GTEFHX0FDVElWSVRZX0JST1VHSFRfVE9fRlJPTlQgfAotICAgICAgICAgICAgICAgICAgICBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSyk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1Db250ZXh0LnN0YXJ0QWN0aXZpdHkobmV3SW50ZW50KTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEFjdGl2aXR5Tm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGxvZ2UoImhhbmRsZU1vYmlsZVByb3Zpc2lvbmluZ0FjdGlvbjogc3RhcnRBY3Rpdml0eSBmYWlsZWQiICsgZSk7CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgIGFwcHMgdGhhdCBjYW4gaGFuZGxlIHByb3Zpc2lvbmluZyBmaXJzdAorICAgICAgICAgICAgSW50ZW50IHByb3Zpc2lvbmluZ0ludGVudCA9IG5ldyBJbnRlbnQoVGVsZXBob255SW50ZW50cy5BQ1RJT05fQ0FSUklFUl9TRVRVUCk7CisgICAgICAgICAgICBwcm92aXNpb25pbmdJbnRlbnQuYWRkQ2F0ZWdvcnkoVGVsZXBob255SW50ZW50cy5DQVRFR09SWV9NQ0NNTkNfUFJFRklYCisgICAgICAgICAgICAgICAgICAgICsgbVRlbGVwaG9ueU1hbmFnZXIuZ2V0U2ltT3BlcmF0b3IoKSk7CisgICAgICAgICAgICBpZiAobUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5yZXNvbHZlQWN0aXZpdHkocHJvdmlzaW9uaW5nSW50ZW50LCAwIC8qIGZsYWdzICovKQorICAgICAgICAgICAgICAgICAgICAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcHJvdmlzaW9uaW5nSW50ZW50LnNldEZsYWdzKEludGVudC5GTEFHX0FDVElWSVRZX0JST1VHSFRfVE9fRlJPTlQgfAorICAgICAgICAgICAgICAgICAgICAgICAgSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0spOworICAgICAgICAgICAgICAgIG1Db250ZXh0LnN0YXJ0QWN0aXZpdHkocHJvdmlzaW9uaW5nSW50ZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgbm8gYXBwcyBleGlzdCwgdXNlIHN0YW5kYXJkIFVSTCBBQ1RJT05fVklFVyBtZXRob2QKKyAgICAgICAgICAgICAgICBJbnRlbnQgbmV3SW50ZW50ID0gSW50ZW50Lm1ha2VNYWluU2VsZWN0b3JBY3Rpdml0eShJbnRlbnQuQUNUSU9OX01BSU4sCisgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbnQuQ0FURUdPUllfQVBQX0JST1dTRVIpOworICAgICAgICAgICAgICAgIG5ld0ludGVudC5zZXREYXRhKFVyaS5wYXJzZSh1cmwpKTsKKyAgICAgICAgICAgICAgICBuZXdJbnRlbnQuc2V0RmxhZ3MoSW50ZW50LkZMQUdfQUNUSVZJVFlfQlJPVUdIVF9UT19GUk9OVCB8CisgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSyk7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQuc3RhcnRBY3Rpdml0eShuZXdJbnRlbnQpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEFjdGl2aXR5Tm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBsb2dlKCJoYW5kbGVNb2JpbGVQcm92aXNpb25pbmdBY3Rpb246IHN0YXJ0QWN0aXZpdHkgZmFpbGVkIiArIGUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29uc3VtZXJJclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29uc3VtZXJJclNlcnZpY2UuamF2YQppbmRleCA3ODNkZmYxLi4wNjZhOWM0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0NvbnN1bWVySXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Db25zdW1lcklyU2VydmljZS5qYXZhCkBAIC0xNiwzMyArMTYsMTMgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXI7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmlucHV0LklucHV0TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLklDb25zdW1lcklyU2VydmljZTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Qb3dlck1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuV29ya1NvdXJjZTsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuU2V0dGluZ05vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5JbnB1dERldmljZTsKIAogaW1wb3J0IGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKIAogcHVibGljIGNsYXNzIENvbnN1bWVySXJTZXJ2aWNlIGV4dGVuZHMgSUNvbnN1bWVySXJTZXJ2aWNlLlN0dWIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ29uc3VtZXJJclNlcnZpY2UiOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9EaXNrU3RhdHNTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0Rpc2tTdGF0c1NlcnZpY2UuamF2YQppbmRleCBhYzI1ZGM1Li5iYzEyZmM1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0Rpc2tTdGF0c1NlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0Rpc2tTdGF0c1NlcnZpY2UuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5GaWxlVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC5vcy5TdGF0RnM7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9FbnRyb3B5TWl4ZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvRW50cm9weU1peGVyLmphdmEKaW5kZXggY2ZkYmY3ZC4uMjRkOGQxZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9FbnRyb3B5TWl4ZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0VudHJvcHlNaXhlci5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvSW5wdXRNZXRob2RNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9JbnB1dE1ldGhvZE1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggMjY0MjRhNS4uMGIzZWIxMiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9JbnB1dE1ldGhvZE1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9JbnB1dE1ldGhvZE1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTE2LDYgKzE2LDggQEAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuY29udGVudC5QYWNrYWdlTW9uaXRvcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZFN1YnR5cGVTd2l0Y2hpbmdDb250cm9sbGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZVN3aXRjaGluZ0NvbnRyb2xsZXIuSW1lU3VidHlwZUxpc3RJdGVtOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmlucHV0bWV0aG9kLklucHV0TWV0aG9kVXRpbHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RVdGlscy5JbnB1dE1ldGhvZFNldHRpbmdzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLkhhbmRsZXJDYWxsZXI7CkBAIC0xMTQsMTIgKzExNiw5IEBACiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwogCiAvKioKICAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzeXN0ZW0gc2VydmljZSB0aGF0IG1hbmFnZXMgaW5wdXQgbWV0aG9kcy4KQEAgLTE1MCw3ICsxNDksNyBAQAogCiAgICAgc3RhdGljIGZpbmFsIGludCBNU0dfSEFSRF9LRVlCT0FSRF9TV0lUQ0hfQ0hBTkdFRCA9IDQwMDA7CiAKLSAgICBzdGF0aWMgZmluYWwgbG9uZyBUSU1FX1RPX1JFQ09OTkVDVCA9IDEwKjEwMDA7CisgICAgc3RhdGljIGZpbmFsIGxvbmcgVElNRV9UT19SRUNPTk5FQ1QgPSAzICogMTAwMDsKIAogICAgIHN0YXRpYyBmaW5hbCBpbnQgU0VDVVJFX1NVR0dFU1RJT05fU1BBTlNfTUFYX1NJWkUgPSAyMDsKIApAQCAtMTY3LDcgKzE2Niw2IEBACiAgICAgZmluYWwgSGFuZGxlckNhbGxlciBtQ2FsbGVyOwogICAgIGZpbmFsIGJvb2xlYW4gbUhhc0ZlYXR1cmU7CiAgICAgcHJpdmF0ZSBJbnB1dE1ldGhvZEZpbGVNYW5hZ2VyIG1GaWxlTWFuYWdlcjsKLSAgICBwcml2YXRlIElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3RNYW5hZ2VyIG1JbUxpc3RNYW5hZ2VyOwogICAgIHByaXZhdGUgZmluYWwgSGFyZEtleWJvYXJkTGlzdGVuZXIgbUhhcmRLZXlib2FyZExpc3RlbmVyOwogICAgIHByaXZhdGUgZmluYWwgV2luZG93TWFuYWdlclNlcnZpY2UgbVdpbmRvd01hbmFnZXJTZXJ2aWNlOwogCkBAIC0xNzksNiArMTc3LDcgQEAKICAgICBmaW5hbCBIYXNoTWFwPFN0cmluZywgSW5wdXRNZXRob2RJbmZvPiBtTWV0aG9kTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnB1dE1ldGhvZEluZm8+KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBMcnVDYWNoZTxTdWdnZXN0aW9uU3BhbiwgSW5wdXRNZXRob2RJbmZvPiBtU2VjdXJlU3VnZ2VzdGlvblNwYW5zID0KICAgICAgICAgICAgIG5ldyBMcnVDYWNoZTxTdWdnZXN0aW9uU3BhbiwgSW5wdXRNZXRob2RJbmZvPihTRUNVUkVfU1VHR0VTVElPTl9TUEFOU19NQVhfU0laRSk7CisgICAgcHJpdmF0ZSBmaW5hbCBJbnB1dE1ldGhvZFN1YnR5cGVTd2l0Y2hpbmdDb250cm9sbGVyIG1Td2l0Y2hpbmdDb250cm9sbGVyOwogCiAgICAgLy8gVXNlZCB0byBicmluZyBJTUUgc2VydmljZSB1cCB0byB2aXNpYmxlIGFkanVzdG1lbnQgd2hpbGUgaXQgaXMgYmVpbmcgc2hvd24uCiAgICAgZmluYWwgU2VydmljZUNvbm5lY3Rpb24gbVZpc2libGVDb25uZWN0aW9uID0gbmV3IFNlcnZpY2VDb25uZWN0aW9uKCkgewpAQCAtNjc3LDcgKzY3Niw4IEBACiAgICAgICAgIG1TZXR0aW5ncyA9IG5ldyBJbnB1dE1ldGhvZFNldHRpbmdzKAogICAgICAgICAgICAgICAgIG1SZXMsIGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksIG1NZXRob2RNYXAsIG1NZXRob2RMaXN0LCB1c2VySWQpOwogICAgICAgICBtRmlsZU1hbmFnZXIgPSBuZXcgSW5wdXRNZXRob2RGaWxlTWFuYWdlcihtTWV0aG9kTWFwLCB1c2VySWQpOwotICAgICAgICBtSW1MaXN0TWFuYWdlciA9IG5ldyBJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0TWFuYWdlcihjb250ZXh0LCB0aGlzKTsKKyAgICAgICAgbVN3aXRjaGluZ0NvbnRyb2xsZXIgPSBuZXcgSW5wdXRNZXRob2RTdWJ0eXBlU3dpdGNoaW5nQ29udHJvbGxlcihtU2V0dGluZ3MpOworICAgICAgICBtU3dpdGNoaW5nQ29udHJvbGxlci5yZXNldENpcmN1bGFyTGlzdExvY2tlZChjb250ZXh0KTsKIAogICAgICAgICAvLyBKdXN0IGNoZWNraW5nIGlmIGRlZmF1bHRJbWlJZCBpcyBlbXB0eSBvciBub3QKICAgICAgICAgZmluYWwgU3RyaW5nIGRlZmF1bHRJbWlJZCA9IG1TZXR0aW5ncy5nZXRTZWxlY3RlZElucHV0TWV0aG9kKCk7CkBAIC03NTcsOCArNzU3LDggQEAKICAgICAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgICAgIFNsb2cuaShUQUcsICJMb2NhbGUgaGFzIGJlZW4gY2hhbmdlZCB0byAiICsgbmV3TG9jYWxlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3RNYW5hZ2VyIHNob3VsZCBiZSByZXNldCB3aGVuIHRoZSBsb2NhbGUgaXMgY2hhbmdlZC4KLSAgICAgICAgICAgIG1JbUxpc3RNYW5hZ2VyID0gbmV3IElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3RNYW5hZ2VyKG1Db250ZXh0LCB0aGlzKTsKKyAgICAgICAgICAgIC8vIENpcmN1bGFyTGlzdCBzaG91bGQgYmUgcmVzZXQgd2hlbiB0aGUgbG9jYWxlIGlzIGNoYW5nZWQuCisgICAgICAgICAgICBtU3dpdGNoaW5nQ29udHJvbGxlci5yZXNldENpcmN1bGFyTGlzdExvY2tlZChtQ29udGV4dCk7CiAgICAgICAgICAgICBidWlsZElucHV0TWV0aG9kTGlzdExvY2tlZChtTWV0aG9kTGlzdCwgbU1ldGhvZE1hcCwgcmVzZXREZWZhdWx0RW5hYmxlZEltZSk7CiAgICAgICAgICAgICBpZiAoIXVwZGF0ZU9ubHlXaGVuTG9jYWxlQ2hhbmdlZCkgewogICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzZWxlY3RlZEltaUlkID0gbVNldHRpbmdzLmdldFNlbGVjdGVkSW5wdXRNZXRob2QoKTsKQEAgLTk2MCwxNyArOTYwLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgSGFzaE1hcDxJbnB1dE1ldGhvZEluZm8sIExpc3Q8SW5wdXRNZXRob2RTdWJ0eXBlPj4KLSAgICAgICAgICAgIGdldEV4cGxpY2l0bHlPckltcGxpY2l0bHlFbmFibGVkSW5wdXRNZXRob2RzQW5kU3VidHlwZUxpc3RMb2NrZWQoKSB7Ci0gICAgICAgIEhhc2hNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+IGVuYWJsZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVzID0KLSAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxJbnB1dE1ldGhvZEluZm8sIExpc3Q8SW5wdXRNZXRob2RTdWJ0eXBlPj4oKTsKLSAgICAgICAgZm9yIChJbnB1dE1ldGhvZEluZm8gaW1pOiBtU2V0dGluZ3MuZ2V0RW5hYmxlZElucHV0TWV0aG9kTGlzdExvY2tlZCgpKSB7Ci0gICAgICAgICAgICBlbmFibGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlcy5wdXQoCi0gICAgICAgICAgICAgICAgICAgIGltaSwgbVNldHRpbmdzLmdldEVuYWJsZWRJbnB1dE1ldGhvZFN1YnR5cGVMaXN0TG9ja2VkKG1Db250ZXh0LCBpbWksIHRydWUpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZW5hYmxlZElucHV0TWV0aG9kQW5kU3VidHlwZXM7Ci0gICAgfQotCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGltaUlkIGlmIG51bGwsIHJldHVybnMgZW5hYmxlZCBzdWJ0eXBlcyBmb3IgdGhlIGN1cnJlbnQgaW1pCiAgICAgICogQHJldHVybiBlbmFibGVkIHN1YnR5cGVzIG9mIHRoZSBzcGVjaWZpZWQgaW1pCkBAIC0yMTUzLDcgKzIxNDIsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAobU1ldGhvZE1hcCkgewotICAgICAgICAgICAgZmluYWwgSW1lU3VidHlwZUxpc3RJdGVtIG5leHRTdWJ0eXBlID0gbUltTGlzdE1hbmFnZXIuZ2V0TmV4dElucHV0TWV0aG9kKAorICAgICAgICAgICAgZmluYWwgSW1lU3VidHlwZUxpc3RJdGVtIG5leHRTdWJ0eXBlID0gbVN3aXRjaGluZ0NvbnRyb2xsZXIuZ2V0TmV4dElucHV0TWV0aG9kKAogICAgICAgICAgICAgICAgICAgICBvbmx5Q3VycmVudEltZSwgbU1ldGhvZE1hcC5nZXQobUN1ck1ldGhvZElkKSwgbUN1cnJlbnRTdWJ0eXBlKTsKICAgICAgICAgICAgIGlmIChuZXh0U3VidHlwZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE2OSw3ICsyMTU4LDcgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBzeW5jaHJvbml6ZWQgKG1NZXRob2RNYXApIHsKLSAgICAgICAgICAgIGZpbmFsIEltZVN1YnR5cGVMaXN0SXRlbSBuZXh0U3VidHlwZSA9IG1JbUxpc3RNYW5hZ2VyLmdldE5leHRJbnB1dE1ldGhvZCgKKyAgICAgICAgICAgIGZpbmFsIEltZVN1YnR5cGVMaXN0SXRlbSBuZXh0U3VidHlwZSA9IG1Td2l0Y2hpbmdDb250cm9sbGVyLmdldE5leHRJbnB1dE1ldGhvZCgKICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogb25seUN1cnJlbnRJbWUgKi8sIG1NZXRob2RNYXAuZ2V0KG1DdXJNZXRob2RJZCksIG1DdXJyZW50U3VidHlwZSk7CiAgICAgICAgICAgICBpZiAobmV4dFN1YnR5cGUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIyNDIsNiArMjIzMSwyMiBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRJbnB1dE1ldGhvZFdpbmRvd1Zpc2libGVIZWlnaHQoKSB7CisgICAgICAgIHJldHVybiBtV2luZG93TWFuYWdlclNlcnZpY2UuZ2V0SW5wdXRNZXRob2RXaW5kb3dWaXNpYmxlSGVpZ2h0KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgbm90aWZ5VGV4dENvbW1pdHRlZCgpIHsKKyAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICBTbG9nLmQoVEFHLCAiR290IHRoZSBub3RpZmljYXRpb24gb2YgY29tbWl0VGV4dCIpOworICAgICAgICB9CisgICAgICAgIGZpbmFsIElucHV0TWV0aG9kSW5mbyBpbWkgPSBtTWV0aG9kTWFwLmdldChtQ3VyTWV0aG9kSWQpOworICAgICAgICBpZiAoaW1pICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1Td2l0Y2hpbmdDb250cm9sbGVyLm9uQ29tbWl0VGV4dChpbWksIG1DdXJyZW50U3VidHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgc2V0SW5wdXRNZXRob2RXaXRoU3VidHlwZUlkKElCaW5kZXIgdG9rZW4sIFN0cmluZyBpZCwgaW50IHN1YnR5cGVJZCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1NZXRob2RNYXApIHsKICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKSB7CkBAIC0yNjIwLDcgKzI2MjUsOCBAQAogCiAgICAgICAgIHN5bmNocm9uaXplZCAobU1ldGhvZE1hcCkgewogICAgICAgICAgICAgZmluYWwgSGFzaE1hcDxJbnB1dE1ldGhvZEluZm8sIExpc3Q8SW5wdXRNZXRob2RTdWJ0eXBlPj4gaW1taXMgPQotICAgICAgICAgICAgICAgICAgICBnZXRFeHBsaWNpdGx5T3JJbXBsaWNpdGx5RW5hYmxlZElucHV0TWV0aG9kc0FuZFN1YnR5cGVMaXN0TG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIG1TZXR0aW5ncy5nZXRFeHBsaWNpdGx5T3JJbXBsaWNpdGx5RW5hYmxlZElucHV0TWV0aG9kc0FuZFN1YnR5cGVMaXN0TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0KTsKICAgICAgICAgICAgIGlmIChpbW1pcyA9PSBudWxsIHx8IGltbWlzLnNpemUoKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjYyOCw3ICsyNjM0LDcgQEAKICAgICAgICAgICAgIGhpZGVJbnB1dE1ldGhvZE1lbnVMb2NrZWQoKTsKIAogICAgICAgICAgICAgZmluYWwgTGlzdDxJbWVTdWJ0eXBlTGlzdEl0ZW0+IGltTGlzdCA9Ci0gICAgICAgICAgICAgICAgICAgIG1JbUxpc3RNYW5hZ2VyLmdldFNvcnRlZElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3QoCisgICAgICAgICAgICAgICAgICAgIG1Td2l0Y2hpbmdDb250cm9sbGVyLmdldFNvcnRlZElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1N1YnR5cGVzLCBtSW5wdXRTaG93biwgaXNTY3JlZW5Mb2NrZWQpOwogCiAgICAgICAgICAgICBpZiAobGFzdElucHV0TWV0aG9kU3VidHlwZUlkID09IE5PVF9BX1NVQlRZUEVfSUQpIHsKQEAgLTI3NDcsNjYgKzI3NTMsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSW1lU3VidHlwZUxpc3RJdGVtIGltcGxlbWVudHMgQ29tcGFyYWJsZTxJbWVTdWJ0eXBlTGlzdEl0ZW0+IHsKLSAgICAgICAgcHVibGljIGZpbmFsIENoYXJTZXF1ZW5jZSBtSW1lTmFtZTsKLSAgICAgICAgcHVibGljIGZpbmFsIENoYXJTZXF1ZW5jZSBtU3VidHlwZU5hbWU7Ci0gICAgICAgIHB1YmxpYyBmaW5hbCBJbnB1dE1ldGhvZEluZm8gbUltaTsKLSAgICAgICAgcHVibGljIGZpbmFsIGludCBtU3VidHlwZUlkOwotICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUlzU3lzdGVtTG9jYWxlOwotICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUlzU3lzdGVtTGFuZ3VhZ2U7Ci0KLSAgICAgICAgcHVibGljIEltZVN1YnR5cGVMaXN0SXRlbShDaGFyU2VxdWVuY2UgaW1lTmFtZSwgQ2hhclNlcXVlbmNlIHN1YnR5cGVOYW1lLAotICAgICAgICAgICAgICAgIElucHV0TWV0aG9kSW5mbyBpbWksIGludCBzdWJ0eXBlSWQsIFN0cmluZyBzdWJ0eXBlTG9jYWxlLCBTdHJpbmcgc3lzdGVtTG9jYWxlKSB7Ci0gICAgICAgICAgICBtSW1lTmFtZSA9IGltZU5hbWU7Ci0gICAgICAgICAgICBtU3VidHlwZU5hbWUgPSBzdWJ0eXBlTmFtZTsKLSAgICAgICAgICAgIG1JbWkgPSBpbWk7Ci0gICAgICAgICAgICBtU3VidHlwZUlkID0gc3VidHlwZUlkOwotICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHN1YnR5cGVMb2NhbGUpKSB7Ci0gICAgICAgICAgICAgICAgbUlzU3lzdGVtTG9jYWxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgbUlzU3lzdGVtTGFuZ3VhZ2UgPSBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbUlzU3lzdGVtTG9jYWxlID0gc3VidHlwZUxvY2FsZS5lcXVhbHMoc3lzdGVtTG9jYWxlKTsKLSAgICAgICAgICAgICAgICBtSXNTeXN0ZW1MYW5ndWFnZSA9IG1Jc1N5c3RlbUxvY2FsZQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3VidHlwZUxvY2FsZS5zdGFydHNXaXRoKHN5c3RlbUxvY2FsZS5zdWJzdHJpbmcoMCwgMikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKEltZVN1YnR5cGVMaXN0SXRlbSBvdGhlcikgewotICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG1JbWVOYW1lKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG90aGVyLm1JbWVOYW1lKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmVxdWFscyhtSW1lTmFtZSwgb3RoZXIubUltZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1JbWVOYW1lLnRvU3RyaW5nKCkuY29tcGFyZVRvKG90aGVyLm1JbWVOYW1lLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFRleHRVdGlscy5lcXVhbHMobVN1YnR5cGVOYW1lLCBvdGhlci5tU3VidHlwZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobUlzU3lzdGVtTG9jYWxlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG90aGVyLm1Jc1N5c3RlbUxvY2FsZSkgewotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1Jc1N5c3RlbUxhbmd1YWdlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG90aGVyLm1Jc1N5c3RlbUxhbmd1YWdlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobVN1YnR5cGVOYW1lKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG90aGVyLm1TdWJ0eXBlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbVN1YnR5cGVOYW1lLnRvU3RyaW5nKCkuY29tcGFyZVRvKG90aGVyLm1TdWJ0eXBlTmFtZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEltZVN1YnR5cGVMaXN0QWRhcHRlciBleHRlbmRzIEFycmF5QWRhcHRlcjxJbWVTdWJ0eXBlTGlzdEl0ZW0+IHsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBMYXlvdXRJbmZsYXRlciBtSW5mbGF0ZXI7CiAgICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1UZXh0Vmlld1Jlc291cmNlSWQ7CkBAIC0zMTc4LDEyMyArMzEyNCw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0TWFuYWdlciB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKLSAgICAgICAgLy8gVXNlZCB0byBsb2FkIGxhYmVsCi0gICAgICAgIHByaXZhdGUgZmluYWwgUGFja2FnZU1hbmFnZXIgbVBtOwotICAgICAgICBwcml2YXRlIGZpbmFsIElucHV0TWV0aG9kTWFuYWdlclNlcnZpY2UgbUltbXM7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1TeXN0ZW1Mb2NhbGVTdHI7Ci0gICAgICAgIHB1YmxpYyBJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0TWFuYWdlcihDb250ZXh0IGNvbnRleHQsIElucHV0TWV0aG9kTWFuYWdlclNlcnZpY2UgaW1tcykgewotICAgICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICAgICAgbVBtID0gY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpOwotICAgICAgICAgICAgbUltbXMgPSBpbW1zOwotICAgICAgICAgICAgZmluYWwgTG9jYWxlIGxvY2FsZSA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0Q29uZmlndXJhdGlvbigpLmxvY2FsZTsKLSAgICAgICAgICAgIG1TeXN0ZW1Mb2NhbGVTdHIgPSBsb2NhbGUgIT0gbnVsbCA/IGxvY2FsZS50b1N0cmluZygpIDogIiI7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGZpbmFsIFRyZWVNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+IG1Tb3J0ZWRJbW1pcyA9Ci0gICAgICAgICAgICAgICAgbmV3IFRyZWVNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+KAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENvbXBhcmF0b3I8SW5wdXRNZXRob2RJbmZvPigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoSW5wdXRNZXRob2RJbmZvIGltaTEsIElucHV0TWV0aG9kSW5mbyBpbWkyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWkyID09IG51bGwpIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1pMSA9PSBudWxsKSByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1QbSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1pMS5nZXRJZCgpLmNvbXBhcmVUbyhpbWkyLmdldElkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBpbWlJZDEgPSBpbWkxLmxvYWRMYWJlbChtUG0pICsgIi8iICsgaW1pMS5nZXRJZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyU2VxdWVuY2UgaW1pSWQyID0gaW1pMi5sb2FkTGFiZWwobVBtKSArICIvIiArIGltaTIuZ2V0SWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltaUlkMS50b1N0cmluZygpLmNvbXBhcmVUbyhpbWlJZDIudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgcHVibGljIEltZVN1YnR5cGVMaXN0SXRlbSBnZXROZXh0SW5wdXRNZXRob2QoCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBvbmx5Q3VycmVudEltZSwgSW5wdXRNZXRob2RJbmZvIGltaSwgSW5wdXRNZXRob2RTdWJ0eXBlIHN1YnR5cGUpIHsKLSAgICAgICAgICAgIGlmIChpbWkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWwgTGlzdDxJbWVTdWJ0eXBlTGlzdEl0ZW0+IGltTGlzdCA9IGdldFNvcnRlZElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3QoKTsKLSAgICAgICAgICAgIGlmIChpbUxpc3Quc2l6ZSgpIDw9IDEpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsIGludCBOID0gaW1MaXN0LnNpemUoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBjdXJyZW50U3VidHlwZUlkID0gc3VidHlwZSAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgID8gSW5wdXRNZXRob2RVdGlscy5nZXRTdWJ0eXBlSWRGcm9tSGFzaENvZGUoaW1pLCBzdWJ0eXBlLmhhc2hDb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIDogTk9UX0FfU1VCVFlQRV9JRDsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgSW1lU3VidHlwZUxpc3RJdGVtIGlzbGkgPSBpbUxpc3QuZ2V0KGkpOwotICAgICAgICAgICAgICAgIGlmIChpc2xpLm1JbWkuZXF1YWxzKGltaSkgJiYgaXNsaS5tU3VidHlwZUlkID09IGN1cnJlbnRTdWJ0eXBlSWQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFvbmx5Q3VycmVudEltZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltTGlzdC5nZXQoKGkgKyAxKSAlIE4pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgTiAtIDE7ICsraikgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgSW1lU3VidHlwZUxpc3RJdGVtIGNhbmRpZGF0ZSA9IGltTGlzdC5nZXQoKGkgKyBqICsgMSkgJSBOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUubUltaS5lcXVhbHMoaW1pKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgTGlzdDxJbWVTdWJ0eXBlTGlzdEl0ZW0+IGdldFNvcnRlZElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3QoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCh0cnVlLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIExpc3Q8SW1lU3VidHlwZUxpc3RJdGVtPiBnZXRTb3J0ZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0KGJvb2xlYW4gc2hvd1N1YnR5cGVzLAotICAgICAgICAgICAgICAgIGJvb2xlYW4gaW5wdXRTaG93biwgYm9vbGVhbiBpc1NjcmVlbkxvY2tlZCkgewotICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4gaW1MaXN0ID0gbmV3IEFycmF5TGlzdDxJbWVTdWJ0eXBlTGlzdEl0ZW0+KCk7Ci0gICAgICAgICAgICBmaW5hbCBIYXNoTWFwPElucHV0TWV0aG9kSW5mbywgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+PiBpbW1pcyA9Ci0gICAgICAgICAgICAgICAgICAgIG1JbW1zLmdldEV4cGxpY2l0bHlPckltcGxpY2l0bHlFbmFibGVkSW5wdXRNZXRob2RzQW5kU3VidHlwZUxpc3RMb2NrZWQoKTsKLSAgICAgICAgICAgIGlmIChpbW1pcyA9PSBudWxsIHx8IGltbWlzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVNvcnRlZEltbWlzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtU29ydGVkSW1taXMucHV0QWxsKGltbWlzKTsKLSAgICAgICAgICAgIGZvciAoSW5wdXRNZXRob2RJbmZvIGltaSA6IG1Tb3J0ZWRJbW1pcy5rZXlTZXQoKSkgewotICAgICAgICAgICAgICAgIGlmIChpbWkgPT0gbnVsbCkgY29udGludWU7Ci0gICAgICAgICAgICAgICAgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+IGV4cGxpY2l0bHlPckltcGxpY2l0bHlFbmFibGVkU3VidHlwZUxpc3QgPSBpbW1pcy5nZXQoaW1pKTsKLSAgICAgICAgICAgICAgICBIYXNoU2V0PFN0cmluZz4gZW5hYmxlZFN1YnR5cGVTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChJbnB1dE1ldGhvZFN1YnR5cGUgc3VidHlwZTogZXhwbGljaXRseU9ySW1wbGljaXRseUVuYWJsZWRTdWJ0eXBlTGlzdCkgewotICAgICAgICAgICAgICAgICAgICBlbmFibGVkU3VidHlwZVNldC5hZGQoU3RyaW5nLnZhbHVlT2Yoc3VidHlwZS5oYXNoQ29kZSgpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZpbmFsIENoYXJTZXF1ZW5jZSBpbWVMYWJlbCA9IGltaS5sb2FkTGFiZWwobVBtKTsKLSAgICAgICAgICAgICAgICBpZiAoc2hvd1N1YnR5cGVzICYmIGVuYWJsZWRTdWJ0eXBlU2V0LnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHN1YnR5cGVDb3VudCA9IGltaS5nZXRTdWJ0eXBlQ291bnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTbG9nLnYoVEFHLCAiQWRkIHN1YnR5cGVzOiAiICsgc3VidHlwZUNvdW50ICsgIiwgIiArIGltaS5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN1YnR5cGVDb3VudDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBJbnB1dE1ldGhvZFN1YnR5cGUgc3VidHlwZSA9IGltaS5nZXRTdWJ0eXBlQXQoaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgc3VidHlwZUhhc2hDb2RlID0gU3RyaW5nLnZhbHVlT2Yoc3VidHlwZS5oYXNoQ29kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNob3cgYWxsIGVuYWJsZWQgSU1FcyBhbmQgc3VidHlwZXMgd2hlbiBhbiBJTUUgaXMgc2hvd24uCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZFN1YnR5cGVTZXQuY29udGFpbnMoc3VidHlwZUhhc2hDb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGlucHV0U2hvd24gJiYgIWlzU2NyZWVuTG9ja2VkKSB8fCAhc3VidHlwZS5pc0F1eGlsaWFyeSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENoYXJTZXF1ZW5jZSBzdWJ0eXBlTGFiZWwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS5vdmVycmlkZXNJbXBsaWNpdGx5RW5hYmxlZFN1YnR5cGUoKSA/IG51bGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdWJ0eXBlLmdldERpc3BsYXlOYW1lKG1Db250ZXh0LCBpbWkuZ2V0UGFja2FnZU5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWkuZ2V0U2VydmljZUluZm8oKS5hcHBsaWNhdGlvbkluZm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltTGlzdC5hZGQobmV3IEltZVN1YnR5cGVMaXN0SXRlbShpbWVMYWJlbCwgc3VidHlwZUxhYmVsLCBpbWksIGosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLmdldExvY2FsZSgpLCBtU3lzdGVtTG9jYWxlU3RyKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyB0aGlzIHN1YnR5cGUgZnJvbSBlbmFibGVkU3VidHlwZVNldCBiZWNhdXNlIHdlIG5vIGxvbmdlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIGFuIGVudHJ5IG9mIHRoaXMgc3VidHlwZSB0byBpbUxpc3QgdG8gYXZvaWQgZHVwbGljYXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVudHJpZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZFN1YnR5cGVTZXQucmVtb3ZlKHN1YnR5cGVIYXNoQ29kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbUxpc3QuYWRkKG5ldyBJbWVTdWJ0eXBlTGlzdEl0ZW0oaW1lTGFiZWwsIG51bGwsIGltaSwgTk9UX0FfU1VCVFlQRV9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBtU3lzdGVtTG9jYWxlU3RyKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgQ29sbGVjdGlvbnMuc29ydChpbUxpc3QpOwotICAgICAgICAgICAgcmV0dXJuIGltTGlzdDsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIFRPRE86IENhY2hlIHRoZSBzdGF0ZSBmb3IgZWFjaCB1c2VyIGFuZCByZXNldCB3aGVuIHRoZSBjYWNoZWQgdXNlciBpcyByZW1vdmVkLgogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIElucHV0TWV0aG9kRmlsZU1hbmFnZXIgewogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lTVEVNX1BBVEggPSAic3lzdGVtIjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvTG9ja1NldHRpbmdzU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Mb2NrU2V0dGluZ3NTZXJ2aWNlLmphdmEKaW5kZXggMzVlN2FmYS4uZmU4MTRmYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Mb2NrU2V0dGluZ3NTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Mb2NrU2V0dGluZ3NTZXJ2aWNlLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXI7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXJOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKQEAgLTI5LDggKzI4LDYgQEAKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZTsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVPcGVuSGVscGVyOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZVN0YXRlbWVudDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Oc2RTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL05zZFNlcnZpY2UuamF2YQppbmRleCAxNmQyNDY4Li43NDYzM2FlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL05zZFNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL05zZFNlcnZpY2UuamF2YQpAQCAtMjYsMTEgKzI2LDggQEAKIGltcG9ydCBhbmRyb2lkLm5ldC5uc2QuSU5zZE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQubnNkLk5zZE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzZW5nZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwpAQCAtMzksMjAgKzM2LDEzIEBACiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuSUJhdHRlcnlTdGF0czsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuVGVsZXBob255SW50ZW50czsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFzeW5jQ2hhbm5lbDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByb3RvY29sOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZU1hY2hpbmU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmFtLkJhdHRlcnlTdGF0c1NlcnZpY2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLk5hdGl2ZURhZW1vbkNvbm5lY3Rvci5Db21tYW5kOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiAKIC8qKgogICogTmV0d29yayBTZXJ2aWNlIERpc2NvdmVyeSBTZXJ2aWNlIGhhbmRsZXMgcmVtb3RlIHNlcnZpY2UgZGlzY292ZXJ5IG9wZXJhdGlvbiByZXF1ZXN0cyBieQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TZXJ2aWNlV2F0Y2hlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TZXJ2aWNlV2F0Y2hlci5qYXZhCmluZGV4IDVjN2JmYWIuLjkyNzQyOTUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU2VydmljZVdhdGNoZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1NlcnZpY2VXYXRjaGVyLmphdmEKQEAgLTM3LDcgKzM3LDYgQEAKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU2h1dGRvd25BY3Rpdml0eS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TaHV0ZG93bkFjdGl2aXR5LmphdmEKaW5kZXggYmU2NTE0MS4uNTYxNzJlZDAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU2h1dGRvd25BY3Rpdml0eS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU2h1dGRvd25BY3Rpdml0eS5qYXZhCkBAIC0yMCwxNCArMjAsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklQb3dlck1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wb3dlci5TaHV0ZG93blRocmVhZDsKLQogcHVibGljIGNsYXNzIFNodXRkb3duQWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlNodXRkb3duQWN0aXZpdHkiOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1TZXJ2ZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU3lzdGVtU2VydmVyLmphdmEKaW5kZXggYzY2YTg0OS4uMjRiMWE5MiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1TZXJ2ZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1N5c3RlbVNlcnZlci5qYXZhCkBAIC0yOSw3ICsyOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvU2VydmljZTsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5XaWZpUDJwU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuRmFjdG9yeVRlc3Q7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwpAQCAtODAsNyArNzksNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci50d2lsaWdodC5Ud2lsaWdodFNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnVzYi5Vc2JTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53YWxscGFwZXIuV2FsbHBhcGVyTWFuYWdlclNlcnZpY2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndpZmkuV2lmaVNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJTZXJ2aWNlOwogCiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5WTVJ1bnRpbWU7CkBAIC0yOTUsOCArMjkzLDYgQEAKICAgICAgICAgTmV0d29ya1N0YXRzU2VydmljZSBuZXR3b3JrU3RhdHMgPSBudWxsOwogICAgICAgICBOZXR3b3JrUG9saWN5TWFuYWdlclNlcnZpY2UgbmV0d29ya1BvbGljeSA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpdml0eVNlcnZpY2UgY29ubmVjdGl2aXR5ID0gbnVsbDsKLSAgICAgICAgV2lmaVAycFNlcnZpY2Ugd2lmaVAycCA9IG51bGw7Ci0gICAgICAgIFdpZmlTZXJ2aWNlIHdpZmkgPSBudWxsOwogICAgICAgICBOc2RTZXJ2aWNlIHNlcnZpY2VEaXNjb3Zlcnk9IG51bGw7CiAgICAgICAgIElQYWNrYWdlTWFuYWdlciBwbSA9IG51bGw7CiAgICAgICAgIFdpbmRvd01hbmFnZXJTZXJ2aWNlIHdtID0gbnVsbDsKQEAgLTYwNywxOCArNjAzLDE4IEBACiAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFd0Zigic3RhcnRpbmcgTmV0d29ya1BvbGljeSBTZXJ2aWNlIiwgZSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIFNsb2cuaShUQUcsICJXaS1GaSBQMnBTZXJ2aWNlIik7Ci0gICAgICAgICAgICAgICAgICAgIHdpZmlQMnAgPSBuZXcgV2lmaVAycFNlcnZpY2UoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VNYW5hZ2VyLmFkZFNlcnZpY2UoQ29udGV4dC5XSUZJX1AyUF9TRVJWSUNFLCB3aWZpUDJwKTsKKyAgICAgICAgICAgICAgICAgICAgbVN5c3RlbVNlcnZpY2VNYW5hZ2VyLnN0YXJ0U2VydmljZUlmRXhpc3RzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaS5wMnAuV2lmaVAycFNlcnZpY2UiKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgICAgICAgICByZXBvcnRXdGYoInN0YXJ0aW5nIFdpLUZpIFAycFNlcnZpY2UiLCBlKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgU2xvZy5pKFRBRywgIldpLUZpIFNlcnZpY2UiKTsKLSAgICAgICAgICAgICAgICAgICAgd2lmaSA9IG5ldyBXaWZpU2VydmljZShjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgU2VydmljZU1hbmFnZXIuYWRkU2VydmljZShDb250ZXh0LldJRklfU0VSVklDRSwgd2lmaSk7CisgICAgICAgICAgICAgICAgICAgIG1TeXN0ZW1TZXJ2aWNlTWFuYWdlci5zdGFydFNlcnZpY2VJZkV4aXN0cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuc2VydmVyLndpZmkuV2lmaVNlcnZpY2UiKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgICAgICAgICByZXBvcnRXdGYoInN0YXJ0aW5nIFdpLUZpIFNlcnZpY2UiLCBlKTsKICAgICAgICAgICAgICAgICB9CkBAIC02MzAsOSArNjI2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgU2VydmljZU1hbmFnZXIuYWRkU2VydmljZShDb250ZXh0LkNPTk5FQ1RJVklUWV9TRVJWSUNFLCBjb25uZWN0aXZpdHkpOwogICAgICAgICAgICAgICAgICAgICBuZXR3b3JrU3RhdHMuYmluZENvbm5lY3Rpdml0eU1hbmFnZXIoY29ubmVjdGl2aXR5KTsKICAgICAgICAgICAgICAgICAgICAgbmV0d29ya1BvbGljeS5iaW5kQ29ubmVjdGl2aXR5TWFuYWdlcihjb25uZWN0aXZpdHkpOwotCi0gICAgICAgICAgICAgICAgICAgIHdpZmlQMnAuY29ubmVjdGl2aXR5U2VydmljZVJlYWR5KCk7Ci0gICAgICAgICAgICAgICAgICAgIHdpZmkuY2hlY2tBbmRTdGFydFdpZmkoKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgICAgICAgICByZXBvcnRXdGYoInN0YXJ0aW5nIENvbm5lY3Rpdml0eSBTZXJ2aWNlIiwgZSk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9UZXh0U2VydmljZXNNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9UZXh0U2VydmljZXNNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IDA5NjQ3NjcuLmQ0YzQzNmYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvVGV4dFNlcnZpY2VzTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1RleHRTZXJ2aWNlc01hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTMzLDcgKzMzLDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSVBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNlcnZpY2VJbmZvOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9VcGRhdGVMb2NrU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9VcGRhdGVMb2NrU2VydmljZS5qYXZhCmluZGV4IDBmNzc4Y2QuLjdmMzM5NzMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvVXBkYXRlTG9ja1NlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1VwZGF0ZUxvY2tTZXJ2aWNlLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JVXBkYXRlTG9jazsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQub3MuVG9rZW5XYXRjaGVyOwogaW1wb3J0IGFuZHJvaWQub3MuVXBkYXRlTG9jazsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IDc1ZWE4NTMuLjc3ZmZlY2EgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0xMzMzLDcgKzEzMzMsNyBAQAogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGtnID0gYnVuZGxlLmdldFN0cmluZygicGtnIik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWFzb24gPSBidW5kbGUuZ2V0U3RyaW5nKCJyZWFzb24iKTsKICAgICAgICAgICAgICAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChwa2csIGFwcGlkLCByZXN0YXJ0LCBmYWxzZSwgdHJ1ZSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5VU0VSX0FMTCwgcmVhc29uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgVXNlckhhbmRsZS5VU0VSX0FMTCwgcmVhc29uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBGSU5BTElaRV9QRU5ESU5HX0lOVEVOVF9NU0c6IHsKQEAgLTQ0NDksNyArNDQ0OSw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1aWQsIFN0cmluZyByZWFzb24pIHsKICAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChwYWNrYWdlTmFtZSwgVXNlckhhbmRsZS5nZXRBcHBJZCh1aWQpLCBmYWxzZSwKLSAgICAgICAgICAgICAgICBmYWxzZSwgdHJ1ZSwgZmFsc2UsIFVzZXJIYW5kbGUuZ2V0VXNlcklkKHVpZCksIHJlYXNvbik7CisgICAgICAgICAgICAgICAgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgVXNlckhhbmRsZS5nZXRVc2VySWQodWlkKSwgcmVhc29uKTsKICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9QQUNLQUdFX1JFU1RBUlRFRCwKICAgICAgICAgICAgICAgICBVcmkuZnJvbVBhcnRzKCJwYWNrYWdlIiwgcGFja2FnZU5hbWUsIG51bGwpKTsKICAgICAgICAgaWYgKCFtUHJvY2Vzc2VzUmVhZHkpIHsKQEAgLTQ0NjUsNyArNDQ2NSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGZvcmNlU3RvcFVzZXJMb2NrZWQoaW50IHVzZXJJZCwgU3RyaW5nIHJlYXNvbikgewotICAgICAgICBmb3JjZVN0b3BQYWNrYWdlTG9ja2VkKG51bGwsIC0xLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB1c2VySWQsIHJlYXNvbik7CisgICAgICAgIGZvcmNlU3RvcFBhY2thZ2VMb2NrZWQobnVsbCwgLTEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB1c2VySWQsIHJlYXNvbik7CiAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fVVNFUl9TVE9QUEVEKTsKICAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWQogICAgICAgICAgICAgICAgIHwgSW50ZW50LkZMQUdfUkVDRUlWRVJfRk9SRUdST1VORCk7CkBAIC00NTUwLDcgKzQ1NTAsNyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGZvcmNlU3RvcFBhY2thZ2VMb2NrZWQoU3RyaW5nIG5hbWUsIGludCBhcHBJZCwKICAgICAgICAgICAgIGJvb2xlYW4gY2FsbGVyV2lsbFJlc3RhcnQsIGJvb2xlYW4gcHVyZ2VDYWNoZSwgYm9vbGVhbiBkb2l0LAotICAgICAgICAgICAgYm9vbGVhbiBldmVuUGVyc2lzdGVudCwgaW50IHVzZXJJZCwgU3RyaW5nIHJlYXNvbikgeworICAgICAgICAgICAgYm9vbGVhbiBldmVuUGVyc2lzdGVudCwgYm9vbGVhbiB1bmluc3RhbGxpbmcsIGludCB1c2VySWQsIFN0cmluZyByZWFzb24pIHsKICAgICAgICAgaW50IGk7CiAgICAgICAgIGludCBOOwogCkBAIC00NjQyLDcgKzQ2NDIsNyBAQAogICAgICAgICAvLyBSZW1vdmUgdHJhbnNpZW50IHBlcm1pc3Npb25zIGdyYW50ZWQgZnJvbS90byB0aGlzIHBhY2thZ2UvdXNlcgogICAgICAgICByZW1vdmVVcmlQZXJtaXNzaW9uc0ZvclBhY2thZ2VMb2NrZWQobmFtZSwgdXNlcklkLCBmYWxzZSk7CiAKLSAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgeworICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IHVuaW5zdGFsbGluZykgewogICAgICAgICAgICAgLy8gUmVtb3ZlIHBlbmRpbmcgaW50ZW50cy4gIEZvciBub3cgd2Ugb25seSBkbyB0aGlzIHdoZW4gZm9yY2UKICAgICAgICAgICAgIC8vIHN0b3BwaW5nIHVzZXJzLCBiZWNhdXNlIHdlIGhhdmUgc29tZSBwcm9ibGVtcyB3aGVuIGRvaW5nIHRoaXMKICAgICAgICAgICAgIC8vIGZvciBwYWNrYWdlcyAtLSBhcHAgd2lkZ2V0cyBhcmUgbm90IGN1cnJlbnRseSBjbGVhbmVkIHVwIGZvcgpAQCAtNTA4Nyw3ICs1MDg3LDcgQEAKICAgICAgICAgICAgICAgICBpZiAocGtncyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIHBrZyA6IHBrZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQWN0aXZpdHlNYW5hZ2VyU2VydmljZS50aGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmNlU3RvcFBhY2thZ2VMb2NrZWQocGtnLCAtMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmNlU3RvcFBhY2thZ2VMb2NrZWQocGtnLCAtMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbmlzaGVkIGJvb3RpbmciKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHRDb2RlKEFjdGl2aXR5LlJFU1VMVF9PSyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTgzNTgsNyArODM1OCw3IEBACiAgICAgICAgICAgICAgICAgbURlYnVnVHJhbnNpZW50ID0gIXBlcnNpc3RlbnQ7CiAgICAgICAgICAgICAgICAgaWYgKHBhY2thZ2VOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChwYWNrYWdlTmFtZSwgLTEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLlVTRVJfQUxMLCAic2V0IGRlYnVnIGFwcCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBVc2VySGFuZGxlLlVTRVJfQUxMLCAic2V0IGRlYnVnIGFwcCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTEzMjgzLDcgKzEzMjgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsaXN0W10gPSBpbnRlbnQuZ2V0U3RyaW5nQXJyYXlFeHRyYShJbnRlbnQuRVhUUkFfQ0hBTkdFRF9QQUNLQUdFX0xJU1QpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCAmJiAobGlzdC5sZW5ndGggPiAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIHBrZyA6IGxpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChwa2csIC0xLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHVzZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChwa2csIC0xLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB1c2VySWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UgdW5tb3VudCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUGFja2FnZUJyb2FkY2FzdExvY2tlZCgKQEAgLTEzMjk1LDEwICsxMzI5NSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCAmJiAoc3NwPWRhdGEuZ2V0U2NoZW1lU3BlY2lmaWNQYXJ0KCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJlbW92ZWQgPSBJbnRlbnQuQUNUSU9OX1BBQ0tBR0VfUkVNT1ZFRC5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQuZ2V0QWN0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZnVsbFVuaW5zdGFsbCA9IHJlbW92ZWQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEludGVudC5FWFRSQV9SRVBMQUNJTkcsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVudC5nZXRCb29sZWFuRXh0cmEoSW50ZW50LkVYVFJBX0RPTlRfS0lMTF9BUFAsIGZhbHNlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVN0b3BQYWNrYWdlTG9ja2VkKHNzcCwgVXNlckhhbmRsZS5nZXRBcHBJZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQuZ2V0SW50RXh0cmEoSW50ZW50LkVYVFJBX1VJRCwgLTEpKSwgZmFsc2UsIHRydWUsIHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHVzZXJJZCwgcmVtb3ZlZCA/ICJwa2cgcmVtb3ZlZCIgOiAicGtnIGNoYW5nZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZnVsbFVuaW5zdGFsbCwgdXNlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgPyAicGtnIHJlbW92ZWQiIDogInBrZyBjaGFuZ2VkIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRQYWNrYWdlQnJvYWRjYXN0TG9ja2VkKElBcHBsaWNhdGlvblRocmVhZC5QQUNLQUdFX1JFTU9WRUQsCkBAIC0xMzc3Niw3ICsxMzc3OSw3IEBACiAKICAgICAgICAgICAgIGZpbmFsIGxvbmcgb3JpZ0lkID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgICAgICAvLyBJbnN0cnVtZW50YXRpb24gY2FuIGtpbGwgYW5kIHJlbGF1bmNoIGV2ZW4gcGVyc2lzdGVudCBwcm9jZXNzZXMKLSAgICAgICAgICAgIGZvcmNlU3RvcFBhY2thZ2VMb2NrZWQoaWkudGFyZ2V0UGFja2FnZSwgLTEsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB1c2VySWQsCisgICAgICAgICAgICBmb3JjZVN0b3BQYWNrYWdlTG9ja2VkKGlpLnRhcmdldFBhY2thZ2UsIC0xLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHVzZXJJZCwKICAgICAgICAgICAgICAgICAgICAgInN0YXJ0IGluc3RyIik7CiAgICAgICAgICAgICBQcm9jZXNzUmVjb3JkIGFwcCA9IGFkZEFwcExvY2tlZChhaSwgZmFsc2UpOwogICAgICAgICAgICAgYXBwLmluc3RydW1lbnRhdGlvbkNsYXNzID0gY2xhc3NOYW1lOwpAQCAtMTM4NDQsNyArMTM4NDcsNyBAQAogICAgICAgICBhcHAuaW5zdHJ1bWVudGF0aW9uUHJvZmlsZUZpbGUgPSBudWxsOwogICAgICAgICBhcHAuaW5zdHJ1bWVudGF0aW9uQXJndW1lbnRzID0gbnVsbDsKIAotICAgICAgICBmb3JjZVN0b3BQYWNrYWdlTG9ja2VkKGFwcC5pbmZvLnBhY2thZ2VOYW1lLCAtMSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBhcHAudXNlcklkLAorICAgICAgICBmb3JjZVN0b3BQYWNrYWdlTG9ja2VkKGFwcC5pbmZvLnBhY2thZ2VOYW1lLCAtMSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgYXBwLnVzZXJJZCwKICAgICAgICAgICAgICAgICAiZmluaXNoZWQgaW5zdCIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVJlY29yZC5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVJlY29yZC5qYXZhCmluZGV4IGEyNzI4OGEuLjk4YmIzNTcgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlSZWNvcmQuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5UmVjb3JkLmphdmEKQEAgLTE0NSw2ICsxNDUsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGluSGlzdG9yeTsgIC8vIGFyZSB3ZSBpbiB0aGUgaGlzdG9yeSBzdGFjaz8KICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrU3VwZXJ2aXNvciBtU3RhY2tTdXBlcnZpc29yOworICAgIGJvb2xlYW4gbVN0YXJ0aW5nV2luZG93U2hvd24gPSBmYWxzZTsKICAgICBBY3Rpdml0eUNvbnRhaW5lciBtSW5pdGlhbEFjdGl2aXR5Q29udGFpbmVyOwogCiAgICAgdm9pZCBkdW1wKFByaW50V3JpdGVyIHB3LCBTdHJpbmcgcHJlZml4KSB7CkBAIC03MjcsNiArNzI4LDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBBY3Rpdml0eU9wdGlvbnMgZ2V0T3B0aW9uc0ZvclRhcmdldEFjdGl2aXR5TG9ja2VkKCkgeworICAgICAgICByZXR1cm4gcGVuZGluZ09wdGlvbnMgIT0gbnVsbCA/IHBlbmRpbmdPcHRpb25zLmZvclRhcmdldEFjdGl2aXR5KCkgOiBudWxsOworICAgIH0KKwogICAgIHZvaWQgY2xlYXJPcHRpb25zTG9ja2VkKCkgewogICAgICAgICBpZiAocGVuZGluZ09wdGlvbnMgIT0gbnVsbCkgewogICAgICAgICAgICAgcGVuZGluZ09wdGlvbnMuYWJvcnQoKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlSZXN1bHQuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlSZXN1bHQuamF2YQppbmRleCA2ZDViZGViLi4zOTU5MThlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5UmVzdWx0LmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVJlc3VsdC5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmFwcC5SZXN1bHRJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiAKIC8qKgogICogUGVuZGluZyByZXN1bHQgaW5mb3JtYXRpb24gdG8gc2VuZCBiYWNrIHRvIGFuIGFjdGl2aXR5LgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YWNrLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhY2suamF2YQppbmRleCBkNjg5YTI5Li40ZDg2M2RjIDEwMDc1NQotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhY2suamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhY2suamF2YQpAQCAtMzYsNiArMzYsOCBAQAogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuREVCVUdfU1RBVEVTOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuSE9NRV9TVEFDS19JRDsKIAoraW1wb3J0IGFuZHJvaWQub3MuVHJhY2U7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5CYXR0ZXJ5U3RhdHNJbXBsOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5XYXRjaGRvZzsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5JdGVtTWF0Y2hlcjsKQEAgLTEyMSw4ICsxMjMsNyBAQAogICAgIC8vIGNvbnZlcnRUb1RyYW5zbHVjZW50KCkuCiAgICAgc3RhdGljIGZpbmFsIGxvbmcgVFJBTlNMVUNFTlRfQ09OVkVSU0lPTl9USU1FT1VUID0gMjAwMDsKIAotICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIFNDUkVFTlNIT1RfRk9SQ0VfNTY1ID0gQWN0aXZpdHlNYW5hZ2VyCi0gICAgICAgICAgICAuaXNMb3dSYW1EZXZpY2VTdGF0aWMoKSA/IHRydWUgOiBmYWxzZTsKKyAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBTQ1JFRU5TSE9UX0ZPUkNFXzU2NSA9IEFjdGl2aXR5TWFuYWdlci5pc0xvd1JhbURldmljZVN0YXRpYygpOwogCiAgICAgZW51bSBBY3Rpdml0eVN0YXRlIHsKICAgICAgICAgSU5JVElBTElaSU5HLApAQCAtNDAxLDggKzQwMiw5IEBACiAgICAgICAgIC8vIGJlIHNpbXBsaWZpZWQgb25jZSB3ZSBzdG9wIHN0b3JpbmcgdGFza3Mgd2l0aCBlbXB0eSBtQWN0aXZpdGllcyBsaXN0cy4KICAgICAgICAgZm9yIChpbnQgdGFza05keCA9IG1UYXNrSGlzdG9yeS5zaXplKCkgLSAxOyB0YXNrTmR4ID49IDA7IC0tdGFza05keCkgewogICAgICAgICAgICAgQXJyYXlMaXN0PEFjdGl2aXR5UmVjb3JkPiBhY3Rpdml0aWVzID0gbVRhc2tIaXN0b3J5LmdldCh0YXNrTmR4KS5tQWN0aXZpdGllczsKLSAgICAgICAgICAgIGZvciAoaW50IGFjdGl2aXR5TmR4ID0gYWN0aXZpdGllcy5zaXplKCkgLSAxOyBhY3Rpdml0eU5keCA+PSAwOyAtLWFjdGl2aXR5TmR4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGl2aXRpZXMuZ2V0KGFjdGl2aXR5TmR4KTsKKyAgICAgICAgICAgIGZpbmFsIGludCB0b3BBY3Rpdml0eU5keCA9IGFjdGl2aXRpZXMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIGlmICh0b3BBY3Rpdml0eU5keCA+PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGl2aXRpZXMuZ2V0KHRvcEFjdGl2aXR5TmR4KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTExMDAsNyArMTEwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnNldEFwcFZpc2liaWxpdHkoci5hcHBUb2tlbiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyICE9IHN0YXJ0aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc3RhcnRTcGVjaWZpY0FjdGl2aXR5TG9ja2VkKHIsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc3RhcnRTcGVjaWZpY0FjdGl2aXR5TG9ja2VkKHIsIGZhbHNlLCBmYWxzZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0xMjM3LDYgKzEyMzksMzIgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKiBJZiBhbnkgYWN0aXZpdGllcyBiZWxvdyB0aGUgdG9wIHJ1bm5pbmcgb25lIGFyZSBpbiB0aGUgSU5JVElBTElaSU5HIHN0YXRlIGFuZCB0aGV5IGhhdmUgYQorICAgICAqIHN0YXJ0aW5nIHdpbmRvdyBkaXNwbGF5ZWQgdGhlbiByZW1vdmUgdGhhdCBzdGFydGluZyB3aW5kb3cuIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGFjdGl2aXR5CisgICAgICogaW4gdGhpcyBzdGF0ZSB3aWxsIG5ldmVyIHJlc3VtZWQgaW4gd2hpY2ggY2FzZSB0aGF0IHN0YXJ0aW5nIHdpbmRvdyB3aWxsIGJlIG9ycGhhbmVkLiAqLworICAgIHZvaWQgY2FuY2VsSW5pdGlhbGl6aW5nQWN0aXZpdGllcygpIHsKKyAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgdG9wQWN0aXZpdHkgPSB0b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQobnVsbCk7CisgICAgICAgIGJvb2xlYW4gYWJvdmVUb3AgPSB0cnVlOworICAgICAgICBmb3IgKGludCB0YXNrTmR4ID0gbVRhc2tIaXN0b3J5LnNpemUoKSAtIDE7IHRhc2tOZHggPj0gMDsgLS10YXNrTmR4KSB7CisgICAgICAgICAgICBmaW5hbCBBcnJheUxpc3Q8QWN0aXZpdHlSZWNvcmQ+IGFjdGl2aXRpZXMgPSBtVGFza0hpc3RvcnkuZ2V0KHRhc2tOZHgpLm1BY3Rpdml0aWVzOworICAgICAgICAgICAgZm9yIChpbnQgYWN0aXZpdHlOZHggPSBhY3Rpdml0aWVzLnNpemUoKSAtIDE7IGFjdGl2aXR5TmR4ID49IDA7IC0tYWN0aXZpdHlOZHgpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCByID0gYWN0aXZpdGllcy5nZXQoYWN0aXZpdHlOZHgpOworICAgICAgICAgICAgICAgIGlmIChhYm92ZVRvcCkgeworICAgICAgICAgICAgICAgICAgICBpZiAociA9PSB0b3BBY3Rpdml0eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWJvdmVUb3AgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoci5zdGF0ZSA9PSBBY3Rpdml0eVN0YXRlLklOSVRJQUxJWklORyAmJiByLm1TdGFydGluZ1dpbmRvd1Nob3duKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19WSVNCSUxJVFkpIFNsb2cudyhUQUcsICJGb3VuZCBvcnBoYW5lZCBzdGFydGluZyB3aW5kb3cgIiArIHIpOworICAgICAgICAgICAgICAgICAgICByLm1TdGFydGluZ1dpbmRvd1Nob3duID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnJlbW92ZUFwcFN0YXJ0aW5nV2luZG93KHIuYXBwVG9rZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIEVuc3VyZSB0aGF0IHRoZSB0b3AgYWN0aXZpdHkgaW4gdGhlIHN0YWNrIGlzIHJlc3VtZWQuCiAgICAgICoKQEAgLTEyNTMsNiArMTI4MSw4IEBACiAgICAgZmluYWwgYm9vbGVhbiByZXN1bWVUb3BBY3Rpdml0eUxvY2tlZChBY3Rpdml0eVJlY29yZCBwcmV2LCBCdW5kbGUgb3B0aW9ucykgewogICAgICAgICBpZiAoQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5ERUJVR19MT0NLU0NSRUVOKSBtU2VydmljZS5sb2dMb2NrU2NyZWVuKCIiKTsKIAorICAgICAgICBjYW5jZWxJbml0aWFsaXppbmdBY3Rpdml0aWVzKCk7CisKICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgYWN0aXZpdHkgdGhhdCBpcyBub3QgZmluaXNoaW5nLgogICAgICAgICBBY3Rpdml0eVJlY29yZCBuZXh0ID0gdG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKG51bGwpOwogCkBAIC0xNDk4LDcgKzE1MjgsMTMgQEAKICAgICAgICAgICAgICAgICBtV2luZG93TWFuYWdlci5wcmVwYXJlQXBwVHJhbnNpdGlvbihBcHBUcmFuc2l0aW9uLlRSQU5TSVRfQUNUSVZJVFlfT1BFTiwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgQnVuZGxlIHJlc3VtZUFuaW1PcHRpb25zID0gbnVsbDsKICAgICAgICAgaWYgKGFuaW0pIHsKKyAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucyBvcHRzID0gbmV4dC5nZXRPcHRpb25zRm9yVGFyZ2V0QWN0aXZpdHlMb2NrZWQoKTsKKyAgICAgICAgICAgIGlmIChvcHRzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXN1bWVBbmltT3B0aW9ucyA9IG9wdHMudG9CdW5kbGUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5leHQuYXBwbHlPcHRpb25zTG9ja2VkKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBuZXh0LmNsZWFyT3B0aW9uc0xvY2tlZCgpOwpAQCAtMTU5MSw3ICsxNjI3LDcgQEAKICAgICAgICAgICAgICAgICBuZXh0LmFwcC5wZW5kaW5nVWlDbGVhbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgbmV4dC5hcHAuZm9yY2VQcm9jZXNzU3RhdGVVcFRvKEFjdGl2aXR5TWFuYWdlci5QUk9DRVNTX1NUQVRFX1RPUCk7CiAgICAgICAgICAgICAgICAgbmV4dC5hcHAudGhyZWFkLnNjaGVkdWxlUmVzdW1lQWN0aXZpdHkobmV4dC5hcHBUb2tlbiwgbmV4dC5hcHAucmVwUHJvY1N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2UuaXNOZXh0VHJhbnNpdGlvbkZvcndhcmQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZS5pc05leHRUcmFuc2l0aW9uRm9yd2FyZCgpLCByZXN1bWVBbmltT3B0aW9ucyk7CiAKICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLmNoZWNrUmVhZHlGb3JTbGVlcExvY2tlZCgpOwogCkBAIC0xNjE1LDcgKzE2NTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQubm9uTG9jYWxpemVkTGFiZWwsIG5leHQubGFiZWxSZXMsIG5leHQuaWNvbiwgbmV4dC5sb2dvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQud2luZG93RmxhZ3MsIG51bGwsIHRydWUpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0U3BlY2lmaWNBY3Rpdml0eUxvY2tlZChuZXh0LCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5zdGFydFNwZWNpZmljQWN0aXZpdHlMb2NrZWQobmV4dCwgdHJ1ZSwgZmFsc2UsIHJlc3VtZUFuaW1PcHRpb25zKTsKICAgICAgICAgICAgICAgICBpZiAoREVCVUdfU1RBQ0spIG1TdGFja1N1cGVydmlzb3IudmFsaWRhdGVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xNjUzLDcgKzE2ODksNyBAQAogICAgICAgICAgICAgICAgIGlmIChERUJVR19TV0lUQ0gpIFNsb2cudihUQUcsICJSZXN0YXJ0aW5nOiAiICsgbmV4dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoREVCVUdfU1RBVEVTKSBTbG9nLmQoVEFHLCAicmVzdW1lVG9wQWN0aXZpdHlMb2NrZWQ6IFJlc3RhcnRpbmcgIiArIG5leHQpOwotICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5zdGFydFNwZWNpZmljQWN0aXZpdHlMb2NrZWQobmV4dCwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0U3BlY2lmaWNBY3Rpdml0eUxvY2tlZChuZXh0LCB0cnVlLCB0cnVlLCByZXN1bWVBbmltT3B0aW9ucyk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoREVCVUdfU1RBQ0spIG1TdGFja1N1cGVydmlzb3IudmFsaWRhdGVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CkBAIC0xODE2LDYgKzE4NTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmluZm8uYXBwbGljYXRpb25JbmZvKSwgci5ub25Mb2NhbGl6ZWRMYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHIubGFiZWxSZXMsIHIuaWNvbiwgci5sb2dvLCByLndpbmRvd0ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJldiAhPSBudWxsID8gcHJldi5hcHBUb2tlbiA6IG51bGwsIHNob3dTdGFydGluZ0ljb24pOworICAgICAgICAgICAgICAgIHIubVN0YXJ0aW5nV2luZG93U2hvd24gPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgYWN0aXZpdHksIGRvbid0IGRvIGFueSBmYW5jeSBhbmltYXRpb25zLApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5qYXZhCmluZGV4IGMzMTY2OWQuLjZjMjEyOGIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhY2tTdXBlcnZpc29yLmphdmEKQEAgLTM5NCw3ICszOTQsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoaHIuYXBwID09IG51bGwgJiYgYXBwLnVpZCA9PSBoci5pbmZvLmFwcGxpY2F0aW9uSW5mby51aWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcm9jZXNzTmFtZS5lcXVhbHMoaHIucHJvY2Vzc05hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFsU3RhcnRBY3Rpdml0eUxvY2tlZChociwgYXBwLCB0cnVlLCB0cnVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFsU3RhcnRBY3Rpdml0eUxvY2tlZChociwgYXBwLCB0cnVlLCB0cnVlLCBudWxsKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CkBAIC05MDQsNyArOTA0LDcgQEAKICAgICB9CiAKICAgICBmaW5hbCBib29sZWFuIHJlYWxTdGFydEFjdGl2aXR5TG9ja2VkKEFjdGl2aXR5UmVjb3JkIHIsCi0gICAgICAgICAgICBQcm9jZXNzUmVjb3JkIGFwcCwgYm9vbGVhbiBhbmRSZXN1bWUsIGJvb2xlYW4gY2hlY2tDb25maWcpCisgICAgICAgICAgICBQcm9jZXNzUmVjb3JkIGFwcCwgYm9vbGVhbiBhbmRSZXN1bWUsIGJvb2xlYW4gY2hlY2tDb25maWcsIEJ1bmRsZSByZXN1bWVBcmdzKQogICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgci5zdGFydEZyZWV6aW5nU2NyZWVuTG9ja2VkKGFwcCwgMCk7CkBAIC05OTYsMTMgKzk5NiwxNCBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBhcHAuZm9yY2VQcm9jZXNzU3RhdGVVcFRvKEFjdGl2aXR5TWFuYWdlci5QUk9DRVNTX1NUQVRFX1RPUCk7CiAgICAgICAgICAgICBhcHAudGhyZWFkLnNjaGVkdWxlTGF1bmNoQWN0aXZpdHkobmV3IEludGVudChyLmludGVudCksIHIuYXBwVG9rZW4sCiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKHIpLCByLmluZm8sCiAgICAgICAgICAgICAgICAgICAgIG5ldyBDb25maWd1cmF0aW9uKG1TZXJ2aWNlLm1Db25maWd1cmF0aW9uKSwgci5jb21wYXQsCiAgICAgICAgICAgICAgICAgICAgIGFwcC5yZXBQcm9jU3RhdGUsIHIuaWNpY2xlLCByZXN1bHRzLCBuZXdJbnRlbnRzLCAhYW5kUmVzdW1lLAogICAgICAgICAgICAgICAgICAgICBtU2VydmljZS5pc05leHRUcmFuc2l0aW9uRm9yd2FyZCgpLCBwcm9maWxlRmlsZSwgcHJvZmlsZUZkLAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlQXV0b1N0b3ApOworICAgICAgICAgICAgICAgICAgICBwcm9maWxlQXV0b1N0b3AsIHJlc3VtZUFyZ3MpOwogCiAgICAgICAgICAgICBpZiAoKGFwcC5pbmZvLmZsYWdzJkFwcGxpY2F0aW9uSW5mby5GTEFHX0NBTlRfU0FWRV9TVEFURSkgIT0gMCkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IGJlIGEgaGVhdnktd2VpZ2h0IHByb2Nlc3MhICBOb3RlIHRoYXQgdGhlIHBhY2thZ2UKQEAgLTEwNzYsNyArMTA3Nyw3IEBACiAgICAgfQogCiAgICAgdm9pZCBzdGFydFNwZWNpZmljQWN0aXZpdHlMb2NrZWQoQWN0aXZpdHlSZWNvcmQgciwKLSAgICAgICAgICAgIGJvb2xlYW4gYW5kUmVzdW1lLCBib29sZWFuIGNoZWNrQ29uZmlnKSB7CisgICAgICAgICAgICBib29sZWFuIGFuZFJlc3VtZSwgYm9vbGVhbiBjaGVja0NvbmZpZywgQnVuZGxlIHJlc3VtZUFyZ3MpIHsKICAgICAgICAgLy8gSXMgdGhpcyBhY3Rpdml0eSdzIGFwcGxpY2F0aW9uIGFscmVhZHkgcnVubmluZz8KICAgICAgICAgUHJvY2Vzc1JlY29yZCBhcHAgPSBtU2VydmljZS5nZXRQcm9jZXNzUmVjb3JkTG9ja2VkKHIucHJvY2Vzc05hbWUsCiAgICAgICAgICAgICAgICAgci5pbmZvLmFwcGxpY2F0aW9uSW5mby51aWQsIHRydWUpOwpAQCAtMTA5Myw3ICsxMDk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gc2VwYXJhdGUgYXBrIGluIHRoZSBwcm9jZXNzLgogICAgICAgICAgICAgICAgICAgICBhcHAuYWRkUGFja2FnZShyLmluZm8ucGFja2FnZU5hbWUsIG1TZXJ2aWNlLm1Qcm9jZXNzU3RhdHMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZWFsU3RhcnRBY3Rpdml0eUxvY2tlZChyLCBhcHAsIGFuZFJlc3VtZSwgY2hlY2tDb25maWcpOworICAgICAgICAgICAgICAgIHJlYWxTdGFydEFjdGl2aXR5TG9ja2VkKHIsIGFwcCwgYW5kUmVzdW1lLCBjaGVja0NvbmZpZywgcmVzdW1lQXJncyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiRXhjZXB0aW9uIHdoZW4gc3RhcnRpbmcgYWN0aXZpdHkgIgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9CYXR0ZXJ5U3RhdHNTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0JhdHRlcnlTdGF0c1NlcnZpY2UuamF2YQppbmRleCBmZjA2NTEzLi5kMmRmYjBkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0JhdHRlcnlTdGF0c1NlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0JhdHRlcnlTdGF0c1NlcnZpY2UuamF2YQpAQCAtNTY5LDExICs1NjksMTEgQEAKICAgICAgICAgaWYgKGlzQ2hlY2tpbikgewogICAgICAgICAgICAgTGlzdDxBcHBsaWNhdGlvbkluZm8+IGFwcHMgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldEluc3RhbGxlZEFwcGxpY2F0aW9ucygwKTsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRzKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRzLmR1bXBDaGVja2luTG9ja2VkKHB3LCBhcHBzLCBpc1VucGx1Z2dlZE9ubHksIGluY2x1ZGVIaXN0b3J5KTsKKyAgICAgICAgICAgICAgICBtU3RhdHMuZHVtcENoZWNraW5Mb2NrZWQobUNvbnRleHQsIHB3LCBhcHBzLCBpc1VucGx1Z2dlZE9ubHksIGluY2x1ZGVIaXN0b3J5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRzKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRzLmR1bXBMb2NrZWQocHcsIGlzVW5wbHVnZ2VkT25seSwgcmVxVWlkKTsKKyAgICAgICAgICAgICAgICBtU3RhdHMuZHVtcExvY2tlZChtQ29udGV4dCwgcHcsIGlzVW5wbHVnZ2VkT25seSwgcmVxVWlkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQnJvYWRjYXN0UXVldWUuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQnJvYWRjYXN0UXVldWUuamF2YQppbmRleCBhZWY5ZTVjLi5iMTVmYTVkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0Jyb2FkY2FzdFF1ZXVlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Ccm9hZGNhc3RRdWV1ZS5qYXZhCkBAIC0yNyw3ICsyNyw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklJbnRlbnRSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0NvbnRlbnRQcm92aWRlclJlY29yZC5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Db250ZW50UHJvdmlkZXJSZWNvcmQuamF2YQppbmRleCA2NDZiN2QyLi5mZjIyNzY0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0NvbnRlbnRQcm92aWRlclJlY29yZC5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQ29udGVudFByb3ZpZGVyUmVjb3JkLmphdmEKQEAgLTMxLDcgKzMxLDYgQEAKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiAKIGZpbmFsIGNsYXNzIENvbnRlbnRQcm92aWRlclJlY29yZCB7CiAgICAgZmluYWwgQWN0aXZpdHlNYW5hZ2VyU2VydmljZSBzZXJ2aWNlOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9JbnRlbnRCaW5kUmVjb3JkLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0ludGVudEJpbmRSZWNvcmQuamF2YQppbmRleCAyMWNmMjY2Li5iYTYwMTBhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0ludGVudEJpbmRSZWNvcmQuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0ludGVudEJpbmRSZWNvcmQuamF2YQpAQCAtMjIsOCArMjIsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKIAogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogCiAvKioKICAqIEEgcGFydGljdWxhciBJbnRlbnQgdGhhdCBoYXMgYmVlbiBib3VuZCB0byBhIFNlcnZpY2UuCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1Byb2Nlc3NMaXN0LmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1Byb2Nlc3NMaXN0LmphdmEKaW5kZXggZjU5MjBjOC4uNzU1YTIzNzIyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1Byb2Nlc3NMaXN0LmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Qcm9jZXNzTGlzdC5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLmFtOwogCi1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUHJvY2Vzc1N0YXRzU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Qcm9jZXNzU3RhdHNTZXJ2aWNlLmphdmEKaW5kZXggZTA1ZmNkYS4uNGE0NWFhYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Qcm9jZXNzU3RhdHNTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Qcm9jZXNzU3RhdHNTZXJ2aWNlLmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIuYW07CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwpAQCAtMjUsNyArMjMsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0b21pY0ZpbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1JlY2VpdmVyTGlzdC5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9SZWNlaXZlckxpc3QuamF2YQppbmRleCBmYThjMWRmLi42YWRlNzM2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1JlY2VpdmVyTGlzdC5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUmVjZWl2ZXJMaXN0LmphdmEKQEAgLTE3LDExICsxNyw4IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5hbTsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JSW50ZW50UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC51dGlsLlByaW50V3JpdGVyUHJpbnRlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUHJpbnRlcjsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Vc2FnZVN0YXRzU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Vc2FnZVN0YXRzU2VydmljZS5qYXZhCmluZGV4IDA5Y2IzNDQuLjU4N2Y5NDkgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vVXNhZ2VTdGF0c1NlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1VzYWdlU3RhdHNTZXJ2aWNlLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSVBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwpAQCAtNTQsNyArNTMsNiBAQAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jbGlwYm9hcmQvQ2xpcGJvYXJkU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jbGlwYm9hcmQvQ2xpcGJvYXJkU2VydmljZS5qYXZhCmluZGV4IDZhYTU5NmQuLmY0N2Q2NmQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY2xpcGJvYXJkL0NsaXBib2FyZFNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NsaXBib2FyZC9DbGlwYm9hcmRTZXJ2aWNlLmphdmEKQEAgLTMxLDcgKzMxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSVBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwpAQCAtNDAsNyArMzksNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlQ2FsbGJhY2tMaXN0OwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuUGFpcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29ubmVjdGl2aXR5L1BhY01hbmFnZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29ubmVjdGl2aXR5L1BhY01hbmFnZXIuamF2YQppbmRleCA3Nzg2ZmU2Li44ODE1ZDBmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9QYWNNYW5hZ2VyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvUGFjTWFuYWdlci5qYXZhCkBAIC0yNCwxNiArMjQsMTMgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQubmV0LlByb3h5OwogaW1wb3J0IGFuZHJvaWQubmV0LlByb3h5UHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvVGV0aGVyaW5nLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9UZXRoZXJpbmcuamF2YQppbmRleCBhZGYxZGZjLi41OTcxNzM3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9UZXRoZXJpbmcuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9UZXRoZXJpbmcuamF2YQpAQCAtMjgsNyArMjgsNiBAQAogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUudXNiLlVzYk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5JQ29ubmVjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5JTmV0d29ya01hbmFnZW1lbnRFdmVudE9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQubmV0LklOZXR3b3JrU3RhdHNTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQubmV0LkludGVyZmFjZUNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5uZXQuTGlua0FkZHJlc3M7CkBAIC01Miw3ICs1MSw2IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZU1hY2hpbmU7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLklvVGhyZWFkOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5uZXQuQmFzZU5ldHdvcmtPYnNlcnZlcjsKLWltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuY29sbGVjdC5MaXN0czsKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29ubmVjdGl2aXR5L1Zwbi5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvVnBuLmphdmEKaW5kZXggMmNhMmNjNS4uZDg3Mzg3ZiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvVnBuLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvVnBuLmphdmEKQEAgLTI5LDcgKzI5LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uVXNlckluZm87CkBAIC02MywxNCArNjIsMTIgQEAKIGltcG9ydCBhbmRyb2lkLnNlY3VyaXR5LktleVN0b3JlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUJvb2xlYW5BcnJheTsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLkd1YXJkZWRCeTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm5ldC5MZWdhY3lWcG5JbmZvOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm5ldC5WcG5Db25maWc7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwubmV0LlZwblByb2ZpbGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5Db25uZWN0aXZpdHlTZXJ2aWNlLlZwbkNhbGxiYWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5uZXQuQmFzZU5ldHdvcmtPYnNlcnZlcjsKIApAQCAtNzgsMTAgKzc1LDggQEAKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEubmV0LkluZXQ0QWRkcmVzczsKLWltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljSW50ZWdlcjsKIAogaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9Db250ZW50U2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L0NvbnRlbnRTZXJ2aWNlLmphdmEKaW5kZXggMDIzYmYyYi4uYzdkMjg3MSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L0NvbnRlbnRTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L0NvbnRlbnRTZXJ2aWNlLmphdmEKQEAgLTE5LDExICsxOSwxMyBAQAogaW1wb3J0IGFuZHJvaWQuTWFuaWZlc3Q7CiBpbXBvcnQgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50OwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JQ29udGVudFNlcnZpY2U7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklTeW5jU3RhdHVzT2JzZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlBlcmlvZGljU3luYzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlN5bmNBZGFwdGVyVHlwZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU3luY0luZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0OwpAQCAtNDEsNyArNDMsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUludEFycmF5OwogCkBAIC0zMTUsNyArMzE2LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RTeW5jKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgQnVuZGxlIGV4dHJhcykgewogICAgICAgICBDb250ZW50UmVzb2x2ZXIudmFsaWRhdGVTeW5jRXh0cmFzQnVuZGxlKGV4dHJhcyk7CiAgICAgICAgIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKTsKQEAgLTM0NSw0NiArMzQ1LDU2IEBACiAgICAgICogRGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0LCB3ZSBlbnF1ZXVlIHRvIHN1aXQgaW4gdGhlIFN5bmNNYW5hZ2VyLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdC4gVmFsaWRhdGlvbiBvZiB0aGlzIG9iamVjdCBpcyBkb25lIGJ5IGl0cyBidWlsZGVyLgogICAgICAqLwotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHN5bmMoU3luY1JlcXVlc3QgcmVxdWVzdCkgewotICAgICAgICBCdW5kbGUgZXh0cmFzID0gcmVxdWVzdC5nZXRCdW5kbGUoKTsKLSAgICAgICAgbG9uZyBmbGV4dGltZSA9IHJlcXVlc3QuZ2V0U3luY0ZsZXhUaW1lKCk7Ci0gICAgICAgIGxvbmcgcnVuQXRUaW1lID0gcmVxdWVzdC5nZXRTeW5jUnVuVGltZSgpOwogICAgICAgICBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCk7Ci0gICAgICAgIGludCB1SWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwotCisgICAgICAgIGludCBjYWxsZXJVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwogICAgICAgICAvLyBUaGlzIG1ha2VzIGl0IHNvIHRoYXQgZnV0dXJlIHBlcm1pc3Npb24gY2hlY2tzIHdpbGwgYmUgaW4gdGhlIGNvbnRleHQgb2YgdGhpcwogICAgICAgICAvLyBwcm9jZXNzIHJhdGhlciB0aGFuIHRoZSBjYWxsZXIncyBwcm9jZXNzLiBXZSB3aWxsIHJlc3RvcmUgdGhpcyBiZWZvcmUgcmV0dXJuaW5nLgogICAgICAgICBsb25nIGlkZW50aXR5VG9rZW4gPSBjbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3luY01hbmFnZXIgc3luY01hbmFnZXIgPSBnZXRTeW5jTWFuYWdlcigpOwotICAgICAgICAgICAgaWYgKHN5bmNNYW5hZ2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5oYXNBdXRob3JpdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBTeW5jIEFkYXB0ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzeXN0ZW0gLSBvbGQgQVBJLgotICAgICAgICAgICAgICAgICAgICBmaW5hbCAgQWNjb3VudCBhY2NvdW50ID0gcmVxdWVzdC5nZXRBY2NvdW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwcm92aWRlciA9IHJlcXVlc3QuZ2V0UHJvdmlkZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QuaXNQZXJpb2RpYygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0LnBlcm1pc3Npb24uV1JJVEVfU1lOQ19TRVRUSU5HUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIHBlcm1pc3Npb24gdG8gd3JpdGUgdGhlIHN5bmMgc2V0dGluZ3MiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5BdFRpbWUgPCA2MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJSZXF1ZXN0ZWQgcG9sbCBmcmVxdWVuY3kgb2YgIiArIHJ1bkF0VGltZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHNlY29uZHMgYmVpbmcgcm91bmRlZCB1cCB0byA2MCBzZWNvbmRzLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkF0VGltZSA9IDYwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmNUb0FkZCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgcHJvdmlkZXIsIGV4dHJhcywgcnVuQXRUaW1lLCBmbGV4dGltZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnZXRTeW5jTWFuYWdlcigpLmdldFN5bmNTdG9yYWdlRW5naW5lKCkuYWRkUGVyaW9kaWNTeW5jKHN5bmNUb0FkZCwgdXNlcklkKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYmVmb3JlUnVudGltZU1pbGxpcyA9IChmbGV4dGltZSkgKiAxMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBydW50aW1lTWlsbGlzID0gcnVuQXRUaW1lICogMTAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNNYW5hZ2VyLnNjaGVkdWxlU3luYygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudCwgdXNlcklkLCB1SWQsIHByb3ZpZGVyLCBleHRyYXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZVJ1bnRpbWVNaWxsaXMsIHJ1bnRpbWVNaWxsaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIG9ubHlUaG9zZVdpdGhVbmtub3duU3luY2FibGVTdGF0ZSAqLyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzeW5jTWFuYWdlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBCdW5kbGUgZXh0cmFzID0gcmVxdWVzdC5nZXRCdW5kbGUoKTsKKyAgICAgICAgICAgIGxvbmcgZmxleHRpbWUgPSByZXF1ZXN0LmdldFN5bmNGbGV4VGltZSgpOworICAgICAgICAgICAgbG9uZyBydW5BdFRpbWUgPSByZXF1ZXN0LmdldFN5bmNSdW5UaW1lKCk7CisgICAgICAgICAgICBpZiAocmVxdWVzdC5pc1BlcmlvZGljKCkpIHsKKyAgICAgICAgICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oCisgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5wZXJtaXNzaW9uLldSSVRFX1NZTkNfU0VUVElOR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAibm8gcGVybWlzc2lvbiB0byB3cml0ZSB0aGUgc3luYyBzZXR0aW5ncyIpOworICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm87CisgICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0Lmhhc0F1dGhvcml0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhIHBlcm1pc3Npb25zIGNoZWNraW5nIGZvciBzeW5jIHNlcnZpY2UuCisgICAgICAgICAgICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZUZvclBhY2thZ2UoY2FsbGVyVWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmljZSgpLmdldFBhY2thZ2VOYW1lKCksICJzeW5jIik7CisgICAgICAgICAgICAgICAgICAgIGluZm8gPSBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQocmVxdWVzdC5nZXRTZXJ2aWNlKCksIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiVW5yZWNvZ25pc2VkIHN5bmMgcGFyYW1ldGVycywgZG9pbmcgbm90aGluZy4iKTsKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9IG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmdldEFjY291bnQoKSwgcmVxdWVzdC5nZXRQcm92aWRlcigpLCB1c2VySWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocnVuQXRUaW1lIDwgNjApIHsKKyAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIlJlcXVlc3RlZCBwb2xsIGZyZXF1ZW5jeSBvZiAiICsgcnVuQXRUaW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHNlY29uZHMgYmVpbmcgcm91bmRlZCB1cCB0byA2MCBzZWNvbmRzLiIpOworICAgICAgICAgICAgICAgICAgICBydW5BdFRpbWUgPSA2MDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgcGVyaW9kaWMgc3luYy4KKyAgICAgICAgICAgICAgICBnZXRTeW5jTWFuYWdlcigpLmdldFN5bmNTdG9yYWdlRW5naW5lKCkKKyAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKGluZm8sIHJ1bkF0VGltZSwgZmxleHRpbWUsIGV4dHJhcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvbmcgYmVmb3JlUnVudGltZU1pbGxpcyA9IChmbGV4dGltZSkgKiAxMDAwOworICAgICAgICAgICAgICAgIGxvbmcgcnVudGltZU1pbGxpcyA9IHJ1bkF0VGltZSAqIDEwMDA7CisgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QuaGFzQXV0aG9yaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBzeW5jTWFuYWdlci5zY2hlZHVsZVN5bmMoCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmdldEFjY291bnQoKSwgdXNlcklkLCBjYWxsZXJVaWQsIHJlcXVlc3QuZ2V0UHJvdmlkZXIoKSwgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlUnVudGltZU1pbGxpcywgcnVudGltZU1pbGxpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIG9ubHlUaG9zZVdpdGhVbmtub3duU3luY2FibGVTdGF0ZSAqLyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3luY01hbmFnZXIuc2NoZWR1bGVTeW5jKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmljZSgpLCB1c2VySWQsIGNhbGxlclVpZCwgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZVJ1bnRpbWVNaWxsaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZU1pbGxpcyk7IC8vIEVtcHR5IGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTM5NSwxMSArNDA1LDE0IEBACiAgICAgLyoqCiAgICAgICogQ2xlYXIgYWxsIHNjaGVkdWxlZCBzeW5jIG9wZXJhdGlvbnMgdGhhdCBtYXRjaCB0aGUgdXJpIGFuZCBjYW5jZWwgdGhlIGFjdGl2ZSBzeW5jCiAgICAgICogaWYgdGhleSBtYXRjaCB0aGUgYXV0aG9yaXR5IGFuZCBhY2NvdW50LCBpZiB0aGV5IGFyZSBwcmVzZW50LgotICAgICAqIEBwYXJhbSBhY2NvdW50IGZpbHRlciB0aGUgcGVuZGluZyBhbmQgYWN0aXZlIHN5bmNzIHRvIGNhbmNlbCB1c2luZyB0aGlzIGFjY291bnQKLSAgICAgKiBAcGFyYW0gYXV0aG9yaXR5IGZpbHRlciB0aGUgcGVuZGluZyBhbmQgYWN0aXZlIHN5bmNzIHRvIGNhbmNlbCB1c2luZyB0aGlzIGF1dGhvcml0eQorICAgICAqCisgICAgICogQHBhcmFtIGFjY291bnQgZmlsdGVyIHRoZSBwZW5kaW5nIGFuZCBhY3RpdmUgc3luY3MgdG8gY2FuY2VsIHVzaW5nIHRoaXMgYWNjb3VudCwgb3IgbnVsbC4KKyAgICAgKiBAcGFyYW0gYXV0aG9yaXR5IGZpbHRlciB0aGUgcGVuZGluZyBhbmQgYWN0aXZlIHN5bmNzIHRvIGNhbmNlbCB1c2luZyB0aGlzIGF1dGhvcml0eSwgb3IKKyAgICAgKiBudWxsLgorICAgICAqIEBwYXJhbSBjbmFtZSBjYW5jZWwgc3luY3MgcnVubmluZyBvbiB0aGlzIHNlcnZpY2UsIG9yIG51bGwgZm9yIHByb3ZpZGVyL2FjY291bnQuCiAgICAgICovCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2FuY2VsU3luYyhBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpIHsKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxTeW5jKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgQ29tcG9uZW50TmFtZSBjbmFtZSkgewogICAgICAgICBpZiAoYXV0aG9yaXR5ICE9IG51bGwgJiYgYXV0aG9yaXR5Lmxlbmd0aCgpID09IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkF1dGhvcml0eSBtdXN0IGJlIG5vbi1lbXB0eSIpOwogICAgICAgICB9CkBAIC00MTEsMTQgKzQyNCw1NCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3luY01hbmFnZXIgc3luY01hbmFnZXIgPSBnZXRTeW5jTWFuYWdlcigpOwogICAgICAgICAgICAgaWYgKHN5bmNNYW5hZ2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzeW5jTWFuYWdlci5jbGVhclNjaGVkdWxlZFN5bmNPcGVyYXRpb25zKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5KTsKLSAgICAgICAgICAgICAgICBzeW5jTWFuYWdlci5jYW5jZWxBY3RpdmVTeW5jKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5KTsKKyAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvOworICAgICAgICAgICAgICAgIGlmIChjbmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGluZm8gPSBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5LCB1c2VySWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGluZm8gPSBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoY25hbWUsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN5bmNNYW5hZ2VyLmNsZWFyU2NoZWR1bGVkU3luY09wZXJhdGlvbnMoaW5mbyk7CisgICAgICAgICAgICAgICAgc3luY01hbmFnZXIuY2FuY2VsQWN0aXZlU3luYyhpbmZvLCBudWxsIC8qIGFsbCBzeW5jcyBmb3IgdGhpcyBhZGFwdGVyICovKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHlUb2tlbik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxSZXF1ZXN0KFN5bmNSZXF1ZXN0IHJlcXVlc3QpIHsKKyAgICAgICAgU3luY01hbmFnZXIgc3luY01hbmFnZXIgPSBnZXRTeW5jTWFuYWdlcigpOworICAgICAgICBpZiAoc3luY01hbmFnZXIgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCk7CisgICAgICAgIGludCBjYWxsZXJVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOworCisgICAgICAgIGxvbmcgaWRlbnRpdHlUb2tlbiA9IGNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvOworICAgICAgICAgICAgQnVuZGxlIGV4dHJhcyA9IG5ldyBCdW5kbGUocmVxdWVzdC5nZXRCdW5kbGUoKSk7CisgICAgICAgICAgICBpZiAocmVxdWVzdC5oYXNBdXRob3JpdHkoKSkgeworICAgICAgICAgICAgICAgIEFjY291bnQgYWNjb3VudCA9IHJlcXVlc3QuZ2V0QWNjb3VudCgpOworICAgICAgICAgICAgICAgIFN0cmluZyBwcm92aWRlciA9IHJlcXVlc3QuZ2V0UHJvdmlkZXIoKTsKKyAgICAgICAgICAgICAgICBpbmZvID0gbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KGFjY291bnQsIHByb3ZpZGVyLCB1c2VySWQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGFsbG93ZWQgdG8gbWFuaXB1bGF0ZSBzeW5jcyBmb3IgYSBzZXJ2aWNlIHdoaWNoIHlvdSBvd24uCisgICAgICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBzZXJ2aWNlID0gcmVxdWVzdC5nZXRTZXJ2aWNlKCk7CisgICAgICAgICAgICAgICAgdmVyaWZ5U2lnbmF0dXJlRm9yUGFja2FnZShjYWxsZXJVaWQsIHNlcnZpY2UuZ2V0UGFja2FnZU5hbWUoKSwgImNhbmNlbCIpOworICAgICAgICAgICAgICAgIGluZm8gPSBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoc2VydmljZSwgdXNlcklkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LmlzUGVyaW9kaWMoKSkgeworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBwZXJpb2RpYyBzeW5jLgorICAgICAgICAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihNYW5pZmVzdC5wZXJtaXNzaW9uLldSSVRFX1NZTkNfU0VUVElOR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAibm8gcGVybWlzc2lvbiB0byB3cml0ZSB0aGUgc3luYyBzZXR0aW5ncyIpOworICAgICAgICAgICAgICAgIGdldFN5bmNNYW5hZ2VyKCkuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5yZW1vdmVQZXJpb2RpY1N5bmMoaW5mbywgZXh0cmFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENhbmNlbCBhY3RpdmUgc3luY3MgYW5kIGNsZWFyIHBlbmRpbmcgc3luY3MgZnJvbSB0aGUgcXVldWUuCisgICAgICAgICAgICBzeW5jTWFuYWdlci5jYW5jZWxTY2hlZHVsZWRTeW5jT3BlcmF0aW9uKGluZm8sIGV4dHJhcyk7CisgICAgICAgICAgICBzeW5jTWFuYWdlci5jYW5jZWxBY3RpdmVTeW5jKGluZm8sIGV4dHJhcyk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICByZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5VG9rZW4pOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBTeW5jQWRhcHRlcnMgdGhhdCBhcmUga25vd24gdG8gdGhlIHN5c3RlbS4KICAgICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIFN5bmNBZGFwdGVycyB0aGF0IGhhdmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzeXN0ZW0KQEAgLTQ0Nyw4ICs1MDAsOCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3luY01hbmFnZXIgc3luY01hbmFnZXIgPSBnZXRTeW5jTWFuYWdlcigpOwogICAgICAgICAgICAgaWYgKHN5bmNNYW5hZ2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3luY01hbmFnZXIuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5nZXRTeW5jQXV0b21hdGljYWxseSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQsIHVzZXJJZCwgcHJvdmlkZXJOYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3luY01hbmFnZXIuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgLmdldFN5bmNBdXRvbWF0aWNhbGx5KGFjY291bnQsIHVzZXJJZCwgcHJvdmlkZXJOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHlUb2tlbik7CkBAIC00NjksOCArNTIyLDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5bmNNYW5hZ2VyIHN5bmNNYW5hZ2VyID0gZ2V0U3luY01hbmFnZXIoKTsKICAgICAgICAgICAgIGlmIChzeW5jTWFuYWdlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc3luY01hbmFnZXIuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5zZXRTeW5jQXV0b21hdGljYWxseSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQsIHVzZXJJZCwgcHJvdmlkZXJOYW1lLCBzeW5jKTsKKyAgICAgICAgICAgICAgICBzeW5jTWFuYWdlci5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpCisgICAgICAgICAgICAgICAgLnNldFN5bmNBdXRvbWF0aWNhbGx5KGFjY291bnQsIHVzZXJJZCwgcHJvdmlkZXJOYW1lLCBzeW5jKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHlUb2tlbik7CkBAIC00OTYsMjEgKzU0OSwyMiBAQAogICAgICAgICAgICAgICAgICAgICArICIgc2Vjb25kcyBiZWluZyByb3VuZGVkIHVwIHRvIDYwIHNlY29uZHMuIik7CiAgICAgICAgICAgICBwb2xsRnJlcXVlbmN5ID0gNjA7CiAgICAgICAgIH0KKyAgICAgICAgbG9uZyBkZWZhdWx0RmxleCA9IFN5bmNTdG9yYWdlRW5naW5lLmNhbGN1bGF0ZURlZmF1bHRGbGV4VGltZShwb2xsRnJlcXVlbmN5KTsKIAogICAgICAgICBsb25nIGlkZW50aXR5VG9rZW4gPSBjbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gQWRkIGRlZmF1bHQgZmxleCB0aW1lIHRvIHRoaXMgc3luYy4KLSAgICAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jVG9BZGQgPQotICAgICAgICAgICAgICAgICAgICBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eSwgZXh0cmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxGcmVxdWVuY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuY2FsY3VsYXRlRGVmYXVsdEZsZXhUaW1lKHBvbGxGcmVxdWVuY3kpKTsKLSAgICAgICAgICAgIGdldFN5bmNNYW5hZ2VyKCkuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5hZGRQZXJpb2RpY1N5bmMoc3luY1RvQWRkLCB1c2VySWQpOworICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbyA9CisgICAgICAgICAgICAgICAgICAgIG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChhY2NvdW50LCBhdXRob3JpdHksIHVzZXJJZCk7CisgICAgICAgICAgICBnZXRTeW5jTWFuYWdlcigpLmdldFN5bmNTdG9yYWdlRW5naW5lKCkKKyAgICAgICAgICAgICAgICAudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmMoaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxGcmVxdWVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcyk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICByZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5VG9rZW4pOwogICAgICAgICB9CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlUGVyaW9kaWNTeW5jKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgQnVuZGxlIGV4dHJhcykgewogICAgICAgICBpZiAoYWNjb3VudCA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBY2NvdW50IG11c3Qgbm90IGJlIG51bGwiKTsKQEAgLTUyNCwyNCArNTc4LDE4IEBACiAgICAgICAgIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKTsKICAgICAgICAgbG9uZyBpZGVudGl0eVRva2VuID0gY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jVG9SZW1vdmUgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eSwgZXh0cmFzLAotICAgICAgICAgICAgICAgICAgICAwIC8qIE5vdCByZWFkIGZvciByZW1vdmFsICovLCAwIC8qIE5vdCByZWFkIGZvciByZW1vdmFsICovKTsKLSAgICAgICAgICAgIGdldFN5bmNNYW5hZ2VyKCkuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5yZW1vdmVQZXJpb2RpY1N5bmMoc3luY1RvUmVtb3ZlLCB1c2VySWQpOworICAgICAgICAgICAgZ2V0U3luY01hbmFnZXIoKS5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpCisgICAgICAgICAgICAgICAgLnJlbW92ZVBlcmlvZGljU3luYygKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChhY2NvdW50LCBhdXRob3JpdHksIHVzZXJJZCksCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXMpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgcmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eVRva2VuKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKgotICAgICAqIFRPRE86IEltcGxlbWVudC4KLSAgICAgKiBAcGFyYW0gcmVxdWVzdCBTeW5jIHRvIHJlbW92ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVTeW5jKFN5bmNSZXF1ZXN0IHJlcXVlc3QpIHsKIAotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PFBlcmlvZGljU3luYz4gZ2V0UGVyaW9kaWNTeW5jcyhBY2NvdW50IGFjY291bnQsIFN0cmluZyBwcm92aWRlck5hbWUpIHsKKyAgICBwdWJsaWMgTGlzdDxQZXJpb2RpY1N5bmM+IGdldFBlcmlvZGljU3luY3MoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgcHJvdmlkZXJOYW1lLAorICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBjbmFtZSkgewogICAgICAgICBpZiAoYWNjb3VudCA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBY2NvdW50IG11c3Qgbm90IGJlIG51bGwiKTsKICAgICAgICAgfQpAQCAtNTUxLDExICs1OTksMjAgQEAKICAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKE1hbmlmZXN0LnBlcm1pc3Npb24uUkVBRF9TWU5DX1NFVFRJTkdTLAogICAgICAgICAgICAgICAgICJubyBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIHN5bmMgc2V0dGluZ3MiKTsKIAorICAgICAgICBpbnQgY2FsbGVyVWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKICAgICAgICAgaW50IHVzZXJJZCA9IFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpOwogICAgICAgICBsb25nIGlkZW50aXR5VG9rZW4gPSBjbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIGdldFN5bmNNYW5hZ2VyKCkuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5nZXRQZXJpb2RpY1N5bmNzKAotICAgICAgICAgICAgICAgICAgICBhY2NvdW50LCB1c2VySWQsIHByb3ZpZGVyTmFtZSk7CisgICAgICAgICAgICBpZiAoY25hbWUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBnZXRTeW5jTWFuYWdlcigpLmdldFN5bmNTdG9yYWdlRW5naW5lKCkuZ2V0UGVyaW9kaWNTeW5jcygKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChhY2NvdW50LCBwcm92aWRlck5hbWUsIHVzZXJJZCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChhY2NvdW50ID09IG51bGwgJiYgcHJvdmlkZXJOYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB2ZXJpZnlTaWduYXR1cmVGb3JQYWNrYWdlKGNhbGxlclVpZCwgY25hbWUuZ2V0UGFja2FnZU5hbWUoKSwgImdldFBlcmlvZGljU3luY3MiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3luY01hbmFnZXIoKS5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLmdldFBlcmlvZGljU3luY3MoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoY25hbWUsIHVzZXJJZCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGF1dGhvcml0eSBzcGVjaWZpZWQiKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHlUb2tlbik7CiAgICAgICAgIH0KQEAgLTU3OSw3ICs2MzYsNiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0SXNTeW5jYWJsZShBY2NvdW50IGFjY291bnQsIFN0cmluZyBwcm92aWRlck5hbWUsIGludCBzeW5jYWJsZSkgewogICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkocHJvdmlkZXJOYW1lKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQXV0aG9yaXR5IG11c3Qgbm90IGJlIGVtcHR5Iik7CkBAIC02MDAsNiArNjU2LDQ1IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2aWNlQWN0aXZlKENvbXBvbmVudE5hbWUgY25hbWUsIGJvb2xlYW4gYWN0aXZlKSB7CisgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihNYW5pZmVzdC5wZXJtaXNzaW9uLldSSVRFX1NZTkNfU0VUVElOR1MsCisgICAgICAgICAgICAgICAgIm5vIHBlcm1pc3Npb24gdG8gd3JpdGUgdGhlIHN5bmMgc2V0dGluZ3MiKTsKKyAgICAgICAgdmVyaWZ5U2lnbmF0dXJlRm9yUGFja2FnZShCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCBjbmFtZS5nZXRQYWNrYWdlTmFtZSgpLAorICAgICAgICAgICAgICAgICJzZXRTZXJ2aWNlQWN0aXZlIik7CisKKyAgICAgICAgaW50IHVzZXJJZCA9IFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpOworICAgICAgICBsb25nIGlkZW50aXR5VG9rZW4gPSBjbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgU3luY01hbmFnZXIgc3luY01hbmFnZXIgPSBnZXRTeW5jTWFuYWdlcigpOworICAgICAgICAgICAgaWYgKHN5bmNNYW5hZ2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzeW5jTWFuYWdlci5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLnNldElzVGFyZ2V0U2VydmljZUFjdGl2ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNuYW1lLCB1c2VySWQsIGFjdGl2ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICByZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5VG9rZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNTZXJ2aWNlQWN0aXZlKENvbXBvbmVudE5hbWUgY25hbWUpIHsKKyAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKE1hbmlmZXN0LnBlcm1pc3Npb24uUkVBRF9TWU5DX1NFVFRJTkdTLAorICAgICAgICAgICAgICAgICJubyBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIHN5bmMgc2V0dGluZ3MiKTsKKyAgICAgICAgdmVyaWZ5U2lnbmF0dXJlRm9yUGFja2FnZShCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCBjbmFtZS5nZXRQYWNrYWdlTmFtZSgpLAorICAgICAgICAgICAgICAgICJpc1NlcnZpY2VBY3RpdmUiKTsKKworICAgICAgICBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCk7CisgICAgICAgIGxvbmcgaWRlbnRpdHlUb2tlbiA9IGNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTeW5jTWFuYWdlciBzeW5jTWFuYWdlciA9IGdldFN5bmNNYW5hZ2VyKCk7CisgICAgICAgICAgICBpZiAoc3luY01hbmFnZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBzeW5jTWFuYWdlci5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0SXNUYXJnZXRTZXJ2aWNlQWN0aXZlKGNuYW1lLCB1c2VySWQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgcmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eVRva2VuKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkoKSB7CiAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihNYW5pZmVzdC5wZXJtaXNzaW9uLlJFQURfU1lOQ19TRVRUSU5HUywKQEAgLTYzNSwxNyArNzMwLDI0IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N5bmNBY3RpdmUoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgcHVibGljIGJvb2xlYW4gaXNTeW5jQWN0aXZlKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgQ29tcG9uZW50TmFtZSBjbmFtZSkgewogICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oTWFuaWZlc3QucGVybWlzc2lvbi5SRUFEX1NZTkNfU1RBVFMsCiAgICAgICAgICAgICAgICAgIm5vIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgc3luYyBzdGF0cyIpOwogICAgICAgICBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCk7Ci0KKyAgICAgICAgaW50IGNhbGxpbmdVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwogICAgICAgICBsb25nIGlkZW50aXR5VG9rZW4gPSBjbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3luY01hbmFnZXIgc3luY01hbmFnZXIgPSBnZXRTeW5jTWFuYWdlcigpOwotICAgICAgICAgICAgaWYgKHN5bmNNYW5hZ2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChzeW5jTWFuYWdlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNuYW1lID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gc3luY01hbmFnZXIuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5pc1N5bmNBY3RpdmUoCi0gICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LCB1c2VySWQsIGF1dGhvcml0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5LCB1c2VySWQpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjb3VudCA9PSBudWxsICYmIGF1dGhvcml0eSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdmVyaWZ5U2lnbmF0dXJlRm9yUGFja2FnZShjYWxsaW5nVWlkLCBjbmFtZS5nZXRQYWNrYWdlTmFtZSgpLCAiaXNTeW5jQWN0aXZlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN5bmNNYW5hZ2VyLmdldFN5bmNTdG9yYWdlRW5naW5lKCkuaXNTeW5jQWN0aXZlKAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KGNuYW1lLCB1c2VySWQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHlUb2tlbik7CkBAIC02NjYsNyArNzY4LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBTeW5jU3RhdHVzSW5mbyBnZXRTeW5jU3RhdHVzKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSkgeworICAgIHB1YmxpYyBTeW5jU3RhdHVzSW5mbyBnZXRTeW5jU3RhdHVzKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgQ29tcG9uZW50TmFtZSBjbmFtZSkgewogICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoYXV0aG9yaXR5KSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQXV0aG9yaXR5IG11c3Qgbm90IGJlIGVtcHR5Iik7CiAgICAgICAgIH0KQEAgLTY3NCwzNCArNzc2LDUyIEBACiAgICAgICAgICAgICAgICAgIm5vIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgc3luYyBzdGF0cyIpOwogCiAgICAgICAgIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKTsKKyAgICAgICAgaW50IGNhbGxlclVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CiAgICAgICAgIGxvbmcgaWRlbnRpdHlUb2tlbiA9IGNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeW5jTWFuYWdlciBzeW5jTWFuYWdlciA9IGdldFN5bmNNYW5hZ2VyKCk7Ci0gICAgICAgICAgICBpZiAoc3luY01hbmFnZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBzeW5jTWFuYWdlci5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLmdldFN0YXR1c0J5QWNjb3VudEFuZEF1dGhvcml0eSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5KTsKKyAgICAgICAgICAgIGlmIChzeW5jTWFuYWdlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvOworICAgICAgICAgICAgaWYgKGNuYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpbmZvID0gbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KGFjY291bnQsIGF1dGhvcml0eSwgdXNlcklkKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjb3VudCA9PSBudWxsICYmIGF1dGhvcml0eSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdmVyaWZ5U2lnbmF0dXJlRm9yUGFja2FnZShjYWxsZXJVaWQsIGNuYW1lLmdldFBhY2thZ2VOYW1lKCksICJnZXRTeW5jU3RhdHVzIik7CisgICAgICAgICAgICAgICAgaW5mbyA9IG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChjbmFtZSwgdXNlcklkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTXVzdCBjYWxsIHN5bmMgc3RhdHVzIHdpdGggdmFsaWQgYXV0aG9yaXR5Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3luY01hbmFnZXIuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5nZXRTdGF0dXNCeUF1dGhvcml0eShpbmZvKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHlUb2tlbik7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCi0gICAgcHVibGljIGJvb2xlYW4gaXNTeW5jUGVuZGluZyhBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1N5bmNQZW5kaW5nKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgQ29tcG9uZW50TmFtZSBjbmFtZSkgewogICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oTWFuaWZlc3QucGVybWlzc2lvbi5SRUFEX1NZTkNfU1RBVFMsCiAgICAgICAgICAgICAgICAgIm5vIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgc3luYyBzdGF0cyIpOwogCisgICAgICAgIGludCBjYWxsZXJVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwogICAgICAgICBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCk7CiAgICAgICAgIGxvbmcgaWRlbnRpdHlUb2tlbiA9IGNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgIFN5bmNNYW5hZ2VyIHN5bmNNYW5hZ2VyID0gZ2V0U3luY01hbmFnZXIoKTsKKyAgICAgICAgaWYgKHN5bmNNYW5hZ2VyID09IG51bGwpIHJldHVybiBmYWxzZTsKKwogICAgICAgICB0cnkgewotICAgICAgICAgICAgU3luY01hbmFnZXIgc3luY01hbmFnZXIgPSBnZXRTeW5jTWFuYWdlcigpOwotICAgICAgICAgICAgaWYgKHN5bmNNYW5hZ2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3luY01hbmFnZXIuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5pc1N5bmNQZW5kaW5nKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5KTsKKyAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm87CisgICAgICAgICAgICBpZiAoY25hbWUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGluZm8gPSBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5LCB1c2VySWQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChhY2NvdW50ID09IG51bGwgJiYgYXV0aG9yaXR5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB2ZXJpZnlTaWduYXR1cmVGb3JQYWNrYWdlKGNhbGxlclVpZCwgY25hbWUuZ2V0UGFja2FnZU5hbWUoKSwgImlzU3luY1BlbmRpbmciKTsKKyAgICAgICAgICAgICAgICBpbmZvID0gbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KGNuYW1lLCB1c2VySWQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGF1dGhvcml0eSBzcGVjaWZpZWQiKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzeW5jTWFuYWdlci5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLmlzU3luY1BlbmRpbmcoaW5mbyk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICByZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5VG9rZW4pOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhZGRTdGF0dXNDaGFuZ2VMaXN0ZW5lcihpbnQgbWFzaywgSVN5bmNTdGF0dXNPYnNlcnZlciBjYWxsYmFjaykgewpAQCAtNzM1LDYgKzg1NSwzMCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIEhlbHBlciB0byB2ZXJpZnkgdGhhdCB0aGUgcHJvdmlkZWQgcGFja2FnZSBuYW1lIHNoYXJlcyB0aGUgc2FtZSBjZXJ0IGFzIHRoZSBjYWxsZXIuCisgICAgICogQHBhcmFtIGNhbGxlclVpZCB1aWQgb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4KKyAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgcGFja2FnZSB0byB2ZXJpZnkgYWdhaW5zdCBwYWNrYWdlIG9mIGNhbGxpbmcgYXBwbGljYXRpb24uCisgICAgICogQHBhcmFtIHRhZyBhIHRhZyB0byB1c2Ugd2hlbiB0aHJvd2luZyBhbiBleGNlcHRpb24gaWYgdGhlIHNpZ25hdHVyZXMgZG9uJ3QKKyAgICAgKiBtYXRjaC4gQ2Fubm90IGJlIG51bGwuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIGFuZCB0aGUgcHJvdmlkZWQgcGFja2FnZSBhcmUgc2lnbmVkIHdpdGggdGhlIHNhbWUKKyAgICAgKiBjZXJ0aWZpY2F0ZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gdmVyaWZ5U2lnbmF0dXJlRm9yUGFja2FnZShpbnQgY2FsbGVyVWlkLCBTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyB0YWcpIHsKKyAgICAgICAgUGFja2FnZU1hbmFnZXIgcG0gPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW50IHNlcnZpY2VVaWQgPSBwbS5nZXRBcHBsaWNhdGlvbkluZm8ocGFja2FnZU5hbWUsIDApLnVpZDsKKyAgICAgICAgICAgIGlmIChwbS5jaGVja1NpZ25hdHVyZXMoY2FsbGVyVWlkLCBzZXJ2aWNlVWlkKSA9PSBQYWNrYWdlTWFuYWdlci5TSUdOQVRVUkVfTUFUQ0gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKHRhZyArICI6IENhbGxlciBjZXJ0aWZpY2F0ZSBkb2VzIG5vdCBtYXRjaCB0aGF0IGZvciAtICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgcGFja2FnZU5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChQYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbih0YWcgKyAiOiAiICsgcGFja2FnZU5hbWUgKyAiIHBhY2thZ2Ugbm90IGZvdW5kLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogSGlkZSB0aGlzIGNsYXNzIHNpbmNlIGl0IGlzIG5vdCBwYXJ0IG9mIGFwaSwKICAgICAgKiBidXQgY3VycmVudCB1bml0dGVzdCBmcmFtZXdvcmsgcmVxdWlyZXMgaXQgdG8gYmUgcHVibGljCiAgICAgICogQGhpZGUKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jTWFuYWdlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNNYW5hZ2VyLmphdmEKaW5kZXggNzFkOGQ5OS4uNWFkZDViMCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNNYW5hZ2VyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNNYW5hZ2VyLmphdmEKQEAgLTMxLDYgKzMxLDcgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSVN5bmNBZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JU3luY0NvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LklTeW5jU2VydmljZUFkYXB0ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklTeW5jU3RhdHVzT2JzZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwpAQCAtODUsMTAgKzg2LDggQEAKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CkBAIC05OSw3ICs5OCw2IEBACiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7CiAKIC8qKgogICogQGhpZGUKQEAgLTIwMiw4ICsyMDAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkludGVybmFsIHN0b3JhZ2UgaXMgbG93LiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgbVN0b3JhZ2VJc0xvdyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVTeW5jKG51bGwgLyogYW55IGFjY291bnQgKi8sIFVzZXJIYW5kbGUuVVNFUl9BTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyogYW55IGF1dGhvcml0eSAqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVTeW5jKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludC5VU0VSX0FMTF9QUk9WSURFUl9BTExfQUNDT1VOVFNfQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIC8qIGFueSBzeW5jICovKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChJbnRlbnQuQUNUSU9OX0RFVklDRV9TVE9SQUdFX09LLmVxdWFscyhhY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJJbnRlcm5hbCBzdG9yYWdlIGlzIG9rLiIpOwpAQCAtMjIxLDE5ICsyMjAsNiBAQAogICAgICAgICB9CiAgICAgfTsKIAotICAgIHByaXZhdGUgQnJvYWRjYXN0UmVjZWl2ZXIgbUJhY2tncm91bmREYXRhU2V0dGluZ0NoYW5nZWQgPSBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgICAgICBpZiAoZ2V0Q29ubmVjdGl2aXR5TWFuYWdlcigpLmdldEJhY2tncm91bmREYXRhU2V0dGluZygpKSB7Ci0gICAgICAgICAgICAgICAgc2NoZWR1bGVTeW5jKG51bGwgLyogYWNjb3VudCAqLywgVXNlckhhbmRsZS5VU0VSX0FMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNPcGVyYXRpb24uUkVBU09OX0JBQ0tHUk9VTkRfREFUQV9TRVRUSU5HU19DSEFOR0VELAotICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKiBhdXRob3JpdHkgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnVuZGxlKCksIDAgLyogZGVsYXkgKi8sIDAgLyogZGVsYXkgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBvbmx5VGhvc2VXaXRoVW5rbm93blN5bmNhYmxlU3RhdGUgKi8pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQogICAgIHByaXZhdGUgQnJvYWRjYXN0UmVjZWl2ZXIgbUFjY291bnRzVXBkYXRlZFJlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewpAQCAtMjc4LDE2ICsyNjQsMTYgQEAKICAgICAgICAgICAgIGRvRGF0YWJhc2VDbGVhbnVwKCk7CiAgICAgICAgIH0KIAorICAgICAgICBBY2NvdW50QW5kVXNlcltdIGFjY291bnRzID0gbVJ1bm5pbmdBY2NvdW50czsKICAgICAgICAgZm9yIChBY3RpdmVTeW5jQ29udGV4dCBjdXJyZW50U3luY0NvbnRleHQgOiBtQWN0aXZlU3luY0NvbnRleHRzKSB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRhaW5zQWNjb3VudEFuZFVzZXIobVJ1bm5pbmdBY2NvdW50cywKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLmFjY291bnQsCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi51c2VySWQpKSB7CisgICAgICAgICAgICBpZiAoIWNvbnRhaW5zQWNjb3VudEFuZFVzZXIoYWNjb3VudHMsCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi50YXJnZXQuYWNjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLnRhcmdldC51c2VySWQpKSB7CiAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiY2FuY2VsaW5nIHN5bmMgc2luY2UgdGhlIGFjY291bnQgaXMgbm8gbG9uZ2VyIHJ1bm5pbmciKTsKICAgICAgICAgICAgICAgICBzZW5kU3luY0ZpbmlzaGVkT3JDYW5jZWxlZE1lc3NhZ2UoY3VycmVudFN5bmNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKiBubyByZXN1bHQgc2luY2UgdGhpcyBpcyBhIGNhbmNlbCAqLyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgICAgICAvLyB3ZSBtdXN0IGRvIHRoaXMgc2luY2Ugd2UgZG9uJ3QgYm90aGVyIHNjaGVkdWxpbmcgYWxhcm1zIHdoZW4KICAgICAgICAgLy8gdGhlIGFjY291bnRzIGFyZSBub3Qgc2V0IHlldAogICAgICAgICBzZW5kQ2hlY2tBbGFybXNNZXNzYWdlKCk7CkBAIC0zMTYsOSArMzAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJSZWNvbm5lY3Rpb24gZGV0ZWN0ZWQ6IGNsZWFyaW5nIGFsbCBiYWNrb2ZmcyIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZChtU3luY1F1ZXVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuY2xlYXJBbGxCYWNrb2Zmc0xvY2tlZChtU3luY1F1ZXVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuY2xlYXJBbGxCYWNrb2ZmcyhtU3luY1F1ZXVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2VuZENoZWNrQWxhcm1zTWVzc2FnZSgpOwogICAgICAgICAgICAgfQpAQCAtMzg0LDEyICszNjgsMTcgQEAKICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lID0gU3luY1N0b3JhZ2VFbmdpbmUuZ2V0U2luZ2xldG9uKCk7CiAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5zZXRPblN5bmNSZXF1ZXN0TGlzdGVuZXIobmV3IE9uU3luY1JlcXVlc3RMaXN0ZW5lcigpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25TeW5jUmVxdWVzdChBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIGludCByZWFzb24sIFN0cmluZyBhdXRob3JpdHksCi0gICAgICAgICAgICAgICAgICAgIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgICAgICAgICBzY2hlZHVsZVN5bmMoYWNjb3VudCwgdXNlcklkLCByZWFzb24sIGF1dGhvcml0eSwgZXh0cmFzLAotICAgICAgICAgICAgICAgICAgICAwIC8qIG5vIGRlbGF5ICovLAotICAgICAgICAgICAgICAgICAgICAwIC8qIG5vIGRlbGF5ICovLAotICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblN5bmNSZXF1ZXN0KFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm8sIGludCByZWFzb24sIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVTeW5jKGluZm8uYWNjb3VudCwgaW5mby51c2VySWQsIHJlYXNvbiwgaW5mby5wcm92aWRlciwgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBubyBmbGV4ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBydW4gaW1tZWRpYXRlbHkgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlU3luYyhpbmZvLnNlcnZpY2UsIGluZm8udXNlcklkLCByZWFzb24sIGV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIG5vIGZsZXggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBydW4gaW1tZWRpYXRlbHkgKi8pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKQEAgLTQyMSw5ICs0MTAsNiBAQAogICAgICAgICAgICAgY29udGV4dC5yZWdpc3RlclJlY2VpdmVyKG1Cb290Q29tcGxldGVkUmVjZWl2ZXIsIGludGVudEZpbHRlcik7CiAgICAgICAgIH0KIAotICAgICAgICBpbnRlbnRGaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKENvbm5lY3Rpdml0eU1hbmFnZXIuQUNUSU9OX0JBQ0tHUk9VTkRfREFUQV9TRVRUSU5HX0NIQU5HRUQpOwotICAgICAgICBjb250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIobUJhY2tncm91bmREYXRhU2V0dGluZ0NoYW5nZWQsIGludGVudEZpbHRlcik7Ci0KICAgICAgICAgaW50ZW50RmlsdGVyID0gbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX0RFVklDRV9TVE9SQUdFX0xPVyk7CiAgICAgICAgIGludGVudEZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9ERVZJQ0VfU1RPUkFHRV9PSyk7CiAgICAgICAgIGNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcihtU3RvcmFnZUludGVudFJlY2VpdmVyLCBpbnRlbnRGaWx0ZXIpOwpAQCAtNTM4LDExICs1MjQsNzggQEAKIAogICAgIHByaXZhdGUgdm9pZCBlbnN1cmVBbGFybVNlcnZpY2UoKSB7CiAgICAgICAgIGlmIChtQWxhcm1TZXJ2aWNlID09IG51bGwpIHsKLSAgICAgICAgICAgIG1BbGFybVNlcnZpY2UgPSAoQWxhcm1NYW5hZ2VyKW1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BTEFSTV9TRVJWSUNFKTsKKyAgICAgICAgICAgIG1BbGFybVNlcnZpY2UgPSAoQWxhcm1NYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQUxBUk1fU0VSVklDRSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKKyAgICAgKiBJbml0aWF0ZSBhIHN5bmMgdXNpbmcgdGhlIG5ldyBhbm9ueW1vdXMgc2VydmljZSBBUEkuCisgICAgICogQHBhcmFtIGNuYW1lIFN5bmNTZXJ2aWNlIGNvbXBvbmVudCBib3VuZCB0byBpbiBvcmRlciB0byBwZXJmb3JtIHRoZSBzeW5jLiAKKyAgICAgKiBAcGFyYW0gdXNlcklkIHRoZSBpZCBvZiB0aGUgdXNlciB3aG9zZSBhY2NvdW50cyBhcmUgdG8gYmUgc3luY2VkLiBJZiB1c2VySWQgaXMgVVNFUl9BTEwsCisgICAgICogICAgICAgICAgdGhlbiBhbGwgdXNlcnMnIGFjY291bnRzIGFyZSBjb25zaWRlcmVkLgorICAgICAqIEBwYXJhbSB1aWQgTGludXggdWlkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IGlzIHBlcmZvcm1pbmcgdGhlIHN5bmMuIAorICAgICAqIEBwYXJhbSBleHRyYXMgYSBNYXAgb2YgU3luY0FkYXB0ZXItc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY29udHJvbAorICAgICAqICAgICAgICAgIHN5bmNzIG9mIGEgc3BlY2lmaWMgcHJvdmlkZXIuIENhbm5vdCBiZSBudWxsLgorICAgICAqIEBwYXJhbSBiZWZvcmVSdW5UaW1lTWlsbGlzIG1pbGxpc2Vjb25kcyBiZWZvcmUgPGNvZGU+cnVudGltZU1pbGxpczwvY29kZT4gdGhhdCB0aGlzIHN5bmMgbWF5CisgICAgICogYmUgcnVuLgorICAgICAqIEBwYXJhbSBydW50aW1lTWlsbGlzIG1pbGxpc2Vjb25kcyBmcm9tIG5vdyBieSB3aGljaCB0aGlzIHN5bmMgbXVzdCBiZSBydW4uCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2NoZWR1bGVTeW5jKENvbXBvbmVudE5hbWUgY25hbWUsIGludCB1c2VySWQsIGludCB1aWQsIEJ1bmRsZSBleHRyYXMsCisgICAgICAgICAgICBsb25nIGJlZm9yZVJ1blRpbWVNaWxsaXMsIGxvbmcgcnVudGltZU1pbGxpcykgeworICAgICAgICBib29sZWFuIGlzTG9nZ2FibGUgPSBMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKTsKKyAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIm9uZSBvZmYgc3luYyBmb3I6ICIgKyBjbmFtZSArICIgIiArIGV4dHJhcy50b1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIEJvb2xlYW4gZXhwZWRpdGVkID0gZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0VYUEVESVRFRCwgZmFsc2UpOworICAgICAgICBpZiAoZXhwZWRpdGVkKSB7CisgICAgICAgICAgICBydW50aW1lTWlsbGlzID0gLTE7IC8vIHRoaXMgbWVhbnMgc2NoZWR1bGUgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBpZ25vcmVTZXR0aW5ncyA9CisgICAgICAgICAgICAgICAgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9TRVRUSU5HUywgZmFsc2UpOworICAgICAgICBpbnQgc291cmNlID0gU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX1NFUlZJQ0U7CisgICAgICAgIGJvb2xlYW4gaXNFbmFibGVkID0gbVN5bmNTdG9yYWdlRW5naW5lLmdldElzVGFyZ2V0U2VydmljZUFjdGl2ZShjbmFtZSwgdXNlcklkKTsKKyAgICAgICAgLy8gT25seSBzY2hlZHVsZSB0aGlzIHN5bmMgaWYKKyAgICAgICAgLy8gICAtIHdlJ3ZlIGV4cGxpY2l0bHkgYmVlbiB0b2xkIHRvIGlnbm9yZSBzZXR0aW5ncy4KKyAgICAgICAgLy8gICAtIGdsb2JhbCBzeW5jIGlzIGVuYWJsZWQgZm9yIHRoaXMgdXNlci4KKyAgICAgICAgYm9vbGVhbiBzeW5jQWxsb3dlZCA9CisgICAgICAgICAgICAgICAgaWdub3JlU2V0dGluZ3MKKyAgICAgICAgICAgICAgICB8fCBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkodXNlcklkKTsKKyAgICAgICAgaWYgKCFzeW5jQWxsb3dlZCkgeworICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJzY2hlZHVsZVN5bmM6IHN5bmMgb2YgIiArIGNuYW1lICsgIiBub3QgYWxsb3dlZCwgZHJvcHBpbmcgcmVxdWVzdC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzRW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJzY2hlZHVsZVN5bmM6ICIgKyBjbmFtZSArICIgaXMgbm90IGVuYWJsZWQsIGRyb3BwaW5nIHJlcXVlc3QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvID0gbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KGNuYW1lLCB1c2VySWQpOworICAgICAgICBQYWlyPExvbmcsIExvbmc+IGJhY2tvZmYgPSBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0QmFja29mZihpbmZvKTsKKyAgICAgICAgbG9uZyBkZWxheVVudGlsID0gbVN5bmNTdG9yYWdlRW5naW5lLmdldERlbGF5VW50aWxUaW1lKGluZm8pOworICAgICAgICBmaW5hbCBsb25nIGJhY2tvZmZUaW1lID0gYmFja29mZiAhPSBudWxsID8gYmFja29mZi5maXJzdCA6IDA7CisgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAic2NoZWR1bGUgU3luYzoiCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIGRlbGF5IHVudGlsICIgKyBkZWxheVVudGlsCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJ1biBieSAiICsgcnVudGltZU1pbGxpcworICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBmbGV4ICIgKyBiZWZvcmVSdW5UaW1lTWlsbGlzCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIHNvdXJjZSAiICsgc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIHN5bmMgc2VydmljZSAiICsgY25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgZXh0cmFzICIgKyBleHRyYXMpOworICAgICAgICB9CisgICAgICAgIHNjaGVkdWxlU3luY09wZXJhdGlvbigKKyAgICAgICAgICAgICAgICBuZXcgU3luY09wZXJhdGlvbihjbmFtZSwgdXNlcklkLCB1aWQsIHNvdXJjZSwgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZU1pbGxpcyAvKiBydW50aW1lICovLAorICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlUnVuVGltZU1pbGxpcyAvKiBmbGV4dGltZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tvZmZUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlVbnRpbCkpOworICAgIH0KKworICAgIC8qKgogICAgICAqIEluaXRpYXRlIGEgc3luYy4gVGhpcyBjYW4gc3RhcnQgYSBzeW5jIGZvciBhbGwgcHJvdmlkZXJzCiAgICAgICogKHBhc3MgbnVsbCB0byB1cmwsIHNldCBvbmx5VGlja2xhYmxlIHRvIGZhbHNlKSwgb25seSB0aG9zZQogICAgICAqIHByb3ZpZGVycyB0aGF0IGFyZSBtYXJrZWQgYXMgdGlja2xhYmxlIChwYXNzIG51bGwgdG8gdXJsLApAQCAtNTg4LDkgKzY0MSw2IEBACiAgICAgICAgICAgICBsb25nIHJ1bnRpbWVNaWxsaXMsIGJvb2xlYW4gb25seVRob3NlV2l0aFVua293blN5bmNhYmxlU3RhdGUpIHsKICAgICAgICAgYm9vbGVhbiBpc0xvZ2dhYmxlID0gTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSk7CiAKLSAgICAgICAgZmluYWwgYm9vbGVhbiBiYWNrZ3JvdW5kRGF0YVVzYWdlQWxsb3dlZCA9ICFtQm9vdENvbXBsZXRlZCB8fAotICAgICAgICAgICAgICAgIGdldENvbm5lY3Rpdml0eU1hbmFnZXIoKS5nZXRCYWNrZ3JvdW5kRGF0YVNldHRpbmcoKTsKLQogICAgICAgICBpZiAoZXh0cmFzID09IG51bGwpIHsKICAgICAgICAgICAgIGV4dHJhcyA9IG5ldyBCdW5kbGUoKTsKICAgICAgICAgfQpAQCAtNjA3LDggKzY1Nyw2IEBACiAgICAgICAgIGlmIChyZXF1ZXN0ZWRBY2NvdW50ICE9IG51bGwgJiYgdXNlcklkICE9IFVzZXJIYW5kbGUuVVNFUl9BTEwpIHsKICAgICAgICAgICAgIGFjY291bnRzID0gbmV3IEFjY291bnRBbmRVc2VyW10geyBuZXcgQWNjb3VudEFuZFVzZXIocmVxdWVzdGVkQWNjb3VudCwgdXNlcklkKSB9OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gaWYgdGhlIGFjY291bnRzIGFyZW4ndCBjb25maWd1cmVkIHlldCB0aGVuIHdlIGNhbid0IHN1cHBvcnQgYW4gYWNjb3VudC1sZXNzCi0gICAgICAgICAgICAvLyBzeW5jIHJlcXVlc3QKICAgICAgICAgICAgIGFjY291bnRzID0gbVJ1bm5pbmdBY2NvdW50czsKICAgICAgICAgICAgIGlmIChhY2NvdW50cy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CkBAIC02ODMsMTIgKzczMSwxMCBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBhbHdheXMgYWxsb3cgaWYgdGhlIGlzU3luY2FibGUgc3RhdGUgaXMgdW5rbm93bgogICAgICAgICAgICAgICAgIGJvb2xlYW4gc3luY0FsbG93ZWQgPQotICAgICAgICAgICAgICAgICAgICAgICAgKGlzU3luY2FibGUgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgKGlzU3luY2FibGUgPCAwKSAvLyBhbHdheXMgYWxsb3cgaWYgdGhlIGlzU3luY2FibGUgc3RhdGUgaXMgdW5rbm93bgogICAgICAgICAgICAgICAgICAgICAgICAgfHwgaWdub3JlU2V0dGluZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChiYWNrZ3JvdW5kRGF0YVVzYWdlQWxsb3dlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkoYWNjb3VudC51c2VySWQpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAobVN5bmNTdG9yYWdlRW5naW5lLmdldE1hc3RlclN5bmNBdXRvbWF0aWNhbGx5KGFjY291bnQudXNlcklkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0U3luY0F1dG9tYXRpY2FsbHkoYWNjb3VudC5hY2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQudXNlcklkLCBhdXRob3JpdHkpKTsKICAgICAgICAgICAgICAgICBpZiAoIXN5bmNBbGxvd2VkKSB7CkBAIC02OTgsMTEgKzc0NCwxMiBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFBhaXI8TG9uZywgTG9uZz4gYmFja29mZiA9IG1TeW5jU3RvcmFnZUVuZ2luZQotICAgICAgICAgICAgICAgICAgICAgICAgLmdldEJhY2tvZmYoYWNjb3VudC5hY2NvdW50LCBhY2NvdW50LnVzZXJJZCwgYXV0aG9yaXR5KTsKLSAgICAgICAgICAgICAgICBsb25nIGRlbGF5VW50aWwgPSBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0RGVsYXlVbnRpbFRpbWUoYWNjb3VudC5hY2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC51c2VySWQsIGF1dGhvcml0eSk7CisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbyA9CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuYWNjb3VudCwgYXV0aG9yaXR5LCBhY2NvdW50LnVzZXJJZCk7CisgICAgICAgICAgICAgICAgUGFpcjxMb25nLCBMb25nPiBiYWNrb2ZmID0gbVN5bmNTdG9yYWdlRW5naW5lLmdldEJhY2tvZmYoaW5mbyk7CisgICAgICAgICAgICAgICAgbG9uZyBkZWxheVVudGlsID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5nZXREZWxheVVudGlsVGltZShpbmZvKTsKICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGJhY2tvZmZUaW1lID0gYmFja29mZiAhPSBudWxsID8gYmFja29mZi5maXJzdCA6IDA7CiAgICAgICAgICAgICAgICAgaWYgKGlzU3luY2FibGUgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpc2F0aW9uIHN5bmMuCkBAIC03MTIsNiArNzU5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgInNjaGVkdWxlIGluaXRpYWxpc2F0aW9uIFN5bmM6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGRlbGF5IHVudGlsICIgKyBkZWxheVVudGlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcnVuIGJ5ICIgKyAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgZmxleCAiICsgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHNvdXJjZSAiICsgc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgYWNjb3VudCAiICsgYWNjb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGF1dGhvcml0eSAiICsgYXV0aG9yaXR5CkBAIC03ODcsMTMgKzgzNSwxMiBAQAogICAgICAgICBtU3luY0hhbmRsZXIuc2VuZE1lc3NhZ2UobXNnKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgc2VuZENhbmNlbFN5bmNzTWVzc2FnZShmaW5hbCBBY2NvdW50IGFjY291bnQsIGZpbmFsIGludCB1c2VySWQsCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgcHJpdmF0ZSB2b2lkIHNlbmRDYW5jZWxTeW5jc01lc3NhZ2UoZmluYWwgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbywgQnVuZGxlIGV4dHJhcykgewogICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIExvZy52KFRBRywgInNlbmRpbmcgTUVTU0FHRV9DQU5DRUwiKTsKICAgICAgICAgTWVzc2FnZSBtc2cgPSBtU3luY0hhbmRsZXIub2J0YWluTWVzc2FnZSgpOwogICAgICAgICBtc2cud2hhdCA9IFN5bmNIYW5kbGVyLk1FU1NBR0VfQ0FOQ0VMOwotICAgICAgICBtc2cub2JqID0gUGFpci5jcmVhdGUoYWNjb3VudCwgYXV0aG9yaXR5KTsKLSAgICAgICAgbXNnLmFyZzEgPSB1c2VySWQ7CisgICAgICAgIG1zZy5zZXREYXRhKGV4dHJhcyk7CisgICAgICAgIG1zZy5vYmogPSBpbmZvOwogICAgICAgICBtU3luY0hhbmRsZXIuc2VuZE1lc3NhZ2UobXNnKTsKICAgICB9CiAKQEAgLTgxNiwxMCArODYzLDExIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGNsZWFyQmFja29mZlNldHRpbmcoU3luY09wZXJhdGlvbiBvcCkgewotICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuc2V0QmFja29mZihvcC5hY2NvdW50LCBvcC51c2VySWQsIG9wLmF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5OT1RfSU5fQkFDS09GRl9NT0RFLCBTeW5jU3RvcmFnZUVuZ2luZS5OT1RfSU5fQkFDS09GRl9NT0RFKTsKKyAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLnNldEJhY2tvZmYob3AudGFyZ2V0LAorICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLk5PVF9JTl9CQUNLT0ZGX01PREUsCisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuTk9UX0lOX0JBQ0tPRkZfTU9ERSk7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVN5bmNRdWV1ZSkgewotICAgICAgICAgICAgbVN5bmNRdWV1ZS5vbkJhY2tvZmZDaGFuZ2VkKG9wLmFjY291bnQsIG9wLnVzZXJJZCwgb3AuYXV0aG9yaXR5LCAwKTsKKyAgICAgICAgICAgIG1TeW5jUXVldWUub25CYWNrb2ZmQ2hhbmdlZChvcC50YXJnZXQsIDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC04MjksNyArODc3LDcgQEAKICAgICAgICAgZmluYWwgbG9uZyBub3cgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKIAogICAgICAgICBmaW5hbCBQYWlyPExvbmcsIExvbmc+IHByZXZpb3VzU2V0dGluZ3MgPQotICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRCYWNrb2ZmKG9wLmFjY291bnQsIG9wLnVzZXJJZCwgb3AuYXV0aG9yaXR5KTsKKyAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0QmFja29mZihvcC50YXJnZXQpOwogICAgICAgICBsb25nIG5ld0RlbGF5SW5NcyA9IC0xOwogICAgICAgICBpZiAocHJldmlvdXNTZXR0aW5ncyAhPSBudWxsKSB7CiAgICAgICAgICAgICAvLyBkb24ndCBpbmNyZWFzZSBiYWNrb2ZmIGJlZm9yZSBjdXJyZW50IGJhY2tvZmYgaXMgZXhwaXJlZC4gVGhpcyB3aWxsIGhhcHBlbiBmb3Igb3AncwpAQCAtODYwLDE0ICs5MDgsMTIgQEAKIAogICAgICAgICBmaW5hbCBsb25nIGJhY2tvZmYgPSBub3cgKyBuZXdEZWxheUluTXM7CiAKLSAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLnNldEJhY2tvZmYob3AuYWNjb3VudCwgb3AudXNlcklkLCBvcC5hdXRob3JpdHksCi0gICAgICAgICAgICAgICAgYmFja29mZiwgbmV3RGVsYXlJbk1zKTsKLQorICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuc2V0QmFja29mZihvcC50YXJnZXQsIGJhY2tvZmYsIG5ld0RlbGF5SW5Ncyk7CiAgICAgICAgIG9wLmJhY2tvZmYgPSBiYWNrb2ZmOwogICAgICAgICBvcC51cGRhdGVFZmZlY3RpdmVSdW5UaW1lKCk7CiAKICAgICAgICAgc3luY2hyb25pemVkIChtU3luY1F1ZXVlKSB7Ci0gICAgICAgICAgICBtU3luY1F1ZXVlLm9uQmFja29mZkNoYW5nZWQob3AuYWNjb3VudCwgb3AudXNlcklkLCBvcC5hdXRob3JpdHksIGJhY2tvZmYpOworICAgICAgICAgICAgbVN5bmNRdWV1ZS5vbkJhY2tvZmZDaGFuZ2VkKG9wLnRhcmdldCwgYmFja29mZik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTg4MCwyMCArOTI2LDIwIEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBuZXdEZWxheVVudGlsVGltZSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lCi0gICAgICAgICAgICAgICAgLnNldERlbGF5VW50aWxUaW1lKG9wLmFjY291bnQsIG9wLnVzZXJJZCwgb3AuYXV0aG9yaXR5LCBuZXdEZWxheVVudGlsVGltZSk7CisgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5zZXREZWxheVVudGlsVGltZShvcC50YXJnZXQsIG5ld0RlbGF5VW50aWxUaW1lKTsKICAgICAgICAgc3luY2hyb25pemVkIChtU3luY1F1ZXVlKSB7Ci0gICAgICAgICAgICBtU3luY1F1ZXVlLm9uRGVsYXlVbnRpbFRpbWVDaGFuZ2VkKG9wLmFjY291bnQsIG9wLmF1dGhvcml0eSwgbmV3RGVsYXlVbnRpbFRpbWUpOworICAgICAgICAgICAgbVN5bmNRdWV1ZS5vbkRlbGF5VW50aWxUaW1lQ2hhbmdlZChvcC50YXJnZXQsIG5ld0RlbGF5VW50aWxUaW1lKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgotICAgICAqIENhbmNlbCB0aGUgYWN0aXZlIHN5bmMgaWYgaXQgbWF0Y2hlcyB0aGUgYXV0aG9yaXR5IGFuZCBhY2NvdW50LgotICAgICAqIEBwYXJhbSBhY2NvdW50IGxpbWl0IHRoZSBjYW5jZWxhdGlvbnMgdG8gc3luY3Mgd2l0aCB0aGlzIGFjY291bnQsIGlmIG5vbi1udWxsCi0gICAgICogQHBhcmFtIGF1dGhvcml0eSBsaW1pdCB0aGUgY2FuY2VsYXRpb25zIHRvIHN5bmNzIHdpdGggdGhpcyBhdXRob3JpdHksIGlmIG5vbi1udWxsCisgICAgICogQ2FuY2VsIHRoZSBhY3RpdmUgc3luYyBpZiBpdCBtYXRjaGVzIHRoZSB0YXJnZXQuCisgICAgICogQHBhcmFtIGluZm8gb2JqZWN0IGNvbnRhaW5pbmcgaW5mbyBhYm91dCB3aGljaCBzeW5jcyB0byBjYW5jZWwuIFRoZSB0YXJnZXQgY2FuCisgICAgICogaGF2ZSBudWxsIGFjY291bnQvcHJvdmlkZXIgaW5mbyB0byBzcGVjaWZ5IGFsbCBhY2NvdW50cy9wcm92aWRlcnMuCisgICAgICogQHBhcmFtIGV4dHJhcyBpZiBub24tbnVsbCwgc3BlY2lmaWVzIHRoZSBleGFjdCBzeW5jIHRvIHJlbW92ZS4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjYW5jZWxBY3RpdmVTeW5jKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIGF1dGhvcml0eSkgewotICAgICAgICBzZW5kQ2FuY2VsU3luY3NNZXNzYWdlKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5KTsKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxBY3RpdmVTeW5jKFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm8sIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgc2VuZENhbmNlbFN5bmNzTWVzc2FnZShpbmZvLCBleHRyYXMpOwogICAgIH0KIAogICAgIC8qKgpAQCAtOTIyLDI0ICs5NjgsNDAgQEAKIAogICAgIC8qKgogICAgICAqIFJlbW92ZSBzY2hlZHVsZWQgc3luYyBvcGVyYXRpb25zLgotICAgICAqIEBwYXJhbSBhY2NvdW50IGxpbWl0IHRoZSByZW1vdmFscyB0byBvcGVyYXRpb25zIHdpdGggdGhpcyBhY2NvdW50LCBpZiBub24tbnVsbAotICAgICAqIEBwYXJhbSBhdXRob3JpdHkgbGltaXQgdGhlIHJlbW92YWxzIHRvIG9wZXJhdGlvbnMgd2l0aCB0aGlzIGF1dGhvcml0eSwgaWYgbm9uLW51bGwKKyAgICAgKiBAcGFyYW0gaW5mbyBsaW1pdCB0aGUgcmVtb3ZhbHMgdG8gb3BlcmF0aW9ucyB0aGF0IG1hdGNoIHRoaXMgdGFyZ2V0LiBUaGUgdGFyZ2V0IGNhbgorICAgICAqIGhhdmUgbnVsbCBhY2NvdW50L3Byb3ZpZGVyIGluZm8gdG8gc3BlY2lmeSBhbGwgYWNjb3VudHMvcHJvdmlkZXJzLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNsZWFyU2NoZWR1bGVkU3luY09wZXJhdGlvbnMoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgcHVibGljIHZvaWQgY2xlYXJTY2hlZHVsZWRTeW5jT3BlcmF0aW9ucyhTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVN5bmNRdWV1ZSkgewotICAgICAgICAgICAgbVN5bmNRdWV1ZS5yZW1vdmUoYWNjb3VudCwgdXNlcklkLCBhdXRob3JpdHkpOworICAgICAgICAgICAgbVN5bmNRdWV1ZS5yZW1vdmUoaW5mbywgbnVsbCAvKiBhbGwgb3BlcmF0aW9ucyAqLyk7CiAgICAgICAgIH0KLSAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLnNldEJhY2tvZmYoYWNjb3VudCwgdXNlcklkLCBhdXRob3JpdHksCisgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5zZXRCYWNrb2ZmKGluZm8sCiAgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuTk9UX0lOX0JBQ0tPRkZfTU9ERSwgU3luY1N0b3JhZ2VFbmdpbmUuTk9UX0lOX0JBQ0tPRkZfTU9ERSk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmVtb3ZlIGEgc3BlY2lmaWVkIHN5bmMsIGlmIGl0IGV4aXN0cy4KKyAgICAgKiBAcGFyYW0gaW5mbyBBdXRob3JpdHkgZm9yIHdoaWNoIHRoZSBzeW5jIGlzIHRvIGJlIHJlbW92ZWQuCisgICAgICogQHBhcmFtIGV4dHJhcyBleHRyYXMgYnVuZGxlIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHN5bmMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgY2FuY2VsU2NoZWR1bGVkU3luY09wZXJhdGlvbihTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVN5bmNRdWV1ZSkgeworICAgICAgICAgICAgbVN5bmNRdWV1ZS5yZW1vdmUoaW5mbywgZXh0cmFzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXNldCB0aGUgYmFjay1vZmYgaWYgdGhlcmUgYXJlIG5vIG1vcmUgc3luY3MgcGVuZGluZy4KKyAgICAgICAgaWYgKCFtU3luY1N0b3JhZ2VFbmdpbmUuaXNTeW5jUGVuZGluZyhpbmZvKSkgeworICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLnNldEJhY2tvZmYoaW5mbywKKyAgICAgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuTk9UX0lOX0JBQ0tPRkZfTU9ERSwgU3luY1N0b3JhZ2VFbmdpbmUuTk9UX0lOX0JBQ0tPRkZfTU9ERSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICB2b2lkIG1heWJlUmVzY2hlZHVsZVN5bmMoU3luY1Jlc3VsdCBzeW5jUmVzdWx0LCBTeW5jT3BlcmF0aW9uIG9wZXJhdGlvbikgewogICAgICAgICBib29sZWFuIGlzTG9nZ2FibGUgPSBMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5ERUJVRyk7CiAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CiAgICAgICAgICAgICBMb2cuZChUQUcsICJlbmNvdW50ZXJlZCBlcnJvcihzKSBkdXJpbmcgdGhlIHN5bmM6ICIgKyBzeW5jUmVzdWx0ICsgIiwgIiArIG9wZXJhdGlvbik7CiAgICAgICAgIH0KIAotICAgICAgICBvcGVyYXRpb24gPSBuZXcgU3luY09wZXJhdGlvbihvcGVyYXRpb24pOworICAgICAgICBvcGVyYXRpb24gPSBuZXcgU3luY09wZXJhdGlvbihvcGVyYXRpb24sIDBMIC8qIG5ld1J1blRpbWVGcm9tTm93ICovKTsKIAogICAgICAgICAvLyBUaGUgU1lOQ19FWFRSQVNfSUdOT1JFX0JBQ0tPRkYgb25seSBhcHBsaWVzIHRvIHRoZSBmaXJzdCBhdHRlbXB0IHRvIHN5bmMgYSBnaXZlbgogICAgICAgICAvLyByZXF1ZXN0LiBSZXRyaWVzIG9mIHRoZSByZXF1ZXN0IHdpbGwgYWx3YXlzIGhvbm9yIHRoZSBiYWNrb2ZmLCBzbyBjbGVhciB0aGUKQEAgLTk0OCwyNSArMTAxMCwyOSBAQAogICAgICAgICAgICAgb3BlcmF0aW9uLmV4dHJhcy5yZW1vdmUoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9CQUNLT0ZGKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIHRoaXMgc3luYyBhYm9ydGVkIGJlY2F1c2UgdGhlIGludGVybmFsIHN5bmMgbG9vcCByZXRyaWVkIHRvbyBtYW55IHRpbWVzIHRoZW4KLSAgICAgICAgLy8gICBkb24ndCByZXNjaGVkdWxlLiBPdGhlcndpc2Ugd2UgcmlzayBnZXR0aW5nIGludG8gYSByZXRyeSBsb29wLgotICAgICAgICAvLyBJZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCB0byBzb21lIGV4dGVudCB0aGVuIHJldHJ5IGltbWVkaWF0ZWx5LgotICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIHR3by13YXkgc3luYyB0aGVuIHJldHJ5IHNvZnQgZXJyb3JzIHdpdGggYW4gZXhwb25lbnRpYWwgYmFja29mZi4KLSAgICAgICAgLy8gSWYgdGhpcyB3YXMgYW4gdXB3YXJkIHN5bmMgdGhlbiBzY2hlZHVsZSBhIHR3by13YXkgc3luYyBpbW1lZGlhdGVseS4KLSAgICAgICAgLy8gT3RoZXJ3aXNlIGRvIG5vdCByZXNjaGVkdWxlLgogICAgICAgICBpZiAob3BlcmF0aW9uLmV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19ET19OT1RfUkVUUlksIGZhbHNlKSkgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAibm90IHJldHJ5aW5nIHN5bmMgb3BlcmF0aW9uIGJlY2F1c2UgU1lOQ19FWFRSQVNfRE9fTk9UX1JFVFJZIHdhcyBzcGVjaWZpZWQgIgotICAgICAgICAgICAgICAgICAgICArIG9wZXJhdGlvbik7CisgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIm5vdCByZXRyeWluZyBzeW5jIG9wZXJhdGlvbiBiZWNhdXNlIFNZTkNfRVhUUkFTX0RPX05PVF9SRVRSWSB3YXMgc3BlY2lmaWVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgb3BlcmF0aW9uKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24uZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX1VQTE9BRCwgZmFsc2UpCiAgICAgICAgICAgICAgICAgJiYgIXN5bmNSZXN1bHQuc3luY0FscmVhZHlJblByb2dyZXNzKSB7CisgICAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBhbiB1cHdhcmQgc3luYyB0aGVuIHNjaGVkdWxlIGEgdHdvLXdheSBzeW5jIGltbWVkaWF0ZWx5LgogICAgICAgICAgICAgb3BlcmF0aW9uLmV4dHJhcy5yZW1vdmUoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX1VQTE9BRCk7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJyZXRyeWluZyBzeW5jIG9wZXJhdGlvbiBhcyBhIHR3by13YXkgc3luYyBiZWNhdXNlIGFuIHVwbG9hZC1vbmx5IHN5bmMgIgotICAgICAgICAgICAgICAgICAgICArICJlbmNvdW50ZXJlZCBhbiBlcnJvcjogIiArIG9wZXJhdGlvbik7CisgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgIExvZy5kKFRBRywgInJldHJ5aW5nIHN5bmMgb3BlcmF0aW9uIGFzIGEgdHdvLXdheSBzeW5jIGJlY2F1c2UgYW4gdXBsb2FkLW9ubHkgc3luYyAiCisgICAgICAgICAgICAgICAgICAgICAgICArICJlbmNvdW50ZXJlZCBhbiBlcnJvcjogIiArIG9wZXJhdGlvbik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzY2hlZHVsZVN5bmNPcGVyYXRpb24ob3BlcmF0aW9uKTsKICAgICAgICAgfSBlbHNlIGlmIChzeW5jUmVzdWx0LnRvb01hbnlSZXRyaWVzKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJub3QgcmV0cnlpbmcgc3luYyBvcGVyYXRpb24gYmVjYXVzZSBpdCByZXRyaWVkIHRvbyBtYW55IHRpbWVzOiAiCi0gICAgICAgICAgICAgICAgICAgICsgb3BlcmF0aW9uKTsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgc3luYyBhYm9ydGVkIGJlY2F1c2UgdGhlIGludGVybmFsIHN5bmMgbG9vcCByZXRyaWVkIHRvbyBtYW55IHRpbWVzIHRoZW4KKyAgICAgICAgICAgIC8vICAgZG9uJ3QgcmVzY2hlZHVsZS4gT3RoZXJ3aXNlIHdlIHJpc2sgZ2V0dGluZyBpbnRvIGEgcmV0cnkgbG9vcC4KKyAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAibm90IHJldHJ5aW5nIHN5bmMgb3BlcmF0aW9uIGJlY2F1c2UgaXQgcmV0cmllZCB0b28gbWFueSB0aW1lczogIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBvcGVyYXRpb24pOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHN5bmNSZXN1bHQubWFkZVNvbWVQcm9ncmVzcygpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCB0byBzb21lIGV4dGVudCB0aGVuIHJldHJ5IGltbWVkaWF0ZWx5LgogICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJyZXRyeWluZyBzeW5jIG9wZXJhdGlvbiBiZWNhdXNlIGV2ZW4gdGhvdWdoIGl0IGhhZCBhbiBlcnJvciAiCiAgICAgICAgICAgICAgICAgICAgICAgICArICJpdCBhY2hpZXZlZCBzb21lIHN1Y2Nlc3MiKTsKQEAgLTk3OSwxOSArMTA0NSwxOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2NoZWR1bGVTeW5jT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgIG5ldyBTeW5jT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uYWNjb3VudCwgb3BlcmF0aW9uLnVzZXJJZCwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLnJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLnN5bmNTb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi5hdXRob3JpdHksIG9wZXJhdGlvbi5leHRyYXMsCi0gICAgICAgICAgICAgICAgICAgIERFTEFZX1JFVFJZX1NZTkNfSU5fUFJPR1JFU1NfSU5fU0VDT05EUyAqIDEwMDAsIG9wZXJhdGlvbi5mbGV4VGltZSwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmJhY2tvZmYsIG9wZXJhdGlvbi5kZWxheVVudGlsLCBvcGVyYXRpb24uYWxsb3dQYXJhbGxlbFN5bmNzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBERUxBWV9SRVRSWV9TWU5DX0lOX1BST0dSRVNTX0lOX1NFQ09ORFMgKiAxMDAwIC8qIG5ld1J1blRpbWVGcm9tTm93ICovKQorICAgICAgICAgICAgICAgICk7CiAgICAgICAgIH0gZWxzZSBpZiAoc3luY1Jlc3VsdC5oYXNTb2Z0RXJyb3IoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSB0d28td2F5IHN5bmMgdGhlbiByZXRyeSBzb2Z0IGVycm9ycyB3aXRoIGFuIGV4cG9uZW50aWFsIGJhY2tvZmYuCiAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgewogICAgICAgICAgICAgICAgIExvZy5kKFRBRywgInJldHJ5aW5nIHN5bmMgb3BlcmF0aW9uIGJlY2F1c2UgaXQgZW5jb3VudGVyZWQgYSBzb2Z0IGVycm9yOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICArIG9wZXJhdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzY2hlZHVsZVN5bmNPcGVyYXRpb24ob3BlcmF0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSBkbyBub3QgcmVzY2hlZHVsZS4KICAgICAgICAgICAgIExvZy5kKFRBRywgIm5vdCByZXRyeWluZyBzeW5jIG9wZXJhdGlvbiBiZWNhdXNlIHRoZSBlcnJvciBpcyBhIGhhcmQgZXJyb3I6ICIKICAgICAgICAgICAgICAgICAgICAgKyBvcGVyYXRpb24pOwogICAgICAgICB9CkBAIC0xMDI0LDkgKzEwODksMTIgQEAKICAgICAgICAgdXBkYXRlUnVubmluZ0FjY291bnRzKCk7CiAKICAgICAgICAgY2FuY2VsQWN0aXZlU3luYygKLSAgICAgICAgICAgICAgICBudWxsIC8qIGFueSBhY2NvdW50ICovLAotICAgICAgICAgICAgICAgIHVzZXJJZCwKLSAgICAgICAgICAgICAgICBudWxsIC8qIGFueSBhdXRob3JpdHkgKi8pOworICAgICAgICAgICAgICAgIG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyogYW55IGFjY291bnQgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICBudWxsIC8qIGFueSBhdXRob3JpdHkgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VySWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKiBhbnkgc3luYy4gKi8KKyAgICAgICAgICAgICAgICApOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBvblVzZXJSZW1vdmVkKGludCB1c2VySWQpIHsKQEAgLTEwMzUsNyArMTEwMyw3IEBACiAgICAgICAgIC8vIENsZWFuIHVwIHRoZSBzdG9yYWdlIGVuZ2luZSBkYXRhYmFzZQogICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuZG9EYXRhYmFzZUNsZWFudXAobmV3IEFjY291bnRbMF0sIHVzZXJJZCk7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVN5bmNRdWV1ZSkgewotICAgICAgICAgICAgbVN5bmNRdWV1ZS5yZW1vdmVVc2VyKHVzZXJJZCk7CisgICAgICAgICAgICBtU3luY1F1ZXVlLnJlbW92ZVVzZXJMb2NrZWQodXNlcklkKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTA0Nyw2ICsxMTE1LDcgQEAKICAgICAgICAgZmluYWwgU3luY09wZXJhdGlvbiBtU3luY09wZXJhdGlvbjsKICAgICAgICAgZmluYWwgbG9uZyBtSGlzdG9yeVJvd0lkOwogICAgICAgICBJU3luY0FkYXB0ZXIgbVN5bmNBZGFwdGVyOworICAgICAgICBJU3luY1NlcnZpY2VBZGFwdGVyIG1TeW5jU2VydmljZUFkYXB0ZXI7CiAgICAgICAgIGZpbmFsIGxvbmcgbVN0YXJ0VGltZTsKICAgICAgICAgbG9uZyBtVGltZW91dFN0YXJ0VGltZTsKICAgICAgICAgYm9vbGVhbiBtQm91bmQ7CkBAIC0xMDcyLDEwICsxMTQxLDEwIEBACiAgICAgICAgICAgICBtU3luY09wZXJhdGlvbiA9IHN5bmNPcGVyYXRpb247CiAgICAgICAgICAgICBtSGlzdG9yeVJvd0lkID0gaGlzdG9yeVJvd0lkOwogICAgICAgICAgICAgbVN5bmNBZGFwdGVyID0gbnVsbDsKKyAgICAgICAgICAgIG1TeW5jU2VydmljZUFkYXB0ZXIgPSBudWxsOwogICAgICAgICAgICAgbVN0YXJ0VGltZSA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwogICAgICAgICAgICAgbVRpbWVvdXRTdGFydFRpbWUgPSBtU3RhcnRUaW1lOwotICAgICAgICAgICAgbVN5bmNXYWtlTG9jayA9IG1TeW5jSGFuZGxlci5nZXRTeW5jV2FrZUxvY2soCi0gICAgICAgICAgICAgICAgICAgIG1TeW5jT3BlcmF0aW9uLmFjY291bnQsIG1TeW5jT3BlcmF0aW9uLmF1dGhvcml0eSk7CisgICAgICAgICAgICBtU3luY1dha2VMb2NrID0gbVN5bmNIYW5kbGVyLmdldFN5bmNXYWtlTG9jayhtU3luY09wZXJhdGlvbik7CiAgICAgICAgICAgICBtU3luY1dha2VMb2NrLnNldFdvcmtTb3VyY2UobmV3IFdvcmtTb3VyY2Uoc3luY0FkYXB0ZXJVaWQpKTsKICAgICAgICAgICAgIG1TeW5jV2FrZUxvY2suYWNxdWlyZSgpOwogICAgICAgICB9CkBAIC0xMTAyLDcgKzExNzEsNyBAQAogICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBuYW1lLCBJQmluZGVyIHNlcnZpY2UpIHsKICAgICAgICAgICAgIE1lc3NhZ2UgbXNnID0gbVN5bmNIYW5kbGVyLm9idGFpbk1lc3NhZ2UoKTsKICAgICAgICAgICAgIG1zZy53aGF0ID0gU3luY0hhbmRsZXIuTUVTU0FHRV9TRVJWSUNFX0NPTk5FQ1RFRDsKLSAgICAgICAgICAgIG1zZy5vYmogPSBuZXcgU2VydmljZUNvbm5lY3Rpb25EYXRhKHRoaXMsIElTeW5jQWRhcHRlci5TdHViLmFzSW50ZXJmYWNlKHNlcnZpY2UpKTsKKyAgICAgICAgICAgIG1zZy5vYmogPSBuZXcgU2VydmljZUNvbm5lY3Rpb25EYXRhKHRoaXMsIHNlcnZpY2UpOwogICAgICAgICAgICAgbVN5bmNIYW5kbGVyLnNlbmRNZXNzYWdlKG1zZyk7CiAgICAgICAgIH0KIApAQCAtMTExMywxMyArMTE4MiwxMyBAQAogICAgICAgICAgICAgbVN5bmNIYW5kbGVyLnNlbmRNZXNzYWdlKG1zZyk7CiAgICAgICAgIH0KIAotICAgICAgICBib29sZWFuIGJpbmRUb1N5bmNBZGFwdGVyKFJlZ2lzdGVyZWRTZXJ2aWNlc0NhY2hlLlNlcnZpY2VJbmZvIGluZm8sIGludCB1c2VySWQpIHsKKyAgICAgICAgYm9vbGVhbiBiaW5kVG9TeW5jQWRhcHRlcihDb21wb25lbnROYW1lIHNlcnZpY2VDb21wb25lbnQsIGludCB1c2VySWQpIHsKICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImJpbmRUb1N5bmNBZGFwdGVyOiAiICsgaW5mby5jb21wb25lbnROYW1lICsgIiwgY29ubmVjdGlvbiAiICsgdGhpcyk7CisgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiYmluZFRvU3luY0FkYXB0ZXI6ICIgKyBzZXJ2aWNlQ29tcG9uZW50ICsgIiwgY29ubmVjdGlvbiAiICsgdGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudCgpOwogICAgICAgICAgICAgaW50ZW50LnNldEFjdGlvbigiYW5kcm9pZC5jb250ZW50LlN5bmNBZGFwdGVyIik7Ci0gICAgICAgICAgICBpbnRlbnQuc2V0Q29tcG9uZW50KGluZm8uY29tcG9uZW50TmFtZSk7CisgICAgICAgICAgICBpbnRlbnQuc2V0Q29tcG9uZW50KHNlcnZpY2VDb21wb25lbnQpOwogICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9DTElFTlRfTEFCRUwsCiAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLnN5bmNfYmluZGluZ19sYWJlbCk7CiAgICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX0NMSUVOVF9JTlRFTlQsIFBlbmRpbmdJbnRlbnQuZ2V0QWN0aXZpdHlBc1VzZXIoCkBAIC0xMTI5LDcgKzExOTgsNyBAQAogICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBiaW5kUmVzdWx0ID0gbUNvbnRleHQuYmluZFNlcnZpY2VBc1VzZXIoaW50ZW50LCB0aGlzLAogICAgICAgICAgICAgICAgICAgICBDb250ZXh0LkJJTkRfQVVUT19DUkVBVEUgfCBDb250ZXh0LkJJTkRfTk9UX0ZPUkVHUk9VTkQKICAgICAgICAgICAgICAgICAgICAgfCBDb250ZXh0LkJJTkRfQUxMT1dfT09NX01BTkFHRU1FTlQsCi0gICAgICAgICAgICAgICAgICAgIG5ldyBVc2VySGFuZGxlKG1TeW5jT3BlcmF0aW9uLnVzZXJJZCkpOworICAgICAgICAgICAgICAgICAgICBuZXcgVXNlckhhbmRsZShtU3luY09wZXJhdGlvbi50YXJnZXQudXNlcklkKSk7CiAgICAgICAgICAgICBpZiAoIWJpbmRSZXN1bHQpIHsKICAgICAgICAgICAgICAgICBtQm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTExNTIsNyArMTIyMSw2IEBACiAgICAgICAgICAgICBtU3luY1dha2VMb2NrLnNldFdvcmtTb3VyY2UobnVsbCk7CiAgICAgICAgIH0KIAotICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICAgICAgdG9TdHJpbmcoc2IpOwpAQCAtMTI5MSwxMSArMTM1OSwxMyBAQAogICAgICAgICAgICAgICAgIGludCByb3cgPSB0YWJsZS5nZXROdW1Sb3dzKCk7CiAgICAgICAgICAgICAgICAgUGFpcjxBdXRob3JpdHlJbmZvLCBTeW5jU3RhdHVzSW5mbz4gc3luY0F1dGhvcml0eVN5bmNTdGF0dXMgPSAKICAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRDb3B5T2ZBdXRob3JpdHlXaXRoU3luY1N0YXR1cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC5hY2NvdW50LCBhY2NvdW50LnVzZXJJZCwgc3luY0FkYXB0ZXJUeXBlLnR5cGUuYXV0aG9yaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuYWNjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jQWRhcHRlclR5cGUudHlwZS5hdXRob3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC51c2VySWQpKTsKICAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5BdXRob3JpdHlJbmZvIHNldHRpbmdzID0gc3luY0F1dGhvcml0eVN5bmNTdGF0dXMuZmlyc3Q7CiAgICAgICAgICAgICAgICAgU3luY1N0YXR1c0luZm8gc3RhdHVzID0gc3luY0F1dGhvcml0eVN5bmNTdGF0dXMuc2Vjb25kOwotCi0gICAgICAgICAgICAgICAgU3RyaW5nIGF1dGhvcml0eSA9IHNldHRpbmdzLmF1dGhvcml0eTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgYXV0aG9yaXR5ID0gc2V0dGluZ3MudGFyZ2V0LnByb3ZpZGVyOwogICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHkubGVuZ3RoKCkgPiA1MCkgewogICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkgPSBhdXRob3JpdHkuc3Vic3RyaW5nKGF1dGhvcml0eS5sZW5ndGgoKSAtIDUwKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNDE2LDE0ICsxNDg2LDI1IEBACiAgICAgICAgICAgICBpbnQgbWF4QXV0aG9yaXR5ID0gMDsKICAgICAgICAgICAgIGludCBtYXhBY2NvdW50ID0gMDsKICAgICAgICAgICAgIGZvciAoU3luY1N0b3JhZ2VFbmdpbmUuU3luY0hpc3RvcnlJdGVtIGl0ZW0gOiBpdGVtcykgewotICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkF1dGhvcml0eUluZm8gYXV0aG9yaXR5CisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvCiAgICAgICAgICAgICAgICAgICAgICAgICA9IG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRBdXRob3JpdHkoaXRlbS5hdXRob3JpdHlJZCk7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGF1dGhvcml0eU5hbWU7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFjY291bnRLZXk7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSBhdXRob3JpdHkuYXV0aG9yaXR5OwotICAgICAgICAgICAgICAgICAgICBhY2NvdW50S2V5ID0gYXV0aG9yaXR5LmFjY291bnQubmFtZSArICIvIiArIGF1dGhvcml0eS5hY2NvdW50LnR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdSIgKyBhdXRob3JpdHkudXNlcklkOworICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8udGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSA9IGF1dGhvcml0eUluZm8udGFyZ2V0LnByb3ZpZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9IGF1dGhvcml0eUluZm8udGFyZ2V0LmFjY291bnQubmFtZSArICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGF1dGhvcml0eUluZm8udGFyZ2V0LmFjY291bnQudHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdSIgKyBhdXRob3JpdHlJbmZvLnRhcmdldC51c2VySWQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXV0aG9yaXR5SW5mby50YXJnZXQudGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSBhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlLmdldFBhY2thZ2VOYW1lKCkgKyAiLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlLmdldENsYXNzTmFtZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1IiArIGF1dGhvcml0eUluZm8udGFyZ2V0LnVzZXJJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRLZXkgPSAibm8gYWNjb3VudCI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlOYW1lID0gIlVua25vd24iOworICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9ICJVbmtub3duIjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSAiVW5rbm93biI7CiAgICAgICAgICAgICAgICAgICAgIGFjY291bnRLZXkgPSAiVW5rbm93biI7CkBAIC0xNTQ0LDE0ICsxNjI1LDI1IEBACiAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlTWFuYWdlciBwbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlN5bmNIaXN0b3J5SXRlbSBpdGVtID0gaXRlbXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkF1dGhvcml0eUluZm8gYXV0aG9yaXR5CisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvCiAgICAgICAgICAgICAgICAgICAgICAgICA9IG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRBdXRob3JpdHkoaXRlbS5hdXRob3JpdHlJZCk7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGF1dGhvcml0eU5hbWU7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFjY291bnRLZXk7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSBhdXRob3JpdHkuYXV0aG9yaXR5OwotICAgICAgICAgICAgICAgICAgICBhY2NvdW50S2V5ID0gYXV0aG9yaXR5LmFjY291bnQubmFtZSArICIvIiArIGF1dGhvcml0eS5hY2NvdW50LnR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdSIgKyBhdXRob3JpdHkudXNlcklkOworICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8udGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSA9IGF1dGhvcml0eUluZm8udGFyZ2V0LnByb3ZpZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9IGF1dGhvcml0eUluZm8udGFyZ2V0LmFjY291bnQubmFtZSArICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGF1dGhvcml0eUluZm8udGFyZ2V0LmFjY291bnQudHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdSIgKyBhdXRob3JpdHlJbmZvLnRhcmdldC51c2VySWQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXV0aG9yaXR5SW5mby50YXJnZXQudGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSBhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlLmdldFBhY2thZ2VOYW1lKCkgKyAiLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlLmdldENsYXNzTmFtZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1IiArIGF1dGhvcml0eUluZm8udGFyZ2V0LnVzZXJJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRLZXkgPSAibm9uZSI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlOYW1lID0gIlVua25vd24iOworICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9ICJVbmtub3duIjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSAiVW5rbm93biI7CiAgICAgICAgICAgICAgICAgICAgIGFjY291bnRLZXkgPSAiVW5rbm93biI7CkBAIC0xNjEwLDE0ICsxNzAyLDI1IEBACiAgICAgICAgICAgICAgICAgaWYgKGV4dHJhcyA9PSBudWxsIHx8IGV4dHJhcy5zaXplKCkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmluYWwgU3luY1N0b3JhZ2VFbmdpbmUuQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkKKyAgICAgICAgICAgICAgICBmaW5hbCBTeW5jU3RvcmFnZUVuZ2luZS5BdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8KICAgICAgICAgICAgICAgICAgICAgICAgID0gbVN5bmNTdG9yYWdlRW5naW5lLmdldEF1dGhvcml0eShpdGVtLmF1dGhvcml0eUlkKTsKICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5TmFtZTsKICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYWNjb3VudEtleTsKLSAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSA9IGF1dGhvcml0eS5hdXRob3JpdHk7Ci0gICAgICAgICAgICAgICAgICAgIGFjY291bnRLZXkgPSBhdXRob3JpdHkuYWNjb3VudC5uYW1lICsgIi8iICsgYXV0aG9yaXR5LmFjY291bnQudHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1IiArIGF1dGhvcml0eS51c2VySWQ7CisgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5SW5mby50YXJnZXQudGFyZ2V0X3Byb3ZpZGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlOYW1lID0gYXV0aG9yaXR5SW5mby50YXJnZXQucHJvdmlkZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50S2V5ID0gYXV0aG9yaXR5SW5mby50YXJnZXQuYWNjb3VudC5uYW1lICsgIi8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYXV0aG9yaXR5SW5mby50YXJnZXQuYWNjb3VudC50eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1IiArIGF1dGhvcml0eUluZm8udGFyZ2V0LnVzZXJJZDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdXRob3JpdHlJbmZvLnRhcmdldC50YXJnZXRfc2VydmljZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSA9IGF1dGhvcml0eUluZm8udGFyZ2V0LnNlcnZpY2UuZ2V0UGFja2FnZU5hbWUoKSArICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGF1dGhvcml0eUluZm8udGFyZ2V0LnNlcnZpY2UuZ2V0Q2xhc3NOYW1lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHUiICsgYXV0aG9yaXR5SW5mby50YXJnZXQudXNlcklkOworICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9ICJub25lIjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSAiVW5rbm93biI7CisgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50S2V5ID0gIlVua25vd24iOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSA9ICJVbmtub3duIjsKICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9ICJVbmtub3duIjsKQEAgLTE3NjEsMTAgKzE4NjQsMTEgQEAKIAogICAgIGNsYXNzIFNlcnZpY2VDb25uZWN0aW9uRGF0YSB7CiAgICAgICAgIHB1YmxpYyBmaW5hbCBBY3RpdmVTeW5jQ29udGV4dCBhY3RpdmVTeW5jQ29udGV4dDsKLSAgICAgICAgcHVibGljIGZpbmFsIElTeW5jQWRhcHRlciBzeW5jQWRhcHRlcjsKLSAgICAgICAgU2VydmljZUNvbm5lY3Rpb25EYXRhKEFjdGl2ZVN5bmNDb250ZXh0IGFjdGl2ZVN5bmNDb250ZXh0LCBJU3luY0FkYXB0ZXIgc3luY0FkYXB0ZXIpIHsKKyAgICAgICAgcHVibGljIGZpbmFsIElCaW5kZXIgYWRhcHRlcjsKKworICAgICAgICBTZXJ2aWNlQ29ubmVjdGlvbkRhdGEoQWN0aXZlU3luY0NvbnRleHQgYWN0aXZlU3luY0NvbnRleHQsIElCaW5kZXIgYWRhcHRlcikgewogICAgICAgICAgICAgdGhpcy5hY3RpdmVTeW5jQ29udGV4dCA9IGFjdGl2ZVN5bmNDb250ZXh0OwotICAgICAgICAgICAgdGhpcy5zeW5jQWRhcHRlciA9IHN5bmNBZGFwdGVyOworICAgICAgICAgICAgdGhpcy5hZGFwdGVyID0gYWRhcHRlcjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTc4NCwxMSArMTg4OCwxMSBAQAogICAgICAgICBwdWJsaWMgZmluYWwgU3luY05vdGlmaWNhdGlvbkluZm8gbVN5bmNOb3RpZmljYXRpb25JbmZvID0gbmV3IFN5bmNOb3RpZmljYXRpb25JbmZvKCk7CiAgICAgICAgIHByaXZhdGUgTG9uZyBtQWxhcm1TY2hlZHVsZVRpbWUgPSBudWxsOwogICAgICAgICBwdWJsaWMgZmluYWwgU3luY1RpbWVUcmFja2VyIG1TeW5jVGltZVRyYWNrZXIgPSBuZXcgU3luY1RpbWVUcmFja2VyKCk7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxQYWlyPEFjY291bnQsIFN0cmluZz4sIFBvd2VyTWFuYWdlci5XYWtlTG9jaz4gbVdha2VMb2NrcyA9Ci0gICAgICAgICAgICAgICAgTWFwcy5uZXdIYXNoTWFwKCk7CisgICAgICAgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxTdHJpbmcsIFBvd2VyTWFuYWdlci5XYWtlTG9jaz4gbVdha2VMb2NrcyA9IE1hcHMubmV3SGFzaE1hcCgpOworCiAgICAgICAgIHByaXZhdGUgTGlzdDxNZXNzYWdlPiBtQm9vdFF1ZXVlID0gbmV3IEFycmF5TGlzdDxNZXNzYWdlPigpOwogCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQm9vdENvbXBsZXRlZCgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIG9uQm9vdENvbXBsZXRlZCgpIHsKICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkJvb3QgY29tcGxldGVkLCBjbGVhcmluZyBib290IHF1ZXVlLiIpOwogICAgICAgICAgICAgfQpAQCAtMTgwMywxMiArMTkwNywxMSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSBQb3dlck1hbmFnZXIuV2FrZUxvY2sgZ2V0U3luY1dha2VMb2NrKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSkgewotICAgICAgICAgICAgZmluYWwgUGFpcjxBY2NvdW50LCBTdHJpbmc+IHdha2VMb2NrS2V5ID0gUGFpci5jcmVhdGUoYWNjb3VudCwgYXV0aG9yaXR5KTsKKyAgICAgICAgcHJpdmF0ZSBQb3dlck1hbmFnZXIuV2FrZUxvY2sgZ2V0U3luY1dha2VMb2NrKFN5bmNPcGVyYXRpb24gb3BlcmF0aW9uKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgd2FrZUxvY2tLZXkgPSBvcGVyYXRpb24ud2FrZUxvY2tLZXkoKTsKICAgICAgICAgICAgIFBvd2VyTWFuYWdlci5XYWtlTG9jayB3YWtlTG9jayA9IG1XYWtlTG9ja3MuZ2V0KHdha2VMb2NrS2V5KTsKICAgICAgICAgICAgIGlmICh3YWtlTG9jayA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSBTWU5DX1dBS0VfTE9DS19QUkVGSVggKyAiLyIgKyBhdXRob3JpdHkgKyAiLyIgKyBhY2NvdW50LnR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIi8iICsgYWNjb3VudC5uYW1lOworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gU1lOQ19XQUtFX0xPQ0tfUFJFRklYICsgb3BlcmF0aW9uLndha2VMb2NrTmFtZSgpOwogICAgICAgICAgICAgICAgIHdha2VMb2NrID0gbVBvd2VyTWFuYWdlci5uZXdXYWtlTG9jayhQb3dlck1hbmFnZXIuUEFSVElBTF9XQUtFX0xPQ0ssIG5hbWUpOwogICAgICAgICAgICAgICAgIHdha2VMb2NrLnNldFJlZmVyZW5jZUNvdW50ZWQoZmFsc2UpOwogICAgICAgICAgICAgICAgIG1XYWtlTG9ja3MucHV0KHdha2VMb2NrS2V5LCB3YWtlTG9jayk7CkBAIC0xODYxLDcgKzE5NjQsNiBAQAogICAgICAgICAgICAgc3VwZXIobG9vcGVyKTsKICAgICAgICAgfQogCi0gICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgICAgICBpZiAodHJ5RW5xdWV1ZU1lc3NhZ2VVbnRpbFJlYWR5VG9SdW4obXNnKSkgewogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4ODEsMTIgKzE5ODMsMTMgQEAKICAgICAgICAgICAgICAgICBlYXJsaWVzdEZ1dHVyZVBvbGxUaW1lID0gc2NoZWR1bGVSZWFkeVBlcmlvZGljU3luY3MoKTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3luY0hhbmRsZXIuTUVTU0FHRV9DQU5DRUw6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBhaXI8QWNjb3VudCwgU3RyaW5nPiBwYXlsb2FkID0gKFBhaXI8QWNjb3VudCwgU3RyaW5nPikgbXNnLm9iajsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IHBheWxvYWQgPSAoU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQpIG1zZy5vYmo7CisgICAgICAgICAgICAgICAgICAgICAgICBCdW5kbGUgZXh0cmFzID0gbXNnLnBlZWtEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJoYW5kbGVTeW5jSGFuZGxlck1lc3NhZ2U6IE1FU1NBR0VfU0VSVklDRV9DQU5DRUw6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGF5bG9hZC5maXJzdCArICIsICIgKyBwYXlsb2FkLnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBheWxvYWQgKyAiIGJ1bmRsZTogIiArIGV4dHJhcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVTeW5jTG9ja2VkKHBheWxvYWQuZmlyc3QsIG1zZy5hcmcxLCBwYXlsb2FkLnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVTeW5jTG9ja2VkKHBheWxvYWQsIGV4dHJhcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UGVuZGluZ1N5bmNUaW1lID0gbWF5YmVTdGFydE5leHRTeW5jTG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTg5NSwzNSArMTk5OCwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiaGFuZGxlU3luY0hhbmRsZXJNZXNzYWdlOiBNRVNTQUdFX1NZTkNfRklOSVNIRUQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNIYW5kbGVyTWVzc2FnZVBheWxvYWQgcGF5bG9hZCA9IChTeW5jSGFuZGxlck1lc3NhZ2VQYXlsb2FkKW1zZy5vYmo7CisgICAgICAgICAgICAgICAgICAgICAgICBTeW5jSGFuZGxlck1lc3NhZ2VQYXlsb2FkIHBheWxvYWQgPSAoU3luY0hhbmRsZXJNZXNzYWdlUGF5bG9hZCkgbXNnLm9iajsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTeW5jU3RpbGxBY3RpdmUocGF5bG9hZC5hY3RpdmVTeW5jQ29udGV4dCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJoYW5kbGVTeW5jSGFuZGxlck1lc3NhZ2U6IGRyb3BwaW5nIHNpbmNlIHRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJzeW5jIGlzIG5vIGxvbmdlciBhY3RpdmU6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGF5bG9hZC5hY3RpdmVTeW5jQ29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW5TeW5jRmluaXNoZWRPckNhbmNlbGVkTG9ja2VkKHBheWxvYWQuc3luY1Jlc3VsdCwgcGF5bG9hZC5hY3RpdmVTeW5jQ29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBydW5TeW5jRmluaXNoZWRPckNhbmNlbGVkTG9ja2VkKHBheWxvYWQuc3luY1Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5hY3RpdmVTeW5jQ29udGV4dCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIGEgc3luYyBqdXN0IGZpbmlzaGVkIGNoZWNrIGlmIGl0IGlzIHRpbWUgdG8gc3RhcnQgYSBuZXcgc3luYwogICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFBlbmRpbmdTeW5jVGltZSA9IG1heWJlU3RhcnROZXh0U3luY0xvY2tlZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgY2FzZSBTeW5jSGFuZGxlci5NRVNTQUdFX1NFUlZJQ0VfQ09OTkVDVEVEOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlQ29ubmVjdGlvbkRhdGEgbXNnRGF0YSA9IChTZXJ2aWNlQ29ubmVjdGlvbkRhdGEpbXNnLm9iajsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VDb25uZWN0aW9uRGF0YSBtc2dEYXRhID0gKFNlcnZpY2VDb25uZWN0aW9uRGF0YSkgbXNnLm9iajsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImhhbmRsZVN5bmNIYW5kbGVyTWVzc2FnZTogTUVTU0FHRV9TRVJWSUNFX0NPTk5FQ1RFRDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtc2dEYXRhLmFjdGl2ZVN5bmNDb250ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBhbiBvbGQgbWVzc2FnZQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3luY1N0aWxsQWN0aXZlKG1zZ0RhdGEuYWN0aXZlU3luY0NvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuQm91bmRUb1N5bmNBZGFwdGVyKG1zZ0RhdGEuYWN0aXZlU3luY0NvbnRleHQsIG1zZ0RhdGEuc3luY0FkYXB0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkJvdW5kVG9BZGFwdGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnRGF0YS5hY3RpdmVTeW5jQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ0RhdGEuYWRhcHRlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3luY0hhbmRsZXIuTUVTU0FHRV9TRVJWSUNFX0RJU0NPTk5FQ1RFRDogewogICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZlU3luY0NvbnRleHQgY3VycmVudFN5bmNDb250ZXh0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTZXJ2aWNlQ29ubmVjdGlvbkRhdGEpbXNnLm9iaikuYWN0aXZlU3luY0NvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU2VydmljZUNvbm5lY3Rpb25EYXRhKSBtc2cub2JqKS5hY3RpdmVTeW5jQ29udGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImhhbmRsZVN5bmNIYW5kbGVyTWVzc2FnZTogTUVTU0FHRV9TRVJWSUNFX0RJU0NPTk5FQ1RFRDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjdXJyZW50U3luY0NvbnRleHQpOwpAQCAtMTkzMiwxMiArMjAzOCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3luY1N0aWxsQWN0aXZlKGN1cnJlbnRTeW5jQ29udGV4dCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5jZWwgdGhlIHN5bmMgaWYgd2UgaGF2ZSBhIHN5bmNhZGFwdGVyLCB3aGljaCBtZWFucyBvbmUgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXRzdGFuZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3luY0NvbnRleHQubVN5bmNBZGFwdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN5bmNDb250ZXh0Lm1TeW5jQWRhcHRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3luY0NvbnRleHQubVN5bmNBZGFwdGVyLmNhbmNlbFN5bmMoY3VycmVudFN5bmNDb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gcmV0cnkgdGhpcyBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50U3luY0NvbnRleHQubVN5bmNTZXJ2aWNlQWRhcHRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3luY0NvbnRleHQubVN5bmNTZXJ2aWNlQWRhcHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYW5jZWxTeW5jKGN1cnJlbnRTeW5jQ29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJldHJ5IHRoaXMgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXRlbmQgdGhhdCB0aGUgc3luYyBmYWlsZWQgd2l0aCBhbiBJT0V4Y2VwdGlvbiwKQEAgLTE5ODIsOSArMjA5MSw0NiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGlzcGF0Y2hhYmxlKFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IHRhcmdldCkgeworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0xvZ2dhYmxlID0gTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSk7CisgICAgICAgICAgICBpZiAodGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIHN5bmMgaWYgdGhlIGFjY291bnQgb2YgdGhpcyBvcGVyYXRpb24gbm8gbG9uZ2VyIGV4aXN0cworICAgICAgICAgICAgICAgIEFjY291bnRBbmRVc2VyW10gYWNjb3VudHMgPSBtUnVubmluZ0FjY291bnRzOworICAgICAgICAgICAgICAgIGlmICghY29udGFpbnNBY2NvdW50QW5kVXNlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRzLCB0YXJnZXQuYWNjb3VudCwgdGFyZ2V0LnVzZXJJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW1TeW5jU3RvcmFnZUVuZ2luZS5nZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseSh0YXJnZXQudXNlcklkKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1TeW5jU3RvcmFnZUVuZ2luZS5nZXRTeW5jQXV0b21hdGljYWxseSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFjY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC51c2VySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wcm92aWRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBOb3Qgc2NoZWR1bGluZyBwZXJpb2RpYyBvcGVyYXRpb246IHN5bmMgdHVybmVkIG9mZi4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChnZXRJc1N5bmNhYmxlKHRhcmdldC5hY2NvdW50LCB0YXJnZXQudXNlcklkLCB0YXJnZXQucHJvdmlkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICIgICAgTm90IHNjaGVkdWxpbmcgcGVyaW9kaWMgb3BlcmF0aW9uOiBpc1N5bmNhYmxlID09IDAuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRJc1RhcmdldFNlcnZpY2VBY3RpdmUodGFyZ2V0LnNlcnZpY2UsIHRhcmdldC51c2VySWQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICIgICBOb3Qgc2NoZWR1bGluZyBwZXJpb2RpYyBvcGVyYXRpb246IGlzRW5hYmxlZCA9PSAwLiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBUdXJuIGFueSBwZXJpb2RpYyBzeW5jIG9wZXJhdGlvbnMgdGhhdCBhcmUgcmVhZHkgdG8gcnVuIGludG8gcGVuZGluZyBzeW5jIG9wZXJhdGlvbnMuCi0gICAgICAgICAqIEByZXR1cm4gdGhlIGRlc2lyZWQgc3RhcnQgdGltZSBvZiB0aGUgZWFybGllc3QgZnV0dXJlICBwZXJpb2RpYyBzeW5jIG9wZXJhdGlvbiwKKyAgICAgICAgICogQHJldHVybiB0aGUgZGVzaXJlZCBzdGFydCB0aW1lIG9mIHRoZSBlYXJsaWVzdCBmdXR1cmUgcGVyaW9kaWMgc3luYyBvcGVyYXRpb24sCiAgICAgICAgICAqIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBib290CiAgICAgICAgICAqLwogICAgICAgICBwcml2YXRlIGxvbmcgc2NoZWR1bGVSZWFkeVBlcmlvZGljU3luY3MoKSB7CkBAIC0xOTkyLDE0ICsyMTM4LDcgQEAKICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CiAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAic2NoZWR1bGVSZWFkeVBlcmlvZGljU3luY3MiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gYmFja2dyb3VuZERhdGFVc2FnZUFsbG93ZWQgPQotICAgICAgICAgICAgICAgICAgICBnZXRDb25uZWN0aXZpdHlNYW5hZ2VyKCkuZ2V0QmFja2dyb3VuZERhdGFTZXR0aW5nKCk7CiAgICAgICAgICAgICBsb25nIGVhcmxpZXN0RnV0dXJlUG9sbFRpbWUgPSBMb25nLk1BWF9WQUxVRTsKLSAgICAgICAgICAgIGlmICghYmFja2dyb3VuZERhdGFVc2FnZUFsbG93ZWQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZWFybGllc3RGdXR1cmVQb2xsVGltZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQWNjb3VudEFuZFVzZXJbXSBhY2NvdW50cyA9IG1SdW5uaW5nQWNjb3VudHM7CiAKICAgICAgICAgICAgIGZpbmFsIGxvbmcgbm93QWJzb2x1dGUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIGZpbmFsIGxvbmcgc2hpZnRlZE5vd0Fic29sdXRlID0gKDAgPCBub3dBYnNvbHV0ZSAtIG1TeW5jUmFuZG9tT2Zmc2V0TWlsbGlzKQpAQCAtMjAxMCw0MCArMjE0OSwzMSBAQAogICAgICAgICAgICAgZm9yIChQYWlyPEF1dGhvcml0eUluZm8sIFN5bmNTdGF0dXNJbmZvPiBpbmZvIDogaW5mb3MpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gPSBpbmZvLmZpcnN0OwogICAgICAgICAgICAgICAgIGZpbmFsIFN5bmNTdGF0dXNJbmZvIHN0YXR1cyA9IGluZm8uc2Vjb25kOwotICAgICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShhdXRob3JpdHlJbmZvLmF1dGhvcml0eSkpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiR290IGFuIGVtcHR5IHByb3ZpZGVyIHN0cmluZy4gU2tpcHBpbmc6ICIgKyBhdXRob3JpdHlJbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIHN5bmMgaWYgdGhlIGFjY291bnQgb2YgdGhpcyBvcGVyYXRpb24gbm8gbG9uZ2VyIGV4aXN0cwotICAgICAgICAgICAgICAgIGlmICghY29udGFpbnNBY2NvdW50QW5kVXNlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRzLCBhdXRob3JpdHlJbmZvLmFjY291bnQsIGF1dGhvcml0eUluZm8udXNlcklkKSkgeworCisgICAgICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGF1dGhvcml0eUluZm8udGFyZ2V0LnByb3ZpZGVyKSkgeworICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJHb3QgYW4gZW1wdHkgcHJvdmlkZXIgc3RyaW5nLiBTa2lwcGluZzogIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBhdXRob3JpdHlJbmZvLnRhcmdldC5wcm92aWRlcik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICghbVN5bmNTdG9yYWdlRW5naW5lLmdldE1hc3RlclN5bmNBdXRvbWF0aWNhbGx5KGF1dGhvcml0eUluZm8udXNlcklkKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1TeW5jU3RvcmFnZUVuZ2luZS5nZXRTeW5jQXV0b21hdGljYWxseSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hY2NvdW50LCBhdXRob3JpdHlJbmZvLnVzZXJJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hdXRob3JpdHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChnZXRJc1N5bmNhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hY2NvdW50LCBhdXRob3JpdHlJbmZvLnVzZXJJZCwgYXV0aG9yaXR5SW5mby5hdXRob3JpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0Rpc3BhdGNoYWJsZShhdXRob3JpdHlJbmZvLnRhcmdldCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIE4gPSBhdXRob3JpdHlJbmZvLnBlcmlvZGljU3luY3Muc2l6ZSgpOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFBlcmlvZGljU3luYyBzeW5jID0gYXV0aG9yaXR5SW5mby5wZXJpb2RpY1N5bmNzLmdldChpKTsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgQnVuZGxlIGV4dHJhcyA9IHN5bmMuZXh0cmFzOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHBlcmlvZEluTWlsbGlzID0gc3luYy5wZXJpb2QgKiAxMDAwOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGZsZXhJbk1pbGxpcyA9IHN5bmMuZmxleFRpbWUgKiAxMDAwOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBMb25nIHBlcmlvZEluTWlsbGlzID0gc3luYy5wZXJpb2QgKiAxMDAwOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBMb25nIGZsZXhJbk1pbGxpcyA9IHN5bmMuZmxleFRpbWUgKiAxMDAwOwogICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIGlmIHRoZSBwZXJpb2QgaXMgaW52YWxpZC4KICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmlvZEluTWlsbGlzIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgd2hlbiB0aGlzIHBlcmlvZGljIHN5bmMgd2FzIGxhc3Qgc2NoZWR1bGVkIHRvIHJ1bi4KICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBsYXN0UG9sbFRpbWVBYnNvbHV0ZSA9IHN0YXR1cy5nZXRQZXJpb2RpY1N5bmNUaW1lKGkpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHNoaWZ0ZWRMYXN0UG9sbFRpbWVBYnNvbHV0ZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgPCBsYXN0UG9sbFRpbWVBYnNvbHV0ZSAtIG1TeW5jUmFuZG9tT2Zmc2V0TWlsbGlzKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFzdFBvbGxUaW1lQWJzb2x1dGUgLSBtU3luY1JhbmRvbU9mZnNldE1pbGxpcykgOiAwOwogICAgICAgICAgICAgICAgICAgICBsb25nIHJlbWFpbmluZ01pbGxpcwogICAgICAgICAgICAgICAgICAgICAgICAgPSBwZXJpb2RJbk1pbGxpcyAtIChzaGlmdGVkTm93QWJzb2x1dGUgJSBwZXJpb2RJbk1pbGxpcyk7CiAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZVNpbmNlTGFzdFJ1bk1pbGxpcwpAQCAtMjA1NCwxMiArMjE4NCwxMyBAQAogICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJ1bkVhcmx5ID0gcmVtYWluaW5nTWlsbGlzIDw9IGZsZXhJbk1pbGxpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRpbWVTaW5jZUxhc3RSdW5NaWxsaXMgPiBwZXJpb2RJbk1pbGxpcyAtIGZsZXhJbk1pbGxpczsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgInN5bmM6ICIgKyBpICsgIiBmb3IgIiArIGF1dGhvcml0eUluZm8uYXV0aG9yaXR5ICsgIi4iCisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJzeW5jOiAiICsgaSArICIgZm9yICIgKyBhdXRob3JpdHlJbmZvLnRhcmdldCArICIuIgogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHBlcmlvZDogIiArIChwZXJpb2RJbk1pbGxpcykKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBmbGV4OiAiICsgKGZsZXhJbk1pbGxpcykKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiByZW1haW5pbmc6ICIgKyAocmVtYWluaW5nTWlsbGlzKQogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRpbWVfc2luY2VfbGFzdDogIiArIHRpbWVTaW5jZUxhc3RSdW5NaWxsaXMKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBsYXN0IHBvbGwgYWJzb2w6ICIgKyBsYXN0UG9sbFRpbWVBYnNvbHV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGxhc3QgcG9sbCBzaGlmZWQ6ICIgKyBzaGlmdGVkTGFzdFBvbGxUaW1lQWJzb2x1dGUKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzaGlmdGVkIG5vdzogIiArIHNoaWZ0ZWROb3dBYnNvbHV0ZQogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHJ1bl9lYXJseTogIiArIHJ1bkVhcmx5KTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjA3Myw0MSArMjIwNCw0OSBAQAogICAgICAgICAgICAgICAgICAgICAgKiBmdXR1cmUsIHN5bmMgbm93IGFuZCByZWluaXRpYWxpemUuIFRoaXMgY2FuIGhhcHBlbiBmb3IKICAgICAgICAgICAgICAgICAgICAgICogZXhhbXBsZSBpZiB0aGUgdXNlciBjaGFuZ2VkIHRoZSB0aW1lLCBzeW5jZWQgYW5kIGNoYW5nZWQKICAgICAgICAgICAgICAgICAgICAgICogYmFjay4KLSAgICAgICAgICAgICAgICAgICAgICogQ2FzZSAzOiBJZiB3ZSBmYWlsZWQgdG8gc3luYyBhdCB0aGUgbGFzdCBzY2hlZHVsZWQKLSAgICAgICAgICAgICAgICAgICAgICogdGltZS4KKyAgICAgICAgICAgICAgICAgICAgICogQ2FzZSAzOiBJZiB3ZSBmYWlsZWQgdG8gc3luYyBhdCB0aGUgbGFzdCBzY2hlZHVsZWQgdGltZS4KICAgICAgICAgICAgICAgICAgICAgICogQ2FzZSA0OiBUaGlzIHN5bmMgaXMgY2xvc2UgZW5vdWdoIHRvIHRoZSB0aW1lIHRoYXQgd2UgY2FuIHNjaGVkdWxlIGl0LgogICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bkVhcmx5IC8vIENhc2UgNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHJlbWFpbmluZ01pbGxpcyA9PSBwZXJpb2RJbk1pbGxpcyAvLyBDYXNlIDEKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ01pbGxpcyA9PSBwZXJpb2RJbk1pbGxpcyAvLyBDYXNlIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBsYXN0UG9sbFRpbWVBYnNvbHV0ZSA+IG5vd0Fic29sdXRlIC8vIENhc2UgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRpbWVTaW5jZUxhc3RSdW5NaWxsaXMgPj0gcGVyaW9kSW5NaWxsaXMpIHsgLy8gQ2FzZSAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGltZVNpbmNlTGFzdFJ1bk1pbGxpcyA+PSBwZXJpb2RJbk1pbGxpcyAvLyBDYXNlIDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBydW5FYXJseSkgeyAvLyBDYXNlIDQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN5bmMgbm93Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFBhaXI8TG9uZywgTG9uZz4gYmFja29mZiA9IG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRCYWNrb2ZmKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmFjY291bnQsIGF1dGhvcml0eUluZm8udXNlcklkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmF1dGhvcml0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZWdpc3RlcmVkU2VydmljZXNDYWNoZS5TZXJ2aWNlSW5mbzxTeW5jQWRhcHRlclR5cGU+IHN5bmNBZGFwdGVySW5mbzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mbyA9IG1TeW5jQWRhcHRlcnMuZ2V0U2VydmljZUluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNBZGFwdGVyVHlwZS5uZXdLZXkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hdXRob3JpdHksIGF1dGhvcml0eUluZm8uYWNjb3VudC50eXBlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby51c2VySWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmNBZGFwdGVySW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCB0YXJnZXQgPSBhdXRob3JpdHlJbmZvLnRhcmdldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFBhaXI8TG9uZywgTG9uZz4gYmFja29mZiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRCYWNrb2ZmKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuc2V0UGVyaW9kaWNTeW5jVGltZShhdXRob3JpdHlJbmZvLmlkZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnBlcmlvZGljU3luY3MuZ2V0KGkpLCBub3dBYnNvbHV0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZVN5bmNPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTeW5jT3BlcmF0aW9uKGF1dGhvcml0eUluZm8uYWNjb3VudCwgYXV0aG9yaXR5SW5mby51c2VySWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY09wZXJhdGlvbi5SRUFTT05fUEVSSU9ESUMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX1BFUklPRElDLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYXV0aG9yaXR5LCBleHRyYXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBydW50aW1lICovLCAwIC8qIGZsZXggKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrb2ZmICE9IG51bGwgPyBiYWNrb2ZmLmZpcnN0IDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0RGVsYXlVbnRpbFRpbWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmFjY291bnQsIGF1dGhvcml0eUluZm8udXNlcklkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hdXRob3JpdHkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mby50eXBlLmFsbG93UGFyYWxsZWxTeW5jcygpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZWdpc3RlcmVkU2VydmljZXNDYWNoZS5TZXJ2aWNlSW5mbzxTeW5jQWRhcHRlclR5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mbyA9IG1TeW5jQWRhcHRlcnMuZ2V0U2VydmljZUluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jQWRhcHRlclR5cGUubmV3S2V5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucHJvdmlkZXIsIHRhcmdldC5hY2NvdW50LnR5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnVzZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmNBZGFwdGVySW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZVN5bmNPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3luY09wZXJhdGlvbih0YXJnZXQuYWNjb3VudCwgdGFyZ2V0LnVzZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY09wZXJhdGlvbi5SRUFTT05fUEVSSU9ESUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlNPVVJDRV9QRVJJT0RJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnByb3ZpZGVyLCBleHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogcnVudGltZSAqLywgMCAvKiBmbGV4ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrb2ZmICE9IG51bGwgPyBiYWNrb2ZmLmZpcnN0IDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLmdldERlbGF5VW50aWxUaW1lKHRhcmdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mby50eXBlLmFsbG93UGFyYWxsZWxTeW5jcygpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC50YXJnZXRfc2VydmljZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlU3luY09wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTeW5jT3BlcmF0aW9uKHRhcmdldC5zZXJ2aWNlLCB0YXJnZXQudXNlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jT3BlcmF0aW9uLlJFQVNPTl9QRVJJT0RJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX1BFUklPRElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogcnVudGltZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBmbGV4ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrb2ZmICE9IG51bGwgPyBiYWNrb2ZmLmZpcnN0IDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLmdldERlbGF5VW50aWxUaW1lKHRhcmdldCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHdoZW4gdGhpcyBwZXJpb2RpYyBzeW5jIHNob3VsZCBuZXh0IHJ1bi4KICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXh0UG9sbFRpbWVBYnNvbHV0ZTsKQEAgLTIxNTQsOCArMjI5Myw3IEBACiAKICAgICAgICAgICAgIC8vIElmIHRoZSBhY2NvdW50cyBhcmVuJ3Qga25vd24geWV0IHRoZW4gd2UgYXJlbid0IHJlYWR5IHRvIHJ1bi4gV2Ugd2lsbCBiZSBraWNrZWQKICAgICAgICAgICAgIC8vIHdoZW4gdGhlIGFjY291bnQgbG9va3VwIHJlcXVlc3QgZG9lcyBjb21wbGV0ZS4KLSAgICAgICAgICAgIEFjY291bnRBbmRVc2VyW10gYWNjb3VudHMgPSBtUnVubmluZ0FjY291bnRzOwotICAgICAgICAgICAgaWYgKGFjY291bnRzID09IElOSVRJQUxfQUNDT1VOVFNfQVJSQVkpIHsKKyAgICAgICAgICAgIGlmIChtUnVubmluZ0FjY291bnRzID09IElOSVRJQUxfQUNDT1VOVFNfQVJSQVkpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgewogICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJtYXliZVN0YXJ0TmV4dFN5bmM6IGFjY291bnRzIG5vdCBrbm93biwgc2tpcHBpbmciKTsKICAgICAgICAgICAgICAgICB9CkBAIC0yMTY1LDkgKzIzMDMsNiBAQAogICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGNvbnN1bWUgU3luY09wZXJhdGlvbnMgZnJvbSB0aGUgaGVhZCBvZiB0aGUgU3luY1F1ZXVlIHVudGlsIG9uZSBpcwogICAgICAgICAgICAgLy8gZm91bmQgdGhhdCBpcyBydW5uYWJsZSAobm90IGRpc2FibGVkLCBldGMpLiBJZiB0aGF0IG9uZSBpcyByZWFkeSB0byBydW4gdGhlbgogICAgICAgICAgICAgLy8gc3RhcnQgaXQsIG90aGVyd2lzZSBqdXN0IGdldCBvdXQuCi0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGJhY2tncm91bmREYXRhVXNhZ2VBbGxvd2VkID0KLSAgICAgICAgICAgICAgICAgICAgZ2V0Q29ubmVjdGl2aXR5TWFuYWdlcigpLmdldEJhY2tncm91bmREYXRhU2V0dGluZygpOwotCiAgICAgICAgICAgICBmaW5hbCBsb25nIG5vdyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwogCiAgICAgICAgICAgICAvLyB3aWxsIGJlIHNldCB0byB0aGUgbmV4dCB0aW1lIHRoYXQgYSBzeW5jIHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBydW5uaW5nCkBAIC0yMTg5LDQwICsyMzI0LDIzIEBACiAgICAgICAgICAgICAgICAgd2hpbGUgKG9wZXJhdGlvbkl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBTeW5jT3BlcmF0aW9uIG9wID0gb3BlcmF0aW9uSXRlcmF0b3IubmV4dCgpOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIERyb3AgdGhlIHN5bmMgaWYgdGhlIGFjY291bnQgb2YgdGhpcyBvcGVyYXRpb24gbm8gbG9uZ2VyIGV4aXN0cy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250YWluc0FjY291bnRBbmRVc2VyKGFjY291bnRzLCBvcC5hY2NvdW50LCBvcC51c2VySWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25JdGVyYXRvci5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5kZWxldGVGcm9tUGVuZGluZyhvcC5wZW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBhY2NvdW50IGRvZXNuJ3QgZXhpc3QuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIERyb3AgdGhpcyBzeW5jIHJlcXVlc3QgaWYgaXQgaXNuJ3Qgc3luY2FibGUuCi0gICAgICAgICAgICAgICAgICAgIGludCBzeW5jYWJsZVN0YXRlID0gZ2V0SXNTeW5jYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5hY2NvdW50LCBvcC51c2VySWQsIG9wLmF1dGhvcml0eSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzeW5jYWJsZVN0YXRlID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkl0ZXJhdG9yLnJlbW92ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLmRlbGV0ZUZyb21QZW5kaW5nKG9wLnBlbmRpbmdPcGVyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICIgICAgRHJvcHBpbmcgc3luYyBvcGVyYXRpb246IGlzU3luY2FibGUgPT0gMC4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgbm90IHJ1bm5pbmcsIGRyb3AgdGhlIHJlcXVlc3QuCi0gICAgICAgICAgICAgICAgICAgIGlmICghYWN0aXZpdHlNYW5hZ2VyLmlzVXNlclJ1bm5pbmcob3AudXNlcklkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVXNlckluZm8gdXNlckluZm8gPSBtVXNlck1hbmFnZXIuZ2V0VXNlckluZm8ob3AudXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgbm90IHJ1bm5pbmcsIHNraXAgdGhlIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgIGlmICghYWN0aXZpdHlNYW5hZ2VyLmlzVXNlclJ1bm5pbmcob3AudGFyZ2V0LnVzZXJJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFVzZXJJbmZvIHVzZXJJbmZvID0gbVVzZXJNYW5hZ2VyLmdldFVzZXJJbmZvKG9wLnRhcmdldC51c2VySWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkVXNlcnMuYWRkKG9wLnVzZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZFVzZXJzLmFkZChvcC50YXJnZXQudXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiB1c2VyIG5vdCBydW5uaW5nLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBEcm9wcGluZyBhbGwgc3luYyBvcGVyYXRpb25zIGZvciArICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb3AudGFyZ2V0LnVzZXJJZCArICI6IHVzZXIgbm90IHJ1bm5pbmcuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQotCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPcGVyYXRpb25WYWxpZExvY2tlZChvcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkl0ZXJhdG9yLnJlbW92ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLmRlbGV0ZUZyb21QZW5kaW5nKG9wLnBlbmRpbmdPcGVyYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgcnVuIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZSwgZXZlbiBnaXZlbiB0aGUgZmxleGlibGUgc2NoZWR1bGluZywKICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSB0aW1lLgogICAgICAgICAgICAgICAgICAgICBpZiAob3AuZWZmZWN0aXZlUnVuVGltZSAtIG9wLmZsZXhUaW1lID4gbm93KSB7CkBAIC0yMjMwLDUxICsyMzQ4LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFJlYWR5VG9SdW5UaW1lID0gb3AuZWZmZWN0aXZlUnVuVGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBTeW5jIHRvbyBmYXIgaW4gZnV0dXJlLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBOb3QgcnVubmluZyBzeW5jIG9wZXJhdGlvbjogU3luYyB0b28gZmFyIGluIGZ1dHVyZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJlZmZlY3RpdmU6ICIgKyBvcC5lZmZlY3RpdmVSdW5UaW1lICsgIiBmbGV4OiAiICsgb3AuZmxleFRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBub3c6ICIgKyBub3cpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb3AgaXNuJ3QgYWxsb3dlZCBvbiBtZXRlcmVkIG5ldHdvcmtzIGFuZCB3ZSdyZSBvbiBvbmUsIGRyb3AgaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChnZXRDb25uZWN0aXZpdHlNYW5hZ2VyKCkuaXNBY3RpdmVOZXR3b3JrTWV0ZXJlZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3AuaXNNZXRlcmVkRGlzYWxsb3dlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25JdGVyYXRvci5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5kZWxldGVGcm9tUGVuZGluZyhvcC5wZW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogY2hhbmdlIHRoaXMgYmVoYXZpb3VyIGZvciBub24tcmVnaXN0ZXJlZCBzeW5jcy4KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVnaXN0ZXJlZFNlcnZpY2VzQ2FjaGUuU2VydmljZUluZm88U3luY0FkYXB0ZXJUeXBlPiBzeW5jQWRhcHRlckluZm87Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mbyA9IG1TeW5jQWRhcHRlcnMuZ2V0U2VydmljZUluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY0FkYXB0ZXJUeXBlLm5ld0tleShvcC5hdXRob3JpdHksIG9wLmFjY291bnQudHlwZSksIG9wLnVzZXJJZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gb25seSBwcm9jZWVkIGlmIG5ldHdvcmsgaXMgY29ubmVjdGVkIGZvciByZXF1ZXN0aW5nIFVJRAotICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHVpZE5ldHdvcmtDb25uZWN0ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzeW5jQWRhcHRlckluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTmV0d29ya0luZm8gbmV0d29ya0luZm8gPSBnZXRDb25uZWN0aXZpdHlNYW5hZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEFjdGl2ZU5ldHdvcmtJbmZvRm9yVWlkKHN5bmNBZGFwdGVySW5mby51aWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgdWlkTmV0d29ya0Nvbm5lY3RlZCA9IG5ldHdvcmtJbmZvICE9IG51bGwgJiYgbmV0d29ya0luZm8uaXNDb25uZWN0ZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpZE5ldHdvcmtDb25uZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIHN5bmMgaWYgaXQgaXNuJ3QgbWFudWFsLCBhbmQgYXV0byBzeW5jIG9yCi0gICAgICAgICAgICAgICAgICAgIC8vIGJhY2tncm91bmQgZGF0YSB1c2FnZSBpcyBkaXNhYmxlZCBvciBuZXR3b3JrIGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIGRpc2Nvbm5lY3RlZCBmb3IgdGhlIHRhcmdldCBVSUQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghb3AuZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9TRVRUSU5HUywgZmFsc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHN5bmNhYmxlU3RhdGUgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICghbVN5bmNTdG9yYWdlRW5naW5lLmdldE1hc3RlclN5bmNBdXRvbWF0aWNhbGx5KG9wLnVzZXJJZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWJhY2tncm91bmREYXRhVXNhZ2VBbGxvd2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICF1aWROZXR3b3JrQ29ubmVjdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0U3luY0F1dG9tYXRpY2FsbHkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5hY2NvdW50LCBvcC51c2VySWQsIG9wLmF1dGhvcml0eSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25JdGVyYXRvci5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5kZWxldGVGcm9tUGVuZGluZyhvcC5wZW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgc3luYyB0byBiZSBydW4uCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYWRkKG9wKTsKICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBmb3IgKEludGVnZXIgdXNlciA6IHJlbW92ZWRVc2VycykgewogICAgICAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIHN0aWxsIHJlbW92ZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKG1Vc2VyTWFuYWdlci5nZXRVc2VySW5mbyh1c2VyKSA9PSBudWxsKSB7CkBAIC0yMzE2LDEzICsyMzk5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZU9wLmFjY291bnQudHlwZS5lcXVhbHMoY2FuZGlkYXRlLmFjY291bnQudHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhY3RpdmVPcC5hdXRob3JpdHkuZXF1YWxzKGNhbmRpZGF0ZS5hdXRob3JpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWN0aXZlT3AudXNlcklkID09IGNhbmRpZGF0ZS51c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoIWFjdGl2ZU9wLmFsbG93UGFyYWxsZWxTeW5jcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhY3RpdmVPcC5hY2NvdW50Lm5hbWUuZXF1YWxzKGNhbmRpZGF0ZS5hY2NvdW50Lm5hbWUpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlT3AuaXNDb25mbGljdChjYW5kaWRhdGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdCA9IGFjdGl2ZVN5bmNDb250ZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgYnJlYWsgb3V0IHNpbmNlIHdlIHdhbnQgdG8gZG8gYSBmdWxsIGNvdW50IG9mIHRoZSB2YXJpZXRpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IGJyZWFrIG91dCBzaW5jZSB3ZSB3YW50IHRvIGRvIGEgZnVsbCBjb3VudCBvZiB0aGUgdmFyaWV0aWVzLgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUlzSW5pdGlhbGl6YXRpb24gPT0gYWN0aXZlT3AuaXNJbml0aWFsaXphdGlvbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZVN5bmNDb250ZXh0Lm1TdGFydFRpbWUgKyBNQVhfVElNRV9QRVJfU1lOQyA8IG5vdykgewpAQCAtMjM3Miw4ICsyNDUxLDggQEAKICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbnVsbC4gUmVzY2hlZHVsZSB0aGUgYWN0aXZlIHN5bmMgYW5kIHN0YXJ0IHRoZSBjYW5kaWRhdGUuCiAgICAgICAgICAgICAgICAgICAgIHRvUmVzY2hlZHVsZSA9IG9sZGVzdE5vbkV4cGVkaXRlZFJlZ3VsYXI7CiAgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiY2FuY2VsaW5nIGFuZCByZXNjaGVkdWxpbmcgc3luYyBzaW5jZSBhbiBleHBlZGl0ZWQgaXMgcmVhZHkgdG8gcnVuLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb2xkZXN0Tm9uRXhwZWRpdGVkUmVndWxhcik7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJjYW5jZWxpbmcgYW5kIHJlc2NoZWR1bGluZyBzeW5jIHNpbmNlIGFuIGV4cGVkaXRlZCBpcyByZWFkeSB0byIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHJ1biwgIiArIG9sZGVzdE5vbkV4cGVkaXRlZFJlZ3VsYXIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb25nUnVubmluZyAhPSBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FuZGlkYXRlSXNJbml0aWFsaXphdGlvbgpAQCAtMjQwMiw3ICsyNDgxLDExNCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gbmV4dFJlYWR5VG9SdW5UaW1lOwotICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogRGV0ZXJtaW5lIGlmIGEgc3luYyBpcyBubyBsb25nZXIgdmFsaWQgYW5kIHNob3VsZCBiZSBkcm9wcGVkIGZyb20gdGhlIHN5bmMgcXVldWUgYW5kIGl0cworICAgICAgICAgKiBwZW5kaW5nIG9wIGRlbGV0ZWQuCisgICAgICAgICAqIEBwYXJhbSBvcCBvcGVyYXRpb24gZm9yIHdoaWNoIHRoZSBzeW5jIGlzIHRvIGJlIHNjaGVkdWxlZC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc09wZXJhdGlvblZhbGlkTG9ja2VkKFN5bmNPcGVyYXRpb24gb3ApIHsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMb2dnYWJsZSA9IExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpOworICAgICAgICAgICAgaW50IHRhcmdldFVpZDsKKyAgICAgICAgICAgIGludCBzdGF0ZTsKKyAgICAgICAgICAgIGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IHRhcmdldCA9IG9wLnRhcmdldDsKKyAgICAgICAgICAgIGJvb2xlYW4gc3luY0VuYWJsZWQgPSBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkodGFyZ2V0LnVzZXJJZCk7CisgICAgICAgICAgICBpZiAodGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgIC8vIERyb3AgdGhlIHN5bmMgaWYgdGhlIGFjY291bnQgb2YgdGhpcyBvcGVyYXRpb24gbm8gbG9uZ2VyIGV4aXN0cy4KKyAgICAgICAgICAgICAgICBBY2NvdW50QW5kVXNlcltdIGFjY291bnRzID0gbVJ1bm5pbmdBY2NvdW50czsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5zQWNjb3VudEFuZFVzZXIoYWNjb3VudHMsIHRhcmdldC5hY2NvdW50LCB0YXJnZXQudXNlcklkKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBhY2NvdW50IGRvZXNuJ3QgZXhpc3QuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBEcm9wIHRoaXMgc3luYyByZXF1ZXN0IGlmIGl0IGlzbid0IHN5bmNhYmxlLgorICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0SXNTeW5jYWJsZSh0YXJnZXQuYWNjb3VudCwgdGFyZ2V0LnVzZXJJZCwgdGFyZ2V0LnByb3ZpZGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBpc1N5bmNhYmxlID09IDAuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzeW5jRW5hYmxlZCA9IHN5bmNFbmFibGVkICYmIG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRTeW5jQXV0b21hdGljYWxseSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hY2NvdW50LCB0YXJnZXQudXNlcklkLCB0YXJnZXQucHJvdmlkZXIpOworCisgICAgICAgICAgICAgICAgZmluYWwgUmVnaXN0ZXJlZFNlcnZpY2VzQ2FjaGUuU2VydmljZUluZm88U3luY0FkYXB0ZXJUeXBlPiBzeW5jQWRhcHRlckluZm87CisgICAgICAgICAgICAgICAgc3luY0FkYXB0ZXJJbmZvID0gbVN5bmNBZGFwdGVycy5nZXRTZXJ2aWNlSW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNBZGFwdGVyVHlwZS5uZXdLZXkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wcm92aWRlciwgdGFyZ2V0LmFjY291bnQudHlwZSksIHRhcmdldC51c2VySWQpOworICAgICAgICAgICAgICAgIGlmIChzeW5jQWRhcHRlckluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0YXJnZXRVaWQgPSBzeW5jQWRhcHRlckluZm8udWlkOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICIgICAgRHJvcHBpbmcgc3luYyBvcGVyYXRpb246IE5vIHN5bmMgYWRhcHRlciByZWdpc3RlcmVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJmb3I6ICIgKyB0YXJnZXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC50YXJnZXRfc2VydmljZSkgeworICAgICAgICAgICAgICAgIHN0YXRlID0gbVN5bmNTdG9yYWdlRW5naW5lLmdldElzVGFyZ2V0U2VydmljZUFjdGl2ZSh0YXJnZXQuc2VydmljZSwgdGFyZ2V0LnVzZXJJZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDEgOiAwOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IENoYW5nZSB0aGlzIHRvIG5vdCBkcm9wIGRpc2FibGVkIHN5bmNzIC0ga2VlcCB0aGVtIGluIHRoZSBwZW5kaW5nIHF1ZXVlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBpc0FjdGl2ZSA9PSAwLiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlSW5mbyh0YXJnZXQuc2VydmljZSwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwbGljYXRpb25JbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVpZDsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChQYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBObyBzZXJ2aWNlIHJlZ2lzdGVyZWQgZm9yOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdGFyZ2V0LnNlcnZpY2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVua25vd24gdGFyZ2V0IGZvciBTeW5jIE9wOiAiICsgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGlnbm9yZSBzeXN0ZW0gc2V0dGluZ3MgdGhhdCBzcGVjaWZ5IHRoZSBzeW5jIGlzIGludmFsaWQgaWY6CisgICAgICAgICAgICAvLyAxKSBJdCdzIG1hbnVhbCAtIHdlIHRyeSBpdCBhbnl3YXkuIFdoZW4vaWYgaXQgZmFpbHMgaXQgd2lsbCBiZSByZXNjaGVkdWxlZC4KKyAgICAgICAgICAgIC8vICAgICAgb3IKKyAgICAgICAgICAgIC8vIDIpIGl0J3MgYW4gaW5pdGlhbGlzYXRpb24gc3luYyAtIHdlIGp1c3QgbmVlZCB0byBjb25uZWN0IHRvIGl0LgorICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpZ25vcmVTeXN0ZW1Db25maWd1cmF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgb3AuZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9TRVRUSU5HUywgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHx8IChzdGF0ZSA8IDApOworCisgICAgICAgICAgICAvLyBTeW5jIG5vdCBlbmFibGVkLgorICAgICAgICAgICAgaWYgKCFzeW5jRW5hYmxlZCAmJiAhaWdub3JlU3lzdGVtQ29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBEcm9wcGluZyBzeW5jIG9wZXJhdGlvbjogZGlzYWxsb3dlZCBieSBzZXR0aW5ncy9uZXR3b3JrLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBOZXR3b3JrIGRvd24uCisgICAgICAgICAgICBmaW5hbCBOZXR3b3JrSW5mbyBuZXR3b3JrSW5mbyA9IGdldENvbm5lY3Rpdml0eU1hbmFnZXIoKQorICAgICAgICAgICAgICAgICAgICAuZ2V0QWN0aXZlTmV0d29ya0luZm9Gb3JVaWQodGFyZ2V0VWlkKTsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdWlkTmV0d29ya0Nvbm5lY3RlZCA9IG5ldHdvcmtJbmZvICE9IG51bGwgJiYgbmV0d29ya0luZm8uaXNDb25uZWN0ZWQoKTsKKyAgICAgICAgICAgIGlmICghdWlkTmV0d29ya0Nvbm5lY3RlZCAmJiAhaWdub3JlU3lzdGVtQ29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBEcm9wcGluZyBzeW5jIG9wZXJhdGlvbjogZGlzYWxsb3dlZCBieSBzZXR0aW5ncy9uZXR3b3JrLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBNZXRlcmVkIG5ldHdvcmsuCisgICAgICAgICAgICBpZiAob3AuaXNOb3RBbGxvd2VkT25NZXRlcmVkKCkgJiYgZ2V0Q29ubmVjdGl2aXR5TWFuYWdlcigpLmlzQWN0aXZlTmV0d29ya01ldGVyZWQoKQorICAgICAgICAgICAgICAgICAgICAmJiAhaWdub3JlU3lzdGVtQ29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBEcm9wcGluZyBzeW5jIG9wZXJhdGlvbjogbm90IGFsbG93ZWQgb24gbWV0ZXJlZCBuZXR3b3JrLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBkaXNwYXRjaFN5bmNPcGVyYXRpb24oU3luY09wZXJhdGlvbiBvcCkgewogICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CkBAIC0yNDEyLDI3ICsyNTk4LDQ4IEBACiAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgc3luY0NvbnRleHQudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBjb25uZWN0IHRvIHRoZSBzeW5jIGFkYXB0ZXIKLSAgICAgICAgICAgIFN5bmNBZGFwdGVyVHlwZSBzeW5jQWRhcHRlclR5cGUgPSBTeW5jQWRhcHRlclR5cGUubmV3S2V5KG9wLmF1dGhvcml0eSwgb3AuYWNjb3VudC50eXBlKTsKLSAgICAgICAgICAgIGZpbmFsIFJlZ2lzdGVyZWRTZXJ2aWNlc0NhY2hlLlNlcnZpY2VJbmZvPFN5bmNBZGFwdGVyVHlwZT4gc3luY0FkYXB0ZXJJbmZvOwotICAgICAgICAgICAgc3luY0FkYXB0ZXJJbmZvID0gbVN5bmNBZGFwdGVycy5nZXRTZXJ2aWNlSW5mbyhzeW5jQWRhcHRlclR5cGUsIG9wLnVzZXJJZCk7Ci0gICAgICAgICAgICBpZiAoc3luY0FkYXB0ZXJJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJjYW4ndCBmaW5kIGEgc3luYyBhZGFwdGVyIGZvciAiICsgc3luY0FkYXB0ZXJUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlbW92aW5nIHNldHRpbmdzIGZvciBpdCIpOwotICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5yZW1vdmVBdXRob3JpdHkob3AuYWNjb3VudCwgb3AudXNlcklkLCBvcC5hdXRob3JpdHkpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIENvbm5lY3QgdG8gdGhlIHN5bmMgYWRhcHRlci4KKyAgICAgICAgICAgIGludCB0YXJnZXRVaWQ7CisgICAgICAgICAgICBDb21wb25lbnROYW1lIHRhcmdldENvbXBvbmVudDsKKyAgICAgICAgICAgIGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm8gPSBvcC50YXJnZXQ7CisgICAgICAgICAgICBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICBTeW5jQWRhcHRlclR5cGUgc3luY0FkYXB0ZXJUeXBlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNBZGFwdGVyVHlwZS5uZXdLZXkoaW5mby5wcm92aWRlciwgaW5mby5hY2NvdW50LnR5cGUpOworICAgICAgICAgICAgICAgIGZpbmFsIFJlZ2lzdGVyZWRTZXJ2aWNlc0NhY2hlLlNlcnZpY2VJbmZvPFN5bmNBZGFwdGVyVHlwZT4gc3luY0FkYXB0ZXJJbmZvOworICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mbyA9IG1TeW5jQWRhcHRlcnMuZ2V0U2VydmljZUluZm8oc3luY0FkYXB0ZXJUeXBlLCBpbmZvLnVzZXJJZCk7CisgICAgICAgICAgICAgICAgaWYgKHN5bmNBZGFwdGVySW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImNhbid0IGZpbmQgYSBzeW5jIGFkYXB0ZXIgZm9yICIgKyBzeW5jQWRhcHRlclR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlbW92aW5nIHNldHRpbmdzIGZvciBpdCIpOworICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUucmVtb3ZlQXV0aG9yaXR5KGluZm8pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRhcmdldFVpZCA9IHN5bmNBZGFwdGVySW5mby51aWQ7CisgICAgICAgICAgICAgICAgdGFyZ2V0Q29tcG9uZW50ID0gc3luY0FkYXB0ZXJJbmZvLmNvbXBvbmVudE5hbWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFRPRE86IFN0b3JlIHRoZSB1aWQgb2YgdGhlIHNlcnZpY2UgYXMgcGFydCBvZiB0aGUgYXV0aG9yaXR5IGluZm8gaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAvLyBhdm9pZCB0aGlzIGNhbGw/CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlSW5mbyhpbmZvLnNlcnZpY2UsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGxpY2F0aW9uSW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51aWQ7CisgICAgICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudCA9IGluZm8uc2VydmljZTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIkNhbid0IGZpbmQgYSBzZXJ2aWNlIGZvciAiICsgaW5mby5zZXJ2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZW1vdmluZyBzZXR0aW5ncyBmb3IgaXQiKTsKKyAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLnJlbW92ZUF1dGhvcml0eShpbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgQWN0aXZlU3luY0NvbnRleHQgYWN0aXZlU3luY0NvbnRleHQgPQotICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aXZlU3luY0NvbnRleHQob3AsIGluc2VydFN0YXJ0U3luY0V2ZW50KG9wKSwgc3luY0FkYXB0ZXJJbmZvLnVpZCk7CisgICAgICAgICAgICAgICAgICAgIG5ldyBBY3RpdmVTeW5jQ29udGV4dChvcCwgaW5zZXJ0U3RhcnRTeW5jRXZlbnQob3ApLCB0YXJnZXRVaWQpOwogICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNJbmZvID0gbVN5bmNTdG9yYWdlRW5naW5lLmFkZEFjdGl2ZVN5bmMoYWN0aXZlU3luY0NvbnRleHQpOwogICAgICAgICAgICAgbUFjdGl2ZVN5bmNDb250ZXh0cy5hZGQoYWN0aXZlU3luY0NvbnRleHQpOwogICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiZGlzcGF0Y2hTeW5jT3BlcmF0aW9uOiBzdGFydGluZyAiICsgYWN0aXZlU3luY0NvbnRleHQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFhY3RpdmVTeW5jQ29udGV4dC5iaW5kVG9TeW5jQWRhcHRlcihzeW5jQWRhcHRlckluZm8sIG9wLnVzZXJJZCkpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJCaW5kIGF0dGVtcHQgZmFpbGVkIHRvICIgKyBzeW5jQWRhcHRlckluZm8pOworICAgICAgICAgICAgaWYgKCFhY3RpdmVTeW5jQ29udGV4dC5iaW5kVG9TeW5jQWRhcHRlcih0YXJnZXRDb21wb25lbnQsIGluZm8udXNlcklkKSkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkJpbmQgYXR0ZW1wdCBmYWlsZWQgLSB0YXJnZXQ6ICIgKyB0YXJnZXRDb21wb25lbnQpOwogICAgICAgICAgICAgICAgIGNsb3NlQWN0aXZlU3luY0NvbnRleHQoYWN0aXZlU3luY0NvbnRleHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTI0NDAsNDcgKzI2NDcsNTQgQEAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSB2b2lkIHJ1bkJvdW5kVG9TeW5jQWRhcHRlcihmaW5hbCBBY3RpdmVTeW5jQ29udGV4dCBhY3RpdmVTeW5jQ29udGV4dCwKLSAgICAgICAgICAgICAgSVN5bmNBZGFwdGVyIHN5bmNBZGFwdGVyKSB7Ci0gICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tU3luY0FkYXB0ZXIgPSBzeW5jQWRhcHRlcjsKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHJ1bkJvdW5kVG9BZGFwdGVyKGZpbmFsIEFjdGl2ZVN5bmNDb250ZXh0IGFjdGl2ZVN5bmNDb250ZXh0LAorICAgICAgICAgICAgICAgIElCaW5kZXIgc3luY0FkYXB0ZXIpIHsKICAgICAgICAgICAgIGZpbmFsIFN5bmNPcGVyYXRpb24gc3luY09wZXJhdGlvbiA9IGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tSXNMaW5rZWRUb0RlYXRoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzeW5jQWRhcHRlci5hc0JpbmRlcigpLmxpbmtUb0RlYXRoKGFjdGl2ZVN5bmNDb250ZXh0LCAwKTsKKyAgICAgICAgICAgICAgICBzeW5jQWRhcHRlci5saW5rVG9EZWF0aChhY3RpdmVTeW5jQ29udGV4dCwgMCk7CiAKLSAgICAgICAgICAgICAgICBzeW5jQWRhcHRlci5zdGFydFN5bmMoYWN0aXZlU3luY0NvbnRleHQsIHN5bmNPcGVyYXRpb24uYXV0aG9yaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5hY2NvdW50LCBzeW5jT3BlcmF0aW9uLmV4dHJhcyk7CisgICAgICAgICAgICAgICAgaWYgKHN5bmNPcGVyYXRpb24udGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tU3luY0FkYXB0ZXIgPSBJU3luY0FkYXB0ZXIuU3R1Yi5hc0ludGVyZmFjZShzeW5jQWRhcHRlcik7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jQWRhcHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0U3luYyhhY3RpdmVTeW5jQ29udGV4dCwgc3luY09wZXJhdGlvbi50YXJnZXQucHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24udGFyZ2V0LmFjY291bnQsIHN5bmNPcGVyYXRpb24uZXh0cmFzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN5bmNPcGVyYXRpb24udGFyZ2V0LnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jU2VydmljZUFkYXB0ZXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTeW5jU2VydmljZUFkYXB0ZXIuU3R1Yi5hc0ludGVyZmFjZShzeW5jQWRhcHRlcik7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jU2VydmljZUFkYXB0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zdGFydFN5bmMoYWN0aXZlU3luY0NvbnRleHQsIHN5bmNPcGVyYXRpb24uZXh0cmFzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmVtb3RlRXhjKSB7CiAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAibWF5YmVTdGFydE5leHRTeW5jOiBjYXVnaHQgYSBSZW1vdGVFeGNlcHRpb24sIHJlc2NoZWR1bGluZyIsIHJlbW90ZUV4Yyk7CiAgICAgICAgICAgICAgICAgY2xvc2VBY3RpdmVTeW5jQ29udGV4dChhY3RpdmVTeW5jQ29udGV4dCk7CiAgICAgICAgICAgICAgICAgaW5jcmVhc2VCYWNrb2ZmU2V0dGluZyhzeW5jT3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICBzY2hlZHVsZVN5bmNPcGVyYXRpb24obmV3IFN5bmNPcGVyYXRpb24oc3luY09wZXJhdGlvbikpOworICAgICAgICAgICAgICAgIHNjaGVkdWxlU3luY09wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTeW5jT3BlcmF0aW9uKHN5bmNPcGVyYXRpb24sIDBMIC8qIG5ld1J1blRpbWVGcm9tTm93ICovKSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGV4YykgewogICAgICAgICAgICAgICAgIGNsb3NlQWN0aXZlU3luY0NvbnRleHQoYWN0aXZlU3luY0NvbnRleHQpOwogICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhdWdodCBSdW50aW1lRXhjZXB0aW9uIHdoaWxlIHN0YXJ0aW5nIHRoZSBzeW5jICIgKyBzeW5jT3BlcmF0aW9uLCBleGMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSB2b2lkIGNhbmNlbEFjdGl2ZVN5bmNMb2NrZWQoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBDYW5jZWwgdGhlIHN5bmMgZm9yIHRoZSBwcm92aWRlZCB0YXJnZXQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBidW5kbGUuCisgICAgICAgICAqIEBwYXJhbSBpbmZvIGNhbiBoYXZlIG51bGwgZmllbGRzIHRvIGluZGljYXRlIGFsbCB0aGUgYWN0aXZlIHN5bmNzIGZvciB0aGF0IGZpZWxkLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkIGNhbmNlbEFjdGl2ZVN5bmNMb2NrZWQoU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbywgQnVuZGxlIGV4dHJhcykgewogICAgICAgICAgICAgQXJyYXlMaXN0PEFjdGl2ZVN5bmNDb250ZXh0PiBhY3RpdmVTeW5jcyA9CiAgICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8QWN0aXZlU3luY0NvbnRleHQ+KG1BY3RpdmVTeW5jQ29udGV4dHMpOwogICAgICAgICAgICAgZm9yIChBY3RpdmVTeW5jQ29udGV4dCBhY3RpdmVTeW5jQ29udGV4dCA6IGFjdGl2ZVN5bmNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVN5bmNDb250ZXh0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYW4gYWNjb3VudCB3YXMgc3BlY2lmaWVkIHRoZW4gb25seSBjYW5jZWwgdGhlIHN5bmMgaWYgaXQgbWF0Y2hlcwotICAgICAgICAgICAgICAgICAgICBpZiAoYWNjb3VudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY291bnQuZXF1YWxzKGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLmFjY291bnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IG9wSW5mbyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNPcGVyYXRpb24udGFyZ2V0OworICAgICAgICAgICAgICAgICAgICBpZiAoIW9wSW5mby5tYXRjaGVzU3BlYyhpbmZvKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYW4gYXV0aG9yaXR5IHdhcyBzcGVjaWZpZWQgdGhlbiBvbmx5IGNhbmNlbCB0aGUgc3luYyBpZiBpdCBtYXRjaGVzCi0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpdHkuZXF1YWxzKGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLmF1dGhvcml0eSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgdXNlcmlkIG1hdGNoZXMKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJJZCAhPSBVc2VySGFuZGxlLlVTRVJfQUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdXNlcklkICE9IGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLnVzZXJJZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmFzICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc3luY0V4dHJhc0VxdWFscyhhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi5leHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBubyBjb25maWcgc2V0dGluZ3MgKi8pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBydW5TeW5jRmluaXNoZWRPckNhbmNlbGVkTG9ja2VkKG51bGwgLyogbm8gcmVzdWx0IHNpbmNlIHRoaXMgaXMgYSBjYW5jZWwgKi8sCkBAIC0yNDkzLDE2ICsyNzA3LDIwIEBACiAgICAgICAgICAgICAgICAgQWN0aXZlU3luY0NvbnRleHQgYWN0aXZlU3luY0NvbnRleHQpIHsKICAgICAgICAgICAgIGJvb2xlYW4gaXNMb2dnYWJsZSA9IExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpOwogCisgICAgICAgICAgICBmaW5hbCBTeW5jT3BlcmF0aW9uIHN5bmNPcGVyYXRpb24gPSBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbjsKKyAgICAgICAgICAgIGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm8gPSBzeW5jT3BlcmF0aW9uLnRhcmdldDsKKwogICAgICAgICAgICAgaWYgKGFjdGl2ZVN5bmNDb250ZXh0Lm1Jc0xpbmtlZFRvRGVhdGgpIHsKLSAgICAgICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tU3luY0FkYXB0ZXIuYXNCaW5kZXIoKS51bmxpbmtUb0RlYXRoKGFjdGl2ZVN5bmNDb250ZXh0LCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNBZGFwdGVyLmFzQmluZGVyKCkudW5saW5rVG9EZWF0aChhY3RpdmVTeW5jQ29udGV4dCwgMCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNTZXJ2aWNlQWRhcHRlci5hc0JpbmRlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAudW5saW5rVG9EZWF0aChhY3RpdmVTeW5jQ29udGV4dCwgMCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFjdGl2ZVN5bmNDb250ZXh0Lm1Jc0xpbmtlZFRvRGVhdGggPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNsb3NlQWN0aXZlU3luY0NvbnRleHQoYWN0aXZlU3luY0NvbnRleHQpOwotCi0gICAgICAgICAgICBmaW5hbCBTeW5jT3BlcmF0aW9uIHN5bmNPcGVyYXRpb24gPSBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbjsKLQogICAgICAgICAgICAgZmluYWwgbG9uZyBlbGFwc2VkVGltZSA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpIC0gYWN0aXZlU3luY0NvbnRleHQubVN0YXJ0VGltZTsKLQogICAgICAgICAgICAgU3RyaW5nIGhpc3RvcnlNZXNzYWdlOwogICAgICAgICAgICAgaW50IGRvd25zdHJlYW1BY3Rpdml0eTsKICAgICAgICAgICAgIGludCB1cHN0cmVhbUFjdGl2aXR5OwpAQCAtMjU0NCw2ICsyNzYyLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIHJldHJ5IHRoaXMgaW4gdGhpcyBjYXNlCiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jU2VydmljZUFkYXB0ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNTZXJ2aWNlQWRhcHRlci5jYW5jZWxTeW5jKGFjdGl2ZVN5bmNDb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gcmV0cnkgdGhpcyBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBoaXN0b3J5TWVzc2FnZSA9IFN5bmNTdG9yYWdlRW5naW5lLk1FU0dfQ0FOQ0VMRUQ7CiAgICAgICAgICAgICAgICAgZG93bnN0cmVhbUFjdGl2aXR5ID0gMDsKQEAgLTI1NTMsMjQgKzI3NzcsMzUgQEAKICAgICAgICAgICAgIHN0b3BTeW5jRXZlbnQoYWN0aXZlU3luY0NvbnRleHQubUhpc3RvcnlSb3dJZCwgc3luY09wZXJhdGlvbiwgaGlzdG9yeU1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgIHVwc3RyZWFtQWN0aXZpdHksIGRvd25zdHJlYW1BY3Rpdml0eSwgZWxhcHNlZFRpbWUpOwogCi0gICAgICAgICAgICBpZiAoc3luY1Jlc3VsdCAhPSBudWxsICYmIHN5bmNSZXN1bHQudG9vTWFueURlbGV0aW9ucykgewotICAgICAgICAgICAgICAgIGluc3RhbGxIYW5kbGVUb29NYW55RGVsZXRlc05vdGlmaWNhdGlvbihzeW5jT3BlcmF0aW9uLmFjY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLmF1dGhvcml0eSwgc3luY1Jlc3VsdC5zdGF0cy5udW1EZWxldGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi51c2VySWQpOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGZ1bGwtcmVzeW5jIGFuZCBzY2hlZHVsZSBpdCBhZnRlciBjbG9zaW5nIG9mZiB0aGUgbGFzdCBzeW5jLgorICAgICAgICAgICAgaWYgKGluZm8udGFyZ2V0X3Byb3ZpZGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKHN5bmNSZXN1bHQgIT0gbnVsbCAmJiBzeW5jUmVzdWx0LnRvb01hbnlEZWxldGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbEhhbmRsZVRvb01hbnlEZWxldGVzTm90aWZpY2F0aW9uKGluZm8uYWNjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnByb3ZpZGVyLCBzeW5jUmVzdWx0LnN0YXRzLm51bURlbGV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby51c2VySWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1Ob3RpZmljYXRpb25NZ3IuY2FuY2VsQXNVc2VyKG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5hY2NvdW50Lmhhc2hDb2RlKCkgXiBpbmZvLnByb3ZpZGVyLmhhc2hDb2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVzZXJIYW5kbGUoaW5mby51c2VySWQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHN5bmNSZXN1bHQgIT0gbnVsbCAmJiBzeW5jUmVzdWx0LmZ1bGxTeW5jUmVxdWVzdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlU3luY09wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3luY09wZXJhdGlvbihpbmZvLmFjY291bnQsIGluZm8udXNlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLnJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5zeW5jU291cmNlLCBpbmZvLnByb3ZpZGVyLCBuZXcgQnVuZGxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogZGVsYXkgKi8sIDAgLyogZmxleCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5iYWNrb2ZmLCBzeW5jT3BlcmF0aW9uLmRlbGF5VW50aWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24uYWxsb3dQYXJhbGxlbFN5bmNzKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtTm90aWZpY2F0aW9uTWdyLmNhbmNlbEFzVXNlcihudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5hY2NvdW50Lmhhc2hDb2RlKCkgXiBzeW5jT3BlcmF0aW9uLmF1dGhvcml0eS5oYXNoQ29kZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVzZXJIYW5kbGUoc3luY09wZXJhdGlvbi51c2VySWQpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHN5bmNSZXN1bHQgIT0gbnVsbCAmJiBzeW5jUmVzdWx0LmZ1bGxTeW5jUmVxdWVzdGVkKSB7Ci0gICAgICAgICAgICAgICAgc2NoZWR1bGVTeW5jT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN5bmNPcGVyYXRpb24oc3luY09wZXJhdGlvbi5hY2NvdW50LCBzeW5jT3BlcmF0aW9uLnVzZXJJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLnJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLnN5bmNTb3VyY2UsIHN5bmNPcGVyYXRpb24uYXV0aG9yaXR5LCBuZXcgQnVuZGxlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBkZWxheSAqLywgMCAvKiBmbGV4ICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24uYmFja29mZiwgc3luY09wZXJhdGlvbi5kZWxheVVudGlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24uYWxsb3dQYXJhbGxlbFN5bmNzKSk7CisgICAgICAgICAgICAgICAgaWYgKHN5bmNSZXN1bHQgIT0gbnVsbCAmJiBzeW5jUmVzdWx0LmZ1bGxTeW5jUmVxdWVzdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlU3luY09wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3luY09wZXJhdGlvbihpbmZvLnNlcnZpY2UsIGluZm8udXNlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLnJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5zeW5jU291cmNlLCBuZXcgQnVuZGxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogZGVsYXkgKi8sIDAgLyogZmxleCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5iYWNrb2ZmLCBzeW5jT3BlcmF0aW9uLmRlbGF5VW50aWwpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBubyBuZWVkIHRvIHNjaGVkdWxlIGFuIGFsYXJtLCBhcyB0aGF0IHdpbGwgYmUgZG9uZSBieSBvdXIgY2FsbGVyLgogICAgICAgICB9CkBAIC0yNTc5LDcgKzI4MTQsNyBAQAogICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQuY2xvc2UoKTsKICAgICAgICAgICAgIG1BY3RpdmVTeW5jQ29udGV4dHMucmVtb3ZlKGFjdGl2ZVN5bmNDb250ZXh0KTsKICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5yZW1vdmVBY3RpdmVTeW5jKGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jSW5mbywKLSAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNPcGVyYXRpb24udXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNPcGVyYXRpb24udGFyZ2V0LnVzZXJJZCk7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTI4NDIsMjYgKzMwNzcsMTYgQEAKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBsb25nIGluc2VydFN0YXJ0U3luY0V2ZW50KFN5bmNPcGVyYXRpb24gc3luY09wZXJhdGlvbikgewotICAgICAgICAgICAgZmluYWwgaW50IHNvdXJjZSA9IHN5bmNPcGVyYXRpb24uc3luY1NvdXJjZTsKICAgICAgICAgICAgIGZpbmFsIGxvbmcgbm93ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0KLSAgICAgICAgICAgIEV2ZW50TG9nLndyaXRlRXZlbnQoMjcyMCwgc3luY09wZXJhdGlvbi5hdXRob3JpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkVWRU5UX1NUQVJULCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24uYWNjb3VudC5uYW1lLmhhc2hDb2RlKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gbVN5bmNTdG9yYWdlRW5naW5lLmluc2VydFN0YXJ0U3luY0V2ZW50KAotICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLmFjY291bnQsIHN5bmNPcGVyYXRpb24udXNlcklkLCBzeW5jT3BlcmF0aW9uLnJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5hdXRob3JpdHksCi0gICAgICAgICAgICAgICAgICAgIG5vdywgc291cmNlLCBzeW5jT3BlcmF0aW9uLmlzSW5pdGlhbGl6YXRpb24oKSwgc3luY09wZXJhdGlvbi5leHRyYXMKLSAgICAgICAgICAgICk7CisgICAgICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KDI3MjAsCisgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24udG9FdmVudExvZyhTeW5jU3RvcmFnZUVuZ2luZS5FVkVOVF9TVEFSVCkpOworICAgICAgICAgICAgcmV0dXJuIG1TeW5jU3RvcmFnZUVuZ2luZS5pbnNlcnRTdGFydFN5bmNFdmVudChzeW5jT3BlcmF0aW9uLCBub3cpOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgc3RvcFN5bmNFdmVudChsb25nIHJvd0lkLCBTeW5jT3BlcmF0aW9uIHN5bmNPcGVyYXRpb24sIFN0cmluZyByZXN1bHRNZXNzYWdlLAogICAgICAgICAgICAgICAgIGludCB1cHN0cmVhbUFjdGl2aXR5LCBpbnQgZG93bnN0cmVhbUFjdGl2aXR5LCBsb25nIGVsYXBzZWRUaW1lKSB7Ci0gICAgICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KDI3MjAsIHN5bmNPcGVyYXRpb24uYXV0aG9yaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FVkVOVF9TVE9QLCBzeW5jT3BlcmF0aW9uLnN5bmNTb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24uYWNjb3VudC5uYW1lLmhhc2hDb2RlKCkpOwotCisgICAgICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KDI3MjAsCisgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24udG9FdmVudExvZyhTeW5jU3RvcmFnZUVuZ2luZS5FVkVOVF9TVE9QKSk7CiAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuc3RvcFN5bmNFdmVudChyb3dJZCwgZWxhcHNlZFRpbWUsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE1lc3NhZ2UsIGRvd25zdHJlYW1BY3Rpdml0eSwgdXBzdHJlYW1BY3Rpdml0eSk7CiAgICAgICAgIH0KQEAgLTI4NzYsNiArMzEwMSw4MyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgLyoqCisgICAgICogU3luYyBleHRyYSBjb21wYXJpc29uIGZ1bmN0aW9uLgorICAgICAqIEBwYXJhbSBiMSBidW5kbGUgdG8gY29tcGFyZQorICAgICAqIEBwYXJhbSBiMiBvdGhlciBidW5kbGUgdG8gY29tcGFyZQorICAgICAqIEBwYXJhbSBpbmNsdWRlU3luY1NldHRpbmdzIGlmIGZhbHNlLCBpZ25vcmUgc3lzdGVtIHNldHRpbmdzIGluIGJ1bmRsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc3luY0V4dHJhc0VxdWFscyhCdW5kbGUgYjEsIEJ1bmRsZSBiMiwgYm9vbGVhbiBpbmNsdWRlU3luY1NldHRpbmdzKSB7CisgICAgICAgIGlmIChiMSA9PSBiMikgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gRXhpdCBlYXJseSBpZiB3ZSBjYW4uCisgICAgICAgIGlmIChpbmNsdWRlU3luY1NldHRpbmdzICYmIGIxLnNpemUoKSAhPSBiMi5zaXplKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBCdW5kbGUgYmlnZ2VyID0gYjEuc2l6ZSgpID4gYjIuc2l6ZSgpID8gYjEgOiBiMjsKKyAgICAgICAgQnVuZGxlIHNtYWxsZXIgPSBiMS5zaXplKCkgPiBiMi5zaXplKCkgPyBiMiA6IGIxOworICAgICAgICBmb3IgKFN0cmluZyBrZXkgOiBiaWdnZXIua2V5U2V0KCkpIHsKKyAgICAgICAgICAgIGlmICghaW5jbHVkZVN5bmNTZXR0aW5ncyAmJiBpc1N5bmNTZXR0aW5nKGtleSkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc21hbGxlci5jb250YWluc0tleShrZXkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFiaWdnZXIuZ2V0KGtleSkuZXF1YWxzKHNtYWxsZXIuZ2V0KGtleSkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRPRE86IEdldCByaWQgb2YgdGhpcyB3aGVuIHdlIHNlcGFyYXRlIHN5bmMgc2V0dGluZ3MgZXh0cmFzIGZyb20gZGV2IHNwZWNpZmllZCBleHRyYXMuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBwcm92aWRlZCBrZXkgaXMgdXNlZCBieSB0aGUgU3luY01hbmFnZXIgaW4gc2NoZWR1bGluZyB0aGUgc3luYy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzU3luY1NldHRpbmcoU3RyaW5nIGtleSkgeworICAgICAgICBpZiAoa2V5LmVxdWFscyhDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRVhQRURJVEVEKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleS5lcXVhbHMoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9TRVRUSU5HUykpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChrZXkuZXF1YWxzKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19JR05PUkVfQkFDS09GRikpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChrZXkuZXF1YWxzKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19ET19OT1RfUkVUUlkpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5LmVxdWFscyhDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfTUFOVUFMKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleS5lcXVhbHMoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX1VQTE9BRCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChrZXkuZXF1YWxzKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19PVkVSUklERV9UT09fTUFOWV9ERUxFVElPTlMpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5LmVxdWFscyhDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRElTQ0FSRF9MT0NBTF9ERUxFVElPTlMpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5LmVxdWFscyhDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRVhQRUNURURfVVBMT0FEKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleS5lcXVhbHMoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0VYUEVDVEVEX0RPV05MT0FEKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleS5lcXVhbHMoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX1BSSU9SSVRZKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleS5lcXVhbHMoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0RJU0FMTE9XX01FVEVSRUQpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5LmVxdWFscyhDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfSU5JVElBTElaRSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzdGF0aWMgY2xhc3MgUHJpbnRUYWJsZSB7CiAgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0PE9iamVjdFtdPiBtVGFibGUgPSBMaXN0cy5uZXdBcnJheUxpc3QoKTsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUNvbHM7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvU3luY09wZXJhdGlvbi5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNPcGVyYXRpb24uamF2YQppbmRleCA0ODU2NzQ3OC4uMDM2YjIxZiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNPcGVyYXRpb24uamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvU3luY09wZXJhdGlvbi5qYXZhCkBAIC0yMCwxMCArMjAsOSBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5TeW5jUmVxdWVzdDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQudXRpbC5QYWlyOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgogICogVmFsdWUgdHlwZSB0aGF0IHJlcHJlc2VudHMgYSBzeW5jIG9wZXJhdGlvbi4KQEAgLTMyLDEwICszMSwxMyBAQAogICoge0BoaWRlfQogICovCiBwdWJsaWMgY2xhc3MgU3luY09wZXJhdGlvbiBpbXBsZW1lbnRzIENvbXBhcmFibGUgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJTeW5jTWFuYWdlciI7CisKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fQkFDS0dST1VORF9EQVRBX1NFVFRJTkdTX0NIQU5HRUQgPSAtMTsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fQUNDT1VOVFNfVVBEQVRFRCA9IC0yOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9TRVJWSUNFX0NIQU5HRUQgPSAtMzsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fUEVSSU9ESUMgPSAtNDsKKyAgICAvKiogU3luYyBzdGFydGVkIGJlY2F1c2UgaXQgaGFzIGp1c3QgYmVlbiBzZXQgdG8gaXNTeW5jYWJsZS4gKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fSVNfU1lOQ0FCTEUgPSAtNTsKICAgICAvKiogU3luYyBzdGFydGVkIGJlY2F1c2UgaXQgaGFzIGp1c3QgYmVlbiBzZXQgdG8gc3luYyBhdXRvbWF0aWNhbGx5LiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9TWU5DX0FVVE8gPSAtNjsKQEAgLTU0LDE5ICs1NiwyMSBAQAogICAgICAgICAgICAgIlVzZXJTdGFydCIsCiAgICAgfTsKIAotICAgIC8qKiBBY2NvdW50IGluZm8gdG8gaWRlbnRpZnkgYSBTeW5jQWRhcHRlciByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbS4gKi8KLSAgICBwdWJsaWMgZmluYWwgQWNjb3VudCBhY2NvdW50OwotICAgIC8qKiBBdXRob3JpdHkgaW5mbyB0byBpZGVudGlmeSBhIFN5bmNBZGFwdGVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc3lzdGVtLiAqLwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5OwotICAgIC8qKiBTZXJ2aWNlIHRvIHdoaWNoIHRoaXMgb3BlcmF0aW9uIHdpbGwgYmluZCB0byBwZXJmb3JtIHRoZSBzeW5jLiAqLwotICAgIHB1YmxpYyBmaW5hbCBDb21wb25lbnROYW1lIHNlcnZpY2U7Ci0gICAgcHVibGljIGZpbmFsIGludCB1c2VySWQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1lOQ19UQVJHRVRfVU5LTk9XTiA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1lOQ19UQVJHRVRfQURBUFRFUiA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1lOQ19UQVJHRVRfU0VSVklDRSA9IDI7CisKKyAgICAvKiogSWRlbnRpZnlpbmcgaW5mbyBmb3IgdGhlIHRhcmdldCBmb3IgdGhpcyBvcGVyYXRpb24uICovCisgICAgcHVibGljIGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IHRhcmdldDsKKyAgICAvKiogV2h5IHRoaXMgc3luYyB3YXMga2lja2VkIG9mZi4ge0BsaW5rICNSRUFTT05fTkFNRVN9ICovCiAgICAgcHVibGljIGZpbmFsIGludCByZWFzb247CisgICAgLyoqIFdoZXJlIHRoaXMgc3luYyB3YXMgaW5pdGlhdGVkLiAqLwogICAgIHB1YmxpYyBpbnQgc3luY1NvdXJjZTsKICAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBhbGxvd1BhcmFsbGVsU3luY3M7CiAgICAgcHVibGljIEJ1bmRsZSBleHRyYXM7CiAgICAgcHVibGljIGZpbmFsIFN0cmluZyBrZXk7CiAgICAgcHVibGljIGJvb2xlYW4gZXhwZWRpdGVkOworICAgIC8qKiBCYXJlLWJvbmVzIHZlcnNpb24gb2YgdGhpcyBvcGVyYXRpb24gdGhhdCBpcyBwZXJzaXN0ZWQgYWNyb3NzIHJlYm9vdHMuICovCiAgICAgcHVibGljIFN5bmNTdG9yYWdlRW5naW5lLlBlbmRpbmdPcGVyYXRpb24gcGVuZGluZ09wZXJhdGlvbjsKICAgICAvKiogRWxhcHNlZCByZWFsIHRpbWUgaW4gbWlsbGlzIGF0IHdoaWNoIHRvIHJ1biB0aGlzIHN5bmMuICovCiAgICAgcHVibGljIGxvbmcgbGF0ZXN0UnVuVGltZTsKQEAgLTc5LDI1ICs4Myw1NiBAQAogICAgICAqIERlcGVuZHMgb24gbWF4KGJhY2tvZmYsIGxhdGVzdFJ1blRpbWUsIGFuZCBkZWxheVVudGlsKS4KICAgICAgKi8KICAgICBwdWJsaWMgbG9uZyBlZmZlY3RpdmVSdW5UaW1lOwotICAgIC8qKiBBbW91bnQgb2YgdGltZSBiZWZvcmUge0BsaW5rIGVmZmVjdGl2ZVJ1blRpbWV9IGZyb20gd2hpY2ggdGhpcyBzeW5jIGNhbiBydW4uICovCisgICAgLyoqIEFtb3VudCBvZiB0aW1lIGJlZm9yZSB7QGxpbmsgI2VmZmVjdGl2ZVJ1blRpbWV9IGZyb20gd2hpY2ggdGhpcyBzeW5jIGNhbiBydW4uICovCiAgICAgcHVibGljIGxvbmcgZmxleFRpbWU7CiAKLSAgICBwdWJsaWMgU3luY09wZXJhdGlvbihBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIGludCByZWFzb24sIGludCBzb3VyY2UsIFN0cmluZyBhdXRob3JpdHksCisgICAgcHVibGljIFN5bmNPcGVyYXRpb24oQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBpbnQgcmVhc29uLCBpbnQgc291cmNlLCBTdHJpbmcgcHJvdmlkZXIsCiAgICAgICAgICAgICBCdW5kbGUgZXh0cmFzLCBsb25nIHJ1blRpbWVGcm9tTm93LCBsb25nIGZsZXhUaW1lLCBsb25nIGJhY2tvZmYsCiAgICAgICAgICAgICBsb25nIGRlbGF5VW50aWwsIGJvb2xlYW4gYWxsb3dQYXJhbGxlbFN5bmNzKSB7Ci0gICAgICAgIHRoaXMuc2VydmljZSA9IG51bGw7Ci0gICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7Ci0gICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gYXV0aG9yaXR5OwotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKKyAgICAgICAgdGhpcy50YXJnZXQgPSBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoYWNjb3VudCwgcHJvdmlkZXIsIHVzZXJJZCk7CiAgICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uOwotICAgICAgICB0aGlzLnN5bmNTb3VyY2UgPSBzb3VyY2U7CiAgICAgICAgIHRoaXMuYWxsb3dQYXJhbGxlbFN5bmNzID0gYWxsb3dQYXJhbGxlbFN5bmNzOworICAgICAgICB0aGlzLmtleSA9IGluaXRpYWxpc2VPcGVyYXRpb24odGhpcy50YXJnZXQsIHNvdXJjZSwgZXh0cmFzLCBydW5UaW1lRnJvbU5vdywgZmxleFRpbWUsCisgICAgICAgICAgICAgICAgYmFja29mZiwgZGVsYXlVbnRpbCk7CisgICAgfQorCisgICAgcHVibGljIFN5bmNPcGVyYXRpb24oQ29tcG9uZW50TmFtZSBzZXJ2aWNlLCBpbnQgdXNlcklkLCBpbnQgcmVhc29uLCBpbnQgc291cmNlLAorICAgICAgICAgICAgQnVuZGxlIGV4dHJhcywgbG9uZyBydW5UaW1lRnJvbU5vdywgbG9uZyBmbGV4VGltZSwgbG9uZyBiYWNrb2ZmLAorICAgICAgICAgICAgbG9uZyBkZWxheVVudGlsKSB7CisgICAgICAgIHRoaXMudGFyZ2V0ID0gbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KHNlcnZpY2UsIHVzZXJJZCk7CisgICAgICAgIC8vIERlZmF1bHQgdG8gdHJ1ZSBmb3Igc3luYyBzZXJ2aWNlLiBUaGUgc2VydmljZSBpdHNlbGYgZGVjaWRlcyBob3cgdG8gaGFuZGxlIHRoaXMuCisgICAgICAgIHRoaXMuYWxsb3dQYXJhbGxlbFN5bmNzID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5yZWFzb24gPSByZWFzb247CisgICAgICAgIHRoaXMua2V5ID0KKyAgICAgICAgICAgICAgICBpbml0aWFsaXNlT3BlcmF0aW9uKHRoaXMudGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBleHRyYXMsIHJ1blRpbWVGcm9tTm93LCBmbGV4VGltZSwgYmFja29mZiwgZGVsYXlVbnRpbCk7CisgICAgfQorCisgICAgLyoqIFVzZWQgdG8gcmVzY2hlZHVsZSBhIHN5bmMgYXQgYSBuZXcgcG9pbnQgaW4gdGltZS4gKi8KKyAgICBTeW5jT3BlcmF0aW9uKFN5bmNPcGVyYXRpb24gb3RoZXIsIGxvbmcgbmV3UnVuVGltZUZyb21Ob3cpIHsKKyAgICAgICAgdGhpcy50YXJnZXQgPSBvdGhlci50YXJnZXQ7CisgICAgICAgIHRoaXMucmVhc29uID0gb3RoZXIucmVhc29uOworICAgICAgICB0aGlzLmV4cGVkaXRlZCA9IG90aGVyLmV4cGVkaXRlZDsKKyAgICAgICAgdGhpcy5hbGxvd1BhcmFsbGVsU3luY3MgPSBvdGhlci5hbGxvd1BhcmFsbGVsU3luY3M7CisgICAgICAgIC8vIHJlLXVzZSBvbGQgZmxleCwgYnV0IG9ubHkgCisgICAgICAgIGxvbmcgbmV3RmxleFRpbWUgPSBNYXRoLm1pbihvdGhlci5mbGV4VGltZSwgbmV3UnVuVGltZUZyb21Ob3cpOworICAgICAgICB0aGlzLmtleSA9CisgICAgICAgICAgICAgICAgaW5pdGlhbGlzZU9wZXJhdGlvbih0aGlzLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIuc3luY1NvdXJjZSwgb3RoZXIuZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICBuZXdSdW5UaW1lRnJvbU5vdyAvKiBydW5UaW1lRnJvbU5vdyovLAorICAgICAgICAgICAgICAgICAgICBuZXdGbGV4VGltZSAvKiBmbGV4VGltZSAqLywKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIuYmFja29mZiwKKyAgICAgICAgICAgICAgICAgICAgMEwgLyogZGVsYXlVbnRpbCAqLyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgaW5pdGlhbGlzZU9wZXJhdGlvbihTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvLCBpbnQgc291cmNlLCBCdW5kbGUgZXh0cmFzLAorICAgICAgICAgICAgbG9uZyBydW5UaW1lRnJvbU5vdywgbG9uZyBmbGV4VGltZSwgbG9uZyBiYWNrb2ZmLCBsb25nIGRlbGF5VW50aWwpIHsKKyAgICAgICAgdGhpcy5zeW5jU291cmNlID0gc291cmNlOwogICAgICAgICB0aGlzLmV4dHJhcyA9IG5ldyBCdW5kbGUoZXh0cmFzKTsKICAgICAgICAgY2xlYW5CdW5kbGUodGhpcy5leHRyYXMpOwogICAgICAgICB0aGlzLmRlbGF5VW50aWwgPSBkZWxheVVudGlsOwogICAgICAgICB0aGlzLmJhY2tvZmYgPSBiYWNrb2ZmOwogICAgICAgICBmaW5hbCBsb25nIG5vdyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgICAgICAvLyBDaGVja3MgdGhlIGV4dHJhcyBidW5kbGUuIE11c3Qgb2NjdXIgYWZ0ZXIgd2Ugc2V0IHRoZSBpbnRlcm5hbCBidW5kbGUuCiAgICAgICAgIGlmIChydW5UaW1lRnJvbU5vdyA8IDAgfHwgaXNFeHBlZGl0ZWQoKSkgewogICAgICAgICAgICAgdGhpcy5leHBlZGl0ZWQgPSB0cnVlOwogICAgICAgICAgICAgdGhpcy5sYXRlc3RSdW5UaW1lID0gbm93OwpAQCAtMTA4LDcgKzE0MywxMSBAQAogICAgICAgICAgICAgdGhpcy5mbGV4VGltZSA9IGZsZXhUaW1lOwogICAgICAgICB9CiAgICAgICAgIHVwZGF0ZUVmZmVjdGl2ZVJ1blRpbWUoKTsKLSAgICAgICAgdGhpcy5rZXkgPSB0b0tleSgpOworICAgICAgICByZXR1cm4gdG9LZXkoaW5mbywgdGhpcy5leHRyYXMpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIG1hdGNoZXNBdXRob3JpdHkoU3luY09wZXJhdGlvbiBvdGhlcikgeworICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQubWF0Y2hlc1NwZWMob3RoZXIudGFyZ2V0KTsKICAgICB9CiAKICAgICAvKioKQEAgLTEyNiwxMCArMTY1LDYgQEAKICAgICAgICAgcmVtb3ZlRmFsc2VFeHRyYShidW5kbGUsIENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19FWFBFRElURUQpOwogICAgICAgICByZW1vdmVGYWxzZUV4dHJhKGJ1bmRsZSwgQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX09WRVJSSURFX1RPT19NQU5ZX0RFTEVUSU9OUyk7CiAgICAgICAgIHJlbW92ZUZhbHNlRXh0cmEoYnVuZGxlLCBDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRElTQUxMT1dfTUVURVJFRCk7Ci0KLSAgICAgICAgLy8gUmVtb3ZlIENvbmZpZyBkYXRhLgotICAgICAgICBidW5kbGUucmVtb3ZlKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19FWFBFQ1RFRF9VUExPQUQpOwotICAgICAgICBidW5kbGUucmVtb3ZlKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19FWFBFQ1RFRF9ET1dOTE9BRCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlbW92ZUZhbHNlRXh0cmEoQnVuZGxlIGJ1bmRsZSwgU3RyaW5nIGV4dHJhTmFtZSkgewpAQCAtMTM4LDIyICsxNzMsMjQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKiBPbmx5IHVzZWQgdG8gaW1tZWRpYXRlbHkgcmVzY2hlZHVsZSBhIHN5bmMuICovCi0gICAgU3luY09wZXJhdGlvbihTeW5jT3BlcmF0aW9uIG90aGVyKSB7Ci0gICAgICAgIHRoaXMuc2VydmljZSA9IG90aGVyLnNlcnZpY2U7Ci0gICAgICAgIHRoaXMuYWNjb3VudCA9IG90aGVyLmFjY291bnQ7Ci0gICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gb3RoZXIuYXV0aG9yaXR5OwotICAgICAgICB0aGlzLnVzZXJJZCA9IG90aGVyLnVzZXJJZDsKLSAgICAgICAgdGhpcy5yZWFzb24gPSBvdGhlci5yZWFzb247Ci0gICAgICAgIHRoaXMuc3luY1NvdXJjZSA9IG90aGVyLnN5bmNTb3VyY2U7Ci0gICAgICAgIHRoaXMuZXh0cmFzID0gbmV3IEJ1bmRsZShvdGhlci5leHRyYXMpOwotICAgICAgICB0aGlzLmV4cGVkaXRlZCA9IG90aGVyLmV4cGVkaXRlZDsKLSAgICAgICAgdGhpcy5sYXRlc3RSdW5UaW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICAgIHRoaXMuZmxleFRpbWUgPSAwTDsKLSAgICAgICAgdGhpcy5iYWNrb2ZmID0gb3RoZXIuYmFja29mZjsKLSAgICAgICAgdGhpcy5hbGxvd1BhcmFsbGVsU3luY3MgPSBvdGhlci5hbGxvd1BhcmFsbGVsU3luY3M7Ci0gICAgICAgIHRoaXMudXBkYXRlRWZmZWN0aXZlUnVuVGltZSgpOwotICAgICAgICB0aGlzLmtleSA9IHRvS2V5KCk7CisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgaWYgdGhpcyBzeW5jIG9wZXJhdGlvbiBpcyBydW5uaW5nLCB0aGUgcHJvdmlkZWQgb3BlcmF0aW9uIHdvdWxkIGNvbmZsaWN0CisgICAgICogd2l0aCBpdC4KKyAgICAgKiBQYXJhbGxlbCBzeW5jcyBhbGxvdyBtdWx0aXBsZSBhY2NvdW50cyB0byBiZSBzeW5jZWQgYXQgdGhlIHNhbWUgdGltZS4gCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNDb25mbGljdChTeW5jT3BlcmF0aW9uIHRvUnVuKSB7CisgICAgICAgIGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IG90aGVyID0gdG9SdW4udGFyZ2V0OworICAgICAgICBpZiAodGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hY2NvdW50LnR5cGUuZXF1YWxzKG90aGVyLmFjY291bnQudHlwZSkKKyAgICAgICAgICAgICAgICAgICAgJiYgdGFyZ2V0LnByb3ZpZGVyLmVxdWFscyhvdGhlci5wcm92aWRlcikKKyAgICAgICAgICAgICAgICAgICAgJiYgdGFyZ2V0LnVzZXJJZCA9PSBvdGhlci51c2VySWQKKyAgICAgICAgICAgICAgICAgICAgJiYgKCFhbGxvd1BhcmFsbGVsU3luY3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0YXJnZXQuYWNjb3VudC5uYW1lLmVxdWFscyhvdGhlci5hY2NvdW50Lm5hbWUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9wcyB0aGF0IHRhcmdldCBhIHNlcnZpY2UgZGVmYXVsdCB0byBhbGxvdyBwYXJhbGxlbCBzeW5jcywgd2hpY2ggaXMgaGFuZGxlZCBieSB0aGUKKyAgICAgICAgICAgIC8vIHNlcnZpY2UgcmV0dXJuaW5nIFNZTkNfSU5fUFJPR1JFU1MgaWYgdGhleSBkb24ndC4KKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQuc2VydmljZS5lcXVhbHMob3RoZXIuc2VydmljZSkgJiYgIWFsbG93UGFyYWxsZWxTeW5jczsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTYyLDE4ICsxOTksMjYgQEAKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGR1bXAoUGFja2FnZU1hbmFnZXIgcG0sIGJvb2xlYW4gdXNlT25lTGluZSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKQotICAgICAgICAgICAgICAgIC5hcHBlbmQoYWNjb3VudC5uYW1lKQorICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgaWYgKHRhcmdldC50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgIHNiLmFwcGVuZCh0YXJnZXQuYWNjb3VudC5uYW1lKQogICAgICAgICAgICAgICAgIC5hcHBlbmQoIiB1IikKLSAgICAgICAgICAgICAgICAuYXBwZW5kKHVzZXJJZCkuYXBwZW5kKCIgKCIpCi0gICAgICAgICAgICAgICAgLmFwcGVuZChhY2NvdW50LnR5cGUpCisgICAgICAgICAgICAgICAgLmFwcGVuZCh0YXJnZXQudXNlcklkKS5hcHBlbmQoIiAoIikKKyAgICAgICAgICAgICAgICAuYXBwZW5kKHRhcmdldC5hY2NvdW50LnR5cGUpCiAgICAgICAgICAgICAgICAgLmFwcGVuZCgiKSIpCiAgICAgICAgICAgICAgICAgLmFwcGVuZCgiLCAiKQotICAgICAgICAgICAgICAgIC5hcHBlbmQoYXV0aG9yaXR5KQotICAgICAgICAgICAgICAgIC5hcHBlbmQoIiwgIikKLSAgICAgICAgICAgICAgICAuYXBwZW5kKFN5bmNTdG9yYWdlRW5naW5lLlNPVVJDRVNbc3luY1NvdXJjZV0pCi0gICAgICAgICAgICAgICAgLmFwcGVuZCgiLCBsYXRlc3RSdW5UaW1lICIpCi0gICAgICAgICAgICAgICAgLmFwcGVuZChsYXRlc3RSdW5UaW1lKTsKKyAgICAgICAgICAgICAgICAuYXBwZW5kKHRhcmdldC5wcm92aWRlcikKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCIsICIpOworICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC50YXJnZXRfc2VydmljZSkgeworICAgICAgICAgICAgc2IuYXBwZW5kKHRhcmdldC5zZXJ2aWNlLmdldFBhY2thZ2VOYW1lKCkpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiIHUiKQorICAgICAgICAgICAgICAgIC5hcHBlbmQodGFyZ2V0LnVzZXJJZCkuYXBwZW5kKCIgKCIpCisgICAgICAgICAgICAgICAgLmFwcGVuZCh0YXJnZXQuc2VydmljZS5nZXRDbGFzc05hbWUoKSkuYXBwZW5kKCIpIikKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCIsICIpOworICAgICAgICB9CisgICAgICAgIHNiLmFwcGVuZChTeW5jU3RvcmFnZUVuZ2luZS5TT1VSQ0VTW3N5bmNTb3VyY2VdKQorICAgICAgICAgICAgLmFwcGVuZCgiLCBjdXJyZW50UnVuVGltZSAiKQorICAgICAgICAgICAgLmFwcGVuZChlZmZlY3RpdmVSdW5UaW1lKTsKICAgICAgICAgaWYgKGV4cGVkaXRlZCkgewogICAgICAgICAgICAgc2IuYXBwZW5kKCIsIEVYUEVESVRFRCIpOwogICAgICAgICB9CkBAIC0yMTEsMTAgKzI1Niw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc01ldGVyZWREaXNhbGxvd2VkKCkgewotICAgICAgICByZXR1cm4gZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0RJU0FMTE9XX01FVEVSRUQsIGZhbHNlKTsKLSAgICB9Ci0KICAgICBwdWJsaWMgYm9vbGVhbiBpc0luaXRpYWxpemF0aW9uKCkgewogICAgICAgICByZXR1cm4gZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lOSVRJQUxJWkUsIGZhbHNlKTsKICAgICB9CkBAIC0yMjcsMjggKzI2OCwzOSBAQAogICAgICAgICByZXR1cm4gZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9CQUNLT0ZGLCBmYWxzZSk7CiAgICAgfQogCisgICAgcHVibGljIGJvb2xlYW4gaXNOb3RBbGxvd2VkT25NZXRlcmVkKCkgeworICAgICAgICByZXR1cm4gZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0RJU0FMTE9XX01FVEVSRUQsIGZhbHNlKTsKKyAgICB9CisKICAgICAvKiogQ2hhbmdlZCBpbiBWMy4gKi8KLSAgICBwcml2YXRlIFN0cmluZyB0b0tleSgpIHsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b0tleShTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvLCBCdW5kbGUgZXh0cmFzKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICBpZiAoc2VydmljZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoImF1dGhvcml0eTogIikuYXBwZW5kKGF1dGhvcml0eSk7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoIiBhY2NvdW50IHtuYW1lPSIgKyBhY2NvdW50Lm5hbWUgKyAiLCB1c2VyPSIgKyB1c2VySWQgKyAiLCB0eXBlPSIgKyBhY2NvdW50LnR5cGUKKyAgICAgICAgaWYgKGluZm8udGFyZ2V0X3Byb3ZpZGVyKSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoInByb3ZpZGVyOiAiKS5hcHBlbmQoaW5mby5wcm92aWRlcik7CisgICAgICAgICAgICBzYi5hcHBlbmQoIiBhY2NvdW50IHtuYW1lPSIgKyBpbmZvLmFjY291bnQubmFtZQorICAgICAgICAgICAgICAgICAgICArICIsIHVzZXI9IgorICAgICAgICAgICAgICAgICAgICArIGluZm8udXNlcklkCisgICAgICAgICAgICAgICAgICAgICsgIiwgdHlwZT0iCisgICAgICAgICAgICAgICAgICAgICsgaW5mby5hY2NvdW50LnR5cGUKICAgICAgICAgICAgICAgICAgICAgKyAifSIpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UgaWYgKGluZm8udGFyZ2V0X3NlcnZpY2UpIHsKICAgICAgICAgICAgIHNiLmFwcGVuZCgic2VydmljZSB7cGFja2FnZT0iICkKLSAgICAgICAgICAgICAgICAuYXBwZW5kKHNlcnZpY2UuZ2V0UGFja2FnZU5hbWUoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKGluZm8uc2VydmljZS5nZXRQYWNrYWdlTmFtZSgpKQogICAgICAgICAgICAgICAgIC5hcHBlbmQoIiB1c2VyPSIpCi0gICAgICAgICAgICAgICAgLmFwcGVuZCh1c2VySWQpCisgICAgICAgICAgICAgICAgLmFwcGVuZChpbmZvLnVzZXJJZCkKICAgICAgICAgICAgICAgICAuYXBwZW5kKCIsIGNsYXNzPSIpCi0gICAgICAgICAgICAgICAgLmFwcGVuZChzZXJ2aWNlLmdldENsYXNzTmFtZSgpKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoaW5mby5zZXJ2aWNlLmdldENsYXNzTmFtZSgpKQogICAgICAgICAgICAgICAgIC5hcHBlbmQoIn0iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExvZy52KFRBRywgIkNvbnZlcnRpbmcgU3luY09wZXJhdG9uIHRvIGtleSwgaW52YWxpZCB0YXJnZXQ6ICIgKyBpbmZvLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICB9CiAgICAgICAgIHNiLmFwcGVuZCgiIGV4dHJhczogIik7CiAgICAgICAgIGV4dHJhc1RvU3RyaW5nQnVpbGRlcihleHRyYXMsIHNiKTsKICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGV4dHJhc1RvU3RyaW5nQnVpbGRlcihCdW5kbGUgYnVuZGxlLCBTdHJpbmdCdWlsZGVyIHNiKSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBleHRyYXNUb1N0cmluZ0J1aWxkZXIoQnVuZGxlIGJ1bmRsZSwgU3RyaW5nQnVpbGRlciBzYikgewogICAgICAgICBzYi5hcHBlbmQoIlsiKTsKICAgICAgICAgZm9yIChTdHJpbmcga2V5IDogYnVuZGxlLmtleVNldCgpKSB7CiAgICAgICAgICAgICBzYi5hcHBlbmQoa2V5KS5hcHBlbmQoIj0iKS5hcHBlbmQoYnVuZGxlLmdldChrZXkpKS5hcHBlbmQoIiAiKTsKQEAgLTI1Niw2ICszMDgsMzEgQEAKICAgICAgICAgc2IuYXBwZW5kKCJdIik7CiAgICAgfQogCisgICAgcHVibGljIFN0cmluZyB3YWtlTG9ja0tleSgpIHsKKyAgICAgICAgaWYgKHRhcmdldC50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYWNjb3VudC5uYW1lICsgIi8iICsgdGFyZ2V0LmFjY291bnQudHlwZSArICI6IiArIHRhcmdldC5wcm92aWRlcjsKKyAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQudGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQuc2VydmljZS5nZXRQYWNrYWdlTmFtZSgpICsgIi8iICsgdGFyZ2V0LnNlcnZpY2UuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMb2cud3RmKFRBRywgIkludmFsaWQgdGFyZ2V0IGdldHRpbmcgd2FrZWxvY2sgZm9yIG9wZXJhdGlvbiAtICIgKyBrZXkpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHdha2VMb2NrTmFtZSgpIHsKKyAgICAgICAgaWYgKHRhcmdldC50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgIHJldHVybiAiLyIgKyB0YXJnZXQucHJvdmlkZXIKKyAgICAgICAgICAgICAgICAgICAgKyAiLyIgKyB0YXJnZXQuYWNjb3VudC50eXBlCisgICAgICAgICAgICAgICAgICAgICsgIi8iICsgdGFyZ2V0LmFjY291bnQubmFtZTsKKyAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQudGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgIHJldHVybiAiLyIgKyB0YXJnZXQuc2VydmljZS5nZXRQYWNrYWdlTmFtZSgpCisgICAgICAgICAgICAgICAgICAgICsgIi8iICsgdGFyZ2V0LnNlcnZpY2UuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMb2cud3RmKFRBRywgIkludmFsaWQgdGFyZ2V0IGdldHRpbmcgd2FrZWxvY2sgbmFtZSBmb3Igb3BlcmF0aW9uIC0gIiArIGtleSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFVwZGF0ZSB0aGUgZWZmZWN0aXZlIHJ1biB0aW1lIG9mIHRoaXMgT3BlcmF0aW9uIGJhc2VkIG9uIGxhdGVzdFJ1blRpbWUgKHNwZWNpZmllZCBhdAogICAgICAqIGNyZWF0aW9uIHRpbWUgb2Ygc3luYyksIGRlbGF5VW50aWwgKHNwZWNpZmllZCBieSBTeW5jQWRhcHRlciksIG9yIGJhY2tvZmYgKHNwZWNpZmllZCBieQpAQCAtMjkxLDQgKzM2OCwyMSBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CisKKyAgICAvLyBUT0RPOiBUZXN0IHRoaXMgdG8gbWFrZSBzdXJlIHRoYXQgY2FzdGluZyB0byBvYmplY3QgZG9lc24ndCBsb3NlIHRoZSB0eXBlIGluZm8gZm9yIEV2ZW50TG9nLgorICAgIHB1YmxpYyBPYmplY3RbXSB0b0V2ZW50TG9nKGludCBldmVudCkgeworICAgICAgICBPYmplY3RbXSBsb2dBcnJheSA9IG5ldyBPYmplY3RbNF07CisgICAgICAgIGxvZ0FycmF5WzFdID0gZXZlbnQ7CisgICAgICAgIGxvZ0FycmF5WzJdID0gc3luY1NvdXJjZTsKKyAgICAgICAgaWYgKHRhcmdldC50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgIGxvZ0FycmF5WzBdID0gdGFyZ2V0LnByb3ZpZGVyOworICAgICAgICAgICAgbG9nQXJyYXlbM10gPSB0YXJnZXQuYWNjb3VudC5uYW1lLmhhc2hDb2RlKCk7CisgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICBsb2dBcnJheVswXSA9IHRhcmdldC5zZXJ2aWNlLmdldFBhY2thZ2VOYW1lKCk7CisgICAgICAgICAgICBsb2dBcnJheVszXSA9IHRhcmdldC5zZXJ2aWNlLmhhc2hDb2RlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMb2cud3RmKFRBRywgInN5bmMgb3Agd2l0aCBpbnZhbGlkIHRhcmdldDogIiArIGtleSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxvZ0FycmF5OworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jUXVldWUuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jUXVldWUuamF2YQppbmRleCA2ZjNmZTZlLi41ZDkzODgyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvU3luY1F1ZXVlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNRdWV1ZS5qYXZhCkBAIC0xNiwxMiArMTYsMTEgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIuY29udGVudDsKIAotaW1wb3J0IGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlZ2lzdGVyZWRTZXJ2aWNlc0NhY2hlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TeW5jQWRhcHRlclR5cGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlN5bmNBZGFwdGVyc0NhY2hlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZWdpc3RlcmVkU2VydmljZXNDYWNoZS5TZXJ2aWNlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CkBAIC02MCwyNSArNTksNTEgQEAKIAogICAgIHB1YmxpYyB2b2lkIGFkZFBlbmRpbmdPcGVyYXRpb25zKGludCB1c2VySWQpIHsKICAgICAgICAgZm9yIChTeW5jU3RvcmFnZUVuZ2luZS5QZW5kaW5nT3BlcmF0aW9uIG9wIDogbVN5bmNTdG9yYWdlRW5naW5lLmdldFBlbmRpbmdPcGVyYXRpb25zKCkpIHsKLSAgICAgICAgICAgIGlmIChvcC51c2VySWQgIT0gdXNlcklkKSBjb250aW51ZTsKKyAgICAgICAgICAgIGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm8gPSBvcC50YXJnZXQ7CisgICAgICAgICAgICBpZiAoaW5mby51c2VySWQgIT0gdXNlcklkKSBjb250aW51ZTsKIAotICAgICAgICAgICAgZmluYWwgUGFpcjxMb25nLCBMb25nPiBiYWNrb2ZmID0gbVN5bmNTdG9yYWdlRW5naW5lLmdldEJhY2tvZmYoCi0gICAgICAgICAgICAgICAgICAgIG9wLmFjY291bnQsIG9wLnVzZXJJZCwgb3AuYXV0aG9yaXR5KTsKLSAgICAgICAgICAgIGZpbmFsIFNlcnZpY2VJbmZvPFN5bmNBZGFwdGVyVHlwZT4gc3luY0FkYXB0ZXJJbmZvID0gbVN5bmNBZGFwdGVycy5nZXRTZXJ2aWNlSW5mbygKLSAgICAgICAgICAgICAgICAgICAgU3luY0FkYXB0ZXJUeXBlLm5ld0tleShvcC5hdXRob3JpdHksIG9wLmFjY291bnQudHlwZSksIG9wLnVzZXJJZCk7Ci0gICAgICAgICAgICBpZiAoc3luY0FkYXB0ZXJJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJNaXNzaW5nIHN5bmMgYWRhcHRlciBpbmZvIGZvciBhdXRob3JpdHkgIiArIG9wLmF1dGhvcml0eSArICIsIHVzZXJJZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIG9wLnVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmaW5hbCBQYWlyPExvbmcsIExvbmc+IGJhY2tvZmYgPSBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0QmFja29mZihpbmZvKTsKKyAgICAgICAgICAgIFN5bmNPcGVyYXRpb24gb3BlcmF0aW9uVG9BZGQ7CisgICAgICAgICAgICBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTZXJ2aWNlSW5mbzxTeW5jQWRhcHRlclR5cGU+IHN5bmNBZGFwdGVySW5mbyA9IG1TeW5jQWRhcHRlcnMuZ2V0U2VydmljZUluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICBTeW5jQWRhcHRlclR5cGUubmV3S2V5KGluZm8ucHJvdmlkZXIsIGluZm8uYWNjb3VudC50eXBlKSwgaW5mby51c2VySWQpOworICAgICAgICAgICAgICAgIGlmIChzeW5jQWRhcHRlckluZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIk1pc3Npbmcgc3luYyBhZGFwdGVyIGluZm8gZm9yIGF1dGhvcml0eSAiICsgb3AudGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3BlcmF0aW9uVG9BZGQgPSBuZXcgU3luY09wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uYWNjb3VudCwgaW5mby51c2VySWQsIG9wLnJlYXNvbiwgb3Auc3luY1NvdXJjZSwgaW5mby5wcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wLmV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogZGVsYXkgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIGZsZXggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICBiYWNrb2ZmICE9IG51bGwgPyBiYWNrb2ZmLmZpcnN0IDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5nZXREZWxheVVudGlsVGltZShpbmZvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mby50eXBlLmFsbG93UGFyYWxsZWxTeW5jcygpKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25Ub0FkZC5leHBlZGl0ZWQgPSBvcC5leHBlZGl0ZWQ7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9uVG9BZGQucGVuZGluZ09wZXJhdGlvbiA9IG9wOworICAgICAgICAgICAgICAgIGFkZChvcGVyYXRpb25Ub0FkZCwgb3ApOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgbVBhY2thZ2VNYW5hZ2VyLmdldFNlcnZpY2VJbmZvKGluZm8uc2VydmljZSwgMCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJNaXNzaW5nIHN5bmMgc2VydmljZSBmb3IgYXV0aG9yaXR5ICIgKyBvcC50YXJnZXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvcGVyYXRpb25Ub0FkZCA9IG5ldyBTeW5jT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5zZXJ2aWNlLCBpbmZvLnVzZXJJZCwgb3AucmVhc29uLCBvcC5zeW5jU291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3AuZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBkZWxheSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogZmxleCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tvZmYgIT0gbnVsbCA/IGJhY2tvZmYuZmlyc3QgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLmdldERlbGF5VW50aWxUaW1lKGluZm8pKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25Ub0FkZC5leHBlZGl0ZWQgPSBvcC5leHBlZGl0ZWQ7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9uVG9BZGQucGVuZGluZ09wZXJhdGlvbiA9IG9wOworICAgICAgICAgICAgICAgIGFkZChvcGVyYXRpb25Ub0FkZCwgb3ApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3luY09wZXJhdGlvbiBzeW5jT3BlcmF0aW9uID0gbmV3IFN5bmNPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgIG9wLmFjY291bnQsIG9wLnVzZXJJZCwgb3AucmVhc29uLCBvcC5zeW5jU291cmNlLCBvcC5hdXRob3JpdHksIG9wLmV4dHJhcywKLSAgICAgICAgICAgICAgICAgICAgMCAvKiBkZWxheSAqLywgMCAvKiBmbGV4ICovLCBiYWNrb2ZmICE9IG51bGwgPyBiYWNrb2ZmLmZpcnN0IDogMCwKLSAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLmdldERlbGF5VW50aWxUaW1lKG9wLmFjY291bnQsIG9wLnVzZXJJZCwgb3AuYXV0aG9yaXR5KSwKLSAgICAgICAgICAgICAgICAgICAgc3luY0FkYXB0ZXJJbmZvLnR5cGUuYWxsb3dQYXJhbGxlbFN5bmNzKCkpOwotICAgICAgICAgICAgc3luY09wZXJhdGlvbi5leHBlZGl0ZWQgPSBvcC5leHBlZGl0ZWQ7Ci0gICAgICAgICAgICBzeW5jT3BlcmF0aW9uLnBlbmRpbmdPcGVyYXRpb24gPSBvcDsKLSAgICAgICAgICAgIGFkZChzeW5jT3BlcmF0aW9uLCBvcCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTExOSwxMiArMTQ0LDggQEAKICAgICAgICAgb3BlcmF0aW9uLnBlbmRpbmdPcGVyYXRpb24gPSBwb3A7CiAgICAgICAgIC8vIERvbid0IHVwZGF0ZSB0aGUgUGVuZGluZ09wIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4gVGhpcyByZWFsbHkgaXMganVzdCBhIHBsYWNlaG9sZGVyLAogICAgICAgICAvLyBubyBhY3R1YWwgc2NoZWR1bGluZyBpbmZvIGlzIHBsYWNlZCBoZXJlLgotICAgICAgICAvLyBUT0RPOiBDaGFuZ2UgdGhpcyB0byBzdXBwb3J0IHNlcnZpY2UgY29tcG9uZW50cy4KICAgICAgICAgaWYgKG9wZXJhdGlvbi5wZW5kaW5nT3BlcmF0aW9uID09IG51bGwpIHsKLSAgICAgICAgICAgIHBvcCA9IG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5QZW5kaW5nT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uYWNjb3VudCwgb3BlcmF0aW9uLnVzZXJJZCwgb3BlcmF0aW9uLnJlYXNvbiwgb3BlcmF0aW9uLnN5bmNTb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi5hdXRob3JpdHksIG9wZXJhdGlvbi5leHRyYXMsIG9wZXJhdGlvbi5leHBlZGl0ZWQpOwotICAgICAgICAgICAgcG9wID0gbVN5bmNTdG9yYWdlRW5naW5lLmluc2VydEludG9QZW5kaW5nKHBvcCk7CisgICAgICAgICAgICBwb3AgPSBtU3luY1N0b3JhZ2VFbmdpbmUuaW5zZXJ0SW50b1BlbmRpbmcob3BlcmF0aW9uKTsKICAgICAgICAgICAgIGlmIChwb3AgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImVycm9yIGFkZGluZyBwZW5kaW5nIHN5bmMgb3BlcmF0aW9uICIKICAgICAgICAgICAgICAgICAgICAgICAgICsgb3BlcmF0aW9uKTsKQEAgLTEzNiwxNyArMTU3LDE2IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVVzZXIoaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyB2b2lkIHJlbW92ZVVzZXJMb2NrZWQoaW50IHVzZXJJZCkgewogICAgICAgICBBcnJheUxpc3Q8U3luY09wZXJhdGlvbj4gb3BzVG9SZW1vdmUgPSBuZXcgQXJyYXlMaXN0PFN5bmNPcGVyYXRpb24+KCk7CiAgICAgICAgIGZvciAoU3luY09wZXJhdGlvbiBvcCA6IG1PcGVyYXRpb25zTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAob3AudXNlcklkID09IHVzZXJJZCkgeworICAgICAgICAgICAgaWYgKG9wLnRhcmdldC51c2VySWQgPT0gdXNlcklkKSB7CiAgICAgICAgICAgICAgICAgb3BzVG9SZW1vdmUuYWRkKG9wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIGZvciAoU3luY09wZXJhdGlvbiBvcCA6IG9wc1RvUmVtb3ZlKSB7Ci0gICAgICAgICAgICByZW1vdmUob3ApOwotICAgICAgICB9CisgICAgICAgICAgICBmb3IgKFN5bmNPcGVyYXRpb24gb3AgOiBvcHNUb1JlbW92ZSkgeworICAgICAgICAgICAgICAgIHJlbW92ZShvcCk7CisgICAgICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNTQsOCArMTc0LDE1IEBACiAgICAgICogQHBhcmFtIG9wZXJhdGlvbiB0aGUgb3BlcmF0aW9uIHRvIHJlbW92ZQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZShTeW5jT3BlcmF0aW9uIG9wZXJhdGlvbikgeworICAgICAgICBib29sZWFuIGlzTG9nZ2FibGUgPSBMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKTsKICAgICAgICAgU3luY09wZXJhdGlvbiBvcGVyYXRpb25Ub1JlbW92ZSA9IG1PcGVyYXRpb25zTWFwLnJlbW92ZShvcGVyYXRpb24ua2V5KTsKKyAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKKyAgICAgICAgICAgIExvZy52KFRBRywgIkF0dGVtcHRpbmcgdG8gcmVtb3ZlOiAiICsgb3BlcmF0aW9uLmtleSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKG9wZXJhdGlvblRvUmVtb3ZlID09IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiQ291bGQgbm90IGZpbmQ6ICIgKyBvcGVyYXRpb24ua2V5KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoIW1TeW5jU3RvcmFnZUVuZ2luZS5kZWxldGVGcm9tUGVuZGluZyhvcGVyYXRpb25Ub1JlbW92ZS5wZW5kaW5nT3BlcmF0aW9uKSkgewpAQCAtMTY0LDQxICsxOTEsNTggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIG9uQmFja29mZkNoYW5nZWQoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgcHJvdmlkZXJOYW1lLCBsb25nIGJhY2tvZmYpIHsKLSAgICAgICAgLy8gZm9yIGVhY2ggb3AgdGhhdCBtYXRjaGVzIHRoZSBhY2NvdW50IGFuZCBwcm92aWRlciB1cGRhdGUgaXRzCisgICAgLyoqIFJlc2V0IGJhY2tvZmZzIGZvciBhbGwgb3BlcmF0aW9ucyBpbiB0aGUgcXVldWUuICovCisgICAgcHVibGljIHZvaWQgY2xlYXJCYWNrb2ZmcygpIHsKKyAgICAgICAgZm9yIChTeW5jT3BlcmF0aW9uIG9wIDogbU9wZXJhdGlvbnNNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIG9wLmJhY2tvZmYgPSAwTDsKKyAgICAgICAgICAgIG9wLnVwZGF0ZUVmZmVjdGl2ZVJ1blRpbWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG9uQmFja29mZkNoYW5nZWQoU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgdGFyZ2V0LCBsb25nIGJhY2tvZmYpIHsKKyAgICAgICAgLy8gRm9yIGVhY2ggb3AgdGhhdCBtYXRjaGVzIHRoZSB0YXJnZXQgb2YgdGhlIGNoYW5nZWQgb3AsIHVwZGF0ZSBpdHMKICAgICAgICAgLy8gYmFja29mZiBhbmQgZWZmZWN0aXZlU3RhcnRUaW1lCiAgICAgICAgIGZvciAoU3luY09wZXJhdGlvbiBvcCA6IG1PcGVyYXRpb25zTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAob3AuYWNjb3VudC5lcXVhbHMoYWNjb3VudCkgJiYgb3AuYXV0aG9yaXR5LmVxdWFscyhwcm92aWRlck5hbWUpCi0gICAgICAgICAgICAgICAgICAgICYmIG9wLnVzZXJJZCA9PSB1c2VySWQpIHsKKyAgICAgICAgICAgIGlmIChvcC50YXJnZXQubWF0Y2hlc1NwZWModGFyZ2V0KSkgewogICAgICAgICAgICAgICAgIG9wLmJhY2tvZmYgPSBiYWNrb2ZmOwogICAgICAgICAgICAgICAgIG9wLnVwZGF0ZUVmZmVjdGl2ZVJ1blRpbWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIG9uRGVsYXlVbnRpbFRpbWVDaGFuZ2VkKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIHByb3ZpZGVyTmFtZSwgbG9uZyBkZWxheVVudGlsKSB7Ci0gICAgICAgIC8vIGZvciBlYWNoIG9wIHRoYXQgbWF0Y2hlcyB0aGUgYWNjb3VudCBhbmQgcHJvdmlkZXIgdXBkYXRlIGl0cwotICAgICAgICAvLyBkZWxheVVudGlsVGltZSBhbmQgZWZmZWN0aXZlU3RhcnRUaW1lCisgICAgcHVibGljIHZvaWQgb25EZWxheVVudGlsVGltZUNoYW5nZWQoU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgdGFyZ2V0LCBsb25nIGRlbGF5VW50aWwpIHsKKyAgICAgICAgLy8gZm9yIGVhY2ggb3AgdGhhdCBtYXRjaGVzIHRoZSB0YXJnZXQgaW5mbyBvZiB0aGUgcHJvdmlkZWQgb3AsIGNoYW5nZSB0aGUgZGVsYXkgdGltZS4KICAgICAgICAgZm9yIChTeW5jT3BlcmF0aW9uIG9wIDogbU9wZXJhdGlvbnNNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChvcC5hY2NvdW50LmVxdWFscyhhY2NvdW50KSAmJiBvcC5hdXRob3JpdHkuZXF1YWxzKHByb3ZpZGVyTmFtZSkpIHsKKyAgICAgICAgICAgIGlmIChvcC50YXJnZXQubWF0Y2hlc1NwZWModGFyZ2V0KSkgewogICAgICAgICAgICAgICAgIG9wLmRlbGF5VW50aWwgPSBkZWxheVVudGlsOwogICAgICAgICAgICAgICAgIG9wLnVwZGF0ZUVmZmVjdGl2ZVJ1blRpbWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZShBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIFN0cmluZyBhdXRob3JpdHkpIHsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIG9mIHRoZSBTeW5jT3BlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiB0YXJnZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaW5mbyB0YXJnZXQgb2JqZWN0IHByb3ZpZGVkIGhlcmUgY2FuIGhhdmUgbnVsbCBBY2NvdW50L3Byb3ZpZGVyLiBUaGlzIGlzIHRoZSBjYXNlCisgICAgICogd2hlcmUgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBvcHMgYXNzb2NpYXRlZCB3aXRoIGEgcHJvdmlkZXIgKG51bGwgQWNjb3VudCkgb3IgYWxsIG9wcworICAgICAqIGFzc29jaWF0ZWQgd2l0aCBhbiBhY2NvdW50IChudWxsIHByb3ZpZGVyKS4KKyAgICAgKiBAcGFyYW0gZXh0cmFzIG9wdGlvbiBidW5kbGUgdG8gaW5jbHVkZSB0byBmdXJ0aGVyIHNwZWNpZnkgd2hpY2ggb3BlcmF0aW9uIHRvIHJlbW92ZS4gSWYgdGhpcworICAgICAqIGJ1bmRsZSBjb250YWlucyBzeW5jIHNldHRpbmdzIGZsYWdzLCB0aGV5IGFyZSBpZ25vcmVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlbW92ZShmaW5hbCBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvLCBCdW5kbGUgZXh0cmFzKSB7CiAgICAgICAgIEl0ZXJhdG9yPE1hcC5FbnRyeTxTdHJpbmcsIFN5bmNPcGVyYXRpb24+PiBlbnRyaWVzID0gbU9wZXJhdGlvbnNNYXAuZW50cnlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgICB3aGlsZSAoZW50cmllcy5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIE1hcC5FbnRyeTxTdHJpbmcsIFN5bmNPcGVyYXRpb24+IGVudHJ5ID0gZW50cmllcy5uZXh0KCk7CiAgICAgICAgICAgICBTeW5jT3BlcmF0aW9uIHN5bmNPcGVyYXRpb24gPSBlbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgaWYgKGFjY291bnQgIT0gbnVsbCAmJiAhc3luY09wZXJhdGlvbi5hY2NvdW50LmVxdWFscyhhY2NvdW50KSkgeworICAgICAgICAgICAgZmluYWwgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgb3BJbmZvID0gc3luY09wZXJhdGlvbi50YXJnZXQ7CisgICAgICAgICAgICBpZiAoIW9wSW5mby5tYXRjaGVzU3BlYyhpbmZvKSkgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGF1dGhvcml0eSAhPSBudWxsICYmICFzeW5jT3BlcmF0aW9uLmF1dGhvcml0eS5lcXVhbHMoYXV0aG9yaXR5KSkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHVzZXJJZCAhPSBzeW5jT3BlcmF0aW9uLnVzZXJJZCkgeworICAgICAgICAgICAgaWYgKGV4dHJhcyAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICYmICFTeW5jTWFuYWdlci5zeW5jRXh0cmFzRXF1YWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5leHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBubyBjb25maWcgZmxhZ3MqLykpIHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVudHJpZXMucmVtb3ZlKCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvU3luY1N0b3JhZ2VFbmdpbmUuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jU3RvcmFnZUVuZ2luZS5qYXZhCmluZGV4IDEyNGJjNjAuLjVkZjdmYzYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jU3RvcmFnZUVuZ2luZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jU3RvcmFnZUVuZ2luZS5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklTeW5jU3RhdHVzT2JzZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlBlcmlvZGljU3luYzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU3luY0luZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TeW5jU3RhdHVzSW5mbzsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZTsKQEAgLTM2LDEwICszNywxMiBAQAogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlQ2FsbGJhY2tMaXN0OwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXRvbWljRmlsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5QYWlyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nOwpAQCAtNzEsNyArNzQsNiBAQAogcHVibGljIGNsYXNzIFN5bmNTdG9yYWdlRW5naW5lIGV4dGVuZHMgSGFuZGxlciB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlN5bmNNYW5hZ2VyIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19GSUxFID0gIlN5bmNNYW5hZ2VyRmlsZSI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX0FUVFJfTkVYVF9BVVRIT1JJVFlfSUQgPSAibmV4dEF1dGhvcml0eUlkIjsKQEAgLTEwOCwxMCArMTEwLDcgQEAKIAogICAgIC8qKiBFbnVtIHZhbHVlIGZvciBhIGxvY2FsLWluaXRpYXRlZCBzeW5jLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPVVJDRV9MT0NBTCA9IDE7Ci0gICAgLyoqCi0gICAgICogRW51bSB2YWx1ZSBmb3IgYSBwb2xsLWJhc2VkIHN5bmMgKGUuZy4sIHVwb24gY29ubmVjdGlvbiB0bwotICAgICAqIG5ldHdvcmspCi0gICAgICovCisgICAgLyoqIEVudW0gdmFsdWUgZm9yIGEgcG9sbC1iYXNlZCBzeW5jIChlLmcuLCB1cG9uIGNvbm5lY3Rpb24gdG8gbmV0d29yaykgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT1VSQ0VfUE9MTCA9IDI7CiAKICAgICAvKiogRW51bSB2YWx1ZSBmb3IgYSB1c2VyLWluaXRpYXRlZCBzeW5jLiAqLwpAQCAtMTE5LDYgKzExOCw5IEBACiAKICAgICAvKiogRW51bSB2YWx1ZSBmb3IgYSBwZXJpb2RpYyBzeW5jLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPVVJDRV9QRVJJT0RJQyA9IDQ7CisgICAgCisgICAgLyoqIEVudW0gdmFsdWUgZm9yIGEgc3luYyBzdGFydGVkIGZvciBhIHNlcnZpY2UuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VUkNFX1NFUlZJQ0UgPSA1OwogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIE5PVF9JTl9CQUNLT0ZGX01PREUgPSAtMTsKIApAQCAtMTI4LDcgKzEzMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTE9DQUwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBPTEwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVTRVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBFUklPRElDIiB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBFUklPRElDIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRVJWSUNFIn07CiAKICAgICAvLyBUaGUgTUVTRyBjb2x1bW4gd2lsbCBjb250YWluIG9uZSBvZiB0aGVzZSBvciBvbmUgb2YgdGhlIEVycm9yIHR5cGVzLgogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU0dfU1VDQ0VTUyA9ICJzdWNjZXNzIjsKQEAgLTE1Niw0MSArMTU5LDU0IEBACiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBQZW5kaW5nT3BlcmF0aW9uIHsKLSAgICAgICAgZmluYWwgQWNjb3VudCBhY2NvdW50OwotICAgICAgICBmaW5hbCBpbnQgdXNlcklkOworICAgICAgICBmaW5hbCBFbmRQb2ludCB0YXJnZXQ7CiAgICAgICAgIGZpbmFsIGludCByZWFzb247CiAgICAgICAgIGZpbmFsIGludCBzeW5jU291cmNlOwotICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5OwogICAgICAgICBmaW5hbCBCdW5kbGUgZXh0cmFzOyAgICAgICAgLy8gbm90ZTogcmVhZC1vbmx5LgotICAgICAgICBmaW5hbCBDb21wb25lbnROYW1lIHNlcnZpY2VOYW1lOwogICAgICAgICBmaW5hbCBib29sZWFuIGV4cGVkaXRlZDsKIAotICAgICAgICBpbnQgYXV0aG9yaXR5SWQ7CisgICAgICAgIGZpbmFsIGludCBhdXRob3JpdHlJZDsKKyAgICAgICAgLy8gTm8gbG9uZ2VyIHVzZWQuCisgICAgICAgIC8vIEtlZXAgYXJvdW5kIGZvciBzYWtlIHVwIHVwZGF0aW5nIGZyb20gcGVuZGluZy5iaW4gdG8gcGVuZGluZy54bWwKICAgICAgICAgYnl0ZVtdIGZsYXRFeHRyYXM7CiAKLSAgICAgICAgUGVuZGluZ09wZXJhdGlvbihBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIGludCByZWFzb24sIGludCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgU3RyaW5nIGF1dGhvcml0eSwgQnVuZGxlIGV4dHJhcywgYm9vbGVhbiBleHBlZGl0ZWQpIHsKLSAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7Ci0gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKKyAgICAgICAgUGVuZGluZ09wZXJhdGlvbihBdXRob3JpdHlJbmZvIGF1dGhvcml0eSwgaW50IHJlYXNvbiwgaW50IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgQnVuZGxlIGV4dHJhcywgYm9vbGVhbiBleHBlZGl0ZWQpIHsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gYXV0aG9yaXR5LnRhcmdldDsKICAgICAgICAgICAgIHRoaXMuc3luY1NvdXJjZSA9IHNvdXJjZTsKICAgICAgICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uOwotICAgICAgICAgICAgdGhpcy5hdXRob3JpdHkgPSBhdXRob3JpdHk7CiAgICAgICAgICAgICB0aGlzLmV4dHJhcyA9IGV4dHJhcyAhPSBudWxsID8gbmV3IEJ1bmRsZShleHRyYXMpIDogZXh0cmFzOwogICAgICAgICAgICAgdGhpcy5leHBlZGl0ZWQgPSBleHBlZGl0ZWQ7Ci0gICAgICAgICAgICB0aGlzLmF1dGhvcml0eUlkID0gLTE7Ci0gICAgICAgICAgICB0aGlzLnNlcnZpY2VOYW1lID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuYXV0aG9yaXR5SWQgPSBhdXRob3JpdHkuaWRlbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBQZW5kaW5nT3BlcmF0aW9uKFBlbmRpbmdPcGVyYXRpb24gb3RoZXIpIHsKLSAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IG90aGVyLmFjY291bnQ7Ci0gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IG90aGVyLnVzZXJJZDsKICAgICAgICAgICAgIHRoaXMucmVhc29uID0gb3RoZXIucmVhc29uOwogICAgICAgICAgICAgdGhpcy5zeW5jU291cmNlID0gb3RoZXIuc3luY1NvdXJjZTsKLSAgICAgICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gb3RoZXIuYXV0aG9yaXR5OworICAgICAgICAgICAgdGhpcy50YXJnZXQgPSBvdGhlci50YXJnZXQ7CiAgICAgICAgICAgICB0aGlzLmV4dHJhcyA9IG90aGVyLmV4dHJhczsKICAgICAgICAgICAgIHRoaXMuYXV0aG9yaXR5SWQgPSBvdGhlci5hdXRob3JpdHlJZDsKICAgICAgICAgICAgIHRoaXMuZXhwZWRpdGVkID0gb3RoZXIuZXhwZWRpdGVkOwotICAgICAgICAgICAgdGhpcy5zZXJ2aWNlTmFtZSA9IG90aGVyLnNlcnZpY2VOYW1lOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnNpZGVyZWQgZXF1YWwgaWYgdGhleSB0YXJnZXQgdGhlIHNhbWUgc3luYyBhZGFwdGVyIChBCisgICAgICAgICAqIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuU3luY1NlcnZpY2V9CisgICAgICAgICAqIGlzIGNvbnNpZGVyZWQgYW4gYWRhcHRlciksIGZvciB0aGUgc2FtZSB1c2VySWQuCisgICAgICAgICAqIEBwYXJhbSBvdGhlciBQZW5kaW5nT3BlcmF0aW9uIHRvIGNvbXBhcmUuCisgICAgICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdHdvIHBlbmRpbmcgb3BzIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhQZW5kaW5nT3BlcmF0aW9uIG90aGVyKSB7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0Lm1hdGNoZXNTcGVjKG90aGVyLnRhcmdldCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJzZXJ2aWNlPSIgKyB0YXJnZXQuc2VydmljZQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHVzZXI9IiArIHRhcmdldC51c2VySWQKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdXRoPSIgKyB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhY2NvdW50PSIgKyB0YXJnZXQuYWNjb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHNyYz0iICsgc3luY1NvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGV4dHJhcz0iICsgZXh0cmFzOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDQsMTcgKzIyMCw5NiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBBdXRob3JpdHlJbmZvIHsKKyAgICAvKiogIEJhcmUgYm9uZXMgcmVwcmVzZW50YXRpb24gb2YgYSBzeW5jIHRhcmdldC4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEVuZFBvaW50IHsKKyAgICAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBFbmRQb2ludCBVU0VSX0FMTF9QUk9WSURFUl9BTExfQUNDT1VOVFNfQUxMID0KKyAgICAgICAgICAgICAgICBuZXcgRW5kUG9pbnQobnVsbCwgbnVsbCwgVXNlckhhbmRsZS5VU0VSX0FMTCk7CiAgICAgICAgIGZpbmFsIENvbXBvbmVudE5hbWUgc2VydmljZTsKICAgICAgICAgZmluYWwgQWNjb3VudCBhY2NvdW50OwogICAgICAgICBmaW5hbCBpbnQgdXNlcklkOwotICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5OworICAgICAgICBmaW5hbCBTdHJpbmcgcHJvdmlkZXI7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gdGFyZ2V0X3NlcnZpY2U7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gdGFyZ2V0X3Byb3ZpZGVyOworCisgICAgICAgIHB1YmxpYyBFbmRQb2ludChDb21wb25lbnROYW1lIHNlcnZpY2UsIGludCB1c2VySWQpIHsKKyAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7CisgICAgICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKKyAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IG51bGw7CisgICAgICAgICAgICB0aGlzLnByb3ZpZGVyID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0X3NlcnZpY2UgPSB0cnVlOworICAgICAgICAgICAgdGhpcy50YXJnZXRfcHJvdmlkZXIgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBFbmRQb2ludChBY2NvdW50IGFjY291bnQsIFN0cmluZyBwcm92aWRlciwgaW50IHVzZXJJZCkgeworICAgICAgICAgICAgdGhpcy5hY2NvdW50ID0gYWNjb3VudDsKKyAgICAgICAgICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjsKKyAgICAgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgICAgICAgICAgdGhpcy5zZXJ2aWNlID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0X3NlcnZpY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0X3Byb3ZpZGVyID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBBbiBFbmRwb2ludCBmb3IgYSBzeW5jIG1hdGNoZXMgaWYgaXQgdGFyZ2V0cyB0aGUgc2FtZSBzeW5jIGFkYXB0ZXIgZm9yIHRoZSBzYW1lIHVzZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBzcGVjIHRoZSBFbmRwb2ludCB0byBtYXRjaC4gSWYgdGhlIHNwZWMgaGFzIG51bGwgZmllbGRzLCB0aGV5IGluZGljYXRlIGEgd2lsZGNhcmQKKyAgICAgICAgICogYW5kIG1hdGNoIGFueS4gCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzU3BlYyhFbmRQb2ludCBzcGVjKSB7CisgICAgICAgICAgICBpZiAodXNlcklkICE9IHNwZWMudXNlcklkCisgICAgICAgICAgICAgICAgICAgICYmIHVzZXJJZCAhPSBVc2VySGFuZGxlLlVTRVJfQUxMCisgICAgICAgICAgICAgICAgICAgICYmIHNwZWMudXNlcklkICE9IFVzZXJIYW5kbGUuVVNFUl9BTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGFyZ2V0X3NlcnZpY2UgJiYgc3BlYy50YXJnZXRfc2VydmljZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLmVxdWFscyhzcGVjLnNlcnZpY2UpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRfcHJvdmlkZXIgJiYgc3BlYy50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGFjY291bnRzTWF0Y2g7CisgICAgICAgICAgICAgICAgaWYgKHNwZWMuYWNjb3VudCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGFjY291bnRzTWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFjY291bnRzTWF0Y2ggPSBhY2NvdW50LmVxdWFscyhzcGVjLmFjY291bnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBib29sZWFuIHByb3ZpZGVyc01hdGNoOworICAgICAgICAgICAgICAgIGlmIChzcGVjLnByb3ZpZGVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJzTWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyc01hdGNoID0gcHJvdmlkZXIuZXF1YWxzKHNwZWMucHJvdmlkZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gYWNjb3VudHNNYXRjaCAmJiBwcm92aWRlcnNNYXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgICAgIGlmICh0YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoYWNjb3VudCA9PSBudWxsID8gIkFMTCBBQ0NTIiA6IGFjY291bnQubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgiLyIpCisgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQocHJvdmlkZXIgPT0gbnVsbCA/ICJBTEwgUERSUyIgOiBwcm92aWRlcik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKHNlcnZpY2UuZ2V0UGFja2FnZU5hbWUoKSArICIvIikKKyAgICAgICAgICAgICAgICAgIC5hcHBlbmQoc2VydmljZS5nZXRDbGFzc05hbWUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNiLmFwcGVuZCgiOnUiICsgdXNlcklkKTsKKyAgICAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBBdXRob3JpdHlJbmZvIHsKKyAgICAgICAgZmluYWwgRW5kUG9pbnQgdGFyZ2V0OwogICAgICAgICBmaW5hbCBpbnQgaWRlbnQ7CiAgICAgICAgIGJvb2xlYW4gZW5hYmxlZDsKICAgICAgICAgaW50IHN5bmNhYmxlOworICAgICAgICAvKiogVGltZSBhdCB3aGljaCB0aGlzIHN5bmMgd2lsbCBydW4sIHRha2luZyBpbnRvIGFjY291bnQgYmFja29mZi4gKi8KICAgICAgICAgbG9uZyBiYWNrb2ZmVGltZTsKKyAgICAgICAgLyoqIEFtb3VudCBvZiBkZWxheSBkdWUgdG8gYmFja29mZi4gKi8KICAgICAgICAgbG9uZyBiYWNrb2ZmRGVsYXk7CisgICAgICAgIC8qKiBUaW1lIG9mZnNldCB0byBhZGQgdG8gYW55IHJlcXVlc3RzIGNvbWluZyB0byB0aGlzIHRhcmdldC4gKi8KICAgICAgICAgbG9uZyBkZWxheVVudGlsOworCiAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxQZXJpb2RpY1N5bmM+IHBlcmlvZGljU3luY3M7CiAKICAgICAgICAgLyoqCkBAIC0yMjQsMTAgKzMxOSw3IEBACiAgICAgICAgICAqIEBwYXJhbSB0b0NvcHkgQXV0aG9yaXR5SW5mbyB0byBiZSBjb3BpZWQuCiAgICAgICAgICAqLwogICAgICAgICBBdXRob3JpdHlJbmZvKEF1dGhvcml0eUluZm8gdG9Db3B5KSB7Ci0gICAgICAgICAgICBhY2NvdW50ID0gdG9Db3B5LmFjY291bnQ7Ci0gICAgICAgICAgICB1c2VySWQgPSB0b0NvcHkudXNlcklkOwotICAgICAgICAgICAgYXV0aG9yaXR5ID0gdG9Db3B5LmF1dGhvcml0eTsKLSAgICAgICAgICAgIHNlcnZpY2UgPSB0b0NvcHkuc2VydmljZTsKKyAgICAgICAgICAgIHRhcmdldCA9IHRvQ29weS50YXJnZXQ7CiAgICAgICAgICAgICBpZGVudCA9IHRvQ29weS5pZGVudDsKICAgICAgICAgICAgIGVuYWJsZWQgPSB0b0NvcHkuZW5hYmxlZDsKICAgICAgICAgICAgIHN5bmNhYmxlID0gdG9Db3B5LnN5bmNhYmxlOwpAQCAtMjQxLDU2ICszMzMsNDAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDcmVhdGUgYW4gYXV0aG9yaXR5IHdpdGggb25lIHBlcmlvZGljIHN5bmMgc2NoZWR1bGVkIHdpdGggYW4gZW1wdHkgYnVuZGxlIGFuZCBzeW5jaW5nCi0gICAgICAgICAqIGV2ZXJ5IGRheS4gQW4gZW1wdHkgYnVuZGxlIGlzIGNvbnNpZGVyZWQgZXF1YWwgdG8gYW55IG90aGVyIGJ1bmRsZSBzZWUKLSAgICAgICAgICoge0BsaW5rIFBlcmlvZGljU3luYy5zeW5jRXh0cmFzRXF1YWxzfS4KLSAgICAgICAgICogQHBhcmFtIGFjY291bnQgQWNjb3VudCB0aGF0IHRoaXMgYXV0aG9yaXR5IHN5bmNzLgotICAgICAgICAgKiBAcGFyYW0gdXNlcklkIHdoaWNoIHVzZXIgdGhpcyBzeW5jIGlzIHJlZ2lzdGVyZWQgZm9yLgotICAgICAgICAgKiBAcGFyYW0gdXNlcklkIHVzZXIgZm9yIHdoaWNoIHRoaXMgYXV0aG9yaXR5IGlzIHJlZ2lzdGVyZWQuCi0gICAgICAgICAqIEBwYXJhbSBpZGVudCBpZCBvZiB0aGlzIGF1dGhvcml0eS4KLSAgICAgICAgICovCi0gICAgICAgIEF1dGhvcml0eUluZm8oQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5LCBpbnQgaWRlbnQpIHsKLSAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7Ci0gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICAgICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gYXV0aG9yaXR5OwotICAgICAgICAgICAgdGhpcy5zZXJ2aWNlID0gbnVsbDsKLSAgICAgICAgICAgIHRoaXMuaWRlbnQgPSBpZGVudDsKLSAgICAgICAgICAgIGVuYWJsZWQgPSBTWU5DX0VOQUJMRURfREVGQVVMVDsKLSAgICAgICAgICAgIHN5bmNhYmxlID0gLTE7IC8vIGRlZmF1bHQgdG8gInVua25vd24iCi0gICAgICAgICAgICBiYWNrb2ZmVGltZSA9IC0xOyAvLyBpZiA8IDAgdGhlbiB3ZSBhcmVuJ3QgaW4gYmFja29mZiBtb2RlCi0gICAgICAgICAgICBiYWNrb2ZmRGVsYXkgPSAtMTsgLy8gaWYgPCAwIHRoZW4gd2UgYXJlbid0IGluIGJhY2tvZmYgbW9kZQorICAgICAgICBBdXRob3JpdHlJbmZvKEVuZFBvaW50IGluZm8sIGludCBpZCkgeworICAgICAgICAgICAgdGFyZ2V0ID0gaW5mbzsKKyAgICAgICAgICAgIGlkZW50ID0gaWQ7CisgICAgICAgICAgICBlbmFibGVkID0gaW5mby50YXJnZXRfcHJvdmlkZXIgPworICAgICAgICAgICAgICAgICAgICBTWU5DX0VOQUJMRURfREVGQVVMVCA6IHRydWU7CisgICAgICAgICAgICAvLyBTZXJ2aWNlIGlzIGFjdGl2ZSBieSBkZWZhdWx0LAorICAgICAgICAgICAgaWYgKGluZm8udGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnN5bmNhYmxlID0gMTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBlcmlvZGljU3luY3MgPSBuZXcgQXJyYXlMaXN0PFBlcmlvZGljU3luYz4oKTsKLSAgICAgICAgICAgIC8vIE9sZCB2ZXJzaW9uIGFkZHMgb25lIHBlcmlvZGljIHN5bmMgYSBkYXkuCi0gICAgICAgICAgICBwZXJpb2RpY1N5bmNzLmFkZChuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ1bmRsZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1BPTExfRlJFUVVFTkNZX1NFQ09ORFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZURlZmF1bHRGbGV4VGltZShERUZBVUxUX1BPTExfRlJFUVVFTkNZX1NFQ09ORFMpKSk7CisgICAgICAgICAgICBkZWZhdWx0SW5pdGlhbGlzYXRpb24oKTsKICAgICAgICAgfQogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDcmVhdGUgYW4gYXV0aG9yaXR5IHdpdGggb25lIHBlcmlvZGljIHN5bmMgc2NoZWR1bGVkIHdpdGggYW4gZW1wdHkgYnVuZGxlIGFuZCBzeW5jaW5nCi0gICAgICAgICAqIGV2ZXJ5IGRheSB1c2luZyBhIHN5bmMgc2VydmljZS4KLSAgICAgICAgICogQHBhcmFtIGNuYW1lIHN5bmMgc2VydmljZSBpZGVudGlmaWVyLgotICAgICAgICAgKiBAcGFyYW0gdXNlcklkIHVzZXIgZm9yIHdoaWNoIHRoaXMgYXV0aG9yaXR5IGlzIHJlZ2lzdGVyZWQuCi0gICAgICAgICAqIEBwYXJhbSBpZGVudCBpZCBvZiB0aGlzIGF1dGhvcml0eS4KLSAgICAgICAgICovCi0gICAgICAgIEF1dGhvcml0eUluZm8oQ29tcG9uZW50TmFtZSBjbmFtZSwgaW50IHVzZXJJZCwgaW50IGlkZW50KSB7Ci0gICAgICAgICAgICB0aGlzLmFjY291bnQgPSBudWxsOwotICAgICAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgICAgICAgICB0aGlzLmF1dGhvcml0eSA9IG51bGw7Ci0gICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSBjbmFtZTsKLSAgICAgICAgICAgIHRoaXMuaWRlbnQgPSBpZGVudDsKLSAgICAgICAgICAgIC8vIFN5bmMgc2VydmljZSBpcyBhbHdheXMgZW5hYmxlZC4KLSAgICAgICAgICAgIGVuYWJsZWQgPSB0cnVlOworICAgICAgICBwcml2YXRlIHZvaWQgZGVmYXVsdEluaXRpYWxpc2F0aW9uKCkgewogICAgICAgICAgICAgc3luY2FibGUgPSAtMTsgLy8gZGVmYXVsdCB0byAidW5rbm93biIKICAgICAgICAgICAgIGJhY2tvZmZUaW1lID0gLTE7IC8vIGlmIDwgMCB0aGVuIHdlIGFyZW4ndCBpbiBiYWNrb2ZmIG1vZGUKICAgICAgICAgICAgIGJhY2tvZmZEZWxheSA9IC0xOyAvLyBpZiA8IDAgdGhlbiB3ZSBhcmVuJ3QgaW4gYmFja29mZiBtb2RlCi0gICAgICAgICAgICBwZXJpb2RpY1N5bmNzID0gbmV3IEFycmF5TGlzdDxQZXJpb2RpY1N5bmM+KCk7Ci0gICAgICAgICAgICBwZXJpb2RpY1N5bmNzLmFkZChuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ1bmRsZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1BPTExfRlJFUVVFTkNZX1NFQ09ORFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZURlZmF1bHRGbGV4VGltZShERUZBVUxUX1BPTExfRlJFUVVFTkNZX1NFQ09ORFMpKSk7CisgICAgICAgICAgICBQZXJpb2RpY1N5bmMgZGVmYXVsdFN5bmM7CisgICAgICAgICAgICAvLyBPbGQgdmVyc2lvbiBpcyBvbmUgc3luYyBhIGRheS4gRW1wdHkgYnVuZGxlIGdldHMgcmVwbGFjZWQgYnkgYW55IGFkZFBlcmlvZGljU3luYygpCisgICAgICAgICAgICAvLyBjYWxsLgorICAgICAgICAgICAgaWYgKHRhcmdldC50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICBkZWZhdWx0U3luYyA9CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUGVyaW9kaWNTeW5jKHRhcmdldC5hY2NvdW50LCB0YXJnZXQucHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ1bmRsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfUE9MTF9GUkVRVUVOQ1lfU0VDT05EUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVEZWZhdWx0RmxleFRpbWUoREVGQVVMVF9QT0xMX0ZSRVFVRU5DWV9TRUNPTkRTKSk7CisgICAgICAgICAgICAgICAgcGVyaW9kaWNTeW5jcy5hZGQoZGVmYXVsdFN5bmMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0ICsgIiwgZW5hYmxlZD0iICsgZW5hYmxlZCArICIsIHN5bmNhYmxlPSIgKyBzeW5jYWJsZSArICIsIGJhY2tvZmY9IgorICAgICAgICAgICAgICAgICAgICArIGJhY2tvZmZUaW1lICsgIiwgZGVsYXk9IiArIGRlbGF5VW50aWw7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyMiwxNiArMzk4LDkgQEAKICAgICB9CiAKICAgICBpbnRlcmZhY2UgT25TeW5jUmVxdWVzdExpc3RlbmVyIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIGEgc3luYyBpcyBuZWVkZWQgb24gYW4gYWNjb3VudChzKSBkdWUgdG8gc29tZSBjaGFuZ2UgaW4gc3RhdGUuCi0gICAgICAgICAqIEBwYXJhbSBhY2NvdW50Ci0gICAgICAgICAqIEBwYXJhbSB1c2VySWQKLSAgICAgICAgICogQHBhcmFtIHJlYXNvbgotICAgICAgICAgKiBAcGFyYW0gYXV0aG9yaXR5Ci0gICAgICAgICAqIEBwYXJhbSBleHRyYXMKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU3luY1JlcXVlc3QoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBpbnQgcmVhc29uLCBTdHJpbmcgYXV0aG9yaXR5LAotICAgICAgICAgICAgICAgIEJ1bmRsZSBleHRyYXMpOworCisgICAgICAgIC8qKiBDYWxsZWQgd2hlbiBhIHN5bmMgaXMgbmVlZGVkIG9uIGFuIGFjY291bnQocykgZHVlIHRvIHNvbWUgY2hhbmdlIGluIHN0YXRlLiAqLworICAgICAgICBwdWJsaWMgdm9pZCBvblN5bmNSZXF1ZXN0KEVuZFBvaW50IGluZm8sIGludCByZWFzb24sIEJ1bmRsZSBleHRyYXMpOwogICAgIH0KIAogICAgIC8vIFByaW1hcnkgbGlzdCBvZiBhbGwgc3luY2FibGUgYXV0aG9yaXRpZXMuICBBbHNvIG91ciBnbG9iYWwgbG9jay4KQEAgLTM1Niw5ICs0MjUsOSBAQAogICAgIHByaXZhdGUgZmluYWwgUmVtb3RlQ2FsbGJhY2tMaXN0PElTeW5jU3RhdHVzT2JzZXJ2ZXI+IG1DaGFuZ2VMaXN0ZW5lcnMKICAgICAgICAgICAgID0gbmV3IFJlbW90ZUNhbGxiYWNrTGlzdDxJU3luY1N0YXR1c09ic2VydmVyPigpOwogCi0gICAgLyoqIFJldmVyc2UgbWFwcGluZyBmb3IgY29tcG9uZW50IG5hbWUgLT4gPHVzZXJpZCAtPiBhdXRob3JpdHkgaWQ+LiAqLwotICAgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxDb21wb25lbnROYW1lLCBTcGFyc2VBcnJheTxBdXRob3JpdHlJbmZvPj4gbVNlcnZpY2VzID0KLSAgICAgICAgICAgIG5ldyBIYXNoTWFwPENvbXBvbmVudE5hbWUsIFNwYXJzZUFycmF5PEF1dGhvcml0eUluZm8+PigpOworICAgIC8qKiBSZXZlcnNlIG1hcHBpbmcgZm9yIGNvbXBvbmVudCBuYW1lIC0+IDx1c2VyaWQgLT4gdGFyZ2V0IGlkPi4gKi8KKyAgICBwcml2YXRlIGZpbmFsIEFycmF5TWFwPENvbXBvbmVudE5hbWUsIFNwYXJzZUFycmF5PEF1dGhvcml0eUluZm8+PiBtU2VydmljZXMgPQorICAgICAgICAgICAgbmV3IEFycmF5TWFwPENvbXBvbmVudE5hbWUsIFNwYXJzZUFycmF5PEF1dGhvcml0eUluZm8+PigpOwogCiAgICAgcHJpdmF0ZSBpbnQgbU5leHRBdXRob3JpdHlJZCA9IDA7CiAKQEAgLTUwMSw3ICs1NzAsNyBAQAogICAgICAqIEByZXR1cm4gYW1vdW50IG9mIHNlY29uZHMgYmVmb3JlIHN5bmNUaW1lU2Vjb25kcyB0aGF0IHRoZSBzeW5jIGNhbiBvY2N1ci4KICAgICAgKiAgICAgIEkuZS4KICAgICAgKiAgICAgIGVhcmxpZXN0X3N5bmNfdGltZSA9IHN5bmNUaW1lU2Vjb25kcyAtIGNhbGN1bGF0ZURlZmF1bHRGbGV4VGltZShzeW5jVGltZVNlY29uZHMpCi0gICAgICogVGhlIGZsZXggdGltZSBpcyBjYXBwZWQgYXQgYSBwZXJjZW50YWdlIG9mIHRoZSB7QGxpbmsgREVGQVVMVF9QT0xMX0ZSRVFVRU5DWV9TRUNPTkRTfS4KKyAgICAgKiBUaGUgZmxleCB0aW1lIGlzIGNhcHBlZCBhdCBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHtAbGluayAjREVGQVVMVF9QT0xMX0ZSRVFVRU5DWV9TRUNPTkRTfS4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGxvbmcgY2FsY3VsYXRlRGVmYXVsdEZsZXhUaW1lKGxvbmcgc3luY1RpbWVTZWNvbmRzKSB7CiAgICAgICAgIGlmIChzeW5jVGltZVNlY29uZHMgPCBERUZBVUxUX01JTl9GTEVYX0FMTE9XRURfU0VDUykgewpAQCAtNTM1LDcgKzYwNCw3IEBACiAgICAgICAgICAgICBtQ2hhbmdlTGlzdGVuZXJzLmZpbmlzaEJyb2FkY2FzdCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgTG9nLnYoVEFHLCAicmVwb3J0Q2hhbmdlICIgKyB3aGljaCArICIgdG86ICIgKyByZXBvcnRzKTsKICAgICAgICAgfQogCkBAIC01NTUsNyArNjI0LDggQEAKICAgICBwdWJsaWMgYm9vbGVhbiBnZXRTeW5jQXV0b21hdGljYWxseShBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIFN0cmluZyBwcm92aWRlck5hbWUpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtQXV0aG9yaXRpZXMpIHsKICAgICAgICAgICAgIGlmIChhY2NvdW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZChhY2NvdW50LCB1c2VySWQsIHByb3ZpZGVyTmFtZSwKKyAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFbmRQb2ludChhY2NvdW50LCBwcm92aWRlck5hbWUsIHVzZXJJZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0U3luY0F1dG9tYXRpY2FsbHkiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXR5ICE9IG51bGwgJiYgYXV0aG9yaXR5LmVuYWJsZWQ7CiAgICAgICAgICAgICB9CkBAIC01NjMsMTAgKzYzMyw5IEBACiAgICAgICAgICAgICBpbnQgaSA9IG1BdXRob3JpdGllcy5zaXplKCk7CiAgICAgICAgICAgICB3aGlsZSAoaSA+IDApIHsKICAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBtQXV0aG9yaXRpZXMudmFsdWVBdChpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5LmF1dGhvcml0eS5lcXVhbHMocHJvdmlkZXJOYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0aG9yaXR5LnVzZXJJZCA9PSB1c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGF1dGhvcml0eS5lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvID0gbUF1dGhvcml0aWVzLnZhbHVlQXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8udGFyZ2V0Lm1hdGNoZXNTcGVjKG5ldyBFbmRQb2ludChhY2NvdW50LCBwcm92aWRlck5hbWUsIHVzZXJJZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBhdXRob3JpdHlJbmZvLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNTc2LDE1ICs2NDUsMTggQEAKIAogICAgIHB1YmxpYyB2b2lkIHNldFN5bmNBdXRvbWF0aWNhbGx5KEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIHByb3ZpZGVyTmFtZSwKICAgICAgICAgICAgIGJvb2xlYW4gc3luYykgewotICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICBMb2cuZChUQUcsICJzZXRTeW5jQXV0b21hdGljYWxseTogIiArIC8qIGFjY291bnQgKyAqLyIgcHJvdmlkZXIgIiArIHByb3ZpZGVyTmFtZQogICAgICAgICAgICAgICAgICAgICArICIsIHVzZXIgIiArIHVzZXJJZCArICIgLT4gIiArIHN5bmMpOwogICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7Ci0gICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKGFjY291bnQsIHVzZXJJZCwgcHJvdmlkZXJOYW1lLCAtMSwKLSAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPQorICAgICAgICAgICAgICAgICAgICBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRW5kUG9pbnQoYWNjb3VudCwgcHJvdmlkZXJOYW1lLCB1c2VySWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xIC8qIGlkZW50ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgICAgIGlmIChhdXRob3JpdHkuZW5hYmxlZCA9PSBzeW5jKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgInNldFN5bmNBdXRvbWF0aWNhbGx5OiBhbHJlYWR5IHNldCB0byAiICsgc3luYyArICIsIGRvaW5nIG5vdGhpbmciKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjAzLDggKzY3NSw5IEBACiAgICAgcHVibGljIGludCBnZXRJc1N5bmNhYmxlKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIHByb3ZpZGVyTmFtZSkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewogICAgICAgICAgICAgaWYgKGFjY291bnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gZ2V0QXV0aG9yaXR5TG9ja2VkKGFjY291bnQsIHVzZXJJZCwgcHJvdmlkZXJOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgImdldElzU3luY2FibGUiKTsKKyAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFbmRQb2ludChhY2NvdW50LCBwcm92aWRlck5hbWUsIHVzZXJJZCksCisgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IGF1dGhvcml0eSBzeW5jYWJsZSIpOwogICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjE0LDkgKzY4NywxMCBAQAogICAgICAgICAgICAgaW50IGkgPSBtQXV0aG9yaXRpZXMuc2l6ZSgpOwogICAgICAgICAgICAgd2hpbGUgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbUF1dGhvcml0aWVzLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eS5hdXRob3JpdHkuZXF1YWxzKHByb3ZpZGVyTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml0eS5zeW5jYWJsZTsKKyAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gPSBtQXV0aG9yaXRpZXMudmFsdWVBdChpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5SW5mby50YXJnZXQgIT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0aG9yaXR5SW5mby50YXJnZXQucHJvdmlkZXIuZXF1YWxzKHByb3ZpZGVyTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml0eUluZm8uc3luY2FibGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNjI0LDExOSArNjk4LDE3OCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldElzU3luY2FibGUoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgcHJvdmlkZXJOYW1lLCBpbnQgc3luY2FibGUpIHsKLSAgICAgICAgaWYgKHN5bmNhYmxlID4gMSkgewotICAgICAgICAgICAgc3luY2FibGUgPSAxOwotICAgICAgICB9IGVsc2UgaWYgKHN5bmNhYmxlIDwgLTEpIHsKLSAgICAgICAgICAgIHN5bmNhYmxlID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJzZXRJc1N5bmNhYmxlOiAiICsgYWNjb3VudCArICIsIHByb3ZpZGVyICIgKyBwcm92aWRlck5hbWUKLSAgICAgICAgICAgICAgICAgICAgKyAiLCB1c2VyICIgKyB1c2VySWQgKyAiIC0+ICIgKyBzeW5jYWJsZSk7Ci0gICAgICAgIH0KKyAgICAgICAgc2V0U3luY2FibGVTdGF0ZUZvckVuZFBvaW50KG5ldyBFbmRQb2ludChhY2NvdW50LCBwcm92aWRlck5hbWUsIHVzZXJJZCksIHN5bmNhYmxlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRJc1RhcmdldFNlcnZpY2VBY3RpdmUoQ29tcG9uZW50TmFtZSBjbmFtZSwgaW50IHVzZXJJZCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPQotICAgICAgICAgICAgICAgICAgICBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZChhY2NvdW50LCB1c2VySWQsIHByb3ZpZGVyTmFtZSwgLTEsIGZhbHNlKTsKLSAgICAgICAgICAgIGlmIChhdXRob3JpdHkuc3luY2FibGUgPT0gc3luY2FibGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgIGlmIChjbmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRBdXRob3JpdHlMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRW5kUG9pbnQoY25hbWUsIHVzZXJJZCksCisgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IHNlcnZpY2UgYWN0aXZlIik7CisgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIChhdXRob3JpdHkuc3luY2FibGUgPT0gMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJc1RhcmdldFNlcnZpY2VBY3RpdmUoQ29tcG9uZW50TmFtZSBjbmFtZSwgaW50IHVzZXJJZCwgYm9vbGVhbiBhY3RpdmUpIHsKKyAgICAgICAgc2V0U3luY2FibGVTdGF0ZUZvckVuZFBvaW50KG5ldyBFbmRQb2ludChjbmFtZSwgdXNlcklkKSwgYWN0aXZlID8gMSA6IDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFuIGVuYWJsZWQgc3luYyBzZXJ2aWNlIGFuZCBhIHN5bmNhYmxlIHByb3ZpZGVyJ3MgYWRhcHRlciBib3RoIGdldCByZXNvbHZlZCB0byB0aGUgc2FtZQorICAgICAqIHBlcnNpc3RlZCB2YXJpYWJsZSAtIG5hbWVseSB0aGUgInN5bmNhYmxlIiBhdHRyaWJ1dGUgZm9yIGFuIEF1dGhvcml0eUluZm8gaW4gYWNjb3VudHMueG1sLgorICAgICAqIEBwYXJhbSB0YXJnZXQgdGFyZ2V0IHRvIHNldCB2YWx1ZSBmb3IuCisgICAgICogQHBhcmFtIHN5bmNhYmxlIDAgaW5kaWNhdGVzIHVuc3luY2FibGUsIDwwIHVua25vd24sID4wIGlzIGFjdGl2ZS9zeW5jYWJsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0U3luY2FibGVTdGF0ZUZvckVuZFBvaW50KEVuZFBvaW50IHRhcmdldCwgaW50IHN5bmNhYmxlKSB7CisgICAgICAgIEF1dGhvcml0eUluZm8gYUluZm87CisgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CisgICAgICAgICAgICBhSW5mbyA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKHRhcmdldCwgLTEsIGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChzeW5jYWJsZSA+IDEpIHsKKyAgICAgICAgICAgICAgICBzeW5jYWJsZSA9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN5bmNhYmxlIDwgLTEpIHsKKyAgICAgICAgICAgICAgICBzeW5jYWJsZSA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CisgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAic2V0SXNTeW5jYWJsZTogIiArIGFJbmZvLnRvU3RyaW5nKCkgKyAiIC0+ICIgKyBzeW5jYWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYUluZm8uc3luY2FibGUgPT0gc3luY2FibGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAic2V0SXNTeW5jYWJsZTogYWxyZWFkeSBzZXQgdG8gIiArIHN5bmNhYmxlICsgIiwgZG9pbmcgbm90aGluZyIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRob3JpdHkuc3luY2FibGUgPSBzeW5jYWJsZTsKKyAgICAgICAgICAgIGFJbmZvLnN5bmNhYmxlID0gc3luY2FibGU7CiAgICAgICAgICAgICB3cml0ZUFjY291bnRJbmZvTG9ja2VkKCk7CiAgICAgICAgIH0KLQogICAgICAgICBpZiAoc3luY2FibGUgPiAwKSB7Ci0gICAgICAgICAgICByZXF1ZXN0U3luYyhhY2NvdW50LCB1c2VySWQsIFN5bmNPcGVyYXRpb24uUkVBU09OX0lTX1NZTkNBQkxFLCAgcHJvdmlkZXJOYW1lLAotICAgICAgICAgICAgICAgICAgICBuZXcgQnVuZGxlKCkpOworICAgICAgICAgICAgcmVxdWVzdFN5bmMoYUluZm8sIFN5bmNPcGVyYXRpb24uUkVBU09OX0lTX1NZTkNBQkxFLCBuZXcgQnVuZGxlKCkpOwogICAgICAgICB9CiAgICAgICAgIHJlcG9ydENoYW5nZShDb250ZW50UmVzb2x2ZXIuU1lOQ19PQlNFUlZFUl9UWVBFX1NFVFRJTkdTKTsKICAgICB9CiAKLSAgICBwdWJsaWMgUGFpcjxMb25nLCBMb25nPiBnZXRCYWNrb2ZmKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIHByb3ZpZGVyTmFtZSkgeworICAgIHB1YmxpYyBQYWlyPExvbmcsIExvbmc+IGdldEJhY2tvZmYoRW5kUG9pbnQgaW5mbykgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRBdXRob3JpdHlMb2NrZWQoYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICJnZXRCYWNrb2ZmIik7Ci0gICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwgfHwgYXV0aG9yaXR5LmJhY2tvZmZUaW1lIDwgMCkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRBdXRob3JpdHlMb2NrZWQoaW5mbywgImdldEJhY2tvZmYiKTsKKyAgICAgICAgICAgIGlmIChhdXRob3JpdHkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBQYWlyLmNyZWF0ZShhdXRob3JpdHkuYmFja29mZlRpbWUsIGF1dGhvcml0eS5iYWNrb2ZmRGVsYXkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIFBhaXIuY3JlYXRlKGF1dGhvcml0eS5iYWNrb2ZmVGltZSwgYXV0aG9yaXR5LmJhY2tvZmZEZWxheSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNldEJhY2tvZmYoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgcHJvdmlkZXJOYW1lLAotICAgICAgICAgICAgbG9uZyBuZXh0U3luY1RpbWUsIGxvbmcgbmV4dERlbGF5KSB7Ci0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLnYoVEFHLCAic2V0QmFja29mZjogIiArIGFjY291bnQgKyAiLCBwcm92aWRlciAiICsgcHJvdmlkZXJOYW1lCi0gICAgICAgICAgICAgICAgICAgICsgIiwgdXNlciAiICsgdXNlcklkCisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBiYWNrb2ZmIGZvciB0aGUgZ2l2ZW4gZW5kcG9pbnQuIFRoZSBlbmRwb2ludCBtYXkgYmUgZm9yIGEgcHJvdmlkZXIvYWNjb3VudCBhbmQKKyAgICAgKiB0aGUgYWNjb3VudCBvciBwcm92aWRlciBpbmZvIGJlIG51bGwsIHdoaWNoIHNpZ25pZmllcyBhbGwgYWNjb3VudHMgb3IgcHJvdmlkZXJzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEJhY2tvZmYoRW5kUG9pbnQgaW5mbywgbG9uZyBuZXh0U3luY1RpbWUsIGxvbmcgbmV4dERlbGF5KSB7CisgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgeworICAgICAgICAgICAgTG9nLnYoVEFHLCAic2V0QmFja29mZjogIiArIGluZm8KICAgICAgICAgICAgICAgICAgICAgKyAiIC0+IG5leHRTeW5jVGltZSAiICsgbmV4dFN5bmNUaW1lICsgIiwgbmV4dERlbGF5ICIgKyBuZXh0RGVsYXkpOwogICAgICAgICB9Ci0gICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBib29sZWFuIGNoYW5nZWQ7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7Ci0gICAgICAgICAgICBpZiAoYWNjb3VudCA9PSBudWxsIHx8IHByb3ZpZGVyTmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChBY2NvdW50SW5mbyBhY2NvdW50SW5mbyA6IG1BY2NvdW50cy52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYWNjb3VudCAhPSBudWxsICYmICFhY2NvdW50LmVxdWFscyhhY2NvdW50SW5mby5hY2NvdW50QW5kVXNlci5hY2NvdW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHVzZXJJZCAhPSBhY2NvdW50SW5mby5hY2NvdW50QW5kVXNlci51c2VySWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvIDogYWNjb3VudEluZm8uYXV0aG9yaXRpZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm92aWRlck5hbWUgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcHJvdmlkZXJOYW1lLmVxdWFscyhhdXRob3JpdHlJbmZvLmF1dGhvcml0eSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lICE9IG5leHRTeW5jVGltZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdXRob3JpdHlJbmZvLmJhY2tvZmZEZWxheSAhPSBuZXh0RGVsYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lID0gbmV4dFN5bmNUaW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ID0gbmV4dERlbGF5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZm8udGFyZ2V0X3Byb3ZpZGVyCisgICAgICAgICAgICAgICAgICAgICYmIChpbmZvLmFjY291bnQgPT0gbnVsbCB8fCBpbmZvLnByb3ZpZGVyID09IG51bGwpKSB7CisgICAgICAgICAgICAgICAgLy8gRG8gbW9yZSB3b3JrIGZvciBhIHByb3ZpZGVyIHN5bmMgaWYgdGhlIHByb3ZpZGVkIGluZm8gaGFzIHNwZWNpZmllZCBhbGwKKyAgICAgICAgICAgICAgICAvLyBhY2NvdW50cy9wcm92aWRlcnMuIAorICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBzZXRCYWNrb2ZmTG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5hY2NvdW50IC8qIG1heSBiZSBudWxsICovLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5mby51c2VySWQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnByb3ZpZGVyIC8qIG1heSBiZSBudWxsICovLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN5bmNUaW1lLCBuZXh0RGVsYXkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZChhY2NvdW50LCB1c2VySWQsIHByb3ZpZGVyTmFtZSwgLTEgLyogaWRlbnQgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHkuYmFja29mZlRpbWUgPT0gbmV4dFN5bmNUaW1lICYmIGF1dGhvcml0eS5iYWNrb2ZmRGVsYXkgPT0gbmV4dERlbGF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gPQorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoaW5mbywgLTEgLyogaWRlbnQgKi8sIHRydWUpOworICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lID09IG5leHRTeW5jVGltZQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0aG9yaXR5SW5mby5iYWNrb2ZmRGVsYXkgPT0gbmV4dERlbGF5KSB7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lID0gbmV4dFN5bmNUaW1lOworICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmJhY2tvZmZEZWxheSA9IG5leHREZWxheTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGF1dGhvcml0eS5iYWNrb2ZmVGltZSA9IG5leHRTeW5jVGltZTsKLSAgICAgICAgICAgICAgICBhdXRob3JpdHkuYmFja29mZkRlbGF5ID0gbmV4dERlbGF5OwotICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAgICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICAgICAgIHJlcG9ydENoYW5nZShDb250ZW50UmVzb2x2ZXIuU1lOQ19PQlNFUlZFUl9UWVBFX1NFVFRJTkdTKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgotICAgICAqIENhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBuZWVkIHRvIGhvbGQgYSBsb2NrIGZvciBzeW5jUXVldWUgb2JqZWN0IHBhc3NlZCBpbi4gQmVhciBpbiBtaW5kCi0gICAgICogdGhpcyBmdW5jdGlvbiBncmFicyB0aGUgbG9jayBmb3Ige0BsaW5rICNtQXV0aG9yaXRpZXN9Ci0gICAgICogQHBhcmFtIHN5bmNRdWV1ZSBxdWV1ZSBjb250YWluaW5nIHBlbmRpbmcgc3luYyBvcGVyYXRpb25zLgorICAgICAqIEVpdGhlciBzZXQgYmFja29mZiBmb3IgYSBzcGVjaWZpYyBhdXRob3JpdHksIG9yIHNldCBiYWNrb2ZmIGZvciBhbGwgdGhlCisgICAgICogYWNjb3VudHMgb24gYSBzcGVjaWZpYyBhZGFwdGVyL2FsbCBhZGFwdGVycy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhY2NvdW50IGFjY291bnQgZm9yIHdoaWNoIHRvIHNldCBiYWNrb2ZmLiBOdWxsIHRvIHNwZWNpZnkgYWxsIGFjY291bnRzLgorICAgICAqIEBwYXJhbSB1c2VySWQgaWQgb2YgdGhlIHVzZXIgbWFraW5nIHRoaXMgcmVxdWVzdC4KKyAgICAgKiBAcGFyYW0gcHJvdmlkZXJOYW1lIHByb3ZpZGVyIGZvciB3aGljaCB0byBzZXQgYmFja29mZi4gTnVsbCB0byBzcGVjaWZ5IGFsbCBwcm92aWRlcnMuCisgICAgICogQHJldHVybiB0cnVlIGlmIGEgY2hhbmdlIG9jY3VyZWQuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJBbGxCYWNrb2Zmc0xvY2tlZChTeW5jUXVldWUgc3luY1F1ZXVlKSB7CisgICAgcHJpdmF0ZSBib29sZWFuIHNldEJhY2tvZmZMb2NrZWQoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgcHJvdmlkZXJOYW1lLAorICAgICAgICAgICAgbG9uZyBuZXh0U3luY1RpbWUsIGxvbmcgbmV4dERlbGF5KSB7CisgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEFjY291bnRJbmZvIGFjY291bnRJbmZvIDogbUFjY291bnRzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYWNjb3VudCAhPSBudWxsICYmICFhY2NvdW50LmVxdWFscyhhY2NvdW50SW5mby5hY2NvdW50QW5kVXNlci5hY2NvdW50KQorICAgICAgICAgICAgICAgICAgICAmJiB1c2VySWQgIT0gYWNjb3VudEluZm8uYWNjb3VudEFuZFVzZXIudXNlcklkKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbyA6IGFjY291bnRJbmZvLmF1dGhvcml0aWVzLnZhbHVlcygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyTmFtZSAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcHJvdmlkZXJOYW1lLmVxdWFscyhhdXRob3JpdHlJbmZvLnRhcmdldC5wcm92aWRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lICE9IG5leHRTeW5jVGltZQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXV0aG9yaXR5SW5mby5iYWNrb2ZmRGVsYXkgIT0gbmV4dERlbGF5KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZlRpbWUgPSBuZXh0U3luY1RpbWU7CisgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ID0gbmV4dERlbGF5OworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY2xlYXJBbGxCYWNrb2ZmcyhTeW5jUXVldWUgc3luY1F1ZXVlKSB7CiAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgZm9yIChBY2NvdW50SW5mbyBhY2NvdW50SW5mbyA6IG1BY2NvdW50cy52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgIGZvciAoQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvIDogYWNjb3VudEluZm8uYXV0aG9yaXRpZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8uYmFja29mZlRpbWUgIT0gTk9UX0lOX0JBQ0tPRkZfTU9ERQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ICE9IE5PVF9JTl9CQUNLT0ZGX01PREUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgImNsZWFyQWxsQmFja29mZnM6IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGF1dGhvcml0eToiICsgYXV0aG9yaXR5SW5mby5hdXRob3JpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhY2NvdW50OiIgKyBhY2NvdW50SW5mby5hY2NvdW50QW5kVXNlci5hY2NvdW50Lm5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1c2VyOiIgKyBhY2NvdW50SW5mby5hY2NvdW50QW5kVXNlci51c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiYWNrb2ZmVGltZSB3YXM6ICIgKyBhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYmFja29mZkRlbGF5IHdhczogIiArIGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5KTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAoc3luY1F1ZXVlKSB7CisgICAgICAgICAgICAgICAgLy8gQ2xlYXIgYmFja29mZiBmb3IgYWxsIHN5bmMgYWRhcHRlcnMuCisgICAgICAgICAgICAgICAgZm9yIChBY2NvdW50SW5mbyBhY2NvdW50SW5mbyA6IG1BY2NvdW50cy52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbyA6IGFjY291bnRJbmZvLmF1dGhvcml0aWVzLnZhbHVlcygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5SW5mby5iYWNrb2ZmVGltZSAhPSBOT1RfSU5fQkFDS09GRl9NT0RFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ICE9IE5PVF9JTl9CQUNLT0ZGX01PREUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiY2xlYXJBbGxCYWNrb2ZmczoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGF1dGhvcml0eToiICsgYXV0aG9yaXR5SW5mby50YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYWNjb3VudDoiICsgYWNjb3VudEluZm8uYWNjb3VudEFuZFVzZXIuYWNjb3VudC5uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHVzZXI6IiArIGFjY291bnRJbmZvLmFjY291bnRBbmRVc2VyLnVzZXJJZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiYWNrb2ZmVGltZSB3YXM6ICIgKyBhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGJhY2tvZmZEZWxheSB3YXM6ICIgKyBhdXRob3JpdHlJbmZvLmJhY2tvZmZEZWxheSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZlRpbWUgPSBOT1RfSU5fQkFDS09GRl9NT0RFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ID0gTk9UX0lOX0JBQ0tPRkZfTU9ERTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZlRpbWUgPSBOT1RfSU5fQkFDS09GRl9NT0RFOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5iYWNrb2ZmRGVsYXkgPSBOT1RfSU5fQkFDS09GRl9NT0RFOwotICAgICAgICAgICAgICAgICAgICAgICAgc3luY1F1ZXVlLm9uQmFja29mZkNoYW5nZWQoYWNjb3VudEluZm8uYWNjb3VudEFuZFVzZXIuYWNjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEluZm8uYWNjb3VudEFuZFVzZXIudXNlcklkLCBhdXRob3JpdHlJbmZvLmF1dGhvcml0eSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBDbGVhciBiYWNrb2ZmIGZvciBhbGwgc3luYyBzZXJ2aWNlcy4KKyAgICAgICAgICAgICAgICBmb3IgKENvbXBvbmVudE5hbWUgc2VydmljZSA6IG1TZXJ2aWNlcy5rZXlTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBTcGFyc2VBcnJheTxBdXRob3JpdHlJbmZvPiBhSW5mb3MgPSBtU2VydmljZXMuZ2V0KHNlcnZpY2UpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFJbmZvcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvID0gYUluZm9zLnZhbHVlQXQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5SW5mby5iYWNrb2ZmVGltZSAhPSBOT1RfSU5fQkFDS09GRl9NT0RFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ICE9IE5PVF9JTl9CQUNLT0ZGX01PREUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lID0gTk9UX0lOX0JBQ0tPRkZfTU9ERTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmJhY2tvZmZEZWxheSA9IE5PVF9JTl9CQUNLT0ZGX01PREU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3luY1F1ZXVlLmNsZWFyQmFja29mZnMoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC03NDUsMjggKzg3OCw5IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZXREZWxheVVudGlsVGltZShBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIFN0cmluZyBwcm92aWRlck5hbWUsCi0gICAgICAgICAgICBsb25nIGRlbGF5VW50aWwpIHsKLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cudihUQUcsICJzZXREZWxheVVudGlsOiAiICsgYWNjb3VudCArICIsIHByb3ZpZGVyICIgKyBwcm92aWRlck5hbWUKLSAgICAgICAgICAgICAgICAgICAgKyAiLCB1c2VyICIgKyB1c2VySWQgKyAiIC0+IGRlbGF5VW50aWwgIiArIGRlbGF5VW50aWwpOwotICAgICAgICB9CisgICAgcHVibGljIGxvbmcgZ2V0RGVsYXlVbnRpbFRpbWUoRW5kUG9pbnQgaW5mbykgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUsIC0xIC8qIGlkZW50ICovLCB0cnVlKTsKLSAgICAgICAgICAgIGlmIChhdXRob3JpdHkuZGVsYXlVbnRpbCA9PSBkZWxheVVudGlsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0aG9yaXR5LmRlbGF5VW50aWwgPSBkZWxheVVudGlsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVwb3J0Q2hhbmdlKENvbnRlbnRSZXNvbHZlci5TWU5DX09CU0VSVkVSX1RZUEVfU0VUVElOR1MpOwotICAgIH0KLQotICAgIHB1YmxpYyBsb25nIGdldERlbGF5VW50aWxUaW1lKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIHByb3ZpZGVyTmFtZSkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRBdXRob3JpdHlMb2NrZWQoYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICJnZXREZWxheVVudGlsIik7CisgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZChpbmZvLCAiZ2V0RGVsYXlVbnRpbCIpOwogICAgICAgICAgICAgaWYgKGF1dGhvcml0eSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CkBAIC03NzQsMTEzICs4ODgsMTQ3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlT3JSZW1vdmVQZXJpb2RpY1N5bmMoUGVyaW9kaWNTeW5jIHRvVXBkYXRlLCBpbnQgdXNlcklkLCBib29sZWFuIGFkZCkgewotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy52KFRBRywgImFkZE9yUmVtb3ZlUGVyaW9kaWNTeW5jOiAiICsgdG9VcGRhdGUuYWNjb3VudCArICIsIHVzZXIgIiArIHVzZXJJZAotICAgICAgICAgICAgICAgICAgICArICIsIHByb3ZpZGVyICIgKyB0b1VwZGF0ZS5hdXRob3JpdHkKLSAgICAgICAgICAgICAgICAgICAgKyAiIC0+IHBlcmlvZCAiICsgdG9VcGRhdGUucGVyaW9kICsgIiwgZXh0cmFzICIgKyB0b1VwZGF0ZS5leHRyYXMpOworICAgIHB1YmxpYyB2b2lkIHNldERlbGF5VW50aWxUaW1lKEVuZFBvaW50IGluZm8sIGxvbmcgZGVsYXlVbnRpbCkgeworICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgIExvZy52KFRBRywgInNldERlbGF5VW50aWw6ICIgKyBpbmZvCisgICAgICAgICAgICAgICAgICAgICsgIiAtPiBkZWxheVVudGlsICIgKyBkZWxheVVudGlsKTsKICAgICAgICAgfQogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKHRvVXBkYXRlLnBlcmlvZCA8PSAwICYmIGFkZCkgewotICAgICAgICAgICAgICAgIExvZy5lKFRBRywgInBlcmlvZCA8IDAsIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gdXBkYXRlT3JSZW1vdmVQZXJpb2RpY1N5bmM6IGFkZC0iCi0gICAgICAgICAgICAgICAgICAgICAgICArIGFkZCk7CisgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKGluZm8sIC0xLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChhdXRob3JpdHkuZGVsYXlVbnRpbCA9PSBkZWxheVVudGlsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRvVXBkYXRlLmV4dHJhcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAibnVsbCBleHRyYXMsIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gdXBkYXRlT3JSZW1vdmVQZXJpb2RpY1N5bmM6IGFkZC0iCi0gICAgICAgICAgICAgICAgICAgICAgICArIGFkZCk7CisgICAgICAgICAgICBhdXRob3JpdHkuZGVsYXlVbnRpbCA9IGRlbGF5VW50aWw7CisgICAgICAgIH0KKyAgICAgICAgcmVwb3J0Q2hhbmdlKENvbnRlbnRSZXNvbHZlci5TWU5DX09CU0VSVkVSX1RZUEVfU0VUVElOR1MpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKEVuZFBvaW50IGluZm8sIGxvbmcgcGVyaW9kLCBsb25nIGZsZXh0aW1lLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgeworICAgICAgICAgICAgTG9nLnYoVEFHLCAiYWRkUGVyaW9kaWNTeW5jOiAiICsgaW5mbworICAgICAgICAgICAgICAgICAgICArICIgLT4gcGVyaW9kICIgKyBwZXJpb2QgKyAiLCBmbGV4ICIgKyBmbGV4dGltZSArICIsIGV4dHJhcyAiCisgICAgICAgICAgICAgICAgICAgICsgZXh0cmFzLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CisgICAgICAgICAgICBpZiAocGVyaW9kIDw9IDApIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJwZXJpb2QgPCAwLCBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXh0cmFzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJudWxsIGV4dHJhcywgc2hvdWxkIG5ldmVyIGhhcHBlbiBpbiB1cGRhdGVPckFkZFBlcmlvZGljU3luYzoiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPQotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQodG9VcGRhdGUuYWNjb3VudCwgdXNlcklkLCB0b1VwZGF0ZS5hdXRob3JpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFkZCkgewotICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhpcyBwZXJpb2RpYyBzeW5jIGlmIGFuIGVxdWl2YWxlbnQgcGVyaW9kaWMgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGFscmVhZHlQcmVzZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwLCBOID0gYXV0aG9yaXR5LnBlcmlvZGljU3luY3Muc2l6ZSgpOyBpIDwgTjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQZXJpb2RpY1N5bmMgc3luY0luZm8gPSBhdXRob3JpdHkucGVyaW9kaWNTeW5jcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGVyaW9kaWNTeW5jLnN5bmNFeHRyYXNFcXVhbHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvVXBkYXRlLmV4dHJhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY0luZm8uZXh0cmFzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b1VwZGF0ZS5wZXJpb2QgPT0gc3luY0luZm8ucGVyaW9kICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VwZGF0ZS5mbGV4VGltZSA9PSBzeW5jSW5mby5mbGV4VGltZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBYnNvbHV0ZWx5IHRoZSBzYW1lLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eS5wZXJpb2RpY1N5bmNzLnNldChpLCBuZXcgUGVyaW9kaWNTeW5jKHRvVXBkYXRlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeVByZXNlbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFkZGVkIGFuIGVudHJ5IHRvIHRoZSBwZXJpb2RpY1N5bmNzIGFycmF5IGFsc28gYWRkIGFuIGVudHJ5IHRvCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwZXJpb2RpYyBzeW5jcyBzdGF0dXMgdG8gY29ycmVzcG9uZCB0byBpdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5UHJlc2VudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5LnBlcmlvZGljU3luY3MuYWRkKG5ldyBQZXJpb2RpY1N5bmModG9VcGRhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNTdGF0dXNJbmZvIHN0YXR1cyA9IGdldE9yQ3JlYXRlU3luY1N0YXR1c0xvY2tlZChhdXRob3JpdHkuaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNldFBlcmlvZGljU3luY1RpbWUoYXV0aG9yaXR5LnBlcmlvZGljU3luY3Muc2l6ZSgpIC0gMSwgMEwpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUGVyaW9kaWNTeW5jIHRvVXBkYXRlOworICAgICAgICAgICAgICAgIGlmIChpbmZvLnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgICAgICB0b1VwZGF0ZSA9IG5ldyBQZXJpb2RpY1N5bmMoaW5mby5hY2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ucHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4dGltZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSBwZXJpb2RpYyBzeW5jcyB0aGF0IG1hdGNoIHRoZSBhdXRob3JpdHkgYW5kIGV4dHJhcy4KLSAgICAgICAgICAgICAgICAgICAgU3luY1N0YXR1c0luZm8gc3RhdHVzID0gbVN5bmNTdGF0dXMuZ2V0KGF1dGhvcml0eS5pZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvcjxQZXJpb2RpY1N5bmM+IGl0ZXJhdG9yID0gYXV0aG9yaXR5LnBlcmlvZGljU3luY3MuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQZXJpb2RpY1N5bmMgc3luY0luZm8gPSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGVyaW9kaWNTeW5jLnN5bmNFeHRyYXNFcXVhbHMoc3luY0luZm8uZXh0cmFzLCB0b1VwZGF0ZS5leHRyYXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IucmVtb3ZlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgcmVtb3ZlZCBhbiBlbnRyeSBmcm9tIHRoZSBwZXJpb2RpY1N5bmNzIGFycmF5IGFsc28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZnJvbSB0aGUgc3RhdHVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZW1vdmVQZXJpb2RpY1N5bmNUaW1lKGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlRyaWVkIHJlbW92aW5nIHN5bmMgc3RhdHVzIG9uIHJlbW92ZSBwZXJpb2RpYyBzeW5jIGJ1dCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJkaWQgbm90IGZpbmQgaXQuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgIHRvVXBkYXRlID0gbmV3IFBlcmlvZGljU3luYyhpbmZvLnNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4dGltZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKGluZm8sIC0xLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgLy8gYWRkIHRoaXMgcGVyaW9kaWMgc3luYyBpZiBhbiBlcXVpdmFsZW50IHBlcmlvZGljIGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KKyAgICAgICAgICAgICAgICBib29sZWFuIGFscmVhZHlQcmVzZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIE4gPSBhdXRob3JpdHkucGVyaW9kaWNTeW5jcy5zaXplKCk7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmNJbmZvID0gYXV0aG9yaXR5LnBlcmlvZGljU3luY3MuZ2V0KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoU3luY01hbmFnZXIuc3luY0V4dHJhc0VxdWFscyhzeW5jSW5mby5leHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogaW5jbHVkZVN5bmNTZXR0aW5ncyovKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmlvZCA9PSBzeW5jSW5mby5wZXJpb2QgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleHRpbWUgPT0gc3luY0luZm8uZmxleFRpbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBYnNvbHV0ZWx5IHRoZSBzYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eS5wZXJpb2RpY1N5bmNzLnNldChpLCB0b1VwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5UHJlc2VudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhZGRlZCBhbiBlbnRyeSB0byB0aGUgcGVyaW9kaWNTeW5jcyBhcnJheSBhbHNvIGFkZCBhbiBlbnRyeSB0bworICAgICAgICAgICAgICAgIC8vIHRoZSBwZXJpb2RpYyBzeW5jcyBzdGF0dXMgdG8gY29ycmVzcG9uZCB0byBpdC4KKyAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlQcmVzZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eS5wZXJpb2RpY1N5bmNzLmFkZCh0b1VwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIFN5bmNTdGF0dXNJbmZvIHN0YXR1cyA9IGdldE9yQ3JlYXRlU3luY1N0YXR1c0xvY2tlZChhdXRob3JpdHkuaWRlbnQpOworICAgICAgICAgICAgICAgICAgICAvLyBBIG5ldyBwZXJpb2RpYyBzeW5jIGlzIGluaXRpYWxpc2VkIGFzIGFscmVhZHkgaGF2aW5nIGJlZW4gcnVuLgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc2V0UGVyaW9kaWNTeW5jVGltZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkucGVyaW9kaWNTeW5jcy5zaXplKCkgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIHdyaXRlQWNjb3VudEluZm9Mb2NrZWQoKTsKICAgICAgICAgICAgICAgICB3cml0ZVN0YXR1c0xvY2tlZCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAgICAgcmVwb3J0Q2hhbmdlKENvbnRlbnRSZXNvbHZlci5TWU5DX09CU0VSVkVSX1RZUEVfU0VUVElOR1MpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGFkZFBlcmlvZGljU3luYyhQZXJpb2RpY1N5bmMgdG9BZGQsIGludCB1c2VySWQpIHsKLSAgICAgICAgdXBkYXRlT3JSZW1vdmVQZXJpb2RpY1N5bmModG9BZGQsIHVzZXJJZCwgdHJ1ZSAvKiBhZGQgKi8pOworICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBlcmlvZGljU3luYyhFbmRQb2ludCBpbmZvLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIHN5bmNocm9uaXplZChtQXV0aG9yaXRpZXMpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPQorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoaW5mbywgLTEsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgYW55IHBlcmlvZGljIHN5bmNzIHRoYXQgbWF0Y2ggdGhlIHRhcmdldCBhbmQgZXh0cmFzLgorICAgICAgICAgICAgICAgIFN5bmNTdGF0dXNJbmZvIHN0YXR1cyA9IG1TeW5jU3RhdHVzLmdldChhdXRob3JpdHkuaWRlbnQpOworICAgICAgICAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIEl0ZXJhdG9yPFBlcmlvZGljU3luYz4gaXRlcmF0b3IgPSBhdXRob3JpdHkucGVyaW9kaWNTeW5jcy5pdGVyYXRvcigpOworICAgICAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jSW5mbyA9IGl0ZXJhdG9yLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFN5bmNNYW5hZ2VyLnN5bmNFeHRyYXNFcXVhbHMoc3luY0luZm8uZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIGluY2x1ZGVTeW5jU2V0dGluZ3MgKi8pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgcmVtb3ZlZCBhbiBlbnRyeSBmcm9tIHRoZSBwZXJpb2RpY1N5bmNzIGFycmF5IGFsc28KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBmcm9tIHRoZSBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZW1vdmVQZXJpb2RpY1N5bmNUaW1lKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJUcmllZCByZW1vdmluZyBzeW5jIHN0YXR1cyBvbiByZW1vdmUgcGVyaW9kaWMgc3luYyBidXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgZGlkIG5vdCBmaW5kIGl0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghY2hhbmdlZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICB3cml0ZUFjY291bnRJbmZvTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgd3JpdGVTdGF0dXNMb2NrZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXBvcnRDaGFuZ2UoQ29udGVudFJlc29sdmVyLlNZTkNfT0JTRVJWRVJfVFlQRV9TRVRUSU5HUyk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUGVyaW9kaWNTeW5jKFBlcmlvZGljU3luYyB0b1JlbW92ZSwgaW50IHVzZXJJZCkgewotICAgICAgICB1cGRhdGVPclJlbW92ZVBlcmlvZGljU3luYyh0b1JlbW92ZSwgdXNlcklkLCBmYWxzZSAvKiByZW1vdmUgKi8pOwotICAgIH0KLQotICAgIHB1YmxpYyBMaXN0PFBlcmlvZGljU3luYz4gZ2V0UGVyaW9kaWNTeW5jcyhBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIFN0cmluZyBwcm92aWRlck5hbWUpIHsKLSAgICAgICAgQXJyYXlMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBuZXcgQXJyYXlMaXN0PFBlcmlvZGljU3luYz4oKTsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIGxpc3Qgb2YgcGVyaW9kaWMgc3luY3MgZm9yIGEgdGFyZ2V0LiBOZXZlciBudWxsLiBJZiBubyBzdWNoIHN5bmNzIGV4aXN0LCByZXR1cm5zIGFuCisgICAgICogZW1wdHkgbGlzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgTGlzdDxQZXJpb2RpY1N5bmM+IGdldFBlcmlvZGljU3luY3MoRW5kUG9pbnQgaW5mbykgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRBdXRob3JpdHlMb2NrZWQoYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICJnZXRQZXJpb2RpY1N5bmNzIik7Ci0gICAgICAgICAgICBpZiAoYXV0aG9yaXR5ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKFBlcmlvZGljU3luYyBpdGVtIDogYXV0aG9yaXR5LnBlcmlvZGljU3luY3MpIHsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbyA9IGdldEF1dGhvcml0eUxvY2tlZChpbmZvLCAiZ2V0UGVyaW9kaWNTeW5jcyIpOworICAgICAgICAgICAgQXJyYXlMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBuZXcgQXJyYXlMaXN0PFBlcmlvZGljU3luYz4oKTsKKyAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFBlcmlvZGljU3luYyBpdGVtIDogYXV0aG9yaXR5SW5mby5wZXJpb2RpY1N5bmNzKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIENvcHkgYW5kIHNlbmQgb3V0LiBOZWNlc3NhcnkgZm9yIHRocmVhZC1zYWZldHkgYWx0aG91Z2ggaXQncyBwYXJjZWxlZC4KICAgICAgICAgICAgICAgICAgICAgc3luY3MuYWRkKG5ldyBQZXJpb2RpY1N5bmMoaXRlbSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzeW5jczsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gc3luY3M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkoYm9vbGVhbiBmbGFnLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CiAgICAgICAgICAgICBCb29sZWFuIGF1dG8gPSBtTWFzdGVyU3luY0F1dG9tYXRpY2FsbHkuZ2V0KHVzZXJJZCk7Ci0gICAgICAgICAgICBpZiAoYXV0byAhPSBudWxsICYmIChib29sZWFuKSBhdXRvID09IGZsYWcpIHsKKyAgICAgICAgICAgIGlmIChhdXRvICE9IG51bGwgJiYgYXV0by5lcXVhbHMoZmxhZykpIHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtTWFzdGVyU3luY0F1dG9tYXRpY2FsbHkucHV0KHVzZXJJZCwgZmxhZyk7CkBAIC05MDEsMTIgKzEwNDksNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlQXV0aG9yaXR5KEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIGF1dGhvcml0eSkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgcmVtb3ZlQXV0aG9yaXR5TG9ja2VkKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5LCB0cnVlIC8qIGRvV3JpdGUgKi8pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHVibGljIEF1dGhvcml0eUluZm8gZ2V0QXV0aG9yaXR5KGludCBhdXRob3JpdHlJZCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewogICAgICAgICAgICAgcmV0dXJuIG1BdXRob3JpdGllcy5nZXQoYXV0aG9yaXR5SWQpOwpAQCAtOTE0LDcyICsxMDU2LDYwIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHN5bmMgb3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4KLSAgICAgKiBhY2NvdW50IG9yIGF1dGhvcml0eSBhY3RpdmVseSBiZWluZyBwcm9jZXNzZWQuCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHN5bmMgb3BlcmF0aW9uIGJlaW5nIGFjdGl2ZWx5IHByb2Nlc3NlZCBmb3IgdGhlIGdpdmVuCisgICAgICogdGFyZ2V0LgogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzU3luY0FjdGl2ZShBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIFN0cmluZyBhdXRob3JpdHkpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1N5bmNBY3RpdmUoRW5kUG9pbnQgaW5mbykgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgZm9yIChTeW5jSW5mbyBzeW5jSW5mbyA6IGdldEN1cnJlbnRTeW5jcyh1c2VySWQpKSB7CisgICAgICAgICAgICBmb3IgKFN5bmNJbmZvIHN5bmNJbmZvIDogZ2V0Q3VycmVudFN5bmNzKGluZm8udXNlcklkKSkgewogICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYWluZm8gPSBnZXRBdXRob3JpdHkoc3luY0luZm8uYXV0aG9yaXR5SWQpOwotICAgICAgICAgICAgICAgIGlmIChhaW5mbyAhPSBudWxsICYmIGFpbmZvLmFjY291bnQuZXF1YWxzKGFjY291bnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBhaW5mby5hdXRob3JpdHkuZXF1YWxzKGF1dGhvcml0eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGFpbmZvLnVzZXJJZCA9PSB1c2VySWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWluZm8gIT0gbnVsbCAmJiBhaW5mby50YXJnZXQubWF0Y2hlc1NwZWMoaW5mbykpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBQZW5kaW5nT3BlcmF0aW9uIGluc2VydEludG9QZW5kaW5nKFBlbmRpbmdPcGVyYXRpb24gb3ApIHsKKyAgICBwdWJsaWMgUGVuZGluZ09wZXJhdGlvbiBpbnNlcnRJbnRvUGVuZGluZyhTeW5jT3BlcmF0aW9uIG9wKSB7CisgICAgICAgIFBlbmRpbmdPcGVyYXRpb24gcG9wOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiaW5zZXJ0SW50b1BlbmRpbmc6IGFjY291bnQ9IiArIG9wLmFjY291bnQKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1c2VyPSIgKyBvcC51c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdXRoPSIgKyBvcC5hdXRob3JpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzcmM9IiArIG9wLnN5bmNTb3VyY2UKKyAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgeworICAgICAgICAgICAgICAgIExvZy52KFRBRywgImluc2VydEludG9QZW5kaW5nOiBhdXRob3JpdHk9IiArIG9wLnRhcmdldAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGV4dHJhcz0iICsgb3AuZXh0cmFzKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZChvcC5hY2NvdW50LCBvcC51c2VySWQsCi0gICAgICAgICAgICAgICAgICAgIG9wLmF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgLTEgLyogZGVzaXJlZCBpZGVudGlmaWVyICovLAotICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIHdyaXRlIGFjY291bnRzIHRvIHN0b3JhZ2UgKi8pOworICAgICAgICAgICAgZmluYWwgRW5kUG9pbnQgaW5mbyA9IG9wLnRhcmdldDsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0KKyAgICAgICAgICAgICAgICAgICAgZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAvKiBkZXNpcmVkIGlkZW50aWZpZXIgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKiB3cml0ZSBhY2NvdW50cyB0byBzdG9yYWdlICovKTsKICAgICAgICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBvcCA9IG5ldyBQZW5kaW5nT3BlcmF0aW9uKG9wKTsKLSAgICAgICAgICAgIG9wLmF1dGhvcml0eUlkID0gYXV0aG9yaXR5LmlkZW50OwotICAgICAgICAgICAgbVBlbmRpbmdPcGVyYXRpb25zLmFkZChvcCk7Ci0gICAgICAgICAgICBhcHBlbmRQZW5kaW5nT3BlcmF0aW9uTG9ja2VkKG9wKTsKKyAgICAgICAgICAgIHBvcCA9IG5ldyBQZW5kaW5nT3BlcmF0aW9uKGF1dGhvcml0eSwgb3AucmVhc29uLCBvcC5zeW5jU291cmNlLCBvcC5leHRyYXMsCisgICAgICAgICAgICAgICAgICAgIG9wLmV4cGVkaXRlZCk7CisgICAgICAgICAgICBtUGVuZGluZ09wZXJhdGlvbnMuYWRkKHBvcCk7CisgICAgICAgICAgICBhcHBlbmRQZW5kaW5nT3BlcmF0aW9uTG9ja2VkKHBvcCk7CiAKICAgICAgICAgICAgIFN5bmNTdGF0dXNJbmZvIHN0YXR1cyA9IGdldE9yQ3JlYXRlU3luY1N0YXR1c0xvY2tlZChhdXRob3JpdHkuaWRlbnQpOwogICAgICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSB0cnVlOwogICAgICAgICB9Ci0KICAgICAgICAgcmVwb3J0Q2hhbmdlKENvbnRlbnRSZXNvbHZlci5TWU5DX09CU0VSVkVSX1RZUEVfUEVORElORyk7Ci0gICAgICAgIHJldHVybiBvcDsKKyAgICAgICAgcmV0dXJuIHBvcDsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBSZW1vdmUgZnJvbSBsaXN0IG9mIHBlbmRpbmcgb3BlcmF0aW9ucy4gSWYgc3VjY2Vzc2Z1bCwgc2VhcmNoIHRocm91Z2ggbGlzdCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBhdXRob3JpdGllcy4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZyBzeW5jcyBmb3IgdGhlIHNhbWUgYXV0aG9yaXR5L2FjY291bnQvdXNlcmlkLAotICAgICAqIHVwZGF0ZSB0aGUgU3luY1N0YXR1c0luZm8gZm9yIHRoYXQgYXV0aG9yaXR5KGF1dGhvcml0eSBoZXJlIGlzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbgotICAgICAqIG9mIGEgJ3N5bmMgb3BlcmF0aW9uJy4KLSAgICAgKiBAcGFyYW0gb3AKLSAgICAgKiBAcmV0dXJuCisgICAgICogYXV0aG9yaXRpZXMuIElmIHRoZXJlIGFyZSBubyBtb3JlIHBlbmRpbmcgc3luY3MgZm9yIHRoZSBzYW1lIHRhcmdldCwKKyAgICAgKiB1cGRhdGUgdGhlIFN5bmNTdGF0dXNJbmZvIGZvciB0aGF0IHRhcmdldC4KKyAgICAgKiBAcGFyYW0gb3AgUGVuZGluZyBvcCB0byBkZWxldGUuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZGVsZXRlRnJvbVBlbmRpbmcoUGVuZGluZ09wZXJhdGlvbiBvcCkgewogICAgICAgICBib29sZWFuIHJlcyA9IGZhbHNlOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiZGVsZXRlRnJvbVBlbmRpbmc6IGFjY291bnQ9IiArIG9wLmFjY291bnQKLSAgICAgICAgICAgICAgICAgICAgKyAiIHVzZXI9IiArIG9wLnVzZXJJZAotICAgICAgICAgICAgICAgICAgICArICIgYXV0aD0iICsgb3AuYXV0aG9yaXR5Ci0gICAgICAgICAgICAgICAgICAgICsgIiBzcmM9IiArIG9wLnN5bmNTb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgKyAiIGV4dHJhcz0iICsgb3AuZXh0cmFzKTsKKyAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgeworICAgICAgICAgICAgICAgIExvZy52KFRBRywgImRlbGV0ZUZyb21QZW5kaW5nOiBhY2NvdW50PSIgKyBvcC50b1N0cmluZygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtUGVuZGluZ09wZXJhdGlvbnMucmVtb3ZlKG9wKSkgewogICAgICAgICAgICAgICAgIGlmIChtUGVuZGluZ09wZXJhdGlvbnMuc2l6ZSgpID09IDAKQEAgLTk4OSwzMCArMTExOSwyNyBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1OdW1QZW5kaW5nRmluaXNoZWQrKzsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZChvcC5hY2NvdW50LCBvcC51c2VySWQsIG9wLmF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVGcm9tUGVuZGluZyIpOworICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gZ2V0QXV0aG9yaXR5TG9ja2VkKG9wLnRhcmdldCwgImRlbGV0ZUZyb21QZW5kaW5nIik7CiAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAicmVtb3ZpbmcgLSAiICsgYXV0aG9yaXR5LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgInJlbW92aW5nIC0gIiArIGF1dGhvcml0eS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IG1QZW5kaW5nT3BlcmF0aW9ucy5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbW9yZVBlbmRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgUGVuZGluZ09wZXJhdGlvbiBjdXIgPSBtUGVuZGluZ09wZXJhdGlvbnMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ci5hY2NvdW50LmVxdWFscyhvcC5hY2NvdW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjdXIuYXV0aG9yaXR5LmVxdWFscyhvcC5hdXRob3JpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1ci51c2VySWQgPT0gb3AudXNlcklkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyLmVxdWFscyhvcCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlUGVuZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAoIW1vcmVQZW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIm5vIG1vcmUgcGVuZGluZyEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgTG9nLnYoVEFHLCAibm8gbW9yZSBwZW5kaW5nISIpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3luY1N0YXR1c0luZm8gc3RhdHVzID0gZ2V0T3JDcmVhdGVTeW5jU3RhdHVzTG9ja2VkKGF1dGhvcml0eS5pZGVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMucGVuZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgcmVzID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTA0Nyw3ICsxMTc0LDkgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkb0RhdGFiYXNlQ2xlYW51cChBY2NvdW50W10gYWNjb3VudHMsIGludCB1c2VySWQpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtQXV0aG9yaXRpZXMpIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiVXBkYXRpbmcgZm9yIG5ldyBhY2NvdW50cy4uLiIpOworICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CisgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiVXBkYXRpbmcgZm9yIG5ldyBhY2NvdW50cy4uLiIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgU3BhcnNlQXJyYXk8QXV0aG9yaXR5SW5mbz4gcmVtb3ZpbmcgPSBuZXcgU3BhcnNlQXJyYXk8QXV0aG9yaXR5SW5mbz4oKTsKICAgICAgICAgICAgIEl0ZXJhdG9yPEFjY291bnRJbmZvPiBhY2NJdCA9IG1BY2NvdW50cy52YWx1ZXMoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGFjY0l0Lmhhc05leHQoKSkgewpAQCAtMTA1NSw3ICsxMTg0LDcgQEAKICAgICAgICAgICAgICAgICBpZiAoIUFycmF5VXRpbHMuY29udGFpbnMoYWNjb3VudHMsIGFjYy5hY2NvdW50QW5kVXNlci5hY2NvdW50KQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWNjLmFjY291bnRBbmRVc2VyLnVzZXJJZCA9PSB1c2VySWQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhY2NvdW50IG5vIGxvbmdlciBleGlzdHMuLi4KLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiQWNjb3VudCByZW1vdmVkOiAiICsgYWNjLmFjY291bnRBbmRVc2VyKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBmb3IgKEF1dGhvcml0eUluZm8gYXV0aCA6IGFjYy5hdXRob3JpdGllcy52YWx1ZXMoKSkgewpAQCAtMTEwMiwyNSArMTIzMSwyNSBAQAogICAgIHB1YmxpYyBTeW5jSW5mbyBhZGRBY3RpdmVTeW5jKFN5bmNNYW5hZ2VyLkFjdGl2ZVN5bmNDb250ZXh0IGFjdGl2ZVN5bmNDb250ZXh0KSB7CiAgICAgICAgIGZpbmFsIFN5bmNJbmZvIHN5bmNJbmZvOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJzZXRBY3RpdmVTeW5jOiBhY2NvdW50PSIKLSAgICAgICAgICAgICAgICAgICAgKyBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi5hY2NvdW50Ci0gICAgICAgICAgICAgICAgICAgICsgIiBhdXRoPSIgKyBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi5hdXRob3JpdHkKKyAgICAgICAgICAgICAgICAgICAgKyAiIGF1dGg9IiArIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLnRhcmdldAogICAgICAgICAgICAgICAgICAgICArICIgc3JjPSIgKyBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi5zeW5jU291cmNlCiAgICAgICAgICAgICAgICAgICAgICsgIiBleHRyYXM9IiArIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLmV4dHJhcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKAotICAgICAgICAgICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi5hY2NvdW50LAotICAgICAgICAgICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi51c2VySWQsCi0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLmF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgLTEgLyogYXNzaWduIGEgbmV3IGlkZW50aWZpZXIgaWYgY3JlYXRpbmcgYSBuZXcgYXV0aG9yaXR5ICovLAorICAgICAgICAgICAgZmluYWwgRW5kUG9pbnQgaW5mbyA9IGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLnRhcmdldDsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbyA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICBpbmZvLAorICAgICAgICAgICAgICAgICAgICAtMSAvKiBhc3NpZ24gYSBuZXcgaWRlbnRpZmllciBpZiBjcmVhdGluZyBhIG5ldyB0YXJnZXQgKi8sCiAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogd3JpdGUgdG8gc3RvcmFnZSBpZiB0aGlzIHJlc3VsdHMgaW4gYSBjaGFuZ2UgKi8pOwotICAgICAgICAgICAgc3luY0luZm8gPSBuZXcgU3luY0luZm8oYXV0aG9yaXR5LmlkZW50LAotICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkuYWNjb3VudCwgYXV0aG9yaXR5LmF1dGhvcml0eSwKKyAgICAgICAgICAgIHN5bmNJbmZvID0gbmV3IFN5bmNJbmZvKAorICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmlkZW50LAorICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnRhcmdldC5hY2NvdW50LAorICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnRhcmdldC5wcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby50YXJnZXQuc2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN0YXJ0VGltZSk7Ci0gICAgICAgICAgICBnZXRDdXJyZW50U3luY3MoYXV0aG9yaXR5LnVzZXJJZCkuYWRkKHN5bmNJbmZvKTsKKyAgICAgICAgICAgIGdldEN1cnJlbnRTeW5jcyhhdXRob3JpdHlJbmZvLnRhcmdldC51c2VySWQpLmFkZChzeW5jSW5mbyk7CiAgICAgICAgIH0KLQogICAgICAgICByZXBvcnRBY3RpdmVDaGFuZ2UoKTsKICAgICAgICAgcmV0dXJuIHN5bmNJbmZvOwogICAgIH0KQEAgLTExMzAsMTAgKzEyNTksMTEgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZW1vdmVBY3RpdmVTeW5jKFN5bmNJbmZvIHN5bmNJbmZvLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgICAgIExvZy52KFRBRywgInJlbW92ZUFjdGl2ZVN5bmM6IGFjY291bnQ9IiArIHN5bmNJbmZvLmFjY291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1c2VyPSIgKyB1c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdXRoPSIgKyBzeW5jSW5mby5hdXRob3JpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGF1dGg9IiArIHN5bmNJbmZvLmF1dGhvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHNlcnZpY2U9IiArIHN5bmNJbmZvLnNlcnZpY2UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ2V0Q3VycmVudFN5bmNzKHVzZXJJZCkucmVtb3ZlKHN5bmNJbmZvKTsKICAgICAgICAgfQpAQCAtMTE0OSwzNyArMTI3OSwzNCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIE5vdGUgdGhhdCBzeW5jIGhhcyBzdGFydGVkIGZvciB0aGUgZ2l2ZW4gYWNjb3VudCBhbmQgYXV0aG9yaXR5LgorICAgICAqIE5vdGUgdGhhdCBzeW5jIGhhcyBzdGFydGVkIGZvciB0aGUgZ2l2ZW4gb3BlcmF0aW9uLgogICAgICAqLwotICAgIHB1YmxpYyBsb25nIGluc2VydFN0YXJ0U3luY0V2ZW50KEFjY291bnQgYWNjb3VudE5hbWUsIGludCB1c2VySWQsIGludCByZWFzb24sCi0gICAgICAgICAgICBTdHJpbmcgYXV0aG9yaXR5TmFtZSwgbG9uZyBub3csIGludCBzb3VyY2UsIGJvb2xlYW4gaW5pdGlhbGl6YXRpb24sIEJ1bmRsZSBleHRyYXMpIHsKKyAgICBwdWJsaWMgbG9uZyBpbnNlcnRTdGFydFN5bmNFdmVudChTeW5jT3BlcmF0aW9uIG9wLCBsb25nIG5vdykgewogICAgICAgICBsb25nIGlkOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiaW5zZXJ0U3RhcnRTeW5jRXZlbnQ6IGFjY291bnQ9IiArIGFjY291bnROYW1lICsgInVzZXI9IiArIHVzZXJJZAotICAgICAgICAgICAgICAgICAgICArICIgYXV0aD0iICsgYXV0aG9yaXR5TmFtZSArICIgc291cmNlPSIgKyBzb3VyY2UpOworICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CisgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiaW5zZXJ0U3RhcnRTeW5jRXZlbnQ6ICIgKyBvcCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZChhY2NvdW50TmFtZSwgdXNlcklkLCBhdXRob3JpdHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0U3RhcnRTeW5jRXZlbnQiKTsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gZ2V0QXV0aG9yaXR5TG9ja2VkKG9wLnRhcmdldCwgImluc2VydFN0YXJ0U3luY0V2ZW50Iik7CiAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeW5jSGlzdG9yeUl0ZW0gaXRlbSA9IG5ldyBTeW5jSGlzdG9yeUl0ZW0oKTsKLSAgICAgICAgICAgIGl0ZW0uaW5pdGlhbGl6YXRpb24gPSBpbml0aWFsaXphdGlvbjsKKyAgICAgICAgICAgIGl0ZW0uaW5pdGlhbGl6YXRpb24gPSBvcC5pc0luaXRpYWxpemF0aW9uKCk7CiAgICAgICAgICAgICBpdGVtLmF1dGhvcml0eUlkID0gYXV0aG9yaXR5LmlkZW50OwogICAgICAgICAgICAgaXRlbS5oaXN0b3J5SWQgPSBtTmV4dEhpc3RvcnlJZCsrOwogICAgICAgICAgICAgaWYgKG1OZXh0SGlzdG9yeUlkIDwgMCkgbU5leHRIaXN0b3J5SWQgPSAwOwogICAgICAgICAgICAgaXRlbS5ldmVudFRpbWUgPSBub3c7Ci0gICAgICAgICAgICBpdGVtLnNvdXJjZSA9IHNvdXJjZTsKLSAgICAgICAgICAgIGl0ZW0ucmVhc29uID0gcmVhc29uOwotICAgICAgICAgICAgaXRlbS5leHRyYXMgPSBleHRyYXM7CisgICAgICAgICAgICBpdGVtLnNvdXJjZSA9IG9wLnN5bmNTb3VyY2U7CisgICAgICAgICAgICBpdGVtLnJlYXNvbiA9IG9wLnJlYXNvbjsKKyAgICAgICAgICAgIGl0ZW0uZXh0cmFzID0gb3AuZXh0cmFzOwogICAgICAgICAgICAgaXRlbS5ldmVudCA9IEVWRU5UX1NUQVJUOwogICAgICAgICAgICAgbVN5bmNIaXN0b3J5LmFkZCgwLCBpdGVtKTsKICAgICAgICAgICAgIHdoaWxlIChtU3luY0hpc3Rvcnkuc2l6ZSgpID4gTUFYX0hJU1RPUlkpIHsKICAgICAgICAgICAgICAgICBtU3luY0hpc3RvcnkucmVtb3ZlKG1TeW5jSGlzdG9yeS5zaXplKCktMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZCA9IGl0ZW0uaGlzdG9yeUlkOwotICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJyZXR1cm5pbmcgaGlzdG9yeUlkICIgKyBpZCk7CisgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIExvZy52KFRBRywgInJldHVybmluZyBoaXN0b3J5SWQgIiArIGlkKTsKICAgICAgICAgfQogCiAgICAgICAgIHJlcG9ydENoYW5nZShDb250ZW50UmVzb2x2ZXIuU1lOQ19PQlNFUlZFUl9UWVBFX1NUQVRVUyk7CkBAIC0xMTg5LDcgKzEzMTYsNyBAQAogICAgIHB1YmxpYyB2b2lkIHN0b3BTeW5jRXZlbnQobG9uZyBoaXN0b3J5SWQsIGxvbmcgZWxhcHNlZFRpbWUsIFN0cmluZyByZXN1bHRNZXNzYWdlLAogICAgICAgICAgICAgbG9uZyBkb3duc3RyZWFtQWN0aXZpdHksIGxvbmcgdXBzdHJlYW1BY3Rpdml0eSkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJzdG9wU3luY0V2ZW50OiBoaXN0b3J5SWQ9IiArIGhpc3RvcnlJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeW5jSGlzdG9yeUl0ZW0gaXRlbSA9IG51bGw7CkBAIC0xMzQ2LDEzICsxNDczLDEyIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0dXJuIGEgY29weSBvZiB0aGUgc3BlY2lmaWVkIGF1dGhvcml0eSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHN5bmMgc3RhdHVzCisgICAgICogUmV0dXJuIGEgY29weSBvZiB0aGUgc3BlY2lmaWVkIHRhcmdldCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHN5bmMgc3RhdHVzCiAgICAgICovCi0gICAgcHVibGljIFBhaXI8QXV0aG9yaXR5SW5mbywgU3luY1N0YXR1c0luZm8+IGdldENvcHlPZkF1dGhvcml0eVdpdGhTeW5jU3RhdHVzKAotICAgICAgICAgICAgQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgcHVibGljIFBhaXI8QXV0aG9yaXR5SW5mbywgU3luY1N0YXR1c0luZm8+IGdldENvcHlPZkF1dGhvcml0eVdpdGhTeW5jU3RhdHVzKEVuZFBvaW50IGluZm8pIHsKICAgICAgICAgc3luY2hyb25pemVkIChtQXV0aG9yaXRpZXMpIHsKLSAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbyA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5LAotICAgICAgICAgICAgICAgICAgICAtMSAvKiBhc3NpZ24gYSBuZXcgaWRlbnRpZmllciBpZiBjcmVhdGluZyBhIG5ldyBhdXRob3JpdHkgKi8sCisgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gPSBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZChpbmZvLAorICAgICAgICAgICAgICAgICAgICAtMSAvKiBhc3NpZ24gYSBuZXcgaWRlbnRpZmllciBpZiBjcmVhdGluZyBhIG5ldyB0YXJnZXQgKi8sCiAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogd3JpdGUgdG8gc3RvcmFnZSBpZiB0aGlzIHJlc3VsdHMgaW4gYSBjaGFuZ2UgKi8pOwogICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvcHlQYWlyT2ZBdXRob3JpdHlXaXRoU3luY1N0YXR1c0xvY2tlZChhdXRob3JpdHlJbmZvKTsKICAgICAgICAgfQpAQCAtMTM3MywyNiArMTQ5OSwyNCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHN0YXR1cyB0aGF0IG1hdGNoZXMgdGhlIGF1dGhvcml0eSBhbmQgYWNjb3VudC4KKyAgICAgKiBSZXR1cm5zIHRoZSBzdGF0dXMgdGhhdCBtYXRjaGVzIHRoZSB0YXJnZXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gYWNjb3VudCB0aGUgYWNjb3VudCB3ZSB3YW50IHRvIGNoZWNrCi0gICAgICogQHBhcmFtIGF1dGhvcml0eSB0aGUgYXV0aG9yaXR5IHdob3NlIHJvdyBzaG91bGQgYmUgc2VsZWN0ZWQKLSAgICAgKiBAcmV0dXJuIHRoZSBTeW5jU3RhdHVzSW5mbyBmb3IgdGhlIGF1dGhvcml0eSBvciBudWxsIGlmIG5vbmUgZm91bmQuCisgICAgICogQHBhcmFtIGluZm8gdGhlIGVuZHBvaW50IHRhcmdldCB3ZSBhcmUgcXVlcnlpbmcgc3RhdHVzIGluZm8gZm9yLgorICAgICAqIEByZXR1cm4gdGhlIFN5bmNTdGF0dXNJbmZvIGZvciB0aGUgZW5kcG9pbnQuCiAgICAgICovCi0gICAgcHVibGljIFN5bmNTdGF0dXNJbmZvIGdldFN0YXR1c0J5QWNjb3VudEFuZEF1dGhvcml0eShBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsCi0gICAgICAgICAgICBTdHJpbmcgYXV0aG9yaXR5KSB7Ci0gICAgICAgIGlmIChhY2NvdW50ID09IG51bGwgfHwgYXV0aG9yaXR5ID09IG51bGwpIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICBwdWJsaWMgU3luY1N0YXR1c0luZm8gZ2V0U3RhdHVzQnlBdXRob3JpdHkoRW5kUG9pbnQgaW5mbykgeworICAgICAgICBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIgJiYgKGluZm8uYWNjb3VudCA9PSBudWxsIHx8IGluZm8ucHJvdmlkZXIgPT0gbnVsbCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9IGVsc2UgaWYgKGluZm8udGFyZ2V0X3NlcnZpY2UgJiYgaW5mby5zZXJ2aWNlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IG1TeW5jU3RhdHVzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU3luY1N0YXR1c0luZm8gY3VyID0gbVN5bmNTdGF0dXMudmFsdWVBdChpKTsKICAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGFpbmZvID0gbUF1dGhvcml0aWVzLmdldChjdXIuYXV0aG9yaXR5SWQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFpbmZvICE9IG51bGwgJiYgYWluZm8uYXV0aG9yaXR5LmVxdWFscyhhdXRob3JpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBhaW5mby51c2VySWQgPT0gdXNlcklkCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBhY2NvdW50LmVxdWFscyhhaW5mby5hY2NvdW50KSkgeworICAgICAgICAgICAgICAgIGlmIChhaW5mbyAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBhaW5mby50YXJnZXQubWF0Y2hlc1NwZWMoaW5mbykpIHsKICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTQwMCwyNSArMTUyNCwyMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHBlbmRpbmcgc3RhdHVzIGlzIHRydWUgb2YgYW55IG1hdGNoaW5nIGF1dGhvcml0aWVzLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzU3luY1BlbmRpbmcoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBwZW5kaW5nIHN0YXR1cyBpcyB0cnVlIG9mIGFueSBtYXRjaGluZyBhdXRob3JpdGllcy4gKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc1N5bmNQZW5kaW5nKEVuZFBvaW50IGluZm8pIHsKICAgICAgICAgc3luY2hyb25pemVkIChtQXV0aG9yaXRpZXMpIHsKICAgICAgICAgICAgIGZpbmFsIGludCBOID0gbVN5bmNTdGF0dXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgICAgICBTeW5jU3RhdHVzSW5mbyBjdXIgPSBtU3luY1N0YXR1cy52YWx1ZUF0KGkpOwogICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYWluZm8gPSBtQXV0aG9yaXRpZXMuZ2V0KGN1ci5hdXRob3JpdHlJZCk7CiAgICAgICAgICAgICAgICAgaWYgKGFpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh1c2VySWQgIT0gYWluZm8udXNlcklkKSB7CisgICAgICAgICAgICAgICAgaWYgKCFhaW5mby50YXJnZXQubWF0Y2hlc1NwZWMoaW5mbykpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChhY2NvdW50ICE9IG51bGwgJiYgIWFpbmZvLmFjY291bnQuZXF1YWxzKGFjY291bnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYWluZm8uYXV0aG9yaXR5LmVxdWFscyhhdXRob3JpdHkpICYmIGN1ci5wZW5kaW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKGN1ci5wZW5kaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE0NzQsMTI4ICsxNTkzLDEzMyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlIGFuIGF1dGhvcml0eSwgcmV0dXJuaW5nIG51bGwgaWYgb25lIGRvZXMgbm90IGV4aXN0LgorICAgICAqIFJldHJpZXZlIGEgdGFyZ2V0J3MgZnVsbCBpbmZvLCByZXR1cm5pbmcgbnVsbCBpZiBvbmUgZG9lcyBub3QgZXhpc3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gYWNjb3VudE5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjY291bnQgZm9yIHRoZSBhdXRob3JpdHkuCi0gICAgICogQHBhcmFtIGF1dGhvcml0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIGF1dGhvcml0eSBpdHNlbGYuCisgICAgICogQHBhcmFtIGluZm8gaW5mbyBvZiB0aGUgdGFyZ2V0IHRvIGxvb2sgdXAuCiAgICAgICogQHBhcmFtIHRhZyBJZiBub24tbnVsbCwgdGhpcyB3aWxsIGJlIHVzZWQgaW4gYSBsb2cgbWVzc2FnZSBpZiB0aGUKLSAgICAgKiByZXF1ZXN0ZWQgYXV0aG9yaXR5IGRvZXMgbm90IGV4aXN0LgorICAgICAqIHJlcXVlc3RlZCB0YXJnZXQgZG9lcyBub3QgZXhpc3QuCiAgICAgICovCi0gICAgcHJpdmF0ZSBBdXRob3JpdHlJbmZvIGdldEF1dGhvcml0eUxvY2tlZChBY2NvdW50IGFjY291bnROYW1lLCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5TmFtZSwKLSAgICAgICAgICAgIFN0cmluZyB0YWcpIHsKLSAgICAgICAgQWNjb3VudEFuZFVzZXIgYXUgPSBuZXcgQWNjb3VudEFuZFVzZXIoYWNjb3VudE5hbWUsIHVzZXJJZCk7Ci0gICAgICAgIEFjY291bnRJbmZvIGFjY291bnRJbmZvID0gbUFjY291bnRzLmdldChhdSk7Ci0gICAgICAgIGlmIChhY2NvdW50SW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAodGFnICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCB0YWcgKyAiOiB1bmtub3duIGFjY291bnQgIiArIGF1KTsKLSAgICAgICAgICAgICAgICB9CisgICAgcHJpdmF0ZSBBdXRob3JpdHlJbmZvIGdldEF1dGhvcml0eUxvY2tlZChFbmRQb2ludCBpbmZvLCBTdHJpbmcgdGFnKSB7CisgICAgICAgIGlmIChpbmZvLnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheTxBdXRob3JpdHlJbmZvPiBhSW5mbyA9IG1TZXJ2aWNlcy5nZXQoaW5mby5zZXJ2aWNlKTsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChhSW5mbyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYXV0aG9yaXR5ID0gYUluZm8uZ2V0KGluZm8udXNlcklkKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmICh0YWcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgdGFnICsgIiBObyBhdXRob3JpdHkgaW5mbyBmb3VuZCBmb3IgIiArIGluZm8uc2VydmljZSArICIgZm9yIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdXNlciAiICsgaW5mby51c2VySWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml0eTsKKyAgICAgICAgfSBlbHNlIGlmIChpbmZvLnRhcmdldF9wcm92aWRlcil7CisgICAgICAgICAgICBBY2NvdW50QW5kVXNlciBhdSA9IG5ldyBBY2NvdW50QW5kVXNlcihpbmZvLmFjY291bnQsIGluZm8udXNlcklkKTsKKyAgICAgICAgICAgIEFjY291bnRJbmZvIGFjY291bnRJbmZvID0gbUFjY291bnRzLmdldChhdSk7CisgICAgICAgICAgICBpZiAoYWNjb3VudEluZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmICh0YWcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgdGFnICsgIjogdW5rbm93biBhY2NvdW50ICIgKyBhdSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGFjY291bnRJbmZvLmF1dGhvcml0aWVzLmdldChpbmZvLnByb3ZpZGVyKTsKKyAgICAgICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmICh0YWcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgdGFnICsgIjogdW5rbm93biBwcm92aWRlciAiICsgaW5mby5wcm92aWRlcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXR5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTG9nLmUoVEFHLCB0YWcgKyAiIEF1dGhvcml0eSA6ICIgKyBpbmZvICsgIiwgaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gYWNjb3VudEluZm8uYXV0aG9yaXRpZXMuZ2V0KGF1dGhvcml0eU5hbWUpOwotICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwpIHsKLSAgICAgICAgICAgIGlmICh0YWcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsIHRhZyArICI6IHVua25vd24gYXV0aG9yaXR5ICIgKyBhdXRob3JpdHlOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBhdXRob3JpdHk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmUgYW4gYXV0aG9yaXR5LCByZXR1cm5pbmcgbnVsbCBpZiBvbmUgZG9lcyBub3QgZXhpc3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2VydmljZSBUaGUgc2VydmljZSBuYW1lIHVzZWQgZm9yIHRoaXMgc3luYy4KLSAgICAgKiBAcGFyYW0gdXNlcklkIFRoZSB1c2VyIGZvciB3aG9tIHRoaXMgc3luYyBpcyBzY2hlZHVsZWQuCi0gICAgICogQHBhcmFtIHRhZyBJZiBub24tbnVsbCwgdGhpcyB3aWxsIGJlIHVzZWQgaW4gYSBsb2cgbWVzc2FnZSBpZiB0aGUKLSAgICAgKiByZXF1ZXN0ZWQgYXV0aG9yaXR5IGRvZXMgbm90IGV4aXN0LgotICAgICAqLwotICAgIHByaXZhdGUgQXV0aG9yaXR5SW5mbyBnZXRBdXRob3JpdHlMb2NrZWQoQ29tcG9uZW50TmFtZSBzZXJ2aWNlLCBpbnQgdXNlcklkLCBTdHJpbmcgdGFnKSB7Ci0gICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbVNlcnZpY2VzLmdldChzZXJ2aWNlKS5nZXQodXNlcklkKTsKLSAgICAgICAgaWYgKGF1dGhvcml0eSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAodGFnICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCB0YWcgKyAiIE5vIGF1dGhvcml0eSBpbmZvIGZvdW5kIGZvciAiICsgc2VydmljZSArICIgZm9yIHVzZXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdXNlcklkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYXV0aG9yaXR5OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBjbmFtZSBpZGVudGlmaWVyIGZvciB0aGUgc2VydmljZS4KLSAgICAgKiBAcGFyYW0gdXNlcklkIGZvciB0aGUgc3luY3MgY29ycmVzcG9uZGluZyB0byB0aGlzIGF1dGhvcml0eS4KLSAgICAgKiBAcGFyYW0gaWRlbnQgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGF1dGhvcml0eS4gLTEgZm9yIG5vbmUuCisgICAgICogQHBhcmFtIGluZm8gaW5mbyBpZGVudGlmeWluZyB0YXJnZXQuCisgICAgICogQHBhcmFtIGlkZW50IHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0YXJnZXQuIC0xIGZvciBub25lLgogICAgICAqIEBwYXJhbSBkb1dyaXRlIGlmIHRydWUsIHVwZGF0ZSB0aGUgYWNjb3VudHMueG1sIGZpbGUgb24gdGhlIGRpc2suCi0gICAgICogQHJldHVybiB0aGUgYXV0aG9yaXR5IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHByb3ZpZGVkIHN5bmMgc2VydmljZSwgY3JlYXRpbmcgaXQgaWYgbm9uZQorICAgICAqIEByZXR1cm4gdGhlIGF1dGhvcml0eSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwcm92aWRlZCBzeW5jIHRhcmdldCwgY3JlYXRpbmcgaXQgaWYgbm9uZQogICAgICAqIGV4aXN0cy4KICAgICAgKi8KLSAgICBwcml2YXRlIEF1dGhvcml0eUluZm8gZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoQ29tcG9uZW50TmFtZSBjbmFtZSwgaW50IHVzZXJJZCwgaW50IGlkZW50LAotICAgICAgICAgICAgYm9vbGVhbiBkb1dyaXRlKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5PEF1dGhvcml0eUluZm8+IGFJbmZvID0gbVNlcnZpY2VzLmdldChjbmFtZSk7Ci0gICAgICAgIGlmIChhSW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBhSW5mbyA9IG5ldyBTcGFyc2VBcnJheTxBdXRob3JpdHlJbmZvPigpOwotICAgICAgICAgICAgbVNlcnZpY2VzLnB1dChjbmFtZSwgYUluZm8pOwotICAgICAgICB9Ci0gICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gYUluZm8uZ2V0KHVzZXJJZCk7Ci0gICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKGlkZW50IDwgMCkgewotICAgICAgICAgICAgICAgIGlkZW50ID0gbU5leHRBdXRob3JpdHlJZDsKLSAgICAgICAgICAgICAgICBtTmV4dEF1dGhvcml0eUlkKys7Ci0gICAgICAgICAgICAgICAgZG9Xcml0ZSA9IHRydWU7CisgICAgcHJpdmF0ZSBBdXRob3JpdHlJbmZvIGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKEVuZFBvaW50IGluZm8sIGludCBpZGVudCwgYm9vbGVhbiBkb1dyaXRlKSB7CisgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbnVsbDsKKyAgICAgICAgaWYgKGluZm8udGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5PEF1dGhvcml0eUluZm8+IGFJbmZvID0gbVNlcnZpY2VzLmdldChpbmZvLnNlcnZpY2UpOworICAgICAgICAgICAgaWYgKGFJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhSW5mbyA9IG5ldyBTcGFyc2VBcnJheTxBdXRob3JpdHlJbmZvPigpOworICAgICAgICAgICAgICAgIG1TZXJ2aWNlcy5wdXQoaW5mby5zZXJ2aWNlLCBhSW5mbyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cudihUQUcsICJjcmVhdGVkIGEgbmV3IEF1dGhvcml0eUluZm8gZm9yICIgKyBjbmFtZS5nZXRQYWNrYWdlTmFtZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICArICIsICIgKyBjbmFtZS5nZXRDbGFzc05hbWUoKQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCB1c2VyOiAiICsgdXNlcklkKTsKKyAgICAgICAgICAgIGF1dGhvcml0eSA9IGFJbmZvLmdldChpbmZvLnVzZXJJZCk7CisgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhdXRob3JpdHkgPSBjcmVhdGVBdXRob3JpdHlMb2NrZWQoaW5mbywgaWRlbnQsIGRvV3JpdGUpOworICAgICAgICAgICAgICAgIGFJbmZvLnB1dChpbmZvLnVzZXJJZCwgYXV0aG9yaXR5KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dGhvcml0eSA9IG5ldyBBdXRob3JpdHlJbmZvKGNuYW1lLCB1c2VySWQsIGlkZW50KTsKLSAgICAgICAgICAgIGFJbmZvLnB1dCh1c2VySWQsIGF1dGhvcml0eSk7Ci0gICAgICAgICAgICBtQXV0aG9yaXRpZXMucHV0KGlkZW50LCBhdXRob3JpdHkpOwotICAgICAgICAgICAgaWYgKGRvV3JpdGUpIHsKLSAgICAgICAgICAgICAgICB3cml0ZUFjY291bnRJbmZvTG9ja2VkKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgIEFjY291bnRBbmRVc2VyIGF1ID0gbmV3IEFjY291bnRBbmRVc2VyKGluZm8uYWNjb3VudCwgaW5mby51c2VySWQpOworICAgICAgICAgICAgQWNjb3VudEluZm8gYWNjb3VudCA9IG1BY2NvdW50cy5nZXQoYXUpOworICAgICAgICAgICAgaWYgKGFjY291bnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGFjY291bnQgPSBuZXcgQWNjb3VudEluZm8oYXUpOworICAgICAgICAgICAgICAgIG1BY2NvdW50cy5wdXQoYXUsIGFjY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0aG9yaXR5ID0gYWNjb3VudC5hdXRob3JpdGllcy5nZXQoaW5mby5wcm92aWRlcik7CisgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhdXRob3JpdHkgPSBjcmVhdGVBdXRob3JpdHlMb2NrZWQoaW5mbywgaWRlbnQsIGRvV3JpdGUpOworICAgICAgICAgICAgICAgIGFjY291bnQuYXV0aG9yaXRpZXMucHV0KGluZm8ucHJvdmlkZXIsIGF1dGhvcml0eSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGF1dGhvcml0eTsKICAgICB9CiAKLSAgICBwcml2YXRlIEF1dGhvcml0eUluZm8gZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoQWNjb3VudCBhY2NvdW50TmFtZSwgaW50IHVzZXJJZCwKLSAgICAgICAgICAgIFN0cmluZyBhdXRob3JpdHlOYW1lLCBpbnQgaWRlbnQsIGJvb2xlYW4gZG9Xcml0ZSkgewotICAgICAgICBBY2NvdW50QW5kVXNlciBhdSA9IG5ldyBBY2NvdW50QW5kVXNlcihhY2NvdW50TmFtZSwgdXNlcklkKTsKLSAgICAgICAgQWNjb3VudEluZm8gYWNjb3VudCA9IG1BY2NvdW50cy5nZXQoYXUpOwotICAgICAgICBpZiAoYWNjb3VudCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBhY2NvdW50ID0gbmV3IEFjY291bnRJbmZvKGF1KTsKLSAgICAgICAgICAgIG1BY2NvdW50cy5wdXQoYXUsIGFjY291bnQpOworICAgIHByaXZhdGUgQXV0aG9yaXR5SW5mbyBjcmVhdGVBdXRob3JpdHlMb2NrZWQoRW5kUG9pbnQgaW5mbywgaW50IGlkZW50LCBib29sZWFuIGRvV3JpdGUpIHsKKyAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHk7CisgICAgICAgIGlmIChpZGVudCA8IDApIHsKKyAgICAgICAgICAgIGlkZW50ID0gbU5leHRBdXRob3JpdHlJZDsKKyAgICAgICAgICAgIG1OZXh0QXV0aG9yaXR5SWQrKzsKKyAgICAgICAgICAgIGRvV3JpdGUgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gYWNjb3VudC5hdXRob3JpdGllcy5nZXQoYXV0aG9yaXR5TmFtZSk7Ci0gICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKGlkZW50IDwgMCkgewotICAgICAgICAgICAgICAgIGlkZW50ID0gbU5leHRBdXRob3JpdHlJZDsKLSAgICAgICAgICAgICAgICBtTmV4dEF1dGhvcml0eUlkKys7Ci0gICAgICAgICAgICAgICAgZG9Xcml0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cudihUQUcsICJjcmVhdGVkIGEgbmV3IEF1dGhvcml0eUluZm8gZm9yICIgKyBhY2NvdW50TmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCB1c2VyICIgKyB1c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcHJvdmlkZXIgIiArIGF1dGhvcml0eU5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0aG9yaXR5ID0gbmV3IEF1dGhvcml0eUluZm8oYWNjb3VudE5hbWUsIHVzZXJJZCwgYXV0aG9yaXR5TmFtZSwgaWRlbnQpOwotICAgICAgICAgICAgYWNjb3VudC5hdXRob3JpdGllcy5wdXQoYXV0aG9yaXR5TmFtZSwgYXV0aG9yaXR5KTsKLSAgICAgICAgICAgIG1BdXRob3JpdGllcy5wdXQoaWRlbnQsIGF1dGhvcml0eSk7Ci0gICAgICAgICAgICBpZiAoZG9Xcml0ZSkgewotICAgICAgICAgICAgICAgIHdyaXRlQWNjb3VudEluZm9Mb2NrZWQoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CisgICAgICAgICAgICBMb2cudihUQUcsICJjcmVhdGVkIGEgbmV3IEF1dGhvcml0eUluZm8gZm9yICIgKyBpbmZvKTsKICAgICAgICAgfQotCisgICAgICAgIGF1dGhvcml0eSA9IG5ldyBBdXRob3JpdHlJbmZvKGluZm8sIGlkZW50KTsKKyAgICAgICAgbUF1dGhvcml0aWVzLnB1dChpZGVudCwgYXV0aG9yaXR5KTsKKyAgICAgICAgaWYgKGRvV3JpdGUpIHsKKyAgICAgICAgICAgIHdyaXRlQWNjb3VudEluZm9Mb2NrZWQoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gYXV0aG9yaXR5OwogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZUF1dGhvcml0eShFbmRQb2ludCBpbmZvKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CisgICAgICAgICAgICBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICByZW1vdmVBdXRob3JpdHlMb2NrZWQoaW5mby5hY2NvdW50LCBpbmZvLnVzZXJJZCwgaW5mby5wcm92aWRlciwgdHJ1ZSAvKiBkb1dyaXRlICovKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3BhcnNlQXJyYXk8QXV0aG9yaXR5SW5mbz4gYUluZm9zID0gbVNlcnZpY2VzLmdldChpbmZvLnNlcnZpY2UpOworICAgICAgICAgICAgICAgIGlmIChhSW5mb3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gPSBhSW5mb3MuZ2V0KGluZm8udXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUF1dGhvcml0aWVzLnJlbW92ZShhdXRob3JpdHlJbmZvLmlkZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFJbmZvcy5kZWxldGUoaW5mby51c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVBY2NvdW50SW5mb0xvY2tlZCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYW4gYXV0aG9yaXR5IGFzc29jaWF0ZWQgd2l0aCBhIHByb3ZpZGVyLiBOZWVkcyB0byBiZSBhIHN0YW5kYWxvbmUgZnVuY3Rpb24gZm9yCisgICAgICogYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgcmVtb3ZlQXV0aG9yaXR5TG9ja2VkKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIGF1dGhvcml0eU5hbWUsCiAgICAgICAgICAgICBib29sZWFuIGRvV3JpdGUpIHsKICAgICAgICAgQWNjb3VudEluZm8gYWNjb3VudEluZm8gPSBtQWNjb3VudHMuZ2V0KG5ldyBBY2NvdW50QW5kVXNlcihhY2NvdW50LCB1c2VySWQpKTsKQEAgLTE2MTIsMTAgKzE3MzYsOSBAQAogCiAgICAgLyoqCiAgICAgICogVXBkYXRlcyAoaW4gYSBzeW5jaHJvbml6ZWQgd2F5KSB0aGUgcGVyaW9kaWMgc3luYyB0aW1lIG9mIHRoZSBzcGVjaWZpZWQKLSAgICAgKiBhdXRob3JpdHkgaWQgYW5kIHRhcmdldCBwZXJpb2RpYyBzeW5jCisgICAgICogdGFyZ2V0IGlkIGFuZCB0YXJnZXQgcGVyaW9kaWMgc3luYwogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFBlcmlvZGljU3luY1RpbWUoCi0gICAgICAgICAgICBpbnQgYXV0aG9yaXR5SWQsIFBlcmlvZGljU3luYyB0YXJnZXRQZXJpb2RpY1N5bmMsIGxvbmcgd2hlbikgeworICAgIHB1YmxpYyB2b2lkIHNldFBlcmlvZGljU3luY1RpbWUoaW50IGF1dGhvcml0eUlkLCBQZXJpb2RpY1N5bmMgdGFyZ2V0UGVyaW9kaWNTeW5jLCBsb25nIHdoZW4pIHsKICAgICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwogICAgICAgICBmaW5hbCBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm87CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CkBAIC0xNjMxLDcgKzE3NTQsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgIExvZy53KFRBRywgIklnbm9yaW5nIHNldFBlcmlvZGljU3luY1RpbWUgcmVxdWVzdCBmb3IgYSBzeW5jIHRoYXQgZG9lcyBub3QgZXhpc3QuICIgKwotICAgICAgICAgICAgICAgICAgICAiQXV0aG9yaXR5OiAiICsgYXV0aG9yaXR5SW5mby5hdXRob3JpdHkpOworICAgICAgICAgICAgICAgICAgICAiQXV0aG9yaXR5OiAiICsgYXV0aG9yaXR5SW5mby50YXJnZXQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjkyLDcgKzE4MTUsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmlzID0gbUFjY291bnRJbmZvRmlsZS5vcGVuUmVhZCgpOwogICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBR19GSUxFLCBMb2cuVkVSQk9TRSkpIHsKLSAgICAgICAgICAgICAgICBMb2cudihUQUcsICJSZWFkaW5nICIgKyBtQWNjb3VudEluZm9GaWxlLmdldEJhc2VGaWxlKCkpOworICAgICAgICAgICAgICAgIExvZy52KFRBR19GSUxFLCAiUmVhZGluZyAiICsgbUFjY291bnRJbmZvRmlsZS5nZXRCYXNlRmlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFhtbFB1bGxQYXJzZXIgcGFyc2VyID0gWG1sLm5ld1B1bGxQYXJzZXIoKTsKICAgICAgICAgICAgIHBhcnNlci5zZXRJbnB1dChmaXMsIG51bGwpOwpAQCAtMTgwNiwxMCArMTkyOSwxNCBAQAogCiAgICAgICAgIEFycmF5TGlzdDxBdXRob3JpdHlJbmZvPiBhdXRob3JpdGllc1RvUmVtb3ZlID0gbmV3IEFycmF5TGlzdDxBdXRob3JpdHlJbmZvPigpOwogICAgICAgICBmaW5hbCBpbnQgTiA9IG1BdXRob3JpdGllcy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbUF1dGhvcml0aWVzLnZhbHVlQXQoaSk7CisgICAgICAgICAgICAvLyBza2lwIHRoaXMgYXV0aG9yaXR5IGlmIGl0IGRvZXNuJ3QgdGFyZ2V0IGEgcHJvdmlkZXIKKyAgICAgICAgICAgIGlmIChhdXRob3JpdHkudGFyZ2V0LnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBza2lwIHRoaXMgYXV0aG9yaXR5IGlmIGl0IGlzbid0IG9uZSBvZiB0aGUgcmVuYW1lZCBvbmVzCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmV3QXV0aG9yaXR5TmFtZSA9IHNBdXRob3JpdHlSZW5hbWVzLmdldChhdXRob3JpdHkuYXV0aG9yaXR5KTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuZXdBdXRob3JpdHlOYW1lID0gc0F1dGhvcml0eVJlbmFtZXMuZ2V0KGF1dGhvcml0eS50YXJnZXQucHJvdmlkZXIpOwogICAgICAgICAgICAgaWYgKG5ld0F1dGhvcml0eU5hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtMTgyNSwyMCArMTk1MiwyNiBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSByZWNvcmQgb2YgdGhpcyBuZXcgYXV0aG9yaXR5IHRoZW4gZG9uJ3QgY29weSBvdmVyIHRoZSBzZXR0aW5ncwotICAgICAgICAgICAgaWYgKGdldEF1dGhvcml0eUxvY2tlZChhdXRob3JpdHkuYWNjb3VudCwgYXV0aG9yaXR5LnVzZXJJZCwgbmV3QXV0aG9yaXR5TmFtZSwgImNsZWFudXAiKQotICAgICAgICAgICAgICAgICAgICAhPSBudWxsKSB7CisgICAgICAgICAgICBFbmRQb2ludCBuZXdJbmZvID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IEVuZFBvaW50KGF1dGhvcml0eS50YXJnZXQuYWNjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBdXRob3JpdHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eS50YXJnZXQudXNlcklkKTsKKyAgICAgICAgICAgIGlmIChnZXRBdXRob3JpdHlMb2NrZWQobmV3SW5mbywgImNsZWFudXAiKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEF1dGhvcml0eUluZm8gbmV3QXV0aG9yaXR5ID0gZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoYXV0aG9yaXR5LmFjY291bnQsCi0gICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eS51c2VySWQsIG5ld0F1dGhvcml0eU5hbWUsIC0xIC8qIGlkZW50ICovLCBmYWxzZSAvKiBkb1dyaXRlICovKTsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gbmV3QXV0aG9yaXR5ID0KKyAgICAgICAgICAgICAgICAgICAgZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQobmV3SW5mbywgLTEgLyogaWRlbnQgKi8sIGZhbHNlIC8qIGRvV3JpdGUgKi8pOwogICAgICAgICAgICAgbmV3QXV0aG9yaXR5LmVuYWJsZWQgPSB0cnVlOwogICAgICAgICAgICAgd3JpdGVOZWVkZWQgPSB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gOiBhdXRob3JpdGllc1RvUmVtb3ZlKSB7Ci0gICAgICAgICAgICByZW1vdmVBdXRob3JpdHlMb2NrZWQoYXV0aG9yaXR5SW5mby5hY2NvdW50LCBhdXRob3JpdHlJbmZvLnVzZXJJZCwKLSAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hdXRob3JpdHksIGZhbHNlIC8qIGRvV3JpdGUgKi8pOworICAgICAgICAgICAgcmVtb3ZlQXV0aG9yaXR5TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnRhcmdldC5hY2NvdW50LAorICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnRhcmdldC51c2VySWQsCisgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8udGFyZ2V0LnByb3ZpZGVyLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBkb1dyaXRlICovKTsKICAgICAgICAgICAgIHdyaXRlTmVlZGVkID0gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0xODgwLDMwICsyMDEzLDM3IEBACiAgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInBhY2thZ2UiKTsKICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImNsYXNzIik7CiAgICAgICAgICAgICBpbnQgdXNlcklkID0gdXNlciA9PSBudWxsID8gMCA6IEludGVnZXIucGFyc2VJbnQodXNlcik7Ci0gICAgICAgICAgICBpZiAoYWNjb3VudFR5cGUgPT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKGFjY291bnRUeXBlID09IG51bGwgJiYgcGFja2FnZU5hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGFjY291bnRUeXBlID0gImNvbS5nb29nbGUiOwogICAgICAgICAgICAgICAgIHN5bmNhYmxlID0gInVua25vd24iOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYXV0aG9yaXR5ID0gbUF1dGhvcml0aWVzLmdldChpZCk7CiAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHX0ZJTEUsIExvZy5WRVJCT1NFKSkgewotICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkFkZGluZyBhdXRob3JpdHk6IGFjY291bnQ9IgotICAgICAgICAgICAgICAgICAgICAgICAgKyBhY2NvdW50TmFtZSArICIgYXV0aD0iICsgYXV0aG9yaXR5TmFtZQorICAgICAgICAgICAgICAgIExvZy52KFRBR19GSUxFLCAiQWRkaW5nIGF1dGhvcml0eToiCisgICAgICAgICAgICAgICAgICAgICAgICArICIgYWNjb3VudD0iICsgYWNjb3VudE5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhY2NvdW50VHlwZT0iICsgYWNjb3VudFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdXRoPSIgKyBhdXRob3JpdHlOYW1lCisgICAgICAgICAgICAgICAgICAgICAgICArICIgcGFja2FnZT0iICsgcGFja2FnZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBjbGFzcz0iICsgY2xhc3NOYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICArICIgdXNlcj0iICsgdXNlcklkCiAgICAgICAgICAgICAgICAgICAgICAgICArICIgZW5hYmxlZD0iICsgZW5hYmxlZAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHN5bmNhYmxlPSIgKyBzeW5jYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHX0ZJTEUsIExvZy5WRVJCT1NFKSkgewotICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJDcmVhdGluZyBlbnRyeSIpOworICAgICAgICAgICAgICAgICAgICBMb2cudihUQUdfRklMRSwgIkNyZWF0aW5nIGF1dGhvcml0eSBlbnRyeSIpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYWNjb3VudE5hbWUgIT0gbnVsbCAmJiBhY2NvdW50VHlwZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eSA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY2NvdW50KGFjY291bnROYW1lLCBhY2NvdW50VHlwZSksIHVzZXJJZCwgYXV0aG9yaXR5TmFtZSwgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBFbmRQb2ludCBpbmZvOworICAgICAgICAgICAgICAgIGlmIChhY2NvdW50TmFtZSAhPSBudWxsICYmIGF1dGhvcml0eU5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpbmZvID0gbmV3IEVuZFBvaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY2NvdW50KGFjY291bnROYW1lLCBhY2NvdW50VHlwZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSwgdXNlcklkKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkgPSBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ29tcG9uZW50TmFtZShwYWNrYWdlTmFtZSwgY2xhc3NOYW1lKSwgdXNlcklkLCBpZCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBpbmZvID0gbmV3IEVuZFBvaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb21wb25lbnROYW1lKHBhY2thZ2VOYW1lLCBjbGFzc05hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGF1dGhvcml0eSA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKGluZm8sIGlkLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHZlcnNpb24gaXMgMCB0aGVuIHdlIGFyZSB1cGdyYWRpbmcgZnJvbSBhIGZpbGUgZm9ybWF0IHRoYXQgZGlkIG5vdAogICAgICAgICAgICAgICAgIC8vIGtub3cgYWJvdXQgcGVyaW9kaWMgc3luY3MuIEluIHRoYXQgY2FzZSBkb24ndCBjbGVhciB0aGUgbGlzdCBzaW5jZSB3ZQogICAgICAgICAgICAgICAgIC8vIHdhbnQgdGhlIGRlZmF1bHQsIHdoaWNoIGlzIGEgZGFpbHkgcGVyaW9kaWMgc3luYy4KQEAgLTE5MzQsNyArMjA3NCw3IEBACiAgICAgLyoqCiAgICAgICogUGFyc2UgYSBwZXJpb2RpYyBzeW5jIGZyb20gYWNjb3VudHMueG1sLiBTZXRzIHRoZSBidW5kbGUgdG8gYmUgZW1wdHkuCiAgICAgICovCi0gICAgcHJpdmF0ZSBQZXJpb2RpY1N5bmMgcGFyc2VQZXJpb2RpY1N5bmMoWG1sUHVsbFBhcnNlciBwYXJzZXIsIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5KSB7CisgICAgcHJpdmF0ZSBQZXJpb2RpY1N5bmMgcGFyc2VQZXJpb2RpY1N5bmMoWG1sUHVsbFBhcnNlciBwYXJzZXIsIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbykgewogICAgICAgICBCdW5kbGUgZXh0cmFzID0gbmV3IEJ1bmRsZSgpOyAvLyBHZXRzIGZpbGxlZCBpbiBsYXRlci4KICAgICAgICAgU3RyaW5nIHBlcmlvZFZhbHVlID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJwZXJpb2QiKTsKICAgICAgICAgU3RyaW5nIGZsZXhWYWx1ZSA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiZmxleCIpOwpAQCAtMTk1MiwxNyArMjA5MiwzMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmxleHRpbWUgPSBMb25nLnBhcnNlTG9uZyhmbGV4VmFsdWUpOwogICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXJyb3IgZm9ybWF0dGluZyB2YWx1ZSBwYXJzZWQgZm9yIHBlcmlvZGljIHN5bmMgZmxleDogIiArIGZsZXhWYWx1ZSk7CiAgICAgICAgICAgICBmbGV4dGltZSA9IGNhbGN1bGF0ZURlZmF1bHRGbGV4VGltZShwZXJpb2QpOworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXJyb3IgZm9ybWF0dGluZyB2YWx1ZSBwYXJzZWQgZm9yIHBlcmlvZGljIHN5bmMgZmxleDogIiArIGZsZXhWYWx1ZQorICAgICAgICAgICAgICAgICAgICArICIsIHVzaW5nIGRlZmF1bHQ6ICIKKyAgICAgICAgICAgICAgICAgICAgKyBmbGV4dGltZSk7CiAgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGV4cGVjdGVkKSB7CiAgICAgICAgICAgICBmbGV4dGltZSA9IGNhbGN1bGF0ZURlZmF1bHRGbGV4VGltZShwZXJpb2QpOwogICAgICAgICAgICAgTG9nLmQoVEFHLCAiTm8gZmxleCB0aW1lIHNwZWNpZmllZCBmb3IgdGhpcyBzeW5jLCB1c2luZyBhIGRlZmF1bHQuIHBlcmlvZDogIgogICAgICAgICAgICAgKyBwZXJpb2QgKyAiIGZsZXg6ICIgKyBmbGV4dGltZSk7CiAgICAgICAgIH0KLSAgICAgICAgZmluYWwgUGVyaW9kaWNTeW5jIHBlcmlvZGljU3luYyA9Ci0gICAgICAgICAgICAgICAgbmV3IFBlcmlvZGljU3luYyhhdXRob3JpdHkuYWNjb3VudCwgYXV0aG9yaXR5LmF1dGhvcml0eSwgZXh0cmFzLAorICAgICAgICBQZXJpb2RpY1N5bmMgcGVyaW9kaWNTeW5jOworICAgICAgICBpZiAoYXV0aG9yaXR5SW5mby50YXJnZXQudGFyZ2V0X3Byb3ZpZGVyKSB7CisgICAgICAgICAgICBwZXJpb2RpY1N5bmMgPQorICAgICAgICAgICAgICAgIG5ldyBQZXJpb2RpY1N5bmMoYXV0aG9yaXR5SW5mby50YXJnZXQuYWNjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8udGFyZ2V0LnByb3ZpZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzLAogICAgICAgICAgICAgICAgICAgICAgICAgcGVyaW9kLCBmbGV4dGltZSk7Ci0gICAgICAgIGF1dGhvcml0eS5wZXJpb2RpY1N5bmNzLmFkZChwZXJpb2RpY1N5bmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGVyaW9kaWNTeW5jID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IFBlcmlvZGljU3luYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJpb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleHRpbWUpOworICAgICAgICB9CisgICAgICAgIGF1dGhvcml0eUluZm8ucGVyaW9kaWNTeW5jcy5hZGQocGVyaW9kaWNTeW5jKTsKICAgICAgICAgcmV0dXJuIHBlcmlvZGljU3luYzsKICAgICB9CiAKQEAgLTIwMDAsNyArMjE1NCw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHdyaXRlQWNjb3VudEluZm9Mb2NrZWQoKSB7CiAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUdfRklMRSwgTG9nLlZFUkJPU0UpKSB7Ci0gICAgICAgICAgICBMb2cudihUQUcsICJXcml0aW5nIG5ldyAiICsgbUFjY291bnRJbmZvRmlsZS5nZXRCYXNlRmlsZSgpKTsKKyAgICAgICAgICAgIExvZy52KFRBR19GSUxFLCAiV3JpdGluZyBuZXcgIiArIG1BY2NvdW50SW5mb0ZpbGUuZ2V0QmFzZUZpbGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBudWxsOwogCkBAIC0yMDMwLDE3ICsyMTg0LDE4IEBACiAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IG1BdXRob3JpdGllcy5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbUF1dGhvcml0aWVzLnZhbHVlQXQoaSk7CisgICAgICAgICAgICAgICAgRW5kUG9pbnQgaW5mbyA9IGF1dGhvcml0eS50YXJnZXQ7CiAgICAgICAgICAgICAgICAgb3V0LnN0YXJ0VGFnKG51bGwsICJhdXRob3JpdHkiKTsKICAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsICJpZCIsIEludGVnZXIudG9TdHJpbmcoYXV0aG9yaXR5LmlkZW50KSk7Ci0gICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCBYTUxfQVRUUl9VU0VSLCBJbnRlZ2VyLnRvU3RyaW5nKGF1dGhvcml0eS51c2VySWQpKTsKKyAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIFhNTF9BVFRSX1VTRVIsIEludGVnZXIudG9TdHJpbmcoaW5mby51c2VySWQpKTsKICAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIFhNTF9BVFRSX0VOQUJMRUQsIEJvb2xlYW4udG9TdHJpbmcoYXV0aG9yaXR5LmVuYWJsZWQpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5LnNlcnZpY2UgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsICJhY2NvdW50IiwgYXV0aG9yaXR5LmFjY291bnQubmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgInR5cGUiLCBhdXRob3JpdHkuYWNjb3VudC50eXBlKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCAiYXV0aG9yaXR5IiwgYXV0aG9yaXR5LmF1dGhvcml0eSk7CisgICAgICAgICAgICAgICAgaWYgKGluZm8uc2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgImFjY291bnQiLCBpbmZvLmFjY291bnQubmFtZSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgInR5cGUiLCBpbmZvLmFjY291bnQudHlwZSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgImF1dGhvcml0eSIsIGluZm8ucHJvdmlkZXIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgInBhY2thZ2UiLCBhdXRob3JpdHkuc2VydmljZS5nZXRQYWNrYWdlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCAiY2xhc3MiLCBhdXRob3JpdHkuc2VydmljZS5nZXRDbGFzc05hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgInBhY2thZ2UiLCBpbmZvLnNlcnZpY2UuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgImNsYXNzIiwgaW5mby5zZXJ2aWNlLmdldENsYXNzTmFtZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eS5zeW5jYWJsZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCAic3luY2FibGUiLCAidW5rbm93biIpOwpAQCAtMjEwMCw3ICsyMjU1LDcgQEAKIAogICAgICAgICAgICAgLy8gQ29weSBpbiBhbGwgb2YgdGhlIHN0YXR1cyBpbmZvcm1hdGlvbiwgYXMgd2VsbCBhcyBhY2NvdW50cy4KICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUdfRklMRSwgTG9nLlZFUkJPU0UpKSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiUmVhZGluZyBsZWdhY3kgc3luYyBhY2NvdW50cyBkYiIpOworICAgICAgICAgICAgICAgIExvZy52KFRBR19GSUxFLCAiUmVhZGluZyBsZWdhY3kgc3luYyBhY2NvdW50cyBkYiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU1FMaXRlUXVlcnlCdWlsZGVyIHFiID0gbmV3IFNRTGl0ZVF1ZXJ5QnVpbGRlcigpOwogICAgICAgICAgICAgcWIuc2V0VGFibGVzKCJzdGF0cywgc3RhdHVzIik7CkBAIC0yMTM0LDkgKzIyODksMTMgQEAKICAgICAgICAgICAgICAgICAgICAgYWNjb3VudFR5cGUgPSAiY29tLmdvb2dsZSI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFN0cmluZyBhdXRob3JpdHlOYW1lID0gYy5nZXRTdHJpbmcoYy5nZXRDb2x1bW5JbmRleCgiYXV0aG9yaXR5IikpOwotICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gdGhpcy5nZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY2NvdW50KGFjY291bnROYW1lLCBhY2NvdW50VHlwZSksIDAgLyogbGVnYWN5IGlzIHNpbmdsZS11c2VyICovLAotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSwgLTEsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRW5kUG9pbnQobmV3IEFjY291bnQoYWNjb3VudE5hbWUsIGFjY291bnRUeXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogbGVnYWN5IGlzIHNpbmdsZS11c2VyICovKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBpID0gbVN5bmNTdGF0dXMuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CkBAIC0yMTg4LDcgKzIzNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGktLTsKICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbUF1dGhvcml0aWVzLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5LmF1dGhvcml0eS5lcXVhbHMocHJvdmlkZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5LnRhcmdldC5wcm92aWRlci5lcXVhbHMocHJvdmlkZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5LmVuYWJsZWQgPSB2YWx1ZSA9PSBudWxsIHx8IEJvb2xlYW4ucGFyc2VCb29sZWFuKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkuc3luY2FibGUgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjIxMiw3ICsyMzcxLDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgcmVhZFN0YXR1c0xvY2tlZCgpIHsKICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBR19GSUxFLCBMb2cuVkVSQk9TRSkpIHsKLSAgICAgICAgICAgIExvZy52KFRBRywgIlJlYWRpbmcgIiArIG1TdGF0dXNGaWxlLmdldEJhc2VGaWxlKCkpOworICAgICAgICAgICAgTG9nLnYoVEFHX0ZJTEUsICJSZWFkaW5nICIgKyBtU3RhdHVzRmlsZS5nZXRCYXNlRmlsZSgpKTsKICAgICAgICAgfQogICAgICAgICB0cnkgewogICAgICAgICAgICAgYnl0ZVtdIGRhdGEgPSBtU3RhdHVzRmlsZS5yZWFkRnVsbHkoKTsKQEAgLTIyMjYsOCArMjM4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChtQXV0aG9yaXRpZXMuaW5kZXhPZktleShzdGF0dXMuYXV0aG9yaXR5SWQpID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5wZW5kaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHX0ZJTEUsIExvZy5WRVJCT1NFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkFkZGluZyBzdGF0dXMgZm9yIGlkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RhdHVzLmF1dGhvcml0eUlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUdfRklMRSwgIkFkZGluZyBzdGF0dXMgZm9yIGlkICIgKyBzdGF0dXMuYXV0aG9yaXR5SWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdGF0dXMucHV0KHN0YXR1cy5hdXRob3JpdHlJZCwgc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjI0Nyw3ICsyNDA1LDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgd3JpdGVTdGF0dXNMb2NrZWQoKSB7CiAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUdfRklMRSwgTG9nLlZFUkJPU0UpKSB7Ci0gICAgICAgICAgICBMb2cudihUQUcsICJXcml0aW5nIG5ldyAiICsgbVN0YXR1c0ZpbGUuZ2V0QmFzZUZpbGUoKSk7CisgICAgICAgICAgICBMb2cudihUQUdfRklMRSwgIldyaXRpbmcgbmV3ICIgKyBtU3RhdHVzRmlsZS5nZXRCYXNlRmlsZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBmaWxlIGlzIGJlaW5nIHdyaXR0ZW4sIHNvIHdlIGRvbid0IG5lZWQgdG8gaGF2ZSBhIHNjaGVkdWxlZApAQCAtMjI5MCw2ICsyNDQ4LDkgQEAKICAgICAgICAgfQogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmlzID0gbVBlbmRpbmdGaWxlLm9wZW5SZWFkKCk7CisgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHX0ZJTEUsIExvZy5WRVJCT1NFKSkgeworICAgICAgICAgICAgICAgIExvZy52KFRBR19GSUxFLCAiUmVhZGluZyAiICsgbVBlbmRpbmdGaWxlLmdldEJhc2VGaWxlKCkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXI7CiAgICAgICAgICAgICBwYXJzZXIgPSBYbWwubmV3UHVsbFBhcnNlcigpOwogICAgICAgICAgICAgcGFyc2VyLnNldElucHV0KGZpcywgbnVsbCk7CkBAIC0yMzAxLDEyICsyNDYyLDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFhtbFB1bGxQYXJzZXIuRU5EX0RPQ1VNRU5UKSByZXR1cm47IC8vIE5vdGhpbmcgdG8gcmVhZC4KIAotICAgICAgICAgICAgU3RyaW5nIHRhZ05hbWUgPSBwYXJzZXIuZ2V0TmFtZSgpOwogICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgIFBlbmRpbmdPcGVyYXRpb24gcG9wID0gbnVsbDsKICAgICAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YWdOYW1lID0gcGFyc2VyLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YWdOYW1lID0gcGFyc2VyLmdldE5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZXIuZ2V0RGVwdGgoKSA9PSAxICYmICJvcCIuZXF1YWxzKHRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmVyaWZ5IHZlcnNpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZlcnNpb25TdHJpbmcgPQpAQCAtMjMzMSwxOCArMjQ5MSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wID0gbmV3IFBlbmRpbmdPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5LmFjY291bnQsIGF1dGhvcml0eS51c2VySWQsIHJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jU291cmNlLCBhdXRob3JpdHkuYXV0aG9yaXR5LCBuZXcgQnVuZGxlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWRpdGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHksIHJlYXNvbiwgc3luY1NvdXJjZSwgbmV3IEJ1bmRsZSgpLCBleHBlZGl0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3AuZmxhdEV4dHJhcyA9IG51bGw7IC8vIE5vIGxvbmdlciB1c2VkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGVuZGluZ09wZXJhdGlvbnMuYWRkKHBvcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUdfRklMRSwgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUdfRklMRSwgIkFkZGluZyBwZW5kaW5nIG9wOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcG9wLmF1dGhvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBvcC50YXJnZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHNyYz0iICsgcG9wLnN5bmNTb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHJlYXNvbj0iICsgcG9wLnJlYXNvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgZXhwZWRpdGVkPSIgKyBwb3AuZXhwZWRpdGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgbm9uLWV4aXN0ZW50IGF1dGhvcml0eS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wID0gbnVsbDsKQEAgLTIzNzcsMTEgKzI1MzUsNDAgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBwcml2YXRlIGJ5dGVbXSBmbGF0dGVuQnVuZGxlKEJ1bmRsZSBidW5kbGUpIHsKKyAgICAgICAgYnl0ZVtdIGZsYXREYXRhID0gbnVsbDsKKyAgICAgICAgUGFyY2VsIHBhcmNlbCA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGJ1bmRsZS53cml0ZVRvUGFyY2VsKHBhcmNlbCwgMCk7CisgICAgICAgICAgICBmbGF0RGF0YSA9IHBhcmNlbC5tYXJzaGFsbCgpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgcGFyY2VsLnJlY3ljbGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmxhdERhdGE7CisgICAgfQorCisgICAgc3RhdGljIHByaXZhdGUgQnVuZGxlIHVuZmxhdHRlbkJ1bmRsZShieXRlW10gZmxhdERhdGEpIHsKKyAgICAgICAgQnVuZGxlIGJ1bmRsZTsKKyAgICAgICAgUGFyY2VsIHBhcmNlbCA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBhcmNlbC51bm1hcnNoYWxsKGZsYXREYXRhLCAwLCBmbGF0RGF0YS5sZW5ndGgpOworICAgICAgICAgICAgcGFyY2VsLnNldERhdGFQb3NpdGlvbigwKTsKKyAgICAgICAgICAgIGJ1bmRsZSA9IHBhcmNlbC5yZWFkQnVuZGxlKCk7CisgICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gQSBSdW50aW1lRXhjZXB0aW9uIGlzIHRocm93biBpZiB3ZSB3ZXJlIHVuYWJsZSB0byBwYXJzZSB0aGUgcGFyY2VsLgorICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IHBhcmNlbCBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICBidW5kbGUgPSBuZXcgQnVuZGxlKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBwYXJjZWwucmVjeWNsZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidW5kbGU7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9BVFRSX1ZFUlNJT04gPSAidmVyc2lvbiI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9BVFRSX0FVVEhPUklUWUlEID0gImF1dGhvcml0eV9pZCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9BVFRSX1NPVVJDRSA9ICJzb3VyY2UiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfQVRUUl9FWFBFRElURUQgPSAiZXhwZWRpdGVkIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX0FUVFJfUkVBU09OID0gInJlYXNvbiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9BVFRSX1ZFUlNJT04gPSAidmVyc2lvbiI7CiAKICAgICAvKioKICAgICAgKiBXcml0ZSBhbGwgY3VycmVudGx5IHBlbmRpbmcgb3BzIHRvIHRoZSBwZW5kaW5nIG9wcyBmaWxlLgpAQCAtMjM5MSwxNCArMjU3OCwxNCBAQAogICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoTiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBR19GSUxFLCBMb2cuVkVSQk9TRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHX0ZJTEUsICJUcnVuY2F0aW5nICIgKyBtUGVuZGluZ0ZpbGUuZ2V0QmFzZUZpbGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBR19GSUxFLCBMb2cuVkVSQk9TRSkpeworICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJUcnVuY2F0aW5nICIgKyBtUGVuZGluZ0ZpbGUuZ2V0QmFzZUZpbGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1QZW5kaW5nRmlsZS50cnVuY2F0ZSgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUdfRklMRSwgTG9nLlZFUkJPU0UpKSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHX0ZJTEUsICJXcml0aW5nIG5ldyAiICsgbVBlbmRpbmdGaWxlLmdldEJhc2VGaWxlKCkpOworICAgICAgICAgICAgICAgIExvZy52KFRBRywgIldyaXRpbmcgbmV3ICIgKyBtUGVuZGluZ0ZpbGUuZ2V0QmFzZUZpbGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3MgPSBtUGVuZGluZ0ZpbGUuc3RhcnRXcml0ZSgpOwogICAgICAgICAgICAgWG1sU2VyaWFsaXplciBvdXQgPSBuZXcgRmFzdFhtbFNlcmlhbGl6ZXIoKTsKQEAgLTI0MDcsOSArMjU5NCw5IEBACiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgICAgIFBlbmRpbmdPcGVyYXRpb24gcG9wID0gbVBlbmRpbmdPcGVyYXRpb25zLmdldChpKTsKICAgICAgICAgICAgICAgICB3cml0ZVBlbmRpbmdPcGVyYXRpb25Mb2NrZWQocG9wLCBvdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0LmVuZERvY3VtZW50KCk7Ci0gICAgICAgICAgICBtUGVuZGluZ0ZpbGUuZmluaXNoV3JpdGUoZm9zKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgb3V0LmVuZERvY3VtZW50KCk7CisgICAgICAgICAgICAgbVBlbmRpbmdGaWxlLmZpbmlzaFdyaXRlKGZvcyk7CiAgICAgICAgIH0gY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gZTEpIHsKICAgICAgICAgICAgIExvZy53KFRBRywgIkVycm9yIHdyaXRpbmcgcGVuZGluZyBvcGVyYXRpb25zIiwgZTEpOwogICAgICAgICAgICAgaWYgKGZvcyAhPSBudWxsKSB7CkBAIC0yNDY5LDM1ICsyNjU2LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyBwcml2YXRlIGJ5dGVbXSBmbGF0dGVuQnVuZGxlKEJ1bmRsZSBidW5kbGUpIHsKLSAgICAgICAgYnl0ZVtdIGZsYXREYXRhID0gbnVsbDsKLSAgICAgICAgUGFyY2VsIHBhcmNlbCA9IFBhcmNlbC5vYnRhaW4oKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGJ1bmRsZS53cml0ZVRvUGFyY2VsKHBhcmNlbCwgMCk7Ci0gICAgICAgICAgICBmbGF0RGF0YSA9IHBhcmNlbC5tYXJzaGFsbCgpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgcGFyY2VsLnJlY3ljbGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmxhdERhdGE7Ci0gICAgfQotCi0gICAgc3RhdGljIHByaXZhdGUgQnVuZGxlIHVuZmxhdHRlbkJ1bmRsZShieXRlW10gZmxhdERhdGEpIHsKLSAgICAgICAgQnVuZGxlIGJ1bmRsZTsKLSAgICAgICAgUGFyY2VsIHBhcmNlbCA9IFBhcmNlbC5vYnRhaW4oKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHBhcmNlbC51bm1hcnNoYWxsKGZsYXREYXRhLCAwLCBmbGF0RGF0YS5sZW5ndGgpOwotICAgICAgICAgICAgcGFyY2VsLnNldERhdGFQb3NpdGlvbigwKTsKLSAgICAgICAgICAgIGJ1bmRsZSA9IHBhcmNlbC5yZWFkQnVuZGxlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gQSBSdW50aW1lRXhjZXB0aW9uIGlzIHRocm93biBpZiB3ZSB3ZXJlIHVuYWJsZSB0byBwYXJzZSB0aGUgcGFyY2VsLgotICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IHBhcmNlbCBpbiB0aGlzIGNhc2UuCi0gICAgICAgICAgICBidW5kbGUgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBwYXJjZWwucmVjeWNsZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBidW5kbGU7Ci0gICAgfQotCiAgICAgcHJpdmF0ZSB2b2lkIGV4dHJhc1RvWG1sKFhtbFNlcmlhbGl6ZXIgb3V0LCBCdW5kbGUgZXh0cmFzKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7CiAgICAgICAgIGZvciAoU3RyaW5nIGtleSA6IGV4dHJhcy5rZXlTZXQoKSkgewogICAgICAgICAgICAgb3V0LnN0YXJ0VGFnKG51bGwsICJleHRyYSIpOwpAQCAtMjUzMCw2ICsyNjg4LDI0IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgcmVxdWVzdFN5bmMoQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvLCBpbnQgcmVhc29uLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIGlmIChhbmRyb2lkLm9zLlByb2Nlc3MubXlVaWQoKSA9PSBhbmRyb2lkLm9zLlByb2Nlc3MuU1lTVEVNX1VJRAorICAgICAgICAgICAgICAgICYmIG1TeW5jUmVxdWVzdExpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1TeW5jUmVxdWVzdExpc3RlbmVyLm9uU3luY1JlcXVlc3QoYXV0aG9yaXR5SW5mby50YXJnZXQsIHJlYXNvbiwgZXh0cmFzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5bmNSZXF1ZXN0LkJ1aWxkZXIgcmVxID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IFN5bmNSZXF1ZXN0LkJ1aWxkZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zeW5jT25jZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEV4dHJhcyhleHRyYXMpOworICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8udGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgIHJlcS5zZXRTeW5jQWRhcHRlcihhdXRob3JpdHlJbmZvLnRhcmdldC5hY2NvdW50LCBhdXRob3JpdHlJbmZvLnRhcmdldC5wcm92aWRlcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlcS5zZXRTeW5jQWRhcHRlcihhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlci5yZXF1ZXN0U3luYyhyZXEuYnVpbGQoKSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgcmVxdWVzdFN5bmMoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBpbnQgcmVhc29uLCBTdHJpbmcgYXV0aG9yaXR5LAogICAgICAgICAgICAgQnVuZGxlIGV4dHJhcykgewogICAgICAgICAvLyBJZiB0aGlzIGlzIGhhcHBlbmluZyBpbiB0aGUgc3lzdGVtIHByb2Nlc3MsIHRoZW4gY2FsbCB0aGUgc3luY3JlcXVlc3QgbGlzdGVuZXIKQEAgLTI1MzgsNyArMjcxNCwxMCBAQAogICAgICAgICAvLyB3aGljaCB3aWxsIGtub3cgd2hpY2ggdXNlcklkIHRvIGFwcGx5IGJhc2VkIG9uIHRoZSBCaW5kZXIgaWQuCiAgICAgICAgIGlmIChhbmRyb2lkLm9zLlByb2Nlc3MubXlVaWQoKSA9PSBhbmRyb2lkLm9zLlByb2Nlc3MuU1lTVEVNX1VJRAogICAgICAgICAgICAgICAgICYmIG1TeW5jUmVxdWVzdExpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1TeW5jUmVxdWVzdExpc3RlbmVyLm9uU3luY1JlcXVlc3QoYWNjb3VudCwgdXNlcklkLCByZWFzb24sIGF1dGhvcml0eSwgZXh0cmFzKTsKKyAgICAgICAgICAgIG1TeW5jUmVxdWVzdExpc3RlbmVyLm9uU3luY1JlcXVlc3QoCisgICAgICAgICAgICAgICAgbmV3IEVuZFBvaW50KGFjY291bnQsIGF1dGhvcml0eSwgdXNlcklkKSwKKyAgICAgICAgICAgICAgICByZWFzb24sCisgICAgICAgICAgICAgICAgZXh0cmFzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlci5yZXF1ZXN0U3luYyhhY2NvdW50LCBhdXRob3JpdHksIGV4dHJhcyk7CiAgICAgICAgIH0KQEAgLTI2MzQsMTAgKzI4MTMsOCBAQAogICAgIHB1YmxpYyB2b2lkIGR1bXBQZW5kaW5nT3BlcmF0aW9ucyhTdHJpbmdCdWlsZGVyIHNiKSB7CiAgICAgICAgIHNiLmFwcGVuZCgiUGVuZGluZyBPcHM6ICIpLmFwcGVuZChtUGVuZGluZ09wZXJhdGlvbnMuc2l6ZSgpKS5hcHBlbmQoIiBvcGVyYXRpb24ocylcbiIpOwogICAgICAgICBmb3IgKFBlbmRpbmdPcGVyYXRpb24gcG9wIDogbVBlbmRpbmdPcGVyYXRpb25zKSB7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoIigiICsgcG9wLmFjY291bnQpCi0gICAgICAgICAgICAgICAgLmFwcGVuZCgiLCB1IiArIHBvcC51c2VySWQpCi0gICAgICAgICAgICAgICAgLmFwcGVuZCgiLCAiICsgcG9wLmF1dGhvcml0eSkKLSAgICAgICAgICAgICAgICAuYXBwZW5kKCIsICIgKyBwb3AuZXh0cmFzKQorICAgICAgICAgICAgc2IuYXBwZW5kKCIoaW5mbzogIiArIHBvcC50YXJnZXQudG9TdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCIsIGV4dHJhczogIiArIHBvcC5leHRyYXMpCiAgICAgICAgICAgICAgICAgLmFwcGVuZCgiKVxuIik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Rpc3BsYXkvTG9jYWxEaXNwbGF5QWRhcHRlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kaXNwbGF5L0xvY2FsRGlzcGxheUFkYXB0ZXIuamF2YQppbmRleCBjYjhmM2UyLi4wMmJlNDc3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Rpc3BsYXkvTG9jYWxEaXNwbGF5QWRhcHRlci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZGlzcGxheS9Mb2NhbERpc3BsYXlBZGFwdGVyLmphdmEKQEAgLTI2LDcgKzI2LDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheUV2ZW50UmVjZWl2ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VDb250cm9sOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlQ29udHJvbC5QaHlzaWNhbERpc3BsYXlJbmZvOwogCiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIApAQCAtMTY2LDYgKzE2NSwxMiBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoInBvcnRyYWl0Ii5lcXVhbHMoU3lzdGVtUHJvcGVydGllcy5nZXQoInBlcnNpc3QuZGVtby5oZG1pcm90YXRpb24iKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1JbmZvLnJvdGF0aW9uID0gU3VyZmFjZS5ST1RBVElPTl8yNzA7CiAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlcywgYWxsb3cgcm90YXRpb24gb2YgdGhlIGV4dGVybmFsIGRpc3BsYXkKKyAgICAgICAgICAgICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBidWlsdC1pbiBkaXNwbGF5LgorICAgICAgICAgICAgICAgICAgICBpZiAoU3lzdGVtUHJvcGVydGllcy5nZXRCb29sZWFuKCJwZXJzaXN0LmRlbW8uaGRtaXJvdGF0ZXMiLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbmZvLmZsYWdzIHw9IERpc3BsYXlEZXZpY2VJbmZvLkZMQUdfUk9UQVRFU19XSVRIX0NPTlRFTlQ7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbUluZm87CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Rpc3BsYXkvTG9naWNhbERpc3BsYXkuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZGlzcGxheS9Mb2dpY2FsRGlzcGxheS5qYXZhCmluZGV4IDdlMzU3YzAuLmMyNmM0MzggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZGlzcGxheS9Mb2dpY2FsRGlzcGxheS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZGlzcGxheS9Mb2dpY2FsRGlzcGxheS5qYXZhCkBAIC0yNTgsOCArMjU4LDcgQEAKICAgICAgICAgLy8gVGhlIG9yaWVudGF0aW9uIHNwZWNpZmllcyBob3cgdGhlIHBoeXNpY2FsIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBkaXNwbGF5CiAgICAgICAgIC8vIGlzIHJvdGF0ZWQgd2hlbiB0aGUgY29udGVudHMgb2YgdGhlIGxvZ2ljYWwgZGlzcGxheSBhcmUgcmVuZGVyZWQuCiAgICAgICAgIGludCBvcmllbnRhdGlvbiA9IFN1cmZhY2UuUk9UQVRJT05fMDsKLSAgICAgICAgaWYgKGRldmljZSA9PSBtUHJpbWFyeURpc3BsYXlEZXZpY2UKLSAgICAgICAgICAgICAgICAmJiAoZGlzcGxheURldmljZUluZm8uZmxhZ3MgJiBEaXNwbGF5RGV2aWNlSW5mby5GTEFHX1JPVEFURVNfV0lUSF9DT05URU5UKSAhPSAwKSB7CisgICAgICAgIGlmICgoZGlzcGxheURldmljZUluZm8uZmxhZ3MgJiBEaXNwbGF5RGV2aWNlSW5mby5GTEFHX1JPVEFURVNfV0lUSF9DT05URU5UKSAhPSAwKSB7CiAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IGRpc3BsYXlJbmZvLnJvdGF0aW9uOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZmlyZXdhbGwvSW50ZW50RmlyZXdhbGwuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZmlyZXdhbGwvSW50ZW50RmlyZXdhbGwuamF2YQppbmRleCA4OGEyMjA3Li5lYjdhMzgzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2ZpcmV3YWxsL0ludGVudEZpcmV3YWxsLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9maXJld2FsbC9JbnRlbnRGaXJld2FsbC5qYXZhCkBAIC0yNzAsMTEgKzI3MCwxMyBAQAogICAgICAgICB9CiAKICAgICAgICAgRmlsZVtdIGZpbGVzID0gcnVsZXNEaXIubGlzdEZpbGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxmaWxlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgRmlsZSBmaWxlID0gZmlsZXNbaV07CisgICAgICAgIGlmIChmaWxlcyAhPSBudWxsKSB7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8ZmlsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBGaWxlIGZpbGUgPSBmaWxlc1tpXTsKIAotICAgICAgICAgICAgaWYgKGZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIueG1sIikpIHsKLSAgICAgICAgICAgICAgICByZWFkUnVsZXMoZmlsZSwgcmVzb2x2ZXJzKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIi54bWwiKSkgeworICAgICAgICAgICAgICAgICAgICByZWFkUnVsZXMoZmlsZSwgcmVzb2x2ZXJzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9pbnB1dC9JbnB1dE1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2lucHV0L0lucHV0TWFuYWdlclNlcnZpY2UuamF2YQppbmRleCA5MTc4NjY0Li44MjVhMzFkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2lucHV0L0lucHV0TWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2lucHV0L0lucHV0TWFuYWdlclNlcnZpY2UuamF2YQpAQCAtNDYsNiArNDYsNyBAQAogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuaW5wdXQuSUlucHV0RGV2aWNlc0NoYW5nZWRMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmlucHV0LklJbnB1dE1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5pbnB1dC5JbnB1dERldmljZUlkZW50aWZpZXI7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5pbnB1dC5JbnB1dE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5pbnB1dC5LZXlib2FyZExheW91dDsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKQEAgLTM3OCw3ICszNzksNyBAQAogICAgIHB1YmxpYyBpbnQgZ2V0U2NhbkNvZGVTdGF0ZShpbnQgZGV2aWNlSWQsIGludCBzb3VyY2VNYXNrLCBpbnQgc2NhbkNvZGUpIHsKICAgICAgICAgcmV0dXJuIG5hdGl2ZUdldFNjYW5Db2RlU3RhdGUobVB0ciwgZGV2aWNlSWQsIHNvdXJjZU1hc2ssIHNjYW5Db2RlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgc3dpdGNoIGJ5IHN3aXRjaCBjb2RlLgogICAgICAqIEBwYXJhbSBkZXZpY2VJZCBUaGUgaW5wdXQgZGV2aWNlIGlkLCBvciAtMSB0byBjb25zdWx0IGFsbCBkZXZpY2VzLgpAQCAtNDEzLDEwICs0MTQsMTAgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImtleUV4aXN0cyBtdXN0IG5vdCBiZSBudWxsIGFuZCBtdXN0IGJlIGF0ICIKICAgICAgICAgICAgICAgICAgICAgKyAibGVhc3QgYXMgbGFyZ2UgYXMga2V5Q29kZXMuIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5hdGl2ZUhhc0tleXMobVB0ciwgZGV2aWNlSWQsIHNvdXJjZU1hc2ssIGtleUNvZGVzLCBrZXlFeGlzdHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgY2hhbm5lbCB0aGF0IHdpbGwgcmVjZWl2ZSBhbGwgaW5wdXQgZnJvbSB0aGUgaW5wdXQgZGlzcGF0Y2hlci4KICAgICAgKiBAcGFyYW0gaW5wdXRDaGFubmVsTmFtZSBUaGUgaW5wdXQgY2hhbm5lbCBuYW1lLgpAQCAtNDI2LDcgKzQyNyw3IEBACiAgICAgICAgIGlmIChpbnB1dENoYW5uZWxOYW1lID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImlucHV0Q2hhbm5lbE5hbWUgbXVzdCBub3QgYmUgbnVsbC4iKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBJbnB1dENoYW5uZWxbXSBpbnB1dENoYW5uZWxzID0gSW5wdXRDaGFubmVsLm9wZW5JbnB1dENoYW5uZWxQYWlyKGlucHV0Q2hhbm5lbE5hbWUpOwogICAgICAgICBuYXRpdmVSZWdpc3RlcklucHV0Q2hhbm5lbChtUHRyLCBpbnB1dENoYW5uZWxzWzBdLCBudWxsLCB0cnVlKTsKICAgICAgICAgaW5wdXRDaGFubmVsc1swXS5kaXNwb3NlKCk7IC8vIGRvbid0IG5lZWQgdG8gcmV0YWluIHRoZSBKYXZhIG9iamVjdCByZWZlcmVuY2UKQEAgLTQ0NCwxMCArNDQ1LDEwIEBACiAgICAgICAgIGlmIChpbnB1dENoYW5uZWwgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaW5wdXRDaGFubmVsIG11c3Qgbm90IGJlIG51bGwuIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbmF0aXZlUmVnaXN0ZXJJbnB1dENoYW5uZWwobVB0ciwgaW5wdXRDaGFubmVsLCBpbnB1dFdpbmRvd0hhbmRsZSwgZmFsc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFVucmVnaXN0ZXJzIGFuIGlucHV0IGNoYW5uZWwuCiAgICAgICogQHBhcmFtIGlucHV0Q2hhbm5lbCBUaGUgaW5wdXQgY2hhbm5lbCB0byB1bnJlZ2lzdGVyLgpAQCAtNDU2LDcgKzQ1Nyw3IEBACiAgICAgICAgIGlmIChpbnB1dENoYW5uZWwgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaW5wdXRDaGFubmVsIG11c3Qgbm90IGJlIG51bGwuIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbmF0aXZlVW5yZWdpc3RlcklucHV0Q2hhbm5lbChtUHRyLCBpbnB1dENoYW5uZWwpOwogICAgIH0KIApAQCAtODk0LDM1ICs4OTUsNjIgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIEBPdmVycmlkZSAvLyBCaW5kZXIgY2FsbAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q3VycmVudEtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoU3RyaW5nIGlucHV0RGV2aWNlRGVzY3JpcHRvcikgewotICAgICAgICBpZiAoaW5wdXREZXZpY2VEZXNjcmlwdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImlucHV0RGV2aWNlRGVzY3JpcHRvciBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgLyoqCisgICAgICogQnVpbGRzIGEgbGF5b3V0IGRlc2NyaXB0b3IgZm9yIHRoZSB2ZW5kb3IvcHJvZHVjdC4gVGhpcyByZXR1cm5zIHRoZQorICAgICAqIGRlc2NyaXB0b3IgZm9yIGlkcyB0aGF0IGFyZW4ndCB1c2VmdWwgKHN1Y2ggYXMgdGhlIGRlZmF1bHQgMCwgMCkuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TGF5b3V0RGVzY3JpcHRvcihJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllcikgeworICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBudWxsIHx8IGlkZW50aWZpZXIuZ2V0RGVzY3JpcHRvcigpID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImlkZW50aWZpZXIgYW5kIGRlc2NyaXB0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGlkZW50aWZpZXIuZ2V0VmVuZG9ySWQoKSA9PSAwICYmIGlkZW50aWZpZXIuZ2V0UHJvZHVjdElkKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuZ2V0RGVzY3JpcHRvcigpOworICAgICAgICB9CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYm9iID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgYm9iLmFwcGVuZCgidmVuZG9yOiIpLmFwcGVuZChpZGVudGlmaWVyLmdldFZlbmRvcklkKCkpOworICAgICAgICBib2IuYXBwZW5kKCIscHJvZHVjdDoiKS5hcHBlbmQoaWRlbnRpZmllci5nZXRQcm9kdWN0SWQoKSk7CisgICAgICAgIHJldHVybiBib2IudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUgLy8gQmluZGVyIGNhbGwKKyAgICBwdWJsaWMgU3RyaW5nIGdldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyKSB7CisKKyAgICAgICAgU3RyaW5nIGtleSA9IGdldExheW91dERlc2NyaXB0b3IoaWRlbnRpZmllcik7CiAgICAgICAgIHN5bmNocm9uaXplZCAobURhdGFTdG9yZSkgewotICAgICAgICAgICAgcmV0dXJuIG1EYXRhU3RvcmUuZ2V0Q3VycmVudEtleWJvYXJkTGF5b3V0KGlucHV0RGV2aWNlRGVzY3JpcHRvcik7CisgICAgICAgICAgICBTdHJpbmcgbGF5b3V0ID0gbnVsbDsKKyAgICAgICAgICAgIC8vIHRyeSBsb2FkaW5nIGl0IHVzaW5nIHRoZSBsYXlvdXQgZGVzY3JpcHRvciBpZiB3ZSBoYXZlIGl0CisgICAgICAgICAgICBsYXlvdXQgPSBtRGF0YVN0b3JlLmdldEN1cnJlbnRLZXlib2FyZExheW91dChrZXkpOworICAgICAgICAgICAgaWYgKGxheW91dCA9PSBudWxsICYmICFrZXkuZXF1YWxzKGlkZW50aWZpZXIuZ2V0RGVzY3JpcHRvcigpKSkgeworICAgICAgICAgICAgICAgIC8vIGlmIGl0IGRvZXNuJ3QgZXhpc3QgZmFsbCBiYWNrIHRvIHRoZSBkZXZpY2UgZGVzY3JpcHRvcgorICAgICAgICAgICAgICAgIGxheW91dCA9IG1EYXRhU3RvcmUuZ2V0Q3VycmVudEtleWJvYXJkTGF5b3V0KGlkZW50aWZpZXIuZ2V0RGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICJMb2FkZWQga2V5Ym9hcmQgbGF5b3V0IGlkIGZvciAiICsga2V5ICsgIiBhbmQgZ290ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgbGF5b3V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUgLy8gQmluZGVyIGNhbGwKLSAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50S2V5Ym9hcmRMYXlvdXRGb3JJbnB1dERldmljZShTdHJpbmcgaW5wdXREZXZpY2VEZXNjcmlwdG9yLAorICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyLAogICAgICAgICAgICAgU3RyaW5nIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvcikgewogICAgICAgICBpZiAoIWNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLlNFVF9LRVlCT0FSRF9MQVlPVVQsCiAgICAgICAgICAgICAgICAgInNldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKCkiKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJSZXF1aXJlcyBTRVRfS0VZQk9BUkRfTEFZT1VUIHBlcm1pc3Npb24iKTsKICAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXREZXZpY2VEZXNjcmlwdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImlucHV0RGV2aWNlRGVzY3JpcHRvciBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJrZXlib2FyZExheW91dERlc2NyaXB0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKKyAgICAgICAgU3RyaW5nIGtleSA9IGdldExheW91dERlc2NyaXB0b3IoaWRlbnRpZmllcik7CiAgICAgICAgIHN5bmNocm9uaXplZCAobURhdGFTdG9yZSkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBpZiAobURhdGFTdG9yZS5zZXRDdXJyZW50S2V5Ym9hcmRMYXlvdXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dERldmljZURlc2NyaXB0b3IsIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAobURhdGFTdG9yZS5zZXRDdXJyZW50S2V5Ym9hcmRMYXlvdXQoa2V5LCBrZXlib2FyZExheW91dERlc2NyaXB0b3IpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy5kKFRBRywgIlNhdmVkIGtleWJvYXJkIGxheW91dCB1c2luZyAiICsga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBtSGFuZGxlci5zZW5kRW1wdHlNZXNzYWdlKE1TR19SRUxPQURfS0VZQk9BUkRfTEFZT1VUUyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTkzMiwzNiArOTYwLDM5IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlIC8vIEJpbmRlciBjYWxsCi0gICAgcHVibGljIFN0cmluZ1tdIGdldEtleWJvYXJkTGF5b3V0c0ZvcklucHV0RGV2aWNlKFN0cmluZyBpbnB1dERldmljZURlc2NyaXB0b3IpIHsKLSAgICAgICAgaWYgKGlucHV0RGV2aWNlRGVzY3JpcHRvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnB1dERldmljZURlc2NyaXB0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwotICAgICAgICB9Ci0KKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0S2V5Ym9hcmRMYXlvdXRzRm9ySW5wdXREZXZpY2UoSW5wdXREZXZpY2VJZGVudGlmaWVyIGlkZW50aWZpZXIpIHsKKyAgICAgICAgU3RyaW5nIGtleSA9IGdldExheW91dERlc2NyaXB0b3IoaWRlbnRpZmllcik7CiAgICAgICAgIHN5bmNocm9uaXplZCAobURhdGFTdG9yZSkgewotICAgICAgICAgICAgcmV0dXJuIG1EYXRhU3RvcmUuZ2V0S2V5Ym9hcmRMYXlvdXRzKGlucHV0RGV2aWNlRGVzY3JpcHRvcik7CisgICAgICAgICAgICBTdHJpbmdbXSBsYXlvdXRzID0gbURhdGFTdG9yZS5nZXRLZXlib2FyZExheW91dHMoa2V5KTsKKyAgICAgICAgICAgIGlmICgobGF5b3V0cyA9PSBudWxsIHx8IGxheW91dHMubGVuZ3RoID09IDApCisgICAgICAgICAgICAgICAgICAgICYmICFrZXkuZXF1YWxzKGlkZW50aWZpZXIuZ2V0RGVzY3JpcHRvcigpKSkgeworICAgICAgICAgICAgICAgIGxheW91dHMgPSBtRGF0YVN0b3JlLmdldEtleWJvYXJkTGF5b3V0cyhpZGVudGlmaWVyLmdldERlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbGF5b3V0czsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZSAvLyBCaW5kZXIgY2FsbAotICAgIHB1YmxpYyB2b2lkIGFkZEtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoU3RyaW5nIGlucHV0RGV2aWNlRGVzY3JpcHRvciwKKyAgICBwdWJsaWMgdm9pZCBhZGRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyLAogICAgICAgICAgICAgU3RyaW5nIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvcikgewogICAgICAgICBpZiAoIWNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLlNFVF9LRVlCT0FSRF9MQVlPVVQsCiAgICAgICAgICAgICAgICAgImFkZEtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoKSIpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIlJlcXVpcmVzIFNFVF9LRVlCT0FSRF9MQVlPVVQgcGVybWlzc2lvbiIpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dERldmljZURlc2NyaXB0b3IgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaW5wdXREZXZpY2VEZXNjcmlwdG9yIG11c3Qgbm90IGJlIG51bGwiKTsKLSAgICAgICAgfQogICAgICAgICBpZiAoa2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciBtdXN0IG5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KIAorICAgICAgICBTdHJpbmcga2V5ID0gZ2V0TGF5b3V0RGVzY3JpcHRvcihpZGVudGlmaWVyKTsKICAgICAgICAgc3luY2hyb25pemVkIChtRGF0YVN0b3JlKSB7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIFN0cmluZyBvbGRMYXlvdXQgPSBtRGF0YVN0b3JlLmdldEN1cnJlbnRLZXlib2FyZExheW91dChpbnB1dERldmljZURlc2NyaXB0b3IpOwotICAgICAgICAgICAgICAgIGlmIChtRGF0YVN0b3JlLmFkZEtleWJvYXJkTGF5b3V0KGlucHV0RGV2aWNlRGVzY3JpcHRvciwga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIFN0cmluZyBvbGRMYXlvdXQgPSBtRGF0YVN0b3JlLmdldEN1cnJlbnRLZXlib2FyZExheW91dChrZXkpOworICAgICAgICAgICAgICAgIGlmIChvbGRMYXlvdXQgPT0gbnVsbCAmJiAha2V5LmVxdWFscyhpZGVudGlmaWVyLmdldERlc2NyaXB0b3IoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb2xkTGF5b3V0ID0gbURhdGFTdG9yZS5nZXRDdXJyZW50S2V5Ym9hcmRMYXlvdXQoaWRlbnRpZmllci5nZXREZXNjcmlwdG9yKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobURhdGFTdG9yZS5hZGRLZXlib2FyZExheW91dChrZXksIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvcikKICAgICAgICAgICAgICAgICAgICAgICAgICYmICFPYmplY3RzLmVxdWFsKG9sZExheW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURhdGFTdG9yZS5nZXRDdXJyZW50S2V5Ym9hcmRMYXlvdXQoaW5wdXREZXZpY2VEZXNjcmlwdG9yKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURhdGFTdG9yZS5nZXRDdXJyZW50S2V5Ym9hcmRMYXlvdXQoa2V5KSkpIHsKICAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIuc2VuZEVtcHR5TWVzc2FnZShNU0dfUkVMT0FEX0tFWUJPQVJEX0xBWU9VVFMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZmluYWxseSB7CkBAIC05NzEsMjYgKzEwMDIsMzEgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUgLy8gQmluZGVyIGNhbGwKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKFN0cmluZyBpbnB1dERldmljZURlc2NyaXB0b3IsCisgICAgcHVibGljIHZvaWQgcmVtb3ZlS2V5Ym9hcmRMYXlvdXRGb3JJbnB1dERldmljZShJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllciwKICAgICAgICAgICAgIFN0cmluZyBrZXlib2FyZExheW91dERlc2NyaXB0b3IpIHsKICAgICAgICAgaWYgKCFjaGVja0NhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5TRVRfS0VZQk9BUkRfTEFZT1VULAogICAgICAgICAgICAgICAgICJyZW1vdmVLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKCkiKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJSZXF1aXJlcyBTRVRfS0VZQk9BUkRfTEFZT1VUIHBlcm1pc3Npb24iKTsKICAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXREZXZpY2VEZXNjcmlwdG9yID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImlucHV0RGV2aWNlRGVzY3JpcHRvciBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJrZXlib2FyZExheW91dERlc2NyaXB0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKKyAgICAgICAgU3RyaW5nIGtleSA9IGdldExheW91dERlc2NyaXB0b3IoaWRlbnRpZmllcik7CiAgICAgICAgIHN5bmNocm9uaXplZCAobURhdGFTdG9yZSkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgb2xkTGF5b3V0ID0gbURhdGFTdG9yZS5nZXRDdXJyZW50S2V5Ym9hcmRMYXlvdXQoaW5wdXREZXZpY2VEZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICBpZiAobURhdGFTdG9yZS5yZW1vdmVLZXlib2FyZExheW91dChpbnB1dERldmljZURlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXlib2FyZExheW91dERlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAhT2JqZWN0cy5lcXVhbChvbGRMYXlvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EYXRhU3RvcmUuZ2V0Q3VycmVudEtleWJvYXJkTGF5b3V0KGlucHV0RGV2aWNlRGVzY3JpcHRvcikpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG9sZExheW91dCA9IG1EYXRhU3RvcmUuZ2V0Q3VycmVudEtleWJvYXJkTGF5b3V0KGtleSk7CisgICAgICAgICAgICAgICAgaWYgKG9sZExheW91dCA9PSBudWxsICYmICFrZXkuZXF1YWxzKGlkZW50aWZpZXIuZ2V0RGVzY3JpcHRvcigpKSkgeworICAgICAgICAgICAgICAgICAgICBvbGRMYXlvdXQgPSBtRGF0YVN0b3JlLmdldEN1cnJlbnRLZXlib2FyZExheW91dChpZGVudGlmaWVyLmdldERlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVtb3ZlZCA9IG1EYXRhU3RvcmUucmVtb3ZlS2V5Ym9hcmRMYXlvdXQoa2V5LCBrZXlib2FyZExheW91dERlc2NyaXB0b3IpOworICAgICAgICAgICAgICAgIGlmICgha2V5LmVxdWFscyhpZGVudGlmaWVyLmdldERlc2NyaXB0b3IoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgZnJvbSBib3RoIHBsYWNlcyB0byBlbnN1cmUgaXQgaXMgZ29uZQorICAgICAgICAgICAgICAgICAgICByZW1vdmVkIHw9IG1EYXRhU3RvcmUucmVtb3ZlS2V5Ym9hcmRMYXlvdXQoaWRlbnRpZmllci5nZXREZXNjcmlwdG9yKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJlbW92ZWQgJiYgIU9iamVjdHMuZXF1YWwob2xkTGF5b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGF0YVN0b3JlLmdldEN1cnJlbnRLZXlib2FyZExheW91dChrZXkpKSkgewogICAgICAgICAgICAgICAgICAgICBtSGFuZGxlci5zZW5kRW1wdHlNZXNzYWdlKE1TR19SRUxPQURfS0VZQk9BUkRfTEFZT1VUUyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTEwMDcsMTQgKzEwNDMsMTUgQEAKICAgICBwcml2YXRlIHZvaWQgaGFuZGxlU3dpdGNoS2V5Ym9hcmRMYXlvdXQoaW50IGRldmljZUlkLCBpbnQgZGlyZWN0aW9uKSB7CiAgICAgICAgIGZpbmFsIElucHV0RGV2aWNlIGRldmljZSA9IGdldElucHV0RGV2aWNlKGRldmljZUlkKTsKICAgICAgICAgaWYgKGRldmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgaW5wdXREZXZpY2VEZXNjcmlwdG9yID0gZGV2aWNlLmdldERlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gY2hhbmdlZDsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBrZXlib2FyZExheW91dERlc2NyaXB0b3I7CisKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBnZXRMYXlvdXREZXNjcmlwdG9yKGRldmljZS5nZXRJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgc3luY2hyb25pemVkIChtRGF0YVN0b3JlKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IG1EYXRhU3RvcmUuc3dpdGNoS2V5Ym9hcmRMYXlvdXQoaW5wdXREZXZpY2VEZXNjcmlwdG9yLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gbURhdGFTdG9yZS5zd2l0Y2hLZXlib2FyZExheW91dChrZXksIGRpcmVjdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciA9IG1EYXRhU3RvcmUuZ2V0Q3VycmVudEtleWJvYXJkTGF5b3V0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RGV2aWNlRGVzY3JpcHRvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5KTsKICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICAgICBtRGF0YVN0b3JlLnNhdmVJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTEwNDIsMTEgKzEwNzksMTEgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRJbnB1dFdpbmRvd3MoSW5wdXRXaW5kb3dIYW5kbGVbXSB3aW5kb3dIYW5kbGVzKSB7CiAgICAgICAgIG5hdGl2ZVNldElucHV0V2luZG93cyhtUHRyLCB3aW5kb3dIYW5kbGVzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRGb2N1c2VkQXBwbGljYXRpb24oSW5wdXRBcHBsaWNhdGlvbkhhbmRsZSBhcHBsaWNhdGlvbikgewogICAgICAgICBuYXRpdmVTZXRGb2N1c2VkQXBwbGljYXRpb24obVB0ciwgYXBwbGljYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldElucHV0RGlzcGF0Y2hNb2RlKGJvb2xlYW4gZW5hYmxlZCwgYm9vbGVhbiBmcm96ZW4pIHsKICAgICAgICAgbmF0aXZlU2V0SW5wdXREaXNwYXRjaE1vZGUobVB0ciwgZW5hYmxlZCwgZnJvemVuKTsKICAgICB9CkBAIC0xNDI2LDEzICsxNDYzLDEyIEBACiAgICAgfQogCiAgICAgLy8gTmF0aXZlIGNhbGxiYWNrLgotICAgIHByaXZhdGUgU3RyaW5nW10gZ2V0S2V5Ym9hcmRMYXlvdXRPdmVybGF5KFN0cmluZyBpbnB1dERldmljZURlc2NyaXB0b3IpIHsKKyAgICBwcml2YXRlIFN0cmluZ1tdIGdldEtleWJvYXJkTGF5b3V0T3ZlcmxheShJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllcikgewogICAgICAgICBpZiAoIW1TeXN0ZW1SZWFkeSkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KIAotICAgICAgICBTdHJpbmcga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yID0gZ2V0Q3VycmVudEtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoCi0gICAgICAgICAgICAgICAgaW5wdXREZXZpY2VEZXNjcmlwdG9yKTsKKyAgICAgICAgU3RyaW5nIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciA9IGdldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKGlkZW50aWZpZXIpOwogICAgICAgICBpZiAoa2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0NvbXByZWhlbnNpdmVDb3VudHJ5RGV0ZWN0b3IuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vQ29tcHJlaGVuc2l2ZUNvdW50cnlEZXRlY3Rvci5qYXZhCmluZGV4IDM1NDg1OGIuLjYxMTdhOWIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vQ29tcHJlaGVuc2l2ZUNvdW50cnlEZXRlY3Rvci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vQ29tcHJlaGVuc2l2ZUNvdW50cnlEZXRlY3Rvci5qYXZhCkBAIC0yNiw3ICsyNiw2IEBACiBpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuU2VydmljZVN0YXRlOwogaW1wb3J0IGFuZHJvaWQudGVsZXBob255LlRlbGVwaG9ueU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogCiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vR2VvY29kZXJQcm94eS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9HZW9jb2RlclByb3h5LmphdmEKaW5kZXggNWQ0YTc3MC4uNDIyYjk0YiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9HZW9jb2RlclByb3h5LmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9HZW9jb2RlclByb3h5LmphdmEKQEAgLTIyLDcgKzIyLDYgQEAKIGltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLklHZW9jb2RlUHJvdmlkZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLlNlcnZpY2VXYXRjaGVyOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9HZW9mZW5jZVByb3h5LmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dlb2ZlbmNlUHJveHkuamF2YQppbmRleCBiYmMxZjQ3Li5iODg2ZWVmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dlb2ZlbmNlUHJveHkuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dlb2ZlbmNlUHJveHkuamF2YQpAQCAtMzIsOCArMzIsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLlNlcnZpY2VXYXRjaGVyOwogCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KIC8qKgogICogQGhpZGUKICAqLwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9HcHNMb2NhdGlvblByb3ZpZGVyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dwc0xvY2F0aW9uUHJvdmlkZXIuamF2YQppbmRleCA5Yzc2YzE5Li5jNmNmNjhmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dwc0xvY2F0aW9uUHJvdmlkZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dwc0xvY2F0aW9uUHJvdmlkZXIuamF2YQpAQCAtNzkxLDYgKzc5MSw3IEBACiAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZURpc2FibGUoKSB7CiAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiaGFuZGxlRGlzYWJsZSIpOwogCisgICAgICAgIHVwZGF0ZUNsaWVudFVpZHMobmV3IFdvcmtTb3VyY2UoKSk7CiAgICAgICAgIHN0b3BOYXZpZ2F0aW5nKCk7CiAgICAgICAgIG1BbGFybU1hbmFnZXIuY2FuY2VsKG1XYWtldXBJbnRlbnQpOwogICAgICAgICBtQWxhcm1NYW5hZ2VyLmNhbmNlbChtVGltZW91dEludGVudCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dwc1h0cmFEb3dubG9hZGVyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dwc1h0cmFEb3dubG9hZGVyLmphdmEKaW5kZXggZTQyMDA3My4uOWRlZGIzNWQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vR3BzWHRyYURvd25sb2FkZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dwc1h0cmFEb3dubG9hZGVyLmphdmEKQEAgLTI1LDcgKzI1LDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cEhvc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBSZXNwb25zZTsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuU3RhdHVzTGluZTsKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lkh0dHBDbGllbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBHZXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBVcmlSZXF1ZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jb25uLnBhcmFtcy5Db25uUm91dGVQYXJhbXM7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0xvY2F0aW9uRnVkZ2VyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0xvY2F0aW9uRnVkZ2VyLmphdmEKaW5kZXggMmE2ODc0My4uYWU3MWZlMyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Mb2NhdGlvbkZ1ZGdlci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vTG9jYXRpb25GdWRnZXIuamF2YQpAQCAtMjIsMTAgKzIyLDcgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IGFuZHJvaWQubG9jYXRpb24uTG9jYXRpb25NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0xvY2F0aW9uUHJvdmlkZXJQcm94eS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Mb2NhdGlvblByb3ZpZGVyUHJveHkuamF2YQppbmRleCAxNGRiODYyLi41ZWIwNmVkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0xvY2F0aW9uUHJvdmlkZXJQcm94eS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vTG9jYXRpb25Qcm92aWRlclByb3h5LmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQubG9jYXRpb24uTG9jYXRpb25Qcm92aWRlcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vTW9ja1Byb3ZpZGVyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL01vY2tQcm92aWRlci5qYXZhCmluZGV4IDM2YzQzZmYuLjg1Nzg3NjEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vTW9ja1Byb3ZpZGVyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Nb2NrUHJvdmlkZXIuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5sb2NhdGlvbjsKIAotaW1wb3J0IGFuZHJvaWQubG9jYXRpb24uQ3JpdGVyaWE7CiBpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5JTG9jYXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubG9jYXRpb24uTG9jYXRpb247CiBpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvblByb3ZpZGVyOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1N0YXRzU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1N0YXRzU2VydmljZS5qYXZhCmluZGV4IDVkNmFkYzIuLjI3MWU5ZTkgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtTdGF0c1NlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25ldC9OZXR3b3JrU3RhdHNTZXJ2aWNlLmphdmEKQEAgLTQ2NCwyMSArNDY0LDIxIEBACiAgICAgICAgICAgICBwcml2YXRlIE5ldHdvcmtTdGF0c0NvbGxlY3Rpb24gbVVpZFRhZ0NvbXBsZXRlOwogCiAgICAgICAgICAgICBwcml2YXRlIE5ldHdvcmtTdGF0c0NvbGxlY3Rpb24gZ2V0VWlkQ29tcGxldGUoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1VaWRDb21wbGV0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRzTG9jaykgeworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRzTG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAobVVpZENvbXBsZXRlID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1VaWRDb21wbGV0ZSA9IG1VaWRSZWNvcmRlci5nZXRPckxvYWRDb21wbGV0ZUxvY2tlZCgpOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtVWlkQ29tcGxldGU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBtVWlkQ29tcGxldGU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHByaXZhdGUgTmV0d29ya1N0YXRzQ29sbGVjdGlvbiBnZXRVaWRUYWdDb21wbGV0ZSgpIHsKLSAgICAgICAgICAgICAgICBpZiAobVVpZFRhZ0NvbXBsZXRlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdHNMb2NrKSB7CisgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdHNMb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtVWlkVGFnQ29tcGxldGUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbVVpZFRhZ0NvbXBsZXRlID0gbVVpZFRhZ1JlY29yZGVyLmdldE9yTG9hZENvbXBsZXRlTG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1VaWRUYWdDb21wbGV0ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1VaWRUYWdDb21wbGV0ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25NYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTWFuYWdlclNlcnZpY2UuamF2YQppbmRleCBkYjRjZjMxZC4uZTRlYTAzMyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25NYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0xMDQ1LDggKzEwNDUsOCBAQAogICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEludGVudC5BQ1RJT05fU0NSRUVOX09GRikpIHsKICAgICAgICAgICAgICAgICBtU2NyZWVuT24gPSBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhUZWxlcGhvbnlNYW5hZ2VyLkFDVElPTl9QSE9ORV9TVEFURV9DSEFOR0VEKSkgewotICAgICAgICAgICAgICAgIG1JbkNhbGwgPSAoaW50ZW50LmdldFN0cmluZ0V4dHJhKFRlbGVwaG9ueU1hbmFnZXIuRVhUUkFfU1RBVEUpLmVxdWFscygKLSAgICAgICAgICAgICAgICAgICAgICAgIFRlbGVwaG9ueU1hbmFnZXIuRVhUUkFfU1RBVEVfT0ZGSE9PSykpOworICAgICAgICAgICAgICAgIG1JbkNhbGwgPSBUZWxlcGhvbnlNYW5hZ2VyLkVYVFJBX1NUQVRFX09GRkhPT0sKKyAgICAgICAgICAgICAgICAgICAgICAgIC5lcXVhbHMoaW50ZW50LmdldFN0cmluZ0V4dHJhKFRlbGVwaG9ueU1hbmFnZXIuRVhUUkFfU1RBVEUpKTsKICAgICAgICAgICAgICAgICB1cGRhdGVOb3RpZmljYXRpb25QdWxzZSgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEludGVudC5BQ1RJT05fVVNFUl9TVE9QUEVEKSkgewogICAgICAgICAgICAgICAgIGludCB1c2VySGFuZGxlID0gaW50ZW50LmdldEludEV4dHJhKEludGVudC5FWFRSQV9VU0VSX0hBTkRMRSwgLTEpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9LZXlTZXRNYW5hZ2VyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL0tleVNldE1hbmFnZXIuamF2YQppbmRleCA2NmRjMWQxLi4xMDU2Y2QwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL0tleVNldE1hbmFnZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL0tleVNldE1hbmFnZXIuamF2YQpAQCAtMjAsMTMgKzIwLDExIEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VQYXJzZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkJhc2U2NDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb25nU3BhcnNlQXJyYXk7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5QdWJsaWNLZXk7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlS2V5U2V0RGF0YS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlS2V5U2V0RGF0YS5qYXZhCmluZGV4IGNiNjA2MjEuLmViZGVkMjggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZUtleVNldERhdGEuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VLZXlTZXREYXRhLmphdmEKQEAgLTE4LDkgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiBwdWJsaWMgY2xhc3MgUGFja2FnZUtleVNldERhdGEgewogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlTWFuYWdlclNlcnZpY2UuamF2YQppbmRleCBlY2NjM2NmLi4xZWI1NDVmIDEwMDc1NQotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZU1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTIxOSw2ICsyMTksNyBAQAogICAgIHN0YXRpYyBmaW5hbCBpbnQgU0NBTl9VUERBVEVfVElNRSA9IDE8PDY7CiAgICAgc3RhdGljIGZpbmFsIGludCBTQ0FOX0RFRkVSX0RFWCA9IDE8PDc7CiAgICAgc3RhdGljIGZpbmFsIGludCBTQ0FOX0JPT1RJTkcgPSAxPDw4OworICAgIHN0YXRpYyBmaW5hbCBpbnQgU0NBTl9ERUxFVEVfREFUQV9PTl9GQUlMVVJFUyA9IDE8PDk7CiAKICAgICBzdGF0aWMgZmluYWwgaW50IFJFTU9WRV9DSEFUVFkgPSAxPDwxNjsKIApAQCAtMzMzLDcgKzMzNCw2IEBACiAgICAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsIFBhY2thZ2VQYXJzZXIuUGFja2FnZT4oKTsKIAogICAgIC8vIEluZm9ybWF0aW9uIGZvciB0aGUgcGFyc2VyIHRvIHdyaXRlIG1vcmUgdXNlZnVsIGVycm9yIG1lc3NhZ2VzLgotICAgIEZpbGUgbVNjYW5uaW5nUGF0aDsKICAgICBpbnQgbUxhc3RTY2FuRXJyb3I7CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MTQzLDcgKzQxNDMsNiBAQAogICAgICAgICAgICAgbUxhc3RTY2FuRXJyb3IgPSBQYWNrYWdlTWFuYWdlci5JTlNUQUxMX0ZBSUxFRF9JTlZBTElEX0FQSzsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIG1TY2FubmluZ1BhdGggPSBzY2FuRmlsZTsKIAogICAgICAgICBpZiAoKHBhcnNlRmxhZ3MmUGFja2FnZVBhcnNlci5QQVJTRV9JU19TWVNURU0pICE9IDApIHsKICAgICAgICAgICAgIHBrZy5hcHBsaWNhdGlvbkluZm8uZmxhZ3MgfD0gQXBwbGljYXRpb25JbmZvLkZMQUdfU1lTVEVNOwpAQCAtNDE2Myw3ICs0MTYyLDcgQEAKICAgICAgICAgICAgICAgICBpZiAobUFuZHJvaWRBcHBsaWNhdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CiAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJDb3JlIGFuZHJvaWQgcGFja2FnZSBiZWluZyByZWRlZmluZWQuICBTa2lwcGluZy4iKTsKLSAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIiBmaWxlPSIgKyBtU2Nhbm5pbmdQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIiBmaWxlPSIgKyBzY2FuRmlsZSk7CiAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CiAgICAgICAgICAgICAgICAgICAgIG1MYXN0U2NhbkVycm9yID0gUGFja2FnZU1hbmFnZXIuSU5TVEFMTF9GQUlMRURfRFVQTElDQVRFX1BBQ0tBR0U7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNDY0Myw2ICs0NjQyLDEwIEBACiAgICAgICAgIGlmICgoc2Nhbk1vZGUmU0NBTl9OT19ERVgpID09IDApIHsKICAgICAgICAgICAgIGlmIChwZXJmb3JtRGV4T3B0TEkocGtnLCBmb3JjZURleCwgKHNjYW5Nb2RlJlNDQU5fREVGRVJfREVYKSAhPSAwLCBmYWxzZSkKICAgICAgICAgICAgICAgICAgICAgPT0gREVYX09QVF9GQUlMRUQpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHNjYW5Nb2RlICYgU0NBTl9ERUxFVEVfREFUQV9PTl9GQUlMVVJFUykgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICByZW1vdmVEYXRhRGlyc0xJKHBrZy5wYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgbUxhc3RTY2FuRXJyb3IgPSBQYWNrYWdlTWFuYWdlci5JTlNUQUxMX0ZBSUxFRF9ERVhPUFQ7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CkBAIC00NzIwLDYgKzQ3MjMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgUGFja2FnZVBhcnNlci5QYWNrYWdlIGNsaWVudFBrZyA9IGNsaWVudExpYlBrZ3MuZ2V0KGkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGVyZm9ybURleE9wdExJKGNsaWVudFBrZywgZm9yY2VEZXgsIChzY2FuTW9kZSZTQ0FOX0RFRkVSX0RFWCkgIT0gMCwgZmFsc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gREVYX09QVF9GQUlMRUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2Nhbk1vZGUgJiBTQ0FOX0RFTEVURV9EQVRBX09OX0ZBSUxVUkVTKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRGF0YURpcnNMSShwa2cucGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgICAgICBtTGFzdFNjYW5FcnJvciA9IFBhY2thZ2VNYW5hZ2VyLklOU1RBTExfRkFJTEVEX0RFWE9QVDsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC00OTkwLDggKzQ5OTcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc2NhcmQgdGhlIHByZXZpb3VzIGRlY2xhcmF0aW9uIGFuZCBjb25zaWRlciB0aGUgc3lzdGVtJ3MgdG8gYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5vbmljYWwuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3lzdGVtQXBwKHAub3duZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cuaShUQUcsICJOZXcgZGVjbCAiICsgcC5vd25lciArICIgb2YgcGVybWlzc2lvbiAgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcC5pbmZvLm5hbWUgKyAiIGlzIHN5c3RlbSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbXNnID0gIk5ldyBkZWNsICIgKyBwLm93bmVyICsgIiBvZiBwZXJtaXNzaW9uICAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwLmluZm8ubmFtZSArICIgaXMgc3lzdGVtIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0U2V0dGluZ3NQcm9ibGVtKExvZy5XQVJOLCBtc2cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicC5zb3VyY2VQYWNrYWdlID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC05MDc3LDcgKzkwODUsNyBAQAogICAgICAgICAgICAgcmVwbGFjZVBhY2thZ2VMSShwa2csIHBhcnNlRmxhZ3MsIHNjYW5Nb2RlLCBhcmdzLnVzZXIsCiAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlclBhY2thZ2VOYW1lLCByZXMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW5zdGFsbE5ld1BhY2thZ2VMSShwa2csIHBhcnNlRmxhZ3MsIHNjYW5Nb2RlLCBhcmdzLnVzZXIsCisgICAgICAgICAgICBpbnN0YWxsTmV3UGFja2FnZUxJKHBrZywgcGFyc2VGbGFncywgc2Nhbk1vZGUgfCBTQ0FOX0RFTEVURV9EQVRBX09OX0ZBSUxVUkVTLCBhcmdzLnVzZXIsCiAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlclBhY2thZ2VOYW1lLCByZXMpOwogICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VTZXR0aW5nQmFzZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlU2V0dGluZ0Jhc2UuamF2YQppbmRleCA3NzQ3YzhmLi4yYTU2OThiOSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlU2V0dGluZ0Jhc2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VTZXR0aW5nQmFzZS5qYXZhCkBAIC0yMCwxNCArMjAsMTEgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRU5BQkxFRDsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VVc2VyU3RhdGU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlVzZXJJbmZvOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCiAgKiBTZXR0aW5ncyBiYXNlIGNsYXNzIGZvciBwZW5kaW5nIGFuZCByZXNvbHZlZCBjbGFzc2VzLgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9TRUxpbnV4TU1BQy5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9TRUxpbnV4TU1BQy5qYXZhCmluZGV4IDFkNjhhZmEuLjZlMTJlNDEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vU0VMaW51eE1NQUMuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1NFTGludXhNTUFDLmphdmEKQEAgLTI2LDcgKzI2LDYgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlhtbFV0aWxzOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9TZXR0aW5ncy5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9TZXR0aW5ncy5qYXZhCmluZGV4IGU1OTk0MDkuLmFlNzIyODAzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1NldHRpbmdzLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9TZXR0aW5ncy5qYXZhCkBAIC00NSw3ICs0NSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Db21wb25lbnRJbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5LZXlTZXQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VDbGVhbkl0ZW07CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlUGFyc2VyOwpAQCAtNjAsNyArNTksNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9uZ1NwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuWG1sOwpAQCAtNzEsNyArNjksNiBAQAogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5QdWJsaWNLZXk7CiBpbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb3dlci9Qb3dlck1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3Bvd2VyL1Bvd2VyTWFuYWdlclNlcnZpY2UuamF2YQppbmRleCA3ZjAzY2MwLi4zNjkyZDc2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3Bvd2VyL1Bvd2VyTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3Bvd2VyL1Bvd2VyTWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMTgzMCw5ICsxODMwLDEwIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogTG93LWxldmVsIGZ1bmN0aW9uIHRvIHJlYm9vdCB0aGUgZGV2aWNlLiBPbiBzdWNjZXNzLCB0aGlzIGZ1bmN0aW9uCi0gICAgICogZG9lc24ndCByZXR1cm4uIElmIG1vcmUgdGhhbiA1IHNlY29uZHMgcGFzc2VzIGZyb20gdGhlIHRpbWUsCi0gICAgICogYSByZWJvb3QgaXMgcmVxdWVzdGVkLCB0aGlzIG1ldGhvZCByZXR1cm5zLgorICAgICAqIExvdy1sZXZlbCBmdW5jdGlvbiB0byByZWJvb3QgdGhlIGRldmljZS4gT24gc3VjY2VzcywgdGhpcworICAgICAqIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuLiBJZiBtb3JlIHRoYW4gMjAgc2Vjb25kcyBwYXNzZXMgZnJvbQorICAgICAqIHRoZSB0aW1lIGEgcmVib290IGlzIHJlcXVlc3RlZCAoMTIwIHNlY29uZHMgZm9yIHJlYm9vdCB0bworICAgICAqIHJlY292ZXJ5KSwgdGhpcyBtZXRob2QgcmV0dXJucy4KICAgICAgKgogICAgICAqIEBwYXJhbSByZWFzb24gY29kZSB0byBwYXNzIHRvIHRoZSBrZXJuZWwgKGUuZy4gInJlY292ZXJ5IiksIG9yIG51bGwuCiAgICAgICovCkBAIC0xODQwLDkgKzE4NDEsMjQgQEAKICAgICAgICAgaWYgKHJlYXNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICByZWFzb24gPSAiIjsKICAgICAgICAgfQotICAgICAgICBTeXN0ZW1Qcm9wZXJ0aWVzLnNldCgic3lzLnBvd2VyY3RsIiwgInJlYm9vdCwiICsgcmVhc29uKTsKKyAgICAgICAgbG9uZyBkdXJhdGlvbjsKKyAgICAgICAgaWYgKHJlYXNvbi5lcXVhbHMoUG93ZXJNYW5hZ2VyLlJFQk9PVF9SRUNPVkVSWSkpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSByZWJvb3RpbmcgdG8gZ28gaW50byByZWNvdmVyeSwgaW5zdGVhZCBvZgorICAgICAgICAgICAgLy8gc2V0dGluZyBzeXMucG93ZXJjdGwgZGlyZWN0bHkgd2UnbGwgc3RhcnQgdGhlCisgICAgICAgICAgICAvLyBwcmUtcmVjb3Zlcnkgc2VydmljZSB3aGljaCB3aWxsIGRvIHNvbWUgcHJlcGFyYXRpb24gZm9yCisgICAgICAgICAgICAvLyByZWNvdmVyeSBhbmQgdGhlbiByZWJvb3QgZm9yIHVzLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoaXMgcHJlcGFyYXRpb24gY2FuIHRha2UgbW9yZSB0aGFuIDIwIHNlY29uZHMgaWYKKyAgICAgICAgICAgIC8vIHRoZXJlJ3MgYSB2ZXJ5IGxhcmdlIHVwZGF0ZSBwYWNrYWdlLCBzbyBsZW5ndGhlbiB0aGUKKyAgICAgICAgICAgIC8vIHRpbWVvdXQuCisgICAgICAgICAgICBTeXN0ZW1Qcm9wZXJ0aWVzLnNldCgiY3RsLnN0YXJ0IiwgInByZS1yZWNvdmVyeSIpOworICAgICAgICAgICAgZHVyYXRpb24gPSAxMjAgKiAxMDAwTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbVByb3BlcnRpZXMuc2V0KCJzeXMucG93ZXJjdGwiLCAicmVib290LCIgKyByZWFzb24pOworICAgICAgICAgICAgZHVyYXRpb24gPSAyMCAqIDEwMDBMOworICAgICAgICB9CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBUaHJlYWQuc2xlZXAoMjAwMDApOworICAgICAgICAgICAgVGhyZWFkLnNsZWVwKGR1cmF0aW9uKTsKICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5pbnRlcnJ1cHQoKTsKICAgICAgICAgfQpAQCAtMjUyNCw2ICsyNTQwLDkgQEAKICAgICAgICAgQE92ZXJyaWRlIC8vIEJpbmRlciBjYWxsCiAgICAgICAgIHB1YmxpYyB2b2lkIHJlYm9vdChib29sZWFuIGNvbmZpcm0sIFN0cmluZyByZWFzb24sIGJvb2xlYW4gd2FpdCkgewogICAgICAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5SRUJPT1QsIG51bGwpOworICAgICAgICAgICAgaWYgKFBvd2VyTWFuYWdlci5SRUJPT1RfUkVDT1ZFUlkuZXF1YWxzKHJlYXNvbikpIHsKKyAgICAgICAgICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLlJFQ09WRVJZLCBudWxsKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmluYWwgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvc2VhcmNoL1NlYXJjaE1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3NlYXJjaC9TZWFyY2hNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IGI1ZDgxZDEuLjQ4NjQ3N2EgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvc2VhcmNoL1NlYXJjaE1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9zZWFyY2gvU2VhcmNoTWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIuc2VhcmNoOwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlck5hdGl2ZTsKIGltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOwogaW1wb3J0IGFuZHJvaWQuYXBwLklTZWFyY2hNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLlNlYXJjaE1hbmFnZXI7CkBAIC0zOSw3ICszOCw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VyTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuY29udGVudC5QYWNrYWdlTW9uaXRvcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXBkYXRlcy9Db25maWdVcGRhdGVJbnN0YWxsUmVjZWl2ZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXBkYXRlcy9Db25maWdVcGRhdGVJbnN0YWxsUmVjZWl2ZXIuamF2YQppbmRleCA5NjAxZTlhLi4xYTY4ZmIzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VwZGF0ZXMvQ29uZmlnVXBkYXRlSW5zdGFsbFJlY2VpdmVyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91cGRhdGVzL0NvbmZpZ1VwZGF0ZUluc3RhbGxSZWNlaXZlci5qYXZhCkBAIC0yMSw3ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwotaW1wb3J0IGFuZHJvaWQub3MuRmlsZVV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5CYXNlNjQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkV2ZW50TG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwpAQCAtMzAsMTggKzI5LDE1IEBACiAKIGltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZTsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlRmFjdG9yeTsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdDsKIGltcG9ydCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LlNpZ25hdHVyZTsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LlNpZ25hdHVyZUV4Y2VwdGlvbjsKIAogaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91cGRhdGVzL1NFTGludXhQb2xpY3lJbnN0YWxsUmVjZWl2ZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXBkYXRlcy9TRUxpbnV4UG9saWN5SW5zdGFsbFJlY2VpdmVyLmphdmEKaW5kZXggZTQzMDgxNC4uZmRjNjA0ZiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91cGRhdGVzL1NFTGludXhQb2xpY3lJbnN0YWxsUmVjZWl2ZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VwZGF0ZXMvU0VMaW51eFBvbGljeUluc3RhbGxSZWNlaXZlci5qYXZhCkBAIC0xOCw4ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuRmlsZVV0aWxzOwotaW1wb3J0IGFuZHJvaWQub3MuU0VMaW51eDsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQmFzZTY0OwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91cGRhdGVzL1RaSW5mb0luc3RhbGxSZWNlaXZlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91cGRhdGVzL1RaSW5mb0luc3RhbGxSZWNlaXZlci5qYXZhCmluZGV4IDgzYWRiZGIuLjJmZTY4ZjggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXBkYXRlcy9UWkluZm9JbnN0YWxsUmVjZWl2ZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VwZGF0ZXMvVFpJbmZvSW5zdGFsbFJlY2VpdmVyLmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLnVwZGF0ZXM7CiAKIGltcG9ydCBhbmRyb2lkLnV0aWwuQmFzZTY0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91c2IvVXNiRGV2aWNlTWFuYWdlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91c2IvVXNiRGV2aWNlTWFuYWdlci5qYXZhCmluZGV4IDVhNjBkZTAuLmMxYTM2NDYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXNiL1VzYkRldmljZU1hbmFnZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VzYi9Vc2JEZXZpY2VNYW5hZ2VyLmphdmEKQEAgLTUzLDYgKzUzLDcgQEAKIGltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKQEAgLTI4NywxMiArMjg4LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGNvbnRhaW5zRnVuY3Rpb24oU3RyaW5nIGZ1bmN0aW9ucywgU3RyaW5nIGZ1bmN0aW9uKSB7Ci0gICAgICAgIGludCBpbmRleCA9IGZ1bmN0aW9ucy5pbmRleE9mKGZ1bmN0aW9uKTsKLSAgICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaW5kZXggPiAwICYmIGZ1bmN0aW9ucy5jaGFyQXQoaW5kZXggLSAxKSAhPSAnLCcpIHJldHVybiBmYWxzZTsKLSAgICAgICAgaW50IGNoYXJBZnRlciA9IGluZGV4ICsgZnVuY3Rpb24ubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChjaGFyQWZ0ZXIgPCBmdW5jdGlvbnMubGVuZ3RoKCkgJiYgZnVuY3Rpb25zLmNoYXJBdChjaGFyQWZ0ZXIpICE9ICcsJykgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QoZnVuY3Rpb25zLnNwbGl0KCIsIikpLmNvbnRhaW5zKGZ1bmN0aW9uKTsKICAgICB9CiAKICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFVzYkhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9SRUFETUUudHh0IGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1JFQURNRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZTE0NzUxLi4wMDAwMDAwCi0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotV2lmaVNlcnZpY2U6IEltcGxlbWVudHMgdGhlIElXaWZpTWFuYWdlciAzcmQgcGFydHkgQVBJLiBUaGUgQVBJIGFuZCB0aGUgZGV2aWNlIHN0YXRlIGluZm9ybWF0aW9uIChzY3JlZW4gb24vb2ZmLCBiYXR0ZXJ5IHN0YXRlLCBzbGVlcCBwb2xpY3kpIGdvIGFzIGlucHV0IGludG8gdGhlIFdpZmlDb250cm9sbGVyIHdoaWNoIHRyYWNrcyBoaWdoIGxldmVsIHN0YXRlcyBhcyB0byB3aGV0aGVyIFNUQSBvciBBUCBtb2RlIGlzIG9wZXJhdGlvbmFsIGFuZCBjb250cm9scyB0aGUgV2lmaVN0YXRlTWFjaGluZSB0byBoYW5kbGUgYnJpbmd1cCBhbmQgc2h1dCBkb3duLgotCi1XaWZpQ29udHJvbGxlcjogQWN0cyBhcyBhIGNvbnRyb2xsZXIgdG8gdGhlIFdpZmlTdGF0ZU1hY2hpbmUgYmFzZWQgb24gdmFyaW91cyBpbnB1dHMgKEFQSSBhbmQgZGV2aWNlIHN0YXRlKS4gUnVucyBvbiB0aGUgc2FtZSB0aHJlYWQgY3JlYXRlZCBpbiBXaWZpU2VydmljZS4KLQotV2lmaVNldHRpbmdzU3RvcmU6IFRyYWNrcyB0aGUgdmFyaW91cyBzZXR0aW5ncyAod2lmaSB0b2dnbGUsIGFpcnBsYW5lIHRvZ2dsZSwgdGV0aGVyaW5nIHRvZ2dsZSwgc2NhbiBtb2RlIHRvZ2dsZSkgYW5kIHByb3ZpZGVzIEFQSSB0byBmaWd1cmUgaWYgd2lmaSBzaG91bGQgYmUgdHVybmVkIG9uIG9yIG9mZi4KLQotV2lmaVRyYWZmaWNQb2xsZXI6IFBvbGxzIHRyYWZmaWMgb24gd2lmaSBhbmQgbm90aWZpZXMgYXBwcyBsaXN0ZW5pbmcgb24gaXQuCi0KLVdpZmlOb3RpZmljYXRpb25Db250cm9sbGVyOiBDb250cm9scyB3aGV0aGVyIHRoZSBvcGVuIG5ldHdvcmsgbm90aWZpY2F0aW9uIGlzIGRpc3BsYXllZCBvciBub3QgYmFzZWQgb24gdGhlIHNjYW4gcmVzdWx0cy4KLQotV2lmaVN0YXRlTWFjaGluZTogVHJhY2tzIHRoZSB2YXJpb3VzIHN0YXRlcyBvbiBTVEEgYW5kIEFQIGNvbm5lY3Rpdml0eSBhbmQgaGFuZGxlcyBicmluZyB1cCBhbmQgc2h1dCBkb3duLgotCi0KLUZlYXR1cmUgZGVzY3JpcHRpb246Ci0KLVNjYW4tb25seSBtb2RlIHdpdGggV2ktRmkgdHVybmVkIG9mZjoKLSAtIFNldHVwIHdpemFyZCBvcHRzIHVzZXIgaW50byBhbGxvd2luZyBzY2FubmluZyBmb3IgaW1wcm92ZWQgbG9jYXRpb24uIFdlIHNob3cgbm8gZnVydGhlciBkaWFsb2dzIGluIHNldHVwIHdpemFyZCBzaW5jZSB0aGUgdXNlciBoYXMganVzdCBvcHRlZCBpbnRvIHRoZSBmZWF0dXJlLiBUaGlzIGlzIHRoZSByZWFzb24gV2lmaVNlcnZpY2UgbGlzdGVucyB0byBERVZJQ0VfUFJPVklTSU9ORUQgc2V0dGluZy4KLSAtIE9uY2UgdGhlIHVzZXIgaGFzIGhpcyBkZXZpY2UgcHJvdmlzaW9uZWQsIHR1cm5pbmcgb2ZmIFdpLUZpIGZyb20gc2V0dGluZ3Mgb3IgZnJvbSBhIHRoaXJkIHBhcnR5IGFwcCB3aWxsIHNob3cgdXAgYSBkaWFsb2cgcmVtaW5kaW5nIHRoZSB1c2VyIHRoYXQgc2NhbiBtb2RlIHdpbGwgYmUgb24gZXZlbiB0aG91Z2ggV2ktRmkgaXMgYmVpbmcgdHVybmVkIG9mZi4gVGhlIHVzZXIgaGFzIHRoZSBjaG9pY2UgdG8gdHVybiB0aGlzIG5vdGlmaWNhdGlvbiBvZmYuCi0gLSBJbiB0aGUgc2NhbiBtb2RlLCB0aGUgZGV2aWNlIGNvbnRpbnVlcyB0byBhbGxvdyBzY2FubmluZyBmcm9tIGFueSBhcHAgd2l0aCBXaS1GaSB0dXJuZWQgb2ZmLiBUaGlzIGlzIGRvbmUgYnkgZGlzYWJsaW5nIGFsbCBuZXR3b3JrcyBhbmQgYWxsb3dpbmcgb25seSBzY2FucyB0byBiZSBwYXNzZWQuCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaUNvbnRyb2xsZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpQ29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2Q1MTRlLi4wMDAwMDAwCi0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpQ29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci53aWZpOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWxhcm1NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlcjsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX01PREVfRlVMTDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX01PREVfRlVMTF9ISUdIX1BFUkY7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9NT0RFX1NDQU5fT05MWTsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlTdGF0ZU1hY2hpbmU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQub3MuV29ya1NvdXJjZTsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Qcm90b2NvbDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGVNYWNoaW5lOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53aWZpLldpZmlTZXJ2aWNlLkxvY2tMaXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotCi1jbGFzcyBXaWZpQ29udHJvbGxlciBleHRlbmRzIFN0YXRlTWFjaGluZSB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXaWZpQ29udHJvbGxlciI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBEQkcgPSBmYWxzZTsKLSAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1TY3JlZW5PZmY7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1EZXZpY2VJZGxlOwotICAgIHByaXZhdGUgaW50IG1QbHVnZ2VkVHlwZTsKLSAgICBwcml2YXRlIGludCBtU3RheUF3YWtlQ29uZGl0aW9uczsKLSAgICBwcml2YXRlIGxvbmcgbUlkbGVNaWxsaXM7Ci0gICAgcHJpdmF0ZSBpbnQgbVNsZWVwUG9saWN5OwotICAgIHByaXZhdGUgYm9vbGVhbiBtRmlyc3RVc2VyU2lnbk9uU2VlbiA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBBbGFybU1hbmFnZXIgbUFsYXJtTWFuYWdlcjsKLSAgICBwcml2YXRlIFBlbmRpbmdJbnRlbnQgbUlkbGVJbnRlbnQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElETEVfUkVRVUVTVCA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBTZWUge0BsaW5rIFNldHRpbmdzLkdsb2JhbCNXSUZJX0lETEVfTVN9LiBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGlmIGEKLSAgICAgKiBTZXR0aW5ncy5HbG9iYWwgdmFsdWUgaXMgbm90IHByZXNlbnQuIFRoaXMgdGltZW91dCB2YWx1ZSBpcyBjaG9zZW4gYXMKLSAgICAgKiB0aGUgYXBwcm94aW1hdGUgcG9pbnQgYXQgd2hpY2ggdGhlIGJhdHRlcnkgZHJhaW4gY2F1c2VkIGJ5IFdpLUZpCi0gICAgICogYmVpbmcgZW5hYmxlZCBidXQgbm90IGFjdGl2ZSBleGNlZWRzIHRoZSBiYXR0ZXJ5IGRyYWluIGNhdXNlZCBieQotICAgICAqIHJlLWVzdGFibGlzaGluZyBhIGNvbm5lY3Rpb24gdG8gdGhlIG1vYmlsZSBkYXRhIG5ldHdvcmsuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBERUZBVUxUX0lETEVfTVMgPSAxNSAqIDYwICogMTAwMDsgLyogMTUgbWludXRlcyAqLwotCi0gICAgLyoqCi0gICAgICogU2VlIHtAbGluayBTZXR0aW5ncy5HbG9iYWwjV0lGSV9SRUVOQUJMRV9ERUxBWV9NU30uICBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGlmIGEKLSAgICAgKiBTZXR0aW5ncy5HbG9iYWwgdmFsdWUgaXMgbm90IHByZXNlbnQuICBUaGlzIGlzIHRoZSBtaW5pbXVtIHRpbWUgYWZ0ZXIgd2lmaSBpcyBkaXNhYmxlZAotICAgICAqIHdlJ2xsIGFjdCBvbiBhbiBlbmFibGUuICBFbmFibGUgcmVxdWVzdHMgcmVjZWl2ZWQgYmVmb3JlIHRoaXMgZGVsYXkgd2lsbCBiZSBkZWZlcnJlZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIERFRkFVTFRfUkVFTkFCTEVfREVMQVlfTVMgPSA1MDA7Ci0KLSAgICAvLyBmaW5kaW5nIHRoYXQgZGVsYXllZCBtZXNzYWdlcyBjYW4gc29tZXRpbWVzIGJlIGRlbGl2ZXJlZCBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQKLSAgICAvLyBwcm9iYWJseSByb3VuZGluZyBlcnJvcnMuLiAgYWRkIGEgbWFyZ2luIHRvIHByZXZlbnQgcHJvYmxlbXMKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIERFRkVSX01BUkdJTl9NUyA9IDU7Ci0KLSAgICBOZXR3b3JrSW5mbyBtTmV0d29ya0luZm8gPSBuZXcgTmV0d29ya0luZm8oQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX1dJRkksIDAsICJXSUZJIiwgIiIpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9ERVZJQ0VfSURMRSA9Ci0gICAgICAgICAgICAiY29tLmFuZHJvaWQuc2VydmVyLldpZmlNYW5hZ2VyLmFjdGlvbi5ERVZJQ0VfSURMRSI7Ci0KLSAgICAvKiBSZWZlcmVuY2VzIHRvIHZhbHVlcyB0cmFja2VkIGluIFdpZmlTZXJ2aWNlICovCi0gICAgZmluYWwgV2lmaVN0YXRlTWFjaGluZSBtV2lmaVN0YXRlTWFjaGluZTsKLSAgICBmaW5hbCBXaWZpU2V0dGluZ3NTdG9yZSBtU2V0dGluZ3NTdG9yZTsKLSAgICBmaW5hbCBMb2NrTGlzdCBtTG9ja3M7Ci0KLSAgICAvKioKLSAgICAgKiBUZW1wb3JhcnkgZm9yIGNvbXB1dGluZyBVSURTIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyBXSUZJLgotICAgICAqIFByb3RlY3RlZCBieSBtV2lmaVN0YXRlVHJhY2tlciBsb2NrLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgV29ya1NvdXJjZSBtVG1wV29ya1NvdXJjZSA9IG5ldyBXb3JrU291cmNlKCk7Ci0KLSAgICBwcml2YXRlIGxvbmcgbVJlRW5hYmxlRGVsYXlNaWxsaXM7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQkFTRSA9IFByb3RvY29sLkJBU0VfV0lGSV9DT05UUk9MTEVSOwotCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfRU1FUkdFTkNZX01PREVfQ0hBTkdFRCAgICAgPSBCQVNFICsgMTsKLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TQ1JFRU5fT04gICAgICAgICAgICAgICAgICA9IEJBU0UgKyAyOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NDUkVFTl9PRkYgICAgICAgICAgICAgICAgID0gQkFTRSArIDM7Ci0gICAgc3RhdGljIGZpbmFsIGludCBDTURfQkFUVEVSWV9DSEFOR0VEICAgICAgICAgICAgPSBCQVNFICsgNDsKLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9ERVZJQ0VfSURMRSAgICAgICAgICAgICAgICA9IEJBU0UgKyA1OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0xPQ0tTX0NIQU5HRUQgICAgICAgICAgICAgID0gQkFTRSArIDY7Ci0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU0NBTl9BTFdBWVNfTU9ERV9DSEFOR0VEICAgPSBCQVNFICsgNzsKLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9XSUZJX1RPR0dMRUQgICAgICAgICAgICAgICA9IEJBU0UgKyA4OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0FJUlBMQU5FX1RPR0dMRUQgICAgICAgICAgID0gQkFTRSArIDk7Ci0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU0VUX0FQICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTA7Ci0gICAgc3RhdGljIGZpbmFsIGludCBDTURfREVGRVJSRURfVE9HR0xFICAgICAgICAgICAgPSBCQVNFICsgMTE7Ci0gICAgc3RhdGljIGZpbmFsIGludCBDTURfVVNFUl9QUkVTRU5UICAgICAgICAgICAgICAgPSBCQVNFICsgMTI7Ci0KLSAgICBwcml2YXRlIERlZmF1bHRTdGF0ZSBtRGVmYXVsdFN0YXRlID0gbmV3IERlZmF1bHRTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhRW5hYmxlZFN0YXRlIG1TdGFFbmFibGVkU3RhdGUgPSBuZXcgU3RhRW5hYmxlZFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBBcFN0YURpc2FibGVkU3RhdGUgbUFwU3RhRGlzYWJsZWRTdGF0ZSA9IG5ldyBBcFN0YURpc2FibGVkU3RhdGUoKTsKLSAgICBwcml2YXRlIFN0YURpc2FibGVkV2l0aFNjYW5TdGF0ZSBtU3RhRGlzYWJsZWRXaXRoU2NhblN0YXRlID0gbmV3IFN0YURpc2FibGVkV2l0aFNjYW5TdGF0ZSgpOwotICAgIHByaXZhdGUgQXBFbmFibGVkU3RhdGUgbUFwRW5hYmxlZFN0YXRlID0gbmV3IEFwRW5hYmxlZFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBEZXZpY2VBY3RpdmVTdGF0ZSBtRGV2aWNlQWN0aXZlU3RhdGUgPSBuZXcgRGV2aWNlQWN0aXZlU3RhdGUoKTsKLSAgICBwcml2YXRlIERldmljZUluYWN0aXZlU3RhdGUgbURldmljZUluYWN0aXZlU3RhdGUgPSBuZXcgRGV2aWNlSW5hY3RpdmVTdGF0ZSgpOwotICAgIHByaXZhdGUgU2Nhbk9ubHlMb2NrSGVsZFN0YXRlIG1TY2FuT25seUxvY2tIZWxkU3RhdGUgPSBuZXcgU2Nhbk9ubHlMb2NrSGVsZFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBGdWxsTG9ja0hlbGRTdGF0ZSBtRnVsbExvY2tIZWxkU3RhdGUgPSBuZXcgRnVsbExvY2tIZWxkU3RhdGUoKTsKLSAgICBwcml2YXRlIEZ1bGxIaWdoUGVyZkxvY2tIZWxkU3RhdGUgbUZ1bGxIaWdoUGVyZkxvY2tIZWxkU3RhdGUgPSBuZXcgRnVsbEhpZ2hQZXJmTG9ja0hlbGRTdGF0ZSgpOwotICAgIHByaXZhdGUgTm9Mb2NrSGVsZFN0YXRlIG1Ob0xvY2tIZWxkU3RhdGUgPSBuZXcgTm9Mb2NrSGVsZFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBFY21TdGF0ZSBtRWNtU3RhdGUgPSBuZXcgRWNtU3RhdGUoKTsKLQotICAgIFdpZmlDb250cm9sbGVyKENvbnRleHQgY29udGV4dCwgV2lmaVNlcnZpY2Ugc2VydmljZSwgTG9vcGVyIGxvb3BlcikgewotICAgICAgICBzdXBlcihUQUcsIGxvb3Blcik7Ci0gICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUgPSBzZXJ2aWNlLm1XaWZpU3RhdGVNYWNoaW5lOwotICAgICAgICBtU2V0dGluZ3NTdG9yZSA9IHNlcnZpY2UubVNldHRpbmdzU3RvcmU7Ci0gICAgICAgIG1Mb2NrcyA9IHNlcnZpY2UubUxvY2tzOwotCi0gICAgICAgIG1BbGFybU1hbmFnZXIgPSAoQWxhcm1NYW5hZ2VyKW1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BTEFSTV9TRVJWSUNFKTsKLSAgICAgICAgSW50ZW50IGlkbGVJbnRlbnQgPSBuZXcgSW50ZW50KEFDVElPTl9ERVZJQ0VfSURMRSwgbnVsbCk7Ci0gICAgICAgIG1JZGxlSW50ZW50ID0gUGVuZGluZ0ludGVudC5nZXRCcm9hZGNhc3QobUNvbnRleHQsIElETEVfUkVRVUVTVCwgaWRsZUludGVudCwgMCk7Ci0KLSAgICAgICAgYWRkU3RhdGUobURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtQXBTdGFEaXNhYmxlZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1TdGFFbmFibGVkU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1EZXZpY2VBY3RpdmVTdGF0ZSwgbVN0YUVuYWJsZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RhdGUobURldmljZUluYWN0aXZlU3RhdGUsIG1TdGFFbmFibGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtU2Nhbk9ubHlMb2NrSGVsZFN0YXRlLCBtRGV2aWNlSW5hY3RpdmVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1GdWxsTG9ja0hlbGRTdGF0ZSwgbURldmljZUluYWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtRnVsbEhpZ2hQZXJmTG9ja0hlbGRTdGF0ZSwgbURldmljZUluYWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtTm9Mb2NrSGVsZFN0YXRlLCBtRGV2aWNlSW5hY3RpdmVTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtU3RhRGlzYWJsZWRXaXRoU2NhblN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1BcEVuYWJsZWRTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtRWNtU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICBpZiAobVNldHRpbmdzU3RvcmUuaXNTY2FuQWx3YXlzQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgICAgIHNldEluaXRpYWxTdGF0ZShtU3RhRGlzYWJsZWRXaXRoU2NhblN0YXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldEluaXRpYWxTdGF0ZShtQXBTdGFEaXNhYmxlZFN0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBzZXRMb2dSZWNTaXplKDEwMCk7Ci0gICAgICAgIHNldExvZ09ubHlUcmFuc2l0aW9ucyhmYWxzZSk7Ci0KLSAgICAgICAgSW50ZW50RmlsdGVyIGZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKTsKLSAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihBQ1RJT05fREVWSUNFX0lETEUpOwotICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKFdpZmlNYW5hZ2VyLk5FVFdPUktfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKAotICAgICAgICAgICAgICAgIG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhY3Rpb24gPSBpbnRlbnQuZ2V0QWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmVxdWFscyhBQ1RJT05fREVWSUNFX0lETEUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX0RFVklDRV9JRExFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhXaWZpTWFuYWdlci5ORVRXT1JLX1NUQVRFX0NIQU5HRURfQUNUSU9OKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrSW5mbyA9IChOZXR3b3JrSW5mbykgaW50ZW50LmdldFBhcmNlbGFibGVFeHRyYSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVYVFJBX05FVFdPUktfSU5GTyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIG5ldyBJbnRlbnRGaWx0ZXIoZmlsdGVyKSk7Ci0KLSAgICAgICAgaW5pdGlhbGl6ZUFuZFJlZ2lzdGVyRm9yU2V0dGluZ3NDaGFuZ2UobG9vcGVyKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZUFuZFJlZ2lzdGVyRm9yU2V0dGluZ3NDaGFuZ2UoTG9vcGVyIGxvb3BlcikgewotICAgICAgICBIYW5kbGVyIGhhbmRsZXIgPSBuZXcgSGFuZGxlcihsb29wZXIpOwotICAgICAgICByZWFkU3RheUF3YWtlQ29uZGl0aW9ucygpOwotICAgICAgICByZWdpc3RlckZvclN0YXlBd2FrZU1vZGVDaGFuZ2UoaGFuZGxlcik7Ci0gICAgICAgIHJlYWRXaWZpSWRsZVRpbWUoKTsKLSAgICAgICAgcmVnaXN0ZXJGb3JXaWZpSWRsZVRpbWVDaGFuZ2UoaGFuZGxlcik7Ci0gICAgICAgIHJlYWRXaWZpU2xlZXBQb2xpY3koKTsKLSAgICAgICAgcmVnaXN0ZXJGb3JXaWZpU2xlZXBQb2xpY3lDaGFuZ2UoaGFuZGxlcik7Ci0gICAgICAgIHJlYWRXaWZpUmVFbmFibGVEZWxheSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZWFkU3RheUF3YWtlQ29uZGl0aW9ucygpIHsKLSAgICAgICAgbVN0YXlBd2FrZUNvbmRpdGlvbnMgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0SW50KG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5TVEFZX09OX1dISUxFX1BMVUdHRURfSU4sIDApOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZWFkV2lmaUlkbGVUaW1lKCkgewotICAgICAgICBtSWRsZU1pbGxpcyA9IFNldHRpbmdzLkdsb2JhbC5nZXRMb25nKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX0lETEVfTVMsIERFRkFVTFRfSURMRV9NUyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlYWRXaWZpU2xlZXBQb2xpY3koKSB7Ci0gICAgICAgIG1TbGVlcFBvbGljeSA9IFNldHRpbmdzLkdsb2JhbC5nZXRJbnQobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfU0xFRVBfUE9MSUNZLAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1NMRUVQX1BPTElDWV9ORVZFUik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlYWRXaWZpUmVFbmFibGVEZWxheSgpIHsKLSAgICAgICAgbVJlRW5hYmxlRGVsYXlNaWxsaXMgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0TG9uZyhtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9SRUVOQUJMRV9ERUxBWV9NUywgREVGQVVMVF9SRUVOQUJMRV9ERUxBWV9NUyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT2JzZXJ2ZXMgc2V0dGluZ3MgY2hhbmdlcyB0byBzY2FuIGFsd2F5cyBtb2RlLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCByZWdpc3RlckZvclN0YXlBd2FrZU1vZGVDaGFuZ2UoSGFuZGxlciBoYW5kbGVyKSB7Ci0gICAgICAgIENvbnRlbnRPYnNlcnZlciBjb250ZW50T2JzZXJ2ZXIgPSBuZXcgQ29udGVudE9ic2VydmVyKGhhbmRsZXIpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2UoYm9vbGVhbiBzZWxmQ2hhbmdlKSB7Ci0gICAgICAgICAgICAgICAgcmVhZFN0YXlBd2FrZUNvbmRpdGlvbnMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKS5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcigKLSAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuZ2V0VXJpRm9yKFNldHRpbmdzLkdsb2JhbC5TVEFZX09OX1dISUxFX1BMVUdHRURfSU4pLAotICAgICAgICAgICAgICAgIGZhbHNlLCBjb250ZW50T2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE9ic2VydmVzIHNldHRpbmdzIGNoYW5nZXMgdG8gc2NhbiBhbHdheXMgbW9kZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJGb3JXaWZpSWRsZVRpbWVDaGFuZ2UoSGFuZGxlciBoYW5kbGVyKSB7Ci0gICAgICAgIENvbnRlbnRPYnNlcnZlciBjb250ZW50T2JzZXJ2ZXIgPSBuZXcgQ29udGVudE9ic2VydmVyKGhhbmRsZXIpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2UoYm9vbGVhbiBzZWxmQ2hhbmdlKSB7Ci0gICAgICAgICAgICAgICAgcmVhZFdpZmlJZGxlVGltZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5nZXRVcmlGb3IoU2V0dGluZ3MuR2xvYmFsLldJRklfSURMRV9NUyksCi0gICAgICAgICAgICAgICAgZmFsc2UsIGNvbnRlbnRPYnNlcnZlcik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT2JzZXJ2ZXMgY2hhbmdlcyB0byB3aWZpIHNsZWVwIHBvbGljeQotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCByZWdpc3RlckZvcldpZmlTbGVlcFBvbGljeUNoYW5nZShIYW5kbGVyIGhhbmRsZXIpIHsKLSAgICAgICAgQ29udGVudE9ic2VydmVyIGNvbnRlbnRPYnNlcnZlciA9IG5ldyBDb250ZW50T2JzZXJ2ZXIoaGFuZGxlcikgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZShib29sZWFuIHNlbGZDaGFuZ2UpIHsKLSAgICAgICAgICAgICAgICByZWFkV2lmaVNsZWVwUG9saWN5KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5nZXRVcmlGb3IoU2V0dGluZ3MuR2xvYmFsLldJRklfU0xFRVBfUE9MSUNZKSwKLSAgICAgICAgICAgICAgICBmYWxzZSwgY29udGVudE9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIFdpLUZpIGNoaXBzZXQgc2hvdWxkIHN0YXkgYXdha2Ugb3IgYmUgcHV0IHRvCi0gICAgICogc2xlZXAuIExvb2tzIGF0IHRoZSBzZXR0aW5nIGZvciB0aGUgc2xlZXAgcG9saWN5IGFuZCB0aGUgY3VycmVudAotICAgICAqIGNvbmRpdGlvbnMuCi0gICAgICoKLSAgICAgKiBAc2VlICNzaG91bGREZXZpY2VTdGF5QXdha2UoaW50KQotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBzaG91bGRXaWZpU3RheUF3YWtlKGludCBwbHVnZ2VkVHlwZSkgewotICAgICAgICBpZiAobVNsZWVwUG9saWN5ID09IFNldHRpbmdzLkdsb2JhbC5XSUZJX1NMRUVQX1BPTElDWV9ORVZFUikgewotICAgICAgICAgICAgLy8gTmV2ZXIgc2xlZXAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKChtU2xlZXBQb2xpY3kgPT0gU2V0dGluZ3MuR2xvYmFsLldJRklfU0xFRVBfUE9MSUNZX05FVkVSX1dISUxFX1BMVUdHRUQpICYmCi0gICAgICAgICAgICAgICAgKHBsdWdnZWRUeXBlICE9IDApKSB7Ci0gICAgICAgICAgICAvLyBOZXZlciBzbGVlcCB3aGlsZSBwbHVnZ2VkLCBhbmQgd2UncmUgcGx1Z2dlZAotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBEZWZhdWx0Ci0gICAgICAgICAgICByZXR1cm4gc2hvdWxkRGV2aWNlU3RheUF3YWtlKHBsdWdnZWRUeXBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBiaXQgdmFsdWUgY29ycmVzcG9uZGluZyB0byB7QGNvZGUgcGx1Z2dlZFR5cGV9IGlzIHNldCBpbgotICAgICAqIHRoZSBiaXQgc3RyaW5nIG1TdGF5QXdha2VDb25kaXRpb25zLiBUaGlzIGRldGVybWluZXMgd2hldGhlciB0aGUgZGV2aWNlIHNob3VsZAotICAgICAqIHN0YXkgYXdha2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGx1Z2dlZCB0eXBlLgotICAgICAqCi0gICAgICogQHBhcmFtIHBsdWdnZWRUeXBlIHRoZSB0eXBlIG9mIHBsdWcgKFVTQiwgQUMsIG9yIG5vbmUpIGZvciB3aGljaCB0aGUgY2hlY2sgaXMKLSAgICAgKiBiZWluZyBtYWRlCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYge0Bjb2RlIHBsdWdnZWRUeXBlfSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlIGlzCi0gICAgICogc3VwcG9zZWQgdG8gc3RheSBhd2FrZSwge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIHNob3VsZERldmljZVN0YXlBd2FrZShpbnQgcGx1Z2dlZFR5cGUpIHsKLSAgICAgICAgcmV0dXJuIChtU3RheUF3YWtlQ29uZGl0aW9ucyAmIHBsdWdnZWRUeXBlKSAhPSAwOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVCYXR0ZXJ5V29ya1NvdXJjZSgpIHsKLSAgICAgICAgbVRtcFdvcmtTb3VyY2UuY2xlYXIoKTsKLSAgICAgICAgaWYgKG1EZXZpY2VJZGxlKSB7Ci0gICAgICAgICAgICBtTG9ja3MudXBkYXRlV29ya1NvdXJjZShtVG1wV29ya1NvdXJjZSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUudXBkYXRlQmF0dGVyeVdvcmtTb3VyY2UobVRtcFdvcmtTb3VyY2UpOwotICAgIH0KLQotICAgIGNsYXNzIERlZmF1bHRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0NSRUVOX09OOgotICAgICAgICAgICAgICAgICAgICBtQWxhcm1NYW5hZ2VyLmNhbmNlbChtSWRsZUludGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIG1TY3JlZW5PZmYgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgbURldmljZUlkbGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmF0dGVyeVdvcmtTb3VyY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0NSRUVOX09GRjoKLSAgICAgICAgICAgICAgICAgICAgbVNjcmVlbk9mZiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICogU2V0IGEgdGltZXIgdG8gcHV0IFdpLUZpIHRvIHNsZWVwLCBidXQgb25seSBpZiB0aGUgc2NyZWVuIGlzIG9mZgotICAgICAgICAgICAgICAgICAgICAqIEFORCB0aGUgInN0YXkgb24gd2hpbGUgcGx1Z2dlZCBpbiIgc2V0dGluZyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgICAgICAgICAgICAgICAqIGN1cnJlbnQgcG93ZXIgY29uZGl0aW9ucyAoaS5lLCBub3QgcGx1Z2dlZCBpbiwgcGx1Z2dlZCBpbiB0byBVU0IsCi0gICAgICAgICAgICAgICAgICAgICogb3IgcGx1Z2dlZCBpbiB0byBBQykuCi0gICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkV2lmaVN0YXlBd2FrZShtUGx1Z2dlZFR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0RlbGF5ZWQgc2h1dGRvd24gaWYgd2lmaSBpcyBjb25uZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtTmV0d29ya0luZm8uZ2V0RGV0YWlsZWRTdGF0ZSgpID09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgU2xvZy5kKFRBRywgInNldCBpZGxlIHRpbWVyOiAiICsgbUlkbGVNaWxsaXMgKyAiIG1zIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUFsYXJtTWFuYWdlci5zZXQoQWxhcm1NYW5hZ2VyLlJUQ19XQUtFVVAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArIG1JZGxlTWlsbGlzLCBtSWRsZUludGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9ERVZJQ0VfSURMRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfREVWSUNFX0lETEU6Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2VJZGxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmF0dGVyeVdvcmtTb3VyY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfQkFUVEVSWV9DSEFOR0VEOgotICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAqIFNldCBhIHRpbWVyIHRvIHB1dCBXaS1GaSB0byBzbGVlcCwgYnV0IG9ubHkgaWYgdGhlIHNjcmVlbiBpcyBvZmYKLSAgICAgICAgICAgICAgICAgICAgKiBBTkQgd2UgYXJlIHRyYW5zaXRpb25pbmcgZnJvbSBhIHN0YXRlIGluIHdoaWNoIHRoZSBkZXZpY2Ugd2FzIHN1cHBvc2VkCi0gICAgICAgICAgICAgICAgICAgICogdG8gc3RheSBhd2FrZSB0byBhIHN0YXRlIGluIHdoaWNoIGl0IGlzIG5vdCBzdXBwb3NlZCB0byBzdGF5IGF3YWtlLgotICAgICAgICAgICAgICAgICAgICAqIElmICJzdGF5IGF3YWtlIiBzdGF0ZSBpcyBub3QgY2hhbmdpbmcsIHdlIGRvIG5vdGhpbmcsIHRvIGF2b2lkIHJlc2V0dGluZwotICAgICAgICAgICAgICAgICAgICAqIHRoZSBhbHJlYWR5LXNldCB0aW1lci4KLSAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgaW50IHBsdWdnZWRUeXBlID0gbXNnLmFyZzE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIFNsb2cuZChUQUcsICJiYXR0ZXJ5IGNoYW5nZWQgcGx1Z2dlZFR5cGU6ICIgKyBwbHVnZ2VkVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtU2NyZWVuT2ZmICYmIHNob3VsZFdpZmlTdGF5QXdha2UobVBsdWdnZWRUeXBlKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzaG91bGRXaWZpU3RheUF3YWtlKHBsdWdnZWRUeXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0cmlnZ2VyVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgbUlkbGVNaWxsaXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBTbG9nLmQoVEFHLCAic2V0IGlkbGUgdGltZXIgZm9yICIgKyBtSWRsZU1pbGxpcyArICJtcyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbUFsYXJtTWFuYWdlci5zZXQoQWxhcm1NYW5hZ2VyLlJUQ19XQUtFVVAsIHRyaWdnZXJUaW1lLCBtSWRsZUludGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtUGx1Z2dlZFR5cGUgPSBwbHVnZ2VkVHlwZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0FQOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NDQU5fQUxXQVlTX01PREVfQ0hBTkdFRDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9MT0NLU19DSEFOR0VEOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1dJRklfVE9HR0xFRDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9BSVJQTEFORV9UT0dHTEVEOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0VNRVJHRU5DWV9NT0RFX0NIQU5HRUQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1VTRVJfUFJFU0VOVDoKLSAgICAgICAgICAgICAgICAgICAgbUZpcnN0VXNlclNpZ25PblNlZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9ERUZFUlJFRF9UT0dHTEU6Ci0gICAgICAgICAgICAgICAgICAgIGxvZygiREVGRVJSRURfVE9HR0xFIGlnbm9yZWQgZHVlIHRvIHN0YXRlIGNoYW5nZSIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiV2lmaUNvbnRyb2xsZXIuaGFuZGxlTWVzc2FnZSAiICsgbXNnLndoYXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIGNsYXNzIEFwU3RhRGlzYWJsZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbURlZmVycmVkRW5hYmxlU2VyaWFsTnVtYmVyID0gMDsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXZlRGVmZXJyZWRFbmFibGUgPSBmYWxzZTsKLSAgICAgICAgcHJpdmF0ZSBsb25nIG1EaXNhYmxlZFRpbWVzdGFtcDsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRTdXBwbGljYW50UnVubmluZyhmYWxzZSk7Ci0gICAgICAgICAgICAvLyBTdXBwbGljYW50IGNhbid0IHJlc3RhcnQgcmlnaHQgYXdheSwgc28gbm90IHRoZSB0aW1lIHdlIHN3aXRjaGVkIG9mZgotICAgICAgICAgICAgbURpc2FibGVkVGltZXN0YW1wID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICAgICAgICBtRGVmZXJyZWRFbmFibGVTZXJpYWxOdW1iZXIrKzsKLSAgICAgICAgICAgIG1IYXZlRGVmZXJyZWRFbmFibGUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9XSUZJX1RPR0dMRUQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfQUlSUExBTkVfVE9HR0xFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TZXR0aW5nc1N0b3JlLmlzV2lmaVRvZ2dsZUVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvRGVmZXJFbmFibGUobXNnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtSGF2ZURlZmVycmVkRW5hYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBoYXZlIDIgdG9nZ2xlcyBub3csIGluYyBzZXJpYWwgbnVtYmVyIGFuIGlnbm9yZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZWZlcnJlZEVuYWJsZVNlcmlhbE51bWJlcisrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGF2ZURlZmVycmVkRW5hYmxlID0gIW1IYXZlRGVmZXJyZWRFbmFibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobURldmljZUlkbGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURldmljZUFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2Nrc0FuZFRyYW5zaXRpb25XaGVuRGV2aWNlSWRsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NDQU5fQUxXQVlTX01PREVfQ0hBTkdFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TZXR0aW5nc1N0b3JlLmlzU2NhbkFsd2F5c0F2YWlsYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVN0YURpc2FibGVkV2l0aFNjYW5TdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0FQOgotICAgICAgICAgICAgICAgICAgICBpZiAobXNnLmFyZzEgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2V0SG9zdEFwUnVubmluZygoV2lmaUNvbmZpZ3VyYXRpb24pIG1zZy5vYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1BcEVuYWJsZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfREVGRVJSRURfVE9HR0xFOgotICAgICAgICAgICAgICAgICAgICBpZiAobXNnLmFyZzEgIT0gbURlZmVycmVkRW5hYmxlU2VyaWFsTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2coIkRFRkVSUkVEX1RPR0dMRSBpZ25vcmVkIGR1ZSB0byBzZXJpYWwgbWlzbWF0Y2giKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGxvZygiREVGRVJSRURfVE9HR0xFIGhhbmRsZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKE1lc3NhZ2UpKG1zZy5vYmopKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gZG9EZWZlckVuYWJsZShNZXNzYWdlIG1zZykgewotICAgICAgICAgICAgbG9uZyBkZWxheVNvRmFyID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgLSBtRGlzYWJsZWRUaW1lc3RhbXA7Ci0gICAgICAgICAgICBpZiAoZGVsYXlTb0ZhciA+PSBtUmVFbmFibGVEZWxheU1pbGxpcykgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbG9nKCJXaWZpQ29udHJvbGxlciBtc2cgIiArIG1zZyArICIgZGVmZXJyZWQgZm9yICIgKwotICAgICAgICAgICAgICAgICAgICAobVJlRW5hYmxlRGVsYXlNaWxsaXMgLSBkZWxheVNvRmFyKSArICJtcyIpOwotCi0gICAgICAgICAgICAvLyBuZWVkIHRvIGRlZmVyIHRoaXMgYWN0aW9uLgotICAgICAgICAgICAgTWVzc2FnZSBkZWZlcnJlZE1zZyA9IG9idGFpbk1lc3NhZ2UoQ01EX0RFRkVSUkVEX1RPR0dMRSk7Ci0gICAgICAgICAgICBkZWZlcnJlZE1zZy5vYmogPSBNZXNzYWdlLm9idGFpbihtc2cpOwotICAgICAgICAgICAgZGVmZXJyZWRNc2cuYXJnMSA9ICsrbURlZmVycmVkRW5hYmxlU2VyaWFsTnVtYmVyOwotICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKGRlZmVycmVkTXNnLCBtUmVFbmFibGVEZWxheU1pbGxpcyAtIGRlbGF5U29GYXIgKyBERUZFUl9NQVJHSU5fTVMpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIGNsYXNzIFN0YUVuYWJsZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2V0U3VwcGxpY2FudFJ1bm5pbmcodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfV0lGSV9UT0dHTEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAoISBtU2V0dGluZ3NTdG9yZS5pc1dpZmlUb2dnbGVFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU2V0dGluZ3NTdG9yZS5pc1NjYW5BbHdheXNBdmFpbGFibGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtU3RhRGlzYWJsZWRXaXRoU2NhblN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1BcFN0YURpc2FibGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0FJUlBMQU5FX1RPR0dMRUQ6Ci0gICAgICAgICAgICAgICAgICAgIC8qIFdoZW4gd2ktZmkgaXMgdHVybmVkIG9mZiBkdWUgdG8gYWlycGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICogZGlzYWJsZSBlbnRpcmVseSAoaW5jbHVkaW5nIHNjYW4pCi0gICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGlmICghIG1TZXR0aW5nc1N0b3JlLmlzV2lmaVRvZ2dsZUVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1BcFN0YURpc2FibGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0VNRVJHRU5DWV9NT0RFX0NIQU5HRUQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtc2cuYXJnMSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUVjbVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFN0YURpc2FibGVkV2l0aFNjYW5TdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbURlZmVycmVkRW5hYmxlU2VyaWFsTnVtYmVyID0gMDsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXZlRGVmZXJyZWRFbmFibGUgPSBmYWxzZTsKLSAgICAgICAgcHJpdmF0ZSBsb25nIG1EaXNhYmxlZFRpbWVzdGFtcDsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRTdXBwbGljYW50UnVubmluZyh0cnVlKTsKLSAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnNldE9wZXJhdGlvbmFsTW9kZShXaWZpU3RhdGVNYWNoaW5lLlNDQU5fT05MWV9XSVRIX1dJRklfT0ZGX01PREUpOwotICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2V0RHJpdmVyU3RhcnQodHJ1ZSk7Ci0gICAgICAgICAgICAvLyBTdXBwbGljYW50IGNhbid0IHJlc3RhcnQgcmlnaHQgYXdheSwgc28gbm90IHRoZSB0aW1lIHdlIHN3aXRjaGVkIG9mZgotICAgICAgICAgICAgbURpc2FibGVkVGltZXN0YW1wID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICAgICAgICBtRGVmZXJyZWRFbmFibGVTZXJpYWxOdW1iZXIrKzsKLSAgICAgICAgICAgIG1IYXZlRGVmZXJyZWRFbmFibGUgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1zZykgewotICAgICAgICAgICAgc3dpdGNoIChtc2cud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1dJRklfVE9HR0xFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TZXR0aW5nc1N0b3JlLmlzV2lmaVRvZ2dsZUVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvRGVmZXJFbmFibGUobXNnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtSGF2ZURlZmVycmVkRW5hYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgMiB0b2dnbGVzIG5vdywgaW5jIHNlcmlhbCBudW1iZXIgYW5kIGlnbm9yZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZWZlcnJlZEVuYWJsZVNlcmlhbE51bWJlcisrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGF2ZURlZmVycmVkRW5hYmxlID0gIW1IYXZlRGVmZXJyZWRFbmFibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobURldmljZUlkbGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURldmljZUFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2Nrc0FuZFRyYW5zaXRpb25XaGVuRGV2aWNlSWRsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0FJUlBMQU5FX1RPR0dMRUQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtU2V0dGluZ3NTdG9yZS5pc0FpcnBsYW5lTW9kZU9uKCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIG1TZXR0aW5nc1N0b3JlLmlzV2lmaVRvZ2dsZUVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1BcFN0YURpc2FibGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0NBTl9BTFdBWVNfTU9ERV9DSEFOR0VEOgotICAgICAgICAgICAgICAgICAgICBpZiAoISBtU2V0dGluZ3NTdG9yZS5pc1NjYW5BbHdheXNBdmFpbGFibGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1BcFN0YURpc2FibGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9BUDoKLSAgICAgICAgICAgICAgICAgICAgLy8gQmVmb3JlIHN0YXJ0aW5nIHRldGhlcmluZywgdHVybiBvZmYgc3VwcGxpY2FudCBmb3Igc2NhbiBtb2RlCi0gICAgICAgICAgICAgICAgICAgIGlmIChtc2cuYXJnMSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobXNnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtQXBTdGFEaXNhYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9ERUZFUlJFRF9UT0dHTEU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtc2cuYXJnMSAhPSBtRGVmZXJyZWRFbmFibGVTZXJpYWxOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiREVGRVJSRURfVE9HR0xFIGlnbm9yZWQgZHVlIHRvIHNlcmlhbCBtaXNtYXRjaCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbG9nZCgiREVGRVJSRURfVE9HR0xFIGhhbmRsZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKE1lc3NhZ2UpKG1zZy5vYmopKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gZG9EZWZlckVuYWJsZShNZXNzYWdlIG1zZykgewotICAgICAgICAgICAgbG9uZyBkZWxheVNvRmFyID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgLSBtRGlzYWJsZWRUaW1lc3RhbXA7Ci0gICAgICAgICAgICBpZiAoZGVsYXlTb0ZhciA+PSBtUmVFbmFibGVEZWxheU1pbGxpcykgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbG9nKCJXaWZpQ29udHJvbGxlciBtc2cgIiArIG1zZyArICIgZGVmZXJyZWQgZm9yICIgKwotICAgICAgICAgICAgICAgICAgICAobVJlRW5hYmxlRGVsYXlNaWxsaXMgLSBkZWxheVNvRmFyKSArICJtcyIpOwotCi0gICAgICAgICAgICAvLyBuZWVkIHRvIGRlZmVyIHRoaXMgYWN0aW9uLgotICAgICAgICAgICAgTWVzc2FnZSBkZWZlcnJlZE1zZyA9IG9idGFpbk1lc3NhZ2UoQ01EX0RFRkVSUkVEX1RPR0dMRSk7Ci0gICAgICAgICAgICBkZWZlcnJlZE1zZy5vYmogPSBNZXNzYWdlLm9idGFpbihtc2cpOwotICAgICAgICAgICAgZGVmZXJyZWRNc2cuYXJnMSA9ICsrbURlZmVycmVkRW5hYmxlU2VyaWFsTnVtYmVyOwotICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKGRlZmVycmVkTXNnLCBtUmVFbmFibGVEZWxheU1pbGxpcyAtIGRlbGF5U29GYXIgKyBERUZFUl9NQVJHSU5fTVMpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIGNsYXNzIEFwRW5hYmxlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9BSVJQTEFORV9UT0dHTEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAobVNldHRpbmdzU3RvcmUuaXNBaXJwbGFuZU1vZGVPbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRIb3N0QXBSdW5uaW5nKG51bGwsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtQXBTdGFEaXNhYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQVA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtc2cuYXJnMSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRIb3N0QXBSdW5uaW5nKG51bGwsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtQXBTdGFEaXNhYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIEVjbVN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRTdXBwbGljYW50UnVubmluZyhmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIGlmIChtc2cud2hhdCA9PSBDTURfRU1FUkdFTkNZX01PREVfQ0hBTkdFRCAmJiBtc2cuYXJnMSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TZXR0aW5nc1N0b3JlLmlzV2lmaVRvZ2dsZUVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobURldmljZUlkbGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGV2aWNlQWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2Nrc0FuZFRyYW5zaXRpb25XaGVuRGV2aWNlSWRsZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtU2V0dGluZ3NTdG9yZS5pc1NjYW5BbHdheXNBdmFpbGFibGUoKSkgewotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVN0YURpc2FibGVkV2l0aFNjYW5TdGF0ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1BcFN0YURpc2FibGVkU3RhdGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogUGFyZW50OiBTdGFFbmFibGVkU3RhdGUgKi8KLSAgICBjbGFzcyBEZXZpY2VBY3RpdmVTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2V0T3BlcmF0aW9uYWxNb2RlKFdpZmlTdGF0ZU1hY2hpbmUuQ09OTkVDVF9NT0RFKTsKLSAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnNldERyaXZlclN0YXJ0KHRydWUpOwotICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2V0SGlnaFBlcmZNb2RlRW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIGlmIChtc2cud2hhdCA9PSBDTURfREVWSUNFX0lETEUpIHsKLSAgICAgICAgICAgICAgICBjaGVja0xvY2tzQW5kVHJhbnNpdGlvbldoZW5EZXZpY2VJZGxlKCk7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbGV0IGRlZmF1bHQgc3RhdGUgaGFuZGxlIHRoZSByZXN0IG9mIHdvcmsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLndoYXQgPT0gQ01EX1VTRVJfUFJFU0VOVCkgewotICAgICAgICAgICAgICAgIC8vIFRMUyBuZXR3b3JrcyBjYW4ndCBjb25uZWN0IHVudGlsIHVzZXIgdW5sb2NrcyBrZXlzdG9yZS4gS2V5U3RvcmUKLSAgICAgICAgICAgICAgICAvLyB1bmxvY2tzIHdoZW4gdGhlIHVzZXIgcHVuY2hlcyBQSU4gYWZ0ZXIgdGhlIHJlYm9vdC4gU28gdXNlIHRoaXMKLSAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIHRvIGdldCB0aG9zZSBuZXR3b3JrcyBjb25uZWN0ZWQuCi0gICAgICAgICAgICAgICAgaWYgKG1GaXJzdFVzZXJTaWduT25TZWVuID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnJlbG9hZFRsc05ldHdvcmtzQW5kUmVjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1GaXJzdFVzZXJTaWduT25TZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFBhcmVudDogU3RhRW5hYmxlZFN0YXRlICovCi0gICAgY2xhc3MgRGV2aWNlSW5hY3RpdmVTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfTE9DS1NfQ0hBTkdFRDoKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2Nrc0FuZFRyYW5zaXRpb25XaGVuRGV2aWNlSWRsZSgpOwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVCYXR0ZXJ5V29ya1NvdXJjZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TQ1JFRU5fT046Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGV2aWNlQWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAvLyBNb3JlIHdvcmsgaW4gZGVmYXVsdCBzdGF0ZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogUGFyZW50OiBEZXZpY2VJbmFjdGl2ZVN0YXRlLiBEZXZpY2UgaXMgaW5hY3RpdmUsIGJ1dCBhbiBhcHAgaXMgaG9sZGluZyBhIHNjYW4gb25seSBsb2NrLiAqLwotICAgIGNsYXNzIFNjYW5Pbmx5TG9ja0hlbGRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2V0T3BlcmF0aW9uYWxNb2RlKFdpZmlTdGF0ZU1hY2hpbmUuU0NBTl9PTkxZX01PREUpOwotICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2V0RHJpdmVyU3RhcnQodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBQYXJlbnQ6IERldmljZUluYWN0aXZlU3RhdGUuIERldmljZSBpcyBpbmFjdGl2ZSwgYnV0IGFuIGFwcCBpcyBob2xkaW5nIGEgZnVsbCBsb2NrLiAqLwotICAgIGNsYXNzIEZ1bGxMb2NrSGVsZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRPcGVyYXRpb25hbE1vZGUoV2lmaVN0YXRlTWFjaGluZS5DT05ORUNUX01PREUpOwotICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2V0RHJpdmVyU3RhcnQodHJ1ZSk7Ci0gICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRIaWdoUGVyZk1vZGVFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFBhcmVudDogRGV2aWNlSW5hY3RpdmVTdGF0ZS4gRGV2aWNlIGlzIGluYWN0aXZlLCBidXQgYW4gYXBwIGlzIGhvbGRpbmcgYSBoaWdoIHBlcmYgbG9jay4gKi8KLSAgICBjbGFzcyBGdWxsSGlnaFBlcmZMb2NrSGVsZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRPcGVyYXRpb25hbE1vZGUoV2lmaVN0YXRlTWFjaGluZS5DT05ORUNUX01PREUpOwotICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2V0RHJpdmVyU3RhcnQodHJ1ZSk7Ci0gICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRIaWdoUGVyZk1vZGVFbmFibGVkKHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogUGFyZW50OiBEZXZpY2VJbmFjdGl2ZVN0YXRlLiBEZXZpY2UgaXMgaW5hY3RpdmUgYW5kIG5vIGFwcCBpcyBob2xkaW5nIGEgd2lmaSBsb2NrLiAqLwotICAgIGNsYXNzIE5vTG9ja0hlbGRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2V0RHJpdmVyU3RhcnQoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNoZWNrTG9ja3NBbmRUcmFuc2l0aW9uV2hlbkRldmljZUlkbGUoKSB7Ci0gICAgICAgIGlmIChtTG9ja3MuaGFzTG9ja3MoKSkgewotICAgICAgICAgICAgc3dpdGNoIChtTG9ja3MuZ2V0U3Ryb25nZXN0TG9ja01vZGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgV0lGSV9NT0RFX0ZVTEw6Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRnVsbExvY2tIZWxkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdJRklfTU9ERV9GVUxMX0hJR0hfUEVSRjoKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1GdWxsSGlnaFBlcmZMb2NrSGVsZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXSUZJX01PREVfU0NBTl9PTkxZOgotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNjYW5Pbmx5TG9ja0hlbGRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIklsbGVnYWwgbG9jayAiICsgbUxvY2tzLmdldFN0cm9uZ2VzdExvY2tNb2RlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1TZXR0aW5nc1N0b3JlLmlzU2NhbkFsd2F5c0F2YWlsYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1TY2FuT25seUxvY2tIZWxkU3RhdGUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU5vTG9ja0hlbGRTdGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBkdW1wKEZpbGVEZXNjcmlwdG9yIGZkLCBQcmludFdyaXRlciBwdywgU3RyaW5nW10gYXJncykgewotICAgICAgICBzdXBlci5kdW1wKGZkLCBwdywgYXJncyk7Ci0KLSAgICAgICAgcHcucHJpbnRsbigibVNjcmVlbk9mZiAiICsgbVNjcmVlbk9mZik7Ci0gICAgICAgIHB3LnByaW50bG4oIm1EZXZpY2VJZGxlICIgKyBtRGV2aWNlSWRsZSk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1QbHVnZ2VkVHlwZSAiICsgbVBsdWdnZWRUeXBlKTsKLSAgICAgICAgcHcucHJpbnRsbigibUlkbGVNaWxsaXMgIiArIG1JZGxlTWlsbGlzKTsKLSAgICAgICAgcHcucHJpbnRsbigibVNsZWVwUG9saWN5ICIgKyBtU2xlZXBQb2xpY3kpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpTm90aWZpY2F0aW9uQ29udHJvbGxlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlOb3RpZmljYXRpb25Db250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MjA2ZTAuLjAwMDAwMDAKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlOb3RpZmljYXRpb25Db250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLndpZmk7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmFwcC5UYXNrU3RhY2tCdWlsZGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSW5mbzsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLlNjYW5SZXN1bHQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlTdGF0ZU1hY2hpbmU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyogVGFrZXMgY2FyZSBvZiBoYW5kbGluZyB0aGUgIm9wZW4gd2ktZmkgbmV0d29yayBhdmFpbGFibGUiIG5vdGlmaWNhdGlvbiBAaGlkZSAqLwotZmluYWwgY2xhc3MgV2lmaU5vdGlmaWNhdGlvbkNvbnRyb2xsZXIgewotICAgIC8qKgotICAgICAqIFRoZSBpY29uIHRvIHNob3cgaW4gdGhlICdhdmFpbGFibGUgbmV0d29ya3MnIG5vdGlmaWNhdGlvbi4gVGhpcyB3aWxsIGFsc28KLSAgICAgKiBiZSB0aGUgSUQgb2YgdGhlIE5vdGlmaWNhdGlvbiBnaXZlbiB0byB0aGUgTm90aWZpY2F0aW9uTWFuYWdlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSUNPTl9ORVRXT1JLU19BVkFJTEFCTEUgPQotICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kcmF3YWJsZS5zdGF0X25vdGlmeV93aWZpX2luX3JhbmdlOwotICAgIC8qKgotICAgICAqIFdoZW4gYSBub3RpZmljYXRpb24gaXMgc2hvd24sIHdlIHdhaXQgdGhpcyBhbW91bnQgYmVmb3JlIHBvc3NpYmx5IHNob3dpbmcgaXQgYWdhaW4uCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIE5PVElGSUNBVElPTl9SRVBFQVRfREVMQVlfTVM7Ci0gICAgLyoqCi0gICAgICogV2hldGhlciB0aGUgdXNlciBoYXMgc2V0IHRoZSBzZXR0aW5nIHRvIHNob3cgdGhlICdhdmFpbGFibGUgbmV0d29ya3MnIG5vdGlmaWNhdGlvbi4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbU5vdGlmaWNhdGlvbkVuYWJsZWQ7Ci0gICAgLyoqCi0gICAgICogT2JzZXJ2ZXMgdGhlIHVzZXIgc2V0dGluZyB0byBrZWVwIHtAbGluayAjbU5vdGlmaWNhdGlvbkVuYWJsZWR9IGluIHN5bmMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBOb3RpZmljYXRpb25FbmFibGVkU2V0dGluZ09ic2VydmVyIG1Ob3RpZmljYXRpb25FbmFibGVkU2V0dGluZ09ic2VydmVyOwotICAgIC8qKgotICAgICAqIFRoZSB7QGxpbmsgU3lzdGVtI2N1cnJlbnRUaW1lTWlsbGlzKCl9IG11c3QgYmUgYXQgbGVhc3QgdGhpcyB2YWx1ZSBmb3IgdXMKLSAgICAgKiB0byBzaG93IHRoZSBub3RpZmljYXRpb24gYWdhaW4uCi0gICAgICovCi0gICAgcHJpdmF0ZSBsb25nIG1Ob3RpZmljYXRpb25SZXBlYXRUaW1lOwotICAgIC8qKgotICAgICAqIFRoZSBOb3RpZmljYXRpb24gb2JqZWN0IGdpdmVuIHRvIHRoZSBOb3RpZmljYXRpb25NYW5hZ2VyLgotICAgICAqLwotICAgIHByaXZhdGUgTm90aWZpY2F0aW9uIG1Ob3RpZmljYXRpb247Ci0gICAgLyoqCi0gICAgICogV2hldGhlciB0aGUgbm90aWZpY2F0aW9uIGlzIGJlaW5nIHNob3duLCBhcyBzZXQgYnkgdXMuIFRoYXQgaXMsIGlmIHRoZQotICAgICAqIHVzZXIgY2FuY2VscyB0aGUgbm90aWZpY2F0aW9uLCB3ZSB3aWxsIG5vdCByZWNlaXZlIHRoZSBjYWxsYmFjayBzbyB0aGlzCi0gICAgICogd2lsbCBzdGlsbCBiZSB0cnVlLiBXZSBvbmx5IGd1YXJhbnRlZSBpZiB0aGlzIGlzIGZhbHNlLCB0aGVuIHRoZQotICAgICAqIG5vdGlmaWNhdGlvbiBpcyBub3Qgc2hvd2luZy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbU5vdGlmaWNhdGlvblNob3duOwotICAgIC8qKgotICAgICAqIFRoZSBudW1iZXIgb2YgY29udGludW91cyBzY2FucyB0aGF0IG11c3Qgb2NjdXIgYmVmb3JlIGNvbnNpZGVyIHRoZQotICAgICAqIHN1cHBsaWNhbnQgaW4gYSBzY2FubmluZyBzdGF0ZS4gVGhpcyBhbGxvd3Mgc3VwcGxpY2FudCB0byBhc3NvY2lhdGUgd2l0aAotICAgICAqIHJlbWVtYmVyZWQgbmV0d29ya3MgdGhhdCBhcmUgaW4gdGhlIHNjYW4gcmVzdWx0cy4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNX1NDQU5TX0JFRk9SRV9BQ1RVQUxMWV9TQ0FOTklORyA9IDM7Ci0gICAgLyoqCi0gICAgICogVGhlIG51bWJlciBvZiBzY2FucyBzaW5jZSB0aGUgbGFzdCBuZXR3b3JrIHN0YXRlIGNoYW5nZS4gV2hlbiB0aGlzCi0gICAgICogZXhjZWVkcyB7QGxpbmsgI05VTV9TQ0FOU19CRUZPUkVfQUNUVUFMTFlfU0NBTk5JTkd9LCB3ZSBjb25zaWRlciB0aGUKLSAgICAgKiBzdXBwbGljYW50IHRvIGFjdHVhbGx5IGJlIHNjYW5uaW5nLiBXaGVuIHRoZSBuZXR3b3JrIHN0YXRlIGNoYW5nZXMgdG8KLSAgICAgKiBzb21ldGhpbmcgb3RoZXIgdGhhbiBzY2FubmluZywgd2UgcmVzZXQgdGhpcyB0byAwLgotICAgICAqLwotICAgIHByaXZhdGUgaW50IG1OdW1TY2Fuc1NpbmNlTmV0d29ya1N0YXRlQ2hhbmdlOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgZmluYWwgV2lmaVN0YXRlTWFjaGluZSBtV2lmaVN0YXRlTWFjaGluZTsKLSAgICBwcml2YXRlIE5ldHdvcmtJbmZvIG1OZXR3b3JrSW5mbzsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGludCBtV2lmaVN0YXRlOwotCi0gICAgV2lmaU5vdGlmaWNhdGlvbkNvbnRyb2xsZXIoQ29udGV4dCBjb250ZXh0LCBXaWZpU3RhdGVNYWNoaW5lIHdzbSkgewotICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lID0gd3NtOwotICAgICAgICBtV2lmaVN0YXRlID0gV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9VTktOT1dOOwotCi0gICAgICAgIEludGVudEZpbHRlciBmaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKCk7Ci0gICAgICAgIGZpbHRlci5hZGRBY3Rpb24oV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGZpbHRlci5hZGRBY3Rpb24oV2lmaU1hbmFnZXIuTkVUV09SS19TVEFURV9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGZpbHRlci5hZGRBY3Rpb24oV2lmaU1hbmFnZXIuU0NBTl9SRVNVTFRTX0FWQUlMQUJMRV9BQ1RJT04pOwotCi0gICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIoCi0gICAgICAgICAgICAgICAgbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVudC5nZXRBY3Rpb24oKS5lcXVhbHMoV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9DSEFOR0VEX0FDVElPTikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaVN0YXRlID0gaW50ZW50LmdldEludEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1dJRklfU1RBVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5XSUZJX1NUQVRFX1VOS05PV04pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Tm90aWZpY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGludGVudC5nZXRBY3Rpb24oKS5lcXVhbHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLk5FVFdPUktfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbU5ldHdvcmtJbmZvID0gKE5ldHdvcmtJbmZvKSBpbnRlbnQuZ2V0UGFyY2VsYWJsZUV4dHJhKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuRVhUUkFfTkVUV09SS19JTkZPKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCAmIGNsZWFyIG5vdGlmaWNhdGlvbiBvbiBhIG5ldHdvcmsgY29ubmVjdCAmIGRpc2Nvbm5lY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gobU5ldHdvcmtJbmZvLmdldERldGFpbGVkU3RhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBESVNDT05ORUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ0FQVElWRV9QT1JUQUxfQ0hFQ0s6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldE5vdGlmaWNhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnRlbnQuZ2V0QWN0aW9uKCkuZXF1YWxzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5TQ0FOX1JFU1VMVFNfQVZBSUxBQkxFX0FDVElPTikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0FuZFNldE5vdGlmaWNhdGlvbihtTmV0d29ya0luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zeW5jR2V0U2NhblJlc3VsdHNMaXN0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwgZmlsdGVyKTsKLQotICAgICAgICAvLyBTZXR0aW5nIGlzIGluIHNlY29uZHMKLSAgICAgICAgTk9USUZJQ0FUSU9OX1JFUEVBVF9ERUxBWV9NUyA9IFNldHRpbmdzLkdsb2JhbC5nZXRJbnQoY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9ORVRXT1JLU19BVkFJTEFCTEVfUkVQRUFUX0RFTEFZLCA5MDApICogMTAwMGw7Ci0gICAgICAgIG1Ob3RpZmljYXRpb25FbmFibGVkU2V0dGluZ09ic2VydmVyID0gbmV3IE5vdGlmaWNhdGlvbkVuYWJsZWRTZXR0aW5nT2JzZXJ2ZXIobmV3IEhhbmRsZXIoKSk7Ci0gICAgICAgIG1Ob3RpZmljYXRpb25FbmFibGVkU2V0dGluZ09ic2VydmVyLnJlZ2lzdGVyKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBjaGVja0FuZFNldE5vdGlmaWNhdGlvbihOZXR3b3JrSW5mbyBuZXR3b3JrSW5mbywKLSAgICAgICAgICAgIExpc3Q8U2NhblJlc3VsdD4gc2NhblJlc3VsdHMpIHsKLSAgICAgICAgLy8gVE9ETzogdW5yZWdpc3RlciBicm9hZGNhc3Qgc28gd2UgZG8gbm90IGhhdmUgdG8gY2hlY2sgaGVyZQotICAgICAgICAvLyBJZiB3ZSBzaG91bGRuJ3QgcGxhY2UgYSBub3RpZmljYXRpb24gb24gYXZhaWxhYmxlIG5ldHdvcmtzLCB0aGVuCi0gICAgICAgIC8vIGRvbid0IGJvdGhlciBkb2luZyBhbnkgb2YgdGhlIGZvbGxvd2luZwotICAgICAgICBpZiAoIW1Ob3RpZmljYXRpb25FbmFibGVkKSByZXR1cm47Ci0gICAgICAgIGlmIChuZXR3b3JrSW5mbyA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIGlmIChtV2lmaVN0YXRlICE9IFdpZmlNYW5hZ2VyLldJRklfU1RBVEVfRU5BQkxFRCkgcmV0dXJuOwotCi0gICAgICAgIE5ldHdvcmtJbmZvLlN0YXRlIHN0YXRlID0gbmV0d29ya0luZm8uZ2V0U3RhdGUoKTsKLSAgICAgICAgaWYgKChzdGF0ZSA9PSBOZXR3b3JrSW5mby5TdGF0ZS5ESVNDT05ORUNURUQpCi0gICAgICAgICAgICAgICAgfHwgKHN0YXRlID09IE5ldHdvcmtJbmZvLlN0YXRlLlVOS05PV04pKSB7Ci0gICAgICAgICAgICBpZiAoc2NhblJlc3VsdHMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGludCBudW1PcGVuTmV0d29ya3MgPSAwOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBzY2FuUmVzdWx0cy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgICAgICBTY2FuUmVzdWx0IHNjYW5SZXN1bHQgPSBzY2FuUmVzdWx0cy5nZXQoaSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy9BIGNhcGFiaWxpdHkgb2YgW0VTU10gcmVwcmVzZW50cyBhbiBvcGVuIGFjY2VzcyBwb2ludAotICAgICAgICAgICAgICAgICAgICAvL3RoYXQgaXMgYXZhaWxhYmxlIGZvciBhbiBTVEEgdG8gY29ubmVjdAotICAgICAgICAgICAgICAgICAgICBpZiAoc2NhblJlc3VsdC5jYXBhYmlsaXRpZXMgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5SZXN1bHQuY2FwYWJpbGl0aWVzLmVxdWFscygiW0VTU10iKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbnVtT3Blbk5ldHdvcmtzKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtT3Blbk5ldHdvcmtzID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoKyttTnVtU2NhbnNTaW5jZU5ldHdvcmtTdGF0ZUNoYW5nZSA+PSBOVU1fU0NBTlNfQkVGT1JFX0FDVFVBTExZX1NDQU5OSU5HKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgICAgICogV2UndmUgc2Nhbm5lZCBjb250aW51b3VzbHkgYXQgbGVhc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIE5VTV9TQ0FOU19CRUZPUkVfTk9USUZJQ0FUSU9OIHRpbWVzLiBUaGUgdXNlcgotICAgICAgICAgICAgICAgICAgICAgICAgICogcHJvYmFibHkgZG9lcyBub3QgaGF2ZSBhIHJlbWVtYmVyZWQgbmV0d29yayBpbiByYW5nZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpbmNlIG90aGVyd2lzZSBzdXBwbGljYW50IHdvdWxkIGhhdmUgdHJpZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGFzc29jaWF0ZSBhbmQgdGh1cyByZXNldHRpbmcgdGhpcyBjb3VudGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXROb3RpZmljYXRpb25WaXNpYmxlKHRydWUsIG51bU9wZW5OZXR3b3JrcywgZmFsc2UsIDApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBObyBvcGVuIG5ldHdvcmtzIGluIHJhbmdlLCByZW1vdmUgdGhlIG5vdGlmaWNhdGlvbgotICAgICAgICBzZXROb3RpZmljYXRpb25WaXNpYmxlKGZhbHNlLCAwLCBmYWxzZSwgMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xlYXJzIHZhcmlhYmxlcyByZWxhdGVkIHRvIHRyYWNraW5nIHdoZXRoZXIgYSBub3RpZmljYXRpb24gaGFzIGJlZW4KLSAgICAgKiBzaG93biByZWNlbnRseSBhbmQgY2xlYXJzIHRoZSBjdXJyZW50IG5vdGlmaWNhdGlvbi4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0Tm90aWZpY2F0aW9uKCkgewotICAgICAgICBtTm90aWZpY2F0aW9uUmVwZWF0VGltZSA9IDA7Ci0gICAgICAgIG1OdW1TY2Fuc1NpbmNlTmV0d29ya1N0YXRlQ2hhbmdlID0gMDsKLSAgICAgICAgc2V0Tm90aWZpY2F0aW9uVmlzaWJsZShmYWxzZSwgMCwgZmFsc2UsIDApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERpc3BsYXkgb3IgZG9uJ3QgZGlzcGxheSBhIG5vdGlmaWNhdGlvbiB0aGF0IHRoZXJlIGFyZSBvcGVuIFdpLUZpIG5ldHdvcmtzLgotICAgICAqIEBwYXJhbSB2aXNpYmxlIHtAY29kZSB0cnVlfSBpZiBub3RpZmljYXRpb24gc2hvdWxkIGJlIHZpc2libGUsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtIG51bU5ldHdvcmtzIHRoZSBudW1iZXIgbmV0d29ya3Mgc2VlbgotICAgICAqIEBwYXJhbSBmb3JjZSB7QGNvZGUgdHJ1ZX0gdG8gZm9yY2Ugbm90aWZpY2F0aW9uIHRvIGJlIHNob3duL25vdC1zaG93biwKLSAgICAgKiBldmVuIGlmIGl0IGlzIGFscmVhZHkgc2hvd24vbm90LXNob3duLgotICAgICAqIEBwYXJhbSBkZWxheSB0aW1lIGluIG1pbGxpc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgbm90aWZpY2F0aW9uIHNob3VsZCBiZSBtYWRlCi0gICAgICogdmlzaWJsZSBvciBpbnZpc2libGUuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldE5vdGlmaWNhdGlvblZpc2libGUoYm9vbGVhbiB2aXNpYmxlLCBpbnQgbnVtTmV0d29ya3MsIGJvb2xlYW4gZm9yY2UsCi0gICAgICAgICAgICBpbnQgZGVsYXkpIHsKLQotICAgICAgICAvLyBTaW5jZSB3ZSB1c2UgYXV0byBjYW5jZWwgb24gdGhlIG5vdGlmaWNhdGlvbiwgd2hlbiB0aGUKLSAgICAgICAgLy8gbU5ldHdvcmtzQXZhaWxhYmxlTm90aWZpY2F0aW9uU2hvd24gaXMgdHJ1ZSwgdGhlIG5vdGlmaWNhdGlvbiBtYXkKLSAgICAgICAgLy8gaGF2ZSBhY3R1YWxseSBiZWVuIGNhbmNlbGVkLiAgSG93ZXZlciwgd2hlbiBpdCBpcyBmYWxzZSB3ZSBrbm93Ci0gICAgICAgIC8vIGZvciBzdXJlIHRoYXQgaXQgaXMgbm90IGJlaW5nIHNob3duIChpdCB3aWxsIG5vdCBiZSBzaG93biBhbnkgb3RoZXIKLSAgICAgICAgLy8gcGxhY2UgdGhhbiBoZXJlKQotCi0gICAgICAgIC8vIElmIGl0IHNob3VsZCBiZSBoaWRkZW4gYW5kIGl0IGlzIGFscmVhZHkgaGlkZGVuLCB0aGVuIG5vb3AKLSAgICAgICAgaWYgKCF2aXNpYmxlICYmICFtTm90aWZpY2F0aW9uU2hvd24gJiYgIWZvcmNlKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBOb3RpZmljYXRpb25NYW5hZ2VyIG5vdGlmaWNhdGlvbk1hbmFnZXIgPSAoTm90aWZpY2F0aW9uTWFuYWdlcikgbUNvbnRleHQKLSAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0Lk5PVElGSUNBVElPTl9TRVJWSUNFKTsKLQotICAgICAgICBNZXNzYWdlIG1lc3NhZ2U7Ci0gICAgICAgIGlmICh2aXNpYmxlKSB7Ci0KLSAgICAgICAgICAgIC8vIE5vdCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkIHRvIHNob3cgdGhlIG5vdGlmaWNhdGlvbiBhZ2FpbgotICAgICAgICAgICAgaWYgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIDwgbU5vdGlmaWNhdGlvblJlcGVhdFRpbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtTm90aWZpY2F0aW9uID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgTm90aWZpY2F0aW9uIG9iamVjdC4KLSAgICAgICAgICAgICAgICBtTm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbigpOwotICAgICAgICAgICAgICAgIG1Ob3RpZmljYXRpb24ud2hlbiA9IDA7Ci0gICAgICAgICAgICAgICAgbU5vdGlmaWNhdGlvbi5pY29uID0gSUNPTl9ORVRXT1JLU19BVkFJTEFCTEU7Ci0gICAgICAgICAgICAgICAgbU5vdGlmaWNhdGlvbi5mbGFncyA9IE5vdGlmaWNhdGlvbi5GTEFHX0FVVE9fQ0FOQ0VMOwotICAgICAgICAgICAgICAgIG1Ob3RpZmljYXRpb24uY29udGVudEludGVudCA9IFRhc2tTdGFja0J1aWxkZXIuY3JlYXRlKG1Db250ZXh0KQotICAgICAgICAgICAgICAgICAgICAgICAgLmFkZE5leHRJbnRlbnRXaXRoUGFyZW50U3RhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuQUNUSU9OX1BJQ0tfV0lGSV9ORVRXT1JLKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRQZW5kaW5nSW50ZW50KDAsIDAsIG51bGwsIFVzZXJIYW5kbGUuQ1VSUkVOVCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENoYXJTZXF1ZW5jZSB0aXRsZSA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldFF1YW50aXR5VGV4dCgKLSAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5wbHVyYWxzLndpZmlfYXZhaWxhYmxlLCBudW1OZXR3b3Jrcyk7Ci0gICAgICAgICAgICBDaGFyU2VxdWVuY2UgZGV0YWlscyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldFF1YW50aXR5VGV4dCgKLSAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5wbHVyYWxzLndpZmlfYXZhaWxhYmxlX2RldGFpbGVkLCBudW1OZXR3b3Jrcyk7Ci0gICAgICAgICAgICBtTm90aWZpY2F0aW9uLnRpY2tlclRleHQgPSB0aXRsZTsKLSAgICAgICAgICAgIG1Ob3RpZmljYXRpb24uc2V0TGF0ZXN0RXZlbnRJbmZvKG1Db250ZXh0LCB0aXRsZSwgZGV0YWlscywgbU5vdGlmaWNhdGlvbi5jb250ZW50SW50ZW50KTsKLQotICAgICAgICAgICAgbU5vdGlmaWNhdGlvblJlcGVhdFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArIE5PVElGSUNBVElPTl9SRVBFQVRfREVMQVlfTVM7Ci0KLSAgICAgICAgICAgIG5vdGlmaWNhdGlvbk1hbmFnZXIubm90aWZ5QXNVc2VyKG51bGwsIElDT05fTkVUV09SS1NfQVZBSUxBQkxFLCBtTm90aWZpY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLkFMTCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBub3RpZmljYXRpb25NYW5hZ2VyLmNhbmNlbEFzVXNlcihudWxsLCBJQ09OX05FVFdPUktTX0FWQUlMQUJMRSwgVXNlckhhbmRsZS5BTEwpOwotICAgICAgICB9Ci0KLSAgICAgICAgbU5vdGlmaWNhdGlvblNob3duID0gdmlzaWJsZTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIHB3LnByaW50bG4oIm1Ob3RpZmljYXRpb25FbmFibGVkICIgKyBtTm90aWZpY2F0aW9uRW5hYmxlZCk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1Ob3RpZmljYXRpb25SZXBlYXRUaW1lICIgKyBtTm90aWZpY2F0aW9uUmVwZWF0VGltZSk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1Ob3RpZmljYXRpb25TaG93biAiICsgbU5vdGlmaWNhdGlvblNob3duKTsKLSAgICAgICAgcHcucHJpbnRsbigibU51bVNjYW5zU2luY2VOZXR3b3JrU3RhdGVDaGFuZ2UgIiArIG1OdW1TY2Fuc1NpbmNlTmV0d29ya1N0YXRlQ2hhbmdlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIE5vdGlmaWNhdGlvbkVuYWJsZWRTZXR0aW5nT2JzZXJ2ZXIgZXh0ZW5kcyBDb250ZW50T2JzZXJ2ZXIgewotICAgICAgICBwdWJsaWMgTm90aWZpY2F0aW9uRW5hYmxlZFNldHRpbmdPYnNlcnZlcihIYW5kbGVyIGhhbmRsZXIpIHsKLSAgICAgICAgICAgIHN1cGVyKGhhbmRsZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgcmVnaXN0ZXIoKSB7Ci0gICAgICAgICAgICBDb250ZW50UmVzb2x2ZXIgY3IgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKLSAgICAgICAgICAgIGNyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKFNldHRpbmdzLkdsb2JhbC5nZXRVcmlGb3IoCi0gICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX05FVFdPUktTX0FWQUlMQUJMRV9OT1RJRklDQVRJT05fT04pLCB0cnVlLCB0aGlzKTsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAoV2lmaU5vdGlmaWNhdGlvbkNvbnRyb2xsZXIudGhpcykgewotICAgICAgICAgICAgICAgIG1Ob3RpZmljYXRpb25FbmFibGVkID0gZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZShib29sZWFuIHNlbGZDaGFuZ2UpIHsKLSAgICAgICAgICAgIHN1cGVyLm9uQ2hhbmdlKHNlbGZDaGFuZ2UpOwotCi0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKFdpZmlOb3RpZmljYXRpb25Db250cm9sbGVyLnRoaXMpIHsKLSAgICAgICAgICAgICAgICBtTm90aWZpY2F0aW9uRW5hYmxlZCA9IGdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgcmVzZXROb3RpZmljYXRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBnZXRWYWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBTZXR0aW5ncy5HbG9iYWwuZ2V0SW50KG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9ORVRXT1JLU19BVkFJTEFCTEVfTk9USUZJQ0FUSU9OX09OLCAxKSA9PSAxOwotICAgICAgICB9Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaVNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmVmZGUxLi4wMDAwMDAwCi0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaTsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmFwcC5BcHBPcHNNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLkJsdWV0b290aEFkYXB0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5Db250ZW50T2JzZXJ2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuRGhjcEluZm87Ci1pbXBvcnQgYW5kcm9pZC5uZXQuRGhjcFJlc3VsdHM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTGlua0FkZHJlc3M7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya1V0aWxzOwotaW1wb3J0IGFuZHJvaWQubmV0LlJvdXRlSW5mbzsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLklXaWZpTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLlNjYW5SZXN1bHQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5CYXRjaGVkU2NhblJlc3VsdDsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLkJhdGNoZWRTY2FuU2V0dGluZ3M7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uLlByb3h5U2V0dGluZ3M7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpSW5mbzsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaVN0YXRlTWFjaGluZTsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZTsKLWltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzZW5nZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklOZXR3b3JrTWFuYWdlbWVudFNlcnZpY2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Xb3JrU291cmNlOwotaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotCi1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldDRBZGRyZXNzOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljQm9vbGVhbjsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLklCYXR0ZXJ5U3RhdHM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LlRlbGVwaG9ueUludGVudHM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Bc3luY0NoYW5uZWw7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmFtLkJhdHRlcnlTdGF0c1NlcnZpY2U7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53aWZpLldpZmlDb250cm9sbGVyLkNNRF9BSVJQTEFORV9UT0dHTEVEOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaS5XaWZpQ29udHJvbGxlci5DTURfQkFUVEVSWV9DSEFOR0VEOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaS5XaWZpQ29udHJvbGxlci5DTURfRU1FUkdFTkNZX01PREVfQ0hBTkdFRDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndpZmkuV2lmaUNvbnRyb2xsZXIuQ01EX0xPQ0tTX0NIQU5HRUQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53aWZpLldpZmlDb250cm9sbGVyLkNNRF9TQ0FOX0FMV0FZU19NT0RFX0NIQU5HRUQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53aWZpLldpZmlDb250cm9sbGVyLkNNRF9TQ1JFRU5fT0ZGOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaS5XaWZpQ29udHJvbGxlci5DTURfU0NSRUVOX09OOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaS5XaWZpQ29udHJvbGxlci5DTURfU0VUX0FQOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaS5XaWZpQ29udHJvbGxlci5DTURfVVNFUl9QUkVTRU5UOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaS5XaWZpQ29udHJvbGxlci5DTURfV0lGSV9UT0dHTEVEOwotLyoqCi0gKiBXaWZpU2VydmljZSBoYW5kbGVzIHJlbW90ZSBXaUZpIG9wZXJhdGlvbiByZXF1ZXN0cyBieSBpbXBsZW1lbnRpbmcKLSAqIHRoZSBJV2lmaU1hbmFnZXIgaW50ZXJmYWNlLgotICoKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBXaWZpU2VydmljZSBleHRlbmRzIElXaWZpTWFuYWdlci5TdHViIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldpZmlTZXJ2aWNlIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERCRyA9IGZhbHNlOwotCi0gICAgZmluYWwgV2lmaVN0YXRlTWFjaGluZSBtV2lmaVN0YXRlTWFjaGluZTsKLQotICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKLQotICAgIGZpbmFsIExvY2tMaXN0IG1Mb2NrcyA9IG5ldyBMb2NrTGlzdCgpOwotICAgIC8vIHNvbWUgd2lmaSBsb2NrIHN0YXRpc3RpY3MKLSAgICBwcml2YXRlIGludCBtRnVsbEhpZ2hQZXJmTG9ja3NBY3F1aXJlZDsKLSAgICBwcml2YXRlIGludCBtRnVsbEhpZ2hQZXJmTG9ja3NSZWxlYXNlZDsKLSAgICBwcml2YXRlIGludCBtRnVsbExvY2tzQWNxdWlyZWQ7Ci0gICAgcHJpdmF0ZSBpbnQgbUZ1bGxMb2Nrc1JlbGVhc2VkOwotICAgIHByaXZhdGUgaW50IG1TY2FuTG9ja3NBY3F1aXJlZDsKLSAgICBwcml2YXRlIGludCBtU2NhbkxvY2tzUmVsZWFzZWQ7Ci0KLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8TXVsdGljYXN0ZXI+IG1NdWx0aWNhc3RlcnMgPQotICAgICAgICAgICAgbmV3IEFycmF5TGlzdDxNdWx0aWNhc3Rlcj4oKTsKLSAgICBwcml2YXRlIGludCBtTXVsdGljYXN0RW5hYmxlZDsKLSAgICBwcml2YXRlIGludCBtTXVsdGljYXN0RGlzYWJsZWQ7Ci0KLSAgICBwcml2YXRlIGZpbmFsIElCYXR0ZXJ5U3RhdHMgbUJhdHRlcnlTdGF0czsKLSAgICBwcml2YXRlIGZpbmFsIEFwcE9wc01hbmFnZXIgbUFwcE9wczsKLQotICAgIHByaXZhdGUgU3RyaW5nIG1JbnRlcmZhY2VOYW1lOwotCi0gICAgLyogVHJhY2tzIHRoZSBvcGVuIHdpLWZpIG5ldHdvcmsgbm90aWZpY2F0aW9uICovCi0gICAgcHJpdmF0ZSBXaWZpTm90aWZpY2F0aW9uQ29udHJvbGxlciBtTm90aWZpY2F0aW9uQ29udHJvbGxlcjsKLSAgICAvKiBQb2xscyB0cmFmZmljIHN0YXRzIGFuZCBub3RpZmllcyBjbGllbnRzICovCi0gICAgcHJpdmF0ZSBXaWZpVHJhZmZpY1BvbGxlciBtVHJhZmZpY1BvbGxlcjsKLSAgICAvKiBUcmFja3MgdGhlIHBlcnNpc3RlZCBzdGF0ZXMgZm9yIHdpLWZpICYgYWlycGxhbmUgbW9kZSAqLwotICAgIGZpbmFsIFdpZmlTZXR0aW5nc1N0b3JlIG1TZXR0aW5nc1N0b3JlOwotCi0gICAgZmluYWwgYm9vbGVhbiBtQmF0Y2hlZFNjYW5TdXBwb3J0ZWQ7Ci0KLSAgICAvKioKLSAgICAgKiBBc3luY2hyb25vdXMgY2hhbm5lbCB0byBXaWZpU3RhdGVNYWNoaW5lCi0gICAgICovCi0gICAgcHJpdmF0ZSBBc3luY0NoYW5uZWwgbVdpZmlTdGF0ZU1hY2hpbmVDaGFubmVsOwotCi0gICAgLyoqCi0gICAgICogSGFuZGxlcyBjbGllbnQgY29ubmVjdGlvbnMKLSAgICAgKi8KLSAgICBwcml2YXRlIGNsYXNzIENsaWVudEhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKLQotICAgICAgICBDbGllbnRIYW5kbGVyKGFuZHJvaWQub3MuTG9vcGVyIGxvb3BlcikgewotICAgICAgICAgICAgc3VwZXIobG9vcGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBBc3luY0NoYW5uZWwuQ01EX0NIQU5ORUxfSEFMRl9DT05ORUNURUQ6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5hcmcxID09IEFzeW5jQ2hhbm5lbC5TVEFUVVNfU1VDQ0VTU0ZVTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgU2xvZy5kKFRBRywgIk5ldyBjbGllbnQgbGlzdGVuaW5nIHRvIGFzeW5jaHJvbm91cyBtZXNzYWdlcyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdHJhY2sgdGhlIGNsaWVudHMgYnkgdGhlIE1lc3NlbmdlcgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgYWx3YXlzIGF2YWlsYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgbVRyYWZmaWNQb2xsZXIuYWRkQ2xpZW50KG1zZy5yZXBseVRvKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJDbGllbnQgY29ubmVjdGlvbiBmYWlsdXJlLCBlcnJvcj0iICsgbXNnLmFyZzEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEFzeW5jQ2hhbm5lbC5DTURfQ0hBTk5FTF9ESVNDT05ORUNURUQ6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5hcmcxID09IEFzeW5jQ2hhbm5lbC5TVEFUVVNfU0VORF9VTlNVQ0NFU1NGVUwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIFNsb2cuZChUQUcsICJTZW5kIGZhaWxlZCwgY2xpZW50IGNvbm5lY3Rpb24gbG9zdCIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgU2xvZy5kKFRBRywgIkNsaWVudCBjb25uZWN0aW9uIGxvc3Qgd2l0aCByZWFzb246ICIgKyBtc2cuYXJnMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbVRyYWZmaWNQb2xsZXIucmVtb3ZlQ2xpZW50KG1zZy5yZXBseVRvKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgQXN5bmNDaGFubmVsLkNNRF9DSEFOTkVMX0ZVTExfQ09OTkVDVElPTjogewotICAgICAgICAgICAgICAgICAgICBBc3luY0NoYW5uZWwgYWMgPSBuZXcgQXN5bmNDaGFubmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFjLmNvbm5lY3QobUNvbnRleHQsIHRoaXMsIG1zZy5yZXBseVRvKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIENsaWVudCBjb21tYW5kcyBhcmUgZm9yd2FyZGVkIHRvIHN0YXRlIG1hY2hpbmUgKi8KLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNPTk5FQ1RfTkVUV09SSzoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SSzogewotICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSAoV2lmaUNvbmZpZ3VyYXRpb24pIG1zZy5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGludCBuZXR3b3JrSWQgPSBtc2cuYXJnMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsICYmIGNvbmZpZy5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVzdHJpY3RlZCBiZWNhdXNlIHRoZXJlIGlzIG5vIFVJIGZvciB0aGUgdXNlciB0bwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9uaXRvci9jb250cm9sIFBBQy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcucHJveHlTZXR0aW5ncyAhPSBQcm94eVNldHRpbmdzLlBBQykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIFNsb2cuZChUQUcsICJDb25uZWN0IHdpdGggY29uZmlnIiArIGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoTWVzc2FnZS5vYnRhaW4obXNnKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICAiQ2xpZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlIGNhbm5vdCBwcm9jZXNzIG1zZyB3aXRoIFBBQyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cud2hhdCA9PSBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUkspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlGYWlsZWQobXNnLCBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUktfRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseUZhaWxlZChtc2csIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SS19GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG5ldHdvcmtJZCAhPSBXaWZpQ29uZmlndXJhdGlvbi5JTlZBTElEX05FVFdPUktfSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIFNsb2cuZChUQUcsICJDb25uZWN0IHdpdGggbmV0d29ya0lkIiArIG5ldHdvcmtJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShNZXNzYWdlLm9idGFpbihtc2cpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJDbGllbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UgaWdub3JpbmcgaW52YWxpZCBtc2c9IiArIG1zZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXNnLndoYXQgPT0gV2lmaU1hbmFnZXIuQ09OTkVDVF9ORVRXT1JLKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlGYWlsZWQobXNnLCBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUktfRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlGYWlsZWQobXNnLCBXaWZpTWFuYWdlci5TQVZFX05FVFdPUktfRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5GT1JHRVRfTkVUV09SSzoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNUQVJUX1dQUzoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNBTkNFTF9XUFM6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5ESVNBQkxFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSDogewotICAgICAgICAgICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShNZXNzYWdlLm9idGFpbihtc2cpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICAgICAgU2xvZy5kKFRBRywgIkNsaWVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZSBpZ25vcmluZyBtc2c9IiArIG1zZyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCByZXBseUZhaWxlZChNZXNzYWdlIG1zZywgaW50IHdoYXQpIHsKLSAgICAgICAgICAgIE1lc3NhZ2UgcmVwbHkgPSBtc2cub2J0YWluKCk7Ci0gICAgICAgICAgICByZXBseS53aGF0ID0gd2hhdDsKLSAgICAgICAgICAgIHJlcGx5LmFyZzEgPSBXaWZpTWFuYWdlci5JTlZBTElEX0FSR1M7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1zZy5yZXBseVRvLnNlbmQocmVwbHkpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBpZiByZXBseSBjYW4ndCBiZSBzZW50IQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHByaXZhdGUgQ2xpZW50SGFuZGxlciBtQ2xpZW50SGFuZGxlcjsKLQotICAgIC8qKgotICAgICAqIEhhbmRsZXMgaW50ZXJhY3Rpb24gd2l0aCBXaWZpU3RhdGVNYWNoaW5lCi0gICAgICovCi0gICAgcHJpdmF0ZSBjbGFzcyBXaWZpU3RhdGVNYWNoaW5lSGFuZGxlciBleHRlbmRzIEhhbmRsZXIgewotICAgICAgICBwcml2YXRlIEFzeW5jQ2hhbm5lbCBtV3NtQ2hhbm5lbDsKLQotICAgICAgICBXaWZpU3RhdGVNYWNoaW5lSGFuZGxlcihhbmRyb2lkLm9zLkxvb3BlciBsb29wZXIpIHsKLSAgICAgICAgICAgIHN1cGVyKGxvb3Blcik7Ci0gICAgICAgICAgICBtV3NtQ2hhbm5lbCA9IG5ldyBBc3luY0NoYW5uZWwoKTsKLSAgICAgICAgICAgIG1Xc21DaGFubmVsLmNvbm5lY3QobUNvbnRleHQsIHRoaXMsIG1XaWZpU3RhdGVNYWNoaW5lLmdldEhhbmRsZXIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykgewotICAgICAgICAgICAgc3dpdGNoIChtc2cud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQXN5bmNDaGFubmVsLkNNRF9DSEFOTkVMX0hBTEZfQ09OTkVDVEVEOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtc2cuYXJnMSA9PSBBc3luY0NoYW5uZWwuU1RBVFVTX1NVQ0NFU1NGVUwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lQ2hhbm5lbCA9IG1Xc21DaGFubmVsOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIldpZmlTdGF0ZU1hY2hpbmUgY29ubmVjdGlvbiBmYWlsdXJlLCBlcnJvcj0iICsgbXNnLmFyZzEpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmVDaGFubmVsID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBBc3luY0NoYW5uZWwuQ01EX0NIQU5ORUxfRElTQ09OTkVDVEVEOiB7Ci0gICAgICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJXaWZpU3RhdGVNYWNoaW5lIGNoYW5uZWwgbG9zdCwgbXNnLmFyZzEgPSIgKyBtc2cuYXJnMSk7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lQ2hhbm5lbCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIC8vUmUtZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc3RhdGUgbWFjaGluZQotICAgICAgICAgICAgICAgICAgICBtV3NtQ2hhbm5lbC5jb25uZWN0KG1Db250ZXh0LCB0aGlzLCBtV2lmaVN0YXRlTWFjaGluZS5nZXRIYW5kbGVyKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAiV2lmaVN0YXRlTWFjaGluZUhhbmRsZXIuaGFuZGxlTWVzc2FnZSBpZ25vcmluZyBtc2c9IiArIG1zZyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBXaWZpU3RhdGVNYWNoaW5lSGFuZGxlciBtV2lmaVN0YXRlTWFjaGluZUhhbmRsZXI7Ci0KLSAgICBwcml2YXRlIFdpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZSBtV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lOwotCi0gICAgcHVibGljIFdpZmlTZXJ2aWNlKENvbnRleHQgY29udGV4dCkgewotICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0KLSAgICAgICAgbUludGVyZmFjZU5hbWUgPSAgU3lzdGVtUHJvcGVydGllcy5nZXQoIndpZmkuaW50ZXJmYWNlIiwgIndsYW4wIik7Ci0KLSAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUgPSBuZXcgV2lmaVN0YXRlTWFjaGluZShtQ29udGV4dCwgbUludGVyZmFjZU5hbWUpOwotICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5lbmFibGVSc3NpUG9sbGluZyh0cnVlKTsKLSAgICAgICAgbUJhdHRlcnlTdGF0cyA9IEJhdHRlcnlTdGF0c1NlcnZpY2UuZ2V0U2VydmljZSgpOwotICAgICAgICBtQXBwT3BzID0gKEFwcE9wc01hbmFnZXIpY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQVBQX09QU19TRVJWSUNFKTsKLQotICAgICAgICBtTm90aWZpY2F0aW9uQ29udHJvbGxlciA9IG5ldyBXaWZpTm90aWZpY2F0aW9uQ29udHJvbGxlcihtQ29udGV4dCwgbVdpZmlTdGF0ZU1hY2hpbmUpOwotICAgICAgICBtVHJhZmZpY1BvbGxlciA9IG5ldyBXaWZpVHJhZmZpY1BvbGxlcihtQ29udGV4dCwgbUludGVyZmFjZU5hbWUpOwotICAgICAgICBtU2V0dGluZ3NTdG9yZSA9IG5ldyBXaWZpU2V0dGluZ3NTdG9yZShtQ29udGV4dCk7Ci0KLSAgICAgICAgSGFuZGxlclRocmVhZCB3aWZpVGhyZWFkID0gbmV3IEhhbmRsZXJUaHJlYWQoIldpZmlTZXJ2aWNlIik7Ci0gICAgICAgIHdpZmlUaHJlYWQuc3RhcnQoKTsKLSAgICAgICAgbUNsaWVudEhhbmRsZXIgPSBuZXcgQ2xpZW50SGFuZGxlcih3aWZpVGhyZWFkLmdldExvb3BlcigpKTsKLSAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmVIYW5kbGVyID0gbmV3IFdpZmlTdGF0ZU1hY2hpbmVIYW5kbGVyKHdpZmlUaHJlYWQuZ2V0TG9vcGVyKCkpOwotICAgICAgICBtV2lmaUNvbnRyb2xsZXIgPSBuZXcgV2lmaUNvbnRyb2xsZXIobUNvbnRleHQsIHRoaXMsIHdpZmlUaHJlYWQuZ2V0TG9vcGVyKCkpOwotICAgICAgICBtV2lmaUNvbnRyb2xsZXIuc3RhcnQoKTsKLQotICAgICAgICBtQmF0Y2hlZFNjYW5TdXBwb3J0ZWQgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRCb29sZWFuKAotICAgICAgICAgICAgICAgIFIuYm9vbC5jb25maWdfd2lmaV9iYXRjaGVkX3NjYW5fc3VwcG9ydGVkKTsKLQotICAgICAgICByZWdpc3RlckZvclNjYW5Nb2RlQ2hhbmdlKCk7Ci0gICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIoCi0gICAgICAgICAgICAgICAgbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1TZXR0aW5nc1N0b3JlLmhhbmRsZUFpcnBsYW5lTW9kZVRvZ2dsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29udHJvbGxlci5zZW5kTWVzc2FnZShDTURfQUlSUExBTkVfVE9HR0xFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIG5ldyBJbnRlbnRGaWx0ZXIoSW50ZW50LkFDVElPTl9BSVJQTEFORV9NT0RFX0NIQU5HRUQpKTsKLQotICAgICAgICAvLyBBZGRpbmcgb3B0aW1pemF0aW9ucyBvZiBvbmx5IHJlY2VpdmluZyBicm9hZGNhc3RzIHdoZW4gd2lmaSBpcyBlbmFibGVkCi0gICAgICAgIC8vIGNhbiByZXN1bHQgaW4gcmFjZSBjb25kaXRpb25zIHdoZW4gYXBwcyB0b2dnbGUgd2lmaSBpbiB0aGUgYmFja2dyb3VuZAotICAgICAgICAvLyB3aXRob3V0IGFjdGl2ZSB1c2VyIGludm9sdmVtZW50LiBBbHdheXMgcmVjZWl2ZSBicm9hZGNhc3RzLgotICAgICAgICByZWdpc3RlckZvckJyb2FkY2FzdHMoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFdpZmlDb250cm9sbGVyIG1XaWZpQ29udHJvbGxlcjsKLQotICAgIC8qKgotICAgICAqIENoZWNrIGlmIFdpLUZpIG5lZWRzIHRvIGJlIGVuYWJsZWQgYW5kIHN0YXJ0Ci0gICAgICogaWYgbmVlZGVkCi0gICAgICoKLSAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25seSBhdCBib290IHRpbWUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjaGVja0FuZFN0YXJ0V2lmaSgpIHsKLSAgICAgICAgLyogQ2hlY2sgaWYgd2ktZmkgbmVlZHMgdG8gYmUgZW5hYmxlZCAqLwotICAgICAgICBib29sZWFuIHdpZmlFbmFibGVkID0gbVNldHRpbmdzU3RvcmUuaXNXaWZpVG9nZ2xlRW5hYmxlZCgpOwotICAgICAgICBTbG9nLmkoVEFHLCAiV2lmaVNlcnZpY2Ugc3RhcnRpbmcgdXAgd2l0aCBXaS1GaSAiICsKLSAgICAgICAgICAgICAgICAod2lmaUVuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7Ci0KLSAgICAgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgZGlzYWJsZWQgKGNvdWxkIGJlIGR1ZSB0byBhaXJwbGFuZSBtb2RlKSwgYXZvaWQgY2hhbmdpbmcgcGVyc2lzdAotICAgICAgICAvLyBzdGF0ZSBoZXJlCi0gICAgICAgIGlmICh3aWZpRW5hYmxlZCkgc2V0V2lmaUVuYWJsZWQod2lmaUVuYWJsZWQpOwotCi0gICAgICAgIG1XaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUgPSBXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUuCi0gICAgICAgICAgICAgICBtYWtlV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lKG1Db250ZXh0KTsKLQotICAgIH0KLQotICAgIC8qKgotICAgICAqIHNlZSB7QGxpbmsgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlciNwaW5nU3VwcGxpY2FudCgpfQotICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gcGluZ1N1cHBsaWNhbnQoKSB7Ci0gICAgICAgIGVuZm9yY2VBY2Nlc3NQZXJtaXNzaW9uKCk7Ci0gICAgICAgIGlmIChtV2lmaVN0YXRlTWFjaGluZUNoYW5uZWwgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1XaWZpU3RhdGVNYWNoaW5lLnN5bmNQaW5nU3VwcGxpY2FudChtV2lmaVN0YXRlTWFjaGluZUNoYW5uZWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU2xvZy5lKFRBRywgIm1XaWZpU3RhdGVNYWNoaW5lQ2hhbm5lbCBpcyBub3QgaW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIHNlZSB7QGxpbmsgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlciNzdGFydFNjYW4oKX0KLSAgICAgKgotICAgICAqIDxwPklmIHdvcmtTb3VyY2UgaXMgbnVsbCwgYWxsIGJsYW1lIGlzIGdpdmVuIHRvIHRoZSBjYWxsaW5nIHVpZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydFNjYW4oV29ya1NvdXJjZSB3b3JrU291cmNlKSB7Ci0gICAgICAgIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0gICAgICAgIGlmICh3b3JrU291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGVuZm9yY2VXb3JrU291cmNlUGVybWlzc2lvbigpOwotICAgICAgICAgICAgLy8gV2lmaU1hbmFnZXIgY3VycmVudGx5IGRvZXNuJ3QgdXNlIG5hbWVzLCBzbyBuZWVkIHRvIGNsZWFyIG5hbWVzIG91dCBvZiB0aGUKLSAgICAgICAgICAgIC8vIHN1cHBsaWVkIFdvcmtTb3VyY2UgdG8gYWxsb3cgZnV0dXJlIFdvcmtTb3VyY2UgY29tYmluaW5nLgotICAgICAgICAgICAgd29ya1NvdXJjZS5jbGVhck5hbWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc3RhcnRTY2FuKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHdvcmtTb3VyY2UpOwotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgQmF0Y2hlZFNjYW5SZXF1ZXN0IGV4dGVuZHMgRGVhdGhSZWNpcGllbnQgewotICAgICAgICBmaW5hbCBCYXRjaGVkU2NhblNldHRpbmdzIHNldHRpbmdzOwotICAgICAgICBmaW5hbCBpbnQgdWlkOwotICAgICAgICBmaW5hbCBpbnQgcGlkOwotICAgICAgICBmaW5hbCBXb3JrU291cmNlIHdvcmtTb3VyY2U7Ci0KLSAgICAgICAgQmF0Y2hlZFNjYW5SZXF1ZXN0KEJhdGNoZWRTY2FuU2V0dGluZ3Mgc2V0dGluZ3MsIElCaW5kZXIgYmluZGVyLCBXb3JrU291cmNlIHdzKSB7Ci0gICAgICAgICAgICBzdXBlcigwLCBudWxsLCBiaW5kZXIsIG51bGwpOwotICAgICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOwotICAgICAgICAgICAgdGhpcy51aWQgPSBnZXRDYWxsaW5nVWlkKCk7Ci0gICAgICAgICAgICB0aGlzLnBpZCA9IGdldENhbGxpbmdQaWQoKTsKLSAgICAgICAgICAgIHdvcmtTb3VyY2UgPSB3czsKLSAgICAgICAgfQotICAgICAgICBwdWJsaWMgdm9pZCBiaW5kZXJEaWVkKCkgewotICAgICAgICAgICAgc3RvcEJhdGNoZWRTY2FuKHNldHRpbmdzLCB1aWQsIHBpZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgICAgIHJldHVybiAiQmF0Y2hlZFNjYW5SZXF1ZXN0e3NldHRpbmdzPSIgKyBzZXR0aW5ncyArICIsIGJpbmRlcj0iICsgbUJpbmRlciArICJ9IjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzU2FtZUFwcChpbnQgdWlkLCBpbnQgcGlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gKHRoaXMudWlkID09IHVpZCAmJiB0aGlzLnBpZCA9PSBwaWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEJhdGNoZWRTY2FuUmVxdWVzdD4gbUJhdGNoZWRTY2FubmVycyA9IG5ldyBBcnJheUxpc3Q8QmF0Y2hlZFNjYW5SZXF1ZXN0PigpOwotCi0gICAgcHVibGljIGJvb2xlYW4gaXNCYXRjaGVkU2NhblN1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1CYXRjaGVkU2NhblN1cHBvcnRlZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBwb2xsQmF0Y2hlZFNjYW4oKSB7Ci0gICAgICAgIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0gICAgICAgIGlmIChtQmF0Y2hlZFNjYW5TdXBwb3J0ZWQgPT0gZmFsc2UpIHJldHVybjsKLSAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUucmVxdWVzdEJhdGNoZWRTY2FuUG9sbCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIHNlZSB7QGxpbmsgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlciNyZXF1ZXN0QmF0Y2hlZFNjYW4oKX0KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiByZXF1ZXN0QmF0Y2hlZFNjYW4oQmF0Y2hlZFNjYW5TZXR0aW5ncyByZXF1ZXN0ZWQsIElCaW5kZXIgYmluZGVyLAotICAgICAgICAgICAgV29ya1NvdXJjZSB3b3JrU291cmNlKSB7Ci0gICAgICAgIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0gICAgICAgIGlmICh3b3JrU291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGVuZm9yY2VXb3JrU291cmNlUGVybWlzc2lvbigpOwotICAgICAgICAgICAgLy8gV2lmaU1hbmFnZXIgY3VycmVudGx5IGRvZXNuJ3QgdXNlIG5hbWVzLCBzbyBuZWVkIHRvIGNsZWFyIG5hbWVzIG91dCBvZiB0aGUKLSAgICAgICAgICAgIC8vIHN1cHBsaWVkIFdvcmtTb3VyY2UgdG8gYWxsb3cgZnV0dXJlIFdvcmtTb3VyY2UgY29tYmluaW5nLgotICAgICAgICAgICAgd29ya1NvdXJjZS5jbGVhck5hbWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1CYXRjaGVkU2NhblN1cHBvcnRlZCA9PSBmYWxzZSkgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXF1ZXN0ZWQgPSBuZXcgQmF0Y2hlZFNjYW5TZXR0aW5ncyhyZXF1ZXN0ZWQpOwotICAgICAgICBpZiAocmVxdWVzdGVkLmlzSW52YWxpZCgpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEJhdGNoZWRTY2FuUmVxdWVzdCByID0gbmV3IEJhdGNoZWRTY2FuUmVxdWVzdChyZXF1ZXN0ZWQsIGJpbmRlciwgd29ya1NvdXJjZSk7Ci0gICAgICAgIHN5bmNocm9uaXplZChtQmF0Y2hlZFNjYW5uZXJzKSB7Ci0gICAgICAgICAgICBtQmF0Y2hlZFNjYW5uZXJzLmFkZChyKTsKLSAgICAgICAgICAgIHJlc29sdmVCYXRjaGVkU2Nhbm5lcnNMb2NrZWQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdDxCYXRjaGVkU2NhblJlc3VsdD4gZ2V0QmF0Y2hlZFNjYW5SZXN1bHRzKFN0cmluZyBjYWxsaW5nUGFja2FnZSkgewotICAgICAgICBlbmZvcmNlQWNjZXNzUGVybWlzc2lvbigpOwotICAgICAgICBpZiAobUJhdGNoZWRTY2FuU3VwcG9ydGVkID09IGZhbHNlKSByZXR1cm4gbmV3IEFycmF5TGlzdDxCYXRjaGVkU2NhblJlc3VsdD4oKTsKLSAgICAgICAgaW50IHVzZXJJZCA9IFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpOwotICAgICAgICBpbnQgdWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKLSAgICAgICAgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKG1BcHBPcHMubm90ZU9wKEFwcE9wc01hbmFnZXIuT1BfV0lGSV9TQ0FOLCB1aWQsIGNhbGxpbmdQYWNrYWdlKQotICAgICAgICAgICAgICAgICAgICAhPSBBcHBPcHNNYW5hZ2VyLk1PREVfQUxMT1dFRCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PEJhdGNoZWRTY2FuUmVzdWx0PigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGN1cnJlbnRVc2VyID0gQWN0aXZpdHlNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7Ci0gICAgICAgICAgICBpZiAodXNlcklkICE9IGN1cnJlbnRVc2VyKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8QmF0Y2hlZFNjYW5SZXN1bHQ+KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBtV2lmaVN0YXRlTWFjaGluZS5zeW5jR2V0QmF0Y2hlZFNjYW5SZXN1bHRzTGlzdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgdm9pZCBzdG9wQmF0Y2hlZFNjYW4oQmF0Y2hlZFNjYW5TZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICBlbmZvcmNlQ2hhbmdlUGVybWlzc2lvbigpOwotICAgICAgICBpZiAobUJhdGNoZWRTY2FuU3VwcG9ydGVkID09IGZhbHNlKSByZXR1cm47Ci0gICAgICAgIHN0b3BCYXRjaGVkU2NhbihzZXR0aW5ncywgZ2V0Q2FsbGluZ1VpZCgpLCBnZXRDYWxsaW5nUGlkKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzdG9wQmF0Y2hlZFNjYW4oQmF0Y2hlZFNjYW5TZXR0aW5ncyBzZXR0aW5ncywgaW50IHVpZCwgaW50IHBpZCkgewotICAgICAgICBBcnJheUxpc3Q8QmF0Y2hlZFNjYW5SZXF1ZXN0PiBmb3VuZCA9IG5ldyBBcnJheUxpc3Q8QmF0Y2hlZFNjYW5SZXF1ZXN0PigpOwotICAgICAgICBzeW5jaHJvbml6ZWQobUJhdGNoZWRTY2FubmVycykgewotICAgICAgICAgICAgZm9yIChCYXRjaGVkU2NhblJlcXVlc3QgciA6IG1CYXRjaGVkU2Nhbm5lcnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoci5pc1NhbWVBcHAodWlkLCBwaWQpICYmIChzZXR0aW5ncyA9PSBudWxsIHx8IHNldHRpbmdzLmVxdWFscyhyLnNldHRpbmdzKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmQuYWRkKHIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MgIT0gbnVsbCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChCYXRjaGVkU2NhblJlcXVlc3QgciA6IGZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgbUJhdGNoZWRTY2FubmVycy5yZW1vdmUocik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZm91bmQuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgICAgICAgICByZXNvbHZlQmF0Y2hlZFNjYW5uZXJzTG9ja2VkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVzb2x2ZUJhdGNoZWRTY2FubmVyc0xvY2tlZCgpIHsKLSAgICAgICAgQmF0Y2hlZFNjYW5TZXR0aW5ncyBzZXR0aW5nID0gbmV3IEJhdGNoZWRTY2FuU2V0dGluZ3MoKTsKLSAgICAgICAgV29ya1NvdXJjZSByZXNwb25zaWJsZVdvcmtTb3VyY2UgPSBudWxsOwotICAgICAgICBpbnQgcmVzcG9uc2libGVVaWQgPSAwOwotICAgICAgICBkb3VibGUgcmVzcG9uc2libGVDc3BoID0gMDsgLy8gQ2hhbm5lbCBTY2FucyBQZXIgSG91cgotCi0gICAgICAgIGlmIChtQmF0Y2hlZFNjYW5uZXJzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRCYXRjaGVkU2NhblNldHRpbmdzKG51bGwsIDAsIDAsIG51bGwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoQmF0Y2hlZFNjYW5SZXF1ZXN0IHIgOiBtQmF0Y2hlZFNjYW5uZXJzKSB7Ci0gICAgICAgICAgICBCYXRjaGVkU2NhblNldHRpbmdzIHMgPSByLnNldHRpbmdzOwotCi0gICAgICAgICAgICAvLyBldmFsdWF0ZSByZXNwb25zaWJpbGl0eQotICAgICAgICAgICAgaW50IGN1cnJlbnRDaGFubmVsQ291bnQ7Ci0gICAgICAgICAgICBpbnQgY3VycmVudFNjYW5JbnRlcnZhbDsKLSAgICAgICAgICAgIGRvdWJsZSBjdXJyZW50Q3NwaDsKLQotICAgICAgICAgICAgaWYgKHMuY2hhbm5lbFNldCA9PSBudWxsIHx8IHMuY2hhbm5lbFNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBhbGwgY2hhbm5lbHMgLSAxMSBCIGFuZCA5IEEgY2hhbm5lbHMgcm91Z2hseS4KLSAgICAgICAgICAgICAgICBjdXJyZW50Q2hhbm5lbENvdW50ID0gOSArIDExOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2hhbm5lbENvdW50ID0gcy5jaGFubmVsU2V0LnNpemUoKTsKLSAgICAgICAgICAgICAgICAvLyB0aGVzZSBhcmUgcm91Z2ggZXN0IC0gbm8gcmVhbCBuZWVkIHRvIGNvcnJlY3QgZm9yIHJlZy1kb21haW47Ci0gICAgICAgICAgICAgICAgaWYgKHMuY2hhbm5lbFNldC5jb250YWlucygiQSIpKSBjdXJyZW50Q2hhbm5lbENvdW50ICs9ICg5IC0gMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHMuY2hhbm5lbFNldC5jb250YWlucygiQiIpKSBjdXJyZW50Q2hhbm5lbENvdW50ICs9ICgxMSAtIDEpOwotCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocy5zY2FuSW50ZXJ2YWxTZWMgPT0gQmF0Y2hlZFNjYW5TZXR0aW5ncy5VTlNQRUNJRklFRCkgewotICAgICAgICAgICAgICAgIGN1cnJlbnRTY2FuSW50ZXJ2YWwgPSBCYXRjaGVkU2NhblNldHRpbmdzLkRFRkFVTFRfSU5URVJWQUxfU0VDOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50U2NhbkludGVydmFsID0gcy5zY2FuSW50ZXJ2YWxTZWM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJyZW50Q3NwaCA9IDYwICogNjAgKiBjdXJyZW50Q2hhbm5lbENvdW50IC8gY3VycmVudFNjYW5JbnRlcnZhbDsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnRDc3BoID4gcmVzcG9uc2libGVDc3BoKSB7Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2libGVVaWQgPSByLnVpZDsKLSAgICAgICAgICAgICAgICByZXNwb25zaWJsZVdvcmtTb3VyY2UgPSByLndvcmtTb3VyY2U7Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2libGVDc3BoID0gY3VycmVudENzcGg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzLm1heFNjYW5zUGVyQmF0Y2ggIT0gQmF0Y2hlZFNjYW5TZXR0aW5ncy5VTlNQRUNJRklFRCAmJgotICAgICAgICAgICAgICAgICAgICBzLm1heFNjYW5zUGVyQmF0Y2ggPCBzZXR0aW5nLm1heFNjYW5zUGVyQmF0Y2gpIHsKLSAgICAgICAgICAgICAgICBzZXR0aW5nLm1heFNjYW5zUGVyQmF0Y2ggPSBzLm1heFNjYW5zUGVyQmF0Y2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocy5tYXhBcFBlclNjYW4gIT0gQmF0Y2hlZFNjYW5TZXR0aW5ncy5VTlNQRUNJRklFRCAmJgotICAgICAgICAgICAgICAgICAgICAoc2V0dGluZy5tYXhBcFBlclNjYW4gPT0gQmF0Y2hlZFNjYW5TZXR0aW5ncy5VTlNQRUNJRklFRCB8fAotICAgICAgICAgICAgICAgICAgICBzLm1heEFwUGVyU2NhbiA+IHNldHRpbmcubWF4QXBQZXJTY2FuKSkgewotICAgICAgICAgICAgICAgIHNldHRpbmcubWF4QXBQZXJTY2FuID0gcy5tYXhBcFBlclNjYW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocy5zY2FuSW50ZXJ2YWxTZWMgIT0gQmF0Y2hlZFNjYW5TZXR0aW5ncy5VTlNQRUNJRklFRCAmJgotICAgICAgICAgICAgICAgICAgICBzLnNjYW5JbnRlcnZhbFNlYyA8IHNldHRpbmcuc2NhbkludGVydmFsU2VjKSB7Ci0gICAgICAgICAgICAgICAgc2V0dGluZy5zY2FuSW50ZXJ2YWxTZWMgPSBzLnNjYW5JbnRlcnZhbFNlYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzLm1heEFwRm9yRGlzdGFuY2UgIT0gQmF0Y2hlZFNjYW5TZXR0aW5ncy5VTlNQRUNJRklFRCAmJgotICAgICAgICAgICAgICAgICAgICAoc2V0dGluZy5tYXhBcEZvckRpc3RhbmNlID09IEJhdGNoZWRTY2FuU2V0dGluZ3MuVU5TUEVDSUZJRUQgfHwKLSAgICAgICAgICAgICAgICAgICAgcy5tYXhBcEZvckRpc3RhbmNlID4gc2V0dGluZy5tYXhBcEZvckRpc3RhbmNlKSkgewotICAgICAgICAgICAgICAgIHNldHRpbmcubWF4QXBGb3JEaXN0YW5jZSA9IHMubWF4QXBGb3JEaXN0YW5jZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzLmNoYW5uZWxTZXQgIT0gbnVsbCAmJiBzLmNoYW5uZWxTZXQuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5jaGFubmVsU2V0ID09IG51bGwgfHwgc2V0dGluZy5jaGFubmVsU2V0LnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmNoYW5uZWxTZXQgPT0gbnVsbCkgc2V0dGluZy5jaGFubmVsU2V0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIGkgOiBzLmNoYW5uZWxTZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmNoYW5uZWxTZXQuY29udGFpbnMoaSkgPT0gZmFsc2UpIHNldHRpbmcuY2hhbm5lbFNldC5hZGQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IC8vIGVsc2UsIGlnbm9yZSB0aGUgY29uc3RyYWludCAtIHdlIGFscmVhZHkgdXNlIGFsbCBjaGFubmVscwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5jaGFubmVsU2V0ID09IG51bGwgfHwgc2V0dGluZy5jaGFubmVsU2V0LnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldHRpbmcuY2hhbm5lbFNldCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHNldHRpbmcuY29uc3RyYWluKCk7Ci0gICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnNldEJhdGNoZWRTY2FuU2V0dGluZ3Moc2V0dGluZywgcmVzcG9uc2libGVVaWQsIChpbnQpcmVzcG9uc2libGVDc3BoLAotICAgICAgICAgICAgICAgIHJlc3BvbnNpYmxlV29ya1NvdXJjZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVuZm9yY2VBY2Nlc3NQZXJtaXNzaW9uKCkgewotICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLkFDQ0VTU19XSUZJX1NUQVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldpZmlTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCkgewotICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLkNIQU5HRV9XSUZJX1NUQVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldpZmlTZXJ2aWNlIik7Ci0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZW5mb3JjZVdvcmtTb3VyY2VQZXJtaXNzaW9uKCkgewotICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLlVQREFURV9ERVZJQ0VfU1RBVFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2lmaVNlcnZpY2UiKTsKLQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBlbmZvcmNlTXVsdGljYXN0Q2hhbmdlUGVybWlzc2lvbigpIHsKLSAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKAotICAgICAgICAgICAgICAgIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5DSEFOR0VfV0lGSV9NVUxUSUNBU1RfU1RBVEUsCi0gICAgICAgICAgICAgICAgIldpZmlTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVuZm9yY2VDb25uZWN0aXZpdHlJbnRlcm5hbFBlcm1pc3Npb24oKSB7Ci0gICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbigKLSAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uQ09OTkVDVElWSVRZX0lOVEVSTkFMLAotICAgICAgICAgICAgICAgICJDb25uZWN0aXZpdHlTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogc2VlIHtAbGluayBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyI3NldFdpZmlFbmFibGVkKGJvb2xlYW4pfQotICAgICAqIEBwYXJhbSBlbmFibGUge0Bjb2RlIHRydWV9IHRvIGVuYWJsZSwge0Bjb2RlIGZhbHNlfSB0byBkaXNhYmxlLgotICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBlbmFibGUvZGlzYWJsZSBvcGVyYXRpb24gd2FzCi0gICAgICogICAgICAgICBzdGFydGVkIG9yIGlzIGFscmVhZHkgaW4gdGhlIHF1ZXVlLgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiBzZXRXaWZpRW5hYmxlZChib29sZWFuIGVuYWJsZSkgewotICAgICAgICBlbmZvcmNlQ2hhbmdlUGVybWlzc2lvbigpOwotICAgICAgICBTbG9nLmQoVEFHLCAic2V0V2lmaUVuYWJsZWQ6ICIgKyBlbmFibGUgKyAiIHBpZD0iICsgQmluZGVyLmdldENhbGxpbmdQaWQoKQotICAgICAgICAgICAgICAgICAgICArICIsIHVpZD0iICsgQmluZGVyLmdldENhbGxpbmdVaWQoKSk7Ci0gICAgICAgIGlmIChEQkcpIHsKLSAgICAgICAgICAgIFNsb2cuZShUQUcsICJJbnZva2luZyBtV2lmaVN0YXRlTWFjaGluZS5zZXRXaWZpRW5hYmxlZFxuIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAqIENhbGxlciBtaWdodCBub3QgaGF2ZSBXUklURV9TRUNVUkVfU0VUVElOR1MsCi0gICAgICAgICogb25seSBDSEFOR0VfV0lGSV9TVEFURSBpcyBlbmZvcmNlZAotICAgICAgICAqLwotCi0gICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmICghIG1TZXR0aW5nc1N0b3JlLmhhbmRsZVdpZmlUb2dnbGVkKGVuYWJsZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHdpZmkgY2Fubm90IGJlIHRvZ2dsZWQKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1XaWZpQ29udHJvbGxlci5zZW5kTWVzc2FnZShDTURfV0lGSV9UT0dHTEVEKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogc2VlIHtAbGluayBXaWZpTWFuYWdlciNnZXRXaWZpU3RhdGUoKX0KLSAgICAgKiBAcmV0dXJuIE9uZSBvZiB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9TVEFURV9ESVNBQkxFRH0sCi0gICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9TVEFURV9ESVNBQkxJTkd9LAotICAgICAqICAgICAgICAge0BsaW5rIFdpZmlNYW5hZ2VyI1dJRklfU1RBVEVfRU5BQkxFRH0sCi0gICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9TVEFURV9FTkFCTElOR30sCi0gICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9TVEFURV9VTktOT1dOfQotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0V2lmaUVuYWJsZWRTdGF0ZSgpIHsKLSAgICAgICAgZW5mb3JjZUFjY2Vzc1Blcm1pc3Npb24oKTsKLSAgICAgICAgcmV0dXJuIG1XaWZpU3RhdGVNYWNoaW5lLnN5bmNHZXRXaWZpU3RhdGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBzZWUge0BsaW5rIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIjc2V0V2lmaUFwRW5hYmxlZChXaWZpQ29uZmlndXJhdGlvbiwgYm9vbGVhbil9Ci0gICAgICogQHBhcmFtIHdpZmlDb25maWcgU1NJRCwgc2VjdXJpdHkgYW5kIGNoYW5uZWwgZGV0YWlscyBhcwotICAgICAqICAgICAgICBwYXJ0IG9mIFdpZmlDb25maWd1cmF0aW9uCi0gICAgICogQHBhcmFtIGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgYW5kIGZhbHNlIHRvIGRpc2FibGUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRXaWZpQXBFbmFibGVkKFdpZmlDb25maWd1cmF0aW9uIHdpZmlDb25maWcsIGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICBlbmZvcmNlQ2hhbmdlUGVybWlzc2lvbigpOwotICAgICAgICAvLyBudWxsIHdpZmlDb25maWcgaXMgYSBtZWFuaW5nZnVsIGlucHV0IGZvciBDTURfU0VUX0FQCi0gICAgICAgIGlmICh3aWZpQ29uZmlnID09IG51bGwgfHwgd2lmaUNvbmZpZy5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIG1XaWZpQ29udHJvbGxlci5vYnRhaW5NZXNzYWdlKENNRF9TRVRfQVAsIGVuYWJsZWQgPyAxIDogMCwgMCwgd2lmaUNvbmZpZykuc2VuZFRvVGFyZ2V0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTbG9nLmUoVEFHLCAiSW52YWxpZCBXaWZpQ29uZmlndXJhdGlvbiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogc2VlIHtAbGluayBXaWZpTWFuYWdlciNnZXRXaWZpQXBTdGF0ZSgpfQotICAgICAqIEByZXR1cm4gT25lIG9mIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX0FQX1NUQVRFX0RJU0FCTEVEfSwKLSAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX0FQX1NUQVRFX0RJU0FCTElOR30sCi0gICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9BUF9TVEFURV9FTkFCTEVEfSwKLSAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX0FQX1NUQVRFX0VOQUJMSU5HfSwKLSAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX0FQX1NUQVRFX0ZBSUxFRH0KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFdpZmlBcEVuYWJsZWRTdGF0ZSgpIHsKLSAgICAgICAgZW5mb3JjZUFjY2Vzc1Blcm1pc3Npb24oKTsKLSAgICAgICAgcmV0dXJuIG1XaWZpU3RhdGVNYWNoaW5lLnN5bmNHZXRXaWZpQXBTdGF0ZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIHNlZSB7QGxpbmsgV2lmaU1hbmFnZXIjZ2V0V2lmaUFwQ29uZmlndXJhdGlvbigpfQotICAgICAqIEByZXR1cm4gc29mdCBhY2Nlc3MgcG9pbnQgY29uZmlndXJhdGlvbgotICAgICAqLwotICAgIHB1YmxpYyBXaWZpQ29uZmlndXJhdGlvbiBnZXRXaWZpQXBDb25maWd1cmF0aW9uKCkgewotICAgICAgICBlbmZvcmNlQWNjZXNzUGVybWlzc2lvbigpOwotICAgICAgICByZXR1cm4gbVdpZmlTdGF0ZU1hY2hpbmUuc3luY0dldFdpZmlBcENvbmZpZ3VyYXRpb24oKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBzZWUge0BsaW5rIFdpZmlNYW5hZ2VyI3NldFdpZmlBcENvbmZpZ3VyYXRpb24oV2lmaUNvbmZpZ3VyYXRpb24pfQotICAgICAqIEBwYXJhbSB3aWZpQ29uZmlnIFdpZmlDb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIHNvZnQgYWNjZXNzIHBvaW50Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0V2lmaUFwQ29uZmlndXJhdGlvbihXaWZpQ29uZmlndXJhdGlvbiB3aWZpQ29uZmlnKSB7Ci0gICAgICAgIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0gICAgICAgIGlmICh3aWZpQ29uZmlnID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh3aWZpQ29uZmlnLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2V0V2lmaUFwQ29uZmlndXJhdGlvbih3aWZpQ29uZmlnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNsb2cuZShUQUcsICJJbnZhbGlkIFdpZmlDb25maWd1cmF0aW9uIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0gZW5hYmxlIHtAY29kZSB0cnVlfSB0byBlbmFibGUsIHtAY29kZSBmYWxzZX0gdG8gZGlzYWJsZS4KLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgZW5hYmxlL2Rpc2FibGUgb3BlcmF0aW9uIHdhcwotICAgICAqICAgICAgICAgc3RhcnRlZCBvciBpcyBhbHJlYWR5IGluIHRoZSBxdWV1ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NjYW5BbHdheXNBdmFpbGFibGUoKSB7Ci0gICAgICAgIGVuZm9yY2VBY2Nlc3NQZXJtaXNzaW9uKCk7Ci0gICAgICAgIHJldHVybiBtU2V0dGluZ3NTdG9yZS5pc1NjYW5BbHdheXNBdmFpbGFibGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBzZWUge0BsaW5rIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIjZGlzY29ubmVjdCgpfQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRpc2Nvbm5lY3QoKSB7Ci0gICAgICAgIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0gICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLmRpc2Nvbm5lY3RDb21tYW5kKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogc2VlIHtAbGluayBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyI3JlY29ubmVjdCgpfQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlY29ubmVjdCgpIHsKLSAgICAgICAgZW5mb3JjZUNoYW5nZVBlcm1pc3Npb24oKTsKLSAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUucmVjb25uZWN0Q29tbWFuZCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIHNlZSB7QGxpbmsgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlciNyZWFzc29jaWF0ZSgpfQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlYXNzb2NpYXRlKCkgewotICAgICAgICBlbmZvcmNlQ2hhbmdlUGVybWlzc2lvbigpOwotICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5yZWFzc29jaWF0ZUNvbW1hbmQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBzZWUge0BsaW5rIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIjZ2V0Q29uZmlndXJlZE5ldHdvcmtzKCl9Ci0gICAgICogQHJldHVybiB0aGUgbGlzdCBvZiBjb25maWd1cmVkIG5ldHdvcmtzCi0gICAgICovCi0gICAgcHVibGljIExpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+IGdldENvbmZpZ3VyZWROZXR3b3JrcygpIHsKLSAgICAgICAgZW5mb3JjZUFjY2Vzc1Blcm1pc3Npb24oKTsKLSAgICAgICAgaWYgKG1XaWZpU3RhdGVNYWNoaW5lQ2hhbm5lbCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVdpZmlTdGF0ZU1hY2hpbmUuc3luY0dldENvbmZpZ3VyZWROZXR3b3JrcyhtV2lmaVN0YXRlTWFjaGluZUNoYW5uZWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU2xvZy5lKFRBRywgIm1XaWZpU3RhdGVNYWNoaW5lQ2hhbm5lbCBpcyBub3QgaW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogc2VlIHtAbGluayBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyI2FkZE9yVXBkYXRlTmV0d29yayhXaWZpQ29uZmlndXJhdGlvbil9Ci0gICAgICogQHJldHVybiB0aGUgc3VwcGxpY2FudC1hc3NpZ25lZCBpZGVudGlmaWVyIGZvciB0aGUgbmV3IG9yIHVwZGF0ZWQKLSAgICAgKiBuZXR3b3JrIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMsIG9yIHtAY29kZSAtMX0gaWYgaXQgZmFpbHMKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGFkZE9yVXBkYXRlTmV0d29yayhXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgZW5mb3JjZUNoYW5nZVBlcm1pc3Npb24oKTsKLSAgICAgICAgaWYgKGNvbmZpZy5wcm94eVNldHRpbmdzID09IFByb3h5U2V0dGluZ3MuUEFDKSB7Ci0gICAgICAgICAgICBlbmZvcmNlQ29ubmVjdGl2aXR5SW50ZXJuYWxQZXJtaXNzaW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvbmZpZy5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIGlmIChtV2lmaVN0YXRlTWFjaGluZUNoYW5uZWwgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtV2lmaVN0YXRlTWFjaGluZS5zeW5jQWRkT3JVcGRhdGVOZXR3b3JrKG1XaWZpU3RhdGVNYWNoaW5lQ2hhbm5lbCwgY29uZmlnKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIm1XaWZpU3RhdGVNYWNoaW5lQ2hhbm5lbCBpcyBub3QgaW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTbG9nLmUoVEFHLCAiYmFkIG5ldHdvcmsgY29uZmlndXJhdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgIC8qKgotICAgICAqIFNlZSB7QGxpbmsgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlciNyZW1vdmVOZXR3b3JrKGludCl9Ci0gICAgICogQHBhcmFtIG5ldElkIHRoZSBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uCi0gICAgICogdG8gdGhlIHN1cHBsaWNhbnQKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZAotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHJlbW92ZU5ldHdvcmsoaW50IG5ldElkKSB7Ci0gICAgICAgIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0gICAgICAgIGlmIChtV2lmaVN0YXRlTWFjaGluZUNoYW5uZWwgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1XaWZpU3RhdGVNYWNoaW5lLnN5bmNSZW1vdmVOZXR3b3JrKG1XaWZpU3RhdGVNYWNoaW5lQ2hhbm5lbCwgbmV0SWQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU2xvZy5lKFRBRywgIm1XaWZpU3RhdGVNYWNoaW5lQ2hhbm5lbCBpcyBub3QgaW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlZSB7QGxpbmsgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlciNlbmFibGVOZXR3b3JrKGludCwgYm9vbGVhbil9Ci0gICAgICogQHBhcmFtIG5ldElkIHRoZSBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uCi0gICAgICogdG8gdGhlIHN1cHBsaWNhbnQKLSAgICAgKiBAcGFyYW0gZGlzYWJsZU90aGVycyBpZiB0cnVlLCBkaXNhYmxlIGFsbCBvdGhlciBuZXR3b3Jrcy4KLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZAotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGVuYWJsZU5ldHdvcmsoaW50IG5ldElkLCBib29sZWFuIGRpc2FibGVPdGhlcnMpIHsKLSAgICAgICAgZW5mb3JjZUNoYW5nZVBlcm1pc3Npb24oKTsKLSAgICAgICAgaWYgKG1XaWZpU3RhdGVNYWNoaW5lQ2hhbm5lbCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVdpZmlTdGF0ZU1hY2hpbmUuc3luY0VuYWJsZU5ldHdvcmsobVdpZmlTdGF0ZU1hY2hpbmVDaGFubmVsLCBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgZGlzYWJsZU90aGVycyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTbG9nLmUoVEFHLCAibVdpZmlTdGF0ZU1hY2hpbmVDaGFubmVsIGlzIG5vdCBpbml0aWFsaXplZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VlIHtAbGluayBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyI2Rpc2FibGVOZXR3b3JrKGludCl9Ci0gICAgICogQHBhcmFtIG5ldElkIHRoZSBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uCi0gICAgICogdG8gdGhlIHN1cHBsaWNhbnQKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZAotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGRpc2FibGVOZXR3b3JrKGludCBuZXRJZCkgewotICAgICAgICBlbmZvcmNlQ2hhbmdlUGVybWlzc2lvbigpOwotICAgICAgICBpZiAobVdpZmlTdGF0ZU1hY2hpbmVDaGFubmVsICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtV2lmaVN0YXRlTWFjaGluZS5zeW5jRGlzYWJsZU5ldHdvcmsobVdpZmlTdGF0ZU1hY2hpbmVDaGFubmVsLCBuZXRJZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTbG9nLmUoVEFHLCAibVdpZmlTdGF0ZU1hY2hpbmVDaGFubmVsIGlzIG5vdCBpbml0aWFsaXplZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VlIHtAbGluayBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyI2dldENvbm5lY3Rpb25JbmZvKCl9Ci0gICAgICogQHJldHVybiB0aGUgV2ktRmkgaW5mb3JtYXRpb24sIGNvbnRhaW5lZCBpbiB7QGxpbmsgV2lmaUluZm99LgotICAgICAqLwotICAgIHB1YmxpYyBXaWZpSW5mbyBnZXRDb25uZWN0aW9uSW5mbygpIHsKLSAgICAgICAgZW5mb3JjZUFjY2Vzc1Blcm1pc3Npb24oKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogTWFrZSBzdXJlIHdlIGhhdmUgdGhlIGxhdGVzdCBpbmZvcm1hdGlvbiwgYnkgc2VuZGluZwotICAgICAgICAgKiBhIHN0YXR1cyByZXF1ZXN0IHRvIHRoZSBzdXBwbGljYW50LgotICAgICAgICAgKi8KLSAgICAgICAgcmV0dXJuIG1XaWZpU3RhdGVNYWNoaW5lLnN5bmNSZXF1ZXN0Q29ubmVjdGlvbkluZm8oKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgdGhlIG1vc3QgcmVjZW50IGFjY2VzcyBwb2ludCBzY2FuLCBpbiB0aGUgZm9ybSBvZgotICAgICAqIGEgbGlzdCBvZiB7QGxpbmsgU2NhblJlc3VsdH0gb2JqZWN0cy4KLSAgICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIHJlc3VsdHMKLSAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxTY2FuUmVzdWx0PiBnZXRTY2FuUmVzdWx0cyhTdHJpbmcgY2FsbGluZ1BhY2thZ2UpIHsKLSAgICAgICAgZW5mb3JjZUFjY2Vzc1Blcm1pc3Npb24oKTsKLSAgICAgICAgaW50IHVzZXJJZCA9IFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpOwotICAgICAgICBpbnQgdWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKLSAgICAgICAgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKG1BcHBPcHMubm90ZU9wKEFwcE9wc01hbmFnZXIuT1BfV0lGSV9TQ0FOLCB1aWQsIGNhbGxpbmdQYWNrYWdlKQotICAgICAgICAgICAgICAgICAgICAhPSBBcHBPcHNNYW5hZ2VyLk1PREVfQUxMT1dFRCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PFNjYW5SZXN1bHQ+KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgY3VycmVudFVzZXIgPSBBY3Rpdml0eU1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKTsKLSAgICAgICAgICAgIGlmICh1c2VySWQgIT0gY3VycmVudFVzZXIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxTY2FuUmVzdWx0PigpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbVdpZmlTdGF0ZU1hY2hpbmUuc3luY0dldFNjYW5SZXN1bHRzTGlzdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVsbCB0aGUgc3VwcGxpY2FudCB0byBwZXJzaXN0IHRoZSBjdXJyZW50IGxpc3Qgb2YgY29uZmlndXJlZCBuZXR3b3Jrcy4KLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZAotICAgICAqCi0gICAgICogVE9ETzogZGVwcmVjYXRlIHRoaXMKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzYXZlQ29uZmlndXJhdGlvbigpIHsKLSAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotICAgICAgICBlbmZvcmNlQ2hhbmdlUGVybWlzc2lvbigpOwotICAgICAgICBpZiAobVdpZmlTdGF0ZU1hY2hpbmVDaGFubmVsICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtV2lmaVN0YXRlTWFjaGluZS5zeW5jU2F2ZUNvbmZpZyhtV2lmaVN0YXRlTWFjaGluZUNoYW5uZWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU2xvZy5lKFRBRywgIm1XaWZpU3RhdGVNYWNoaW5lQ2hhbm5lbCBpcyBub3QgaW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldCB0aGUgY291bnRyeSBjb2RlCi0gICAgICogQHBhcmFtIGNvdW50cnlDb2RlIElTTyAzMTY2IGNvdW50cnkgY29kZS4KLSAgICAgKiBAcGFyYW0gcGVyc2lzdCB7QGNvZGUgdHJ1ZX0gaWYgdGhlIHNldHRpbmcgc2hvdWxkIGJlIHJlbWVtYmVyZWQuCi0gICAgICoKLSAgICAgKiBUaGUgcGVyc2lzdCBiZWhhdmlvciBleGlzdHMgc28gdGhhdCB3aWZpIGNhbiBmYWxsIGJhY2sgdG8gdGhlIGxhc3QKLSAgICAgKiBwZXJzaXN0ZWQgY291bnRyeSBjb2RlIG9uIGEgcmVzdGFydCwgd2hlbiB0aGUgbG9jYWxlIGluZm9ybWF0aW9uIGlzCi0gICAgICogbm90IGF2YWlsYWJsZSBmcm9tIHRlbGVwaG9ueS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRDb3VudHJ5Q29kZShTdHJpbmcgY291bnRyeUNvZGUsIGJvb2xlYW4gcGVyc2lzdCkgewotICAgICAgICBTbG9nLmkoVEFHLCAiV2lmaVNlcnZpY2UgdHJ5aW5nIHRvIHNldCBjb3VudHJ5IGNvZGUgdG8gIiArIGNvdW50cnlDb2RlICsKLSAgICAgICAgICAgICAgICAiIHdpdGggcGVyc2lzdCBzZXQgdG8gIiArIHBlcnNpc3QpOwotICAgICAgICBlbmZvcmNlQ2hhbmdlUGVybWlzc2lvbigpOwotICAgICAgICBmaW5hbCBsb25nIHRva2VuID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRDb3VudHJ5Q29kZShjb3VudHJ5Q29kZSwgcGVyc2lzdCk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eSh0b2tlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIG9wZXJhdGlvbmFsIGZyZXF1ZW5jeSBiYW5kCi0gICAgICogQHBhcmFtIGJhbmQgT25lIG9mCi0gICAgICogICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX0ZSRVFVRU5DWV9CQU5EX0FVVE99LAotICAgICAqICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9GUkVRVUVOQ1lfQkFORF81R0hafSwKLSAgICAgKiAgICAge0BsaW5rIFdpZmlNYW5hZ2VyI1dJRklfRlJFUVVFTkNZX0JBTkRfMkdIWn0sCi0gICAgICogQHBhcmFtIHBlcnNpc3Qge0Bjb2RlIHRydWV9IGlmIHRoZSBzZXR0aW5nIHNob3VsZCBiZSByZW1lbWJlcmVkLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RnJlcXVlbmN5QmFuZChpbnQgYmFuZCwgYm9vbGVhbiBwZXJzaXN0KSB7Ci0gICAgICAgIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0gICAgICAgIGlmICghaXNEdWFsQmFuZFN1cHBvcnRlZCgpKSByZXR1cm47Ci0gICAgICAgIFNsb2cuaShUQUcsICJXaWZpU2VydmljZSB0cnlpbmcgdG8gc2V0IGZyZXF1ZW5jeSBiYW5kIHRvICIgKyBiYW5kICsKLSAgICAgICAgICAgICAgICAiIHdpdGggcGVyc2lzdCBzZXQgdG8gIiArIHBlcnNpc3QpOwotICAgICAgICBmaW5hbCBsb25nIHRva2VuID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXRGcmVxdWVuY3lCYW5kKGJhbmQsIHBlcnNpc3QpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkodG9rZW4pOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBHZXQgdGhlIG9wZXJhdGlvbmFsIGZyZXF1ZW5jeSBiYW5kCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXRGcmVxdWVuY3lCYW5kKCkgewotICAgICAgICBlbmZvcmNlQWNjZXNzUGVybWlzc2lvbigpOwotICAgICAgICByZXR1cm4gbVdpZmlTdGF0ZU1hY2hpbmUuZ2V0RnJlcXVlbmN5QmFuZCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzRHVhbEJhbmRTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIC8vVE9ETzogU2hvdWxkIG1vdmUgdG93YXJkcyBhZGRpbmcgYSBkcml2ZXIgQVBJIHRoYXQgY2hlY2tzIGF0IHJ1bnRpbWUKLSAgICAgICAgcmV0dXJuIG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldEJvb2xlYW4oCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5ib29sLmNvbmZpZ193aWZpX2R1YWxfYmFuZF9zdXBwb3J0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIERIQ1AtYXNzaWduZWQgYWRkcmVzc2VzIGZyb20gdGhlIGxhc3Qgc3VjY2Vzc2Z1bCBESENQIHJlcXVlc3QsCi0gICAgICogaWYgYW55LgotICAgICAqIEByZXR1cm4gdGhlIERIQ1AgaW5mb3JtYXRpb24KLSAgICAgKiBAZGVwcmVjYXRlZAotICAgICAqLwotICAgIHB1YmxpYyBEaGNwSW5mbyBnZXREaGNwSW5mbygpIHsKLSAgICAgICAgZW5mb3JjZUFjY2Vzc1Blcm1pc3Npb24oKTsKLSAgICAgICAgRGhjcFJlc3VsdHMgZGhjcFJlc3VsdHMgPSBtV2lmaVN0YXRlTWFjaGluZS5zeW5jR2V0RGhjcFJlc3VsdHMoKTsKLSAgICAgICAgaWYgKGRoY3BSZXN1bHRzLmxpbmtQcm9wZXJ0aWVzID09IG51bGwpIHJldHVybiBudWxsOwotCi0gICAgICAgIERoY3BJbmZvIGluZm8gPSBuZXcgRGhjcEluZm8oKTsKLSAgICAgICAgZm9yIChMaW5rQWRkcmVzcyBsYSA6IGRoY3BSZXN1bHRzLmxpbmtQcm9wZXJ0aWVzLmdldExpbmtBZGRyZXNzZXMoKSkgewotICAgICAgICAgICAgSW5ldEFkZHJlc3MgYWRkciA9IGxhLmdldEFkZHJlc3MoKTsKLSAgICAgICAgICAgIGlmIChhZGRyIGluc3RhbmNlb2YgSW5ldDRBZGRyZXNzKSB7Ci0gICAgICAgICAgICAgICAgaW5mby5pcEFkZHJlc3MgPSBOZXR3b3JrVXRpbHMuaW5ldEFkZHJlc3NUb0ludCgoSW5ldDRBZGRyZXNzKWFkZHIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAoUm91dGVJbmZvIHIgOiBkaGNwUmVzdWx0cy5saW5rUHJvcGVydGllcy5nZXRSb3V0ZXMoKSkgewotICAgICAgICAgICAgaWYgKHIuaXNEZWZhdWx0Um91dGUoKSkgewotICAgICAgICAgICAgICAgIEluZXRBZGRyZXNzIGdhdGV3YXkgPSByLmdldEdhdGV3YXkoKTsKLSAgICAgICAgICAgICAgICBpZiAoZ2F0ZXdheSBpbnN0YW5jZW9mIEluZXQ0QWRkcmVzcykgewotICAgICAgICAgICAgICAgICAgICBpbmZvLmdhdGV3YXkgPSBOZXR3b3JrVXRpbHMuaW5ldEFkZHJlc3NUb0ludCgoSW5ldDRBZGRyZXNzKWdhdGV3YXkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoci5oYXNHYXRld2F5KCkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICBMaW5rQWRkcmVzcyBkZXN0ID0gci5nZXREZXN0aW5hdGlvbigpOwotICAgICAgICAgICAgICAgIGlmIChkZXN0LmdldEFkZHJlc3MoKSBpbnN0YW5jZW9mIEluZXQ0QWRkcmVzcykgewotICAgICAgICAgICAgICAgICAgICBpbmZvLm5ldG1hc2sgPSBOZXR3b3JrVXRpbHMucHJlZml4TGVuZ3RoVG9OZXRtYXNrSW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QuZ2V0TmV0d29ya1ByZWZpeExlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGRuc0ZvdW5kID0gMDsKLSAgICAgICAgZm9yIChJbmV0QWRkcmVzcyBkbnMgOiBkaGNwUmVzdWx0cy5saW5rUHJvcGVydGllcy5nZXREbnNlcygpKSB7Ci0gICAgICAgICAgICBpZiAoZG5zIGluc3RhbmNlb2YgSW5ldDRBZGRyZXNzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRuc0ZvdW5kID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mby5kbnMxID0gTmV0d29ya1V0aWxzLmluZXRBZGRyZXNzVG9JbnQoKEluZXQ0QWRkcmVzcylkbnMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8uZG5zMiA9IE5ldHdvcmtVdGlscy5pbmV0QWRkcmVzc1RvSW50KChJbmV0NEFkZHJlc3MpZG5zKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCsrZG5zRm91bmQgPiAxKSBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBJbmV0QWRkcmVzcyBzZXJ2ZXJBZGRyZXNzID0gZGhjcFJlc3VsdHMuc2VydmVyQWRkcmVzczsKLSAgICAgICAgaWYgKHNlcnZlckFkZHJlc3MgaW5zdGFuY2VvZiBJbmV0NEFkZHJlc3MpIHsKLSAgICAgICAgICAgIGluZm8uc2VydmVyQWRkcmVzcyA9IE5ldHdvcmtVdGlscy5pbmV0QWRkcmVzc1RvSW50KChJbmV0NEFkZHJlc3Mpc2VydmVyQWRkcmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5mby5sZWFzZUR1cmF0aW9uID0gZGhjcFJlc3VsdHMubGVhc2VEdXJhdGlvbjsKLQotICAgICAgICByZXR1cm4gaW5mbzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBzZWUge0BsaW5rIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIjc3RhcnRXaWZpfQotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRXaWZpKCkgewotICAgICAgICBlbmZvcmNlQ29ubmVjdGl2aXR5SW50ZXJuYWxQZXJtaXNzaW9uKCk7Ci0gICAgICAgIC8qIFRPRE86IG1heSBiZSBhZGQgcGVybWlzc2lvbnMgZm9yIGFjY2VzcyBvbmx5IHRvIGNvbm5lY3Rpdml0eSBzZXJ2aWNlCi0gICAgICAgICAqIFRPRE86IGlmIGEgc3RhcnQgaXNzdWVkLCBrZWVwIHdpZmkgYWxpdmUgdW50aWwgYSBzdG9wIGlzc3VlZCBpcnJlc3BlY3RpdmUKLSAgICAgICAgICogb2YgV2lmaUxvY2sgJiBkZXZpY2UgaWRsZSBzdGF0dXMgdW5sZXNzIHdpZmkgZW5hYmxlZCBzdGF0dXMgaXMgdG9nZ2xlZAotICAgICAgICAgKi8KLQotICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZXREcml2ZXJTdGFydCh0cnVlKTsKLSAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUucmVjb25uZWN0Q29tbWFuZCgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCkgewotICAgICAgICBlbmZvcmNlQ29ubmVjdGl2aXR5SW50ZXJuYWxQZXJtaXNzaW9uKCk7Ci0gICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLmNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogc2VlIHtAbGluayBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyI3N0b3BXaWZpfQotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RvcFdpZmkoKSB7Ci0gICAgICAgIGVuZm9yY2VDb25uZWN0aXZpdHlJbnRlcm5hbFBlcm1pc3Npb24oKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogVE9ETzogaWYgYSBzdG9wIGlzIGlzc3VlZCwgd2lmaSBpcyBicm91Z2h0IHVwIG9ubHkgYnkgc3RhcnRXaWZpCi0gICAgICAgICAqIHVubGVzcyB3aWZpIGVuYWJsZWQgc3RhdHVzIGlzIHRvZ2dsZWQKLSAgICAgICAgICovCi0gICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnNldERyaXZlclN0YXJ0KGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBzZWUge0BsaW5rIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIjYWRkVG9CbGFja2xpc3R9Ci0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRUb0JsYWNrbGlzdChTdHJpbmcgYnNzaWQpIHsKLSAgICAgICAgZW5mb3JjZUNoYW5nZVBlcm1pc3Npb24oKTsKLQotICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5hZGRUb0JsYWNrbGlzdChic3NpZCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogc2VlIHtAbGluayBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyI2NsZWFyQmxhY2tsaXN0fQotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJCbGFja2xpc3QoKSB7Ci0gICAgICAgIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0KLSAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuY2xlYXJCbGFja2xpc3QoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBlbmFibGUgVERMUyBmb3IgdGhlIGxvY2FsIE5JQyB0byByZW1vdGUgTklDCi0gICAgICogVGhlIEFQUHMgZG9uJ3Qga25vdyB0aGUgcmVtb3RlIE1BQyBhZGRyZXNzIHRvIGlkZW50aWZ5IE5JQyB0aG91Z2gsCi0gICAgICogc28gd2UgbmVlZCB0byBkbyBhZGRpdGlvbmFsIHdvcmsgdG8gZmluZCBpdCBmcm9tIHJlbW90ZSBJUCBhZGRyZXNzCi0gICAgICovCi0KLSAgICBjbGFzcyBUZGxzVGFza1BhcmFtcyB7Ci0gICAgICAgIHB1YmxpYyBTdHJpbmcgcmVtb3RlSXBBZGRyZXNzOwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBlbmFibGU7Ci0gICAgfQotCi0gICAgY2xhc3MgVGRsc1Rhc2sgZXh0ZW5kcyBBc3luY1Rhc2s8VGRsc1Rhc2tQYXJhbXMsIEludGVnZXIsIEludGVnZXI+IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBJbnRlZ2VyIGRvSW5CYWNrZ3JvdW5kKFRkbHNUYXNrUGFyYW1zLi4uIHBhcmFtcykgewotCi0gICAgICAgICAgICAvLyBSZXRyaWV2ZSBwYXJhbWV0ZXJzIGZvciB0aGUgY2FsbAotICAgICAgICAgICAgVGRsc1Rhc2tQYXJhbXMgcGFyYW0gPSBwYXJhbXNbMF07Ci0gICAgICAgICAgICBTdHJpbmcgcmVtb3RlSXBBZGRyZXNzID0gcGFyYW0ucmVtb3RlSXBBZGRyZXNzLnRyaW0oKTsKLSAgICAgICAgICAgIGJvb2xlYW4gZW5hYmxlID0gcGFyYW0uZW5hYmxlOwotCi0gICAgICAgICAgICAvLyBHZXQgTUFDIGFkZHJlc3Mgb2YgUmVtb3RlIElQCi0gICAgICAgICAgICBTdHJpbmcgbWFjQWRkcmVzcyA9IG51bGw7Ci0KLSAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKCIvcHJvYy9uZXQvYXJwIikpOwotCi0gICAgICAgICAgICAgICAgLy8gU2tpcCBvdmVyIHRoZSBsaW5lIGJlYXJpbmcgY29sdW0gdGl0bGVzCi0gICAgICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLQotICAgICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIHRva2VucyA9IGxpbmUuc3BsaXQoIlsgXSsiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPCA2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIEFSUCBjb2x1bW4gZm9ybWF0IGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIEFkZHJlc3MgSFdUeXBlIEhXQWRkcmVzcyBGbGFncyBNYXNrIElGYWNlCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBpcCA9IHRva2Vuc1swXTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1hYyA9IHRva2Vuc1szXTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3RlSXBBZGRyZXNzLmVxdWFscyhpcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hY0FkZHJlc3MgPSBtYWM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChtYWNBZGRyZXNzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkRpZCBub3QgZmluZCByZW1vdGVBZGRyZXNzIHsiICsgcmVtb3RlSXBBZGRyZXNzICsgIn0gaW4gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9wcm9jL25ldC9hcnAiKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBlbmFibGVUZGxzV2l0aE1hY0FkZHJlc3MobWFjQWRkcmVzcywgZW5hYmxlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkNvdWxkIG5vdCBvcGVuIC9wcm9jL25ldC9hcnAgdG8gbG9va3VwIG1hYyBhZGRyZXNzIik7Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkNvdWxkIG5vdCByZWFkIC9wcm9jL25ldC9hcnAgdG8gbG9va3VwIG1hYyBhZGRyZXNzIik7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBlbmFibGVUZGxzKFN0cmluZyByZW1vdGVBZGRyZXNzLCBib29sZWFuIGVuYWJsZSkgewotICAgICAgICBUZGxzVGFza1BhcmFtcyBwYXJhbXMgPSBuZXcgVGRsc1Rhc2tQYXJhbXMoKTsKLSAgICAgICAgcGFyYW1zLnJlbW90ZUlwQWRkcmVzcyA9IHJlbW90ZUFkZHJlc3M7Ci0gICAgICAgIHBhcmFtcy5lbmFibGUgPSBlbmFibGU7Ci0gICAgICAgIG5ldyBUZGxzVGFzaygpLmV4ZWN1dGUocGFyYW1zKTsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyB2b2lkIGVuYWJsZVRkbHNXaXRoTWFjQWRkcmVzcyhTdHJpbmcgcmVtb3RlTWFjQWRkcmVzcywgYm9vbGVhbiBlbmFibGUpIHsKLSAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuZW5hYmxlVGRscyhyZW1vdGVNYWNBZGRyZXNzLCBlbmFibGUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBhIHJlZmVyZW5jZSB0byBoYW5kbGVyLiBUaGlzIGlzIHVzZWQgYnkgYSBjbGllbnQgdG8gZXN0YWJsaXNoCi0gICAgICogYW4gQXN5bmNDaGFubmVsIGNvbW11bmljYXRpb24gd2l0aCBXaWZpU2VydmljZQotICAgICAqLwotICAgIHB1YmxpYyBNZXNzZW5nZXIgZ2V0V2lmaVNlcnZpY2VNZXNzZW5nZXIoKSB7Ci0gICAgICAgIGVuZm9yY2VBY2Nlc3NQZXJtaXNzaW9uKCk7Ci0gICAgICAgIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0gICAgICAgIHJldHVybiBuZXcgTWVzc2VuZ2VyKG1DbGllbnRIYW5kbGVyKTsKLSAgICB9Ci0KLSAgICAvKiogR2V0IGEgcmVmZXJlbmNlIHRvIFdpZmlTdGF0ZU1hY2hpbmUgaGFuZGxlciBmb3IgQXN5bmNDaGFubmVsIGNvbW11bmljYXRpb24gKi8KLSAgICBwdWJsaWMgTWVzc2VuZ2VyIGdldFdpZmlTdGF0ZU1hY2hpbmVNZXNzZW5nZXIoKSB7Ci0gICAgICAgIGVuZm9yY2VBY2Nlc3NQZXJtaXNzaW9uKCk7Ci0gICAgICAgIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0gICAgICAgIHJldHVybiBtV2lmaVN0YXRlTWFjaGluZS5nZXRNZXNzZW5nZXIoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgdGhlIElQIGFuZCBwcm94eSBjb25maWd1cmF0aW9uIGZpbGUKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbmZpZ0ZpbGUoKSB7Ci0gICAgICAgIGVuZm9yY2VBY2Nlc3NQZXJtaXNzaW9uKCk7Ci0gICAgICAgIHJldHVybiBtV2lmaVN0YXRlTWFjaGluZS5nZXRDb25maWdGaWxlKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBCcm9hZGNhc3RSZWNlaXZlciBtUmVjZWl2ZXIgPSBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgICAgICBTdHJpbmcgYWN0aW9uID0gaW50ZW50LmdldEFjdGlvbigpOwotICAgICAgICAgICAgaWYgKGFjdGlvbi5lcXVhbHMoSW50ZW50LkFDVElPTl9TQ1JFRU5fT04pKSB7Ci0gICAgICAgICAgICAgICAgbVdpZmlDb250cm9sbGVyLnNlbmRNZXNzYWdlKENNRF9TQ1JFRU5fT04pOwotICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEludGVudC5BQ1RJT05fVVNFUl9QUkVTRU5UKSkgewotICAgICAgICAgICAgICAgIG1XaWZpQ29udHJvbGxlci5zZW5kTWVzc2FnZShDTURfVVNFUl9QUkVTRU5UKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhJbnRlbnQuQUNUSU9OX1NDUkVFTl9PRkYpKSB7Ci0gICAgICAgICAgICAgICAgbVdpZmlDb250cm9sbGVyLnNlbmRNZXNzYWdlKENNRF9TQ1JFRU5fT0ZGKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhJbnRlbnQuQUNUSU9OX0JBVFRFUllfQ0hBTkdFRCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgcGx1Z2dlZFR5cGUgPSBpbnRlbnQuZ2V0SW50RXh0cmEoInBsdWdnZWQiLCAwKTsKLSAgICAgICAgICAgICAgICBtV2lmaUNvbnRyb2xsZXIuc2VuZE1lc3NhZ2UoQ01EX0JBVFRFUllfQ0hBTkdFRCwgcGx1Z2dlZFR5cGUsIDAsIG51bGwpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEJsdWV0b290aEFkYXB0ZXIuQUNUSU9OX0NPTk5FQ1RJT05fU1RBVEVfQ0hBTkdFRCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgc3RhdGUgPSBpbnRlbnQuZ2V0SW50RXh0cmEoQmx1ZXRvb3RoQWRhcHRlci5FWFRSQV9DT05ORUNUSU9OX1NUQVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgQmx1ZXRvb3RoQWRhcHRlci5TVEFURV9ESVNDT05ORUNURUQpOwotICAgICAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnNlbmRCbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2Uoc3RhdGUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKFRlbGVwaG9ueUludGVudHMuQUNUSU9OX0VNRVJHRU5DWV9DQUxMQkFDS19NT0RFX0NIQU5HRUQpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBlbWVyZ2VuY3lNb2RlID0gaW50ZW50LmdldEJvb2xlYW5FeHRyYSgicGhvbmVpbkVDTVN0YXRlIiwgZmFsc2UpOwotICAgICAgICAgICAgICAgIG1XaWZpQ29udHJvbGxlci5zZW5kTWVzc2FnZShDTURfRU1FUkdFTkNZX01PREVfQ0hBTkdFRCwgZW1lcmdlbmN5TW9kZSA/IDEgOiAwLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBPYnNlcnZlcyBzZXR0aW5ncyBjaGFuZ2VzIHRvIHNjYW4gYWx3YXlzIG1vZGUuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyRm9yU2Nhbk1vZGVDaGFuZ2UoKSB7Ci0gICAgICAgIENvbnRlbnRPYnNlcnZlciBjb250ZW50T2JzZXJ2ZXIgPSBuZXcgQ29udGVudE9ic2VydmVyKG51bGwpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2UoYm9vbGVhbiBzZWxmQ2hhbmdlKSB7Ci0gICAgICAgICAgICAgICAgbVNldHRpbmdzU3RvcmUuaGFuZGxlV2lmaVNjYW5BbHdheXNBdmFpbGFibGVUb2dnbGVkKCk7Ci0gICAgICAgICAgICAgICAgbVdpZmlDb250cm9sbGVyLnNlbmRNZXNzYWdlKENNRF9TQ0FOX0FMV0FZU19NT0RFX0NIQU5HRUQpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5nZXRVcmlGb3IoU2V0dGluZ3MuR2xvYmFsLldJRklfU0NBTl9BTFdBWVNfQVZBSUxBQkxFKSwKLSAgICAgICAgICAgICAgICBmYWxzZSwgY29udGVudE9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJGb3JCcm9hZGNhc3RzKCkgewotICAgICAgICBJbnRlbnRGaWx0ZXIgaW50ZW50RmlsdGVyID0gbmV3IEludGVudEZpbHRlcigpOwotICAgICAgICBpbnRlbnRGaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fU0NSRUVOX09OKTsKLSAgICAgICAgaW50ZW50RmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1VTRVJfUFJFU0VOVCk7Ci0gICAgICAgIGludGVudEZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9TQ1JFRU5fT0ZGKTsKLSAgICAgICAgaW50ZW50RmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX0JBVFRFUllfQ0hBTkdFRCk7Ci0gICAgICAgIGludGVudEZpbHRlci5hZGRBY3Rpb24oV2lmaU1hbmFnZXIuTkVUV09SS19TVEFURV9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGludGVudEZpbHRlci5hZGRBY3Rpb24oQmx1ZXRvb3RoQWRhcHRlci5BQ1RJT05fQ09OTkVDVElPTl9TVEFURV9DSEFOR0VEKTsKLSAgICAgICAgaW50ZW50RmlsdGVyLmFkZEFjdGlvbihUZWxlcGhvbnlJbnRlbnRzLkFDVElPTl9FTUVSR0VOQ1lfQ0FMTEJBQ0tfTU9ERV9DSEFOR0VEKTsKLSAgICAgICAgbUNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcihtUmVjZWl2ZXIsIGludGVudEZpbHRlcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgZHVtcChGaWxlRGVzY3JpcHRvciBmZCwgUHJpbnRXcml0ZXIgcHcsIFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgaWYgKG1Db250ZXh0LmNoZWNrQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLkRVTVApCi0gICAgICAgICAgICAgICAgIT0gUGFja2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVEKSB7Ci0gICAgICAgICAgICBwdy5wcmludGxuKCJQZXJtaXNzaW9uIERlbmlhbDogY2FuJ3QgZHVtcCBXaWZpU2VydmljZSBmcm9tIGZyb20gcGlkPSIKLSAgICAgICAgICAgICAgICAgICAgKyBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpCi0gICAgICAgICAgICAgICAgICAgICsgIiwgdWlkPSIgKyBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBwdy5wcmludGxuKCJXaS1GaSBpcyAiICsgbVdpZmlTdGF0ZU1hY2hpbmUuc3luY0dldFdpZmlTdGF0ZUJ5TmFtZSgpKTsKLSAgICAgICAgcHcucHJpbnRsbigiU3RheS1hd2FrZSBjb25kaXRpb25zOiAiICsKLSAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuZ2V0SW50KG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLlNUQVlfT05fV0hJTEVfUExVR0dFRF9JTiwgMCkpOwotICAgICAgICBwdy5wcmludGxuKCJtTXVsdGljYXN0RW5hYmxlZCAiICsgbU11bHRpY2FzdEVuYWJsZWQpOwotICAgICAgICBwdy5wcmludGxuKCJtTXVsdGljYXN0RGlzYWJsZWQgIiArIG1NdWx0aWNhc3REaXNhYmxlZCk7Ci0gICAgICAgIG1XaWZpQ29udHJvbGxlci5kdW1wKGZkLCBwdywgYXJncyk7Ci0gICAgICAgIG1TZXR0aW5nc1N0b3JlLmR1bXAoZmQsIHB3LCBhcmdzKTsKLSAgICAgICAgbU5vdGlmaWNhdGlvbkNvbnRyb2xsZXIuZHVtcChmZCwgcHcsIGFyZ3MpOwotICAgICAgICBtVHJhZmZpY1BvbGxlci5kdW1wKGZkLCBwdywgYXJncyk7Ci0KLSAgICAgICAgcHcucHJpbnRsbigiTGF0ZXN0IHNjYW4gcmVzdWx0czoiKTsKLSAgICAgICAgTGlzdDxTY2FuUmVzdWx0PiBzY2FuUmVzdWx0cyA9IG1XaWZpU3RhdGVNYWNoaW5lLnN5bmNHZXRTY2FuUmVzdWx0c0xpc3QoKTsKLSAgICAgICAgaWYgKHNjYW5SZXN1bHRzICE9IG51bGwgJiYgc2NhblJlc3VsdHMuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgICAgIHB3LnByaW50bG4oIiAgQlNTSUQgICAgICAgICAgICAgIEZyZXF1ZW5jeSAgIFJTU0kgIEZsYWdzICAgICAgICAgICAgIFNTSUQiKTsKLSAgICAgICAgICAgIGZvciAoU2NhblJlc3VsdCByIDogc2NhblJlc3VsdHMpIHsKLSAgICAgICAgICAgICAgICBwdy5wcmludGYoIiAgJTE3cyAgJTlkICAlNWQgICUtMTZzICAlcyVuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5CU1NJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5mcmVxdWVuY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIubGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuY2FwYWJpbGl0aWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLlNTSUQgPT0gbnVsbCA/ICIiIDogci5TU0lEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwdy5wcmludGxuKCk7Ci0gICAgICAgIHB3LnByaW50bG4oIkxvY2tzIGFjcXVpcmVkOiAiICsgbUZ1bGxMb2Nrc0FjcXVpcmVkICsgIiBmdWxsLCAiICsKLSAgICAgICAgICAgICAgICBtRnVsbEhpZ2hQZXJmTG9ja3NBY3F1aXJlZCArICIgZnVsbCBoaWdoIHBlcmYsICIgKwotICAgICAgICAgICAgICAgIG1TY2FuTG9ja3NBY3F1aXJlZCArICIgc2NhbiIpOwotICAgICAgICBwdy5wcmludGxuKCJMb2NrcyByZWxlYXNlZDogIiArIG1GdWxsTG9ja3NSZWxlYXNlZCArICIgZnVsbCwgIiArCi0gICAgICAgICAgICAgICAgbUZ1bGxIaWdoUGVyZkxvY2tzUmVsZWFzZWQgKyAiIGZ1bGwgaGlnaCBwZXJmLCAiICsKLSAgICAgICAgICAgICAgICBtU2NhbkxvY2tzUmVsZWFzZWQgKyAiIHNjYW4iKTsKLSAgICAgICAgcHcucHJpbnRsbigpOwotICAgICAgICBwdy5wcmludGxuKCJMb2NrcyBoZWxkOiIpOwotICAgICAgICBtTG9ja3MuZHVtcChwdyk7Ci0KLSAgICAgICAgbVdpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZS5kdW1wKGZkLCBwdywgYXJncyk7Ci0gICAgICAgIHB3LnByaW50bG4oKTsKLSAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuZHVtcChmZCwgcHcsIGFyZ3MpOwotICAgICAgICBwdy5wcmludGxuKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBXaWZpTG9jayBleHRlbmRzIERlYXRoUmVjaXBpZW50IHsKLSAgICAgICAgV2lmaUxvY2soaW50IGxvY2tNb2RlLCBTdHJpbmcgdGFnLCBJQmluZGVyIGJpbmRlciwgV29ya1NvdXJjZSB3cykgewotICAgICAgICAgICAgc3VwZXIobG9ja01vZGUsIHRhZywgYmluZGVyLCB3cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBiaW5kZXJEaWVkKCkgewotICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9ja3MpIHsKLSAgICAgICAgICAgICAgICByZWxlYXNlV2lmaUxvY2tMb2NrZWQobUJpbmRlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICAgICAgcmV0dXJuICJXaWZpTG9ja3siICsgbVRhZyArICIgdHlwZT0iICsgbU1vZGUgKyAiIGJpbmRlcj0iICsgbUJpbmRlciArICJ9IjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIExvY2tMaXN0IHsKLSAgICAgICAgcHJpdmF0ZSBMaXN0PFdpZmlMb2NrPiBtTGlzdDsKLQotICAgICAgICBwcml2YXRlIExvY2tMaXN0KCkgewotICAgICAgICAgICAgbUxpc3QgPSBuZXcgQXJyYXlMaXN0PFdpZmlMb2NrPigpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3luY2hyb25pemVkIGJvb2xlYW4gaGFzTG9ja3MoKSB7Ci0gICAgICAgICAgICByZXR1cm4gIW1MaXN0LmlzRW1wdHkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN5bmNocm9uaXplZCBpbnQgZ2V0U3Ryb25nZXN0TG9ja01vZGUoKSB7Ci0gICAgICAgICAgICBpZiAobUxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFdpZmlNYW5hZ2VyLldJRklfTU9ERV9GVUxMOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUZ1bGxIaWdoUGVyZkxvY2tzQWNxdWlyZWQgPiBtRnVsbEhpZ2hQZXJmTG9ja3NSZWxlYXNlZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBXaWZpTWFuYWdlci5XSUZJX01PREVfRlVMTF9ISUdIX1BFUkY7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtRnVsbExvY2tzQWNxdWlyZWQgPiBtRnVsbExvY2tzUmVsZWFzZWQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gV2lmaU1hbmFnZXIuV0lGSV9NT0RFX0ZVTEw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBXaWZpTWFuYWdlci5XSUZJX01PREVfU0NBTl9PTkxZOwotICAgICAgICB9Ci0KLSAgICAgICAgc3luY2hyb25pemVkIHZvaWQgdXBkYXRlV29ya1NvdXJjZShXb3JrU291cmNlIHdzKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Mb2Nrcy5tTGlzdC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIHdzLmFkZChtTG9ja3MubUxpc3QuZ2V0KGkpLm1Xb3JrU291cmNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBhZGRMb2NrKFdpZmlMb2NrIGxvY2spIHsKLSAgICAgICAgICAgIGlmIChmaW5kTG9ja0J5QmluZGVyKGxvY2subUJpbmRlcikgPCAwKSB7Ci0gICAgICAgICAgICAgICAgbUxpc3QuYWRkKGxvY2spOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBXaWZpTG9jayByZW1vdmVMb2NrKElCaW5kZXIgYmluZGVyKSB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBmaW5kTG9ja0J5QmluZGVyKGJpbmRlcik7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgIFdpZmlMb2NrIHJldCA9IG1MaXN0LnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgICAgICAgcmV0LnVubGlua0RlYXRoUmVjaXBpZW50KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGludCBmaW5kTG9ja0J5QmluZGVyKElCaW5kZXIgYmluZGVyKSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IG1MaXN0LnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBpZiAobUxpc3QuZ2V0KGkpLm1CaW5kZXIgPT0gYmluZGVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBkdW1wKFByaW50V3JpdGVyIHB3KSB7Ci0gICAgICAgICAgICBmb3IgKFdpZmlMb2NrIGwgOiBtTGlzdCkgewotICAgICAgICAgICAgICAgIHB3LnByaW50KCIgICAgIik7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnRsbihsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgZW5mb3JjZVdha2VTb3VyY2VQZXJtaXNzaW9uKGludCB1aWQsIGludCBwaWQpIHsKLSAgICAgICAgaWYgKHVpZCA9PSBhbmRyb2lkLm9zLlByb2Nlc3MubXlVaWQoKSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1Db250ZXh0LmVuZm9yY2VQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5VUERBVEVfREVWSUNFX1NUQVRTLAotICAgICAgICAgICAgICAgIHBpZCwgdWlkLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBhY3F1aXJlV2lmaUxvY2soSUJpbmRlciBiaW5kZXIsIGludCBsb2NrTW9kZSwgU3RyaW5nIHRhZywgV29ya1NvdXJjZSB3cykgewotICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLldBS0VfTE9DSywgbnVsbCk7Ci0gICAgICAgIGlmIChsb2NrTW9kZSAhPSBXaWZpTWFuYWdlci5XSUZJX01PREVfRlVMTCAmJgotICAgICAgICAgICAgICAgIGxvY2tNb2RlICE9IFdpZmlNYW5hZ2VyLldJRklfTU9ERV9TQ0FOX09OTFkgJiYKLSAgICAgICAgICAgICAgICBsb2NrTW9kZSAhPSBXaWZpTWFuYWdlci5XSUZJX01PREVfRlVMTF9ISUdIX1BFUkYpIHsKLSAgICAgICAgICAgIFNsb2cuZShUQUcsICJJbGxlZ2FsIGFyZ3VtZW50LCBsb2NrTW9kZT0gIiArIGxvY2tNb2RlKTsKLSAgICAgICAgICAgIGlmIChEQkcpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImxvY2tNb2RlPSIgKyBsb2NrTW9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdzICE9IG51bGwgJiYgd3Muc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIHdzID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAod3MgIT0gbnVsbCkgewotICAgICAgICAgICAgZW5mb3JjZVdha2VTb3VyY2VQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh3cyA9PSBudWxsKSB7Ci0gICAgICAgICAgICB3cyA9IG5ldyBXb3JrU291cmNlKEJpbmRlci5nZXRDYWxsaW5nVWlkKCkpOwotICAgICAgICB9Ci0gICAgICAgIFdpZmlMb2NrIHdpZmlMb2NrID0gbmV3IFdpZmlMb2NrKGxvY2tNb2RlLCB0YWcsIGJpbmRlciwgd3MpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrcykgewotICAgICAgICAgICAgcmV0dXJuIGFjcXVpcmVXaWZpTG9ja0xvY2tlZCh3aWZpTG9jayk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbm90ZUFjcXVpcmVXaWZpTG9jayhXaWZpTG9jayB3aWZpTG9jaykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHN3aXRjaCh3aWZpTG9jay5tTW9kZSkgewotICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5XSUZJX01PREVfRlVMTDoKLSAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuV0lGSV9NT0RFX0ZVTExfSElHSF9QRVJGOgotICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5XSUZJX01PREVfU0NBTl9PTkxZOgotICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZUZ1bGxXaWZpTG9ja0FjcXVpcmVkRnJvbVNvdXJjZSh3aWZpTG9jay5tV29ya1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbm90ZVJlbGVhc2VXaWZpTG9jayhXaWZpTG9jayB3aWZpTG9jaykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHN3aXRjaCh3aWZpTG9jay5tTW9kZSkgewotICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5XSUZJX01PREVfRlVMTDoKLSAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuV0lGSV9NT0RFX0ZVTExfSElHSF9QRVJGOgotICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5XSUZJX01PREVfU0NBTl9PTkxZOgotICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZUZ1bGxXaWZpTG9ja1JlbGVhc2VkRnJvbVNvdXJjZSh3aWZpTG9jay5tV29ya1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gYWNxdWlyZVdpZmlMb2NrTG9ja2VkKFdpZmlMb2NrIHdpZmlMb2NrKSB7Ci0gICAgICAgIGlmIChEQkcpIFNsb2cuZChUQUcsICJhY3F1aXJlV2lmaUxvY2tMb2NrZWQ6ICIgKyB3aWZpTG9jayk7Ci0KLSAgICAgICAgbUxvY2tzLmFkZExvY2sod2lmaUxvY2spOwotCi0gICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG5vdGVBY3F1aXJlV2lmaUxvY2sod2lmaUxvY2spOwotICAgICAgICAgICAgc3dpdGNoKHdpZmlMb2NrLm1Nb2RlKSB7Ci0gICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLldJRklfTU9ERV9GVUxMOgotICAgICAgICAgICAgICAgICsrbUZ1bGxMb2Nrc0FjcXVpcmVkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5XSUZJX01PREVfRlVMTF9ISUdIX1BFUkY6Ci0gICAgICAgICAgICAgICAgKyttRnVsbEhpZ2hQZXJmTG9ja3NBY3F1aXJlZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5XSUZJX01PREVfU0NBTl9PTkxZOgotICAgICAgICAgICAgICAgICsrbVNjYW5Mb2Nrc0FjcXVpcmVkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVdpZmlDb250cm9sbGVyLnNlbmRNZXNzYWdlKENNRF9MT0NLU19DSEFOR0VEKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdXBkYXRlV2lmaUxvY2tXb3JrU291cmNlKElCaW5kZXIgbG9jaywgV29ya1NvdXJjZSB3cykgewotICAgICAgICBpbnQgdWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKLSAgICAgICAgaW50IHBpZCA9IEJpbmRlci5nZXRDYWxsaW5nUGlkKCk7Ci0gICAgICAgIGlmICh3cyAhPSBudWxsICYmIHdzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICB3cyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdzICE9IG51bGwpIHsKLSAgICAgICAgICAgIGVuZm9yY2VXYWtlU291cmNlUGVybWlzc2lvbih1aWQsIHBpZCk7Ci0gICAgICAgIH0KLSAgICAgICAgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9ja3MpIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBtTG9ja3MuZmluZExvY2tCeUJpbmRlcihsb2NrKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIldpZmkgbG9jayBub3QgYWN0aXZlIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFdpZmlMb2NrIHdsID0gbUxvY2tzLm1MaXN0LmdldChpbmRleCk7Ci0gICAgICAgICAgICAgICAgbm90ZVJlbGVhc2VXaWZpTG9jayh3bCk7Ci0gICAgICAgICAgICAgICAgd2wubVdvcmtTb3VyY2UgPSB3cyAhPSBudWxsID8gbmV3IFdvcmtTb3VyY2Uod3MpIDogbmV3IFdvcmtTb3VyY2UodWlkKTsKLSAgICAgICAgICAgICAgICBub3RlQWNxdWlyZVdpZmlMb2NrKHdsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHJlbGVhc2VXaWZpTG9jayhJQmluZGVyIGxvY2spIHsKLSAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5XQUtFX0xPQ0ssIG51bGwpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrcykgewotICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2VXaWZpTG9ja0xvY2tlZChsb2NrKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiByZWxlYXNlV2lmaUxvY2tMb2NrZWQoSUJpbmRlciBsb2NrKSB7Ci0gICAgICAgIGJvb2xlYW4gaGFkTG9jazsKLQotICAgICAgICBXaWZpTG9jayB3aWZpTG9jayA9IG1Mb2Nrcy5yZW1vdmVMb2NrKGxvY2spOwotCi0gICAgICAgIGlmIChEQkcpIFNsb2cuZChUQUcsICJyZWxlYXNlV2lmaUxvY2tMb2NrZWQ6ICIgKyB3aWZpTG9jayk7Ci0KLSAgICAgICAgaGFkTG9jayA9ICh3aWZpTG9jayAhPSBudWxsKTsKLQotICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAoaGFkTG9jaykgewotICAgICAgICAgICAgICAgIG5vdGVSZWxlYXNlV2lmaUxvY2sod2lmaUxvY2spOwotICAgICAgICAgICAgICAgIHN3aXRjaCh3aWZpTG9jay5tTW9kZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLldJRklfTU9ERV9GVUxMOgotICAgICAgICAgICAgICAgICAgICAgICAgKyttRnVsbExvY2tzUmVsZWFzZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5XSUZJX01PREVfRlVMTF9ISUdIX1BFUkY6Ci0gICAgICAgICAgICAgICAgICAgICAgICArK21GdWxsSGlnaFBlcmZMb2Nrc1JlbGVhc2VkOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuV0lGSV9NT0RFX1NDQU5fT05MWToKLSAgICAgICAgICAgICAgICAgICAgICAgICsrbVNjYW5Mb2Nrc1JlbGVhc2VkOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1XaWZpQ29udHJvbGxlci5zZW5kTWVzc2FnZShDTURfTE9DS1NfQ0hBTkdFRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gaGFkTG9jazsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGFic3RyYWN0IGNsYXNzIERlYXRoUmVjaXBpZW50Ci0gICAgICAgICAgICBpbXBsZW1lbnRzIElCaW5kZXIuRGVhdGhSZWNpcGllbnQgewotICAgICAgICBTdHJpbmcgbVRhZzsKLSAgICAgICAgaW50IG1Nb2RlOwotICAgICAgICBJQmluZGVyIG1CaW5kZXI7Ci0gICAgICAgIFdvcmtTb3VyY2UgbVdvcmtTb3VyY2U7Ci0KLSAgICAgICAgRGVhdGhSZWNpcGllbnQoaW50IG1vZGUsIFN0cmluZyB0YWcsIElCaW5kZXIgYmluZGVyLCBXb3JrU291cmNlIHdzKSB7Ci0gICAgICAgICAgICBzdXBlcigpOwotICAgICAgICAgICAgbVRhZyA9IHRhZzsKLSAgICAgICAgICAgIG1Nb2RlID0gbW9kZTsKLSAgICAgICAgICAgIG1CaW5kZXIgPSBiaW5kZXI7Ci0gICAgICAgICAgICBtV29ya1NvdXJjZSA9IHdzOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtQmluZGVyLmxpbmtUb0RlYXRoKHRoaXMsIDApOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBiaW5kZXJEaWVkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHVubGlua0RlYXRoUmVjaXBpZW50KCkgewotICAgICAgICAgICAgbUJpbmRlci51bmxpbmtUb0RlYXRoKHRoaXMsIDApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBNdWx0aWNhc3RlciBleHRlbmRzIERlYXRoUmVjaXBpZW50IHsKLSAgICAgICAgTXVsdGljYXN0ZXIoU3RyaW5nIHRhZywgSUJpbmRlciBiaW5kZXIpIHsKLSAgICAgICAgICAgIHN1cGVyKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHRhZywgYmluZGVyLCBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGJpbmRlckRpZWQoKSB7Ci0gICAgICAgICAgICBTbG9nLmUoVEFHLCAiTXVsdGljYXN0ZXIgYmluZGVyRGllZCIpOwotICAgICAgICAgICAgc3luY2hyb25pemVkIChtTXVsdGljYXN0ZXJzKSB7Ci0gICAgICAgICAgICAgICAgaW50IGkgPSBtTXVsdGljYXN0ZXJzLmluZGV4T2YodGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGkgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTXVsdGljYXN0ZXJMb2NrZWQoaSwgbU1vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gIk11bHRpY2FzdGVyeyIgKyBtVGFnICsgIiBiaW5kZXI9IiArIG1CaW5kZXIgKyAifSI7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgaW50IGdldFVpZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtTW9kZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemVNdWx0aWNhc3RGaWx0ZXJpbmcoKSB7Ci0gICAgICAgIGVuZm9yY2VNdWx0aWNhc3RDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChtTXVsdGljYXN0ZXJzKSB7Ci0gICAgICAgICAgICAvLyBpZiBhbnlib2R5IGhhZCByZXF1ZXN0ZWQgZmlsdGVycyBiZSBvZmYsIGxlYXZlIG9mZgotICAgICAgICAgICAgaWYgKG1NdWx0aWNhc3RlcnMuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnN0YXJ0RmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhY3F1aXJlTXVsdGljYXN0TG9jayhJQmluZGVyIGJpbmRlciwgU3RyaW5nIHRhZykgewotICAgICAgICBlbmZvcmNlTXVsdGljYXN0Q2hhbmdlUGVybWlzc2lvbigpOwotCi0gICAgICAgIHN5bmNocm9uaXplZCAobU11bHRpY2FzdGVycykgewotICAgICAgICAgICAgbU11bHRpY2FzdEVuYWJsZWQrKzsKLSAgICAgICAgICAgIG1NdWx0aWNhc3RlcnMuYWRkKG5ldyBNdWx0aWNhc3Rlcih0YWcsIGJpbmRlcikpOwotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGNvdWxkIGNhbGwgc3RvcEZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cyBvbmx5IHdoZW4KLSAgICAgICAgICAgIC8vIG91ciBuZXcgc2l6ZSA9PSAxIChmaXJzdCBjYWxsKSwgYnV0IHRoaXMgZnVuY3Rpb24gd29uJ3QKLSAgICAgICAgICAgIC8vIGJlIGNhbGxlZCBvZnRlbiBhbmQgYnkgbWFraW5nIHRoZSBzdG9wUGFja2V0IGNhbGwgZWFjaAotICAgICAgICAgICAgLy8gdGltZSB3ZSdyZSBsZXNzIGZyYWdpbGUgYW5kIHNlbGYtaGVhbGluZy4KLSAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnN0b3BGaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCB1aWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwotICAgICAgICBmaW5hbCBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpTXVsdGljYXN0RW5hYmxlZCh1aWQpOwotICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVsZWFzZU11bHRpY2FzdExvY2soKSB7Ci0gICAgICAgIGVuZm9yY2VNdWx0aWNhc3RDaGFuZ2VQZXJtaXNzaW9uKCk7Ci0KLSAgICAgICAgaW50IHVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobU11bHRpY2FzdGVycykgewotICAgICAgICAgICAgbU11bHRpY2FzdERpc2FibGVkKys7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IG1NdWx0aWNhc3RlcnMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgIE11bHRpY2FzdGVyIG0gPSBtTXVsdGljYXN0ZXJzLmdldChpKTsKLSAgICAgICAgICAgICAgICBpZiAoKG0gIT0gbnVsbCkgJiYgKG0uZ2V0VWlkKCkgPT0gdWlkKSkgewotICAgICAgICAgICAgICAgICAgICByZW1vdmVNdWx0aWNhc3RlckxvY2tlZChpLCB1aWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZW1vdmVNdWx0aWNhc3RlckxvY2tlZChpbnQgaSwgaW50IHVpZCkKLSAgICB7Ci0gICAgICAgIE11bHRpY2FzdGVyIHJlbW92ZWQgPSBtTXVsdGljYXN0ZXJzLnJlbW92ZShpKTsKLQotICAgICAgICBpZiAocmVtb3ZlZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZW1vdmVkLnVubGlua0RlYXRoUmVjaXBpZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1NdWx0aWNhc3RlcnMuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnN0YXJ0RmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpTXVsdGljYXN0RGlzYWJsZWQodWlkKTsKLSAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTXVsdGljYXN0RW5hYmxlZCgpIHsKLSAgICAgICAgZW5mb3JjZUFjY2Vzc1Blcm1pc3Npb24oKTsKLQotICAgICAgICBzeW5jaHJvbml6ZWQgKG1NdWx0aWNhc3RlcnMpIHsKLSAgICAgICAgICAgIHJldHVybiAobU11bHRpY2FzdGVycy5zaXplKCkgPiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpU2V0dGluZ3NTdG9yZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlTZXR0aW5nc1N0b3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZjgwNjEuLjAwMDAwMDAKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlTZXR0aW5nc1N0b3JlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLndpZmk7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci0KLS8qIFRyYWNrcyBwZXJzaXN0ZWQgc2V0dGluZ3MgZm9yIFdpLUZpIGFuZCBhaXJwbGFuZSBtb2RlIGludGVyYWN0aW9uICovCi1maW5hbCBjbGFzcyBXaWZpU2V0dGluZ3NTdG9yZSB7Ci0gICAgLyogVmFsdWVzIHRyYWNrZWQgaW4gU2V0dGluZ3MuR2xvYmFsLldJRklfT04gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lGSV9ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAgICA9IDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdJRklfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgPSAxOwotICAgIC8qIFdpZmkgZW5hYmxlZCB3aGlsZSBpbiBhaXJwbGFuZSBtb2RlICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdJRklfRU5BQkxFRF9BSVJQTEFORV9PVkVSUklERSAgICAgPSAyOwotICAgIC8qIFdpZmkgZGlzYWJsZWQgZHVlIHRvIGFpcnBsYW5lIG1vZGUgb24gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lGSV9ESVNBQkxFRF9BSVJQTEFORV9PTiAgICAgICAgICA9IDM7Ci0KLSAgICAvKiBQZXJzaXN0ZWQgc3RhdGUgdGhhdCB0cmFja3MgdGhlIHdpZmkgJiBhaXJwbGFuZSBpbnRlcmFjdGlvbiBmcm9tIHNldHRpbmdzICovCi0gICAgcHJpdmF0ZSBpbnQgbVBlcnNpc3RXaWZpU3RhdGUgPSBXSUZJX0RJU0FCTEVEOwotICAgIC8qIFRyYWNrcyBjdXJyZW50IGFpcnBsYW5lIG1vZGUgc3RhdGUgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbUFpcnBsYW5lTW9kZU9uID0gZmFsc2U7Ci0KLSAgICAvKiBUcmFja3MgdGhlIHNldHRpbmcgb2Ygc2NhbiBiZWluZyBhdmFpbGFibGUgZXZlbiB3aGVuIHdpLWZpIGlzIHR1cm5lZCBvZmYKLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbVNjYW5BbHdheXNBdmFpbGFibGU7Ci0KLSAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7Ci0KLSAgICAvKiBUcmFja3MgaWYgd2UgaGF2ZSBjaGVja2VkIHRoZSBzYXZlZCB3aS1maSBzdGF0ZSBhZnRlciBib290ICovCi0gICAgcHJpdmF0ZSBib29sZWFuIG1DaGVja1NhdmVkU3RhdGVBdEJvb3QgPSBmYWxzZTsKLQotICAgIFdpZmlTZXR0aW5nc1N0b3JlKENvbnRleHQgY29udGV4dCkgewotICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIG1BaXJwbGFuZU1vZGVPbiA9IGdldFBlcnNpc3RlZEFpcnBsYW5lTW9kZU9uKCk7Ci0gICAgICAgIG1QZXJzaXN0V2lmaVN0YXRlID0gZ2V0UGVyc2lzdGVkV2lmaVN0YXRlKCk7Ci0gICAgICAgIG1TY2FuQWx3YXlzQXZhaWxhYmxlID0gZ2V0UGVyc2lzdGVkU2NhbkFsd2F5c0F2YWlsYWJsZSgpOwotICAgIH0KLQotICAgIHN5bmNocm9uaXplZCBib29sZWFuIGlzV2lmaVRvZ2dsZUVuYWJsZWQoKSB7Ci0gICAgICAgIGlmICghbUNoZWNrU2F2ZWRTdGF0ZUF0Qm9vdCkgewotICAgICAgICAgICAgbUNoZWNrU2F2ZWRTdGF0ZUF0Qm9vdCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodGVzdEFuZENsZWFyV2lmaVNhdmVkU3RhdGUoKSkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUFpcnBsYW5lTW9kZU9uKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVBlcnNpc3RXaWZpU3RhdGUgPT0gV0lGSV9FTkFCTEVEX0FJUlBMQU5FX09WRVJSSURFOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG1QZXJzaXN0V2lmaVN0YXRlICE9IFdJRklfRElTQUJMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgYWlycGxhbmUgbW9kZSBpcyBjdXJyZW50bHkgb24uCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYWlycGxhbmUgbW9kZSBpcyBvbi4KLSAgICAgKi8KLSAgICBzeW5jaHJvbml6ZWQgYm9vbGVhbiBpc0FpcnBsYW5lTW9kZU9uKCkgewotICAgICAgIHJldHVybiBtQWlycGxhbmVNb2RlT247Ci0gICAgfQotCi0gICAgc3luY2hyb25pemVkIGJvb2xlYW4gaXNTY2FuQWx3YXlzQXZhaWxhYmxlKCkgewotICAgICAgICByZXR1cm4gbVNjYW5BbHdheXNBdmFpbGFibGU7Ci0gICAgfQotCi0gICAgc3luY2hyb25pemVkIGJvb2xlYW4gaGFuZGxlV2lmaVRvZ2dsZWQoYm9vbGVhbiB3aWZpRW5hYmxlZCkgewotICAgICAgICAvLyBDYW4gV2ktRmkgYmUgdG9nZ2xlZCBpbiBhaXJwbGFuZSBtb2RlID8KLSAgICAgICAgaWYgKG1BaXJwbGFuZU1vZGVPbiAmJiAhaXNBaXJwbGFuZVRvZ2dsZWFibGUoKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZmlFbmFibGVkKSB7Ci0gICAgICAgICAgICBpZiAobUFpcnBsYW5lTW9kZU9uKSB7Ci0gICAgICAgICAgICAgICAgcGVyc2lzdFdpZmlTdGF0ZShXSUZJX0VOQUJMRURfQUlSUExBTkVfT1ZFUlJJREUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwZXJzaXN0V2lmaVN0YXRlKFdJRklfRU5BQkxFRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHdpZmkgc3RhdGUgaXMgZGlzYWJsZWQsIHdlIGRvIG5vdCBjYXJlCi0gICAgICAgICAgICAvLyBpZiBhaXJwbGFuZSBtb2RlIGlzIG9uIG9yIG5vdC4gVGhlIHNjZW5hcmlvIG9mCi0gICAgICAgICAgICAvLyB3aWZpIGJlaW5nIGRpc2FibGVkIGR1ZSB0byBhaXJwbGFuZSBtb2RlIGJlaW5nIHR1cm5lZCBvbgotICAgICAgICAgICAgLy8gaXMgaGFuZGxlZCBoYW5kbGVBaXJwbGFuZU1vZGVUb2dnbGVkKCkKLSAgICAgICAgICAgIHBlcnNpc3RXaWZpU3RhdGUoV0lGSV9ESVNBQkxFRCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3luY2hyb25pemVkIGJvb2xlYW4gaGFuZGxlQWlycGxhbmVNb2RlVG9nZ2xlZCgpIHsKLSAgICAgICAgLy8gSXMgV2ktRmkgc2Vuc2l0aXZlIHRvIGFpcnBsYW5lIG1vZGUgY2hhbmdlcyA/Ci0gICAgICAgIGlmICghaXNBaXJwbGFuZVNlbnNpdGl2ZSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtQWlycGxhbmVNb2RlT24gPSBnZXRQZXJzaXN0ZWRBaXJwbGFuZU1vZGVPbigpOwotICAgICAgICBpZiAobUFpcnBsYW5lTW9kZU9uKSB7Ci0gICAgICAgICAgICAvLyBXaWZpIGRpc2FibGVkIGR1ZSB0byBhaXJwbGFuZSBvbgotICAgICAgICAgICAgaWYgKG1QZXJzaXN0V2lmaVN0YXRlID09IFdJRklfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIHBlcnNpc3RXaWZpU3RhdGUoV0lGSV9ESVNBQkxFRF9BSVJQTEFORV9PTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBPbiBhaXJwbGFuZSBtb2RlIGRpc2FibGUsIHJlc3RvcmUgd2lmaSBzdGF0ZSBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAgICAgIGlmICh0ZXN0QW5kQ2xlYXJXaWZpU2F2ZWRTdGF0ZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1QZXJzaXN0V2lmaVN0YXRlID09IFdJRklfRU5BQkxFRF9BSVJQTEFORV9PVkVSUklERSkgewotICAgICAgICAgICAgICAgIHBlcnNpc3RXaWZpU3RhdGUoV0lGSV9FTkFCTEVEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBoYW5kbGVXaWZpU2NhbkFsd2F5c0F2YWlsYWJsZVRvZ2dsZWQoKSB7Ci0gICAgICAgIG1TY2FuQWx3YXlzQXZhaWxhYmxlID0gZ2V0UGVyc2lzdGVkU2NhbkFsd2F5c0F2YWlsYWJsZSgpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcChGaWxlRGVzY3JpcHRvciBmZCwgUHJpbnRXcml0ZXIgcHcsIFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgcHcucHJpbnRsbigibVBlcnNpc3RXaWZpU3RhdGUgIiArIG1QZXJzaXN0V2lmaVN0YXRlKTsKLSAgICAgICAgcHcucHJpbnRsbigibUFpcnBsYW5lTW9kZU9uICIgKyBtQWlycGxhbmVNb2RlT24pOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBwZXJzaXN0V2lmaVN0YXRlKGludCBzdGF0ZSkgewotICAgICAgICBmaW5hbCBDb250ZW50UmVzb2x2ZXIgY3IgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKLSAgICAgICAgbVBlcnNpc3RXaWZpU3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgU2V0dGluZ3MuR2xvYmFsLnB1dEludChjciwgU2V0dGluZ3MuR2xvYmFsLldJRklfT04sIHN0YXRlKTsKLSAgICB9Ci0KLSAgICAvKiBEb2VzIFdpLUZpIG5lZWQgdG8gYmUgZGlzYWJsZWQgd2hlbiBhaXJwbGFuZSBtb2RlIGlzIG9uID8gKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNBaXJwbGFuZVNlbnNpdGl2ZSgpIHsKLSAgICAgICAgU3RyaW5nIGFpcnBsYW5lTW9kZVJhZGlvcyA9IFNldHRpbmdzLkdsb2JhbC5nZXRTdHJpbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLkFJUlBMQU5FX01PREVfUkFESU9TKTsKLSAgICAgICAgcmV0dXJuIGFpcnBsYW5lTW9kZVJhZGlvcyA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgYWlycGxhbmVNb2RlUmFkaW9zLmNvbnRhaW5zKFNldHRpbmdzLkdsb2JhbC5SQURJT19XSUZJKTsKLSAgICB9Ci0KLSAgICAvKiBJcyBXaS1GaSBhbGxvd2VkIHRvIGJlIHJlLWVuYWJsZWQgd2hpbGUgYWlycGxhbmUgbW9kZSBpcyBvbiA/ICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzQWlycGxhbmVUb2dnbGVhYmxlKCkgewotICAgICAgICBTdHJpbmcgdG9nZ2xlYWJsZVJhZGlvcyA9IFNldHRpbmdzLkdsb2JhbC5nZXRTdHJpbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLkFJUlBMQU5FX01PREVfVE9HR0xFQUJMRV9SQURJT1MpOwotICAgICAgICByZXR1cm4gdG9nZ2xlYWJsZVJhZGlvcyAhPSBudWxsCi0gICAgICAgICAgICAgICAgJiYgdG9nZ2xlYWJsZVJhZGlvcy5jb250YWlucyhTZXR0aW5ncy5HbG9iYWwuUkFESU9fV0lGSSk7Ci0gICAgfQotCi0gICAgIC8qIEFmdGVyIGEgcmVib290LCB3ZSByZXN0b3JlIHdpLWZpIHRvIGJlIG9uIGlmIGl0IHdhcyB0dXJuZWQgb2ZmIHRlbXBvcmFyaWx5IGZvciB0ZXRoZXJpbmcuCi0gICAgICAqIFRoZSBzZXR0aW5ncyBhcHAgdHJhY2tzIHRoZSBzYXZlZCBzdGF0ZSwgYnV0IHRoZSBmcmFtZXdvcmsgaGFzIHRvIGNoZWNrIGl0IGF0IGJvb3QgdG8KLSAgICAgICogbWFrZSBzdXJlIHRoZSB3aS1maSBpcyB0dXJuZWQgb24gaW4gY2FzZSBpdCB3YXMgdHVybmVkIG9mZiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGV0aGVyaW5nLgotICAgICAgKgotICAgICAgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgcGFydCBvZiB0aGUgcmVndWxhciBXSUZJX09OIHNldHRpbmcgYmVjYXVzZSB0aGlzIG9ubHkgbmVlZHMgdG8KLSAgICAgICogYmUgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBzZXR0aW5ncyBhcHAgYW5kIG5vdCB0aGUgV2ktRmkgcHVibGljIEFQSS4KLSAgICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIHRlc3RBbmRDbGVhcldpZmlTYXZlZFN0YXRlKCkgewotICAgICAgICBmaW5hbCBDb250ZW50UmVzb2x2ZXIgY3IgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKLSAgICAgICAgaW50IHdpZmlTYXZlZFN0YXRlID0gMDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHdpZmlTYXZlZFN0YXRlID0gU2V0dGluZ3MuR2xvYmFsLmdldEludChjciwgU2V0dGluZ3MuR2xvYmFsLldJRklfU0FWRURfU1RBVEUpOwotICAgICAgICAgICAgaWYod2lmaVNhdmVkU3RhdGUgPT0gMSkKLSAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwucHV0SW50KGNyLCBTZXR0aW5ncy5HbG9iYWwuV0lGSV9TQVZFRF9TVEFURSwgMCk7Ci0gICAgICAgIH0gY2F0Y2ggKFNldHRpbmdzLlNldHRpbmdOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICh3aWZpU2F2ZWRTdGF0ZSA9PSAxKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBnZXRQZXJzaXN0ZWRXaWZpU3RhdGUoKSB7Ci0gICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBjciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIFNldHRpbmdzLkdsb2JhbC5nZXRJbnQoY3IsIFNldHRpbmdzLkdsb2JhbC5XSUZJX09OKTsKLSAgICAgICAgfSBjYXRjaCAoU2V0dGluZ3MuU2V0dGluZ05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5wdXRJbnQoY3IsIFNldHRpbmdzLkdsb2JhbC5XSUZJX09OLCBXSUZJX0RJU0FCTEVEKTsKLSAgICAgICAgICAgIHJldHVybiBXSUZJX0RJU0FCTEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGdldFBlcnNpc3RlZEFpcnBsYW5lTW9kZU9uKCkgewotICAgICAgICByZXR1cm4gU2V0dGluZ3MuR2xvYmFsLmdldEludChtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuQUlSUExBTkVfTU9ERV9PTiwgMCkgPT0gMTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gZ2V0UGVyc2lzdGVkU2NhbkFsd2F5c0F2YWlsYWJsZSgpIHsKLSAgICAgICAgcmV0dXJuIFNldHRpbmdzLkdsb2JhbC5nZXRJbnQobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfU0NBTl9BTFdBWVNfQVZBSUxBQkxFLAotICAgICAgICAgICAgICAgIDApID09IDE7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlUcmFmZmljUG9sbGVyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaVRyYWZmaWNQb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ5ODU1MC4uMDAwMDAwMAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaVRyYWZmaWNQb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0luZm87Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGUuQ09OTkVDVEVEOwotaW1wb3J0IGFuZHJvaWQubmV0LlRyYWZmaWNTdGF0czsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2VuZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Bc3luY0NoYW5uZWw7Ci0KLS8qIFBvbGxzIGZvciB0cmFmZmljIHN0YXRzIGFuZCBub3RpZmllcyB0aGUgY2xpZW50cyAqLwotZmluYWwgY2xhc3MgV2lmaVRyYWZmaWNQb2xsZXIgewotICAgIC8qKgotICAgICAqIEludGVydmFsIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHBvbGxpbmcgZm9yIHRyYWZmaWMKLSAgICAgKiBzdGF0aXN0aWNzCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBPTExfVFJBRkZJQ19TVEFUU19JTlRFUlZBTF9NU0VDUyA9IDEwMDA7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRU5BQkxFX1RSQUZGSUNfU1RBVFNfUE9MTCAgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUkFGRklDX1NUQVRTX1BPTEwgICAgICAgICA9IDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFERF9DTElFTlQgICAgICAgICAgICAgICAgID0gMzsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVNT1ZFX0NMSUVOVCAgICAgICAgICAgICAgPSA0OwotCi0gICAgcHJpdmF0ZSBib29sZWFuIG1FbmFibGVUcmFmZmljU3RhdHNQb2xsID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBpbnQgbVRyYWZmaWNTdGF0c1BvbGxUb2tlbiA9IDA7Ci0gICAgcHJpdmF0ZSBsb25nIG1UeFBrdHM7Ci0gICAgcHJpdmF0ZSBsb25nIG1SeFBrdHM7Ci0gICAgLyogVHJhY2tzIGxhc3QgcmVwb3J0ZWQgZGF0YSBhY3Rpdml0eSAqLwotICAgIHByaXZhdGUgaW50IG1EYXRhQWN0aXZpdHk7Ci0KLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8TWVzc2VuZ2VyPiBtQ2xpZW50cyA9IG5ldyBBcnJheUxpc3Q8TWVzc2VuZ2VyPigpOwotICAgIC8vIGVyciBvbiB0aGUgc2lkZSBvZiB1cGRhdGluZyBhdCBib290IHNpbmNlIHNjcmVlbiBvbiBicm9hZGNhc3QgbWF5IGJlIG1pc3NlZAotICAgIC8vIHRoZSBmaXJzdCB0aW1lCi0gICAgcHJpdmF0ZSBBdG9taWNCb29sZWFuIG1TY3JlZW5PbiA9IG5ldyBBdG9taWNCb29sZWFuKHRydWUpOwotICAgIHByaXZhdGUgZmluYWwgVHJhZmZpY0hhbmRsZXIgbVRyYWZmaWNIYW5kbGVyOwotICAgIHByaXZhdGUgTmV0d29ya0luZm8gbU5ldHdvcmtJbmZvOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1JbnRlcmZhY2U7Ci0KLSAgICBXaWZpVHJhZmZpY1BvbGxlcihDb250ZXh0IGNvbnRleHQsIFN0cmluZyBpZmFjZSkgewotICAgICAgICBtSW50ZXJmYWNlID0gaWZhY2U7Ci0gICAgICAgIG1UcmFmZmljSGFuZGxlciA9IG5ldyBUcmFmZmljSGFuZGxlcigpOwotCi0gICAgICAgIEludGVudEZpbHRlciBmaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKCk7Ci0gICAgICAgIGZpbHRlci5hZGRBY3Rpb24oV2lmaU1hbmFnZXIuTkVUV09SS19TVEFURV9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9TQ1JFRU5fT0ZGKTsKLSAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1NDUkVFTl9PTik7Ci0KLSAgICAgICAgY29udGV4dC5yZWdpc3RlclJlY2VpdmVyKAotICAgICAgICAgICAgICAgIG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlbnQuZ2V0QWN0aW9uKCkuZXF1YWxzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5ORVRXT1JLX1NUQVRFX0NIQU5HRURfQUNUSU9OKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrSW5mbyA9IChOZXR3b3JrSW5mbykgaW50ZW50LmdldFBhcmNlbGFibGVFeHRyYSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVYVFJBX05FVFdPUktfSU5GTyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGludGVudC5nZXRBY3Rpb24oKS5lcXVhbHMoSW50ZW50LkFDVElPTl9TQ1JFRU5fT0ZGKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TY3JlZW5Pbi5zZXQoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnRlbnQuZ2V0QWN0aW9uKCkuZXF1YWxzKEludGVudC5BQ1RJT05fU0NSRUVOX09OKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TY3JlZW5Pbi5zZXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0ZVRyYWZmaWNTdGF0c1BvbGxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0sIGZpbHRlcik7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRDbGllbnQoTWVzc2VuZ2VyIGNsaWVudCkgewotICAgICAgICBNZXNzYWdlLm9idGFpbihtVHJhZmZpY0hhbmRsZXIsIEFERF9DTElFTlQsIGNsaWVudCkuc2VuZFRvVGFyZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCByZW1vdmVDbGllbnQoTWVzc2VuZ2VyIGNsaWVudCkgewotICAgICAgICBNZXNzYWdlLm9idGFpbihtVHJhZmZpY0hhbmRsZXIsIFJFTU9WRV9DTElFTlQsIGNsaWVudCkuc2VuZFRvVGFyZ2V0KCk7Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIGNsYXNzIFRyYWZmaWNIYW5kbGVyIGV4dGVuZHMgSGFuZGxlciB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVOQUJMRV9UUkFGRklDX1NUQVRTX1BPTEw6Ci0gICAgICAgICAgICAgICAgICAgIG1FbmFibGVUcmFmZmljU3RhdHNQb2xsID0gKG1zZy5hcmcxID09IDEpOwotICAgICAgICAgICAgICAgICAgICBtVHJhZmZpY1N0YXRzUG9sbFRva2VuKys7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtRW5hYmxlVHJhZmZpY1N0YXRzUG9sbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5T25EYXRhQWN0aXZpdHkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChNZXNzYWdlLm9idGFpbih0aGlzLCBUUkFGRklDX1NUQVRTX1BPTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFmZmljU3RhdHNQb2xsVG9rZW4sIDApLCBQT0xMX1RSQUZGSUNfU1RBVFNfSU5URVJWQUxfTVNFQ1MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVFJBRkZJQ19TVEFUU19QT0xMOgotICAgICAgICAgICAgICAgICAgICBpZiAobXNnLmFyZzEgPT0gbVRyYWZmaWNTdGF0c1BvbGxUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5T25EYXRhQWN0aXZpdHkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChNZXNzYWdlLm9idGFpbih0aGlzLCBUUkFGRklDX1NUQVRTX1BPTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFmZmljU3RhdHNQb2xsVG9rZW4sIDApLCBQT0xMX1RSQUZGSUNfU1RBVFNfSU5URVJWQUxfTVNFQ1MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQUREX0NMSUVOVDoKLSAgICAgICAgICAgICAgICAgICAgbUNsaWVudHMuYWRkKChNZXNzZW5nZXIpIG1zZy5vYmopOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFJFTU9WRV9DTElFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIG1DbGllbnRzLnJlbW92ZShtc2cub2JqKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBldmFsdWF0ZVRyYWZmaWNTdGF0c1BvbGxpbmcoKSB7Ci0gICAgICAgIE1lc3NhZ2UgbXNnOwotICAgICAgICBpZiAobU5ldHdvcmtJbmZvID09IG51bGwpIHJldHVybjsKLSAgICAgICAgaWYgKG1OZXR3b3JrSW5mby5nZXREZXRhaWxlZFN0YXRlKCkgPT0gQ09OTkVDVEVEICYmIG1TY3JlZW5Pbi5nZXQoKSkgewotICAgICAgICAgICAgbXNnID0gTWVzc2FnZS5vYnRhaW4obVRyYWZmaWNIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBFTkFCTEVfVFJBRkZJQ19TVEFUU19QT0xMLCAxLCAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1zZyA9IE1lc3NhZ2Uub2J0YWluKG1UcmFmZmljSGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgRU5BQkxFX1RSQUZGSUNfU1RBVFNfUE9MTCwgMCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgbXNnLnNlbmRUb1RhcmdldCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBub3RpZnlPbkRhdGFBY3Rpdml0eSgpIHsKLSAgICAgICAgbG9uZyBzZW50LCByZWNlaXZlZDsKLSAgICAgICAgbG9uZyBwcmVUeFBrdHMgPSBtVHhQa3RzLCBwcmVSeFBrdHMgPSBtUnhQa3RzOwotICAgICAgICBpbnQgZGF0YUFjdGl2aXR5ID0gV2lmaU1hbmFnZXIuREFUQV9BQ1RJVklUWV9OT05FOwotCi0gICAgICAgIG1UeFBrdHMgPSBUcmFmZmljU3RhdHMuZ2V0VHhQYWNrZXRzKG1JbnRlcmZhY2UpOwotICAgICAgICBtUnhQa3RzID0gVHJhZmZpY1N0YXRzLmdldFJ4UGFja2V0cyhtSW50ZXJmYWNlKTsKLQotICAgICAgICBpZiAocHJlVHhQa3RzID4gMCB8fCBwcmVSeFBrdHMgPiAwKSB7Ci0gICAgICAgICAgICBzZW50ID0gbVR4UGt0cyAtIHByZVR4UGt0czsKLSAgICAgICAgICAgIHJlY2VpdmVkID0gbVJ4UGt0cyAtIHByZVJ4UGt0czsKLSAgICAgICAgICAgIGlmIChzZW50ID4gMCkgewotICAgICAgICAgICAgICAgIGRhdGFBY3Rpdml0eSB8PSBXaWZpTWFuYWdlci5EQVRBX0FDVElWSVRZX09VVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZWNlaXZlZCA+IDApIHsKLSAgICAgICAgICAgICAgICBkYXRhQWN0aXZpdHkgfD0gV2lmaU1hbmFnZXIuREFUQV9BQ1RJVklUWV9JTjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRhdGFBY3Rpdml0eSAhPSBtRGF0YUFjdGl2aXR5ICYmIG1TY3JlZW5Pbi5nZXQoKSkgewotICAgICAgICAgICAgICAgIG1EYXRhQWN0aXZpdHkgPSBkYXRhQWN0aXZpdHk7Ci0gICAgICAgICAgICAgICAgZm9yIChNZXNzZW5nZXIgY2xpZW50IDogbUNsaWVudHMpIHsKLSAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSBtc2cgPSBNZXNzYWdlLm9idGFpbigpOwotICAgICAgICAgICAgICAgICAgICBtc2cud2hhdCA9IFdpZmlNYW5hZ2VyLkRBVEFfQUNUSVZJVFlfTk9USUZJQ0FUSU9OOwotICAgICAgICAgICAgICAgICAgICBtc2cuYXJnMSA9IG1EYXRhQWN0aXZpdHk7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQuc2VuZChtc2cpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFpbGVkIHRvIHJlYWNoLCBza2lwCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGllbnQgcmVtb3ZhbCBpcyBoYW5kbGVkIGluIFdpZmlTZXJ2aWNlCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIHB3LnByaW50bG4oIm1FbmFibGVUcmFmZmljU3RhdHNQb2xsICIgKyBtRW5hYmxlVHJhZmZpY1N0YXRzUG9sbCk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1UcmFmZmljU3RhdHNQb2xsVG9rZW4gIiArIG1UcmFmZmljU3RhdHNQb2xsVG9rZW4pOwotICAgICAgICBwdy5wcmludGxuKCJtVHhQa3RzICIgKyBtVHhQa3RzKTsKLSAgICAgICAgcHcucHJpbnRsbigibVJ4UGt0cyAiICsgbVJ4UGt0cyk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1EYXRhQWN0aXZpdHkgIiArIG1EYXRhQWN0aXZpdHkpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9EcmFnU3RhdGUuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRHJhZ1N0YXRlLmphdmEKaW5kZXggYTczNzkzOS4uZWRjN2M5MyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9EcmFnU3RhdGUuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0RyYWdTdGF0ZS5qYXZhCkBAIC0zMyw3ICszMyw2IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRyYWdFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXRDaGFubmVsOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlQ29udHJvbDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRmFrZVdpbmRvd0ltcGwuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRmFrZVdpbmRvd0ltcGwuamF2YQppbmRleCA1YTM0NzFiLi5jMThlYTAxIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0Zha2VXaW5kb3dJbXBsLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9GYWtlV2luZG93SW1wbC5qYXZhCkBAIC0yMSwxMSArMjEsOSBAQAogCiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5JbnB1dENoYW5uZWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklucHV0RXZlbnRSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXRRdWV1ZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlclBvbGljeTsKIAogcHVibGljIGZpbmFsIGNsYXNzIEZha2VXaW5kb3dJbXBsIGltcGxlbWVudHMgV2luZG93TWFuYWdlclBvbGljeS5GYWtlV2luZG93IHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vS2V5Z3VhcmREaXNhYmxlSGFuZGxlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9LZXlndWFyZERpc2FibGVIYW5kbGVyLmphdmEKaW5kZXggODU5ZGY1MS4uYzE0MjBhOCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9LZXlndWFyZERpc2FibGVIYW5kbGVyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9LZXlndWFyZERpc2FibGVIYW5kbGVyLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5Ub2tlbldhdGNoZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJQb2xpY3k7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2suamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFzay5qYXZhCmluZGV4IDEzZmRiYzguLmExNzA0YTYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFzay5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFzay5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci53bTsKIAogaW1wb3J0IGFuZHJvaWQudXRpbC5FdmVudExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuRXZlbnRMb2dUYWdzOwogCiBjbGFzcyBUYXNrIHsKIC8vICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIFRBRyA9ICJUYXNrR3JvdXAiOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IGY3N2YxODMuLmE0NWVkNDkgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93TWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd01hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTI1Niw5ICsyNTYsNiBAQAogICAgIC8qKiBBbW91bnQgb2YgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0byBkZWxheSBiZWZvcmUgZGVjbGFyaW5nIGEgd2luZG93IGZyZWV6ZSB0aW1lb3V0LiAqLwogICAgIHN0YXRpYyBmaW5hbCBpbnQgV0lORE9XX0ZSRUVaRV9USU1FT1VUX0RVUkFUSU9OID0gMjAwMDsKIAotICAgIC8qKiBBbW91bnQgb2YgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0byBkZWxheSBiZWZvcmUgZGVjbGFyaW5nIGEgc3RhcnRpbmcgd2luZG93IGxlYWtlZC4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IFNUQVJUSU5HX1dJTkRPV19USU1FT1VUX0RVUkFUSU9OID0gMTAwMDA7Ci0KICAgICAvKioKICAgICAgKiBJZiB0cnVlLCB0aGUgd2luZG93IG1hbmFnZXIgd2lsbCBkbyBpdHMgb3duIGN1c3RvbSBmcmVlemluZyBhbmQgZ2VuZXJhbAogICAgICAqIG1hbmFnZW1lbnQgb2YgdGhlIHNjcmVlbiBkdXJpbmcgcm90YXRpb24uCkBAIC00MzUsOCArNDMyLDE1IEBACiAgICAgaW50IG1Sb3RhdGlvbiA9IDA7CiAgICAgaW50IG1Gb3JjZWRBcHBPcmllbnRhdGlvbiA9IEFjdGl2aXR5SW5mby5TQ1JFRU5fT1JJRU5UQVRJT05fVU5TUEVDSUZJRUQ7CiAgICAgYm9vbGVhbiBtQWx0T3JpZW50YXRpb24gPSBmYWxzZTsKLSAgICBBcnJheUxpc3Q8SVJvdGF0aW9uV2F0Y2hlcj4gbVJvdGF0aW9uV2F0Y2hlcnMKLSAgICAgICAgICAgID0gbmV3IEFycmF5TGlzdDxJUm90YXRpb25XYXRjaGVyPigpOworICAgIGNsYXNzIFJvdGF0aW9uV2F0Y2hlciB7CisgICAgICAgIElSb3RhdGlvbldhdGNoZXIgd2F0Y2hlcjsKKyAgICAgICAgSUJpbmRlci5EZWF0aFJlY2lwaWVudCBkZWF0aFJlY2lwaWVudDsKKyAgICAgICAgUm90YXRpb25XYXRjaGVyKElSb3RhdGlvbldhdGNoZXIgdywgSUJpbmRlci5EZWF0aFJlY2lwaWVudCBkKSB7CisgICAgICAgICAgICB3YXRjaGVyID0gdzsKKyAgICAgICAgICAgIGRlYXRoUmVjaXBpZW50ID0gZDsKKyAgICAgICAgfQorICAgIH0KKyAgICBBcnJheUxpc3Q8Um90YXRpb25XYXRjaGVyPiBtUm90YXRpb25XYXRjaGVycyA9IG5ldyBBcnJheUxpc3Q8Um90YXRpb25XYXRjaGVyPigpOwogICAgIGludCBtRGVmZXJyZWRSb3RhdGlvblBhdXNlQ291bnQ7CiAKICAgICBpbnQgbVN5c3RlbURlY29yTGF5ZXIgPSAwOwpAQCAtMjI3MCw4ICsyMjc0LDYgQEAKICAgICAgICAgICAgICAgICB0b2tlbi5hcHBXaW5kb3dUb2tlbi5zdGFydGluZ1dpbmRvdyA9IHdpbjsKICAgICAgICAgICAgICAgICBpZiAoREVCVUdfU1RBUlRJTkdfV0lORE9XKSBTbG9nLnYgKFRBRywgImFkZFdpbmRvdzogIiArIHRva2VuLmFwcFdpbmRvd1Rva2VuCiAgICAgICAgICAgICAgICAgICAgICAgICArICIgc3RhcnRpbmdXaW5kb3c9IiArIHdpbik7Ci0gICAgICAgICAgICAgICAgTWVzc2FnZSBtID0gbUgub2J0YWluTWVzc2FnZShILlJFTU9WRV9TVEFSVElOR19USU1FT1VULCB0b2tlbi5hcHBXaW5kb3dUb2tlbik7Ci0gICAgICAgICAgICAgICAgbUguc2VuZE1lc3NhZ2VEZWxheWVkKG0sIFNUQVJUSU5HX1dJTkRPV19USU1FT1VUX0RVUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbGVhbiBpbU1heU1vdmUgPSB0cnVlOwpAQCAtMjM3NCw3ICsyMzc2LDYgQEAKICAgICBwdWJsaWMgdm9pZCByZW1vdmVXaW5kb3dMb2NrZWQoU2Vzc2lvbiBzZXNzaW9uLCBXaW5kb3dTdGF0ZSB3aW4pIHsKICAgICAgICAgaWYgKHdpbi5tQXR0cnMudHlwZSA9PSBUWVBFX0FQUExJQ0FUSU9OX1NUQVJUSU5HKSB7CiAgICAgICAgICAgICBpZiAoREVCVUdfU1RBUlRJTkdfV0lORE9XKSBTbG9nLmQoVEFHLCAiU3RhcnRpbmcgd2luZG93IHJlbW92ZWQgIiArIHdpbik7Ci0gICAgICAgICAgICByZW1vdmVTdGFydGluZ1dpbmRvd1RpbWVvdXQod2luLm1BcHBUb2tlbik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobG9jYWxMT0dWIHx8IERFQlVHX0ZPQ1VTIHx8IERFQlVHX0ZPQ1VTX0xJR0hUICYmIHdpbj09bUN1cnJlbnRGb2N1cykgU2xvZy52KApAQCAtMjUxOCw3ICsyNTE5LDYgQEAKICAgICAgICAgaWYgKGF0b2tlbiAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoYXRva2VuLnN0YXJ0aW5nV2luZG93ID09IHdpbikgewogICAgICAgICAgICAgICAgIGlmIChERUJVR19TVEFSVElOR19XSU5ET1cpIFNsb2cudihUQUcsICJOdWxsaW5nIHN0YXJ0aW5nV2luZG93ICIgKyB3aW4pOwotICAgICAgICAgICAgICAgIHJlbW92ZVN0YXJ0aW5nV2luZG93VGltZW91dChhdG9rZW4pOwogICAgICAgICAgICAgICAgIGF0b2tlbi5zdGFydGluZ1dpbmRvdyA9IG51bGw7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGF0b2tlbi5hbGxBcHBXaW5kb3dzLnNpemUoKSA9PSAwICYmIGF0b2tlbi5zdGFydGluZ0RhdGEgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGxhc3Qgd2luZG93IGFuZCB3ZSBoYWQgcmVxdWVzdGVkIGEgc3RhcnRpbmcKQEAgLTM4MzksMjIgKzM4MzksMjIgQEAKICAgICAgICAgICAgICAgICAgICAgKyAiICIgKyBtQXBwVHJhbnNpdGlvbgogICAgICAgICAgICAgICAgICAgICArICIgYWx3YXlzS2VlcEN1cnJlbnQ9IiArIGFsd2F5c0tlZXBDdXJyZW50CiAgICAgICAgICAgICAgICAgICAgICsgIiBDYWxsZXJzPSIgKyBEZWJ1Zy5nZXRDYWxsZXJzKDMpKTsKLSAgICAgICAgICAgIGlmIChva1RvRGlzcGxheSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtQXBwVHJhbnNpdGlvbi5pc1RyYW5zaXRpb25TZXQoKSB8fCBtQXBwVHJhbnNpdGlvbi5pc1RyYW5zaXRpb25Ob25lKCkpIHsKKyAgICAgICAgICAgIGlmICghbUFwcFRyYW5zaXRpb24uaXNUcmFuc2l0aW9uU2V0KCkgfHwgbUFwcFRyYW5zaXRpb24uaXNUcmFuc2l0aW9uTm9uZSgpKSB7CisgICAgICAgICAgICAgICAgbUFwcFRyYW5zaXRpb24uc2V0QXBwVHJhbnNpdGlvbih0cmFuc2l0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWFsd2F5c0tlZXBDdXJyZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zaXQgPT0gQXBwVHJhbnNpdGlvbi5UUkFOU0lUX1RBU0tfT1BFTgorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbUFwcFRyYW5zaXRpb24uaXNUcmFuc2l0aW9uRXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcFRyYW5zaXRpb24uVFJBTlNJVF9UQVNLX0NMT1NFKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBPcGVuaW5nIGEgbmV3IHRhc2sgYWx3YXlzIHN1cGVyc2VkZXMgYSBjbG9zZSBmb3IgdGhlIGFuaW0uCiAgICAgICAgICAgICAgICAgICAgIG1BcHBUcmFuc2l0aW9uLnNldEFwcFRyYW5zaXRpb24odHJhbnNpdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghYWx3YXlzS2VlcEN1cnJlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zaXQgPT0gQXBwVHJhbnNpdGlvbi5UUkFOU0lUX1RBU0tfT1BFTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1BcHBUcmFuc2l0aW9uLmlzVHJhbnNpdGlvbkVxdWFsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwVHJhbnNpdGlvbi5UUkFOU0lUX1RBU0tfQ0xPU0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVuaW5nIGEgbmV3IHRhc2sgYWx3YXlzIHN1cGVyc2VkZXMgYSBjbG9zZSBmb3IgdGhlIGFuaW0uCi0gICAgICAgICAgICAgICAgICAgICAgICBtQXBwVHJhbnNpdGlvbi5zZXRBcHBUcmFuc2l0aW9uKHRyYW5zaXQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRyYW5zaXQgPT0gQXBwVHJhbnNpdGlvbi5UUkFOU0lUX0FDVElWSVRZX09QRU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtQXBwVHJhbnNpdGlvbi5pc1RyYW5zaXRpb25FcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwVHJhbnNpdGlvbi5UUkFOU0lUX0FDVElWSVRZX0NMT1NFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlbmluZyBhIG5ldyBhY3Rpdml0eSBhbHdheXMgc3VwZXJzZWRlcyBhIGNsb3NlIGZvciB0aGUgYW5pbS4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1BcHBUcmFuc2l0aW9uLnNldEFwcFRyYW5zaXRpb24odHJhbnNpdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRyYW5zaXQgPT0gQXBwVHJhbnNpdGlvbi5UUkFOU0lUX0FDVElWSVRZX09QRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1BcHBUcmFuc2l0aW9uLmlzVHJhbnNpdGlvbkVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcFRyYW5zaXRpb24uVFJBTlNJVF9BQ1RJVklUWV9DTE9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gT3BlbmluZyBhIG5ldyBhY3Rpdml0eSBhbHdheXMgc3VwZXJzZWRlcyBhIGNsb3NlIGZvciB0aGUgYW5pbS4KKyAgICAgICAgICAgICAgICAgICAgbUFwcFRyYW5zaXRpb24uc2V0QXBwVHJhbnNpdGlvbih0cmFuc2l0KTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob2tUb0Rpc3BsYXkoKSkgewogICAgICAgICAgICAgICAgIG1BcHBUcmFuc2l0aW9uLnByZXBhcmUoKTsKICAgICAgICAgICAgICAgICBtU3RhcnRpbmdJY29uSW5UcmFuc2l0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgbVNraXBBcHBUcmFuc2l0aW9uQW5pbWF0aW9uID0gZmFsc2U7CkBAIC0zOTg2LDcgKzM5ODYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1dJTkRPV19NT1ZFTUVOVCB8fCBERUJVR19BRERfUkVNT1ZFIHx8IERFQlVHX1NUQVJUSU5HX1dJTkRPVykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudihUQUcsICJSZW1vdmluZyBzdGFydGluZyB3aW5kb3c6ICIgKyBzdGFydGluZ1dpbmRvdyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTdGFydGluZ1dpbmRvd1RpbWVvdXQodHRva2VuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nV2luZG93LmdldFdpbmRvd0xpc3QoKS5yZW1vdmUoc3RhcnRpbmdXaW5kb3cpOwogICAgICAgICAgICAgICAgICAgICAgICAgbVdpbmRvd3NDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19BRERfUkVNT1ZFKSBTbG9nLnYoVEFHLApAQCAtNDEzMyw2ICs0MTMyLDE1IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVBcHBTdGFydGluZ1dpbmRvdyhJQmluZGVyIHRva2VuKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgeworICAgICAgICAgICAgQXBwV2luZG93VG9rZW4gd3Rva2VuID0gbVRva2VuTWFwLmdldCh0b2tlbikuYXBwV2luZG93VG9rZW47CisgICAgICAgICAgICBpZiAod3Rva2VuLnN0YXJ0aW5nV2luZG93ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzY2hlZHVsZVJlbW92ZVN0YXJ0aW5nV2luZG93KHd0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRBcHBXaWxsQmVIaWRkZW4oSUJpbmRlciB0b2tlbikgewogICAgICAgICBpZiAoIWNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9BUFBfVE9LRU5TLApAQCAtNDU0OSwyMSArNDU1NywxMSBAQAogICAgICAgICBzY2hlZHVsZVJlbW92ZVN0YXJ0aW5nV2luZG93KHN0YXJ0aW5nVG9rZW4pOwogICAgIH0KIAotICAgIHZvaWQgcmVtb3ZlU3RhcnRpbmdXaW5kb3dUaW1lb3V0KEFwcFdpbmRvd1Rva2VuIHd0b2tlbikgewotICAgICAgICBpZiAod3Rva2VuICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChERUJVR19TVEFSVElOR19XSU5ET1cpIFNsb2cudihUQUcsIERlYnVnLmdldENhbGxlcnMoMSkgKwotICAgICAgICAgICAgICAgICAgICAiOiBSZW1vdmUgc3RhcnRpbmcgd2luZG93IHRpbWVvdXQgIiArIHd0b2tlbiArICh3dG9rZW4gIT0gbnVsbCA/Ci0gICAgICAgICAgICAgICAgICAgICIgc3RhcnRpbmdXaW5kb3c9IiArIHd0b2tlbi5zdGFydGluZ1dpbmRvdyA6ICIiKSk7Ci0gICAgICAgICAgICBtSC5yZW1vdmVNZXNzYWdlcyhILlJFTU9WRV9TVEFSVElOR19USU1FT1VULCB3dG9rZW4pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgdm9pZCBzY2hlZHVsZVJlbW92ZVN0YXJ0aW5nV2luZG93KEFwcFdpbmRvd1Rva2VuIHd0b2tlbikgewogICAgICAgICBpZiAod3Rva2VuICE9IG51bGwgJiYgd3Rva2VuLnN0YXJ0aW5nV2luZG93ICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChERUJVR19TVEFSVElOR19XSU5ET1cpIFNsb2cudihUQUcsIERlYnVnLmdldENhbGxlcnMoMSkgKwogICAgICAgICAgICAgICAgICAgICAiOiBTY2hlZHVsZSByZW1vdmUgc3RhcnRpbmcgIiArIHd0b2tlbiArICh3dG9rZW4gIT0gbnVsbCA/CiAgICAgICAgICAgICAgICAgICAgICIgc3RhcnRpbmdXaW5kb3c9IiArIHd0b2tlbi5zdGFydGluZ1dpbmRvdyA6ICIiKSk7Ci0gICAgICAgICAgICByZW1vdmVTdGFydGluZ1dpbmRvd1RpbWVvdXQod3Rva2VuKTsKICAgICAgICAgICAgIE1lc3NhZ2UgbSA9IG1ILm9idGFpbk1lc3NhZ2UoSC5SRU1PVkVfU1RBUlRJTkcsIHd0b2tlbik7CiAgICAgICAgICAgICBtSC5zZW5kTWVzc2FnZShtKTsKICAgICAgICAgfQpAQCAtNTk0Miw3ICs1OTQwLDcgQEAKIAogICAgICAgICBmb3IgKGludCBpPW1Sb3RhdGlvbldhdGNoZXJzLnNpemUoKS0xOyBpPj0wOyBpLS0pIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbVJvdGF0aW9uV2F0Y2hlcnMuZ2V0KGkpLm9uUm90YXRpb25DaGFuZ2VkKHJvdGF0aW9uKTsKKyAgICAgICAgICAgICAgICBtUm90YXRpb25XYXRjaGVycy5nZXQoaSkud2F0Y2hlci5vblJvdGF0aW9uQ2hhbmdlZChyb3RhdGlvbik7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01OTc0LDEwICs1OTcyLDExIEBACiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBiaW5kZXJEaWVkKCkgewogICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8bVJvdGF0aW9uV2F0Y2hlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YXRjaGVyQmluZGVyID09IG1Sb3RhdGlvbldhdGNoZXJzLmdldChpKS5hc0JpbmRlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJvdGF0aW9uV2F0Y2hlciByZW1vdmVkID0gbVJvdGF0aW9uV2F0Y2hlcnMucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5hc0JpbmRlcigpLnVubGlua1RvRGVhdGgodGhpcywgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2F0Y2hlckJpbmRlciA9PSBtUm90YXRpb25XYXRjaGVycy5nZXQoaSkud2F0Y2hlci5hc0JpbmRlcigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm90YXRpb25XYXRjaGVyIHJlbW92ZWQgPSBtUm90YXRpb25XYXRjaGVycy5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUJpbmRlciBiaW5kZXIgPSByZW1vdmVkLndhdGNoZXIuYXNCaW5kZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmluZGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGVyLnVubGlua1RvRGVhdGgodGhpcywgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTU5ODksNyArNTk4OCw3IEBACiAgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICB3YXRjaGVyLmFzQmluZGVyKCkubGlua1RvRGVhdGgoZHIsIDApOwotICAgICAgICAgICAgICAgIG1Sb3RhdGlvbldhdGNoZXJzLmFkZCh3YXRjaGVyKTsKKyAgICAgICAgICAgICAgICBtUm90YXRpb25XYXRjaGVycy5hZGQobmV3IFJvdGF0aW9uV2F0Y2hlcih3YXRjaGVyLCBkcikpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAvLyBDbGllbnQgZGllZCwgbm8gY2xlYW51cCBuZWVkZWQuCiAgICAgICAgICAgICB9CkBAIC02MDAzLDggKzYwMDIsMTMgQEAKICAgICAgICAgZmluYWwgSUJpbmRlciB3YXRjaGVyQmluZGVyID0gd2F0Y2hlci5hc0JpbmRlcigpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1XaW5kb3dNYXApIHsKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxtUm90YXRpb25XYXRjaGVycy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGlmICh3YXRjaGVyQmluZGVyID09IG1Sb3RhdGlvbldhdGNoZXJzLmdldChpKS5hc0JpbmRlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Sb3RhdGlvbldhdGNoZXJzLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICBSb3RhdGlvbldhdGNoZXIgcm90YXRpb25XYXRjaGVyID0gbVJvdGF0aW9uV2F0Y2hlcnMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGlmICh3YXRjaGVyQmluZGVyID09IHJvdGF0aW9uV2F0Y2hlci53YXRjaGVyLmFzQmluZGVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUm90YXRpb25XYXRjaGVyIHJlbW92ZWQgPSBtUm90YXRpb25XYXRjaGVycy5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgICAgIElCaW5kZXIgYmluZGVyID0gcmVtb3ZlZC53YXRjaGVyLmFzQmluZGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYmluZGVyLnVubGlua1RvRGVhdGgocmVtb3ZlZC5kZWF0aFJlY2lwaWVudCwgMCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaS0tOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTcxMjIsNyArNzEyNiw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBYm9ydGVkIHN0YXJ0aW5nICIgKyB3dG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiOiByZW1vdmVkPSIgKyB3dG9rZW4ucmVtb3ZlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgc3RhcnRpbmdEYXRhPSIgKyB3dG9rZW4uc3RhcnRpbmdEYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVN0YXJ0aW5nV2luZG93VGltZW91dCh3dG9rZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Rva2VuLnN0YXJ0aW5nV2luZG93ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd0b2tlbi5zdGFydGluZ0RhdGEgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgPSB0cnVlOwpAQCAtNzE0NywxMSArNzE1MCw2IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGJyZWFrOwogCi0gICAgICAgICAgICAgICAgY2FzZSBSRU1PVkVfU1RBUlRJTkdfVElNRU9VVDogewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBBcHBXaW5kb3dUb2tlbiB3dG9rZW4gPSAoQXBwV2luZG93VG9rZW4pbXNnLm9iajsKLSAgICAgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIlN0YXJ0aW5nIHdpbmRvdyAiICsgd3Rva2VuICsgIiB0aW1lZCBvdXQiKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIFJFTU9WRV9TVEFSVElORzogewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBBcHBXaW5kb3dUb2tlbiB3dG9rZW4gPSAoQXBwV2luZG93VG9rZW4pbXNnLm9iajsKICAgICAgICAgICAgICAgICAgICAgSUJpbmRlciB0b2tlbiA9IG51bGw7CkBAIC0xMDEyNyw2ICsxMDEyNSwxMiBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHVibGljIGludCBnZXRJbnB1dE1ldGhvZFdpbmRvd1Zpc2libGVIZWlnaHQoKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgeworICAgICAgICAgICAgcmV0dXJuIG1Qb2xpY3kuZ2V0SW5wdXRNZXRob2RXaW5kb3dWaXNpYmxlSGVpZ2h0THcoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGhhc05hdmlnYXRpb25CYXIoKSB7CiAgICAgICAgIHJldHVybiBtUG9saWN5Lmhhc05hdmlnYXRpb25CYXIoKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvam5pL2NvbV9hbmRyb2lkX3NlcnZlcl9pbnB1dF9JbnB1dE1hbmFnZXJTZXJ2aWNlLmNwcCBiL3NlcnZpY2VzL2NvcmUvam5pL2NvbV9hbmRyb2lkX3NlcnZlcl9pbnB1dF9JbnB1dE1hbmFnZXJTZXJ2aWNlLmNwcAppbmRleCAxMGFkMjc4Li40M2ZiZTlkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2puaS9jb21fYW5kcm9pZF9zZXJ2ZXJfaW5wdXRfSW5wdXRNYW5hZ2VyU2VydmljZS5jcHAKKysrIGIvc2VydmljZXMvY29yZS9qbmkvY29tX2FuZHJvaWRfc2VydmVyX2lucHV0X0lucHV0TWFuYWdlclNlcnZpY2UuY3BwCkBAIC05OSw2ICs5OSwxMiBAQAogICAgIGpjbGFzcyBjbGF6ejsKIH0gZ01vdGlvbkV2ZW50Q2xhc3NJbmZvOwogCitzdGF0aWMgc3RydWN0IHsKKyAgICBqY2xhc3MgY2xheno7CisgICAgam1ldGhvZElEIGNvbnN0cnVjdG9yOworfSBnSW5wdXREZXZpY2VJZGVudGlmaWVySW5mbzsKKworCiAKIC8vIC0tLSBHbG9iYWwgZnVuY3Rpb25zIC0tLQogCkBAIC0xODMsNyArMTg5LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVhZGVyQ29uZmlndXJhdGlvbihJbnB1dFJlYWRlckNvbmZpZ3VyYXRpb24qIG91dENvbmZpZyk7CiAgICAgdmlydHVhbCBzcDxQb2ludGVyQ29udHJvbGxlckludGVyZmFjZT4gb2J0YWluUG9pbnRlckNvbnRyb2xsZXIoaW50MzJfdCBkZXZpY2VJZCk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUlucHV0RGV2aWNlc0NoYW5nZWQoY29uc3QgVmVjdG9yPElucHV0RGV2aWNlSW5mbz4mIGlucHV0RGV2aWNlcyk7Ci0gICAgdmlydHVhbCBzcDxLZXlDaGFyYWN0ZXJNYXA+IGdldEtleWJvYXJkTGF5b3V0T3ZlcmxheShjb25zdCBTdHJpbmc4JiBpbnB1dERldmljZURlc2NyaXB0b3IpOworICAgIHZpcnR1YWwgc3A8S2V5Q2hhcmFjdGVyTWFwPiBnZXRLZXlib2FyZExheW91dE92ZXJsYXkoY29uc3QgSW5wdXREZXZpY2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIFN0cmluZzggZ2V0RGV2aWNlQWxpYXMoY29uc3QgSW5wdXREZXZpY2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKTsKIAogICAgIC8qIC0tLSBJbnB1dERpc3BhdGNoZXJQb2xpY3lJbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gLS0tICovCkBAIC00OTIsMTMgKzQ5OCwxNiBAQAogfQogCiBzcDxLZXlDaGFyYWN0ZXJNYXA+IE5hdGl2ZUlucHV0TWFuYWdlcjo6Z2V0S2V5Ym9hcmRMYXlvdXRPdmVybGF5KAotICAgICAgICBjb25zdCBTdHJpbmc4JiBpbnB1dERldmljZURlc2NyaXB0b3IpIHsKKyAgICAgICAgY29uc3QgSW5wdXREZXZpY2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKSB7CiAgICAgSk5JRW52KiBlbnYgPSBqbmlFbnYoKTsKIAogICAgIHNwPEtleUNoYXJhY3Rlck1hcD4gcmVzdWx0OwotICAgIFNjb3BlZExvY2FsUmVmPGpzdHJpbmc+IGRlc2NyaXB0b3JPYmooZW52LCBlbnYtPk5ld1N0cmluZ1VURihpbnB1dERldmljZURlc2NyaXB0b3Iuc3RyaW5nKCkpKTsKKyAgICBTY29wZWRMb2NhbFJlZjxqc3RyaW5nPiBkZXNjcmlwdG9yKGVudiwgZW52LT5OZXdTdHJpbmdVVEYoaWRlbnRpZmllci5kZXNjcmlwdG9yLnN0cmluZygpKSk7CisgICAgU2NvcGVkTG9jYWxSZWY8am9iamVjdD4gaWRlbnRpZmllck9iaihlbnYsIGVudi0+TmV3T2JqZWN0KGdJbnB1dERldmljZUlkZW50aWZpZXJJbmZvLmNsYXp6LAorICAgICAgICAgICAgZ0lucHV0RGV2aWNlSWRlbnRpZmllckluZm8uY29uc3RydWN0b3IsIGRlc2NyaXB0b3IuZ2V0KCksCisgICAgICAgICAgICBpZGVudGlmaWVyLnZlbmRvciwgaWRlbnRpZmllci5wcm9kdWN0KSk7CiAgICAgU2NvcGVkTG9jYWxSZWY8am9iamVjdEFycmF5PiBhcnJheU9iaihlbnYsIGpvYmplY3RBcnJheShlbnYtPkNhbGxPYmplY3RNZXRob2QobVNlcnZpY2VPYmosCi0gICAgICAgICAgICAgICAgZ1NlcnZpY2VDbGFzc0luZm8uZ2V0S2V5Ym9hcmRMYXlvdXRPdmVybGF5LCBkZXNjcmlwdG9yT2JqLmdldCgpKSkpOworICAgICAgICAgICAgICAgIGdTZXJ2aWNlQ2xhc3NJbmZvLmdldEtleWJvYXJkTGF5b3V0T3ZlcmxheSwgaWRlbnRpZmllck9iai5nZXQoKSkpKTsKICAgICBpZiAoYXJyYXlPYmouZ2V0KCkpIHsKICAgICAgICAgU2NvcGVkTG9jYWxSZWY8anN0cmluZz4gZmlsZW5hbWVPYmooZW52LAogICAgICAgICAgICAgICAgIGpzdHJpbmcoZW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQoYXJyYXlPYmouZ2V0KCksIDApKSk7CkBAIC0xNDQ2LDcgKzE0NTUsOCBAQAogICAgICAgICAgICAgImdldFBvaW50ZXJJY29uIiwgIigpTGFuZHJvaWQvdmlldy9Qb2ludGVySWNvbjsiKTsKIAogICAgIEdFVF9NRVRIT0RfSUQoZ1NlcnZpY2VDbGFzc0luZm8uZ2V0S2V5Ym9hcmRMYXlvdXRPdmVybGF5LCBjbGF6eiwKLSAgICAgICAgICAgICJnZXRLZXlib2FyZExheW91dE92ZXJsYXkiLCAiKExqYXZhL2xhbmcvU3RyaW5nOylbTGphdmEvbGFuZy9TdHJpbmc7Iik7CisgICAgICAgICAgICAiZ2V0S2V5Ym9hcmRMYXlvdXRPdmVybGF5IiwKKyAgICAgICAgICAgICIoTGFuZHJvaWQvaGFyZHdhcmUvaW5wdXQvSW5wdXREZXZpY2VJZGVudGlmaWVyOylbTGphdmEvbGFuZy9TdHJpbmc7Iik7CiAKICAgICBHRVRfTUVUSE9EX0lEKGdTZXJ2aWNlQ2xhc3NJbmZvLmdldERldmljZUFsaWFzLCBjbGF6eiwKICAgICAgICAgICAgICJnZXREZXZpY2VBbGlhcyIsICIoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIpOwpAQCAtMTQ2Niw2ICsxNDc2LDEzIEBACiAgICAgRklORF9DTEFTUyhnTW90aW9uRXZlbnRDbGFzc0luZm8uY2xhenosICJhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQiKTsKICAgICBnTW90aW9uRXZlbnRDbGFzc0luZm8uY2xhenogPSBqY2xhc3MoZW52LT5OZXdHbG9iYWxSZWYoZ01vdGlvbkV2ZW50Q2xhc3NJbmZvLmNsYXp6KSk7CiAKKyAgICAvLyBJbnB1dERldmljZUlkZW50aWZpZXIKKworICAgIEZJTkRfQ0xBU1MoZ0lucHV0RGV2aWNlSWRlbnRpZmllckluZm8uY2xhenosICJhbmRyb2lkL2hhcmR3YXJlL2lucHV0L0lucHV0RGV2aWNlSWRlbnRpZmllciIpOworICAgIGdJbnB1dERldmljZUlkZW50aWZpZXJJbmZvLmNsYXp6ID0gamNsYXNzKGVudi0+TmV3R2xvYmFsUmVmKGdJbnB1dERldmljZUlkZW50aWZpZXJJbmZvLmNsYXp6KSk7CisgICAgR0VUX01FVEhPRF9JRChnSW5wdXREZXZpY2VJZGVudGlmaWVySW5mby5jb25zdHJ1Y3RvciwgZ0lucHV0RGV2aWNlSWRlbnRpZmllckluZm8uY2xhenosCisgICAgICAgICAgICAiPGluaXQ+IiwgIihMamF2YS9sYW5nL1N0cmluZztJSSlWIik7CisKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvZGV2aWNlcG9saWN5L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvZGV2aWNlcG9saWN5L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IGFmMzYyNDYuLjE4NmZiZTEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2RldmljZXBvbGljeS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRGV2aWNlUG9saWN5TWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9kZXZpY2Vwb2xpY3kvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RldmljZVBvbGljeU1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTM0LDcgKzM0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXJOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWxhcm1NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFwcEdsb2JhbHM7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuSU5vdGlmaWNhdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOwogaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKQEAgLTUyLDE1ICs1MSwxMSBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uU2lnbmF0dXJlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Vc2VySW5mbzsKIGltcG9ydCBhbmRyb2lkLm5ldC5Qcm94eVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKQEAgLTg4LDcgKzgzLDYgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSVdpbmRvd01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJQb2xpY3k7CiAKIGltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZTsKQEAgLTk4LDE0ICs5MiwxMSBAQAogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5LZXlTdG9yZS5UcnVzdGVkQ2VydGlmaWNhdGVFbnRyeTsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlRmFjdG9yeTsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlOwogaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkRhdGU7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9QcmludE1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9QcmludE1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggODUyNzM2Yi4uN2YxNDZhNyAxMDA2NDQKLS0tIGEvc2VydmljZXMvcHJpbnQvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcHJpbnQvUHJpbnRNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1ByaW50TWFuYWdlclNlcnZpY2UuamF2YQpAQCAtNDA2LDcgKzQwNiw2IEBACiAgICAgICAgIHByaXZhdGUgdm9pZCByZWdpc3RlckNvbnRlbnRPYnNlcnZlcnMoKSB7CiAgICAgICAgICAgICBmaW5hbCBVcmkgZW5hYmxlZFByaW50U2VydmljZXNVcmkgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAogICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuRU5BQkxFRF9QUklOVF9TRVJWSUNFUyk7Ci0KICAgICAgICAgICAgIENvbnRlbnRPYnNlcnZlciBvYnNlcnZlciA9IG5ldyBDb250ZW50T2JzZXJ2ZXIoQmFja2dyb3VuZFRocmVhZC5nZXRIYW5kbGVyKCkpIHsKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZShib29sZWFuIHNlbGZDaGFuZ2UsIFVyaSB1cmkpIHsKQEAgLTQyNiwzOSArNDI1LDQyIEBACiAgICAgICAgIHByaXZhdGUgdm9pZCByZWdpc3RlckJvcmFkY2FzdFJlY2VpdmVycygpIHsKICAgICAgICAgICAgIFBhY2thZ2VNb25pdG9yIG1vbml0b3IgPSBuZXcgUGFja2FnZU1vbml0b3IoKSB7CiAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gb25QYWNrYWdlQ2hhbmdlZChTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1aWQsIFN0cmluZ1tdIGNvbXBvbmVudHMpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblBhY2thZ2VNb2RpZmllZChTdHJpbmcgcGFja2FnZU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzZXJ2aWNlc0NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJTdGF0ZSB1c2VyU3RhdGUgPSBnZXRPckNyZWF0ZVVzZXJTdGF0ZUxvY2tlZChnZXRDaGFuZ2luZ1VzZXJJZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yPENvbXBvbmVudE5hbWU+IGl0ZXJhdG9yID0gdXNlclN0YXRlLmdldEVuYWJsZWRTZXJ2aWNlcygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pdGVyYXRvcigpOworICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3I8Q29tcG9uZW50TmFtZT4gaXRlcmF0b3IgPSB1c2VyU3RhdGUuZ2V0RW5hYmxlZFNlcnZpY2VzKCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb25lbnROYW1lIGNvbXBvbmVudE5hbWUgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2thZ2VOYW1lLmVxdWFscyhjb21wb25lbnROYW1lLmdldFBhY2thZ2VOYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJTdGF0ZS51cGRhdGVJZk5lZWRlZExvY2tlZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmljZXNDaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclN0YXRlLnVwZGF0ZUlmTmVlZGVkTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUGFja2FnZVJlbW92ZWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdWlkKSB7CiAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2VydmljZXNSZW1vdmVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyU3RhdGUgdXNlclN0YXRlID0gZ2V0T3JDcmVhdGVVc2VyU3RhdGVMb2NrZWQoZ2V0Q2hhbmdpbmdVc2VySWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvcjxDb21wb25lbnROYW1lPiBpdGVyYXRvciA9IHVzZXJTdGF0ZS5nZXRFbmFibGVkU2VydmljZXMoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yPENvbXBvbmVudE5hbWU+IGl0ZXJhdG9yID0gdXNlclN0YXRlLmdldEVuYWJsZWRTZXJ2aWNlcygpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wb25lbnROYW1lID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNrYWdlTmFtZS5lcXVhbHMoY29tcG9uZW50TmFtZS5nZXRQYWNrYWdlTmFtZSgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc2lzdENvbXBvbmVudE5hbWVzVG9TZXR0aW5nTG9ja2VkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5FTkFCTEVEX1BSSU5UX1NFUlZJQ0VTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJTdGF0ZS5nZXRFbmFibGVkU2VydmljZXMoKSwgZ2V0Q2hhbmdpbmdVc2VySWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJTdGF0ZS51cGRhdGVJZk5lZWRlZExvY2tlZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzUmVtb3ZlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZpY2VzUmVtb3ZlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNpc3RDb21wb25lbnROYW1lc1RvU2V0dGluZ0xvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5FTkFCTEVEX1BSSU5UX1NFUlZJQ0VTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclN0YXRlLmdldEVuYWJsZWRTZXJ2aWNlcygpLCBnZXRDaGFuZ2luZ1VzZXJJZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyU3RhdGUudXBkYXRlSWZOZWVkZWRMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvcHJpbnQvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcHJpbnQvVXNlclN0YXRlLmphdmEgYi9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9Vc2VyU3RhdGUuamF2YQppbmRleCBmMjNhOTkyLi5mNjQ3ODE0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9Vc2VyU3RhdGUuamF2YQorKysgYi9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9Vc2VyU3RhdGUuamF2YQpAQCAtNzEsNiArNzEsNyBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIC8qKgpAQCAtNTk0LDYgKzU5NSw4IEBACiAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoaW5zdGFsbGVkU2VydmljZS5nZXRTZXR0aW5nc0FjdGl2aXR5TmFtZSgpKS5wcmludGxuKCk7CiAgICAgICAgICAgICBwdy5hcHBlbmQoaW5zdGFsbGVkU2VydmljZVByZWZpeCkuYXBwZW5kKHRhYikuYXBwZW5kKCJhZGRQcmludGVyc0FjdGl2aXR5PSIpCiAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoaW5zdGFsbGVkU2VydmljZS5nZXRBZGRQcmludGVyc0FjdGl2aXR5TmFtZSgpKS5wcmludGxuKCk7CisgICAgICAgICAgICBwdy5hcHBlbmQoaW5zdGFsbGVkU2VydmljZVByZWZpeCkuYXBwZW5kKHRhYikuYXBwZW5kKCJhdmFuY2VkT3B0aW9uc0FjdGl2aXR5PSIpCisgICAgICAgICAgICAgICAgICAgLmFwcGVuZChpbnN0YWxsZWRTZXJ2aWNlLmdldEFkdmFuY2VkT3B0aW9uc0FjdGl2aXR5TmFtZSgpKS5wcmludGxuKCk7CiAgICAgICAgIH0KIAogICAgICAgICBwdy5hcHBlbmQocHJlZml4KS5hcHBlbmQodGFiKS5hcHBlbmQoImVuYWJsZWQgc2VydmljZXM6IikucHJpbnRsbigpOwpAQCAtNjU3LDcgKzY2MCwzMyBAQAogICAgICAgICAgICAgdGVtcFByaW50U2VydmljZXMuYWRkKFByaW50U2VydmljZUluZm8uY3JlYXRlKGluc3RhbGxlZFNlcnZpY2UsIG1Db250ZXh0KSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXRlbXBQcmludFNlcnZpY2VzLmVxdWFscyhtSW5zdGFsbGVkU2VydmljZXMpKSB7CisgICAgICAgIGJvb2xlYW4gc29tZVNlcnZpY2VDaGFuZ2VkID0gZmFsc2U7CisKKyAgICAgICAgaWYgKHRlbXBQcmludFNlcnZpY2VzLnNpemUoKSAhPSBtSW5zdGFsbGVkU2VydmljZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBzb21lU2VydmljZUNoYW5nZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChQcmludFNlcnZpY2VJbmZvIG5ld1NlcnZpY2U6IHRlbXBQcmludFNlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IG9sZFNlcnZpY2VJbmRleCA9IG1JbnN0YWxsZWRTZXJ2aWNlcy5pbmRleE9mKG5ld1NlcnZpY2UpOworICAgICAgICAgICAgICAgIGlmIChvbGRTZXJ2aWNlSW5kZXggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNvbWVTZXJ2aWNlQ2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBQcmludFNlcnZpY2VJbmZvI2VxdWFscyBjb21wYXJlcyBvbmx5IHRoZSBpZCBub3QgYWxsIG1lbWJlcnMsCisgICAgICAgICAgICAgICAgLy8gc28gd2UgYXJlIGFsc28gY29tcGFyaW5nIHRoZSBtZW1iZXJzIGNvbWluZyBmcm9tIG1ldGEtZGF0YS4KKyAgICAgICAgICAgICAgICBQcmludFNlcnZpY2VJbmZvIG9sZFNlcnZpY2UgPSBtSW5zdGFsbGVkU2VydmljZXMuZ2V0KG9sZFNlcnZpY2VJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuZXF1YWxzKG9sZFNlcnZpY2UuZ2V0QWRkUHJpbnRlcnNBY3Rpdml0eU5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXJ2aWNlLmdldEFkZFByaW50ZXJzQWN0aXZpdHlOYW1lKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhVGV4dFV0aWxzLmVxdWFscyhvbGRTZXJ2aWNlLmdldEFkdmFuY2VkT3B0aW9uc0FjdGl2aXR5TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXJ2aWNlLmdldEFkdmFuY2VkT3B0aW9uc0FjdGl2aXR5TmFtZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIVRleHRVdGlscy5lcXVhbHMob2xkU2VydmljZS5nZXRTZXR0aW5nc0FjdGl2aXR5TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXJ2aWNlLmdldFNldHRpbmdzQWN0aXZpdHlOYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHNvbWVTZXJ2aWNlQ2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzb21lU2VydmljZUNoYW5nZWQpIHsKICAgICAgICAgICAgIG1JbnN0YWxsZWRTZXJ2aWNlcy5jbGVhcigpOwogICAgICAgICAgICAgbUluc3RhbGxlZFNlcnZpY2VzLmFkZEFsbCh0ZW1wUHJpbnRTZXJ2aWNlcyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc2MSwxMSArNzkwLDE2IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWRMb2NrZWQoKSB7CisgICAgICAgIFNldDxDb21wb25lbnROYW1lPiBpbnN0YWxsZWRDb21wb25lbnRzID0gbmV3IEFycmF5U2V0PENvbXBvbmVudE5hbWU+KCk7CisKICAgICAgICAgZmluYWwgaW50IGluc3RhbGxlZENvdW50ID0gbUluc3RhbGxlZFNlcnZpY2VzLnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YWxsZWRDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBSZXNvbHZlSW5mbyByZXNvbHZlSW5mbyA9IG1JbnN0YWxsZWRTZXJ2aWNlcy5nZXQoaSkuZ2V0UmVzb2x2ZUluZm8oKTsKICAgICAgICAgICAgIENvbXBvbmVudE5hbWUgc2VydmljZU5hbWUgPSBuZXcgQ29tcG9uZW50TmFtZShyZXNvbHZlSW5mby5zZXJ2aWNlSW5mby5wYWNrYWdlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUluZm8uc2VydmljZUluZm8ubmFtZSk7CisKKyAgICAgICAgICAgIGluc3RhbGxlZENvbXBvbmVudHMuYWRkKHNlcnZpY2VOYW1lKTsKKwogICAgICAgICAgICAgaWYgKG1FbmFibGVkU2VydmljZXMuY29udGFpbnMoc2VydmljZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtQWN0aXZlU2VydmljZXMuY29udGFpbnNLZXkoc2VydmljZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbW90ZVByaW50U2VydmljZSBzZXJ2aWNlID0gbmV3IFJlbW90ZVByaW50U2VydmljZSgKQEAgLTc3OSw2ICs4MTMsMTggQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBJdGVyYXRvcjxNYXAuRW50cnk8Q29tcG9uZW50TmFtZSwgUmVtb3RlUHJpbnRTZXJ2aWNlPj4gaXRlcmF0b3IgPQorICAgICAgICAgICAgICAgIG1BY3RpdmVTZXJ2aWNlcy5lbnRyeVNldCgpLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIE1hcC5FbnRyeTxDb21wb25lbnROYW1lLCBSZW1vdGVQcmludFNlcnZpY2U+IGVudHJ5ID0gaXRlcmF0b3IubmV4dCgpOworICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBzZXJ2aWNlTmFtZSA9IGVudHJ5LmdldEtleSgpOworICAgICAgICAgICAgUmVtb3RlUHJpbnRTZXJ2aWNlIHNlcnZpY2UgPSBlbnRyeS5nZXRWYWx1ZSgpOworICAgICAgICAgICAgaWYgKCFpbnN0YWxsZWRDb21wb25lbnRzLmNvbnRhaW5zKHNlcnZpY2VOYW1lKSkgeworICAgICAgICAgICAgICAgIHJlbW92ZVNlcnZpY2VMb2NrZWQoc2VydmljZSk7CisgICAgICAgICAgICAgICAgaXRlcmF0b3IucmVtb3ZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYWRkU2VydmljZUxvY2tlZChSZW1vdGVQcmludFNlcnZpY2Ugc2VydmljZSkgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvU3luY1N0b3JhZ2VFbmdpbmVUZXN0LmphdmEgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jU3RvcmFnZUVuZ2luZVRlc3QuamF2YQppbmRleCBmODcwZTRjLi43MGZkODEwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jU3RvcmFnZUVuZ2luZVRlc3QuamF2YQorKysgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jU3RvcmFnZUVuZ2luZVRlc3QuamF2YQpAQCAtMTcsNiArMTcsNyBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIuY29udGVudDsKIAogaW1wb3J0IGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0V3JhcHBlcjsKQEAgLTMyLDIyICszMywzNCBAQAogaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0OwogaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7CiAKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuY29udGVudC5TeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludDsKKwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLkF0b21pY0ZpbGU7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmNvbnRlbnQuU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQ7CisKIHB1YmxpYyBjbGFzcyBTeW5jU3RvcmFnZUVuZ2luZVRlc3QgZXh0ZW5kcyBBbmRyb2lkVGVzdENhc2UgewogCiAgICAgcHJvdGVjdGVkIEFjY291bnQgYWNjb3VudDE7CisgICAgcHJvdGVjdGVkIEFjY291bnQgYWNjb3VudDI7CisgICAgcHJvdGVjdGVkIENvbXBvbmVudE5hbWUgc3luY1NlcnZpY2UxOwogICAgIHByb3RlY3RlZCBTdHJpbmcgYXV0aG9yaXR5MSA9ICJ0ZXN0cHJvdmlkZXIiOwogICAgIHByb3RlY3RlZCBCdW5kbGUgZGVmYXVsdEJ1bmRsZTsKICAgICBwcm90ZWN0ZWQgZmluYWwgaW50IERFRkFVTFRfVVNFUiA9IDA7Ci0gICAgCisKKyAgICAvKiBTb21lIGRlZmF1bHQgcG9sbCBmcmVxdWVuY2llcy4gKi8KKyAgICBmaW5hbCBsb25nIGRheVBvbGwgPSAoNjAgKiA2MCAqIDI0KTsKKyAgICBmaW5hbCBsb25nIGRheUZ1enogPSA2MDsKKyAgICBmaW5hbCBsb25nIHRob3VzYW5kU2VjcyA9IDEwMDA7CisgICAgZmluYWwgbG9uZyB0aG91c2FuZFNlY3NGdXp6ID0gMTAwOworCiAgICAgTW9ja0NvbnRlbnRSZXNvbHZlciBtb2NrUmVzb2x2ZXI7CiAgICAgU3luY1N0b3JhZ2VFbmdpbmUgZW5naW5lOwotICAgIAorCiAgICAgcHJpdmF0ZSBGaWxlIGdldFN5bmNEaXIoKSB7CiAgICAgICAgIHJldHVybiBuZXcgRmlsZShuZXcgRmlsZShnZXRDb250ZXh0KCkuZ2V0RmlsZXNEaXIoKSwgInN5c3RlbSIpLCAic3luYyIpOwogICAgIH0KQEAgLTU1LDYgKzY4LDggQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKICAgICAgICAgYWNjb3VudDEgPSBuZXcgQWNjb3VudCgiYUBleGFtcGxlLmNvbSIsICJleGFtcGxlLnR5cGUiKTsKKyAgICAgICAgYWNjb3VudDIgPSBuZXcgQWNjb3VudCgiYkBleGFtcGxlLmNvbSIsICJleGFtcGxlLnR5cGUiKTsKKyAgICAgICAgc3luY1NlcnZpY2UxID0gbmV3IENvbXBvbmVudE5hbWUoImNvbS5leGFtcGxlIiwgIlN5bmNTZXJ2aWNlIik7CiAgICAgICAgIC8vIERlZmF1bHQgYnVuZGxlLgogICAgICAgICBkZWZhdWx0QnVuZGxlID0gbmV3IEJ1bmRsZSgpOwogICAgICAgICBkZWZhdWx0QnVuZGxlLnB1dEludCgiaW50X2tleSIsIDApOwpAQCAtODAsMTEgKzk1LDEzIEBACiAKICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUgZW5naW5lID0gU3luY1N0b3JhZ2VFbmdpbmUubmV3VGVzdEluc3RhbmNlKAogICAgICAgICAgICAgICAgIG5ldyBUZXN0Q29udGV4dChtb2NrUmVzb2x2ZXIsIGdldENvbnRleHQoKSkpOwotCiAgICAgICAgIGxvbmcgdGltZTAgPSAxMDAwOwotICAgICAgICBsb25nIGhpc3RvcnlJZCA9IGVuZ2luZS5pbnNlcnRTdGFydFN5bmNFdmVudCgKLSAgICAgICAgICAgICAgICBhY2NvdW50LCAwLCBTeW5jT3BlcmF0aW9uLlJFQVNPTl9QRVJJT0RJQywgYXV0aG9yaXR5LCB0aW1lMCwKLSAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5TT1VSQ0VfTE9DQUwsIGZhbHNlIC8qIGluaXRpYWxpemF0aW9uICovLCBudWxsIC8qIGV4dHJhcyAqLyk7CisgICAgICAgIFN5bmNPcGVyYXRpb24gb3AgPSBuZXcgU3luY09wZXJhdGlvbihhY2NvdW50LCAwLAorICAgICAgICAgICAgICAgIFN5bmNPcGVyYXRpb24uUkVBU09OX1BFUklPRElDLAorICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlNPVVJDRV9MT0NBTCwKKyAgICAgICAgICAgICAgICBhdXRob3JpdHksCisgICAgICAgICAgICAgICAgQnVuZGxlLkVNUFRZLCB0aW1lMCwgMCAvKiBmbGV4Ki8sIDAsIDAsIHRydWUpOworICAgICAgICBsb25nIGhpc3RvcnlJZCA9IGVuZ2luZS5pbnNlcnRTdGFydFN5bmNFdmVudChvcCwgdGltZTApOwogICAgICAgICBsb25nIHRpbWUxID0gdGltZTAgKyBTeW5jU3RvcmFnZUVuZ2luZS5NSUxMSVNfSU5fNFdFRUtTICogMjsKICAgICAgICAgZW5naW5lLnN0b3BTeW5jRXZlbnQoaGlzdG9yeUlkLCB0aW1lMSAtIHRpbWUwLCAieWF5IiwgMCwgMCk7CiAgICAgfQpAQCAtOTMsMjggKzExMCwxMDAgQEAKICAgICAgKiBUZXN0IHBlcnNpc3RlbmNlIG9mIHBlbmRpbmcgb3BlcmF0aW9ucy4KICAgICAgKi8KICAgICBATWVkaXVtVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RQZW5kaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlBlbmRpbmdPcGVyYXRpb24gcG9wID0KLSAgICAgICAgICAgICAgICBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuUGVuZGluZ09wZXJhdGlvbihhY2NvdW50MSwgREVGQVVMVF9VU0VSLAotICAgICAgICAgICAgICAgICAgICAgICAgU3luY09wZXJhdGlvbi5SRUFTT05fUEVSSU9ESUMsIFN5bmNTdG9yYWdlRW5naW5lLlNPVVJDRV9MT0NBTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eTEsIGRlZmF1bHRCdW5kbGUsIGZhbHNlKTsKLSAgICAgICAgCi0gICAgICAgIGVuZ2luZS5pbnNlcnRJbnRvUGVuZGluZyhwb3ApOworICAgIHB1YmxpYyB2b2lkIHRlc3RBcHBlbmRQZW5kaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN5bmNPcGVyYXRpb24gc29wID0gbmV3IFN5bmNPcGVyYXRpb24oYWNjb3VudDEsCisgICAgICAgICAgICAgICAgREVGQVVMVF9VU0VSLAorICAgICAgICAgICAgICAgIFN5bmNPcGVyYXRpb24uUkVBU09OX1BFUklPRElDLAorICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlNPVVJDRV9MT0NBTCwgYXV0aG9yaXR5MSwgQnVuZGxlLkVNUFRZLAorICAgICAgICAgICAgICAgIDAgLyogcnVudGltZSAqLywgMCAvKiBmbGV4ICovLCAwIC8qIGJhY2tvZmYgKi8sIDAgLyogZGVsYXl1bnRpbCAqLywKKyAgICAgICAgICAgICAgICB0cnVlIC8qIGV4cGVkaXRlZCAqLyk7CisgICAgICAgIGVuZ2luZS5pbnNlcnRJbnRvUGVuZGluZyhzb3ApOworCiAgICAgICAgIC8vIEZvcmNlIGVuZ2luZSB0byByZWFkIGZyb20gZGlzay4KICAgICAgICAgZW5naW5lLmNsZWFyQW5kUmVhZFN0YXRlKCk7CiAKLSAgICAgICAgYXNzZXJ0KGVuZ2luZS5nZXRQZW5kaW5nT3BlcmF0aW9uQ291bnQoKSA9PSAxKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShlbmdpbmUuZ2V0UGVuZGluZ09wZXJhdGlvbkNvdW50KCkgPT0gMSk7CiAgICAgICAgIExpc3Q8U3luY1N0b3JhZ2VFbmdpbmUuUGVuZGluZ09wZXJhdGlvbj4gcG9wcyA9IGVuZ2luZS5nZXRQZW5kaW5nT3BlcmF0aW9ucygpOwogICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5QZW5kaW5nT3BlcmF0aW9uIHBvcFJldHJpZXZlZCA9IHBvcHMuZ2V0KDApOwotICAgICAgICBhc3NlcnRFcXVhbHMocG9wLmFjY291bnQsIHBvcFJldHJpZXZlZC5hY2NvdW50KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHBvcC5yZWFzb24sIHBvcFJldHJpZXZlZC5yZWFzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMocG9wLnVzZXJJZCwgcG9wUmV0cmlldmVkLnVzZXJJZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhwb3Auc3luY1NvdXJjZSwgcG9wUmV0cmlldmVkLnN5bmNTb3VyY2UpOwotICAgICAgICBhc3NlcnRFcXVhbHMocG9wLmF1dGhvcml0eSwgcG9wUmV0cmlldmVkLmF1dGhvcml0eSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhwb3AuZXhwZWRpdGVkLCBwb3BSZXRyaWV2ZWQuZXhwZWRpdGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHBvcC5zZXJ2aWNlTmFtZSwgcG9wUmV0cmlldmVkLnNlcnZpY2VOYW1lKTsKLSAgICAgICAgYXNzZXJ0KGFuZHJvaWQuY29udGVudC5QZXJpb2RpY1N5bmMuc3luY0V4dHJhc0VxdWFscyhwb3AuZXh0cmFzLCBwb3BSZXRyaWV2ZWQuZXh0cmFzKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3AudGFyZ2V0LmFjY291bnQsIHBvcFJldHJpZXZlZC50YXJnZXQuYWNjb3VudCk7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3AudGFyZ2V0LnByb3ZpZGVyLCBwb3BSZXRyaWV2ZWQudGFyZ2V0LnByb3ZpZGVyKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcC50YXJnZXQuc2VydmljZSwgcG9wUmV0cmlldmVkLnRhcmdldC5zZXJ2aWNlKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcC50YXJnZXQudXNlcklkLCBwb3BSZXRyaWV2ZWQudGFyZ2V0LnVzZXJJZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3AucmVhc29uLCBwb3BSZXRyaWV2ZWQucmVhc29uKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcC5zeW5jU291cmNlLCBwb3BSZXRyaWV2ZWQuc3luY1NvdXJjZSk7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3AuZXhwZWRpdGVkLCBwb3BSZXRyaWV2ZWQuZXhwZWRpdGVkKTsKKyAgICAgICAgYXNzZXJ0KGFuZHJvaWQuY29udGVudC5QZXJpb2RpY1N5bmMuc3luY0V4dHJhc0VxdWFscyhzb3AuZXh0cmFzLCBwb3BSZXRyaWV2ZWQuZXh0cmFzKSk7CisgICAgfQogCisgICAgLyoqCisgICAgICogVmVyaWZ5IHtAbGluayBjb20uYW5kcm9pZC5zZXJ2ZXIuY29udGVudC5TeW5jU3RvcmFnZUVuZ2luZSN3cml0ZVBlbmRpbmdPcGVyYXRpb25zTG9ja2VkKCl9CisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdFdyaXRlUGVuZGluZ09wZXJhdGlvbnNMb2NrZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3luY09wZXJhdGlvbiBzb3AgPSBuZXcgU3luY09wZXJhdGlvbihhY2NvdW50MSwKKyAgICAgICAgICAgICAgICBERUZBVUxUX1VTRVIsCisgICAgICAgICAgICAgICAgU3luY09wZXJhdGlvbi5SRUFTT05fSVNfU1lOQ0FCTEUsCisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX0xPQ0FMLCBhdXRob3JpdHkxLCBCdW5kbGUuRU1QVFksCisgICAgICAgICAgICAgICAgMTAwMEwgLyogcnVudGltZSAqLywgNTdMIC8qIGZsZXggKi8sIDAgLyogYmFja29mZiAqLywgMCAvKiBkZWxheXVudGlsICovLAorICAgICAgICAgICAgICAgIHRydWUgLyogZXhwZWRpdGVkICovKTsKKyAgICAgICAgU3luY09wZXJhdGlvbiBzb3AxID0gbmV3IFN5bmNPcGVyYXRpb24oYWNjb3VudDIsCisgICAgICAgICAgICAgICAgREVGQVVMVF9VU0VSLAorICAgICAgICAgICAgICAgIFN5bmNPcGVyYXRpb24uUkVBU09OX1BFUklPRElDLAorICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlNPVVJDRV9MT0NBTCwgYXV0aG9yaXR5MSwgZGVmYXVsdEJ1bmRsZSwKKyAgICAgICAgICAgICAgICAwIC8qIHJ1bnRpbWUgKi8sIDAgLyogZmxleCAqLywgMjBMIC8qIGJhY2tvZmYgKi8sIDEwMEwgLyogZGVsYXl1bnRpbCAqLywKKyAgICAgICAgICAgICAgICBmYWxzZSAvKiBleHBlZGl0ZWQgKi8pOworICAgICAgICBTeW5jT3BlcmF0aW9uIGRlbGV0ZWQgPSBuZXcgU3luY09wZXJhdGlvbihhY2NvdW50MiwKKyAgICAgICAgICAgICAgICBERUZBVUxUX1VTRVIsCisgICAgICAgICAgICAgICAgU3luY09wZXJhdGlvbi5SRUFTT05fU1lOQ19BVVRPLAorICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlNPVVJDRV9MT0NBTCwgYXV0aG9yaXR5MSwgQnVuZGxlLkVNUFRZLAorICAgICAgICAgICAgICAgIDAgLyogcnVudGltZSAqLywgMCAvKiBmbGV4ICovLCAyMEwgLyogYmFja29mZiAqLywgMTAwTCAvKiBkZWxheXVudGlsICovLAorICAgICAgICAgICAgICAgIGZhbHNlIC8qIGV4cGVkaXRlZCAqLyk7CisgICAgICAgIGVuZ2luZS5pbnNlcnRJbnRvUGVuZGluZyhzb3ApOworICAgICAgICBlbmdpbmUuaW5zZXJ0SW50b1BlbmRpbmcoc29wMSk7CisgICAgICAgIGVuZ2luZS5pbnNlcnRJbnRvUGVuZGluZyhkZWxldGVkKTsKKworICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5QZW5kaW5nT3BlcmF0aW9uIHBvcERlbGV0ZWQgPSBlbmdpbmUuZ2V0UGVuZGluZ09wZXJhdGlvbnMoKS5nZXQoMik7CisgICAgICAgIC8vIEZyZWUgdmVyaWZ5aW5nLCBnb2luZyB0byBkZWxldGUgaXQgYW55d2F5LgorICAgICAgICBhc3NlcnRFcXVhbHMoZGVsZXRlZC50YXJnZXQuYWNjb3VudCwgcG9wRGVsZXRlZC50YXJnZXQuYWNjb3VudCk7CisgICAgICAgIGFzc2VydEVxdWFscyhkZWxldGVkLnRhcmdldC5wcm92aWRlciwgcG9wRGVsZXRlZC50YXJnZXQucHJvdmlkZXIpOworICAgICAgICBhc3NlcnRFcXVhbHMoZGVsZXRlZC50YXJnZXQuc2VydmljZSwgcG9wRGVsZXRlZC50YXJnZXQuc2VydmljZSk7CisgICAgICAgIGFzc2VydEVxdWFscyhkZWxldGVkLnRhcmdldC51c2VySWQsIHBvcERlbGV0ZWQudGFyZ2V0LnVzZXJJZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhkZWxldGVkLnJlYXNvbiwgcG9wRGVsZXRlZC5yZWFzb24pOworICAgICAgICBhc3NlcnRFcXVhbHMoZGVsZXRlZC5zeW5jU291cmNlLCBwb3BEZWxldGVkLnN5bmNTb3VyY2UpOworICAgICAgICBhc3NlcnRFcXVhbHMoZGVsZXRlZC5leHBlZGl0ZWQsIHBvcERlbGV0ZWQuZXhwZWRpdGVkKTsKKyAgICAgICAgYXNzZXJ0KGFuZHJvaWQuY29udGVudC5QZXJpb2RpY1N5bmMuc3luY0V4dHJhc0VxdWFscyhkZWxldGVkLmV4dHJhcywgcG9wRGVsZXRlZC5leHRyYXMpKTsKKyAgICAgICAgLy8gRGVsZXRlIG9uZSB0byBmb3JjZSB3cml0ZS1hbGwKKyAgICAgICAgZW5naW5lLmRlbGV0ZUZyb21QZW5kaW5nKHBvcERlbGV0ZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoIkRlbGV0ZSBvZiBwZW5kaW5nIG9wIGZhaWxlZC4iLCAyLCBlbmdpbmUuZ2V0UGVuZGluZ09wZXJhdGlvbkNvdW50KCkpOworICAgICAgICAvLyBJZiB0aGVyZSdzIGRpcnR5IHBlbmRpbmcgZGF0YSAod2hpY2ggdGhlcmUgaXMgYmVjYXVzZSB3ZSBkZWxldGVkIGEgcGVuZGluZyBvcCkgdGhpcworICAgICAgICAvLyByZS13cml0ZXMgdGhlIGVudGlyZSBmaWxlLgorICAgICAgICBlbmdpbmUud3JpdGVBbGxTdGF0ZSgpOworCisgICAgICAgIGVuZ2luZS5jbGVhckFuZFJlYWRTdGF0ZSgpOworCisgICAgICAgIC8vIFZhbGlkYXRlIHN0YXRlIHJlYWQgYmFjayBvdXQuCisgICAgICAgIGFzc2VydEVxdWFscygiRGVsZXRlIG9mIHBlbmRpbmcgb3AgZmFpbGVkLiIsIDIsIGVuZ2luZS5nZXRQZW5kaW5nT3BlcmF0aW9uQ291bnQoKSk7CisKKyAgICAgICAgTGlzdDxTeW5jU3RvcmFnZUVuZ2luZS5QZW5kaW5nT3BlcmF0aW9uPiBwb3BzID0gZW5naW5lLmdldFBlbmRpbmdPcGVyYXRpb25zKCk7CisKKyAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuUGVuZGluZ09wZXJhdGlvbiBwb3BSZXRyaWV2ZWQgPSBwb3BzLmdldCgwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcC50YXJnZXQuYWNjb3VudCwgcG9wUmV0cmlldmVkLnRhcmdldC5hY2NvdW50KTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcC50YXJnZXQucHJvdmlkZXIsIHBvcFJldHJpZXZlZC50YXJnZXQucHJvdmlkZXIpOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wLnRhcmdldC5zZXJ2aWNlLCBwb3BSZXRyaWV2ZWQudGFyZ2V0LnNlcnZpY2UpOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wLnRhcmdldC51c2VySWQsIHBvcFJldHJpZXZlZC50YXJnZXQudXNlcklkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcC5yZWFzb24sIHBvcFJldHJpZXZlZC5yZWFzb24pOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wLnN5bmNTb3VyY2UsIHBvcFJldHJpZXZlZC5zeW5jU291cmNlKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcC5leHBlZGl0ZWQsIHBvcFJldHJpZXZlZC5leHBlZGl0ZWQpOworICAgICAgICBhc3NlcnQoYW5kcm9pZC5jb250ZW50LlBlcmlvZGljU3luYy5zeW5jRXh0cmFzRXF1YWxzKHNvcC5leHRyYXMsIHBvcFJldHJpZXZlZC5leHRyYXMpKTsKKworICAgICAgICBwb3BSZXRyaWV2ZWQgPSBwb3BzLmdldCgxKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcDEudGFyZ2V0LmFjY291bnQsIHBvcFJldHJpZXZlZC50YXJnZXQuYWNjb3VudCk7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3AxLnRhcmdldC5wcm92aWRlciwgcG9wUmV0cmlldmVkLnRhcmdldC5wcm92aWRlcik7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3AxLnRhcmdldC5zZXJ2aWNlLCBwb3BSZXRyaWV2ZWQudGFyZ2V0LnNlcnZpY2UpOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wMS50YXJnZXQudXNlcklkLCBwb3BSZXRyaWV2ZWQudGFyZ2V0LnVzZXJJZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3AxLnJlYXNvbiwgcG9wUmV0cmlldmVkLnJlYXNvbik7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3AxLnN5bmNTb3VyY2UsIHBvcFJldHJpZXZlZC5zeW5jU291cmNlKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcDEuZXhwZWRpdGVkLCBwb3BSZXRyaWV2ZWQuZXhwZWRpdGVkKTsKKyAgICAgICAgYXNzZXJ0KGFuZHJvaWQuY29udGVudC5QZXJpb2RpY1N5bmMuc3luY0V4dHJhc0VxdWFscyhzb3AxLmV4dHJhcywgcG9wUmV0cmlldmVkLmV4dHJhcykpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTM0LDQyICsyMjMsNDQgQEAKICAgICAgICAgZmluYWwgaW50IHBlcmlvZDIgPSAxMDAwOwogCiAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jMSA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudDEsIGF1dGhvcml0eSwgZXh0cmFzMSwgcGVyaW9kMSk7CisgICAgICAgIEVuZFBvaW50IGVuZDEgPSBuZXcgRW5kUG9pbnQoYWNjb3VudDEsIGF1dGhvcml0eSwgMCk7CisKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMyID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50MSwgYXV0aG9yaXR5LCBleHRyYXMyLCBwZXJpb2QxKTsKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMzID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50MSwgYXV0aG9yaXR5LCBleHRyYXMyLCBwZXJpb2QyKTsKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmM0ID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50MiwgYXV0aG9yaXR5LCBleHRyYXMyLCBwZXJpb2QyKTsKIAotICAgICAgICAKKwogCiAgICAgICAgIHJlbW92ZVBlcmlvZGljU3luY3MoZW5naW5lLCBhY2NvdW50MSwgMCwgYXV0aG9yaXR5KTsKICAgICAgICAgcmVtb3ZlUGVyaW9kaWNTeW5jcyhlbmdpbmUsIGFjY291bnQyLCAwLCBhdXRob3JpdHkpOwogICAgICAgICByZW1vdmVQZXJpb2RpY1N5bmNzKGVuZ2luZSwgYWNjb3VudDEsIDEsIGF1dGhvcml0eSk7CiAKICAgICAgICAgLy8gdGhpcyBzaG91bGQgYWRkIHR3byBkaXN0aW5jdCBwZXJpb2RpYyBzeW5jcyBmb3IgYWNjb3VudDEgYW5kIG9uZSBmb3IgYWNjb3VudDIKLSAgICAgICAgZW5naW5lLmFkZFBlcmlvZGljU3luYyhzeW5jMSwgMCk7Ci0gICAgICAgIGVuZ2luZS5hZGRQZXJpb2RpY1N5bmMoc3luYzIsIDApOwotICAgICAgICBlbmdpbmUuYWRkUGVyaW9kaWNTeW5jKHN5bmMzLCAwKTsKLSAgICAgICAgZW5naW5lLmFkZFBlcmlvZGljU3luYyhzeW5jNCwgMCk7CisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyhuZXcgRW5kUG9pbnQoYWNjb3VudDEsIGF1dGhvcml0eSwgMCksIHBlcmlvZDEsIDAsIGV4dHJhczEpOworICAgICAgICBlbmdpbmUudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmMobmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHksIDApLCBwZXJpb2QxLCAwLCBleHRyYXMyKTsKKyAgICAgICAgZW5naW5lLnVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKG5ldyBFbmRQb2ludChhY2NvdW50MSwgYXV0aG9yaXR5LCAwKSwgcGVyaW9kMiwgMCwgZXh0cmFzMik7CisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyhuZXcgRW5kUG9pbnQoYWNjb3VudDIsIGF1dGhvcml0eSwgMCksIHBlcmlvZDIsIDAsIGV4dHJhczIpOwogICAgICAgICAvLyBhZGQgYSBzZWNvbmQgdXNlcgotICAgICAgICBlbmdpbmUuYWRkUGVyaW9kaWNTeW5jKHN5bmMyLCAxKTsKKyAgICAgICAgZW5naW5lLnVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKG5ldyBFbmRQb2ludChhY2NvdW50MSwgYXV0aG9yaXR5LCAxKSwgcGVyaW9kMSwgMCwgZXh0cmFzMik7CiAKLSAgICAgICAgTGlzdDxQZXJpb2RpY1N5bmM+IHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudDEsIDAsIGF1dGhvcml0eSk7CisgICAgICAgIExpc3Q8UGVyaW9kaWNTeW5jPiBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKG5ldyBFbmRQb2ludChhY2NvdW50MSwgYXV0aG9yaXR5LCAwKSk7CiAKICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHN5bmNzLnNpemUoKSk7CiAKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMxLCBzeW5jcy5nZXQoMCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzMsIHN5bmNzLmdldCgxKSk7CiAKLSAgICAgICAgZW5naW5lLnJlbW92ZVBlcmlvZGljU3luYyhzeW5jMSwgMCk7CisgICAgICAgIGVuZ2luZS5yZW1vdmVQZXJpb2RpY1N5bmMobmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHksIDApLCBleHRyYXMxKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQxLCAwLCBhdXRob3JpdHkpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKG5ldyBFbmRQb2ludChhY2NvdW50MSwgYXV0aG9yaXR5LCAwKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzMsIHN5bmNzLmdldCgwKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50MiwgMCwgYXV0aG9yaXR5KTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhuZXcgRW5kUG9pbnQoYWNjb3VudDIsIGF1dGhvcml0eSwgMCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmM0LCBzeW5jcy5nZXQoMCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3Moc3luYzIuYWNjb3VudCwgMSwgc3luYzIuYXV0aG9yaXR5KTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhuZXcgRW5kUG9pbnQoc3luYzIuYWNjb3VudCwgc3luYzIuYXV0aG9yaXR5LCAxKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzIsIHN5bmNzLmdldCgwKSk7CiAgICAgfQpAQCAtMTkwLDEyICsyODEsMTkgQEAKICAgICAgICAgZmluYWwgaW50IHBlcmlvZDIgPSAxMDAwOwogICAgICAgICBmaW5hbCBpbnQgZmxleDEgPSAxMDsKICAgICAgICAgZmluYWwgaW50IGZsZXgyID0gMTAwOworICAgICAgICBFbmRQb2ludCBwb2ludDEgPSBuZXcgRW5kUG9pbnQoYWNjb3VudDEsIGF1dGhvcml0eSwgMCk7CisgICAgICAgIEVuZFBvaW50IHBvaW50MiA9IG5ldyBFbmRQb2ludChhY2NvdW50MiwgYXV0aG9yaXR5LCAwKTsKKyAgICAgICAgRW5kUG9pbnQgcG9pbnQxVXNlcjIgPSBuZXcgRW5kUG9pbnQoYWNjb3VudDEsIGF1dGhvcml0eSwgMSk7CiAKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMxID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50MSwgYXV0aG9yaXR5LCBleHRyYXMxLCBwZXJpb2QxLCBmbGV4MSk7CiAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jMiA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudDEsIGF1dGhvcml0eSwgZXh0cmFzMiwgcGVyaW9kMSwgZmxleDEpOwogICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzMgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQxLCBhdXRob3JpdHksIGV4dHJhczIsIHBlcmlvZDIsIGZsZXgyKTsKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmM0ID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50MiwgYXV0aG9yaXR5LCBleHRyYXMyLCBwZXJpb2QyLCBmbGV4Mik7CiAKKyAgICAgICAgRW5kUG9pbnQgdGFyZ2V0MSA9IG5ldyBFbmRQb2ludChhY2NvdW50MSwgYXV0aG9yaXR5LCAwKTsKKyAgICAgICAgRW5kUG9pbnQgdGFyZ2V0MiA9IG5ldyBFbmRQb2ludChhY2NvdW50MiwgYXV0aG9yaXR5LCAwKTsKKyAgICAgICAgRW5kUG9pbnQgdGFyZ2V0MVVzZXJCID0gbmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHksIDEpOworCiAgICAgICAgIE1vY2tDb250ZW50UmVzb2x2ZXIgbW9ja1Jlc29sdmVyID0gbmV3IE1vY2tDb250ZW50UmVzb2x2ZXIoKTsKIAogICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZSBlbmdpbmUgPSBTeW5jU3RvcmFnZUVuZ2luZS5uZXdUZXN0SW5zdGFuY2UoCkBAIC0yMDYsNDAgKzMwNCw0MiBAQAogICAgICAgICByZW1vdmVQZXJpb2RpY1N5bmNzKGVuZ2luZSwgYWNjb3VudDEsIDEsIGF1dGhvcml0eSk7CiAKICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWRkIHR3byBkaXN0aW5jdCBwZXJpb2RpYyBzeW5jcyBmb3IgYWNjb3VudDEgYW5kIG9uZSBmb3IgYWNjb3VudDIKLSAgICAgICAgZW5naW5lLmFkZFBlcmlvZGljU3luYyhzeW5jMSwgMCk7Ci0gICAgICAgIGVuZ2luZS5hZGRQZXJpb2RpY1N5bmMoc3luYzIsIDApOwotICAgICAgICBlbmdpbmUuYWRkUGVyaW9kaWNTeW5jKHN5bmMzLCAwKTsgLy8gU2hvdWxkIGVkaXQgc3luYzIgYW5kIHVwZGF0ZSB0aGUgcGVyaW9kLgotICAgICAgICBlbmdpbmUuYWRkUGVyaW9kaWNTeW5jKHN5bmM0LCAwKTsKLSAgICAgICAgLy8gYWRkIGEgc2Vjb25kIHVzZXIKLSAgICAgICAgZW5naW5lLmFkZFBlcmlvZGljU3luYyhzeW5jMiwgMSk7CisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyh0YXJnZXQxLCBwZXJpb2QxLCBmbGV4MSwgZXh0cmFzMSk7CisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyh0YXJnZXQxLCBwZXJpb2QxLCBmbGV4MSwgZXh0cmFzMik7CisgICAgICAgIC8vIEVkaXQgZXhpc3Rpbmcgc3luYyBhbmQgdXBkYXRlIHRoZSBwZXJpb2QgYW5kIGZsZXguCisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyh0YXJnZXQxLCBwZXJpb2QyLCBmbGV4MiwgZXh0cmFzMik7CisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyh0YXJnZXQyLCBwZXJpb2QyLCBmbGV4MiwgZXh0cmFzMik7CisgICAgICAgIC8vIGFkZCBhIHRhcmdldCBmb3IgYSBzZWNvbmQgdXNlci4KKyAgICAgICAgZW5naW5lLnVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKHRhcmdldDFVc2VyQiwgcGVyaW9kMSwgZmxleDEsIGV4dHJhczIpOwogCi0gICAgICAgIExpc3Q8UGVyaW9kaWNTeW5jPiBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQxLCAwLCBhdXRob3JpdHkpOworICAgICAgICBMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQxKTsKIAogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc3luY3Muc2l6ZSgpKTsKIAogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzEsIHN5bmNzLmdldCgwKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMywgc3luY3MuZ2V0KDEpKTsKIAotICAgICAgICBlbmdpbmUucmVtb3ZlUGVyaW9kaWNTeW5jKHN5bmMxLCAwKTsKKyAgICAgICAgZW5naW5lLnJlbW92ZVBlcmlvZGljU3luYyh0YXJnZXQxLCBleHRyYXMxKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQxLCAwLCBhdXRob3JpdHkpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDEpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMzLCBzeW5jcy5nZXQoMCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudDIsIDAsIGF1dGhvcml0eSk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Mik7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzQsIHN5bmNzLmdldCgwKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhzeW5jMi5hY2NvdW50LCAxLCBzeW5jMi5hdXRob3JpdHkpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDFVc2VyQik7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzIsIHN5bmNzLmdldCgwKSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlbW92ZVBlcmlvZGljU3luY3MoU3luY1N0b3JhZ2VFbmdpbmUgZW5naW5lLCBBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIFN0cmluZyBhdXRob3JpdHkpIHsKLSAgICAgICAgZW5naW5lLnNldElzU3luY2FibGUoYWNjb3VudCwgdXNlcklkLCBhdXRob3JpdHksIGVuZ2luZS5nZXRJc1N5bmNhYmxlKGFjY291bnQsIDAsIGF1dGhvcml0eSkpOwotICAgICAgICBMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCB1c2VySWQsIGF1dGhvcml0eSk7CisgICAgICAgIEVuZFBvaW50IHRhcmdldCA9IG5ldyBFbmRQb2ludChhY2NvdW50LCBhdXRob3JpdHksIHVzZXJJZCk7CisgICAgICAgIGVuZ2luZS5zZXRJc1N5bmNhYmxlKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5LCBlbmdpbmUuZ2V0SXNTeW5jYWJsZShhY2NvdW50LCB1c2VySWQsIGF1dGhvcml0eSkpOworICAgICAgICBMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQpOwogICAgICAgICBmb3IgKFBlcmlvZGljU3luYyBzeW5jIDogc3luY3MpIHsKLSAgICAgICAgICAgIGVuZ2luZS5yZW1vdmVQZXJpb2RpY1N5bmMoc3luYywgdXNlcklkKTsKKyAgICAgICAgICAgIGVuZ2luZS5yZW1vdmVQZXJpb2RpY1N5bmModGFyZ2V0LCBzeW5jLmV4dHJhcyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI2NCwxNiArMzY0LDE5IEBACiAgICAgICAgIGZpbmFsIGludCBmbGV4MSA9IDEwOwogICAgICAgICBmaW5hbCBpbnQgZmxleDIgPSAxMDA7CiAKKyAgICAgICAgRW5kUG9pbnQgcG9pbnQxID0gbmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHkxLCAwKTsKKyAgICAgICAgRW5kUG9pbnQgcG9pbnQyID0gbmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHkyLCAwKTsKKyAgICAgICAgRW5kUG9pbnQgcG9pbnQzID0gbmV3IEVuZFBvaW50KGFjY291bnQyLCBhdXRob3JpdHkxLCAwKTsKKwogICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzEgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQxLCBhdXRob3JpdHkxLCBleHRyYXMxLCBwZXJpb2QxLCBmbGV4MSk7CiAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jMiA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudDEsIGF1dGhvcml0eTEsIGV4dHJhczIsIHBlcmlvZDEsIGZsZXgxKTsKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMzID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50MSwgYXV0aG9yaXR5MiwgZXh0cmFzMSwgcGVyaW9kMSwgZmxleDEpOwogICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzQgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQxLCBhdXRob3JpdHkyLCBleHRyYXMyLCBwZXJpb2QyLCBmbGV4Mik7CiAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jNSA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudDIsIGF1dGhvcml0eTEsIGV4dHJhczEsIHBlcmlvZDEsIGZsZXgxKTsKIAotICAgICAgICBNb2NrQ29udGVudFJlc29sdmVyIG1vY2tSZXNvbHZlciA9IG5ldyBNb2NrQ29udGVudFJlc29sdmVyKCk7Ci0KLSAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUgZW5naW5lID0gU3luY1N0b3JhZ2VFbmdpbmUubmV3VGVzdEluc3RhbmNlKAotICAgICAgICAgICAgICAgIG5ldyBUZXN0Q29udGV4dChtb2NrUmVzb2x2ZXIsIGdldENvbnRleHQoKSkpOworICAgICAgICBFbmRQb2ludCB0YXJnZXQxID0gbmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHkxLCAwKTsKKyAgICAgICAgRW5kUG9pbnQgdGFyZ2V0MiA9IG5ldyBFbmRQb2ludChhY2NvdW50MSwgYXV0aG9yaXR5MiwgMCk7CisgICAgICAgIEVuZFBvaW50IHRhcmdldDMgPSBuZXcgRW5kUG9pbnQoYWNjb3VudDIsIGF1dGhvcml0eTEsIDApOwogCiAgICAgICAgIHJlbW92ZVBlcmlvZGljU3luY3MoZW5naW5lLCBhY2NvdW50MSwgMCwgYXV0aG9yaXR5MSk7CiAgICAgICAgIHJlbW92ZVBlcmlvZGljU3luY3MoZW5naW5lLCBhY2NvdW50MiwgMCwgYXV0aG9yaXR5MSk7CkBAIC0yOTQsMjYgKzM5NywyNiBAQAogICAgICAgICBlbmdpbmUuc2V0SXNTeW5jYWJsZShhY2NvdW50MiwgMCwgYXV0aG9yaXR5MiwgMCk7CiAgICAgICAgIGVuZ2luZS5zZXRTeW5jQXV0b21hdGljYWxseShhY2NvdW50MiwgMCwgYXV0aG9yaXR5MiwgdHJ1ZSk7CiAKLSAgICAgICAgZW5naW5lLmFkZFBlcmlvZGljU3luYyhzeW5jMSwgMCk7Ci0gICAgICAgIGVuZ2luZS5hZGRQZXJpb2RpY1N5bmMoc3luYzIsIDApOwotICAgICAgICBlbmdpbmUuYWRkUGVyaW9kaWNTeW5jKHN5bmMzLCAwKTsKLSAgICAgICAgZW5naW5lLmFkZFBlcmlvZGljU3luYyhzeW5jNCwgMCk7Ci0gICAgICAgIGVuZ2luZS5hZGRQZXJpb2RpY1N5bmMoc3luYzUsIDApOworICAgICAgICBlbmdpbmUudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmModGFyZ2V0MSwgcGVyaW9kMSwgZmxleDEsIGV4dHJhczEpOworICAgICAgICBlbmdpbmUudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmModGFyZ2V0MSwgcGVyaW9kMSwgZmxleDEsIGV4dHJhczIpOworICAgICAgICBlbmdpbmUudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmModGFyZ2V0MiwgcGVyaW9kMSwgZmxleDEsIGV4dHJhczEpOworICAgICAgICBlbmdpbmUudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmModGFyZ2V0MiwgcGVyaW9kMiwgZmxleDIsIGV4dHJhczIpOworICAgICAgICBlbmdpbmUudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmModGFyZ2V0MywgcGVyaW9kMSwgZmxleDEsIGV4dHJhczEpOwogCiAgICAgICAgIGVuZ2luZS53cml0ZUFsbFN0YXRlKCk7CiAgICAgICAgIGVuZ2luZS5jbGVhckFuZFJlYWRTdGF0ZSgpOwogCi0gICAgICAgIExpc3Q8UGVyaW9kaWNTeW5jPiBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQxLCAwLCBhdXRob3JpdHkxKTsKKyAgICAgICAgTGlzdDxQZXJpb2RpY1N5bmM+IHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0MSk7CiAgICAgICAgIGFzc2VydEVxdWFscygyLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzEsIHN5bmNzLmdldCgwKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMiwgc3luY3MuZ2V0KDEpKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQxLCAwLCBhdXRob3JpdHkyKTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQyKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMywgc3luY3MuZ2V0KDApKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmM0LCBzeW5jcy5nZXQoMSkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudDIsIDAsIGF1dGhvcml0eTEpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDMpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmM1LCBzeW5jcy5nZXQoMCkpOwogCkBAIC0zMjgsNiArNDMxLDUwIEBACiAgICAgICAgIGFzc2VydEVxdWFscygwLCBlbmdpbmUuZ2V0SXNTeW5jYWJsZShhY2NvdW50MiwgMCwgYXV0aG9yaXR5MikpOwogICAgIH0KIAorICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q29tcG9uZW50UGFyc2luZygpIHRocm93cyBFeGNlcHRpb24geworCisgICAgICAgIGJ5dGVbXSBhY2NvdW50c0ZpbGVEYXRhID0gKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCcgc3RhbmRhbG9uZT0neWVzJyA/PlxuIgorICAgICAgICAgICAgICAgICsgIjxhY2NvdW50cyB2ZXJzaW9uPVwiMlwiID5cbiIKKyAgICAgICAgICAgICAgICArICI8YXV0aG9yaXR5IGlkPVwiMFwiIHVzZXI9XCIwXCIgcGFja2FnZT1cIiIgKyBzeW5jU2VydmljZTEuZ2V0UGFja2FnZU5hbWUoKSArICJcIiIKKyAgICAgICAgICAgICAgICArICIgY2xhc3M9XCIiICsgc3luY1NlcnZpY2UxLmdldENsYXNzTmFtZSgpICsgIlwiIHN5bmNhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAgICAgICAgICArICJcbjxwZXJpb2RpY1N5bmMgcGVyaW9kPVwiIiArIGRheVBvbGwgKyAiXCIgZmxleD1cIiIgKyBkYXlGdXp6ICsgIlwiLz4iCisgICAgICAgICAgICAgICAgKyAiXG48L2F1dGhvcml0eT4iCisgICAgICAgICAgICAgICAgKyAiPC9hY2NvdW50cz4iKS5nZXRCeXRlcygpOworCisgICAgICAgIEZpbGUgc3luY0RpciA9IGdldFN5bmNEaXIoKTsKKyAgICAgICAgc3luY0Rpci5ta2RpcnMoKTsKKyAgICAgICAgQXRvbWljRmlsZSBhY2NvdW50SW5mb0ZpbGUgPSBuZXcgQXRvbWljRmlsZShuZXcgRmlsZShzeW5jRGlyLCAiYWNjb3VudHMueG1sIikpOworICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IGFjY291bnRJbmZvRmlsZS5zdGFydFdyaXRlKCk7CisgICAgICAgIGZvcy53cml0ZShhY2NvdW50c0ZpbGVEYXRhKTsKKyAgICAgICAgYWNjb3VudEluZm9GaWxlLmZpbmlzaFdyaXRlKGZvcyk7CisKKyAgICAgICAgZW5naW5lLmNsZWFyQW5kUmVhZFN0YXRlKCk7CisKKyAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuQXV0aG9yaXR5SW5mbyBhSW5mbyA9IGVuZ2luZS5nZXRBdXRob3JpdHkoMCk7CisgICAgICAgIGFzc2VydE5vdE51bGwoYUluZm8pOworCisgICAgICAgIC8vIFRlc3Qgc2VydmljZSBjb21wb25lbnQgcmVhZAorICAgICAgICBMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcygKKyAgICAgICAgICAgICAgICBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoc3luY1NlcnZpY2UxLCAwKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHModHJ1ZSwgZW5naW5lLmdldElzVGFyZ2V0U2VydmljZUFjdGl2ZShzeW5jU2VydmljZTEsIDApKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdENvbXBvbmVudFNldHRpbmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEVuZFBvaW50IHRhcmdldDEgPSBuZXcgRW5kUG9pbnQoc3luY1NlcnZpY2UxLCAwKTsKKyAgICAgICAgZW5naW5lLnVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKHRhcmdldDEsIGRheVBvbGwsIGRheUZ1enosIEJ1bmRsZS5FTVBUWSk7CisgICAgICAgIAorICAgICAgICBlbmdpbmUuc2V0SXNUYXJnZXRTZXJ2aWNlQWN0aXZlKHRhcmdldDEuc2VydmljZSwgMCwgdHJ1ZSk7CisgICAgICAgIGJvb2xlYW4gYWN0aXZlID0gZW5naW5lLmdldElzVGFyZ2V0U2VydmljZUFjdGl2ZSh0YXJnZXQxLnNlcnZpY2UsIDApOworICAgICAgICBhc3NlcnQoYWN0aXZlKTsKKworICAgICAgICBlbmdpbmUuc2V0SXNUYXJnZXRTZXJ2aWNlQWN0aXZlKHRhcmdldDEuc2VydmljZSwgMSwgZmFsc2UpOworICAgICAgICBhY3RpdmUgPSBlbmdpbmUuZ2V0SXNUYXJnZXRTZXJ2aWNlQWN0aXZlKHRhcmdldDEuc2VydmljZSwgMSk7CisgICAgICAgIGFzc2VydCghYWN0aXZlKTsKKyAgICB9CisKICAgICBATWVkaXVtVGVzdAogICAgIC8qKgogICAgICAqIFYyIGludHJvZHVjZXMgZmxleCB0aW1lIGFzIHdlbGwgYXMgc2VydmljZSBjb21wb25lbnRzLgpAQCAtMzM5LDIwICs0ODYsMjAgQEAKICAgICAgICAgZmluYWwgU3RyaW5nIGF1dGhvcml0eTIgPSAiYXV0aDIiOwogICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5MyA9ICJhdXRoMyI7CiAKLSAgICAgICAgZmluYWwgbG9uZyBkYXlQb2xsID0gKDYwICogNjAgKiAyNCk7Ci0gICAgICAgIGZpbmFsIGxvbmcgZGF5RnV6eiA9IDYwOwotICAgICAgICBmaW5hbCBsb25nIHRob3VzYW5kU2VjcyA9IDEwMDA7Ci0gICAgICAgIGZpbmFsIGxvbmcgdGhvdXNhbmRTZWNzRnV6eiA9IDEwMDsKLSAgICAgICAgZmluYWwgQnVuZGxlIGV4dHJhcyA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMxID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50LCBhdXRob3JpdHkxLCBleHRyYXMsIGRheVBvbGwsIGRheUZ1enopOwotICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzIgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eTIsIGV4dHJhcywgZGF5UG9sbCwgZGF5RnV6eik7Ci0gICAgICAgIFBlcmlvZGljU3luYyBzeW5jMyA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5MywgZXh0cmFzLCBkYXlQb2xsLCBkYXlGdXp6KTsKLSAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMxcyA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5MSwgZXh0cmFzLCB0aG91c2FuZFNlY3MsIHRob3VzYW5kU2Vjc0Z1enopOwotICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzJzID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50LCBhdXRob3JpdHkyLCBleHRyYXMsIHRob3VzYW5kU2VjcywgdGhvdXNhbmRTZWNzRnV6eik7Ci0gICAgICAgIFBlcmlvZGljU3luYyBzeW5jM3MgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eTMsIGV4dHJhcywgdGhvdXNhbmRTZWNzLCB0aG91c2FuZFNlY3NGdXp6KTsKLSAgICAgICAgTW9ja0NvbnRlbnRSZXNvbHZlciBtb2NrUmVzb2x2ZXIgPSBuZXcgTW9ja0NvbnRlbnRSZXNvbHZlcigpOworICAgICAgICBFbmRQb2ludCB0YXJnZXQxID0gbmV3IEVuZFBvaW50KGFjY291bnQsIGF1dGhvcml0eTEsIDApOworICAgICAgICBFbmRQb2ludCB0YXJnZXQyID0gbmV3IEVuZFBvaW50KGFjY291bnQsIGF1dGhvcml0eTIsIDApOworICAgICAgICBFbmRQb2ludCB0YXJnZXQzID0gbmV3IEVuZFBvaW50KGFjY291bnQsIGF1dGhvcml0eTMsIDApOworICAgICAgICBFbmRQb2ludCB0YXJnZXQ0ID0gbmV3IEVuZFBvaW50KGFjY291bnQsIGF1dGhvcml0eTMsIDEpOwogCi0gICAgICAgIGZpbmFsIFRlc3RDb250ZXh0IHRlc3RDb250ZXh0ID0gbmV3IFRlc3RDb250ZXh0KG1vY2tSZXNvbHZlciwgZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMxID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50LCBhdXRob3JpdHkxLCBCdW5kbGUuRU1QVFksIGRheVBvbGwsIGRheUZ1enopOworICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzIgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eTIsIEJ1bmRsZS5FTVBUWSwgZGF5UG9sbCwgZGF5RnV6eik7CisgICAgICAgIFBlcmlvZGljU3luYyBzeW5jMyA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5MywgQnVuZGxlLkVNUFRZLCBkYXlQb2xsLCBkYXlGdXp6KTsKKyAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMxcyA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5MSwgQnVuZGxlLkVNUFRZLCB0aG91c2FuZFNlY3MsCisgICAgICAgICAgICAgICAgdGhvdXNhbmRTZWNzRnV6eik7CisgICAgICAgIFBlcmlvZGljU3luYyBzeW5jMnMgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eTIsIEJ1bmRsZS5FTVBUWSwgdGhvdXNhbmRTZWNzLAorICAgICAgICAgICAgICAgIHRob3VzYW5kU2Vjc0Z1enopOworICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzNzID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50LCBhdXRob3JpdHkzLCBCdW5kbGUuRU1QVFksIHRob3VzYW5kU2VjcywKKyAgICAgICAgICAgICAgICB0aG91c2FuZFNlY3NGdXp6KTsKIAogICAgICAgICBieXRlW10gYWNjb3VudHNGaWxlRGF0YSA9ICgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnIHN0YW5kYWxvbmU9J3llcycgPz5cbiIKICAgICAgICAgICAgICAgICArICI8YWNjb3VudHMgdmVyc2lvbj1cIjJcIiA+XG4iCkBAIC0zNzgsMjEgKzUyNSwyMiBAQAogICAgICAgICBmb3Mud3JpdGUoYWNjb3VudHNGaWxlRGF0YSk7CiAgICAgICAgIGFjY291bnRJbmZvRmlsZS5maW5pc2hXcml0ZShmb3MpOwogCi0gICAgICAgIFN5bmNTdG9yYWdlRW5naW5lIGVuZ2luZSA9IFN5bmNTdG9yYWdlRW5naW5lLm5ld1Rlc3RJbnN0YW5jZSh0ZXN0Q29udGV4dCk7CisgICAgICAgIGVuZ2luZS5jbGVhckFuZFJlYWRTdGF0ZSgpOwogCi0gICAgICAgIExpc3Q8UGVyaW9kaWNTeW5jPiBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDAsIGF1dGhvcml0eTEpOworICAgICAgICBMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQxKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJHb3QgaW5jb3JyZWN0ICMgb2Ygc3luY3MiLCAxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzEsIHN5bmNzLmdldCgwKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCAwLCBhdXRob3JpdHkyKTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQyKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMiwgc3luY3MuZ2V0KDApKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDAsIGF1dGhvcml0eTMpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDMpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMzLCBzeW5jcy5nZXQoMCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMSwgYXV0aG9yaXR5Myk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0NCk7CisKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMywgc3luY3MuZ2V0KDApKTsKIApAQCAtNDExLDEzICs1NTksMTMgQEAKIAogICAgICAgICBlbmdpbmUuY2xlYXJBbmRSZWFkU3RhdGUoKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDAsIGF1dGhvcml0eTEpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDEpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc3luY3Muc2l6ZSgpKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDAsIGF1dGhvcml0eTIpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc3luY3Muc2l6ZSgpKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDAsIGF1dGhvcml0eTMpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDMpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc3luY3Muc2l6ZSgpKTsKIAogICAgICAgICBhY2NvdW50c0ZpbGVEYXRhID0gKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCcgc3RhbmRhbG9uZT0neWVzJyA/PlxuIgpAQCAtNDQwLDE1ICs1ODgsMTUgQEAKIAogICAgICAgICBlbmdpbmUuY2xlYXJBbmRSZWFkU3RhdGUoKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDAsIGF1dGhvcml0eTEpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDEpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMxcywgc3luY3MuZ2V0KDApKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDAsIGF1dGhvcml0eTIpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMycywgc3luY3MuZ2V0KDApKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDAsIGF1dGhvcml0eTMpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDMpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMzcywgc3luY3MuZ2V0KDApKTsKICAgICB9CkBAIC00NjAsNiArNjA4LDEyIEBACiAgICAgICAgIGZpbmFsIFN0cmluZyBhdXRob3JpdHkyID0gImF1dGgyIjsKICAgICAgICAgZmluYWwgU3RyaW5nIGF1dGhvcml0eTMgPSAiYXV0aDMiOwogICAgICAgICBmaW5hbCBCdW5kbGUgZXh0cmFzID0gbmV3IEJ1bmRsZSgpOworCisgICAgICAgIEVuZFBvaW50IHRhcmdldDEgPSBuZXcgRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5MSwgMCk7CisgICAgICAgIEVuZFBvaW50IHRhcmdldDIgPSBuZXcgRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5MiwgMCk7CisgICAgICAgIEVuZFBvaW50IHRhcmdldDMgPSBuZXcgRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5MywgMCk7CisgICAgICAgIEVuZFBvaW50IHRhcmdldDQgPSBuZXcgRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5MywgMSk7CisKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMxID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50LCBhdXRob3JpdHkxLCBleHRyYXMsIChsb25nKSAoNjAgKiA2MCAqIDI0KSk7CiAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jMiA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5MiwgZXh0cmFzLCAobG9uZykgKDYwICogNjAgKiAyNCkpOwogICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzMgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eTMsIGV4dHJhcywgKGxvbmcpICg2MCAqIDYwICogMjQpKTsKQEAgLTQ4OCwxOSArNjQyLDIwIEBACiAKICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUgZW5naW5lID0gU3luY1N0b3JhZ2VFbmdpbmUubmV3VGVzdEluc3RhbmNlKHRlc3RDb250ZXh0KTsKIAotICAgICAgICBMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCAwLCBhdXRob3JpdHkxKTsKKyAgICAgICAgTGlzdDxQZXJpb2RpY1N5bmM+IHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0MSk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoImV4cGVjdGVkIHN5bmMxOiAiICsgc3luYzEudG9TdHJpbmcoKSArICIgPT0gc3luYyAyIiArIHN5bmNzLmdldCgwKS50b1N0cmluZygpLCBzeW5jMSwgc3luY3MuZ2V0KDApKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDAsIGF1dGhvcml0eTIpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMyLCBzeW5jcy5nZXQoMCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5Myk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Myk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzMsIHN5bmNzLmdldCgwKSk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0NCk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCAxLCBhdXRob3JpdHkzKTsKKwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMzLCBzeW5jcy5nZXQoMCkpOwogCkBAIC01MTgsMTMgKzY3MywxMyBAQAogCiAgICAgICAgIGVuZ2luZS5jbGVhckFuZFJlYWRTdGF0ZSgpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5MSk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0MSk7CiAgICAgICAgIGFzc2VydEVxdWFscygwLCBzeW5jcy5zaXplKCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5Mik7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Mik7CiAgICAgICAgIGFzc2VydEVxdWFscygwLCBzeW5jcy5zaXplKCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5Myk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Myk7CiAgICAgICAgIGFzc2VydEVxdWFscygwLCBzeW5jcy5zaXplKCkpOwogCiAgICAgICAgIGFjY291bnRzRmlsZURhdGEgPSAoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04JyBzdGFuZGFsb25lPSd5ZXMnID8+XG4iCkBAIC01NDcsMTUgKzcwMiwxNSBAQAogCiAgICAgICAgIGVuZ2luZS5jbGVhckFuZFJlYWRTdGF0ZSgpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5MSk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0MSk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzFzLCBzeW5jcy5nZXQoMCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5Mik7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Mik7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzJzLCBzeW5jcy5nZXQoMCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5Myk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Myk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzNzLCBzeW5jcy5nZXQoMCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L0NlbGxMb2NhdGlvbi5qYXZhIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbExvY2F0aW9uLmphdmEKaW5kZXggNDJjMmFmZi4uZjlhMjIyZiAxMDA2NDQKLS0tIGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbExvY2F0aW9uLmphdmEKKysrIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbExvY2F0aW9uLmphdmEKQEAgLTE5LDkgKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwotCiAKIGltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5jZG1hLkNkbWFDZWxsTG9jYXRpb247CiBpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuZ3NtLkdzbUNlbGxMb2NhdGlvbjsKZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L0NlbGxTaWduYWxTdHJlbmd0aC5qYXZhIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbFNpZ25hbFN0cmVuZ3RoLmphdmEKaW5kZXggM2I0NzBmYy4uOWMyM2Y3OCAxMDA2NDQKLS0tIGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbFNpZ25hbFN0cmVuZ3RoLmphdmEKKysrIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbFNpZ25hbFN0cmVuZ3RoLmphdmEKQEAgLTE2LDkgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnRlbGVwaG9ueTsKIAotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLQogLyoqCiAgKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBjZWxsIHBob25lIHNpZ25hbCBzdHJlbmd0aCByZWxhdGVkIGluZm9ybWF0aW9uLgogICovCmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9QaG9uZU51bWJlckZvcm1hdHRpbmdUZXh0V2F0Y2hlci5qYXZhIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvUGhvbmVOdW1iZXJGb3JtYXR0aW5nVGV4dFdhdGNoZXIuamF2YQppbmRleCA5ODNjMzQ5Li40MzhiNTcyIDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9QaG9uZU51bWJlckZvcm1hdHRpbmdUZXh0V2F0Y2hlci5qYXZhCisrKyBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1Bob25lTnVtYmVyRm9ybWF0dGluZ1RleHRXYXRjaGVyLmphdmEKQEAgLTY1LDggKzY1LDYgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBjb3VudHJ5Q29kZSB0aGUgSVNPIDMxNjYtMSB0d28tbGV0dGVyIGNvdW50cnkgY29kZSB0aGF0IGluZGljYXRlcyB0aGUgY291bnRyeS9yZWdpb24KICAgICAgKiB3aGVyZSB0aGUgcGhvbmUgbnVtYmVyIGlzIGJlaW5nIGVudGVyZWQuCi0gICAgICoKLSAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBQaG9uZU51bWJlckZvcm1hdHRpbmdUZXh0V2F0Y2hlcihTdHJpbmcgY291bnRyeUNvZGUpIHsKICAgICAgICAgaWYgKGNvdW50cnlDb2RlID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1Bob25lTnVtYmVyVXRpbHMuamF2YSBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1Bob25lTnVtYmVyVXRpbHMuamF2YQppbmRleCBlM2ExYWE2Li5jNzllOWJmIDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9QaG9uZU51bWJlclV0aWxzLmphdmEKKysrIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvUGhvbmVOdW1iZXJVdGlscy5qYXZhCkBAIC0xMTQzLDYgKzExNDMsOCBAQAogICAgICAqIEBwYXJhbSBzb3VyY2UgVGhlIHBob25lIG51bWJlciB0byBmb3JtYXQKICAgICAgKiBAcmV0dXJuIEEgbG9jYWxseSBhY2NlcHRhYmxlIGZvcm1hdHRpbmcgb2YgdGhlIGlucHV0LCBvciB0aGUgcmF3IGlucHV0IGlmCiAgICAgICogIGZvcm1hdHRpbmcgcnVsZXMgYXJlbid0IGtub3duIGZvciB0aGUgbnVtYmVyCisgICAgICoKKyAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNmb3JtYXROdW1iZXIoU3RyaW5nIHBob25lTnVtYmVyLCBTdHJpbmcgZGVmYXVsdENvdW50cnlJc28pfSBpbnN0ZWFkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZm9ybWF0TnVtYmVyKFN0cmluZyBzb3VyY2UpIHsKICAgICAgICAgU3Bhbm5hYmxlU3RyaW5nQnVpbGRlciB0ZXh0ID0gbmV3IFNwYW5uYWJsZVN0cmluZ0J1aWxkZXIoc291cmNlKTsKQEAgLTExNTksNyArMTE2MSw4IEBACiAgICAgICogbm90IGJlZ2luIHdpdGggK1tjb3VudHJ5X2NvZGVdCiAgICAgICogQHJldHVybiBUaGUgcGhvbmUgbnVtYmVyIGZvcm1hdHRlZCB3aXRoIHRoZSBnaXZlbiBmb3JtYXR0aW5nIHR5cGUuCiAgICAgICoKLSAgICAgKiBAaGlkZSBUT0RPOiBTaG91bGQgYmUgdW5oaWRkZW4uCisgICAgICogQGhpZGUKKyAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNmb3JtYXROdW1iZXIoU3RyaW5nIHBob25lTnVtYmVyLCBTdHJpbmcgZGVmYXVsdENvdW50cnlJc28pfSBpbnN0ZWFkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZm9ybWF0TnVtYmVyKFN0cmluZyBzb3VyY2UsIGludCBkZWZhdWx0Rm9ybWF0dGluZ1R5cGUpIHsKICAgICAgICAgU3Bhbm5hYmxlU3RyaW5nQnVpbGRlciB0ZXh0ID0gbmV3IFNwYW5uYWJsZVN0cmluZ0J1aWxkZXIoc291cmNlKTsKQEAgLTExNzMsNiArMTE3Niw4IEBACiAgICAgICogQHBhcmFtIGxvY2FsZSBUaGUgbG9jYWxlIG9mIGludGVyZXN0LCB1c3VhbGx5IHtAbGluayBMb2NhbGUjZ2V0RGVmYXVsdCgpfQogICAgICAqIEByZXR1cm4gVGhlIGZvcm1hdHRpbmcgdHlwZSBmb3IgdGhlIGdpdmVuIGxvY2FsZSwgb3IgRk9STUFUX1VOS05PV04gaWYgdGhlIGZvcm1hdHRpbmcKICAgICAgKiBydWxlcyBhcmUgbm90IGtub3duIGZvciB0aGUgZ2l2ZW4gbG9jYWxlCisgICAgICoKKyAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNmb3JtYXROdW1iZXIoU3RyaW5nIHBob25lTnVtYmVyLCBTdHJpbmcgZGVmYXVsdENvdW50cnlJc28pfSBpbnN0ZWFkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0Rm9ybWF0VHlwZUZvckxvY2FsZShMb2NhbGUgbG9jYWxlKSB7CiAgICAgICAgIFN0cmluZyBjb3VudHJ5ID0gbG9jYWxlLmdldENvdW50cnkoKTsKQEAgLTExODcsNiArMTE5Miw4IEBACiAgICAgICogQHBhcmFtIHRleHQgVGhlIG51bWJlciB0byBiZSBmb3JtYXR0ZWQsIHdpbGwgYmUgbW9kaWZpZWQgd2l0aCB0aGUgZm9ybWF0dGluZwogICAgICAqIEBwYXJhbSBkZWZhdWx0Rm9ybWF0dGluZ1R5cGUgVGhlIGRlZmF1bHQgZm9ybWF0dGluZyBydWxlcyB0byBhcHBseSBpZiB0aGUgbnVtYmVyIGRvZXMKICAgICAgKiBub3QgYmVnaW4gd2l0aCArW2NvdW50cnlfY29kZV0KKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgI2Zvcm1hdE51bWJlcihTdHJpbmcgcGhvbmVOdW1iZXIsIFN0cmluZyBkZWZhdWx0Q291bnRyeUlzbyl9IGluc3RlYWQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9ybWF0TnVtYmVyKEVkaXRhYmxlIHRleHQsIGludCBkZWZhdWx0Rm9ybWF0dGluZ1R5cGUpIHsKICAgICAgICAgaW50IGZvcm1hdFR5cGUgPSBkZWZhdWx0Rm9ybWF0dGluZ1R5cGU7CkBAIC0xMjMzLDYgKzEyNDAsOCBAQAogICAgICAqIDwvY29kZT48L3A+CiAgICAgICoKICAgICAgKiBAcGFyYW0gdGV4dCB0aGUgbnVtYmVyIHRvIGJlIGZvcm1hdHRlZCwgd2lsbCBiZSBtb2RpZmllZCB3aXRoIHRoZSBmb3JtYXR0aW5nCisgICAgICoKKyAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNmb3JtYXROdW1iZXIoU3RyaW5nIHBob25lTnVtYmVyLCBTdHJpbmcgZGVmYXVsdENvdW50cnlJc28pfSBpbnN0ZWFkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGZvcm1hdE5hbnBOdW1iZXIoRWRpdGFibGUgdGV4dCkgewogICAgICAgICBpbnQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKQEAgLTEzNDYsNiArMTM1NSw4IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gdGV4dCB0aGUgbnVtYmVyIHRvIGJlIGZvcm1hdHRlZCwgd2lsbCBiZSBtb2RpZmllZCB3aXRoCiAgICAgICogdGhlIGZvcm1hdHRpbmcKKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgI2Zvcm1hdE51bWJlcihTdHJpbmcgcGhvbmVOdW1iZXIsIFN0cmluZyBkZWZhdWx0Q291bnRyeUlzbyl9IGluc3RlYWQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgZm9ybWF0SmFwYW5lc2VOdW1iZXIoRWRpdGFibGUgdGV4dCkgewogICAgICAgICBKYXBhbmVzZVBob25lTnVtYmVyRm9ybWF0dGVyLmZvcm1hdCh0ZXh0KTsKQEAgLTEzODIsOCArMTM5Myw2IEBACiAgICAgICogICAgICAgICAgICB0aGUgSVNPIDMxNjYtMSB0d28gbGV0dGVycyBjb3VudHJ5IGNvZGUKICAgICAgKiBAcmV0dXJuIHRoZSBFLjE2NCByZXByZXNlbnRhdGlvbiwgb3IgbnVsbCBpZiB0aGUgZ2l2ZW4gcGhvbmUgbnVtYmVyIGlzCiAgICAgICogICAgICAgICBub3QgdmFsaWQuCi0gICAgICoKLSAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdE51bWJlclRvRTE2NChTdHJpbmcgcGhvbmVOdW1iZXIsIFN0cmluZyBkZWZhdWx0Q291bnRyeUlzbykgewogICAgICAgICBQaG9uZU51bWJlclV0aWwgdXRpbCA9IFBob25lTnVtYmVyVXRpbC5nZXRJbnN0YW5jZSgpOwpAQCAtMTQxMCw4ICsxNDE5LDYgQEAKICAgICAgKiAgICAgICAgICAgIHRoZSBJU08gMzE2Ni0xIHR3byBsZXR0ZXJzIGNvdW50cnkgY29kZSB3aG9zZSBjb252ZW50aW9uIHdpbGwKICAgICAgKiAgICAgICAgICAgIGJlIHVzZWQgaWYgdGhlIGdpdmVuIG51bWJlciBkb2Vzbid0IGhhdmUgdGhlIGNvdW50cnkgY29kZS4KICAgICAgKiBAcmV0dXJuIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLCBvciBudWxsIGlmIHRoZSBnaXZlbiBudW1iZXIgaXMgbm90IHZhbGlkLgotICAgICAqCi0gICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXROdW1iZXIoU3RyaW5nIHBob25lTnVtYmVyLCBTdHJpbmcgZGVmYXVsdENvdW50cnlJc28pIHsKICAgICAgICAgLy8gRG8gbm90IGF0dGVtcHQgdG8gZm9ybWF0IG51bWJlcnMgdGhhdCBzdGFydCB3aXRoIGEgaGFzaCBvciBzdGFyIHN5bWJvbC4KQEAgLTE0NDYsOCArMTQ1Myw2IEBACiAgICAgICogICAgICAgICAgICBjb250YWlucyBJREQuCiAgICAgICogQHJldHVybiB0aGUgZm9ybWF0dGVkIG51bWJlciBpZiB0aGUgZ2l2ZW4gbnVtYmVyIGhhcyBiZWVuIGZvcm1hdHRlZCwKICAgICAgKiAgICAgICAgICAgIG90aGVyd2lzZSwgcmV0dXJuIHRoZSBnaXZlbiBudW1iZXIuCi0gICAgICoKLSAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdE51bWJlcigKICAgICAgICAgICAgIFN0cmluZyBwaG9uZU51bWJlciwgU3RyaW5nIHBob25lTnVtYmVyRTE2NCwgU3RyaW5nIGRlZmF1bHRDb3VudHJ5SXNvKSB7CkBAIC0xNDgzLDExICsxNDg4LDggQEAKICAgICAgKiB0aGUgZ2l2ZW4gbnVtYmVyIGhhcyBrZXlwYWQgbGV0dGVycywgdGhlIGxldHRlcnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8KICAgICAgKiBkaWdpdHMgZmlyc3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gcGhvbmVOdW1iZXIKLSAgICAgKiAgICAgICAgICAgIHRoZSBudW1iZXIgdG8gYmUgbm9ybWFsaXplZC4KKyAgICAgKiBAcGFyYW0gcGhvbmVOdW1iZXIgdGhlIG51bWJlciB0byBiZSBub3JtYWxpemVkLgogICAgICAqIEByZXR1cm4gdGhlIG5vcm1hbGl6ZWQgbnVtYmVyLgotICAgICAqCi0gICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBub3JtYWxpemVOdW1iZXIoU3RyaW5nIHBob25lTnVtYmVyKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwpAQCAtMTUwOCwxMiArMTUxMCwxMCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJlcGxhY2UgYXJhYmljL3VuaWNvZGUgZGlnaXRzIHdpdGggZGVjaW1hbCBkaWdpdHMuCi0gICAgICogQHBhcmFtIG51bWJlcgotICAgICAqICAgICAgICAgICAgdGhlIG51bWJlciB0byBiZSBub3JtYWxpemVkLgotICAgICAqIEByZXR1cm4gdGhlIHJlcGxhY2VkIG51bWJlci4KKyAgICAgKiBSZXBsYWNlcyBhbGwgdW5pY29kZShlLmcuIEFyYWJpYywgUGVyc2lhbikgZGlnaXRzIHdpdGggdGhlaXIgZGVjaW1hbCBkaWdpdCBlcXVpdmFsZW50cy4KICAgICAgKgotICAgICAqIEBoaWRlCisgICAgICogQHBhcmFtIG51bWJlciB0aGUgbnVtYmVyIHRvIHBlcmZvcm0gdGhlIHJlcGxhY2VtZW50IG9uLgorICAgICAqIEByZXR1cm4gdGhlIHJlcGxhY2VkIG51bWJlci4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyByZXBsYWNlVW5pY29kZURpZ2l0cyhTdHJpbmcgbnVtYmVyKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgbm9ybWFsaXplZERpZ2l0cyA9IG5ldyBTdHJpbmdCdWlsZGVyKG51bWJlci5sZW5ndGgoKSk7CkBAIC0xNzM3LDE2ICsxNzM3LDEyIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gbnVtYmVyIGlzIGFuIGVtZXJnZW5jeSBudW1iZXIgZm9yIHRoZSBjb3VudHJ5IHRoYXQgdGhlIHVzZXIgaXMgaW4uIFRoZQotICAgICAqIGN1cnJlbnQgY291bnRyeSBpcyBkZXRlcm1pbmVkIHVzaW5nIHRoZSBDb3VudHJ5RGV0ZWN0b3IuCisgICAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gbnVtYmVyIGlzIGFuIGVtZXJnZW5jeSBudW1iZXIgZm9yIHRoZSBjb3VudHJ5IHRoYXQgdGhlIHVzZXIgaXMgaW4uCiAgICAgICoKICAgICAgKiBAcGFyYW0gbnVtYmVyIHRoZSBudW1iZXIgdG8gbG9vayB1cC4KICAgICAgKiBAcGFyYW0gY29udGV4dCB0aGUgc3BlY2lmaWMgY29udGV4dCB3aGljaCB0aGUgbnVtYmVyIHNob3VsZCBiZSBjaGVja2VkIGFnYWluc3QKLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHNwZWNpZmllZCBudW1iZXIgaXMgYW4gZW1lcmdlbmN5IG51bWJlciBmb3IgYSBsb2NhbCBjb3VudHJ5LCBiYXNlZCBvbiB0aGUKLSAgICAgKiAgICAgICAgICAgICAgQ291bnRyeURldGVjdG9yLgotICAgICAqCi0gICAgICogQHNlZSBhbmRyb2lkLmxvY2F0aW9uLkNvdW50cnlEZXRlY3RvcgotICAgICAqIEBoaWRlCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgbnVtYmVyIGlzIGFuIGVtZXJnZW5jeSBudW1iZXIgZm9yIHRoZSBjb3VudHJ5IHRoZSB1c2VyCisgICAgICogaXMgY3VycmVudGx5IGluLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0xvY2FsRW1lcmdlbmN5TnVtYmVyKFN0cmluZyBudW1iZXIsIENvbnRleHQgY29udGV4dCkgewogICAgICAgICByZXR1cm4gaXNMb2NhbEVtZXJnZW5jeU51bWJlckludGVybmFsKG51bWJlciwKQEAgLTE4MjUsNyArMTgyMSw2IEBACiAgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBudW1iZXIgaXMgaW4gdGhlIGxpc3Qgb2Ygdm9pY2VtYWlsLiBGYWxzZQogICAgICAqIG90aGVyd2lzZSwgaW5jbHVkaW5nIGlmIHRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSB0aGUgcGVybWlzc2lvbgogICAgICAqIHRvIHJlYWQgdGhlIFZNIG51bWJlci4KLSAgICAgKiBAaGlkZSBUT0RPOiBwZW5kaW5nIEFQSSBDb3VuY2lsIGFwcHJvdmFsCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVm9pY2VNYWlsTnVtYmVyKFN0cmluZyBudW1iZXIpIHsKICAgICAgICAgU3RyaW5nIHZtTnVtYmVyOwpkaWZmIC0tZ2l0IGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvUGhvbmVTdGF0ZUxpc3RlbmVyLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9QaG9uZVN0YXRlTGlzdGVuZXIuamF2YQppbmRleCBmZjc3ZmMwLi4wMjJiZjEyIDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9QaG9uZVN0YXRlTGlzdGVuZXIuamF2YQorKysgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9QaG9uZVN0YXRlTGlzdGVuZXIuamF2YQpAQCAtMjMsNyArMjMsNiBAQAogaW1wb3J0IGFuZHJvaWQudGVsZXBob255LlNpZ25hbFN0cmVuZ3RoOwogaW1wb3J0IGFuZHJvaWQudGVsZXBob255LkNlbGxMb2NhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5DZWxsSW5mbzsKLWltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5SbG9nOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LklQaG9uZVN0YXRlTGlzdGVuZXI7CiAKZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1Jsb2cuamF2YSBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1Jsb2cuamF2YQppbmRleCA5YWM3YmRhLi4yYTdmN2FmIDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9SbG9nLmphdmEKKysrIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvUmxvZy5qYXZhCkBAIC0xNiwxMyArMTYsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQudGVsZXBob255OwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuUnVudGltZUluaXQ7Ci0KIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQogLyoqCiAgKiBBIGNsYXNzIHRvIGxvZyBzdHJpbmdzIHRvIHRoZSBSQURJTyBMT0cuCiAgKgpkaWZmIC0tZ2l0IGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvVGVsZXBob255TWFuYWdlci5qYXZhIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvVGVsZXBob255TWFuYWdlci5qYXZhCmluZGV4IDhmMTdlNzIuLmE3ODViYWMgMTAwNjQ0Ci0tLSBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RlbGVwaG9ueU1hbmFnZXIuamF2YQorKysgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9UZWxlcGhvbnlNYW5hZ2VyLmphdmEKQEAgLTE0MzksNCArMTQzOSw2NyBAQAogICAgICAgICByZXR1cm4gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLmNvbmZpZ19tbXNfdXNlcl9hZ2VudF9wcm9maWxlX3VybCk7CiAgICAgfQorCisgICAgLyoqCisgICAgICogT3BlbnMgYSBsb2dpY2FsIGNoYW5uZWwgdG8gdGhlIElDQyBjYXJkLgorICAgICAqCisgICAgICogSW5wdXQgcGFyYW1ldGVycyBlcXVpdmFsZW50IHRvIFRTIDI3LjAwNyBBVCtDQ0hPIGNvbW1hbmQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gQUlEIEFwcGxpY2F0aW9uIGlkLiBTZWUgRVRTSSAxMDIuMjIxIGFuZCAxMDEuMjIwLgorICAgICAqIEByZXR1cm4gVGhlIGxvZ2ljYWwgY2hhbm5lbCBpZCB3aGljaCBpcyBuZWdhdGl2ZSBvbiBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGljY09wZW5Mb2dpY2FsQ2hhbm5lbChTdHJpbmcgQUlEKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgcmV0dXJuIGdldElUZWxlcGhvbnkoKS5pY2NPcGVuTG9naWNhbENoYW5uZWwoQUlEKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKgorICAgICAqIENsb3NlcyBhIHByZXZpb3VzbHkgb3BlbmVkIGxvZ2ljYWwgY2hhbm5lbCB0byB0aGUgSUNDIGNhcmQuCisgICAgICoKKyAgICAgKiBJbnB1dCBwYXJhbWV0ZXJzIGVxdWl2YWxlbnQgdG8gVFMgMjcuMDA3IEFUK0NDSEMgY29tbWFuZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjaGFubmVsIGlzIHRoZSBjaGFubmVsIGlkIHRvIGJlIGNsb3NlZCBhcyByZXRydW5lZCBieSBhIHN1Y2Nlc3NmdWwKKyAgICAgKiAgICAgICAgICAgIGljY09wZW5Mb2dpY2FsQ2hhbm5lbC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNoYW5uZWwgd2FzIGNsb3NlZCBzdWNjZXNzZnVsbHkuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaWNjQ2xvc2VMb2dpY2FsQ2hhbm5lbChpbnQgY2hhbm5lbCkgeworICAgICAgICB0cnkgeworICAgICAgICAgIHJldHVybiBnZXRJVGVsZXBob255KCkuaWNjQ2xvc2VMb2dpY2FsQ2hhbm5lbChjaGFubmVsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRyYW5zbWl0IGFuIEFQRFUgdG8gdGhlIElDQyBjYXJkIG92ZXIgYSBsb2dpY2FsIGNoYW5uZWwuCisgICAgICoKKyAgICAgKiBJbnB1dCBwYXJhbWV0ZXJzIGVxdWl2YWxlbnQgdG8gVFMgMjcuMDA3IEFUK0NHTEEgY29tbWFuZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjaGFubmVsIGlzIHRoZSBjaGFubmVsIGlkIHRvIGJlIGNsb3NlZCBhcyByZXRydW5lZCBieSBhIHN1Y2Nlc3NmdWwKKyAgICAgKiAgICAgICAgICAgIGljY09wZW5Mb2dpY2FsQ2hhbm5lbC4KKyAgICAgKiBAcGFyYW0gY2xhIENsYXNzIG9mIHRoZSBBUERVIGNvbW1hbmQuCisgICAgICogQHBhcmFtIGluc3RydWN0aW9uIEluc3RydWN0aW9uIG9mIHRoZSBBUERVIGNvbW1hbmQuCisgICAgICogQHBhcmFtIHAxIFAxIHZhbHVlIG9mIHRoZSBBUERVIGNvbW1hbmQuCisgICAgICogQHBhcmFtIHAyIFAyIHZhbHVlIG9mIHRoZSBBUERVIGNvbW1hbmQuCisgICAgICogQHBhcmFtIHAzIFAzIHZhbHVlIG9mIHRoZSBBUERVIGNvbW1hbmQuIElmIHAzIGlzIG5lZ2F0aXZlIGEgNCBieXRlIEFQRFUKKyAgICAgKiAgICAgICAgICAgIGlzIHNlbnQgdG8gdGhlIFNJTS4KKyAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIGJlIHNlbnQgd2l0aCB0aGUgQVBEVS4KKyAgICAgKiBAcmV0dXJuIFRoZSBBUERVIHJlc3BvbnNlIGZyb20gdGhlIElDQyBjYXJkIHdpdGggdGhlIHN0YXR1cyBhcHBlbmRlZCBhdAorICAgICAqICAgICAgICAgICAgdGhlIGVuZC4gSWYgYW4gZXJyb3Igb2NjdXJzLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBpY2NUcmFuc21pdEFwZHVMb2dpY2FsQ2hhbm5lbChpbnQgY2hhbm5lbCwgaW50IGNsYSwKKyAgICAgICAgICAgIGludCBpbnN0cnVjdGlvbiwgaW50IHAxLCBpbnQgcDIsIGludCBwMywgU3RyaW5nIGRhdGEpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICByZXR1cm4gZ2V0SVRlbGVwaG9ueSgpLmljY1RyYW5zbWl0QXBkdUxvZ2ljYWxDaGFubmVsKGNoYW5uZWwsIGNsYSwKKyAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLCBwMSwgcDIsIHAzLCBkYXRhKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RoaXJkUGFydHlDYWxsTGlzdGVuZXIuamF2YSBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RoaXJkUGFydHlDYWxsTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDI2NWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQudGVsZXBob255OworCitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuSVRoaXJkUGFydHlDYWxsTGlzdGVuZXI7CisKKy8qKgorICogSW50ZXJmYWNlIHByb3ZpZGVkIHRvIHtAbGluayBhbmRyb2lkLnRlbGVwaG9ueS5UaGlyZFBhcnR5Q2FsbFNlcnZpY2V9LiBUaGUgc2VydmljZSBjYW4gdXNlIHRoaXMKKyAqIHRvIG5vdGlmeSB0aGUgbGlzdGVuZXIgb2YgY2hhbmdlcyB0byB0aGUgY2FsbCBzdGF0ZS4KKyAqLworcHVibGljIGNsYXNzIFRoaXJkUGFydHlDYWxsTGlzdGVuZXIgeworICAgIHByaXZhdGUgZmluYWwgSVRoaXJkUGFydHlDYWxsTGlzdGVuZXIgbUxpc3RlbmVyOworCisgICAgLy8gQ2FsbCBlbmQgcmVhc29uLiBUT0RPOiByZW5hbWUgdGhpcyB0byBEaXNjb25uZWN0Q2F1c2Ugb25jZSB0aGV5IGFyZSBwdWJsaWMuCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTF9FTkRfTk9STUFMID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxMX0VORF9JTkNPTUlOR19NSVNTRUQgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTExfRU5EX09USEVSID0gMzsKKworICAgIHB1YmxpYyBUaGlyZFBhcnR5Q2FsbExpc3RlbmVyKElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGxpc3RlbmVyIik7CisgICAgICAgIH0KKyAgICAgICAgbUxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBzZXJ2aWNlIHdoZW4gYSBjYWxsIHByb3ZpZGVyIGlzIGF2YWlsYWJsZSB0byBwZXJmb3JtIHRoZSBvdXRnb2luZyBvciBpbmNvbWluZworICAgICAqIGNhbGwuCisgICAgICovCisgICAgcHVibGljIHZvaWQgb25DYWxsUHJvdmlkZXJBdHRhY2hlZChUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyIGNhbGxQcm92aWRlcikgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUxpc3RlbmVyLm9uQ2FsbFByb3ZpZGVyQXR0YWNoZWQoY2FsbFByb3ZpZGVyLmdldENhbGxiYWNrKCkpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTm90aWZpZXMgdGhlIGxpc3RlbmVyIHRoYXQgcmluZ2luZyBoYXMgc3RhcnRlZCBmb3IgdGhpcyBjYWxsLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG9uUmluZ2luZ1N0YXJ0ZWQoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtTGlzdGVuZXIub25SaW5naW5nU3RhcnRlZCgpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTm90aWZpZXMgdGhlIGxpc3RlbmVyIHRoYXQgdGhlIGNhbGwgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGVzdGFibGlzaGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG9uQ2FsbEVzdGFibGlzaGVkKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUxpc3RlbmVyLm9uQ2FsbEVzdGFibGlzaGVkKCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOb3RpZmllcyB0aGUgbGlzdGVuZXIgdGhhdCB0aGUgY2FsbCBoYXMgZW5kZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgb25DYWxsRW5kZWQoaW50IHJlYXNvbikgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUxpc3RlbmVyLm9uQ2FsbEVuZGVkKHJlYXNvbik7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9UaGlyZFBhcnR5Q2FsbFByb3ZpZGVyLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9UaGlyZFBhcnR5Q2FsbFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4YTFlYQotLS0gL2Rldi9udWxsCisrKyBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RoaXJkUGFydHlDYWxsUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC50ZWxlcGhvbnk7CisKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOworCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LklUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyOworCisvKioKKyAqIEludGVyZmFjZSBzZW50IHRvIHtAbGluayBhbmRyb2lkLnRlbGVwaG9ueS5UaGlyZFBhcnR5Q2FsbExpc3RlbmVyI29uQ2FsbFByb3ZpZGVyQXR0YWNoZWQKKyAqIG9uQ2FsbFByb3ZpZGVyQXR0YWNoZWR9LiBUaGlzIGlzIHVzZWQgdG8gY29udHJvbCBhbiBvdXRnb2luZyBvciBhbiBpbmNvbWluZyBjYWxsLgorICovCitwdWJsaWMgY2xhc3MgVGhpcmRQYXJ0eUNhbGxQcm92aWRlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19NVVRFID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX0hBTkdVUCA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19JTkNPTUlOR19DQUxMX0FDQ0VQVCA9IDM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19TRU5EX0RUTUYgPSA0OworCisgICAgLyoqCisgICAgICogTXV0ZXMgb3IgdW5tdXRlcyB0aGUgY2FsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtdXRlKGJvb2xlYW4gc2hvdWxkTXV0ZSkgeworICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGVtcHR5CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5kcyB0aGUgY3VycmVudCBjYWxsLiBJZiB0aGlzIGlzIGFuIHVuYW5zd2VyZWQgaW5jb21pbmcgY2FsbCB0aGVuIHRoZSBjYWxsIGlzIHJlamVjdGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGhhbmd1cCgpIHsKKyAgICAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBlbXB0eQorICAgIH0KKworICAgLyoqCisgICAgICogQWNjZXB0cyB0aGUgaW5jb21pbmcgY2FsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBpbmNvbWluZ0NhbGxBY2NlcHQoKSB7CisgICAgICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZW1wdHkKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZW5kcyB0aGUgZ2l2ZW4gRFRNRiBjb2RlLiBUaGUgY29kZSBjYW4gYmUgJzAnLSc5JywgJ0EnLSdEJywgJyMnLCBvciAnKicuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2VuZER0bWYoY2hhciBjKSB7CisgICAgICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZW1wdHkKKyAgICB9CisKKyAgICBJVGhpcmRQYXJ0eUNhbGxQcm92aWRlciBnZXRDYWxsYmFjaygpIHsKKyAgICAgICAgcmV0dXJuIG1DYWxsYmFjazsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIElUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyIG1DYWxsYmFjayA9IG5ldyBJVGhpcmRQYXJ0eUNhbGxQcm92aWRlci5TdHViKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgbXV0ZShib29sZWFuIHNob3VsZE11dGUpIHsKKyAgICAgICAgICAgIE1lc3NhZ2Uub2J0YWluKG1IYW5kbGVyLCBNU0dfTVVURSwgc2hvdWxkTXV0ZSA/IDEgOiAwLCAwKS5zZW5kVG9UYXJnZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBoYW5ndXAoKSB7CisgICAgICAgICAgICBNZXNzYWdlLm9idGFpbihtSGFuZGxlciwgTVNHX0hBTkdVUCkuc2VuZFRvVGFyZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgaW5jb21pbmdDYWxsQWNjZXB0KCkgeworICAgICAgICAgICAgTWVzc2FnZS5vYnRhaW4obUhhbmRsZXIsIE1TR19JTkNPTUlOR19DQUxMX0FDQ0VQVCkuc2VuZFRvVGFyZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VuZER0bWYoY2hhciBjKSB7CisgICAgICAgICAgICBNZXNzYWdlLm9idGFpbihtSGFuZGxlciwgTVNHX1NFTkRfRFRNRiwgKGludCkgYywgMCkuc2VuZFRvVGFyZ2V0KCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1IYW5kbGVyID0gbmV3IEhhbmRsZXIoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfTVVURToKKyAgICAgICAgICAgICAgICAgICAgbXV0ZShtc2cuYXJnMSAhPSAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfSEFOR1VQOgorICAgICAgICAgICAgICAgICAgICBoYW5ndXAoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfSU5DT01JTkdfQ0FMTF9BQ0NFUFQ6CisgICAgICAgICAgICAgICAgICAgIGluY29taW5nQ2FsbEFjY2VwdCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19TRU5EX0RUTUY6CisgICAgICAgICAgICAgICAgICAgIHNlbmREdG1mKChjaGFyKSBtc2cuYXJnMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RoaXJkUGFydHlDYWxsU2VydmljZS5qYXZhIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvVGhpcmRQYXJ0eUNhbGxTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkZGI0MwotLS0gL2Rldi9udWxsCisrKyBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RoaXJkUGFydHlDYWxsU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQudGVsZXBob255OworCitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CitpbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuSVRoaXJkUGFydHlDYWxsTGlzdGVuZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LklUaGlyZFBhcnR5Q2FsbFNlcnZpY2U7CisKKy8qKgorICogSW50ZXJmYWNlIHByb3ZpZGVkIGJ5IGEgc2VydmljZSB0byBzdGFydCBvdXRnb2luZyBjYWxscyBhbmQgYXR0YWNoIHRvIGluY29taW5nIGNhbGxzLgorICovCitwdWJsaWMgY2xhc3MgVGhpcmRQYXJ0eUNhbGxTZXJ2aWNlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX09VVEdPSU5HX0NBTExfSU5JVElBVEUgPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfSU5DT01JTkdfQ0FMTF9BVFRBQ0ggPSAyOworCisgICAgLyoqCisgICAgICogQ2FsbCB0byBzdGFydCBhIG5ldyBvdXRnb2luZyBjYWxsLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG91dGdvaW5nQ2FsbEluaXRpYXRlKFRoaXJkUGFydHlDYWxsTGlzdGVuZXIgbGlzdGVuZXIsIFN0cmluZyBudW1iZXIpIHsKKyAgICAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBlbXB0eQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGwgdG8gYXR0YWNoIHRvIGFuIGluY29taW5nIGNhbGwuCisgICAgICovCisgICAgcHVibGljIHZvaWQgaW5jb21pbmdDYWxsQXR0YWNoKFRoaXJkUGFydHlDYWxsTGlzdGVuZXIgbGlzdGVuZXIsIFN0cmluZyBjYWxsSWQpIHsKKyAgICAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBlbXB0eQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gSUJpbmRlciBpbnN0YW5jZSB0aGF0IGNhbiByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2aWNlJ3Mgb25CaW5kIGZ1bmN0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBJQmluZGVyIGdldEJpbmRlcigpIHsKKyAgICAgICAgcmV0dXJuIG1DYWxsYmFjazsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIElUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuU3R1YiBtQ2FsbGJhY2sgPSBuZXcgSVRoaXJkUGFydHlDYWxsU2VydmljZS5TdHViKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb3V0Z29pbmdDYWxsSW5pdGlhdGUoSVRoaXJkUGFydHlDYWxsTGlzdGVuZXIgbGlzdGVuZXIsIFN0cmluZyBudW1iZXIpIHsKKyAgICAgICAgICAgIFJsb2cudygiVGhpcmRQYXJ0eVBob25lIiwgIlRoaXJkUGFydHlDYWxsU2VydmljZS5JVGhpcmRQYXJ0eUNhbGxTZXJ2aWNlLm91dCIpOworICAgICAgICAgICAgTWVzc2FnZS5vYnRhaW4obUhhbmRsZXIsIE1TR19PVVRHT0lOR19DQUxMX0lOSVRJQVRFLAorICAgICAgICAgICAgICAgICAgICBQYWlyLmNyZWF0ZShsaXN0ZW5lciwgbnVtYmVyKSkuc2VuZFRvVGFyZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgaW5jb21pbmdDYWxsQXR0YWNoKElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyIGxpc3RlbmVyLCBTdHJpbmcgY2FsbElkKSB7CisgICAgICAgICAgICBSbG9nLncoIlRoaXJkUGFydHlQaG9uZSIsICJUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuSVRoaXJkUGFydHlDYWxsU2VydmljZS5pbiIpOworICAgICAgICAgICAgTWVzc2FnZS5vYnRhaW4obUhhbmRsZXIsIE1TR19JTkNPTUlOR19DQUxMX0FUVEFDSCwKKyAgICAgICAgICAgICAgICAgICAgUGFpci5jcmVhdGUobGlzdGVuZXIsIGNhbGxJZCkpLnNlbmRUb1RhcmdldCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBSbG9nLncoIlRoaXJkUGFydHlQaG9uZSIsICJUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuaGFuZGxlTWVzc2FnZTogIiArIG1zZy53aGF0KTsKKyAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19PVVRHT0lOR19DQUxMX0lOSVRJQVRFOiB7CisgICAgICAgICAgICAgICAgICAgIFJsb2cudygiVGhpcmRQYXJ0eVBob25lIiwgIlRoaXJkUGFydHlDYWxsU2VydmljZS5oYW5kbGVNZXNzYWdlIG91dCIpOworICAgICAgICAgICAgICAgICAgICBQYWlyPElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyLCBTdHJpbmc+IHBhaXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQYWlyPElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyLCBTdHJpbmc+KSBtc2cub2JqOworICAgICAgICAgICAgICAgICAgICBUaGlyZFBhcnR5Q2FsbExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRoaXJkUGFydHlDYWxsTGlzdGVuZXIocGFpci5maXJzdCk7CisgICAgICAgICAgICAgICAgICAgIG91dGdvaW5nQ2FsbEluaXRpYXRlKGxpc3RlbmVyLCBwYWlyLnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIE1TR19JTkNPTUlOR19DQUxMX0FUVEFDSDogeworICAgICAgICAgICAgICAgICAgICBSbG9nLncoIlRoaXJkUGFydHlQaG9uZSIsICJUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuaGFuZGxlTWVzc2FnZSBpbiIpOworICAgICAgICAgICAgICAgICAgICBQYWlyPElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyLCBTdHJpbmc+IHBhaXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQYWlyPElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyLCBTdHJpbmc+KSBtc2cub2JqOworICAgICAgICAgICAgICAgICAgICBUaGlyZFBhcnR5Q2FsbExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRoaXJkUGFydHlDYWxsTGlzdGVuZXIocGFpci5maXJzdCk7CisgICAgICAgICAgICAgICAgICAgIGluY29taW5nQ2FsbEF0dGFjaChsaXN0ZW5lciwgcGFpci5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0NhbGxlckluZm9Bc3luY1F1ZXJ5LmphdmEgYi90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvQ2FsbGVySW5mb0FzeW5jUXVlcnkuamF2YQppbmRleCBjNjNiZTkxLi43NGY3M2I1IDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvQ2FsbGVySW5mb0FzeW5jUXVlcnkuamF2YQorKysgYi90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvQ2FsbGVySW5mb0FzeW5jUXVlcnkuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuQ29udGFjdHNDb250cmFjdC5Db21tb25EYXRhS2luZHMuU2lwQWRkcmVzczsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkNvbnRhY3RzQ29udHJhY3QuRGF0YTsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkNvbnRhY3RzQ29udHJhY3QuUGhvbmVMb29rdXA7CmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRlbGVwaG9ueS5haWRsIGIvdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lUZWxlcGhvbnkuYWlkbAppbmRleCA3YmQyYzg0Li5kOWU5ZDU2IDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRlbGVwaG9ueS5haWRsCisrKyBiL3RlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGVsZXBob255LmFpZGwKQEAgLTMyNCw1ICszMjQsNDUgQEAKICAgICAgKiBTZXRzIG1pbmltdW0gdGltZSBpbiBtaWxsaS1zZWNvbmRzIGJldHdlZW4gb25DZWxsSW5mb0NoYW5nZWQKICAgICAgKi8KICAgICB2b2lkIHNldENlbGxJbmZvTGlzdFJhdGUoaW50IHJhdGVJbk1pbGxpcyk7Ci19CiAKKyAgICAvKioKKyAgICAgKiBPcGVucyBhIGxvZ2ljYWwgY2hhbm5lbCB0byB0aGUgSUNDIGNhcmQuCisgICAgICoKKyAgICAgKiBJbnB1dCBwYXJhbWV0ZXJzIGVxdWl2YWxlbnQgdG8gVFMgMjcuMDA3IEFUK0NDSE8gY29tbWFuZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBBSUQgQXBwbGljYXRpb24gaWQuIFNlZSBFVFNJIDEwMi4yMjEgYW5kIDEwMS4yMjAuCisgICAgICogQHJldHVybiBUaGUgbG9naWNhbCBjaGFubmVsIGlkIHdoaWNoIGlzIHNldCB0byAtMSBvbiBlcnJvci4KKyAgICAgKi8KKyAgICBpbnQgaWNjT3BlbkxvZ2ljYWxDaGFubmVsKFN0cmluZyBBSUQpOworCisgICAgLyoqCisgICAgICogQ2xvc2VzIGEgcHJldmlvdXNseSBvcGVuZWQgbG9naWNhbCBjaGFubmVsIHRvIHRoZSBJQ0MgY2FyZC4KKyAgICAgKgorICAgICAqIElucHV0IHBhcmFtZXRlcnMgZXF1aXZhbGVudCB0byBUUyAyNy4wMDcgQVQrQ0NIQyBjb21tYW5kLgorICAgICAqCisgICAgICogQHBhcmFtIGNoYW5uZWwgaXMgdGhlIGNoYW5uZWwgaWQgdG8gYmUgY2xvc2VkIGFzIHJldHJ1bmVkIGJ5IGEKKyAgICAgKiAgICAgICAgICAgIHN1Y2Nlc3NmdWwgaWNjT3BlbkxvZ2ljYWxDaGFubmVsLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY2hhbm5lbCB3YXMgY2xvc2VkIHN1Y2Nlc3NmdWxseS4KKyAgICAgKi8KKyAgICBib29sZWFuIGljY0Nsb3NlTG9naWNhbENoYW5uZWwoaW50IGNoYW5uZWwpOworCisgICAgLyoqCisgICAgICogVHJhbnNtaXQgYW4gQVBEVSB0byB0aGUgSUNDIGNhcmQgb3ZlciBhIGxvZ2ljYWwgY2hhbm5lbC4KKyAgICAgKgorICAgICAqIElucHV0IHBhcmFtZXRlcnMgZXF1aXZhbGVudCB0byBUUyAyNy4wMDcgQVQrQ0dMQSBjb21tYW5kLgorICAgICAqCisgICAgICogQHBhcmFtIGNoYW5uZWwgaXMgdGhlIGNoYW5uZWwgaWQgdG8gYmUgY2xvc2VkIGFzIHJldHJ1bmVkIGJ5IGEKKyAgICAgKiAgICAgICAgICAgIHN1Y2Nlc3NmdWwgaWNjT3BlbkxvZ2ljYWxDaGFubmVsLgorICAgICAqIEBwYXJhbSBjbGEgQ2xhc3Mgb2YgdGhlIEFQRFUgY29tbWFuZC4KKyAgICAgKiBAcGFyYW0gaW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rpb24gb2YgdGhlIEFQRFUgY29tbWFuZC4KKyAgICAgKiBAcGFyYW0gcDEgUDEgdmFsdWUgb2YgdGhlIEFQRFUgY29tbWFuZC4KKyAgICAgKiBAcGFyYW0gcDIgUDIgdmFsdWUgb2YgdGhlIEFQRFUgY29tbWFuZC4KKyAgICAgKiBAcGFyYW0gcDMgUDMgdmFsdWUgb2YgdGhlIEFQRFUgY29tbWFuZC4gSWYgcDMgaXMgbmVnYXRpdmUgYSA0IGJ5dGUgQVBEVQorICAgICAqICAgICAgICAgICAgaXMgc2VudCB0byB0aGUgU0lNLgorICAgICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgc2VudCB3aXRoIHRoZSBBUERVLgorICAgICAqIEByZXR1cm4gVGhlIEFQRFUgcmVzcG9uc2UgZnJvbSB0aGUgSUNDIGNhcmQgd2l0aCB0aGUgc3RhdHVzIGFwcGVuZGVkIGF0CisgICAgICogICAgICAgICAgICB0aGUgZW5kLiBJZiBhbiBlcnJvciBvY2N1cnMsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KKyAgICAgKi8KKyAgICBTdHJpbmcgaWNjVHJhbnNtaXRBcGR1TG9naWNhbENoYW5uZWwoaW50IGNoYW5uZWwsIGludCBjbGEsIGludCBpbnN0cnVjdGlvbiwKKyAgICAgICAgICAgIGludCBwMSwgaW50IHAyLCBpbnQgcDMsIFN0cmluZyBkYXRhKTsKK30KZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lci5haWRsIGIvdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lUaGlyZFBhcnR5Q2FsbExpc3RlbmVyLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNmMmQ4MQotLS0gL2Rldi9udWxsCisrKyBiL3RlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lci5haWRsCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueTsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5JVGhpcmRQYXJ0eUNhbGxQcm92aWRlcjsKKworLyoqCisgKiBJbnRlcmZhY2UgcHJvdmlkZWQgdG8gVGhpcmRQYXJ0eUNhbGxTZXJ2aWNlLiBUaGUgc2VydmljZSBjYW4gdXNlIHRoaXMgdG8gbm90aWZ5IHRoZSBsaXN0ZW5lciBvZgorICogY2hhbmdlcyB0byB0aGUgY2FsbCBzdGF0ZS4KKyAqLworb25ld2F5IGludGVyZmFjZSBJVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lciB7CisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBzZXJ2aWNlIHdoZW4gYSBjYWxsIHByb3ZpZGVyIGlzIGF2YWlsYWJsZSB0byBwZXJmb3JtIHRoZSBvdXRnb2luZyBvciBpbmNvbWluZworICAgICAqIGNhbGwuCisgICAgICovCisgICAgdm9pZCBvbkNhbGxQcm92aWRlckF0dGFjaGVkKElUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyIGNhbGxQcm92aWRlcik7CisKKyAgICAvKioKKyAgICAgKiBOb3RpZmllcyB0aGUgbGlzdGVuZXIgdGhhdCByaW5naW5nIGhhcyBzdGFydGVkIGZvciB0aGlzIGNhbGwuCisgICAgICovCisgICAgdm9pZCBvblJpbmdpbmdTdGFydGVkKCk7CisKKyAgICAvKioKKyAgICAgKiBOb3RpZmllcyB0aGUgbGlzdGVuZXIgdGhhdCB0aGUgY2FsbCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXN0YWJsaXNoZWQuCisgICAgICovCisgICAgdm9pZCBvbkNhbGxFc3RhYmxpc2hlZCgpOworCisgICAgLyoqCisgICAgICogTm90aWZpZXMgdGhlIGxpc3RlbmVyIHRoYXQgdGhlIGNhbGwgaGFzIGVuZGVkLgorICAgICAqLworICAgIHZvaWQgb25DYWxsRW5kZWQoaW50IHJlYXNvbik7Cit9CmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRoaXJkUGFydHlDYWxsUHJvdmlkZXIuYWlkbCBiL3RlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGhpcmRQYXJ0eUNhbGxQcm92aWRlci5haWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZDY3YTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRoaXJkUGFydHlDYWxsUHJvdmlkZXIuYWlkbApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnk7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuSVRoaXJkUGFydHlDYWxsTGlzdGVuZXI7CisKKy8qKgorICogSW50ZXJmYWNlIHNlbnQgdG8gVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lci5vbkNhbGxQcm92aWRlckF0dGFjaGVkLiBUaGlzIGlzIHVzZWQgdG8gY29udHJvbCBhbgorICogb3V0Z29pbmcgb3IgaW5jb21pbmcgY2FsbC4KKyAqLworb25ld2F5IGludGVyZmFjZSBJVGhpcmRQYXJ0eUNhbGxQcm92aWRlciB7CisgICAgLyoqCisgICAgICogTXV0ZXMgb3IgdW5tdXRlcyB0aGUgY2FsbC4KKyAgICAgKi8KKyAgICB2b2lkIG11dGUoYm9vbGVhbiBzaG91bGRNdXRlKTsKKworICAgIC8qKgorICAgICAqIEVuZHMgdGhlIGN1cnJlbnQgY2FsbC4gSWYgdGhpcyBpcyBhbiB1bmFuc3dlcmVkIGluY29taW5nIGNhbGwgdGhlbiB0aGUgY2FsbCBpcyByZWplY3RlZCAoZm9yCisgICAgICogZXhhbXBsZSwgYSBub3RpZmljYXRpb24gaXMgc2VudCB0byBhIHNlcnZlciB0aGF0IHRoZSB1c2VyIGRlY2xpbmVkIHRoZSBjYWxsKS4KKyAgICAgKi8KKyAgICB2b2lkIGhhbmd1cCgpOworCisgICAgLyoqCisgICAgICogQWNjZXB0cyB0aGUgaW5jb21pbmcgY2FsbC4KKyAgICAgKi8KKyAgICB2b2lkIGluY29taW5nQ2FsbEFjY2VwdCgpOworCisgICAgLyoqCisgICAgICogU2VuZHMgdGhlIGdpdmVuIERUTUYgY29kZS4gVGhlIGNvZGUgY2FuIGJlICcwJy0nOScsICdBJy0nRCcsICcjJywgb3IgJyonLgorICAgICAqLworICAgIHZvaWQgc2VuZER0bWYoY2hhciBjKTsKK30KZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGhpcmRQYXJ0eUNhbGxTZXJ2aWNlLmFpZGwgYi90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRoaXJkUGFydHlDYWxsU2VydmljZS5haWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZWU0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRoaXJkUGFydHlDYWxsU2VydmljZS5haWRsCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueTsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5JVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lcjsKKworLyoqCisgKiBJbnRlcmZhY2UgcHJvdmlkZWQgYnkgYSBzZXJ2aWNlIHRvIHN0YXJ0IG91dGdvaW5nIGNhbGxzIGFuZCBhdHRhY2ggdG8gaW5jb21pbmcgY2FsbHMuCisgKi8KK29uZXdheSBpbnRlcmZhY2UgSVRoaXJkUGFydHlDYWxsU2VydmljZSB7CisgICAgLyoqCisgICAgICogQ2FsbCB0byBzdGFydCBhIG5ldyBvdXRnb2luZyBjYWxsLgorICAgICAqLworICAgIHZvaWQgb3V0Z29pbmdDYWxsSW5pdGlhdGUoSVRoaXJkUGFydHlDYWxsTGlzdGVuZXIgbGlzdGVuZXIsIFN0cmluZyBudW1iZXIpOworCisgICAgLyoqCisgICAgICogQ2FsbCB0byBhdHRhY2ggdG8gYW4gaW5jb21pbmcgY2FsbC4KKyAgICAgKi8KKyAgICB2b2lkIGluY29taW5nQ2FsbEF0dGFjaChJVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lciBsaXN0ZW5lciwgU3RyaW5nIGNhbGxJZCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0FjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2UuamF2YSBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvQWN0aXZpdHlJbnN0cnVtZW50YXRpb25UZXN0Q2FzZS5qYXZhCmluZGV4IGQxMmZmNmYuLmE1OWVlMzUgMTAwNjQ0Ci0tLSBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvQWN0aXZpdHlJbnN0cnVtZW50YXRpb25UZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvQWN0aXZpdHlJbnN0cnVtZW50YXRpb25UZXN0Q2FzZS5qYXZhCkBAIC0xOCw4ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKIAotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotCiAvKioKICAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgZnVuY3Rpb25hbCB0ZXN0aW5nIG9mIGEgc2luZ2xlIGFjdGl2aXR5LiAgVGhlIGFjdGl2aXR5IHVuZGVyIHRlc3Qgd2lsbAogICogYmUgY3JlYXRlZCB1c2luZyB0aGUgc3lzdGVtIGluZnJhc3RydWN0dXJlIChieSBjYWxsaW5nIEluc3RydW1lbnRhdGlvblRlc3RDYXNlLmxhdW5jaEFjdGl2aXR5KCkpCmRpZmYgLS1naXQgYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0FwcGxpY2F0aW9uVGVzdENhc2UuamF2YSBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvQXBwbGljYXRpb25UZXN0Q2FzZS5qYXZhCmluZGV4IGFlNWZhNGQuLmYwOTMxODEgMTAwNjQ0Ci0tLSBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvQXBwbGljYXRpb25UZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvQXBwbGljYXRpb25UZXN0Q2FzZS5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC50ZXN0OwogCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci0KIGltcG9ydCBhbmRyb2lkLmFwcC5BcHBsaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmFwcC5JbnN0cnVtZW50YXRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CmRpZmYgLS1naXQgYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblV0aWxzLmphdmEgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblV0aWxzLmphdmEKaW5kZXggNGM1OTA5Ny4uMWE3MDAyYSAxMDA2NDQKLS0tIGEvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25VdGlscy5qYXZhCisrKyBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvSW5zdHJ1bWVudGF0aW9uVXRpbHMuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQudGVzdDsKIAotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotCiAvKioKICAqIAogICogVGhlIEluc3RydW1lbnRhdGlvblV0aWxzIGNsYXNzIGhhcyBhbGwgdGhlIHV0aWxpdHkgZnVuY3Rpb25zIG5lZWRlZCBmb3IKZGlmZiAtLWdpdCBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvSXNvbGF0ZWRDb250ZXh0LmphdmEgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0lzb2xhdGVkQ29udGV4dC5qYXZhCmluZGV4IGJjMDBmNjguLmY5NzFiNWQgMTAwNjQ0Ci0tLSBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvSXNvbGF0ZWRDb250ZXh0LmphdmEKKysrIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9Jc29sYXRlZENvbnRleHQuamF2YQpAQCAtMzksOCArMzksNiBAQAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAKZGlmZiAtLWdpdCBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvTGF1bmNoUGVyZm9ybWFuY2VCYXNlLmphdmEgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0xhdW5jaFBlcmZvcm1hbmNlQmFzZS5qYXZhCmluZGV4IGMzMjQ0NDYuLmQ0MjNlNjIgMTAwNjQ0Ci0tLSBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvTGF1bmNoUGVyZm9ybWFuY2VCYXNlLmphdmEKKysrIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9MYXVuY2hQZXJmb3JtYW5jZUJhc2UuamF2YQpAQCAtMTksMTMgKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5JbnN0cnVtZW50YXRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLkRlYnVnOwotaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogCiAKIC8qKgpkaWZmIC0tZ2l0IGEvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9Nb3JlQXNzZXJ0cy5qYXZhIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9Nb3JlQXNzZXJ0cy5qYXZhCmluZGV4IDgzY2M0MjAuLmZiMGZhYmEgMTAwNjQ0Ci0tLSBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvTW9yZUFzc2VydHMuamF2YQorKysgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L01vcmVBc3NlcnRzLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnRlc3Q7CiAKLWltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuY29sbGVjdC5MaXN0czsKIGltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKZGlmZiAtLWdpdCBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvU2VydmljZVRlc3RDYXNlLmphdmEgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L1NlcnZpY2VUZXN0Q2FzZS5qYXZhCmluZGV4IGQ4Y2VkMzguLmJhMjBjMDkgMTAwNjQ0Ci0tLSBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvU2VydmljZVRlc3RDYXNlLmphdmEKKysrIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9TZXJ2aWNlVGVzdENhc2UuamF2YQpAQCAtMTgsMTQgKzE4LDExIEBACiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BcHBsaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmFwcC5TZXJ2aWNlOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQudGVzdC5tb2NrLk1vY2tBcHBsaWNhdGlvbjsKIAotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwogaW1wb3J0IGphdmEudXRpbC5SYW5kb207CiAKIC8qKgpAQCAtMjYzLDYgKzI2MCw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKG1TZXJ2aWNlQ3JlYXRlZCkgewogICAgICAgICAgICAgbVNlcnZpY2Uub25EZXN0cm95KCk7CisgICAgICAgICAgICBtU2VydmljZUNyZWF0ZWQgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9TaW5nbGVMYXVuY2hBY3Rpdml0eVRlc3RDYXNlLmphdmEgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L1NpbmdsZUxhdW5jaEFjdGl2aXR5VGVzdENhc2UuamF2YQppbmRleCA3OWM1NTRhLi43MmM5M2NlIDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L1NpbmdsZUxhdW5jaEFjdGl2aXR5VGVzdENhc2UuamF2YQorKysgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L1NpbmdsZUxhdW5jaEFjdGl2aXR5VGVzdENhc2UuamF2YQpAQCAtMTcsOCArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLnRlc3Q7CiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSVdpbmRvd01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIAogLyoqCiAgKiBJZiB5b3Ugd291bGQgbGlrZSB0byB0ZXN0IGEgc2luZ2xlIGFjdGl2aXR5IHdpdGggYW4KZGlmZiAtLWdpdCBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvbW9jay9Nb2NrQ3Vyc29yLmphdmEgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L21vY2svTW9ja0N1cnNvci5qYXZhCmluZGV4IDViOGE0ZjQuLmEzN2M2ZWIgMTAwNjQ0Ci0tLSBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvbW9jay9Nb2NrQ3Vyc29yLmphdmEKKysrIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9tb2NrL01vY2tDdXJzb3IuamF2YQpAQCAtMjQsOCArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIAotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KIC8qKgogICogPFA+CiAgKiBBIG1vY2sge0BsaW5rIGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yfSBjbGFzcyB0aGF0IGlzb2xhdGVzIHRoZSB0ZXN0IGNvZGUgZnJvbSByZWFsCmRpZmYgLS1naXQgYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L21vY2svTW9ja1BhY2thZ2VNYW5hZ2VyLmphdmEgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L21vY2svTW9ja1BhY2thZ2VNYW5hZ2VyLmphdmEKaW5kZXggNjYxYmQ0MS4uZmY1YzkzNSAxMDA2NDQKLS0tIGEvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9tb2NrL01vY2tQYWNrYWdlTWFuYWdlci5qYXZhCisrKyBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvbW9jay9Nb2NrUGFja2FnZU1hbmFnZXIuamF2YQpAQCAtNDAsMTMgKzQwLDEwIEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNlcnZpY2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5WZXJpZmljYXRpb25QYXJhbXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlZlcmlmaWVyRGV2aWNlSWRlbnRpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlhtbFJlc291cmNlUGFyc2VyOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwpkaWZmIC0tZ2l0IGEvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9zdWl0ZWJ1aWxkZXIvVGVzdFN1aXRlQnVpbGRlci5qYXZhIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9zdWl0ZWJ1aWxkZXIvVGVzdFN1aXRlQnVpbGRlci5qYXZhCmluZGV4IDI4ZjcyMTYuLjhjODk0ODkgMTAwNjQ0Ci0tLSBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3Qvc3VpdGVidWlsZGVyL1Rlc3RTdWl0ZUJ1aWxkZXIuamF2YQorKysgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L3N1aXRlYnVpbGRlci9UZXN0U3VpdGVCdWlsZGVyLmphdmEKQEAgLTI5LDggKzI5LDYgQEAKIGltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CiBpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKIAotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CmRpZmYgLS1naXQgYS90ZXN0LXJ1bm5lci9zcmMvanVuaXQvcnVubmVyL0xvYWRpbmdUZXN0Q29sbGVjdG9yLmphdmEgYi90ZXN0LXJ1bm5lci9zcmMvanVuaXQvcnVubmVyL0xvYWRpbmdUZXN0Q29sbGVjdG9yLmphdmEKaW5kZXggNDg5ZDlkNi4uOTEwMTkwMCAxMDA2NDQKLS0tIGEvdGVzdC1ydW5uZXIvc3JjL2p1bml0L3J1bm5lci9Mb2FkaW5nVGVzdENvbGxlY3Rvci5qYXZhCisrKyBiL3Rlc3QtcnVubmVyL3NyYy9qdW5pdC9ydW5uZXIvTG9hZGluZ1Rlc3RDb2xsZWN0b3IuamF2YQpAQCAtMSw3ICsxLDYgQEAKIHBhY2thZ2UganVuaXQucnVubmVyOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuKjsKLWltcG9ydCBqdW5pdC5ydW5uZXIuKjsKIGltcG9ydCBqdW5pdC5mcmFtZXdvcmsuKjsKIAogLyoqCmRpZmYgLS1naXQgYS90ZXN0LXJ1bm5lci9zcmMvanVuaXQvcnVubmVyL1NvcnRlci5qYXZhIGIvdGVzdC1ydW5uZXIvc3JjL2p1bml0L3J1bm5lci9Tb3J0ZXIuamF2YQppbmRleCA3NzMxZjY2Li44ZDkzNDFkIDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvanVuaXQvcnVubmVyL1NvcnRlci5qYXZhCisrKyBiL3Rlc3QtcnVubmVyL3NyYy9qdW5pdC9ydW5uZXIvU29ydGVyLmphdmEKQEAgLTIsOCArMiw2IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuKjsKIAotaW1wb3J0IGp1bml0LnJ1bm5lci4qOwotCiAvKioKICAqIEEgY3VzdG9tIHF1aWNrIHNvcnQgd2l0aCBzdXBwb3J0IHRvIGN1c3RvbWl6ZSB0aGUgc3dhcCBiZWhhdmlvdXIuCiAgKiBOT1RJQ0U6IFdlIGNhbid0IHVzZSB0aGUgdGhlIHNvcnRpbmcgc3VwcG9ydCBmcm9tIHRoZSBKREsgMS4yIGNvbGxlY3Rpb24KZGlmZiAtLWdpdCBhL3Rlc3RzL0JpRGlUZXN0cy9zcmMvY29tL2FuZHJvaWQvYmlkaS9CaURpVGVzdEdyaWRMYXlvdXRDb2RlTHRyLmphdmEgYi90ZXN0cy9CaURpVGVzdHMvc3JjL2NvbS9hbmRyb2lkL2JpZGkvQmlEaVRlc3RHcmlkTGF5b3V0Q29kZUx0ci5qYXZhCmluZGV4IDJiNWU2NzQuLmVhMDhhNmEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0JpRGlUZXN0cy9zcmMvY29tL2FuZHJvaWQvYmlkaS9CaURpVGVzdEdyaWRMYXlvdXRDb2RlTHRyLmphdmEKKysrIGIvdGVzdHMvQmlEaVRlc3RzL3NyYy9jb20vYW5kcm9pZC9iaWRpL0JpRGlUZXN0R3JpZExheW91dENvZGVMdHIuamF2YQpAQCAtMjIsMTEgKzIyLDI1IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuKjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5TcGFjZTsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIAotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnRleHQuSW5wdXRUeXBlLio7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuKjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC50ZXh0LklucHV0VHlwZS5UWVBFX0NMQVNTX1RFWFQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudGV4dC5JbnB1dFR5cGUuVFlQRV9URVhUX1ZBUklBVElPTl9FTUFJTF9BRERSRVNTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnRleHQuSW5wdXRUeXBlLlRZUEVfVEVYVF9WQVJJQVRJT05fUEFTU1dPUkQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuQUxJR05fQk9VTkRTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkJBU0VMSU5FOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkNFTlRFUjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5GSUxMOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkxFRlQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuUklHSFQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuU1RBUlQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuU3BlYzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5zcGVjOwogCiBwdWJsaWMgY2xhc3MgQmlEaVRlc3RHcmlkTGF5b3V0Q29kZUx0ciBleHRlbmRzIEZyYWdtZW50IHsKIApkaWZmIC0tZ2l0IGEvdGVzdHMvQmlEaVRlc3RzL3NyYy9jb20vYW5kcm9pZC9iaWRpL0JpRGlUZXN0R3JpZExheW91dENvZGVSdGwuamF2YSBiL3Rlc3RzL0JpRGlUZXN0cy9zcmMvY29tL2FuZHJvaWQvYmlkaS9CaURpVGVzdEdyaWRMYXlvdXRDb2RlUnRsLmphdmEKaW5kZXggM2EwM2M2Yy4uZmMzYTkyYyAxMDA2NDQKLS0tIGEvdGVzdHMvQmlEaVRlc3RzL3NyYy9jb20vYW5kcm9pZC9iaWRpL0JpRGlUZXN0R3JpZExheW91dENvZGVSdGwuamF2YQorKysgYi90ZXN0cy9CaURpVGVzdHMvc3JjL2NvbS9hbmRyb2lkL2JpZGkvQmlEaVRlc3RHcmlkTGF5b3V0Q29kZVJ0bC5qYXZhCkBAIC0yMiwxMSArMjIsMjUgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuRWRpdFRleHQ7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuRnJhbWVMYXlvdXQ7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC4qOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNwYWNlOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwogCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQudGV4dC5JbnB1dFR5cGUuKjsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC4qOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnRleHQuSW5wdXRUeXBlLlRZUEVfQ0xBU1NfVEVYVDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC50ZXh0LklucHV0VHlwZS5UWVBFX1RFWFRfVkFSSUFUSU9OX0VNQUlMX0FERFJFU1M7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudGV4dC5JbnB1dFR5cGUuVFlQRV9URVhUX1ZBUklBVElPTl9QQVNTV09SRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5BTElHTl9CT1VORFM7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuQkFTRUxJTkU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuQ0VOVEVSOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkZJTEw7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuTEVGVDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5SSUdIVDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5TVEFSVDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5TcGVjOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LnNwZWM7CiAKIHB1YmxpYyBjbGFzcyBCaURpVGVzdEdyaWRMYXlvdXRDb2RlUnRsIGV4dGVuZHMgRnJhZ21lbnQgewogCmRpZmYgLS1naXQgYS90ZXN0cy9HcmlkTGF5b3V0VGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9sYXlvdXQvQWJzdHJhY3RMYXlvdXRUZXN0LmphdmEgYi90ZXN0cy9HcmlkTGF5b3V0VGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9sYXlvdXQvQWJzdHJhY3RMYXlvdXRUZXN0LmphdmEKaW5kZXggNGQzYTg0My4uMTk2YTVjMSAxMDA2NDQKLS0tIGEvdGVzdHMvR3JpZExheW91dFRlc3Qvc3JjL2NvbS9hbmRyb2lkL3Rlc3QvbGF5b3V0L0Fic3RyYWN0TGF5b3V0VGVzdC5qYXZhCisrKyBiL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9BYnN0cmFjdExheW91dFRlc3QuamF2YQpAQCAtMjQsNyArMjQsMTMgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKIAotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuR3Jhdml0eS4qOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuR3Jhdml0eS5CT1RUT007CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5HcmF2aXR5LkNFTlRFUjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LkdyYXZpdHkuRklMTDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LkdyYXZpdHkuTEVGVDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LkdyYXZpdHkuTk9fR1JBVklUWTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LkdyYXZpdHkuUklHSFQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5HcmF2aXR5LlRPUDsKIAogcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0TGF5b3V0VGVzdCBleHRlbmRzIEFjdGl2aXR5IHsKIApkaWZmIC0tZ2l0IGEvdGVzdHMvR3JpZExheW91dFRlc3Qvc3JjL2NvbS9hbmRyb2lkL3Rlc3QvbGF5b3V0L0FsaWdubWVudFRlc3QuamF2YSBiL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9BbGlnbm1lbnRUZXN0LmphdmEKaW5kZXggYjFjNDQ4Ni4uNTU1OTcwNyAxMDA2NDQKLS0tIGEvdGVzdHMvR3JpZExheW91dFRlc3Qvc3JjL2NvbS9hbmRyb2lkL3Rlc3QvbGF5b3V0L0FsaWdubWVudFRlc3QuamF2YQorKysgYi90ZXN0cy9HcmlkTGF5b3V0VGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9sYXlvdXQvQWxpZ25tZW50VGVzdC5qYXZhCkBAIC0yMCwxNSArMjAsMjUgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuRWRpdFRleHQ7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkFsaWdubWVudDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkxheW91dFBhcmFtczsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIAotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0Lio7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuQkFTRUxJTkU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuQk9UVE9NOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkNFTlRFUjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5GSUxMOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkxFRlQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuUklHSFQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuVE9QOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LnNwZWM7CiAKLXB1YmxpYyBjbGFzcyBBbGlnbm1lbnRUZXN0ICBleHRlbmRzIEFjdGl2aXR5IHsKK3B1YmxpYyBjbGFzcyBBbGlnbm1lbnRUZXN0IGV4dGVuZHMgQWN0aXZpdHkgewogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBIT1JJWk9OVEFMX05BTUVTID0geyJMRUZUIiwgImNlbnRlciIsICJlYXN0IiwgImZpbGwifTsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEFsaWdubWVudFtdIEhPUklaT05UQUxfQUxJR05NRU5UUyA9IHtMRUZULCBDRU5URVIsIFJJR0hULCBGSUxMfTsKZGlmZiAtLWdpdCBhL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9HcmlkTGF5b3V0VGVzdC5qYXZhIGIvdGVzdHMvR3JpZExheW91dFRlc3Qvc3JjL2NvbS9hbmRyb2lkL3Rlc3QvbGF5b3V0L0dyaWRMYXlvdXRUZXN0LmphdmEKaW5kZXggNGNlNDQ5YS4uODA0N2M1ZjEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9HcmlkTGF5b3V0VGVzdC5qYXZhCisrKyBiL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9HcmlkTGF5b3V0VGVzdC5qYXZhCkBAIC0yMSw3ICsyMSwxMCBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dDsKIAotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0Lio7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuU3BlYzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5VTkRFRklORUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuVkVSVElDQUw7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuc3BlYzsKIAogcHVibGljIGNsYXNzIEdyaWRMYXlvdXRUZXN0IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXRUZXN0IHsKICAgICBwdWJsaWMgVmlld0dyb3VwIGNyZWF0ZShDb250ZXh0IGNvbnRleHQpIHsKZGlmZiAtLWdpdCBhL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9MaW5lYXJMYXlvdXRUZXN0LmphdmEgYi90ZXN0cy9HcmlkTGF5b3V0VGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9sYXlvdXQvTGluZWFyTGF5b3V0VGVzdC5qYXZhCmluZGV4IGM3ZjQ2NjUuLmRjNWIxMmMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9MaW5lYXJMYXlvdXRUZXN0LmphdmEKKysrIGIvdGVzdHMvR3JpZExheW91dFRlc3Qvc3JjL2NvbS9hbmRyb2lkL3Rlc3QvbGF5b3V0L0xpbmVhckxheW91dFRlc3QuamF2YQpAQCAtMjAsOSArMjAsOSBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dC5MYXlvdXRQYXJhbXM7CiAKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0Lio7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuKjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQ7CiAKIHB1YmxpYyBjbGFzcyBMaW5lYXJMYXlvdXRUZXN0IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXRUZXN0IHsKICAgICBwdWJsaWMgVmlld0dyb3VwIGNyZWF0ZShDb250ZXh0IGNvbnRleHQpIHsKZGlmZiAtLWdpdCBhL3Rlc3RzL0h3QWNjZWxlcmF0aW9uVGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sIGIvdGVzdHMvSHdBY2NlbGVyYXRpb25UZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggMWJiMGRiMC4uMGFkMzQ1NiAxMDA2NDQKLS0tIGEvdGVzdHMvSHdBY2NlbGVyYXRpb25UZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvdGVzdHMvSHdBY2NlbGVyYXRpb25UZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTcwNiw2ICs3MDYsMTUgQEAKICAgICAgICAgPC9hY3Rpdml0eT4KIAogICAgICAgICA8YWN0aXZpdHkKKyAgICAgICAgICAgICAgICBhbmRyb2lkOm5hbWU9IkNvbG9yRmlsdGVyc011dGF0ZUFjdGl2aXR5IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkNvbG9yRmlsdGVycy9NdXRhdGUgRmlsdGVycyI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iY29tLmFuZHJvaWQudGVzdC5od3VpLlRFU1QiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisKKyAgICAgICAgPGFjdGl2aXR5CiAgICAgICAgICAgICAgICAgYW5kcm9pZDpuYW1lPSJMaW5lc0FjdGl2aXR5IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkRyYXcvTGluZXMiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CkBAIC04NDksNSArODU4LDE0IEBACiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CiAgICAgICAgIDwvYWN0aXZpdHk+CiAKKyAgICAgICAgPGFjdGl2aXR5CisgICAgICAgICAgICAgICAgYW5kcm9pZDpuYW1lPSJQcm9qZWN0aW9uQWN0aXZpdHkiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iUmVvcmRlcmluZy9Qcm9qZWN0aW9uIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJjb20uYW5kcm9pZC50ZXN0Lmh3dWkuVEVTVCIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKwogICAgIDwvYXBwbGljYXRpb24+CiA8L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvSHdBY2NlbGVyYXRpb25UZXN0L3Jlcy9sYXlvdXQvcHJvamVjdGlvbi54bWwgYi90ZXN0cy9Id0FjY2VsZXJhdGlvblRlc3QvcmVzL2xheW91dC9wcm9qZWN0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQyMDFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvSHdBY2NlbGVyYXRpb25UZXN0L3Jlcy9sYXlvdXQvcHJvamVjdGlvbi54bWwKQEAgLTAsMCArMSwzNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzx2aWV3IGNsYXNzPSJjb20uYW5kcm9pZC50ZXN0Lmh3dWkuUHJvamVjdGlvbkFjdGl2aXR5JFByb2plY3RlZUxheW91dCIKKyAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6dG9vbHM9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Rvb2xzIgorICAgIGFuZHJvaWQ6aWQ9IkAraWQvY29udGFpbmVyIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCisgICAgdG9vbHM6Y29udGV4dD0iY29tLmV4YW1wbGUucHJvamVjdGlvbi5Qcm9qZWN0aW9uQWN0aXZpdHkiCisgICAgdG9vbHM6aWdub3JlPSJNZXJnZVJvb3RGcmFtZSI+CisgICAgPFRleHRWaWV3CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMTAwZHAiCisgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjUwc3AiCisgICAgICAgIGFuZHJvaWQ6dGV4dD0iVGV4dFZpZXciLz4KKyAgICA8RnJhbWVMYXlvdXQKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIxMDBkcCIKKyAgICAgICAgYW5kcm9pZDpjbGlwQ2hpbGRyZW49ImZhbHNlIj4KKyAgICAgICAgPHZpZXcgY2xhc3M9ImNvbS5hbmRyb2lkLnRlc3QuaHd1aS5Qcm9qZWN0aW9uQWN0aXZpdHkkUHJvamVjdGVkVmlldyIKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcHJvamVjdGlvbiIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIvPgorICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjUwc3AiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IlRleHRWaWV3Ii8+CisgICAgPC9GcmFtZUxheW91dD4KKworICAgIDxUZXh0VmlldworICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjEwMGRwIgorICAgICAgICBhbmRyb2lkOnRleHRTaXplPSI1MHNwIgorICAgICAgICBhbmRyb2lkOnRleHQ9IlRleHRWaWV3Ii8+Cis8L3ZpZXc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvSHdBY2NlbGVyYXRpb25UZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2h3dWkvQ29sb3JGaWx0ZXJzTXV0YXRlQWN0aXZpdHkuamF2YSBiL3Rlc3RzL0h3QWNjZWxlcmF0aW9uVGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9od3VpL0NvbG9yRmlsdGVyc011dGF0ZUFjdGl2aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4YjVkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL0h3QWNjZWxlcmF0aW9uVGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9od3VpL0NvbG9yRmlsdGVyc011dGF0ZUFjdGl2aXR5LmphdmEKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnRlc3QuaHd1aTsKKworaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFyZ2JFdmFsdWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JNYXRyaXg7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvck1hdHJpeENvbG9yRmlsdGVyOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTGlnaHRpbmdDb2xvckZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmZDb2xvckZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKKworQFN1cHByZXNzV2FybmluZ3MoeyJVbnVzZWREZWNsYXJhdGlvbiJ9KQorcHVibGljIGNsYXNzIENvbG9yRmlsdGVyc011dGF0ZUFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgeworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgZmluYWwgQml0bWFwc1ZpZXcgdmlldyA9IG5ldyBCaXRtYXBzVmlldyh0aGlzKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcodmlldyk7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEJpdG1hcHNWaWV3IGV4dGVuZHMgVmlldyB7CisgICAgICAgIHByaXZhdGUgZmluYWwgQml0bWFwIG1CaXRtYXAxOworICAgICAgICBwcml2YXRlIGZpbmFsIEJpdG1hcCBtQml0bWFwMjsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtQ29sb3JNYXRyaXhQYWludDsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtTGlnaHRpbmdQYWludDsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtQmxlbmRQYWludDsKKworICAgICAgICBwcml2YXRlIGZsb2F0IG1TYXR1cmF0aW9uID0gMC4wZjsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUxpZ2h0QWRkID0gMDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUxpZ2h0TXVsID0gMDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVBvcnRlckR1ZmZDb2xvciA9IDA7CisKKyAgICAgICAgQml0bWFwc1ZpZXcoQ29udGV4dCBjKSB7CisgICAgICAgICAgICBzdXBlcihjKTsKKworICAgICAgICAgICAgbUJpdG1hcDEgPSBCaXRtYXBGYWN0b3J5LmRlY29kZVJlc291cmNlKGMuZ2V0UmVzb3VyY2VzKCksIFIuZHJhd2FibGUuc3Vuc2V0MSk7CisgICAgICAgICAgICBtQml0bWFwMiA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlUmVzb3VyY2UoYy5nZXRSZXNvdXJjZXMoKSwgUi5kcmF3YWJsZS5zdW5zZXQyKTsKKworICAgICAgICAgICAgbUNvbG9yTWF0cml4UGFpbnQgPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgICAgIGZpbmFsIENvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0gbmV3IENvbG9yTWF0cml4KCk7CisgICAgICAgICAgICBjb2xvck1hdHJpeC5zZXRTYXR1cmF0aW9uKDApOworICAgICAgICAgICAgbUNvbG9yTWF0cml4UGFpbnQuc2V0Q29sb3JGaWx0ZXIobmV3IENvbG9yTWF0cml4Q29sb3JGaWx0ZXIoY29sb3JNYXRyaXgpKTsKKworICAgICAgICAgICAgbUxpZ2h0aW5nUGFpbnQgPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgICAgIG1MaWdodGluZ1BhaW50LnNldENvbG9yRmlsdGVyKG5ldyBMaWdodGluZ0NvbG9yRmlsdGVyKDAsIDApKTsKKworICAgICAgICAgICAgbUJsZW5kUGFpbnQgPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgICAgIG1CbGVuZFBhaW50LnNldENvbG9yRmlsdGVyKG5ldyBQb3J0ZXJEdWZmQ29sb3JGaWx0ZXIoMCwgUG9ydGVyRHVmZi5Nb2RlLlNSQ19PVkVSKSk7CisKKyAgICAgICAgICAgIE9iamVjdEFuaW1hdG9yIHNhdCA9IE9iamVjdEFuaW1hdG9yLm9mRmxvYXQodGhpcywgInNhdHVyYXRpb24iLCAxLjBmKTsKKyAgICAgICAgICAgIHNhdC5zZXREdXJhdGlvbigxMDAwKTsKKyAgICAgICAgICAgIHNhdC5zZXRSZXBlYXRDb3VudChPYmplY3RBbmltYXRvci5JTkZJTklURSk7CisgICAgICAgICAgICBzYXQuc2V0UmVwZWF0TW9kZShPYmplY3RBbmltYXRvci5SRVZFUlNFKTsKKyAgICAgICAgICAgIHNhdC5zdGFydCgpOworCisgICAgICAgICAgICBPYmplY3RBbmltYXRvciBsaWdodCA9IE9iamVjdEFuaW1hdG9yLm9mSW50KHRoaXMsICJsaWdodEFkZCIsIDB4MDAxMDEwMzApOworICAgICAgICAgICAgbGlnaHQuc2V0RXZhbHVhdG9yKG5ldyBBcmdiRXZhbHVhdG9yKCkpOworICAgICAgICAgICAgbGlnaHQuc2V0RHVyYXRpb24oMTAwMCk7CisgICAgICAgICAgICBsaWdodC5zZXRSZXBlYXRDb3VudChPYmplY3RBbmltYXRvci5JTkZJTklURSk7CisgICAgICAgICAgICBsaWdodC5zZXRSZXBlYXRNb2RlKE9iamVjdEFuaW1hdG9yLlJFVkVSU0UpOworICAgICAgICAgICAgbGlnaHQuc3RhcnQoKTsKKworICAgICAgICAgICAgT2JqZWN0QW5pbWF0b3IgbXVsdCA9IE9iamVjdEFuaW1hdG9yLm9mSW50KHRoaXMsICJsaWdodE11bCIsIDB4MDA2MGZmZmYpOworICAgICAgICAgICAgbXVsdC5zZXRFdmFsdWF0b3IobmV3IEFyZ2JFdmFsdWF0b3IoKSk7CisgICAgICAgICAgICBtdWx0LnNldER1cmF0aW9uKDEwMDApOworICAgICAgICAgICAgbXVsdC5zZXRSZXBlYXRDb3VudChPYmplY3RBbmltYXRvci5JTkZJTklURSk7CisgICAgICAgICAgICBtdWx0LnNldFJlcGVhdE1vZGUoT2JqZWN0QW5pbWF0b3IuUkVWRVJTRSk7CisgICAgICAgICAgICBtdWx0LnN0YXJ0KCk7CisKKyAgICAgICAgICAgIE9iamVjdEFuaW1hdG9yIGNvbG9yID0gT2JqZWN0QW5pbWF0b3Iub2ZJbnQodGhpcywgInBvcnRlckR1ZmZDb2xvciIsIDB4N2Y5OTAwNDApOworICAgICAgICAgICAgY29sb3Iuc2V0RXZhbHVhdG9yKG5ldyBBcmdiRXZhbHVhdG9yKCkpOworICAgICAgICAgICAgY29sb3Iuc2V0RHVyYXRpb24oMTAwMCk7CisgICAgICAgICAgICBjb2xvci5zZXRSZXBlYXRDb3VudChPYmplY3RBbmltYXRvci5JTkZJTklURSk7CisgICAgICAgICAgICBjb2xvci5zZXRSZXBlYXRNb2RlKE9iamVjdEFuaW1hdG9yLlJFVkVSU0UpOworICAgICAgICAgICAgY29sb3Iuc3RhcnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0UG9ydGVyRHVmZkNvbG9yKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Qb3J0ZXJEdWZmQ29sb3I7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0ZXJEdWZmQ29sb3IoaW50IHBvcnRlckR1ZmZDb2xvcikgeworICAgICAgICAgICAgbVBvcnRlckR1ZmZDb2xvciA9IHBvcnRlckR1ZmZDb2xvcjsKKyAgICAgICAgICAgIGZpbmFsIFBvcnRlckR1ZmZDb2xvckZpbHRlciBmaWx0ZXIgPQorICAgICAgICAgICAgICAgICAgICAoUG9ydGVyRHVmZkNvbG9yRmlsdGVyKSBtQmxlbmRQYWludC5nZXRDb2xvckZpbHRlcigpOworICAgICAgICAgICAgZmlsdGVyLnNldENvbG9yKG1Qb3J0ZXJEdWZmQ29sb3IpOworICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRMaWdodEFkZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtTGlnaHRBZGQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRMaWdodEFkZChpbnQgbGlnaHRBZGQpIHsKKyAgICAgICAgICAgIG1MaWdodEFkZCA9IGxpZ2h0QWRkOworICAgICAgICAgICAgZmluYWwgTGlnaHRpbmdDb2xvckZpbHRlciBmaWx0ZXIgPQorICAgICAgICAgICAgICAgICAgICAoTGlnaHRpbmdDb2xvckZpbHRlcikgbUxpZ2h0aW5nUGFpbnQuZ2V0Q29sb3JGaWx0ZXIoKTsKKyAgICAgICAgICAgIGZpbHRlci5zZXRDb2xvckFkZChsaWdodEFkZCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldExpZ2h0TXVsKCkgeworICAgICAgICAgICAgcmV0dXJuIG1MaWdodEFkZDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldExpZ2h0TXVsKGludCBsaWdodE11bCkgeworICAgICAgICAgICAgbUxpZ2h0TXVsID0gbGlnaHRNdWw7CisgICAgICAgICAgICBmaW5hbCBMaWdodGluZ0NvbG9yRmlsdGVyIGZpbHRlciA9CisgICAgICAgICAgICAgICAgICAgIChMaWdodGluZ0NvbG9yRmlsdGVyKSBtTGlnaHRpbmdQYWludC5nZXRDb2xvckZpbHRlcigpOworICAgICAgICAgICAgZmlsdGVyLnNldENvbG9yTXVsdGlwbHkobGlnaHRNdWwpOworICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0U2F0dXJhdGlvbihmbG9hdCBzYXR1cmF0aW9uKSB7CisgICAgICAgICAgICBtU2F0dXJhdGlvbiA9IHNhdHVyYXRpb247CisgICAgICAgICAgICBmaW5hbCBDb2xvck1hdHJpeENvbG9yRmlsdGVyIGZpbHRlciA9CisgICAgICAgICAgICAgICAgICAgIChDb2xvck1hdHJpeENvbG9yRmlsdGVyKSBtQ29sb3JNYXRyaXhQYWludC5nZXRDb2xvckZpbHRlcigpOworICAgICAgICAgICAgZmluYWwgQ29sb3JNYXRyaXggbSA9IGZpbHRlci5nZXRDb2xvck1hdHJpeCgpOworICAgICAgICAgICAgbS5zZXRTYXR1cmF0aW9uKHNhdHVyYXRpb24pOworICAgICAgICAgICAgZmlsdGVyLnNldENvbG9yTWF0cml4KG0pOworICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGZsb2F0IGdldFNhdHVyYXRpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gbVNhdHVyYXRpb247CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgICAgIHN1cGVyLm9uRHJhdyhjYW52YXMpOworCisgICAgICAgICAgICBjYW52YXMuZHJhd0FSR0IoMjU1LCAyNTUsIDI1NSwgMjU1KTsKKworICAgICAgICAgICAgY2FudmFzLnNhdmUoKTsKKyAgICAgICAgICAgIGNhbnZhcy50cmFuc2xhdGUoMTIwLjBmLCA1MC4wZik7CisgICAgICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChtQml0bWFwMSwgMC4wZiwgMC4wZiwgbUNvbG9yTWF0cml4UGFpbnQpOworCisgICAgICAgICAgICBjYW52YXMudHJhbnNsYXRlKDAuMGYsIDUwLjBmICsgbUJpdG1hcDEuZ2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAobUJpdG1hcDEsIDAuMGYsIDAuMGYsIG1MaWdodGluZ1BhaW50KTsKKworICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgwLjBmLCA1MC4wZiArIG1CaXRtYXAxLmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKG1CaXRtYXAxLCAwLjBmLCAwLjBmLCBtQmxlbmRQYWludCk7CisgICAgICAgICAgICBjYW52YXMucmVzdG9yZSgpOworCisgICAgICAgICAgICBjYW52YXMuc2F2ZSgpOworICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgxMjAuMGYgKyBtQml0bWFwMS5nZXRXaWR0aCgpICsgMTIwLjBmLCA1MC4wZik7CisgICAgICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChtQml0bWFwMiwgMC4wZiwgMC4wZiwgbUNvbG9yTWF0cml4UGFpbnQpOworCisgICAgICAgICAgICBjYW52YXMudHJhbnNsYXRlKDAuMGYsIDUwLjBmICsgbUJpdG1hcDIuZ2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAobUJpdG1hcDIsIDAuMGYsIDAuMGYsIG1MaWdodGluZ1BhaW50KTsKKworICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgwLjBmLCA1MC4wZiArIG1CaXRtYXAyLmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKG1CaXRtYXAyLCAwLjBmLCAwLjBmLCBtQmxlbmRQYWludCk7CisgICAgICAgICAgICBjYW52YXMucmVzdG9yZSgpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvSHdBY2NlbGVyYXRpb25UZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2h3dWkvUHJvamVjdGlvbkFjdGl2aXR5LmphdmEgYi90ZXN0cy9Id0FjY2VsZXJhdGlvblRlc3Qvc3JjL2NvbS9hbmRyb2lkL3Rlc3QvaHd1aS9Qcm9qZWN0aW9uQWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWE2ODAzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvSHdBY2NlbGVyYXRpb25UZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2h3dWkvUHJvamVjdGlvbkFjdGl2aXR5LmphdmEKQEAgLTAsMCArMSwxMTAgQEAKK3BhY2thZ2UgY29tLmFuZHJvaWQudGVzdC5od3VpOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3RGOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheUxpc3Q7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OworCitwdWJsaWMgY2xhc3MgUHJvamVjdGlvbkFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgeworICAgIC8qKgorICAgICAqIFRoZSBjb250ZW50IGZyb20gdGhpcyB2aWV3IHNob3VsZCBiZSBwcm9qZWN0ZWQgaW4gYmV0d2VlbiB0aGUgYmFja2dyb3VuZCBvZiB0aGUKKyAgICAgKiBQcm9qZWN0ZWVMYXlvdXQgYW5kIGl0cyBjaGlsZHJlbiwgdW5jbGlwcGVkLgorICAgICAqCisgICAgICogVGhpcyB2aWV3IGRvZXNuJ3QgY2xpcCB0byBpdHMgYm91bmRzIChiZWNhdXNlIGl0cyBwYXJlbnQgaGFzIGNsaXBDaGlsZHJlbj1mYWxzZSkgc28gdGhhdAorICAgICAqIHdoZW4gaXQgaXMgcHJvamVjdGVkIG9udG8gdGhlIFByb2plY3RlZUxheW91dCwgaXQgZHJhd3Mgb3V0c2lkZSBpdHMgdmlldyBib3VuZHMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBQcm9qZWN0ZWRWaWV3IGV4dGVuZHMgVmlldyB7CisgICAgICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbVBhaW50ID0gbmV3IFBhaW50KCk7CisgICAgICAgIHByaXZhdGUgZmluYWwgUmVjdEYgbVJlY3RGID0gbmV3IFJlY3RGKCk7CisKKyAgICAgICAgcHVibGljIFByb2plY3RlZFZpZXcoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFByb2plY3RlZFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKKyAgICAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFByb2plY3RlZFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIpOworCisgICAgICAgICAgICBzZXRPbkNsaWNrTGlzdGVuZXIobmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIHRvZ2dsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgICAgIHRvZ2dsZSA9ICF0b2dnbGU7CisgICAgICAgICAgICAgICAgICAgIHNldFByb2plY3QodG9nZ2xlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBzZXRQcm9qZWN0KGJvb2xlYW4gdmFsdWUpIHsKKyAgICAgICAgICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0ID0gZ2V0RGlzcGxheUxpc3QoKTsKKyAgICAgICAgICAgIGlmIChkaXNwbGF5TGlzdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZGlzcGxheUxpc3Quc2V0UHJvamVjdFRvQ29udGFpbmVkVm9sdW1lKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE5PVEU6IHdlIGNhbid0IGludmFsaWRhdGUgUHJvamVjdGVkVmlldyBmb3IgdGhlIHJlZHJhdyBiZWNhdXNlOgorICAgICAgICAgICAgLy8gMSkgdGhlIHZpZXcgd29uJ3QgcHJlc2VydmUgZGlzcGxheUxpc3QgcHJvcGVydGllcyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dAorICAgICAgICAgICAgLy8gMikgdGhlIGRhbWFnZSByZWN0IHdvbid0IGJlIGJpZyBlbm91Z2gKKworICAgICAgICAgICAgLy8gaW5zdGVhZCwgdHdpZGRsZSBwcm9wZXJ0aWVzIG9uIHRoZSBjb250YWluZXIsIHNvIHRoYXQgZW5vdWdoIGFyZWEgb2YgdGhlIHNjcmVlbiBpcworICAgICAgICAgICAgLy8gcmVkcmF3biB3aXRob3V0IHJlcmVjb3JkaW5nIGFueSBEaXNwbGF5TGlzdHMuCisgICAgICAgICAgICBjb250YWluZXIuc2V0VHJhbnNsYXRpb25YKDEwMGYpOworICAgICAgICAgICAgY29udGFpbmVyLnNldFRyYW5zbGF0aW9uWCgwLjBmKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkRyYXcoQ2FudmFzIGNhbnZhcykgeworICAgICAgICAgICAgLy8gVE9ETzogc2V0IHByb2plY3Rpb24gZmxhZworICAgICAgICAgICAgZmluYWwgaW50IHcgPSBnZXRXaWR0aCgpOworICAgICAgICAgICAgZmluYWwgaW50IGggPSBnZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIG1SZWN0Ri5zZXQoMCwgLWgsIHcsIDIgKiBoKTsKKyAgICAgICAgICAgIG1QYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgICAgICBtUGFpbnQuc2V0Q29sb3IoMHg1ZjAwZmYwMCk7CisgICAgICAgICAgICBjYW52YXMuZHJhd092YWwobVJlY3RGLCBtUGFpbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBQcm9qZWN0ZWVMYXlvdXQgZXh0ZW5kcyBMaW5lYXJMYXlvdXQgeworICAgICAgICBwcml2YXRlIGZpbmFsIFBhaW50IG1QYWludCA9IG5ldyBQYWludCgpOworICAgICAgICBwcml2YXRlIGZpbmFsIFJlY3RGIG1SZWN0RiA9IG5ldyBSZWN0RigpOworCisgICAgICAgIHB1YmxpYyBQcm9qZWN0ZWVMYXlvdXQoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFByb2plY3RlZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgeworICAgICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgUHJvamVjdGVlTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgZGlzcGF0Y2hEcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgICAgIGNhbnZhcy5zYXZlKDB4MjApOyAvLyBzZWNyZXQgc2F2ZSBmbGFnCisgICAgICAgICAgICBtUmVjdEYuc2V0KDAsIDAsIGdldFdpZHRoKCksIGdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIG1QYWludC5zZXRDb2xvcigweDVmMDAwMDAwKTsKKyAgICAgICAgICAgIGNhbnZhcy5kcmF3T3ZhbChtUmVjdEYsIG1QYWludCk7CisgICAgICAgICAgICBjYW52YXMucmVzdG9yZSgpOworICAgICAgICAgICAgc3VwZXIuZGlzcGF0Y2hEcmF3KGNhbnZhcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgVmlldyBjb250YWluZXI7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LnByb2plY3Rpb24pOworICAgICAgICBjb250YWluZXIgPSBmaW5kVmlld0J5SWQoUi5pZC5jb250YWluZXIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvQW5kcm9pZC5tayBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGNiYTJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMTggQEAKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKKyMgT25seSBjb21waWxlIHNvdXJjZSBqYXZhIGZpbGVzIGluIHRoaXMgYXBrLgorTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlciwgc3JjKQorCitMT0NBTF9QQUNLQUdFX05BTUUgOj0gUmVuZGVyVGhyZWFkVGVzdAorCitMT0NBTF9TVEFUSUNfSkFWQV9MSUJSQVJJRVMgKz0gYW5kcm9pZC1jb21tb24KKworTE9DQUxfUFJPR1VBUkRfRU5BQkxFRCA6PSBkaXNhYmxlZAorCitpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKKworIyBVc2UgdGhlIGZvbGxvd2luZyBpbmNsdWRlIHRvIG1ha2Ugb3VyIHRlc3QgYXBrLgoraW5jbHVkZSAkKGNhbGwgYWxsLW1ha2VmaWxlcy11bmRlciwkKExPQ0FMX1BBVEgpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NmNmY2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgcGFja2FnZT0iY29tLmV4YW1wbGUucmVuZGVydGhyZWFkIgorICAgIGFuZHJvaWQ6dmVyc2lvbkNvZGU9IjEiCisgICAgYW5kcm9pZDp2ZXJzaW9uTmFtZT0iMS4wIiA+CisKKyAgICA8dXNlcy1zZGsKKyAgICAgICAgYW5kcm9pZDptaW5TZGtWZXJzaW9uPSIxOCIKKyAgICAgICAgYW5kcm9pZDp0YXJnZXRTZGtWZXJzaW9uPSIxOCIgLz4KKworICAgIDxhcHBsaWNhdGlvbgorICAgICAgICBhbmRyb2lkOmFsbG93QmFja3VwPSJ0cnVlIgorICAgICAgICBhbmRyb2lkOmljb249IkBkcmF3YWJsZS9pY19sYXVuY2hlciIKKyAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hcHBfbmFtZSIKKyAgICAgICAgYW5kcm9pZDp0aGVtZT0iQHN0eWxlL0FwcFRoZW1lIiA+CisgICAgICAgIDxhY3Rpdml0eQorICAgICAgICAgICAgYW5kcm9pZDpuYW1lPSIuTWFpbkFjdGl2aXR5IgorICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hcHBfbmFtZSIgPgorICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgorCisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5TdWJBY3Rpdml0eSIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBzdHlsZS9BcHBUaGVtZS5UcmFuc3BhcmVudCIgLz4KKyAgICA8L2FwcGxpY2F0aW9uPgorCis8L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvZHJhd2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5jaGVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE0NDJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvZHJhd2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvZHJhd2FibGUtbWRwaS9pY19sYXVuY2hlci5wbmcgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5jaGVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTkwNDdkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvZHJhd2FibGUtbWRwaS9pY19sYXVuY2hlci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvZHJhd2FibGUteGhkcGkvaWNfbGF1bmNoZXIucG5nIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvZHJhd2FibGUteGhkcGkvaWNfbGF1bmNoZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYzZkNzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvZHJhd2FibGUteGhkcGkvc3RhcnJ5X25pZ2h0X2JnLmpwZyBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL2RyYXdhYmxlLXhoZHBpL3N0YXJyeV9uaWdodF9iZy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1MjMyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL2RyYXdhYmxlLXhoZHBpL3N0YXJyeV9uaWdodF9iZy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvbGF5b3V0L2FjdGl2aXR5X21haW4ueG1sIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvbGF5b3V0L2FjdGl2aXR5X21haW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZDU0NTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9sYXlvdXQvYWN0aXZpdHlfbWFpbi54bWwKQEAgLTAsMCArMSwxMiBAQAorPEZyYW1lTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp0b29scz0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vdG9vbHMiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICB0b29sczpjb250ZXh0PSIuTWFpbkFjdGl2aXR5IiA+CisKKyAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvbGlzdCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6ZGl2aWRlcj0iQG51bGwiIC8+CisKKzwvRnJhbWVMYXlvdXQ+CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9sYXlvdXQvYWN0aXZpdHlfc3ViLnhtbCBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL2xheW91dC9hY3Rpdml0eV9zdWIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxM2NlZTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9sYXlvdXQvYWN0aXZpdHlfc3ViLnhtbApAQCAtMCwwICsxLDM5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPEZyYW1lTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IiA+CisKKyAgICA8VmlldworICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2JnX2NvbnRhaW5lciIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3N0YXJyeV9uaWdodF9iZyIgLz4KKworICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9teV9jb250YWluZXIiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgPgorCisgICAgICAgIDxWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2Zyb21fbGVmdCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjQ4ZGlwIgorICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjNzAwMEZGMDAiIC8+CisKKyAgICAgICAgPFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZnJvbV9yaWdodCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjgwZGlwIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgorICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjOTBGRjAwMDAiIC8+CisKKyAgICAgICAgPFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZnJvbV9sZWZ0IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhkaXAiCisgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiM3MDAwRkYwMCIgLz4KKyAgICA8L0xpbmVhckxheW91dD4KKworPC9GcmFtZUxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9sYXlvdXQvaXRlbV9sYXlvdXQueG1sIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvbGF5b3V0L2l0ZW1fbGF5b3V0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmRiMWFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvbGF5b3V0L2l0ZW1fbGF5b3V0LnhtbApAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFRleHRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC90ZXh0MSIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VMaXN0SXRlbVNtYWxsIgorICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIgorICAgIGFuZHJvaWQ6cGFkZGluZ1N0YXJ0PSI/YW5kcm9pZDphdHRyL2xpc3RQcmVmZXJyZWRJdGVtUGFkZGluZ1N0YXJ0IgorICAgIGFuZHJvaWQ6cGFkZGluZ0VuZD0iP2FuZHJvaWQ6YXR0ci9saXN0UHJlZmVycmVkSXRlbVBhZGRpbmdFbmQiCisgICAgYW5kcm9pZDptaW5IZWlnaHQ9Ij9hbmRyb2lkOmF0dHIvbGlzdFByZWZlcnJlZEl0ZW1IZWlnaHRTbWFsbCIKKyAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiMzM2I1ZTUiCisvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzgyZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxyZXNvdXJjZXM+CisKKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIj5SZW5kZXIgVGhyZWFkPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fc2V0dGluZ3MiPlNldHRpbmdzPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWxsb193b3JsZCI+SGVsbG8gd29ybGQhPC9zdHJpbmc+CisKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvdmFsdWVzL3N0eWxlcy54bWwgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy92YWx1ZXMvc3R5bGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmI1ZDZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvdmFsdWVzL3N0eWxlcy54bWwKQEAgLTAsMCArMSwxMSBAQAorPHJlc291cmNlcz4KKyAgICA8IS0tIEFwcGxpY2F0aW9uIHRoZW1lLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iQXBwVGhlbWUiIHBhcmVudD0iYW5kcm9pZDpUaGVtZS5Ib2xvLkxpZ2h0Ij4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IkFwcFRoZW1lLlRyYW5zcGFyZW50Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dJc1RyYW5zbHVjZW50Ij50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0JhY2tncm91bmQiPkBhbmRyb2lkOmNvbG9yL3RyYW5zcGFyZW50PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9zcmMvY29tL2V4YW1wbGUvcmVuZGVydGhyZWFkL01haW5BY3Rpdml0eS5qYXZhIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9zcmMvY29tL2V4YW1wbGUvcmVuZGVydGhyZWFkL01haW5BY3Rpdml0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWFiYTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3NyYy9jb20vZXhhbXBsZS9yZW5kZXJ0aHJlYWQvTWFpbkFjdGl2aXR5LmphdmEKQEAgLTAsMCArMSwxNTggQEAKKworcGFja2FnZSBjb20uZXhhbXBsZS5yZW5kZXJ0aHJlYWQ7CisKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5UaW1lSW50ZXJwb2xhdG9yOworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXlMaXN0OworaW1wb3J0IGFuZHJvaWQudmlldy5IYXJkd2FyZVJlbmRlcmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5UaHJlYWRlZFJlbmRlcmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uQWNjZWxlcmF0ZURlY2VsZXJhdGVJbnRlcnBvbGF0b3I7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXcuT25JdGVtQ2xpY2tMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5TaW1wbGVBZGFwdGVyOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitwdWJsaWMgY2xhc3MgTWFpbkFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgaW1wbGVtZW50cyBPbkl0ZW1DbGlja0xpc3RlbmVyIHsKKworICAgIHN0YXRpYyBmaW5hbCBpbnQgRFVSQVRJT04gPSA0MDA7CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9OQU1FID0gIm5hbWUiOworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0NMQVNTID0gImNsYXp6IjsKKworICAgIHN0YXRpYyBNYXA8U3RyaW5nLD8+IG1ha2UoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgTWFwPFN0cmluZyxPYmplY3Q+IHJldCA9IG5ldyBIYXNoTWFwPFN0cmluZyxPYmplY3Q+KCk7CisgICAgICAgIHJldC5wdXQoS0VZX05BTUUsIG5hbWUpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJzZXJpYWwiKQorICAgIHN0YXRpYyBmaW5hbCBBcnJheUxpc3Q8TWFwPFN0cmluZyw/Pj4gU0FNUExFUyA9IG5ldyBBcnJheUxpc3Q8TWFwPFN0cmluZyw/Pj4oKSB7eworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IDI1OyBpKyspIHsKKyAgICAgICAgICAgIGFkZChtYWtlKCJMaXN0IEl0ZW06ICIgKyBpKSk7CisgICAgICAgIH0KKyAgICB9fTsKKworICAgIEhhbmRsZXIgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworICAgICAgICBIYXJkd2FyZVJlbmRlcmVyLnNVc2VSZW5kZXJUaHJlYWQgPSB0cnVlOworICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5hY3Rpdml0eV9tYWluKTsKKyAgICAgICAgTGlzdFZpZXcgbHYgPSAoTGlzdFZpZXcpIGZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQubGlzdCk7CisgICAgICAgIGx2LnNldERyYXdTZWxlY3Rvck9uVG9wKHRydWUpOworICAgICAgICBsdi5zZXRBZGFwdGVyKG5ldyBTaW1wbGVBZGFwdGVyKHRoaXMsIFNBTVBMRVMsCisgICAgICAgICAgICAgICAgUi5sYXlvdXQuaXRlbV9sYXlvdXQsIG5ldyBTdHJpbmdbXSB7IEtFWV9OQU1FIH0sCisgICAgICAgICAgICAgICAgbmV3IGludFtdIHsgYW5kcm9pZC5SLmlkLnRleHQxIH0pKTsKKyAgICAgICAgbHYuc2V0T25JdGVtQ2xpY2tMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZ2V0QWN0aW9uQmFyKCkuc2V0VGl0bGUoIk1haW5BY3Rpdml0eSIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgeworICAgICAgICBzdXBlci5vblJlc3VtZSgpOworICAgICAgICBMaXN0VmlldyBsdiA9IChMaXN0VmlldykgZmluZFZpZXdCeUlkKGFuZHJvaWQuUi5pZC5saXN0KTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsdi5nZXRDaGlsZENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgbHYuZ2V0Q2hpbGRBdChpKS5hbmltYXRlKCkudHJhbnNsYXRpb25ZKDApLnNldER1cmF0aW9uKERVUkFUSU9OKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIERpc3BsYXlMaXN0QW5pbWF0b3IgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUaW1lSW50ZXJwb2xhdG9yIHNEZWZhdWx0SW50ZXJwb2xhdG9yID0KKyAgICAgICAgICAgICAgICBuZXcgQWNjZWxlcmF0ZURlY2VsZXJhdGVJbnRlcnBvbGF0b3IoKTsKKworICAgICAgICBEaXNwbGF5TGlzdCBtRGlzcGxheUxpc3Q7CisgICAgICAgIGZsb2F0IG1Gcm9tVmFsdWU7CisgICAgICAgIGZsb2F0IG1EZWx0YTsKKyAgICAgICAgbG9uZyBtRHVyYXRpb24gPSBEVVJBVElPTiAqIDI7CisgICAgICAgIGxvbmcgbVN0YXJ0VGltZTsKKworICAgICAgICBEaXNwbGF5TGlzdEFuaW1hdG9yKFZpZXcgdmlldywgZmxvYXQgdHJhbnNsYXRlWEJ5KSB7CisgICAgICAgICAgICBtRGVsdGEgPSB0cmFuc2xhdGVYQnk7CisgICAgICAgICAgICBtRnJvbVZhbHVlID0gdmlldy5nZXRUcmFuc2xhdGlvblkoKTsKKyAgICAgICAgICAgIG1EaXNwbGF5TGlzdCA9IHZpZXcuZ2V0RGlzcGxheUxpc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gYW5pbWF0ZShsb25nIGN1cnJlbnRUaW1lKSB7CisgICAgICAgICAgICBpZiAobVN0YXJ0VGltZSA9PSAwKSBtU3RhcnRUaW1lID0gY3VycmVudFRpbWU7CisKKyAgICAgICAgICAgIGZsb2F0IGZyYWN0aW9uID0gKGZsb2F0KShjdXJyZW50VGltZSAtIG1TdGFydFRpbWUpIC8gbUR1cmF0aW9uOworICAgICAgICAgICAgaWYgKGZyYWN0aW9uID4gMSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZyYWN0aW9uID0gc0RlZmF1bHRJbnRlcnBvbGF0b3IuZ2V0SW50ZXJwb2xhdGlvbihmcmFjdGlvbik7CisgICAgICAgICAgICBmbG9hdCB0cmFuc2xhdGlvbiA9IG1Gcm9tVmFsdWUgKyAobURlbHRhICogZnJhY3Rpb24pOworICAgICAgICAgICAgbURpc3BsYXlMaXN0LnNldFRyYW5zbGF0aW9uWSh0cmFuc2xhdGlvbik7CisgICAgICAgICAgICByZXR1cm4gZnJhY3Rpb24gPCAxZjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEFuaW1hdGlvbkV4ZWN1dG9yIGltcGxlbWVudHMgUnVubmFibGUgeworICAgICAgICBEaXNwbGF5TGlzdEFuaW1hdG9yW10gbUFuaW1hdGlvbnM7CisgICAgICAgIFRocmVhZGVkUmVuZGVyZXIgbVJlbmRlcmVyOworCisgICAgICAgIEFuaW1hdGlvbkV4ZWN1dG9yKFRocmVhZGVkUmVuZGVyZXIgcmVuZGVyZXIsIERpc3BsYXlMaXN0QW5pbWF0b3JbXSBhbmltYXRpb25zKSB7CisgICAgICAgICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKKyAgICAgICAgICAgIG1BbmltYXRpb25zID0gYW5pbWF0aW9uczsKKyAgICAgICAgICAgIFRocmVhZGVkUmVuZGVyZXIucG9zdFRvUmVuZGVyVGhyZWFkKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIGJvb2xlYW4gaGFzTW9yZSA9IGZhbHNlOworICAgICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgIGZvciAoRGlzcGxheUxpc3RBbmltYXRvciBhbmltYXRvciA6IG1BbmltYXRpb25zKSB7CisgICAgICAgICAgICAgICAgaGFzTW9yZSB8PSBhbmltYXRvci5hbmltYXRlKG5vdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtUmVuZGVyZXIucmVwZWF0TGFzdERyYXcoKTsKKyAgICAgICAgICAgIGlmIChoYXNNb3JlKSB7CisgICAgICAgICAgICAgICAgVGhyZWFkZWRSZW5kZXJlci5wb3N0VG9SZW5kZXJUaHJlYWQodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uSXRlbUNsaWNrKGZpbmFsIEFkYXB0ZXJWaWV3PD8+IGFkYXB0ZXJWaWV3LCBWaWV3IGNsaWNrZWRWaWV3LAorICAgICAgICAgICAgaW50IGNsaWNrZWRQb3NpdGlvbiwgbG9uZyBjbGlja2VkSWQpIHsKKyAgICAgICAgaW50IHRvcFBvc2l0aW9uID0gYWRhcHRlclZpZXcuZ2V0Rmlyc3RWaXNpYmxlUG9zaXRpb24oKTsKKyAgICAgICAgaW50IGR5ID0gYWRhcHRlclZpZXcuZ2V0SGVpZ2h0KCk7CisgICAgICAgIGZpbmFsIERpc3BsYXlMaXN0QW5pbWF0b3JbXSBhbmltYXRvcnMgPSBuZXcgRGlzcGxheUxpc3RBbmltYXRvclthZGFwdGVyVmlldy5nZXRDaGlsZENvdW50KCldOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFkYXB0ZXJWaWV3LmdldENoaWxkQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBpbnQgcG9zID0gdG9wUG9zaXRpb24gKyBpOworICAgICAgICAgICAgVmlldyBjaGlsZCA9IGFkYXB0ZXJWaWV3LmdldENoaWxkQXQoaSk7CisgICAgICAgICAgICBmbG9hdCBkZWx0YSA9IChwb3MgLSBjbGlja2VkUG9zaXRpb24pICogMS4xZjsKKyAgICAgICAgICAgIGlmIChkZWx0YSA9PSAwKSBkZWx0YSA9IC0xOworICAgICAgICAgICAgYW5pbWF0b3JzW2ldID0gbmV3IERpc3BsYXlMaXN0QW5pbWF0b3IoY2hpbGQsIGR5ICogZGVsdGEpOworICAgICAgICB9CisgICAgICAgIGFkYXB0ZXJWaWV3LmludmFsaWRhdGUoKTsKKyAgICAgICAgYWRhcHRlclZpZXcucG9zdChuZXcgUnVubmFibGUoKSB7CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIG5ldyBBbmltYXRpb25FeGVjdXRvcigoVGhyZWFkZWRSZW5kZXJlcikgYWRhcHRlclZpZXcuZ2V0SGFyZHdhcmVSZW5kZXJlcigpLCBhbmltYXRvcnMpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgLy9tSGFuZGxlci5wb3N0RGVsYXllZChtTGF1bmNoQWN0aXZpdHksIChsb25nKSAoRFVSQVRJT04gKiAuNCkpOworICAgICAgICBtTGF1bmNoQWN0aXZpdHkucnVuKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBSdW5uYWJsZSBtTGF1bmNoQWN0aXZpdHkgPSBuZXcgUnVubmFibGUoKSB7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIHN0YXJ0QWN0aXZpdHkobmV3IEludGVudChNYWluQWN0aXZpdHkudGhpcywgU3ViQWN0aXZpdHkuY2xhc3MpKTsKKyAgICAgICAgICAgIG92ZXJyaWRlUGVuZGluZ1RyYW5zaXRpb24oMCwgMCk7CisgICAgICAgIH0KKyAgICB9OworCit9CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3NyYy9jb20vZXhhbXBsZS9yZW5kZXJ0aHJlYWQvU3ViQWN0aXZpdHkuamF2YSBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3Qvc3JjL2NvbS9leGFtcGxlL3JlbmRlcnRocmVhZC9TdWJBY3Rpdml0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MmNiYWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3NyYy9jb20vZXhhbXBsZS9yZW5kZXJ0aHJlYWQvU3ViQWN0aXZpdHkuamF2YQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZXhhbXBsZS5yZW5kZXJ0aHJlYWQ7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworCitwdWJsaWMgY2xhc3MgU3ViQWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworICAgICAgICBsb25nIGJlZm9yZSA9IFN5c3RlbUNsb2NrLmN1cnJlbnRUaHJlYWRUaW1lTWlsbGlzKCk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LmFjdGl2aXR5X3N1Yik7CisgICAgICAgIGdldEFjdGlvbkJhcigpLnNldFRpdGxlKCJTdWJBY3Rpdml0eSIpOworICAgICAgICAvLyBTaW11bGF0ZSBiZWluZyBhIHJlYWwgYXBwIQorICAgICAgICB3aGlsZSAoU3lzdGVtQ2xvY2suY3VycmVudFRocmVhZFRpbWVNaWxsaXMoKSAtIGJlZm9yZSA8IDEwMCkgeworICAgICAgICAgICAgVmlldyB2ID0gbmV3IFZpZXcodGhpcywgbnVsbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblJlc3VtZSgpIHsKKyAgICAgICAgc3VwZXIub25SZXN1bWUoKTsKKyAgICAgICAgVmlld0dyb3VwIGNvbnRhaW5lciA9IChWaWV3R3JvdXApIGZpbmRWaWV3QnlJZChSLmlkLm15X2NvbnRhaW5lcik7CisgICAgICAgIGludCBkeCA9IGdldFdpbmRvd01hbmFnZXIoKS5nZXREZWZhdWx0RGlzcGxheSgpLmdldFdpZHRoKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29udGFpbmVyLmdldENoaWxkQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBWaWV3IGNoaWxkID0gY29udGFpbmVyLmdldENoaWxkQXQoaSk7CisgICAgICAgICAgICBpbnQgZGlyID0gY2hpbGQuZ2V0SWQoKSA9PSBSLmlkLmZyb21fbGVmdCA/IDEgOiAtMTsKKyAgICAgICAgICAgIGNoaWxkLnNldFRyYW5zbGF0aW9uWChkeCAqIGRpcik7CisgICAgICAgICAgICBjaGlsZC5hbmltYXRlKCkudHJhbnNsYXRpb25YKDApLnNldER1cmF0aW9uKE1haW5BY3Rpdml0eS5EVVJBVElPTik7CisgICAgICAgIH0KKyAgICAgICAgVmlldyBiZyA9IGZpbmRWaWV3QnlJZChSLmlkLmJnX2NvbnRhaW5lcik7CisgICAgICAgIGJnLnNldEFscGhhKDBmKTsKKyAgICAgICAgYmcuYW5pbWF0ZSgpLmFscGhhKDFmKS5zZXREdXJhdGlvbihNYWluQWN0aXZpdHkuRFVSQVRJT04pOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQmFja1ByZXNzZWQoKSB7CisgICAgICAgIHN1cGVyLm9uQmFja1ByZXNzZWQoKTsKKyAgICAgICAgb3ZlcnJpZGVQZW5kaW5nVHJhbnNpdGlvbigwLCAwKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9TbW9rZVRlc3QvdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3Rlc3RzL1Ntb2tlVGVzdC90ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCmluZGV4IGNhZDM3YzUuLmYxYTBhNGMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL1Ntb2tlVGVzdC90ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL3Rlc3RzL1Ntb2tlVGVzdC90ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0yNywxNSArMjcsNiBAQAogICAgIDwvYXBwbGljYXRpb24+CiAKICAgICA8IS0tCi0gICAgVGhpcyBkZWNsYXJlcyB0aGF0IHRoaXMgYXBwIHVzZXMgdGhlIGluc3RydW1lbnRhdGlvbiB0ZXN0IHJ1bm5lciB0YXJnZXRpbmcgdGhlIHBhY2thZ2Ugb2YKLSAgICBjb20uYW5kcm9pZC5zbW9rZXRlc3QuICBUbyBydW4gdGhlIHRlc3RzIHVzZSB0aGUgY29tbWFuZDoKLSAgICBgYWRiIHNoZWxsIGFtIGluc3RydW1lbnQgLXcgY29tLmFuZHJvaWQuc21va2V0ZXN0LnRlc3RzL2FuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0UnVubmVyYAotICAgIC0tPgotICAgIDxpbnN0cnVtZW50YXRpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdFJ1bm5lciIKLSAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGFyZ2V0UGFja2FnZT0iY29tLmFuZHJvaWQuc21va2V0ZXN0IgotICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iU3lzdGVtIFNtb2tlIFRlc3RzIi8+Ci0KLSAgICA8IS0tCiAgICAgVGhpcyBkZWNsYXJlcyBhIG1ldGhvZCB0byBydW4gdGhlIGluc3RydW1lbnRhdGlvbiB3aXRoIGEgc3BlY2lhbCBydW5uZXIsIHdoaWNoIHdpbGwgcnVuIGVhY2gKICAgICBhcHAgYXMgYSBzZXBhcmF0ZSB0ZXN0Y2FzZS4gIFRvIGRvIHNvLCB1c2UgdGhlIGNvbW1hbmQ6CiAgICAgYGFkYiBzaGVsbCBhbSBpbnN0cnVtZW50IC13IGNvbS5hbmRyb2lkLnNtb2tldGVzdC50ZXN0cy9jb20uYW5kcm9pZC5zbW9rZXRlc3QuU21va2VUZXN0UnVubmVyYApkaWZmIC0tZ2l0IGEvdGVzdHMvU21va2VUZXN0L3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zbW9rZXRlc3QvUHJvY2Vzc0Vycm9yc1Rlc3QuamF2YSBiL3Rlc3RzL1Ntb2tlVGVzdC90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc21va2V0ZXN0L1Byb2Nlc3NFcnJvcnNUZXN0LmphdmEKaW5kZXggMDNjMjkyMy4uOTQ2Mjk5YiAxMDA2NDQKLS0tIGEvdGVzdHMvU21va2VUZXN0L3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zbW9rZXRlc3QvUHJvY2Vzc0Vycm9yc1Rlc3QuamF2YQorKysgYi90ZXN0cy9TbW9rZVRlc3QvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3Ntb2tldGVzdC9Qcm9jZXNzRXJyb3JzVGVzdC5qYXZhCkBAIC0xNTQsNiArMTU0LDExIEBACiAKICAgICAgICAgLy8gbGF1bmNoIGFwcCwgYW5kIHdhaXQgNyBzZWNvbmRzIGZvciBpdCB0byBzdGFydC9zZXR0bGUKICAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IGludGVudEZvckFjdGl2aXR5KGFwcCk7CisgICAgICAgIGlmIChpbnRlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgTG9nLmkoVEFHLCBTdHJpbmcuZm9ybWF0KCJBY3Rpdml0eSAlcy8lcyBpcyBkaXNhYmxlZCwgc2tpcHBpbmciLAorICAgICAgICAgICAgICAgICAgICBhcHAuYWN0aXZpdHlJbmZvLnBhY2thZ2VOYW1lLCBhcHAuYWN0aXZpdHlJbmZvLm5hbWUpKTsKKyAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOworICAgICAgICB9CiAgICAgICAgIGdldENvbnRleHQoKS5zdGFydEFjdGl2aXR5KGludGVudCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoYXBwTGF1bmNoV2FpdCk7CkBAIC0yMzgsMTAgKzI0MywxNiBAQAogICAgIC8qKgogICAgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiB7QGxpbmsgSW50ZW50fSB0byBydW4sIGdpdmVuIGEge0BsaW5rIFJlc29sdmVJbmZvfSBzcGVjaWZ5aW5nCiAgICAgICogYW4gYWN0aXZpdHkgdG8gYmUgbGF1bmNoZWQuCisgICAgICogCisgICAgICogQHJldHVybiB0aGUge0BsaW5rIEludGVudH0gb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgZ2l2ZW4gYXBwIGlzIGRpc2FibGVkCiAgICAgICovCi0gICAgc3RhdGljIEludGVudCBpbnRlbnRGb3JBY3Rpdml0eShSZXNvbHZlSW5mbyBhcHApIHsKKyAgICBJbnRlbnQgaW50ZW50Rm9yQWN0aXZpdHkoUmVzb2x2ZUluZm8gYXBwKSB7CiAgICAgICAgIGZpbmFsIENvbXBvbmVudE5hbWUgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudE5hbWUoYXBwLmFjdGl2aXR5SW5mby5wYWNrYWdlTmFtZSwKICAgICAgICAgICAgICAgICBhcHAuYWN0aXZpdHlJbmZvLm5hbWUpOworICAgICAgICBpZiAoZ2V0Q29udGV4dCgpLmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0Q29tcG9uZW50RW5hYmxlZFNldHRpbmcoY29tcG9uZW50KSA9PSAKKyAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5DT01QT05FTlRfRU5BQkxFRF9TVEFURV9ESVNBQkxFRCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KICAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9NQUlOKTsKICAgICAgICAgaW50ZW50LnNldENvbXBvbmVudChjb21wb25lbnQpOwogICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0spOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9BYXB0QXNzZXRzLmNwcCBiL3Rvb2xzL2FhcHQvQWFwdEFzc2V0cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZTExM2EuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9BYXB0QXNzZXRzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3MjYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0KLSNpbmNsdWRlICJBYXB0QXNzZXRzLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJNYWluLmgiCi0KLSNpbmNsdWRlIDx1dGlscy9taXNjLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU29ydGVkVmVjdG9yLmg+Ci0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGRpcmVudC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrRGVmYXVsdExvY2FsZSA9ICJkZWZhdWx0IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrV2lsZGNhcmROYW1lID0gImFueSI7Ci1zdGF0aWMgY29uc3QgY2hhcioga0Fzc2V0RGlyID0gImFzc2V0cyI7Ci1zdGF0aWMgY29uc3QgY2hhcioga1Jlc291cmNlRGlyID0gInJlcyI7Ci1zdGF0aWMgY29uc3QgY2hhcioga1ZhbHVlc0RpciA9ICJ2YWx1ZXMiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtNaXBtYXBEaXIgPSAibWlwbWFwIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrSW52YWxpZENoYXJzID0gIi9cXDoiOwotc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4QXNzZXRGaWxlTmFtZSA9IDEwMDsKLQotc3RhdGljIGNvbnN0IFN0cmluZzgga1Jlc1N0cmluZyhrUmVzb3VyY2VEaXIpOwotCi0vKgotICogTmFtZXMgb2YgYXNzZXQgZmlsZXMgbXVzdCBtZWV0IHRoZSBmb2xsb3dpbmcgY3JpdGVyaWE6Ci0gKgotICogIC0gdGhlIGZpbGVuYW1lIGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBrTWF4QXNzZXRGaWxlTmFtZSBieXRlcyBsb25nCi0gKiAgICAoYW5kIGNhbid0IGJlIGVtcHR5KQotICogIC0gYWxsIGNoYXJhY3RlcnMgbXVzdCBiZSA3LWJpdCBwcmludGFibGUgQVNDSUkKLSAqICAtIG5vbmUgb2YgeyAnLycgJ1xcJyAnOicgfQotICoKLSAqIFBhc3MgaW4ganVzdCB0aGUgZmlsZW5hbWUsIG5vdCB0aGUgZnVsbCBwYXRoLgotICovCi1zdGF0aWMgYm9vbCB2YWxpZGF0ZUZpbGVOYW1lKGNvbnN0IGNoYXIqIGZpbGVOYW1lKQotewotICAgIGNvbnN0IGNoYXIqIGNwID0gZmlsZU5hbWU7Ci0gICAgc2l6ZV90IGxlbiA9IDA7Ci0KLSAgICB3aGlsZSAoKmNwICE9ICdcMCcpIHsKLSAgICAgICAgaWYgKCgqY3AgJiAweDgwKSAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgLy8gcmVqZWN0IGhpZ2ggQVNDSUkKLSAgICAgICAgaWYgKCpjcCA8IDB4MjAgfHwgKmNwID49IDB4N2YpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAvLyByZWplY3QgY29udHJvbCBjaGFycyBhbmQgMHg3ZgotICAgICAgICBpZiAoc3RyY2hyKGtJbnZhbGlkQ2hhcnMsICpjcCkgIT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgIC8vIHJlamVjdCBwYXRoIHNlcCBjaGFycwotICAgICAgICBjcCsrOwotICAgICAgICBsZW4rKzsKLSAgICB9Ci0KLSAgICBpZiAobGVuIDwgMSB8fCBsZW4gPiBrTWF4QXNzZXRGaWxlTmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgIC8vIHJlamVjdCBlbXB0eSBvciB0b28gbG9uZwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoZSBkZWZhdWx0IHRvIHVzZSBpZiBubyBvdGhlciBpZ25vcmUgcGF0dGVybiBpcyBkZWZpbmVkLgotY29uc3QgY2hhciAqIGNvbnN0IGdEZWZhdWx0SWdub3JlQXNzZXRzID0KLSAgICAiIS5zdm46IS5naXQ6IS5kc19zdG9yZTohKi5zY2M6Lio6PGRpcj5fKjohQ1ZTOiF0aHVtYnMuZGI6IXBpY2FzYS5pbmk6ISp+IjsKLS8vIFRoZSBpZ25vcmUgcGF0dGVybiB0aGF0IGNhbiBiZSBwYXNzZWQgdmlhIC0taWdub3JlLWFzc2V0cyBpbiBNYWluLmNwcAotY29uc3QgY2hhciAqIGdVc2VySWdub3JlQXNzZXRzID0gTlVMTDsKLQotc3RhdGljIGJvb2wgaXNIaWRkZW4oY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqcGF0aCkKLXsKLSAgICAvLyBQYXR0ZXJucyBzeW50YXg6Ci0gICAgLy8gLSBEZWxpbWl0ZXIgaXMgOgotICAgIC8vIC0gRW50cnkgY2FuIHN0YXJ0IHdpdGggdGhlIGZsYWcgISB0byBhdm9pZCBwcmludGluZyBhIHdhcm5pbmcKLSAgICAvLyAgIGFib3V0IHRoZSBmaWxlIGJlaW5nIGlnbm9yZWQuCi0gICAgLy8gLSBFbnRyeSBjYW4gaGF2ZSB0aGUgZmxhZyAiPGRpcj4iIHRvIG1hdGNoIG9ubHkgZGlyZWN0b3JpZXMKLSAgICAvLyAgIG9yIDxmaWxlPiB0byBtYXRjaCBvbmx5IGZpbGVzLiBEZWZhdWx0IGlzIHRvIG1hdGNoIGJvdGguCi0gICAgLy8gLSBFbnRyeSBjYW4gYmUgYSBzaW1wbGlmaWVkIGdsb2IgIjxwcmVmaXg+KiIgb3IgIio8c3VmZml4PiIKLSAgICAvLyAgIHdoZXJlIHByZWZpeC9zdWZmaXggbXVzdCBoYXZlIGF0IGxlYXN0IDEgY2hhcmFjdGVyIChzbyB0aGF0Ci0gICAgLy8gICB3ZSBkb24ndCBtYXRjaCBhICcqJyBjYXRjaC1hbGwgcGF0dGVybi4pCi0gICAgLy8gLSBUaGUgc3BlY2lhbCBmaWxlbmFtZXMgIi4iIGFuZCAiLi4iIGFyZSBhbHdheXMgaWdub3JlZC4KLSAgICAvLyAtIE90aGVyd2lzZSB0aGUgZnVsbCBzdHJpbmcgaXMgbWF0Y2hlZC4KLSAgICAvLyAtIG1hdGNoIGlzIG5vdCBjYXNlLXNlbnNpdGl2ZS4KLQotICAgIGlmIChzdHJjbXAocGF0aCwgIi4iKSA9PSAwIHx8IHN0cmNtcChwYXRoLCAiLi4iKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIgKmRlbGltID0gIjoiOwotICAgIGNvbnN0IGNoYXIgKnAgPSBnVXNlcklnbm9yZUFzc2V0czsKLSAgICBpZiAoIXAgfHwgIXBbMF0pIHsKLSAgICAgICAgcCA9IGdldGVudigiQU5EUk9JRF9BQVBUX0lHTk9SRSIpOwotICAgIH0KLSAgICBpZiAoIXAgfHwgIXBbMF0pIHsKLSAgICAgICAgcCA9IGdEZWZhdWx0SWdub3JlQXNzZXRzOwotICAgIH0KLSAgICBjaGFyICpwYXR0ZXJucyA9IHN0cmR1cChwKTsKLQotICAgIGJvb2wgaWdub3JlID0gZmFsc2U7Ci0gICAgYm9vbCBjaGF0dHkgPSB0cnVlOwotICAgIGNoYXIgKm1hdGNoZWRQYXR0ZXJuID0gTlVMTDsKLQotICAgIFN0cmluZzggZnVsbFBhdGgocm9vdCk7Ci0gICAgZnVsbFBhdGguYXBwZW5kUGF0aChwYXRoKTsKLSAgICBGaWxlVHlwZSB0eXBlID0gZ2V0RmlsZVR5cGUoZnVsbFBhdGgpOwotCi0gICAgaW50IHBsZW4gPSBzdHJsZW4ocGF0aCk7Ci0KLSAgICAvLyBOb3RlOiB3ZSBkb24ndCBoYXZlIHN0cnRva19yIHVuZGVyIG1pbmd3LgotICAgIGZvcihjaGFyICp0b2tlbiA9IHN0cnRvayhwYXR0ZXJucywgZGVsaW0pOwotICAgICAgICAgICAgIWlnbm9yZSAmJiB0b2tlbiAhPSBOVUxMOwotICAgICAgICAgICAgdG9rZW4gPSBzdHJ0b2soTlVMTCwgZGVsaW0pKSB7Ci0gICAgICAgIGNoYXR0eSA9IHRva2VuWzBdICE9ICchJzsKLSAgICAgICAgaWYgKCFjaGF0dHkpIHRva2VuKys7IC8vIHNraXAgIQotICAgICAgICBpZiAoc3RybmNhc2VjbXAodG9rZW4sICI8ZGlyPiIgLCA1KSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBrRmlsZVR5cGVEaXJlY3RvcnkpIGNvbnRpbnVlOwotICAgICAgICAgICAgdG9rZW4gKz0gNTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RybmNhc2VjbXAodG9rZW4sICI8ZmlsZT4iLCA2KSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBrRmlsZVR5cGVSZWd1bGFyKSBjb250aW51ZTsKLSAgICAgICAgICAgIHRva2VuICs9IDY7Ci0gICAgICAgIH0KLQotICAgICAgICBtYXRjaGVkUGF0dGVybiA9IHRva2VuOwotICAgICAgICBpbnQgbiA9IHN0cmxlbih0b2tlbik7Ci0KLSAgICAgICAgaWYgKHRva2VuWzBdID09ICcqJykgewotICAgICAgICAgICAgLy8gTWF0Y2ggKnN1ZmZpeAotICAgICAgICAgICAgdG9rZW4rKzsKLSAgICAgICAgICAgIG4tLTsKLSAgICAgICAgICAgIGlmIChuIDw9IHBsZW4pIHsKLSAgICAgICAgICAgICAgICBpZ25vcmUgPSBzdHJuY2FzZWNtcCh0b2tlbiwgcGF0aCArIHBsZW4gLSBuLCBuKSA9PSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG4gPiAxICYmIHRva2VuW24gLSAxXSA9PSAnKicpIHsKLSAgICAgICAgICAgIC8vIE1hdGNoIHByZWZpeCoKLSAgICAgICAgICAgIGlnbm9yZSA9IHN0cm5jYXNlY21wKHRva2VuLCBwYXRoLCBuIC0gMSkgPT0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlnbm9yZSA9IHN0cmNhc2VjbXAodG9rZW4sIHBhdGgpID09IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaWdub3JlICYmIGNoYXR0eSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAoc2tpcHBpbmcgJXMgJyVzJyBkdWUgdG8gQU5EUk9JRF9BQVBUX0lHTk9SRSBwYXR0ZXJuICclcycpXG4iLAotICAgICAgICAgICAgICAgIHR5cGUgPT0ga0ZpbGVUeXBlRGlyZWN0b3J5ID8gImRpciIgOiAiZmlsZSIsCi0gICAgICAgICAgICAgICAgcGF0aCwKLSAgICAgICAgICAgICAgICBtYXRjaGVkUGF0dGVybiA/IG1hdGNoZWRQYXR0ZXJuIDogIiIpOwotICAgIH0KLQotICAgIGZyZWUocGF0dGVybnMpOwotICAgIHJldHVybiBpZ25vcmU7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc3RhdHVzX3QKLUFhcHRHcm91cEVudHJ5OjpwYXJzZU5hbWVQYXJ0KGNvbnN0IFN0cmluZzgmIHBhcnQsIGludCogYXhpcywgdWludDMyX3QqIHZhbHVlKQotewotICAgIFJlc1RhYmxlX2NvbmZpZyBjb25maWc7Ci0KLSAgICAvLyBJTVNJIC0gTUNDCi0gICAgaWYgKGdldE1jY05hbWUocGFydC5zdHJpbmcoKSwgJmNvbmZpZykpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX01DQzsKLSAgICAgICAgKnZhbHVlID0gY29uZmlnLm1jYzsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gSU1TSSAtIE1OQwotICAgIGlmIChnZXRNbmNOYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19NTkM7Ci0gICAgICAgICp2YWx1ZSA9IGNvbmZpZy5tbmM7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIGxvY2FsZSAtIGxhbmd1YWdlCi0gICAgaWYgKHBhcnQubGVuZ3RoKCkgPT0gMiAmJiBpc2FscGhhKHBhcnRbMF0pICYmIGlzYWxwaGEocGFydFsxXSkpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX0xBTkdVQUdFOwotICAgICAgICAqdmFsdWUgPSBwYXJ0WzFdIDw8IDggfCBwYXJ0WzBdOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBsb2NhbGUgLSBsYW5ndWFnZV9SRUdJT04KLSAgICBpZiAocGFydC5sZW5ndGgoKSA9PSA1ICYmIGlzYWxwaGEocGFydFswXSkgJiYgaXNhbHBoYShwYXJ0WzFdKQotICAgICAgICAgICAgJiYgcGFydFsyXSA9PSAnXycgJiYgaXNhbHBoYShwYXJ0WzNdKSAmJiBpc2FscGhhKHBhcnRbNF0pKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19MQU5HVUFHRTsKLSAgICAgICAgKnZhbHVlID0gKHBhcnRbNF0gPDwgMjQpIHwgKHBhcnRbM10gPDwgMTYpIHwgKHBhcnRbMV0gPDwgOCkgfCAocGFydFswXSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIGxheW91dCBkaXJlY3Rpb24KLSAgICBpZiAoZ2V0TGF5b3V0RGlyZWN0aW9uTmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfTEFZT1VURElSOwotICAgICAgICAqdmFsdWUgPSAoY29uZmlnLnNjcmVlbkxheW91dCZSZXNUYWJsZV9jb25maWc6Ok1BU0tfTEFZT1VURElSKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gc21hbGxlc3Qgc2NyZWVuIGRwIHdpZHRoCi0gICAgaWYgKGdldFNtYWxsZXN0U2NyZWVuV2lkdGhEcE5hbWUocGFydC5zdHJpbmcoKSwgJmNvbmZpZykpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX1NNQUxMRVNUU0NSRUVOV0lEVEhEUDsKLSAgICAgICAgKnZhbHVlID0gY29uZmlnLnNtYWxsZXN0U2NyZWVuV2lkdGhEcDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gc2NyZWVuIGRwIHdpZHRoCi0gICAgaWYgKGdldFNjcmVlbldpZHRoRHBOYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19TQ1JFRU5XSURUSERQOwotICAgICAgICAqdmFsdWUgPSBjb25maWcuc2NyZWVuV2lkdGhEcDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gc2NyZWVuIGRwIGhlaWdodAotICAgIGlmIChnZXRTY3JlZW5IZWlnaHREcE5hbWUocGFydC5zdHJpbmcoKSwgJmNvbmZpZykpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX1NDUkVFTkhFSUdIVERQOwotICAgICAgICAqdmFsdWUgPSBjb25maWcuc2NyZWVuSGVpZ2h0RHA7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIHNjcmVlbiBsYXlvdXQgc2l6ZQotICAgIGlmIChnZXRTY3JlZW5MYXlvdXRTaXplTmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfU0NSRUVOTEFZT1VUU0laRTsKLSAgICAgICAgKnZhbHVlID0gKGNvbmZpZy5zY3JlZW5MYXlvdXQmUmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTlNJWkUpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBzY3JlZW4gbGF5b3V0IGxvbmcKLSAgICBpZiAoZ2V0U2NyZWVuTGF5b3V0TG9uZ05hbWUocGFydC5zdHJpbmcoKSwgJmNvbmZpZykpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX1NDUkVFTkxBWU9VVExPTkc7Ci0gICAgICAgICp2YWx1ZSA9IChjb25maWcuc2NyZWVuTGF5b3V0JlJlc1RhYmxlX2NvbmZpZzo6TUFTS19TQ1JFRU5MT05HKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gb3JpZW50YXRpb24KLSAgICBpZiAoZ2V0T3JpZW50YXRpb25OYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19PUklFTlRBVElPTjsKLSAgICAgICAgKnZhbHVlID0gY29uZmlnLm9yaWVudGF0aW9uOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyB1aSBtb2RlIHR5cGUKLSAgICBpZiAoZ2V0VWlNb2RlVHlwZU5hbWUocGFydC5zdHJpbmcoKSwgJmNvbmZpZykpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX1VJTU9ERVRZUEU7Ci0gICAgICAgICp2YWx1ZSA9IChjb25maWcudWlNb2RlJlJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX1RZUEUpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyB1aSBtb2RlIG5pZ2h0Ci0gICAgaWYgKGdldFVpTW9kZU5pZ2h0TmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfVUlNT0RFTklHSFQ7Ci0gICAgICAgICp2YWx1ZSA9IChjb25maWcudWlNb2RlJlJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX05JR0hUKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gZGVuc2l0eQotICAgIGlmIChnZXREZW5zaXR5TmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfREVOU0lUWTsKLSAgICAgICAgKnZhbHVlID0gY29uZmlnLmRlbnNpdHk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIHRvdWNoc2NyZWVuCi0gICAgaWYgKGdldFRvdWNoc2NyZWVuTmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfVE9VQ0hTQ1JFRU47Ci0gICAgICAgICp2YWx1ZSA9IGNvbmZpZy50b3VjaHNjcmVlbjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8ga2V5Ym9hcmQgaGlkZGVuCi0gICAgaWYgKGdldEtleXNIaWRkZW5OYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19LRVlTSElEREVOOwotICAgICAgICAqdmFsdWUgPSBjb25maWcuaW5wdXRGbGFnczsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8ga2V5Ym9hcmQKLSAgICBpZiAoZ2V0S2V5Ym9hcmROYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19LRVlCT0FSRDsKLSAgICAgICAgKnZhbHVlID0gY29uZmlnLmtleWJvYXJkOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBuYXZpZ2F0aW9uIGhpZGRlbgotICAgIGlmIChnZXROYXZIaWRkZW5OYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19OQVZISURERU47Ci0gICAgICAgICp2YWx1ZSA9IGNvbmZpZy5pbnB1dEZsYWdzOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBuYXZpZ2F0aW9uCi0gICAgaWYgKGdldE5hdmlnYXRpb25OYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19OQVZJR0FUSU9OOwotICAgICAgICAqdmFsdWUgPSBjb25maWcubmF2aWdhdGlvbjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gc2NyZWVuIHNpemUKLSAgICBpZiAoZ2V0U2NyZWVuU2l6ZU5hbWUocGFydC5zdHJpbmcoKSwgJmNvbmZpZykpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX1NDUkVFTlNJWkU7Ci0gICAgICAgICp2YWx1ZSA9IGNvbmZpZy5zY3JlZW5TaXplOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyB2ZXJzaW9uCi0gICAgaWYgKGdldFZlcnNpb25OYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19WRVJTSU9OOwotICAgICAgICAqdmFsdWUgPSBjb25maWcudmVyc2lvbjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXVpbnQzMl90Ci1BYXB0R3JvdXBFbnRyeTo6Z2V0Q29uZmlnVmFsdWVGb3JBeGlzKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgY29uZmlnLCBpbnQgYXhpcykKLXsKLSAgICBzd2l0Y2ggKGF4aXMpIHsKLSAgICAgICAgY2FzZSBBWElTX01DQzoKLSAgICAgICAgICAgIHJldHVybiBjb25maWcubWNjOwotICAgICAgICBjYXNlIEFYSVNfTU5DOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5tbmM7Ci0gICAgICAgIGNhc2UgQVhJU19MQU5HVUFHRToKLSAgICAgICAgICAgIHJldHVybiAoKCh1aW50MzJfdCljb25maWcuY291bnRyeVsxXSkgPDwgMjQpIHwgKCgodWludDMyX3QpY29uZmlnLmNvdW50cnlbMF0pIDw8IDE2KQotICAgICAgICAgICAgICAgIHwgKCgodWludDMyX3QpY29uZmlnLmxhbmd1YWdlWzFdKSA8PCA4KSB8IChjb25maWcubGFuZ3VhZ2VbMF0pOwotICAgICAgICBjYXNlIEFYSVNfTEFZT1VURElSOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5zY3JlZW5MYXlvdXQmUmVzVGFibGVfY29uZmlnOjpNQVNLX0xBWU9VVERJUjsKLSAgICAgICAgY2FzZSBBWElTX1NDUkVFTkxBWU9VVFNJWkU6Ci0gICAgICAgICAgICByZXR1cm4gY29uZmlnLnNjcmVlbkxheW91dCZSZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOU0laRTsKLSAgICAgICAgY2FzZSBBWElTX09SSUVOVEFUSU9OOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5vcmllbnRhdGlvbjsKLSAgICAgICAgY2FzZSBBWElTX1VJTU9ERVRZUEU6Ci0gICAgICAgICAgICByZXR1cm4gKGNvbmZpZy51aU1vZGUmUmVzVGFibGVfY29uZmlnOjpNQVNLX1VJX01PREVfVFlQRSk7Ci0gICAgICAgIGNhc2UgQVhJU19VSU1PREVOSUdIVDoKLSAgICAgICAgICAgIHJldHVybiAoY29uZmlnLnVpTW9kZSZSZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9OSUdIVCk7Ci0gICAgICAgIGNhc2UgQVhJU19ERU5TSVRZOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5kZW5zaXR5OwotICAgICAgICBjYXNlIEFYSVNfVE9VQ0hTQ1JFRU46Ci0gICAgICAgICAgICByZXR1cm4gY29uZmlnLnRvdWNoc2NyZWVuOwotICAgICAgICBjYXNlIEFYSVNfS0VZU0hJRERFTjoKLSAgICAgICAgICAgIHJldHVybiBjb25maWcuaW5wdXRGbGFnczsKLSAgICAgICAgY2FzZSBBWElTX0tFWUJPQVJEOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5rZXlib2FyZDsKLSAgICAgICAgY2FzZSBBWElTX05BVklHQVRJT046Ci0gICAgICAgICAgICByZXR1cm4gY29uZmlnLm5hdmlnYXRpb247Ci0gICAgICAgIGNhc2UgQVhJU19TQ1JFRU5TSVpFOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5zY3JlZW5TaXplOwotICAgICAgICBjYXNlIEFYSVNfU01BTExFU1RTQ1JFRU5XSURUSERQOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5zbWFsbGVzdFNjcmVlbldpZHRoRHA7Ci0gICAgICAgIGNhc2UgQVhJU19TQ1JFRU5XSURUSERQOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5zY3JlZW5XaWR0aERwOwotICAgICAgICBjYXNlIEFYSVNfU0NSRUVOSEVJR0hURFA6Ci0gICAgICAgICAgICByZXR1cm4gY29uZmlnLnNjcmVlbkhlaWdodERwOwotICAgICAgICBjYXNlIEFYSVNfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiBjb25maWcudmVyc2lvbjsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wKLUFhcHRHcm91cEVudHJ5Ojpjb25maWdTYW1lRXhjZXB0KGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgY29uZmlnLAotICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcmIG90aGVyQ29uZmlnLCBpbnQgYXhpcykKLXsKLSAgICBmb3IgKGludCBpPUFYSVNfU1RBUlQ7IGk8PUFYSVNfRU5EOyBpKyspIHsKLSAgICAgICAgaWYgKGkgPT0gYXhpcykgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGdldENvbmZpZ1ZhbHVlRm9yQXhpcyhjb25maWcsIGkpICE9IGdldENvbmZpZ1ZhbHVlRm9yQXhpcyhvdGhlckNvbmZpZywgaSkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbAotQWFwdEdyb3VwRW50cnk6OmluaXRGcm9tRGlyTmFtZShjb25zdCBjaGFyKiBkaXIsIFN0cmluZzgqIHJlc1R5cGUpCi17Ci0gICAgbVBhcmFtc0NoYW5nZWQgPSB0cnVlOwotCi0gICAgVmVjdG9yPFN0cmluZzg+IHBhcnRzOwotCi0gICAgU3RyaW5nOCBtY2MsIG1uYywgbG9jLCBsYXlvdXRzaXplLCBsYXlvdXRsb25nLCBvcmllbnQsIGRlbjsKLSAgICBTdHJpbmc4IHRvdWNoLCBrZXksIGtleXNIaWRkZW4sIG5hdiwgbmF2SGlkZGVuLCBzaXplLCBsYXlvdXREaXIsIHZlcnM7Ci0gICAgU3RyaW5nOCB1aU1vZGVUeXBlLCB1aU1vZGVOaWdodCwgc21hbGxlc3R3aWR0aGRwLCB3aWR0aGRwLCBoZWlnaHRkcDsKLQotICAgIGNvbnN0IGNoYXIgKnAgPSBkaXI7Ci0gICAgY29uc3QgY2hhciAqcTsKLSAgICB3aGlsZSAoTlVMTCAhPSAocSA9IHN0cmNocihwLCAnLScpKSkgewotICAgICAgICBTdHJpbmc4IHZhbChwLCBxLXApOwotICAgICAgICB2YWwudG9Mb3dlcigpOwotICAgICAgICBwYXJ0cy5hZGQodmFsKTsKLSAgICAgICAgLy9wcmludGYoInBhcnQ6ICVzXG4iLCBwYXJ0c1twYXJ0cy5zaXplKCktMV0uc3RyaW5nKCkpOwotICAgICAgICBwID0gcSsxOwotICAgIH0KLSAgICBTdHJpbmc4IHZhbChwKTsKLSAgICB2YWwudG9Mb3dlcigpOwotICAgIHBhcnRzLmFkZCh2YWwpOwotICAgIC8vcHJpbnRmKCJwYXJ0OiAlc1xuIiwgcGFydHNbcGFydHMuc2l6ZSgpLTFdLnN0cmluZygpKTsKLQotICAgIGNvbnN0IGludCBOID0gcGFydHMuc2l6ZSgpOwotICAgIGludCBpbmRleCA9IDA7Ci0gICAgU3RyaW5nOCBwYXJ0ID0gcGFydHNbaW5kZXhdOwotCi0gICAgLy8gcmVzb3VyY2UgdHlwZQotICAgIGlmICghaXNWYWxpZFJlc291cmNlVHlwZShwYXJ0KSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgICpyZXNUeXBlID0gcGFydDsKLQotICAgIGluZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgZ290byBzdWNjZXNzOwotICAgIH0KLSAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotCi0gICAgLy8gaW1zaSAtIG1jYwotICAgIGlmIChnZXRNY2NOYW1lKHBhcnQuc3RyaW5nKCkpKSB7Ci0gICAgICAgIG1jYyA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3QgbWNjOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLy8gaW1zaSAtIG1uYwotICAgIGlmIChnZXRNbmNOYW1lKHBhcnQuc3RyaW5nKCkpKSB7Ci0gICAgICAgIG1uYyA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3QgbWNjOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLy8gbG9jYWxlIC0gbGFuZ3VhZ2UKLSAgICBpZiAocGFydC5sZW5ndGgoKSA9PSAyICYmIGlzYWxwaGEocGFydFswXSkgJiYgaXNhbHBoYShwYXJ0WzFdKSkgewotICAgICAgICBsb2MgPSBwYXJ0OwotCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICAgIGlmIChpbmRleCA9PSBOKSB7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcGFydCA9IHBhcnRzW2luZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvL3ByaW50Zigibm90IGxhbmd1YWdlOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLy8gbG9jYWxlIC0gcmVnaW9uCi0gICAgaWYgKGxvYy5sZW5ndGgoKSA+IDAKLSAgICAgICAgICAgICYmIHBhcnQubGVuZ3RoKCkgPT0gMyAmJiBwYXJ0WzBdID09ICdyJyAmJiBwYXJ0WzBdICYmIHBhcnRbMV0pIHsKLSAgICAgICAgbG9jICs9ICItIjsKLSAgICAgICAgcGFydC50b1VwcGVyKCk7Ci0gICAgICAgIGxvYyArPSBwYXJ0LnN0cmluZygpICsgMTsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCByZWdpb246ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0TGF5b3V0RGlyZWN0aW9uTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBsYXlvdXREaXIgPSBwYXJ0OwotCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICAgIGlmIChpbmRleCA9PSBOKSB7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcGFydCA9IHBhcnRzW2luZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvL3ByaW50Zigibm90IGxheW91dCBkaXJlY3Rpb246ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0U21hbGxlc3RTY3JlZW5XaWR0aERwTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBzbWFsbGVzdHdpZHRoZHAgPSBwYXJ0OwotCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICAgIGlmIChpbmRleCA9PSBOKSB7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcGFydCA9IHBhcnRzW2luZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvL3ByaW50Zigibm90IHNtYWxsZXN0IHNjcmVlbiB3aWR0aCBkcDogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIGlmIChnZXRTY3JlZW5XaWR0aERwTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICB3aWR0aGRwID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCBzY3JlZW4gd2lkdGggZHA6ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0U2NyZWVuSGVpZ2h0RHBOYW1lKHBhcnQuc3RyaW5nKCkpKSB7Ci0gICAgICAgIGhlaWdodGRwID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCBzY3JlZW4gaGVpZ2h0IGRwOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgaWYgKGdldFNjcmVlbkxheW91dFNpemVOYW1lKHBhcnQuc3RyaW5nKCkpKSB7Ci0gICAgICAgIGxheW91dHNpemUgPSBwYXJ0OwotCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICAgIGlmIChpbmRleCA9PSBOKSB7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcGFydCA9IHBhcnRzW2luZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvL3ByaW50Zigibm90IHNjcmVlbiBsYXlvdXQgc2l6ZTogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIGlmIChnZXRTY3JlZW5MYXlvdXRMb25nTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBsYXlvdXRsb25nID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCBzY3JlZW4gbGF5b3V0IGxvbmc6ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyBvcmllbnRhdGlvbgotICAgIGlmIChnZXRPcmllbnRhdGlvbk5hbWUocGFydC5zdHJpbmcoKSkpIHsKLSAgICAgICAgb3JpZW50ID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCBvcmllbnRhdGlvbjogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIHVpIG1vZGUgdHlwZQotICAgIGlmIChnZXRVaU1vZGVUeXBlTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICB1aU1vZGVUeXBlID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCB1aSBtb2RlIHR5cGU6ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyB1aSBtb2RlIG5pZ2h0Ci0gICAgaWYgKGdldFVpTW9kZU5pZ2h0TmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICB1aU1vZGVOaWdodCA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3QgdWkgbW9kZSBuaWdodDogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIGRlbnNpdHkKLSAgICBpZiAoZ2V0RGVuc2l0eU5hbWUocGFydC5zdHJpbmcoKSkpIHsKLSAgICAgICAgZGVuID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCBkZW5zaXR5OiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLy8gdG91Y2hzY3JlZW4KLSAgICBpZiAoZ2V0VG91Y2hzY3JlZW5OYW1lKHBhcnQuc3RyaW5nKCkpKSB7Ci0gICAgICAgIHRvdWNoID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCB0b3VjaHNjcmVlbjogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIGtleWJvYXJkIGhpZGRlbgotICAgIGlmIChnZXRLZXlzSGlkZGVuTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBrZXlzSGlkZGVuID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCBrZXlzSGlkZGVuOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLy8ga2V5Ym9hcmQKLSAgICBpZiAoZ2V0S2V5Ym9hcmROYW1lKHBhcnQuc3RyaW5nKCkpKSB7Ci0gICAgICAgIGtleSA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3Qga2V5Ym9hcmQ6ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyBuYXZpZ2F0aW9uIGhpZGRlbgotICAgIGlmIChnZXROYXZIaWRkZW5OYW1lKHBhcnQuc3RyaW5nKCkpKSB7Ci0gICAgICAgIG5hdkhpZGRlbiA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3QgbmF2SGlkZGVuOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgaWYgKGdldE5hdmlnYXRpb25OYW1lKHBhcnQuc3RyaW5nKCkpKSB7Ci0gICAgICAgIG5hdiA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3QgbmF2aWdhdGlvbjogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIGlmIChnZXRTY3JlZW5TaXplTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBzaXplID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCBzY3JlZW4gc2l6ZTogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIGlmIChnZXRWZXJzaW9uTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICB2ZXJzID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCB2ZXJzaW9uOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLy8gaWYgdGhlcmUgYXJlIGV4dHJhIHBhcnRzLCBpdCBkb2Vzbid0IG1hdGNoCi0gICAgcmV0dXJuIGZhbHNlOwotCi1zdWNjZXNzOgotICAgIHRoaXMtPm1jYyA9IG1jYzsKLSAgICB0aGlzLT5tbmMgPSBtbmM7Ci0gICAgdGhpcy0+bG9jYWxlID0gbG9jOwotICAgIHRoaXMtPnNjcmVlbkxheW91dFNpemUgPSBsYXlvdXRzaXplOwotICAgIHRoaXMtPnNjcmVlbkxheW91dExvbmcgPSBsYXlvdXRsb25nOwotICAgIHRoaXMtPnNtYWxsZXN0U2NyZWVuV2lkdGhEcCA9IHNtYWxsZXN0d2lkdGhkcDsKLSAgICB0aGlzLT5zY3JlZW5XaWR0aERwID0gd2lkdGhkcDsKLSAgICB0aGlzLT5zY3JlZW5IZWlnaHREcCA9IGhlaWdodGRwOwotICAgIHRoaXMtPm9yaWVudGF0aW9uID0gb3JpZW50OwotICAgIHRoaXMtPnVpTW9kZVR5cGUgPSB1aU1vZGVUeXBlOwotICAgIHRoaXMtPnVpTW9kZU5pZ2h0ID0gdWlNb2RlTmlnaHQ7Ci0gICAgdGhpcy0+ZGVuc2l0eSA9IGRlbjsKLSAgICB0aGlzLT50b3VjaHNjcmVlbiA9IHRvdWNoOwotICAgIHRoaXMtPmtleXNIaWRkZW4gPSBrZXlzSGlkZGVuOwotICAgIHRoaXMtPmtleWJvYXJkID0ga2V5OwotICAgIHRoaXMtPm5hdkhpZGRlbiA9IG5hdkhpZGRlbjsKLSAgICB0aGlzLT5uYXZpZ2F0aW9uID0gbmF2OwotICAgIHRoaXMtPnNjcmVlblNpemUgPSBzaXplOwotICAgIHRoaXMtPmxheW91dERpcmVjdGlvbiA9IGxheW91dERpcjsKLSAgICB0aGlzLT52ZXJzaW9uID0gdmVyczsKLQotICAgIC8vIHdoYXQgaXMgdGhpcyBhbnl3YXk/Ci0gICAgdGhpcy0+dmVuZG9yID0gIiI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU3RyaW5nOAotQWFwdEdyb3VwRW50cnk6OnRvU3RyaW5nKCkgY29uc3QKLXsKLSAgICBTdHJpbmc4IHMgPSB0aGlzLT5tY2M7Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSB0aGlzLT5tbmM7Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSB0aGlzLT5sb2NhbGU7Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSBsYXlvdXREaXJlY3Rpb247Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSBzbWFsbGVzdFNjcmVlbldpZHRoRHA7Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSBzY3JlZW5XaWR0aERwOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gc2NyZWVuSGVpZ2h0RHA7Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSBzY3JlZW5MYXlvdXRTaXplOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gc2NyZWVuTGF5b3V0TG9uZzsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IHRoaXMtPm9yaWVudGF0aW9uOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gdWlNb2RlVHlwZTsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IHVpTW9kZU5pZ2h0OwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gZGVuc2l0eTsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IHRvdWNoc2NyZWVuOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0ga2V5c0hpZGRlbjsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IGtleWJvYXJkOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gbmF2SGlkZGVuOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gbmF2aWdhdGlvbjsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IHNjcmVlblNpemU7Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSB2ZXJzaW9uOwotICAgIHJldHVybiBzOwotfQotCi1TdHJpbmc4Ci1BYXB0R3JvdXBFbnRyeTo6dG9EaXJOYW1lKGNvbnN0IFN0cmluZzgmIHJlc1R5cGUpIGNvbnN0Ci17Ci0gICAgU3RyaW5nOCBzID0gcmVzVHlwZTsKLSAgICBpZiAodGhpcy0+bWNjICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSBtY2M7Ci0gICAgfQotICAgIGlmICh0aGlzLT5tbmMgIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IG1uYzsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPmxvY2FsZSAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gbG9jYWxlOwotICAgIH0KLSAgICBpZiAodGhpcy0+bGF5b3V0RGlyZWN0aW9uICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSBsYXlvdXREaXJlY3Rpb247Ci0gICAgfQotICAgIGlmICh0aGlzLT5zbWFsbGVzdFNjcmVlbldpZHRoRHAgIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IHNtYWxsZXN0U2NyZWVuV2lkdGhEcDsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPnNjcmVlbldpZHRoRHAgIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IHNjcmVlbldpZHRoRHA7Ci0gICAgfQotICAgIGlmICh0aGlzLT5zY3JlZW5IZWlnaHREcCAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gc2NyZWVuSGVpZ2h0RHA7Ci0gICAgfQotICAgIGlmICh0aGlzLT5zY3JlZW5MYXlvdXRTaXplICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSBzY3JlZW5MYXlvdXRTaXplOwotICAgIH0KLSAgICBpZiAodGhpcy0+c2NyZWVuTGF5b3V0TG9uZyAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gc2NyZWVuTGF5b3V0TG9uZzsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPm9yaWVudGF0aW9uICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSBvcmllbnRhdGlvbjsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPnVpTW9kZVR5cGUgIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IHVpTW9kZVR5cGU7Ci0gICAgfQotICAgIGlmICh0aGlzLT51aU1vZGVOaWdodCAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gdWlNb2RlTmlnaHQ7Ci0gICAgfQotICAgIGlmICh0aGlzLT5kZW5zaXR5ICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSBkZW5zaXR5OwotICAgIH0KLSAgICBpZiAodGhpcy0+dG91Y2hzY3JlZW4gIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IHRvdWNoc2NyZWVuOwotICAgIH0KLSAgICBpZiAodGhpcy0+a2V5c0hpZGRlbiAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0ga2V5c0hpZGRlbjsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPmtleWJvYXJkICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSBrZXlib2FyZDsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPm5hdkhpZGRlbiAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gbmF2SGlkZGVuOwotICAgIH0KLSAgICBpZiAodGhpcy0+bmF2aWdhdGlvbiAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gbmF2aWdhdGlvbjsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPnNjcmVlblNpemUgIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IHNjcmVlblNpemU7Ci0gICAgfQotICAgIGlmICh0aGlzLT52ZXJzaW9uICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSB2ZXJzaW9uOwotICAgIH0KLQotICAgIHJldHVybiBzOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRNY2NOYW1lKGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZV9jb25maWcqIG91dCkKLXsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5tY2MgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogYyA9IG5hbWU7Ci0gICAgaWYgKHRvbG93ZXIoKmMpICE9ICdtJykgcmV0dXJuIGZhbHNlOwotICAgIGMrKzsKLSAgICBpZiAodG9sb3dlcigqYykgIT0gJ2MnKSByZXR1cm4gZmFsc2U7Ci0gICAgYysrOwotICAgIGlmICh0b2xvd2VyKCpjKSAhPSAnYycpIHJldHVybiBmYWxzZTsKLSAgICBjKys7Ci0KLSAgICBjb25zdCBjaGFyKiB2YWwgPSBjOwotCi0gICAgd2hpbGUgKCpjID49ICcwJyAmJiAqYyA8PSAnOScpIHsKLSAgICAgICAgYysrOwotICAgIH0KLSAgICBpZiAoKmMgIT0gMCkgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjLXZhbCAhPSAzKSByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgZCA9IGF0b2kodmFsKTsKLSAgICBpZiAoZCAhPSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+bWNjID0gZDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRNbmNOYW1lKGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZV9jb25maWcqIG91dCkKLXsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5tY2MgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogYyA9IG5hbWU7Ci0gICAgaWYgKHRvbG93ZXIoKmMpICE9ICdtJykgcmV0dXJuIGZhbHNlOwotICAgIGMrKzsKLSAgICBpZiAodG9sb3dlcigqYykgIT0gJ24nKSByZXR1cm4gZmFsc2U7Ci0gICAgYysrOwotICAgIGlmICh0b2xvd2VyKCpjKSAhPSAnYycpIHJldHVybiBmYWxzZTsKLSAgICBjKys7Ci0KLSAgICBjb25zdCBjaGFyKiB2YWwgPSBjOwotCi0gICAgd2hpbGUgKCpjID49ICcwJyAmJiAqYyA8PSAnOScpIHsKLSAgICAgICAgYysrOwotICAgIH0KLSAgICBpZiAoKmMgIT0gMCkgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjLXZhbCA9PSAwIHx8IGMtdmFsID4gMykgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG91dCkgewotICAgICAgICBvdXQtPm1uYyA9IGF0b2kodmFsKTsKLSAgICAgICAgaWYgKG91dC0+bW5jID09IDApIHsKLSAgICAgICAgICAgIG91dC0+bW5jID0gQUNPTkZJR1VSQVRJT05fTU5DX1pFUk87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIERvZXMgdGhpcyBkaXJlY3RvcnkgbmFtZSBmaXQgdGhlIHBhdHRlcm4gb2YgYSBsb2NhbGUgZGlyICgiZW4tclVTIiBvcgotICogImRlZmF1bHQiKT8KLSAqCi0gKiBUT0RPOiBTaG91bGQgaW5zaXN0IHRoYXQgdGhlIGZpcnN0IHR3byBsZXR0ZXJzIGFyZSBsb3dlciBjYXNlLCBhbmQgdGhlCi0gKiBzZWNvbmQgdHdvIGFyZSB1cHBlci4KLSAqLwotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0TG9jYWxlTmFtZShjb25zdCBjaGFyKiBmaWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChmaWxlTmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMAotICAgICAgICAgICAgfHwgc3RyY21wKGZpbGVOYW1lLCBrRGVmYXVsdExvY2FsZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSB7Ci0gICAgICAgICAgICBvdXQtPmxhbmd1YWdlWzBdID0gMDsKLSAgICAgICAgICAgIG91dC0+bGFuZ3VhZ2VbMV0gPSAwOwotICAgICAgICAgICAgb3V0LT5jb3VudHJ5WzBdID0gMDsKLSAgICAgICAgICAgIG91dC0+Y291bnRyeVsxXSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHN0cmxlbihmaWxlTmFtZSkgPT0gMiAmJiBpc2FscGhhKGZpbGVOYW1lWzBdKSAmJiBpc2FscGhhKGZpbGVOYW1lWzFdKSkgewotICAgICAgICBpZiAob3V0KSB7Ci0gICAgICAgICAgICBvdXQtPmxhbmd1YWdlWzBdID0gZmlsZU5hbWVbMF07Ci0gICAgICAgICAgICBvdXQtPmxhbmd1YWdlWzFdID0gZmlsZU5hbWVbMV07Ci0gICAgICAgICAgICBvdXQtPmNvdW50cnlbMF0gPSAwOwotICAgICAgICAgICAgb3V0LT5jb3VudHJ5WzFdID0gMDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RybGVuKGZpbGVOYW1lKSA9PSA1ICYmCi0gICAgICAgIGlzYWxwaGEoZmlsZU5hbWVbMF0pICYmCi0gICAgICAgIGlzYWxwaGEoZmlsZU5hbWVbMV0pICYmCi0gICAgICAgIGZpbGVOYW1lWzJdID09ICctJyAmJgotICAgICAgICBpc2FscGhhKGZpbGVOYW1lWzNdKSAmJgotICAgICAgICBpc2FscGhhKGZpbGVOYW1lWzRdKSkgewotICAgICAgICBpZiAob3V0KSB7Ci0gICAgICAgICAgICBvdXQtPmxhbmd1YWdlWzBdID0gZmlsZU5hbWVbMF07Ci0gICAgICAgICAgICBvdXQtPmxhbmd1YWdlWzFdID0gZmlsZU5hbWVbMV07Ci0gICAgICAgICAgICBvdXQtPmNvdW50cnlbMF0gPSBmaWxlTmFtZVszXTsKLSAgICAgICAgICAgIG91dC0+Y291bnRyeVsxXSA9IGZpbGVOYW1lWzRdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0TGF5b3V0RGlyZWN0aW9uTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCkKLXsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5zY3JlZW5MYXlvdXQgPQotICAgICAgICAgICAgICAgIChvdXQtPnNjcmVlbkxheW91dCZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX0xBWU9VVERJUikKLSAgICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6TEFZT1VURElSX0FOWTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImxkbHRyIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnNjcmVlbkxheW91dCA9Ci0gICAgICAgICAgICAgICAgKG91dC0+c2NyZWVuTGF5b3V0Jn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfTEFZT1VURElSKQotICAgICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpMQVlPVVRESVJfTFRSOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibGRydGwiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+c2NyZWVuTGF5b3V0ID0KLSAgICAgICAgICAgICAgICAob3V0LT5zY3JlZW5MYXlvdXQmflJlc1RhYmxlX2NvbmZpZzo6TUFTS19MQVlPVVRESVIpCi0gICAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OkxBWU9VVERJUl9SVEw7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0U2NyZWVuTGF5b3V0U2l6ZU5hbWUoY29uc3QgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZV9jb25maWcqIG91dCkKLXsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5zY3JlZW5MYXlvdXQgPQotICAgICAgICAgICAgICAgIChvdXQtPnNjcmVlbkxheW91dCZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTlNJWkUpCi0gICAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OlNDUkVFTlNJWkVfQU5ZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAic21hbGwiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+c2NyZWVuTGF5b3V0ID0KLSAgICAgICAgICAgICAgICAob3V0LT5zY3JlZW5MYXlvdXQmflJlc1RhYmxlX2NvbmZpZzo6TUFTS19TQ1JFRU5TSVpFKQotICAgICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5TSVpFX1NNQUxMOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibm9ybWFsIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnNjcmVlbkxheW91dCA9Ci0gICAgICAgICAgICAgICAgKG91dC0+c2NyZWVuTGF5b3V0Jn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOU0laRSkKLSAgICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOU0laRV9OT1JNQUw7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJsYXJnZSIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5zY3JlZW5MYXlvdXQgPQotICAgICAgICAgICAgICAgIChvdXQtPnNjcmVlbkxheW91dCZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTlNJWkUpCi0gICAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OlNDUkVFTlNJWkVfTEFSR0U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ4bGFyZ2UiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+c2NyZWVuTGF5b3V0ID0KLSAgICAgICAgICAgICAgICAob3V0LT5zY3JlZW5MYXlvdXQmflJlc1RhYmxlX2NvbmZpZzo6TUFTS19TQ1JFRU5TSVpFKQotICAgICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5TSVpFX1hMQVJHRTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRTY3JlZW5MYXlvdXRMb25nTmFtZShjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnNjcmVlbkxheW91dCA9Ci0gICAgICAgICAgICAgICAgKG91dC0+c2NyZWVuTGF5b3V0Jn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOTE9ORykKLSAgICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOTE9OR19BTlk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJsb25nIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnNjcmVlbkxheW91dCA9Ci0gICAgICAgICAgICAgICAgKG91dC0+c2NyZWVuTGF5b3V0Jn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOTE9ORykKLSAgICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOTE9OR19ZRVM7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJub3Rsb25nIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnNjcmVlbkxheW91dCA9Ci0gICAgICAgICAgICAgICAgKG91dC0+c2NyZWVuTGF5b3V0Jn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOTE9ORykKLSAgICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOTE9OR19OTzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRPcmllbnRhdGlvbk5hbWUoY29uc3QgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZV9jb25maWcqIG91dCkKLXsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5vcmllbnRhdGlvbiA9IG91dC0+T1JJRU5UQVRJT05fQU5ZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAicG9ydCIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5vcmllbnRhdGlvbiA9IG91dC0+T1JJRU5UQVRJT05fUE9SVDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImxhbmQiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+b3JpZW50YXRpb24gPSBvdXQtPk9SSUVOVEFUSU9OX0xBTkQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJzcXVhcmUiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+b3JpZW50YXRpb24gPSBvdXQtPk9SSUVOVEFUSU9OX1NRVUFSRTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRVaU1vZGVUeXBlTmFtZShjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+dWlNb2RlID0KLSAgICAgICAgICAgICAgICAob3V0LT51aU1vZGUmflJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX1RZUEUpCi0gICAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OlVJX01PREVfVFlQRV9BTlk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJkZXNrIikgPT0gMCkgewotICAgICAgaWYgKG91dCkgb3V0LT51aU1vZGUgPQotICAgICAgICAgICAgICAob3V0LT51aU1vZGUmflJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX1RZUEUpCi0gICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpVSV9NT0RFX1RZUEVfREVTSzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImNhciIpID09IDApIHsKLSAgICAgIGlmIChvdXQpIG91dC0+dWlNb2RlID0KLSAgICAgICAgICAgICAgKG91dC0+dWlNb2RlJn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9UWVBFKQotICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6VUlfTU9ERV9UWVBFX0NBUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRlbGV2aXNpb24iKSA9PSAwKSB7Ci0gICAgICBpZiAob3V0KSBvdXQtPnVpTW9kZSA9Ci0gICAgICAgICAgICAgIChvdXQtPnVpTW9kZSZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX1VJX01PREVfVFlQRSkKLSAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OlVJX01PREVfVFlQRV9URUxFVklTSU9OOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiYXBwbGlhbmNlIikgPT0gMCkgewotICAgICAgaWYgKG91dCkgb3V0LT51aU1vZGUgPQotICAgICAgICAgICAgICAob3V0LT51aU1vZGUmflJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX1RZUEUpCi0gICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpVSV9NT0RFX1RZUEVfQVBQTElBTkNFOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldFVpTW9kZU5pZ2h0TmFtZShjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+dWlNb2RlID0KLSAgICAgICAgICAgICAgICAob3V0LT51aU1vZGUmflJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX05JR0hUKQotICAgICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpVSV9NT0RFX05JR0hUX0FOWTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgIm5pZ2h0IikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnVpTW9kZSA9Ci0gICAgICAgICAgICAgICAgKG91dC0+dWlNb2RlJn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9OSUdIVCkKLSAgICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6VUlfTU9ERV9OSUdIVF9ZRVM7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJub3RuaWdodCIpID09IDApIHsKLSAgICAgIGlmIChvdXQpIG91dC0+dWlNb2RlID0KLSAgICAgICAgICAgICAgKG91dC0+dWlNb2RlJn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9OSUdIVCkKLSAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OlVJX01PREVfTklHSFRfTk87Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0RGVuc2l0eU5hbWUoY29uc3QgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmRlbnNpdHkgPSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfREVGQVVMVDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChzdHJjbXAobmFtZSwgIm5vZHBpIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmRlbnNpdHkgPSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfTk9ORTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChzdHJjbXAobmFtZSwgImxkcGkiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+ZGVuc2l0eSA9IFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9MT1c7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoc3RyY21wKG5hbWUsICJtZHBpIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmRlbnNpdHkgPSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfTUVESVVNOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHN0cmNtcChuYW1lLCAidHZkcGkiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+ZGVuc2l0eSA9IFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9UVjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChzdHJjbXAobmFtZSwgImhkcGkiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+ZGVuc2l0eSA9IFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9ISUdIOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ4aGRwaSIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5kZW5zaXR5ID0gUmVzVGFibGVfY29uZmlnOjpERU5TSVRZX1hISUdIOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ4eGhkcGkiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+ZGVuc2l0eSA9IFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9YWEhJR0g7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAobmFtZSwgInh4eGhkcGkiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+ZGVuc2l0eSA9IFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9YWFhISUdIOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjaGFyKiBjID0gKGNoYXIqKW5hbWU7Ci0gICAgd2hpbGUgKCpjID49ICcwJyAmJiAqYyA8PSAnOScpIHsKLSAgICAgICAgYysrOwotICAgIH0KLQotICAgIC8vIGNoZWNrIHRoYXQgd2UgaGF2ZSAnZHBpJyBhZnRlciB0aGUgbGFzdCBkaWdpdC4KLSAgICBpZiAodG91cHBlcihjWzBdKSAhPSAnRCcgfHwKLSAgICAgICAgICAgIHRvdXBwZXIoY1sxXSkgIT0gJ1AnIHx8Ci0gICAgICAgICAgICB0b3VwcGVyKGNbMl0pICE9ICdJJyB8fAotICAgICAgICAgICAgY1szXSAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyB0ZW1wb3JhcmlseSByZXBsYWNlIHRoZSBmaXJzdCBsZXR0ZXIgd2l0aCBcMCB0bwotICAgIC8vIHVzZSBhdG9pLgotICAgIGNoYXIgdG1wID0gY1swXTsKLSAgICBjWzBdID0gJ1wwJzsKLQotICAgIGludCBkID0gYXRvaShuYW1lKTsKLSAgICBjWzBdID0gdG1wOwotCi0gICAgaWYgKGQgIT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmRlbnNpdHkgPSBkOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldFRvdWNoc2NyZWVuTmFtZShjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnRvdWNoc2NyZWVuID0gb3V0LT5UT1VDSFNDUkVFTl9BTlk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJub3RvdWNoIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnRvdWNoc2NyZWVuID0gb3V0LT5UT1VDSFNDUkVFTl9OT1RPVUNIOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAic3R5bHVzIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnRvdWNoc2NyZWVuID0gb3V0LT5UT1VDSFNDUkVFTl9TVFlMVVM7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJmaW5nZXIiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+dG91Y2hzY3JlZW4gPSBvdXQtPlRPVUNIU0NSRUVOX0ZJTkdFUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRLZXlzSGlkZGVuTmFtZShjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgdWludDhfdCBtYXNrID0gMDsKLSAgICB1aW50OF90IHZhbHVlID0gMDsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgbWFzayA9IFJlc1RhYmxlX2NvbmZpZzo6TUFTS19LRVlTSElEREVOOwotICAgICAgICB2YWx1ZSA9IFJlc1RhYmxlX2NvbmZpZzo6S0VZU0hJRERFTl9BTlk7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImtleXNleHBvc2VkIikgPT0gMCkgewotICAgICAgICBtYXNrID0gUmVzVGFibGVfY29uZmlnOjpNQVNLX0tFWVNISURERU47Ci0gICAgICAgIHZhbHVlID0gUmVzVGFibGVfY29uZmlnOjpLRVlTSElEREVOX05POwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJrZXlzaGlkZGVuIikgPT0gMCkgewotICAgICAgICBtYXNrID0gUmVzVGFibGVfY29uZmlnOjpNQVNLX0tFWVNISURERU47Ci0gICAgICAgIHZhbHVlID0gUmVzVGFibGVfY29uZmlnOjpLRVlTSElEREVOX1lFUzsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAia2V5c3NvZnQiKSA9PSAwKSB7Ci0gICAgICAgIG1hc2sgPSBSZXNUYWJsZV9jb25maWc6Ok1BU0tfS0VZU0hJRERFTjsKLSAgICAgICAgdmFsdWUgPSBSZXNUYWJsZV9jb25maWc6OktFWVNISURERU5fU09GVDsKLSAgICB9Ci0KLSAgICBpZiAobWFzayAhPSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+aW5wdXRGbGFncyA9IChvdXQtPmlucHV0RmxhZ3Mmfm1hc2spIHwgdmFsdWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0S2V5Ym9hcmROYW1lKGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+a2V5Ym9hcmQgPSBvdXQtPktFWUJPQVJEX0FOWTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgIm5va2V5cyIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5rZXlib2FyZCA9IG91dC0+S0VZQk9BUkRfTk9LRVlTOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAicXdlcnR5IikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmtleWJvYXJkID0gb3V0LT5LRVlCT0FSRF9RV0VSVFk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICIxMmtleSIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5rZXlib2FyZCA9IG91dC0+S0VZQk9BUkRfMTJLRVk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0TmF2SGlkZGVuTmFtZShjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgdWludDhfdCBtYXNrID0gMDsKLSAgICB1aW50OF90IHZhbHVlID0gMDsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgbWFzayA9IFJlc1RhYmxlX2NvbmZpZzo6TUFTS19OQVZISURERU47Ci0gICAgICAgIHZhbHVlID0gUmVzVGFibGVfY29uZmlnOjpOQVZISURERU5fQU5ZOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJuYXZleHBvc2VkIikgPT0gMCkgewotICAgICAgICBtYXNrID0gUmVzVGFibGVfY29uZmlnOjpNQVNLX05BVkhJRERFTjsKLSAgICAgICAgdmFsdWUgPSBSZXNUYWJsZV9jb25maWc6Ok5BVkhJRERFTl9OTzsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibmF2aGlkZGVuIikgPT0gMCkgewotICAgICAgICBtYXNrID0gUmVzVGFibGVfY29uZmlnOjpNQVNLX05BVkhJRERFTjsKLSAgICAgICAgdmFsdWUgPSBSZXNUYWJsZV9jb25maWc6Ok5BVkhJRERFTl9ZRVM7Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgIT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmlucHV0RmxhZ3MgPSAob3V0LT5pbnB1dEZsYWdzJn5tYXNrKSB8IHZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldE5hdmlnYXRpb25OYW1lKGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+bmF2aWdhdGlvbiA9IG91dC0+TkFWSUdBVElPTl9BTlk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJub25hdiIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5uYXZpZ2F0aW9uID0gb3V0LT5OQVZJR0FUSU9OX05PTkFWOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiZHBhZCIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5uYXZpZ2F0aW9uID0gb3V0LT5OQVZJR0FUSU9OX0RQQUQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ0cmFja2JhbGwiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+bmF2aWdhdGlvbiA9IG91dC0+TkFWSUdBVElPTl9UUkFDS0JBTEw7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ3aGVlbCIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5uYXZpZ2F0aW9uID0gb3V0LT5OQVZJR0FUSU9OX1dIRUVMOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldFNjcmVlblNpemVOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSB7Ci0gICAgICAgICAgICBvdXQtPnNjcmVlbldpZHRoID0gb3V0LT5TQ1JFRU5XSURUSF9BTlk7Ci0gICAgICAgICAgICBvdXQtPnNjcmVlbkhlaWdodCA9IG91dC0+U0NSRUVOSEVJR0hUX0FOWTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiB4ID0gbmFtZTsKLSAgICB3aGlsZSAoKnggPj0gJzAnICYmICp4IDw9ICc5JykgeCsrOwotICAgIGlmICh4ID09IG5hbWUgfHwgKnggIT0gJ3gnKSByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nOCB4TmFtZShuYW1lLCB4LW5hbWUpOwotICAgIHgrKzsKLQotICAgIGNvbnN0IGNoYXIqIHkgPSB4OwotICAgIHdoaWxlICgqeSA+PSAnMCcgJiYgKnkgPD0gJzknKSB5Kys7Ci0gICAgaWYgKHkgPT0gbmFtZSB8fCAqeSAhPSAwKSByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nOCB5TmFtZSh4LCB5LXgpOwotCi0gICAgdWludDE2X3QgdyA9ICh1aW50MTZfdClhdG9pKHhOYW1lLnN0cmluZygpKTsKLSAgICB1aW50MTZfdCBoID0gKHVpbnQxNl90KWF0b2koeU5hbWUuc3RyaW5nKCkpOwotICAgIGlmICh3IDwgaCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG91dCkgewotICAgICAgICBvdXQtPnNjcmVlbldpZHRoID0gdzsKLSAgICAgICAgb3V0LT5zY3JlZW5IZWlnaHQgPSBoOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRTbWFsbGVzdFNjcmVlbldpZHRoRHBOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSB7Ci0gICAgICAgICAgICBvdXQtPnNtYWxsZXN0U2NyZWVuV2lkdGhEcCA9IG91dC0+U0NSRUVOV0lEVEhfQU5ZOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICgqbmFtZSAhPSAncycpIHJldHVybiBmYWxzZTsKLSAgICBuYW1lKys7Ci0gICAgaWYgKCpuYW1lICE9ICd3JykgcmV0dXJuIGZhbHNlOwotICAgIG5hbWUrKzsKLSAgICBjb25zdCBjaGFyKiB4ID0gbmFtZTsKLSAgICB3aGlsZSAoKnggPj0gJzAnICYmICp4IDw9ICc5JykgeCsrOwotICAgIGlmICh4ID09IG5hbWUgfHwgeFswXSAhPSAnZCcgfHwgeFsxXSAhPSAncCcgfHwgeFsyXSAhPSAwKSByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nOCB4TmFtZShuYW1lLCB4LW5hbWUpOwotCi0gICAgaWYgKG91dCkgewotICAgICAgICBvdXQtPnNtYWxsZXN0U2NyZWVuV2lkdGhEcCA9ICh1aW50MTZfdClhdG9pKHhOYW1lLnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0U2NyZWVuV2lkdGhEcE5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIHsKLSAgICAgICAgICAgIG91dC0+c2NyZWVuV2lkdGhEcCA9IG91dC0+U0NSRUVOV0lEVEhfQU5ZOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICgqbmFtZSAhPSAndycpIHJldHVybiBmYWxzZTsKLSAgICBuYW1lKys7Ci0gICAgY29uc3QgY2hhciogeCA9IG5hbWU7Ci0gICAgd2hpbGUgKCp4ID49ICcwJyAmJiAqeCA8PSAnOScpIHgrKzsKLSAgICBpZiAoeCA9PSBuYW1lIHx8IHhbMF0gIT0gJ2QnIHx8IHhbMV0gIT0gJ3AnIHx8IHhbMl0gIT0gMCkgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZzggeE5hbWUobmFtZSwgeC1uYW1lKTsKLQotICAgIGlmIChvdXQpIHsKLSAgICAgICAgb3V0LT5zY3JlZW5XaWR0aERwID0gKHVpbnQxNl90KWF0b2koeE5hbWUuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRTY3JlZW5IZWlnaHREcE5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIHsKLSAgICAgICAgICAgIG91dC0+c2NyZWVuSGVpZ2h0RHAgPSBvdXQtPlNDUkVFTldJRFRIX0FOWTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoKm5hbWUgIT0gJ2gnKSByZXR1cm4gZmFsc2U7Ci0gICAgbmFtZSsrOwotICAgIGNvbnN0IGNoYXIqIHggPSBuYW1lOwotICAgIHdoaWxlICgqeCA+PSAnMCcgJiYgKnggPD0gJzknKSB4Kys7Ci0gICAgaWYgKHggPT0gbmFtZSB8fCB4WzBdICE9ICdkJyB8fCB4WzFdICE9ICdwJyB8fCB4WzJdICE9IDApIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmc4IHhOYW1lKG5hbWUsIHgtbmFtZSk7Ci0KLSAgICBpZiAob3V0KSB7Ci0gICAgICAgIG91dC0+c2NyZWVuSGVpZ2h0RHAgPSAodWludDE2X3QpYXRvaSh4TmFtZS5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldFZlcnNpb25OYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSB7Ci0gICAgICAgICAgICBvdXQtPnNka1ZlcnNpb24gPSBvdXQtPlNES1ZFUlNJT05fQU5ZOwotICAgICAgICAgICAgb3V0LT5taW5vclZlcnNpb24gPSBvdXQtPk1JTk9SVkVSU0lPTl9BTlk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCpuYW1lICE9ICd2JykgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbmFtZSsrOwotICAgIGNvbnN0IGNoYXIqIHMgPSBuYW1lOwotICAgIHdoaWxlICgqcyA+PSAnMCcgJiYgKnMgPD0gJzknKSBzKys7Ci0gICAgaWYgKHMgPT0gbmFtZSB8fCAqcyAhPSAwKSByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nOCBzZGtOYW1lKG5hbWUsIHMtbmFtZSk7Ci0KLSAgICBpZiAob3V0KSB7Ci0gICAgICAgIG91dC0+c2RrVmVyc2lvbiA9ICh1aW50MTZfdClhdG9pKHNka05hbWUuc3RyaW5nKCkpOwotICAgICAgICBvdXQtPm1pbm9yVmVyc2lvbiA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBBYXB0R3JvdXBFbnRyeTo6Y29tcGFyZShjb25zdCBBYXB0R3JvdXBFbnRyeSYgbykgY29uc3QKLXsKLSAgICBpbnQgdiA9IG1jYy5jb21wYXJlKG8ubWNjKTsKLSAgICBpZiAodiA9PSAwKSB2ID0gbW5jLmNvbXBhcmUoby5tbmMpOwotICAgIGlmICh2ID09IDApIHYgPSBsb2NhbGUuY29tcGFyZShvLmxvY2FsZSk7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IGxheW91dERpcmVjdGlvbi5jb21wYXJlKG8ubGF5b3V0RGlyZWN0aW9uKTsKLSAgICBpZiAodiA9PSAwKSB2ID0gdmVuZG9yLmNvbXBhcmUoby52ZW5kb3IpOwotICAgIGlmICh2ID09IDApIHYgPSBzbWFsbGVzdFNjcmVlbldpZHRoRHAuY29tcGFyZShvLnNtYWxsZXN0U2NyZWVuV2lkdGhEcCk7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IHNjcmVlbldpZHRoRHAuY29tcGFyZShvLnNjcmVlbldpZHRoRHApOwotICAgIGlmICh2ID09IDApIHYgPSBzY3JlZW5IZWlnaHREcC5jb21wYXJlKG8uc2NyZWVuSGVpZ2h0RHApOwotICAgIGlmICh2ID09IDApIHYgPSBzY3JlZW5MYXlvdXRTaXplLmNvbXBhcmUoby5zY3JlZW5MYXlvdXRTaXplKTsKLSAgICBpZiAodiA9PSAwKSB2ID0gc2NyZWVuTGF5b3V0TG9uZy5jb21wYXJlKG8uc2NyZWVuTGF5b3V0TG9uZyk7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IG9yaWVudGF0aW9uLmNvbXBhcmUoby5vcmllbnRhdGlvbik7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IHVpTW9kZVR5cGUuY29tcGFyZShvLnVpTW9kZVR5cGUpOwotICAgIGlmICh2ID09IDApIHYgPSB1aU1vZGVOaWdodC5jb21wYXJlKG8udWlNb2RlTmlnaHQpOwotICAgIGlmICh2ID09IDApIHYgPSBkZW5zaXR5LmNvbXBhcmUoby5kZW5zaXR5KTsKLSAgICBpZiAodiA9PSAwKSB2ID0gdG91Y2hzY3JlZW4uY29tcGFyZShvLnRvdWNoc2NyZWVuKTsKLSAgICBpZiAodiA9PSAwKSB2ID0ga2V5c0hpZGRlbi5jb21wYXJlKG8ua2V5c0hpZGRlbik7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IGtleWJvYXJkLmNvbXBhcmUoby5rZXlib2FyZCk7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IG5hdkhpZGRlbi5jb21wYXJlKG8ubmF2SGlkZGVuKTsKLSAgICBpZiAodiA9PSAwKSB2ID0gbmF2aWdhdGlvbi5jb21wYXJlKG8ubmF2aWdhdGlvbik7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IHNjcmVlblNpemUuY29tcGFyZShvLnNjcmVlblNpemUpOwotICAgIGlmICh2ID09IDApIHYgPSB2ZXJzaW9uLmNvbXBhcmUoby52ZXJzaW9uKTsKLSAgICByZXR1cm4gdjsKLX0KLQotY29uc3QgUmVzVGFibGVfY29uZmlnJiBBYXB0R3JvdXBFbnRyeTo6dG9QYXJhbXMoKSBjb25zdAotewotICAgIGlmICghbVBhcmFtc0NoYW5nZWQpIHsKLSAgICAgICAgcmV0dXJuIG1QYXJhbXM7Ci0gICAgfQotCi0gICAgbVBhcmFtc0NoYW5nZWQgPSBmYWxzZTsKLSAgICBSZXNUYWJsZV9jb25maWcmIHBhcmFtcyhtUGFyYW1zKTsKLSAgICBtZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOwotICAgIGdldE1jY05hbWUobWNjLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRNbmNOYW1lKG1uYy5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0TG9jYWxlTmFtZShsb2NhbGUuc3RyaW5nKCksICZwYXJhbXMpOwotICAgIGdldExheW91dERpcmVjdGlvbk5hbWUobGF5b3V0RGlyZWN0aW9uLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRTbWFsbGVzdFNjcmVlbldpZHRoRHBOYW1lKHNtYWxsZXN0U2NyZWVuV2lkdGhEcC5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0U2NyZWVuV2lkdGhEcE5hbWUoc2NyZWVuV2lkdGhEcC5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0U2NyZWVuSGVpZ2h0RHBOYW1lKHNjcmVlbkhlaWdodERwLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRTY3JlZW5MYXlvdXRTaXplTmFtZShzY3JlZW5MYXlvdXRTaXplLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRTY3JlZW5MYXlvdXRMb25nTmFtZShzY3JlZW5MYXlvdXRMb25nLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRPcmllbnRhdGlvbk5hbWUob3JpZW50YXRpb24uc3RyaW5nKCksICZwYXJhbXMpOwotICAgIGdldFVpTW9kZVR5cGVOYW1lKHVpTW9kZVR5cGUuc3RyaW5nKCksICZwYXJhbXMpOwotICAgIGdldFVpTW9kZU5pZ2h0TmFtZSh1aU1vZGVOaWdodC5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0RGVuc2l0eU5hbWUoZGVuc2l0eS5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0VG91Y2hzY3JlZW5OYW1lKHRvdWNoc2NyZWVuLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRLZXlzSGlkZGVuTmFtZShrZXlzSGlkZGVuLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRLZXlib2FyZE5hbWUoa2V5Ym9hcmQuc3RyaW5nKCksICZwYXJhbXMpOwotICAgIGdldE5hdkhpZGRlbk5hbWUobmF2SGlkZGVuLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXROYXZpZ2F0aW9uTmFtZShuYXZpZ2F0aW9uLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRTY3JlZW5TaXplTmFtZShzY3JlZW5TaXplLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRWZXJzaW9uTmFtZSh2ZXJzaW9uLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICAKLSAgICAvLyBGaXggdXAgdmVyc2lvbiBudW1iZXIgYmFzZWQgb24gc3BlY2lmaWVkIHBhcmFtZXRlcnMuCi0gICAgaW50IG1pblNkayA9IDA7Ci0gICAgaWYgKHBhcmFtcy5zbWFsbGVzdFNjcmVlbldpZHRoRHAgIT0gUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5XSURUSF9BTlkKLSAgICAgICAgICAgIHx8IHBhcmFtcy5zY3JlZW5XaWR0aERwICE9IFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOV0lEVEhfQU5ZCi0gICAgICAgICAgICB8fCBwYXJhbXMuc2NyZWVuSGVpZ2h0RHAgIT0gUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5IRUlHSFRfQU5ZKSB7Ci0gICAgICAgIG1pblNkayA9IFNES19IT05FWUNPTUJfTVIyOwotICAgIH0gZWxzZSBpZiAoKHBhcmFtcy51aU1vZGUmUmVzVGFibGVfY29uZmlnOjpNQVNLX1VJX01PREVfVFlQRSkKLSAgICAgICAgICAgICAgICAhPSBSZXNUYWJsZV9jb25maWc6OlVJX01PREVfVFlQRV9BTlkKLSAgICAgICAgICAgIHx8ICAocGFyYW1zLnVpTW9kZSZSZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9OSUdIVCkKLSAgICAgICAgICAgICAgICAhPSBSZXNUYWJsZV9jb25maWc6OlVJX01PREVfTklHSFRfQU5ZKSB7Ci0gICAgICAgIG1pblNkayA9IFNES19GUk9ZTzsKLSAgICB9IGVsc2UgaWYgKChwYXJhbXMuc2NyZWVuTGF5b3V0JlJlc1RhYmxlX2NvbmZpZzo6TUFTS19TQ1JFRU5TSVpFKQotICAgICAgICAgICAgICAgICE9IFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOU0laRV9BTlkKLSAgICAgICAgICAgIHx8ICAocGFyYW1zLnNjcmVlbkxheW91dCZSZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOTE9ORykKLSAgICAgICAgICAgICAgICAhPSBSZXNUYWJsZV9jb25maWc6OlNDUkVFTkxPTkdfQU5ZCi0gICAgICAgICAgICB8fCBwYXJhbXMuZGVuc2l0eSAhPSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfREVGQVVMVCkgewotICAgICAgICBtaW5TZGsgPSBTREtfRE9OVVQ7Ci0gICAgfQotICAgIAotICAgIGlmIChtaW5TZGsgPiBwYXJhbXMuc2RrVmVyc2lvbikgewotICAgICAgICBwYXJhbXMuc2RrVmVyc2lvbiA9IG1pblNkazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHBhcmFtczsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi12b2lkKiBBYXB0RmlsZTo6ZWRpdERhdGEoc2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPD0gbUJ1ZmZlclNpemUpIHsKLSAgICAgICAgbURhdGFTaXplID0gc2l6ZTsKLSAgICAgICAgcmV0dXJuIG1EYXRhOwotICAgIH0KLSAgICBzaXplX3QgYWxsb2NTaXplID0gKHNpemUqMykvMjsKLSAgICB2b2lkKiBidWYgPSByZWFsbG9jKG1EYXRhLCBhbGxvY1NpemUpOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbURhdGEgPSBidWY7Ci0gICAgbURhdGFTaXplID0gc2l6ZTsKLSAgICBtQnVmZmVyU2l6ZSA9IGFsbG9jU2l6ZTsKLSAgICByZXR1cm4gYnVmOwotfQotCi12b2lkKiBBYXB0RmlsZTo6ZWRpdERhdGEoc2l6ZV90KiBvdXRTaXplKQotewotICAgIGlmIChvdXRTaXplKSB7Ci0gICAgICAgICpvdXRTaXplID0gbURhdGFTaXplOwotICAgIH0KLSAgICByZXR1cm4gbURhdGE7Ci19Ci0KLXZvaWQqIEFhcHRGaWxlOjpwYWREYXRhKHNpemVfdCB3b3JkU2l6ZSkKLXsKLSAgICBjb25zdCBzaXplX3QgZXh0cmEgPSBtRGF0YVNpemUld29yZFNpemU7Ci0gICAgaWYgKGV4dHJhID09IDApIHsKLSAgICAgICAgcmV0dXJuIG1EYXRhOwotICAgIH0KLQotICAgIHNpemVfdCBpbml0aWFsID0gbURhdGFTaXplOwotICAgIHZvaWQqIGRhdGEgPSBlZGl0RGF0YShpbml0aWFsKyh3b3JkU2l6ZS1leHRyYSkpOwotICAgIGlmIChkYXRhICE9IE5VTEwpIHsKLSAgICAgICAgbWVtc2V0KCgodWludDhfdCopZGF0YSkgKyBpbml0aWFsLCAwLCB3b3JkU2l6ZS1leHRyYSk7Ci0gICAgfQotICAgIHJldHVybiBkYXRhOwotfQotCi1zdGF0dXNfdCBBYXB0RmlsZTo6d3JpdGVEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIHNpemVfdCBlbmQgPSBtRGF0YVNpemU7Ci0gICAgc2l6ZV90IHRvdGFsID0gc2l6ZSArIGVuZDsKLSAgICB2b2lkKiBidWYgPSBlZGl0RGF0YSh0b3RhbCk7Ci0gICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICBtZW1jcHkoKChjaGFyKilidWYpK2VuZCwgZGF0YSwgc2l6ZSk7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi12b2lkIEFhcHRGaWxlOjpjbGVhckRhdGEoKQotewotICAgIGlmIChtRGF0YSAhPSBOVUxMKSBmcmVlKG1EYXRhKTsKLSAgICBtRGF0YSA9IE5VTEw7Ci0gICAgbURhdGFTaXplID0gMDsKLSAgICBtQnVmZmVyU2l6ZSA9IDA7Ci19Ci0KLVN0cmluZzggQWFwdEZpbGU6OmdldFByaW50YWJsZVNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGhhc0RhdGEoKSkgewotICAgICAgICBTdHJpbmc4IG5hbWUobUdyb3VwRW50cnkudG9EaXJOYW1lKFN0cmluZzgoKSkpOwotICAgICAgICBuYW1lLmFwcGVuZFBhdGgobVBhdGgpOwotICAgICAgICBuYW1lLmFwcGVuZCgiICNnZW5lcmF0ZWQiKTsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotICAgIHJldHVybiBtU291cmNlRmlsZTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0dXNfdCBBYXB0R3JvdXA6OmFkZEZpbGUoY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlKQotewotICAgIGlmIChtRmlsZXMuaW5kZXhPZktleShmaWxlLT5nZXRHcm91cEVudHJ5KCkpIDwgMCkgewotICAgICAgICBmaWxlLT5tUGF0aCA9IG1QYXRoOwotICAgICAgICBtRmlsZXMuYWRkKGZpbGUtPmdldEdyb3VwRW50cnkoKSwgZmlsZSk7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0KLSNpZiAwCi0gICAgcHJpbnRmKCJFcnJvciBhZGRpbmcgZmlsZSAlczogZ3JvdXAgJXMgYWxyZWFkeSBleGlzdHMgaW4gbGVhZj0lcyBwYXRoPSVzXG4iLAotICAgICAgICAgICAgZmlsZS0+Z2V0U291cmNlRmlsZSgpLnN0cmluZygpLAotICAgICAgICAgICAgZmlsZS0+Z2V0R3JvdXBFbnRyeSgpLnRvRGlyTmFtZShTdHJpbmc4KCkpLnN0cmluZygpLAotICAgICAgICAgICAgbUxlYWYuc3RyaW5nKCksIG1QYXRoLnN0cmluZygpKTsKLSNlbmRpZgotCi0gICAgU291cmNlUG9zKGZpbGUtPmdldFNvdXJjZUZpbGUoKSwgLTEpLmVycm9yKCJEdXBsaWNhdGUgZmlsZS5cbiVzOiBPcmlnaW5hbCBpcyBoZXJlLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpKTsKLSAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLX0KLQotdm9pZCBBYXB0R3JvdXA6OnJlbW92ZUZpbGUoc2l6ZV90IGluZGV4KQotewotCW1GaWxlcy5yZW1vdmVJdGVtc0F0KGluZGV4KTsKLX0KLQotdm9pZCBBYXB0R3JvdXA6OnByaW50KGNvbnN0IFN0cmluZzgmIHByZWZpeCkgY29uc3QKLXsKLSAgICBwcmludGYoIiVzJXNcbiIsIHByZWZpeC5zdHJpbmcoKSwgZ2V0UGF0aCgpLnN0cmluZygpKTsKLSAgICBjb25zdCBzaXplX3QgTj1tRmlsZXMuc2l6ZSgpOwotICAgIHNpemVfdCBpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBzcDxBYXB0RmlsZT4gZmlsZSA9IG1GaWxlcy52YWx1ZUF0KGkpOwotICAgICAgICBjb25zdCBBYXB0R3JvdXBFbnRyeSYgZSA9IGZpbGUtPmdldEdyb3VwRW50cnkoKTsKLSAgICAgICAgaWYgKGZpbGUtPmhhc0RhdGEoKSkgewotICAgICAgICAgICAgcHJpbnRmKCIlcyAgR2VuOiAoJXMpICVkIGJ5dGVzXG4iLCBwcmVmaXguc3RyaW5nKCksIGUudG9EaXJOYW1lKFN0cmluZzgoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIChpbnQpZmlsZS0+Z2V0U2l6ZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZigiJXMgIFNyYzogKCVzKSAlc1xuIiwgcHJlZml4LnN0cmluZygpLCBlLnRvRGlyTmFtZShTdHJpbmc4KCkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy9wcmludGYoIiVzICBGaWxlIEdyb3VwIEVudHJ5OiAlc1xuIiwgcHJlZml4LnN0cmluZygpLAotICAgICAgICAvLyAgICAgICAgZmlsZS0+Z2V0R3JvdXBFbnRyeSgpLnRvRGlyTmFtZShTdHJpbmc4KCkpLnN0cmluZygpKTsKLSAgICB9Ci19Ci0KLVN0cmluZzggQWFwdEdyb3VwOjpnZXRQcmludGFibGVTb3VyY2UoKSBjb25zdAotewotICAgIGlmIChtRmlsZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAvLyBBcmJpdHJhcmlseSBwdWxsIHRoZSBmaXJzdCBzb3VyY2UgZmlsZSBvdXQgb2YgdGhlIGxpc3QuCi0gICAgICAgIHJldHVybiBtRmlsZXMudmFsdWVBdCgwKS0+Z2V0UHJpbnRhYmxlU291cmNlKCk7Ci0gICAgfQotCi0gICAgLy8gU2hvdWxkIG5ldmVyIGhpdCB0aGlzIGNhc2UsIGJ1dCB0byBiZSBzYWZlLi4uCi0gICAgcmV0dXJuIGdldFBhdGgoKTsKLQotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXR1c190IEFhcHREaXI6OmFkZEZpbGUoY29uc3QgU3RyaW5nOCYgbmFtZSwgY29uc3Qgc3A8QWFwdEdyb3VwPiYgZmlsZSkKLXsKLSAgICBpZiAobUZpbGVzLmluZGV4T2ZLZXkobmFtZSkgPj0gMCkgewotICAgICAgICByZXR1cm4gQUxSRUFEWV9FWElTVFM7Ci0gICAgfQotICAgIG1GaWxlcy5hZGQobmFtZSwgZmlsZSk7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBBYXB0RGlyOjphZGREaXIoY29uc3QgU3RyaW5nOCYgbmFtZSwgY29uc3Qgc3A8QWFwdERpcj4mIGRpcikKLXsKLSAgICBpZiAobURpcnMuaW5kZXhPZktleShuYW1lKSA+PSAwKSB7Ci0gICAgICAgIHJldHVybiBBTFJFQURZX0VYSVNUUzsKLSAgICB9Ci0gICAgbURpcnMuYWRkKG5hbWUsIGRpcik7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zcDxBYXB0RGlyPiBBYXB0RGlyOjptYWtlRGlyKGNvbnN0IFN0cmluZzgmIHBhdGgpCi17Ci0gICAgU3RyaW5nOCBuYW1lOwotICAgIFN0cmluZzggcmVtYWluID0gcGF0aDsKLQotICAgIHNwPEFhcHREaXI+IHN1YmRpciA9IHRoaXM7Ci0gICAgd2hpbGUgKG5hbWUgPSByZW1haW4ud2Fsa1BhdGgoJnJlbWFpbiksIHJlbWFpbiAhPSAiIikgewotICAgICAgICBzdWJkaXIgPSBzdWJkaXItPm1ha2VEaXIobmFtZSk7Ci0gICAgfQotCi0gICAgc3NpemVfdCBpID0gc3ViZGlyLT5tRGlycy5pbmRleE9mS2V5KG5hbWUpOwotICAgIGlmIChpID49IDApIHsKLSAgICAgICAgcmV0dXJuIHN1YmRpci0+bURpcnMudmFsdWVBdChpKTsKLSAgICB9Ci0gICAgc3A8QWFwdERpcj4gZGlyID0gbmV3IEFhcHREaXIobmFtZSwgc3ViZGlyLT5tUGF0aC5hcHBlbmRQYXRoQ29weShuYW1lKSk7Ci0gICAgc3ViZGlyLT5tRGlycy5hZGQobmFtZSwgZGlyKTsKLSAgICByZXR1cm4gZGlyOwotfQotCi12b2lkIEFhcHREaXI6OnJlbW92ZUZpbGUoY29uc3QgU3RyaW5nOCYgbmFtZSkKLXsKLSAgICBtRmlsZXMucmVtb3ZlSXRlbShuYW1lKTsKLX0KLQotdm9pZCBBYXB0RGlyOjpyZW1vdmVEaXIoY29uc3QgU3RyaW5nOCYgbmFtZSkKLXsKLSAgICBtRGlycy5yZW1vdmVJdGVtKG5hbWUpOwotfQotCi1zdGF0dXNfdCBBYXB0RGlyOjphZGRMZWFmRmlsZShjb25zdCBTdHJpbmc4JiBsZWFmTmFtZSwgY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlKQotewotICAgIHNwPEFhcHRHcm91cD4gZ3JvdXA7Ci0gICAgaWYgKG1GaWxlcy5pbmRleE9mS2V5KGxlYWZOYW1lKSA+PSAwKSB7Ci0gICAgICAgIGdyb3VwID0gbUZpbGVzLnZhbHVlRm9yKGxlYWZOYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBncm91cCA9IG5ldyBBYXB0R3JvdXAobGVhZk5hbWUsIG1QYXRoLmFwcGVuZFBhdGhDb3B5KGxlYWZOYW1lKSk7Ci0gICAgICAgIG1GaWxlcy5hZGQobGVhZk5hbWUsIGdyb3VwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ3JvdXAtPmFkZEZpbGUoZmlsZSk7Ci19Ci0KLXNzaXplX3QgQWFwdERpcjo6c2x1cnBGdWxsVHJlZShCdW5kbGUqIGJ1bmRsZSwgY29uc3QgU3RyaW5nOCYgc3JjRGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFhcHRHcm91cEVudHJ5JiBraW5kLCBjb25zdCBTdHJpbmc4JiByZXNUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPEZpbGVQYXRoU3RvcmU+JiBmdWxsUmVzUGF0aHMpCi17Ci0gICAgVmVjdG9yPFN0cmluZzg+IGZpbGVOYW1lczsKLSAgICB7Ci0gICAgICAgIERJUiogZGlyID0gTlVMTDsKLQotICAgICAgICBkaXIgPSBvcGVuZGlyKHNyY0Rpci5zdHJpbmcoKSk7Ci0gICAgICAgIGlmIChkaXIgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogb3BlbmRpciglcyk6ICVzXG4iLCBzcmNEaXIuc3RyaW5nKCksIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNsdXJwIHRoZSBmaWxlbmFtZXMgb3V0IG9mIHRoZSBkaXJlY3RvcnkuCi0gICAgICAgICAqLwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgc3RydWN0IGRpcmVudCogZW50cnk7Ci0KLSAgICAgICAgICAgIGVudHJ5ID0gcmVhZGRpcihkaXIpOwotICAgICAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChpc0hpZGRlbihzcmNEaXIuc3RyaW5nKCksIGVudHJ5LT5kX25hbWUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBTdHJpbmc4IG5hbWUoZW50cnktPmRfbmFtZSk7Ci0gICAgICAgICAgICBmaWxlTmFtZXMuYWRkKG5hbWUpOwotICAgICAgICAgICAgLy8gQWRkIGZ1bGx5IHF1YWxpZmllZCBwYXRoIGZvciBkZXBlbmRlbmN5IHB1cnBvc2VzCi0gICAgICAgICAgICAvLyBpZiB3ZSdyZSBjb2xsZWN0aW5nIHRoZW0KLSAgICAgICAgICAgIGlmIChmdWxsUmVzUGF0aHMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZ1bGxSZXNQYXRocy0+YWRkKHNyY0Rpci5hcHBlbmRQYXRoQ29weShuYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2xvc2VkaXIoZGlyKTsKLSAgICB9Ci0KLSAgICBzc2l6ZV90IGNvdW50ID0gMDsKLQotICAgIC8qCi0gICAgICogU3Rhc2ggYXdheSB0aGUgZmlsZXMgYW5kIHJlY3Vyc2l2ZWx5IGRlc2NlbmQgaW50byBzdWJkaXJlY3Rvcmllcy4KLSAgICAgKi8KLSAgICBjb25zdCBzaXplX3QgTiA9IGZpbGVOYW1lcy5zaXplKCk7Ci0gICAgc2l6ZV90IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykgewotICAgICAgICBTdHJpbmc4IHBhdGhOYW1lKHNyY0Rpcik7Ci0gICAgICAgIEZpbGVUeXBlIHR5cGU7Ci0KLSAgICAgICAgcGF0aE5hbWUuYXBwZW5kUGF0aChmaWxlTmFtZXNbaV0uc3RyaW5nKCkpOwotICAgICAgICB0eXBlID0gZ2V0RmlsZVR5cGUocGF0aE5hbWUuc3RyaW5nKCkpOwotICAgICAgICBpZiAodHlwZSA9PSBrRmlsZVR5cGVEaXJlY3RvcnkpIHsKLSAgICAgICAgICAgIHNwPEFhcHREaXI+IHN1YmRpcjsKLSAgICAgICAgICAgIGJvb2wgbm90QWRkZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtRGlycy5pbmRleE9mS2V5KGZpbGVOYW1lc1tpXSkgPj0gMCkgewotICAgICAgICAgICAgICAgIHN1YmRpciA9IG1EaXJzLnZhbHVlRm9yKGZpbGVOYW1lc1tpXSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN1YmRpciA9IG5ldyBBYXB0RGlyKGZpbGVOYW1lc1tpXSwgbVBhdGguYXBwZW5kUGF0aENvcHkoZmlsZU5hbWVzW2ldKSk7Ci0gICAgICAgICAgICAgICAgbm90QWRkZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3NpemVfdCByZXMgPSBzdWJkaXItPnNsdXJwRnVsbFRyZWUoYnVuZGxlLCBwYXRoTmFtZSwga2luZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1R5cGUsIGZ1bGxSZXNQYXRocyk7Ci0gICAgICAgICAgICBpZiAocmVzIDwgTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlcyA+IDAgJiYgbm90QWRkZWQpIHsKLSAgICAgICAgICAgICAgICBtRGlycy5hZGQoZmlsZU5hbWVzW2ldLCBzdWJkaXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY291bnQgKz0gcmVzOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0ga0ZpbGVUeXBlUmVndWxhcikgewotICAgICAgICAgICAgc3A8QWFwdEZpbGU+IGZpbGUgPSBuZXcgQWFwdEZpbGUocGF0aE5hbWUsIGtpbmQsIHJlc1R5cGUpOwotICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gYWRkTGVhZkZpbGUoZmlsZU5hbWVzW2ldLCBmaWxlKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb3VudCsrOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgICAoaWdub3Jpbmcgbm9uLWZpbGUvZGlyICclcycpXG4iLCBwYXRoTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXR1c190IEFhcHREaXI6OnZhbGlkYXRlKCkgY29uc3QKLXsKLSAgICBjb25zdCBzaXplX3QgTkYgPSBtRmlsZXMuc2l6ZSgpOwotICAgIGNvbnN0IHNpemVfdCBORCA9IG1EaXJzLnNpemUoKTsKLSAgICBzaXplX3QgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgTkY7IGkrKykgewotICAgICAgICBpZiAoIXZhbGlkYXRlRmlsZU5hbWUobUZpbGVzLnZhbHVlQXQoaSktPmdldExlYWYoKS5zdHJpbmcoKSkpIHsKLSAgICAgICAgICAgIFNvdXJjZVBvcyhtRmlsZXMudmFsdWVBdChpKS0+Z2V0UHJpbnRhYmxlU291cmNlKCksIC0xKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgZmlsZW5hbWUuICBVbmFibGUgdG8gYWRkLiIpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplX3QgajsKLSAgICAgICAgZm9yIChqID0gaSsxOyBqIDwgTkY7IGorKykgewotICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAobUZpbGVzLnZhbHVlQXQoaSktPmdldExlYWYoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GaWxlcy52YWx1ZUF0KGopLT5nZXRMZWFmKCkuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3MobUZpbGVzLnZhbHVlQXQoaSktPmdldFByaW50YWJsZVNvdXJjZSgpLCAtMSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiRmlsZSBpcyBjYXNlLWluc2Vuc2l0aXZlIGVxdWl2YWxlbnQgdG86ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1GaWxlcy52YWx1ZUF0KGopLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFRPRE86IGlmICIuZ3oiLCBjaGVjayBmb3Igbm9uLS5nejsgaWYgbm9uLSwgY2hlY2sgZm9yICIuZ3oiCi0gICAgICAgICAgICAvLyAodGhpcyBpcyBtb3N0bHkgY2F1Z2h0IGJ5IHRoZSAibWFya2VkIiBzdHVmZiwgYmVsb3cpCi0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGogPSAwOyBqIDwgTkQ7IGorKykgewotICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAobUZpbGVzLnZhbHVlQXQoaSktPmdldExlYWYoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EaXJzLnZhbHVlQXQoaiktPmdldExlYWYoKS5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhtRmlsZXMudmFsdWVBdChpKS0+Z2V0UHJpbnRhYmxlU291cmNlKCksIC0xKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlIGNvbmZsaWN0cyB3aXRoIGRpciBmcm9tOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtRGlycy52YWx1ZUF0KGopLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgTkQ7IGkrKykgewotICAgICAgICBpZiAoIXZhbGlkYXRlRmlsZU5hbWUobURpcnMudmFsdWVBdChpKS0+Z2V0TGVhZigpLnN0cmluZygpKSkgewotICAgICAgICAgICAgU291cmNlUG9zKG1EaXJzLnZhbHVlQXQoaSktPmdldFByaW50YWJsZVNvdXJjZSgpLCAtMSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGRpcmVjdG9yeSBuYW1lLCB1bmFibGUgdG8gYWRkLiIpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplX3QgajsKLSAgICAgICAgZm9yIChqID0gaSsxOyBqIDwgTkQ7IGorKykgewotICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAobURpcnMudmFsdWVBdChpKS0+Z2V0TGVhZigpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbURpcnMudmFsdWVBdChqKS0+Z2V0TGVhZigpLnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zKG1EaXJzLnZhbHVlQXQoaSktPmdldFByaW50YWJsZVNvdXJjZSgpLCAtMSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiRGlyZWN0b3J5IGlzIGNhc2UtaW5zZW5zaXRpdmUgZXF1aXZhbGVudCB0bzogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgbURpcnMudmFsdWVBdChqKS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdHVzX3QgZXJyID0gbURpcnMudmFsdWVBdChpKS0+dmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotdm9pZCBBYXB0RGlyOjpwcmludChjb25zdCBTdHJpbmc4JiBwcmVmaXgpIGNvbnN0Ci17Ci0gICAgY29uc3Qgc2l6ZV90IE5EPWdldERpcnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IGk7Ci0gICAgZm9yIChpPTA7IGk8TkQ7IGkrKykgewotICAgICAgICBnZXREaXJzKCkudmFsdWVBdChpKS0+cHJpbnQocHJlZml4KTsKLSAgICB9Ci0KLSAgICBjb25zdCBzaXplX3QgTkY9Z2V0RmlsZXMoKS5zaXplKCk7Ci0gICAgZm9yIChpPTA7IGk8TkY7IGkrKykgewotICAgICAgICBnZXRGaWxlcygpLnZhbHVlQXQoaSktPnByaW50KHByZWZpeCk7Ci0gICAgfQotfQotCi1TdHJpbmc4IEFhcHREaXI6OmdldFByaW50YWJsZVNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1GaWxlcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIC8vIEFyYml0cmFyaWx5IHB1bGwgdGhlIGZpcnN0IGZpbGUgb3V0IG9mIHRoZSBsaXN0IGFzIHRoZSBzb3VyY2UgZGlyLgotICAgICAgICByZXR1cm4gbUZpbGVzLnZhbHVlQXQoMCktPmdldFByaW50YWJsZVNvdXJjZSgpLmdldFBhdGhEaXIoKTsKLSAgICB9Ci0gICAgaWYgKG1EaXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgLy8gT3IgYXJiaXRyYXJpbHkgcHVsbCB0aGUgZmlyc3QgZGlyIG91dCBvZiB0aGUgbGlzdCBhcyB0aGUgc291cmNlIGRpci4KLSAgICAgICAgcmV0dXJuIG1EaXJzLnZhbHVlQXQoMCktPmdldFByaW50YWJsZVNvdXJjZSgpLmdldFBhdGhEaXIoKTsKLSAgICB9Ci0KLSAgICAvLyBTaG91bGQgbmV2ZXIgaGl0IHRoaXMgY2FzZSwgYnV0IHRvIGJlIHNhZmUuLi4KLSAgICByZXR1cm4gbVBhdGg7Ci0KLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0dXNfdCBBYXB0U3ltYm9sczo6YXBwbHlKYXZhU3ltYm9scyhjb25zdCBzcDxBYXB0U3ltYm9scz4mIGphdmFTeW1ib2xzKQotewotICAgIHN0YXR1c190IGVyciA9IE5PX0VSUk9SOwotICAgIHNpemVfdCBOID0gamF2YVN5bWJvbHMtPm1TeW1ib2xzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZzgmIG5hbWUgPSBqYXZhU3ltYm9scy0+bVN5bWJvbHMua2V5QXQoaSk7Ci0gICAgICAgIGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgZW50cnkgPSBqYXZhU3ltYm9scy0+bVN5bWJvbHMudmFsdWVBdChpKTsKLSAgICAgICAgc3NpemVfdCBwb3MgPSBtU3ltYm9scy5pbmRleE9mS2V5KG5hbWUpOwotICAgICAgICBpZiAocG9zIDwgMCkgewotICAgICAgICAgICAgZW50cnkuc291cmNlUG9zLmVycm9yKCJTeW1ib2wgJyVzJyBkZWNsYXJlZCB3aXRoIDxqYXZhLXN5bWJvbD4gbm90IGRlZmluZWRcbiIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgZXJyID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vcHJpbnRmKCIqKioqIHNldHRpbmcgc3ltYm9sICMlZC8lZCAlcyB0byBpc0phdmFTeW1ib2w9JWRcbiIsCi0gICAgICAgIC8vICAgICAgICBpLCBOLCBuYW1lLnN0cmluZygpLCBlbnRyeS5pc0phdmFTeW1ib2wgPyAxIDogMCk7Ci0gICAgICAgIG1TeW1ib2xzLmVkaXRWYWx1ZUF0KHBvcykuaXNKYXZhU3ltYm9sID0gZW50cnkuaXNKYXZhU3ltYm9sOwotICAgIH0KLQotICAgIE4gPSBqYXZhU3ltYm9scy0+bU5lc3RlZFN5bWJvbHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY29uc3QgU3RyaW5nOCYgbmFtZSA9IGphdmFTeW1ib2xzLT5tTmVzdGVkU3ltYm9scy5rZXlBdChpKTsKLSAgICAgICAgY29uc3Qgc3A8QWFwdFN5bWJvbHM+JiBzeW1ib2xzID0gamF2YVN5bWJvbHMtPm1OZXN0ZWRTeW1ib2xzLnZhbHVlQXQoaSk7Ci0gICAgICAgIHNzaXplX3QgcG9zID0gbU5lc3RlZFN5bWJvbHMuaW5kZXhPZktleShuYW1lKTsKLSAgICAgICAgaWYgKHBvcyA8IDApIHsKLSAgICAgICAgICAgIFNvdXJjZVBvcyBwb3M7Ci0gICAgICAgICAgICBwb3MuZXJyb3IoIkphdmEgc3ltYm9sIGRpciAlcyBub3QgZGVmaW5lZFxuIiwgbmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBlcnIgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy9wcmludGYoIioqKiogYXBwbHlpbmcgamF2YSBzeW1ib2xzIGluIGRpciAlc1xuIiwgbmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIHN0YXR1c190IG15ZXJyID0gbU5lc3RlZFN5bWJvbHMudmFsdWVBdChwb3MpLT5hcHBseUphdmFTeW1ib2xzKHN5bWJvbHMpOwotICAgICAgICBpZiAobXllcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGVyciA9IG15ZXJyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1BYXB0QXNzZXRzOjpBYXB0QXNzZXRzKCkKLSAgICA6IEFhcHREaXIoU3RyaW5nOCgpLCBTdHJpbmc4KCkpLAotICAgICAgbUNoYW5nZWQoZmFsc2UpLCBtSGF2ZUluY2x1ZGVkQXNzZXRzKGZhbHNlKSwgbVJlcyhOVUxMKQotewotfQotCi1jb25zdCBTb3J0ZWRWZWN0b3I8QWFwdEdyb3VwRW50cnk+JiBBYXB0QXNzZXRzOjpnZXRHcm91cEVudHJpZXMoKSBjb25zdCB7Ci0gICAgaWYgKG1DaGFuZ2VkKSB7Ci0gICAgfQotICAgIHJldHVybiBtR3JvdXBFbnRyaWVzOwotfQotCi1zdGF0dXNfdCBBYXB0QXNzZXRzOjphZGRGaWxlKGNvbnN0IFN0cmluZzgmIG5hbWUsIGNvbnN0IHNwPEFhcHRHcm91cD4mIGZpbGUpCi17Ci0gICAgbUNoYW5nZWQgPSB0cnVlOwotICAgIHJldHVybiBBYXB0RGlyOjphZGRGaWxlKG5hbWUsIGZpbGUpOwotfQotCi1zcDxBYXB0RmlsZT4gQWFwdEFzc2V0czo6YWRkRmlsZSgKLSAgICAgICAgY29uc3QgU3RyaW5nOCYgZmlsZVBhdGgsIGNvbnN0IEFhcHRHcm91cEVudHJ5JiBlbnRyeSwKLSAgICAgICAgY29uc3QgU3RyaW5nOCYgc3JjRGlyLCBzcDxBYXB0R3JvdXA+KiBvdXRHcm91cCwKLSAgICAgICAgY29uc3QgU3RyaW5nOCYgcmVzVHlwZSkKLXsKLSAgICBzcDxBYXB0RGlyPiBkaXIgPSB0aGlzOwotICAgIHNwPEFhcHRHcm91cD4gZ3JvdXA7Ci0gICAgc3A8QWFwdEZpbGU+IGZpbGU7Ci0gICAgU3RyaW5nOCByb290LCByZW1haW4oZmlsZVBhdGgpLCBwYXJ0aWFsUGF0aDsKLSAgICB3aGlsZSAocmVtYWluLmxlbmd0aCgpID4gMCkgewotICAgICAgICByb290ID0gcmVtYWluLndhbGtQYXRoKCZyZW1haW4pOwotICAgICAgICBwYXJ0aWFsUGF0aC5hcHBlbmRQYXRoKHJvb3QpOwotCi0gICAgICAgIGNvbnN0IFN0cmluZzggcm9vdFN0cihyb290KTsKLQotICAgICAgICBpZiAocmVtYWluLmxlbmd0aCgpID09IDApIHsKLSAgICAgICAgICAgIHNzaXplX3QgaSA9IGRpci0+Z2V0RmlsZXMoKS5pbmRleE9mS2V5KHJvb3RTdHIpOwotICAgICAgICAgICAgaWYgKGkgPj0gMCkgewotICAgICAgICAgICAgICAgIGdyb3VwID0gZGlyLT5nZXRGaWxlcygpLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGdyb3VwID0gbmV3IEFhcHRHcm91cChyb290U3RyLCBmaWxlUGF0aCk7Ci0gICAgICAgICAgICAgICAgc3RhdHVzX3QgcmVzID0gZGlyLT5hZGRGaWxlKHJvb3RTdHIsIGdyb3VwKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbGUgPSBuZXcgQWFwdEZpbGUoc3JjRGlyLmFwcGVuZFBhdGhDb3B5KGZpbGVQYXRoKSwgZW50cnksIHJlc1R5cGUpOwotICAgICAgICAgICAgc3RhdHVzX3QgcmVzID0gZ3JvdXAtPmFkZEZpbGUoZmlsZSk7Ci0gICAgICAgICAgICBpZiAocmVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3NpemVfdCBpID0gZGlyLT5nZXREaXJzKCkuaW5kZXhPZktleShyb290U3RyKTsKLSAgICAgICAgICAgIGlmIChpID49IDApIHsKLSAgICAgICAgICAgICAgICBkaXIgPSBkaXItPmdldERpcnMoKS52YWx1ZUF0KGkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcDxBYXB0RGlyPiBzdWJkaXIgPSBuZXcgQWFwdERpcihyb290U3RyLCBwYXJ0aWFsUGF0aCk7Ci0gICAgICAgICAgICAgICAgc3RhdHVzX3QgcmVzID0gZGlyLT5hZGREaXIocm9vdFN0ciwgc3ViZGlyKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkaXIgPSBzdWJkaXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtR3JvdXBFbnRyaWVzLmFkZChlbnRyeSk7Ci0gICAgaWYgKG91dEdyb3VwKSAqb3V0R3JvdXAgPSBncm91cDsKLSAgICByZXR1cm4gZmlsZTsKLX0KLQotdm9pZCBBYXB0QXNzZXRzOjphZGRSZXNvdXJjZShjb25zdCBTdHJpbmc4JiBsZWFmTmFtZSwgY29uc3QgU3RyaW5nOCYgcGF0aCwKLSAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIGZpbGUsIGNvbnN0IFN0cmluZzgmIHJlc1R5cGUpCi17Ci0gICAgc3A8QWFwdERpcj4gcmVzID0gQWFwdERpcjo6bWFrZURpcihrUmVzU3RyaW5nKTsKLSAgICBTdHJpbmc4IGRpcm5hbWUgPSBmaWxlLT5nZXRHcm91cEVudHJ5KCkudG9EaXJOYW1lKHJlc1R5cGUpOwotICAgIHNwPEFhcHREaXI+IHN1YmRpciA9IHJlcy0+bWFrZURpcihkaXJuYW1lKTsKLSAgICBzcDxBYXB0R3JvdXA+IGdyciA9IG5ldyBBYXB0R3JvdXAobGVhZk5hbWUsIHBhdGgpOwotICAgIGdyci0+YWRkRmlsZShmaWxlKTsKLQotICAgIHN1YmRpci0+YWRkRmlsZShsZWFmTmFtZSwgZ3JyKTsKLX0KLQotCi1zc2l6ZV90IEFhcHRBc3NldHM6OnNsdXJwRnJvbUFyZ3MoQnVuZGxlKiBidW5kbGUpCi17Ci0gICAgaW50IGNvdW50OwotICAgIGludCB0b3RhbENvdW50ID0gMDsKLSAgICBGaWxlVHlwZSB0eXBlOwotICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBjaGFyICo+JiByZXNEaXJzID0gYnVuZGxlLT5nZXRSZXNvdXJjZVNvdXJjZURpcnMoKTsKLSAgICBjb25zdCBzaXplX3QgZGlyQ291bnQgPXJlc0RpcnMuc2l6ZSgpOwotICAgIHNwPEFhcHRBc3NldHM+IGN1cnJlbnQgPSB0aGlzOwotCi0gICAgY29uc3QgaW50IE4gPSBidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKTsKLQotICAgIC8qCi0gICAgICogSWYgYSBwYWNrYWdlIG1hbmlmZXN0IHdhcyBzcGVjaWZpZWQsIGluY2x1ZGUgdGhhdCBmaXJzdC4KLSAgICAgKi8KLSAgICBpZiAoYnVuZGxlLT5nZXRBbmRyb2lkTWFuaWZlc3RGaWxlKCkgIT0gTlVMTCkgewotICAgICAgICAvLyBwbGFjZSBhdCByb290IG9mIHppcC4KLSAgICAgICAgU3RyaW5nOCBzcmNGaWxlKGJ1bmRsZS0+Z2V0QW5kcm9pZE1hbmlmZXN0RmlsZSgpKTsKLSAgICAgICAgYWRkRmlsZShzcmNGaWxlLmdldFBhdGhMZWFmKCksIEFhcHRHcm91cEVudHJ5KCksIHNyY0ZpbGUuZ2V0UGF0aERpcigpLAotICAgICAgICAgICAgICAgIE5VTEwsIFN0cmluZzgoKSk7Ci0gICAgICAgIHRvdGFsQ291bnQrKzsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIElmIGEgZGlyZWN0b3J5IG9mIGN1c3RvbSBhc3NldHMgd2FzIHN1cHBsaWVkLCBzbHVycCAnZW0gdXAuCi0gICAgICovCi0gICAgaWYgKGJ1bmRsZS0+Z2V0QXNzZXRTb3VyY2VEaXIoKSkgewotICAgICAgICBjb25zdCBjaGFyKiBhc3NldERpciA9IGJ1bmRsZS0+Z2V0QXNzZXRTb3VyY2VEaXIoKTsKLQotICAgICAgICBGaWxlVHlwZSB0eXBlID0gZ2V0RmlsZVR5cGUoYXNzZXREaXIpOwotICAgICAgICBpZiAodHlwZSA9PSBrRmlsZVR5cGVOb25leGlzdGVudCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogYXNzZXQgZGlyZWN0b3J5ICclcycgZG9lcyBub3QgZXhpc3RcbiIsIGFzc2V0RGlyKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0eXBlICE9IGtGaWxlVHlwZURpcmVjdG9yeSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJyVzJyBpcyBub3QgYSBkaXJlY3RvcnlcbiIsIGFzc2V0RGlyKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nOCBhc3NldFJvb3QoYXNzZXREaXIpOwotICAgICAgICBzcDxBYXB0RGlyPiBhc3NldEFhcHREaXIgPSBtYWtlRGlyKFN0cmluZzgoa0Fzc2V0RGlyKSk7Ci0gICAgICAgIEFhcHRHcm91cEVudHJ5IGdyb3VwOwotICAgICAgICBjb3VudCA9IGFzc2V0QWFwdERpci0+c2x1cnBGdWxsVHJlZShidW5kbGUsIGFzc2V0Um9vdCwgZ3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoKSwgbUZ1bGxBc3NldFBhdGhzKTsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkgewotICAgICAgICAgICAgdG90YWxDb3VudCA9IGNvdW50OwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb3VudCA+IDApIHsKLSAgICAgICAgICAgIG1Hcm91cEVudHJpZXMuYWRkKGdyb3VwKTsKLSAgICAgICAgfQotICAgICAgICB0b3RhbENvdW50ICs9IGNvdW50OwotCi0gICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkKLSAgICAgICAgICAgIHByaW50ZigiRm91bmQgJWQgY3VzdG9tIGFzc2V0IGZpbGUlcyBpbiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICBjb3VudCwgKGNvdW50PT0xKSA/ICIiIDogInMiLCBhc3NldERpcik7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJZiBhIGRpcmVjdG9yeSBvZiByZXNvdXJjZS1zcGVjaWZpYyBhc3NldHMgd2FzIHN1cHBsaWVkLCBzbHVycCAnZW0gdXAuCi0gICAgICovCi0gICAgZm9yIChzaXplX3QgaT0wOyBpPGRpckNvdW50OyBpKyspIHsKLSAgICAgICAgY29uc3QgY2hhciAqcmVzID0gcmVzRGlyc1tpXTsKLSAgICAgICAgaWYgKHJlcykgewotICAgICAgICAgICAgdHlwZSA9IGdldEZpbGVUeXBlKHJlcyk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBrRmlsZVR5cGVOb25leGlzdGVudCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHJlc291cmNlIGRpcmVjdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0XG4iLCByZXMpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGUgPT0ga0ZpbGVUeXBlRGlyZWN0b3J5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGk+MCkgewotICAgICAgICAgICAgICAgICAgICBzcDxBYXB0QXNzZXRzPiBuZXh0T3ZlcmxheSA9IG5ldyBBYXB0QXNzZXRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPnNldE92ZXJsYXkobmV4dE92ZXJsYXkpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbmV4dE92ZXJsYXk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPnNldEZ1bGxSZXNQYXRocyhtRnVsbFJlc1BhdGhzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY291bnQgPSBjdXJyZW50LT5zbHVycFJlc291cmNlVHJlZShidW5kbGUsIFN0cmluZzgocmVzKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsQ291bnQgPSBjb3VudDsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0b3RhbENvdW50ICs9IGNvdW50OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJyVzJyBpcyBub3QgYSBkaXJlY3RvcnlcbiIsIHJlcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgfQotICAgIC8qCi0gICAgICogTm93IGRvIGFueSBhZGRpdGlvbmFsIHJhdyBmaWxlcy4KLSAgICAgKi8KLSAgICBmb3IgKGludCBhcmc9MDsgYXJnPE47IGFyZysrKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGFzc2V0RGlyID0gYnVuZGxlLT5nZXRGaWxlU3BlY0VudHJ5KGFyZyk7Ci0KLSAgICAgICAgRmlsZVR5cGUgdHlwZSA9IGdldEZpbGVUeXBlKGFzc2V0RGlyKTsKLSAgICAgICAgaWYgKHR5cGUgPT0ga0ZpbGVUeXBlTm9uZXhpc3RlbnQpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGlucHV0IGRpcmVjdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0XG4iLCBhc3NldERpcik7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBrRmlsZVR5cGVEaXJlY3RvcnkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICclcycgaXMgbm90IGEgZGlyZWN0b3J5XG4iLCBhc3NldERpcik7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZzggYXNzZXRSb290KGFzc2V0RGlyKTsKLQotICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpCi0gICAgICAgICAgICBwcmludGYoIlByb2Nlc3NpbmcgcmF3IGRpciAnJXMnXG4iLCAoY29uc3QgY2hhciopIGFzc2V0RGlyKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBEbyBhIHJlY3Vyc2l2ZSB0cmF2ZXJzYWwgb2Ygc3ViZGlyIHRyZWUuICBXZSBkb24ndCBtYWtlIGFueQotICAgICAgICAgKiBndWFyYW50ZWVzIGFib3V0IG9yZGVyaW5nLCBzbyB3ZSdyZSBva2F5IHdpdGggYW4gaW5vcmRlciBzZWFyY2gKLSAgICAgICAgICogdXNpbmcgd2hhdGV2ZXIgb3JkZXIgdGhlIE9TIGhhcHBlbnMgdG8gaGFuZCBiYWNrIHRvIHVzLgotICAgICAgICAgKi8KLSAgICAgICAgY291bnQgPSBzbHVycEZ1bGxUcmVlKGJ1bmRsZSwgYXNzZXRSb290LCBBYXB0R3JvdXBFbnRyeSgpLCBTdHJpbmc4KCksIG1GdWxsQXNzZXRQYXRocyk7Ci0gICAgICAgIGlmIChjb3VudCA8IDApIHsKLSAgICAgICAgICAgIC8qIGZhaWx1cmU7IHJlcG9ydCBlcnJvciBhbmQgcmVtb3ZlIGFyY2hpdmUgKi8KLSAgICAgICAgICAgIHRvdGFsQ291bnQgPSBjb3VudDsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICB0b3RhbENvdW50ICs9IGNvdW50OwotCi0gICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkKLSAgICAgICAgICAgIHByaW50ZigiRm91bmQgJWQgYXNzZXQgZmlsZSVzIGluICVzXG4iLAotICAgICAgICAgICAgICAgICAgIGNvdW50LCAoY291bnQ9PTEpID8gIiIgOiAicyIsIGFzc2V0RGlyKTsKLSAgICB9Ci0KLSAgICBjb3VudCA9IHZhbGlkYXRlKCk7Ci0gICAgaWYgKGNvdW50ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHRvdGFsQ291bnQgPSBjb3VudDsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGNvdW50ID0gZmlsdGVyKGJ1bmRsZSk7Ci0gICAgaWYgKGNvdW50ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHRvdGFsQ291bnQgPSBjb3VudDsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotYmFpbDoKLSAgICByZXR1cm4gdG90YWxDb3VudDsKLX0KLQotc3NpemVfdCBBYXB0QXNzZXRzOjpzbHVycEZ1bGxUcmVlKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBTdHJpbmc4JiBzcmNEaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBYXB0R3JvdXBFbnRyeSYga2luZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIHJlc1R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxGaWxlUGF0aFN0b3JlPiYgZnVsbFJlc1BhdGhzKQotewotICAgIHNzaXplX3QgcmVzID0gQWFwdERpcjo6c2x1cnBGdWxsVHJlZShidW5kbGUsIHNyY0Rpciwga2luZCwgcmVzVHlwZSwgZnVsbFJlc1BhdGhzKTsKLSAgICBpZiAocmVzID4gMCkgewotICAgICAgICBtR3JvdXBFbnRyaWVzLmFkZChraW5kKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCi1zc2l6ZV90IEFhcHRBc3NldHM6OnNsdXJwUmVzb3VyY2VUcmVlKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBTdHJpbmc4JiBzcmNEaXIpCi17Ci0gICAgc3NpemVfdCBlcnIgPSAwOwotCi0gICAgRElSKiBkaXIgPSBvcGVuZGlyKHNyY0Rpci5zdHJpbmcoKSk7Ci0gICAgaWYgKGRpciA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG9wZW5kaXIoJXMpOiAlc1xuIiwgc3JjRGlyLnN0cmluZygpLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBzdGF0dXNfdCBjb3VudCA9IDA7Ci0KLSAgICAvKgotICAgICAqIFJ1biB0aHJvdWdoIHRoZSBkaXJlY3RvcnksIGxvb2tpbmcgZm9yIGRpcnMgdGhhdCBtYXRjaCB0aGUKLSAgICAgKiBleHBlY3RlZCBwYXR0ZXJuLgotICAgICAqLwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIHN0cnVjdCBkaXJlbnQqIGVudHJ5ID0gcmVhZGRpcihkaXIpOwotICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNIaWRkZW4oc3JjRGlyLnN0cmluZygpLCBlbnRyeS0+ZF9uYW1lKSkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmc4IHN1YmRpck5hbWUoc3JjRGlyKTsKLSAgICAgICAgc3ViZGlyTmFtZS5hcHBlbmRQYXRoKGVudHJ5LT5kX25hbWUpOwotCi0gICAgICAgIEFhcHRHcm91cEVudHJ5IGdyb3VwOwotICAgICAgICBTdHJpbmc4IHJlc1R5cGU7Ci0gICAgICAgIGJvb2wgYiA9IGdyb3VwLmluaXRGcm9tRGlyTmFtZShlbnRyeS0+ZF9uYW1lLCAmcmVzVHlwZSk7Ci0gICAgICAgIGlmICghYikgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHJlc291cmNlIGRpcmVjdG9yeSBuYW1lOiAlcy8lc1xuIiwgc3JjRGlyLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBlbnRyeS0+ZF9uYW1lKTsKLSAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnVuZGxlLT5nZXRNYXhSZXNWZXJzaW9uKCkgIT0gTlVMTCAmJiBncm91cC5nZXRWZXJzaW9uU3RyaW5nKCkubGVuZ3RoKCkgIT0gMCkgewotICAgICAgICAgICAgaW50IG1heFJlc0ludCA9IGF0b2koYnVuZGxlLT5nZXRNYXhSZXNWZXJzaW9uKCkpOwotICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyU3RyaW5nID0gZ3JvdXAuZ2V0VmVyc2lvblN0cmluZygpLnN0cmluZygpOwotICAgICAgICAgICAgaW50IGRpclZlcnNpb25JbnQgPSBhdG9pKHZlclN0cmluZyArIDEpOyAvLyBza2lwICd2JyBpbiB2ZXJzaW9uIG5hbWUKLSAgICAgICAgICAgIGlmIChkaXJWZXJzaW9uSW50ID4gbWF4UmVzSW50KSB7Ci0gICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibWF4IHJlcyAlZCwgc2tpcHBpbmcgJXNcbiIsIG1heFJlc0ludCwgZW50cnktPmRfbmFtZSk7Ci0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgRmlsZVR5cGUgdHlwZSA9IGdldEZpbGVUeXBlKHN1YmRpck5hbWUuc3RyaW5nKCkpOwotCi0gICAgICAgIGlmICh0eXBlID09IGtGaWxlVHlwZURpcmVjdG9yeSkgewotICAgICAgICAgICAgc3A8QWFwdERpcj4gZGlyID0gbWFrZURpcihyZXNUeXBlKTsKLSAgICAgICAgICAgIHNzaXplX3QgcmVzID0gZGlyLT5zbHVycEZ1bGxUcmVlKGJ1bmRsZSwgc3ViZGlyTmFtZSwgZ3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNUeXBlLCBtRnVsbFJlc1BhdGhzKTsKLSAgICAgICAgICAgIGlmIChyZXMgPCAwKSB7Ci0gICAgICAgICAgICAgICAgY291bnQgPSByZXM7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlcyA+IDApIHsKLSAgICAgICAgICAgICAgICBtR3JvdXBFbnRyaWVzLmFkZChncm91cCk7Ci0gICAgICAgICAgICAgICAgY291bnQgKz0gcmVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBPbmx5IGFkZCB0aGlzIGRpcmVjdG9yeSBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYSByZXNvdXJjZSBkaXIKLSAgICAgICAgICAgIC8vIGZvciB0aGUgY3VycmVudCB0eXBlLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2Ugb25seSBhZGQgdGhlIGRpciBvbmNlCi0gICAgICAgICAgICAvLyBmb3IgYWxsIGNvbmZpZ3MuCi0gICAgICAgICAgICBzcDxBYXB0RGlyPiByZGlyID0gcmVzRGlyKHJlc1R5cGUpOwotICAgICAgICAgICAgaWYgKHJkaXIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG1SZXNEaXJzLmFkZChkaXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAoaWdub3JpbmcgZmlsZSAnJXMnKVxuIiwgc3ViZGlyTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLWJhaWw6Ci0gICAgY2xvc2VkaXIoZGlyKTsKLSAgICBkaXIgPSBOVUxMOwotCi0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQotc3NpemVfdAotQWFwdEFzc2V0czo6c2x1cnBSZXNvdXJjZVppcChCdW5kbGUqIGJ1bmRsZSwgY29uc3QgY2hhciogZmlsZW5hbWUpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICBTb3J0ZWRWZWN0b3I8QWFwdEdyb3VwRW50cnk+IGVudHJpZXM7Ci0KLSAgICBaaXBGaWxlKiB6aXAgPSBuZXcgWmlwRmlsZTsKLSAgICBzdGF0dXNfdCBlcnIgPSB6aXAtPm9wZW4oZmlsZW5hbWUsIFppcEZpbGU6OmtPcGVuUmVhZE9ubHkpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBvcGVuaW5nIHppcCBmaWxlICVzXG4iLCBmaWxlbmFtZSk7Ci0gICAgICAgIGNvdW50ID0gZXJyOwotICAgICAgICBkZWxldGUgemlwOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgY29uc3QgaW50IE4gPSB6aXAtPmdldE51bUVudHJpZXMoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIFppcEVudHJ5KiBlbnRyeSA9IHppcC0+Z2V0RW50cnlCeUluZGV4KGkpOwotICAgICAgICBpZiAoZW50cnktPmdldERlbGV0ZWQoKSkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmc4IGVudHJ5TmFtZShlbnRyeS0+Z2V0RmlsZU5hbWUoKSk7Ci0KLSAgICAgICAgU3RyaW5nOCBkaXJOYW1lID0gZW50cnlOYW1lLmdldFBhdGhEaXIoKTsKLSAgICAgICAgc3A8QWFwdERpcj4gZGlyID0gZGlyTmFtZSA9PSAiIiA/IHRoaXMgOiBtYWtlRGlyKGRpck5hbWUpOwotCi0gICAgICAgIFN0cmluZzggcmVzVHlwZTsKLSAgICAgICAgQWFwdEdyb3VwRW50cnkga2luZDsKLQotICAgICAgICBTdHJpbmc4IHJlbWFpbjsKLSAgICAgICAgaWYgKGVudHJ5TmFtZS53YWxrUGF0aCgmcmVtYWluKSA9PSBrUmVzb3VyY2VEaXIpIHsKLSAgICAgICAgICAgIC8vIHRoZXNlIGFyZSB0aGUgcmVzb3VyY2VzLCBwdWxsIHRoZWlyIHR5cGUgb3V0IG9mIHRoZSBkaXJlY3RvcnkgbmFtZQotICAgICAgICAgICAga2luZC5pbml0RnJvbURpck5hbWUocmVtYWluLndhbGtQYXRoKCkuc3RyaW5nKCksICZyZXNUeXBlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHRoZXNlIGFyZSB1bnR5cGVkIGFuZCBkb24ndCBoYXZlIGFuIEFhcHRHcm91cEVudHJ5Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVudHJpZXMuaW5kZXhPZihraW5kKSA8IDApIHsKLSAgICAgICAgICAgIGVudHJpZXMuYWRkKGtpbmQpOwotICAgICAgICAgICAgbUdyb3VwRW50cmllcy5hZGQoa2luZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB1c2UgdGhlIG9uZSBmcm9tIHRoZSB6aXAgZmlsZSBpZiB0aGV5IGJvdGggZXhpc3QuCi0gICAgICAgIGRpci0+cmVtb3ZlRmlsZShlbnRyeU5hbWUuZ2V0UGF0aExlYWYoKSk7Ci0KLSAgICAgICAgc3A8QWFwdEZpbGU+IGZpbGUgPSBuZXcgQWFwdEZpbGUoZW50cnlOYW1lLCBraW5kLCByZXNUeXBlKTsKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gZGlyLT5hZGRMZWFmRmlsZShlbnRyeU5hbWUuZ2V0UGF0aExlYWYoKSwgZmlsZSk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyPSVzIGVudHJ5TmFtZT0lc1xuIiwgc3RyZXJyb3IoZXJyKSwgZW50cnlOYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgIGNvdW50ID0gZXJyOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIGZpbGUtPnNldENvbXByZXNzaW9uTWV0aG9kKGVudHJ5LT5nZXRDb21wcmVzc2lvbk1ldGhvZCgpKTsKLQotI2lmIDAKLSAgICAgICAgaWYgKGVudHJ5TmFtZSA9PSAiQW5kcm9pZE1hbmlmZXN0LnhtbCIpIHsKLSAgICAgICAgICAgIHByaW50ZigiQW5kcm9pZE1hbmlmZXN0LnhtbFxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJcblxuZmlsZTogJXNcbiIsIGVudHJ5TmFtZS5zdHJpbmcoKSk7Ci0jZW5kaWYKLQotICAgICAgICBzaXplX3QgbGVuID0gZW50cnktPmdldFVuY29tcHJlc3NlZExlbigpOwotICAgICAgICB2b2lkKiBkYXRhID0gemlwLT51bmNvbXByZXNzKGVudHJ5KTsKLSAgICAgICAgdm9pZCogYnVmID0gZmlsZS0+ZWRpdERhdGEobGVuKTsKLSAgICAgICAgbWVtY3B5KGJ1ZiwgZGF0YSwgbGVuKTsKLQotI2lmIDAKLSAgICAgICAgY29uc3QgaW50IE9GRiA9IDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHAgPSAodW5zaWduZWQgY2hhciopZGF0YTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZW5kID0gcCtsZW47Ci0gICAgICAgIHAgKz0gT0ZGOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8MzIgJiYgcCA8IGVuZDsgaSsrKSB7Ci0gICAgICAgICAgICBwcmludGYoIjB4JTAzeCAiLCBpKjB4MTAgKyBPRkYpOwotICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPDB4MTAgJiYgcCA8IGVuZDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgJTAyeCIsICpwKTsKLSAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGZyZWUoZGF0YSk7Ci0KLSAgICAgICAgY291bnQrKzsKLSAgICB9Ci0KLWJhaWw6Ci0gICAgZGVsZXRlIHppcDsKLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXR1c190IEFhcHRBc3NldHM6OmZpbHRlcihCdW5kbGUqIGJ1bmRsZSkKLXsKLSAgICBSZXNvdXJjZUZpbHRlciByZXFGaWx0ZXI7Ci0gICAgc3RhdHVzX3QgZXJyID0gcmVxRmlsdGVyLnBhcnNlKGJ1bmRsZS0+Z2V0Q29uZmlndXJhdGlvbnMoKSk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIFJlc291cmNlRmlsdGVyIHByZWZGaWx0ZXI7Ci0gICAgZXJyID0gcHJlZkZpbHRlci5wYXJzZShidW5kbGUtPmdldFByZWZlcnJlZENvbmZpZ3VyYXRpb25zKCkpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBpZiAocmVxRmlsdGVyLmlzRW1wdHkoKSAmJiBwcmVmRmlsdGVyLmlzRW1wdHkoKSkgewotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgIGlmICghcmVxRmlsdGVyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcHJpbnRmKCJBcHBseWluZyByZXF1aXJlZCBmaWx0ZXI6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBidW5kbGUtPmdldENvbmZpZ3VyYXRpb25zKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcHJlZkZpbHRlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHByaW50ZigiQXBwbHlpbmcgcHJlZmVycmVkIGZpbHRlcjogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS0+Z2V0UHJlZmVycmVkQ29uZmlndXJhdGlvbnMoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8c3A8QWFwdERpcj4gPiYgcmVzZGlycyA9IG1SZXNEaXJzOwotICAgIGNvbnN0IHNpemVfdCBORCA9IHJlc2RpcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxORDsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHNwPEFhcHREaXI+JiBkaXIgPSByZXNkaXJzLml0ZW1BdChpKTsKLSAgICAgICAgaWYgKGRpci0+Z2V0TGVhZigpID09IGtWYWx1ZXNEaXIpIHsKLSAgICAgICAgICAgIC8vIFRoZSAidmFsdWUiIGRpciBpcyBzcGVjaWFsIHNpbmNlIGEgc2luZ2xlIGZpbGUgZGVmaW5lcwotICAgICAgICAgICAgLy8gbXVsdGlwbGUgcmVzb3VyY2VzLCBzbyB3ZSBjYW4gbm90IGRvIGZpbHRlcmluZyBvbiB0aGUKLSAgICAgICAgICAgIC8vIGZpbGVzIHRoZW1zZWx2ZXMuCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZGlyLT5nZXRMZWFmKCkgPT0ga01pcG1hcERpcikgewotICAgICAgICAgICAgLy8gV2UgYWxzbyBza2lwIHRoZSAibWlwbWFwIiBkaXJlY3RvcnksIHNpbmNlIHRoZSBwb2ludCBvZiB0aGlzCi0gICAgICAgICAgICAvLyBpcyB0byBpbmNsdWRlIGFsbCBkZW5zaXRpZXMgd2l0aG91dCBzdHJpcHBpbmcuICBJZiB5b3UgcHV0Ci0gICAgICAgICAgICAvLyBvdGhlciBjb25maWd1cmF0aW9ucyBpbiBoZXJlIGFzIHdlbGwgdGhleSB3b24ndCBiZSBzdHJpcHBlZAotICAgICAgICAgICAgLy8gZWl0aGVyLi4uICBTbyBkb24ndCBkbyB0aGF0LiAgU2VyaW91c2x5LiAgV2hhdCBpcyB3cm9uZyB3aXRoIHlvdT8KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qgc2l6ZV90IE5HID0gZGlyLT5nZXRGaWxlcygpLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3Qgaj0wOyBqPE5HOyBqKyspIHsKLSAgICAgICAgICAgIHNwPEFhcHRHcm91cD4gZ3JwID0gZGlyLT5nZXRGaWxlcygpLnZhbHVlQXQoaik7Ci0KLSAgICAgICAgICAgIC8vIEZpcnN0IHJlbW92ZSBhbnkgY29uZmlndXJhdGlvbnMgd2Uga25vdyB3ZSBkb24ndCBuZWVkLgotICAgICAgICAgICAgZm9yIChzaXplX3Qgaz0wOyBrPGdycC0+Z2V0RmlsZXMoKS5zaXplKCk7IGsrKykgewotICAgICAgICAgICAgICAgIHNwPEFhcHRGaWxlPiBmaWxlID0gZ3JwLT5nZXRGaWxlcygpLnZhbHVlQXQoayk7Ci0gICAgICAgICAgICAgICAgaWYgKGsgPT0gMCAmJiBncnAtPmdldEZpbGVzKCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgb25seSBmaWxlIGxlZnQsIHdlIG5lZWQgdG8ga2VlcCBpdC4KLSAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZSByZXNvdXJjZSBJRHMgd2UgYXJlIHVzaW5nIHdpbGwgYmUgaW5jb25zaXN0ZW50Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdpdGggd2hhdCB3ZSBnZXQgd2hlbiBub3Qgc3RyaXBwaW5nLiAgU3Vja3ksIGJ1dCBhdCBsZWFzdAotICAgICAgICAgICAgICAgICAgICAvLyBmb3Igbm93IHdlIGNhbiByZWx5IG9uIHRoZSBiYWNrLWVuZCBkb2luZyBhbm90aGVyIGZpbHRlcmluZwotICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIHRvIHRha2UgdGhpcyBvdXQgYW5kIGxlYXZlIHVzIHdpdGggdGhpcyByZXNvdXJjZSBuYW1lCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5pbmcgbm8gZW50cmllcy4KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChmaWxlLT5nZXRQYXRoKCkuZ2V0UGF0aEV4dGVuc2lvbigpID09ICIueG1sIikgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCByZW1vdmUgLnhtbCBmaWxlcyBhdCB0aGlzIHBvaW50LCBiZWNhdXNlIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgLy8gd2UgcGFyc2UgdGhlbSB0aGV5IG1heSBhZGQgaWRlbnRpZmllciByZXNvdXJjZXMsIHNvCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92aW5nIHRoZW0gY2FuIGNhdXNlIG91ciByZXNvdXJjZSBpZGVudGlmaWVycyB0bwotICAgICAgICAgICAgICAgICAgICAvLyBiZWNvbWUgaW5jb25zaXN0ZW50LgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcoZmlsZS0+Z2V0R3JvdXBFbnRyeSgpLnRvUGFyYW1zKCkpOwotICAgICAgICAgICAgICAgIGlmICghcmVxRmlsdGVyLm1hdGNoKGNvbmZpZykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlBydW5pbmcgdW5uZWVkZWQgcmVzb3VyY2U6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ3JwLT5yZW1vdmVGaWxlKGspOwotICAgICAgICAgICAgICAgICAgICBrLS07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBRdWljayBjaGVjazogbm8gcHJlZmVycmVkIGZpbHRlcnMsIG5vdGhpbmcgbW9yZSB0byBkby4KLSAgICAgICAgICAgIGlmIChwcmVmRmlsdGVyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBHZXQgdGhlIHByZWZlcnJlZCBkZW5zaXR5IGlmIHRoZXJlIGlzIG9uZS4gV2UgZG8gbm90IG1hdGNoIGV4YWN0bHkgZm9yIGRlbnNpdHkuCi0gICAgICAgICAgICAvLyBJZiBvdXIgcHJlZmVycmVkIGRlbnNpdHkgaXMgaGRwaSBidXQgd2Ugb25seSBoYXZlIG1kcGkgYW5kIHhoZHBpIHJlc291cmNlcywgd2UKLSAgICAgICAgICAgIC8vIHBpY2sgeGhkcGkuCi0gICAgICAgICAgICB1aW50MzJfdCBwcmVmZXJyZWREZW5zaXR5ID0gMDsKLSAgICAgICAgICAgIGNvbnN0IFNvcnRlZFZlY3Rvcjx1aW50MzJfdD4qIHByZWZlcnJlZENvbmZpZ3MgPSBwcmVmRmlsdGVyLmNvbmZpZ3NGb3JBeGlzKEFYSVNfREVOU0lUWSk7Ci0gICAgICAgICAgICBpZiAocHJlZmVycmVkQ29uZmlncyAhPSBOVUxMICYmIHByZWZlcnJlZENvbmZpZ3MtPnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBwcmVmZXJyZWREZW5zaXR5ID0gKCpwcmVmZXJyZWRDb25maWdzKVswXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTm93IGRlYWwgd2l0aCBwcmVmZXJyZWQgY29uZmlndXJhdGlvbnMuCi0gICAgICAgICAgICBmb3IgKGludCBheGlzPUFYSVNfU1RBUlQ7IGF4aXM8PUFYSVNfRU5EOyBheGlzKyspIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrPTA7IGs8Z3JwLT5nZXRGaWxlcygpLnNpemUoKTsgaysrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwPEFhcHRGaWxlPiBmaWxlID0gZ3JwLT5nZXRGaWxlcygpLnZhbHVlQXQoayk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrID09IDAgJiYgZ3JwLT5nZXRGaWxlcygpLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBvbmx5IGZpbGUgbGVmdCwgd2UgbmVlZCB0byBrZWVwIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZSByZXNvdXJjZSBJRHMgd2UgYXJlIHVzaW5nIHdpbGwgYmUgaW5jb25zaXN0ZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIHdoYXQgd2UgZ2V0IHdoZW4gbm90IHN0cmlwcGluZy4gIFN1Y2t5LCBidXQgYXQgbGVhc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBub3cgd2UgY2FuIHJlbHkgb24gdGhlIGJhY2stZW5kIGRvaW5nIGFub3RoZXIgZmlsdGVyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIHRvIHRha2UgdGhpcyBvdXQgYW5kIGxlYXZlIHVzIHdpdGggdGhpcyByZXNvdXJjZSBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250YWluaW5nIG5vIGVudHJpZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZS0+Z2V0UGF0aCgpLmdldFBhdGhFeHRlbnNpb24oKSA9PSAiLnhtbCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHJlbW92ZSAueG1sIGZpbGVzIGF0IHRoaXMgcG9pbnQsIGJlY2F1c2Ugd2hlbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgcGFyc2UgdGhlbSB0aGV5IG1heSBhZGQgaWRlbnRpZmllciByZXNvdXJjZXMsIHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmluZyB0aGVtIGNhbiBjYXVzZSBvdXIgcmVzb3VyY2UgaWRlbnRpZmllcnMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY29tZSBpbmNvbnNpc3RlbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZyhmaWxlLT5nZXRHcm91cEVudHJ5KCkudG9QYXJhbXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcHJlZkZpbHRlci5tYXRjaChheGlzLCBjb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVzb3VyY2Ugd2Ugd291bGQgcHJlZmVyIG5vdCB0byBoYXZlLiAgQ2hlY2sKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNlZSBpZiBoYXZlIGEgc2ltaWxhciB2YXJpYXRpb24gdGhhdCB3ZSB3b3VsZCBsaWtlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBoYXZlIGFuZCwgaWYgc28sIHdlIGNhbiBkcm9wIGl0LgotCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiZXN0RGVuc2l0eSA9IGNvbmZpZy5kZW5zaXR5OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBtPTA7IG08Z3JwLT5nZXRGaWxlcygpLnNpemUoKTsgbSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gPT0gaykgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8QWFwdEZpbGU+IG1maWxlID0gZ3JwLT5nZXRGaWxlcygpLnZhbHVlQXQobSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnJiBtY29uZmlnKG1maWxlLT5nZXRHcm91cEVudHJ5KCkudG9QYXJhbXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFhcHRHcm91cEVudHJ5Ojpjb25maWdTYW1lRXhjZXB0KGNvbmZpZywgbWNvbmZpZywgYXhpcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXMgPT0gQVhJU19ERU5TSVRZICYmIHByZWZlcnJlZERlbnNpdHkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBiZXR0ZXIgZGVuc2l0eSByZXNvdXJjZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1jb25maWcuZGVuc2l0eSA8IGJlc3REZW5zaXR5ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jb25maWcuZGVuc2l0eSA+IHByZWZlcnJlZERlbnNpdHkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdERlbnNpdHkgPiBwcmVmZXJyZWREZW5zaXR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBkZW5zaXR5IGlzIGJldHdlZW4gb3VyIGJlc3QgZGVuc2l0eSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcHJlZmVycmVkIGRlbnNpdHksIHRoZXJlZm9yZSBpdCBpcyBiZXR0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdERlbnNpdHkgPSBtY29uZmlnLmRlbnNpdHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1jb25maWcuZGVuc2l0eSA+IGJlc3REZW5zaXR5ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3REZW5zaXR5IDwgcHJlZmVycmVkRGVuc2l0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZGVuc2l0eSBpcyBiZXR0ZXIgdGhhbiBvdXIgYmVzdCBkZW5zaXR5IGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91ciBiZXN0IGRlbnNpdHkgd2FzIHNtYWxsZXIgdGhhbiBvdXIgcHJlZmVycmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVuc2l0eSwgc28gaXQgaXMgYmV0dGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3REZW5zaXR5ID0gbWNvbmZpZy5kZW5zaXR5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZWZGaWx0ZXIubWF0Y2goYXhpcywgbWNvbmZpZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiUHJ1bmluZyB1bm5lZWRlZCByZXNvdXJjZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnAtPnJlbW92ZUZpbGUoayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrLS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXMgPT0gQVhJU19ERU5TSVRZICYmIHByZWZlcnJlZERlbnNpdHkgPiAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3REZW5zaXR5ICE9IGNvbmZpZy5kZW5zaXR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiUHJ1bmluZyB1bm5lZWRlZCByZXNvdXJjZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnAtPnJlbW92ZUZpbGUoayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgay0tOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zcDxBYXB0U3ltYm9scz4gQWFwdEFzc2V0czo6Z2V0U3ltYm9sc0Zvcihjb25zdCBTdHJpbmc4JiBuYW1lKQotewotICAgIHNwPEFhcHRTeW1ib2xzPiBzeW0gPSBtU3ltYm9scy52YWx1ZUZvcihuYW1lKTsKLSAgICBpZiAoc3ltID09IE5VTEwpIHsKLSAgICAgICAgc3ltID0gbmV3IEFhcHRTeW1ib2xzKCk7Ci0gICAgICAgIG1TeW1ib2xzLmFkZChuYW1lLCBzeW0pOwotICAgIH0KLSAgICByZXR1cm4gc3ltOwotfQotCi1zcDxBYXB0U3ltYm9scz4gQWFwdEFzc2V0czo6Z2V0SmF2YVN5bWJvbHNGb3IoY29uc3QgU3RyaW5nOCYgbmFtZSkKLXsKLSAgICBzcDxBYXB0U3ltYm9scz4gc3ltID0gbUphdmFTeW1ib2xzLnZhbHVlRm9yKG5hbWUpOwotICAgIGlmIChzeW0gPT0gTlVMTCkgewotICAgICAgICBzeW0gPSBuZXcgQWFwdFN5bWJvbHMoKTsKLSAgICAgICAgbUphdmFTeW1ib2xzLmFkZChuYW1lLCBzeW0pOwotICAgIH0KLSAgICByZXR1cm4gc3ltOwotfQotCi1zdGF0dXNfdCBBYXB0QXNzZXRzOjphcHBseUphdmFTeW1ib2xzKCkKLXsKLSAgICBzaXplX3QgTiA9IG1KYXZhU3ltYm9scy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBTdHJpbmc4JiBuYW1lID0gbUphdmFTeW1ib2xzLmtleUF0KGkpOwotICAgICAgICBjb25zdCBzcDxBYXB0U3ltYm9scz4mIHN5bWJvbHMgPSBtSmF2YVN5bWJvbHMudmFsdWVBdChpKTsKLSAgICAgICAgc3NpemVfdCBwb3MgPSBtU3ltYm9scy5pbmRleE9mS2V5KG5hbWUpOwotICAgICAgICBpZiAocG9zIDwgMCkgewotICAgICAgICAgICAgU291cmNlUG9zIHBvczsKLSAgICAgICAgICAgIHBvcy5lcnJvcigiSmF2YSBzeW1ib2wgZGlyICVzIG5vdCBkZWZpbmVkXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIC8vcHJpbnRmKCIqKioqIGFwcGx5aW5nIGphdmEgc3ltYm9scyBpbiBkaXIgJXNcbiIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICBzdGF0dXNfdCBlcnIgPSBtU3ltYm9scy52YWx1ZUF0KHBvcyktPmFwcGx5SmF2YVN5bWJvbHMoc3ltYm9scyk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLWJvb2wgQWFwdEFzc2V0czo6aXNKYXZhU3ltYm9sKGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgc3ltLCBib29sIGluY2x1ZGVQcml2YXRlKSBjb25zdCB7Ci0gICAgLy9wcmludGYoImlzSmF2YVN5bWJvbCAlczogcHVibGljPSVkLCBpbmNsdWRlUHJpdmF0ZT0lZCwgaXNKYXZhU3ltYm9sPSVkXG4iLAotICAgIC8vICAgICAgICBzeW0ubmFtZS5zdHJpbmcoKSwgc3ltLmlzUHVibGljID8gMSA6IDAsIGluY2x1ZGVQcml2YXRlID8gMSA6IDAsCi0gICAgLy8gICAgICAgIHN5bS5pc0phdmFTeW1ib2wgPyAxIDogMCk7Ci0gICAgaWYgKCFtSGF2ZVByaXZhdGVTeW1ib2xzKSByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoc3ltLmlzUHVibGljKSByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoaW5jbHVkZVByaXZhdGUgJiYgc3ltLmlzSmF2YVN5bWJvbCkgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0dXNfdCBBYXB0QXNzZXRzOjpidWlsZEluY2x1ZGVkUmVzb3VyY2VzKEJ1bmRsZSogYnVuZGxlKQotewotICAgIGlmICghbUhhdmVJbmNsdWRlZEFzc2V0cykgewotICAgICAgICAvLyBBZGQgaW4gYWxsIGluY2x1ZGVzLgotICAgICAgICBjb25zdCBWZWN0b3I8Y29uc3QgY2hhcio+JiBpbmNsID0gYnVuZGxlLT5nZXRQYWNrYWdlSW5jbHVkZXMoKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE49aW5jbC5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkKLSAgICAgICAgICAgICAgICBwcmludGYoIkluY2x1ZGluZyByZXNvdXJjZXMgZnJvbSBwYWNrYWdlOiAlc1xuIiwgaW5jbFtpXSk7Ci0gICAgICAgICAgICBpZiAoIW1JbmNsdWRlZEFzc2V0cy5hZGRBc3NldFBhdGgoU3RyaW5nOChpbmNsW2ldKSwgTlVMTCkpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBBc3NldCBwYWNrYWdlIGluY2x1ZGUgJyVzJyBub3QgZm91bmQuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgaW5jbFtpXSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbUhhdmVJbmNsdWRlZEFzc2V0cyA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBBYXB0QXNzZXRzOjphZGRJbmNsdWRlZFJlc291cmNlcyhjb25zdCBzcDxBYXB0RmlsZT4mIGZpbGUpCi17Ci0gICAgY29uc3QgUmVzVGFibGUmIHJlcyA9IGdldEluY2x1ZGVkUmVzb3VyY2VzKCk7Ci0gICAgLy8gWFhYIGRpcnR5IQotICAgIHJldHVybiBjb25zdF9jYXN0PFJlc1RhYmxlJj4ocmVzKS5hZGQoZmlsZS0+Z2V0RGF0YSgpLCBmaWxlLT5nZXRTaXplKCksIE5VTEwpOwotfQotCi1jb25zdCBSZXNUYWJsZSYgQWFwdEFzc2V0czo6Z2V0SW5jbHVkZWRSZXNvdXJjZXMoKSBjb25zdAotewotICAgIHJldHVybiBtSW5jbHVkZWRBc3NldHMuZ2V0UmVzb3VyY2VzKGZhbHNlKTsKLX0KLQotdm9pZCBBYXB0QXNzZXRzOjpwcmludChjb25zdCBTdHJpbmc4JiBwcmVmaXgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nOCBpbm5lclByZWZpeChwcmVmaXgpOwotICAgIGlubmVyUHJlZml4LmFwcGVuZCgiICAiKTsKLSAgICBTdHJpbmc4IGlubmVySW5uZXJQcmVmaXgoaW5uZXJQcmVmaXgpOwotICAgIGlubmVySW5uZXJQcmVmaXguYXBwZW5kKCIgICIpOwotICAgIHByaW50ZigiJXNDb25maWd1cmF0aW9uczpcbiIsIHByZWZpeC5zdHJpbmcoKSk7Ci0gICAgY29uc3Qgc2l6ZV90IE49bUdyb3VwRW50cmllcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBTdHJpbmc4IGNuYW1lID0gbUdyb3VwRW50cmllcy5pdGVtQXQoaSkudG9EaXJOYW1lKFN0cmluZzgoKSk7Ci0gICAgICAgIHByaW50ZigiJXMgJXNcbiIsIHByZWZpeC5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBjbmFtZSAhPSAiIiA/IGNuYW1lLnN0cmluZygpIDogIihkZWZhdWx0KSIpOwotICAgIH0KLQotICAgIHByaW50ZigiXG4lc0ZpbGVzOlxuIiwgcHJlZml4LnN0cmluZygpKTsKLSAgICBBYXB0RGlyOjpwcmludChpbm5lclByZWZpeCk7Ci0KLSAgICBwcmludGYoIlxuJXNSZXNvdXJjZSBEaXJzOlxuIiwgcHJlZml4LnN0cmluZygpKTsKLSAgICBjb25zdCBWZWN0b3I8c3A8QWFwdERpcj4gPiYgcmVzZGlycyA9IG1SZXNEaXJzOwotICAgIGNvbnN0IHNpemVfdCBOUiA9IHJlc2RpcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOUjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHNwPEFhcHREaXI+JiBkID0gcmVzZGlycy5pdGVtQXQoaSk7Ci0gICAgICAgIHByaW50ZigiJXMgIFR5cGUgJXNcbiIsIHByZWZpeC5zdHJpbmcoKSwgZC0+Z2V0TGVhZigpLnN0cmluZygpKTsKLSAgICAgICAgZC0+cHJpbnQoaW5uZXJJbm5lclByZWZpeCk7Ci0gICAgfQotfQotCi1zcDxBYXB0RGlyPiBBYXB0QXNzZXRzOjpyZXNEaXIoY29uc3QgU3RyaW5nOCYgbmFtZSkgY29uc3QKLXsKLSAgICBjb25zdCBWZWN0b3I8c3A8QWFwdERpcj4gPiYgcmVzZGlycyA9IG1SZXNEaXJzOwotICAgIGNvbnN0IHNpemVfdCBOID0gcmVzZGlycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBzcDxBYXB0RGlyPiYgZCA9IHJlc2RpcnMuaXRlbUF0KGkpOwotICAgICAgICBpZiAoZC0+Z2V0TGVhZigpID09IG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBkOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi1ib29sCi12YWxpZF9zeW1ib2xfbmFtZShjb25zdCBTdHJpbmc4JiBzeW1ib2wpCi17Ci0gICAgc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBLRVlXT1JEU1tdID0gewotICAgICAgICAiYWJzdHJhY3QiLCAiYXNzZXJ0IiwgImJvb2xlYW4iLCAiYnJlYWsiLAotICAgICAgICAiYnl0ZSIsICJjYXNlIiwgImNhdGNoIiwgImNoYXIiLCAiY2xhc3MiLCAiY29uc3QiLCAiY29udGludWUiLAotICAgICAgICAiZGVmYXVsdCIsICJkbyIsICJkb3VibGUiLCAiZWxzZSIsICJlbnVtIiwgImV4dGVuZHMiLCAiZmluYWwiLAotICAgICAgICAiZmluYWxseSIsICJmbG9hdCIsICJmb3IiLCAiZ290byIsICJpZiIsICJpbXBsZW1lbnRzIiwgImltcG9ydCIsCi0gICAgICAgICJpbnN0YW5jZW9mIiwgImludCIsICJpbnRlcmZhY2UiLCAibG9uZyIsICJuYXRpdmUiLCAibmV3IiwgInBhY2thZ2UiLAotICAgICAgICAicHJpdmF0ZSIsICJwcm90ZWN0ZWQiLCAicHVibGljIiwgInJldHVybiIsICJzaG9ydCIsICJzdGF0aWMiLAotICAgICAgICAic3RyaWN0ZnAiLCAic3VwZXIiLCAic3dpdGNoIiwgInN5bmNocm9uaXplZCIsICJ0aGlzIiwgInRocm93IiwKLSAgICAgICAgInRocm93cyIsICJ0cmFuc2llbnQiLCAidHJ5IiwgInZvaWQiLCAidm9sYXRpbGUiLCAid2hpbGUiLAotICAgICAgICAidHJ1ZSIsICJmYWxzZSIsICJudWxsIiwKLSAgICAgICAgTlVMTAotICAgIH07Ci0gICAgY29uc3QgY2hhcipjb25zdCogayA9IEtFWVdPUkRTOwotICAgIGNvbnN0IGNoYXIqY29uc3QgcyA9IHN5bWJvbC5zdHJpbmcoKTsKLSAgICB3aGlsZSAoKmspIHsKLSAgICAgICAgaWYgKDAgPT0gc3RyY21wKHMsICprKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGsrKzsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19CmRpZmYgLS1naXQgYS90b29scy9hYXB0L0FhcHRBc3NldHMuaCBiL3Rvb2xzL2FhcHQvQWFwdEFzc2V0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2ZhOTEzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvQWFwdEFzc2V0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gSW5mb3JtYXRpb24gYWJvdXQgYXNzZXRzIGJlaW5nIG9wZXJhdGVkIG9uLgotLy8KLSNpZm5kZWYgX19BQVBUX0FTU0VUU19ICi0jZGVmaW5lIF9fQUFQVF9BU1NFVFNfSAotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5oPgotI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU29ydGVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLSNpbmNsdWRlICJaaXBGaWxlLmgiCi0KLSNpbmNsdWRlICJCdW5kbGUuaCIKLSNpbmNsdWRlICJTb3VyY2VQb3MuaCIKLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLQotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBnRGVmYXVsdElnbm9yZUFzc2V0czsKLWV4dGVybiBjb25zdCBjaGFyICogZ1VzZXJJZ25vcmVBc3NldHM7Ci0KLWJvb2wgdmFsaWRfc3ltYm9sX25hbWUoY29uc3QgU3RyaW5nOCYgc3RyKTsKLQotY2xhc3MgQWFwdEFzc2V0czsKLQotZW51bSB7Ci0gICAgQVhJU19OT05FID0gMCwKLSAgICBBWElTX01DQyA9IDEsCi0gICAgQVhJU19NTkMsCi0gICAgQVhJU19MQU5HVUFHRSwKLSAgICBBWElTX1JFR0lPTiwKLSAgICBBWElTX1NDUkVFTkxBWU9VVFNJWkUsCi0gICAgQVhJU19TQ1JFRU5MQVlPVVRMT05HLAotICAgIEFYSVNfT1JJRU5UQVRJT04sCi0gICAgQVhJU19VSU1PREVUWVBFLAotICAgIEFYSVNfVUlNT0RFTklHSFQsCi0gICAgQVhJU19ERU5TSVRZLAotICAgIEFYSVNfVE9VQ0hTQ1JFRU4sCi0gICAgQVhJU19LRVlTSElEREVOLAotICAgIEFYSVNfS0VZQk9BUkQsCi0gICAgQVhJU19OQVZISURERU4sCi0gICAgQVhJU19OQVZJR0FUSU9OLAotICAgIEFYSVNfU0NSRUVOU0laRSwKLSAgICBBWElTX1NNQUxMRVNUU0NSRUVOV0lEVEhEUCwKLSAgICBBWElTX1NDUkVFTldJRFRIRFAsCi0gICAgQVhJU19TQ1JFRU5IRUlHSFREUCwKLSAgICBBWElTX0xBWU9VVERJUiwKLSAgICBBWElTX1ZFUlNJT04sCi0KLSAgICBBWElTX1NUQVJUID0gQVhJU19NQ0MsCi0gICAgQVhJU19FTkQgPSBBWElTX1ZFUlNJT04sCi19OwotCi0vKioKLSAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGEgc3BlY2lmaWMgdmFyaWF0aW9uIG9mIGEgc2luZ2xlIGZpbGUgb3V0Ci0gKiBvZiBhbGwgdGhlIHZhcmlhdGlvbnMgaXQgY2FuIGhhdmUgdGhhdCB3ZSBjYW4gaGF2ZS4KLSAqLwotc3RydWN0IEFhcHRHcm91cEVudHJ5Ci17Ci1wdWJsaWM6Ci0gICAgQWFwdEdyb3VwRW50cnkoKSA6IG1QYXJhbXNDaGFuZ2VkKHRydWUpIHsgfQotICAgIEFhcHRHcm91cEVudHJ5KGNvbnN0IFN0cmluZzgmIF9sb2NhbGUsIGNvbnN0IFN0cmluZzgmIF92ZW5kb3IpCi0gICAgICAgIDogbG9jYWxlKF9sb2NhbGUpLCB2ZW5kb3IoX3ZlbmRvciksIG1QYXJhbXNDaGFuZ2VkKHRydWUpIHsgfQotCi0gICAgYm9vbCBpbml0RnJvbURpck5hbWUoY29uc3QgY2hhciogZGlyLCBTdHJpbmc4KiByZXNUeXBlKTsKLQotICAgIHN0YXRpYyBzdGF0dXNfdCBwYXJzZU5hbWVQYXJ0KGNvbnN0IFN0cmluZzgmIHBhcnQsIGludCogYXhpcywgdWludDMyX3QqIHZhbHVlKTsKLQotICAgIHN0YXRpYyB1aW50MzJfdCBnZXRDb25maWdWYWx1ZUZvckF4aXMoY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcsIGludCBheGlzKTsKLQotICAgIHN0YXRpYyBib29sIGNvbmZpZ1NhbWVFeGNlcHQoY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcsCi0gICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcmIG90aGVyQ29uZmlnLCBpbnQgYXhpcyk7Ci0KLSAgICBzdGF0aWMgYm9vbCBnZXRNY2NOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0TW5jTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldExvY2FsZU5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRTY3JlZW5MYXlvdXRTaXplTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldFNjcmVlbkxheW91dExvbmdOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3JpZW50YXRpb25OYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0VWlNb2RlVHlwZU5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRVaU1vZGVOaWdodE5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLSAgICBzdGF0aWMgYm9vbCBnZXREZW5zaXR5TmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldFRvdWNoc2NyZWVuTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldEtleXNIaWRkZW5OYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0S2V5Ym9hcmROYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0TmF2aWdhdGlvbk5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLSAgICBzdGF0aWMgYm9vbCBnZXROYXZIaWRkZW5OYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0U2NyZWVuU2l6ZU5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRTbWFsbGVzdFNjcmVlbldpZHRoRHBOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0U2NyZWVuV2lkdGhEcE5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRTY3JlZW5IZWlnaHREcE5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRMYXlvdXREaXJlY3Rpb25OYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0VmVyc2lvbk5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLQotICAgIGludCBjb21wYXJlKGNvbnN0IEFhcHRHcm91cEVudHJ5JiBvKSBjb25zdDsKLQotICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgdG9QYXJhbXMoKSBjb25zdDsKLQotICAgIGlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBBYXB0R3JvdXBFbnRyeSYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA8IDA7IH0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEFhcHRHcm91cEVudHJ5JiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pIDw9IDA7IH0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFhcHRHcm91cEVudHJ5JiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pID09IDA7IH0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFhcHRHcm91cEVudHJ5JiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pICE9IDA7IH0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEFhcHRHcm91cEVudHJ5JiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pID49IDA7IH0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgQWFwdEdyb3VwRW50cnkmIG8pIGNvbnN0IHsgcmV0dXJuIGNvbXBhcmUobykgPiAwOyB9Ci0KLSAgICBTdHJpbmc4IHRvU3RyaW5nKCkgY29uc3Q7Ci0gICAgU3RyaW5nOCB0b0Rpck5hbWUoY29uc3QgU3RyaW5nOCYgcmVzVHlwZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBTdHJpbmc4JiBnZXRWZXJzaW9uU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdmVyc2lvbjsgfQotCi1wcml2YXRlOgotICAgIFN0cmluZzggbWNjOwotICAgIFN0cmluZzggbW5jOwotICAgIFN0cmluZzggbG9jYWxlOwotICAgIFN0cmluZzggdmVuZG9yOwotICAgIFN0cmluZzggc21hbGxlc3RTY3JlZW5XaWR0aERwOwotICAgIFN0cmluZzggc2NyZWVuV2lkdGhEcDsKLSAgICBTdHJpbmc4IHNjcmVlbkhlaWdodERwOwotICAgIFN0cmluZzggc2NyZWVuTGF5b3V0U2l6ZTsKLSAgICBTdHJpbmc4IHNjcmVlbkxheW91dExvbmc7Ci0gICAgU3RyaW5nOCBvcmllbnRhdGlvbjsKLSAgICBTdHJpbmc4IHVpTW9kZVR5cGU7Ci0gICAgU3RyaW5nOCB1aU1vZGVOaWdodDsKLSAgICBTdHJpbmc4IGRlbnNpdHk7Ci0gICAgU3RyaW5nOCB0b3VjaHNjcmVlbjsKLSAgICBTdHJpbmc4IGtleXNIaWRkZW47Ci0gICAgU3RyaW5nOCBrZXlib2FyZDsKLSAgICBTdHJpbmc4IG5hdkhpZGRlbjsKLSAgICBTdHJpbmc4IG5hdmlnYXRpb247Ci0gICAgU3RyaW5nOCBzY3JlZW5TaXplOwotICAgIFN0cmluZzggbGF5b3V0RGlyZWN0aW9uOwotICAgIFN0cmluZzggdmVyc2lvbjsKLQotICAgIG11dGFibGUgYm9vbCBtUGFyYW1zQ2hhbmdlZDsKLSAgICBtdXRhYmxlIFJlc1RhYmxlX2NvbmZpZyBtUGFyYW1zOwotfTsKLQotaW5saW5lIGludCBjb21wYXJlX3R5cGUoY29uc3QgQWFwdEdyb3VwRW50cnkmIGxocywgY29uc3QgQWFwdEdyb3VwRW50cnkmIHJocykKLXsKLSAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKTsKLX0KLQotaW5saW5lIGludCBzdHJpY3RseV9vcmRlcl90eXBlKGNvbnN0IEFhcHRHcm91cEVudHJ5JiBsaHMsIGNvbnN0IEFhcHRHcm91cEVudHJ5JiByaHMpCi17Ci0gICAgcmV0dXJuIGNvbXBhcmVfdHlwZShsaHMsIHJocykgPCAwOwotfQotCi1jbGFzcyBBYXB0R3JvdXA7Ci1jbGFzcyBGaWxlUGF0aFN0b3JlOwotCi0vKioKLSAqIEEgc2luZ2xlIGFzc2V0IGZpbGUgd2Uga25vdyBhYm91dC4KLSAqLwotY2xhc3MgQWFwdEZpbGUgOiBwdWJsaWMgUmVmQmFzZQotewotcHVibGljOgotICAgIEFhcHRGaWxlKGNvbnN0IFN0cmluZzgmIHNvdXJjZUZpbGUsIGNvbnN0IEFhcHRHcm91cEVudHJ5JiBncm91cEVudHJ5LAotICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIHJlc1R5cGUpCi0gICAgICAgIDogbUdyb3VwRW50cnkoZ3JvdXBFbnRyeSkKLSAgICAgICAgLCBtUmVzb3VyY2VUeXBlKHJlc1R5cGUpCi0gICAgICAgICwgbVNvdXJjZUZpbGUoc291cmNlRmlsZSkKLSAgICAgICAgLCBtRGF0YShOVUxMKQotICAgICAgICAsIG1EYXRhU2l6ZSgwKQotICAgICAgICAsIG1CdWZmZXJTaXplKDApCi0gICAgICAgICwgbUNvbXByZXNzaW9uKFppcEVudHJ5OjprQ29tcHJlc3NTdG9yZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vcHJpbnRmKCJuZXcgQWFwdEZpbGUgY3JlYXRlZCAlc1xuIiwgKGNvbnN0IGNoYXIqKXNvdXJjZUZpbGUpOwotICAgICAgICB9Ci0gICAgdmlydHVhbCB+QWFwdEZpbGUoKSB7Ci0gICAgICAgIGZyZWUobURhdGEpOwotICAgIH0KLQotICAgIGNvbnN0IFN0cmluZzgmIGdldFBhdGgoKSBjb25zdCB7IHJldHVybiBtUGF0aDsgfQotICAgIGNvbnN0IEFhcHRHcm91cEVudHJ5JiBnZXRHcm91cEVudHJ5KCkgY29uc3QgeyByZXR1cm4gbUdyb3VwRW50cnk7IH0KLQotICAgIC8vIERhdGEgQVBJLiAgSWYgdGhlcmUgaXMgZGF0YSBhdHRhY2hlZCB0byB0aGUgZmlsZSwKLSAgICAvLyBnZXRTb3VyY2VGaWxlKCkgaXMgbm90IHVzZWQuCi0gICAgYm9vbCBoYXNEYXRhKCkgY29uc3QgeyByZXR1cm4gbURhdGEgIT0gTlVMTDsgfQotICAgIGNvbnN0IHZvaWQqIGdldERhdGEoKSBjb25zdCB7IHJldHVybiBtRGF0YTsgfQotICAgIHNpemVfdCBnZXRTaXplKCkgY29uc3QgeyByZXR1cm4gbURhdGFTaXplOyB9Ci0gICAgdm9pZCogZWRpdERhdGEoc2l6ZV90IHNpemUpOwotICAgIHZvaWQqIGVkaXREYXRhKHNpemVfdCogb3V0U2l6ZSA9IE5VTEwpOwotICAgIHZvaWQqIHBhZERhdGEoc2l6ZV90IHdvcmRTaXplKTsKLSAgICBzdGF0dXNfdCB3cml0ZURhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpOwotICAgIHZvaWQgY2xlYXJEYXRhKCk7Ci0KLSAgICBjb25zdCBTdHJpbmc4JiBnZXRSZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBtUmVzb3VyY2VUeXBlOyB9Ci0KLSAgICAvLyBGaWxlIEFQSS4gIElmIHRoZSBmaWxlIGRvZXMgbm90IGhvbGQgcmF3IGRhdGEsIHRoaXMgaXMKLSAgICAvLyBhIGZ1bGwgcGF0aCB0byBhIGZpbGUgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBob2xkcyBpdHMgZGF0YS4KLSAgICBjb25zdCBTdHJpbmc4JiBnZXRTb3VyY2VGaWxlKCkgY29uc3QgeyByZXR1cm4gbVNvdXJjZUZpbGU7IH0KLQotICAgIFN0cmluZzggZ2V0UHJpbnRhYmxlU291cmNlKCkgY29uc3Q7Ci0KLSAgICAvLyBEZXNpcmVkIGNvbXByZXNzaW9uIG1ldGhvZCwgYXMgcGVyIHV0aWxzL1ppcEVudHJ5LmguICBGb3IgZXhhbXBsZSwKLSAgICAvLyBubyBjb21wcmVzc2lvbiBpcyBaaXBFbnRyeTo6a0NvbXByZXNzU3RvcmVkLgotICAgIGludCBnZXRDb21wcmVzc2lvbk1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1Db21wcmVzc2lvbjsgfQotICAgIHZvaWQgc2V0Q29tcHJlc3Npb25NZXRob2QoaW50IGMpIHsgbUNvbXByZXNzaW9uID0gYzsgfQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQWFwdEdyb3VwOwotCi0gICAgU3RyaW5nOCBtUGF0aDsKLSAgICBBYXB0R3JvdXBFbnRyeSBtR3JvdXBFbnRyeTsKLSAgICBTdHJpbmc4IG1SZXNvdXJjZVR5cGU7Ci0gICAgU3RyaW5nOCBtU291cmNlRmlsZTsKLSAgICB2b2lkKiBtRGF0YTsKLSAgICBzaXplX3QgbURhdGFTaXplOwotICAgIHNpemVfdCBtQnVmZmVyU2l6ZTsKLSAgICBpbnQgbUNvbXByZXNzaW9uOwotfTsKLQotLyoqCi0gKiBBIGdyb3VwIG9mIHJlbGF0ZWQgZmlsZXMgKHRoZSBzYW1lIGZpbGUsIHdpdGggZGlmZmVyZW50Ci0gKiB2ZW5kb3IvbG9jYWxlIHZhcmlhdGlvbnMpLgotICovCi1jbGFzcyBBYXB0R3JvdXAgOiBwdWJsaWMgUmVmQmFzZQotewotcHVibGljOgotICAgIEFhcHRHcm91cChjb25zdCBTdHJpbmc4JiBsZWFmLCBjb25zdCBTdHJpbmc4JiBwYXRoKQotICAgICAgICA6IG1MZWFmKGxlYWYpLCBtUGF0aChwYXRoKSB7IH0KLSAgICB2aXJ0dWFsIH5BYXB0R3JvdXAoKSB7IH0KLQotICAgIGNvbnN0IFN0cmluZzgmIGdldExlYWYoKSBjb25zdCB7IHJldHVybiBtTGVhZjsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgcmVsYXRpdmUgcGF0aCBhZnRlciB0aGUgQWFwdEdyb3VwRW50cnkgZGlycy4KLSAgICBjb25zdCBTdHJpbmc4JiBnZXRQYXRoKCkgY29uc3QgeyByZXR1cm4gbVBhdGg7IH0KLQotICAgIGNvbnN0IERlZmF1bHRLZXllZFZlY3RvcjxBYXB0R3JvdXBFbnRyeSwgc3A8QWFwdEZpbGU+ID4mIGdldEZpbGVzKCkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gbUZpbGVzOyB9Ci0KLSAgICBzdGF0dXNfdCBhZGRGaWxlKGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSk7Ci0gICAgdm9pZCByZW1vdmVGaWxlKHNpemVfdCBpbmRleCk7Ci0KLSAgICB2b2lkIHByaW50KGNvbnN0IFN0cmluZzgmIHByZWZpeCkgY29uc3Q7Ci0KLSAgICBTdHJpbmc4IGdldFByaW50YWJsZVNvdXJjZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFN0cmluZzggbUxlYWY7Ci0gICAgU3RyaW5nOCBtUGF0aDsKLQotICAgIERlZmF1bHRLZXllZFZlY3RvcjxBYXB0R3JvdXBFbnRyeSwgc3A8QWFwdEZpbGU+ID4gbUZpbGVzOwotfTsKLQotLyoqCi0gKiBBIHNpbmdsZSBkaXJlY3Rvcnkgb2YgYXNzZXRzLCB3aGljaCBjYW4gY29udGFpbiBmaWxlcyBhbmQgb3RoZXIKLSAqIHN1Yi1kaXJlY3Rvcmllcy4KLSAqLwotY2xhc3MgQWFwdERpciA6IHB1YmxpYyBSZWZCYXNlCi17Ci1wdWJsaWM6Ci0gICAgQWFwdERpcihjb25zdCBTdHJpbmc4JiBsZWFmLCBjb25zdCBTdHJpbmc4JiBwYXRoKQotICAgICAgICA6IG1MZWFmKGxlYWYpLCBtUGF0aChwYXRoKSB7IH0KLSAgICB2aXJ0dWFsIH5BYXB0RGlyKCkgeyB9Ci0KLSAgICBjb25zdCBTdHJpbmc4JiBnZXRMZWFmKCkgY29uc3QgeyByZXR1cm4gbUxlYWY7IH0KLQotICAgIGNvbnN0IFN0cmluZzgmIGdldFBhdGgoKSBjb25zdCB7IHJldHVybiBtUGF0aDsgfQotCi0gICAgY29uc3QgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPEFhcHRHcm91cD4gPiYgZ2V0RmlsZXMoKSBjb25zdCB7IHJldHVybiBtRmlsZXM7IH0KLSAgICBjb25zdCBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8QWFwdERpcj4gPiYgZ2V0RGlycygpIGNvbnN0IHsgcmV0dXJuIG1EaXJzOyB9Ci0KLSAgICB2aXJ0dWFsIHN0YXR1c190IGFkZEZpbGUoY29uc3QgU3RyaW5nOCYgbmFtZSwgY29uc3Qgc3A8QWFwdEdyb3VwPiYgZmlsZSk7Ci0KLSAgICB2b2lkIHJlbW92ZUZpbGUoY29uc3QgU3RyaW5nOCYgbmFtZSk7Ci0gICAgdm9pZCByZW1vdmVEaXIoY29uc3QgU3RyaW5nOCYgbmFtZSk7Ci0KLSAgICAvKgotICAgICAqIFBlcmZvcm0gc29tZSBzYW5pdHkgY2hlY2tzIG9uIHRoZSBuYW1lcyBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaGVyZS4KLSAgICAgKiBJbiBwYXJ0aWN1bGFyOgotICAgICAqICAtIENoZWNrIGZvciBpbGxlZ2FsIGNoYXJzIGluIGZpbGVuYW1lcy4KLSAgICAgKiAgLSBDaGVjayBmaWxlbmFtZSBsZW5ndGguCi0gICAgICogIC0gQ2hlY2sgZm9yIHByZXNlbmNlIG9mICIuZ3oiIGFuZCBub24tIi5neiIgY29waWVzIG9mIHNhbWUgZmlsZS4KLSAgICAgKiAgLSBDaGVjayBmb3IgbXVsdGlwbGUgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggaW4gYSBjYXNlLWluc2Vuc2l0aXZlCi0gICAgICogICAgZmFzaGlvbiAocHJvYmxlbWF0aWMgZm9yIHNvbWUgc3lzdGVtcykuCi0gICAgICoKLSAgICAgKiBDb21wYXJpbmcgbmFtZXMgYWdhaW5zdCBhbGwgb3RoZXIgbmFtZXMgaXMgTyhuXjIpLiAgV2UgY291bGQgc3BlZWQKLSAgICAgKiBpdCB1cCBzb21lIGJ5IHNvcnRpbmcgdGhlIGVudHJpZXMgYW5kIGJlaW5nIHNtYXJ0ZXIgYWJvdXQgd2hhdCB3ZQotICAgICAqIGNvbXBhcmUgYWdhaW5zdCwgYnV0IEknbSBub3QgZXhwZWN0aW5nIHRvIGhhdmUgZW5vdWdoIGZpbGVzIGluIGEKLSAgICAgKiBzaW5nbGUgZGlyZWN0b3J5IHRvIG1ha2UgYSBub3RpY2VhYmxlIGRpZmZlcmVuY2UgaW4gc3BlZWQuCi0gICAgICoKLSAgICAgKiBOb3RlIHRoYXQgc29ydGluZyBoZXJlIGlzIG5vdCBlbm91Z2ggdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHBhY2thZ2UKLSAgICAgKiBjb250ZW50cyBhcmUgc29ydGVkIC0tIHN1YnNlcXVlbnQgdXBkYXRlcyBjYW4gcmVhcnJhbmdlIHRoaW5ncy4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCB2YWxpZGF0ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBwcmludChjb25zdCBTdHJpbmc4JiBwcmVmaXgpIGNvbnN0OwotCi0gICAgU3RyaW5nOCBnZXRQcmludGFibGVTb3VyY2UoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQWFwdEFzc2V0czsKLQotICAgIHN0YXR1c190IGFkZERpcihjb25zdCBTdHJpbmc4JiBuYW1lLCBjb25zdCBzcDxBYXB0RGlyPiYgZGlyKTsKLSAgICBzcDxBYXB0RGlyPiBtYWtlRGlyKGNvbnN0IFN0cmluZzgmIG5hbWUpOwotICAgIHN0YXR1c190IGFkZExlYWZGaWxlKGNvbnN0IFN0cmluZzgmIGxlYWZOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSk7Ci0gICAgdmlydHVhbCBzc2l6ZV90IHNsdXJwRnVsbFRyZWUoQnVuZGxlKiBidW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nOCYgc3JjRGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFhcHRHcm91cEVudHJ5JiBraW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIHJlc1R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RmlsZVBhdGhTdG9yZT4mIGZ1bGxSZXNQYXRocyk7Ci0KLSAgICBTdHJpbmc4IG1MZWFmOwotICAgIFN0cmluZzggbVBhdGg7Ci0KLSAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8QWFwdEdyb3VwPiA+IG1GaWxlczsKLSAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8QWFwdERpcj4gPiBtRGlyczsKLX07Ci0KLS8qKgotICogQWxsIGluZm9ybWF0aW9uIHdlIGtub3cgYWJvdXQgYSBwYXJ0aWN1bGFyIHN5bWJvbC4KLSAqLwotY2xhc3MgQWFwdFN5bWJvbEVudHJ5Ci17Ci1wdWJsaWM6Ci0gICAgQWFwdFN5bWJvbEVudHJ5KCkKLSAgICAgICAgOiBpc1B1YmxpYyhmYWxzZSksIGlzSmF2YVN5bWJvbChmYWxzZSksIHR5cGVDb2RlKFRZUEVfVU5LTk9XTikKLSAgICB7Ci0gICAgfQotICAgIEFhcHRTeW1ib2xFbnRyeShjb25zdCBTdHJpbmc4JiBfbmFtZSkKLSAgICAgICAgOiBuYW1lKF9uYW1lKSwgaXNQdWJsaWMoZmFsc2UpLCBpc0phdmFTeW1ib2woZmFsc2UpLCB0eXBlQ29kZShUWVBFX1VOS05PV04pCi0gICAgewotICAgIH0KLSAgICBBYXB0U3ltYm9sRW50cnkoY29uc3QgQWFwdFN5bWJvbEVudHJ5JiBvKQotICAgICAgICA6IG5hbWUoby5uYW1lKSwgc291cmNlUG9zKG8uc291cmNlUG9zKSwgaXNQdWJsaWMoby5pc1B1YmxpYykKLSAgICAgICAgLCBpc0phdmFTeW1ib2woby5pc0phdmFTeW1ib2wpLCBjb21tZW50KG8uY29tbWVudCksIHR5cGVDb21tZW50KG8udHlwZUNvbW1lbnQpCi0gICAgICAgICwgdHlwZUNvZGUoby50eXBlQ29kZSksIGludDMyVmFsKG8uaW50MzJWYWwpLCBzdHJpbmdWYWwoby5zdHJpbmdWYWwpCi0gICAgewotICAgIH0KLSAgICBBYXB0U3ltYm9sRW50cnkgb3BlcmF0b3I9KGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgbykKLSAgICB7Ci0gICAgICAgIHNvdXJjZVBvcyA9IG8uc291cmNlUG9zOwotICAgICAgICBpc1B1YmxpYyA9IG8uaXNQdWJsaWM7Ci0gICAgICAgIGlzSmF2YVN5bWJvbCA9IG8uaXNKYXZhU3ltYm9sOwotICAgICAgICBjb21tZW50ID0gby5jb21tZW50OwotICAgICAgICB0eXBlQ29tbWVudCA9IG8udHlwZUNvbW1lbnQ7Ci0gICAgICAgIHR5cGVDb2RlID0gby50eXBlQ29kZTsKLSAgICAgICAgaW50MzJWYWwgPSBvLmludDMyVmFsOwotICAgICAgICBzdHJpbmdWYWwgPSBvLnN0cmluZ1ZhbDsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJpbmc4IG5hbWU7Ci0gICAgCi0gICAgU291cmNlUG9zIHNvdXJjZVBvczsKLSAgICBib29sIGlzUHVibGljOwotICAgIGJvb2wgaXNKYXZhU3ltYm9sOwotICAgIAotICAgIFN0cmluZzE2IGNvbW1lbnQ7Ci0gICAgU3RyaW5nMTYgdHlwZUNvbW1lbnQ7Ci0gICAgCi0gICAgZW51bSB7Ci0gICAgICAgIFRZUEVfVU5LTk9XTiA9IDAsCi0gICAgICAgIFRZUEVfSU5UMzIsCi0gICAgICAgIFRZUEVfU1RSSU5HCi0gICAgfTsKLSAgICAKLSAgICBpbnQgdHlwZUNvZGU7Ci0gICAgCi0gICAgLy8gVmFsdWUuICBNYXkgYmUgb25lIG9mIHRoZXNlLgotICAgIGludDMyX3QgaW50MzJWYWw7Ci0gICAgU3RyaW5nOCBzdHJpbmdWYWw7Ci19OwotCi0vKioKLSAqIEEgZ3JvdXAgb2YgcmVsYXRlZCBzeW1ib2xzIChzdWNoIGFzIGluZGljZXMgaW50byBhIHN0cmluZyBibG9jaykKLSAqIHRoYXQgaGF2ZSBiZWVuIGdlbmVyYXRlZCBmcm9tIHRoZSBhc3NldHMuCi0gKi8KLWNsYXNzIEFhcHRTeW1ib2xzIDogcHVibGljIFJlZkJhc2UKLXsKLXB1YmxpYzoKLSAgICBBYXB0U3ltYm9scygpIHsgfQotICAgIHZpcnR1YWwgfkFhcHRTeW1ib2xzKCkgeyB9Ci0KLSAgICBzdGF0dXNfdCBhZGRTeW1ib2woY29uc3QgU3RyaW5nOCYgbmFtZSwgaW50MzJfdCB2YWx1ZSwgY29uc3QgU291cmNlUG9zJiBwb3MpIHsKLSAgICAgICAgaWYgKCFjaGVja192YWxpZF9zeW1ib2xfbmFtZShuYW1lLCBwb3MsICJzeW1ib2wiKSkgewotICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKLSAgICAgICAgfQotICAgICAgICBBYXB0U3ltYm9sRW50cnkmIHN5bSA9IGVkaXRfc3ltYm9sKG5hbWUsICZwb3MpOwotICAgICAgICBzeW0udHlwZUNvZGUgPSBBYXB0U3ltYm9sRW50cnk6OlRZUEVfSU5UMzI7Ci0gICAgICAgIHN5bS5pbnQzMlZhbCA9IHZhbHVlOwotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotCi0gICAgc3RhdHVzX3QgYWRkU3RyaW5nU3ltYm9sKGNvbnN0IFN0cmluZzgmIG5hbWUsIGNvbnN0IFN0cmluZzgmIHZhbHVlLAotICAgICAgICAgICAgY29uc3QgU291cmNlUG9zJiBwb3MpIHsKLSAgICAgICAgaWYgKCFjaGVja192YWxpZF9zeW1ib2xfbmFtZShuYW1lLCBwb3MsICJzeW1ib2wiKSkgewotICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKLSAgICAgICAgfQotICAgICAgICBBYXB0U3ltYm9sRW50cnkmIHN5bSA9IGVkaXRfc3ltYm9sKG5hbWUsICZwb3MpOwotICAgICAgICBzeW0udHlwZUNvZGUgPSBBYXB0U3ltYm9sRW50cnk6OlRZUEVfU1RSSU5HOwotICAgICAgICBzeW0uc3RyaW5nVmFsID0gdmFsdWU7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBzdGF0dXNfdCBtYWtlU3ltYm9sUHVibGljKGNvbnN0IFN0cmluZzgmIG5hbWUsIGNvbnN0IFNvdXJjZVBvcyYgcG9zKSB7Ci0gICAgICAgIGlmICghY2hlY2tfdmFsaWRfc3ltYm9sX25hbWUobmFtZSwgcG9zLCAic3ltYm9sIikpIHsKLSAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgICAgIH0KLSAgICAgICAgQWFwdFN5bWJvbEVudHJ5JiBzeW0gPSBlZGl0X3N5bWJvbChuYW1lLCAmcG9zKTsKLSAgICAgICAgc3ltLmlzUHVibGljID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgIH0KLQotICAgIHN0YXR1c190IG1ha2VTeW1ib2xKYXZhU3ltYm9sKGNvbnN0IFN0cmluZzgmIG5hbWUsIGNvbnN0IFNvdXJjZVBvcyYgcG9zKSB7Ci0gICAgICAgIGlmICghY2hlY2tfdmFsaWRfc3ltYm9sX25hbWUobmFtZSwgcG9zLCAic3ltYm9sIikpIHsKLSAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgICAgIH0KLSAgICAgICAgQWFwdFN5bWJvbEVudHJ5JiBzeW0gPSBlZGl0X3N5bWJvbChuYW1lLCAmcG9zKTsKLSAgICAgICAgc3ltLmlzSmF2YVN5bWJvbCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZENvbW1lbnQoY29uc3QgU3RyaW5nOCYgbmFtZSwgY29uc3QgU3RyaW5nMTYmIGNvbW1lbnQsIGNvbnN0IFNvdXJjZVBvcyYgcG9zKSB7Ci0gICAgICAgIGlmIChjb21tZW50LnNpemUoKSA8PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgQWFwdFN5bWJvbEVudHJ5JiBzeW0gPSBlZGl0X3N5bWJvbChuYW1lLCAmcG9zKTsKLSAgICAgICAgaWYgKHN5bS5jb21tZW50LnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICBzeW0uY29tbWVudCA9IGNvbW1lbnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzeW0uY29tbWVudC5hcHBlbmQoU3RyaW5nMTYoIlxuIikpOwotICAgICAgICAgICAgc3ltLmNvbW1lbnQuYXBwZW5kKGNvbW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRUeXBlQ29tbWVudChjb25zdCBTdHJpbmc4JiBuYW1lLCBjb25zdCBTdHJpbmcxNiYgY29tbWVudCkgewotICAgICAgICBpZiAoY29tbWVudC5zaXplKCkgPD0gMCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIEFhcHRTeW1ib2xFbnRyeSYgc3ltID0gZWRpdF9zeW1ib2wobmFtZSwgTlVMTCk7Ci0gICAgICAgIGlmIChzeW0udHlwZUNvbW1lbnQuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIHN5bS50eXBlQ29tbWVudCA9IGNvbW1lbnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzeW0udHlwZUNvbW1lbnQuYXBwZW5kKFN0cmluZzE2KCJcbiIpKTsKLSAgICAgICAgICAgIHN5bS50eXBlQ29tbWVudC5hcHBlbmQoY29tbWVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3A8QWFwdFN5bWJvbHM+IGFkZE5lc3RlZFN5bWJvbChjb25zdCBTdHJpbmc4JiBuYW1lLCBjb25zdCBTb3VyY2VQb3MmIHBvcykgewotICAgICAgICBpZiAoIWNoZWNrX3ZhbGlkX3N5bWJvbF9uYW1lKG5hbWUsIHBvcywgIm5lc3RlZCBzeW1ib2wiKSkgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNwPEFhcHRTeW1ib2xzPiBzeW0gPSBtTmVzdGVkU3ltYm9scy52YWx1ZUZvcihuYW1lKTsKLSAgICAgICAgaWYgKHN5bSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzeW0gPSBuZXcgQWFwdFN5bWJvbHMoKTsKLSAgICAgICAgICAgIG1OZXN0ZWRTeW1ib2xzLmFkZChuYW1lLCBzeW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN5bTsKLSAgICB9Ci0KLSAgICBzdGF0dXNfdCBhcHBseUphdmFTeW1ib2xzKGNvbnN0IHNwPEFhcHRTeW1ib2xzPiYgamF2YVN5bWJvbHMpOwotCi0gICAgY29uc3QgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgQWFwdFN5bWJvbEVudHJ5PiYgZ2V0U3ltYm9scygpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1TeW1ib2xzOyB9Ci0gICAgY29uc3QgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPEFhcHRTeW1ib2xzPiA+JiBnZXROZXN0ZWRTeW1ib2xzKCkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gbU5lc3RlZFN5bWJvbHM7IH0KLQotICAgIGNvbnN0IFN0cmluZzE2JiBnZXRDb21tZW50KGNvbnN0IFN0cmluZzgmIG5hbWUpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIGdldF9zeW1ib2wobmFtZSkuY29tbWVudDsgfQotICAgIGNvbnN0IFN0cmluZzE2JiBnZXRUeXBlQ29tbWVudChjb25zdCBTdHJpbmc4JiBuYW1lKSBjb25zdAotICAgICAgICB7IHJldHVybiBnZXRfc3ltYm9sKG5hbWUpLnR5cGVDb21tZW50OyB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjaGVja192YWxpZF9zeW1ib2xfbmFtZShjb25zdCBTdHJpbmc4JiBzeW1ib2wsIGNvbnN0IFNvdXJjZVBvcyYgcG9zLCBjb25zdCBjaGFyKiBsYWJlbCkgewotICAgICAgICBpZiAodmFsaWRfc3ltYm9sX25hbWUoc3ltYm9sKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcG9zLmVycm9yKCJpbnZhbGlkICVzOiAnJXMnXG4iLCBsYWJlbCwgc3ltYm9sLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBBYXB0U3ltYm9sRW50cnkmIGVkaXRfc3ltYm9sKGNvbnN0IFN0cmluZzgmIHN5bWJvbCwgY29uc3QgU291cmNlUG9zKiBwb3MpIHsKLSAgICAgICAgc3NpemVfdCBpID0gbVN5bWJvbHMuaW5kZXhPZktleShzeW1ib2wpOwotICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgIGkgPSBtU3ltYm9scy5hZGQoc3ltYm9sLCBBYXB0U3ltYm9sRW50cnkoc3ltYm9sKSk7Ci0gICAgICAgIH0KLSAgICAgICAgQWFwdFN5bWJvbEVudHJ5JiBzeW0gPSBtU3ltYm9scy5lZGl0VmFsdWVBdChpKTsKLSAgICAgICAgaWYgKHBvcyAhPSBOVUxMICYmIHN5bS5zb3VyY2VQb3MubGluZSA8IDApIHsKLSAgICAgICAgICAgIHN5bS5zb3VyY2VQb3MgPSAqcG9zOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzeW07Ci0gICAgfQotICAgIGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgZ2V0X3N5bWJvbChjb25zdCBTdHJpbmc4JiBzeW1ib2wpIGNvbnN0IHsKLSAgICAgICAgc3NpemVfdCBpID0gbVN5bWJvbHMuaW5kZXhPZktleShzeW1ib2wpOwotICAgICAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVN5bWJvbHMudmFsdWVBdChpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbURlZlN5bWJvbDsKLSAgICB9Ci0KLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBBYXB0U3ltYm9sRW50cnk+ICAgICAgICAgICBtU3ltYm9sczsKLSAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8QWFwdFN5bWJvbHM+ID4gICBtTmVzdGVkU3ltYm9sczsKLSAgICBBYXB0U3ltYm9sRW50cnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGVmU3ltYm9sOwotfTsKLQotY2xhc3MgUmVzb3VyY2VUeXBlU2V0IDogcHVibGljIFJlZkJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgS2V5ZWRWZWN0b3I8U3RyaW5nOCxzcDxBYXB0R3JvdXA+ID4KLXsKLXB1YmxpYzoKLSAgICBSZXNvdXJjZVR5cGVTZXQoKTsKLX07Ci0KLS8vIFN0b3JhZ2UgZm9yIGxpc3RzIG9mIGZ1bGx5IHF1YWxpZmllZCBwYXRocyBmb3IKLS8vIHJlc291cmNlcyBlbmNvdW50ZXJlZCBkdXJpbmcgc2x1cnBpbmcuCi1jbGFzcyBGaWxlUGF0aFN0b3JlIDogcHVibGljIFJlZkJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgcHVibGljIFZlY3RvcjxTdHJpbmc4PgotewotcHVibGljOgotICAgIEZpbGVQYXRoU3RvcmUoKTsKLX07Ci0KLS8qKgotICogQXNzZXQgaGllcmFyY2h5IGJlaW5nIG9wZXJhdGVkIG9uLgotICovCi1jbGFzcyBBYXB0QXNzZXRzIDogcHVibGljIEFhcHREaXIKLXsKLXB1YmxpYzoKLSAgICBBYXB0QXNzZXRzKCk7Ci0gICAgdmlydHVhbCB+QWFwdEFzc2V0cygpIHsgZGVsZXRlIG1SZXM7IH0KLQotICAgIGNvbnN0IFN0cmluZzgmIGdldFBhY2thZ2UoKSBjb25zdCB7IHJldHVybiBtUGFja2FnZTsgfQotICAgIHZvaWQgc2V0UGFja2FnZShjb25zdCBTdHJpbmc4JiBwYWNrYWdlKSB7Ci0gICAgICAgIG1QYWNrYWdlID0gcGFja2FnZTsKLSAgICAgICAgbVN5bWJvbHNQcml2YXRlUGFja2FnZSA9IHBhY2thZ2U7Ci0gICAgICAgIG1IYXZlUHJpdmF0ZVN5bWJvbHMgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBTb3J0ZWRWZWN0b3I8QWFwdEdyb3VwRW50cnk+JiBnZXRHcm91cEVudHJpZXMoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgc3RhdHVzX3QgYWRkRmlsZShjb25zdCBTdHJpbmc4JiBuYW1lLCBjb25zdCBzcDxBYXB0R3JvdXA+JiBmaWxlKTsKLQotICAgIHNwPEFhcHRGaWxlPiBhZGRGaWxlKGNvbnN0IFN0cmluZzgmIGZpbGVQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFhcHRHcm91cEVudHJ5JiBlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiBzcmNEaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3A8QWFwdEdyb3VwPiogb3V0R3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nOCYgcmVzVHlwZSk7Ci0KLSAgICB2b2lkIGFkZFJlc291cmNlKGNvbnN0IFN0cmluZzgmIGxlYWZOYW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nOCYgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIHJlc1R5cGUpOwotCi0gICAgdm9pZCBhZGRHcm91cEVudHJ5KGNvbnN0IEFhcHRHcm91cEVudHJ5JiBlbnRyeSkgeyBtR3JvdXBFbnRyaWVzLmFkZChlbnRyeSk7IH0KLSAgICAKLSAgICBzc2l6ZV90IHNsdXJwRnJvbUFyZ3MoQnVuZGxlKiBidW5kbGUpOwotCi0gICAgc3A8QWFwdFN5bWJvbHM+IGdldFN5bWJvbHNGb3IoY29uc3QgU3RyaW5nOCYgbmFtZSk7Ci0KLSAgICBzcDxBYXB0U3ltYm9scz4gZ2V0SmF2YVN5bWJvbHNGb3IoY29uc3QgU3RyaW5nOCYgbmFtZSk7Ci0KLSAgICBzdGF0dXNfdCBhcHBseUphdmFTeW1ib2xzKCk7Ci0KLSAgICBjb25zdCBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8QWFwdFN5bWJvbHM+ID4mIGdldFN5bWJvbHMoKSBjb25zdCB7IHJldHVybiBtU3ltYm9sczsgfQotCi0gICAgU3RyaW5nOCBnZXRTeW1ib2xzUHJpdmF0ZVBhY2thZ2UoKSBjb25zdCB7IHJldHVybiBtU3ltYm9sc1ByaXZhdGVQYWNrYWdlOyB9Ci0gICAgdm9pZCBzZXRTeW1ib2xzUHJpdmF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nOCYgcGtnKSB7Ci0gICAgICAgIG1TeW1ib2xzUHJpdmF0ZVBhY2thZ2UgPSBwa2c7Ci0gICAgICAgIG1IYXZlUHJpdmF0ZVN5bWJvbHMgPSBtU3ltYm9sc1ByaXZhdGVQYWNrYWdlICE9IG1QYWNrYWdlOwotICAgIH0KLQotICAgIGJvb2wgaGF2ZVByaXZhdGVTeW1ib2xzKCkgY29uc3QgeyByZXR1cm4gbUhhdmVQcml2YXRlU3ltYm9sczsgfQotCi0gICAgYm9vbCBpc0phdmFTeW1ib2woY29uc3QgQWFwdFN5bWJvbEVudHJ5JiBzeW0sIGJvb2wgaW5jbHVkZVByaXZhdGUpIGNvbnN0OwotCi0gICAgc3RhdHVzX3QgYnVpbGRJbmNsdWRlZFJlc291cmNlcyhCdW5kbGUqIGJ1bmRsZSk7Ci0gICAgc3RhdHVzX3QgYWRkSW5jbHVkZWRSZXNvdXJjZXMoY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlKTsKLSAgICBjb25zdCBSZXNUYWJsZSYgZ2V0SW5jbHVkZWRSZXNvdXJjZXMoKSBjb25zdDsKLQotICAgIHZvaWQgcHJpbnQoY29uc3QgU3RyaW5nOCYgcHJlZml4KSBjb25zdDsKLQotICAgIGlubGluZSBjb25zdCBWZWN0b3I8c3A8QWFwdERpcj4gPiYgcmVzRGlycygpIGNvbnN0IHsgcmV0dXJuIG1SZXNEaXJzOyB9Ci0gICAgc3A8QWFwdERpcj4gcmVzRGlyKGNvbnN0IFN0cmluZzgmIG5hbWUpIGNvbnN0OwotCi0gICAgaW5saW5lIHNwPEFhcHRBc3NldHM+IGdldE92ZXJsYXkoKSB7IHJldHVybiBtT3ZlcmxheTsgfQotICAgIGlubGluZSB2b2lkIHNldE92ZXJsYXkoc3A8QWFwdEFzc2V0cz4mIG92ZXJsYXkpIHsgbU92ZXJsYXkgPSBvdmVybGF5OyB9Ci0gICAgCi0gICAgaW5saW5lIEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPFJlc291cmNlVHlwZVNldD4gPiogZ2V0UmVzb3VyY2VzKCkgeyByZXR1cm4gbVJlczsgfQotICAgIGlubGluZSB2b2lkIAotICAgICAgICBzZXRSZXNvdXJjZXMoS2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8UmVzb3VyY2VUeXBlU2V0PiA+KiByZXMpIHsgZGVsZXRlIG1SZXM7IG1SZXMgPSByZXM7IH0KLQotICAgIGlubGluZSBzcDxGaWxlUGF0aFN0b3JlPiYgZ2V0RnVsbFJlc1BhdGhzKCkgeyByZXR1cm4gbUZ1bGxSZXNQYXRoczsgfQotICAgIGlubGluZSB2b2lkCi0gICAgICAgIHNldEZ1bGxSZXNQYXRocyhzcDxGaWxlUGF0aFN0b3JlPiYgcmVzKSB7IG1GdWxsUmVzUGF0aHMgPSByZXM7IH0KLQotICAgIGlubGluZSBzcDxGaWxlUGF0aFN0b3JlPiYgZ2V0RnVsbEFzc2V0UGF0aHMoKSB7IHJldHVybiBtRnVsbEFzc2V0UGF0aHM7IH0KLSAgICBpbmxpbmUgdm9pZAotICAgICAgICBzZXRGdWxsQXNzZXRQYXRocyhzcDxGaWxlUGF0aFN0b3JlPiYgcmVzKSB7IG1GdWxsQXNzZXRQYXRocyA9IHJlczsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgc3NpemVfdCBzbHVycEZ1bGxUcmVlKEJ1bmRsZSogYnVuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIHNyY0RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBYXB0R3JvdXBFbnRyeSYga2luZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiByZXNUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPEZpbGVQYXRoU3RvcmU+JiBmdWxsUmVzUGF0aHMpOwotCi0gICAgc3NpemVfdCBzbHVycFJlc291cmNlVHJlZShCdW5kbGUqIGJ1bmRsZSwgY29uc3QgU3RyaW5nOCYgc3JjRGlyKTsKLSAgICBzc2l6ZV90IHNsdXJwUmVzb3VyY2VaaXAoQnVuZGxlKiBidW5kbGUsIGNvbnN0IGNoYXIqIGZpbGVuYW1lKTsKLQotICAgIHN0YXR1c190IGZpbHRlcihCdW5kbGUqIGJ1bmRsZSk7Ci0KLSAgICBTdHJpbmc4IG1QYWNrYWdlOwotICAgIFNvcnRlZFZlY3RvcjxBYXB0R3JvdXBFbnRyeT4gbUdyb3VwRW50cmllczsKLSAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8QWFwdFN5bWJvbHM+ID4gbVN5bWJvbHM7Ci0gICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPEFhcHRTeW1ib2xzPiA+IG1KYXZhU3ltYm9sczsKLSAgICBTdHJpbmc4IG1TeW1ib2xzUHJpdmF0ZVBhY2thZ2U7Ci0gICAgYm9vbCBtSGF2ZVByaXZhdGVTeW1ib2xzOwotCi0gICAgVmVjdG9yPHNwPEFhcHREaXI+ID4gbVJlc0RpcnM7Ci0KLSAgICBib29sIG1DaGFuZ2VkOwotCi0gICAgYm9vbCBtSGF2ZUluY2x1ZGVkQXNzZXRzOwotICAgIEFzc2V0TWFuYWdlciBtSW5jbHVkZWRBc3NldHM7Ci0KLSAgICBzcDxBYXB0QXNzZXRzPiBtT3ZlcmxheTsKLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBzcDxSZXNvdXJjZVR5cGVTZXQ+ID4qIG1SZXM7Ci0KLSAgICBzcDxGaWxlUGF0aFN0b3JlPiBtRnVsbFJlc1BhdGhzOwotICAgIHNwPEZpbGVQYXRoU3RvcmU+IG1GdWxsQXNzZXRQYXRoczsKLX07Ci0KLSNlbmRpZiAvLyBfX0FBUFRfQVNTRVRTX0gKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9BbmRyb2lkLm1rIGIvdG9vbHMvYWFwdC9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTQ5ZjhlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0jIAotIyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIEFuZHJvaWQgQXNzZXQgUGFja2FnaW5nIFRvb2wKLSMKLQotIyBUaGlzIHRvb2wgaXMgcHJlYnVpbHQgaWYgd2UncmUgZG9pbmcgYW4gYXBwLW9ubHkgYnVpbGQuCi1pZmVxICgkKFRBUkdFVF9CVUlMRF9BUFBTKSwpCi0KLQotYWFwdF9zcmNfZmlsZXMgOj0gXAotCUFhcHRBc3NldHMuY3BwIFwKLQlDb21tYW5kLmNwcCBcCi0JQ3J1bmNoQ2FjaGUuY3BwIFwKLQlGaWxlRmluZGVyLmNwcCBcCi0JTWFpbi5jcHAgXAotCVBhY2thZ2UuY3BwIFwKLQlTdHJpbmdQb29sLmNwcCBcCi0JWE1MTm9kZS5jcHAgXAotCVJlc291cmNlRmlsdGVyLmNwcCBcCi0JUmVzb3VyY2VJZENhY2hlLmNwcCBcCi0JUmVzb3VyY2VUYWJsZS5jcHAgXAotCUltYWdlcy5jcHAgXAotCVJlc291cmNlLmNwcCBcCi0gICAgcHNldWRvbG9jYWxpemUuY3BwIFwKLSAgICBTb3VyY2VQb3MuY3BwIFwKLQlXb3JrUXVldWUuY3BwIFwKLSAgICBaaXBFbnRyeS5jcHAgXAotICAgIFppcEZpbGUuY3BwIFwKLQlxc29ydF9yX2NvbXBhdC5jCi0KLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKGFhcHRfc3JjX2ZpbGVzKQotCi1MT0NBTF9DRkxBR1MgKz0gLVduby1mb3JtYXQteTJrCi1pZmVxIChkYXJ3aW4sJChIT1NUX09TKSkKLUxPQ0FMX0NGTEFHUyArPSAtRF9EQVJXSU5fVU5MSU1JVEVEX1NUUkVBTVMKLWVuZGlmCi0KLUxPQ0FMX0NGTEFHUyArPSAtRFNUQVRJQ19BTkRST0lERldfRk9SX1RPT0xTCi0KLUxPQ0FMX0NfSU5DTFVERVMgKz0gZXh0ZXJuYWwvbGlicG5nCi1MT0NBTF9DX0lOQ0xVREVTICs9IGV4dGVybmFsL3psaWIKLQotTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCi0JbGliYW5kcm9pZGZ3IFwKLQlsaWJ1dGlscyBcCi0JbGliY3V0aWxzIFwKLQlsaWJleHBhdCBcCi0JbGlicG5nIFwKLQlsaWJsb2cgXAotCWxpYnppcGFyY2hpdmUtaG9zdAotCi1pZmVxICgkKEhPU1RfT1MpLGxpbnV4KQotTE9DQUxfTERMSUJTICs9IC1scnQgLWxkbCAtbHB0aHJlYWQKLWVuZGlmCi0KLSMgU3RhdGljYWxseSBsaW5rIGxpYnogZm9yIE1pbkdXIChXaW4gU0RLIHVuZGVyIExpbnV4KSwKLSMgYW5kIGR5bmFtaWNhbGx5IGxpbmsgZm9yIGFsbCBvdGhlcnMuCi1pZm5lcSAoJChzdHJpcCAkKFVTRV9NSU5HVykpLCkKLSAgTE9DQUxfU1RBVElDX0xJQlJBUklFUyArPSBsaWJ6Ci1lbHNlCi0gIExPQ0FMX0xETElCUyArPSAtbHoKLWVuZGlmCi0KLUxPQ0FMX01PRFVMRSA6PSBhYXB0Ci0KLWluY2x1ZGUgJChCVUlMRF9IT1NUX0VYRUNVVEFCTEUpCi0KLSMgYWFwdCBmb3IgcnVubmluZyBvbiB0aGUgZGV2aWNlCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotaWZuZXEgKCQoU0RLX09OTFkpLHRydWUpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoYWFwdF9zcmNfZmlsZXMpCi0KLUxPQ0FMX01PRFVMRSA6PSBhYXB0Ci0KLUxPQ0FMX0NfSU5DTFVERVMgKz0gYmlvbmljCi1MT0NBTF9DX0lOQ0xVREVTICs9IGJpb25pYy9saWJzdGRjKysvaW5jbHVkZQotTE9DQUxfQ19JTkNMVURFUyArPSBleHRlcm5hbC9zdGxwb3J0L3N0bHBvcnQKLUxPQ0FMX0NfSU5DTFVERVMgKz0gZXh0ZXJuYWwvbGlicG5nCi1MT0NBTF9DX0lOQ0xVREVTICs9IGV4dGVybmFsL3psaWIKLQotTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tbm9uLXZpcnR1YWwtZHRvcgotCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKLSAgICAgICAgbGliYW5kcm9pZGZ3IFwKLSAgICAgICAgbGlidXRpbHMgXAotICAgICAgICBsaWJjdXRpbHMgXAotICAgICAgICBsaWJwbmcgXAotICAgICAgICBsaWJsb2cgXAotICAgICAgICBsaWJ6Ci0KLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gXAotICAgICAgICBsaWJzdGxwb3J0X3N0YXRpYyBcCi0gICAgICAgIGxpYmV4cGF0X3N0YXRpYwotCi1pbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKLWVuZGlmCi0KLWVuZGlmICMgVEFSR0VUX0JVSUxEX0FQUFMKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvQnVuZGxlLmggYi90b29scy9hYXB0L0J1bmRsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDg5YjlkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvQnVuZGxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBTdGF0ZSBidW5kbGUuICBVc2VkIHRvIHBhc3MgYXJvdW5kIHN0dWZmIGxpa2UgY29tbWFuZC1saW5lIGFyZ3MuCi0vLwotI2lmbmRlZiBfX0JVTkRMRV9ICi0jZGVmaW5lIF9fQlVORExFX0gKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KLSNpbmNsdWRlIDx1dGlscy9MaXN0Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgotCi1lbnVtIHsKLSAgICBTREtfQ1VQQ0FLRSA9IDMsCi0gICAgU0RLX0RPTlVUID0gNCwKLSAgICBTREtfRUNMQUlSID0gNSwKLSAgICBTREtfRUNMQUlSXzBfMSA9IDYsCi0gICAgU0RLX01SMSA9IDcsCi0gICAgU0RLX0ZST1lPID0gOCwKLSAgICBTREtfSE9ORVlDT01CX01SMiA9IDEzLAotICAgIFNES19JQ0VfQ1JFQU1fU0FORFdJQ0ggPSAxNCwKLSAgICBTREtfSUNFX0NSRUFNX1NBTkRXSUNIX01SMSA9IDE1LAotfTsKLQotLyoKLSAqIFRoaW5ncyB3ZSBjYW4gZG8uCi0gKi8KLXR5cGVkZWYgZW51bSBDb21tYW5kIHsKLSAgICBrQ29tbWFuZFVua25vd24gPSAwLAotICAgIGtDb21tYW5kVmVyc2lvbiwKLSAgICBrQ29tbWFuZExpc3QsCi0gICAga0NvbW1hbmREdW1wLAotICAgIGtDb21tYW5kQWRkLAotICAgIGtDb21tYW5kUmVtb3ZlLAotICAgIGtDb21tYW5kUGFja2FnZSwKLSAgICBrQ29tbWFuZENydW5jaCwKLSAgICBrQ29tbWFuZFNpbmdsZUNydW5jaCwKLX0gQ29tbWFuZDsKLQotLyoKLSAqIEJ1bmRsZSBvZiBnb29kaWVzLCBpbmNsdWRpbmcgZXZlcnl0aGluZyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KLSAqLwotY2xhc3MgQnVuZGxlIHsKLXB1YmxpYzoKLSAgICBCdW5kbGUodm9pZCkKLSAgICAgICAgOiBtQ21kKGtDb21tYW5kVW5rbm93biksIG1WZXJib3NlKGZhbHNlKSwgbUFuZHJvaWRMaXN0KGZhbHNlKSwKLSAgICAgICAgICBtRm9yY2UoZmFsc2UpLCBtR3JheXNjYWxlVG9sZXJhbmNlKDApLCBtTWFrZVBhY2thZ2VEaXJzKGZhbHNlKSwKLSAgICAgICAgICBtVXBkYXRlKGZhbHNlKSwgbUV4dGVuZGluZyhmYWxzZSksCi0gICAgICAgICAgbVJlcXVpcmVMb2NhbGl6YXRpb24oZmFsc2UpLCBtUHNldWRvbG9jYWxpemUoZmFsc2UpLAotICAgICAgICAgIG1XYW50VVRGMTYoZmFsc2UpLCBtVmFsdWVzKGZhbHNlKSwKLSAgICAgICAgICBtQ29tcHJlc3Npb25NZXRob2QoMCksIG1KdW5rUGF0aChmYWxzZSksIG1PdXRwdXRBUEtGaWxlKE5VTEwpLAotICAgICAgICAgIG1NYW5pZmVzdFBhY2thZ2VOYW1lT3ZlcnJpZGUoTlVMTCksIG1JbnN0cnVtZW50YXRpb25QYWNrYWdlTmFtZU92ZXJyaWRlKE5VTEwpLAotICAgICAgICAgIG1BdXRvQWRkT3ZlcmxheShmYWxzZSksIG1HZW5EZXBlbmRlbmNpZXMoZmFsc2UpLAotICAgICAgICAgIG1Bc3NldFNvdXJjZURpcihOVUxMKSwgCi0gICAgICAgICAgbUNydW5jaGVkT3V0cHV0RGlyKE5VTEwpLCBtUHJvZ3VhcmRGaWxlKE5VTEwpLAotICAgICAgICAgIG1BbmRyb2lkTWFuaWZlc3RGaWxlKE5VTEwpLCBtUHVibGljT3V0cHV0RmlsZShOVUxMKSwKLSAgICAgICAgICBtUkNsYXNzRGlyKE5VTEwpLCBtUmVzb3VyY2VJbnRlcm1lZGlhdGVzRGlyKE5VTEwpLCBtTWFuaWZlc3RNaW5TZGtWZXJzaW9uKE5VTEwpLAotICAgICAgICAgIG1NaW5TZGtWZXJzaW9uKE5VTEwpLCBtVGFyZ2V0U2RrVmVyc2lvbihOVUxMKSwgbU1heFNka1ZlcnNpb24oTlVMTCksCi0gICAgICAgICAgbVZlcnNpb25Db2RlKE5VTEwpLCBtVmVyc2lvbk5hbWUoTlVMTCksIG1DdXN0b21QYWNrYWdlKE5VTEwpLCBtRXh0cmFQYWNrYWdlcyhOVUxMKSwKLSAgICAgICAgICBtTWF4UmVzVmVyc2lvbihOVUxMKSwgbURlYnVnTW9kZShmYWxzZSksIG1Ob25Db25zdGFudElkKGZhbHNlKSwgbVByb2R1Y3QoTlVMTCksCi0gICAgICAgICAgbVVzZUNydW5jaENhY2hlKGZhbHNlKSwgbUVycm9yT25GYWlsZWRJbnNlcnQoZmFsc2UpLCBtT3V0cHV0VGV4dFN5bWJvbHMoTlVMTCksCi0gICAgICAgICAgbVNpbmdsZUNydW5jaElucHV0RmlsZShOVUxMKSwgbVNpbmdsZUNydW5jaE91dHB1dEZpbGUoTlVMTCksCi0gICAgICAgICAgbUFyZ2MoMCksIG1Bcmd2KE5VTEwpCi0gICAgICAgIHt9Ci0gICAgfkJ1bmRsZSh2b2lkKSB7fQotCi0gICAgLyoKLSAgICAgKiBTZXQgdGhlIGNvbW1hbmQgdmFsdWUuICBSZXR1cm5zICJmYWxzZSIgaWYgaXQgd2FzIHByZXZpb3VzbHkgc2V0LgotICAgICAqLwotICAgIENvbW1hbmQgZ2V0Q29tbWFuZCh2b2lkKSBjb25zdCB7IHJldHVybiBtQ21kOyB9Ci0gICAgdm9pZCBzZXRDb21tYW5kKENvbW1hbmQgY21kKSB7IG1DbWQgPSBjbWQ7IH0KLQotICAgIC8qCi0gICAgICogQ29tbWFuZCBtb2RpZmllcnMuICBOb3QgYWxsIG1vZGlmaWVycyBhcmUgYXBwcm9wcmlhdGUgZm9yIGFsbAotICAgICAqIGNvbW1hbmRzLgotICAgICAqLwotICAgIGJvb2wgZ2V0VmVyYm9zZSh2b2lkKSBjb25zdCB7IHJldHVybiBtVmVyYm9zZTsgfQotICAgIHZvaWQgc2V0VmVyYm9zZShib29sIHZhbCkgeyBtVmVyYm9zZSA9IHZhbDsgfQotICAgIGJvb2wgZ2V0QW5kcm9pZExpc3Qodm9pZCkgY29uc3QgeyByZXR1cm4gbUFuZHJvaWRMaXN0OyB9Ci0gICAgdm9pZCBzZXRBbmRyb2lkTGlzdChib29sIHZhbCkgeyBtQW5kcm9pZExpc3QgPSB2YWw7IH0KLSAgICBib29sIGdldEZvcmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Gb3JjZTsgfQotICAgIHZvaWQgc2V0Rm9yY2UoYm9vbCB2YWwpIHsgbUZvcmNlID0gdmFsOyB9Ci0gICAgdm9pZCBzZXRHcmF5c2NhbGVUb2xlcmFuY2UoaW50IHZhbCkgeyBtR3JheXNjYWxlVG9sZXJhbmNlID0gdmFsOyB9Ci0gICAgaW50ICBnZXRHcmF5c2NhbGVUb2xlcmFuY2UoKSBjb25zdCB7IHJldHVybiBtR3JheXNjYWxlVG9sZXJhbmNlOyB9Ci0gICAgYm9vbCBnZXRNYWtlUGFja2FnZURpcnModm9pZCkgY29uc3QgeyByZXR1cm4gbU1ha2VQYWNrYWdlRGlyczsgfQotICAgIHZvaWQgc2V0TWFrZVBhY2thZ2VEaXJzKGJvb2wgdmFsKSB7IG1NYWtlUGFja2FnZURpcnMgPSB2YWw7IH0KLSAgICBib29sIGdldFVwZGF0ZSh2b2lkKSBjb25zdCB7IHJldHVybiBtVXBkYXRlOyB9Ci0gICAgdm9pZCBzZXRVcGRhdGUoYm9vbCB2YWwpIHsgbVVwZGF0ZSA9IHZhbDsgfQotICAgIGJvb2wgZ2V0RXh0ZW5kaW5nKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbmRpbmc7IH0KLSAgICB2b2lkIHNldEV4dGVuZGluZyhib29sIHZhbCkgeyBtRXh0ZW5kaW5nID0gdmFsOyB9Ci0gICAgYm9vbCBnZXRSZXF1aXJlTG9jYWxpemF0aW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1SZXF1aXJlTG9jYWxpemF0aW9uOyB9Ci0gICAgdm9pZCBzZXRSZXF1aXJlTG9jYWxpemF0aW9uKGJvb2wgdmFsKSB7IG1SZXF1aXJlTG9jYWxpemF0aW9uID0gdmFsOyB9Ci0gICAgYm9vbCBnZXRQc2V1ZG9sb2NhbGl6ZSh2b2lkKSBjb25zdCB7IHJldHVybiBtUHNldWRvbG9jYWxpemU7IH0KLSAgICB2b2lkIHNldFBzZXVkb2xvY2FsaXplKGJvb2wgdmFsKSB7IG1Qc2V1ZG9sb2NhbGl6ZSA9IHZhbDsgfQotICAgIHZvaWQgc2V0V2FudFVURjE2KGJvb2wgdmFsKSB7IG1XYW50VVRGMTYgPSB2YWw7IH0KLSAgICBib29sIGdldFZhbHVlcyh2b2lkKSBjb25zdCB7IHJldHVybiBtVmFsdWVzOyB9Ci0gICAgdm9pZCBzZXRWYWx1ZXMoYm9vbCB2YWwpIHsgbVZhbHVlcyA9IHZhbDsgfQotICAgIGludCBnZXRDb21wcmVzc2lvbk1ldGhvZCh2b2lkKSBjb25zdCB7IHJldHVybiBtQ29tcHJlc3Npb25NZXRob2Q7IH0KLSAgICB2b2lkIHNldENvbXByZXNzaW9uTWV0aG9kKGludCB2YWwpIHsgbUNvbXByZXNzaW9uTWV0aG9kID0gdmFsOyB9Ci0gICAgYm9vbCBnZXRKdW5rUGF0aCh2b2lkKSBjb25zdCB7IHJldHVybiBtSnVua1BhdGg7IH0KLSAgICB2b2lkIHNldEp1bmtQYXRoKGJvb2wgdmFsKSB7IG1KdW5rUGF0aCA9IHZhbDsgfQotICAgIGNvbnN0IGNoYXIqIGdldE91dHB1dEFQS0ZpbGUoKSBjb25zdCB7IHJldHVybiBtT3V0cHV0QVBLRmlsZTsgfQotICAgIHZvaWQgc2V0T3V0cHV0QVBLRmlsZShjb25zdCBjaGFyKiB2YWwpIHsgbU91dHB1dEFQS0ZpbGUgPSB2YWw7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRNYW5pZmVzdFBhY2thZ2VOYW1lT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtTWFuaWZlc3RQYWNrYWdlTmFtZU92ZXJyaWRlOyB9Ci0gICAgdm9pZCBzZXRNYW5pZmVzdFBhY2thZ2VOYW1lT3ZlcnJpZGUoY29uc3QgY2hhciAqIHZhbCkgeyBtTWFuaWZlc3RQYWNrYWdlTmFtZU92ZXJyaWRlID0gdmFsOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0SW5zdHJ1bWVudGF0aW9uUGFja2FnZU5hbWVPdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1JbnN0cnVtZW50YXRpb25QYWNrYWdlTmFtZU92ZXJyaWRlOyB9Ci0gICAgdm9pZCBzZXRJbnN0cnVtZW50YXRpb25QYWNrYWdlTmFtZU92ZXJyaWRlKGNvbnN0IGNoYXIgKiB2YWwpIHsgbUluc3RydW1lbnRhdGlvblBhY2thZ2VOYW1lT3ZlcnJpZGUgPSB2YWw7IH0KLSAgICBib29sIGdldEF1dG9BZGRPdmVybGF5KCkgeyByZXR1cm4gbUF1dG9BZGRPdmVybGF5OyB9Ci0gICAgdm9pZCBzZXRBdXRvQWRkT3ZlcmxheShib29sIHZhbCkgeyBtQXV0b0FkZE92ZXJsYXkgPSB2YWw7IH0KLSAgICBib29sIGdldEdlbkRlcGVuZGVuY2llcygpIHsgcmV0dXJuIG1HZW5EZXBlbmRlbmNpZXM7IH0KLSAgICB2b2lkIHNldEdlbkRlcGVuZGVuY2llcyhib29sIHZhbCkgeyBtR2VuRGVwZW5kZW5jaWVzID0gdmFsOyB9Ci0gICAgYm9vbCBnZXRFcnJvck9uRmFpbGVkSW5zZXJ0KCkgeyByZXR1cm4gbUVycm9yT25GYWlsZWRJbnNlcnQ7IH0KLSAgICB2b2lkIHNldEVycm9yT25GYWlsZWRJbnNlcnQoYm9vbCB2YWwpIHsgbUVycm9yT25GYWlsZWRJbnNlcnQgPSB2YWw7IH0KLQotICAgIGJvb2wgZ2V0VVRGMTZTdHJpbmdzT3B0aW9uKCkgewotICAgICAgICByZXR1cm4gbVdhbnRVVEYxNiB8fCAhaXNNaW5TZGtBdExlYXN0KFNES19GUk9ZTyk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJbnB1dCBvcHRpb25zLgotICAgICAqLwotICAgIGNvbnN0IGNoYXIqIGdldEFzc2V0U291cmNlRGlyKCkgY29uc3QgeyByZXR1cm4gbUFzc2V0U291cmNlRGlyOyB9Ci0gICAgdm9pZCBzZXRBc3NldFNvdXJjZURpcihjb25zdCBjaGFyKiBkaXIpIHsgbUFzc2V0U291cmNlRGlyID0gZGlyOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0Q3J1bmNoZWRPdXRwdXREaXIoKSBjb25zdCB7IHJldHVybiBtQ3J1bmNoZWRPdXRwdXREaXI7IH0KLSAgICB2b2lkIHNldENydW5jaGVkT3V0cHV0RGlyKGNvbnN0IGNoYXIqIGRpcikgeyBtQ3J1bmNoZWRPdXRwdXREaXIgPSBkaXI7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRQcm9ndWFyZEZpbGUoKSBjb25zdCB7IHJldHVybiBtUHJvZ3VhcmRGaWxlOyB9Ci0gICAgdm9pZCBzZXRQcm9ndWFyZEZpbGUoY29uc3QgY2hhciogZmlsZSkgeyBtUHJvZ3VhcmRGaWxlID0gZmlsZTsgfQotICAgIGNvbnN0IGFuZHJvaWQ6OlZlY3Rvcjxjb25zdCBjaGFyKj4mIGdldFJlc291cmNlU291cmNlRGlycygpIGNvbnN0IHsgcmV0dXJuIG1SZXNvdXJjZVNvdXJjZURpcnM7IH0KLSAgICB2b2lkIGFkZFJlc291cmNlU291cmNlRGlyKGNvbnN0IGNoYXIqIGRpcikgeyBtUmVzb3VyY2VTb3VyY2VEaXJzLmluc2VydEF0KGRpciwwKTsgfQotICAgIGNvbnN0IGNoYXIqIGdldEFuZHJvaWRNYW5pZmVzdEZpbGUoKSBjb25zdCB7IHJldHVybiBtQW5kcm9pZE1hbmlmZXN0RmlsZTsgfQotICAgIHZvaWQgc2V0QW5kcm9pZE1hbmlmZXN0RmlsZShjb25zdCBjaGFyKiBmaWxlKSB7IG1BbmRyb2lkTWFuaWZlc3RGaWxlID0gZmlsZTsgfQotICAgIGNvbnN0IGNoYXIqIGdldFB1YmxpY091dHB1dEZpbGUoKSBjb25zdCB7IHJldHVybiBtUHVibGljT3V0cHV0RmlsZTsgfQotICAgIHZvaWQgc2V0UHVibGljT3V0cHV0RmlsZShjb25zdCBjaGFyKiBmaWxlKSB7IG1QdWJsaWNPdXRwdXRGaWxlID0gZmlsZTsgfQotICAgIGNvbnN0IGNoYXIqIGdldFJDbGFzc0RpcigpIGNvbnN0IHsgcmV0dXJuIG1SQ2xhc3NEaXI7IH0KLSAgICB2b2lkIHNldFJDbGFzc0Rpcihjb25zdCBjaGFyKiBkaXIpIHsgbVJDbGFzc0RpciA9IGRpcjsgfQotICAgIGNvbnN0IGNoYXIqIGdldENvbmZpZ3VyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbUNvbmZpZ3VyYXRpb25zLnNpemUoKSA+IDAgPyBtQ29uZmlndXJhdGlvbnMuc3RyaW5nKCkgOiBOVUxMOyB9Ci0gICAgdm9pZCBhZGRDb25maWd1cmF0aW9ucyhjb25zdCBjaGFyKiB2YWwpIHsgaWYgKG1Db25maWd1cmF0aW9ucy5zaXplKCkgPiAwKSB7IG1Db25maWd1cmF0aW9ucy5hcHBlbmQoIiwiKTsgbUNvbmZpZ3VyYXRpb25zLmFwcGVuZCh2YWwpOyB9IGVsc2UgeyBtQ29uZmlndXJhdGlvbnMgPSB2YWw7IH0gfQotICAgIGNvbnN0IGNoYXIqIGdldFByZWZlcnJlZENvbmZpZ3VyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbVByZWZlcnJlZENvbmZpZ3VyYXRpb25zLnNpemUoKSA+IDAgPyBtUHJlZmVycmVkQ29uZmlndXJhdGlvbnMuc3RyaW5nKCkgOiBOVUxMOyB9Ci0gICAgdm9pZCBhZGRQcmVmZXJyZWRDb25maWd1cmF0aW9ucyhjb25zdCBjaGFyKiB2YWwpIHsgaWYgKG1QcmVmZXJyZWRDb25maWd1cmF0aW9ucy5zaXplKCkgPiAwKSB7IG1QcmVmZXJyZWRDb25maWd1cmF0aW9ucy5hcHBlbmQoIiwiKTsgbVByZWZlcnJlZENvbmZpZ3VyYXRpb25zLmFwcGVuZCh2YWwpOyB9IGVsc2UgeyBtUHJlZmVycmVkQ29uZmlndXJhdGlvbnMgPSB2YWw7IH0gfQotICAgIGNvbnN0IGNoYXIqIGdldFJlc291cmNlSW50ZXJtZWRpYXRlc0RpcigpIGNvbnN0IHsgcmV0dXJuIG1SZXNvdXJjZUludGVybWVkaWF0ZXNEaXI7IH0KLSAgICB2b2lkIHNldFJlc291cmNlSW50ZXJtZWRpYXRlc0Rpcihjb25zdCBjaGFyKiBkaXIpIHsgbVJlc291cmNlSW50ZXJtZWRpYXRlc0RpciA9IGRpcjsgfQotICAgIGNvbnN0IGFuZHJvaWQ6OlZlY3Rvcjxjb25zdCBjaGFyKj4mIGdldFBhY2thZ2VJbmNsdWRlcygpIGNvbnN0IHsgcmV0dXJuIG1QYWNrYWdlSW5jbHVkZXM7IH0KLSAgICB2b2lkIGFkZFBhY2thZ2VJbmNsdWRlKGNvbnN0IGNoYXIqIGZpbGUpIHsgbVBhY2thZ2VJbmNsdWRlcy5hZGQoZmlsZSk7IH0KLSAgICBjb25zdCBhbmRyb2lkOjpWZWN0b3I8Y29uc3QgY2hhcio+JiBnZXRKYXJGaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1KYXJGaWxlczsgfQotICAgIHZvaWQgYWRkSmFyRmlsZShjb25zdCBjaGFyKiBmaWxlKSB7IG1KYXJGaWxlcy5hZGQoZmlsZSk7IH0KLSAgICBjb25zdCBhbmRyb2lkOjpWZWN0b3I8Y29uc3QgY2hhcio+JiBnZXROb0NvbXByZXNzRXh0ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1Ob0NvbXByZXNzRXh0ZW5zaW9uczsgfQotICAgIHZvaWQgYWRkTm9Db21wcmVzc0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHQpIHsgbU5vQ29tcHJlc3NFeHRlbnNpb25zLmFkZChleHQpOyB9Ci0KLSAgICBjb25zdCBjaGFyKiAgZ2V0TWFuaWZlc3RNaW5TZGtWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbU1hbmlmZXN0TWluU2RrVmVyc2lvbjsgfQotICAgIHZvaWQgc2V0TWFuaWZlc3RNaW5TZGtWZXJzaW9uKGNvbnN0IGNoYXIqICB2YWwpIHsgbU1hbmlmZXN0TWluU2RrVmVyc2lvbiA9IHZhbDsgfQotICAgIGNvbnN0IGNoYXIqICBnZXRNaW5TZGtWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbU1pblNka1ZlcnNpb247IH0KLSAgICB2b2lkIHNldE1pblNka1ZlcnNpb24oY29uc3QgY2hhciogIHZhbCkgeyBtTWluU2RrVmVyc2lvbiA9IHZhbDsgfQotICAgIGNvbnN0IGNoYXIqICBnZXRUYXJnZXRTZGtWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbVRhcmdldFNka1ZlcnNpb247IH0KLSAgICB2b2lkIHNldFRhcmdldFNka1ZlcnNpb24oY29uc3QgY2hhciogIHZhbCkgeyBtVGFyZ2V0U2RrVmVyc2lvbiA9IHZhbDsgfQotICAgIGNvbnN0IGNoYXIqICBnZXRNYXhTZGtWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbU1heFNka1ZlcnNpb247IH0KLSAgICB2b2lkIHNldE1heFNka1ZlcnNpb24oY29uc3QgY2hhciogIHZhbCkgeyBtTWF4U2RrVmVyc2lvbiA9IHZhbDsgfQotICAgIGNvbnN0IGNoYXIqICBnZXRWZXJzaW9uQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1WZXJzaW9uQ29kZTsgfQotICAgIHZvaWQgc2V0VmVyc2lvbkNvZGUoY29uc3QgY2hhciogIHZhbCkgeyBtVmVyc2lvbkNvZGUgPSB2YWw7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRWZXJzaW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1WZXJzaW9uTmFtZTsgfQotICAgIHZvaWQgc2V0VmVyc2lvbk5hbWUoY29uc3QgY2hhciogdmFsKSB7IG1WZXJzaW9uTmFtZSA9IHZhbDsgfQotICAgIGNvbnN0IGNoYXIqIGdldEN1c3RvbVBhY2thZ2UoKSBjb25zdCB7IHJldHVybiBtQ3VzdG9tUGFja2FnZTsgfQotICAgIHZvaWQgc2V0Q3VzdG9tUGFja2FnZShjb25zdCBjaGFyKiB2YWwpIHsgbUN1c3RvbVBhY2thZ2UgPSB2YWw7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRFeHRyYVBhY2thZ2VzKCkgY29uc3QgeyByZXR1cm4gbUV4dHJhUGFja2FnZXM7IH0KLSAgICB2b2lkIHNldEV4dHJhUGFja2FnZXMoY29uc3QgY2hhciogdmFsKSB7IG1FeHRyYVBhY2thZ2VzID0gdmFsOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0TWF4UmVzVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1NYXhSZXNWZXJzaW9uOyB9Ci0gICAgdm9pZCBzZXRNYXhSZXNWZXJzaW9uKGNvbnN0IGNoYXIgKiB2YWwpIHsgbU1heFJlc1ZlcnNpb24gPSB2YWw7IH0KLSAgICBib29sIGdldERlYnVnTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1EZWJ1Z01vZGU7IH0KLSAgICB2b2lkIHNldERlYnVnTW9kZShib29sIHZhbCkgeyBtRGVidWdNb2RlID0gdmFsOyB9Ci0gICAgYm9vbCBnZXROb25Db25zdGFudElkKCkgY29uc3QgeyByZXR1cm4gbU5vbkNvbnN0YW50SWQ7IH0KLSAgICB2b2lkIHNldE5vbkNvbnN0YW50SWQoYm9vbCB2YWwpIHsgbU5vbkNvbnN0YW50SWQgPSB2YWw7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRQcm9kdWN0KCkgY29uc3QgeyByZXR1cm4gbVByb2R1Y3Q7IH0KLSAgICB2b2lkIHNldFByb2R1Y3QoY29uc3QgY2hhciAqIHZhbCkgeyBtUHJvZHVjdCA9IHZhbDsgfQotICAgIHZvaWQgc2V0VXNlQ3J1bmNoQ2FjaGUoYm9vbCB2YWwpIHsgbVVzZUNydW5jaENhY2hlID0gdmFsOyB9Ci0gICAgYm9vbCBnZXRVc2VDcnVuY2hDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VDcnVuY2hDYWNoZTsgfQotICAgIGNvbnN0IGNoYXIqIGdldE91dHB1dFRleHRTeW1ib2xzKCkgY29uc3QgeyByZXR1cm4gbU91dHB1dFRleHRTeW1ib2xzOyB9Ci0gICAgdm9pZCBzZXRPdXRwdXRUZXh0U3ltYm9scyhjb25zdCBjaGFyKiB2YWwpIHsgbU91dHB1dFRleHRTeW1ib2xzID0gdmFsOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0U2luZ2xlQ3J1bmNoSW5wdXRGaWxlKCkgY29uc3QgeyByZXR1cm4gbVNpbmdsZUNydW5jaElucHV0RmlsZTsgfQotICAgIHZvaWQgc2V0U2luZ2xlQ3J1bmNoSW5wdXRGaWxlKGNvbnN0IGNoYXIqIHZhbCkgeyBtU2luZ2xlQ3J1bmNoSW5wdXRGaWxlID0gdmFsOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0U2luZ2xlQ3J1bmNoT3V0cHV0RmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1TaW5nbGVDcnVuY2hPdXRwdXRGaWxlOyB9Ci0gICAgdm9pZCBzZXRTaW5nbGVDcnVuY2hPdXRwdXRGaWxlKGNvbnN0IGNoYXIqIHZhbCkgeyBtU2luZ2xlQ3J1bmNoT3V0cHV0RmlsZSA9IHZhbDsgfQotCi0gICAgLyoKLSAgICAgKiBTZXQgYW5kIGdldCB0aGUgZmlsZSBzcGVjaWZpY2F0aW9uLgotICAgICAqCi0gICAgICogTm90ZSB0aGlzIGRvZXMgTk9UIG1ha2UgYSBjb3B5IG9mIGFyZ3YuCi0gICAgICovCi0gICAgdm9pZCBzZXRGaWxlU3BlYyhjaGFyKiBjb25zdCBhcmd2W10sIGludCBhcmdjKSB7Ci0gICAgICAgIG1BcmdjID0gYXJnYzsKLSAgICAgICAgbUFyZ3YgPSBhcmd2OwotICAgIH0KLSAgICBpbnQgZ2V0RmlsZVNwZWNDb3VudCh2b2lkKSBjb25zdCB7IHJldHVybiBtQXJnYzsgfQotICAgIGNvbnN0IGNoYXIqIGdldEZpbGVTcGVjRW50cnkoaW50IGlkeCkgY29uc3QgeyByZXR1cm4gbUFyZ3ZbaWR4XTsgfQotICAgIHZvaWQgZWF0QXJncyhpbnQgbikgewotICAgICAgICBpZiAobiA+IG1BcmdjKSBuID0gbUFyZ2M7Ci0gICAgICAgIG1Bcmd2ICs9IG47Ci0gICAgICAgIG1BcmdjIC09IG47Ci0gICAgfQotCi0jaWYgMAotICAgIC8qCi0gICAgICogUGFja2FnZSBjb3VudC4gIE5vdGhpbmcgdG8gZG8gd2l0aCBhbnl0aGluZyBlbHNlIGhlcmU7IHRoaXMgaXMKLSAgICAgKiBqdXN0IGEgY29udmVuaWVudCBwbGFjZSB0byBzdHVmZiBpdCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBhc3MgaXQKLSAgICAgKiBhcm91bmQgZXZlcnl3aGVyZS4KLSAgICAgKi8KLSAgICBpbnQgZ2V0UGFja2FnZUNvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1QYWNrYWdlQ291bnQ7IH0KLSAgICB2b2lkIHNldFBhY2thZ2VDb3VudChpbnQgdmFsKSB7IG1QYWNrYWdlQ291bnQgPSB2YWw7IH0KLSNlbmRpZgotCi0gICAgLyogQ2VydGFpbiBmZWF0dXJlcyBtYXkgb25seSBiZSBhdmFpbGFibGUgb24gYSBzcGVjaWZpYyBTREsgbGV2ZWwgb3IKLSAgICAgKiBhYm92ZS4gU0RLIGxldmVscyB0aGF0IGhhdmUgYSBub24tbnVtZXJpYyBpZGVudGlmaWVyIGFyZSBhc3N1bWVkCi0gICAgICogdG8gYmUgbmV3ZXIgdGhhbiBhbnkgU0RLIGxldmVsIHRoYXQgaGFzIGEgbnVtYmVyIGRlc2lnbmF0ZWQuCi0gICAgICovCi0gICAgYm9vbCBpc01pblNka0F0TGVhc3QoaW50IGRlc2lyZWQpIHsKLSAgICAgICAgLyogSWYgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZmllcyBhIG1pblNka1ZlcnNpb24gaW4gdGhlIG1hbmlmZXN0Ci0gICAgICAgICAqIHRoZW4gdXNlIHRoYXQuIE90aGVyd2lzZSwgY2hlY2sgd2hhdCB0aGUgdXNlciBzcGVjaWZpZWQgb24KLSAgICAgICAgICogdGhlIGNvbW1hbmQgbGluZS4gSWYgbmVpdGhlciwgaXQncyBub3QgYXZhaWxhYmxlIHNpbmNlCi0gICAgICAgICAqIHRoZSBtaW5pbXVtIFNESyB2ZXJzaW9uIGlzIGFzc3VtZWQgdG8gYmUgMS4KLSAgICAgICAgICovCi0gICAgICAgIGNvbnN0IGNoYXIgKm1pblZlcjsKLSAgICAgICAgaWYgKG1NYW5pZmVzdE1pblNka1ZlcnNpb24gIT0gTlVMTCkgewotICAgICAgICAgICAgbWluVmVyID0gbU1hbmlmZXN0TWluU2RrVmVyc2lvbjsKLSAgICAgICAgfSBlbHNlIGlmIChtTWluU2RrVmVyc2lvbiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBtaW5WZXIgPSBtTWluU2RrVmVyc2lvbjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXIgKmVuZDsKLSAgICAgICAgaW50IG1pblNka051bSA9IChpbnQpc3RydG9sKG1pblZlciwgJmVuZCwgMCk7Ci0gICAgICAgIGlmICgqZW5kID09ICdcMCcpIHsKLSAgICAgICAgICAgIGlmIChtaW5TZGtOdW0gPCBkZXNpcmVkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICAvKiBjb21tYW5kcyAmIG1vZGlmaWVycyAqLwotICAgIENvbW1hbmQgICAgIG1DbWQ7Ci0gICAgYm9vbCAgICAgICAgbVZlcmJvc2U7Ci0gICAgYm9vbCAgICAgICAgbUFuZHJvaWRMaXN0OwotICAgIGJvb2wgICAgICAgIG1Gb3JjZTsKLSAgICBpbnQgICAgICAgICBtR3JheXNjYWxlVG9sZXJhbmNlOwotICAgIGJvb2wgICAgICAgIG1NYWtlUGFja2FnZURpcnM7Ci0gICAgYm9vbCAgICAgICAgbVVwZGF0ZTsKLSAgICBib29sICAgICAgICBtRXh0ZW5kaW5nOwotICAgIGJvb2wgICAgICAgIG1SZXF1aXJlTG9jYWxpemF0aW9uOwotICAgIGJvb2wgICAgICAgIG1Qc2V1ZG9sb2NhbGl6ZTsKLSAgICBib29sICAgICAgICBtV2FudFVURjE2OwotICAgIGJvb2wgICAgICAgIG1WYWx1ZXM7Ci0gICAgaW50ICAgICAgICAgbUNvbXByZXNzaW9uTWV0aG9kOwotICAgIGJvb2wgICAgICAgIG1KdW5rUGF0aDsKLSAgICBjb25zdCBjaGFyKiBtT3V0cHV0QVBLRmlsZTsKLSAgICBjb25zdCBjaGFyKiBtTWFuaWZlc3RQYWNrYWdlTmFtZU92ZXJyaWRlOwotICAgIGNvbnN0IGNoYXIqIG1JbnN0cnVtZW50YXRpb25QYWNrYWdlTmFtZU92ZXJyaWRlOwotICAgIGJvb2wgICAgICAgIG1BdXRvQWRkT3ZlcmxheTsKLSAgICBib29sICAgICAgICBtR2VuRGVwZW5kZW5jaWVzOwotICAgIGNvbnN0IGNoYXIqIG1Bc3NldFNvdXJjZURpcjsKLSAgICBjb25zdCBjaGFyKiBtQ3J1bmNoZWRPdXRwdXREaXI7Ci0gICAgY29uc3QgY2hhciogbVByb2d1YXJkRmlsZTsKLSAgICBjb25zdCBjaGFyKiBtQW5kcm9pZE1hbmlmZXN0RmlsZTsKLSAgICBjb25zdCBjaGFyKiBtUHVibGljT3V0cHV0RmlsZTsKLSAgICBjb25zdCBjaGFyKiBtUkNsYXNzRGlyOwotICAgIGNvbnN0IGNoYXIqIG1SZXNvdXJjZUludGVybWVkaWF0ZXNEaXI7Ci0gICAgYW5kcm9pZDo6U3RyaW5nOCBtQ29uZmlndXJhdGlvbnM7Ci0gICAgYW5kcm9pZDo6U3RyaW5nOCBtUHJlZmVycmVkQ29uZmlndXJhdGlvbnM7Ci0gICAgYW5kcm9pZDo6VmVjdG9yPGNvbnN0IGNoYXIqPiBtUGFja2FnZUluY2x1ZGVzOwotICAgIGFuZHJvaWQ6OlZlY3Rvcjxjb25zdCBjaGFyKj4gbUphckZpbGVzOwotICAgIGFuZHJvaWQ6OlZlY3Rvcjxjb25zdCBjaGFyKj4gbU5vQ29tcHJlc3NFeHRlbnNpb25zOwotICAgIGFuZHJvaWQ6OlZlY3Rvcjxjb25zdCBjaGFyKj4gbVJlc291cmNlU291cmNlRGlyczsKLQotICAgIGNvbnN0IGNoYXIqIG1NYW5pZmVzdE1pblNka1ZlcnNpb247Ci0gICAgY29uc3QgY2hhciogbU1pblNka1ZlcnNpb247Ci0gICAgY29uc3QgY2hhciogbVRhcmdldFNka1ZlcnNpb247Ci0gICAgY29uc3QgY2hhciogbU1heFNka1ZlcnNpb247Ci0gICAgY29uc3QgY2hhciogbVZlcnNpb25Db2RlOwotICAgIGNvbnN0IGNoYXIqIG1WZXJzaW9uTmFtZTsKLSAgICBjb25zdCBjaGFyKiBtQ3VzdG9tUGFja2FnZTsKLSAgICBjb25zdCBjaGFyKiBtRXh0cmFQYWNrYWdlczsKLSAgICBjb25zdCBjaGFyKiBtTWF4UmVzVmVyc2lvbjsKLSAgICBib29sICAgICAgICBtRGVidWdNb2RlOwotICAgIGJvb2wgICAgICAgIG1Ob25Db25zdGFudElkOwotICAgIGNvbnN0IGNoYXIqIG1Qcm9kdWN0OwotICAgIGJvb2wgICAgICAgIG1Vc2VDcnVuY2hDYWNoZTsKLSAgICBib29sICAgICAgICBtRXJyb3JPbkZhaWxlZEluc2VydDsKLSAgICBjb25zdCBjaGFyKiBtT3V0cHV0VGV4dFN5bWJvbHM7Ci0gICAgY29uc3QgY2hhciogbVNpbmdsZUNydW5jaElucHV0RmlsZTsKLSAgICBjb25zdCBjaGFyKiBtU2luZ2xlQ3J1bmNoT3V0cHV0RmlsZTsKLQotICAgIC8qIGZpbGUgc3BlY2lmaWNhdGlvbiAqLwotICAgIGludCAgICAgICAgIG1BcmdjOwotICAgIGNoYXIqIGNvbnN0KiBtQXJndjsKLQotI2lmIDAKLSAgICAvKiBtaXNjIHN0dWZmICovCi0gICAgaW50ICAgICAgICAgbVBhY2thZ2VDb3VudDsKLSNlbmRpZgotCi19OwotCi0jZW5kaWYgLy8gX19CVU5ETEVfSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9DYWNoZVVwZGF0ZXIuaCBiL3Rvb2xzL2FhcHQvQ2FjaGVVcGRhdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNjU1ODkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9DYWNoZVVwZGF0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEFic3RyYWN0aW9uIG9mIGNhbGxzIHRvIHN5c3RlbSB0byBtYWtlIGRpcmVjdG9yaWVzIGFuZCBkZWxldGUgZmlsZXMgYW5kCi0vLyB3cmFwcGVyIHRvIGltYWdlIHByb2Nlc3NpbmcuCi0KLSNpZm5kZWYgQ0FDSEVfVVBEQVRFUl9ICi0jZGVmaW5lIENBQ0hFX1VQREFURVJfSAotCi0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJJbWFnZXMuaCIKLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLS8qKiBDYWNoZVVwZGF0ZXIKLSAqICBUaGlzIGlzIGEgcHVyZSB2aXJ0dWFsIGNsYXNzIHRoYXQgZGVjbGFyZXMgYWJzdHJhY3Rpb25zIG9mIGZ1bmN0aW9ucyB1c2VmdWwKLSAqICBmb3IgbWFuYWdpbmcgYSBjYWNoZSBmaWxlcy4gVGhpcyBtYW5hZ2VyIGlzIHNldCB1cCB0byBiZSB1c2VkIGluIGEKLSAqICBtaXJyb3IgY2FjaGUgd2hlcmUgdGhlIHNvdXJjZSB0cmVlIGlzIGR1cGxpY2F0ZWQgYW5kIGZpbGxlZCB3aXRoIHByb2Nlc3NlZAotICogIGltYWdlcy4gVGhpcyBjbGFzcyBpcyBhYnN0cmFjdGVkIHRvIGFsbG93IGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiBkdXJpbmcKLSAqICB1bml0IHRlc3RpbmcuCi0gKiAgVXNhZ2U6Ci0gKiAgICAgIFRvIHVwZGF0ZS9hZGQgYSBmaWxlIHRvIHRoZSBjYWNoZSwgY2FsbCBwcm9jZXNzSW1hZ2UKLSAqICAgICAgVG8gcmVtb3ZlIGEgZmlsZSBmcm9tIHRoZSBjYWNoZSwgY2FsbCBkZWxldGVGaWxlCi0gKi8KLWNsYXNzIENhY2hlVXBkYXRlciB7Ci1wdWJsaWM6Ci0gICAgLy8gTWFrZSBzdXJlIGFsbCB0aGUgZGlyZWN0b3JpZXMgYWxvbmcgdGhpcyBwYXRoIGV4aXN0Ci0gICAgdmlydHVhbCB2b2lkIGVuc3VyZURpcmVjdG9yaWVzRXhpc3QoU3RyaW5nOCBwYXRoKSA9IDA7Ci0KLSAgICAvLyBEZWxldGUgYSBmaWxlCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZpbGUoU3RyaW5nOCBwYXRoKSA9IDA7Ci0KLSAgICAvLyBQcm9jZXNzIGFuIGltYWdlIGZyb20gc291cmNlIG91dCB0byBkZXN0Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NJbWFnZShTdHJpbmc4IHNvdXJjZSwgU3RyaW5nOCBkZXN0KSA9IDA7Ci1wcml2YXRlOgotfTsKLQotLyoqIFN5c3RlbUNhY2hlVXBkYXRlcgotICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYWJvdmUgdmlydHVhbCBjYWNoZSB1cGRhdGVyIHNwZWNpZmljYXRpb24uCi0gKiBUaGlzIGltcGxlbWVudGF0aW9ucyBoaXRzIHRoZSBmaWxlc3lzdGVtIHRvIG1hbmFnZSBhIGNhY2hlIGFuZCBjYWxscyBvdXQgdG8KLSAqIHRoZSBQTkcgY3J1bmNoaW5nIGluIGltYWdlcy5oIHRvIHByb2Nlc3MgaW1hZ2VzIG91dCB0byBpdHMgY2FjaGUgY29tcG9uZW50cy4KLSAqLwotY2xhc3MgU3lzdGVtQ2FjaGVVcGRhdGVyIDogcHVibGljIENhY2hlVXBkYXRlciB7Ci1wdWJsaWM6Ci0gICAgLy8gQ29uc3RydWN0b3IgdG8gc2V0IGJ1bmRsZSB0byBwYXNzIHRvIHByZVByb2Nlc3NJbWFnZQotICAgIFN5c3RlbUNhY2hlVXBkYXRlciAoQnVuZGxlKiBiKQotICAgICAgICA6IGJ1bmRsZShiKSB7IH07Ci0KLSAgICAvLyBNYWtlIHN1cmUgYWxsIHRoZSBkaXJlY3RvcmllcyBhbG9uZyB0aGlzIHBhdGggZXhpc3QKLSAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRGlyZWN0b3JpZXNFeGlzdChTdHJpbmc4IHBhdGgpCi0gICAgewotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgZnVsbHkgcXVhbGlmaWVkIHBhdGgKLSAgICAgICAgU3RyaW5nOCBleGlzdHNQYXRoOwotICAgICAgICBTdHJpbmc4IHRvQ3JlYXRlOwotICAgICAgICBTdHJpbmc4IHJlbWFpbnM7Ci0gICAgICAgIHN0cnVjdCBzdGF0IHM7Ci0KLSAgICAgICAgLy8gQ2hlY2sgb3B0b21pc3RpY2FsbHkgdG8gc2VlIGlmIGFsbCBkaXJlY3RvcmllcyBleGlzdC4KLSAgICAgICAgLy8gSWYgc29tZXRoaW5nIGluIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3QsIHRoZW4gd2FsayB0aGUgcGF0aCBiYWNrd2FyZHMKLSAgICAgICAgLy8gYW5kIGZpbmQgdGhlIHBsYWNlIHRvIHN0YXJ0IGNyZWF0aW5nIGRpcmVjdG9yaWVzIGZvcndhcmQuCi0gICAgICAgIGlmIChzdGF0KHBhdGguc3RyaW5nKCksJnMpID09IC0xKSB7Ci0gICAgICAgICAgICAvLyBXYWxrIGJhY2t3YXJkcyB0byBmaW5kIHBsYWNlIHRvIHN0YXJ0IGNyZWF0aW5nIGRpcmVjdG9yaWVzCi0gICAgICAgICAgICBleGlzdHNQYXRoID0gcGF0aDsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAvLyBBcyB3ZSByZW1vdmUgdGhlIGVuZCBvZiBleGlzdHNQYXRoIGFkZCBpdCB0bwotICAgICAgICAgICAgICAgIC8vIHRoZSBzdHJpbmcgb2YgcGF0aHMgdG8gY3JlYXRlLgotICAgICAgICAgICAgICAgIHRvQ3JlYXRlID0gZXhpc3RzUGF0aC5nZXRQYXRoTGVhZigpLmFwcGVuZFBhdGgodG9DcmVhdGUpOwotICAgICAgICAgICAgICAgIGV4aXN0c1BhdGggPSBleGlzdHNQYXRoLmdldFBhdGhEaXIoKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKHN0YXQoZXhpc3RzUGF0aC5zdHJpbmcoKSwmcykgPT0gLTEpOwotCi0gICAgICAgICAgICAvLyBXYWxrIGZvcndhcmRzIGFuZCBidWlsZCBkaXJlY3RvcmllcyBhcyB3ZSBnbwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgc2VnbWVudCBvZiB0aGUgcGF0aAotICAgICAgICAgICAgICAgIGV4aXN0c1BhdGguYXBwZW5kUGF0aCh0b0NyZWF0ZS53YWxrUGF0aCgmcmVtYWlucykpOwotICAgICAgICAgICAgICAgIHRvQ3JlYXRlID0gcmVtYWluczsKLSNpZmRlZiBIQVZFX01TX0NfUlVOVElNRQotICAgICAgICAgICAgICAgIF9ta2RpcihleGlzdHNQYXRoLnN0cmluZygpKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgbWtkaXIoZXhpc3RzUGF0aC5zdHJpbmcoKSwgU19JUlVTUnxTX0lXVVNSfFNfSVhVU1J8U19JUkdSUHxTX0lYR1JQKTsKLSNlbmRpZgotICAgICAgICAgICAgfSB3aGlsZSAocmVtYWlucy5sZW5ndGgoKSA+IDApOwotICAgICAgICB9IC8vaWYKLSAgICB9OwotCi0gICAgLy8gRGVsZXRlIGEgZmlsZQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGaWxlKFN0cmluZzggcGF0aCkKLSAgICB7Ci0gICAgICAgIGlmIChyZW1vdmUocGF0aC5zdHJpbmcoKSkgIT0gMCkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJFUlJPUiBERUxFVElORyAlc1xuIixwYXRoLnN0cmluZygpKTsKLSAgICB9OwotCi0gICAgLy8gUHJvY2VzcyBhbiBpbWFnZSBmcm9tIHNvdXJjZSBvdXQgdG8gZGVzdAotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzSW1hZ2UoU3RyaW5nOCBzb3VyY2UsIFN0cmluZzggZGVzdCkKLSAgICB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSB0cnlpbmcgdG8gd3JpdGUgdG8gYSBkaXJlY3RvcnkgdGhhdCBpcyBleHRhbnQKLSAgICAgICAgZW5zdXJlRGlyZWN0b3JpZXNFeGlzdChkZXN0LmdldFBhdGhEaXIoKSk7Ci0KLSAgICAgICAgcHJlUHJvY2Vzc0ltYWdlVG9DYWNoZShidW5kbGUsIHNvdXJjZSwgZGVzdCk7Ci0gICAgfTsKLXByaXZhdGU6Ci0gICAgQnVuZGxlKiBidW5kbGU7Ci19OwotCi0jZW5kaWYgLy8gQ0FDSEVfVVBEQVRFUl9IClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9Db21tYW5kLmNwcCBiL3Rvb2xzL2FhcHQvQ29tbWFuZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMmVmZTAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9Db21tYW5kLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyNjkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBBbmRyb2lkIEFzc2V0IFBhY2thZ2luZyBUb29sIG1haW4gZW50cnkgcG9pbnQuCi0vLwotI2luY2x1ZGUgIk1haW4uaCIKLSNpbmNsdWRlICJCdW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUZpbHRlci5oIgotI2luY2x1ZGUgIlJlc291cmNlVGFibGUuaCIKLSNpbmNsdWRlICJJbWFnZXMuaCIKLSNpbmNsdWRlICJYTUxOb2RlLmgiCi0KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTGlzdC5oPgotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotLyoKLSAqIFNob3cgdmVyc2lvbiBpbmZvLiAgQWxsIHRoZSBjb29sIGtpZHMgZG8gaXQuCi0gKi8KLWludCBkb1ZlcnNpb24oQnVuZGxlKiBidW5kbGUpCi17Ci0gICAgaWYgKGJ1bmRsZS0+Z2V0RmlsZVNwZWNDb3VudCgpICE9IDApCi0gICAgICAgIHByaW50ZigiKGlnbm9yaW5nIGV4dHJhIGFyZ3VtZW50cylcbiIpOwotICAgIHByaW50ZigiQW5kcm9pZCBBc3NldCBQYWNrYWdpbmcgVG9vbCwgdjAuMlxuIik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotCi0vKgotICogT3BlbiB0aGUgZmlsZSByZWFkIG9ubHkuICBUaGUgY2FsbCBmYWlscyBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LgotICoKLSAqIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLgotICovCi1aaXBGaWxlKiBvcGVuUmVhZE9ubHkoY29uc3QgY2hhciogZmlsZU5hbWUpCi17Ci0gICAgWmlwRmlsZSogemlwOwotICAgIHN0YXR1c190IHJlc3VsdDsKLQotICAgIHppcCA9IG5ldyBaaXBGaWxlOwotICAgIHJlc3VsdCA9IHppcC0+b3BlbihmaWxlTmFtZSwgWmlwRmlsZTo6a09wZW5SZWFkT25seSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgewotICAgICAgICBpZiAocmVzdWx0ID09IE5BTUVfTk9UX0ZPVU5EKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJyVzJyBub3QgZm91bmRcbiIsIGZpbGVOYW1lKTsKLSAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IFBFUk1JU1NJT05fREVOSUVEKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJyVzJyBhY2Nlc3MgZGVuaWVkXG4iLCBmaWxlTmFtZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGZhaWxlZCBvcGVuaW5nICclcycgYXMgWmlwIGZpbGVcbiIsCi0gICAgICAgICAgICAgICAgZmlsZU5hbWUpOwotICAgICAgICBkZWxldGUgemlwOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gemlwOwotfQotCi0vKgotICogT3BlbiB0aGUgZmlsZSByZWFkLXdyaXRlLiAgVGhlIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QKLSAqIGFscmVhZHkgZXhpc3QgYW5kICJva2F5VG9DcmVhdGUiIGlzIHNldC4KLSAqCi0gKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KLSAqLwotWmlwRmlsZSogb3BlblJlYWRXcml0ZShjb25zdCBjaGFyKiBmaWxlTmFtZSwgYm9vbCBva2F5VG9DcmVhdGUpCi17Ci0gICAgWmlwRmlsZSogemlwID0gTlVMTDsKLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0gICAgaW50IGZsYWdzOwotCi0gICAgZmxhZ3MgPSBaaXBGaWxlOjprT3BlblJlYWRXcml0ZTsKLSAgICBpZiAob2theVRvQ3JlYXRlKQotICAgICAgICBmbGFncyB8PSBaaXBGaWxlOjprT3BlbkNyZWF0ZTsKLQotICAgIHppcCA9IG5ldyBaaXBGaWxlOwotICAgIHJlc3VsdCA9IHppcC0+b3BlbihmaWxlTmFtZSwgZmxhZ3MpOwotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgZGVsZXRlIHppcDsKLSAgICAgICAgemlwID0gTlVMTDsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotYmFpbDoKLSAgICByZXR1cm4gemlwOwotfQotCi0KLS8qCi0gKiBSZXR1cm4gYSBzaG9ydCBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY29tcHJlc3Npb24gbWV0aG9kLgotICovCi1jb25zdCBjaGFyKiBjb21wcmVzc2lvbk5hbWUoaW50IG1ldGhvZCkKLXsKLSAgICBpZiAobWV0aG9kID09IFppcEVudHJ5OjprQ29tcHJlc3NTdG9yZWQpCi0gICAgICAgIHJldHVybiAiU3RvcmVkIjsKLSAgICBlbHNlIGlmIChtZXRob2QgPT0gWmlwRW50cnk6OmtDb21wcmVzc0RlZmxhdGVkKQotICAgICAgICByZXR1cm4gIkRlZmxhdGVkIjsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAiVW5rbm93biI7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIHBlcmNlbnQgcmVkdWN0aW9uIGluIHNpemUgKDAlID09IG5vIGNvbXByZXNzaW9uKS4KLSAqLwotaW50IGNhbGNQZXJjZW50KGxvbmcgdW5jb21wcmVzc2VkTGVuLCBsb25nIGNvbXByZXNzZWRMZW4pCi17Ci0gICAgaWYgKCF1bmNvbXByZXNzZWRMZW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIChpbnQpICgxMDAuMCAtIChjb21wcmVzc2VkTGVuICogMTAwLjApIC8gdW5jb21wcmVzc2VkTGVuICsgMC41KTsKLX0KLQotLyoKLSAqIEhhbmRsZSB0aGUgImxpc3QiIGNvbW1hbmQsIHdoaWNoIGNhbiBiZSBhIHNpbXBsZSBmaWxlIGR1bXAgb3IKLSAqIGEgdmVyYm9zZSBsaXN0aW5nLgotICoKLSAqIFRoZSB2ZXJib3NlIGxpc3RpbmcgY2xvc2VseSBtYXRjaGVzIHRoZSBvdXRwdXQgb2YgdGhlIEluZm8tWklQICJ1bnppcCIKLSAqIGNvbW1hbmQuCi0gKi8KLWludCBkb0xpc3QoQnVuZGxlKiBidW5kbGUpCi17Ci0gICAgaW50IHJlc3VsdCA9IDE7Ci0gICAgWmlwRmlsZSogemlwID0gTlVMTDsKLSAgICBjb25zdCBaaXBFbnRyeSogZW50cnk7Ci0gICAgbG9uZyB0b3RhbFVuY0xlbiwgdG90YWxDb21wTGVuOwotICAgIGNvbnN0IGNoYXIqIHppcEZpbGVOYW1lOwotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0RmlsZVNwZWNDb3VudCgpICE9IDEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogc3BlY2lmeSB6aXAgZmlsZSBuYW1lIChvbmx5KVxuIik7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0gICAgemlwRmlsZU5hbWUgPSBidW5kbGUtPmdldEZpbGVTcGVjRW50cnkoMCk7Ci0KLSAgICB6aXAgPSBvcGVuUmVhZE9ubHkoemlwRmlsZU5hbWUpOwotICAgIGlmICh6aXAgPT0gTlVMTCkKLSAgICAgICAgZ290byBiYWlsOwotCi0gICAgaW50IGNvdW50LCBpOwotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgIHByaW50ZigiQXJjaGl2ZTogICVzXG4iLCB6aXBGaWxlTmFtZSk7Ci0gICAgICAgIHByaW50ZigKLSAgICAgICAgICAgICIgTGVuZ3RoICAgTWV0aG9kICAgIFNpemUgIFJhdGlvICAgT2Zmc2V0ICAgICAgRGF0ZSAgVGltZSAgQ1JDLTMyICAgIE5hbWVcbiIpOwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgICAiLS0tLS0tLS0gIC0tLS0tLSAgLS0tLS0tLSAtLS0tLSAgLS0tLS0tLSAgICAgIC0tLS0gIC0tLS0gIC0tLS0tLSAgICAtLS0tXG4iKTsKLSAgICB9Ci0KLSAgICB0b3RhbFVuY0xlbiA9IHRvdGFsQ29tcExlbiA9IDA7Ci0KLSAgICBjb3VudCA9IHppcC0+Z2V0TnVtRW50cmllcygpOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIGVudHJ5ID0gemlwLT5nZXRFbnRyeUJ5SW5kZXgoaSk7Ci0gICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgY2hhciBkYXRlQnVmWzMyXTsKLSAgICAgICAgICAgIHRpbWVfdCB3aGVuOwotCi0gICAgICAgICAgICB3aGVuID0gZW50cnktPmdldE1vZFdoZW4oKTsKLSAgICAgICAgICAgIHN0cmZ0aW1lKGRhdGVCdWYsIHNpemVvZihkYXRlQnVmKSwgIiVtLSVkLSV5ICVIOiVNIiwKLSAgICAgICAgICAgICAgICBsb2NhbHRpbWUoJndoZW4pKTsKLQotICAgICAgICAgICAgcHJpbnRmKCIlOGxkICAlLTcuN3MgJTdsZCAlM2QlJSAgJTh6ZCAgJXMgICUwOGx4ICAlc1xuIiwKLSAgICAgICAgICAgICAgICAobG9uZykgZW50cnktPmdldFVuY29tcHJlc3NlZExlbigpLAotICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uTmFtZShlbnRyeS0+Z2V0Q29tcHJlc3Npb25NZXRob2QoKSksCi0gICAgICAgICAgICAgICAgKGxvbmcpIGVudHJ5LT5nZXRDb21wcmVzc2VkTGVuKCksCi0gICAgICAgICAgICAgICAgY2FsY1BlcmNlbnQoZW50cnktPmdldFVuY29tcHJlc3NlZExlbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5nZXRDb21wcmVzc2VkTGVuKCkpLAotICAgICAgICAgICAgICAgIChzaXplX3QpIGVudHJ5LT5nZXRMRkhPZmZzZXQoKSwKLSAgICAgICAgICAgICAgICBkYXRlQnVmLAotICAgICAgICAgICAgICAgIGVudHJ5LT5nZXRDUkMzMigpLAotICAgICAgICAgICAgICAgIGVudHJ5LT5nZXRGaWxlTmFtZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIGVudHJ5LT5nZXRGaWxlTmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRvdGFsVW5jTGVuICs9IGVudHJ5LT5nZXRVbmNvbXByZXNzZWRMZW4oKTsKLSAgICAgICAgdG90YWxDb21wTGVuICs9IGVudHJ5LT5nZXRDb21wcmVzc2VkTGVuKCk7Ci0gICAgfQotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgIHByaW50ZigKLSAgICAgICAgIi0tLS0tLS0tICAgICAgICAgIC0tLS0tLS0gIC0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tXG4iKTsKLSAgICAgICAgcHJpbnRmKCIlOGxkICAgICAgICAgICU3bGQgICUyZCUlICAgICAgICAgICAgICAgICAgICAgICAgICAgICVkIGZpbGVzXG4iLAotICAgICAgICAgICAgdG90YWxVbmNMZW4sCi0gICAgICAgICAgICB0b3RhbENvbXBMZW4sCi0gICAgICAgICAgICBjYWxjUGVyY2VudCh0b3RhbFVuY0xlbiwgdG90YWxDb21wTGVuKSwKLSAgICAgICAgICAgIHppcC0+Z2V0TnVtRW50cmllcygpKTsKLSAgICB9Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRBbmRyb2lkTGlzdCgpKSB7Ci0gICAgICAgIEFzc2V0TWFuYWdlciBhc3NldHM7Ci0gICAgICAgIGlmICghYXNzZXRzLmFkZEFzc2V0UGF0aChTdHJpbmc4KHppcEZpbGVOYW1lKSwgTlVMTCkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGxpc3QgLWEgZmFpbGVkIGJlY2F1c2UgYXNzZXRzIGNvdWxkIG5vdCBiZSBsb2FkZWRcbiIpOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgUmVzVGFibGUmIHJlcyA9IGFzc2V0cy5nZXRSZXNvdXJjZXMoZmFsc2UpOwotICAgICAgICBpZiAoJnJlcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBwcmludGYoIlxuTm8gcmVzb3VyY2UgdGFibGUgZm91bmQuXG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSNpZm5kZWYgSEFWRV9BTkRST0lEX09TCi0gICAgICAgICAgICBwcmludGYoIlxuUmVzb3VyY2UgdGFibGU6XG4iKTsKLSAgICAgICAgICAgIHJlcy5wcmludChmYWxzZSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIEFzc2V0KiBtYW5pZmVzdEFzc2V0ID0gYXNzZXRzLm9wZW5Ob25Bc3NldCgiQW5kcm9pZE1hbmlmZXN0LnhtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NldDo6QUNDRVNTX0JVRkZFUik7Ci0gICAgICAgIGlmIChtYW5pZmVzdEFzc2V0ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHByaW50ZigiXG5ObyBBbmRyb2lkTWFuaWZlc3QueG1sIGZvdW5kLlxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYoIlxuQW5kcm9pZCBtYW5pZmVzdDpcbiIpOwotICAgICAgICAgICAgUmVzWE1MVHJlZSB0cmVlOwotICAgICAgICAgICAgdHJlZS5zZXRUbyhtYW5pZmVzdEFzc2V0LT5nZXRCdWZmZXIodHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0QXNzZXQtPmdldExlbmd0aCgpKTsKLSAgICAgICAgICAgIHByaW50WE1MQmxvY2soJnRyZWUpOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBtYW5pZmVzdEFzc2V0OwotICAgIH0KLQotICAgIHJlc3VsdCA9IDA7Ci0KLWJhaWw6Ci0gICAgZGVsZXRlIHppcDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgc3NpemVfdCBpbmRleE9mQXR0cmlidXRlKGNvbnN0IFJlc1hNTFRyZWUmIHRyZWUsIHVpbnQzMl90IGF0dHJSZXMpCi17Ci0gICAgc2l6ZV90IE4gPSB0cmVlLmdldEF0dHJpYnV0ZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBpZiAodHJlZS5nZXRBdHRyaWJ1dGVOYW1lUmVzSUQoaSkgPT0gYXR0clJlcykgewotICAgICAgICAgICAgcmV0dXJuIChzc2l6ZV90KWk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1TdHJpbmc4IGdldEF0dHJpYnV0ZShjb25zdCBSZXNYTUxUcmVlJiB0cmVlLCBjb25zdCBjaGFyKiBucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhdHRyLCBTdHJpbmc4KiBvdXRFcnJvcikKLXsKLSAgICBzc2l6ZV90IGlkeCA9IHRyZWUuaW5kZXhPZkF0dHJpYnV0ZShucywgYXR0cik7Ci0gICAgaWYgKGlkeCA8IDApIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZzgoKTsKLSAgICB9Ci0gICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgIGlmICh0cmVlLmdldEF0dHJpYnV0ZVZhbHVlKGlkeCwgJnZhbHVlKSAhPSBOT19FUlJPUikgewotICAgICAgICBpZiAodmFsdWUuZGF0YVR5cGUgIT0gUmVzX3ZhbHVlOjpUWVBFX1NUUklORykgewotICAgICAgICAgICAgaWYgKG91dEVycm9yICE9IE5VTEwpICpvdXRFcnJvciA9ICJhdHRyaWJ1dGUgaXMgbm90IGEgc3RyaW5nIHZhbHVlIjsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc4KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc2l6ZV90IGxlbjsKLSAgICBjb25zdCB1aW50MTZfdCogc3RyID0gdHJlZS5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpZHgsICZsZW4pOwotICAgIHJldHVybiBzdHIgPyBTdHJpbmc4KHN0ciwgbGVuKSA6IFN0cmluZzgoKTsKLX0KLQotc3RhdGljIFN0cmluZzggZ2V0QXR0cmlidXRlKGNvbnN0IFJlc1hNTFRyZWUmIHRyZWUsIHVpbnQzMl90IGF0dHJSZXMsIFN0cmluZzgqIG91dEVycm9yKQotewotICAgIHNzaXplX3QgaWR4ID0gaW5kZXhPZkF0dHJpYnV0ZSh0cmVlLCBhdHRyUmVzKTsKLSAgICBpZiAoaWR4IDwgMCkgewotICAgICAgICByZXR1cm4gU3RyaW5nOCgpOwotICAgIH0KLSAgICBSZXNfdmFsdWUgdmFsdWU7Ci0gICAgaWYgKHRyZWUuZ2V0QXR0cmlidXRlVmFsdWUoaWR4LCAmdmFsdWUpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGlmICh2YWx1ZS5kYXRhVHlwZSAhPSBSZXNfdmFsdWU6OlRZUEVfU1RSSU5HKSB7Ci0gICAgICAgICAgICBpZiAob3V0RXJyb3IgIT0gTlVMTCkgKm91dEVycm9yID0gImF0dHJpYnV0ZSBpcyBub3QgYSBzdHJpbmcgdmFsdWUiOwotICAgICAgICAgICAgcmV0dXJuIFN0cmluZzgoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBzaXplX3QgbGVuOwotICAgIGNvbnN0IHVpbnQxNl90KiBzdHIgPSB0cmVlLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGlkeCwgJmxlbik7Ci0gICAgcmV0dXJuIHN0ciA/IFN0cmluZzgoc3RyLCBsZW4pIDogU3RyaW5nOCgpOwotfQotCi1zdGF0aWMgaW50MzJfdCBnZXRJbnRlZ2VyQXR0cmlidXRlKGNvbnN0IFJlc1hNTFRyZWUmIHRyZWUsIHVpbnQzMl90IGF0dHJSZXMsCi0gICAgICAgIFN0cmluZzgqIG91dEVycm9yLCBpbnQzMl90IGRlZlZhbHVlID0gLTEpCi17Ci0gICAgc3NpemVfdCBpZHggPSBpbmRleE9mQXR0cmlidXRlKHRyZWUsIGF0dHJSZXMpOwotICAgIGlmIChpZHggPCAwKSB7Ci0gICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICB9Ci0gICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgIGlmICh0cmVlLmdldEF0dHJpYnV0ZVZhbHVlKGlkeCwgJnZhbHVlKSAhPSBOT19FUlJPUikgewotICAgICAgICBpZiAodmFsdWUuZGF0YVR5cGUgPCBSZXNfdmFsdWU6OlRZUEVfRklSU1RfSU5UCi0gICAgICAgICAgICAgICAgfHwgdmFsdWUuZGF0YVR5cGUgPiBSZXNfdmFsdWU6OlRZUEVfTEFTVF9JTlQpIHsKLSAgICAgICAgICAgIGlmIChvdXRFcnJvciAhPSBOVUxMKSAqb3V0RXJyb3IgPSAiYXR0cmlidXRlIGlzIG5vdCBhbiBpbnRlZ2VyIHZhbHVlIjsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0KLQotc3RhdGljIGludDMyX3QgZ2V0UmVzb2x2ZWRJbnRlZ2VyQXR0cmlidXRlKGNvbnN0IFJlc1RhYmxlKiByZXNUYWJsZSwgY29uc3QgUmVzWE1MVHJlZSYgdHJlZSwKLSAgICAgICAgdWludDMyX3QgYXR0clJlcywgU3RyaW5nOCogb3V0RXJyb3IsIGludDMyX3QgZGVmVmFsdWUgPSAtMSkKLXsKLSAgICBzc2l6ZV90IGlkeCA9IGluZGV4T2ZBdHRyaWJ1dGUodHJlZSwgYXR0clJlcyk7Ci0gICAgaWYgKGlkeCA8IDApIHsKLSAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgIH0KLSAgICBSZXNfdmFsdWUgdmFsdWU7Ci0gICAgaWYgKHRyZWUuZ2V0QXR0cmlidXRlVmFsdWUoaWR4LCAmdmFsdWUpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfUkVGRVJFTkNFKSB7Ci0gICAgICAgICAgICByZXNUYWJsZS0+cmVzb2x2ZVJlZmVyZW5jZSgmdmFsdWUsIDApOwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZS5kYXRhVHlwZSA8IFJlc192YWx1ZTo6VFlQRV9GSVJTVF9JTlQKLSAgICAgICAgICAgICAgICB8fCB2YWx1ZS5kYXRhVHlwZSA+IFJlc192YWx1ZTo6VFlQRV9MQVNUX0lOVCkgewotICAgICAgICAgICAgaWYgKG91dEVycm9yICE9IE5VTEwpICpvdXRFcnJvciA9ICJhdHRyaWJ1dGUgaXMgbm90IGFuIGludGVnZXIgdmFsdWUiOwotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZS5kYXRhOwotfQotCi1zdGF0aWMgU3RyaW5nOCBnZXRSZXNvbHZlZEF0dHJpYnV0ZShjb25zdCBSZXNUYWJsZSogcmVzVGFibGUsIGNvbnN0IFJlc1hNTFRyZWUmIHRyZWUsCi0gICAgICAgIHVpbnQzMl90IGF0dHJSZXMsIFN0cmluZzgqIG91dEVycm9yKQotewotICAgIHNzaXplX3QgaWR4ID0gaW5kZXhPZkF0dHJpYnV0ZSh0cmVlLCBhdHRyUmVzKTsKLSAgICBpZiAoaWR4IDwgMCkgewotICAgICAgICByZXR1cm4gU3RyaW5nOCgpOwotICAgIH0KLSAgICBSZXNfdmFsdWUgdmFsdWU7Ci0gICAgaWYgKHRyZWUuZ2V0QXR0cmlidXRlVmFsdWUoaWR4LCAmdmFsdWUpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfU1RSSU5HKSB7Ci0gICAgICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIHN0ciA9IHRyZWUuZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaWR4LCAmbGVuKTsKLSAgICAgICAgICAgIHJldHVybiBzdHIgPyBTdHJpbmc4KHN0ciwgbGVuKSA6IFN0cmluZzgoKTsKLSAgICAgICAgfQotICAgICAgICByZXNUYWJsZS0+cmVzb2x2ZVJlZmVyZW5jZSgmdmFsdWUsIDApOwotICAgICAgICBpZiAodmFsdWUuZGF0YVR5cGUgIT0gUmVzX3ZhbHVlOjpUWVBFX1NUUklORykgewotICAgICAgICAgICAgaWYgKG91dEVycm9yICE9IE5VTEwpICpvdXRFcnJvciA9ICJhdHRyaWJ1dGUgaXMgbm90IGEgc3RyaW5nIHZhbHVlIjsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc4KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc2l6ZV90IGxlbjsKLSAgICBjb25zdCBSZXNfdmFsdWUqIHZhbHVlMiA9ICZ2YWx1ZTsKLSAgICBjb25zdCBjaGFyMTZfdCogc3RyID0gY29uc3RfY2FzdDxSZXNUYWJsZSo+KHJlc1RhYmxlKS0+dmFsdWVUb1N0cmluZyh2YWx1ZTIsIDAsIE5VTEwsICZsZW4pOwotICAgIHJldHVybiBzdHIgPyBTdHJpbmc4KHN0ciwgbGVuKSA6IFN0cmluZzgoKTsKLX0KLQotLy8gVGhlc2UgYXJlIGF0dHJpYnV0ZSByZXNvdXJjZSBjb25zdGFudHMgZm9yIHRoZSBwbGF0Zm9ybSwgYXMgZm91bmQKLS8vIGluIGFuZHJvaWQuUi5hdHRyCi1lbnVtIHsKLSAgICBMQUJFTF9BVFRSID0gMHgwMTAxMDAwMSwKLSAgICBJQ09OX0FUVFIgPSAweDAxMDEwMDAyLAotICAgIE5BTUVfQVRUUiA9IDB4MDEwMTAwMDMsCi0gICAgUEVSTUlTU0lPTl9BVFRSID0gMHgwMTAxMDAwNiwKLSAgICBSRVNPVVJDRV9BVFRSID0gMHgwMTAxMDAyNSwKLSAgICBERUJVR0dBQkxFX0FUVFIgPSAweDAxMDEwMDBmLAotICAgIFZFUlNJT05fQ09ERV9BVFRSID0gMHgwMTAxMDIxYiwKLSAgICBWRVJTSU9OX05BTUVfQVRUUiA9IDB4MDEwMTAyMWMsCi0gICAgU0NSRUVOX09SSUVOVEFUSU9OX0FUVFIgPSAweDAxMDEwMDFlLAotICAgIE1JTl9TREtfVkVSU0lPTl9BVFRSID0gMHgwMTAxMDIwYywKLSAgICBNQVhfU0RLX1ZFUlNJT05fQVRUUiA9IDB4MDEwMTAyNzEsCi0gICAgUkVRX1RPVUNIX1NDUkVFTl9BVFRSID0gMHgwMTAxMDIyNywKLSAgICBSRVFfS0VZQk9BUkRfVFlQRV9BVFRSID0gMHgwMTAxMDIyOCwKLSAgICBSRVFfSEFSRF9LRVlCT0FSRF9BVFRSID0gMHgwMTAxMDIyOSwKLSAgICBSRVFfTkFWSUdBVElPTl9BVFRSID0gMHgwMTAxMDIyYSwKLSAgICBSRVFfRklWRV9XQVlfTkFWX0FUVFIgPSAweDAxMDEwMjMyLAotICAgIFRBUkdFVF9TREtfVkVSU0lPTl9BVFRSID0gMHgwMTAxMDI3MCwKLSAgICBURVNUX09OTFlfQVRUUiA9IDB4MDEwMTAyNzIsCi0gICAgQU5ZX0RFTlNJVFlfQVRUUiA9IDB4MDEwMTAyNmMsCi0gICAgR0xfRVNfVkVSU0lPTl9BVFRSID0gMHgwMTAxMDI4MSwKLSAgICBTTUFMTF9TQ1JFRU5fQVRUUiA9IDB4MDEwMTAyODQsCi0gICAgTk9STUFMX1NDUkVFTl9BVFRSID0gMHgwMTAxMDI4NSwKLSAgICBMQVJHRV9TQ1JFRU5fQVRUUiA9IDB4MDEwMTAyODYsCi0gICAgWExBUkdFX1NDUkVFTl9BVFRSID0gMHgwMTAxMDJiZiwKLSAgICBSRVFVSVJFRF9BVFRSID0gMHgwMTAxMDI4ZSwKLSAgICBTQ1JFRU5fU0laRV9BVFRSID0gMHgwMTAxMDJjYSwKLSAgICBTQ1JFRU5fREVOU0lUWV9BVFRSID0gMHgwMTAxMDJjYiwKLSAgICBSRVFVSVJFU19TTUFMTEVTVF9XSURUSF9EUF9BVFRSID0gMHgwMTAxMDM2NCwKLSAgICBDT01QQVRJQkxFX1dJRFRIX0xJTUlUX0RQX0FUVFIgPSAweDAxMDEwMzY1LAotICAgIExBUkdFU1RfV0lEVEhfTElNSVRfRFBfQVRUUiA9IDB4MDEwMTAzNjYsCi0gICAgUFVCTElDX0tFWV9BVFRSID0gMHgwMTAxMDNhNiwKLSAgICBDQVRFR09SWV9BVFRSID0gMHgwMTAxMDNlOCwKLX07Ci0KLWNvbnN0IGNoYXIgKmdldENvbXBvbmVudE5hbWUoU3RyaW5nOCAmcGtnTmFtZSwgU3RyaW5nOCAmY29tcG9uZW50TmFtZSkgewotICAgIHNzaXplX3QgaWR4ID0gY29tcG9uZW50TmFtZS5maW5kKCIuIik7Ci0gICAgU3RyaW5nOCByZXRTdHIocGtnTmFtZSk7Ci0gICAgaWYgKGlkeCA9PSAwKSB7Ci0gICAgICAgIHJldFN0ciArPSBjb21wb25lbnROYW1lOwotICAgIH0gZWxzZSBpZiAoaWR4IDwgMCkgewotICAgICAgICByZXRTdHIgKz0gIi4iOwotICAgICAgICByZXRTdHIgKz0gY29tcG9uZW50TmFtZTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gY29tcG9uZW50TmFtZS5zdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldFN0ci5zdHJpbmcoKTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRDb21wYXRpYmxlU2NyZWVucyhSZXNYTUxUcmVlJiB0cmVlKSB7Ci0gICAgc2l6ZV90IGxlbjsKLSAgICBSZXNYTUxUcmVlOjpldmVudF9jb2RlX3QgY29kZTsKLSAgICBpbnQgZGVwdGggPSAwOwotICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgIHByaW50ZigiY29tcGF0aWJsZS1zY3JlZW5zOiIpOwotICAgIHdoaWxlICgoY29kZT10cmVlLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgIGRlcHRoLS07Ci0gICAgICAgICAgICBpZiAoZGVwdGggPCAwKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29kZSAhPSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGRlcHRoKys7Ci0gICAgICAgIFN0cmluZzggdGFnKHRyZWUuZ2V0RWxlbWVudE5hbWUoJmxlbikpOwotICAgICAgICBpZiAodGFnID09ICJzY3JlZW4iKSB7Ci0gICAgICAgICAgICBpbnQzMl90IHNjcmVlblNpemUgPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsCi0gICAgICAgICAgICAgICAgICAgIFNDUkVFTl9TSVpFX0FUVFIsIE5VTEwsIC0xKTsKLSAgICAgICAgICAgIGludDMyX3Qgc2NyZWVuRGVuc2l0eSA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgU0NSRUVOX0RFTlNJVFlfQVRUUiwgTlVMTCwgLTEpOwotICAgICAgICAgICAgaWYgKHNjcmVlblNpemUgPiAwICYmIHNjcmVlbkRlbnNpdHkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFmaXJzdCkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiwiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiclZC8lZCciLCBzY3JlZW5TaXplLCBzY3JlZW5EZW5zaXR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBwcmludGYoIlxuIik7Ci19Ci0KLVZlY3RvcjxTdHJpbmc4PiBnZXROZmNBaWRDYXRlZ29yaWVzKEFzc2V0TWFuYWdlciYgYXNzZXRzLCBTdHJpbmc4IHhtbFBhdGgsIGJvb2wgb2ZmSG9zdCwKLSAgICAgICAgU3RyaW5nOCAqb3V0RXJyb3IgPSBOVUxMKQotewotICAgIEFzc2V0KiBhaWRBc3NldCA9IGFzc2V0cy5vcGVuTm9uQXNzZXQoeG1sUGF0aCwgQXNzZXQ6OkFDQ0VTU19CVUZGRVIpOwotICAgIGlmIChhaWRBc3NldCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChvdXRFcnJvciAhPSBOVUxMKSAqb3V0RXJyb3IgPSAieG1sIHJlc291cmNlIGRvZXMgbm90IGV4aXN0IjsKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc4PigpOwotICAgIH0KLQotICAgIGNvbnN0IFN0cmluZzggc2VydmljZVRhZ05hbWUob2ZmSG9zdCA/ICJvZmZob3N0LWFwZHUtc2VydmljZSIgOiAiaG9zdC1hcGR1LXNlcnZpY2UiKTsKLQotICAgIGJvb2wgd2l0aGluQXBkdVNlcnZpY2UgPSBmYWxzZTsKLSAgICBWZWN0b3I8U3RyaW5nOD4gY2F0ZWdvcmllczsKLQotICAgIFN0cmluZzggZXJyb3I7Ci0gICAgUmVzWE1MVHJlZSB0cmVlOwotICAgIHRyZWUuc2V0VG8oYWlkQXNzZXQtPmdldEJ1ZmZlcih0cnVlKSwgYWlkQXNzZXQtPmdldExlbmd0aCgpKTsKLQotICAgIHNpemVfdCBsZW47Ci0gICAgaW50IGRlcHRoID0gMDsKLSAgICBSZXNYTUxUcmVlOjpldmVudF9jb2RlX3QgY29kZTsKLSAgICB3aGlsZSAoKGNvZGU9dHJlZS5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICBkZXB0aC0tOwotICAgICAgICAgICAgU3RyaW5nOCB0YWcodHJlZS5nZXRFbGVtZW50TmFtZSgmbGVuKSk7Ci0KLSAgICAgICAgICAgIGlmIChkZXB0aCA9PSAwICYmIHRhZyA9PSBzZXJ2aWNlVGFnTmFtZSkgewotICAgICAgICAgICAgICAgIHdpdGhpbkFwZHVTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OlNUQVJUX1RBRykgewotICAgICAgICAgICAgZGVwdGgrKzsKLSAgICAgICAgICAgIFN0cmluZzggdGFnKHRyZWUuZ2V0RWxlbWVudE5hbWUoJmxlbikpOwotCi0gICAgICAgICAgICBpZiAoZGVwdGggPT0gMSkgewotICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gc2VydmljZVRhZ05hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgd2l0aGluQXBkdVNlcnZpY2UgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMiAmJiB3aXRoaW5BcGR1U2VydmljZSkgewotICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gImFpZC1ncm91cCIpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBjYXRlZ29yeSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBDQVRFR09SWV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdXRFcnJvciAhPSBOVUxMKSAqb3V0RXJyb3IgPSBlcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nOD4oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYWlkQXNzZXQtPmNsb3NlKCk7Ci0gICAgcmV0dXJuIGNhdGVnb3JpZXM7Ci19Ci0KLS8qCi0gKiBIYW5kbGUgdGhlICJkdW1wIiBjb21tYW5kLCB0byBleHRyYWN0IHNlbGVjdCBkYXRhIGZyb20gYW4gYXJjaGl2ZS4KLSAqLwotZXh0ZXJuIGNoYXIgQ09OU09MRV9EQVRBWzI5MjVdOyAvLyBzZWUgRU9GCi1pbnQgZG9EdW1wKEJ1bmRsZSogYnVuZGxlKQotewotICAgIHN0YXR1c190IHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgQXNzZXQqIGFzc2V0ID0gTlVMTDsKLQotICAgIGlmIChidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKSA8IDEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogbm8gZHVtcCBvcHRpb24gc3BlY2lmaWVkXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0RmlsZVNwZWNDb3VudCgpIDwgMikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBubyBkdW1wIGZpbGUgc3BlY2lmaWVkXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogb3B0aW9uID0gYnVuZGxlLT5nZXRGaWxlU3BlY0VudHJ5KDApOwotICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gYnVuZGxlLT5nZXRGaWxlU3BlY0VudHJ5KDEpOwotCi0gICAgQXNzZXRNYW5hZ2VyIGFzc2V0czsKLSAgICB2b2lkKiBhc3NldHNDb29raWU7Ci0gICAgaWYgKCFhc3NldHMuYWRkQXNzZXRQYXRoKFN0cmluZzgoZmlsZW5hbWUpLCAmYXNzZXRzQ29va2llKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBkdW1wIGZhaWxlZCBiZWNhdXNlIGFzc2V0cyBjb3VsZCBub3QgYmUgbG9hZGVkXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBhIGR1bW15IGNvbmZpZyBmb3IgcmV0cmlldmluZyByZXNvdXJjZXMuLi4gIHdlIG5lZWQgdG8gc3VwcGx5Ci0gICAgLy8gbm9uLWRlZmF1bHQgdmFsdWVzIGZvciBzb21lIGNvbmZpZ3Mgc28gdGhhdCB3ZSBjYW4gcmV0cmlldmUgcmVzb3VyY2VzCi0gICAgLy8gaW4gdGhlIGFwcCB0aGF0IGRvbid0IGhhdmUgYSBkZWZhdWx0LiAgVGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZXNlIGlzCi0gICAgLy8gdGhlIEFQSSB2ZXJzaW9uIGJlY2F1c2Uga2V5IHJlc291cmNlcyBsaWtlIGljb25zIHdpbGwgaGF2ZSBhbiBpbXBsaWNpdAotICAgIC8vIHZlcnNpb24gaWYgdGhleSBhcmUgdXNpbmcgbmV3ZXIgY29uZmlnIHR5cGVzIGxpa2UgZGVuc2l0eS4KLSAgICBSZXNUYWJsZV9jb25maWcgY29uZmlnOwotICAgIGNvbmZpZy5sYW5ndWFnZVswXSA9ICdlJzsKLSAgICBjb25maWcubGFuZ3VhZ2VbMV0gPSAnbic7Ci0gICAgY29uZmlnLmNvdW50cnlbMF0gPSAnVSc7Ci0gICAgY29uZmlnLmNvdW50cnlbMV0gPSAnUyc7Ci0gICAgY29uZmlnLm9yaWVudGF0aW9uID0gUmVzVGFibGVfY29uZmlnOjpPUklFTlRBVElPTl9QT1JUOwotICAgIGNvbmZpZy5kZW5zaXR5ID0gUmVzVGFibGVfY29uZmlnOjpERU5TSVRZX01FRElVTTsKLSAgICBjb25maWcuc2RrVmVyc2lvbiA9IDEwMDAwOyAvLyBWZXJ5IGhpZ2guCi0gICAgY29uZmlnLnNjcmVlbldpZHRoRHAgPSAzMjA7Ci0gICAgY29uZmlnLnNjcmVlbkhlaWdodERwID0gNDgwOwotICAgIGNvbmZpZy5zbWFsbGVzdFNjcmVlbldpZHRoRHAgPSAzMjA7Ci0gICAgYXNzZXRzLnNldENvbmZpZ3VyYXRpb24oY29uZmlnKTsKLQotICAgIGNvbnN0IFJlc1RhYmxlJiByZXMgPSBhc3NldHMuZ2V0UmVzb3VyY2VzKGZhbHNlKTsKLSAgICBpZiAoJnJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGR1bXAgZmFpbGVkIGJlY2F1c2Ugbm8gcmVzb3VyY2UgdGFibGUgd2FzIGZvdW5kXG4iKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAoInJlc291cmNlcyIsIG9wdGlvbikgPT0gMCkgewotI2lmbmRlZiBIQVZFX0FORFJPSURfT1MKLSAgICAgICAgcmVzLnByaW50KGJ1bmRsZS0+Z2V0VmFsdWVzKCkpOwotI2VuZGlmCi0KLSAgICB9IGVsc2UgaWYgKHN0cmNtcCgic3RyaW5ncyIsIG9wdGlvbikgPT0gMCkgewotICAgICAgICBjb25zdCBSZXNTdHJpbmdQb29sKiBwb29sID0gcmVzLmdldFRhYmxlU3RyaW5nQmxvY2soMCk7Ci0gICAgICAgIHByaW50U3RyaW5nUG9vbChwb29sKTsKLQotICAgIH0gZWxzZSBpZiAoc3RyY21wKCJ4bWx0cmVlIiwgb3B0aW9uKSA9PSAwKSB7Ci0gICAgICAgIGlmIChidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKSA8IDMpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG5vIGR1bXAgeG1sdHJlZSByZXNvdXJjZSBmaWxlIHNwZWNpZmllZFxuIik7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpPTI7IGk8YnVuZGxlLT5nZXRGaWxlU3BlY0NvdW50KCk7IGkrKykgewotICAgICAgICAgICAgY29uc3QgY2hhciogcmVzbmFtZSA9IGJ1bmRsZS0+Z2V0RmlsZVNwZWNFbnRyeShpKTsKLSAgICAgICAgICAgIFJlc1hNTFRyZWUgdHJlZTsKLSAgICAgICAgICAgIGFzc2V0ID0gYXNzZXRzLm9wZW5Ob25Bc3NldChyZXNuYW1lLCBBc3NldDo6QUNDRVNTX0JVRkZFUik7Ci0gICAgICAgICAgICBpZiAoYXNzZXQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGR1bXAgZmFpbGVkIGJlY2F1c2UgcmVzb3VyY2UgJXMgZm91bmRcbiIsIHJlc25hbWUpOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRyZWUuc2V0VG8oYXNzZXQtPmdldEJ1ZmZlcih0cnVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0LT5nZXRMZW5ndGgoKSkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBSZXNvdXJjZSAlcyBpcyBjb3JydXB0XG4iLCByZXNuYW1lKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cmVlLnJlc3RhcnQoKTsKLSAgICAgICAgICAgIHByaW50WE1MQmxvY2soJnRyZWUpOwotICAgICAgICAgICAgdHJlZS51bmluaXQoKTsKLSAgICAgICAgICAgIGRlbGV0ZSBhc3NldDsKLSAgICAgICAgICAgIGFzc2V0ID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIGlmIChzdHJjbXAoInhtbHN0cmluZ3MiLCBvcHRpb24pID09IDApIHsKLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0RmlsZVNwZWNDb3VudCgpIDwgMykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogbm8gZHVtcCB4bWx0cmVlIHJlc291cmNlIGZpbGUgc3BlY2lmaWVkXG4iKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGk9MjsgaTxidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiByZXNuYW1lID0gYnVuZGxlLT5nZXRGaWxlU3BlY0VudHJ5KGkpOwotICAgICAgICAgICAgUmVzWE1MVHJlZSB0cmVlOwotICAgICAgICAgICAgYXNzZXQgPSBhc3NldHMub3Blbk5vbkFzc2V0KHJlc25hbWUsIEFzc2V0OjpBQ0NFU1NfQlVGRkVSKTsKLSAgICAgICAgICAgIGlmIChhc3NldCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogZHVtcCBmYWlsZWQgYmVjYXVzZSByZXNvdXJjZSAlcyBmb3VuZFxuIiwgcmVzbmFtZSk7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodHJlZS5zZXRUbyhhc3NldC0+Z2V0QnVmZmVyKHRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXQtPmdldExlbmd0aCgpKSAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IFJlc291cmNlICVzIGlzIGNvcnJ1cHRcbiIsIHJlc25hbWUpOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50U3RyaW5nUG9vbCgmdHJlZS5nZXRTdHJpbmdzKCkpOwotICAgICAgICAgICAgZGVsZXRlIGFzc2V0OwotICAgICAgICAgICAgYXNzZXQgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBSZXNYTUxUcmVlIHRyZWU7Ci0gICAgICAgIGFzc2V0ID0gYXNzZXRzLm9wZW5Ob25Bc3NldCgiQW5kcm9pZE1hbmlmZXN0LnhtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2V0OjpBQ0NFU1NfQlVGRkVSKTsKLSAgICAgICAgaWYgKGFzc2V0ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGR1bXAgZmFpbGVkIGJlY2F1c2Ugbm8gQW5kcm9pZE1hbmlmZXN0LnhtbCBmb3VuZFxuIik7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHJlZS5zZXRUbyhhc3NldC0+Z2V0QnVmZmVyKHRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICBhc3NldC0+Z2V0TGVuZ3RoKCkpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBBbmRyb2lkTWFuaWZlc3QueG1sIGlzIGNvcnJ1cHRcbiIpOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIHRyZWUucmVzdGFydCgpOwotCi0gICAgICAgIGlmIChzdHJjbXAoInBlcm1pc3Npb25zIiwgb3B0aW9uKSA9PSAwKSB7Ci0gICAgICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICAgICAgUmVzWE1MVHJlZTo6ZXZlbnRfY29kZV90IGNvZGU7Ci0gICAgICAgICAgICBpbnQgZGVwdGggPSAwOwotICAgICAgICAgICAgd2hpbGUgKChjb2RlPXRyZWUubmV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlcHRoLS07Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29kZSAhPSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlcHRoKys7Ci0gICAgICAgICAgICAgICAgU3RyaW5nOCB0YWcodHJlZS5nZXRFbGVtZW50TmFtZSgmbGVuKSk7Ci0gICAgICAgICAgICAgICAgLy9wcmludGYoIkRlcHRoICVkIHRhZyAlc1xuIiwgZGVwdGgsIHRhZy5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlcHRoID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyAhPSAibWFuaWZlc3QiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBtYW5pZmVzdCBkb2VzIG5vdCBzdGFydCB3aXRoIDxtYW5pZmVzdD4gdGFnXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IHBrZyA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOVUxMLCAicGFja2FnZSIsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoInBhY2thZ2U6ICVzXG4iLCBwa2cuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMiAmJiB0YWcgPT0gInBlcm1pc3Npb24iKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZzggZXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJXNcbiIsIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwcmludGYoInBlcm1pc3Npb246ICVzXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlcHRoID09IDIgJiYgdGFnID09ICJ1c2VzLXBlcm1pc3Npb24iKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZzggZXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJXNcbiIsIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtcGVybWlzc2lvbjogJXNcbiIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBpbnQgcmVxID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLCBSRVFVSVJFRF9BVFRSLCBOVUxMLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigib3B0aW9uYWwtcGVybWlzc2lvbjogJXNcbiIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCgiYmFkZ2luZyIsIG9wdGlvbikgPT0gMCkgewotICAgICAgICAgICAgVmVjdG9yPFN0cmluZzg+IGxvY2FsZXM7Ci0gICAgICAgICAgICByZXMuZ2V0TG9jYWxlcygmbG9jYWxlcyk7Ci0KLSAgICAgICAgICAgIFZlY3RvcjxSZXNUYWJsZV9jb25maWc+IGNvbmZpZ3M7Ci0gICAgICAgICAgICByZXMuZ2V0Q29uZmlndXJhdGlvbnMoJmNvbmZpZ3MpOwotICAgICAgICAgICAgU29ydGVkVmVjdG9yPGludD4gZGVuc2l0aWVzOwotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE5DID0gY29uZmlncy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TkM7IGkrKykgewotICAgICAgICAgICAgICAgIGludCBkZW5zID0gY29uZmlnc1tpXS5kZW5zaXR5OwotICAgICAgICAgICAgICAgIGlmIChkZW5zID09IDApIGRlbnMgPSAxNjA7Ci0gICAgICAgICAgICAgICAgZGVuc2l0aWVzLmFkZChkZW5zKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgICAgIFJlc1hNTFRyZWU6OmV2ZW50X2NvZGVfdCBjb2RlOwotICAgICAgICAgICAgaW50IGRlcHRoID0gMDsKLSAgICAgICAgICAgIFN0cmluZzggZXJyb3I7Ci0gICAgICAgICAgICBib29sIHdpdGhpbkFjdGl2aXR5ID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGlzTWFpbkFjdGl2aXR5ID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGlzTGF1bmNoZXJBY3Rpdml0eSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBpc1NlYXJjaGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgd2l0aGluQXBwbGljYXRpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgd2l0aGluU3VwcG9ydHNJbnB1dCA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCB3aXRoaW5SZWNlaXZlciA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCB3aXRoaW5TZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHdpdGhpbkludGVudEZpbHRlciA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNNYWluQWN0aXZpdHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzT3RoZXJBY3Rpdml0aWVzID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc090aGVyUmVjZWl2ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc090aGVyU2VydmljZXMgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzV2FsbHBhcGVyU2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNJbWVTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc0FjY2Vzc2liaWxpdHlTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc1ByaW50U2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNXaWRnZXRSZWNlaXZlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzRGV2aWNlQWRtaW5SZWNlaXZlciA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNJbnRlbnRGaWx0ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzUGF5bWVudFNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgYWN0TWFpbkFjdGl2aXR5ID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGFjdFdpZGdldFJlY2VpdmVycyA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBhY3REZXZpY2VBZG1pbkVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgYWN0SW1lU2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBhY3RXYWxscGFwZXJTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGFjdEFjY2Vzc2liaWxpdHlTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGFjdFByaW50U2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBhY3RIb3N0QXBkdVNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgYWN0T2ZmSG9zdEFwZHVTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc01ldGFIb3N0UGF5bWVudENhdGVnb3J5ID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc01ldGFPZmZIb3N0UGF5bWVudENhdGVnb3J5ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIFRoZXNlIHBlcm1pc3Npb25zIGFyZSByZXF1aXJlZCBieSBzZXJ2aWNlcyBpbXBsZW1lbnRpbmcgc2VydmljZXMKLSAgICAgICAgICAgIC8vIHRoZSBzeXN0ZW0gYmluZHMgdG8gKElNRSwgQWNjZXNzaWJpbGl0eSwgUHJpbnRTZXJ2aWNlcywgZXRjLikKLSAgICAgICAgICAgIGJvb2wgaGFzQmluZERldmljZUFkbWluUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNCaW5kSW5wdXRNZXRob2RQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc0JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZVBlcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzQmluZFByaW50U2VydmljZVBlcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzQmluZE5mY1NlcnZpY2VQZXJtaXNzaW9uID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIFRoZXNlIHR3byBpbXBsZW1lbnQgdGhlIGltcGxpY2l0IHBlcm1pc3Npb25zIHRoYXQgYXJlIGdyYW50ZWQKLSAgICAgICAgICAgIC8vIHRvIHByZS0xLjYgYXBwbGljYXRpb25zLgotICAgICAgICAgICAgYm9vbCBoYXNXcml0ZUV4dGVybmFsU3RvcmFnZVBlcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzUmVhZFBob25lU3RhdGVQZXJtaXNzaW9uID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIElmIGFuIGFwcCByZXF1ZXN0cyB3cml0ZSBzdG9yYWdlLCB0aGV5IHdpbGwgYWxzbyBnZXQgcmVhZCBzdG9yYWdlLgotICAgICAgICAgICAgYm9vbCBoYXNSZWFkRXh0ZXJuYWxTdG9yYWdlUGVybWlzc2lvbiA9IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBJbXBsZW1lbnQgdHJhbnNpdGlvbiB0byByZWFkIGFuZCB3cml0ZSBjYWxsIGxvZy4KLSAgICAgICAgICAgIGJvb2wgaGFzUmVhZENvbnRhY3RzUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNXcml0ZUNvbnRhY3RzUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNSZWFkQ2FsbExvZ1Blcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzV3JpdGVDYWxsTG9nUGVybWlzc2lvbiA9IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBUaGlzIG5leHQgZ3JvdXAgb2YgdmFyaWFibGVzIGlzIHVzZWQgdG8gaW1wbGVtZW50IGEgZ3JvdXAgb2YKLSAgICAgICAgICAgIC8vIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkgaGV1cmlzdGljcyBuZWNlc3NpdGF0ZWQgYnkgdGhlIGFkZGl0aW9uIG9mCi0gICAgICAgICAgICAvLyBzb21lIG5ldyB1c2VzLWZlYXR1cmUgY29uc3RhbnRzIGluIDIuMSBhbmQgMi4yLiBJbiBtb3N0IGNhc2VzLCB0aGUKLSAgICAgICAgICAgIC8vIGhldXJpc3RpYyBpcyAiaWYgYW4gYXBwIHJlcXVlc3RzIGEgcGVybWlzc2lvbiBidXQgZG9lc24ndCBleHBsaWNpdGx5Ci0gICAgICAgICAgICAvLyByZXF1ZXN0IHRoZSBjb3JyZXNwb25kaW5nIDx1c2VzLWZlYXR1cmU+LCBwcmVzdW1lIGl0J3MgdGhlcmUgYW55d2F5Ii4KLSAgICAgICAgICAgIGJvb2wgc3BlY0NhbWVyYUZlYXR1cmUgPSBmYWxzZTsgLy8gY2FtZXJhLXJlbGF0ZWQKLSAgICAgICAgICAgIGJvb2wgc3BlY0NhbWVyYUF1dG9mb2N1c0ZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgcmVxQ2FtZXJhQXV0b2ZvY3VzRmVhdHVyZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCByZXFDYW1lcmFGbGFzaEZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzQ2FtZXJhUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBzcGVjTG9jYXRpb25GZWF0dXJlID0gZmFsc2U7IC8vIGxvY2F0aW9uLXJlbGF0ZWQKLSAgICAgICAgICAgIGJvb2wgc3BlY05ldHdvcmtMb2NGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHJlcU5ldHdvcmtMb2NGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHNwZWNHcHNGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHJlcUdwc0ZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzTW9ja0xvY1Blcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzQ29hcnNlTG9jUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNHcHNQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc0dlbmVyYWxMb2NQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHNwZWNCbHVldG9vdGhGZWF0dXJlID0gZmFsc2U7IC8vIEJsdWV0b290aCBBUEktcmVsYXRlZAotICAgICAgICAgICAgYm9vbCBoYXNCbHVldG9vdGhQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHNwZWNNaWNyb3Bob25lRmVhdHVyZSA9IGZhbHNlOyAvLyBtaWNyb3Bob25lLXJlbGF0ZWQKLSAgICAgICAgICAgIGJvb2wgaGFzUmVjb3JkQXVkaW9QZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHNwZWNXaUZpRmVhdHVyZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNXaUZpUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBzcGVjVGVsZXBob255RmVhdHVyZSA9IGZhbHNlOyAvLyB0ZWxlcGhvbnktcmVsYXRlZAotICAgICAgICAgICAgYm9vbCByZXFUZWxlcGhvbnlTdWJGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc1RlbGVwaG9ueVBlcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgc3BlY1RvdWNoc2NyZWVuRmVhdHVyZSA9IGZhbHNlOyAvLyB0b3VjaHNjcmVlbi1yZWxhdGVkCi0gICAgICAgICAgICBib29sIHNwZWNNdWx0aXRvdWNoRmVhdHVyZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCByZXFEaXN0aW5jdE11bHRpdG91Y2hGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHNwZWNTY3JlZW5Qb3J0cmFpdEZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgc3BlY1NjcmVlbkxhbmRzY2FwZUZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgcmVxU2NyZWVuUG9ydHJhaXRGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHJlcVNjcmVlbkxhbmRzY2FwZUZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIC8vIDIuMiBhbHNvIGFkZGVkIHNvbWUgb3RoZXIgZmVhdHVyZXMgdGhhdCBhcHBzIGNhbiByZXF1ZXN0LCBidXQgdGhhdAotICAgICAgICAgICAgLy8gaGF2ZSBubyBjb3JyZXNwb25kaW5nIHBlcm1pc3Npb24sIHNvIHdlIGNhbm5vdCBpbXBsZW1lbnQgYW55Ci0gICAgICAgICAgICAvLyBiYWNrLWNvbXBhdGliaWxpdHkgaGV1cmlzdGljIGZvciB0aGVtLiBUaGUgYmVsb3cgYXJlIHRodXMgdW5uZWNlc3NhcnkKLSAgICAgICAgICAgIC8vIChidXQgYXJlIHJldGFpbmVkIGhlcmUgZm9yIGRvY3VtZW50YXJ5IHB1cnBvc2VzLikKLSAgICAgICAgICAgIC8vYm9vbCBzcGVjQ29tcGFzc0ZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIC8vYm9vbCBzcGVjQWNjZWxlcm9tZXRlckZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIC8vYm9vbCBzcGVjUHJveGltaXR5RmVhdHVyZSA9IGZhbHNlOwotICAgICAgICAgICAgLy9ib29sIHNwZWNBbWJpZW50TGlnaHRGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICAvL2Jvb2wgc3BlY0xpdmVXYWxscGFwZXJGZWF0dXJlID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGludCB0YXJnZXRTZGsgPSAwOwotICAgICAgICAgICAgaW50IHNtYWxsU2NyZWVuID0gMTsKLSAgICAgICAgICAgIGludCBub3JtYWxTY3JlZW4gPSAxOwotICAgICAgICAgICAgaW50IGxhcmdlU2NyZWVuID0gMTsKLSAgICAgICAgICAgIGludCB4bGFyZ2VTY3JlZW4gPSAxOwotICAgICAgICAgICAgaW50IGFueURlbnNpdHkgPSAxOwotICAgICAgICAgICAgaW50IHJlcXVpcmVzU21hbGxlc3RXaWR0aERwID0gMDsKLSAgICAgICAgICAgIGludCBjb21wYXRpYmxlV2lkdGhMaW1pdERwID0gMDsKLSAgICAgICAgICAgIGludCBsYXJnZXN0V2lkdGhMaW1pdERwID0gMDsKLSAgICAgICAgICAgIFN0cmluZzggcGtnOwotICAgICAgICAgICAgU3RyaW5nOCBhY3Rpdml0eU5hbWU7Ci0gICAgICAgICAgICBTdHJpbmc4IGFjdGl2aXR5TGFiZWw7Ci0gICAgICAgICAgICBTdHJpbmc4IGFjdGl2aXR5SWNvbjsKLSAgICAgICAgICAgIFN0cmluZzggcmVjZWl2ZXJOYW1lOwotICAgICAgICAgICAgU3RyaW5nOCBzZXJ2aWNlTmFtZTsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc4PiBzdXBwb3J0ZWRJbnB1dDsKLSAgICAgICAgICAgIHdoaWxlICgoY29kZT10cmVlLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgICAgICAgICBkZXB0aC0tOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGggPCAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2l0aGluU3VwcG9ydHNJbnB1dCAmJiAhc3VwcG9ydGVkSW5wdXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJzdXBwb3J0cy1pbnB1dDogJyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOID0gc3VwcG9ydGVkSW5wdXQuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyIsIHN1cHBvcnRlZElucHV0W2ldLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gTiAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJyAnIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIidcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZElucHV0LmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5BcHBsaWNhdGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluU3VwcG9ydHNJbnB1dCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlcHRoIDwgMykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpdGhpbkFjdGl2aXR5ICYmIGlzTWFpbkFjdGl2aXR5ICYmIGlzTGF1bmNoZXJBY3Rpdml0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFOYW1lID0gZ2V0Q29tcG9uZW50TmFtZShwa2csIGFjdGl2aXR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJsYXVuY2hhYmxlLWFjdGl2aXR5OiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhTmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIG5hbWU9JyVzJyAiLCBhTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIGxhYmVsPSclcycgaWNvbj0nJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlMYWJlbC5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5SWNvbi5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0ludGVudEZpbHRlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc090aGVyQWN0aXZpdGllcyB8PSB3aXRoaW5BY3Rpdml0eTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNPdGhlclJlY2VpdmVycyB8PSB3aXRoaW5SZWNlaXZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNPdGhlclNlcnZpY2VzIHw9IHdpdGhpblNlcnZpY2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXRoaW5TZXJ2aWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BheW1lbnRTZXJ2aWNlIHw9IChhY3RIb3N0QXBkdVNlcnZpY2UgJiYgaGFzTWV0YUhvc3RQYXltZW50Q2F0ZWdvcnkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNCaW5kTmZjU2VydmljZVBlcm1pc3Npb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQYXltZW50U2VydmljZSB8PSAoYWN0T2ZmSG9zdEFwZHVTZXJ2aWNlICYmIGhhc01ldGFPZmZIb3N0UGF5bWVudENhdGVnb3J5ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZE5mY1NlcnZpY2VQZXJtaXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5BY3Rpdml0eSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluU2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluUmVjZWl2ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ludGVudEZpbHRlciA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgaXNNYWluQWN0aXZpdHkgPSBpc0xhdW5jaGVyQWN0aXZpdHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXB0aCA8IDQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXRoaW5JbnRlbnRGaWx0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2l0aGluQWN0aXZpdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTWFpbkFjdGl2aXR5IHw9IGFjdE1haW5BY3Rpdml0eTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3RoZXJBY3Rpdml0aWVzIHw9ICFhY3RNYWluQWN0aXZpdHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRoaW5SZWNlaXZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNXaWRnZXRSZWNlaXZlcnMgfD0gYWN0V2lkZ2V0UmVjZWl2ZXJzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNEZXZpY2VBZG1pblJlY2VpdmVyIHw9IChhY3REZXZpY2VBZG1pbkVuYWJsZWQgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNCaW5kRGV2aWNlQWRtaW5QZXJtaXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3RoZXJSZWNlaXZlcnMgfD0gKCFhY3RXaWRnZXRSZWNlaXZlcnMgJiYgIWFjdERldmljZUFkbWluRW5hYmxlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRoaW5TZXJ2aWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ltZVNlcnZpY2UgfD0gYWN0SW1lU2VydmljZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzV2FsbHBhcGVyU2VydmljZSB8PSBhY3RXYWxscGFwZXJTZXJ2aWNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNBY2Nlc3NpYmlsaXR5U2VydmljZSB8PSAoYWN0QWNjZXNzaWJpbGl0eVNlcnZpY2UgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNCaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2VQZXJtaXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUHJpbnRTZXJ2aWNlIHw9IChhY3RQcmludFNlcnZpY2UgJiYgaGFzQmluZFByaW50U2VydmljZVBlcm1pc3Npb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNPdGhlclNlcnZpY2VzIHw9ICghYWN0SW1lU2VydmljZSAmJiAhYWN0V2FsbHBhcGVyU2VydmljZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhY3RBY2Nlc3NpYmlsaXR5U2VydmljZSAmJiAhYWN0UHJpbnRTZXJ2aWNlICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFjdEhvc3RBcGR1U2VydmljZSAmJiAhYWN0T2ZmSG9zdEFwZHVTZXJ2aWNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5JbnRlbnRGaWx0ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGUgIT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZXB0aCsrOwotICAgICAgICAgICAgICAgIFN0cmluZzggdGFnKHRyZWUuZ2V0RWxlbWVudE5hbWUoJmxlbikpOwotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJEZXB0aCAlZCwgICVzXG4iLCBkZXB0aCwgdGFnLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBpZiAoZGVwdGggPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGFnICE9ICJtYW5pZmVzdCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG1hbmlmZXN0IGRvZXMgbm90IHN0YXJ0IHdpdGggPG1hbmlmZXN0PiB0YWdcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHBrZyA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOVUxMLCAicGFja2FnZSIsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoInBhY2thZ2U6IG5hbWU9JyVzJyAiLCBwa2cuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHZlcnNpb25Db2RlID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLCBWRVJTSU9OX0NPREVfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6dmVyc2lvbkNvZGUnIGF0dHJpYnV0ZTogJXNcbiIsIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAodmVyc2lvbkNvZGUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInZlcnNpb25Db2RlPSclZCcgIiwgdmVyc2lvbkNvZGUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ2ZXJzaW9uQ29kZT0nJyAiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IHZlcnNpb25OYW1lID0gZ2V0UmVzb2x2ZWRBdHRyaWJ1dGUoJnJlcywgdHJlZSwgVkVSU0lPTl9OQU1FX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOnZlcnNpb25OYW1lJyBhdHRyaWJ1dGU6ICVzXG4iLCBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ2ZXJzaW9uTmFtZT0nJXMnXG4iLCB2ZXJzaW9uTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXB0aCA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdpdGhpbkFwcGxpY2F0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gImFwcGxpY2F0aW9uIikgewotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluQXBwbGljYXRpb24gPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IGxhYmVsOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE5MID0gbG9jYWxlcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8Tkw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxvY2FsZVN0ciA9ICBsb2NhbGVzW2ldLnN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0cy5zZXRMb2NhbGUobG9jYWxlU3RyICE9IE5VTEwgPyBsb2NhbGVTdHIgOiAiIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBsbGFiZWwgPSBnZXRSZXNvbHZlZEF0dHJpYnV0ZSgmcmVzLCB0cmVlLCBMQUJFTF9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsbGFiZWwgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZVN0ciA9PSBOVUxMIHx8IHN0cmxlbihsb2NhbGVTdHIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gbGxhYmVsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJhcHBsaWNhdGlvbi1sYWJlbDonJXMnXG4iLCBsbGFiZWwuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsID09ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBsbGFiZWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImFwcGxpY2F0aW9uLWxhYmVsLSVzOiclcydcbiIsIGxvY2FsZVN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGxhYmVsLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnIHRtcENvbmZpZyA9IGNvbmZpZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBORCA9IGRlbnNpdGllcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TkQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcENvbmZpZy5kZW5zaXR5ID0gZGVuc2l0aWVzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0cy5zZXRDb25maWd1cmF0aW9uKHRtcENvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBpY29uID0gZ2V0UmVzb2x2ZWRBdHRyaWJ1dGUoJnJlcywgdHJlZSwgSUNPTl9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpY29uICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiYXBwbGljYXRpb24taWNvbi0lZDonJXMnXG4iLCBkZW5zaXRpZXNbaV0sIGljb24uc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0cy5zZXRDb25maWd1cmF0aW9uKGNvbmZpZyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggaWNvbiA9IGdldFJlc29sdmVkQXR0cmlidXRlKCZyZXMsIHRyZWUsIElDT05fQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDppY29uJyBhdHRyaWJ1dGU6ICVzXG4iLCBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB0ZXN0T25seSA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwgVEVTVF9PTkxZX0FUVFIsICZlcnJvciwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6dGVzdE9ubHknIGF0dHJpYnV0ZTogJXNcbiIsIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImFwcGxpY2F0aW9uOiBsYWJlbD0nJXMnICIsIGxhYmVsLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiaWNvbj0nJXMnXG4iLCBpY29uLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0T25seSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ0ZXN0T25seT0nJWQnXG4iLCB0ZXN0T25seSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgZGVidWdnYWJsZSA9IGdldFJlc29sdmVkSW50ZWdlckF0dHJpYnV0ZSgmcmVzLCB0cmVlLCBERUJVR0dBQkxFX0FUVFIsICZlcnJvciwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6ZGVidWdnYWJsZScgYXR0cmlidXRlOiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1Z2dhYmxlICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImFwcGxpY2F0aW9uLWRlYnVnZ2FibGVcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAidXNlcy1zZGsiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGNvZGUgPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsIE1JTl9TREtfVkVSU0lPTl9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWUgPSBnZXRSZXNvbHZlZEF0dHJpYnV0ZSgmcmVzLCB0cmVlLCBNSU5fU0RLX1ZFUlNJT05fQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOm1pblNka1ZlcnNpb24nIGF0dHJpYnV0ZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJEb251dCIpIHRhcmdldFNkayA9IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJzZGtWZXJzaW9uOiclcydcbiIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2RrID0gY29kZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInNka1ZlcnNpb246JyVkJ1xuIiwgY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLCBNQVhfU0RLX1ZFUlNJT05fQVRUUiwgTlVMTCwgLTEpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIm1heFNka1ZlcnNpb246JyVkJ1xuIiwgY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLCBUQVJHRVRfU0RLX1ZFUlNJT05fQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gZ2V0UmVzb2x2ZWRBdHRyaWJ1dGUoJnJlcywgdHJlZSwgVEFSR0VUX1NES19WRVJTSU9OX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDp0YXJnZXRTZGtWZXJzaW9uJyBhdHRyaWJ1dGU6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAiRG9udXQiICYmIHRhcmdldFNkayA8IDQpIHRhcmdldFNkayA9IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ0YXJnZXRTZGtWZXJzaW9uOiclcydcbiIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFNkayA8IGNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2RrID0gY29kZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ0YXJnZXRTZGtWZXJzaW9uOiclZCdcbiIsIGNvZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAidXNlcy1jb25maWd1cmF0aW9uIikgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCByZXFUb3VjaFNjcmVlbiA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRX1RPVUNIX1NDUkVFTl9BVFRSLCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcmVxS2V5Ym9hcmRUeXBlID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFfS0VZQk9BUkRfVFlQRV9BVFRSLCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcmVxSGFyZEtleWJvYXJkID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFfSEFSRF9LRVlCT0FSRF9BVFRSLCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcmVxTmF2aWdhdGlvbiA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRX05BVklHQVRJT05fQVRUUiwgTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHJlcUZpdmVXYXlOYXYgPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUV9GSVZFX1dBWV9OQVZfQVRUUiwgTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtY29uZmlndXJhdGlvbjoiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXFUb3VjaFNjcmVlbiAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgcmVxVG91Y2hTY3JlZW49JyVkJyIsIHJlcVRvdWNoU2NyZWVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXFLZXlib2FyZFR5cGUgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIHJlcUtleWJvYXJkVHlwZT0nJWQnIiwgcmVxS2V5Ym9hcmRUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXFIYXJkS2V5Ym9hcmQgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIHJlcUhhcmRLZXlib2FyZD0nJWQnIiwgcmVxSGFyZEtleWJvYXJkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXFOYXZpZ2F0aW9uICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiByZXFOYXZpZ2F0aW9uPSclZCciLCByZXFOYXZpZ2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXFGaXZlV2F5TmF2ICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiByZXFGaXZlV2F5TmF2PSclZCciLCByZXFGaXZlV2F5TmF2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInN1cHBvcnRzLWlucHV0IikgewotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluU3VwcG9ydHNJbnB1dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJzdXBwb3J0cy1zY3JlZW5zIikgewotICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxTY3JlZW4gPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNNQUxMX1NDUkVFTl9BVFRSLCBOVUxMLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbFNjcmVlbiA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9STUFMX1NDUkVFTl9BVFRSLCBOVUxMLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlU2NyZWVuID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQVJHRV9TQ1JFRU5fQVRUUiwgTlVMTCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4bGFyZ2VTY3JlZW4gPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhMQVJHRV9TQ1JFRU5fQVRUUiwgTlVMTCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbnlEZW5zaXR5ID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTllfREVOU0lUWV9BVFRSLCBOVUxMLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzU21hbGxlc3RXaWR0aERwID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFU19TTUFMTEVTVF9XSURUSF9EUF9BVFRSLCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGVXaWR0aExpbWl0RHAgPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBBVElCTEVfV0lEVEhfTElNSVRfRFBfQVRUUiwgTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXJnZXN0V2lkdGhMaW1pdERwID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQVJHRVNUX1dJRFRIX0xJTUlUX0RQX0FUVFIsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAidXNlcy1mZWF0dXJlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gIiIgJiYgZXJyb3IgPT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRURfQVRUUiwgTlVMTCwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNDYW1lcmFGZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmF1dG9mb2N1cyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgaGF2ZSBubyBjb3JyZXNwb25kaW5nIHBlcm1pc3Npb24gdG8gY2hlY2sgZm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgc2hvdWxkIGltcGx5IHRoZSBmb3VuZGF0aW9uYWwgY2FtZXJhIHBlcm1pc3Npb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxQ2FtZXJhQXV0b2ZvY3VzRmVhdHVyZSA9IHJlcUNhbWVyYUF1dG9mb2N1c0ZlYXR1cmUgfHwgcmVxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjQ2FtZXJhQXV0b2ZvY3VzRmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXEgJiYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmZsYXNoIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgaGF2ZSBubyBjb3JyZXNwb25kaW5nIHBlcm1pc3Npb24gdG8gY2hlY2sgZm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgc2hvdWxkIGltcGx5IHRoZSBmb3VuZGF0aW9uYWwgY2FtZXJhIHBlcm1pc3Npb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxQ2FtZXJhRmxhc2hGZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUubG9jYXRpb24iKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNMb2NhdGlvbkZlYXR1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbi5uZXR3b3JrIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjTmV0d29ya0xvY0ZlYXR1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFOZXR3b3JrTG9jRmVhdHVyZSA9IHJlcU5ldHdvcmtMb2NGZWF0dXJlIHx8IHJlcTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUubG9jYXRpb24uZ3BzIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjR3BzRmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcUdwc0ZlYXR1cmUgPSByZXFHcHNGZWF0dXJlIHx8IHJlcTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUuYmx1ZXRvb3RoIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjQmx1ZXRvb3RoRmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLmhhcmR3YXJlLnRvdWNoc2NyZWVuIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjVG91Y2hzY3JlZW5GZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUudG91Y2hzY3JlZW4ubXVsdGl0b3VjaCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY011bHRpdG91Y2hGZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUudG91Y2hzY3JlZW4ubXVsdGl0b3VjaC5kaXN0aW5jdCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxRGlzdGluY3RNdWx0aXRvdWNoRmVhdHVyZSA9IHJlcURpc3RpbmN0TXVsdGl0b3VjaEZlYXR1cmUgfHwgcmVxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS5taWNyb3Bob25lIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjTWljcm9waG9uZUZlYXR1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS53aWZpIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjV2lGaUZlYXR1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS50ZWxlcGhvbnkiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNUZWxlcGhvbnlGZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcSAmJiAobmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS50ZWxlcGhvbnkuZ3NtIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLmhhcmR3YXJlLnRlbGVwaG9ueS5jZG1hIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgaGF2ZSBubyBjb3JyZXNwb25kaW5nIHBlcm1pc3Npb24gdG8gY2hlY2sgZm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgc2hvdWxkIGltcGx5IHRoZSBmb3VuZGF0aW9uYWwgdGVsZXBob255IHBlcm1pc3Npb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxVGVsZXBob255U3ViRmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLmhhcmR3YXJlLnNjcmVlbi5wb3J0cmFpdCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY1NjcmVlblBvcnRyYWl0RmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLmhhcmR3YXJlLnNjcmVlbi5sYW5kc2NhcGUiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNTY3JlZW5MYW5kc2NhcGVGZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmUlczonJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxID8gIiIgOiAiLW5vdC1yZXF1aXJlZCIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVycyA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0VTX1ZFUlNJT05fQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWdsLWVzOicweCV4J1xuIiwgdmVycyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAidXNlcy1wZXJtaXNzaW9uIikgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9ICIiICYmIGVycm9yID09ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5DQU1FUkEiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NhbWVyYVBlcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19GSU5FX0xPQ0FUSU9OIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNHcHNQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfTU9DS19MT0NBVElPTiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTW9ja0xvY1Blcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19DT0FSU0VfTE9DQVRJT04iKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NvYXJzZUxvY1Blcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19MT0NBVElPTl9FWFRSQV9DT01NQU5EUyIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5JTlNUQUxMX0xPQ0FUSU9OX1BST1ZJREVSIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNHZW5lcmFsTG9jUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQkxVRVRPT1RIIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJMVUVUT09USF9BRE1JTiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmx1ZXRvb3RoUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uUkVDT1JEX0FVRElPIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNSZWNvcmRBdWRpb1Blcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19XSUZJX1NUQVRFIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkNIQU5HRV9XSUZJX1NUQVRFIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkNIQU5HRV9XSUZJX01VTFRJQ0FTVF9TVEFURSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzV2lGaVBlcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkNBTExfUEhPTkUiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQ0FMTF9QUklWSUxFR0VEIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLk1PRElGWV9QSE9ORV9TVEFURSIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5QUk9DRVNTX09VVEdPSU5HX0NBTExTIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfU01TIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfU01TIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfTU1TIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfV0FQX1BVU0giIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uU0VORF9TTVMiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfQVBOX1NFVFRJTkdTIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX1NNUyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzVGVsZXBob255UGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfRVhURVJOQUxfU1RPUkFHRSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzV3JpdGVFeHRlcm5hbFN0b3JhZ2VQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUFEX0VYVEVSTkFMX1NUT1JBR0UiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlYWRFeHRlcm5hbFN0b3JhZ2VQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUFEX1BIT05FX1NUQVRFIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNSZWFkUGhvbmVTdGF0ZVBlcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfQ09OVEFDVFMiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlYWRDb250YWN0c1Blcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0NPTlRBQ1RTIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNXcml0ZUNvbnRhY3RzUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9DQUxMX0xPRyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVhZENhbGxMb2dQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5XUklURV9DQUxMX0xPRyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzV3JpdGVDYWxsTG9nUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1wZXJtaXNzaW9uOiclcydcbiIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXEgPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsIFJFUVVJUkVEX0FUVFIsIE5VTEwsIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigib3B0aW9uYWwtcGVybWlzc2lvbjonJXMnXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpuYW1lJyBhdHRyaWJ1dGU6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInVzZXMtcGFja2FnZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAiIiAmJiBlcnJvciA9PSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1wYWNrYWdlOiclcydcbiIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bmFtZScgYXR0cmlidXRlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAib3JpZ2luYWwtcGFja2FnZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAiIiAmJiBlcnJvciA9PSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigib3JpZ2luYWwtcGFja2FnZTonJXMnXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOm5hbWUnIGF0dHJpYnV0ZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInN1cHBvcnRzLWdsLXRleHR1cmUiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWUgPSBnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gIiIgJiYgZXJyb3IgPT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInN1cHBvcnRzLWdsLXRleHR1cmU6JyVzJ1xuIiwgbmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpuYW1lJyBhdHRyaWJ1dGU6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJjb21wYXRpYmxlLXNjcmVlbnMiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludENvbXBhdGlibGVTY3JlZW5zKHRyZWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgtLTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInBhY2thZ2UtdmVyaWZpZXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWUgPSBnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gIiIgJiYgZXJyb3IgPT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IHB1YmxpY0tleSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBQVUJMSUNfS0VZX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1YmxpY0tleSAhPSAiIiAmJiBlcnJvciA9PSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInBhY2thZ2UtdmVyaWZpZXI6IG5hbWU9JyVzJyBwdWJsaWNLZXk9JyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLnN0cmluZygpLCBwdWJsaWNLZXkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMykgewotICAgICAgICAgICAgICAgICAgICB3aXRoaW5BY3Rpdml0eSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB3aXRoaW5SZWNlaXZlciA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB3aXRoaW5TZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0ludGVudEZpbHRlciA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBoYXNNZXRhSG9zdFBheW1lbnRDYXRlZ29yeSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBoYXNNZXRhT2ZmSG9zdFBheW1lbnRDYXRlZ29yeSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBoYXNCaW5kRGV2aWNlQWRtaW5QZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0JpbmRJbnB1dE1ldGhvZFBlcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaGFzQmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBoYXNCaW5kUHJpbnRTZXJ2aWNlUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBoYXNCaW5kTmZjU2VydmljZVBlcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpdGhpbkFwcGxpY2F0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih0YWcgPT0gImFjdGl2aXR5IikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbkFjdGl2aXR5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eU5hbWUgPSBnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bmFtZScgYXR0cmlidXRlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eUxhYmVsID0gZ2V0UmVzb2x2ZWRBdHRyaWJ1dGUoJnJlcywgdHJlZSwgTEFCRUxfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOmxhYmVsJyBhdHRyaWJ1dGU6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5SWNvbiA9IGdldFJlc29sdmVkQXR0cmlidXRlKCZyZXMsIHRyZWUsIElDT05fQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOmljb24nIGF0dHJpYnV0ZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBvcmllbiA9IGdldFJlc29sdmVkSW50ZWdlckF0dHJpYnV0ZSgmcmVzLCB0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSRUVOX09SSUVOVEFUSU9OX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yID09ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmllbiA9PSAwIHx8IG9yaWVuID09IDYgfHwgb3JpZW4gPT0gOCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVxdWVzdHMgbGFuZHNjYXBlLCBzZW5zb3JMYW5kc2NhcGUsIG9yIHJldmVyc2VMYW5kc2NhcGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFTY3JlZW5MYW5kc2NhcGVGZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmllbiA9PSAxIHx8IG9yaWVuID09IDcgfHwgb3JpZW4gPT0gOSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVxdWVzdHMgcG9ydHJhaXQsIHNlbnNvclBvcnRyYWl0LCBvciByZXZlcnNlUG9ydHJhaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFTY3JlZW5Qb3J0cmFpdEZlYXR1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInVzZXMtbGlicmFyeSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IGxpYnJhcnlOYW1lID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bmFtZScgYXR0cmlidXRlIGZvciB1c2VzLWxpYnJhcnkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXEgPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFRF9BVFRSLCBOVUxMLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtbGlicmFyeSVzOiclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEgPyAiIiA6ICItbm90LXJlcXVpcmVkIiwgbGlicmFyeU5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInJlY2VpdmVyIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpblJlY2VpdmVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlck5hbWUgPSBnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOm5hbWUnIGF0dHJpYnV0ZSBmb3IgcmVjZWl2ZXI6IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgJXNcbiIsIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggcGVybWlzc2lvbiA9IGdldEF0dHJpYnV0ZSh0cmVlLCBQRVJNSVNTSU9OX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yID09ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9ERVZJQ0VfQURNSU4iKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNCaW5kRGV2aWNlQWRtaW5QZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpwZXJtaXNzaW9uJyBhdHRyaWJ1dGUgZm9yIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmVjZWl2ZXIgJyVzJzogJXNcbiIsIHJlY2VpdmVyTmFtZS5zdHJpbmcoKSwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJzZXJ2aWNlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpblNlcnZpY2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bmFtZScgYXR0cmlidXRlIGZvciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHNlcnZpY2U6ICVzXG4iLCBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IHBlcm1pc3Npb24gPSBnZXRBdHRyaWJ1dGUodHJlZSwgUEVSTUlTU0lPTl9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciA9PSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvbiA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfSU5QVVRfTUVUSE9EIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZElucHV0TWV0aG9kUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfQUNDRVNTSUJJTElUWV9TRVJWSUNFIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfUFJJTlRfU0VSVklDRSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JpbmRQcmludFNlcnZpY2VQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9ORkNfU0VSVklDRSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JpbmROZmNTZXJ2aWNlUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6cGVybWlzc2lvbicgYXR0cmlidXRlIGZvciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHNlcnZpY2UgJyVzJzogJXNcbiIsIHNlcnZpY2VOYW1lLnN0cmluZygpLCBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpdGhpblN1cHBvcnRzSW5wdXQgJiYgdGFnID09ICJpbnB1dC10eXBlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9ICIiICYmIGVycm9yID09ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkSW5wdXQuYWRkKG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bmFtZScgYXR0cmlidXRlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlcHRoID09IDQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PSAiaW50ZW50LWZpbHRlciIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ludGVudEZpbHRlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5JbnRlbnRGaWx0ZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0TWFpbkFjdGl2aXR5ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3RXaWRnZXRSZWNlaXZlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdEltZVNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdFdhbGxwYXBlclNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdEFjY2Vzc2liaWxpdHlTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3RQcmludFNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdERldmljZUFkbWluRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0SG9zdEFwZHVTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3RPZmZIb3N0QXBkdVNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRoaW5TZXJ2aWNlICYmIHRhZyA9PSAibWV0YS1kYXRhIikgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpuYW1lJyBhdHRyaWJ1dGUgZm9yIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBtZXRhLWRhdGEgdGFnIGluIHNlcnZpY2UgJyVzJzogJXNcbiIsIHNlcnZpY2VOYW1lLnN0cmluZygpLCBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAiYW5kcm9pZC5uZmMuY2FyZGVtdWxhdGlvbi5ob3N0X2FwZHVfc2VydmljZSIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5uZmMuY2FyZGVtdWxhdGlvbi5vZmZfaG9zdF9hcGR1X3NlcnZpY2UiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvZmZIb3N0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAiYW5kcm9pZC5uZmMuY2FyZGVtdWxhdGlvbi5ob3N0X2FwZHVfc2VydmljZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmSG9zdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggeG1sUGF0aCA9IGdldFJlc29sdmVkQXR0cmlidXRlKCZyZXMsIHRyZWUsIFJFU09VUkNFX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpyZXNvdXJjZScgYXR0cmlidXRlIGZvciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG1ldGEtZGF0YSB0YWcgaW4gc2VydmljZSAnJXMnOiAlc1xuIiwgc2VydmljZU5hbWUuc3RyaW5nKCksIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc4PiBjYXRlZ29yaWVzID0gZ2V0TmZjQWlkQ2F0ZWdvcmllcyhhc3NldHMsIHhtbFBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZIb3N0LCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgQUlEIGNhdGVnb3J5IGZvciBzZXJ2aWNlICclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGNhdExlbiA9IGNhdGVnb3JpZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2F0TGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYXltZW50Q2F0ZWdvcnkgPSAoY2F0ZWdvcmllc1tpXSA9PSAicGF5bWVudCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2ZmSG9zdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTWV0YU9mZkhvc3RQYXltZW50Q2F0ZWdvcnkgfD0gcGF5bWVudENhdGVnb3J5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTWV0YUhvc3RQYXltZW50Q2F0ZWdvcnkgfD0gcGF5bWVudENhdGVnb3J5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZGVwdGggPT0gNSkgJiYgd2l0aGluSW50ZW50RmlsdGVyKXsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBhY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gImFjdGlvbiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bmFtZScgYXR0cmlidXRlOiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXRoaW5BY3Rpdml0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01haW5BY3Rpdml0eSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdE1haW5BY3Rpdml0eSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRoaW5SZWNlaXZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gImFuZHJvaWQuYXBwd2lkZ2V0LmFjdGlvbi5BUFBXSURHRVRfVVBEQVRFIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RXaWRnZXRSZWNlaXZlcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09ICJhbmRyb2lkLmFwcC5hY3Rpb24uREVWSUNFX0FETUlOX0VOQUJMRUQiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdERldmljZUFkbWluRW5hYmxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRoaW5TZXJ2aWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSAiYW5kcm9pZC52aWV3LklucHV0TWV0aG9kIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RJbWVTZXJ2aWNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSAiYW5kcm9pZC5zZXJ2aWNlLndhbGxwYXBlci5XYWxscGFwZXJTZXJ2aWNlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RXYWxscGFwZXJTZXJ2aWNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSAiYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5BY2Nlc3NpYmlsaXR5U2VydmljZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0QWNjZXNzaWJpbGl0eVNlcnZpY2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09ICJhbmRyb2lkLnByaW50c2VydmljZS5QcmludFNlcnZpY2UiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdFByaW50U2VydmljZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gImFuZHJvaWQubmZjLmNhcmRlbXVsYXRpb24uYWN0aW9uLkhPU1RfQVBEVV9TRVJWSUNFIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RIb3N0QXBkdVNlcnZpY2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09ICJhbmRyb2lkLm5mYy5jYXJkZW11bGF0aW9uLmFjdGlvbi5PRkZfSE9TVF9BUERVX1NFUlZJQ0UiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdE9mZkhvc3RBcGR1U2VydmljZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSAiYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlNFQVJDSCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlYXJjaGFibGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PSAiY2F0ZWdvcnkiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IGNhdGVnb3J5ID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnbmFtZScgYXR0cmlidXRlOiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXRoaW5BY3Rpdml0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeSA9PSAiYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGF1bmNoZXJBY3Rpdml0eSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBQcmUtMS42IGltcGxpY2l0bHkgZ3JhbnRlZCBwZXJtaXNzaW9uIGNvbXBhdGliaWxpdHkgbG9naWMKLSAgICAgICAgICAgIGlmICh0YXJnZXRTZGsgPCA0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNXcml0ZUV4dGVybmFsU3RvcmFnZVBlcm1pc3Npb24pIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLXBlcm1pc3Npb246J2FuZHJvaWQucGVybWlzc2lvbi5XUklURV9FWFRFUk5BTF9TVE9SQUdFJ1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLXBlcm1pc3Npb246J2FuZHJvaWQucGVybWlzc2lvbi5XUklURV9FWFRFUk5BTF9TVE9SQUdFJywiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3RhcmdldFNka1ZlcnNpb24gPCA0J1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc1dyaXRlRXh0ZXJuYWxTdG9yYWdlUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghaGFzUmVhZFBob25lU3RhdGVQZXJtaXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1wZXJtaXNzaW9uOidhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9QSE9ORV9TVEFURSdcbiIpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1wZXJtaXNzaW9uOidhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9QSE9ORV9TVEFURScsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIid0YXJnZXRTZGtWZXJzaW9uIDwgNCdcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgdGhlIGFwcGxpY2F0aW9uIGhhcyByZXF1ZXN0ZWQgV1JJVEVfRVhURVJOQUxfU1RPUkFHRSwgd2Ugd2lsbAotICAgICAgICAgICAgLy8gZm9yY2UgdGhlbSB0byBhbHdheXMgdGFrZSBSRUFEX0VYVEVSTkFMX1NUT1JBR0UgYXMgd2VsbC4gIFdlIGFsd2F5cwotICAgICAgICAgICAgLy8gZG8gdGhpcyAocmVnYXJkbGVzcyBvZiB0YXJnZXQgQVBJIHZlcnNpb24pIGJlY2F1c2Ugd2UgY2FuJ3QgaGF2ZQotICAgICAgICAgICAgLy8gYW4gYXBwIHdpdGggd3JpdGUgcGVybWlzc2lvbiBidXQgbm90IHJlYWQgcGVybWlzc2lvbi4KLSAgICAgICAgICAgIGlmICghaGFzUmVhZEV4dGVybmFsU3RvcmFnZVBlcm1pc3Npb24gJiYgaGFzV3JpdGVFeHRlcm5hbFN0b3JhZ2VQZXJtaXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLXBlcm1pc3Npb246J2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX0VYVEVSTkFMX1NUT1JBR0UnXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1wZXJtaXNzaW9uOidhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9FWFRFUk5BTF9TVE9SQUdFJywiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICIncmVxdWVzdGVkIFdSSVRFX0VYVEVSTkFMX1NUT1JBR0UnXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUHJlLUplbGx5QmVhbiBjYWxsIGxvZyBwZXJtaXNzaW9uIGNvbXBhdGliaWxpdHkuCi0gICAgICAgICAgICBpZiAodGFyZ2V0U2RrIDwgMTYpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWhhc1JlYWRDYWxsTG9nUGVybWlzc2lvbiAmJiBoYXNSZWFkQ29udGFjdHNQZXJtaXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1wZXJtaXNzaW9uOidhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9DQUxMX0xPRydcbiIpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1wZXJtaXNzaW9uOidhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9DQUxMX0xPRycsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIid0YXJnZXRTZGtWZXJzaW9uIDwgMTYgYW5kIHJlcXVlc3RlZCBSRUFEX0NPTlRBQ1RTJ1xuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghaGFzV3JpdGVDYWxsTG9nUGVybWlzc2lvbiAmJiBoYXNXcml0ZUNvbnRhY3RzUGVybWlzc2lvbikgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtcGVybWlzc2lvbjonYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0NBTExfTE9HJ1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLXBlcm1pc3Npb246J2FuZHJvaWQucGVybWlzc2lvbi5XUklURV9DQUxMX0xPRycsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIid0YXJnZXRTZGtWZXJzaW9uIDwgMTYgYW5kIHJlcXVlc3RlZCBXUklURV9DT05UQUNUUydcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogVGhlIGZvbGxvd2luZyBibG9ja3MgaGFuZGxlIHByaW50aW5nICJpbmZlcnJlZCIgdXNlcy1mZWF0dXJlcywgYmFzZWQKLSAgICAgICAgICAgICAqIG9uIHdoZXRoZXIgcmVsYXRlZCBmZWF0dXJlcyBvciBwZXJtaXNzaW9ucyBhcmUgdXNlZCBieSB0aGUgYXBwLgotICAgICAgICAgICAgICogTm90ZSB0aGF0IHRoZSB2YXJpb3VzIHNwZWMqRmVhdHVyZSB2YXJpYWJsZXMgZGVub3RlIHdoZXRoZXIgdGhlCi0gICAgICAgICAgICAgKiByZWxldmFudCB0YWcgd2FzICpwcmVzZW50KiBpbiB0aGUgQW5kcm9pZE1hbmZlc3QsIG5vdCB0aGF0IGl0IHdhcwotICAgICAgICAgICAgICogcHJlc2VudCBhbmQgc2V0IHRvIHRydWUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIC8vIENhbWVyYS1yZWxhdGVkIGJhY2stY29tcGF0aWJpbGl0eSBsb2dpYwotICAgICAgICAgICAgaWYgKCFzcGVjQ2FtZXJhRmVhdHVyZSkgewotICAgICAgICAgICAgICAgIGlmIChyZXFDYW1lcmFGbGFzaEZlYXR1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYXBwIHJlcXVlc3RlZCBhIHN1Yi1mZWF0dXJlIChhdXRvZm9jdXMgb3IgZmxhc2gpIGFuZCBkaWRuJ3QKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWVzdCB0aGUgYmFzZSBjYW1lcmEgZmVhdHVyZSwgd2UgaW5mZXIgdGhhdCBpdCBtZWFudCB0bwotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEnXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEnLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIncmVxdWVzdGVkIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmZsYXNoIGZlYXR1cmUnXG4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcUNhbWVyYUF1dG9mb2N1c0ZlYXR1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYXBwIHJlcXVlc3RlZCBhIHN1Yi1mZWF0dXJlIChhdXRvZm9jdXMgb3IgZmxhc2gpIGFuZCBkaWRuJ3QKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWVzdCB0aGUgYmFzZSBjYW1lcmEgZmVhdHVyZSwgd2UgaW5mZXIgdGhhdCBpdCBtZWFudCB0bwotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEnXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEnLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIncmVxdWVzdGVkIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmF1dG9mb2N1cyBmZWF0dXJlJ1xuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNDYW1lcmFQZXJtaXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIGFwcCB3YW50cyB0byB1c2UgY2FtZXJhIGJ1dCBkaWRuJ3QgcmVxdWVzdCB0aGUgZmVhdHVyZSwgd2UgaW5mZXIgCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaXQgbWVhbnQgdG8sIGFuZCBmdXJ0aGVyIHRoYXQgaXQgd2FudHMgYXV0b2ZvY3VzCi0gICAgICAgICAgICAgICAgICAgIC8vICh3aGljaCB3YXMgdGhlIDEuMCAtIDEuNSBiZWhhdmlvcikKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhJ1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3BlY0NhbWVyYUF1dG9mb2N1c0ZlYXR1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hdXRvZm9jdXMnXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmF1dG9mb2N1cycsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIncmVxdWVzdGVkIGFuZHJvaWQucGVybWlzc2lvbi5DQU1FUkEgcGVybWlzc2lvbidcbiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBMb2NhdGlvbi1yZWxhdGVkIGJhY2stY29tcGF0aWJpbGl0eSBsb2dpYwotICAgICAgICAgICAgaWYgKCFzcGVjTG9jYXRpb25GZWF0dXJlICYmCi0gICAgICAgICAgICAgICAgKGhhc01vY2tMb2NQZXJtaXNzaW9uIHx8IGhhc0NvYXJzZUxvY1Blcm1pc3Npb24gfHwgaGFzR3BzUGVybWlzc2lvbiB8fAotICAgICAgICAgICAgICAgICBoYXNHZW5lcmFsTG9jUGVybWlzc2lvbiB8fCByZXFOZXR3b3JrTG9jRmVhdHVyZSB8fCByZXFHcHNGZWF0dXJlKSkgewotICAgICAgICAgICAgICAgIC8vIGlmIGFwcCBlaXRoZXIgdGFrZXMgYSBsb2NhdGlvbi1yZWxhdGVkIHBlcm1pc3Npb24gb3IgcmVxdWVzdHMgb25lIG9mIHRoZQotICAgICAgICAgICAgICAgIC8vIHN1Yi1mZWF0dXJlcywgd2UgaW5mZXIgdGhhdCBpdCBhbHNvIG1lYW50IHRvIHJlcXVlc3QgdGhlIGJhc2UgbG9jYXRpb24gZmVhdHVyZQotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uJ1xuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbicsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiJ3JlcXVlc3RlZCBhIGxvY2F0aW9uIGFjY2VzcyBwZXJtaXNzaW9uJ1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNwZWNHcHNGZWF0dXJlICYmIGhhc0dwc1Blcm1pc3Npb24pIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBhcHAgdGFrZXMgR1BTIChGSU5FIGxvY2F0aW9uKSBwZXJtIGJ1dCBkb2VzIG5vdCByZXF1ZXN0IHRoZSBHUFMKLSAgICAgICAgICAgICAgICAvLyBmZWF0dXJlLCB3ZSBpbmZlciB0aGF0IGl0IG1lYW50IHRvCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUubG9jYXRpb24uZ3BzJ1xuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbi5ncHMnLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgIidyZXF1ZXN0ZWQgYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19GSU5FX0xPQ0FUSU9OIHBlcm1pc3Npb24nXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghc3BlY05ldHdvcmtMb2NGZWF0dXJlICYmIGhhc0NvYXJzZUxvY1Blcm1pc3Npb24pIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBhcHAgdGFrZXMgTmV0d29yayBsb2NhdGlvbiAoQ09BUlNFIGxvY2F0aW9uKSBwZXJtIGJ1dCBkb2VzIG5vdCByZXF1ZXN0IHRoZQotICAgICAgICAgICAgICAgIC8vIG5ldHdvcmsgbG9jYXRpb24gZmVhdHVyZSwgd2UgaW5mZXIgdGhhdCBpdCBtZWFudCB0bwotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uLm5ldHdvcmsnXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uLm5ldHdvcmsnLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgIidyZXF1ZXN0ZWQgYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19DT0FSU0VfTE9DQVRJT04gcGVybWlzc2lvbidcbiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBCbHVldG9vdGgtcmVsYXRlZCBjb21wYXRpYmlsaXR5IGxvZ2ljCi0gICAgICAgICAgICBpZiAoIXNwZWNCbHVldG9vdGhGZWF0dXJlICYmIGhhc0JsdWV0b290aFBlcm1pc3Npb24gJiYgKHRhcmdldFNkayA+IDQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgYXBwIHRha2VzIGEgQmx1ZXRvb3RoIHBlcm1pc3Npb24gYnV0IGRvZXMgbm90IHJlcXVlc3QgdGhlIEJsdWV0b290aAotICAgICAgICAgICAgICAgIC8vIGZlYXR1cmUsIHdlIGluZmVyIHRoYXQgaXQgbWVhbnQgdG8KLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5ibHVldG9vdGgnXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLmJsdWV0b290aCcsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiJ3JlcXVlc3RlZCBhbmRyb2lkLnBlcm1pc3Npb24uQkxVRVRPT1RIIG9yIGFuZHJvaWQucGVybWlzc2lvbi5CTFVFVE9PVEhfQURNSU4gIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAicGVybWlzc2lvbiBhbmQgdGFyZ2V0U2RrVmVyc2lvbiA+IDQnXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTWljcm9waG9uZS1yZWxhdGVkIGNvbXBhdGliaWxpdHkgbG9naWMKLSAgICAgICAgICAgIGlmICghc3BlY01pY3JvcGhvbmVGZWF0dXJlICYmIGhhc1JlY29yZEF1ZGlvUGVybWlzc2lvbikgewotICAgICAgICAgICAgICAgIC8vIGlmIGFwcCB0YWtlcyB0aGUgcmVjb3JkLWF1ZGlvIHBlcm1pc3Npb24gYnV0IGRvZXMgbm90IHJlcXVlc3QgdGhlIG1pY3JvcGhvbmUKLSAgICAgICAgICAgICAgICAvLyBmZWF0dXJlLCB3ZSBpbmZlciB0aGF0IGl0IG1lYW50IHRvCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUubWljcm9waG9uZSdcbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUubWljcm9waG9uZScsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiJ3JlcXVlc3RlZCBhbmRyb2lkLnBlcm1pc3Npb24uUkVDT1JEX0FVRElPIHBlcm1pc3Npb24nXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2lGaS1yZWxhdGVkIGNvbXBhdGliaWxpdHkgbG9naWMKLSAgICAgICAgICAgIGlmICghc3BlY1dpRmlGZWF0dXJlICYmIGhhc1dpRmlQZXJtaXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgYXBwIHRha2VzIG9uZSBvZiB0aGUgV2lGaSBwZXJtaXNzaW9ucyBidXQgZG9lcyBub3QgcmVxdWVzdCB0aGUgV2lGaQotICAgICAgICAgICAgICAgIC8vIGZlYXR1cmUsIHdlIGluZmVyIHRoYXQgaXQgbWVhbnQgdG8KLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS53aWZpJ1xuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS53aWZpJywiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICIncmVxdWVzdGVkIGFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfV0lGSV9TVEFURSwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5wZXJtaXNzaW9uLkNIQU5HRV9XSUZJX1NUQVRFLCBvciAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnBlcm1pc3Npb24uQ0hBTkdFX1dJRklfTVVMVElDQVNUX1NUQVRFIHBlcm1pc3Npb24nXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVGVsZXBob255LXJlbGF0ZWQgY29tcGF0aWJpbGl0eSBsb2dpYwotICAgICAgICAgICAgaWYgKCFzcGVjVGVsZXBob255RmVhdHVyZSAmJiAoaGFzVGVsZXBob255UGVybWlzc2lvbiB8fCByZXFUZWxlcGhvbnlTdWJGZWF0dXJlKSkgewotICAgICAgICAgICAgICAgIC8vIGlmIGFwcCB0YWtlcyBvbmUgb2YgdGhlIHRlbGVwaG9ueSBwZXJtaXNzaW9ucyBvciByZXF1ZXN0cyBhIHN1Yi1mZWF0dXJlIGJ1dAotICAgICAgICAgICAgICAgIC8vIGRvZXMgbm90IHJlcXVlc3QgdGhlIGJhc2UgdGVsZXBob255IGZlYXR1cmUsIHdlIGluZmVyIHRoYXQgaXQgbWVhbnQgdG8KLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS50ZWxlcGhvbnknXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLnRlbGVwaG9ueScsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiJ3JlcXVlc3RlZCBhIHRlbGVwaG9ueS1yZWxhdGVkIHBlcm1pc3Npb24gb3IgZmVhdHVyZSdcbiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUb3VjaHNjcmVlbi1yZWxhdGVkIGJhY2stY29tcGF0aWJpbGl0eSBsb2dpYwotICAgICAgICAgICAgaWYgKCFzcGVjVG91Y2hzY3JlZW5GZWF0dXJlKSB7IC8vIG5vdCBhIHR5cG8hCi0gICAgICAgICAgICAgICAgLy8gYWxsIGFwcHMgYXJlIHByZXN1bWVkIHRvIHJlcXVpcmUgYSB0b3VjaHNjcmVlbiwgdW5sZXNzIHRoZXkgZXhwbGljaXRseSBzYXkKLSAgICAgICAgICAgICAgICAvLyA8dXNlcy1mZWF0dXJlIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5oYXJkd2FyZS50b3VjaHNjcmVlbiIgYW5kcm9pZDpyZXF1aXJlZD0iZmFsc2UiLz4KLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgc3BlY1RvdWNoc2NyZWVuRmVhdHVyZSBpcyB0cnVlIGlmIHRoZSB0YWcgaXMgcHJlc2VudCwgcmVnYXJkbGVzcwotICAgICAgICAgICAgICAgIC8vIG9mIHdoZXRoZXIgaXRzIHZhbHVlIGlzIHRydWUgb3IgZmFsc2UsIHNvIHRoaXMgaXMgc2FmZQotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLnRvdWNoc2NyZWVuJ1xuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS50b3VjaHNjcmVlbicsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiJ2Fzc3VtZWQgeW91IHJlcXVpcmUgYSB0b3VjaCBzY3JlZW4gdW5sZXNzIGV4cGxpY2l0bHkgbWFkZSBvcHRpb25hbCdcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFzcGVjTXVsdGl0b3VjaEZlYXR1cmUgJiYgcmVxRGlzdGluY3RNdWx0aXRvdWNoRmVhdHVyZSkgewotICAgICAgICAgICAgICAgIC8vIGlmIGFwcCB0YWtlcyBvbmUgb2YgdGhlIHRlbGVwaG9ueSBwZXJtaXNzaW9ucyBvciByZXF1ZXN0cyBhIHN1Yi1mZWF0dXJlIGJ1dAotICAgICAgICAgICAgICAgIC8vIGRvZXMgbm90IHJlcXVlc3QgdGhlIGJhc2UgdGVsZXBob255IGZlYXR1cmUsIHdlIGluZmVyIHRoYXQgaXQgbWVhbnQgdG8KLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS50b3VjaHNjcmVlbi5tdWx0aXRvdWNoJ1xuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS50b3VjaHNjcmVlbi5tdWx0aXRvdWNoJywiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICIncmVxdWVzdGVkIGFuZHJvaWQuaGFyZHdhcmUudG91Y2hzY3JlZW4ubXVsdGl0b3VjaC5kaXN0aW5jdCBmZWF0dXJlJ1xuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIExhbmRzY2FwZS9wb3J0cmFpdC1yZWxhdGVkIGNvbXBhdGliaWxpdHkgbG9naWMKLSAgICAgICAgICAgIGlmICghc3BlY1NjcmVlbkxhbmRzY2FwZUZlYXR1cmUgJiYgIXNwZWNTY3JlZW5Qb3J0cmFpdEZlYXR1cmUpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYXBwIGhhcyBzcGVjaWZpZWQgYW55IGFjdGl2aXRpZXMgaW4gaXRzIG1hbmlmZXN0Ci0gICAgICAgICAgICAgICAgLy8gdGhhdCByZXF1ZXN0IGEgc3BlY2lmaWMgb3JpZW50YXRpb24sIHRoZW4gYXNzdW1lIHRoYXQKLSAgICAgICAgICAgICAgICAvLyBvcmllbnRhdGlvbiBpcyByZXF1aXJlZC4KLSAgICAgICAgICAgICAgICBpZiAocmVxU2NyZWVuTGFuZHNjYXBlRmVhdHVyZSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5zY3JlZW4ubGFuZHNjYXBlJ1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUuc2NyZWVuLmxhbmRzY2FwZScsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIidvbmUgb3IgbW9yZSBhY3Rpdml0aWVzIGhhdmUgc3BlY2lmaWVkIGEgbGFuZHNjYXBlIG9yaWVudGF0aW9uJ1xuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChyZXFTY3JlZW5Qb3J0cmFpdEZlYXR1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUuc2NyZWVuLnBvcnRyYWl0J1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUuc2NyZWVuLnBvcnRyYWl0JywiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ29uZSBvciBtb3JlIGFjdGl2aXRpZXMgaGF2ZSBzcGVjaWZpZWQgYSBwb3J0cmFpdCBvcmllbnRhdGlvbidcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGhhc01haW5BY3Rpdml0eSkgewotICAgICAgICAgICAgICAgIHByaW50ZigibWFpblxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzV2lkZ2V0UmVjZWl2ZXJzKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJhcHAtd2lkZ2V0XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoYXNEZXZpY2VBZG1pblJlY2VpdmVyKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJkZXZpY2UtYWRtaW5cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc0ltZVNlcnZpY2UpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoImltZVxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzV2FsbHBhcGVyU2VydmljZSkgewotICAgICAgICAgICAgICAgIHByaW50Zigid2FsbHBhcGVyXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoYXNBY2Nlc3NpYmlsaXR5U2VydmljZSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiYWNjZXNzaWJpbGl0eVxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzUHJpbnRTZXJ2aWNlKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJwcmludFxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzUGF5bWVudFNlcnZpY2UpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoInBheW1lbnRcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc090aGVyQWN0aXZpdGllcykgewotICAgICAgICAgICAgICAgIHByaW50Zigib3RoZXItYWN0aXZpdGllc1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNTZWFyY2hhYmxlKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJzZWFyY2hcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc090aGVyUmVjZWl2ZXJzKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJvdGhlci1yZWNlaXZlcnNcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc090aGVyU2VydmljZXMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIm90aGVyLXNlcnZpY2VzXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRm9yIG1vZGVybiBhcHBzLCBpZiBzY3JlZW4gc2l6ZSBidWNrZXRzIGhhdmVuJ3QgYmVlbiBzcGVjaWZpZWQKLSAgICAgICAgICAgIC8vIGJ1dCB0aGUgbmV3IHdpZHRoIHJhbmdlcyBoYXZlLCB0aGVuIGluZmVyIHRoZSBidWNrZXRzIGZyb20gdGhlbS4KLSAgICAgICAgICAgIGlmIChzbWFsbFNjcmVlbiA+IDAgJiYgbm9ybWFsU2NyZWVuID4gMCAmJiBsYXJnZVNjcmVlbiA+IDAgJiYgeGxhcmdlU2NyZWVuID4gMAotICAgICAgICAgICAgICAgICAgICAmJiByZXF1aXJlc1NtYWxsZXN0V2lkdGhEcCA+IDApIHsKLSAgICAgICAgICAgICAgICBpbnQgY29tcGF0V2lkdGggPSBjb21wYXRpYmxlV2lkdGhMaW1pdERwOwotICAgICAgICAgICAgICAgIGlmIChjb21wYXRXaWR0aCA8PSAwKSBjb21wYXRXaWR0aCA9IHJlcXVpcmVzU21hbGxlc3RXaWR0aERwOwotICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlc1NtYWxsZXN0V2lkdGhEcCA8PSAyNDAgJiYgY29tcGF0V2lkdGggPj0gMjQwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNtYWxsU2NyZWVuID0gLTE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc21hbGxTY3JlZW4gPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocmVxdWlyZXNTbWFsbGVzdFdpZHRoRHAgPD0gMzIwICYmIGNvbXBhdFdpZHRoID49IDMyMCkgewotICAgICAgICAgICAgICAgICAgICBub3JtYWxTY3JlZW4gPSAtMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBub3JtYWxTY3JlZW4gPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocmVxdWlyZXNTbWFsbGVzdFdpZHRoRHAgPD0gNDgwICYmIGNvbXBhdFdpZHRoID49IDQ4MCkgewotICAgICAgICAgICAgICAgICAgICBsYXJnZVNjcmVlbiA9IC0xOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxhcmdlU2NyZWVuID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVzU21hbGxlc3RXaWR0aERwIDw9IDcyMCAmJiBjb21wYXRXaWR0aCA+PSA3MjApIHsKLSAgICAgICAgICAgICAgICAgICAgeGxhcmdlU2NyZWVuID0gLTE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgeGxhcmdlU2NyZWVuID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIERldGVybWluZSBkZWZhdWx0IHZhbHVlcyBmb3IgYW55IHVuc3BlY2lmaWVkIHNjcmVlbiBzaXplcywKLSAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSB0YXJnZXQgU0RLIG9mIHRoZSBwYWNrYWdlLiAgQXMgb2YgNCAoZG9udXQpCi0gICAgICAgICAgICAvLyB0aGUgc2NyZWVuIHNpemUgc3VwcG9ydCB3YXMgaW50cm9kdWNlZCwgc28gYWxsIGRlZmF1bHQgdG8KLSAgICAgICAgICAgIC8vIGVuYWJsZWQuCi0gICAgICAgICAgICBpZiAoc21hbGxTY3JlZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgc21hbGxTY3JlZW4gPSB0YXJnZXRTZGsgPj0gNCA/IC0xIDogMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub3JtYWxTY3JlZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgbm9ybWFsU2NyZWVuID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGFyZ2VTY3JlZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgbGFyZ2VTY3JlZW4gPSB0YXJnZXRTZGsgPj0gNCA/IC0xIDogMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4bGFyZ2VTY3JlZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW50cm9kdWNlZCBpbiBHaW5nZXJicmVhZC4KLSAgICAgICAgICAgICAgICB4bGFyZ2VTY3JlZW4gPSB0YXJnZXRTZGsgPj0gOSA/IC0xIDogMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhbnlEZW5zaXR5ID4gMCkgewotICAgICAgICAgICAgICAgIGFueURlbnNpdHkgPSAodGFyZ2V0U2RrID49IDQgfHwgcmVxdWlyZXNTbWFsbGVzdFdpZHRoRHAgPiAwCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBjb21wYXRpYmxlV2lkdGhMaW1pdERwID4gMCkgPyAtMSA6IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoInN1cHBvcnRzLXNjcmVlbnM6Iik7Ci0gICAgICAgICAgICBpZiAoc21hbGxTY3JlZW4gIT0gMCkgcHJpbnRmKCIgJ3NtYWxsJyIpOwotICAgICAgICAgICAgaWYgKG5vcm1hbFNjcmVlbiAhPSAwKSBwcmludGYoIiAnbm9ybWFsJyIpOwotICAgICAgICAgICAgaWYgKGxhcmdlU2NyZWVuICE9IDApIHByaW50ZigiICdsYXJnZSciKTsKLSAgICAgICAgICAgIGlmICh4bGFyZ2VTY3JlZW4gIT0gMCkgcHJpbnRmKCIgJ3hsYXJnZSciKTsKLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgIHByaW50Zigic3VwcG9ydHMtYW55LWRlbnNpdHk6ICclcydcbiIsIGFueURlbnNpdHkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1NtYWxsZXN0V2lkdGhEcCA+IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoInJlcXVpcmVzLXNtYWxsZXN0LXdpZHRoOiclZCdcbiIsIHJlcXVpcmVzU21hbGxlc3RXaWR0aERwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb21wYXRpYmxlV2lkdGhMaW1pdERwID4gMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiY29tcGF0aWJsZS13aWR0aC1saW1pdDonJWQnXG4iLCBjb21wYXRpYmxlV2lkdGhMaW1pdERwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsYXJnZXN0V2lkdGhMaW1pdERwID4gMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigibGFyZ2VzdC13aWR0aC1saW1pdDonJWQnXG4iLCBsYXJnZXN0V2lkdGhMaW1pdERwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpbnRmKCJsb2NhbGVzOiIpOwotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE5MID0gbG9jYWxlcy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8Tkw7IGkrKykgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxvY2FsZVN0ciA9ICBsb2NhbGVzW2ldLnN0cmluZygpOwotICAgICAgICAgICAgICAgIGlmIChsb2NhbGVTdHIgPT0gTlVMTCB8fCBzdHJsZW4obG9jYWxlU3RyKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsZVN0ciA9ICItLV8tLSI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50ZigiICclcyciLCBsb2NhbGVTdHIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotCi0gICAgICAgICAgICBwcmludGYoImRlbnNpdGllczoiKTsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBORCA9IGRlbnNpdGllcy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TkQ7IGkrKykgewotICAgICAgICAgICAgICAgIHByaW50ZigiICclZCciLCBkZW5zaXRpZXNbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotCi0gICAgICAgICAgICBBc3NldERpciogZGlyID0gYXNzZXRzLm9wZW5Ob25Bc3NldERpcihhc3NldHNDb29raWUsICJsaWIiKTsKLSAgICAgICAgICAgIGlmIChkaXIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmIChkaXItPmdldEZpbGVDb3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIm5hdGl2ZS1jb2RlOiIpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8ZGlyLT5nZXRGaWxlQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAnJXMnIiwgZGlyLT5nZXRGaWxlTmFtZShpKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWxldGUgZGlyOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCgiYmFkZ2VyIiwgb3B0aW9uKSA9PSAwKSB7Ci0gICAgICAgICAgICBwcmludGYoIiVzIiwgQ09OU09MRV9EQVRBKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoImNvbmZpZ3VyYXRpb25zIiwgb3B0aW9uKSA9PSAwKSB7Ci0gICAgICAgICAgICBWZWN0b3I8UmVzVGFibGVfY29uZmlnPiBjb25maWdzOwotICAgICAgICAgICAgcmVzLmdldENvbmZpZ3VyYXRpb25zKCZjb25maWdzKTsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOID0gY29uZmlncy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgY29uZmlnc1tpXS50b1N0cmluZygpLnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHVua25vd24gZHVtcCBvcHRpb24gJyVzJ1xuIiwgb3B0aW9uKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdCA9IE5PX0VSUk9SOwotCi1iYWlsOgotICAgIGlmIChhc3NldCkgewotICAgICAgICBkZWxldGUgYXNzZXQ7Ci0gICAgfQotICAgIHJldHVybiAocmVzdWx0ICE9IE5PX0VSUk9SKTsKLX0KLQotCi0vKgotICogSGFuZGxlIHRoZSAiYWRkIiBjb21tYW5kLCB3aGljaCB3YW50cyB0byBhZGQgZmlsZXMgdG8gYSBuZXcgb3IKLSAqIHByZS1leGlzdGluZyBhcmNoaXZlLgotICovCi1pbnQgZG9BZGQoQnVuZGxlKiBidW5kbGUpCi17Ci0gICAgWmlwRmlsZSogemlwID0gTlVMTDsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgIGNvbnN0IGNoYXIqIHppcEZpbGVOYW1lOwotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0VXBkYXRlKCkpIHsKLSAgICAgICAgLyogYXZvaWQgY29uZnVzaW9uICovCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGNhbid0IHVzZSAnLXUnIHdpdGggYWRkXG4iKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGlmIChidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKSA8IDEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogbXVzdCBzcGVjaWZ5IHppcCBmaWxlIG5hbWVcbiIpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotICAgIHppcEZpbGVOYW1lID0gYnVuZGxlLT5nZXRGaWxlU3BlY0VudHJ5KDApOwotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0RmlsZVNwZWNDb3VudCgpIDwgMikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5PVEU6IG5vdGhpbmcgdG8gZG9cbiIpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgemlwID0gb3BlblJlYWRXcml0ZSh6aXBGaWxlTmFtZSwgdHJ1ZSk7Ci0gICAgaWYgKHppcCA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGZhaWxlZCBvcGVuaW5nL2NyZWF0aW5nICclcycgYXMgWmlwIGZpbGVcbiIsIHppcEZpbGVOYW1lKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYnVuZGxlLT5nZXRGaWxlU3BlY0NvdW50KCk7IGkrKykgewotICAgICAgICBjb25zdCBjaGFyKiBmaWxlTmFtZSA9IGJ1bmRsZS0+Z2V0RmlsZVNwZWNFbnRyeShpKTsKLQotICAgICAgICBpZiAoc3RyY2FzZWNtcChTdHJpbmc4KGZpbGVOYW1lKS5nZXRQYXRoRXh0ZW5zaW9uKCkuc3RyaW5nKCksICIuZ3oiKSA9PSAwKSB7Ci0gICAgICAgICAgICBwcmludGYoIiAnJXMnLi4uIChmcm9tIGd6aXApXG4iLCBmaWxlTmFtZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSB6aXAtPmFkZEd6aXAoZmlsZU5hbWUsIFN0cmluZzgoZmlsZU5hbWUpLmdldEJhc2VQYXRoKCkuc3RyaW5nKCksIE5VTEwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0SnVua1BhdGgoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZzggc3RvcmFnZU5hbWUgPSBTdHJpbmc4KGZpbGVOYW1lKS5nZXRQYXRoTGVhZigpOwotICAgICAgICAgICAgICAgIHByaW50ZigiICclcycgYXMgJyVzJy4uLlxuIiwgZmlsZU5hbWUsIHN0b3JhZ2VOYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB6aXAtPmFkZChmaWxlTmFtZSwgc3RvcmFnZU5hbWUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlLT5nZXRDb21wcmVzc2lvbk1ldGhvZCgpLCBOVUxMKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgJyVzJy4uLlxuIiwgZmlsZU5hbWUpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHppcC0+YWRkKGZpbGVOYW1lLCBidW5kbGUtPmdldENvbXByZXNzaW9uTWV0aG9kKCksIE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGFkZCAnJXMnIHRvICclcyciLCBidW5kbGUtPmdldEZpbGVTcGVjRW50cnkoaSksIHppcEZpbGVOYW1lKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTkFNRV9OT1RfRk9VTkQpCi0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI6IGZpbGUgbm90IGZvdW5kXG4iKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBBTFJFQURZX0VYSVNUUykKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIjogYWxyZWFkeSBleGlzdHMgaW4gYXJjaGl2ZVxuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gTk9fRVJST1I7Ci0KLWJhaWw6Ci0gICAgZGVsZXRlIHppcDsKLSAgICByZXR1cm4gKHJlc3VsdCAhPSBOT19FUlJPUik7Ci19Ci0KLQotLyoKLSAqIERlbGV0ZSBmaWxlcyBmcm9tIGFuIGV4aXN0aW5nIGFyY2hpdmUuCi0gKi8KLWludCBkb1JlbW92ZShCdW5kbGUqIGJ1bmRsZSkKLXsKLSAgICBaaXBGaWxlKiB6aXAgPSBOVUxMOwotICAgIHN0YXR1c190IHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgY29uc3QgY2hhciogemlwRmlsZU5hbWU7Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRGaWxlU3BlY0NvdW50KCkgPCAxKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG11c3Qgc3BlY2lmeSB6aXAgZmlsZSBuYW1lXG4iKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLSAgICB6aXBGaWxlTmFtZSA9IGJ1bmRsZS0+Z2V0RmlsZVNwZWNFbnRyeSgwKTsKLQotICAgIGlmIChidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKSA8IDIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJOT1RFOiBub3RoaW5nIHRvIGRvXG4iKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIHppcCA9IG9wZW5SZWFkV3JpdGUoemlwRmlsZU5hbWUsIGZhbHNlKTsKLSAgICBpZiAoemlwID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogZmFpbGVkIG9wZW5pbmcgWmlwIGFyY2hpdmUgJyVzJ1xuIiwKLSAgICAgICAgICAgIHppcEZpbGVOYW1lKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYnVuZGxlLT5nZXRGaWxlU3BlY0NvdW50KCk7IGkrKykgewotICAgICAgICBjb25zdCBjaGFyKiBmaWxlTmFtZSA9IGJ1bmRsZS0+Z2V0RmlsZVNwZWNFbnRyeShpKTsKLSAgICAgICAgWmlwRW50cnkqIGVudHJ5OwotCi0gICAgICAgIGVudHJ5ID0gemlwLT5nZXRFbnRyeUJ5TmFtZShmaWxlTmFtZSk7Ci0gICAgICAgIGlmIChlbnRyeSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBwcmludGYoIiAnJXMnIE5PVCBGT1VORFxuIiwgZmlsZU5hbWUpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSB6aXAtPnJlbW92ZShlbnRyeSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZGVsZXRlICclcycgZnJvbSAnJXMnXG4iLAotICAgICAgICAgICAgICAgIGJ1bmRsZS0+Z2V0RmlsZVNwZWNFbnRyeShpKSwgemlwRmlsZU5hbWUpOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogdXBkYXRlIHRoZSBhcmNoaXZlICovCi0gICAgemlwLT5mbHVzaCgpOwotCi1iYWlsOgotICAgIGRlbGV0ZSB6aXA7Ci0gICAgcmV0dXJuIChyZXN1bHQgIT0gTk9fRVJST1IpOwotfQotCi0KLS8qCi0gKiBQYWNrYWdlIHVwIGFuIGFzc2V0IGRpcmVjdG9yeSBhbmQgYXNzb2NpYXRlZCBhcHBsaWNhdGlvbiBmaWxlcy4KLSAqLwotaW50IGRvUGFja2FnZShCdW5kbGUqIGJ1bmRsZSkKLXsKLSAgICBjb25zdCBjaGFyKiBvdXRwdXRBUEtGaWxlOwotICAgIGludCByZXRWYWwgPSAxOwotICAgIHN0YXR1c190IGVycjsKLSAgICBzcDxBYXB0QXNzZXRzPiBhc3NldHM7Ci0gICAgaW50IE47Ci0gICAgRklMRSogZnA7Ci0gICAgU3RyaW5nOCBkZXBlbmRlbmN5RmlsZTsKLQotICAgIC8vIC1jIHp6X1paIG1lYW5zIGRvIHBzZXVkb2xvY2FsaXphdGlvbgotICAgIFJlc291cmNlRmlsdGVyIGZpbHRlcjsKLSAgICBlcnIgPSBmaWx0ZXIucGFyc2UoYnVuZGxlLT5nZXRDb25maWd1cmF0aW9ucygpKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0gICAgaWYgKGZpbHRlci5jb250YWluc1BzZXVkbygpKSB7Ci0gICAgICAgIGJ1bmRsZS0+c2V0UHNldWRvbG9jYWxpemUodHJ1ZSk7Ci0gICAgfQotCi0gICAgTiA9IGJ1bmRsZS0+Z2V0RmlsZVNwZWNDb3VudCgpOwotICAgIGlmIChOIDwgMSAmJiBidW5kbGUtPmdldFJlc291cmNlU291cmNlRGlycygpLnNpemUoKSA9PSAwICYmIGJ1bmRsZS0+Z2V0SmFyRmlsZXMoKS5zaXplKCkgPT0gMAotICAgICAgICAgICAgJiYgYnVuZGxlLT5nZXRBbmRyb2lkTWFuaWZlc3RGaWxlKCkgPT0gTlVMTCAmJiBidW5kbGUtPmdldEFzc2V0U291cmNlRGlyKCkgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBubyBpbnB1dCBmaWxlc1xuIik7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBvdXRwdXRBUEtGaWxlID0gYnVuZGxlLT5nZXRPdXRwdXRBUEtGaWxlKCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIGZpbGVuYW1lcyBwcm92aWRlZCBleGlzdCBhbmQgYXJlIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgotICAgIGlmIChvdXRwdXRBUEtGaWxlKSB7Ci0gICAgICAgIEZpbGVUeXBlIHR5cGU7Ci0gICAgICAgIHR5cGUgPSBnZXRGaWxlVHlwZShvdXRwdXRBUEtGaWxlKTsKLSAgICAgICAgaWYgKHR5cGUgIT0ga0ZpbGVUeXBlTm9uZXhpc3RlbnQgJiYgdHlwZSAhPSBrRmlsZVR5cGVSZWd1bGFyKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAiRVJST1I6IG91dHB1dCBmaWxlICclcycgZXhpc3RzIGJ1dCBpcyBub3QgcmVndWxhciBmaWxlXG4iLAotICAgICAgICAgICAgICAgIG91dHB1dEFQS0ZpbGUpOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTG9hZCB0aGUgYXNzZXRzLgotICAgIGFzc2V0cyA9IG5ldyBBYXB0QXNzZXRzKCk7Ci0KLSAgICAvLyBTZXQgdXAgdGhlIHJlc291cmNlIGdhdGhlcmluZyBpbiBhc3NldHMgaWYgd2UncmUgZ29pbmcgdG8gZ2VuZXJhdGUKLSAgICAvLyBkZXBlbmRlbmN5IGZpbGVzLiBFdmVyeSB0aW1lIHdlIGVuY291bnRlciBhIHJlc291cmNlIHdoaWxlIHNsdXJwaW5nCi0gICAgLy8gdGhlIHRyZWUsIHdlJ2xsIGFkZCBpdCB0byB0aGVzZSBzdG9yZXMgc28gd2UgaGF2ZSBmdWxsIHJlc291cmNlIHBhdGhzCi0gICAgLy8gdG8gd3JpdGUgdG8gYSBkZXBlbmRlbmN5IGZpbGUuCi0gICAgaWYgKGJ1bmRsZS0+Z2V0R2VuRGVwZW5kZW5jaWVzKCkpIHsKLSAgICAgICAgc3A8RmlsZVBhdGhTdG9yZT4gcmVzUGF0aFN0b3JlID0gbmV3IEZpbGVQYXRoU3RvcmU7Ci0gICAgICAgIGFzc2V0cy0+c2V0RnVsbFJlc1BhdGhzKHJlc1BhdGhTdG9yZSk7Ci0gICAgICAgIHNwPEZpbGVQYXRoU3RvcmU+IGFzc2V0UGF0aFN0b3JlID0gbmV3IEZpbGVQYXRoU3RvcmU7Ci0gICAgICAgIGFzc2V0cy0+c2V0RnVsbEFzc2V0UGF0aHMoYXNzZXRQYXRoU3RvcmUpOwotICAgIH0KLQotICAgIGVyciA9IGFzc2V0cy0+c2x1cnBGcm9tQXJncyhidW5kbGUpOwotICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgYXNzZXRzLT5wcmludChTdHJpbmc4KCkpOwotICAgIH0KLQotICAgIC8vIElmIHRoZXkgYXNrZWQgZm9yIGFueSBmaWxlQXMgdGhhdCBuZWVkIHRvIGJlIGNvbXBpbGVkLCBkbyBzby4KLSAgICBpZiAoYnVuZGxlLT5nZXRSZXNvdXJjZVNvdXJjZURpcnMoKS5zaXplKCkgfHwgYnVuZGxlLT5nZXRBbmRyb2lkTWFuaWZlc3RGaWxlKCkpIHsKLSAgICAgICAgZXJyID0gYnVpbGRSZXNvdXJjZXMoYnVuZGxlLCBhc3NldHMpOwotICAgICAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UndmUgcmVhZCBldmVyeXRoaW5nIGFuZCBwcm9jZXNzZWQgZXZlcnl0aGluZy4gIEZyb20gaGVyZQotICAgIC8vIG9uIG91dCBpdCdzIGp1c3Qgd3JpdGluZyBvdXRwdXQgZmlsZXMuCi0gICAgaWYgKFNvdXJjZVBvczo6aGFzRXJyb3JzKCkpIHsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBzeW1ib2xzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggb25lcyBhcmUgbmVlZGVkIGFzIEphdmEgc3ltYm9scy4KLSAgICBhc3NldHMtPmFwcGx5SmF2YVN5bWJvbHMoKTsKLSAgICBpZiAoU291cmNlUG9zOjpoYXNFcnJvcnMoKSkgewotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UndmUgYmVlbiBhc2tlZCB0byBnZW5lcmF0ZSBhIGRlcGVuZGVuY3kgZmlsZSwgZG8gdGhhdCBoZXJlCi0gICAgaWYgKGJ1bmRsZS0+Z2V0R2VuRGVwZW5kZW5jaWVzKCkpIHsKLSAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgcGFja2FnaW5nIHN0ZXAsIGdlbmVyYXRlIHRoZSBkZXBlbmRlbmN5IGZpbGUgbmV4dCB0bwotICAgICAgICAvLyB0aGUgb3V0cHV0IGFwayAoZS5nLiBiaW4vcmVzb3VyY2VzLmFwXy5kKQotICAgICAgICBpZiAob3V0cHV0QVBLRmlsZSkgewotICAgICAgICAgICAgZGVwZW5kZW5jeUZpbGUgPSBTdHJpbmc4KG91dHB1dEFQS0ZpbGUpOwotICAgICAgICAgICAgLy8gQWRkIHRoZSAuZCBleHRlbnNpb24gdG8gdGhlIGRlcGVuZGVuY3kgZmlsZS4KLSAgICAgICAgICAgIGRlcGVuZGVuY3lGaWxlLmFwcGVuZCgiLmQiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEVsc2UgaWYgdGhpcyBpcyB0aGUgUi5qYXZhIGRlcGVuZGVuY3kgZ2VuZXJhdGlvbiBzdGVwLAotICAgICAgICAgICAgLy8gZ2VuZXJhdGUgdGhlIGRlcGVuZGVuY3kgZmlsZSBpbiB0aGUgUi5qYXZhIHBhY2thZ2Ugc3ViZGlyZWN0b3J5Ci0gICAgICAgICAgICAvLyBlLmcuIGdlbi9jb20vZm9vL2FwcC9SLmphdmEuZAotICAgICAgICAgICAgZGVwZW5kZW5jeUZpbGUgPSBTdHJpbmc4KGJ1bmRsZS0+Z2V0UkNsYXNzRGlyKCkpOwotICAgICAgICAgICAgZGVwZW5kZW5jeUZpbGUuYXBwZW5kUGF0aCgiUi5qYXZhLmQiKTsKLSAgICAgICAgfQotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGNsZWFuIGRlcGVuZGVuY3kgZmlsZSB0byBzdGFydCB3aXRoCi0gICAgICAgIGZwID0gZm9wZW4oZGVwZW5kZW5jeUZpbGUsICJ3Iik7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgb3V0IFIuamF2YSBjb25zdGFudHMKLSAgICBpZiAoIWFzc2V0cy0+aGF2ZVByaXZhdGVTeW1ib2xzKCkpIHsKLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0Q3VzdG9tUGFja2FnZSgpID09IE5VTEwpIHsKLSAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBSLmphdmEgZmlsZSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBjbGFzcyBkaXJlY3RvcnkKLSAgICAgICAgICAgIC8vIGUuZy4gZ2VuL2NvbS9mb28vYXBwL1IuamF2YQotICAgICAgICAgICAgZXJyID0gd3JpdGVSZXNvdXJjZVN5bWJvbHMoYnVuZGxlLCBhc3NldHMsIGFzc2V0cy0+Z2V0UGFja2FnZSgpLCB0cnVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzggY3VzdG9tUGtnKGJ1bmRsZS0+Z2V0Q3VzdG9tUGFja2FnZSgpKTsKLSAgICAgICAgICAgIGVyciA9IHdyaXRlUmVzb3VyY2VTeW1ib2xzKGJ1bmRsZSwgYXNzZXRzLCBjdXN0b21Qa2csIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBsaWJyYXJ5IGZpbGVzLCB3ZSdyZSBnb2luZyB0byB3cml0ZSBvdXIgUi5qYXZhIGZpbGUgaW50bwotICAgICAgICAvLyB0aGUgYXBwcm9wcmlhdGUgY2xhc3MgZGlyZWN0b3J5IGZvciB0aG9zZSBsaWJyYXJpZXMgYXMgd2VsbC4KLSAgICAgICAgLy8gZS5nLiBnZW4vY29tL2Zvby9hcHAvbGliL1IuamF2YQotICAgICAgICBpZiAoYnVuZGxlLT5nZXRFeHRyYVBhY2thZ2VzKCkgIT0gTlVMTCkgewotICAgICAgICAgICAgLy8gU3BsaXQgb24gY29sb24KLSAgICAgICAgICAgIFN0cmluZzggbGlicyhidW5kbGUtPmdldEV4dHJhUGFja2FnZXMoKSk7Ci0gICAgICAgICAgICBjaGFyKiBwYWNrYWdlU3RyaW5nID0gc3RydG9rKGxpYnMubG9ja0J1ZmZlcihsaWJzLmxlbmd0aCgpKSwgIjoiKTsKLSAgICAgICAgICAgIHdoaWxlIChwYWNrYWdlU3RyaW5nICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAvLyBXcml0ZSB0aGUgUi5qYXZhIGZpbGUgb3V0IHdpdGggdGhlIGNvcnJlY3QgcGFja2FnZSBuYW1lCi0gICAgICAgICAgICAgICAgZXJyID0gd3JpdGVSZXNvdXJjZVN5bWJvbHMoYnVuZGxlLCBhc3NldHMsIFN0cmluZzgocGFja2FnZVN0cmluZyksIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGFja2FnZVN0cmluZyA9IHN0cnRvayhOVUxMLCAiOiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGlicy51bmxvY2tCdWZmZXIoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVyciA9IHdyaXRlUmVzb3VyY2VTeW1ib2xzKGJ1bmRsZSwgYXNzZXRzLCBhc3NldHMtPmdldFBhY2thZ2UoKSwgZmFsc2UpOwotICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IHdyaXRlUmVzb3VyY2VTeW1ib2xzKGJ1bmRsZSwgYXNzZXRzLCBhc3NldHMtPmdldFN5bWJvbHNQcml2YXRlUGFja2FnZSgpLCB0cnVlKTsKLSAgICAgICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFdyaXRlIG91dCB0aGUgUHJvR3VhcmQgZmlsZQotICAgIGVyciA9IHdyaXRlUHJvZ3VhcmRGaWxlKGJ1bmRsZSwgYXNzZXRzKTsKLSAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgdGhlIGFwawotICAgIGlmIChvdXRwdXRBUEtGaWxlKSB7Ci0gICAgICAgIGVyciA9IHdyaXRlQVBLKGJ1bmRsZSwgYXNzZXRzLCBTdHJpbmc4KG91dHB1dEFQS0ZpbGUpKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogcGFja2FnaW5nIG9mICclcycgZmFpbGVkXG4iLCBvdXRwdXRBUEtGaWxlKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHdlJ3ZlIGJlZW4gYXNrZWQgdG8gZ2VuZXJhdGUgYSBkZXBlbmRlbmN5IGZpbGUsIHdlIG5lZWQgdG8gZmluaXNoIHVwIGhlcmUuCi0gICAgLy8gdGhlIHdyaXRlUmVzb3VyY2VTeW1ib2xzIGFuZCB3cml0ZUFQSyBmdW5jdGlvbnMgaGF2ZSBhbHJlYWR5IHdyaXR0ZW4gdGhlIHRhcmdldAotICAgIC8vIGhhbGYgb2YgdGhlIGRlcGVuZGVuY3kgZmlsZSwgbm93IHdlIG5lZWQgdG8gd3JpdGUgdGhlIHByZXJlcXVpc2l0ZXMuIChmaWxlcyB0aGF0Ci0gICAgLy8gdGhlIFIuamF2YSBmaWxlIG9yIC5hcF8gZmlsZSBkZXBlbmQgb24pCi0gICAgaWYgKGJ1bmRsZS0+Z2V0R2VuRGVwZW5kZW5jaWVzKCkpIHsKLSAgICAgICAgLy8gTm93IHRoYXQgd3JpdGVSZXNvdXJjZVN5bWJvbHMgb3Igd3JpdGVBUEsgaGFzIHRha2VuIGNhcmUgb2Ygd3JpdGluZwotICAgICAgICAvLyB0aGUgdGFyZ2V0cyB0byBvdXIgZGVwZW5kZW5jeSBmaWxlLCB3ZSdsbCB3cml0ZSB0aGUgcHJlcmVxcwotICAgICAgICBmcCA9IGZvcGVuKGRlcGVuZGVuY3lGaWxlLCAiYSsiKTsKLSAgICAgICAgZnByaW50ZihmcCwgIiA6ICIpOwotICAgICAgICBib29sIGluY2x1ZGVSYXcgPSAob3V0cHV0QVBLRmlsZSAhPSBOVUxMKTsKLSAgICAgICAgZXJyID0gd3JpdGVEZXBlbmRlbmN5UHJlUmVxcyhidW5kbGUsIGFzc2V0cywgZnAsIGluY2x1ZGVSYXcpOwotICAgICAgICAvLyBBbHNvIG1hbnVhbGx5IGFkZCB0aGUgQW5kcm9pZE1hbmlmZXNldCBzaW5jZSBpdCdzIG5vdCB1bmRlciByZXMvIG9yIGFzc2V0cy8KLSAgICAgICAgLy8gYW5kIHRoZXJlZm9yZSB3YXMgbm90IGFkZGVkIHRvIG91ciBwYXRoc3RvcmVzIGR1cmluZyBzbHVycGluZwotICAgICAgICBmcHJpbnRmKGZwLCAiJXMgXFxcbiIsIGJ1bmRsZS0+Z2V0QW5kcm9pZE1hbmlmZXN0RmlsZSgpKTsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICB9Ci0KLSAgICByZXRWYWwgPSAwOwotYmFpbDoKLSAgICBpZiAoU291cmNlUG9zOjpoYXNFcnJvcnMoKSkgewotICAgICAgICBTb3VyY2VQb3M6OnByaW50RXJyb3JzKHN0ZGVycik7Ci0gICAgfQotICAgIHJldHVybiByZXRWYWw7Ci19Ci0KLS8qCi0gKiBEbyBQTkcgQ3J1bmNoaW5nCi0gKiBQUkVDT05ESVRJT05TCi0gKiAgLVMgZmxhZyBwb2ludHMgdG8gYSBzb3VyY2UgZGlyZWN0b3J5IGNvbnRhaW5pbmcgZHJhd2FibGUqIGZvbGRlcnMKLSAqICAtQyBmbGFnIHBvaW50cyB0byBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuIFRoZSBmb2xkZXIgc3RydWN0dXJlIGluIHRoZQotICogICAgIHNvdXJjZSBkaXJlY3Rvcnkgd2lsbCBiZSBtaXJyb3JlZCB0byB0aGUgZGVzdGluYXRpb24gKGNhY2hlKSBkaXJlY3RvcnkKLSAqCi0gKiBQT1NUQ09ORElUSU9OUwotICogIERlc3RpbmF0aW9uIGRpcmVjdG9yeSB3aWxsIGJlIHVwZGF0ZWQgdG8gbWF0Y2ggdGhlIFBORyBmaWxlcyBpbgotICogIHRoZSBzb3VyY2UgZGlyZWN0b3J5LiAKLSAqLwotaW50IGRvQ3J1bmNoKEJ1bmRsZSogYnVuZGxlKQotewotICAgIGZwcmludGYoc3Rkb3V0LCAiQ3J1bmNoaW5nIFBORyBGaWxlcyBpbiAiKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgInNvdXJjZSBkaXI6ICVzXG4iLCBidW5kbGUtPmdldFJlc291cmNlU291cmNlRGlycygpWzBdKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIlRvIGRlc3RpbmF0aW9uIGRpcjogJXNcbiIsIGJ1bmRsZS0+Z2V0Q3J1bmNoZWRPdXRwdXREaXIoKSk7Ci0KLSAgICB1cGRhdGVQcmVQcm9jZXNzZWRDYWNoZShidW5kbGUpOwotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogRG8gUE5HIENydW5jaGluZyBvbiBhIHNpbmdsZSBmbGFnCi0gKiAgLWkgcG9pbnRzIHRvIGEgc2luZ2xlIHBuZyBmaWxlCi0gKiAgLW8gcG9pbnRzIHRvIGEgc2luZ2xlIHBuZyBvdXRwdXQgZmlsZQotICovCi1pbnQgZG9TaW5nbGVDcnVuY2goQnVuZGxlKiBidW5kbGUpCi17Ci0gICAgZnByaW50ZihzdGRvdXQsICJDcnVuY2hpbmcgc2luZ2xlIFBORyBmaWxlOiAlc1xuIiwgYnVuZGxlLT5nZXRTaW5nbGVDcnVuY2hJbnB1dEZpbGUoKSk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJcdE91dHB1dCBmaWxlOiAlc1xuIiwgYnVuZGxlLT5nZXRTaW5nbGVDcnVuY2hPdXRwdXRGaWxlKCkpOwotCi0gICAgU3RyaW5nOCBpbnB1dChidW5kbGUtPmdldFNpbmdsZUNydW5jaElucHV0RmlsZSgpKTsKLSAgICBTdHJpbmc4IG91dHB1dChidW5kbGUtPmdldFNpbmdsZUNydW5jaE91dHB1dEZpbGUoKSk7Ci0KLSAgICBpZiAocHJlUHJvY2Vzc0ltYWdlVG9DYWNoZShidW5kbGUsIGlucHV0LCBvdXRwdXQpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIC8vIHdlIGNhbid0IHJldHVybiB0aGUgc3RhdHVzX3QgYXMgaXQgZ2V0cyB0cnVuY2F0ZSB0byB0aGUgbG93ZXIgOCBiaXRzLgotICAgICAgICByZXR1cm4gNDI7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1jaGFyIENPTlNPTEVfREFUQVsyOTI1XSA9IHsKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA5NSwgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA2MSwgNjMsCi0gICAgODYsIDM1LCA0MCwgNDYsIDQ2LCA5NSwgOTUsIDk1LCA5NSwgOTcsIDk3LCA0NCwgMzIsIDQ2LCAxMjQsIDQyLCAzMywgODMsCi0gICAgNjIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA1OCwgNDYsIDU4LCA1OSwgNjEsIDU5LCA2MSwgODEsCi0gICAgODEsIDgxLCA4MSwgNjYsIDk2LCA2MSwgNjEsIDU4LCA0NiwgNDYsIDQ2LCA1OCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgNDYsIDYxLCA1OSwgNTksIDU5LCA1OCwgMTA2LCA4MSwgODEsIDgxLCA4MSwgMTAyLCA1OSwgNjEsIDU5LAotICAgIDU5LCA2MSwgNjEsIDYxLCA1OCwgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA2MSwgNTksIDU5LAotICAgIDU5LCA1OCwgMTA5LCA4MSwgODEsIDgxLCA4MSwgNjEsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsIDU5LCA1OSwgNDYsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDYsIDYxLCA1OSwgNTksIDU5LCA2MCwgODEsIDgxLCA4MSwgODEsIDg3LAotICAgIDU4LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA2MSwgMTE5LCA0NCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA0NiwKLSAgICA0NywgNjEsIDU5LCA1OSwgNTgsIDEwMCwgODEsIDgxLCA4MSwgODEsIDM1LCA1OCwgNTksIDU5LCA1OSwgNTksIDU5LCA1OCwKLSAgICAxMjEsIDgxLCA5MSwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA0NiwgMTA5LCA1OCwgNTksIDU5LCA2MSwgODEsIDgxLAotICAgIDgxLCA4MSwgODEsIDEwOSwgNTgsIDU5LCA1OSwgNTksIDU5LCA2MSwgMTA5LCA4MSwgODEsIDc2LCA0NiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgNDEsIDg3LCA1OSwgNjEsIDU5LCA0MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgNTksIDYxLCA1OSwKLSAgICA1OSwgNTgsIDEwOSwgODEsIDgxLCA4NywgMzksIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNjAsIDgxLCA5MSwgNTksCi0gICAgNTksIDYxLCA4MSwgODEsIDgxLCA4MSwgODEsIDg3LCA0MywgNTksIDU4LCA1OSwgNjAsIDgxLCA4MSwgODEsIDc2LCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA1MiwgOTEsIDU4LCA0NSwgNTksIDg3LCA4MSwgODEsIDgxLCA4MSwKLSAgICA3MCwgNTgsIDU4LCA1OCwgNTksIDEwNiwgODEsIDgxLCA4MSwgOTEsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDkzLCA0MCwgMzIsIDQ2LCA1OSwgMTAwLCA4MSwgODEsIDgxLCA4MSwgNDAsIDU4LCA0NiwgNDYsIDU4LCAxMDAsIDgxLAotICAgIDgxLCA2OCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgNDYsIDQ2LCA0NiwgMzIsIDQ2LCA0NiwgNDYsIDMyLCA0NiwgMzIsIDQ2LCA0NSwgOTEsIDU5LCA2MSwgNTgsIDEwOSwKLSAgICA4MSwgODEsIDgxLCA4NywgNDYsIDU4LCA2MSwgNTksIDYwLCA4MSwgODEsIDgwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDQ2LCA0NiwgNjEsIDU5LCA2MSwgNjEsIDYxLCA1OSwgNjEsIDYxLCA1OSwKLSAgICA1OSwgNTksIDU4LCA1OCwgNDYsIDQ2LCA0MSwgNTgsIDU5LCA1OCwgODEsIDgxLCA4MSwgODEsIDY5LCA1OCwgNTksIDU5LAotICAgIDYwLCA4MSwgODEsIDY4LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDU4LCA1OSwKLSAgICA2MSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA2MSwgNjEsIDQ2LAotICAgIDYxLCA1OSwgOTMsIDgxLCA4MSwgODEsIDgxLCAxMDcsIDU4LCA1OSwgNTgsIDEwOSwgODcsIDY4LCA5NiwgMzIsIDMyLCAzMiwKLSAgICA0NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDQ2LCA2MCwgNjEsIDYxLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsIDU4LCA1OCwgMTE1LCAxMDksIDY4LCA0MSwgMzYsIDgxLAotICAgIDEwOSwgNDYsIDYxLCA2MSwgODEsIDY5LCA5NiwgNDYsIDU4LCA1OCwgNDYsIDU4LCA0NiwgNDYsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgNDYsIDMyLCA5NSwgODEsCi0gICAgNjcsIDYxLCA2MSwgNTgsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwKLSAgICA1OSwgNTksIDU5LCA1OSwgNTgsIDY4LCAzOSwgNjEsIDEwNSwgNjEsIDYzLCA4MSwgMTE5LCA1OCwgMTA2LCA4MCwgMzIsIDU4LAotICAgIDYxLCA1OSwgNTksIDYxLCA1OSwgNjEsIDU5LCA2MSwgNDYsIDk1LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzYsIDgxLCAxMDksIDEwNSwgNTksIDYxLCA1OSwgNTksIDU5LAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDQ2LCA1OCwgMzcsCi0gICAgNzMsIDEwOCwgMTA4LCA2MiwgNTIsIDgxLCAxMDksIDM0LCAzMiwgNjEsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwKLSAgICA1OSwgNjEsIDU5LCA2MSwgNjEsIDQ2LCA0NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLAotICAgIDMyLCA0NiwgNDUsIDU3LCAxMDEsIDQzLCA0MywgNjEsIDYxLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA2MSwgNTksIDU5LAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OCwgOTcsIDQ2LCA2MSwgMTA4LCA2MiwgMTI2LCA1OCwgMTA2LCA4MCwgOTYsCi0gICAgNDYsIDYxLCA2MSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDYxLCA2MSwKLSAgICA5NywgMTAzLCA5NywgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgNDUsIDQ2LCAzMiwKLSAgICA0NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA0NSwgNDUsIDQ1LCA1OCwgNTksIDU5LCA1OSwgNTksIDYxLAotICAgIDExOSwgODEsIDk3LCAxMjQsIDEwNSwgMTI0LCAxMjQsIDM5LCAxMjYsIDk1LCAxMTksIDU4LCA2MSwgNTgsIDU5LCA1OSwgNTksCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA2MSwgMTE5LCA4MSwgODEsIDk5LCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNTgsIDU5LCA1OSwgNTgsIDEwNiwgODEsIDgxLCA4MSwgMTA5LCAxMTksCi0gICAgMTE5LCAxMTksIDEwOSwgMTA5LCA4MSwgODEsIDEyMiwgNTgsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OCwgMTE1LCA4MSwgODcsIDgxLCAxMDIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCA2MSwgNTgsIDU5LCA2MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODcsIDg3LCA4MSwgODEsIDgxLCA4MSwKLSAgICA4MSwgNTgsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsIDQ1LCA0NSwgNDUsIDU5LCA1OSwgNTksIDQxLAotICAgIDg3LCA2NiwgMzMsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDU4LCA1OSwgNTksIDkzLCA4MSwKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA0MCwgNTgsIDU5LCA1OSwgNTksIDU4LAotICAgIDQ1LCAzMiwgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDYsIDMyLCAxMjYsIDk2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNTgsIDYxLCA1OSwgNTgsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDQwLCA1OCwgNTksIDU5LCA1OSwgNTgsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA1OCwKLSAgICA1OSwgNTksIDU4LCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgNDAsIDU4LAotICAgIDU5LCA1OSwgNTksIDQ2LCA0NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNTgsIDYxLCA1OSwgNjAsIDgxLCA4MSwgODEsIDgxLAotICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDU5LCA2MSwgNTksIDU5LCA2MSwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDU4LCA1OSwgNTksIDkzLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsCi0gICAgODEsIDgxLCA0MCwgNTksIDU5LCA1OSwgNTksIDMyLCA0NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNTgsIDYxLCA1OCwgMTA2LAotICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA3NiwgNTgsIDU5LCA1OSwgNTksCi0gICAgMzIsIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA2MSwgNTgsIDU4LCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA4NywgNTgsIDU5LCA1OSwgNTksIDU5LCAzMiwgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgNTgsIDU5LCA2MSwgNDEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDg3LCA1OSwKLSAgICA2MSwgNTgsIDU5LCA1OSwgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA1OCwgNjEsIDU4LCA2MSwgODEsIDgxLCA4MSwKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAxMDcsIDU4LCA1OSwgNTksIDU5LCA1OSwgNTgsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDU4LCA1OSwgNTksIDU4LCA1MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwKLSAgICA4MSwgMTAyLCA5NCwgNTksIDU5LCA1OSwgNTksIDU5LCA2MSwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDU4LCA2MSwgNTksCi0gICAgNTksIDU5LCA0MywgNjMsIDM2LCA4MSwgODEsIDgxLCA4NywgNjQsIDg2LCAxMDIsIDU4LCA1OSwgNTksIDU5LCA1OSwgNTksCi0gICAgNTksIDU5LCA0NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA0NiwgNjEsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA0MywgMzMsCi0gICAgNTgsIDEyNiwgMTI2LCA1OCwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDMyLCA0NiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA0NiwKLSAgICA2MSwgNTksIDU5LCA1OSwgNTgsIDQ1LCA1OCwgNjEsIDU5LCA1OCwgNTgsIDU4LCA2MSwgNTksIDU5LCA1OSwgNTksIDU5LAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OCwgMzIsIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA0NiwgNjEsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsIDk1LAotICAgIDMyLCA0NSwgNjEsIDU5LCA2MSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDQ1LCA1OCwgNTksIDU5LCA1OSwgNTksCi0gICAgNjEsIDU4LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgNTgsIDYxLCA1OSwgNTksIDU5LCA1OSwgNTksIDYxLCA1OSwgNjEsIDQ2LCA0NiwgMzIsIDQ1LCA0NSwgNDUsCi0gICAgNTksIDU4LCA0NSwgNDUsIDQ2LCA1OCwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNjEsIDQ2LCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDQ2LCA1OCwgNTksIDU5LCA1OSwgNTksCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA2MSwgNTksIDQ2LCAzMiwgMzIsIDQ2LCAzMiwgNDYsIDMyLCA1OCwgNjEsIDU5LCA1OSwKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDQ1LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU4LCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDYxLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICA0NiwgNjEsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAzMiwgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDYxLAotICAgIDQ2LCA2MSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDYxLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LAotICAgIDU5LCA1OSwgMzIsIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDYsIDYxLCA1OCwgNTksIDU5LCA1OSwgNTksCi0gICAgNTksIDU4LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCA1OCwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA0NiwgNDYsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDYxLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNDUsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDYsIDMyLCA0NSwgNjEsCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OCwgMzIsIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNTgsIDU5LCA1OSwKLSAgICA1OSwgNTksIDU5LCA1OCwgNDUsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA0NSwgNDUsIDQ1LCA0NSwgMzIsIDQ2LCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA0NSwgNjEsIDU5LCA1OCwgNDUsIDQ1LCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgNDYsIDMyLCAzMiwgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMAotICB9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9DcnVuY2hDYWNoZS5jcHAgYi90b29scy9hYXB0L0NydW5jaENhY2hlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRjZjZiYy4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L0NydW5jaENhY2hlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEltcGxlbWVudGF0aW9uIGZpbGUgZm9yIENydW5jaENhY2hlCi0vLyBUaGlzIGZpbGUgZGVmaW5lcyBmdW5jdGlvbnMgbGFpZCBvdXQgYW5kIGRvY3VtZW50ZWQgaW4KLS8vIENydW5jaENhY2hlLmgKLQotI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLQotI2luY2x1ZGUgIkRpcmVjdG9yeVdhbGtlci5oIgotI2luY2x1ZGUgIkZpbGVGaW5kZXIuaCIKLSNpbmNsdWRlICJDYWNoZVVwZGF0ZXIuaCIKLSNpbmNsdWRlICJDcnVuY2hDYWNoZS5oIgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotQ3J1bmNoQ2FjaGU6OkNydW5jaENhY2hlKFN0cmluZzggc291cmNlUGF0aCwgU3RyaW5nOCBkZXN0UGF0aCwgRmlsZUZpbmRlciogZmYpCi0gICAgOiBtU291cmNlUGF0aChzb3VyY2VQYXRoKSwgbURlc3RQYXRoKGRlc3RQYXRoKSwgbVNvdXJjZUZpbGVzKDApLCBtRGVzdEZpbGVzKDApLCBtRmlsZUZpbmRlcihmZikKLXsKLSAgICAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHZhbHVlIHRvIHJldHVybiB0byAwIHNvIGlmIGEgZmlsZSBkb2Vzbid0IGV4aXN0Ci0gICAgLy8gdGhlbiBhbGwgZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgIm5ld2VyIiB0aGFuIGl0LgotCi0gICAgLy8gU2V0IGZpbGUgZXh0ZW5zaW9ucyB0byBsb29rIGZvci4gUmlnaHQgbm93IGp1c3QgcG5ncy4KLSAgICBtRXh0ZW5zaW9ucy5wdXNoKFN0cmluZzgoIi5wbmciKSk7Ci0KLSAgICAvLyBMb2FkIGZpbGVzIGludG8gb3VyIGRhdGEgbWVtYmVycwotICAgIGxvYWRGaWxlcygpOwotfQotCi1zaXplX3QgQ3J1bmNoQ2FjaGU6OmNydW5jaChDYWNoZVVwZGF0ZXIqIGN1LCBib29sIGZvcmNlT3ZlcndyaXRlKQotewotICAgIHNpemVfdCBudW1GaWxlc1VwZGF0ZWQgPSAwOwotCi0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzb3VyY2UgZmlsZXMgYW5kIGNvbXBhcmUgdG8gY2FjaGUuCi0gICAgLy8gQWZ0ZXIgcHJvY2Vzc2luZyBhIGZpbGUsIHJlbW92ZSBpdCBmcm9tIHRoZSBzb3VyY2UgZmlsZXMgYW5kCi0gICAgLy8gZnJvbSB0aGUgZGVzdCBmaWxlcy4KLSAgICAvLyBXZSdyZSBkb25lIHdoZW4gd2UncmUgb3V0IG9mIGZpbGVzIGluIHNvdXJjZS4KLSAgICBTdHJpbmc4IHJlbGF0aXZlUGF0aDsKLSAgICB3aGlsZSAobVNvdXJjZUZpbGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgLy8gR2V0IHRoZSBmdWxsIHBhdGggdG8gdGhlIHNvdXJjZSBmaWxlLCB0aGVuIGNvbnZlcnQgdG8gYSBjLXN0cmluZwotICAgICAgICAvLyBhbmQgb2Zmc2V0IG91ciBiZWdpbm5pbmcgcG9pbnRlciB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2VQYXRoCi0gICAgICAgIC8vIFRoaXMgZWZmaWNpZW50bHkgc3RyaXBzIHRoZSBzb3VyY2UgZGlyZWN0b3J5IHByZWZpeCBmcm9tIG91ciBwYXRoLgotICAgICAgICAvLyBBbHNvLCBTdHJpbmc4IGRvZXNuJ3QgaGF2ZSBhIHN1YnN0cmluZyBtZXRob2Qgc28gdGhpcyBpcyB3aGF0IHdlJ3ZlCi0gICAgICAgIC8vIGdvdCB0byB3b3JrIHdpdGguCi0gICAgICAgIGNvbnN0IGNoYXIqIHJQYXRoUHRyID0gbVNvdXJjZUZpbGVzLmtleUF0KDApLnN0cmluZygpK21Tb3VyY2VQYXRoLmxlbmd0aCgpOwotICAgICAgICAvLyBTdHJpcCBsZWFkaW5nIHNsYXNoIGlmIHByZXNlbnQKLSAgICAgICAgaW50IG9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChyUGF0aFB0clswXSA9PSBPU19QQVRIX1NFUEFSQVRPUikKLSAgICAgICAgICAgIG9mZnNldCA9IDE7Ci0gICAgICAgIHJlbGF0aXZlUGF0aCA9IFN0cmluZzgoclBhdGhQdHIgKyBvZmZzZXQpOwotCi0gICAgICAgIGlmIChmb3JjZU92ZXJ3cml0ZSB8fCBuZWVkc1VwZGF0aW5nKHJlbGF0aXZlUGF0aCkpIHsKLSAgICAgICAgICAgIGN1LT5wcm9jZXNzSW1hZ2UobVNvdXJjZVBhdGguYXBwZW5kUGF0aENvcHkocmVsYXRpdmVQYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURlc3RQYXRoLmFwcGVuZFBhdGhDb3B5KHJlbGF0aXZlUGF0aCkpOwotICAgICAgICAgICAgbnVtRmlsZXNVcGRhdGVkKys7Ci0gICAgICAgICAgICAvLyBjcnVuY2hGaWxlKHJlbGF0aXZlUGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRGVsZXRlIHRoaXMgZmlsZSBmcm9tIHRoZSBzb3VyY2UgZmlsZXMgYW5kIChpZiBpdCBleGlzdHMpIGZyb20gdGhlCi0gICAgICAgIC8vIGRlc3QgZmlsZXMuCi0gICAgICAgIG1Tb3VyY2VGaWxlcy5yZW1vdmVJdGVtc0F0KDApOwotICAgICAgICBtRGVzdEZpbGVzLnJlbW92ZUl0ZW0obURlc3RQYXRoLmFwcGVuZFBhdGhDb3B5KHJlbGF0aXZlUGF0aCkpOwotICAgIH0KLQotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB3aGF0J3MgbGVmdCBvZiBkZXN0RmlsZXMgYW5kIGRlbGV0ZSBsZWZ0b3ZlcnMKLSAgICB3aGlsZSAobURlc3RGaWxlcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGN1LT5kZWxldGVGaWxlKG1EZXN0RmlsZXMua2V5QXQoMCkpOwotICAgICAgICBtRGVzdEZpbGVzLnJlbW92ZUl0ZW1zQXQoMCk7Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIG91ciBrbm93bGVkZ2Ugb2YgdGhlIGZpbGVzIGNhY2hlCi0gICAgLy8gYm90aCBzb3VyY2UgYW5kIGRlc3Qgc2hvdWxkIGJlIGVtcHR5IGJ5IG5vdy4KLSAgICBsb2FkRmlsZXMoKTsKLQotICAgIHJldHVybiBudW1GaWxlc1VwZGF0ZWQ7Ci19Ci0KLXZvaWQgQ3J1bmNoQ2FjaGU6OmxvYWRGaWxlcygpCi17Ci0gICAgLy8gQ2xlYXIgb3V0IG91ciBkYXRhIHN0cnVjdHVyZXMgdG8gYXZvaWQgcHV0dGluZyBpbiBkdXBsaWNhdGVzCi0gICAgbVNvdXJjZUZpbGVzLmNsZWFyKCk7Ci0gICAgbURlc3RGaWxlcy5jbGVhcigpOwotCi0gICAgLy8gTWFrZSBhIGRpcmVjdG9yeSB3YWxrZXIgdGhhdCBwb2ludHMgdG8gdGhlIHN5c3RlbS4KLSAgICBEaXJlY3RvcnlXYWxrZXIqIGR3ID0gbmV3IFN5c3RlbURpcmVjdG9yeVdhbGtlcigpOwotCi0gICAgLy8gTG9hZCBmaWxlcyBpbiB0aGUgc291cmNlIGRpcmVjdG9yeQotICAgIG1GaWxlRmluZGVyLT5maW5kRmlsZXMobVNvdXJjZVBhdGgsIG1FeHRlbnNpb25zLCBtU291cmNlRmlsZXMsZHcpOwotCi0gICAgLy8gTG9hZCBmaWxlcyBpbiB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5Ci0gICAgbUZpbGVGaW5kZXItPmZpbmRGaWxlcyhtRGVzdFBhdGgsbUV4dGVuc2lvbnMsbURlc3RGaWxlcyxkdyk7Ci0KLSAgICBkZWxldGUgZHc7Ci19Ci0KLWJvb2wgQ3J1bmNoQ2FjaGU6Om5lZWRzVXBkYXRpbmcoU3RyaW5nOCByZWxhdGl2ZVBhdGgpIGNvbnN0Ci17Ci0gICAgLy8gUmV0cmlldmUgbW9kaWZpY2F0aW9uIGRhdGVzIGZvciB0aGlzIGZpbGUgZW50cnkgdW5kZXIgdGhlIHNvdXJjZSBhbmQKLSAgICAvLyBjYWNoZSBkaXJlY3RvcnkgdHJlZXMuIFRoZSB2ZWN0b3JzIHdpbGwgcmV0dXJuIGEgbW9kaWZpY2F0aW9uIGRhdGUgb2YgMAotICAgIC8vIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QuCi0gICAgdGltZV90IHNvdXJjZURhdGUgPSBtU291cmNlRmlsZXMudmFsdWVGb3IobVNvdXJjZVBhdGguYXBwZW5kUGF0aENvcHkocmVsYXRpdmVQYXRoKSk7Ci0gICAgdGltZV90IGRlc3REYXRlID0gbURlc3RGaWxlcy52YWx1ZUZvcihtRGVzdFBhdGguYXBwZW5kUGF0aENvcHkocmVsYXRpdmVQYXRoKSk7Ci0gICAgcmV0dXJuIHNvdXJjZURhdGUgPiBkZXN0RGF0ZTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9hYXB0L0NydW5jaENhY2hlLmggYi90b29scy9hYXB0L0NydW5jaENhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlM2RhNWMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9DcnVuY2hDYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQ2FjaGUgbWFuYWdlciBmb3IgcHJlLXByb2Nlc3NlZCBQTkcgZmlsZXMuCi0vLyBDb250YWlucyBjb2RlIGZvciBtYW5hZ2luZyB3aGljaCBQTkcgZmlsZXMgZ2V0IHByb2Nlc3NlZAotLy8gYXQgYnVpbGQgdGltZS4KLS8vCi0KLSNpZm5kZWYgQ1JVTkNIQ0FDSEVfSAotI2RlZmluZSBDUlVOQ0hDQUNIRV9ICi0KLSNpbmNsdWRlIDx1dGlscy9LZXllZFZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlICJGaWxlRmluZGVyLmgiCi0jaW5jbHVkZSAiQ2FjaGVVcGRhdGVyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi0vKiogQ3J1bmNoQ2FjaGUKLSAqICBUaGlzIGNsYXNzIGlzIGEgY2FjaGUgbWFuYWdlciB3aGljaCBjYW4gcHJlLXByb2Nlc3MgUE5HIGZpbGVzIGFuZCBzdG9yZQotICogIHRoZW0gaW4gYSBtaXJyb3ItY2FjaGUuIEl0J3MgY2FwYWJsZSBvZiBkb2luZyBpbmNyZW1lbnRhbCB1cGRhdGVzIHRvIGl0cwotICogIGNhY2hlLgotICoKLSAqICBVc2FnZToKLSAqICAgICAgQ3JlYXRlIGFuIGluc3RhbmNlIGluaXRpYWxpemVkIHdpdGggdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLCB0aGUKLSAqICAgICAgcm9vdCBsb2NhdGlvbiB0byBzdG9yZSB0aGUgY2FjaGUgZmlsZXMsIGFuZCBhbiBpbnN0YW5jZSBvZiBhIGZpbGUgZmluZGVyLgotICogICAgICBUaGVuIHVwZGF0ZSB0aGUgY2FjaGUgYnkgY2FsbGluZyBjcnVuY2guCi0gKi8KLWNsYXNzIENydW5jaENhY2hlIHsKLXB1YmxpYzoKLSAgICAvLyBDb25zdHJ1Y3RvcgotICAgIENydW5jaENhY2hlKFN0cmluZzggc291cmNlUGF0aCwgU3RyaW5nOCBkZXN0UGF0aCwgRmlsZUZpbmRlciogZmYpOwotCi0gICAgLy8gTm9ib2R5IHNob3VsZCBiZSBjYWxsaW5nIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAgLy8gU28gdGhpcyBzcGFjZSBpcyBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsKLQotICAgIC8vIERlZmF1bHQgQ29weSBDb25zdHJ1Y3RvciBhbmQgRGVzdHJ1Y3RvciBhcmUgZmluZQotCi0gICAgLyoqIGNydW5jaCBpcyB0aGUgd29ya2hvcnNlIG9mIHRoaXMgY2xhc3MuCi0gICAgICogSXQgZ29lcyB0aHJvdWdoIGFsbCB0aGUgZmlsZXMgZm91bmQgaW4gdGhlIHNvdXJjZVBhdGggYW5kIGNvbXBhcmVzCi0gICAgICogdGhlbSB0byB0aGUgY2FjaGVkIHZlcnNpb25zIGluIHRoZSBkZXN0UGF0aC4gSWYgdGhlIG9wdGlvbmFsCi0gICAgICogYXJndW1lbnQgZm9yY2VPdmVyd3JpdGUgaXMgc2V0IHRvIHRydWUsIHRoZW4gYWxsIHNvdXJjZSBmaWxlcyBhcmUKLSAgICAgKiByZS1jcnVuY2hlZCBldmVuIGlmIHRoZXkgaGF2ZSBub3QgYmVlbiBtb2RpZmllZCByZWNlbnRseS4gT3RoZXJ3aXNlLAotICAgICAqIHNvdXJjZSBmaWxlcyBhcmUgb25seSBjcnVuY2hlZCB3aGVuIHRoZXkgbmVlZFVwZGF0aW5nLiBBZnRlcndhcmRzLAotICAgICAqIHdlIGRlbGV0ZSBhbnkgbGVmdG92ZXIgZmlsZXMgaW4gdGhlIGNhY2hlIHRoYXQgYXJlIG5vIGxvbmdlciBwcmVzZW50Ci0gICAgICogaW4gc291cmNlLgotICAgICAqCi0gICAgICogUFJFQ09ORElUSU9OUzoKLSAgICAgKiAgICAgIE5vIHNldHVwIGJlc2lkZXMgY29uc3RydWN0aW9uIGlzIG5lZWRlZAotICAgICAqIFBPU1RDT05ESVRJT05TOgotICAgICAqICAgICAgVGhlIGNhY2hlIGlzIHVwZGF0ZWQgdG8gZnVsbHkgcmVmbGVjdCBhbGwgY2hhbmdlcyBpbiBzb3VyY2UuCi0gICAgICogICAgICBUaGUgZnVuY3Rpb24gdGhlbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXMgY2hhbmdlZCBpbiBjYWNoZQotICAgICAqICAgICAgKGNvdW50aW5nIGRlbGV0aW9ucykuCi0gICAgICovCi0gICAgc2l6ZV90IGNydW5jaChDYWNoZVVwZGF0ZXIqIGN1LCBib29sIGZvcmNlT3ZlcndyaXRlPWZhbHNlKTsKLQotcHJpdmF0ZToKLSAgICAvKiogbG9hZEZpbGVzIGlzIGEgd3JhcHBlciB0byB0aGUgRmlsZUZpbmRlciB0aGF0IHBsYWNlcyBtYXRjaGluZwotICAgICAqIGZpbGVzIGludG8gbVNvdXJjZUZpbGVzIGFuZCBtRGVzdEZpbGVzLgotICAgICAqCi0gICAgICogIFBPU1RDT05ESVRJT05TCi0gICAgICogICAgICBtRGVzdEZpbGVzIGFuZCBtU291cmNlRmlsZXMgYXJlIHJlZnJlc2hlZCB0byByZWZsZWN0IHRoZSBjdXJyZW50Ci0gICAgICogICAgICBzdGF0ZSBvZiB0aGUgZmlsZXMgaW4gdGhlIHNvdXJjZSBhbmQgZGVzdCBkaXJlY3Rvcmllcy4KLSAgICAgKiAgICAgIEFueSBwcmV2aW91cyBjb250ZW50cyBvZiBtU291cmNlRmlsZXMgYW5kIG1EZXN0RmlsZXMgYXJlIGNsZWFyZWQuCi0gICAgICovCi0gICAgdm9pZCBsb2FkRmlsZXMoKTsKLQotICAgIC8qKiBuZWVkc1VwZGF0aW5nIHRha2VzIGEgZmlsZSBwYXRoCi0gICAgICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSByZXByZXNlbnRlZCBieSB0aGlzIHBhdGggaXMgbmV3ZXIgaW4gdGhlCi0gICAgICogc291cmNlRmlsZXMgdGhhbiBpbiB0aGUgY2FjaGUgKG1EZXN0RmlsZXMpLgotICAgICAqCi0gICAgICogUFJFQ09ORElUSU9OUzoKLSAgICAgKiAgICAgIG1Tb3VyY2VGaWxlcyBhbmQgbURlc3RGaWxlcyBtdXN0IGJlIGluaXRpYWxpemVkIGFuZCBmaWxsZWQuCi0gICAgICogUE9TVENPTkRJVElPTlM6Ci0gICAgICogICAgICByZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgc291cmNlIGZpbGUncyBtb2RpZmljYXRpb24gdGltZQotICAgICAqICAgICAgaXMgZ3JlYXRlciB0aGFuIHRoZSBjYWNoZWQgZmlsZSdzIG1vZC10aW1lLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KLSAgICAgKgotICAgICAqIFVTQUdFOgotICAgICAqICAgICAgU2hvdWxkIGJlIHVzZWQgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKLSAgICAgKiAgICAgIGlmIChuZWVkc1VwZGF0aW5nKGZpbGVQYXRoKSkKLSAgICAgKiAgICAgICAgICAvLyBSZWNydW5jaCBzb3VyY2VGaWxlIG91dCB0byBkZXN0RmlsZS4KLSAgICAgKgotICAgICAqLwotICAgIGJvb2wgbmVlZHNVcGRhdGluZyhTdHJpbmc4IHJlbGF0aXZlUGF0aCkgY29uc3Q7Ci0KLSAgICAvLyBEQVRBIE1FTUJFUlMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgU3RyaW5nOCBtU291cmNlUGF0aDsKLSAgICBTdHJpbmc4IG1EZXN0UGF0aDsKLQotICAgIFZlY3RvcjxTdHJpbmc4PiBtRXh0ZW5zaW9uczsKLQotICAgIC8vIEVhY2ggdmVjdG9yIG9mIHBhdGhzIGNvbnRhaW5zIG9uZSBlbnRyeSBwZXIgUE5HIGZpbGUgZW5jb3VudGVyZWQuCi0gICAgLy8gRWFjaCBlbnRyeSBjb25zaXN0cyBvZiBhIHBhdGggcG9pbnRpbmcgdG8gdGhhdCBQTkcuCi0gICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsdGltZV90PiBtU291cmNlRmlsZXM7Ci0gICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsdGltZV90PiBtRGVzdEZpbGVzOwotCi0gICAgLy8gUG9pbnRlciB0byBhIEZpbGVGaW5kZXIgdG8gdXNlCi0gICAgRmlsZUZpbmRlciogbUZpbGVGaW5kZXI7Ci19OwotCi0jZW5kaWYgLy8gQ1JVTkNIQ0FDSEVfSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9EaXJlY3RvcnlXYWxrZXIuaCBiL3Rvb2xzL2FhcHQvRGlyZWN0b3J5V2Fsa2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MDMxZDAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9EaXJlY3RvcnlXYWxrZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gRGVmaW5lcyBhbiBhYnN0cmFjdGlvbiBmb3Igb3BlbmluZyBhIGRpcmVjdG9yeSBvbiB0aGUgZmlsZXN5c3RlbSBhbmQKLS8vIGl0ZXJhdGluZyB0aHJvdWdoIGl0LgotCi0jaWZuZGVmIERJUkVDVE9SWVdBTEtFUl9ICi0jZGVmaW5lIERJUkVDVE9SWVdBTEtFUl9ICi0KLSNpbmNsdWRlIDxkaXJlbnQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi0vLyBEaXJlY3RvcnkgV2Fsa2VyCi0vLyBUaGlzIGlzIGFuIGFic3RyYWN0aW9uIGZvciB3YWxraW5nIHRocm91Z2ggYSBkaXJlY3RvcnkgYW5kIGdldHRpbmcgZmlsZXMKLS8vIGFuZCBkZXNjcmlwdGlvbnMuCi0KLWNsYXNzIERpcmVjdG9yeVdhbGtlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+RGlyZWN0b3J5V2Fsa2VyKCkge307Ci0gICAgdmlydHVhbCBib29sIG9wZW5EaXIoU3RyaW5nOCBwYXRoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIG9wZW5EaXIoY29uc3QgY2hhciogcGF0aCkgPSAwOwotICAgIC8vIEFkdmFuY2UgdG8gbmV4dCBkaXJlY3RvcnkgZW50cnkKLSAgICB2aXJ0dWFsIHN0cnVjdCBkaXJlbnQqIG5leHRFbnRyeSgpID0gMDsKLSAgICAvLyBHZXQgdGhlIHN0YXRzIGZvciB0aGUgY3VycmVudCBlbnRyeQotICAgIHZpcnR1YWwgc3RydWN0IHN0YXQqICAgZW50cnlTdGF0cygpID0gMDsKLSAgICAvLyBDbGVhbiBVcAotICAgIHZpcnR1YWwgdm9pZCBjbG9zZURpcigpID0gMDsKLSAgICAvLyBUaGlzIGNsYXNzIGlzIGFibGUgdG8gcmVwbGljYXRlIGl0c2VsZiBvbiB0aGUgaGVhcAotICAgIHZpcnR1YWwgRGlyZWN0b3J5V2Fsa2VyKiBjbG9uZSgpID0gMDsKLQotICAgIC8vIERBVEEgTUVNQkVSUwotICAgIC8vIEN1cnJlbnQgZGlyZWN0b3J5IGVudHJ5Ci0gICAgc3RydWN0IGRpcmVudCBtRW50cnk7Ci0gICAgLy8gU3RhdHMgZm9yIHRoYXQgZGlyZWN0b3J5IGVudHJ5Ci0gICAgc3RydWN0IHN0YXQgbVN0YXRzOwotICAgIC8vIEJhc2UgcGF0aAotICAgIFN0cmluZzggbUJhc2VQYXRoOwotfTsKLQotLy8gU3lzdGVtIERpcmVjdG9yeSBXYWxrZXIKLS8vIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGFib3ZlIGFic3RyYWN0aW9uIHRoYXQgY2FsbHMKLS8vIHJlYWwgc3lzdGVtIGNhbGxzIGFuZCBpcyBmdWxseSBmdW5jdGlvbmFsLgotLy8gZnVuY3Rpb25zIGFyZSBpbmxpbmVkIHNpbmNlIHRoZXkncmUgdmVyeSBzaG9ydCBhbmQgc2ltcGxlCi0KLWNsYXNzIFN5c3RlbURpcmVjdG9yeVdhbGtlciA6IHB1YmxpYyBEaXJlY3RvcnlXYWxrZXIgewotCi0gICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3RvciwgY29weSBjb25zdHJ1Y3RvciwgYW5kIGRlc3RydWN0b3IgYXJlIGZpbmUKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgb3BlbkRpcihTdHJpbmc4IHBhdGgpIHsKLSAgICAgICAgbUJhc2VQYXRoID0gcGF0aDsKLSAgICAgICAgZGlyID0gTlVMTDsKLSAgICAgICAgZGlyID0gb3BlbmRpcihtQmFzZVBhdGguc3RyaW5nKCkgKTsKLQotICAgICAgICBpZiAoZGlyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfTsKLSAgICB2aXJ0dWFsIGJvb2wgb3BlbkRpcihjb25zdCBjaGFyKiBwYXRoKSB7Ci0gICAgICAgIFN0cmluZzggcChwYXRoKTsKLSAgICAgICAgb3BlbkRpcihwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfTsKLSAgICAvLyBBZHZhbmNlIHRvIG5leHQgZGlyZWN0b3J5IGVudHJ5Ci0gICAgdmlydHVhbCBzdHJ1Y3QgZGlyZW50KiBuZXh0RW50cnkoKSB7Ci0gICAgICAgIHN0cnVjdCBkaXJlbnQqIGVudHJ5UHRyID0gcmVhZGRpcihkaXIpOwotICAgICAgICBpZiAoZW50cnlQdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIG1FbnRyeSA9ICplbnRyeVB0cjsKLSAgICAgICAgLy8gR2V0IHN0YXRzCi0gICAgICAgIFN0cmluZzggZnVsbFBhdGggPSBtQmFzZVBhdGguYXBwZW5kUGF0aENvcHkobUVudHJ5LmRfbmFtZSk7Ci0gICAgICAgIHN0YXQoZnVsbFBhdGguc3RyaW5nKCksJm1TdGF0cyk7Ci0gICAgICAgIHJldHVybiAmbUVudHJ5OwotICAgIH07Ci0gICAgLy8gR2V0IHRoZSBzdGF0cyBmb3IgdGhlIGN1cnJlbnQgZW50cnkKLSAgICB2aXJ0dWFsIHN0cnVjdCBzdGF0KiAgIGVudHJ5U3RhdHMoKSB7Ci0gICAgICAgIHJldHVybiAmbVN0YXRzOwotICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlRGlyKCkgewotICAgICAgICBjbG9zZWRpcihkaXIpOwotICAgIH07Ci0gICAgdmlydHVhbCBEaXJlY3RvcnlXYWxrZXIqIGNsb25lKCkgewotICAgICAgICByZXR1cm4gbmV3IFN5c3RlbURpcmVjdG9yeVdhbGtlcigqdGhpcyk7Ci0gICAgfTsKLXByaXZhdGU6Ci0gICAgRElSKiBkaXI7Ci19OwotCi0jZW5kaWYgLy8gRElSRUNUT1JZV0FMS0VSX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvRmlsZUZpbmRlci5jcHAgYi90b29scy9hYXB0L0ZpbGVGaW5kZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODc3NWMwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvRmlsZUZpbmRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLQotLy8gRmlsZSBGaW5kZXIgaW1wbGVtZW50YXRpb24uCi0vLyBJbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGZ1bmN0aW9ucyBkZWNsYXJlZCBhbmQgZG9jdW1lbnRlZCBpbiBGaWxlRmluZGVyLmgKLQotI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDx1dGlscy9LZXllZFZlY3Rvci5oPgotCi0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLQotI2luY2x1ZGUgIkRpcmVjdG9yeVdhbGtlci5oIgotI2luY2x1ZGUgIkZpbGVGaW5kZXIuaCIKLQotLy8jZGVmaW5lIERFQlVHCi0KLXVzaW5nIGFuZHJvaWQ6OlN0cmluZzg7Ci0KLS8vIFByaXZhdGUgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBhIGZpbGUgaXMgYSBkaXJlY3Rvcnkgb3Igbm90Ci1ib29sIGlzRGlyZWN0b3J5KGNvbnN0IGNoYXIqIGZpbGVuYW1lKSB7Ci0gICAgc3RydWN0IHN0YXQgZmlsZVN0YXQ7Ci0gICAgaWYgKHN0YXQoZmlsZW5hbWUsICZmaWxlU3RhdCkgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4oU19JU0RJUihmaWxlU3RhdC5zdF9tb2RlKSk7Ci19Ci0KLQotLy8gUHJpdmF0ZSBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIGEgZmlsZSBpcyBhIHJlZ3VsYXIgZmlsZSBvciBub3QKLWJvb2wgaXNGaWxlKGNvbnN0IGNoYXIqIGZpbGVuYW1lKSB7Ci0gICAgc3RydWN0IHN0YXQgZmlsZVN0YXQ7Ci0gICAgaWYgKHN0YXQoZmlsZW5hbWUsICZmaWxlU3RhdCkgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4oU19JU1JFRyhmaWxlU3RhdC5zdF9tb2RlKSk7Ci19Ci0KLWJvb2wgU3lzdGVtRmlsZUZpbmRlcjo6ZmluZEZpbGVzKFN0cmluZzggYmFzZVBhdGgsIFZlY3RvcjxTdHJpbmc4PiYgZXh0ZW5zaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleWVkVmVjdG9yPFN0cmluZzgsdGltZV90PiYgZmlsZVN0b3JlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5V2Fsa2VyKiBkdykKLXsKLSAgICAvLyBTY2FuIHRoZSBkaXJlY3RvcnkgcG9pbnRlZCB0byBieSBiYXNlUGF0aAotICAgIC8vIGNoZWNrIGZpbGVzIGFuZCByZWN1cnNlIGludG8gc3ViZGlyZWN0b3JpZXMuCi0gICAgaWYgKCFkdy0+b3BlbkRpcihiYXNlUGF0aCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvKgotICAgICAqICBHbyB0aHJvdWdoIGFsbCBkaXJlY3RvcnkgZW50cmllcy4gQ2hlY2sgZWFjaCBmaWxlIHVzaW5nIGNoZWNrQW5kQWRkRmlsZQotICAgICAqICBhbmQgcmVjdXJzZSBpbnRvIHN1Yi1kaXJlY3Rvcmllcy4KLSAgICAgKi8KLSAgICBzdHJ1Y3QgZGlyZW50KiBlbnRyeTsKLSAgICB3aGlsZSAoKGVudHJ5ID0gZHctPm5leHRFbnRyeSgpKSAhPSBOVUxMKSB7Ci0gICAgICAgIFN0cmluZzggZW50cnlOYW1lKGVudHJ5LT5kX25hbWUpOwotICAgICAgICBpZiAoZW50cnktPmRfbmFtZVswXSA9PSAnLicpIC8vIFNraXAgaGlkZGVuIGZpbGVzIGFuZCBkaXJlY3RvcmllcwotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgU3RyaW5nOCBmdWxsUGF0aCA9IGJhc2VQYXRoLmFwcGVuZFBhdGhDb3B5KGVudHJ5TmFtZSk7Ci0gICAgICAgIC8vIElmIHRoaXMgZW50cnkgaXMgYSBkaXJlY3Rvcnkgd2UnbGwgcmVjdXJzZSBpbnRvIGl0Ci0gICAgICAgIGlmIChpc0RpcmVjdG9yeShmdWxsUGF0aC5zdHJpbmcoKSkgKSB7Ci0gICAgICAgICAgICBEaXJlY3RvcnlXYWxrZXIqIGNvcHkgPSBkdy0+Y2xvbmUoKTsKLSAgICAgICAgICAgIGZpbmRGaWxlcyhmdWxsUGF0aCwgZXh0ZW5zaW9ucywgZmlsZVN0b3JlLGNvcHkpOwotICAgICAgICAgICAgZGVsZXRlIGNvcHk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGlzIGVudHJ5IGlzIGEgZmlsZSwgd2UnbGwgcGFzcyBpdCBvdmVyIHRvIGNoZWNrQW5kQWRkRmlsZQotICAgICAgICBpZiAoaXNGaWxlKGZ1bGxQYXRoLnN0cmluZygpKSApIHsKLSAgICAgICAgICAgIGNoZWNrQW5kQWRkRmlsZShmdWxsUGF0aCxkdy0+ZW50cnlTdGF0cygpLGV4dGVuc2lvbnMsZmlsZVN0b3JlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENsZWFuIHVwCi0gICAgZHctPmNsb3NlRGlyKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTeXN0ZW1GaWxlRmluZGVyOjpjaGVja0FuZEFkZEZpbGUoU3RyaW5nOCBwYXRoLCBjb25zdCBzdHJ1Y3Qgc3RhdCogc3RhdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nOD4mIGV4dGVuc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4mIGZpbGVTdG9yZSkKLXsKLSAgICAvLyBMb29wIG92ZXIgdGhlIGV4dGVuc2lvbnMsIGNoZWNraW5nIGZvciBhIG1hdGNoCi0gICAgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgU3RyaW5nOCBleHQocGF0aC5nZXRQYXRoRXh0ZW5zaW9uKCkpOwotICAgIGV4dC50b0xvd2VyKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKSAmJiAhZG9uZTsgKytpKSB7Ci0gICAgICAgIFN0cmluZzggZXh0MiA9IGV4dGVuc2lvbnNbaV0uZ2V0UGF0aEV4dGVuc2lvbigpOwotICAgICAgICBleHQyLnRvTG93ZXIoKTsKLSAgICAgICAgLy8gQ29tcGFyZSB0aGUgZXh0ZW5zaW9ucy4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgYWRkIHRvIHN0b3JhZ2UuCi0gICAgICAgIGlmIChleHQgPT0gZXh0MikgewotICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgICAgICBmaWxlU3RvcmUuYWRkKHBhdGgsc3RhdHMtPnN0X210aW1lKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9GaWxlRmluZGVyLmggYi90b29scy9hYXB0L0ZpbGVGaW5kZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3NGFlZS4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L0ZpbGVGaW5kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotCi0vLyBGaWxlIEZpbmRlci4KLS8vIFRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIHVzZWZ1bCBmdW5jdGlvbnMgZm9yIGZpbmRpbmcgcGF0aHMgYW5kIG1vZGlmaWNhdGlvbgotLy8gdGltZXMgb2YgZmlsZXMgdGhhdCBtYXRjaCBhbiBleHRlbnNpb24gcGF0dGVybiBpbiBhIGRpcmVjdG9yeSB0cmVlLgotLy8gYW5kIGZpbmRpbmcgZmlsZXMgaW4gaXQuCi0KLSNpZm5kZWYgRklMRUZJTkRFUl9ICi0jZGVmaW5lIEZJTEVGSU5ERVJfSAotCi0jaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLSNpbmNsdWRlICJEaXJlY3RvcnlXYWxrZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLS8vIEFic3RyYWN0aW9uIHRvIGFsbG93IGZvciBkZXBlbmRlbmN5IGluamVjdGlvbi4gU2VlIE1vY2tGaWxlRmluZGVyLmgKLS8vIGZvciB0aGUgdGVzdGluZyBpbXBsZW1lbnRhdGlvbi4KLWNsYXNzIEZpbGVGaW5kZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBmaW5kRmlsZXMoU3RyaW5nOCBiYXNlUGF0aCwgVmVjdG9yPFN0cmluZzg+JiBleHRlbnNpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCx0aW1lX3Q+JiBmaWxlU3RvcmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnlXYWxrZXIqIGR3KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIH5GaWxlRmluZGVyKCkge307Ci19OwotCi1jbGFzcyBTeXN0ZW1GaWxlRmluZGVyIDogcHVibGljIEZpbGVGaW5kZXIgewotcHVibGljOgotCi0gICAgLyogZmluZEZpbGVzIHRha2VzIGEgcGF0aCwgYSBWZWN0b3Igb2YgZXh0ZW5zaW9ucywgYW5kIGEgZGVzdGluYXRpb24gS2V5ZWRWZWN0b3IKLSAgICAgKiAgICAgICAgICAgYW5kIHBsYWNlcyBwYXRoL21vZGlmaWNhdGlvbiBkYXRlIGtleS92YWx1ZXMgcG9pbnRpbmcgdG8KLSAgICAgKiAgICAgICAgICBhbGwgZmlsZXMgd2l0aCBtYXRjaGluZyBleHRlbnNpb25zIGZvdW5kIGludG8gdGhlIEtleWVkVmVjdG9yCi0gICAgICogUFJFQ09ORElUSU9OUwotICAgICAqICAgICBwYXRoIGlzIGEgdmFsaWQgc3lzdGVtIHBhdGgKLSAgICAgKiAgICAgZXh0ZW5zaW9ucyBzaG91bGQgaW5jbHVkZSBsZWFkaW5nICIuIgotICAgICAqICAgICAgICAgICAgICAgIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSwgYnV0IHRoZSBjb21wYXJpc29uIGRpcmVjdGx5Ci0gICAgICogICAgICAgICAgICAgICAgY29tcGFyZXMgdGhlIGVuZCBvZiB0aGUgcGF0aCBzdHJpbmcgc28gaWYgdGhlICIuIgotICAgICAqICAgICAgICAgICAgICAgIGlzIGV4Y2x1ZGVkIHRoZXJlIGlzIGEgc21hbGwgY2hhbmNlIHlvdSBjb3VsZCBoYXZlCi0gICAgICogICAgICAgICAgICAgICAgYSBmYWxzZSBwb3NpdGl2ZSBtYXRjaC4gKEZvciBleGFtcGxlOiBleHRlbnNpb24gInBuZyIKLSAgICAgKiAgICAgICAgICAgICAgICB3b3VsZCBtYXRjaCBhIGZpbGUgY2FsbGVkICJibGFoYmxhaHBuZyIpCi0gICAgICoKLSAgICAgKiBQT1NUQ09ORElUSU9OUwotICAgICAqICAgICBmaWxlU3RvcmUgY29udGFpbnMgKGluIG5vIGd1YXJhbnRlZWQgb3JkZXIpIHBhdGhzIHRvIGFsbAotICAgICAqICAgICAgICAgICAgICAgIG1hdGNoaW5nIGZpbGVzIGVuY291bnRlcmVkIGluIHN1YmRpcmVjdG9yaWVzIG9mIHBhdGgKLSAgICAgKiAgICAgICAgICAgICAgICBhcyBrZXlzIGluIHRoZSBLZXllZFZlY3Rvci4gRWFjaCBrZXkgaGFzIHRoZSBtb2RpZmljYXRpb24gdGltZQotICAgICAqICAgICAgICAgICAgICAgIG9mIHRoZSBmaWxlIGFzIGl0cyB2YWx1ZS4KLSAgICAgKgotICAgICAqIENhbGxzIGNoZWNrQW5kQWRkRmlsZSBvbiBlYWNoIGZpbGUgZW5jb3VudGVyZWQgaW4gdGhlIGRpcmVjdG9yeSB0cmVlCi0gICAgICogUmVjdXJzaXZlbHkgZGVzY2VuZHMgaW50byBzdWJkaXJlY3Rvcmllcy4KLSAgICAgKi8KLSAgICB2aXJ0dWFsIGJvb2wgZmluZEZpbGVzKFN0cmluZzggYmFzZVBhdGgsIFZlY3RvcjxTdHJpbmc4PiYgZXh0ZW5zaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleWVkVmVjdG9yPFN0cmluZzgsdGltZV90PiYgZmlsZVN0b3JlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5V2Fsa2VyKiBkdyk7Ci0KLXByaXZhdGU6Ci0gICAgLyoqCi0gICAgICogY2hlY2tBbmRBZGRGaWxlIGxvb2tzIGF0IGEgc2luZ2xlIGZpbGUgcGF0aCBhbmQgc3RhdCBjb21ibwotICAgICAqIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGEgbWF0Y2hpbmcgZmlsZSAoYnkgbG9va2luZyBhdAotICAgICAqIHRoZSBleHRlbnNpb24pCi0gICAgICoKLSAgICAgKiBQUkVDT05ESVRJT05TCi0gICAgICogICAgbm8gc2V0dXAgaXMgbmVlZGVkCi0gICAgICoKLSAgICAgKiBQT1NUQ09ORElUSU9OUwotICAgICAqICAgIElmIHRoZSBnaXZlbiBmaWxlIGhhcyBhIG1hdGNoaW5nIGV4dGVuc2lvbiB0aGVuIGEgbmV3IGVudHJ5Ci0gICAgICogICAgaXMgYWRkZWQgdG8gdGhlIEtleWVkVmVjdG9yIHdpdGggdGhlIHBhdGggYXMgdGhlIGtleSBhbmQgdGhlIG1vZGlmaWNhdGlvbgotICAgICAqICAgIHRpbWUgYXMgdGhlIHZhbHVlLgotICAgICAqCi0gICAgICovCi0gICAgc3RhdGljIHZvaWQgY2hlY2tBbmRBZGRGaWxlKFN0cmluZzggcGF0aCwgY29uc3Qgc3RydWN0IHN0YXQqIHN0YXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nOD4mIGV4dGVuc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleWVkVmVjdG9yPFN0cmluZzgsdGltZV90PiYgZmlsZVN0b3JlKTsKLQotfTsKLSNlbmRpZiAvLyBGSUxFRklOREVSX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvSW1hZ2VzLmNwcCBiL3Rvb2xzL2FhcHQvSW1hZ2VzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhOTQ4ZC4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L0ltYWdlcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzg2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQnVpbGQgcmVzb3VyY2UgZmlsZXMgZnJvbSByYXcgYXNzZXRzLgotLy8KLQotI2RlZmluZSBQTkdfSU5URVJOQUwKLQotI2luY2x1ZGUgIkltYWdlcy5oIgotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuaD4KLSNpbmNsdWRlIDx1dGlscy9CeXRlT3JkZXIuaD4KLQotI2luY2x1ZGUgPHBuZy5oPgotI2luY2x1ZGUgPHpsaWIuaD4KLQotI2RlZmluZSBOT0lTWSh4KSAvL3gKLQotc3RhdGljIHZvaWQKLXBuZ193cml0ZV9hYXB0X2ZpbGUocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2J5dGVwIGRhdGEsIHBuZ19zaXplX3QgbGVuZ3RoKQotewotICAgIEFhcHRGaWxlKiBhYXB0ZmlsZSA9IChBYXB0RmlsZSopIHBuZ19nZXRfaW9fcHRyKHBuZ19wdHIpOwotICAgIHN0YXR1c190IGVyciA9IGFhcHRmaWxlLT53cml0ZURhdGEoZGF0YSwgbGVuZ3RoKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiV3JpdGUgRXJyb3IiKTsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQKLXBuZ19mbHVzaF9hYXB0X2ZpbGUocG5nX3N0cnVjdHAgcG5nX3B0cikKLXsKLX0KLQotLy8gVGhpcyBob2xkcyBhbiBpbWFnZSBhcyA4YnBwIFJHQkEuCi1zdHJ1Y3QgaW1hZ2VfaW5mbwotewotICAgIGltYWdlX2luZm8oKSA6IHJvd3MoTlVMTCksIGlzOVBhdGNoKGZhbHNlKSwgYWxsb2NSb3dzKE5VTEwpIHsgfQotICAgIH5pbWFnZV9pbmZvKCkgewotICAgICAgICBpZiAocm93cyAmJiByb3dzICE9IGFsbG9jUm93cykgewotICAgICAgICAgICAgZnJlZShyb3dzKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYWxsb2NSb3dzKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8KGludClhbGxvY0hlaWdodDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZnJlZShhbGxvY1Jvd3NbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJlZShhbGxvY1Jvd3MpOwotICAgICAgICB9Ci0gICAgICAgIGZyZWUoaW5mbzlQYXRjaC54RGl2cyk7Ci0gICAgICAgIGZyZWUoaW5mbzlQYXRjaC55RGl2cyk7Ci0gICAgICAgIGZyZWUoaW5mbzlQYXRjaC5jb2xvcnMpOwotICAgIH0KLQotICAgIHBuZ191aW50XzMyIHdpZHRoOwotICAgIHBuZ191aW50XzMyIGhlaWdodDsKLSAgICBwbmdfYnl0ZXBwIHJvd3M7Ci0KLSAgICAvLyA5LXBhdGNoIGluZm8uCi0gICAgYm9vbCBpczlQYXRjaDsKLSAgICBSZXNfcG5nXzlwYXRjaCBpbmZvOVBhdGNoOwotCi0gICAgLy8gTGF5b3V0IHBhZGRpbmcsIGlmIHJlbGV2YW50Ci0gICAgYm9vbCBoYXZlTGF5b3V0Qm91bmRzOwotICAgIGludDMyX3QgbGF5b3V0Qm91bmRzTGVmdDsKLSAgICBpbnQzMl90IGxheW91dEJvdW5kc1RvcDsKLSAgICBpbnQzMl90IGxheW91dEJvdW5kc1JpZ2h0OwotICAgIGludDMyX3QgbGF5b3V0Qm91bmRzQm90dG9tOwotCi0gICAgcG5nX3VpbnRfMzIgYWxsb2NIZWlnaHQ7Ci0gICAgcG5nX2J5dGVwcCBhbGxvY1Jvd3M7Ci19OwotCi1zdGF0aWMgdm9pZCByZWFkX3BuZyhjb25zdCBjaGFyKiBpbWFnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBwbmdfc3RydWN0cCByZWFkX3B0ciwgcG5nX2luZm9wIHJlYWRfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgIGltYWdlX2luZm8qIG91dEltYWdlSW5mbykKLXsKLSAgICBpbnQgY29sb3JfdHlwZTsKLSAgICBpbnQgYml0X2RlcHRoLCBpbnRlcmxhY2VfdHlwZSwgY29tcHJlc3Npb25fdHlwZTsKLSAgICBpbnQgaTsKLQotICAgIHBuZ19yZWFkX2luZm8ocmVhZF9wdHIsIHJlYWRfaW5mbyk7Ci0KLSAgICBwbmdfZ2V0X0lIRFIocmVhZF9wdHIsIHJlYWRfaW5mbywgJm91dEltYWdlSW5mby0+d2lkdGgsCi0gICAgICAgJm91dEltYWdlSW5mby0+aGVpZ2h0LCAmYml0X2RlcHRoLCAmY29sb3JfdHlwZSwKLSAgICAgICAmaW50ZXJsYWNlX3R5cGUsICZjb21wcmVzc2lvbl90eXBlLCBOVUxMKTsKLQotICAgIC8vcHJpbnRmKCJJbWFnZSAlczpcbiIsIGltYWdlTmFtZSk7Ci0gICAgLy9wcmludGYoImNvbG9yX3R5cGU9JWQsIGJpdF9kZXB0aD0lZCwgaW50ZXJsYWNlX3R5cGU9JWQsIGNvbXByZXNzaW9uX3R5cGU9JWRcbiIsCi0gICAgLy8gICAgICAgY29sb3JfdHlwZSwgYml0X2RlcHRoLCBpbnRlcmxhY2VfdHlwZSwgY29tcHJlc3Npb25fdHlwZSk7Ci0KLSAgICBpZiAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFKQotICAgICAgICBwbmdfc2V0X3BhbGV0dGVfdG9fcmdiKHJlYWRfcHRyKTsKLQotICAgIGlmIChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVkgJiYgYml0X2RlcHRoIDwgOCkKLSAgICAgICAgcG5nX3NldF9leHBhbmRfZ3JheV8xXzJfNF90b184KHJlYWRfcHRyKTsKLQotICAgIGlmIChwbmdfZ2V0X3ZhbGlkKHJlYWRfcHRyLCByZWFkX2luZm8sIFBOR19JTkZPX3RSTlMpKSB7Ci0gICAgICAgIC8vcHJpbnRmKCJIYXMgUE5HX0lORk9fdFJOUyFcbiIpOwotICAgICAgICBwbmdfc2V0X3RSTlNfdG9fYWxwaGEocmVhZF9wdHIpOwotICAgIH0KLQotICAgIGlmIChiaXRfZGVwdGggPT0gMTYpCi0gICAgICAgIHBuZ19zZXRfc3RyaXBfMTYocmVhZF9wdHIpOwotCi0gICAgaWYgKChjb2xvcl90eXBlJlBOR19DT0xPUl9NQVNLX0FMUEhBKSA9PSAwKQotICAgICAgICBwbmdfc2V0X2FkZF9hbHBoYShyZWFkX3B0ciwgMHhGRiwgUE5HX0ZJTExFUl9BRlRFUik7Ci0KLSAgICBpZiAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZIHx8IGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWV9BTFBIQSkKLSAgICAgICAgcG5nX3NldF9ncmF5X3RvX3JnYihyZWFkX3B0cik7Ci0KLSAgICBwbmdfcmVhZF91cGRhdGVfaW5mbyhyZWFkX3B0ciwgcmVhZF9pbmZvKTsKLQotICAgIG91dEltYWdlSW5mby0+cm93cyA9IChwbmdfYnl0ZXBwKW1hbGxvYygKLSAgICAgICAgb3V0SW1hZ2VJbmZvLT5oZWlnaHQgKiBzaXplb2YocG5nX2J5dGVwKSk7Ci0gICAgb3V0SW1hZ2VJbmZvLT5hbGxvY0hlaWdodCA9IG91dEltYWdlSW5mby0+aGVpZ2h0OwotICAgIG91dEltYWdlSW5mby0+YWxsb2NSb3dzID0gb3V0SW1hZ2VJbmZvLT5yb3dzOwotCi0gICAgcG5nX3NldF9yb3dzKHJlYWRfcHRyLCByZWFkX2luZm8sIG91dEltYWdlSW5mby0+cm93cyk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgKGludClvdXRJbWFnZUluZm8tPmhlaWdodDsgaSsrKQotICAgIHsKLSAgICAgICAgb3V0SW1hZ2VJbmZvLT5yb3dzW2ldID0gKHBuZ19ieXRlcCkKLSAgICAgICAgICAgIG1hbGxvYyhwbmdfZ2V0X3Jvd2J5dGVzKHJlYWRfcHRyLCByZWFkX2luZm8pKTsKLSAgICB9Ci0KLSAgICBwbmdfcmVhZF9pbWFnZShyZWFkX3B0ciwgb3V0SW1hZ2VJbmZvLT5yb3dzKTsKLQotICAgIHBuZ19yZWFkX2VuZChyZWFkX3B0ciwgcmVhZF9pbmZvKTsKLQotICAgIE5PSVNZKHByaW50ZigiSW1hZ2UgJXM6IHc9JWQsIGg9JWQsIGQ9JWQsIGNvbG9ycz0lZCwgaW50ZXI9JWQsIGNvbXA9JWRcbiIsCi0gICAgICAgICAgICAgICAgIGltYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgKGludClvdXRJbWFnZUluZm8tPndpZHRoLCAoaW50KW91dEltYWdlSW5mby0+aGVpZ2h0LAotICAgICAgICAgICAgICAgICBiaXRfZGVwdGgsIGNvbG9yX3R5cGUsCi0gICAgICAgICAgICAgICAgIGludGVybGFjZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKSk7Ci0KLSAgICBwbmdfZ2V0X0lIRFIocmVhZF9wdHIsIHJlYWRfaW5mbywgJm91dEltYWdlSW5mby0+d2lkdGgsCi0gICAgICAgJm91dEltYWdlSW5mby0+aGVpZ2h0LCAmYml0X2RlcHRoLCAmY29sb3JfdHlwZSwKLSAgICAgICAmaW50ZXJsYWNlX3R5cGUsICZjb21wcmVzc2lvbl90eXBlLCBOVUxMKTsKLX0KLQotI2RlZmluZSBDT0xPUl9UUkFOU1BBUkVOVCAwCi0jZGVmaW5lIENPTE9SX1dISVRFIDB4RkZGRkZGRkYKLSNkZWZpbmUgQ09MT1JfVElDSyAgMHhGRjAwMDAwMAotI2RlZmluZSBDT0xPUl9MQVlPVVRfQk9VTkRTX1RJQ0sgMHhGRjAwMDBGRgotCi1lbnVtIHsKLSAgICBUSUNLX1RZUEVfTk9ORSwKLSAgICBUSUNLX1RZUEVfVElDSywKLSAgICBUSUNLX1RZUEVfTEFZT1VUX0JPVU5EUywKLSAgICBUSUNLX1RZUEVfQk9USAotfTsKLQotc3RhdGljIGludCB0aWNrX3R5cGUocG5nX2J5dGVwIHAsIGJvb2wgdHJhbnNwYXJlbnQsIGNvbnN0IGNoYXIqKiBvdXRFcnJvcikKLXsKLSAgICBwbmdfdWludF8zMiBjb2xvciA9IHBbMF0gfCAocFsxXSA8PCA4KSB8IChwWzJdIDw8IDE2KSB8IChwWzNdIDw8IDI0KTsKLQotICAgIGlmICh0cmFuc3BhcmVudCkgewotICAgICAgICBpZiAocFszXSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gVElDS19UWVBFX05PTkU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvbG9yID09IENPTE9SX0xBWU9VVF9CT1VORFNfVElDSykgewotICAgICAgICAgICAgcmV0dXJuIFRJQ0tfVFlQRV9MQVlPVVRfQk9VTkRTOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb2xvciA9PSBDT0xPUl9USUNLKSB7Ci0gICAgICAgICAgICByZXR1cm4gVElDS19UWVBFX1RJQ0s7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBFcnJvciBjYXNlcwotICAgICAgICBpZiAocFszXSAhPSAweGZmKSB7Ci0gICAgICAgICAgICAqb3V0RXJyb3IgPSAiRnJhbWUgcGl4ZWxzIG11c3QgYmUgZWl0aGVyIHNvbGlkIG9yIHRyYW5zcGFyZW50IChub3QgaW50ZXJtZWRpYXRlIGFscGhhcykiOwotICAgICAgICAgICAgcmV0dXJuIFRJQ0tfVFlQRV9OT05FOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwWzBdICE9IDAgfHwgcFsxXSAhPSAwIHx8IHBbMl0gIT0gMCkgewotICAgICAgICAgICAgKm91dEVycm9yID0gIlRpY2tzIGluIHRyYW5zcGFyZW50IGZyYW1lIG11c3QgYmUgYmxhY2sgb3IgcmVkIjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVElDS19UWVBFX1RJQ0s7Ci0gICAgfQotCi0gICAgaWYgKHBbM10gIT0gMHhGRikgewotICAgICAgICAqb3V0RXJyb3IgPSAiV2hpdGUgZnJhbWUgbXVzdCBiZSBhIHNvbGlkIGNvbG9yIChubyBhbHBoYSkiOwotICAgIH0KLSAgICBpZiAoY29sb3IgPT0gQ09MT1JfV0hJVEUpIHsKLSAgICAgICAgcmV0dXJuIFRJQ0tfVFlQRV9OT05FOwotICAgIH0KLSAgICBpZiAoY29sb3IgPT0gQ09MT1JfVElDSykgewotICAgICAgICByZXR1cm4gVElDS19UWVBFX1RJQ0s7Ci0gICAgfQotICAgIGlmIChjb2xvciA9PSBDT0xPUl9MQVlPVVRfQk9VTkRTX1RJQ0spIHsKLSAgICAgICAgcmV0dXJuIFRJQ0tfVFlQRV9MQVlPVVRfQk9VTkRTOwotICAgIH0KLQotICAgIGlmIChwWzBdICE9IDAgfHwgcFsxXSAhPSAwIHx8IHBbMl0gIT0gMCkgewotICAgICAgICAqb3V0RXJyb3IgPSAiVGlja3MgaW4gd2hpdGUgZnJhbWUgbXVzdCBiZSBibGFjayBvciByZWQiOwotICAgICAgICByZXR1cm4gVElDS19UWVBFX05PTkU7Ci0gICAgfQotICAgIHJldHVybiBUSUNLX1RZUEVfVElDSzsKLX0KLQotZW51bSB7Ci0gICAgVElDS19TVEFSVCwKLSAgICBUSUNLX0lOU0lERV8xLAotICAgIFRJQ0tfT1VUU0lERV8xCi19OwotCi1zdGF0aWMgc3RhdHVzX3QgZ2V0X2hvcml6b250YWxfdGlja3MoCi0gICAgICAgIHBuZ19ieXRlcCByb3csIGludCB3aWR0aCwgYm9vbCB0cmFuc3BhcmVudCwgYm9vbCByZXF1aXJlZCwKLSAgICAgICAgaW50MzJfdCogb3V0TGVmdCwgaW50MzJfdCogb3V0UmlnaHQsIGNvbnN0IGNoYXIqKiBvdXRFcnJvciwKLSAgICAgICAgdWludDhfdCogb3V0RGl2cywgYm9vbCBtdWx0aXBsZUFsbG93ZWQpCi17Ci0gICAgaW50IGk7Ci0gICAgKm91dExlZnQgPSAqb3V0UmlnaHQgPSAtMTsKLSAgICBpbnQgc3RhdGUgPSBUSUNLX1NUQVJUOwotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLQotICAgIGZvciAoaT0xOyBpPHdpZHRoLTE7IGkrKykgewotICAgICAgICBpZiAoVElDS19UWVBFX1RJQ0sgPT0gdGlja190eXBlKHJvdytpKjQsIHRyYW5zcGFyZW50LCBvdXRFcnJvcikpIHsKLSAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBUSUNLX1NUQVJUIHx8Ci0gICAgICAgICAgICAgICAgKHN0YXRlID09IFRJQ0tfT1VUU0lERV8xICYmIG11bHRpcGxlQWxsb3dlZCkpIHsKLSAgICAgICAgICAgICAgICAqb3V0TGVmdCA9IGktMTsKLSAgICAgICAgICAgICAgICAqb3V0UmlnaHQgPSB3aWR0aC0yOwotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAob3V0RGl2cyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICpvdXREaXZzICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN0YXRlID0gVElDS19JTlNJREVfMTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gVElDS19PVVRTSURFXzEpIHsKLSAgICAgICAgICAgICAgICAqb3V0RXJyb3IgPSAiQ2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIG1hcmtlZCByZWdpb24gYWxvbmcgZWRnZSI7Ci0gICAgICAgICAgICAgICAgKm91dExlZnQgPSBpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCpvdXRFcnJvciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUgPT0gVElDS19JTlNJREVfMSkgewotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIGRpdi4gIE1vdmUgb24gdG8gdGhlIG5leHQuCi0gICAgICAgICAgICAgICAgKm91dFJpZ2h0ID0gaS0xOwotICAgICAgICAgICAgICAgIG91dFJpZ2h0ICs9IDI7Ci0gICAgICAgICAgICAgICAgb3V0TGVmdCArPSAyOwotICAgICAgICAgICAgICAgIHN0YXRlID0gVElDS19PVVRTSURFXzE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqb3V0TGVmdCA9IGk7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXF1aXJlZCAmJiAhZm91bmQpIHsKLSAgICAgICAgKm91dEVycm9yID0gIk5vIG1hcmtlZCByZWdpb24gZm91bmQgYWxvbmcgZWRnZSI7Ci0gICAgICAgICpvdXRMZWZ0ID0gLTE7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdGljIHN0YXR1c190IGdldF92ZXJ0aWNhbF90aWNrcygKLSAgICAgICAgcG5nX2J5dGVwcCByb3dzLCBpbnQgb2Zmc2V0LCBpbnQgaGVpZ2h0LCBib29sIHRyYW5zcGFyZW50LCBib29sIHJlcXVpcmVkLAotICAgICAgICBpbnQzMl90KiBvdXRUb3AsIGludDMyX3QqIG91dEJvdHRvbSwgY29uc3QgY2hhcioqIG91dEVycm9yLAotICAgICAgICB1aW50OF90KiBvdXREaXZzLCBib29sIG11bHRpcGxlQWxsb3dlZCkKLXsKLSAgICBpbnQgaTsKLSAgICAqb3V0VG9wID0gKm91dEJvdHRvbSA9IC0xOwotICAgIGludCBzdGF0ZSA9IFRJQ0tfU1RBUlQ7Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotCi0gICAgZm9yIChpPTE7IGk8aGVpZ2h0LTE7IGkrKykgewotICAgICAgICBpZiAoVElDS19UWVBFX1RJQ0sgPT0gdGlja190eXBlKHJvd3NbaV0rb2Zmc2V0LCB0cmFuc3BhcmVudCwgb3V0RXJyb3IpKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUgPT0gVElDS19TVEFSVCB8fAotICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBUSUNLX09VVFNJREVfMSAmJiBtdWx0aXBsZUFsbG93ZWQpKSB7Ci0gICAgICAgICAgICAgICAgKm91dFRvcCA9IGktMTsKLSAgICAgICAgICAgICAgICAqb3V0Qm90dG9tID0gaGVpZ2h0LTI7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChvdXREaXZzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgKm91dERpdnMgKz0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBUSUNLX0lOU0lERV8xOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBUSUNLX09VVFNJREVfMSkgewotICAgICAgICAgICAgICAgICpvdXRFcnJvciA9ICJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgbWFya2VkIHJlZ2lvbiBhbG9uZyBlZGdlIjsKLSAgICAgICAgICAgICAgICAqb3V0VG9wID0gaTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgqb3V0RXJyb3IgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKHN0YXRlID09IFRJQ0tfSU5TSURFXzEpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBkaXYuICBNb3ZlIG9uIHRvIHRoZSBuZXh0LgotICAgICAgICAgICAgICAgICpvdXRCb3R0b20gPSBpLTE7Ci0gICAgICAgICAgICAgICAgb3V0VG9wICs9IDI7Ci0gICAgICAgICAgICAgICAgb3V0Qm90dG9tICs9IDI7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBUSUNLX09VVFNJREVfMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICpvdXRUb3AgPSBpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZWQgJiYgIWZvdW5kKSB7Ci0gICAgICAgICpvdXRFcnJvciA9ICJObyBtYXJrZWQgcmVnaW9uIGZvdW5kIGFsb25nIGVkZ2UiOwotICAgICAgICAqb3V0VG9wID0gLTE7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdGljIHN0YXR1c190IGdldF9ob3Jpem9udGFsX2xheW91dF9ib3VuZHNfdGlja3MoCi0gICAgICAgIHBuZ19ieXRlcCByb3csIGludCB3aWR0aCwgYm9vbCB0cmFuc3BhcmVudCwgYm9vbCByZXF1aXJlZCwKLSAgICAgICAgaW50MzJfdCogb3V0TGVmdCwgaW50MzJfdCogb3V0UmlnaHQsIGNvbnN0IGNoYXIqKiBvdXRFcnJvcikKLXsKLSAgICBpbnQgaTsKLSAgICAqb3V0TGVmdCA9ICpvdXRSaWdodCA9IDA7Ci0KLSAgICAvLyBMb29rIGZvciBsZWZ0IHRpY2sKLSAgICBpZiAoVElDS19UWVBFX0xBWU9VVF9CT1VORFMgPT0gdGlja190eXBlKHJvdyArIDQsIHRyYW5zcGFyZW50LCBvdXRFcnJvcikpIHsKLSAgICAgICAgLy8gU3RhcnRpbmcgd2l0aCBhIGxheW91dCBwYWRkaW5nIHRpY2sKLSAgICAgICAgaSA9IDE7Ci0gICAgICAgIHdoaWxlIChpIDwgd2lkdGggLSAxKSB7Ci0gICAgICAgICAgICAoKm91dExlZnQpKys7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBpbnQgdGljayA9IHRpY2tfdHlwZShyb3cgKyBpICogNCwgdHJhbnNwYXJlbnQsIG91dEVycm9yKTsKLSAgICAgICAgICAgIGlmICh0aWNrICE9IFRJQ0tfVFlQRV9MQVlPVVRfQk9VTkRTKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBMb29rIGZvciByaWdodCB0aWNrCi0gICAgaWYgKFRJQ0tfVFlQRV9MQVlPVVRfQk9VTkRTID09IHRpY2tfdHlwZShyb3cgKyAod2lkdGggLSAyKSAqIDQsIHRyYW5zcGFyZW50LCBvdXRFcnJvcikpIHsKLSAgICAgICAgLy8gRW5kaW5nIHdpdGggYSBsYXlvdXQgcGFkZGluZyB0aWNrCi0gICAgICAgIGkgPSB3aWR0aCAtIDI7Ci0gICAgICAgIHdoaWxlIChpID4gMSkgewotICAgICAgICAgICAgKCpvdXRSaWdodCkrKzsKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIGludCB0aWNrID0gdGlja190eXBlKHJvdytpKjQsIHRyYW5zcGFyZW50LCBvdXRFcnJvcik7Ci0gICAgICAgICAgICBpZiAodGljayAhPSBUSUNLX1RZUEVfTEFZT1VUX0JPVU5EUykgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0aWMgc3RhdHVzX3QgZ2V0X3ZlcnRpY2FsX2xheW91dF9ib3VuZHNfdGlja3MoCi0gICAgICAgIHBuZ19ieXRlcHAgcm93cywgaW50IG9mZnNldCwgaW50IGhlaWdodCwgYm9vbCB0cmFuc3BhcmVudCwgYm9vbCByZXF1aXJlZCwKLSAgICAgICAgaW50MzJfdCogb3V0VG9wLCBpbnQzMl90KiBvdXRCb3R0b20sIGNvbnN0IGNoYXIqKiBvdXRFcnJvcikKLXsKLSAgICBpbnQgaTsKLSAgICAqb3V0VG9wID0gKm91dEJvdHRvbSA9IDA7Ci0KLSAgICAvLyBMb29rIGZvciB0b3AgdGljawotICAgIGlmIChUSUNLX1RZUEVfTEFZT1VUX0JPVU5EUyA9PSB0aWNrX3R5cGUocm93c1sxXSArIG9mZnNldCwgdHJhbnNwYXJlbnQsIG91dEVycm9yKSkgewotICAgICAgICAvLyBTdGFydGluZyB3aXRoIGEgbGF5b3V0IHBhZGRpbmcgdGljawotICAgICAgICBpID0gMTsKLSAgICAgICAgd2hpbGUgKGkgPCBoZWlnaHQgLSAxKSB7Ci0gICAgICAgICAgICAoKm91dFRvcCkrKzsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGludCB0aWNrID0gdGlja190eXBlKHJvd3NbaV0gKyBvZmZzZXQsIHRyYW5zcGFyZW50LCBvdXRFcnJvcik7Ci0gICAgICAgICAgICBpZiAodGljayAhPSBUSUNLX1RZUEVfTEFZT1VUX0JPVU5EUykgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTG9vayBmb3IgYm90dG9tIHRpY2sKLSAgICBpZiAoVElDS19UWVBFX0xBWU9VVF9CT1VORFMgPT0gdGlja190eXBlKHJvd3NbaGVpZ2h0IC0gMl0gKyBvZmZzZXQsIHRyYW5zcGFyZW50LCBvdXRFcnJvcikpIHsKLSAgICAgICAgLy8gRW5kaW5nIHdpdGggYSBsYXlvdXQgcGFkZGluZyB0aWNrCi0gICAgICAgIGkgPSBoZWlnaHQgLSAyOwotICAgICAgICB3aGlsZSAoaSA+IDEpIHsKLSAgICAgICAgICAgICgqb3V0Qm90dG9tKSsrOwotICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgaW50IHRpY2sgPSB0aWNrX3R5cGUocm93c1tpXSArIG9mZnNldCwgdHJhbnNwYXJlbnQsIG91dEVycm9yKTsKLSAgICAgICAgICAgIGlmICh0aWNrICE9IFRJQ0tfVFlQRV9MQVlPVVRfQk9VTkRTKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLQotc3RhdGljIHVpbnQzMl90IGdldF9jb2xvcigKLSAgICBwbmdfYnl0ZXBwIHJvd3MsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pCi17Ci0gICAgcG5nX2J5dGVwIGNvbG9yID0gcm93c1t0b3BdICsgbGVmdCo0OwotCi0gICAgaWYgKGxlZnQgPiByaWdodCB8fCB0b3AgPiBib3R0b20pIHsKLSAgICAgICAgcmV0dXJuIFJlc19wbmdfOXBhdGNoOjpUUkFOU1BBUkVOVF9DT0xPUjsKLSAgICB9Ci0KLSAgICB3aGlsZSAodG9wIDw9IGJvdHRvbSkgewotICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgaSsrKSB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcCA9IHJvd3NbdG9wXStpKjQ7Ci0gICAgICAgICAgICBpZiAoY29sb3JbM10gPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChwWzNdICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc19wbmdfOXBhdGNoOjpOT19DT0xPUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBbMF0gIT0gY29sb3JbMF0gfHwgcFsxXSAhPSBjb2xvclsxXQotICAgICAgICAgICAgICAgICAgICAgICB8fCBwWzJdICE9IGNvbG9yWzJdIHx8IHBbM10gIT0gY29sb3JbM10pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gUmVzX3BuZ185cGF0Y2g6Ok5PX0NPTE9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRvcCsrOwotICAgIH0KLQotICAgIGlmIChjb2xvclszXSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBSZXNfcG5nXzlwYXRjaDo6VFJBTlNQQVJFTlRfQ09MT1I7Ci0gICAgfQotICAgIHJldHVybiAoY29sb3JbM108PDI0KSB8IChjb2xvclswXTw8MTYpIHwgKGNvbG9yWzFdPDw4KSB8IGNvbG9yWzJdOwotfQotCi1zdGF0aWMgdm9pZCBzZWxlY3RfcGF0Y2goCi0gICAgaW50IHdoaWNoLCBpbnQgZnJvbnQsIGludCBiYWNrLCBpbnQgc2l6ZSwgaW50KiBzdGFydCwgaW50KiBlbmQpCi17Ci0gICAgc3dpdGNoICh3aGljaCkgewotICAgIGNhc2UgMDoKLSAgICAgICAgKnN0YXJ0ID0gMDsKLSAgICAgICAgKmVuZCA9IGZyb250LTE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgICAgKnN0YXJ0ID0gZnJvbnQ7Ci0gICAgICAgICplbmQgPSBiYWNrLTE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgKnN0YXJ0ID0gYmFjazsKLSAgICAgICAgKmVuZCA9IHNpemUtMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdWludDMyX3QgZ2V0X2NvbG9yKGltYWdlX2luZm8qIGltYWdlLCBpbnQgaHBhdGNoLCBpbnQgdnBhdGNoKQotewotICAgIGludCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b207Ci0gICAgc2VsZWN0X3BhdGNoKAotICAgICAgICBocGF0Y2gsIGltYWdlLT5pbmZvOVBhdGNoLnhEaXZzWzBdLCBpbWFnZS0+aW5mbzlQYXRjaC54RGl2c1sxXSwKLSAgICAgICAgaW1hZ2UtPndpZHRoLCAmbGVmdCwgJnJpZ2h0KTsKLSAgICBzZWxlY3RfcGF0Y2goCi0gICAgICAgIHZwYXRjaCwgaW1hZ2UtPmluZm85UGF0Y2gueURpdnNbMF0sIGltYWdlLT5pbmZvOVBhdGNoLnlEaXZzWzFdLAotICAgICAgICBpbWFnZS0+aGVpZ2h0LCAmdG9wLCAmYm90dG9tKTsKLSAgICAvL3ByaW50ZigiU2VsZWN0aW5nIGg9JWQgdj0lZDogKCVkLCVkKS0oJWQsJWQpXG4iLAotICAgIC8vICAgICAgIGhwYXRjaCwgdnBhdGNoLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIGNvbnN0IHVpbnQzMl90IGMgPSBnZXRfY29sb3IoaW1hZ2UtPnJvd3MsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgTk9JU1kocHJpbnRmKCJDb2xvciBpbiAoJWQsJWQpLSglZCwlZCk6ICMlMDh4XG4iLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGMpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotc3RhdGljIHN0YXR1c190IGRvXzlwYXRjaChjb25zdCBjaGFyKiBpbWFnZU5hbWUsIGltYWdlX2luZm8qIGltYWdlKQotewotICAgIGltYWdlLT5pczlQYXRjaCA9IHRydWU7Ci0KLSAgICBpbnQgVyA9IGltYWdlLT53aWR0aDsKLSAgICBpbnQgSCA9IGltYWdlLT5oZWlnaHQ7Ci0gICAgaW50IGksIGo7Ci0KLSAgICBpbnQgbWF4U2l6ZVhEaXZzID0gVyAqIHNpemVvZihpbnQzMl90KTsKLSAgICBpbnQgbWF4U2l6ZVlEaXZzID0gSCAqIHNpemVvZihpbnQzMl90KTsKLSAgICBpbnQzMl90KiB4RGl2cyA9IGltYWdlLT5pbmZvOVBhdGNoLnhEaXZzID0gKGludDMyX3QqKSBtYWxsb2MobWF4U2l6ZVhEaXZzKTsKLSAgICBpbnQzMl90KiB5RGl2cyA9IGltYWdlLT5pbmZvOVBhdGNoLnlEaXZzID0gKGludDMyX3QqKSBtYWxsb2MobWF4U2l6ZVlEaXZzKTsKLSAgICB1aW50OF90IG51bVhEaXZzID0gMDsKLSAgICB1aW50OF90IG51bVlEaXZzID0gMDsKLQotICAgIGludDhfdCBudW1Db2xvcnM7Ci0gICAgaW50IG51bVJvd3M7Ci0gICAgaW50IG51bUNvbHM7Ci0gICAgaW50IHRvcDsKLSAgICBpbnQgbGVmdDsKLSAgICBpbnQgcmlnaHQ7Ci0gICAgaW50IGJvdHRvbTsKLSAgICBtZW1zZXQoeERpdnMsIC0xLCBtYXhTaXplWERpdnMpOwotICAgIG1lbXNldCh5RGl2cywgLTEsIG1heFNpemVZRGl2cyk7Ci0gICAgaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ0xlZnQgPSBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nUmlnaHQgPQotICAgICAgICBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nVG9wID0gaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ0JvdHRvbSA9IC0xOwotCi0gICAgaW1hZ2UtPmxheW91dEJvdW5kc0xlZnQgPSBpbWFnZS0+bGF5b3V0Qm91bmRzUmlnaHQgPQotICAgICAgICBpbWFnZS0+bGF5b3V0Qm91bmRzVG9wID0gaW1hZ2UtPmxheW91dEJvdW5kc0JvdHRvbSA9IDA7Ci0KLSAgICBwbmdfYnl0ZXAgcCA9IGltYWdlLT5yb3dzWzBdOwotICAgIGJvb2wgdHJhbnNwYXJlbnQgPSBwWzNdID09IDA7Ci0gICAgYm9vbCBoYXNDb2xvciA9IGZhbHNlOwotCi0gICAgY29uc3QgY2hhciogZXJyb3JNc2cgPSBOVUxMOwotICAgIGludCBlcnJvclBpeGVsID0gLTE7Ci0gICAgY29uc3QgY2hhciogZXJyb3JFZGdlID0gTlVMTDsKLQotICAgIGludCBjb2xvckluZGV4ID0gMDsKLQotICAgIC8vIFZhbGlkYXRlIHNpemUuLi4KLSAgICBpZiAoVyA8IDMgfHwgSCA8IDMpIHsKLSAgICAgICAgZXJyb3JNc2cgPSAiSW1hZ2UgbXVzdCBiZSBhdCBsZWFzdCAzeDMgKDF4MSB3aXRob3V0IGZyYW1lKSBwaXhlbHMiOwotICAgICAgICBnb3RvIGdldG91dDsKLSAgICB9Ci0KLSAgICAvLyBWYWxpZGF0ZSBmcmFtZS4uLgotICAgIGlmICghdHJhbnNwYXJlbnQgJiYKLSAgICAgICAgKHBbMF0gIT0gMHhGRiB8fCBwWzFdICE9IDB4RkYgfHwgcFsyXSAhPSAweEZGIHx8IHBbM10gIT0gMHhGRikpIHsKLSAgICAgICAgZXJyb3JNc2cgPSAiTXVzdCBoYXZlIG9uZS1waXhlbCBmcmFtZSB0aGF0IGlzIGVpdGhlciB0cmFuc3BhcmVudCBvciB3aGl0ZSI7Ci0gICAgICAgIGdvdG8gZ2V0b3V0OwotICAgIH0KLQotICAgIC8vIEZpbmQgbGVmdCBhbmQgcmlnaHQgb2Ygc2l6aW5nIGFyZWFzLi4uCi0gICAgaWYgKGdldF9ob3Jpem9udGFsX3RpY2tzKHAsIFcsIHRyYW5zcGFyZW50LCB0cnVlLCAmeERpdnNbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4RGl2c1sxXSwgJmVycm9yTXNnLCAmbnVtWERpdnMsIHRydWUpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGVycm9yUGl4ZWwgPSB4RGl2c1swXTsKLSAgICAgICAgZXJyb3JFZGdlID0gInRvcCI7Ci0gICAgICAgIGdvdG8gZ2V0b3V0OwotICAgIH0KLQotICAgIC8vIEZpbmQgdG9wIGFuZCBib3R0b20gb2Ygc2l6aW5nIGFyZWFzLi4uCi0gICAgaWYgKGdldF92ZXJ0aWNhbF90aWNrcyhpbWFnZS0+cm93cywgMCwgSCwgdHJhbnNwYXJlbnQsIHRydWUsICZ5RGl2c1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5RGl2c1sxXSwgJmVycm9yTXNnLCAmbnVtWURpdnMsIHRydWUpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGVycm9yUGl4ZWwgPSB5RGl2c1swXTsKLSAgICAgICAgZXJyb3JFZGdlID0gImxlZnQiOwotICAgICAgICBnb3RvIGdldG91dDsKLSAgICB9Ci0KLSAgICAvLyBDb3B5IHBhdGNoIHNpemUgZGF0YSBpbnRvIGltYWdlLi4uCi0gICAgaW1hZ2UtPmluZm85UGF0Y2gubnVtWERpdnMgPSBudW1YRGl2czsKLSAgICBpbWFnZS0+aW5mbzlQYXRjaC5udW1ZRGl2cyA9IG51bVlEaXZzOwotCi0gICAgLy8gRmluZCBsZWZ0IGFuZCByaWdodCBvZiBwYWRkaW5nIGFyZWEuLi4KLSAgICBpZiAoZ2V0X2hvcml6b250YWxfdGlja3MoaW1hZ2UtPnJvd3NbSC0xXSwgVywgdHJhbnNwYXJlbnQsIGZhbHNlLCAmaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ0xlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nUmlnaHQsICZlcnJvck1zZywgTlVMTCwgZmFsc2UpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGVycm9yUGl4ZWwgPSBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nTGVmdDsKLSAgICAgICAgZXJyb3JFZGdlID0gImJvdHRvbSI7Ci0gICAgICAgIGdvdG8gZ2V0b3V0OwotICAgIH0KLQotICAgIC8vIEZpbmQgdG9wIGFuZCBib3R0b20gb2YgcGFkZGluZyBhcmVhLi4uCi0gICAgaWYgKGdldF92ZXJ0aWNhbF90aWNrcyhpbWFnZS0+cm93cywgKFctMSkqNCwgSCwgdHJhbnNwYXJlbnQsIGZhbHNlLCAmaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ1RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nQm90dG9tLCAmZXJyb3JNc2csIE5VTEwsIGZhbHNlKSAhPSBOT19FUlJPUikgewotICAgICAgICBlcnJvclBpeGVsID0gaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ1RvcDsKLSAgICAgICAgZXJyb3JFZGdlID0gInJpZ2h0IjsKLSAgICAgICAgZ290byBnZXRvdXQ7Ci0gICAgfQotCi0gICAgLy8gRmluZCBsZWZ0IGFuZCByaWdodCBvZiBsYXlvdXQgcGFkZGluZy4uLgotICAgIGdldF9ob3Jpem9udGFsX2xheW91dF9ib3VuZHNfdGlja3MoaW1hZ2UtPnJvd3NbSC0xXSwgVywgdHJhbnNwYXJlbnQsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbWFnZS0+bGF5b3V0Qm91bmRzTGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW1hZ2UtPmxheW91dEJvdW5kc1JpZ2h0LCAmZXJyb3JNc2cpOwotCi0gICAgZ2V0X3ZlcnRpY2FsX2xheW91dF9ib3VuZHNfdGlja3MoaW1hZ2UtPnJvd3MsIChXLTEpKjQsIEgsIHRyYW5zcGFyZW50LCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW1hZ2UtPmxheW91dEJvdW5kc1RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW1hZ2UtPmxheW91dEJvdW5kc0JvdHRvbSwgJmVycm9yTXNnKTsKLQotICAgIGltYWdlLT5oYXZlTGF5b3V0Qm91bmRzID0gaW1hZ2UtPmxheW91dEJvdW5kc0xlZnQgIT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGltYWdlLT5sYXlvdXRCb3VuZHNSaWdodCAhPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaW1hZ2UtPmxheW91dEJvdW5kc1RvcCAhPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaW1hZ2UtPmxheW91dEJvdW5kc0JvdHRvbSAhPSAwOwotCi0gICAgaWYgKGltYWdlLT5oYXZlTGF5b3V0Qm91bmRzKSB7Ci0gICAgICAgIE5PSVNZKHByaW50ZigibGF5b3V0Qm91bmRzPSVkICVkICVkICVkXG4iLCBpbWFnZS0+bGF5b3V0Qm91bmRzTGVmdCwgaW1hZ2UtPmxheW91dEJvdW5kc1RvcCwKLSAgICAgICAgICAgICAgICBpbWFnZS0+bGF5b3V0Qm91bmRzUmlnaHQsIGltYWdlLT5sYXlvdXRCb3VuZHNCb3R0b20pKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBwYWRkaW5nIGlzIG5vdCB5ZXQgc3BlY2lmaWVkLCB0YWtlIHZhbHVlcyBmcm9tIHNpemUuCi0gICAgaWYgKGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdMZWZ0IDwgMCkgewotICAgICAgICBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nTGVmdCA9IHhEaXZzWzBdOwotICAgICAgICBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nUmlnaHQgPSBXIC0gMiAtIHhEaXZzWzFdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEFkanVzdCB2YWx1ZSB0byBiZSBjb3JyZWN0IQotICAgICAgICBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nUmlnaHQgPSBXIC0gMiAtIGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdSaWdodDsKLSAgICB9Ci0gICAgaWYgKGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdUb3AgPCAwKSB7Ci0gICAgICAgIGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdUb3AgPSB5RGl2c1swXTsKLSAgICAgICAgaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ0JvdHRvbSA9IEggLSAyIC0geURpdnNbMV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQWRqdXN0IHZhbHVlIHRvIGJlIGNvcnJlY3QhCi0gICAgICAgIGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdCb3R0b20gPSBIIC0gMiAtIGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdCb3R0b207Ci0gICAgfQotCi0gICAgTk9JU1kocHJpbnRmKCJTaXplIHRpY2tzIGZvciAlczogeDA9JWQsIHgxPSVkLCB5MD0lZCwgeTE9JWRcbiIsIGltYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgaW1hZ2UtPmluZm85UGF0Y2gueERpdnNbMF0sIGltYWdlLT5pbmZvOVBhdGNoLnhEaXZzWzFdLAotICAgICAgICAgICAgICAgICBpbWFnZS0+aW5mbzlQYXRjaC55RGl2c1swXSwgaW1hZ2UtPmluZm85UGF0Y2gueURpdnNbMV0pKTsKLSAgICBOT0lTWShwcmludGYoInBhZGRpbmcgdGlja3MgZm9yICVzOiBsPSVkLCByPSVkLCB0PSVkLCBiPSVkXG4iLCBpbWFnZU5hbWUsCi0gICAgICAgICAgICAgICAgIGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdMZWZ0LCBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nUmlnaHQsCi0gICAgICAgICAgICAgICAgIGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdUb3AsIGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdCb3R0b20pKTsKLQotICAgIC8vIFJlbW92ZSBmcmFtZSBmcm9tIGltYWdlLgotICAgIGltYWdlLT5yb3dzID0gKHBuZ19ieXRlcHApbWFsbG9jKChILTIpICogc2l6ZW9mKHBuZ19ieXRlcCkpOwotICAgIGZvciAoaT0wOyBpPChILTIpOyBpKyspIHsKLSAgICAgICAgaW1hZ2UtPnJvd3NbaV0gPSBpbWFnZS0+YWxsb2NSb3dzW2krMV07Ci0gICAgICAgIG1lbW1vdmUoaW1hZ2UtPnJvd3NbaV0sIGltYWdlLT5yb3dzW2ldKzQsIChXLTIpKjQpOwotICAgIH0KLSAgICBpbWFnZS0+d2lkdGggLT0gMjsKLSAgICBXID0gaW1hZ2UtPndpZHRoOwotICAgIGltYWdlLT5oZWlnaHQgLT0gMjsKLSAgICBIID0gaW1hZ2UtPmhlaWdodDsKLQotICAgIC8vIEZpZ3VyZSBvdXQgdGhlIG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zIGluIHRoZSBOLXBhdGNoCi0gICAgbnVtQ29scyA9IG51bVhEaXZzICsgMTsKLSAgICBpZiAoeERpdnNbMF0gPT0gMCkgeyAgLy8gQ29sdW1uIDEgaXMgc3RyZWNoYWJsZQotICAgICAgICBudW1Db2xzLS07Ci0gICAgfQotICAgIGlmICh4RGl2c1tudW1YRGl2cyAtIDFdID09IFcpIHsKLSAgICAgICAgbnVtQ29scy0tOwotICAgIH0KLSAgICBudW1Sb3dzID0gbnVtWURpdnMgKyAxOwotICAgIGlmICh5RGl2c1swXSA9PSAwKSB7ICAvLyBSb3cgMSBpcyBzdHJlY2hhYmxlCi0gICAgICAgIG51bVJvd3MtLTsKLSAgICB9Ci0gICAgaWYgKHlEaXZzW251bVlEaXZzIC0gMV0gPT0gSCkgewotICAgICAgICBudW1Sb3dzLS07Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBhbW91bnQgb2Ygcm93cyBhbmQgY29sdW1ucyB3aWxsIGZpdCBpbiB0aGUgbnVtYmVyIG9mCi0gICAgLy8gY29sb3JzIHdlIGNhbiB1c2UgaW4gdGhlIDktcGF0Y2ggZm9ybWF0LgotICAgIGlmIChudW1Sb3dzICogbnVtQ29scyA+IDB4N0YpIHsKLSAgICAgICAgZXJyb3JNc2cgPSAiVG9vIG1hbnkgcm93cyBhbmQgY29sdW1ucyBpbiA5LXBhdGNoIHBlcmltZXRlciI7Ci0gICAgICAgIGdvdG8gZ2V0b3V0OwotICAgIH0KLQotICAgIG51bUNvbG9ycyA9IG51bVJvd3MgKiBudW1Db2xzOwotICAgIGltYWdlLT5pbmZvOVBhdGNoLm51bUNvbG9ycyA9IG51bUNvbG9yczsKLSAgICBpbWFnZS0+aW5mbzlQYXRjaC5jb2xvcnMgPSAodWludDMyX3QqKW1hbGxvYyhudW1Db2xvcnMgKiBzaXplb2YodWludDMyX3QpKTsKLQotICAgIC8vIEZpbGwgaW4gY29sb3IgaW5mb3JtYXRpb24gZm9yIGVhY2ggcGF0Y2guCi0KLSAgICB1aW50MzJfdCBjOwotICAgIHRvcCA9IDA7Ci0KLSAgICAvLyBUaGUgZmlyc3Qgcm93IGFsd2F5cyBzdGFydHMgd2l0aCB0aGUgdG9wIGJlaW5nIGF0IHk9MCBhbmQgdGhlIGJvdHRvbQotICAgIC8vIGJlaW5nIGVpdGhlciB5RGl2c1sxXSAoaWYgeURpdnNbMF09MCkgb2YgeURpdnNbMF0uICBJbiB0aGUgZm9ybWVyIGNhc2UKLSAgICAvLyB0aGUgZmlyc3Qgcm93IGlzIHN0cmV0Y2hhYmxlIGFsb25nIHRoZSBZIGF4aXMsIG90aGVyd2lzZSBpdCBpcyBmaXhlZC4KLSAgICAvLyBUaGUgbGFzdCByb3cgYWx3YXlzIGVuZHMgd2l0aCB0aGUgYm90dG9tIGJlaW5nIGJpdG1hcC5oZWlnaHQgYW5kIHRoZSB0b3AKLSAgICAvLyBiZWluZyBlaXRoZXIgeURpdnNbbnVtWURpdnMtMl0gKGlmIHlEaXZzW251bVlEaXZzLTFdPWJpdG1hcC5oZWlnaHQpIG9yCi0gICAgLy8geURpdnNbbnVtWURpdnMtMV0uIEluIHRoZSBmb3JtZXIgY2FzZSB0aGUgbGFzdCByb3cgaXMgc3RyZXRjaGFibGUgYWxvbmcKLSAgICAvLyB0aGUgWSBheGlzLCBvdGhlcndpc2UgaXQgaXMgZml4ZWQuCi0gICAgLy8KLSAgICAvLyBUaGUgZmlyc3QgYW5kIGxhc3QgY29sdW1ucyBhcmUgc2ltaWxhcmx5IHRyZWF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBYCi0gICAgLy8gYXhpcy4KLSAgICAvLwotICAgIC8vIFRoZSBhYm92ZSBpcyB0byBoZWxwIGV4cGxhaW4gc29tZSBvZiB0aGUgc3BlY2lhbCBjYXNpbmcgdGhhdCBnb2VzIG9uIHRoZQotICAgIC8vIGNvZGUgYmVsb3cuCi0KLSAgICAvLyBUaGUgaW5pdGlhbCB5RGl2IGFuZCB3aGV0aGVyIHRoZSBmaXJzdCByb3cgaXMgY29uc2lkZXJlZCBzdHJldGNoYWJsZSBvcgotICAgIC8vIG5vdCBkZXBlbmRzIG9uIHdoZXRoZXIgeURpdlswXSB3YXMgemVybyBvciBub3QuCi0gICAgZm9yIChqID0gKHlEaXZzWzBdID09IDAgPyAxIDogMCk7Ci0gICAgICAgICAgaiA8PSBudW1ZRGl2cyAmJiB0b3AgPCBIOwotICAgICAgICAgIGorKykgewotICAgICAgICBpZiAoaiA9PSBudW1ZRGl2cykgewotICAgICAgICAgICAgYm90dG9tID0gSDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJvdHRvbSA9IHlEaXZzW2pdOwotICAgICAgICB9Ci0gICAgICAgIGxlZnQgPSAwOwotICAgICAgICAvLyBUaGUgaW5pdGlhbCB4RGl2IGFuZCB3aGV0aGVyIHRoZSBmaXJzdCBjb2x1bW4gaXMgY29uc2lkZXJlZAotICAgICAgICAvLyBzdHJldGNoYWJsZSBvciBub3QgZGVwZW5kcyBvbiB3aGV0aGVyIHhEaXZbMF0gd2FzIHplcm8gb3Igbm90LgotICAgICAgICBmb3IgKGkgPSB4RGl2c1swXSA9PSAwID8gMSA6IDA7Ci0gICAgICAgICAgICAgIGkgPD0gbnVtWERpdnMgJiYgbGVmdCA8IFc7Ci0gICAgICAgICAgICAgIGkrKykgewotICAgICAgICAgICAgaWYgKGkgPT0gbnVtWERpdnMpIHsKLSAgICAgICAgICAgICAgICByaWdodCA9IFc7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJpZ2h0ID0geERpdnNbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjID0gZ2V0X2NvbG9yKGltYWdlLT5yb3dzLCBsZWZ0LCB0b3AsIHJpZ2h0IC0gMSwgYm90dG9tIC0gMSk7Ci0gICAgICAgICAgICBpbWFnZS0+aW5mbzlQYXRjaC5jb2xvcnNbY29sb3JJbmRleCsrXSA9IGM7Ci0gICAgICAgICAgICBOT0lTWShpZiAoYyAhPSBSZXNfcG5nXzlwYXRjaDo6Tk9fQ09MT1IpIGhhc0NvbG9yID0gdHJ1ZSk7Ci0gICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7Ci0gICAgICAgIH0KLSAgICAgICAgdG9wID0gYm90dG9tOwotICAgIH0KLQotICAgIGFzc2VydChjb2xvckluZGV4ID09IG51bUNvbG9ycyk7Ci0KLSAgICBmb3IgKGk9MDsgaTxudW1Db2xvcnM7IGkrKykgewotICAgICAgICBpZiAoaGFzQ29sb3IpIHsKLSAgICAgICAgICAgIGlmIChpID09IDApIHByaW50ZigiQ29sb3JzIGluICVzOlxuICIsIGltYWdlTmFtZSk7Ci0gICAgICAgICAgICBwcmludGYoIiAjJTA4eCIsIGltYWdlLT5pbmZvOVBhdGNoLmNvbG9yc1tpXSk7Ci0gICAgICAgICAgICBpZiAoaSA9PSBudW1Db2xvcnMgLSAxKSBwcmludGYoIlxuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbWFnZS0+aXM5UGF0Y2ggPSB0cnVlOwotICAgIGltYWdlLT5pbmZvOVBhdGNoLmRldmljZVRvRmlsZSgpOwotCi1nZXRvdXQ6Ci0gICAgaWYgKGVycm9yTXNnKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgIkVSUk9SOiA5LXBhdGNoIGltYWdlICVzIG1hbGZvcm1lZC5cbiIKLSAgICAgICAgICAgICIgICAgICAgJXMuXG4iLCBpbWFnZU5hbWUsIGVycm9yTXNnKTsKLSAgICAgICAgaWYgKGVycm9yRWRnZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoZXJyb3JQaXhlbCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICIgICAgICAgRm91bmQgYXQgcGl4ZWwgIyVkIGFsb25nICVzIGVkZ2UuXG4iLCBlcnJvclBpeGVsLCBlcnJvckVkZ2UpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgIiAgICAgICBGb3VuZCBhbG9uZyAlcyBlZGdlLlxuIiwgZXJyb3JFZGdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja05pbmVQYXRjaFNlcmlhbGl6YXRpb24oUmVzX3BuZ185cGF0Y2gqIGluUGF0Y2gsICB2b2lkICogZGF0YSkKLXsKLSAgICBpZiAoc2l6ZW9mKHZvaWQqKSAhPSBzaXplb2YoaW50MzJfdCkpIHsKLSAgICAgICAgLy8gY2FuJ3QgZGVzZXJpYWxpemUgb24gYSBub24tMzIgYml0IHN5c3RlbQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNpemVfdCBwYXRjaFNpemUgPSBpblBhdGNoLT5zZXJpYWxpemVkU2l6ZSgpOwotICAgIHZvaWQgKiBuZXdEYXRhID0gbWFsbG9jKHBhdGNoU2l6ZSk7Ci0gICAgbWVtY3B5KG5ld0RhdGEsIGRhdGEsIHBhdGNoU2l6ZSk7Ci0gICAgUmVzX3BuZ185cGF0Y2gqIG91dFBhdGNoID0gaW5QYXRjaC0+ZGVzZXJpYWxpemUobmV3RGF0YSk7Ci0gICAgLy8gZGVzZXJpYWxpemF0aW9uIGlzIGRvbmUgaW4gcGxhY2UsIHNvIG91dFBhdGNoID09IG5ld0RhdGEKLSAgICBhc3NlcnQob3V0UGF0Y2ggPT0gbmV3RGF0YSk7Ci0gICAgYXNzZXJ0KG91dFBhdGNoLT5udW1YRGl2cyA9PSBpblBhdGNoLT5udW1YRGl2cyk7Ci0gICAgYXNzZXJ0KG91dFBhdGNoLT5udW1ZRGl2cyA9PSBpblBhdGNoLT5udW1ZRGl2cyk7Ci0gICAgYXNzZXJ0KG91dFBhdGNoLT5wYWRkaW5nTGVmdCA9PSBpblBhdGNoLT5wYWRkaW5nTGVmdCk7Ci0gICAgYXNzZXJ0KG91dFBhdGNoLT5wYWRkaW5nUmlnaHQgPT0gaW5QYXRjaC0+cGFkZGluZ1JpZ2h0KTsKLSAgICBhc3NlcnQob3V0UGF0Y2gtPnBhZGRpbmdUb3AgPT0gaW5QYXRjaC0+cGFkZGluZ1RvcCk7Ci0gICAgYXNzZXJ0KG91dFBhdGNoLT5wYWRkaW5nQm90dG9tID09IGluUGF0Y2gtPnBhZGRpbmdCb3R0b20pOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0UGF0Y2gtPm51bVhEaXZzOyBpKyspIHsKLSAgICAgICAgYXNzZXJ0KG91dFBhdGNoLT54RGl2c1tpXSA9PSBpblBhdGNoLT54RGl2c1tpXSk7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0UGF0Y2gtPm51bVlEaXZzOyBpKyspIHsKLSAgICAgICAgYXNzZXJ0KG91dFBhdGNoLT55RGl2c1tpXSA9PSBpblBhdGNoLT55RGl2c1tpXSk7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0UGF0Y2gtPm51bUNvbG9yczsgaSsrKSB7Ci0gICAgICAgIGFzc2VydChvdXRQYXRjaC0+Y29sb3JzW2ldID09IGluUGF0Y2gtPmNvbG9yc1tpXSk7Ci0gICAgfQotICAgIGZyZWUobmV3RGF0YSk7Ci19Ci0KLXN0YXRpYyBib29sIHBhdGNoX2VxdWFscyhSZXNfcG5nXzlwYXRjaCYgcGF0Y2gxLCBSZXNfcG5nXzlwYXRjaCYgcGF0Y2gyKSB7Ci0gICAgaWYgKCEocGF0Y2gxLm51bVhEaXZzID09IHBhdGNoMi5udW1YRGl2cyAmJgotICAgICAgICAgIHBhdGNoMS5udW1ZRGl2cyA9PSBwYXRjaDIubnVtWURpdnMgJiYKLSAgICAgICAgICBwYXRjaDEubnVtQ29sb3JzID09IHBhdGNoMi5udW1Db2xvcnMgJiYKLSAgICAgICAgICBwYXRjaDEucGFkZGluZ0xlZnQgPT0gcGF0Y2gyLnBhZGRpbmdMZWZ0ICYmCi0gICAgICAgICAgcGF0Y2gxLnBhZGRpbmdSaWdodCA9PSBwYXRjaDIucGFkZGluZ1JpZ2h0ICYmCi0gICAgICAgICAgcGF0Y2gxLnBhZGRpbmdUb3AgPT0gcGF0Y2gyLnBhZGRpbmdUb3AgJiYKLSAgICAgICAgICBwYXRjaDEucGFkZGluZ0JvdHRvbSA9PSBwYXRjaDIucGFkZGluZ0JvdHRvbSkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRjaDEubnVtQ29sb3JzOyBpKyspIHsKLSAgICAgICAgaWYgKHBhdGNoMS5jb2xvcnNbaV0gIT0gcGF0Y2gyLmNvbG9yc1tpXSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0Y2gxLm51bVhEaXZzOyBpKyspIHsKLSAgICAgICAgaWYgKHBhdGNoMS54RGl2c1tpXSAhPSBwYXRjaDIueERpdnNbaV0pIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhdGNoMS5udW1ZRGl2czsgaSsrKSB7Ci0gICAgICAgIGlmIChwYXRjaDEueURpdnNbaV0gIT0gcGF0Y2gyLnlEaXZzW2ldKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGR1bXBfaW1hZ2UoaW50IHcsIGludCBoLCBwbmdfYnl0ZXBwIHJvd3MsIGludCBjb2xvcl90eXBlKQotewotICAgIGludCBpLCBqLCByciwgZ2csIGJiLCBhYTsKLQotICAgIGludCBicHA7Ci0gICAgaWYgKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUEFMRVRURSB8fCBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVkpIHsKLSAgICAgICAgYnBwID0gMTsKLSAgICB9IGVsc2UgaWYgKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWV9BTFBIQSkgewotICAgICAgICBicHAgPSAyOwotICAgIH0gZWxzZSBpZiAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0IgfHwgY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEEpIHsKLSAgICAgICAgLy8gV2UgdXNlIGEgcGFkZGluZyBieXRlIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBhbHBoYQotICAgICAgICBicHAgPSA0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50ZigiVW5rbm93biBjb2xvciB0eXBlICVkLlxuIiwgY29sb3JfdHlwZSk7Ci0gICAgfQotCi0gICAgZm9yIChqID0gMDsgaiA8IGg7IGorKykgewotICAgICAgICBwbmdfYnl0ZXAgcm93ID0gcm93c1tqXTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHc7IGkrKykgewotICAgICAgICAgICAgcnIgPSByb3dbMF07Ci0gICAgICAgICAgICBnZyA9IHJvd1sxXTsKLSAgICAgICAgICAgIGJiID0gcm93WzJdOwotICAgICAgICAgICAgYWEgPSByb3dbM107Ci0gICAgICAgICAgICByb3cgKz0gYnBwOwotCi0gICAgICAgICAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJSb3cgJWQ6Iiwgaik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzd2l0Y2ggKGJwcCkgewotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIHByaW50ZigiICglZCkiLCBycik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgKCVkICVkIiwgcnIsIGdnKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICBwcmludGYoIiAoJWQgJWQgJWQpIiwgcnIsIGdnLCBiYik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgKCVkICVkICVkICVkKSIsIHJyLCBnZywgYmIsIGFhKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpID09ICh3IC0gMSkpIHsKLSAgICAgICAgICAgICAgICBOT0lTWShwcmludGYoIlxuIikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi0jZGVmaW5lIE1BWChhLGIpICgoYSk+KGIpPyhhKTooYikpCi0jZGVmaW5lIEFCUyhhKSAgICgoYSk8MD8tKGEpOihhKSkKLQotc3RhdGljIHZvaWQgYW5hbHl6ZV9pbWFnZShjb25zdCBjaGFyICppbWFnZU5hbWUsIGltYWdlX2luZm8gJmltYWdlSW5mbywgaW50IGdyYXlzY2FsZVRvbGVyYW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2NvbG9ycCByZ2JQYWxldHRlLCBwbmdfYnl0ZXAgYWxwaGFQYWxldHRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBhbGV0dGVFbnRyaWVzLCBib29sICpoYXNUcmFuc3BhcmVuY3ksIGludCAqY29sb3JUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZXBwIG91dFJvd3MpCi17Ci0gICAgaW50IHcgPSBpbWFnZUluZm8ud2lkdGg7Ci0gICAgaW50IGggPSBpbWFnZUluZm8uaGVpZ2h0OwotICAgIGludCBpLCBqLCByciwgZ2csIGJiLCBhYSwgaWR4OwotICAgIHVpbnQzMl90IGNvbG9yc1syNTZdLCBjb2w7Ci0gICAgaW50IG51bV9jb2xvcnMgPSAwOwotICAgIGludCBtYXhHcmF5RGV2aWF0aW9uID0gMDsKLQotICAgIGJvb2wgaXNPcGFxdWUgPSB0cnVlOwotICAgIGJvb2wgaXNQYWxldHRlID0gdHJ1ZTsKLSAgICBib29sIGlzR3JheXNjYWxlID0gdHJ1ZTsKLQotICAgIC8vIFNjYW4gdGhlIGVudGlyZSBpbWFnZSBhbmQgZGV0ZXJtaW5lIGlmOgotICAgIC8vIDEuIEV2ZXJ5IHBpeGVsIGhhcyBSID09IEcgPT0gQiAoZ3JheXNjYWxlKQotICAgIC8vIDIuIEV2ZXJ5IHBpeGVsIGhhcyBBID09IDI1NSAob3BhcXVlKQotICAgIC8vIDMuIFRoZXJlIGFyZSBubyBtb3JlIHRoYW4gMjU2IGRpc3RpbmN0IFJHQkEgY29sb3JzCi0KLSAgICAvLyBOT0lTWShwcmludGYoIkluaXRpYWwgaW1hZ2UgZGF0YTpcbiIpKTsKLSAgICAvLyBkdW1wX2ltYWdlKHcsIGgsIGltYWdlSW5mby5yb3dzLCBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEEpOwotCi0gICAgZm9yIChqID0gMDsgaiA8IGg7IGorKykgewotICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW1hZ2VJbmZvLnJvd3Nbal07Ci0gICAgICAgIHBuZ19ieXRlcCBvdXQgPSBvdXRSb3dzW2pdOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdzsgaSsrKSB7Ci0gICAgICAgICAgICByciA9ICpyb3crKzsKLSAgICAgICAgICAgIGdnID0gKnJvdysrOwotICAgICAgICAgICAgYmIgPSAqcm93Kys7Ci0gICAgICAgICAgICBhYSA9ICpyb3crKzsKLQotICAgICAgICAgICAgaW50IG9kZXYgPSBtYXhHcmF5RGV2aWF0aW9uOwotICAgICAgICAgICAgbWF4R3JheURldmlhdGlvbiA9IE1BWChBQlMocnIgLSBnZyksIG1heEdyYXlEZXZpYXRpb24pOwotICAgICAgICAgICAgbWF4R3JheURldmlhdGlvbiA9IE1BWChBQlMoZ2cgLSBiYiksIG1heEdyYXlEZXZpYXRpb24pOwotICAgICAgICAgICAgbWF4R3JheURldmlhdGlvbiA9IE1BWChBQlMoYmIgLSByciksIG1heEdyYXlEZXZpYXRpb24pOwotICAgICAgICAgICAgaWYgKG1heEdyYXlEZXZpYXRpb24gPiBvZGV2KSB7Ci0gICAgICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJOZXcgbWF4IGRldi4gPSAlZCBhdCBwaXhlbCAoJWQsICVkKSA9ICglZCAlZCAlZCAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEdyYXlEZXZpYXRpb24sIGksIGosIHJyLCBnZywgYmIsIGFhKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGlmIGltYWdlIGlzIHJlYWxseSBncmF5c2NhbGUKLSAgICAgICAgICAgIGlmIChpc0dyYXlzY2FsZSkgewotICAgICAgICAgICAgICAgIGlmIChyciAhPSBnZyB8fCByciAhPSBiYikgewotICAgICAgICAgICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJGb3VuZCBhIG5vbi1ncmF5IHBpeGVsIGF0ICVkLCAlZCA9ICglZCAlZCAlZCAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgaiwgcnIsIGdnLCBiYiwgYWEpKTsKLSAgICAgICAgICAgICAgICAgICAgaXNHcmF5c2NhbGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGlmIGltYWdlIGlzIHJlYWxseSBvcGFxdWUKLSAgICAgICAgICAgIGlmIChpc09wYXF1ZSkgewotICAgICAgICAgICAgICAgIGlmIChhYSAhPSAweGZmKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5PSVNZKHByaW50ZigiRm91bmQgYSBub24tb3BhcXVlIHBpeGVsIGF0ICVkLCAlZCA9ICglZCAlZCAlZCAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBqLCByciwgZ2csIGJiLCBhYSkpOwotICAgICAgICAgICAgICAgICAgICBpc09wYXF1ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaW1hZ2UgaXMgcmVhbGx5IDw9IDI1NiBjb2xvcnMKLSAgICAgICAgICAgIGlmIChpc1BhbGV0dGUpIHsKLSAgICAgICAgICAgICAgICBjb2wgPSAodWludDMyX3QpICgocnIgPDwgMjQpIHwgKGdnIDw8IDE2KSB8IChiYiA8PCA4KSB8IGFhKTsKLSAgICAgICAgICAgICAgICBib29sIG1hdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBudW1fY29sb3JzOyBpZHgrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29sb3JzW2lkeF0gPT0gY29sKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBwYWxldHRlIGluZGV4IGZvciB0aGUgcGl4ZWwgdG8gb3V0Um93cyBvcHRpbWlzdGljYWxseQotICAgICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IG92ZXJ3cml0ZSBpdCBsYXRlciBpZiB3ZSBkZWNpZGUgdG8gZW5jb2RlIGFzIGdyYXkgb3IKLSAgICAgICAgICAgICAgICAvLyBncmF5ICsgYWxwaGEKLSAgICAgICAgICAgICAgICAqb3V0KysgPSBpZHg7Ci0gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobnVtX2NvbG9ycyA9PSAyNTYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5PSVNZKHByaW50ZigiRm91bmQgMjU3dGggY29sb3IgYXQgJWQsICVkXG4iLCBpLCBqKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpc1BhbGV0dGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tudW1fY29sb3JzKytdID0gY29sOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgKnBhbGV0dGVFbnRyaWVzID0gMDsKLSAgICAqaGFzVHJhbnNwYXJlbmN5ID0gIWlzT3BhcXVlOwotICAgIGludCBicHAgPSBpc09wYXF1ZSA/IDMgOiA0OwotICAgIGludCBwYWxldHRlU2l6ZSA9IHcgKiBoICsgYnBwICogbnVtX2NvbG9yczsKLQotICAgIE5PSVNZKHByaW50ZigiaXNHcmF5c2NhbGUgPSAlc1xuIiwgaXNHcmF5c2NhbGUgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7Ci0gICAgTk9JU1kocHJpbnRmKCJpc09wYXF1ZSA9ICVzXG4iLCBpc09wYXF1ZSA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsKLSAgICBOT0lTWShwcmludGYoImlzUGFsZXR0ZSA9ICVzXG4iLCBpc1BhbGV0dGUgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7Ci0gICAgTk9JU1kocHJpbnRmKCJTaXplIHcvIHBhbGV0dGUgPSAlZCwgZ3JheSthbHBoYSA9ICVkLCByZ2IoYSkgPSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgcGFsZXR0ZVNpemUsIDIgKiB3ICogaCwgYnBwICogdyAqIGgpKTsKLSAgICBOT0lTWShwcmludGYoIk1heCBncmF5IGRldmlhdGlvbiA9ICVkLCB0b2xlcmFuY2UgPSAlZFxuIiwgbWF4R3JheURldmlhdGlvbiwgZ3JheXNjYWxlVG9sZXJhbmNlKSk7Ci0KLSAgICAvLyBDaG9vc2UgdGhlIGJlc3QgY29sb3IgdHlwZSBmb3IgdGhlIGltYWdlLgotICAgIC8vIDEuIE9wYXF1ZSBncmF5IC0gdXNlIENPTE9SX1RZUEVfR1JBWSBhdCAxIGJ5dGUvcGl4ZWwKLSAgICAvLyAyLiBHcmF5ICsgYWxwaGEgLSB1c2UgQ09MT1JfVFlQRV9QQUxFVFRFIGlmIHRoZSBudW1iZXIgb2YgZGlzdGluY3QgY29tYmluYXRpb25zCi0gICAgLy8gICAgIGlzIHN1ZmZpY2llbnRseSBzbWFsbCwgb3RoZXJ3aXNlIHVzZSBDT0xPUl9UWVBFX0dSQVlfQUxQSEEKLSAgICAvLyAzLiBSR0IoQSkgLSB1c2UgQ09MT1JfVFlQRV9QQUxFVFRFIGlmIHRoZSBudW1iZXIgb2YgZGlzdGluY3QgY29sb3JzIGlzIHN1ZmZpY2llbnRseQotICAgIC8vICAgICBzbWFsbCwgb3RoZXJ3aXNlIHVzZSBDT0xPUl9UWVBFX1JHQntfQUxQSEF9Ci0gICAgaWYgKGlzR3JheXNjYWxlKSB7Ci0gICAgICAgIGlmIChpc09wYXF1ZSkgewotICAgICAgICAgICAgKmNvbG9yVHlwZSA9IFBOR19DT0xPUl9UWVBFX0dSQVk7IC8vIDEgYnl0ZS9waXhlbAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVXNlIGEgc2ltcGxlIGhldXJpc3RpYyB0byBkZXRlcm1pbmUgd2hldGhlciB1c2luZyBhIHBhbGV0dGUgd2lsbAotICAgICAgICAgICAgLy8gc2F2ZSBzcGFjZSB2ZXJzdXMgdXNpbmcgZ3JheSArIGFscGhhIGZvciBlYWNoIHBpeGVsLgotICAgICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IGNodW5rIG92ZXJoZWFkLCBmaWx0ZXJpbmcsIExaCi0gICAgICAgICAgICAvLyBjb21wcmVzc2lvbiwgZXRjLgotICAgICAgICAgICAgaWYgKGlzUGFsZXR0ZSAmJiAocGFsZXR0ZVNpemUgPCAyICogdyAqIGgpKSB7Ci0gICAgICAgICAgICAgICAgKmNvbG9yVHlwZSA9IFBOR19DT0xPUl9UWVBFX1BBTEVUVEU7IC8vIDEgYnl0ZS9waXhlbCArIDQgYnl0ZXMvY29sb3IKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKmNvbG9yVHlwZSA9IFBOR19DT0xPUl9UWVBFX0dSQVlfQUxQSEE7IC8vIDIgYnl0ZXMgcGVyIHBpeGVsCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGlzUGFsZXR0ZSAmJiAocGFsZXR0ZVNpemUgPCBicHAgKiB3ICogaCkpIHsKLSAgICAgICAgKmNvbG9yVHlwZSA9IFBOR19DT0xPUl9UWVBFX1BBTEVUVEU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1heEdyYXlEZXZpYXRpb24gPD0gZ3JheXNjYWxlVG9sZXJhbmNlKSB7Ci0gICAgICAgICAgICBwcmludGYoIiVzOiBmb3JjaW5nIGltYWdlIHRvIGdyYXkgKG1heCBkZXZpYXRpb24gPSAlZClcbiIsIGltYWdlTmFtZSwgbWF4R3JheURldmlhdGlvbik7Ci0gICAgICAgICAgICAqY29sb3JUeXBlID0gaXNPcGFxdWUgPyBQTkdfQ09MT1JfVFlQRV9HUkFZIDogUE5HX0NPTE9SX1RZUEVfR1JBWV9BTFBIQTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICpjb2xvclR5cGUgPSBpc09wYXF1ZSA/IFBOR19DT0xPUl9UWVBFX1JHQiA6IFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFBlcmZvcm0gcG9zdHByb2Nlc3Npbmcgb2YgdGhlIGltYWdlIG9yIHBhbGV0dGUgZGF0YSBiYXNlZCBvbiB0aGUgZmluYWwKLSAgICAvLyBjb2xvciB0eXBlIGNob3NlbgotCi0gICAgaWYgKCpjb2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUEFMRVRURSkgewotICAgICAgICAvLyBDcmVhdGUgc2VwYXJhdGUgUkdCIGFuZCBBbHBoYSBwYWxldHRlcyBhbmQgc2V0IHRoZSBudW1iZXIgb2YgY29sb3JzCi0gICAgICAgICpwYWxldHRlRW50cmllcyA9IG51bV9jb2xvcnM7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIHRoZSBSR0IgYW5kIGFscGhhIHBhbGV0dGVzCi0gICAgICAgIGZvciAoaW50IGlkeCA9IDA7IGlkeCA8IG51bV9jb2xvcnM7IGlkeCsrKSB7Ci0gICAgICAgICAgICBjb2wgPSBjb2xvcnNbaWR4XTsKLSAgICAgICAgICAgIHJnYlBhbGV0dGVbaWR4XS5yZWQgICA9IChwbmdfYnl0ZSkgKChjb2wgPj4gMjQpICYgMHhmZik7Ci0gICAgICAgICAgICByZ2JQYWxldHRlW2lkeF0uZ3JlZW4gPSAocG5nX2J5dGUpICgoY29sID4+IDE2KSAmIDB4ZmYpOwotICAgICAgICAgICAgcmdiUGFsZXR0ZVtpZHhdLmJsdWUgID0gKHBuZ19ieXRlKSAoKGNvbCA+PiAgOCkgJiAweGZmKTsKLSAgICAgICAgICAgIGFscGhhUGFsZXR0ZVtpZHhdICAgICA9IChwbmdfYnl0ZSkgIChjb2wgICAgICAgICYgMHhmZik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCpjb2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSB8fCAqY29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVlfQUxQSEEpIHsKLSAgICAgICAgLy8gSWYgdGhlIGltYWdlIGlzIGdyYXkgb3IgZ3JheSArIGFscGhhLCBjb21wYWN0IHRoZSBwaXhlbHMgaW50byBvdXRSb3dzCi0gICAgICAgIGZvciAoaiA9IDA7IGogPCBoOyBqKyspIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbWFnZUluZm8ucm93c1tqXTsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBvdXQgPSBvdXRSb3dzW2pdOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHc7IGkrKykgewotICAgICAgICAgICAgICAgIHJyID0gKnJvdysrOwotICAgICAgICAgICAgICAgIGdnID0gKnJvdysrOwotICAgICAgICAgICAgICAgIGJiID0gKnJvdysrOwotICAgICAgICAgICAgICAgIGFhID0gKnJvdysrOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzR3JheXNjYWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICpvdXQrKyA9IHJyOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICpvdXQrKyA9IChwbmdfYnl0ZSkgKHJyICogMC4yMTI2ZiArIGdnICogMC43MTUyZiArIGJiICogMC4wNzIyZik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghaXNPcGFxdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gYWE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgd3JpdGVfcG5nKGNvbnN0IGNoYXIqIGltYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICBwbmdfc3RydWN0cCB3cml0ZV9wdHIsIHBuZ19pbmZvcCB3cml0ZV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2luZm8mIGltYWdlSW5mbywgaW50IGdyYXlzY2FsZVRvbGVyYW5jZSkKLXsKLSAgICBib29sIG9wdGltaXplID0gdHJ1ZTsKLSAgICBwbmdfdWludF8zMiB3aWR0aCwgaGVpZ2h0OwotICAgIGludCBjb2xvcl90eXBlOwotICAgIGludCBiaXRfZGVwdGgsIGludGVybGFjZV90eXBlLCBjb21wcmVzc2lvbl90eXBlOwotICAgIGludCBpOwotCi0gICAgcG5nX3Vua25vd25fY2h1bmsgdW5rbm93bnNbMl07Ci0gICAgdW5rbm93bnNbMF0uZGF0YSA9IE5VTEw7Ci0gICAgdW5rbm93bnNbMV0uZGF0YSA9IE5VTEw7Ci0KLSAgICBwbmdfYnl0ZXBwIG91dFJvd3MgPSAocG5nX2J5dGVwcCkgbWFsbG9jKChpbnQpIGltYWdlSW5mby5oZWlnaHQgKiBzaXplb2YocG5nX2J5dGVwKSk7Ci0gICAgaWYgKG91dFJvd3MgPT0gKHBuZ19ieXRlcHApIDApIHsKLSAgICAgICAgcHJpbnRmKCJDYW4ndCBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyIVxuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBpbWFnZUluZm8uaGVpZ2h0OyBpKyspIHsKLSAgICAgICAgb3V0Um93c1tpXSA9IChwbmdfYnl0ZXApIG1hbGxvYygyICogKGludCkgaW1hZ2VJbmZvLndpZHRoKTsKLSAgICAgICAgaWYgKG91dFJvd3NbaV0gPT0gKHBuZ19ieXRlcCkgMCkgewotICAgICAgICAgICAgcHJpbnRmKCJDYW4ndCBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyIVxuIik7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcG5nX3NldF9jb21wcmVzc2lvbl9sZXZlbCh3cml0ZV9wdHIsIFpfQkVTVF9DT01QUkVTU0lPTik7Ci0KLSAgICBOT0lTWShwcmludGYoIldyaXRpbmcgaW1hZ2UgJXM6IHcgPSAlZCwgaCA9ICVkXG4iLCBpbWFnZU5hbWUsCi0gICAgICAgICAgKGludCkgaW1hZ2VJbmZvLndpZHRoLCAoaW50KSBpbWFnZUluZm8uaGVpZ2h0KSk7Ci0KLSAgICBwbmdfY29sb3IgcmdiUGFsZXR0ZVsyNTZdOwotICAgIHBuZ19ieXRlIGFscGhhUGFsZXR0ZVsyNTZdOwotICAgIGJvb2wgaGFzVHJhbnNwYXJlbmN5OwotICAgIGludCBwYWxldHRlRW50cmllczsKLQotICAgIGFuYWx5emVfaW1hZ2UoaW1hZ2VOYW1lLCBpbWFnZUluZm8sIGdyYXlzY2FsZVRvbGVyYW5jZSwgcmdiUGFsZXR0ZSwgYWxwaGFQYWxldHRlLAotICAgICAgICAgICAgICAgICAgJnBhbGV0dGVFbnRyaWVzLCAmaGFzVHJhbnNwYXJlbmN5LCAmY29sb3JfdHlwZSwgb3V0Um93cyk7Ci0KLSAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgYSA5LXBhdGNoLCB3ZSBuZWVkIHRvIHByZXNlcnZlIGl0IGFzIGEgQVJHQiBmaWxlIHRvIG1ha2UKLSAgICAvLyBzdXJlIHRoZSBwaXhlbHMgd2lsbCBub3QgYmUgcHJlLWRpdGhlcmVkL2NsYW1wZWQgdW50aWwgd2UgZGVjaWRlIHRoZXkgYXJlCi0gICAgaWYgKGltYWdlSW5mby5pczlQYXRjaCAmJiAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0IgfHwKLSAgICAgICAgICAgIGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSB8fCBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1BBTEVUVEUpKSB7Ci0gICAgICAgIGNvbG9yX3R5cGUgPSBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEE7Ci0gICAgfQotCi0gICAgc3dpdGNoIChjb2xvcl90eXBlKSB7Ci0gICAgY2FzZSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFOgotICAgICAgICBOT0lTWShwcmludGYoIkltYWdlICVzIGhhcyAlZCBjb2xvcnMlcywgdXNpbmcgUE5HX0NPTE9SX1RZUEVfUEFMRVRURVxuIiwKLSAgICAgICAgICAgICAgICAgICAgIGltYWdlTmFtZSwgcGFsZXR0ZUVudHJpZXMsCi0gICAgICAgICAgICAgICAgICAgICBoYXNUcmFuc3BhcmVuY3kgPyAiICh3aXRoIGFscGhhKSIgOiAiIikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBOR19DT0xPUl9UWVBFX0dSQVk6Ci0gICAgICAgIE5PSVNZKHByaW50ZigiSW1hZ2UgJXMgaXMgb3BhcXVlIGdyYXksIHVzaW5nIFBOR19DT0xPUl9UWVBFX0dSQVlcbiIsIGltYWdlTmFtZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBOR19DT0xPUl9UWVBFX0dSQVlfQUxQSEE6Ci0gICAgICAgIE5PSVNZKHByaW50ZigiSW1hZ2UgJXMgaXMgZ3JheSArIGFscGhhLCB1c2luZyBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBXG4iLCBpbWFnZU5hbWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQTkdfQ09MT1JfVFlQRV9SR0I6Ci0gICAgICAgIE5PSVNZKHByaW50ZigiSW1hZ2UgJXMgaXMgb3BhcXVlIFJHQiwgdXNpbmcgUE5HX0NPTE9SX1RZUEVfUkdCXG4iLCBpbWFnZU5hbWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEE6Ci0gICAgICAgIE5PSVNZKHByaW50ZigiSW1hZ2UgJXMgaXMgUkdCICsgYWxwaGEsIHVzaW5nIFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQVxuIiwgaW1hZ2VOYW1lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHBuZ19zZXRfSUhEUih3cml0ZV9wdHIsIHdyaXRlX2luZm8sIGltYWdlSW5mby53aWR0aCwgaW1hZ2VJbmZvLmhlaWdodCwKLSAgICAgICAgICAgICAgICAgOCwgY29sb3JfdHlwZSwgUE5HX0lOVEVSTEFDRV9OT05FLAotICAgICAgICAgICAgICAgICBQTkdfQ09NUFJFU1NJT05fVFlQRV9ERUZBVUxULCBQTkdfRklMVEVSX1RZUEVfREVGQVVMVCk7Ci0KLSAgICBpZiAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFKSB7Ci0gICAgICAgIHBuZ19zZXRfUExURSh3cml0ZV9wdHIsIHdyaXRlX2luZm8sIHJnYlBhbGV0dGUsIHBhbGV0dGVFbnRyaWVzKTsKLSAgICAgICAgaWYgKGhhc1RyYW5zcGFyZW5jeSkgewotICAgICAgICAgICAgcG5nX3NldF90Uk5TKHdyaXRlX3B0ciwgd3JpdGVfaW5mbywgYWxwaGFQYWxldHRlLCBwYWxldHRlRW50cmllcywgKHBuZ19jb2xvcl8xNnApIDApOwotICAgICAgICB9Ci0gICAgICAgcG5nX3NldF9maWx0ZXIod3JpdGVfcHRyLCAwLCBQTkdfTk9fRklMVEVSUyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICBwbmdfc2V0X2ZpbHRlcih3cml0ZV9wdHIsIDAsIFBOR19BTExfRklMVEVSUyk7Ci0gICAgfQotCi0gICAgaWYgKGltYWdlSW5mby5pczlQYXRjaCkgewotICAgICAgICBpbnQgY2h1bmtfY291bnQgPSAxICsgKGltYWdlSW5mby5oYXZlTGF5b3V0Qm91bmRzID8gMSA6IDApOwotICAgICAgICBpbnQgcF9pbmRleCA9IGltYWdlSW5mby5oYXZlTGF5b3V0Qm91bmRzID8gMSA6IDA7Ci0gICAgICAgIGludCBiX2luZGV4ID0gMDsKLSAgICAgICAgcG5nX2J5dGUgKmNodW5rX25hbWVzID0gaW1hZ2VJbmZvLmhhdmVMYXlvdXRCb3VuZHMKLSAgICAgICAgICAgICAgICA/IChwbmdfYnl0ZSopIm5wTGJcMG5wVGNcMCIKLSAgICAgICAgICAgICAgICA6IChwbmdfYnl0ZSopIm5wVGMiOwotICAgICAgICBOT0lTWShwcmludGYoIkFkZGluZyA5LXBhdGNoIGluZm8uLi5cbiIpKTsKLSAgICAgICAgc3RyY3B5KChjaGFyKil1bmtub3duc1twX2luZGV4XS5uYW1lLCAibnBUYyIpOwotICAgICAgICB1bmtub3duc1twX2luZGV4XS5kYXRhID0gKHBuZ19ieXRlKilpbWFnZUluZm8uaW5mbzlQYXRjaC5zZXJpYWxpemUoKTsKLSAgICAgICAgdW5rbm93bnNbcF9pbmRleF0uc2l6ZSA9IGltYWdlSW5mby5pbmZvOVBhdGNoLnNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgICAgIC8vIFRPRE86IHJlbW92ZSB0aGUgY2hlY2sgYmVsb3cgd2hlbiBldmVyeXRoaW5nIHdvcmtzCi0gICAgICAgIGNoZWNrTmluZVBhdGNoU2VyaWFsaXphdGlvbigmaW1hZ2VJbmZvLmluZm85UGF0Y2gsIHVua25vd25zW3BfaW5kZXhdLmRhdGEpOwotCi0gICAgICAgIGlmIChpbWFnZUluZm8uaGF2ZUxheW91dEJvdW5kcykgewotICAgICAgICAgICAgaW50IGNodW5rX3NpemUgPSBzaXplb2YocG5nX3VpbnRfMzIpICogNDsKLSAgICAgICAgICAgIHN0cmNweSgoY2hhciopdW5rbm93bnNbYl9pbmRleF0ubmFtZSwgIm5wTGIiKTsKLSAgICAgICAgICAgIHVua25vd25zW2JfaW5kZXhdLmRhdGEgPSAocG5nX2J5dGUqKSBjYWxsb2MoY2h1bmtfc2l6ZSwgMSk7Ci0gICAgICAgICAgICBtZW1jcHkodW5rbm93bnNbYl9pbmRleF0uZGF0YSwgJmltYWdlSW5mby5sYXlvdXRCb3VuZHNMZWZ0LCBjaHVua19zaXplKTsKLSAgICAgICAgICAgIHVua25vd25zW2JfaW5kZXhdLnNpemUgPSBjaHVua19zaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaHVua19jb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICB1bmtub3duc1tpXS5sb2NhdGlvbiA9IFBOR19IQVZFX1BMVEU7Ci0gICAgICAgIH0KLSAgICAgICAgcG5nX3NldF9rZWVwX3Vua25vd25fY2h1bmtzKHdyaXRlX3B0ciwgUE5HX0hBTkRMRV9DSFVOS19BTFdBWVMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua19uYW1lcywgY2h1bmtfY291bnQpOwotICAgICAgICBwbmdfc2V0X3Vua25vd25fY2h1bmtzKHdyaXRlX3B0ciwgd3JpdGVfaW5mbywgdW5rbm93bnMsIGNodW5rX2NvdW50KTsKLSNpZiBQTkdfTElCUE5HX1ZFUiA8IDEwNjAwCi0gICAgICAgIC8qIERlYWwgd2l0aCB1bmtub3duIGNodW5rIGxvY2F0aW9uIGJ1ZyBpbiAxLjUueCBhbmQgZWFybGllciAqLwotICAgICAgICBwbmdfc2V0X3Vua25vd25fY2h1bmtfbG9jYXRpb24od3JpdGVfcHRyLCB3cml0ZV9pbmZvLCAwLCBQTkdfSEFWRV9QTFRFKTsKLSAgICAgICAgaWYgKGltYWdlSW5mby5oYXZlTGF5b3V0Qm91bmRzKSB7Ci0gICAgICAgICAgICBwbmdfc2V0X3Vua25vd25fY2h1bmtfbG9jYXRpb24od3JpdGVfcHRyLCB3cml0ZV9pbmZvLCAxLCBQTkdfSEFWRV9QTFRFKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0KLSAgICBwbmdfd3JpdGVfaW5mbyh3cml0ZV9wdHIsIHdyaXRlX2luZm8pOwotCi0gICAgcG5nX2J5dGVwcCByb3dzOwotICAgIGlmIChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQiB8fCBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQSkgewotICAgICAgICBpZiAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0IpIHsKLSAgICAgICAgICAgIHBuZ19zZXRfZmlsbGVyKHdyaXRlX3B0ciwgMCwgUE5HX0ZJTExFUl9BRlRFUik7Ci0gICAgICAgIH0KLSAgICAgICAgcm93cyA9IGltYWdlSW5mby5yb3dzOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJvd3MgPSBvdXRSb3dzOwotICAgIH0KLSAgICBwbmdfd3JpdGVfaW1hZ2Uod3JpdGVfcHRyLCByb3dzKTsKLQotLy8gICAgIE5PSVNZKHByaW50ZigiRmluYWwgaW1hZ2UgZGF0YTpcbiIpKTsKLS8vICAgICBkdW1wX2ltYWdlKGltYWdlSW5mby53aWR0aCwgaW1hZ2VJbmZvLmhlaWdodCwgcm93cywgY29sb3JfdHlwZSk7Ci0KLSAgICBwbmdfd3JpdGVfZW5kKHdyaXRlX3B0ciwgd3JpdGVfaW5mbyk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgaW1hZ2VJbmZvLmhlaWdodDsgaSsrKSB7Ci0gICAgICAgIGZyZWUob3V0Um93c1tpXSk7Ci0gICAgfQotICAgIGZyZWUob3V0Um93cyk7Ci0gICAgZnJlZSh1bmtub3duc1swXS5kYXRhKTsKLSAgICBmcmVlKHVua25vd25zWzFdLmRhdGEpOwotCi0gICAgcG5nX2dldF9JSERSKHdyaXRlX3B0ciwgd3JpdGVfaW5mbywgJndpZHRoLCAmaGVpZ2h0LAotICAgICAgICZiaXRfZGVwdGgsICZjb2xvcl90eXBlLCAmaW50ZXJsYWNlX3R5cGUsCi0gICAgICAgJmNvbXByZXNzaW9uX3R5cGUsIE5VTEwpOwotCi0gICAgTk9JU1kocHJpbnRmKCJJbWFnZSB3cml0dGVuOiB3PSVkLCBoPSVkLCBkPSVkLCBjb2xvcnM9JWQsIGludGVyPSVkLCBjb21wPSVkXG4iLAotICAgICAgICAgICAgICAgICAoaW50KXdpZHRoLCAoaW50KWhlaWdodCwgYml0X2RlcHRoLCBjb2xvcl90eXBlLCBpbnRlcmxhY2VfdHlwZSwKLSAgICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZSkpOwotfQotCi1zdGF0dXNfdCBwcmVQcm9jZXNzSW1hZ2UoY29uc3QgQnVuZGxlKiBidW5kbGUsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlLCBTdHJpbmc4KiBvdXROZXdMZWFmTmFtZSkKLXsKLSAgICBTdHJpbmc4IGV4dChmaWxlLT5nZXRQYXRoKCkuZ2V0UGF0aEV4dGVuc2lvbigpKTsKLQotICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IHByb2Nlc3MgUE5HIGltYWdlcy4KLSAgICBpZiAoc3RyY21wKGV4dC5zdHJpbmcoKSwgIi5wbmciKSAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICAvLyBFeGFtcGxlIG9mIHJlbmFtaW5nIGEgZmlsZToKLSAgICAvLypvdXROZXdMZWFmTmFtZSA9IGZpbGUtPmdldFBhdGgoKS5nZXRCYXNlUGF0aCgpLmdldEZpbGVOYW1lKCk7Ci0gICAgLy9vdXROZXdMZWFmTmFtZS0+YXBwZW5kKCIubnVwbmciKTsKLQotICAgIFN0cmluZzggcHJpbnRhYmxlTmFtZShmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKSk7Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgcHJpbnRmKCJQcm9jZXNzaW5nIGltYWdlOiAlc1xuIiwgcHJpbnRhYmxlTmFtZS5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcG5nX3N0cnVjdHAgcmVhZF9wdHIgPSBOVUxMOwotICAgIHBuZ19pbmZvcCByZWFkX2luZm8gPSBOVUxMOwotICAgIEZJTEUqIGZwOwotCi0gICAgaW1hZ2VfaW5mbyBpbWFnZUluZm87Ci0KLSAgICBwbmdfc3RydWN0cCB3cml0ZV9wdHIgPSBOVUxMOwotICAgIHBuZ19pbmZvcCB3cml0ZV9pbmZvID0gTlVMTDsKLQotICAgIHN0YXR1c190IGVycm9yID0gVU5LTk9XTl9FUlJPUjsKLQotICAgIGNvbnN0IHNpemVfdCBuYW1lTGVuID0gZmlsZS0+Z2V0UGF0aCgpLmxlbmd0aCgpOwotCi0gICAgZnAgPSBmb3BlbihmaWxlLT5nZXRTb3VyY2VGaWxlKCkuc3RyaW5nKCksICJyYiIpOwotICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBVbmFibGUgdG8gb3BlbiBQTkcgZmlsZVxuIiwgcHJpbnRhYmxlTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICByZWFkX3B0ciA9IHBuZ19jcmVhdGVfcmVhZF9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RSSU5HLCAwLCAocG5nX2Vycm9yX3B0cilOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwbmdfZXJyb3JfcHRyKU5VTEwpOwotICAgIGlmICghcmVhZF9wdHIpIHsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIHJlYWRfaW5mbyA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QocmVhZF9wdHIpOwotICAgIGlmICghcmVhZF9pbmZvKSB7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBpZiAoc2V0am1wKHBuZ19qbXBidWYocmVhZF9wdHIpKSkgewotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgcG5nX2luaXRfaW8ocmVhZF9wdHIsIGZwKTsKLQotICAgIHJlYWRfcG5nKHByaW50YWJsZU5hbWUuc3RyaW5nKCksIHJlYWRfcHRyLCByZWFkX2luZm8sICZpbWFnZUluZm8pOwotCi0gICAgaWYgKG5hbWVMZW4gPiA2KSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBmaWxlLT5nZXRQYXRoKCkuc3RyaW5nKCk7Ci0gICAgICAgIGlmIChuYW1lW25hbWVMZW4tNV0gPT0gJzknICYmIG5hbWVbbmFtZUxlbi02XSA9PSAnLicpIHsKLSAgICAgICAgICAgIGlmIChkb185cGF0Y2gocHJpbnRhYmxlTmFtZS5zdHJpbmcoKSwgJmltYWdlSW5mbykgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB3cml0ZV9wdHIgPSBwbmdfY3JlYXRlX3dyaXRlX3N0cnVjdChQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIDAsIChwbmdfZXJyb3JfcHRyKU5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBuZ19lcnJvcl9wdHIpTlVMTCk7Ci0gICAgaWYgKCF3cml0ZV9wdHIpCi0gICAgewotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgd3JpdGVfaW5mbyA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3Qod3JpdGVfcHRyKTsKLSAgICBpZiAoIXdyaXRlX2luZm8pCi0gICAgewotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgcG5nX3NldF93cml0ZV9mbih3cml0ZV9wdHIsICh2b2lkKilmaWxlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgcG5nX3dyaXRlX2FhcHRfZmlsZSwgcG5nX2ZsdXNoX2FhcHRfZmlsZSk7Ci0KLSAgICBpZiAoc2V0am1wKHBuZ19qbXBidWYod3JpdGVfcHRyKSkpCi0gICAgewotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgd3JpdGVfcG5nKHByaW50YWJsZU5hbWUuc3RyaW5nKCksIHdyaXRlX3B0ciwgd3JpdGVfaW5mbywgaW1hZ2VJbmZvLAotICAgICAgICAgICAgICBidW5kbGUtPmdldEdyYXlzY2FsZVRvbGVyYW5jZSgpKTsKLQotICAgIGVycm9yID0gTk9fRVJST1I7Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgZnNlZWsoZnAsIDAsIFNFRUtfRU5EKTsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSAoc2l6ZV90KWZ0ZWxsKGZwKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBmaWxlLT5nZXRTaXplKCk7Ci0gICAgICAgIGZsb2F0IGZhY3RvciA9ICgoZmxvYXQpbmV3U2l6ZSkvb2xkU2l6ZTsKLSAgICAgICAgaW50IHBlcmNlbnQgPSAoaW50KShmYWN0b3IqMTAwKTsKLSAgICAgICAgcHJpbnRmKCIgICAgKHByb2Nlc3NlZCBpbWFnZSAlczogJWQlJSBzaXplIG9mIHNvdXJjZSlcbiIsIHByaW50YWJsZU5hbWUuc3RyaW5nKCksIHBlcmNlbnQpOwotICAgIH0KLQotYmFpbDoKLSAgICBpZiAocmVhZF9wdHIpIHsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfcmVhZF9zdHJ1Y3QoJnJlYWRfcHRyLCAmcmVhZF9pbmZvLCAocG5nX2luZm9wcClOVUxMKTsKLSAgICB9Ci0gICAgaWYgKGZwKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgfQotICAgIGlmICh3cml0ZV9wdHIpIHsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZ3cml0ZV9wdHIsICZ3cml0ZV9pbmZvKTsKLSAgICB9Ci0KLSAgICBpZiAoZXJyb3IgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogRmFpbHVyZSBwcm9jZXNzaW5nIFBORyBpbWFnZSAlc1xuIiwKLSAgICAgICAgICAgICAgICBmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiBlcnJvcjsKLX0KLQotc3RhdHVzX3QgcHJlUHJvY2Vzc0ltYWdlVG9DYWNoZShjb25zdCBCdW5kbGUqIGJ1bmRsZSwgY29uc3QgU3RyaW5nOCYgc291cmNlLCBjb25zdCBTdHJpbmc4JiBkZXN0KQotewotICAgIHBuZ19zdHJ1Y3RwIHJlYWRfcHRyID0gTlVMTDsKLSAgICBwbmdfaW5mb3AgcmVhZF9pbmZvID0gTlVMTDsKLQotICAgIEZJTEUqIGZwOwotCi0gICAgaW1hZ2VfaW5mbyBpbWFnZUluZm87Ci0KLSAgICBwbmdfc3RydWN0cCB3cml0ZV9wdHIgPSBOVUxMOwotICAgIHBuZ19pbmZvcCB3cml0ZV9pbmZvID0gTlVMTDsKLQotICAgIHN0YXR1c190IGVycm9yID0gVU5LTk9XTl9FUlJPUjsKLQotICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICBwcmludGYoIlByb2Nlc3NpbmcgaW1hZ2UgdG8gY2FjaGU6ICVzID0+ICVzXG4iLCBzb3VyY2Uuc3RyaW5nKCksIGRlc3Quc3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIEdldCBhIGZpbGUgaGFuZGxlciB0byByZWFkIGZyb20KLSAgICBmcCA9IGZvcGVuKHNvdXJjZS5zdHJpbmcoKSwicmIiKTsKLSAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIEVSUk9SOiBVbmFibGUgdG8gb3BlbiBQTkcgZmlsZVxuIiwgc291cmNlLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIC8vIENhbGwgbGlicG5nIHRvIGdldCBhIHN0cnVjdCB0byByZWFkIGltYWdlIGRhdGEgaW50bwotICAgIHJlYWRfcHRyID0gcG5nX2NyZWF0ZV9yZWFkX3N0cnVjdChQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIGlmICghcmVhZF9wdHIpIHsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfcmVhZF9zdHJ1Y3QoJnJlYWRfcHRyLCAmcmVhZF9pbmZvLE5VTEwpOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCBsaWJwbmcgdG8gZ2V0IGEgc3RydWN0IHRvIHJlYWQgaW1hZ2UgaW5mbyBpbnRvCi0gICAgcmVhZF9pbmZvID0gcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdChyZWFkX3B0cik7Ci0gICAgaWYgKCFyZWFkX2luZm8pIHsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfcmVhZF9zdHJ1Y3QoJnJlYWRfcHRyLCAmcmVhZF9pbmZvLE5VTEwpOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotCi0gICAgLy8gU2V0IGEganVtcCBwb2ludCBmb3IgbGlicG5nIHRvIGxvbmcganVtcCBiYWNrIHRvIG9uIGVycm9yCi0gICAgaWYgKHNldGptcChwbmdfam1wYnVmKHJlYWRfcHRyKSkpIHsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfcmVhZF9zdHJ1Y3QoJnJlYWRfcHRyLCAmcmVhZF9pbmZvLE5VTEwpOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIGxpYnBuZyB0byByZWFkIGZyb20gb3VyIGZpbGUuCi0gICAgcG5nX2luaXRfaW8ocmVhZF9wdHIsZnApOwotCi0gICAgLy8gQWN0dWFsbHkgcmVhZCBkYXRhIGZyb20gdGhlIGZpbGUKLSAgICByZWFkX3BuZyhzb3VyY2Uuc3RyaW5nKCksIHJlYWRfcHRyLCByZWFkX2luZm8sICZpbWFnZUluZm8pOwotCi0gICAgLy8gV2UncmUgZG9uZSByZWFkaW5nIHNvIHdlIGNhbiBjbGVhbiB1cAotICAgIC8vIEZpbmQgb2xkIGZpbGUgc2l6ZSBiZWZvcmUgcmVsZWFzaW5nIGhhbmRsZQotICAgIGZzZWVrKGZwLCAwLCBTRUVLX0VORCk7Ci0gICAgc2l6ZV90IG9sZFNpemUgPSAoc2l6ZV90KWZ0ZWxsKGZwKTsKLSAgICBmY2xvc2UoZnApOwotICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0KCZyZWFkX3B0ciwgJnJlYWRfaW5mbyxOVUxMKTsKLQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSA5LXBhdGNoCi0gICAgLy8gSWYgd2UgYXJlLCBwcm9jZXNzIGFwcHJvcHJpYXRlbHkKLSAgICBpZiAoc291cmNlLmdldEJhc2VQYXRoKCkuZ2V0UGF0aEV4dGVuc2lvbigpID09ICIuOSIpICB7Ci0gICAgICAgIGlmIChkb185cGF0Y2goc291cmNlLnN0cmluZygpLCAmaW1hZ2VJbmZvKSAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2FsbCBsaWJwbmcgdG8gY3JlYXRlIGEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIHByb2Nlc3NlZCBpbWFnZSBkYXRhCi0gICAgLy8gdGhhdCBjYW4gYmUgd3JpdHRlbiB0byBkaXNrCi0gICAgd3JpdGVfcHRyID0gcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RSSU5HLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICBpZiAoIXdyaXRlX3B0cikgewotICAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJndyaXRlX3B0ciwgJndyaXRlX2luZm8pOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCBsaWJwbmcgdG8gY3JlYXRlIGEgc3RydWN0dXJlIHRvIGhvbGQgcHJvY2Vzc2VkIGltYWdlIGluZm8gdGhhdCBjYW4KLSAgICAvLyBiZSB3cml0dGVuIHRvIGRpc2sKLSAgICB3cml0ZV9pbmZvID0gcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdCh3cml0ZV9wdHIpOwotICAgIGlmICghd3JpdGVfaW5mbykgewotICAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJndyaXRlX3B0ciwgJndyaXRlX2luZm8pOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotCi0gICAgLy8gT3BlbiB1cCBvdXIgZGVzdGluYXRpb24gZmlsZSBmb3Igd3JpdGluZwotICAgIGZwID0gZm9wZW4oZGVzdC5zdHJpbmcoKSwgIndiIik7Ci0gICAgaWYgKCFmcCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIEVSUk9SOiBVbmFibGUgdG8gb3BlbiBQTkcgZmlsZVxuIiwgZGVzdC5zdHJpbmcoKSk7Ci0gICAgICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdCgmd3JpdGVfcHRyLCAmd3JpdGVfaW5mbyk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdXAgbGlicG5nIHRvIHdyaXRlIHRvIG91ciBmaWxlCi0gICAgcG5nX2luaXRfaW8od3JpdGVfcHRyLCBmcCk7Ci0KLSAgICAvLyBTZXQgdXAgYSBqdW1wIGZvciBsaWJwbmcgdG8gbG9uZyBqdW1wIGJhY2sgb24gb24gZXJyb3JzCi0gICAgaWYgKHNldGptcChwbmdfam1wYnVmKHdyaXRlX3B0cikpKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdCgmd3JpdGVfcHRyLCAmd3JpdGVfaW5mbyk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Ci0KLSAgICAvLyBBY3R1YWxseSB3cml0ZSBvdXQgdG8gdGhlIG5ldyBwbmcKLSAgICB3cml0ZV9wbmcoZGVzdC5zdHJpbmcoKSwgd3JpdGVfcHRyLCB3cml0ZV9pbmZvLCBpbWFnZUluZm8sCi0gICAgICAgICAgICAgIGJ1bmRsZS0+Z2V0R3JheXNjYWxlVG9sZXJhbmNlKCkpOwotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIHNpemUgb2Ygb3VyIG5ldyBmaWxlCi0gICAgICAgIEZJTEUqIHJlYWRlciA9IGZvcGVuKGRlc3Quc3RyaW5nKCksICJyYiIpOwotICAgICAgICBmc2VlayhyZWFkZXIsIDAsIFNFRUtfRU5EKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSAoc2l6ZV90KWZ0ZWxsKHJlYWRlcik7Ci0gICAgICAgIGZjbG9zZShyZWFkZXIpOwotCi0gICAgICAgIGZsb2F0IGZhY3RvciA9ICgoZmxvYXQpbmV3U2l6ZSkvb2xkU2l6ZTsKLSAgICAgICAgaW50IHBlcmNlbnQgPSAoaW50KShmYWN0b3IqMTAwKTsKLSAgICAgICAgcHJpbnRmKCIgIChwcm9jZXNzZWQgaW1hZ2UgdG8gY2FjaGUgZW50cnkgJXM6ICVkJSUgc2l6ZSBvZiBzb3VyY2UpXG4iLAotICAgICAgICAgICAgICAgZGVzdC5zdHJpbmcoKSwgcGVyY2VudCk7Ci0gICAgfQotCi0gICAgLy9DbGVhbiB1cAotICAgIGZjbG9zZShmcCk7Ci0gICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZ3cml0ZV9wdHIsICZ3cml0ZV9pbmZvKTsKLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgcG9zdFByb2Nlc3NJbWFnZShjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiB0YWJsZSwgY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlKQotewotICAgIFN0cmluZzggZXh0KGZpbGUtPmdldFBhdGgoKS5nZXRQYXRoRXh0ZW5zaW9uKCkpOwotCi0gICAgLy8gQXQgdGhpcyBwb2ludCwgbm93IHRoYXQgd2UgaGF2ZSBhbGwgdGhlIHJlc291cmNlIGRhdGEsIGFsbCB3ZSBuZWVkIHRvCi0gICAgLy8gZG8gaXMgY29tcGlsZSBYTUwgZmlsZXMuCi0gICAgaWYgKHN0cmNtcChleHQuc3RyaW5nKCksICIueG1sIikgPT0gMCkgewotICAgICAgICByZXR1cm4gY29tcGlsZVhtbEZpbGUoYXNzZXRzLCBmaWxlLCB0YWJsZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9JbWFnZXMuaCBiL3Rvb2xzL2FhcHQvSW1hZ2VzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYjY1NTQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9JbWFnZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQnVpbGQgcmVzb3VyY2UgZmlsZXMgZnJvbSByYXcgYXNzZXRzLgotLy8KLQotI2lmbmRlZiBJTUFHRVNfSAotI2RlZmluZSBJTUFHRVNfSAotCi0jaW5jbHVkZSAiUmVzb3VyY2VUYWJsZS5oIgotI2luY2x1ZGUgIkJ1bmRsZS5oIgotCi0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KLQotdXNpbmcgYW5kcm9pZDo6U3RyaW5nODsKLQotc3RhdHVzX3QgcHJlUHJvY2Vzc0ltYWdlKGNvbnN0IEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSwgU3RyaW5nOCogb3V0TmV3TGVhZk5hbWUpOwotCi1zdGF0dXNfdCBwcmVQcm9jZXNzSW1hZ2VUb0NhY2hlKGNvbnN0IEJ1bmRsZSogYnVuZGxlLCBjb25zdCBTdHJpbmc4JiBzb3VyY2UsIGNvbnN0IFN0cmluZzgmIGRlc3QpOwotCi1zdGF0dXNfdCBwb3N0UHJvY2Vzc0ltYWdlKGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIHRhYmxlLCBjb25zdCBzcDxBYXB0RmlsZT4mIGZpbGUpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvTWFpbi5jcHAgYi90b29scy9hYXB0L01haW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzcyMjZiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvTWFpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NTEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBBbmRyb2lkIEFzc2V0IFBhY2thZ2luZyBUb29sIG1haW4gZW50cnkgcG9pbnQuCi0vLwotI2luY2x1ZGUgIk1haW4uaCIKLSNpbmNsdWRlICJCdW5kbGUuaCIKLQotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KLSNpbmNsdWRlIDx1dGlscy9MaXN0Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxnZXRvcHQuaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBnUHJvZ05hbWUgPSAiYWFwdCI7Ci0KLS8qCi0gKiBXaGVuIHJ1bm5pbmcgdW5kZXIgQ3lnd2luIG9uIFdpbmRvd3MsIHRoaXMgd2lsbCBjb252ZXJ0IHNsYXNoLWJhc2VkCi0gKiBwYXRocyBpbnRvIGJhY2stc2xhc2gtYmFzZWQgb25lcy4gT3RoZXJ3aXNlIHRoZSBBcHB0QXNzZXRzIGZpbGUgY29tcGFyaXNvbnMKLSAqIGZhaWwgbGF0ZXIgYXMgdGhleSB1c2UgYmFjay1zbGFzaCBzZXBhcmF0b3JzIHVuZGVyIFdpbmRvd3MuCi0gKgotICogVGhpcyBvcGVyYXRlcyBpbi1wbGFjZSBvbiB0aGUgcGF0aCBzdHJpbmcuCi0gKi8KLXZvaWQgY29udmVydFBhdGgoY2hhciAqcGF0aCkgewotICBpZiAocGF0aCAhPSBOVUxMICYmIE9TX1BBVEhfU0VQQVJBVE9SICE9ICcvJykgewotICAgIGZvciAoOyAqcGF0aDsgcGF0aCsrKSB7Ci0gICAgICBpZiAoKnBhdGggPT0gJy8nKSB7Ci0gICAgICAgICpwYXRoID0gT1NfUEFUSF9TRVBBUkFUT1I7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLS8qCi0gKiBQcmludCB1c2FnZSBpbmZvLgotICovCi12b2lkIHVzYWdlKHZvaWQpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJBbmRyb2lkIEFzc2V0IFBhY2thZ2luZyBUb29sXG5cbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6XG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyBsW2lzdF0gWy12XSBbLWFdIGZpbGUue3ppcCxqYXIsYXBrfVxuIgotICAgICAgICAiICAgTGlzdCBjb250ZW50cyBvZiBaaXAtY29tcGF0aWJsZSBhcmNoaXZlLlxuXG4iLCBnUHJvZ05hbWUpOwotICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAiICVzIGRbdW1wXSBbLS12YWx1ZXNdIFdIQVQgZmlsZS57YXBrfSBbYXNzZXQgW2Fzc2V0IC4uLl1dXG4iCi0gICAgICAgICIgICBzdHJpbmdzICAgICAgICAgIFByaW50IHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdGFibGUgc3RyaW5nIHBvb2wgaW4gdGhlIEFQSy5cbiIKLSAgICAgICAgIiAgIGJhZGdpbmcgICAgICAgICAgUHJpbnQgdGhlIGxhYmVsIGFuZCBpY29uIGZvciB0aGUgYXBwIGRlY2xhcmVkIGluIEFQSy5cbiIKLSAgICAgICAgIiAgIHBlcm1pc3Npb25zICAgICAgUHJpbnQgdGhlIHBlcm1pc3Npb25zIGZyb20gdGhlIEFQSy5cbiIKLSAgICAgICAgIiAgIHJlc291cmNlcyAgICAgICAgUHJpbnQgdGhlIHJlc291cmNlIHRhYmxlIGZyb20gdGhlIEFQSy5cbiIKLSAgICAgICAgIiAgIGNvbmZpZ3VyYXRpb25zICAgUHJpbnQgdGhlIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBBUEsuXG4iCi0gICAgICAgICIgICB4bWx0cmVlICAgICAgICAgIFByaW50IHRoZSBjb21waWxlZCB4bWxzIGluIHRoZSBnaXZlbiBhc3NldHMuXG4iCi0gICAgICAgICIgICB4bWxzdHJpbmdzICAgICAgIFByaW50IHRoZSBzdHJpbmdzIG9mIHRoZSBnaXZlbiBjb21waWxlZCB4bWwgYXNzZXRzLlxuXG4iLCBnUHJvZ05hbWUpOwotICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAiICVzIHBbYWNrYWdlXSBbLWRdWy1mXVstbV1bLXVdWy12XVsteF1bLXpdWy1NIEFuZHJvaWRNYW5pZmVzdC54bWxdIFxcXG4iCi0gICAgICAgICIgICAgICAgIFstMCBleHRlbnNpb24gWy0wIGV4dGVuc2lvbiAuLi5dXSBbLWcgdG9sZXJhbmNlXSBbLWogamFyZmlsZV0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy0tZGVidWctbW9kZV0gWy0tbWluLXNkay12ZXJzaW9uIFZBTF0gWy0tdGFyZ2V0LXNkay12ZXJzaW9uIFZBTF0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy0tYXBwLXZlcnNpb24gVkFMXSBbLS1hcHAtdmVyc2lvbi1uYW1lIFRFWFRdIFstLWN1c3RvbS1wYWNrYWdlIFZBTF0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy0tcmVuYW1lLW1hbmlmZXN0LXBhY2thZ2UgUEFDS0FHRV0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy0tcmVuYW1lLWluc3RydW1lbnRhdGlvbi10YXJnZXQtcGFja2FnZSBQQUNLQUdFXSBcXFxuIgotICAgICAgICAiICAgICAgICBbLS11dGYxNl0gWy0tYXV0by1hZGQtb3ZlcmxheV0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy0tbWF4LXJlcy12ZXJzaW9uIFZBTF0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy1JIGJhc2UtcGFja2FnZSBbLUkgYmFzZS1wYWNrYWdlIC4uLl1dIFxcXG4iCi0gICAgICAgICIgICAgICAgIFstQSBhc3NldC1zb3VyY2UtZGlyXSAgWy1HIGNsYXNzLWxpc3QtZmlsZV0gWy1QIHB1YmxpYy1kZWZpbml0aW9ucy1maWxlXSBcXFxuIgotICAgICAgICAiICAgICAgICBbLVMgcmVzb3VyY2Utc291cmNlcyBbLVMgcmVzb3VyY2Utc291cmNlcyAuLi5dXSBcXFxuIgotICAgICAgICAiICAgICAgICBbLUYgYXBrLWZpbGVdIFstSiBSLWZpbGUtZGlyXSBcXFxuIgotICAgICAgICAiICAgICAgICBbLS1wcm9kdWN0IHByb2R1Y3QxLHByb2R1Y3QyLC4uLl0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy1jIENPTkZJR1NdIFstLXByZWZlcnJlZC1jb25maWd1cmF0aW9ucyBDT05GSUdTXSBcXFxuIgotICAgICAgICAiICAgICAgICBbcmF3LWZpbGVzLWRpciBbcmF3LWZpbGVzLWRpcl0gLi4uXSBcXFxuIgotICAgICAgICAiICAgICAgICBbLS1vdXRwdXQtdGV4dC1zeW1ib2xzIERJUl1cbiIKLSAgICAgICAgIlxuIgotICAgICAgICAiICAgUGFja2FnZSB0aGUgYW5kcm9pZCByZXNvdXJjZXMuICBJdCB3aWxsIHJlYWQgYXNzZXRzIGFuZCByZXNvdXJjZXMgdGhhdCBhcmVcbiIKLSAgICAgICAgIiAgIHN1cHBsaWVkIHdpdGggdGhlIC1NIC1BIC1TIG9yIHJhdy1maWxlcy1kaXIgYXJndW1lbnRzLiAgVGhlIC1KIC1QIC1GIGFuZCAtUlxuIgotICAgICAgICAiICAgb3B0aW9ucyBjb250cm9sIHdoaWNoIGZpbGVzIGFyZSBvdXRwdXQuXG5cbiIKLSAgICAgICAgLCBnUHJvZ05hbWUpOwotICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAiICVzIHJbZW1vdmVdIFstdl0gZmlsZS57emlwLGphcixhcGt9IGZpbGUxIFtmaWxlMiAuLi5dXG4iCi0gICAgICAgICIgICBEZWxldGUgc3BlY2lmaWVkIGZpbGVzIGZyb20gWmlwLWNvbXBhdGlibGUgYXJjaGl2ZS5cblxuIiwKLSAgICAgICAgZ1Byb2dOYW1lKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyBhW2RkXSBbLXZdIGZpbGUue3ppcCxqYXIsYXBrfSBmaWxlMSBbZmlsZTIgLi4uXVxuIgotICAgICAgICAiICAgQWRkIHNwZWNpZmllZCBmaWxlcyB0byBaaXAtY29tcGF0aWJsZSBhcmNoaXZlLlxuXG4iLCBnUHJvZ05hbWUpOwotICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAiICVzIGNbcnVuY2hdIFstdl0gLVMgcmVzb3VyY2Utc291cmNlcyAuLi4gLUMgb3V0cHV0LWZvbGRlciAuLi5cbiIKLSAgICAgICAgIiAgIERvIFBORyBwcmVwcm9jZXNzaW5nIG9uIG9uZSBvciBzZXZlcmFsIHJlc291cmNlIGZvbGRlcnNcbiIKLSAgICAgICAgIiAgIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiB0aGUgb3V0cHV0IGZvbGRlci5cblxuIiwgZ1Byb2dOYW1lKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyBzW2luZ2xlQ3J1bmNoXSBbLXZdIC1pIGlucHV0LWZpbGUgLW8gb3V0cHV0ZmlsZVxuIgotICAgICAgICAiICAgRG8gUE5HIHByZXByb2Nlc3Npbmcgb24gYSBzaW5nbGUgZmlsZS5cblxuIiwgZ1Byb2dOYW1lKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyB2W2Vyc2lvbl1cbiIKLSAgICAgICAgIiAgIFByaW50IHByb2dyYW0gdmVyc2lvbi5cblxuIiwgZ1Byb2dOYW1lKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiBNb2RpZmllcnM6XG4iCi0gICAgICAgICIgICAtYSAgcHJpbnQgQW5kcm9pZC1zcGVjaWZpYyBkYXRhIChyZXNvdXJjZXMsIG1hbmlmZXN0KSB3aGVuIGxpc3RpbmdcbiIKLSAgICAgICAgIiAgIC1jICBzcGVjaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb25zIHRvIGluY2x1ZGUuICBUaGUgZGVmYXVsdCBpcyBhbGxcbiIKLSAgICAgICAgIiAgICAgICBjb25maWd1cmF0aW9ucy4gIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIHNob3VsZCBiZSBhIGNvbW1hXG4iCi0gICAgICAgICIgICAgICAgc2VwYXJhdGVkIGxpc3Qgb2YgY29uZmlndXJhdGlvbiB2YWx1ZXMuICBMb2NhbGVzIHNob3VsZCBiZSBzcGVjaWZpZWRcbiIKLSAgICAgICAgIiAgICAgICBhcyBlaXRoZXIgYSBsYW5ndWFnZSBvciBsYW5ndWFnZS1yZWdpb24gcGFpci4gIFNvbWUgZXhhbXBsZXM6XG4iCi0gICAgICAgICIgICAgICAgICAgICBlblxuIgotICAgICAgICAiICAgICAgICAgICAgcG9ydCxlblxuIgotICAgICAgICAiICAgICAgICAgICAgcG9ydCxsYW5kLGVuX1VTXG4iCi0gICAgICAgICIgICAgICAgSWYgeW91IHB1dCB0aGUgc3BlY2lhbCBsb2NhbGUsIHp6X1paIG9uIHRoZSBsaXN0LCBpdCB3aWxsIHBlcmZvcm1cbiIKLSAgICAgICAgIiAgICAgICBwc2V1ZG9sb2NhbGl6YXRpb24gb24gdGhlIGRlZmF1bHQgbG9jYWxlLCBtb2RpZnlpbmcgYWxsIG9mIHRoZVxuIgotICAgICAgICAiICAgICAgIHN0cmluZ3Mgc28geW91IGNhbiBsb29rIGZvciBzdHJpbmdzIHRoYXQgbWlzc2VkIHRoZVxuIgotICAgICAgICAiICAgICAgIGludGVybmF0aW9uYWxpemF0aW9uIHByb2Nlc3MuICBGb3IgZXhhbXBsZTpcbiIKLSAgICAgICAgIiAgICAgICAgICAgIHBvcnQsbGFuZCx6el9aWlxuIgotICAgICAgICAiICAgLWQgIG9uZSBvciBtb3JlIGRldmljZSBhc3NldHMgdG8gaW5jbHVkZSwgc2VwYXJhdGVkIGJ5IGNvbW1hc1xuIgotICAgICAgICAiICAgLWYgIGZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBmaWxlc1xuIgotICAgICAgICAiICAgLWcgIHNwZWNpZnkgYSBwaXhlbCB0b2xlcmFuY2UgdG8gZm9yY2UgaW1hZ2VzIHRvIGdyYXlzY2FsZSwgZGVmYXVsdCAwXG4iCi0gICAgICAgICIgICAtaiAgc3BlY2lmeSBhIGphciBvciB6aXAgZmlsZSBjb250YWluaW5nIGNsYXNzZXMgdG8gaW5jbHVkZVxuIgotICAgICAgICAiICAgLWsgIGp1bmsgcGF0aCBvZiBmaWxlKHMpIGFkZGVkXG4iCi0gICAgICAgICIgICAtbSAgbWFrZSBwYWNrYWdlIGRpcmVjdG9yaWVzIHVuZGVyIGxvY2F0aW9uIHNwZWNpZmllZCBieSAtSlxuIgotI2lmIDAKLSAgICAgICAgIiAgIC1wICBwc2V1ZG9sb2NhbGl6ZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4iCi0jZW5kaWYKLSAgICAgICAgIiAgIC11ICB1cGRhdGUgZXhpc3RpbmcgcGFja2FnZXMgKGFkZCBuZXcsIHJlcGxhY2Ugb2xkZXIsIHJlbW92ZSBkZWxldGVkIGZpbGVzKVxuIgotICAgICAgICAiICAgLXYgIHZlcmJvc2Ugb3V0cHV0XG4iCi0gICAgICAgICIgICAteCAgY3JlYXRlIGV4dGVuZGluZyAobm9uLWFwcGxpY2F0aW9uKSByZXNvdXJjZSBJRHNcbiIKLSAgICAgICAgIiAgIC16ICByZXF1aXJlIGxvY2FsaXphdGlvbiBvZiByZXNvdXJjZSBhdHRyaWJ1dGVzIG1hcmtlZCB3aXRoXG4iCi0gICAgICAgICIgICAgICAgbG9jYWxpemF0aW9uPVwic3VnZ2VzdGVkXCJcbiIKLSAgICAgICAgIiAgIC1BICBhZGRpdGlvbmFsIGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHJhdyBhc3NldCBmaWxlc1xuIgotICAgICAgICAiICAgLUcgIEEgZmlsZSB0byBvdXRwdXQgcHJvZ3VhcmQgb3B0aW9ucyBpbnRvLlxuIgotICAgICAgICAiICAgLUYgIHNwZWNpZnkgdGhlIGFwayBmaWxlIHRvIG91dHB1dFxuIgotICAgICAgICAiICAgLUkgIGFkZCBhbiBleGlzdGluZyBwYWNrYWdlIHRvIGJhc2UgaW5jbHVkZSBzZXRcbiIKLSAgICAgICAgIiAgIC1KICBzcGVjaWZ5IHdoZXJlIHRvIG91dHB1dCBSLmphdmEgcmVzb3VyY2UgY29uc3RhbnQgZGVmaW5pdGlvbnNcbiIKLSAgICAgICAgIiAgIC1NICBzcGVjaWZ5IGZ1bGwgcGF0aCB0byBBbmRyb2lkTWFuaWZlc3QueG1sIHRvIGluY2x1ZGUgaW4gemlwXG4iCi0gICAgICAgICIgICAtUCAgc3BlY2lmeSB3aGVyZSB0byBvdXRwdXQgcHVibGljIHJlc291cmNlIGRlZmluaXRpb25zXG4iCi0gICAgICAgICIgICAtUyAgZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgcmVzb3VyY2VzLiAgTXVsdGlwbGUgZGlyZWN0b3JpZXMgd2lsbCBiZSBzY2FubmVkXG4iCi0gICAgICAgICIgICAgICAgYW5kIHRoZSBmaXJzdCBtYXRjaCBmb3VuZCAobGVmdCB0byByaWdodCkgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4iCi0gICAgICAgICIgICAtMCAgc3BlY2lmaWVzIGFuIGFkZGl0aW9uYWwgZXh0ZW5zaW9uIGZvciB3aGljaCBzdWNoIGZpbGVzIHdpbGwgbm90XG4iCi0gICAgICAgICIgICAgICAgYmUgc3RvcmVkIGNvbXByZXNzZWQgaW4gdGhlIC5hcGsuICBBbiBlbXB0eSBzdHJpbmcgbWVhbnMgdG8gbm90XG4iCi0gICAgICAgICIgICAgICAgY29tcHJlc3MgYW55IGZpbGVzIGF0IGFsbC5cbiIKLSAgICAgICAgIiAgIC0tZGVidWctbW9kZVxuIgotICAgICAgICAiICAgICAgIGluc2VydHMgYW5kcm9pZDpkZWJ1Z2dhYmxlPVwidHJ1ZVwiIGluIHRvIHRoZSBhcHBsaWNhdGlvbiBub2RlIG9mIHRoZVxuIgotICAgICAgICAiICAgICAgIG1hbmlmZXN0LCBtYWtpbmcgdGhlIGFwcGxpY2F0aW9uIGRlYnVnZ2FibGUgZXZlbiBvbiBwcm9kdWN0aW9uIGRldmljZXMuXG4iCi0gICAgICAgICIgICAtLW1pbi1zZGstdmVyc2lvblxuIgotICAgICAgICAiICAgICAgIGluc2VydHMgYW5kcm9pZDptaW5TZGtWZXJzaW9uIGluIHRvIG1hbmlmZXN0LiAgSWYgdGhlIHZlcnNpb24gaXMgNyBvclxuIgotICAgICAgICAiICAgICAgIGhpZ2hlciwgdGhlIGRlZmF1bHQgZW5jb2RpbmcgZm9yIHJlc291cmNlcyB3aWxsIGJlIGluIFVURi04LlxuIgotICAgICAgICAiICAgLS10YXJnZXQtc2RrLXZlcnNpb25cbiIKLSAgICAgICAgIiAgICAgICBpbnNlcnRzIGFuZHJvaWQ6dGFyZ2V0U2RrVmVyc2lvbiBpbiB0byBtYW5pZmVzdC5cbiIKLSAgICAgICAgIiAgIC0tbWF4LXJlcy12ZXJzaW9uXG4iCi0gICAgICAgICIgICAgICAgaWdub3JlcyB2ZXJzaW9uZWQgcmVzb3VyY2UgZGlyZWN0b3JpZXMgYWJvdmUgdGhlIGdpdmVuIHZhbHVlLlxuIgotICAgICAgICAiICAgLS12YWx1ZXNcbiIKLSAgICAgICAgIiAgICAgICB3aGVuIHVzZWQgd2l0aCBcImR1bXAgcmVzb3VyY2VzXCIgYWxzbyBpbmNsdWRlcyByZXNvdXJjZSB2YWx1ZXMuXG4iCi0gICAgICAgICIgICAtLXZlcnNpb24tY29kZVxuIgotICAgICAgICAiICAgICAgIGluc2VydHMgYW5kcm9pZDp2ZXJzaW9uQ29kZSBpbiB0byBtYW5pZmVzdC5cbiIKLSAgICAgICAgIiAgIC0tdmVyc2lvbi1uYW1lXG4iCi0gICAgICAgICIgICAgICAgaW5zZXJ0cyBhbmRyb2lkOnZlcnNpb25OYW1lIGluIHRvIG1hbmlmZXN0LlxuIgotICAgICAgICAiICAgLS1jdXN0b20tcGFja2FnZVxuIgotICAgICAgICAiICAgICAgIGdlbmVyYXRlcyBSLmphdmEgaW50byBhIGRpZmZlcmVudCBwYWNrYWdlLlxuIgotICAgICAgICAiICAgLS1leHRyYS1wYWNrYWdlc1xuIgotICAgICAgICAiICAgICAgIGdlbmVyYXRlIFIuamF2YSBmb3IgbGlicmFyaWVzLiBTZXBhcmF0ZSBsaWJyYXJpZXMgd2l0aCAnOicuXG4iCi0gICAgICAgICIgICAtLWdlbmVyYXRlLWRlcGVuZGVuY2llc1xuIgotICAgICAgICAiICAgICAgIGdlbmVyYXRlIGRlcGVuZGVuY3kgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3JpZXMgZm9yIFIuamF2YSBhbmQgcmVzb3VyY2UgcGFja2FnZVxuIgotICAgICAgICAiICAgLS1hdXRvLWFkZC1vdmVybGF5XG4iCi0gICAgICAgICIgICAgICAgQXV0b21hdGljYWxseSBhZGQgcmVzb3VyY2VzIHRoYXQgYXJlIG9ubHkgaW4gb3ZlcmxheXMuXG4iCi0gICAgICAgICIgICAtLXByZWZlcnJlZC1jb25maWd1cmF0aW9uc1xuIgotICAgICAgICAiICAgICAgIExpa2UgdGhlIC1jIG9wdGlvbiBmb3IgZmlsdGVyaW5nIG91dCB1bm5lZWRlZCBjb25maWd1cmF0aW9ucywgYnV0XG4iCi0gICAgICAgICIgICAgICAgb25seSBleHByZXNzZXMgYSBwcmVmZXJlbmNlLiAgSWYgdGhlcmUgaXMgbm8gcmVzb3VyY2UgYXZhaWxhYmxlIHdpdGhcbiIKLSAgICAgICAgIiAgICAgICB0aGUgcHJlZmVycmVkIGNvbmZpZ3VyYXRpb24gdGhlbiBpdCB3aWxsIG5vdCBiZSBzdHJpcHBlZC5cbiIKLSAgICAgICAgIiAgIC0tcmVuYW1lLW1hbmlmZXN0LXBhY2thZ2VcbiIKLSAgICAgICAgIiAgICAgICBSZXdyaXRlIHRoZSBtYW5pZmVzdCBzbyB0aGF0IGl0cyBwYWNrYWdlIG5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZVxuIgotICAgICAgICAiICAgICAgIGdpdmVuIGhlcmUuICBSZWxhdGl2ZSBjbGFzcyBuYW1lcyAoZm9yIGV4YW1wbGUgLkZvbykgd2lsbCBiZVxuIgotICAgICAgICAiICAgICAgIGNoYW5nZWQgdG8gYWJzb2x1dGUgbmFtZXMgd2l0aCB0aGUgb2xkIHBhY2thZ2Ugc28gdGhhdCB0aGUgY29kZVxuIgotICAgICAgICAiICAgICAgIGRvZXMgbm90IG5lZWQgdG8gY2hhbmdlLlxuIgotICAgICAgICAiICAgLS1yZW5hbWUtaW5zdHJ1bWVudGF0aW9uLXRhcmdldC1wYWNrYWdlXG4iCi0gICAgICAgICIgICAgICAgUmV3cml0ZSB0aGUgbWFuaWZlc3Qgc28gdGhhdCBhbGwgb2YgaXRzIGluc3RydW1lbnRhdGlvblxuIgotICAgICAgICAiICAgICAgIGNvbXBvbmVudHMgdGFyZ2V0IHRoZSBnaXZlbiBwYWNrYWdlLiAgVXNlZnVsIHdoZW4gdXNlZCBpblxuIgotICAgICAgICAiICAgICAgIGNvbmp1bmN0aW9uIHdpdGggLS1yZW5hbWUtbWFuaWZlc3QtcGFja2FnZSB0byBmaXggdGVzdHMgYWdhaW5zdFxuIgotICAgICAgICAiICAgICAgIGEgcGFja2FnZSB0aGF0IGhhcyBiZWVuIHJlbmFtZWQuXG4iCi0gICAgICAgICIgICAtLXByb2R1Y3RcbiIKLSAgICAgICAgIiAgICAgICBTcGVjaWZpZXMgd2hpY2ggdmFyaWFudCB0byBjaG9vc2UgZm9yIHN0cmluZ3MgdGhhdCBoYXZlXG4iCi0gICAgICAgICIgICAgICAgcHJvZHVjdCB2YXJpYW50c1xuIgotICAgICAgICAiICAgLS11dGYxNlxuIgotICAgICAgICAiICAgICAgIGNoYW5nZXMgZGVmYXVsdCBlbmNvZGluZyBmb3IgcmVzb3VyY2VzIHRvIFVURi0xNi4gIE9ubHkgdXNlZnVsIHdoZW4gQVBJXG4iCi0gICAgICAgICIgICAgICAgbGV2ZWwgaXMgc2V0IHRvIDcgb3IgaGlnaGVyIHdoZXJlIHRoZSBkZWZhdWx0IGVuY29kaW5nIGlzIFVURi04LlxuIgotICAgICAgICAiICAgLS1ub24tY29uc3RhbnQtaWRcbiIKLSAgICAgICAgIiAgICAgICBNYWtlIHRoZSByZXNvdXJjZXMgSUQgbm9uIGNvbnN0YW50LiBUaGlzIGlzIHJlcXVpcmVkIHRvIG1ha2UgYW4gUiBqYXZhIGNsYXNzXG4iCi0gICAgICAgICIgICAgICAgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBmaW5hbCB2YWx1ZSBidXQgaXMgdXNlZCB0byBtYWtlIHJldXNhYmxlIGNvbXBpbGVkXG4iCi0gICAgICAgICIgICAgICAgbGlicmFyaWVzIHRoYXQgbmVlZCB0byBhY2Nlc3MgcmVzb3VyY2VzLlxuIgotICAgICAgICAiICAgLS1lcnJvci1vbi1mYWlsZWQtaW5zZXJ0XG4iCi0gICAgICAgICIgICAgICAgRm9yY2VzIGFhcHQgdG8gcmV0dXJuIGFuIGVycm9yIGlmIGl0IGZhaWxzIHRvIGluc2VydCB2YWx1ZXMgaW50byB0aGUgbWFuaWZlc3RcbiIKLSAgICAgICAgIiAgICAgICB3aXRoIC0tZGVidWctbW9kZSwgLS1taW4tc2RrLXZlcnNpb24sIC0tdGFyZ2V0LXNkay12ZXJzaW9uIC0tdmVyc2lvbi1jb2RlXG4iCi0gICAgICAgICIgICAgICAgYW5kIC0tdmVyc2lvbi1uYW1lLlxuIgotICAgICAgICAiICAgICAgIEluc2VydGlvbiB0eXBpY2FsbHkgZmFpbHMgaWYgdGhlIG1hbmlmZXN0IGFscmVhZHkgZGVmaW5lcyB0aGUgYXR0cmlidXRlLlxuIgotICAgICAgICAiICAgLS1vdXRwdXQtdGV4dC1zeW1ib2xzXG4iCi0gICAgICAgICIgICAgICAgR2VuZXJhdGVzIGEgdGV4dCBmaWxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlIHN5bWJvbHMgb2YgdGhlIFIgY2xhc3MgaW4gdGhlXG4iCi0gICAgICAgICIgICAgICAgc3BlY2lmaWVkIGZvbGRlci5cbiIKLSAgICAgICAgIiAgIC0taWdub3JlLWFzc2V0c1xuIgotICAgICAgICAiICAgICAgIEFzc2V0cyB0byBiZSBpZ25vcmVkLiBEZWZhdWx0IHBhdHRlcm4gaXM6XG4iCi0gICAgICAgICIgICAgICAgJXNcbiIsCi0gICAgICAgIGdEZWZhdWx0SWdub3JlQXNzZXRzKTsKLX0KLQotLyoKLSAqIERpc3BhdGNoIHRoZSBjb21tYW5kLgotICovCi1pbnQgaGFuZGxlQ29tbWFuZChCdW5kbGUqIGJ1bmRsZSkKLXsKLSAgICAvL3ByaW50ZigiLS0tIGNvbW1hbmQgJWQgKHZlcmJvc2U9JWQgZm9yY2U9JWQpOlxuIiwKLSAgICAvLyAgICBidW5kbGUtPmdldENvbW1hbmQoKSwgYnVuZGxlLT5nZXRWZXJib3NlKCksIGJ1bmRsZS0+Z2V0Rm9yY2UoKSk7Ci0gICAgLy9mb3IgKGludCBpID0gMDsgaSA8IGJ1bmRsZS0+Z2V0RmlsZVNwZWNDb3VudCgpOyBpKyspCi0gICAgLy8gICAgcHJpbnRmKCIgICVkOiAnJXMnXG4iLCBpLCBidW5kbGUtPmdldEZpbGVTcGVjRW50cnkoaSkpOwotCi0gICAgc3dpdGNoIChidW5kbGUtPmdldENvbW1hbmQoKSkgewotICAgIGNhc2Uga0NvbW1hbmRWZXJzaW9uOiAgICAgIHJldHVybiBkb1ZlcnNpb24oYnVuZGxlKTsKLSAgICBjYXNlIGtDb21tYW5kTGlzdDogICAgICAgICByZXR1cm4gZG9MaXN0KGJ1bmRsZSk7Ci0gICAgY2FzZSBrQ29tbWFuZER1bXA6ICAgICAgICAgcmV0dXJuIGRvRHVtcChidW5kbGUpOwotICAgIGNhc2Uga0NvbW1hbmRBZGQ6ICAgICAgICAgIHJldHVybiBkb0FkZChidW5kbGUpOwotICAgIGNhc2Uga0NvbW1hbmRSZW1vdmU6ICAgICAgIHJldHVybiBkb1JlbW92ZShidW5kbGUpOwotICAgIGNhc2Uga0NvbW1hbmRQYWNrYWdlOiAgICAgIHJldHVybiBkb1BhY2thZ2UoYnVuZGxlKTsKLSAgICBjYXNlIGtDb21tYW5kQ3J1bmNoOiAgICAgICByZXR1cm4gZG9DcnVuY2goYnVuZGxlKTsKLSAgICBjYXNlIGtDb21tYW5kU2luZ2xlQ3J1bmNoOiByZXR1cm4gZG9TaW5nbGVDcnVuY2goYnVuZGxlKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiByZXF1ZXN0ZWQgY29tbWFuZCBub3QgeWV0IHN1cHBvcnRlZFxuIiwgZ1Byb2dOYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQotCi0vKgotICogUGFyc2UgYXJncy4KLSAqLwotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGNvbnN0IGFyZ3ZbXSkKLXsKLSAgICBjaGFyICpwcm9nID0gYXJndlswXTsKLSAgICBCdW5kbGUgYnVuZGxlOwotICAgIGJvb2wgd2FudFVzYWdlID0gZmFsc2U7Ci0gICAgaW50IHJlc3VsdCA9IDE7ICAgIC8vIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgYW4gZXJyb3IuCi0gICAgaW50IHRvbGVyYW5jZSA9IDA7Ci0KLSAgICAvKiBkZWZhdWx0IHRvIGNvbXByZXNzaW9uICovCi0gICAgYnVuZGxlLnNldENvbXByZXNzaW9uTWV0aG9kKFppcEVudHJ5OjprQ29tcHJlc3NEZWZsYXRlZCk7Ci0KLSAgICBpZiAoYXJnYyA8IDIpIHsKLSAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGlmIChhcmd2WzFdWzBdID09ICd2JykKLSAgICAgICAgYnVuZGxlLnNldENvbW1hbmQoa0NvbW1hbmRWZXJzaW9uKTsKLSAgICBlbHNlIGlmIChhcmd2WzFdWzBdID09ICdkJykKLSAgICAgICAgYnVuZGxlLnNldENvbW1hbmQoa0NvbW1hbmREdW1wKTsKLSAgICBlbHNlIGlmIChhcmd2WzFdWzBdID09ICdsJykKLSAgICAgICAgYnVuZGxlLnNldENvbW1hbmQoa0NvbW1hbmRMaXN0KTsKLSAgICBlbHNlIGlmIChhcmd2WzFdWzBdID09ICdhJykKLSAgICAgICAgYnVuZGxlLnNldENvbW1hbmQoa0NvbW1hbmRBZGQpOwotICAgIGVsc2UgaWYgKGFyZ3ZbMV1bMF0gPT0gJ3InKQotICAgICAgICBidW5kbGUuc2V0Q29tbWFuZChrQ29tbWFuZFJlbW92ZSk7Ci0gICAgZWxzZSBpZiAoYXJndlsxXVswXSA9PSAncCcpCi0gICAgICAgIGJ1bmRsZS5zZXRDb21tYW5kKGtDb21tYW5kUGFja2FnZSk7Ci0gICAgZWxzZSBpZiAoYXJndlsxXVswXSA9PSAnYycpCi0gICAgICAgIGJ1bmRsZS5zZXRDb21tYW5kKGtDb21tYW5kQ3J1bmNoKTsKLSAgICBlbHNlIGlmIChhcmd2WzFdWzBdID09ICdzJykKLSAgICAgICAgYnVuZGxlLnNldENvbW1hbmQoa0NvbW1hbmRTaW5nbGVDcnVuY2gpOwotICAgIGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBVbmtub3duIGNvbW1hbmQgJyVzJ1xuIiwgYXJndlsxXSk7Ci0gICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0gICAgYXJnYyAtPSAyOwotICAgIGFyZ3YgKz0gMjsKLQotICAgIC8qCi0gICAgICogUHVsbCBvdXQgZmxhZ3MuICBXZSBzdXBwb3J0ICItZnYiIGFuZCAiLWYgLXYiLgotICAgICAqLwotICAgIHdoaWxlIChhcmdjICYmIGFyZ3ZbMF1bMF0gPT0gJy0nKSB7Ci0gICAgICAgIC8qIGZsYWcocykgZm91bmQgKi8KLSAgICAgICAgY29uc3QgY2hhciogY3AgPSBhcmd2WzBdICsxOwotCi0gICAgICAgIHdoaWxlICgqY3AgIT0gJ1wwJykgewotICAgICAgICAgICAgc3dpdGNoICgqY3ApIHsKLSAgICAgICAgICAgIGNhc2UgJ3YnOgotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRWZXJib3NlKHRydWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnYSc6Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldEFuZHJvaWRMaXN0KHRydWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctYycgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBidW5kbGUuYWRkQ29uZmlndXJhdGlvbnMoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0Rm9yY2UodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdnJzoKLSAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy1nJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRvbGVyYW5jZSA9IGF0b2koYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldEdyYXlzY2FsZVRvbGVyYW5jZSh0b2xlcmFuY2UpOwotICAgICAgICAgICAgICAgIHByaW50ZigiJXM6IEltYWdlcyB3aXRoIGRldmlhdGlvbiA8PSAlZCB3aWxsIGJlIGZvcmNlZCB0byBncmF5c2NhbGUuXG4iLCBwcm9nLCB0b2xlcmFuY2UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnayc6Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldEp1bmtQYXRoKHRydWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnbSc6Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldE1ha2VQYWNrYWdlRGlycyh0cnVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNpZiAwCi0gICAgICAgICAgICBjYXNlICdwJzoKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0UHNldWRvbG9jYWxpemUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRVcGRhdGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0RXh0ZW5kaW5nKHRydWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAneic6Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldFJlcXVpcmVMb2NhbGl6YXRpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdqJzoKLSAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy1qJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnZlcnRQYXRoKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJ1bmRsZS5hZGRKYXJGaWxlKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnQSc6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctQScgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb252ZXJ0UGF0aChhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0QXNzZXRTb3VyY2VEaXIoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdHJzoKLSAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy1HJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnZlcnRQYXRoKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRQcm9ndWFyZEZpbGUoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdJJzoKLSAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy1JJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnZlcnRQYXRoKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJ1bmRsZS5hZGRQYWNrYWdlSW5jbHVkZShhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ0YnOgotICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLUYnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udmVydFBhdGgoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldE91dHB1dEFQS0ZpbGUoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdKJzoKLSAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy1KJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnZlcnRQYXRoKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRSQ2xhc3NEaXIoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdNJzoKLSAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy1NJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnZlcnRQYXRoKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRBbmRyb2lkTWFuaWZlc3RGaWxlKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnUCc6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctUCcgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb252ZXJ0UGF0aChhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0UHVibGljT3V0cHV0RmlsZShhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLVMnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udmVydFBhdGgoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnVuZGxlLmFkZFJlc291cmNlU291cmNlRGlyKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnQyc6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctQycgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb252ZXJ0UGF0aChhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0Q3J1bmNoZWRPdXRwdXREaXIoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy1pJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnZlcnRQYXRoKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRTaW5nbGVDcnVuY2hJbnB1dEZpbGUoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdvJzoKLSAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy1vJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnZlcnRQYXRoKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRTaW5nbGVDcnVuY2hPdXRwdXRGaWxlKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnMCc6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctZScgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYXJndlswXVswXSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5hZGROb0NvbXByZXNzRXh0ZW5zaW9uKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRDb21wcmVzc2lvbk1ldGhvZChaaXBFbnRyeTo6a0NvbXByZXNzU3RvcmVkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICctJzoKLSAgICAgICAgICAgICAgICBpZiAoc3RyY21wKGNwLCAiLWRlYnVnLW1vZGUiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXREZWJ1Z01vZGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItbWluLXNkay12ZXJzaW9uIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy0tbWluLXNkay12ZXJzaW9uJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0TWluU2RrVmVyc2lvbihhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi10YXJnZXQtc2RrLXZlcnNpb24iKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLS10YXJnZXQtc2RrLXZlcnNpb24nIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRUYXJnZXRTZGtWZXJzaW9uKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLW1heC1zZGstdmVyc2lvbiIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctLW1heC1zZGstdmVyc2lvbicgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnNldE1heFNka1ZlcnNpb24oYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItbWF4LXJlcy12ZXJzaW9uIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy0tbWF4LXJlcy12ZXJzaW9uJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0TWF4UmVzVmVyc2lvbihhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi12ZXJzaW9uLWNvZGUiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLS12ZXJzaW9uLWNvZGUnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRWZXJzaW9uQ29kZShhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi12ZXJzaW9uLW5hbWUiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLS12ZXJzaW9uLW5hbWUnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRWZXJzaW9uTmFtZShhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi12YWx1ZXMiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRWYWx1ZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItY3VzdG9tLXBhY2thZ2UiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLS1jdXN0b20tcGFja2FnZScgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnNldEN1c3RvbVBhY2thZ2UoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItZXh0cmEtcGFja2FnZXMiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLS1leHRyYS1wYWNrYWdlcycgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnNldEV4dHJhUGFja2FnZXMoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItZ2VuZXJhdGUtZGVwZW5kZW5jaWVzIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0R2VuRGVwZW5kZW5jaWVzKHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLXV0ZjE2IikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0V2FudFVURjE2KHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLXByZWZlcnJlZC1jb25maWd1cmF0aW9ucyIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctLXByZWZlcnJlZC1jb25maWd1cmF0aW9ucycgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLmFkZFByZWZlcnJlZENvbmZpZ3VyYXRpb25zKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLXJlbmFtZS1tYW5pZmVzdC1wYWNrYWdlIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy0tcmVuYW1lLW1hbmlmZXN0LXBhY2thZ2UnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRNYW5pZmVzdFBhY2thZ2VOYW1lT3ZlcnJpZGUoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItcmVuYW1lLWluc3RydW1lbnRhdGlvbi10YXJnZXQtcGFja2FnZSIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctLXJlbmFtZS1pbnN0cnVtZW50YXRpb24tdGFyZ2V0LXBhY2thZ2UnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRJbnN0cnVtZW50YXRpb25QYWNrYWdlTmFtZU92ZXJyaWRlKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLWF1dG8tYWRkLW92ZXJsYXkiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRBdXRvQWRkT3ZlcmxheSh0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi1lcnJvci1vbi1mYWlsZWQtaW5zZXJ0IikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0RXJyb3JPbkZhaWxlZEluc2VydCh0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi1vdXRwdXQtdGV4dC1zeW1ib2xzIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy1vdXRwdXQtdGV4dC1zeW1ib2xzJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0T3V0cHV0VGV4dFN5bWJvbHMoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItcHJvZHVjdCIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctLXByb2R1Y3QnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRQcm9kdWN0KGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLW5vbi1jb25zdGFudC1pZCIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnNldE5vbkNvbnN0YW50SWQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItbm8tY3J1bmNoIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0VXNlQ3J1bmNoQ2FjaGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItaWdub3JlLWFzc2V0cyIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctLWlnbm9yZS1hc3NldHMnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGdVc2VySWdub3JlQXNzZXRzID0gYXJndlswXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBVbmtub3duIG9wdGlvbiAnLSVzJ1xuIiwgY3ApOwotICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNwICs9IHN0cmxlbihjcCkgLSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBVbmtub3duIGZsYWcgJy0lYydcbiIsICpjcCk7Ci0gICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNwKys7Ci0gICAgICAgIH0KLSAgICAgICAgYXJnYy0tOwotICAgICAgICBhcmd2Kys7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBXZSdyZSBwYXN0IHRoZSBmbGFncy4gIFRoZSByZXN0IGFsbCBnb2VzIHN0cmFpZ2h0IGluLgotICAgICAqLwotICAgIGJ1bmRsZS5zZXRGaWxlU3BlYyhhcmd2LCBhcmdjKTsKLQotICAgIHJlc3VsdCA9IGhhbmRsZUNvbW1hbmQoJmJ1bmRsZSk7Ci0KLWJhaWw6Ci0gICAgaWYgKHdhbnRVc2FnZSkgewotICAgICAgICB1c2FnZSgpOwotICAgICAgICByZXN1bHQgPSAyOwotICAgIH0KLQotICAgIC8vcHJpbnRmKCItLT4gcmV0dXJuaW5nICVkXG4iLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19CmRpZmYgLS1naXQgYS90b29scy9hYXB0L01haW4uaCBiL3Rvb2xzL2FhcHQvTWFpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmIzOWFjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvTWFpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBTb21lIGdsb2JhbCBkZWZpbmVzIHRoYXQgZG9uJ3QgcmVhbGx5IG1lcml0IHRoZWlyIG93biBoZWFkZXIuCi0vLwotI2lmbmRlZiBfX01BSU5fSAotI2RlZmluZSBfX01BSU5fSAotCi0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgotI2luY2x1ZGUgPHV0aWxzL0xpc3QuaD4KLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KLSNpbmNsdWRlICJCdW5kbGUuaCIKLSNpbmNsdWRlICJBYXB0QXNzZXRzLmgiCi0jaW5jbHVkZSAiWmlwRmlsZS5oIgotCi0KLS8qIEJlbmNobWFya2luZyBGbGFnICovCi0vLyNkZWZpbmUgQkVOQ0hNQVJLIDEKLQotI2lmIEJFTkNITUFSSwotICAgICNpbmNsdWRlIDx0aW1lLmg+Ci0jZW5kaWYgLyogQkVOQ0hNQVJLICovCi0KLWV4dGVybiBpbnQgZG9WZXJzaW9uKEJ1bmRsZSogYnVuZGxlKTsKLWV4dGVybiBpbnQgZG9MaXN0KEJ1bmRsZSogYnVuZGxlKTsKLWV4dGVybiBpbnQgZG9EdW1wKEJ1bmRsZSogYnVuZGxlKTsKLWV4dGVybiBpbnQgZG9BZGQoQnVuZGxlKiBidW5kbGUpOwotZXh0ZXJuIGludCBkb1JlbW92ZShCdW5kbGUqIGJ1bmRsZSk7Ci1leHRlcm4gaW50IGRvUGFja2FnZShCdW5kbGUqIGJ1bmRsZSk7Ci1leHRlcm4gaW50IGRvQ3J1bmNoKEJ1bmRsZSogYnVuZGxlKTsKLWV4dGVybiBpbnQgZG9TaW5nbGVDcnVuY2goQnVuZGxlKiBidW5kbGUpOwotCi1leHRlcm4gaW50IGNhbGNQZXJjZW50KGxvbmcgdW5jb21wcmVzc2VkTGVuLCBsb25nIGNvbXByZXNzZWRMZW4pOwotCi1leHRlcm4gYW5kcm9pZDo6c3RhdHVzX3Qgd3JpdGVBUEsoQnVuZGxlKiBidW5kbGUsCi0gICAgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICBjb25zdCBhbmRyb2lkOjpTdHJpbmc4JiBvdXRwdXRGaWxlKTsKLQotZXh0ZXJuIGFuZHJvaWQ6OnN0YXR1c190IHVwZGF0ZVByZVByb2Nlc3NlZENhY2hlKEJ1bmRsZSogYnVuZGxlKTsKLQotZXh0ZXJuIGFuZHJvaWQ6OnN0YXR1c190IGJ1aWxkUmVzb3VyY2VzKEJ1bmRsZSogYnVuZGxlLAotICAgIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMpOwotCi1leHRlcm4gYW5kcm9pZDo6c3RhdHVzX3Qgd3JpdGVSZXNvdXJjZVN5bWJvbHMoQnVuZGxlKiBidW5kbGUsCi0gICAgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywgY29uc3QgU3RyaW5nOCYgcGtnTmFtZSwgYm9vbCBpbmNsdWRlUHJpdmF0ZSk7Ci0KLWV4dGVybiBhbmRyb2lkOjpzdGF0dXNfdCB3cml0ZVByb2d1YXJkRmlsZShCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cyk7Ci0KLWV4dGVybiBib29sIGlzVmFsaWRSZXNvdXJjZVR5cGUoY29uc3QgU3RyaW5nOCYgdHlwZSk7Ci0KLXNzaXplX3QgcHJvY2Vzc0Fzc2V0cyhCdW5kbGUqIGJ1bmRsZSwgWmlwRmlsZSogemlwLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzKTsKLQotZXh0ZXJuIHN0YXR1c190IGZpbHRlclJlc291cmNlcyhCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cyk7Ci0KLWludCBkdW1wUmVzb3VyY2VzKEJ1bmRsZSogYnVuZGxlKTsKLQotU3RyaW5nOCBnZXRBdHRyaWJ1dGUoY29uc3QgUmVzWE1MVHJlZSYgdHJlZSwgY29uc3QgY2hhciogbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYXR0ciwgU3RyaW5nOCogb3V0RXJyb3IpOwotCi1zdGF0dXNfdCB3cml0ZURlcGVuZGVuY3lQcmVSZXFzKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFKiBmcCwgYm9vbCBpbmNsdWRlUmF3KTsKLSNlbmRpZiAvLyBfX01BSU5fSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9OT1RJQ0UgYi90b29scy9hYXB0L05PVElDRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzViMWVmYS4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L05PVElDRQorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0KLSAgIENvcHlyaWdodCAoYykgMjAwNS0yMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotCi0gICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9QYWNrYWdlLmNwcCBiL3Rvb2xzL2FhcHQvUGFja2FnZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MmQ5NWMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9QYWNrYWdlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUwNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIFBhY2thZ2UgYXNzZXRzIGludG8gWmlwIGZpbGVzLgotLy8KLSNpbmNsdWRlICJNYWluLmgiCi0jaW5jbHVkZSAiQWFwdEFzc2V0cy5oIgotI2luY2x1ZGUgIlJlc291cmNlVGFibGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUZpbHRlci5oIgotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L21pc2MuaD4KLQotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KLSNpbmNsdWRlIDx1dGlscy9MaXN0Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvbWlzYy5oPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGtFeGNsdWRlRXh0ZW5zaW9uID0gIi5FWENMVURFIjsKLQotLyogdGhlc2UgZm9ybWF0cyBhcmUgYWxyZWFkeSBjb21wcmVzc2VkLCBvciBkb24ndCBjb21wcmVzcyB3ZWxsICovCi1zdGF0aWMgY29uc3QgY2hhcioga05vQ29tcHJlc3NFeHRbXSA9IHsKLSAgICAiLmpwZyIsICIuanBlZyIsICIucG5nIiwgIi5naWYiLAotICAgICIud2F2IiwgIi5tcDIiLCAiLm1wMyIsICIub2dnIiwgIi5hYWMiLAotICAgICIubXBnIiwgIi5tcGVnIiwgIi5taWQiLCAiLm1pZGkiLCAiLnNtZiIsICIuamV0IiwKLSAgICAiLnJ0dHRsIiwgIi5pbXkiLCAiLnhtZiIsICIubXA0IiwgIi5tNGEiLAotICAgICIubTR2IiwgIi4zZ3AiLCAiLjNncHAiLCAiLjNnMiIsICIuM2dwcDIiLAotICAgICIuYW1yIiwgIi5hd2IiLCAiLndtYSIsICIud212IgotfTsKLQotLyogZndkIGRlY2xzLCBzbyBJIGNhbiB3cml0ZSB0aGlzIGRvd253YXJkICovCi1zc2l6ZV90IHByb2Nlc3NBc3NldHMoQnVuZGxlKiBidW5kbGUsIFppcEZpbGUqIHppcCwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cyk7Ci1zc2l6ZV90IHByb2Nlc3NBc3NldHMoQnVuZGxlKiBidW5kbGUsIFppcEZpbGUqIHppcCwgY29uc3Qgc3A8QWFwdERpcj4mIGRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFhcHRHcm91cEVudHJ5JiBnZSwgY29uc3QgUmVzb3VyY2VGaWx0ZXIqIGZpbHRlcik7Ci1ib29sIHByb2Nlc3NGaWxlKEJ1bmRsZSogYnVuZGxlLCBaaXBGaWxlKiB6aXAsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0R3JvdXA+JiBncm91cCwgY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlKTsKLWJvb2wgb2theVRvQ29tcHJlc3MoQnVuZGxlKiBidW5kbGUsIGNvbnN0IFN0cmluZzgmIHBhdGhOYW1lKTsKLXNzaXplX3QgcHJvY2Vzc0phckZpbGVzKEJ1bmRsZSogYnVuZGxlLCBaaXBGaWxlKiB6aXApOwotCi0vKgotICogVGhlIGRpcmVjdG9yeSBoaWVyYXJjaHkgbG9va3MgbGlrZSB0aGlzOgotICogIm91dHB1dERpciIgYW5kICJhc3NldFJvb3QiIGFyZSBleGlzdGluZyBkaXJlY3Rvcmllcy4KLSAqCi0gKiBPbiBzdWNjZXNzLCAiYnVuZGxlLT5udW1QYWNrYWdlcyIgd2lsbCBiZSB0aGUgbnVtYmVyIG9mIFppcCBwYWNrYWdlcwotICogd2UgY3JlYXRlZC4KLSAqLwotc3RhdHVzX3Qgd3JpdGVBUEsoQnVuZGxlKiBidW5kbGUsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIG91dHB1dEZpbGUpCi17Ci0gICAgI2lmIEJFTkNITUFSSwotICAgIGZwcmludGYoc3Rkb3V0LCAiQkVOQ0hNQVJLOiBTdGFydGluZyBBUEsgQnVuZGxpbmcgXG4iKTsKLSAgICBsb25nIHN0YXJ0QVBLVGltZSA9IGNsb2NrKCk7Ci0gICAgI2VuZGlmIC8qIEJFTkNITUFSSyAqLwotCi0gICAgc3RhdHVzX3QgcmVzdWx0ID0gTk9fRVJST1I7Ci0gICAgWmlwRmlsZSogemlwID0gTlVMTDsKLSAgICBpbnQgY291bnQ7Ci0KLSAgICAvL2J1bmRsZS0+c2V0UGFja2FnZUNvdW50KDApOwotCi0gICAgLyoKLSAgICAgKiBQcmVwIHRoZSBaaXAgYXJjaGl2ZS4KLSAgICAgKgotICAgICAqIElmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCBmYWlsIHVubGVzcyAidXBkYXRlIiBvciAiZm9yY2UiIGlzIHNldC4KLSAgICAgKiBJZiAidXBkYXRlIiBpcyBzZXQsIHVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGV4aXN0aW5nIGFyY2hpdmUuCi0gICAgICogRWxzZSwgaWYgImZvcmNlIiBpcyBzZXQsIHJlbW92ZSB0aGUgZXhpc3RpbmcgYXJjaGl2ZS4KLSAgICAgKi8KLSAgICBGaWxlVHlwZSBmaWxlVHlwZSA9IGdldEZpbGVUeXBlKG91dHB1dEZpbGUuc3RyaW5nKCkpOwotICAgIGlmIChmaWxlVHlwZSA9PSBrRmlsZVR5cGVOb25leGlzdGVudCkgewotICAgICAgICAvLyBva2F5LCBjcmVhdGUgaXQgYmVsb3cKLSAgICB9IGVsc2UgaWYgKGZpbGVUeXBlID09IGtGaWxlVHlwZVJlZ3VsYXIpIHsKLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VXBkYXRlKCkpIHsKLSAgICAgICAgICAgIC8vIG9rYXksIG9wZW4gaXQgYmVsb3cKLSAgICAgICAgfSBlbHNlIGlmIChidW5kbGUtPmdldEZvcmNlKCkpIHsKLSAgICAgICAgICAgIGlmICh1bmxpbmsob3V0cHV0RmlsZS5zdHJpbmcoKSkgIT0gMCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHVuYWJsZSB0byByZW1vdmUgJyVzJzogJXNcbiIsIG91dHB1dEZpbGUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICclcycgZXhpc3RzICh1c2UgJy1mJyB0byBmb3JjZSBvdmVyd3JpdGUpXG4iLAotICAgICAgICAgICAgICAgICAgICBvdXRwdXRGaWxlLnN0cmluZygpKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICclcycgZXhpc3RzIGFuZCBpcyBub3QgYSByZWd1bGFyIGZpbGVcbiIsIG91dHB1dEZpbGUuc3RyaW5nKCkpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgIHByaW50ZigiJXMgJyVzJ1xuIiwgKGZpbGVUeXBlID09IGtGaWxlVHlwZU5vbmV4aXN0ZW50KSA/ICJDcmVhdGluZyIgOiAiT3BlbmluZyIsCi0gICAgICAgICAgICAgICAgb3V0cHV0RmlsZS5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgc3RhdHVzX3Qgc3RhdHVzOwotICAgIHppcCA9IG5ldyBaaXBGaWxlOwotICAgIHN0YXR1cyA9IHppcC0+b3BlbihvdXRwdXRGaWxlLnN0cmluZygpLCBaaXBGaWxlOjprT3BlblJlYWRXcml0ZSB8IFppcEZpbGU6OmtPcGVuQ3JlYXRlKTsKLSAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHVuYWJsZSB0byBvcGVuICclcycgYXMgWmlwIGZpbGUgZm9yIHdyaXRpbmdcbiIsCi0gICAgICAgICAgICAgICAgb3V0cHV0RmlsZS5zdHJpbmcoKSk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgcHJpbnRmKCJXcml0aW5nIGFsbCBmaWxlcy4uLlxuIik7Ci0gICAgfQotCi0gICAgY291bnQgPSBwcm9jZXNzQXNzZXRzKGJ1bmRsZSwgemlwLCBhc3NldHMpOwotICAgIGlmIChjb3VudCA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogdW5hYmxlIHRvIHByb2Nlc3MgYXNzZXRzIHdoaWxlIHBhY2thZ2luZyAnJXMnXG4iLAotICAgICAgICAgICAgICAgIG91dHB1dEZpbGUuc3RyaW5nKCkpOwotICAgICAgICByZXN1bHQgPSBjb3VudDsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICBwcmludGYoIkdlbmVyYXRlZCAlZCBmaWxlJXNcbiIsIGNvdW50LCAoY291bnQ9PTEpID8gIiIgOiAicyIpOwotICAgIH0KLSAgICAKLSAgICBjb3VudCA9IHByb2Nlc3NKYXJGaWxlcyhidW5kbGUsIHppcCk7Ci0gICAgaWYgKGNvdW50IDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiB1bmFibGUgdG8gcHJvY2VzcyBqYXIgZmlsZXMgd2hpbGUgcGFja2FnaW5nICclcydcbiIsCi0gICAgICAgICAgICAgICAgb3V0cHV0RmlsZS5zdHJpbmcoKSk7Ci0gICAgICAgIHJlc3VsdCA9IGNvdW50OwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotICAgIAotICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkKLSAgICAgICAgcHJpbnRmKCJJbmNsdWRlZCAlZCBmaWxlJXMgZnJvbSBqYXIvemlwIGZpbGVzLlxuIiwgY291bnQsIChjb3VudD09MSkgPyAiIiA6ICJzIik7Ci0gICAgCi0gICAgcmVzdWx0ID0gTk9fRVJST1I7Ci0KLSAgICAvKgotICAgICAqIENoZWNrIGZvciBjcnVmdC4gIFdlIHNldCB0aGUgIm1hcmtlZCIgZmxhZyBvbiBhbGwgZW50cmllcyB3ZSBjcmVhdGVkCi0gICAgICogb3IgZGVjaWRlZCBub3QgdG8gdXBkYXRlLiAgSWYgdGhlIGVudHJ5IGlzbid0IGFscmVhZHkgc2xhdGVkIGZvcgotICAgICAqIGRlbGV0aW9uLCByZW1vdmUgaXQgbm93LgotICAgICAqLwotICAgIHsKLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKQotICAgICAgICAgICAgcHJpbnRmKCJDaGVja2luZyBmb3IgZGVsZXRlZCBmaWxlc1xuIik7Ci0gICAgICAgIGludCBpLCByZW1vdmVkID0gMDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHppcC0+Z2V0TnVtRW50cmllcygpOyBpKyspIHsKLSAgICAgICAgICAgIFppcEVudHJ5KiBlbnRyeSA9IHppcC0+Z2V0RW50cnlCeUluZGV4KGkpOwotCi0gICAgICAgICAgICBpZiAoIWVudHJ5LT5nZXRNYXJrZWQoKSAmJiBlbnRyeS0+Z2V0RGVsZXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgKHJlbW92aW5nIGNydWZ0eSAnJXMnKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5nZXRGaWxlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgemlwLT5yZW1vdmUoZW50cnkpOwotICAgICAgICAgICAgICAgIHJlbW92ZWQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkgJiYgcmVtb3ZlZCA+IDApCi0gICAgICAgICAgICBwcmludGYoIlJlbW92ZWQgJWQgZmlsZSVzXG4iLCByZW1vdmVkLCAocmVtb3ZlZD09MSkgPyAiIiA6ICJzIik7Ci0gICAgfQotCi0gICAgLyogdGVsbCBaaXAgbGliIHRvIHByb2Nlc3MgZGVsZXRpb25zIGFuZCBvdGhlciBwZW5kaW5nIGNoYW5nZXMgKi8KLSAgICByZXN1bHQgPSB6aXAtPmZsdXNoKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBaaXAgZmx1c2ggZmFpbGVkLCBhcmNoaXZlIG1heSBiZSBob3NlZFxuIik7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICAvKiBhbnl0aGluZyBoZXJlPyAqLwotICAgIGlmICh6aXAtPmdldE51bUVudHJpZXMoKSA9PSAwKSB7Ci0gICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgcHJpbnRmKCJBcmNoaXZlIGlzIGVtcHR5IC0tIHJlbW92aW5nICVzXG4iLCBvdXRwdXRGaWxlLmdldFBhdGhMZWFmKCkuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSB6aXA7ICAgICAgICAvLyBjbG9zZSB0aGUgZmlsZSBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGluIFdpbjMyCi0gICAgICAgIHppcCA9IE5VTEw7Ci0gICAgICAgIGlmICh1bmxpbmsob3V0cHV0RmlsZS5zdHJpbmcoKSkgIT0gMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBjb3VsZCBub3QgdW5saW5rICclcydcbiIsIG91dHB1dEZpbGUuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgd2UndmUgYmVlbiBhc2tlZCB0byBnZW5lcmF0ZSBhIGRlcGVuZGVuY3kgZmlsZSBmb3IgdGhlIC5hcF8gcGFja2FnZSwKLSAgICAvLyBkbyBzbyBoZXJlCi0gICAgaWYgKGJ1bmRsZS0+Z2V0R2VuRGVwZW5kZW5jaWVzKCkpIHsKLSAgICAgICAgLy8gVGhlIGRlcGVuZGVuY3kgZmlsZSBnZXRzIG91dHB1dCB0byB0aGUgc2FtZSBkaXJlY3RvcnkKLSAgICAgICAgLy8gYXMgdGhlIHNwZWNpZmllZCBvdXRwdXQgZmlsZSB3aXRoIGFuIGFkZGl0aW9uYWwgLmQgZXh0ZW5zaW9uLgotICAgICAgICAvLyBlLmcuIGJpbi9yZXNvdXJjZXMuYXBfLmQKLSAgICAgICAgU3RyaW5nOCBkZXBlbmRlbmN5RmlsZSA9IG91dHB1dEZpbGU7Ci0gICAgICAgIGRlcGVuZGVuY3lGaWxlLmFwcGVuZCgiLmQiKTsKLQotICAgICAgICBGSUxFKiBmcCA9IGZvcGVuKGRlcGVuZGVuY3lGaWxlLnN0cmluZygpLCAiYSIpOwotICAgICAgICAvLyBBZGQgdGhpcyBmaWxlIHRvIHRoZSBkZXBlbmRlbmN5IGZpbGUKLSAgICAgICAgZnByaW50ZihmcCwgIiVzIFxcXG4iLCBvdXRwdXRGaWxlLnN0cmluZygpKTsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICB9Ci0KLSAgICBhc3NlcnQocmVzdWx0ID09IE5PX0VSUk9SKTsKLQotYmFpbDoKLSAgICBkZWxldGUgemlwOyAgICAgICAgLy8gbXVzdCBjbG9zZSBiZWZvcmUgcmVtb3ZlIGluIFdpbjMyCi0gICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgewotICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgICAgIHByaW50ZigiUmVtb3ZpbmcgJXMgZHVlIHRvIGVhcmxpZXIgZmFpbHVyZXNcbiIsIG91dHB1dEZpbGUuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh1bmxpbmsob3V0cHV0RmlsZS5zdHJpbmcoKSkgIT0gMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBjb3VsZCBub3QgdW5saW5rICclcydcbiIsIG91dHB1dEZpbGUuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSBOT19FUlJPUiAmJiBidW5kbGUtPmdldFZlcmJvc2UoKSkKLSAgICAgICAgcHJpbnRmKCJEb25lIVxuIik7Ci0KLSAgICAjaWYgQkVOQ0hNQVJLCi0gICAgZnByaW50ZihzdGRvdXQsICJCRU5DSE1BUks6IEVuZCBBUEsgQnVuZGxpbmcuIFRpbWUgRWxhcHNlZDogJWYgbXMgXG4iLChjbG9jaygpIC0gc3RhcnRBUEtUaW1lKS8xMDAwLjApOwotICAgICNlbmRpZiAvKiBCRU5DSE1BUksgKi8KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zc2l6ZV90IHByb2Nlc3NBc3NldHMoQnVuZGxlKiBidW5kbGUsIFppcEZpbGUqIHppcCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzKQotewotICAgIFJlc291cmNlRmlsdGVyIGZpbHRlcjsKLSAgICBzdGF0dXNfdCBzdGF0dXMgPSBmaWx0ZXIucGFyc2UoYnVuZGxlLT5nZXRDb25maWd1cmF0aW9ucygpKTsKLSAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBzc2l6ZV90IGNvdW50ID0gMDsKLQotICAgIGNvbnN0IHNpemVfdCBOID0gYXNzZXRzLT5nZXRHcm91cEVudHJpZXMoKS5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBBYXB0R3JvdXBFbnRyeSYgZ2UgPSBhc3NldHMtPmdldEdyb3VwRW50cmllcygpW2ldOwotCi0gICAgICAgIHNzaXplX3QgcmVzID0gcHJvY2Vzc0Fzc2V0cyhidW5kbGUsIHppcCwgYXNzZXRzLCBnZSwgJmZpbHRlcik7Ci0gICAgICAgIGlmIChyZXMgPCAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB9Ci0KLSAgICAgICAgY291bnQgKz0gcmVzOwotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotc3NpemVfdCBwcm9jZXNzQXNzZXRzKEJ1bmRsZSogYnVuZGxlLCBaaXBGaWxlKiB6aXAsIGNvbnN0IHNwPEFhcHREaXI+JiBkaXIsCi0gICAgICAgIGNvbnN0IEFhcHRHcm91cEVudHJ5JiBnZSwgY29uc3QgUmVzb3VyY2VGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBzc2l6ZV90IGNvdW50ID0gMDsKLQotICAgIGNvbnN0IHNpemVfdCBORCA9IGRpci0+Z2V0RGlycygpLnNpemUoKTsKLSAgICBzaXplX3QgaTsKLSAgICBmb3IgKGk9MDsgaTxORDsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHNwPEFhcHREaXI+JiBzdWJEaXIgPSBkaXItPmdldERpcnMoKS52YWx1ZUF0KGkpOwotCi0gICAgICAgIGNvbnN0IGJvb2wgZmlsdGVyYWJsZSA9IGZpbHRlciAhPSBOVUxMICYmIHN1YkRpci0+Z2V0TGVhZigpLmZpbmQoIm1pcG1hcC0iKSAhPSAwOwotCi0gICAgICAgIGlmIChmaWx0ZXJhYmxlICYmIHN1YkRpci0+Z2V0TGVhZigpICE9IHN1YkRpci0+Z2V0UGF0aCgpICYmICFmaWx0ZXItPm1hdGNoKGdlLnRvUGFyYW1zKCkpKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHNzaXplX3QgcmVzID0gcHJvY2Vzc0Fzc2V0cyhidW5kbGUsIHppcCwgc3ViRGlyLCBnZSwgZmlsdGVyYWJsZSA/IGZpbHRlciA6IE5VTEwpOwotICAgICAgICBpZiAocmVzIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgfQotICAgICAgICBjb3VudCArPSByZXM7Ci0gICAgfQotCi0gICAgaWYgKGZpbHRlciAhPSBOVUxMICYmICFmaWx0ZXItPm1hdGNoKGdlLnRvUGFyYW1zKCkpKSB7Ci0gICAgICAgIHJldHVybiBjb3VudDsKLSAgICB9Ci0KLSAgICBjb25zdCBzaXplX3QgTkYgPSBkaXItPmdldEZpbGVzKCkuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE5GOyBpKyspIHsKLSAgICAgICAgc3A8QWFwdEdyb3VwPiBncCA9IGRpci0+Z2V0RmlsZXMoKS52YWx1ZUF0KGkpOwotICAgICAgICBzc2l6ZV90IGZpID0gZ3AtPmdldEZpbGVzKCkuaW5kZXhPZktleShnZSk7Ci0gICAgICAgIGlmIChmaSA+PSAwKSB7Ci0gICAgICAgICAgICBzcDxBYXB0RmlsZT4gZmwgPSBncC0+Z2V0RmlsZXMoKS52YWx1ZUF0KGZpKTsKLSAgICAgICAgICAgIGlmICghcHJvY2Vzc0ZpbGUoYnVuZGxlLCB6aXAsIGdwLCBmbCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLS8qCi0gKiBQcm9jZXNzIGEgcmVndWxhciBmaWxlLCBhZGRpbmcgaXQgdG8gdGhlIGFyY2hpdmUgaWYgYXBwcm9wcmlhdGUuCi0gKgotICogSWYgd2UncmUgaW4gInVwZGF0ZSIgbW9kZSwgYW5kIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBhcmNoaXZlLAotICogZGVsZXRlIHRoZSBleGlzdGluZyBlbnRyeSBiZWZvcmUgYWRkaW5nIHRoZSBuZXcgb25lLgotICovCi1ib29sIHByb2Nlc3NGaWxlKEJ1bmRsZSogYnVuZGxlLCBaaXBGaWxlKiB6aXAsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRHcm91cD4mIGdyb3VwLCBjb25zdCBzcDxBYXB0RmlsZT4mIGZpbGUpCi17Ci0gICAgY29uc3QgYm9vbCBoYXNEYXRhID0gZmlsZS0+aGFzRGF0YSgpOwotCi0gICAgU3RyaW5nOCBzdG9yYWdlTmFtZShncm91cC0+Z2V0UGF0aCgpKTsKLSAgICBzdG9yYWdlTmFtZS5jb252ZXJ0VG9SZXNQYXRoKCk7Ci0gICAgWmlwRW50cnkqIGVudHJ5OwotICAgIGJvb2wgZnJvbUd6aXAgPSBmYWxzZTsKLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0KLSAgICAvKgotICAgICAqIFNlZSBpZiB0aGUgZmlsZW5hbWUgZW5kcyBpbiAiLkVYQ0xVREUiLiAgV2UgY2FuJ3QgdXNlCi0gICAgICogU3RyaW5nODo6Z2V0UGF0aEV4dGVuc2lvbigpIGJlY2F1c2UgdGhlIGxlbmd0aCBvZiB3aGF0IGl0IGNvbnNpZGVycwotICAgICAqIHRvIGJlIGFuIGV4dGVuc2lvbiBpcyBjYXBwZWQuCi0gICAgICoKLSAgICAgKiBUaGUgQXNzZXQgTWFuYWdlciBkb2Vzbid0IGNoZWNrIGZvciAiLkVYQ0xVREUiIGluIFppcCBhcmNoaXZlcywKLSAgICAgKiBzbyB0aGVyZSdzIG5vIHZhbHVlIGluIGFkZGluZyB0aGVtIChhbmQgaXQgbWFrZXMgbGlmZSBlYXNpZXIgb24KLSAgICAgKiB0aGUgQXNzZXRNYW5hZ2VyIGxpYiBpZiB3ZSBkb24ndCkuCi0gICAgICoKLSAgICAgKiBOT1RFOiB0aGlzIHJlc3RyaWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQuICBJZiB5b3UncmUgaW4gdGhpcyBjb2RlLCB5b3UKLSAgICAgKiBzaG91bGQgY2xlYW4gdGhpcyB1cCwgYnV0IEknbSBpbiBoZXJlIGdldHRpbmcgcmlkIG9mIFBhdGggTmFtZSwgYW5kIEkKLSAgICAgKiBkb24ndCB3YW50IHRvIG1ha2Ugb3RoZXIgcG90ZW50aWFsbHkgYnJlYWtpbmcgY2hhbmdlcyAtLWpvZW8KLSAgICAgKi8KLSAgICBpbnQgZmlsZU5hbWVMZW4gPSBzdG9yYWdlTmFtZS5sZW5ndGgoKTsKLSAgICBpbnQgZXhjbHVkZUV4dGVuc2lvbkxlbiA9IHN0cmxlbihrRXhjbHVkZUV4dGVuc2lvbik7Ci0gICAgaWYgKGZpbGVOYW1lTGVuID4gZXhjbHVkZUV4dGVuc2lvbkxlbgotICAgICAgICAgICAgJiYgKDAgPT0gc3RyY21wKHN0b3JhZ2VOYW1lLnN0cmluZygpICsgKGZpbGVOYW1lTGVuIC0gZXhjbHVkZUV4dGVuc2lvbkxlbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga0V4Y2x1ZGVFeHRlbnNpb24pKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6ICclcycgbm90IGFkZGVkIHRvIFppcFxuIiwgc3RvcmFnZU5hbWUuc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY2FzZWNtcChzdG9yYWdlTmFtZS5nZXRQYXRoRXh0ZW5zaW9uKCkuc3RyaW5nKCksICIuZ3oiKSA9PSAwKSB7Ci0gICAgICAgIGZyb21HemlwID0gdHJ1ZTsKLSAgICAgICAgc3RvcmFnZU5hbWUgPSBzdG9yYWdlTmFtZS5nZXRCYXNlUGF0aCgpOwotICAgIH0KLQotICAgIGlmIChidW5kbGUtPmdldFVwZGF0ZSgpKSB7Ci0gICAgICAgIGVudHJ5ID0gemlwLT5nZXRFbnRyeUJ5TmFtZShzdG9yYWdlTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvKiBmaWxlIGFscmVhZHkgZXhpc3RzIGluIGFyY2hpdmU7IHRoZXJlIGNhbiBiZSBvbmx5IG9uZSAqLwotICAgICAgICAgICAgaWYgKGVudHJ5LT5nZXRNYXJrZWQoKSkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgIkVSUk9SOiAnJXMnIGV4aXN0cyB0d2ljZSAoY2hlY2sgZm9yIHdpdGggJiB3L28gJy5neic/KVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWhhc0RhdGEpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiBzcmNOYW1lID0gZmlsZS0+Z2V0U291cmNlRmlsZSgpOwotICAgICAgICAgICAgICAgIHRpbWVfdCBmaWxlTW9kV2hlbjsKLSAgICAgICAgICAgICAgICBmaWxlTW9kV2hlbiA9IGdldEZpbGVNb2REYXRlKHNyY05hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGlmIChmaWxlTW9kV2hlbiA9PSAodGltZV90KSAtMSkgeyAvLyBmaWxlIGV4aXN0ZW5jZSB0ZXN0ZWQgZWFybGllciwKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgLy8gIG5vdCBleHBlY3RpbmcgYW4gZXJyb3IgaGVyZQotICAgICAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgICAgICBpZiAoZmlsZU1vZFdoZW4gPiBlbnRyeS0+Z2V0TW9kV2hlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgZGVsZXRlZCBzbyBhZGQoKSB3aWxsIHN1Y2NlZWQKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIChyZW1vdmluZyBvbGQgJyVzJylcbiIsIHN0b3JhZ2VOYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgIAotICAgICAgICAgICAgICAgICAgICB6aXAtPnJlbW92ZShlbnRyeSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbiBpbiBhcmNoaXZlIGlzIG5ld2VyCi0gICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICAobm90IHVwZGF0aW5nICclcycpXG4iLCBzdG9yYWdlTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZW50cnktPnNldE1hcmtlZCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZWQgZmlsZXMgYXJlIGFsd2F5cyByZXBsYWNlZC4KLSAgICAgICAgICAgICAgICB6aXAtPnJlbW92ZShlbnRyeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvL2FuZHJvaWRfc2V0TWluUHJpb3JpdHkoTlVMTCwgQU5EUk9JRF9MT0dfVkVSQk9TRSk7Ci0KLSAgICBpZiAoZnJvbUd6aXApIHsKLSAgICAgICAgcmVzdWx0ID0gemlwLT5hZGRHemlwKGZpbGUtPmdldFNvdXJjZUZpbGUoKS5zdHJpbmcoKSwgc3RvcmFnZU5hbWUuc3RyaW5nKCksICZlbnRyeSk7Ci0gICAgfSBlbHNlIGlmICghaGFzRGF0YSkgewotICAgICAgICAvKiBkb24ndCBjb21wcmVzcyBjZXJ0YWluIGZpbGVzLCBlLmcuIFBOR3MgKi8KLSAgICAgICAgaW50IGNvbXByZXNzaW9uTWV0aG9kID0gYnVuZGxlLT5nZXRDb21wcmVzc2lvbk1ldGhvZCgpOwotICAgICAgICBpZiAoIW9rYXlUb0NvbXByZXNzKGJ1bmRsZSwgc3RvcmFnZU5hbWUpKSB7Ci0gICAgICAgICAgICBjb21wcmVzc2lvbk1ldGhvZCA9IFppcEVudHJ5OjprQ29tcHJlc3NTdG9yZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gemlwLT5hZGQoZmlsZS0+Z2V0U291cmNlRmlsZSgpLnN0cmluZygpLCBzdG9yYWdlTmFtZS5zdHJpbmcoKSwgY29tcHJlc3Npb25NZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5KTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSB6aXAtPmFkZChmaWxlLT5nZXREYXRhKCksIGZpbGUtPmdldFNpemUoKSwgc3RvcmFnZU5hbWUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLT5nZXRDb21wcmVzc2lvbk1ldGhvZCgpLCAmZW50cnkpOwotICAgIH0KLSAgICBpZiAocmVzdWx0ID09IE5PX0VSUk9SKSB7Ci0gICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgcHJpbnRmKCIgICAgICAnJXMnJXMiLCBzdG9yYWdlTmFtZS5zdHJpbmcoKSwgZnJvbUd6aXAgPyAiIChmcm9tIC5neikiIDogIiIpOwotICAgICAgICAgICAgaWYgKGVudHJ5LT5nZXRDb21wcmVzc2lvbk1ldGhvZCgpID09IFppcEVudHJ5OjprQ29tcHJlc3NTdG9yZWQpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiAobm90IGNvbXByZXNzZWQpXG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgKGNvbXByZXNzZWQgJWQlJSlcbiIsIGNhbGNQZXJjZW50KGVudHJ5LT5nZXRVbmNvbXByZXNzZWRMZW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+Z2V0Q29tcHJlc3NlZExlbigpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZW50cnktPnNldE1hcmtlZCh0cnVlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocmVzdWx0ID09IEFMUkVBRFlfRVhJU1RTKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAgIFVuYWJsZSB0byBhZGQgJyVzJzogZmlsZSBhbHJlYWR5IGluIGFyY2hpdmUgKHRyeSAnLXUnPylcbiIsCi0gICAgICAgICAgICAgICAgICAgIGZpbGUtPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICAgVW5hYmxlIHRvIGFkZCAnJXMnOiBaaXAgYWRkIGZhaWxlZFxuIiwgCi0gICAgICAgICAgICAgICAgICAgIGZpbGUtPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBEZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2Ugd2FudCB0byB0cnkgdG8gY29tcHJlc3MgdGhpcyBmaWxlIGJhc2VkCi0gKiBvbiB0aGUgZmlsZSBleHRlbnNpb24uCi0gKi8KLWJvb2wgb2theVRvQ29tcHJlc3MoQnVuZGxlKiBidW5kbGUsIGNvbnN0IFN0cmluZzgmIHBhdGhOYW1lKQotewotICAgIFN0cmluZzggZXh0ID0gcGF0aE5hbWUuZ2V0UGF0aEV4dGVuc2lvbigpOwotICAgIGludCBpOwotCi0gICAgaWYgKGV4dC5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBORUxFTShrTm9Db21wcmVzc0V4dCk7IGkrKykgewotICAgICAgICBpZiAoc3RyY2FzZWNtcChleHQuc3RyaW5nKCksIGtOb0NvbXByZXNzRXh0W2ldKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IGFuZHJvaWQ6OlZlY3Rvcjxjb25zdCBjaGFyKj4mIG90aGVycyhidW5kbGUtPmdldE5vQ29tcHJlc3NFeHRlbnNpb25zKCkpOwotICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KW90aGVycy5zaXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBjaGFyKiBzdHIgPSBvdGhlcnNbaV07Ci0gICAgICAgIGludCBwb3MgPSBwYXRoTmFtZS5sZW5ndGgoKSAtIHN0cmxlbihzdHIpOwotICAgICAgICBpZiAocG9zIDwgMCkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgY2hhciogcGF0aCA9IHBhdGhOYW1lLnN0cmluZygpOwotICAgICAgICBpZiAoc3RyY2FzZWNtcChwYXRoICsgcG9zLCBzdHIpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIGVuZHNXaXRoKGNvbnN0IGNoYXIqIGhheXN0YWNrLCBjb25zdCBjaGFyKiBuZWVkbGUpCi17Ci0gICAgc2l6ZV90IGEgPSBzdHJsZW4oaGF5c3RhY2spOwotICAgIHNpemVfdCBiID0gc3RybGVuKG5lZWRsZSk7Ci0gICAgaWYgKGEgPCBiKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN0cmNhc2VjbXAoaGF5c3RhY2srKGEtYiksIG5lZWRsZSkgPT0gMDsKLX0KLQotc3NpemVfdCBwcm9jZXNzSmFyRmlsZShaaXBGaWxlKiBqYXIsIFppcEZpbGUqIG91dCkKLXsKLSAgICBzdGF0dXNfdCBlcnI7Ci0gICAgc2l6ZV90IE4gPSBqYXItPmdldE51bUVudHJpZXMoKTsKLSAgICBzaXplX3QgY291bnQgPSAwOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgWmlwRW50cnkqIGVudHJ5ID0gamFyLT5nZXRFbnRyeUJ5SW5kZXgoaSk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHN0b3JhZ2VOYW1lID0gZW50cnktPmdldEZpbGVOYW1lKCk7Ci0gICAgICAgIGlmIChlbmRzV2l0aChzdG9yYWdlTmFtZSwgIi5jbGFzcyIpKSB7Ci0gICAgICAgICAgICBpbnQgY29tcHJlc3Npb25NZXRob2QgPSBlbnRyeS0+Z2V0Q29tcHJlc3Npb25NZXRob2QoKTsKLSAgICAgICAgICAgIHNpemVfdCBzaXplID0gZW50cnktPmdldFVuY29tcHJlc3NlZExlbigpOwotICAgICAgICAgICAgY29uc3Qgdm9pZCogZGF0YSA9IGphci0+dW5jb21wcmVzcyhlbnRyeSk7Ci0gICAgICAgICAgICBpZiAoZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogdW5hYmxlIHRvIHVuY29tcHJlc3MgZW50cnkgJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZU5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dC0+YWRkKGRhdGEsIHNpemUsIHN0b3JhZ2VOYW1lLCBjb21wcmVzc2lvbk1ldGhvZCwgTlVMTCk7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkKilkYXRhKTsKLSAgICAgICAgfQotICAgICAgICBjb3VudCsrOwotICAgIH0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLXNzaXplX3QgcHJvY2Vzc0phckZpbGVzKEJ1bmRsZSogYnVuZGxlLCBaaXBGaWxlKiB6aXApCi17Ci0gICAgc3RhdHVzX3QgZXJyOwotICAgIHNzaXplX3QgY291bnQgPSAwOwotICAgIGNvbnN0IGFuZHJvaWQ6OlZlY3Rvcjxjb25zdCBjaGFyKj4mIGphcnMgPSBidW5kbGUtPmdldEphckZpbGVzKCk7Ci0KLSAgICBzaXplX3QgTiA9IGphcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgWmlwRmlsZSBqYXI7Ci0gICAgICAgIGVyciA9IGphci5vcGVuKGphcnNbaV0sIFppcEZpbGU6OmtPcGVuUmVhZE9ubHkpOwotICAgICAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHVuYWJsZSB0byBvcGVuICclcycgYXMgYSB6aXAgZmlsZTogJWRcbiIsCi0gICAgICAgICAgICAgICAgamFyc1tpXSwgZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgZXJyICs9IHByb2Nlc3NKYXJGaWxlKCZqYXIsIHppcCk7Ci0gICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiB1bmFibGUgdG8gcHJvY2VzcyAnJXMnXG4iLCBqYXJzW2ldKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgY291bnQgKz0gZXJyOwotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvUmVzb3VyY2UuY3BwIGIvdG9vbHMvYWFwdC9SZXNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Njg4OGIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9SZXNvdXJjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQnVpbGQgcmVzb3VyY2UgZmlsZXMgZnJvbSByYXcgYXNzZXRzLgotLy8KLSNpbmNsdWRlICJNYWluLmgiCi0jaW5jbHVkZSAiQWFwdEFzc2V0cy5oIgotI2luY2x1ZGUgIlN0cmluZ1Bvb2wuaCIKLSNpbmNsdWRlICJYTUxOb2RlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VUYWJsZS5oIgotI2luY2x1ZGUgIkltYWdlcy5oIgotCi0jaW5jbHVkZSAiQ3J1bmNoQ2FjaGUuaCIKLSNpbmNsdWRlICJGaWxlRmluZGVyLmgiCi0jaW5jbHVkZSAiQ2FjaGVVcGRhdGVyLmgiCi0KLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotI2lmIEhBVkVfUFJJTlRGX1pECi0jICBkZWZpbmUgWkQgIiV6ZCIKLSMgIGRlZmluZSBaRF9UWVBFIHNzaXplX3QKLSNlbHNlCi0jICBkZWZpbmUgWkQgIiVsZCIKLSMgIGRlZmluZSBaRF9UWVBFIGxvbmcKLSNlbmRpZgotCi0jZGVmaW5lIE5PSVNZKHgpIC8vIHgKLQotLy8gTnVtYmVyIG9mIHRocmVhZHMgdG8gdXNlIGZvciBwcmVwcm9jZXNzaW5nIGltYWdlcy4KLXN0YXRpYyBjb25zdCBzaXplX3QgTUFYX1RIUkVBRFMgPSA0OwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWNsYXNzIFBhY2thZ2VJbmZvCi17Ci1wdWJsaWM6Ci0gICAgUGFja2FnZUluZm8oKQotICAgIHsKLSAgICB9Ci0gICAgflBhY2thZ2VJbmZvKCkKLSAgICB7Ci0gICAgfQotCi0gICAgc3RhdHVzX3QgcGFyc2VQYWNrYWdlKGNvbnN0IHNwPEFhcHRHcm91cD4mIGdycCk7Ci19OwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyBTdHJpbmc4IHBhcnNlUmVzb3VyY2VOYW1lKGNvbnN0IFN0cmluZzgmIGxlYWYpCi17Ci0gICAgY29uc3QgY2hhciogZmlyc3REb3QgPSBzdHJjaHIobGVhZi5zdHJpbmcoKSwgJy4nKTsKLSAgICBjb25zdCBjaGFyKiBzdHIgPSBsZWFmLnN0cmluZygpOwotCi0gICAgaWYgKGZpcnN0RG90KSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmc4KHN0ciwgZmlyc3REb3Qtc3RyKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gU3RyaW5nOChzdHIpOwotICAgIH0KLX0KLQotUmVzb3VyY2VUeXBlU2V0OjpSZXNvdXJjZVR5cGVTZXQoKQotICAgIDpSZWZCYXNlKCksCi0gICAgIEtleWVkVmVjdG9yPFN0cmluZzgsc3A8QWFwdEdyb3VwPiA+KCkKLXsKLX0KLQotRmlsZVBhdGhTdG9yZTo6RmlsZVBhdGhTdG9yZSgpCi0gICAgOlJlZkJhc2UoKSwKLSAgICAgVmVjdG9yPFN0cmluZzg+KCkKLXsKLX0KLQotY2xhc3MgUmVzb3VyY2VEaXJJdGVyYXRvcgotewotcHVibGljOgotICAgIFJlc291cmNlRGlySXRlcmF0b3IoY29uc3Qgc3A8UmVzb3VyY2VUeXBlU2V0PiYgc2V0LCBjb25zdCBTdHJpbmc4JiByZXNUeXBlKQotICAgICAgICA6IG1SZXNUeXBlKHJlc1R5cGUpLCBtU2V0KHNldCksIG1TZXRQb3MoMCksIG1Hcm91cFBvcygwKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbmxpbmUgY29uc3Qgc3A8QWFwdEdyb3VwPiYgZ2V0R3JvdXAoKSBjb25zdCB7IHJldHVybiBtR3JvdXA7IH0KLSAgICBpbmxpbmUgY29uc3Qgc3A8QWFwdEZpbGU+JiBnZXRGaWxlKCkgY29uc3QgeyByZXR1cm4gbUZpbGU7IH0KLQotICAgIGlubGluZSBjb25zdCBTdHJpbmc4JiBnZXRCYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1CYXNlTmFtZTsgfQotICAgIGlubGluZSBjb25zdCBTdHJpbmc4JiBnZXRMZWFmTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1MZWFmTmFtZTsgfQotICAgIGlubGluZSBTdHJpbmc4IGdldFBhdGgoKSBjb25zdCB7IHJldHVybiBtUGF0aDsgfQotICAgIGlubGluZSBjb25zdCBSZXNUYWJsZV9jb25maWcmIGdldFBhcmFtcygpIGNvbnN0IHsgcmV0dXJuIG1QYXJhbXM7IH0KLQotICAgIGVudW0gewotICAgICAgICBFT0QgPSAxCi0gICAgfTsKLQotICAgIHNzaXplX3QgbmV4dCgpCi0gICAgewotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgc3A8QWFwdEdyb3VwPiBncm91cDsKLSAgICAgICAgICAgIHNwPEFhcHRGaWxlPiBmaWxlOwotCi0gICAgICAgICAgICAvLyBUcnkgdG8gZ2V0IG5leHQgZmlsZSBpbiB0aGlzIGN1cnJlbnQgZ3JvdXAuCi0gICAgICAgICAgICBpZiAobUdyb3VwICE9IE5VTEwgJiYgbUdyb3VwUG9zIDwgbUdyb3VwLT5nZXRGaWxlcygpLnNpemUoKSkgewotICAgICAgICAgICAgICAgIGdyb3VwID0gbUdyb3VwOwotICAgICAgICAgICAgICAgIGZpbGUgPSBncm91cC0+Z2V0RmlsZXMoKS52YWx1ZUF0KG1Hcm91cFBvcysrKTsKLQotICAgICAgICAgICAgLy8gVHJ5IHRvIGdldCB0aGUgbmV4dCBncm91cC9maWxlIGluIHRoaXMgZGlyZWN0b3J5Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1TZXRQb3MgPCBtU2V0LT5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBtR3JvdXAgPSBncm91cCA9IG1TZXQtPnZhbHVlQXQobVNldFBvcysrKTsKLSAgICAgICAgICAgICAgICBpZiAoZ3JvdXAtPmdldEZpbGVzKCkuc2l6ZSgpIDwgMSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmlsZSA9IGdyb3VwLT5nZXRGaWxlcygpLnZhbHVlQXQoMCk7Ci0gICAgICAgICAgICAgICAgbUdyb3VwUG9zID0gMTsKLQotICAgICAgICAgICAgLy8gQWxsIGRvbmUhCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBFT0Q7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1GaWxlID0gZmlsZTsKLQotICAgICAgICAgICAgU3RyaW5nOCBsZWFmKGdyb3VwLT5nZXRMZWFmKCkpOwotICAgICAgICAgICAgbUxlYWZOYW1lID0gU3RyaW5nOChsZWFmKTsKLSAgICAgICAgICAgIG1QYXJhbXMgPSBmaWxlLT5nZXRHcm91cEVudHJ5KCkudG9QYXJhbXMoKTsKLSAgICAgICAgICAgIE5PSVNZKHByaW50ZigiRGlyICVzOiBtY2M9JWQgbW5jPSVkIGxhbmc9JWMlYyBjbnQ9JWMlYyBvcmllbnQ9JWQgdWk9JWQgZGVuc2l0eT0lZCB0b3VjaD0lZCBrZXk9JWQgaW5wPSVkIG5hdj0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICBncm91cC0+Z2V0UGF0aCgpLnN0cmluZygpLCBtUGFyYW1zLm1jYywgbVBhcmFtcy5tbmMsCi0gICAgICAgICAgICAgICAgICAgbVBhcmFtcy5sYW5ndWFnZVswXSA/IG1QYXJhbXMubGFuZ3VhZ2VbMF0gOiAnLScsCi0gICAgICAgICAgICAgICAgICAgbVBhcmFtcy5sYW5ndWFnZVsxXSA/IG1QYXJhbXMubGFuZ3VhZ2VbMV0gOiAnLScsCi0gICAgICAgICAgICAgICAgICAgbVBhcmFtcy5jb3VudHJ5WzBdID8gbVBhcmFtcy5jb3VudHJ5WzBdIDogJy0nLAotICAgICAgICAgICAgICAgICAgIG1QYXJhbXMuY291bnRyeVsxXSA/IG1QYXJhbXMuY291bnRyeVsxXSA6ICctJywKLSAgICAgICAgICAgICAgICAgICBtUGFyYW1zLm9yaWVudGF0aW9uLCBtUGFyYW1zLnVpTW9kZSwKLSAgICAgICAgICAgICAgICAgICBtUGFyYW1zLmRlbnNpdHksIG1QYXJhbXMudG91Y2hzY3JlZW4sIG1QYXJhbXMua2V5Ym9hcmQsCi0gICAgICAgICAgICAgICAgICAgbVBhcmFtcy5pbnB1dEZsYWdzLCBtUGFyYW1zLm5hdmlnYXRpb24pKTsKLSAgICAgICAgICAgIG1QYXRoID0gInJlcyI7Ci0gICAgICAgICAgICBtUGF0aC5hcHBlbmRQYXRoKGZpbGUtPmdldEdyb3VwRW50cnkoKS50b0Rpck5hbWUobVJlc1R5cGUpKTsKLSAgICAgICAgICAgIG1QYXRoLmFwcGVuZFBhdGgobGVhZik7Ci0gICAgICAgICAgICBtQmFzZU5hbWUgPSBwYXJzZVJlc291cmNlTmFtZShsZWFmKTsKLSAgICAgICAgICAgIGlmIChtQmFzZU5hbWUgPT0gIiIpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBtYWxmb3JtZWQgcmVzb3VyY2UgZmlsZW5hbWUgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE5PSVNZKHByaW50ZigiZmlsZSBuYW1lPSVzXG4iLCBtQmFzZU5hbWUuc3RyaW5nKCkpKTsKLQotICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFN0cmluZzggbVJlc1R5cGU7Ci0KLSAgICBjb25zdCBzcDxSZXNvdXJjZVR5cGVTZXQ+IG1TZXQ7Ci0gICAgc2l6ZV90IG1TZXRQb3M7Ci0KLSAgICBzcDxBYXB0R3JvdXA+IG1Hcm91cDsKLSAgICBzaXplX3QgbUdyb3VwUG9zOwotCi0gICAgc3A8QWFwdEZpbGU+IG1GaWxlOwotICAgIFN0cmluZzggbUJhc2VOYW1lOwotICAgIFN0cmluZzggbUxlYWZOYW1lOwotICAgIFN0cmluZzggbVBhdGg7Ci0gICAgUmVzVGFibGVfY29uZmlnIG1QYXJhbXM7Ci19OwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWJvb2wgaXNWYWxpZFJlc291cmNlVHlwZShjb25zdCBTdHJpbmc4JiB0eXBlKQotewotICAgIHJldHVybiB0eXBlID09ICJhbmltIiB8fCB0eXBlID09ICJhbmltYXRvciIgfHwgdHlwZSA9PSAiaW50ZXJwb2xhdG9yIgotICAgICAgICB8fCB0eXBlID09ICJ0cmFuc2l0aW9uIgotICAgICAgICB8fCB0eXBlID09ICJkcmF3YWJsZSIgfHwgdHlwZSA9PSAibGF5b3V0IgotICAgICAgICB8fCB0eXBlID09ICJ2YWx1ZXMiIHx8IHR5cGUgPT0gInhtbCIgfHwgdHlwZSA9PSAicmF3IgotICAgICAgICB8fCB0eXBlID09ICJjb2xvciIgfHwgdHlwZSA9PSAibWVudSIgfHwgdHlwZSA9PSAibWlwbWFwIjsKLX0KLQotc3RhdGljIHNwPEFhcHRGaWxlPiBnZXRSZXNvdXJjZUZpbGUoY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywgYm9vbCBtYWtlSWZOZWNlc3Nhcnk9dHJ1ZSkKLXsKLSAgICBzcDxBYXB0R3JvdXA+IGdyb3VwID0gYXNzZXRzLT5nZXRGaWxlcygpLnZhbHVlRm9yKFN0cmluZzgoInJlc291cmNlcy5hcnNjIikpOwotICAgIHNwPEFhcHRGaWxlPiBmaWxlOwotICAgIGlmIChncm91cCAhPSBOVUxMKSB7Ci0gICAgICAgIGZpbGUgPSBncm91cC0+Z2V0RmlsZXMoKS52YWx1ZUZvcihBYXB0R3JvdXBFbnRyeSgpKTsKLSAgICAgICAgaWYgKGZpbGUgIT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIGZpbGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1ha2VJZk5lY2Vzc2FyeSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIGFzc2V0cy0+YWRkRmlsZShTdHJpbmc4KCJyZXNvdXJjZXMuYXJzYyIpLCBBYXB0R3JvdXBFbnRyeSgpLCBTdHJpbmc4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgU3RyaW5nOCgpKTsKLX0KLQotc3RhdGljIHN0YXR1c190IHBhcnNlUGFja2FnZShCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICBjb25zdCBzcDxBYXB0R3JvdXA+JiBncnApCi17Ci0gICAgaWYgKGdycC0+Z2V0RmlsZXMoKS5zaXplKCkgIT0gMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IE11bHRpcGxlIEFuZHJvaWRNYW5pZmVzdC54bWwgZmlsZXMgZm91bmQsIHVzaW5nICVzXG4iLAotICAgICAgICAgICAgICAgIGdycC0+Z2V0RmlsZXMoKS52YWx1ZUF0KDApLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgc3A8QWFwdEZpbGU+IGZpbGUgPSBncnAtPmdldEZpbGVzKCkudmFsdWVBdCgwKTsKLQotICAgIFJlc1hNTFRyZWUgYmxvY2s7Ci0gICAgc3RhdHVzX3QgZXJyID0gcGFyc2VYTUxSZXNvdXJjZShmaWxlLCAmYmxvY2spOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgLy9wcmludFhNTEJsb2NrKCZibG9jayk7Ci0KLSAgICBSZXNYTUxUcmVlOjpldmVudF9jb2RlX3QgY29kZTsKLSAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcKLSAgICAgICAgICAgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQKLSAgICAgICAgICAgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICB9Ci0KLSAgICBzaXplX3QgbGVuOwotICAgIGlmIChjb2RlICE9IFJlc1hNTFRyZWU6OlNUQVJUX1RBRykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBObyBzdGFydCB0YWcgZm91bmRcbiIsCi0gICAgICAgICAgICAgICAgZmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIFN0cmluZzE2KCJtYW5pZmVzdCIpLnN0cmluZygpKSAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IEludmFsaWQgc3RhcnQgdGFnICVzLCBleHBlY3RlZCA8bWFuaWZlc3Q+XG4iLAotICAgICAgICAgICAgICAgIGZpbGUtPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpLCBibG9jay5nZXRMaW5lTnVtYmVyKCksCi0gICAgICAgICAgICAgICAgU3RyaW5nOChibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBzc2l6ZV90IG5hbWVJbmRleCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgInBhY2thZ2UiKTsKLSAgICBpZiAobmFtZUluZGV4IDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8bWFuaWZlc3Q+IGRvZXMgbm90IGhhdmUgcGFja2FnZSBhdHRyaWJ1dGUuXG4iLAotICAgICAgICAgICAgICAgIGZpbGUtPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBhc3NldHMtPnNldFBhY2thZ2UoU3RyaW5nOChibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShuYW1lSW5kZXgsICZsZW4pKSk7Ci0KLSAgICBTdHJpbmcxNiB1c2VzX3NkazE2KCJ1c2VzLXNkayIpOwotICAgIHdoaWxlICgoY29kZT1ibG9jay5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVAotICAgICAgICAgICAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgdXNlc19zZGsxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIHNzaXplX3QgbWluU2RrSW5kZXggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWluU2RrVmVyc2lvbiIpOwotICAgICAgICAgICAgICAgIGlmIChtaW5TZGtJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBtaW5TZGsxNiA9IGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKG1pblNka0luZGV4LCAmbGVuKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbWluU2RrOCA9IHN0cmR1cChTdHJpbmc4KG1pblNkazE2KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS0+c2V0TWFuaWZlc3RNaW5TZGtWZXJzaW9uKG1pblNkazgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgc3RhdHVzX3QgbWFrZUZpbGVSZXNvdXJjZXMoQnVuZGxlKiBidW5kbGUsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8UmVzb3VyY2VUeXBlU2V0PiYgc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlc1R5cGUpCi17Ci0gICAgU3RyaW5nOCB0eXBlOChyZXNUeXBlKTsKLSAgICBTdHJpbmcxNiB0eXBlMTYocmVzVHlwZSk7Ci0KLSAgICBib29sIGhhc0Vycm9ycyA9IGZhbHNlOwotCi0gICAgUmVzb3VyY2VEaXJJdGVyYXRvciBpdChzZXQsIFN0cmluZzgocmVzVHlwZSkpOwotICAgIHNzaXplX3QgcmVzOwotICAgIHdoaWxlICgocmVzPWl0Lm5leHQoKSkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICBwcmludGYoIiAgICAobmV3IHJlc291cmNlIGlkICVzIGZyb20gJXMpXG4iLAotICAgICAgICAgICAgICAgICAgIGl0LmdldEJhc2VOYW1lKCkuc3RyaW5nKCksIGl0LmdldEZpbGUoKS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZzE2IGJhc2VOYW1lKGl0LmdldEJhc2VOYW1lKCkpOwotICAgICAgICBjb25zdCBjaGFyMTZfdCogc3RyID0gYmFzZU5hbWUuc3RyaW5nKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIxNl90KiBjb25zdCBlbmQgPSBzdHIgKyBiYXNlTmFtZS5zaXplKCk7Ci0gICAgICAgIHdoaWxlIChzdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGlmICghKCgqc3RyID49ICdhJyAmJiAqc3RyIDw9ICd6JykKLSAgICAgICAgICAgICAgICAgICAgfHwgKCpzdHIgPj0gJzAnICYmICpzdHIgPD0gJzknKQotICAgICAgICAgICAgICAgICAgICB8fCAqc3RyID09ICdfJyB8fCAqc3RyID09ICcuJykpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBJbnZhbGlkIGZpbGUgbmFtZTogbXVzdCBjb250YWluIG9ubHkgW2EtejAtOV8uXVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0LmdldFBhdGgoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0cisrOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZzggcmVzUGF0aCA9IGl0LmdldFBhdGgoKTsKLSAgICAgICAgcmVzUGF0aC5jb252ZXJ0VG9SZXNQYXRoKCk7Ci0gICAgICAgIHRhYmxlLT5hZGRFbnRyeShTb3VyY2VQb3MoaXQuZ2V0UGF0aCgpLCAwKSwgU3RyaW5nMTYoYXNzZXRzLT5nZXRQYWNrYWdlKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTE2LAotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNihyZXNQYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAmaXQuZ2V0UGFyYW1zKCkpOwotICAgICAgICBhc3NldHMtPmFkZFJlc291cmNlKGl0LmdldExlYWZOYW1lKCksIHJlc1BhdGgsIGl0LmdldEZpbGUoKSwgdHlwZTgpOwotICAgIH0KLQotICAgIHJldHVybiBoYXNFcnJvcnMgPyBVTktOT1dOX0VSUk9SIDogTk9fRVJST1I7Ci19Ci0KLWNsYXNzIFByZVByb2Nlc3NJbWFnZVdvcmtVbml0IDogcHVibGljIFdvcmtRdWV1ZTo6V29ya1VuaXQgewotcHVibGljOgotICAgIFByZVByb2Nlc3NJbWFnZVdvcmtVbml0KGNvbnN0IEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlLCB2b2xhdGlsZSBib29sKiBoYXNFcnJvcnMpIDoKLSAgICAgICAgICAgIG1CdW5kbGUoYnVuZGxlKSwgbUFzc2V0cyhhc3NldHMpLCBtRmlsZShmaWxlKSwgbUhhc0Vycm9ycyhoYXNFcnJvcnMpIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcnVuKCkgewotICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBwcmVQcm9jZXNzSW1hZ2UobUJ1bmRsZSwgbUFzc2V0cywgbUZpbGUsIE5VTEwpOwotICAgICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgICAgICAqbUhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIGNvbnRpbnVlIGV2ZW4gaWYgdGhlcmUgYXJlIGVycm9ycwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBCdW5kbGUqIG1CdW5kbGU7Ci0gICAgc3A8QWFwdEFzc2V0cz4gbUFzc2V0czsKLSAgICBzcDxBYXB0RmlsZT4gbUZpbGU7Ci0gICAgdm9sYXRpbGUgYm9vbCogbUhhc0Vycm9yczsKLX07Ci0KLXN0YXRpYyBzdGF0dXNfdCBwcmVQcm9jZXNzSW1hZ2VzKGNvbnN0IEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxSZXNvdXJjZVR5cGVTZXQ+JiBzZXQsIGNvbnN0IGNoYXIqIHR5cGUpCi17Ci0gICAgdm9sYXRpbGUgYm9vbCBoYXNFcnJvcnMgPSBmYWxzZTsKLSAgICBzc2l6ZV90IHJlcyA9IE5PX0VSUk9SOwotICAgIGlmIChidW5kbGUtPmdldFVzZUNydW5jaENhY2hlKCkgPT0gZmFsc2UpIHsKLSAgICAgICAgV29ya1F1ZXVlIHdxKE1BWF9USFJFQURTLCBmYWxzZSk7Ci0gICAgICAgIFJlc291cmNlRGlySXRlcmF0b3IgaXQoc2V0LCBTdHJpbmc4KHR5cGUpKTsKLSAgICAgICAgd2hpbGUgKChyZXM9aXQubmV4dCgpKSA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgUHJlUHJvY2Vzc0ltYWdlV29ya1VuaXQqIHcgPSBuZXcgUHJlUHJvY2Vzc0ltYWdlV29ya1VuaXQoCi0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZSwgYXNzZXRzLCBpdC5nZXRGaWxlKCksICZoYXNFcnJvcnMpOwotICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gd3Euc2NoZWR1bGUodyk7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJwcmVQcm9jZXNzSW1hZ2VzIGZhaWxlZDogc2NoZWR1bGUoKSByZXR1cm5lZCAlZFxuIiwgc3RhdHVzKTsKLSAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGRlbGV0ZSB3OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHdxLmZpbmlzaCgpOwotICAgICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInByZVByb2Nlc3NJbWFnZXMgZmFpbGVkOiBmaW5pc2goKSByZXR1cm5lZCAlZFxuIiwgc3RhdHVzKTsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChoYXNFcnJvcnMgfHwgKHJlcyA8IE5PX0VSUk9SKSkgPyBVTktOT1dOX0VSUk9SIDogTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IHBvc3RQcm9jZXNzSW1hZ2VzKGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPFJlc291cmNlVHlwZVNldD4mIHNldCkKLXsKLSAgICBSZXNvdXJjZURpckl0ZXJhdG9yIGl0KHNldCwgU3RyaW5nOCgiZHJhd2FibGUiKSk7Ci0gICAgYm9vbCBoYXNFcnJvcnMgPSBmYWxzZTsKLSAgICBzc2l6ZV90IHJlczsKLSAgICB3aGlsZSAoKHJlcz1pdC5uZXh0KCkpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJlcyA9IHBvc3RQcm9jZXNzSW1hZ2UoYXNzZXRzLCB0YWJsZSwgaXQuZ2V0RmlsZSgpKTsKLSAgICAgICAgaWYgKHJlcyA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIChoYXNFcnJvcnMgfHwgKHJlcyA8IE5PX0VSUk9SKSkgPyBVTktOT1dOX0VSUk9SIDogTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3RfZmlsZXMoY29uc3Qgc3A8QWFwdERpcj4mIGRpciwKLSAgICAgICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8UmVzb3VyY2VUeXBlU2V0PiA+KiByZXNvdXJjZXMpCi17Ci0gICAgY29uc3QgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPEFhcHRHcm91cD4gPiYgZ3JvdXBzID0gZGlyLT5nZXRGaWxlcygpOwotICAgIGludCBOID0gZ3JvdXBzLnNpemUoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIFN0cmluZzggbGVhZk5hbWUgPSBncm91cHMua2V5QXQoaSk7Ci0gICAgICAgIGNvbnN0IHNwPEFhcHRHcm91cD4mIGdyb3VwID0gZ3JvdXBzLnZhbHVlQXQoaSk7Ci0KLSAgICAgICAgY29uc3QgRGVmYXVsdEtleWVkVmVjdG9yPEFhcHRHcm91cEVudHJ5LCBzcDxBYXB0RmlsZT4gPiYgZmlsZXMKLSAgICAgICAgICAgICAgICA9IGdyb3VwLT5nZXRGaWxlcygpOwotCi0gICAgICAgIGlmIChmaWxlcy5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmc4IHJlc1R5cGUgPSBmaWxlcy52YWx1ZUF0KDApLT5nZXRSZXNvdXJjZVR5cGUoKTsKLQotICAgICAgICBzc2l6ZV90IGluZGV4ID0gcmVzb3VyY2VzLT5pbmRleE9mS2V5KHJlc1R5cGUpOwotCi0gICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgIHNwPFJlc291cmNlVHlwZVNldD4gc2V0ID0gbmV3IFJlc291cmNlVHlwZVNldCgpOwotICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJDcmVhdGluZyBuZXcgcmVzb3VyY2UgdHlwZSBzZXQgZm9yIGxlYWYgJXMgd2l0aCBncm91cCAlcyAoJXApXG4iLAotICAgICAgICAgICAgICAgICAgICBsZWFmTmFtZS5zdHJpbmcoKSwgZ3JvdXAtPmdldFBhdGgoKS5zdHJpbmcoKSwgZ3JvdXAuZ2V0KCkpKTsKLSAgICAgICAgICAgIHNldC0+YWRkKGxlYWZOYW1lLCBncm91cCk7Ci0gICAgICAgICAgICByZXNvdXJjZXMtPmFkZChyZXNUeXBlLCBzZXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3A8UmVzb3VyY2VUeXBlU2V0PiBzZXQgPSByZXNvdXJjZXMtPnZhbHVlQXQoaW5kZXgpOwotICAgICAgICAgICAgaW5kZXggPSBzZXQtPmluZGV4T2ZLZXkobGVhZk5hbWUpOwotICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgIE5PSVNZKHByaW50ZigiQWRkaW5nIHRvIHJlc291cmNlIHR5cGUgc2V0IGZvciBsZWFmICVzIGdyb3VwICVzICglcClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZWFmTmFtZS5zdHJpbmcoKSwgZ3JvdXAtPmdldFBhdGgoKS5zdHJpbmcoKSwgZ3JvdXAuZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICBzZXQtPmFkZChsZWFmTmFtZSwgZ3JvdXApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcDxBYXB0R3JvdXA+IGV4aXN0aW5nR3JvdXAgPSBzZXQtPnZhbHVlQXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIE5PSVNZKHByaW50ZigiRXh0ZW5kaW5nIHRvIHJlc291cmNlIHR5cGUgc2V0IGZvciBsZWFmICVzIGdyb3VwICVzICglcClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZWFmTmFtZS5zdHJpbmcoKSwgZ3JvdXAtPmdldFBhdGgoKS5zdHJpbmcoKSwgZ3JvdXAuZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqPTA7IGo8ZmlsZXMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJBZGRpbmcgZmlsZSAlcyBpbiBncm91cCAlcyByZXNUeXBlICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMudmFsdWVBdChqKS0+Z2V0U291cmNlRmlsZSgpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMua2V5QXQoaikudG9EaXJOYW1lKFN0cmluZzgoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNUeXBlLnN0cmluZygpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXR1c190IGVyciA9IGV4aXN0aW5nR3JvdXAtPmFkZEZpbGUoZmlsZXMudmFsdWVBdChqKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb2xsZWN0X2ZpbGVzKGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3MsCi0gICAgICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPFJlc291cmNlVHlwZVNldD4gPiogcmVzb3VyY2VzKQotewotICAgIGNvbnN0IFZlY3RvcjxzcDxBYXB0RGlyPiA+JiBkaXJzID0gYXNzLT5yZXNEaXJzKCk7Ci0gICAgaW50IE4gPSBkaXJzLnNpemUoKTsKLQotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgc3A8QWFwdERpcj4gZCA9IGRpcnMuaXRlbUF0KGkpOwotICAgICAgICBOT0lTWShwcmludGYoIkNvbGxlY3RpbmcgZGlyICMlZCAlcDogJXMsIGxlYWYgJXNcbiIsIGksIGQuZ2V0KCksIGQtPmdldFBhdGgoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBkLT5nZXRMZWFmKCkuc3RyaW5nKCkpKTsKLSAgICAgICAgY29sbGVjdF9maWxlcyhkLCByZXNvdXJjZXMpOwotCi0gICAgICAgIC8vIGRvbid0IHRyeSB0byBpbmNsdWRlIHRoZSByZXMgZGlyCi0gICAgICAgIE5PSVNZKHByaW50ZigiUmVtb3ZpbmcgZGlyIGxlYWYgJXNcbiIsIGQtPmdldExlYWYoKS5zdHJpbmcoKSkpOwotICAgICAgICBhc3MtPnJlbW92ZURpcihkLT5nZXRMZWFmKCkpOwotICAgIH0KLX0KLQotZW51bSB7Ci0gICAgQVRUUl9PS0FZID0gLTEsCi0gICAgQVRUUl9OT1RfRk9VTkQgPSAtMiwKLSAgICBBVFRSX0xFQURJTkdfU1BBQ0VTID0gLTMsCi0gICAgQVRUUl9UUkFJTElOR19TUEFDRVMgPSAtNAotfTsKLXN0YXRpYyBpbnQgdmFsaWRhdGVBdHRyKGNvbnN0IFN0cmluZzgmIHBhdGgsIGNvbnN0IFJlc1RhYmxlJiB0YWJsZSwKLSAgICAgICAgY29uc3QgUmVzWE1MUGFyc2VyJiBwYXJzZXIsCi0gICAgICAgIGNvbnN0IGNoYXIqIG5zLCBjb25zdCBjaGFyKiBhdHRyLCBjb25zdCBjaGFyKiB2YWxpZENoYXJzLCBib29sIHJlcXVpcmVkKQotewotICAgIHNpemVfdCBsZW47Ci0KLSAgICBzc2l6ZV90IGluZGV4ID0gcGFyc2VyLmluZGV4T2ZBdHRyaWJ1dGUobnMsIGF0dHIpOwotICAgIGNvbnN0IHVpbnQxNl90KiBzdHI7Ci0gICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgIGlmIChpbmRleCA+PSAwICYmIHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShpbmRleCwgJnZhbHVlKSA+PSAwKSB7Ci0gICAgICAgIGNvbnN0IFJlc1N0cmluZ1Bvb2wqIHBvb2wgPSAmcGFyc2VyLmdldFN0cmluZ3MoKTsKLSAgICAgICAgaWYgKHZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9SRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgIHVpbnQzMl90IHNwZWNGbGFncyA9IDA7Ci0gICAgICAgICAgICBpbnQgc3RySWR4OwotICAgICAgICAgICAgaWYgKChzdHJJZHg9dGFibGUucmVzb2x2ZVJlZmVyZW5jZSgmdmFsdWUsIDB4MTAwMDAwMDAsIE5VTEwsICZzcGVjRmxhZ3MpKSA8IDApIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBUYWcgPCVzPiBhdHRyaWJ1dGUgJXMgcmVmZXJlbmNlcyB1bmtub3duIHJlc2lkIDB4JTA4eC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnN0cmluZygpLCBwYXJzZXIuZ2V0TGluZU51bWJlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChwYXJzZXIuZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpLCBhdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFUVFJfTk9UX0ZPVU5EOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwb29sID0gdGFibGUuZ2V0VGFibGVTdHJpbmdCbG9jayhzdHJJZHgpOwotICAgICAgICAgICAgI2lmIDAKLSAgICAgICAgICAgIGlmIChwb29sICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzdHIgPSBwb29sLT5zdHJpbmdBdCh2YWx1ZS5kYXRhLCAmbGVuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiKioqKiogUkVTIEFUVFI6ICVzIHNwZWNGbGFncz0weCV4IHN0cklkeD0lZDogJXNcbiIsIGF0dHIsCi0gICAgICAgICAgICAgICAgICAgIHNwZWNGbGFncywgc3RySWR4LCBzdHIgIT0gTlVMTCA/IFN0cmluZzgoc3RyKS5zdHJpbmcoKSA6ICI/Pz8iKTsKLSAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgaWYgKChzcGVjRmxhZ3MmflJlc1RhYmxlX3R5cGVTcGVjOjpTUEVDX1BVQkxJQykgIT0gMCAmJiBmYWxzZSkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IFRhZyA8JXM+IGF0dHJpYnV0ZSAlcyB2YXJpZXMgYnkgY29uZmlndXJhdGlvbnMgMHgleC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnN0cmluZygpLCBwYXJzZXIuZ2V0TGluZU51bWJlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChwYXJzZXIuZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpLCBhdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY0ZsYWdzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQVRUUl9OT1RfRk9VTkQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgIGlmIChwb29sID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBUYWcgPCVzPiBhdHRyaWJ1dGUgJXMgaGFzIG5vIHN0cmluZyBibG9jay5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnN0cmluZygpLCBwYXJzZXIuZ2V0TGluZU51bWJlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChwYXJzZXIuZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpLCBhdHRyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQVRUUl9OT1RfRk9VTkQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHN0cj1wb29sLT5zdHJpbmdBdCh2YWx1ZS5kYXRhLCAmbGVuKSkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IFRhZyA8JXM+IGF0dHJpYnV0ZSAlcyBoYXMgY29ycnVwdCBzdHJpbmcgdmFsdWUuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5zdHJpbmcoKSwgcGFyc2VyLmdldExpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocGFyc2VyLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSwgYXR0cik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFUVFJfTk9UX0ZPVU5EOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogVGFnIDwlcz4gYXR0cmlidXRlICVzIGhhcyBpbnZhbGlkIHR5cGUgJWQuXG4iLAotICAgICAgICAgICAgICAgICAgICBwYXRoLnN0cmluZygpLCBwYXJzZXIuZ2V0TGluZU51bWJlcigpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHBhcnNlci5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCksIGF0dHIsCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlLmRhdGFUeXBlKTsKLSAgICAgICAgICAgIHJldHVybiBBVFRSX05PVF9GT1VORDsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsaWRDaGFycykgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdWludDE2X3QgYyA9IHN0cltpXTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwID0gdmFsaWRDaGFyczsKLSAgICAgICAgICAgICAgICBib29sIG9rYXkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gKnApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9rYXkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIW9rYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogVGFnIDwlcz4gYXR0cmlidXRlICVzIGhhcyBpbnZhbGlkIGNoYXJhY3RlciAnJWMnLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnN0cmluZygpLCBwYXJzZXIuZ2V0TGluZU51bWJlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocGFyc2VyLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSwgYXR0ciwgKGNoYXIpc3RyW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCpzdHIgPT0gJyAnKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBUYWcgPCVzPiBhdHRyaWJ1dGUgJXMgY2FuIG5vdCBzdGFydCB3aXRoIGEgc3BhY2UuXG4iLAotICAgICAgICAgICAgICAgICAgICBwYXRoLnN0cmluZygpLCBwYXJzZXIuZ2V0TGluZU51bWJlcigpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHBhcnNlci5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCksIGF0dHIpOwotICAgICAgICAgICAgcmV0dXJuIEFUVFJfTEVBRElOR19TUEFDRVM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0cltsZW4tMV0gPT0gJyAnKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBUYWcgPCVzPiBhdHRyaWJ1dGUgJXMgY2FuIG5vdCBlbmQgd2l0aCBhIHNwYWNlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgcGF0aC5zdHJpbmcoKSwgcGFyc2VyLmdldExpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChwYXJzZXIuZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpLCBhdHRyKTsKLSAgICAgICAgICAgIHJldHVybiBBVFRSX1RSQUlMSU5HX1NQQUNFUzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQVRUUl9PS0FZOwotICAgIH0KLSAgICBpZiAocmVxdWlyZWQpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogVGFnIDwlcz4gbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUgJXMuXG4iLAotICAgICAgICAgICAgICAgIHBhdGguc3RyaW5nKCksIHBhcnNlci5nZXRMaW5lTnVtYmVyKCksCi0gICAgICAgICAgICAgICAgU3RyaW5nOChwYXJzZXIuZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpLCBhdHRyKTsKLSAgICAgICAgcmV0dXJuIEFUVFJfTk9UX0ZPVU5EOwotICAgIH0KLSAgICByZXR1cm4gQVRUUl9PS0FZOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja0Zvcklkcyhjb25zdCBTdHJpbmc4JiBwYXRoLCBSZXNYTUxQYXJzZXImIHBhcnNlcikKLXsKLSAgICBSZXNYTUxUcmVlOjpldmVudF9jb2RlX3QgY29kZTsKLSAgICB3aGlsZSAoKGNvZGU9cGFyc2VyLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UCi0gICAgICAgICAgICYmIGNvZGUgPiBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICBzc2l6ZV90IGluZGV4ID0gcGFyc2VyLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgImlkIik7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IHdhcm5pbmc6IGZvdW5kIHBsYWluICdpZCcgYXR0cmlidXRlOyBkaWQgeW91IG1lYW4gdGhlIG5ldyAnYW5kcm9pZDppZCcgbmFtZT9cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnN0cmluZygpLCBwYXJzZXIuZ2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgYXBwbHlGaWxlT3ZlcmxheShCdW5kbGUgKmJ1bmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8UmVzb3VyY2VUeXBlU2V0PiAqYmFzZVNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVzVHlwZSkKLXsKLSAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgcHJpbnRmKCJhcHBseUZpbGVPdmVybGF5IGZvciAlc1xuIiwgcmVzVHlwZSk7Ci0gICAgfQotCi0gICAgLy8gUmVwbGFjZSBhbnkgYmFzZSBsZXZlbCBmaWxlcyBpbiB0aGlzIGNhdGVnb3J5IHdpdGggYW55IGZvdW5kIGZyb20gdGhlIG92ZXJsYXkKLSAgICAvLyBBbHNvIGFkZCBhbnkgZm91bmQgb25seSBpbiB0aGUgb3ZlcmxheS4KLSAgICBzcDxBYXB0QXNzZXRzPiBvdmVybGF5ID0gYXNzZXRzLT5nZXRPdmVybGF5KCk7Ci0gICAgU3RyaW5nOCByZXNUeXBlU3RyaW5nKHJlc1R5cGUpOwotCi0gICAgLy8gd29yayB0aHJvdWdoIHRoZSBsaW5rZWQgbGlzdCBvZiBvdmVybGF5cwotICAgIHdoaWxlIChvdmVybGF5LmdldCgpKSB7Ci0gICAgICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPFJlc291cmNlVHlwZVNldD4gPiogb3ZlcmxheVJlcyA9IG92ZXJsYXktPmdldFJlc291cmNlcygpOwotCi0gICAgICAgIC8vIGdldCB0aGUgb3ZlcmxheSByZXNvdXJjZXMgb2YgdGhlIHJlcXVlc3RlZCB0eXBlCi0gICAgICAgIHNzaXplX3QgaW5kZXggPSBvdmVybGF5UmVzLT5pbmRleE9mS2V5KHJlc1R5cGVTdHJpbmcpOwotICAgICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAgICAgc3A8UmVzb3VyY2VUeXBlU2V0PiBvdmVybGF5U2V0ID0gb3ZlcmxheVJlcy0+dmFsdWVBdChpbmRleCk7Ci0KLSAgICAgICAgICAgIC8vIGZvciBlYWNoIG9mIHRoZSByZXNvdXJjZXMsIGNoZWNrIGZvciBhIG1hdGNoIGluIHRoZSBwcmV2aW91c2x5IGJ1aWx0Ci0gICAgICAgICAgICAvLyBub24tb3ZlcmxheSAiYmFzZXNldCIuCi0gICAgICAgICAgICBzaXplX3Qgb3ZlcmxheUNvdW50ID0gb3ZlcmxheVNldC0+c2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3Qgb3ZlcmxheUluZGV4PTA7IG92ZXJsYXlJbmRleDxvdmVybGF5Q291bnQ7IG92ZXJsYXlJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidHJ5aW5nIG92ZXJsYXlTZXQgS2V5PSVzXG4iLG92ZXJsYXlTZXQtPmtleUF0KG92ZXJsYXlJbmRleCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzaXplX3QgYmFzZUluZGV4ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZVNldC0+Z2V0KCkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBiYXNlSW5kZXggPSAoKmJhc2VTZXQpLT5pbmRleE9mS2V5KG92ZXJsYXlTZXQtPmtleUF0KG92ZXJsYXlJbmRleCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYmFzZUluZGV4IDwgVU5LTk9XTl9FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAvLyBsb29rIGZvciBzYW1lIGZsYXZvci4gIEZvciBhIGdpdmVuIGZpbGUgKHN0cmluZ3MueG1sLCBmb3IgZXhhbXBsZSkKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUgbWF5IGJlIGEgbG9jYWxlIHNwZWNpZmljIG9yIG90aGVyIGZsYXZvcnMgLSB3ZSB3YW50IHRvIG1hdGNoCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzYW1lIGZsYXZvci4KLSAgICAgICAgICAgICAgICAgICAgc3A8QWFwdEdyb3VwPiBvdmVybGF5R3JvdXAgPSBvdmVybGF5U2V0LT52YWx1ZUF0KG92ZXJsYXlJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIHNwPEFhcHRHcm91cD4gYmFzZUdyb3VwID0gKCpiYXNlU2V0KS0+dmFsdWVBdChiYXNlSW5kZXgpOwotCi0gICAgICAgICAgICAgICAgICAgIERlZmF1bHRLZXllZFZlY3RvcjxBYXB0R3JvdXBFbnRyeSwgc3A8QWFwdEZpbGU+ID4gb3ZlcmxheUZpbGVzID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5R3JvdXAtPmdldEZpbGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdEtleWVkVmVjdG9yPEFhcHRHcm91cEVudHJ5LCBzcDxBYXB0RmlsZT4gPiBiYXNlRmlsZXMgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR3JvdXAtPmdldEZpbGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBiYXNlRmlsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImJhc2VGaWxlICIgWkQgIiBoYXMgZmxhdm9yICVzXG4iLCAoWkRfVFlQRSkgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VGaWxlcy5rZXlBdChpKS50b1N0cmluZygpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaSA8IG92ZXJsYXlGaWxlcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigib3ZlcmxheUZpbGUgIiBaRCAiIGhhcyBmbGF2b3IgJXNcbiIsIChaRF9UWVBFKSBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUZpbGVzLmtleUF0KGkpLnRvU3RyaW5nKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG92ZXJsYXlHcm91cFNpemUgPSBvdmVybGF5RmlsZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvdmVybGF5R3JvdXBJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUdyb3VwSW5kZXg8b3ZlcmxheUdyb3VwU2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5R3JvdXBJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYmFzZUZpbGVJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHcm91cC0+Z2V0RmlsZXMoKS5pbmRleE9mS2V5KG92ZXJsYXlGaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5QXQob3ZlcmxheUdyb3VwSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlRmlsZUluZGV4IDwgVU5LTk9XTl9FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImZvdW5kIGEgbWF0Y2ggKCIgWkQgIikgZm9yIG92ZXJsYXkgZmlsZSAlcywgZm9yIGZsYXZvciAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWkRfVFlQRSkgYmFzZUZpbGVJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5R3JvdXAtPmdldExlYWYoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5RmlsZXMua2V5QXQob3ZlcmxheUdyb3VwSW5kZXgpLnRvU3RyaW5nKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR3JvdXAtPnJlbW92ZUZpbGUoYmFzZUZpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpZG4ndCBmaW5kIGEgbWF0Y2ggZmFsbCB0aHJvdWdoIGFuZCBhZGQgaXQuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cnVlIHx8IGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigibm90aGluZyBtYXRjaGVzIG92ZXJsYXkgZmlsZSAlcywgZm9yIGZsYXZvciAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5R3JvdXAtPmdldExlYWYoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5RmlsZXMua2V5QXQob3ZlcmxheUdyb3VwSW5kZXgpLnRvU3RyaW5nKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHcm91cC0+YWRkRmlsZShvdmVybGF5RmlsZXMudmFsdWVBdChvdmVybGF5R3JvdXBJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXRzLT5hZGRHcm91cEVudHJ5KG92ZXJsYXlGaWxlcy5rZXlBdChvdmVybGF5R3JvdXBJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VTZXQtPmdldCgpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpiYXNlU2V0ID0gbmV3IFJlc291cmNlVHlwZVNldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXRzLT5nZXRSZXNvdXJjZXMoKS0+YWRkKFN0cmluZzgocmVzVHlwZSksICpiYXNlU2V0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGdyb3VwIGRvZXNuJ3QgZXhpc3QgKGEgZmlsZSB0aGF0J3Mgb25seSBpbiB0aGUgb3ZlcmxheSkKLSAgICAgICAgICAgICAgICAgICAgKCpiYXNlU2V0KS0+YWRkKG92ZXJsYXlTZXQtPmtleUF0KG92ZXJsYXlJbmRleCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVNldC0+dmFsdWVBdChvdmVybGF5SW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGFsbCBmbGF2b3JzIGFyZSBkZWZpbmVkIGluIHRoZSByZXNvdXJjZXMuCi0gICAgICAgICAgICAgICAgICAgIHNwPEFhcHRHcm91cD4gb3ZlcmxheUdyb3VwID0gb3ZlcmxheVNldC0+dmFsdWVBdChvdmVybGF5SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8QWFwdEdyb3VwRW50cnksIHNwPEFhcHRGaWxlPiA+IG92ZXJsYXlGaWxlcyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUdyb3VwLT5nZXRGaWxlcygpOwotICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3ZlcmxheUdyb3VwU2l6ZSA9IG92ZXJsYXlGaWxlcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IG92ZXJsYXlHcm91cEluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5R3JvdXBJbmRleDxvdmVybGF5R3JvdXBTaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlHcm91cEluZGV4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0cy0+YWRkR3JvdXBFbnRyeShvdmVybGF5RmlsZXMua2V5QXQob3ZlcmxheUdyb3VwSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIHRoaXMgb3ZlcmxheSBkaWRuJ3QgaGF2ZSByZXNvdXJjZXMgZm9yIHRoaXMgdHlwZQotICAgICAgICB9Ci0gICAgICAgIC8vIHRyeSBuZXh0IG92ZXJsYXkKLSAgICAgICAgb3ZlcmxheSA9IG92ZXJsYXktPmdldE92ZXJsYXkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBJbnNlcnRzIGFuIGF0dHJpYnV0ZSBpbiBhIGdpdmVuIG5vZGUsIG9ubHkgaWYgdGhlIGF0dHJpYnV0ZSBkb2VzIG5vdAotICogZXhpc3QuCi0gKiBJZiBlcnJvck9uRmFpbGVkSW5zZXJ0IGlzIHRydWUsIGFuZCB0aGUgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzLCByZXR1cm5zIGZhbHNlLgotICogUmV0dXJucyB0cnVlIG90aGVyd2lzZSwgZXZlbiBpZiB0aGUgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzLgotICovCi1ib29sIGFkZFRhZ0F0dHJpYnV0ZShjb25zdCBzcDxYTUxOb2RlPiYgbm9kZSwgY29uc3QgY2hhciogbnM4LAotICAgICAgICBjb25zdCBjaGFyKiBhdHRyOCwgY29uc3QgY2hhciogdmFsdWUsIGJvb2wgZXJyb3JPbkZhaWxlZEluc2VydCkKLXsKLSAgICBpZiAodmFsdWUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBTdHJpbmcxNiBucyhuczgpOwotICAgIGNvbnN0IFN0cmluZzE2IGF0dHIoYXR0cjgpOwotCi0gICAgaWYgKG5vZGUtPmdldEF0dHJpYnV0ZShucywgYXR0cikgIT0gTlVMTCkgewotICAgICAgICBpZiAoZXJyb3JPbkZhaWxlZEluc2VydCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogQW5kcm9pZE1hbmlmZXN0LnhtbCBhbHJlYWR5IGRlZmluZXMgJXMgKGluICVzKTsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjYW5ub3QgaW5zZXJ0IG5ldyB2YWx1ZSAlcy5cbiIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYXR0cikuc3RyaW5nKCksIFN0cmluZzgobnMpLnN0cmluZygpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IEFuZHJvaWRNYW5pZmVzdC54bWwgYWxyZWFkeSBkZWZpbmVzICVzIChpbiAlcyk7IgotICAgICAgICAgICAgICAgICAgICAgICAgIiB1c2luZyBleGlzdGluZyB2YWx1ZSBpbiBtYW5pZmVzdC5cbiIsCi0gICAgICAgICAgICAgICAgU3RyaW5nOChhdHRyKS5zdHJpbmcoKSwgU3RyaW5nOChucykuc3RyaW5nKCkpOwotCi0gICAgICAgIC8vIGRvbid0IHN0b3AgdGhlIGJ1aWxkLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBub2RlLT5hZGRBdHRyaWJ1dGUobnMsIGF0dHIsIFN0cmluZzE2KHZhbHVlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGZ1bGx5UXVhbGlmeUNsYXNzTmFtZShjb25zdCBTdHJpbmc4JiBwYWNrYWdlLCBzcDxYTUxOb2RlPiBub2RlLAotICAgICAgICBjb25zdCBTdHJpbmcxNiYgYXR0ck5hbWUpIHsKLSAgICBYTUxOb2RlOjphdHRyaWJ1dGVfZW50cnkqIGF0dHIgPSBub2RlLT5lZGl0QXR0cmlidXRlKAotICAgICAgICAgICAgU3RyaW5nMTYoImh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIpLCBhdHRyTmFtZSk7Ci0gICAgaWYgKGF0dHIgIT0gTlVMTCkgewotICAgICAgICBTdHJpbmc4IG5hbWUoYXR0ci0+c3RyaW5nKTsKLQotICAgICAgICAvLyBhc2RmICAgICAtLT4gcGFja2FnZS5hc2RmCi0gICAgICAgIC8vIC5hc2RmICAuYS5iICAtLT4gcGFja2FnZS5hc2RmIHBhY2thZ2UuYS5iCi0gICAgICAgIC8vIGFzZGYuYWRzZiAtLT4gYXNkZi5hc2RmCi0gICAgICAgIFN0cmluZzggY2xhc3NOYW1lOwotICAgICAgICBjb25zdCBjaGFyKiBwID0gbmFtZS5zdHJpbmcoKTsKLSAgICAgICAgY29uc3QgY2hhciogcSA9IHN0cmNocihwLCAnLicpOwotICAgICAgICBpZiAocCA9PSBxKSB7Ci0gICAgICAgICAgICBjbGFzc05hbWUgKz0gcGFja2FnZTsKLSAgICAgICAgICAgIGNsYXNzTmFtZSArPSBuYW1lOwotICAgICAgICB9IGVsc2UgaWYgKHEgPT0gTlVMTCkgewotICAgICAgICAgICAgY2xhc3NOYW1lICs9IHBhY2thZ2U7Ci0gICAgICAgICAgICBjbGFzc05hbWUgKz0gIi4iOwotICAgICAgICAgICAgY2xhc3NOYW1lICs9IG5hbWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjbGFzc05hbWUgKz0gbmFtZTsKLSAgICAgICAgfQotICAgICAgICBOT0lTWShwcmludGYoIlF1YWxpZnlpbmcgY2xhc3MgJyVzJyB0byAnJXMnIiwgbmFtZS5zdHJpbmcoKSwgY2xhc3NOYW1lLnN0cmluZygpKSk7Ci0gICAgICAgIGF0dHItPnN0cmluZy5zZXRUbyhTdHJpbmcxNihjbGFzc05hbWUpKTsKLSAgICB9Ci19Ci0KLXN0YXR1c190IG1hc3NhZ2VNYW5pZmVzdChCdW5kbGUqIGJ1bmRsZSwgc3A8WE1MTm9kZT4gcm9vdCkKLXsKLSAgICByb290ID0gcm9vdC0+c2VhcmNoRWxlbWVudChTdHJpbmcxNigpLCBTdHJpbmcxNigibWFuaWZlc3QiKSk7Ci0gICAgaWYgKHJvb3QgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIDxtYW5pZmVzdD4gdGFnLlxuIik7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIGJvb2wgZXJyb3JPbkZhaWxlZEluc2VydCA9IGJ1bmRsZS0+Z2V0RXJyb3JPbkZhaWxlZEluc2VydCgpOwotCi0gICAgaWYgKCFhZGRUYWdBdHRyaWJ1dGUocm9vdCwgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAidmVyc2lvbkNvZGUiLAotICAgICAgICAgICAgYnVuZGxlLT5nZXRWZXJzaW9uQ29kZSgpLCBlcnJvck9uRmFpbGVkSW5zZXJ0KSkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgaWYgKCFhZGRUYWdBdHRyaWJ1dGUocm9vdCwgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAidmVyc2lvbk5hbWUiLAotICAgICAgICAgICAgYnVuZGxlLT5nZXRWZXJzaW9uTmFtZSgpLCBlcnJvck9uRmFpbGVkSW5zZXJ0KSkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRNaW5TZGtWZXJzaW9uKCkgIT0gTlVMTAotICAgICAgICAgICAgfHwgYnVuZGxlLT5nZXRUYXJnZXRTZGtWZXJzaW9uKCkgIT0gTlVMTAotICAgICAgICAgICAgfHwgYnVuZGxlLT5nZXRNYXhTZGtWZXJzaW9uKCkgIT0gTlVMTCkgewotICAgICAgICBzcDxYTUxOb2RlPiB2ZXJzID0gcm9vdC0+Z2V0Q2hpbGRFbGVtZW50KFN0cmluZzE2KCksIFN0cmluZzE2KCJ1c2VzLXNkayIpKTsKLSAgICAgICAgaWYgKHZlcnMgPT0gTlVMTCkgewotICAgICAgICAgICAgdmVycyA9IFhNTE5vZGU6Om5ld0VsZW1lbnQocm9vdC0+Z2V0RmlsZW5hbWUoKSwgU3RyaW5nMTYoKSwgU3RyaW5nMTYoInVzZXMtc2RrIikpOwotICAgICAgICAgICAgcm9vdC0+aW5zZXJ0Q2hpbGRBdCh2ZXJzLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghYWRkVGFnQXR0cmlidXRlKHZlcnMsIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgIm1pblNka1ZlcnNpb24iLAotICAgICAgICAgICAgICAgIGJ1bmRsZS0+Z2V0TWluU2RrVmVyc2lvbigpLCBlcnJvck9uRmFpbGVkSW5zZXJ0KSkgewotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFhZGRUYWdBdHRyaWJ1dGUodmVycywgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAidGFyZ2V0U2RrVmVyc2lvbiIsCi0gICAgICAgICAgICAgICAgYnVuZGxlLT5nZXRUYXJnZXRTZGtWZXJzaW9uKCksIGVycm9yT25GYWlsZWRJbnNlcnQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWFkZFRhZ0F0dHJpYnV0ZSh2ZXJzLCBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJtYXhTZGtWZXJzaW9uIiwKLSAgICAgICAgICAgICAgICBidW5kbGUtPmdldE1heFNka1ZlcnNpb24oKSwgZXJyb3JPbkZhaWxlZEluc2VydCkpIHsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0RGVidWdNb2RlKCkpIHsKLSAgICAgICAgc3A8WE1MTm9kZT4gYXBwbGljYXRpb24gPSByb290LT5nZXRDaGlsZEVsZW1lbnQoU3RyaW5nMTYoKSwgU3RyaW5nMTYoImFwcGxpY2F0aW9uIikpOwotICAgICAgICBpZiAoYXBwbGljYXRpb24gIT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKCFhZGRUYWdBdHRyaWJ1dGUoYXBwbGljYXRpb24sIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgImRlYnVnZ2FibGUiLCAidHJ1ZSIsCi0gICAgICAgICAgICAgICAgICAgIGVycm9yT25GYWlsZWRJbnNlcnQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBEZWFsIHdpdGggbWFuaWZlc3QgcGFja2FnZSBuYW1lIG92ZXJyaWRlcwotICAgIGNvbnN0IGNoYXIqIG1hbmlmZXN0UGFja2FnZU5hbWVPdmVycmlkZSA9IGJ1bmRsZS0+Z2V0TWFuaWZlc3RQYWNrYWdlTmFtZU92ZXJyaWRlKCk7Ci0gICAgaWYgKG1hbmlmZXN0UGFja2FnZU5hbWVPdmVycmlkZSAhPSBOVUxMKSB7Ci0gICAgICAgIC8vIFVwZGF0ZSB0aGUgYWN0dWFsIHBhY2thZ2UgbmFtZQotICAgICAgICBYTUxOb2RlOjphdHRyaWJ1dGVfZW50cnkqIGF0dHIgPSByb290LT5lZGl0QXR0cmlidXRlKFN0cmluZzE2KCksIFN0cmluZzE2KCJwYWNrYWdlIikpOwotICAgICAgICBpZiAoYXR0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBhY2thZ2UgbmFtZSBpcyByZXF1aXJlZCB3aXRoIC0tcmVuYW1lLW1hbmlmZXN0LXBhY2thZ2UuXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZzggb3JpZ1BhY2thZ2UoYXR0ci0+c3RyaW5nKTsKLSAgICAgICAgYXR0ci0+c3RyaW5nLnNldFRvKFN0cmluZzE2KG1hbmlmZXN0UGFja2FnZU5hbWVPdmVycmlkZSkpOwotICAgICAgICBOT0lTWShwcmludGYoIk92ZXJyaWRpbmcgcGFja2FnZSAnJXMnIHRvIGJlICclcydcbiIsIG9yaWdQYWNrYWdlLnN0cmluZygpLCBtYW5pZmVzdFBhY2thZ2VOYW1lT3ZlcnJpZGUpKTsKLQotICAgICAgICAvLyBNYWtlIGNsYXNzIG5hbWVzIGZ1bGx5IHF1YWxpZmllZAotICAgICAgICBzcDxYTUxOb2RlPiBhcHBsaWNhdGlvbiA9IHJvb3QtPmdldENoaWxkRWxlbWVudChTdHJpbmcxNigpLCBTdHJpbmcxNigiYXBwbGljYXRpb24iKSk7Ci0gICAgICAgIGlmIChhcHBsaWNhdGlvbiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBmdWxseVF1YWxpZnlDbGFzc05hbWUob3JpZ1BhY2thZ2UsIGFwcGxpY2F0aW9uLCBTdHJpbmcxNigibmFtZSIpKTsKLSAgICAgICAgICAgIGZ1bGx5UXVhbGlmeUNsYXNzTmFtZShvcmlnUGFja2FnZSwgYXBwbGljYXRpb24sIFN0cmluZzE2KCJiYWNrdXBBZ2VudCIpKTsKLQotICAgICAgICAgICAgVmVjdG9yPHNwPFhNTE5vZGU+ID4mIGNoaWxkcmVuID0gY29uc3RfY2FzdDxWZWN0b3I8c3A8WE1MTm9kZT4gPiY+KGFwcGxpY2F0aW9uLT5nZXRDaGlsZHJlbigpKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBzcDxYTUxOb2RlPiBjaGlsZCA9IGNoaWxkcmVuLmVkaXRJdGVtQXQoaSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nOCB0YWcoY2hpbGQtPmdldEVsZW1lbnROYW1lKCkpOwotICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gImFjdGl2aXR5IiB8fCB0YWcgPT0gInNlcnZpY2UiIHx8IHRhZyA9PSAicmVjZWl2ZXIiIHx8IHRhZyA9PSAicHJvdmlkZXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGx5UXVhbGlmeUNsYXNzTmFtZShvcmlnUGFja2FnZSwgY2hpbGQsIFN0cmluZzE2KCJuYW1lIikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJhY3Rpdml0eS1hbGlhcyIpIHsKLSAgICAgICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZ5Q2xhc3NOYW1lKG9yaWdQYWNrYWdlLCBjaGlsZCwgU3RyaW5nMTYoIm5hbWUiKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGx5UXVhbGlmeUNsYXNzTmFtZShvcmlnUGFja2FnZSwgY2hpbGQsIFN0cmluZzE2KCJ0YXJnZXRBY3Rpdml0eSIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBEZWFsIHdpdGggbWFuaWZlc3QgcGFja2FnZSBuYW1lIG92ZXJyaWRlcwotICAgIGNvbnN0IGNoYXIqIGluc3RydW1lbnRhdGlvblBhY2thZ2VOYW1lT3ZlcnJpZGUgPSBidW5kbGUtPmdldEluc3RydW1lbnRhdGlvblBhY2thZ2VOYW1lT3ZlcnJpZGUoKTsKLSAgICBpZiAoaW5zdHJ1bWVudGF0aW9uUGFja2FnZU5hbWVPdmVycmlkZSAhPSBOVUxMKSB7Ci0gICAgICAgIC8vIEZpeCB1cCBpbnN0cnVtZW50YXRpb24gdGFyZ2V0cy4KLSAgICAgICAgVmVjdG9yPHNwPFhNTE5vZGU+ID4mIGNoaWxkcmVuID0gY29uc3RfY2FzdDxWZWN0b3I8c3A8WE1MTm9kZT4gPiY+KHJvb3QtPmdldENoaWxkcmVuKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzcDxYTUxOb2RlPiBjaGlsZCA9IGNoaWxkcmVuLmVkaXRJdGVtQXQoaSk7Ci0gICAgICAgICAgICBTdHJpbmc4IHRhZyhjaGlsZC0+Z2V0RWxlbWVudE5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAodGFnID09ICJpbnN0cnVtZW50YXRpb24iKSB7Ci0gICAgICAgICAgICAgICAgWE1MTm9kZTo6YXR0cmlidXRlX2VudHJ5KiBhdHRyID0gY2hpbGQtPmVkaXRBdHRyaWJ1dGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNigiaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiksIFN0cmluZzE2KCJ0YXJnZXRQYWNrYWdlIikpOwotICAgICAgICAgICAgICAgIGlmIChhdHRyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0ci0+c3RyaW5nLnNldFRvKFN0cmluZzE2KGluc3RydW1lbnRhdGlvblBhY2thZ2VOYW1lT3ZlcnJpZGUpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLSNkZWZpbmUgQVNTSUdOX0lUKG4pIFwKLSAgICAgICAgZG8geyBcCi0gICAgICAgICAgICBzc2l6ZV90IGluZGV4ID0gcmVzb3VyY2VzLT5pbmRleE9mS2V5KFN0cmluZzgoI24pKTsgXAotICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHsgXAotICAgICAgICAgICAgICAgIG4gIyMgcyA9IHJlc291cmNlcy0+dmFsdWVBdChpbmRleCk7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICB9IHdoaWxlICgwKQotCi1zdGF0dXNfdCB1cGRhdGVQcmVQcm9jZXNzZWRDYWNoZShCdW5kbGUqIGJ1bmRsZSkKLXsKLSAgICAjaWYgQkVOQ0hNQVJLCi0gICAgZnByaW50ZihzdGRvdXQsICJCRU5DSE1BUks6IFN0YXJ0aW5nIFBORyBQcmVQcm9jZXNzaW5nIFxuIik7Ci0gICAgbG9uZyBzdGFydFBOR1RpbWUgPSBjbG9jaygpOwotICAgICNlbmRpZiAvKiBCRU5DSE1BUksgKi8KLQotICAgIFN0cmluZzggc291cmNlKGJ1bmRsZS0+Z2V0UmVzb3VyY2VTb3VyY2VEaXJzKClbMF0pOwotICAgIFN0cmluZzggZGVzdChidW5kbGUtPmdldENydW5jaGVkT3V0cHV0RGlyKCkpOwotCi0gICAgRmlsZUZpbmRlciogZmYgPSBuZXcgU3lzdGVtRmlsZUZpbmRlcigpOwotICAgIENydW5jaENhY2hlIGNjKHNvdXJjZSxkZXN0LGZmKTsKLQotICAgIENhY2hlVXBkYXRlciogY3UgPSBuZXcgU3lzdGVtQ2FjaGVVcGRhdGVyKGJ1bmRsZSk7Ci0gICAgc2l6ZV90IG51bUZpbGVzID0gY2MuY3J1bmNoKGN1KTsKLQotICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkKLSAgICAgICAgZnByaW50ZihzdGRvdXQsICJDcnVuY2hlZCAlZCBQTkcgZmlsZXMgdG8gdXBkYXRlIGNhY2hlXG4iLCAoaW50KW51bUZpbGVzKTsKLQotICAgIGRlbGV0ZSBmZjsKLSAgICBkZWxldGUgY3U7Ci0KLSAgICAjaWYgQkVOQ0hNQVJLCi0gICAgZnByaW50ZihzdGRvdXQsICJCRU5DSE1BUks6IEVuZCBQTkcgUHJlUHJvY2Vzc2luZy4gVGltZSBFbGFwc2VkOiAlZiBtcyBcbiIKLSAgICAgICAgICAgICwoY2xvY2soKSAtIHN0YXJ0UE5HVGltZSkvMTAwMC4wKTsKLSAgICAjZW5kaWYgLyogQkVOQ0hNQVJLICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXR1c190IGJ1aWxkUmVzb3VyY2VzKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzKQotewotICAgIC8vIEZpcnN0LCBsb29rIGZvciBhIHBhY2thZ2UgZmlsZSB0byBwYXJzZS4gIFRoaXMgaXMgcmVxdWlyZWQgdG8KLSAgICAvLyBiZSBhYmxlIHRvIGdlbmVyYXRlIHRoZSByZXNvdXJjZSBpbmZvcm1hdGlvbi4KLSAgICBzcDxBYXB0R3JvdXA+IGFuZHJvaWRNYW5pZmVzdEZpbGUgPQotICAgICAgICAgICAgYXNzZXRzLT5nZXRGaWxlcygpLnZhbHVlRm9yKFN0cmluZzgoIkFuZHJvaWRNYW5pZmVzdC54bWwiKSk7Ci0gICAgaWYgKGFuZHJvaWRNYW5pZmVzdEZpbGUgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBBbmRyb2lkTWFuaWZlc3QueG1sIGZpbGUgZm91bmQuXG4iKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgc3RhdHVzX3QgZXJyID0gcGFyc2VQYWNrYWdlKGJ1bmRsZSwgYXNzZXRzLCBhbmRyb2lkTWFuaWZlc3RGaWxlKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgTk9JU1kocHJpbnRmKCJDcmVhdGluZyByZXNvdXJjZXMgZm9yIHBhY2thZ2UgJXNcbiIsCi0gICAgICAgICAgICAgICAgIGFzc2V0cy0+Z2V0UGFja2FnZSgpLnN0cmluZygpKSk7Ci0KLSAgICBSZXNvdXJjZVRhYmxlIHRhYmxlKGJ1bmRsZSwgU3RyaW5nMTYoYXNzZXRzLT5nZXRQYWNrYWdlKCkpKTsKLSAgICBlcnIgPSB0YWJsZS5hZGRJbmNsdWRlZFJlc291cmNlcyhidW5kbGUsIGFzc2V0cyk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIE5PSVNZKHByaW50ZigiRm91bmQgJWQgaW5jbHVkZWQgcmVzb3VyY2UgcGFja2FnZXNcbiIsIChpbnQpdGFibGUuc2l6ZSgpKSk7Ci0KLSAgICAvLyBTdGFuZGFyZCBmbGFncyBmb3IgY29tcGlsZWQgWE1MIGFuZCBvcHRpb25hbCBVVEYtOCBlbmNvZGluZwotICAgIGludCB4bWxGbGFncyA9IFhNTF9DT01QSUxFX1NUQU5EQVJEX1JFU09VUkNFOwotCi0gICAgLyogT25seSBlbmFibGUgVVRGLTggaWYgdGhlIGNhbGxlciBvZiBhYXB0IGRpZG4ndCBzcGVjaWZpY2FsbHkKLSAgICAgKiByZXF1ZXN0IFVURi0xNiBlbmNvZGluZyBhbmQgdGhlIHBhcmFtZXRlcnMgb2YgdGhpcyBwYWNrYWdlCi0gICAgICogYWxsb3cgVVRGLTggdG8gYmUgdXNlZC4KLSAgICAgKi8KLSAgICBpZiAoIWJ1bmRsZS0+Z2V0VVRGMTZTdHJpbmdzT3B0aW9uKCkpIHsKLSAgICAgICAgeG1sRmxhZ3MgfD0gWE1MX0NPTVBJTEVfVVRGODsKLSAgICB9Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEZpcnN0LCBnYXRoZXIgYWxsIHJlc291cmNlIGluZm9ybWF0aW9uLgotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyByZXNUeXBlIC0+IGxlYWZOYW1lIC0+IGdyb3VwCi0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8UmVzb3VyY2VUeXBlU2V0PiA+ICpyZXNvdXJjZXMgPQotICAgICAgICAgICAgbmV3IEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPFJlc291cmNlVHlwZVNldD4gPjsKLSAgICBjb2xsZWN0X2ZpbGVzKGFzc2V0cywgcmVzb3VyY2VzKTsKLQotICAgIHNwPFJlc291cmNlVHlwZVNldD4gZHJhd2FibGVzOwotICAgIHNwPFJlc291cmNlVHlwZVNldD4gbGF5b3V0czsKLSAgICBzcDxSZXNvdXJjZVR5cGVTZXQ+IGFuaW1zOwotICAgIHNwPFJlc291cmNlVHlwZVNldD4gYW5pbWF0b3JzOwotICAgIHNwPFJlc291cmNlVHlwZVNldD4gaW50ZXJwb2xhdG9yczsKLSAgICBzcDxSZXNvdXJjZVR5cGVTZXQ+IHRyYW5zaXRpb25zOwotICAgIHNwPFJlc291cmNlVHlwZVNldD4geG1sczsKLSAgICBzcDxSZXNvdXJjZVR5cGVTZXQ+IHJhd3M7Ci0gICAgc3A8UmVzb3VyY2VUeXBlU2V0PiBjb2xvcnM7Ci0gICAgc3A8UmVzb3VyY2VUeXBlU2V0PiBtZW51czsKLSAgICBzcDxSZXNvdXJjZVR5cGVTZXQ+IG1pcG1hcHM7Ci0KLSAgICBBU1NJR05fSVQoZHJhd2FibGUpOwotICAgIEFTU0lHTl9JVChsYXlvdXQpOwotICAgIEFTU0lHTl9JVChhbmltKTsKLSAgICBBU1NJR05fSVQoYW5pbWF0b3IpOwotICAgIEFTU0lHTl9JVChpbnRlcnBvbGF0b3IpOwotICAgIEFTU0lHTl9JVCh0cmFuc2l0aW9uKTsKLSAgICBBU1NJR05fSVQoeG1sKTsKLSAgICBBU1NJR05fSVQocmF3KTsKLSAgICBBU1NJR05fSVQoY29sb3IpOwotICAgIEFTU0lHTl9JVChtZW51KTsKLSAgICBBU1NJR05fSVQobWlwbWFwKTsKLQotICAgIGFzc2V0cy0+c2V0UmVzb3VyY2VzKHJlc291cmNlcyk7Ci0gICAgLy8gbm93IGdvIHRocm91Z2ggYW55IHJlc291cmNlIG92ZXJsYXlzIGFuZCBjb2xsZWN0IHRoZWlyIGZpbGVzCi0gICAgc3A8QWFwdEFzc2V0cz4gY3VycmVudCA9IGFzc2V0cy0+Z2V0T3ZlcmxheSgpOwotICAgIHdoaWxlKGN1cnJlbnQuZ2V0KCkpIHsKLSAgICAgICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8UmVzb3VyY2VUeXBlU2V0PiA+ICpyZXNvdXJjZXMgPQotICAgICAgICAgICAgICAgIG5ldyBLZXllZFZlY3RvcjxTdHJpbmc4LCBzcDxSZXNvdXJjZVR5cGVTZXQ+ID47Ci0gICAgICAgIGN1cnJlbnQtPnNldFJlc291cmNlcyhyZXNvdXJjZXMpOwotICAgICAgICBjb2xsZWN0X2ZpbGVzKGN1cnJlbnQsIHJlc291cmNlcyk7Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5nZXRPdmVybGF5KCk7Ci0gICAgfQotICAgIC8vIGFwcGx5IHRoZSBvdmVybGF5IGZpbGVzIHRvIHRoZSBiYXNlIHNldAotICAgIGlmICghYXBwbHlGaWxlT3ZlcmxheShidW5kbGUsIGFzc2V0cywgJmRyYXdhYmxlcywgImRyYXdhYmxlIikgfHwKLSAgICAgICAgICAgICFhcHBseUZpbGVPdmVybGF5KGJ1bmRsZSwgYXNzZXRzLCAmbGF5b3V0cywgImxheW91dCIpIHx8Ci0gICAgICAgICAgICAhYXBwbHlGaWxlT3ZlcmxheShidW5kbGUsIGFzc2V0cywgJmFuaW1zLCAiYW5pbSIpIHx8Ci0gICAgICAgICAgICAhYXBwbHlGaWxlT3ZlcmxheShidW5kbGUsIGFzc2V0cywgJmFuaW1hdG9ycywgImFuaW1hdG9yIikgfHwKLSAgICAgICAgICAgICFhcHBseUZpbGVPdmVybGF5KGJ1bmRsZSwgYXNzZXRzLCAmaW50ZXJwb2xhdG9ycywgImludGVycG9sYXRvciIpIHx8Ci0gICAgICAgICAgICAhYXBwbHlGaWxlT3ZlcmxheShidW5kbGUsIGFzc2V0cywgJnRyYW5zaXRpb25zLCAidHJhbnNpdGlvbiIpIHx8Ci0gICAgICAgICAgICAhYXBwbHlGaWxlT3ZlcmxheShidW5kbGUsIGFzc2V0cywgJnhtbHMsICJ4bWwiKSB8fAotICAgICAgICAgICAgIWFwcGx5RmlsZU92ZXJsYXkoYnVuZGxlLCBhc3NldHMsICZyYXdzLCAicmF3IikgfHwKLSAgICAgICAgICAgICFhcHBseUZpbGVPdmVybGF5KGJ1bmRsZSwgYXNzZXRzLCAmY29sb3JzLCAiY29sb3IiKSB8fAotICAgICAgICAgICAgIWFwcGx5RmlsZU92ZXJsYXkoYnVuZGxlLCBhc3NldHMsICZtZW51cywgIm1lbnUiKSB8fAotICAgICAgICAgICAgIWFwcGx5RmlsZU92ZXJsYXkoYnVuZGxlLCBhc3NldHMsICZtaXBtYXBzLCAibWlwbWFwIikpIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNFcnJvcnMgPSBmYWxzZTsKLQotICAgIGlmIChkcmF3YWJsZXMgIT0gTlVMTCkgewotICAgICAgICBpZiAoYnVuZGxlLT5nZXRPdXRwdXRBUEtGaWxlKCkgIT0gTlVMTCkgewotICAgICAgICAgICAgZXJyID0gcHJlUHJvY2Vzc0ltYWdlcyhidW5kbGUsIGFzc2V0cywgZHJhd2FibGVzLCAiZHJhd2FibGUiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXJyID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBlcnIgPSBtYWtlRmlsZVJlc291cmNlcyhidW5kbGUsIGFzc2V0cywgJnRhYmxlLCBkcmF3YWJsZXMsICJkcmF3YWJsZSIpOwotICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1pcG1hcHMgIT0gTlVMTCkgewotICAgICAgICBpZiAoYnVuZGxlLT5nZXRPdXRwdXRBUEtGaWxlKCkgIT0gTlVMTCkgewotICAgICAgICAgICAgZXJyID0gcHJlUHJvY2Vzc0ltYWdlcyhidW5kbGUsIGFzc2V0cywgbWlwbWFwcywgIm1pcG1hcCIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcnIgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGVyciA9IG1ha2VGaWxlUmVzb3VyY2VzKGJ1bmRsZSwgYXNzZXRzLCAmdGFibGUsIG1pcG1hcHMsICJtaXBtYXAiKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsYXlvdXRzICE9IE5VTEwpIHsKLSAgICAgICAgZXJyID0gbWFrZUZpbGVSZXNvdXJjZXMoYnVuZGxlLCBhc3NldHMsICZ0YWJsZSwgbGF5b3V0cywgImxheW91dCIpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFuaW1zICE9IE5VTEwpIHsKLSAgICAgICAgZXJyID0gbWFrZUZpbGVSZXNvdXJjZXMoYnVuZGxlLCBhc3NldHMsICZ0YWJsZSwgYW5pbXMsICJhbmltIik7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYW5pbWF0b3JzICE9IE5VTEwpIHsKLSAgICAgICAgZXJyID0gbWFrZUZpbGVSZXNvdXJjZXMoYnVuZGxlLCBhc3NldHMsICZ0YWJsZSwgYW5pbWF0b3JzLCAiYW5pbWF0b3IiKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0cmFuc2l0aW9ucyAhPSBOVUxMKSB7Ci0gICAgICAgIGVyciA9IG1ha2VGaWxlUmVzb3VyY2VzKGJ1bmRsZSwgYXNzZXRzLCAmdGFibGUsIHRyYW5zaXRpb25zLCAidHJhbnNpdGlvbiIpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGludGVycG9sYXRvcnMgIT0gTlVMTCkgewotICAgICAgICBlcnIgPSBtYWtlRmlsZVJlc291cmNlcyhidW5kbGUsIGFzc2V0cywgJnRhYmxlLCBpbnRlcnBvbGF0b3JzLCAiaW50ZXJwb2xhdG9yIik7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoeG1scyAhPSBOVUxMKSB7Ci0gICAgICAgIGVyciA9IG1ha2VGaWxlUmVzb3VyY2VzKGJ1bmRsZSwgYXNzZXRzLCAmdGFibGUsIHhtbHMsICJ4bWwiKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyYXdzICE9IE5VTEwpIHsKLSAgICAgICAgZXJyID0gbWFrZUZpbGVSZXNvdXJjZXMoYnVuZGxlLCBhc3NldHMsICZ0YWJsZSwgcmF3cywgInJhdyIpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gY29tcGlsZSByZXNvdXJjZXMKLSAgICBjdXJyZW50ID0gYXNzZXRzOwotICAgIHdoaWxlKGN1cnJlbnQuZ2V0KCkpIHsKLSAgICAgICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8UmVzb3VyY2VUeXBlU2V0PiA+ICpyZXNvdXJjZXMgPQotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmdldFJlc291cmNlcygpOwotCi0gICAgICAgIHNzaXplX3QgaW5kZXggPSByZXNvdXJjZXMtPmluZGV4T2ZLZXkoU3RyaW5nOCgidmFsdWVzIikpOwotICAgICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAgICAgUmVzb3VyY2VEaXJJdGVyYXRvciBpdChyZXNvdXJjZXMtPnZhbHVlQXQoaW5kZXgpLCBTdHJpbmc4KCJ2YWx1ZXMiKSk7Ci0gICAgICAgICAgICBzc2l6ZV90IHJlczsKLSAgICAgICAgICAgIHdoaWxlICgocmVzPWl0Lm5leHQoKSkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBzcDxBYXB0RmlsZT4gZmlsZSA9IGl0LmdldEZpbGUoKTsKLSAgICAgICAgICAgICAgICByZXMgPSBjb21waWxlUmVzb3VyY2VGaWxlKGJ1bmRsZSwgYXNzZXRzLCBmaWxlLCBpdC5nZXRQYXJhbXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50IT1hc3NldHMpLCAmdGFibGUpOwotICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPmdldE92ZXJsYXkoKTsKLSAgICB9Ci0KLSAgICBpZiAoY29sb3JzICE9IE5VTEwpIHsKLSAgICAgICAgZXJyID0gbWFrZUZpbGVSZXNvdXJjZXMoYnVuZGxlLCBhc3NldHMsICZ0YWJsZSwgY29sb3JzLCAiY29sb3IiKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtZW51cyAhPSBOVUxMKSB7Ci0gICAgICAgIGVyciA9IG1ha2VGaWxlUmVzb3VyY2VzKGJ1bmRsZSwgYXNzZXRzLCAmdGFibGUsIG1lbnVzLCAibWVudSIpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBBc3NpZ25tZW50IG9mIHJlc291cmNlIElEcyBhbmQgaW5pdGlhbCBnZW5lcmF0aW9uIG9mIHJlc291cmNlIHRhYmxlLgotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBpZiAodGFibGUuaGFzUmVzb3VyY2VzKCkpIHsKLSAgICAgICAgc3A8QWFwdEZpbGU+IHJlc0ZpbGUoZ2V0UmVzb3VyY2VGaWxlKGFzc2V0cykpOwotICAgICAgICBpZiAocmVzRmlsZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiB1bmFibGUgdG8gZ2VuZXJhdGUgZW50cnkgZm9yIHJlc291cmNlIGRhdGFcbiIpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBlcnIgPSB0YWJsZS5hc3NpZ25SZXNvdXJjZUlkcygpOwotICAgICAgICBpZiAoZXJyIDwgTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEZpbmFsbHksIHdlIGNhbiBub3cgd2UgY2FuIGNvbXBpbGUgWE1MIGZpbGVzLCB3aGljaCBtYXkgcmVmZXJlbmNlCi0gICAgLy8gcmVzb3VyY2VzLgotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBpZiAobGF5b3V0cyAhPSBOVUxMKSB7Ci0gICAgICAgIFJlc291cmNlRGlySXRlcmF0b3IgaXQobGF5b3V0cywgU3RyaW5nOCgibGF5b3V0IikpOwotICAgICAgICB3aGlsZSAoKGVycj1pdC5uZXh0KCkpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBTdHJpbmc4IHNyYyA9IGl0LmdldEZpbGUoKS0+Z2V0UHJpbnRhYmxlU291cmNlKCk7Ci0gICAgICAgICAgICBlcnIgPSBjb21waWxlWG1sRmlsZShhc3NldHMsIGl0LmdldEZpbGUoKSwgJnRhYmxlLCB4bWxGbGFncyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgUmVzWE1MVHJlZSBibG9jazsKLSAgICAgICAgICAgICAgICBibG9jay5zZXRUbyhpdC5nZXRGaWxlKCktPmdldERhdGEoKSwgaXQuZ2V0RmlsZSgpLT5nZXRTaXplKCksIHRydWUpOwotICAgICAgICAgICAgICAgIGNoZWNrRm9ySWRzKHNyYywgYmxvY2spOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IE5PX0VSUk9SOwotICAgIH0KLQotICAgIGlmIChhbmltcyAhPSBOVUxMKSB7Ci0gICAgICAgIFJlc291cmNlRGlySXRlcmF0b3IgaXQoYW5pbXMsIFN0cmluZzgoImFuaW0iKSk7Ci0gICAgICAgIHdoaWxlICgoZXJyPWl0Lm5leHQoKSkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGVyciA9IGNvbXBpbGVYbWxGaWxlKGFzc2V0cywgaXQuZ2V0RmlsZSgpLCAmdGFibGUsIHhtbEZsYWdzKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IE5PX0VSUk9SOwotICAgIH0KLQotICAgIGlmIChhbmltYXRvcnMgIT0gTlVMTCkgewotICAgICAgICBSZXNvdXJjZURpckl0ZXJhdG9yIGl0KGFuaW1hdG9ycywgU3RyaW5nOCgiYW5pbWF0b3IiKSk7Ci0gICAgICAgIHdoaWxlICgoZXJyPWl0Lm5leHQoKSkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGVyciA9IGNvbXBpbGVYbWxGaWxlKGFzc2V0cywgaXQuZ2V0RmlsZSgpLCAmdGFibGUsIHhtbEZsYWdzKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IE5PX0VSUk9SOwotICAgIH0KLQotICAgIGlmIChpbnRlcnBvbGF0b3JzICE9IE5VTEwpIHsKLSAgICAgICAgUmVzb3VyY2VEaXJJdGVyYXRvciBpdChpbnRlcnBvbGF0b3JzLCBTdHJpbmc4KCJpbnRlcnBvbGF0b3IiKSk7Ci0gICAgICAgIHdoaWxlICgoZXJyPWl0Lm5leHQoKSkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGVyciA9IGNvbXBpbGVYbWxGaWxlKGFzc2V0cywgaXQuZ2V0RmlsZSgpLCAmdGFibGUsIHhtbEZsYWdzKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IE5PX0VSUk9SOwotICAgIH0KLQotICAgIGlmICh0cmFuc2l0aW9ucyAhPSBOVUxMKSB7Ci0gICAgICAgIFJlc291cmNlRGlySXRlcmF0b3IgaXQodHJhbnNpdGlvbnMsIFN0cmluZzgoInRyYW5zaXRpb24iKSk7Ci0gICAgICAgIHdoaWxlICgoZXJyPWl0Lm5leHQoKSkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGVyciA9IGNvbXBpbGVYbWxGaWxlKGFzc2V0cywgaXQuZ2V0RmlsZSgpLCAmdGFibGUsIHhtbEZsYWdzKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IE5PX0VSUk9SOwotICAgIH0KLQotICAgIGlmICh4bWxzICE9IE5VTEwpIHsKLSAgICAgICAgUmVzb3VyY2VEaXJJdGVyYXRvciBpdCh4bWxzLCBTdHJpbmc4KCJ4bWwiKSk7Ci0gICAgICAgIHdoaWxlICgoZXJyPWl0Lm5leHQoKSkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGVyciA9IGNvbXBpbGVYbWxGaWxlKGFzc2V0cywgaXQuZ2V0RmlsZSgpLCAmdGFibGUsIHhtbEZsYWdzKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IE5PX0VSUk9SOwotICAgIH0KLQotICAgIGlmIChkcmF3YWJsZXMgIT0gTlVMTCkgewotICAgICAgICBlcnIgPSBwb3N0UHJvY2Vzc0ltYWdlcyhhc3NldHMsICZ0YWJsZSwgZHJhd2FibGVzKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjb2xvcnMgIT0gTlVMTCkgewotICAgICAgICBSZXNvdXJjZURpckl0ZXJhdG9yIGl0KGNvbG9ycywgU3RyaW5nOCgiY29sb3IiKSk7Ci0gICAgICAgIHdoaWxlICgoZXJyPWl0Lm5leHQoKSkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICBlcnIgPSBjb21waWxlWG1sRmlsZShhc3NldHMsIGl0LmdldEZpbGUoKSwgJnRhYmxlLCB4bWxGbGFncyk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlcnIgPSBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAobWVudXMgIT0gTlVMTCkgewotICAgICAgICBSZXNvdXJjZURpckl0ZXJhdG9yIGl0KG1lbnVzLCBTdHJpbmc4KCJtZW51IikpOwotICAgICAgICB3aGlsZSAoKGVycj1pdC5uZXh0KCkpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBTdHJpbmc4IHNyYyA9IGl0LmdldEZpbGUoKS0+Z2V0UHJpbnRhYmxlU291cmNlKCk7Ci0gICAgICAgICAgICBlcnIgPSBjb21waWxlWG1sRmlsZShhc3NldHMsIGl0LmdldEZpbGUoKSwgJnRhYmxlLCB4bWxGbGFncyk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlc1hNTFRyZWUgYmxvY2s7Ci0gICAgICAgICAgICBibG9jay5zZXRUbyhpdC5nZXRGaWxlKCktPmdldERhdGEoKSwgaXQuZ2V0RmlsZSgpLT5nZXRTaXplKCksIHRydWUpOwotICAgICAgICAgICAgY2hlY2tGb3JJZHMoc3JjLCBibG9jayk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXJyIDwgTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZXJyID0gTk9fRVJST1I7Ci0gICAgfQotCi0gICAgaWYgKHRhYmxlLnZhbGlkYXRlTG9jYWxpemF0aW9ucygpKSB7Ci0gICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGhhc0Vycm9ycykgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBjb25zdCBzcDxBYXB0RmlsZT4gbWFuaWZlc3RGaWxlKGFuZHJvaWRNYW5pZmVzdEZpbGUtPmdldEZpbGVzKCkudmFsdWVBdCgwKSk7Ci0gICAgU3RyaW5nOCBtYW5pZmVzdFBhdGgobWFuaWZlc3RGaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKSk7Ci0KLSAgICAvLyBHZW5lcmF0ZSBmaW5hbCBjb21waWxlZCBtYW5pZmVzdCBmaWxlLgotICAgIG1hbmlmZXN0RmlsZS0+Y2xlYXJEYXRhKCk7Ci0gICAgc3A8WE1MTm9kZT4gbWFuaWZlc3RUcmVlID0gWE1MTm9kZTo6cGFyc2UobWFuaWZlc3RGaWxlKTsKLSAgICBpZiAobWFuaWZlc3RUcmVlID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIGVyciA9IG1hc3NhZ2VNYW5pZmVzdChidW5kbGUsIG1hbmlmZXN0VHJlZSk7Ci0gICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIGVyciA9IGNvbXBpbGVYbWxGaWxlKGFzc2V0cywgbWFuaWZlc3RUcmVlLCBtYW5pZmVzdEZpbGUsICZ0YWJsZSk7Ci0gICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLy9ibG9jay5yZXN0YXJ0KCk7Ci0gICAgLy9wcmludFhNTEJsb2NrKCZibG9jayk7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEdlbmVyYXRlIHRoZSBmaW5hbCByZXNvdXJjZSB0YWJsZS4KLSAgICAvLyBSZS1mbGF0dGVuIGJlY2F1c2Ugd2UgbWF5IGhhdmUgYWRkZWQgbmV3IHJlc291cmNlIElEcwotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBSZXNUYWJsZSBmaW5hbFJlc1RhYmxlOwotICAgIHNwPEFhcHRGaWxlPiByZXNGaWxlOwotCi0gICAgaWYgKHRhYmxlLmhhc1Jlc291cmNlcygpKSB7Ci0gICAgICAgIHNwPEFhcHRTeW1ib2xzPiBzeW1ib2xzID0gYXNzZXRzLT5nZXRTeW1ib2xzRm9yKFN0cmluZzgoIlIiKSk7Ci0gICAgICAgIGVyciA9IHRhYmxlLmFkZFN5bWJvbHMoc3ltYm9scyk7Ci0gICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc0ZpbGUgPSBnZXRSZXNvdXJjZUZpbGUoYXNzZXRzKTsKLSAgICAgICAgaWYgKHJlc0ZpbGUgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogdW5hYmxlIHRvIGdlbmVyYXRlIGVudHJ5IGZvciByZXNvdXJjZSBkYXRhXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgZXJyID0gdGFibGUuZmxhdHRlbihidW5kbGUsIHJlc0ZpbGUpOwotICAgICAgICBpZiAoZXJyIDwgTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnVuZGxlLT5nZXRQdWJsaWNPdXRwdXRGaWxlKCkpIHsKLSAgICAgICAgICAgIEZJTEUqIGZwID0gZm9wZW4oYnVuZGxlLT5nZXRQdWJsaWNPdXRwdXRGaWxlKCksICJ3KyIpOwotICAgICAgICAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBVbmFibGUgdG8gb3BlbiBwdWJsaWMgZGVmaW5pdGlvbnMgb3V0cHV0IGZpbGUgJXM6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIqKWJ1bmRsZS0+Z2V0UHVibGljT3V0cHV0RmlsZSgpLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIFdyaXRpbmcgcHVibGljIGRlZmluaXRpb25zIHRvICVzLlxuIiwgYnVuZGxlLT5nZXRQdWJsaWNPdXRwdXRGaWxlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGFibGUud3JpdGVQdWJsaWNEZWZpbml0aW9ucyhTdHJpbmcxNihhc3NldHMtPmdldFBhY2thZ2UoKSksIGZwKTsKLSAgICAgICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZWFkIHJlc291cmNlcyBiYWNrIGluLAotICAgICAgICBmaW5hbFJlc1RhYmxlLmFkZChyZXNGaWxlLT5nZXREYXRhKCksIHJlc0ZpbGUtPmdldFNpemUoKSwgTlVMTCk7Ci0KLSNpZiAwCi0gICAgICAgIE5PSVNZKAotICAgICAgICAgICAgICBwcmludGYoIkdlbmVyYXRlZCByZXNvdXJjZXM6XG4iKTsKLSAgICAgICAgICAgICAgZmluYWxSZXNUYWJsZS5wcmludCgpOwotICAgICAgICApCi0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBQZXJmb3JtIGEgYmFzaWMgdmFsaWRhdGlvbiBvZiB0aGUgbWFuaWZlc3QgZmlsZS4gIFRoaXMgdGltZSB3ZQotICAgIC8vIHBhcnNlIGl0IHdpdGggdGhlIGNvbW1lbnRzIGludGFjdCwgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZW0gdG8KLSAgICAvLyBnZW5lcmF0ZSBqYXZhIGRvY3MuLi4gIHNvIHdlIGFyZSBub3QgZ29pbmcgdG8gd3JpdGUgdGhpcyBvbmUKLSAgICAvLyBiYWNrIG91dCB0byB0aGUgZmluYWwgbWFuaWZlc3QgZGF0YS4KLSAgICBzcDxBYXB0RmlsZT4gb3V0TWFuaWZlc3RGaWxlID0gbmV3IEFhcHRGaWxlKG1hbmlmZXN0RmlsZS0+Z2V0U291cmNlRmlsZSgpLAotICAgICAgICAgICAgbWFuaWZlc3RGaWxlLT5nZXRHcm91cEVudHJ5KCksCi0gICAgICAgICAgICBtYW5pZmVzdEZpbGUtPmdldFJlc291cmNlVHlwZSgpKTsKLSAgICBlcnIgPSBjb21waWxlWG1sRmlsZShhc3NldHMsIG1hbmlmZXN0RmlsZSwKLSAgICAgICAgICAgIG91dE1hbmlmZXN0RmlsZSwgJnRhYmxlLAotICAgICAgICAgICAgWE1MX0NPTVBJTEVfQVNTSUdOX0FUVFJJQlVURV9JRFMKLSAgICAgICAgICAgIHwgWE1MX0NPTVBJTEVfU1RSSVBfV0hJVEVTUEFDRSB8IFhNTF9DT01QSUxFX1NUUklQX1JBV19WQUxVRVMpOwotICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICBSZXNYTUxUcmVlIGJsb2NrOwotICAgIGJsb2NrLnNldFRvKG91dE1hbmlmZXN0RmlsZS0+Z2V0RGF0YSgpLCBvdXRNYW5pZmVzdEZpbGUtPmdldFNpemUoKSwgdHJ1ZSk7Ci0gICAgU3RyaW5nMTYgbWFuaWZlc3QxNigibWFuaWZlc3QiKTsKLSAgICBTdHJpbmcxNiBwZXJtaXNzaW9uMTYoInBlcm1pc3Npb24iKTsKLSAgICBTdHJpbmcxNiBwZXJtaXNzaW9uX2dyb3VwMTYoInBlcm1pc3Npb24tZ3JvdXAiKTsKLSAgICBTdHJpbmcxNiB1c2VzX3Blcm1pc3Npb24xNigidXNlcy1wZXJtaXNzaW9uIik7Ci0gICAgU3RyaW5nMTYgaW5zdHJ1bWVudGF0aW9uMTYoImluc3RydW1lbnRhdGlvbiIpOwotICAgIFN0cmluZzE2IGFwcGxpY2F0aW9uMTYoImFwcGxpY2F0aW9uIik7Ci0gICAgU3RyaW5nMTYgcHJvdmlkZXIxNigicHJvdmlkZXIiKTsKLSAgICBTdHJpbmcxNiBzZXJ2aWNlMTYoInNlcnZpY2UiKTsKLSAgICBTdHJpbmcxNiByZWNlaXZlcjE2KCJyZWNlaXZlciIpOwotICAgIFN0cmluZzE2IGFjdGl2aXR5MTYoImFjdGl2aXR5Iik7Ci0gICAgU3RyaW5nMTYgYWN0aW9uMTYoImFjdGlvbiIpOwotICAgIFN0cmluZzE2IGNhdGVnb3J5MTYoImNhdGVnb3J5Iik7Ci0gICAgU3RyaW5nMTYgZGF0YTE2KCJzY2hlbWUiKTsKLSAgICBjb25zdCBjaGFyKiBwYWNrYWdlSWRlbnRDaGFycyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKLSAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLl8wMTIzNDU2Nzg5IjsKLSAgICBjb25zdCBjaGFyKiBwYWNrYWdlSWRlbnRDaGFyc1dpdGhUaGVTdHVwaWQgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCi0gICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi5fMDEyMzQ1Njc4OS0iOwotICAgIGNvbnN0IGNoYXIqIGNsYXNzSWRlbnRDaGFycyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKLSAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLl8wMTIzNDU2Nzg5JCI7Ci0gICAgY29uc3QgY2hhciogcHJvY2Vzc0lkZW50Q2hhcnMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCi0gICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi5fMDEyMzQ1Njc4OToiOwotICAgIGNvbnN0IGNoYXIqIGF1dGhvcml0aWVzSWRlbnRDaGFycyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKLSAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLl8wMTIzNDU2Nzg5LTo7IjsKLSAgICBjb25zdCBjaGFyKiB0eXBlSWRlbnRDaGFycyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKLSAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLl8wMTIzNDU2Nzg5Oi0vKisiOwotICAgIGNvbnN0IGNoYXIqIHNjaGVtZUlkZW50Q2hhcnMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCi0gICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi5fMDEyMzQ1Njc4OS0iOwotICAgIFJlc1hNTFRyZWU6OmV2ZW50X2NvZGVfdCBjb2RlOwotICAgIHNwPEFhcHRTeW1ib2xzPiBwZXJtaXNzaW9uU3ltYm9sczsKLSAgICBzcDxBYXB0U3ltYm9scz4gcGVybWlzc2lvbkdyb3VwU3ltYm9sczsKLSAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQKLSAgICAgICAgICAgJiYgY29kZSA+IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgICAgICBpZiAoYmxvY2suZ2V0RWxlbWVudE5hbWVzcGFjZSgmbGVuKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIG1hbmlmZXN0MTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssIE5VTEwsICJwYWNrYWdlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VJZGVudENoYXJzLCB0cnVlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLCBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hhcmVkVXNlcklkIiwgcGFja2FnZUlkZW50Q2hhcnMsIGZhbHNlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBwZXJtaXNzaW9uMTYuc3RyaW5nKCkpID09IDAKLSAgICAgICAgICAgICAgICAgICAgfHwgc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHBlcm1pc3Npb25fZ3JvdXAxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgaXNHcm91cCA9IHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbl9ncm91cDE2LnN0cmluZygpKSA9PSAwOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCBpc0dyb3VwID8gcGFja2FnZUlkZW50Q2hhcnNXaXRoVGhlU3R1cGlkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBhY2thZ2VJZGVudENoYXJzLCB0cnVlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zIHNyY1BvcyhtYW5pZmVzdFBhdGgsIGJsb2NrLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgICAgICAgICAgICAgc3A8QWFwdFN5bWJvbHM+IHN5bXM7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0dyb3VwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bXMgPSBwZXJtaXNzaW9uU3ltYm9sczsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bXMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3A8QWFwdFN5bWJvbHM+IHN5bWJvbHMgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldHMtPmdldFN5bWJvbHNGb3IoU3RyaW5nOCgiTWFuaWZlc3QiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeW1zID0gcGVybWlzc2lvblN5bWJvbHMgPSBzeW1ib2xzLT5hZGROZXN0ZWRTeW1ib2woCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoInBlcm1pc3Npb24iKSwgc3JjUG9zKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bXMgPSBwZXJtaXNzaW9uR3JvdXBTeW1ib2xzOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3ltcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcDxBYXB0U3ltYm9scz4gc3ltYm9scyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0cy0+Z2V0U3ltYm9sc0ZvcihTdHJpbmc4KCJNYW5pZmVzdCIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMgPSBwZXJtaXNzaW9uR3JvdXBTeW1ib2xzID0gc3ltYm9scy0+YWRkTmVzdGVkU3ltYm9sKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KCJwZXJtaXNzaW9uX2dyb3VwIiksIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IGluZGV4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJuYW1lIik7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIGlkID0gYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaW5kZXgsICZsZW4pOwotICAgICAgICAgICAgICAgIGlmIChpZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgbmFtZSBhdHRyaWJ1dGUgaW4gZWxlbWVudCA8JXM+LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdFBhdGguc3RyaW5nKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTdHJpbmc4IGlkU3RyKGlkKTsKLSAgICAgICAgICAgICAgICBjaGFyKiBwID0gaWRTdHIubG9ja0J1ZmZlcihpZFN0ci5zaXplKCkpOwotICAgICAgICAgICAgICAgIGNoYXIqIGUgPSBwICsgaWRTdHIuc2l6ZSgpOwotICAgICAgICAgICAgICAgIGJvb2wgYmVnaW5zX3dpdGhfZGlnaXQgPSB0cnVlOyAgLy8gaW5pdCB0byB0cnVlIHNvIGFuIGVtcHR5IHN0cmluZyBmYWlscwotICAgICAgICAgICAgICAgIHdoaWxlIChlID4gcCkgewotICAgICAgICAgICAgICAgICAgICBlLS07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqZSA+PSAnMCcgJiYgKmUgPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgYmVnaW5zX3dpdGhfZGlnaXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoKmUgPj0gJ2EnICYmICplIDw9ICd6JykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgqZSA+PSAnQScgJiYgKmUgPD0gJ1onKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKCplID09ICdfJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICBiZWdpbnNfd2l0aF9kaWdpdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0dyb3VwICYmICgqZSA9PSAnLScpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqZSA9ICdfJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luc193aXRoX2RpZ2l0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlKys7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZFN0ci51bmxvY2tCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICAvLyB2ZXJpZnkgdGhhdCB3ZSBzdG9wcGVkIGJlY2F1c2Ugd2UgaGl0IGEgcGVyaW9kIG9yCi0gICAgICAgICAgICAgICAgLy8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLCBhbmQgdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAvLyBpZGVudGlmaWVyIGRpZG4ndCBiZWdpbiB3aXRoIGEgZGlnaXQuCi0gICAgICAgICAgICAgICAgaWYgKGJlZ2luc193aXRoX2RpZ2l0IHx8IChlICE9IHAgJiYgKihlLTEpICE9ICcuJykpIHsKLSAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6JWQ6IFBlcm1pc3Npb24gbmFtZSA8JXM+IGlzIG5vdCBhIHZhbGlkIEphdmEgc3ltYm9sXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdFBhdGguc3RyaW5nKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSwgaWRTdHIuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3ltcy0+YWRkU3RyaW5nU3ltYm9sKFN0cmluZzgoZSksIGlkU3RyLCBzcmNQb3MpOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBjbXQgPSBibG9jay5nZXRDb21tZW50KCZsZW4pOwotICAgICAgICAgICAgICAgIGlmIChjbXQgIT0gTlVMTCAmJiAqY210ICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIkNvbW1lbnQgb2YgJXM6ICVzXG4iLCBTdHJpbmc4KGUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgU3RyaW5nOChjbXQpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgc3ltcy0+YXBwZW5kQ29tbWVudChTdHJpbmc4KGUpLCBTdHJpbmcxNihjbXQpLCBzcmNQb3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJObyBjb21tZW50IGZvciAlc1xuIiwgU3RyaW5nOChlKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN5bXMtPm1ha2VTeW1ib2xQdWJsaWMoU3RyaW5nOChlKSwgc3JjUG9zKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHVzZXNfcGVybWlzc2lvbjE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLCBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIsIHBhY2thZ2VJZGVudENoYXJzLCB0cnVlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBpbnN0cnVtZW50YXRpb24xNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCBjbGFzc0lkZW50Q2hhcnMsIHRydWUpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJ0YXJnZXRQYWNrYWdlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VJZGVudENoYXJzLCB0cnVlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBhcHBsaWNhdGlvbjE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLCBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIsIGNsYXNzSWRlbnRDaGFycywgZmFsc2UpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJwZXJtaXNzaW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VJZGVudENoYXJzLCBmYWxzZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgInByb2Nlc3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0lkZW50Q2hhcnMsIGZhbHNlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAidGFza0FmZmluaXR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJZGVudENoYXJzLCBmYWxzZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgcHJvdmlkZXIxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCBjbGFzc0lkZW50Q2hhcnMsIHRydWUpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJhdXRob3JpdGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdGllc0lkZW50Q2hhcnMsIHRydWUpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJwZXJtaXNzaW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VJZGVudENoYXJzLCBmYWxzZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgInByb2Nlc3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0lkZW50Q2hhcnMsIGZhbHNlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBzZXJ2aWNlMTYuc3RyaW5nKCkpID09IDAKLSAgICAgICAgICAgICAgICAgICAgICAgfHwgc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHJlY2VpdmVyMTYuc3RyaW5nKCkpID09IDAKLSAgICAgICAgICAgICAgICAgICAgICAgfHwgc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGFjdGl2aXR5MTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiwgY2xhc3NJZGVudENoYXJzLCB0cnVlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAicGVybWlzc2lvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlSWRlbnRDaGFycywgZmFsc2UpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJwcm9jZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJZGVudENoYXJzLCBmYWxzZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgInRhc2tBZmZpbml0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSWRlbnRDaGFycywgZmFsc2UpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGFjdGlvbjE2LnN0cmluZygpKSA9PSAwCi0gICAgICAgICAgICAgICAgICAgICAgIHx8IHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBjYXRlZ29yeTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAibmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlSWRlbnRDaGFycywgdHJ1ZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgZGF0YTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAibWltZVR5cGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZUlkZW50Q2hhcnMsIHRydWUpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJzY2hlbWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1lSWRlbnRDaGFycywgdHJ1ZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlc0ZpbGUgIT0gTlVMTCkgewotICAgICAgICAvLyBUaGVzZSByZXNvdXJjZXMgYXJlIG5vdyBjb25zaWRlcmVkIHRvIGJlIGEgcGFydCBvZiB0aGUgaW5jbHVkZWQKLSAgICAgICAgLy8gcmVzb3VyY2VzLCBmb3Igb3RoZXJzIHRvIHJlZmVyZW5jZS4KLSAgICAgICAgZXJyID0gYXNzZXRzLT5hZGRJbmNsdWRlZFJlc291cmNlcyhyZXNGaWxlKTsKLSAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBVbmFibGUgdG8gcGFyc2UgZ2VuZXJhdGVkIHJlc291cmNlcywgYWJvcnRpbmcuXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciogZ2V0SW5kZW50U3BhY2UoaW50IGluZGVudCkKLXsKLXN0YXRpYyBjb25zdCBjaGFyIHdoaXRlc3BhY2VbXSA9Ci0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsKLQotICAgIHJldHVybiB3aGl0ZXNwYWNlICsgc2l6ZW9mKHdoaXRlc3BhY2UpIC0gMSAtIGluZGVudCo0OwotfQotCi1zdGF0aWMgU3RyaW5nOCBmbGF0dGVuU3ltYm9sKGNvbnN0IFN0cmluZzgmIHN5bWJvbCkgewotICAgIFN0cmluZzggcmVzdWx0KHN5bWJvbCk7Ci0gICAgc3NpemVfdCBmaXJzdDsKLSAgICBpZiAoKGZpcnN0ID0gc3ltYm9sLmZpbmQoIjoiLCAwKSkgPj0gMAotICAgICAgICAgICAgfHwgKGZpcnN0ID0gc3ltYm9sLmZpbmQoIi4iLCAwKSkgPj0gMCkgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IHN5bWJvbC5zaXplKCk7Ci0gICAgICAgIGNoYXIqIGJ1ZiA9IHJlc3VsdC5sb2NrQnVmZmVyKHNpemUpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3Q7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChidWZbaV0gPT0gJzonIHx8IGJ1ZltpXSA9PSAnLicpIHsKLSAgICAgICAgICAgICAgICBidWZbaV0gPSAnXyc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0LnVubG9ja0J1ZmZlcihzaXplKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFN0cmluZzggZ2V0U3ltYm9sUGFja2FnZShjb25zdCBTdHJpbmc4JiBzeW1ib2wsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsIGJvb2wgcHViKSB7Ci0gICAgc3NpemVfdCBjb2xvbiA9IHN5bWJvbC5maW5kKCI6IiwgMCk7Ci0gICAgaWYgKGNvbG9uID49IDApIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZzgoc3ltYm9sLnN0cmluZygpLCBjb2xvbik7Ci0gICAgfQotICAgIHJldHVybiBwdWIgPyBhc3NldHMtPmdldFBhY2thZ2UoKSA6IGFzc2V0cy0+Z2V0U3ltYm9sc1ByaXZhdGVQYWNrYWdlKCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmc4IGdldFN5bWJvbE5hbWUoY29uc3QgU3RyaW5nOCYgc3ltYm9sKSB7Ci0gICAgc3NpemVfdCBjb2xvbiA9IHN5bWJvbC5maW5kKCI6IiwgMCk7Ci0gICAgaWYgKGNvbG9uID49IDApIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZzgoc3ltYm9sLnN0cmluZygpICsgY29sb24gKyAxKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN5bWJvbDsKLX0KLQotc3RhdGljIFN0cmluZzE2IGdldEF0dHJpYnV0ZUNvbW1lbnQoY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiogb3V0VHlwZUNvbW1lbnQgPSBOVUxMKQotewotICAgIHNwPEFhcHRTeW1ib2xzPiBhc3ltID0gYXNzZXRzLT5nZXRTeW1ib2xzRm9yKFN0cmluZzgoIlIiKSk7Ci0gICAgaWYgKGFzeW0gIT0gTlVMTCkgewotICAgICAgICAvL3ByaW50ZigiR290IFIgc3ltYm9scyFcbiIpOwotICAgICAgICBhc3ltID0gYXN5bS0+Z2V0TmVzdGVkU3ltYm9scygpLnZhbHVlRm9yKFN0cmluZzgoImF0dHIiKSk7Ci0gICAgICAgIGlmIChhc3ltICE9IE5VTEwpIHsKLSAgICAgICAgICAgIC8vcHJpbnRmKCJHb3QgYXR0cnMgc3ltYm9scyEgY29tbWVudCAlcz0lc1xuIiwKLSAgICAgICAgICAgIC8vICAgICBuYW1lLnN0cmluZygpLCBTdHJpbmc4KGFzeW0tPmdldENvbW1lbnQobmFtZSkpLnN0cmluZygpKTsKLSAgICAgICAgICAgIGlmIChvdXRUeXBlQ29tbWVudCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgKm91dFR5cGVDb21tZW50ID0gYXN5bS0+Z2V0VHlwZUNvbW1lbnQobmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXN5bS0+Z2V0Q29tbWVudChuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gU3RyaW5nMTYoKTsKLX0KLQotc3RhdGljIHN0YXR1c190IHdyaXRlTGF5b3V0Q2xhc3NlcygKLSAgICBGSUxFKiBmcCwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICBjb25zdCBzcDxBYXB0U3ltYm9scz4mIHN5bWJvbHMsIGludCBpbmRlbnQsIGJvb2wgaW5jbHVkZVByaXZhdGUpCi17Ci0gICAgY29uc3QgY2hhciogaW5kZW50U3RyID0gZ2V0SW5kZW50U3BhY2UoaW5kZW50KTsKLSAgICBpZiAoIWluY2x1ZGVQcml2YXRlKSB7Ci0gICAgICAgIGZwcmludGYoZnAsICIlcy8qKiBAZG9jb25seSAqL1xuIiwgaW5kZW50U3RyKTsKLSAgICB9Ci0gICAgZnByaW50ZihmcCwgIiVzcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBzdHlsZWFibGUge1xuIiwgaW5kZW50U3RyKTsKLSAgICBpbmRlbnQrKzsKLQotICAgIFN0cmluZzE2IGF0dHIxNigiYXR0ciIpOwotICAgIFN0cmluZzE2IHBhY2thZ2UxNihhc3NldHMtPmdldFBhY2thZ2UoKSk7Ci0KLSAgICBpbmRlbnRTdHIgPSBnZXRJbmRlbnRTcGFjZShpbmRlbnQpOwotICAgIGJvb2wgaGFzRXJyb3JzID0gZmFsc2U7Ci0KLSAgICBzaXplX3QgaTsKLSAgICBzaXplX3QgTiA9IHN5bWJvbHMtPmdldE5lc3RlZFN5bWJvbHMoKS5zaXplKCk7Ci0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHNwPEFhcHRTeW1ib2xzPiBuc3ltYm9scyA9IHN5bWJvbHMtPmdldE5lc3RlZFN5bWJvbHMoKS52YWx1ZUF0KGkpOwotICAgICAgICBTdHJpbmc4IHJlYWxDbGFzc05hbWUoc3ltYm9scy0+Z2V0TmVzdGVkU3ltYm9scygpLmtleUF0KGkpKTsKLSAgICAgICAgU3RyaW5nOCBuY2xhc3NOYW1lKGZsYXR0ZW5TeW1ib2wocmVhbENsYXNzTmFtZSkpOwotCi0gICAgICAgIFNvcnRlZFZlY3Rvcjx1aW50MzJfdD4gaWRlbnRzOwotICAgICAgICBWZWN0b3I8dWludDMyX3Q+IG9yaWdPcmRlcjsKLSAgICAgICAgVmVjdG9yPGJvb2w+IHB1YmxpY0ZsYWdzOwotCi0gICAgICAgIHNpemVfdCBhOwotICAgICAgICBzaXplX3QgTkEgPSBuc3ltYm9scy0+Z2V0U3ltYm9scygpLnNpemUoKTsKLSAgICAgICAgZm9yIChhPTA7IGE8TkE7IGErKykgewotICAgICAgICAgICAgY29uc3QgQWFwdFN5bWJvbEVudHJ5JiBzeW0obnN5bWJvbHMtPmdldFN5bWJvbHMoKS52YWx1ZUF0KGEpKTsKLSAgICAgICAgICAgIGludDMyX3QgY29kZSA9IHN5bS50eXBlQ29kZSA9PSBBYXB0U3ltYm9sRW50cnk6OlRZUEVfSU5UMzIKLSAgICAgICAgICAgICAgICAgICAgPyBzeW0uaW50MzJWYWwgOiAwOwotICAgICAgICAgICAgYm9vbCBpc1B1YmxpYyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoY29kZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgbmFtZTE2KHN5bS5uYW1lKTsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCB0eXBlU3BlY0ZsYWdzOwotICAgICAgICAgICAgICAgIGNvZGUgPSBhc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkuaWRlbnRpZmllckZvck5hbWUoCi0gICAgICAgICAgICAgICAgICAgIG5hbWUxNi5zdHJpbmcoKSwgbmFtZTE2LnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgYXR0cjE2LnN0cmluZygpLCBhdHRyMTYuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICBwYWNrYWdlMTYuc3RyaW5nKCksIHBhY2thZ2UxNi5zaXplKCksICZ0eXBlU3BlY0ZsYWdzKTsKLSAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IEluIDxkZWNsYXJlLXN0eWxlYWJsZT4gJXMsIHVuYWJsZSB0byBmaW5kIGF0dHJpYnV0ZSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY2xhc3NOYW1lLnN0cmluZygpLCBzeW0ubmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlzUHVibGljID0gKHR5cGVTcGVjRmxhZ3MmUmVzVGFibGVfdHlwZVNwZWM6OlNQRUNfUFVCTElDKSAhPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWRlbnRzLmFkZChjb2RlKTsKLSAgICAgICAgICAgIG9yaWdPcmRlci5hZGQoY29kZSk7Ci0gICAgICAgICAgICBwdWJsaWNGbGFncy5hZGQoaXNQdWJsaWMpOwotICAgICAgICB9Ci0KLSAgICAgICAgTkEgPSBpZGVudHMuc2l6ZSgpOwotCi0gICAgICAgIGJvb2wgZGVwcmVjYXRlZCA9IGZhbHNlOwotCi0gICAgICAgIFN0cmluZzE2IGNvbW1lbnQgPSBzeW1ib2xzLT5nZXRDb21tZW50KHJlYWxDbGFzc05hbWUpOwotICAgICAgICBmcHJpbnRmKGZwLCAiJXMvKiogIiwgaW5kZW50U3RyKTsKLSAgICAgICAgaWYgKGNvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgU3RyaW5nOCBjbXQoY29tbWVudCk7Ci0gICAgICAgICAgICBmcHJpbnRmKGZwLCAiJXNcbiIsIGNtdC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoc3Ryc3RyKGNtdC5zdHJpbmcoKSwgIkBkZXByZWNhdGVkIikgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZnByaW50ZihmcCwgIkF0dHJpYnV0ZXMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGEgJXMuXG4iLCBuY2xhc3NOYW1lLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBib29sIGhhc1RhYmxlID0gZmFsc2U7Ci0gICAgICAgIGZvciAoYT0wOyBhPE5BOyBhKyspIHsKLSAgICAgICAgICAgIHNzaXplX3QgcG9zID0gaWRlbnRzLmluZGV4T2Yob3JpZ09yZGVyLml0ZW1BdChhKSk7Ci0gICAgICAgICAgICBpZiAocG9zID49IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoIWhhc1RhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc1RhYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgICA8cD5JbmNsdWRlcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6PC9wPlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAgIDx0YWJsZT5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgICA8Y29sZ3JvdXAgYWxpZ249XCJsZWZ0XCIgLz5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgICA8Y29sZ3JvdXAgYWxpZ249XCJsZWZ0XCIgLz5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgICA8dHI+PHRoPkF0dHJpYnV0ZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRTdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50U3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudFN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRTdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50U3RyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29uc3QgQWFwdFN5bWJvbEVudHJ5JiBzeW0gPSBuc3ltYm9scy0+Z2V0U3ltYm9scygpLnZhbHVlQXQoYSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwdWJsaWNGbGFncy5pdGVtQXQoYSkgJiYgIWluY2x1ZGVQcml2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWU4KHN5bS5uYW1lKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcxNiBjb21tZW50KHN5bS5jb21tZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoY29tbWVudC5zaXplKCkgPD0gMCkgewotICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZ2V0QXR0cmlidXRlQ29tbWVudChhc3NldHMsIG5hbWU4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogcCA9IGNvbW1lbnQuc3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcCAhPSAwICYmICpwICE9ICcuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwID09ICd7JykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcCAhPSAwICYmICpwICE9ICd9JykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCpwID09ICcuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBTdHJpbmcxNihjb21tZW50LnN0cmluZygpLCBwLWNvbW1lbnQuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiJXMgICA8dHI+PHRkPjxjb2RlPntAbGluayAjJXNfJXMgJXM6JXN9PC9jb2RlPjwvdGQ+PHRkPiVzPC90ZD48L3RyPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudFN0ciwgbmNsYXNzTmFtZS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5TeW1ib2wobmFtZTgpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3ltYm9sUGFja2FnZShuYW1lOCwgYXNzZXRzLCB0cnVlKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFN5bWJvbE5hbWUobmFtZTgpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChjb21tZW50KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhhc1RhYmxlKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKGZwLCAiJXMgICA8L3RhYmxlPlxuIiwgaW5kZW50U3RyKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGE9MDsgYTxOQTsgYSsrKSB7Ci0gICAgICAgICAgICBzc2l6ZV90IHBvcyA9IGlkZW50cy5pbmRleE9mKG9yaWdPcmRlci5pdGVtQXQoYSkpOwotICAgICAgICAgICAgaWYgKHBvcyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQWFwdFN5bWJvbEVudHJ5JiBzeW0gPSBuc3ltYm9scy0+Z2V0U3ltYm9scygpLnZhbHVlQXQoYSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwdWJsaWNGbGFncy5pdGVtQXQoYSkgJiYgIWluY2x1ZGVQcml2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiJXMgICBAc2VlICMlc18lc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudFN0ciwgbmNsYXNzTmFtZS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5TeW1ib2woc3ltLm5hbWUpLnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKGZwLCAiJXMgKi9cbiIsIGdldEluZGVudFNwYWNlKGluZGVudCkpOwotCi0gICAgICAgIGlmIChkZXByZWNhdGVkKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKGZwLCAiJXNARGVwcmVjYXRlZFxuIiwgaW5kZW50U3RyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZwcmludGYoZnAsCi0gICAgICAgICAgICAgICAgIiVzcHVibGljIHN0YXRpYyBmaW5hbCBpbnRbXSAlcyA9IHtcbiIKLSAgICAgICAgICAgICAgICAiJXMiLAotICAgICAgICAgICAgICAgIGluZGVudFN0ciwgbmNsYXNzTmFtZS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBnZXRJbmRlbnRTcGFjZShpbmRlbnQrMSkpOwotCi0gICAgICAgIGZvciAoYT0wOyBhPE5BOyBhKyspIHsKLSAgICAgICAgICAgIGlmIChhICE9IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoKGEmMykgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiLFxuJXMiLCBnZXRJbmRlbnRTcGFjZShpbmRlbnQrMSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIsICIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZwcmludGYoZnAsICIweCUwOHgiLCBpZGVudHNbYV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnByaW50ZihmcCwgIlxuJXN9O1xuIiwgaW5kZW50U3RyKTsKLQotICAgICAgICBmb3IgKGE9MDsgYTxOQTsgYSsrKSB7Ci0gICAgICAgICAgICBzc2l6ZV90IHBvcyA9IGlkZW50cy5pbmRleE9mKG9yaWdPcmRlci5pdGVtQXQoYSkpOwotICAgICAgICAgICAgaWYgKHBvcyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQWFwdFN5bWJvbEVudHJ5JiBzeW0gPSBuc3ltYm9scy0+Z2V0U3ltYm9scygpLnZhbHVlQXQoYSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwdWJsaWNGbGFncy5pdGVtQXQoYSkgJiYgIWluY2x1ZGVQcml2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWU4KHN5bS5uYW1lKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcxNiBjb21tZW50KHN5bS5jb21tZW50KTsKLSAgICAgICAgICAgICAgICBTdHJpbmcxNiB0eXBlQ29tbWVudDsKLSAgICAgICAgICAgICAgICBpZiAoY29tbWVudC5zaXplKCkgPD0gMCkgewotICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZ2V0QXR0cmlidXRlQ29tbWVudChhc3NldHMsIG5hbWU4LCAmdHlwZUNvbW1lbnQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZUNvbW1lbnQoYXNzZXRzLCBuYW1lOCwgJnR5cGVDb21tZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB1aW50MzJfdCB0eXBlU3BlY0ZsYWdzID0gMDsKLSAgICAgICAgICAgICAgICBTdHJpbmcxNiBuYW1lMTYoc3ltLm5hbWUpOwotICAgICAgICAgICAgICAgIGFzc2V0cy0+Z2V0SW5jbHVkZWRSZXNvdXJjZXMoKS5pZGVudGlmaWVyRm9yTmFtZSgKLSAgICAgICAgICAgICAgICAgICAgbmFtZTE2LnN0cmluZygpLCBuYW1lMTYuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICBhdHRyMTYuc3RyaW5nKCksIGF0dHIxNi5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgIHBhY2thZ2UxNi5zdHJpbmcoKSwgcGFja2FnZTE2LnNpemUoKSwgJnR5cGVTcGVjRmxhZ3MpOwotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCIlczolcy8lczogMHglMDh4XG4iLCBTdHJpbmc4KHBhY2thZ2UxNikuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgLy8gICAgU3RyaW5nOChhdHRyMTYpLnN0cmluZygpLCBTdHJpbmc4KG5hbWUxNikuc3RyaW5nKCksIHR5cGVTcGVjRmxhZ3MpOwotICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgcHViID0gKHR5cGVTcGVjRmxhZ3MmUmVzVGFibGVfdHlwZVNwZWM6OlNQRUNfUFVCTElDKSAhPSAwOwotCi0gICAgICAgICAgICAgICAgYm9vbCBkZXByZWNhdGVkID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiJXMvKipcbiIsIGluZGVudFN0cik7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IGNtdChjb21tZW50KTsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzICA8cD5cbiVzICBAYXR0ciBkZXNjcmlwdGlvblxuIiwgaW5kZW50U3RyLCBpbmRlbnRTdHIpOwotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiJXMgICVzXG4iLCBpbmRlbnRTdHIsIGNtdC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJzdHIoY210LnN0cmluZygpLCAiQGRlcHJlY2F0ZWQiKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICA8cD5UaGlzIHN5bWJvbCBpcyB0aGUgb2Zmc2V0IHdoZXJlIHRoZSB7QGxpbmsgJXMuUi5hdHRyIyVzfVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAgYXR0cmlidXRlJ3MgdmFsdWUgY2FuIGJlIGZvdW5kIGluIHRoZSB7QGxpbmsgIyVzfSBhcnJheS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50U3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFN5bWJvbFBhY2thZ2UobmFtZTgsIGFzc2V0cywgcHViKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTeW1ib2xOYW1lKG5hbWU4KS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRTdHIsIG5jbGFzc05hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodHlwZUNvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IGNtdCh0eXBlQ29tbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICJcblxuJXMgICVzXG4iLCBpbmRlbnRTdHIsIGNtdC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJzdHIoY210LnN0cmluZygpLCAiQGRlcHJlY2F0ZWQiKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29tbWVudC5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwdWIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAgPHA+VGhpcyBjb3JyZXNwb25kcyB0byB0aGUgZ2xvYmFsIGF0dHJpYnV0ZVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIHJlc291cmNlIHN5bWJvbCB7QGxpbmsgJXMuUi5hdHRyIyVzfS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudFN0ciwgaW5kZW50U3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTeW1ib2xQYWNrYWdlKG5hbWU4LCBhc3NldHMsIHRydWUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTeW1ib2xOYW1lKG5hbWU4KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIDxwPlRoaXMgaXMgYSBwcml2YXRlIHN5bWJvbC5cbiIsIGluZGVudFN0cik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzICBAYXR0ciBuYW1lICVzOiVzXG4iLCBpbmRlbnRTdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRTeW1ib2xQYWNrYWdlKG5hbWU4LCBhc3NldHMsIHB1Yikuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRTeW1ib2xOYW1lKG5hbWU4KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzKi9cbiIsIGluZGVudFN0cik7Ci0gICAgICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzQERlcHJlY2F0ZWRcbiIsIGluZGVudFN0cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZwcmludGYoZnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXNwdWJsaWMgc3RhdGljIGZpbmFsIGludCAlc18lcyA9ICVkO1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudFN0ciwgbmNsYXNzTmFtZS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5TeW1ib2wobmFtZTgpLnN0cmluZygpLCAoaW50KXBvcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbmRlbnQtLTsKLSAgICBmcHJpbnRmKGZwLCAiJXN9O1xuIiwgZ2V0SW5kZW50U3BhY2UoaW5kZW50KSk7Ci0gICAgcmV0dXJuIGhhc0Vycm9ycyA/IFVOS05PV05fRVJST1IgOiBOT19FUlJPUjsKLX0KLQotc3RhdGljIHN0YXR1c190IHdyaXRlVGV4dExheW91dENsYXNzZXMoCi0gICAgRklMRSogZnAsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgY29uc3Qgc3A8QWFwdFN5bWJvbHM+JiBzeW1ib2xzLCBib29sIGluY2x1ZGVQcml2YXRlKQotewotICAgIFN0cmluZzE2IGF0dHIxNigiYXR0ciIpOwotICAgIFN0cmluZzE2IHBhY2thZ2UxNihhc3NldHMtPmdldFBhY2thZ2UoKSk7Ci0KLSAgICBib29sIGhhc0Vycm9ycyA9IGZhbHNlOwotCi0gICAgc2l6ZV90IGk7Ci0gICAgc2l6ZV90IE4gPSBzeW1ib2xzLT5nZXROZXN0ZWRTeW1ib2xzKCkuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBzcDxBYXB0U3ltYm9scz4gbnN5bWJvbHMgPSBzeW1ib2xzLT5nZXROZXN0ZWRTeW1ib2xzKCkudmFsdWVBdChpKTsKLSAgICAgICAgU3RyaW5nOCByZWFsQ2xhc3NOYW1lKHN5bWJvbHMtPmdldE5lc3RlZFN5bWJvbHMoKS5rZXlBdChpKSk7Ci0gICAgICAgIFN0cmluZzggbmNsYXNzTmFtZShmbGF0dGVuU3ltYm9sKHJlYWxDbGFzc05hbWUpKTsKLQotICAgICAgICBTb3J0ZWRWZWN0b3I8dWludDMyX3Q+IGlkZW50czsKLSAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBvcmlnT3JkZXI7Ci0gICAgICAgIFZlY3Rvcjxib29sPiBwdWJsaWNGbGFnczsKLQotICAgICAgICBzaXplX3QgYTsKLSAgICAgICAgc2l6ZV90IE5BID0gbnN5bWJvbHMtPmdldFN5bWJvbHMoKS5zaXplKCk7Ci0gICAgICAgIGZvciAoYT0wOyBhPE5BOyBhKyspIHsKLSAgICAgICAgICAgIGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgc3ltKG5zeW1ib2xzLT5nZXRTeW1ib2xzKCkudmFsdWVBdChhKSk7Ci0gICAgICAgICAgICBpbnQzMl90IGNvZGUgPSBzeW0udHlwZUNvZGUgPT0gQWFwdFN5bWJvbEVudHJ5OjpUWVBFX0lOVDMyCi0gICAgICAgICAgICAgICAgICAgID8gc3ltLmludDMyVmFsIDogMDsKLSAgICAgICAgICAgIGJvb2wgaXNQdWJsaWMgPSB0cnVlOwotICAgICAgICAgICAgaWYgKGNvZGUgPT0gMCkgewotICAgICAgICAgICAgICAgIFN0cmluZzE2IG5hbWUxNihzeW0ubmFtZSk7Ci0gICAgICAgICAgICAgICAgdWludDMyX3QgdHlwZVNwZWNGbGFnczsKLSAgICAgICAgICAgICAgICBjb2RlID0gYXNzZXRzLT5nZXRJbmNsdWRlZFJlc291cmNlcygpLmlkZW50aWZpZXJGb3JOYW1lKAotICAgICAgICAgICAgICAgICAgICBuYW1lMTYuc3RyaW5nKCksIG5hbWUxNi5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgIGF0dHIxNi5zdHJpbmcoKSwgYXR0cjE2LnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgcGFja2FnZTE2LnN0cmluZygpLCBwYWNrYWdlMTYuc2l6ZSgpLCAmdHlwZVNwZWNGbGFncyk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBJbiA8ZGVjbGFyZS1zdHlsZWFibGU+ICVzLCB1bmFibGUgdG8gZmluZCBhdHRyaWJ1dGUgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNsYXNzTmFtZS5zdHJpbmcoKSwgc3ltLm5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpc1B1YmxpYyA9ICh0eXBlU3BlY0ZsYWdzJlJlc1RhYmxlX3R5cGVTcGVjOjpTUEVDX1BVQkxJQykgIT0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlkZW50cy5hZGQoY29kZSk7Ci0gICAgICAgICAgICBvcmlnT3JkZXIuYWRkKGNvZGUpOwotICAgICAgICAgICAgcHVibGljRmxhZ3MuYWRkKGlzUHVibGljKTsKLSAgICAgICAgfQotCi0gICAgICAgIE5BID0gaWRlbnRzLnNpemUoKTsKLQotICAgICAgICBmcHJpbnRmKGZwLCAiaW50W10gc3R5bGVhYmxlICVzIHsiLCBuY2xhc3NOYW1lLnN0cmluZygpKTsKLQotICAgICAgICBmb3IgKGE9MDsgYTxOQTsgYSsrKSB7Ci0gICAgICAgICAgICBpZiAoYSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZwcmludGYoZnAsICIgMHglMDh4IiwgaWRlbnRzW2FdKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZwcmludGYoZnAsICIgfVxuIik7Ci0KLSAgICAgICAgZm9yIChhPTA7IGE8TkE7IGErKykgewotICAgICAgICAgICAgc3NpemVfdCBwb3MgPSBpZGVudHMuaW5kZXhPZihvcmlnT3JkZXIuaXRlbUF0KGEpKTsKLSAgICAgICAgICAgIGlmIChwb3MgPj0gMCkgewotICAgICAgICAgICAgICAgIGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgc3ltID0gbnN5bWJvbHMtPmdldFN5bWJvbHMoKS52YWx1ZUF0KGEpOwotICAgICAgICAgICAgICAgIGlmICghcHVibGljRmxhZ3MuaXRlbUF0KGEpICYmICFpbmNsdWRlUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lOChzeW0ubmFtZSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgY29tbWVudChzeW0uY29tbWVudCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgdHlwZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuc2l6ZSgpIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGdldEF0dHJpYnV0ZUNvbW1lbnQoYXNzZXRzLCBuYW1lOCwgJnR5cGVDb21tZW50KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBnZXRBdHRyaWJ1dGVDb21tZW50KGFzc2V0cywgbmFtZTgsICZ0eXBlQ29tbWVudCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdWludDMyX3QgdHlwZVNwZWNGbGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgbmFtZTE2KHN5bS5uYW1lKTsKLSAgICAgICAgICAgICAgICBhc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkuaWRlbnRpZmllckZvck5hbWUoCi0gICAgICAgICAgICAgICAgICAgIG5hbWUxNi5zdHJpbmcoKSwgbmFtZTE2LnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgYXR0cjE2LnN0cmluZygpLCBhdHRyMTYuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICBwYWNrYWdlMTYuc3RyaW5nKCksIHBhY2thZ2UxNi5zaXplKCksICZ0eXBlU3BlY0ZsYWdzKTsKLSAgICAgICAgICAgICAgICAvL3ByaW50ZigiJXM6JXMvJXM6IDB4JTA4eFxuIiwgU3RyaW5nOChwYWNrYWdlMTYpLnN0cmluZygpLAotICAgICAgICAgICAgICAgIC8vICAgIFN0cmluZzgoYXR0cjE2KS5zdHJpbmcoKSwgU3RyaW5nOChuYW1lMTYpLnN0cmluZygpLCB0eXBlU3BlY0ZsYWdzKTsKLSAgICAgICAgICAgICAgICBjb25zdCBib29sIHB1YiA9ICh0eXBlU3BlY0ZsYWdzJlJlc1RhYmxlX3R5cGVTcGVjOjpTUEVDX1BVQkxJQykgIT0gMDsKLQotICAgICAgICAgICAgICAgIGZwcmludGYoZnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaW50IHN0eWxlYWJsZSAlc18lcyAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5jbGFzc05hbWUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGF0dGVuU3ltYm9sKG5hbWU4KS5zdHJpbmcoKSwgKGludClwb3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhc0Vycm9ycyA/IFVOS05PV05fRVJST1IgOiBOT19FUlJPUjsKLX0KLQotc3RhdGljIHN0YXR1c190IHdyaXRlU3ltYm9sQ2xhc3MoCi0gICAgRklMRSogZnAsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsIGJvb2wgaW5jbHVkZVByaXZhdGUsCi0gICAgY29uc3Qgc3A8QWFwdFN5bWJvbHM+JiBzeW1ib2xzLCBjb25zdCBTdHJpbmc4JiBjbGFzc05hbWUsIGludCBpbmRlbnQsCi0gICAgYm9vbCBub25Db25zdGFudElkKQotewotICAgIGZwcmludGYoZnAsICIlc3B1YmxpYyAlc2ZpbmFsIGNsYXNzICVzIHtcbiIsCi0gICAgICAgICAgICBnZXRJbmRlbnRTcGFjZShpbmRlbnQpLAotICAgICAgICAgICAgaW5kZW50ICE9IDAgPyAic3RhdGljICIgOiAiIiwgY2xhc3NOYW1lLnN0cmluZygpKTsKLSAgICBpbmRlbnQrKzsKLQotICAgIHNpemVfdCBpOwotICAgIHN0YXR1c190IGVyciA9IE5PX0VSUk9SOwotCi0gICAgY29uc3QgY2hhciAqIGlkX2Zvcm1hdCA9IG5vbkNvbnN0YW50SWQgPwotICAgICAgICAgICAgIiVzcHVibGljIHN0YXRpYyBpbnQgJXM9MHglMDh4O1xuIiA6Ci0gICAgICAgICAgICAiJXNwdWJsaWMgc3RhdGljIGZpbmFsIGludCAlcz0weCUwOHg7XG4iOwotCi0gICAgc2l6ZV90IE4gPSBzeW1ib2xzLT5nZXRTeW1ib2xzKCkuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBBYXB0U3ltYm9sRW50cnkmIHN5bSA9IHN5bWJvbHMtPmdldFN5bWJvbHMoKS52YWx1ZUF0KGkpOwotICAgICAgICBpZiAoc3ltLnR5cGVDb2RlICE9IEFhcHRTeW1ib2xFbnRyeTo6VFlQRV9JTlQzMikgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFhc3NldHMtPmlzSmF2YVN5bWJvbChzeW0sIGluY2x1ZGVQcml2YXRlKSkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nOCBuYW1lOChzeW0ubmFtZSk7Ci0gICAgICAgIFN0cmluZzE2IGNvbW1lbnQoc3ltLmNvbW1lbnQpOwotICAgICAgICBib29sIGhhdmVDb21tZW50ID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgZGVwcmVjYXRlZCA9IGZhbHNlOwotICAgICAgICBpZiAoY29tbWVudC5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBoYXZlQ29tbWVudCA9IHRydWU7Ci0gICAgICAgICAgICBTdHJpbmc4IGNtdChjb21tZW50KTsKLSAgICAgICAgICAgIGZwcmludGYoZnAsCi0gICAgICAgICAgICAgICAgICAgICIlcy8qKiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgZ2V0SW5kZW50U3BhY2UoaW5kZW50KSwgY210LnN0cmluZygpKTsKLSAgICAgICAgICAgIGlmIChzdHJzdHIoY210LnN0cmluZygpLCAiQGRlcHJlY2F0ZWQiKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZGVwcmVjYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc3ltLmlzUHVibGljICYmICFpbmNsdWRlUHJpdmF0ZSkgewotICAgICAgICAgICAgc3ltLnNvdXJjZVBvcy53YXJuaW5nKCJObyBjb21tZW50IGZvciBwdWJsaWMgc3ltYm9sICVzOiVzLyVzIiwKLSAgICAgICAgICAgICAgICBhc3NldHMtPmdldFBhY2thZ2UoKS5zdHJpbmcoKSwgY2xhc3NOYW1lLnN0cmluZygpLAotICAgICAgICAgICAgICAgIFN0cmluZzgoc3ltLm5hbWUpLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcxNiB0eXBlQ29tbWVudChzeW0udHlwZUNvbW1lbnQpOwotICAgICAgICBpZiAodHlwZUNvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgU3RyaW5nOCBjbXQodHlwZUNvbW1lbnQpOwotICAgICAgICAgICAgaWYgKCFoYXZlQ29tbWVudCkgewotICAgICAgICAgICAgICAgIGhhdmVDb21tZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLAotICAgICAgICAgICAgICAgICAgICAgICAgIiVzLyoqICVzXG4iLCBnZXRJbmRlbnRTcGFjZShpbmRlbnQpLCBjbXQuc3RyaW5nKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLAotICAgICAgICAgICAgICAgICAgICAgICAgIiVzICVzXG4iLCBnZXRJbmRlbnRTcGFjZShpbmRlbnQpLCBjbXQuc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0cnN0cihjbXQuc3RyaW5nKCksICJAZGVwcmVjYXRlZCIpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBkZXByZWNhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoaGF2ZUNvbW1lbnQpIHsKLSAgICAgICAgICAgIGZwcmludGYoZnAsIiVzICovXG4iLCBnZXRJbmRlbnRTcGFjZShpbmRlbnQpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZGVwcmVjYXRlZCkgewotICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzQERlcHJlY2F0ZWRcbiIsIGdldEluZGVudFNwYWNlKGluZGVudCkpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoZnAsIGlkX2Zvcm1hdCwKLSAgICAgICAgICAgICAgICBnZXRJbmRlbnRTcGFjZShpbmRlbnQpLAotICAgICAgICAgICAgICAgIGZsYXR0ZW5TeW1ib2wobmFtZTgpLnN0cmluZygpLCAoaW50KXN5bS5pbnQzMlZhbCk7Ci0gICAgfQotCi0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgc3ltID0gc3ltYm9scy0+Z2V0U3ltYm9scygpLnZhbHVlQXQoaSk7Ci0gICAgICAgIGlmIChzeW0udHlwZUNvZGUgIT0gQWFwdFN5bWJvbEVudHJ5OjpUWVBFX1NUUklORykgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFhc3NldHMtPmlzSmF2YVN5bWJvbChzeW0sIGluY2x1ZGVQcml2YXRlKSkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nOCBuYW1lOChzeW0ubmFtZSk7Ci0gICAgICAgIFN0cmluZzE2IGNvbW1lbnQoc3ltLmNvbW1lbnQpOwotICAgICAgICBib29sIGRlcHJlY2F0ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGNvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgU3RyaW5nOCBjbXQoY29tbWVudCk7Ci0gICAgICAgICAgICBmcHJpbnRmKGZwLAotICAgICAgICAgICAgICAgICAgICAiJXMvKiogJXNcbiIKLSAgICAgICAgICAgICAgICAgICAgICIlcyAqL1xuIiwKLSAgICAgICAgICAgICAgICAgICAgZ2V0SW5kZW50U3BhY2UoaW5kZW50KSwgY210LnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBnZXRJbmRlbnRTcGFjZShpbmRlbnQpKTsKLSAgICAgICAgICAgIGlmIChzdHJzdHIoY210LnN0cmluZygpLCAiQGRlcHJlY2F0ZWQiKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZGVwcmVjYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc3ltLmlzUHVibGljICYmICFpbmNsdWRlUHJpdmF0ZSkgewotICAgICAgICAgICAgc3ltLnNvdXJjZVBvcy53YXJuaW5nKCJObyBjb21tZW50IGZvciBwdWJsaWMgc3ltYm9sICVzOiVzLyVzIiwKLSAgICAgICAgICAgICAgICBhc3NldHMtPmdldFBhY2thZ2UoKS5zdHJpbmcoKSwgY2xhc3NOYW1lLnN0cmluZygpLAotICAgICAgICAgICAgICAgIFN0cmluZzgoc3ltLm5hbWUpLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZGVwcmVjYXRlZCkgewotICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzQERlcHJlY2F0ZWRcbiIsIGdldEluZGVudFNwYWNlKGluZGVudCkpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoZnAsICIlc3B1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nICVzPVwiJXNcIjtcbiIsCi0gICAgICAgICAgICAgICAgZ2V0SW5kZW50U3BhY2UoaW5kZW50KSwKLSAgICAgICAgICAgICAgICBmbGF0dGVuU3ltYm9sKG5hbWU4KS5zdHJpbmcoKSwgc3ltLnN0cmluZ1ZhbC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgc3A8QWFwdFN5bWJvbHM+IHN0eWxlYWJsZVN5bWJvbHM7Ci0KLSAgICBOID0gc3ltYm9scy0+Z2V0TmVzdGVkU3ltYm9scygpLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgc3A8QWFwdFN5bWJvbHM+IG5zeW1ib2xzID0gc3ltYm9scy0+Z2V0TmVzdGVkU3ltYm9scygpLnZhbHVlQXQoaSk7Ci0gICAgICAgIFN0cmluZzggbmNsYXNzTmFtZShzeW1ib2xzLT5nZXROZXN0ZWRTeW1ib2xzKCkua2V5QXQoaSkpOwotICAgICAgICBpZiAobmNsYXNzTmFtZSA9PSAic3R5bGVhYmxlIikgewotICAgICAgICAgICAgc3R5bGVhYmxlU3ltYm9scyA9IG5zeW1ib2xzOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyID0gd3JpdGVTeW1ib2xDbGFzcyhmcCwgYXNzZXRzLCBpbmNsdWRlUHJpdmF0ZSwgbnN5bWJvbHMsIG5jbGFzc05hbWUsIGluZGVudCwgbm9uQ29uc3RhbnRJZCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzdHlsZWFibGVTeW1ib2xzICE9IE5VTEwpIHsKLSAgICAgICAgZXJyID0gd3JpdGVMYXlvdXRDbGFzc2VzKGZwLCBhc3NldHMsIHN0eWxlYWJsZVN5bWJvbHMsIGluZGVudCwgaW5jbHVkZVByaXZhdGUpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5kZW50LS07Ci0gICAgZnByaW50ZihmcCwgIiVzfVxuIiwgZ2V0SW5kZW50U3BhY2UoaW5kZW50KSk7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0aWMgc3RhdHVzX3Qgd3JpdGVUZXh0U3ltYm9sQ2xhc3MoCi0gICAgRklMRSogZnAsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsIGJvb2wgaW5jbHVkZVByaXZhdGUsCi0gICAgY29uc3Qgc3A8QWFwdFN5bWJvbHM+JiBzeW1ib2xzLCBjb25zdCBTdHJpbmc4JiBjbGFzc05hbWUpCi17Ci0gICAgc2l6ZV90IGk7Ci0gICAgc3RhdHVzX3QgZXJyID0gTk9fRVJST1I7Ci0KLSAgICBzaXplX3QgTiA9IHN5bWJvbHMtPmdldFN5bWJvbHMoKS5zaXplKCk7Ci0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgc3ltID0gc3ltYm9scy0+Z2V0U3ltYm9scygpLnZhbHVlQXQoaSk7Ci0gICAgICAgIGlmIChzeW0udHlwZUNvZGUgIT0gQWFwdFN5bWJvbEVudHJ5OjpUWVBFX0lOVDMyKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghYXNzZXRzLT5pc0phdmFTeW1ib2woc3ltLCBpbmNsdWRlUHJpdmF0ZSkpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nOCBuYW1lOChzeW0ubmFtZSk7Ci0gICAgICAgIGZwcmludGYoZnAsICJpbnQgJXMgJXMgMHglMDh4XG4iLAotICAgICAgICAgICAgICAgIGNsYXNzTmFtZS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBmbGF0dGVuU3ltYm9sKG5hbWU4KS5zdHJpbmcoKSwgKGludClzeW0uaW50MzJWYWwpOwotICAgIH0KLQotICAgIE4gPSBzeW1ib2xzLT5nZXROZXN0ZWRTeW1ib2xzKCkuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBzcDxBYXB0U3ltYm9scz4gbnN5bWJvbHMgPSBzeW1ib2xzLT5nZXROZXN0ZWRTeW1ib2xzKCkudmFsdWVBdChpKTsKLSAgICAgICAgU3RyaW5nOCBuY2xhc3NOYW1lKHN5bWJvbHMtPmdldE5lc3RlZFN5bWJvbHMoKS5rZXlBdChpKSk7Ci0gICAgICAgIGlmIChuY2xhc3NOYW1lID09ICJzdHlsZWFibGUiKSB7Ci0gICAgICAgICAgICBlcnIgPSB3cml0ZVRleHRMYXlvdXRDbGFzc2VzKGZwLCBhc3NldHMsIG5zeW1ib2xzLCBpbmNsdWRlUHJpdmF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlcnIgPSB3cml0ZVRleHRTeW1ib2xDbGFzcyhmcCwgYXNzZXRzLCBpbmNsdWRlUHJpdmF0ZSwgbnN5bWJvbHMsIG5jbGFzc05hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IHdyaXRlUmVzb3VyY2VTeW1ib2xzKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgIGNvbnN0IFN0cmluZzgmIHBhY2thZ2UsIGJvb2wgaW5jbHVkZVByaXZhdGUpCi17Ci0gICAgaWYgKCFidW5kbGUtPmdldFJDbGFzc0RpcigpKSB7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiB0ZXh0U3ltYm9sc0Rlc3QgPSBidW5kbGUtPmdldE91dHB1dFRleHRTeW1ib2xzKCk7Ci0KLSAgICBTdHJpbmc4IFIoIlIiKTsKLSAgICBjb25zdCBzaXplX3QgTiA9IGFzc2V0cy0+Z2V0U3ltYm9scygpLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHNwPEFhcHRTeW1ib2xzPiBzeW1ib2xzID0gYXNzZXRzLT5nZXRTeW1ib2xzKCkudmFsdWVBdChpKTsKLSAgICAgICAgU3RyaW5nOCBjbGFzc05hbWUoYXNzZXRzLT5nZXRTeW1ib2xzKCkua2V5QXQoaSkpOwotICAgICAgICBTdHJpbmc4IGRlc3QoYnVuZGxlLT5nZXRSQ2xhc3NEaXIoKSk7Ci0KLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0TWFrZVBhY2thZ2VEaXJzKCkpIHsKLSAgICAgICAgICAgIFN0cmluZzggcGtnKHBhY2thZ2UpOwotICAgICAgICAgICAgY29uc3QgY2hhciogbGFzdCA9IHBrZy5zdHJpbmcoKTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHMgPSBsYXN0LTE7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgICAgIGlmIChzID4gbGFzdCAmJiAoKnMgPT0gJy4nIHx8ICpzID09IDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZzggcGFydChsYXN0LCBzLWxhc3QpOwotICAgICAgICAgICAgICAgICAgICBkZXN0LmFwcGVuZFBhdGgocGFydCk7Ci0jaWZkZWYgSEFWRV9NU19DX1JVTlRJTUUKLSAgICAgICAgICAgICAgICAgICAgX21rZGlyKGRlc3Quc3RyaW5nKCkpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgbWtkaXIoZGVzdC5zdHJpbmcoKSwgU19JUlVTUnxTX0lXVVNSfFNfSVhVU1J8U19JUkdSUHxTX0lYR1JQKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBsYXN0ID0gcysxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gd2hpbGUgKCpzKTsKLSAgICAgICAgfQotICAgICAgICBkZXN0LmFwcGVuZFBhdGgoY2xhc3NOYW1lKTsKLSAgICAgICAgZGVzdC5hcHBlbmQoIi5qYXZhIik7Ci0gICAgICAgIEZJTEUqIGZwID0gZm9wZW4oZGVzdC5zdHJpbmcoKSwgIncrIik7Ci0gICAgICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBVbmFibGUgdG8gb3BlbiBjbGFzcyBmaWxlICVzOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgZGVzdC5zdHJpbmcoKSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgcHJpbnRmKCIgIFdyaXRpbmcgc3ltYm9scyBmb3IgY2xhc3MgJXMuXG4iLCBjbGFzc05hbWUuc3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnByaW50ZihmcCwKLSAgICAgICAgICAgICIvKiBBVVRPLUdFTkVSQVRFRCBGSUxFLiAgRE8gTk9UIE1PRElGWS5cbiIKLSAgICAgICAgICAgICIgKlxuIgotICAgICAgICAgICAgIiAqIFRoaXMgY2xhc3Mgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHRoZVxuIgotICAgICAgICAgICAgIiAqIGFhcHQgdG9vbCBmcm9tIHRoZSByZXNvdXJjZSBkYXRhIGl0IGZvdW5kLiAgSXRcbiIKLSAgICAgICAgICAgICIgKiBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGJ5IGhhbmQuXG4iCi0gICAgICAgICAgICAiICovXG4iCi0gICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAicGFja2FnZSAlcztcblxuIiwgcGFja2FnZS5zdHJpbmcoKSk7Ci0KLSAgICAgICAgc3RhdHVzX3QgZXJyID0gd3JpdGVTeW1ib2xDbGFzcyhmcCwgYXNzZXRzLCBpbmNsdWRlUHJpdmF0ZSwgc3ltYm9scywKLSAgICAgICAgICAgICAgICBjbGFzc05hbWUsIDAsIGJ1bmRsZS0+Z2V0Tm9uQ29uc3RhbnRJZCgpKTsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0ZXh0U3ltYm9sc0Rlc3QgIT0gTlVMTCAmJiBSID09IGNsYXNzTmFtZSkgewotICAgICAgICAgICAgU3RyaW5nOCB0ZXh0RGVzdCh0ZXh0U3ltYm9sc0Rlc3QpOwotICAgICAgICAgICAgdGV4dERlc3QuYXBwZW5kUGF0aChjbGFzc05hbWUpOwotICAgICAgICAgICAgdGV4dERlc3QuYXBwZW5kKCIudHh0Iik7Ci0KLSAgICAgICAgICAgIEZJTEUqIGZwID0gZm9wZW4odGV4dERlc3Quc3RyaW5nKCksICJ3KyIpOwotICAgICAgICAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBVbmFibGUgdG8gb3BlbiB0ZXh0IHN5bWJvbCBmaWxlICVzOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZXN0LnN0cmluZygpLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIFdyaXRpbmcgdGV4dCBzeW1ib2xzIGZvciBjbGFzcyAlcy5cbiIsIGNsYXNzTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN0YXR1c190IGVyciA9IHdyaXRlVGV4dFN5bWJvbENsYXNzKGZwLCBhc3NldHMsIGluY2x1ZGVQcml2YXRlLCBzeW1ib2xzLAotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUpOwotICAgICAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgd2Ugd2VyZSBhc2tlZCB0byBnZW5lcmF0ZSBhIGRlcGVuZGVuY3kgZmlsZSwgd2UnbGwgZ28gYWhlYWQgYW5kIGFkZCB0aGlzIFIuamF2YQotICAgICAgICAvLyBhcyBhIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jeSBmaWxlIHJpZ2h0IG5leHQgdG8gaXQuCi0gICAgICAgIGlmIChidW5kbGUtPmdldEdlbkRlcGVuZGVuY2llcygpICYmIFIgPT0gY2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICAvLyBBZGQgdGhpcyBSLmphdmEgdG8gdGhlIGRlcGVuZGVuY3kgZmlsZQotICAgICAgICAgICAgU3RyaW5nOCBkZXBlbmRlbmN5RmlsZShidW5kbGUtPmdldFJDbGFzc0RpcigpKTsKLSAgICAgICAgICAgIGRlcGVuZGVuY3lGaWxlLmFwcGVuZFBhdGgoIlIuamF2YS5kIik7Ci0KLSAgICAgICAgICAgIEZJTEUgKmZwID0gZm9wZW4oZGVwZW5kZW5jeUZpbGUuc3RyaW5nKCksICJhIik7Ci0gICAgICAgICAgICBmcHJpbnRmKGZwLCIlcyBcXFxuIiwgZGVzdC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0KLWNsYXNzIFByb2d1YXJkS2VlcFNldAotewotcHVibGljOgotICAgIC8vIHsgcnVsZSAtLT4geyBmaWxlIGxvY2F0aW9ucyB9IH0KLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBTb3J0ZWRWZWN0b3I8U3RyaW5nOD4gPiBydWxlczsKLQotICAgIHZvaWQgYWRkKGNvbnN0IFN0cmluZzgmIHJ1bGUsIGNvbnN0IFN0cmluZzgmIHdoZXJlKTsKLX07Ci0KLXZvaWQgUHJvZ3VhcmRLZWVwU2V0OjphZGQoY29uc3QgU3RyaW5nOCYgcnVsZSwgY29uc3QgU3RyaW5nOCYgd2hlcmUpCi17Ci0gICAgc3NpemVfdCBpbmRleCA9IHJ1bGVzLmluZGV4T2ZLZXkocnVsZSk7Ci0gICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICBpbmRleCA9IHJ1bGVzLmFkZChydWxlLCBTb3J0ZWRWZWN0b3I8U3RyaW5nOD4oKSk7Ci0gICAgfQotICAgIHJ1bGVzLmVkaXRWYWx1ZUF0KGluZGV4KS5hZGQod2hlcmUpOwotfQotCi12b2lkCi1hZGRQcm9ndWFyZEtlZXBSdWxlKFByb2d1YXJkS2VlcFNldCoga2VlcCwgY29uc3QgU3RyaW5nOCYgaW5DbGFzc05hbWUsCi0gICAgICAgIGNvbnN0IGNoYXIqIHBrZywgY29uc3QgU3RyaW5nOCYgc3JjTmFtZSwgaW50IGxpbmUpCi17Ci0gICAgU3RyaW5nOCBjbGFzc05hbWUoaW5DbGFzc05hbWUpOwotICAgIGlmIChwa2cgIT0gTlVMTCkgewotICAgICAgICAvLyBhc2RmICAgICAtLT4gcGFja2FnZS5hc2RmCi0gICAgICAgIC8vIC5hc2RmICAuYS5iICAtLT4gcGFja2FnZS5hc2RmIHBhY2thZ2UuYS5iCi0gICAgICAgIC8vIGFzZGYuYWRzZiAtLT4gYXNkZi5hc2RmCi0gICAgICAgIGNvbnN0IGNoYXIqIHAgPSBjbGFzc05hbWUuc3RyaW5nKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHEgPSBzdHJjaHIocCwgJy4nKTsKLSAgICAgICAgaWYgKHAgPT0gcSkgewotICAgICAgICAgICAgY2xhc3NOYW1lID0gcGtnOwotICAgICAgICAgICAgY2xhc3NOYW1lLmFwcGVuZChpbkNsYXNzTmFtZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBjbGFzc05hbWUgPSBwa2c7Ci0gICAgICAgICAgICBjbGFzc05hbWUuYXBwZW5kKCIuIik7Ci0gICAgICAgICAgICBjbGFzc05hbWUuYXBwZW5kKGluQ2xhc3NOYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZzggcnVsZSgiLWtlZXAgY2xhc3MgIik7Ci0gICAgcnVsZSArPSBjbGFzc05hbWU7Ci0gICAgcnVsZSArPSAiIHsgPGluaXQ+KC4uLik7IH0iOwotCi0gICAgU3RyaW5nOCBsb2NhdGlvbigidmlldyAiKTsKLSAgICBsb2NhdGlvbiArPSBzcmNOYW1lOwotICAgIGNoYXIgbGluZW5vWzIwXTsKLSAgICBzcHJpbnRmKGxpbmVubywgIjolZCIsIGxpbmUpOwotICAgIGxvY2F0aW9uICs9IGxpbmVubzsKLQotICAgIGtlZXAtPmFkZChydWxlLCBsb2NhdGlvbik7Ci19Ci0KLXZvaWQKLWFkZFByb2d1YXJkS2VlcE1ldGhvZFJ1bGUoUHJvZ3VhcmRLZWVwU2V0KiBrZWVwLCBjb25zdCBTdHJpbmc4JiBtZW1iZXJOYW1lLAotICAgICAgICBjb25zdCBjaGFyKiBwa2csIGNvbnN0IFN0cmluZzgmIHNyY05hbWUsIGludCBsaW5lKQotewotICAgIFN0cmluZzggcnVsZSgiLWtlZXBjbGFzc21lbWJlcnMgY2xhc3MgKiB7ICoqKiAiKTsKLSAgICBydWxlICs9IG1lbWJlck5hbWU7Ci0gICAgcnVsZSArPSAiKC4uLik7IH0iOwotCi0gICAgU3RyaW5nOCBsb2NhdGlvbigib25DbGljayAiKTsKLSAgICBsb2NhdGlvbiArPSBzcmNOYW1lOwotICAgIGNoYXIgbGluZW5vWzIwXTsKLSAgICBzcHJpbnRmKGxpbmVubywgIjolZCIsIGxpbmUpOwotICAgIGxvY2F0aW9uICs9IGxpbmVubzsKLQotICAgIGtlZXAtPmFkZChydWxlLCBsb2NhdGlvbik7Ci19Ci0KLXN0YXR1c190Ci13cml0ZVByb2d1YXJkRm9yQW5kcm9pZE1hbmlmZXN0KFByb2d1YXJkS2VlcFNldCoga2VlcCwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cykKLXsKLSAgICBzdGF0dXNfdCBlcnI7Ci0gICAgUmVzWE1MVHJlZSB0cmVlOwotICAgIHNpemVfdCBsZW47Ci0gICAgUmVzWE1MVHJlZTo6ZXZlbnRfY29kZV90IGNvZGU7Ci0gICAgaW50IGRlcHRoID0gMDsKLSAgICBib29sIGluQXBwbGljYXRpb24gPSBmYWxzZTsKLSAgICBTdHJpbmc4IGVycm9yOwotICAgIHNwPEFhcHRHcm91cD4gYXNzR3JvdXA7Ci0gICAgc3A8QWFwdEZpbGU+IGFzc0ZpbGU7Ci0gICAgU3RyaW5nOCBwa2c7Ci0KLSAgICAvLyBGaXJzdCwgbG9vayBmb3IgYSBwYWNrYWdlIGZpbGUgdG8gcGFyc2UuICBUaGlzIGlzIHJlcXVpcmVkIHRvCi0gICAgLy8gYmUgYWJsZSB0byBnZW5lcmF0ZSB0aGUgcmVzb3VyY2UgaW5mb3JtYXRpb24uCi0gICAgYXNzR3JvdXAgPSBhc3NldHMtPmdldEZpbGVzKCkudmFsdWVGb3IoU3RyaW5nOCgiQW5kcm9pZE1hbmlmZXN0LnhtbCIpKTsKLSAgICBpZiAoYXNzR3JvdXAgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBBbmRyb2lkTWFuaWZlc3QueG1sIGZpbGUgZm91bmQuXG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmIChhc3NHcm91cC0+Z2V0RmlsZXMoKS5zaXplKCkgIT0gMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IE11bHRpcGxlIEFuZHJvaWRNYW5pZmVzdC54bWwgZmlsZXMgZm91bmQsIHVzaW5nICVzXG4iLAotICAgICAgICAgICAgICAgIGFzc0dyb3VwLT5nZXRGaWxlcygpLnZhbHVlQXQoMCktPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBhc3NGaWxlID0gYXNzR3JvdXAtPmdldEZpbGVzKCkudmFsdWVBdCgwKTsKLQotICAgIGVyciA9IHBhcnNlWE1MUmVzb3VyY2UoYXNzRmlsZSwgJnRyZWUpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICB0cmVlLnJlc3RhcnQoKTsKLQotICAgIHdoaWxlICgoY29kZT10cmVlLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgIGlmICgvKiBuYW1lID09ICJBcHBsaWNhdGlvbiIgJiYgKi8gZGVwdGggPT0gMikgewotICAgICAgICAgICAgICAgIGluQXBwbGljYXRpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlcHRoLS07Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29kZSAhPSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGRlcHRoKys7Ci0gICAgICAgIFN0cmluZzggdGFnKHRyZWUuZ2V0RWxlbWVudE5hbWUoJmxlbikpOwotICAgICAgICAvLyBwcmludGYoIkRlcHRoICVkIHRhZyAlc1xuIiwgZGVwdGgsIHRhZy5zdHJpbmcoKSk7Ci0gICAgICAgIGJvb2wga2VlcFRhZyA9IGZhbHNlOwotICAgICAgICBpZiAoZGVwdGggPT0gMSkgewotICAgICAgICAgICAgaWYgKHRhZyAhPSAibWFuaWZlc3QiKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogbWFuaWZlc3QgZG9lcyBub3Qgc3RhcnQgd2l0aCA8bWFuaWZlc3Q+IHRhZ1xuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGtnID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5VTEwsICJwYWNrYWdlIiwgTlVMTCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMikgewotICAgICAgICAgICAgaWYgKHRhZyA9PSAiYXBwbGljYXRpb24iKSB7Ci0gICAgICAgICAgICAgICAgaW5BcHBsaWNhdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAga2VlcFRhZyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmc4IGFnZW50ID0gZ2V0QXR0cmlidXRlKHRyZWUsICJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t1cEFnZW50IiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICBpZiAoYWdlbnQubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFByb2d1YXJkS2VlcFJ1bGUoa2VlcCwgYWdlbnQsIHBrZy5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NGaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKSwgdHJlZS5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJpbnN0cnVtZW50YXRpb24iKSB7Ci0gICAgICAgICAgICAgICAga2VlcFRhZyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFrZWVwVGFnICYmIGluQXBwbGljYXRpb24gJiYgZGVwdGggPT0gMykgewotICAgICAgICAgICAgaWYgKHRhZyA9PSAiYWN0aXZpdHkiIHx8IHRhZyA9PSAic2VydmljZSIgfHwgdGFnID09ICJyZWNlaXZlciIgfHwgdGFnID09ICJwcm92aWRlciIpIHsKLSAgICAgICAgICAgICAgICBrZWVwVGFnID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoa2VlcFRhZykgewotICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gZ2V0QXR0cmlidXRlKHRyZWUsICJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiLAotICAgICAgICAgICAgICAgICAgICAibmFtZSIsICZlcnJvcik7Ci0gICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuYW1lLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgICAgIGFkZFByb2d1YXJkS2VlcFJ1bGUoa2VlcCwgbmFtZSwgcGtnLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgYXNzRmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCksIHRyZWUuZ2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RydWN0IE5hbWVzcGFjZUF0dHJpYnV0ZVBhaXIgewotICAgIGNvbnN0IGNoYXIqIG5zOwotICAgIGNvbnN0IGNoYXIqIGF0dHI7Ci0KLSAgICBOYW1lc3BhY2VBdHRyaWJ1dGVQYWlyKGNvbnN0IGNoYXIqIG4sIGNvbnN0IGNoYXIqIGEpIDogbnMobiksIGF0dHIoYSkge30KLSAgICBOYW1lc3BhY2VBdHRyaWJ1dGVQYWlyKCkgOiBucyhOVUxMKSwgYXR0cihOVUxMKSB7fQotfTsKLQotc3RhdHVzX3QKLXdyaXRlUHJvZ3VhcmRGb3JYbWwoUHJvZ3VhcmRLZWVwU2V0KiBrZWVwLCBjb25zdCBzcDxBYXB0RmlsZT4mIGxheW91dEZpbGUsCi0gICAgICAgIGNvbnN0IGNoYXIqIHN0YXJ0VGFnLCBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBWZWN0b3I8TmFtZXNwYWNlQXR0cmlidXRlUGFpcj4gPiogdGFnQXR0clBhaXJzKQotewotICAgIHN0YXR1c190IGVycjsKLSAgICBSZXNYTUxUcmVlIHRyZWU7Ci0gICAgc2l6ZV90IGxlbjsKLSAgICBSZXNYTUxUcmVlOjpldmVudF9jb2RlX3QgY29kZTsKLQotICAgIGVyciA9IHBhcnNlWE1MUmVzb3VyY2UobGF5b3V0RmlsZSwgJnRyZWUpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICB0cmVlLnJlc3RhcnQoKTsKLQotICAgIGlmIChzdGFydFRhZyAhPSBOVUxMKSB7Ci0gICAgICAgIGJvb2wgaGF2ZVN0YXJ0ID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlICgoY29kZT10cmVlLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgICAgICBpZiAoY29kZSAhPSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZzggdGFnKHRyZWUuZ2V0RWxlbWVudE5hbWUoJmxlbikpOwotICAgICAgICAgICAgaWYgKHRhZyA9PSBzdGFydFRhZykgewotICAgICAgICAgICAgICAgIGhhdmVTdGFydCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWhhdmVTdGFydCkgewotICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUgKChjb2RlPXRyZWUubmV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgaWYgKGNvZGUgIT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmc4IHRhZyh0cmVlLmdldEVsZW1lbnROYW1lKCZsZW4pKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyAnLicsIHdlJ2xsIGFzc3VtZSB0aGF0IGl0J3Mgb25lIG9mIHRoZSBidWlsdCBpbiBuYW1lcy4KLSAgICAgICAgaWYgKHN0cmNocih0YWcuc3RyaW5nKCksICcuJykpIHsKLSAgICAgICAgICAgIGFkZFByb2d1YXJkS2VlcFJ1bGUoa2VlcCwgdGFnLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICBsYXlvdXRGaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKSwgdHJlZS5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHRhZ0F0dHJQYWlycyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBzc2l6ZV90IHRhZ0luZGV4ID0gdGFnQXR0clBhaXJzLT5pbmRleE9mS2V5KHRhZyk7Ci0gICAgICAgICAgICBpZiAodGFnSW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxOYW1lc3BhY2VBdHRyaWJ1dGVQYWlyPiYgbnNBdHRyVmVjdG9yID0gdGFnQXR0clBhaXJzLT52YWx1ZUF0KHRhZ0luZGV4KTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5zQXR0clZlY3Rvci5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBOYW1lc3BhY2VBdHRyaWJ1dGVQYWlyJiBuc0F0dHIgPSBuc0F0dHJWZWN0b3JbaV07Ci0KLSAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBhdHRySW5kZXggPSB0cmVlLmluZGV4T2ZBdHRyaWJ1dGUobnNBdHRyLm5zLCBuc0F0dHIuYXR0cik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRySW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8JXM+IGRvZXMgbm90IGhhdmUgYXR0cmlidXRlICVzOiVzLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBsYXlvdXRGaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSwgdHJlZS5nZXRMaW5lTnVtYmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGFnLnN0cmluZygpLCBuc0F0dHIubnMsIG5zQXR0ci5hdHRyKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRQcm9ndWFyZEtlZXBSdWxlKGtlZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgodHJlZS5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShhdHRySW5kZXgsICZsZW4pKSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0RmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCksIHRyZWUuZ2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzc2l6ZV90IGF0dHJJbmRleCA9IHRyZWUuaW5kZXhPZkF0dHJpYnV0ZShSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJvbkNsaWNrIik7Ci0gICAgICAgIGlmIChhdHRySW5kZXggPj0gMCkgewotICAgICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgICAgIGFkZFByb2d1YXJkS2VlcE1ldGhvZFJ1bGUoa2VlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCh0cmVlLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGF0dHJJbmRleCwgJmxlbikpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRGaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKSwgdHJlZS5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0aWMgdm9pZCBhZGRUYWdBdHRyUGFpcihLZXllZFZlY3RvcjxTdHJpbmc4LCBWZWN0b3I8TmFtZXNwYWNlQXR0cmlidXRlUGFpcj4gPiogZGVzdCwKLSAgICAgICAgY29uc3QgY2hhciogdGFnLCBjb25zdCBjaGFyKiBucywgY29uc3QgY2hhciogYXR0cikgewotICAgIFN0cmluZzggdGFnU3RyKHRhZyk7Ci0gICAgc3NpemVfdCBpbmRleCA9IGRlc3QtPmluZGV4T2ZLZXkodGFnU3RyKTsKLQotICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgVmVjdG9yPE5hbWVzcGFjZUF0dHJpYnV0ZVBhaXI+IHZlY3RvcjsKLSAgICAgICAgdmVjdG9yLmFkZChOYW1lc3BhY2VBdHRyaWJ1dGVQYWlyKG5zLCBhdHRyKSk7Ci0gICAgICAgIGRlc3QtPmFkZCh0YWdTdHIsIHZlY3Rvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdC0+ZWRpdFZhbHVlQXQoaW5kZXgpLmFkZChOYW1lc3BhY2VBdHRyaWJ1dGVQYWlyKG5zLCBhdHRyKSk7Ci0gICAgfQotfQotCi1zdGF0dXNfdAotd3JpdGVQcm9ndWFyZEZvckxheW91dHMoUHJvZ3VhcmRLZWVwU2V0KiBrZWVwLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzKQotewotICAgIHN0YXR1c190IGVycjsKLQotICAgIC8vIHRhZzphdHRyaWJ1dGUgcGFpcnMgdGhhdCBzaG91bGQgYmUgY2hlY2tlZCBpbiBsYXlvdXQgZmlsZXMuCi0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgVmVjdG9yPE5hbWVzcGFjZUF0dHJpYnV0ZVBhaXI+ID4ga0xheW91dFRhZ0F0dHJQYWlyczsKLSAgICBhZGRUYWdBdHRyUGFpcigma0xheW91dFRhZ0F0dHJQYWlycywgInZpZXciLCBOVUxMLCAiY2xhc3MiKTsKLSAgICBhZGRUYWdBdHRyUGFpcigma0xheW91dFRhZ0F0dHJQYWlycywgImZyYWdtZW50IiwgTlVMTCwgImNsYXNzIik7Ci0gICAgYWRkVGFnQXR0clBhaXIoJmtMYXlvdXRUYWdBdHRyUGFpcnMsICJmcmFnbWVudCIsIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgIm5hbWUiKTsKLQotICAgIC8vIHRhZzphdHRyaWJ1dGUgcGFpcnMgdGhhdCBzaG91bGQgYmUgY2hlY2tlZCBpbiB4bWwgZmlsZXMuCi0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgVmVjdG9yPE5hbWVzcGFjZUF0dHJpYnV0ZVBhaXI+ID4ga1htbFRhZ0F0dHJQYWlyczsKLSAgICBhZGRUYWdBdHRyUGFpcigma1htbFRhZ0F0dHJQYWlycywgIlByZWZlcmVuY2VTY3JlZW4iLCBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJmcmFnbWVudCIpOwotICAgIGFkZFRhZ0F0dHJQYWlyKCZrWG1sVGFnQXR0clBhaXJzLCAiaGVhZGVyIiwgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAiZnJhZ21lbnQiKTsKLQotICAgIGNvbnN0IFZlY3RvcjxzcDxBYXB0RGlyPiA+JiBkaXJzID0gYXNzZXRzLT5yZXNEaXJzKCk7Ci0gICAgY29uc3Qgc2l6ZV90IEsgPSBkaXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBrPTA7IGs8SzsgaysrKSB7Ci0gICAgICAgIGNvbnN0IHNwPEFhcHREaXI+JiBkID0gZGlycy5pdGVtQXQoayk7Ci0gICAgICAgIGNvbnN0IFN0cmluZzgmIGRpck5hbWUgPSBkLT5nZXRMZWFmKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHN0YXJ0VGFnID0gTlVMTDsKLSAgICAgICAgY29uc3QgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgVmVjdG9yPE5hbWVzcGFjZUF0dHJpYnV0ZVBhaXI+ID4qIHRhZ0F0dHJQYWlycyA9IE5VTEw7Ci0gICAgICAgIGlmICgoZGlyTmFtZSA9PSBTdHJpbmc4KCJsYXlvdXQiKSkgfHwgKHN0cm5jbXAoZGlyTmFtZS5zdHJpbmcoKSwgImxheW91dC0iLCA3KSA9PSAwKSkgewotICAgICAgICAgICAgdGFnQXR0clBhaXJzID0gJmtMYXlvdXRUYWdBdHRyUGFpcnM7Ci0gICAgICAgIH0gZWxzZSBpZiAoKGRpck5hbWUgPT0gU3RyaW5nOCgieG1sIikpIHx8IChzdHJuY21wKGRpck5hbWUuc3RyaW5nKCksICJ4bWwtIiwgNCkgPT0gMCkpIHsKLSAgICAgICAgICAgIHN0YXJ0VGFnID0gIlByZWZlcmVuY2VTY3JlZW4iOwotICAgICAgICAgICAgdGFnQXR0clBhaXJzID0gJmtYbWxUYWdBdHRyUGFpcnM7Ci0gICAgICAgIH0gZWxzZSBpZiAoKGRpck5hbWUgPT0gU3RyaW5nOCgibWVudSIpKSB8fCAoc3RybmNtcChkaXJOYW1lLnN0cmluZygpLCAibWVudS0iLCA1KSA9PSAwKSkgewotICAgICAgICAgICAgc3RhcnRUYWcgPSAibWVudSI7Ci0gICAgICAgICAgICB0YWdBdHRyUGFpcnMgPSBOVUxMOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LHNwPEFhcHRHcm91cD4gPiBncm91cHMgPSBkLT5nZXRGaWxlcygpOwotICAgICAgICBjb25zdCBzaXplX3QgTiA9IGdyb3Vwcy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRHcm91cD4mIGdyb3VwID0gZ3JvdXBzLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICBjb25zdCBEZWZhdWx0S2V5ZWRWZWN0b3I8QWFwdEdyb3VwRW50cnksIHNwPEFhcHRGaWxlPiA+JiBmaWxlcyA9IGdyb3VwLT5nZXRGaWxlcygpOwotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE0gPSBmaWxlcy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqPTA7IGo8TTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgZXJyID0gd3JpdGVQcm9ndWFyZEZvclhtbChrZWVwLCBmaWxlcy52YWx1ZUF0KGopLCBzdGFydFRhZywgdGFnQXR0clBhaXJzKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBIYW5kbGUgdGhlIG92ZXJsYXlzCi0gICAgc3A8QWFwdEFzc2V0cz4gb3ZlcmxheSA9IGFzc2V0cy0+Z2V0T3ZlcmxheSgpOwotICAgIGlmIChvdmVybGF5LmdldCgpKSB7Ci0gICAgICAgIHJldHVybiB3cml0ZVByb2d1YXJkRm9yTGF5b3V0cyhrZWVwLCBvdmVybGF5KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190Ci13cml0ZVByb2d1YXJkRmlsZShCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cykKLXsKLSAgICBzdGF0dXNfdCBlcnIgPSAtMTsKLQotICAgIGlmICghYnVuZGxlLT5nZXRQcm9ndWFyZEZpbGUoKSkgewotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotCi0gICAgUHJvZ3VhcmRLZWVwU2V0IGtlZXA7Ci0KLSAgICBlcnIgPSB3cml0ZVByb2d1YXJkRm9yQW5kcm9pZE1hbmlmZXN0KCZrZWVwLCBhc3NldHMpOwotICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgZXJyID0gd3JpdGVQcm9ndWFyZEZvckxheW91dHMoJmtlZXAsIGFzc2V0cyk7Ci0gICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBGSUxFKiBmcCA9IGZvcGVuKGJ1bmRsZS0+Z2V0UHJvZ3VhcmRGaWxlKCksICJ3KyIpOwotICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IFVuYWJsZSB0byBvcGVuIGNsYXNzIGZpbGUgJXM6ICVzXG4iLAotICAgICAgICAgICAgICAgIGJ1bmRsZS0+Z2V0UHJvZ3VhcmRGaWxlKCksIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIGNvbnN0IEtleWVkVmVjdG9yPFN0cmluZzgsIFNvcnRlZFZlY3RvcjxTdHJpbmc4PiA+JiBydWxlcyA9IGtlZXAucnVsZXM7Ci0gICAgY29uc3Qgc2l6ZV90IE4gPSBydWxlcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBTb3J0ZWRWZWN0b3I8U3RyaW5nOD4mIGxvY2F0aW9ucyA9IHJ1bGVzLnZhbHVlQXQoaSk7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBNID0gbG9jYXRpb25zLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3Qgaj0wOyBqPE07IGorKykgewotICAgICAgICAgICAgZnByaW50ZihmcCwgIiMgJXNcbiIsIGxvY2F0aW9ucy5pdGVtQXQoaikuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoZnAsICIlc1xuXG4iLCBydWxlcy5rZXlBdChpKS5zdHJpbmcoKSk7Ci0gICAgfQotICAgIGZjbG9zZShmcCk7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi0vLyBMb29wcyB0aHJvdWdoIHRoZSBzdHJpbmcgcGF0aHMgYW5kIHdyaXRlcyB0aGVtIHRvIHRoZSBmaWxlIHBvaW50ZXIKLS8vIEVhY2ggZmlsZSBwYXRoIGlzIHdyaXR0ZW4gb24gaXRzIG93biBsaW5lIHdpdGggYSB0ZXJtaW5hdGluZyBiYWNrc2xhc2guCi1zdGF0dXNfdCB3cml0ZVBhdGhzVG9GaWxlKGNvbnN0IHNwPEZpbGVQYXRoU3RvcmU+JiBmaWxlcywgRklMRSogZnApCi17Ci0gICAgc3RhdHVzX3QgZGVwcyA9IC0xOwotICAgIGZvciAoc2l6ZV90IGZpbGVfaSA9IDA7IGZpbGVfaSA8IGZpbGVzLT5zaXplKCk7ICsrZmlsZV9pKSB7Ci0gICAgICAgIC8vIEFkZCB0aGUgZnVsbCBmaWxlIHBhdGggdG8gdGhlIGRlcGVuZGVuY3kgZmlsZQotICAgICAgICBmcHJpbnRmKGZwLCAiJXMgXFxcbiIsIGZpbGVzLT5pdGVtQXQoZmlsZV9pKS5zdHJpbmcoKSk7Ci0gICAgICAgIGRlcHMrKzsKLSAgICB9Ci0gICAgcmV0dXJuIGRlcHM7Ci19Ci0KLXN0YXR1c190Ci13cml0ZURlcGVuZGVuY3lQcmVSZXFzKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLCBGSUxFKiBmcCwgYm9vbCBpbmNsdWRlUmF3KQotewotICAgIHN0YXR1c190IGRlcHMgPSAtMTsKLSAgICBkZXBzICs9IHdyaXRlUGF0aHNUb0ZpbGUoYXNzZXRzLT5nZXRGdWxsUmVzUGF0aHMoKSwgZnApOwotICAgIGlmIChpbmNsdWRlUmF3KSB7Ci0gICAgICAgIGRlcHMgKz0gd3JpdGVQYXRoc1RvRmlsZShhc3NldHMtPmdldEZ1bGxBc3NldFBhdGhzKCksIGZwKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlcHM7Ci19CmRpZmYgLS1naXQgYS90b29scy9hYXB0L1Jlc291cmNlRmlsdGVyLmNwcCBiL3Rvb2xzL2FhcHQvUmVzb3VyY2VGaWx0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2ZkMmE1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQnVpbGQgcmVzb3VyY2UgZmlsZXMgZnJvbSByYXcgYXNzZXRzLgotLy8KLQotI2luY2x1ZGUgIlJlc291cmNlRmlsdGVyLmgiCi0KLXN0YXR1c190Ci1SZXNvdXJjZUZpbHRlcjo6cGFyc2UoY29uc3QgY2hhciogYXJnKQotewotICAgIGlmIChhcmcgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBwID0gYXJnOwotICAgIGNvbnN0IGNoYXIqIHE7Ci0KLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBxID0gc3RyY2hyKHAsICcsJyk7Ci0gICAgICAgIGlmIChxID09IE5VTEwpIHsKLSAgICAgICAgICAgIHEgPSBwICsgc3RybGVuKHApOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nOCBwYXJ0KHAsIHEtcCk7Ci0KLSAgICAgICAgaWYgKHBhcnQgPT0gInp6X1paIikgewotICAgICAgICAgICAgbUNvbnRhaW5zUHNldWRvID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpbnQgYXhpczsKLSAgICAgICAgdWludDMyX3QgdmFsdWU7Ci0gICAgICAgIGlmIChBYXB0R3JvdXBFbnRyeTo6cGFyc2VOYW1lUGFydChwYXJ0LCAmYXhpcywgJnZhbHVlKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGNvbmZpZ3VyYXRpb246ICVzXG4iLCBhcmcpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgICAgICAgICAgICAgICAgICAgICIpOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHAtYXJnOyBpKyspIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxxLXA7IGkrKykgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotICAgICAgICBzc2l6ZV90IGluZGV4ID0gbURhdGEuaW5kZXhPZktleShheGlzKTsKLSAgICAgICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICAgICAgbURhdGEuYWRkKGF4aXMsIFNvcnRlZFZlY3Rvcjx1aW50MzJfdD4oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgU29ydGVkVmVjdG9yPHVpbnQzMl90PiYgc3YgPSBtRGF0YS5lZGl0VmFsdWVGb3IoYXhpcyk7Ci0gICAgICAgIHN2LmFkZCh2YWx1ZSk7Ci0gICAgICAgIC8vIGlmIGl0J3MgYSBsb2NhbGUgd2l0aCBhIHJlZ2lvbiwgYWxzbyBtYXRjaCBhbiB1bm1vZGlmaWVkIGxvY2FsZSBvZiB0aGUKLSAgICAgICAgLy8gc2FtZSBsYW5ndWFnZQotICAgICAgICBpZiAoYXhpcyA9PSBBWElTX0xBTkdVQUdFKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiAweGZmZmYwMDAwKSB7Ci0gICAgICAgICAgICAgICAgc3YuYWRkKHZhbHVlICYgMHgwMDAwZmZmZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcCA9IHE7Ci0gICAgICAgIGlmICghKnApIGJyZWFrOwotICAgICAgICBwKys7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1ib29sCi1SZXNvdXJjZUZpbHRlcjo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EYXRhLnNpemUoKSA9PSAwOwotfQotCi1ib29sCi1SZXNvdXJjZUZpbHRlcjo6bWF0Y2goaW50IGF4aXMsIHVpbnQzMl90IHZhbHVlKSBjb25zdAotewotICAgIGlmICh2YWx1ZSA9PSAwKSB7Ci0gICAgICAgIC8vIHRoZXkgZGlkbid0IHNwZWNpZnkgYW55dGhpbmcgc28gdGFrZSBldmVyeXRoaW5nCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBzc2l6ZV90IGluZGV4ID0gbURhdGEuaW5kZXhPZktleShheGlzKTsKLSAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgIC8vIHdlIGRpZG4ndCByZXF1ZXN0IGFueXRoaW5nIG9uIHRoaXMgYXhpcyBzbyB0YWtlIGV2ZXJ5dGhpbmcKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNvbnN0IFNvcnRlZFZlY3Rvcjx1aW50MzJfdD4mIHN2ID0gbURhdGEudmFsdWVBdChpbmRleCk7Ci0gICAgcmV0dXJuIHN2LmluZGV4T2YodmFsdWUpID49IDA7Ci19Ci0KLWJvb2wKLVJlc291cmNlRmlsdGVyOjptYXRjaChpbnQgYXhpcywgY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1hdGNoKGF4aXMsIEFhcHRHcm91cEVudHJ5OjpnZXRDb25maWdWYWx1ZUZvckF4aXMoY29uZmlnLCBheGlzKSk7Ci19Ci0KLWJvb2wKLVJlc291cmNlRmlsdGVyOjptYXRjaChjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZykgY29uc3QKLXsKLSAgICBmb3IgKGludCBpPUFYSVNfU1RBUlQ7IGk8PUFYSVNfRU5EOyBpKyspIHsKLSAgICAgICAgaWYgKCFtYXRjaChpLCBBYXB0R3JvdXBFbnRyeTo6Z2V0Q29uZmlnVmFsdWVGb3JBeGlzKGNvbmZpZywgaSkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWNvbnN0IFNvcnRlZFZlY3Rvcjx1aW50MzJfdD4qIFJlc291cmNlRmlsdGVyOjpjb25maWdzRm9yQXhpcyhpbnQgYXhpcykgY29uc3QKLXsKLSAgICBzc2l6ZV90IGluZGV4ID0gbURhdGEuaW5kZXhPZktleShheGlzKTsKLSAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gJm1EYXRhLnZhbHVlQXQoaW5kZXgpOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9SZXNvdXJjZUZpbHRlci5oIGIvdG9vbHMvYWFwdC9SZXNvdXJjZUZpbHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDdiN2JiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvUmVzb3VyY2VGaWx0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQnVpbGQgcmVzb3VyY2UgZmlsZXMgZnJvbSByYXcgYXNzZXRzLgotLy8KLQotI2lmbmRlZiBSRVNPVVJDRV9GSUxURVJfSAotI2RlZmluZSBSRVNPVVJDRV9GSUxURVJfSAotCi0jaW5jbHVkZSAiQWFwdEFzc2V0cy5oIgotCi0vKioKLSAqIEltcGxlbWVudHMgbG9naWMgZm9yIHBhcnNpbmcgYW5kIGhhbmRsaW5nICItYyIgYW5kICItLXByZWZlcnJlZC1jb25maWd1cmF0aW9ucyIKLSAqIG9wdGlvbnMuCi0gKi8KLWNsYXNzIFJlc291cmNlRmlsdGVyCi17Ci1wdWJsaWM6Ci0gICAgUmVzb3VyY2VGaWx0ZXIoKSA6IG1EYXRhKCksIG1Db250YWluc1BzZXVkbyhmYWxzZSkge30KLSAgICBzdGF0dXNfdCBwYXJzZShjb25zdCBjaGFyKiBhcmcpOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2goaW50IGF4aXMsIHVpbnQzMl90IHZhbHVlKSBjb25zdDsKLSAgICBib29sIG1hdGNoKGludCBheGlzLCBjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZykgY29uc3Q7Ci0gICAgYm9vbCBtYXRjaChjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZykgY29uc3Q7Ci0gICAgY29uc3QgU29ydGVkVmVjdG9yPHVpbnQzMl90PiogY29uZmlnc0ZvckF4aXMoaW50IGF4aXMpIGNvbnN0OwotICAgIGlubGluZSBib29sIGNvbnRhaW5zUHNldWRvKCkgY29uc3QgeyByZXR1cm4gbUNvbnRhaW5zUHNldWRvOyB9Ci0KLXByaXZhdGU6Ci0gICAgS2V5ZWRWZWN0b3I8aW50LFNvcnRlZFZlY3Rvcjx1aW50MzJfdD4gPiBtRGF0YTsKLSAgICBib29sIG1Db250YWluc1BzZXVkbzsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9SZXNvdXJjZUlkQ2FjaGUuY3BwIGIvdG9vbHMvYWFwdC9SZXNvdXJjZUlkQ2FjaGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDNmNGY2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvUmVzb3VyY2VJZENhY2hlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIE1hbmFnZSBhIHJlc291cmNlIElEIGNhY2hlLgotCi0jZGVmaW5lIExPR19UQUcgIlJlc291cmNlSWRDYWNoZSIKLQotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzE2Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSAiUmVzb3VyY2VJZENhY2hlLmgiCi0jaW5jbHVkZSA8bWFwPgotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotCi1zdGF0aWMgc2l6ZV90IG1IaXRzID0gMDsKLXN0YXRpYyBzaXplX3QgbU1pc3NlcyA9IDA7Ci1zdGF0aWMgc2l6ZV90IG1Db2xsaXNpb25zID0gMDsKLQotc3RhdGljIGNvbnN0IHNpemVfdCBNQVhfQ0FDSEVfRU5UUklFUyA9IDIwNDg7Ci1zdGF0aWMgY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYgVFJVRTE2KCIxIik7Ci1zdGF0aWMgY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYgRkFMU0UxNigiMCIpOwotCi1zdHJ1Y3QgQ2FjaGVFbnRyeSB7Ci0gICAgLy8gY29uY2F0ZW5hdGlvbiBvZiB0aGUgcmVsZXZhbnQgc3RyaW5ncyBpbnRvIGEgc2luZ2xlIGluc3RhbmNlCi0gICAgYW5kcm9pZDo6U3RyaW5nMTYgaGFzaGVkTmFtZTsKLSAgICB1aW50MzJfdCBpZDsKLQotICAgIENhY2hlRW50cnkoKSB7fQotICAgIENhY2hlRW50cnkoY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYmIG5hbWUsIHVpbnQzMl90IHJlc0lkKSA6IGhhc2hlZE5hbWUobmFtZSksIGlkKHJlc0lkKSB7IH0KLX07Ci0KLXN0YXRpYyBtYXA8IHVpbnQzMl90LCBDYWNoZUVudHJ5ID4gbUlkTWFwOwotCi0KLS8vIGRqYjI7IHJlYXNvbmFibGUgY2hvaWNlIGZvciBzdHJpbmdzIHdoZW4gY29sbGlzaW9ucyBhcmVuJ3QgcGFydGljdWxhcmx5IGltcG9ydGFudAotc3RhdGljIGlubGluZSB1aW50MzJfdCBoYXNocm91bmQodWludDMyX3QgaGFzaCwgaW50IGMpIHsKLSAgICByZXR1cm4gKChoYXNoIDw8IDUpICsgaGFzaCkgKyBjOyAgICAvKiBoYXNoICogMzMgKyBjICovCi19Ci0KLXN0YXRpYyB1aW50MzJfdCBoYXNoKGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiBoYXNoYWJsZVN0cmluZykgewotICAgIHVpbnQzMl90IGhhc2ggPSA1MzgxOwotICAgIGNvbnN0IGNoYXIxNl90KiBzdHIgPSBoYXNoYWJsZVN0cmluZy5zdHJpbmcoKTsKLSAgICB3aGlsZSAoaW50IGMgPSAqc3RyKyspIGhhc2ggPSBoYXNocm91bmQoaGFzaCwgYyk7Ci0gICAgcmV0dXJuIGhhc2g7Ci19Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotc3RhdGljIGlubGluZSBTdHJpbmcxNiBtYWtlSGFzaGFibGVOYW1lKGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICBjb25zdCBhbmRyb2lkOjpTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYmIG5hbWUsCi0gICAgICAgIGJvb2wgb25seVB1YmxpYykgewotICAgIFN0cmluZzE2IGhhc2hhYmxlID0gU3RyaW5nMTYobmFtZSk7Ci0gICAgaGFzaGFibGUgKz0gdHlwZTsKLSAgICBoYXNoYWJsZSArPSBwYWNrYWdlOwotICAgIGhhc2hhYmxlICs9IChvbmx5UHVibGljID8gVFJVRTE2IDogRkFMU0UxNik7Ci0gICAgcmV0dXJuIGhhc2hhYmxlOwotfQotCi11aW50MzJfdCBSZXNvdXJjZUlkQ2FjaGU6Omxvb2t1cChjb25zdCBhbmRyb2lkOjpTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYmIHR5cGUsCi0gICAgICAgIGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiBuYW1lLAotICAgICAgICBib29sIG9ubHlQdWJsaWMpIHsKLSAgICBjb25zdCBTdHJpbmcxNiBoYXNoZWROYW1lID0gbWFrZUhhc2hhYmxlTmFtZShwYWNrYWdlLCB0eXBlLCBuYW1lLCBvbmx5UHVibGljKTsKLSAgICBjb25zdCB1aW50MzJfdCBoYXNoY29kZSA9IGhhc2goaGFzaGVkTmFtZSk7Ci0gICAgbWFwPHVpbnQzMl90LCBDYWNoZUVudHJ5Pjo6aXRlcmF0b3IgaXRlbSA9IG1JZE1hcC5maW5kKGhhc2hjb2RlKTsKLSAgICBpZiAoaXRlbSA9PSBtSWRNYXAuZW5kKCkpIHsKLSAgICAgICAgLy8gY2FjaGUgbWlzcwotICAgICAgICBtTWlzc2VzKys7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIGxlZ2l0IG1hdGNoPwotICAgIGlmIChoYXNoZWROYW1lID09ICgqaXRlbSkuc2Vjb25kLmhhc2hlZE5hbWUpIHsKLSAgICAgICAgbUhpdHMrKzsKLSAgICAgICAgcmV0dXJuICgqaXRlbSkuc2Vjb25kLmlkOwotICAgIH0KLQotICAgIC8vIGNvbGxpc2lvbgotICAgIG1Db2xsaXNpb25zKys7Ci0gICAgbUlkTWFwLmVyYXNlKGhhc2hjb2RlKTsKLSAgICByZXR1cm4gMDsKLX0KLQotLy8gcmV0dXJucyB0aGUgcmVzb3VyY2UgSUQgYmVpbmcgc3RvcmVkLCBmb3IgY2FsbHNpdGUgY29udmVuaWVuY2UKLXVpbnQzMl90IFJlc291cmNlSWRDYWNoZTo6c3RvcmUoY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgIGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiB0eXBlLAotICAgICAgICBjb25zdCBhbmRyb2lkOjpTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgYm9vbCBvbmx5UHVibGljLAotICAgICAgICB1aW50MzJfdCByZXNJZCkgewotICAgIGlmIChtSWRNYXAuc2l6ZSgpIDwgTUFYX0NBQ0hFX0VOVFJJRVMpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nMTYgaGFzaGVkTmFtZSA9IG1ha2VIYXNoYWJsZU5hbWUocGFja2FnZSwgdHlwZSwgbmFtZSwgb25seVB1YmxpYyk7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IGhhc2hjb2RlID0gaGFzaChoYXNoZWROYW1lKTsKLSAgICAgICAgbUlkTWFwW2hhc2hjb2RlXSA9IENhY2hlRW50cnkoaGFzaGVkTmFtZSwgcmVzSWQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzSWQ7Ci19Ci0KLXZvaWQgUmVzb3VyY2VJZENhY2hlOjpkdW1wKCkgewotICAgIHByaW50ZigiUmVzb3VyY2VJZENhY2hlIGR1bXA6XG4iKTsKLSAgICBwcmludGYoIlNpemU6ICVsZFxuIiwgbUlkTWFwLnNpemUoKSk7Ci0gICAgcHJpbnRmKCJIaXRzOiAgICVsZFxuIiwgbUhpdHMpOwotICAgIHByaW50ZigiTWlzc2VzOiAlbGRcbiIsIG1NaXNzZXMpOwotICAgIHByaW50ZigiKENvbGxpc2lvbnM6ICVsZClcbiIsIG1Db2xsaXNpb25zKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9SZXNvdXJjZUlkQ2FjaGUuaCBiL3Rvb2xzL2FhcHQvUmVzb3VyY2VJZENhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1Zjc3ODEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9SZXNvdXJjZUlkQ2FjaGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gTWFuYWdlIGEgcmVzb3VyY2UgSUQgY2FjaGUuCi0KLSNpZm5kZWYgUkVTT1VSQ0VfSURfQ0FDSEVfSAotI2RlZmluZSBSRVNPVVJDRV9JRF9DQUNIRV9ICi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLWNsYXNzIGFuZHJvaWQ6OlN0cmluZzE2OwotCi1jbGFzcyBSZXNvdXJjZUlkQ2FjaGUgewotcHVibGljOgotICAgIHN0YXRpYyB1aW50MzJfdCBsb29rdXAoY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICBjb25zdCBhbmRyb2lkOjpTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgIGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgYm9vbCBvbmx5UHVibGljKTsKLQotICAgIHN0YXRpYyB1aW50MzJfdCBzdG9yZShjb25zdCBhbmRyb2lkOjpTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgIGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICBib29sIG9ubHlQdWJsaWMsCi0gICAgICAgICAgICB1aW50MzJfdCByZXNJZCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wKHZvaWQpOwotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvUmVzb3VyY2VUYWJsZS5jcHAgYi90b29scy9hYXB0L1Jlc291cmNlVGFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2VkOGIzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvUmVzb3VyY2VUYWJsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTc0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQnVpbGQgcmVzb3VyY2UgZmlsZXMgZnJvbSByYXcgYXNzZXRzLgotLy8KLQotI2luY2x1ZGUgIlJlc291cmNlVGFibGUuaCIKLQotI2luY2x1ZGUgIlhNTE5vZGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUZpbHRlci5oIgotI2luY2x1ZGUgIlJlc291cmNlSWRDYWNoZS5oIgotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuaD4KLSNpbmNsdWRlIDx1dGlscy9CeXRlT3JkZXIuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotI2RlZmluZSBOT0lTWSh4KSAvL3gKLQotc3RhdHVzX3QgY29tcGlsZVhtbEZpbGUoY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9ucykKLXsKLSAgICBzcDxYTUxOb2RlPiByb290ID0gWE1MTm9kZTo6cGFyc2UodGFyZ2V0KTsKLSAgICBpZiAocm9vdCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29tcGlsZVhtbEZpbGUoYXNzZXRzLCByb290LCB0YXJnZXQsIHRhYmxlLCBvcHRpb25zKTsKLX0KLQotc3RhdHVzX3QgY29tcGlsZVhtbEZpbGUoY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+JiBvdXRUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRpb25zKQotewotICAgIHNwPFhNTE5vZGU+IHJvb3QgPSBYTUxOb2RlOjpwYXJzZSh0YXJnZXQpOwotICAgIGlmIChyb290ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb21waWxlWG1sRmlsZShhc3NldHMsIHJvb3QsIG91dFRhcmdldCwgdGFibGUsIG9wdGlvbnMpOwotfQotCi1zdGF0dXNfdCBjb21waWxlWG1sRmlsZShjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8WE1MTm9kZT4mIHJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIHRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbnMpCi17Ci0gICAgaWYgKChvcHRpb25zJlhNTF9DT01QSUxFX1NUUklQX1dISVRFU1BBQ0UpICE9IDApIHsKLSAgICAgICAgcm9vdC0+cmVtb3ZlV2hpdGVzcGFjZSh0cnVlLCBOVUxMKTsKLSAgICB9IGVsc2UgIGlmICgob3B0aW9ucyZYTUxfQ09NUElMRV9DT01QQUNUX1dISVRFU1BBQ0UpICE9IDApIHsKLSAgICAgICAgcm9vdC0+cmVtb3ZlV2hpdGVzcGFjZShmYWxzZSwgTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKChvcHRpb25zJlhNTF9DT01QSUxFX1VURjgpICE9IDApIHsKLSAgICAgICAgcm9vdC0+c2V0VVRGOCh0cnVlKTsKLSAgICB9Ci0KLSAgICBib29sIGhhc0Vycm9ycyA9IGZhbHNlOwotICAgIAotICAgIGlmICgob3B0aW9ucyZYTUxfQ09NUElMRV9BU1NJR05fQVRUUklCVVRFX0lEUykgIT0gMCkgewotICAgICAgICBzdGF0dXNfdCBlcnIgPSByb290LT5hc3NpZ25SZXNvdXJjZUlkcyhhc3NldHMsIHRhYmxlKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXR1c190IGVyciA9IHJvb3QtPnBhcnNlVmFsdWVzKGFzc2V0cywgdGFibGUpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaGFzRXJyb3JzKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICAKLSAgICBOT0lTWShwcmludGYoIklucHV0IFhNTCBSZXNvdXJjZTpcbiIpKTsKLSAgICBOT0lTWShyb290LT5wcmludCgpKTsKLSAgICBlcnIgPSByb290LT5mbGF0dGVuKHRhcmdldCwKLSAgICAgICAgICAgIChvcHRpb25zJlhNTF9DT01QSUxFX1NUUklQX0NPTU1FTlRTKSAhPSAwLAotICAgICAgICAgICAgKG9wdGlvbnMmWE1MX0NPTVBJTEVfU1RSSVBfUkFXX1ZBTFVFUykgIT0gMCk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIE5PSVNZKHByaW50ZigiT3V0cHV0IFhNTCBSZXNvdXJjZTpcbiIpKTsKLSAgICBOT0lTWShSZXNYTUxUcmVlIHRyZWU7Ci0gICAgICAgIHRyZWUuc2V0VG8odGFyZ2V0LT5nZXREYXRhKCksIHRhcmdldC0+Z2V0U2l6ZSgpKTsKLSAgICAgICAgcHJpbnRYTUxCbG9jaygmdHJlZSkpOwotCi0gICAgdGFyZ2V0LT5zZXRDb21wcmVzc2lvbk1ldGhvZChaaXBFbnRyeTo6a0NvbXByZXNzRGVmbGF0ZWQpOwotICAgIAotICAgIHJldHVybiBlcnI7Ci19Ci0KLSN1bmRlZiBOT0lTWQotI2RlZmluZSBOT0lTWSh4KSAvL3gKLQotc3RydWN0IGZsYWdfZW50cnkKLXsKLSAgICBjb25zdCBjaGFyMTZfdCogbmFtZTsKLSAgICBzaXplX3QgbmFtZUxlbjsKLSAgICB1aW50MzJfdCB2YWx1ZTsKLSAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbjsKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyMTZfdCByZWZlcmVuY2VBcnJheVtdID0KLSAgICB7ICdyJywgJ2UnLCAnZicsICdlJywgJ3InLCAnZScsICduJywgJ2MnLCAnZScgfTsKLXN0YXRpYyBjb25zdCBjaGFyMTZfdCBzdHJpbmdBcnJheVtdID0KLSAgICB7ICdzJywgJ3QnLCAncicsICdpJywgJ24nLCAnZycgfTsKLXN0YXRpYyBjb25zdCBjaGFyMTZfdCBpbnRlZ2VyQXJyYXlbXSA9Ci0gICAgeyAnaScsICduJywgJ3QnLCAnZScsICdnJywgJ2UnLCAncicgfTsKLXN0YXRpYyBjb25zdCBjaGFyMTZfdCBib29sZWFuQXJyYXlbXSA9Ci0gICAgeyAnYicsICdvJywgJ28nLCAnbCcsICdlJywgJ2EnLCAnbicgfTsKLXN0YXRpYyBjb25zdCBjaGFyMTZfdCBjb2xvckFycmF5W10gPQotICAgIHsgJ2MnLCAnbycsICdsJywgJ28nLCAncicgfTsKLXN0YXRpYyBjb25zdCBjaGFyMTZfdCBmbG9hdEFycmF5W10gPQotICAgIHsgJ2YnLCAnbCcsICdvJywgJ2EnLCAndCcgfTsKLXN0YXRpYyBjb25zdCBjaGFyMTZfdCBkaW1lbnNpb25BcnJheVtdID0KLSAgICB7ICdkJywgJ2knLCAnbScsICdlJywgJ24nLCAncycsICdpJywgJ28nLCAnbicgfTsKLXN0YXRpYyBjb25zdCBjaGFyMTZfdCBmcmFjdGlvbkFycmF5W10gPQotICAgIHsgJ2YnLCAncicsICdhJywgJ2MnLCAndCcsICdpJywgJ28nLCAnbicgfTsKLXN0YXRpYyBjb25zdCBjaGFyMTZfdCBlbnVtQXJyYXlbXSA9Ci0gICAgeyAnZScsICduJywgJ3UnLCAnbScgfTsKLXN0YXRpYyBjb25zdCBjaGFyMTZfdCBmbGFnc0FycmF5W10gPQotICAgIHsgJ2YnLCAnbCcsICdhJywgJ2cnLCAncycgfTsKLQotc3RhdGljIGNvbnN0IGZsYWdfZW50cnkgZ0Zvcm1hdEZsYWdzW10gPSB7Ci0gICAgeyByZWZlcmVuY2VBcnJheSwgc2l6ZW9mKHJlZmVyZW5jZUFycmF5KS8yLCBSZXNUYWJsZV9tYXA6OlRZUEVfUkVGRVJFTkNFLAotICAgICAgImEgcmVmZXJlbmNlIHRvIGFub3RoZXIgcmVzb3VyY2UsIGluIHRoZSBmb3JtIFwiPGNvZGU+QFsrXVs8aT5wYWNrYWdlPC9pPjpdPGk+dHlwZTwvaT46PGk+bmFtZTwvaT48L2NvZGU+XCJcbiIKLSAgICAgICJvciB0byBhIHRoZW1lIGF0dHJpYnV0ZSBpbiB0aGUgZm9ybSBcIjxjb2RlPj9bPGk+cGFja2FnZTwvaT46XVs8aT50eXBlPC9pPjpdPGk+bmFtZTwvaT48L2NvZGU+XCIuIn0sCi0gICAgeyBzdHJpbmdBcnJheSwgc2l6ZW9mKHN0cmluZ0FycmF5KS8yLCBSZXNUYWJsZV9tYXA6OlRZUEVfU1RSSU5HLAotICAgICAgImEgc3RyaW5nIHZhbHVlLCB1c2luZyAnXFxcXDsnIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHN1Y2ggYXMgJ1xcXFxuJyBvciAnXFxcXHV4eHh4JyBmb3IgYSB1bmljb2RlIGNoYXJhY3Rlci4iIH0sCi0gICAgeyBpbnRlZ2VyQXJyYXksIHNpemVvZihpbnRlZ2VyQXJyYXkpLzIsIFJlc1RhYmxlX21hcDo6VFlQRV9JTlRFR0VSLAotICAgICAgImFuIGludGVnZXIgdmFsdWUsIHN1Y2ggYXMgXCI8Y29kZT4xMDA8L2NvZGU+XCIuIiB9LAotICAgIHsgYm9vbGVhbkFycmF5LCBzaXplb2YoYm9vbGVhbkFycmF5KS8yLCBSZXNUYWJsZV9tYXA6OlRZUEVfQk9PTEVBTiwKLSAgICAgICJhIGJvb2xlYW4gdmFsdWUsIGVpdGhlciBcIjxjb2RlPnRydWU8L2NvZGU+XCIgb3IgXCI8Y29kZT5mYWxzZTwvY29kZT5cIi4iIH0sCi0gICAgeyBjb2xvckFycmF5LCBzaXplb2YoY29sb3JBcnJheSkvMiwgUmVzVGFibGVfbWFwOjpUWVBFX0NPTE9SLAotICAgICAgImEgY29sb3IgdmFsdWUsIGluIHRoZSBmb3JtIG9mIFwiPGNvZGU+IzxpPnJnYjwvaT48L2NvZGU+XCIsIFwiPGNvZGU+IzxpPmFyZ2I8L2k+PC9jb2RlPlwiLFxuIgotICAgICAgIlwiPGNvZGU+IzxpPnJyZ2diYjwvaT48L2NvZGU+XCIsIG9yIFwiPGNvZGU+IzxpPmFhcnJnZ2JiPC9pPjwvY29kZT5cIi4iIH0sCi0gICAgeyBmbG9hdEFycmF5LCBzaXplb2YoZmxvYXRBcnJheSkvMiwgUmVzVGFibGVfbWFwOjpUWVBFX0ZMT0FULAotICAgICAgImEgZmxvYXRpbmcgcG9pbnQgdmFsdWUsIHN1Y2ggYXMgXCI8Y29kZT4xLjI8L2NvZGU+XCIuIn0sCi0gICAgeyBkaW1lbnNpb25BcnJheSwgc2l6ZW9mKGRpbWVuc2lvbkFycmF5KS8yLCBSZXNUYWJsZV9tYXA6OlRZUEVfRElNRU5TSU9OLAotICAgICAgImEgZGltZW5zaW9uIHZhbHVlLCB3aGljaCBpcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBhcHBlbmRlZCB3aXRoIGEgdW5pdCBzdWNoIGFzIFwiPGNvZGU+MTQuNXNwPC9jb2RlPlwiLlxuIgotICAgICAgIkF2YWlsYWJsZSB1bml0cyBhcmU6IHB4IChwaXhlbHMpLCBkcCAoZGVuc2l0eS1pbmRlcGVuZGVudCBwaXhlbHMpLCBzcCAoc2NhbGVkIHBpeGVscyBiYXNlZCBvbiBwcmVmZXJyZWQgZm9udCBzaXplKSxcbiIKLSAgICAgICJpbiAoaW5jaGVzKSwgbW0gKG1pbGxpbWV0ZXJzKS4iIH0sCi0gICAgeyBmcmFjdGlvbkFycmF5LCBzaXplb2YoZnJhY3Rpb25BcnJheSkvMiwgUmVzVGFibGVfbWFwOjpUWVBFX0ZSQUNUSU9OLAotICAgICAgImEgZnJhY3Rpb25hbCB2YWx1ZSwgd2hpY2ggaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYXBwZW5kZWQgd2l0aCBlaXRoZXIgJSBvciAlcCwgc3VjaCBhcyBcIjxjb2RlPjE0LjUlPC9jb2RlPlwiLlxuIgotICAgICAgIlRoZSAlIHN1ZmZpeCBhbHdheXMgbWVhbnMgYSBwZXJjZW50YWdlIG9mIHRoZSBiYXNlIHNpemU7IHRoZSBvcHRpb25hbCAlcCBzdWZmaXggcHJvdmlkZXMgYSBzaXplIHJlbGF0aXZlIHRvXG4iCi0gICAgICAic29tZSBwYXJlbnQgY29udGFpbmVyLiIgfSwKLSAgICB7IGVudW1BcnJheSwgc2l6ZW9mKGVudW1BcnJheSkvMiwgUmVzVGFibGVfbWFwOjpUWVBFX0VOVU0sIE5VTEwgfSwKLSAgICB7IGZsYWdzQXJyYXksIHNpemVvZihmbGFnc0FycmF5KS8yLCBSZXNUYWJsZV9tYXA6OlRZUEVfRkxBR1MsIE5VTEwgfSwKLSAgICB7IE5VTEwsIDAsIDAsIE5VTEwgfQotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIxNl90IHN1Z2dlc3RlZEFycmF5W10gPSB7ICdzJywgJ3UnLCAnZycsICdnJywgJ2UnLCAncycsICd0JywgJ2UnLCAnZCcgfTsKLQotc3RhdGljIGNvbnN0IGZsYWdfZW50cnkgbDEwblJlcXVpcmVkRmxhZ3NbXSA9IHsKLSAgICB7IHN1Z2dlc3RlZEFycmF5LCBzaXplb2Yoc3VnZ2VzdGVkQXJyYXkpLzIsIFJlc1RhYmxlX21hcDo6TDEwTl9TVUdHRVNURUQsIE5VTEwgfSwKLSAgICB7IE5VTEwsIDAsIDAsIE5VTEwgfQotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIxNl90IG51bFN0cltdID0geyAwIH07Ci0KLXN0YXRpYyB1aW50MzJfdCBwYXJzZV9mbGFncyhjb25zdCBjaGFyMTZfdCogc3RyLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbGFnX2VudHJ5KiBmbGFncywgYm9vbCogb3V0RXJyb3IgPSBOVUxMKQotewotICAgIHdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UoKnN0cikpIHsKLSAgICAgICAgc3RyKys7Ci0gICAgICAgIGxlbi0tOwotICAgIH0KLSAgICB3aGlsZSAobGVuID4gMCAmJiBpc3NwYWNlKHN0cltsZW4tMV0pKSB7Ci0gICAgICAgIGxlbi0tOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIxNl90KiBjb25zdCBlbmQgPSBzdHIgKyBsZW47Ci0gICAgdWludDMyX3QgdmFsdWUgPSAwOwotCi0gICAgd2hpbGUgKHN0ciA8IGVuZCkgewotICAgICAgICBjb25zdCBjaGFyMTZfdCogZGl2ID0gc3RyOwotICAgICAgICB3aGlsZSAoZGl2IDwgZW5kICYmICpkaXYgIT0gJ3wnKSB7Ci0gICAgICAgICAgICBkaXYrKzsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGZsYWdfZW50cnkqIGN1ciA9IGZsYWdzOwotICAgICAgICB3aGlsZSAoY3VyLT5uYW1lKSB7Ci0gICAgICAgICAgICBpZiAoc3RyemNtcDE2KGN1ci0+bmFtZSwgY3VyLT5uYW1lTGVuLCBzdHIsIGRpdi1zdHIpID09IDApIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSB8PSBjdXItPnZhbHVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyKys7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWN1ci0+bmFtZSkgewotICAgICAgICAgICAgaWYgKG91dEVycm9yKSAqb3V0RXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHIgPSBkaXYgPCBlbmQgPyBkaXYrMSA6IGRpdjsKLSAgICB9Ci0KLSAgICBpZiAob3V0RXJyb3IpICpvdXRFcnJvciA9IGZhbHNlOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIFN0cmluZzE2IG1heU9yTXVzdChpbnQgdHlwZSwgaW50IGZsYWdzKQotewotICAgIGlmICgodHlwZSYofmZsYWdzKSkgPT0gMCkgewotICAgICAgICByZXR1cm4gU3RyaW5nMTYoIjxwPk11c3QiKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0cmluZzE2KCI8cD5NYXkiKTsKLX0KLQotc3RhdGljIHZvaWQgYXBwZW5kVHlwZUluZm8oUmVzb3VyY2VUYWJsZSogb3V0VGFibGUsIGNvbnN0IFN0cmluZzE2JiBwa2csCi0gICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlTmFtZSwgY29uc3QgU3RyaW5nMTYmIGlkZW50LCBpbnQgdHlwZSwKLSAgICAgICAgY29uc3QgZmxhZ19lbnRyeSogZmxhZ3MpCi17Ci0gICAgYm9vbCBoYWRUeXBlID0gZmFsc2U7Ci0gICAgd2hpbGUgKGZsYWdzLT5uYW1lKSB7Ci0gICAgICAgIGlmICgodHlwZSZmbGFncy0+dmFsdWUpICE9IDAgJiYgZmxhZ3MtPmRlc2NyaXB0aW9uICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFN0cmluZzE2IGZ1bGxNc2cobWF5T3JNdXN0KHR5cGUsIGZsYWdzLT52YWx1ZSkpOwotICAgICAgICAgICAgZnVsbE1zZy5hcHBlbmQoU3RyaW5nMTYoIiBiZSAiKSk7Ci0gICAgICAgICAgICBmdWxsTXNnLmFwcGVuZChTdHJpbmcxNihmbGFncy0+ZGVzY3JpcHRpb24pKTsKLSAgICAgICAgICAgIG91dFRhYmxlLT5hcHBlbmRUeXBlQ29tbWVudChwa2csIHR5cGVOYW1lLCBpZGVudCwgZnVsbE1zZyk7Ci0gICAgICAgICAgICBoYWRUeXBlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBmbGFncysrOwotICAgIH0KLSAgICBpZiAoaGFkVHlwZSAmJiAodHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfUkVGRVJFTkNFKSA9PSAwKSB7Ci0gICAgICAgIG91dFRhYmxlLT5hcHBlbmRUeXBlQ29tbWVudChwa2csIHR5cGVOYW1lLCBpZGVudCwKLSAgICAgICAgICAgICAgICBTdHJpbmcxNigiPHA+VGhpcyBtYXkgYWxzbyBiZSBhIHJlZmVyZW5jZSB0byBhIHJlc291cmNlIChpbiB0aGUgZm9ybVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJcIjxjb2RlPkBbPGk+cGFja2FnZTwvaT46XTxpPnR5cGU8L2k+OjxpPm5hbWU8L2k+PC9jb2RlPlwiKSBvclxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGVtZSBhdHRyaWJ1dGUgKGluIHRoZSBmb3JtXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlwiPGNvZGU+P1s8aT5wYWNrYWdlPC9pPjpdWzxpPnR5cGU8L2k+Ol08aT5uYW1lPC9pPjwvY29kZT5cIilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiY29udGFpbmluZyBhIHZhbHVlIG9mIHRoaXMgdHlwZS4iKSk7Ci0gICAgfQotfQotCi1zdHJ1Y3QgUGVuZGluZ0F0dHJpYnV0ZQotewotICAgIGNvbnN0IFN0cmluZzE2IG15UGFja2FnZTsKLSAgICBjb25zdCBTb3VyY2VQb3Mgc291cmNlUG9zOwotICAgIGNvbnN0IGJvb2wgYXBwZW5kQ29tbWVudDsKLSAgICBpbnQzMl90IHR5cGU7Ci0gICAgU3RyaW5nMTYgaWRlbnQ7Ci0gICAgU3RyaW5nMTYgY29tbWVudDsKLSAgICBib29sIGhhc0Vycm9yczsKLSAgICBib29sIGFkZGVkOwotICAgIAotICAgIFBlbmRpbmdBdHRyaWJ1dGUoU3RyaW5nMTYgX3BhY2thZ2UsIGNvbnN0IHNwPEFhcHRGaWxlPiYgaW4sCi0gICAgICAgICAgICBSZXNYTUxUcmVlJiBibG9jaywgYm9vbCBfYXBwZW5kQ29tbWVudCkKLSAgICAgICAgOiBteVBhY2thZ2UoX3BhY2thZ2UpCi0gICAgICAgICwgc291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKQotICAgICAgICAsIGFwcGVuZENvbW1lbnQoX2FwcGVuZENvbW1lbnQpCi0gICAgICAgICwgdHlwZShSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZKQotICAgICAgICAsIGhhc0Vycm9ycyhmYWxzZSkKLSAgICAgICAgLCBhZGRlZChmYWxzZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHN0YXR1c190IGNyZWF0ZUlmTmVlZGVkKFJlc291cmNlVGFibGUqIG91dFRhYmxlKQotICAgIHsKLSAgICAgICAgaWYgKGFkZGVkIHx8IGhhc0Vycm9ycykgewotICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIGFkZGVkID0gdHJ1ZTsKLQotICAgICAgICBTdHJpbmcxNiBhdHRyMTYoImF0dHIiKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChvdXRUYWJsZS0+aGFzQmFnT3JFbnRyeShteVBhY2thZ2UsIGF0dHIxNiwgaWRlbnQpKSB7Ci0gICAgICAgICAgICBzb3VyY2VQb3MuZXJyb3IoIkF0dHJpYnV0ZSBcIiVzXCIgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGlkZW50KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNoYXIgbnVtYmVyU3RyWzE2XTsKLSAgICAgICAgc3ByaW50ZihudW1iZXJTdHIsICIlZCIsIHR5cGUpOwotICAgICAgICBzdGF0dXNfdCBlcnIgPSBvdXRUYWJsZS0+YWRkQmFnKHNvdXJjZVBvcywgbXlQYWNrYWdlLAotICAgICAgICAgICAgICAgIGF0dHIxNiwgaWRlbnQsIFN0cmluZzE2KCIiKSwKLSAgICAgICAgICAgICAgICBTdHJpbmcxNigiXnR5cGUiKSwKLSAgICAgICAgICAgICAgICBTdHJpbmcxNihudW1iZXJTdHIpLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0VGFibGUtPmFwcGVuZENvbW1lbnQobXlQYWNrYWdlLCBhdHRyMTYsIGlkZW50LCBjb21tZW50LCBhcHBlbmRDb21tZW50KTsKLSAgICAgICAgLy9wcmludGYoIkF0dHJpYnV0ZSAlcyBjb21tZW50OiAlc1xuIiwgU3RyaW5nOChpZGVudCkuc3RyaW5nKCksCi0gICAgICAgIC8vICAgICBTdHJpbmc4KGNvbW1lbnQpLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci19OwotCi1zdGF0aWMgc3RhdHVzX3QgY29tcGlsZUF0dHJpYnV0ZShjb25zdCBzcDxBYXB0RmlsZT4mIGluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzWE1MVHJlZSYgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbXlQYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZSogb3V0VGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiogb3V0SWRlbnQgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpblN0eWxlYWJsZSA9IGZhbHNlKQotewotICAgIFBlbmRpbmdBdHRyaWJ1dGUgYXR0cihteVBhY2thZ2UsIGluLCBibG9jaywgaW5TdHlsZWFibGUpOwotICAgIAotICAgIGNvbnN0IFN0cmluZzE2IGF0dHIxNigiYXR0ciIpOwotICAgIGNvbnN0IFN0cmluZzE2IGlkMTYoImlkIik7Ci0KLSAgICAvLyBBdHRyaWJ1dGUgdHlwZSBjb25zdGFudHMuCi0gICAgY29uc3QgU3RyaW5nMTYgZW51bTE2KCJlbnVtIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgZmxhZzE2KCJmbGFnIik7Ci0KLSAgICBSZXNYTUxUcmVlOjpldmVudF9jb2RlX3QgY29kZTsKLSAgICBzaXplX3QgbGVuOwotICAgIHN0YXR1c190IGVycjsKLSAgICAKLSAgICBzc2l6ZV90IGlkZW50SWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAibmFtZSIpOwotICAgIGlmIChpZGVudElkeCA+PSAwKSB7Ci0gICAgICAgIGF0dHIuaWRlbnQgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpZGVudElkeCwgJmxlbikpOwotICAgICAgICBpZiAob3V0SWRlbnQpIHsKLSAgICAgICAgICAgICpvdXRJZGVudCA9IGF0dHIuaWRlbnQ7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBhdHRyLnNvdXJjZVBvcy5lcnJvcigiQSAnbmFtZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8YXR0cj5cbiIpOwotICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgfQotCi0gICAgYXR0ci5jb21tZW50ID0gU3RyaW5nMTYoCi0gICAgICAgICAgICBibG9jay5nZXRDb21tZW50KCZsZW4pID8gYmxvY2suZ2V0Q29tbWVudCgmbGVuKSA6IG51bFN0cik7Ci0KLSAgICBzc2l6ZV90IHR5cGVJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJmb3JtYXQiKTsKLSAgICBpZiAodHlwZUlkeCA+PSAwKSB7Ci0gICAgICAgIFN0cmluZzE2IHR5cGVTdHIgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZSh0eXBlSWR4LCAmbGVuKSk7Ci0gICAgICAgIGF0dHIudHlwZSA9IHBhcnNlX2ZsYWdzKHR5cGVTdHIuc3RyaW5nKCksIHR5cGVTdHIuc2l6ZSgpLCBnRm9ybWF0RmxhZ3MpOwotICAgICAgICBpZiAoYXR0ci50eXBlID09IDApIHsKLSAgICAgICAgICAgIGF0dHIuc291cmNlUG9zLmVycm9yKCJUYWcgPGF0dHI+ICdmb3JtYXQnIGF0dHJpYnV0ZSB2YWx1ZSBcIiVzXCIgbm90IHZhbGlkXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHR5cGVTdHIpLnN0cmluZygpKTsKLSAgICAgICAgICAgIGF0dHIuaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBhdHRyLmNyZWF0ZUlmTmVlZGVkKG91dFRhYmxlKTsKLSAgICB9IGVsc2UgaWYgKCFpblN0eWxlYWJsZSkgewotICAgICAgICAvLyBBdHRyaWJ1dGUgZGVmaW5pdGlvbnMgb3V0c2lkZSBvZiBzdHlsZWFibGVzIGFsd2F5cyBkZWZpbmUgdGhlCi0gICAgICAgIC8vIGF0dHJpYnV0ZSBhcyBhIGdlbmVyaWMgdmFsdWUuCi0gICAgICAgIGF0dHIuY3JlYXRlSWZOZWVkZWQob3V0VGFibGUpOwotICAgIH0KLQotICAgIC8vcHJpbnRmKCJBdHRyaWJ1dGUgJXM6IHR5cGU9MHglMDh4XG4iLCBTdHJpbmc4KGF0dHIuaWRlbnQpLnN0cmluZygpLCBhdHRyLnR5cGUpOwotCi0gICAgc3NpemVfdCBtaW5JZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJtaW4iKTsKLSAgICBpZiAobWluSWR4ID49IDApIHsKLSAgICAgICAgU3RyaW5nMTYgdmFsID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUobWluSWR4LCAmbGVuKSk7Ci0gICAgICAgIGlmICghUmVzVGFibGU6OnN0cmluZ1RvSW50KHZhbC5zdHJpbmcoKSwgdmFsLnNpemUoKSwgTlVMTCkpIHsKLSAgICAgICAgICAgIGF0dHIuc291cmNlUG9zLmVycm9yKCJUYWcgPGF0dHI+ICdtaW4nIGF0dHJpYnV0ZSBtdXN0IGJlIGEgbnVtYmVyLCBub3QgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHZhbCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGF0dHIuY3JlYXRlSWZOZWVkZWQob3V0VGFibGUpOwotICAgICAgICBpZiAoIWF0dHIuaGFzRXJyb3JzKSB7Ci0gICAgICAgICAgICBlcnIgPSBvdXRUYWJsZS0+YWRkQmFnKGF0dHIuc291cmNlUG9zLCBteVBhY2thZ2UsIGF0dHIxNiwgYXR0ci5pZGVudCwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYoIiIpLCBTdHJpbmcxNigiXm1pbiIpLCBTdHJpbmcxNih2YWwpLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzc2l6ZV90IG1heElkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgIm1heCIpOwotICAgIGlmIChtYXhJZHggPj0gMCkgewotICAgICAgICBTdHJpbmcxNiB2YWwgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShtYXhJZHgsICZsZW4pKTsKLSAgICAgICAgaWYgKCFSZXNUYWJsZTo6c3RyaW5nVG9JbnQodmFsLnN0cmluZygpLCB2YWwuc2l6ZSgpLCBOVUxMKSkgewotICAgICAgICAgICAgYXR0ci5zb3VyY2VQb3MuZXJyb3IoIlRhZyA8YXR0cj4gJ21heCcgYXR0cmlidXRlIG11c3QgYmUgYSBudW1iZXIsIG5vdCBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgodmFsKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYXR0ci5jcmVhdGVJZk5lZWRlZChvdXRUYWJsZSk7Ci0gICAgICAgIGlmICghYXR0ci5oYXNFcnJvcnMpIHsKLSAgICAgICAgICAgIGVyciA9IG91dFRhYmxlLT5hZGRCYWcoYXR0ci5zb3VyY2VQb3MsIG15UGFja2FnZSwgYXR0cjE2LCBhdHRyLmlkZW50LAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNigiIiksIFN0cmluZzE2KCJebWF4IiksIFN0cmluZzE2KHZhbCksIE5VTEwsIE5VTEwpOwotICAgICAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKChtaW5JZHggPj0gMCB8fCBtYXhJZHggPj0gMCkgJiYgKGF0dHIudHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfSU5URUdFUikgPT0gMCkgewotICAgICAgICBhdHRyLnNvdXJjZVBvcy5lcnJvcigiVGFnIDxhdHRyPiBtdXN0IGhhdmUgZm9ybWF0PWludGVnZXIgYXR0cmlidXRlIGlmIHVzaW5nIG1heCBvciBtaW5cbiIpOwotICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgfQotCi0gICAgc3NpemVfdCBsMTBuSWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAibG9jYWxpemF0aW9uIik7Ci0gICAgaWYgKGwxMG5JZHggPj0gMCkgewotICAgICAgICBjb25zdCB1aW50MTZfdCogc3RyID0gYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUobDEwbklkeCwgJmxlbik7Ci0gICAgICAgIGJvb2wgZXJyb3I7Ci0gICAgICAgIHVpbnQzMl90IGwxMG5fcmVxdWlyZWQgPSBwYXJzZV9mbGFncyhzdHIsIGxlbiwgbDEwblJlcXVpcmVkRmxhZ3MsICZlcnJvcik7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgYXR0ci5zb3VyY2VQb3MuZXJyb3IoIlRhZyA8YXR0cj4gJ2xvY2FsaXphdGlvbicgYXR0cmlidXRlIHZhbHVlIFwiJXNcIiBub3QgdmFsaWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoc3RyKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYXR0ci5jcmVhdGVJZk5lZWRlZChvdXRUYWJsZSk7Ci0gICAgICAgIGlmICghYXR0ci5oYXNFcnJvcnMpIHsKLSAgICAgICAgICAgIGNoYXIgYnVmWzExXTsKLSAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJWQiLCBsMTBuX3JlcXVpcmVkKTsKLSAgICAgICAgICAgIGVyciA9IG91dFRhYmxlLT5hZGRCYWcoYXR0ci5zb3VyY2VQb3MsIG15UGFja2FnZSwgYXR0cjE2LCBhdHRyLmlkZW50LAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNigiIiksIFN0cmluZzE2KCJebDEwbiIpLCBTdHJpbmcxNihidWYpLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmcxNiBlbnVtT3JGbGFnc0NvbW1lbnQ7Ci0gICAgCi0gICAgd2hpbGUgKChjb2RlPWJsb2NrLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OlNUQVJUX1RBRykgewotICAgICAgICAgICAgdWludDMyX3QgbG9jYWxUeXBlID0gMDsKLSAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgZW51bTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgbG9jYWxUeXBlID0gUmVzVGFibGVfbWFwOjpUWVBFX0VOVU07Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBmbGFnMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBsb2NhbFR5cGUgPSBSZXNUYWJsZV9tYXA6OlRZUEVfRkxBR1M7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5lcnJvcigiVGFnIDwlcz4gY2FuIG5vdCBhcHBlYXIgaW5zaWRlIDxhdHRyPiwgb25seSA8ZW51bT4gb3IgPGZsYWc+XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdHRyLmNyZWF0ZUlmTmVlZGVkKG91dFRhYmxlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGF0dHIudHlwZSA9PSBSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm8gdHlwZSB3YXMgZXhwbGljaXRseSBzdGF0ZWQsIHNvIHN1cHBseWluZyBlbnVtIHRhZ3MKLSAgICAgICAgICAgICAgICAvLyBpbXBsaWNpdGx5IGNyZWF0ZXMgYW4gZW51bSBvciBmbGFnLgotICAgICAgICAgICAgICAgIGF0dHIudHlwZSA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoYXR0ci50eXBlJihSZXNUYWJsZV9tYXA6OlRZUEVfRU5VTXxSZXNUYWJsZV9tYXA6OlRZUEVfRkxBR1MpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Fzbid0IG9yaWdpbmFsbHkgc3BlY2lmaWVkIGFzIGFuIGVudW0sIHNvIHVwZGF0ZSBpdHMgdHlwZS4KLSAgICAgICAgICAgICAgICBhdHRyLnR5cGUgfD0gbG9jYWxUeXBlOwotICAgICAgICAgICAgICAgIGlmICghYXR0ci5oYXNFcnJvcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBudW1iZXJTdHJbMTZdOwotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG51bWJlclN0ciwgIiVkIiwgYXR0ci50eXBlKTsKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gb3V0VGFibGUtPmFkZEJhZyhTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15UGFja2FnZSwgYXR0cjE2LCBhdHRyLmlkZW50LCBTdHJpbmcxNigiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYoIl50eXBlIiksIFN0cmluZzE2KG51bWJlclN0ciksIE5VTEwsIE5VTEwsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCh1aW50MzJfdCkoYXR0ci50eXBlJihSZXNUYWJsZV9tYXA6OlRZUEVfRU5VTXxSZXNUYWJsZV9tYXA6OlRZUEVfRkxBR1MpKSAhPSBsb2NhbFR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAobG9jYWxUeXBlID09IFJlc1RhYmxlX21hcDo6VFlQRV9FTlVNKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZXJyb3IoIjxlbnVtPiBhdHRyaWJ1dGUgY2FuIG5vdCBiZSB1c2VkIGluc2lkZSBhIGZsYWdzIGZvcm1hdFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGF0dHIuaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmVycm9yKCI8ZmxhZz4gYXR0cmlidXRlIGNhbiBub3QgYmUgdXNlZCBpbnNpZGUgYSBlbnVtIGZvcm1hdFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGF0dHIuaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN0cmluZzE2IGl0ZW1JZGVudDsKLSAgICAgICAgICAgIHNzaXplX3QgaXRlbUlkZW50SWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAibmFtZSIpOwotICAgICAgICAgICAgaWYgKGl0ZW1JZGVudElkeCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaXRlbUlkZW50ID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaXRlbUlkZW50SWR4LCAmbGVuKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5lcnJvcigiQSAnbmFtZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8ZW51bT4gb3IgPGZsYWc+XG4iKTsKLSAgICAgICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN0cmluZzE2IHZhbHVlOwotICAgICAgICAgICAgc3NpemVfdCB2YWx1ZUlkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgInZhbHVlIik7Ci0gICAgICAgICAgICBpZiAodmFsdWVJZHggPj0gMCkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUodmFsdWVJZHgsICZsZW4pKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgLmVycm9yKCJBICd2YWx1ZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8ZW51bT4gb3IgPGZsYWc+XG4iKTsKLSAgICAgICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWF0dHIuaGFzRXJyb3JzICYmICFSZXNUYWJsZTo6c3RyaW5nVG9JbnQodmFsdWUuc3RyaW5nKCksIHZhbHVlLnNpemUoKSwgTlVMTCkpIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAuZXJyb3IoIlRhZyA8ZW51bT4gb3IgPGZsYWc+ICd2YWx1ZScgYXR0cmlidXRlIG11c3QgYmUgYSBudW1iZXIsIgotICAgICAgICAgICAgICAgICAgICAgICAgIiBub3QgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCh2YWx1ZSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGF0dHIuaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGFuIGlkIGlzIGRlZmluZWQgZm9yIHRoaXMgZW51bS9mbGFnIGlkZW50aWZpZXIuLi4KLSAgICAgICAgICAgIGlmICghYXR0ci5oYXNFcnJvcnMgJiYgIW91dFRhYmxlLT5oYXNCYWdPckVudHJ5KGl0ZW1JZGVudCwgJmlkMTYsICZteVBhY2thZ2UpKSB7Ci0gICAgICAgICAgICAgICAgZXJyID0gb3V0VGFibGUtPnN0YXJ0QmFnKFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15UGFja2FnZSwgaWQxNiwgaXRlbUlkZW50LCBTdHJpbmcxNigpLCBOVUxMKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF0dHIuaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghYXR0ci5oYXNFcnJvcnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoZW51bU9yRmxhZ3NDb21tZW50LnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVudW1PckZsYWdzQ29tbWVudC5hcHBlbmQobWF5T3JNdXN0KGF0dHIudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZV9tYXA6OlRZUEVfRU5VTXxSZXNUYWJsZV9tYXA6OlRZUEVfRkxBR1MpKTsKLSAgICAgICAgICAgICAgICAgICAgZW51bU9yRmxhZ3NDb21tZW50LmFwcGVuZCgoYXR0ci50eXBlJlJlc1RhYmxlX21hcDo6VFlQRV9FTlVNKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmcxNigiIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50IHZhbHVlcy4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcxNigiIGJlIG9uZSBvciBtb3JlIChzZXBhcmF0ZWQgYnkgJ3wnKSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50IHZhbHVlcy4iKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVudW1PckZsYWdzQ29tbWVudC5hcHBlbmQoU3RyaW5nMTYoIjwvcD5cbjx0YWJsZT5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8Y29sZ3JvdXAgYWxpZ249XCJsZWZ0XCIgLz5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8Y29sZ3JvdXAgYWxpZ249XCJsZWZ0XCIgLz5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8Y29sZ3JvdXAgYWxpZ249XCJsZWZ0XCIgLz5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dHI+PHRoPkNvbnN0YW50PC90aD48dGg+VmFsdWU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj4iKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVudW1PckZsYWdzQ29tbWVudC5hcHBlbmQoU3RyaW5nMTYoIlxuPHRyPjx0ZD48Y29kZT4iKSk7Ci0gICAgICAgICAgICAgICAgZW51bU9yRmxhZ3NDb21tZW50LmFwcGVuZChpdGVtSWRlbnQpOwotICAgICAgICAgICAgICAgIGVudW1PckZsYWdzQ29tbWVudC5hcHBlbmQoU3RyaW5nMTYoIjwvY29kZT48L3RkPjx0ZD4iKSk7Ci0gICAgICAgICAgICAgICAgZW51bU9yRmxhZ3NDb21tZW50LmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZW51bU9yRmxhZ3NDb21tZW50LmFwcGVuZChTdHJpbmcxNigiPC90ZD48dGQ+IikpOwotICAgICAgICAgICAgICAgIGlmIChibG9jay5nZXRDb21tZW50KCZsZW4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVudW1PckZsYWdzQ29tbWVudC5hcHBlbmQoU3RyaW5nMTYoYmxvY2suZ2V0Q29tbWVudCgmbGVuKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbnVtT3JGbGFnc0NvbW1lbnQuYXBwZW5kKFN0cmluZzE2KCI8L3RkPjwvdHI+IikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVyciA9IG91dFRhYmxlLT5hZGRCYWcoU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15UGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIxNiwgYXR0ci5pZGVudCwgU3RyaW5nMTYoIiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUlkZW50LCB2YWx1ZSwgTlVMTCwgTlVMTCwgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgYXR0cjE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGF0dHIudHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfRU5VTSkgIT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgZW51bTE2LnN0cmluZygpKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZXJyb3IoIkZvdW5kIHRhZyA8LyVzPiB3aGVyZSA8L2VudW0+IGlzIGV4cGVjdGVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGZsYWcxNi5zdHJpbmcoKSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmVycm9yKCJGb3VuZCB0YWcgPC8lcz4gd2hlcmUgPC9mbGFnPiBpcyBleHBlY3RlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoIWF0dHIuaGFzRXJyb3JzICYmIGF0dHIuYWRkZWQpIHsKLSAgICAgICAgYXBwZW5kVHlwZUluZm8ob3V0VGFibGUsIG15UGFja2FnZSwgYXR0cjE2LCBhdHRyLmlkZW50LCBhdHRyLnR5cGUsIGdGb3JtYXRGbGFncyk7Ci0gICAgfQotICAgIAotICAgIGlmICghYXR0ci5oYXNFcnJvcnMgJiYgZW51bU9yRmxhZ3NDb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgZW51bU9yRmxhZ3NDb21tZW50LmFwcGVuZChTdHJpbmcxNigiXG48L3RhYmxlPiIpKTsKLSAgICAgICAgb3V0VGFibGUtPmFwcGVuZFR5cGVDb21tZW50KG15UGFja2FnZSwgYXR0cjE2LCBhdHRyLmlkZW50LCBlbnVtT3JGbGFnc0NvbW1lbnQpOwotICAgIH0KLQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1ib29sIGxvY2FsZUlzRGVmaW5lZChjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZykKLXsKLSAgICByZXR1cm4gY29uZmlnLmxvY2FsZSA9PSAwOwotfQotCi1zdGF0dXNfdCBwYXJzZUFuZEFkZEJhZyhCdW5kbGUqIGJ1bmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBSZXNYTUxUcmVlKiBibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG15UGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBjdXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGlkZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHBhcmVudElkZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGl0ZW1JZGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgY3VyRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0Zvcm1hdHRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwcm9kdWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwc2V1ZG9sb2NhbGl6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgb3ZlcndyaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZSogb3V0VGFibGUpCi17Ci0gICAgc3RhdHVzX3QgZXJyOwotICAgIGNvbnN0IFN0cmluZzE2IGl0ZW0xNigiaXRlbSIpOwotICAgIAotICAgIFN0cmluZzE2IHN0cjsKLSAgICBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4gc3BhbnM7Ci0gICAgZXJyID0gcGFyc2VTdHlsZWRTdHJpbmcoYnVuZGxlLCBpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIGl0ZW0xNiwgJnN0ciwgJnNwYW5zLCBpc0Zvcm1hdHRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG9sb2NhbGl6ZSk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICAKLSAgICBOT0lTWShwcmludGYoIkFkZGluZyByZXNvdXJjZSBiYWcgZW50cnkgbD0lYyVjIGM9JWMlYyBvcmllbj0lZCBkPSVkICIKLSAgICAgICAgICAgICAgICAgIiBwaWQ9JXMsIGJhZz0lcywgaWQ9JXM6ICVzXG4iLAotICAgICAgICAgICAgICAgICBjb25maWcubGFuZ3VhZ2VbMF0sIGNvbmZpZy5sYW5ndWFnZVsxXSwKLSAgICAgICAgICAgICAgICAgY29uZmlnLmNvdW50cnlbMF0sIGNvbmZpZy5jb3VudHJ5WzFdLAotICAgICAgICAgICAgICAgICBjb25maWcub3JpZW50YXRpb24sIGNvbmZpZy5kZW5zaXR5LAotICAgICAgICAgICAgICAgICBTdHJpbmc4KHBhcmVudElkZW50KS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgU3RyaW5nOChpZGVudCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgIFN0cmluZzgoaXRlbUlkZW50KS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgU3RyaW5nOChzdHIpLnN0cmluZygpKSk7Ci0KLSAgICBlcnIgPSBvdXRUYWJsZS0+YWRkQmFnKFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLT5nZXRMaW5lTnVtYmVyKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlQYWNrYWdlLCBjdXJUeXBlLCBpZGVudCwgcGFyZW50SWRlbnQsIGl0ZW1JZGVudCwgc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwYW5zLCAmY29uZmlnLCBvdmVyd3JpdGUsIGZhbHNlLCBjdXJGb3JtYXQpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIHRydWUgaWYgbmVlZGxlIGlzIG9uZSBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0Ci0gKiBoYXlzdGFjaywgZmFsc2Ugb3RoZXJ3aXNlLgotICovCi1ib29sIGlzSW5Qcm9kdWN0TGlzdChjb25zdCBTdHJpbmcxNiYgbmVlZGxlLCBjb25zdCBTdHJpbmcxNiYgaGF5c3RhY2spIHsKLSAgICBjb25zdCBjaGFyMTZfdCAqbmVlZGxlMiA9IG5lZWRsZS5zdHJpbmcoKTsKLSAgICBjb25zdCBjaGFyMTZfdCAqaGF5c3RhY2syID0gaGF5c3RhY2suc3RyaW5nKCk7Ci0gICAgc2l6ZV90IG5lZWRsZXNpemUgPSBuZWVkbGUuc2l6ZSgpOwotCi0gICAgd2hpbGUgKCpoYXlzdGFjazIgIT0gJ1wwJykgewotICAgICAgICBpZiAoc3RybmNtcDE2KGhheXN0YWNrMiwgbmVlZGxlMiwgbmVlZGxlc2l6ZSkgPT0gMCkgewotICAgICAgICAgICAgaWYgKGhheXN0YWNrMltuZWVkbGVzaXplXSA9PSAnXDAnIHx8IGhheXN0YWNrMltuZWVkbGVzaXplXSA9PSAnLCcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlICgqaGF5c3RhY2syICE9ICdcMCcgJiYgKmhheXN0YWNrMiAhPSAnLCcpIHsKLSAgICAgICAgICAgIGhheXN0YWNrMisrOwotICAgICAgICB9Ci0gICAgICAgIGlmICgqaGF5c3RhY2syID09ICcsJykgewotICAgICAgICAgICAgaGF5c3RhY2syKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8qCi0gKiBBIHNpbXBsZSBjb250YWluZXIgdGhhdCBob2xkcyBhIHJlc291cmNlIHR5cGUgYW5kIG5hbWUuIEl0IGlzIG9yZGVyZWQgZmlyc3QgYnkgdHlwZSB0aGVuCi0gKiBieSBuYW1lLgotICovCi1zdHJ1Y3QgdHlwZV9pZGVudF9wYWlyX3QgewotICAgIFN0cmluZzE2IHR5cGU7Ci0gICAgU3RyaW5nMTYgaWRlbnQ7Ci0KLSAgICB0eXBlX2lkZW50X3BhaXJfdCgpIHsgfTsKLSAgICB0eXBlX2lkZW50X3BhaXJfdChjb25zdCBTdHJpbmcxNiYgdCwgY29uc3QgU3RyaW5nMTYmIGkpIDogdHlwZSh0KSwgaWRlbnQoaSkgeyB9Ci0gICAgdHlwZV9pZGVudF9wYWlyX3QoY29uc3QgdHlwZV9pZGVudF9wYWlyX3QmIG8pIDogdHlwZShvLnR5cGUpLCBpZGVudChvLmlkZW50KSB7IH0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciA8IChjb25zdCB0eXBlX2lkZW50X3BhaXJfdCYgbykgY29uc3QgewotICAgICAgICBpbnQgY21wID0gY29tcGFyZV90eXBlKHR5cGUsIG8udHlwZSk7Ci0gICAgICAgIGlmIChjbXAgPCAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChjbXAgPiAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RyaWN0bHlfb3JkZXJfdHlwZShpZGVudCwgby5pZGVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi0KLXN0YXR1c190IHBhcnNlQW5kQWRkRW50cnkoQnVuZGxlKiBidW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIGluLAotICAgICAgICAgICAgICAgICAgICAgICAgUmVzWE1MVHJlZSogYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBteVBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgY3VyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBpZGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBjdXJUYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGN1cklzU3R5bGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBjdXJGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzRm9ybWF0dGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHByb2R1Y3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHBzZXVkb2xvY2FsaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBvdmVyd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBLZXllZFZlY3Rvcjx0eXBlX2lkZW50X3BhaXJfdCwgYm9vbD4qIHNraXBwZWRSZXNvdXJjZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZSogb3V0VGFibGUpCi17Ci0gICAgc3RhdHVzX3QgZXJyOwotCi0gICAgU3RyaW5nMTYgc3RyOwotICAgIFZlY3RvcjxTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuPiBzcGFuczsKLSAgICBlcnIgPSBwYXJzZVN0eWxlZFN0cmluZyhidW5kbGUsIGluLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSwgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyVGFnLCAmc3RyLCBjdXJJc1N0eWxlZCA/ICZzcGFucyA6IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGb3JtYXR0ZWQsIHBzZXVkb2xvY2FsaXplKTsKLQotICAgIGlmIChlcnIgPCBOT19FUlJPUikgeyAKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIElmIGEgcHJvZHVjdCB0eXBlIHdhcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZQotICAgICAqIGFuZCBhbHNvIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgdHdvIGFyZSBub3QgdGhlIHNhbWUsCi0gICAgICogcmV0dXJuIHdpdGhvdXQgYWRkaW5nIHRoZSBzdHJpbmcuCi0gICAgICovCi0KLSAgICBjb25zdCBjaGFyICpidW5kbGVQcm9kdWN0ID0gYnVuZGxlLT5nZXRQcm9kdWN0KCk7Ci0gICAgaWYgKGJ1bmRsZVByb2R1Y3QgPT0gTlVMTCkgewotICAgICAgICBidW5kbGVQcm9kdWN0ID0gIiI7Ci0gICAgfQotCi0gICAgaWYgKHByb2R1Y3Quc2l6ZSgpICE9IDApIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogSWYgdGhlIGNvbW1hbmQtbGluZS1zcGVjaWZpZWQgcHJvZHVjdCBpcyBlbXB0eSwgb25seSAiZGVmYXVsdCIKLSAgICAgICAgICogbWF0Y2hlcy4gIE90aGVyIHZhcmlhbnRzIGFyZSBza2lwcGVkLiAgVGhpcyBpcyBzbyBnZW5lcmF0aW9uCi0gICAgICAgICAqIG9mIHRoZSBSLmphdmEgZmlsZSB3aGVuIHRoZSBwcm9kdWN0IGlzIG5vdCBrbm93biBpcyBwcmVkaWN0YWJsZS4KLSAgICAgICAgICovCi0KLSAgICAgICAgaWYgKGJ1bmRsZVByb2R1Y3RbMF0gPT0gJ1wwJykgewotICAgICAgICAgICAgaWYgKHN0cmNtcDE2KFN0cmluZzE2KCJkZWZhdWx0Iikuc3RyaW5nKCksIHByb2R1Y3Quc3RyaW5nKCkpICE9IDApIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIFRoaXMgc3RyaW5nIGhhcyBhIHByb2R1Y3Qgb3RoZXIgdGhhbiAnZGVmYXVsdCcuIERvIG5vdCBhZGQgaXQsCi0gICAgICAgICAgICAgICAgICogYnV0IHJlY29yZCBpdCBzbyB0aGF0IGlmIHdlIGRvIG5vdCBzZWUgdGhlIHNhbWUgc3RyaW5nIHdpdGgKLSAgICAgICAgICAgICAgICAgKiBwcm9kdWN0ICdkZWZhdWx0JyBvciBubyBwcm9kdWN0LCB0aGVuIHJlcG9ydCBhbiBlcnJvci4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBza2lwcGVkUmVzb3VyY2VOYW1lcy0+cmVwbGFjZVZhbHVlRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9pZGVudF9wYWlyX3QoY3VyVHlwZSwgaWRlbnQpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhlIGNvbW1hbmQtbGluZSBwcm9kdWN0IGlzIG5vdCBlbXB0eS4KLSAgICAgICAgICAgICAqIElmIHRoZSBwcm9kdWN0IGZvciB0aGlzIHN0cmluZyBpcyBvbiB0aGUgY29tbWFuZC1saW5lIGxpc3QsCi0gICAgICAgICAgICAgKiBpdCBtYXRjaGVzLiAgImRlZmF1bHQiIGFsc28gbWF0Y2hlcywgYnV0IG9ubHkgaWYgbm90aGluZwotICAgICAgICAgICAgICogZWxzZSBoYXMgbWF0Y2hlZCBhbHJlYWR5LgotICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIGlmIChpc0luUHJvZHVjdExpc3QocHJvZHVjdCwgU3RyaW5nMTYoYnVuZGxlUHJvZHVjdCkpKSB7Ci0gICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihTdHJpbmcxNigiZGVmYXVsdCIpLnN0cmluZygpLCBwcm9kdWN0LnN0cmluZygpKSA9PSAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICFvdXRUYWJsZS0+aGFzQmFnT3JFbnRyeShteVBhY2thZ2UsIGN1clR5cGUsIGlkZW50LCBjb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOT0lTWShwcmludGYoIkFkZGluZyByZXNvdXJjZSBlbnRyeSBsPSVjJWMgYz0lYyVjIG9yaWVuPSVkIGQ9JWQgaWQ9JXM6ICVzXG4iLAotICAgICAgICAgICAgICAgICBjb25maWcubGFuZ3VhZ2VbMF0sIGNvbmZpZy5sYW5ndWFnZVsxXSwKLSAgICAgICAgICAgICAgICAgY29uZmlnLmNvdW50cnlbMF0sIGNvbmZpZy5jb3VudHJ5WzFdLAotICAgICAgICAgICAgICAgICBjb25maWcub3JpZW50YXRpb24sIGNvbmZpZy5kZW5zaXR5LAotICAgICAgICAgICAgICAgICBTdHJpbmc4KGlkZW50KS5zdHJpbmcoKSwgU3RyaW5nOChzdHIpLnN0cmluZygpKSk7Ci0KLSAgICBlcnIgPSBvdXRUYWJsZS0+YWRkRW50cnkoU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2stPmdldExpbmVOdW1iZXIoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15UGFja2FnZSwgY3VyVHlwZSwgaWRlbnQsIHN0ciwgJnNwYW5zLCAmY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgY3VyRm9ybWF0LCBvdmVyd3JpdGUpOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdHVzX3QgY29tcGlsZVJlc291cmNlRmlsZShCdW5kbGUqIGJ1bmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+JiBpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnJiBkZWZQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgb3ZlcndyaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiBvdXRUYWJsZSkKLXsKLSAgICBSZXNYTUxUcmVlIGJsb2NrOwotICAgIHN0YXR1c190IGVyciA9IHBhcnNlWE1MUmVzb3VyY2UoaW4sICZibG9jaywgZmFsc2UsIHRydWUpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICAvLyBUb3AtbGV2ZWwgdGFnLgotICAgIGNvbnN0IFN0cmluZzE2IHJlc291cmNlczE2KCJyZXNvdXJjZXMiKTsKLQotICAgIC8vIElkZW50aWZpZXIgZGVjbGFyYXRpb24gdGFncy4KLSAgICBjb25zdCBTdHJpbmcxNiBkZWNsYXJlX3N0eWxlYWJsZTE2KCJkZWNsYXJlLXN0eWxlYWJsZSIpOwotICAgIGNvbnN0IFN0cmluZzE2IGF0dHIxNigiYXR0ciIpOwotCi0gICAgLy8gRGF0YSBjcmVhdGlvbiBvcmdhbml6YXRpb25hbCB0YWdzLgotICAgIGNvbnN0IFN0cmluZzE2IHN0cmluZzE2KCJzdHJpbmciKTsKLSAgICBjb25zdCBTdHJpbmcxNiBkcmF3YWJsZTE2KCJkcmF3YWJsZSIpOwotICAgIGNvbnN0IFN0cmluZzE2IGNvbG9yMTYoImNvbG9yIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgYm9vbDE2KCJib29sIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgaW50ZWdlcjE2KCJpbnRlZ2VyIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgZGltZW4xNigiZGltZW4iKTsKLSAgICBjb25zdCBTdHJpbmcxNiBmcmFjdGlvbjE2KCJmcmFjdGlvbiIpOwotICAgIGNvbnN0IFN0cmluZzE2IHN0eWxlMTYoInN0eWxlIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgcGx1cmFsczE2KCJwbHVyYWxzIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgYXJyYXkxNigiYXJyYXkiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBzdHJpbmdfYXJyYXkxNigic3RyaW5nLWFycmF5Iik7Ci0gICAgY29uc3QgU3RyaW5nMTYgaW50ZWdlcl9hcnJheTE2KCJpbnRlZ2VyLWFycmF5Iik7Ci0gICAgY29uc3QgU3RyaW5nMTYgcHVibGljMTYoInB1YmxpYyIpOwotICAgIGNvbnN0IFN0cmluZzE2IHB1YmxpY19wYWRkaW5nMTYoInB1YmxpYy1wYWRkaW5nIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgcHJpdmF0ZV9zeW1ib2xzMTYoInByaXZhdGUtc3ltYm9scyIpOwotICAgIGNvbnN0IFN0cmluZzE2IGphdmFfc3ltYm9sMTYoImphdmEtc3ltYm9sIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgYWRkX3Jlc291cmNlMTYoImFkZC1yZXNvdXJjZSIpOwotICAgIGNvbnN0IFN0cmluZzE2IHNraXAxNigic2tpcCIpOwotICAgIGNvbnN0IFN0cmluZzE2IGVhdF9jb21tZW50MTYoImVhdC1jb21tZW50Iik7Ci0KLSAgICAvLyBEYXRhIGNyZWF0aW9uIHRhZ3MuCi0gICAgY29uc3QgU3RyaW5nMTYgYmFnMTYoImJhZyIpOwotICAgIGNvbnN0IFN0cmluZzE2IGl0ZW0xNigiaXRlbSIpOwotCi0gICAgLy8gQXR0cmlidXRlIHR5cGUgY29uc3RhbnRzLgotICAgIGNvbnN0IFN0cmluZzE2IGVudW0xNigiZW51bSIpOwotCi0gICAgLy8gcGx1cmFsIHZhbHVlcwotICAgIGNvbnN0IFN0cmluZzE2IG90aGVyMTYoIm90aGVyIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgcXVhbnRpdHlPdGhlcjE2KCJeb3RoZXIiKTsKLSAgICBjb25zdCBTdHJpbmcxNiB6ZXJvMTYoInplcm8iKTsKLSAgICBjb25zdCBTdHJpbmcxNiBxdWFudGl0eVplcm8xNigiXnplcm8iKTsKLSAgICBjb25zdCBTdHJpbmcxNiBvbmUxNigib25lIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgcXVhbnRpdHlPbmUxNigiXm9uZSIpOwotICAgIGNvbnN0IFN0cmluZzE2IHR3bzE2KCJ0d28iKTsKLSAgICBjb25zdCBTdHJpbmcxNiBxdWFudGl0eVR3bzE2KCJedHdvIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgZmV3MTYoImZldyIpOwotICAgIGNvbnN0IFN0cmluZzE2IHF1YW50aXR5RmV3MTYoIl5mZXciKTsKLSAgICBjb25zdCBTdHJpbmcxNiBtYW55MTYoIm1hbnkiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBxdWFudGl0eU1hbnkxNigiXm1hbnkiKTsKLQotICAgIC8vIHVzZWZ1bCBhdHRyaWJ1dGUgbmFtZXMgYW5kIHNwZWNpYWwgdmFsdWVzCi0gICAgY29uc3QgU3RyaW5nMTYgbmFtZTE2KCJuYW1lIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgdHJhbnNsYXRhYmxlMTYoInRyYW5zbGF0YWJsZSIpOwotICAgIGNvbnN0IFN0cmluZzE2IGZvcm1hdHRlZDE2KCJmb3JtYXR0ZWQiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBmYWxzZTE2KCJmYWxzZSIpOwotCi0gICAgY29uc3QgU3RyaW5nMTYgbXlQYWNrYWdlKGFzc2V0cy0+Z2V0UGFja2FnZSgpKTsKLQotICAgIGJvb2wgaGFzRXJyb3JzID0gZmFsc2U7Ci0KLSAgICBib29sIGZpbGVJc1RyYW5zbGF0YWJsZSA9IHRydWU7Ci0gICAgaWYgKHN0cnN0cihpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCksICJkb25vdHRyYW5zbGF0ZSIpICE9IE5VTEwpIHsKLSAgICAgICAgZmlsZUlzVHJhbnNsYXRhYmxlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzE2LCB1aW50MzJfdD4gbmV4dFB1YmxpY0lkKDApOwotCi0gICAgLy8gU3RvcmVzIHRoZSByZXNvdXJjZSBuYW1lcyB0aGF0IHdlcmUgc2tpcHBlZC4gVHlwaWNhbGx5IHRoaXMgaGFwcGVucyB3aGVuCi0gICAgLy8gQUFQVCBpcyBpbnZva2VkIHdpdGhvdXQgYSBwcm9kdWN0IHNwZWNpZmllZCBhbmQgYSByZXNvdXJjZSBoYXMgbm8KLSAgICAvLyAnZGVmYXVsdCcgcHJvZHVjdCBhdHRyaWJ1dGUuCi0gICAgS2V5ZWRWZWN0b3I8dHlwZV9pZGVudF9wYWlyX3QsIGJvb2w+IHNraXBwZWRSZXNvdXJjZU5hbWVzOwotCi0gICAgUmVzWE1MVHJlZTo6ZXZlbnRfY29kZV90IGNvZGU7Ci0gICAgZG8gewotICAgICAgICBjb2RlID0gYmxvY2submV4dCgpOwotICAgIH0gd2hpbGUgKGNvZGUgPT0gUmVzWE1MVHJlZTo6U1RBUlRfTkFNRVNQQUNFKTsKLQotICAgIHNpemVfdCBsZW47Ci0gICAgaWYgKGNvZGUgIT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgIk5vIHN0YXJ0IHRhZyBmb3VuZFxuIik7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHJlc291cmNlczE2LnN0cmluZygpKSAhPSAwKSB7Ci0gICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgIkludmFsaWQgc3RhcnQgdGFnICVzXG4iLCBTdHJpbmc4KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIFJlc1RhYmxlX2NvbmZpZyBjdXJQYXJhbXMoZGVmUGFyYW1zKTsKLQotICAgIFJlc1RhYmxlX2NvbmZpZyBwc2V1ZG9QYXJhbXMoY3VyUGFyYW1zKTsKLSAgICAgICAgcHNldWRvUGFyYW1zLmxhbmd1YWdlWzBdID0gJ3onOwotICAgICAgICBwc2V1ZG9QYXJhbXMubGFuZ3VhZ2VbMV0gPSAneic7Ci0gICAgICAgIHBzZXVkb1BhcmFtcy5jb3VudHJ5WzBdID0gJ1onOwotICAgICAgICBwc2V1ZG9QYXJhbXMuY291bnRyeVsxXSA9ICdaJzsKLQotICAgIHdoaWxlICgoY29kZT1ibG9jay5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2KiBjdXJUYWcgPSBOVUxMOwotICAgICAgICAgICAgU3RyaW5nMTYgY3VyVHlwZTsKLSAgICAgICAgICAgIGludDMyX3QgY3VyRm9ybWF0ID0gUmVzVGFibGVfbWFwOjpUWVBFX0FOWTsKLSAgICAgICAgICAgIGJvb2wgY3VySXNCYWcgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgY3VySXNCYWdSZXBsYWNlT25PdmVyd3JpdGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgY3VySXNTdHlsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgY3VySXNQc2V1ZG9sb2NhbGl6YWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBjdXJJc0Zvcm1hdHRlZCA9IGZpbGVJc1RyYW5zbGF0YWJsZTsKLSAgICAgICAgICAgIGJvb2wgbG9jYWxIYXNFcnJvcnMgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBza2lwMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgc2tpcDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGVhdF9jb21tZW50MTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgZWF0X2NvbW1lbnQxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBwdWJsaWMxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyBzcmNQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RyaW5nMTYgdHlwZTsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IHR5cGVJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJ0eXBlIik7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVJZHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiQSAndHlwZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8cHVibGljPlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdHlwZSA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKHR5cGVJZHgsICZsZW4pKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZzE2IG5hbWU7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCBuYW1lSWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAibmFtZSIpOwotICAgICAgICAgICAgICAgIGlmIChuYW1lSWR4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIkEgJ25hbWUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPHB1YmxpYz5cbiIpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5hbWUgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShuYW1lSWR4LCAmbGVuKSk7Ci0KLSAgICAgICAgICAgICAgICB1aW50MzJfdCBpZGVudCA9IDA7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCBpZGVudElkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgImlkIik7Ci0gICAgICAgICAgICAgICAgaWYgKGlkZW50SWR4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIGlkZW50U3RyID0gYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaWRlbnRJZHgsICZsZW4pOwotICAgICAgICAgICAgICAgICAgICBSZXNfdmFsdWUgaWRlbnRWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFSZXNUYWJsZTo6c3RyaW5nVG9JbnQoaWRlbnRTdHIsIGxlbiwgJmlkZW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIkdpdmVuICdpZCcgYXR0cmlidXRlIGlzIG5vdCBhbiBpbnRlZ2VyOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpZGVudElkeCwgJmxlbikpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50ID0gaWRlbnRWYWx1ZS5kYXRhOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFB1YmxpY0lkLnJlcGxhY2VWYWx1ZUZvcih0eXBlLCBpZGVudCsxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dFB1YmxpY0lkLmluZGV4T2ZLZXkodHlwZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiTm8gJ2lkJyBhdHRyaWJ1dGUgc3VwcGxpZWQgPHB1YmxpYz4sIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYW5kIG5vIHByZXZpb3VzIGlkIGRlZmluZWQgaW4gdGhpcyBmaWxlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFsb2NhbEhhc0Vycm9ycykgewotICAgICAgICAgICAgICAgICAgICBpZGVudCA9IG5leHRQdWJsaWNJZC52YWx1ZUZvcih0eXBlKTsKLSAgICAgICAgICAgICAgICAgICAgbmV4dFB1YmxpY0lkLnJlcGxhY2VWYWx1ZUZvcih0eXBlLCBpZGVudCsxKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWxvY2FsSGFzRXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVyciA9IG91dFRhYmxlLT5hZGRQdWJsaWMoc3JjUG9zLCBteVBhY2thZ2UsIHR5cGUsIG5hbWUsIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFsb2NhbEhhc0Vycm9ycykgewotICAgICAgICAgICAgICAgICAgICBzcDxBYXB0U3ltYm9scz4gc3ltYm9scyA9IGFzc2V0cy0+Z2V0U3ltYm9sc0ZvcihTdHJpbmc4KCJSIikpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9scyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzID0gc3ltYm9scy0+YWRkTmVzdGVkU3ltYm9sKFN0cmluZzgodHlwZSksIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbHMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scy0+bWFrZVN5bWJvbFB1YmxpYyhTdHJpbmc4KG5hbWUpLCBzcmNQb3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYgY29tbWVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5nZXRDb21tZW50KCZsZW4pID8gYmxvY2suZ2V0Q29tbWVudCgmbGVuKSA6IG51bFN0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzLT5hcHBlbmRDb21tZW50KFN0cmluZzgobmFtZSksIGNvbW1lbnQsIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgc3ltYm9scyFcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2hpbGUgKChjb2RlPWJsb2NrLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgcHVibGljMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgcHVibGljX3BhZGRpbmcxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyBzcmNQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RyaW5nMTYgdHlwZTsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IHR5cGVJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJ0eXBlIik7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVJZHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiQSAndHlwZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8cHVibGljLXBhZGRpbmc+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0eXBlID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUodHlwZUlkeCwgJmxlbikpOwotCi0gICAgICAgICAgICAgICAgU3RyaW5nMTYgbmFtZTsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IG5hbWVJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJuYW1lIik7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVJZHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiQSAnbmFtZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8cHVibGljLXBhZGRpbmc+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUobmFtZUlkeCwgJmxlbikpOwotCi0gICAgICAgICAgICAgICAgdWludDMyX3Qgc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgIHNzaXplX3Qgc3RhcnRJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJzdGFydCIpOwotICAgICAgICAgICAgICAgIGlmIChzdGFydElkeCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBzdGFydFN0ciA9IGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKHN0YXJ0SWR4LCAmbGVuKTsKLSAgICAgICAgICAgICAgICAgICAgUmVzX3ZhbHVlIHN0YXJ0VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUmVzVGFibGU6OnN0cmluZ1RvSW50KHN0YXJ0U3RyLCBsZW4sICZzdGFydFZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJHaXZlbiAnc3RhcnQnIGF0dHJpYnV0ZSBpcyBub3QgYW4gaW50ZWdlcjogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoc3RhcnRJZHgsICZsZW4pKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0VmFsdWUuZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dFB1YmxpY0lkLmluZGV4T2ZLZXkodHlwZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiTm8gJ3N0YXJ0JyBhdHRyaWJ1dGUgc3VwcGxpZWQgPHB1YmxpYy1wYWRkaW5nPiwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhbmQgbm8gcHJldmlvdXMgaWQgZGVmaW5lZCBpbiB0aGlzIGZpbGUuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxvY2FsSGFzRXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbmV4dFB1YmxpY0lkLnZhbHVlRm9yKHR5cGUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHVpbnQzMl90IGVuZCA9IDA7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCBlbmRJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJlbmQiKTsKLSAgICAgICAgICAgICAgICBpZiAoZW5kSWR4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIGVuZFN0ciA9IGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGVuZElkeCwgJmxlbik7Ci0gICAgICAgICAgICAgICAgICAgIFJlc192YWx1ZSBlbmRWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFSZXNUYWJsZTo6c3RyaW5nVG9JbnQoZW5kU3RyLCBsZW4sICZlbmRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiR2l2ZW4gJ2VuZCcgYXR0cmlidXRlIGlzIG5vdCBhbiBpbnRlZ2VyOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShlbmRJZHgsICZsZW4pKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBlbmRWYWx1ZS5kYXRhOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJObyAnZW5kJyBhdHRyaWJ1dGUgc3VwcGxpZWQgPHB1YmxpYy1wYWRkaW5nPlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZW5kID49IHN0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG5leHRQdWJsaWNJZC5yZXBsYWNlVmFsdWVGb3IodHlwZSwgZW5kKzEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiUGFkZGluZyBzdGFydCAnJXVsJyBpcyBhZnRlciBlbmQgJyV1bCdcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RyaW5nMTYgY29tbWVudCgKLSAgICAgICAgICAgICAgICAgICAgYmxvY2suZ2V0Q29tbWVudCgmbGVuKSA/IGJsb2NrLmdldENvbW1lbnQoJmxlbikgOiBudWxTdHIpOwotICAgICAgICAgICAgICAgIGZvciAodWludDMyX3QgY3VySWRlbnQ9c3RhcnQ7IGN1cklkZW50PD1lbmQ7IGN1cklkZW50KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsSGFzRXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiBjdXJOYW1lKG5hbWUpOwotICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1Zls2NF07Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJWQiLCAoaW50KShlbmQtY3VySWRlbnQrMSkpOwotICAgICAgICAgICAgICAgICAgICBjdXJOYW1lLmFwcGVuZChTdHJpbmcxNihidWYpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IG91dFRhYmxlLT5hZGRFbnRyeShzcmNQb3MsIG15UGFja2FnZSwgdHlwZSwgY3VyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2KCJwYWRkaW5nIiksIE5VTEwsICZjdXJQYXJhbXMsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfbWFwOjpUWVBFX1NUUklORywgb3ZlcndyaXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlcnIgPSBvdXRUYWJsZS0+YWRkUHVibGljKHNyY1BvcywgbXlQYWNrYWdlLCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ck5hbWUsIGN1cklkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzcDxBYXB0U3ltYm9scz4gc3ltYm9scyA9IGFzc2V0cy0+Z2V0U3ltYm9sc0ZvcihTdHJpbmc4KCJSIikpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9scyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzID0gc3ltYm9scy0+YWRkTmVzdGVkU3ltYm9sKFN0cmluZzgodHlwZSksIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbHMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scy0+bWFrZVN5bWJvbFB1YmxpYyhTdHJpbmc4KGN1ck5hbWUpLCBzcmNQb3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scy0+YXBwZW5kQ29tbWVudChTdHJpbmc4KGN1ck5hbWUpLCBjb21tZW50LCBzcmNQb3MpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJVbmFibGUgdG8gY3JlYXRlIHN5bWJvbHMhXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHdoaWxlICgoY29kZT1ibG9jay5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHB1YmxpY19wYWRkaW5nMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgcHJpdmF0ZV9zeW1ib2xzMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcxNiBwa2c7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCBwa2dJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJwYWNrYWdlIik7Ci0gICAgICAgICAgICAgICAgaWYgKHBrZ0lkeCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSAncGFja2FnZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8cHJpdmF0ZS1zeW1ib2xzPlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGtnID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUocGtnSWR4LCAmbGVuKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFsb2NhbEhhc0Vycm9ycykgewotICAgICAgICAgICAgICAgICAgICBhc3NldHMtPnNldFN5bWJvbHNQcml2YXRlUGFja2FnZShTdHJpbmc4KHBrZykpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHdoaWxlICgoY29kZT1ibG9jay5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHByaXZhdGVfc3ltYm9sczE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGphdmFfc3ltYm9sMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3Mgc3JjUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZzE2IHR5cGU7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCB0eXBlSWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAidHlwZSIpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlSWR4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIkEgJ3R5cGUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPHB1YmxpYz5cbiIpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHR5cGUgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZSh0eXBlSWR4LCAmbGVuKSk7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcxNiBuYW1lOwotICAgICAgICAgICAgICAgIHNzaXplX3QgbmFtZUlkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgIm5hbWUiKTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZUlkeCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJBICduYW1lJyBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgZm9yIDxwdWJsaWM+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUobmFtZUlkeCwgJmxlbikpOwotCi0gICAgICAgICAgICAgICAgc3A8QWFwdFN5bWJvbHM+IHN5bWJvbHMgPSBhc3NldHMtPmdldEphdmFTeW1ib2xzRm9yKFN0cmluZzgoIlIiKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHN5bWJvbHMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBzeW1ib2xzID0gc3ltYm9scy0+YWRkTmVzdGVkU3ltYm9sKFN0cmluZzgodHlwZSksIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzeW1ib2xzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9scy0+bWFrZVN5bWJvbEphdmFTeW1ib2woU3RyaW5nOChuYW1lKSwgc3JjUG9zKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYgY29tbWVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmdldENvbW1lbnQoJmxlbikgPyBibG9jay5nZXRDb21tZW50KCZsZW4pIDogbnVsU3RyKTsKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9scy0+YXBwZW5kQ29tbWVudChTdHJpbmc4KG5hbWUpLCBjb21tZW50LCBzcmNQb3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBzeW1ib2xzIVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBqYXZhX3N5bWJvbDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgYWRkX3Jlc291cmNlMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3Mgc3JjUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZzE2IHR5cGVOYW1lOwotICAgICAgICAgICAgICAgIHNzaXplX3QgdHlwZUlkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgInR5cGUiKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZUlkeCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJBICd0eXBlJyBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgZm9yIDxhZGQtcmVzb3VyY2U+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0eXBlTmFtZSA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKHR5cGVJZHgsICZsZW4pKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZzE2IG5hbWU7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCBuYW1lSWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAibmFtZSIpOwotICAgICAgICAgICAgICAgIGlmIChuYW1lSWR4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIkEgJ25hbWUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPGFkZC1yZXNvdXJjZT5cbiIpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5hbWUgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShuYW1lSWR4LCAmbGVuKSk7Ci0KLSAgICAgICAgICAgICAgICBvdXRUYWJsZS0+Y2FuQWRkRW50cnkoc3JjUG9zLCBteVBhY2thZ2UsIHR5cGVOYW1lLCBuYW1lKTsKLQotICAgICAgICAgICAgICAgIHdoaWxlICgoY29kZT1ibG9jay5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGFkZF9yZXNvdXJjZTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBkZWNsYXJlX3N0eWxlYWJsZTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zIHNyY1Bvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZzE2IGlkZW50OwotICAgICAgICAgICAgICAgIHNzaXplX3QgaWRlbnRJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJuYW1lIik7Ci0gICAgICAgICAgICAgICAgaWYgKGlkZW50SWR4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIkEgJ25hbWUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPGRlY2xhcmUtc3R5bGVhYmxlPlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWRlbnQgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpZGVudElkeCwgJmxlbikpOwotCi0gICAgICAgICAgICAgICAgc3A8QWFwdFN5bWJvbHM+IHN5bWJvbHMgPSBhc3NldHMtPmdldFN5bWJvbHNGb3IoU3RyaW5nOCgiUiIpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWxvY2FsSGFzRXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2xzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMgPSBzeW1ib2xzLT5hZGROZXN0ZWRTeW1ib2woU3RyaW5nOCgic3R5bGVhYmxlIiksIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3A8QWFwdFN5bWJvbHM+IHN0eWxlU3ltYm9scyA9IHN5bWJvbHM7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2xzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMgPSBzeW1ib2xzLT5hZGROZXN0ZWRTeW1ib2woU3RyaW5nOChpZGVudCksIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbHMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJVbmFibGUgdG8gY3JlYXRlIHN5bWJvbHMhXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiBjb21tZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2suZ2V0Q29tbWVudCgmbGVuKSA/IGJsb2NrLmdldENvbW1lbnQoJmxlbikgOiBudWxTdHIpOwotICAgICAgICAgICAgICAgICAgICBzdHlsZVN5bWJvbHMtPmFwcGVuZENvbW1lbnQoU3RyaW5nOChpZGVudCksIGNvbW1lbnQsIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9scyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2hpbGUgKChjb2RlPWJsb2NrLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OlNUQVJUX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBza2lwMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBza2lwMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGVhdF9jb21tZW50MTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBlYXRfY29tbWVudDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBhdHRyMTYuc3RyaW5nKCkpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhZyA8JXM+IGNhbiBub3QgYXBwZWFyIGluc2lkZSA8ZGVjbGFyZS1zdHlsZWFibGU+LCBvbmx5IDxhdHRyPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYgY29tbWVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5nZXRDb21tZW50KCZsZW4pID8gYmxvY2suZ2V0Q29tbWVudCgmbGVuKSA6IG51bFN0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiBpdGVtSWRlbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBjb21waWxlQXR0cmlidXRlKGluLCBibG9jaywgbXlQYWNrYWdlLCBvdXRUYWJsZSwgJml0ZW1JZGVudCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9scyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zIHNyY1BvcyhTdHJpbmc4KGluLT5nZXRQcmludGFibGVTb3VyY2UoKSksIGJsb2NrLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scy0+YWRkU3ltYm9sKFN0cmluZzgoaXRlbUlkZW50KSwgMCwgc3JjUG9zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzLT5hcHBlbmRDb21tZW50KFN0cmluZzgoaXRlbUlkZW50KSwgY29tbWVudCwgc3JjUG9zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiQXR0cmlidXRlICVzIGNvbW1lbnQ6ICVzXG4iLCBTdHJpbmc4KGl0ZW1JZGVudCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIFN0cmluZzgoY29tbWVudCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBkZWNsYXJlX3N0eWxlYWJsZTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGb3VuZCB0YWcgPC8lcz4gd2hlcmUgPC9hdHRyPiBpcyBleHBlY3RlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGF0dHIxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGVyciA9IGNvbXBpbGVBdHRyaWJ1dGUoaW4sIGJsb2NrLCBteVBhY2thZ2UsIG91dFRhYmxlLCBOVUxMKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBpdGVtMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBjdXJUYWcgPSAmaXRlbTE2OwotICAgICAgICAgICAgICAgIHNzaXplX3QgYXR0cmkgPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJ0eXBlIik7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY3VyVHlwZSA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGF0dHJpLCAmbGVuKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNzaXplX3QgZm9ybWF0SWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAiZm9ybWF0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXRJZHggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYgZm9ybWF0U3RyID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdElkeCwgJmxlbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VyRm9ybWF0ID0gcGFyc2VfZmxhZ3MoZm9ybWF0U3RyLnN0cmluZygpLCBmb3JtYXRTdHIuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0Zvcm1hdEZsYWdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJGb3JtYXQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFnIDxpdGVtPiAnZm9ybWF0JyBhdHRyaWJ1dGUgdmFsdWUgXCIlc1wiIG5vdCB2YWxpZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZm9ybWF0U3RyKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSAndHlwZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8aXRlbT5cbiIpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN1cklzU3R5bGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHN0cmluZzE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGUgZXhpc3RlbmNlIGFuZCBsb2NhbGUgb2YgZXZlcnkgc3RyaW5nIHdlIHByb2Nlc3MKLSAgICAgICAgICAgICAgICBjaGFyIHJhd0xvY2FsZVsxNl07Ci0gICAgICAgICAgICAgICAgY3VyUGFyYW1zLmdldExvY2FsZShyYXdMb2NhbGUpOwotICAgICAgICAgICAgICAgIFN0cmluZzggbG9jYWxlKHJhd0xvY2FsZSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgbmFtZTsKLSAgICAgICAgICAgICAgICBTdHJpbmcxNiB0cmFuc2xhdGFibGU7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgZm9ybWF0dGVkOwotCi0gICAgICAgICAgICAgICAgc2l6ZV90IG4gPSBibG9jay5nZXRBdHRyaWJ1dGVDb3VudCgpOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBhdHRyID0gYmxvY2suZ2V0QXR0cmlidXRlTmFtZShpLCAmbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGF0dHIsIG5hbWUxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5zZXRUbyhibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpLCAmbGVuZ3RoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYXR0ciwgdHJhbnNsYXRhYmxlMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0YWJsZS5zZXRUbyhibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpLCAmbGVuZ3RoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYXR0ciwgZm9ybWF0dGVkMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZC5zZXRUbyhibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpLCAmbGVuZ3RoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5hbWUuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRhYmxlID09IGZhbHNlMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cklzRm9ybWF0dGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnRyYW5zbGF0YWJsZSBzdHJpbmdzIG11c3Qgb25seSBleGlzdCBpbiB0aGUgZGVmYXVsdCBbZW1wdHldIGxvY2FsZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJhYXB0OiB3YXJuaW5nOiBzdHJpbmcgJyVzJyBpbiAlcyBtYXJrZWQgdW50cmFuc2xhdGFibGUgYnV0IGV4aXN0cyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaW4gbG9jYWxlICclcydcbiIsIFN0cmluZzgobmFtZSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGUtPmdldFJlc291cmNlU291cmNlRGlycygpWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgZW1wdHkgYmxvY2s6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBhZGQgdW50cmFuc2xhdGFibGUgc3RyaW5ncyB0byB0aGUgbG9jYWxpemF0aW9uIHRhYmxlOyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2F5IGlmIHdlIGxhdGVyIHNlZSBsb2NhbGl6YXRpb25zIG9mIHRoZW0sIHRoZXknbGwgYmUgZmxhZ2dlZCBhcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmluZyBubyBkZWZhdWx0IHRyYW5zbGF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0VGFibGUtPmFkZExvY2FsaXphdGlvbihuYW1lLCBsb2NhbGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlZCA9PSBmYWxzZTE2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJJc0Zvcm1hdHRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY3VyVGFnID0gJnN0cmluZzE2OwotICAgICAgICAgICAgICAgIGN1clR5cGUgPSBzdHJpbmcxNjsKLSAgICAgICAgICAgICAgICBjdXJGb3JtYXQgPSBSZXNUYWJsZV9tYXA6OlRZUEVfUkVGRVJFTkNFfFJlc1RhYmxlX21hcDo6VFlQRV9TVFJJTkc7Ci0gICAgICAgICAgICAgICAgY3VySXNTdHlsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGN1cklzUHNldWRvbG9jYWxpemFibGUgPSAodHJhbnNsYXRhYmxlICE9IGZhbHNlMTYpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgZHJhd2FibGUxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGN1clRhZyA9ICZkcmF3YWJsZTE2OwotICAgICAgICAgICAgICAgIGN1clR5cGUgPSBkcmF3YWJsZTE2OwotICAgICAgICAgICAgICAgIGN1ckZvcm1hdCA9IFJlc1RhYmxlX21hcDo6VFlQRV9SRUZFUkVOQ0V8UmVzVGFibGVfbWFwOjpUWVBFX0NPTE9SOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgY29sb3IxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGN1clRhZyA9ICZjb2xvcjE2OwotICAgICAgICAgICAgICAgIGN1clR5cGUgPSBjb2xvcjE2OwotICAgICAgICAgICAgICAgIGN1ckZvcm1hdCA9IFJlc1RhYmxlX21hcDo6VFlQRV9SRUZFUkVOQ0V8UmVzVGFibGVfbWFwOjpUWVBFX0NPTE9SOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgYm9vbDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY3VyVGFnID0gJmJvb2wxNjsKLSAgICAgICAgICAgICAgICBjdXJUeXBlID0gYm9vbDE2OwotICAgICAgICAgICAgICAgIGN1ckZvcm1hdCA9IFJlc1RhYmxlX21hcDo6VFlQRV9SRUZFUkVOQ0V8UmVzVGFibGVfbWFwOjpUWVBFX0JPT0xFQU47Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBpbnRlZ2VyMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBjdXJUYWcgPSAmaW50ZWdlcjE2OwotICAgICAgICAgICAgICAgIGN1clR5cGUgPSBpbnRlZ2VyMTY7Ci0gICAgICAgICAgICAgICAgY3VyRm9ybWF0ID0gUmVzVGFibGVfbWFwOjpUWVBFX1JFRkVSRU5DRXxSZXNUYWJsZV9tYXA6OlRZUEVfSU5URUdFUjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGRpbWVuMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBjdXJUYWcgPSAmZGltZW4xNjsKLSAgICAgICAgICAgICAgICBjdXJUeXBlID0gZGltZW4xNjsKLSAgICAgICAgICAgICAgICBjdXJGb3JtYXQgPSBSZXNUYWJsZV9tYXA6OlRZUEVfUkVGRVJFTkNFfFJlc1RhYmxlX21hcDo6VFlQRV9ESU1FTlNJT047Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBmcmFjdGlvbjE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY3VyVGFnID0gJmZyYWN0aW9uMTY7Ci0gICAgICAgICAgICAgICAgY3VyVHlwZSA9IGZyYWN0aW9uMTY7Ci0gICAgICAgICAgICAgICAgY3VyRm9ybWF0ID0gUmVzVGFibGVfbWFwOjpUWVBFX1JFRkVSRU5DRXxSZXNUYWJsZV9tYXA6OlRZUEVfRlJBQ1RJT047Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBiYWcxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGN1clRhZyA9ICZiYWcxNjsKLSAgICAgICAgICAgICAgICBjdXJJc0JhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCBhdHRyaSA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgInR5cGUiKTsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmkgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBjdXJUeXBlID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoYXR0cmksICZsZW4pKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBICd0eXBlJyBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgZm9yIDxiYWc+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHN0eWxlMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBjdXJUYWcgPSAmc3R5bGUxNjsKLSAgICAgICAgICAgICAgICBjdXJUeXBlID0gc3R5bGUxNjsKLSAgICAgICAgICAgICAgICBjdXJJc0JhZyA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBwbHVyYWxzMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBjdXJUYWcgPSAmcGx1cmFsczE2OwotICAgICAgICAgICAgICAgIGN1clR5cGUgPSBwbHVyYWxzMTY7Ci0gICAgICAgICAgICAgICAgY3VySXNCYWcgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgYXJyYXkxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGN1clRhZyA9ICZhcnJheTE2OwotICAgICAgICAgICAgICAgIGN1clR5cGUgPSBhcnJheTE2OwotICAgICAgICAgICAgICAgIGN1cklzQmFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjdXJJc0JhZ1JlcGxhY2VPbk92ZXJ3cml0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCBmb3JtYXRJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJmb3JtYXQiKTsKLSAgICAgICAgICAgICAgICBpZiAoZm9ybWF0SWR4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYgZm9ybWF0U3RyID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0SWR4LCAmbGVuKSk7Ci0gICAgICAgICAgICAgICAgICAgIGN1ckZvcm1hdCA9IHBhcnNlX2ZsYWdzKGZvcm1hdFN0ci5zdHJpbmcoKSwgZm9ybWF0U3RyLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0Zvcm1hdEZsYWdzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckZvcm1hdCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFnIDxhcnJheT4gJ2Zvcm1hdCcgYXR0cmlidXRlIHZhbHVlIFwiJXNcIiBub3QgdmFsaWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZm9ybWF0U3RyKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBzdHJpbmdfYXJyYXkxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlc2Ugc3RyaW5ncyBuZWVkIHZhbGlkIGZvcm1hdHMuCi0gICAgICAgICAgICAgICAgLy8gKHNpbXBsaWZpZWQgZm9ybSBvZiB3aGF0IHN0cmluZzE2IGRvZXMgYWJvdmUpCi0gICAgICAgICAgICAgICAgc2l6ZV90IG4gPSBibG9jay5nZXRBdHRyaWJ1dGVDb3VudCgpOwotCi0gICAgICAgICAgICAgICAgLy8gUHNldWRvbG9jYWxpemFibGUgYnkgZGVmYXVsdCwgdW5sZXNzIHRoaXMgc3RyaW5nIGFycmF5IGlzbid0Ci0gICAgICAgICAgICAgICAgLy8gdHJhbnNsYXRhYmxlLgotICAgICAgICAgICAgICAgIGN1cklzUHNldWRvbG9jYWxpemFibGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBhdHRyID0gYmxvY2suZ2V0QXR0cmlidXRlTmFtZShpLCAmbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGF0dHIsIHRyYW5zbGF0YWJsZTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCogdmFsdWUgPSBibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpLCAmbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNih2YWx1ZSwgZmFsc2UxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cklzUHNldWRvbG9jYWxpemFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihhdHRyLCBmb3JtYXR0ZWQxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIHZhbHVlID0gYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaSwgJmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wMTYodmFsdWUsIGZhbHNlMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJJc0Zvcm1hdHRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY3VyVGFnID0gJnN0cmluZ19hcnJheTE2OwotICAgICAgICAgICAgICAgIGN1clR5cGUgPSBhcnJheTE2OwotICAgICAgICAgICAgICAgIGN1ckZvcm1hdCA9IFJlc1RhYmxlX21hcDo6VFlQRV9SRUZFUkVOQ0V8UmVzVGFibGVfbWFwOjpUWVBFX1NUUklORzsKLSAgICAgICAgICAgICAgICBjdXJJc0JhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY3VySXNCYWdSZXBsYWNlT25PdmVyd3JpdGUgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgaW50ZWdlcl9hcnJheTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY3VyVGFnID0gJmludGVnZXJfYXJyYXkxNjsKLSAgICAgICAgICAgICAgICBjdXJUeXBlID0gYXJyYXkxNjsKLSAgICAgICAgICAgICAgICBjdXJGb3JtYXQgPSBSZXNUYWJsZV9tYXA6OlRZUEVfUkVGRVJFTkNFfFJlc1RhYmxlX21hcDo6VFlQRV9JTlRFR0VSOwotICAgICAgICAgICAgICAgIGN1cklzQmFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjdXJJc0JhZ1JlcGxhY2VPbk92ZXJ3cml0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiRm91bmQgdGFnICVzIHdoZXJlIGl0ZW0gaXMgZXhwZWN0ZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN0cmluZzE2IGlkZW50OwotICAgICAgICAgICAgc3NpemVfdCBpZGVudElkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgIm5hbWUiKTsKLSAgICAgICAgICAgIGlmIChpZGVudElkeCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWRlbnQgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpZGVudElkeCwgJmxlbikpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgIkEgJ25hbWUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPCVzPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoKmN1clRhZykuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nMTYgcHJvZHVjdDsKLSAgICAgICAgICAgIGlkZW50SWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAicHJvZHVjdCIpOwotICAgICAgICAgICAgaWYgKGlkZW50SWR4ID49IDApIHsKLSAgICAgICAgICAgICAgICBwcm9kdWN0ID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaWRlbnRJZHgsICZsZW4pKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nMTYgY29tbWVudChibG9jay5nZXRDb21tZW50KCZsZW4pID8gYmxvY2suZ2V0Q29tbWVudCgmbGVuKSA6IG51bFN0cik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjdXJJc0JhZykgewotICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHBhcmVudCBvZiB0aGlzIGJhZy4uLgotICAgICAgICAgICAgICAgIFN0cmluZzE2IHBhcmVudElkZW50OwotICAgICAgICAgICAgICAgIHNzaXplX3QgcGFyZW50SWRlbnRJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJwYXJlbnQiKTsKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50SWRlbnRJZHggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZGVudCA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKHBhcmVudElkZW50SWR4LCAmbGVuKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBzZXAgPSBpZGVudC5maW5kTGFzdCgnLicpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2VwID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkZW50LnNldFRvKGlkZW50LCBzZXApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFsb2NhbEhhc0Vycm9ycykgewotICAgICAgICAgICAgICAgICAgICBlcnIgPSBvdXRUYWJsZS0+c3RhcnRCYWcoU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5nZXRMaW5lTnVtYmVyKCkpLCBteVBhY2thZ2UsIGN1clR5cGUsIGlkZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkZW50LCAmY3VyUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZSwgY3VySXNCYWdSZXBsYWNlT25PdmVyd3JpdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3NpemVfdCBlbG1JbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgY2hhciBlbG1JbmRleFN0clsxNF07Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChjb2RlPWJsb2NrLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OlNUQVJUX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBpdGVtMTYuc3RyaW5nKCkpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhZyA8JXM+IGNhbiBub3QgYXBwZWFyIGluc2lkZSA8JXM+LCBvbmx5IDxpdGVtPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCgqY3VyVGFnKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2IGl0ZW1JZGVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJUeXBlID09IGFycmF5MTYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGVsbUluZGV4U3RyLCAiXmluZGV4XyVkIiwgKGludCllbG1JbmRleCsrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtSWRlbnQgPSBTdHJpbmcxNihlbG1JbmRleFN0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1clR5cGUgPT0gcGx1cmFsczE2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBpdGVtSWRlbnRJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJxdWFudGl0eSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtSWRlbnRJZHggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiBxdWFudGl0eTE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGl0ZW1JZGVudElkeCwgJmxlbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbnRpdHkxNiA9PSBvdGhlcjE2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtSWRlbnQgPSBxdWFudGl0eU90aGVyMTY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVhbnRpdHkxNiA9PSB6ZXJvMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZGVudCA9IHF1YW50aXR5WmVybzE2OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YW50aXR5MTYgPT0gb25lMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZGVudCA9IHF1YW50aXR5T25lMTY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVhbnRpdHkxNiA9PSB0d28xNikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUlkZW50ID0gcXVhbnRpdHlUd28xNjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFudGl0eTE2ID09IGZldzE2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtSWRlbnQgPSBxdWFudGl0eUZldzE2OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YW50aXR5MTYgPT0gbWFueTE2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtSWRlbnQgPSBxdWFudGl0eU1hbnkxNjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsICdxdWFudGl0eScgYXR0cmlidXRlIGlzIDxpdGVtPiBpbnNpZGUgPHBsdXJhbHM+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgJ3F1YW50aXR5JyBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgZm9yIDxpdGVtPiBpbnNpZGUgPHBsdXJhbHM+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBpdGVtSWRlbnRJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJuYW1lIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1JZGVudElkeCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZGVudCA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGl0ZW1JZGVudElkeCwgJmxlbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgJ25hbWUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPGl0ZW0+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgUmVzWE1MUGFyc2VyOjpSZXNYTUxQb3NpdGlvbiBwYXJzZXJQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmdldFBvc2l0aW9uKCZwYXJzZXJQb3NpdGlvbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHBhcnNlQW5kQWRkQmFnKGJ1bmRsZSwgaW4sICZibG9jaywgY3VyUGFyYW1zLCBteVBhY2thZ2UsIGN1clR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LCBwYXJlbnRJZGVudCwgaXRlbUlkZW50LCBjdXJGb3JtYXQsIGN1cklzRm9ybWF0dGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LCBmYWxzZSwgb3ZlcndyaXRlLCBvdXRUYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cklzUHNldWRvbG9jYWxpemFibGUgJiYgbG9jYWxlSXNEZWZpbmVkKGN1clBhcmFtcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGJ1bmRsZS0+Z2V0UHNldWRvbG9jYWxpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwc2V1ZG9sb2NhbGl6ZSBoZXJlCi0jaWYgMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5zZXRQb3NpdGlvbihwYXJzZXJQb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHBhcnNlQW5kQWRkQmFnKGJ1bmRsZSwgaW4sICZibG9jaywgcHNldWRvUGFyYW1zLCBteVBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyVHlwZSwgaWRlbnQsIHBhcmVudElkZW50LCBpdGVtSWRlbnQsIGN1ckZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJJc0Zvcm1hdHRlZCwgcHJvZHVjdCwgdHJ1ZSwgb3ZlcndyaXRlLCBvdXRUYWJsZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgY3VyVGFnLT5zdHJpbmcoKSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm91bmQgdGFnIDwvJXM+IHdoZXJlIDwvJXM+IGlzIGV4cGVjdGVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KCpjdXJUYWcpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBSZXNYTUxQYXJzZXI6OlJlc1hNTFBvc2l0aW9uIHBhcnNlclBvc2l0aW9uOwotICAgICAgICAgICAgICAgIGJsb2NrLmdldFBvc2l0aW9uKCZwYXJzZXJQb3NpdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBlcnIgPSBwYXJzZUFuZEFkZEVudHJ5KGJ1bmRsZSwgaW4sICZibG9jaywgY3VyUGFyYW1zLCBteVBhY2thZ2UsIGN1clR5cGUsIGlkZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgKmN1clRhZywgY3VySXNTdHlsZWQsIGN1ckZvcm1hdCwgY3VySXNGb3JtYXR0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LCBmYWxzZSwgb3ZlcndyaXRlLCAmc2tpcHBlZFJlc291cmNlTmFtZXMsIG91dFRhYmxlKTsKLQotICAgICAgICAgICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgeyAvLyBXaHkgZXJyIDwgTk9fRVJST1IgaW5zdGVhZCBvZiBlcnIgIT0gTk9fRVJST1I/Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJJc1BzZXVkb2xvY2FsaXphYmxlICYmIGxvY2FsZUlzRGVmaW5lZChjdXJQYXJhbXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYnVuZGxlLT5nZXRQc2V1ZG9sb2NhbGl6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBwc2V1ZG9sb2NhbGl6ZSBoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay5zZXRQb3NpdGlvbihwYXJzZXJQb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBwYXJzZUFuZEFkZEVudHJ5KGJ1bmRsZSwgaW4sICZibG9jaywgcHNldWRvUGFyYW1zLCBteVBhY2thZ2UsIGN1clR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LCAqY3VyVGFnLCBjdXJJc1N0eWxlZCwgY3VyRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJJc0Zvcm1hdHRlZCwgcHJvZHVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgb3ZlcndyaXRlLCAmc2tpcHBlZFJlc291cmNlTmFtZXMsIG91dFRhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSNpZiAwCi0gICAgICAgICAgICBpZiAoY29tbWVudC5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJDb21tZW50IGZvciBAJXM6JXMvJXM6ICVzXG4iLCBTdHJpbmc4KG15UGFja2FnZSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoY3VyVHlwZSkuc3RyaW5nKCksIFN0cmluZzgoaWRlbnQpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGNvbW1lbnQpLnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgaWYgKCFsb2NhbEhhc0Vycm9ycykgewotICAgICAgICAgICAgICAgIG91dFRhYmxlLT5hcHBlbmRDb21tZW50KG15UGFja2FnZSwgY3VyVHlwZSwgaWRlbnQsIGNvbW1lbnQsIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgcmVzb3VyY2VzMTYuc3RyaW5nKCkpICE9IDApIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZW5kIHRhZyAlc1xuIiwgU3RyaW5nOChibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6U1RBUlRfTkFNRVNQQUNFIHx8IGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX05BTUVTUEFDRSkgewotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6VEVYVCkgewotICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShibG9jay5nZXRUZXh0KCZsZW4pKSkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkZvdW5kIHRleHQgXCIlc1wiIHdoZXJlIGl0ZW0gdGFnIGlzIGV4cGVjdGVkXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGJsb2NrLmdldFRleHQoJmxlbikpLnN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRm9yIGV2ZXJ5IHJlc291cmNlIGRlZmluZWQsIHRoZXJlIG11c3QgYmUgZXhpc3Qgb25lIHZhcmlhbnQgd2l0aCBhIHByb2R1Y3QgYXR0cmlidXRlCi0gICAgLy8gc2V0IHRvICdkZWZhdWx0JyAob3Igbm8gcHJvZHVjdCBhdHRyaWJ1dGUgYXQgYWxsKS4KLSAgICAvLyBXZSBjaGVjayB0byBzZWUgdGhhdCBmb3IgZXZlcnkgcmVzb3VyY2UgdGhhdCB3YXMgaWdub3JlZCBiZWNhdXNlIG9mIGEgbWlzbWF0Y2hlZAotICAgIC8vIHByb2R1Y3QgYXR0cmlidXRlLCBzb21lIHByb2R1Y3QgdmFyaWFudCBvZiB0aGF0IHJlc291cmNlIHdhcyBwcm9jZXNzZWQuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBza2lwcGVkUmVzb3VyY2VOYW1lcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoc2tpcHBlZFJlc291cmNlTmFtZXNbaV0pIHsKLSAgICAgICAgICAgIGNvbnN0IHR5cGVfaWRlbnRfcGFpcl90JiBwID0gc2tpcHBlZFJlc291cmNlTmFtZXMua2V5QXQoaSk7Ci0gICAgICAgICAgICBpZiAoIW91dFRhYmxlLT5oYXNCYWdPckVudHJ5KG15UGFja2FnZSwgcC50eXBlLCBwLmlkZW50KSkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJ1bmRsZVByb2R1Y3QgPQotICAgICAgICAgICAgICAgICAgICAgICAgKGJ1bmRsZS0+Z2V0UHJvZHVjdCgpID09IE5VTEwpID8gIiIgOiBidW5kbGUtPmdldFByb2R1Y3QoKTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkluIHJlc291cmNlIGZpbGUgJXM6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgY3VyUGFyYW1zLnRvU3RyaW5nKCkuc3RyaW5nKCkpOwotCi0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcdCVzICclcycgZG9lcyBub3QgbWF0Y2ggcHJvZHVjdCAlcy5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICJcdFlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gaW5jbHVkZSBhICdkZWZhdWx0JyBwcm9kdWN0IHZhcmlhbnQiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIG9mIHRoZSByZXNvdXJjZS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHAudHlwZSkuc3RyaW5nKCksIFN0cmluZzgocC5pZGVudCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVQcm9kdWN0WzBdID09IDAgPyAiZGVmYXVsdCIgOiBidW5kbGVQcm9kdWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBoYXNFcnJvcnMgPyBVTktOT1dOX0VSUk9SIDogTk9fRVJST1I7Ci19Ci0KLVJlc291cmNlVGFibGU6OlJlc291cmNlVGFibGUoQnVuZGxlKiBidW5kbGUsIGNvbnN0IFN0cmluZzE2JiBhc3NldHNQYWNrYWdlKQotICAgIDogbUFzc2V0c1BhY2thZ2UoYXNzZXRzUGFja2FnZSksIG1OZXh0UGFja2FnZUlkKDEpLCBtSGF2ZUFwcFBhY2thZ2UoZmFsc2UpLAotICAgICAgbUlzQXBwUGFja2FnZSghYnVuZGxlLT5nZXRFeHRlbmRpbmcoKSksCi0gICAgICBtTnVtTG9jYWwoMCksCi0gICAgICBtQnVuZGxlKGJ1bmRsZSkKLXsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6YWRkSW5jbHVkZWRSZXNvdXJjZXMoQnVuZGxlKiBidW5kbGUsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMpCi17Ci0gICAgc3RhdHVzX3QgZXJyID0gYXNzZXRzLT5idWlsZEluY2x1ZGVkUmVzb3VyY2VzKGJ1bmRsZSk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIC8vIEZvciBmdXR1cmUgcmVmZXJlbmNlIHRvIGluY2x1ZGVkIHJlc291cmNlcy4KLSAgICBtQXNzZXRzID0gYXNzZXRzOwotCi0gICAgY29uc3QgUmVzVGFibGUmIGluY2wgPSBhc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCk7Ci0KLSAgICAvLyBSZXRyaWV2ZSBhbGwgdGhlIHBhY2thZ2VzLgotICAgIGNvbnN0IHNpemVfdCBOID0gaW5jbC5nZXRCYXNlUGFja2FnZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgcGhhc2U9MDsgcGhhc2U8MjsgcGhhc2UrKykgewotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBTdHJpbmcxNiBuYW1lKGluY2wuZ2V0QmFzZVBhY2thZ2VOYW1lKGkpKTsKLSAgICAgICAgICAgIHVpbnQzMl90IGlkID0gaW5jbC5nZXRCYXNlUGFja2FnZUlkKGkpOwotICAgICAgICAgICAgLy8gRmlyc3QgdGltZSB0aHJvdWdoOiBvbmx5IGFkZCBiYXNlIHBhY2thZ2VzIChpZAotICAgICAgICAgICAgLy8gaXMgbm90IDApOyBzZWNvbmQgdGltZSB0aHJvdWdoIGFkZCB0aGUgb3RoZXIKLSAgICAgICAgICAgIC8vIHBhY2thZ2VzLgotICAgICAgICAgICAgaWYgKHBoYXNlICE9IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoaWQgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIGJhc2UgcGFja2FnZXMgLS0gYWxyZWFkeSBvbmUuCi0gICAgICAgICAgICAgICAgICAgIGlkID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBBc3NpZ24gYSBkeW5hbWljIGlkLgotICAgICAgICAgICAgICAgICAgICBpZCA9IG1OZXh0UGFja2FnZUlkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaWQgIT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChpZCA9PSAxMjcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1IYXZlQXBwUGFja2FnZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbmNsdWRlZCByZXNvdXJjZXMgaGF2ZSB0d28gYXBwbGljYXRpb24gcGFja2FnZXMhXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1IYXZlQXBwUGFja2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtTmV4dFBhY2thZ2VJZCA+IGlkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW5jbHVkZWQgYmFzZSBwYWNrYWdlIElEICVkIGFscmVhZHkgaW4gdXNlIVxuIiwgaWQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaWQgIT0gMCkgewotICAgICAgICAgICAgICAgIE5PSVNZKHByaW50ZigiSW5jbHVkaW5nIHBhY2thZ2UgJXMgd2l0aCBJRD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSwgaWQpKTsKLSAgICAgICAgICAgICAgICBzcDxQYWNrYWdlPiBwID0gbmV3IFBhY2thZ2UobmFtZSwgaWQpOwotICAgICAgICAgICAgICAgIG1QYWNrYWdlcy5hZGQobmFtZSwgcCk7Ci0gICAgICAgICAgICAgICAgbU9yZGVyZWRQYWNrYWdlcy5hZGQocCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaWQgPj0gbU5leHRQYWNrYWdlSWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbU5leHRQYWNrYWdlSWQgPSBpZCsxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEV2ZXJ5IHJlc291cmNlIHRhYmxlIGFsd2F5cyBoYXMgb25lIGZpcnN0IGVudHJ5LCB0aGUgYmFnIGF0dHJpYnV0ZXMuCi0gICAgY29uc3QgU291cmNlUG9zIHVua25vd24oU3RyaW5nOCgiPz8/PyIpLCAwKTsKLSAgICBzcDxUeXBlPiBhdHRyID0gZ2V0VHlwZShtQXNzZXRzUGFja2FnZSwgU3RyaW5nMTYoImF0dHIiKSwgdW5rbm93bik7Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OmFkZFB1YmxpYyhjb25zdCBTb3VyY2VQb3MmIHNvdXJjZVBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBpZGVudCkKLXsKLSAgICB1aW50MzJfdCByaWQgPSBtQXNzZXRzLT5nZXRJbmNsdWRlZFJlc291cmNlcygpCi0gICAgICAgIC5pZGVudGlmaWVyRm9yTmFtZShuYW1lLnN0cmluZygpLCBuYW1lLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuc3RyaW5nKCksIHR5cGUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS5zdHJpbmcoKSwgcGFja2FnZS5zaXplKCkpOwotICAgIGlmIChyaWQgIT0gMCkgewotICAgICAgICBzb3VyY2VQb3MuZXJyb3IoIkVycm9yIGRlY2xhcmluZyBwdWJsaWMgcmVzb3VyY2UgJXMvJXMgZm9yIGluY2x1ZGVkIHBhY2thZ2UgJXNcbiIsCi0gICAgICAgICAgICAgICAgU3RyaW5nOCh0eXBlKS5zdHJpbmcoKSwgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBTdHJpbmc4KHBhY2thZ2UpLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgc3A8VHlwZT4gdCA9IGdldFR5cGUocGFja2FnZSwgdHlwZSwgc291cmNlUG9zKTsKLSAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICByZXR1cm4gdC0+YWRkUHVibGljKHNvdXJjZVBvcywgbmFtZSwgaWRlbnQpOwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjphZGRFbnRyeShjb25zdCBTb3VyY2VQb3MmIHNvdXJjZVBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuPiogc3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcqIHBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgZG9TZXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBvdmVyd3JpdGUpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIGFkZGluZyBlbnRyaWVzIGluIG90aGVyIHBhY2thZ2VzLi4uICBmb3Igbm93IHdlIGRvCi0gICAgLy8gbm90aGluZy4gIFdlIG5lZWQgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGhlcmUgdG8gc3VwcG9ydCBza2lubmluZy4KLSAgICB1aW50MzJfdCByaWQgPSBtQXNzZXRzLT5nZXRJbmNsdWRlZFJlc291cmNlcygpCi0gICAgICAgIC5pZGVudGlmaWVyRm9yTmFtZShuYW1lLnN0cmluZygpLCBuYW1lLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuc3RyaW5nKCksIHR5cGUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS5zdHJpbmcoKSwgcGFja2FnZS5zaXplKCkpOwotICAgIGlmIChyaWQgIT0gMCkgewotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotICAgIAotI2lmIDAKLSAgICBpZiAobmFtZSA9PSBTdHJpbmcxNigibGVmdCIpKSB7Ci0gICAgICAgIHByaW50ZigiQWRkaW5nIGVudHJ5IGxlZnQ6IGZpbGU9JXMsIGxpbmU9JWQsIHR5cGU9JXMsIHZhbHVlPSVzXG4iLAotICAgICAgICAgICAgICAgc291cmNlUG9zLmZpbGUuc3RyaW5nKCksIHNvdXJjZVBvcy5saW5lLCBTdHJpbmc4KHR5cGUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgU3RyaW5nOCh2YWx1ZSkuc3RyaW5nKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgc3A8RW50cnk+IGUgPSBnZXRFbnRyeShwYWNrYWdlLCB0eXBlLCBuYW1lLCBzb3VyY2VQb3MsIG92ZXJ3cml0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcywgZG9TZXRJbmRleCk7Ci0gICAgaWYgKGUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgc3RhdHVzX3QgZXJyID0gZS0+c2V0SXRlbShzb3VyY2VQb3MsIHZhbHVlLCBzdHlsZSwgZm9ybWF0LCBvdmVyd3JpdGUpOwotICAgIGlmIChlcnIgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgbU51bUxvY2FsKys7Ci0gICAgfQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OnN0YXJ0QmFnKGNvbnN0IFNvdXJjZVBvcyYgc291cmNlUG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGJhZ1BhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvdmVybGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlLCBib29sIGlzSWQpCi17Ci0gICAgc3RhdHVzX3QgcmVzdWx0ID0gTk9fRVJST1I7Ci0KLSAgICAvLyBDaGVjayBmb3IgYWRkaW5nIGVudHJpZXMgaW4gb3RoZXIgcGFja2FnZXMuLi4gIGZvciBub3cgd2UgZG8KLSAgICAvLyBub3RoaW5nLiAgV2UgbmVlZCB0byBkbyB0aGUgcmlnaHQgdGhpbmcgaGVyZSB0byBzdXBwb3J0IHNraW5uaW5nLgotICAgIHVpbnQzMl90IHJpZCA9IG1Bc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkKLSAgICAuaWRlbnRpZmllckZvck5hbWUobmFtZS5zdHJpbmcoKSwgbmFtZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgIHR5cGUuc3RyaW5nKCksIHR5cGUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLnN0cmluZygpLCBwYWNrYWdlLnNpemUoKSk7Ci0gICAgaWYgKHJpZCAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0gICAgCi0jaWYgMAotICAgIGlmIChuYW1lID09IFN0cmluZzE2KCJsZWZ0IikpIHsKLSAgICAgICAgcHJpbnRmKCJBZGRpbmcgYmFnIGxlZnQ6IGZpbGU9JXMsIGxpbmU9JWQsIHR5cGU9JXNcbiIsCi0gICAgICAgICAgICAgICBzb3VyY2VQb3MuZmlsZS5zdHJpaW5nKCksIHNvdXJjZVBvcy5saW5lLCBTdHJpbmc4KHR5cGUpLnN0cmluZygpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAob3ZlcmxheSAmJiAhbUJ1bmRsZS0+Z2V0QXV0b0FkZE92ZXJsYXkoKSAmJiAhaGFzQmFnT3JFbnRyeShwYWNrYWdlLCB0eXBlLCBuYW1lKSkgewotICAgICAgICBib29sIGNhbkFkZCA9IGZhbHNlOwotICAgICAgICBzcDxQYWNrYWdlPiBwID0gbVBhY2thZ2VzLnZhbHVlRm9yKHBhY2thZ2UpOwotICAgICAgICBpZiAocCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBzcDxUeXBlPiB0ID0gcC0+Z2V0VHlwZXMoKS52YWx1ZUZvcih0eXBlKTsKLSAgICAgICAgICAgIGlmICh0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAodC0+Z2V0Q2FuQWRkRW50cmllcygpLmluZGV4T2YobmFtZSkgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBjYW5BZGQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWNhbkFkZCkgewotICAgICAgICAgICAgc291cmNlUG9zLmVycm9yKCJSZXNvdXJjZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGluIG92ZXJsYXkgYXQgJyVzJzsgdXNlIDxhZGQtcmVzb3VyY2U+IHRvIGFkZC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLSAgICBzcDxFbnRyeT4gZSA9IGdldEVudHJ5KHBhY2thZ2UsIHR5cGUsIG5hbWUsIHNvdXJjZVBvcywgb3ZlcmxheSwgcGFyYW1zKTsKLSAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICAKLSAgICAvLyBJZiBhIHBhcmVudCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgc2V0IGl0LgotICAgIGlmIChiYWdQYXJlbnQuc2l6ZSgpID4gMCkgewotICAgICAgICBlLT5zZXRQYXJlbnQoYmFnUGFyZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoKHJlc3VsdCA9IGUtPm1ha2VJdEFCYWcoc291cmNlUG9zKSkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBpZiAob3ZlcmxheSAmJiByZXBsYWNlKSB7IAotICAgICAgICByZXR1cm4gZS0+ZW1wdHlCYWcoc291cmNlUG9zKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6YWRkQmFnKGNvbnN0IFNvdXJjZVBvcyYgc291cmNlUG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBiYWdQYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGJhZ0tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+KiBzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcqIHBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlcGxhY2UsIGJvb2wgaXNJZCwgY29uc3QgaW50MzJfdCBmb3JtYXQpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIGFkZGluZyBlbnRyaWVzIGluIG90aGVyIHBhY2thZ2VzLi4uICBmb3Igbm93IHdlIGRvCi0gICAgLy8gbm90aGluZy4gIFdlIG5lZWQgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGhlcmUgdG8gc3VwcG9ydCBza2lubmluZy4KLSAgICB1aW50MzJfdCByaWQgPSBtQXNzZXRzLT5nZXRJbmNsdWRlZFJlc291cmNlcygpCi0gICAgICAgIC5pZGVudGlmaWVyRm9yTmFtZShuYW1lLnN0cmluZygpLCBuYW1lLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuc3RyaW5nKCksIHR5cGUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS5zdHJpbmcoKSwgcGFja2FnZS5zaXplKCkpOwotICAgIGlmIChyaWQgIT0gMCkgewotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotCi0jaWYgMAotICAgIGlmIChuYW1lID09IFN0cmluZzE2KCJsZWZ0IikpIHsKLSAgICAgICAgcHJpbnRmKCJBZGRpbmcgYmFnIGxlZnQ6IGZpbGU9JXMsIGxpbmU9JWQsIHR5cGU9JXNcbiIsCi0gICAgICAgICAgICAgICBzb3VyY2VQb3MuZmlsZS5zdHJpaW5nKCksIHNvdXJjZVBvcy5saW5lLCBTdHJpbmc4KHR5cGUpLnN0cmluZygpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBzcDxFbnRyeT4gZSA9IGdldEVudHJ5KHBhY2thZ2UsIHR5cGUsIG5hbWUsIHNvdXJjZVBvcywgcmVwbGFjZSwgcGFyYW1zKTsKLSAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIC8vIElmIGEgcGFyZW50IGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBzZXQgaXQuCi0gICAgaWYgKGJhZ1BhcmVudC5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGUtPnNldFBhcmVudChiYWdQYXJlbnQpOwotICAgIH0KLQotICAgIGNvbnN0IGJvb2wgZmlyc3QgPSBlLT5nZXRCYWcoKS5pbmRleE9mS2V5KGJhZ0tleSkgPCAwOwotICAgIHN0YXR1c190IGVyciA9IGUtPmFkZFRvQmFnKHNvdXJjZVBvcywgYmFnS2V5LCB2YWx1ZSwgc3R5bGUsIHJlcGxhY2UsIGlzSWQsIGZvcm1hdCk7Ci0gICAgaWYgKGVyciA9PSBOT19FUlJPUiAmJiBmaXJzdCkgewotICAgICAgICBtTnVtTG9jYWwrKzsKLSAgICB9Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpoYXNCYWdPckVudHJ5KGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lKSBjb25zdAotewotICAgIC8vIEZpcnN0IGxvb2sgZm9yIHRoaXMgaW4gdGhlIGluY2x1ZGVkIHJlc291cmNlcy4uLgotICAgIHVpbnQzMl90IHJpZCA9IG1Bc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkKLSAgICAgICAgLmlkZW50aWZpZXJGb3JOYW1lKG5hbWUuc3RyaW5nKCksIG5hbWUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5zdHJpbmcoKSwgdHlwZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLnN0cmluZygpLCBwYWNrYWdlLnNpemUoKSk7Ci0gICAgaWYgKHJpZCAhPSAwKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHNwPFBhY2thZ2U+IHAgPSBtUGFja2FnZXMudmFsdWVGb3IocGFja2FnZSk7Ci0gICAgaWYgKHAgIT0gTlVMTCkgewotICAgICAgICBzcDxUeXBlPiB0ID0gcC0+Z2V0VHlwZXMoKS52YWx1ZUZvcih0eXBlKTsKLSAgICAgICAgaWYgKHQgIT0gTlVMTCkgewotICAgICAgICAgICAgc3A8Q29uZmlnTGlzdD4gYyA9ICB0LT5nZXRDb25maWdzKCkudmFsdWVGb3IobmFtZSk7Ci0gICAgICAgICAgICBpZiAoYyAhPSBOVUxMKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpoYXNCYWdPckVudHJ5KGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgY29uZmlnKSBjb25zdAotewotICAgIC8vIEZpcnN0IGxvb2sgZm9yIHRoaXMgaW4gdGhlIGluY2x1ZGVkIHJlc291cmNlcy4uLgotICAgIHVpbnQzMl90IHJpZCA9IG1Bc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkKLSAgICAgICAgLmlkZW50aWZpZXJGb3JOYW1lKG5hbWUuc3RyaW5nKCksIG5hbWUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5zdHJpbmcoKSwgdHlwZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLnN0cmluZygpLCBwYWNrYWdlLnNpemUoKSk7Ci0gICAgaWYgKHJpZCAhPSAwKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHNwPFBhY2thZ2U+IHAgPSBtUGFja2FnZXMudmFsdWVGb3IocGFja2FnZSk7Ci0gICAgaWYgKHAgIT0gTlVMTCkgewotICAgICAgICBzcDxUeXBlPiB0ID0gcC0+Z2V0VHlwZXMoKS52YWx1ZUZvcih0eXBlKTsKLSAgICAgICAgaWYgKHQgIT0gTlVMTCkgewotICAgICAgICAgICAgc3A8Q29uZmlnTGlzdD4gYyA9ICB0LT5nZXRDb25maWdzKCkudmFsdWVGb3IobmFtZSk7Ci0gICAgICAgICAgICBpZiAoYyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc3A8RW50cnk+IGUgPSBjLT5nZXRFbnRyaWVzKCkudmFsdWVGb3IoY29uZmlnKTsKLSAgICAgICAgICAgICAgICBpZiAoZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpoYXNCYWdPckVudHJ5KGNvbnN0IFN0cmluZzE2JiByZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlBhY2thZ2UpCi17Ci0gICAgU3RyaW5nMTYgcGFja2FnZSwgdHlwZSwgbmFtZTsKLSAgICBpZiAoIVJlc1RhYmxlOjpleHBhbmRSZXNvdXJjZVJlZihyZWYuc3RyaW5nKCksIHJlZi5zaXplKCksICZwYWNrYWdlLCAmdHlwZSwgJm5hbWUsCi0gICAgICAgICAgICAgICAgZGVmVHlwZSwgZGVmUGFja2FnZSA/IGRlZlBhY2thZ2U6Jm1Bc3NldHNQYWNrYWdlLCBOVUxMKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBoYXNCYWdPckVudHJ5KHBhY2thZ2UsIHR5cGUsIG5hbWUpOwotfQotCi1ib29sIFJlc291cmNlVGFibGU6OmFwcGVuZENvbW1lbnQoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGNvbW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvbmx5SWZFbXB0eSkKLXsKLSAgICBpZiAoY29tbWVudC5zaXplKCkgPD0gMCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzcDxQYWNrYWdlPiBwID0gbVBhY2thZ2VzLnZhbHVlRm9yKHBhY2thZ2UpOwotICAgIGlmIChwICE9IE5VTEwpIHsKLSAgICAgICAgc3A8VHlwZT4gdCA9IHAtPmdldFR5cGVzKCkudmFsdWVGb3IodHlwZSk7Ci0gICAgICAgIGlmICh0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHNwPENvbmZpZ0xpc3Q+IGMgPSAgdC0+Z2V0Q29uZmlncygpLnZhbHVlRm9yKG5hbWUpOwotICAgICAgICAgICAgaWYgKGMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGMtPmFwcGVuZENvbW1lbnQoY29tbWVudCwgb25seUlmRW1wdHkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjphcHBlbmRUeXBlQ29tbWVudChjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgY29tbWVudCkKLXsKLSAgICBpZiAoY29tbWVudC5zaXplKCkgPD0gMCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgc3A8UGFja2FnZT4gcCA9IG1QYWNrYWdlcy52YWx1ZUZvcihwYWNrYWdlKTsKLSAgICBpZiAocCAhPSBOVUxMKSB7Ci0gICAgICAgIHNwPFR5cGU+IHQgPSBwLT5nZXRUeXBlcygpLnZhbHVlRm9yKHR5cGUpOwotICAgICAgICBpZiAodCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBzcDxDb25maWdMaXN0PiBjID0gIHQtPmdldENvbmZpZ3MoKS52YWx1ZUZvcihuYW1lKTsKLSAgICAgICAgICAgIGlmIChjICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjLT5hcHBlbmRUeXBlQ29tbWVudChjb21tZW50KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VUYWJsZTo6Y2FuQWRkRW50cnkoY29uc3QgU291cmNlUG9zJiBwb3MsCi0gICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLCBjb25zdCBTdHJpbmcxNiYgdHlwZSwgY29uc3QgU3RyaW5nMTYmIG5hbWUpCi17Ci0gICAgc3A8VHlwZT4gdCA9IGdldFR5cGUocGFja2FnZSwgdHlwZSwgcG9zKTsKLSAgICBpZiAodCAhPSBOVUxMKSB7Ci0gICAgICAgIHQtPmNhbkFkZEVudHJ5KG5hbWUpOwotICAgIH0KLX0KLQotc2l6ZV90IFJlc291cmNlVGFibGU6OnNpemUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG1QYWNrYWdlcy5zaXplKCk7Ci19Ci0KLXNpemVfdCBSZXNvdXJjZVRhYmxlOjpudW1Mb2NhbFJlc291cmNlcygpIGNvbnN0IHsKLSAgICByZXR1cm4gbU51bUxvY2FsOwotfQotCi1ib29sIFJlc291cmNlVGFibGU6Omhhc1Jlc291cmNlcygpIGNvbnN0IHsKLSAgICByZXR1cm4gbU51bUxvY2FsID4gMDsKLX0KLQotc3A8QWFwdEZpbGU+IFJlc291cmNlVGFibGU6OmZsYXR0ZW4oQnVuZGxlKiBidW5kbGUpCi17Ci0gICAgc3A8QWFwdEZpbGU+IGRhdGEgPSBuZXcgQWFwdEZpbGUoU3RyaW5nOCgpLCBBYXB0R3JvdXBFbnRyeSgpLCBTdHJpbmc4KCkpOwotICAgIHN0YXR1c190IGVyciA9IGZsYXR0ZW4oYnVuZGxlLCBkYXRhKTsKLSAgICByZXR1cm4gZXJyID09IE5PX0VSUk9SID8gZGF0YSA6IE5VTEw7Ci19Ci0KLWlubGluZSB1aW50MzJfdCBSZXNvdXJjZVRhYmxlOjpnZXRSZXNJZChjb25zdCBzcDxQYWNrYWdlPiYgcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxUeXBlPiYgdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBuYW1lSWQpCi17Ci0gICAgcmV0dXJuIG1ha2VSZXNJZChwLT5nZXRBc3NpZ25lZElkKCksIHQtPmdldEluZGV4KCksIG5hbWVJZCk7Ci19Ci0KLXVpbnQzMl90IFJlc291cmNlVGFibGU6OmdldFJlc0lkKGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgb25seVB1YmxpYykgY29uc3QKLXsKLSAgICB1aW50MzJfdCBpZCA9IFJlc291cmNlSWRDYWNoZTo6bG9va3VwKHBhY2thZ2UsIHR5cGUsIG5hbWUsIG9ubHlQdWJsaWMpOwotICAgIGlmIChpZCAhPSAwKSByZXR1cm4gaWQ7ICAgICAvLyBjYWNoZSBoaXQKLQotICAgIHNwPFBhY2thZ2U+IHAgPSBtUGFja2FnZXMudmFsdWVGb3IocGFja2FnZSk7Ci0gICAgaWYgKHAgPT0gTlVMTCkgcmV0dXJuIDA7Ci0KLSAgICAvLyBGaXJzdCBsb29rIGZvciB0aGlzIGluIHRoZSBpbmNsdWRlZCByZXNvdXJjZXMuLi4KLSAgICB1aW50MzJfdCBzcGVjRmxhZ3MgPSAwOwotICAgIHVpbnQzMl90IHJpZCA9IG1Bc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkKLSAgICAgICAgLmlkZW50aWZpZXJGb3JOYW1lKG5hbWUuc3RyaW5nKCksIG5hbWUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5zdHJpbmcoKSwgdHlwZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLnN0cmluZygpLCBwYWNrYWdlLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcGVjRmxhZ3MpOwotICAgIGlmIChyaWQgIT0gMCkgewotICAgICAgICBpZiAob25seVB1YmxpYykgewotICAgICAgICAgICAgaWYgKChzcGVjRmxhZ3MgJiBSZXNUYWJsZV90eXBlU3BlYzo6U1BFQ19QVUJMSUMpID09IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKFJlc19JTlRFUk5BTElEKHJpZCkpIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZUlkQ2FjaGU6OnN0b3JlKHBhY2thZ2UsIHR5cGUsIG5hbWUsIG9ubHlQdWJsaWMsIHJpZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFJlc291cmNlSWRDYWNoZTo6c3RvcmUocGFja2FnZSwgdHlwZSwgbmFtZSwgb25seVB1YmxpYywKLSAgICAgICAgICAgICAgICBSZXNfTUFLRUlEKHAtPmdldEFzc2lnbmVkSWQoKS0xLCBSZXNfR0VUVFlQRShyaWQpLCBSZXNfR0VURU5UUlkocmlkKSkpOwotICAgIH0KLQotICAgIHNwPFR5cGU+IHQgPSBwLT5nZXRUeXBlcygpLnZhbHVlRm9yKHR5cGUpOwotICAgIGlmICh0ID09IE5VTEwpIHJldHVybiAwOwotICAgIHNwPENvbmZpZ0xpc3Q+IGMgPSAgdC0+Z2V0Q29uZmlncygpLnZhbHVlRm9yKG5hbWUpOwotICAgIGlmIChjID09IE5VTEwpIHJldHVybiAwOwotICAgIGludDMyX3QgZWkgPSBjLT5nZXRFbnRyeUluZGV4KCk7Ci0gICAgaWYgKGVpIDwgMCkgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gUmVzb3VyY2VJZENhY2hlOjpzdG9yZShwYWNrYWdlLCB0eXBlLCBuYW1lLCBvbmx5UHVibGljLAotICAgICAgICAgICAgZ2V0UmVzSWQocCwgdCwgZWkpKTsKLX0KLQotdWludDMyX3QgUmVzb3VyY2VUYWJsZTo6Z2V0UmVzSWQoY29uc3QgU3RyaW5nMTYmIHJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2KiBkZWZUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogb3V0RXJyb3JNc2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG9ubHlQdWJsaWMpIGNvbnN0Ci17Ci0gICAgU3RyaW5nMTYgcGFja2FnZSwgdHlwZSwgbmFtZTsKLSAgICBib29sIHJlZk9ubHlQdWJsaWMgPSB0cnVlOwotICAgIGlmICghUmVzVGFibGU6OmV4cGFuZFJlc291cmNlUmVmKAotICAgICAgICByZWYuc3RyaW5nKCksIHJlZi5zaXplKCksICZwYWNrYWdlLCAmdHlwZSwgJm5hbWUsCi0gICAgICAgIGRlZlR5cGUsIGRlZlBhY2thZ2UgPyBkZWZQYWNrYWdlOiZtQXNzZXRzUGFja2FnZSwKLSAgICAgICAgb3V0RXJyb3JNc2csICZyZWZPbmx5UHVibGljKSkgewotICAgICAgICBOT0lTWShwcmludGYoIkV4cGFuZGluZyByZXNvdXJjZTogcmVmPSVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChyZWYpLnN0cmluZygpKSk7Ci0gICAgICAgIE5PSVNZKHByaW50ZigiRXhwYW5kaW5nIHJlc291cmNlOiBkZWZUeXBlPSVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgZGVmVHlwZSA/IFN0cmluZzgoKmRlZlR5cGUpLnN0cmluZygpIDogIk5VTEwiKSk7Ci0gICAgICAgIE5PSVNZKHByaW50ZigiRXhwYW5kaW5nIHJlc291cmNlOiBkZWZQYWNrYWdlPSVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgZGVmUGFja2FnZSA/IFN0cmluZzgoKmRlZlBhY2thZ2UpLnN0cmluZygpIDogIk5VTEwiKSk7Ci0gICAgICAgIE5PSVNZKHByaW50ZigiRXhwYW5kaW5nIHJlc291cmNlOiByZWY9JXNcbiIsIFN0cmluZzgocmVmKS5zdHJpbmcoKSkpOwotICAgICAgICBOT0lTWShwcmludGYoIkV4cGFuZGVkIHJlc291cmNlOiBwPSVzLCB0PSVzLCBuPSVzLCByZXM9MFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocGFja2FnZSkuc3RyaW5nKCksIFN0cmluZzgodHlwZSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG5hbWUpLnN0cmluZygpKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB1aW50MzJfdCByZXMgPSBnZXRSZXNJZChwYWNrYWdlLCB0eXBlLCBuYW1lLCBvbmx5UHVibGljICYmIHJlZk9ubHlQdWJsaWMpOwotICAgIE5PSVNZKHByaW50ZigiRXhwYW5kZWQgcmVzb3VyY2U6IHA9JXMsIHQ9JXMsIG49JXMsIHJlcz0lZFxuIiwKLSAgICAgICAgICAgICAgICAgU3RyaW5nOChwYWNrYWdlKS5zdHJpbmcoKSwgU3RyaW5nOCh0eXBlKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSwgcmVzKSk7Ci0gICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXRFcnJvck1zZykKLSAgICAgICAgICAgICpvdXRFcnJvck1zZyA9ICJObyByZXNvdXJjZSBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIG5hbWUiOwotICAgIH0KLSAgICByZXR1cm4gcmVzOwotfQotCi1ib29sIFJlc291cmNlVGFibGU6OmlzVmFsaWRSZXNvdXJjZU5hbWUoY29uc3QgU3RyaW5nMTYmIHMpCi17Ci0gICAgY29uc3QgY2hhcjE2X3QqIHAgPSBzLnN0cmluZygpOwotICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgIHdoaWxlICgqcCkgewotICAgICAgICBpZiAoKCpwID49ICdhJyAmJiAqcCA8PSAneicpCi0gICAgICAgICAgICB8fCAoKnAgPj0gJ0EnICYmICpwIDw9ICdaJykKLSAgICAgICAgICAgIHx8ICpwID09ICdfJwotICAgICAgICAgICAgfHwgKCFmaXJzdCAmJiAqcCA+PSAnMCcgJiYgKnAgPD0gJzknKSkgewotICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVzb3VyY2VUYWJsZTo6c3RyaW5nVG9WYWx1ZShSZXNfdmFsdWUqIG91dFZhbHVlLCBTdHJpbmdQb29sKiBwb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZVNwYWNlcywgYm9vbCBjb2VyY2VUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGF0dHJJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4qIHN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2KiBvdXRTdHIsIHZvaWQqIGFjY2Vzc29yQ29va2llLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGF0dHJUeXBlLCBjb25zdCBTdHJpbmc4KiBjb25maWdUeXBlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb25maWdEZXNjcmlwdGlvbiogY29uZmlnKQotewotICAgIFN0cmluZzE2IGZpbmFsU3RyOwotCi0gICAgYm9vbCByZXMgPSB0cnVlOwotICAgIGlmIChzdHlsZSA9PSBOVUxMIHx8IHN0eWxlLT5zaXplKCkgPT0gMCkgewotICAgICAgICAvLyBUZXh0IGlzIG5vdCBzdHlsZWQgc28gaXQgY2FuIGJlIGFueSB0eXBlLi4uICBsZXQncyBmaWd1cmUgaXQgb3V0LgotICAgICAgICByZXMgPSBtQXNzZXRzLT5nZXRJbmNsdWRlZFJlc291cmNlcygpCi0gICAgICAgICAgICAuc3RyaW5nVG9WYWx1ZShvdXRWYWx1ZSwgJmZpbmFsU3RyLCBzdHIuc3RyaW5nKCksIHN0ci5zaXplKCksIHByZXNlcnZlU3BhY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZXJjZVR5cGUsIGF0dHJJRCwgTlVMTCwgJm1Bc3NldHNQYWNrYWdlLCB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3JDb29raWUsIGF0dHJUeXBlKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBTdHlsZWQgdGV4dCBjYW4gb25seSBiZSBhIHN0cmluZywgYW5kIHdoaWxlIGNvbGxlY3RpbmcgdGhlIHN0eWxlCi0gICAgICAgIC8vIGluZm9ybWF0aW9uIHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhhdCBzdHJpbmchCi0gICAgICAgIG91dFZhbHVlLT5zaXplID0gc2l6ZW9mKFJlc192YWx1ZSk7Ci0gICAgICAgIG91dFZhbHVlLT5yZXMwID0gMDsKLSAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gb3V0VmFsdWUtPlRZUEVfU1RSSU5HOwotICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IDA7Ci0gICAgICAgIGZpbmFsU3RyID0gc3RyOwotICAgIH0KLQotICAgIGlmICghcmVzKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAob3V0VmFsdWUtPmRhdGFUeXBlID09IG91dFZhbHVlLT5UWVBFX1NUUklORykgewotICAgICAgICAvLyBTaG91bGQgZG8gYmV0dGVyIG1lcmdpbmcgc3R5bGVzLgotICAgICAgICBpZiAocG9vbCkgewotICAgICAgICAgICAgU3RyaW5nOCBjb25maWdTdHI7Ci0gICAgICAgICAgICBpZiAoY29uZmlnICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjb25maWdTdHIgPSBjb25maWctPnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbmZpZ1N0ciA9ICIobnVsbCkiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJBZGRpbmcgdG8gcG9vbCBzdHJpbmcgc3R5bGUgIyVkIGNvbmZpZyAlczogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlICE9IE5VTEwgPyBzdHlsZS0+c2l6ZSgpIDogMCwKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnU3RyLnN0cmluZygpLCBTdHJpbmc4KGZpbmFsU3RyKS5zdHJpbmcoKSkpOwotICAgICAgICAgICAgaWYgKHN0eWxlICE9IE5VTEwgJiYgc3R5bGUtPnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IHBvb2wtPmFkZChmaW5hbFN0ciwgKnN0eWxlLCBjb25maWdUeXBlTmFtZSwgY29uZmlnKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGEgPSBwb29sLT5hZGQoZmluYWxTdHIsIHRydWUsIGNvbmZpZ1R5cGVOYW1lLCBjb25maWcpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQ2FsbGVyIHdpbGwgZmlsbCB0aGlzIGluIGxhdGVyLgotICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGEgPSAwOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIGlmIChvdXRTdHIpIHsKLSAgICAgICAgICAgICpvdXRTdHIgPSBmaW5hbFN0cjsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVpbnQzMl90IFJlc291cmNlVGFibGU6OmdldEN1c3RvbVJlc291cmNlKAotICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLCBjb25zdCBTdHJpbmcxNiYgdHlwZSwgY29uc3QgU3RyaW5nMTYmIG5hbWUpIGNvbnN0Ci17Ci0gICAgLy9wcmludGYoImdldEN1c3RvbVJlc291cmNlOiAlcyAlcyAlc1xuIiwgU3RyaW5nOChwYWNrYWdlKS5zdHJpbmcoKSwKLSAgICAvLyAgICAgICBTdHJpbmc4KHR5cGUpLnN0cmluZygpLCBTdHJpbmc4KG5hbWUpLnN0cmluZygpKTsKLSAgICBzcDxQYWNrYWdlPiBwID0gbVBhY2thZ2VzLnZhbHVlRm9yKHBhY2thZ2UpOwotICAgIGlmIChwID09IE5VTEwpIHJldHVybiAwOwotICAgIHNwPFR5cGU+IHQgPSBwLT5nZXRUeXBlcygpLnZhbHVlRm9yKHR5cGUpOwotICAgIGlmICh0ID09IE5VTEwpIHJldHVybiAwOwotICAgIHNwPENvbmZpZ0xpc3Q+IGMgPSAgdC0+Z2V0Q29uZmlncygpLnZhbHVlRm9yKG5hbWUpOwotICAgIGlmIChjID09IE5VTEwpIHJldHVybiAwOwotICAgIGludDMyX3QgZWkgPSBjLT5nZXRFbnRyeUluZGV4KCk7Ci0gICAgaWYgKGVpIDwgMCkgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdldFJlc0lkKHAsIHQsIGVpKTsKLX0KLQotdWludDMyX3QgUmVzb3VyY2VUYWJsZTo6Z2V0Q3VzdG9tUmVzb3VyY2VXaXRoQ3JlYXRpb24oCi0gICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLCBjb25zdCBTdHJpbmcxNiYgdHlwZSwgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgIGNvbnN0IGJvb2wgY3JlYXRlSWZOb3RGb3VuZCkKLXsKLSAgICB1aW50MzJfdCByZXNJZCA9IGdldEN1c3RvbVJlc291cmNlKHBhY2thZ2UsIHR5cGUsIG5hbWUpOwotICAgIGlmIChyZXNJZCAhPSAwIHx8ICFjcmVhdGVJZk5vdEZvdW5kKSB7Ci0gICAgICAgIHJldHVybiByZXNJZDsKLSAgICB9Ci0gICAgU3RyaW5nMTYgdmFsdWUoImZhbHNlIik7Ci0KLSAgICBzdGF0dXNfdCBzdGF0dXMgPSBhZGRFbnRyeShtQ3VycmVudFhtbFBvcywgcGFja2FnZSwgdHlwZSwgbmFtZSwgdmFsdWUsIE5VTEwsIE5VTEwsIHRydWUpOwotICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmVzSWQgPSBnZXRSZXNJZChwYWNrYWdlLCB0eXBlLCBuYW1lKTsKLSAgICAgICAgcmV0dXJuIHJlc0lkOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotdWludDMyX3QgUmVzb3VyY2VUYWJsZTo6Z2V0UmVtYXBwZWRQYWNrYWdlKHVpbnQzMl90IG9yaWdQYWNrYWdlKSBjb25zdAotewotICAgIHJldHVybiBvcmlnUGFja2FnZTsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpnZXRBdHRyaWJ1dGVUeXBlKHVpbnQzMl90IGF0dHJJRCwgdWludDMyX3QqIG91dFR5cGUpCi17Ci0gICAgLy9wcmludGYoImdldEF0dHJpYnV0ZVR5cGUgIyUwOHhcbiIsIGF0dHJJRCk7Ci0gICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgIGlmIChnZXRJdGVtVmFsdWUoYXR0cklELCBSZXNUYWJsZV9tYXA6OkFUVFJfVFlQRSwgJnZhbHVlKSkgewotICAgICAgICAvL3ByaW50ZigiZ2V0QXR0cmlidXRlVHlwZSAjJTA4eCAoJXMpOiAjJTA4eFxuIiwgYXR0cklELAotICAgICAgICAvLyAgICAgICBTdHJpbmc4KGdldEVudHJ5KGF0dHJJRCktPmdldE5hbWUoKSkuc3RyaW5nKCksIHZhbHVlLmRhdGEpOwotICAgICAgICAqb3V0VHlwZSA9IHZhbHVlLmRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VUYWJsZTo6Z2V0QXR0cmlidXRlTWluKHVpbnQzMl90IGF0dHJJRCwgdWludDMyX3QqIG91dE1pbikKLXsKLSAgICAvL3ByaW50ZigiZ2V0QXR0cmlidXRlTWluICMlMDh4XG4iLCBhdHRySUQpOwotICAgIFJlc192YWx1ZSB2YWx1ZTsKLSAgICBpZiAoZ2V0SXRlbVZhbHVlKGF0dHJJRCwgUmVzVGFibGVfbWFwOjpBVFRSX01JTiwgJnZhbHVlKSkgewotICAgICAgICAqb3V0TWluID0gdmFsdWUuZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpnZXRBdHRyaWJ1dGVNYXgodWludDMyX3QgYXR0cklELCB1aW50MzJfdCogb3V0TWF4KQotewotICAgIC8vcHJpbnRmKCJnZXRBdHRyaWJ1dGVNYXggIyUwOHhcbiIsIGF0dHJJRCk7Ci0gICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgIGlmIChnZXRJdGVtVmFsdWUoYXR0cklELCBSZXNUYWJsZV9tYXA6OkFUVFJfTUFYLCAmdmFsdWUpKSB7Ci0gICAgICAgICpvdXRNYXggPSB2YWx1ZS5kYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi11aW50MzJfdCBSZXNvdXJjZVRhYmxlOjpnZXRBdHRyaWJ1dGVMMTBOKHVpbnQzMl90IGF0dHJJRCkKLXsKLSAgICAvL3ByaW50ZigiZ2V0QXR0cmlidXRlTDEwTiAjJTA4eFxuIiwgYXR0cklEKTsKLSAgICBSZXNfdmFsdWUgdmFsdWU7Ci0gICAgaWYgKGdldEl0ZW1WYWx1ZShhdHRySUQsIFJlc1RhYmxlX21hcDo6QVRUUl9MMTBOLCAmdmFsdWUpKSB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5kYXRhOwotICAgIH0KLSAgICByZXR1cm4gUmVzVGFibGVfbWFwOjpMMTBOX05PVF9SRVFVSVJFRDsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpnZXRMb2NhbGl6YXRpb25TZXR0aW5nKCkKLXsKLSAgICByZXR1cm4gbUJ1bmRsZS0+Z2V0UmVxdWlyZUxvY2FsaXphdGlvbigpOwotfQotCi12b2lkIFJlc291cmNlVGFibGU6OnJlcG9ydEVycm9yKHZvaWQqIGFjY2Vzc29yQ29va2llLCBjb25zdCBjaGFyKiBmbXQsIC4uLikKLXsKLSAgICBpZiAoYWNjZXNzb3JDb29raWUgIT0gTlVMTCAmJiBmbXQgIT0gTlVMTCkgewotICAgICAgICBBY2Nlc3NvckNvb2tpZSogYWMgPSAoQWNjZXNzb3JDb29raWUqKWFjY2Vzc29yQ29va2llOwotICAgICAgICBpbnQgcmV0dmFsPTA7Ci0gICAgICAgIGNoYXIgYnVmWzEwMjRdOwotICAgICAgICB2YV9saXN0IGFwOwotICAgICAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICAgICAgcmV0dmFsID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOwotICAgICAgICB2YV9lbmQoYXApOwotICAgICAgICBhYy0+c291cmNlUG9zLmVycm9yKCJFcnJvcjogJXMgKGF0ICclcycgd2l0aCB2YWx1ZSAnJXMnKS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBhYy0+YXR0ci5zdHJpbmcoKSwgYWMtPnZhbHVlLnN0cmluZygpKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVzb3VyY2VUYWJsZTo6Z2V0QXR0cmlidXRlS2V5cygKLSAgICB1aW50MzJfdCBhdHRySUQsIFZlY3RvcjxTdHJpbmcxNj4qIG91dEtleXMpCi17Ci0gICAgc3A8Y29uc3QgRW50cnk+IGUgPSBnZXRFbnRyeShhdHRySUQpOwotICAgIGlmIChlICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBlLT5nZXRCYWcoKS5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBrZXkgPSBlLT5nZXRCYWcoKS5rZXlBdChpKTsKLSAgICAgICAgICAgIGlmIChrZXkuc2l6ZSgpID4gMCAmJiBrZXkuc3RyaW5nKClbMF0gIT0gJ14nKSB7Ci0gICAgICAgICAgICAgICAgb3V0S2V5cy0+YWRkKGtleSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpnZXRBdHRyaWJ1dGVFbnVtKAotICAgIHVpbnQzMl90IGF0dHJJRCwgY29uc3QgY2hhcjE2X3QqIG5hbWUsIHNpemVfdCBuYW1lTGVuLAotICAgIFJlc192YWx1ZSogb3V0VmFsdWUpCi17Ci0gICAgLy9wcmludGYoImdldEF0dHJpYnV0ZUVudW0gIyUwOHggJXNcbiIsIGF0dHJJRCwgU3RyaW5nOChuYW1lLCBuYW1lTGVuKS5zdHJpbmcoKSk7Ci0gICAgU3RyaW5nMTYgbmFtZVN0cihuYW1lLCBuYW1lTGVuKTsKLSAgICBzcDxjb25zdCBFbnRyeT4gZSA9IGdldEVudHJ5KGF0dHJJRCk7Ci0gICAgaWYgKGUgIT0gTlVMTCkgewotICAgICAgICBjb25zdCBzaXplX3QgTiA9IGUtPmdldEJhZygpLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgLy9wcmludGYoIkNvbXBhcmluZyAlcyB0byAlc1xuIiwgU3RyaW5nOChuYW1lLCBuYW1lTGVuKS5zdHJpbmcoKSwKLSAgICAgICAgICAgIC8vICAgICAgIFN0cmluZzgoZS0+Z2V0QmFnKCkua2V5QXQoaSkpLnN0cmluZygpKTsKLSAgICAgICAgICAgIGlmIChlLT5nZXRCYWcoKS5rZXlBdChpKSA9PSBuYW1lU3RyKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldEl0ZW1WYWx1ZShhdHRySUQsIGUtPmdldEJhZygpLnZhbHVlQXQoaSkuYmFnS2V5SWQsIG91dFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VUYWJsZTo6Z2V0QXR0cmlidXRlRmxhZ3MoCi0gICAgdWludDMyX3QgYXR0cklELCBjb25zdCBjaGFyMTZfdCogbmFtZSwgc2l6ZV90IG5hbWVMZW4sCi0gICAgUmVzX3ZhbHVlKiBvdXRWYWx1ZSkKLXsKLSAgICBvdXRWYWx1ZS0+ZGF0YVR5cGUgPSBSZXNfdmFsdWU6OlRZUEVfSU5UX0hFWDsKLSAgICBvdXRWYWx1ZS0+ZGF0YSA9IDA7Ci0KLSAgICAvL3ByaW50ZigiZ2V0QXR0cmlidXRlRmxhZ3MgIyUwOHggJXNcbiIsIGF0dHJJRCwgU3RyaW5nOChuYW1lLCBuYW1lTGVuKS5zdHJpbmcoKSk7Ci0gICAgU3RyaW5nMTYgbmFtZVN0cihuYW1lLCBuYW1lTGVuKTsKLSAgICBzcDxjb25zdCBFbnRyeT4gZSA9IGdldEVudHJ5KGF0dHJJRCk7Ci0gICAgaWYgKGUgIT0gTlVMTCkgewotICAgICAgICBjb25zdCBzaXplX3QgTiA9IGUtPmdldEJhZygpLnNpemUoKTsKLQotICAgICAgICBjb25zdCBjaGFyMTZfdCogZW5kID0gbmFtZSArIG5hbWVMZW47Ci0gICAgICAgIGNvbnN0IGNoYXIxNl90KiBwb3MgPSBuYW1lOwotICAgICAgICB3aGlsZSAocG9zIDwgZW5kKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogc3RhcnQgPSBwb3M7Ci0gICAgICAgICAgICB3aGlsZSAocG9zIDwgZW5kICYmICpwb3MgIT0gJ3wnKSB7Ci0gICAgICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN0cmluZzE2IG5hbWVTdHIoc3RhcnQsIHBvcy1zdGFydCk7Ci0gICAgICAgICAgICBzaXplX3QgaTsKLSAgICAgICAgICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJDb21wYXJpbmcgXCIlc1wiIHRvIFwiJXNcIlxuIiwgU3RyaW5nOChuYW1lU3RyKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAvLyAgICAgICBTdHJpbmc4KGUtPmdldEJhZygpLmtleUF0KGkpKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmdldEJhZygpLmtleUF0KGkpID09IG5hbWVTdHIpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVzX3ZhbHVlIHZhbDsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnb3QgPSBnZXRJdGVtVmFsdWUoYXR0cklELCBlLT5nZXRCYWcoKS52YWx1ZUF0KGkpLmJhZ0tleUlkLCAmdmFsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFnb3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiR290IHZhbHVlOiAweCUwOHhcbiIsIHZhbC5kYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGEgfD0gdmFsLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGkgPj0gTikgewotICAgICAgICAgICAgICAgIC8vIERpZG4ndCBmaW5kIHRoaXMgZmxhZyBpZGVudGlmaWVyLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBvcysrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6YXNzaWduUmVzb3VyY2VJZHMoKQotewotICAgIGNvbnN0IHNpemVfdCBOID0gbU9yZGVyZWRQYWNrYWdlcy5zaXplKCk7Ci0gICAgc2l6ZV90IHBpOwotICAgIHN0YXR1c190IGZpcnN0RXJyb3IgPSBOT19FUlJPUjsKLQotICAgIC8vIEZpcnN0IGdlbmVyYXRlIGFsbCBiYWcgYXR0cmlidXRlcyBhbmQgYXNzaWduIGluZGljZXMuCi0gICAgZm9yIChwaT0wOyBwaTxOOyBwaSsrKSB7Ci0gICAgICAgIHNwPFBhY2thZ2U+IHAgPSBtT3JkZXJlZFBhY2thZ2VzLml0ZW1BdChwaSk7Ci0gICAgICAgIGlmIChwID09IE5VTEwgfHwgcC0+Z2V0VHlwZXMoKS5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgLy8gRW1wdHksIHNraXAhCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXR1c190IGVyciA9IHAtPmFwcGx5UHVibGljVHlwZU9yZGVyKCk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IgJiYgZmlyc3RFcnJvciA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgZmlyc3RFcnJvciA9IGVycjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdlbmVyYXRlIGF0dHJpYnV0ZXMuLi4KLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBwLT5nZXRPcmRlcmVkVHlwZXMoKS5zaXplKCk7Ci0gICAgICAgIHNpemVfdCB0aTsKLSAgICAgICAgZm9yICh0aT0wOyB0aTxOOyB0aSsrKSB7Ci0gICAgICAgICAgICBzcDxUeXBlPiB0ID0gcC0+Z2V0T3JkZXJlZFR5cGVzKCkuaXRlbUF0KHRpKTsKLSAgICAgICAgICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBjaT0wOyBjaTxOOyBjaSsrKSB7Ci0gICAgICAgICAgICAgICAgc3A8Q29uZmlnTGlzdD4gYyA9IHQtPmdldE9yZGVyZWRDb25maWdzKCkuaXRlbUF0KGNpKTsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgTiA9IGMtPmdldEVudHJpZXMoKS5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgZWk9MDsgZWk8TjsgZWkrKykgewotICAgICAgICAgICAgICAgICAgICBzcDxFbnRyeT4gZSA9IGMtPmdldEVudHJpZXMoKS52YWx1ZUF0KGVpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gZS0+Z2VuZXJhdGVBdHRyaWJ1dGVzKHRoaXMsIHAtPmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IgJiYgZmlyc3RFcnJvciA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RFcnJvciA9IGVycjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFNvdXJjZVBvcyB1bmtub3duKFN0cmluZzgoIj8/Pz8iKSwgMCk7Ci0gICAgICAgIHNwPFR5cGU+IGF0dHIgPSBwLT5nZXRUeXBlKFN0cmluZzE2KCJhdHRyIiksIHVua25vd24pOwotCi0gICAgICAgIC8vIEFzc2lnbiBpbmRpY2VzLi4uCi0gICAgICAgIGZvciAodGk9MDsgdGk8TjsgdGkrKykgewotICAgICAgICAgICAgc3A8VHlwZT4gdCA9IHAtPmdldE9yZGVyZWRUeXBlcygpLml0ZW1BdCh0aSk7Ci0gICAgICAgICAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSB0LT5hcHBseVB1YmxpY0VudHJ5T3JkZXIoKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IgJiYgZmlyc3RFcnJvciA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIGZpcnN0RXJyb3IgPSBlcnI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5zaXplKCk7Ci0gICAgICAgICAgICB0LT5zZXRJbmRleCh0aSsxKTsKLQotICAgICAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRih0aSA9PSAwICYmIGF0dHIgIT0gdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpcnN0IHR5cGUgaXMgbm90IGF0dHIhIik7Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGVpPTA7IGVpPE47IGVpKyspIHsKLSAgICAgICAgICAgICAgICBzcDxDb25maWdMaXN0PiBjID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5pdGVtQXQoZWkpOwotICAgICAgICAgICAgICAgIGlmIChjID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGMtPnNldEVudHJ5SW5kZXgoZWkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQXNzaWduIHJlc291cmNlIElEcyB0byBrZXlzIGluIGJhZ3MuLi4KLSAgICAgICAgZm9yICh0aT0wOyB0aTxOOyB0aSsrKSB7Ci0gICAgICAgICAgICBzcDxUeXBlPiB0ID0gcC0+Z2V0T3JkZXJlZFR5cGVzKCkuaXRlbUF0KHRpKTsKLSAgICAgICAgICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBjaT0wOyBjaTxOOyBjaSsrKSB7Ci0gICAgICAgICAgICAgICAgc3A8Q29uZmlnTGlzdD4gYyA9IHQtPmdldE9yZGVyZWRDb25maWdzKCkuaXRlbUF0KGNpKTsKLSAgICAgICAgICAgICAgICAvL3ByaW50ZigiT3JkZXJlZCBjb25maWcgIyVkOiAlcFxuIiwgY2ksIGMuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOID0gYy0+Z2V0RW50cmllcygpLnNpemUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBlaT0wOyBlaTxOOyBlaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwPEVudHJ5PiBlID0gYy0+Z2V0RW50cmllcygpLnZhbHVlQXQoZWkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBlLT5hc3NpZ25SZXNvdXJjZUlkcyh0aGlzLCBwLT5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SICYmIGZpcnN0RXJyb3IgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RXJyb3IgPSBlcnI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZpcnN0RXJyb3I7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OmFkZFN5bWJvbHMoY29uc3Qgc3A8QWFwdFN5bWJvbHM+JiBvdXRTeW1ib2xzKSB7Ci0gICAgY29uc3Qgc2l6ZV90IE4gPSBtT3JkZXJlZFBhY2thZ2VzLnNpemUoKTsKLSAgICBzaXplX3QgcGk7Ci0KLSAgICBmb3IgKHBpPTA7IHBpPE47IHBpKyspIHsKLSAgICAgICAgc3A8UGFja2FnZT4gcCA9IG1PcmRlcmVkUGFja2FnZXMuaXRlbUF0KHBpKTsKLSAgICAgICAgaWYgKHAtPmdldFR5cGVzKCkuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIC8vIEVtcHR5LCBza2lwIQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBzaXplX3QgTiA9IHAtPmdldE9yZGVyZWRUeXBlcygpLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IHRpOwotCi0gICAgICAgIGZvciAodGk9MDsgdGk8TjsgdGkrKykgewotICAgICAgICAgICAgc3A8VHlwZT4gdCA9IHAtPmdldE9yZGVyZWRUeXBlcygpLml0ZW1BdCh0aSk7Ci0gICAgICAgICAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb25zdCBzaXplX3QgTiA9IHQtPmdldE9yZGVyZWRDb25maWdzKCkuc2l6ZSgpOwotICAgICAgICAgICAgc3A8QWFwdFN5bWJvbHM+IHR5cGVTeW1ib2xzOwotICAgICAgICAgICAgdHlwZVN5bWJvbHMgPSBvdXRTeW1ib2xzLT5hZGROZXN0ZWRTeW1ib2woU3RyaW5nOCh0LT5nZXROYW1lKCkpLCB0LT5nZXRQb3MoKSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBjaT0wOyBjaTxOOyBjaSsrKSB7Ci0gICAgICAgICAgICAgICAgc3A8Q29uZmlnTGlzdD4gYyA9IHQtPmdldE9yZGVyZWRDb25maWdzKCkuaXRlbUF0KGNpKTsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB1aW50MzJfdCByaWQgPSBnZXRSZXNJZChwLCB0LCBjaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoUmVzX0dFVFBBQ0tBR0UocmlkKSA9PSAoc2l6ZV90KShwLT5nZXRBc3NpZ25lZElkKCktMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZVN5bWJvbHMtPmFkZFN5bWJvbChTdHJpbmc4KGMtPmdldE5hbWUoKSksIHJpZCwgYy0+Z2V0UG9zKCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYgY29tbWVudChjLT5nZXRDb21tZW50KCkpOwotICAgICAgICAgICAgICAgICAgICB0eXBlU3ltYm9scy0+YXBwZW5kQ29tbWVudChTdHJpbmc4KGMtPmdldE5hbWUoKSksIGNvbW1lbnQsIGMtPmdldFBvcygpKTsKLSAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIlR5cGUgc3ltYm9sIFslMDh4XSAlcyBjb21tZW50OiAlc1xuIiwgcmlkLAotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgU3RyaW5nOChjLT5nZXROYW1lKCkpLnN0cmluZygpLCBTdHJpbmc4KGNvbW1lbnQpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGMtPmdldFR5cGVDb21tZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVTeW1ib2xzLT5hcHBlbmRUeXBlQ29tbWVudChTdHJpbmc4KGMtPmdldE5hbWUoKSksIGNvbW1lbnQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWYgMAotICAgICAgICAgICAgICAgICAgICBwcmludGYoIioqKiogTk8gTUFUQ0g6IDB4JTA4eCB2cyAweCUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNfR0VUUEFDS0FHRShyaWQpLCBwLT5nZXRBc3NpZ25lZElkKCkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotCi12b2lkCi1SZXNvdXJjZVRhYmxlOjphZGRMb2NhbGl6YXRpb24oY29uc3QgU3RyaW5nMTYmIG5hbWUsIGNvbnN0IFN0cmluZzgmIGxvY2FsZSkKLXsKLSAgICBtTG9jYWxpemF0aW9uc1tuYW1lXS5pbnNlcnQobG9jYWxlKTsKLX0KLQotCi0vKiEKLSAqIEZsYWcgdmFyaW91cyBzb3J0cyBvZiBsb2NhbGl6YXRpb24gcHJvYmxlbXMuICAnKycgaW5kaWNhdGVzIGNoZWNrcyBhbHJlYWR5IGltcGxlbWVudGVkOwotICogJy0nIGluZGljYXRlcyBjaGVja3MgdGhhdCB3aWxsIGJlIGltcGxlbWVudGVkIGluIHRoZSBmdXR1cmUuCi0gKgotICogKyBBIGxvY2FsaXplZCBzdHJpbmcgZm9yIHdoaWNoIG5vIGRlZmF1bHQtbG9jYWxlIHZlcnNpb24gZXhpc3RzID0+IHdhcm5pbmcKLSAqICsgQSBzdHJpbmcgZm9yIHdoaWNoIG5vIHZlcnNpb24gaW4gYW4gZXhwbGljaXRseS1yZXF1ZXN0ZWQgbG9jYWxlIGV4aXN0cyA9PiB3YXJuaW5nCi0gKiArIEEgbG9jYWxpemVkIHRyYW5zbGF0aW9uIG9mIGFuIHRyYW5zbGF0ZWFibGU9ImZhbHNlIiBzdHJpbmcgPT4gd2FybmluZwotICogLSBBIGxvY2FsaXplZCBzdHJpbmcgbm90IHByb3ZpZGVkIGluIGV2ZXJ5IGxvY2FsZSB1c2VkIGJ5IHRoZSB0YWJsZQotICovCi1zdGF0dXNfdAotUmVzb3VyY2VUYWJsZTo6dmFsaWRhdGVMb2NhbGl6YXRpb25zKHZvaWQpCi17Ci0gICAgc3RhdHVzX3QgZXJyID0gTk9fRVJST1I7Ci0gICAgY29uc3QgU3RyaW5nOCBkZWZhdWx0TG9jYWxlOwotCi0gICAgLy8gRm9yIGFsbCBzdHJpbmdzLi4uCi0gICAgZm9yIChtYXA8U3RyaW5nMTYsIHNldDxTdHJpbmc4PiA+OjppdGVyYXRvciBuYW1lSXRlciA9IG1Mb2NhbGl6YXRpb25zLmJlZ2luKCk7Ci0gICAgICAgICBuYW1lSXRlciAhPSBtTG9jYWxpemF0aW9ucy5lbmQoKTsKLSAgICAgICAgIG5hbWVJdGVyKyspIHsKLSAgICAgICAgY29uc3Qgc2V0PFN0cmluZzg+JiBjb25maWdTZXQgPSBuYW1lSXRlci0+c2Vjb25kOyAgIC8vIG5hbWluZyBjb252ZW5pZW5jZQotCi0gICAgICAgIC8vIExvb2sgZm9yIHN0cmluZ3Mgd2l0aCBubyBkZWZhdWx0IGxvY2FsaXphdGlvbgotICAgICAgICBpZiAoY29uZmlnU2V0LmNvdW50KGRlZmF1bHRMb2NhbGUpID09IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiYWFwdDogd2FybmluZzogc3RyaW5nICclcycgaGFzIG5vIGRlZmF1bHQgdHJhbnNsYXRpb24gaW4gJXM7IGZvdW5kOiIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgobmFtZUl0ZXItPmZpcnN0KS5zdHJpbmcoKSwgbUJ1bmRsZS0+Z2V0UmVzb3VyY2VTb3VyY2VEaXJzKClbMF0pOwotICAgICAgICAgICAgZm9yIChzZXQ8U3RyaW5nOD46OmNvbnN0X2l0ZXJhdG9yIGxvY2FsZXMgPSBjb25maWdTZXQuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICAgbG9jYWxlcyAhPSBjb25maWdTZXQuZW5kKCk7Ci0gICAgICAgICAgICAgICAgIGxvY2FsZXMrKykgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiICVzIiwgKCpsb2NhbGVzKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlxuIik7Ci0gICAgICAgICAgICAvLyAhISEgVE9ETzogdGhyb3cgYW4gZXJyb3IgaGVyZSBpbiBzb21lIGNpcmN1bXN0YW5jZXMKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgYWxsIHJlcXVlc3RlZCBsb2NhbGl6YXRpb25zIGFyZSBwcmVzZW50IGZvciB0aGlzIHN0cmluZwotICAgICAgICBpZiAobUJ1bmRsZS0+Z2V0Q29uZmlndXJhdGlvbnMoKSAhPSBOVUxMICYmIG1CdW5kbGUtPmdldFJlcXVpcmVMb2NhbGl6YXRpb24oKSkgewotICAgICAgICAgICAgY29uc3QgY2hhciogYWxsQ29uZmlncyA9IG1CdW5kbGUtPmdldENvbmZpZ3VyYXRpb25zKCk7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBzdGFydCA9IGFsbENvbmZpZ3M7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tYTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIFN0cmluZzggY29uZmlnOwotICAgICAgICAgICAgICAgIGNvbW1hID0gc3RyY2hyKHN0YXJ0LCAnLCcpOwotICAgICAgICAgICAgICAgIGlmIChjb21tYSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zZXRUbyhzdGFydCwgY29tbWEgLSBzdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gY29tbWEgKyAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zZXRUbyhzdGFydCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gZG9uJ3QgYm90aGVyIHdpdGggdGhlIHBzZXVkb2xvY2FsZSAienpfWloiCi0gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAhPSAienpfWloiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdTZXQuZmluZChjb25maWcpID09IGNvbmZpZ1NldC5lbmQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2theSwgbm8gc3BlY2lmaWMgbG9jYWxpemF0aW9uIGZvdW5kLiAgaXQncyBwb3NzaWJsZSB0aGF0IHdlIGFyZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyaW5nIGEgc3BlY2lmaWMgcmVnaW9uYWwgbG9jYWxpemF0aW9uIFtlLmcuIGRlX0RFXSBidXQgdGhlcmUgaXMgYW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF2YWlsYWJsZSBzdHJpbmcgaW4gdGhlIGdlbmVyaWMgbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIFtlLmcuIGRlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNpZGVyIHRoYXQgc3RyaW5nIHRvIGhhdmUgZnVsZmlsbGVkIHRoZSBsb2NhbGl6YXRpb24gcmVxdWlyZW1lbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IHJlZ2lvbihjb25maWcuc3RyaW5nKCksIDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ1NldC5maW5kKHJlZ2lvbikgPT0gY29uZmlnU2V0LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ1NldC5jb3VudChkZWZhdWx0TG9jYWxlKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiYWFwdDogd2FybmluZzogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqKioqIHN0cmluZyAnJXMnIGhhcyBubyBkZWZhdWx0IG9yIHJlcXVpcmVkIGxvY2FsaXphdGlvbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciAnJXMnIGluICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgobmFtZUl0ZXItPmZpcnN0KS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUJ1bmRsZS0+Z2V0UmVzb3VyY2VTb3VyY2VEaXJzKClbMF0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfSB3aGlsZSAoY29tbWEgIT0gTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjpmbGF0dGVuKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0RmlsZT4mIGRlc3QpCi17Ci0gICAgUmVzb3VyY2VGaWx0ZXIgZmlsdGVyOwotICAgIHN0YXR1c190IGVyciA9IGZpbHRlci5wYXJzZShidW5kbGUtPmdldENvbmZpZ3VyYXRpb25zKCkpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBjb25zdCBDb25maWdEZXNjcmlwdGlvbiBudWxsQ29uZmlnOwotCi0gICAgY29uc3Qgc2l6ZV90IE4gPSBtT3JkZXJlZFBhY2thZ2VzLnNpemUoKTsKLSAgICBzaXplX3QgcGk7Ci0KLSAgICBjb25zdCBzdGF0aWMgU3RyaW5nMTYgbWlwbWFwMTYoIm1pcG1hcCIpOwotCi0gICAgYm9vbCB1c2VVVEY4ID0gIWJ1bmRsZS0+Z2V0VVRGMTZTdHJpbmdzT3B0aW9uKCk7Ci0KLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIGRhdGEsIGNvbGxlY3RpbmcgYWxsIHZhbHVlcyAoc3RyaW5ncywKLSAgICAvLyByZWZlcmVuY2VzLCBldGMpLgotICAgIFN0cmluZ1Bvb2wgdmFsdWVTdHJpbmdzKHVzZVVURjgpOwotICAgIFZlY3RvcjxzcDxFbnRyeT4gPiBhbGxFbnRyaWVzOwotICAgIGZvciAocGk9MDsgcGk8TjsgcGkrKykgewotICAgICAgICBzcDxQYWNrYWdlPiBwID0gbU9yZGVyZWRQYWNrYWdlcy5pdGVtQXQocGkpOwotICAgICAgICBpZiAocC0+Z2V0VHlwZXMoKS5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgLy8gRW1wdHksIHNraXAhCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ1Bvb2wgdHlwZVN0cmluZ3ModXNlVVRGOCk7Ci0gICAgICAgIFN0cmluZ1Bvb2wga2V5U3RyaW5ncyh1c2VVVEY4KTsKLQotICAgICAgICBjb25zdCBzaXplX3QgTiA9IHAtPmdldE9yZGVyZWRUeXBlcygpLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgdGk9MDsgdGk8TjsgdGkrKykgewotICAgICAgICAgICAgc3A8VHlwZT4gdCA9IHAtPmdldE9yZGVyZWRUeXBlcygpLml0ZW1BdCh0aSk7Ci0gICAgICAgICAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZ3MuYWRkKFN0cmluZzE2KCI8ZW1wdHk+IiksIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2IHR5cGVOYW1lKHQtPmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB0eXBlU3RyaW5ncy5hZGQodHlwZU5hbWUsIGZhbHNlKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gdHdlYWsgdGhlIHNvcnRpbmcgb3JkZXIgb2YgdGhlIGZpbmFsIHN0cmluZ3MsCi0gICAgICAgICAgICAvLyB0byBwdXQgc3R1ZmYgdGhhdCBpcyBnZW5lcmFsbHkgbm90IGxhbmd1YWdlLXNwZWNpZmljIGZpcnN0LgotICAgICAgICAgICAgU3RyaW5nOCBjb25maWdUeXBlTmFtZSh0eXBlTmFtZSk7Ci0gICAgICAgICAgICBpZiAoY29uZmlnVHlwZU5hbWUgPT0gImRyYXdhYmxlIiB8fCBjb25maWdUeXBlTmFtZSA9PSAibGF5b3V0IgotICAgICAgICAgICAgICAgICAgICB8fCBjb25maWdUeXBlTmFtZSA9PSAiY29sb3IiIHx8IGNvbmZpZ1R5cGVOYW1lID09ICJhbmltIgotICAgICAgICAgICAgICAgICAgICB8fCBjb25maWdUeXBlTmFtZSA9PSAiaW50ZXJwb2xhdG9yIiB8fCBjb25maWdUeXBlTmFtZSA9PSAiYW5pbWF0b3IiCi0gICAgICAgICAgICAgICAgICAgIHx8IGNvbmZpZ1R5cGVOYW1lID09ICJ4bWwiIHx8IGNvbmZpZ1R5cGVOYW1lID09ICJtZW51IgotICAgICAgICAgICAgICAgICAgICB8fCBjb25maWdUeXBlTmFtZSA9PSAibWlwbWFwIiB8fCBjb25maWdUeXBlTmFtZSA9PSAicmF3IikgewotICAgICAgICAgICAgICAgIGNvbmZpZ1R5cGVOYW1lID0gIjFjb21wbGV4IjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnVHlwZU5hbWUgPSAiMnZhbHVlIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgYm9vbCBmaWx0ZXJhYmxlID0gKHR5cGVOYW1lICE9IG1pcG1hcDE2KTsKLQotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSB0LT5nZXRPcmRlcmVkQ29uZmlncygpLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGNpPTA7IGNpPE47IGNpKyspIHsKLSAgICAgICAgICAgICAgICBzcDxDb25maWdMaXN0PiBjID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5pdGVtQXQoY2kpOwotICAgICAgICAgICAgICAgIGlmIChjID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOID0gYy0+Z2V0RW50cmllcygpLnNpemUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBlaT0wOyBlaTxOOyBlaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbmZpZ0Rlc2NyaXB0aW9uIGNvbmZpZyA9IGMtPmdldEVudHJpZXMoKS5rZXlBdChlaSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJhYmxlICYmICFmaWx0ZXIubWF0Y2goY29uZmlnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3A8RW50cnk+IGUgPSBjLT5nZXRFbnRyaWVzKCkudmFsdWVBdChlaSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGUtPnNldE5hbWVJbmRleChrZXlTdHJpbmdzLmFkZChlLT5nZXROYW1lKCksIHRydWUpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGVudHJ5IGhhcyBubyB2YWx1ZXMgZm9yIG90aGVyIGNvbmZpZ3MsCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBpcyB0aGUgZGVmYXVsdCBjb25maWcsIHRoZW4gaXQgaXMgc3BlY2lhbC4gIE90aGVyd2lzZQotICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3YW50IHRvIGFkZCBpdCB3aXRoIHRoZSBjb25maWcgaW5mby4KLSAgICAgICAgICAgICAgICAgICAgQ29uZmlnRGVzY3JpcHRpb24qIHZhbHVlQ29uZmlnID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKE4gIT0gMSB8fCBjb25maWcgPT0gbnVsbENvbmZpZykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVDb25maWcgPSAmY29uZmlnOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gZS0+cHJlcGFyZUZsYXR0ZW4oJnZhbHVlU3RyaW5ncywgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uZmlnVHlwZU5hbWUsICZjb25maWcpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGFsbEVudHJpZXMuYWRkKGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHAtPnNldFR5cGVTdHJpbmdzKHR5cGVTdHJpbmdzLmNyZWF0ZVN0cmluZ0Jsb2NrKCkpOwotICAgICAgICBwLT5zZXRLZXlTdHJpbmdzKGtleVN0cmluZ3MuY3JlYXRlU3RyaW5nQmxvY2soKSk7Ci0gICAgfQotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0T3V0cHV0QVBLRmlsZSgpICE9IE5VTEwpIHsKLSAgICAgICAgLy8gTm93IHdlIHdhbnQgdG8gc29ydCB0aGUgdmFsdWUgc3RyaW5ncyBmb3IgYmV0dGVyIGxvY2FsaXR5LiAgVGhpcyB3aWxsCi0gICAgICAgIC8vIGNhdXNlIHRoZSBwb3NpdGlvbnMgb2YgdGhlIHN0cmluZ3MgdG8gY2hhbmdlLCBzbyB3ZSBuZWVkIHRvIGdvIGJhY2sKLSAgICAgICAgLy8gdGhyb3VnaCBvdXQgcmVzb3VyY2UgZW50cmllcyBhbmQgdXBkYXRlIHRoZW0gYWNjb3JkaW5nbHkuICBPbmx5IG5lZWQKLSAgICAgICAgLy8gdG8gZG8gdGhpcyBpZiBhY3R1YWxseSB3cml0aW5nIHRoZSBvdXRwdXQgZmlsZS4KLSAgICAgICAgdmFsdWVTdHJpbmdzLnNvcnRCeUNvbmZpZygpOwotICAgICAgICBmb3IgKHBpPTA7IHBpPGFsbEVudHJpZXMuc2l6ZSgpOyBwaSsrKSB7Ci0gICAgICAgICAgICBhbGxFbnRyaWVzW3BpXS0+cmVtYXBTdHJpbmdWYWx1ZSgmdmFsdWVTdHJpbmdzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNzaXplX3Qgc3RyQW10ID0gMDsKLSAgICAKLSAgICAvLyBOb3cgYnVpbGQgdGhlIGFycmF5IG9mIHBhY2thZ2UgY2h1bmtzLgotICAgIFZlY3RvcjxzcDxBYXB0RmlsZT4gPiBmbGF0UGFja2FnZXM7Ci0gICAgZm9yIChwaT0wOyBwaTxOOyBwaSsrKSB7Ci0gICAgICAgIHNwPFBhY2thZ2U+IHAgPSBtT3JkZXJlZFBhY2thZ2VzLml0ZW1BdChwaSk7Ci0gICAgICAgIGlmIChwLT5nZXRUeXBlcygpLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBFbXB0eSwgc2tpcCEKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBwLT5nZXRUeXBlU3RyaW5ncygpLnNpemUoKTsKLQotICAgICAgICBjb25zdCBzaXplX3QgYmFzZVNpemUgPSBzaXplb2YoUmVzVGFibGVfcGFja2FnZSk7Ci0KLSAgICAgICAgLy8gU3RhcnQgdGhlIHBhY2thZ2UgZGF0YS4KLSAgICAgICAgc3A8QWFwdEZpbGU+IGRhdGEgPSBuZXcgQWFwdEZpbGUoU3RyaW5nOCgpLCBBYXB0R3JvdXBFbnRyeSgpLCBTdHJpbmc4KCkpOwotICAgICAgICBSZXNUYWJsZV9wYWNrYWdlKiBoZWFkZXIgPSAoUmVzVGFibGVfcGFja2FnZSopZGF0YS0+ZWRpdERhdGEoYmFzZVNpemUpOwotICAgICAgICBpZiAoaGVhZGVyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG91dCBvZiBtZW1vcnkgY3JlYXRpbmcgUmVzVGFibGVfcGFja2FnZVxuIik7Ci0gICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgICAgICB9Ci0gICAgICAgIG1lbXNldChoZWFkZXIsIDAsIHNpemVvZigqaGVhZGVyKSk7Ci0gICAgICAgIGhlYWRlci0+aGVhZGVyLnR5cGUgPSBodG9kcyhSRVNfVEFCTEVfUEFDS0FHRV9UWVBFKTsKLSAgICAgICAgaGVhZGVyLT5oZWFkZXIuaGVhZGVyU2l6ZSA9IGh0b2RzKHNpemVvZigqaGVhZGVyKSk7Ci0gICAgICAgIGhlYWRlci0+aWQgPSBodG9kbChwLT5nZXRBc3NpZ25lZElkKCkpOwotICAgICAgICBzdHJjcHkxNl9odG9kKGhlYWRlci0+bmFtZSwgcC0+Z2V0TmFtZSgpLnN0cmluZygpKTsKLQotICAgICAgICAvLyBXcml0ZSB0aGUgc3RyaW5nIGJsb2Nrcy4KLSAgICAgICAgY29uc3Qgc2l6ZV90IHR5cGVTdHJpbmdzU3RhcnQgPSBkYXRhLT5nZXRTaXplKCk7Ci0gICAgICAgIHNwPEFhcHRGaWxlPiBzdHJGaWxlID0gcC0+Z2V0VHlwZVN0cmluZ3NEYXRhKCk7Ci0gICAgICAgIHNzaXplX3QgYW10ID0gZGF0YS0+d3JpdGVEYXRhKHN0ckZpbGUtPmdldERhdGEoKSwgc3RyRmlsZS0+Z2V0U2l6ZSgpKTsKLSAgICAgICAgI2lmIFBSSU5UX1NUUklOR19NRVRSSUNTCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiKioqKiB0eXBlIHN0cmluZ3M6ICVkXG4iLCBhbXQpOwotICAgICAgICAjZW5kaWYKLSAgICAgICAgc3RyQW10ICs9IGFtdDsKLSAgICAgICAgaWYgKGFtdCA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiBhbXQ7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3Qgc2l6ZV90IGtleVN0cmluZ3NTdGFydCA9IGRhdGEtPmdldFNpemUoKTsKLSAgICAgICAgc3RyRmlsZSA9IHAtPmdldEtleVN0cmluZ3NEYXRhKCk7Ci0gICAgICAgIGFtdCA9IGRhdGEtPndyaXRlRGF0YShzdHJGaWxlLT5nZXREYXRhKCksIHN0ckZpbGUtPmdldFNpemUoKSk7Ci0gICAgICAgICNpZiBQUklOVF9TVFJJTkdfTUVUUklDUwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIioqKioga2V5IHN0cmluZ3M6ICVkXG4iLCBhbXQpOwotICAgICAgICAjZW5kaWYKLSAgICAgICAgc3RyQW10ICs9IGFtdDsKLSAgICAgICAgaWYgKGFtdCA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiBhbXQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBCdWlsZCB0aGUgdHlwZSBjaHVua3MgaW5zaWRlIG9mIHRoaXMgcGFja2FnZS4KLSAgICAgICAgZm9yIChzaXplX3QgdGk9MDsgdGk8TjsgdGkrKykgewotICAgICAgICAgICAgLy8gUmV0cmlldmUgdGhlbSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdHlwZSBzdHJpbmcgYmxvY2suCi0gICAgICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICAgICAgU3RyaW5nMTYgdHlwZU5hbWUocC0+Z2V0VHlwZVN0cmluZ3MoKS5zdHJpbmdBdCh0aSwgJmxlbikpOwotICAgICAgICAgICAgc3A8VHlwZT4gdCA9IHAtPmdldFR5cGVzKCkudmFsdWVGb3IodHlwZU5hbWUpOwotICAgICAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRih0ID09IE5VTEwgJiYgdHlwZU5hbWUgIT0gU3RyaW5nMTYoIjxlbXB0eT4iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlR5cGUgbmFtZSAlcyBub3QgZm91bmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHR5cGVOYW1lKS5zdHJpbmcoKSk7Ci0KLSAgICAgICAgICAgIGNvbnN0IGJvb2wgZmlsdGVyYWJsZSA9ICh0eXBlTmFtZSAhPSBtaXBtYXAxNik7Ci0KLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOID0gdCAhPSBOVUxMID8gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5zaXplKCkgOiAwOwotCi0gICAgICAgICAgICAvLyBVbnRpbCBhIG5vbi1OT19FTlRSWSB2YWx1ZSBoYXMgYmVlbiB3cml0dGVuIGZvciBhIHJlc291cmNlLAotICAgICAgICAgICAgLy8gdGhhdCByZXNvdXJjZSBpcyBpbnZhbGlkOyB2YWxpZFJlc291cmNlc1tpXSByZXByZXNlbnRzCi0gICAgICAgICAgICAvLyB0aGUgaXRlbSBhdCB0LT5nZXRPcmRlcmVkQ29uZmlncygpLml0ZW1BdChpKS4KLSAgICAgICAgICAgIFZlY3Rvcjxib29sPiB2YWxpZFJlc291cmNlczsKLSAgICAgICAgICAgIHZhbGlkUmVzb3VyY2VzLmluc2VydEF0KGZhbHNlLCAwLCBOKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRmlyc3Qgd3JpdGUgdGhlIHR5cGVTcGVjIGNodW5rLCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0Ci0gICAgICAgICAgICAvLyBlYWNoIHJlc291cmNlIGVudHJ5IGluIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgdHlwZVNwZWNTaXplID0gc2l6ZW9mKFJlc1RhYmxlX3R5cGVTcGVjKSArIHNpemVvZih1aW50MzJfdCkqTjsKLSAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgdHlwZVNwZWNTdGFydCA9IGRhdGEtPmdldFNpemUoKTsKLSAgICAgICAgICAgICAgICBSZXNUYWJsZV90eXBlU3BlYyogdHNIZWFkZXIgPSAoUmVzVGFibGVfdHlwZVNwZWMqKQotICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KilkYXRhLT5lZGl0RGF0YSh0eXBlU3BlY1N0YXJ0K3R5cGVTcGVjU2l6ZSkpICsgdHlwZVNwZWNTdGFydCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRzSGVhZGVyID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogb3V0IG9mIG1lbW9yeSBjcmVhdGluZyBSZXNUYWJsZV90eXBlU3BlY1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbXNldCh0c0hlYWRlciwgMCwgc2l6ZW9mKCp0c0hlYWRlcikpOwotICAgICAgICAgICAgICAgIHRzSGVhZGVyLT5oZWFkZXIudHlwZSA9IGh0b2RzKFJFU19UQUJMRV9UWVBFX1NQRUNfVFlQRSk7Ci0gICAgICAgICAgICAgICAgdHNIZWFkZXItPmhlYWRlci5oZWFkZXJTaXplID0gaHRvZHMoc2l6ZW9mKCp0c0hlYWRlcikpOwotICAgICAgICAgICAgICAgIHRzSGVhZGVyLT5oZWFkZXIuc2l6ZSA9IGh0b2RsKHR5cGVTcGVjU2l6ZSk7Ci0gICAgICAgICAgICAgICAgdHNIZWFkZXItPmlkID0gdGkrMTsKLSAgICAgICAgICAgICAgICB0c0hlYWRlci0+ZW50cnlDb3VudCA9IGh0b2RsKE4pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHVpbnQzMl90KiB0eXBlU3BlY0ZsYWdzID0gKHVpbnQzMl90KikKLSAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCopZGF0YS0+ZWRpdERhdGEoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgdHlwZVNwZWNTdGFydCArIHNpemVvZihSZXNUYWJsZV90eXBlU3BlYykpOwotICAgICAgICAgICAgICAgIG1lbXNldCh0eXBlU3BlY0ZsYWdzLCAwLCBzaXplb2YodWludDMyX3QpKk4pOwotCi0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgZWk9MDsgZWk8TjsgZWkrKykgewotICAgICAgICAgICAgICAgICAgICBzcDxDb25maWdMaXN0PiBjbCA9IHQtPmdldE9yZGVyZWRDb25maWdzKCkuaXRlbUF0KGVpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNsLT5nZXRQdWJsaWMoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVNwZWNGbGFnc1tlaV0gfD0gaHRvZGwoUmVzVGFibGVfdHlwZVNwZWM6OlNQRUNfUFVCTElDKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgQ04gPSBjbC0+Z2V0RW50cmllcygpLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY2k9MDsgY2k8Q047IGNpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJhYmxlICYmICFmaWx0ZXIubWF0Y2goY2wtPmdldEVudHJpZXMoKS5rZXlBdChjaSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjaj1jaSsxOyBjajxDTjsgY2orKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJhYmxlICYmICFmaWx0ZXIubWF0Y2goY2wtPmdldEVudHJpZXMoKS5rZXlBdChjaikpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlU3BlY0ZsYWdzW2VpXSB8PSBodG9kbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmdldEVudHJpZXMoKS5rZXlBdChjaSkuZGlmZihjbC0+Z2V0RW50cmllcygpLmtleUF0KGNqKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHdyaXRlIG9uZSB0eXBlIGNodW5rIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24gZm9yCi0gICAgICAgICAgICAvLyB3aGljaCB3ZSBoYXZlIGVudHJpZXMgaW4gdGhpcyB0eXBlLgotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE5DID0gdC0+Z2V0VW5pcXVlQ29uZmlncygpLnNpemUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHR5cGVTaXplID0gc2l6ZW9mKFJlc1RhYmxlX3R5cGUpICsgc2l6ZW9mKHVpbnQzMl90KSpOOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBjaT0wOyBjaTxOQzsgY2krKykgewotICAgICAgICAgICAgICAgIENvbmZpZ0Rlc2NyaXB0aW9uIGNvbmZpZyA9IHQtPmdldFVuaXF1ZUNvbmZpZ3MoKS5pdGVtQXQoY2kpOwotCi0gICAgICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJXcml0aW5nIGNvbmZpZyAlZCBjb25maWc6IGltc2k6JWQvJWQgbGFuZzolYyVjIGNudDolYyVjICIKLSAgICAgICAgICAgICAgICAgICAgICJvcmllbjolZCB1aTolZCB0b3VjaDolZCBkZW5zaXR5OiVkIGtleTolZCBpbnA6JWQgbmF2OiVkIHN6OiVkeCVkICIKLSAgICAgICAgICAgICAgICAgICAgICJzdyVkZHAgdyVkZHAgaCVkZHAgZGlyOiVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgIHRpKzEsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLm1jYywgY29uZmlnLm1uYywKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcubGFuZ3VhZ2VbMF0gPyBjb25maWcubGFuZ3VhZ2VbMF0gOiAnLScsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmxhbmd1YWdlWzFdID8gY29uZmlnLmxhbmd1YWdlWzFdIDogJy0nLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5jb3VudHJ5WzBdID8gY29uZmlnLmNvdW50cnlbMF0gOiAnLScsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmNvdW50cnlbMV0gPyBjb25maWcuY291bnRyeVsxXSA6ICctJywKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcub3JpZW50YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnVpTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcudG91Y2hzY3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmRlbnNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmtleWJvYXJkLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5pbnB1dEZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5uYXZpZ2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zY3JlZW5XaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc2NyZWVuSGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zbWFsbGVzdFNjcmVlbldpZHRoRHAsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNjcmVlbldpZHRoRHAsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNjcmVlbkhlaWdodERwLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5sYXlvdXREaXJlY3Rpb24pKTsKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoZmlsdGVyYWJsZSAmJiAhZmlsdGVyLm1hdGNoKGNvbmZpZykpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCB0eXBlU3RhcnQgPSBkYXRhLT5nZXRTaXplKCk7Ci0KLSAgICAgICAgICAgICAgICBSZXNUYWJsZV90eXBlKiB0SGVhZGVyID0gKFJlc1RhYmxlX3R5cGUqKQotICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KilkYXRhLT5lZGl0RGF0YSh0eXBlU3RhcnQrdHlwZVNpemUpKSArIHR5cGVTdGFydCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRIZWFkZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBvdXQgb2YgbWVtb3J5IGNyZWF0aW5nIFJlc1RhYmxlX3R5cGVcbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1lbXNldCh0SGVhZGVyLCAwLCBzaXplb2YoKnRIZWFkZXIpKTsKLSAgICAgICAgICAgICAgICB0SGVhZGVyLT5oZWFkZXIudHlwZSA9IGh0b2RzKFJFU19UQUJMRV9UWVBFX1RZUEUpOwotICAgICAgICAgICAgICAgIHRIZWFkZXItPmhlYWRlci5oZWFkZXJTaXplID0gaHRvZHMoc2l6ZW9mKCp0SGVhZGVyKSk7Ci0gICAgICAgICAgICAgICAgdEhlYWRlci0+aWQgPSB0aSsxOwotICAgICAgICAgICAgICAgIHRIZWFkZXItPmVudHJ5Q291bnQgPSBodG9kbChOKTsKLSAgICAgICAgICAgICAgICB0SGVhZGVyLT5lbnRyaWVzU3RhcnQgPSBodG9kbCh0eXBlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnID0gY29uZmlnOwotICAgICAgICAgICAgICAgIE5PSVNZKHByaW50ZigiV3JpdGluZyB0eXBlICVkIGNvbmZpZzogaW1zaTolZC8lZCBsYW5nOiVjJWMgY250OiVjJWMgIgotICAgICAgICAgICAgICAgICAgICAgIm9yaWVuOiVkIHVpOiVkIHRvdWNoOiVkIGRlbnNpdHk6JWQga2V5OiVkIGlucDolZCBuYXY6JWQgc3o6JWR4JWQgIgotICAgICAgICAgICAgICAgICAgICAgInN3JWRkcCB3JWRkcCBoJWRkcCBkaXI6JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgdGkrMSwKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcubWNjLCB0SGVhZGVyLT5jb25maWcubW5jLAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy5sYW5ndWFnZVswXSA/IHRIZWFkZXItPmNvbmZpZy5sYW5ndWFnZVswXSA6ICctJywKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcubGFuZ3VhZ2VbMV0gPyB0SGVhZGVyLT5jb25maWcubGFuZ3VhZ2VbMV0gOiAnLScsCi0gICAgICAgICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnLmNvdW50cnlbMF0gPyB0SGVhZGVyLT5jb25maWcuY291bnRyeVswXSA6ICctJywKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcuY291bnRyeVsxXSA/IHRIZWFkZXItPmNvbmZpZy5jb3VudHJ5WzFdIDogJy0nLAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy5vcmllbnRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcudWlNb2RlLAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy50b3VjaHNjcmVlbiwKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcuZGVuc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcua2V5Ym9hcmQsCi0gICAgICAgICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnLmlucHV0RmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnLm5hdmlnYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnLnNjcmVlbldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy5zY3JlZW5IZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnLnNtYWxsZXN0U2NyZWVuV2lkdGhEcCwKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcuc2NyZWVuV2lkdGhEcCwKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcuc2NyZWVuSGVpZ2h0RHAsCi0gICAgICAgICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnLmxheW91dERpcmVjdGlvbikpOwotICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy5zd2FwSHRvRCgpOwotCi0gICAgICAgICAgICAgICAgLy8gQnVpbGQgdGhlIGVudHJpZXMgaW5zaWRlIG9mIHRoaXMgdHlwZS4KLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBlaT0wOyBlaTxOOyBlaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwPENvbmZpZ0xpc3Q+IGNsID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5pdGVtQXQoZWkpOwotICAgICAgICAgICAgICAgICAgICBzcDxFbnRyeT4gZSA9IGNsLT5nZXRFbnRyaWVzKCkudmFsdWVGb3IoY29uZmlnKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIG9mZnNldCBmb3IgdGhpcyBlbnRyeSBpbiBpdHMgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIGluZGV4ID0gKHVpbnQzMl90KikKLSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QqKWRhdGEtPmVkaXREYXRhKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0eXBlU3RhcnQgKyBzaXplb2YoUmVzVGFibGVfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFtlaV0gPSBodG9kbChkYXRhLT5nZXRTaXplKCktdHlwZVN0YXJ0LXR5cGVTaXplKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBlbnRyeS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgYW10ID0gZS0+ZmxhdHRlbihidW5kbGUsIGRhdGEsIGNsLT5nZXRQdWJsaWMoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW10IDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZFJlc291cmNlcy5lZGl0SXRlbUF0KGVpKSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFtlaV0gPSBodG9kbChSZXNUYWJsZV90eXBlOjpOT19FTlRSWSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSB0eXBlIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgIHRIZWFkZXIgPSAoUmVzVGFibGVfdHlwZSopCi0gICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QqKWRhdGEtPmVkaXREYXRhKCkpICsgdHlwZVN0YXJ0KTsKLSAgICAgICAgICAgICAgICB0SGVhZGVyLT5oZWFkZXIuc2l6ZSA9IGh0b2RsKGRhdGEtPmdldFNpemUoKS10eXBlU3RhcnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE47ICsraSkgewotICAgICAgICAgICAgICAgIGlmICghdmFsaWRSZXNvdXJjZXNbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgc3A8Q29uZmlnTGlzdD4gYyA9IHQtPmdldE9yZGVyZWRDb25maWdzKCkuaXRlbUF0KGkpOwotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IG5vIGVudHJpZXMgd3JpdHRlbiBmb3IgJXMvJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCh0eXBlTmFtZSkuc3RyaW5nKCksIFN0cmluZzgoYy0+Z2V0TmFtZSgpKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmlsbCBpbiB0aGUgcmVzdCBvZiB0aGUgcGFja2FnZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgaGVhZGVyID0gKFJlc1RhYmxlX3BhY2thZ2UqKWRhdGEtPmVkaXREYXRhKCk7Ci0gICAgICAgIGhlYWRlci0+aGVhZGVyLnNpemUgPSBodG9kbChkYXRhLT5nZXRTaXplKCkpOwotICAgICAgICBoZWFkZXItPnR5cGVTdHJpbmdzID0gaHRvZGwodHlwZVN0cmluZ3NTdGFydCk7Ci0gICAgICAgIGhlYWRlci0+bGFzdFB1YmxpY1R5cGUgPSBodG9kbChwLT5nZXRUeXBlU3RyaW5ncygpLnNpemUoKSk7Ci0gICAgICAgIGhlYWRlci0+a2V5U3RyaW5ncyA9IGh0b2RsKGtleVN0cmluZ3NTdGFydCk7Ci0gICAgICAgIGhlYWRlci0+bGFzdFB1YmxpY0tleSA9IGh0b2RsKHAtPmdldEtleVN0cmluZ3MoKS5zaXplKCkpOwotCi0gICAgICAgIGZsYXRQYWNrYWdlcy5hZGQoZGF0YSk7Ci0gICAgfQotCi0gICAgLy8gQW5kIG5vdyB3cml0ZSBvdXQgdGhlIGZpbmFsIGNodW5rcy4KLSAgICBjb25zdCBzaXplX3QgZGF0YVN0YXJ0ID0gZGVzdC0+Z2V0U2l6ZSgpOwotCi0gICAgewotICAgICAgICAvLyBibGFoCi0gICAgICAgIFJlc1RhYmxlX2hlYWRlciBoZWFkZXI7Ci0gICAgICAgIG1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7Ci0gICAgICAgIGhlYWRlci5oZWFkZXIudHlwZSA9IGh0b2RzKFJFU19UQUJMRV9UWVBFKTsKLSAgICAgICAgaGVhZGVyLmhlYWRlci5oZWFkZXJTaXplID0gaHRvZHMoc2l6ZW9mKGhlYWRlcikpOwotICAgICAgICBoZWFkZXIucGFja2FnZUNvdW50ID0gaHRvZGwoZmxhdFBhY2thZ2VzLnNpemUoKSk7Ci0gICAgICAgIHN0YXR1c190IGVyciA9IGRlc3QtPndyaXRlRGF0YSgmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG91dCBvZiBtZW1vcnkgY3JlYXRpbmcgUmVzVGFibGVfaGVhZGVyXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3NpemVfdCBzdHJTdGFydCA9IGRlc3QtPmdldFNpemUoKTsKLSAgICBlcnIgPSB2YWx1ZVN0cmluZ3Mud3JpdGVTdHJpbmdCbG9jayhkZXN0KTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgc3NpemVfdCBhbXQgPSAoZGVzdC0+Z2V0U2l6ZSgpLXN0clN0YXJ0KTsKLSAgICBzdHJBbXQgKz0gYW10OwotICAgICNpZiBQUklOVF9TVFJJTkdfTUVUUklDUwotICAgIGZwcmludGYoc3RkZXJyLCAiKioqKiB2YWx1ZSBzdHJpbmdzOiAlZFxuIiwgYW10KTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIioqKiogdG90YWwgc3RyaW5nczogJWRcbiIsIHN0ckFtdCk7Ci0gICAgI2VuZGlmCi0gICAgCi0gICAgZm9yIChwaT0wOyBwaTxmbGF0UGFja2FnZXMuc2l6ZSgpOyBwaSsrKSB7Ci0gICAgICAgIGVyciA9IGRlc3QtPndyaXRlRGF0YShmbGF0UGFja2FnZXNbcGldLT5nZXREYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0UGFja2FnZXNbcGldLT5nZXRTaXplKCkpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBvdXQgb2YgbWVtb3J5IGNyZWF0aW5nIHBhY2thZ2UgY2h1bmsgZm9yIFJlc1RhYmxlX2hlYWRlclxuIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVzVGFibGVfaGVhZGVyKiBoZWFkZXIgPSAoUmVzVGFibGVfaGVhZGVyKikKLSAgICAgICAgKCgodWludDhfdCopZGVzdC0+Z2V0RGF0YSgpKSArIGRhdGFTdGFydCk7Ci0gICAgaGVhZGVyLT5oZWFkZXIuc2l6ZSA9IGh0b2RsKGRlc3QtPmdldFNpemUoKSAtIGRhdGFTdGFydCk7Ci0KLSAgICBOT0lTWShhb3V0IDw8ICJSZXNvdXJjZSB0YWJsZToiCi0gICAgICAgICAgPDwgSGV4RHVtcChkZXN0LT5nZXREYXRhKCksIGRlc3QtPmdldFNpemUoKSkgPDwgZW5kbCk7Ci0KLSAgICAjaWYgUFJJTlRfU1RSSU5HX01FVFJJQ1MKLSAgICBmcHJpbnRmKHN0ZGVyciwgIioqKiogdG90YWwgcmVzb3VyY2UgdGFibGUgc2l6ZTogJWQgLyAlZCUlIHN0cmluZ3NcbiIsCi0gICAgICAgIGRlc3QtPmdldFNpemUoKSwgKHN0ckFtdCoxMDApL2Rlc3QtPmdldFNpemUoKSk7Ci0gICAgI2VuZGlmCi0gICAgCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi12b2lkIFJlc291cmNlVGFibGU6OndyaXRlUHVibGljRGVmaW5pdGlvbnMoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsIEZJTEUqIGZwKQotewotICAgIGZwcmludGYoZnAsCi0gICAgIjwhLS0gVGhpcyBmaWxlIGNvbnRhaW5zIDxwdWJsaWM+IHJlc291cmNlIGRlZmluaXRpb25zIGZvciBhbGxcbiIKLSAgICAiICAgICByZXNvdXJjZXMgdGhhdCB3ZXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBzb3VyY2UgZGF0YS4gLS0+XG4iCi0gICAgIlxuIgotICAgICI8cmVzb3VyY2VzPlxuIik7Ci0KLSAgICB3cml0ZVB1YmxpY0RlZmluaXRpb25zKHBhY2thZ2UsIGZwLCB0cnVlKTsKLSAgICB3cml0ZVB1YmxpY0RlZmluaXRpb25zKHBhY2thZ2UsIGZwLCBmYWxzZSk7Ci0KLSAgICBmcHJpbnRmKGZwLAotICAgICJcbiIKLSAgICAiPC9yZXNvdXJjZXM+XG4iKTsKLX0KLQotdm9pZCBSZXNvdXJjZVRhYmxlOjp3cml0ZVB1YmxpY0RlZmluaXRpb25zKGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLCBGSUxFKiBmcCwgYm9vbCBwdWIpCi17Ci0gICAgYm9vbCBkaWRIZWFkZXIgPSBmYWxzZTsKLQotICAgIHNwPFBhY2thZ2U+IHBrZyA9IG1QYWNrYWdlcy52YWx1ZUZvcihwYWNrYWdlKTsKLSAgICBpZiAocGtnICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE5UID0gcGtnLT5nZXRPcmRlcmVkVHlwZXMoKS5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOVDsgaSsrKSB7Ci0gICAgICAgICAgICBzcDxUeXBlPiB0ID0gcGtnLT5nZXRPcmRlcmVkVHlwZXMoKS5pdGVtQXQoaSk7Ci0gICAgICAgICAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wgZGlkVHlwZSA9IGZhbHNlOwotCi0gICAgICAgICAgICBjb25zdCBzaXplX3QgTkMgPSB0LT5nZXRPcmRlcmVkQ29uZmlncygpLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGo9MDsgajxOQzsgaisrKSB7Ci0gICAgICAgICAgICAgICAgc3A8Q29uZmlnTGlzdD4gYyA9IHQtPmdldE9yZGVyZWRDb25maWdzKCkuaXRlbUF0KGopOwotICAgICAgICAgICAgICAgIGlmIChjID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGMtPmdldFB1YmxpYygpICE9IHB1YikgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWRpZFR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGRpZFR5cGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWRpZEhlYWRlcikgewotICAgICAgICAgICAgICAgICAgICBpZiAocHViKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCIgIDwhLS0gUFVCTElDIFNFQ1RJT04uICBUaGVzZSByZXNvdXJjZXMgaGF2ZSBiZWVuIGRlY2xhcmVkIHB1YmxpYy5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwiICAgICAgIENoYW5nZXMgdG8gdGhlc2UgZGVmaW5pdGlvbnMgd2lsbCBicmVhayBiaW5hcnkgY29tcGF0aWJpbGl0eS4gLS0+XG5cbiIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwiICA8IS0tIFBSSVZBVEUgU0VDVElPTi4gIFRoZXNlIHJlc291cmNlcyBoYXZlIG5vdCBiZWVuIGRlY2xhcmVkIHB1YmxpYy5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwiICAgICAgIFlvdSBjYW4gbWFrZSB0aGVtIHB1YmxpYyBteSBtb3ZpbmcgdGhlc2UgbGluZXMgaW50byBhIGZpbGUgaW4gcmVzL3ZhbHVlcy4gLS0+XG5cbiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRpZEhlYWRlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghcHViKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBORSA9IGMtPmdldEVudHJpZXMoKS5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGs9MDsgazxORTsgaysrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VQb3MmIHBvcyA9IGMtPmdldEVudHJpZXMoKS52YWx1ZUF0KGspLT5nZXRQb3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MuZmlsZSAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsIiAgPCEtLSBEZWNsYXJlZCBhdCAlczolZCAtLT5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MuZmlsZS5zdHJpbmcoKSwgcG9zLmxpbmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIgIDxwdWJsaWMgdHlwZT1cIiVzXCIgbmFtZT1cIiVzXCIgaWQ9XCIweCUwOHhcIiAvPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgodC0+Z2V0TmFtZSgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYy0+Z2V0TmFtZSgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlc0lkKHBrZywgdCwgYy0+Z2V0RW50cnlJbmRleCgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVJlc291cmNlVGFibGU6Okl0ZW06Okl0ZW0oY29uc3QgU291cmNlUG9zJiBfc291cmNlUG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIF9pc0lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4qIF9zdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBfZm9ybWF0KQotICAgIDogc291cmNlUG9zKF9zb3VyY2VQb3MpCi0gICAgLCBpc0lkKF9pc0lkKQotICAgICwgdmFsdWUoX3ZhbHVlKQotICAgICwgZm9ybWF0KF9mb3JtYXQpCi0gICAgLCBiYWdLZXlJZCgwKQotICAgICwgZXZhbHVhdGluZyhmYWxzZSkKLXsKLSAgICBpZiAoX3N0eWxlKSB7Ci0gICAgICAgIHN0eWxlID0gKl9zdHlsZTsKLSAgICB9Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OkVudHJ5OjptYWtlSXRBQmFnKGNvbnN0IFNvdXJjZVBvcyYgc291cmNlUG9zKQotewotICAgIGlmIChtVHlwZSA9PSBUWVBFX0JBRykgewotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotICAgIGlmIChtVHlwZSA9PSBUWVBFX1VOS05PV04pIHsKLSAgICAgICAgbVR5cGUgPSBUWVBFX0JBRzsKLSAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgIH0KLSAgICBzb3VyY2VQb3MuZXJyb3IoIlJlc291cmNlIGVudHJ5ICVzIGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIHNpbmdsZSBpdGVtLlxuIgotICAgICAgICAgICAgICAgICAgICAiJXM6JWQ6IE9yaWdpbmFsbHkgZGVmaW5lZCBoZXJlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChtTmFtZSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIG1JdGVtLnNvdXJjZVBvcy5maWxlLnN0cmluZygpLCBtSXRlbS5zb3VyY2VQb3MubGluZSk7Ci0gICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OkVudHJ5OjpzZXRJdGVtKGNvbnN0IFNvdXJjZVBvcyYgc291cmNlUG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+KiBzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBvdmVyd3JpdGUpCi17Ci0gICAgSXRlbSBpdGVtKHNvdXJjZVBvcywgZmFsc2UsIHZhbHVlLCBzdHlsZSk7Ci0KLSAgICBpZiAobVR5cGUgPT0gVFlQRV9CQUcpIHsKLSAgICAgICAgY29uc3QgSXRlbSYgaXRlbShtQmFnLnZhbHVlQXQoMCkpOwotICAgICAgICBzb3VyY2VQb3MuZXJyb3IoIlJlc291cmNlIGVudHJ5ICVzIGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIGJhZy5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICIlczolZDogT3JpZ2luYWxseSBkZWZpbmVkIGhlcmUuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChtTmFtZSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNvdXJjZVBvcy5maWxlLnN0cmluZygpLCBpdGVtLnNvdXJjZVBvcy5saW5lKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIGlmICggKG1UeXBlICE9IFRZUEVfVU5LTk9XTikgJiYgKG92ZXJ3cml0ZSA9PSBmYWxzZSkgKSB7Ci0gICAgICAgIHNvdXJjZVBvcy5lcnJvcigiUmVzb3VyY2UgZW50cnkgJXMgaXMgYWxyZWFkeSBkZWZpbmVkLlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiVkOiBPcmlnaW5hbGx5IGRlZmluZWQgaGVyZS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG1OYW1lKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1JdGVtLnNvdXJjZVBvcy5maWxlLnN0cmluZygpLCBtSXRlbS5zb3VyY2VQb3MubGluZSk7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIG1UeXBlID0gVFlQRV9JVEVNOwotICAgIG1JdGVtID0gaXRlbTsKLSAgICBtSXRlbUZvcm1hdCA9IGZvcm1hdDsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OkVudHJ5OjphZGRUb0JhZyhjb25zdCBTb3VyY2VQb3MmIHNvdXJjZVBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYga2V5LCBjb25zdCBTdHJpbmcxNiYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+KiBzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlcGxhY2UsIGJvb2wgaXNJZCwgaW50MzJfdCBmb3JtYXQpCi17Ci0gICAgc3RhdHVzX3QgZXJyID0gbWFrZUl0QUJhZyhzb3VyY2VQb3MpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBJdGVtIGl0ZW0oc291cmNlUG9zLCBpc0lkLCB2YWx1ZSwgc3R5bGUsIGZvcm1hdCk7Ci0gICAgCi0gICAgLy8gWFhYIE5PVEU6IHRoZXJlIGlzIGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gaGF2ZSBhIGJhZyB3aXRoIHR3byBrZXlzLAotICAgIC8vIG9uZSBhbiBhdHRyIGFuZCBvbmUgYW4gaWQsIHdpdGggdGhlIHNhbWUgbmFtZS4gIE5vdCBzb21ldGhpbmcgd2UKLSAgICAvLyBjdXJyZW50bHkgZXZlciBoYXZlIHRvIHdvcnJ5IGFib3V0LgotICAgIHNzaXplX3Qgb3JpZ0tleSA9IG1CYWcuaW5kZXhPZktleShrZXkpOwotICAgIGlmIChvcmlnS2V5ID49IDApIHsKLSAgICAgICAgaWYgKCFyZXBsYWNlKSB7Ci0gICAgICAgICAgICBjb25zdCBJdGVtJiBpdGVtKG1CYWcudmFsdWVBdChvcmlnS2V5KSk7Ci0gICAgICAgICAgICBzb3VyY2VQb3MuZXJyb3IoIlJlc291cmNlIGVudHJ5ICVzIGFscmVhZHkgaGFzIGJhZyBpdGVtICVzLlxuIgotICAgICAgICAgICAgICAgICAgICAiJXM6JWQ6IE9yaWdpbmFsbHkgZGVmaW5lZCBoZXJlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChtTmFtZSkuc3RyaW5nKCksIFN0cmluZzgoa2V5KS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgaXRlbS5zb3VyY2VQb3MuZmlsZS5zdHJpbmcoKSwgaXRlbS5zb3VyY2VQb3MubGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICAvL3ByaW50ZigiUmVwbGFjaW5nICVzIHdpdGggJXNcbiIsCi0gICAgICAgIC8vICAgICAgIFN0cmluZzgobUJhZy52YWx1ZUZvcihrZXkpLnZhbHVlKS5zdHJpbmcoKSwgU3RyaW5nOCh2YWx1ZSkuc3RyaW5nKCkpOwotICAgICAgICBtQmFnLnJlcGxhY2VWYWx1ZUZvcihrZXksIGl0ZW0pOwotICAgIH0KLQotICAgIG1CYWcuYWRkKGtleSwgaXRlbSk7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjpFbnRyeTo6ZW1wdHlCYWcoY29uc3QgU291cmNlUG9zJiBzb3VyY2VQb3MpCi17Ci0gICAgc3RhdHVzX3QgZXJyID0gbWFrZUl0QUJhZyhzb3VyY2VQb3MpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBtQmFnLmNsZWFyKCk7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjpFbnRyeTo6Z2VuZXJhdGVBdHRyaWJ1dGVzKFJlc291cmNlVGFibGUqIHRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgcGFja2FnZSkKLXsKLSAgICBjb25zdCBTdHJpbmcxNiBhdHRyMTYoImF0dHIiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBpZDE2KCJpZCIpOwotICAgIGNvbnN0IHNpemVfdCBOID0gbUJhZy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBTdHJpbmcxNiYga2V5ID0gbUJhZy5rZXlBdChpKTsKLSAgICAgICAgY29uc3QgSXRlbSYgaXQgPSBtQmFnLnZhbHVlQXQoaSk7Ci0gICAgICAgIGlmIChpdC5pc0lkKSB7Ci0gICAgICAgICAgICBpZiAoIXRhYmxlLT5oYXNCYWdPckVudHJ5KGtleSwgJmlkMTYsICZwYWNrYWdlKSkgewotICAgICAgICAgICAgICAgIFN0cmluZzE2IHZhbHVlKCJmYWxzZSIpOwotICAgICAgICAgICAgICAgIHN0YXR1c190IGVyciA9IHRhYmxlLT5hZGRFbnRyeShTb3VyY2VQb3MoU3RyaW5nOCgiPGdlbmVyYXRlZD4iKSwgMCksIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkMTYsIGtleSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIXRhYmxlLT5oYXNCYWdPckVudHJ5KGtleSwgJmF0dHIxNiwgJnBhY2thZ2UpKSB7Ci0KLSNpZiAxCi0vLyAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBCYWcgYXR0cmlidXRlICclcycgaGFzIG5vdCBiZWVuIGRlZmluZWQuXG4iLAotLy8gICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGtleSkuc3RyaW5nKCkpOwotLy8gICAgICAgICAgICAgY29uc3QgSXRlbSYgaXRlbShtQmFnLnZhbHVlQXQoaSkpOwotLy8gICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJSZWZlcmVuY2VkIGZyb20gZmlsZSAlcyBsaW5lICVkXG4iLAotLy8gICAgICAgICAgICAgICAgICAgICBpdGVtLnNvdXJjZVBvcy5maWxlLnN0cmluZygpLCBpdGVtLnNvdXJjZVBvcy5saW5lKTsKLS8vICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotI2Vsc2UKLSAgICAgICAgICAgIGNoYXIgbnVtYmVyU3RyWzE2XTsKLSAgICAgICAgICAgIHNwcmludGYobnVtYmVyU3RyLCAiJWQiLCBSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZKTsKLSAgICAgICAgICAgIHN0YXR1c190IGVyciA9IHRhYmxlLT5hZGRCYWcoU291cmNlUG9zKCI8Z2VuZXJhdGVkPiIsIDApLCBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyMTYsIGtleSwgU3RyaW5nMTYoIiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNigiXnR5cGUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYobnVtYmVyU3RyKSwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6RW50cnk6OmFzc2lnblJlc291cmNlSWRzKFJlc291cmNlVGFibGUqIHRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlKQotewotICAgIGJvb2wgaGFzRXJyb3JzID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKG1UeXBlID09IFRZUEVfQkFHKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVycm9yTXNnOwotICAgICAgICBjb25zdCBTdHJpbmcxNiBzdHlsZTE2KCJzdHlsZSIpOwotICAgICAgICBjb25zdCBTdHJpbmcxNiBhdHRyMTYoImF0dHIiKTsKLSAgICAgICAgY29uc3QgU3RyaW5nMTYgaWQxNigiaWQiKTsKLSAgICAgICAgbVBhcmVudElkID0gMDsKLSAgICAgICAgaWYgKG1QYXJlbnQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgbVBhcmVudElkID0gdGFibGUtPmdldFJlc0lkKG1QYXJlbnQsICZzdHlsZTE2LCBOVUxMLCAmZXJyb3JNc2cpOwotICAgICAgICAgICAgaWYgKG1QYXJlbnRJZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgbVBvcy5lcnJvcigiRXJyb3IgcmV0cmlldmluZyBwYXJlbnQgZm9yIGl0ZW06ICVzICclcycuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNc2csIFN0cmluZzgobVBhcmVudCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBtQmFnLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGtleSA9IG1CYWcua2V5QXQoaSk7Ci0gICAgICAgICAgICBJdGVtJiBpdCA9IG1CYWcuZWRpdFZhbHVlQXQoaSk7Ci0gICAgICAgICAgICBpdC5iYWdLZXlJZCA9IHRhYmxlLT5nZXRSZXNJZChrZXksCi0gICAgICAgICAgICAgICAgICAgIGl0LmlzSWQgPyAmaWQxNiA6ICZhdHRyMTYsIE5VTEwsICZlcnJvck1zZyk7Ci0gICAgICAgICAgICAvL3ByaW50ZigiQmFnIGtleSBvZiAlczogIyUwOHhcbiIsIFN0cmluZzgoa2V5KS5zdHJpbmcoKSwgaXQuYmFnS2V5SWQpOwotICAgICAgICAgICAgaWYgKGl0LmJhZ0tleUlkID09IDApIHsKLSAgICAgICAgICAgICAgICBpdC5zb3VyY2VQb3MuZXJyb3IoIkVycm9yOiAlczogJXMgJyVzJy5cbiIsIGVycm9yTXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChpdC5pc0lkID8gaWQxNiA6IGF0dHIxNikuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGtleSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGhhc0Vycm9ycyA/IFVOS05PV05fRVJST1IgOiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6RW50cnk6OnByZXBhcmVGbGF0dGVuKFN0cmluZ1Bvb2wqIHN0cmluZ3MsIFJlc291cmNlVGFibGUqIHRhYmxlLAotICAgICAgICBjb25zdCBTdHJpbmc4KiBjb25maWdUeXBlTmFtZSwgY29uc3QgQ29uZmlnRGVzY3JpcHRpb24qIGNvbmZpZykKLXsKLSAgICBpZiAobVR5cGUgPT0gVFlQRV9JVEVNKSB7Ci0gICAgICAgIEl0ZW0mIGl0ID0gbUl0ZW07Ci0gICAgICAgIEFjY2Vzc29yQ29va2llIGFjKGl0LnNvdXJjZVBvcywgU3RyaW5nOChtTmFtZSksIFN0cmluZzgoaXQudmFsdWUpKTsKLSAgICAgICAgaWYgKCF0YWJsZS0+c3RyaW5nVG9WYWx1ZSgmaXQucGFyc2VkVmFsdWUsIHN0cmluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQudmFsdWUsIGZhbHNlLCB0cnVlLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpdC5zdHlsZSwgTlVMTCwgJmFjLCBtSXRlbUZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdUeXBlTmFtZSwgY29uZmlnKSkgewotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1UeXBlID09IFRZUEVfQkFHKSB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gbUJhZy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBrZXkgPSBtQmFnLmtleUF0KGkpOwotICAgICAgICAgICAgSXRlbSYgaXQgPSBtQmFnLmVkaXRWYWx1ZUF0KGkpOwotICAgICAgICAgICAgQWNjZXNzb3JDb29raWUgYWMoaXQuc291cmNlUG9zLCBTdHJpbmc4KGtleSksIFN0cmluZzgoaXQudmFsdWUpKTsKLSAgICAgICAgICAgIGlmICghdGFibGUtPnN0cmluZ1RvVmFsdWUoJml0LnBhcnNlZFZhbHVlLCBzdHJpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC52YWx1ZSwgZmFsc2UsIHRydWUsIGl0LmJhZ0tleUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXQuc3R5bGUsIE5VTEwsICZhYywgaXQuZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdUeXBlTmFtZSwgY29uZmlnKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbVBvcy5lcnJvcigiRXJyb3I6IGVudHJ5ICVzIGlzIG5vdCBhIHNpbmdsZSBpdGVtIG9yIGEgYmFnLlxuIiwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG1OYW1lKS5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OkVudHJ5OjpyZW1hcFN0cmluZ1ZhbHVlKFN0cmluZ1Bvb2wqIHN0cmluZ3MpCi17Ci0gICAgaWYgKG1UeXBlID09IFRZUEVfSVRFTSkgewotICAgICAgICBJdGVtJiBpdCA9IG1JdGVtOwotICAgICAgICBpZiAoaXQucGFyc2VkVmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX1NUUklORykgewotICAgICAgICAgICAgaXQucGFyc2VkVmFsdWUuZGF0YSA9IHN0cmluZ3MtPm1hcE9yaWdpbmFsUG9zVG9OZXdQb3MoaXQucGFyc2VkVmFsdWUuZGF0YSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1UeXBlID09IFRZUEVfQkFHKSB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gbUJhZy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIEl0ZW0mIGl0ID0gbUJhZy5lZGl0VmFsdWVBdChpKTsKLSAgICAgICAgICAgIGlmIChpdC5wYXJzZWRWYWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfU1RSSU5HKSB7Ci0gICAgICAgICAgICAgICAgaXQucGFyc2VkVmFsdWUuZGF0YSA9IHN0cmluZ3MtPm1hcE9yaWdpbmFsUG9zVG9OZXdQb3MoaXQucGFyc2VkVmFsdWUuZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBtUG9zLmVycm9yKCJFcnJvcjogZW50cnkgJXMgaXMgbm90IGEgc2luZ2xlIGl0ZW0gb3IgYSBiYWcuXG4iLAotICAgICAgICAgICAgICAgICAgIFN0cmluZzgobU5hbWUpLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3NpemVfdCBSZXNvdXJjZVRhYmxlOjpFbnRyeTo6ZmxhdHRlbihCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEZpbGU+JiBkYXRhLCBib29sIGlzUHVibGljKQotewotICAgIHNpemVfdCBhbXQgPSAwOwotICAgIFJlc1RhYmxlX2VudHJ5IGhlYWRlcjsKLSAgICBtZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOwotICAgIGhlYWRlci5zaXplID0gaHRvZHMoc2l6ZW9mKGhlYWRlcikpOwotICAgIGNvbnN0IHR5cGUgdHkgPSB0aGlzICE9IE5VTEwgPyBtVHlwZSA6IFRZUEVfSVRFTTsKLSAgICBpZiAodGhpcyAhPSBOVUxMKSB7Ci0gICAgICAgIGlmICh0eSA9PSBUWVBFX0JBRykgewotICAgICAgICAgICAgaGVhZGVyLmZsYWdzIHw9IGh0b2RzKGhlYWRlci5GTEFHX0NPTVBMRVgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc1B1YmxpYykgewotICAgICAgICAgICAgaGVhZGVyLmZsYWdzIHw9IGh0b2RzKGhlYWRlci5GTEFHX1BVQkxJQyk7Ci0gICAgICAgIH0KLSAgICAgICAgaGVhZGVyLmtleS5pbmRleCA9IGh0b2RsKG1OYW1lSW5kZXgpOwotICAgIH0KLSAgICBpZiAodHkgIT0gVFlQRV9CQUcpIHsKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gZGF0YS0+d3JpdGVEYXRhKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogb3V0IG9mIG1lbW9yeSBjcmVhdGluZyBSZXNUYWJsZV9lbnRyeVxuIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgSXRlbSYgaXQgPSBtSXRlbTsKLSAgICAgICAgUmVzX3ZhbHVlIHBhcjsKLSAgICAgICAgbWVtc2V0KCZwYXIsIDAsIHNpemVvZihwYXIpKTsKLSAgICAgICAgcGFyLnNpemUgPSBodG9kcyhpdC5wYXJzZWRWYWx1ZS5zaXplKTsKLSAgICAgICAgcGFyLmRhdGFUeXBlID0gaXQucGFyc2VkVmFsdWUuZGF0YVR5cGU7Ci0gICAgICAgIHBhci5yZXMwID0gaXQucGFyc2VkVmFsdWUucmVzMDsKLSAgICAgICAgcGFyLmRhdGEgPSBodG9kbChpdC5wYXJzZWRWYWx1ZS5kYXRhKTsKLSAgICAgICAgI2lmIDAKLSAgICAgICAgcHJpbnRmKCJXcml0aW5nIGl0ZW0gKCVzKTogdHlwZT0lZCwgZGF0YT0weCV4LCByZXMwPTB4JXhcbiIsCi0gICAgICAgICAgICAgICBTdHJpbmc4KG1OYW1lKS5zdHJpbmcoKSwgaXQucGFyc2VkVmFsdWUuZGF0YVR5cGUsCi0gICAgICAgICAgICAgICBpdC5wYXJzZWRWYWx1ZS5kYXRhLCBwYXIucmVzMCk7Ci0gICAgICAgICNlbmRpZgotICAgICAgICBlcnIgPSBkYXRhLT53cml0ZURhdGEoJnBhciwgaXQucGFyc2VkVmFsdWUuc2l6ZSk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG91dCBvZiBtZW1vcnkgY3JlYXRpbmcgUmVzX3ZhbHVlXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgYW10ICs9IGl0LnBhcnNlZFZhbHVlLnNpemU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2l6ZV90IE4gPSBtQmFnLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IGk7Ci0gICAgICAgIC8vIENyZWF0ZSBjb3JyZWN0IG9yZGVyaW5nIG9mIGl0ZW1zLgotICAgICAgICBLZXllZFZlY3Rvcjx1aW50MzJfdCwgY29uc3QgSXRlbSo+IGl0ZW1zOwotICAgICAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IEl0ZW0mIGl0ID0gbUJhZy52YWx1ZUF0KGkpOwotICAgICAgICAgICAgaXRlbXMuYWRkKGl0LmJhZ0tleUlkLCAmaXQpOwotICAgICAgICB9Ci0gICAgICAgIE4gPSBpdGVtcy5zaXplKCk7Ci0gICAgICAgIAotICAgICAgICBSZXNUYWJsZV9tYXBfZW50cnkgbWFwSGVhZGVyOwotICAgICAgICBtZW1jcHkoJm1hcEhlYWRlciwgJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOwotICAgICAgICBtYXBIZWFkZXIuc2l6ZSA9IGh0b2RzKHNpemVvZihtYXBIZWFkZXIpKTsKLSAgICAgICAgbWFwSGVhZGVyLnBhcmVudC5pZGVudCA9IGh0b2RsKG1QYXJlbnRJZCk7Ci0gICAgICAgIG1hcEhlYWRlci5jb3VudCA9IGh0b2RsKE4pOwotICAgICAgICBzdGF0dXNfdCBlcnIgPSBkYXRhLT53cml0ZURhdGEoJm1hcEhlYWRlciwgc2l6ZW9mKG1hcEhlYWRlcikpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBvdXQgb2YgbWVtb3J5IGNyZWF0aW5nIFJlc1RhYmxlX2VudHJ5XG4iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IEl0ZW0mIGl0ID0gKml0ZW1zLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICBSZXNUYWJsZV9tYXAgbWFwOwotICAgICAgICAgICAgbWFwLm5hbWUuaWRlbnQgPSBodG9kbChpdC5iYWdLZXlJZCk7Ci0gICAgICAgICAgICBtYXAudmFsdWUuc2l6ZSA9IGh0b2RzKGl0LnBhcnNlZFZhbHVlLnNpemUpOwotICAgICAgICAgICAgbWFwLnZhbHVlLmRhdGFUeXBlID0gaXQucGFyc2VkVmFsdWUuZGF0YVR5cGU7Ci0gICAgICAgICAgICBtYXAudmFsdWUucmVzMCA9IGl0LnBhcnNlZFZhbHVlLnJlczA7Ci0gICAgICAgICAgICBtYXAudmFsdWUuZGF0YSA9IGh0b2RsKGl0LnBhcnNlZFZhbHVlLmRhdGEpOwotICAgICAgICAgICAgZXJyID0gZGF0YS0+d3JpdGVEYXRhKCZtYXAsIHNpemVvZihtYXApKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBvdXQgb2YgbWVtb3J5IGNyZWF0aW5nIFJlc192YWx1ZVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFtdCArPSBzaXplb2YobWFwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYW10OwotfQotCi12b2lkIFJlc291cmNlVGFibGU6OkNvbmZpZ0xpc3Q6OmFwcGVuZENvbW1lbnQoY29uc3QgU3RyaW5nMTYmIGNvbW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvbmx5SWZFbXB0eSkKLXsKLSAgICBpZiAoY29tbWVudC5zaXplKCkgPD0gMCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvbmx5SWZFbXB0eSAmJiBtQ29tbWVudC5zaXplKCkgPiAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1Db21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgbUNvbW1lbnQuYXBwZW5kKFN0cmluZzE2KCJcbiIpKTsKLSAgICB9Ci0gICAgbUNvbW1lbnQuYXBwZW5kKGNvbW1lbnQpOwotfQotCi12b2lkIFJlc291cmNlVGFibGU6OkNvbmZpZ0xpc3Q6OmFwcGVuZFR5cGVDb21tZW50KGNvbnN0IFN0cmluZzE2JiBjb21tZW50KQotewotICAgIGlmIChjb21tZW50LnNpemUoKSA8PSAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1UeXBlQ29tbWVudC5zaXplKCkgPiAwKSB7Ci0gICAgICAgIG1UeXBlQ29tbWVudC5hcHBlbmQoU3RyaW5nMTYoIlxuIikpOwotICAgIH0KLSAgICBtVHlwZUNvbW1lbnQuYXBwZW5kKGNvbW1lbnQpOwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjpUeXBlOjphZGRQdWJsaWMoY29uc3QgU291cmNlUG9zJiBzb3VyY2VQb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgaWRlbnQpCi17Ci0gICAgI2lmIDAKLSAgICBpbnQzMl90IGVudHJ5SWR4ID0gUmVzX0dFVEVOVFJZKGlkZW50KTsKLSAgICBpZiAoZW50cnlJZHggPCAwKSB7Ci0gICAgICAgIHNvdXJjZVBvcy5lcnJvcigiUHVibGljIHJlc291cmNlICVzLyVzIGhhcyBhbiBpbnZhbGlkIDAgaWRlbnRpZmllciAoMHglMDh4KS5cbiIsCi0gICAgICAgICAgICAgICAgU3RyaW5nOChtTmFtZSkuc3RyaW5nKCksIFN0cmluZzgobmFtZSkuc3RyaW5nKCksIGlkZW50KTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgICNlbmRpZgotCi0gICAgaW50MzJfdCB0eXBlSWR4ID0gUmVzX0dFVFRZUEUoaWRlbnQpOwotICAgIGlmICh0eXBlSWR4ID49IDApIHsKLSAgICAgICAgdHlwZUlkeCsrOwotICAgICAgICBpZiAobVB1YmxpY0luZGV4ID4gMCAmJiBtUHVibGljSW5kZXggIT0gdHlwZUlkeCkgewotICAgICAgICAgICAgc291cmNlUG9zLmVycm9yKCJQdWJsaWMgcmVzb3VyY2UgJXMvJXMgaGFzIGNvbmZsaWN0aW5nIHR5cGUgY29kZXMgZm9yIGl0cyIKLSAgICAgICAgICAgICAgICAgICAgIiBwdWJsaWMgaWRlbnRpZmllcnMgKDB4JXggdnMgMHgleCkuXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG1OYW1lKS5zdHJpbmcoKSwgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgbVB1YmxpY0luZGV4LCB0eXBlSWR4KTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIG1QdWJsaWNJbmRleCA9IHR5cGVJZHg7Ci0gICAgfQotCi0gICAgaWYgKG1GaXJzdFB1YmxpY1NvdXJjZVBvcyA9PSBOVUxMKSB7Ci0gICAgICAgIG1GaXJzdFB1YmxpY1NvdXJjZVBvcyA9IG5ldyBTb3VyY2VQb3Moc291cmNlUG9zKTsKLSAgICB9Ci0KLSAgICBpZiAobVB1YmxpYy5pbmRleE9mS2V5KG5hbWUpIDwgMCkgewotICAgICAgICBtUHVibGljLmFkZChuYW1lLCBQdWJsaWMoc291cmNlUG9zLCBTdHJpbmcxNigpLCBpZGVudCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFB1YmxpYyYgcCA9IG1QdWJsaWMuZWRpdFZhbHVlRm9yKG5hbWUpOwotICAgICAgICBpZiAocC5pZGVudCAhPSBpZGVudCkgewotICAgICAgICAgICAgc291cmNlUG9zLmVycm9yKCJQdWJsaWMgcmVzb3VyY2UgJXMvJXMgaGFzIGNvbmZsaWN0aW5nIHB1YmxpYyBpZGVudGlmaWVycyIKLSAgICAgICAgICAgICAgICAgICAgIiAoMHglMDh4IHZzIDB4JTA4eCkuXG4iCi0gICAgICAgICAgICAgICAgICAgICIlczolZDogT3JpZ2luYWxseSBkZWZpbmVkIGhlcmUuXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG1OYW1lKS5zdHJpbmcoKSwgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSwgcC5pZGVudCwgaWRlbnQsCi0gICAgICAgICAgICAgICAgICAgIHAuc291cmNlUG9zLmZpbGUuc3RyaW5nKCksIHAuc291cmNlUG9zLmxpbmUpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXZvaWQgUmVzb3VyY2VUYWJsZTo6VHlwZTo6Y2FuQWRkRW50cnkoY29uc3QgU3RyaW5nMTYmIG5hbWUpCi17Ci0gICAgbUNhbkFkZEVudHJpZXMuYWRkKG5hbWUpOwotfQotCi1zcDxSZXNvdXJjZVRhYmxlOjpFbnRyeT4gUmVzb3VyY2VUYWJsZTo6VHlwZTo6Z2V0RW50cnkoY29uc3QgU3RyaW5nMTYmIGVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZVBvcyYgc291cmNlUG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZG9TZXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG92ZXJsYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvQWRkT3ZlcmxheSkKLXsKLSAgICBpbnQgcG9zID0gLTE7Ci0gICAgc3A8Q29uZmlnTGlzdD4gYyA9IG1Db25maWdzLnZhbHVlRm9yKGVudHJ5KTsKLSAgICBpZiAoYyA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChvdmVybGF5ICYmICFhdXRvQWRkT3ZlcmxheSAmJiBtQ2FuQWRkRW50cmllcy5pbmRleE9mKGVudHJ5KSA8IDApIHsKLSAgICAgICAgICAgIHNvdXJjZVBvcy5lcnJvcigiUmVzb3VyY2UgYXQgJXMgYXBwZWFycyBpbiBvdmVybGF5IGJ1dCBub3QiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbiB0aGUgYmFzZSBwYWNrYWdlOyB1c2UgPGFkZC1yZXNvdXJjZT4gdG8gYWRkLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGVudHJ5KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBjID0gbmV3IENvbmZpZ0xpc3QoZW50cnksIHNvdXJjZVBvcyk7Ci0gICAgICAgIG1Db25maWdzLmFkZChlbnRyeSwgYyk7Ci0gICAgICAgIHBvcyA9IChpbnQpbU9yZGVyZWRDb25maWdzLnNpemUoKTsKLSAgICAgICAgbU9yZGVyZWRDb25maWdzLmFkZChjKTsKLSAgICAgICAgaWYgKGRvU2V0SW5kZXgpIHsKLSAgICAgICAgICAgIGMtPnNldEVudHJ5SW5kZXgocG9zKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBDb25maWdEZXNjcmlwdGlvbiBjZGVzYzsKLSAgICBpZiAoY29uZmlnKSBjZGVzYyA9ICpjb25maWc7Ci0gICAgCi0gICAgc3A8RW50cnk+IGUgPSBjLT5nZXRFbnRyaWVzKCkudmFsdWVGb3IoY2Rlc2MpOwotICAgIGlmIChlID09IE5VTEwpIHsKLSAgICAgICAgaWYgKGNvbmZpZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBOT0lTWShwcmludGYoIk5ldyBlbnRyeSBhdCAlczolZDogaW1zaTolZC8lZCBsYW5nOiVjJWMgY250OiVjJWMgIgotICAgICAgICAgICAgICAgICAgICAib3JpZW46JWQgdG91Y2g6JWQgZGVuc2l0eTolZCBrZXk6JWQgaW5wOiVkIG5hdjolZCBzejolZHglZCAiCi0gICAgICAgICAgICAgICAgICAgICJzdyVkZHAgdyVkZHAgaCVkZHAgZGlyOiVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBvcy5maWxlLnN0cmluZygpLCBzb3VyY2VQb3MubGluZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWctPm1jYywgY29uZmlnLT5tbmMsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5sYW5ndWFnZVswXSA/IGNvbmZpZy0+bGFuZ3VhZ2VbMF0gOiAnLScsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5sYW5ndWFnZVsxXSA/IGNvbmZpZy0+bGFuZ3VhZ2VbMV0gOiAnLScsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5jb3VudHJ5WzBdID8gY29uZmlnLT5jb3VudHJ5WzBdIDogJy0nLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+Y291bnRyeVsxXSA/IGNvbmZpZy0+Y291bnRyeVsxXSA6ICctJywKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWctPm9yaWVudGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+dG91Y2hzY3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5kZW5zaXR5LAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+a2V5Ym9hcmQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5pbnB1dEZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+bmF2aWdhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWctPnNjcmVlbldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+c2NyZWVuSGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+c21hbGxlc3RTY3JlZW5XaWR0aERwLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+c2NyZWVuV2lkdGhEcCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWctPnNjcmVlbkhlaWdodERwLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+bGF5b3V0RGlyZWN0aW9uKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBOT0lTWShwcmludGYoIk5ldyBlbnRyeSBhdCAlczolZDogTlVMTCBjb25maWdcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgc291cmNlUG9zLmZpbGUuc3RyaW5nKCksIHNvdXJjZVBvcy5saW5lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZSA9IG5ldyBFbnRyeShlbnRyeSwgc291cmNlUG9zKTsKLSAgICAgICAgYy0+YWRkRW50cnkoY2Rlc2MsIGUpOwotICAgICAgICAvKgotICAgICAgICBpZiAoZG9TZXRJbmRleCkgewotICAgICAgICAgICAgaWYgKHBvcyA8IDApIHsKLSAgICAgICAgICAgICAgICBmb3IgKHBvcz0wOyBwb3M8KGludCltT3JkZXJlZENvbmZpZ3Muc2l6ZSgpOyBwb3MrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAobU9yZGVyZWRDb25maWdzW3Bvc10gPT0gYykgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA+PSAoaW50KW1PcmRlcmVkQ29uZmlncy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlUG9zLmVycm9yKCJJbnRlcm5hbCBlcnJvcjogY29uZmlnIG5vdCBmb3VuZCBpbiBtT3JkZXJlZENvbmZpZ3Mgd2hlbiBhZGRpbmcgZW50cnkiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZS0+c2V0RW50cnlJbmRleChwb3MpOwotICAgICAgICB9Ci0gICAgICAgICovCi0gICAgfQotICAgIAotICAgIG1VbmlxdWVDb25maWdzLmFkZChjZGVzYyk7Ci0gICAgCi0gICAgcmV0dXJuIGU7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OlR5cGU6OmFwcGx5UHVibGljRW50cnlPcmRlcigpCi17Ci0gICAgc2l6ZV90IE4gPSBtT3JkZXJlZENvbmZpZ3Muc2l6ZSgpOwotICAgIFZlY3RvcjxzcDxDb25maWdMaXN0PiA+IG9yaWdPcmRlcihtT3JkZXJlZENvbmZpZ3MpOwotICAgIGJvb2wgaGFzRXJyb3IgPSBmYWxzZTsKLQotICAgIHNpemVfdCBpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBtT3JkZXJlZENvbmZpZ3MucmVwbGFjZUF0KE5VTEwsIGkpOwotICAgIH0KLQotICAgIGNvbnN0IHNpemVfdCBOUCA9IG1QdWJsaWMuc2l6ZSgpOwotICAgIC8vcHJpbnRmKCJPcmRlcmluZyAlZCBjb25maWdzIGZyb20gJWQgcHVibGljIGRlZnNcbiIsIE4sIE5QKTsKLSAgICBzaXplX3QgajsKLSAgICBmb3IgKGo9MDsgajxOUDsgaisrKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lID0gbVB1YmxpYy5rZXlBdChqKTsKLSAgICAgICAgY29uc3QgUHVibGljJiBwID0gbVB1YmxpYy52YWx1ZUF0KGopOwotICAgICAgICBpbnQzMl90IGlkeCA9IFJlc19HRVRFTlRSWShwLmlkZW50KTsKLSAgICAgICAgLy9wcmludGYoIkxvb2tpbmcgZm9yIGVudHJ5IFwiJXNcIi9cIiVzXCIgKDB4JTA4eCkgaW4gJWQuLi5cbiIsCi0gICAgICAgIC8vICAgICAgIFN0cmluZzgobU5hbWUpLnN0cmluZygpLCBTdHJpbmc4KG5hbWUpLnN0cmluZygpLCBwLmlkZW50LCBOKTsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIHNwPENvbmZpZ0xpc3Q+IGUgPSBvcmlnT3JkZXIuaXRlbUF0KGkpOwotICAgICAgICAgICAgLy9wcmludGYoIiMlZDogXCIlc1wiXG4iLCBpLCBTdHJpbmc4KGUtPmdldE5hbWUoKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgaWYgKGUtPmdldE5hbWUoKSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlkeCA+PSAoaW50MzJfdCltT3JkZXJlZENvbmZpZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHAuc291cmNlUG9zLmVycm9yKCJQdWJsaWMgZW50cnkgaWRlbnRpZmllciAweCV4IGVudHJ5IGluZGV4ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXMgbGFyZ2VyIHRoYW4gYXZhaWxhYmxlIHN5bWJvbHMgKGluZGV4ICVkLCB0b3RhbCBzeW1ib2xzICVkKS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5pZGVudCwgaWR4LCBtT3JkZXJlZENvbmZpZ3Muc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobU9yZGVyZWRDb25maWdzLml0ZW1BdChpZHgpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZS0+c2V0UHVibGljKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBlLT5zZXRQdWJsaWNTb3VyY2VQb3MocC5zb3VyY2VQb3MpOwotICAgICAgICAgICAgICAgICAgICBtT3JkZXJlZENvbmZpZ3MucmVwbGFjZUF0KGUsIGlkeCk7Ci0gICAgICAgICAgICAgICAgICAgIG9yaWdPcmRlci5yZW1vdmVBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgTi0tOwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwPENvbmZpZ0xpc3Q+IG9lID0gbU9yZGVyZWRDb25maWdzLml0ZW1BdChpZHgpOwotCi0gICAgICAgICAgICAgICAgICAgIHAuc291cmNlUG9zLmVycm9yKCJNdWx0aXBsZSBlbnRyeSBuYW1lcyBkZWNsYXJlZCBmb3IgcHVibGljIGVudHJ5IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaWRlbnRpZmllciAweCV4IGluIHR5cGUgJXMgKCVzIHZzICVzKS5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6JWQ6IE9yaWdpbmFsbHkgZGVmaW5lZCBoZXJlLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4KzEsIFN0cmluZzgobU5hbWUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgob2UtPmdldE5hbWUoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZS0+Z2V0UHVibGljU291cmNlUG9zKCkuZmlsZS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZS0+Z2V0UHVibGljU291cmNlUG9zKCkubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICBwLnNvdXJjZVBvcy5lcnJvcigiUHVibGljIHN5bWJvbCAlcy8lcyBkZWNsYXJlZCBoZXJlIGlzIG5vdCBkZWZpbmVkLiIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgobU5hbWUpLnN0cmluZygpLCBTdHJpbmc4KG5hbWUpLnN0cmluZygpKTsKLSAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vcHJpbnRmKCJDb3B5aW5nIGJhY2sgaW4gJWQgbm9uLXB1YmxpYyBjb25maWdzLCBoYXZlICVkXG4iLCBOLCBvcmlnT3JkZXIuc2l6ZSgpKTsKLSAgICAKLSAgICBpZiAoTiAhPSBvcmlnT3JkZXIuc2l6ZSgpKSB7Ci0gICAgICAgIHByaW50ZigiSW50ZXJuYWwgZXJyb3I6IHJlbWFpbmluZyBwcml2YXRlIHN5bWJvbCBjb3VudCBtaXNtYXRjaFxuIik7Ci0gICAgICAgIE4gPSBvcmlnT3JkZXIuc2l6ZSgpOwotICAgIH0KLSAgICAKLSAgICBqID0gMDsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgc3A8Q29uZmlnTGlzdD4gZSA9IG9yaWdPcmRlci5pdGVtQXQoaSk7Ci0gICAgICAgIC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGVub3VnaCByb29tIGZvciB0aGUgcmVtYWluaW5nIGVudHJpZXMuCi0gICAgICAgIHdoaWxlIChtT3JkZXJlZENvbmZpZ3MuaXRlbUF0KGopICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGorKzsKLSAgICAgICAgfQotICAgICAgICBtT3JkZXJlZENvbmZpZ3MucmVwbGFjZUF0KGUsIGopOwotICAgICAgICBqKys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhc0Vycm9yID8gVU5LTk9XTl9FUlJPUiA6IE5PX0VSUk9SOwotfQotCi1SZXNvdXJjZVRhYmxlOjpQYWNrYWdlOjpQYWNrYWdlKGNvbnN0IFN0cmluZzE2JiBuYW1lLCBzc2l6ZV90IGluY2x1ZGVkSWQpCi0gICAgOiBtTmFtZShuYW1lKSwgbUluY2x1ZGVkSWQoaW5jbHVkZWRJZCksCi0gICAgICBtVHlwZVN0cmluZ3NNYXBwaW5nKDB4ZmZmZmZmZmYpLAotICAgICAgbUtleVN0cmluZ3NNYXBwaW5nKDB4ZmZmZmZmZmYpCi17Ci19Ci0KLXNwPFJlc291cmNlVGFibGU6OlR5cGU+IFJlc291cmNlVGFibGU6OlBhY2thZ2U6OmdldFR5cGUoY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZVBvcyYgc291cmNlUG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRvU2V0SW5kZXgpCi17Ci0gICAgc3A8VHlwZT4gdCA9IG1UeXBlcy52YWx1ZUZvcih0eXBlKTsKLSAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgIHQgPSBuZXcgVHlwZSh0eXBlLCBzb3VyY2VQb3MpOwotICAgICAgICBtVHlwZXMuYWRkKHR5cGUsIHQpOwotICAgICAgICBtT3JkZXJlZFR5cGVzLmFkZCh0KTsKLSAgICAgICAgaWYgKGRvU2V0SW5kZXgpIHsKLSAgICAgICAgICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aGUgdHlwZSdzIGluZGV4IGlzIHNldCB0byBvbmUgcGx1cyB0aGUgaW5kZXgKLSAgICAgICAgICAgIC8vIGluIHRoZSBtT3JkZXJlZFR5cGVzIGxpc3QsIHJhdGhlciB0aGFuIGp1c3QgdGhlIGluZGV4LgotICAgICAgICAgICAgdC0+c2V0SW5kZXgobU9yZGVyZWRUeXBlcy5zaXplKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0OwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjpQYWNrYWdlOjpzZXRUeXBlU3RyaW5ncyhjb25zdCBzcDxBYXB0RmlsZT4mIGRhdGEpCi17Ci0gICAgbVR5cGVTdHJpbmdzRGF0YSA9IGRhdGE7Ci0gICAgc3RhdHVzX3QgZXJyID0gc2V0U3RyaW5ncyhkYXRhLCAmbVR5cGVTdHJpbmdzLCAmbVR5cGVTdHJpbmdzTWFwcGluZyk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBUeXBlIHN0cmluZyBkYXRhIGlzIGNvcnJ1cHQhXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6UGFja2FnZTo6c2V0S2V5U3RyaW5ncyhjb25zdCBzcDxBYXB0RmlsZT4mIGRhdGEpCi17Ci0gICAgbUtleVN0cmluZ3NEYXRhID0gZGF0YTsKLSAgICBzdGF0dXNfdCBlcnIgPSBzZXRTdHJpbmdzKGRhdGEsICZtS2V5U3RyaW5ncywgJm1LZXlTdHJpbmdzTWFwcGluZyk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBLZXkgc3RyaW5nIGRhdGEgaXMgY29ycnVwdCFcbiIpOwotICAgIH0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjpQYWNrYWdlOjpzZXRTdHJpbmdzKGNvbnN0IHNwPEFhcHRGaWxlPiYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzU3RyaW5nUG9vbCogc3RyaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzE2LCB1aW50MzJfdD4qIG1hcHBpbmdzKQotewotICAgIGlmIChkYXRhLT5nZXREYXRhKCkgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBOT0lTWShhb3V0IDw8ICJTZXR0aW5nIHJlc3RhYmxlIHN0cmluZyBwb29sOiAiCi0gICAgICAgICAgPDwgSGV4RHVtcChkYXRhLT5nZXREYXRhKCksIGRhdGEtPmdldFNpemUoKSkgPDwgZW5kbCk7Ci0KLSAgICBzdGF0dXNfdCBlcnIgPSBzdHJpbmdzLT5zZXRUbyhkYXRhLT5nZXREYXRhKCksIGRhdGEtPmdldFNpemUoKSk7Ci0gICAgaWYgKGVyciA9PSBOT19FUlJPUikgewotICAgICAgICBjb25zdCBzaXplX3QgTiA9IHN0cmluZ3MtPnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgICAgIG1hcHBpbmdzLT5hZGQoU3RyaW5nMTYoc3RyaW5ncy0+c3RyaW5nQXQoaSwgJmxlbikpLCBpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjpQYWNrYWdlOjphcHBseVB1YmxpY1R5cGVPcmRlcigpCi17Ci0gICAgc2l6ZV90IE4gPSBtT3JkZXJlZFR5cGVzLnNpemUoKTsKLSAgICBWZWN0b3I8c3A8VHlwZT4gPiBvcmlnT3JkZXIobU9yZGVyZWRUeXBlcyk7Ci0KLSAgICBzaXplX3QgaTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgbU9yZGVyZWRUeXBlcy5yZXBsYWNlQXQoTlVMTCwgaSk7Ci0gICAgfQotCi0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHNwPFR5cGU+IHQgPSBvcmlnT3JkZXIuaXRlbUF0KGkpOwotICAgICAgICBpbnQzMl90IGlkeCA9IHQtPmdldFB1YmxpY0luZGV4KCk7Ci0gICAgICAgIGlmIChpZHggPiAwKSB7Ci0gICAgICAgICAgICBpZHgtLTsKLSAgICAgICAgICAgIHdoaWxlIChpZHggPj0gKGludDMyX3QpbU9yZGVyZWRUeXBlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBtT3JkZXJlZFR5cGVzLmFkZCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1PcmRlcmVkVHlwZXMuaXRlbUF0KGlkeCkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNwPFR5cGU+IG90ID0gbU9yZGVyZWRUeXBlcy5pdGVtQXQoaWR4KTsKLSAgICAgICAgICAgICAgICB0LT5nZXRGaXJzdFB1YmxpY1NvdXJjZVBvcygpLmVycm9yKCJNdWx0aXBsZSB0eXBlIG5hbWVzIGRlY2xhcmVkIGZvciBwdWJsaWMgdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgaWRlbnRpZmllciAweCV4ICglcyB2cyAlcykuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXM6JWQ6IE9yaWdpbmFsbHkgZGVmaW5lZCBoZXJlLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHgsIFN0cmluZzgob3QtPmdldE5hbWUoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHQtPmdldE5hbWUoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBvdC0+Z2V0Rmlyc3RQdWJsaWNTb3VyY2VQb3MoKS5maWxlLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgb3QtPmdldEZpcnN0UHVibGljU291cmNlUG9zKCkubGluZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtT3JkZXJlZFR5cGVzLnJlcGxhY2VBdCh0LCBpZHgpOwotICAgICAgICAgICAgb3JpZ09yZGVyLnJlbW92ZUF0KGkpOwotICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgTi0tOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2l6ZV90IGo9MDsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgc3A8VHlwZT4gdCA9IG9yaWdPcmRlci5pdGVtQXQoaSk7Ci0gICAgICAgIC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGVub3VnaCByb29tIGZvciB0aGUgcmVtYWluaW5nIHR5cGVzLgotICAgICAgICB3aGlsZSAobU9yZGVyZWRUeXBlcy5pdGVtQXQoaikgIT0gTlVMTCkgewotICAgICAgICAgICAgaisrOwotICAgICAgICB9Ci0gICAgICAgIG1PcmRlcmVkVHlwZXMucmVwbGFjZUF0KHQsIGopOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3A8UmVzb3VyY2VUYWJsZTo6UGFja2FnZT4gUmVzb3VyY2VUYWJsZTo6Z2V0UGFja2FnZShjb25zdCBTdHJpbmcxNiYgcGFja2FnZSkKLXsKLSAgICBzcDxQYWNrYWdlPiBwID0gbVBhY2thZ2VzLnZhbHVlRm9yKHBhY2thZ2UpOwotICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgaWYgKG1Jc0FwcFBhY2thZ2UpIHsKLSAgICAgICAgICAgIGlmIChtSGF2ZUFwcFBhY2thZ2UpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkFkZGluZyBtdWx0aXBsZSBhcHBsaWNhdGlvbiBwYWNrYWdlIHJlc291cmNlczsgb25seSBvbmUgaXMgYWxsb3dlZC5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAteCB0byBjcmVhdGUgZXh0ZW5kZWQgcmVzb3VyY2VzLlxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtSGF2ZUFwcFBhY2thZ2UgPSB0cnVlOwotICAgICAgICAgICAgcCA9IG5ldyBQYWNrYWdlKHBhY2thZ2UsIDEyNyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwID0gbmV3IFBhY2thZ2UocGFja2FnZSwgbU5leHRQYWNrYWdlSWQpOwotICAgICAgICB9Ci0gICAgICAgIC8vcHJpbnRmKCIqKiogTkVXIFBBQ0tBR0U6IFwiJXNcIiBpZD0lZFxuIiwKLSAgICAgICAgLy8gICAgICAgU3RyaW5nOChwYWNrYWdlKS5zdHJpbmcoKSwgcC0+Z2V0QXNzaWduZWRJZCgpKTsKLSAgICAgICAgbVBhY2thZ2VzLmFkZChwYWNrYWdlLCBwKTsKLSAgICAgICAgbU9yZGVyZWRQYWNrYWdlcy5hZGQocCk7Ci0gICAgICAgIG1OZXh0UGFja2FnZUlkKys7Ci0gICAgfQotICAgIHJldHVybiBwOwotfQotCi1zcDxSZXNvdXJjZVRhYmxlOjpUeXBlPiBSZXNvdXJjZVRhYmxlOjpnZXRUeXBlKGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291cmNlUG9zJiBzb3VyY2VQb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZG9TZXRJbmRleCkKLXsKLSAgICBzcDxQYWNrYWdlPiBwID0gZ2V0UGFja2FnZShwYWNrYWdlKTsKLSAgICBpZiAocCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gcC0+Z2V0VHlwZSh0eXBlLCBzb3VyY2VQb3MsIGRvU2V0SW5kZXgpOwotfQotCi1zcDxSZXNvdXJjZVRhYmxlOjpFbnRyeT4gUmVzb3VyY2VUYWJsZTo6Z2V0RW50cnkoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291cmNlUG9zJiBzb3VyY2VQb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvdmVybGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZG9TZXRJbmRleCkKLXsKLSAgICBzcDxUeXBlPiB0ID0gZ2V0VHlwZShwYWNrYWdlLCB0eXBlLCBzb3VyY2VQb3MsIGRvU2V0SW5kZXgpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiB0LT5nZXRFbnRyeShuYW1lLCBzb3VyY2VQb3MsIGNvbmZpZywgZG9TZXRJbmRleCwgb3ZlcmxheSwgbUJ1bmRsZS0+Z2V0QXV0b0FkZE92ZXJsYXkoKSk7Ci19Ci0KLXNwPGNvbnN0IFJlc291cmNlVGFibGU6OkVudHJ5PiBSZXNvdXJjZVRhYmxlOjpnZXRFbnRyeSh1aW50MzJfdCByZXNJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcqIGNvbmZpZykgY29uc3QKLXsKLSAgICBpbnQgcGlkID0gUmVzX0dFVFBBQ0tBR0UocmVzSUQpKzE7Ci0gICAgY29uc3Qgc2l6ZV90IE4gPSBtT3JkZXJlZFBhY2thZ2VzLnNpemUoKTsKLSAgICBzaXplX3QgaTsKLSAgICBzcDxQYWNrYWdlPiBwOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBzcDxQYWNrYWdlPiBjaGVjayA9IG1PcmRlcmVkUGFja2FnZXNbaV07Ci0gICAgICAgIGlmIChjaGVjay0+Z2V0QXNzaWduZWRJZCgpID09IHBpZCkgewotICAgICAgICAgICAgcCA9IGNoZWNrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIH0KLSAgICBpZiAocCA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAid2FybmluZzogUGFja2FnZSBub3QgZm91bmQgZm9yIHJlc291cmNlICMlMDh4XG4iLCByZXNJRCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGludCB0aWQgPSBSZXNfR0VUVFlQRShyZXNJRCk7Ci0gICAgaWYgKHRpZCA8IDAgfHwgdGlkID49IChpbnQpcC0+Z2V0T3JkZXJlZFR5cGVzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAid2FybmluZzogVHlwZSBub3QgZm91bmQgZm9yIHJlc291cmNlICMlMDh4XG4iLCByZXNJRCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBzcDxUeXBlPiB0ID0gcC0+Z2V0T3JkZXJlZFR5cGVzKClbdGlkXTsKLQotICAgIGludCBlaWQgPSBSZXNfR0VURU5UUlkocmVzSUQpOwotICAgIGlmIChlaWQgPCAwIHx8IGVpZCA+PSAoaW50KXQtPmdldE9yZGVyZWRDb25maWdzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAid2FybmluZzogRW50cnkgbm90IGZvdW5kIGZvciByZXNvdXJjZSAjJTA4eFxuIiwgcmVzSUQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzcDxDb25maWdMaXN0PiBjID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKVtlaWRdOwotICAgIGlmIChjID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBFbnRyeSBub3QgZm91bmQgZm9yIHJlc291cmNlICMlMDh4XG4iLCByZXNJRCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICAKLSAgICBDb25maWdEZXNjcmlwdGlvbiBjZGVzYzsKLSAgICBpZiAoY29uZmlnKSBjZGVzYyA9ICpjb25maWc7Ci0gICAgc3A8RW50cnk+IGUgPSBjLT5nZXRFbnRyaWVzKCkudmFsdWVGb3IoY2Rlc2MpOwotICAgIGlmIChjID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBFbnRyeSBjb25maWd1cmF0aW9uIG5vdCBmb3VuZCBmb3IgcmVzb3VyY2UgIyUwOHhcbiIsIHJlc0lEKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBlOwotfQotCi1jb25zdCBSZXNvdXJjZVRhYmxlOjpJdGVtKiBSZXNvdXJjZVRhYmxlOjpnZXRJdGVtKHVpbnQzMl90IHJlc0lELCB1aW50MzJfdCBhdHRySUQpIGNvbnN0Ci17Ci0gICAgc3A8Y29uc3QgRW50cnk+IGUgPSBnZXRFbnRyeShyZXNJRCk7Ci0gICAgaWYgKGUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBjb25zdCBzaXplX3QgTiA9IGUtPmdldEJhZygpLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IEl0ZW0mIGl0ID0gZS0+Z2V0QmFnKCkudmFsdWVBdChpKTsKLSAgICAgICAgaWYgKGl0LmJhZ0tleUlkID09IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2FybmluZzogSUQgbm90IHlldCBhc3NpZ25lZCB0byAnJXMnIGluIGJhZyAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGUtPmdldE5hbWUoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZS0+Z2V0QmFnKCkua2V5QXQoaSkpLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXQuYmFnS2V5SWQgPT0gYXR0cklEKSB7Ci0gICAgICAgICAgICByZXR1cm4gJml0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLWJvb2wgUmVzb3VyY2VUYWJsZTo6Z2V0SXRlbVZhbHVlKAotICAgIHVpbnQzMl90IHJlc0lELCB1aW50MzJfdCBhdHRySUQsIFJlc192YWx1ZSogb3V0VmFsdWUpCi17Ci0gICAgY29uc3QgSXRlbSogaXRlbSA9IGdldEl0ZW0ocmVzSUQsIGF0dHJJRCk7Ci0KLSAgICBib29sIHJlcyA9IGZhbHNlOwotICAgIGlmIChpdGVtICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKGl0ZW0tPmV2YWx1YXRpbmcpIHsKLSAgICAgICAgICAgIHNwPGNvbnN0IEVudHJ5PiBlID0gZ2V0RW50cnkocmVzSUQpOwotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBlLT5nZXRCYWcoKS5zaXplKCk7Ci0gICAgICAgICAgICBzaXplX3QgaTsKLSAgICAgICAgICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgIGlmICgmZS0+Z2V0QmFnKCkudmFsdWVBdChpKSA9PSBpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2FybmluZzogQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluIGtleSAnJXMnIG9mIGJhZyAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGUtPmdldE5hbWUoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZS0+Z2V0QmFnKCkua2V5QXQoaSkpLnN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpdGVtLT5ldmFsdWF0aW5nID0gdHJ1ZTsKLSAgICAgICAgcmVzID0gc3RyaW5nVG9WYWx1ZShvdXRWYWx1ZSwgTlVMTCwgaXRlbS0+dmFsdWUsIGZhbHNlLCBmYWxzZSwgaXRlbS0+YmFnS2V5SWQpOwotICAgICAgICBOT0lTWSgKLSAgICAgICAgICAgIGlmIChyZXMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoImdldEl0ZW1WYWx1ZSBvZiAjJTA4eFsjJTA4eF0gKCVzKTogdHlwZT0jJTA4eCwgZGF0YT0jJTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgcmVzSUQsIGF0dHJJRCwgU3RyaW5nOChnZXRFbnRyeShyZXNJRCktPmdldE5hbWUoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSwgb3V0VmFsdWUtPmRhdGEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoImdldEl0ZW1WYWx1ZSBvZiAjJTA4eFsjJTA4eF06IGZhaWxlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgcmVzSUQsIGF0dHJJRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0gICAgICAgIGl0ZW0tPmV2YWx1YXRpbmcgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvUmVzb3VyY2VUYWJsZS5oIGIvdG9vbHMvYWFwdC9SZXNvdXJjZVRhYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZTA2NjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9SZXNvdXJjZVRhYmxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBCdWlsZCByZXNvdXJjZSBmaWxlcyBmcm9tIHJhdyBhc3NldHMuCi0vLwotCi0jaWZuZGVmIFJFU09VUkNFX1RBQkxFX0gKLSNkZWZpbmUgUkVTT1VSQ0VfVEFCTEVfSAotCi0jaW5jbHVkZSAiU3RyaW5nUG9vbC5oIgotI2luY2x1ZGUgIlNvdXJjZVBvcy5oIgotCi0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPG1hcD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotY2xhc3MgWE1MTm9kZTsKLWNsYXNzIFJlc291cmNlVGFibGU7Ci0KLWVudW0gewotICAgIFhNTF9DT01QSUxFX1NUUklQX0NPTU1FTlRTID0gMTw8MCwKLSAgICBYTUxfQ09NUElMRV9BU1NJR05fQVRUUklCVVRFX0lEUyA9IDE8PDEsCi0gICAgWE1MX0NPTVBJTEVfQ09NUEFDVF9XSElURVNQQUNFID0gMTw8MiwKLSAgICBYTUxfQ09NUElMRV9TVFJJUF9XSElURVNQQUNFID0gMTw8MywKLSAgICBYTUxfQ09NUElMRV9TVFJJUF9SQVdfVkFMVUVTID0gMTw8NCwKLSAgICBYTUxfQ09NUElMRV9VVEY4ID0gMTw8NSwKLSAgICAKLSAgICBYTUxfQ09NUElMRV9TVEFOREFSRF9SRVNPVVJDRSA9Ci0gICAgICAgICAgICBYTUxfQ09NUElMRV9TVFJJUF9DT01NRU5UUyB8IFhNTF9DT01QSUxFX0FTU0lHTl9BVFRSSUJVVEVfSURTCi0gICAgICAgICAgICB8IFhNTF9DT01QSUxFX1NUUklQX1dISVRFU1BBQ0UgfCBYTUxfQ09NUElMRV9TVFJJUF9SQVdfVkFMVUVTCi19OwotCi1zdGF0dXNfdCBjb21waWxlWG1sRmlsZShjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+JiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRpb25zID0gWE1MX0NPTVBJTEVfU1RBTkRBUkRfUkVTT1VSQ0UpOwotCi1zdGF0dXNfdCBjb21waWxlWG1sRmlsZShjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+JiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIG91dFRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIHRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbnMgPSBYTUxfQ09NUElMRV9TVEFOREFSRF9SRVNPVVJDRSk7Ci0KLXN0YXR1c190IGNvbXBpbGVYbWxGaWxlKGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxYTUxOb2RlPiYgeG1sVHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9ucyA9IFhNTF9DT01QSUxFX1NUQU5EQVJEX1JFU09VUkNFKTsKLQotc3RhdHVzX3QgY29tcGlsZVJlc291cmNlRmlsZShCdW5kbGUqIGJ1bmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+JiBpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnJiBkZWZQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgb3ZlcndyaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiBvdXRUYWJsZSk7Ci0KLXN0cnVjdCBBY2Nlc3NvckNvb2tpZQotewotICAgIFNvdXJjZVBvcyBzb3VyY2VQb3M7Ci0gICAgU3RyaW5nOCBhdHRyOwotICAgIFN0cmluZzggdmFsdWU7Ci0KLSAgICBBY2Nlc3NvckNvb2tpZShjb25zdCBTb3VyY2VQb3MmcCwgY29uc3QgU3RyaW5nOCYgYSwgY29uc3QgU3RyaW5nOCYgdikKLSAgICAgICAgOnNvdXJjZVBvcyhwKSwKLSAgICAgICAgIGF0dHIoYSksCi0gICAgICAgICB2YWx1ZSh2KQotICAgIHsKLSAgICB9Ci19OwotCi1jbGFzcyBSZXNvdXJjZVRhYmxlIDogcHVibGljIFJlc1RhYmxlOjpBY2Nlc3NvcgotewotcHVibGljOgotICAgIGNsYXNzIFBhY2thZ2U7Ci0gICAgY2xhc3MgVHlwZTsKLSAgICBjbGFzcyBFbnRyeTsKLQotICAgIHN0cnVjdCBDb25maWdEZXNjcmlwdGlvbiA6IHB1YmxpYyBSZXNUYWJsZV9jb25maWcgewotICAgICAgICBDb25maWdEZXNjcmlwdGlvbigpIHsKLSAgICAgICAgICAgIG1lbXNldCh0aGlzLCAwLCBzaXplb2YoKnRoaXMpKTsKLSAgICAgICAgICAgIHNpemUgPSBzaXplb2YoUmVzVGFibGVfY29uZmlnKTsKLSAgICAgICAgfQotICAgICAgICBDb25maWdEZXNjcmlwdGlvbihjb25zdCBSZXNUYWJsZV9jb25maWcmbykgewotICAgICAgICAgICAgKnN0YXRpY19jYXN0PFJlc1RhYmxlX2NvbmZpZyo+KHRoaXMpID0gbzsKLSAgICAgICAgICAgIHNpemUgPSBzaXplb2YoUmVzVGFibGVfY29uZmlnKTsKLSAgICAgICAgfQotICAgICAgICBDb25maWdEZXNjcmlwdGlvbihjb25zdCBDb25maWdEZXNjcmlwdGlvbiZvKSB7Ci0gICAgICAgICAgICAqc3RhdGljX2Nhc3Q8UmVzVGFibGVfY29uZmlnKj4odGhpcykgPSBvOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29uZmlnRGVzY3JpcHRpb24mIG9wZXJhdG9yPShjb25zdCBSZXNUYWJsZV9jb25maWcmIG8pIHsKLSAgICAgICAgICAgICpzdGF0aWNfY2FzdDxSZXNUYWJsZV9jb25maWcqPih0aGlzKSA9IG87Ci0gICAgICAgICAgICBzaXplID0gc2l6ZW9mKFJlc1RhYmxlX2NvbmZpZyk7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLSAgICAgICAgQ29uZmlnRGVzY3JpcHRpb24mIG9wZXJhdG9yPShjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgbykgewotICAgICAgICAgICAgKnN0YXRpY19jYXN0PFJlc1RhYmxlX2NvbmZpZyo+KHRoaXMpID0gbzsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA8IDA7IH0KLSAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA8PSAwOyB9Ci0gICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29uZmlnRGVzY3JpcHRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIGNvbXBhcmUobykgPT0gMDsgfQotICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uJiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pICE9IDA7IH0KLSAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA+PSAwOyB9Ci0gICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA+IDA7IH0KLSAgICB9OwotCi0gICAgUmVzb3VyY2VUYWJsZShCdW5kbGUqIGJ1bmRsZSwgY29uc3QgU3RyaW5nMTYmIGFzc2V0c1BhY2thZ2UpOwotCi0gICAgc3RhdHVzX3QgYWRkSW5jbHVkZWRSZXNvdXJjZXMoQnVuZGxlKiBidW5kbGUsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMpOwotCi0gICAgc3RhdHVzX3QgYWRkUHVibGljKGNvbnN0IFNvdXJjZVBvcyYgcG9zLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBpZGVudCk7Ci0KLSAgICBzdGF0dXNfdCBhZGRFbnRyeShjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+KiBzdHlsZSA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnKiBwYXJhbXMgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgZG9TZXRJbmRleCA9IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgZm9ybWF0ID0gUmVzVGFibGVfbWFwOjpUWVBFX0FOWSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG92ZXJ3cml0ZSA9IGZhbHNlKTsKLQotICAgIHN0YXR1c190IHN0YXJ0QmFnKGNvbnN0IFNvdXJjZVBvcyYgcG9zLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgYmFnUGFyZW50LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcqIHBhcmFtcyA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgb3ZlcmxheSA9IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICBib29sIHJlcGxhY2UgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0lkID0gZmFsc2UpOwotICAgIAotICAgIHN0YXR1c190IGFkZEJhZyhjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGJhZ1BhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGJhZ0tleSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4qIHN0eWxlID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnKiBwYXJhbXMgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICBib29sIHJlcGxhY2UgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0lkID0gZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgZm9ybWF0ID0gUmVzVGFibGVfbWFwOjpUWVBFX0FOWSk7Ci0KLSAgICBib29sIGhhc0JhZ09yRW50cnkoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSkgY29uc3Q7Ci0KLSAgICBib29sIGhhc0JhZ09yRW50cnkoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNCYWdPckVudHJ5KGNvbnN0IFN0cmluZzE2JiByZWYsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2KiBkZWZUeXBlID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlBhY2thZ2UgPSBOVUxMKTsKLQotICAgIGJvb2wgYXBwZW5kQ29tbWVudChjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgY29tbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvbmx5SWZFbXB0eSA9IGZhbHNlKTsKLQotICAgIGJvb2wgYXBwZW5kVHlwZUNvbW1lbnQoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGNvbW1lbnQpOwotICAgIAotICAgIHZvaWQgY2FuQWRkRW50cnkoY29uc3QgU291cmNlUG9zJiBwb3MsCi0gICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLCBjb25zdCBTdHJpbmcxNiYgdHlwZSwgY29uc3QgU3RyaW5nMTYmIG5hbWUpOwotICAgICAgICAKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OwotICAgIHNpemVfdCBudW1Mb2NhbFJlc291cmNlcygpIGNvbnN0OwotICAgIGJvb2wgaGFzUmVzb3VyY2VzKCkgY29uc3Q7Ci0KLSAgICBzcDxBYXB0RmlsZT4gZmxhdHRlbihCdW5kbGUqKTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgbWFrZVJlc0lkKHVpbnQzMl90IHBhY2thZ2VJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0eXBlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbmFtZUlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWVJZCB8ICh0eXBlSWQ8PDE2KSB8IChwYWNrYWdlSWQ8PDI0KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IGdldFJlc0lkKGNvbnN0IHNwPFBhY2thZ2U+JiBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8VHlwZT4mIHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBuYW1lSWQpOwotCi0gICAgdWludDMyX3QgZ2V0UmVzSWQoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBvbmx5UHVibGljID0gdHJ1ZSkgY29uc3Q7Ci0KLSAgICB1aW50MzJfdCBnZXRSZXNJZChjb25zdCBTdHJpbmcxNiYgcmVmLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2KiBkZWZUeXBlID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiogZGVmUGFja2FnZSA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIG91dEVycm9yTXNnID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICBib29sIG9ubHlQdWJsaWMgPSB0cnVlKSBjb25zdDsKLQotICAgIHN0YXRpYyBib29sIGlzVmFsaWRSZXNvdXJjZU5hbWUoY29uc3QgU3RyaW5nMTYmIHMpOwotICAgIAotICAgIGJvb2wgc3RyaW5nVG9WYWx1ZShSZXNfdmFsdWUqIG91dFZhbHVlLCBTdHJpbmdQb29sKiBwb29sLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZXNlcnZlU3BhY2VzLCBib29sIGNvZXJjZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGF0dHJJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+KiBzdHlsZSA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2KiBvdXRTdHIgPSBOVUxMLCB2b2lkKiBhY2Nlc3NvckNvb2tpZSA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGF0dHJUeXBlID0gUmVzVGFibGVfbWFwOjpUWVBFX0FOWSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nOCogY29uZmlnVHlwZU5hbWUgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb25maWdEZXNjcmlwdGlvbiogY29uZmlnID0gTlVMTCk7Ci0KLSAgICBzdGF0dXNfdCBhc3NpZ25SZXNvdXJjZUlkcygpOwotICAgIHN0YXR1c190IGFkZFN5bWJvbHMoY29uc3Qgc3A8QWFwdFN5bWJvbHM+JiBvdXRTeW1ib2xzID0gTlVMTCk7Ci0gICAgdm9pZCBhZGRMb2NhbGl6YXRpb24oY29uc3QgU3RyaW5nMTYmIG5hbWUsIGNvbnN0IFN0cmluZzgmIGxvY2FsZSk7Ci0gICAgc3RhdHVzX3QgdmFsaWRhdGVMb2NhbGl6YXRpb25zKHZvaWQpOwotCi0gICAgc3RhdHVzX3QgZmxhdHRlbihCdW5kbGUqLCBjb25zdCBzcDxBYXB0RmlsZT4mIGRlc3QpOwotCi0gICAgdm9pZCB3cml0ZVB1YmxpY0RlZmluaXRpb25zKGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLCBGSUxFKiBmcCk7Ci0KLSAgICB2aXJ0dWFsIHVpbnQzMl90IGdldEN1c3RvbVJlc291cmNlKGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB1aW50MzJfdCBnZXRDdXN0b21SZXNvdXJjZVdpdGhDcmVhdGlvbihjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGNyZWF0ZUlmTmVlZGVkKTsKLSAgICB2aXJ0dWFsIHVpbnQzMl90IGdldFJlbWFwcGVkUGFja2FnZSh1aW50MzJfdCBvcmlnUGFja2FnZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldEF0dHJpYnV0ZVR5cGUodWludDMyX3QgYXR0cklELCB1aW50MzJfdCogb3V0VHlwZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEF0dHJpYnV0ZU1pbih1aW50MzJfdCBhdHRySUQsIHVpbnQzMl90KiBvdXRNaW4pOwotICAgIHZpcnR1YWwgYm9vbCBnZXRBdHRyaWJ1dGVNYXgodWludDMyX3QgYXR0cklELCB1aW50MzJfdCogb3V0TWF4KTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0QXR0cmlidXRlS2V5cyh1aW50MzJfdCBhdHRySUQsIFZlY3RvcjxTdHJpbmcxNj4qIG91dEtleXMpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRBdHRyaWJ1dGVFbnVtKHVpbnQzMl90IGF0dHJJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogbmFtZSwgc2l6ZV90IG5hbWVMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzX3ZhbHVlKiBvdXRWYWx1ZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEF0dHJpYnV0ZUZsYWdzKHVpbnQzMl90IGF0dHJJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIG5hbWUsIHNpemVfdCBuYW1lTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNfdmFsdWUqIG91dFZhbHVlKTsKLSAgICB2aXJ0dWFsIHVpbnQzMl90IGdldEF0dHJpYnV0ZUwxME4odWludDMyX3QgYXR0cklEKTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRMb2NhbGl6YXRpb25TZXR0aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlcG9ydEVycm9yKHZvaWQqIGFjY2Vzc29yQ29va2llLCBjb25zdCBjaGFyKiBmbXQsIC4uLik7Ci0KLSAgICB2b2lkIHNldEN1cnJlbnRYbWxQb3MoY29uc3QgU291cmNlUG9zJiBwb3MpIHsgbUN1cnJlbnRYbWxQb3MgPSBwb3M7IH0KLQotICAgIGNsYXNzIEl0ZW0gewotICAgIHB1YmxpYzoKLSAgICAgICAgSXRlbSgpIDogaXNJZChmYWxzZSksIGZvcm1hdChSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZKSwgYmFnS2V5SWQoMCksIGV2YWx1YXRpbmcoZmFsc2UpCi0gICAgICAgICAgICB7IG1lbXNldCgmcGFyc2VkVmFsdWUsIDAsIHNpemVvZihwYXJzZWRWYWx1ZSkpOyB9Ci0gICAgICAgIEl0ZW0oY29uc3QgU291cmNlUG9zJiBwb3MsCi0gICAgICAgICAgICAgYm9vbCBfaXNJZCwKLSAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgX3ZhbHVlLAotICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuPiogX3N0eWxlID0gTlVMTCwKLSAgICAgICAgICAgICBpbnQzMl90IGZvcm1hdCA9IFJlc1RhYmxlX21hcDo6VFlQRV9BTlkpOwotICAgICAgICBJdGVtKGNvbnN0IEl0ZW0mIG8pIDogc291cmNlUG9zKG8uc291cmNlUG9zKSwKLSAgICAgICAgICAgIGlzSWQoby5pc0lkKSwgdmFsdWUoby52YWx1ZSksIHN0eWxlKG8uc3R5bGUpLAotICAgICAgICAgICAgZm9ybWF0KG8uZm9ybWF0KSwgYmFnS2V5SWQoby5iYWdLZXlJZCksIGV2YWx1YXRpbmcoZmFsc2UpIHsKLSAgICAgICAgICAgIG1lbXNldCgmcGFyc2VkVmFsdWUsIDAsIHNpemVvZihwYXJzZWRWYWx1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIH5JdGVtKCkgeyB9Ci0KLSAgICAgICAgSXRlbSYgb3BlcmF0b3I9KGNvbnN0IEl0ZW0mIG8pIHsKLSAgICAgICAgICAgIHNvdXJjZVBvcyA9IG8uc291cmNlUG9zOwotICAgICAgICAgICAgaXNJZCA9IG8uaXNJZDsKLSAgICAgICAgICAgIHZhbHVlID0gby52YWx1ZTsKLSAgICAgICAgICAgIHN0eWxlID0gby5zdHlsZTsKLSAgICAgICAgICAgIGZvcm1hdCA9IG8uZm9ybWF0OwotICAgICAgICAgICAgYmFnS2V5SWQgPSBvLmJhZ0tleUlkOwotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBvLnBhcnNlZFZhbHVlOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgU291cmNlUG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBvczsKLSAgICAgICAgbXV0YWJsZSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSWQ7Ci0gICAgICAgIFN0cmluZzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTsKLSAgICAgICAgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+ICAgIHN0eWxlOwotICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OwotICAgICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFnS2V5SWQ7Ci0gICAgICAgIG11dGFibGUgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0aW5nOwotICAgICAgICBSZXNfdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWU7Ci0gICAgfTsKLQotICAgIGNsYXNzIEVudHJ5IDogcHVibGljIFJlZkJhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgRW50cnkoY29uc3QgU3RyaW5nMTYmIG5hbWUsIGNvbnN0IFNvdXJjZVBvcyYgcG9zKQotICAgICAgICAgICAgOiBtTmFtZShuYW1lKSwgbVR5cGUoVFlQRV9VTktOT1dOKSwKLSAgICAgICAgICAgICAgbUl0ZW1Gb3JtYXQoUmVzVGFibGVfbWFwOjpUWVBFX0FOWSksIG1OYW1lSW5kZXgoLTEpLCBtUG9zKHBvcykKLSAgICAgICAgeyB9Ci0gICAgICAgIHZpcnR1YWwgfkVudHJ5KCkgeyB9Ci0KLSAgICAgICAgZW51bSB0eXBlIHsKLSAgICAgICAgICAgIFRZUEVfVU5LTk9XTiA9IDAsCi0gICAgICAgICAgICBUWVBFX0lURU0sCi0gICAgICAgICAgICBUWVBFX0JBRwotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgU3RyaW5nMTYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1OYW1lOyB9Ci0gICAgICAgIHR5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRQYXJlbnQoY29uc3QgU3RyaW5nMTYmIHBhcmVudCkgeyBtUGFyZW50ID0gcGFyZW50OyB9Ci0gICAgICAgIFN0cmluZzE2IGdldFBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1QYXJlbnQ7IH0KLQotICAgICAgICBzdGF0dXNfdCBtYWtlSXRBQmFnKGNvbnN0IFNvdXJjZVBvcyYgc291cmNlUG9zKTsKLQotICAgICAgICBzdGF0dXNfdCBlbXB0eUJhZyhjb25zdCBTb3VyY2VQb3MmIHNvdXJjZVBvcyk7Ci0gCi0gICAgICAgIHN0YXR1c190IHNldEl0ZW0oY29uc3QgU291cmNlUG9zJiBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuPiogc3R5bGUgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgZm9ybWF0ID0gUmVzVGFibGVfbWFwOjpUWVBFX0FOWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG92ZXJ3cml0ZSA9IGZhbHNlKTsKLQotICAgICAgICBzdGF0dXNfdCBhZGRUb0JhZyhjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGtleSwgY29uc3QgU3RyaW5nMTYmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4qIHN0eWxlID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlPWZhbHNlLCBib29sIGlzSWQgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBmb3JtYXQgPSBSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZKTsKLQotICAgICAgICAvLyBJbmRleCBvZiB0aGUgZW50cnkncyBuYW1lIHN0cmluZyBpbiB0aGUga2V5IHBvb2wuCi0gICAgICAgIGludDMyX3QgZ2V0TmFtZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbU5hbWVJbmRleDsgfQotICAgICAgICB2b2lkIHNldE5hbWVJbmRleChpbnQzMl90IGluZGV4KSB7IG1OYW1lSW5kZXggPSBpbmRleDsgfQotCi0gICAgICAgIGNvbnN0IEl0ZW0qIGdldEl0ZW0oKSBjb25zdCB7IHJldHVybiBtVHlwZSA9PSBUWVBFX0lURU0gPyAmbUl0ZW0gOiBOVUxMOyB9Ci0gICAgICAgIGNvbnN0IEtleWVkVmVjdG9yPFN0cmluZzE2LCBJdGVtPiYgZ2V0QmFnKCkgY29uc3QgeyByZXR1cm4gbUJhZzsgfQotCi0gICAgICAgIHN0YXR1c190IGdlbmVyYXRlQXR0cmlidXRlcyhSZXNvdXJjZVRhYmxlKiB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlKTsKLQotICAgICAgICBzdGF0dXNfdCBhc3NpZ25SZXNvdXJjZUlkcyhSZXNvdXJjZVRhYmxlKiB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UpOwotCi0gICAgICAgIHN0YXR1c190IHByZXBhcmVGbGF0dGVuKFN0cmluZ1Bvb2wqIHN0cmluZ3MsIFJlc291cmNlVGFibGUqIHRhYmxlLAotICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nOCogY29uZmlnVHlwZU5hbWUsIGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uKiBjb25maWcpOwotCi0gICAgICAgIHN0YXR1c190IHJlbWFwU3RyaW5nVmFsdWUoU3RyaW5nUG9vbCogc3RyaW5ncyk7Ci0KLSAgICAgICAgc3NpemVfdCBmbGF0dGVuKEJ1bmRsZSosIGNvbnN0IHNwPEFhcHRGaWxlPiYgZGF0YSwgYm9vbCBpc1B1YmxpYyk7Ci0KLSAgICAgICAgY29uc3QgU291cmNlUG9zJiBnZXRQb3MoKSBjb25zdCB7IHJldHVybiBtUG9zOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTdHJpbmcxNiBtTmFtZTsKLSAgICAgICAgU3RyaW5nMTYgbVBhcmVudDsKLSAgICAgICAgdHlwZSBtVHlwZTsKLSAgICAgICAgSXRlbSBtSXRlbTsKLSAgICAgICAgaW50MzJfdCBtSXRlbUZvcm1hdDsKLSAgICAgICAgS2V5ZWRWZWN0b3I8U3RyaW5nMTYsIEl0ZW0+IG1CYWc7Ci0gICAgICAgIGludDMyX3QgbU5hbWVJbmRleDsKLSAgICAgICAgdWludDMyX3QgbVBhcmVudElkOwotICAgICAgICBTb3VyY2VQb3MgbVBvczsKLSAgICB9OwotICAgIAotICAgIGNsYXNzIENvbmZpZ0xpc3QgOiBwdWJsaWMgUmVmQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBDb25maWdMaXN0KGNvbnN0IFN0cmluZzE2JiBuYW1lLCBjb25zdCBTb3VyY2VQb3MmIHBvcykKLSAgICAgICAgICAgIDogbU5hbWUobmFtZSksIG1Qb3MocG9zKSwgbVB1YmxpYyhmYWxzZSksIG1FbnRyeUluZGV4KC0xKSB7IH0KLSAgICAgICAgdmlydHVhbCB+Q29uZmlnTGlzdCgpIHsgfQotICAgICAgICAKLSAgICAgICAgU3RyaW5nMTYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1OYW1lOyB9Ci0gICAgICAgIGNvbnN0IFNvdXJjZVBvcyYgZ2V0UG9zKCkgY29uc3QgeyByZXR1cm4gbVBvczsgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBhcHBlbmRDb21tZW50KGNvbnN0IFN0cmluZzE2JiBjb21tZW50LCBib29sIG9ubHlJZkVtcHR5ID0gZmFsc2UpOwotICAgICAgICBjb25zdCBTdHJpbmcxNiYgZ2V0Q29tbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1Db21tZW50OyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFwcGVuZFR5cGVDb21tZW50KGNvbnN0IFN0cmluZzE2JiBjb21tZW50KTsKLSAgICAgICAgY29uc3QgU3RyaW5nMTYmIGdldFR5cGVDb21tZW50KCkgY29uc3QgeyByZXR1cm4gbVR5cGVDb21tZW50OyB9Ci0gICAgICAgIAotICAgICAgICAvLyBJbmRleCBvZiB0aGlzIGVudHJ5IGluIGl0cyBUeXBlLgotICAgICAgICBpbnQzMl90IGdldEVudHJ5SW5kZXgoKSBjb25zdCB7IHJldHVybiBtRW50cnlJbmRleDsgfQotICAgICAgICB2b2lkIHNldEVudHJ5SW5kZXgoaW50MzJfdCBpbmRleCkgeyBtRW50cnlJbmRleCA9IGluZGV4OyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNldFB1YmxpYyhib29sIHB1YikgeyBtUHVibGljID0gcHViOyB9Ci0gICAgICAgIGJvb2wgZ2V0UHVibGljKCkgY29uc3QgeyByZXR1cm4gbVB1YmxpYzsgfQotICAgICAgICB2b2lkIHNldFB1YmxpY1NvdXJjZVBvcyhjb25zdCBTb3VyY2VQb3MmIHBvcykgeyBtUHVibGljU291cmNlUG9zID0gcG9zOyB9Ci0gICAgICAgIGNvbnN0IFNvdXJjZVBvcyYgZ2V0UHVibGljU291cmNlUG9zKCkgeyByZXR1cm4gbVB1YmxpY1NvdXJjZVBvczsgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBhZGRFbnRyeShjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZywgY29uc3Qgc3A8RW50cnk+JiBlbnRyeSkgewotICAgICAgICAgICAgbUVudHJpZXMuYWRkKGNvbmZpZywgZW50cnkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb25zdCBEZWZhdWx0S2V5ZWRWZWN0b3I8Q29uZmlnRGVzY3JpcHRpb24sIHNwPEVudHJ5PiA+JiBnZXRFbnRyaWVzKCkgY29uc3QgeyByZXR1cm4gbUVudHJpZXM7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBTdHJpbmcxNiBtTmFtZTsKLSAgICAgICAgY29uc3QgU291cmNlUG9zIG1Qb3M7Ci0gICAgICAgIFN0cmluZzE2IG1Db21tZW50OwotICAgICAgICBTdHJpbmcxNiBtVHlwZUNvbW1lbnQ7Ci0gICAgICAgIGJvb2wgbVB1YmxpYzsKLSAgICAgICAgU291cmNlUG9zIG1QdWJsaWNTb3VyY2VQb3M7Ci0gICAgICAgIGludDMyX3QgbUVudHJ5SW5kZXg7Ci0gICAgICAgIERlZmF1bHRLZXllZFZlY3RvcjxDb25maWdEZXNjcmlwdGlvbiwgc3A8RW50cnk+ID4gbUVudHJpZXM7Ci0gICAgfTsKLSAgICAKLSAgICBjbGFzcyBQdWJsaWMgewotICAgIHB1YmxpYzoKLSAgICAgICAgUHVibGljKCkgOiBzb3VyY2VQb3MoKSwgaWRlbnQoMCkgeyB9Ci0gICAgICAgIFB1YmxpYyhjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBfY29tbWVudCwKLSAgICAgICAgICAgICAgIHVpbnQzMl90IF9pZGVudCkKLSAgICAgICAgICAgIDogc291cmNlUG9zKHBvcyksCi0gICAgICAgICAgICBjb21tZW50KF9jb21tZW50KSwgaWRlbnQoX2lkZW50KSB7IH0KLSAgICAgICAgUHVibGljKGNvbnN0IFB1YmxpYyYgbykgOiBzb3VyY2VQb3Moby5zb3VyY2VQb3MpLAotICAgICAgICAgICAgY29tbWVudChvLmNvbW1lbnQpLCBpZGVudChvLmlkZW50KSB7IH0KLSAgICAgICAgflB1YmxpYygpIHsgfQotICAgICAgICAKLSAgICAgICAgUHVibGljJiBvcGVyYXRvcj0oY29uc3QgUHVibGljJiBvKSB7Ci0gICAgICAgICAgICBzb3VyY2VQb3MgPSBvLnNvdXJjZVBvczsKLSAgICAgICAgICAgIGNvbW1lbnQgPSBvLmNvbW1lbnQ7Ci0gICAgICAgICAgICBpZGVudCA9IG8uaWRlbnQ7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNvdXJjZVBvcyAgIHNvdXJjZVBvczsKLSAgICAgICAgU3RyaW5nMTYgICAgY29tbWVudDsKLSAgICAgICAgdWludDMyX3QgICAgaWRlbnQ7Ci0gICAgfTsKLSAgICAKLSAgICBjbGFzcyBUeXBlIDogcHVibGljIFJlZkJhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgVHlwZShjb25zdCBTdHJpbmcxNiYgbmFtZSwgY29uc3QgU291cmNlUG9zJiBwb3MpCi0gICAgICAgICAgICAgICAgOiBtTmFtZShuYW1lKSwgbUZpcnN0UHVibGljU291cmNlUG9zKE5VTEwpLCBtUHVibGljSW5kZXgoLTEpLCBtSW5kZXgoLTEpLCBtUG9zKHBvcykKLSAgICAgICAgeyB9Ci0gICAgICAgIHZpcnR1YWwgflR5cGUoKSB7IGRlbGV0ZSBtRmlyc3RQdWJsaWNTb3VyY2VQb3M7IH0KLQotICAgICAgICBzdGF0dXNfdCBhZGRQdWJsaWMoY29uc3QgU291cmNlUG9zJiBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICB2b2lkIGNhbkFkZEVudHJ5KGNvbnN0IFN0cmluZzE2JiBuYW1lKTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZzE2IGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBtTmFtZTsgfQotICAgICAgICBzcDxFbnRyeT4gZ2V0RW50cnkoY29uc3QgU3RyaW5nMTYmIGVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291cmNlUG9zJiBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcqIGNvbmZpZyA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRvU2V0SW5kZXggPSBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgb3ZlcmxheSA9IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvQWRkT3ZlcmxheSA9IGZhbHNlKTsKLQotICAgICAgICBjb25zdCBTb3VyY2VQb3MmIGdldEZpcnN0UHVibGljU291cmNlUG9zKCkgY29uc3QgeyByZXR1cm4gKm1GaXJzdFB1YmxpY1NvdXJjZVBvczsgfQotCi0gICAgICAgIGludDMyX3QgZ2V0UHVibGljSW5kZXgoKSBjb25zdCB7IHJldHVybiBtUHVibGljSW5kZXg7IH0KLQotICAgICAgICBpbnQzMl90IGdldEluZGV4KCkgY29uc3QgeyByZXR1cm4gbUluZGV4OyB9Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgoaW50MzJfdCBpbmRleCkgeyBtSW5kZXggPSBpbmRleDsgfQotCi0gICAgICAgIHN0YXR1c190IGFwcGx5UHVibGljRW50cnlPcmRlcigpOwotCi0gICAgICAgIGNvbnN0IFNvcnRlZFZlY3RvcjxDb25maWdEZXNjcmlwdGlvbj4mIGdldFVuaXF1ZUNvbmZpZ3MoKSBjb25zdCB7IHJldHVybiBtVW5pcXVlQ29uZmlnczsgfQotICAgICAgICAKLSAgICAgICAgY29uc3QgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzE2LCBzcDxDb25maWdMaXN0PiA+JiBnZXRDb25maWdzKCkgY29uc3QgeyByZXR1cm4gbUNvbmZpZ3M7IH0KLSAgICAgICAgY29uc3QgVmVjdG9yPHNwPENvbmZpZ0xpc3Q+ID4mIGdldE9yZGVyZWRDb25maWdzKCkgY29uc3QgeyByZXR1cm4gbU9yZGVyZWRDb25maWdzOyB9Ci0KLSAgICAgICAgY29uc3QgU29ydGVkVmVjdG9yPFN0cmluZzE2PiYgZ2V0Q2FuQWRkRW50cmllcygpIGNvbnN0IHsgcmV0dXJuIG1DYW5BZGRFbnRyaWVzOyB9Ci0gICAgICAgIAotICAgICAgICBjb25zdCBTb3VyY2VQb3MmIGdldFBvcygpIGNvbnN0IHsgcmV0dXJuIG1Qb3M7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBTdHJpbmcxNiBtTmFtZTsKLSAgICAgICAgU291cmNlUG9zKiBtRmlyc3RQdWJsaWNTb3VyY2VQb3M7Ci0gICAgICAgIERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmcxNiwgUHVibGljPiBtUHVibGljOwotICAgICAgICBTb3J0ZWRWZWN0b3I8Q29uZmlnRGVzY3JpcHRpb24+IG1VbmlxdWVDb25maWdzOwotICAgICAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nMTYsIHNwPENvbmZpZ0xpc3Q+ID4gbUNvbmZpZ3M7Ci0gICAgICAgIFZlY3RvcjxzcDxDb25maWdMaXN0PiA+IG1PcmRlcmVkQ29uZmlnczsKLSAgICAgICAgU29ydGVkVmVjdG9yPFN0cmluZzE2PiBtQ2FuQWRkRW50cmllczsKLSAgICAgICAgaW50MzJfdCBtUHVibGljSW5kZXg7Ci0gICAgICAgIGludDMyX3QgbUluZGV4OwotICAgICAgICBTb3VyY2VQb3MgbVBvczsKLSAgICB9OwotCi0gICAgY2xhc3MgUGFja2FnZSA6IHB1YmxpYyBSZWZCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBhY2thZ2UoY29uc3QgU3RyaW5nMTYmIG5hbWUsIHNzaXplX3QgaW5jbHVkZWRJZD0tMSk7Ci0gICAgICAgIHZpcnR1YWwgflBhY2thZ2UoKSB7IH0KLQotICAgICAgICBTdHJpbmcxNiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KLSAgICAgICAgc3A8VHlwZT4gZ2V0VHlwZShjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRvU2V0SW5kZXggPSBmYWxzZSk7Ci0KLSAgICAgICAgc3NpemVfdCBnZXRBc3NpZ25lZElkKCkgY29uc3QgeyByZXR1cm4gbUluY2x1ZGVkSWQ7IH0KLQotICAgICAgICBjb25zdCBSZXNTdHJpbmdQb29sJiBnZXRUeXBlU3RyaW5ncygpIGNvbnN0IHsgcmV0dXJuIG1UeXBlU3RyaW5nczsgfQotICAgICAgICB1aW50MzJfdCBpbmRleE9mVHlwZVN0cmluZyhjb25zdCBTdHJpbmcxNiYgcykgY29uc3QgeyByZXR1cm4gbVR5cGVTdHJpbmdzTWFwcGluZy52YWx1ZUZvcihzKTsgfQotICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4gZ2V0VHlwZVN0cmluZ3NEYXRhKCkgY29uc3QgeyByZXR1cm4gbVR5cGVTdHJpbmdzRGF0YTsgfQotICAgICAgICBzdGF0dXNfdCBzZXRUeXBlU3RyaW5ncyhjb25zdCBzcDxBYXB0RmlsZT4mIGRhdGEpOwotCi0gICAgICAgIGNvbnN0IFJlc1N0cmluZ1Bvb2wmIGdldEtleVN0cmluZ3MoKSBjb25zdCB7IHJldHVybiBtS2V5U3RyaW5nczsgfQotICAgICAgICB1aW50MzJfdCBpbmRleE9mS2V5U3RyaW5nKGNvbnN0IFN0cmluZzE2JiBzKSBjb25zdCB7IHJldHVybiBtS2V5U3RyaW5nc01hcHBpbmcudmFsdWVGb3Iocyk7IH0KLSAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+IGdldEtleVN0cmluZ3NEYXRhKCkgY29uc3QgeyByZXR1cm4gbUtleVN0cmluZ3NEYXRhOyB9Ci0gICAgICAgIHN0YXR1c190IHNldEtleVN0cmluZ3MoY29uc3Qgc3A8QWFwdEZpbGU+JiBkYXRhKTsKLQotICAgICAgICBzdGF0dXNfdCBhcHBseVB1YmxpY1R5cGVPcmRlcigpOwotCi0gICAgICAgIGNvbnN0IERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmcxNiwgc3A8VHlwZT4gPiYgZ2V0VHlwZXMoKSBjb25zdCB7IHJldHVybiBtVHlwZXM7IH0KLSAgICAgICAgY29uc3QgVmVjdG9yPHNwPFR5cGU+ID4mIGdldE9yZGVyZWRUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1PcmRlcmVkVHlwZXM7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXR1c190IHNldFN0cmluZ3MoY29uc3Qgc3A8QWFwdEZpbGU+JiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1N0cmluZ1Bvb2wqIHN0cmluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzE2LCB1aW50MzJfdD4qIG1hcHBpbmdzKTsKLQotICAgICAgICBjb25zdCBTdHJpbmcxNiBtTmFtZTsKLSAgICAgICAgY29uc3Qgc3NpemVfdCBtSW5jbHVkZWRJZDsKLSAgICAgICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzE2LCBzcDxUeXBlPiA+IG1UeXBlczsKLSAgICAgICAgVmVjdG9yPHNwPFR5cGU+ID4gbU9yZGVyZWRUeXBlczsKLSAgICAgICAgc3A8QWFwdEZpbGU+IG1UeXBlU3RyaW5nc0RhdGE7Ci0gICAgICAgIHNwPEFhcHRGaWxlPiBtS2V5U3RyaW5nc0RhdGE7Ci0gICAgICAgIFJlc1N0cmluZ1Bvb2wgbVR5cGVTdHJpbmdzOwotICAgICAgICBSZXNTdHJpbmdQb29sIG1LZXlTdHJpbmdzOwotICAgICAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nMTYsIHVpbnQzMl90PiBtVHlwZVN0cmluZ3NNYXBwaW5nOwotICAgICAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nMTYsIHVpbnQzMl90PiBtS2V5U3RyaW5nc01hcHBpbmc7Ci0gICAgfTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHdyaXRlUHVibGljRGVmaW5pdGlvbnMoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsIEZJTEUqIGZwLCBib29sIHB1Yik7Ci0gICAgc3A8UGFja2FnZT4gZ2V0UGFja2FnZShjb25zdCBTdHJpbmcxNiYgcGFja2FnZSk7Ci0gICAgc3A8VHlwZT4gZ2V0VHlwZShjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291cmNlUG9zJiBwb3MsCi0gICAgICAgICAgICAgICAgICAgICBib29sIGRvU2V0SW5kZXggPSBmYWxzZSk7Ci0gICAgc3A8RW50cnk+IGdldEVudHJ5KGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZVBvcyYgcG9zLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIG92ZXJsYXksCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogY29uZmlnID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkb1NldEluZGV4ID0gZmFsc2UpOwotICAgIHNwPGNvbnN0IEVudHJ5PiBnZXRFbnRyeSh1aW50MzJfdCByZXNJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnKiBjb25maWcgPSBOVUxMKSBjb25zdDsKLSAgICBjb25zdCBJdGVtKiBnZXRJdGVtKHVpbnQzMl90IHJlc0lELCB1aW50MzJfdCBhdHRySUQpIGNvbnN0OwotICAgIGJvb2wgZ2V0SXRlbVZhbHVlKHVpbnQzMl90IHJlc0lELCB1aW50MzJfdCBhdHRySUQsCi0gICAgICAgICAgICAgICAgICAgICAgUmVzX3ZhbHVlKiBvdXRWYWx1ZSk7Ci0KLQotICAgIFN0cmluZzE2IG1Bc3NldHNQYWNrYWdlOwotICAgIHNwPEFhcHRBc3NldHM+IG1Bc3NldHM7Ci0gICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzE2LCBzcDxQYWNrYWdlPiA+IG1QYWNrYWdlczsKLSAgICBWZWN0b3I8c3A8UGFja2FnZT4gPiBtT3JkZXJlZFBhY2thZ2VzOwotICAgIHVpbnQzMl90IG1OZXh0UGFja2FnZUlkOwotICAgIGJvb2wgbUhhdmVBcHBQYWNrYWdlOwotICAgIGJvb2wgbUlzQXBwUGFja2FnZTsKLSAgICBzaXplX3QgbU51bUxvY2FsOwotICAgIFNvdXJjZVBvcyBtQ3VycmVudFhtbFBvczsKLSAgICBCdW5kbGUqIG1CdW5kbGU7Ci0gICAgCi0gICAgLy8ga2V5ID0gc3RyaW5nIHJlc291cmNlIG5hbWUsIHZhbHVlID0gc2V0IG9mIGxvY2FsZXMgaW4gd2hpY2ggdGhhdCBuYW1lIGlzIGRlZmluZWQKLSAgICBtYXA8U3RyaW5nMTYsIHNldDxTdHJpbmc4PiA+IG1Mb2NhbGl6YXRpb25zOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9hYXB0L1NvdXJjZVBvcy5jcHAgYi90b29scy9hYXB0L1NvdXJjZVBvcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYTkyMWMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9Tb3VyY2VQb3MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLSNpbmNsdWRlICJTb3VyY2VQb3MuaCIKLQotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotCi0vLyBFcnJvclBvcwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0cnVjdCBFcnJvclBvcwotewotICAgIFN0cmluZzggZmlsZTsKLSAgICBpbnQgbGluZTsKLSAgICBTdHJpbmc4IGVycm9yOwotICAgIGJvb2wgZmF0YWw7Ci0KLSAgICBFcnJvclBvcygpOwotICAgIEVycm9yUG9zKGNvbnN0IEVycm9yUG9zJiB0aGF0KTsKLSAgICBFcnJvclBvcyhjb25zdCBTdHJpbmc4JiBmaWxlLCBpbnQgbGluZSwgY29uc3QgU3RyaW5nOCYgZXJyb3IsIGJvb2wgZmF0YWwpOwotICAgIH5FcnJvclBvcygpOwotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEVycm9yUG9zJiByaHMpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFcnJvclBvcyYgcmhzKSBjb25zdDsKLSAgICBFcnJvclBvcyYgb3BlcmF0b3I9KGNvbnN0IEVycm9yUG9zJiByaHMpOwotCi0gICAgdm9pZCBwcmludChGSUxFKiB0bykgY29uc3Q7Ci19OwotCi1zdGF0aWMgdmVjdG9yPEVycm9yUG9zPiBnX2Vycm9yczsKLQotRXJyb3JQb3M6OkVycm9yUG9zKCkKLSAgICA6bGluZSgtMSksIGZhdGFsKGZhbHNlKQotewotfQotCi1FcnJvclBvczo6RXJyb3JQb3MoY29uc3QgRXJyb3JQb3MmIHRoYXQpCi0gICAgOmZpbGUodGhhdC5maWxlKSwKLSAgICAgbGluZSh0aGF0LmxpbmUpLAotICAgICBlcnJvcih0aGF0LmVycm9yKSwKLSAgICAgZmF0YWwodGhhdC5mYXRhbCkKLXsKLX0KLQotRXJyb3JQb3M6OkVycm9yUG9zKGNvbnN0IFN0cmluZzgmIGYsIGludCBsLCBjb25zdCBTdHJpbmc4JiBlLCBib29sIGZhdCkKLSAgICA6ZmlsZShmKSwKLSAgICAgbGluZShsKSwKLSAgICAgZXJyb3IoZSksCi0gICAgIGZhdGFsKGZhdCkKLXsKLX0KLQotRXJyb3JQb3M6On5FcnJvclBvcygpCi17Ci19Ci0KLWJvb2wKLUVycm9yUG9zOjpvcGVyYXRvcjwoY29uc3QgRXJyb3JQb3MmIHJocykgY29uc3QKLXsKLSAgICBpZiAodGhpcy0+ZmlsZSA8IHJocy5maWxlKSByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodGhpcy0+ZmlsZSA9PSByaHMuZmlsZSkgewotICAgICAgICBpZiAodGhpcy0+bGluZSA8IHJocy5saW5lKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHRoaXMtPmxpbmUgPT0gcmhzLmxpbmUpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLT5lcnJvciA8IHJocy5lcnJvcikgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sCi1FcnJvclBvczo6b3BlcmF0b3I9PShjb25zdCBFcnJvclBvcyYgcmhzKSBjb25zdAotewotICAgIHJldHVybiB0aGlzLT5maWxlID09IHJocy5maWxlCi0gICAgICAgICAgICAmJiB0aGlzLT5saW5lID09IHJocy5saW5lCi0gICAgICAgICAgICAmJiB0aGlzLT5lcnJvciA9PSByaHMuZXJyb3I7Ci19Ci0KLUVycm9yUG9zJgotRXJyb3JQb3M6Om9wZXJhdG9yPShjb25zdCBFcnJvclBvcyYgcmhzKQotewotICAgIHRoaXMtPmZpbGUgPSByaHMuZmlsZTsKLSAgICB0aGlzLT5saW5lID0gcmhzLmxpbmU7Ci0gICAgdGhpcy0+ZXJyb3IgPSByaHMuZXJyb3I7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi12b2lkCi1FcnJvclBvczo6cHJpbnQoRklMRSogdG8pIGNvbnN0Ci17Ci0gICAgY29uc3QgY2hhciogdHlwZSA9IGZhdGFsID8gImVycm9yOiIgOiAid2FybmluZzoiOwotICAgIAotICAgIGlmICh0aGlzLT5saW5lID49IDApIHsKLSAgICAgICAgZnByaW50Zih0bywgIiVzOiVkOiAlcyAlc1xuIiwgdGhpcy0+ZmlsZS5zdHJpbmcoKSwgdGhpcy0+bGluZSwgdHlwZSwgdGhpcy0+ZXJyb3Iuc3RyaW5nKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZwcmludGYodG8sICIlczogJXMgJXNcbiIsIHRoaXMtPmZpbGUuc3RyaW5nKCksIHR5cGUsIHRoaXMtPmVycm9yLnN0cmluZygpKTsKLSAgICB9Ci19Ci0KLS8vIFNvdXJjZVBvcwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVNvdXJjZVBvczo6U291cmNlUG9zKGNvbnN0IFN0cmluZzgmIGYsIGludCBsKQotICAgIDogZmlsZShmKSwgbGluZShsKQotewotfQotCi1Tb3VyY2VQb3M6OlNvdXJjZVBvcyhjb25zdCBTb3VyY2VQb3MmIHRoYXQpCi0gICAgOiBmaWxlKHRoYXQuZmlsZSksIGxpbmUodGhhdC5saW5lKQotewotfQotCi1Tb3VyY2VQb3M6OlNvdXJjZVBvcygpCi0gICAgOiBmaWxlKCI/Pz8iLCAwKSwgbGluZSgtMSkKLXsKLX0KLQotU291cmNlUG9zOjp+U291cmNlUG9zKCkKLXsKLX0KLQotaW50Ci1Tb3VyY2VQb3M6OmVycm9yKGNvbnN0IGNoYXIqIGZtdCwgLi4uKSBjb25zdAotewotICAgIGludCByZXR2YWw9MDsKLSAgICBjaGFyIGJ1ZlsxMDI0XTsKLSAgICB2YV9saXN0IGFwOwotICAgIHZhX3N0YXJ0KGFwLCBmbXQpOwotICAgIHJldHZhbCA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKLSAgICB2YV9lbmQoYXApOwotICAgIGNoYXIqIHAgPSBidWYgKyByZXR2YWwgLSAxOwotICAgIHdoaWxlIChwID4gYnVmICYmICpwID09ICdcbicpIHsKLSAgICAgICAgKnAgPSAnXDAnOwotICAgICAgICBwLS07Ci0gICAgfQotICAgIGdfZXJyb3JzLnB1c2hfYmFjayhFcnJvclBvcyh0aGlzLT5maWxlLCB0aGlzLT5saW5lLCBTdHJpbmc4KGJ1ZiksIHRydWUpKTsKLSAgICByZXR1cm4gcmV0dmFsOwotfQotCi1pbnQKLVNvdXJjZVBvczo6d2FybmluZyhjb25zdCBjaGFyKiBmbXQsIC4uLikgY29uc3QKLXsKLSAgICBpbnQgcmV0dmFsPTA7Ci0gICAgY2hhciBidWZbMTAyNF07Ci0gICAgdmFfbGlzdCBhcDsKLSAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICByZXR2YWwgPSB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7Ci0gICAgdmFfZW5kKGFwKTsKLSAgICBjaGFyKiBwID0gYnVmICsgcmV0dmFsIC0gMTsKLSAgICB3aGlsZSAocCA+IGJ1ZiAmJiAqcCA9PSAnXG4nKSB7Ci0gICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgcC0tOwotICAgIH0KLSAgICBFcnJvclBvcyh0aGlzLT5maWxlLCB0aGlzLT5saW5lLCBTdHJpbmc4KGJ1ZiksIGZhbHNlKS5wcmludChzdGRlcnIpOwotICAgIHJldHVybiByZXR2YWw7Ci19Ci0KLWJvb2wKLVNvdXJjZVBvczo6aGFzRXJyb3JzKCkKLXsKLSAgICByZXR1cm4gZ19lcnJvcnMuc2l6ZSgpID4gMDsKLX0KLQotdm9pZAotU291cmNlUG9zOjpwcmludEVycm9ycyhGSUxFKiB0bykKLXsKLSAgICB2ZWN0b3I8RXJyb3JQb3M+Ojpjb25zdF9pdGVyYXRvciBpdDsKLSAgICBmb3IgKGl0PWdfZXJyb3JzLmJlZ2luKCk7IGl0IT1nX2Vycm9ycy5lbmQoKTsgaXQrKykgewotICAgICAgICBpdC0+cHJpbnQodG8pOwotICAgIH0KLX0KLQotCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvU291cmNlUG9zLmggYi90b29scy9hYXB0L1NvdXJjZVBvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2Y3MmE5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvU291cmNlUG9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jaWZuZGVmIFNPVVJDRVBPU19ICi0jZGVmaW5lIFNPVVJDRVBPU19ICi0KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLWNsYXNzIFNvdXJjZVBvcwotewotcHVibGljOgotICAgIFN0cmluZzggZmlsZTsKLSAgICBpbnQgbGluZTsKLQotICAgIFNvdXJjZVBvcyhjb25zdCBTdHJpbmc4JiBmLCBpbnQgbCk7Ci0gICAgU291cmNlUG9zKGNvbnN0IFNvdXJjZVBvcyYgdGhhdCk7Ci0gICAgU291cmNlUG9zKCk7Ci0gICAgflNvdXJjZVBvcygpOwotCi0gICAgaW50IGVycm9yKGNvbnN0IGNoYXIqIGZtdCwgLi4uKSBjb25zdDsKLSAgICBpbnQgd2FybmluZyhjb25zdCBjaGFyKiBmbXQsIC4uLikgY29uc3Q7Ci0KLSAgICBzdGF0aWMgYm9vbCBoYXNFcnJvcnMoKTsKLSAgICBzdGF0aWMgdm9pZCBwcmludEVycm9ycyhGSUxFKiB0byk7Ci19OwotCi0KLSNlbmRpZiAvLyBTT1VSQ0VQT1NfSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9TdHJpbmdQb29sLmNwcCBiL3Rvb2xzL2FhcHQvU3RyaW5nUG9vbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1OGIzOTEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9TdHJpbmdQb29sLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEJ1aWxkIHJlc291cmNlIGZpbGVzIGZyb20gcmF3IGFzc2V0cy4KLS8vCi0KLSNpbmNsdWRlICJTdHJpbmdQb29sLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VUYWJsZS5oIgotCi0jaW5jbHVkZSA8dXRpbHMvQnl0ZU9yZGVyLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU29ydGVkVmVjdG9yLmg+Ci0jaW5jbHVkZSAicXNvcnRfcl9jb21wYXQuaCIKLQotI2lmIEhBVkVfUFJJTlRGX1pECi0jICBkZWZpbmUgWkQgIiV6ZCIKLSMgIGRlZmluZSBaRF9UWVBFIHNzaXplX3QKLSNlbHNlCi0jICBkZWZpbmUgWkQgIiVsZCIKLSMgIGRlZmluZSBaRF9UWVBFIGxvbmcKLSNlbmRpZgotCi0jZGVmaW5lIE5PSVNZKHgpIC8veAotCi12b2lkIHN0cmNweTE2X2h0b2QodWludDE2X3QqIGRzdCwgY29uc3QgdWludDE2X3QqIHNyYykKLXsKLSAgICB3aGlsZSAoKnNyYykgewotICAgICAgICBjaGFyMTZfdCBzID0gaHRvZHMoKnNyYyk7Ci0gICAgICAgICpkc3QrKyA9IHM7Ci0gICAgICAgIHNyYysrOwotICAgIH0KLSAgICAqZHN0ID0gMDsKLX0KLQotdm9pZCBwcmludFN0cmluZ1Bvb2woY29uc3QgUmVzU3RyaW5nUG9vbCogcG9vbCkKLXsKLSAgICBTb3J0ZWRWZWN0b3I8Y29uc3Qgdm9pZCo+IHVuaXF1ZVN0cmluZ3M7Ci0gICAgY29uc3Qgc2l6ZV90IE4gPSBwb29sLT5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICBpZiAocG9vbC0+aXNVVEY4KCkpIHsKLSAgICAgICAgICAgIHVuaXF1ZVN0cmluZ3MuYWRkKHBvb2wtPnN0cmluZzhBdChpLCAmbGVuKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1bmlxdWVTdHJpbmdzLmFkZChwb29sLT5zdHJpbmdBdChpLCAmbGVuKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcmludGYoIlN0cmluZyBwb29sIG9mICIgWkQgIiB1bmlxdWUgJXMgJXMgc3RyaW5ncywgIiBaRCAiIGVudHJpZXMgYW5kICIKLSAgICAgICAgICAgIFpEICIgc3R5bGVzIHVzaW5nICIgWkQgIiBieXRlczpcbiIsCi0gICAgICAgICAgICAoWkRfVFlQRSl1bmlxdWVTdHJpbmdzLnNpemUoKSwgcG9vbC0+aXNVVEY4KCkgPyAiVVRGLTgiIDogIlVURi0xNiIsCi0gICAgICAgICAgICBwb29sLT5pc1NvcnRlZCgpID8gInNvcnRlZCIgOiAibm9uLXNvcnRlZCIsCi0gICAgICAgICAgICAoWkRfVFlQRSlOLCAoWkRfVFlQRSlwb29sLT5zdHlsZUNvdW50KCksIChaRF9UWVBFKXBvb2wtPmJ5dGVzKCkpOwotCi0gICAgY29uc3Qgc2l6ZV90IE5TID0gcG9vbC0+c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IHM9MDsgczxOUzsgcysrKSB7Ci0gICAgICAgIFN0cmluZzggc3RyID0gcG9vbC0+c3RyaW5nOE9iamVjdEF0KHMpOwotICAgICAgICBwcmludGYoIlN0cmluZyAjIiBaRCAiOiAlc1xuIiwgKFpEX1RZUEUpIHMsIHN0ci5zdHJpbmcoKSk7Ci0gICAgfQotfQotCi1TdHJpbmc4IFN0cmluZ1Bvb2w6OmVudHJ5OjptYWtlQ29uZmlnc1N0cmluZygpIGNvbnN0IHsKLSAgICBTdHJpbmc4IGNvbmZpZ1N0cihjb25maWdUeXBlTmFtZSk7Ci0gICAgaWYgKGNvbmZpZ1N0ci5zaXplKCkgPiAwKSBjb25maWdTdHIuYXBwZW5kKCIgIik7Ci0gICAgaWYgKGNvbmZpZ3Muc2l6ZSgpID4gMCkgewotICAgICAgICBmb3IgKHNpemVfdCBqPTA7IGo8Y29uZmlncy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgaWYgKGogPiAwKSBjb25maWdTdHIuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgY29uZmlnU3RyLmFwcGVuZChjb25maWdzW2pdLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29uZmlnU3RyID0gIihub25lKSI7Ci0gICAgfQotICAgIHJldHVybiBjb25maWdTdHI7Ci19Ci0KLWludCBTdHJpbmdQb29sOjplbnRyeTo6Y29tcGFyZShjb25zdCBlbnRyeSYgbykgY29uc3QgewotICAgIC8vIFN0cmluZ3Mgd2l0aCBzdHlsZXMgZ28gZmlyc3QsIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgc3R5bGVzIGFycmF5LgotICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHJlbGF0aXZlIG9yZGVyIG9mIHRoZXNlIHN0cmluZ3MuCi0gICAgaWYgKGhhc1N0eWxlcykgewotICAgICAgICByZXR1cm4gby5oYXNTdHlsZXMgPyAwIDogLTE7Ci0gICAgfQotICAgIGlmIChvLmhhc1N0eWxlcykgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvLyBTb3J0IHVuc3R5bGVkIHN0cmluZ3MgYnkgdHlwZSwgdGhlbiBieSBsb2dpY2FsIGNvbmZpZ3VyYXRpb24uCi0gICAgaW50IGNvbXAgPSBjb25maWdUeXBlTmFtZS5jb21wYXJlKG8uY29uZmlnVHlwZU5hbWUpOwotICAgIGlmIChjb21wICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGNvbXA7Ci0gICAgfQotICAgIGNvbnN0IHNpemVfdCBMSE4gPSBjb25maWdzLnNpemUoKTsKLSAgICBjb25zdCBzaXplX3QgUkhOID0gby5jb25maWdzLnNpemUoKTsKLSAgICBzaXplX3QgaT0wOwotICAgIHdoaWxlIChpIDwgTEhOICYmIGkgPCBSSE4pIHsKLSAgICAgICAgY29tcCA9IGNvbmZpZ3NbaV0uY29tcGFyZUxvZ2ljYWwoby5jb25maWdzW2ldKTsKLSAgICAgICAgaWYgKGNvbXAgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIGNvbXA7Ci0gICAgICAgIH0KLSAgICAgICAgaSsrOwotICAgIH0KLSAgICBpZiAoTEhOIDwgUkhOKSByZXR1cm4gLTE7Ci0gICAgZWxzZSBpZiAoTEhOID4gUkhOKSByZXR1cm4gMTsKLSAgICByZXR1cm4gMDsKLX0KLQotU3RyaW5nUG9vbDo6U3RyaW5nUG9vbChib29sIHV0ZjgpIDoKLSAgICAgICAgbVVURjgodXRmOCksIG1WYWx1ZXMoLTEpCi17Ci19Ci0KLXNzaXplX3QgU3RyaW5nUG9vbDo6YWRkKGNvbnN0IFN0cmluZzE2JiB2YWx1ZSwgY29uc3QgVmVjdG9yPGVudHJ5X3N0eWxlX3NwYW4+JiBzcGFucywKLSAgICAgICAgY29uc3QgU3RyaW5nOCogY29uZmlnVHlwZU5hbWUsIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogY29uZmlnKQotewotICAgIHNzaXplX3QgcmVzID0gYWRkKHZhbHVlLCBmYWxzZSwgY29uZmlnVHlwZU5hbWUsIGNvbmZpZyk7Ci0gICAgaWYgKHJlcyA+PSAwKSB7Ci0gICAgICAgIGFkZFN0eWxlU3BhbnMocmVzLCBzcGFucyk7Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19Ci0KLXNzaXplX3QgU3RyaW5nUG9vbDo6YWRkKGNvbnN0IFN0cmluZzE2JiB2YWx1ZSwKLSAgICAgICAgYm9vbCBtZXJnZUR1cGxpY2F0ZXMsIGNvbnN0IFN0cmluZzgqIGNvbmZpZ1R5cGVOYW1lLCBjb25zdCBSZXNUYWJsZV9jb25maWcqIGNvbmZpZykKLXsKLSAgICBzc2l6ZV90IHZpZHggPSBtVmFsdWVzLmluZGV4T2ZLZXkodmFsdWUpOwotICAgIHNzaXplX3QgcG9zID0gdmlkeCA+PSAwID8gbVZhbHVlcy52YWx1ZUF0KHZpZHgpIDogLTE7Ci0gICAgc3NpemVfdCBlaWR4ID0gcG9zID49IDAgPyBtRW50cnlBcnJheS5pdGVtQXQocG9zKSA6IC0xOwotICAgIGlmIChlaWR4IDwgMCkgewotICAgICAgICBlaWR4ID0gbUVudHJpZXMuYWRkKGVudHJ5KHZhbHVlKSk7Ci0gICAgICAgIGlmIChlaWR4IDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsdXJlIGFkZGluZyBzdHJpbmcgJXNcbiIsIFN0cmluZzgodmFsdWUpLnN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiBlaWR4OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNvbmZpZ1R5cGVOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgZW50cnkmIGVudCA9IG1FbnRyaWVzLmVkaXRJdGVtQXQoZWlkeCk7Ci0gICAgICAgIE5PSVNZKHByaW50ZigiKioqIGFkZGluZyBjb25maWcgdHlwZSBuYW1lICVzLCB3YXMgJXNcbiIsCi0gICAgICAgICAgICAgICAgY29uZmlnVHlwZU5hbWUtPnN0cmluZygpLCBlbnQuY29uZmlnVHlwZU5hbWUuc3RyaW5nKCkpKTsKLSAgICAgICAgaWYgKGVudC5jb25maWdUeXBlTmFtZS5zaXplKCkgPD0gMCkgewotICAgICAgICAgICAgZW50LmNvbmZpZ1R5cGVOYW1lID0gKmNvbmZpZ1R5cGVOYW1lOwotICAgICAgICB9IGVsc2UgaWYgKGVudC5jb25maWdUeXBlTmFtZSAhPSAqY29uZmlnVHlwZU5hbWUpIHsKLSAgICAgICAgICAgIGVudC5jb25maWdUeXBlTmFtZSA9ICIgIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjb25maWcgIT0gTlVMTCkgewotICAgICAgICAvLyBBZGQgdGhpcyB0byB0aGUgc2V0IG9mIGNvbmZpZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJpbmcuCi0gICAgICAgIGVudHJ5JiBlbnQgPSBtRW50cmllcy5lZGl0SXRlbUF0KGVpZHgpOwotICAgICAgICBzaXplX3QgYWRkUG9zOwotICAgICAgICBmb3IgKGFkZFBvcz0wOyBhZGRQb3M8ZW50LmNvbmZpZ3Muc2l6ZSgpOyBhZGRQb3MrKykgewotICAgICAgICAgICAgaW50IGNtcCA9IGVudC5jb25maWdzLml0ZW1BdChhZGRQb3MpLmNvbXBhcmVMb2dpY2FsKCpjb25maWcpOwotICAgICAgICAgICAgaWYgKGNtcCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNtcCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgTk9JU1kocHJpbnRmKCIqKiogaW5zZXJ0aW5nIGNvbmZpZzogJXNcbiIsIGNvbmZpZy0+dG9TdHJpbmcoKS5zdHJpbmcoKSkpOwotICAgICAgICAgICAgICAgICAgICBlbnQuY29uZmlncy5pbnNlcnRBdCgqY29uZmlnLCBhZGRQb3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoYWRkUG9zID49IGVudC5jb25maWdzLnNpemUoKSkgewotICAgICAgICAgICAgTk9JU1kocHJpbnRmKCIqKiogYWRkaW5nIGNvbmZpZzogJXNcbiIsIGNvbmZpZy0+dG9TdHJpbmcoKS5zdHJpbmcoKSkpOwotICAgICAgICAgICAgZW50LmNvbmZpZ3MuYWRkKCpjb25maWcpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgYm9vbCBmaXJzdCA9IHZpZHggPCAwOwotICAgIGNvbnN0IGJvb2wgc3R5bGVkID0gKHBvcyA+PSAwICYmIChzaXplX3QpcG9zIDwgbUVudHJ5U3R5bGVBcnJheS5zaXplKCkpID8KLSAgICAgICAgbUVudHJ5U3R5bGVBcnJheVtwb3NdLnNwYW5zLnNpemUoKSA6IDA7Ci0gICAgaWYgKGZpcnN0IHx8IHN0eWxlZCB8fCAhbWVyZ2VEdXBsaWNhdGVzKSB7Ci0gICAgICAgIHBvcyA9IG1FbnRyeUFycmF5LmFkZChlaWR4KTsKLSAgICAgICAgaWYgKGZpcnN0KSB7Ci0gICAgICAgICAgICB2aWR4ID0gbVZhbHVlcy5hZGQodmFsdWUsIHBvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZW50cnkmIGVudCA9IG1FbnRyaWVzLmVkaXRJdGVtQXQoZWlkeCk7Ci0gICAgICAgIGVudC5pbmRpY2VzLmFkZChwb3MpOwotICAgIH0KLQotICAgIE5PSVNZKHByaW50ZigiQWRkaW5nIHN0cmluZyAlcyB0byBwb29sOiBwb3M9JWQgZWlkeD0lZCB2aWR4PSVkXG4iLAotICAgICAgICAgICAgU3RyaW5nOCh2YWx1ZSkuc3RyaW5nKCksIHBvcywgZWlkeCwgdmlkeCkpOwotICAgIAotICAgIHJldHVybiBwb3M7Ci19Ci0KLXN0YXR1c190IFN0cmluZ1Bvb2w6OmFkZFN0eWxlU3BhbihzaXplX3QgaWR4LCBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kKQotewotICAgIGVudHJ5X3N0eWxlX3NwYW4gc3BhbjsKLSAgICBzcGFuLm5hbWUgPSBuYW1lOwotICAgIHNwYW4uc3Bhbi5maXJzdENoYXIgPSBzdGFydDsKLSAgICBzcGFuLnNwYW4ubGFzdENoYXIgPSBlbmQ7Ci0gICAgcmV0dXJuIGFkZFN0eWxlU3BhbihpZHgsIHNwYW4pOwotfQotCi1zdGF0dXNfdCBTdHJpbmdQb29sOjphZGRTdHlsZVNwYW5zKHNpemVfdCBpZHgsIGNvbnN0IFZlY3RvcjxlbnRyeV9zdHlsZV9zcGFuPiYgc3BhbnMpCi17Ci0gICAgY29uc3Qgc2l6ZV90IE49c3BhbnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gYWRkU3R5bGVTcGFuKGlkeCwgc3BhbnNbaV0pOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgU3RyaW5nUG9vbDo6YWRkU3R5bGVTcGFuKHNpemVfdCBpZHgsIGNvbnN0IGVudHJ5X3N0eWxlX3NwYW4mIHNwYW4pCi17Ci0gICAgLy8gUGxhY2UgYmxhbmsgZW50cmllcyBpbiB0aGUgc3BhbiBhcnJheSB1cCB0byB0aGlzIGluZGV4LgotICAgIHdoaWxlIChtRW50cnlTdHlsZUFycmF5LnNpemUoKSA8PSBpZHgpIHsKLSAgICAgICAgbUVudHJ5U3R5bGVBcnJheS5hZGQoKTsKLSAgICB9Ci0KLSAgICBlbnRyeV9zdHlsZSYgc3R5bGUgPSBtRW50cnlTdHlsZUFycmF5LmVkaXRJdGVtQXQoaWR4KTsKLSAgICBzdHlsZS5zcGFucy5hZGQoc3Bhbik7Ci0gICAgbUVudHJpZXMuZWRpdEl0ZW1BdChtRW50cnlBcnJheVtpZHhdKS5oYXNTdHlsZXMgPSB0cnVlOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotaW50IFN0cmluZ1Bvb2w6OmNvbmZpZ19zb3J0KHZvaWQqIHN0YXRlLCBjb25zdCB2b2lkKiBsaHMsIGNvbnN0IHZvaWQqIHJocykKLXsKLSAgICBTdHJpbmdQb29sKiBwb29sID0gKFN0cmluZ1Bvb2wqKXN0YXRlOwotICAgIGNvbnN0IGVudHJ5JiBsaGUgPSBwb29sLT5tRW50cmllc1twb29sLT5tRW50cnlBcnJheVsqc3RhdGljX2Nhc3Q8Y29uc3Qgc2l6ZV90Kj4obGhzKV1dOwotICAgIGNvbnN0IGVudHJ5JiByaGUgPSBwb29sLT5tRW50cmllc1twb29sLT5tRW50cnlBcnJheVsqc3RhdGljX2Nhc3Q8Y29uc3Qgc2l6ZV90Kj4ocmhzKV1dOwotICAgIHJldHVybiBsaGUuY29tcGFyZShyaGUpOwotfQotCi12b2lkIFN0cmluZ1Bvb2w6OnNvcnRCeUNvbmZpZygpCi17Ci0gICAgTE9HX0FMV0FZU19GQVRBTF9JRihtT3JpZ2luYWxQb3NUb05ld1Bvcy5zaXplKCkgPiAwLCAiQ2FuJ3Qgc29ydCBzdHJpbmcgcG9vbCBhZnRlciBhbHJlYWR5IHNvcnRlZC4iKTsKLQotICAgIGNvbnN0IHNpemVfdCBOID0gbUVudHJ5QXJyYXkuc2l6ZSgpOwotCi0gICAgLy8gVGhpcyBpcyBhIHZlY3RvciB0aGF0IHN0YXJ0cyBvdXQgd2l0aCBhIDE6MSBtYXBwaW5nIHRvIGVudHJpZXMKLSAgICAvLyBpbiB0aGUgYXJyYXksIHdoaWNoIHdlIHdpbGwgc29ydCB0byBjb21lIHVwIHdpdGggdGhlIGRlc2lyZWQgb3JkZXIuCi0gICAgLy8gQXQgdGhhdCBwb2ludCBpdCBtYXBzIGZyb20gdGhlIG5ldyBwb3NpdGlvbiBpbiB0aGUgYXJyYXkgdG8gdGhlCi0gICAgLy8gb3JpZ2luYWwgcG9zaXRpb24gdGhlIGVudHJ5IGFwcGVhcmVkLgotICAgIFZlY3RvcjxzaXplX3Q+IG5ld1Bvc1RvT3JpZ2luYWxQb3M7Ci0gICAgbmV3UG9zVG9PcmlnaW5hbFBvcy5zZXRDYXBhY2l0eShOKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBOOyBpKyspIHsKLSAgICAgICAgbmV3UG9zVG9PcmlnaW5hbFBvcy5hZGQoaSk7Ci0gICAgfQotCi0gICAgLy8gU29ydCB0aGUgYXJyYXkuCi0gICAgTk9JU1kocHJpbnRmKCJTT1JUSU5HIFNUUklOR1MgQlkgQ09ORklHVVJBVElPTi4uLlxuIikpOwotICAgIC8vIFZlY3Rvcjo6c29ydCB1c2VzIGluc2VydGlvbiBzb3J0LCB3aGljaCBpcyB2ZXJ5IHNsb3cgZm9yIHRoaXMgZGF0YSBzZXQuCi0gICAgLy8gVXNlIHF1aWNrc29ydCBpbnN0ZWFkIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCBhIHN0YWJsZSBzb3J0IGhlcmUuCi0gICAgcXNvcnRfcl9jb21wYXQobmV3UG9zVG9PcmlnaW5hbFBvcy5lZGl0QXJyYXkoKSwgTiwgc2l6ZW9mKHNpemVfdCksIHRoaXMsIGNvbmZpZ19zb3J0KTsKLSAgICAvL25ld1Bvc1RvT3JpZ2luYWxQb3Muc29ydChjb25maWdfc29ydCwgdGhpcyk7Ci0gICAgTk9JU1kocHJpbnRmKCJET05FIFNPUlRJTkcgU1RSSU5HUyBCWSBDT05GSUdVUkFUSU9OLlxuIikpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSByZXZlcnNlIG1hcHBpbmcgZnJvbSB0aGUgb3JpZ2luYWwgcG9zaXRpb24gaW4gdGhlIGFycmF5Ci0gICAgLy8gdG8gdGhlIG5ldyBwb3NpdGlvbiB3aGVyZSBpdCBhcHBlYXJzIGluIHRoZSBzb3J0ZWQgYXJyYXkuICBUaGlzIGlzCi0gICAgLy8gc28gdGhhdCBjbGllbnRzIGNhbiByZS1tYXAgYW55IHBvc2l0aW9ucyB0aGV5IGhhZCBwcmV2aW91c2x5IHN0b3JlZC4KLSAgICBtT3JpZ2luYWxQb3NUb05ld1BvcyA9IG5ld1Bvc1RvT3JpZ2luYWxQb3M7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBtT3JpZ2luYWxQb3NUb05ld1Bvcy5lZGl0SXRlbUF0KG5ld1Bvc1RvT3JpZ2luYWxQb3NbaV0pID0gaTsKLSAgICB9Ci0KLSNpZiAwCi0gICAgU29ydGVkVmVjdG9yPGVudHJ5PiBlbnRyaWVzOwotCi0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBwcmludGYoIiMlZCB3YXMgJWQ6ICVzXG4iLCBpLCBuZXdQb3NUb09yaWdpbmFsUG9zW2ldLAotICAgICAgICAgICAgICAgIG1FbnRyaWVzW21FbnRyeUFycmF5W25ld1Bvc1RvT3JpZ2luYWxQb3NbaV1dXS5tYWtlQ29uZmlnc1N0cmluZygpLnN0cmluZygpKTsKLSAgICAgICAgZW50cmllcy5hZGQobUVudHJpZXNbbUVudHJ5QXJyYXlbaV1dKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8ZW50cmllcy5zaXplKCk7IGkrKykgewotICAgICAgICBwcmludGYoIlNvcnRlZCBjb25maWcgIyVkOiAlc1xuIiwgaSwKLSAgICAgICAgICAgICAgICBlbnRyaWVzW2ldLm1ha2VDb25maWdzU3RyaW5nKCkuc3RyaW5nKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gTm93IHdlIHJlYnVpbGQgdGhlIGFycmF5cy4KLSAgICBWZWN0b3I8ZW50cnk+IG5ld0VudHJpZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbmV3RW50cnlBcnJheTsKLSAgICBWZWN0b3I8ZW50cnlfc3R5bGU+IG5ld0VudHJ5U3R5bGVBcnJheTsKLSAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8c2l6ZV90LCBzaXplX3Q+IG9yaWdPZmZzZXRUb05ld09mZnNldDsKLQotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgLy8gV2UgYXJlIGZpbGxpbmcgaW4gbmV3IG9mZnNldCAnaSc7IG9sZEkgaXMgd2hlcmUgd2UgY2FuIGZpbmQgaXQKLSAgICAgICAgLy8gaW4gdGhlIG9yaWdpbmFsIGRhdGEgc3RydWN0dXJlLgotICAgICAgICBzaXplX3Qgb2xkSSA9IG5ld1Bvc1RvT3JpZ2luYWxQb3NbaV07Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIGFjdHVhbCBlbnRyeSBhc3NvY2lhdGVkIHdpdGggdGhlIG9sZCBvZmZzZXQuCi0gICAgICAgIGNvbnN0IGVudHJ5JiBvbGRFbnQgPSBtRW50cmllc1ttRW50cnlBcnJheVtvbGRJXV07Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIHNhbWUgZW50cnkgdGhlIGxhc3QgdGltZSB3ZSBhZGRlZCBpdCB0byB0aGUKLSAgICAgICAgLy8gbmV3IGVudHJ5IGFycmF5LCBpZiBhbnkuCi0gICAgICAgIHNzaXplX3QgbmV3SW5kZXhPZk9mZnNldCA9IG9yaWdPZmZzZXRUb05ld09mZnNldC5pbmRleE9mS2V5KG9sZEkpOwotICAgICAgICBzaXplX3QgbmV3T2Zmc2V0OwotICAgICAgICBpZiAobmV3SW5kZXhPZk9mZnNldCA8IDApIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UgaGF2ZSBzZWVuIHRoZSBlbnRyeSwgc28gYWRkCi0gICAgICAgICAgICAvLyBpdC4KLSAgICAgICAgICAgIG5ld09mZnNldCA9IG5ld0VudHJpZXMuYWRkKG9sZEVudCk7Ci0gICAgICAgICAgICBuZXdFbnRyaWVzLmVkaXRJdGVtQXQobmV3T2Zmc2V0KS5pbmRpY2VzLmNsZWFyKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHNlZW4gdGhpcyBlbnRyeSBiZWZvcmUsIHVzZSB0aGUgZXhpc3Rpbmcgb25lCi0gICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIGFkZGluZyBpdCBhZ2Fpbi4KLSAgICAgICAgICAgIG5ld09mZnNldCA9IG9yaWdPZmZzZXRUb05ld09mZnNldC52YWx1ZUF0KG5ld0luZGV4T2ZPZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFVwZGF0ZSB0aGUgaW5kaWNlcyB0byBpbmNsdWRlIHRoaXMgbmV3IHBvc2l0aW9uLgotICAgICAgICBuZXdFbnRyaWVzLmVkaXRJdGVtQXQobmV3T2Zmc2V0KS5pbmRpY2VzLmFkZChpKTsKLSAgICAgICAgLy8gQW5kIGFkZCB0aGUgb2Zmc2V0IG9mIHRoZSBlbnRyeSB0byB0aGUgbmV3IGVudHJ5IGFycmF5LgotICAgICAgICBuZXdFbnRyeUFycmF5LmFkZChuZXdPZmZzZXQpOwotICAgICAgICAvLyBBZGQgYW55IG9sZCBzdHlsZSB0byB0aGUgbmV3IHN0eWxlIGFycmF5LgotICAgICAgICBpZiAobUVudHJ5U3R5bGVBcnJheS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBpZiAob2xkSSA8IG1FbnRyeVN0eWxlQXJyYXkuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbmV3RW50cnlTdHlsZUFycmF5LmFkZChtRW50cnlTdHlsZUFycmF5W29sZEldKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbmV3RW50cnlTdHlsZUFycmF5LmFkZChlbnRyeV9zdHlsZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdyB0cmltIGFueSBlbnRyaWVzIGF0IHRoZSBlbmQgb2YgdGhlIG5ldyBzdHlsZSBhcnJheSB0aGF0IGFyZQotICAgIC8vIG5vdCBuZWVkZWQuCi0gICAgZm9yIChzc2l6ZV90IGk9bmV3RW50cnlTdHlsZUFycmF5LnNpemUoKS0xOyBpPj0wOyBpLS0pIHsKLSAgICAgICAgY29uc3QgZW50cnlfc3R5bGUmIHN0eWxlID0gbmV3RW50cnlTdHlsZUFycmF5W2ldOwotICAgICAgICBpZiAoc3R5bGUuc3BhbnMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgLy8gVGhhdCdzIGl0LgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVGhpcyBvbmUgaXMgbm90IG5lZWRlZDsgcmVtb3ZlLgotICAgICAgICBuZXdFbnRyeVN0eWxlQXJyYXkucmVtb3ZlQXQoaSk7Ci0gICAgfQotCi0gICAgLy8gQWxsIGRvbmUsIGluc3RhbGwgdGhlIG5ldyBkYXRhIHN0cnVjdHVyZXMgYW5kIHVwYXRlIG1WYWx1ZXMgd2l0aAotICAgIC8vIHRoZSBuZXcgcG9zaXRpb25zLgotICAgIG1FbnRyaWVzID0gbmV3RW50cmllczsKLSAgICBtRW50cnlBcnJheSA9IG5ld0VudHJ5QXJyYXk7Ci0gICAgbUVudHJ5U3R5bGVBcnJheSA9IG5ld0VudHJ5U3R5bGVBcnJheTsKLSAgICBtVmFsdWVzLmNsZWFyKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPG1FbnRyaWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGVudHJ5JiBlbnQgPSBtRW50cmllc1tpXTsKLSAgICAgICAgbVZhbHVlcy5hZGQoZW50LnZhbHVlLCBlbnQuaW5kaWNlc1swXSk7Ci0gICAgfQotCi0jaWYgMAotICAgIHByaW50ZigiRklOQUwgU09SVEVEIFNUUklORyBDT05GSUdTOlxuIik7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPG1FbnRyaWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGVudHJ5JiBlbnQgPSBtRW50cmllc1tpXTsKLSAgICAgICAgcHJpbnRmKCIjIiBaRCAiICVzOiAlc1xuIiwgKFpEX1RZUEUpaSwgZW50Lm1ha2VDb25maWdzU3RyaW5nKCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgU3RyaW5nOChlbnQudmFsdWUpLnN0cmluZygpKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3A8QWFwdEZpbGU+IFN0cmluZ1Bvb2w6OmNyZWF0ZVN0cmluZ0Jsb2NrKCkKLXsKLSAgICBzcDxBYXB0RmlsZT4gcG9vbCA9IG5ldyBBYXB0RmlsZShTdHJpbmc4KCksIEFhcHRHcm91cEVudHJ5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCgpKTsKLSAgICBzdGF0dXNfdCBlcnIgPSB3cml0ZVN0cmluZ0Jsb2NrKHBvb2wpOwotICAgIHJldHVybiBlcnIgPT0gTk9fRVJST1IgPyBwb29sIDogTlVMTDsKLX0KLQotI2RlZmluZSBFTkNPREVfTEVOR1RIKHN0ciwgY2hyc3osIHN0clNpemUpIFwKLXsgXAotICAgIHNpemVfdCBtYXhNYXNrID0gMSA8PCAoKGNocnN6KjgpLTEpOyBcCi0gICAgc2l6ZV90IG1heFNpemUgPSBtYXhNYXNrLTE7IFwKLSAgICBpZiAoc3RyU2l6ZSA+IG1heFNpemUpIHsgXAotICAgICAgICAqc3RyKysgPSBtYXhNYXNrIHwgKChzdHJTaXplPj4oY2hyc3oqOCkpJm1heFNpemUpOyBcCi0gICAgfSBcCi0gICAgKnN0cisrID0gc3RyU2l6ZTsgXAotfQotCi1zdGF0dXNfdCBTdHJpbmdQb29sOjp3cml0ZVN0cmluZ0Jsb2NrKGNvbnN0IHNwPEFhcHRGaWxlPiYgcG9vbCkKLXsKLSAgICAvLyBBbGxvdyBhcHBlbmRpbmcuICBTb3JyeSB0aGlzIGlzIGEgbGl0dGxlIHdhY2t5LgotICAgIGlmIChwb29sLT5nZXRTaXplKCkgPiAwKSB7Ci0gICAgICAgIHNwPEFhcHRGaWxlPiBibG9jayA9IGNyZWF0ZVN0cmluZ0Jsb2NrKCk7Ci0gICAgICAgIGlmIChibG9jayA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBzc2l6ZV90IHJlcyA9IHBvb2wtPndyaXRlRGF0YShibG9jay0+Z2V0RGF0YSgpLCBibG9jay0+Z2V0U2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIChyZXMgPj0gMCkgPyAoc3RhdHVzX3QpTk9fRVJST1IgOiByZXM7Ci0gICAgfQotCi0gICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBhZGQgYWxsIHN0eWxlIHNwYW4gbmFtZXMgdG8gdGhlIHN0cmluZyBwb29sLgotICAgIC8vIFdlIGRvIHRoaXMgbm93IChpbnN0ZWFkIG9mIHdoZW4gdGhlIHNwYW4gaXMgYWRkZWQpIHNvIHRoYXQgdGhlc2UKLSAgICAvLyB3aWxsIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBwb29sLCBub3QgZGlzcnVwdGluZyB0aGUgb3JkZXIKLSAgICAvLyBvdXIgY2xpZW50IHBsYWNlZCB0aGVpciBvd24gc3RyaW5ncyBpbiBpdC4KLSAgICAKLSAgICBjb25zdCBzaXplX3QgU1RZTEVTID0gbUVudHJ5U3R5bGVBcnJheS5zaXplKCk7Ci0gICAgc2l6ZV90IGk7Ci0KLSAgICBmb3IgKGk9MDsgaTxTVFlMRVM7IGkrKykgewotICAgICAgICBlbnRyeV9zdHlsZSYgc3R5bGUgPSBtRW50cnlTdHlsZUFycmF5LmVkaXRJdGVtQXQoaSk7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gc3R5bGUuc3BhbnMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBlbnRyeV9zdHlsZV9zcGFuJiBzcGFuID0gc3R5bGUuc3BhbnMuZWRpdEl0ZW1BdChpKTsKLSAgICAgICAgICAgIHNzaXplX3QgaWR4ID0gYWRkKHNwYW4ubmFtZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoaWR4IDwgMCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYWRkaW5nIHNwYW4gZm9yIHN0eWxlIHRhZyAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChzcGFuLm5hbWUpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaWR4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3Bhbi5zcGFuLm5hbWUuaW5kZXggPSAodWludDMyX3QpaWR4OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3Qgc2l6ZV90IEVOVFJJRVMgPSBtRW50cnlBcnJheS5zaXplKCk7Ci0KLSAgICAvLyBOb3cgYnVpbGQgdGhlIHBvb2wgb2YgdW5pcXVlIHN0cmluZ3MuCi0KLSAgICBjb25zdCBzaXplX3QgU1RSSU5HUyA9IG1FbnRyaWVzLnNpemUoKTsKLSAgICBjb25zdCBzaXplX3QgcHJlU2l6ZSA9IHNpemVvZihSZXNTdHJpbmdQb29sX2hlYWRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICArIChzaXplb2YodWludDMyX3QpKkVOVFJJRVMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAoc2l6ZW9mKHVpbnQzMl90KSpTVFlMRVMpOwotICAgIGlmIChwb29sLT5lZGl0RGF0YShwcmVTaXplKSA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE91dCBvZiBtZW1vcnkgZm9yIHN0cmluZyBwb29sXG4iKTsKLSAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICB9Ci0KLSAgICBjb25zdCBzaXplX3QgY2hhclNpemUgPSBtVVRGOCA/IHNpemVvZih1aW50OF90KSA6IHNpemVvZihjaGFyMTZfdCk7Ci0KLSAgICBzaXplX3Qgc3RyUG9zID0gMDsKLSAgICBmb3IgKGk9MDsgaTxTVFJJTkdTOyBpKyspIHsKLSAgICAgICAgZW50cnkmIGVudCA9IG1FbnRyaWVzLmVkaXRJdGVtQXQoaSk7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBzdHJTaXplID0gKGVudC52YWx1ZS5zaXplKCkpOwotICAgICAgICBjb25zdCBzaXplX3QgbGVuU2l6ZSA9IHN0clNpemUgPiAoc2l6ZV90KSgxPDwoKGNoYXJTaXplKjgpLTEpKS0xID8KLSAgICAgICAgICAgIGNoYXJTaXplKjIgOiBjaGFyU2l6ZTsKLQotICAgICAgICBTdHJpbmc4IGVuY1N0cjsKLSAgICAgICAgaWYgKG1VVEY4KSB7Ci0gICAgICAgICAgICBlbmNTdHIgPSBTdHJpbmc4KGVudC52YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBzaXplX3QgZW5jU2l6ZSA9IG1VVEY4ID8gZW5jU3RyLnNpemUoKSA6IDA7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBlbmNMZW5TaXplID0gbVVURjggPwotICAgICAgICAgICAgKGVuY1NpemUgPiAoc2l6ZV90KSgxPDwoKGNoYXJTaXplKjgpLTEpKS0xID8KLSAgICAgICAgICAgICAgICBjaGFyU2l6ZSoyIDogY2hhclNpemUpIDogMDsKLQotICAgICAgICBlbnQub2Zmc2V0ID0gc3RyUG9zOwotCi0gICAgICAgIGNvbnN0IHNpemVfdCB0b3RhbFNpemUgPSBsZW5TaXplICsgZW5jTGVuU2l6ZSArCi0gICAgICAgICAgICAoKG1VVEY4ID8gZW5jU2l6ZSA6IHN0clNpemUpKzEpKmNoYXJTaXplOwotCi0gICAgICAgIHZvaWQqIGRhdCA9ICh2b2lkKilwb29sLT5lZGl0RGF0YShwcmVTaXplICsgc3RyUG9zICsgdG90YWxTaXplKTsKLSAgICAgICAgaWYgKGRhdCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBPdXQgb2YgbWVtb3J5IGZvciBzdHJpbmcgcG9vbFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgICAgICB9Ci0gICAgICAgIGRhdCA9ICh1aW50OF90KilkYXQgKyBwcmVTaXplICsgc3RyUG9zOwotICAgICAgICBpZiAobVVURjgpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QqIHN0cmluZ3MgPSAodWludDhfdCopZGF0OwotCi0gICAgICAgICAgICBFTkNPREVfTEVOR1RIKHN0cmluZ3MsIHNpemVvZih1aW50OF90KSwgc3RyU2l6ZSkKLQotICAgICAgICAgICAgRU5DT0RFX0xFTkdUSChzdHJpbmdzLCBzaXplb2YodWludDhfdCksIGVuY1NpemUpCi0KLSAgICAgICAgICAgIHN0cm5jcHkoKGNoYXIqKXN0cmluZ3MsIGVuY1N0ciwgZW5jU2l6ZSsxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVpbnQxNl90KiBzdHJpbmdzID0gKHVpbnQxNl90KilkYXQ7Ci0KLSAgICAgICAgICAgIEVOQ09ERV9MRU5HVEgoc3RyaW5ncywgc2l6ZW9mKHVpbnQxNl90KSwgc3RyU2l6ZSkKLQotICAgICAgICAgICAgc3RyY3B5MTZfaHRvZChzdHJpbmdzLCBlbnQudmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RyUG9zICs9IHRvdGFsU2l6ZTsKLSAgICB9Ci0KLSAgICAvLyBQYWQgZW5kaW5nIHN0cmluZyBwb3NpdGlvbiB1cCB0byBhIHVpbnQzMl90IGJvdW5kYXJ5LgotCi0gICAgaWYgKHN0clBvcyYweDMpIHsKLSAgICAgICAgc2l6ZV90IHBhZFBvcyA9ICgoc3RyUG9zKzMpJn4weDMpOwotICAgICAgICB1aW50OF90KiBkYXQgPSAodWludDhfdCopcG9vbC0+ZWRpdERhdGEocHJlU2l6ZSArIHBhZFBvcyk7Ci0gICAgICAgIGlmIChkYXQgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogT3V0IG9mIG1lbW9yeSBwYWRkaW5nIHN0cmluZyBwb29sXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KGRhdCtwcmVTaXplK3N0clBvcywgMCwgcGFkUG9zLXN0clBvcyk7Ci0gICAgICAgIHN0clBvcyA9IHBhZFBvczsKLSAgICB9Ci0KLSAgICAvLyBCdWlsZCB0aGUgcG9vbCBvZiBzdHlsZSBzcGFucy4KLQotICAgIHNpemVfdCBzdHlQb3MgPSBzdHJQb3M7Ci0gICAgZm9yIChpPTA7IGk8U1RZTEVTOyBpKyspIHsKLSAgICAgICAgZW50cnlfc3R5bGUmIGVudCA9IG1FbnRyeVN0eWxlQXJyYXkuZWRpdEl0ZW1BdChpKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBlbnQuc3BhbnMuc2l6ZSgpOwotICAgICAgICBjb25zdCBzaXplX3QgdG90YWxTaXplID0gKE4qc2l6ZW9mKFJlc1N0cmluZ1Bvb2xfc3BhbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzaXplb2YoUmVzU3RyaW5nUG9vbF9yZWYpOwotCi0gICAgICAgIGVudC5vZmZzZXQgPSBzdHlQb3Mtc3RyUG9zOwotICAgICAgICB1aW50OF90KiBkYXQgPSAodWludDhfdCopcG9vbC0+ZWRpdERhdGEocHJlU2l6ZSArIHN0eVBvcyArIHRvdGFsU2l6ZSk7Ci0gICAgICAgIGlmIChkYXQgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogT3V0IG9mIG1lbW9yeSBmb3Igc3RyaW5nIHN0eWxlc1xuIik7Ci0gICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgICAgICB9Ci0gICAgICAgIFJlc1N0cmluZ1Bvb2xfc3Bhbiogc3BhbiA9IChSZXNTdHJpbmdQb29sX3NwYW4qKShkYXQrcHJlU2l6ZStzdHlQb3MpOwotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBzcGFuLT5uYW1lLmluZGV4ID0gaHRvZGwoZW50LnNwYW5zW2ldLnNwYW4ubmFtZS5pbmRleCk7Ci0gICAgICAgICAgICBzcGFuLT5maXJzdENoYXIgPSBodG9kbChlbnQuc3BhbnNbaV0uc3Bhbi5maXJzdENoYXIpOwotICAgICAgICAgICAgc3Bhbi0+bGFzdENoYXIgPSBodG9kbChlbnQuc3BhbnNbaV0uc3Bhbi5sYXN0Q2hhcik7Ci0gICAgICAgICAgICBzcGFuKys7Ci0gICAgICAgIH0KLSAgICAgICAgc3Bhbi0+bmFtZS5pbmRleCA9IGh0b2RsKFJlc1N0cmluZ1Bvb2xfc3Bhbjo6RU5EKTsKLQotICAgICAgICBzdHlQb3MgKz0gdG90YWxTaXplOwotICAgIH0KLQotICAgIGlmIChTVFlMRVMgPiAwKSB7Ci0gICAgICAgIC8vIEFkZCBmdWxsIHRlcm1pbmF0b3IgYXQgdGhlIGVuZCAod2hlbiByZWFkaW5nIHdlIHZhbGlkYXRlIHRoYXQKLSAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgcG9vbCBpcyBmdWxseSB0ZXJtaW5hdGVkIHRvIHNpbXBsaWZ5IGVycm9yCi0gICAgICAgIC8vIGNoZWNraW5nKS4KLSAgICAgICAgc2l6ZV90IGV4dHJhID0gc2l6ZW9mKFJlc1N0cmluZ1Bvb2xfc3Bhbiktc2l6ZW9mKFJlc1N0cmluZ1Bvb2xfcmVmKTsKLSAgICAgICAgdWludDhfdCogZGF0ID0gKHVpbnQ4X3QqKXBvb2wtPmVkaXREYXRhKHByZVNpemUgKyBzdHlQb3MgKyBleHRyYSk7Ci0gICAgICAgIGlmIChkYXQgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogT3V0IG9mIG1lbW9yeSBmb3Igc3RyaW5nIHN0eWxlc1xuIik7Ci0gICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQzMl90KiBwID0gKHVpbnQzMl90KikoZGF0K3ByZVNpemUrc3R5UG9zKTsKLSAgICAgICAgd2hpbGUgKGV4dHJhID4gMCkgewotICAgICAgICAgICAgKnArKyA9IGh0b2RsKFJlc1N0cmluZ1Bvb2xfc3Bhbjo6RU5EKTsKLSAgICAgICAgICAgIGV4dHJhIC09IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3R5UG9zICs9IGV4dHJhOwotICAgIH0KLQotICAgIC8vIFdyaXRlIGhlYWRlci4KLQotICAgIFJlc1N0cmluZ1Bvb2xfaGVhZGVyKiBoZWFkZXIgPQotICAgICAgICAoUmVzU3RyaW5nUG9vbF9oZWFkZXIqKXBvb2wtPnBhZERhdGEoc2l6ZW9mKHVpbnQzMl90KSk7Ci0gICAgaWYgKGhlYWRlciA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE91dCBvZiBtZW1vcnkgZm9yIHN0cmluZyBwb29sXG4iKTsKLSAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICB9Ci0gICAgbWVtc2V0KGhlYWRlciwgMCwgc2l6ZW9mKCpoZWFkZXIpKTsKLSAgICBoZWFkZXItPmhlYWRlci50eXBlID0gaHRvZHMoUkVTX1NUUklOR19QT09MX1RZUEUpOwotICAgIGhlYWRlci0+aGVhZGVyLmhlYWRlclNpemUgPSBodG9kcyhzaXplb2YoKmhlYWRlcikpOwotICAgIGhlYWRlci0+aGVhZGVyLnNpemUgPSBodG9kbChwb29sLT5nZXRTaXplKCkpOwotICAgIGhlYWRlci0+c3RyaW5nQ291bnQgPSBodG9kbChFTlRSSUVTKTsKLSAgICBoZWFkZXItPnN0eWxlQ291bnQgPSBodG9kbChTVFlMRVMpOwotICAgIGlmIChtVVRGOCkgewotICAgICAgICBoZWFkZXItPmZsYWdzIHw9IGh0b2RsKFJlc1N0cmluZ1Bvb2xfaGVhZGVyOjpVVEY4X0ZMQUcpOwotICAgIH0KLSAgICBoZWFkZXItPnN0cmluZ3NTdGFydCA9IGh0b2RsKHByZVNpemUpOwotICAgIGhlYWRlci0+c3R5bGVzU3RhcnQgPSBodG9kbChTVFlMRVMgPiAwID8gKHByZVNpemUrc3RyUG9zKSA6IDApOwotCi0gICAgLy8gV3JpdGUgc3RyaW5nIGluZGV4IGFycmF5LgotCi0gICAgdWludDMyX3QqIGluZGV4ID0gKHVpbnQzMl90KikoaGVhZGVyKzEpOwotICAgIGZvciAoaT0wOyBpPEVOVFJJRVM7IGkrKykgewotICAgICAgICBlbnRyeSYgZW50ID0gbUVudHJpZXMuZWRpdEl0ZW1BdChtRW50cnlBcnJheVtpXSk7Ci0gICAgICAgICppbmRleCsrID0gaHRvZGwoZW50Lm9mZnNldCk7Ci0gICAgICAgIE5PSVNZKHByaW50ZigiV3JpdGluZyBlbnRyeSAjJWQ6IFwiJXNcIiBlbnQ9JWQgb2ZmPSVkXG4iLCBpLAotICAgICAgICAgICAgICAgIFN0cmluZzgoZW50LnZhbHVlKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBtRW50cnlBcnJheVtpXSwgZW50Lm9mZnNldCkpOwotICAgIH0KLQotICAgIC8vIFdyaXRlIHN0eWxlIGluZGV4IGFycmF5LgotCi0gICAgZm9yIChpPTA7IGk8U1RZTEVTOyBpKyspIHsKLSAgICAgICAgKmluZGV4KysgPSBodG9kbChtRW50cnlTdHlsZUFycmF5W2ldLm9mZnNldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zc2l6ZV90IFN0cmluZ1Bvb2w6Om9mZnNldEZvclN0cmluZyhjb25zdCBTdHJpbmcxNiYgdmFsKSBjb25zdAotewotICAgIGNvbnN0IFZlY3RvcjxzaXplX3Q+KiBpbmRpY2VzID0gb2Zmc2V0c0ZvclN0cmluZyh2YWwpOwotICAgIHNzaXplX3QgcmVzID0gaW5kaWNlcyAhPSBOVUxMICYmIGluZGljZXMtPnNpemUoKSA+IDAgPyBpbmRpY2VzLT5pdGVtQXQoMCkgOiAtMTsKLSAgICBOT0lTWShwcmludGYoIk9mZnNldCBmb3Igc3RyaW5nICVzOiAlZCAoJXMpXG4iLCBTdHJpbmc4KHZhbCkuc3RyaW5nKCksIHJlcywKLSAgICAgICAgICAgIHJlcyA+PSAwID8gU3RyaW5nOChtRW50cmllc1ttRW50cnlBcnJheVtyZXNdXS52YWx1ZSkuc3RyaW5nKCkgOiBTdHJpbmc4KCkpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1jb25zdCBWZWN0b3I8c2l6ZV90PiogU3RyaW5nUG9vbDo6b2Zmc2V0c0ZvclN0cmluZyhjb25zdCBTdHJpbmcxNiYgdmFsKSBjb25zdAotewotICAgIHNzaXplX3QgcG9zID0gbVZhbHVlcy52YWx1ZUZvcih2YWwpOwotICAgIGlmIChwb3MgPCAwKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gJm1FbnRyaWVzW21FbnRyeUFycmF5W3Bvc11dLmluZGljZXM7Ci19CmRpZmYgLS1naXQgYS90b29scy9hYXB0L1N0cmluZ1Bvb2wuaCBiL3Rvb2xzL2FhcHQvU3RyaW5nUG9vbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjNhYmZkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvU3RyaW5nUG9vbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQnVpbGQgcmVzb3VyY2UgZmlsZXMgZnJvbSByYXcgYXNzZXRzLgotLy8KLQotI2lmbmRlZiBTVFJJTkdfUE9PTF9ICi0jZGVmaW5lIFNUUklOR19QT09MX0gKLQotI2luY2x1ZGUgIk1haW4uaCIKLSNpbmNsdWRlICJBYXB0QXNzZXRzLmgiCi0KLSNpbmNsdWRlIDxhbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzE2Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvVHlwZUhlbHBlcnMuaD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpbmNsdWRlIDxsaWJleHBhdC9leHBhdC5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotI2RlZmluZSBQUklOVF9TVFJJTkdfTUVUUklDUyAwCi0KLXZvaWQgc3RyY3B5MTZfaHRvZCh1aW50MTZfdCogZHN0LCBjb25zdCB1aW50MTZfdCogc3JjKTsKLQotdm9pZCBwcmludFN0cmluZ1Bvb2woY29uc3QgUmVzU3RyaW5nUG9vbCogcG9vbCk7Ci0KLS8qKgotICogVGhlIFN0cmluZ1Bvb2wgY2xhc3MgaXMgdXNlZCBhcyBhbiBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gZm9yCi0gKiBnZW5lcmF0aW5nIHRoZSBzdHJpbmcgcG9vbCByZXNvdXJjZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGNhbiBiZSBwYXJzZWQgd2l0aAotICogUmVzU3RyaW5nUG9vbCBpbiBpbmNsdWRlL3V0aWxzL1Jlc291cmNlVHlwZXMuaC4KLSAqLwotY2xhc3MgU3RyaW5nUG9vbAotewotcHVibGljOgotICAgIHN0cnVjdCBlbnRyeSB7Ci0gICAgICAgIGVudHJ5KCkgOiBvZmZzZXQoMCkgeyB9Ci0gICAgICAgIGVudHJ5KGNvbnN0IFN0cmluZzE2JiBfdmFsdWUpIDogdmFsdWUoX3ZhbHVlKSwgb2Zmc2V0KDApLCBoYXNTdHlsZXMoZmFsc2UpIHsgfQotICAgICAgICBlbnRyeShjb25zdCBlbnRyeSYgbykgOiB2YWx1ZShvLnZhbHVlKSwgb2Zmc2V0KG8ub2Zmc2V0KSwKLSAgICAgICAgICAgICAgICBoYXNTdHlsZXMoby5oYXNTdHlsZXMpLCBpbmRpY2VzKG8uaW5kaWNlcyksCi0gICAgICAgICAgICAgICAgY29uZmlnVHlwZU5hbWUoby5jb25maWdUeXBlTmFtZSksIGNvbmZpZ3Moby5jb25maWdzKSB7IH0KLQotICAgICAgICBTdHJpbmcxNiB2YWx1ZTsKLSAgICAgICAgc2l6ZV90IG9mZnNldDsKLSAgICAgICAgYm9vbCBoYXNTdHlsZXM7Ci0gICAgICAgIFZlY3RvcjxzaXplX3Q+IGluZGljZXM7Ci0gICAgICAgIFN0cmluZzggY29uZmlnVHlwZU5hbWU7Ci0gICAgICAgIFZlY3RvcjxSZXNUYWJsZV9jb25maWc+IGNvbmZpZ3M7Ci0KLSAgICAgICAgU3RyaW5nOCBtYWtlQ29uZmlnc1N0cmluZygpIGNvbnN0OwotCi0gICAgICAgIGludCBjb21wYXJlKGNvbnN0IGVudHJ5JiBvKSBjb25zdDsKLQotICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgZW50cnkmIG8pIGNvbnN0IHsgcmV0dXJuIGNvbXBhcmUobykgPCAwOyB9Ci0gICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgZW50cnkmIG8pIGNvbnN0IHsgcmV0dXJuIGNvbXBhcmUobykgPD0gMDsgfQotICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGVudHJ5JiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pID09IDA7IH0KLSAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBlbnRyeSYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSAhPSAwOyB9Ci0gICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgZW50cnkmIG8pIGNvbnN0IHsgcmV0dXJuIGNvbXBhcmUobykgPj0gMDsgfQotICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZW50cnkmIG8pIGNvbnN0IHsgcmV0dXJuIGNvbXBhcmUobykgPiAwOyB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBlbnRyeV9zdHlsZV9zcGFuIHsKLSAgICAgICAgU3RyaW5nMTYgbmFtZTsKLSAgICAgICAgUmVzU3RyaW5nUG9vbF9zcGFuIHNwYW47Ci0gICAgfTsKLQotICAgIHN0cnVjdCBlbnRyeV9zdHlsZSB7Ci0gICAgICAgIGVudHJ5X3N0eWxlKCkgOiBvZmZzZXQoMCkgeyB9Ci0KLSAgICAgICAgZW50cnlfc3R5bGUoY29uc3QgZW50cnlfc3R5bGUmIG8pIDogb2Zmc2V0KG8ub2Zmc2V0KSwgc3BhbnMoby5zcGFucykgeyB9Ci0KLSAgICAgICAgc2l6ZV90IG9mZnNldDsKLSAgICAgICAgVmVjdG9yPGVudHJ5X3N0eWxlX3NwYW4+IHNwYW5zOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBJZiAndXRmOCcgaXMgdHJ1ZSwgc3RyaW5ncyB3aWxsIGJlIGVuY29kZWQgd2l0aCBVVEYtOCBpbnN0ZWFkIG9mCi0gICAgICogbGVmdCBpbiBKYXZhJ3MgbmF0aXZlIFVURi0xNi4KLSAgICAgKi8KLSAgICBleHBsaWNpdCBTdHJpbmdQb29sKGJvb2wgdXRmOCA9IGZhbHNlKTsKLQotICAgIC8qKgotICAgICAqIEFkZCBhIG5ldyBzdHJpbmcgdG8gdGhlIHBvb2wuICBJZiBtZXJnZUR1cGxpY2F0ZXMgaXMgdHJ1ZSwgdGhlbmlmCi0gICAgICogdGhlIHN0cmluZyBhbHJlYWR5IGV4aXN0cyB0aGUgZXhpc3RpbmcgZW50cnkgZm9yIGl0IHdpbGwgYmUgdXNlZDsKLSAgICAgKiBvdGhlcndpc2UsIG9yIGlmIHRoZSB2YWx1ZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QsIGEgbmV3IGVudHJ5IGlzCi0gICAgICogY3JlYXRlZC4KLSAgICAgKgotICAgICAqIFJldHVybnMgdGhlIGluZGV4IGluIHRoZSBlbnRyeSBhcnJheSBvZiB0aGUgbmV3IHN0cmluZyBlbnRyeS4KLSAgICAgKi8KLSAgICBzc2l6ZV90IGFkZChjb25zdCBTdHJpbmcxNiYgdmFsdWUsIGJvb2wgbWVyZ2VEdXBsaWNhdGVzID0gZmFsc2UsCi0gICAgICAgICAgICBjb25zdCBTdHJpbmc4KiBjb25maWdUeXBlTmFtZSA9IE5VTEwsIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogY29uZmlnID0gTlVMTCk7Ci0KLSAgICBzc2l6ZV90IGFkZChjb25zdCBTdHJpbmcxNiYgdmFsdWUsIGNvbnN0IFZlY3RvcjxlbnRyeV9zdHlsZV9zcGFuPiYgc3BhbnMsCi0gICAgICAgICAgICBjb25zdCBTdHJpbmc4KiBjb25maWdUeXBlTmFtZSA9IE5VTEwsIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogY29uZmlnID0gTlVMTCk7Ci0KLSAgICBzdGF0dXNfdCBhZGRTdHlsZVNwYW4oc2l6ZV90IGlkeCwgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBlbmQpOwotICAgIHN0YXR1c190IGFkZFN0eWxlU3BhbnMoc2l6ZV90IGlkeCwgY29uc3QgVmVjdG9yPGVudHJ5X3N0eWxlX3NwYW4+JiBzcGFucyk7Ci0gICAgc3RhdHVzX3QgYWRkU3R5bGVTcGFuKHNpemVfdCBpZHgsIGNvbnN0IGVudHJ5X3N0eWxlX3NwYW4mIHNwYW4pOwotCi0gICAgLy8gU29ydCB0aGUgY29udGVudHMgb2YgdGhlIHN0cmluZyBibG9jayBieSB0aGUgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkCi0gICAgLy8gd2l0aCBlYWNoIGl0ZW0uICBBZnRlciBkb2luZyB0aGlzIHlvdSBjYW4gdXNlIG1hcE9yaWdpbmFsUG9zVG9OZXdQb3MoKQotICAgIC8vIHRvIGZpbmQgb3V0IHRoZSBuZXcgcG9zaXRpb24gZ2l2ZW4gdGhlIHBvc2l0aW9uIG9yaWdpbmFsbHkgcmV0dXJuZWQgYnkKLSAgICAvLyBhZGQoKS4KLSAgICB2b2lkIHNvcnRCeUNvbmZpZygpOwotCi0gICAgLy8gRm9yIHVzZSBhZnRlciBzb3J0QnlDb25maWcoKSB0byBtYXAgZnJvbSB0aGUgb3JpZ2luYWwgcG9zaXRpb24gb2YKLSAgICAvLyBhIHN0cmluZyB0byBpdHMgbmV3IHNvcnRlZCBwb3NpdGlvbi4KLSAgICBzaXplX3QgbWFwT3JpZ2luYWxQb3NUb05ld1BvcyhzaXplX3Qgb3JpZ2luYWxQb3MpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1PcmlnaW5hbFBvc1RvTmV3UG9zLml0ZW1BdChvcmlnaW5hbFBvcyk7Ci0gICAgfQotCi0gICAgc3A8QWFwdEZpbGU+IGNyZWF0ZVN0cmluZ0Jsb2NrKCk7Ci0KLSAgICBzdGF0dXNfdCB3cml0ZVN0cmluZ0Jsb2NrKGNvbnN0IHNwPEFhcHRGaWxlPiYgcG9vbCk7Ci0KLSAgICAvKioKLSAgICAgKiBGaW5kIG91dCBhbiBvZmZzZXQgaW4gdGhlIHBvb2wgZm9yIGEgcGFydGljdWxhciBzdHJpbmcuICBJZiB0aGUgc3RyaW5nCi0gICAgICogcG9vbCBpcyBzb3J0ZWQsIHRoaXMgY2FuIG5vdCBiZSBjYWxsZWQgdW50aWwgYWZ0ZXIgY3JlYXRlU3RyaW5nQmxvY2soKQotICAgICAqIG9yIHdyaXRlU3RyaW5nQmxvY2soKSBoYXMgYmVlbiBjYWxsZWQKLSAgICAgKiAod2hpY2ggZGV0ZXJtaW5lcyB0aGUgb2Zmc2V0cykuICBJbiB0aGUgY2FzZSBvZiBhIHN0cmluZyB0aGF0IGFwcGVhcnMKLSAgICAgKiBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgcG9vbCwgdGhlIGZpcnN0IG9mZnNldCB3aWxsIGJlIHJldHVybmVkLiAgUmV0dXJucwotICAgICAqIC0xIGlmIHRoZSBzdHJpbmcgZG9lcyBub3QgZXhpc3QuCi0gICAgICovCi0gICAgc3NpemVfdCBvZmZzZXRGb3JTdHJpbmcoY29uc3QgU3RyaW5nMTYmIHZhbCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBGaW5kIGFsbCBvZiB0aGUgb2Zmc2V0cyBpbiB0aGUgcG9vbCBmb3IgYSBwYXJ0aWN1bGFyIHN0cmluZy4gIElmIHRoZQotICAgICAqIHN0cmluZyBwb29sIGlzIHNvcnRlZCwgdGhpcyBjYW4gbm90IGJlIGNhbGxlZCB1bnRpbCBhZnRlcgotICAgICAqIGNyZWF0ZVN0cmluZ0Jsb2NrKCkgb3Igd3JpdGVTdHJpbmdCbG9jaygpIGhhcyBiZWVuIGNhbGxlZAotICAgICAqICh3aGljaCBkZXRlcm1pbmVzIHRoZSBvZmZzZXRzKS4gIFJldHVybnMgTlVMTCBpZiB0aGUgc3RyaW5nIGRvZXMgbm90IGV4aXN0LgotICAgICAqLwotICAgIGNvbnN0IFZlY3RvcjxzaXplX3Q+KiBvZmZzZXRzRm9yU3RyaW5nKGNvbnN0IFN0cmluZzE2JiB2YWwpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBpbnQgY29uZmlnX3NvcnQodm9pZCogc3RhdGUsIGNvbnN0IHZvaWQqIGxocywgY29uc3Qgdm9pZCogcmhzKTsKLQotICAgIGNvbnN0IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVVRGODsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmVzIHJlcHJlc2VudCB0aGUgYWN0dWFsIHN0cnVjdHVyZXMKLSAgICAvLyB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGUgZmluYWwgc3RyaW5nIHBvb2wuCi0KLSAgICAvLyBSYXcgYXJyYXkgb2YgdW5pcXVlIHN0cmluZ3MsIGluIHNvbWUgYXJiaXRyYXJ5IG9yZGVyLiAgVGhpcyBpcyB0aGUKLSAgICAvLyBhY3R1YWwgc3RyaW5ncyB0aGF0IGFwcGVhciBpbiB0aGUgZmluYWwgc3RyaW5nIHBvb2wsIGluIHRoZSBvcmRlcgotICAgIC8vIHRoYXQgdGhleSB3aWxsIGJlIHdyaXR0ZW4uCi0gICAgVmVjdG9yPGVudHJ5PiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1FbnRyaWVzOwotICAgIC8vIEFycmF5IG9mIGluZGljZXMgaW50byBtRW50cmllcywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZQotICAgIC8vIGFkZGVkIHRvIHRoZSBwb29sLiAgVGhpcyBjYW4gYmUgZGlmZmVyZW50IHRoYW4gbUVudHJpZXMKLSAgICAvLyBpZiB0aGUgc2FtZSBzdHJpbmcgd2FzIGFkZGVkIG11bHRpcGxlIHRpbWVzIChpdCB3aWxsIGFwcGVhcgotICAgIC8vIG9uY2UgaW4gbUVudHJpZXMsIHdpdGggbXVsdGlwbGUgb2NjdXJyZW5jZXMgaW4gdGhpcyBhcnJheSkuCi0gICAgLy8gVGhpcyBpcyB0aGUgbG9va3VwIGFycmF5IHRoYXQgd2lsbCBiZSB3cml0dGVuIGZvciBmaW5kaW5nCi0gICAgLy8gdGhlIHN0cmluZyBmb3IgZWFjaCBvZmZzZXQvcG9zaXRpb24gaW4gdGhlIHN0cmluZyBwb29sLgotICAgIFZlY3RvcjxzaXplX3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICBtRW50cnlBcnJheTsKLSAgICAvLyBPcHRpb25hbCBzdHlsZSBzcGFuIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGluZGV4IG9mCi0gICAgLy8gbUVudHJ5QXJyYXkuCi0gICAgVmVjdG9yPGVudHJ5X3N0eWxlPiAgICAgICAgICAgICAgICAgICAgIG1FbnRyeVN0eWxlQXJyYXk7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGRhdGEgc3RydWN0dXJlcyBhcmUgdXNlZCBmb3IgYm9vay1rZWVwaW5nIGFzIHRoZQotICAgIC8vIHN0cmluZyBwb29sIGlzIGNvbnN0cnVjdGVkLgotCi0gICAgLy8gVW5pcXVlIHNldCBvZiBhbGwgdGhlIHN0cmluZ3MgYWRkZWQgdG8gdGhlIHBvb2wsIG1hcHBlZCB0bwotICAgIC8vIHRoZSBmaXJzdCBpbmRleCBvZiBtRW50cnlBcnJheSB3aGVyZSB0aGUgdmFsdWUgd2FzIGFkZGVkLgotICAgIERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmcxNiwgc3NpemVfdD4gICBtVmFsdWVzOwotICAgIC8vIFRoaXMgYXJyYXkgbWFwcyBmcm9tIHRoZSBvcmlnaW5hbCBwb3NpdGlvbiBhIHN0cmluZyB3YXMgcGxhY2VkIGF0Ci0gICAgLy8gaW4gbUVudHJ5QXJyYXkgdG8gaXRzIG5ldyBwb3NpdGlvbiBhZnRlciBiZWluZyBzb3J0ZWQgd2l0aCBzb3J0QnlDb25maWcoKS4KLSAgICBWZWN0b3I8c2l6ZV90PiAgICAgICAgICAgICAgICAgICAgICAgICAgbU9yaWdpbmFsUG9zVG9OZXdQb3M7Ci19OwotCi0vLyBUaGUgZW50cnkgdHlwZXMgYXJlIHRyaXZpYWxseSBtb3ZhYmxlIGJlY2F1c2UgYWxsIGZpZWxkcyB0aGV5IGNvbnRhaW4sIGluY2x1ZGluZwotLy8gdGhlIHZlY3RvcnMgYW5kIHN0cmluZ3MsIGFyZSB0cml2aWFsbHkgbW92YWJsZS4KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLSAgICBBTkRST0lEX1RSSVZJQUxfTU9WRV9UUkFJVChTdHJpbmdQb29sOjplbnRyeSk7Ci0gICAgQU5EUk9JRF9UUklWSUFMX01PVkVfVFJBSVQoU3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbik7Ci0gICAgQU5EUk9JRF9UUklWSUFMX01PVkVfVFJBSVQoU3RyaW5nUG9vbDo6ZW50cnlfc3R5bGUpOwotfTsKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvV29ya1F1ZXVlLmNwcCBiL3Rvb2xzL2FhcHQvV29ya1F1ZXVlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRhOTYyZi4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1dvcmtRdWV1ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vICNkZWZpbmUgTE9HX05ERUJVRyAwCi0jZGVmaW5lIExPR19UQUcgIldvcmtRdWV1ZSIKLQotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLS8vIC0tLSBXb3JrUXVldWUgLS0tCi0KLVdvcmtRdWV1ZTo6V29ya1F1ZXVlKHNpemVfdCBtYXhUaHJlYWRzLCBib29sIGNhbkNhbGxKYXZhKSA6Ci0gICAgICAgIG1NYXhUaHJlYWRzKG1heFRocmVhZHMpLCBtQ2FuQ2FsbEphdmEoY2FuQ2FsbEphdmEpLAotICAgICAgICBtQ2FuY2VsZWQoZmFsc2UpLCBtRmluaXNoZWQoZmFsc2UpLCBtSWRsZVRocmVhZHMoMCkgewotfQotCi1Xb3JrUXVldWU6On5Xb3JrUXVldWUoKSB7Ci0gICAgaWYgKCFjYW5jZWwoKSkgewotICAgICAgICBmaW5pc2goKTsKLSAgICB9Ci19Ci0KLXN0YXR1c190IFdvcmtRdWV1ZTo6c2NoZWR1bGUoV29ya1VuaXQqIHdvcmtVbml0LCBzaXplX3QgYmFja2xvZykgewotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0KLSAgICBpZiAobUZpbmlzaGVkIHx8IG1DYW5jZWxlZCkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgaWYgKG1Xb3JrVGhyZWFkcy5zaXplKCkgPCBtTWF4VGhyZWFkcwotICAgICAgICAgICAgJiYgbUlkbGVUaHJlYWRzIDwgbVdvcmtVbml0cy5zaXplKCkgKyAxKSB7Ci0gICAgICAgIHNwPFdvcmtUaHJlYWQ+IHdvcmtUaHJlYWQgPSBuZXcgV29ya1RocmVhZCh0aGlzLCBtQ2FuQ2FsbEphdmEpOwotICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSB3b3JrVGhyZWFkLT5ydW4oIldvcmtRdWV1ZTo6V29ya1RocmVhZCIpOwotICAgICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9Ci0gICAgICAgIG1Xb3JrVGhyZWFkcy5hZGQod29ya1RocmVhZCk7Ci0gICAgICAgIG1JZGxlVGhyZWFkcyArPSAxOwotICAgIH0gZWxzZSBpZiAoYmFja2xvZykgewotICAgICAgICB3aGlsZSAobVdvcmtVbml0cy5zaXplKCkgPj0gbU1heFRocmVhZHMgKiBiYWNrbG9nKSB7Ci0gICAgICAgICAgICBtV29ya0RlcXVldWVkQ29uZGl0aW9uLndhaXQobUxvY2spOwotICAgICAgICAgICAgaWYgKG1GaW5pc2hlZCB8fCBtQ2FuY2VsZWQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtV29ya1VuaXRzLmFkZCh3b3JrVW5pdCk7Ci0gICAgbVdvcmtDaGFuZ2VkQ29uZGl0aW9uLmJyb2FkY2FzdCgpOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgV29ya1F1ZXVlOjpjYW5jZWwoKSB7Ci0gICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLQotICAgIHJldHVybiBjYW5jZWxMb2NrZWQoKTsKLX0KLQotc3RhdHVzX3QgV29ya1F1ZXVlOjpjYW5jZWxMb2NrZWQoKSB7Ci0gICAgaWYgKG1GaW5pc2hlZCkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgaWYgKCFtQ2FuY2VsZWQpIHsKLSAgICAgICAgbUNhbmNlbGVkID0gdHJ1ZTsKLQotICAgICAgICBzaXplX3QgY291bnQgPSBtV29ya1VuaXRzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBkZWxldGUgbVdvcmtVbml0cy5pdGVtQXQoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVdvcmtVbml0cy5jbGVhcigpOwotICAgICAgICBtV29ya0NoYW5nZWRDb25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAgICAgIG1Xb3JrRGVxdWV1ZWRDb25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAgfQotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgV29ya1F1ZXVlOjpmaW5pc2goKSB7Ci0gICAgeyAvLyBhY3F1aXJlIGxvY2sKLSAgICAgICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLQotICAgICAgICBpZiAobUZpbmlzaGVkKSB7Ci0gICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLQotICAgICAgICBtRmluaXNoZWQgPSB0cnVlOwotICAgICAgICBtV29ya0NoYW5nZWRDb25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAgfSAvLyByZWxlYXNlIGxvY2sKLQotICAgIC8vIEl0IGlzIG5vdCBwb3NzaWJsZSBmb3IgdGhlIGxpc3Qgb2Ygd29yayB0aHJlYWRzIHRvIGNoYW5nZSBvbmNlIHRoZSBtRmluaXNoZWQKLSAgICAvLyBmbGFnIGhhcyBiZWVuIHNldCwgc28gd2UgY2FuIGFjY2VzcyBtV29ya1RocmVhZHMgb3V0c2lkZSBvZiB0aGUgbG9jayBoZXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1Xb3JrVGhyZWFkcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIG1Xb3JrVGhyZWFkcy5pdGVtQXQoaSktPmpvaW4oKTsKLSAgICB9Ci0gICAgbVdvcmtUaHJlYWRzLmNsZWFyKCk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1ib29sIFdvcmtRdWV1ZTo6dGhyZWFkTG9vcCgpIHsKLSAgICBXb3JrVW5pdCogd29ya1VuaXQ7Ci0gICAgeyAvLyBhY3F1aXJlIGxvY2sKLSAgICAgICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLQotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBpZiAobUNhbmNlbGVkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIW1Xb3JrVW5pdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgd29ya1VuaXQgPSBtV29ya1VuaXRzLml0ZW1BdCgwKTsKLSAgICAgICAgICAgICAgICBtV29ya1VuaXRzLnJlbW92ZUF0KDApOwotICAgICAgICAgICAgICAgIG1JZGxlVGhyZWFkcyAtPSAxOwotICAgICAgICAgICAgICAgIG1Xb3JrRGVxdWV1ZWRDb25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtRmluaXNoZWQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1Xb3JrQ2hhbmdlZENvbmRpdGlvbi53YWl0KG1Mb2NrKTsKLSAgICAgICAgfQotICAgIH0gLy8gcmVsZWFzZSBsb2NrCi0KLSAgICBib29sIHNob3VsZENvbnRpbnVlID0gd29ya1VuaXQtPnJ1bigpOwotICAgIGRlbGV0ZSB3b3JrVW5pdDsKLQotICAgIHsgLy8gYWNxdWlyZSBsb2NrCi0gICAgICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0KLSAgICAgICAgbUlkbGVUaHJlYWRzICs9IDE7Ci0KLSAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZSkgewotICAgICAgICAgICAgY2FuY2VsTG9ja2VkKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IC8vIHJlbGVhc2UgbG9jawotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIC0tLSBXb3JrUXVldWU6OldvcmtUaHJlYWQgLS0tCi0KLVdvcmtRdWV1ZTo6V29ya1RocmVhZDo6V29ya1RocmVhZChXb3JrUXVldWUqIHdvcmtRdWV1ZSwgYm9vbCBjYW5DYWxsSmF2YSkgOgotICAgICAgICBUaHJlYWQoY2FuQ2FsbEphdmEpLCBtV29ya1F1ZXVlKHdvcmtRdWV1ZSkgewotfQotCi1Xb3JrUXVldWU6OldvcmtUaHJlYWQ6On5Xb3JrVGhyZWFkKCkgewotfQotCi1ib29sIFdvcmtRdWV1ZTo6V29ya1RocmVhZDo6dGhyZWFkTG9vcCgpIHsKLSAgICByZXR1cm4gbVdvcmtRdWV1ZS0+dGhyZWFkTG9vcCgpOwotfQotCi19OyAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvV29ya1F1ZXVlLmggYi90b29scy9hYXB0L1dvcmtRdWV1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzhmMDVkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvV29ya1F1ZXVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLypdCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFBUFRfV09SS19RVUVVRV9ICi0jZGVmaW5lIEFBUFRfV09SS19RVUVVRV9ICi0KLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KLSNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy90aHJlYWRzLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyoKLSAqIEEgdGhyZWFkZWQgd29yayBxdWV1ZS4KLSAqCi0gKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIG1ha2UgaXQgZWFzeSB0byBydW4gYSBidW5jaCBvZiBpc29sYXRlZCB3b3JrCi0gKiB1bml0cyBpbiBwYXJhbGxlbCwgdXNpbmcgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGhyZWFkcy4KLSAqIFRvIHVzZSBpdCwgd3JpdGUgYSBsb29wIHRvIHBvc3Qgd29yayB1bml0cyB0byB0aGUgd29yayBxdWV1ZSwgdGhlbiBzeW5jaHJvbml6ZQotICogb24gdGhlIHF1ZXVlIGF0IHRoZSBlbmQuCi0gKi8KLWNsYXNzIFdvcmtRdWV1ZSB7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgV29ya1VuaXQgewotICAgIHB1YmxpYzoKLSAgICAgICAgV29ya1VuaXQoKSB7IH0KLSAgICAgICAgdmlydHVhbCB+V29ya1VuaXQoKSB7IH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBSdW5zIHRoZSB3b3JrIHVuaXQuCi0gICAgICAgICAqIElmIHRoZSByZXN1bHQgaXMgJ3RydWUnIHRoZW4gdGhlIHdvcmsgcXVldWUgY29udGludWVzIHNjaGVkdWxpbmcgd29yayBhcyB1c3VhbC4KLSAgICAgICAgICogSWYgdGhlIHJlc3VsdCBpcyAnZmFsc2UnIHRoZW4gdGhlIHdvcmsgcXVldWUgaXMgY2FuY2VsZWQuCi0gICAgICAgICAqLwotICAgICAgICB2aXJ0dWFsIGJvb2wgcnVuKCkgPSAwOwotICAgIH07Ci0KLSAgICAvKiBDcmVhdGVzIGEgd29yayBxdWV1ZSB3aXRoIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBudW1iZXIgb2Ygd29yayB0aHJlYWRzLiAqLwotICAgIFdvcmtRdWV1ZShzaXplX3QgbWF4VGhyZWFkcywgYm9vbCBjYW5DYWxsSmF2YSA9IHRydWUpOwotCi0gICAgLyogRGVzdHJveXMgdGhlIHdvcmsgcXVldWUuCi0gICAgICogQ2FuY2VscyBwZW5kaW5nIHdvcmsgYW5kIHdhaXRzIGZvciBhbGwgcmVtYWluaW5nIHRocmVhZHMgdG8gY29tcGxldGUuCi0gICAgICovCi0gICAgfldvcmtRdWV1ZSgpOwotCi0gICAgLyogUG9zdHMgYSB3b3JrIHVuaXQgdG8gcnVuIGxhdGVyLgotICAgICAqIElmIHRoZSB3b3JrIHF1ZXVlIGhhcyBiZWVuIGNhbmNlbGVkIG9yIGlzIGFscmVhZHkgZmluaXNoZWQsIHJldHVybnMgSU5WQUxJRF9PUEVSQVRJT04KLSAgICAgKiBhbmQgZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHdvcmsgdW5pdCAoY2FsbGVyIG11c3QgZGVzdHJveSBpdCBpdHNlbGYpLgotICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyBPSyBhbmQgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSB3b3JrIHVuaXQgKHRoZSB3b3JrIHF1ZXVlIHdpbGwKLSAgICAgKiBkZXN0cm95IGl0IGF1dG9tYXRpY2FsbHkpLgotICAgICAqCi0gICAgICogRm9yIGZsb3cgY29udHJvbCwgdGhpcyBtZXRob2QgYmxvY2tzIHdoZW4gdGhlIHNpemUgb2YgdGhlIHBlbmRpbmcgd29yayBxdWV1ZSBpcyBtb3JlCi0gICAgICogJ2JhY2tsb2cnIHRpbWVzIHRoZSBudW1iZXIgb2YgdGhyZWFkcy4gIFRoaXMgY29uZGl0aW9uIHJlZHVjZXMgdGhlIHJhdGUgb2YgZW50cnkgaW50bwotICAgICAqIHRoZSBwZW5kaW5nIHdvcmsgcXVldWUgYW5kIHByZXZlbnRzIGl0IGZyb20gZ3Jvd2luZyBtdWNoIG1vcmUgcmFwaWRseSB0aGFuIHRoZQotICAgICAqIHdvcmsgdGhyZWFkcyBjYW4gYWN0dWFsbHkgaGFuZGxlLgotICAgICAqCi0gICAgICogSWYgJ2JhY2tsb2cnIGlzIDAsIHRoZW4gbm8gdGhyb3R0bGUgaXMgYXBwbGllZC4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBzY2hlZHVsZShXb3JrVW5pdCogd29ya1VuaXQsIHNpemVfdCBiYWNrbG9nID0gMik7Ci0KLSAgICAvKiBDYW5jZWxzIGFsbCBwZW5kaW5nIHdvcmsuCi0gICAgICogSWYgdGhlIHdvcmsgcXVldWUgaXMgYWxyZWFkeSBmaW5pc2hlZCwgcmV0dXJucyBJTlZBTElEX09QRVJBVElPTi4KLSAgICAgKiBJZiB0aGUgd29yayBxdWV1ZSBpcyBhbHJlYWR5IGNhbmNlbGVkLCByZXR1cm5zIE9LIGFuZCBkb2VzIG5vdGhpbmcgZWxzZS4KLSAgICAgKiBPdGhlcndpc2UsIHJldHVybnMgT0ssIGRpc2NhcmRzIGFsbCBwZW5kaW5nIHdvcmsgdW5pdHMgYW5kIHByZXZlbnRzIGFkZGl0aW9uYWwKLSAgICAgKiB3b3JrIHVuaXRzIGZyb20gYmVpbmcgc2NoZWR1bGVkLgotICAgICAqCi0gICAgICogQ2FsbCBmaW5pc2goKSBhZnRlciBjYW5jZWwoKSB0byB3YWl0IGZvciBhbGwgcmVtYWluaW5nIHdvcmsgdG8gY29tcGxldGUuCi0gICAgICovCi0gICAgc3RhdHVzX3QgY2FuY2VsKCk7Ci0KLSAgICAvKiBXYWl0cyBmb3IgYWxsIHdvcmsgdG8gY29tcGxldGUuCi0gICAgICogSWYgdGhlIHdvcmsgcXVldWUgaXMgYWxyZWFkeSBmaW5pc2hlZCwgcmV0dXJucyBJTlZBTElEX09QRVJBVElPTi4KLSAgICAgKiBPdGhlcndpc2UsIHdhaXRzIGZvciBhbGwgd29yayB0byBjb21wbGV0ZSBhbmQgcmV0dXJucyBPSy4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBmaW5pc2goKTsKLQotcHJpdmF0ZToKLSAgICBjbGFzcyBXb3JrVGhyZWFkIDogcHVibGljIFRocmVhZCB7Ci0gICAgcHVibGljOgotICAgICAgICBXb3JrVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBib29sIGNhbkNhbGxKYXZhKTsKLSAgICAgICAgdmlydHVhbCB+V29ya1RocmVhZCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCBib29sIHRocmVhZExvb3AoKTsKLQotICAgICAgICBXb3JrUXVldWUqIGNvbnN0IG1Xb3JrUXVldWU7Ci0gICAgfTsKLQotICAgIHN0YXR1c190IGNhbmNlbExvY2tlZCgpOwotICAgIGJvb2wgdGhyZWFkTG9vcCgpOyAvLyBjYWxsZWQgZnJvbSBlYWNoIHdvcmsgdGhyZWFkCi0KLSAgICBjb25zdCBzaXplX3QgbU1heFRocmVhZHM7Ci0gICAgY29uc3QgYm9vbCBtQ2FuQ2FsbEphdmE7Ci0KLSAgICBNdXRleCBtTG9jazsKLSAgICBDb25kaXRpb24gbVdvcmtDaGFuZ2VkQ29uZGl0aW9uOwotICAgIENvbmRpdGlvbiBtV29ya0RlcXVldWVkQ29uZGl0aW9uOwotCi0gICAgYm9vbCBtQ2FuY2VsZWQ7Ci0gICAgYm9vbCBtRmluaXNoZWQ7Ci0gICAgc2l6ZV90IG1JZGxlVGhyZWFkczsKLSAgICBWZWN0b3I8c3A8V29ya1RocmVhZD4gPiBtV29ya1RocmVhZHM7Ci0gICAgVmVjdG9yPFdvcmtVbml0Kj4gbVdvcmtVbml0czsKLX07Ci0KLX07IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBBQVBUX1dPUktfUVVFVUVfSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9YTUxOb2RlLmNwcCBiL3Rvb2xzL2FhcHQvWE1MTm9kZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NjNhZDUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9YTUxOb2RlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1MTAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBCdWlsZCByZXNvdXJjZSBmaWxlcyBmcm9tIHJhdyBhc3NldHMuCi0vLwotCi0jaW5jbHVkZSAiWE1MTm9kZS5oIgotI2luY2x1ZGUgIlJlc291cmNlVGFibGUuaCIKLSNpbmNsdWRlICJwc2V1ZG9sb2NhbGl6ZS5oIgotCi0jaW5jbHVkZSA8dXRpbHMvQnl0ZU9yZGVyLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmbmRlZiBIQVZFX01TX0NfUlVOVElNRQotI2RlZmluZSBPX0JJTkFSWSAwCi0jZW5kaWYKLQotI2RlZmluZSBOT0lTWSh4KSAvL3gKLSNkZWZpbmUgTk9JU1lfUEFSU0UoeCkgLy94Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IFJFU09VUkNFU19ST09UX05BTUVTUEFDRSA9ICJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzLyI7Ci1jb25zdCBjaGFyKiBjb25zdCBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UgPSAiaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIjsKLWNvbnN0IGNoYXIqIGNvbnN0IFJFU09VUkNFU19BVVRPX1BBQ0tBR0VfTkFNRVNQQUNFID0gImh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMtYXV0byI7Ci1jb25zdCBjaGFyKiBjb25zdCBSRVNPVVJDRVNfUk9PVF9QUlZfTkFNRVNQQUNFID0gImh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9wcnYvcmVzLyI7Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IFhMSUZGX1hNTE5TID0gInVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiOwotY29uc3QgY2hhciogY29uc3QgQUxMT1dFRF9YTElGRl9FTEVNRU5UU1tdID0gewotICAgICAgICAiYnB0IiwKLSAgICAgICAgImVwdCIsCi0gICAgICAgICJpdCIsCi0gICAgICAgICJwaCIsCi0gICAgICAgICJnIiwKLSAgICAgICAgImJ4IiwKLSAgICAgICAgImV4IiwKLSAgICAgICAgIngiCi0gICAgfTsKLQotYm9vbCBpc1doaXRlc3BhY2UoY29uc3QgY2hhcjE2X3QqIHN0cikKLXsKLSAgICB3aGlsZSAoKnN0ciAhPSAwICYmICpzdHIgPCAxMjggJiYgaXNzcGFjZSgqc3RyKSkgewotICAgICAgICBzdHIrKzsKLSAgICB9Ci0gICAgcmV0dXJuICpzdHIgPT0gMDsKLX0KLQotc3RhdGljIGNvbnN0IFN0cmluZzE2IFJFU09VUkNFU19QUkVGSVgoUkVTT1VSQ0VTX1JPT1RfTkFNRVNQQUNFKTsKLXN0YXRpYyBjb25zdCBTdHJpbmcxNiBSRVNPVVJDRVNfUFJFRklYX0FVVE9fUEFDS0FHRShSRVNPVVJDRVNfQVVUT19QQUNLQUdFX05BTUVTUEFDRSk7Ci1zdGF0aWMgY29uc3QgU3RyaW5nMTYgUkVTT1VSQ0VTX1BSVl9QUkVGSVgoUkVTT1VSQ0VTX1JPT1RfUFJWX05BTUVTUEFDRSk7Ci1zdGF0aWMgY29uc3QgU3RyaW5nMTYgUkVTT1VSQ0VTX1RPT0xTX05BTUVTUEFDRSgiaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vdG9vbHMiKTsKLQotU3RyaW5nMTYgZ2V0TmFtZXNwYWNlUmVzb3VyY2VQYWNrYWdlKFN0cmluZzE2IGFwcFBhY2thZ2UsIFN0cmluZzE2IG5hbWVzcGFjZVVyaSwgYm9vbCogb3V0SXNQdWJsaWMpCi17Ci0gICAgLy9wcmludGYoIiVzIHN0YXJ0cyB3aXRoICVzP1xuIiwgU3RyaW5nOChuYW1lc3BhY2VVcmkpLnN0cmluZygpLAotICAgIC8vICAgICAgIFN0cmluZzgoUkVTT1VSQ0VTX1BSRUZJWCkuc3RyaW5nKCkpOwotICAgIHNpemVfdCBwcmVmaXhTaXplOwotICAgIGJvb2wgaXNQdWJsaWMgPSB0cnVlOwotICAgIGlmKG5hbWVzcGFjZVVyaS5zdGFydHNXaXRoKFJFU09VUkNFU19QUkVGSVhfQVVUT19QQUNLQUdFKSkgewotICAgICAgICBOT0lTWShwcmludGYoIlVzaW5nIGRlZmF1bHQgYXBwbGljYXRpb24gcGFja2FnZTogJXMgLT4gJXNcbiIsIFN0cmluZzgobmFtZXNwYWNlVXJpKS5zdHJpbmcoKSwgU3RyaW5nOChhcHBQYWNrYWdlKS5zdHJpbmcoKSkpOwotICAgICAgICBpc1B1YmxpYyA9IHRydWU7Ci0gICAgICAgIHJldHVybiBhcHBQYWNrYWdlOwotICAgIH0gZWxzZSBpZiAobmFtZXNwYWNlVXJpLnN0YXJ0c1dpdGgoUkVTT1VSQ0VTX1BSRUZJWCkpIHsKLSAgICAgICAgcHJlZml4U2l6ZSA9IFJFU09VUkNFU19QUkVGSVguc2l6ZSgpOwotICAgIH0gZWxzZSBpZiAobmFtZXNwYWNlVXJpLnN0YXJ0c1dpdGgoUkVTT1VSQ0VTX1BSVl9QUkVGSVgpKSB7Ci0gICAgICAgIGlzUHVibGljID0gZmFsc2U7Ci0gICAgICAgIHByZWZpeFNpemUgPSBSRVNPVVJDRVNfUFJWX1BSRUZJWC5zaXplKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG91dElzUHVibGljKSAqb3V0SXNQdWJsaWMgPSBpc1B1YmxpYzsgLy8gPSB0cnVlCi0gICAgICAgIHJldHVybiBTdHJpbmcxNigpOwotICAgIH0KLQotICAgIC8vcHJpbnRmKCJZRVMhXG4iKTsKLSAgICAvL3ByaW50ZigibmFtZXNwYWNlOiAlc1xuIiwgU3RyaW5nOChTdHJpbmcxNihuYW1lc3BhY2VVcmksIG5hbWVzcGFjZVVyaS5zaXplKCktcHJlZml4U2l6ZSwgcHJlZml4U2l6ZSkpLnN0cmluZygpKTsKLSAgICBpZiAob3V0SXNQdWJsaWMpICpvdXRJc1B1YmxpYyA9IGlzUHVibGljOwotICAgIHJldHVybiBTdHJpbmcxNihuYW1lc3BhY2VVcmksIG5hbWVzcGFjZVVyaS5zaXplKCktcHJlZml4U2l6ZSwgcHJlZml4U2l6ZSk7Ci19Ci0KLXN0YXR1c190IGhhc1N1YnN0aXR1dGlvbkVycm9ycyhjb25zdCBjaGFyKiBmaWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNYTUxUcmVlKiBpblhtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiBzdHIxNikKLXsKLSAgICBjb25zdCBjaGFyMTZfdCogc3RyID0gc3RyMTYuc3RyaW5nKCk7Ci0gICAgY29uc3QgY2hhcjE2X3QqIHAgPSBzdHI7Ci0gICAgY29uc3QgY2hhcjE2X3QqIGVuZCA9IHN0ciArIHN0cjE2LnNpemUoKTsKLQotICAgIGJvb2wgbm9ucG9zaXRpb25hbCA9IGZhbHNlOwotICAgIGludCBhcmdDb3VudCA9IDA7Ci0KLSAgICB3aGlsZSAocCA8IGVuZCkgewotICAgICAgICAvKgotICAgICAgICAgKiBMb29rIGZvciB0aGUgc3RhcnQgb2YgYSBKYXZhLXN0eWxlIHN1YnN0aXR1dGlvbiBzZXF1ZW5jZS4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgqcCA9PSAnJScgJiYgcCArIDEgPCBlbmQpIHsKLSAgICAgICAgICAgIHArKzsKLQotICAgICAgICAgICAgLy8gQSBsaXRlcmFsIHBlcmNlbnQgc2lnbiByZXByZXNlbnRlZCBieSAlJQotICAgICAgICAgICAgaWYgKCpwID09ICclJykgewotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXJnQ291bnQrKzsKLQotICAgICAgICAgICAgaWYgKCpwID49ICcwJyAmJiAqcCA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICB9IHdoaWxlICgqcCA+PSAnMCcgJiYgKnAgPD0gJzknKTsKLSAgICAgICAgICAgICAgICBpZiAoKnAgIT0gJyQnKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIHNpemUgc3BlY2lmaWNhdGlvbiBpbnN0ZWFkIG9mIHBvc2l0aW9uLgotICAgICAgICAgICAgICAgICAgICBub25wb3NpdGlvbmFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCpwID09ICc8JykgewotICAgICAgICAgICAgICAgIC8vIFJldXNpbmcgbGFzdCBhcmd1bWVudDsgYmFkIGlkZWEgc2luY2UgaXQgY2FuIGJlIHJlLWFycmFuZ2VkLgotICAgICAgICAgICAgICAgIG5vbnBvc2l0aW9uYWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIHArKzsKLQotICAgICAgICAgICAgICAgIC8vIE9wdGlvbmFsbHkgJyQnIGNhbiBiZSBzcGVjaWZpZWQgYXQgdGhlIGVuZC4KLSAgICAgICAgICAgICAgICBpZiAocCA8IGVuZCAmJiAqcCA9PSAnJCcpIHsKLSAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbm9ucG9zaXRpb25hbCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElnbm9yZSBmbGFncyBhbmQgd2lkdGhzCi0gICAgICAgICAgICB3aGlsZSAocCA8IGVuZCAmJiAoKnAgPT0gJy0nIHx8Ci0gICAgICAgICAgICAgICAgICAgICpwID09ICcjJyB8fAotICAgICAgICAgICAgICAgICAgICAqcCA9PSAnKycgfHwKLSAgICAgICAgICAgICAgICAgICAgKnAgPT0gJyAnIHx8Ci0gICAgICAgICAgICAgICAgICAgICpwID09ICcsJyB8fAotICAgICAgICAgICAgICAgICAgICAqcCA9PSAnKCcgfHwKLSAgICAgICAgICAgICAgICAgICAgKCpwID49ICcwJyAmJiAqcCA8PSAnOScpKSkgewotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBkZXRlY3Qgc3RyaW5ncyB0aGF0IGFyZSBnb2luZyB0byBUaW1lLmZvcm1hdCgpCi0gICAgICAgICAgICAgKiBpbnN0ZWFkIG9mIFN0cmluZy5mb3JtYXQoKQotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIENvbXBhcmlzb24gb2YgU3RyaW5nLmZvcm1hdCgpIGFuZCBUaW1lLmZvcm1hdCgpIGFyZ3M6Ci0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogU3RyaW5nOiBBQkMgRSBHSCAgU1QgWCBhYmNkZWZnaCAgbm9zdCB4Ci0gICAgICAgICAgICAgKiAgIFRpbWU6ICAgIERFRkdIS01TIFcgWmEgIGQgICBoa20gIHMgdyB5egotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIFRoZXJlZm9yZSB3ZSBrbm93IGl0J3MgZGVmaW5pdGVseSBUaW1lIGlmIHdlIGhhdmU6Ci0gICAgICAgICAgICAgKiAgICAgREZLTVdaa213eXoKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHAgPCBlbmQpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCpwKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAnRCc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnRic6Ci0gICAgICAgICAgICAgICAgY2FzZSAnSyc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnTSc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnVyc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnWic6Ci0gICAgICAgICAgICAgICAgY2FzZSAnayc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnbSc6Ci0gICAgICAgICAgICAgICAgY2FzZSAndyc6Ci0gICAgICAgICAgICAgICAgY2FzZSAneSc6Ci0gICAgICAgICAgICAgICAgY2FzZSAneic6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwKys7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgc3Vic3RpdHV0aW9uIGluIHRoaXMgc3RyaW5nIGFuZCBhbnkgb2YgdGhlbQotICAgICAqIGFyZSBub3QgaW4gcG9zaXRpb25hbCBmb3JtLCBnaXZlIHRoZSB1c2VyIGFuIGVycm9yLgotICAgICAqLwotICAgIGlmIChhcmdDb3VudCA+IDEgJiYgbm9ucG9zaXRpb25hbCkgewotICAgICAgICBTb3VyY2VQb3MoU3RyaW5nOChmaWxlTmFtZSksIGluWG1sLT5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICJNdWx0aXBsZSBzdWJzdGl0dXRpb25zIHNwZWNpZmllZCBpbiBub24tcG9zaXRpb25hbCBmb3JtYXQ7ICIKLSAgICAgICAgICAgICAgICAiZGlkIHlvdSBtZWFuIHRvIGFkZCB0aGUgZm9ybWF0dGVkPVwiZmFsc2VcIiBhdHRyaWJ1dGU/XG4iKTsKLSAgICAgICAgcmV0dXJuIE5PVF9FTk9VR0hfREFUQTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IHBhcnNlU3R5bGVkU3RyaW5nKEJ1bmRsZSogYnVuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNYTUxUcmVlKiBpblhtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBlbmRUYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiogb3V0U3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+KiBvdXRTcGFucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNGb3JtYXR0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBzZXVkb2xvY2FsaXplKQotewotICAgIFZlY3RvcjxTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuPiBzcGFuU3RhY2s7Ci0gICAgU3RyaW5nMTYgY3VyU3RyaW5nOwotICAgIFN0cmluZzE2IHJhd1N0cmluZzsKLSAgICBjb25zdCBjaGFyKiBlcnJvck1zZzsKLSAgICBpbnQgeGxpZmZEZXB0aCA9IDA7Ci0gICAgYm9vbCBmaXJzdFRpbWUgPSB0cnVlOwotCi0gICAgc2l6ZV90IGxlbjsKLSAgICBSZXNYTUxUcmVlOjpldmVudF9jb2RlX3QgY29kZTsKLSAgICB3aGlsZSAoKGNvZGU9aW5YbWwtPm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0KLSAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6VEVYVCkgewotICAgICAgICAgICAgU3RyaW5nMTYgdGV4dChpblhtbC0+Z2V0VGV4dCgmbGVuKSk7Ci0gICAgICAgICAgICBpZiAoZmlyc3RUaW1lICYmIHRleHQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICh0ZXh0LnN0cmluZygpWzBdID09ICdAJykgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcmVzb3VyY2UgcmVmZXJlbmNlLCBkb24ndCBkbyB0aGUgcHNldWRvbG9jLgotICAgICAgICAgICAgICAgICAgICBwc2V1ZG9sb2NhbGl6ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4bGlmZkRlcHRoID09IDAgJiYgcHNldWRvbG9jYWxpemUpIHsKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBvcmlnKFN0cmluZzgodGV4dCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHBzZXVkbyA9IHBzZXVkb2xvY2FsaXplX3N0cmluZyhvcmlnKTsKLSAgICAgICAgICAgICAgICBjdXJTdHJpbmcuYXBwZW5kKFN0cmluZzE2KFN0cmluZzgocHNldWRvLmNfc3RyKCkpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChpc0Zvcm1hdHRlZCAmJiBoYXNTdWJzdGl0dXRpb25FcnJvcnMoZmlsZU5hbWUsIGluWG1sLCB0ZXh0KSAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjdXJTdHJpbmcuYXBwZW5kKHRleHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OlNUQVJUX1RBRykgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYgZWxlbWVudDE2KGluWG1sLT5nZXRFbGVtZW50TmFtZSgmbGVuKSk7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmc4IGVsZW1lbnQ4KGVsZW1lbnQxNik7Ci0KLSAgICAgICAgICAgIHNpemVfdCBuc2xlbjsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBucyA9IGluWG1sLT5nZXRFbGVtZW50TmFtZXNwYWNlKCZuc2xlbik7Ci0gICAgICAgICAgICBpZiAobnMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG5zID0gKGNvbnN0IHVpbnQxNl90KikiXDBcMCI7Ci0gICAgICAgICAgICAgICAgbnNsZW4gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uc3QgU3RyaW5nOCBuc3BhY2UoU3RyaW5nMTYobnMsIG5zbGVuKSk7Ci0gICAgICAgICAgICBpZiAobnNwYWNlID09IFhMSUZGX1hNTE5TKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50IE4gPSBzaXplb2YoQUxMT1dFRF9YTElGRl9FTEVNRU5UUykvc2l6ZW9mKEFMTE9XRURfWExJRkZfRUxFTUVOVFNbMF0pOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQ4ID09IEFMTE9XRURfWExJRkZfRUxFTUVOVFNbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHhsaWZmRGVwdGgrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSwgdHJlYXQgaXQgbGlrZSBpdCB3YXMganVzdCB0ZXh0LCBpbiBvdGhlciB3b3JkcywgZG8gbm90aGluZwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGVyZSBhbmQgc2lsZW50bHkgZHJvcCB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW92ZW9uOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKFN0cmluZzgoZmlsZU5hbWUpLCBpblhtbC0+Z2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm91bmQgdW5zdXBwb3J0ZWQgWExJRkYgdGFnIDwlcz5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDguc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgICAgICB9Ci1tb3Zlb246Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChvdXRTcGFucyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zKFN0cmluZzgoZmlsZU5hbWUpLCBpblhtbC0+Z2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJGb3VuZCBzdHlsZSB0YWcgPCVzPiB3aGVyZSBzdHlsZXMgYXJlIG5vdCBhbGxvd2VkXG4iLCBlbGVtZW50OC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghUmVzVGFibGU6OmNvbGxlY3RTdHJpbmcob3V0U3RyaW5nLCBjdXJTdHJpbmcuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clN0cmluZy5zaXplKCksIGZhbHNlLCAmZXJyb3JNc2csIHRydWUpKSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zKFN0cmluZzgoZmlsZU5hbWUpLCBpblhtbC0+Z2V0TGluZU51bWJlcigpKS5lcnJvcigiJXMgKGluICVzKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTXNnLCBTdHJpbmc4KGN1clN0cmluZykuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmF3U3RyaW5nLmFwcGVuZChjdXJTdHJpbmcpOwotICAgICAgICAgICAgY3VyU3RyaW5nID0gU3RyaW5nMTYoKTsKLQotICAgICAgICAgICAgU3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3BhbiBzcGFuOwotICAgICAgICAgICAgc3Bhbi5uYW1lID0gZWxlbWVudDE2OwotICAgICAgICAgICAgZm9yIChzaXplX3QgYWk9MDsgYWk8aW5YbWwtPmdldEF0dHJpYnV0ZUNvdW50KCk7IGFpKyspIHsKLSAgICAgICAgICAgICAgICBzcGFuLm5hbWUuYXBwZW5kKFN0cmluZzE2KCI7IikpOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBzdHIgPSBpblhtbC0+Z2V0QXR0cmlidXRlTmFtZShhaSwgJmxlbik7Ci0gICAgICAgICAgICAgICAgc3Bhbi5uYW1lLmFwcGVuZChzdHIsIGxlbik7Ci0gICAgICAgICAgICAgICAgc3Bhbi5uYW1lLmFwcGVuZChTdHJpbmcxNigiPSIpKTsKLSAgICAgICAgICAgICAgICBzdHIgPSBpblhtbC0+Z2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoYWksICZsZW4pOwotICAgICAgICAgICAgICAgIHNwYW4ubmFtZS5hcHBlbmQoc3RyLCBsZW4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy9wcmludGYoIlNwYW46ICVzXG4iLCBTdHJpbmc4KHNwYW4ubmFtZSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgc3Bhbi5zcGFuLmZpcnN0Q2hhciA9IHNwYW4uc3Bhbi5sYXN0Q2hhciA9IG91dFN0cmluZy0+c2l6ZSgpOwotICAgICAgICAgICAgc3BhblN0YWNrLnB1c2goc3Bhbik7Ci0KLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgIHNpemVfdCBuc2xlbjsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBucyA9IGluWG1sLT5nZXRFbGVtZW50TmFtZXNwYWNlKCZuc2xlbik7Ci0gICAgICAgICAgICBpZiAobnMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG5zID0gKGNvbnN0IHVpbnQxNl90KikiXDBcMCI7Ci0gICAgICAgICAgICAgICAgbnNsZW4gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uc3QgU3RyaW5nOCBuc3BhY2UoU3RyaW5nMTYobnMsIG5zbGVuKSk7Ci0gICAgICAgICAgICBpZiAobnNwYWNlID09IFhMSUZGX1hNTE5TKSB7Ci0gICAgICAgICAgICAgICAgeGxpZmZEZXB0aC0tOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFSZXNUYWJsZTo6Y29sbGVjdFN0cmluZyhvdXRTdHJpbmcsIGN1clN0cmluZy5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyU3RyaW5nLnNpemUoKSwgZmFsc2UsICZlcnJvck1zZywgdHJ1ZSkpIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3MoU3RyaW5nOChmaWxlTmFtZSksIGluWG1sLT5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKCIlcyAoaW4gJXMpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNc2csIFN0cmluZzgoY3VyU3RyaW5nKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByYXdTdHJpbmcuYXBwZW5kKGN1clN0cmluZyk7Ci0gICAgICAgICAgICBjdXJTdHJpbmcgPSBTdHJpbmcxNigpOwotCi0gICAgICAgICAgICBpZiAoc3BhblN0YWNrLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGluWG1sLT5nZXRFbGVtZW50TmFtZSgmbGVuKSwgZW5kVGFnLnN0cmluZygpKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhTdHJpbmc4KGZpbGVOYW1lKSwgaW5YbWwtPmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZvdW5kIHRhZyAlcyB3aGVyZSA8JXM+IGNsb3NlIGlzIGV4cGVjdGVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoaW5YbWwtPmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGVuZFRhZykuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuIHNwYW4gPSBzcGFuU3RhY2sudG9wKCk7Ci0gICAgICAgICAgICBTdHJpbmcxNiBzcGFuVGFnOwotICAgICAgICAgICAgc3NpemVfdCBzZW1pID0gc3Bhbi5uYW1lLmZpbmRGaXJzdCgnOycpOwotICAgICAgICAgICAgaWYgKHNlbWkgPj0gMCkgewotICAgICAgICAgICAgICAgIHNwYW5UYWcuc2V0VG8oc3Bhbi5uYW1lLnN0cmluZygpLCBzZW1pKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3BhblRhZy5zZXRUbyhzcGFuLm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGluWG1sLT5nZXRFbGVtZW50TmFtZSgmbGVuKSwgc3BhblRhZy5zdHJpbmcoKSkgIT0gMCkgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhTdHJpbmc4KGZpbGVOYW1lKSwgaW5YbWwtPmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiRm91bmQgY2xvc2UgdGFnICVzIHdoZXJlIGNsb3NlIHRhZyAlcyBpcyBleHBlY3RlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoaW5YbWwtPmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoc3BhblRhZykuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYm9vbCBlbXB0eSA9IHRydWU7Ci0gICAgICAgICAgICBpZiAob3V0U3RyaW5nLT5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgc3Bhbi5zcGFuLmxhc3RDaGFyID0gb3V0U3RyaW5nLT5zaXplKCktMTsKLSAgICAgICAgICAgICAgICBpZiAoc3Bhbi5zcGFuLmxhc3RDaGFyID49IHNwYW4uc3Bhbi5maXJzdENoYXIpIHsKLSAgICAgICAgICAgICAgICAgICAgZW1wdHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgb3V0U3BhbnMtPmFkZChzcGFuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzcGFuU3RhY2sucG9wKCk7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGlzIHdhcm5pbmcgc2VlbXMgdG8gYmUganVzdCBhbiBpcnJpdGF0aW9uIHRvIG1vc3QgcGVvcGxlLAotICAgICAgICAgICAgICogc2luY2UgaXQgaXMgdHlwaWNhbGx5IGludHJvZHVjZWQgYnkgdHJhbnNsYXRvcnMgd2hvIHRoZW4gbmV2ZXIKLSAgICAgICAgICAgICAqIHNlZSB0aGUgd2FybmluZy4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKDAgJiYgZW1wdHkpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiB3YXJuaW5nOiBlbXB0eSAnJXMnIHNwYW4gZm91bmQgaW4gdGV4dCAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUsIGluWG1sLT5nZXRMaW5lTnVtYmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHNwYW5UYWcpLnN0cmluZygpLCBTdHJpbmc4KCpvdXRTdHJpbmcpLnN0cmluZygpKTsKLQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6U1RBUlRfTkFNRVNQQUNFKSB7Ci0gICAgICAgICAgICAvLyBub3RoaW5nCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgICAgIFNvdXJjZVBvcyhTdHJpbmc4KGZpbGVOYW1lKSwgaW5YbWwtPmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJFcnJvciBwYXJzaW5nIFhNTFxuIik7Ci0gICAgfQotCi0gICAgaWYgKG91dFNwYW5zICE9IE5VTEwgJiYgb3V0U3BhbnMtPnNpemUoKSA+IDApIHsKLSAgICAgICAgaWYgKGN1clN0cmluZy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoIVJlc1RhYmxlOjpjb2xsZWN0U3RyaW5nKG91dFN0cmluZywgY3VyU3RyaW5nLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJTdHJpbmcuc2l6ZSgpLCBmYWxzZSwgJmVycm9yTXNnLCB0cnVlKSkgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhTdHJpbmc4KGZpbGVOYW1lKSwgaW5YbWwtPmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXMgKGluICVzKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTXNnLCBTdHJpbmc4KGN1clN0cmluZykuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gc3R5bGUgaW5mb3JtYXRpb24sIHNvIHN0cmluZyBwcm9jZXNzaW5nIHdpbGwgaGFwcGVuCi0gICAgICAgIC8vIGxhdGVyIGFzIHBhcnQgb2YgdGhlIG92ZXJhbGwgdHlwZSBjb252ZXJzaW9uLiAgUmV0dXJuIHRvIHRoZQotICAgICAgICAvLyBjbGllbnQgdGhlIHJhdyB1bnByb2Nlc3NlZCB0ZXh0LgotICAgICAgICByYXdTdHJpbmcuYXBwZW5kKGN1clN0cmluZyk7Ci0gICAgICAgIG91dFN0cmluZy0+c2V0VG8ocmF3U3RyaW5nKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0cnVjdCBuYW1lc3BhY2VfZW50cnkgewotICAgIFN0cmluZzggcHJlZml4OwotICAgIFN0cmluZzggdXJpOwotfTsKLQotc3RhdGljIFN0cmluZzggbWFrZV9wcmVmaXgoaW50IGRlcHRoKQotewotICAgIFN0cmluZzggcHJlZml4OwotICAgIGludCBpOwotICAgIGZvciAoaT0wOyBpPGRlcHRoOyBpKyspIHsKLSAgICAgICAgcHJlZml4LmFwcGVuZCgiICAiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHByZWZpeDsKLX0KLQotc3RhdGljIFN0cmluZzggYnVpbGRfbmFtZXNwYWNlKGNvbnN0IFZlY3RvcjxuYW1lc3BhY2VfZW50cnk+JiBuYW1lc3BhY2VzLAotICAgICAgICBjb25zdCB1aW50MTZfdCogbnMpCi17Ci0gICAgU3RyaW5nOCBzdHI7Ci0gICAgaWYgKG5zICE9IE5VTEwpIHsKLSAgICAgICAgc3RyID0gU3RyaW5nOChucyk7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gbmFtZXNwYWNlcy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZV9lbnRyeSYgbmUgPSBuYW1lc3BhY2VzLml0ZW1BdChpKTsKLSAgICAgICAgICAgIGlmIChuZS51cmkgPT0gc3RyKSB7Ci0gICAgICAgICAgICAgICAgc3RyID0gbmUucHJlZml4OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN0ci5hcHBlbmQoIjoiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0cjsKLX0KLQotdm9pZCBwcmludFhNTEJsb2NrKFJlc1hNTFRyZWUqIGJsb2NrKQotewotICAgIGJsb2NrLT5yZXN0YXJ0KCk7Ci0KLSAgICBWZWN0b3I8bmFtZXNwYWNlX2VudHJ5PiBuYW1lc3BhY2VzOwotICAgIAotICAgIFJlc1hNTFRyZWU6OmV2ZW50X2NvZGVfdCBjb2RlOwotICAgIGludCBkZXB0aCA9IDA7Ci0gICAgd2hpbGUgKChjb2RlPWJsb2NrLT5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICBTdHJpbmc4IHByZWZpeCA9IG1ha2VfcHJlZml4KGRlcHRoKTsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OlNUQVJUX1RBRykgewotICAgICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBuczE2ID0gYmxvY2stPmdldEVsZW1lbnROYW1lc3BhY2UoJmxlbik7Ci0gICAgICAgICAgICBTdHJpbmc4IGVsZW1OcyA9IGJ1aWxkX25hbWVzcGFjZShuYW1lc3BhY2VzLCBuczE2KTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBjb20xNiA9IGJsb2NrLT5nZXRDb21tZW50KCZsZW4pOwotICAgICAgICAgICAgaWYgKGNvbTE2KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlcyA8IS0tICVzIC0tPlxuIiwgcHJlZml4LnN0cmluZygpLCBTdHJpbmc4KGNvbTE2KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIiVzRTogJXMlcyAobGluZT0lZClcbiIsIHByZWZpeC5zdHJpbmcoKSwgZWxlbU5zLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2stPmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICBibG9jay0+Z2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgICAgIGludCBOID0gYmxvY2stPmdldEF0dHJpYnV0ZUNvdW50KCk7Ci0gICAgICAgICAgICBkZXB0aCsrOwotICAgICAgICAgICAgcHJlZml4ID0gbWFrZV9wcmVmaXgoZGVwdGgpOwotICAgICAgICAgICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdWludDMyX3QgcmVzID0gYmxvY2stPmdldEF0dHJpYnV0ZU5hbWVSZXNJRChpKTsKLSAgICAgICAgICAgICAgICBuczE2ID0gYmxvY2stPmdldEF0dHJpYnV0ZU5hbWVzcGFjZShpLCAmbGVuKTsKLSAgICAgICAgICAgICAgICBTdHJpbmc4IG5zID0gYnVpbGRfbmFtZXNwYWNlKG5hbWVzcGFjZXMsIG5zMTYpOwotICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZShibG9jay0+Z2V0QXR0cmlidXRlTmFtZShpLCAmbGVuKSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlc0E6ICIsIHByZWZpeC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzJXMoMHglMDh4KSIsIG5zLnN0cmluZygpLCBuYW1lLnN0cmluZygpLCByZXMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMlcyIsIG5zLnN0cmluZygpLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgICAgICAgICAgICAgIGJsb2NrLT5nZXRBdHRyaWJ1dGVWYWx1ZShpLCAmdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj0obnVsbCkiKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9SRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI9QDB4JXgiLCAoaW50KXZhbHVlLmRhdGEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX0FUVFJJQlVURSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj0/MHgleCIsIChpbnQpdmFsdWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfU1RSSU5HKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiPVwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGU6Om5vcm1hbGl6ZUZvck91dHB1dChTdHJpbmc4KGJsb2NrLT5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4pKS5zdHJpbmcoKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiPSh0eXBlIDB4JXgpMHgleCIsIChpbnQpdmFsdWUuZGF0YVR5cGUsIChpbnQpdmFsdWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiB2YWwgPSBibG9jay0+Z2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaSwgJmxlbik7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiIChSYXc6IFwiJXNcIikiLCBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KFN0cmluZzgodmFsKS5zdHJpbmcoKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICBkZXB0aC0tOwotICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6U1RBUlRfTkFNRVNQQUNFKSB7Ci0gICAgICAgICAgICBuYW1lc3BhY2VfZW50cnkgbnM7Ci0gICAgICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIHByZWZpeDE2ID0gYmxvY2stPmdldE5hbWVzcGFjZVByZWZpeCgmbGVuKTsKLSAgICAgICAgICAgIGlmIChwcmVmaXgxNikgewotICAgICAgICAgICAgICAgIG5zLnByZWZpeCA9IFN0cmluZzgocHJlZml4MTYpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBucy5wcmVmaXggPSAiPERFRj4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbnMudXJpID0gU3RyaW5nOChibG9jay0+Z2V0TmFtZXNwYWNlVXJpKCZsZW4pKTsKLSAgICAgICAgICAgIG5hbWVzcGFjZXMucHVzaChucyk7Ci0gICAgICAgICAgICBwcmludGYoIiVzTjogJXM9JXNcbiIsIHByZWZpeC5zdHJpbmcoKSwgbnMucHJlZml4LnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBucy51cmkuc3RyaW5nKCkpOwotICAgICAgICAgICAgZGVwdGgrKzsKLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9OQU1FU1BBQ0UpIHsKLSAgICAgICAgICAgIGRlcHRoLS07Ci0gICAgICAgICAgICBjb25zdCBuYW1lc3BhY2VfZW50cnkmIG5zID0gbmFtZXNwYWNlcy50b3AoKTsKLSAgICAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgICAgICBjb25zdCB1aW50MTZfdCogcHJlZml4MTYgPSBibG9jay0+Z2V0TmFtZXNwYWNlUHJlZml4KCZsZW4pOwotICAgICAgICAgICAgU3RyaW5nOCBwcjsKLSAgICAgICAgICAgIGlmIChwcmVmaXgxNikgewotICAgICAgICAgICAgICAgIHByID0gU3RyaW5nOChwcmVmaXgxNik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByID0gIjxERUY+IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChucy5wcmVmaXggIT0gcHIpIHsKLSAgICAgICAgICAgICAgICBwcmVmaXggPSBtYWtlX3ByZWZpeChkZXB0aCk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlcyoqKiBCQUQgRU5EIE5TIFBSRUZJWDogZm91bmQ9JXMsIGV4cGVjdGVkPSVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LnN0cmluZygpLCBwci5zdHJpbmcoKSwgbnMucHJlZml4LnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZzggdXJpID0gU3RyaW5nOChibG9jay0+Z2V0TmFtZXNwYWNlVXJpKCZsZW4pKTsKLSAgICAgICAgICAgIGlmIChucy51cmkgIT0gdXJpKSB7Ci0gICAgICAgICAgICAgICAgcHJlZml4ID0gbWFrZV9wcmVmaXgoZGVwdGgpOwotICAgICAgICAgICAgICAgIHByaW50ZigiJXMgKioqIEJBRCBFTkQgTlMgVVJJOiBmb3VuZD0lcywgZXhwZWN0ZWQ9JXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXguc3RyaW5nKCksIHVyaS5zdHJpbmcoKSwgbnMudXJpLnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5hbWVzcGFjZXMucG9wKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpURVhUKSB7Ci0gICAgICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICAgICAgcHJpbnRmKCIlc0M6IFwiJXNcIlxuIiwgcHJlZml4LnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KFN0cmluZzgoYmxvY2stPmdldFRleHQoJmxlbikpLnN0cmluZygpKS5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBibG9jay0+cmVzdGFydCgpOwotfQotCi1zdGF0dXNfdCBwYXJzZVhNTFJlc291cmNlKGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSwgUmVzWE1MVHJlZSogb3V0VHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdHJpcEFsbCwgYm9vbCBrZWVwQ29tbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBjRGF0YVRhZ3MpCi17Ci0gICAgc3A8WE1MTm9kZT4gcm9vdCA9IFhNTE5vZGU6OnBhcnNlKGZpbGUpOwotICAgIGlmIChyb290ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIHJvb3QtPnJlbW92ZVdoaXRlc3BhY2Uoc3RyaXBBbGwsIGNEYXRhVGFncyk7Ci0KLSAgICBOT0lTWShwcmludGYoIklucHV0IFhNTCBmcm9tICVzOlxuIiwgKGNvbnN0IGNoYXIqKWZpbGUtPmdldFByaW50YWJsZVNvdXJjZSgpKSk7Ci0gICAgTk9JU1kocm9vdC0+cHJpbnQoKSk7Ci0gICAgc3A8QWFwdEZpbGU+IHJzYyA9IG5ldyBBYXB0RmlsZShTdHJpbmc4KCksIEFhcHRHcm91cEVudHJ5KCksIFN0cmluZzgoKSk7Ci0gICAgc3RhdHVzX3QgZXJyID0gcm9vdC0+ZmxhdHRlbihyc2MsICFrZWVwQ29tbWVudHMsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIGVyciA9IG91dFRyZWUtPnNldFRvKHJzYy0+Z2V0RGF0YSgpLCByc2MtPmdldFNpemUoKSwgdHJ1ZSk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIE5PSVNZKHByaW50ZigiT3V0cHV0IFhNTDpcbiIpKTsKLSAgICBOT0lTWShwcmludFhNTEJsb2NrKG91dFRyZWUpKTsKLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3A8WE1MTm9kZT4gWE1MTm9kZTo6cGFyc2UoY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlKQotewotICAgIGNoYXIgYnVmWzE2Mzg0XTsKLSAgICBpbnQgZmQgPSBvcGVuKGZpbGUtPmdldFNvdXJjZUZpbGUoKS5zdHJpbmcoKSwgT19SRE9OTFkgfCBPX0JJTkFSWSk7Ci0gICAgaWYgKGZkIDwgMCkgewotICAgICAgICBTb3VyY2VQb3MoZmlsZS0+Z2V0U291cmNlRmlsZSgpLCAtMSkuZXJyb3IoIlVuYWJsZSB0byBvcGVuIGZpbGUgZm9yIHJlYWQ6ICVzIiwKLSAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBYTUxfUGFyc2VyIHBhcnNlciA9IFhNTF9QYXJzZXJDcmVhdGVOUyhOVUxMLCAxKTsKLSAgICBQYXJzZVN0YXRlIHN0YXRlOwotICAgIHN0YXRlLmZpbGVuYW1lID0gZmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCk7Ci0gICAgc3RhdGUucGFyc2VyID0gcGFyc2VyOwotICAgIFhNTF9TZXRVc2VyRGF0YShwYXJzZXIsICZzdGF0ZSk7Ci0gICAgWE1MX1NldEVsZW1lbnRIYW5kbGVyKHBhcnNlciwgc3RhcnRFbGVtZW50LCBlbmRFbGVtZW50KTsKLSAgICBYTUxfU2V0TmFtZXNwYWNlRGVjbEhhbmRsZXIocGFyc2VyLCBzdGFydE5hbWVzcGFjZSwgZW5kTmFtZXNwYWNlKTsKLSAgICBYTUxfU2V0Q2hhcmFjdGVyRGF0YUhhbmRsZXIocGFyc2VyLCBjaGFyYWN0ZXJEYXRhKTsKLSAgICBYTUxfU2V0Q29tbWVudEhhbmRsZXIocGFyc2VyLCBjb21tZW50RGF0YSk7Ci0KLSAgICBzc2l6ZV90IGxlbjsKLSAgICBib29sIGRvbmU7Ci0gICAgZG8gewotICAgICAgICBsZW4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKTsKLSAgICAgICAgZG9uZSA9IGxlbiA8IChzc2l6ZV90KXNpemVvZihidWYpOwotICAgICAgICBpZiAobGVuIDwgMCkgewotICAgICAgICAgICAgU291cmNlUG9zKGZpbGUtPmdldFNvdXJjZUZpbGUoKSwgLTEpLmVycm9yKCJFcnJvciByZWFkaW5nIGZpbGU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFhNTF9QYXJzZShwYXJzZXIsIGJ1ZiwgbGVuLCBkb25lKSA9PSBYTUxfU1RBVFVTX0VSUk9SKSB7Ci0gICAgICAgICAgICBTb3VyY2VQb3MoZmlsZS0+Z2V0U291cmNlRmlsZSgpLCAoaW50KVhNTF9HZXRDdXJyZW50TGluZU51bWJlcihwYXJzZXIpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkVycm9yIHBhcnNpbmcgWE1MOiAlc1xuIiwgWE1MX0Vycm9yU3RyaW5nKFhNTF9HZXRFcnJvckNvZGUocGFyc2VyKSkpOwotICAgICAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICghZG9uZSk7Ci0KLSAgICBYTUxfUGFyc2VyRnJlZShwYXJzZXIpOwotICAgIGlmIChzdGF0ZS5yb290ID09IE5VTEwpIHsKLSAgICAgICAgU291cmNlUG9zKGZpbGUtPmdldFNvdXJjZUZpbGUoKSwgLTEpLmVycm9yKCJObyBYTUwgZGF0YSBnZW5lcmF0ZWQgd2hlbiBwYXJzaW5nIik7Ci0gICAgfQotICAgIGNsb3NlKGZkKTsKLSAgICByZXR1cm4gc3RhdGUucm9vdDsKLX0KLQotWE1MTm9kZTo6WE1MTm9kZShjb25zdCBTdHJpbmc4JiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nMTYmIHMxLCBjb25zdCBTdHJpbmcxNiYgczIsIGJvb2wgaXNOYW1lc3BhY2UpCi0gICAgOiBtTmV4dEF0dHJpYnV0ZUluZGV4KDB4ODAwMDAwMDApCi0gICAgLCBtRmlsZW5hbWUoZmlsZW5hbWUpCi0gICAgLCBtU3RhcnRMaW5lTnVtYmVyKDApCi0gICAgLCBtRW5kTGluZU51bWJlcigwKQotICAgICwgbVVURjgoZmFsc2UpCi17Ci0gICAgaWYgKGlzTmFtZXNwYWNlKSB7Ci0gICAgICAgIG1OYW1lc3BhY2VQcmVmaXggPSBzMTsKLSAgICAgICAgbU5hbWVzcGFjZVVyaSA9IHMyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1OYW1lc3BhY2VVcmkgPSBzMTsKLSAgICAgICAgbUVsZW1lbnROYW1lID0gczI7Ci0gICAgfQotfQotCi1YTUxOb2RlOjpYTUxOb2RlKGNvbnN0IFN0cmluZzgmIGZpbGVuYW1lKQotICAgIDogbUZpbGVuYW1lKGZpbGVuYW1lKQotewotICAgIG1lbXNldCgmbUNoYXJzVmFsdWUsIDAsIHNpemVvZihtQ2hhcnNWYWx1ZSkpOwotfQotCi1YTUxOb2RlOjp0eXBlIFhNTE5vZGU6OmdldFR5cGUoKSBjb25zdAotewotICAgIGlmIChtRWxlbWVudE5hbWUuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgcmV0dXJuIFRZUEVfRUxFTUVOVDsKLSAgICB9Ci0gICAgaWYgKG1OYW1lc3BhY2VVcmkuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgcmV0dXJuIFRZUEVfTkFNRVNQQUNFOwotICAgIH0KLSAgICByZXR1cm4gVFlQRV9DREFUQTsKLX0KLQotY29uc3QgU3RyaW5nMTYmIFhNTE5vZGU6OmdldE5hbWVzcGFjZVByZWZpeCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1OYW1lc3BhY2VQcmVmaXg7Ci19Ci0KLWNvbnN0IFN0cmluZzE2JiBYTUxOb2RlOjpnZXROYW1lc3BhY2VVcmkoKSBjb25zdAotewotICAgIHJldHVybiBtTmFtZXNwYWNlVXJpOwotfQotCi1jb25zdCBTdHJpbmcxNiYgWE1MTm9kZTo6Z2V0RWxlbWVudE5hbWVzcGFjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1OYW1lc3BhY2VVcmk7Ci19Ci0KLWNvbnN0IFN0cmluZzE2JiBYTUxOb2RlOjpnZXRFbGVtZW50TmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1FbGVtZW50TmFtZTsKLX0KLQotY29uc3QgVmVjdG9yPHNwPFhNTE5vZGU+ID4mIFhNTE5vZGU6OmdldENoaWxkcmVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUNoaWxkcmVuOwotfQotCi1jb25zdCBTdHJpbmc4JiBYTUxOb2RlOjpnZXRGaWxlbmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1GaWxlbmFtZTsKLX0KLSAgICAKLWNvbnN0IFZlY3RvcjxYTUxOb2RlOjphdHRyaWJ1dGVfZW50cnk+JgotICAgIFhNTE5vZGU6OmdldEF0dHJpYnV0ZXMoKSBjb25zdAotewotICAgIHJldHVybiBtQXR0cmlidXRlczsKLX0KLQotY29uc3QgWE1MTm9kZTo6YXR0cmlidXRlX2VudHJ5KiBYTUxOb2RlOjpnZXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nMTYmIG5zLAotICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8bUF0dHJpYnV0ZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgYXR0cmlidXRlX2VudHJ5JiBhZShtQXR0cmlidXRlcy5pdGVtQXQoaSkpOwotICAgICAgICBpZiAoYWUubnMgPT0gbnMgJiYgYWUubmFtZSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gJmFlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBOVUxMOwotfQotCi1YTUxOb2RlOjphdHRyaWJ1dGVfZW50cnkqIFhNTE5vZGU6OmVkaXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nMTYmIG5zLAotICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSkKLXsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8bUF0dHJpYnV0ZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgYXR0cmlidXRlX2VudHJ5ICogYWUgPSAmbUF0dHJpYnV0ZXMuZWRpdEl0ZW1BdChpKTsKLSAgICAgICAgaWYgKGFlLT5ucyA9PSBucyAmJiBhZS0+bmFtZSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gYWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotY29uc3QgU3RyaW5nMTYmIFhNTE5vZGU6OmdldENEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUNoYXJzOwotfQotCi1jb25zdCBTdHJpbmcxNiYgWE1MTm9kZTo6Z2V0Q29tbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Db21tZW50OwotfQotCi1pbnQzMl90IFhNTE5vZGU6OmdldFN0YXJ0TGluZU51bWJlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGFydExpbmVOdW1iZXI7Ci19Ci0KLWludDMyX3QgWE1MTm9kZTo6Z2V0RW5kTGluZU51bWJlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1FbmRMaW5lTnVtYmVyOwotfQotCi1zcDxYTUxOb2RlPiBYTUxOb2RlOjpzZWFyY2hFbGVtZW50KGNvbnN0IFN0cmluZzE2JiB0YWdOYW1lc3BhY2UsIGNvbnN0IFN0cmluZzE2JiB0YWdOYW1lKQotewotICAgIGlmIChnZXRUeXBlKCkgPT0gWE1MTm9kZTo6VFlQRV9FTEVNRU5UCi0gICAgICAgICAgICAmJiBtTmFtZXNwYWNlVXJpID09IHRhZ05hbWVzcGFjZQotICAgICAgICAgICAgJiYgbUVsZW1lbnROYW1lID09IHRhZ05hbWUpIHsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICAgIAotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxtQ2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgc3A8WE1MTm9kZT4gZm91bmQgPSBtQ2hpbGRyZW4uaXRlbUF0KGkpLT5zZWFyY2hFbGVtZW50KHRhZ05hbWVzcGFjZSwgdGFnTmFtZSk7Ci0gICAgICAgIGlmIChmb3VuZCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXNwPFhNTE5vZGU+IFhNTE5vZGU6OmdldENoaWxkRWxlbWVudChjb25zdCBTdHJpbmcxNiYgdGFnTmFtZXNwYWNlLCBjb25zdCBTdHJpbmcxNiYgdGFnTmFtZSkKLXsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8bUNoaWxkcmVuLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHNwPFhNTE5vZGU+IGNoaWxkID0gbUNoaWxkcmVuLml0ZW1BdChpKTsKLSAgICAgICAgaWYgKGNoaWxkLT5nZXRUeXBlKCkgPT0gWE1MTm9kZTo6VFlQRV9FTEVNRU5UCi0gICAgICAgICAgICAgICAgJiYgY2hpbGQtPm1OYW1lc3BhY2VVcmkgPT0gdGFnTmFtZXNwYWNlCi0gICAgICAgICAgICAgICAgJiYgY2hpbGQtPm1FbGVtZW50TmFtZSA9PSB0YWdOYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXR1c190IFhNTE5vZGU6OmFkZENoaWxkKGNvbnN0IHNwPFhNTE5vZGU+JiBjaGlsZCkKLXsKLSAgICBpZiAoZ2V0VHlwZSgpID09IFRZUEVfQ0RBVEEpIHsKLSAgICAgICAgU291cmNlUG9zKG1GaWxlbmFtZSwgY2hpbGQtPmdldFN0YXJ0TGluZU51bWJlcigpKS5lcnJvcigiQ2hpbGQgdG8gQ0RBVEEgbm9kZS4iKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIC8vcHJpbnRmKCJBZGRpbmcgY2hpbGQgJXAgdG8gcGFyZW50ICVwXG4iLCBjaGlsZC5nZXQoKSwgdGhpcyk7Ci0gICAgbUNoaWxkcmVuLmFkZChjaGlsZCk7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBYTUxOb2RlOjppbnNlcnRDaGlsZEF0KGNvbnN0IHNwPFhNTE5vZGU+JiBjaGlsZCwgc2l6ZV90IGluZGV4KQotewotICAgIGlmIChnZXRUeXBlKCkgPT0gVFlQRV9DREFUQSkgewotICAgICAgICBTb3VyY2VQb3MobUZpbGVuYW1lLCBjaGlsZC0+Z2V0U3RhcnRMaW5lTnVtYmVyKCkpLmVycm9yKCJDaGlsZCB0byBDREFUQSBub2RlLiIpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgLy9wcmludGYoIkFkZGluZyBjaGlsZCAlcCB0byBwYXJlbnQgJXBcbiIsIGNoaWxkLmdldCgpLCB0aGlzKTsKLSAgICBtQ2hpbGRyZW4uaW5zZXJ0QXQoY2hpbGQsIGluZGV4KTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFhNTE5vZGU6OmFkZEF0dHJpYnV0ZShjb25zdCBTdHJpbmcxNiYgbnMsIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB2YWx1ZSkKLXsKLSAgICBpZiAoZ2V0VHlwZSgpID09IFRZUEVfQ0RBVEEpIHsKLSAgICAgICAgU291cmNlUG9zKG1GaWxlbmFtZSwgZ2V0U3RhcnRMaW5lTnVtYmVyKCkpLmVycm9yKCJDaGlsZCB0byBDREFUQSBub2RlLiIpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAobnMgIT0gUkVTT1VSQ0VTX1RPT0xTX05BTUVTUEFDRSkgewotICAgICAgICBhdHRyaWJ1dGVfZW50cnkgZTsKLSAgICAgICAgZS5pbmRleCA9IG1OZXh0QXR0cmlidXRlSW5kZXgrKzsKLSAgICAgICAgZS5ucyA9IG5zOwotICAgICAgICBlLm5hbWUgPSBuYW1lOwotICAgICAgICBlLnN0cmluZyA9IHZhbHVlOwotICAgICAgICBtQXR0cmlidXRlcy5hZGQoZSk7Ci0gICAgICAgIG1BdHRyaWJ1dGVPcmRlci5hZGQoZS5pbmRleCwgbUF0dHJpYnV0ZXMuc2l6ZSgpLTEpOwotICAgIH0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXZvaWQgWE1MTm9kZTo6c2V0QXR0cmlidXRlUmVzSUQoc2l6ZV90IGF0dHJJZHgsIHVpbnQzMl90IHJlc0lkKQotewotICAgIGF0dHJpYnV0ZV9lbnRyeSYgZSA9IG1BdHRyaWJ1dGVzLmVkaXRJdGVtQXQoYXR0cklkeCk7Ci0gICAgaWYgKGUubmFtZVJlc0lkKSB7Ci0gICAgICAgIG1BdHRyaWJ1dGVPcmRlci5yZW1vdmVJdGVtKGUubmFtZVJlc0lkKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtQXR0cmlidXRlT3JkZXIucmVtb3ZlSXRlbShlLmluZGV4KTsKLSAgICB9Ci0gICAgTk9JU1kocHJpbnRmKCJFbGVtICVzICVzPVwiJXNcIjogc2V0IHJlcyBpZCA9IDB4JTA4eFxuIiwKLSAgICAgICAgICAgIFN0cmluZzgoZ2V0RWxlbWVudE5hbWUoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICBTdHJpbmc4KG1BdHRyaWJ1dGVzLml0ZW1BdChhdHRySWR4KS5uYW1lKS5zdHJpbmcoKSwKLSAgICAgICAgICAgIFN0cmluZzgobUF0dHJpYnV0ZXMuaXRlbUF0KGF0dHJJZHgpLnN0cmluZykuc3RyaW5nKCksCi0gICAgICAgICAgICByZXNJZCkpOwotICAgIG1BdHRyaWJ1dGVzLmVkaXRJdGVtQXQoYXR0cklkeCkubmFtZVJlc0lkID0gcmVzSWQ7Ci0gICAgbUF0dHJpYnV0ZU9yZGVyLmFkZChyZXNJZCwgYXR0cklkeCk7Ci19Ci0KLXN0YXR1c190IFhNTE5vZGU6OmFwcGVuZENoYXJzKGNvbnN0IFN0cmluZzE2JiBjaGFycykKLXsKLSAgICBpZiAoZ2V0VHlwZSgpICE9IFRZUEVfQ0RBVEEpIHsKLSAgICAgICAgU291cmNlUG9zKG1GaWxlbmFtZSwgZ2V0U3RhcnRMaW5lTnVtYmVyKCkpLmVycm9yKCJBZGRpbmcgY2hhcmFjdGVycyB0byBlbGVtZW50IG5vZGUuIik7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICBtQ2hhcnMuYXBwZW5kKGNoYXJzKTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFhNTE5vZGU6OmFwcGVuZENvbW1lbnQoY29uc3QgU3RyaW5nMTYmIGNvbW1lbnQpCi17Ci0gICAgaWYgKG1Db21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgbUNvbW1lbnQuYXBwZW5kKFN0cmluZzE2KCJcbiIpKTsKLSAgICB9Ci0gICAgbUNvbW1lbnQuYXBwZW5kKGNvbW1lbnQpOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotdm9pZCBYTUxOb2RlOjpzZXRTdGFydExpbmVOdW1iZXIoaW50MzJfdCBsaW5lKQotewotICAgIG1TdGFydExpbmVOdW1iZXIgPSBsaW5lOwotfQotCi12b2lkIFhNTE5vZGU6OnNldEVuZExpbmVOdW1iZXIoaW50MzJfdCBsaW5lKQotewotICAgIG1FbmRMaW5lTnVtYmVyID0gbGluZTsKLX0KLQotdm9pZCBYTUxOb2RlOjpyZW1vdmVXaGl0ZXNwYWNlKGJvb2wgc3RyaXBBbGwsIGNvbnN0IGNoYXIqKiBjRGF0YVRhZ3MpCi17Ci0gICAgLy9wcmludGYoIlJlbW92aW5nIHdoaXRlc3BhY2UgaW4gJXNcbiIsIFN0cmluZzgobUVsZW1lbnROYW1lKS5zdHJpbmcoKSk7Ci0gICAgc2l6ZV90IE4gPSBtQ2hpbGRyZW4uc2l6ZSgpOwotICAgIGlmIChjRGF0YVRhZ3MpIHsKLSAgICAgICAgU3RyaW5nOCB0YWcobUVsZW1lbnROYW1lKTsKLSAgICAgICAgY29uc3QgY2hhcioqIHAgPSBjRGF0YVRhZ3M7Ci0gICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAgICAgaWYgKHRhZyA9PSAqcCkgewotICAgICAgICAgICAgICAgIHN0cmlwQWxsID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBzcDxYTUxOb2RlPiBub2RlID0gbUNoaWxkcmVuLml0ZW1BdChpKTsKLSAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKSA9PSBUWVBFX0NEQVRBKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgQ0RBVEEgbm9kZS4uLgotICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHAgPSBub2RlLT5tQ2hhcnMuc3RyaW5nKCk7Ci0gICAgICAgICAgICB3aGlsZSAoKnAgIT0gMCAmJiAqcCA8IDEyOCAmJiBpc3NwYWNlKCpwKSkgewotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vcHJpbnRmKCJTcGFjZSBlbmRzIGF0ICVkIGluIFwiJXNcIlxuIiwKLSAgICAgICAgICAgIC8vICAgICAgIChpbnQpKHAtbm9kZS0+bUNoYXJzLnN0cmluZygpKSwKLSAgICAgICAgICAgIC8vICAgICAgIFN0cmluZzgobm9kZS0+bUNoYXJzKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoKnAgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChzdHJpcEFsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhpcyBub2RlIQotICAgICAgICAgICAgICAgICAgICBtQ2hpbGRyZW4ucmVtb3ZlQXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIE4tLTsKLSAgICAgICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPm1DaGFycyA9IFN0cmluZzE2KCIgIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBDb21wYWN0IGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogZSA9IG5vZGUtPm1DaGFycy5zdHJpbmcoKStub2RlLT5tQ2hhcnMuc2l6ZSgpLTE7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUgPiBwICYmICplIDwgMTI4ICYmIGlzc3BhY2UoKmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGUtLTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHAgPiBub2RlLT5tQ2hhcnMuc3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcC0tOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZSA8IChub2RlLT5tQ2hhcnMuc3RyaW5nKCkrbm9kZS0+bUNoYXJzLnNpemUoKS0xKSkgewotICAgICAgICAgICAgICAgICAgICBlKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChwID4gbm9kZS0+bUNoYXJzLnN0cmluZygpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGUgPCAobm9kZS0+bUNoYXJzLnN0cmluZygpK25vZGUtPm1DaGFycy5zaXplKCktMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYgdG1wKHAsIGUtcCsxKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+bUNoYXJzID0gdG1wOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5vZGUtPnJlbW92ZVdoaXRlc3BhY2Uoc3RyaXBBbGwsIGNEYXRhVGFncyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXR1c190IFhNTE5vZGU6OnBhcnNlVmFsdWVzKGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiB0YWJsZSkKLXsKLSAgICBib29sIGhhc0Vycm9ycyA9IGZhbHNlOwotICAgIAotICAgIGlmIChnZXRUeXBlKCkgPT0gVFlQRV9FTEVNRU5UKSB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gbUF0dHJpYnV0ZXMuc2l6ZSgpOwotICAgICAgICBTdHJpbmcxNiBkZWZQYWNrYWdlKGFzc2V0cy0+Z2V0UGFja2FnZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgYXR0cmlidXRlX2VudHJ5JiBlID0gbUF0dHJpYnV0ZXMuZWRpdEl0ZW1BdChpKTsKLSAgICAgICAgICAgIEFjY2Vzc29yQ29va2llIGFjKFNvdXJjZVBvcyhtRmlsZW5hbWUsIGdldFN0YXJ0TGluZU51bWJlcigpKSwgU3RyaW5nOChlLm5hbWUpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGUuc3RyaW5nKSk7Ci0gICAgICAgICAgICB0YWJsZS0+c2V0Q3VycmVudFhtbFBvcyhTb3VyY2VQb3MobUZpbGVuYW1lLCBnZXRTdGFydExpbmVOdW1iZXIoKSkpOwotICAgICAgICAgICAgaWYgKCFhc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkKLSAgICAgICAgICAgICAgICAgICAgLnN0cmluZ1RvVmFsdWUoJmUudmFsdWUsICZlLnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0cmluZy5zdHJpbmcoKSwgZS5zdHJpbmcuc2l6ZSgpLCB0cnVlLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUubmFtZVJlc0lkLCBOVUxMLCAmZGVmUGFja2FnZSwgdGFibGUsICZhYykpIHsKLSAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJBdHRyICVzOiB0eXBlPTB4JXgsIHN0cj0lc1xuIiwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGUubmFtZSkuc3RyaW5nKCksIGUudmFsdWUuZGF0YVR5cGUsCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nOChlLnN0cmluZykuc3RyaW5nKCkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb25zdCBzaXplX3QgTiA9IG1DaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBzdGF0dXNfdCBlcnIgPSBtQ2hpbGRyZW4uaXRlbUF0KGkpLT5wYXJzZVZhbHVlcyhhc3NldHMsIHRhYmxlKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGFzRXJyb3JzID8gVU5LTk9XTl9FUlJPUiA6IE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBYTUxOb2RlOjphc3NpZ25SZXNvdXJjZUlkcyhjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VUYWJsZSogdGFibGUpCi17Ci0gICAgYm9vbCBoYXNFcnJvcnMgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoZ2V0VHlwZSgpID09IFRZUEVfRUxFTUVOVCkgewotICAgICAgICBTdHJpbmcxNiBhdHRyKCJhdHRyIik7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVycm9yTXNnOwotICAgICAgICBjb25zdCBzaXplX3QgTiA9IG1BdHRyaWJ1dGVzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlX2VudHJ5JiBlID0gbUF0dHJpYnV0ZXMuaXRlbUF0KGkpOwotICAgICAgICAgICAgaWYgKGUubnMuc2l6ZSgpIDw9IDApIGNvbnRpbnVlOwotICAgICAgICAgICAgYm9vbCBuc0lzUHVibGljOwotICAgICAgICAgICAgU3RyaW5nMTYgcGtnKGdldE5hbWVzcGFjZVJlc291cmNlUGFja2FnZShTdHJpbmcxNihhc3NldHMtPmdldFBhY2thZ2UoKSksIGUubnMsICZuc0lzUHVibGljKSk7Ci0gICAgICAgICAgICBOT0lTWShwcmludGYoIkVsZW0gJXMgJXM9XCIlc1wiOiBuYW1lc3BhY2UoJXMpICVzID09PT4gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZ2V0RWxlbWVudE5hbWUoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZS5uYW1lKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChlLnN0cmluZykuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZS5ucykuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIChuc0lzUHVibGljKSA/ICJwdWJsaWMiIDogInByaXZhdGUiLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHBrZykuc3RyaW5nKCkpKTsKLSAgICAgICAgICAgIGlmIChwa2cuc2l6ZSgpIDw9IDApIGNvbnRpbnVlOwotICAgICAgICAgICAgdWludDMyX3QgcmVzID0gdGFibGUgIT0gTlVMTAotICAgICAgICAgICAgICAgID8gdGFibGUtPmdldFJlc0lkKGUubmFtZSwgJmF0dHIsICZwa2csICZlcnJvck1zZywgbnNJc1B1YmxpYykKLSAgICAgICAgICAgICAgICA6IGFzc2V0cy0+Z2V0SW5jbHVkZWRSZXNvdXJjZXMoKS4KLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllckZvck5hbWUoZS5uYW1lLnN0cmluZygpLCBlLm5hbWUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnN0cmluZygpLCBhdHRyLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnLnN0cmluZygpLCBwa2cuc2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgewotICAgICAgICAgICAgICAgIE5PSVNZKHByaW50ZigiWE1MIGF0dHJpYnV0ZSBuYW1lICVzOiByZXNpZD0weCUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZS5uYW1lKS5zdHJpbmcoKSwgcmVzKSk7Ci0gICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlUmVzSUQoaSwgcmVzKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zKG1GaWxlbmFtZSwgZ2V0U3RhcnRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgIk5vIHJlc291cmNlIGlkZW50aWZpZXIgZm91bmQgZm9yIGF0dHJpYnV0ZSAnJXMnIGluIHBhY2thZ2UgJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZS5uYW1lKS5zdHJpbmcoKSwgU3RyaW5nOChwa2cpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNvbnN0IHNpemVfdCBOID0gbUNoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHN0YXR1c190IGVyciA9IG1DaGlsZHJlbi5pdGVtQXQoaSktPmFzc2lnblJlc291cmNlSWRzKGFzc2V0cywgdGFibGUpOwotICAgICAgICBpZiAoZXJyIDwgTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaGFzRXJyb3JzID8gVU5LTk9XTl9FUlJPUiA6IE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBYTUxOb2RlOjpmbGF0dGVuKGNvbnN0IHNwPEFhcHRGaWxlPiYgZGVzdCwKLSAgICAgICAgYm9vbCBzdHJpcENvbW1lbnRzLCBib29sIHN0cmlwUmF3VmFsdWVzKSBjb25zdAotewotICAgIFN0cmluZ1Bvb2wgc3RyaW5ncyhtVVRGOCk7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiByZXNpZHM7Ci0gICAgCi0gICAgLy8gRmlyc3QgY29sbGVjdCBqdXN0IHRoZSBzdHJpbmdzIGZvciBhdHRyaWJ1dGUgbmFtZXMgdGhhdCBoYXZlIGEKLSAgICAvLyByZXNvdXJjZSBJRCBhc3NpZ25lZCB0byB0aGVtLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHJlc291cmNlIElECi0gICAgLy8gYXJyYXkgaXMgY29tcGFjdCwgYW5kIG1ha2VzIGl0IGVhc2llciB0byBkZWFsIHdpdGggYXR0cmlidXRlIG5hbWVzCi0gICAgLy8gaW4gZGlmZmVyZW50IG5hbWVzcGFjZXMgKGFuZCB0aHVzIHdpdGggZGlmZmVyZW50IHJlc291cmNlIElEcykuCi0gICAgY29sbGVjdF9yZXNpZF9zdHJpbmdzKCZzdHJpbmdzLCAmcmVzaWRzKTsKLQotICAgIC8vIE5leHQgY29sbGVjdCBhbGwgcmVtYWluaWJuZyBzdHJpbmdzLgotICAgIGNvbGxlY3Rfc3RyaW5ncygmc3RyaW5ncywgJnJlc2lkcywgc3RyaXBDb21tZW50cywgc3RyaXBSYXdWYWx1ZXMpOwotCi0jaWYgMCAgLy8gTm8gbG9uZ2VyIGNvbXBpbGVzCi0gICAgTk9JU1kocHJpbnRmKCJGb3VuZCBzdHJpbmdzOlxuIik7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gc3RyaW5ncy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIFN0cmluZzgoc3RyaW5ncy5lbnRyeUF0KGkpLnN0cmluZykuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgKTsKLSNlbmRpZiAgICAKLQotICAgIHNwPEFhcHRGaWxlPiBzdHJpbmdQb29sID0gc3RyaW5ncy5jcmVhdGVTdHJpbmdCbG9jaygpOwotICAgIE5PSVNZKGFvdXQgPDwgIlN0cmluZyBwb29sOiIKLSAgICAgICAgICA8PCBIZXhEdW1wKHN0cmluZ1Bvb2wtPmdldERhdGEoKSwgc3RyaW5nUG9vbC0+Z2V0U2l6ZSgpKSA8PCBlbmRsKTsKLQotICAgIFJlc1hNTFRyZWVfaGVhZGVyIGhlYWRlcjsKLSAgICBtZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOwotICAgIGhlYWRlci5oZWFkZXIudHlwZSA9IGh0b2RzKFJFU19YTUxfVFlQRSk7Ci0gICAgaGVhZGVyLmhlYWRlci5oZWFkZXJTaXplID0gaHRvZHMoc2l6ZW9mKGhlYWRlcikpOwotCi0gICAgY29uc3Qgc2l6ZV90IGJhc2VQb3MgPSBkZXN0LT5nZXRTaXplKCk7Ci0gICAgZGVzdC0+d3JpdGVEYXRhKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKLSAgICBkZXN0LT53cml0ZURhdGEoc3RyaW5nUG9vbC0+Z2V0RGF0YSgpLCBzdHJpbmdQb29sLT5nZXRTaXplKCkpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSByZXNvdXJjZSBJRHMsIHdyaXRlIHRoZW0uCi0gICAgaWYgKHJlc2lkcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCByZXNJZHNQb3MgPSBkZXN0LT5nZXRTaXplKCk7Ci0gICAgICAgIGNvbnN0IHNpemVfdCByZXNJZHNTaXplID0KLSAgICAgICAgICAgIHNpemVvZihSZXNDaHVua19oZWFkZXIpKyhzaXplb2YodWludDMyX3QpKnJlc2lkcy5zaXplKCkpOwotICAgICAgICBSZXNDaHVua19oZWFkZXIqIGlkc0hlYWRlciA9IChSZXNDaHVua19oZWFkZXIqKQotICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopZGVzdC0+ZWRpdERhdGEocmVzSWRzUG9zK3Jlc0lkc1NpemUpKStyZXNJZHNQb3MpOwotICAgICAgICBpZHNIZWFkZXItPnR5cGUgPSBodG9kcyhSRVNfWE1MX1JFU09VUkNFX01BUF9UWVBFKTsKLSAgICAgICAgaWRzSGVhZGVyLT5oZWFkZXJTaXplID0gaHRvZHMoc2l6ZW9mKCppZHNIZWFkZXIpKTsKLSAgICAgICAgaWRzSGVhZGVyLT5zaXplID0gaHRvZGwocmVzSWRzU2l6ZSk7Ci0gICAgICAgIHVpbnQzMl90KiBpZHMgPSAodWludDMyX3QqKShpZHNIZWFkZXIrMSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxyZXNpZHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICppZHMrKyA9IGh0b2RsKHJlc2lkc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmbGF0dGVuX25vZGUoc3RyaW5ncywgZGVzdCwgc3RyaXBDb21tZW50cywgc3RyaXBSYXdWYWx1ZXMpOwotCi0gICAgdm9pZCogZGF0YSA9IGRlc3QtPmVkaXREYXRhKCk7Ci0gICAgUmVzWE1MVHJlZV9oZWFkZXIqIGhkID0gKFJlc1hNTFRyZWVfaGVhZGVyKikoKCh1aW50OF90KilkYXRhKStiYXNlUG9zKTsKLSAgICBzaXplX3Qgc2l6ZSA9IGRlc3QtPmdldFNpemUoKS1iYXNlUG9zOwotICAgIGhkLT5oZWFkZXIuc2l6ZSA9IGh0b2RsKGRlc3QtPmdldFNpemUoKS1iYXNlUG9zKTsKLQotICAgIE5PSVNZKGFvdXQgPDwgIlhNTCByZXNvdXJjZToiCi0gICAgICAgICAgPDwgSGV4RHVtcChkZXN0LT5nZXREYXRhKCksIGRlc3QtPmdldFNpemUoKSkgPDwgZW5kbCk7Ci0KLSAgICAjaWYgUFJJTlRfU1RSSU5HX01FVFJJQ1MKLSAgICBmcHJpbnRmKHN0ZGVyciwgIioqKiogdG90YWwgeG1sIHNpemU6ICVkIC8gJWQlJSBzdHJpbmdzIChpbiAlcylcbiIsCi0gICAgICAgIGRlc3QtPmdldFNpemUoKSwgKHN0cmluZ1Bvb2wtPmdldFNpemUoKSoxMDApL2Rlc3QtPmdldFNpemUoKSwKLSAgICAgICAgZGVzdC0+Z2V0UGF0aCgpLnN0cmluZygpKTsKLSAgICAjZW5kaWYKLSAgICAgICAgCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi12b2lkIFhNTE5vZGU6OnByaW50KGludCBpbmRlbnQpCi17Ci0gICAgU3RyaW5nOCBwcmVmaXg7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpPTA7IGk8aW5kZW50OyBpKyspIHsKLSAgICAgICAgcHJlZml4LmFwcGVuZCgiICAiKTsKLSAgICB9Ci0gICAgaWYgKGdldFR5cGUoKSA9PSBUWVBFX0VMRU1FTlQpIHsKLSAgICAgICAgU3RyaW5nOCBlbGVtTnMoZ2V0TmFtZXNwYWNlVXJpKCkpOwotICAgICAgICBpZiAoZWxlbU5zLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGVsZW1Ocy5hcHBlbmQoIjoiKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIiVzIEU6ICVzJXMiLCBwcmVmaXguc3RyaW5nKCksCi0gICAgICAgICAgICAgICBlbGVtTnMuc3RyaW5nKCksIFN0cmluZzgoZ2V0RWxlbWVudE5hbWUoKSkuc3RyaW5nKCkpOwotICAgICAgICBpbnQgTiA9IG1BdHRyaWJ1dGVzLnNpemUoKTsKLSAgICAgICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBzc2l6ZV90IGlkeCA9IG1BdHRyaWJ1dGVPcmRlci52YWx1ZUF0KGkpOwotICAgICAgICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiIC8gIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiLCAiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZV9lbnRyeSYgYXR0ciA9IG1BdHRyaWJ1dGVzLml0ZW1BdChpZHgpOwotICAgICAgICAgICAgU3RyaW5nOCBhdHRyTnMoYXR0ci5ucyk7Ci0gICAgICAgICAgICBpZiAoYXR0ck5zLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBhdHRyTnMuYXBwZW5kKCI6Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXR0ci5uYW1lUmVzSWQpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzJXMoMHglMDh4KSIsIGF0dHJOcy5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChhdHRyLm5hbWUpLnN0cmluZygpLCBhdHRyLm5hbWVSZXNJZCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiJXMlcyIsIGF0dHJOcy5zdHJpbmcoKSwgU3RyaW5nOChhdHRyLm5hbWUpLnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiPSVzIiwgU3RyaW5nOChhdHRyLnN0cmluZykuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICB9IGVsc2UgaWYgKGdldFR5cGUoKSA9PSBUWVBFX05BTUVTUEFDRSkgewotICAgICAgICBwcmludGYoIiVzIE46ICVzPSVzXG4iLCBwcmVmaXguc3RyaW5nKCksCi0gICAgICAgICAgICAgICBnZXROYW1lc3BhY2VQcmVmaXgoKS5zaXplKCkgPiAwCi0gICAgICAgICAgICAgICAgICAgID8gU3RyaW5nOChnZXROYW1lc3BhY2VQcmVmaXgoKSkuc3RyaW5nKCkgOiAiPERFRj4iLAotICAgICAgICAgICAgICAgU3RyaW5nOChnZXROYW1lc3BhY2VVcmkoKSkuc3RyaW5nKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50ZigiJXMgQzogXCIlc1wiXG4iLCBwcmVmaXguc3RyaW5nKCksIFN0cmluZzgoZ2V0Q0RhdGEoKSkuc3RyaW5nKCkpOwotICAgIH0KLSAgICBpbnQgTiA9IG1DaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIG1DaGlsZHJlbi5pdGVtQXQoaSktPnByaW50KGluZGVudCsxKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNwbGl0TmFtZShjb25zdCBjaGFyKiBuYW1lLCBTdHJpbmcxNiogb3V0TnMsIFN0cmluZzE2KiBvdXROYW1lKQotewotICAgIGNvbnN0IGNoYXIqIHAgPSBuYW1lOwotICAgIHdoaWxlICgqcCAhPSAwICYmICpwICE9IDEpIHsKLSAgICAgICAgcCsrOwotICAgIH0KLSAgICBpZiAoKnAgPT0gMCkgewotICAgICAgICAqb3V0TnMgPSBTdHJpbmcxNigpOwotICAgICAgICAqb3V0TmFtZSA9IFN0cmluZzE2KG5hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgICpvdXROcyA9IFN0cmluZzE2KG5hbWUsIChwLW5hbWUpKTsKLSAgICAgICAgKm91dE5hbWUgPSBTdHJpbmcxNihwKzEpOwotICAgIH0KLX0KLQotdm9pZCBYTUxDQUxMCi1YTUxOb2RlOjpzdGFydE5hbWVzcGFjZSh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICp1cmkpCi17Ci0gICAgTk9JU1lfUEFSU0UocHJpbnRmKCJTdGFydCBOYW1lc3BhY2U6ICVzICVzXG4iLCBwcmVmaXgsIHVyaSkpOwotICAgIFBhcnNlU3RhdGUqIHN0ID0gKFBhcnNlU3RhdGUqKXVzZXJEYXRhOwotICAgIHNwPFhNTE5vZGU+IG5vZGUgPSBYTUxOb2RlOjpuZXdOYW1lc3BhY2Uoc3QtPmZpbGVuYW1lLCAKLSAgICAgICAgICAgIFN0cmluZzE2KHByZWZpeCAhPSBOVUxMID8gcHJlZml4IDogIiIpLCBTdHJpbmcxNih1cmkpKTsKLSAgICBub2RlLT5zZXRTdGFydExpbmVOdW1iZXIoWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyKHN0LT5wYXJzZXIpKTsKLSAgICBpZiAoc3QtPnN0YWNrLnNpemUoKSA+IDApIHsKLSAgICAgICAgc3QtPnN0YWNrLml0ZW1BdChzdC0+c3RhY2suc2l6ZSgpLTEpLT5hZGRDaGlsZChub2RlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdC0+cm9vdCA9IG5vZGU7Ci0gICAgfQotICAgIHN0LT5zdGFjay5wdXNoKG5vZGUpOwotfQotCi12b2lkIFhNTENBTEwKLVhNTE5vZGU6OnN0YXJ0RWxlbWVudCh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqKmF0dHMpCi17Ci0gICAgTk9JU1lfUEFSU0UocHJpbnRmKCJTdGFydCBFbGVtZW50OiAlc1xuIiwgbmFtZSkpOwotICAgIFBhcnNlU3RhdGUqIHN0ID0gKFBhcnNlU3RhdGUqKXVzZXJEYXRhOwotICAgIFN0cmluZzE2IG5zMTYsIG5hbWUxNjsKLSAgICBzcGxpdE5hbWUobmFtZSwgJm5zMTYsICZuYW1lMTYpOwotICAgIHNwPFhNTE5vZGU+IG5vZGUgPSBYTUxOb2RlOjpuZXdFbGVtZW50KHN0LT5maWxlbmFtZSwgbnMxNiwgbmFtZTE2KTsKLSAgICBub2RlLT5zZXRTdGFydExpbmVOdW1iZXIoWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyKHN0LT5wYXJzZXIpKTsKLSAgICBpZiAoc3QtPnBlbmRpbmdDb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgbm9kZS0+YXBwZW5kQ29tbWVudChzdC0+cGVuZGluZ0NvbW1lbnQpOwotICAgICAgICBzdC0+cGVuZGluZ0NvbW1lbnQgPSBTdHJpbmcxNigpOwotICAgIH0KLSAgICBpZiAoc3QtPnN0YWNrLnNpemUoKSA+IDApIHsKLSAgICAgICAgc3QtPnN0YWNrLml0ZW1BdChzdC0+c3RhY2suc2l6ZSgpLTEpLT5hZGRDaGlsZChub2RlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdC0+cm9vdCA9IG5vZGU7Ci0gICAgfQotICAgIHN0LT5zdGFjay5wdXNoKG5vZGUpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGF0dHNbaV07IGkgKz0gMikgewotICAgICAgICBzcGxpdE5hbWUoYXR0c1tpXSwgJm5zMTYsICZuYW1lMTYpOwotICAgICAgICBub2RlLT5hZGRBdHRyaWJ1dGUobnMxNiwgbmFtZTE2LCBTdHJpbmcxNihhdHRzW2krMV0pKTsKLSAgICB9Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MTm9kZTo6Y2hhcmFjdGVyRGF0YSh2b2lkICp1c2VyRGF0YSwgY29uc3QgWE1MX0NoYXIgKnMsIGludCBsZW4pCi17Ci0gICAgTk9JU1lfUEFSU0UocHJpbnRmKCJDREFUQTogXCIlc1wiXG4iLCBTdHJpbmc4KHMsIGxlbikuc3RyaW5nKCkpKTsKLSAgICBQYXJzZVN0YXRlKiBzdCA9IChQYXJzZVN0YXRlKil1c2VyRGF0YTsKLSAgICBzcDxYTUxOb2RlPiBub2RlID0gTlVMTDsKLSAgICBpZiAoc3QtPnN0YWNrLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3A8WE1MTm9kZT4gcGFyZW50ID0gc3QtPnN0YWNrLml0ZW1BdChzdC0+c3RhY2suc2l6ZSgpLTEpOwotICAgIGlmIChwYXJlbnQgIT0gTlVMTCAmJiBwYXJlbnQtPmdldENoaWxkcmVuKCkuc2l6ZSgpID4gMCkgewotICAgICAgICBub2RlID0gcGFyZW50LT5nZXRDaGlsZHJlbigpW3BhcmVudC0+Z2V0Q2hpbGRyZW4oKS5zaXplKCktMV07Ci0gICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkgIT0gVFlQRV9DREFUQSkgewotICAgICAgICAgICAgLy8gTGFzdCBub2RlIGlzIG5vdCBDREFUQSwgbmVlZCB0byBtYWtlIGEgbmV3IG5vZGUuCi0gICAgICAgICAgICBub2RlID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChub2RlID09IE5VTEwpIHsKLSAgICAgICAgbm9kZSA9IFhNTE5vZGU6Om5ld0NEYXRhKHN0LT5maWxlbmFtZSk7Ci0gICAgICAgIG5vZGUtPnNldFN0YXJ0TGluZU51bWJlcihYTUxfR2V0Q3VycmVudExpbmVOdW1iZXIoc3QtPnBhcnNlcikpOwotICAgICAgICBwYXJlbnQtPmFkZENoaWxkKG5vZGUpOwotICAgIH0KLQotICAgIG5vZGUtPmFwcGVuZENoYXJzKFN0cmluZzE2KHMsIGxlbikpOwotfQotCi12b2lkIFhNTENBTEwKLVhNTE5vZGU6OmVuZEVsZW1lbnQodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgTk9JU1lfUEFSU0UocHJpbnRmKCJFbmQgRWxlbWVudDogJXNcbiIsIG5hbWUpKTsKLSAgICBQYXJzZVN0YXRlKiBzdCA9IChQYXJzZVN0YXRlKil1c2VyRGF0YTsKLSAgICBzcDxYTUxOb2RlPiBub2RlID0gc3QtPnN0YWNrLml0ZW1BdChzdC0+c3RhY2suc2l6ZSgpLTEpOwotICAgIG5vZGUtPnNldEVuZExpbmVOdW1iZXIoWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyKHN0LT5wYXJzZXIpKTsKLSAgICBpZiAoc3QtPnBlbmRpbmdDb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgbm9kZS0+YXBwZW5kQ29tbWVudChzdC0+cGVuZGluZ0NvbW1lbnQpOwotICAgICAgICBzdC0+cGVuZGluZ0NvbW1lbnQgPSBTdHJpbmcxNigpOwotICAgIH0KLSAgICBTdHJpbmcxNiBuczE2LCBuYW1lMTY7Ci0gICAgc3BsaXROYW1lKG5hbWUsICZuczE2LCAmbmFtZTE2KTsKLSAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKG5vZGUtPmdldEVsZW1lbnROYW1lc3BhY2UoKSAhPSBuczE2Ci0gICAgICAgICAgICAgICAgICAgICAgICB8fCBub2RlLT5nZXRFbGVtZW50TmFtZSgpICE9IG5hbWUxNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJCYWQgZW5kIGVsZW1lbnQgJXMiLCBuYW1lKTsKLSAgICBzdC0+c3RhY2sucG9wKCk7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MTm9kZTo6ZW5kTmFtZXNwYWNlKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpwcmVmaXgpCi17Ci0gICAgY29uc3QgY2hhciogbm9uTnVsbFByZWZpeCA9IHByZWZpeCAhPSBOVUxMID8gcHJlZml4IDogIiI7Ci0gICAgTk9JU1lfUEFSU0UocHJpbnRmKCJFbmQgTmFtZXNwYWNlOiAlc1xuIiwgcHJlZml4KSk7Ci0gICAgUGFyc2VTdGF0ZSogc3QgPSAoUGFyc2VTdGF0ZSopdXNlckRhdGE7Ci0gICAgc3A8WE1MTm9kZT4gbm9kZSA9IHN0LT5zdGFjay5pdGVtQXQoc3QtPnN0YWNrLnNpemUoKS0xKTsKLSAgICBub2RlLT5zZXRFbmRMaW5lTnVtYmVyKFhNTF9HZXRDdXJyZW50TGluZU51bWJlcihzdC0+cGFyc2VyKSk7Ci0gICAgTE9HX0FMV0FZU19GQVRBTF9JRihub2RlLT5nZXROYW1lc3BhY2VQcmVmaXgoKSAhPSBTdHJpbmcxNihub25OdWxsUHJlZml4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJCYWQgZW5kIG5hbWVzcGFjZSAlcyIsIHByZWZpeCk7Ci0gICAgc3QtPnN0YWNrLnBvcCgpOwotfQotCi12b2lkIFhNTENBTEwKLVhNTE5vZGU6OmNvbW1lbnREYXRhKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpjb21tZW50KQotewotICAgIE5PSVNZX1BBUlNFKHByaW50ZigiQ29tbWVudDogJXNcbiIsIGNvbW1lbnQpKTsKLSAgICBQYXJzZVN0YXRlKiBzdCA9IChQYXJzZVN0YXRlKil1c2VyRGF0YTsKLSAgICBpZiAoc3QtPnBlbmRpbmdDb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgc3QtPnBlbmRpbmdDb21tZW50LmFwcGVuZChTdHJpbmcxNigiXG4iKSk7Ci0gICAgfQotICAgIHN0LT5wZW5kaW5nQ29tbWVudC5hcHBlbmQoU3RyaW5nMTYoY29tbWVudCkpOwotfQotCi1zdGF0dXNfdCBYTUxOb2RlOjpjb2xsZWN0X3N0cmluZ3MoU3RyaW5nUG9vbCogZGVzdCwgVmVjdG9yPHVpbnQzMl90Piogb3V0UmVzSWRzLAotICAgICAgICBib29sIHN0cmlwQ29tbWVudHMsIGJvb2wgc3RyaXBSYXdWYWx1ZXMpIGNvbnN0Ci17Ci0gICAgY29sbGVjdF9hdHRyX3N0cmluZ3MoZGVzdCwgb3V0UmVzSWRzLCB0cnVlKTsKLSAgICAKLSAgICBpbnQgaTsKLSAgICBpZiAoUkVTT1VSQ0VTX1RPT0xTX05BTUVTUEFDRSAhPSBtTmFtZXNwYWNlVXJpKSB7Ci0gICAgICAgIGlmIChtTmFtZXNwYWNlUHJlZml4LnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGRlc3QtPmFkZChtTmFtZXNwYWNlUHJlZml4LCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobU5hbWVzcGFjZVVyaS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBkZXN0LT5hZGQobU5hbWVzcGFjZVVyaSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1FbGVtZW50TmFtZS5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGRlc3QtPmFkZChtRWxlbWVudE5hbWUsIHRydWUpOwotICAgIH0KLQotICAgIGlmICghc3RyaXBDb21tZW50cyAmJiBtQ29tbWVudC5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGRlc3QtPmFkZChtQ29tbWVudCwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgY29uc3QgaW50IE5BID0gbUF0dHJpYnV0ZXMuc2l6ZSgpOwotCi0gICAgZm9yIChpPTA7IGk8TkE7IGkrKykgewotICAgICAgICBjb25zdCBhdHRyaWJ1dGVfZW50cnkmIGFlID0gbUF0dHJpYnV0ZXMuaXRlbUF0KGkpOwotICAgICAgICBpZiAoYWUubnMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgZGVzdC0+YWRkKGFlLm5zLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmlwUmF3VmFsdWVzIHx8IGFlLm5lZWRTdHJpbmdWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBkZXN0LT5hZGQoYWUuc3RyaW5nLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICAvKgotICAgICAgICBpZiAoYWUudmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX05VTEwKLSAgICAgICAgICAgICAgICB8fCBhZS52YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfU1RSSU5HKSB7Ci0gICAgICAgICAgICBkZXN0LT5hZGQoYWUuc3RyaW5nLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICAqLwotICAgIH0KLQotICAgIGlmIChtRWxlbWVudE5hbWUuc2l6ZSgpID09IDApIHsKLSAgICAgICAgLy8gSWYgbm90IGFuIGVsZW1lbnQsIGluY2x1ZGUgdGhlIENEQVRBLCBldmVuIGlmIGl0IGlzIGVtcHR5LgotICAgICAgICBkZXN0LT5hZGQobUNoYXJzLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBjb25zdCBpbnQgTkMgPSBtQ2hpbGRyZW4uc2l6ZSgpOwotCi0gICAgZm9yIChpPTA7IGk8TkM7IGkrKykgewotICAgICAgICBtQ2hpbGRyZW4uaXRlbUF0KGkpLT5jb2xsZWN0X3N0cmluZ3MoZGVzdCwgb3V0UmVzSWRzLAotICAgICAgICAgICAgICAgIHN0cmlwQ29tbWVudHMsIHN0cmlwUmF3VmFsdWVzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFhNTE5vZGU6OmNvbGxlY3RfYXR0cl9zdHJpbmdzKFN0cmluZ1Bvb2wqIG91dFBvb2wsCi0gICAgICAgIFZlY3Rvcjx1aW50MzJfdD4qIG91dFJlc0lkcywgYm9vbCBhbGxBdHRycykgY29uc3QgewotICAgIGNvbnN0IGludCBOQSA9IG1BdHRyaWJ1dGVzLnNpemUoKTsKLQotICAgIGZvciAoaW50IGk9MDsgaTxOQTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGF0dHJpYnV0ZV9lbnRyeSYgYXR0ciA9IG1BdHRyaWJ1dGVzLml0ZW1BdChpKTsKLSAgICAgICAgdWludDMyX3QgaWQgPSBhdHRyLm5hbWVSZXNJZDsKLSAgICAgICAgaWYgKGlkIHx8IGFsbEF0dHJzKSB7Ci0gICAgICAgICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhbHJlYWR5IGFzc2lnbmVkIHRoaXMgcmVzb3VyY2UgSUQgdG8gYSBwb29sZWQKLSAgICAgICAgICAgIC8vIHN0cmluZy4uLgotICAgICAgICAgICAgY29uc3QgVmVjdG9yPHNpemVfdD4qIGluZGljZXMgPSBvdXRQb29sLT5vZmZzZXRzRm9yU3RyaW5nKGF0dHIubmFtZSk7Ci0gICAgICAgICAgICBzc2l6ZV90IGlkeCA9IC0xOwotICAgICAgICAgICAgaWYgKGluZGljZXMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGNvbnN0IGludCBOSiA9IGluZGljZXMtPnNpemUoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgTlIgPSBvdXRSZXNJZHMtPnNpemUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8Tko7IGorKykgewotICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RySWR4ID0gaW5kaWNlcy0+aXRlbUF0KGopOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RySWR4ID49IE5SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYXNzaWduIGEgcmVzb3VyY2UgSUQgZm9yIHRoaXMgb25lLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IHN0cklkeDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIHN0cmluZ3MgdGhhdCBhcmUgb3V0IG9mIHJhbmdlIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudGx5IGFzc2lnbmVkIHJlc291cmNlIElEcy4uLiAgd2UgYWRkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJpbmdzIGFzIHdlIGFzc2lnbiB0aGUgZmlyc3QgSUQuCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3V0UmVzSWRzLT5pdGVtQXQoc3RySWR4KSA9PSBpZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gc3RySWR4OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaWR4IDwgMCkgewotICAgICAgICAgICAgICAgIGlkeCA9IG91dFBvb2wtPmFkZChhdHRyLm5hbWUpOwotICAgICAgICAgICAgICAgIE5PSVNZKHByaW50ZigiQWRkaW5nIGF0dHIgJXMgKHJlc2lkIDB4JTA4eCkgdG8gcG9vbDogaWR4PSVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChhdHRyLm5hbWUpLnN0cmluZygpLCBpZCwgaWR4KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlkICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChzc2l6ZV90KW91dFJlc0lkcy0+c2l6ZSgpIDw9IGlkeCkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzSWRzLT5hZGQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0UmVzSWRzLT5yZXBsYWNlQXQoaWQsIGlkeCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXR0ci5uYW1lUG9vbElkeCA9IGlkeDsKLSAgICAgICAgICAgIE5PSVNZKHByaW50ZigiU3RyaW5nICVzIG9mZnNldD0weCUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChhdHRyLm5hbWUpLnN0cmluZygpLCBpZHgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgWE1MTm9kZTo6Y29sbGVjdF9yZXNpZF9zdHJpbmdzKFN0cmluZ1Bvb2wqIG91dFBvb2wsCi0gICAgICAgIFZlY3Rvcjx1aW50MzJfdD4qIG91dFJlc0lkcykgY29uc3QKLXsKLSAgICBjb2xsZWN0X2F0dHJfc3RyaW5ncyhvdXRQb29sLCBvdXRSZXNJZHMsIGZhbHNlKTsKLQotICAgIGNvbnN0IGludCBOQyA9IG1DaGlsZHJlbi5zaXplKCk7Ci0KLSAgICBmb3IgKGludCBpPTA7IGk8TkM7IGkrKykgewotICAgICAgICBtQ2hpbGRyZW4uaXRlbUF0KGkpLT5jb2xsZWN0X3Jlc2lkX3N0cmluZ3Mob3V0UG9vbCwgb3V0UmVzSWRzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFhNTE5vZGU6OmZsYXR0ZW5fbm9kZShjb25zdCBTdHJpbmdQb29sJiBzdHJpbmdzLCBjb25zdCBzcDxBYXB0RmlsZT4mIGRlc3QsCi0gICAgICAgIGJvb2wgc3RyaXBDb21tZW50cywgYm9vbCBzdHJpcFJhd1ZhbHVlcykgY29uc3QKLXsKLSAgICBSZXNYTUxUcmVlX25vZGUgbm9kZTsKLSAgICBSZXNYTUxUcmVlX2NkYXRhRXh0IGNkYXRhRXh0OwotICAgIFJlc1hNTFRyZWVfbmFtZXNwYWNlRXh0IG5hbWVzcGFjZUV4dDsKLSAgICBSZXNYTUxUcmVlX2F0dHJFeHQgYXR0ckV4dDsKLSAgICBjb25zdCB2b2lkKiBleHREYXRhID0gTlVMTDsKLSAgICBzaXplX3QgZXh0U2l6ZSA9IDA7Ci0gICAgUmVzWE1MVHJlZV9hdHRyaWJ1dGUgYXR0cjsKLSAgICBib29sIHdyaXRlQ3VycmVudE5vZGUgPSB0cnVlOwotCi0gICAgY29uc3Qgc2l6ZV90IE5BID0gbUF0dHJpYnV0ZXMuc2l6ZSgpOwotICAgIGNvbnN0IHNpemVfdCBOQyA9IG1DaGlsZHJlbi5zaXplKCk7Ci0gICAgc2l6ZV90IGk7Ci0KLSAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKE5BICE9IG1BdHRyaWJ1dGVPcmRlci5zaXplKCksICJBdHRyaWJ1dGVzIG1lc3NlZCB1cCEiKTsKLQotICAgIGNvbnN0IFN0cmluZzE2IGlkMTYoImlkIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgY2xhc3MxNigiY2xhc3MiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBzdHlsZTE2KCJzdHlsZSIpOwotCi0gICAgY29uc3QgdHlwZSB0eXBlID0gZ2V0VHlwZSgpOwotCi0gICAgbWVtc2V0KCZub2RlLCAwLCBzaXplb2Yobm9kZSkpOwotICAgIG1lbXNldCgmYXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTsKLSAgICBub2RlLmhlYWRlci5oZWFkZXJTaXplID0gaHRvZHMoc2l6ZW9mKG5vZGUpKTsKLSAgICBub2RlLmxpbmVOdW1iZXIgPSBodG9kbChnZXRTdGFydExpbmVOdW1iZXIoKSk7Ci0gICAgaWYgKCFzdHJpcENvbW1lbnRzKSB7Ci0gICAgICAgIG5vZGUuY29tbWVudC5pbmRleCA9IGh0b2RsKAotICAgICAgICAgICAgbUNvbW1lbnQuc2l6ZSgpID4gMCA/IHN0cmluZ3Mub2Zmc2V0Rm9yU3RyaW5nKG1Db21tZW50KSA6IC0xKTsKLSAgICAgICAgLy9pZiAobUNvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICAvLyAgcHJpbnRmKCJGbGF0dGVuaW5nIGNvbW1lbnQ6ICVzXG4iLCBTdHJpbmc4KG1Db21tZW50KS5zdHJpbmcoKSk7Ci0gICAgICAgIC8vfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5vZGUuY29tbWVudC5pbmRleCA9IGh0b2RsKCh1aW50MzJfdCktMSk7Ci0gICAgfQotICAgIGlmICh0eXBlID09IFRZUEVfRUxFTUVOVCkgewotICAgICAgICBub2RlLmhlYWRlci50eXBlID0gaHRvZHMoUkVTX1hNTF9TVEFSVF9FTEVNRU5UX1RZUEUpOwotICAgICAgICBleHREYXRhID0gJmF0dHJFeHQ7Ci0gICAgICAgIGV4dFNpemUgPSBzaXplb2YoYXR0ckV4dCk7Ci0gICAgICAgIG1lbXNldCgmYXR0ckV4dCwgMCwgc2l6ZW9mKGF0dHJFeHQpKTsKLSAgICAgICAgaWYgKG1OYW1lc3BhY2VVcmkuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgYXR0ckV4dC5ucy5pbmRleCA9IGh0b2RsKHN0cmluZ3Mub2Zmc2V0Rm9yU3RyaW5nKG1OYW1lc3BhY2VVcmkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF0dHJFeHQubnMuaW5kZXggPSBodG9kbCgodWludDMyX3QpLTEpOwotICAgICAgICB9Ci0gICAgICAgIGF0dHJFeHQubmFtZS5pbmRleCA9IGh0b2RsKHN0cmluZ3Mub2Zmc2V0Rm9yU3RyaW5nKG1FbGVtZW50TmFtZSkpOwotICAgICAgICBhdHRyRXh0LmF0dHJpYnV0ZVN0YXJ0ID0gaHRvZHMoc2l6ZW9mKGF0dHJFeHQpKTsKLSAgICAgICAgYXR0ckV4dC5hdHRyaWJ1dGVTaXplID0gaHRvZHMoc2l6ZW9mKGF0dHIpKTsKLSAgICAgICAgYXR0ckV4dC5hdHRyaWJ1dGVDb3VudCA9IGh0b2RzKE5BKTsKLSAgICAgICAgYXR0ckV4dC5pZEluZGV4ID0gaHRvZHMoMCk7Ci0gICAgICAgIGF0dHJFeHQuY2xhc3NJbmRleCA9IGh0b2RzKDApOwotICAgICAgICBhdHRyRXh0LnN0eWxlSW5kZXggPSBodG9kcygwKTsKLSAgICAgICAgZm9yIChpPTA7IGk8TkE7IGkrKykgewotICAgICAgICAgICAgc3NpemVfdCBpZHggPSBtQXR0cmlidXRlT3JkZXIudmFsdWVBdChpKTsKLSAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZV9lbnRyeSYgYWUgPSBtQXR0cmlidXRlcy5pdGVtQXQoaWR4KTsKLSAgICAgICAgICAgIGlmIChhZS5ucy5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChhZS5uYW1lID09IGlkMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0ckV4dC5pZEluZGV4ID0gaHRvZHMoaSsxKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFlLm5hbWUgPT0gY2xhc3MxNikgewotICAgICAgICAgICAgICAgICAgICBhdHRyRXh0LmNsYXNzSW5kZXggPSBodG9kcyhpKzEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWUubmFtZSA9PSBzdHlsZTE2KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF0dHJFeHQuc3R5bGVJbmRleCA9IGh0b2RzKGkrMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IFRZUEVfTkFNRVNQQUNFKSB7Ci0gICAgICAgIGlmIChtTmFtZXNwYWNlVXJpID09IFJFU09VUkNFU19UT09MU19OQU1FU1BBQ0UpIHsKLSAgICAgICAgICAgIHdyaXRlQ3VycmVudE5vZGUgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5vZGUuaGVhZGVyLnR5cGUgPSBodG9kcyhSRVNfWE1MX1NUQVJUX05BTUVTUEFDRV9UWVBFKTsKLSAgICAgICAgICAgIGV4dERhdGEgPSAmbmFtZXNwYWNlRXh0OwotICAgICAgICAgICAgZXh0U2l6ZSA9IHNpemVvZihuYW1lc3BhY2VFeHQpOwotICAgICAgICAgICAgbWVtc2V0KCZuYW1lc3BhY2VFeHQsIDAsIHNpemVvZihuYW1lc3BhY2VFeHQpKTsKLSAgICAgICAgICAgIGlmIChtTmFtZXNwYWNlUHJlZml4LnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2VFeHQucHJlZml4LmluZGV4ID0gaHRvZGwoc3RyaW5ncy5vZmZzZXRGb3JTdHJpbmcobU5hbWVzcGFjZVByZWZpeCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2VFeHQucHJlZml4LmluZGV4ID0gaHRvZGwoKHVpbnQzMl90KS0xKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5hbWVzcGFjZUV4dC5wcmVmaXguaW5kZXggPSBodG9kbChzdHJpbmdzLm9mZnNldEZvclN0cmluZyhtTmFtZXNwYWNlUHJlZml4KSk7Ci0gICAgICAgICAgICBuYW1lc3BhY2VFeHQudXJpLmluZGV4ID0gaHRvZGwoc3RyaW5ncy5vZmZzZXRGb3JTdHJpbmcobU5hbWVzcGFjZVVyaSkpOwotICAgICAgICB9Ci0gICAgICAgIExPR19BTFdBWVNfRkFUQUxfSUYoTkEgIT0gMCwgIk5hbWVzcGFjZSBub2RlcyBjYW4ndCBoYXZlIGF0dHJpYnV0ZXMhIik7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IFRZUEVfQ0RBVEEpIHsKLSAgICAgICAgbm9kZS5oZWFkZXIudHlwZSA9IGh0b2RzKFJFU19YTUxfQ0RBVEFfVFlQRSk7Ci0gICAgICAgIGV4dERhdGEgPSAmY2RhdGFFeHQ7Ci0gICAgICAgIGV4dFNpemUgPSBzaXplb2YoY2RhdGFFeHQpOwotICAgICAgICBtZW1zZXQoJmNkYXRhRXh0LCAwLCBzaXplb2YoY2RhdGFFeHQpKTsKLSAgICAgICAgY2RhdGFFeHQuZGF0YS5pbmRleCA9IGh0b2RsKHN0cmluZ3Mub2Zmc2V0Rm9yU3RyaW5nKG1DaGFycykpOwotICAgICAgICBjZGF0YUV4dC50eXBlZERhdGEuc2l6ZSA9IGh0b2RzKHNpemVvZihjZGF0YUV4dC50eXBlZERhdGEpKTsKLSAgICAgICAgY2RhdGFFeHQudHlwZWREYXRhLnJlczAgPSAwOwotICAgICAgICBjZGF0YUV4dC50eXBlZERhdGEuZGF0YVR5cGUgPSBtQ2hhcnNWYWx1ZS5kYXRhVHlwZTsKLSAgICAgICAgY2RhdGFFeHQudHlwZWREYXRhLmRhdGEgPSBodG9kbChtQ2hhcnNWYWx1ZS5kYXRhKTsKLSAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihOQSAhPSAwLCAiQ0RBVEEgbm9kZXMgY2FuJ3QgaGF2ZSBhdHRyaWJ1dGVzISIpOwotICAgIH0KLQotICAgIG5vZGUuaGVhZGVyLnNpemUgPSBodG9kbChzaXplb2Yobm9kZSkgKyBleHRTaXplICsgKHNpemVvZihhdHRyKSpOQSkpOwotCi0gICAgaWYgKHdyaXRlQ3VycmVudE5vZGUpIHsKLSAgICAgICAgZGVzdC0+d3JpdGVEYXRhKCZub2RlLCBzaXplb2Yobm9kZSkpOwotICAgICAgICBpZiAoZXh0U2l6ZSA+IDApIHsKLSAgICAgICAgICAgIGRlc3QtPndyaXRlRGF0YShleHREYXRhLCBleHRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaT0wOyBpPE5BOyBpKyspIHsKLSAgICAgICAgc3NpemVfdCBpZHggPSBtQXR0cmlidXRlT3JkZXIudmFsdWVBdChpKTsKLSAgICAgICAgY29uc3QgYXR0cmlidXRlX2VudHJ5JiBhZSA9IG1BdHRyaWJ1dGVzLml0ZW1BdChpZHgpOwotICAgICAgICBpZiAoYWUubnMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgYXR0ci5ucy5pbmRleCA9IGh0b2RsKHN0cmluZ3Mub2Zmc2V0Rm9yU3RyaW5nKGFlLm5zKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdHRyLm5zLmluZGV4ID0gaHRvZGwoKHVpbnQzMl90KS0xKTsKLSAgICAgICAgfQotICAgICAgICBhdHRyLm5hbWUuaW5kZXggPSBodG9kbChhZS5uYW1lUG9vbElkeCk7Ci0KLSAgICAgICAgaWYgKCFzdHJpcFJhd1ZhbHVlcyB8fCBhZS5uZWVkU3RyaW5nVmFsdWUoKSkgewotICAgICAgICAgICAgYXR0ci5yYXdWYWx1ZS5pbmRleCA9IGh0b2RsKHN0cmluZ3Mub2Zmc2V0Rm9yU3RyaW5nKGFlLnN0cmluZykpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXR0ci5yYXdWYWx1ZS5pbmRleCA9IGh0b2RsKCh1aW50MzJfdCktMSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXR0ci50eXBlZFZhbHVlLnNpemUgPSBodG9kcyhzaXplb2YoYXR0ci50eXBlZFZhbHVlKSk7Ci0gICAgICAgIGlmIChhZS52YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfTlVMTAotICAgICAgICAgICAgICAgIHx8IGFlLnZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgIGF0dHIudHlwZWRWYWx1ZS5yZXMwID0gMDsKLSAgICAgICAgICAgIGF0dHIudHlwZWRWYWx1ZS5kYXRhVHlwZSA9IFJlc192YWx1ZTo6VFlQRV9TVFJJTkc7Ci0gICAgICAgICAgICBhdHRyLnR5cGVkVmFsdWUuZGF0YSA9IGh0b2RsKHN0cmluZ3Mub2Zmc2V0Rm9yU3RyaW5nKGFlLnN0cmluZykpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXR0ci50eXBlZFZhbHVlLnJlczAgPSAwOwotICAgICAgICAgICAgYXR0ci50eXBlZFZhbHVlLmRhdGFUeXBlID0gYWUudmFsdWUuZGF0YVR5cGU7Ci0gICAgICAgICAgICBhdHRyLnR5cGVkVmFsdWUuZGF0YSA9IGh0b2RsKGFlLnZhbHVlLmRhdGEpOwotICAgICAgICB9Ci0gICAgICAgIGRlc3QtPndyaXRlRGF0YSgmYXR0ciwgc2l6ZW9mKGF0dHIpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGk9MDsgaTxOQzsgaSsrKSB7Ci0gICAgICAgIHN0YXR1c190IGVyciA9IG1DaGlsZHJlbi5pdGVtQXQoaSktPmZsYXR0ZW5fbm9kZShzdHJpbmdzLCBkZXN0LAotICAgICAgICAgICAgICAgIHN0cmlwQ29tbWVudHMsIHN0cmlwUmF3VmFsdWVzKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0eXBlID09IFRZUEVfRUxFTUVOVCkgewotICAgICAgICBSZXNYTUxUcmVlX2VuZEVsZW1lbnRFeHQgZW5kRWxlbWVudEV4dDsKLSAgICAgICAgbWVtc2V0KCZlbmRFbGVtZW50RXh0LCAwLCBzaXplb2YoZW5kRWxlbWVudEV4dCkpOwotICAgICAgICBub2RlLmhlYWRlci50eXBlID0gaHRvZHMoUkVTX1hNTF9FTkRfRUxFTUVOVF9UWVBFKTsKLSAgICAgICAgbm9kZS5oZWFkZXIuc2l6ZSA9IGh0b2RsKHNpemVvZihub2RlKStzaXplb2YoZW5kRWxlbWVudEV4dCkpOwotICAgICAgICBub2RlLmxpbmVOdW1iZXIgPSBodG9kbChnZXRFbmRMaW5lTnVtYmVyKCkpOwotICAgICAgICBub2RlLmNvbW1lbnQuaW5kZXggPSBodG9kbCgodWludDMyX3QpLTEpOwotICAgICAgICBlbmRFbGVtZW50RXh0Lm5zLmluZGV4ID0gYXR0ckV4dC5ucy5pbmRleDsKLSAgICAgICAgZW5kRWxlbWVudEV4dC5uYW1lLmluZGV4ID0gYXR0ckV4dC5uYW1lLmluZGV4OwotICAgICAgICBkZXN0LT53cml0ZURhdGEoJm5vZGUsIHNpemVvZihub2RlKSk7Ci0gICAgICAgIGRlc3QtPndyaXRlRGF0YSgmZW5kRWxlbWVudEV4dCwgc2l6ZW9mKGVuZEVsZW1lbnRFeHQpKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gVFlQRV9OQU1FU1BBQ0UpIHsKLSAgICAgICAgaWYgKHdyaXRlQ3VycmVudE5vZGUpIHsKLSAgICAgICAgICAgIG5vZGUuaGVhZGVyLnR5cGUgPSBodG9kcyhSRVNfWE1MX0VORF9OQU1FU1BBQ0VfVFlQRSk7Ci0gICAgICAgICAgICBub2RlLmxpbmVOdW1iZXIgPSBodG9kbChnZXRFbmRMaW5lTnVtYmVyKCkpOwotICAgICAgICAgICAgbm9kZS5jb21tZW50LmluZGV4ID0gaHRvZGwoKHVpbnQzMl90KS0xKTsKLSAgICAgICAgICAgIG5vZGUuaGVhZGVyLnNpemUgPSBodG9kbChzaXplb2Yobm9kZSkrZXh0U2l6ZSk7Ci0gICAgICAgICAgICBkZXN0LT53cml0ZURhdGEoJm5vZGUsIHNpemVvZihub2RlKSk7Ci0gICAgICAgICAgICBkZXN0LT53cml0ZURhdGEoZXh0RGF0YSwgZXh0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19CmRpZmYgLS1naXQgYS90b29scy9hYXB0L1hNTE5vZGUuaCBiL3Rvb2xzL2FhcHQvWE1MTm9kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTYyNGI3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvWE1MTm9kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQnVpbGQgcmVzb3VyY2UgZmlsZXMgZnJvbSByYXcgYXNzZXRzLgotLy8KLQotI2lmbmRlZiBYTUxfTk9ERV9ICi0jZGVmaW5lIFhNTF9OT0RFX0gKLQotI2luY2x1ZGUgIlN0cmluZ1Bvb2wuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVRhYmxlLmgiCi0KLWNsYXNzIFhNTE5vZGU7Ci0KLWV4dGVybiBjb25zdCBjaGFyKiBjb25zdCBSRVNPVVJDRVNfUk9PVF9OQU1FU1BBQ0U7Ci1leHRlcm4gY29uc3QgY2hhciogY29uc3QgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFOwotCi1ib29sIGlzV2hpdGVzcGFjZShjb25zdCBjaGFyMTZfdCogc3RyKTsKLQotU3RyaW5nMTYgZ2V0TmFtZXNwYWNlUmVzb3VyY2VQYWNrYWdlKFN0cmluZzE2IG5hbWVzcGFjZVVyaSwgYm9vbCogb3V0SXNQdWJsaWMgPSBOVUxMKTsKLQotc3RhdHVzX3QgcGFyc2VTdHlsZWRTdHJpbmcoQnVuZGxlKiBidW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1hNTFRyZWUqIGluWG1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGVuZFRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2KiBvdXRTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4qIG91dFNwYW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0Zvcm1hdHRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNQc2V1ZG9sb2NhbGl6YWJsZSk7Ci0KLXZvaWQgcHJpbnRYTUxCbG9jayhSZXNYTUxUcmVlKiBibG9jayk7Ci0KLXN0YXR1c190IHBhcnNlWE1MUmVzb3VyY2UoY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlLCBSZXNYTUxUcmVlKiBvdXRUcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0cmlwQWxsPXRydWUsIGJvb2wga2VlcENvbW1lbnRzPWZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogY0RhdGFUYWdzPU5VTEwpOwotCi1jbGFzcyBYTUxOb2RlIDogcHVibGljIFJlZkJhc2UKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3A8WE1MTm9kZT4gcGFyc2UoY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlKTsKLQotICAgIHN0YXRpYyBpbmxpbmUKLSAgICBzcDxYTUxOb2RlPiBuZXdOYW1lc3BhY2UoY29uc3QgU3RyaW5nOCYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZzE2JiBwcmVmaXgsIGNvbnN0IFN0cmluZzE2JiB1cmkpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBYTUxOb2RlKGZpbGVuYW1lLCBwcmVmaXgsIHVyaSwgdHJ1ZSk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBpbmxpbmUKLSAgICBzcDxYTUxOb2RlPiBuZXdFbGVtZW50KGNvbnN0IFN0cmluZzgmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcxNiYgbnMsIGNvbnN0IFN0cmluZzE2JiBuYW1lKSB7Ci0gICAgICAgIHJldHVybiBuZXcgWE1MTm9kZShmaWxlbmFtZSwgbnMsIG5hbWUsIGZhbHNlKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGlubGluZQotICAgIHNwPFhNTE5vZGU+IG5ld0NEYXRhKGNvbnN0IFN0cmluZzgmIGZpbGVuYW1lKSB7Ci0gICAgICAgIHJldHVybiBuZXcgWE1MTm9kZShmaWxlbmFtZSk7Ci0gICAgfQotICAgIAotICAgIGVudW0gdHlwZSB7Ci0gICAgICAgIFRZUEVfTkFNRVNQQUNFLAotICAgICAgICBUWVBFX0VMRU1FTlQsCi0gICAgICAgIFRZUEVfQ0RBVEEKLSAgICB9OwotICAgIAotICAgIHR5cGUgZ2V0VHlwZSgpIGNvbnN0OwotICAgIAotICAgIGNvbnN0IFN0cmluZzE2JiBnZXROYW1lc3BhY2VQcmVmaXgoKSBjb25zdDsKLSAgICBjb25zdCBTdHJpbmcxNiYgZ2V0TmFtZXNwYWNlVXJpKCkgY29uc3Q7Ci0gICAgCi0gICAgY29uc3QgU3RyaW5nMTYmIGdldEVsZW1lbnROYW1lc3BhY2UoKSBjb25zdDsKLSAgICBjb25zdCBTdHJpbmcxNiYgZ2V0RWxlbWVudE5hbWUoKSBjb25zdDsKLSAgICBjb25zdCBWZWN0b3I8c3A8WE1MTm9kZT4gPiYgZ2V0Q2hpbGRyZW4oKSBjb25zdDsKLQotICAgIGNvbnN0IFN0cmluZzgmIGdldEZpbGVuYW1lKCkgY29uc3Q7Ci0gICAgCi0gICAgc3RydWN0IGF0dHJpYnV0ZV9lbnRyeSB7Ci0gICAgICAgIGF0dHJpYnV0ZV9lbnRyeSgpIDogaW5kZXgofih1aW50MzJfdCkwKSwgbmFtZVJlc0lkKDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbHVlLmRhdGFUeXBlID0gUmVzX3ZhbHVlOjpUWVBFX05VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIG5lZWRTdHJpbmdWYWx1ZSgpIGNvbnN0IHsKLSAgICAgICAgICAgIHJldHVybiBuYW1lUmVzSWQgPT0gMAotICAgICAgICAgICAgICAgIHx8IHZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9OVUxMCi0gICAgICAgICAgICAgICAgfHwgdmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX1NUUklORzsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RyaW5nMTYgbnM7Ci0gICAgICAgIFN0cmluZzE2IG5hbWU7Ci0gICAgICAgIFN0cmluZzE2IHN0cmluZzsKLSAgICAgICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAgdWludDMyX3QgbmFtZVJlc0lkOwotICAgICAgICBtdXRhYmxlIHVpbnQzMl90IG5hbWVQb29sSWR4OwotICAgIH07Ci0KLSAgICBjb25zdCBWZWN0b3I8YXR0cmlidXRlX2VudHJ5PiYgZ2V0QXR0cmlidXRlcygpIGNvbnN0OwotCi0gICAgY29uc3QgYXR0cmlidXRlX2VudHJ5KiBnZXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nMTYmIG5zLCBjb25zdCBTdHJpbmcxNiYgbmFtZSkgY29uc3Q7Ci0gICAgCi0gICAgYXR0cmlidXRlX2VudHJ5KiBlZGl0QXR0cmlidXRlKGNvbnN0IFN0cmluZzE2JiBucywgY29uc3QgU3RyaW5nMTYmIG5hbWUpOwotCi0gICAgY29uc3QgU3RyaW5nMTYmIGdldENEYXRhKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBTdHJpbmcxNiYgZ2V0Q29tbWVudCgpIGNvbnN0OwotCi0gICAgaW50MzJfdCBnZXRTdGFydExpbmVOdW1iZXIoKSBjb25zdDsKLSAgICBpbnQzMl90IGdldEVuZExpbmVOdW1iZXIoKSBjb25zdDsKLQotICAgIHNwPFhNTE5vZGU+IHNlYXJjaEVsZW1lbnQoY29uc3QgU3RyaW5nMTYmIHRhZ05hbWVzcGFjZSwgY29uc3QgU3RyaW5nMTYmIHRhZ05hbWUpOwotICAgIAotICAgIHNwPFhNTE5vZGU+IGdldENoaWxkRWxlbWVudChjb25zdCBTdHJpbmcxNiYgdGFnTmFtZXNwYWNlLCBjb25zdCBTdHJpbmcxNiYgdGFnTmFtZSk7Ci0gICAgCi0gICAgc3RhdHVzX3QgYWRkQ2hpbGQoY29uc3Qgc3A8WE1MTm9kZT4mIGNoaWxkKTsKLQotICAgIHN0YXR1c190IGluc2VydENoaWxkQXQoY29uc3Qgc3A8WE1MTm9kZT4mIGNoaWxkLCBzaXplX3QgaW5kZXgpOwotCi0gICAgc3RhdHVzX3QgYWRkQXR0cmlidXRlKGNvbnN0IFN0cmluZzE2JiBucywgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB2YWx1ZSk7Ci0KLSAgICB2b2lkIHNldEF0dHJpYnV0ZVJlc0lEKHNpemVfdCBhdHRySWR4LCB1aW50MzJfdCByZXNJZCk7Ci0KLSAgICBzdGF0dXNfdCBhcHBlbmRDaGFycyhjb25zdCBTdHJpbmcxNiYgY2hhcnMpOwotCi0gICAgc3RhdHVzX3QgYXBwZW5kQ29tbWVudChjb25zdCBTdHJpbmcxNiYgY29tbWVudCk7Ci0KLSAgICB2b2lkIHNldFN0YXJ0TGluZU51bWJlcihpbnQzMl90IGxpbmUpOwotICAgIHZvaWQgc2V0RW5kTGluZU51bWJlcihpbnQzMl90IGxpbmUpOwotCi0gICAgdm9pZCByZW1vdmVXaGl0ZXNwYWNlKGJvb2wgc3RyaXBBbGw9dHJ1ZSwgY29uc3QgY2hhcioqIGNEYXRhVGFncz1OVUxMKTsKLQotICAgIHZvaWQgc2V0VVRGOChib29sIHZhbCkgeyBtVVRGOCA9IHZhbDsgfQotCi0gICAgc3RhdHVzX3QgcGFyc2VWYWx1ZXMoY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywgUmVzb3VyY2VUYWJsZSogdGFibGUpOwotCi0gICAgc3RhdHVzX3QgYXNzaWduUmVzb3VyY2VJZHMoY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVRhYmxlKiB0YWJsZSA9IE5VTEwpOwotCi0gICAgc3RhdHVzX3QgZmxhdHRlbihjb25zdCBzcDxBYXB0RmlsZT4mIGRlc3QsIGJvb2wgc3RyaXBDb21tZW50cywKLSAgICAgICAgICAgIGJvb2wgc3RyaXBSYXdWYWx1ZXMpIGNvbnN0OwotCi0gICAgdm9pZCBwcmludChpbnQgaW5kZW50PTApOwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBQYXJzZVN0YXRlCi0gICAgewotICAgICAgICBTdHJpbmc4IGZpbGVuYW1lOwotICAgICAgICBYTUxfUGFyc2VyIHBhcnNlcjsKLSAgICAgICAgc3A8WE1MTm9kZT4gcm9vdDsKLSAgICAgICAgVmVjdG9yPHNwPFhNTE5vZGU+ID4gc3RhY2s7Ci0gICAgICAgIFN0cmluZzE2IHBlbmRpbmdDb21tZW50OwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBYTUxDQUxMCi0gICAgc3RhcnROYW1lc3BhY2Uodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqdXJpKTsKLSAgICBzdGF0aWMgdm9pZCBYTUxDQUxMCi0gICAgc3RhcnRFbGVtZW50KHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICoqYXR0cyk7Ci0gICAgc3RhdGljIHZvaWQgWE1MQ0FMTAotICAgIGNoYXJhY3RlckRhdGEodm9pZCAqdXNlckRhdGEsIGNvbnN0IFhNTF9DaGFyICpzLCBpbnQgbGVuKTsKLSAgICBzdGF0aWMgdm9pZCBYTUxDQUxMCi0gICAgZW5kRWxlbWVudCh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgWE1MQ0FMTAotICAgIGVuZE5hbWVzcGFjZSh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqcHJlZml4KTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCBYTUxDQUxMCi0gICAgY29tbWVudERhdGEodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKmNvbW1lbnQpOwotICAgIAotICAgIC8vIENyZWF0aW5nIGFuIGVsZW1lbnQgbm9kZS4KLSAgICBYTUxOb2RlKGNvbnN0IFN0cmluZzgmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcxNiYgczEsIGNvbnN0IFN0cmluZzE2JiBzMiwgYm9vbCBpc05hbWVzcGFjZSk7Ci0gICAgCi0gICAgLy8gQ3JlYXRpbmcgYSBDREFUQSBub2RlLgotICAgIFhNTE5vZGUoY29uc3QgU3RyaW5nOCYgZmlsZW5hbWUpOwotICAgIAotICAgIHN0YXR1c190IGNvbGxlY3Rfc3RyaW5ncyhTdHJpbmdQb29sKiBkZXN0LCBWZWN0b3I8dWludDMyX3Q+KiBvdXRSZXNJZHMsCi0gICAgICAgICAgICBib29sIHN0cmlwQ29tbWVudHMsIGJvb2wgc3RyaXBSYXdWYWx1ZXMpIGNvbnN0OwotCi0gICAgc3RhdHVzX3QgY29sbGVjdF9hdHRyX3N0cmluZ3MoU3RyaW5nUG9vbCogb3V0UG9vbCwKLSAgICAgICAgVmVjdG9yPHVpbnQzMl90Piogb3V0UmVzSWRzLCBib29sIGFsbEF0dHJzKSBjb25zdDsKLSAgICAgICAgCi0gICAgc3RhdHVzX3QgY29sbGVjdF9yZXNpZF9zdHJpbmdzKFN0cmluZ1Bvb2wqIG91dFBvb2wsCi0gICAgICAgICAgICBWZWN0b3I8dWludDMyX3Q+KiBvdXRSZXNJZHMpIGNvbnN0OwotCi0gICAgc3RhdHVzX3QgZmxhdHRlbl9ub2RlKGNvbnN0IFN0cmluZ1Bvb2wmIHN0cmluZ3MsIGNvbnN0IHNwPEFhcHRGaWxlPiYgZGVzdCwKLSAgICAgICAgICAgIGJvb2wgc3RyaXBDb21tZW50cywgYm9vbCBzdHJpcFJhd1ZhbHVlcykgY29uc3Q7Ci0KLSAgICBTdHJpbmcxNiBtTmFtZXNwYWNlUHJlZml4OwotICAgIFN0cmluZzE2IG1OYW1lc3BhY2VVcmk7Ci0gICAgU3RyaW5nMTYgbUVsZW1lbnROYW1lOwotICAgIFZlY3RvcjxzcDxYTUxOb2RlPiA+IG1DaGlsZHJlbjsKLSAgICBWZWN0b3I8YXR0cmlidXRlX2VudHJ5PiBtQXR0cmlidXRlczsKLSAgICBLZXllZFZlY3Rvcjx1aW50MzJfdCwgdWludDMyX3Q+IG1BdHRyaWJ1dGVPcmRlcjsKLSAgICB1aW50MzJfdCBtTmV4dEF0dHJpYnV0ZUluZGV4OwotICAgIFN0cmluZzE2IG1DaGFyczsKLSAgICBSZXNfdmFsdWUgbUNoYXJzVmFsdWU7Ci0gICAgU3RyaW5nMTYgbUNvbW1lbnQ7Ci0gICAgU3RyaW5nOCBtRmlsZW5hbWU7Ci0gICAgaW50MzJfdCBtU3RhcnRMaW5lTnVtYmVyOwotICAgIGludDMyX3QgbUVuZExpbmVOdW1iZXI7Ci0KLSAgICAvLyBFbmNvZGUgY29tcGlsZWQgWE1MIHdpdGggVVRGLTggU3RyaW5nUG9vbHM/Ci0gICAgYm9vbCBtVVRGODsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9aaXBFbnRyeS5jcHAgYi90b29scy9hYXB0L1ppcEVudHJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU3NTk4OC4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1ppcEVudHJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8KLS8vIEFjY2VzcyB0byBlbnRyaWVzIGluIGEgWmlwIGFyY2hpdmUuCi0vLwotCi0jZGVmaW5lIExPR19UQUcgInppcCIKLQotI2luY2x1ZGUgIlppcEVudHJ5LmgiCi0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotLyoKLSAqIEluaXRpYWxpemUgYSBuZXcgWmlwRW50cnkgc3RydWN0dXJlIGZyb20gYSBGSUxFKiBwb3NpdGlvbmVkIGF0IGEKLSAqIENlbnRyYWxEaXJlY3RvcnlFbnRyeS4KLSAqCi0gKiBPbiBleGl0LCB0aGUgZmlsZSBwb2ludGVyIHdpbGwgYmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IENERSBvcgotICogYXQgdGhlIEVPQ0QuCi0gKi8KLXN0YXR1c190IFppcEVudHJ5Ojppbml0RnJvbUNERShGSUxFKiBmcCkKLXsKLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0gICAgbG9uZyBwb3NuOwotICAgIGJvb2wgaGFzREQ7Ci0KLSAgICAvL0FMT0dWKCJpbml0RnJvbUNERSAtLS1cbiIpOwotCi0gICAgLyogcmVhZCB0aGUgQ0RFICovCi0gICAgcmVzdWx0ID0gbUNERS5yZWFkKGZwKTsKLSAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIEFMT0dEKCJtQ0RFLnJlYWQgZmFpbGVkXG4iKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvL21DREUuZHVtcCgpOwotCi0gICAgLyogdXNpbmcgdGhlIGluZm8gaW4gdGhlIENERSwgZ28gbG9hZCB1cCB0aGUgTEZIICovCi0gICAgcG9zbiA9IGZ0ZWxsKGZwKTsKLSAgICBpZiAoZnNlZWsoZnAsIG1DREUubUxvY2FsSGVhZGVyUmVsT2Zmc2V0LCBTRUVLX1NFVCkgIT0gMCkgewotICAgICAgICBBTE9HRCgibG9jYWwgaGVhZGVyIHNlZWsgZmFpbGVkICglbGQpXG4iLAotICAgICAgICAgICAgbUNERS5tTG9jYWxIZWFkZXJSZWxPZmZzZXQpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBtTEZILnJlYWQoZnApOwotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgQUxPR0QoIm1MRkgucmVhZCBmYWlsZWRcbiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGlmIChmc2VlayhmcCwgcG9zbiwgU0VFS19TRVQpICE9IDApCi0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotCi0gICAgLy9tTEZILmR1bXAoKTsKLQotICAgIC8qCi0gICAgICogV2UgKm1pZ2h0KiBuZWVkIHRvIHJlYWQgdGhlIERhdGEgRGVzY3JpcHRvciBhdCB0aGlzIHBvaW50IGFuZAotICAgICAqIGludGVncmF0ZSBpdCBpbnRvIHRoZSBMRkguICBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBDUkMtMzIsCi0gICAgICogY29tcHJlc3NlZCBzaXplLCBhbmQgdW5jb21wcmVzc2VkIHNpemUgd2lsbCBiZSB6ZXJvLiAgSW4gcHJhY3RpY2UKLSAgICAgKiB0aGVzZSBzZWVtIHRvIGJlIHJhcmUuCi0gICAgICovCi0gICAgaGFzREQgPSAobUxGSC5tR1BCaXRGbGFnICYga1VzZXNEYXRhRGVzY3IpICE9IDA7Ci0gICAgaWYgKGhhc0REKSB7Ci0gICAgICAgIC8vIGRvIHNvbWV0aGluZyBjbGV2ZXIKLSAgICAgICAgLy9BTE9HRCgiKysrIGhhcyBkYXRhIGRlc2NyaXB0b3JcbiIpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogU2FuaXR5LWNoZWNrIHRoZSBMRkguICBOb3RlIHRoYXQgdGhpcyB3aWxsIGZhaWwgaWYgdGhlICJrVXNlc0RhdGFEZXNjciIKLSAgICAgKiBmbGFnIGlzIHNldCwgYmVjYXVzZSB0aGUgTEZIIGlzIGluY29tcGxldGUuICAoTm90IGEgcHJvYmxlbSwgc2luY2Ugd2UKLSAgICAgKiBwcmVmZXIgdGhlIENERSB2YWx1ZXMuKQotICAgICAqLwotICAgIGlmICghaGFzREQgJiYgIWNvbXBhcmVIZWFkZXJzKCkpIHsKLSAgICAgICAgQUxPR1coIndhcm5pbmc6IGhlYWRlciBtaXNtYXRjaFxuIik7Ci0gICAgICAgIC8vIGtlZXAgZ29pbmc/Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJZiB0aGUgbVZlcnNpb25Ub0V4dHJhY3QgaXMgZ3JlYXRlciB0aGFuIDIwLCB3ZSBtYXkgaGF2ZSBhbgotICAgICAqIGlzc3VlIHVucGFja2luZyB0aGUgcmVjb3JkIC0tIGNvdWxkIGJlIGVuY3J5cHRlZCwgY29tcHJlc3NlZAotICAgICAqIHdpdGggc29tZXRoaW5nIHdlIGRvbid0IHN1cHBvcnQsIG9yIHVzZSBaaXA2NCBleHRlbnNpb25zLiAgV2UKLSAgICAgKiBjYW4gZGVmZXIgd29ycnlpbmcgYWJvdXQgdGhhdCB0byB3aGVuIHdlJ3JlIGV4dHJhY3RpbmcgZGF0YS4KLSAgICAgKi8KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgYSBuZXcgZW50cnkuICBQYXNzIGluIHRoZSBmaWxlIG5hbWUgYW5kIGFuIG9wdGlvbmFsIGNvbW1lbnQuCi0gKgotICogSW5pdGlhbGl6ZXMgdGhlIENERSBhbmQgdGhlIExGSC4KLSAqLwotdm9pZCBaaXBFbnRyeTo6aW5pdE5ldyhjb25zdCBjaGFyKiBmaWxlTmFtZSwgY29uc3QgY2hhciogY29tbWVudCkKLXsKLSAgICBhc3NlcnQoZmlsZU5hbWUgIT0gTlVMTCAmJiAqZmlsZU5hbWUgIT0gJ1wwJyk7ICAvLyBuYW1lIHJlcXVpcmVkCi0KLSAgICAvKiBtb3N0IGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYnkgY29uc3RydWN0b3IgKi8KLSAgICBtQ0RFLm1WZXJzaW9uTWFkZUJ5ID0ga0RlZmF1bHRNYWRlQnk7Ci0gICAgbUNERS5tVmVyc2lvblRvRXh0cmFjdCA9IGtEZWZhdWx0VmVyc2lvbjsKLSAgICBtQ0RFLm1Db21wcmVzc2lvbk1ldGhvZCA9IGtDb21wcmVzc1N0b3JlZDsKLSAgICBtQ0RFLm1GaWxlTmFtZUxlbmd0aCA9IHN0cmxlbihmaWxlTmFtZSk7Ci0gICAgaWYgKGNvbW1lbnQgIT0gTlVMTCkKLSAgICAgICAgbUNERS5tRmlsZUNvbW1lbnRMZW5ndGggPSBzdHJsZW4oY29tbWVudCk7Ci0gICAgbUNERS5tRXh0ZXJuYWxBdHRycyA9IDB4ODFiNjAwMjA7ICAgLy8gbWF0Y2hlcyB3aGF0IFdpblppcCBkb2VzCi0KLSAgICBpZiAobUNERS5tRmlsZU5hbWVMZW5ndGggPiAwKSB7Ci0gICAgICAgIG1DREUubUZpbGVOYW1lID0gbmV3IHVuc2lnbmVkIGNoYXJbbUNERS5tRmlsZU5hbWVMZW5ndGgrMV07Ci0gICAgICAgIHN0cmNweSgoY2hhciopIG1DREUubUZpbGVOYW1lLCBmaWxlTmFtZSk7Ci0gICAgfQotICAgIGlmIChtQ0RFLm1GaWxlQ29tbWVudExlbmd0aCA+IDApIHsKLSAgICAgICAgLyogVE9ETzogc3RvcCBhc3N1bWluZyBudWxsLXRlcm1pbmF0ZWQgQVNDSUkgaGVyZT8gKi8KLSAgICAgICAgbUNERS5tRmlsZUNvbW1lbnQgPSBuZXcgdW5zaWduZWQgY2hhclttQ0RFLm1GaWxlQ29tbWVudExlbmd0aCsxXTsKLSAgICAgICAgc3RyY3B5KChjaGFyKikgbUNERS5tRmlsZUNvbW1lbnQsIGNvbW1lbnQpOwotICAgIH0KLQotICAgIGNvcHlDREV0b0xGSCgpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBhIG5ldyBlbnRyeSwgc3RhcnRpbmcgd2l0aCB0aGUgWmlwRW50cnkgZnJvbSBhIGRpZmZlcmVudAotICogYXJjaGl2ZS4KLSAqCi0gKiBJbml0aWFsaXplcyB0aGUgQ0RFIGFuZCB0aGUgTEZILgotICovCi1zdGF0dXNfdCBaaXBFbnRyeTo6aW5pdEZyb21FeHRlcm5hbChjb25zdCBaaXBGaWxlKiBwWmlwRmlsZSwKLSAgICBjb25zdCBaaXBFbnRyeSogcEVudHJ5KQotewotICAgIC8qCi0gICAgICogQ29weSBldmVyeXRoaW5nIGluIHRoZSBDREUgb3ZlciwgdGhlbiBmaXggdXAgdGhlIGhhaXJ5IGJpdHMuCi0gICAgICovCi0gICAgbWVtY3B5KCZtQ0RFLCAmcEVudHJ5LT5tQ0RFLCBzaXplb2YobUNERSkpOwotCi0gICAgaWYgKG1DREUubUZpbGVOYW1lTGVuZ3RoID4gMCkgewotICAgICAgICBtQ0RFLm1GaWxlTmFtZSA9IG5ldyB1bnNpZ25lZCBjaGFyW21DREUubUZpbGVOYW1lTGVuZ3RoKzFdOwotICAgICAgICBpZiAobUNERS5tRmlsZU5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIHN0cmNweSgoY2hhciopIG1DREUubUZpbGVOYW1lLCAoY2hhciopcEVudHJ5LT5tQ0RFLm1GaWxlTmFtZSk7Ci0gICAgfQotICAgIGlmIChtQ0RFLm1GaWxlQ29tbWVudExlbmd0aCA+IDApIHsKLSAgICAgICAgbUNERS5tRmlsZUNvbW1lbnQgPSBuZXcgdW5zaWduZWQgY2hhclttQ0RFLm1GaWxlQ29tbWVudExlbmd0aCsxXTsKLSAgICAgICAgaWYgKG1DREUubUZpbGVDb21tZW50ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgICAgICBzdHJjcHkoKGNoYXIqKSBtQ0RFLm1GaWxlQ29tbWVudCwgKGNoYXIqKXBFbnRyeS0+bUNERS5tRmlsZUNvbW1lbnQpOwotICAgIH0KLSAgICBpZiAobUNERS5tRXh0cmFGaWVsZExlbmd0aCA+IDApIHsKLSAgICAgICAgLyogd2UgbnVsbC10ZXJtaW5hdGUgdGhpcywgdGhvdWdoIGl0IG1heSBub3QgYmUgYSBzdHJpbmcgKi8KLSAgICAgICAgbUNERS5tRXh0cmFGaWVsZCA9IG5ldyB1bnNpZ25lZCBjaGFyW21DREUubUV4dHJhRmllbGRMZW5ndGgrMV07Ci0gICAgICAgIGlmIChtQ0RFLm1FeHRyYUZpZWxkID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgICAgICBtZW1jcHkobUNERS5tRXh0cmFGaWVsZCwgcEVudHJ5LT5tQ0RFLm1FeHRyYUZpZWxkLAotICAgICAgICAgICAgbUNERS5tRXh0cmFGaWVsZExlbmd0aCsxKTsKLSAgICB9Ci0KLSAgICAvKiBjb25zdHJ1Y3QgdGhlIExGSCBmcm9tIHRoZSBDREUgKi8KLSAgICBjb3B5Q0RFdG9MRkgoKTsKLQotICAgIC8qCi0gICAgICogVGhlIExGSCAiZXh0cmEiIGZpZWxkIGlzIGluZGVwZW5kZW50IG9mIHRoZSBDREUgImV4dHJhIiwgc28gd2UKLSAgICAgKiBoYW5kbGUgaXQgaGVyZS4KLSAgICAgKi8KLSAgICBhc3NlcnQobUxGSC5tRXh0cmFGaWVsZCA9PSBOVUxMKTsKLSAgICBtTEZILm1FeHRyYUZpZWxkTGVuZ3RoID0gcEVudHJ5LT5tTEZILm1FeHRyYUZpZWxkTGVuZ3RoOwotICAgIGlmIChtTEZILm1FeHRyYUZpZWxkTGVuZ3RoID4gMCkgewotICAgICAgICBtTEZILm1FeHRyYUZpZWxkID0gbmV3IHVuc2lnbmVkIGNoYXJbbUxGSC5tRXh0cmFGaWVsZExlbmd0aCsxXTsKLSAgICAgICAgaWYgKG1MRkgubUV4dHJhRmllbGQgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIG1lbWNweShtTEZILm1FeHRyYUZpZWxkLCBwRW50cnktPm1MRkgubUV4dHJhRmllbGQsCi0gICAgICAgICAgICBtTEZILm1FeHRyYUZpZWxkTGVuZ3RoKzEpOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIEluc2VydCBwYWQgYnl0ZXMgaW4gdGhlIExGSCBieSB0d2Vha2luZyB0aGUgImV4dHJhIiBmaWVsZC4gIFRoaXMgd2lsbAotICogcG90ZW50aWFsbHkgY29uZnVzZSBzb21ldGhpbmcgdGhhdCBwdXQgImV4dHJhIiBkYXRhIGluIGhlcmUgZWFybGllciwKLSAqIGJ1dCBJIGNhbid0IGZpbmQgYW4gYWN0dWFsIHByb2JsZW0uCi0gKi8KLXN0YXR1c190IFppcEVudHJ5OjphZGRQYWRkaW5nKGludCBwYWRkaW5nKQotewotICAgIGlmIChwYWRkaW5nIDw9IDApCi0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLQotICAgIC8vQUxPR0koIkhFWTogYWRkaW5nICVkIHBhZCBieXRlcyB0byBleGlzdGluZyAlZCBpbiAlc1xuIiwKLSAgICAvLyAgICBwYWRkaW5nLCBtTEZILm1FeHRyYUZpZWxkTGVuZ3RoLCBtQ0RFLm1GaWxlTmFtZSk7Ci0KLSAgICBpZiAobUxGSC5tRXh0cmFGaWVsZExlbmd0aCA+IDApIHsKLSAgICAgICAgLyogZXh0ZW5kIGV4aXN0aW5nIGZpZWxkICovCi0gICAgICAgIHVuc2lnbmVkIGNoYXIqIG5ld0V4dHJhOwotCi0gICAgICAgIG5ld0V4dHJhID0gbmV3IHVuc2lnbmVkIGNoYXJbbUxGSC5tRXh0cmFGaWVsZExlbmd0aCArIHBhZGRpbmddOwotICAgICAgICBpZiAobmV3RXh0cmEgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIG1lbXNldChuZXdFeHRyYSArIG1MRkgubUV4dHJhRmllbGRMZW5ndGgsIDAsIHBhZGRpbmcpOwotICAgICAgICBtZW1jcHkobmV3RXh0cmEsIG1MRkgubUV4dHJhRmllbGQsIG1MRkgubUV4dHJhRmllbGRMZW5ndGgpOwotCi0gICAgICAgIGRlbGV0ZVtdIG1MRkgubUV4dHJhRmllbGQ7Ci0gICAgICAgIG1MRkgubUV4dHJhRmllbGQgPSBuZXdFeHRyYTsKLSAgICAgICAgbUxGSC5tRXh0cmFGaWVsZExlbmd0aCArPSBwYWRkaW5nOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGNyZWF0ZSBuZXcgZmllbGQgKi8KLSAgICAgICAgbUxGSC5tRXh0cmFGaWVsZCA9IG5ldyB1bnNpZ25lZCBjaGFyW3BhZGRpbmddOwotICAgICAgICBtZW1zZXQobUxGSC5tRXh0cmFGaWVsZCwgMCwgcGFkZGluZyk7Ci0gICAgICAgIG1MRkgubUV4dHJhRmllbGRMZW5ndGggPSBwYWRkaW5nOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIFNldCB0aGUgZmllbGRzIGluIHRoZSBMRkggZXF1YWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIGluIHRoZSBDREUuCi0gKgotICogVGhpcyBkb2VzIG5vdCB0b3VjaCB0aGUgTEZIICJleHRyYSIgZmllbGQuCi0gKi8KLXZvaWQgWmlwRW50cnk6OmNvcHlDREV0b0xGSCh2b2lkKQotewotICAgIG1MRkgubVZlcnNpb25Ub0V4dHJhY3QgID0gbUNERS5tVmVyc2lvblRvRXh0cmFjdDsKLSAgICBtTEZILm1HUEJpdEZsYWcgICAgICAgICA9IG1DREUubUdQQml0RmxhZzsKLSAgICBtTEZILm1Db21wcmVzc2lvbk1ldGhvZCA9IG1DREUubUNvbXByZXNzaW9uTWV0aG9kOwotICAgIG1MRkgubUxhc3RNb2RGaWxlVGltZSAgID0gbUNERS5tTGFzdE1vZEZpbGVUaW1lOwotICAgIG1MRkgubUxhc3RNb2RGaWxlRGF0ZSAgID0gbUNERS5tTGFzdE1vZEZpbGVEYXRlOwotICAgIG1MRkgubUNSQzMyICAgICAgICAgICAgID0gbUNERS5tQ1JDMzI7Ci0gICAgbUxGSC5tQ29tcHJlc3NlZFNpemUgICAgPSBtQ0RFLm1Db21wcmVzc2VkU2l6ZTsKLSAgICBtTEZILm1VbmNvbXByZXNzZWRTaXplICA9IG1DREUubVVuY29tcHJlc3NlZFNpemU7Ci0gICAgbUxGSC5tRmlsZU5hbWVMZW5ndGggICAgPSBtQ0RFLm1GaWxlTmFtZUxlbmd0aDsKLSAgICAvLyB0aGUgImV4dHJhIGZpZWxkIiBpcyBpbmRlcGVuZGVudAotCi0gICAgZGVsZXRlW10gbUxGSC5tRmlsZU5hbWU7Ci0gICAgaWYgKG1MRkgubUZpbGVOYW1lTGVuZ3RoID4gMCkgewotICAgICAgICBtTEZILm1GaWxlTmFtZSA9IG5ldyB1bnNpZ25lZCBjaGFyW21MRkgubUZpbGVOYW1lTGVuZ3RoKzFdOwotICAgICAgICBzdHJjcHkoKGNoYXIqKSBtTEZILm1GaWxlTmFtZSwgKGNvbnN0IGNoYXIqKSBtQ0RFLm1GaWxlTmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbUxGSC5tRmlsZU5hbWUgPSBOVUxMOwotICAgIH0KLX0KLQotLyoKLSAqIFNldCBzb21lIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZSBhZnRlciB3ZSBhZGQgaXQuCi0gKi8KLXZvaWQgWmlwRW50cnk6OnNldERhdGFJbmZvKGxvbmcgdW5jb21wTGVuLCBsb25nIGNvbXBMZW4sIHVuc2lnbmVkIGxvbmcgY3JjMzIsCi0gICAgaW50IGNvbXByZXNzaW9uTWV0aG9kKQotewotICAgIG1DREUubUNvbXByZXNzaW9uTWV0aG9kID0gY29tcHJlc3Npb25NZXRob2Q7Ci0gICAgbUNERS5tQ1JDMzIgPSBjcmMzMjsKLSAgICBtQ0RFLm1Db21wcmVzc2VkU2l6ZSA9IGNvbXBMZW47Ci0gICAgbUNERS5tVW5jb21wcmVzc2VkU2l6ZSA9IHVuY29tcExlbjsKLSAgICBtQ0RFLm1Db21wcmVzc2lvbk1ldGhvZCA9IGNvbXByZXNzaW9uTWV0aG9kOwotICAgIGlmIChjb21wcmVzc2lvbk1ldGhvZCA9PSBrQ29tcHJlc3NEZWZsYXRlZCkgewotICAgICAgICBtQ0RFLm1HUEJpdEZsYWcgfD0gMHgwMDAyOyAgICAgIC8vIGluZGljYXRlcyBtYXhpbXVtIGNvbXByZXNzaW9uIHVzZWQKLSAgICB9Ci0gICAgY29weUNERXRvTEZIKCk7Ci19Ci0KLS8qCi0gKiBTZWUgaWYgdGhlIGRhdGEgaW4gbUNERSBhbmQgbUxGSCBtYXRjaCB1cC4gIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IKLSAqIGRlYnVnZ2luZyB0aGVzZSBjbGFzc2VzLCBidXQgaXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgZGFtYWdlZAotICogYXJjaGl2ZXMuCi0gKgotICogUmV0dXJucyAiZmFsc2UiIGlmIHRoZXkgZGlmZmVyLgotICovCi1ib29sIFppcEVudHJ5Ojpjb21wYXJlSGVhZGVycyh2b2lkKSBjb25zdAotewotICAgIGlmIChtQ0RFLm1WZXJzaW9uVG9FeHRyYWN0ICE9IG1MRkgubVZlcnNpb25Ub0V4dHJhY3QpIHsKLSAgICAgICAgQUxPR1YoImNtcDogVmVyc2lvblRvRXh0cmFjdFxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG1DREUubUdQQml0RmxhZyAhPSBtTEZILm1HUEJpdEZsYWcpIHsKLSAgICAgICAgQUxPR1YoImNtcDogR1BCaXRGbGFnXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobUNERS5tQ29tcHJlc3Npb25NZXRob2QgIT0gbUxGSC5tQ29tcHJlc3Npb25NZXRob2QpIHsKLSAgICAgICAgQUxPR1YoImNtcDogQ29tcHJlc3Npb25NZXRob2RcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtQ0RFLm1MYXN0TW9kRmlsZVRpbWUgIT0gbUxGSC5tTGFzdE1vZEZpbGVUaW1lKSB7Ci0gICAgICAgIEFMT0dWKCJjbXA6IExhc3RNb2RGaWxlVGltZVxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG1DREUubUxhc3RNb2RGaWxlRGF0ZSAhPSBtTEZILm1MYXN0TW9kRmlsZURhdGUpIHsKLSAgICAgICAgQUxPR1YoImNtcDogTGFzdE1vZEZpbGVEYXRlXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobUNERS5tQ1JDMzIgIT0gbUxGSC5tQ1JDMzIpIHsKLSAgICAgICAgQUxPR1YoImNtcDogQ1JDMzJcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtQ0RFLm1Db21wcmVzc2VkU2l6ZSAhPSBtTEZILm1Db21wcmVzc2VkU2l6ZSkgewotICAgICAgICBBTE9HVigiY21wOiBDb21wcmVzc2VkU2l6ZVxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG1DREUubVVuY29tcHJlc3NlZFNpemUgIT0gbUxGSC5tVW5jb21wcmVzc2VkU2l6ZSkgewotICAgICAgICBBTE9HVigiY21wOiBVbmNvbXByZXNzZWRTaXplXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobUNERS5tRmlsZU5hbWVMZW5ndGggIT0gbUxGSC5tRmlsZU5hbWVMZW5ndGgpIHsKLSAgICAgICAgQUxPR1YoImNtcDogRmlsZU5hbWVMZW5ndGhcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotI2lmIDAgICAgICAgLy8gdGhpcyBzZWVtcyB0byBiZSB1c2VkIGZvciBwYWRkaW5nLCBub3QgcmVhbCBkYXRhCi0gICAgaWYgKG1DREUubUV4dHJhRmllbGRMZW5ndGggIT0gbUxGSC5tRXh0cmFGaWVsZExlbmd0aCkgewotICAgICAgICBBTE9HVigiY21wOiBFeHRyYUZpZWxkTGVuZ3RoXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSNlbmRpZgotICAgIGlmIChtQ0RFLm1GaWxlTmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChzdHJjbXAoKGNoYXIqKSBtQ0RFLm1GaWxlTmFtZSwgKGNoYXIqKSBtTEZILm1GaWxlTmFtZSkgIT0gMCkgewotICAgICAgICAgICAgQUxPR1YoImNtcDogRmlsZU5hbWVcbiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotLyoKLSAqIENvbnZlcnQgdGhlIERPUyBkYXRlL3RpbWUgc3RhbXAgaW50byBhIFVOSVggdGltZSBzdGFtcC4KLSAqLwotdGltZV90IFppcEVudHJ5OjpnZXRNb2RXaGVuKHZvaWQpIGNvbnN0Ci17Ci0gICAgc3RydWN0IHRtIHBhcnRzOwotCi0gICAgcGFydHMudG1fc2VjID0gKG1DREUubUxhc3RNb2RGaWxlVGltZSAmIDB4MDAxZikgPDwgMTsKLSAgICBwYXJ0cy50bV9taW4gPSAobUNERS5tTGFzdE1vZEZpbGVUaW1lICYgMHgwN2UwKSA+PiA1OwotICAgIHBhcnRzLnRtX2hvdXIgPSAobUNERS5tTGFzdE1vZEZpbGVUaW1lICYgMHhmODAwKSA+PiAxMTsKLSAgICBwYXJ0cy50bV9tZGF5ID0gKG1DREUubUxhc3RNb2RGaWxlRGF0ZSAmIDB4MDAxZik7Ci0gICAgcGFydHMudG1fbW9uID0gKChtQ0RFLm1MYXN0TW9kRmlsZURhdGUgJiAweDAxZTApID4+IDUpIC0xOwotICAgIHBhcnRzLnRtX3llYXIgPSAoKG1DREUubUxhc3RNb2RGaWxlRGF0ZSAmIDB4ZmUwMCkgPj4gOSkgKyA4MDsKLSAgICBwYXJ0cy50bV93ZGF5ID0gcGFydHMudG1feWRheSA9IDA7Ci0gICAgcGFydHMudG1faXNkc3QgPSAtMTsgICAgICAgIC8vIERTVCBpbmZvICJub3QgYXZhaWxhYmxlIgotCi0gICAgcmV0dXJuIG1rdGltZSgmcGFydHMpOwotfQotCi0vKgotICogU2V0IHRoZSBDREUvTEZIIHRpbWVzdGFtcCBmcm9tIFVOSVggdGltZS4KLSAqLwotdm9pZCBaaXBFbnRyeTo6c2V0TW9kV2hlbih0aW1lX3Qgd2hlbikKLXsKLSNpZmRlZiBIQVZFX0xPQ0FMVElNRV9SCi0gICAgc3RydWN0IHRtIHRtUmVzdWx0OwotI2VuZGlmCi0gICAgdGltZV90IGV2ZW47Ci0gICAgdW5zaWduZWQgc2hvcnQgemRhdGUsIHp0aW1lOwotCi0gICAgc3RydWN0IHRtKiBwdG07Ci0KLSAgICAvKiByb3VuZCB1cCB0byBhbiBldmVuIG51bWJlciBvZiBzZWNvbmRzICovCi0gICAgZXZlbiA9ICh0aW1lX3QpKCgodW5zaWduZWQgbG9uZykod2hlbikgKyAxKSAmICh+MSkpOwotCi0gICAgLyogZXhwYW5kICovCi0jaWZkZWYgSEFWRV9MT0NBTFRJTUVfUgotICAgIHB0bSA9IGxvY2FsdGltZV9yKCZldmVuLCAmdG1SZXN1bHQpOwotI2Vsc2UKLSAgICBwdG0gPSBsb2NhbHRpbWUoJmV2ZW4pOwotI2VuZGlmCi0KLSAgICBpbnQgeWVhcjsKLSAgICB5ZWFyID0gcHRtLT50bV95ZWFyOwotICAgIGlmICh5ZWFyIDwgODApCi0gICAgICAgIHllYXIgPSA4MDsKLQotICAgIHpkYXRlID0gKHllYXIgLSA4MCkgPDwgOSB8IChwdG0tPnRtX21vbisxKSA8PCA1IHwgcHRtLT50bV9tZGF5OwotICAgIHp0aW1lID0gcHRtLT50bV9ob3VyIDw8IDExIHwgcHRtLT50bV9taW4gPDwgNSB8IHB0bS0+dG1fc2VjID4+IDE7Ci0KLSAgICBtQ0RFLm1MYXN0TW9kRmlsZVRpbWUgPSBtTEZILm1MYXN0TW9kRmlsZVRpbWUgPSB6dGltZTsKLSAgICBtQ0RFLm1MYXN0TW9kRmlsZURhdGUgPSBtTEZILm1MYXN0TW9kRmlsZURhdGUgPSB6ZGF0ZTsKLX0KLQotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgICAgIFppcEVudHJ5OjpMb2NhbEZpbGVIZWFkZXIKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLS8qCi0gKiBSZWFkIGEgbG9jYWwgZmlsZSBoZWFkZXIuCi0gKgotICogT24gZW50cnksICJmcCIgcG9pbnRzIHRvIHRoZSBzaWduYXR1cmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXIuCi0gKiBPbiBleGl0LCAiZnAiIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgZGF0YS4KLSAqLwotc3RhdHVzX3QgWmlwRW50cnk6OkxvY2FsRmlsZUhlYWRlcjo6cmVhZChGSUxFKiBmcCkKLXsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBOT19FUlJPUjsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZltrTEZITGVuXTsKLQotICAgIGFzc2VydChtRmlsZU5hbWUgPT0gTlVMTCk7Ci0gICAgYXNzZXJ0KG1FeHRyYUZpZWxkID09IE5VTEwpOwotCi0gICAgaWYgKGZyZWFkKGJ1ZiwgMSwga0xGSExlbiwgZnApICE9IGtMRkhMZW4pIHsKLSAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGlmIChaaXBFbnRyeTo6Z2V0TG9uZ0xFKCZidWZbMHgwMF0pICE9IGtTaWduYXR1cmUpIHsKLSAgICAgICAgQUxPR0QoIndob29wczogZGlkbid0IGZpbmQgZXhwZWN0ZWQgc2lnbmF0dXJlXG4iKTsKLSAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIG1WZXJzaW9uVG9FeHRyYWN0ID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDA0XSk7Ci0gICAgbUdQQml0RmxhZyA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgwNl0pOwotICAgIG1Db21wcmVzc2lvbk1ldGhvZCA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgwOF0pOwotICAgIG1MYXN0TW9kRmlsZVRpbWUgPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MGFdKTsKLSAgICBtTGFzdE1vZEZpbGVEYXRlID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDBjXSk7Ci0gICAgbUNSQzMyID0gWmlwRW50cnk6OmdldExvbmdMRSgmYnVmWzB4MGVdKTsKLSAgICBtQ29tcHJlc3NlZFNpemUgPSBaaXBFbnRyeTo6Z2V0TG9uZ0xFKCZidWZbMHgxMl0pOwotICAgIG1VbmNvbXByZXNzZWRTaXplID0gWmlwRW50cnk6OmdldExvbmdMRSgmYnVmWzB4MTZdKTsKLSAgICBtRmlsZU5hbWVMZW5ndGggPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MWFdKTsKLSAgICBtRXh0cmFGaWVsZExlbmd0aCA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgxY10pOwotCi0gICAgLy8gVE9ETzogdmFsaWRhdGUgc2l6ZXMKLQotICAgIC8qIGdyYWIgZmlsZW5hbWUgKi8KLSAgICBpZiAobUZpbGVOYW1lTGVuZ3RoICE9IDApIHsKLSAgICAgICAgbUZpbGVOYW1lID0gbmV3IHVuc2lnbmVkIGNoYXJbbUZpbGVOYW1lTGVuZ3RoKzFdOwotICAgICAgICBpZiAobUZpbGVOYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IE5PX01FTU9SWTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnJlYWQobUZpbGVOYW1lLCAxLCBtRmlsZU5hbWVMZW5ndGgsIGZwKSAhPSBtRmlsZU5hbWVMZW5ndGgpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgbUZpbGVOYW1lW21GaWxlTmFtZUxlbmd0aF0gPSAnXDAnOwotICAgIH0KLQotICAgIC8qIGdyYWIgZXh0cmEgZmllbGQgKi8KLSAgICBpZiAobUV4dHJhRmllbGRMZW5ndGggIT0gMCkgewotICAgICAgICBtRXh0cmFGaWVsZCA9IG5ldyB1bnNpZ25lZCBjaGFyW21FeHRyYUZpZWxkTGVuZ3RoKzFdOwotICAgICAgICBpZiAobUV4dHJhRmllbGQgPT0gTlVMTCkgewotICAgICAgICAgICAgcmVzdWx0ID0gTk9fTUVNT1JZOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmcmVhZChtRXh0cmFGaWVsZCwgMSwgbUV4dHJhRmllbGRMZW5ndGgsIGZwKSAhPSBtRXh0cmFGaWVsZExlbmd0aCkgewotICAgICAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBtRXh0cmFGaWVsZFttRXh0cmFGaWVsZExlbmd0aF0gPSAnXDAnOwotICAgIH0KLQotYmFpbDoKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogV3JpdGUgYSBsb2NhbCBmaWxlIGhlYWRlci4KLSAqLwotc3RhdHVzX3QgWmlwRW50cnk6OkxvY2FsRmlsZUhlYWRlcjo6d3JpdGUoRklMRSogZnApCi17Ci0gICAgdW5zaWduZWQgY2hhciBidWZba0xGSExlbl07Ci0KLSAgICBaaXBFbnRyeTo6cHV0TG9uZ0xFKCZidWZbMHgwMF0sIGtTaWduYXR1cmUpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwNF0sIG1WZXJzaW9uVG9FeHRyYWN0KTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MDZdLCBtR1BCaXRGbGFnKTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MDhdLCBtQ29tcHJlc3Npb25NZXRob2QpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwYV0sIG1MYXN0TW9kRmlsZVRpbWUpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwY10sIG1MYXN0TW9kRmlsZURhdGUpOwotICAgIFppcEVudHJ5OjpwdXRMb25nTEUoJmJ1ZlsweDBlXSwgbUNSQzMyKTsKLSAgICBaaXBFbnRyeTo6cHV0TG9uZ0xFKCZidWZbMHgxMl0sIG1Db21wcmVzc2VkU2l6ZSk7Ci0gICAgWmlwRW50cnk6OnB1dExvbmdMRSgmYnVmWzB4MTZdLCBtVW5jb21wcmVzc2VkU2l6ZSk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDFhXSwgbUZpbGVOYW1lTGVuZ3RoKTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MWNdLCBtRXh0cmFGaWVsZExlbmd0aCk7Ci0KLSAgICBpZiAoZndyaXRlKGJ1ZiwgMSwga0xGSExlbiwgZnApICE9IGtMRkhMZW4pCi0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotCi0gICAgLyogd3JpdGUgZmlsZW5hbWUgKi8KLSAgICBpZiAobUZpbGVOYW1lTGVuZ3RoICE9IDApIHsKLSAgICAgICAgaWYgKGZ3cml0ZShtRmlsZU5hbWUsIDEsIG1GaWxlTmFtZUxlbmd0aCwgZnApICE9IG1GaWxlTmFtZUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIC8qIHdyaXRlICJleHRyYSBmaWVsZCIgKi8KLSAgICBpZiAobUV4dHJhRmllbGRMZW5ndGggIT0gMCkgewotICAgICAgICBpZiAoZndyaXRlKG1FeHRyYUZpZWxkLCAxLCBtRXh0cmFGaWVsZExlbmd0aCwgZnApICE9IG1FeHRyYUZpZWxkTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0KLS8qCi0gKiBEdW1wIHRoZSBjb250ZW50cyBvZiBhIExvY2FsRmlsZUhlYWRlciBvYmplY3QuCi0gKi8KLXZvaWQgWmlwRW50cnk6OkxvY2FsRmlsZUhlYWRlcjo6ZHVtcCh2b2lkKSBjb25zdAotewotICAgIEFMT0dEKCIgTG9jYWxGaWxlSGVhZGVyIGNvbnRlbnRzOlxuIik7Ci0gICAgQUxPR0QoIiAgdmVyc1RvRXh0PSV1IGdwQml0cz0weCUwNHggY29tcHJlc3Npb249JXVcbiIsCi0gICAgICAgIG1WZXJzaW9uVG9FeHRyYWN0LCBtR1BCaXRGbGFnLCBtQ29tcHJlc3Npb25NZXRob2QpOwotICAgIEFMT0dEKCIgIG1vZFRpbWU9MHglMDR4IG1vZERhdGU9MHglMDR4IGNyYzMyPTB4JTA4bHhcbiIsCi0gICAgICAgIG1MYXN0TW9kRmlsZVRpbWUsIG1MYXN0TW9kRmlsZURhdGUsIG1DUkMzMik7Ci0gICAgQUxPR0QoIiAgY29tcHJlc3NlZFNpemU9JWx1IHVuY29tcHJlc3NlZFNpemU9JWx1XG4iLAotICAgICAgICBtQ29tcHJlc3NlZFNpemUsIG1VbmNvbXByZXNzZWRTaXplKTsKLSAgICBBTE9HRCgiICBmaWxlbmFtZUxlbj0ldSBleHRyYUxlbj0ldVxuIiwKLSAgICAgICAgbUZpbGVOYW1lTGVuZ3RoLCBtRXh0cmFGaWVsZExlbmd0aCk7Ci0gICAgaWYgKG1GaWxlTmFtZSAhPSBOVUxMKQotICAgICAgICBBTE9HRCgiICBmaWxlbmFtZTogJyVzJ1xuIiwgbUZpbGVOYW1lKTsKLX0KLQotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgICAgIFppcEVudHJ5OjpDZW50cmFsRGlyRW50cnkKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLS8qCi0gKiBSZWFkIHRoZSBjZW50cmFsIGRpciBlbnRyeSB0aGF0IGFwcGVhcnMgbmV4dCBpbiB0aGUgZmlsZS4KLSAqCi0gKiBPbiBlbnRyeSwgImZwIiBzaG91bGQgYmUgcG9zaXRpb25lZCBvbiB0aGUgc2lnbmF0dXJlIGJ5dGVzIGZvciB0aGUKLSAqIGVudHJ5LiAgT24gZXhpdCwgImZwIiB3aWxsIHBvaW50IGF0IHRoZSBzaWduYXR1cmUgd29yZCBmb3IgdGhlIG5leHQKLSAqIGVudHJ5IG9yIGZvciB0aGUgRU9DRC4KLSAqLwotc3RhdHVzX3QgWmlwRW50cnk6OkNlbnRyYWxEaXJFbnRyeTo6cmVhZChGSUxFKiBmcCkKLXsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBOT19FUlJPUjsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZltrQ0RFTGVuXTsKLQotICAgIC8qIG5vIHJlLXVzZSAqLwotICAgIGFzc2VydChtRmlsZU5hbWUgPT0gTlVMTCk7Ci0gICAgYXNzZXJ0KG1FeHRyYUZpZWxkID09IE5VTEwpOwotICAgIGFzc2VydChtRmlsZUNvbW1lbnQgPT0gTlVMTCk7Ci0KLSAgICBpZiAoZnJlYWQoYnVmLCAxLCBrQ0RFTGVuLCBmcCkgIT0ga0NERUxlbikgewotICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgaWYgKFppcEVudHJ5OjpnZXRMb25nTEUoJmJ1ZlsweDAwXSkgIT0ga1NpZ25hdHVyZSkgewotICAgICAgICBBTE9HRCgiV2hvb3BzOiBkaWRuJ3QgZmluZCBleHBlY3RlZCBzaWduYXR1cmVcbiIpOwotICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgbVZlcnNpb25NYWRlQnkgPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MDRdKTsKLSAgICBtVmVyc2lvblRvRXh0cmFjdCA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgwNl0pOwotICAgIG1HUEJpdEZsYWcgPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MDhdKTsKLSAgICBtQ29tcHJlc3Npb25NZXRob2QgPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MGFdKTsKLSAgICBtTGFzdE1vZEZpbGVUaW1lID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDBjXSk7Ci0gICAgbUxhc3RNb2RGaWxlRGF0ZSA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgwZV0pOwotICAgIG1DUkMzMiA9IFppcEVudHJ5OjpnZXRMb25nTEUoJmJ1ZlsweDEwXSk7Ci0gICAgbUNvbXByZXNzZWRTaXplID0gWmlwRW50cnk6OmdldExvbmdMRSgmYnVmWzB4MTRdKTsKLSAgICBtVW5jb21wcmVzc2VkU2l6ZSA9IFppcEVudHJ5OjpnZXRMb25nTEUoJmJ1ZlsweDE4XSk7Ci0gICAgbUZpbGVOYW1lTGVuZ3RoID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDFjXSk7Ci0gICAgbUV4dHJhRmllbGRMZW5ndGggPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MWVdKTsKLSAgICBtRmlsZUNvbW1lbnRMZW5ndGggPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MjBdKTsKLSAgICBtRGlza051bWJlclN0YXJ0ID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDIyXSk7Ci0gICAgbUludGVybmFsQXR0cnMgPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MjRdKTsKLSAgICBtRXh0ZXJuYWxBdHRycyA9IFppcEVudHJ5OjpnZXRMb25nTEUoJmJ1ZlsweDI2XSk7Ci0gICAgbUxvY2FsSGVhZGVyUmVsT2Zmc2V0ID0gWmlwRW50cnk6OmdldExvbmdMRSgmYnVmWzB4MmFdKTsKLQotICAgIC8vIFRPRE86IHZhbGlkYXRlIHNpemVzIGFuZCBvZmZzZXRzCi0KLSAgICAvKiBncmFiIGZpbGVuYW1lICovCi0gICAgaWYgKG1GaWxlTmFtZUxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG1GaWxlTmFtZSA9IG5ldyB1bnNpZ25lZCBjaGFyW21GaWxlTmFtZUxlbmd0aCsxXTsKLSAgICAgICAgaWYgKG1GaWxlTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBOT19NRU1PUlk7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZyZWFkKG1GaWxlTmFtZSwgMSwgbUZpbGVOYW1lTGVuZ3RoLCBmcCkgIT0gbUZpbGVOYW1lTGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIG1GaWxlTmFtZVttRmlsZU5hbWVMZW5ndGhdID0gJ1wwJzsKLSAgICB9Ci0KLSAgICAvKiByZWFkICJleHRyYSBmaWVsZCIgKi8KLSAgICBpZiAobUV4dHJhRmllbGRMZW5ndGggIT0gMCkgewotICAgICAgICBtRXh0cmFGaWVsZCA9IG5ldyB1bnNpZ25lZCBjaGFyW21FeHRyYUZpZWxkTGVuZ3RoKzFdOwotICAgICAgICBpZiAobUV4dHJhRmllbGQgPT0gTlVMTCkgewotICAgICAgICAgICAgcmVzdWx0ID0gTk9fTUVNT1JZOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmcmVhZChtRXh0cmFGaWVsZCwgMSwgbUV4dHJhRmllbGRMZW5ndGgsIGZwKSAhPSBtRXh0cmFGaWVsZExlbmd0aCkgewotICAgICAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBtRXh0cmFGaWVsZFttRXh0cmFGaWVsZExlbmd0aF0gPSAnXDAnOwotICAgIH0KLQotCi0gICAgLyogZ3JhYiBjb21tZW50LCBpZiBhbnkgKi8KLSAgICBpZiAobUZpbGVDb21tZW50TGVuZ3RoICE9IDApIHsKLSAgICAgICAgbUZpbGVDb21tZW50ID0gbmV3IHVuc2lnbmVkIGNoYXJbbUZpbGVDb21tZW50TGVuZ3RoKzFdOwotICAgICAgICBpZiAobUZpbGVDb21tZW50ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IE5PX01FTU9SWTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnJlYWQobUZpbGVDb21tZW50LCAxLCBtRmlsZUNvbW1lbnRMZW5ndGgsIGZwKSAhPSBtRmlsZUNvbW1lbnRMZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgbUZpbGVDb21tZW50W21GaWxlQ29tbWVudExlbmd0aF0gPSAnXDAnOwotICAgIH0KLQotYmFpbDoKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogV3JpdGUgYSBjZW50cmFsIGRpciBlbnRyeS4KLSAqLwotc3RhdHVzX3QgWmlwRW50cnk6OkNlbnRyYWxEaXJFbnRyeTo6d3JpdGUoRklMRSogZnApCi17Ci0gICAgdW5zaWduZWQgY2hhciBidWZba0NERUxlbl07Ci0KLSAgICBaaXBFbnRyeTo6cHV0TG9uZ0xFKCZidWZbMHgwMF0sIGtTaWduYXR1cmUpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwNF0sIG1WZXJzaW9uTWFkZUJ5KTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MDZdLCBtVmVyc2lvblRvRXh0cmFjdCk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDA4XSwgbUdQQml0RmxhZyk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDBhXSwgbUNvbXByZXNzaW9uTWV0aG9kKTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MGNdLCBtTGFzdE1vZEZpbGVUaW1lKTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MGVdLCBtTGFzdE1vZEZpbGVEYXRlKTsKLSAgICBaaXBFbnRyeTo6cHV0TG9uZ0xFKCZidWZbMHgxMF0sIG1DUkMzMik7Ci0gICAgWmlwRW50cnk6OnB1dExvbmdMRSgmYnVmWzB4MTRdLCBtQ29tcHJlc3NlZFNpemUpOwotICAgIFppcEVudHJ5OjpwdXRMb25nTEUoJmJ1ZlsweDE4XSwgbVVuY29tcHJlc3NlZFNpemUpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgxY10sIG1GaWxlTmFtZUxlbmd0aCk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDFlXSwgbUV4dHJhRmllbGRMZW5ndGgpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgyMF0sIG1GaWxlQ29tbWVudExlbmd0aCk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDIyXSwgbURpc2tOdW1iZXJTdGFydCk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDI0XSwgbUludGVybmFsQXR0cnMpOwotICAgIFppcEVudHJ5OjpwdXRMb25nTEUoJmJ1ZlsweDI2XSwgbUV4dGVybmFsQXR0cnMpOwotICAgIFppcEVudHJ5OjpwdXRMb25nTEUoJmJ1ZlsweDJhXSwgbUxvY2FsSGVhZGVyUmVsT2Zmc2V0KTsKLQotICAgIGlmIChmd3JpdGUoYnVmLCAxLCBrQ0RFTGVuLCBmcCkgIT0ga0NERUxlbikKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0KLSAgICAvKiB3cml0ZSBmaWxlbmFtZSAqLwotICAgIGlmIChtRmlsZU5hbWVMZW5ndGggIT0gMCkgewotICAgICAgICBpZiAoZndyaXRlKG1GaWxlTmFtZSwgMSwgbUZpbGVOYW1lTGVuZ3RoLCBmcCkgIT0gbUZpbGVOYW1lTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgLyogd3JpdGUgImV4dHJhIGZpZWxkIiAqLwotICAgIGlmIChtRXh0cmFGaWVsZExlbmd0aCAhPSAwKSB7Ci0gICAgICAgIGlmIChmd3JpdGUobUV4dHJhRmllbGQsIDEsIG1FeHRyYUZpZWxkTGVuZ3RoLCBmcCkgIT0gbUV4dHJhRmllbGRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICAvKiB3cml0ZSBjb21tZW50ICovCi0gICAgaWYgKG1GaWxlQ29tbWVudExlbmd0aCAhPSAwKSB7Ci0gICAgICAgIGlmIChmd3JpdGUobUZpbGVDb21tZW50LCAxLCBtRmlsZUNvbW1lbnRMZW5ndGgsIGZwKSAhPSBtRmlsZUNvbW1lbnRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLS8qCi0gKiBEdW1wIHRoZSBjb250ZW50cyBvZiBhIENlbnRyYWxEaXJFbnRyeSBvYmplY3QuCi0gKi8KLXZvaWQgWmlwRW50cnk6OkNlbnRyYWxEaXJFbnRyeTo6ZHVtcCh2b2lkKSBjb25zdAotewotICAgIEFMT0dEKCIgQ2VudHJhbERpckVudHJ5IGNvbnRlbnRzOlxuIik7Ci0gICAgQUxPR0QoIiAgdmVyc01hZGVCeT0ldSB2ZXJzVG9FeHQ9JXUgZ3BCaXRzPTB4JTA0eCBjb21wcmVzc2lvbj0ldVxuIiwKLSAgICAgICAgbVZlcnNpb25NYWRlQnksIG1WZXJzaW9uVG9FeHRyYWN0LCBtR1BCaXRGbGFnLCBtQ29tcHJlc3Npb25NZXRob2QpOwotICAgIEFMT0dEKCIgIG1vZFRpbWU9MHglMDR4IG1vZERhdGU9MHglMDR4IGNyYzMyPTB4JTA4bHhcbiIsCi0gICAgICAgIG1MYXN0TW9kRmlsZVRpbWUsIG1MYXN0TW9kRmlsZURhdGUsIG1DUkMzMik7Ci0gICAgQUxPR0QoIiAgY29tcHJlc3NlZFNpemU9JWx1IHVuY29tcHJlc3NlZFNpemU9JWx1XG4iLAotICAgICAgICBtQ29tcHJlc3NlZFNpemUsIG1VbmNvbXByZXNzZWRTaXplKTsKLSAgICBBTE9HRCgiICBmaWxlbmFtZUxlbj0ldSBleHRyYUxlbj0ldSBjb21tZW50TGVuPSV1XG4iLAotICAgICAgICBtRmlsZU5hbWVMZW5ndGgsIG1FeHRyYUZpZWxkTGVuZ3RoLCBtRmlsZUNvbW1lbnRMZW5ndGgpOwotICAgIEFMT0dEKCIgIGRpc2tOdW1TdGFydD0ldSBpbnRBdHRyPTB4JTA0eCBleHRBdHRyPTB4JTA4bHggcmVsT2Zmc2V0PSVsdVxuIiwKLSAgICAgICAgbURpc2tOdW1iZXJTdGFydCwgbUludGVybmFsQXR0cnMsIG1FeHRlcm5hbEF0dHJzLAotICAgICAgICBtTG9jYWxIZWFkZXJSZWxPZmZzZXQpOwotCi0gICAgaWYgKG1GaWxlTmFtZSAhPSBOVUxMKQotICAgICAgICBBTE9HRCgiICBmaWxlbmFtZTogJyVzJ1xuIiwgbUZpbGVOYW1lKTsKLSAgICBpZiAobUZpbGVDb21tZW50ICE9IE5VTEwpCi0gICAgICAgIEFMT0dEKCIgIGNvbW1lbnQ6ICclcydcbiIsIG1GaWxlQ29tbWVudCk7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvWmlwRW50cnkuaCBiL3Rvb2xzL2FhcHQvWmlwRW50cnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJmMzIyNy4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1ppcEVudHJ5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vCi0vLyBaaXAgYXJjaGl2ZSBlbnRyaWVzLgotLy8KLS8vIFRoZSBaaXBFbnRyeSBjbGFzcyBpcyB0aWdodGx5IG1lc2hlZCB3aXRoIHRoZSBaaXBGaWxlIGNsYXNzLgotLy8KLSNpZm5kZWYgX19MSUJTX1pJUEVOVFJZX0gKLSNkZWZpbmUgX19MSUJTX1pJUEVOVFJZX0gKLQotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBaaXBGaWxlOwotCi0vKgotICogWmlwRW50cnkgb2JqZWN0cyByZXByZXNlbnQgYSBzaW5nbGUgZW50cnkgaW4gYSBaaXAgYXJjaGl2ZS4KLSAqCi0gKiBZb3UgY2FuIHVzZSBvbmUgb2YgdGhlc2UgdG8gZ2V0IG9yIHNldCBpbmZvcm1hdGlvbiBhYm91dCBhbiBlbnRyeSwgYnV0Ci0gKiB0aGVyZSBhcmUgbm8gZnVuY3Rpb25zIGhlcmUgZm9yIGFjY2Vzc2luZyB0aGUgZGF0YSBpdHNlbGYuICAoV2UgY291bGQKLSAqIHR1Y2sgYSBwb2ludGVyIHRvIHRoZSBaaXBGaWxlIGluIGhlcmUgZm9yIGNvbnZlbmllbmNlLCBidXQgdGhhdCByYWlzZXMKLSAqIHRoZSBsaWtlbGlob29kIG9mIHVzaW5nIFppcEVudHJ5IG9iamVjdHMgYWZ0ZXIgZGlzY2FyZGluZyB0aGUgWmlwRmlsZS4pCi0gKgotICogRmlsZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gdHdvIHBsYWNlczogbmV4dCB0byB0aGUgZmlsZSBkYXRhICh0aGUgTG9jYWwKLSAqIEZpbGUgSGVhZGVyLCBhbmQgcG9zc2libHkgYSBEYXRhIERlc2NyaXB0b3IpLCBhbmQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQotICogKHRoZSBDZW50cmFsIERpcmVjdG9yeSBFbnRyeSkuICBUaGUgdHdvIG11c3QgYmUga2VwdCBpbiBzeW5jLgotICovCi1jbGFzcyBaaXBFbnRyeSB7Ci1wdWJsaWM6Ci0gICAgZnJpZW5kIGNsYXNzIFppcEZpbGU7Ci0KLSAgICBaaXBFbnRyeSh2b2lkKQotICAgICAgICA6IG1EZWxldGVkKGZhbHNlKSwgbU1hcmtlZChmYWxzZSkKLSAgICAgICAge30KLSAgICB+WmlwRW50cnkodm9pZCkge30KLQotICAgIC8qCi0gICAgICogUmV0dXJucyAidHJ1ZSIgaWYgdGhlIGRhdGEgaXMgY29tcHJlc3NlZC4KLSAgICAgKi8KLSAgICBib29sIGlzQ29tcHJlc3NlZCh2b2lkKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtQ0RFLm1Db21wcmVzc2lvbk1ldGhvZCAhPSBrQ29tcHJlc3NTdG9yZWQ7Ci0gICAgfQotICAgIGludCBnZXRDb21wcmVzc2lvbk1ldGhvZCh2b2lkKSBjb25zdCB7IHJldHVybiBtQ0RFLm1Db21wcmVzc2lvbk1ldGhvZDsgfQotCi0gICAgLyoKLSAgICAgKiBSZXR1cm4gdGhlIHVuY29tcHJlc3NlZCBsZW5ndGguCi0gICAgICovCi0gICAgb2ZmX3QgZ2V0VW5jb21wcmVzc2VkTGVuKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1DREUubVVuY29tcHJlc3NlZFNpemU7IH0KLQotICAgIC8qCi0gICAgICogUmV0dXJuIHRoZSBjb21wcmVzc2VkIGxlbmd0aC4gIEZvciB1bmNvbXByZXNzZWQgZGF0YSwgdGhpcyByZXR1cm5zCi0gICAgICogdGhlIHNhbWUgdGhpbmcgYXMgZ2V0VW5jb21wcmVzZXNkTGVuKCkuCi0gICAgICovCi0gICAgb2ZmX3QgZ2V0Q29tcHJlc3NlZExlbih2b2lkKSBjb25zdCB7IHJldHVybiBtQ0RFLm1Db21wcmVzc2VkU2l6ZTsgfQotCi0gICAgLyoKLSAgICAgKiBSZXR1cm4gdGhlIG9mZnNldCBvZiB0aGUgbG9jYWwgZmlsZSBoZWFkZXIuCi0gICAgICovCi0gICAgb2ZmX3QgZ2V0TEZIT2Zmc2V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1DREUubUxvY2FsSGVhZGVyUmVsT2Zmc2V0OyB9Ci0KLSAgICAvKgotICAgICAqIFJldHVybiB0aGUgYWJzb2x1dGUgZmlsZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBjb21wcmVzc2VkIG9yCi0gICAgICogdW5jb21wcmVzc2VkIGRhdGEuCi0gICAgICovCi0gICAgb2ZmX3QgZ2V0RmlsZU9mZnNldCh2b2lkKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtQ0RFLm1Mb2NhbEhlYWRlclJlbE9mZnNldCArCi0gICAgICAgICAgICAgICAgTG9jYWxGaWxlSGVhZGVyOjprTEZITGVuICsKLSAgICAgICAgICAgICAgICBtTEZILm1GaWxlTmFtZUxlbmd0aCArCi0gICAgICAgICAgICAgICAgbUxGSC5tRXh0cmFGaWVsZExlbmd0aDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFJldHVybiB0aGUgZGF0YSBDUkMuCi0gICAgICovCi0gICAgdW5zaWduZWQgbG9uZyBnZXRDUkMzMih2b2lkKSBjb25zdCB7IHJldHVybiBtQ0RFLm1DUkMzMjsgfQotCi0gICAgLyoKLSAgICAgKiBSZXR1cm4gZmlsZSBtb2RpZmljYXRpb24gdGltZSBpbiBVTklYIHNlY29uZHMtc2luY2UtZXBvY2guCi0gICAgICovCi0gICAgdGltZV90IGdldE1vZFdoZW4odm9pZCkgY29uc3Q7Ci0KLSAgICAvKgotICAgICAqIFJldHVybiB0aGUgYXJjaGl2ZWQgZmlsZSBuYW1lLgotICAgICAqLwotICAgIGNvbnN0IGNoYXIqIGdldEZpbGVOYW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBjaGFyKikgbUNERS5tRmlsZU5hbWU7IH0KLQotICAgIC8qCi0gICAgICogQXBwbGljYXRpb24tZGVmaW5lZCAibWFyayIuICBDYW4gYmUgdXNlZnVsIHdoZW4gc3luY2hyb25pemluZyB0aGUKLSAgICAgKiBjb250ZW50cyBvZiBhbiBhcmNoaXZlIHdpdGggY29udGVudHMgb24gZGlzay4KLSAgICAgKi8KLSAgICBib29sIGdldE1hcmtlZCh2b2lkKSBjb25zdCB7IHJldHVybiBtTWFya2VkOyB9Ci0gICAgdm9pZCBzZXRNYXJrZWQoYm9vbCB2YWwpIHsgbU1hcmtlZCA9IHZhbDsgfQotCi0gICAgLyoKLSAgICAgKiBTb21lIGJhc2ljIGZ1bmN0aW9ucyBmb3IgcmF3IGRhdGEgbWFuaXB1bGF0aW9uLiAgIkxFIiBtZWFucwotICAgICAqIExpdHRsZSBFbmRpYW4uCi0gICAgICovCi0gICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBnZXRTaG9ydExFKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZikgewotICAgICAgICByZXR1cm4gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKLSAgICB9Ci0gICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldExvbmdMRShjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYpIHsKLSAgICAgICAgcmV0dXJuIGJ1ZlswXSB8IChidWZbMV0gPDwgOCkgfCAoYnVmWzJdIDw8IDE2KSB8IChidWZbM10gPDwgMjQpOwotICAgIH0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgcHV0U2hvcnRMRSh1bnNpZ25lZCBjaGFyKiBidWYsIHNob3J0IHZhbCkgewotICAgICAgICBidWZbMF0gPSAodW5zaWduZWQgY2hhcikgdmFsOwotICAgICAgICBidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKHZhbCA+PiA4KTsKLSAgICB9Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIHB1dExvbmdMRSh1bnNpZ25lZCBjaGFyKiBidWYsIGxvbmcgdmFsKSB7Ci0gICAgICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSB2YWw7Ci0gICAgICAgIGJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAodmFsID4+IDgpOwotICAgICAgICBidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKHZhbCA+PiAxNik7Ci0gICAgICAgIGJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAodmFsID4+IDI0KTsKLSAgICB9Ci0KLSAgICAvKiBkZWZpbmVkIGZvciBaaXAgYXJjaGl2ZXMgKi8KLSAgICBlbnVtIHsKLSAgICAgICAga0NvbXByZXNzU3RvcmVkICAgICA9IDAsICAgICAgICAvLyBubyBjb21wcmVzc2lvbgotICAgICAgICAvLyBzaHJ1bmsgICAgICAgICAgID0gMSwKLSAgICAgICAgLy8gcmVkdWNlZCAxICAgICAgICA9IDIsCi0gICAgICAgIC8vIHJlZHVjZWQgMiAgICAgICAgPSAzLAotICAgICAgICAvLyByZWR1Y2VkIDMgICAgICAgID0gNCwKLSAgICAgICAgLy8gcmVkdWNlZCA0ICAgICAgICA9IDUsCi0gICAgICAgIC8vIGltcGxvZGVkICAgICAgICAgPSA2LAotICAgICAgICAvLyB0b2tlbml6ZWQgICAgICAgID0gNywKLSAgICAgICAga0NvbXByZXNzRGVmbGF0ZWQgICA9IDgsICAgICAgICAvLyBzdGFuZGFyZCBkZWZsYXRlCi0gICAgICAgIC8vIERlZmxhdGU2NCAgICAgICAgPSA5LAotICAgICAgICAvLyBsaWIgaW1wbG9kZWQgICAgID0gMTAsCi0gICAgICAgIC8vIHJlc2VydmVkICAgICAgICAgPSAxMSwKLSAgICAgICAgLy8gYnppcDIgICAgICAgICAgICA9IDEyLAotICAgIH07Ci0KLSAgICAvKgotICAgICAqIERlbGV0aW9uIGZsYWcuICBJZiBzZXQsIHRoZSBlbnRyeSB3aWxsIGJlIHJlbW92ZWQgb24gdGhlIG5leHQKLSAgICAgKiBjYWxsIHRvICJmbHVzaCIuCi0gICAgICovCi0gICAgYm9vbCBnZXREZWxldGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1EZWxldGVkOyB9Ci0KLXByb3RlY3RlZDoKLSAgICAvKgotICAgICAqIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSBmcm9tIHRoZSBmaWxlLCB3aGljaCBpcyBwb2ludGluZyBhdAotICAgICAqIG91ciBDZW50cmFsIERpcmVjdG9yeSBlbnRyeS4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBpbml0RnJvbUNERShGSUxFKiBmcCk7Ci0KLSAgICAvKgotICAgICAqIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSBmb3IgYSBuZXcgZmlsZS4gIFdlIG5lZWQgdGhlIGZpbGVuYW1lCi0gICAgICogYW5kIGNvbW1lbnQgc28gdGhhdCB3ZSBjYW4gcHJvcGVybHkgc2l6ZSB0aGUgTEZIIGFyZWEuICBUaGUKLSAgICAgKiBmaWxlbmFtZSBpcyBtYW5kYXRvcnksIHRoZSBjb21tZW50IGlzIG9wdGlvbmFsLgotICAgICAqLwotICAgIHZvaWQgaW5pdE5ldyhjb25zdCBjaGFyKiBmaWxlTmFtZSwgY29uc3QgY2hhciogY29tbWVudCk7Ci0KLSAgICAvKgotICAgICAqIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB3aXRoIHRoZSBjb250ZW50cyBvZiBhIFppcEVudHJ5IGZyb20KLSAgICAgKiBhbm90aGVyIGZpbGUuCi0gICAgICovCi0gICAgc3RhdHVzX3QgaW5pdEZyb21FeHRlcm5hbChjb25zdCBaaXBGaWxlKiBwWmlwRmlsZSwgY29uc3QgWmlwRW50cnkqIHBFbnRyeSk7Ci0KLSAgICAvKgotICAgICAqIEFkZCBzb21lIHBhZCBieXRlcyB0byB0aGUgTEZILiAgV2UgZG8gdGhpcyBieSBhZGRpbmcgb3IgcmVzaXppbmcKLSAgICAgKiB0aGUgImV4dHJhIiBmaWVsZC4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBhZGRQYWRkaW5nKGludCBwYWRkaW5nKTsKLQotICAgIC8qCi0gICAgICogU2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBkYXRhIGZvciB0aGlzIGVudHJ5LgotICAgICAqLwotICAgIHZvaWQgc2V0RGF0YUluZm8obG9uZyB1bmNvbXBMZW4sIGxvbmcgY29tcExlbiwgdW5zaWduZWQgbG9uZyBjcmMzMiwKLSAgICAgICAgaW50IGNvbXByZXNzaW9uTWV0aG9kKTsKLQotICAgIC8qCi0gICAgICogU2V0IHRoZSBtb2RpZmljYXRpb24gZGF0ZS4KLSAgICAgKi8KLSAgICB2b2lkIHNldE1vZFdoZW4odGltZV90IHdoZW4pOwotCi0gICAgLyoKLSAgICAgKiBTZXQgdGhlIG9mZnNldCBvZiB0aGUgbG9jYWwgZmlsZSBoZWFkZXIsIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZgotICAgICAqIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICovCi0gICAgdm9pZCBzZXRMRkhPZmZzZXQob2ZmX3Qgb2Zmc2V0KSB7Ci0gICAgICAgIG1DREUubUxvY2FsSGVhZGVyUmVsT2Zmc2V0ID0gKGxvbmcpIG9mZnNldDsKLSAgICB9Ci0KLSAgICAvKiBtYXJrIGZvciBkZWxldGlvbjsgdXNlZCBieSBaaXBGaWxlOjpyZW1vdmUoKSAqLwotICAgIHZvaWQgc2V0RGVsZXRlZCh2b2lkKSB7IG1EZWxldGVkID0gdHJ1ZTsgfQotCi1wcml2YXRlOgotICAgIC8qIHRoZXNlIGFyZSBwcml2YXRlIGFuZCBub3QgZGVmaW5lZCAqLwotICAgIFppcEVudHJ5KGNvbnN0IFppcEVudHJ5JiBzcmMpOwotICAgIFppcEVudHJ5JiBvcGVyYXRvcj0oY29uc3QgWmlwRW50cnkmIHNyYyk7Ci0KLSAgICAvKiByZXR1cm5zICJ0cnVlIiBpZiB0aGUgQ0RFIGFuZCB0aGUgTEZIIGFncmVlICovCi0gICAgYm9vbCBjb21wYXJlSGVhZGVycyh2b2lkKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDREV0b0xGSCh2b2lkKTsKLQotICAgIGJvb2wgICAgICAgIG1EZWxldGVkOyAgICAgICAvLyBzZXQgaWYgZW50cnkgaXMgcGVuZGluZyBkZWxldGlvbgotICAgIGJvb2wgICAgICAgIG1NYXJrZWQ7ICAgICAgICAvLyBhcHAtZGVmaW5lZCBtYXJrZXIKLQotICAgIC8qCi0gICAgICogRXZlcnkgZW50cnkgaW4gdGhlIFppcCBhcmNoaXZlIHN0YXJ0cyBvZmYgd2l0aCBvbmUgb2YgdGhlc2UuCi0gICAgICovCi0gICAgY2xhc3MgTG9jYWxGaWxlSGVhZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExvY2FsRmlsZUhlYWRlcih2b2lkKSA6Ci0gICAgICAgICAgICBtVmVyc2lvblRvRXh0cmFjdCgwKSwKLSAgICAgICAgICAgIG1HUEJpdEZsYWcoMCksCi0gICAgICAgICAgICBtQ29tcHJlc3Npb25NZXRob2QoMCksCi0gICAgICAgICAgICBtTGFzdE1vZEZpbGVUaW1lKDApLAotICAgICAgICAgICAgbUxhc3RNb2RGaWxlRGF0ZSgwKSwKLSAgICAgICAgICAgIG1DUkMzMigwKSwKLSAgICAgICAgICAgIG1Db21wcmVzc2VkU2l6ZSgwKSwKLSAgICAgICAgICAgIG1VbmNvbXByZXNzZWRTaXplKDApLAotICAgICAgICAgICAgbUZpbGVOYW1lTGVuZ3RoKDApLAotICAgICAgICAgICAgbUV4dHJhRmllbGRMZW5ndGgoMCksCi0gICAgICAgICAgICBtRmlsZU5hbWUoTlVMTCksCi0gICAgICAgICAgICBtRXh0cmFGaWVsZChOVUxMKQotICAgICAgICB7fQotICAgICAgICB2aXJ0dWFsIH5Mb2NhbEZpbGVIZWFkZXIodm9pZCkgewotICAgICAgICAgICAgZGVsZXRlW10gbUZpbGVOYW1lOwotICAgICAgICAgICAgZGVsZXRlW10gbUV4dHJhRmllbGQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0dXNfdCByZWFkKEZJTEUqIGZwKTsKLSAgICAgICAgc3RhdHVzX3Qgd3JpdGUoRklMRSogZnApOwotCi0gICAgICAgIC8vIHVuc2lnbmVkIGxvbmcgbVNpZ25hdHVyZTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1WZXJzaW9uVG9FeHRyYWN0OwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbUdQQml0RmxhZzsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1Db21wcmVzc2lvbk1ldGhvZDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1MYXN0TW9kRmlsZVRpbWU7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtTGFzdE1vZEZpbGVEYXRlOwotICAgICAgICB1bnNpZ25lZCBsb25nICAgbUNSQzMyOwotICAgICAgICB1bnNpZ25lZCBsb25nICAgbUNvbXByZXNzZWRTaXplOwotICAgICAgICB1bnNpZ25lZCBsb25nICAgbVVuY29tcHJlc3NlZFNpemU7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtRmlsZU5hbWVMZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtRXh0cmFGaWVsZExlbmd0aDsKLSAgICAgICAgdW5zaWduZWQgY2hhciogIG1GaWxlTmFtZTsKLSAgICAgICAgdW5zaWduZWQgY2hhciogIG1FeHRyYUZpZWxkOwotCi0gICAgICAgIGVudW0gewotICAgICAgICAgICAga1NpZ25hdHVyZSAgICAgID0gMHgwNDAzNGI1MCwKLSAgICAgICAgICAgIGtMRkhMZW4gICAgICAgICA9IDMwLCAgICAgICAvLyBMb2NhbEZpbGVIZHIgbGVuLCBleGNsLiB2YXIgZmllbGRzCi0gICAgICAgIH07Ci0KLSAgICAgICAgdm9pZCBkdW1wKHZvaWQpIGNvbnN0OwotICAgIH07Ci0KLSAgICAvKgotICAgICAqIEV2ZXJ5IGVudHJ5IGluIHRoZSBaaXAgYXJjaGl2ZSBoYXMgb25lIG9mIHRoZXNlIGluIHRoZSAiY2VudHJhbAotICAgICAqIGRpcmVjdG9yeSIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KLSAgICAgKi8KLSAgICBjbGFzcyBDZW50cmFsRGlyRW50cnkgewotICAgIHB1YmxpYzoKLSAgICAgICAgQ2VudHJhbERpckVudHJ5KHZvaWQpIDoKLSAgICAgICAgICAgIG1WZXJzaW9uTWFkZUJ5KDApLAotICAgICAgICAgICAgbVZlcnNpb25Ub0V4dHJhY3QoMCksCi0gICAgICAgICAgICBtR1BCaXRGbGFnKDApLAotICAgICAgICAgICAgbUNvbXByZXNzaW9uTWV0aG9kKDApLAotICAgICAgICAgICAgbUxhc3RNb2RGaWxlVGltZSgwKSwKLSAgICAgICAgICAgIG1MYXN0TW9kRmlsZURhdGUoMCksCi0gICAgICAgICAgICBtQ1JDMzIoMCksCi0gICAgICAgICAgICBtQ29tcHJlc3NlZFNpemUoMCksCi0gICAgICAgICAgICBtVW5jb21wcmVzc2VkU2l6ZSgwKSwKLSAgICAgICAgICAgIG1GaWxlTmFtZUxlbmd0aCgwKSwKLSAgICAgICAgICAgIG1FeHRyYUZpZWxkTGVuZ3RoKDApLAotICAgICAgICAgICAgbUZpbGVDb21tZW50TGVuZ3RoKDApLAotICAgICAgICAgICAgbURpc2tOdW1iZXJTdGFydCgwKSwKLSAgICAgICAgICAgIG1JbnRlcm5hbEF0dHJzKDApLAotICAgICAgICAgICAgbUV4dGVybmFsQXR0cnMoMCksCi0gICAgICAgICAgICBtTG9jYWxIZWFkZXJSZWxPZmZzZXQoMCksCi0gICAgICAgICAgICBtRmlsZU5hbWUoTlVMTCksCi0gICAgICAgICAgICBtRXh0cmFGaWVsZChOVUxMKSwKLSAgICAgICAgICAgIG1GaWxlQ29tbWVudChOVUxMKQotICAgICAgICB7fQotICAgICAgICB2aXJ0dWFsIH5DZW50cmFsRGlyRW50cnkodm9pZCkgewotICAgICAgICAgICAgZGVsZXRlW10gbUZpbGVOYW1lOwotICAgICAgICAgICAgZGVsZXRlW10gbUV4dHJhRmllbGQ7Ci0gICAgICAgICAgICBkZWxldGVbXSBtRmlsZUNvbW1lbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0dXNfdCByZWFkKEZJTEUqIGZwKTsKLSAgICAgICAgc3RhdHVzX3Qgd3JpdGUoRklMRSogZnApOwotCi0gICAgICAgIC8vIHVuc2lnbmVkIGxvbmcgbVNpZ25hdHVyZTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1WZXJzaW9uTWFkZUJ5OwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbVZlcnNpb25Ub0V4dHJhY3Q7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtR1BCaXRGbGFnOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbUNvbXByZXNzaW9uTWV0aG9kOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbUxhc3RNb2RGaWxlVGltZTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1MYXN0TW9kRmlsZURhdGU7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgICBtQ1JDMzI7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgICBtQ29tcHJlc3NlZFNpemU7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgICBtVW5jb21wcmVzc2VkU2l6ZTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1GaWxlTmFtZUxlbmd0aDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1FeHRyYUZpZWxkTGVuZ3RoOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbUZpbGVDb21tZW50TGVuZ3RoOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbURpc2tOdW1iZXJTdGFydDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1JbnRlcm5hbEF0dHJzOwotICAgICAgICB1bnNpZ25lZCBsb25nICAgbUV4dGVybmFsQXR0cnM7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgICBtTG9jYWxIZWFkZXJSZWxPZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqICBtRmlsZU5hbWU7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqICBtRXh0cmFGaWVsZDsKLSAgICAgICAgdW5zaWduZWQgY2hhciogIG1GaWxlQ29tbWVudDsKLQotICAgICAgICB2b2lkIGR1bXAodm9pZCkgY29uc3Q7Ci0KLSAgICAgICAgZW51bSB7Ci0gICAgICAgICAgICBrU2lnbmF0dXJlICAgICAgPSAweDAyMDE0YjUwLAotICAgICAgICAgICAga0NERUxlbiAgICAgICAgID0gNDYsICAgICAgIC8vIENlbnRyYWxEaXJFbnQgbGVuLCBleGNsLiB2YXIgZmllbGRzCi0gICAgICAgIH07Ci0gICAgfTsKLQotICAgIGVudW0gewotICAgICAgICAvL2tEYXRhRGVzY3JpcHRvclNpZ25hdHVyZSAgPSAweDA4MDc0YjUwLCAgIC8vIGN1cnJlbnRseSB1bnVzZWQKLSAgICAgICAga0RhdGFEZXNjcmlwdG9yTGVuICA9IDE2LCAgICAgICAgICAgLy8gZm91ciAzMi1iaXQgZmllbGRzCi0KLSAgICAgICAga0RlZmF1bHRWZXJzaW9uICAgICA9IDIwLCAgICAgICAgICAgLy8gbmVlZCBkZWZsYXRlLCBub3RoaW5nIG11Y2ggZWxzZQotICAgICAgICBrRGVmYXVsdE1hZGVCeSAgICAgID0gMHgwMzE3LCAgICAgICAvLyAwMz1VTklYLCAxNz1zcGVjIHYyLjMKLSAgICAgICAga1VzZXNEYXRhRGVzY3IgICAgICA9IDB4MDAwOCwgICAgICAgLy8gR1BCaXRGbGFnIGJpdCAzCi0gICAgfTsKLQotICAgIExvY2FsRmlsZUhlYWRlciAgICAgbUxGSDsKLSAgICBDZW50cmFsRGlyRW50cnkgICAgIG1DREU7Ci19OwotCi19OyAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gX19MSUJTX1pJUEVOVFJZX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvWmlwRmlsZS5jcHAgYi90b29scy9hYXB0L1ppcEZpbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDU3MDY4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvWmlwRmlsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLwotLy8gQWNjZXNzIHRvIFppcCBhcmNoaXZlcy4KLS8vCi0KLSNkZWZpbmUgTE9HX1RBRyAiemlwIgotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L1ppcFV0aWxzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0KLSNpbmNsdWRlICJaaXBGaWxlLmgiCi0KLSNpbmNsdWRlIDx6bGliLmg+Ci0jZGVmaW5lIERFRl9NRU1fTEVWRUwgOCAgICAgICAgICAgICAgICAvLyBub3JtYWxseSBpbiB6dXRpbC5oPwotCi0jaW5jbHVkZSA8bWVtb3J5Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotLyoKLSAqIFNvbWUgZW52aXJvbm1lbnRzIHJlcXVpcmUgdGhlICJiIiwgc29tZSBjaG9rZSBvbiBpdC4KLSAqLwotI2RlZmluZSBGSUxFX09QRU5fUk8gICAgICAgICJyYiIKLSNkZWZpbmUgRklMRV9PUEVOX1JXICAgICAgICAicitiIgotI2RlZmluZSBGSUxFX09QRU5fUldfQ1JFQVRFICJ3K2IiCi0KLS8qIHNob3VsZCBsaXZlIHNvbWV3aGVyZSBlbHNlPyAqLwotc3RhdGljIHN0YXR1c190IGVycm5vVG9TdGF0dXMoaW50IGVycikKLXsKLSAgICBpZiAoZXJyID09IEVOT0VOVCkKLSAgICAgICAgcmV0dXJuIE5BTUVfTk9UX0ZPVU5EOwotICAgIGVsc2UgaWYgKGVyciA9PSBFQUNDRVMpCi0gICAgICAgIHJldHVybiBQRVJNSVNTSU9OX0RFTklFRDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotfQotCi0vKgotICogT3BlbiBhIGZpbGUgYW5kIHBhcnNlIGl0cyBndXRzLgotICovCi1zdGF0dXNfdCBaaXBGaWxlOjpvcGVuKGNvbnN0IGNoYXIqIHppcEZpbGVOYW1lLCBpbnQgZmxhZ3MpCi17Ci0gICAgYm9vbCBuZXdBcmNoaXZlID0gZmFsc2U7Ci0KLSAgICBhc3NlcnQobVppcEZwID09IE5VTEwpOyAgICAgLy8gbm8gcmVvcGVuCi0KLSAgICBpZiAoKGZsYWdzICYga09wZW5UcnVuY2F0ZSkpCi0gICAgICAgIGZsYWdzIHw9IGtPcGVuQ3JlYXRlOyAgICAgICAgICAgLy8gdHJ1bmMgaW1wbGllcyBjcmVhdGUKLQotICAgIGlmICgoZmxhZ3MgJiBrT3BlblJlYWRPbmx5KSAmJiAoZmxhZ3MgJiBrT3BlblJlYWRXcml0ZSkpCi0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsgICAgICAgLy8gbm90IGJvdGgKLSAgICBpZiAoISgoZmxhZ3MgJiBrT3BlblJlYWRPbmx5KSB8fCAoZmxhZ3MgJiBrT3BlblJlYWRXcml0ZSkpKQotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047ICAgICAgIC8vIG5vdCBuZWl0aGVyCi0gICAgaWYgKChmbGFncyAmIGtPcGVuQ3JlYXRlKSAmJiAhKGZsYWdzICYga09wZW5SZWFkV3JpdGUpKQotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047ICAgICAgIC8vIGNyZWF0ZSByZXF1aXJlcyB3cml0ZQotCi0gICAgaWYgKGZsYWdzICYga09wZW5UcnVuY2F0ZSkgewotICAgICAgICBuZXdBcmNoaXZlID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBuZXdBcmNoaXZlID0gKGFjY2Vzcyh6aXBGaWxlTmFtZSwgRl9PSykgIT0gMCk7Ci0gICAgICAgIGlmICghKGZsYWdzICYga09wZW5DcmVhdGUpICYmIG5ld0FyY2hpdmUpIHsKLSAgICAgICAgICAgIC8qIG5vdCBjcmVhdGluZywgbXVzdCBhbHJlYWR5IGV4aXN0ICovCi0gICAgICAgICAgICBBTE9HRCgiRmlsZSAlcyBkb2VzIG5vdCBleGlzdCIsIHppcEZpbGVOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBOQU1FX05PVF9GT1VORDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIG9wZW4gdGhlIGZpbGUgKi8KLSAgICBjb25zdCBjaGFyKiBvcGVuZmxhZ3M7Ci0gICAgaWYgKGZsYWdzICYga09wZW5SZWFkV3JpdGUpIHsKLSAgICAgICAgaWYgKG5ld0FyY2hpdmUpCi0gICAgICAgICAgICBvcGVuZmxhZ3MgPSBGSUxFX09QRU5fUldfQ1JFQVRFOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcGVuZmxhZ3MgPSBGSUxFX09QRU5fUlc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgb3BlbmZsYWdzID0gRklMRV9PUEVOX1JPOwotICAgIH0KLSAgICBtWmlwRnAgPSBmb3Blbih6aXBGaWxlTmFtZSwgb3BlbmZsYWdzKTsKLSAgICBpZiAobVppcEZwID09IE5VTEwpIHsKLSAgICAgICAgaW50IGVyciA9IGVycm5vOwotICAgICAgICBBTE9HRCgiZm9wZW4gZmFpbGVkOiAlZFxuIiwgZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycm5vVG9TdGF0dXMoZXJyKTsKLSAgICB9Ci0KLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0gICAgaWYgKCFuZXdBcmNoaXZlKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIExvYWQgdGhlIGNlbnRyYWwgZGlyZWN0b3J5LiAgSWYgdGhhdCBmYWlscywgdGhlbiB0aGlzIHByb2JhYmx5Ci0gICAgICAgICAqIGlzbid0IGEgWmlwIGFyY2hpdmUuCi0gICAgICAgICAqLwotICAgICAgICByZXN1bHQgPSByZWFkQ2VudHJhbERpcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIE5ld2x5LWNyZWF0ZWQuICBUaGUgRW5kT2ZDZW50cmFsRGlyIGNvbnN0cnVjdG9yIGFjdHVhbGx5Ci0gICAgICAgICAqIHNldHMgZXZlcnl0aGluZyB0byBiZSB0aGUgd2F5IHdlIHdhbnQgaXQgKGFsbCB6ZXJvZXMpLiAgV2UKLSAgICAgICAgICogc2V0IG1OZWVkQ0RSZXdyaXRlIHNvIHRoYXQgd2UgY3JlYXRlICpzb21ldGhpbmcqIGlmIHRoZQotICAgICAgICAgKiBjYWxsZXIgZG9lc24ndCBhZGQgYW55IGZpbGVzLiAgKFdlIGNvdWxkIGFsc28ganVzdCB1bmxpbmsKLSAgICAgICAgICogdGhlIGZpbGUgaWYgaXQncyBicmFuZCBuZXcgYW5kIG5vdGhpbmcgd2FzIGFkZGVkLCBidXQgdGhhdCdzCi0gICAgICAgICAqIHByb2JhYmx5IGRvaW5nIG1vcmUgdGhhbiB3ZSByZWFsbHkgc2hvdWxkIC0tIHRoZSB1c2VyIG1pZ2h0Ci0gICAgICAgICAqIGhhdmUgYSBuZWVkIGZvciBlbXB0eSB6aXAgZmlsZXMuKQotICAgICAgICAgKi8KLSAgICAgICAgbU5lZWRDRFJld3JpdGUgPSB0cnVlOwotICAgICAgICByZXN1bHQgPSBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBrT3BlblJlYWRPbmx5KQotICAgICAgICBtUmVhZE9ubHkgPSB0cnVlOwotICAgIGVsc2UKLSAgICAgICAgYXNzZXJ0KCFtUmVhZE9ubHkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIFJldHVybiB0aGUgTnRoIGVudHJ5IGluIHRoZSBhcmNoaXZlLgotICovCi1aaXBFbnRyeSogWmlwRmlsZTo6Z2V0RW50cnlCeUluZGV4KGludCBpZHgpIGNvbnN0Ci17Ci0gICAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IChpbnQpIG1FbnRyaWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gbUVudHJpZXNbaWR4XTsKLX0KLQotLyoKLSAqIEZpbmQgYW4gZW50cnkgYnkgbmFtZS4KLSAqLwotWmlwRW50cnkqIFppcEZpbGU6OmdldEVudHJ5QnlOYW1lKGNvbnN0IGNoYXIqIGZpbGVOYW1lKSBjb25zdAotewotICAgIC8qCi0gICAgICogRG8gYSBzdHVwaWQgbGluZWFyIHN0cmluZy1jb21wYXJlIHNlYXJjaC4KLSAgICAgKgotICAgICAqIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gc3BlZWQgdGhpcyB1cCwgZXNwZWNpYWxseSBzaW5jZSBpdCdzIHJhcmUKLSAgICAgKiB0byBpbnRlcm1pbmdsZSBjaGFuZ2VzIHRvIHRoZSBhcmNoaXZlIHdpdGggImdldCBieSBuYW1lIiBjYWxscy4gIFdlCi0gICAgICogZG9uJ3Qgd2FudCB0byBzb3J0IHRoZSBtRW50cmllcyB2ZWN0b3IgaXRzZWxmLCBob3dldmVyLCBiZWNhdXNlCi0gICAgICogaXQncyB1c2VkIHRvIHJlY3JlYXRlIHRoZSBDZW50cmFsIERpcmVjdG9yeS4KLSAgICAgKgotICAgICAqIChIYXNoIHRhYmxlIHdvcmtzLCBwYXJhbGxlbCBsaXN0IG9mIHBvaW50ZXJzIGluIHNvcnRlZCBvcmRlciBpcyBnb29kLikKLSAgICAgKi8KLSAgICBpbnQgaWR4OwotCi0gICAgZm9yIChpZHggPSBtRW50cmllcy5zaXplKCktMTsgaWR4ID49IDA7IGlkeC0tKSB7Ci0gICAgICAgIFppcEVudHJ5KiBwRW50cnkgPSBtRW50cmllc1tpZHhdOwotICAgICAgICBpZiAoIXBFbnRyeS0+Z2V0RGVsZXRlZCgpICYmCi0gICAgICAgICAgICBzdHJjbXAoZmlsZU5hbWUsIHBFbnRyeS0+Z2V0RmlsZU5hbWUoKSkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHBFbnRyeTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQotCi0vKgotICogRW1wdHkgdGhlIG1FbnRyaWVzIHZlY3Rvci4KLSAqLwotdm9pZCBaaXBGaWxlOjpkaXNjYXJkRW50cmllcyh2b2lkKQotewotICAgIGludCBjb3VudCA9IG1FbnRyaWVzLnNpemUoKTsKLQotICAgIHdoaWxlICgtLWNvdW50ID49IDApCi0gICAgICAgIGRlbGV0ZSBtRW50cmllc1tjb3VudF07Ci0KLSAgICBtRW50cmllcy5jbGVhcigpOwotfQotCi0KLS8qCi0gKiBGaW5kIHRoZSBjZW50cmFsIGRpcmVjdG9yeSBhbmQgcmVhZCB0aGUgY29udGVudHMuCi0gKgotICogVGhlIGZ1biB0aGluZyBhYm91dCBaSVAgYXJjaGl2ZXMgaXMgdGhhdCB0aGV5IG1heSBvciBtYXkgbm90IGJlCi0gKiByZWFkYWJsZSBmcm9tIHN0YXJ0IHRvIGVuZC4gIEluIHNvbWUgY2FzZXMsIG5vdGFibHkgZm9yIGFyY2hpdmVzCi0gKiB0aGF0IHdlcmUgd3JpdHRlbiB0byBzdGRvdXQsIHRoZSBvbmx5IGxlbmd0aCBpbmZvcm1hdGlvbiBpcyBpbiB0aGUKLSAqIGNlbnRyYWwgZGlyZWN0b3J5IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0gKgotICogT2YgY291cnNlLCB0aGUgY2VudHJhbCBkaXJlY3RvcnkgY2FuIGJlIGZvbGxvd2VkIGJ5IGEgdmFyaWFibGUtbGVuZ3RoCi0gKiBjb21tZW50IGZpZWxkLCBzbyB3ZSBoYXZlIHRvIHNjYW4gdGhyb3VnaCBpdCBiYWNrd2FyZHMuICBUaGUgY29tbWVudAotICogaXMgYXQgbW9zdCA2NEssIHBsdXMgd2UgaGF2ZSAxOCBieXRlcyBmb3IgdGhlIGVuZC1vZi1jZW50cmFsLWRpciBzdHVmZgotICogaXRzZWxmLCBwbHVzIGFwcGFyZW50bHkgc29tZXRpbWVzIHBlb3BsZSB0aHJvdyByYW5kb20ganVuayBvbiB0aGUgZW5kCi0gKiBqdXN0IGZvciB0aGUgZnVuIG9mIGl0LgotICoKLSAqIFRoaXMgaXMgYWxsIGEgbGl0dGxlIHdvYmJseS4gIElmIHRoZSB3cm9uZyB2YWx1ZSBlbmRzIHVwIGluIHRoZSBFT0NECi0gKiBhcmVhLCB3ZSdyZSBob3NlZC4gIFRoaXMgYXBwZWFycyB0byBiZSB0aGUgd2F5IHRoYXQgZXZlcmJvZHkgaGFuZGxlcwotICogaXQgdGhvdWdoLCBzbyB3ZSdyZSBpbiBwcmV0dHkgZ29vZCBjb21wYW55IGlmIHRoaXMgZmFpbHMuCi0gKi8KLXN0YXR1c190IFppcEZpbGU6OnJlYWRDZW50cmFsRGlyKHZvaWQpCi17Ci0gICAgc3RhdHVzX3QgcmVzdWx0ID0gTk9fRVJST1I7Ci0gICAgdW5zaWduZWQgY2hhciogYnVmID0gTlVMTDsKLSAgICBvZmZfdCBmaWxlTGVuZ3RoLCBzZWVrU3RhcnQ7Ci0gICAgbG9uZyByZWFkQW1vdW50OwotICAgIGludCBpOwotCi0gICAgZnNlZWsobVppcEZwLCAwLCBTRUVLX0VORCk7Ci0gICAgZmlsZUxlbmd0aCA9IGZ0ZWxsKG1aaXBGcCk7Ci0gICAgcmV3aW5kKG1aaXBGcCk7Ci0KLSAgICAvKiB0b28gc21hbGwgdG8gYmUgYSBaSVAgYXJjaGl2ZT8gKi8KLSAgICBpZiAoZmlsZUxlbmd0aCA8IEVuZE9mQ2VudHJhbERpcjo6a0VPQ0RMZW4pIHsKLSAgICAgICAgQUxPR0QoIkxlbmd0aCBpcyAlbGQgLS0gdG9vIHNtYWxsXG4iLCAobG9uZylmaWxlTGVuZ3RoKTsKLSAgICAgICAgcmVzdWx0ID0gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBidWYgPSBuZXcgdW5zaWduZWQgY2hhcltFbmRPZkNlbnRyYWxEaXI6OmtNYXhFT0NEU2VhcmNoXTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgQUxPR0QoIkZhaWx1cmUgYWxsb2NhdGluZyAlZCBieXRlcyBmb3IgRU9DRCBzZWFyY2giLAotICAgICAgICAgICAgIEVuZE9mQ2VudHJhbERpcjo6a01heEVPQ0RTZWFyY2gpOwotICAgICAgICByZXN1bHQgPSBOT19NRU1PUlk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBpZiAoZmlsZUxlbmd0aCA+IEVuZE9mQ2VudHJhbERpcjo6a01heEVPQ0RTZWFyY2gpIHsKLSAgICAgICAgc2Vla1N0YXJ0ID0gZmlsZUxlbmd0aCAtIEVuZE9mQ2VudHJhbERpcjo6a01heEVPQ0RTZWFyY2g7Ci0gICAgICAgIHJlYWRBbW91bnQgPSBFbmRPZkNlbnRyYWxEaXI6OmtNYXhFT0NEU2VhcmNoOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNlZWtTdGFydCA9IDA7Ci0gICAgICAgIHJlYWRBbW91bnQgPSAobG9uZykgZmlsZUxlbmd0aDsKLSAgICB9Ci0gICAgaWYgKGZzZWVrKG1aaXBGcCwgc2Vla1N0YXJ0LCBTRUVLX1NFVCkgIT0gMCkgewotICAgICAgICBBTE9HRCgiRmFpbHVyZSBzZWVraW5nIHRvIGVuZCBvZiB6aXAgYXQgJWxkIiwgKGxvbmcpIHNlZWtTdGFydCk7Ci0gICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICAvKiByZWFkIHRoZSBsYXN0IHBhcnQgb2YgdGhlIGZpbGUgaW50byB0aGUgYnVmZmVyICovCi0gICAgaWYgKGZyZWFkKGJ1ZiwgMSwgcmVhZEFtb3VudCwgbVppcEZwKSAhPSAoc2l6ZV90KSByZWFkQW1vdW50KSB7Ci0gICAgICAgIEFMT0dEKCJzaG9ydCBmaWxlPyB3YW50ZWQgJWxkXG4iLCByZWFkQW1vdW50KTsKLSAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8qIGZpbmQgdGhlIGVuZC1vZi1jZW50cmFsLWRpciBtYWdpYyAqLwotICAgIGZvciAoaSA9IHJlYWRBbW91bnQgLSA0OyBpID49IDA7IGktLSkgewotICAgICAgICBpZiAoYnVmW2ldID09IDB4NTAgJiYKLSAgICAgICAgICAgIFppcEVudHJ5OjpnZXRMb25nTEUoJmJ1ZltpXSkgPT0gRW5kT2ZDZW50cmFsRGlyOjprU2lnbmF0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBBTE9HVigiKysrIEZvdW5kIEVPQ0QgYXQgYnVmKyVkXG4iLCBpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChpIDwgMCkgewotICAgICAgICBBTE9HRCgiRU9DRCBub3QgZm91bmQsIG5vdCBaaXBcbiIpOwotICAgICAgICByZXN1bHQgPSBJTlZBTElEX09QRVJBVElPTjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8qIGV4dHJhY3QgZW9jZCB2YWx1ZXMgKi8KLSAgICByZXN1bHQgPSBtRU9DRC5yZWFkQnVmKGJ1ZiArIGksIHJlYWRBbW91bnQgLSBpKTsKLSAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIEFMT0dEKCJGYWlsdXJlIHJlYWRpbmcgJWxkIGJ5dGVzIG9mIEVPQ0QgdmFsdWVzIiwgcmVhZEFtb3VudCAtIGkpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotICAgIC8vbUVPQ0QuZHVtcCgpOwotCi0gICAgaWYgKG1FT0NELm1EaXNrTnVtYmVyICE9IDAgfHwgbUVPQ0QubURpc2tXaXRoQ2VudHJhbERpciAhPSAwIHx8Ci0gICAgICAgIG1FT0NELm1OdW1FbnRyaWVzICE9IG1FT0NELm1Ub3RhbE51bUVudHJpZXMpCi0gICAgewotICAgICAgICBBTE9HRCgiQXJjaGl2ZSBzcGFubmluZyBub3Qgc3VwcG9ydGVkXG4iKTsKLSAgICAgICAgcmVzdWx0ID0gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFNvIGZhciBzbyBnb29kLiAgIm1DZW50cmFsRGlyU2l6ZSIgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlCi0gICAgICogY2VudHJhbCBkaXJlY3RvcnksIHNvIHdlIGNhbiBqdXN0IHNlZWsgYmFjayB0aGF0IGZhciB0byBmaW5kIGl0LgotICAgICAqIFdlIGNhbiBhbHNvIHNlZWsgZm9yd2FyZCBtQ2VudHJhbERpck9mZnNldCBieXRlcyBmcm9tIHRoZQotICAgICAqIHN0YXJ0IG9mIHRoZSBmaWxlLgotICAgICAqCi0gICAgICogV2UncmUgbm90IGd1YXJhbnRlZWQgdG8gaGF2ZSB0aGUgcmVzdCBvZiB0aGUgY2VudHJhbCBkaXIgaW4gdGhlCi0gICAgICogYnVmZmVyLCBub3IgYXJlIHdlIGd1YXJhbnRlZWQgdGhhdCB0aGUgY2VudHJhbCBkaXIgd2lsbCBoYXZlIGFueQotICAgICAqIHNvcnQgb2YgY29udmVuaWVudCBzaXplLiAgV2UgbmVlZCB0byBza2lwIHRvIHRoZSBzdGFydCBvZiBpdCBhbmQKLSAgICAgKiByZWFkIHRoZSBoZWFkZXIsIHRoZW4gdGhlIG90aGVyIGdvb2RpZXMuCi0gICAgICoKLSAgICAgKiBUaGUgb25seSB0aGluZyB3ZSByZWFsbHkgbmVlZCByaWdodCBub3cgaXMgdGhlIGZpbGUgY29tbWVudCwgd2hpY2gKLSAgICAgKiB3ZSdyZSBob3BpbmcgdG8gcHJlc2VydmUuCi0gICAgICovCi0gICAgaWYgKGZzZWVrKG1aaXBGcCwgbUVPQ0QubUNlbnRyYWxEaXJPZmZzZXQsIFNFRUtfU0VUKSAhPSAwKSB7Ci0gICAgICAgIEFMT0dEKCJGYWlsdXJlIHNlZWtpbmcgdG8gY2VudHJhbCBkaXIgb2Zmc2V0ICVsZFxuIiwKLSAgICAgICAgICAgICBtRU9DRC5tQ2VudHJhbERpck9mZnNldCk7Ci0gICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIExvb3AgdGhyb3VnaCBhbmQgcmVhZCB0aGUgY2VudHJhbCBkaXIgZW50cmllcy4KLSAgICAgKi8KLSAgICBBTE9HVigiU2Nhbm5pbmcgJWQgZW50cmllcy4uLlxuIiwgbUVPQ0QubVRvdGFsTnVtRW50cmllcyk7Ci0gICAgaW50IGVudHJ5OwotICAgIGZvciAoZW50cnkgPSAwOyBlbnRyeSA8IG1FT0NELm1Ub3RhbE51bUVudHJpZXM7IGVudHJ5KyspIHsKLSAgICAgICAgWmlwRW50cnkqIHBFbnRyeSA9IG5ldyBaaXBFbnRyeTsKLQotICAgICAgICByZXN1bHQgPSBwRW50cnktPmluaXRGcm9tQ0RFKG1aaXBGcCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIEFMT0dEKCJpbml0RnJvbUNERSBmYWlsZWRcbiIpOwotICAgICAgICAgICAgZGVsZXRlIHBFbnRyeTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotCi0gICAgICAgIG1FbnRyaWVzLmFkZChwRW50cnkpOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBJZiBhbGwgd2VudCB3ZWxsLCB3ZSBzaG91bGQgbm93IGJlIGJhY2sgYXQgdGhlIEVPQ0QuCi0gICAgICovCi0gICAgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGNoZWNrQnVmWzRdOwotICAgICAgICBpZiAoZnJlYWQoY2hlY2tCdWYsIDEsIDQsIG1aaXBGcCkgIT0gNCkgewotICAgICAgICAgICAgQUxPR0QoIkVPQ0QgY2hlY2sgcmVhZCBmYWlsZWRcbiIpOwotICAgICAgICAgICAgcmVzdWx0ID0gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFppcEVudHJ5OjpnZXRMb25nTEUoY2hlY2tCdWYpICE9IEVuZE9mQ2VudHJhbERpcjo6a1NpZ25hdHVyZSkgewotICAgICAgICAgICAgQUxPR0QoIkVPQ0QgcmVhZCBjaGVjayBmYWlsZWRcbiIpOwotICAgICAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBBTE9HVigiKysrIEVPQ0QgcmVhZCBjaGVjayBwYXNzZWRcbiIpOwotICAgIH0KLQotYmFpbDoKLSAgICBkZWxldGVbXSBidWY7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi0vKgotICogQWRkIGEgbmV3IGZpbGUgdG8gdGhlIGFyY2hpdmUuCi0gKgotICogVGhpcyByZXF1aXJlcyBjcmVhdGluZyBhbmQgcG9wdWxhdGluZyBhIFppcEVudHJ5IHN0cnVjdHVyZSwgYW5kIGNvcHlpbmcKLSAqIHRoZSBkYXRhIGludG8gdGhlIGZpbGUgYXQgdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9uLiAgVGhlICJhcHByb3ByaWF0ZQotICogcG9zaXRpb24iIGlzIHRoZSBjdXJyZW50IGxvY2F0aW9uIG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeSwgd2hpY2ggd2UKLSAqIGNhc3VhbGx5IG92ZXJ3cml0ZSAod2UgY2FuIHB1dCBpdCBiYWNrIGxhdGVyKS4KLSAqCi0gKiBJZiB3ZSB3ZXJlIGNvbmNlcm5lZCBhYm91dCBzYWZldHksIHdlIHdvdWxkIHdhbnQgdG8gbWFrZSBhbGwgY2hhbmdlcwotICogaW4gYSB0ZW1wIGZpbGUgYW5kIHRoZW4gb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBhZnRlciBldmVyeXRoaW5nIHdhcwotICogc2FmZWx5IHdyaXR0ZW4uICBOb3QgcmVhbGx5IGEgY29uY2VybiBmb3IgdXMuCi0gKi8KLXN0YXR1c190IFppcEZpbGU6OmFkZENvbW1vbihjb25zdCBjaGFyKiBmaWxlTmFtZSwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsCi0gICAgY29uc3QgY2hhciogc3RvcmFnZU5hbWUsIGludCBzb3VyY2VUeXBlLCBpbnQgY29tcHJlc3Npb25NZXRob2QsCi0gICAgWmlwRW50cnkqKiBwcEVudHJ5KQotewotICAgIFppcEVudHJ5KiBwRW50cnkgPSBOVUxMOwotICAgIHN0YXR1c190IHJlc3VsdCA9IE5PX0VSUk9SOwotICAgIGxvbmcgbGZoUG9zbiwgc3RhcnRQb3NuLCBlbmRQb3NuLCB1bmNvbXByZXNzZWRMZW47Ci0gICAgRklMRSogaW5wdXRGcCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyBjcmM7Ci0gICAgdGltZV90IG1vZFdoZW47Ci0KLSAgICBpZiAobVJlYWRPbmx5KQotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0KLSAgICBhc3NlcnQoY29tcHJlc3Npb25NZXRob2QgPT0gWmlwRW50cnk6OmtDb21wcmVzc0RlZmxhdGVkIHx8Ci0gICAgICAgICAgIGNvbXByZXNzaW9uTWV0aG9kID09IFppcEVudHJ5OjprQ29tcHJlc3NTdG9yZWQpOwotCi0gICAgLyogbWFrZSBzdXJlIHdlJ3JlIGluIGEgcmVhc29uYWJsZSBzdGF0ZSAqLwotICAgIGFzc2VydChtWmlwRnAgIT0gTlVMTCk7Ci0gICAgYXNzZXJ0KG1FbnRyaWVzLnNpemUoKSA9PSBtRU9DRC5tVG90YWxOdW1FbnRyaWVzKTsKLQotICAgIC8qIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgKi8KLSAgICBpZiAoZ2V0RW50cnlCeU5hbWUoc3RvcmFnZU5hbWUpICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBBTFJFQURZX0VYSVNUUzsKLQotICAgIGlmICghZGF0YSkgewotICAgICAgICBpbnB1dEZwID0gZm9wZW4oZmlsZU5hbWUsIEZJTEVfT1BFTl9STyk7Ci0gICAgICAgIGlmIChpbnB1dEZwID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gZXJybm9Ub1N0YXR1cyhlcnJubyk7Ci0gICAgfQotCi0gICAgaWYgKGZzZWVrKG1aaXBGcCwgbUVPQ0QubUNlbnRyYWxEaXJPZmZzZXQsIFNFRUtfU0VUKSAhPSAwKSB7Ci0gICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBwRW50cnkgPSBuZXcgWmlwRW50cnk7Ci0gICAgcEVudHJ5LT5pbml0TmV3KHN0b3JhZ2VOYW1lLCBOVUxMKTsKLQotICAgIC8qCi0gICAgICogRnJvbSBoZXJlIG9uIG91dCwgZmFpbHVyZXMgYXJlIG1vcmUgaW50ZXJlc3RpbmcuCi0gICAgICovCi0gICAgbU5lZWRDRFJld3JpdGUgPSB0cnVlOwotCi0gICAgLyoKLSAgICAgKiBXcml0ZSB0aGUgTEZILCBldmVuIHRob3VnaCBpdCdzIHN0aWxsIG1vc3RseSBibGFuay4gIFdlIG5lZWQgaXQKLSAgICAgKiBhcyBhIHBsYWNlLWhvbGRlci4gIEluIHRoZW9yeSB0aGUgTEZIIGlzbid0IG5lY2Vzc2FyeSwgYnV0IGluCi0gICAgICogcHJhY3RpY2Ugc29tZSB1dGlsaXRpZXMgZGVtYW5kIGl0LgotICAgICAqLwotICAgIGxmaFBvc24gPSBmdGVsbChtWmlwRnApOwotICAgIHBFbnRyeS0+bUxGSC53cml0ZShtWmlwRnApOwotICAgIHN0YXJ0UG9zbiA9IGZ0ZWxsKG1aaXBGcCk7Ci0KLSAgICAvKgotICAgICAqIENvcHkgdGhlIGRhdGEgaW4sIHBvc3NpYmx5IGNvbXByZXNzaW5nIGl0IGFzIHdlIGdvLgotICAgICAqLwotICAgIGlmIChzb3VyY2VUeXBlID09IFppcEVudHJ5OjprQ29tcHJlc3NTdG9yZWQpIHsKLSAgICAgICAgaWYgKGNvbXByZXNzaW9uTWV0aG9kID09IFppcEVudHJ5OjprQ29tcHJlc3NEZWZsYXRlZCkgewotICAgICAgICAgICAgYm9vbCBmYWlsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbXByZXNzRnBUb0ZwKG1aaXBGcCwgaW5wdXRGcCwgZGF0YSwgc2l6ZSwgJmNyYyk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0QoImNvbXByZXNzaW9uIGZhaWxlZCwgc3RvcmluZ1xuIik7Ci0gICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBNYWtlIHN1cmUgaXQgaGFzIGNvbXByZXNzZWQgImVub3VnaCIuICBUaGlzIHByb2JhYmx5IG91Z2h0Ci0gICAgICAgICAgICAgICAgICogdG8gYmUgc2V0IHRocm91Z2ggYW4gQVBJIGNhbGwsIGJ1dCBJIGRvbid0IGV4cGVjdCBvdXIKLSAgICAgICAgICAgICAgICAgKiBjcml0ZXJpYSB0byBjaGFuZ2Ugb3ZlciB0aW1lLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGxvbmcgc3JjID0gaW5wdXRGcCA/IGZ0ZWxsKGlucHV0RnApIDogc2l6ZTsKLSAgICAgICAgICAgICAgICBsb25nIGRzdCA9IGZ0ZWxsKG1aaXBGcCkgLSBzdGFydFBvc247Ci0gICAgICAgICAgICAgICAgaWYgKGRzdCArIChkc3QgLyAxMCkgPiBzcmMpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR0QoImluc3VmZmljaWVudCBjb21wcmVzc2lvbiAoc3JjPSVsZCBkc3Q9JWxkKSwgc3RvcmluZ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0KTsKLSAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmYWlsZWQpIHsKLSAgICAgICAgICAgICAgICBjb21wcmVzc2lvbk1ldGhvZCA9IFppcEVudHJ5OjprQ29tcHJlc3NTdG9yZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0RnApIHJld2luZChpbnB1dEZwKTsKLSAgICAgICAgICAgICAgICBmc2VlayhtWmlwRnAsIHN0YXJ0UG9zbiwgU0VFS19TRVQpOwotICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCB0byBrQ29tcHJlc3NTdG9yZWQgY2FzZSAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIGhhbmRsZSAibm8gY29tcHJlc3Npb24iIHJlcXVlc3QsIG9yIGZhaWxlZCBjb21wcmVzc2lvbiBmcm9tIGFib3ZlICovCi0gICAgICAgIGlmIChjb21wcmVzc2lvbk1ldGhvZCA9PSBaaXBFbnRyeTo6a0NvbXByZXNzU3RvcmVkKSB7Ci0gICAgICAgICAgICBpZiAoaW5wdXRGcCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcHlGcFRvRnAobVppcEZwLCBpbnB1dEZwLCAmY3JjKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29weURhdGFUb0ZwKG1aaXBGcCwgZGF0YSwgc2l6ZSwgJmNyYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byB0cnVuY2F0ZTsgaGFwcGVucyBpbiBDREUgcmV3cml0ZQotICAgICAgICAgICAgICAgIEFMT0dEKCJmYWlsZWQgY29weWluZyBkYXRhIGluXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjdXJyZW50bHkgc2Vla2VkIHRvIGVuZCBvZiBmaWxlCi0gICAgICAgIHVuY29tcHJlc3NlZExlbiA9IGlucHV0RnAgPyBmdGVsbChpbnB1dEZwKSA6IHNpemU7Ci0gICAgfSBlbHNlIGlmIChzb3VyY2VUeXBlID09IFppcEVudHJ5OjprQ29tcHJlc3NEZWZsYXRlZCkgewotICAgICAgICAvKiB3ZSBzaG91bGQgc3VwcG9ydCB1bmNvbXByZXNzZWQtZnJvbS1jb21wcmVzc2VkLCBidXQgaXQncyBub3QKLSAgICAgICAgICogaW1wb3J0YW50IHJpZ2h0IG5vdyAqLwotICAgICAgICBhc3NlcnQoY29tcHJlc3Npb25NZXRob2QgPT0gWmlwRW50cnk6OmtDb21wcmVzc0RlZmxhdGVkKTsKLQotICAgICAgICBib29sIHNjYW5SZXN1bHQ7Ci0gICAgICAgIGludCBtZXRob2Q7Ci0gICAgICAgIGxvbmcgY29tcHJlc3NlZExlbjsKLQotICAgICAgICBzY2FuUmVzdWx0ID0gWmlwVXRpbHM6OmV4YW1pbmVHemlwKGlucHV0RnAsICZtZXRob2QsICZ1bmNvbXByZXNzZWRMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAmY29tcHJlc3NlZExlbiwgJmNyYyk7Ci0gICAgICAgIGlmICghc2NhblJlc3VsdCB8fCBtZXRob2QgIT0gWmlwRW50cnk6OmtDb21wcmVzc0RlZmxhdGVkKSB7Ci0gICAgICAgICAgICBBTE9HRCgidGhpcyBpc24ndCBhIGRlZmxhdGVkIGd6aXAgZmlsZT8iKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBjb3B5UGFydGlhbEZwVG9GcChtWmlwRnAsIGlucHV0RnAsIGNvbXByZXNzZWRMZW4sIE5VTEwpOwotICAgICAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBBTE9HRCgiZmFpbGVkIGNvcHlpbmcgZ3ppcCBkYXRhIGluXG4iKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFdlIGNvdWxkIHdyaXRlIHRoZSAiRGF0YSBEZXNjcmlwdG9yIiwgYnV0IHRoZXJlIGRvZXNuJ3Qgc2VlbSB0bwotICAgICAqIGJlIGFueSBwb2ludCBzaW5jZSB3ZSdyZSBnb2luZyB0byBnbyBiYWNrIGFuZCB3cml0ZSB0aGUgTEZILgotICAgICAqCi0gICAgICogVXBkYXRlIGZpbGUgb2Zmc2V0cy4KLSAgICAgKi8KLSAgICBlbmRQb3NuID0gZnRlbGwobVppcEZwKTsgICAgICAgICAgICAvLyBzZWVrZWQgdG8gZW5kIG9mIGNvbXByZXNzZWQgZGF0YQotCi0gICAgLyoKLSAgICAgKiBTdWNjZXNzISAgRmlsbCBvdXQgbmV3IHZhbHVlcy4KLSAgICAgKi8KLSAgICBwRW50cnktPnNldERhdGFJbmZvKHVuY29tcHJlc3NlZExlbiwgZW5kUG9zbiAtIHN0YXJ0UG9zbiwgY3JjLAotICAgICAgICBjb21wcmVzc2lvbk1ldGhvZCk7Ci0gICAgbW9kV2hlbiA9IGdldE1vZFRpbWUoaW5wdXRGcCA/IGZpbGVubyhpbnB1dEZwKSA6IGZpbGVubyhtWmlwRnApKTsKLSAgICBwRW50cnktPnNldE1vZFdoZW4obW9kV2hlbik7Ci0gICAgcEVudHJ5LT5zZXRMRkhPZmZzZXQobGZoUG9zbik7Ci0gICAgbUVPQ0QubU51bUVudHJpZXMrKzsKLSAgICBtRU9DRC5tVG90YWxOdW1FbnRyaWVzKys7Ci0gICAgbUVPQ0QubUNlbnRyYWxEaXJTaXplID0gMDsgICAgICAvLyBtYXJrIGludmFsaWQ7IHNldCBieSBmbHVzaCgpCi0gICAgbUVPQ0QubUNlbnRyYWxEaXJPZmZzZXQgPSBlbmRQb3NuOwotCi0gICAgLyoKLSAgICAgKiBHbyBiYWNrIGFuZCB3cml0ZSB0aGUgTEZILgotICAgICAqLwotICAgIGlmIChmc2VlayhtWmlwRnAsIGxmaFBvc24sIFNFRUtfU0VUKSAhPSAwKSB7Ci0gICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0gICAgcEVudHJ5LT5tTEZILndyaXRlKG1aaXBGcCk7Ci0KLSAgICAvKgotICAgICAqIEFkZCBwRW50cnkgdG8gdGhlIGxpc3QuCi0gICAgICovCi0gICAgbUVudHJpZXMuYWRkKHBFbnRyeSk7Ci0gICAgaWYgKHBwRW50cnkgIT0gTlVMTCkKLSAgICAgICAgKnBwRW50cnkgPSBwRW50cnk7Ci0gICAgcEVudHJ5ID0gTlVMTDsKLQotYmFpbDoKLSAgICBpZiAoaW5wdXRGcCAhPSBOVUxMKQotICAgICAgICBmY2xvc2UoaW5wdXRGcCk7Ci0gICAgZGVsZXRlIHBFbnRyeTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogQWRkIGFuIGVudHJ5IGJ5IGNvcHlpbmcgaXQgZnJvbSBhbm90aGVyIHppcCBmaWxlLiAgSWYgInBhZGRpbmciIGlzCi0gKiBub256ZXJvLCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSAiZXh0cmEiCi0gKiBmaWVsZCBpbiB0aGUgaGVhZGVyLgotICoKLSAqIElmICJwcEVudHJ5IiBpcyBub24tTlVMTCwgYSBwb2ludGVyIHRvIHRoZSBuZXcgZW50cnkgd2lsbCBiZSByZXR1cm5lZC4KLSAqLwotc3RhdHVzX3QgWmlwRmlsZTo6YWRkKGNvbnN0IFppcEZpbGUqIHBTb3VyY2VaaXAsIGNvbnN0IFppcEVudHJ5KiBwU291cmNlRW50cnksCi0gICAgaW50IHBhZGRpbmcsIFppcEVudHJ5KiogcHBFbnRyeSkKLXsKLSAgICBaaXBFbnRyeSogcEVudHJ5ID0gTlVMTDsKLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0gICAgbG9uZyBsZmhQb3NuLCBlbmRQb3NuOwotCi0gICAgaWYgKG1SZWFkT25seSkKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotCi0gICAgLyogbWFrZSBzdXJlIHdlJ3JlIGluIGEgcmVhc29uYWJsZSBzdGF0ZSAqLwotICAgIGFzc2VydChtWmlwRnAgIT0gTlVMTCk7Ci0gICAgYXNzZXJ0KG1FbnRyaWVzLnNpemUoKSA9PSBtRU9DRC5tVG90YWxOdW1FbnRyaWVzKTsKLQotICAgIGlmIChmc2VlayhtWmlwRnAsIG1FT0NELm1DZW50cmFsRGlyT2Zmc2V0LCBTRUVLX1NFVCkgIT0gMCkgewotICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgcEVudHJ5ID0gbmV3IFppcEVudHJ5OwotICAgIGlmIChwRW50cnkgPT0gTlVMTCkgewotICAgICAgICByZXN1bHQgPSBOT19NRU1PUlk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBwRW50cnktPmluaXRGcm9tRXh0ZXJuYWwocFNvdXJjZVppcCwgcFNvdXJjZUVudHJ5KTsKLSAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKQotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgaWYgKHBhZGRpbmcgIT0gMCkgewotICAgICAgICByZXN1bHQgPSBwRW50cnktPmFkZFBhZGRpbmcocGFkZGluZyk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBGcm9tIGhlcmUgb24gb3V0LCBmYWlsdXJlcyBhcmUgbW9yZSBpbnRlcmVzdGluZy4KLSAgICAgKi8KLSAgICBtTmVlZENEUmV3cml0ZSA9IHRydWU7Ci0KLSAgICAvKgotICAgICAqIFdyaXRlIHRoZSBMRkguICBTaW5jZSB3ZSdyZSBub3QgcmVjb21wcmVzc2luZyB0aGUgZGF0YSwgd2UgYWxyZWFkeQotICAgICAqIGhhdmUgYWxsIG9mIHRoZSBmaWVsZHMgZmlsbGVkIG91dC4KLSAgICAgKi8KLSAgICBsZmhQb3NuID0gZnRlbGwobVppcEZwKTsKLSAgICBwRW50cnktPm1MRkgud3JpdGUobVppcEZwKTsKLQotICAgIC8qCi0gICAgICogQ29weSB0aGUgZGF0YSBvdmVyLgotICAgICAqCi0gICAgICogSWYgdGhlICJoYXMgZGF0YSBkZXNjcmlwdG9yIiBmbGFnIGlzIHNldCwgd2Ugd2FudCB0byBjb3B5IHRoZSBERAotICAgICAqIGZpZWxkcyBhcyB3ZWxsLiAgVGhpcyBpcyBhIGZpeGVkLXNpemUgYXJlYSBpbW1lZGlhdGVseSBmb2xsb3dpbmcKLSAgICAgKiB0aGUgZGF0YS4KLSAgICAgKi8KLSAgICBpZiAoZnNlZWsocFNvdXJjZVppcC0+bVppcEZwLCBwU291cmNlRW50cnktPmdldEZpbGVPZmZzZXQoKSwgU0VFS19TRVQpICE9IDApCi0gICAgewotICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgb2ZmX3QgY29weUxlbjsKLSAgICBjb3B5TGVuID0gcFNvdXJjZUVudHJ5LT5nZXRDb21wcmVzc2VkTGVuKCk7Ci0gICAgaWYgKChwU291cmNlRW50cnktPm1MRkgubUdQQml0RmxhZyAmIFppcEVudHJ5OjprVXNlc0RhdGFEZXNjcikgIT0gMCkKLSAgICAgICAgY29weUxlbiArPSBaaXBFbnRyeTo6a0RhdGFEZXNjcmlwdG9yTGVuOwotCi0gICAgaWYgKGNvcHlQYXJ0aWFsRnBUb0ZwKG1aaXBGcCwgcFNvdXJjZVppcC0+bVppcEZwLCBjb3B5TGVuLCBOVUxMKQotICAgICAgICAhPSBOT19FUlJPUikKLSAgICB7Ci0gICAgICAgIEFMT0dXKCJjb3B5IG9mICclcycgZmFpbGVkXG4iLCBwRW50cnktPm1DREUubUZpbGVOYW1lKTsKLSAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8qCi0gICAgICogVXBkYXRlIGZpbGUgb2Zmc2V0cy4KLSAgICAgKi8KLSAgICBlbmRQb3NuID0gZnRlbGwobVppcEZwKTsKLQotICAgIC8qCi0gICAgICogU3VjY2VzcyEgIEZpbGwgb3V0IG5ldyB2YWx1ZXMuCi0gICAgICovCi0gICAgcEVudHJ5LT5zZXRMRkhPZmZzZXQobGZoUG9zbik7ICAgICAgLy8gc2V0cyBtQ0RFLm1Mb2NhbEhlYWRlclJlbE9mZnNldAotICAgIG1FT0NELm1OdW1FbnRyaWVzKys7Ci0gICAgbUVPQ0QubVRvdGFsTnVtRW50cmllcysrOwotICAgIG1FT0NELm1DZW50cmFsRGlyU2l6ZSA9IDA7ICAgICAgLy8gbWFyayBpbnZhbGlkOyBzZXQgYnkgZmx1c2goKQotICAgIG1FT0NELm1DZW50cmFsRGlyT2Zmc2V0ID0gZW5kUG9zbjsKLQotICAgIC8qCi0gICAgICogQWRkIHBFbnRyeSB0byB0aGUgbGlzdC4KLSAgICAgKi8KLSAgICBtRW50cmllcy5hZGQocEVudHJ5KTsKLSAgICBpZiAocHBFbnRyeSAhPSBOVUxMKQotICAgICAgICAqcHBFbnRyeSA9IHBFbnRyeTsKLSAgICBwRW50cnkgPSBOVUxMOwotCi0gICAgcmVzdWx0ID0gTk9fRVJST1I7Ci0KLWJhaWw6Ci0gICAgZGVsZXRlIHBFbnRyeTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogQ29weSBhbGwgb2YgdGhlIGJ5dGVzIGluICJzcmMiIHRvICJkc3QiLgotICoKLSAqIE9uIGV4aXQsICJzcmNGcCIgd2lsbCBiZSBzZWVrZWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSwgYW5kICJkc3RGcCIKLSAqIHdpbGwgYmUgc2Vla2VkIGltbWVkaWF0ZWx5IHBhc3QgdGhlIGRhdGEuCi0gKi8KLXN0YXR1c190IFppcEZpbGU6OmNvcHlGcFRvRnAoRklMRSogZHN0RnAsIEZJTEUqIHNyY0ZwLCB1bnNpZ25lZCBsb25nKiBwQ1JDMzIpCi17Ci0gICAgdW5zaWduZWQgY2hhciB0bXBCdWZbMzI3NjhdOwotICAgIHNpemVfdCBjb3VudDsKLQotICAgICpwQ1JDMzIgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGNvdW50ID0gZnJlYWQodG1wQnVmLCAxLCBzaXplb2YodG1wQnVmKSwgc3JjRnApOwotICAgICAgICBpZiAoZmVycm9yKHNyY0ZwKSB8fCBmZXJyb3IoZHN0RnApKQotICAgICAgICAgICAgcmV0dXJuIGVycm5vVG9TdGF0dXMoZXJybm8pOwotICAgICAgICBpZiAoY291bnQgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICpwQ1JDMzIgPSBjcmMzMigqcENSQzMyLCB0bXBCdWYsIGNvdW50KTsKLQotICAgICAgICBpZiAoZndyaXRlKHRtcEJ1ZiwgMSwgY291bnQsIGRzdEZwKSAhPSBjb3VudCkgewotICAgICAgICAgICAgQUxPR0QoImZ3cml0ZSAlZCBieXRlcyBmYWlsZWRcbiIsIChpbnQpIGNvdW50KTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogQ29weSBhbGwgb2YgdGhlIGJ5dGVzIGluICJzcmMiIHRvICJkc3QiLgotICoKLSAqIE9uIGV4aXQsICJkc3RGcCIgd2lsbCBiZSBzZWVrZWQgaW1tZWRpYXRlbHkgcGFzdCB0aGUgZGF0YS4KLSAqLwotc3RhdHVzX3QgWmlwRmlsZTo6Y29weURhdGFUb0ZwKEZJTEUqIGRzdEZwLAotICAgIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nKiBwQ1JDMzIpCi17Ci0gICAgc2l6ZV90IGNvdW50OwotCi0gICAgKnBDUkMzMiA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgIGlmIChzaXplID4gMCkgewotICAgICAgICAqcENSQzMyID0gY3JjMzIoKnBDUkMzMiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRhdGEsIHNpemUpOwotICAgICAgICBpZiAoZndyaXRlKGRhdGEsIDEsIHNpemUsIGRzdEZwKSAhPSBzaXplKSB7Ci0gICAgICAgICAgICBBTE9HRCgiZndyaXRlICVkIGJ5dGVzIGZhaWxlZFxuIiwgKGludCkgc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIENvcHkgc29tZSBvZiB0aGUgYnl0ZXMgaW4gInNyYyIgdG8gImRzdCIuCi0gKgotICogSWYgInBDUkMzMiIgaXMgTlVMTCwgdGhlIENSQyB3aWxsIG5vdCBiZSBjb21wdXRlZC4KLSAqCi0gKiBPbiBleGl0LCAic3JjRnAiIHdpbGwgYmUgc2Vla2VkIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUsIGFuZCAiZHN0RnAiCi0gKiB3aWxsIGJlIHNlZWtlZCBpbW1lZGlhdGVseSBwYXN0IHRoZSBkYXRhIGp1c3Qgd3JpdHRlbi4KLSAqLwotc3RhdHVzX3QgWmlwRmlsZTo6Y29weVBhcnRpYWxGcFRvRnAoRklMRSogZHN0RnAsIEZJTEUqIHNyY0ZwLCBsb25nIGxlbmd0aCwKLSAgICB1bnNpZ25lZCBsb25nKiBwQ1JDMzIpCi17Ci0gICAgdW5zaWduZWQgY2hhciB0bXBCdWZbMzI3NjhdOwotICAgIHNpemVfdCBjb3VudDsKLQotICAgIGlmIChwQ1JDMzIgIT0gTlVMTCkKLSAgICAgICAgKnBDUkMzMiA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotCi0gICAgd2hpbGUgKGxlbmd0aCkgewotICAgICAgICBsb25nIHJlYWRTaXplOwotICAgICAgICAKLSAgICAgICAgcmVhZFNpemUgPSBzaXplb2YodG1wQnVmKTsKLSAgICAgICAgaWYgKHJlYWRTaXplID4gbGVuZ3RoKQotICAgICAgICAgICAgcmVhZFNpemUgPSBsZW5ndGg7Ci0KLSAgICAgICAgY291bnQgPSBmcmVhZCh0bXBCdWYsIDEsIHJlYWRTaXplLCBzcmNGcCk7Ci0gICAgICAgIGlmICgobG9uZykgY291bnQgIT0gcmVhZFNpemUpIHsgICAgIC8vIGVycm9yIG9yIHVuZXhwZWN0ZWQgRU9GCi0gICAgICAgICAgICBBTE9HRCgiZnJlYWQgJWQgYnl0ZXMgZmFpbGVkXG4iLCAoaW50KSByZWFkU2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwQ1JDMzIgIT0gTlVMTCkKLSAgICAgICAgICAgICpwQ1JDMzIgPSBjcmMzMigqcENSQzMyLCB0bXBCdWYsIGNvdW50KTsKLQotICAgICAgICBpZiAoZndyaXRlKHRtcEJ1ZiwgMSwgY291bnQsIGRzdEZwKSAhPSBjb3VudCkgewotICAgICAgICAgICAgQUxPR0QoImZ3cml0ZSAlZCBieXRlcyBmYWlsZWRcbiIsIChpbnQpIGNvdW50KTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgbGVuZ3RoIC09IHJlYWRTaXplOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIENvbXByZXNzIGFsbCBvZiB0aGUgZGF0YSBpbiAic3JjRnAiIGFuZCB3cml0ZSBpdCB0byAiZHN0RnAiLgotICoKLSAqIE9uIGV4aXQsICJzcmNGcCIgd2lsbCBiZSBzZWVrZWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSwgYW5kICJkc3RGcCIKLSAqIHdpbGwgYmUgc2Vla2VkIGltbWVkaWF0ZWx5IHBhc3QgdGhlIGNvbXByZXNzZWQgZGF0YS4KLSAqLwotc3RhdHVzX3QgWmlwRmlsZTo6Y29tcHJlc3NGcFRvRnAoRklMRSogZHN0RnAsIEZJTEUqIHNyY0ZwLAotICAgIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nKiBwQ1JDMzIpCi17Ci0gICAgc3RhdHVzX3QgcmVzdWx0ID0gTk9fRVJST1I7Ci0gICAgY29uc3Qgc2l6ZV90IGtCdWZTaXplID0gMzI3Njg7Ci0gICAgdW5zaWduZWQgY2hhciogaW5CdWYgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIqIG91dEJ1ZiA9IE5VTEw7Ci0gICAgel9zdHJlYW0genN0cmVhbTsKLSAgICBib29sIGF0RW9mID0gZmFsc2U7ICAgICAvLyBubyBmZW9mKCkgYXZpYWlsYWJsZSB5ZXQKLSAgICB1bnNpZ25lZCBsb25nIGNyYzsKLSAgICBpbnQgemVycjsKLQotICAgIC8qCi0gICAgICogQ3JlYXRlIGFuIGlucHV0IGJ1ZmZlciBhbmQgYW4gb3V0cHV0IGJ1ZmZlci4KLSAgICAgKi8KLSAgICBpbkJ1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW2tCdWZTaXplXTsKLSAgICBvdXRCdWYgPSBuZXcgdW5zaWduZWQgY2hhcltrQnVmU2l6ZV07Ci0gICAgaWYgKGluQnVmID09IE5VTEwgfHwgb3V0QnVmID09IE5VTEwpIHsKLSAgICAgICAgcmVzdWx0ID0gTk9fTUVNT1JZOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJbml0aWFsaXplIHRoZSB6bGliIHN0cmVhbS4KLSAgICAgKi8KLSAgICBtZW1zZXQoJnpzdHJlYW0sIDAsIHNpemVvZih6c3RyZWFtKSk7Ci0gICAgenN0cmVhbS56YWxsb2MgPSBaX05VTEw7Ci0gICAgenN0cmVhbS56ZnJlZSA9IFpfTlVMTDsKLSAgICB6c3RyZWFtLm9wYXF1ZSA9IFpfTlVMTDsKLSAgICB6c3RyZWFtLm5leHRfaW4gPSBOVUxMOwotICAgIHpzdHJlYW0uYXZhaWxfaW4gPSAwOwotICAgIHpzdHJlYW0ubmV4dF9vdXQgPSBvdXRCdWY7Ci0gICAgenN0cmVhbS5hdmFpbF9vdXQgPSBrQnVmU2l6ZTsKLSAgICB6c3RyZWFtLmRhdGFfdHlwZSA9IFpfVU5LTk9XTjsKLQotICAgIHplcnIgPSBkZWZsYXRlSW5pdDIoJnpzdHJlYW0sIFpfQkVTVF9DT01QUkVTU0lPTiwKLSAgICAgICAgWl9ERUZMQVRFRCwgLU1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZKTsKLSAgICBpZiAoemVyciAhPSBaX09LKSB7Ci0gICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgIGlmICh6ZXJyID09IFpfVkVSU0lPTl9FUlJPUikgewotICAgICAgICAgICAgQUxPR0UoIkluc3RhbGxlZCB6bGliIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggbGlua2VkIHZlcnNpb24gKCVzKVxuIiwKLSAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR0QoIkNhbGwgdG8gZGVmbGF0ZUluaXQyIGZhaWxlZCAoemVycj0lZClcbiIsIHplcnIpOwotICAgICAgICB9Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBjcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLQotICAgIC8qCi0gICAgICogTG9vcCB3aGlsZSB3ZSBoYXZlIGRhdGEuCi0gICAgICovCi0gICAgZG8gewotICAgICAgICBzaXplX3QgZ2V0U2l6ZTsKLSAgICAgICAgaW50IGZsdXNoOwotCi0gICAgICAgIC8qIG9ubHkgcmVhZCBpZiB0aGUgaW5wdXQgYnVmZmVyIGlzIGVtcHR5ICovCi0gICAgICAgIGlmICh6c3RyZWFtLmF2YWlsX2luID09IDAgJiYgIWF0RW9mKSB7Ci0gICAgICAgICAgICBBTE9HVigiKysrIHJlYWRpbmcgJWQgYnl0ZXNcbiIsIChpbnQpa0J1ZlNpemUpOwotICAgICAgICAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgICAgICAgICBnZXRTaXplID0gc2l6ZSA+IGtCdWZTaXplID8ga0J1ZlNpemUgOiBzaXplOwotICAgICAgICAgICAgICAgIG1lbWNweShpbkJ1ZiwgZGF0YSwgZ2V0U2l6ZSk7Ci0gICAgICAgICAgICAgICAgZGF0YSA9ICgoY29uc3QgY2hhciopZGF0YSkgKyBnZXRTaXplOwotICAgICAgICAgICAgICAgIHNpemUgLT0gZ2V0U2l6ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZ2V0U2l6ZSA9IGZyZWFkKGluQnVmLCAxLCBrQnVmU2l6ZSwgc3JjRnApOwotICAgICAgICAgICAgICAgIGlmIChmZXJyb3Ioc3JjRnApKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dEKCJkZWZsYXRlIHJlYWQgZmFpbGVkIChlcnJubz0lZClcbiIsIGVycm5vKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byB6X2JhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGdldFNpemUgPCBrQnVmU2l6ZSkgewotICAgICAgICAgICAgICAgIEFMT0dWKCIrKysgIGdvdCAlZCBieXRlcywgRU9GIHJlYWNoZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpZ2V0U2l6ZSk7Ci0gICAgICAgICAgICAgICAgYXRFb2YgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjcmMgPSBjcmMzMihjcmMsIGluQnVmLCBnZXRTaXplKTsKLQotICAgICAgICAgICAgenN0cmVhbS5uZXh0X2luID0gaW5CdWY7Ci0gICAgICAgICAgICB6c3RyZWFtLmF2YWlsX2luID0gZ2V0U2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdEVvZikKLSAgICAgICAgICAgIGZsdXNoID0gWl9GSU5JU0g7ICAgICAgIC8qIHRlbGwgemxpYiB0aGF0IHdlJ3JlIGRvbmUgKi8KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmx1c2ggPSBaX05PX0ZMVVNIOyAgICAgLyogbW9yZSB0byBjb21lISAqLwotCi0gICAgICAgIHplcnIgPSBkZWZsYXRlKCZ6c3RyZWFtLCBmbHVzaCk7Ci0gICAgICAgIGlmICh6ZXJyICE9IFpfT0sgJiYgemVyciAhPSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAgICAgIEFMT0dEKCJ6bGliIGRlZmxhdGUgY2FsbCBmYWlsZWQgKHplcnI9JWQpXG4iLCB6ZXJyKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICBnb3RvIHpfYmFpbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHdyaXRlIHdoZW4gd2UncmUgZnVsbCBvciB3aGVuIHdlJ3JlIGRvbmUgKi8KLSAgICAgICAgaWYgKHpzdHJlYW0uYXZhaWxfb3V0ID09IDAgfHwKLSAgICAgICAgICAgICh6ZXJyID09IFpfU1RSRUFNX0VORCAmJiB6c3RyZWFtLmF2YWlsX291dCAhPSAodUludCkga0J1ZlNpemUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBTE9HVigiKysrIHdyaXRpbmcgJWQgYnl0ZXNcbiIsIChpbnQpICh6c3RyZWFtLm5leHRfb3V0IC0gb3V0QnVmKSk7Ci0gICAgICAgICAgICBpZiAoZndyaXRlKG91dEJ1ZiwgMSwgenN0cmVhbS5uZXh0X291dCAtIG91dEJ1ZiwgZHN0RnApICE9Ci0gICAgICAgICAgICAgICAgKHNpemVfdCkoenN0cmVhbS5uZXh0X291dCAtIG91dEJ1ZikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQUxPR0QoIndyaXRlICVkIGZhaWxlZCBpbiBkZWZsYXRlXG4iLAotICAgICAgICAgICAgICAgICAgICAoaW50KSAoenN0cmVhbS5uZXh0X291dCAtIG91dEJ1ZikpOwotICAgICAgICAgICAgICAgIGdvdG8gel9iYWlsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB6c3RyZWFtLm5leHRfb3V0ID0gb3V0QnVmOwotICAgICAgICAgICAgenN0cmVhbS5hdmFpbF9vdXQgPSBrQnVmU2l6ZTsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKHplcnIgPT0gWl9PSyk7Ci0KLSAgICBhc3NlcnQoemVyciA9PSBaX1NUUkVBTV9FTkQpOyAgICAgICAvKiBvdGhlciBlcnJvcnMgc2hvdWxkJ3ZlIGJlZW4gY2F1Z2h0ICovCi0KLSAgICAqcENSQzMyID0gY3JjOwotCi16X2JhaWw6Ci0gICAgZGVmbGF0ZUVuZCgmenN0cmVhbSk7ICAgICAgICAvKiBmcmVlIHVwIGFueSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAqLwotCi1iYWlsOgotICAgIGRlbGV0ZVtdIGluQnVmOwotICAgIGRlbGV0ZVtdIG91dEJ1ZjsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBNYXJrIGFuIGVudHJ5IGFzIGRlbGV0ZWQuCi0gKgotICogV2Ugd2lsbCBldmVudHVhbGx5IG5lZWQgdG8gY3J1bmNoIHRoZSBmaWxlIGRvd24sIGJ1dCBpZiBzZXZlcmFsIGZpbGVzCi0gKiBhcmUgYmVpbmcgcmVtb3ZlZCAocGVyaGFwcyBhcyBwYXJ0IG9mIGFuICJ1cGRhdGUiIHByb2Nlc3MpIHdlIGNhbiBtYWtlCi0gKiB0aGluZ3MgY29uc2lkZXJhYmx5IGZhc3RlciBieSBkZWZlcnJpbmcgdGhlIHJlbW92YWwgdG8gImZsdXNoIiB0aW1lLgotICovCi1zdGF0dXNfdCBaaXBGaWxlOjpyZW1vdmUoWmlwRW50cnkqIHBFbnRyeSkKLXsKLSAgICAvKgotICAgICAqIFNob3VsZCB2ZXJpZnkgdGhhdCBwRW50cnkgaXMgYWN0dWFsbHkgcGFydCBvZiB0aGlzIGFyY2hpdmUsIGFuZAotICAgICAqIG5vdCBzb21lIHN0cmF5IFppcEVudHJ5IGZyb20gYSBkaWZmZXJlbnQgZmlsZS4KLSAgICAgKi8KLQotICAgIC8qIG1hcmsgZW50cnkgYXMgZGVsZXRlZCwgYW5kIG1hcmsgYXJjaGl2ZSBhcyBkaXJ0eSAqLwotICAgIHBFbnRyeS0+c2V0RGVsZXRlZCgpOwotICAgIG1OZWVkQ0RSZXdyaXRlID0gdHJ1ZTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLS8qCi0gKiBGbHVzaCBhbnkgcGVuZGluZyB3cml0ZXMuCi0gKgotICogSW4gcGFydGljdWxhciwgdGhpcyB3aWxsIGNydW5jaCBvdXQgZGVsZXRlZCBlbnRyaWVzLCBhbmQgd3JpdGUgdGhlCi0gKiBDZW50cmFsIERpcmVjdG9yeSBhbmQgRU9DRCBpZiB3ZSBoYXZlIHN0b21wZWQgb24gdGhlbS4KLSAqLwotc3RhdHVzX3QgWmlwRmlsZTo6Zmx1c2godm9pZCkKLXsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBOT19FUlJPUjsKLSAgICBsb25nIGVvY2RQb3NuOwotICAgIGludCBpLCBjb3VudDsKLQotICAgIGlmIChtUmVhZE9ubHkpCi0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICBpZiAoIW1OZWVkQ0RSZXdyaXRlKQotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0KLSAgICBhc3NlcnQobVppcEZwICE9IE5VTEwpOwotCi0gICAgcmVzdWx0ID0gY3J1bmNoQXJjaGl2ZSgpOwotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAoZnNlZWsobVppcEZwLCBtRU9DRC5tQ2VudHJhbERpck9mZnNldCwgU0VFS19TRVQpICE9IDApCi0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotCi0gICAgY291bnQgPSBtRW50cmllcy5zaXplKCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgWmlwRW50cnkqIHBFbnRyeSA9IG1FbnRyaWVzW2ldOwotICAgICAgICBwRW50cnktPm1DREUud3JpdGUobVppcEZwKTsKLSAgICB9Ci0KLSAgICBlb2NkUG9zbiA9IGZ0ZWxsKG1aaXBGcCk7Ci0gICAgbUVPQ0QubUNlbnRyYWxEaXJTaXplID0gZW9jZFBvc24gLSBtRU9DRC5tQ2VudHJhbERpck9mZnNldDsKLQotICAgIG1FT0NELndyaXRlKG1aaXBGcCk7Ci0KLSAgICAvKgotICAgICAqIElmIHdlIGhhZCBzb21lIHN0dWZmIGJsb2F0IHVwIGR1cmluZyBjb21wcmVzc2lvbiBhbmQgZ2V0IHJlcGxhY2VkCi0gICAgICogd2l0aCBwbGFpbiBmaWxlcywgb3IgaWYgd2UgZGVsZXRlZCBzb21lIGVudHJpZXMsIHRoZXJlJ3MgYSBsb3QKLSAgICAgKiBvZiB3YXN0ZWQgc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gIFJlbW92ZSBpdCBub3cuCi0gICAgICovCi0gICAgaWYgKGZ0cnVuY2F0ZShmaWxlbm8obVppcEZwKSwgZnRlbGwobVppcEZwKSkgIT0gMCkgewotICAgICAgICBBTE9HVygiZnRydW5jYXRlIGZhaWxlZCAlbGQ6ICVzXG4iLCBmdGVsbChtWmlwRnApLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAvLyBub3QgZmF0YWwKLSAgICB9Ci0KLSAgICAvKiBzaG91bGQgd2UgY2xlYXIgdGhlICJuZXdseSBhZGRlZCIgZmxhZyBpbiBhbGwgZW50cmllcyBub3c/ICovCi0KLSAgICBtTmVlZENEUmV3cml0ZSA9IGZhbHNlOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIENydW5jaCBkZWxldGVkIGZpbGVzIG91dCBvZiBhbiBhcmNoaXZlIGJ5IHNoaWZ0aW5nIHRoZSBsYXRlciBmaWxlcyBkb3duLgotICoKLSAqIEJlY2F1c2Ugd2UncmUgbm90IHVzaW5nIGEgdGVtcCBmaWxlLCB3ZSBkbyB0aGUgb3BlcmF0aW9uIGluc2lkZSB0aGUKLSAqIGN1cnJlbnQgZmlsZS4KLSAqLwotc3RhdHVzX3QgWmlwRmlsZTo6Y3J1bmNoQXJjaGl2ZSh2b2lkKQotewotICAgIHN0YXR1c190IHJlc3VsdCA9IE5PX0VSUk9SOwotICAgIGludCBpLCBjb3VudDsKLSAgICBsb25nIGRlbENvdW50LCBhZGp1c3Q7Ci0KLSNpZiAwCi0gICAgcHJpbnRmKCJDT05URU5UUzpcbiIpOwotICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBtRW50cmllcy5zaXplKCk7IGkrKykgewotICAgICAgICBwcmludGYoIiAlZDogbGZoT2ZmPSVsZCBkZWw9JWRcbiIsCi0gICAgICAgICAgICBpLCBtRW50cmllc1tpXS0+Z2V0TEZIT2Zmc2V0KCksIG1FbnRyaWVzW2ldLT5nZXREZWxldGVkKCkpOwotICAgIH0KLSAgICBwcmludGYoIiAgRU5EIGlzICVsZFxuIiwgKGxvbmcpIG1FT0NELm1DZW50cmFsRGlyT2Zmc2V0KTsKLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiBSb2xsIHRocm91Z2ggdGhlIHNldCBvZiBmaWxlcywgc2hpZnRpbmcgdGhlbSBhcyBhcHByb3ByaWF0ZS4gIFdlCi0gICAgICogY291bGQgcHJvYmFibHkgZ2V0IGEgc2xpZ2h0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGJ5IHNsaWRpbmcKLSAgICAgKiBtdWx0aXBsZSBmaWxlcyBkb3duIGF0IG9uY2UgKGJlY2F1c2Ugd2UgY291bGQgdXNlIGxhcmdlciByZWFkcwotICAgICAqIHdoZW4gb3BlcmF0aW5nIG9uIGJhdGNoZXMgb2Ygc21hbGwgZmlsZXMpLCBidXQgaXQncyBub3QgdGhhdCB1c2VmdWwuCi0gICAgICovCi0gICAgY291bnQgPSBtRW50cmllcy5zaXplKCk7Ci0gICAgZGVsQ291bnQgPSBhZGp1c3QgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIFppcEVudHJ5KiBwRW50cnkgPSBtRW50cmllc1tpXTsKLSAgICAgICAgbG9uZyBzcGFuOwotCi0gICAgICAgIGlmIChwRW50cnktPmdldExGSE9mZnNldCgpICE9IDApIHsKLSAgICAgICAgICAgIGxvbmcgbmV4dE9mZnNldDsKLQotICAgICAgICAgICAgLyogR2V0IHRoZSBsZW5ndGggb2YgdGhpcyBlbnRyeSBieSBmaW5kaW5nIHRoZSBvZmZzZXQKLSAgICAgICAgICAgICAqIG9mIHRoZSBuZXh0IGVudHJ5LiAgRGlyZWN0b3J5IGVudHJpZXMgZG9uJ3QgaGF2ZQotICAgICAgICAgICAgICogZmlsZSBvZmZzZXRzLCBzbyB3ZSBuZWVkIHRvIGZpbmQgdGhlIG5leHQgbm9uLWRpcmVjdG9yeQotICAgICAgICAgICAgICogZW50cnkuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG5leHRPZmZzZXQgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaWkgPSBpKzE7IG5leHRPZmZzZXQgPT0gMCAmJiBpaSA8IGNvdW50OyBpaSsrKQotICAgICAgICAgICAgICAgIG5leHRPZmZzZXQgPSBtRW50cmllc1tpaV0tPmdldExGSE9mZnNldCgpOwotICAgICAgICAgICAgaWYgKG5leHRPZmZzZXQgPT0gMCkKLSAgICAgICAgICAgICAgICBuZXh0T2Zmc2V0ID0gbUVPQ0QubUNlbnRyYWxEaXJPZmZzZXQ7Ci0gICAgICAgICAgICBzcGFuID0gbmV4dE9mZnNldCAtIHBFbnRyeS0+Z2V0TEZIT2Zmc2V0KCk7Ci0KLSAgICAgICAgICAgIGFzc2VydChzcGFuID49IFppcEVudHJ5OjpMb2NhbEZpbGVIZWFkZXI6OmtMRkhMZW4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogVGhpcyBpcyBhIGRpcmVjdG9yeSBlbnRyeS4gIEl0IGRvZXNuJ3QgaGF2ZQotICAgICAgICAgICAgICogYW55IGFjdHVhbCBmaWxlIGNvbnRlbnRzLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8KLSAgICAgICAgICAgICAqIG1vdmUgYW55dGhpbmcuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNwYW4gPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy9wcmludGYoIisrKyAlZDogb2ZmPSVsZCBzcGFuPSVsZCBkZWw9JWQgW2NvdW50PSVkXVxuIiwKLSAgICAgICAgLy8gICAgaSwgcEVudHJ5LT5nZXRMRkhPZmZzZXQoKSwgc3BhbiwgcEVudHJ5LT5nZXREZWxldGVkKCksIGNvdW50KTsKLQotICAgICAgICBpZiAocEVudHJ5LT5nZXREZWxldGVkKCkpIHsKLSAgICAgICAgICAgIGFkanVzdCArPSBzcGFuOwotICAgICAgICAgICAgZGVsQ291bnQrKzsKLQotICAgICAgICAgICAgZGVsZXRlIHBFbnRyeTsKLSAgICAgICAgICAgIG1FbnRyaWVzLnJlbW92ZUF0KGkpOwotCi0gICAgICAgICAgICAvKiBhZGp1c3QgbG9vcCBjb250cm9sICovCi0gICAgICAgICAgICBjb3VudC0tOwotICAgICAgICAgICAgaS0tOwotICAgICAgICB9IGVsc2UgaWYgKHNwYW4gIT0gMCAmJiBhZGp1c3QgPiAwKSB7Ci0gICAgICAgICAgICAvKiBzaHVmZmxlIHRoaXMgZW50cnkgYmFjayAqLwotICAgICAgICAgICAgLy9wcmludGYoIisrKyBTaHVmZmxpbmcgJyVzJyBiYWNrICVsZFxuIiwKLSAgICAgICAgICAgIC8vICAgIHBFbnRyeS0+Z2V0RmlsZU5hbWUoKSwgYWRqdXN0KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGZpbGVtb3ZlKG1aaXBGcCwgcEVudHJ5LT5nZXRMRkhPZmZzZXQoKSAtIGFkanVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBFbnRyeS0+Z2V0TEZIT2Zmc2V0KCksIHNwYW4pOwotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIC8qIHRoaXMgaXMgd2h5IHlvdSB1c2UgYSB0ZW1wIGZpbGUgKi8KLSAgICAgICAgICAgICAgICBBTE9HRSgiZXJyb3IgZHVyaW5nIGNydW5jaCAtIGFyY2hpdmUgaXMgdG9hc3RcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBFbnRyeS0+c2V0TEZIT2Zmc2V0KHBFbnRyeS0+Z2V0TEZIT2Zmc2V0KCkgLSBhZGp1c3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBGaXggRU9DRCBpbmZvLiAgV2UgaGF2ZSB0byB3YWl0IHVudGlsIHRoZSBlbmQgdG8gZG8gc29tZSBvZiB0aGlzCi0gICAgICogYmVjYXVzZSB3ZSB1c2UgbUNlbnRyYWxEaXJPZmZzZXQgdG8gZGV0ZXJtaW5lICJzcGFuIiBmb3IgdGhlCi0gICAgICogbGFzdCBlbnRyeS4KLSAgICAgKi8KLSAgICBtRU9DRC5tQ2VudHJhbERpck9mZnNldCAtPSBhZGp1c3Q7Ci0gICAgbUVPQ0QubU51bUVudHJpZXMgLT0gZGVsQ291bnQ7Ci0gICAgbUVPQ0QubVRvdGFsTnVtRW50cmllcyAtPSBkZWxDb3VudDsKLSAgICBtRU9DRC5tQ2VudHJhbERpclNpemUgPSAwOyAgLy8gbWFyayBpbnZhbGlkOyBzZXQgYnkgZmx1c2goKQotCi0gICAgYXNzZXJ0KG1FT0NELm1OdW1FbnRyaWVzID09IG1FT0NELm1Ub3RhbE51bUVudHJpZXMpOwotICAgIGFzc2VydChtRU9DRC5tTnVtRW50cmllcyA9PSBjb3VudCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogV29ya3MgbGlrZSBtZW1tb3ZlKCksIGJ1dCBvbiBwaWVjZXMgb2YgYSBmaWxlLgotICovCi1zdGF0dXNfdCBaaXBGaWxlOjpmaWxlbW92ZShGSUxFKiBmcCwgb2ZmX3QgZHN0LCBvZmZfdCBzcmMsIHNpemVfdCBuKQotewotICAgIGlmIChkc3QgPT0gc3JjIHx8IG4gPD0gMCkKLSAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotCi0gICAgdW5zaWduZWQgY2hhciByZWFkQnVmWzMyNzY4XTsKLQotICAgIGlmIChkc3QgPCBzcmMpIHsKLSAgICAgICAgLyogc2hpZnQgc3R1ZmYgdG93YXJkIHN0YXJ0IG9mIGZpbGU7IG11c3QgcmVhZCBmcm9tIHN0YXJ0ICovCi0gICAgICAgIHdoaWxlIChuICE9IDApIHsKLSAgICAgICAgICAgIHNpemVfdCBnZXRTaXplID0gc2l6ZW9mKHJlYWRCdWYpOwotICAgICAgICAgICAgaWYgKGdldFNpemUgPiBuKQotICAgICAgICAgICAgICAgIGdldFNpemUgPSBuOwotCi0gICAgICAgICAgICBpZiAoZnNlZWsoZnAsIChsb25nKSBzcmMsIFNFRUtfU0VUKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0QoImZpbGVtb3ZlIHNyYyBzZWVrICVsZCBmYWlsZWRcbiIsIChsb25nKSBzcmMpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZnJlYWQocmVhZEJ1ZiwgMSwgZ2V0U2l6ZSwgZnApICE9IGdldFNpemUpIHsKLSAgICAgICAgICAgICAgICBBTE9HRCgiZmlsZW1vdmUgcmVhZCAlbGQgb2ZmPSVsZCBmYWlsZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIChsb25nKSBnZXRTaXplLCAobG9uZykgc3JjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZzZWVrKGZwLCAobG9uZykgZHN0LCBTRUVLX1NFVCkgIT0gMCkgewotICAgICAgICAgICAgICAgIEFMT0dEKCJmaWxlbW92ZSBkc3Qgc2VlayAlbGQgZmFpbGVkXG4iLCAobG9uZykgZHN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZ3cml0ZShyZWFkQnVmLCAxLCBnZXRTaXplLCBmcCkgIT0gZ2V0U2l6ZSkgewotICAgICAgICAgICAgICAgIEFMT0dEKCJmaWxlbW92ZSB3cml0ZSAlbGQgb2ZmPSVsZCBmYWlsZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIChsb25nKSBnZXRTaXplLCAobG9uZykgZHN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3JjICs9IGdldFNpemU7Ci0gICAgICAgICAgICBkc3QgKz0gZ2V0U2l6ZTsKLSAgICAgICAgICAgIG4gLT0gZ2V0U2l6ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIHNoaWZ0IHN0dWZmIHRvd2FyZCBlbmQgb2YgZmlsZTsgbXVzdCByZWFkIGZyb20gZW5kICovCi0gICAgICAgIGFzc2VydChmYWxzZSk7ICAgICAgLy8gd3JpdGUgdGhpcyBzb21lZGF5LCBtYXliZQotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLQotLyoKLSAqIEdldCB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgZnJvbSBhIGZpbGUgZGVzY3JpcHRvci4KLSAqLwotdGltZV90IFppcEZpbGU6OmdldE1vZFRpbWUoaW50IGZkKQotewotICAgIHN0cnVjdCBzdGF0IHNiOwotCi0gICAgaWYgKGZzdGF0KGZkLCAmc2IpIDwgMCkgewotICAgICAgICBBTE9HRCgiSEVZOiBmc3RhdCBvbiBmZCAlZCBmYWlsZWRcbiIsIGZkKTsKLSAgICAgICAgcmV0dXJuICh0aW1lX3QpIC0xOwotICAgIH0KLQotICAgIHJldHVybiBzYi5zdF9tdGltZTsKLX0KLQotCi0jaWYgMCAgICAgICAvKiB0aGlzIGlzIGEgYmFkIGlkZWEgKi8KLS8qCi0gKiBHZXQgYSBjb3B5IG9mIHRoZSBaaXAgZmlsZSBkZXNjcmlwdG9yLgotICoKLSAqIFdlIGRvbid0IGFsbG93IHRoaXMgaWYgdGhlIGZpbGUgd2FzIG9wZW5lZCByZWFkLXdyaXRlIGJlY2F1c2Ugd2UgdGVuZAotICogdG8gbGVhdmUgdGhlIGZpbGUgY29udGVudHMgaW4gYW4gdW5jZXJ0YWluIHN0YXRlIGJldHdlZW4gY2FsbHMgdG8KLSAqIGZsdXNoKCkuICBUaGUgZHVwbGljYXRlZCBmaWxlIGRlc2NyaXB0b3Igc2hvdWxkIG9ubHkgYmUgdmFsaWQgZm9yIHJlYWRzLgotICovCi1pbnQgWmlwRmlsZTo6Z2V0WmlwRmQodm9pZCkgY29uc3QKLXsKLSAgICBpZiAoIW1SZWFkT25seSkKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIGFzc2VydChtWmlwRnAgIT0gTlVMTCk7Ci0KLSAgICBpbnQgZmQ7Ci0gICAgZmQgPSBkdXAoZmlsZW5vKG1aaXBGcCkpOwotICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgQUxPR0QoImRpZG4ndCB3b3JrLCBlcnJubz0lZFxuIiwgZXJybm8pOwotICAgIH0KLQotICAgIHJldHVybiBmZDsKLX0KLSNlbmRpZgotCi0KLSNpZiAwCi0vKgotICogRXhwYW5kIGRhdGEuCi0gKi8KLWJvb2wgWmlwRmlsZTo6dW5jb21wcmVzcyhjb25zdCBaaXBFbnRyeSogcEVudHJ5LCB2b2lkKiBidWYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLS8vIGZyZWUgdGhlIG1lbW9yeSB3aGVuIHlvdSdyZSBkb25lCi12b2lkKiBaaXBGaWxlOjp1bmNvbXByZXNzKGNvbnN0IFppcEVudHJ5KiBlbnRyeSkKLXsKLSAgICBzaXplX3QgdW5sZW4gPSBlbnRyeS0+Z2V0VW5jb21wcmVzc2VkTGVuKCk7Ci0gICAgc2l6ZV90IGNsZW4gPSBlbnRyeS0+Z2V0Q29tcHJlc3NlZExlbigpOwotCi0gICAgdm9pZCogYnVmID0gbWFsbG9jKHVubGVuKTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgZnNlZWsobVppcEZwLCAwLCBTRUVLX1NFVCk7Ci0KLSAgICBvZmZfdCBvZmZzZXQgPSBlbnRyeS0+Z2V0RmlsZU9mZnNldCgpOwotICAgIGlmIChmc2VlayhtWmlwRnAsIG9mZnNldCwgU0VFS19TRVQpICE9IDApIHsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIHN3aXRjaCAoZW50cnktPmdldENvbXByZXNzaW9uTWV0aG9kKCkpCi0gICAgewotICAgICAgICBjYXNlIFppcEVudHJ5OjprQ29tcHJlc3NTdG9yZWQ6IHsKLSAgICAgICAgICAgIHNzaXplX3QgYW10ID0gZnJlYWQoYnVmLCAxLCB1bmxlbiwgbVppcEZwKTsKLSAgICAgICAgICAgIGlmIChhbXQgIT0gKHNzaXplX3QpdW5sZW4pIHsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0jaWYgMAotICAgICAgICAgICAgcHJpbnRmKCJkYXRhLi4uXG4iKTsKLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHAgPSAodW5zaWduZWQgY2hhciopYnVmOwotICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZW5kID0gcCt1bmxlbjsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTwzMiAmJiBwIDwgZW5kOyBpKyspIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIjB4JTA4eCAiLCAoaW50KShvZmZzZXQrKGkqMHgxMCkpKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8MHgxMCAmJiBwIDwgZW5kOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJTAyeCIsICpwKTsKLSAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWmlwRW50cnk6OmtDb21wcmVzc0RlZmxhdGVkOiB7Ci0gICAgICAgICAgICBpZiAoIVppcFV0aWxzOjppbmZsYXRlVG9CdWZmZXIobVppcEZwLCBidWYsIHVubGVuLCBjbGVuKSkgewotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ290byBiYWlsOwotICAgIH0KLSAgICByZXR1cm4gYnVmOwotCi1iYWlsOgotICAgIGZyZWUoYnVmKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgICAgIFppcEZpbGU6OkVuZE9mQ2VudHJhbERpcgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyoKLSAqIFJlYWQgdGhlIGVuZC1vZi1jZW50cmFsLWRpciBmaWVsZHMuCi0gKgotICogImJ1ZiIgc2hvdWxkIGJlIHBvc2l0aW9uZWQgYXQgdGhlIEVPQ0Qgc2lnbmF0dXJlLCBhbmQgc2hvdWxkIGNvbnRhaW4KLSAqIHRoZSBlbnRpcmUgRU9DRCBhcmVhIGluY2x1ZGluZyB0aGUgY29tbWVudC4KLSAqLwotc3RhdHVzX3QgWmlwRmlsZTo6RW5kT2ZDZW50cmFsRGlyOjpyZWFkQnVmKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZiwgaW50IGxlbikKLXsKLSAgICAvKiBkb24ndCBhbGxvdyByZS11c2UgKi8KLSAgICBhc3NlcnQobUNvbW1lbnQgPT0gTlVMTCk7Ci0KLSAgICBpZiAobGVuIDwga0VPQ0RMZW4pIHsKLSAgICAgICAgLyogbG9va3MgbGlrZSBaSVAgZmlsZSBnb3QgdHJ1bmNhdGVkICovCi0gICAgICAgIEFMT0dEKCIgWmlwIEVPQ0Q6IGV4cGVjdGVkID49ICVkIGJ5dGVzLCBmb3VuZCAlZFxuIiwKLSAgICAgICAgICAgIGtFT0NETGVuLCBsZW4pOwotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgLyogdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgYW4gYXNzZXJ0KCkgKi8KLSAgICBpZiAoWmlwRW50cnk6OmdldExvbmdMRSgmYnVmWzB4MDBdKSAhPSBrU2lnbmF0dXJlKQotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLQotICAgIG1EaXNrTnVtYmVyID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDA0XSk7Ci0gICAgbURpc2tXaXRoQ2VudHJhbERpciA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgwNl0pOwotICAgIG1OdW1FbnRyaWVzID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDA4XSk7Ci0gICAgbVRvdGFsTnVtRW50cmllcyA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgwYV0pOwotICAgIG1DZW50cmFsRGlyU2l6ZSA9IFppcEVudHJ5OjpnZXRMb25nTEUoJmJ1ZlsweDBjXSk7Ci0gICAgbUNlbnRyYWxEaXJPZmZzZXQgPSBaaXBFbnRyeTo6Z2V0TG9uZ0xFKCZidWZbMHgxMF0pOwotICAgIG1Db21tZW50TGVuID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDE0XSk7Ci0KLSAgICAvLyBUT0RPOiB2YWxpZGF0ZSBtQ2VudHJhbERpck9mZnNldAotCi0gICAgaWYgKG1Db21tZW50TGVuID4gMCkgewotICAgICAgICBpZiAoa0VPQ0RMZW4gKyBtQ29tbWVudExlbiA+IGxlbikgewotICAgICAgICAgICAgQUxPR0QoIkVPQ0QoJWQpICsgY29tbWVudCglZCkgZXhjZWVkcyBsZW4gKCVkKVxuIiwKLSAgICAgICAgICAgICAgICBrRU9DRExlbiwgbUNvbW1lbnRMZW4sIGxlbik7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBtQ29tbWVudCA9IG5ldyB1bnNpZ25lZCBjaGFyW21Db21tZW50TGVuXTsKLSAgICAgICAgbWVtY3B5KG1Db21tZW50LCBidWYgKyBrRU9DRExlbiwgbUNvbW1lbnRMZW4pOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIFdyaXRlIGFuIGVuZC1vZi1jZW50cmFsLWRpcmVjdG9yeSBzZWN0aW9uLgotICovCi1zdGF0dXNfdCBaaXBGaWxlOjpFbmRPZkNlbnRyYWxEaXI6OndyaXRlKEZJTEUqIGZwKQotewotICAgIHVuc2lnbmVkIGNoYXIgYnVmW2tFT0NETGVuXTsKLQotICAgIFppcEVudHJ5OjpwdXRMb25nTEUoJmJ1ZlsweDAwXSwga1NpZ25hdHVyZSk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDA0XSwgbURpc2tOdW1iZXIpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwNl0sIG1EaXNrV2l0aENlbnRyYWxEaXIpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwOF0sIG1OdW1FbnRyaWVzKTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MGFdLCBtVG90YWxOdW1FbnRyaWVzKTsKLSAgICBaaXBFbnRyeTo6cHV0TG9uZ0xFKCZidWZbMHgwY10sIG1DZW50cmFsRGlyU2l6ZSk7Ci0gICAgWmlwRW50cnk6OnB1dExvbmdMRSgmYnVmWzB4MTBdLCBtQ2VudHJhbERpck9mZnNldCk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDE0XSwgbUNvbW1lbnRMZW4pOwotCi0gICAgaWYgKGZ3cml0ZShidWYsIDEsIGtFT0NETGVuLCBmcCkgIT0ga0VPQ0RMZW4pCi0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIGlmIChtQ29tbWVudExlbiA+IDApIHsKLSAgICAgICAgYXNzZXJ0KG1Db21tZW50ICE9IE5VTEwpOwotICAgICAgICBpZiAoZndyaXRlKG1Db21tZW50LCBtQ29tbWVudExlbiwgMSwgZnApICE9IG1Db21tZW50TGVuKQotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogRHVtcCB0aGUgY29udGVudHMgb2YgYW4gRW5kT2ZDZW50cmFsRGlyIG9iamVjdC4KLSAqLwotdm9pZCBaaXBGaWxlOjpFbmRPZkNlbnRyYWxEaXI6OmR1bXAodm9pZCkgY29uc3QKLXsKLSAgICBBTE9HRCgiIEVuZE9mQ2VudHJhbERpciBjb250ZW50czpcbiIpOwotICAgIEFMT0dEKCIgIGRpc2tOdW09JXUgZGlza1dDRD0ldSBudW1FbnQ9JXUgdG90YWxOdW1FbnQ9JXVcbiIsCi0gICAgICAgIG1EaXNrTnVtYmVyLCBtRGlza1dpdGhDZW50cmFsRGlyLCBtTnVtRW50cmllcywgbVRvdGFsTnVtRW50cmllcyk7Ci0gICAgQUxPR0QoIiAgY2VudERpclNpemU9JWx1IGNlbnREaXJPZmY9JWx1IGNvbW1lbnRMZW49JXVcbiIsCi0gICAgICAgIG1DZW50cmFsRGlyU2l6ZSwgbUNlbnRyYWxEaXJPZmZzZXQsIG1Db21tZW50TGVuKTsKLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9aaXBGaWxlLmggYi90b29scy9hYXB0L1ppcEZpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3NzU1MC4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1ppcEZpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8KLS8vIEdlbmVyYWwtcHVycG9zZSBaaXAgYXJjaGl2ZSBhY2Nlc3MuICBUaGlzIGNsYXNzIGFsbG93cyBib3RoIHJlYWRpbmcgYW5kCi0vLyB3cml0aW5nIHRvIFppcCBhcmNoaXZlcywgaW5jbHVkaW5nIGRlbGV0aW9uIG9mIGV4aXN0aW5nIGVudHJpZXMuCi0vLwotI2lmbmRlZiBfX0xJQlNfWklQRklMRV9ICi0jZGVmaW5lIF9fTElCU19aSVBGSUxFX0gKLQotI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJaaXBFbnRyeS5oIgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLS8qCi0gKiBNYW5pcHVsYXRlIGEgWmlwIGFyY2hpdmUuCi0gKgotICogU29tZSBjaGFuZ2VzIHdpbGwgbm90IGJlIHZpc2libGUgaW4gdGhlIHVudGlsIHVudGlsICJmbHVzaCIgaXMgY2FsbGVkLgotICoKLSAqIFRoZSBjb3JyZWN0IHdheSB0byB1cGRhdGUgYSBmaWxlIGFyY2hpdmUgaXMgdG8gbWFrZSBhbGwgY2hhbmdlcyB0byBhCi0gKiBjb3B5IG9mIHRoZSBhcmNoaXZlIGluIGEgdGVtcG9yYXJ5IGZpbGUsIGFuZCB0aGVuIHVubGluay9yZW5hbWUgb3ZlcgotICogdGhlIG9yaWdpbmFsIGFmdGVyIGV2ZXJ5dGhpbmcgY29tcGxldGVzLiAgQmVjYXVzZSB3ZSdyZSBvbmx5IGludGVyZXN0ZWQKLSAqIGluIHVzaW5nIHRoaXMgZm9yIHBhY2thZ2luZywgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgc3VjaCB0aGluZ3MuICBDcmFzaGluZwotICogYWZ0ZXIgbWFraW5nIGNoYW5nZXMgYW5kIGJlZm9yZSBmbHVzaCgpIGNvbXBsZXRlcyBjb3VsZCBsZWF2ZSB1cyB3aXRoCi0gKiBhbiB1bnVzYWJsZSBaaXAgYXJjaGl2ZS4KLSAqLwotY2xhc3MgWmlwRmlsZSB7Ci1wdWJsaWM6Ci0gICAgWmlwRmlsZSh2b2lkKQotICAgICAgOiBtWmlwRnAoTlVMTCksIG1SZWFkT25seShmYWxzZSksIG1OZWVkQ0RSZXdyaXRlKGZhbHNlKQotICAgICAge30KLSAgICB+WmlwRmlsZSh2b2lkKSB7Ci0gICAgICAgIGlmICghbVJlYWRPbmx5KQotICAgICAgICAgICAgZmx1c2goKTsKLSAgICAgICAgaWYgKG1aaXBGcCAhPSBOVUxMKQotICAgICAgICAgICAgZmNsb3NlKG1aaXBGcCk7Ci0gICAgICAgIGRpc2NhcmRFbnRyaWVzKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBPcGVuIGEgbmV3IG9yIGV4aXN0aW5nIGFyY2hpdmUuCi0gICAgICovCi0gICAgZW51bSB7Ci0gICAgICAgIGtPcGVuUmVhZE9ubHkgICA9IDB4MDEsCi0gICAgICAgIGtPcGVuUmVhZFdyaXRlICA9IDB4MDIsCi0gICAgICAgIGtPcGVuQ3JlYXRlICAgICA9IDB4MDQsICAgICAvLyBjcmVhdGUgaWYgaXQgZG9lc24ndCBleGlzdAotICAgICAgICBrT3BlblRydW5jYXRlICAgPSAweDA4LCAgICAgLy8gaWYgaXQgZXhpc3RzLCBlbXB0eSBpdAotICAgIH07Ci0gICAgc3RhdHVzX3Qgb3Blbihjb25zdCBjaGFyKiB6aXBGaWxlTmFtZSwgaW50IGZsYWdzKTsKLQotICAgIC8qCi0gICAgICogQWRkIGEgZmlsZSB0byB0aGUgZW5kIG9mIHRoZSBhcmNoaXZlLiAgU3BlY2lmeSB3aGV0aGVyIHlvdSB3YW50IHRoZQotICAgICAqIGxpYnJhcnkgdG8gdHJ5IHRvIHN0b3JlIGl0IGNvbXByZXNzZWQuCi0gICAgICoKLSAgICAgKiBJZiAic3RvcmFnZU5hbWUiIGlzIHNwZWNpZmllZCwgdGhlIGFyY2hpdmUgd2lsbCB1c2UgdGhhdCBpbnN0ZWFkCi0gICAgICogb2YgImZpbGVOYW1lIi4KLSAgICAgKgotICAgICAqIElmIHRoZXJlIGlzIGFscmVhZHkgYW4gZW50cnkgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGUgY2FsbCBmYWlscy4KLSAgICAgKiBFeGlzdGluZyBlbnRyaWVzIHdpdGggdGhlIHNhbWUgbmFtZSBtdXN0IGJlIHJlbW92ZWQgZmlyc3QuCi0gICAgICoKLSAgICAgKiBJZiAicHBFbnRyeSIgaXMgbm9uLU5VTEwsIGEgcG9pbnRlciB0byB0aGUgbmV3IGVudHJ5IHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICovCi0gICAgc3RhdHVzX3QgYWRkKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgY29tcHJlc3Npb25NZXRob2QsCi0gICAgICAgIFppcEVudHJ5KiogcHBFbnRyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZGQoZmlsZU5hbWUsIGZpbGVOYW1lLCBjb21wcmVzc2lvbk1ldGhvZCwgcHBFbnRyeSk7Ci0gICAgfQotICAgIHN0YXR1c190IGFkZChjb25zdCBjaGFyKiBmaWxlTmFtZSwgY29uc3QgY2hhciogc3RvcmFnZU5hbWUsCi0gICAgICAgIGludCBjb21wcmVzc2lvbk1ldGhvZCwgWmlwRW50cnkqKiBwcEVudHJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZENvbW1vbihmaWxlTmFtZSwgTlVMTCwgMCwgc3RvcmFnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgWmlwRW50cnk6OmtDb21wcmVzc1N0b3JlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbk1ldGhvZCwgcHBFbnRyeSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBBZGQgYSBmaWxlIHRoYXQgaXMgYWxyZWFkeSBjb21wcmVzc2VkIHdpdGggZ3ppcC4KLSAgICAgKgotICAgICAqIElmICJwcEVudHJ5IiBpcyBub24tTlVMTCwgYSBwb2ludGVyIHRvIHRoZSBuZXcgZW50cnkgd2lsbCBiZSByZXR1cm5lZC4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBhZGRHemlwKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBzdG9yYWdlTmFtZSwKLSAgICAgICAgWmlwRW50cnkqKiBwcEVudHJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZENvbW1vbihmaWxlTmFtZSwgTlVMTCwgMCwgc3RvcmFnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgWmlwRW50cnk6OmtDb21wcmVzc0RlZmxhdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgIFppcEVudHJ5OjprQ29tcHJlc3NEZWZsYXRlZCwgcHBFbnRyeSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBBZGQgYSBmaWxlIGZyb20gYW4gaW4tbWVtb3J5IGRhdGEgYnVmZmVyLgotICAgICAqCi0gICAgICogSWYgInBwRW50cnkiIGlzIG5vbi1OVUxMLCBhIHBvaW50ZXIgdG8gdGhlIG5ldyBlbnRyeSB3aWxsIGJlIHJldHVybmVkLgotICAgICAqLwotICAgIHN0YXR1c190IGFkZChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogc3RvcmFnZU5hbWUsCi0gICAgICAgIGludCBjb21wcmVzc2lvbk1ldGhvZCwgWmlwRW50cnkqKiBwcEVudHJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZENvbW1vbihOVUxMLCBkYXRhLCBzaXplLCBzdG9yYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBaaXBFbnRyeTo6a0NvbXByZXNzU3RvcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uTWV0aG9kLCBwcEVudHJ5KTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEFkZCBhbiBlbnRyeSBieSBjb3B5aW5nIGl0IGZyb20gYW5vdGhlciB6aXAgZmlsZS4gIElmICJwYWRkaW5nIiBpcwotICAgICAqIG5vbnplcm8sIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlICJleHRyYSIKLSAgICAgKiBmaWVsZCBpbiB0aGUgaGVhZGVyLgotICAgICAqCi0gICAgICogSWYgInBwRW50cnkiIGlzIG5vbi1OVUxMLCBhIHBvaW50ZXIgdG8gdGhlIG5ldyBlbnRyeSB3aWxsIGJlIHJldHVybmVkLgotICAgICAqLwotICAgIHN0YXR1c190IGFkZChjb25zdCBaaXBGaWxlKiBwU291cmNlWmlwLCBjb25zdCBaaXBFbnRyeSogcFNvdXJjZUVudHJ5LAotICAgICAgICBpbnQgcGFkZGluZywgWmlwRW50cnkqKiBwcEVudHJ5KTsKLQotICAgIC8qCi0gICAgICogTWFyayBhbiBlbnRyeSBhcyBoYXZpbmcgYmVlbiByZW1vdmVkLiAgSXQgaXMgbm90IGFjdHVhbGx5IGRlbGV0ZWQKLSAgICAgKiBmcm9tIHRoZSBhcmNoaXZlIG9yIG91ciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdW50aWwgZmx1c2goKSBpcwotICAgICAqIGNhbGxlZC4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCByZW1vdmUoWmlwRW50cnkqIHBFbnRyeSk7Ci0KLSAgICAvKgotICAgICAqIEZsdXNoIGNoYW5nZXMuICBJZiBtTmVlZENEUmV3cml0ZSBpcyBzZXQsIHRoaXMgd3JpdGVzIHRoZSBjZW50cmFsIGRpci4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBmbHVzaCh2b2lkKTsKLQotICAgIC8qCi0gICAgICogRXhwYW5kIHRoZSBkYXRhIGludG8gdGhlIGJ1ZmZlciBwcm92aWRlZC4gIFRoZSBidWZmZXIgbXVzdCBob2xkCi0gICAgICogYXQgbGVhc3QgPHVuY29tcHJlc3NlZCBsZW4+IGJ5dGVzLiAgVmFyaWF0aW9uIGV4cGFuZHMgZGlyZWN0bHkKLSAgICAgKiB0byBhIGZpbGUuCi0gICAgICoKLSAgICAgKiBSZXR1cm5zICJmYWxzZSIgaWYgYW4gZXJyb3Igd2FzIGVuY291bnRlcmVkIGluIHRoZSBjb21wcmVzc2VkIGRhdGEuCi0gICAgICovCi0gICAgLy9ib29sIHVuY29tcHJlc3MoY29uc3QgWmlwRW50cnkqIHBFbnRyeSwgdm9pZCogYnVmKSBjb25zdDsKLSAgICAvL2Jvb2wgdW5jb21wcmVzcyhjb25zdCBaaXBFbnRyeSogcEVudHJ5LCBGSUxFKiBmcCkgY29uc3Q7Ci0gICAgdm9pZCogdW5jb21wcmVzcyhjb25zdCBaaXBFbnRyeSogcEVudHJ5KTsKLQotICAgIC8qCi0gICAgICogR2V0IGFuIGVudHJ5LCBieSBuYW1lLiAgUmV0dXJucyBOVUxMIGlmIG5vdCBmb3VuZC4KLSAgICAgKgotICAgICAqIERvZXMgbm90IHJldHVybiBlbnRyaWVzIHBlbmRpbmcgZGVsZXRpb24uCi0gICAgICovCi0gICAgWmlwRW50cnkqIGdldEVudHJ5QnlOYW1lKGNvbnN0IGNoYXIqIGZpbGVOYW1lKSBjb25zdDsKLQotICAgIC8qCi0gICAgICogR2V0IHRoZSBOdGggZW50cnkgaW4gdGhlIGFyY2hpdmUuCi0gICAgICoKLSAgICAgKiBUaGlzIHdpbGwgcmV0dXJuIGFuIGVudHJ5IHRoYXQgaXMgcGVuZGluZyBkZWxldGlvbi4KLSAgICAgKi8KLSAgICBpbnQgZ2V0TnVtRW50cmllcyh2b2lkKSBjb25zdCB7IHJldHVybiBtRW50cmllcy5zaXplKCk7IH0KLSAgICBaaXBFbnRyeSogZ2V0RW50cnlCeUluZGV4KGludCBpZHgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIC8qIHRoZXNlIGFyZSBwcml2YXRlIGFuZCBub3QgZGVmaW5lZCAqLwotICAgIFppcEZpbGUoY29uc3QgWmlwRmlsZSYgc3JjKTsKLSAgICBaaXBGaWxlJiBvcGVyYXRvcj0oY29uc3QgWmlwRmlsZSYgc3JjKTsKLQotICAgIGNsYXNzIEVuZE9mQ2VudHJhbERpciB7Ci0gICAgcHVibGljOgotICAgICAgICBFbmRPZkNlbnRyYWxEaXIodm9pZCkgOgotICAgICAgICAgICAgbURpc2tOdW1iZXIoMCksCi0gICAgICAgICAgICBtRGlza1dpdGhDZW50cmFsRGlyKDApLAotICAgICAgICAgICAgbU51bUVudHJpZXMoMCksCi0gICAgICAgICAgICBtVG90YWxOdW1FbnRyaWVzKDApLAotICAgICAgICAgICAgbUNlbnRyYWxEaXJTaXplKDApLAotICAgICAgICAgICAgbUNlbnRyYWxEaXJPZmZzZXQoMCksCi0gICAgICAgICAgICBtQ29tbWVudExlbigwKSwKLSAgICAgICAgICAgIG1Db21tZW50KE5VTEwpCi0gICAgICAgICAgICB7fQotICAgICAgICB2aXJ0dWFsIH5FbmRPZkNlbnRyYWxEaXIodm9pZCkgewotICAgICAgICAgICAgZGVsZXRlW10gbUNvbW1lbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0dXNfdCByZWFkQnVmKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZiwgaW50IGxlbik7Ci0gICAgICAgIHN0YXR1c190IHdyaXRlKEZJTEUqIGZwKTsKLQotICAgICAgICAvL3Vuc2lnbmVkIGxvbmcgICBtU2lnbmF0dXJlOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbURpc2tOdW1iZXI7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtRGlza1dpdGhDZW50cmFsRGlyOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbU51bUVudHJpZXM7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtVG90YWxOdW1FbnRyaWVzOwotICAgICAgICB1bnNpZ25lZCBsb25nICAgbUNlbnRyYWxEaXJTaXplOwotICAgICAgICB1bnNpZ25lZCBsb25nICAgbUNlbnRyYWxEaXJPZmZzZXQ7ICAgICAgLy8gb2Zmc2V0IGZyb20gZmlyc3QgZGlzawotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbUNvbW1lbnRMZW47Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqICBtQ29tbWVudDsKLQotICAgICAgICBlbnVtIHsKLSAgICAgICAgICAgIGtTaWduYXR1cmUgICAgICA9IDB4MDYwNTRiNTAsCi0gICAgICAgICAgICBrRU9DRExlbiAgICAgICAgPSAyMiwgICAgICAgLy8gRW5kT2ZDZW50cmFsRGlyIGxlbiwgZXhjbC4gY29tbWVudAotCi0gICAgICAgICAgICBrTWF4Q29tbWVudExlbiAgPSA2NTUzNSwgICAgLy8gbG9uZ2VzdCBwb3NzaWJsZSBpbiB1c2hvcnQKLSAgICAgICAgICAgIGtNYXhFT0NEU2VhcmNoICA9IGtNYXhDb21tZW50TGVuICsgRW5kT2ZDZW50cmFsRGlyOjprRU9DRExlbiwKLQotICAgICAgICB9OwotCi0gICAgICAgIHZvaWQgZHVtcCh2b2lkKSBjb25zdDsKLSAgICB9OwotCi0KLSAgICAvKiByZWFkIGFsbCBlbnRyaWVzIGluIHRoZSBjZW50cmFsIGRpciAqLwotICAgIHN0YXR1c190IHJlYWRDZW50cmFsRGlyKHZvaWQpOwotCi0gICAgLyogY3J1bmNoIGRlbGV0ZWQgZW50cmllcyBvdXQgKi8KLSAgICBzdGF0dXNfdCBjcnVuY2hBcmNoaXZlKHZvaWQpOwotCi0gICAgLyogY2xlYW4gdXAgbUVudHJpZXMgKi8KLSAgICB2b2lkIGRpc2NhcmRFbnRyaWVzKHZvaWQpOwotCi0gICAgLyogY29tbW9uIGhhbmRsZXIgZm9yIGFsbCAiYWRkIiBmdW5jdGlvbnMgKi8KLSAgICBzdGF0dXNfdCBhZGRDb21tb24oY29uc3QgY2hhciogZmlsZU5hbWUsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLAotICAgICAgICBjb25zdCBjaGFyKiBzdG9yYWdlTmFtZSwgaW50IHNvdXJjZVR5cGUsIGludCBjb21wcmVzc2lvbk1ldGhvZCwKLSAgICAgICAgWmlwRW50cnkqKiBwcEVudHJ5KTsKLQotICAgIC8qIGNvcHkgYWxsIG9mICJzcmNGcCIgaW50byAiZHN0RnAiICovCi0gICAgc3RhdHVzX3QgY29weUZwVG9GcChGSUxFKiBkc3RGcCwgRklMRSogc3JjRnAsIHVuc2lnbmVkIGxvbmcqIHBDUkMzMik7Ci0gICAgLyogY29weSBhbGwgb2YgImRhdGEiIGludG8gImRzdEZwIiAqLwotICAgIHN0YXR1c190IGNvcHlEYXRhVG9GcChGSUxFKiBkc3RGcCwKLSAgICAgICAgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcqIHBDUkMzMik7Ci0gICAgLyogY29weSBzb21lIG9mICJzcmNGcCIgaW50byAiZHN0RnAiICovCi0gICAgc3RhdHVzX3QgY29weVBhcnRpYWxGcFRvRnAoRklMRSogZHN0RnAsIEZJTEUqIHNyY0ZwLCBsb25nIGxlbmd0aCwKLSAgICAgICAgdW5zaWduZWQgbG9uZyogcENSQzMyKTsKLSAgICAvKiBsaWtlIG1lbW1vdmUoKSwgYnV0IG9uIHBhcnRzIG9mIGEgc2luZ2xlIGZpbGUgKi8KLSAgICBzdGF0dXNfdCBmaWxlbW92ZShGSUxFKiBmcCwgb2ZmX3QgZGVzdCwgb2ZmX3Qgc3JjLCBzaXplX3Qgbik7Ci0gICAgLyogY29tcHJlc3MgYWxsIG9mICJzcmNGcCIgaW50byAiZHN0RnAiLCB1c2luZyBEZWZsYXRlICovCi0gICAgc3RhdHVzX3QgY29tcHJlc3NGcFRvRnAoRklMRSogZHN0RnAsIEZJTEUqIHNyY0ZwLAotICAgICAgICBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyogcENSQzMyKTsKLQotICAgIC8qIGdldCBtb2RpZmljYXRpb24gZGF0ZSBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yICovCi0gICAgdGltZV90IGdldE1vZFRpbWUoaW50IGZkKTsKLQotICAgIC8qCi0gICAgICogV2UgdXNlIHN0ZGlvIEZJTEUqLCB3aGljaCBnaXZlcyB1cyBidWZmZXJpbmcgYnV0IG1ha2VzIGRlYWxpbmcKLSAgICAgKiB3aXRoIGZpbGVzID4yR0IgYXdrd2FyZC4gIFVudGlsIHdlIHN1cHBvcnQgWmlwNjQsIHdlJ3JlIGZpbmUuCi0gICAgICovCi0gICAgRklMRSogICAgICAgICAgIG1aaXBGcDsgICAgICAgICAgICAgLy8gWmlwIGZpbGUgcG9pbnRlcgotCi0gICAgLyogb25lIG9mIHRoZXNlIHBlciBmaWxlICovCi0gICAgRW5kT2ZDZW50cmFsRGlyIG1FT0NEOwotCi0gICAgLyogZGlkIHdlIG9wZW4gdGhpcyByZWFkLW9ubHk/ICovCi0gICAgYm9vbCAgICAgICAgICAgIG1SZWFkT25seTsKLQotICAgIC8qIHNldCB0aGlzIHdoZW4gd2UgdHJhc2ggdGhlIGNlbnRyYWwgZGlyICovCi0gICAgYm9vbCAgICAgICAgICAgIG1OZWVkQ0RSZXdyaXRlOwotCi0gICAgLyoKLSAgICAgKiBPbmUgWmlwRW50cnkgcGVyIGVudHJ5IGluIHRoZSB6aXAgZmlsZS4gIEknbSB1c2luZyBwb2ludGVycyBpbnN0ZWFkCi0gICAgICogb2Ygb2JqZWN0cyBiZWNhdXNlIGl0J3MgZWFzaWVyIHRoYW4gbWFraW5nIG9wZXJhdG9yPSB3b3JrIGZvciB0aGUKLSAgICAgKiBjbGFzc2VzIGFuZCBzdWItY2xhc3Nlcy4KLSAgICAgKi8KLSAgICBWZWN0b3I8WmlwRW50cnkqPiAgIG1FbnRyaWVzOwotfTsKLQotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIF9fTElCU19aSVBGSUxFX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvcHJpbnRhcGsuY3BwIGIvdG9vbHMvYWFwdC9wcmludGFway5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZjczZDguLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9wcmludGFway5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotI2luY2x1ZGUgPHV0aWxzL1Jlc291cmNlVHlwZXMuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nMTYuaD4KLSNpbmNsdWRlIDx6aXBmaWxlL3ppcGZpbGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi1zdGF0aWMgaW50Ci11c2FnZSgpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAidXNhZ2U6IGFwayBBUEtGSUxFXG4iCi0gICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAiQVBLRklMRSAgIGFuIGFuZHJvaWQgcGFja2dlIGZpbGUgcHJvZHVjZWQgYnkgYWFwdC5cbiIKLSAgICAgICAgICAgICk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBjb25zdCBjaGFyKiBmaWxlbmFtZTsKLSAgICBpbnQgZmQ7Ci0gICAgc3NpemVfdCBhbXQ7Ci0gICAgb2ZmX3Qgc2l6ZTsKLSAgICB2b2lkKiBidWY7Ci0gICAgemlwZmlsZV90IHppcDsKLSAgICB6aXBlbnRyeV90IGVudHJ5OwotICAgIHZvaWQqIGNvb2tpZTsKLSAgICB2b2lkKiByZXNmaWxlOwotICAgIGludCBidWZzaXplOwotICAgIGludCBlcnI7Ci0KLSAgICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgICAgIHJldHVybiB1c2FnZSgpOwotICAgIH0KLQotICAgIGZpbGVuYW1lID0gYXJndlsxXTsKLSAgICBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJhcGs6IGNvdWxkbid0IG9wZW4gZmlsZSBmb3IgcmVhZDogJXNcbiIsIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgc2l6ZSA9IGxzZWVrKGZkLCAwLCBTRUVLX0VORCk7Ci0gICAgYW10ID0gbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKLQotICAgIGlmIChzaXplIDwgMCB8fCBhbXQgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYXBrOiBlcnJvciBkZXRlcm1pbmluZyBmaWxlIHNpemU6ICVzXG4iLCBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGJ1ZiA9IG1hbGxvYyhzaXplKTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJhcGs6IGZpbGUgdG9vIGJpZzogJXNcbiIsIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgYW10ID0gcmVhZChmZCwgYnVmLCBzaXplKTsKLSAgICBpZiAoYW10ICE9IHNpemUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJhcGs6IGVycm9yIHJlYWRpbmcgZmlsZTogJXNcbiIsIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgY2xvc2UoZmQpOwotCi0gICAgemlwID0gaW5pdF96aXBmaWxlKGJ1Ziwgc2l6ZSk7Ci0gICAgaWYgKHppcCA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYXBrOiBmaWxlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHppcCBmaWxlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHByaW50ZigiZmlsZXM6XG4iKTsKLSAgICBjb29raWUgPSBOVUxMOwotICAgIHdoaWxlICgoZW50cnkgPSBpdGVyYXRlX3ppcGZpbGUoemlwLCAmY29va2llKSkpIHsKLSAgICAgICAgY2hhciogbmFtZSA9IGdldF96aXBlbnRyeV9uYW1lKGVudHJ5KTsKLSAgICAgICAgcHJpbnRmKCIgICVzXG4iLCBuYW1lKTsKLSAgICAgICAgZnJlZShuYW1lKTsKLSAgICB9Ci0KLSAgICBlbnRyeSA9IGxvb2t1cF96aXBlbnRyeSh6aXAsICJyZXNvdXJjZXMuYXJzYyIpOwotICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7Ci0gICAgICAgIHNpemUgPSBnZXRfemlwZW50cnlfc2l6ZShlbnRyeSk7Ci0gICAgICAgIGJ1ZnNpemUgPSBzaXplICsgKHNpemUgLyAxMDAwKSArIDE7Ci0gICAgICAgIHJlc2ZpbGUgPSBtYWxsb2MoYnVmc2l6ZSk7Ci0KLSAgICAgICAgZXJyID0gZGVjb21wcmVzc196aXBlbnRyeShlbnRyeSwgcmVzZmlsZSwgYnVmc2l6ZSk7Ci0gICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJhcGs6IGVycm9yIGRlY29tcHJlc3NpbmcgcmVzb3VyY2VzLmFyc2MiKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVzVGFibGUgcmVzKHJlc2ZpbGUsIHNpemUsIHJlc2ZpbGUpOwotICAgICAgICByZXMucHJpbnQoKTsKLSNpZiAwCi0gICAgICAgIHNpemVfdCB0YWJsZUNvdW50ID0gcmVzLmdldFRhYmxlQ291bnQoKTsKLSAgICAgICAgcHJpbnRmKCJUYWJsZXM6ICVkXG4iLCAoaW50KXRhYmxlQ291bnQpOwotICAgICAgICBmb3IgKHNpemVfdCB0YWJsZUluZGV4PTA7IHRhYmxlSW5kZXg8dGFibGVDb3VudDsgdGFibGVJbmRleCsrKSB7Ci0gICAgICAgICAgICBjb25zdCBSZXNTdHJpbmdQb29sKiBzdHJpbmdzID0gcmVzLmdldFRhYmxlU3RyaW5nQmxvY2sodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBzaXplX3Qgc3RyaW5nQ291bnQgPSBzdHJpbmdzLT5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBzdHJpbmdJbmRleD0wOyBzdHJpbmdJbmRleDxzdHJpbmdDb3VudDsgc3RyaW5nSW5kZXgrKykgewotICAgICAgICAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIGNoID0gc3RyaW5ncy0+c3RyaW5nQXQoc3RyaW5nSW5kZXgsICZsZW4pOwotICAgICAgICAgICAgICAgIFN0cmluZzggcyhTdHJpbmcxNihjaCwgbGVuKSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIFslM2RdICVzXG4iLCAoaW50KXN0cmluZ0luZGV4LCBzLnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHNpemVfdCBiYXNlUGFja2FnZUNvdW50ID0gcmVzLmdldEJhc2VQYWNrYWdlQ291bnQoKTsKLSAgICAgICAgcHJpbnRmKCJCYXNlIFBhY2thZ2VzOiAlZFxuIiwgKGludCliYXNlUGFja2FnZUNvdW50KTsKLSAgICAgICAgZm9yIChzaXplX3QgYnBJbmRleD0wOyBicEluZGV4PGJhc2VQYWNrYWdlQ291bnQ7IGJwSW5kZXgrKykgewotICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIGNoID0gcmVzLmdldEJhc2VQYWNrYWdlTmFtZShicEluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZzggcyA9IFN0cmluZzgoU3RyaW5nMTYoY2gpKTsKLSAgICAgICAgICAgIHByaW50ZigiICBbJTNkXSAlc1xuIiwgKGludClicEluZGV4LCBzLnN0cmluZygpKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0KLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvcHNldWRvbG9jYWxpemUuY3BwIGIvdG9vbHMvYWFwdC9wc2V1ZG9sb2NhbGl6ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNTBjNWEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9wc2V1ZG9sb2NhbGl6ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotI2luY2x1ZGUgInBzZXVkb2xvY2FsaXplLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKgotcHNldWRvbG9jYWxpemVfY2hhcihjaGFyIGMpCi17Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICAgIGNhc2UgJ2EnOiAgIHJldHVybiAiXHhjNFx4ODMiOwotICAgICAgICBjYXNlICdiJzogICByZXR1cm4gIlx4Y2ZceDg0IjsKLSAgICAgICAgY2FzZSAnYyc6ICAgcmV0dXJuICJceGM0XHg4YiI7Ci0gICAgICAgIGNhc2UgJ2QnOiAgIHJldHVybiAiXHhjNFx4OGYiOwotICAgICAgICBjYXNlICdlJzogICByZXR1cm4gIlx4YzRceDk5IjsKLSAgICAgICAgY2FzZSAnZic6ICAgcmV0dXJuICJceGM2XHg5MiI7Ci0gICAgICAgIGNhc2UgJ2cnOiAgIHJldHVybiAiXHhjNFx4OWQiOwotICAgICAgICBjYXNlICdoJzogICByZXR1cm4gIlx4ZDFceDliIjsKLSAgICAgICAgY2FzZSAnaSc6ICAgcmV0dXJuICJceGNmXHg4YSI7Ci0gICAgICAgIGNhc2UgJ2onOiAgIHJldHVybiAiXHhjNFx4YjUiOwotICAgICAgICBjYXNlICdrJzogICByZXR1cm4gIlx4YzRceGI4IjsKLSAgICAgICAgY2FzZSAnbCc6ICAgcmV0dXJuICJceGM0XHhiYSI7Ci0gICAgICAgIGNhc2UgJ20nOiAgIHJldHVybiAiXHhlMVx4YjhceGJmIjsKLSAgICAgICAgY2FzZSAnbic6ICAgcmV0dXJuICJceGQwXHhiOCI7Ci0gICAgICAgIGNhc2UgJ28nOiAgIHJldHVybiAiXHhjZlx4OGMiOwotICAgICAgICBjYXNlICdwJzogICByZXR1cm4gIlx4Y2ZceDgxIjsKLSAgICAgICAgY2FzZSAncSc6ICAgcmV0dXJuICJceDUxIjsKLSAgICAgICAgY2FzZSAncic6ICAgcmV0dXJuICJceGQyXHg5MSI7Ci0gICAgICAgIGNhc2UgJ3MnOiAgIHJldHVybiAiXHhjNVx4YTEiOwotICAgICAgICBjYXNlICd0JzogICByZXR1cm4gIlx4ZDFceDgyIjsKLSAgICAgICAgY2FzZSAndSc6ICAgcmV0dXJuICJceGNlXHhiMCI7Ci0gICAgICAgIGNhc2UgJ3YnOiAgIHJldHVybiAiXHg1NiI7Ci0gICAgICAgIGNhc2UgJ3cnOiAgIHJldHVybiAiXHhlMVx4YmFceDg1IjsKLSAgICAgICAgY2FzZSAneCc6ICAgcmV0dXJuICJceGQxXHg4NSI7Ci0gICAgICAgIGNhc2UgJ3knOiAgIHJldHVybiAiXHhlMVx4YmJceGIzIjsKLSAgICAgICAgY2FzZSAneic6ICAgcmV0dXJuICJceGM1XHhiYSI7Ci0gICAgICAgIGNhc2UgJ0EnOiAgIHJldHVybiAiXHhjM1x4ODUiOwotICAgICAgICBjYXNlICdCJzogICByZXR1cm4gIlx4Y2VceGIyIjsKLSAgICAgICAgY2FzZSAnQyc6ICAgcmV0dXJuICJceGM0XHg4OCI7Ci0gICAgICAgIGNhc2UgJ0QnOiAgIHJldHVybiAiXHhjNFx4OTAiOwotICAgICAgICBjYXNlICdFJzogICByZXR1cm4gIlx4ZDBceDg0IjsKLSAgICAgICAgY2FzZSAnRic6ICAgcmV0dXJuICJceGNlXHg5MyI7Ci0gICAgICAgIGNhc2UgJ0cnOiAgIHJldHVybiAiXHhjNFx4OWUiOwotICAgICAgICBjYXNlICdIJzogICByZXR1cm4gIlx4YzRceGE2IjsKLSAgICAgICAgY2FzZSAnSSc6ICAgcmV0dXJuICJceGQwXHg4NyI7Ci0gICAgICAgIGNhc2UgJ0onOiAgIHJldHVybiAiXHhjNFx4YjUiOwotICAgICAgICBjYXNlICdLJzogICByZXR1cm4gIlx4YzRceGI2IjsKLSAgICAgICAgY2FzZSAnTCc6ICAgcmV0dXJuICJceGM1XHg4MSI7Ci0gICAgICAgIGNhc2UgJ00nOiAgIHJldHVybiAiXHhlMVx4YjhceGJlIjsKLSAgICAgICAgY2FzZSAnTic6ICAgcmV0dXJuICJceGM1XHg4MyI7Ci0gICAgICAgIGNhc2UgJ08nOiAgIHJldHVybiAiXHhjZVx4OTgiOwotICAgICAgICBjYXNlICdQJzogICByZXR1cm4gIlx4Y2ZceDgxIjsKLSAgICAgICAgY2FzZSAnUSc6ICAgcmV0dXJuICJceDcxIjsKLSAgICAgICAgY2FzZSAnUic6ICAgcmV0dXJuICJceGQwXHhhZiI7Ci0gICAgICAgIGNhc2UgJ1MnOiAgIHJldHVybiAiXHhjOFx4OTgiOwotICAgICAgICBjYXNlICdUJzogICByZXR1cm4gIlx4YzVceGE2IjsKLSAgICAgICAgY2FzZSAnVSc6ICAgcmV0dXJuICJceGM1XHhhOCI7Ci0gICAgICAgIGNhc2UgJ1YnOiAgIHJldHVybiAiXHhjZVx4YmQiOwotICAgICAgICBjYXNlICdXJzogICByZXR1cm4gIlx4ZTFceGJhXHg4NCI7Ci0gICAgICAgIGNhc2UgJ1gnOiAgIHJldHVybiAiXHhjM1x4OTciOwotICAgICAgICBjYXNlICdZJzogICByZXR1cm4gIlx4YzJceGE1IjsKLSAgICAgICAgY2FzZSAnWic6ICAgcmV0dXJuICJceGM1XHhiZCI7Ci0gICAgICAgIGRlZmF1bHQ6ICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotLyoqCi0gKiBDb252ZXJ0cyBjaGFyYWN0ZXJzIHNvIHRoZXkgbG9vayBsaWtlIHRoZXkndmUgYmVlbiBsb2NhbGl6ZWQuCi0gKgotICogTm90ZTogVGhpcyBsZWF2ZXMgZXNjYXBlIHNlcXVlbmNlcyB1bnRvdWNoZWQgc28gdGhleSBjYW4gbGF0ZXIgYmUKLSAqIHByb2Nlc3NlZCBieSBSZXNUYWJsZTo6Y29sbGVjdFN0cmluZyBpbiB0aGUgbm9ybWFsIHdheS4KLSAqLwotc3RyaW5nCi1wc2V1ZG9sb2NhbGl6ZV9zdHJpbmcoY29uc3Qgc3RyaW5nJiBzb3VyY2UpCi17Ci0gICAgY29uc3QgY2hhciogcyA9IHNvdXJjZS5jX3N0cigpOwotICAgIHN0cmluZyByZXN1bHQ7Ci0gICAgY29uc3Qgc2l6ZV90IEkgPSBzb3VyY2UubGVuZ3RoKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPEk7IGkrKykgewotICAgICAgICBjaGFyIGMgPSBzW2ldOwotICAgICAgICBpZiAoYyA9PSAnXFwnKSB7Ci0gICAgICAgICAgICBpZiAoaTxJLTEpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcJzsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgYyA9IHNbaV07Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBvbmUgdGFrZXMgdXAgNSBjaGFycwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZyhzK2ksIDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgotICAgICAgICAgICAgICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnIyc6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0AnOgotICAgICAgICAgICAgICAgICAgICBjYXNlICc/JzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1wnJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgY2hhciogcCA9IHBzZXVkb2xvY2FsaXplX2NoYXIoYyk7Ci0gICAgICAgICAgICBpZiAocCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy9wcmludGYoInJlc3VsdD1cJyVzXCdcbiIsIHJlc3VsdC5jX3N0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvcHNldWRvbG9jYWxpemUuaCBiL3Rvb2xzL2FhcHQvcHNldWRvbG9jYWxpemUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRjYjAzNC4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L3BzZXVkb2xvY2FsaXplLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgSE9TVF9QU0VVRE9MT0NBTElaRV9ICi0jZGVmaW5lIEhPU1RfUFNFVURPTE9DQUxJWkVfSAotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi1zdGQ6OnN0cmluZyBwc2V1ZG9sb2NhbGl6ZV9zdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZSk7Ci0KLSNlbmRpZiAvLyBIT1NUX1BTRVVET0xPQ0FMSVpFX0gKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9xc29ydF9yX2NvbXBhdC5jIGIvdG9vbHMvYWFwdC9xc29ydF9yX2NvbXBhdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYThkYmU4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvcXNvcnRfcl9jb21wYXQuYworKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAicXNvcnRfcl9jb21wYXQuaCIKLQotLyoKLSAqIE5vdGU6IFRoaXMgY29kZSBpcyBvbmx5IHVzZWQgb24gdGhlIGhvc3QsIGFuZCBpcyBwcmltYXJpbHkgaGVyZSBmb3IKLSAqIE1hYyBPUyBjb21wYXRpYmlsaXR5LiBBcHBhcmVudGx5LCBnbGliYyBhbmQgQXBwbGUncyBsaWJjIGRpc2FncmVlIG9uCi0gKiB0aGUgcGFyYW1ldGVyIG9yZGVyIGZvciBxc29ydF9yLgotICovCi0KLSNpZiBIQVZFX0JTRF9RU09SVF9SCi0KLS8qCi0gKiBCU0QgcXNvcnRfciBwYXJhbWV0ZXIgb3JkZXIgaXMgYXMgd2UgaGF2ZSBkZWZpbmVkIGhlcmUuCi0gKi8KLQotdm9pZCBxc29ydF9yX2NvbXBhdCh2b2lkKiBiYXNlLCBzaXplX3QgbmVsLCBzaXplX3Qgd2lkdGgsIHZvaWQqIHRodW5rLAotICAgICAgICBpbnQgKCpjb21wYXIpKHZvaWQqLCBjb25zdCB2b2lkKiAsIGNvbnN0IHZvaWQqKSkgewotICAgIHFzb3J0X3IoYmFzZSwgbmVsLCB3aWR0aCwgdGh1bmssIGNvbXBhcik7Ci19Ci0KLSNlbGlmIEhBVkVfR05VX1FTT1JUX1IKLQotLyoKLSAqIEdOVSBxc29ydF9yIHBhcmFtZXRlciBvcmRlciBwbGFjZXMgdGhlIHRodW5rIHBhcmFtZXRlciBsYXN0LgotICovCi0KLXN0cnVjdCBjb21wYXJfZGF0YSB7Ci0gICAgdm9pZCogdGh1bms7Ci0gICAgaW50ICgqY29tcGFyKSh2b2lkKiwgY29uc3Qgdm9pZCogLCBjb25zdCB2b2lkKik7Ci19OwotCi1zdGF0aWMgaW50IGNvbXBhcl93cmFwcGVyKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIsIHZvaWQqIGRhdGEpIHsKLSAgICBzdHJ1Y3QgY29tcGFyX2RhdGEqIGNvbXBhcl9kYXRhID0gKHN0cnVjdCBjb21wYXJfZGF0YSopZGF0YTsKLSAgICByZXR1cm4gY29tcGFyX2RhdGEtPmNvbXBhcihjb21wYXJfZGF0YS0+dGh1bmssIGEsIGIpOwotfQotCi12b2lkIHFzb3J0X3JfY29tcGF0KHZvaWQqIGJhc2UsIHNpemVfdCBuZWwsIHNpemVfdCB3aWR0aCwgdm9pZCogdGh1bmssCi0gICAgICAgIGludCAoKmNvbXBhcikodm9pZCosIGNvbnN0IHZvaWQqICwgY29uc3Qgdm9pZCopKSB7Ci0gICAgc3RydWN0IGNvbXBhcl9kYXRhIGNvbXBhcl9kYXRhOwotICAgIGNvbXBhcl9kYXRhLnRodW5rID0gdGh1bms7Ci0gICAgY29tcGFyX2RhdGEuY29tcGFyID0gY29tcGFyOwotICAgIHFzb3J0X3IoYmFzZSwgbmVsLCB3aWR0aCwgY29tcGFyX3dyYXBwZXIsICZjb21wYXJfZGF0YSk7Ci19Ci0KLSNlbHNlCi0KLS8qCi0gKiBFbXVsYXRlIHFzb3J0X3IgdXNpbmcgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgdG8gYWNjZXNzIHRoZSB0aHVuayBkYXRhLgotICovCi0KLSNpbmNsdWRlIDxjdXRpbHMvdGhyZWFkcy5oPgotCi1zdGF0aWMgdGhyZWFkX3N0b3JlX3QgY29tcGFyX2RhdGFfa2V5ID0gVEhSRUFEX1NUT1JFX0lOSVRJQUxJWkVSOwotCi1zdHJ1Y3QgY29tcGFyX2RhdGEgewotICAgIHZvaWQqIHRodW5rOwotICAgIGludCAoKmNvbXBhcikodm9pZCosIGNvbnN0IHZvaWQqICwgY29uc3Qgdm9pZCopOwotfTsKLQotc3RhdGljIGludCBjb21wYXJfd3JhcHBlcihjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKSB7Ci0gICAgc3RydWN0IGNvbXBhcl9kYXRhKiBjb21wYXJfZGF0YSA9IChzdHJ1Y3QgY29tcGFyX2RhdGEqKXRocmVhZF9zdG9yZV9nZXQoJmNvbXBhcl9kYXRhX2tleSk7Ci0gICAgcmV0dXJuIGNvbXBhcl9kYXRhLT5jb21wYXIoY29tcGFyX2RhdGEtPnRodW5rLCBhLCBiKTsKLX0KLQotdm9pZCBxc29ydF9yX2NvbXBhdCh2b2lkKiBiYXNlLCBzaXplX3QgbmVsLCBzaXplX3Qgd2lkdGgsIHZvaWQqIHRodW5rLAotICAgICAgICBpbnQgKCpjb21wYXIpKHZvaWQqLCBjb25zdCB2b2lkKiAsIGNvbnN0IHZvaWQqKSkgewotICAgIHN0cnVjdCBjb21wYXJfZGF0YSBjb21wYXJfZGF0YTsKLSAgICBjb21wYXJfZGF0YS50aHVuayA9IHRodW5rOwotICAgIGNvbXBhcl9kYXRhLmNvbXBhciA9IGNvbXBhcjsKLSAgICB0aHJlYWRfc3RvcmVfc2V0KCZjb21wYXJfZGF0YV9rZXksICZjb21wYXJfZGF0YSwgTlVMTCk7Ci0gICAgcXNvcnQoYmFzZSwgbmVsLCB3aWR0aCwgY29tcGFyX3dyYXBwZXIpOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvcXNvcnRfcl9jb21wYXQuaCBiL3Rvb2xzL2FhcHQvcXNvcnRfcl9jb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE0Zjk5OS4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L3Fzb3J0X3JfY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoKLSAqIFByb3ZpZGVzIGEgcG9ydGFibGUgdmVyc2lvbiBvZiBxc29ydF9yLCBjYWxsZWQgcXNvcnRfcl9jb21wYXQsIHdoaWNoIGlzIGEKLSAqIHJlZW50cmFudCB2YXJpYW50IG9mIHFzb3J0IHRoYXQgcGFzc2VzIGEgdXNlciBkYXRhIHBvaW50ZXIgdG8gaXRzIGNvbXBhcmF0b3IuCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIGZvbGxvd3MgdGhlIEJTRCBwYXJhbWV0ZXIgY29udmVudGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fX1FTT1JUX1JfQ09NUEFUX0gKLSNkZWZpbmUgX19fUVNPUlRfUl9DT01QQVRfSAotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotdm9pZCBxc29ydF9yX2NvbXBhdCh2b2lkKiBiYXNlLCBzaXplX3QgbmVsLCBzaXplX3Qgd2lkdGgsIHZvaWQqIHRodW5rLAotICAgICAgICBpbnQgKCpjb21wYXIpKHZvaWQqLCBjb25zdCB2b2lkKiAsIGNvbnN0IHZvaWQqICkpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYgLy8gX19fUVNPUlRfUl9DT01QQVRfSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC90ZXN0cy9DcnVuY2hDYWNoZV90ZXN0LmNwcCBiL3Rvb2xzL2FhcHQvdGVzdHMvQ3J1bmNoQ2FjaGVfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYjUwMjIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC90ZXN0cy9DcnVuY2hDYWNoZV90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaW5jbHVkZSAiQ3J1bmNoQ2FjaGUuaCIKLSNpbmNsdWRlICJGaWxlRmluZGVyLmgiCi0jaW5jbHVkZSAiTW9ja0ZpbGVGaW5kZXIuaCIKLSNpbmNsdWRlICJDYWNoZVVwZGF0ZXIuaCIKLSNpbmNsdWRlICJNb2NrQ2FjaGVVcGRhdGVyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotdXNpbmcgc3RkOjpjb3V0OwotdXNpbmcgc3RkOjplbmRsOwotCi12b2lkIGV4cGVjdEVxdWFsKGludCBnb3QsIGludCBleHBlY3RlZCwgY29uc3QgY2hhciogZGVzYykgewotICAgIGNvdXQgPDwgIkNoZWNraW5nICIgPDwgZGVzYyA8PCAiOiAiOwotICAgIGNvdXQgPDwgIkdvdCAiIDw8IGdvdCA8PCAiLCBleHBlY3RlZCAiIDw8IGV4cGVjdGVkIDw8ICIuLi4iOwotICAgIGNvdXQgPDwgKCAoZ290ID09IGV4cGVjdGVkKSA/ICJQQVNTRUQiIDogIkZBSUxFRCIpIDw8IGVuZGw7Ci0gICAgZXJybm8gKz0gKChnb3QgPT0gZXhwZWN0ZWQpID8gMCA6IDEpOwotfQotCi1pbnQgbWFpbigpIHsKLQotICAgIGVycm5vID0gMDsKLQotICAgIFN0cmluZzggc291cmNlKCJyZXMiKTsKLSAgICBTdHJpbmc4IGRlc3QoInJlczIiKTsKLQotICAgIC8vIENyZWF0ZSBkYXRhIGZvciBNb2NrRmlsZUZpbmRlciB0byBmZWVkIHRvIHRoZSBjYWNoZQotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIHRpbWVfdD4gc291cmNlRGF0YTsKLSAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSB1cGRhdGVkCi0gICAgc291cmNlRGF0YS5hZGQoU3RyaW5nOCgicmVzL2RyYXdhYmxlL2hlbGxvLnBuZyIpLDMpOwotICAgIC8vIFRoaXMgc2hvdWxkIGJlIHVwZGF0ZWQKLSAgICBzb3VyY2VEYXRhLmFkZChTdHJpbmc4KCJyZXMvZHJhd2FibGUvd29ybGQucG5nIiksNSk7Ci0gICAgLy8gVGhpcyBzaG91bGQgY2F1c2UgbWFrZSBkaXJlY3RvcnkgdG8gYmUgY2FsbGVkCi0gICAgc291cmNlRGF0YS5hZGQoU3RyaW5nOCgicmVzL2RyYXdhYmxlLWNvb2wvaGVsbG8ucG5nIiksMyk7Ci0KLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCB0aW1lX3Q+IGRlc3REYXRhOwotICAgIGRlc3REYXRhLmFkZChTdHJpbmc4KCJyZXMyL2RyYXdhYmxlL2hlbGxvLnBuZyIpLDMpOwotICAgIGRlc3REYXRhLmFkZChTdHJpbmc4KCJyZXMyL2RyYXdhYmxlL3dvcmxkLnBuZyIpLDMpOwotICAgIC8vIHRoaXMgc2hvdWxkIGNhbGwgZGVsZXRlCi0gICAgZGVzdERhdGEuYWRkKFN0cmluZzgoInJlczIvZHJhd2FibGUvZGVhZC5wbmciKSwzKTsKLQotICAgIC8vIFBhY2thZ2UgdXAgZGF0YSBhbmQgY3JlYXRlIG1vY2sgZmlsZSBmaW5kZXIKLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4gPiBkYXRhOwotICAgIGRhdGEuYWRkKHNvdXJjZSxzb3VyY2VEYXRhKTsKLSAgICBkYXRhLmFkZChkZXN0LGRlc3REYXRhKTsKLSAgICBGaWxlRmluZGVyKiBmZiA9IG5ldyBNb2NrRmlsZUZpbmRlcihkYXRhKTsKLSAgICBDcnVuY2hDYWNoZSBjYyhzb3VyY2UsZGVzdCxmZik7Ci0KLSAgICBNb2NrQ2FjaGVVcGRhdGVyKiBtY3UgPSBuZXcgTW9ja0NhY2hlVXBkYXRlcigpOwotICAgIENhY2hlVXBkYXRlciogY3UobWN1KTsKLQotICAgIGNvdXQgPDwgIlJ1bm5pbmcgQ3J1bmNoLi4uIjsKLSAgICBpbnQgcmVzdWx0ID0gY2MuY3J1bmNoKGN1KTsKLSAgICBjb3V0IDw8ICgocmVzdWx0ID4gMCkgPyAiUEFTU0VEIiA6ICJGQUlMRUQiKSA8PCBlbmRsOwotICAgIGVycm5vICs9ICgocmVzdWx0ID4gMCkgPyAwIDogMSk7Ci0KLSAgICBjb25zdCBpbnQgRVhQRUNURURfUkVTVUxUID0gMjsKLSAgICBleHBlY3RFcXVhbChyZXN1bHQsIEVYUEVDVEVEX1JFU1VMVCwgIm51bWJlciBvZiBmaWxlcyB0b3VjaGVkIik7Ci0KLSAgICBjb3V0IDw8ICJDaGVja2luZyBjYWxscyB0byBkZWxldGVGaWxlIGFuZCBwcm9jZXNzSW1hZ2U6IiA8PCBlbmRsOwotICAgIGNvbnN0IGludCBFWFBFQ1RFRF9ERUxFVEVTID0gMTsKLSAgICBjb25zdCBpbnQgRVhQRUNURURfUFJPQ0VTU0VEID0gMjsKLSAgICAvLyBEZWxldGVzCi0gICAgZXhwZWN0RXF1YWwobWN1LT5kZWxldGVDb3VudCwgRVhQRUNURURfREVMRVRFUywgImRlbGV0ZUZpbGUiKTsKLSAgICAvLyBwcm9jZXNzSW1hZ2UKLSAgICBleHBlY3RFcXVhbChtY3UtPnByb2Nlc3NDb3VudCwgRVhQRUNURURfUFJPQ0VTU0VELCAicHJvY2Vzc0ltYWdlIik7Ci0KLSAgICBjb25zdCBpbnQgRVhQRUNURURfT1ZFUldSSVRFUyA9IDM7Ci0gICAgcmVzdWx0ID0gY2MuY3J1bmNoKGN1LCB0cnVlKTsKLSAgICBleHBlY3RFcXVhbChyZXN1bHQsIEVYUEVDVEVEX09WRVJXUklURVMsICJudW1iZXIgb2YgZmlsZXMgdG91Y2hlZCB3aXRoIG92ZXJ3cml0ZSIpOwotICAgIFwKLQotICAgIGlmIChlcnJubyA9PSAwKQotICAgICAgICBjb3V0IDw8ICJBTEwgVEVTVFMgUEFTU0VEISIgPDwgZW5kbDsKLSAgICBlbHNlCi0gICAgICAgIGNvdXQgPDwgZXJybm8gPDwgIiBURVNUUyBGQUlMRUQiIDw8IGVuZGw7Ci0KLSAgICBkZWxldGUgZmY7Ci0gICAgZGVsZXRlIGN1OwotCi0gICAgLy8gVEVTVFMgQkVMT1cgV0lMTCBHTyBBV0FZIFNPT04KLQotICAgIFN0cmluZzggc291cmNlMigiQXBpRGVtb3MvcmVzIik7Ci0gICAgU3RyaW5nOCBkZXN0MigiQXBpRGVtb3MvcmVzMiIpOwotCi0gICAgRmlsZUZpbmRlciogc2ZmID0gbmV3IFN5c3RlbUZpbGVGaW5kZXIoKTsKLSAgICBDYWNoZVVwZGF0ZXIqIHNjdSA9IG5ldyBTeXN0ZW1DYWNoZVVwZGF0ZXIoKTsKLQotICAgIENydW5jaENhY2hlIHNjYyhzb3VyY2UyLGRlc3QyLHNmZik7Ci0KLSAgICBzY2MuY3J1bmNoKHNjdSk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC90ZXN0cy9GaWxlRmluZGVyX3Rlc3QuY3BwIGIvdG9vbHMvYWFwdC90ZXN0cy9GaWxlRmluZGVyX3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2JkNjY1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvdGVzdHMvRmlsZUZpbmRlcl90ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLSNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9LZXllZFZlY3Rvci5oPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJEaXJlY3RvcnlXYWxrZXIuaCIKLSNpbmNsdWRlICJNb2NrRGlyZWN0b3J5V2Fsa2VyLmgiCi0jaW5jbHVkZSAiRmlsZUZpbmRlci5oIgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotdXNpbmcgc3RkOjpwYWlyOwotdXNpbmcgc3RkOjpjb3V0OwotdXNpbmcgc3RkOjplbmRsOwotCi0KLQotaW50IG1haW4oKQotewotCi0gICAgY291dCA8PCAiXG5cbiBTVEFSVElORyBGSUxFIEZJTkRFUiBURVNUUyIgPDwgZW5kbDsKLSAgICBTdHJpbmc4IHBhdGgoIkFwaURlbW9zIik7Ci0KLSAgICAvLyBTdG9yYWdlIHRvIHBhc3MgdG8gZmluZEZpbGVzKCkKLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4gdGVzdFN0b3JhZ2U7Ci0KLSAgICAvLyBNb2NrIERpcmVjdG9yeSBXYWxrZXIgaW5pdGlhbGl6YXRpb24uIEZpcnN0IGRhdGEsIHRoZW4gc2R3Ci0gICAgVmVjdG9yPCBwYWlyPFN0cmluZzgsdGltZV90PiA+IGRhdGE7Ci0gICAgZGF0YS5wdXNoKCBwYWlyPFN0cmluZzgsdGltZV90PihTdHJpbmc4KCJoZWxsby5wbmciKSwzKSApOwotICAgIGRhdGEucHVzaCggcGFpcjxTdHJpbmc4LHRpbWVfdD4oU3RyaW5nOCgid29ybGQuUE5HIiksMykgKTsKLSAgICBkYXRhLnB1c2goIHBhaXI8U3RyaW5nOCx0aW1lX3Q+KFN0cmluZzgoImZvby5wTmciKSwzKSApOwotICAgIC8vIE5laXRoZXIgb2YgdGhlc2Ugc2hvdWxkIGJlIGZvdW5kCi0gICAgZGF0YS5wdXNoKCBwYWlyPFN0cmluZzgsdGltZV90PihTdHJpbmc4KCJoZWxsby5qcGciKSwzKSApOwotICAgIGRhdGEucHVzaCggcGFpcjxTdHJpbmc4LHRpbWVfdD4oU3RyaW5nOCgiLmhpZGRlbi5wbmciKSwzKSk7Ci0KLSAgICBEaXJlY3RvcnlXYWxrZXIqIHNkdyA9IG5ldyBTdHJpbmdEaXJlY3RvcnlXYWxrZXIocGF0aCxkYXRhKTsKLQotICAgIC8vIEV4dGVuc2lvbnMgdG8gbG9vayBmb3IKLSAgICBWZWN0b3I8U3RyaW5nOD4gZXh0czsKLSAgICBleHRzLnB1c2goU3RyaW5nOCgiLnBuZyIpKTsKLQotICAgIGVycm5vID0gMDsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBnZXQgYSB2YWxpZCBtb2NrIGRpcmVjdG9yeSB3YWxrZXIKLSAgICAvLyBNYWtlIHN1cmUgd2UgZmluaXNoIHdpdGhvdXQgZXJyb3JzCi0gICAgY291dCA8PCAiQ2hlY2tpbmcgRGlyZWN0b3J5V2Fsa2VyLi4uIjsKLSAgICBhc3NlcnQoc2R3ICE9IE5VTEwpOwotICAgIGNvdXQgPDwgIlBBU1NFRCIgPDwgZW5kbDsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBmaW5pc2ggd2l0aG91dCBlcnJvcnMKLSAgICBjb3V0IDw8ICJSdW5uaW5nIGZpbmRGaWxlcygpLi4uIjsKLSAgICBib29sIGZpbmRTdGF0dXMgPSBGaWxlRmluZGVyOjpmaW5kRmlsZXMocGF0aCxleHRzLCB0ZXN0U3RvcmFnZSwgc2R3KTsKLSAgICBhc3NlcnQoZmluZFN0YXR1cyk7Ci0gICAgY291dCA8PCAiUEFTU0VEIiA8PCBlbmRsOwotCi0gICAgY29uc3Qgc2l6ZV90IFNJWkVfRVhQRUNURUQgPSAzOwotICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgdGhpbmdzIGluIG91ciBzdG9yYWdlCi0gICAgY291dCA8PCAiUnVubmluZyBzaXplIGNvbXBhcmlzb246IFNpemUgaXMgIiA8PCB0ZXN0U3RvcmFnZS5zaXplKCkgPDwgIiwgIjsKLSAgICBjb3V0IDw8ICJFeHBlY3RlZCAiIDw8IFNJWkVfRVhQRUNURUQgPDwgIi4uLiI7Ci0gICAgaWYodGVzdFN0b3JhZ2Uuc2l6ZSgpID09IFNJWkVfRVhQRUNURUQpCi0gICAgICAgIGNvdXQgPDwgIlBBU1NFRCIgPDwgZW5kbDsKLSAgICBlbHNlIHsKLSAgICAgICAgY291dCA8PCAiRkFJTEVEIiA8PCBlbmRsOwotICAgICAgICBlcnJubysrOwotICAgIH0KLQotICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IGVhY2ggb2Ygb3VyIGZvdW5kIGl0ZW1zIGhhcyB0aGUgcmlnaHQgZXh0ZW5zaW9uCi0gICAgY291dCA8PCAiQ2hlY2tpbmcgUmV0dXJuZWQgRXh0ZW5zaW9ucy4uLiI7Ci0gICAgYm9vbCBleHRzT2theSA9IHRydWU7Ci0gICAgU3RyaW5nOCB3cm9uZ0V4dHM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBTSVpFX0VYUEVDVEVEOyArK2kpIHsKLSAgICAgICAgU3RyaW5nOCB0ZXN0RXh0KHRlc3RTdG9yYWdlLmtleUF0KGkpLmdldFBhdGhFeHRlbnNpb24oKSk7Ci0gICAgICAgIHRlc3RFeHQudG9Mb3dlcigpOwotICAgICAgICBpZiAodGVzdEV4dCAhPSAiLnBuZyIpIHsKLSAgICAgICAgICAgIHdyb25nRXh0cyArPSB0ZXN0U3RvcmFnZS5rZXlBdChpKTsKLSAgICAgICAgICAgIHdyb25nRXh0cyArPSAiXG4iOwotICAgICAgICAgICAgZXh0c09rYXkgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZXh0c09rYXkpCi0gICAgICAgIGNvdXQgPDwgIlBBU1NFRCIgPDwgZW5kbDsKLSAgICBlbHNlIHsKLSAgICAgICAgY291dCA8PCAiRkFJTEVEIiA8PCBlbmRsOwotICAgICAgICBjb3V0IDw8ICJUaGUgZm9sbG93aW5nIGV4dGVuc2lvbnMgZGlkbid0IGNoZWNrIG91dCIgPDwgZW5kbCA8PCB3cm9uZ0V4dHM7Ci0gICAgfQotCi0gICAgLy8gQ2xlYW4gdXAKLSAgICBkZWxldGUgc2R3OwotCi0gICAgaWYoZXJybm8gPT0gMCkgewotICAgICAgICBjb3V0IDw8ICJBTEwgVEVTVFMgUEFTU0VEIiA8PCBlbmRsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvdXQgPDwgZXJybm8gPDwgIiBURVNUUyBGQUlMRUQiIDw8IGVuZGw7Ci0gICAgfQotICAgIHJldHVybiBlcnJubzsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9hYXB0L3Rlc3RzL01vY2tDYWNoZVVwZGF0ZXIuaCBiL3Rvb2xzL2FhcHQvdGVzdHMvTW9ja0NhY2hlVXBkYXRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2Y0YmQ3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvdGVzdHMvTW9ja0NhY2hlVXBkYXRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0jaWZuZGVmIE1PQ0tDQUNIRVVQREFURVJfSAotI2RlZmluZSBNT0NLQ0FDSEVVUERBVEVSX0gKLQotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlICJDYWNoZVVwZGF0ZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLWNsYXNzIE1vY2tDYWNoZVVwZGF0ZXIgOiBwdWJsaWMgQ2FjaGVVcGRhdGVyIHsKLXB1YmxpYzoKLQotICAgIE1vY2tDYWNoZVVwZGF0ZXIoKQotICAgICAgICA6IGRlbGV0ZUNvdW50KDApLCBwcm9jZXNzQ291bnQoMCkgeyB9OwotCi0gICAgLy8gTWFrZSBzdXJlIGFsbCB0aGUgZGlyZWN0b3JpZXMgYWxvbmcgdGhpcyBwYXRoIGV4aXN0Ci0gICAgdmlydHVhbCB2b2lkIGVuc3VyZURpcmVjdG9yaWVzRXhpc3QoU3RyaW5nOCBwYXRoKQotICAgIHsKLSAgICAgICAgLy8gTm90aGluZyB0byBkbwotICAgIH07Ci0KLSAgICAvLyBEZWxldGUgYSBmaWxlCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZpbGUoU3RyaW5nOCBwYXRoKSB7Ci0gICAgICAgIGRlbGV0ZUNvdW50Kys7Ci0gICAgfTsKLQotICAgIC8vIFByb2Nlc3MgYW4gaW1hZ2UgZnJvbSBzb3VyY2Ugb3V0IHRvIGRlc3QKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0ltYWdlKFN0cmluZzggc291cmNlLCBTdHJpbmc4IGRlc3QpIHsKLSAgICAgICAgcHJvY2Vzc0NvdW50Kys7Ci0gICAgfTsKLQotICAgIC8vIERBVEEgTUVNQkVSUwotICAgIGludCBkZWxldGVDb3VudDsKLSAgICBpbnQgcHJvY2Vzc0NvdW50OwotcHJpdmF0ZToKLX07Ci0KLSNlbmRpZiAvLyBNT0NLQ0FDSEVVUERBVEVSX0gKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9hYXB0L3Rlc3RzL01vY2tEaXJlY3RvcnlXYWxrZXIuaCBiL3Rvb2xzL2FhcHQvdGVzdHMvTW9ja0RpcmVjdG9yeVdhbGtlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTAwY2YzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvdGVzdHMvTW9ja0RpcmVjdG9yeVdhbGtlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0jaWZuZGVmIE1PQ0tESVJFQ1RPUllXQUxLRVJfSAotI2RlZmluZSBNT0NLRElSRUNUT1JZV0FMS0VSX0gKLQotI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgIkRpcmVjdG9yeVdhbGtlci5oIgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLXVzaW5nIHN0ZDo6cGFpcjsKLQotLy8gU3RyaW5nOCBEaXJlY3RvcnkgV2Fsa2VyCi0vLyBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEaXJlY3RvcnkgV2Fsa2VyIGFic3RyYWN0aW9uIHRoYXQgaXMgYnVpbHQKLS8vIGZvciB0ZXN0aW5nLgotLy8gSW5zdGVhZCBvZiBzeXN0ZW0gY2FsbHMgaXQgcXVlcmllcyBhIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBkaXJlY3RvcnkKLS8vIGVudHJpZXMuIEl0IHRha2VzIGEgcGF0aCBhbmQgYSBtYXAgb2YgZmlsZW5hbWVzIGFuZCB0aGVpciBtb2RpZmljYXRpb24gdGltZXMuCi0vLyBmdW5jdGlvbnMgYXJlIGlubGluZWQgc2luY2UgdGhleSBhcmUgc2hvcnQgYW5kIHNpbXBsZQotCi1jbGFzcyBTdHJpbmdEaXJlY3RvcnlXYWxrZXIgOiBwdWJsaWMgRGlyZWN0b3J5V2Fsa2VyIHsKLXB1YmxpYzoKLSAgICBTdHJpbmdEaXJlY3RvcnlXYWxrZXIoU3RyaW5nOCYgcGF0aCwgVmVjdG9yPCBwYWlyPFN0cmluZzgsdGltZV90PiA+JiBkYXRhKQotICAgICAgICA6ICBtUG9zKDApLCBtQmFzZVBhdGgocGF0aCksIG1EYXRhKGRhdGEpIHsKLSAgICAgICAgLy9mcHJpbnRmKHN0ZG91dCwiU3RyaW5nRFcgYnVpbHQgdG8gbWltaWMgJXMgd2l0aCAlZCBmaWxlc1xuIiwKLSAgICAgICAgLy8gICAgICAgbUJhc2VQYXRoLnN0cmluZygpKTsKLSAgICB9OwotICAgIC8vIERlZmF1bHQgY29weSBjb25zdHJ1Y3RvciwgYW5kIGRlc3RydWN0b3IgYXJlIGZpbmUKLQotICAgIHZpcnR1YWwgYm9vbCBvcGVuRGlyKFN0cmluZzggcGF0aCkgewotICAgICAgICAvLyBJZiB0aGUgdXNlciBpcyB0cnlpbmcgdG8gcXVlcnkgdGhlICJkaXJlY3RvcnkiIHRoYXQgdGhpcwotICAgICAgICAvLyB3YWxrZXIgd2FzIGluaXRpYWxpemVkIHdpdGgsIHRoZW4gcmV0dXJuIHN1Y2Nlc3MuIEVsc2UgZmFpbC4KLSAgICAgICAgcmV0dXJuIHBhdGggPT0gbUJhc2VQYXRoOwotICAgIH07Ci0gICAgdmlydHVhbCBib29sIG9wZW5EaXIoY29uc3QgY2hhciogcGF0aCkgewotICAgICAgICBTdHJpbmc4IHAocGF0aCk7Ci0gICAgICAgIG9wZW5EaXIocCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH07Ci0gICAgLy8gQWR2YW5jZSB0byBuZXh0IGVudHJ5IGluIHRoZSBWZWN0b3IKLSAgICB2aXJ0dWFsIHN0cnVjdCBkaXJlbnQqIG5leHRFbnRyeSgpIHsKLSAgICAgICAgLy8gQWR2YW5jZSBwb3NpdGlvbiBhbmQgY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIGRvbmUKLSAgICAgICAgaWYgKG1Qb3MgPj0gbURhdGEuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAgICAgLy8gUGxhY2UgZGF0YSBpbiB0aGUgZW50cnkgZGVzY3JpcHRvci4gVGhpcyBjbGFzcyBvbmx5IHJldHVybnMgZmlsZXMuCi0gICAgICAgIG1FbnRyeS5kX3R5cGUgPSBEVF9SRUc7Ci0gICAgICAgIG1FbnRyeS5kX2lubyA9IG1Qb3M7Ci0gICAgICAgIC8vIENvcHkgY2hhcnMgZnJvbSB0aGUgc3RyaW5nIG5hbWUgdG8gdGhlIGVudHJ5IG5hbWUKLSAgICAgICAgc2l6ZV90IGkgPSAwOwotICAgICAgICBmb3IgKGk7IGkgPCBtRGF0YVttUG9zXS5maXJzdC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1FbnRyeS5kX25hbWVbaV0gPSBtRGF0YVttUG9zXS5maXJzdFtpXTsKLSAgICAgICAgbUVudHJ5LmRfbmFtZVtpXSA9ICdcMCc7Ci0KLSAgICAgICAgLy8gUGxhY2UgZGF0YSBpbiBzdGF0cwotICAgICAgICBtU3RhdHMuc3RfaW5vID0gbVBvczsKLSAgICAgICAgbVN0YXRzLnN0X210aW1lID0gbURhdGFbbVBvc10uc2Vjb25kOwotCi0gICAgICAgIC8vIEdldCByZWFkeSB0byBtb3ZlIHRvIHRoZSBuZXh0IGVudHJ5Ci0gICAgICAgIG1Qb3MrKzsKLQotICAgICAgICByZXR1cm4gJm1FbnRyeTsKLSAgICB9OwotICAgIC8vIEdldCB0aGUgc3RhdHMgZm9yIHRoZSBjdXJyZW50IGVudHJ5Ci0gICAgdmlydHVhbCBzdHJ1Y3Qgc3RhdCogICBlbnRyeVN0YXRzKCkgewotICAgICAgICByZXR1cm4gJm1TdGF0czsKLSAgICB9OwotICAgIC8vIE5vdGhpbmcgdG8gZG8gaW4gY2xlYW4gdXAKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VEaXIoKSB7Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8KLSAgICB9OwotICAgIHZpcnR1YWwgRGlyZWN0b3J5V2Fsa2VyKiBjbG9uZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdEaXJlY3RvcnlXYWxrZXIoKnRoaXMpOwotICAgIH07Ci1wcml2YXRlOgotICAgIC8vIEN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIFZlY3RvcgotICAgIHNpemVfdCBtUG9zOwotICAgIC8vIEJhc2UgcGF0aAotICAgIFN0cmluZzggbUJhc2VQYXRoOwotICAgIC8vIERhdGEgdG8gc2ltdWxhdGUgYSBkaXJlY3RvcnkgZnVsbCBvZiBmaWxlcy4KLSAgICBWZWN0b3I8IHBhaXI8U3RyaW5nOCx0aW1lX3Q+ID4gbURhdGE7Ci19OwotCi0jZW5kaWYgLy8gTU9DS0RJUkVDVE9SWVdBTEtFUl9IClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC90ZXN0cy9Nb2NrRmlsZUZpbmRlci5oIGIvdG9vbHMvYWFwdC90ZXN0cy9Nb2NrRmlsZUZpbmRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTVlYTRmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvdGVzdHMvTW9ja0ZpbGVGaW5kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotCi0jaWZuZGVmIE1PQ0tGSUxFRklOREVSX0gKLSNkZWZpbmUgTU9DS0ZJTEVGSU5ERVJfSAotCi0jaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLSNpbmNsdWRlICJEaXJlY3RvcnlXYWxrZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLWNsYXNzIE1vY2tGaWxlRmluZGVyIDogcHVibGljIEZpbGVGaW5kZXIgewotcHVibGljOgotICAgIE1vY2tGaWxlRmluZGVyIChLZXllZFZlY3RvcjxTdHJpbmc4LCBLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4gPiYgZmlsZXMpCi0gICAgICAgIDogbUZpbGVzKGZpbGVzKQotICAgIHsKLSAgICAgICAgLy8gTm90aGluZyBsZWZ0IHRvIGRvCi0gICAgfTsKLQotICAgIC8qKgotICAgICAqIGZpbmRGaWxlcyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGFic3RyYWN0aW9uLgotICAgICAqIFBSRUNPTkRJVElPTlM6Ci0gICAgICogIE5vIGNoZWNraW5nIGlzIGRvbmUsIHNvIHRoZXJlIE1VU1QgYmUgYW4gZW50cnkgaW4gbUZpbGVzIHdpdGgKLSAgICAgKiAgcGF0aCBtYXRjaGluZyBiYXNlUGF0aC4KLSAgICAgKgotICAgICAqIFBPU1RDT05ESVRJT05TOgotICAgICAqICBmaWxlU3RvcmUgaXMgZmlsbGVkIHdpdGggYSBjb3B5IG9mIHRoZSBkYXRhIGluIG1GaWxlcyBjb3JyZXNwb25kaW5nCi0gICAgICogIHRvIHRoZSBiYXNlUGF0aC4KLSAgICAgKi8KLQotICAgIHZpcnR1YWwgYm9vbCBmaW5kRmlsZXMoU3RyaW5nOCBiYXNlUGF0aCwgVmVjdG9yPFN0cmluZzg+JiBleHRlbnNpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCx0aW1lX3Q+JiBmaWxlU3RvcmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnlXYWxrZXIqIGR3KQotICAgIHsKLSAgICAgICAgY29uc3QgS2V5ZWRWZWN0b3I8U3RyaW5nOCx0aW1lX3Q+KiBwYXlsb2FkKCZtRmlsZXMudmFsdWVGb3IoYmFzZVBhdGgpKTsKLSAgICAgICAgLy8gU2luY2UgS2V5ZWRWZWN0b3IgZG9lc24ndCBpbXBsZW1lbnQgc3dhcAotICAgICAgICAvLyAod2hvIGRvZXNuJ3QgdXNlIHN3YXA/Pykgd2UgbG9vcCBhbmQgYWRkIG9uZSBhdCBhIHRpbWUuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF5bG9hZC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGZpbGVTdG9yZS5hZGQocGF5bG9hZC0+a2V5QXQoaSkscGF5bG9hZC0+dmFsdWVBdChpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIC8vIFZpcnR1YWwgbWFwcGluZyBiZXR3ZWVuICJkaXJlY3RvcmllcyIgYW5kIHRoZSAiZmlsZXMiIGNvbnRhaW5lZAotICAgIC8vIGluIHRoZW0KLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4gPiBtRmlsZXM7Ci19OwotCi0KLSNlbmRpZiAvLyBNT0NLRklMRUZJTkRFUl9IClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC90ZXN0cy9wbHVyYWxzL0FuZHJvaWRNYW5pZmVzdC54bWwgYi90b29scy9hYXB0L3Rlc3RzL3BsdXJhbHMvQW5kcm9pZE1hbmlmZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcyMWRlZS4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L3Rlc3RzL3BsdXJhbHMvQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgcGFja2FnZT0iY29tLmFuZHJvaWQuYWFwdC50ZXN0LnBsdXJhbHMiPgotCi08L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC90ZXN0cy9wbHVyYWxzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi90b29scy9hYXB0L3Rlc3RzL3BsdXJhbHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMxZmMxOS4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L3Rlc3RzL3BsdXJhbHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPHJlc291cmNlcyB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJvayI+T0s8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJhX3BsdXJhbCI+Ci0gICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkEgZG9nPC9pdGVtPgotICAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlNvbWUgZG9nczwvaXRlbT4KLSAgICA8L3BsdXJhbHM+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvdGVzdHMvcGx1cmFscy9ydW4uc2ggYi90b29scy9hYXB0L3Rlc3RzL3BsdXJhbHMvcnVuLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0ZDM5ZTEwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvdGVzdHMvcGx1cmFscy9ydW4uc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1URVNUX0RJUj10b29scy9hYXB0L3Rlc3RzL3BsdXJhbHMKLVRFU1RfT1VUX0RJUj1vdXQvcGx1cmFsc190ZXN0Ci0KLXJtIC1yZiAkVEVTVF9PVVRfRElSCi1ta2RpciAtcCAkVEVTVF9PVVRfRElSCi1ta2RpciAtcCAkVEVTVF9PVVRfRElSL2phdmEKLQotI2dkYiAtLWFyZ3MgXAotYWFwdCBwYWNrYWdlIC12IC14IC1tIC16ICAtSiAkVEVTVF9PVVRfRElSL2phdmEgLU0gJFRFU1RfRElSL0FuZHJvaWRNYW5pZmVzdC54bWwgXAotICAgICAgICAgICAgIC1JIG91dC90YXJnZXQvY29tbW9uL29iai9BUFBTL2ZyYW1ld29yay1yZXNfaW50ZXJtZWRpYXRlcy9wYWNrYWdlLWV4cG9ydC5hcGsgXAotICAgICAgICAgICAgIC1QICRURVNUX09VVF9ESVIvcHVibGljX3Jlc291cmNlcy54bWwgXAotICAgICAgICAgICAgIC1TICRURVNUX0RJUi9yZXMKLQotZWNobwotZWNobyAiPT09PT09PT09PT09PT09PT09PT0gRklMRVMgQ1JFQVRFRCA9PT09PT09PT09PT09PT09PT09PSAiCi1maW5kICRURVNUX09VVF9ESVIgLXR5cGUgZgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9BU1QuY3BwIGIvdG9vbHMvYWlkbC9BU1QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmE2NzY1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvQVNULmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkxMiArMCwwIEBACi0jaW5jbHVkZSAiQVNULmgiCi0jaW5jbHVkZSAiVHlwZS5oIgotCi12b2lkCi1Xcml0ZU1vZGlmaWVycyhGSUxFKiB0bywgaW50IG1vZCwgaW50IG1hc2spCi17Ci0gICAgaW50IG0gPSBtb2QgJiBtYXNrOwotCi0gICAgaWYgKG0gJiBPVkVSUklERSkgewotICAgICAgICBmcHJpbnRmKHRvLCAiQE92ZXJyaWRlICIpOwotICAgIH0KLQotICAgIGlmICgobSAmIFNDT1BFX01BU0spID09IFBVQkxJQykgewotICAgICAgICBmcHJpbnRmKHRvLCAicHVibGljICIpOwotICAgIH0KLSAgICBlbHNlIGlmICgobSAmIFNDT1BFX01BU0spID09IFBSSVZBVEUpIHsKLSAgICAgICAgZnByaW50Zih0bywgInByaXZhdGUgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKChtICYgU0NPUEVfTUFTSykgPT0gUFJPVEVDVEVEKSB7Ci0gICAgICAgIGZwcmludGYodG8sICJwcm90ZWN0ZWQgIik7Ci0gICAgfQotCi0gICAgaWYgKG0gJiBTVEFUSUMpIHsKLSAgICAgICAgZnByaW50Zih0bywgInN0YXRpYyAiKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG0gJiBGSU5BTCkgewotICAgICAgICBmcHJpbnRmKHRvLCAiZmluYWwgIik7Ci0gICAgfQotCi0gICAgaWYgKG0gJiBBQlNUUkFDVCkgewotICAgICAgICBmcHJpbnRmKHRvLCAiYWJzdHJhY3QgIik7Ci0gICAgfQotfQotCi12b2lkCi1Xcml0ZUFyZ3VtZW50TGlzdChGSUxFKiB0bywgY29uc3QgdmVjdG9yPEV4cHJlc3Npb24qPiYgYXJndW1lbnRzKQotewotICAgIHNpemVfdCBOID0gYXJndW1lbnRzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGFyZ3VtZW50c1tpXS0+V3JpdGUodG8pOwotICAgICAgICBpZiAoaSAhPSBOLTEpIHsKLSAgICAgICAgICAgIGZwcmludGYodG8sICIsICIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1DbGFzc0VsZW1lbnQ6OkNsYXNzRWxlbWVudCgpCi17Ci19Ci0KLUNsYXNzRWxlbWVudDo6fkNsYXNzRWxlbWVudCgpCi17Ci19Ci0KLUZpZWxkOjpGaWVsZCgpCi0gICAgOkNsYXNzRWxlbWVudCgpLAotICAgICBtb2RpZmllcnMoMCksCi0gICAgIHZhcmlhYmxlKE5VTEwpCi17Ci19Ci0KLUZpZWxkOjpGaWVsZChpbnQgbSwgVmFyaWFibGUqIHYpCi0gICAgOkNsYXNzRWxlbWVudCgpLAotICAgICBtb2RpZmllcnMobSksCi0gICAgIHZhcmlhYmxlKHYpCi17Ci19Ci0KLUZpZWxkOjp+RmllbGQoKQotewotfQotCi12b2lkCi1GaWVsZDo6R2F0aGVyVHlwZXMoc2V0PFR5cGUqPiogdHlwZXMpIGNvbnN0Ci17Ci0gICAgdHlwZXMtPmluc2VydCh0aGlzLT52YXJpYWJsZS0+dHlwZSk7Ci19Ci0KLXZvaWQKLUZpZWxkOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBpZiAodGhpcy0+Y29tbWVudC5sZW5ndGgoKSAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYodG8sICIlc1xuIiwgdGhpcy0+Y29tbWVudC5jX3N0cigpKTsKLSAgICB9Ci0gICAgV3JpdGVNb2RpZmllcnModG8sIHRoaXMtPm1vZGlmaWVycywgU0NPUEVfTUFTSyB8IFNUQVRJQyB8IEZJTkFMIHwgT1ZFUlJJREUpOwotICAgIGZwcmludGYodG8sICIlcyAlcyIsIHRoaXMtPnZhcmlhYmxlLT50eXBlLT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSwKLSAgICAgICAgICAgIHRoaXMtPnZhcmlhYmxlLT5uYW1lLmNfc3RyKCkpOwotICAgIGlmICh0aGlzLT52YWx1ZS5sZW5ndGgoKSAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYodG8sICIgPSAlcyIsIHRoaXMtPnZhbHVlLmNfc3RyKCkpOwotICAgIH0KLSAgICBmcHJpbnRmKHRvLCAiO1xuIik7Ci19Ci0KLUV4cHJlc3Npb246On5FeHByZXNzaW9uKCkKLXsKLX0KLQotTGl0ZXJhbEV4cHJlc3Npb246OkxpdGVyYWxFeHByZXNzaW9uKGNvbnN0IHN0cmluZyYgdikKLSAgICA6dmFsdWUodikKLXsKLX0KLQotTGl0ZXJhbEV4cHJlc3Npb246On5MaXRlcmFsRXhwcmVzc2lvbigpCi17Ci19Ci0KLXZvaWQKLUxpdGVyYWxFeHByZXNzaW9uOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAiJXMiLCB0aGlzLT52YWx1ZS5jX3N0cigpKTsKLX0KLQotU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb246OlN0cmluZ0xpdGVyYWxFeHByZXNzaW9uKGNvbnN0IHN0cmluZyYgdikKLSAgICA6dmFsdWUodikKLXsKLX0KLQotU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb246On5TdHJpbmdMaXRlcmFsRXhwcmVzc2lvbigpCi17Ci19Ci0KLXZvaWQKLVN0cmluZ0xpdGVyYWxFeHByZXNzaW9uOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAiXCIlc1wiIiwgdGhpcy0+dmFsdWUuY19zdHIoKSk7Ci19Ci0KLVZhcmlhYmxlOjpWYXJpYWJsZSgpCi0gICAgOnR5cGUoTlVMTCksCi0gICAgIG5hbWUoKSwKLSAgICAgZGltZW5zaW9uKDApCi17Ci19Ci0KLVZhcmlhYmxlOjpWYXJpYWJsZShUeXBlKiB0LCBjb25zdCBzdHJpbmcmIG4pCi0gICAgOnR5cGUodCksCi0gICAgIG5hbWUobiksCi0gICAgIGRpbWVuc2lvbigwKQotewotfQotCi1WYXJpYWJsZTo6VmFyaWFibGUoVHlwZSogdCwgY29uc3Qgc3RyaW5nJiBuLCBpbnQgZCkKLSAgICA6dHlwZSh0KSwKLSAgICAgbmFtZShuKSwKLSAgICAgZGltZW5zaW9uKGQpCi17Ci19Ci0KLVZhcmlhYmxlOjp+VmFyaWFibGUoKQotewotfQotCi12b2lkCi1WYXJpYWJsZTo6R2F0aGVyVHlwZXMoc2V0PFR5cGUqPiogdHlwZXMpIGNvbnN0Ci17Ci0gICAgdHlwZXMtPmluc2VydCh0aGlzLT50eXBlKTsKLX0KLQotdm9pZAotVmFyaWFibGU6OldyaXRlRGVjbGFyYXRpb24oRklMRSogdG8pCi17Ci0gICAgc3RyaW5nIGRpbTsKLSAgICBmb3IgKGludCBpPTA7IGk8dGhpcy0+ZGltZW5zaW9uOyBpKyspIHsKLSAgICAgICAgZGltICs9ICJbXSI7Ci0gICAgfQotICAgIGZwcmludGYodG8sICIlcyVzICVzIiwgdGhpcy0+dHlwZS0+UXVhbGlmaWVkTmFtZSgpLmNfc3RyKCksIGRpbS5jX3N0cigpLAotICAgICAgICAgICAgdGhpcy0+bmFtZS5jX3N0cigpKTsKLX0KLQotdm9pZAotVmFyaWFibGU6OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICIlcyIsIG5hbWUuY19zdHIoKSk7Ci19Ci0KLUZpZWxkVmFyaWFibGU6OkZpZWxkVmFyaWFibGUoRXhwcmVzc2lvbiogbywgY29uc3Qgc3RyaW5nJiBuKQotICAgIDpvYmplY3QobyksCi0gICAgIGNsYXp6KE5VTEwpLAotICAgICBuYW1lKG4pCi17Ci19Ci0KLUZpZWxkVmFyaWFibGU6OkZpZWxkVmFyaWFibGUoVHlwZSogYywgY29uc3Qgc3RyaW5nJiBuKQotICAgIDpvYmplY3QoTlVMTCksCi0gICAgIGNsYXp6KGMpLAotICAgICBuYW1lKG4pCi17Ci19Ci0KLUZpZWxkVmFyaWFibGU6On5GaWVsZFZhcmlhYmxlKCkKLXsKLX0KLQotdm9pZAotRmllbGRWYXJpYWJsZTo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgaWYgKHRoaXMtPm9iamVjdCAhPSBOVUxMKSB7Ci0gICAgICAgIHRoaXMtPm9iamVjdC0+V3JpdGUodG8pOwotICAgIH0KLSAgICBlbHNlIGlmICh0aGlzLT5jbGF6eiAhPSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYodG8sICIlcyIsIHRoaXMtPmNsYXp6LT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgfQotICAgIGZwcmludGYodG8sICIuJXMiLCBuYW1lLmNfc3RyKCkpOwotfQotCi0KLVN0YXRlbWVudDo6flN0YXRlbWVudCgpCi17Ci19Ci0KLVN0YXRlbWVudEJsb2NrOjpTdGF0ZW1lbnRCbG9jaygpCi17Ci19Ci0KLVN0YXRlbWVudEJsb2NrOjp+U3RhdGVtZW50QmxvY2soKQotewotfQotCi12b2lkCi1TdGF0ZW1lbnRCbG9jazo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgZnByaW50Zih0bywgIntcbiIpOwotICAgIGludCBOID0gdGhpcy0+c3RhdGVtZW50cy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICB0aGlzLT5zdGF0ZW1lbnRzW2ldLT5Xcml0ZSh0byk7Ci0gICAgfQotICAgIGZwcmludGYodG8sICJ9XG4iKTsKLX0KLQotdm9pZAotU3RhdGVtZW50QmxvY2s6OkFkZChTdGF0ZW1lbnQqIHN0YXRlbWVudCkKLXsKLSAgICB0aGlzLT5zdGF0ZW1lbnRzLnB1c2hfYmFjayhzdGF0ZW1lbnQpOwotfQotCi12b2lkCi1TdGF0ZW1lbnRCbG9jazo6QWRkKEV4cHJlc3Npb24qIGV4cHJlc3Npb24pCi17Ci0gICAgdGhpcy0+c3RhdGVtZW50cy5wdXNoX2JhY2sobmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcmVzc2lvbikpOwotfQotCi1FeHByZXNzaW9uU3RhdGVtZW50OjpFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb24qIGUpCi0gICAgOmV4cHJlc3Npb24oZSkKLXsKLX0KLQotRXhwcmVzc2lvblN0YXRlbWVudDo6fkV4cHJlc3Npb25TdGF0ZW1lbnQoKQotewotfQotCi12b2lkCi1FeHByZXNzaW9uU3RhdGVtZW50OjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICB0aGlzLT5leHByZXNzaW9uLT5Xcml0ZSh0byk7Ci0gICAgZnByaW50Zih0bywgIjtcbiIpOwotfQotCi1Bc3NpZ25tZW50OjpBc3NpZ25tZW50KFZhcmlhYmxlKiBsLCBFeHByZXNzaW9uKiByKQotICAgIDpsdmFsdWUobCksCi0gICAgIHJ2YWx1ZShyKSwKLSAgICAgY2FzdChOVUxMKQotewotfQotCi1Bc3NpZ25tZW50OjpBc3NpZ25tZW50KFZhcmlhYmxlKiBsLCBFeHByZXNzaW9uKiByLCBUeXBlKiBjKQotICAgIDpsdmFsdWUobCksCi0gICAgIHJ2YWx1ZShyKSwKLSAgICAgY2FzdChjKQotewotfQotCi1Bc3NpZ25tZW50Ojp+QXNzaWdubWVudCgpCi17Ci19Ci0KLXZvaWQKLUFzc2lnbm1lbnQ6OldyaXRlKEZJTEUqIHRvKQotewotICAgIHRoaXMtPmx2YWx1ZS0+V3JpdGUodG8pOwotICAgIGZwcmludGYodG8sICIgPSAiKTsKLSAgICBpZiAodGhpcy0+Y2FzdCAhPSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYodG8sICIoJXMpIiwgdGhpcy0+Y2FzdC0+UXVhbGlmaWVkTmFtZSgpLmNfc3RyKCkpOwotICAgIH0KLSAgICB0aGlzLT5ydmFsdWUtPldyaXRlKHRvKTsKLX0KLQotTWV0aG9kQ2FsbDo6TWV0aG9kQ2FsbChjb25zdCBzdHJpbmcmIG4pCi0gICAgOm9iaihOVUxMKSwKLSAgICAgY2xhenooTlVMTCksCi0gICAgIG5hbWUobikKLXsKLX0KLQotTWV0aG9kQ2FsbDo6TWV0aG9kQ2FsbChjb25zdCBzdHJpbmcmIG4sIGludCBhcmdjID0gMCwgLi4uKQotICAgIDpvYmooTlVMTCksCi0gICAgIGNsYXp6KE5VTEwpLAotICAgICBuYW1lKG4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQoYXJncywgYXJnYyk7Ci0gIGluaXQoYXJnYywgYXJncyk7Ci0gIHZhX2VuZChhcmdzKTsKLX0KLQotTWV0aG9kQ2FsbDo6TWV0aG9kQ2FsbChFeHByZXNzaW9uKiBvLCBjb25zdCBzdHJpbmcmIG4pCi0gICAgOm9iaihvKSwKLSAgICAgY2xhenooTlVMTCksCi0gICAgIG5hbWUobikKLXsKLX0KLQotTWV0aG9kQ2FsbDo6TWV0aG9kQ2FsbChUeXBlKiB0LCBjb25zdCBzdHJpbmcmIG4pCi0gICAgOm9iaihOVUxMKSwKLSAgICAgY2xhenoodCksCi0gICAgIG5hbWUobikKLXsKLX0KLQotTWV0aG9kQ2FsbDo6TWV0aG9kQ2FsbChFeHByZXNzaW9uKiBvLCBjb25zdCBzdHJpbmcmIG4sIGludCBhcmdjID0gMCwgLi4uKQotICAgIDpvYmoobyksCi0gICAgIGNsYXp6KE5VTEwpLAotICAgICBuYW1lKG4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQoYXJncywgYXJnYyk7Ci0gIGluaXQoYXJnYywgYXJncyk7Ci0gIHZhX2VuZChhcmdzKTsKLX0KLQotTWV0aG9kQ2FsbDo6TWV0aG9kQ2FsbChUeXBlKiB0LCBjb25zdCBzdHJpbmcmIG4sIGludCBhcmdjID0gMCwgLi4uKQotICAgIDpvYmooTlVMTCksCi0gICAgIGNsYXp6KHQpLAotICAgICBuYW1lKG4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQoYXJncywgYXJnYyk7Ci0gIGluaXQoYXJnYywgYXJncyk7Ci0gIHZhX2VuZChhcmdzKTsKLX0KLQotTWV0aG9kQ2FsbDo6fk1ldGhvZENhbGwoKQotewotfQotCi12b2lkCi1NZXRob2RDYWxsOjppbml0KGludCBuLCB2YV9saXN0IGFyZ3MpCi17Ci0gICAgZm9yIChpbnQgaT0wOyBpPG47IGkrKykgewotICAgICAgICBFeHByZXNzaW9uKiBleHByZXNzaW9uID0gKEV4cHJlc3Npb24qKXZhX2FyZyhhcmdzLCB2b2lkKik7Ci0gICAgICAgIHRoaXMtPmFyZ3VtZW50cy5wdXNoX2JhY2soZXhwcmVzc2lvbik7Ci0gICAgfQotfQotCi12b2lkCi1NZXRob2RDYWxsOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBpZiAodGhpcy0+b2JqICE9IE5VTEwpIHsKLSAgICAgICAgdGhpcy0+b2JqLT5Xcml0ZSh0byk7Ci0gICAgICAgIGZwcmludGYodG8sICIuIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRoaXMtPmNsYXp6ICE9IE5VTEwpIHsKLSAgICAgICAgZnByaW50Zih0bywgIiVzLiIsIHRoaXMtPmNsYXp6LT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgfQotICAgIGZwcmludGYodG8sICIlcygiLCB0aGlzLT5uYW1lLmNfc3RyKCkpOwotICAgIFdyaXRlQXJndW1lbnRMaXN0KHRvLCB0aGlzLT5hcmd1bWVudHMpOwotICAgIGZwcmludGYodG8sICIpIik7Ci19Ci0KLUNvbXBhcmlzb246OkNvbXBhcmlzb24oRXhwcmVzc2lvbiogbCwgY29uc3Qgc3RyaW5nJiBvLCBFeHByZXNzaW9uKiByKQotICAgIDpsdmFsdWUobCksCi0gICAgIG9wKG8pLAotICAgICBydmFsdWUocikKLXsKLX0KLQotQ29tcGFyaXNvbjo6fkNvbXBhcmlzb24oKQotewotfQotCi12b2lkCi1Db21wYXJpc29uOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAiKCIpOwotICAgIHRoaXMtPmx2YWx1ZS0+V3JpdGUodG8pOwotICAgIGZwcmludGYodG8sICIlcyIsIHRoaXMtPm9wLmNfc3RyKCkpOwotICAgIHRoaXMtPnJ2YWx1ZS0+V3JpdGUodG8pOwotICAgIGZwcmludGYodG8sICIpIik7Ci19Ci0KLU5ld0V4cHJlc3Npb246Ok5ld0V4cHJlc3Npb24oVHlwZSogdCkKLSAgICA6dHlwZSh0KQotewotfQotCi1OZXdFeHByZXNzaW9uOjpOZXdFeHByZXNzaW9uKFR5cGUqIHQsIGludCBhcmdjID0gMCwgLi4uKQotICAgIDp0eXBlKHQpCi17Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQoYXJncywgYXJnYyk7Ci0gIGluaXQoYXJnYywgYXJncyk7Ci0gIHZhX2VuZChhcmdzKTsKLX0KLQotTmV3RXhwcmVzc2lvbjo6fk5ld0V4cHJlc3Npb24oKQotewotfQotCi12b2lkCi1OZXdFeHByZXNzaW9uOjppbml0KGludCBuLCB2YV9saXN0IGFyZ3MpCi17Ci0gICAgZm9yIChpbnQgaT0wOyBpPG47IGkrKykgewotICAgICAgICBFeHByZXNzaW9uKiBleHByZXNzaW9uID0gKEV4cHJlc3Npb24qKXZhX2FyZyhhcmdzLCB2b2lkKik7Ci0gICAgICAgIHRoaXMtPmFyZ3VtZW50cy5wdXNoX2JhY2soZXhwcmVzc2lvbik7Ci0gICAgfQotfQotCi12b2lkCi1OZXdFeHByZXNzaW9uOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAibmV3ICVzKCIsIHRoaXMtPnR5cGUtPkluc3RhbnRpYWJsZU5hbWUoKS5jX3N0cigpKTsKLSAgICBXcml0ZUFyZ3VtZW50TGlzdCh0bywgdGhpcy0+YXJndW1lbnRzKTsKLSAgICBmcHJpbnRmKHRvLCAiKSIpOwotfQotCi1OZXdBcnJheUV4cHJlc3Npb246Ok5ld0FycmF5RXhwcmVzc2lvbihUeXBlKiB0LCBFeHByZXNzaW9uKiBzKQotICAgIDp0eXBlKHQpLAotICAgICBzaXplKHMpCi17Ci19Ci0KLU5ld0FycmF5RXhwcmVzc2lvbjo6fk5ld0FycmF5RXhwcmVzc2lvbigpCi17Ci19Ci0KLXZvaWQKLU5ld0FycmF5RXhwcmVzc2lvbjo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgZnByaW50Zih0bywgIm5ldyAlc1siLCB0aGlzLT50eXBlLT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgc2l6ZS0+V3JpdGUodG8pOwotICAgIGZwcmludGYodG8sICJdIik7Ci19Ci0KLVRlcm5hcnk6OlRlcm5hcnkoKQotICAgIDpjb25kaXRpb24oTlVMTCksCi0gICAgIGlmcGFydChOVUxMKSwKLSAgICAgZWxzZXBhcnQoTlVMTCkKLXsKLX0KLQotVGVybmFyeTo6VGVybmFyeShFeHByZXNzaW9uKiBhLCBFeHByZXNzaW9uKiBiLCBFeHByZXNzaW9uKiBjKQotICAgIDpjb25kaXRpb24oYSksCi0gICAgIGlmcGFydChiKSwKLSAgICAgZWxzZXBhcnQoYykKLXsKLX0KLQotVGVybmFyeTo6flRlcm5hcnkoKQotewotfQotCi12b2lkCi1UZXJuYXJ5OjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAiKCgiKTsKLSAgICB0aGlzLT5jb25kaXRpb24tPldyaXRlKHRvKTsKLSAgICBmcHJpbnRmKHRvLCAiKT8oIik7Ci0gICAgdGhpcy0+aWZwYXJ0LT5Xcml0ZSh0byk7Ci0gICAgZnByaW50Zih0bywgIik6KCIpOwotICAgIHRoaXMtPmVsc2VwYXJ0LT5Xcml0ZSh0byk7Ci0gICAgZnByaW50Zih0bywgIikpIik7Ci19Ci0KLUNhc3Q6OkNhc3QoKQotICAgIDp0eXBlKE5VTEwpLAotICAgICBleHByZXNzaW9uKE5VTEwpCi17Ci19Ci0KLUNhc3Q6OkNhc3QoVHlwZSogdCwgRXhwcmVzc2lvbiogZSkKLSAgICA6dHlwZSh0KSwKLSAgICAgZXhwcmVzc2lvbihlKQotewotfQotCi1DYXN0Ojp+Q2FzdCgpCi17Ci19Ci0KLXZvaWQKLUNhc3Q6OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICIoKCVzKSIsIHRoaXMtPnR5cGUtPlF1YWxpZmllZE5hbWUoKS5jX3N0cigpKTsKLSAgICBleHByZXNzaW9uLT5Xcml0ZSh0byk7Ci0gICAgZnByaW50Zih0bywgIikiKTsKLX0KLQotVmFyaWFibGVEZWNsYXJhdGlvbjo6VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZSogbCwgRXhwcmVzc2lvbiogciwgVHlwZSogYykKLSAgICA6bHZhbHVlKGwpLAotICAgICBjYXN0KGMpLAotICAgICBydmFsdWUocikKLXsKLX0KLQotVmFyaWFibGVEZWNsYXJhdGlvbjo6VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZSogbCkKLSAgICA6bHZhbHVlKGwpLAotICAgICBjYXN0KE5VTEwpLAotICAgICBydmFsdWUoTlVMTCkKLXsKLX0KLQotVmFyaWFibGVEZWNsYXJhdGlvbjo6flZhcmlhYmxlRGVjbGFyYXRpb24oKQotewotfQotCi12b2lkCi1WYXJpYWJsZURlY2xhcmF0aW9uOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICB0aGlzLT5sdmFsdWUtPldyaXRlRGVjbGFyYXRpb24odG8pOwotICAgIGlmICh0aGlzLT5ydmFsdWUgIT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHRvLCAiID0gIik7Ci0gICAgICAgIGlmICh0aGlzLT5jYXN0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYodG8sICIoJXMpIiwgdGhpcy0+Y2FzdC0+UXVhbGlmaWVkTmFtZSgpLmNfc3RyKCkpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPnJ2YWx1ZS0+V3JpdGUodG8pOwotICAgIH0KLSAgICBmcHJpbnRmKHRvLCAiO1xuIik7Ci19Ci0KLUlmU3RhdGVtZW50OjpJZlN0YXRlbWVudCgpCi0gICAgOmV4cHJlc3Npb24oTlVMTCksCi0gICAgIHN0YXRlbWVudHMobmV3IFN0YXRlbWVudEJsb2NrKSwKLSAgICAgZWxzZWlmKE5VTEwpCi17Ci19Ci0KLUlmU3RhdGVtZW50Ojp+SWZTdGF0ZW1lbnQoKQotewotfQotCi12b2lkCi1JZlN0YXRlbWVudDo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgaWYgKHRoaXMtPmV4cHJlc3Npb24gIT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHRvLCAiaWYgKCIpOwotICAgICAgICB0aGlzLT5leHByZXNzaW9uLT5Xcml0ZSh0byk7Ci0gICAgICAgIGZwcmludGYodG8sICIpICIpOwotICAgIH0KLSAgICB0aGlzLT5zdGF0ZW1lbnRzLT5Xcml0ZSh0byk7Ci0gICAgaWYgKHRoaXMtPmVsc2VpZiAhPSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYodG8sICJlbHNlICIpOwotICAgICAgICB0aGlzLT5lbHNlaWYtPldyaXRlKHRvKTsKLSAgICB9Ci19Ci0KLVJldHVyblN0YXRlbWVudDo6UmV0dXJuU3RhdGVtZW50KEV4cHJlc3Npb24qIGUpCi0gICAgOmV4cHJlc3Npb24oZSkKLXsKLX0KLQotUmV0dXJuU3RhdGVtZW50Ojp+UmV0dXJuU3RhdGVtZW50KCkKLXsKLX0KLQotdm9pZAotUmV0dXJuU3RhdGVtZW50OjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAicmV0dXJuICIpOwotICAgIHRoaXMtPmV4cHJlc3Npb24tPldyaXRlKHRvKTsKLSAgICBmcHJpbnRmKHRvLCAiO1xuIik7Ci19Ci0KLVRyeVN0YXRlbWVudDo6VHJ5U3RhdGVtZW50KCkKLSAgICA6c3RhdGVtZW50cyhuZXcgU3RhdGVtZW50QmxvY2spCi17Ci19Ci0KLVRyeVN0YXRlbWVudDo6flRyeVN0YXRlbWVudCgpCi17Ci19Ci0KLXZvaWQKLVRyeVN0YXRlbWVudDo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgZnByaW50Zih0bywgInRyeSAiKTsKLSAgICB0aGlzLT5zdGF0ZW1lbnRzLT5Xcml0ZSh0byk7Ci19Ci0KLUNhdGNoU3RhdGVtZW50OjpDYXRjaFN0YXRlbWVudChWYXJpYWJsZSogZSkKLSAgICA6c3RhdGVtZW50cyhuZXcgU3RhdGVtZW50QmxvY2spLAotICAgICBleGNlcHRpb24oZSkKLXsKLX0KLQotQ2F0Y2hTdGF0ZW1lbnQ6On5DYXRjaFN0YXRlbWVudCgpCi17Ci19Ci0KLXZvaWQKLUNhdGNoU3RhdGVtZW50OjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAiY2F0Y2ggIik7Ci0gICAgaWYgKHRoaXMtPmV4Y2VwdGlvbiAhPSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYodG8sICIoIik7Ci0gICAgICAgIHRoaXMtPmV4Y2VwdGlvbi0+V3JpdGVEZWNsYXJhdGlvbih0byk7Ci0gICAgICAgIGZwcmludGYodG8sICIpICIpOwotICAgIH0KLSAgICB0aGlzLT5zdGF0ZW1lbnRzLT5Xcml0ZSh0byk7Ci19Ci0KLUZpbmFsbHlTdGF0ZW1lbnQ6OkZpbmFsbHlTdGF0ZW1lbnQoKQotICAgIDpzdGF0ZW1lbnRzKG5ldyBTdGF0ZW1lbnRCbG9jaykKLXsKLX0KLQotRmluYWxseVN0YXRlbWVudDo6fkZpbmFsbHlTdGF0ZW1lbnQoKQotewotfQotCi12b2lkCi1GaW5hbGx5U3RhdGVtZW50OjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAiZmluYWxseSAiKTsKLSAgICB0aGlzLT5zdGF0ZW1lbnRzLT5Xcml0ZSh0byk7Ci19Ci0KLUNhc2U6OkNhc2UoKQotICAgIDpzdGF0ZW1lbnRzKG5ldyBTdGF0ZW1lbnRCbG9jaykKLXsKLX0KLQotQ2FzZTo6Q2FzZShjb25zdCBzdHJpbmcmIGMpCi0gICAgOnN0YXRlbWVudHMobmV3IFN0YXRlbWVudEJsb2NrKQotewotICAgIGNhc2VzLnB1c2hfYmFjayhjKTsKLX0KLQotQ2FzZTo6fkNhc2UoKQotewotfQotCi12b2lkCi1DYXNlOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBpbnQgTiA9IHRoaXMtPmNhc2VzLnNpemUoKTsKLSAgICBpZiAoTiA+IDApIHsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgc3RyaW5nIHMgPSB0aGlzLT5jYXNlc1tpXTsKLSAgICAgICAgICAgIGlmIChzLmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHRvLCAiY2FzZSAlczpcbiIsIHMuY19zdHIoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZwcmludGYodG8sICJkZWZhdWx0OlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmcHJpbnRmKHRvLCAiZGVmYXVsdDpcbiIpOwotICAgIH0KLSAgICBzdGF0ZW1lbnRzLT5Xcml0ZSh0byk7Ci19Ci0KLVN3aXRjaFN0YXRlbWVudDo6U3dpdGNoU3RhdGVtZW50KEV4cHJlc3Npb24qIGUpCi0gICAgOmV4cHJlc3Npb24oZSkKLXsKLX0KLQotU3dpdGNoU3RhdGVtZW50Ojp+U3dpdGNoU3RhdGVtZW50KCkKLXsKLX0KLQotdm9pZAotU3dpdGNoU3RhdGVtZW50OjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAic3dpdGNoICgiKTsKLSAgICB0aGlzLT5leHByZXNzaW9uLT5Xcml0ZSh0byk7Ci0gICAgZnByaW50Zih0bywgIilcbntcbiIpOwotICAgIGludCBOID0gdGhpcy0+Y2FzZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgdGhpcy0+Y2FzZXNbaV0tPldyaXRlKHRvKTsKLSAgICB9Ci0gICAgZnByaW50Zih0bywgIn1cbiIpOwotfQotCi1CcmVhazo6QnJlYWsoKQotewotfQotCi1CcmVhazo6fkJyZWFrKCkKLXsKLX0KLQotdm9pZAotQnJlYWs6OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICJicmVhaztcbiIpOwotfQotCi1NZXRob2Q6Ok1ldGhvZCgpCi0gICAgOkNsYXNzRWxlbWVudCgpLAotICAgICBtb2RpZmllcnMoMCksCi0gICAgIHJldHVyblR5cGUoTlVMTCksIC8vIChOVUxMIG1lYW5zIGNvbnN0cnVjdG9yKQotICAgICByZXR1cm5UeXBlRGltZW5zaW9uKDApLAotICAgICBzdGF0ZW1lbnRzKE5VTEwpCi17Ci19Ci0KLU1ldGhvZDo6fk1ldGhvZCgpCi17Ci19Ci0KLXZvaWQKLU1ldGhvZDo6R2F0aGVyVHlwZXMoc2V0PFR5cGUqPiogdHlwZXMpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IE4sIGk7Ci0KLSAgICBpZiAodGhpcy0+cmV0dXJuVHlwZSkgewotICAgICAgICB0eXBlcy0+aW5zZXJ0KHRoaXMtPnJldHVyblR5cGUpOwotICAgIH0KLQotICAgIE4gPSB0aGlzLT5wYXJhbWV0ZXJzLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgdGhpcy0+cGFyYW1ldGVyc1tpXS0+R2F0aGVyVHlwZXModHlwZXMpOwotICAgIH0KLQotICAgIE4gPSB0aGlzLT5leGNlcHRpb25zLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgdHlwZXMtPmluc2VydCh0aGlzLT5leGNlcHRpb25zW2ldKTsKLSAgICB9Ci19Ci0KLXZvaWQKLU1ldGhvZDo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgc2l6ZV90IE4sIGk7Ci0KLSAgICBpZiAodGhpcy0+Y29tbWVudC5sZW5ndGgoKSAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYodG8sICIlc1xuIiwgdGhpcy0+Y29tbWVudC5jX3N0cigpKTsKLSAgICB9Ci0KLSAgICBXcml0ZU1vZGlmaWVycyh0bywgdGhpcy0+bW9kaWZpZXJzLCBTQ09QRV9NQVNLIHwgU1RBVElDIHwgQUJTVFJBQ1QgfCBGSU5BTCB8IE9WRVJSSURFKTsKLQotICAgIGlmICh0aGlzLT5yZXR1cm5UeXBlICE9IE5VTEwpIHsKLSAgICAgICAgc3RyaW5nIGRpbTsKLSAgICAgICAgZm9yIChpPTA7IGk8dGhpcy0+cmV0dXJuVHlwZURpbWVuc2lvbjsgaSsrKSB7Ci0gICAgICAgICAgICBkaW0gKz0gIltdIjsKLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKHRvLCAiJXMlcyAiLCB0aGlzLT5yZXR1cm5UeXBlLT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSwKLSAgICAgICAgICAgICAgICBkaW0uY19zdHIoKSk7Ci0gICAgfQotICAgCi0gICAgZnByaW50Zih0bywgIiVzKCIsIHRoaXMtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICBOID0gdGhpcy0+cGFyYW1ldGVycy5zaXplKCk7Ci0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHRoaXMtPnBhcmFtZXRlcnNbaV0tPldyaXRlRGVjbGFyYXRpb24odG8pOwotICAgICAgICBpZiAoaSAhPSBOLTEpIHsKLSAgICAgICAgICAgIGZwcmludGYodG8sICIsICIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnByaW50Zih0bywgIikiKTsKLQotICAgIE4gPSB0aGlzLT5leGNlcHRpb25zLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICAgICAgZnByaW50Zih0bywgIiB0aHJvd3MgIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHRvLCAiLCAiKTsKLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKHRvLCAiJXMiLCB0aGlzLT5leGNlcHRpb25zW2ldLT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMtPnN0YXRlbWVudHMgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHRvLCAiO1xuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnByaW50Zih0bywgIlxuIik7Ci0gICAgICAgIHRoaXMtPnN0YXRlbWVudHMtPldyaXRlKHRvKTsKLSAgICB9Ci19Ci0KLUNsYXNzOjpDbGFzcygpCi0gICAgOm1vZGlmaWVycygwKSwKLSAgICAgd2hhdChDTEFTUyksCi0gICAgIHR5cGUoTlVMTCksCi0gICAgIGV4dGVuZHMoTlVMTCkKLXsKLX0KLQotQ2xhc3M6On5DbGFzcygpCi17Ci19Ci0KLXZvaWQKLUNsYXNzOjpHYXRoZXJUeXBlcyhzZXQ8VHlwZSo+KiB0eXBlcykgY29uc3QKLXsKLSAgICBpbnQgTiwgaTsKLQotICAgIHR5cGVzLT5pbnNlcnQodGhpcy0+dHlwZSk7Ci0gICAgaWYgKHRoaXMtPmV4dGVuZHMgIT0gTlVMTCkgewotICAgICAgICB0eXBlcy0+aW5zZXJ0KHRoaXMtPmV4dGVuZHMpOwotICAgIH0KLQotICAgIE4gPSB0aGlzLT5pbnRlcmZhY2VzLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgdHlwZXMtPmluc2VydCh0aGlzLT5pbnRlcmZhY2VzW2ldKTsKLSAgICB9Ci0KLSAgICBOID0gdGhpcy0+ZWxlbWVudHMuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICB0aGlzLT5lbGVtZW50c1tpXS0+R2F0aGVyVHlwZXModHlwZXMpOwotICAgIH0KLX0KLQotdm9pZAotQ2xhc3M6OldyaXRlKEZJTEUqIHRvKQotewotICAgIHNpemVfdCBOLCBpOwotCi0gICAgaWYgKHRoaXMtPmNvbW1lbnQubGVuZ3RoKCkgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHRvLCAiJXNcbiIsIHRoaXMtPmNvbW1lbnQuY19zdHIoKSk7Ci0gICAgfQotCi0gICAgV3JpdGVNb2RpZmllcnModG8sIHRoaXMtPm1vZGlmaWVycywgQUxMX01PRElGSUVSUyk7Ci0KLSAgICBpZiAodGhpcy0+d2hhdCA9PSBDbGFzczo6Q0xBU1MpIHsKLSAgICAgICAgZnByaW50Zih0bywgImNsYXNzICIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZwcmludGYodG8sICJpbnRlcmZhY2UgIik7Ci0gICAgfQotCi0gICAgc3RyaW5nIG5hbWUgPSB0aGlzLT50eXBlLT5OYW1lKCk7Ci0gICAgc2l6ZV90IHBvcyA9IG5hbWUucmZpbmQoJy4nKTsKLSAgICBpZiAocG9zICE9IHN0cmluZzo6bnBvcykgewotICAgICAgICBuYW1lID0gbmFtZS5jX3N0cigpICsgcG9zICsgMTsKLSAgICB9Ci0KLSAgICBmcHJpbnRmKHRvLCAiJXMiLCBuYW1lLmNfc3RyKCkpOwotCi0gICAgaWYgKHRoaXMtPmV4dGVuZHMgIT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHRvLCAiIGV4dGVuZHMgJXMiLCB0aGlzLT5leHRlbmRzLT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgfQotCi0gICAgTiA9IHRoaXMtPmludGVyZmFjZXMuc2l6ZSgpOwotICAgIGlmIChOICE9IDApIHsKLSAgICAgICAgaWYgKHRoaXMtPndoYXQgPT0gQ2xhc3M6OkNMQVNTKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHRvLCAiIGltcGxlbWVudHMiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYodG8sICIgZXh0ZW5kcyIpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgZnByaW50Zih0bywgIiAlcyIsIHRoaXMtPmludGVyZmFjZXNbaV0tPlF1YWxpZmllZE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZwcmludGYodG8sICJcbiIpOwotICAgIGZwcmludGYodG8sICJ7XG4iKTsKLQotICAgIE4gPSB0aGlzLT5lbGVtZW50cy5zaXplKCk7Ci0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHRoaXMtPmVsZW1lbnRzW2ldLT5Xcml0ZSh0byk7Ci0gICAgfQotCi0gICAgZnByaW50Zih0bywgIn1cbiIpOwotCi19Ci0KLURvY3VtZW50OjpEb2N1bWVudCgpCi17Ci19Ci0KLURvY3VtZW50Ojp+RG9jdW1lbnQoKQotewotfQotCi1zdGF0aWMgc3RyaW5nCi1lc2NhcGVfYmFja3NsYXNoZXMoY29uc3Qgc3RyaW5nJiBzdHIpCi17Ci0gICAgc3RyaW5nIHJlc3VsdDsKLSAgICBjb25zdCBzaXplX3QgST1zdHIubGVuZ3RoKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPEk7IGkrKykgewotICAgICAgICBjaGFyIGMgPSBzdHJbaV07Ci0gICAgICAgIGlmIChjID09ICdcXCcpIHsKLSAgICAgICAgICAgIHJlc3VsdCArPSAiXFxcXCI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gYzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkCi1Eb2N1bWVudDo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgc2l6ZV90IE4sIGk7Ci0KLSAgICBpZiAodGhpcy0+Y29tbWVudC5sZW5ndGgoKSAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYodG8sICIlc1xuIiwgdGhpcy0+Y29tbWVudC5jX3N0cigpKTsKLSAgICB9Ci0gICAgZnByaW50Zih0bywgIi8qXG4iCi0gICAgICAgICAgICAgICAgIiAqIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZC4gIERPIE5PVCBNT0RJRlkuXG4iCi0gICAgICAgICAgICAgICAgIiAqIE9yaWdpbmFsIGZpbGU6ICVzXG4iCi0gICAgICAgICAgICAgICAgIiAqL1xuIiwgZXNjYXBlX2JhY2tzbGFzaGVzKHRoaXMtPm9yaWdpbmFsU3JjKS5jX3N0cigpKTsKLSAgICBpZiAodGhpcy0+cGFja2FnZS5sZW5ndGgoKSAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYodG8sICJwYWNrYWdlICVzO1xuIiwgdGhpcy0+cGFja2FnZS5jX3N0cigpKTsKLSAgICB9Ci0KLSAgICBOID0gdGhpcy0+Y2xhc3Nlcy5zaXplKCk7Ci0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIENsYXNzKiBjID0gdGhpcy0+Y2xhc3Nlc1tpXTsKLSAgICAgICAgYy0+V3JpdGUodG8pOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9BU1QuaCBiL3Rvb2xzL2FpZGwvQVNULmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZDVlN2EuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9BU1QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3MSArMCwwIEBACi0jaWZuZGVmIEFJRExfQVNUX0gKLSNkZWZpbmUgQUlETF9BU1RfSAotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotY2xhc3MgVHlwZTsKLQotZW51bSB7Ci0gICAgUEFDS0FHRV9QUklWQVRFID0gMHgwMDAwMDAwMCwKLSAgICBQVUJMSUMgICAgICAgICAgPSAweDAwMDAwMDAxLAotICAgIFBSSVZBVEUgICAgICAgICA9IDB4MDAwMDAwMDIsCi0gICAgUFJPVEVDVEVEICAgICAgID0gMHgwMDAwMDAwMywKLSAgICBTQ09QRV9NQVNLICAgICAgPSAweDAwMDAwMDAzLAotCi0gICAgU1RBVElDICAgICAgICAgID0gMHgwMDAwMDAxMCwKLSAgICBGSU5BTCAgICAgICAgICAgPSAweDAwMDAwMDIwLAotICAgIEFCU1RSQUNUICAgICAgICA9IDB4MDAwMDAwNDAsCi0KLSAgICBPVkVSUklERSAgICAgICAgPSAweDAwMDAwMTAwLAotCi0gICAgQUxMX01PRElGSUVSUyAgID0gMHhmZmZmZmZmZgotfTsKLQotLy8gV3JpdGUgdGhlIG1vZGlmaWVycyB0aGF0IGFyZSBzZXQgaW4gYm90aCBtb2QgYW5kIG1hc2sKLXZvaWQgV3JpdGVNb2RpZmllcnMoRklMRSogdG8sIGludCBtb2QsIGludCBtYXNrKTsKLQotc3RydWN0IENsYXNzRWxlbWVudAotewotICAgIENsYXNzRWxlbWVudCgpOwotICAgIHZpcnR1YWwgfkNsYXNzRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCB2b2lkIEdhdGhlclR5cGVzKHNldDxUeXBlKj4qIHR5cGVzKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKSA9IDA7Ci19OwotCi1zdHJ1Y3QgRXhwcmVzc2lvbgotewotICAgIHZpcnR1YWwgfkV4cHJlc3Npb24oKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pID0gMDsKLX07Ci0KLXN0cnVjdCBMaXRlcmFsRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci0gICAgc3RyaW5nIHZhbHVlOwotCi0gICAgTGl0ZXJhbEV4cHJlc3Npb24oY29uc3Qgc3RyaW5nJiB2YWx1ZSk7Ci0gICAgdmlydHVhbCB+TGl0ZXJhbEV4cHJlc3Npb24oKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotLy8gVE9ETzogYWxzbyBlc2NhcGUgdGhlIGNvbnRlbnRzLiAgbm90IG5lZWRlZCBmb3Igbm93Ci1zdHJ1Y3QgU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb24gOiBwdWJsaWMgRXhwcmVzc2lvbgotewotICAgIHN0cmluZyB2YWx1ZTsKLQotICAgIFN0cmluZ0xpdGVyYWxFeHByZXNzaW9uKGNvbnN0IHN0cmluZyYgdmFsdWUpOwotICAgIHZpcnR1YWwgflN0cmluZ0xpdGVyYWxFeHByZXNzaW9uKCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBWYXJpYWJsZSA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci0gICAgVHlwZSogdHlwZTsKLSAgICBzdHJpbmcgbmFtZTsKLSAgICBpbnQgZGltZW5zaW9uOwotCi0gICAgVmFyaWFibGUoKTsKLSAgICBWYXJpYWJsZShUeXBlKiB0eXBlLCBjb25zdCBzdHJpbmcmIG5hbWUpOwotICAgIFZhcmlhYmxlKFR5cGUqIHR5cGUsIGNvbnN0IHN0cmluZyYgbmFtZSwgaW50IGRpbWVuc2lvbik7Ci0gICAgdmlydHVhbCB+VmFyaWFibGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBHYXRoZXJUeXBlcyhzZXQ8VHlwZSo+KiB0eXBlcykgY29uc3Q7Ci0gICAgdm9pZCBXcml0ZURlY2xhcmF0aW9uKEZJTEUqIHRvKTsKLSAgICB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBGaWVsZFZhcmlhYmxlIDogcHVibGljIEV4cHJlc3Npb24KLXsKLSAgICBFeHByZXNzaW9uKiBvYmplY3Q7Ci0gICAgVHlwZSogY2xheno7Ci0gICAgc3RyaW5nIG5hbWU7Ci0KLSAgICBGaWVsZFZhcmlhYmxlKEV4cHJlc3Npb24qIG9iamVjdCwgY29uc3Qgc3RyaW5nJiBuYW1lKTsKLSAgICBGaWVsZFZhcmlhYmxlKFR5cGUqIGNsYXp6LCBjb25zdCBzdHJpbmcmIG5hbWUpOwotICAgIHZpcnR1YWwgfkZpZWxkVmFyaWFibGUoKTsKLQotICAgIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IEZpZWxkIDogcHVibGljIENsYXNzRWxlbWVudAotewotICAgIHN0cmluZyBjb21tZW50OwotICAgIGludCBtb2RpZmllcnM7Ci0gICAgVmFyaWFibGUgKnZhcmlhYmxlOwotICAgIHN0cmluZyB2YWx1ZTsKLQotICAgIEZpZWxkKCk7Ci0gICAgRmllbGQoaW50IG1vZGlmaWVycywgVmFyaWFibGUqIHZhcmlhYmxlKTsKLSAgICB2aXJ0dWFsIH5GaWVsZCgpOwotCi0gICAgdmlydHVhbCB2b2lkIEdhdGhlclR5cGVzKHNldDxUeXBlKj4qIHR5cGVzKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IFN0YXRlbWVudAotewotICAgIHZpcnR1YWwgflN0YXRlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0bykgPSAwOwotfTsKLQotc3RydWN0IFN0YXRlbWVudEJsb2NrIDogcHVibGljIFN0YXRlbWVudAotewotICAgIHZlY3RvcjxTdGF0ZW1lbnQqPiBzdGF0ZW1lbnRzOwotCi0gICAgU3RhdGVtZW50QmxvY2soKTsKLSAgICB2aXJ0dWFsIH5TdGF0ZW1lbnRCbG9jaygpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci0KLSAgICB2b2lkIEFkZChTdGF0ZW1lbnQqIHN0YXRlbWVudCk7Ci0gICAgdm9pZCBBZGQoRXhwcmVzc2lvbiogZXhwcmVzc2lvbik7Ci19OwotCi1zdHJ1Y3QgRXhwcmVzc2lvblN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQKLXsKLSAgICBFeHByZXNzaW9uKiBleHByZXNzaW9uOwotCi0gICAgRXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uKiBleHByZXNzaW9uKTsKLSAgICB2aXJ0dWFsIH5FeHByZXNzaW9uU3RhdGVtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBBc3NpZ25tZW50IDogcHVibGljIEV4cHJlc3Npb24KLXsKLSAgICBWYXJpYWJsZSogbHZhbHVlOwotICAgIEV4cHJlc3Npb24qIHJ2YWx1ZTsKLSAgICBUeXBlKiBjYXN0OwotCi0gICAgQXNzaWdubWVudChWYXJpYWJsZSogbHZhbHVlLCBFeHByZXNzaW9uKiBydmFsdWUpOwotICAgIEFzc2lnbm1lbnQoVmFyaWFibGUqIGx2YWx1ZSwgRXhwcmVzc2lvbiogcnZhbHVlLCBUeXBlKiBjYXN0KTsKLSAgICB2aXJ0dWFsIH5Bc3NpZ25tZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBNZXRob2RDYWxsIDogcHVibGljIEV4cHJlc3Npb24KLXsKLSAgICBFeHByZXNzaW9uKiBvYmo7Ci0gICAgVHlwZSogY2xheno7Ci0gICAgc3RyaW5nIG5hbWU7Ci0gICAgdmVjdG9yPEV4cHJlc3Npb24qPiBhcmd1bWVudHM7Ci0gICAgdmVjdG9yPHN0cmluZz4gZXhjZXB0aW9uczsKLQotICAgIE1ldGhvZENhbGwoY29uc3Qgc3RyaW5nJiBuYW1lKTsKLSAgICBNZXRob2RDYWxsKGNvbnN0IHN0cmluZyYgbmFtZSwgaW50IGFyZ2MsIC4uLik7Ci0gICAgTWV0aG9kQ2FsbChFeHByZXNzaW9uKiBvYmosIGNvbnN0IHN0cmluZyYgbmFtZSk7Ci0gICAgTWV0aG9kQ2FsbChUeXBlKiBjbGF6eiwgY29uc3Qgc3RyaW5nJiBuYW1lKTsKLSAgICBNZXRob2RDYWxsKEV4cHJlc3Npb24qIG9iaiwgY29uc3Qgc3RyaW5nJiBuYW1lLCBpbnQgYXJnYywgLi4uKTsKLSAgICBNZXRob2RDYWxsKFR5cGUqIGNsYXp6LCBjb25zdCBzdHJpbmcmIG5hbWUsIGludCBhcmdjLCAuLi4pOwotICAgIHZpcnR1YWwgfk1ldGhvZENhbGwoKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotCi1wcml2YXRlOgotICAgIHZvaWQgaW5pdChpbnQgbiwgdmFfbGlzdCBhcmdzKTsKLX07Ci0KLXN0cnVjdCBDb21wYXJpc29uIDogcHVibGljIEV4cHJlc3Npb24KLXsKLSAgICBFeHByZXNzaW9uKiBsdmFsdWU7Ci0gICAgc3RyaW5nIG9wOwotICAgIEV4cHJlc3Npb24qIHJ2YWx1ZTsKLQotICAgIENvbXBhcmlzb24oRXhwcmVzc2lvbiogbHZhbHVlLCBjb25zdCBzdHJpbmcmIG9wLCBFeHByZXNzaW9uKiBydmFsdWUpOwotICAgIHZpcnR1YWwgfkNvbXBhcmlzb24oKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IE5ld0V4cHJlc3Npb24gOiBwdWJsaWMgRXhwcmVzc2lvbgotewotICAgIFR5cGUqIHR5cGU7Ci0gICAgdmVjdG9yPEV4cHJlc3Npb24qPiBhcmd1bWVudHM7Ci0KLSAgICBOZXdFeHByZXNzaW9uKFR5cGUqIHR5cGUpOwotICAgIE5ld0V4cHJlc3Npb24oVHlwZSogdHlwZSwgaW50IGFyZ2MsIC4uLik7Ci0gICAgdmlydHVhbCB+TmV3RXhwcmVzc2lvbigpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbml0KGludCBuLCB2YV9saXN0IGFyZ3MpOwotfTsKLQotc3RydWN0IE5ld0FycmF5RXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci0gICAgVHlwZSogdHlwZTsKLSAgICBFeHByZXNzaW9uKiBzaXplOwotCi0gICAgTmV3QXJyYXlFeHByZXNzaW9uKFR5cGUqIHR5cGUsIEV4cHJlc3Npb24qIHNpemUpOwotICAgIHZpcnR1YWwgfk5ld0FycmF5RXhwcmVzc2lvbigpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgVGVybmFyeSA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci0gICAgRXhwcmVzc2lvbiogY29uZGl0aW9uOwotICAgIEV4cHJlc3Npb24qIGlmcGFydDsKLSAgICBFeHByZXNzaW9uKiBlbHNlcGFydDsKLQotICAgIFRlcm5hcnkoKTsKLSAgICBUZXJuYXJ5KEV4cHJlc3Npb24qIGNvbmRpdGlvbiwgRXhwcmVzc2lvbiogaWZwYXJ0LCBFeHByZXNzaW9uKiBlbHNlcGFydCk7Ci0gICAgdmlydHVhbCB+VGVybmFyeSgpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgQ2FzdCA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci0gICAgVHlwZSogdHlwZTsKLSAgICBFeHByZXNzaW9uKiBleHByZXNzaW9uOwotCi0gICAgQ2FzdCgpOwotICAgIENhc3QoVHlwZSogdHlwZSwgRXhwcmVzc2lvbiogZXhwcmVzc2lvbik7Ci0gICAgdmlydHVhbCB+Q2FzdCgpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgVmFyaWFibGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBTdGF0ZW1lbnQKLXsKLSAgICBWYXJpYWJsZSogbHZhbHVlOwotICAgIFR5cGUqIGNhc3Q7Ci0gICAgRXhwcmVzc2lvbiogcnZhbHVlOwotCi0gICAgVmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZSogbHZhbHVlKTsKLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlKiBsdmFsdWUsIEV4cHJlc3Npb24qIHJ2YWx1ZSwgVHlwZSogY2FzdCA9IE5VTEwpOwotICAgIHZpcnR1YWwgflZhcmlhYmxlRGVjbGFyYXRpb24oKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IElmU3RhdGVtZW50IDogcHVibGljIFN0YXRlbWVudAotewotICAgIEV4cHJlc3Npb24qIGV4cHJlc3Npb247Ci0gICAgU3RhdGVtZW50QmxvY2sqIHN0YXRlbWVudHM7Ci0gICAgSWZTdGF0ZW1lbnQqIGVsc2VpZjsKLQotICAgIElmU3RhdGVtZW50KCk7Ci0gICAgdmlydHVhbCB+SWZTdGF0ZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IFJldHVyblN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQKLXsKLSAgICBFeHByZXNzaW9uKiBleHByZXNzaW9uOwotCi0gICAgUmV0dXJuU3RhdGVtZW50KEV4cHJlc3Npb24qIGV4cHJlc3Npb24pOwotICAgIHZpcnR1YWwgflJldHVyblN0YXRlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgVHJ5U3RhdGVtZW50IDogcHVibGljIFN0YXRlbWVudAotewotICAgIFN0YXRlbWVudEJsb2NrKiBzdGF0ZW1lbnRzOwotCi0gICAgVHJ5U3RhdGVtZW50KCk7Ci0gICAgdmlydHVhbCB+VHJ5U3RhdGVtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBDYXRjaFN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQKLXsKLSAgICBTdGF0ZW1lbnRCbG9jayogc3RhdGVtZW50czsKLSAgICBWYXJpYWJsZSogZXhjZXB0aW9uOwotCi0gICAgQ2F0Y2hTdGF0ZW1lbnQoVmFyaWFibGUqIGV4Y2VwdGlvbik7Ci0gICAgdmlydHVhbCB+Q2F0Y2hTdGF0ZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IEZpbmFsbHlTdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50Ci17Ci0gICAgU3RhdGVtZW50QmxvY2sqIHN0YXRlbWVudHM7Ci0KLSAgICBGaW5hbGx5U3RhdGVtZW50KCk7Ci0gICAgdmlydHVhbCB+RmluYWxseVN0YXRlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgQ2FzZQotewotICAgIHZlY3RvcjxzdHJpbmc+IGNhc2VzOwotICAgIFN0YXRlbWVudEJsb2NrKiBzdGF0ZW1lbnRzOwotCi0gICAgQ2FzZSgpOwotICAgIENhc2UoY29uc3Qgc3RyaW5nJiBjKTsKLSAgICB2aXJ0dWFsIH5DYXNlKCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBTd2l0Y2hTdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50Ci17Ci0gICAgRXhwcmVzc2lvbiogZXhwcmVzc2lvbjsKLSAgICB2ZWN0b3I8Q2FzZSo+IGNhc2VzOwotCi0gICAgU3dpdGNoU3RhdGVtZW50KEV4cHJlc3Npb24qIGV4cHJlc3Npb24pOwotICAgIHZpcnR1YWwgflN3aXRjaFN0YXRlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgQnJlYWsgOiBwdWJsaWMgU3RhdGVtZW50Ci17Ci0gICAgQnJlYWsoKTsKLSAgICB2aXJ0dWFsIH5CcmVhaygpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgTWV0aG9kIDogcHVibGljIENsYXNzRWxlbWVudAotewotICAgIHN0cmluZyBjb21tZW50OwotICAgIGludCBtb2RpZmllcnM7Ci0gICAgVHlwZSogcmV0dXJuVHlwZTsKLSAgICBzaXplX3QgcmV0dXJuVHlwZURpbWVuc2lvbjsKLSAgICBzdHJpbmcgbmFtZTsKLSAgICB2ZWN0b3I8VmFyaWFibGUqPiBwYXJhbWV0ZXJzOwotICAgIHZlY3RvcjxUeXBlKj4gZXhjZXB0aW9uczsKLSAgICBTdGF0ZW1lbnRCbG9jayogc3RhdGVtZW50czsKLQotICAgIE1ldGhvZCgpOwotICAgIHZpcnR1YWwgfk1ldGhvZCgpOwotCi0gICAgdmlydHVhbCB2b2lkIEdhdGhlclR5cGVzKHNldDxUeXBlKj4qIHR5cGVzKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IENsYXNzIDogcHVibGljIENsYXNzRWxlbWVudAotewotICAgIGVudW0gewotICAgICAgICBDTEFTUywKLSAgICAgICAgSU5URVJGQUNFCi0gICAgfTsKLQotICAgIHN0cmluZyBjb21tZW50OwotICAgIGludCBtb2RpZmllcnM7Ci0gICAgaW50IHdoYXQ7ICAgICAgICAgICAgICAgLy8gQ0xBU1Mgb3IgSU5URVJGQUNFCi0gICAgVHlwZSogdHlwZTsKLSAgICBUeXBlKiBleHRlbmRzOwotICAgIHZlY3RvcjxUeXBlKj4gaW50ZXJmYWNlczsKLSAgICB2ZWN0b3I8Q2xhc3NFbGVtZW50Kj4gZWxlbWVudHM7Ci0KLSAgICBDbGFzcygpOwotICAgIHZpcnR1YWwgfkNsYXNzKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgR2F0aGVyVHlwZXMoc2V0PFR5cGUqPiogdHlwZXMpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgRG9jdW1lbnQKLXsKLSAgICBzdHJpbmcgY29tbWVudDsKLSAgICBzdHJpbmcgcGFja2FnZTsKLSAgICBzdHJpbmcgb3JpZ2luYWxTcmM7Ci0gICAgc2V0PFR5cGUqPiBpbXBvcnRzOwotICAgIHZlY3RvcjxDbGFzcyo+IGNsYXNzZXM7Ci0KLSAgICBEb2N1bWVudCgpOwotICAgIHZpcnR1YWwgfkRvY3VtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotI2VuZGlmIC8vIEFJRExfQVNUX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvQW5kcm9pZC5tayBiL3Rvb2xzL2FpZGwvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdkNDZhYi4uMDAwMDAwMAotLS0gYS90b29scy9haWRsL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgQ29waWVzIGZpbGVzIGludG8gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZGVzY3JpYmVkIGJ5IGEgbWFuaWZlc3QKLQotIyBUaGlzIHRvb2wgaXMgcHJlYnVpbHQgaWYgd2UncmUgZG9pbmcgYW4gYXBwLW9ubHkgYnVpbGQuCi1pZmVxICgkKFRBUkdFVF9CVUlMRF9BUFBTKSwpCi0KLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX1NSQ19GSUxFUyA6PSBcCi0JYWlkbF9sYW5ndWFnZV9sLmwgXAotCWFpZGxfbGFuZ3VhZ2VfeS55IFwKLQlhaWRsLmNwcCBcCi0JYWlkbF9sYW5ndWFnZS5jcHAgXAotCW9wdGlvbnMuY3BwIFwKLQlzZWFyY2hfcGF0aC5jcHAgXAotCUFTVC5jcHAgXAotCVR5cGUuY3BwIFwKLQlnZW5lcmF0ZV9qYXZhLmNwcCBcCi0JZ2VuZXJhdGVfamF2YV9iaW5kZXIuY3BwIFwKLQlnZW5lcmF0ZV9qYXZhX3JwYy5jcHAKLQotTE9DQUxfQ0ZMQUdTIDo9IC1nCi1MT0NBTF9NT0RVTEUgOj0gYWlkbAotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9FWEVDVVRBQkxFKQotCi1lbmRpZiAjIFRBUkdFVF9CVUlMRF9BUFBTCmRpZmYgLS1naXQgYS90b29scy9haWRsL05PVElDRSBiL3Rvb2xzL2FpZGwvTk9USUNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWIxZWZhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLQotICAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0KLSAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0Ci0gICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCi0KLSAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgotCi0gICAxLiBEZWZpbml0aW9ucy4KLQotICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKLSAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgotCi0gICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQotICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCi0gICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCi0gICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAotICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCi0gICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgotICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCi0gICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgotCi0gICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgotCi0gICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKLSAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KLSAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0KLSAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCi0gICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0Ci0gICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCi0gICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCi0KLSAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCi0gICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCi0gICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKLSAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCi0KLSAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKLSAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKLSAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKLSAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCi0gICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KLSAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKLSAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCi0KLSAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCi0gICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCi0gICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKLSAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKLSAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgotICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCi0gICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50Ci0gICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bwotICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKLSAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCi0gICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKLSAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCi0gICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKLQotICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAotICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCi0KLSAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAotICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCi0gICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgotCi0gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKLSAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAotICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKLSAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCi0gICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCi0gICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQotICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKLSAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKLSAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0Ci0gICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCi0gICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKLSAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KLQotICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKLSAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAotICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKLSAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi0gICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgotICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCi0KLSAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKLSAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKLQotICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCi0gICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAotICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCi0gICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgotICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKLQotICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCi0gICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAotICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAotICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAotICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQotICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCi0gICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgotICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAotICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKLSAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKLSAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCi0gICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KLSAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQotICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAotICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAotICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KLQotICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCi0gICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCi0gICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKLSAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAotICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KLQotICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAotICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCi0gICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCi0gICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5Ci0gICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAotICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgotCi0gICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCi0gICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCi0gICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKLSAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgotCi0gICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKLSAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKLSAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwotICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQotICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCi0gICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKLSAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KLQotICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCi0gICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKLSAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5Ci0gICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQotICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAotICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCi0gICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCi0gICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCi0gICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAotICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgotICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgotCi0gICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCi0gICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAotICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKLSAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCi0gICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQotICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKLSAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKLSAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQotICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgotICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCi0KLSAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwotCmRpZmYgLS1naXQgYS90b29scy9haWRsL1R5cGUuY3BwIGIvdG9vbHMvYWlkbC9UeXBlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU3MmFmNi4uMDAwMDAwMAotLS0gYS90b29scy9haWRsL1R5cGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0MCArMCwwIEBACi0jaW5jbHVkZSAiVHlwZS5oIgotCi1OYW1lc3BhY2UgTkFNRVM7Ci0KLVR5cGUqIFZPSURfVFlQRTsKLVR5cGUqIEJPT0xFQU5fVFlQRTsKLVR5cGUqIEJZVEVfVFlQRTsKLVR5cGUqIENIQVJfVFlQRTsKLVR5cGUqIElOVF9UWVBFOwotVHlwZSogTE9OR19UWVBFOwotVHlwZSogRkxPQVRfVFlQRTsKLVR5cGUqIERPVUJMRV9UWVBFOwotVHlwZSogU1RSSU5HX1RZUEU7Ci1UeXBlKiBPQkpFQ1RfVFlQRTsKLVR5cGUqIENIQVJfU0VRVUVOQ0VfVFlQRTsKLVR5cGUqIFRFWFRfVVRJTFNfVFlQRTsKLVR5cGUqIFJFTU9URV9FWENFUFRJT05fVFlQRTsKLVR5cGUqIFJVTlRJTUVfRVhDRVBUSU9OX1RZUEU7Ci1UeXBlKiBJQklOREVSX1RZUEU7Ci1UeXBlKiBJSU5URVJGQUNFX1RZUEU7Ci1UeXBlKiBCSU5ERVJfTkFUSVZFX1RZUEU7Ci1UeXBlKiBCSU5ERVJfUFJPWFlfVFlQRTsKLVR5cGUqIFBBUkNFTF9UWVBFOwotVHlwZSogUEFSQ0VMQUJMRV9JTlRFUkZBQ0VfVFlQRTsKLVR5cGUqIENPTlRFWFRfVFlQRTsKLVR5cGUqIE1BUF9UWVBFOwotVHlwZSogTElTVF9UWVBFOwotVHlwZSogQ0xBU1NMT0FERVJfVFlQRTsKLVR5cGUqIFJQQ19EQVRBX1RZUEU7Ci1UeXBlKiBSUENfRVJST1JfVFlQRTsKLVR5cGUqIEVWRU5UX0ZBS0VfVFlQRTsKLQotRXhwcmVzc2lvbiogTlVMTF9WQUxVRTsKLUV4cHJlc3Npb24qIFRISVNfVkFMVUU7Ci1FeHByZXNzaW9uKiBTVVBFUl9WQUxVRTsKLUV4cHJlc3Npb24qIFRSVUVfVkFMVUU7Ci1FeHByZXNzaW9uKiBGQUxTRV9WQUxVRTsKLQotdm9pZAotcmVnaXN0ZXJfYmFzZV90eXBlcygpCi17Ci0gICAgVk9JRF9UWVBFID0gbmV3IEJhc2ljVHlwZSgidm9pZCIsCi0gICAgICAgICAgICAiWFhYIiwgIlhYWCIsICJYWFgiLCAiWFhYIiwgIlhYWCIsCi0gICAgICAgICAgICAiWFhYIiwgIlhYWCIsICJYWFgiLCAiWFhYIiwgIlhYWCIpOwotICAgIE5BTUVTLkFkZChWT0lEX1RZUEUpOwotCi0gICAgQk9PTEVBTl9UWVBFID0gbmV3IEJvb2xlYW5UeXBlKCk7Ci0gICAgTkFNRVMuQWRkKEJPT0xFQU5fVFlQRSk7Ci0KLSAgICBCWVRFX1RZUEUgPSBuZXcgQmFzaWNUeXBlKCJieXRlIiwKLSAgICAgICAgICAgICJ3cml0ZUJ5dGUiLCAicmVhZEJ5dGUiLCAid3JpdGVCeXRlQXJyYXkiLCAiY3JlYXRlQnl0ZUFycmF5IiwgInJlYWRCeXRlQXJyYXkiLAotICAgICAgICAgICAgInB1dEJ5dGUiLCAiZ2V0Qnl0ZSIsICJwdXRCeXRlQXJyYXkiLCAiY3JlYXRlQnl0ZUFycmF5IiwgImdldEJ5dGVBcnJheSIpOwotICAgIE5BTUVTLkFkZChCWVRFX1RZUEUpOwotCi0gICAgQ0hBUl9UWVBFID0gbmV3IENoYXJUeXBlKCk7Ci0gICAgTkFNRVMuQWRkKENIQVJfVFlQRSk7Ci0KLSAgICBJTlRfVFlQRSA9IG5ldyBCYXNpY1R5cGUoImludCIsCi0gICAgICAgICAgICAid3JpdGVJbnQiLCAicmVhZEludCIsICJ3cml0ZUludEFycmF5IiwgImNyZWF0ZUludEFycmF5IiwgInJlYWRJbnRBcnJheSIsCi0gICAgICAgICAgICAicHV0SW50ZWdlciIsICJnZXRJbnRlZ2VyIiwgInB1dEludGVnZXJBcnJheSIsICJjcmVhdGVJbnRlZ2VyQXJyYXkiLCAiZ2V0SW50ZWdlckFycmF5Iik7Ci0gICAgTkFNRVMuQWRkKElOVF9UWVBFKTsKLQotICAgIExPTkdfVFlQRSA9IG5ldyBCYXNpY1R5cGUoImxvbmciLAotICAgICAgICAgICAgIndyaXRlTG9uZyIsICJyZWFkTG9uZyIsICJ3cml0ZUxvbmdBcnJheSIsICJjcmVhdGVMb25nQXJyYXkiLCAicmVhZExvbmdBcnJheSIsCi0gICAgICAgICAgICAicHV0TG9uZyIsICJnZXRMb25nIiwgInB1dExvbmdBcnJheSIsICJjcmVhdGVMb25nQXJyYXkiLCAiZ2V0TG9uZ0FycmF5Iik7Ci0gICAgTkFNRVMuQWRkKExPTkdfVFlQRSk7Ci0KLSAgICBGTE9BVF9UWVBFID0gbmV3IEJhc2ljVHlwZSgiZmxvYXQiLAotICAgICAgICAgICAgIndyaXRlRmxvYXQiLCAicmVhZEZsb2F0IiwgIndyaXRlRmxvYXRBcnJheSIsICJjcmVhdGVGbG9hdEFycmF5IiwgInJlYWRGbG9hdEFycmF5IiwKLSAgICAgICAgICAgICJwdXRGbG9hdCIsICJnZXRGbG9hdCIsICJwdXRGbG9hdEFycmF5IiwgImNyZWF0ZUZsb2F0QXJyYXkiLCAiZ2V0RmxvYXRBcnJheSIpOwotICAgIE5BTUVTLkFkZChGTE9BVF9UWVBFKTsKLQotICAgIERPVUJMRV9UWVBFID0gbmV3IEJhc2ljVHlwZSgiZG91YmxlIiwKLSAgICAgICAgICAgICJ3cml0ZURvdWJsZSIsICJyZWFkRG91YmxlIiwgIndyaXRlRG91YmxlQXJyYXkiLCAiY3JlYXRlRG91YmxlQXJyYXkiLCAicmVhZERvdWJsZUFycmF5IiwKLSAgICAgICAgICAgICJwdXREb3VibGUiLCAiZ2V0RG91YmxlIiwgInB1dERvdWJsZUFycmF5IiwgImNyZWF0ZURvdWJsZUFycmF5IiwgImdldERvdWJsZUFycmF5Iik7Ci0gICAgTkFNRVMuQWRkKERPVUJMRV9UWVBFKTsKLQotICAgIFNUUklOR19UWVBFID0gbmV3IFN0cmluZ1R5cGUoKTsKLSAgICBOQU1FUy5BZGQoU1RSSU5HX1RZUEUpOwotCi0gICAgT0JKRUNUX1RZUEUgPSBuZXcgVHlwZSgiamF2YS5sYW5nIiwgIk9iamVjdCIsIFR5cGU6OkJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgICBOQU1FUy5BZGQoT0JKRUNUX1RZUEUpOwotCi0gICAgQ0hBUl9TRVFVRU5DRV9UWVBFID0gbmV3IENoYXJTZXF1ZW5jZVR5cGUoKTsKLSAgICBOQU1FUy5BZGQoQ0hBUl9TRVFVRU5DRV9UWVBFKTsKLQotICAgIE1BUF9UWVBFID0gbmV3IE1hcFR5cGUoKTsKLSAgICBOQU1FUy5BZGQoTUFQX1RZUEUpOwotCi0gICAgTElTVF9UWVBFID0gbmV3IExpc3RUeXBlKCk7Ci0gICAgTkFNRVMuQWRkKExJU1RfVFlQRSk7Ci0KLSAgICBURVhUX1VUSUxTX1RZUEUgPSBuZXcgVHlwZSgiYW5kcm9pZC50ZXh0IiwgIlRleHRVdGlscyIsIFR5cGU6OkJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgICBOQU1FUy5BZGQoVEVYVF9VVElMU19UWVBFKTsKLQotICAgIFJFTU9URV9FWENFUFRJT05fVFlQRSA9IG5ldyBSZW1vdGVFeGNlcHRpb25UeXBlKCk7Ci0gICAgTkFNRVMuQWRkKFJFTU9URV9FWENFUFRJT05fVFlQRSk7Ci0KLSAgICBSVU5USU1FX0VYQ0VQVElPTl9UWVBFID0gbmV3IFJ1bnRpbWVFeGNlcHRpb25UeXBlKCk7Ci0gICAgTkFNRVMuQWRkKFJVTlRJTUVfRVhDRVBUSU9OX1RZUEUpOwotCi0gICAgSUJJTkRFUl9UWVBFID0gbmV3IElCaW5kZXJUeXBlKCk7Ci0gICAgTkFNRVMuQWRkKElCSU5ERVJfVFlQRSk7Ci0KLSAgICBJSU5URVJGQUNFX1RZUEUgPSBuZXcgSUludGVyZmFjZVR5cGUoKTsKLSAgICBOQU1FUy5BZGQoSUlOVEVSRkFDRV9UWVBFKTsKLQotICAgIEJJTkRFUl9OQVRJVkVfVFlQRSA9IG5ldyBCaW5kZXJUeXBlKCk7Ci0gICAgTkFNRVMuQWRkKEJJTkRFUl9OQVRJVkVfVFlQRSk7Ci0KLSAgICBCSU5ERVJfUFJPWFlfVFlQRSA9IG5ldyBCaW5kZXJQcm94eVR5cGUoKTsKLSAgICBOQU1FUy5BZGQoQklOREVSX1BST1hZX1RZUEUpOwotCi0gICAgUEFSQ0VMX1RZUEUgPSBuZXcgUGFyY2VsVHlwZSgpOwotICAgIE5BTUVTLkFkZChQQVJDRUxfVFlQRSk7Ci0KLSAgICBQQVJDRUxBQkxFX0lOVEVSRkFDRV9UWVBFID0gbmV3IFBhcmNlbGFibGVJbnRlcmZhY2VUeXBlKCk7Ci0gICAgTkFNRVMuQWRkKFBBUkNFTEFCTEVfSU5URVJGQUNFX1RZUEUpOwotCi0gICAgQ09OVEVYVF9UWVBFID0gbmV3IFR5cGUoImFuZHJvaWQuY29udGVudCIsICJDb250ZXh0IiwgVHlwZTo6QlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICAgIE5BTUVTLkFkZChDT05URVhUX1RZUEUpOwotCi0gICAgUlBDX0RBVEFfVFlQRSA9IG5ldyBScGNEYXRhVHlwZSgpOwotICAgIE5BTUVTLkFkZChSUENfREFUQV9UWVBFKTsKLQotICAgIFJQQ19FUlJPUl9UWVBFID0gbmV3IFVzZXJEYXRhVHlwZSgiYW5kcm9pZC5zdXBwb3J0LnBsYWNlLnJwYyIsICJScGNFcnJvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgIE5BTUVTLkFkZChSUENfRVJST1JfVFlQRSk7Ci0KLSAgICBFVkVOVF9GQUtFX1RZUEUgPSBuZXcgVHlwZSgiZXZlbnQiLCBUeXBlOjpCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gICAgTkFNRVMuQWRkKEVWRU5UX0ZBS0VfVFlQRSk7Ci0KLSAgICBDTEFTU0xPQURFUl9UWVBFID0gbmV3IENsYXNzTG9hZGVyVHlwZSgpOwotICAgIE5BTUVTLkFkZChDTEFTU0xPQURFUl9UWVBFKTsKLQotICAgIE5VTExfVkFMVUUgPSBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIm51bGwiKTsKLSAgICBUSElTX1ZBTFVFID0gbmV3IExpdGVyYWxFeHByZXNzaW9uKCJ0aGlzIik7Ci0gICAgU1VQRVJfVkFMVUUgPSBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oInN1cGVyIik7Ci0gICAgVFJVRV9WQUxVRSA9IG5ldyBMaXRlcmFsRXhwcmVzc2lvbigidHJ1ZSIpOwotICAgIEZBTFNFX1ZBTFVFID0gbmV3IExpdGVyYWxFeHByZXNzaW9uKCJmYWxzZSIpOwotCi0gICAgTkFNRVMuQWRkR2VuZXJpY1R5cGUoImphdmEudXRpbCIsICJMaXN0IiwgMSk7Ci0gICAgTkFNRVMuQWRkR2VuZXJpY1R5cGUoImphdmEudXRpbCIsICJNYXAiLCAyKTsKLX0KLQotc3RhdGljIFR5cGUqCi1tYWtlX2dlbmVyaWNfdHlwZShjb25zdCBzdHJpbmcmIHBhY2thZ2UsIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yPFR5cGUqPiYgYXJncykKLXsKLSAgICBpZiAocGFja2FnZSA9PSAiamF2YS51dGlsIiAmJiBuYW1lID09ICJMaXN0IikgewotICAgICAgICByZXR1cm4gbmV3IEdlbmVyaWNMaXN0VHlwZSgiamF2YS51dGlsIiwgIkxpc3QiLCBhcmdzKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci0gICAgLy9yZXR1cm4gbmV3IEdlbmVyaWNUeXBlKHBhY2thZ2UsIG5hbWUsIGFyZ3MpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVR5cGU6OlR5cGUoY29uc3Qgc3RyaW5nJiBuYW1lLCBpbnQga2luZCwgYm9vbCBjYW5Xcml0ZVRvUGFyY2VsLCBib29sIGNhbldyaXRlVG9ScGNEYXRhLAotICAgICAgICBib29sIGNhbkJlT3V0KQotICAgIDptX3BhY2thZ2UoKSwKLSAgICAgbV9uYW1lKG5hbWUpLAotICAgICBtX2RlY2xGaWxlKCIiKSwKLSAgICAgbV9kZWNsTGluZSgtMSksCi0gICAgIG1fa2luZChraW5kKSwKLSAgICAgbV9jYW5Xcml0ZVRvUGFyY2VsKGNhbldyaXRlVG9QYXJjZWwpLAotICAgICBtX2NhbldyaXRlVG9ScGNEYXRhKGNhbldyaXRlVG9ScGNEYXRhKSwKLSAgICAgbV9jYW5CZU91dChjYW5CZU91dCkKLXsKLSAgICBtX3F1YWxpZmllZE5hbWUgPSBuYW1lOwotfQotCi1UeXBlOjpUeXBlKGNvbnN0IHN0cmluZyYgcGFja2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgaW50IGtpbmQsIGJvb2wgY2FuV3JpdGVUb1BhcmNlbCwgYm9vbCBjYW5Xcml0ZVRvUnBjRGF0YSwKLSAgICAgICAgICAgIGJvb2wgY2FuQmVPdXQsIGNvbnN0IHN0cmluZyYgZGVjbEZpbGUsIGludCBkZWNsTGluZSkKLSAgICA6bV9wYWNrYWdlKHBhY2thZ2UpLAotICAgICBtX25hbWUobmFtZSksCi0gICAgIG1fZGVjbEZpbGUoZGVjbEZpbGUpLAotICAgICBtX2RlY2xMaW5lKGRlY2xMaW5lKSwKLSAgICAgbV9raW5kKGtpbmQpLAotICAgICBtX2NhbldyaXRlVG9QYXJjZWwoY2FuV3JpdGVUb1BhcmNlbCksCi0gICAgIG1fY2FuV3JpdGVUb1JwY0RhdGEoY2FuV3JpdGVUb1JwY0RhdGEpLAotICAgICBtX2NhbkJlT3V0KGNhbkJlT3V0KQotewotICAgIGlmIChwYWNrYWdlLmxlbmd0aCgpID4gMCkgewotICAgICAgICBtX3F1YWxpZmllZE5hbWUgPSBwYWNrYWdlOwotICAgICAgICBtX3F1YWxpZmllZE5hbWUgKz0gJy4nOwotICAgIH0KLSAgICBtX3F1YWxpZmllZE5hbWUgKz0gbmFtZTsKLX0KLQotVHlwZTo6flR5cGUoKQotewotfQotCi1ib29sCi1UeXBlOjpDYW5CZUFycmF5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0cmluZwotVHlwZTo6SW1wb3J0VHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcXVhbGlmaWVkTmFtZTsKLX0KLQotc3RyaW5nCi1UeXBlOjpDcmVhdG9yTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICIiOwotfQotCi1zdHJpbmcKLVR5cGU6OlJwY0NyZWF0b3JOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIiI7Ci19Ci0KLXN0cmluZwotVHlwZTo6SW5zdGFudGlhYmxlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFF1YWxpZmllZE5hbWUoKTsKLX0KLQotCi12b2lkCi1UeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWQgcXVhbGlmaWVkTmFtZT0lc24iLAotICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBtX3F1YWxpZmllZE5hbWUuY19zdHIoKSk7Ci0gICAgYWRkVG8tPkFkZChuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIi8qIFdyaXRlVG9QYXJjZWwgZXJyb3IgIgotICAgICAgICAgICAgICAgICsgbV9xdWFsaWZpZWROYW1lICsgIiAqLyIpKTsKLX0KLQotdm9pZAotVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZCBxdWFsaWZpZWROYW1lPSVzXG4iLAotICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBtX3F1YWxpZmllZE5hbWUuY19zdHIoKSk7Ci0gICAgYWRkVG8tPkFkZChuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIi8qIENyZWF0ZUZyb21QYXJjZWwgZXJyb3IgIgotICAgICAgICAgICAgICAgICsgbV9xdWFsaWZpZWROYW1lICsgIiAqLyIpKTsKLX0KLQotdm9pZAotVHlwZTo6UmVhZEZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWQgcXVhbGlmaWVkTmFtZT0lc1xuIiwKLSAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgbV9xdWFsaWZpZWROYW1lLmNfc3RyKCkpOwotICAgIGFkZFRvLT5BZGQobmV3IExpdGVyYWxFeHByZXNzaW9uKCIvKiBSZWFkRnJvbVBhcmNlbCBlcnJvciAiCi0gICAgICAgICAgICAgICAgKyBtX3F1YWxpZmllZE5hbWUgKyAiICovIikpOwotfQotCi12b2lkCi1UeXBlOjpXcml0ZUFycmF5VG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZCBxdWFsaWZpZWROYW1lPSVzXG4iLAotICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBtX3F1YWxpZmllZE5hbWUuY19zdHIoKSk7Ci0gICAgYWRkVG8tPkFkZChuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIi8qIFdyaXRlQXJyYXlUb1BhcmNlbCBlcnJvciAiCi0gICAgICAgICAgICAgICAgKyBtX3F1YWxpZmllZE5hbWUgKyAiICovIikpOwotfQotCi12b2lkCi1UeXBlOjpDcmVhdGVBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZCBxdWFsaWZpZWROYW1lPSVzXG4iLAotICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBtX3F1YWxpZmllZE5hbWUuY19zdHIoKSk7Ci0gICAgYWRkVG8tPkFkZChuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIi8qIENyZWF0ZUFycmF5RnJvbVBhcmNlbCBlcnJvciAiCi0gICAgICAgICAgICAgICAgKyBtX3F1YWxpZmllZE5hbWUgKyAiICovIikpOwotfQotCi12b2lkCi1UeXBlOjpSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkIHF1YWxpZmllZE5hbWU9JXNcbiIsCi0gICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIG1fcXVhbGlmaWVkTmFtZS5jX3N0cigpKTsKLSAgICBhZGRUby0+QWRkKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiLyogUmVhZEFycmF5RnJvbVBhcmNlbCBlcnJvciAiCi0gICAgICAgICAgICAgICAgKyBtX3F1YWxpZmllZE5hbWUgKyAiICovIikpOwotfQotCi12b2lkCi1UeXBlOjpXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZCBxdWFsaWZpZWROYW1lPSVzXG4iLAotICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBtX3F1YWxpZmllZE5hbWUuY19zdHIoKSk7Ci0gICAgYWRkVG8tPkFkZChuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIi8qIFdyaXRlVG9ScGNEYXRhIGVycm9yICIKLSAgICAgICAgICAgICAgICArIG1fcXVhbGlmaWVkTmFtZSArICIgKi8iKSk7Ci19Ci0KLXZvaWQKLVR5cGU6OkNyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBkYXRhLAotICAgICAgICBWYXJpYWJsZSoqIGNsKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZCBxdWFsaWZpZWROYW1lPSVzXG4iLAotICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBtX3F1YWxpZmllZE5hbWUuY19zdHIoKSk7Ci0gICAgYWRkVG8tPkFkZChuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIi8qIFJlYWRGcm9tUnBjRGF0YSBlcnJvciAiCi0gICAgICAgICAgICAgICAgKyBtX3F1YWxpZmllZE5hbWUgKyAiICovIikpOwotfQotCi12b2lkCi1UeXBlOjpTZXRRdWFsaWZpZWROYW1lKGNvbnN0IHN0cmluZyYgcXVhbGlmaWVkKQotewotICAgIG1fcXVhbGlmaWVkTmFtZSA9IHF1YWxpZmllZDsKLX0KLQotRXhwcmVzc2lvbioKLVR5cGU6OkJ1aWxkV3JpdGVUb1BhcmNlbEZsYWdzKGludCBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgPT0gMCkgewotICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxFeHByZXNzaW9uKCIwIik7Ci0gICAgfQotICAgIGlmICgoZmxhZ3MmUEFSQ0VMQUJMRV9XUklURV9SRVRVUk5fVkFMVUUpICE9IDApIHsKLSAgICAgICAgcmV0dXJuIG5ldyBGaWVsZFZhcmlhYmxlKFBBUkNFTEFCTEVfSU5URVJGQUNFX1RZUEUsCi0gICAgICAgICAgICAgICAgIlBBUkNFTEFCTEVfV1JJVEVfUkVUVVJOX1ZBTFVFIik7Ci0gICAgfQotICAgIHJldHVybiBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIjAiKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1CYXNpY1R5cGU6OkJhc2ljVHlwZShjb25zdCBzdHJpbmcmIG5hbWUsIGNvbnN0IHN0cmluZyYgbWFyc2hhbGxQYXJjZWwsCi0gICAgICAgICAgY29uc3Qgc3RyaW5nJiB1bm1hcnNoYWxsUGFyY2VsLCBjb25zdCBzdHJpbmcmIHdyaXRlQXJyYXlQYXJjZWwsCi0gICAgICAgICAgY29uc3Qgc3RyaW5nJiBjcmVhdGVBcnJheVBhcmNlbCwgY29uc3Qgc3RyaW5nJiByZWFkQXJyYXlQYXJjZWwsCi0gICAgICAgICAgY29uc3Qgc3RyaW5nJiBtYXJzaGFsbFJwYywgY29uc3Qgc3RyaW5nJiB1bm1hcnNoYWxsUnBjLAotICAgICAgICAgIGNvbnN0IHN0cmluZyYgd3JpdGVBcnJheVJwYywgY29uc3Qgc3RyaW5nJiBjcmVhdGVBcnJheVJwYywgY29uc3Qgc3RyaW5nJiByZWFkQXJyYXlScGMpCi0gICAgOlR5cGUobmFtZSwgQlVJTFRfSU4sIHRydWUsIHRydWUsIGZhbHNlKSwKLSAgICAgbV9tYXJzaGFsbFBhcmNlbChtYXJzaGFsbFBhcmNlbCksCi0gICAgIG1fdW5tYXJzaGFsbFBhcmNlbCh1bm1hcnNoYWxsUGFyY2VsKSwKLSAgICAgbV93cml0ZUFycmF5UGFyY2VsKHdyaXRlQXJyYXlQYXJjZWwpLAotICAgICBtX2NyZWF0ZUFycmF5UGFyY2VsKGNyZWF0ZUFycmF5UGFyY2VsKSwKLSAgICAgbV9yZWFkQXJyYXlQYXJjZWwocmVhZEFycmF5UGFyY2VsKSwKLSAgICAgbV9tYXJzaGFsbFJwYyhtYXJzaGFsbFJwYyksCi0gICAgIG1fdW5tYXJzaGFsbFJwYyh1bm1hcnNoYWxsUnBjKSwKLSAgICAgbV93cml0ZUFycmF5UnBjKHdyaXRlQXJyYXlScGMpLAotICAgICBtX2NyZWF0ZUFycmF5UnBjKGNyZWF0ZUFycmF5UnBjKSwKLSAgICAgbV9yZWFkQXJyYXlScGMocmVhZEFycmF5UnBjKQotewotfQotCi12b2lkCi1CYXNpY1R5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCBtX21hcnNoYWxsUGFyY2VsLCAxLCB2KSk7Ci19Ci0KLXZvaWQKLUJhc2ljVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwocGFyY2VsLCBtX3VubWFyc2hhbGxQYXJjZWwpKSk7Ci19Ci0KLWJvb2wKLUJhc2ljVHlwZTo6Q2FuQmVBcnJheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQKLUJhc2ljVHlwZTo6V3JpdGVBcnJheVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgbV93cml0ZUFycmF5UGFyY2VsLCAxLCB2KSk7Ci19Ci0KLXZvaWQKLUJhc2ljVHlwZTo6Q3JlYXRlQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgbV9jcmVhdGVBcnJheVBhcmNlbCkpKTsKLX0KLQotdm9pZAotQmFzaWNUeXBlOjpSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsIG1fcmVhZEFycmF5UGFyY2VsLCAxLCB2KSk7Ci19Ci0KLXZvaWQKLUJhc2ljVHlwZTo6V3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKGRhdGEsIG1fbWFyc2hhbGxScGMsIDIsIGssIHYpKTsKLX0KLQotdm9pZAotQmFzaWNUeXBlOjpDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogZGF0YSwKLSAgICAgICAgVmFyaWFibGUqKiBjbCkKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKGRhdGEsIG1fdW5tYXJzaGFsbFJwYywgMSwgaykpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1Cb29sZWFuVHlwZTo6Qm9vbGVhblR5cGUoKQotICAgIDpUeXBlKCJib29sZWFuIiwgQlVJTFRfSU4sIHRydWUsIHRydWUsIGZhbHNlKQotewotfQotCi12b2lkCi1Cb29sZWFuVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZUludCIsIDEsIAotICAgICAgICAgICAgICAgIG5ldyBUZXJuYXJ5KHYsIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMSIpLAotICAgICAgICAgICAgICAgICAgICBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIjAiKSkpKTsKLX0KLQotdm9pZAotQm9vbGVhblR5cGU6OkNyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBDb21wYXJpc29uKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMCIpLAotICAgICAgICAgICAgICAgICAgICAiIT0iLCBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkSW50IikpKSk7Ci19Ci0KLWJvb2wKLUJvb2xlYW5UeXBlOjpDYW5CZUFycmF5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZAotQm9vbGVhblR5cGU6OldyaXRlQXJyYXlUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZUJvb2xlYW5BcnJheSIsIDEsIHYpKTsKLX0KLQotdm9pZAotQm9vbGVhblR5cGU6OkNyZWF0ZUFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJjcmVhdGVCb29sZWFuQXJyYXkiKSkpOwotfQotCi12b2lkCi1Cb29sZWFuVHlwZTo6UmVhZEFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZEJvb2xlYW5BcnJheSIsIDEsIHYpKTsKLX0KLQotdm9pZAotQm9vbGVhblR5cGU6OldyaXRlVG9ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChkYXRhLCAicHV0Qm9vbGVhbiIsIDIsIGssIHYpKTsKLX0KLQotdm9pZAotQm9vbGVhblR5cGU6OkNyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBkYXRhLAotICAgICAgICBWYXJpYWJsZSoqIGNsKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwoZGF0YSwgImdldEJvb2xlYW4iLCAxLCBrKSkpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUNoYXJUeXBlOjpDaGFyVHlwZSgpCi0gICAgOlR5cGUoImNoYXIiLCBCVUlMVF9JTiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpCi17Ci19Ci0KLXZvaWQKLUNoYXJUeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlSW50IiwgMSwgCi0gICAgICAgICAgICAgICAgICAgIG5ldyBDYXN0KElOVF9UWVBFLCB2KSkpOwotfQotCi12b2lkCi1DaGFyVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZEludCIpLCB0aGlzKSk7Ci19Ci0KLWJvb2wKLUNoYXJUeXBlOjpDYW5CZUFycmF5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZAotQ2hhclR5cGU6OldyaXRlQXJyYXlUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZUNoYXJBcnJheSIsIDEsIHYpKTsKLX0KLQotdm9pZAotQ2hhclR5cGU6OkNyZWF0ZUFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJjcmVhdGVDaGFyQXJyYXkiKSkpOwotfQotCi12b2lkCi1DaGFyVHlwZTo6UmVhZEFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZENoYXJBcnJheSIsIDEsIHYpKTsKLX0KLQotdm9pZAotQ2hhclR5cGU6OldyaXRlVG9ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChkYXRhLCAicHV0Q2hhciIsIDIsIGssIHYpKTsKLX0KLQotdm9pZAotQ2hhclR5cGU6OkNyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBkYXRhLAotICAgICAgICBWYXJpYWJsZSoqIGNsKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwoZGF0YSwgImdldENoYXIiLCAxLCBrKSkpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVN0cmluZ1R5cGU6OlN0cmluZ1R5cGUoKQotICAgIDpUeXBlKCJqYXZhLmxhbmciLCAiU3RyaW5nIiwgQlVJTFRfSU4sIHRydWUsIHRydWUsIGZhbHNlKQotewotfQotCi1zdHJpbmcKLVN0cmluZ1R5cGU6OkNyZWF0b3JOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gImFuZHJvaWQub3MuUGFyY2VsLlNUUklOR19DUkVBVE9SIjsKLX0KLQotdm9pZAotU3RyaW5nVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZVN0cmluZyIsIDEsIHYpKTsKLX0KLQotdm9pZAotU3RyaW5nVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZFN0cmluZyIpKSk7Ci19Ci0KLWJvb2wKLVN0cmluZ1R5cGU6OkNhbkJlQXJyYXkoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkCi1TdHJpbmdUeXBlOjpXcml0ZUFycmF5VG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAid3JpdGVTdHJpbmdBcnJheSIsIDEsIHYpKTsKLX0KLQotdm9pZAotU3RyaW5nVHlwZTo6Q3JlYXRlQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgImNyZWF0ZVN0cmluZ0FycmF5IikpKTsKLX0KLQotdm9pZAotU3RyaW5nVHlwZTo6UmVhZEFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZFN0cmluZ0FycmF5IiwgMSwgdikpOwotfQotCi12b2lkCi1TdHJpbmdUeXBlOjpXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwoZGF0YSwgInB1dFN0cmluZyIsIDIsIGssIHYpKTsKLX0KLQotdm9pZAotU3RyaW5nVHlwZTo6Q3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgVmFyaWFibGUqIGRhdGEsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChkYXRhLCAiZ2V0U3RyaW5nIiwgMSwgaykpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1DaGFyU2VxdWVuY2VUeXBlOjpDaGFyU2VxdWVuY2VUeXBlKCkKLSAgICA6VHlwZSgiamF2YS5sYW5nIiwgIkNoYXJTZXF1ZW5jZSIsIEJVSUxUX0lOLCB0cnVlLCB0cnVlLCBmYWxzZSkKLXsKLX0KLQotc3RyaW5nCi1DaGFyU2VxdWVuY2VUeXBlOjpDcmVhdG9yTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJhbmRyb2lkLm9zLlBhcmNlbC5TVFJJTkdfQ1JFQVRPUiI7Ci19Ci0KLXZvaWQKLUNoYXJTZXF1ZW5jZVR5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIC8vIGlmICh2ICE9IG51bGwpIHsKLSAgICAvLyAgICAgcGFyY2VsLndyaXRlSW50KDEpOwotICAgIC8vICAgICB2LndyaXRlVG9QYXJjZWwocGFyY2VsKTsKLSAgICAvLyB9IGVsc2UgewotICAgIC8vICAgICBwYXJjZWwud3JpdGVJbnQoMCk7Ci0gICAgLy8gfQotICAgIElmU3RhdGVtZW50KiBlbHNlcGFydCA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgIGVsc2VwYXJ0LT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAid3JpdGVJbnQiLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIjAiKSkpOwotICAgIElmU3RhdGVtZW50KiBpZnBhcnQgPSBuZXcgSWZTdGF0ZW1lbnQ7Ci0gICAgaWZwYXJ0LT5leHByZXNzaW9uID0gbmV3IENvbXBhcmlzb24odiwgIiE9IiwgTlVMTF9WQUxVRSk7Ci0gICAgaWZwYXJ0LT5lbHNlaWYgPSBlbHNlcGFydDsKLSAgICBpZnBhcnQtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZUludCIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMSIpKSk7Ci0gICAgaWZwYXJ0LT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwoVEVYVF9VVElMU19UWVBFLCAid3JpdGVUb1BhcmNlbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsIHYsIHBhcmNlbCwgQnVpbGRXcml0ZVRvUGFyY2VsRmxhZ3MoZmxhZ3MpKSk7Ci0KLSAgICBhZGRUby0+QWRkKGlmcGFydCk7Ci19Ci0KLXZvaWQKLUNoYXJTZXF1ZW5jZVR5cGU6OkNyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICAvLyBpZiAoMCAhPSBwYXJjZWwucmVhZEludCgpKSB7Ci0gICAgLy8gICAgIHYgPSBUZXh0VXRpbHMuY3JlYXRlRnJvbVBhcmNlbChwYXJjZWwpCi0gICAgLy8gfSBlbHNlIHsKLSAgICAvLyAgICAgdiA9IG51bGw7Ci0gICAgLy8gfQotICAgIElmU3RhdGVtZW50KiBlbHNlcGFydCA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgIGVsc2VwYXJ0LT5zdGF0ZW1lbnRzLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgTlVMTF9WQUxVRSkpOwotCi0gICAgSWZTdGF0ZW1lbnQqIGlmcGFydCA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgIGlmcGFydC0+ZXhwcmVzc2lvbiA9IG5ldyBDb21wYXJpc29uKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMCIpLCAiIT0iLAotICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRJbnQiKSk7Ci0gICAgaWZwYXJ0LT5lbHNlaWYgPSBlbHNlcGFydDsKLSAgICBpZnBhcnQtPnN0YXRlbWVudHMtPkFkZChuZXcgQXNzaWdubWVudCh2LAotICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKFRFWFRfVVRJTFNfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDSEFSX1NFUVVFTkNFX0NSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbCIsIDEsIHBhcmNlbCkpKTsKLQotICAgIGFkZFRvLT5BZGQoaWZwYXJ0KTsKLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVJlbW90ZUV4Y2VwdGlvblR5cGU6OlJlbW90ZUV4Y2VwdGlvblR5cGUoKQotICAgIDpUeXBlKCJhbmRyb2lkLm9zIiwgIlJlbW90ZUV4Y2VwdGlvbiIsIEJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotewotfQotCi12b2lkCi1SZW1vdGVFeGNlcHRpb25UeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLXZvaWQKLVJlbW90ZUV4Y2VwdGlvblR5cGU6OkNyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUnVudGltZUV4Y2VwdGlvblR5cGU6OlJ1bnRpbWVFeGNlcHRpb25UeXBlKCkKLSAgICA6VHlwZSgiamF2YS5sYW5nIiwgIlJ1bnRpbWVFeGNlcHRpb24iLCBCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLXsKLX0KLQotdm9pZAotUnVudGltZUV4Y2VwdGlvblR5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLX0KLQotdm9pZAotUnVudGltZUV4Y2VwdGlvblR5cGU6OkNyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1JQmluZGVyVHlwZTo6SUJpbmRlclR5cGUoKQotICAgIDpUeXBlKCJhbmRyb2lkLm9zIiwgIklCaW5kZXIiLCBCVUlMVF9JTiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotewotfQotCi12b2lkCi1JQmluZGVyVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZVN0cm9uZ0JpbmRlciIsIDEsIHYpKTsKLX0KLQotdm9pZAotSUJpbmRlclR5cGU6OkNyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRTdHJvbmdCaW5kZXIiKSkpOwotfQotCi12b2lkCi1JQmluZGVyVHlwZTo6V3JpdGVBcnJheVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlQmluZGVyQXJyYXkiLCAxLCB2KSk7Ci19Ci0KLXZvaWQKLUlCaW5kZXJUeXBlOjpDcmVhdGVBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwocGFyY2VsLCAiY3JlYXRlQmluZGVyQXJyYXkiKSkpOwotfQotCi12b2lkCi1JQmluZGVyVHlwZTo6UmVhZEFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZEJpbmRlckFycmF5IiwgMSwgdikpOwotfQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSUludGVyZmFjZVR5cGU6OklJbnRlcmZhY2VUeXBlKCkKLSAgICA6VHlwZSgiYW5kcm9pZC5vcyIsICJJSW50ZXJmYWNlIiwgQlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi17Ci19Ci0KLXZvaWQKLUlJbnRlcmZhY2VUeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLXZvaWQKLUlJbnRlcmZhY2VUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotfQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQmluZGVyVHlwZTo6QmluZGVyVHlwZSgpCi0gICAgOlR5cGUoImFuZHJvaWQub3MiLCAiQmluZGVyIiwgQlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi17Ci19Ci0KLXZvaWQKLUJpbmRlclR5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLX0KLQotdm9pZAotQmluZGVyVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1CaW5kZXJQcm94eVR5cGU6OkJpbmRlclByb3h5VHlwZSgpCi0gICAgOlR5cGUoImFuZHJvaWQub3MiLCAiQmluZGVyUHJveHkiLCBCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLXsKLX0KLQotdm9pZAotQmluZGVyUHJveHlUeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLXZvaWQKLUJpbmRlclByb3h5VHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1QYXJjZWxUeXBlOjpQYXJjZWxUeXBlKCkKLSAgICA6VHlwZSgiYW5kcm9pZC5vcyIsICJQYXJjZWwiLCBCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLXsKLX0KLQotdm9pZAotUGFyY2VsVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotfQotCi12b2lkCi1QYXJjZWxUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVBhcmNlbGFibGVJbnRlcmZhY2VUeXBlOjpQYXJjZWxhYmxlSW50ZXJmYWNlVHlwZSgpCi0gICAgOlR5cGUoImFuZHJvaWQub3MiLCAiUGFyY2VsYWJsZSIsIEJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotewotfQotCi12b2lkCi1QYXJjZWxhYmxlSW50ZXJmYWNlVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotfQotCi12b2lkCi1QYXJjZWxhYmxlSW50ZXJmYWNlVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1NYXBUeXBlOjpNYXBUeXBlKCkKLSAgICA6VHlwZSgiamF2YS51dGlsIiwgIk1hcCIsIEJVSUxUX0lOLCB0cnVlLCBmYWxzZSwgdHJ1ZSkKLXsKLX0KLQotdm9pZAotTWFwVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZU1hcCIsIDEsIHYpKTsKLX0KLQotc3RhdGljIHZvaWQgRW5zdXJlQ2xhc3NMb2FkZXIoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSoqIGNsKQotewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbG9vayB1cCB0aGUgY2xhc3MgbG9hZGVyIG9uY2UgZm9yIGV2ZXJ5Ci0gICAgLy8gY29sbGVjdGlvbiBhcmd1bWVudCwgc28gZW5zdXJlIHdlIGRvIGl0IGF0IG1vc3Qgb25jZSBwZXIgbWV0aG9kLgotICAgIGlmICgqY2wgPT0gTlVMTCkgewotICAgICAgICAqY2wgPSBuZXcgVmFyaWFibGUoQ0xBU1NMT0FERVJfVFlQRSwgImNsIik7Ci0gICAgICAgIGFkZFRvLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oKmNsLAotICAgICAgICAgICAgICAgIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigidGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkiKSwKLSAgICAgICAgICAgICAgICBDTEFTU0xPQURFUl9UWVBFKSk7Ci0gICAgfQotfQotCi12b2lkCi1NYXBUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgRW5zdXJlQ2xhc3NMb2FkZXIoYWRkVG8sIGNsKTsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRIYXNoTWFwIiwgMSwgKmNsKSkpOwotfQotCi12b2lkCi1NYXBUeXBlOjpSZWFkRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKQotewotICAgIEVuc3VyZUNsYXNzTG9hZGVyKGFkZFRvLCBjbCk7Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkTWFwIiwgMiwgdiwgKmNsKSk7Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1MaXN0VHlwZTo6TGlzdFR5cGUoKQotICAgIDpUeXBlKCJqYXZhLnV0aWwiLCAiTGlzdCIsIEJVSUxUX0lOLCB0cnVlLCB0cnVlLCB0cnVlKQotewotfQotCi1zdHJpbmcKLUxpc3RUeXBlOjpJbnN0YW50aWFibGVOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gImphdmEudXRpbC5BcnJheUxpc3QiOwotfQotCi12b2lkCi1MaXN0VHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZUxpc3QiLCAxLCB2KSk7Ci19Ci0KLXZvaWQKLUxpc3RUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgRW5zdXJlQ2xhc3NMb2FkZXIoYWRkVG8sIGNsKTsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRBcnJheUxpc3QiLCAxLCAqY2wpKSk7Ci19Ci0KLXZvaWQKLUxpc3RUeXBlOjpSZWFkRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKQotewotICAgIEVuc3VyZUNsYXNzTG9hZGVyKGFkZFRvLCBjbCk7Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkTGlzdCIsIDIsIHYsICpjbCkpOwotfQotCi12b2lkCi1MaXN0VHlwZTo6V3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKGRhdGEsICJwdXRMaXN0IiwgMiwgaywgdikpOwotfQotCi12b2lkCi1MaXN0VHlwZTo6Q3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIGRhdGEsCi0gICAgICAgIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChkYXRhLCAiZ2V0TGlzdCIsIDEsIGspKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVXNlckRhdGFUeXBlOjpVc2VyRGF0YVR5cGUoY29uc3Qgc3RyaW5nJiBwYWNrYWdlLCBjb25zdCBzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGJ1aWx0SW4sIGJvb2wgY2FuV3JpdGVUb1BhcmNlbCwgYm9vbCBjYW5Xcml0ZVRvUnBjRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZGVjbEZpbGUsIGludCBkZWNsTGluZSkKLSAgICA6VHlwZShwYWNrYWdlLCBuYW1lLCBidWlsdEluID8gQlVJTFRfSU4gOiBVU0VSREFUQSwgY2FuV3JpdGVUb1BhcmNlbCwgY2FuV3JpdGVUb1JwY0RhdGEsCi0gICAgICAgICAgICB0cnVlLCBkZWNsRmlsZSwgZGVjbExpbmUpCi17Ci19Ci0KLXN0cmluZwotVXNlckRhdGFUeXBlOjpDcmVhdG9yTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFF1YWxpZmllZE5hbWUoKSArICIuQ1JFQVRPUiI7Ci19Ci0KLXN0cmluZwotVXNlckRhdGFUeXBlOjpScGNDcmVhdG9yTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFF1YWxpZmllZE5hbWUoKSArICIuUlBDX0NSRUFUT1IiOwotfQotCi12b2lkCi1Vc2VyRGF0YVR5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIC8vIGlmICh2ICE9IG51bGwpIHsKLSAgICAvLyAgICAgcGFyY2VsLndyaXRlSW50KDEpOwotICAgIC8vICAgICB2LndyaXRlVG9QYXJjZWwocGFyY2VsKTsKLSAgICAvLyB9IGVsc2UgewotICAgIC8vICAgICBwYXJjZWwud3JpdGVJbnQoMCk7Ci0gICAgLy8gfQotICAgIElmU3RhdGVtZW50KiBlbHNlcGFydCA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgIGVsc2VwYXJ0LT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAid3JpdGVJbnQiLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIjAiKSkpOwotICAgIElmU3RhdGVtZW50KiBpZnBhcnQgPSBuZXcgSWZTdGF0ZW1lbnQ7Ci0gICAgaWZwYXJ0LT5leHByZXNzaW9uID0gbmV3IENvbXBhcmlzb24odiwgIiE9IiwgTlVMTF9WQUxVRSk7Ci0gICAgaWZwYXJ0LT5lbHNlaWYgPSBlbHNlcGFydDsKLSAgICBpZnBhcnQtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZUludCIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMSIpKSk7Ci0gICAgaWZwYXJ0LT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwodiwgIndyaXRlVG9QYXJjZWwiLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJjZWwsIEJ1aWxkV3JpdGVUb1BhcmNlbEZsYWdzKGZsYWdzKSkpOwotCi0gICAgYWRkVG8tPkFkZChpZnBhcnQpOwotfQotCi12b2lkCi1Vc2VyRGF0YVR5cGU6OkNyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICAvLyBpZiAoMCAhPSBwYXJjZWwucmVhZEludCgpKSB7Ci0gICAgLy8gICAgIHYgPSBDTEFTUy5DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwocGFyY2VsKQotICAgIC8vIH0gZWxzZSB7Ci0gICAgLy8gICAgIHYgPSBudWxsOwotICAgIC8vIH0KLSAgICBJZlN0YXRlbWVudCogZWxzZXBhcnQgPSBuZXcgSWZTdGF0ZW1lbnQoKTsKLSAgICBlbHNlcGFydC0+c3RhdGVtZW50cy0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIE5VTExfVkFMVUUpKTsKLQotICAgIElmU3RhdGVtZW50KiBpZnBhcnQgPSBuZXcgSWZTdGF0ZW1lbnQoKTsKLSAgICBpZnBhcnQtPmV4cHJlc3Npb24gPSBuZXcgQ29tcGFyaXNvbihuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIjAiKSwgIiE9IiwKLSAgICAgICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkSW50IikpOwotICAgIGlmcGFydC0+ZWxzZWlmID0gZWxzZXBhcnQ7Ci0gICAgaWZwYXJ0LT5zdGF0ZW1lbnRzLT5BZGQobmV3IEFzc2lnbm1lbnQodiwKLSAgICAgICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbCh2LT50eXBlLCAiQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsIiwgMSwgcGFyY2VsKSkpOwotCi0gICAgYWRkVG8tPkFkZChpZnBhcnQpOwotfQotCi12b2lkCi1Vc2VyRGF0YVR5cGU6OlJlYWRGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgLy8gVE9ETzogcmVhbGx5LCB3ZSBkb24ndCBuZWVkIHRvIGhhdmUgdGhpcyBleHRyYSBjaGVjaywgYnV0IHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSB0d28gc2VwYXJhdGUgbWFyc2hhbGxpbmcgY29kZSBwYXRocwotICAgIC8vIGlmICgwICE9IHBhcmNlbC5yZWFkSW50KCkpIHsKLSAgICAvLyAgICAgdi5yZWFkRnJvbVBhcmNlbChwYXJjZWwpCi0gICAgLy8gfQotICAgIElmU3RhdGVtZW50KiBpZnBhcnQgPSBuZXcgSWZTdGF0ZW1lbnQoKTsKLSAgICBpZnBhcnQtPmV4cHJlc3Npb24gPSBuZXcgQ29tcGFyaXNvbihuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIjAiKSwgIiE9IiwKLSAgICAgICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkSW50IikpOwotICAgIGlmcGFydC0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKHYsICJyZWFkRnJvbVBhcmNlbCIsIDEsIHBhcmNlbCkpOwotICAgIGFkZFRvLT5BZGQoaWZwYXJ0KTsKLX0KLQotYm9vbAotVXNlckRhdGFUeXBlOjpDYW5CZUFycmF5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZAotVXNlckRhdGFUeXBlOjpXcml0ZUFycmF5VG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAid3JpdGVUeXBlZEFycmF5IiwgMiwgdiwKLSAgICAgICAgICAgICAgICBCdWlsZFdyaXRlVG9QYXJjZWxGbGFncyhmbGFncykpKTsKLX0KLQotdm9pZAotVXNlckRhdGFUeXBlOjpDcmVhdGVBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIHN0cmluZyBjcmVhdG9yID0gdi0+dHlwZS0+UXVhbGlmaWVkTmFtZSgpICsgIi5DUkVBVE9SIjsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwKLSAgICAgICAgICAgICAgICAiY3JlYXRlVHlwZWRBcnJheSIsIDEsIG5ldyBMaXRlcmFsRXhwcmVzc2lvbihjcmVhdG9yKSkpKTsKLX0KLQotdm9pZAotVXNlckRhdGFUeXBlOjpSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgc3RyaW5nIGNyZWF0b3IgPSB2LT50eXBlLT5RdWFsaWZpZWROYW1lKCkgKyAiLkNSRUFUT1IiOwotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZFR5cGVkQXJyYXkiLCAyLAotICAgICAgICAgICAgICAgICAgICB2LCBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oY3JlYXRvcikpKTsKLX0KLQotdm9pZAotVXNlckRhdGFUeXBlOjpXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncykKLXsKLSAgICAvLyBkYXRhLnB1dEZsYXR0ZW5hYmxlKGssIHYpOwotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwoZGF0YSwgInB1dEZsYXR0ZW5hYmxlIiwgMiwgaywgdikpOwotfQotCi12b2lkCi1Vc2VyRGF0YVR5cGU6OkNyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgVmFyaWFibGUqKiBjbCkKLXsKLSAgICAvLyBkYXRhLmdldEZsYXR0ZW5hYmxlKGssIENMQVNTLlJQQ19DUkVBVE9SKTsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKGRhdGEsICJnZXRGbGF0dGVuYWJsZSIsIDIsIGssCi0gICAgICAgICAgICAgICAgbmV3IEZpZWxkVmFyaWFibGUodi0+dHlwZSwgIlJQQ19DUkVBVE9SIikpKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSW50ZXJmYWNlVHlwZTo6SW50ZXJmYWNlVHlwZShjb25zdCBzdHJpbmcmIHBhY2thZ2UsIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYnVpbHRJbiwgYm9vbCBvbmV3YXksCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGRlY2xGaWxlLCBpbnQgZGVjbExpbmUpCi0gICAgOlR5cGUocGFja2FnZSwgbmFtZSwgYnVpbHRJbiA/IEJVSUxUX0lOIDogSU5URVJGQUNFLCB0cnVlLCBmYWxzZSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWNsRmlsZSwgZGVjbExpbmUpCi0gICAgLG1fb25ld2F5KG9uZXdheSkKLXsKLX0KLQotYm9vbAotSW50ZXJmYWNlVHlwZTo6T25lV2F5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9vbmV3YXk7Ci19Ci0KLXZvaWQKLUludGVyZmFjZVR5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIC8vIHBhcmNlbC53cml0ZVN0cm9uZ0JpbmRlcih2ICE9IG51bGwgPyB2LmFzQmluZGVyKCkgOiBudWxsKTsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlU3Ryb25nQmluZGVyIiwgMSwgCi0gICAgICAgICAgICAgICAgbmV3IFRlcm5hcnkoCi0gICAgICAgICAgICAgICAgICAgIG5ldyBDb21wYXJpc29uKHYsICIhPSIsIE5VTExfVkFMVUUpLAotICAgICAgICAgICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbCh2LCAiYXNCaW5kZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgTlVMTF9WQUxVRSkpKTsKLX0KLQotdm9pZAotSW50ZXJmYWNlVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIC8vIHYgPSBJbnRlcmZhY2UuYXNJbnRlcmZhY2UocGFyY2VsLnJlYWRTdHJvbmdCaW5kZXIoKSk7Ci0gICAgc3RyaW5nIHR5cGUgPSB2LT50eXBlLT5RdWFsaWZpZWROYW1lKCk7Ci0gICAgdHlwZSArPSAiLlN0dWIiOwotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwKLSAgICAgICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbCggTkFNRVMuRmluZCh0eXBlKSwgImFzSW50ZXJmYWNlIiwgMSwKLSAgICAgICAgICAgICAgICAgICAgbmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZFN0cm9uZ0JpbmRlciIpKSkpOwotfQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotR2VuZXJpY1R5cGU6OkdlbmVyaWNUeXBlKGNvbnN0IHN0cmluZyYgcGFja2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvcjxUeXBlKj4mIGFyZ3MpCi0gICAgOlR5cGUocGFja2FnZSwgbmFtZSwgQlVJTFRfSU4sIHRydWUsIHRydWUsIHRydWUpCi17Ci0gICAgbV9hcmdzID0gYXJnczsKLQotICAgIG1faW1wb3J0TmFtZSA9IHBhY2thZ2UgKyAnLicgKyBuYW1lOwotCi0gICAgc3RyaW5nIGdlbiA9ICI8IjsKLSAgICBpbnQgTiA9IGFyZ3Muc2l6ZSgpOwotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgVHlwZSogdCA9IGFyZ3NbaV07Ci0gICAgICAgIGdlbiArPSB0LT5RdWFsaWZpZWROYW1lKCk7Ci0gICAgICAgIGlmIChpICE9IE4tMSkgewotICAgICAgICAgICAgZ2VuICs9ICcsJzsKLSAgICAgICAgfQotICAgIH0KLSAgICBnZW4gKz0gJz4nOwotICAgIG1fZ2VuZXJpY0FyZ3VtZW50cyA9IGdlbjsKLSAgICBTZXRRdWFsaWZpZWROYW1lKG1faW1wb3J0TmFtZSArIGdlbik7Ci19Ci0KLWNvbnN0IHZlY3RvcjxUeXBlKj4mCi1HZW5lcmljVHlwZTo6R2VuZXJpY0FyZ3VtZW50VHlwZXMoKSBjb25zdAotewotICAgIHJldHVybiBtX2FyZ3M7Ci19Ci0KLXN0cmluZwotR2VuZXJpY1R5cGU6OkdlbmVyaWNBcmd1bWVudHMoKSBjb25zdAotewotICAgIHJldHVybiBtX2dlbmVyaWNBcmd1bWVudHM7Ci19Ci0KLXN0cmluZwotR2VuZXJpY1R5cGU6OkltcG9ydFR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2ltcG9ydE5hbWU7Ci19Ci0KLXZvaWQKLUdlbmVyaWNUeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImltcGxlbWVudCBHZW5lcmljVHlwZTo6V3JpdGVUb1BhcmNlbFxuIik7Ci19Ci0KLXZvaWQKLUdlbmVyaWNUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJpbXBsZW1lbnQgR2VuZXJpY1R5cGU6OkNyZWF0ZUZyb21QYXJjZWxcbiIpOwotfQotCi12b2lkCi1HZW5lcmljVHlwZTo6UmVhZEZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiaW1wbGVtZW50IEdlbmVyaWNUeXBlOjpSZWFkRnJvbVBhcmNlbFxuIik7Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1HZW5lcmljTGlzdFR5cGU6OkdlbmVyaWNMaXN0VHlwZShjb25zdCBzdHJpbmcmIHBhY2thZ2UsIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3I8VHlwZSo+JiBhcmdzKQotICAgIDpHZW5lcmljVHlwZShwYWNrYWdlLCBuYW1lLCBhcmdzKSwKLSAgICAgbV9jcmVhdG9yKGFyZ3NbMF0tPkNyZWF0b3JOYW1lKCkpCi17Ci19Ci0KLXN0cmluZwotR2VuZXJpY0xpc3RUeXBlOjpDcmVhdG9yTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJhbmRyb2lkLm9zLlBhcmNlbC5hcnJheUxpc3RDcmVhdG9yIjsKLX0KLQotc3RyaW5nCi1HZW5lcmljTGlzdFR5cGU6Okluc3RhbnRpYWJsZU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiamF2YS51dGlsLkFycmF5TGlzdCIgKyBHZW5lcmljQXJndW1lbnRzKCk7Ci19Ci0KLXZvaWQKLUdlbmVyaWNMaXN0VHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgaWYgKG1fY3JlYXRvciA9PSBTVFJJTkdfVFlQRS0+Q3JlYXRvck5hbWUoKSkgewotICAgICAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlU3RyaW5nTGlzdCIsIDEsIHYpKTsKLSAgICB9IGVsc2UgaWYgKG1fY3JlYXRvciA9PSBJQklOREVSX1RZUEUtPkNyZWF0b3JOYW1lKCkpIHsKLSAgICAgICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZUJpbmRlckxpc3QiLCAxLCB2KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gcGFyY2VsLndyaXRlVHlwZWRMaXN0WFgoYXJnKTsKLSAgICAgICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZVR5cGVkTGlzdCIsIDEsIHYpKTsKLSAgICB9Ci19Ci0KLXZvaWQKLUdlbmVyaWNMaXN0VHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGlmIChtX2NyZWF0b3IgPT0gU1RSSU5HX1RZUEUtPkNyZWF0b3JOYW1lKCkpIHsKLSAgICAgICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LAotICAgICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgImNyZWF0ZVN0cmluZ0FycmF5TGlzdCIsIDApKSk7Ci0gICAgfSBlbHNlIGlmIChtX2NyZWF0b3IgPT0gSUJJTkRFUl9UWVBFLT5DcmVhdG9yTmFtZSgpKSB7Ci0gICAgICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwKLSAgICAgICAgICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJjcmVhdGVCaW5kZXJBcnJheUxpc3QiLCAwKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHYgPSBfZGF0YS5yZWFkVHlwZWRBcnJheUxpc3QoWFhYLmNyZWF0b3IpOwotICAgICAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsCi0gICAgICAgICAgICAgICAgICAgbmV3IE1ldGhvZENhbGwocGFyY2VsLCAiY3JlYXRlVHlwZWRBcnJheUxpc3QiLCAxLAotICAgICAgICAgICAgICAgICAgIG5ldyBMaXRlcmFsRXhwcmVzc2lvbihtX2NyZWF0b3IpKSkpOwotICAgIH0KLX0KLQotdm9pZAotR2VuZXJpY0xpc3RUeXBlOjpSZWFkRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgaWYgKG1fY3JlYXRvciA9PSBTVFJJTkdfVFlQRS0+Q3JlYXRvck5hbWUoKSkgewotICAgICAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRTdHJpbmdMaXN0IiwgMSwgdikpOwotICAgIH0gZWxzZSBpZiAobV9jcmVhdG9yID09IElCSU5ERVJfVFlQRS0+Q3JlYXRvck5hbWUoKSkgewotICAgICAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRCaW5kZXJMaXN0IiwgMSwgdikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHYgPSBfZGF0YS5yZWFkVHlwZWRMaXN0KHYsIFhYWC5jcmVhdG9yKTsKLSAgICAgICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkVHlwZWRMaXN0IiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpdGVyYWxFeHByZXNzaW9uKG1fY3JlYXRvcikpKTsKLSAgICB9Ci19Ci0KLXZvaWQKLUdlbmVyaWNMaXN0VHlwZTo6V3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncykKLXsKLSAgICBUeXBlKiBnZW5lcmljID0gR2VuZXJpY0FyZ3VtZW50VHlwZXMoKVswXTsKLSAgICBpZiAoZ2VuZXJpYyA9PSBSUENfREFUQV9UWVBFKSB7Ci0gICAgICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwoZGF0YSwgInB1dFJwY0RhdGFMaXN0IiwgMiwgaywgdikpOwotICAgIH0gZWxzZSBpZiAoZ2VuZXJpYy0+UnBjQ3JlYXRvck5hbWUoKSAhPSAiIikgewotICAgICAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKGRhdGEsICJwdXRGbGF0dGVuYWJsZUxpc3QiLCAyLCBrLCB2KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChkYXRhLCAicHV0TGlzdCIsIDIsIGssIHYpKTsKLSAgICB9Ci19Ci0KLXZvaWQKLUdlbmVyaWNMaXN0VHlwZTo6Q3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgVmFyaWFibGUqIGRhdGEsIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgVHlwZSogZ2VuZXJpYyA9IEdlbmVyaWNBcmd1bWVudFR5cGVzKClbMF07Ci0gICAgaWYgKGdlbmVyaWMgPT0gUlBDX0RBVEFfVFlQRSkgewotICAgICAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKGRhdGEsICJnZXRScGNEYXRhTGlzdCIsIDIsIGspKSk7Ci0gICAgfSBlbHNlIGlmIChnZW5lcmljLT5ScGNDcmVhdG9yTmFtZSgpICE9ICIiKSB7Ci0gICAgICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwoZGF0YSwgImdldEZsYXR0ZW5hYmxlTGlzdCIsIDIsIGssIAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpdGVyYWxFeHByZXNzaW9uKGdlbmVyaWMtPlJwY0NyZWF0b3JOYW1lKCkpKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0cmluZyBjbGFzc0FyZyA9IEdlbmVyaWNBcmd1bWVudFR5cGVzKClbMF0tPlF1YWxpZmllZE5hbWUoKTsKLSAgICAgICAgY2xhc3NBcmcgKz0gIi5jbGFzcyI7Ci0gICAgICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwoZGF0YSwgImdldExpc3QiLCAyLCBrLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpdGVyYWxFeHByZXNzaW9uKGNsYXNzQXJnKSkpKTsKLSAgICB9Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1ScGNEYXRhVHlwZTo6UnBjRGF0YVR5cGUoKQotICAgIDpVc2VyRGF0YVR5cGUoImFuZHJvaWQuc3VwcG9ydC5wbGFjZS5ycGMiLCAiUnBjRGF0YSIsIHRydWUsIHRydWUsIHRydWUpCi17Ci19Ci0KLXZvaWQKLVJwY0RhdGFUeXBlOjpXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwoZGF0YSwgInB1dFJwY0RhdGEiLCAyLCBrLCB2KSk7Ci19Ci0KLXZvaWQKLVJwY0RhdGFUeXBlOjpDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogZGF0YSwKLSAgICAgICAgVmFyaWFibGUqKiBjbCkKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKGRhdGEsICJnZXRScGNEYXRhIiwgMSwgaykpKTsKLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUNsYXNzTG9hZGVyVHlwZTo6Q2xhc3NMb2FkZXJUeXBlKCkKLSAgICA6VHlwZSgiamF2YS5sYW5nIiwgIkNsYXNzTG9hZGVyIiwgQlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi17Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1OYW1lc3BhY2U6Ok5hbWVzcGFjZSgpCi17Ci19Ci0KLU5hbWVzcGFjZTo6fk5hbWVzcGFjZSgpCi17Ci0gICAgaW50IE4gPSBtX3R5cGVzLnNpemUoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3R5cGVzW2ldOwotICAgIH0KLX0KLQotdm9pZAotTmFtZXNwYWNlOjpBZGQoVHlwZSogdHlwZSkKLXsKLSAgICBUeXBlKiB0ID0gRmluZCh0eXBlLT5RdWFsaWZpZWROYW1lKCkpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgbV90eXBlcy5wdXNoX2JhY2sodHlwZSk7Ci0gICAgfQotfQotCi12b2lkCi1OYW1lc3BhY2U6OkFkZEdlbmVyaWNUeXBlKGNvbnN0IHN0cmluZyYgcGFja2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lLCBpbnQgYXJncykKLXsKLSAgICBHZW5lcmljIGc7Ci0gICAgICAgIGcucGFja2FnZSA9IHBhY2thZ2U7Ci0gICAgICAgIGcubmFtZSA9IG5hbWU7Ci0gICAgICAgIGcucXVhbGlmaWVkID0gcGFja2FnZSArICcuJyArIG5hbWU7Ci0gICAgICAgIGcuYXJncyA9IGFyZ3M7Ci0gICAgbV9nZW5lcmljcy5wdXNoX2JhY2soZyk7Ci19Ci0KLVR5cGUqCi1OYW1lc3BhY2U6OkZpbmQoY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdAotewotICAgIGludCBOID0gbV90eXBlcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBpZiAobV90eXBlc1tpXS0+UXVhbGlmaWVkTmFtZSgpID09IG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBtX3R5cGVzW2ldOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi1UeXBlKgotTmFtZXNwYWNlOjpGaW5kKGNvbnN0IGNoYXIqIHBhY2thZ2UsIGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0Ci17Ci0gICAgc3RyaW5nIHM7Ci0gICAgaWYgKHBhY2thZ2UgIT0gTlVMTCkgewotICAgICAgICBzICs9IHBhY2thZ2U7Ci0gICAgICAgIHMgKz0gJy4nOwotICAgIH0KLSAgICBzICs9IG5hbWU7Ci0gICAgcmV0dXJuIEZpbmQocyk7Ci19Ci0KLXN0YXRpYyBzdHJpbmcKLW5vcm1hbGl6ZV9nZW5lcmljKGNvbnN0IHN0cmluZyYgcykKLXsKLSAgICBzdHJpbmcgcjsKLSAgICBpbnQgTiA9IHMuc2l6ZSgpOwotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY2hhciBjID0gc1tpXTsKLSAgICAgICAgaWYgKCFpc3NwYWNlKGMpKSB7Ci0gICAgICAgICAgICByICs9IGM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHI7Ci19Ci0KLVR5cGUqCi1OYW1lc3BhY2U6OlNlYXJjaChjb25zdCBzdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gYW4gZXhhY3QgbWF0Y2ggd2lucwotICAgIFR5cGUqIHJlc3VsdCA9IEZpbmQobmFtZSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8gdHJ5IHRoZSBjbGFzcyBuYW1lcwotICAgIC8vIG91ciBsYW5ndWFnZSBkb2Vzbid0IGFsbG93IHlvdSB0byBub3Qgc3BlY2lmeSBvdXRlciBjbGFzc2VzCi0gICAgLy8gd2hlbiByZWZlcmVuY2luZyBhbiBpbm5lciBjbGFzcy4gIHRoYXQgY291bGQgYmUgY2hhbmdlZCwgYW5kIHRoaXMKLSAgICAvLyB3b3VsZCBiZSB0aGUgcGxhY2UgdG8gZG8gaXQsIGJ1dCBJIGRvbid0IHRoaW5rIHRoZSBjb21wbGV4aXR5IGluCi0gICAgLy8gc2NvcGluZyBydWxlcyBpcyB3b3J0aCBpdC4KLSAgICBpbnQgTiA9IG1fdHlwZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgaWYgKG1fdHlwZXNbaV0tPk5hbWUoKSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gbV90eXBlc1tpXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIHdlIGdvdCB0byBoZXJlIGFuZCBpdCdzIG5vdCBhIGdlbmVyaWMsIGdpdmUgdXAKLSAgICBpZiAobmFtZS5maW5kKCc8JykgPT0gbmFtZS5ucG9zKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8vIHJlbW92ZSBhbnkgd2hpdGVzcGFjZQotICAgIHN0cmluZyBub3JtYWxpemVkID0gbm9ybWFsaXplX2dlbmVyaWMobmFtZSk7Ci0KLSAgICAvLyBmaW5kIHRoZSBwYXJ0IGJlZm9yZSB0aGUgJzwnLCBmaW5kIGEgZ2VuZXJpYyBmb3IgaXQKLSAgICBzc2l6ZV90IGJhc2VJbmRleCA9IG5vcm1hbGl6ZWQuZmluZCgnPCcpOwotICAgIHN0cmluZyBiYXNlKG5vcm1hbGl6ZWQuY19zdHIoKSwgYmFzZUluZGV4KTsKLSAgICBjb25zdCBHZW5lcmljKiBnID0gc2VhcmNoX2dlbmVyaWMoYmFzZSk7Ci0gICAgaWYgKGcgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvLyBGb3IgZWFjaCBvZiB0aGUgYXJncywgZG8gYSByZWN1cnNpdmUgc2VhcmNoIG9uIGl0LiAgV2UgZG9uJ3QgYWxsb3cKLSAgICAvLyBnZW5lcmljcyB3aXRoaW4gZ2VuZXJpY3MgbGlrZSBKYXZhIGRvZXMsIGJlY2F1c2Ugd2UncmUgcmVhbGx5IGxpbWl0aW5nCi0gICAgLy8gdGhlbSB0byBqdXN0IGJ1aWx0LWluIGNvbnRhaW5lciBjbGFzc2VzLCBhdCBsZWFzdCBmb3Igbm93LiAgT3VyIHN5bnRheAotICAgIC8vIGVuc3VyZXMgdGhpcyByaWdodCBub3cgYXMgd2VsbC4KLSAgICB2ZWN0b3I8VHlwZSo+IGFyZ3M7Ci0gICAgc2l6ZV90IHN0YXJ0ID0gYmFzZUluZGV4ICsgMTsKLSAgICBzaXplX3QgZW5kID0gc3RhcnQ7Ci0gICAgd2hpbGUgKG5vcm1hbGl6ZWRbc3RhcnRdICE9ICdcMCcpIHsKLSAgICAgICAgZW5kID0gbm9ybWFsaXplZC5maW5kKCcsJywgc3RhcnQpOwotICAgICAgICBpZiAoZW5kID09IG5vcm1hbGl6ZWQubnBvcykgewotICAgICAgICAgICAgZW5kID0gbm9ybWFsaXplZC5maW5kKCc+Jywgc3RhcnQpOwotICAgICAgICB9Ci0gICAgICAgIHN0cmluZyBzKG5vcm1hbGl6ZWQuY19zdHIoKStzdGFydCwgZW5kLXN0YXJ0KTsKLSAgICAgICAgVHlwZSogdCA9IHRoaXMtPlNlYXJjaChzKTsKLSAgICAgICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHByaW50IGEgd2FybmluZyBoZXJlPwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgYXJncy5wdXNoX2JhY2sodCk7Ci0gICAgICAgIHN0YXJ0ID0gZW5kKzE7Ci0gICAgfQotCi0gICAgLy8gY29uc3RydWN0IGEgR2VuZXJpY1R5cGUsIGFkZCBpdCB0byBvdXIgbmFtZSBzZXQgc28gdGhleSBhbHdheXMgZ2V0Ci0gICAgLy8gdGhlIHNhbWUgb2JqZWN0LCBhbmQgcmV0dXJuIGl0LgotICAgIHJlc3VsdCA9IG1ha2VfZ2VuZXJpY190eXBlKGctPnBhY2thZ2UsIGctPm5hbWUsIGFyZ3MpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0aGlzLT5BZGQocmVzdWx0KTsKLSAgICByZXR1cm4gdGhpcy0+RmluZChyZXN1bHQtPlF1YWxpZmllZE5hbWUoKSk7Ci19Ci0KLWNvbnN0IE5hbWVzcGFjZTo6R2VuZXJpYyoKLU5hbWVzcGFjZTo6c2VhcmNoX2dlbmVyaWMoY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdAotewotICAgIGludCBOID0gbV9nZW5lcmljcy5zaXplKCk7Ci0KLSAgICAvLyBmaXJzdCBleGFjdCBtYXRjaAotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY29uc3QgR2VuZXJpYyYgZyA9IG1fZ2VuZXJpY3NbaV07Ci0gICAgICAgIGlmIChnLnF1YWxpZmllZCA9PSBuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gJmc7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyB0aGVuIG5hbWUgbWF0Y2gKLSAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IEdlbmVyaWMmIGcgPSBtX2dlbmVyaWNzW2ldOwotICAgICAgICBpZiAoZy5uYW1lID09IG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiAmZzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQotCi12b2lkCi1OYW1lc3BhY2U6OkR1bXAoKSBjb25zdAotewotICAgIGludCBuID0gbV90eXBlcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPG47IGkrKykgewotICAgICAgICBUeXBlKiB0ID0gbV90eXBlc1tpXTsKLSAgICAgICAgcHJpbnRmKCJ0eXBlOiBwYWNrYWdlPSVzIG5hbWU9JXMgcXVhbGlmaWVkTmFtZT0lc1xuIiwKLSAgICAgICAgICAgICAgICB0LT5QYWNrYWdlKCkuY19zdHIoKSwgdC0+TmFtZSgpLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgdC0+UXVhbGlmaWVkTmFtZSgpLmNfc3RyKCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvVHlwZS5oIGIvdG9vbHMvYWlkbC9UeXBlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMTI3MjAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9UeXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NDIgKzAsMCBAQAotI2lmbmRlZiBBSURMX1RZUEVfSAotI2RlZmluZSBBSURMX1RZUEVfSAotCi0jaW5jbHVkZSAiQVNULmgiCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotY2xhc3MgVHlwZQotewotcHVibGljOgotICAgIC8vIGtpbmRzCi0gICAgZW51bSB7Ci0gICAgICAgIEJVSUxUX0lOLAotICAgICAgICBVU0VSREFUQSwKLSAgICAgICAgSU5URVJGQUNFLAotICAgICAgICBHRU5FUkFURUQKLSAgICB9OwotICAgIAotICAgIC8vIFdyaXRlVG9QYXJjZWwgZmxhZ3MKLSAgICBlbnVtIHsKLSAgICAgICAgUEFSQ0VMQUJMRV9XUklURV9SRVRVUk5fVkFMVUUgPSAweDAwMDEKLSAgICB9OwotCi0gICAgICAgICAgICAgICAgICAgIFR5cGUoY29uc3Qgc3RyaW5nJiBuYW1lLCBpbnQga2luZCwgYm9vbCBjYW5Xcml0ZVRvUGFyY2VsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuV3JpdGVUb1JwY0RhdGEsIGJvb2wgY2FuQmVPdXQpOwotICAgICAgICAgICAgICAgICAgICBUeXBlKGNvbnN0IHN0cmluZyYgcGFja2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBraW5kLCBib29sIGNhbldyaXRlVG9QYXJjZWwsIGJvb2wgY2FuV3JpdGVUb1JwY0RhdGEsIGJvb2wgY2FuQmVPdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBkZWNsRmlsZSA9ICIiLCBpbnQgZGVjbExpbmUgPSAtMSk7Ci0gICAgdmlydHVhbCAgICAgICAgIH5UeXBlKCk7Ci0KLSAgICBpbmxpbmUgc3RyaW5nICAgUGFja2FnZSgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIG1fcGFja2FnZTsgfQotICAgIGlubGluZSBzdHJpbmcgICBOYW1lKCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgaW5saW5lIHN0cmluZyAgIFF1YWxpZmllZE5hbWUoKSBjb25zdCAgICAgICB7IHJldHVybiBtX3F1YWxpZmllZE5hbWU7IH0KLSAgICBpbmxpbmUgaW50ICAgICAgS2luZCgpIGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIG1fa2luZDsgfQotICAgIGlubGluZSBzdHJpbmcgICBEZWNsRmlsZSgpIGNvbnN0ICAgICAgICAgICAgeyByZXR1cm4gbV9kZWNsRmlsZTsgfQotICAgIGlubGluZSBpbnQgICAgICBEZWNsTGluZSgpIGNvbnN0ICAgICAgICAgICAgeyByZXR1cm4gbV9kZWNsTGluZTsgfQotICAgIGlubGluZSBib29sICAgICBDYW5Xcml0ZVRvUGFyY2VsKCkgY29uc3QgICAgeyByZXR1cm4gbV9jYW5Xcml0ZVRvUGFyY2VsOyB9Ci0gICAgaW5saW5lIGJvb2wgICAgIENhbldyaXRlVG9ScGNEYXRhKCkgY29uc3QgICB7IHJldHVybiBtX2NhbldyaXRlVG9ScGNEYXRhOyB9Ci0gICAgaW5saW5lIGJvb2wgICAgIENhbkJlT3V0UGFyYW1ldGVyKCkgY29uc3QgICB7IHJldHVybiBtX2NhbkJlT3V0OyB9Ci0gICAgCi0gICAgdmlydHVhbCBzdHJpbmcgIEltcG9ydFR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHN0cmluZyAgQ3JlYXRvck5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHN0cmluZyAgUnBjQ3JlYXRvck5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHN0cmluZyAgSW5zdGFudGlhYmxlTmFtZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotICAgIHZpcnR1YWwgdm9pZCAgICBSZWFkRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgICAgQ2FuQmVBcnJheSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlQXJyYXlUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgUmVhZEFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIFZhcmlhYmxlKiogY2wpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBTZXRRdWFsaWZpZWROYW1lKGNvbnN0IHN0cmluZyYgcXVhbGlmaWVkKTsKLSAgICBFeHByZXNzaW9uKiBCdWlsZFdyaXRlVG9QYXJjZWxGbGFncyhpbnQgZmxhZ3MpOwotCi1wcml2YXRlOgotICAgIFR5cGUoKTsKLSAgICBUeXBlKGNvbnN0IFR5cGUmKTsKLQotICAgIHN0cmluZyBtX3BhY2thZ2U7Ci0gICAgc3RyaW5nIG1fbmFtZTsKLSAgICBzdHJpbmcgbV9xdWFsaWZpZWROYW1lOwotICAgIHN0cmluZyBtX2RlY2xGaWxlOwotICAgIGludCBtX2RlY2xMaW5lOwotICAgIGludCBtX2tpbmQ7Ci0gICAgYm9vbCBtX2NhbldyaXRlVG9QYXJjZWw7Ci0gICAgYm9vbCBtX2NhbldyaXRlVG9ScGNEYXRhOwotICAgIGJvb2wgbV9jYW5CZU91dDsKLX07Ci0KLWNsYXNzIEJhc2ljVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljVHlwZShjb25zdCBzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIG1hcnNoYWxsUGFyY2VsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiB1bm1hcnNoYWxsUGFyY2VsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiB3cml0ZUFycmF5UGFyY2VsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBjcmVhdGVBcnJheVBhcmNlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcmVhZEFycmF5UGFyY2VsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBtYXJzaGFsbFJwYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgdW5tYXJzaGFsbFJwYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgd3JpdGVBcnJheVJwYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgY3JlYXRlQXJyYXlScGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHJlYWRBcnJheVJwYyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgICAgQ2FuQmVBcnJheSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlQXJyYXlUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgUmVhZEFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIFZhcmlhYmxlKiogY2wpOwotCi1wcml2YXRlOgotICAgIHN0cmluZyBtX21hcnNoYWxsUGFyY2VsOwotICAgIHN0cmluZyBtX3VubWFyc2hhbGxQYXJjZWw7Ci0gICAgc3RyaW5nIG1fd3JpdGVBcnJheVBhcmNlbDsKLSAgICBzdHJpbmcgbV9jcmVhdGVBcnJheVBhcmNlbDsKLSAgICBzdHJpbmcgbV9yZWFkQXJyYXlQYXJjZWw7Ci0gICAgc3RyaW5nIG1fbWFyc2hhbGxScGM7Ci0gICAgc3RyaW5nIG1fdW5tYXJzaGFsbFJwYzsKLSAgICBzdHJpbmcgbV93cml0ZUFycmF5UnBjOwotICAgIHN0cmluZyBtX2NyZWF0ZUFycmF5UnBjOwotICAgIHN0cmluZyBtX3JlYWRBcnJheVJwYzsKLX07Ci0KLWNsYXNzIEJvb2xlYW5UeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgQm9vbGVhblR5cGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgYm9vbCAgICBDYW5CZUFycmF5KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVBcnJheVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotICAgIHZpcnR1YWwgdm9pZCAgICBSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgVmFyaWFibGUqKiBjbCk7Ci19OwotCi1jbGFzcyBDaGFyVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIENoYXJUeXBlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgICAgQ2FuQmVBcnJheSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlQXJyYXlUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgUmVhZEFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotCi1jbGFzcyBTdHJpbmdUeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nVHlwZSgpOwotCi0gICAgdmlydHVhbCBzdHJpbmcgIENyZWF0b3JOYW1lKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgICAgQ2FuQmVBcnJheSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlQXJyYXlUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgUmVhZEFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgQ2hhclNlcXVlbmNlVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIENoYXJTZXF1ZW5jZVR5cGUoKTsKLQotICAgIHZpcnR1YWwgc3RyaW5nICBDcmVhdG9yTmFtZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgUmVtb3RlRXhjZXB0aW9uVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIFJlbW90ZUV4Y2VwdGlvblR5cGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLX07Ci0KLWNsYXNzIFJ1bnRpbWVFeGNlcHRpb25UeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgUnVudGltZUV4Y2VwdGlvblR5cGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLX07Ci0KLWNsYXNzIElCaW5kZXJUeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgSUJpbmRlclR5cGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZUFycmF5VG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0gICAgdmlydHVhbCB2b2lkICAgIFJlYWRBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgSUludGVyZmFjZVR5cGUgOiBwdWJsaWMgVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBJSW50ZXJmYWNlVHlwZSgpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgQmluZGVyVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIEJpbmRlclR5cGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLX07Ci0KLWNsYXNzIEJpbmRlclByb3h5VHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIEJpbmRlclByb3h5VHlwZSgpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgUGFyY2VsVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIFBhcmNlbFR5cGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLX07Ci0KLWNsYXNzIFBhcmNlbGFibGVJbnRlcmZhY2VUeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgUGFyY2VsYWJsZUludGVyZmFjZVR5cGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLX07Ci0KLWNsYXNzIE1hcFR5cGUgOiBwdWJsaWMgVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBNYXBUeXBlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0gICAgdmlydHVhbCB2b2lkICAgIFJlYWRGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLX07Ci0KLWNsYXNzIExpc3RUeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgTGlzdFR5cGUoKTsKLQotICAgIHZpcnR1YWwgc3RyaW5nICBJbnN0YW50aWFibGVOYW1lKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0gICAgdmlydHVhbCB2b2lkICAgIFJlYWRGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgVmFyaWFibGUqKiBjbCk7Ci19OwotCi1jbGFzcyBVc2VyRGF0YVR5cGUgOiBwdWJsaWMgVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBVc2VyRGF0YVR5cGUoY29uc3Qgc3RyaW5nJiBwYWNrYWdlLCBjb25zdCBzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBidWlsdEluLCBib29sIGNhbldyaXRlVG9QYXJjZWwsIGJvb2wgY2FuV3JpdGVUb1JwY0RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBkZWNsRmlsZSA9ICIiLCBpbnQgZGVjbExpbmUgPSAtMSk7Ci0KLSAgICB2aXJ0dWFsIHN0cmluZyAgQ3JlYXRvck5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHN0cmluZyAgUnBjQ3JlYXRvck5hbWUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgUmVhZEZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotCi0gICAgdmlydHVhbCBib29sICAgIENhbkJlQXJyYXkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZUFycmF5VG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0gICAgdmlydHVhbCB2b2lkICAgIFJlYWRBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBWYXJpYWJsZSoqIGNsKTsKLX07Ci0KLWNsYXNzIEludGVyZmFjZVR5cGUgOiBwdWJsaWMgVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VUeXBlKGNvbnN0IHN0cmluZyYgcGFja2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYnVpbHRJbiwgYm9vbCBvbmV3YXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBkZWNsRmlsZSwgaW50IGRlY2xMaW5lKTsKLQotICAgIGJvb2wgICAgICAgICAgICBPbmVXYXkoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLXByaXZhdGU6Ci0gICAgYm9vbCBtX29uZXdheTsKLX07Ci0KLQotY2xhc3MgR2VuZXJpY1R5cGUgOiBwdWJsaWMgVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBHZW5lcmljVHlwZShjb25zdCBzdHJpbmcmIHBhY2thZ2UsIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvcjxUeXBlKj4mIGFyZ3MpOwotCi0gICAgY29uc3QgdmVjdG9yPFR5cGUqPiYgR2VuZXJpY0FyZ3VtZW50VHlwZXMoKSBjb25zdDsKLSAgICBzdHJpbmcgICAgICAgICAgR2VuZXJpY0FyZ3VtZW50cygpIGNvbnN0OwotCi0gICAgdmlydHVhbCBzdHJpbmcgIEltcG9ydFR5cGUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgUmVhZEZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotCi1wcml2YXRlOgotICAgIHN0cmluZyBtX2dlbmVyaWNBcmd1bWVudHM7Ci0gICAgc3RyaW5nIG1faW1wb3J0TmFtZTsKLSAgICB2ZWN0b3I8VHlwZSo+IG1fYXJnczsKLX07Ci0KLWNsYXNzIFJwY0RhdGFUeXBlIDogcHVibGljIFVzZXJEYXRhVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBScGNEYXRhVHlwZSgpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBWYXJpYWJsZSoqIGNsKTsKLX07Ci0KLWNsYXNzIENsYXNzTG9hZGVyVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIENsYXNzTG9hZGVyVHlwZSgpOwotfTsKLQotY2xhc3MgR2VuZXJpY0xpc3RUeXBlIDogcHVibGljIEdlbmVyaWNUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVyaWNMaXN0VHlwZShjb25zdCBzdHJpbmcmIHBhY2thZ2UsIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvcjxUeXBlKj4mIGFyZ3MpOwotCi0gICAgdmlydHVhbCBzdHJpbmcgIENyZWF0b3JOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBzdHJpbmcgIEluc3RhbnRpYWJsZU5hbWUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgUmVhZEZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBWYXJpYWJsZSoqIGNsKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgc3RyaW5nIG1fY3JlYXRvcjsKLX07Ci0KLWNsYXNzIE5hbWVzcGFjZQotewotcHVibGljOgotICAgICAgICAgICAgTmFtZXNwYWNlKCk7Ci0gICAgICAgICAgICB+TmFtZXNwYWNlKCk7Ci0gICAgdm9pZCAgICBBZGQoVHlwZSogdHlwZSk7Ci0KLSAgICAvLyBhcmdzIGlzIHRoZSBudW1iZXIgb2YgdGVtcGxhdGUgdHlwZXMgKHdoYXQgaXMgdGhpcyBjYWxsZWQ/KQotICAgIHZvaWQgICAgQWRkR2VuZXJpY1R5cGUoY29uc3Qgc3RyaW5nJiBwYWNrYWdlLCBjb25zdCBzdHJpbmcmIG5hbWUsIGludCBhcmdzKTsKLQotICAgIC8vIGxvb2t1cCBhIHNwZWNpZmljIGNsYXNzIG5hbWUKLSAgICBUeXBlKiAgIEZpbmQoY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBUeXBlKiAgIEZpbmQoY29uc3QgY2hhciogcGFja2FnZSwgY29uc3QgY2hhciogbmFtZSkgY29uc3Q7Ci0gICAgCi0gICAgLy8gdHJ5IHRvIHNlYXJjaCBieSBlaXRoZXIgYSBmdWxsIG5hbWUgb3IgYSBwYXJ0aWFsIG5hbWUKLSAgICBUeXBlKiAgIFNlYXJjaChjb25zdCBzdHJpbmcmIG5hbWUpOwotCi0gICAgdm9pZCAgICBEdW1wKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IEdlbmVyaWMgewotICAgICAgICBzdHJpbmcgcGFja2FnZTsKLSAgICAgICAgc3RyaW5nIG5hbWU7Ci0gICAgICAgIHN0cmluZyBxdWFsaWZpZWQ7Ci0gICAgICAgIGludCBhcmdzOwotICAgIH07Ci0KLSAgICBjb25zdCBHZW5lcmljKiBzZWFyY2hfZ2VuZXJpYyhjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotCi0gICAgdmVjdG9yPFR5cGUqPiBtX3R5cGVzOwotICAgIHZlY3RvcjxHZW5lcmljPiBtX2dlbmVyaWNzOwotfTsKLQotZXh0ZXJuIE5hbWVzcGFjZSBOQU1FUzsKLQotZXh0ZXJuIFR5cGUqIFZPSURfVFlQRTsKLWV4dGVybiBUeXBlKiBCT09MRUFOX1RZUEU7Ci1leHRlcm4gVHlwZSogQllURV9UWVBFOwotZXh0ZXJuIFR5cGUqIENIQVJfVFlQRTsKLWV4dGVybiBUeXBlKiBJTlRfVFlQRTsKLWV4dGVybiBUeXBlKiBMT05HX1RZUEU7Ci1leHRlcm4gVHlwZSogRkxPQVRfVFlQRTsKLWV4dGVybiBUeXBlKiBET1VCTEVfVFlQRTsKLWV4dGVybiBUeXBlKiBPQkpFQ1RfVFlQRTsKLWV4dGVybiBUeXBlKiBTVFJJTkdfVFlQRTsKLWV4dGVybiBUeXBlKiBDSEFSX1NFUVVFTkNFX1RZUEU7Ci1leHRlcm4gVHlwZSogVEVYVF9VVElMU19UWVBFOwotZXh0ZXJuIFR5cGUqIFJFTU9URV9FWENFUFRJT05fVFlQRTsKLWV4dGVybiBUeXBlKiBSVU5USU1FX0VYQ0VQVElPTl9UWVBFOwotZXh0ZXJuIFR5cGUqIElCSU5ERVJfVFlQRTsKLWV4dGVybiBUeXBlKiBJSU5URVJGQUNFX1RZUEU7Ci1leHRlcm4gVHlwZSogQklOREVSX05BVElWRV9UWVBFOwotZXh0ZXJuIFR5cGUqIEJJTkRFUl9QUk9YWV9UWVBFOwotZXh0ZXJuIFR5cGUqIFBBUkNFTF9UWVBFOwotZXh0ZXJuIFR5cGUqIFBBUkNFTEFCTEVfSU5URVJGQUNFX1RZUEU7Ci0KLWV4dGVybiBUeXBlKiBDT05URVhUX1RZUEU7Ci0KLWV4dGVybiBUeXBlKiBSUENfREFUQV9UWVBFOwotZXh0ZXJuIFR5cGUqIFJQQ19FUlJPUl9UWVBFOwotZXh0ZXJuIFR5cGUqIFJQQ19DT05URVhUX1RZUEU7Ci1leHRlcm4gVHlwZSogRVZFTlRfRkFLRV9UWVBFOwotCi1leHRlcm4gRXhwcmVzc2lvbiogTlVMTF9WQUxVRTsKLWV4dGVybiBFeHByZXNzaW9uKiBUSElTX1ZBTFVFOwotZXh0ZXJuIEV4cHJlc3Npb24qIFNVUEVSX1ZBTFVFOwotZXh0ZXJuIEV4cHJlc3Npb24qIFRSVUVfVkFMVUU7Ci1leHRlcm4gRXhwcmVzc2lvbiogRkFMU0VfVkFMVUU7Ci0KLXZvaWQgcmVnaXN0ZXJfYmFzZV90eXBlcygpOwotCi0jZW5kaWYgLy8gQUlETF9UWVBFX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvYWlkbC5jcHAgYi90b29scy9haWRsL2FpZGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODRkNzQzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvYWlkbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTU2ICswLDAgQEAKLQotI2luY2x1ZGUgImFpZGxfbGFuZ3VhZ2UuaCIKLSNpbmNsdWRlICJvcHRpb25zLmgiCi0jaW5jbHVkZSAic2VhcmNoX3BhdGguaCIKLSNpbmNsdWRlICJUeXBlLmgiCi0jaW5jbHVkZSAiZ2VuZXJhdGVfamF2YS5oIgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWFwPgotCi0jaWZkZWYgSEFWRV9NU19DX1JVTlRJTUUKLSNpbmNsdWRlIDxpby5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBPX0JJTkFSWQotIyAgZGVmaW5lIE9fQklOQVJZICAwCi0jZW5kaWYKLQotLy8gVGhlIGZvbGxvd2luZyBhcmUgZ290dGVuIGFzIHRoZSBvZmZzZXQgZnJvbSB0aGUgYWxsb3dhYmxlIGlkJ3MgYmV0d2VlbgotLy8gYW5kcm9pZC5vcy5JQmluZGVyLkZJUlNUX0NBTExfVFJBTlNBQ1RJT049MSBhbmQKLS8vIGFuZHJvaWQub3MuSUJpbmRlci5MQVNUX0NBTExfVFJBTlNBQ1RJT049MTY3NzcyMTUKLSNkZWZpbmUgTUlOX1VTRVJfU0VUX01FVEhPRF9JRCAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BWF9VU0VSX1NFVF9NRVRIT0RfSUQgICAgICAgICAgICAgICAgMTY3NzcyMTQKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotc3RhdGljIHZvaWQKLXRlc3RfZG9jdW1lbnQoZG9jdW1lbnRfaXRlbV90eXBlKiBkKQotewotICAgIHdoaWxlIChkKSB7Ci0gICAgICAgIGlmIChkLT5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfQklOREVSKSB7Ci0gICAgICAgICAgICBpbnRlcmZhY2VfdHlwZSogYyA9IChpbnRlcmZhY2VfdHlwZSopZDsKLSAgICAgICAgICAgIHByaW50ZigiaW50ZXJmYWNlICVzICVzIHtcbiIsIGMtPnBhY2thZ2UsIGMtPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICBpbnRlcmZhY2VfaXRlbV90eXBlICpxID0gKGludGVyZmFjZV9pdGVtX3R5cGUqKWMtPmludGVyZmFjZV9pdGVtczsKLSAgICAgICAgICAgIHdoaWxlIChxKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHEtPml0ZW1fdHlwZSA9PSBNRVRIT0RfVFlQRSkgewotICAgICAgICAgICAgICAgICAgICBtZXRob2RfdHlwZSAqbSA9IChtZXRob2RfdHlwZSopcTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICVzICVzKCIsIG0tPnR5cGUudHlwZS5kYXRhLCBtLT5uYW1lLmRhdGEpOwotICAgICAgICAgICAgICAgICAgICBhcmdfdHlwZSAqcCA9IG0tPmFyZ3M7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzICVzIixwLT50eXBlLnR5cGUuZGF0YSxwLT5uYW1lLmRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAtPm5leHQpIHByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHA9cC0+bmV4dDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIikiKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI7XG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcT1xLT5uZXh0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCJ9XG4iKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChkLT5pdGVtX3R5cGUgPT0gVVNFUl9EQVRBX1RZUEUpIHsKLSAgICAgICAgICAgIHVzZXJfZGF0YV90eXBlKiBiID0gKHVzZXJfZGF0YV90eXBlKilkOwotICAgICAgICAgICAgaWYgKChiLT5mbGF0dGVuaW5nX21ldGhvZHMgJiBQQVJDRUxBQkxFX0RBVEEpICE9IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoInBhcmNlbGFibGUgJXMgJXM7XG4iLCBiLT5wYWNrYWdlLCBiLT5uYW1lLmRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChiLT5mbGF0dGVuaW5nX21ldGhvZHMgJiBSUENfREFUQSkgIT0gMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiZmxhdHRlbmFibGUgJXMgJXM7XG4iLCBiLT5wYWNrYWdlLCBiLT5uYW1lLmRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcHJpbnRmKCJVTktOT1dOIGQ9MHglMDhseCBkLT5pdGVtX3R5cGU9JWRcbiIsIChsb25nKWQsIGQtPml0ZW1fdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZCA9IGQtPm5leHQ7Ci0gICAgfQotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1pbnQKLWNvbnZlcnRfZGlyZWN0aW9uKGNvbnN0IGNoYXIqIGRpcmVjdGlvbikKLXsKLSAgICBpZiAoZGlyZWN0aW9uID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIElOX1BBUkFNRVRFUjsKLSAgICB9Ci0gICAgaWYgKDAgPT0gc3RyY21wKGRpcmVjdGlvbiwgImluIikpIHsKLSAgICAgICAgcmV0dXJuIElOX1BBUkFNRVRFUjsKLSAgICB9Ci0gICAgaWYgKDAgPT0gc3RyY21wKGRpcmVjdGlvbiwgIm91dCIpKSB7Ci0gICAgICAgIHJldHVybiBPVVRfUEFSQU1FVEVSOwotICAgIH0KLSAgICByZXR1cm4gSU5PVVRfUEFSQU1FVEVSOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdHJ1Y3QgaW1wb3J0X2luZm8gewotICAgIGNvbnN0IGNoYXIqIGZyb207Ci0gICAgY29uc3QgY2hhciogZmlsZW5hbWU7Ci0gICAgYnVmZmVyX3R5cGUgc3RhdGVtZW50OwotICAgIGNvbnN0IGNoYXIqIG5lZWRlZENsYXNzOwotICAgIGRvY3VtZW50X2l0ZW1fdHlwZSogZG9jOwotICAgIHN0cnVjdCBpbXBvcnRfaW5mbyogbmV4dDsKLX07Ci0KLWRvY3VtZW50X2l0ZW1fdHlwZSogZ19kb2N1bWVudCA9IE5VTEw7Ci1pbXBvcnRfaW5mbyogZ19pbXBvcnRzID0gTlVMTDsKLQotc3RhdGljIHZvaWQKLW1haW5fZG9jdW1lbnRfcGFyc2VkKGRvY3VtZW50X2l0ZW1fdHlwZSogZCkKLXsKLSAgICBnX2RvY3VtZW50ID0gZDsKLX0KLQotc3RhdGljIHZvaWQKLW1haW5faW1wb3J0X3BhcnNlZChidWZmZXJfdHlwZSogc3RhdGVtZW50KQotewotICAgIGltcG9ydF9pbmZvKiBpbXBvcnQgPSAoaW1wb3J0X2luZm8qKW1hbGxvYyhzaXplb2YoaW1wb3J0X2luZm8pKTsKLSAgICBtZW1zZXQoaW1wb3J0LCAwLCBzaXplb2YoaW1wb3J0X2luZm8pKTsKLSAgICBpbXBvcnQtPmZyb20gPSBzdHJkdXAoZ19jdXJyZW50RmlsZW5hbWUpOwotICAgIGltcG9ydC0+c3RhdGVtZW50LmxpbmVubyA9IHN0YXRlbWVudC0+bGluZW5vOwotICAgIGltcG9ydC0+c3RhdGVtZW50LmRhdGEgPSBzdHJkdXAoc3RhdGVtZW50LT5kYXRhKTsKLSAgICBpbXBvcnQtPnN0YXRlbWVudC5leHRyYSA9IE5VTEw7Ci0gICAgaW1wb3J0LT5uZXh0ID0gZ19pbXBvcnRzOwotICAgIGltcG9ydC0+bmVlZGVkQ2xhc3MgPSBwYXJzZV9pbXBvcnRfc3RhdGVtZW50KHN0YXRlbWVudC0+ZGF0YSk7Ci0gICAgZ19pbXBvcnRzID0gaW1wb3J0OwotfQotCi1zdGF0aWMgUGFyc2VyQ2FsbGJhY2tzIGdfbWFpbkNhbGxiYWNrcyA9IHsKLSAgICAmbWFpbl9kb2N1bWVudF9wYXJzZWQsCi0gICAgJm1haW5faW1wb3J0X3BhcnNlZAotfTsKLQotY2hhcioKLXBhcnNlX2ltcG9ydF9zdGF0ZW1lbnQoY29uc3QgY2hhciogdGV4dCkKLXsKLSAgICBjb25zdCBjaGFyKiBlbmQ7Ci0gICAgaW50IGxlbjsKLQotICAgIHdoaWxlIChpc3NwYWNlKCp0ZXh0KSkgewotICAgICAgICB0ZXh0Kys7Ci0gICAgfQotICAgIHdoaWxlICghaXNzcGFjZSgqdGV4dCkpIHsKLSAgICAgICAgdGV4dCsrOwotICAgIH0KLSAgICB3aGlsZSAoaXNzcGFjZSgqdGV4dCkpIHsKLSAgICAgICAgdGV4dCsrOwotICAgIH0KLSAgICBlbmQgPSB0ZXh0OwotICAgIHdoaWxlICghaXNzcGFjZSgqZW5kKSAmJiAqZW5kICE9ICc7JykgewotICAgICAgICBlbmQrKzsKLSAgICB9Ci0gICAgbGVuID0gZW5kLXRleHQ7Ci0KLSAgICBjaGFyKiBydiA9IChjaGFyKiltYWxsb2MobGVuKzEpOwotICAgIG1lbWNweShydiwgdGV4dCwgbGVuKTsKLSAgICBydltsZW5dID0gJ1wwJzsKLQotICAgIHJldHVybiBydjsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIHZvaWQKLWltcG9ydF9pbXBvcnRfcGFyc2VkKGJ1ZmZlcl90eXBlKiBzdGF0ZW1lbnQpCi17Ci19Ci0KLXN0YXRpYyBQYXJzZXJDYWxsYmFja3MgZ19pbXBvcnRDYWxsYmFja3MgPSB7Ci0gICAgJm1haW5fZG9jdW1lbnRfcGFyc2VkLAotICAgICZpbXBvcnRfaW1wb3J0X3BhcnNlZAotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGludAotY2hlY2tfZmlsZW5hbWUoY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IGNoYXIqIHBhY2thZ2UsIGJ1ZmZlcl90eXBlKiBuYW1lKQotewotICAgIGNvbnN0IGNoYXIqIHA7Ci0gICAgc3RyaW5nIGV4cGVjdGVkOwotICAgIHN0cmluZyBmbjsKLSAgICBzaXplX3QgbGVuOwotICAgIGNoYXIgY3dkW01BWFBBVEhMRU5dOwotICAgIGJvb2wgdmFsaWQgPSBmYWxzZTsKLQotI2lmZGVmIEhBVkVfV0lORE9XU19QQVRIUwotICAgIGlmIChpc2FscGhhKGZpbGVuYW1lWzBdKSAmJiBmaWxlbmFtZVsxXSA9PSAnOicKLSAgICAgICAgJiYgZmlsZW5hbWVbMl0gPT0gT1NfUEFUSF9TRVBBUkFUT1IpIHsKLSNlbHNlCi0gICAgaWYgKGZpbGVuYW1lWzBdID09IE9TX1BBVEhfU0VQQVJBVE9SKSB7Ci0jZW5kaWYKLSAgICAgICAgZm4gPSBmaWxlbmFtZTsKLSAgICB9IGVsc2UgewotICAgICAgICBmbiA9IGdldGN3ZChjd2QsIHNpemVvZihjd2QpKTsKLSAgICAgICAgbGVuID0gZm4ubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChmbltsZW4tMV0gIT0gT1NfUEFUSF9TRVBBUkFUT1IpIHsKLSAgICAgICAgICAgIGZuICs9IE9TX1BBVEhfU0VQQVJBVE9SOwotICAgICAgICB9Ci0gICAgICAgIGZuICs9IGZpbGVuYW1lOwotICAgIH0KLQotICAgIGlmIChwYWNrYWdlKSB7Ci0gICAgICAgIGV4cGVjdGVkID0gcGFja2FnZTsKLSAgICAgICAgZXhwZWN0ZWQgKz0gJy4nOwotICAgIH0KLQotICAgIGxlbiA9IGV4cGVjdGVkLmxlbmd0aCgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxsZW47IGkrKykgewotICAgICAgICBpZiAoZXhwZWN0ZWRbaV0gPT0gJy4nKSB7Ci0gICAgICAgICAgICBleHBlY3RlZFtpXSA9IE9TX1BBVEhfU0VQQVJBVE9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcCA9IHN0cmNocihuYW1lLT5kYXRhLCAnLicpOwotICAgIGxlbiA9IHAgPyBwLW5hbWUtPmRhdGEgOiBzdHJsZW4obmFtZS0+ZGF0YSk7Ci0gICAgZXhwZWN0ZWQuYXBwZW5kKG5hbWUtPmRhdGEsIGxlbik7Ci0KLSAgICBleHBlY3RlZCArPSAiLmFpZGwiOwotCi0gICAgbGVuID0gZm4ubGVuZ3RoKCk7Ci0gICAgdmFsaWQgPSAobGVuID49IGV4cGVjdGVkLmxlbmd0aCgpKTsKLQotICAgIGlmICh2YWxpZCkgewotICAgICAgICBwID0gZm4uY19zdHIoKSArIChsZW4gLSBleHBlY3RlZC5sZW5ndGgoKSk7Ci0KLSNpZmRlZiBIQVZFX1dJTkRPV1NfUEFUSFMKLSAgICAgICAgaWYgKE9TX1BBVEhfU0VQQVJBVE9SICE9ICcvJykgewotICAgICAgICAgICAgLy8gSW5wdXQgZmlsZW5hbWUgdW5kZXIgY3lnd2luIG1vc3QgbGlrZWx5IGhhcyAvIHNlcGFyYXRvcnMKLSAgICAgICAgICAgIC8vIHdoZXJlYXMgdGhlIGV4cGVjdGVkIHN0cmluZyB1c2VzIFxcIHNlcGFyYXRvcnMuIEFkanVzdAotICAgICAgICAgICAgLy8gdGhlbSBhY2NvcmRpbmdseS4KLSAgICAgICAgICBmb3IgKGNoYXIgKmMgPSBjb25zdF9jYXN0PGNoYXIgKj4ocCk7ICpjOyArK2MpIHsKLSAgICAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nKSAqYyA9IE9TX1BBVEhfU0VQQVJBVE9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLQotI2lmZGVmIE9TX0NBU0VfU0VOU0lUSVZFCi0gICAgICAgIHZhbGlkID0gKGV4cGVjdGVkID09IHApOwotI2Vsc2UKLSAgICAgICAgdmFsaWQgPSAhc3RyY2FzZWNtcChleHBlY3RlZC5jX3N0cigpLCBwKTsKLSNlbmRpZgotICAgIH0KLQotICAgIGlmICghdmFsaWQpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBpbnRlcmZhY2UgJXMgc2hvdWxkIGJlIGRlY2xhcmVkIGluIGEgZmlsZSIKLSAgICAgICAgICAgICAgICAiIGNhbGxlZCAlcy5cbiIsCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUsIG5hbWUtPmxpbmVubywgbmFtZS0+ZGF0YSwgZXhwZWN0ZWQuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1jaGVja19maWxlbmFtZXMoY29uc3QgY2hhciogZmlsZW5hbWUsIGRvY3VtZW50X2l0ZW1fdHlwZSogaXRlbXMpCi17Ci0gICAgaW50IGVyciA9IDA7Ci0gICAgd2hpbGUgKGl0ZW1zKSB7Ci0gICAgICAgIGlmIChpdGVtcy0+aXRlbV90eXBlID09IFVTRVJfREFUQV9UWVBFKSB7Ci0gICAgICAgICAgICB1c2VyX2RhdGFfdHlwZSogcCA9ICh1c2VyX2RhdGFfdHlwZSopaXRlbXM7Ci0gICAgICAgICAgICBlcnIgfD0gY2hlY2tfZmlsZW5hbWUoZmlsZW5hbWUsIHAtPnBhY2thZ2UsICZwLT5uYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpdGVtcy0+aXRlbV90eXBlID09IElOVEVSRkFDRV9UWVBFX0JJTkRFUgotICAgICAgICAgICAgICAgIHx8IGl0ZW1zLT5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfUlBDKSB7Ci0gICAgICAgICAgICBpbnRlcmZhY2VfdHlwZSogYyA9IChpbnRlcmZhY2VfdHlwZSopaXRlbXM7Ci0gICAgICAgICAgICBlcnIgfD0gY2hlY2tfZmlsZW5hbWUoZmlsZW5hbWUsIGMtPnBhY2thZ2UsICZjLT5uYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDogaW50ZXJuYWwgZXJyb3IgdW5rb3duIGRvY3VtZW50IHR5cGUgJWQuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMtPml0ZW1fdHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBpdGVtcyA9IGl0ZW1zLT5uZXh0OwotICAgIH0KLSAgICByZXR1cm4gZXJyOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgY29uc3QgY2hhcioKLWtpbmRfdG9fc3RyaW5nKGludCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkKLSAgICB7Ci0gICAgICAgIGNhc2UgVHlwZTo6SU5URVJGQUNFOgotICAgICAgICAgICAgcmV0dXJuICJhbiBpbnRlcmZhY2UiOwotICAgICAgICBjYXNlIFR5cGU6OlVTRVJEQVRBOgotICAgICAgICAgICAgcmV0dXJuICJhIHVzZXIgZGF0YSI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gIkVSUk9SIjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBjaGFyKgotcmZpbmQoY2hhciogc3RyLCBjaGFyIGMpCi17Ci0gICAgY2hhciogcCA9IHN0ciArIHN0cmxlbihzdHIpIC0gMTsKLSAgICB3aGlsZSAocCA+PSBzdHIpIHsKLSAgICAgICAgaWYgKCpwID09IGMpIHsKLSAgICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9Ci0gICAgICAgIHAtLTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQKLWdhdGhlcl90eXBlcyhjb25zdCBjaGFyKiBmaWxlbmFtZSwgZG9jdW1lbnRfaXRlbV90eXBlKiBpdGVtcykKLXsKLSAgICBpbnQgZXJyID0gMDsKLSAgICB3aGlsZSAoaXRlbXMpIHsKLSAgICAgICAgVHlwZSogdHlwZTsKLSAgICAgICAgaWYgKGl0ZW1zLT5pdGVtX3R5cGUgPT0gVVNFUl9EQVRBX1RZUEUpIHsKLSAgICAgICAgICAgIHVzZXJfZGF0YV90eXBlKiBwID0gKHVzZXJfZGF0YV90eXBlKilpdGVtczsKLSAgICAgICAgICAgIHR5cGUgPSBuZXcgVXNlckRhdGFUeXBlKHAtPnBhY2thZ2UgPyBwLT5wYWNrYWdlIDogIiIsIHAtPm5hbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgZmFsc2UsICgocC0+ZmxhdHRlbmluZ19tZXRob2RzICYgUEFSQ0VMQUJMRV9EQVRBKSAhPSAwKSwKLSAgICAgICAgICAgICAgICAgICAgKChwLT5mbGF0dGVuaW5nX21ldGhvZHMgJiBSUENfREFUQSkgIT0gMCksIGZpbGVuYW1lLCBwLT5uYW1lLmxpbmVubyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaXRlbXMtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9CSU5ERVIKLSAgICAgICAgICAgICAgICB8fCBpdGVtcy0+aXRlbV90eXBlID09IElOVEVSRkFDRV9UWVBFX1JQQykgewotICAgICAgICAgICAgaW50ZXJmYWNlX3R5cGUqIGMgPSAoaW50ZXJmYWNlX3R5cGUqKWl0ZW1zOwotICAgICAgICAgICAgdHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKGMtPnBhY2thZ2UgPyBjLT5wYWNrYWdlIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+bmFtZS5kYXRhLCBmYWxzZSwgYy0+b25ld2F5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBjLT5uYW1lLmxpbmVubyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6IGludGVybmFsIGVycm9yICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotICAgICAgICBUeXBlKiBvbGQgPSBOQU1FUy5GaW5kKHR5cGUtPlF1YWxpZmllZE5hbWUoKSk7Ci0gICAgICAgIGlmIChvbGQgPT0gTlVMTCkgewotICAgICAgICAgICAgTkFNRVMuQWRkKHR5cGUpOwotCi0gICAgICAgICAgICBpZiAoaXRlbXMtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9CSU5ERVIpIHsKLSAgICAgICAgICAgICAgICAvLyBmb3IgaW50ZXJmYWNlcywgYWxzbyBhZGQgdGhlIHN0dWIgYW5kIHByb3h5IHR5cGVzLCB3ZSBkb24ndAotICAgICAgICAgICAgICAgIC8vIGJvdGhlciBjaGVja2luZyB0aGVzZSBmb3IgZHVwbGljYXRlcywgYmVjYXVzZSB0aGUgcGFyc2VyCi0gICAgICAgICAgICAgICAgLy8gd29uJ3QgbGV0IHVzIGRvIGl0LgotICAgICAgICAgICAgICAgIGludGVyZmFjZV90eXBlKiBjID0gKGludGVyZmFjZV90eXBlKilpdGVtczsKLQotICAgICAgICAgICAgICAgIHN0cmluZyBuYW1lID0gYy0+bmFtZS5kYXRhOwotICAgICAgICAgICAgICAgIG5hbWUgKz0gIi5TdHViIjsKLSAgICAgICAgICAgICAgICBUeXBlKiBzdHViID0gbmV3IFR5cGUoYy0+cGFja2FnZSA/IGMtPnBhY2thZ2UgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBUeXBlOjpHRU5FUkFURUQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGMtPm5hbWUubGluZW5vKTsKLSAgICAgICAgICAgICAgICBOQU1FUy5BZGQoc3R1Yik7Ci0KLSAgICAgICAgICAgICAgICBuYW1lID0gYy0+bmFtZS5kYXRhOwotICAgICAgICAgICAgICAgIG5hbWUgKz0gIi5TdHViLlByb3h5IjsKLSAgICAgICAgICAgICAgICBUeXBlKiBwcm94eSA9IG5ldyBUeXBlKGMtPnBhY2thZ2UgPyBjLT5wYWNrYWdlIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgVHlwZTo6R0VORVJBVEVELCBmYWxzZSwgZmFsc2UsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBjLT5uYW1lLmxpbmVubyk7Ci0gICAgICAgICAgICAgICAgTkFNRVMuQWRkKHByb3h5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW1zLT5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfUlBDKSB7Ci0gICAgICAgICAgICAgICAgLy8gZm9yIGludGVyZmFjZXMsIGFsc28gYWRkIHRoZSBzZXJ2aWNlIGJhc2UgdHlwZSwgd2UgZG9uJ3QKLSAgICAgICAgICAgICAgICAvLyBib3RoZXIgY2hlY2tpbmcgdGhlc2UgZm9yIGR1cGxpY2F0ZXMsIGJlY2F1c2UgdGhlIHBhcnNlcgotICAgICAgICAgICAgICAgIC8vIHdvbid0IGxldCB1cyBkbyBpdC4KLSAgICAgICAgICAgICAgICBpbnRlcmZhY2VfdHlwZSogYyA9IChpbnRlcmZhY2VfdHlwZSopaXRlbXM7Ci0KLSAgICAgICAgICAgICAgICBzdHJpbmcgbmFtZSA9IGMtPm5hbWUuZGF0YTsKLSAgICAgICAgICAgICAgICBuYW1lICs9ICIuU2VydmljZUJhc2UiOwotICAgICAgICAgICAgICAgIFR5cGUqIGJhc2UgPSBuZXcgVHlwZShjLT5wYWNrYWdlID8gYy0+cGFja2FnZSA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIFR5cGU6OkdFTkVSQVRFRCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgYy0+bmFtZS5saW5lbm8pOwotICAgICAgICAgICAgICAgIE5BTUVTLkFkZChiYXNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChvbGQtPktpbmQoKSA9PSBUeXBlOjpCVUlMVF9JTikgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgYXR0ZW1wdCB0byByZWRlZmluZSBidWlsdCBpbiBjbGFzcyAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgdHlwZS0+RGVjbExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgZXJyID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUtPktpbmQoKSAhPSBvbGQtPktpbmQoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG9sZEtpbmQgPSBraW5kX3RvX3N0cmluZyhvbGQtPktpbmQoKSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmV3S2luZCA9IGtpbmRfdG9fc3RyaW5nKHR5cGUtPktpbmQoKSk7Ci0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIGF0dGVtcHQgdG8gcmVkZWZpbmUgJXMgYXMgJXMsXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCB0eXBlLT5EZWNsTGluZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPlF1YWxpZmllZE5hbWUoKS5jX3N0cigpLCBuZXdLaW5kKTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkICAgIHByZXZpb3VzbHkgZGVmaW5lZCBoZXJlIGFzICVzLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQtPkRlY2xGaWxlKCkuY19zdHIoKSwgb2xkLT5EZWNsTGluZSgpLCBvbGRLaW5kKTsKLSAgICAgICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaXRlbXMgPSBpdGVtcy0+bmV4dDsKLSAgICB9Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGJvb2wKLW1hdGNoZXNfa2V5d29yZChjb25zdCBjaGFyKiBzdHIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIEtFWVdPUkRTW10gPSB7ICJhYnN0cmFjdCIsICJhc3NlcnQiLCAiYm9vbGVhbiIsICJicmVhayIsCi0gICAgICAgICJieXRlIiwgImNhc2UiLCAiY2F0Y2giLCAiY2hhciIsICJjbGFzcyIsICJjb25zdCIsICJjb250aW51ZSIsCi0gICAgICAgICJkZWZhdWx0IiwgImRvIiwgImRvdWJsZSIsICJlbHNlIiwgImVudW0iLCAiZXh0ZW5kcyIsICJmaW5hbCIsCi0gICAgICAgICJmaW5hbGx5IiwgImZsb2F0IiwgImZvciIsICJnb3RvIiwgImlmIiwgImltcGxlbWVudHMiLCAiaW1wb3J0IiwKLSAgICAgICAgImluc3RhbmNlb2YiLCAiaW50IiwgImludGVyZmFjZSIsICJsb25nIiwgIm5hdGl2ZSIsICJuZXciLCAicGFja2FnZSIsCi0gICAgICAgICJwcml2YXRlIiwgInByb3RlY3RlZCIsICJwdWJsaWMiLCAicmV0dXJuIiwgInNob3J0IiwgInN0YXRpYyIsCi0gICAgICAgICJzdHJpY3RmcCIsICJzdXBlciIsICJzd2l0Y2giLCAic3luY2hyb25pemVkIiwgInRoaXMiLCAidGhyb3ciLAotICAgICAgICAidGhyb3dzIiwgInRyYW5zaWVudCIsICJ0cnkiLCAidm9pZCIsICJ2b2xhdGlsZSIsICJ3aGlsZSIsCi0gICAgICAgICJ0cnVlIiwgImZhbHNlIiwgIm51bGwiLAotICAgICAgICBOVUxMCi0gICAgfTsKLSAgICBjb25zdCBjaGFyKiogayA9IEtFWVdPUkRTOwotICAgIHdoaWxlICgqaykgewotICAgICAgICBpZiAoMCA9PSBzdHJjbXAoc3RyLCAqaykpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGsrKzsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW50Ci1jaGVja19tZXRob2QoY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBraW5kLCBtZXRob2RfdHlwZSogbSkKLXsKLSAgICBpbnQgZXJyID0gMDsKLQotICAgIC8vIHJldHVybiB0eXBlCi0gICAgVHlwZSogcmV0dXJuVHlwZSA9IE5BTUVTLlNlYXJjaChtLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgaWYgKHJldHVyblR5cGUgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHVua25vd24gcmV0dXJuIHR5cGUgJXNcbiIsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICBtLT50eXBlLnR5cGUubGluZW5vLCBtLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgIGVyciA9IDE7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgaWYgKHJldHVyblR5cGUgPT0gRVZFTlRfRkFLRV9UWVBFKSB7Ci0gICAgICAgIGlmIChraW5kICE9IElOVEVSRkFDRV9UWVBFX1JQQykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBldmVudCBtZXRob2RzIG9ubHkgc3VwcG9ydGVkIGZvciBycGMgaW50ZXJmYWNlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIG0tPnR5cGUudHlwZS5saW5lbm8pOwotICAgICAgICAgICAgZXJyID0gMTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghKGtpbmQgPT0gSU5URVJGQUNFX1RZUEVfQklOREVSID8gcmV0dXJuVHlwZS0+Q2FuV3JpdGVUb1BhcmNlbCgpCi0gICAgICAgICAgICAgICAgICAgIDogcmV0dXJuVHlwZS0+Q2FuV3JpdGVUb1JwY0RhdGEoKSkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgcmV0dXJuIHR5cGUgJXMgY2FuJ3QgYmUgbWFyc2hhbGxlZC5cbiIsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgbS0+dHlwZS50eXBlLmxpbmVubywgbS0+dHlwZS50eXBlLmRhdGEpOwotICAgICAgICAgICAgZXJyID0gMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtLT50eXBlLmRpbWVuc2lvbiA+IDAgJiYgIXJldHVyblR5cGUtPkNhbkJlQXJyYXkoKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHJldHVybiB0eXBlICVzJXMgY2FuJ3QgYmUgYW4gYXJyYXkuXG4iLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICBtLT50eXBlLmFycmF5X3Rva2VuLmxpbmVubywgbS0+dHlwZS50eXBlLmRhdGEsCi0gICAgICAgICAgICAgICAgbS0+dHlwZS5hcnJheV90b2tlbi5kYXRhKTsKLSAgICAgICAgZXJyID0gMTsKLSAgICB9Ci0KLSAgICBpZiAobS0+dHlwZS5kaW1lbnNpb24gPiAxKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgcmV0dXJuIHR5cGUgJXMlcyBvbmx5IG9uZSIKLSAgICAgICAgICAgICAgICAiIGRpbWVuc2lvbmFsIGFycmF5cyBhcmUgc3VwcG9ydGVkXG4iLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICBtLT50eXBlLmFycmF5X3Rva2VuLmxpbmVubywgbS0+dHlwZS50eXBlLmRhdGEsCi0gICAgICAgICAgICAgICAgbS0+dHlwZS5hcnJheV90b2tlbi5kYXRhKTsKLSAgICAgICAgZXJyID0gMTsKLSAgICB9Ci0KLSAgICBpbnQgaW5kZXggPSAxOwotCi0gICAgYXJnX3R5cGUqIGFyZyA9IG0tPmFyZ3M7Ci0gICAgd2hpbGUgKGFyZykgewotICAgICAgICBUeXBlKiB0ID0gTkFNRVMuU2VhcmNoKGFyZy0+dHlwZS50eXBlLmRhdGEpOwotCi0gICAgICAgIC8vIGNoZWNrIHRoZSBhcmcgdHlwZQotICAgICAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHBhcmFtZXRlciAlcyAoJWQpIHVua25vd24gdHlwZSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIG0tPnR5cGUudHlwZS5saW5lbm8sIGFyZy0+bmFtZS5kYXRhLCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgYXJnLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICAgICAgZ290byBuZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHQgPT0gRVZFTlRfRkFLRV9UWVBFKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHBhcmFtZXRlciAlcyAoJWQpIGV2ZW50IGNhbiBub3QgYmUgdXNlZCBhcyBhIHBhcmFtZXRlciAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIG0tPnR5cGUudHlwZS5saW5lbm8sIGFyZy0+bmFtZS5kYXRhLCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgYXJnLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICAgICAgZ290byBuZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCEoa2luZCA9PSBJTlRFUkZBQ0VfVFlQRV9CSU5ERVIgPyB0LT5DYW5Xcml0ZVRvUGFyY2VsKCkgOiB0LT5DYW5Xcml0ZVRvUnBjRGF0YSgpKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBwYXJhbWV0ZXIgJWQ6ICclcyAlcycgY2FuJ3QgYmUgbWFyc2hhbGxlZC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbS0+dHlwZS50eXBlLmxpbmVubywgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmctPnR5cGUudHlwZS5kYXRhLCBhcmctPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJldHVyblR5cGUgPT0gRVZFTlRfRkFLRV9UWVBFCi0gICAgICAgICAgICAgICAgJiYgY29udmVydF9kaXJlY3Rpb24oYXJnLT5kaXJlY3Rpb24uZGF0YSkgIT0gSU5fUEFSQU1FVEVSKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHBhcmFtZXRlciAlZDogJyVzICVzJyBBbGwgcGFyZW1ldGVycyBvbiBldmVudHMgbXVzdCBiZSAnaW4nLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIG0tPnR5cGUudHlwZS5saW5lbm8sIGluZGV4LAotICAgICAgICAgICAgICAgICAgICBhcmctPnR5cGUudHlwZS5kYXRhLCBhcmctPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICAgICAgZ290byBuZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFyZy0+ZGlyZWN0aW9uLmRhdGEgPT0gTlVMTAotICAgICAgICAgICAgICAgICYmIChhcmctPnR5cGUuZGltZW5zaW9uICE9IDAgfHwgdC0+Q2FuQmVPdXRQYXJhbWV0ZXIoKSkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgcGFyYW1ldGVyICVkOiAnJXMgJXMnIGNhbiBiZSBhbiBvdXQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcGFyYW1ldGVyLCBzbyB5b3UgbXVzdCBkZWNsYXJlIGl0IGFzIGluLCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvdXQgb3IgaW5vdXQuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIG0tPnR5cGUudHlwZS5saW5lbm8sIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgYXJnLT50eXBlLnR5cGUuZGF0YSwgYXJnLT5uYW1lLmRhdGEpOwotICAgICAgICAgICAgZXJyID0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb252ZXJ0X2RpcmVjdGlvbihhcmctPmRpcmVjdGlvbi5kYXRhKSAhPSBJTl9QQVJBTUVURVIKLSAgICAgICAgICAgICAgICAmJiAhdC0+Q2FuQmVPdXRQYXJhbWV0ZXIoKQotICAgICAgICAgICAgICAgICYmIGFyZy0+dHlwZS5kaW1lbnNpb24gPT0gMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBwYXJhbWV0ZXIgJWQ6ICclcyAlcyAlcycgY2FuIG9ubHkgYmUgYW4gaW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwYXJhbWV0ZXIuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIG0tPnR5cGUudHlwZS5saW5lbm8sIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgYXJnLT5kaXJlY3Rpb24uZGF0YSwgYXJnLT50eXBlLnR5cGUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+bmFtZS5kYXRhKTsKLSAgICAgICAgICAgIGVyciA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXJnLT50eXBlLmRpbWVuc2lvbiA+IDAgJiYgIXQtPkNhbkJlQXJyYXkoKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBwYXJhbWV0ZXIgJWQ6ICclcyAlcyVzICVzJyBjYW4ndCBiZSBhbiIKLSAgICAgICAgICAgICAgICAgICAgIiBhcnJheS5cbiIsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICBtLT50eXBlLmFycmF5X3Rva2VuLmxpbmVubywgaW5kZXgsIGFyZy0+ZGlyZWN0aW9uLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIGFyZy0+dHlwZS50eXBlLmRhdGEsIGFyZy0+dHlwZS5hcnJheV90b2tlbi5kYXRhLAotICAgICAgICAgICAgICAgICAgICBhcmctPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFyZy0+dHlwZS5kaW1lbnNpb24gPiAxKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHBhcmFtZXRlciAlZDogJyVzICVzJXMgJXMnIG9ubHkgb25lIgotICAgICAgICAgICAgICAgICAgICAiIGRpbWVuc2lvbmFsIGFycmF5cyBhcmUgc3VwcG9ydGVkXG4iLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgbS0+dHlwZS5hcnJheV90b2tlbi5saW5lbm8sIGluZGV4LCBhcmctPmRpcmVjdGlvbi5kYXRhLAotICAgICAgICAgICAgICAgICAgICBhcmctPnR5cGUudHlwZS5kYXRhLCBhcmctPnR5cGUuYXJyYXlfdG9rZW4uZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgYXJnLT5uYW1lLmRhdGEpOwotICAgICAgICAgICAgZXJyID0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIG5hbWUgZG9lc24ndCBtYXRjaCBhIGtleXdvcmQKLSAgICAgICAgaWYgKG1hdGNoZXNfa2V5d29yZChhcmctPm5hbWUuZGF0YSkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgcGFyYW1ldGVyICVkICVzIGlzIG5hbWVkIHRoZSBzYW1lIGFzIGEiCi0gICAgICAgICAgICAgICAgICAgICIgSmF2YSBvciBhaWRsIGtleXdvcmRcbiIsCi0gICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBtLT5uYW1lLmxpbmVubywgaW5kZXgsIGFyZy0+bmFtZS5kYXRhKTsKLSAgICAgICAgICAgIGVyciA9IDE7Ci0gICAgICAgIH0KLQotbmV4dDoKLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgYXJnID0gYXJnLT5uZXh0OwotICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQKLWNoZWNrX3R5cGVzKGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBkb2N1bWVudF9pdGVtX3R5cGUqIGl0ZW1zKQotewotICAgIGludCBlcnIgPSAwOwotICAgIHdoaWxlIChpdGVtcykgewotICAgICAgICAvLyAobm90aGluZyB0byBjaGVjayBmb3IgVVNFUl9EQVRBX1RZUEUpCi0gICAgICAgIGlmIChpdGVtcy0+aXRlbV90eXBlID09IElOVEVSRkFDRV9UWVBFX0JJTkRFUgotICAgICAgICAgICAgICAgIHx8IGl0ZW1zLT5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfUlBDKSB7Ci0gICAgICAgICAgICBtYXA8c3RyaW5nLG1ldGhvZF90eXBlKj4gbWV0aG9kTmFtZXM7Ci0gICAgICAgICAgICBpbnRlcmZhY2VfdHlwZSogYyA9IChpbnRlcmZhY2VfdHlwZSopaXRlbXM7Ci0KLSAgICAgICAgICAgIGludGVyZmFjZV9pdGVtX3R5cGUqIG1lbWJlciA9IGMtPmludGVyZmFjZV9pdGVtczsKLSAgICAgICAgICAgIHdoaWxlIChtZW1iZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAobWVtYmVyLT5pdGVtX3R5cGUgPT0gTUVUSE9EX1RZUEUpIHsKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3R5cGUqIG0gPSAobWV0aG9kX3R5cGUqKW1lbWJlcjsKLQotICAgICAgICAgICAgICAgICAgICBlcnIgfD0gY2hlY2tfbWV0aG9kKGZpbGVuYW1lLCBpdGVtcy0+aXRlbV90eXBlLCBtKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGR1cGxpY2F0ZSBtZXRob2RzCi0gICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2ROYW1lcy5maW5kKG0tPm5hbWUuZGF0YSkgPT0gbWV0aG9kTmFtZXMuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZE5hbWVzW20tPm5hbWUuZGF0YV0gPSBtOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIiVzOiVkIGF0dGVtcHQgdG8gcmVkZWZpbmUgbWV0aG9kICVzLFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIG0tPm5hbWUubGluZW5vLCBtLT5uYW1lLmRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3R5cGUqIG9sZCA9IG1ldGhvZE5hbWVzW20tPm5hbWUuZGF0YV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkICAgIHByZXZpb3VzbHkgZGVmaW5lZCBoZXJlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIG9sZC0+bmFtZS5saW5lbm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1iZXIgPSBtZW1iZXItPm5leHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpdGVtcyA9IGl0ZW1zLT5uZXh0OwotICAgIH0KLSAgICByZXR1cm4gZXJyOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW50Ci1leGFjdGx5X29uZV9pbnRlcmZhY2UoY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IGRvY3VtZW50X2l0ZW1fdHlwZSogaXRlbXMsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCogb25seVBhcmNlbGFibGUpCi17Ci0gICAgaWYgKGl0ZW1zID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBpbnRlcmZhY2VzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgY29uc3QgZG9jdW1lbnRfaXRlbV90eXBlKiBuZXh0ID0gaXRlbXMtPm5leHQ7Ci0gICAgLy8gQWxsb3cgcGFyY2VsYWJsZXMgdG8gc2tpcCB0aGUgIm9uZS1vbmx5IiBydWxlLgotICAgIGlmIChpdGVtcy0+bmV4dCAhPSBOVUxMICYmIG5leHQtPml0ZW1fdHlwZSAhPSBVU0VSX0RBVEFfVFlQRSkgewotICAgICAgICBpbnQgbGluZW5vID0gLTE7Ci0gICAgICAgIGlmIChuZXh0LT5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfQklOREVSKSB7Ci0gICAgICAgICAgICBsaW5lbm8gPSAoKGludGVyZmFjZV90eXBlKiluZXh0KS0+aW50ZXJmYWNlX3Rva2VuLmxpbmVubzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChuZXh0LT5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfUlBDKSB7Ci0gICAgICAgICAgICBsaW5lbm8gPSAoKGludGVyZmFjZV90eXBlKiluZXh0KS0+aW50ZXJmYWNlX3Rva2VuLmxpbmVubzsKLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIGFpZGwgY2FuIG9ubHkgaGFuZGxlIG9uZSBpbnRlcmZhY2UgcGVyIGZpbGVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmIChpdGVtcy0+aXRlbV90eXBlID09IFVTRVJfREFUQV9UWVBFKSB7Ci0gICAgICAgICpvbmx5UGFyY2VsYWJsZSA9IHRydWU7Ci0gICAgICAgIGlmIChvcHRpb25zLmZhaWxPblBhcmNlbGFibGUpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgYWlkbCBjYW4gb25seSBnZW5lcmF0ZSBjb2RlIGZvciBpbnRlcmZhY2VzLCBub3QiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwYXJjZWxhYmxlcyBvciBmbGF0dGVuYWJsZXMsXG4iLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVzZXJfZGF0YV90eXBlKilpdGVtcyktPmtleXdvcmRfdG9rZW4ubGluZW5vKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgLmFpZGwgZmlsZXMgdGhhdCBvbmx5IGRlY2xhcmUgcGFyY2VsYWJsZXMgb3IgZmxhdHRlbmFibGVzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXkgbm90IGdvIGluIHRoZSBNYWtlZmlsZS5cbiIsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodXNlcl9kYXRhX3R5cGUqKWl0ZW1zKS0+a2V5d29yZF90b2tlbi5saW5lbm8pOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAqb25seVBhcmNlbGFibGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdm9pZAotZ2VuZXJhdGVfZGVwX2ZpbGUoY29uc3QgT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgZG9jdW1lbnRfaXRlbV90eXBlKiBpdGVtcykKLXsKLSAgICAvKiB3ZSBvcGVuIHRoZSBmaWxlIGluIGJpbmFyeSBtb2RlIHRvIGVuc3VyZSB0aGF0IHRoZSBzYW1lIG91dHB1dCBpcwotICAgICAqIGdlbmVyYXRlZCBvbiBhbGwgcGxhdGZvcm1zICEhCi0gICAgICovCi0gICAgRklMRSogdG8gPSBOVUxMOwotICAgIGlmIChvcHRpb25zLmF1dG9EZXBGaWxlKSB7Ci0gICAgICAgIHN0cmluZyBmaWxlTmFtZSA9IG9wdGlvbnMub3V0cHV0RmlsZU5hbWUgKyAiLmQiOwotICAgICAgICB0byA9IGZvcGVuKGZpbGVOYW1lLmNfc3RyKCksICJ3YiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRvID0gZm9wZW4ob3B0aW9ucy5kZXBGaWxlTmFtZS5jX3N0cigpLCAid2IiKTsKLSAgICB9Ci0KLSAgICBpZiAodG8gPT0gTlVMTCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogc2xhc2ggPSAiXFwiOwotICAgIGltcG9ydF9pbmZvKiBpbXBvcnQgPSBnX2ltcG9ydHM7Ci0gICAgaWYgKGltcG9ydCA9PSBOVUxMKSB7Ci0gICAgICAgIHNsYXNoID0gIiI7Ci0gICAgfQotCi0gICAgaWYgKGl0ZW1zLT5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfQklOREVSIHx8IGl0ZW1zLT5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfUlBDKSB7Ci0gICAgICAgIGZwcmludGYodG8sICIlczogXFxcbiIsIG9wdGlvbnMub3V0cHV0RmlsZU5hbWUuY19zdHIoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gcGFyY2VsYWJsZTogdGhlcmUncyBubyBvdXRwdXQgZmlsZS4KLSAgICAgICAgZnByaW50Zih0bywgIiA6IFxcXG4iKTsKLSAgICB9Ci0gICAgZnByaW50Zih0bywgIiAgJXMgJXNcbiIsIG9wdGlvbnMuaW5wdXRGaWxlTmFtZS5jX3N0cigpLCBzbGFzaCk7Ci0KLSAgICB3aGlsZSAoaW1wb3J0KSB7Ci0gICAgICAgIGlmIChpbXBvcnQtPm5leHQgPT0gTlVMTCkgewotICAgICAgICAgICAgc2xhc2ggPSAiIjsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW1wb3J0LT5maWxlbmFtZSkgewotICAgICAgICAgICAgZnByaW50Zih0bywgIiAgJXMgJXNcbiIsIGltcG9ydC0+ZmlsZW5hbWUsIHNsYXNoKTsKLSAgICAgICAgfQotICAgICAgICBpbXBvcnQgPSBpbXBvcnQtPm5leHQ7Ci0gICAgfQotCi0gICAgZnByaW50Zih0bywgIlxuIik7Ci0KLSAgICAvLyBPdXRwdXQgIjxpbXBvcnRlZF9maWxlPjogIiBzbyBtYWtlIHdvbid0IGZhaWwgaWYgdGhlIGltcG9ydGVkIGZpbGUgaGFzCi0gICAgLy8gYmVlbiBkZWxldGVkLCBtb3ZlZCBvciByZW5hbWVkIGluIGluY3JlbWVudGFsIGJ1aWxkLgotICAgIGltcG9ydCA9IGdfaW1wb3J0czsKLSAgICB3aGlsZSAoaW1wb3J0KSB7Ci0gICAgICAgIGlmIChpbXBvcnQtPmZpbGVuYW1lKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHRvLCAiJXMgOlxuIiwgaW1wb3J0LT5maWxlbmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW1wb3J0ID0gaW1wb3J0LT5uZXh0OwotICAgIH0KLQotICAgIGZjbG9zZSh0byk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBzdHJpbmcKLWdlbmVyYXRlX291dHB1dEZpbGVOYW1lMihjb25zdCBPcHRpb25zJiBvcHRpb25zLCBjb25zdCBidWZmZXJfdHlwZSYgbmFtZSwgY29uc3QgY2hhciogcGFja2FnZSkKLXsKLSAgICBzdHJpbmcgcmVzdWx0OwotCi0gICAgLy8gY3JlYXRlIHRoZSBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIgYmFzZWQgb24gdGhlCi0gICAgLy8gaW50ZXJmYWNlIHBhY2thZ2UgbmFtZQotICAgIHJlc3VsdCA9IG9wdGlvbnMub3V0cHV0QmFzZUZvbGRlcjsKLSAgICByZXN1bHQgKz0gT1NfUEFUSF9TRVBBUkFUT1I7Ci0KLSAgICBzdHJpbmcgcGFja2FnZVN0ciA9IHBhY2thZ2U7Ci0gICAgc2l6ZV90IGxlbiA9IHBhY2thZ2VTdHIubGVuZ3RoKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPGxlbjsgaSsrKSB7Ci0gICAgICAgIGlmIChwYWNrYWdlU3RyW2ldID09ICcuJykgewotICAgICAgICAgICAgcGFja2FnZVN0cltpXSA9IE9TX1BBVEhfU0VQQVJBVE9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVzdWx0ICs9IHBhY2thZ2VTdHI7Ci0KLSAgICAvLyBhZGQgdGhlIGZpbGVuYW1lIGJ5IHJlcGxhY2luZyB0aGUgLmFpZGwgZXh0ZW5zaW9uIHRvIC5qYXZhCi0gICAgY29uc3QgY2hhciogcCA9IHN0cmNocihuYW1lLmRhdGEsICcuJyk7Ci0gICAgbGVuID0gcCA/IHAtbmFtZS5kYXRhIDogc3RybGVuKG5hbWUuZGF0YSk7Ci0KLSAgICByZXN1bHQgKz0gT1NfUEFUSF9TRVBBUkFUT1I7Ci0gICAgcmVzdWx0LmFwcGVuZChuYW1lLmRhdGEsIGxlbik7Ci0gICAgcmVzdWx0ICs9ICIuamF2YSI7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgc3RyaW5nCi1nZW5lcmF0ZV9vdXRwdXRGaWxlTmFtZShjb25zdCBPcHRpb25zJiBvcHRpb25zLCBjb25zdCBkb2N1bWVudF9pdGVtX3R5cGUqIGl0ZW1zKQotewotICAgIC8vIGl0ZW1zIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCB0byBoYXZlIG9ubHkgb25lIGludGVyZmFjZS4KLSAgICBpZiAoaXRlbXMtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9CSU5ERVIgfHwgaXRlbXMtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9SUEMpIHsKLSAgICAgICAgaW50ZXJmYWNlX3R5cGUqIHR5cGUgPSAoaW50ZXJmYWNlX3R5cGUqKWl0ZW1zOwotCi0gICAgICAgIHJldHVybiBnZW5lcmF0ZV9vdXRwdXRGaWxlTmFtZTIob3B0aW9ucywgdHlwZS0+bmFtZSwgdHlwZS0+cGFja2FnZSk7Ci0gICAgfSBlbHNlIGlmIChpdGVtcy0+aXRlbV90eXBlID09IFVTRVJfREFUQV9UWVBFKSB7Ci0gICAgICAgIHVzZXJfZGF0YV90eXBlKiB0eXBlID0gKHVzZXJfZGF0YV90eXBlKilpdGVtczsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlX291dHB1dEZpbGVOYW1lMihvcHRpb25zLCB0eXBlLT5uYW1lLCB0eXBlLT5wYWNrYWdlKTsKLSAgICB9Ci0KLSAgICAvLyBJIGRvbid0IHRoaW5rIHdlIGNhbiBjb21lIGhlcmUsIGJ1dCBzYWZlciB0aGFuIHJldHVybmluZyBOVUxMLgotICAgIHN0cmluZyByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyB2b2lkCi1jaGVja19vdXRwdXRGaWxlUGF0aChjb25zdCBzdHJpbmcmIHBhdGgpIHsKLSAgICBzaXplX3QgbGVuID0gcGF0aC5sZW5ndGgoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8bGVuIDsgaSsrKSB7Ci0gICAgICAgIGlmIChwYXRoW2ldID09IE9TX1BBVEhfU0VQQVJBVE9SKSB7Ci0gICAgICAgICAgICBzdHJpbmcgcCA9IHBhdGguc3Vic3RyKDAsIGkpOwotICAgICAgICAgICAgaWYgKGFjY2VzcyhwYXRoLmRhdGEoKSwgRl9PSykgIT0gMCkgewotI2lmZGVmIEhBVkVfTVNfQ19SVU5USU1FCi0gICAgICAgICAgICAgICAgX21rZGlyKHAuZGF0YSgpKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgbWtkaXIocC5kYXRhKCksIFNfSVJVU1J8U19JV1VTUnxTX0lYVVNSfFNfSVJHUlB8U19JWEdSUCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW50Ci1wYXJzZV9wcmVwcm9jZXNzZWRfZmlsZShjb25zdCBzdHJpbmcmIGZpbGVuYW1lKQotewotICAgIGludCBlcnI7Ci0KLSAgICBGSUxFKiBmID0gZm9wZW4oZmlsZW5hbWUuY19zdHIoKSwgInJiIik7Ci0gICAgaWYgKGYgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6IGNhbid0IG9wZW4gcHJlcHJvY2Vzc2VkIGZpbGU6ICVzXG4iLAotICAgICAgICAgICAgICAgIGZpbGVuYW1lLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpbnQgbGluZW5vID0gMTsKLSAgICBjaGFyIGxpbmVbMTAyNF07Ci0gICAgY2hhciB0eXBlWzEwMjRdOwotICAgIGNoYXIgZnVsbG5hbWVbMTAyNF07Ci0gICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKLSAgICAgICAgLy8gc2tpcCBjb21tZW50cyBhbmQgZW1wdHkgbGluZXMKLSAgICAgICAgaWYgKCFsaW5lWzBdIHx8IHN0cm5jbXAobGluZSwgIi8vIiwgMikgPT0gMCkgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgc3NjYW5mKGxpbmUsICIlcyAlW147IFxyXG5cdF07IiwgdHlwZSwgZnVsbG5hbWUpOwotCi0gICAgICAgIGNoYXIqIHBhY2thZ2VuYW1lOwotICAgICAgICBjaGFyKiBjbGFzc25hbWUgPSByZmluZChmdWxsbmFtZSwgJy4nKTsKLSAgICAgICAgaWYgKGNsYXNzbmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAqY2xhc3NuYW1lID0gJ1wwJzsKLSAgICAgICAgICAgIGNsYXNzbmFtZSsrOwotICAgICAgICAgICAgcGFja2FnZW5hbWUgPSBmdWxsbmFtZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNsYXNzbmFtZSA9IGZ1bGxuYW1lOwotICAgICAgICAgICAgcGFja2FnZW5hbWUgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgLy9wcmludGYoIiVzOiVkOi4uLiVzLi4uJXMuLi4lcy4uLlxuIiwgZmlsZW5hbWUuY19zdHIoKSwgbGluZW5vLAotICAgICAgICAvLyAgICAgICAgdHlwZSwgcGFja2FnZW5hbWUsIGNsYXNzbmFtZSk7Ci0gICAgICAgIGRvY3VtZW50X2l0ZW1fdHlwZSogZG9jOwotCi0gICAgICAgIGlmICgwID09IHN0cmNtcCgicGFyY2VsYWJsZSIsIHR5cGUpKSB7Ci0gICAgICAgICAgICB1c2VyX2RhdGFfdHlwZSogcGFyY2wgPSAodXNlcl9kYXRhX3R5cGUqKW1hbGxvYygKLSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVzZXJfZGF0YV90eXBlKSk7Ci0gICAgICAgICAgICBtZW1zZXQocGFyY2wsIDAsIHNpemVvZih1c2VyX2RhdGFfdHlwZSkpOwotICAgICAgICAgICAgcGFyY2wtPmRvY3VtZW50X2l0ZW0uaXRlbV90eXBlID0gVVNFUl9EQVRBX1RZUEU7Ci0gICAgICAgICAgICBwYXJjbC0+a2V5d29yZF90b2tlbi5saW5lbm8gPSBsaW5lbm87Ci0gICAgICAgICAgICBwYXJjbC0+a2V5d29yZF90b2tlbi5kYXRhID0gc3RyZHVwKHR5cGUpOwotICAgICAgICAgICAgcGFyY2wtPnBhY2thZ2UgPSBwYWNrYWdlbmFtZSA/IHN0cmR1cChwYWNrYWdlbmFtZSkgOiBOVUxMOwotICAgICAgICAgICAgcGFyY2wtPm5hbWUubGluZW5vID0gbGluZW5vOwotICAgICAgICAgICAgcGFyY2wtPm5hbWUuZGF0YSA9IHN0cmR1cChjbGFzc25hbWUpOwotICAgICAgICAgICAgcGFyY2wtPnNlbWljb2xvbl90b2tlbi5saW5lbm8gPSBsaW5lbm87Ci0gICAgICAgICAgICBwYXJjbC0+c2VtaWNvbG9uX3Rva2VuLmRhdGEgPSBzdHJkdXAoIjsiKTsKLSAgICAgICAgICAgIHBhcmNsLT5mbGF0dGVuaW5nX21ldGhvZHMgPSBQQVJDRUxBQkxFX0RBVEE7Ci0gICAgICAgICAgICBkb2MgPSAoZG9jdW1lbnRfaXRlbV90eXBlKilwYXJjbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgwID09IHN0cmNtcCgiZmxhdHRlbmFibGUiLCB0eXBlKSkgewotICAgICAgICAgICAgdXNlcl9kYXRhX3R5cGUqIHBhcmNsID0gKHVzZXJfZGF0YV90eXBlKiltYWxsb2MoCi0gICAgICAgICAgICAgICAgICAgIHNpemVvZih1c2VyX2RhdGFfdHlwZSkpOwotICAgICAgICAgICAgbWVtc2V0KHBhcmNsLCAwLCBzaXplb2YodXNlcl9kYXRhX3R5cGUpKTsKLSAgICAgICAgICAgIHBhcmNsLT5kb2N1bWVudF9pdGVtLml0ZW1fdHlwZSA9IFVTRVJfREFUQV9UWVBFOwotICAgICAgICAgICAgcGFyY2wtPmtleXdvcmRfdG9rZW4ubGluZW5vID0gbGluZW5vOwotICAgICAgICAgICAgcGFyY2wtPmtleXdvcmRfdG9rZW4uZGF0YSA9IHN0cmR1cCh0eXBlKTsKLSAgICAgICAgICAgIHBhcmNsLT5wYWNrYWdlID0gcGFja2FnZW5hbWUgPyBzdHJkdXAocGFja2FnZW5hbWUpIDogTlVMTDsKLSAgICAgICAgICAgIHBhcmNsLT5uYW1lLmxpbmVubyA9IGxpbmVubzsKLSAgICAgICAgICAgIHBhcmNsLT5uYW1lLmRhdGEgPSBzdHJkdXAoY2xhc3NuYW1lKTsKLSAgICAgICAgICAgIHBhcmNsLT5zZW1pY29sb25fdG9rZW4ubGluZW5vID0gbGluZW5vOwotICAgICAgICAgICAgcGFyY2wtPnNlbWljb2xvbl90b2tlbi5kYXRhID0gc3RyZHVwKCI7Iik7Ci0gICAgICAgICAgICBwYXJjbC0+ZmxhdHRlbmluZ19tZXRob2RzID0gUlBDX0RBVEE7Ci0gICAgICAgICAgICBkb2MgPSAoZG9jdW1lbnRfaXRlbV90eXBlKilwYXJjbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgwID09IHN0cmNtcCgiaW50ZXJmYWNlIiwgdHlwZSkpIHsKLSAgICAgICAgICAgIGludGVyZmFjZV90eXBlKiBpZmFjZSA9IChpbnRlcmZhY2VfdHlwZSopbWFsbG9jKAotICAgICAgICAgICAgICAgICAgICBzaXplb2YoaW50ZXJmYWNlX3R5cGUpKTsKLSAgICAgICAgICAgIG1lbXNldChpZmFjZSwgMCwgc2l6ZW9mKGludGVyZmFjZV90eXBlKSk7Ci0gICAgICAgICAgICBpZmFjZS0+ZG9jdW1lbnRfaXRlbS5pdGVtX3R5cGUgPSBJTlRFUkZBQ0VfVFlQRV9CSU5ERVI7Ci0gICAgICAgICAgICBpZmFjZS0+aW50ZXJmYWNlX3Rva2VuLmxpbmVubyA9IGxpbmVubzsKLSAgICAgICAgICAgIGlmYWNlLT5pbnRlcmZhY2VfdG9rZW4uZGF0YSA9IHN0cmR1cCh0eXBlKTsKLSAgICAgICAgICAgIGlmYWNlLT5wYWNrYWdlID0gcGFja2FnZW5hbWUgPyBzdHJkdXAocGFja2FnZW5hbWUpIDogTlVMTDsKLSAgICAgICAgICAgIGlmYWNlLT5uYW1lLmxpbmVubyA9IGxpbmVubzsKLSAgICAgICAgICAgIGlmYWNlLT5uYW1lLmRhdGEgPSBzdHJkdXAoY2xhc3NuYW1lKTsKLSAgICAgICAgICAgIGlmYWNlLT5vcGVuX2JyYWNlX3Rva2VuLmxpbmVubyA9IGxpbmVubzsKLSAgICAgICAgICAgIGlmYWNlLT5vcGVuX2JyYWNlX3Rva2VuLmRhdGEgPSBzdHJkdXAoInsiKTsKLSAgICAgICAgICAgIGlmYWNlLT5jbG9zZV9icmFjZV90b2tlbi5saW5lbm8gPSBsaW5lbm87Ci0gICAgICAgICAgICBpZmFjZS0+Y2xvc2VfYnJhY2VfdG9rZW4uZGF0YSA9IHN0cmR1cCgifSIpOwotICAgICAgICAgICAgZG9jID0gKGRvY3VtZW50X2l0ZW1fdHlwZSopaWZhY2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBiYWQgdHlwZSBpbiBsaW5lOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUuY19zdHIoKSwgbGluZW5vLCBsaW5lKTsKLSAgICAgICAgICAgIGZjbG9zZShmKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IGdhdGhlcl90eXBlcyhmaWxlbmFtZS5jX3N0cigpLCBkb2MpOwotICAgICAgICBsaW5lbm8rKzsKLSAgICB9Ci0KLSAgICBpZiAoIWZlb2YoZikpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogZXJyb3IgcmVhZGluZyBmaWxlLCBsaW5lIHRvIGxvbmcuXG4iLAotICAgICAgICAgICAgICAgIGZpbGVuYW1lLmNfc3RyKCksIGxpbmVubyk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGZjbG9zZShmKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotY2hlY2tfYW5kX2Fzc2lnbl9tZXRob2RfaWRzKGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgaW50ZXJmYWNlX2l0ZW1fdHlwZSogZmlyc3RfaXRlbSkKLXsKLSAgICAvLyBDaGVjayB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbWV0aG9kcyB3aXRoIG1hbnVhbGx5IGFzc2lnbmVkIGlkJ3MgYW5kIGFueSB0aGF0IGFyZSBub3QuCi0gICAgLy8gRWl0aGVyIGFsbCBtZXRob2QgaWQncyBtdXN0IGJlIG1hbnVhbGx5IGFzc2lnbmVkIG9yIGFsbCBvZiB0aGVtIG11c3Qgbm90LgotICAgIC8vIEFsc28sIGNoZWNrIGZvciBkdXBsaWNhdGVzIG9mIHVzZXIgc2V0IGlkJ3MgYW5kIHRoYXQgdGhlIGlkJ3MgYXJlIHdpdGhpbiB0aGUgcHJvcGVyIGJvdW5kcy4KLSAgICBzZXQ8aW50PiB1c2VkSWRzOwotICAgIGludGVyZmFjZV9pdGVtX3R5cGUqIGl0ZW0gPSBmaXJzdF9pdGVtOwotICAgIGJvb2wgaGFzVW5hc3NpZ25lZElkcyA9IGZhbHNlOwotICAgIGJvb2wgaGFzQXNzaWduZWRJZHMgPSBmYWxzZTsKLSAgICB3aGlsZSAoaXRlbSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChpdGVtLT5pdGVtX3R5cGUgPT0gTUVUSE9EX1RZUEUpIHsKLSAgICAgICAgICAgIG1ldGhvZF90eXBlKiBtZXRob2RfaXRlbSA9IChtZXRob2RfdHlwZSopaXRlbTsKLSAgICAgICAgICAgIGlmIChtZXRob2RfaXRlbS0+aGFzSWQpIHsKLSAgICAgICAgICAgICAgICBoYXNBc3NpZ25lZElkcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbWV0aG9kX2l0ZW0tPmFzc2lnbmVkX2lkID0gYXRvaShtZXRob2RfaXRlbS0+aWQuZGF0YSk7Ci0gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHVzZXIgc2V0IGlkIGlzIG5vdCBkdXBsaWNhdGVkLgotICAgICAgICAgICAgICAgIGlmICh1c2VkSWRzLmZpbmQobWV0aG9kX2l0ZW0tPmFzc2lnbmVkX2lkKSAhPSB1c2VkSWRzLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgZHVwbGljYXRlIGlkLCBzbyB0aHJvdyBhbiBlcnJvci4KLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiVkIEZvdW5kIGR1cGxpY2F0ZSBtZXRob2QgaWQgKCVkKSBmb3IgbWV0aG9kOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbWV0aG9kX2l0ZW0tPmlkLmxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfaXRlbS0+YXNzaWduZWRfaWQsIG1ldGhvZF9pdGVtLT5uYW1lLmRhdGEpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHVzZXIgc2V0IGlkIGlzIHdpdGhpbiB0aGUgYXBwcm9wcmlhdGUgbGltaXRzCi0gICAgICAgICAgICAgICAgaWYgKG1ldGhvZF9pdGVtLT5hc3NpZ25lZF9pZCA8IE1JTl9VU0VSX1NFVF9NRVRIT0RfSUQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9pdGVtLT5hc3NpZ25lZF9pZCA+IE1BWF9VU0VSX1NFVF9NRVRIT0RfSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBGb3VuZCBvdXQgb2YgYm91bmRzIGlkICglZCkgZm9yIG1ldGhvZDogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIG1ldGhvZF9pdGVtLT5pZC5saW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2l0ZW0tPmFzc2lnbmVkX2lkLCBtZXRob2RfaXRlbS0+bmFtZS5kYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgVmFsdWUgZm9yIGlkIG11c3QgYmUgYmV0d2VlbiAlZCBhbmQgJWQgaW5jbHVzaXZlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU5fVVNFUl9TRVRfTUVUSE9EX0lELCBNQVhfVVNFUl9TRVRfTUVUSE9EX0lEKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHVzZWRJZHMuaW5zZXJ0KG1ldGhvZF9pdGVtLT5hc3NpZ25lZF9pZCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGhhc1VuYXNzaWduZWRJZHMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc0Fzc2lnbmVkSWRzICYmIGhhc1VuYXNzaWduZWRJZHMpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICIlczogWW91IG11c3QgZWl0aGVyIGFzc2lnbiBpZCdzIHRvIGFsbCBtZXRob2RzIG9yIHRvIG5vbmUgb2YgdGhlbS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaXRlbSA9IGl0ZW0tPm5leHQ7Ci0gICAgfQotCi0gICAgLy8gSW4gdGhlIGNhc2UgdGhhdCBhbGwgbWV0aG9kcyBoYXZlIHVuYXNzaWduZWQgaWQncywgc2V0IGEgdW5pcXVlIGlkIGZvciB0aGVtLgotICAgIGlmIChoYXNVbmFzc2lnbmVkSWRzKSB7Ci0gICAgICAgIGludCBuZXdJZCA9IDA7Ci0gICAgICAgIGl0ZW0gPSBmaXJzdF9pdGVtOwotICAgICAgICB3aGlsZSAoaXRlbSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoaXRlbS0+aXRlbV90eXBlID09IE1FVEhPRF9UWVBFKSB7Ci0gICAgICAgICAgICAgICAgbWV0aG9kX3R5cGUqIG1ldGhvZF9pdGVtID0gKG1ldGhvZF90eXBlKilpdGVtOwotICAgICAgICAgICAgICAgIG1ldGhvZF9pdGVtLT5hc3NpZ25lZF9pZCA9IG5ld0lkKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpdGVtID0gaXRlbS0+bmV4dDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIHN1Y2Nlc3MKLSAgICByZXR1cm4gMDsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIGludAotY29tcGlsZV9haWRsKE9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW50IGVyciA9IDAsIE47Ci0KLSAgICBzZXRfaW1wb3J0X3BhdGhzKG9wdGlvbnMuaW1wb3J0UGF0aHMpOwotCi0gICAgcmVnaXN0ZXJfYmFzZV90eXBlcygpOwotCi0gICAgLy8gaW1wb3J0IHRoZSBwcmVwcm9jZXNzZWQgZmlsZQotICAgIE4gPSBvcHRpb25zLnByZXByb2Nlc3NlZEZpbGVzLnNpemUoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHN0cmluZyYgcyA9IG9wdGlvbnMucHJlcHJvY2Vzc2VkRmlsZXNbaV07Ci0gICAgICAgIGVyciB8PSBwYXJzZV9wcmVwcm9jZXNzZWRfZmlsZShzKTsKLSAgICB9Ci0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLy8gcGFyc2UgdGhlIG1haW4gZmlsZQotICAgIGdfY2FsbGJhY2tzID0gJmdfbWFpbkNhbGxiYWNrczsKLSAgICBlcnIgPSBwYXJzZV9haWRsKG9wdGlvbnMuaW5wdXRGaWxlTmFtZS5jX3N0cigpKTsKLSAgICBkb2N1bWVudF9pdGVtX3R5cGUqIG1haW5Eb2MgPSBnX2RvY3VtZW50OwotICAgIGdfZG9jdW1lbnQgPSBOVUxMOwotCi0gICAgLy8gcGFyc2UgdGhlIGltcG9ydHMKLSAgICBnX2NhbGxiYWNrcyA9ICZnX21haW5DYWxsYmFja3M7Ci0gICAgaW1wb3J0X2luZm8qIGltcG9ydCA9IGdfaW1wb3J0czsKLSAgICB3aGlsZSAoaW1wb3J0KSB7Ci0gICAgICAgIGlmIChOQU1FUy5GaW5kKGltcG9ydC0+bmVlZGVkQ2xhc3MpID09IE5VTEwpIHsKLSAgICAgICAgICAgIGltcG9ydC0+ZmlsZW5hbWUgPSBmaW5kX2ltcG9ydF9maWxlKGltcG9ydC0+bmVlZGVkQ2xhc3MpOwotICAgICAgICAgICAgaWYgKCFpbXBvcnQtPmZpbGVuYW1lKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogY291bGRuJ3QgZmluZCBpbXBvcnQgZm9yIGNsYXNzICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0LT5mcm9tLCBpbXBvcnQtPnN0YXRlbWVudC5saW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQtPm5lZWRlZENsYXNzKTsKLSAgICAgICAgICAgICAgICBlcnIgfD0gMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXJyIHw9IHBhcnNlX2FpZGwoaW1wb3J0LT5maWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgaW1wb3J0LT5kb2MgPSBnX2RvY3VtZW50OwotICAgICAgICAgICAgICAgIGlmIChpbXBvcnQtPmRvYyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVyciB8PSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbXBvcnQgPSBpbXBvcnQtPm5leHQ7Ci0gICAgfQotICAgIC8vIGJhaWwgb3V0IG5vdyBpZiBwYXJzaW5nIHdhc24ndCBzdWNjZXNzZnVsCi0gICAgaWYgKGVyciAhPSAwIHx8IG1haW5Eb2MgPT0gTlVMTCkgewotICAgICAgICAvL2ZwcmludGYoc3RkZXJyLCAiYWlkbDogcGFyc2luZyBmYWlsZWQsIHN0b3BwaW5nLlxuIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8vIGNvbXBsYWluIGFib3V0IG9uZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIHJpZ2h0IGZpbGVzCi0gICAgZXJyIHw9IGNoZWNrX2ZpbGVuYW1lcyhvcHRpb25zLmlucHV0RmlsZU5hbWUuY19zdHIoKSwgbWFpbkRvYyk7Ci0gICAgaW1wb3J0ID0gZ19pbXBvcnRzOwotICAgIHdoaWxlIChpbXBvcnQpIHsKLSAgICAgICAgZXJyIHw9IGNoZWNrX2ZpbGVuYW1lcyhpbXBvcnQtPmZpbGVuYW1lLCBpbXBvcnQtPmRvYyk7Ci0gICAgICAgIGltcG9ydCA9IGltcG9ydC0+bmV4dDsKLSAgICB9Ci0KLSAgICAvLyBnYXRoZXIgdGhlIHR5cGVzIHRoYXQgaGF2ZSBiZWVuIGRlY2xhcmVkCi0gICAgZXJyIHw9IGdhdGhlcl90eXBlcyhvcHRpb25zLmlucHV0RmlsZU5hbWUuY19zdHIoKSwgbWFpbkRvYyk7Ci0gICAgaW1wb3J0ID0gZ19pbXBvcnRzOwotICAgIHdoaWxlIChpbXBvcnQpIHsKLSAgICAgICAgZXJyIHw9IGdhdGhlcl90eXBlcyhpbXBvcnQtPmZpbGVuYW1lLCBpbXBvcnQtPmRvYyk7Ci0gICAgICAgIGltcG9ydCA9IGltcG9ydC0+bmV4dDsKLSAgICB9Ci0KLSNpZiAwCi0gICAgcHJpbnRmKCItLS0tIG1haW4gZG9jIC0tLS1cbiIpOwotICAgIHRlc3RfZG9jdW1lbnQobWFpbkRvYyk7Ci0KLSAgICBpbXBvcnQgPSBnX2ltcG9ydHM7Ci0gICAgd2hpbGUgKGltcG9ydCkgewotICAgICAgICBwcmludGYoIi0tLS0gaW1wb3J0IGRvYyAtLS0tXG4iKTsKLSAgICAgICAgdGVzdF9kb2N1bWVudChpbXBvcnQtPmRvYyk7Ci0gICAgICAgIGltcG9ydCA9IGltcG9ydC0+bmV4dDsKLSAgICB9Ci0gICAgTkFNRVMuRHVtcCgpOwotI2VuZGlmCi0KLSAgICAvLyBjaGVjayB0aGUgcmVmZXJlbmNlZCB0eXBlcyBpbiBtYWluRG9jIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBpbXBvcnRlZCB0aGVtCi0gICAgZXJyIHw9IGNoZWNrX3R5cGVzKG9wdGlvbnMuaW5wdXRGaWxlTmFtZS5jX3N0cigpLCBtYWluRG9jKTsKLQotICAgIC8vIGZpbmFsbHksIHRoZXJlIHJlYWxseSBvbmx5IG5lZWRzIHRvIGJlIG9uZSB0aGluZyBpbiBtYWluRG9jLCBhbmQgaXQKLSAgICAvLyBuZWVkcyB0byBiZSBhbiBpbnRlcmZhY2UuCi0gICAgYm9vbCBvbmx5UGFyY2VsYWJsZSA9IGZhbHNlOwotICAgIGVyciB8PSBleGFjdGx5X29uZV9pbnRlcmZhY2Uob3B0aW9ucy5pbnB1dEZpbGVOYW1lLmNfc3RyKCksIG1haW5Eb2MsIG9wdGlvbnMsICZvbmx5UGFyY2VsYWJsZSk7Ci0KLSAgICAvLyBJZiB0aGlzIGluY2x1ZGVzIGFuIGludGVyZmFjZSBkZWZpbml0aW9uLCB0aGVuIGFzc2lnbiBtZXRob2QgaWRzIGFuZCB2YWxpZGF0ZS4KLSAgICBpZiAoIW9ubHlQYXJjZWxhYmxlKSB7Ci0gICAgICAgIGVyciB8PSBjaGVja19hbmRfYXNzaWduX21ldGhvZF9pZHMob3B0aW9ucy5pbnB1dEZpbGVOYW1lLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgKChpbnRlcmZhY2VfdHlwZSopbWFpbkRvYyktPmludGVyZmFjZV9pdGVtcyk7Ci0gICAgfQotCi0gICAgLy8gYWZ0ZXIgdGhpcywgdGhlcmUgc2hvdWxkbid0IGJlIGFueSBtb3JlIGVycm9ycyBiZWNhdXNlIG9mIHRoZQotICAgIC8vIGlucHV0LgotICAgIGlmIChlcnIgIT0gMCB8fCBtYWluRG9jID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLy8gaWYgbmVlZGVkLCBnZW5lcmF0ZSB0aGUgb3V0cHV0RmlsZU5hbWUgZnJvbSB0aGUgb3V0cHV0QmFzZUZvbGRlcgotICAgIGlmIChvcHRpb25zLm91dHB1dEZpbGVOYW1lLmxlbmd0aCgpID09IDAgJiYKLSAgICAgICAgICAgIG9wdGlvbnMub3V0cHV0QmFzZUZvbGRlci5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgb3B0aW9ucy5vdXRwdXRGaWxlTmFtZSA9IGdlbmVyYXRlX291dHB1dEZpbGVOYW1lKG9wdGlvbnMsIG1haW5Eb2MpOwotICAgIH0KLQotICAgIC8vIGlmIHdlIHdlcmUgYXNrZWQgdG8sIGdlbmVyYXRlIGEgbWFrZSBkZXBlbmRlbmN5IGZpbGUKLSAgICAvLyB1bmxlc3MgaXQncyBhIHBhcmNlbGFibGUgKmFuZCogaXQncyBzdXBwb3NlZCB0byBmYWlsIG9uIHBhcmNlbGFibGUKLSAgICBpZiAoKG9wdGlvbnMuYXV0b0RlcEZpbGUgfHwgb3B0aW9ucy5kZXBGaWxlTmFtZSAhPSAiIikgJiYKLSAgICAgICAgICAgICEob25seVBhcmNlbGFibGUgJiYgb3B0aW9ucy5mYWlsT25QYXJjZWxhYmxlKSkgewotICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGZvbGRlcnMgb2YgdGhlIG91dHB1dCBmaWxlIGFsbCBleGlzdHMKLSAgICAgICAgY2hlY2tfb3V0cHV0RmlsZVBhdGgob3B0aW9ucy5vdXRwdXRGaWxlTmFtZSk7Ci0gICAgICAgIGdlbmVyYXRlX2RlcF9maWxlKG9wdGlvbnMsIG1haW5Eb2MpOwotICAgIH0KLQotICAgIC8vIHRoZXkgZGlkbid0IGFzayB0byBmYWlsIG9uIHBhcmNlbGFibGVzLCBzbyBqdXN0IGV4aXQgcXVpZXRseS4KLSAgICBpZiAob25seVBhcmNlbGFibGUgJiYgIW9wdGlvbnMuZmFpbE9uUGFyY2VsYWJsZSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBtYWtlIHN1cmUgdGhlIGZvbGRlcnMgb2YgdGhlIG91dHB1dCBmaWxlIGFsbCBleGlzdHMKLSAgICBjaGVja19vdXRwdXRGaWxlUGF0aChvcHRpb25zLm91dHB1dEZpbGVOYW1lKTsKLQotICAgIGVyciA9IGdlbmVyYXRlX2phdmEob3B0aW9ucy5vdXRwdXRGaWxlTmFtZSwgb3B0aW9ucy5pbnB1dEZpbGVOYW1lLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAoaW50ZXJmYWNlX3R5cGUqKW1haW5Eb2MpOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludAotcHJlcHJvY2Vzc19haWRsKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgdmVjdG9yPHN0cmluZz4gbGluZXM7Ci0gICAgaW50IGVycjsKLQotICAgIC8vIHJlYWQgZmlsZXMKLSAgICBpbnQgTiA9IG9wdGlvbnMuZmlsZXNUb1ByZXByb2Nlc3Muc2l6ZSgpOwotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgZ19jYWxsYmFja3MgPSAmZ19tYWluQ2FsbGJhY2tzOwotICAgICAgICBlcnIgPSBwYXJzZV9haWRsKG9wdGlvbnMuZmlsZXNUb1ByZXByb2Nlc3NbaV0uY19zdHIoKSk7Ci0gICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgICAgICBkb2N1bWVudF9pdGVtX3R5cGUqIGRvYyA9IGdfZG9jdW1lbnQ7Ci0gICAgICAgIHN0cmluZyBsaW5lOwotICAgICAgICBpZiAoZG9jLT5pdGVtX3R5cGUgPT0gVVNFUl9EQVRBX1RZUEUpIHsKLSAgICAgICAgICAgIHVzZXJfZGF0YV90eXBlKiBwYXJjZWxhYmxlID0gKHVzZXJfZGF0YV90eXBlKilkb2M7Ci0gICAgICAgICAgICBpZiAoKHBhcmNlbGFibGUtPmZsYXR0ZW5pbmdfbWV0aG9kcyAmIFBBUkNFTEFCTEVfREFUQSkgIT0gMCkgewotICAgICAgICAgICAgICAgIGxpbmUgPSAicGFyY2VsYWJsZSAiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChwYXJjZWxhYmxlLT5mbGF0dGVuaW5nX21ldGhvZHMgJiBSUENfREFUQSkgIT0gMCkgewotICAgICAgICAgICAgICAgIGxpbmUgPSAiZmxhdHRlbmFibGUgIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwYXJjZWxhYmxlLT5wYWNrYWdlKSB7Ci0gICAgICAgICAgICAgICAgbGluZSArPSBwYXJjZWxhYmxlLT5wYWNrYWdlOwotICAgICAgICAgICAgICAgIGxpbmUgKz0gJy4nOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGluZSArPSBwYXJjZWxhYmxlLT5uYW1lLmRhdGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsaW5lID0gImludGVyZmFjZSAiOwotICAgICAgICAgICAgaW50ZXJmYWNlX3R5cGUqIGlmYWNlID0gKGludGVyZmFjZV90eXBlKilkb2M7Ci0gICAgICAgICAgICBpZiAoaWZhY2UtPnBhY2thZ2UpIHsKLSAgICAgICAgICAgICAgICBsaW5lICs9IGlmYWNlLT5wYWNrYWdlOwotICAgICAgICAgICAgICAgIGxpbmUgKz0gJy4nOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGluZSArPSBpZmFjZS0+bmFtZS5kYXRhOwotICAgICAgICB9Ci0gICAgICAgIGxpbmUgKz0gIjtcbiI7Ci0gICAgICAgIGxpbmVzLnB1c2hfYmFjayhsaW5lKTsKLSAgICB9Ci0KLSAgICAvLyB3cml0ZSBwcmVwcm9jZXNzZWQgZmlsZQotICAgIGludCBmZCA9IG9wZW4oIG9wdGlvbnMub3V0cHV0RmlsZU5hbWUuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICBPX1JEV1J8T19DUkVBVHxPX1RSVU5DfE9fQklOQVJZLAotI2lmZGVmIEhBVkVfTVNfQ19SVU5USU1FCi0gICAgICAgICAgICAgICAgICAgX1NfSVJFQUR8X1NfSVdSSVRFKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgU19JUlVTUnxTX0lXVVNSfFNfSVJHUlApOwotI2VuZGlmCi0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDogY291bGQgbm90IG9wZW4gZmlsZSBmb3Igd3JpdGU6ICVzXG4iLAotICAgICAgICAgICAgICAgIG9wdGlvbnMub3V0cHV0RmlsZU5hbWUuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIE4gPSBsaW5lcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBzdHJpbmcmIHMgPSBsaW5lc1tpXTsKLSAgICAgICAgaW50IGxlbiA9IHMubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChsZW4gIT0gd3JpdGUoZmQsIHMuY19zdHIoKSwgbGVuKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJhaWRsOiBlcnJvciB3cml0aW5nIHRvIGZpbGUgJXNcbiIsCi0gICAgICAgICAgICAgICAgb3B0aW9ucy5vdXRwdXRGaWxlTmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgICAgIHVubGluayhvcHRpb25zLm91dHB1dEZpbGVOYW1lLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbG9zZShmZCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWludAotbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCi17Ci0gICAgT3B0aW9ucyBvcHRpb25zOwotICAgIGludCByZXN1bHQgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsICZvcHRpb25zKTsKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgc3dpdGNoIChvcHRpb25zLnRhc2spCi0gICAgewotICAgICAgICBjYXNlIENPTVBJTEVfQUlETDoKLSAgICAgICAgICAgIHJldHVybiBjb21waWxlX2FpZGwob3B0aW9ucyk7Ci0gICAgICAgIGNhc2UgUFJFUFJPQ0VTU19BSURMOgotICAgICAgICAgICAgcmV0dXJuIHByZXByb2Nlc3NfYWlkbChvcHRpb25zKTsKLSAgICB9Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOiBpbnRlcm5hbCBlcnJvclxuIik7Ci0gICAgcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS90b29scy9haWRsL2FpZGxfbGFuZ3VhZ2UuY3BwIGIvdG9vbHMvYWlkbC9haWRsX2xhbmd1YWdlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q2YTNiZC4uMDAwMDAwMAotLS0gYS90b29scy9haWRsL2FpZGxfbGFuZ3VhZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI2luY2x1ZGUgImFpZGxfbGFuZ3VhZ2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaWZkZWYgSEFWRV9NU19DX1JVTlRJTUUKLWludCBpc2F0dHkoaW50ICBmZCkKLXsKLSAgICByZXR1cm4gKGZkID09IDApOwotfQotI2VuZGlmCi0KLSNpZiAwCi1QYXJzZXJDYWxsYmFja3Mga19wYXJzZXJDYWxsYmFja3MgPSB7Ci0gICAgTlVMTAotfTsKLSNlbmRpZgotCi1QYXJzZXJDYWxsYmFja3MqIGdfY2FsbGJhY2tzID0gTlVMTDsgLy8gJmtfcGFyc2VyQ2FsbGJhY2tzOwotCmRpZmYgLS1naXQgYS90b29scy9haWRsL2FpZGxfbGFuZ3VhZ2UuaCBiL3Rvb2xzL2FpZGwvYWlkbF9sYW5ndWFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTEzNzBjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvYWlkbF9sYW5ndWFnZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLSNpZm5kZWYgREVWSUNFX1RPT0xTX0FJRExfQUlETF9MQU5HVUFHRV9ICi0jZGVmaW5lIERFVklDRV9UT09MU19BSURMX0FJRExfTEFOR1VBR0VfSAotCi0KLXR5cGVkZWYgZW51bSB7Ci0gICAgTk9fRVhUUkFfVEVYVCA9IDAsCi0gICAgU0hPUlRfQ09NTUVOVCwKLSAgICBMT05HX0NPTU1FTlQsCi0gICAgQ09QWV9URVhULAotICAgIFdISVRFU1BBQ0UKLX0gd2hpY2hfZXh0cmFfdGV4dDsKLQotdHlwZWRlZiBzdHJ1Y3QgZXh0cmFfdGV4dF90eXBlIHsKLSAgICB1bnNpZ25lZCBsaW5lbm87Ci0gICAgd2hpY2hfZXh0cmFfdGV4dCB3aGljaDsKLSAgICBjaGFyKiBkYXRhOyAKLSAgICB1bnNpZ25lZCBsZW47Ci0gICAgc3RydWN0IGV4dHJhX3RleHRfdHlwZSogbmV4dDsKLX0gZXh0cmFfdGV4dF90eXBlOwotCi10eXBlZGVmIHN0cnVjdCBidWZmZXJfdHlwZSB7Ci0gICAgdW5zaWduZWQgbGluZW5vOwotICAgIHVuc2lnbmVkIHRva2VuOwotICAgIGNoYXIgKmRhdGE7Ci0gICAgZXh0cmFfdGV4dF90eXBlKiBleHRyYTsKLX0gYnVmZmVyX3R5cGU7Ci0KLXR5cGVkZWYgc3RydWN0IHR5cGVfdHlwZSB7Ci0gICAgYnVmZmVyX3R5cGUgdHlwZTsKLSAgICBidWZmZXJfdHlwZSBhcnJheV90b2tlbjsKLSAgICBpbnQgZGltZW5zaW9uOwotfSB0eXBlX3R5cGU7Ci0KLXR5cGVkZWYgc3RydWN0IGFyZ190eXBlIHsKLSAgICBidWZmZXJfdHlwZSBjb21tYV90b2tlbjsgLy8gZW1wdHkgaW4gdGhlIGZpcnN0IG9uZSBpbiB0aGUgbGlzdAotICAgIGJ1ZmZlcl90eXBlIGRpcmVjdGlvbjsKLSAgICB0eXBlX3R5cGUgdHlwZTsKLSAgICBidWZmZXJfdHlwZSBuYW1lOwotICAgIHN0cnVjdCBhcmdfdHlwZSAqbmV4dDsKLX0gYXJnX3R5cGU7Ci0KLWVudW0gewotICAgIE1FVEhPRF9UWVBFCi19OwotCi10eXBlZGVmIHN0cnVjdCBpbnRlcmZhY2VfaXRlbV90eXBlIHsKLSAgICB1bnNpZ25lZCBpdGVtX3R5cGU7Ci0gICAgc3RydWN0IGludGVyZmFjZV9pdGVtX3R5cGUqIG5leHQ7Ci19IGludGVyZmFjZV9pdGVtX3R5cGU7Ci0KLXR5cGVkZWYgc3RydWN0IG1ldGhvZF90eXBlIHsKLSAgICBpbnRlcmZhY2VfaXRlbV90eXBlIGludGVyZmFjZV9pdGVtOwotICAgIHR5cGVfdHlwZSB0eXBlOwotICAgIGJvb2wgb25ld2F5OwotICAgIGJ1ZmZlcl90eXBlIG9uZXdheV90b2tlbjsKLSAgICBidWZmZXJfdHlwZSBuYW1lOwotICAgIGJ1ZmZlcl90eXBlIG9wZW5fcGFyZW5fdG9rZW47Ci0gICAgYXJnX3R5cGUqIGFyZ3M7Ci0gICAgYnVmZmVyX3R5cGUgY2xvc2VfcGFyZW5fdG9rZW47Ci0gICAgYm9vbCBoYXNJZDsKLSAgICBidWZmZXJfdHlwZSBlcXVhbHNfdG9rZW47Ci0gICAgYnVmZmVyX3R5cGUgaWQ7Ci0gICAgLy8gWFhYIG1pc3NpbmcgY29tbWVudHMvY29weSB0ZXh0IGhlcmUKLSAgICBidWZmZXJfdHlwZSBzZW1pY29sb25fdG9rZW47Ci0gICAgYnVmZmVyX3R5cGUqIGNvbW1lbnRzX3Rva2VuOyAvLyBwb2ludHMgaW50byB0aGlzIHN0cnVjdHVyZSwgRE8gTk9UIERFTEVURQotICAgIGludCBhc3NpZ25lZF9pZDsKLX0gbWV0aG9kX3R5cGU7Ci0KLWVudW0gewotICAgIFVTRVJfREFUQV9UWVBFID0gMTIsCi0gICAgSU5URVJGQUNFX1RZUEVfQklOREVSLAotICAgIElOVEVSRkFDRV9UWVBFX1JQQwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgZG9jdW1lbnRfaXRlbV90eXBlIHsKLSAgICB1bnNpZ25lZCBpdGVtX3R5cGU7Ci0gICAgc3RydWN0IGRvY3VtZW50X2l0ZW1fdHlwZSogbmV4dDsKLX0gZG9jdW1lbnRfaXRlbV90eXBlOwotCi0KLS8vIGZvciB1c2VyX2RhdGFfdHlwZS5mbGF0dGVuaW5nX21ldGhvZHMKLWVudW0gewotICAgIFBBUkNFTEFCTEVfREFUQSA9IDB4MSwKLSAgICBSUENfREFUQSA9IDB4MgotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgdXNlcl9kYXRhX3R5cGUgewotICAgIGRvY3VtZW50X2l0ZW1fdHlwZSBkb2N1bWVudF9pdGVtOwotICAgIGJ1ZmZlcl90eXBlIGtleXdvcmRfdG9rZW47IC8vIG9ubHkgdGhlIGZpcnN0IG9uZQotICAgIGNoYXIqIHBhY2thZ2U7Ci0gICAgYnVmZmVyX3R5cGUgbmFtZTsKLSAgICBidWZmZXJfdHlwZSBzZW1pY29sb25fdG9rZW47Ci0gICAgaW50IGZsYXR0ZW5pbmdfbWV0aG9kczsKLX0gdXNlcl9kYXRhX3R5cGU7Ci0KLXR5cGVkZWYgc3RydWN0IGludGVyZmFjZV90eXBlIHsKLSAgICBkb2N1bWVudF9pdGVtX3R5cGUgZG9jdW1lbnRfaXRlbTsKLSAgICBidWZmZXJfdHlwZSBpbnRlcmZhY2VfdG9rZW47Ci0gICAgYm9vbCBvbmV3YXk7Ci0gICAgYnVmZmVyX3R5cGUgb25ld2F5X3Rva2VuOwotICAgIGNoYXIqIHBhY2thZ2U7Ci0gICAgYnVmZmVyX3R5cGUgbmFtZTsKLSAgICBidWZmZXJfdHlwZSBvcGVuX2JyYWNlX3Rva2VuOwotICAgIGludGVyZmFjZV9pdGVtX3R5cGUqIGludGVyZmFjZV9pdGVtczsKLSAgICBidWZmZXJfdHlwZSBjbG9zZV9icmFjZV90b2tlbjsKLSAgICBidWZmZXJfdHlwZSogY29tbWVudHNfdG9rZW47IC8vIHBvaW50cyBpbnRvIHRoaXMgc3RydWN0dXJlLCBETyBOT1QgREVMRVRFCi19IGludGVyZmFjZV90eXBlOwotCi10eXBlZGVmIHVuaW9uIGxleGVyX3R5cGUgewotICAgIGJ1ZmZlcl90eXBlIGJ1ZmZlcjsKLSAgICB0eXBlX3R5cGUgdHlwZTsKLSAgICBhcmdfdHlwZSAqYXJnOwotICAgIG1ldGhvZF90eXBlKiBtZXRob2Q7Ci0gICAgaW50ZXJmYWNlX2l0ZW1fdHlwZSogaW50ZXJmYWNlX2l0ZW07Ci0gICAgaW50ZXJmYWNlX3R5cGUqIGludGVyZmFjZV9vYmo7Ci0gICAgdXNlcl9kYXRhX3R5cGUqIHVzZXJfZGF0YTsKLSAgICBkb2N1bWVudF9pdGVtX3R5cGUqIGRvY3VtZW50X2l0ZW07Ci19IGxleGVyX3R5cGU7Ci0KLQotI2RlZmluZSBZWVNUWVBFIGxleGVyX3R5cGUKLQotI2lmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1pbnQgcGFyc2VfYWlkbChjaGFyIGNvbnN0ICopOwotCi0vLyBzdHJpcHMgb2ZmIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UsIHRoZSAiaW1wb3J0IiB0ZXh0Ci0vLyBhbHNvIHJldHVybnMgd2hldGhlciBpdCdzIGEgbG9jYWwgb3Igc3lzdGVtIGltcG9ydAotLy8gd2UgcmVseSBvbiB0aGUgaW5wdXQgbWF0Y2hpbmcgdGhlIGltcG9ydCByZWdleCBmcm9tIGJlbG93Ci1jaGFyKiBwYXJzZV9pbXBvcnRfc3RhdGVtZW50KGNvbnN0IGNoYXIqIHRleHQpOwotCi0vLyBpbiwgb3V0IG9yIGlub3V0Ci1lbnVtIHsKLSAgICBJTl9QQVJBTUVURVIgPSAxLAotICAgIE9VVF9QQVJBTUVURVIgPSAyLAotICAgIElOT1VUX1BBUkFNRVRFUiA9IDMKLX07Ci1pbnQgY29udmVydF9kaXJlY3Rpb24oY29uc3QgY2hhciogZGlyZWN0aW9uKTsKLQotLy8gY2FsbGJhY2tzIGZyb20gd2l0aGluIHRoZSBwYXJzZXIKLS8vIHRoZXNlIGZ1bmN0aW9ucyBhbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHN0cmluZ3MKLXR5cGVkZWYgc3RydWN0IFBhcnNlckNhbGxiYWNrcyB7Ci0gICAgdm9pZCAoKmRvY3VtZW50KShkb2N1bWVudF9pdGVtX3R5cGUqIGl0ZW1zKTsKLSAgICB2b2lkICgqaW1wb3J0KShidWZmZXJfdHlwZSogc3RhdGVtZW50KTsKLX0gUGFyc2VyQ2FsbGJhY2tzOwotCi1leHRlcm4gUGFyc2VyQ2FsbGJhY2tzKiBnX2NhbGxiYWNrczsKLQotLy8gdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcGFyc2luZywgZmFsc2Ugb3RoZXJ3aXNlCi1leHRlcm4gaW50IGdfZXJyb3I7Ci0KLS8vIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHdlJ3JlIGN1cnJlbnRseSBwYXJzaW5nCi1leHRlcm4gY2hhciBjb25zdCogZ19jdXJyZW50RmlsZW5hbWU7Ci0KLS8vIHRoZSBwYWNrYWdlIG5hbWUgZm9yIG91ciBjdXJyZW50IGZpbGUKLWV4dGVybiBjaGFyIGNvbnN0KiBnX2N1cnJlbnRQYWNrYWdlOwotCi10eXBlZGVmIGVudW0gewotICAgIFNUQVRFTUVOVF9JTlNJREVfSU5URVJGQUNFCi19IGVycm9yX3R5cGU7Ci0KLXZvaWQgaW5pdF9idWZmZXJfdHlwZShidWZmZXJfdHlwZSogYnVmLCBpbnQgbGluZW5vKTsKLQotCi0jaWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0KLSNlbmRpZiAvLyBERVZJQ0VfVE9PTFNfQUlETF9BSURMX0xBTkdVQUdFX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvYWlkbF9sYW5ndWFnZV9sLmwgYi90b29scy9haWRsL2FpZGxfbGFuZ3VhZ2VfbC5sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDMzZTdhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvYWlkbF9sYW5ndWFnZV9sLmwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotJXsKLSNpbmNsdWRlICJhaWRsX2xhbmd1YWdlLmgiCi0jaW5jbHVkZSAiYWlkbF9sYW5ndWFnZV95LmgiCi0jaW5jbHVkZSAic2VhcmNoX3BhdGguaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotZXh0ZXJuIFlZU1RZUEUgeXlsdmFsOwotCi0vLyBjb21tZW50IGFuZCB3aGl0ZXNwYWNlIGhhbmRsaW5nCi0vLyB0aGVzZSBmdW5jdGlvbnMgc2F2ZSBhIGNvcHkgb2YgdGhlIGJ1ZmZlcgotc3RhdGljIHZvaWQgYmVnaW5fZXh0cmFfdGV4dCh1bnNpZ25lZCBsaW5lbm8sIHdoaWNoX2V4dHJhX3RleHQgd2hpY2gpOwotc3RhdGljIHZvaWQgYXBwZW5kX2V4dHJhX3RleHQoY2hhciogdGV4dCk7Ci1zdGF0aWMgZXh0cmFfdGV4dF90eXBlKiBnZXRfZXh0cmFfdGV4dCh2b2lkKTsgICAvLyB5b3Ugbm93IG93biB0aGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHJldHVybnMKLXN0YXRpYyB2b2lkIGRyb3BfZXh0cmFfdGV4dCh2b2lkKTsKLQotLy8gcGFja2FnZSBoYW5kbGluZwotc3RhdGljIHZvaWQgZG9fcGFja2FnZV9zdGF0ZW1lbnQoY29uc3QgY2hhciogaW1wb3J0VGV4dCk7Ci0KLSNkZWZpbmUgU0VUX0JVRkZFUih0KSBcCi0gICAgZG8geyBcCi0gICAgICAgIHl5bHZhbC5idWZmZXIubGluZW5vID0geXlsaW5lbm87IFwKLSAgICAgICAgeXlsdmFsLmJ1ZmZlci50b2tlbiA9ICh0KTsgXAotICAgICAgICB5eWx2YWwuYnVmZmVyLmRhdGEgPSBzdHJkdXAoeXl0ZXh0KTsgXAotICAgICAgICB5eWx2YWwuYnVmZmVyLmV4dHJhID0gZ2V0X2V4dHJhX3RleHQoKTsgXAotICAgIH0gd2hpbGUoMCkKLQotJX0KLQotJW9wdGlvbiB5eWxpbmVubwotJW9wdGlvbiBub3l5d3JhcAotCi0leCBDT1BZSU5HIExPTkdfQ09NTUVOVAotCi1pZGVudGlmaWVyICBbX2EtekEtWl1bX2EtekEtWjAtOVwuXSoKLXdoaXRlc3BhY2UgIChbIFx0XG5ccl0rKQotYnJhY2tldHMgICAgXFt7d2hpdGVzcGFjZX0/XF0KLWlkdmFsdWUgICAgICgwfFsxLTldWzAtOV0qKQotCi0lJQotCi0KLVwlXCVceyAgICAgICAgICAgICAgeyBiZWdpbl9leHRyYV90ZXh0KHl5bGluZW5vLCBDT1BZX1RFWFQpOyBCRUdJTihDT1BZSU5HKTsgfQotPENPUFlJTkc+XH1cJVwlICAgICB7IEJFR0lOKElOSVRJQUwpOyB9Ci08Q09QWUlORz4uKlxuICAgICAgIHsgYXBwZW5kX2V4dHJhX3RleHQoeXl0ZXh0KTsgfQotPENPUFlJTkc+LiogICAgICAgICB7IGFwcGVuZF9leHRyYV90ZXh0KHl5dGV4dCk7IH0KLTxDT1BZSU5HPlxuKyAgICAgICAgeyBhcHBlbmRfZXh0cmFfdGV4dCh5eXRleHQpOyB9Ci0KLQotXC9cKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGJlZ2luX2V4dHJhX3RleHQoeXlsaW5lbm8sICh3aGljaF9leHRyYV90ZXh0KUxPTkdfQ09NTUVOVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkVHSU4oTE9OR19DT01NRU5UKTsgfQotPExPTkdfQ09NTUVOVD5bXipdKiAgICAgICAgICAgICB7IGFwcGVuZF9leHRyYV90ZXh0KHl5dGV4dCk7IH0KLTxMT05HX0NPTU1FTlQ+XCorW14vXSAgICAgICAgICAgeyBhcHBlbmRfZXh0cmFfdGV4dCh5eXRleHQpOyB9Ci08TE9OR19DT01NRU5UPlxuICAgICAgICAgICAgICAgIHsgYXBwZW5kX2V4dHJhX3RleHQoeXl0ZXh0KTsgfQotPExPTkdfQ09NTUVOVD5cKipcLyAgICAgICAgICAgICB7IEJFR0lOKElOSVRJQUwpOyB9Ci0KLV57d2hpdGVzcGFjZX0/aW1wb3J0e3doaXRlc3BhY2V9W14gXHRcclxuXSt7d2hpdGVzcGFjZX0/OyAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JVRkZFUihJTVBPUlQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElNUE9SVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotXnt3aGl0ZXNwYWNlfT9wYWNrYWdle3doaXRlc3BhY2V9W14gXHRcclxuXSt7d2hpdGVzcGFjZX0/OyAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fcGFja2FnZV9zdGF0ZW1lbnQoeXl0ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CVUZGRVIoUEFDS0FHRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEFDS0FHRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotPDxFT0Y+PiAgICAgICAgICAgICB7IHl5dGVybWluYXRlKCk7IH0KLQotXC9cLy4qXG4gICAgICAgICAgICB7IGJlZ2luX2V4dHJhX3RleHQoeXlsaW5lbm8sIFNIT1JUX0NPTU1FTlQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2V4dHJhX3RleHQoeXl0ZXh0KTsgfQotCi17d2hpdGVzcGFjZX0gICAgeyAvKiBiZWdpbl9leHRyYV90ZXh0KHl5bGluZW5vLCBXSElURVNQQUNFKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2V4dHJhX3RleHQoeXl0ZXh0KTsgKi8gfQotCi07ICAgICAgICAgICAgICAgeyBTRVRfQlVGRkVSKCc7Jyk7IHJldHVybiAnOyc7IH0KLVx7ICAgICAgICAgICAgICB7IFNFVF9CVUZGRVIoJ3snKTsgcmV0dXJuICd7JzsgfQotXH0gICAgICAgICAgICAgIHsgU0VUX0JVRkZFUignfScpOyByZXR1cm4gJ30nOyB9Ci1cKCAgICAgICAgICAgICAgeyBTRVRfQlVGRkVSKCcoJyk7IHJldHVybiAnKCc7IH0KLVwpICAgICAgICAgICAgICB7IFNFVF9CVUZGRVIoJyknKTsgcmV0dXJuICcpJzsgfQotLCAgICAgICAgICAgICAgIHsgU0VUX0JVRkZFUignLCcpOyByZXR1cm4gJywnOyB9Ci09ICAgICAgICAgICAgICAgeyBTRVRfQlVGRkVSKCc9Jyk7IHJldHVybiAnPSc7IH0KLQotICAgIC8qIGtleXdvcmRzICovCi1wYXJjZWxhYmxlICAgICAgeyBTRVRfQlVGRkVSKFBBUkNFTEFCTEUpOyByZXR1cm4gUEFSQ0VMQUJMRTsgfQotaW50ZXJmYWNlICAgICAgIHsgU0VUX0JVRkZFUihJTlRFUkZBQ0UpOyByZXR1cm4gSU5URVJGQUNFOyB9Ci1mbGF0dGVuYWJsZSAgICAgeyBTRVRfQlVGRkVSKEZMQVRURU5BQkxFKTsgcmV0dXJuIEZMQVRURU5BQkxFOyB9Ci1ycGMgICAgICAgICAgICAgeyBTRVRfQlVGRkVSKElOVEVSRkFDRSk7IHJldHVybiBSUEM7IH0KLWluICAgICAgICAgICAgICB7IFNFVF9CVUZGRVIoSU4pOyByZXR1cm4gSU47IH0KLW91dCAgICAgICAgICAgICB7IFNFVF9CVUZGRVIoT1VUKTsgcmV0dXJuIE9VVDsgfQotaW5vdXQgICAgICAgICAgIHsgU0VUX0JVRkZFUihJTk9VVCk7IHJldHVybiBJTk9VVDsgfQotb25ld2F5ICAgICAgICAgIHsgU0VUX0JVRkZFUihPTkVXQVkpOyByZXR1cm4gT05FV0FZOyB9Ci0KLXticmFja2V0c30rICAgICB7IFNFVF9CVUZGRVIoQVJSQVkpOyByZXR1cm4gQVJSQVk7IH0KLXtpZHZhbHVlfSAgICAgICB7IFNFVF9CVUZGRVIoSURWQUxVRSk7IHJldHVybiBJRFZBTFVFOyB9Ci17aWRlbnRpZmllcn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBTRVRfQlVGRkVSKElERU5USUZJRVIpOyByZXR1cm4gSURFTlRJRklFUjsgfQote2lkZW50aWZpZXJ9XDx7d2hpdGVzcGFjZX0qe2lkZW50aWZpZXJ9KHt3aGl0ZXNwYWNlfSose3doaXRlc3BhY2V9KntpZGVudGlmaWVyfSkqe3doaXRlc3BhY2V9Klw+ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CVUZGRVIoR0VORVJJQyk7IHJldHVybiBHRU5FUklDOyB9Ci0KLSAgICAvKiBzeW50YXggZXJyb3IhICovCi0uICAgICAgICAgICAgICAgeyBwcmludGYoIlVOS05PV04oJXMpIiwgeXl0ZXh0KTsKLSAgICAgICAgICAgICAgICAgIHl5bHZhbC5idWZmZXIubGluZW5vID0geXlsaW5lbm87Ci0gICAgICAgICAgICAgICAgICB5eWx2YWwuYnVmZmVyLnRva2VuID0gSURFTlRJRklFUjsKLSAgICAgICAgICAgICAgICAgIHl5bHZhbC5idWZmZXIuZGF0YSA9IHN0cmR1cCh5eXRleHQpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIElERU5USUZJRVI7Ci0gICAgICAgICAgICAgICAgfQotCi0lJQotCi0vLyBjb21tZW50IGFuZCB3aGl0ZXNwYWNlIGhhbmRsaW5nCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWV4dHJhX3RleHRfdHlwZSogZ19leHRyYVRleHQgPSBOVUxMOwotZXh0cmFfdGV4dF90eXBlKiBnX25leHRFeHRyYVRleHQgPSBOVUxMOwotCi12b2lkIGJlZ2luX2V4dHJhX3RleHQodW5zaWduZWQgbGluZW5vLCB3aGljaF9leHRyYV90ZXh0IHdoaWNoKQotewotICAgIGV4dHJhX3RleHRfdHlwZSogdGV4dCA9IChleHRyYV90ZXh0X3R5cGUqKW1hbGxvYyhzaXplb2YoZXh0cmFfdGV4dF90eXBlKSk7Ci0gICAgdGV4dC0+bGluZW5vID0gbGluZW5vOwotICAgIHRleHQtPndoaWNoID0gd2hpY2g7Ci0gICAgdGV4dC0+ZGF0YSA9IE5VTEw7Ci0gICAgdGV4dC0+bGVuID0gMDsKLSAgICB0ZXh0LT5uZXh0ID0gTlVMTDsKLSAgICBpZiAoZ19uZXh0RXh0cmFUZXh0ID09IE5VTEwpIHsKLSAgICAgICAgZ19leHRyYVRleHQgPSB0ZXh0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfbmV4dEV4dHJhVGV4dC0+bmV4dCA9IHRleHQ7Ci0gICAgfQotICAgIGdfbmV4dEV4dHJhVGV4dCA9IHRleHQ7Ci19Ci0KLXZvaWQgYXBwZW5kX2V4dHJhX3RleHQoY2hhciogdGV4dCkKLXsKLSAgICBpZiAoZ19uZXh0RXh0cmFUZXh0LT5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgZ19uZXh0RXh0cmFUZXh0LT5kYXRhID0gc3RyZHVwKHRleHQpOwotICAgICAgICBnX25leHRFeHRyYVRleHQtPmxlbiA9IHN0cmxlbih0ZXh0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBjaGFyKiBvcmlnID0gZ19uZXh0RXh0cmFUZXh0LT5kYXRhOwotICAgICAgICB1bnNpZ25lZCBvbGRMZW4gPSBnX25leHRFeHRyYVRleHQtPmxlbjsKLSAgICAgICAgdW5zaWduZWQgbGVuID0gc3RybGVuKHRleHQpOwotICAgICAgICBnX25leHRFeHRyYVRleHQtPmxlbiArPSBsZW47Ci0gICAgICAgIGdfbmV4dEV4dHJhVGV4dC0+ZGF0YSA9IChjaGFyKiltYWxsb2MoZ19uZXh0RXh0cmFUZXh0LT5sZW4rMSk7Ci0gICAgICAgIG1lbWNweShnX25leHRFeHRyYVRleHQtPmRhdGEsIG9yaWcsIG9sZExlbik7Ci0gICAgICAgIG1lbWNweShnX25leHRFeHRyYVRleHQtPmRhdGErb2xkTGVuLCB0ZXh0LCBsZW4pOwotICAgICAgICBnX25leHRFeHRyYVRleHQtPmRhdGFbZ19uZXh0RXh0cmFUZXh0LT5sZW5dID0gJ1wwJzsKLSAgICAgICAgZnJlZShvcmlnKTsKLSAgICB9Ci19Ci0KLWV4dHJhX3RleHRfdHlwZSoKLWdldF9leHRyYV90ZXh0KHZvaWQpCi17Ci0gICAgZXh0cmFfdGV4dF90eXBlKiByZXN1bHQgPSBnX2V4dHJhVGV4dDsKLSAgICBnX2V4dHJhVGV4dCA9IE5VTEw7Ci0gICAgZ19uZXh0RXh0cmFUZXh0ID0gTlVMTDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIGRyb3BfZXh0cmFfdGV4dCh2b2lkKQotewotICAgIGV4dHJhX3RleHRfdHlwZSogcCA9IGdfZXh0cmFUZXh0OwotICAgIHdoaWxlIChwKSB7Ci0gICAgICAgIGV4dHJhX3RleHRfdHlwZSogbmV4dCA9IHAtPm5leHQ7Ci0gICAgICAgIGZyZWUocC0+ZGF0YSk7Ci0gICAgICAgIGZyZWUocCk7Ci0gICAgICAgIGZyZWUobmV4dCk7Ci0gICAgfQotICAgIGdfZXh0cmFUZXh0ID0gTlVMTDsKLSAgICBnX25leHRFeHRyYVRleHQgPSBOVUxMOwotfQotCi0KLS8vIHBhY2thZ2UgaGFuZGxpbmcKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdm9pZCBkb19wYWNrYWdlX3N0YXRlbWVudChjb25zdCBjaGFyKiBpbXBvcnRUZXh0KQotewotICAgIGlmIChnX2N1cnJlbnRQYWNrYWdlKSBmcmVlKCh2b2lkKilnX2N1cnJlbnRQYWNrYWdlKTsKLSAgICBnX2N1cnJlbnRQYWNrYWdlID0gcGFyc2VfaW1wb3J0X3N0YXRlbWVudChpbXBvcnRUZXh0KTsKLX0KLQotCi0vLyBtYWluIHBhcnNlIGZ1bmN0aW9uCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWNoYXIgY29uc3QqIGdfY3VycmVudEZpbGVuYW1lID0gTlVMTDsKLWNoYXIgY29uc3QqIGdfY3VycmVudFBhY2thZ2UgPSBOVUxMOwotCi1pbnQgeXlwYXJzZSh2b2lkKTsKLQotaW50IHBhcnNlX2FpZGwoY2hhciBjb25zdCAqZmlsZW5hbWUpCi17Ci0gICAgeXlpbiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotICAgIGlmICh5eWluKSB7Ci0gICAgICAgIGNoYXIgY29uc3QqIG9sZEZpbGVuYW1lID0gZ19jdXJyZW50RmlsZW5hbWU7Ci0gICAgICAgIGNoYXIgY29uc3QqIG9sZFBhY2thZ2UgPSBnX2N1cnJlbnRQYWNrYWdlOwotICAgICAgICBnX2N1cnJlbnRGaWxlbmFtZSA9IHN0cmR1cChmaWxlbmFtZSk7Ci0KLSAgICAgICAgZ19lcnJvciA9IDA7Ci0gICAgICAgIHl5bGluZW5vID0gMTsKLSAgICAgICAgaW50IHJ2ID0geXlwYXJzZSgpOwotICAgICAgICBpZiAoZ19lcnJvciAhPSAwKSB7Ci0gICAgICAgICAgICBydiA9IGdfZXJyb3I7Ci0gICAgICAgIH0KLQotICAgICAgICBmcmVlKCh2b2lkKilnX2N1cnJlbnRGaWxlbmFtZSk7Ci0gICAgICAgIGdfY3VycmVudEZpbGVuYW1lID0gb2xkRmlsZW5hbWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoZ19jdXJyZW50UGFja2FnZSkgZnJlZSgodm9pZCopZ19jdXJyZW50UGFja2FnZSk7Ci0gICAgICAgIGdfY3VycmVudFBhY2thZ2UgPSBvbGRQYWNrYWdlOwotCi0gICAgICAgIHJldHVybiBydjsKLSAgICB9IGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6IHVuYWJsZSB0byBvcGVuIGZpbGUgZm9yIHJlYWQ6ICVzXG4iLCBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9haWRsX2xhbmd1YWdlX3kueSBiL3Rvb2xzL2FpZGwvYWlkbF9sYW5ndWFnZV95LnkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNDBkMjguLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9haWRsX2xhbmd1YWdlX3kueQorKysgL2Rldi9udWxsCkBAIC0xLDM3MyArMCwwIEBACi0lewotI2luY2x1ZGUgImFpZGxfbGFuZ3VhZ2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1pbnQgeXllcnJvcihjaGFyKiBlcnJzdHIpOwotaW50IHl5bGV4KHZvaWQpOwotZXh0ZXJuIGludCB5eWxpbmVubzsKLQotc3RhdGljIGludCBjb3VudF9icmFja2V0cyhjb25zdCBjaGFyKik7Ci0KLSV9Ci0KLSV0b2tlbiBJTVBPUlQKLSV0b2tlbiBQQUNLQUdFCi0ldG9rZW4gSURFTlRJRklFUgotJXRva2VuIElEVkFMVUUKLSV0b2tlbiBHRU5FUklDCi0ldG9rZW4gQVJSQVkKLSV0b2tlbiBQQVJDRUxBQkxFCi0ldG9rZW4gSU5URVJGQUNFCi0ldG9rZW4gRkxBVFRFTkFCTEUKLSV0b2tlbiBSUEMKLSV0b2tlbiBJTgotJXRva2VuIE9VVAotJXRva2VuIElOT1VUCi0ldG9rZW4gT05FV0FZCi0KLSUlCi1kb2N1bWVudDoKLSAgICAgICAgZG9jdW1lbnRfaXRlbXMgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ19jYWxsYmFja3MtPmRvY3VtZW50KCQxLmRvY3VtZW50X2l0ZW0pOyB9Ci0gICAgfCAgIGhlYWRlcnMgZG9jdW1lbnRfaXRlbXMgICAgICAgICAgICAgICAgICB7IGdfY2FsbGJhY2tzLT5kb2N1bWVudCgkMi5kb2N1bWVudF9pdGVtKTsgfQotICAgIDsKLQotaGVhZGVyczoKLSAgICAgICAgcGFja2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgfQotICAgIHwgICBpbXBvcnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB9Ci0gICAgfCAgIHBhY2thZ2UgaW1wb3J0cyAgICAgICAgICAgICAgICAgICAgICAgICB7IH0KLSAgICA7Ci0KLXBhY2thZ2U6Ci0gICAgICAgIFBBQ0tBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IH0KLSAgICA7Ci0KLWltcG9ydHM6Ci0gICAgICAgIElNUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdfY2FsbGJhY2tzLT5pbXBvcnQoJigkMS5idWZmZXIpKTsgfQotICAgIHwgICBJTVBPUlQgaW1wb3J0cyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnX2NhbGxiYWNrcy0+aW1wb3J0KCYoJDEuYnVmZmVyKSk7IH0KLSAgICA7Ci0KLWRvY3VtZW50X2l0ZW1zOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5kb2N1bWVudF9pdGVtID0gTlVMTDsgfQotICAgIHwgICBkb2N1bWVudF9pdGVtcyBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkMi5kb2N1bWVudF9pdGVtID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IgY2FzZXMgb25seQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50X2l0ZW1fdHlwZSogcCA9ICQxLmRvY3VtZW50X2l0ZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwICYmIHAtPm5leHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA9cC0+bmV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+bmV4dCA9IChkb2N1bWVudF9pdGVtX3R5cGUqKSQyLmRvY3VtZW50X2l0ZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuZG9jdW1lbnRfaXRlbSA9IChkb2N1bWVudF9pdGVtX3R5cGUqKSQyLmRvY3VtZW50X2l0ZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCBkb2N1bWVudF9pdGVtcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogc3ludGF4IGVycm9yIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIFwiJXNcIlxuIiwgZ19jdXJyZW50RmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMi5idWZmZXIubGluZW5vLCAkMi5idWZmZXIuZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICA7Ci0KLWRlY2xhcmF0aW9uOgotICAgICAgICBwYXJjZWxhYmxlX2RlY2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5kb2N1bWVudF9pdGVtID0gKGRvY3VtZW50X2l0ZW1fdHlwZSopJDEudXNlcl9kYXRhOyB9Ci0gICAgfCAgIGludGVyZmFjZV9kZWNsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkLmRvY3VtZW50X2l0ZW0gPSAoZG9jdW1lbnRfaXRlbV90eXBlKikkMS5pbnRlcmZhY2VfaXRlbTsgfQotICAgIDsKLQotcGFyY2VsYWJsZV9kZWNsOgotICAgICAgICBQQVJDRUxBQkxFIElERU5USUZJRVIgJzsnICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhX3R5cGUqIGIgPSAodXNlcl9kYXRhX3R5cGUqKW1hbGxvYyhzaXplb2YodXNlcl9kYXRhX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+ZG9jdW1lbnRfaXRlbS5pdGVtX3R5cGUgPSBVU0VSX0RBVEFfVFlQRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+ZG9jdW1lbnRfaXRlbS5uZXh0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+a2V5d29yZF90b2tlbiA9ICQxLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+bmFtZSA9ICQyLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+cGFja2FnZSA9IGdfY3VycmVudFBhY2thZ2UgPyBzdHJkdXAoZ19jdXJyZW50UGFja2FnZSkgOiBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5zZW1pY29sb25fdG9rZW4gPSAkMy5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPmZsYXR0ZW5pbmdfbWV0aG9kcyA9IFBBUkNFTEFCTEVfREFUQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudXNlcl9kYXRhID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCAgIFBBUkNFTEFCTEUgJzsnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHN5bnRheCBlcnJvciBpbiBwYXJjZWxhYmxlIGRlY2xhcmF0aW9uLiBFeHBlY3RlZCB0eXBlIG5hbWUuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19jdXJyZW50RmlsZW5hbWUsICQxLmJ1ZmZlci5saW5lbm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC51c2VyX2RhdGEgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8ICAgUEFSQ0VMQUJMRSBlcnJvciAnOycgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgc3ludGF4IGVycm9yIGluIHBhcmNlbGFibGUgZGVjbGFyYXRpb24uIEV4cGVjdGVkIHR5cGUgbmFtZSwgc2F3IFwiJXNcIi5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2N1cnJlbnRGaWxlbmFtZSwgJDIuYnVmZmVyLmxpbmVubywgJDIuYnVmZmVyLmRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC51c2VyX2RhdGEgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8ICAgRkxBVFRFTkFCTEUgSURFTlRJRklFUiAnOycgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YV90eXBlKiBiID0gKHVzZXJfZGF0YV90eXBlKiltYWxsb2Moc2l6ZW9mKHVzZXJfZGF0YV90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPmRvY3VtZW50X2l0ZW0uaXRlbV90eXBlID0gVVNFUl9EQVRBX1RZUEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPmRvY3VtZW50X2l0ZW0ubmV4dCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPmtleXdvcmRfdG9rZW4gPSAkMS5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPm5hbWUgPSAkMi5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPnBhY2thZ2UgPSBnX2N1cnJlbnRQYWNrYWdlID8gc3RyZHVwKGdfY3VycmVudFBhY2thZ2UpIDogTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+c2VtaWNvbG9uX3Rva2VuID0gJDMuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5mbGF0dGVuaW5nX21ldGhvZHMgPSBQQVJDRUxBQkxFX0RBVEEgfCBSUENfREFUQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudXNlcl9kYXRhID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCAgIEZMQVRURU5BQkxFICc7JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHN5bnRheCBlcnJvciBpbiBmbGF0dGVuYWJsZSBkZWNsYXJhdGlvbi4gRXhwZWN0ZWQgdHlwZSBuYW1lLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfY3VycmVudEZpbGVuYW1lLCAkMS5idWZmZXIubGluZW5vKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudXNlcl9kYXRhID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCAgIEZMQVRURU5BQkxFIGVycm9yICc7JyAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHN5bnRheCBlcnJvciBpbiBmbGF0dGVuYWJsZSBkZWNsYXJhdGlvbi4gRXhwZWN0ZWQgdHlwZSBuYW1lLCBzYXcgXCIlc1wiLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfY3VycmVudEZpbGVuYW1lLCAkMi5idWZmZXIubGluZW5vLCAkMi5idWZmZXIuZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLnVzZXJfZGF0YSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgOwotCi1pbnRlcmZhY2VfaGVhZGVyOgotICAgICAgICBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VfdHlwZSogYyA9IChpbnRlcmZhY2VfdHlwZSopbWFsbG9jKHNpemVvZihpbnRlcmZhY2VfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5kb2N1bWVudF9pdGVtLml0ZW1fdHlwZSA9IElOVEVSRkFDRV9UWVBFX0JJTkRFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+ZG9jdW1lbnRfaXRlbS5uZXh0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+aW50ZXJmYWNlX3Rva2VuID0gJDEuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5vbmV3YXkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZjLT5vbmV3YXlfdG9rZW4sIDAsIHNpemVvZihidWZmZXJfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jb21tZW50c190b2tlbiA9ICZjLT5pbnRlcmZhY2VfdG9rZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLmludGVyZmFjZV9vYmogPSBjOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHwgICBPTkVXQVkgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VfdHlwZSogYyA9IChpbnRlcmZhY2VfdHlwZSopbWFsbG9jKHNpemVvZihpbnRlcmZhY2VfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5kb2N1bWVudF9pdGVtLml0ZW1fdHlwZSA9IElOVEVSRkFDRV9UWVBFX0JJTkRFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+ZG9jdW1lbnRfaXRlbS5uZXh0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+aW50ZXJmYWNlX3Rva2VuID0gJDIuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5vbmV3YXkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5vbmV3YXlfdG9rZW4gPSAkMS5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNvbW1lbnRzX3Rva2VuID0gJmMtPm9uZXdheV90b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJmYWNlX29iaiA9IGM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCAgIFJQQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZV90eXBlKiBjID0gKGludGVyZmFjZV90eXBlKiltYWxsb2Moc2l6ZW9mKGludGVyZmFjZV90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmRvY3VtZW50X2l0ZW0uaXRlbV90eXBlID0gSU5URVJGQUNFX1RZUEVfUlBDOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5kb2N1bWVudF9pdGVtLm5leHQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5pbnRlcmZhY2VfdG9rZW4gPSAkMS5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPm9uZXdheSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJmMtPm9uZXdheV90b2tlbiwgMCwgc2l6ZW9mKGJ1ZmZlcl90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNvbW1lbnRzX3Rva2VuID0gJmMtPmludGVyZmFjZV90b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJmYWNlX29iaiA9IGM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgOwotCi1pbnRlcmZhY2Vfa2V5d29yZHM6Ci0gICAgICAgIElOVEVSRkFDRQotICAgIHwgICBSUEMKLSAgICA7Ci0KLWludGVyZmFjZV9kZWNsOgotICAgICAgICBpbnRlcmZhY2VfaGVhZGVyIElERU5USUZJRVIgJ3snIGludGVyZmFjZV9pdGVtcyAnfScgeyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlX3R5cGUqIGMgPSAkMS5pbnRlcmZhY2Vfb2JqOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5uYW1lID0gJDIuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5wYWNrYWdlID0gZ19jdXJyZW50UGFja2FnZSA/IHN0cmR1cChnX2N1cnJlbnRQYWNrYWdlKSA6IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPm9wZW5fYnJhY2VfdG9rZW4gPSAkMy5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmludGVyZmFjZV9pdGVtcyA9ICQ0LmludGVyZmFjZV9pdGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jbG9zZV9icmFjZV90b2tlbiA9ICQ1LmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJmYWNlX29iaiA9IGM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHwgICBpbnRlcmZhY2Vfa2V5d29yZHMgZXJyb3IgJ3snIGludGVyZmFjZV9pdGVtcyAnfScgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogc3ludGF4IGVycm9yIGluIGludGVyZmFjZSBkZWNsYXJhdGlvbi4gIEV4cGVjdGVkIHR5cGUgbmFtZSwgc2F3IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19jdXJyZW50RmlsZW5hbWUsICQyLmJ1ZmZlci5saW5lbm8sICQyLmJ1ZmZlci5kYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuZG9jdW1lbnRfaXRlbSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHwgICBpbnRlcmZhY2Vfa2V5d29yZHMgZXJyb3IgJ30nICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogc3ludGF4IGVycm9yIGluIGludGVyZmFjZSBkZWNsYXJhdGlvbi4gIEV4cGVjdGVkIHR5cGUgbmFtZSwgc2F3IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19jdXJyZW50RmlsZW5hbWUsICQyLmJ1ZmZlci5saW5lbm8sICQyLmJ1ZmZlci5kYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuZG9jdW1lbnRfaXRlbSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgOwotCi1pbnRlcmZhY2VfaXRlbXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5pbnRlcmZhY2VfaXRlbSA9IE5VTEw7IH0KLSAgICB8ICAgaW50ZXJmYWNlX2l0ZW1zIG1ldGhvZF9kZWNsICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZV9pdGVtX3R5cGUqIHA9JDEuaW50ZXJmYWNlX2l0ZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwICYmIHAtPm5leHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA9cC0+bmV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+bmV4dCA9IChpbnRlcmZhY2VfaXRlbV90eXBlKikkMi5tZXRob2Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJmYWNlX2l0ZW0gPSAoaW50ZXJmYWNlX2l0ZW1fdHlwZSopJDIubWV0aG9kOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHwgICBpbnRlcmZhY2VfaXRlbXMgZXJyb3IgJzsnICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogc3ludGF4IGVycm9yIGJlZm9yZSAnOycgKGV4cGVjdGVkIG1ldGhvZCBkZWNsYXJhdGlvbilcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfY3VycmVudEZpbGVuYW1lLCAkMy5idWZmZXIubGluZW5vKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgOwotCi1tZXRob2RfZGVjbDoKLSAgICAgICAgdHlwZSBJREVOVElGSUVSICcoJyBhcmdfbGlzdCAnKScgJzsnICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF90eXBlICptZXRob2QgPSAobWV0aG9kX3R5cGUqKW1hbGxvYyhzaXplb2YobWV0aG9kX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5pbnRlcmZhY2VfaXRlbS5pdGVtX3R5cGUgPSBNRVRIT0RfVFlQRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5pbnRlcmZhY2VfaXRlbS5uZXh0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5vbmV3YXkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT50eXBlID0gJDEudHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZtZXRob2QtPm9uZXdheV90b2tlbiwgMCwgc2l6ZW9mKGJ1ZmZlcl90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+bmFtZSA9ICQyLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5vcGVuX3BhcmVuX3Rva2VuID0gJDMuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmFyZ3MgPSAkNC5hcmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+Y2xvc2VfcGFyZW5fdG9rZW4gPSAkNS5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+aGFzSWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZtZXRob2QtPmVxdWFsc190b2tlbiwgMCwgc2l6ZW9mKGJ1ZmZlcl90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmbWV0aG9kLT5pZCwgMCwgc2l6ZW9mKGJ1ZmZlcl90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+c2VtaWNvbG9uX3Rva2VuID0gJDYuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmNvbW1lbnRzX3Rva2VuID0gJm1ldGhvZC0+dHlwZS50eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tZXRob2QgPSBtZXRob2Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHwgICBPTkVXQVkgdHlwZSBJREVOVElGSUVSICcoJyBhcmdfbGlzdCAnKScgJzsnICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF90eXBlICptZXRob2QgPSAobWV0aG9kX3R5cGUqKW1hbGxvYyhzaXplb2YobWV0aG9kX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5pbnRlcmZhY2VfaXRlbS5pdGVtX3R5cGUgPSBNRVRIT0RfVFlQRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5pbnRlcmZhY2VfaXRlbS5uZXh0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5vbmV3YXkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm9uZXdheV90b2tlbiA9ICQxLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT50eXBlID0gJDIudHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5uYW1lID0gJDMuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm9wZW5fcGFyZW5fdG9rZW4gPSAkNC5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+YXJncyA9ICQ1LmFyZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5jbG9zZV9wYXJlbl90b2tlbiA9ICQ2LmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5oYXNJZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJm1ldGhvZC0+ZXF1YWxzX3Rva2VuLCAwLCBzaXplb2YoYnVmZmVyX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZtZXRob2QtPmlkLCAwLCBzaXplb2YoYnVmZmVyX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5zZW1pY29sb25fdG9rZW4gPSAkNy5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+Y29tbWVudHNfdG9rZW4gPSAmbWV0aG9kLT5vbmV3YXlfdG9rZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1ldGhvZCA9IG1ldGhvZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCAgICB0eXBlIElERU5USUZJRVIgJygnIGFyZ19saXN0ICcpJyAnPScgSURWQUxVRSAnOycgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3R5cGUgKm1ldGhvZCA9IChtZXRob2RfdHlwZSopbWFsbG9jKHNpemVvZihtZXRob2RfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmludGVyZmFjZV9pdGVtLml0ZW1fdHlwZSA9IE1FVEhPRF9UWVBFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmludGVyZmFjZV9pdGVtLm5leHQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm9uZXdheSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJm1ldGhvZC0+b25ld2F5X3Rva2VuLCAwLCBzaXplb2YoYnVmZmVyX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT50eXBlID0gJDEudHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5uYW1lID0gJDIuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm9wZW5fcGFyZW5fdG9rZW4gPSAkMy5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+YXJncyA9ICQ0LmFyZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5jbG9zZV9wYXJlbl90b2tlbiA9ICQ1LmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5oYXNJZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+ZXF1YWxzX3Rva2VuID0gJDYuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmlkID0gJDcuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPnNlbWljb2xvbl90b2tlbiA9ICQ4LmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5jb21tZW50c190b2tlbiA9ICZtZXRob2QtPnR5cGUudHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubWV0aG9kID0gbWV0aG9kOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8ICAgT05FV0FZIHR5cGUgSURFTlRJRklFUiAnKCcgYXJnX2xpc3QgJyknICc9JyBJRFZBTFVFICc7JyAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfdHlwZSAqbWV0aG9kID0gKG1ldGhvZF90eXBlKiltYWxsb2Moc2l6ZW9mKG1ldGhvZF90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+aW50ZXJmYWNlX2l0ZW0uaXRlbV90eXBlID0gTUVUSE9EX1RZUEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+aW50ZXJmYWNlX2l0ZW0ubmV4dCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+b25ld2F5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5vbmV3YXlfdG9rZW4gPSAkMS5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+dHlwZSA9ICQyLnR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+bmFtZSA9ICQzLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5vcGVuX3BhcmVuX3Rva2VuID0gJDQuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmFyZ3MgPSAkNS5hcmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+Y2xvc2VfcGFyZW5fdG9rZW4gPSAkNi5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+aGFzSWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmVxdWFsc190b2tlbiA9ICQ3LmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5pZCA9ICQ4LmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5zZW1pY29sb25fdG9rZW4gPSAkOS5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+Y29tbWVudHNfdG9rZW4gPSAmbWV0aG9kLT5vbmV3YXlfdG9rZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1ldGhvZCA9IG1ldGhvZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgOwotCi1hcmdfbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5hcmcgPSBOVUxMOyB9Ci0gICAgfCAgIGFyZyAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSAkMTsgfQotICAgIHwgICBhcmdfbGlzdCAnLCcgYXJnICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQuYXJnICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IE5VTEwgb24gZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ190eXBlICpwID0gJDEuYXJnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwICYmIHAtPm5leHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcD1wLT5uZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMy5hcmctPmNvbW1hX3Rva2VuID0gJDIuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPm5leHQgPSAkMy5hcmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8ICAgZXJyb3IgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogc3ludGF4IGVycm9yIGluIHBhcmFtZXRlciBsaXN0XG4iLCBnX2N1cnJlbnRGaWxlbmFtZSwgJDEuYnVmZmVyLmxpbmVubyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5hcmcgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgOwotCi1hcmc6Ci0gICAgICAgIGRpcmVjdGlvbiB0eXBlIElERU5USUZJRVIgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ190eXBlKiBhcmcgPSAoYXJnX3R5cGUqKW1hbGxvYyhzaXplb2YoYXJnX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmYXJnLT5jb21tYV90b2tlbiwgMCwgc2l6ZW9mKGJ1ZmZlcl90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmctPmRpcmVjdGlvbiA9ICQxLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+dHlwZSA9ICQyLnR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmctPm5hbWUgPSAkMy5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmctPm5leHQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuYXJnID0gYXJnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgOwotCi10eXBlOgotICAgICAgICBJREVOVElGSUVSICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC50eXBlLnR5cGUgPSAkMS5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2J1ZmZlcl90eXBlKCYkJC50eXBlLmFycmF5X3Rva2VuLCB5eWxpbmVubyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC50eXBlLmRpbWVuc2lvbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8ICAgSURFTlRJRklFUiBBUlJBWSAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudHlwZS50eXBlID0gJDEuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudHlwZS5hcnJheV90b2tlbiA9ICQyLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLnR5cGUuZGltZW5zaW9uID0gY291bnRfYnJhY2tldHMoJDIuYnVmZmVyLmRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCAgIEdFTkVSSUMgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLnR5cGUudHlwZSA9ICQxLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfYnVmZmVyX3R5cGUoJiQkLnR5cGUuYXJyYXlfdG9rZW4sIHl5bGluZW5vKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLnR5cGUuZGltZW5zaW9uID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIDsKLQotZGlyZWN0aW9uOgotICAgICAgICAgICAgICAgICAgICB7IGluaXRfYnVmZmVyX3R5cGUoJiQkLmJ1ZmZlciwgeXlsaW5lbm8pOyB9Ci0gICAgfCAgIElOICAgICAgICAgIHsgJCQuYnVmZmVyID0gJDEuYnVmZmVyOyB9Ci0gICAgfCAgIE9VVCAgICAgICAgIHsgJCQuYnVmZmVyID0gJDEuYnVmZmVyOyB9Ci0gICAgfCAgIElOT1VUICAgICAgIHsgJCQuYnVmZmVyID0gJDEuYnVmZmVyOyB9Ci0gICAgOwotCi0lJQotCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi1pbnQgZ19lcnJvciA9IDA7Ci0KLWludCB5eWVycm9yKGNoYXIqIGVycnN0cikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlc1xuIiwgZ19jdXJyZW50RmlsZW5hbWUsIHl5bGluZW5vLCBlcnJzdHIpOwotICAgIGdfZXJyb3IgPSAxOwotICAgIHJldHVybiAxOwotfQotCi12b2lkIGluaXRfYnVmZmVyX3R5cGUoYnVmZmVyX3R5cGUqIGJ1ZiwgaW50IGxpbmVubykKLXsKLSAgICBidWYtPmxpbmVubyA9IGxpbmVubzsKLSAgICBidWYtPnRva2VuID0gMDsKLSAgICBidWYtPmRhdGEgPSBOVUxMOwotICAgIGJ1Zi0+ZXh0cmEgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGNvdW50X2JyYWNrZXRzKGNvbnN0IGNoYXIqIHMpCi17Ci0gICAgaW50IG49MDsKLSAgICB3aGlsZSAoKnMpIHsKLSAgICAgICAgaWYgKCpzID09ICdbJykgbisrOwotICAgICAgICBzKys7Ci0gICAgfQotICAgIHJldHVybiBuOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9nZW5lcmF0ZV9qYXZhLmNwcCBiL3Rvb2xzL2FpZGwvZ2VuZXJhdGVfamF2YS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNTc0MDcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9nZW5lcmF0ZV9qYXZhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSNpbmNsdWRlICJnZW5lcmF0ZV9qYXZhLmgiCi0jaW5jbHVkZSAiVHlwZS5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVZhcmlhYmxlRmFjdG9yeTo6VmFyaWFibGVGYWN0b3J5KGNvbnN0IHN0cmluZyYgYmFzZSkKLSAgICA6bV9iYXNlKGJhc2UpLAotICAgICBtX2luZGV4KDApCi17Ci19Ci0KLVZhcmlhYmxlKgotVmFyaWFibGVGYWN0b3J5OjpHZXQoVHlwZSogdHlwZSkKLXsKLSAgICBjaGFyIG5hbWVbMTAwXTsKLSAgICBzcHJpbnRmKG5hbWUsICIlcyVkIiwgbV9iYXNlLmNfc3RyKCksIG1faW5kZXgpOwotICAgIG1faW5kZXgrKzsKLSAgICBWYXJpYWJsZSogdiA9IG5ldyBWYXJpYWJsZSh0eXBlLCBuYW1lKTsKLSAgICBtX3ZhcnMucHVzaF9iYWNrKHYpOwotICAgIHJldHVybiB2OwotfQotCi1WYXJpYWJsZSoKLVZhcmlhYmxlRmFjdG9yeTo6R2V0KGludCBpbmRleCkKLXsKLSAgICByZXR1cm4gbV92YXJzW2luZGV4XTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RyaW5nCi1nYXRoZXJfY29tbWVudHMoZXh0cmFfdGV4dF90eXBlKiBleHRyYSkKLXsKLSAgICBzdHJpbmcgczsKLSAgICB3aGlsZSAoZXh0cmEpIHsKLSAgICAgICAgaWYgKGV4dHJhLT53aGljaCA9PSBTSE9SVF9DT01NRU5UKSB7Ci0gICAgICAgICAgICBzICs9IGV4dHJhLT5kYXRhOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGV4dHJhLT53aGljaCA9PSBMT05HX0NPTU1FTlQpIHsKLSAgICAgICAgICAgIHMgKz0gIi8qIjsKLSAgICAgICAgICAgIHMgKz0gZXh0cmEtPmRhdGE7Ci0gICAgICAgICAgICBzICs9ICIqLyI7Ci0gICAgICAgIH0KLSAgICAgICAgZXh0cmEgPSBleHRyYS0+bmV4dDsKLSAgICB9Ci0gICAgcmV0dXJuIHM7Ci19Ci0KLXN0cmluZwotYXBwZW5kKGNvbnN0IGNoYXIqIGEsIGNvbnN0IGNoYXIqIGIpCi17Ci0gICAgc3RyaW5nIHMgPSBhOwotICAgIHMgKz0gYjsKLSAgICByZXR1cm4gczsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotaW50Ci1nZW5lcmF0ZV9qYXZhKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IHN0cmluZyYgb3JpZ2luYWxTcmMsCi0gICAgICAgICAgICAgICAgaW50ZXJmYWNlX3R5cGUqIGlmYWNlKQotewotICAgIENsYXNzKiBjbDsKLQotICAgIGlmIChpZmFjZS0+ZG9jdW1lbnRfaXRlbS5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfQklOREVSKSB7Ci0gICAgICAgIGNsID0gZ2VuZXJhdGVfYmluZGVyX2ludGVyZmFjZV9jbGFzcyhpZmFjZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGlmYWNlLT5kb2N1bWVudF9pdGVtLml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9SUEMpIHsKLSAgICAgICAgY2wgPSBnZW5lcmF0ZV9ycGNfaW50ZXJmYWNlX2NsYXNzKGlmYWNlKTsKLSAgICB9Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBuZXcgRG9jdW1lbnQ7Ci0gICAgICAgIGRvY3VtZW50LT5jb21tZW50ID0gIiI7Ci0gICAgICAgIGlmIChpZmFjZS0+cGFja2FnZSkgZG9jdW1lbnQtPnBhY2thZ2UgPSBpZmFjZS0+cGFja2FnZTsKLSAgICAgICAgZG9jdW1lbnQtPm9yaWdpbmFsU3JjID0gb3JpZ2luYWxTcmM7Ci0gICAgICAgIGRvY3VtZW50LT5jbGFzc2VzLnB1c2hfYmFjayhjbCk7Ci0KLS8vICAgIHByaW50Zigib3V0cHV0dGluZy4uLiBmaWxlbmFtZT0lc1xuIiwgZmlsZW5hbWUuY19zdHIoKSk7Ci0gICAgRklMRSogdG87Ci0gICAgaWYgKGZpbGVuYW1lID09ICItIikgewotICAgICAgICB0byA9IHN0ZG91dDsKLSAgICB9IGVsc2UgewotICAgICAgIC8qIG9wZW4gZmlsZSBpbiBiaW5hcnkgbW9kZSB0byBlbnN1cmUgdGhhdCB0aGUgdG9vbCBwcm9kdWNlcyB0aGUKLSAgICAgICAgKiBzYW1lIG91dHB1dCBvbiBhbGwgcGxhdGZvcm1zICEhCi0gICAgICAgICovCi0gICAgICAgIHRvID0gZm9wZW4oZmlsZW5hbWUuY19zdHIoKSwgIndiIik7Ci0gICAgICAgIGlmICh0byA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byBvcGVuICVzIGZvciB3cml0ZVxuIiwgZmlsZW5hbWUuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRvY3VtZW50LT5Xcml0ZSh0byk7Ci0KLSAgICBmY2xvc2UodG8pOwotICAgIHJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS90b29scy9haWRsL2dlbmVyYXRlX2phdmEuaCBiL3Rvb2xzL2FpZGwvZ2VuZXJhdGVfamF2YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmZjZmViLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvZ2VuZXJhdGVfamF2YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotI2lmbmRlZiBHRU5FUkFURV9KQVZBX0gKLSNkZWZpbmUgR0VORVJBVEVfSkFWQV9ICi0KLSNpbmNsdWRlICJhaWRsX2xhbmd1YWdlLmgiCi0jaW5jbHVkZSAiQVNULmgiCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLWludCBnZW5lcmF0ZV9qYXZhKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IHN0cmluZyYgb3JpZ2luYWxTcmMsCi0gICAgICAgICAgICAgICAgaW50ZXJmYWNlX3R5cGUqIGlmYWNlKTsKLQotQ2xhc3MqIGdlbmVyYXRlX2JpbmRlcl9pbnRlcmZhY2VfY2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlKTsKLUNsYXNzKiBnZW5lcmF0ZV9ycGNfaW50ZXJmYWNlX2NsYXNzKGNvbnN0IGludGVyZmFjZV90eXBlKiBpZmFjZSk7Ci0KLXN0cmluZyBnYXRoZXJfY29tbWVudHMoZXh0cmFfdGV4dF90eXBlKiBleHRyYSk7Ci1zdHJpbmcgYXBwZW5kKGNvbnN0IGNoYXIqIGEsIGNvbnN0IGNoYXIqIGIpOwotCi1jbGFzcyBWYXJpYWJsZUZhY3RvcnkKLXsKLXB1YmxpYzoKLSAgICBWYXJpYWJsZUZhY3RvcnkoY29uc3Qgc3RyaW5nJiBiYXNlKTsgLy8gYmFzZSBtdXN0IGJlIHNob3J0Ci0gICAgVmFyaWFibGUqIEdldChUeXBlKiB0eXBlKTsKLSAgICBWYXJpYWJsZSogR2V0KGludCBpbmRleCk7Ci1wcml2YXRlOgotICAgIHZlY3RvcjxWYXJpYWJsZSo+IG1fdmFyczsKLSAgICBzdHJpbmcgbV9iYXNlOwotICAgIGludCBtX2luZGV4OwotfTsKLQotI2VuZGlmIC8vIEdFTkVSQVRFX0pBVkFfSAotCmRpZmYgLS1naXQgYS90b29scy9haWRsL2dlbmVyYXRlX2phdmFfYmluZGVyLmNwcCBiL3Rvb2xzL2FpZGwvZ2VuZXJhdGVfamF2YV9iaW5kZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjkxY2ViLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvZ2VuZXJhdGVfamF2YV9iaW5kZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTYwICswLDAgQEAKLSNpbmNsdWRlICJnZW5lcmF0ZV9qYXZhLmgiCi0jaW5jbHVkZSAiVHlwZS5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWNsYXNzIFN0dWJDbGFzcyA6IHB1YmxpYyBDbGFzcwotewotcHVibGljOgotICAgIFN0dWJDbGFzcyhUeXBlKiB0eXBlLCBUeXBlKiBpbnRlcmZhY2VUeXBlKTsKLSAgICB2aXJ0dWFsIH5TdHViQ2xhc3MoKTsKLQotICAgIFZhcmlhYmxlKiB0cmFuc2FjdF9jb2RlOwotICAgIFZhcmlhYmxlKiB0cmFuc2FjdF9kYXRhOwotICAgIFZhcmlhYmxlKiB0cmFuc2FjdF9yZXBseTsKLSAgICBWYXJpYWJsZSogdHJhbnNhY3RfZmxhZ3M7Ci0gICAgU3dpdGNoU3RhdGVtZW50KiB0cmFuc2FjdF9zd2l0Y2g7Ci1wcml2YXRlOgotICAgIHZvaWQgbWFrZV9hc19pbnRlcmZhY2UoVHlwZSogaW50ZXJmYWNlVHlwZSk7Ci19OwotCi1TdHViQ2xhc3M6OlN0dWJDbGFzcyhUeXBlKiB0eXBlLCBUeXBlKiBpbnRlcmZhY2VUeXBlKQotICAgIDpDbGFzcygpCi17Ci0gICAgdGhpcy0+Y29tbWVudCA9ICIvKiogTG9jYWwtc2lkZSBJUEMgaW1wbGVtZW50YXRpb24gc3R1YiBjbGFzcy4gKi8iOwotICAgIHRoaXMtPm1vZGlmaWVycyA9IFBVQkxJQyB8IEFCU1RSQUNUIHwgU1RBVElDOwotICAgIHRoaXMtPndoYXQgPSBDbGFzczo6Q0xBU1M7Ci0gICAgdGhpcy0+dHlwZSA9IHR5cGU7Ci0gICAgdGhpcy0+ZXh0ZW5kcyA9IEJJTkRFUl9OQVRJVkVfVFlQRTsKLSAgICB0aGlzLT5pbnRlcmZhY2VzLnB1c2hfYmFjayhpbnRlcmZhY2VUeXBlKTsKLQotICAgIC8vIGRlc2NyaXB0b3IKLSAgICBGaWVsZCogZGVzY3JpcHRvciA9IG5ldyBGaWVsZChTVEFUSUMgfCBGSU5BTCB8IFBSSVZBVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFZhcmlhYmxlKFNUUklOR19UWVBFLCAiREVTQ1JJUFRPUiIpKTsKLSAgICBkZXNjcmlwdG9yLT52YWx1ZSA9ICJcIiIgKyBpbnRlcmZhY2VUeXBlLT5RdWFsaWZpZWROYW1lKCkgKyAiXCIiOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayhkZXNjcmlwdG9yKTsKLQotICAgIC8vIGN0b3IKLSAgICBNZXRob2QqIGN0b3IgPSBuZXcgTWV0aG9kOwotICAgICAgICBjdG9yLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgIGN0b3ItPmNvbW1lbnQgPSAiLyoqIENvbnN0cnVjdCB0aGUgc3R1YiBhdCBhdHRhY2ggaXQgdG8gdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmZhY2UuICovIjsKLSAgICAgICAgY3Rvci0+bmFtZSA9ICJTdHViIjsKLSAgICAgICAgY3Rvci0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICBNZXRob2RDYWxsKiBhdHRhY2ggPSBuZXcgTWV0aG9kQ2FsbChUSElTX1ZBTFVFLCAiYXR0YWNoSW50ZXJmYWNlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCBUSElTX1ZBTFVFLCBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIkRFU0NSSVBUT1IiKSk7Ci0gICAgY3Rvci0+c3RhdGVtZW50cy0+QWRkKGF0dGFjaCk7Ci0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKGN0b3IpOwotCi0gICAgLy8gYXNJbnRlcmZhY2UKLSAgICBtYWtlX2FzX2ludGVyZmFjZShpbnRlcmZhY2VUeXBlKTsKLQotICAgIC8vIGFzQmluZGVyCi0gICAgTWV0aG9kKiBhc0JpbmRlciA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIGFzQmluZGVyLT5tb2RpZmllcnMgPSBQVUJMSUMgfCBPVkVSUklERTsKLSAgICAgICAgYXNCaW5kZXItPnJldHVyblR5cGUgPSBJQklOREVSX1RZUEU7Ci0gICAgICAgIGFzQmluZGVyLT5uYW1lID0gImFzQmluZGVyIjsKLSAgICAgICAgYXNCaW5kZXItPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgYXNCaW5kZXItPnN0YXRlbWVudHMtPkFkZChuZXcgUmV0dXJuU3RhdGVtZW50KFRISVNfVkFMVUUpKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2soYXNCaW5kZXIpOwotCi0gICAgLy8gb25UcmFuc2FjdAotICAgIHRoaXMtPnRyYW5zYWN0X2NvZGUgPSBuZXcgVmFyaWFibGUoSU5UX1RZUEUsICJjb2RlIik7Ci0gICAgdGhpcy0+dHJhbnNhY3RfZGF0YSA9IG5ldyBWYXJpYWJsZShQQVJDRUxfVFlQRSwgImRhdGEiKTsKLSAgICB0aGlzLT50cmFuc2FjdF9yZXBseSA9IG5ldyBWYXJpYWJsZShQQVJDRUxfVFlQRSwgInJlcGx5Iik7Ci0gICAgdGhpcy0+dHJhbnNhY3RfZmxhZ3MgPSBuZXcgVmFyaWFibGUoSU5UX1RZUEUsICJmbGFncyIpOwotICAgIE1ldGhvZCogb25UcmFuc2FjdCA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIG9uVHJhbnNhY3QtPm1vZGlmaWVycyA9IFBVQkxJQyB8IE9WRVJSSURFOwotICAgICAgICBvblRyYW5zYWN0LT5yZXR1cm5UeXBlID0gQk9PTEVBTl9UWVBFOwotICAgICAgICBvblRyYW5zYWN0LT5uYW1lID0gIm9uVHJhbnNhY3QiOwotICAgICAgICBvblRyYW5zYWN0LT5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0aGlzLT50cmFuc2FjdF9jb2RlKTsKLSAgICAgICAgb25UcmFuc2FjdC0+cGFyYW1ldGVycy5wdXNoX2JhY2sodGhpcy0+dHJhbnNhY3RfZGF0YSk7Ci0gICAgICAgIG9uVHJhbnNhY3QtPnBhcmFtZXRlcnMucHVzaF9iYWNrKHRoaXMtPnRyYW5zYWN0X3JlcGx5KTsKLSAgICAgICAgb25UcmFuc2FjdC0+cGFyYW1ldGVycy5wdXNoX2JhY2sodGhpcy0+dHJhbnNhY3RfZmxhZ3MpOwotICAgICAgICBvblRyYW5zYWN0LT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgICAgICBvblRyYW5zYWN0LT5leGNlcHRpb25zLnB1c2hfYmFjayhSRU1PVEVfRVhDRVBUSU9OX1RZUEUpOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayhvblRyYW5zYWN0KTsKLSAgICB0aGlzLT50cmFuc2FjdF9zd2l0Y2ggPSBuZXcgU3dpdGNoU3RhdGVtZW50KHRoaXMtPnRyYW5zYWN0X2NvZGUpOwotCi0gICAgb25UcmFuc2FjdC0+c3RhdGVtZW50cy0+QWRkKHRoaXMtPnRyYW5zYWN0X3N3aXRjaCk7Ci0gICAgTWV0aG9kQ2FsbCogc3VwZXJDYWxsID0gbmV3IE1ldGhvZENhbGwoU1VQRVJfVkFMVUUsICJvblRyYW5zYWN0IiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRyYW5zYWN0X2NvZGUsIHRoaXMtPnRyYW5zYWN0X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT50cmFuc2FjdF9yZXBseSwgdGhpcy0+dHJhbnNhY3RfZmxhZ3MpOwotICAgIG9uVHJhbnNhY3QtPnN0YXRlbWVudHMtPkFkZChuZXcgUmV0dXJuU3RhdGVtZW50KHN1cGVyQ2FsbCkpOwotfQotCi1TdHViQ2xhc3M6On5TdHViQ2xhc3MoKQotewotfQotCi12b2lkCi1TdHViQ2xhc3M6Om1ha2VfYXNfaW50ZXJmYWNlKFR5cGUgKmludGVyZmFjZVR5cGUpCi17Ci0gICAgVmFyaWFibGUqIG9iaiA9IG5ldyBWYXJpYWJsZShJQklOREVSX1RZUEUsICJvYmoiKTsKLQotICAgIE1ldGhvZCogbSA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIG0tPmNvbW1lbnQgPSAiLyoqXG4gKiBDYXN0IGFuIElCaW5kZXIgb2JqZWN0IGludG8gYW4gIjsKLSAgICAgICAgbS0+Y29tbWVudCArPSBpbnRlcmZhY2VUeXBlLT5RdWFsaWZpZWROYW1lKCk7Ci0gICAgICAgIG0tPmNvbW1lbnQgKz0gIiBpbnRlcmZhY2UsXG4iOwotICAgICAgICBtLT5jb21tZW50ICs9ICIgKiBnZW5lcmF0aW5nIGEgcHJveHkgaWYgbmVlZGVkLlxuICovIjsKLSAgICAgICAgbS0+bW9kaWZpZXJzID0gUFVCTElDIHwgU1RBVElDOwotICAgICAgICBtLT5yZXR1cm5UeXBlID0gaW50ZXJmYWNlVHlwZTsKLSAgICAgICAgbS0+bmFtZSA9ICJhc0ludGVyZmFjZSI7Ci0gICAgICAgIG0tPnBhcmFtZXRlcnMucHVzaF9iYWNrKG9iaik7Ci0gICAgICAgIG0tPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0KLSAgICBJZlN0YXRlbWVudCogaWZzdGF0ZW1lbnQgPSBuZXcgSWZTdGF0ZW1lbnQoKTsKLSAgICAgICAgaWZzdGF0ZW1lbnQtPmV4cHJlc3Npb24gPSBuZXcgQ29tcGFyaXNvbihvYmosICI9PSIsIE5VTExfVkFMVUUpOwotICAgICAgICBpZnN0YXRlbWVudC0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICAgICAgaWZzdGF0ZW1lbnQtPnN0YXRlbWVudHMtPkFkZChuZXcgUmV0dXJuU3RhdGVtZW50KE5VTExfVkFMVUUpKTsKLSAgICBtLT5zdGF0ZW1lbnRzLT5BZGQoaWZzdGF0ZW1lbnQpOwotCi0gICAgLy8gSUludGVyZmFjZSBpaW4gPSBvYmoucXVlcnlMb2NhbEludGVyZmFjZShERVNDUklQVE9SKQotICAgIE1ldGhvZENhbGwqIHF1ZXJ5TG9jYWxJbnRlcmZhY2UgPSBuZXcgTWV0aG9kQ2FsbChvYmosICJxdWVyeUxvY2FsSW50ZXJmYWNlIik7Ci0gICAgcXVlcnlMb2NhbEludGVyZmFjZS0+YXJndW1lbnRzLnB1c2hfYmFjayhuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIkRFU0NSSVBUT1IiKSk7Ci0gICAgSUludGVyZmFjZVR5cGUqIGlpblR5cGUgPSBuZXcgSUludGVyZmFjZVR5cGUoKTsKLSAgICBWYXJpYWJsZSAqaWluID0gbmV3IFZhcmlhYmxlKGlpblR5cGUsICJpaW4iKTsKLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uKiBpaW5WZCA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGlpbiwgcXVlcnlMb2NhbEludGVyZmFjZSwgTlVMTCk7Ci0gICAgbS0+c3RhdGVtZW50cy0+QWRkKGlpblZkKTsKLQotICAgIC8vIEVuc3VyZSB0aGUgaW5zdGFuY2UgdHlwZSBvZiB0aGUgbG9jYWwgb2JqZWN0IGlzIGFzIGV4cGVjdGVkLgotICAgIC8vIE9uZSBzY2VuYXJpbyB3aGVyZSB0aGlzIGlzIG5lZWRlZCBpcyBpZiBhbm90aGVyIHBhY2thZ2UgKHdpdGggYQotICAgIC8vIGRpZmZlcmVudCBjbGFzcyBsb2FkZXIpIHJ1bnMgaW4gdGhlIHNhbWUgcHJvY2VzcyBhcyB0aGUgc2VydmljZS4KLQotICAgIC8vIGlmIChpaW4gIT0gbnVsbCAmJiBpaW4gaW5zdGFuY2VvZiA8aW50ZXJmYWNlVHlwZT4pIHJldHVybiAoPGludGVyZmFjZVR5cGU+KSBpaW47Ci0gICAgQ29tcGFyaXNvbiogaWluTm90TnVsbCA9IG5ldyBDb21wYXJpc29uKGlpbiwgIiE9IiwgTlVMTF9WQUxVRSk7Ci0gICAgQ29tcGFyaXNvbiogaW5zdE9mQ2hlY2sgPSBuZXcgQ29tcGFyaXNvbihpaW4sICIgaW5zdGFuY2VvZiAiLAotICAgICAgICAgICAgbmV3IExpdGVyYWxFeHByZXNzaW9uKGludGVyZmFjZVR5cGUtPlF1YWxpZmllZE5hbWUoKSkpOwotICAgIElmU3RhdGVtZW50KiBpbnN0T2ZTdGF0ZW1lbnQgPSBuZXcgSWZTdGF0ZW1lbnQoKTsKLSAgICAgICAgaW5zdE9mU3RhdGVtZW50LT5leHByZXNzaW9uID0gbmV3IENvbXBhcmlzb24oaWluTm90TnVsbCwgIiYmIiwgaW5zdE9mQ2hlY2spOwotICAgICAgICBpbnN0T2ZTdGF0ZW1lbnQtPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgICAgIGluc3RPZlN0YXRlbWVudC0+c3RhdGVtZW50cy0+QWRkKG5ldyBSZXR1cm5TdGF0ZW1lbnQobmV3IENhc3QoaW50ZXJmYWNlVHlwZSwgaWluKSkpOwotICAgIG0tPnN0YXRlbWVudHMtPkFkZChpbnN0T2ZTdGF0ZW1lbnQpOwotCi0gICAgc3RyaW5nIHByb3h5VHlwZSA9IGludGVyZmFjZVR5cGUtPlF1YWxpZmllZE5hbWUoKTsKLSAgICBwcm94eVR5cGUgKz0gIi5TdHViLlByb3h5IjsKLSAgICBOZXdFeHByZXNzaW9uKiBuZSA9IG5ldyBOZXdFeHByZXNzaW9uKE5BTUVTLkZpbmQocHJveHlUeXBlKSk7Ci0gICAgbmUtPmFyZ3VtZW50cy5wdXNoX2JhY2sob2JqKTsKLSAgICBtLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFJldHVyblN0YXRlbWVudChuZSkpOwotCi0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKG0pOwotfQotCi0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotY2xhc3MgUHJveHlDbGFzcyA6IHB1YmxpYyBDbGFzcwotewotcHVibGljOgotICAgIFByb3h5Q2xhc3MoVHlwZSogdHlwZSwgSW50ZXJmYWNlVHlwZSogaW50ZXJmYWNlVHlwZSk7Ci0gICAgdmlydHVhbCB+UHJveHlDbGFzcygpOwotCi0gICAgVmFyaWFibGUqIG1SZW1vdGU7Ci0gICAgYm9vbCBtT25lV2F5OwotfTsKLQotUHJveHlDbGFzczo6UHJveHlDbGFzcyhUeXBlKiB0eXBlLCBJbnRlcmZhY2VUeXBlKiBpbnRlcmZhY2VUeXBlKQotICAgIDpDbGFzcygpCi17Ci0gICAgdGhpcy0+bW9kaWZpZXJzID0gUFJJVkFURSB8IFNUQVRJQzsKLSAgICB0aGlzLT53aGF0ID0gQ2xhc3M6OkNMQVNTOwotICAgIHRoaXMtPnR5cGUgPSB0eXBlOwotICAgIHRoaXMtPmludGVyZmFjZXMucHVzaF9iYWNrKGludGVyZmFjZVR5cGUpOwotCi0gICAgbU9uZVdheSA9IGludGVyZmFjZVR5cGUtPk9uZVdheSgpOwotCi0gICAgLy8gSUJpbmRlciBtUmVtb3RlCi0gICAgbVJlbW90ZSA9IG5ldyBWYXJpYWJsZShJQklOREVSX1RZUEUsICJtUmVtb3RlIik7Ci0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKG5ldyBGaWVsZChQUklWQVRFLCBtUmVtb3RlKSk7Ci0KLSAgICAvLyBQcm94eSgpCi0gICAgVmFyaWFibGUqIHJlbW90ZSA9IG5ldyBWYXJpYWJsZShJQklOREVSX1RZUEUsICJyZW1vdGUiKTsKLSAgICBNZXRob2QqIGN0b3IgPSBuZXcgTWV0aG9kOwotICAgICAgICBjdG9yLT5uYW1lID0gIlByb3h5IjsKLSAgICAgICAgY3Rvci0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICAgICAgY3Rvci0+cGFyYW1ldGVycy5wdXNoX2JhY2socmVtb3RlKTsKLSAgICBjdG9yLT5zdGF0ZW1lbnRzLT5BZGQobmV3IEFzc2lnbm1lbnQobVJlbW90ZSwgcmVtb3RlKSk7Ci0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKGN0b3IpOwotCi0gICAgLy8gSUJpbmRlciBhc0JpbmRlcigpCi0gICAgTWV0aG9kKiBhc0JpbmRlciA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIGFzQmluZGVyLT5tb2RpZmllcnMgPSBQVUJMSUMgfCBPVkVSUklERTsKLSAgICAgICAgYXNCaW5kZXItPnJldHVyblR5cGUgPSBJQklOREVSX1RZUEU7Ci0gICAgICAgIGFzQmluZGVyLT5uYW1lID0gImFzQmluZGVyIjsKLSAgICAgICAgYXNCaW5kZXItPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgYXNCaW5kZXItPnN0YXRlbWVudHMtPkFkZChuZXcgUmV0dXJuU3RhdGVtZW50KG1SZW1vdGUpKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2soYXNCaW5kZXIpOwotfQotCi1Qcm94eUNsYXNzOjp+UHJveHlDbGFzcygpCi17Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZV9uZXdfYXJyYXkoVHlwZSogdCwgU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsKQotewotICAgIFZhcmlhYmxlKiBsZW4gPSBuZXcgVmFyaWFibGUoSU5UX1RZUEUsIHYtPm5hbWUgKyAiX2xlbmd0aCIpOwotICAgIGFkZFRvLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24obGVuLCBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkSW50IikpKTsKLSAgICBJZlN0YXRlbWVudCogbGVuY2hlY2sgPSBuZXcgSWZTdGF0ZW1lbnQoKTsKLSAgICBsZW5jaGVjay0+ZXhwcmVzc2lvbiA9IG5ldyBDb21wYXJpc29uKGxlbiwgIjwiLCBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIjAiKSk7Ci0gICAgbGVuY2hlY2stPnN0YXRlbWVudHMtPkFkZChuZXcgQXNzaWdubWVudCh2LCBOVUxMX1ZBTFVFKSk7Ci0gICAgbGVuY2hlY2stPmVsc2VpZiA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgIGxlbmNoZWNrLT5lbHNlaWYtPnN0YXRlbWVudHMtPkFkZChuZXcgQXNzaWdubWVudCh2LAotICAgICAgICAgICAgICAgIG5ldyBOZXdBcnJheUV4cHJlc3Npb24odCwgbGVuKSkpOwotICAgIGFkZFRvLT5BZGQobGVuY2hlY2spOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfd3JpdGVfdG9fcGFyY2VsKFR5cGUqIHQsIFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGlmICh2LT5kaW1lbnNpb24gPT0gMCkgewotICAgICAgICB0LT5Xcml0ZVRvUGFyY2VsKGFkZFRvLCB2LCBwYXJjZWwsIGZsYWdzKTsKLSAgICB9Ci0gICAgaWYgKHYtPmRpbWVuc2lvbiA9PSAxKSB7Ci0gICAgICAgIHQtPldyaXRlQXJyYXlUb1BhcmNlbChhZGRUbywgdiwgcGFyY2VsLCBmbGFncyk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfY3JlYXRlX2Zyb21fcGFyY2VsKFR5cGUqIHQsIFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCkKLXsKLSAgICBpZiAodi0+ZGltZW5zaW9uID09IDApIHsKLSAgICAgICAgdC0+Q3JlYXRlRnJvbVBhcmNlbChhZGRUbywgdiwgcGFyY2VsLCBjbCk7Ci0gICAgfQotICAgIGlmICh2LT5kaW1lbnNpb24gPT0gMSkgewotICAgICAgICB0LT5DcmVhdGVBcnJheUZyb21QYXJjZWwoYWRkVG8sIHYsIHBhcmNlbCwgY2wpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLWdlbmVyYXRlX3JlYWRfZnJvbV9wYXJjZWwoVHlwZSogdCwgU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKQotewotICAgIGlmICh2LT5kaW1lbnNpb24gPT0gMCkgewotICAgICAgICB0LT5SZWFkRnJvbVBhcmNlbChhZGRUbywgdiwgcGFyY2VsLCBjbCk7Ci0gICAgfQotICAgIGlmICh2LT5kaW1lbnNpb24gPT0gMSkgewotICAgICAgICB0LT5SZWFkQXJyYXlGcm9tUGFyY2VsKGFkZFRvLCB2LCBwYXJjZWwsIGNsKTsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdlbmVyYXRlX21ldGhvZChjb25zdCBtZXRob2RfdHlwZSogbWV0aG9kLCBDbGFzcyogaW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgICBTdHViQ2xhc3MqIHN0dWJDbGFzcywgUHJveHlDbGFzcyogcHJveHlDbGFzcywgaW50IGluZGV4KQotewotICAgIGFyZ190eXBlKiBhcmc7Ci0gICAgaW50IGk7Ci0gICAgYm9vbCBoYXNPdXRQYXJhbXMgPSBmYWxzZTsKLQotICAgIGNvbnN0IGJvb2wgb25ld2F5ID0gcHJveHlDbGFzcy0+bU9uZVdheSB8fCBtZXRob2QtPm9uZXdheTsKLQotICAgIC8vID09IHRoZSBUUkFOU0FDVF8gY29uc3RhbnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgc3RyaW5nIHRyYW5zYWN0Q29kZU5hbWUgPSAiVFJBTlNBQ1RJT05fIjsKLSAgICB0cmFuc2FjdENvZGVOYW1lICs9IG1ldGhvZC0+bmFtZS5kYXRhOwotCi0gICAgY2hhciB0cmFuc2FjdENvZGVWYWx1ZVs2MF07Ci0gICAgc3ByaW50Zih0cmFuc2FjdENvZGVWYWx1ZSwgIihhbmRyb2lkLm9zLklCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTiArICVkKSIsIGluZGV4KTsKLQotICAgIEZpZWxkKiB0cmFuc2FjdENvZGUgPSBuZXcgRmllbGQoU1RBVElDIHwgRklOQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFZhcmlhYmxlKElOVF9UWVBFLCB0cmFuc2FjdENvZGVOYW1lKSk7Ci0gICAgdHJhbnNhY3RDb2RlLT52YWx1ZSA9IHRyYW5zYWN0Q29kZVZhbHVlOwotICAgIHN0dWJDbGFzcy0+ZWxlbWVudHMucHVzaF9iYWNrKHRyYW5zYWN0Q29kZSk7Ci0KLSAgICAvLyA9PSB0aGUgZGVjbGFyYXRpb24gaW4gdGhlIGludGVyZmFjZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIE1ldGhvZCogZGVjbCA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIGRlY2wtPmNvbW1lbnQgPSBnYXRoZXJfY29tbWVudHMobWV0aG9kLT5jb21tZW50c190b2tlbi0+ZXh0cmEpOwotICAgICAgICBkZWNsLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgIGRlY2wtPnJldHVyblR5cGUgPSBOQU1FUy5TZWFyY2gobWV0aG9kLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgIGRlY2wtPnJldHVyblR5cGVEaW1lbnNpb24gPSBtZXRob2QtPnR5cGUuZGltZW5zaW9uOwotICAgICAgICBkZWNsLT5uYW1lID0gbWV0aG9kLT5uYW1lLmRhdGE7Ci0KLSAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgd2hpbGUgKGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgIGRlY2wtPnBhcmFtZXRlcnMucHVzaF9iYWNrKG5ldyBWYXJpYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSksIGFyZy0+bmFtZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+dHlwZS5kaW1lbnNpb24pKTsKLSAgICAgICAgYXJnID0gYXJnLT5uZXh0OwotICAgIH0KLQotICAgIGRlY2wtPmV4Y2VwdGlvbnMucHVzaF9iYWNrKFJFTU9URV9FWENFUFRJT05fVFlQRSk7Ci0KLSAgICBpbnRlcmZhY2UtPmVsZW1lbnRzLnB1c2hfYmFjayhkZWNsKTsKLQotICAgIC8vID09IHRoZSBzdHViIG1ldGhvZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBDYXNlKiBjID0gbmV3IENhc2UodHJhbnNhY3RDb2RlTmFtZSk7Ci0KLSAgICBNZXRob2RDYWxsKiByZWFsQ2FsbCA9IG5ldyBNZXRob2RDYWxsKFRISVNfVkFMVUUsIG1ldGhvZC0+bmFtZS5kYXRhKTsKLQotICAgIC8vIGludGVyZmFjZSB0b2tlbiB2YWxpZGF0aW9uIGlzIHRoZSB2ZXJ5IGZpcnN0IHRoaW5nIHdlIGRvCi0gICAgYy0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKHN0dWJDbGFzcy0+dHJhbnNhY3RfZGF0YSwKLSAgICAgICAgICAgICJlbmZvcmNlSW50ZXJmYWNlIiwgMSwgbmV3IExpdGVyYWxFeHByZXNzaW9uKCJERVNDUklQVE9SIikpKTsKLQotICAgIC8vIGFyZ3MKLSAgICBWYXJpYWJsZSogY2wgPSBOVUxMOwotICAgIFZhcmlhYmxlRmFjdG9yeSBzdHViQXJncygiX2FyZyIpOwotICAgIGFyZyA9IG1ldGhvZC0+YXJnczsKLSAgICB3aGlsZSAoYXJnICE9IE5VTEwpIHsKLSAgICAgICAgVHlwZSogdCA9IE5BTUVTLlNlYXJjaChhcmctPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgVmFyaWFibGUqIHYgPSBzdHViQXJncy5HZXQodCk7Ci0gICAgICAgIHYtPmRpbWVuc2lvbiA9IGFyZy0+dHlwZS5kaW1lbnNpb247Ci0KLSAgICAgICAgYy0+c3RhdGVtZW50cy0+QWRkKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKHYpKTsKLQotICAgICAgICBpZiAoY29udmVydF9kaXJlY3Rpb24oYXJnLT5kaXJlY3Rpb24uZGF0YSkgJiBJTl9QQVJBTUVURVIpIHsKLSAgICAgICAgICAgIGdlbmVyYXRlX2NyZWF0ZV9mcm9tX3BhcmNlbCh0LCBjLT5zdGF0ZW1lbnRzLCB2LAotICAgICAgICAgICAgICAgICAgICBzdHViQ2xhc3MtPnRyYW5zYWN0X2RhdGEsICZjbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXJnLT50eXBlLmRpbWVuc2lvbiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgYy0+c3RhdGVtZW50cy0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBOZXdFeHByZXNzaW9uKHYtPnR5cGUpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChhcmctPnR5cGUuZGltZW5zaW9uID09IDEpIHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZV9uZXdfYXJyYXkodi0+dHlwZSwgYy0+c3RhdGVtZW50cywgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJDbGFzcy0+dHJhbnNhY3RfZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgX19MSU5FX18pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmVhbENhbGwtPmFyZ3VtZW50cy5wdXNoX2JhY2sodik7Ci0KLSAgICAgICAgYXJnID0gYXJnLT5uZXh0OwotICAgIH0KLQotICAgIC8vIHRoZSByZWFsIGNhbGwKLSAgICBWYXJpYWJsZSogX3Jlc3VsdCA9IE5VTEw7Ci0gICAgaWYgKDAgPT0gc3RyY21wKG1ldGhvZC0+dHlwZS50eXBlLmRhdGEsICJ2b2lkIikpIHsKLSAgICAgICAgYy0+c3RhdGVtZW50cy0+QWRkKHJlYWxDYWxsKTsKLQotICAgICAgICBpZiAoIW9uZXdheSkgewotICAgICAgICAgICAgLy8gcmVwb3J0IHRoYXQgdGhlcmUgd2VyZSBubyBleGNlcHRpb25zCi0gICAgICAgICAgICBNZXRob2RDYWxsKiBleCA9IG5ldyBNZXRob2RDYWxsKHN0dWJDbGFzcy0+dHJhbnNhY3RfcmVwbHksCi0gICAgICAgICAgICAgICAgICAgICJ3cml0ZU5vRXhjZXB0aW9uIiwgMCk7Ci0gICAgICAgICAgICBjLT5zdGF0ZW1lbnRzLT5BZGQoZXgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgX3Jlc3VsdCA9IG5ldyBWYXJpYWJsZShkZWNsLT5yZXR1cm5UeXBlLCAiX3Jlc3VsdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2wtPnJldHVyblR5cGVEaW1lbnNpb24pOwotICAgICAgICBjLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oX3Jlc3VsdCwgcmVhbENhbGwpKTsKLQotICAgICAgICBpZiAoIW9uZXdheSkgewotICAgICAgICAgICAgLy8gcmVwb3J0IHRoYXQgdGhlcmUgd2VyZSBubyBleGNlcHRpb25zCi0gICAgICAgICAgICBNZXRob2RDYWxsKiBleCA9IG5ldyBNZXRob2RDYWxsKHN0dWJDbGFzcy0+dHJhbnNhY3RfcmVwbHksCi0gICAgICAgICAgICAgICAgICAgICJ3cml0ZU5vRXhjZXB0aW9uIiwgMCk7Ci0gICAgICAgICAgICBjLT5zdGF0ZW1lbnRzLT5BZGQoZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbWFyc2hhbGwgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBnZW5lcmF0ZV93cml0ZV90b19wYXJjZWwoZGVjbC0+cmV0dXJuVHlwZSwgYy0+c3RhdGVtZW50cywgX3Jlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJDbGFzcy0+dHJhbnNhY3RfcmVwbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlOjpQQVJDRUxBQkxFX1dSSVRFX1JFVFVSTl9WQUxVRSk7Ci0gICAgfQotCi0gICAgLy8gb3V0IHBhcmFtZXRlcnMKLSAgICBpID0gMDsKLSAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgd2hpbGUgKGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgIFR5cGUqIHQgPSBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgIFZhcmlhYmxlKiB2ID0gc3R1YkFyZ3MuR2V0KGkrKyk7Ci0KLSAgICAgICAgaWYgKGNvbnZlcnRfZGlyZWN0aW9uKGFyZy0+ZGlyZWN0aW9uLmRhdGEpICYgT1VUX1BBUkFNRVRFUikgewotICAgICAgICAgICAgZ2VuZXJhdGVfd3JpdGVfdG9fcGFyY2VsKHQsIGMtPnN0YXRlbWVudHMsIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJDbGFzcy0+dHJhbnNhY3RfcmVwbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU6OlBBUkNFTEFCTEVfV1JJVEVfUkVUVVJOX1ZBTFVFKTsKLSAgICAgICAgICAgIGhhc091dFBhcmFtcyA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBhcmcgPSBhcmctPm5leHQ7Ci0gICAgfQotCi0gICAgLy8gcmV0dXJuIHRydWUKLSAgICBjLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFJldHVyblN0YXRlbWVudChUUlVFX1ZBTFVFKSk7Ci0gICAgc3R1YkNsYXNzLT50cmFuc2FjdF9zd2l0Y2gtPmNhc2VzLnB1c2hfYmFjayhjKTsKLQotICAgIC8vID09IHRoZSBwcm94eSBtZXRob2QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgTWV0aG9kKiBwcm94eSA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIHByb3h5LT5jb21tZW50ID0gZ2F0aGVyX2NvbW1lbnRzKG1ldGhvZC0+Y29tbWVudHNfdG9rZW4tPmV4dHJhKTsKLSAgICAgICAgcHJveHktPm1vZGlmaWVycyA9IFBVQkxJQyB8IE9WRVJSSURFOwotICAgICAgICBwcm94eS0+cmV0dXJuVHlwZSA9IE5BTUVTLlNlYXJjaChtZXRob2QtPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgcHJveHktPnJldHVyblR5cGVEaW1lbnNpb24gPSBtZXRob2QtPnR5cGUuZGltZW5zaW9uOwotICAgICAgICBwcm94eS0+bmFtZSA9IG1ldGhvZC0+bmFtZS5kYXRhOwotICAgICAgICBwcm94eS0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICAgICAgYXJnID0gbWV0aG9kLT5hcmdzOwotICAgICAgICB3aGlsZSAoYXJnICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHByb3h5LT5wYXJhbWV0ZXJzLnB1c2hfYmFjayhuZXcgVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMuU2VhcmNoKGFyZy0+dHlwZS50eXBlLmRhdGEpLCBhcmctPm5hbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmctPnR5cGUuZGltZW5zaW9uKSk7Ci0gICAgICAgICAgICBhcmcgPSBhcmctPm5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcHJveHktPmV4Y2VwdGlvbnMucHVzaF9iYWNrKFJFTU9URV9FWENFUFRJT05fVFlQRSk7Ci0gICAgcHJveHlDbGFzcy0+ZWxlbWVudHMucHVzaF9iYWNrKHByb3h5KTsKLQotICAgIC8vIHRoZSBwYXJjZWxzCi0gICAgVmFyaWFibGUqIF9kYXRhID0gbmV3IFZhcmlhYmxlKFBBUkNFTF9UWVBFLCAiX2RhdGEiKTsKLSAgICBwcm94eS0+c3RhdGVtZW50cy0+QWRkKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbChQQVJDRUxfVFlQRSwgIm9idGFpbiIpKSk7Ci0gICAgVmFyaWFibGUqIF9yZXBseSA9IE5VTEw7Ci0gICAgaWYgKCFvbmV3YXkpIHsKLSAgICAgICAgX3JlcGx5ID0gbmV3IFZhcmlhYmxlKFBBUkNFTF9UWVBFLCAiX3JlcGx5Iik7Ci0gICAgICAgIHByb3h5LT5zdGF0ZW1lbnRzLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oX3JlcGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1ldGhvZENhbGwoUEFSQ0VMX1RZUEUsICJvYnRhaW4iKSkpOwotICAgIH0KLQotICAgIC8vIHRoZSByZXR1cm4gdmFsdWUKLSAgICBfcmVzdWx0ID0gTlVMTDsKLSAgICBpZiAoMCAhPSBzdHJjbXAobWV0aG9kLT50eXBlLnR5cGUuZGF0YSwgInZvaWQiKSkgewotICAgICAgICBfcmVzdWx0ID0gbmV3IFZhcmlhYmxlKHByb3h5LT5yZXR1cm5UeXBlLCAiX3Jlc3VsdCIsCi0gICAgICAgICAgICAgICAgbWV0aG9kLT50eXBlLmRpbWVuc2lvbik7Ci0gICAgICAgIHByb3h5LT5zdGF0ZW1lbnRzLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oX3Jlc3VsdCkpOwotICAgIH0KLQotICAgIC8vIHRyeSBhbmQgZmluYWxseQotICAgIFRyeVN0YXRlbWVudCogdHJ5U3RhdGVtZW50ID0gbmV3IFRyeVN0YXRlbWVudCgpOwotICAgIHByb3h5LT5zdGF0ZW1lbnRzLT5BZGQodHJ5U3RhdGVtZW50KTsKLSAgICBGaW5hbGx5U3RhdGVtZW50KiBmaW5hbGx5U3RhdGVtZW50ID0gbmV3IEZpbmFsbHlTdGF0ZW1lbnQoKTsKLSAgICBwcm94eS0+c3RhdGVtZW50cy0+QWRkKGZpbmFsbHlTdGF0ZW1lbnQpOwotCi0gICAgLy8gdGhlIGludGVyZmFjZSBpZGVudGlmaWVyIHRva2VuOiB0aGUgREVTQ1JJUFRPUiBjb25zdGFudCwgbWFyc2hhbGxlZCBhcyBhIHN0cmluZwotICAgIHRyeVN0YXRlbWVudC0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKF9kYXRhLCAid3JpdGVJbnRlcmZhY2VUb2tlbiIsCi0gICAgICAgICAgICAxLCBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIkRFU0NSSVBUT1IiKSkpOwotCi0gICAgLy8gdGhlIHBhcmFtZXRlcnMKLSAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgd2hpbGUgKGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgIFR5cGUqIHQgPSBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgIFZhcmlhYmxlKiB2ID0gbmV3IFZhcmlhYmxlKHQsIGFyZy0+bmFtZS5kYXRhLCBhcmctPnR5cGUuZGltZW5zaW9uKTsKLSAgICAgICAgaW50IGRpciA9IGNvbnZlcnRfZGlyZWN0aW9uKGFyZy0+ZGlyZWN0aW9uLmRhdGEpOwotICAgICAgICBpZiAoZGlyID09IE9VVF9QQVJBTUVURVIgJiYgYXJnLT50eXBlLmRpbWVuc2lvbiAhPSAwKSB7Ci0gICAgICAgICAgICBJZlN0YXRlbWVudCogY2hlY2tsZW4gPSBuZXcgSWZTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIGNoZWNrbGVuLT5leHByZXNzaW9uID0gbmV3IENvbXBhcmlzb24odiwgIj09IiwgTlVMTF9WQUxVRSk7Ci0gICAgICAgICAgICBjaGVja2xlbi0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKF9kYXRhLCAid3JpdGVJbnQiLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpdGVyYWxFeHByZXNzaW9uKCItMSIpKSk7Ci0gICAgICAgICAgICBjaGVja2xlbi0+ZWxzZWlmID0gbmV3IElmU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICBjaGVja2xlbi0+ZWxzZWlmLT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwoX2RhdGEsICJ3cml0ZUludCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAxLCBuZXcgRmllbGRWYXJpYWJsZSh2LCAibGVuZ3RoIikpKTsKLSAgICAgICAgICAgIHRyeVN0YXRlbWVudC0+c3RhdGVtZW50cy0+QWRkKGNoZWNrbGVuKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChkaXIgJiBJTl9QQVJBTUVURVIpIHsKLSAgICAgICAgICAgIGdlbmVyYXRlX3dyaXRlX3RvX3BhcmNlbCh0LCB0cnlTdGF0ZW1lbnQtPnN0YXRlbWVudHMsIHYsIF9kYXRhLCAwKTsKLSAgICAgICAgfQotICAgICAgICBhcmcgPSBhcmctPm5leHQ7Ci0gICAgfQotCi0gICAgLy8gdGhlIHRyYW5zYWN0IGNhbGwKLSAgICBNZXRob2RDYWxsKiBjYWxsID0gbmV3IE1ldGhvZENhbGwocHJveHlDbGFzcy0+bVJlbW90ZSwgInRyYW5zYWN0IiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIlN0dWIuIiArIHRyYW5zYWN0Q29kZU5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhLCBfcmVwbHkgPyBfcmVwbHkgOiBOVUxMX1ZBTFVFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25ld2F5ID8gImFuZHJvaWQub3MuSUJpbmRlci5GTEFHX09ORVdBWSIgOiAiMCIpKTsKLSAgICB0cnlTdGF0ZW1lbnQtPnN0YXRlbWVudHMtPkFkZChjYWxsKTsKLQotICAgIC8vIHRocm93IGJhY2sgZXhjZXB0aW9ucy4KLSAgICBpZiAoX3JlcGx5KSB7Ci0gICAgICAgIE1ldGhvZENhbGwqIGV4ID0gbmV3IE1ldGhvZENhbGwoX3JlcGx5LCAicmVhZEV4Y2VwdGlvbiIsIDApOwotICAgICAgICB0cnlTdGF0ZW1lbnQtPnN0YXRlbWVudHMtPkFkZChleCk7Ci0gICAgfQotCi0gICAgLy8gcmV0dXJuaW5nIGFuZCBjbGVhbnVwCi0gICAgaWYgKF9yZXBseSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChfcmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGdlbmVyYXRlX2NyZWF0ZV9mcm9tX3BhcmNlbChwcm94eS0+cmV0dXJuVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgdHJ5U3RhdGVtZW50LT5zdGF0ZW1lbnRzLCBfcmVzdWx0LCBfcmVwbHksICZjbCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB0aGUgb3V0L2lub3V0IHBhcmFtZXRlcnMKLSAgICAgICAgYXJnID0gbWV0aG9kLT5hcmdzOwotICAgICAgICB3aGlsZSAoYXJnICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFR5cGUqIHQgPSBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgICAgICBWYXJpYWJsZSogdiA9IG5ldyBWYXJpYWJsZSh0LCBhcmctPm5hbWUuZGF0YSwgYXJnLT50eXBlLmRpbWVuc2lvbik7Ci0gICAgICAgICAgICBpZiAoY29udmVydF9kaXJlY3Rpb24oYXJnLT5kaXJlY3Rpb24uZGF0YSkgJiBPVVRfUEFSQU1FVEVSKSB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVfcmVhZF9mcm9tX3BhcmNlbCh0LCB0cnlTdGF0ZW1lbnQtPnN0YXRlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsIF9yZXBseSwgJmNsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsbHlTdGF0ZW1lbnQtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChfcmVwbHksICJyZWN5Y2xlIikpOwotICAgIH0KLSAgICBmaW5hbGx5U3RhdGVtZW50LT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwoX2RhdGEsICJyZWN5Y2xlIikpOwotCi0gICAgaWYgKF9yZXN1bHQgIT0gTlVMTCkgewotICAgICAgICBwcm94eS0+c3RhdGVtZW50cy0+QWRkKG5ldyBSZXR1cm5TdGF0ZW1lbnQoX3Jlc3VsdCkpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLWdlbmVyYXRlX2ludGVyZmFjZV9kZXNjcmlwdG9ycyhTdHViQ2xhc3MqIHN0dWIsIFByb3h5Q2xhc3MqIHByb3h5KQotewotICAgIC8vIHRoZSBpbnRlcmZhY2UgZGVzY3JpcHRvciB0cmFuc2FjdGlvbiBoYW5kbGVyCi0gICAgQ2FzZSogYyA9IG5ldyBDYXNlKCJJTlRFUkZBQ0VfVFJBTlNBQ1RJT04iKTsKLSAgICBjLT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwoc3R1Yi0+dHJhbnNhY3RfcmVwbHksICJ3cml0ZVN0cmluZyIsCi0gICAgICAgICAgICAxLCBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIkRFU0NSSVBUT1IiKSkpOwotICAgIGMtPnN0YXRlbWVudHMtPkFkZChuZXcgUmV0dXJuU3RhdGVtZW50KFRSVUVfVkFMVUUpKTsKLSAgICBzdHViLT50cmFuc2FjdF9zd2l0Y2gtPmNhc2VzLnB1c2hfYmFjayhjKTsKLQotICAgIC8vIGFuZCB0aGUgcHJveHktc2lkZSBtZXRob2QgcmV0dXJuaW5nIHRoZSBkZXNjcmlwdG9yIGRpcmVjdGx5Ci0gICAgTWV0aG9kKiBnZXREZXNjID0gbmV3IE1ldGhvZDsKLSAgICBnZXREZXNjLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgZ2V0RGVzYy0+cmV0dXJuVHlwZSA9IFNUUklOR19UWVBFOwotICAgIGdldERlc2MtPnJldHVyblR5cGVEaW1lbnNpb24gPSAwOwotICAgIGdldERlc2MtPm5hbWUgPSAiZ2V0SW50ZXJmYWNlRGVzY3JpcHRvciI7Ci0gICAgZ2V0RGVzYy0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICBnZXREZXNjLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFJldHVyblN0YXRlbWVudChuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIkRFU0NSSVBUT1IiKSkpOwotICAgIHByb3h5LT5lbGVtZW50cy5wdXNoX2JhY2soZ2V0RGVzYyk7Ci19Ci0KLUNsYXNzKgotZ2VuZXJhdGVfYmluZGVyX2ludGVyZmFjZV9jbGFzcyhjb25zdCBpbnRlcmZhY2VfdHlwZSogaWZhY2UpCi17Ci0gICAgSW50ZXJmYWNlVHlwZSogaW50ZXJmYWNlVHlwZSA9IHN0YXRpY19jYXN0PEludGVyZmFjZVR5cGUqPigKLSAgICAgICAgTkFNRVMuRmluZChpZmFjZS0+cGFja2FnZSwgaWZhY2UtPm5hbWUuZGF0YSkpOwotCi0gICAgLy8gdGhlIGludGVyZmFjZSBjbGFzcwotICAgIENsYXNzKiBpbnRlcmZhY2UgPSBuZXcgQ2xhc3M7Ci0gICAgICAgIGludGVyZmFjZS0+Y29tbWVudCA9IGdhdGhlcl9jb21tZW50cyhpZmFjZS0+Y29tbWVudHNfdG9rZW4tPmV4dHJhKTsKLSAgICAgICAgaW50ZXJmYWNlLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgIGludGVyZmFjZS0+d2hhdCA9IENsYXNzOjpJTlRFUkZBQ0U7Ci0gICAgICAgIGludGVyZmFjZS0+dHlwZSA9IGludGVyZmFjZVR5cGU7Ci0gICAgICAgIGludGVyZmFjZS0+aW50ZXJmYWNlcy5wdXNoX2JhY2soSUlOVEVSRkFDRV9UWVBFKTsKLQotICAgIC8vIHRoZSBzdHViIGlubmVyIGNsYXNzCi0gICAgU3R1YkNsYXNzKiBzdHViID0gbmV3IFN0dWJDbGFzcygKLSAgICAgICAgTkFNRVMuRmluZChpZmFjZS0+cGFja2FnZSwgYXBwZW5kKGlmYWNlLT5uYW1lLmRhdGEsICIuU3R1YiIpLmNfc3RyKCkpLAotICAgICAgICBpbnRlcmZhY2VUeXBlKTsKLSAgICBpbnRlcmZhY2UtPmVsZW1lbnRzLnB1c2hfYmFjayhzdHViKTsKLQotICAgIC8vIHRoZSBwcm94eSBpbm5lciBjbGFzcwotICAgIFByb3h5Q2xhc3MqIHByb3h5ID0gbmV3IFByb3h5Q2xhc3MoCi0gICAgICAgIE5BTUVTLkZpbmQoaWZhY2UtPnBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKGlmYWNlLT5uYW1lLmRhdGEsICIuU3R1Yi5Qcm94eSIpLmNfc3RyKCkpLAotICAgICAgICBpbnRlcmZhY2VUeXBlKTsKLSAgICBzdHViLT5lbGVtZW50cy5wdXNoX2JhY2socHJveHkpOwotCi0gICAgLy8gc3R1YiBhbmQgcHJveHkgc3VwcG9ydCBmb3IgZ2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpCi0gICAgZ2VuZXJhdGVfaW50ZXJmYWNlX2Rlc2NyaXB0b3JzKHN0dWIsIHByb3h5KTsKLQotICAgIC8vIGFsbCB0aGUgZGVjbGFyZWQgbWV0aG9kcyBvZiB0aGUgaW50ZXJmYWNlCi0gICAgaW50IGluZGV4ID0gMDsKLSAgICBpbnRlcmZhY2VfaXRlbV90eXBlKiBpdGVtID0gaWZhY2UtPmludGVyZmFjZV9pdGVtczsKLSAgICB3aGlsZSAoaXRlbSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChpdGVtLT5pdGVtX3R5cGUgPT0gTUVUSE9EX1RZUEUpIHsKLSAgICAgICAgICAgIG1ldGhvZF90eXBlICogbWV0aG9kX2l0ZW0gPSAobWV0aG9kX3R5cGUqKSBpdGVtOwotICAgICAgICAgICAgZ2VuZXJhdGVfbWV0aG9kKG1ldGhvZF9pdGVtLCBpbnRlcmZhY2UsIHN0dWIsIHByb3h5LCBtZXRob2RfaXRlbS0+YXNzaWduZWRfaWQpOwotICAgICAgICB9Ci0gICAgICAgIGl0ZW0gPSBpdGVtLT5uZXh0OwotICAgICAgICBpbmRleCsrOwotICAgIH0KLQotICAgIHJldHVybiBpbnRlcmZhY2U7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvZ2VuZXJhdGVfamF2YV9ycGMuY3BwIGIvdG9vbHMvYWlkbC9nZW5lcmF0ZV9qYXZhX3JwYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNGRhY2MuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9nZW5lcmF0ZV9qYXZhX3JwYy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAxICswLDAgQEAKLSNpbmNsdWRlICJnZW5lcmF0ZV9qYXZhLmgiCi0jaW5jbHVkZSAiVHlwZS5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLVR5cGUqIFNFUlZJQ0VfQ09OVEVYVF9UWVBFID0gbmV3IFR5cGUoImFuZHJvaWQuY29udGVudCIsCi0gICAgICAgICJDb250ZXh0IiwgVHlwZTo6QlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotVHlwZSogUFJFU0VOVEVSX0JBU0VfVFlQRSA9IG5ldyBUeXBlKCJhbmRyb2lkLnN1cHBvcnQucGxhY2UuY29ubmVjdG9yIiwKLSAgICAgICAgIkV2ZW50TGlzdGVuZXIiLCBUeXBlOjpCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci1UeXBlKiBQUkVTRU5URVJfTElTVEVORVJfQkFTRV9UWVBFID0gbmV3IFR5cGUoImFuZHJvaWQuc3VwcG9ydC5wbGFjZS5jb25uZWN0b3IiLAotICAgICAgICAiRXZlbnRMaXN0ZW5lci5MaXN0ZW5lciIsIFR5cGU6OkJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLVR5cGUqIFJQQ19CUk9LRVJfVFlQRSA9IG5ldyBUeXBlKCJhbmRyb2lkLnN1cHBvcnQucGxhY2UuY29ubmVjdG9yIiwgIkJyb2tlciIsCi0gICAgICAgIFR5cGU6OkJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLVR5cGUqIFJQQ19DT05UQUlORVJfVFlQRSA9IG5ldyBUeXBlKCJjb20uYW5kcm9pZC5hdGhvbWUuY29ubmVjdG9yIiwgIkNvbm5lY3RvckNvbnRhaW5lciIsCi0gICAgICAgIFR5cGU6OkJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLVR5cGUqIFBMQUNFX0lORk9fVFlQRSA9IG5ldyBUeXBlKCJhbmRyb2lkLnN1cHBvcnQucGxhY2UuY29ubmVjdG9yIiwgIlBsYWNlSW5mbyIsCi0gICAgICAgIFR5cGU6OkJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLS8vIFRPRE86IEp1c3QgdXNlIEVuZHBvaW50LCBzbyB0aGlzIHdvcmtzIGZvciBhbGwgZW5kcG9pbnRzLgotVHlwZSogUlBDX0NPTk5FQ1RPUl9UWVBFID0gbmV3IFR5cGUoImFuZHJvaWQuc3VwcG9ydC5wbGFjZS5jb25uZWN0b3IiLCAiQ29ubmVjdG9yIiwKLSAgICAgICAgVHlwZTo6QlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotVHlwZSogUlBDX0VORFBPSU5UX0lORk9fVFlQRSA9IG5ldyBVc2VyRGF0YVR5cGUoImFuZHJvaWQuc3VwcG9ydC5wbGFjZS5ycGMiLAotICAgICAgICAiRW5kcG9pbnRJbmZvIiwgdHJ1ZSwgX19GSUxFX18sIF9fTElORV9fKTsKLVR5cGUqIFJQQ19SRVNVTFRfSEFORExFUl9UWVBFID0gbmV3IFVzZXJEYXRhVHlwZSgiYW5kcm9pZC5zdXBwb3J0LnBsYWNlLnJwYyIsICJScGNSZXN1bHRIYW5kbGVyIiwKLSAgICAgICAgdHJ1ZSwgX19GSUxFX18sIF9fTElORV9fKTsKLVR5cGUqIFJQQ19FUlJPUl9MSVNURU5FUl9UWVBFID0gbmV3IFR5cGUoImFuZHJvaWQuc3VwcG9ydC5wbGFjZS5ycGMiLCAiUnBjRXJyb3JIYW5kbGVyIiwKLSAgICAgICAgVHlwZTo6QlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotVHlwZSogUlBDX0NPTlRFWFRfVFlQRSA9IG5ldyBVc2VyRGF0YVR5cGUoImFuZHJvaWQuc3VwcG9ydC5wbGFjZS5ycGMiLCAiUnBjQ29udGV4dCIsIHRydWUsCi0gICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlX2NyZWF0ZV9mcm9tX2RhdGEoVHlwZSogdCwgU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBjb25zdCBzdHJpbmcmIGtleSwKLSAgICAgICAgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBkYXRhLCBWYXJpYWJsZSoqIGNsKTsKLXN0YXRpYyB2b2lkIGdlbmVyYXRlX25ld19hcnJheShUeXBlKiB0LCBTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogZnJvbSk7Ci1zdGF0aWMgdm9pZCBnZW5lcmF0ZV93cml0ZV90b19kYXRhKFR5cGUqIHQsIFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgIFZhcmlhYmxlKiBkYXRhKTsKLQotc3RhdGljIHN0cmluZwotZm9ybWF0X2ludChpbnQgbikKLXsKLSAgICBjaGFyIHN0clsyMF07Ci0gICAgc3ByaW50ZihzdHIsICIlZCIsIG4pOwotICAgIHJldHVybiBzdHJpbmcoc3RyKTsKLX0KLQotc3RhdGljIHN0cmluZwotY2xhc3NfbmFtZV9sZWFmKGNvbnN0IHN0cmluZyYgc3RyKQotewotICAgIHN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IHN0ci5yZmluZCgnLicpOwotICAgIGlmIChwb3MgPT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHJldHVybiBzdHI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHN0cmluZyhzdHIsIHBvcysxKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBzdHJpbmcKLXJlc3VsdHNfY2xhc3NfbmFtZShjb25zdCBzdHJpbmcmIG4pCi17Ci0gICAgc3RyaW5nIHN0ciA9IG47Ci0gICAgc3RyWzBdID0gdG91cHBlcihzdHJbMF0pOwotICAgIHN0ci5pbnNlcnQoMCwgIk9uIik7Ci0gICAgcmV0dXJuIHN0cjsKLX0KLQotc3RhdGljIHN0cmluZwotcmVzdWx0c19tZXRob2RfbmFtZShjb25zdCBzdHJpbmcmIG4pCi17Ci0gICAgc3RyaW5nIHN0ciA9IG47Ci0gICAgc3RyWzBdID0gdG91cHBlcihzdHJbMF0pOwotICAgIHN0ci5pbnNlcnQoMCwgIm9uIik7Ci0gICAgcmV0dXJuIHN0cjsKLX0KLQotc3RhdGljIHN0cmluZwotcHVzaF9tZXRob2RfbmFtZShjb25zdCBzdHJpbmcmIG4pCi17Ci0gICAgc3RyaW5nIHN0ciA9IG47Ci0gICAgc3RyWzBdID0gdG91cHBlcihzdHJbMF0pOwotICAgIHN0ci5pbnNlcnQoMCwgInB1c2giKTsKLSAgICByZXR1cm4gc3RyOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1jbGFzcyBEaXNwYXRjaGVyQ2xhc3MgOiBwdWJsaWMgQ2xhc3MKLXsKLXB1YmxpYzoKLSAgICBEaXNwYXRjaGVyQ2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlLCBFeHByZXNzaW9uKiB0YXJnZXQpOwotICAgIHZpcnR1YWwgfkRpc3BhdGNoZXJDbGFzcygpOwotCi0gICAgdm9pZCBBZGRNZXRob2QoY29uc3QgbWV0aG9kX3R5cGUqIG1ldGhvZCk7Ci0gICAgdm9pZCBEb25lV2l0aE1ldGhvZHMoKTsKLQotICAgIE1ldGhvZCogcHJvY2Vzc01ldGhvZDsKLSAgICBWYXJpYWJsZSogYWN0aW9uUGFyYW07Ci0gICAgVmFyaWFibGUqIHJlcXVlc3RQYXJhbTsKLSAgICBWYXJpYWJsZSogcnBjQ29udGV4dFBhcmFtOwotICAgIFZhcmlhYmxlKiBlcnJvclBhcmFtOwotICAgIFZhcmlhYmxlKiByZXF1ZXN0RGF0YTsKLSAgICBWYXJpYWJsZSogcmVzdWx0RGF0YTsKLSAgICBJZlN0YXRlbWVudCogZGlzcGF0Y2hJZlN0YXRlbWVudDsKLSAgICBFeHByZXNzaW9uKiB0YXJnZXRFeHByZXNzaW9uOwotCi1wcml2YXRlOgotICAgIHZvaWQgZ2VuZXJhdGVfcHJvY2VzcygpOwotfTsKLQotRGlzcGF0Y2hlckNsYXNzOjpEaXNwYXRjaGVyQ2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlLCBFeHByZXNzaW9uKiB0YXJnZXQpCi0gICAgOkNsYXNzKCksCi0gICAgIGRpc3BhdGNoSWZTdGF0ZW1lbnQoTlVMTCksCi0gICAgIHRhcmdldEV4cHJlc3Npb24odGFyZ2V0KQotewotICAgIGdlbmVyYXRlX3Byb2Nlc3MoKTsKLX0KLQotRGlzcGF0Y2hlckNsYXNzOjp+RGlzcGF0Y2hlckNsYXNzKCkKLXsKLX0KLQotdm9pZAotRGlzcGF0Y2hlckNsYXNzOjpnZW5lcmF0ZV9wcm9jZXNzKCkKLXsKLSAgICAvLyBieXRlW10gcHJvY2VzcyhTdHJpbmcgYWN0aW9uLCBieXRlW10gcGFyYW1zLCBScGNDb250ZXh0IGNvbnRleHQsIFJwY0Vycm9yIHN0YXR1cykKLSAgICB0aGlzLT5wcm9jZXNzTWV0aG9kID0gbmV3IE1ldGhvZDsKLSAgICAgICAgdGhpcy0+cHJvY2Vzc01ldGhvZC0+bW9kaWZpZXJzID0gUFVCTElDOwotICAgICAgICB0aGlzLT5wcm9jZXNzTWV0aG9kLT5yZXR1cm5UeXBlID0gQllURV9UWVBFOwotICAgICAgICB0aGlzLT5wcm9jZXNzTWV0aG9kLT5yZXR1cm5UeXBlRGltZW5zaW9uID0gMTsKLSAgICAgICAgdGhpcy0+cHJvY2Vzc01ldGhvZC0+bmFtZSA9ICJwcm9jZXNzIjsKLSAgICAgICAgdGhpcy0+cHJvY2Vzc01ldGhvZC0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLQotICAgIHRoaXMtPmFjdGlvblBhcmFtID0gbmV3IFZhcmlhYmxlKFNUUklOR19UWVBFLCAiYWN0aW9uIik7Ci0gICAgdGhpcy0+cHJvY2Vzc01ldGhvZC0+cGFyYW1ldGVycy5wdXNoX2JhY2sodGhpcy0+YWN0aW9uUGFyYW0pOwotCi0gICAgdGhpcy0+cmVxdWVzdFBhcmFtID0gbmV3IFZhcmlhYmxlKEJZVEVfVFlQRSwgInJlcXVlc3RQYXJhbSIsIDEpOwotICAgIHRoaXMtPnByb2Nlc3NNZXRob2QtPnBhcmFtZXRlcnMucHVzaF9iYWNrKHRoaXMtPnJlcXVlc3RQYXJhbSk7Ci0KLSAgICB0aGlzLT5ycGNDb250ZXh0UGFyYW0gPSBuZXcgVmFyaWFibGUoUlBDX0NPTlRFWFRfVFlQRSwgImNvbnRleHQiLCAwKTsKLSAgICB0aGlzLT5wcm9jZXNzTWV0aG9kLT5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0aGlzLT5ycGNDb250ZXh0UGFyYW0pOyAgICAKLQotICAgIHRoaXMtPmVycm9yUGFyYW0gPSBuZXcgVmFyaWFibGUoUlBDX0VSUk9SX1RZUEUsICJlcnJvclBhcmFtIiwgMCk7Ci0gICAgdGhpcy0+cHJvY2Vzc01ldGhvZC0+cGFyYW1ldGVycy5wdXNoX2JhY2sodGhpcy0+ZXJyb3JQYXJhbSk7Ci0KLSAgICB0aGlzLT5yZXF1ZXN0RGF0YSA9IG5ldyBWYXJpYWJsZShSUENfREFUQV9UWVBFLCAicmVxdWVzdCIpOwotICAgIHRoaXMtPnByb2Nlc3NNZXRob2QtPnN0YXRlbWVudHMtPkFkZChuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihyZXF1ZXN0RGF0YSwKLSAgICAgICAgICAgICAgICBuZXcgTmV3RXhwcmVzc2lvbihSUENfREFUQV9UWVBFLCAxLCB0aGlzLT5yZXF1ZXN0UGFyYW0pKSk7Ci0KLSAgICB0aGlzLT5yZXN1bHREYXRhID0gbmV3IFZhcmlhYmxlKFJQQ19EQVRBX1RZUEUsICJyZXN1bHREYXRhIik7Ci0gICAgdGhpcy0+cHJvY2Vzc01ldGhvZC0+c3RhdGVtZW50cy0+QWRkKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKHRoaXMtPnJlc3VsdERhdGEsCi0gICAgICAgICAgICAgICAgTlVMTF9WQUxVRSkpOwotfQotCi12b2lkCi1EaXNwYXRjaGVyQ2xhc3M6OkFkZE1ldGhvZChjb25zdCBtZXRob2RfdHlwZSogbWV0aG9kKQotewotICAgIGFyZ190eXBlKiBhcmc7Ci0KLSAgICAvLyBUaGUgaWYvc3dpdGNoIHN0YXRlbWVudAotICAgIElmU3RhdGVtZW50KiBpZnMgPSBuZXcgSWZTdGF0ZW1lbnQoKTsKLSAgICAgICAgaWZzLT5leHByZXNzaW9uID0gbmV3IE1ldGhvZENhbGwobmV3IFN0cmluZ0xpdGVyYWxFeHByZXNzaW9uKG1ldGhvZC0+bmFtZS5kYXRhKSwgImVxdWFscyIsCi0gICAgICAgICAgICAgICAgMSwgdGhpcy0+YWN0aW9uUGFyYW0pOwotICAgIFN0YXRlbWVudEJsb2NrKiBibG9jayA9IGlmcy0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICBpZiAodGhpcy0+ZGlzcGF0Y2hJZlN0YXRlbWVudCA9PSBOVUxMKSB7Ci0gICAgICAgIHRoaXMtPmRpc3BhdGNoSWZTdGF0ZW1lbnQgPSBpZnM7Ci0gICAgICAgIHRoaXMtPnByb2Nlc3NNZXRob2QtPnN0YXRlbWVudHMtPkFkZChkaXNwYXRjaElmU3RhdGVtZW50KTsKLSAgICB9IGVsc2UgewotICAgICAgICB0aGlzLT5kaXNwYXRjaElmU3RhdGVtZW50LT5lbHNlaWYgPSBpZnM7Ci0gICAgICAgIHRoaXMtPmRpc3BhdGNoSWZTdGF0ZW1lbnQgPSBpZnM7Ci0gICAgfQotICAgIAotICAgIC8vIFRoZSBjYWxsIHRvIGRlY2wgKGZyb20gYWJvdmUpCi0gICAgTWV0aG9kQ2FsbCogcmVhbENhbGwgPSBuZXcgTWV0aG9kQ2FsbCh0aGlzLT50YXJnZXRFeHByZXNzaW9uLCBtZXRob2QtPm5hbWUuZGF0YSk7Ci0KLSAgICAvLyBhcmdzCi0gICAgVmFyaWFibGUqIGNsYXNzTG9hZGVyID0gTlVMTDsKLSAgICBWYXJpYWJsZUZhY3Rvcnkgc3R1YkFyZ3MoIl9hcmciKTsKLSAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgd2hpbGUgKGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgIFR5cGUqIHQgPSBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgIFZhcmlhYmxlKiB2ID0gc3R1YkFyZ3MuR2V0KHQpOwotICAgICAgICB2LT5kaW1lbnNpb24gPSBhcmctPnR5cGUuZGltZW5zaW9uOwotCi0gICAgICAgIC8vIFVubWFyc2hhbGwgdGhlIHBhcmFtZXRlcgotICAgICAgICBibG9jay0+QWRkKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKHYpKTsKLSAgICAgICAgaWYgKGNvbnZlcnRfZGlyZWN0aW9uKGFyZy0+ZGlyZWN0aW9uLmRhdGEpICYgSU5fUEFSQU1FVEVSKSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZV9jcmVhdGVfZnJvbV9kYXRhKHQsIGJsb2NrLCBhcmctPm5hbWUuZGF0YSwgdiwKLSAgICAgICAgICAgICAgICAgICAgdGhpcy0+cmVxdWVzdERhdGEsICZjbGFzc0xvYWRlcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXJnLT50eXBlLmRpbWVuc2lvbiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgYmxvY2stPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTmV3RXhwcmVzc2lvbih2LT50eXBlKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYXJnLT50eXBlLmRpbWVuc2lvbiA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVfbmV3X2FycmF5KHYtPnR5cGUsIGJsb2NrLCB2LCB0aGlzLT5yZXF1ZXN0RGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgX19MSU5FX18pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWRkIHRoYXQgcGFyYW1ldGVyIHRvIHRoZSBtZXRob2QgY2FsbAotICAgICAgICByZWFsQ2FsbC0+YXJndW1lbnRzLnB1c2hfYmFjayh2KTsKLQotICAgICAgICBhcmcgPSBhcmctPm5leHQ7Ci0gICAgfQotCi0gICAgLy8gQWRkIGEgZmluYWwgcGFyYW1ldGVyOiBScGNDb250ZXh0LiBDb250YWlucyBkYXRhIGFib3V0Ci0gICAgLy8gaW5jb21pbmcgcmVxdWVzdCAoZS5nLiwgY2VydGlmaWNhdGUpCi0gICAgcmVhbENhbGwtPmFyZ3VtZW50cy5wdXNoX2JhY2sobmV3IFZhcmlhYmxlKFJQQ19DT05URVhUX1RZUEUsICJjb250ZXh0IiwgMCkpOwotCi0gICAgVHlwZSogcmV0dXJuVHlwZSA9IE5BTUVTLlNlYXJjaChtZXRob2QtPnR5cGUudHlwZS5kYXRhKTsKLSAgICBpZiAocmV0dXJuVHlwZSA9PSBFVkVOVF9GQUtFX1RZUEUpIHsKLSAgICAgICAgcmV0dXJuVHlwZSA9IFZPSURfVFlQRTsKLSAgICB9Ci0gICAgCi0gICAgLy8gdGhlIHJlYWwgY2FsbAotICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgIFZhcmlhYmxlKiBfcmVzdWx0ID0gTlVMTDsKLSAgICBpZiAocmV0dXJuVHlwZSA9PSBWT0lEX1RZUEUpIHsKLSAgICAgICAgYmxvY2stPkFkZChyZWFsQ2FsbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgX3Jlc3VsdCA9IG5ldyBWYXJpYWJsZShyZXR1cm5UeXBlLCAiX3Jlc3VsdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+dHlwZS5kaW1lbnNpb24pOwotICAgICAgICBibG9jay0+QWRkKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKF9yZXN1bHQsIHJlYWxDYWxsKSk7Ci0KLSAgICAgICAgLy8gbmVlZCB0aGUgcmVzdWx0IFJwY0RhdGEKLSAgICAgICAgaWYgKGZpcnN0KSB7Ci0gICAgICAgICAgICBibG9jay0+QWRkKG5ldyBBc3NpZ25tZW50KHRoaXMtPnJlc3VsdERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgTmV3RXhwcmVzc2lvbihSUENfREFUQV9UWVBFKSkpOwotICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1hcnNoYWxsIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgZ2VuZXJhdGVfd3JpdGVfdG9fZGF0YShyZXR1cm5UeXBlLCBibG9jaywKLSAgICAgICAgICAgICAgICBuZXcgU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb24oIl9yZXN1bHQiKSwgX3Jlc3VsdCwgdGhpcy0+cmVzdWx0RGF0YSk7Ci0gICAgfQotCi0gICAgLy8gb3V0IHBhcmFtZXRlcnMKLSAgICBpbnQgaSA9IDA7Ci0gICAgYXJnID0gbWV0aG9kLT5hcmdzOwotICAgIHdoaWxlIChhcmcgIT0gTlVMTCkgewotICAgICAgICBUeXBlKiB0ID0gTkFNRVMuU2VhcmNoKGFyZy0+dHlwZS50eXBlLmRhdGEpOwotICAgICAgICBWYXJpYWJsZSogdiA9IHN0dWJBcmdzLkdldChpKyspOwotCi0gICAgICAgIGlmIChjb252ZXJ0X2RpcmVjdGlvbihhcmctPmRpcmVjdGlvbi5kYXRhKSAmIE9VVF9QQVJBTUVURVIpIHsKLSAgICAgICAgICAgIC8vIG5lZWQgdGhlIHJlc3VsdCBScGNEYXRhCi0gICAgICAgICAgICBpZiAoZmlyc3QpIHsKLSAgICAgICAgICAgICAgICBibG9jay0+QWRkKG5ldyBBc3NpZ25tZW50KHRoaXMtPnJlc3VsdERhdGEsIG5ldyBOZXdFeHByZXNzaW9uKFJQQ19EQVRBX1RZUEUpKSk7Ci0gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2VuZXJhdGVfd3JpdGVfdG9fZGF0YSh0LCBibG9jaywgbmV3IFN0cmluZ0xpdGVyYWxFeHByZXNzaW9uKGFyZy0+bmFtZS5kYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgdiwgdGhpcy0+cmVzdWx0RGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICBhcmcgPSBhcmctPm5leHQ7Ci0gICAgfQotfQotCi12b2lkCi1EaXNwYXRjaGVyQ2xhc3M6OkRvbmVXaXRoTWV0aG9kcygpCi17Ci0gICAgaWYgKHRoaXMtPmRpc3BhdGNoSWZTdGF0ZW1lbnQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKHRoaXMtPnByb2Nlc3NNZXRob2QpOwotCi0gICAgSWZTdGF0ZW1lbnQqIGZhbGx0aHJvdWdoID0gbmV3IElmU3RhdGVtZW50KCk7Ci0gICAgICAgIGZhbGx0aHJvdWdoLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgICAgICBmYWxsdGhyb3VnaC0+c3RhdGVtZW50cy0+QWRkKG5ldyBSZXR1cm5TdGF0ZW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKFNVUEVSX1ZBTFVFLCAicHJvY2VzcyIsIDQsIAotICAgICAgICAgICAgICAgICAgICB0aGlzLT5hY3Rpb25QYXJhbSwgdGhpcy0+cmVxdWVzdFBhcmFtLCAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy0+cnBjQ29udGV4dFBhcmFtLAotICAgICAgICAgICAgICAgICAgICB0aGlzLT5lcnJvclBhcmFtKSkpOwotICAgIHRoaXMtPmRpc3BhdGNoSWZTdGF0ZW1lbnQtPmVsc2VpZiA9IGZhbGx0aHJvdWdoOwotICAgIElmU3RhdGVtZW50KiBzID0gbmV3IElmU3RhdGVtZW50OwotICAgICAgICBzLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgIHRoaXMtPnByb2Nlc3NNZXRob2QtPnN0YXRlbWVudHMtPkFkZChzKTsKLSAgICBzLT5leHByZXNzaW9uID0gbmV3IENvbXBhcmlzb24odGhpcy0+cmVzdWx0RGF0YSwgIiE9IiwgTlVMTF9WQUxVRSk7Ci0gICAgcy0+c3RhdGVtZW50cy0+QWRkKG5ldyBSZXR1cm5TdGF0ZW1lbnQobmV3IE1ldGhvZENhbGwodGhpcy0+cmVzdWx0RGF0YSwgInNlcmlhbGl6ZSIpKSk7Ci0gICAgcy0+ZWxzZWlmID0gbmV3IElmU3RhdGVtZW50OwotICAgIHMgPSBzLT5lbHNlaWY7Ci0gICAgcy0+c3RhdGVtZW50cy0+QWRkKG5ldyBSZXR1cm5TdGF0ZW1lbnQoTlVMTF9WQUxVRSkpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1jbGFzcyBScGNQcm94eUNsYXNzIDogcHVibGljIENsYXNzCi17Ci1wdWJsaWM6Ci0gICAgUnBjUHJveHlDbGFzcyhjb25zdCBpbnRlcmZhY2VfdHlwZSogaWZhY2UsIEludGVyZmFjZVR5cGUqIGludGVyZmFjZVR5cGUpOwotICAgIHZpcnR1YWwgflJwY1Byb3h5Q2xhc3MoKTsKLQotICAgIFZhcmlhYmxlKiBlbmRwb2ludDsKLSAgICBWYXJpYWJsZSogYnJva2VyOwotCi1wcml2YXRlOgotICAgIHZvaWQgZ2VuZXJhdGVfY3RvcigpOwotICAgIHZvaWQgZ2VuZXJhdGVfZ2V0X2VuZHBvaW50X2luZm8oKTsKLX07Ci0KLVJwY1Byb3h5Q2xhc3M6OlJwY1Byb3h5Q2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlLCBJbnRlcmZhY2VUeXBlKiBpbnRlcmZhY2VUeXBlKQotICAgIDpDbGFzcygpCi17Ci0gICAgdGhpcy0+Y29tbWVudCA9IGdhdGhlcl9jb21tZW50cyhpZmFjZS0+Y29tbWVudHNfdG9rZW4tPmV4dHJhKTsKLSAgICB0aGlzLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgdGhpcy0+d2hhdCA9IENsYXNzOjpDTEFTUzsKLSAgICB0aGlzLT50eXBlID0gaW50ZXJmYWNlVHlwZTsKLQotICAgIC8vIGJyb2tlcgotICAgIHRoaXMtPmJyb2tlciA9IG5ldyBWYXJpYWJsZShSUENfQlJPS0VSX1RZUEUsICJfYnJva2VyIik7Ci0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKG5ldyBGaWVsZChQUklWQVRFLCB0aGlzLT5icm9rZXIpKTsKLSAgICAvLyBlbmRwb2ludAotICAgIHRoaXMtPmVuZHBvaW50ID0gbmV3IFZhcmlhYmxlKFJQQ19FTkRQT0lOVF9JTkZPX1RZUEUsICJfZW5kcG9pbnQiKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2sobmV3IEZpZWxkKFBSSVZBVEUsIHRoaXMtPmVuZHBvaW50KSk7Ci0KLSAgICAvLyBtZXRob2RzCi0gICAgZ2VuZXJhdGVfY3RvcigpOwotICAgIGdlbmVyYXRlX2dldF9lbmRwb2ludF9pbmZvKCk7Ci19Ci0KLVJwY1Byb3h5Q2xhc3M6On5ScGNQcm94eUNsYXNzKCkKLXsKLX0KLQotdm9pZAotUnBjUHJveHlDbGFzczo6Z2VuZXJhdGVfY3RvcigpCi17Ci0gICAgVmFyaWFibGUqIGJyb2tlciA9IG5ldyBWYXJpYWJsZShSUENfQlJPS0VSX1RZUEUsICJicm9rZXIiKTsKLSAgICBWYXJpYWJsZSogZW5kcG9pbnQgPSBuZXcgVmFyaWFibGUoUlBDX0VORFBPSU5UX0lORk9fVFlQRSwgImVuZHBvaW50Iik7Ci0gICAgTWV0aG9kKiBjdG9yID0gbmV3IE1ldGhvZDsKLSAgICAgICAgY3Rvci0+bW9kaWZpZXJzID0gUFVCTElDOwotICAgICAgICBjdG9yLT5uYW1lID0gY2xhc3NfbmFtZV9sZWFmKHRoaXMtPnR5cGUtPk5hbWUoKSk7Ci0gICAgICAgIGN0b3ItPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgICAgIGN0b3ItPnBhcmFtZXRlcnMucHVzaF9iYWNrKGJyb2tlcik7Ci0gICAgICAgIGN0b3ItPnBhcmFtZXRlcnMucHVzaF9iYWNrKGVuZHBvaW50KTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2soY3Rvcik7Ci0KLSAgICBjdG9yLT5zdGF0ZW1lbnRzLT5BZGQobmV3IEFzc2lnbm1lbnQodGhpcy0+YnJva2VyLCBicm9rZXIpKTsKLSAgICBjdG9yLT5zdGF0ZW1lbnRzLT5BZGQobmV3IEFzc2lnbm1lbnQodGhpcy0+ZW5kcG9pbnQsIGVuZHBvaW50KSk7Ci19Ci0KLXZvaWQKLVJwY1Byb3h5Q2xhc3M6OmdlbmVyYXRlX2dldF9lbmRwb2ludF9pbmZvKCkKLXsKLSAgICBNZXRob2QqIGdldCA9IG5ldyBNZXRob2Q7Ci0gICAgZ2V0LT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgZ2V0LT5yZXR1cm5UeXBlID0gUlBDX0VORFBPSU5UX0lORk9fVFlQRTsKLSAgICBnZXQtPm5hbWUgPSAiZ2V0RW5kcG9pbnRJbmZvIjsKLSAgICBnZXQtPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKGdldCk7Ci0KLSAgICBnZXQtPnN0YXRlbWVudHMtPkFkZChuZXcgUmV0dXJuU3RhdGVtZW50KHRoaXMtPmVuZHBvaW50KSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWNsYXNzIEV2ZW50TGlzdGVuZXJDbGFzcyA6IHB1YmxpYyBEaXNwYXRjaGVyQ2xhc3MKLXsKLXB1YmxpYzoKLSAgICBFdmVudExpc3RlbmVyQ2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlLCBUeXBlKiBsaXN0ZW5lclR5cGUpOwotICAgIHZpcnR1YWwgfkV2ZW50TGlzdGVuZXJDbGFzcygpOwotCi0gICAgVmFyaWFibGUqIF9saXN0ZW5lcjsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGdlbmVyYXRlX2N0b3IoKTsKLX07Ci0KLUV4cHJlc3Npb24qCi1nZW5lcmF0ZV9nZXRfbGlzdGVuZXJfZXhwcmVzc2lvbihUeXBlKiBjYXN0KQotewotICAgIHJldHVybiBuZXcgQ2FzdChjYXN0LCBuZXcgTWV0aG9kQ2FsbChUSElTX1ZBTFVFLCAiZ2V0VmlldyIpKTsKLX0KLQotRXZlbnRMaXN0ZW5lckNsYXNzOjpFdmVudExpc3RlbmVyQ2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlLCBUeXBlKiBsaXN0ZW5lclR5cGUpCi0gICAgOkRpc3BhdGNoZXJDbGFzcyhpZmFjZSwgbmV3IEZpZWxkVmFyaWFibGUoVEhJU19WQUxVRSwgIl9saXN0ZW5lciIpKQotewotICAgIHRoaXMtPm1vZGlmaWVycyA9IFBSSVZBVEU7Ci0gICAgdGhpcy0+d2hhdCA9IENsYXNzOjpDTEFTUzsKLSAgICB0aGlzLT50eXBlID0gbmV3IFR5cGUoaWZhY2UtPnBhY2thZ2UgPyBpZmFjZS0+cGFja2FnZSA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKGlmYWNlLT5uYW1lLmRhdGEsICIuUHJlc2VudGVyIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBUeXBlOjpHRU5FUkFURUQsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICAgIHRoaXMtPmV4dGVuZHMgPSBQUkVTRU5URVJfQkFTRV9UWVBFOwotCi0gICAgdGhpcy0+X2xpc3RlbmVyID0gbmV3IFZhcmlhYmxlKGxpc3RlbmVyVHlwZSwgIl9saXN0ZW5lciIpOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayhuZXcgRmllbGQoUFJJVkFURSwgdGhpcy0+X2xpc3RlbmVyKSk7Ci0KLSAgICAvLyBtZXRob2RzCi0gICAgZ2VuZXJhdGVfY3RvcigpOwotfQotCi1FdmVudExpc3RlbmVyQ2xhc3M6On5FdmVudExpc3RlbmVyQ2xhc3MoKQotewotfQotCi12b2lkCi1FdmVudExpc3RlbmVyQ2xhc3M6OmdlbmVyYXRlX2N0b3IoKQotewotICAgIFZhcmlhYmxlKiBicm9rZXIgPSBuZXcgVmFyaWFibGUoUlBDX0JST0tFUl9UWVBFLCAiYnJva2VyIik7Ci0gICAgVmFyaWFibGUqIGxpc3RlbmVyID0gbmV3IFZhcmlhYmxlKHRoaXMtPl9saXN0ZW5lci0+dHlwZSwgImxpc3RlbmVyIik7Ci0gICAgTWV0aG9kKiBjdG9yID0gbmV3IE1ldGhvZDsKLSAgICAgICAgY3Rvci0+bW9kaWZpZXJzID0gUFVCTElDOwotICAgICAgICBjdG9yLT5uYW1lID0gY2xhc3NfbmFtZV9sZWFmKHRoaXMtPnR5cGUtPk5hbWUoKSk7Ci0gICAgICAgIGN0b3ItPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgICAgIGN0b3ItPnBhcmFtZXRlcnMucHVzaF9iYWNrKGJyb2tlcik7Ci0gICAgICAgIGN0b3ItPnBhcmFtZXRlcnMucHVzaF9iYWNrKGxpc3RlbmVyKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2soY3Rvcik7Ci0KLSAgICBjdG9yLT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwoInN1cGVyIiwgMiwgYnJva2VyLCBsaXN0ZW5lcikpOwotICAgIGN0b3ItPnN0YXRlbWVudHMtPkFkZChuZXcgQXNzaWdubWVudCh0aGlzLT5fbGlzdGVuZXIsIGxpc3RlbmVyKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWNsYXNzIExpc3RlbmVyQ2xhc3MgOiBwdWJsaWMgQ2xhc3MKLXsKLXB1YmxpYzoKLSAgICBMaXN0ZW5lckNsYXNzKGNvbnN0IGludGVyZmFjZV90eXBlKiBpZmFjZSk7Ci0gICAgdmlydHVhbCB+TGlzdGVuZXJDbGFzcygpOwotCi0gICAgYm9vbCBuZWVkZWQ7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBnZW5lcmF0ZV9jdG9yKCk7Ci19OwotCi1MaXN0ZW5lckNsYXNzOjpMaXN0ZW5lckNsYXNzKGNvbnN0IGludGVyZmFjZV90eXBlKiBpZmFjZSkKLSAgICA6Q2xhc3MoKSwKLSAgICAgbmVlZGVkKGZhbHNlKQotewotICAgIHRoaXMtPmNvbW1lbnQgPSAiLyoqIEV4dGVuZCB0aGlzIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzIGZyb20gdGhpcyBjbGFzcy4gKi8iOwotICAgIHRoaXMtPm1vZGlmaWVycyA9IFNUQVRJQyB8IFBVQkxJQyA7Ci0gICAgdGhpcy0+d2hhdCA9IENsYXNzOjpDTEFTUzsKLSAgICB0aGlzLT50eXBlID0gbmV3IFR5cGUoaWZhY2UtPnBhY2thZ2UgPyBpZmFjZS0+cGFja2FnZSA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKGlmYWNlLT5uYW1lLmRhdGEsICIuTGlzdGVuZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU6OkdFTkVSQVRFRCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gICAgdGhpcy0+ZXh0ZW5kcyA9IFBSRVNFTlRFUl9MSVNURU5FUl9CQVNFX1RZUEU7Ci19Ci0KLUxpc3RlbmVyQ2xhc3M6On5MaXN0ZW5lckNsYXNzKCkKLXsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotY2xhc3MgRW5kcG9pbnRCYXNlQ2xhc3MgOiBwdWJsaWMgRGlzcGF0Y2hlckNsYXNzCi17Ci1wdWJsaWM6Ci0gICAgRW5kcG9pbnRCYXNlQ2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlKTsKLSAgICB2aXJ0dWFsIH5FbmRwb2ludEJhc2VDbGFzcygpOwotCi0gICAgYm9vbCBuZWVkZWQ7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBnZW5lcmF0ZV9jdG9yKCk7Ci19OwotCi1FbmRwb2ludEJhc2VDbGFzczo6RW5kcG9pbnRCYXNlQ2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlKQotICAgIDpEaXNwYXRjaGVyQ2xhc3MoaWZhY2UsIFRISVNfVkFMVUUpLAotICAgICBuZWVkZWQoZmFsc2UpCi17Ci0gICAgdGhpcy0+Y29tbWVudCA9ICIvKiogRXh0ZW5kIHRoaXMgdG8gaW1wbGVtZW50IGEgbGluayBzZXJ2aWNlLiAqLyI7Ci0gICAgdGhpcy0+bW9kaWZpZXJzID0gU1RBVElDIHwgUFVCTElDIHwgQUJTVFJBQ1Q7Ci0gICAgdGhpcy0+d2hhdCA9IENsYXNzOjpDTEFTUzsKLSAgICB0aGlzLT50eXBlID0gbmV3IFR5cGUoaWZhY2UtPnBhY2thZ2UgPyBpZmFjZS0+cGFja2FnZSA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKGlmYWNlLT5uYW1lLmRhdGEsICIuRW5kcG9pbnRCYXNlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBUeXBlOjpHRU5FUkFURUQsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICAgIHRoaXMtPmV4dGVuZHMgPSBSUENfQ09OTkVDVE9SX1RZUEU7Ci0KLSAgICAvLyBtZXRob2RzCi0gICAgZ2VuZXJhdGVfY3RvcigpOwotfQotCi1FbmRwb2ludEJhc2VDbGFzczo6fkVuZHBvaW50QmFzZUNsYXNzKCkKLXsKLX0KLQotdm9pZAotRW5kcG9pbnRCYXNlQ2xhc3M6OmdlbmVyYXRlX2N0b3IoKQotewotICAgIFZhcmlhYmxlKiBjb250YWluZXIgPSBuZXcgVmFyaWFibGUoUlBDX0NPTlRBSU5FUl9UWVBFLCAiY29udGFpbmVyIik7Ci0gICAgVmFyaWFibGUqIGJyb2tlciA9IG5ldyBWYXJpYWJsZShSUENfQlJPS0VSX1RZUEUsICJicm9rZXIiKTsKLQlWYXJpYWJsZSogcGxhY2UgPSBuZXcgVmFyaWFibGUoUExBQ0VfSU5GT19UWVBFLCAicGxhY2VJbmZvIik7Ci0gICAgTWV0aG9kKiBjdG9yID0gbmV3IE1ldGhvZDsKLSAgICAgICAgY3Rvci0+bW9kaWZpZXJzID0gUFVCTElDOwotICAgICAgICBjdG9yLT5uYW1lID0gY2xhc3NfbmFtZV9sZWFmKHRoaXMtPnR5cGUtPk5hbWUoKSk7Ci0gICAgICAgIGN0b3ItPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgICAgIGN0b3ItPnBhcmFtZXRlcnMucHVzaF9iYWNrKGNvbnRhaW5lcik7Ci0gICAgICAgIGN0b3ItPnBhcmFtZXRlcnMucHVzaF9iYWNrKGJyb2tlcik7Ci0gICAgICAgIGN0b3ItPnBhcmFtZXRlcnMucHVzaF9iYWNrKHBsYWNlKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2soY3Rvcik7Ci0KLSAgICBjdG9yLT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwoInN1cGVyIiwgMywgY29udGFpbmVyLCBicm9rZXIsIHBsYWNlKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWNsYXNzIFJlc3VsdERpc3BhdGNoZXJDbGFzcyA6IHB1YmxpYyBDbGFzcwotewotcHVibGljOgotICAgIFJlc3VsdERpc3BhdGNoZXJDbGFzcygpOwotICAgIHZpcnR1YWwgflJlc3VsdERpc3BhdGNoZXJDbGFzcygpOwotCi0gICAgdm9pZCBBZGRNZXRob2QoaW50IGluZGV4LCBjb25zdCBzdHJpbmcmIG5hbWUsIE1ldGhvZCoqIG1ldGhvZCwgVmFyaWFibGUqKiBwYXJhbSk7Ci0KLSAgICBib29sIG5lZWRlZDsKLSAgICBWYXJpYWJsZSogbWV0aG9kSWQ7Ci0gICAgVmFyaWFibGUqIGNhbGxiYWNrOwotICAgIE1ldGhvZCogb25SZXN1bHRNZXRob2Q7Ci0gICAgVmFyaWFibGUqIHJlc3VsdFBhcmFtOwotICAgIFN3aXRjaFN0YXRlbWVudCogbWV0aG9kU3dpdGNoOwotCi1wcml2YXRlOgotICAgIHZvaWQgZ2VuZXJhdGVfY3RvcigpOwotICAgIHZvaWQgZ2VuZXJhdGVfb25SZXN1bHQoKTsKLX07Ci0KLVJlc3VsdERpc3BhdGNoZXJDbGFzczo6UmVzdWx0RGlzcGF0Y2hlckNsYXNzKCkKLSAgICA6Q2xhc3MoKSwKLSAgICAgbmVlZGVkKGZhbHNlKQotewotICAgIHRoaXMtPm1vZGlmaWVycyA9IFBSSVZBVEUgfCBGSU5BTDsKLSAgICB0aGlzLT53aGF0ID0gQ2xhc3M6OkNMQVNTOwotICAgIHRoaXMtPnR5cGUgPSBuZXcgVHlwZSgiX1Jlc3VsdERpc3BhdGNoZXIiLCBUeXBlOjpHRU5FUkFURUQsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICAgIHRoaXMtPmludGVyZmFjZXMucHVzaF9iYWNrKFJQQ19SRVNVTFRfSEFORExFUl9UWVBFKTsKLQotICAgIC8vIG1ldGhvZElkCi0gICAgdGhpcy0+bWV0aG9kSWQgPSBuZXcgVmFyaWFibGUoSU5UX1RZUEUsICJtZXRob2RJZCIpOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayhuZXcgRmllbGQoUFJJVkFURSwgdGhpcy0+bWV0aG9kSWQpKTsKLSAgICB0aGlzLT5jYWxsYmFjayA9IG5ldyBWYXJpYWJsZShPQkpFQ1RfVFlQRSwgImNhbGxiYWNrIik7Ci0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKG5ldyBGaWVsZChQUklWQVRFLCB0aGlzLT5jYWxsYmFjaykpOwotCi0gICAgLy8gbWV0aG9kcwotICAgIGdlbmVyYXRlX2N0b3IoKTsKLSAgICBnZW5lcmF0ZV9vblJlc3VsdCgpOwotfQotCi1SZXN1bHREaXNwYXRjaGVyQ2xhc3M6On5SZXN1bHREaXNwYXRjaGVyQ2xhc3MoKQotewotfQotCi12b2lkCi1SZXN1bHREaXNwYXRjaGVyQ2xhc3M6OmdlbmVyYXRlX2N0b3IoKQotewotICAgIFZhcmlhYmxlKiBtZXRob2RJZFBhcmFtID0gbmV3IFZhcmlhYmxlKElOVF9UWVBFLCAibWV0aElkIik7Ci0gICAgVmFyaWFibGUqIGNhbGxiYWNrUGFyYW0gPSBuZXcgVmFyaWFibGUoT0JKRUNUX1RZUEUsICJjYk9iaiIpOwotICAgIE1ldGhvZCogY3RvciA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIGN0b3ItPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICAgICAgY3Rvci0+bmFtZSA9IGNsYXNzX25hbWVfbGVhZih0aGlzLT50eXBlLT5OYW1lKCkpOwotICAgICAgICBjdG9yLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgICAgICBjdG9yLT5wYXJhbWV0ZXJzLnB1c2hfYmFjayhtZXRob2RJZFBhcmFtKTsKLSAgICAgICAgY3Rvci0+cGFyYW1ldGVycy5wdXNoX2JhY2soY2FsbGJhY2tQYXJhbSk7Ci0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKGN0b3IpOwotCi0gICAgY3Rvci0+c3RhdGVtZW50cy0+QWRkKG5ldyBBc3NpZ25tZW50KHRoaXMtPm1ldGhvZElkLCBtZXRob2RJZFBhcmFtKSk7Ci0gICAgY3Rvci0+c3RhdGVtZW50cy0+QWRkKG5ldyBBc3NpZ25tZW50KHRoaXMtPmNhbGxiYWNrLCBjYWxsYmFja1BhcmFtKSk7Ci19Ci0KLXZvaWQKLVJlc3VsdERpc3BhdGNoZXJDbGFzczo6Z2VuZXJhdGVfb25SZXN1bHQoKQotewotICAgIHRoaXMtPm9uUmVzdWx0TWV0aG9kID0gbmV3IE1ldGhvZDsKLSAgICAgICAgdGhpcy0+b25SZXN1bHRNZXRob2QtPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICAgICAgdGhpcy0+b25SZXN1bHRNZXRob2QtPnJldHVyblR5cGUgPSBWT0lEX1RZUEU7Ci0gICAgICAgIHRoaXMtPm9uUmVzdWx0TWV0aG9kLT5yZXR1cm5UeXBlRGltZW5zaW9uID0gMDsKLSAgICAgICAgdGhpcy0+b25SZXN1bHRNZXRob2QtPm5hbWUgPSAib25SZXN1bHQiOwotICAgICAgICB0aGlzLT5vblJlc3VsdE1ldGhvZC0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2sodGhpcy0+b25SZXN1bHRNZXRob2QpOwotCi0gICAgdGhpcy0+cmVzdWx0UGFyYW0gPSBuZXcgVmFyaWFibGUoQllURV9UWVBFLCAicmVzdWx0IiwgMSk7Ci0gICAgdGhpcy0+b25SZXN1bHRNZXRob2QtPnBhcmFtZXRlcnMucHVzaF9iYWNrKHRoaXMtPnJlc3VsdFBhcmFtKTsKLQotICAgIHRoaXMtPm1ldGhvZFN3aXRjaCA9IG5ldyBTd2l0Y2hTdGF0ZW1lbnQodGhpcy0+bWV0aG9kSWQpOwotICAgIHRoaXMtPm9uUmVzdWx0TWV0aG9kLT5zdGF0ZW1lbnRzLT5BZGQodGhpcy0+bWV0aG9kU3dpdGNoKTsKLX0KLQotdm9pZAotUmVzdWx0RGlzcGF0Y2hlckNsYXNzOjpBZGRNZXRob2QoaW50IGluZGV4LCBjb25zdCBzdHJpbmcmIG5hbWUsIE1ldGhvZCoqIG1ldGhvZCwgVmFyaWFibGUqKiBwYXJhbSkKLXsKLSAgICBNZXRob2QqIG0gPSBuZXcgTWV0aG9kOwotICAgICAgICBtLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgIG0tPnJldHVyblR5cGUgPSBWT0lEX1RZUEU7Ci0gICAgICAgIG0tPnJldHVyblR5cGVEaW1lbnNpb24gPSAwOwotICAgICAgICBtLT5uYW1lID0gbmFtZTsKLSAgICAgICAgbS0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICAqcGFyYW0gPSBuZXcgVmFyaWFibGUoQllURV9UWVBFLCAicmVzdWx0IiwgMSk7Ci0gICAgbS0+cGFyYW1ldGVycy5wdXNoX2JhY2soKnBhcmFtKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2sobSk7Ci0gICAgKm1ldGhvZCA9IG07Ci0KLSAgICBDYXNlKiBjID0gbmV3IENhc2UoZm9ybWF0X2ludChpbmRleCkpOwotICAgIGMtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChuZXcgTGl0ZXJhbEV4cHJlc3Npb24oInRoaXMiKSwgbmFtZSwgMSwgdGhpcy0+cmVzdWx0UGFyYW0pKTsKLSAgICBjLT5zdGF0ZW1lbnRzLT5BZGQobmV3IEJyZWFrKCkpOwotCi0gICAgdGhpcy0+bWV0aG9kU3dpdGNoLT5jYXNlcy5wdXNoX2JhY2soYyk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZV9uZXdfYXJyYXkoVHlwZSogdCwgU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIGZyb20pCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOiBpbXBsZW1lbnQgZ2VuZXJhdGVfbmV3X2FycmF5ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgIGV4aXQoMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZV9jcmVhdGVfZnJvbV9kYXRhKFR5cGUqIHQsIFN0YXRlbWVudEJsb2NrKiBhZGRUbywgY29uc3Qgc3RyaW5nJiBrZXksIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBWYXJpYWJsZSoqIGNsKQotewotICAgIEV4cHJlc3Npb24qIGsgPSBuZXcgU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb24oa2V5KTsKLSAgICBpZiAodi0+ZGltZW5zaW9uID09IDApIHsKLSAgICAgICAgdC0+Q3JlYXRlRnJvbVJwY0RhdGEoYWRkVG8sIGssIHYsIGRhdGEsIGNsKTsKLSAgICB9Ci0gICAgaWYgKHYtPmRpbWVuc2lvbiA9PSAxKSB7Ci0gICAgICAgIC8vdC0+UmVhZEFycmF5RnJvbVJwY0RhdGEoYWRkVG8sIHYsIGRhdGEsIGNsKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJhaWRsOiBpbXBsZW1lbnQgZ2VuZXJhdGVfY3JlYXRlX2Zyb21fZGF0YSBmb3IgYXJyYXlzJXM6JWRcbiIsCi0gICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZV93cml0ZV90b19kYXRhKFR5cGUqIHQsIFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBkYXRhKQotewotICAgIGlmICh2LT5kaW1lbnNpb24gPT0gMCkgewotICAgICAgICB0LT5Xcml0ZVRvUnBjRGF0YShhZGRUbywgaywgdiwgZGF0YSwgMCk7Ci0gICAgfQotICAgIGlmICh2LT5kaW1lbnNpb24gPT0gMSkgewotICAgICAgICAvL3QtPldyaXRlQXJyYXlUb1BhcmNlbChhZGRUbywgdiwgZGF0YSk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDogaW1wbGVtZW50IGdlbmVyYXRlX3dyaXRlX3RvX2RhdGEgZm9yIGFycmF5cyVzOiVkXG4iLAotICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgfQotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgVHlwZSoKLWdlbmVyYXRlX3Jlc3VsdHNfbWV0aG9kKGNvbnN0IG1ldGhvZF90eXBlKiBtZXRob2QsIFJwY1Byb3h5Q2xhc3MqIHByb3h5Q2xhc3MpCi17Ci0gICAgYXJnX3R5cGUqIGFyZzsKLQotICAgIHN0cmluZyByZXN1bHRzTWV0aG9kTmFtZSA9IHJlc3VsdHNfbWV0aG9kX25hbWUobWV0aG9kLT5uYW1lLmRhdGEpOwotICAgIFR5cGUqIHJlc3VsdHNJbnRlcmZhY2VUeXBlID0gbmV3IFR5cGUocmVzdWx0c19jbGFzc19uYW1lKG1ldGhvZC0+bmFtZS5kYXRhKSwKLSAgICAgICAgICAgIFR5cGU6OkdFTkVSQVRFRCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0KLSAgICBpZiAoIW1ldGhvZC0+b25ld2F5KSB7Ci0gICAgICAgIENsYXNzKiByZXN1bHRzQ2xhc3MgPSBuZXcgQ2xhc3M7Ci0gICAgICAgICAgICByZXN1bHRzQ2xhc3MtPm1vZGlmaWVycyA9IFNUQVRJQyB8IFBVQkxJQzsKLSAgICAgICAgICAgIHJlc3VsdHNDbGFzcy0+d2hhdCA9IENsYXNzOjpJTlRFUkZBQ0U7Ci0gICAgICAgICAgICByZXN1bHRzQ2xhc3MtPnR5cGUgPSByZXN1bHRzSW50ZXJmYWNlVHlwZTsKLQotICAgICAgICBNZXRob2QqIHJlc3VsdE1ldGhvZCA9IG5ldyBNZXRob2Q7Ci0gICAgICAgICAgICByZXN1bHRNZXRob2QtPmNvbW1lbnQgPSBnYXRoZXJfY29tbWVudHMobWV0aG9kLT5jb21tZW50c190b2tlbi0+ZXh0cmEpOwotICAgICAgICAgICAgcmVzdWx0TWV0aG9kLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgICAgICByZXN1bHRNZXRob2QtPnJldHVyblR5cGUgPSBWT0lEX1RZUEU7Ci0gICAgICAgICAgICByZXN1bHRNZXRob2QtPnJldHVyblR5cGVEaW1lbnNpb24gPSAwOwotICAgICAgICAgICAgcmVzdWx0TWV0aG9kLT5uYW1lID0gcmVzdWx0c01ldGhvZE5hbWU7Ci0gICAgICAgIGlmICgwICE9IHN0cmNtcCgidm9pZCIsIG1ldGhvZC0+dHlwZS50eXBlLmRhdGEpKSB7Ci0gICAgICAgICAgICByZXN1bHRNZXRob2QtPnBhcmFtZXRlcnMucHVzaF9iYWNrKG5ldyBWYXJpYWJsZShOQU1FUy5TZWFyY2gobWV0aG9kLT50eXBlLnR5cGUuZGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAiX3Jlc3VsdCIsIG1ldGhvZC0+dHlwZS5kaW1lbnNpb24pKTsKLSAgICAgICAgfQotICAgICAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgICAgIHdoaWxlIChhcmcgIT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKGNvbnZlcnRfZGlyZWN0aW9uKGFyZy0+ZGlyZWN0aW9uLmRhdGEpICYgT1VUX1BBUkFNRVRFUikgewotICAgICAgICAgICAgICAgIHJlc3VsdE1ldGhvZC0+cGFyYW1ldGVycy5wdXNoX2JhY2sobmV3IFZhcmlhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMuU2VhcmNoKGFyZy0+dHlwZS50eXBlLmRhdGEpLCBhcmctPm5hbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+dHlwZS5kaW1lbnNpb24pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICByZXN1bHRzQ2xhc3MtPmVsZW1lbnRzLnB1c2hfYmFjayhyZXN1bHRNZXRob2QpOwotCi0gICAgICAgIGlmIChyZXN1bHRNZXRob2QtPnBhcmFtZXRlcnMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgcHJveHlDbGFzcy0+ZWxlbWVudHMucHVzaF9iYWNrKHJlc3VsdHNDbGFzcyk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0c0ludGVyZmFjZVR5cGU7Ci0gICAgICAgIH0gCi0gICAgfQotICAgIC8vZGVsZXRlIHJlc3VsdHNJbnRlcmZhY2VUeXBlOwotICAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfcHJveHlfbWV0aG9kKGNvbnN0IG1ldGhvZF90eXBlKiBtZXRob2QsIFJwY1Byb3h5Q2xhc3MqIHByb3h5Q2xhc3MsCi0gICAgICAgIFJlc3VsdERpc3BhdGNoZXJDbGFzcyogcmVzdWx0c0Rpc3BhdGNoZXJDbGFzcywgVHlwZSogcmVzdWx0c0ludGVyZmFjZVR5cGUsIGludCBpbmRleCkKLXsKLSAgICBhcmdfdHlwZSogYXJnOwotICAgIE1ldGhvZCogcHJveHlNZXRob2QgPSBuZXcgTWV0aG9kOwotICAgICAgICBwcm94eU1ldGhvZC0+Y29tbWVudCA9IGdhdGhlcl9jb21tZW50cyhtZXRob2QtPmNvbW1lbnRzX3Rva2VuLT5leHRyYSk7Ci0gICAgICAgIHByb3h5TWV0aG9kLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgIHByb3h5TWV0aG9kLT5yZXR1cm5UeXBlID0gVk9JRF9UWVBFOwotICAgICAgICBwcm94eU1ldGhvZC0+cmV0dXJuVHlwZURpbWVuc2lvbiA9IDA7Ci0gICAgICAgIHByb3h5TWV0aG9kLT5uYW1lID0gbWV0aG9kLT5uYW1lLmRhdGE7Ci0gICAgICAgIHByb3h5TWV0aG9kLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgIHByb3h5Q2xhc3MtPmVsZW1lbnRzLnB1c2hfYmFjayhwcm94eU1ldGhvZCk7Ci0KLSAgICAvLyBUaGUgbG9jYWwgdmFyaWFibGVzCi0gICAgVmFyaWFibGUqIF9kYXRhID0gbmV3IFZhcmlhYmxlKFJQQ19EQVRBX1RZUEUsICJfZGF0YSIpOwotICAgIHByb3h5TWV0aG9kLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oX2RhdGEsIG5ldyBOZXdFeHByZXNzaW9uKFJQQ19EQVRBX1RZUEUpKSk7Ci0KLSAgICAvLyBBZGQgdGhlIGFyZ3VtZW50cwotICAgIGFyZyA9IG1ldGhvZC0+YXJnczsKLSAgICB3aGlsZSAoYXJnICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKGNvbnZlcnRfZGlyZWN0aW9uKGFyZy0+ZGlyZWN0aW9uLmRhdGEpICYgSU5fUEFSQU1FVEVSKSB7Ci0gICAgICAgICAgICAvLyBGdW5jdGlvbiBzaWduYXR1cmUKLSAgICAgICAgICAgIFR5cGUqIHQgPSBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgICAgICBWYXJpYWJsZSogdiA9IG5ldyBWYXJpYWJsZSh0LCBhcmctPm5hbWUuZGF0YSwgYXJnLT50eXBlLmRpbWVuc2lvbik7Ci0gICAgICAgICAgICBwcm94eU1ldGhvZC0+cGFyYW1ldGVycy5wdXNoX2JhY2sodik7Ci0KLSAgICAgICAgICAgIC8vIElucHV0IHBhcmFtZXRlciBtYXJzaGFsbGluZwotICAgICAgICAgICAgZ2VuZXJhdGVfd3JpdGVfdG9fZGF0YSh0LCBwcm94eU1ldGhvZC0+c3RhdGVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ0xpdGVyYWxFeHByZXNzaW9uKGFyZy0+bmFtZS5kYXRhKSwgdiwgX2RhdGEpOwotICAgICAgICB9Ci0gICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIHJlc3VsdHMgaW50ZXJmYWNlIGZvciB0aGlzIGNsYXNzCi0gICAgRXhwcmVzc2lvbiogcmVzdWx0UGFyYW1ldGVyOwotICAgIGlmIChyZXN1bHRzSW50ZXJmYWNlVHlwZSAhPSBOVUxMKSB7Ci0gICAgICAgIC8vIFJlc3VsdCBpbnRlcmZhY2UgcGFyYW1ldGVyCi0gICAgICAgIFZhcmlhYmxlKiByZXN1bHRMaXN0ZW5lciA9IG5ldyBWYXJpYWJsZShyZXN1bHRzSW50ZXJmYWNlVHlwZSwgIl9yZXN1bHQiKTsKLSAgICAgICAgcHJveHlNZXRob2QtPnBhcmFtZXRlcnMucHVzaF9iYWNrKHJlc3VsdExpc3RlbmVyKTsKLQotICAgICAgICAvLyBBZGQgdGhlIHJlc3VsdHMgZGlzcGF0Y2hlciBjYWxsYmFjawotICAgICAgICByZXN1bHRzRGlzcGF0Y2hlckNsYXNzLT5uZWVkZWQgPSB0cnVlOwotICAgICAgICByZXN1bHRQYXJhbWV0ZXIgPSBuZXcgTmV3RXhwcmVzc2lvbihyZXN1bHRzRGlzcGF0Y2hlckNsYXNzLT50eXBlLCAyLAotICAgICAgICAgICAgICAgIG5ldyBMaXRlcmFsRXhwcmVzc2lvbihmb3JtYXRfaW50KGluZGV4KSksIHJlc3VsdExpc3RlbmVyKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHRQYXJhbWV0ZXIgPSBOVUxMX1ZBTFVFOwotICAgIH0KLQotICAgIC8vIEFsbCBwcm94eSBtZXRob2RzIHRha2UgYW4gZXJyb3IgcGFyYW1ldGVyCi0gICAgVmFyaWFibGUqIGVycm9yTGlzdGVuZXIgPSBuZXcgVmFyaWFibGUoUlBDX0VSUk9SX0xJU1RFTkVSX1RZUEUsICJfZXJyb3JzIik7Ci0gICAgcHJveHlNZXRob2QtPnBhcmFtZXRlcnMucHVzaF9iYWNrKGVycm9yTGlzdGVuZXIpOwotCi0gICAgLy8gQ2FsbCB0aGUgYnJva2VyCi0gICAgcHJveHlNZXRob2QtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChuZXcgRmllbGRWYXJpYWJsZShUSElTX1ZBTFVFLCAiX2Jyb2tlciIpLAotICAgICAgICAgICAgICAgICJzZW5kUnBjIiwgNSwKLSAgICAgICAgICAgICAgICBwcm94eUNsYXNzLT5lbmRwb2ludCwKLSAgICAgICAgICAgICAgICBuZXcgU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb24obWV0aG9kLT5uYW1lLmRhdGEpLAotICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKF9kYXRhLCAic2VyaWFsaXplIiksCi0gICAgICAgICAgICAgICAgcmVzdWx0UGFyYW1ldGVyLAotICAgICAgICAgICAgICAgIGVycm9yTGlzdGVuZXIpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbmVyYXRlX3Jlc3VsdF9kaXNwYXRjaGVyX21ldGhvZChjb25zdCBtZXRob2RfdHlwZSogbWV0aG9kLAotICAgICAgICBSZXN1bHREaXNwYXRjaGVyQ2xhc3MqIHJlc3VsdHNEaXNwYXRjaGVyQ2xhc3MsIFR5cGUqIHJlc3VsdHNJbnRlcmZhY2VUeXBlLCBpbnQgaW5kZXgpCi17Ci0gICAgYXJnX3R5cGUqIGFyZzsKLSAgICBNZXRob2QqIGRpc3BhdGNoTWV0aG9kOwotICAgIFZhcmlhYmxlKiBkaXNwYXRjaFBhcmFtOwotICAgIHJlc3VsdHNEaXNwYXRjaGVyQ2xhc3MtPkFkZE1ldGhvZChpbmRleCwgbWV0aG9kLT5uYW1lLmRhdGEsICZkaXNwYXRjaE1ldGhvZCwgJmRpc3BhdGNoUGFyYW0pOwotCi0gICAgVmFyaWFibGUqIGNsYXNzTG9hZGVyID0gTlVMTDsKLSAgICBWYXJpYWJsZSogcmVzdWx0RGF0YSA9IG5ldyBWYXJpYWJsZShSUENfREFUQV9UWVBFLCAicmVzdWx0RGF0YSIpOwotICAgIGRpc3BhdGNoTWV0aG9kLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24ocmVzdWx0RGF0YSwKLSAgICAgICAgICAgICAgICBuZXcgTmV3RXhwcmVzc2lvbihSUENfREFUQV9UWVBFLCAxLCBkaXNwYXRjaFBhcmFtKSkpOwotCi0gICAgLy8gVGhlIGNhbGxiYWNrIG1ldGhvZCBpdHNlbGYKLSAgICBNZXRob2RDYWxsKiByZWFsQ2FsbCA9IG5ldyBNZXRob2RDYWxsKAotICAgICAgICAgICAgbmV3IENhc3QocmVzdWx0c0ludGVyZmFjZVR5cGUsIG5ldyBGaWVsZFZhcmlhYmxlKFRISVNfVkFMVUUsICJjYWxsYmFjayIpKSwKLSAgICAgICAgICAgIHJlc3VsdHNfbWV0aG9kX25hbWUobWV0aG9kLT5uYW1lLmRhdGEpKTsKLQotICAgIC8vIFRoZSByZXR1cm4gdmFsdWUKLSAgICB7Ci0gICAgICAgIFR5cGUqIHQgPSBOQU1FUy5TZWFyY2gobWV0aG9kLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgIGlmICh0ICE9IFZPSURfVFlQRSkgewotICAgICAgICAgICAgVmFyaWFibGUqIHJ2ID0gbmV3IFZhcmlhYmxlKHQsICJydiIpOwotICAgICAgICAgICAgZGlzcGF0Y2hNZXRob2QtPnN0YXRlbWVudHMtPkFkZChuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihydikpOwotICAgICAgICAgICAgZ2VuZXJhdGVfY3JlYXRlX2Zyb21fZGF0YSh0LCBkaXNwYXRjaE1ldGhvZC0+c3RhdGVtZW50cywgIl9yZXN1bHQiLCBydiwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0RGF0YSwgJmNsYXNzTG9hZGVyKTsKLSAgICAgICAgICAgIHJlYWxDYWxsLT5hcmd1bWVudHMucHVzaF9iYWNrKHJ2KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFZhcmlhYmxlRmFjdG9yeSBzdHViQXJncygiYXJnIik7Ci0gICAgYXJnID0gbWV0aG9kLT5hcmdzOwotICAgIHdoaWxlIChhcmcgIT0gTlVMTCkgewotICAgICAgICBpZiAoY29udmVydF9kaXJlY3Rpb24oYXJnLT5kaXJlY3Rpb24uZGF0YSkgJiBPVVRfUEFSQU1FVEVSKSB7Ci0gICAgICAgICAgICAvLyBVbm1hcnNoYWxsIHRoZSByZXN1bHRzCi0gICAgICAgICAgICBUeXBlKiB0ID0gTkFNRVMuU2VhcmNoKGFyZy0+dHlwZS50eXBlLmRhdGEpOwotICAgICAgICAgICAgVmFyaWFibGUqIHYgPSBzdHViQXJncy5HZXQodCk7Ci0gICAgICAgICAgICBkaXNwYXRjaE1ldGhvZC0+c3RhdGVtZW50cy0+QWRkKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKHYpKTsKLQotICAgICAgICAgICAgZ2VuZXJhdGVfY3JlYXRlX2Zyb21fZGF0YSh0LCBkaXNwYXRjaE1ldGhvZC0+c3RhdGVtZW50cywgYXJnLT5uYW1lLmRhdGEsIHYsCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdERhdGEsICZjbGFzc0xvYWRlcik7Ci0KLSAgICAgICAgICAgIC8vIEFkZCB0aGUgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrCi0gICAgICAgICAgICByZWFsQ2FsbC0+YXJndW1lbnRzLnB1c2hfYmFjayh2KTsKLSAgICAgICAgfQotICAgICAgICBhcmcgPSBhcmctPm5leHQ7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCB0aGUgY2FsbGJhY2sgbWV0aG9kCi0gICAgSWZTdGF0ZW1lbnQqIGlmc3QgPSBuZXcgSWZTdGF0ZW1lbnQ7Ci0gICAgICAgIGlmc3QtPmV4cHJlc3Npb24gPSBuZXcgQ29tcGFyaXNvbihuZXcgRmllbGRWYXJpYWJsZShUSElTX1ZBTFVFLCAiY2FsbGJhY2siKSwgIiE9IiwgTlVMTF9WQUxVRSk7Ci0gICAgZGlzcGF0Y2hNZXRob2QtPnN0YXRlbWVudHMtPkFkZChpZnN0KTsKLSAgICBpZnN0LT5zdGF0ZW1lbnRzLT5BZGQocmVhbENhbGwpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfcmVndWxhcl9tZXRob2QoY29uc3QgbWV0aG9kX3R5cGUqIG1ldGhvZCwgUnBjUHJveHlDbGFzcyogcHJveHlDbGFzcywKLSAgICAgICAgRW5kcG9pbnRCYXNlQ2xhc3MqIHNlcnZpY2VCYXNlQ2xhc3MsIFJlc3VsdERpc3BhdGNoZXJDbGFzcyogcmVzdWx0c0Rpc3BhdGNoZXJDbGFzcywKLSAgICAgICAgaW50IGluZGV4KQotewotICAgIGFyZ190eXBlKiBhcmc7Ci0KLSAgICAvLyA9PSB0aGUgY2FsbGJhY2sgaW50ZXJmYWNlIGZvciByZXN1bHRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgLy8gdGhlIHNlcnZpY2UgYmFzZSBjbGFzcwotICAgIFR5cGUqIHJlc3VsdHNJbnRlcmZhY2VUeXBlID0gZ2VuZXJhdGVfcmVzdWx0c19tZXRob2QobWV0aG9kLCBwcm94eUNsYXNzKTsKLSAgICAKLSAgICAvLyA9PSB0aGUgbWV0aG9kIGluIHRoZSBwcm94eSBjbGFzcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgZ2VuZXJhdGVfcHJveHlfbWV0aG9kKG1ldGhvZCwgcHJveHlDbGFzcywgcmVzdWx0c0Rpc3BhdGNoZXJDbGFzcywgcmVzdWx0c0ludGVyZmFjZVR5cGUsIGluZGV4KTsKLQotICAgIC8vID09IHRoZSBtZXRob2QgaW4gdGhlIHJlc3VsdCBkaXNwYXRjaGVyIGNsYXNzID09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBpZiAocmVzdWx0c0ludGVyZmFjZVR5cGUgIT0gTlVMTCkgewotICAgICAgICBnZW5lcmF0ZV9yZXN1bHRfZGlzcGF0Y2hlcl9tZXRob2QobWV0aG9kLCByZXN1bHRzRGlzcGF0Y2hlckNsYXNzLCByZXN1bHRzSW50ZXJmYWNlVHlwZSwKLSAgICAgICAgICAgICAgICBpbmRleCk7Ci0gICAgfQotCi0gICAgLy8gPT0gVGhlIGFic3RyYWN0IG1ldGhvZCB0aGF0IHRoZSBzZXJ2aWNlIGRldmVsb3BlcnMgaW1wbGVtZW50ID09PT09PT09PT0KLSAgICBNZXRob2QqIGRlY2wgPSBuZXcgTWV0aG9kOwotICAgICAgICBkZWNsLT5jb21tZW50ID0gZ2F0aGVyX2NvbW1lbnRzKG1ldGhvZC0+Y29tbWVudHNfdG9rZW4tPmV4dHJhKTsKLSAgICAgICAgZGVjbC0+bW9kaWZpZXJzID0gUFVCTElDIHwgQUJTVFJBQ1Q7Ci0gICAgICAgIGRlY2wtPnJldHVyblR5cGUgPSBOQU1FUy5TZWFyY2gobWV0aG9kLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgIGRlY2wtPnJldHVyblR5cGVEaW1lbnNpb24gPSBtZXRob2QtPnR5cGUuZGltZW5zaW9uOwotICAgICAgICBkZWNsLT5uYW1lID0gbWV0aG9kLT5uYW1lLmRhdGE7Ci0gICAgYXJnID0gbWV0aG9kLT5hcmdzOwotICAgIHdoaWxlIChhcmcgIT0gTlVMTCkgewotICAgICAgICBkZWNsLT5wYXJhbWV0ZXJzLnB1c2hfYmFjayhuZXcgVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMuU2VhcmNoKGFyZy0+dHlwZS50eXBlLmRhdGEpLCBhcmctPm5hbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmctPnR5cGUuZGltZW5zaW9uKSk7Ci0gICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICB9Ci0KLSAgICAvLyBBZGQgdGhlIGRlZmF1bHQgUnBjQ29udGV4dCBwYXJhbSB0byBhbGwgbWV0aG9kcwotICAgIGRlY2wtPnBhcmFtZXRlcnMucHVzaF9iYWNrKG5ldyBWYXJpYWJsZShSUENfQ09OVEVYVF9UWVBFLCAiY29udGV4dCIsIDApKTsKLQkKLSAgICBzZXJ2aWNlQmFzZUNsYXNzLT5lbGVtZW50cy5wdXNoX2JhY2soZGVjbCk7Ci0gICAgCi0KLSAgICAvLyA9PSB0aGUgZGlzcGF0Y2ggbWV0aG9kIGluIHRoZSBzZXJ2aWNlIGJhc2UgY2xhc3MgPT09PT09PT09PT09PT09PT09PT09PQotICAgIHNlcnZpY2VCYXNlQ2xhc3MtPkFkZE1ldGhvZChtZXRob2QpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfZXZlbnRfbWV0aG9kKGNvbnN0IG1ldGhvZF90eXBlKiBtZXRob2QsIFJwY1Byb3h5Q2xhc3MqIHByb3h5Q2xhc3MsCi0gICAgICAgIEVuZHBvaW50QmFzZUNsYXNzKiBzZXJ2aWNlQmFzZUNsYXNzLCBMaXN0ZW5lckNsYXNzKiBsaXN0ZW5lckNsYXNzLAotICAgICAgICBFdmVudExpc3RlbmVyQ2xhc3MqIHByZXNlbnRlckNsYXNzLCBpbnQgaW5kZXgpCi17Ci0gICAgYXJnX3R5cGUqIGFyZzsKLSAgICBsaXN0ZW5lckNsYXNzLT5uZWVkZWQgPSB0cnVlOwotCi0gICAgLy8gPT0gdGhlIHB1c2ggbWV0aG9kIGluIHRoZSBzZXJ2aWNlIGJhc2UgY2xhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIE1ldGhvZCogcHVzaCA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIHB1c2gtPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICAgICAgcHVzaC0+bmFtZSA9IHB1c2hfbWV0aG9kX25hbWUobWV0aG9kLT5uYW1lLmRhdGEpOwotICAgICAgICBwdXNoLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgICAgICBwdXNoLT5yZXR1cm5UeXBlID0gVk9JRF9UWVBFOwotICAgIHNlcnZpY2VCYXNlQ2xhc3MtPmVsZW1lbnRzLnB1c2hfYmFjayhwdXNoKTsKLQotICAgIC8vIFRoZSBsb2NhbCB2YXJpYWJsZXMKLSAgICBWYXJpYWJsZSogX2RhdGEgPSBuZXcgVmFyaWFibGUoUlBDX0RBVEFfVFlQRSwgIl9kYXRhIik7Ci0gICAgcHVzaC0+c3RhdGVtZW50cy0+QWRkKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKF9kYXRhLCBuZXcgTmV3RXhwcmVzc2lvbihSUENfREFUQV9UWVBFKSkpOwotCi0gICAgLy8gQWRkIHRoZSBhcmd1bWVudHMKLSAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgd2hpbGUgKGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgIC8vIEZ1bmN0aW9uIHNpZ25hdHVyZQotICAgICAgICBUeXBlKiB0ID0gTkFNRVMuU2VhcmNoKGFyZy0+dHlwZS50eXBlLmRhdGEpOwotICAgICAgICBWYXJpYWJsZSogdiA9IG5ldyBWYXJpYWJsZSh0LCBhcmctPm5hbWUuZGF0YSwgYXJnLT50eXBlLmRpbWVuc2lvbik7Ci0gICAgICAgIHB1c2gtPnBhcmFtZXRlcnMucHVzaF9iYWNrKHYpOwotCi0gICAgICAgIC8vIElucHV0IHBhcmFtZXRlciBtYXJzaGFsbGluZwotICAgICAgICBnZW5lcmF0ZV93cml0ZV90b19kYXRhKHQsIHB1c2gtPnN0YXRlbWVudHMsCi0gICAgICAgICAgICAgICAgbmV3IFN0cmluZ0xpdGVyYWxFeHByZXNzaW9uKGFyZy0+bmFtZS5kYXRhKSwgdiwgX2RhdGEpOwotCi0gICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICB9Ci0KLSAgICAvLyBTZW5kIHRoZSBub3RpZmljYXRpb25zCi0gICAgcHVzaC0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKCJwdXNoRXZlbnQiLCAyLAotICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdMaXRlcmFsRXhwcmVzc2lvbihtZXRob2QtPm5hbWUuZGF0YSksCi0gICAgICAgICAgICAgICAgbmV3IE1ldGhvZENhbGwoX2RhdGEsICJzZXJpYWxpemUiKSkpOwotCi0gICAgLy8gPT0gdGhlIGV2ZW50IGNhbGxiYWNrIGRpc3BhdGNoZXIgbWV0aG9kICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBwcmVzZW50ZXJDbGFzcy0+QWRkTWV0aG9kKG1ldGhvZCk7Ci0KLSAgICAvLyA9PSB0aGUgZXZlbnQgbWV0aG9kIGluIHRoZSBsaXN0ZW5lciBiYXNlIGNsYXNzID09PT09PT09PT09PT09PT09PT09PQotICAgIE1ldGhvZCogZXZlbnQgPSBuZXcgTWV0aG9kOwotICAgICAgICBldmVudC0+bW9kaWZpZXJzID0gUFVCTElDOwotICAgICAgICBldmVudC0+bmFtZSA9IG1ldGhvZC0+bmFtZS5kYXRhOwotICAgICAgICBldmVudC0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICAgICAgZXZlbnQtPnJldHVyblR5cGUgPSBWT0lEX1RZUEU7Ci0gICAgbGlzdGVuZXJDbGFzcy0+ZWxlbWVudHMucHVzaF9iYWNrKGV2ZW50KTsKLSAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgd2hpbGUgKGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgIGV2ZW50LT5wYXJhbWV0ZXJzLnB1c2hfYmFjayhuZXcgVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMuU2VhcmNoKGFyZy0+dHlwZS50eXBlLmRhdGEpLCBhcmctPm5hbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmctPnR5cGUuZGltZW5zaW9uKSk7Ci0gICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICB9Ci0KLSAgICAvLyBBZGQgYSBmaW5hbCBwYXJhbWV0ZXI6IFJwY0NvbnRleHQuIENvbnRhaW5zIGRhdGEgYWJvdXQKLSAgICAvLyBpbmNvbWluZyByZXF1ZXN0IChlLmcuLCBjZXJ0aWZpY2F0ZSkKLSAgICBldmVudC0+cGFyYW1ldGVycy5wdXNoX2JhY2sobmV3IFZhcmlhYmxlKFJQQ19DT05URVhUX1RZUEUsICJjb250ZXh0IiwgMCkpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfbGlzdGVuZXJfbWV0aG9kcyhScGNQcm94eUNsYXNzKiBwcm94eUNsYXNzLCBUeXBlKiBwcmVzZW50ZXJUeXBlLCBUeXBlKiBsaXN0ZW5lclR5cGUpCi17Ci0gICAgLy8gQW5kcm9pZEF0SG9tZVByZXNlbnRlciBfcHJlc2VudGVyOwotICAgIC8vIHZvaWQgc3RhcnRMaXN0ZW5pbmcoTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAvLyAgICAgc3RvcExpc3RlbmluZygpOwotICAgIC8vICAgICBfcHJlc2VudGVyID0gbmV3IFByZXNlbnRlcihfYnJva2VyLCBsaXN0ZW5lcik7Ci0gICAgLy8gICAgIF9wcmVzZW50ZXIuc3RhcnRMaXN0ZW5pbmcoX2VuZHBvaW50KTsKLSAgICAvLyB9Ci0gICAgLy8gdm9pZCBzdG9wTGlzdGVuaW5nKCkgewotICAgIC8vICAgICBpZiAoX3ByZXNlbnRlciAhPSBudWxsKSB7Ci0gICAgLy8gICAgICAgICBfcHJlc2VudGVyLnN0b3BMaXN0ZW5pbmcoKTsKLSAgICAvLyAgICAgfQotICAgIC8vIH0KLQotICAgIFZhcmlhYmxlKiBfcHJlc2VudGVyID0gbmV3IFZhcmlhYmxlKHByZXNlbnRlclR5cGUsICJfcHJlc2VudGVyIik7Ci0gICAgcHJveHlDbGFzcy0+ZWxlbWVudHMucHVzaF9iYWNrKG5ldyBGaWVsZChQUklWQVRFLCBfcHJlc2VudGVyKSk7Ci0KLSAgICBWYXJpYWJsZSogbGlzdGVuZXIgPSBuZXcgVmFyaWFibGUobGlzdGVuZXJUeXBlLCAibGlzdGVuZXIiKTsKLQotICAgIE1ldGhvZCogc3RhcnRMaXN0ZW5pbmdNZXRob2QgPSBuZXcgTWV0aG9kOwotICAgICAgICBzdGFydExpc3RlbmluZ01ldGhvZC0+bW9kaWZpZXJzID0gUFVCTElDOwotICAgICAgICBzdGFydExpc3RlbmluZ01ldGhvZC0+cmV0dXJuVHlwZSA9IFZPSURfVFlQRTsKLSAgICAgICAgc3RhcnRMaXN0ZW5pbmdNZXRob2QtPm5hbWUgPSAic3RhcnRMaXN0ZW5pbmciOwotICAgICAgICBzdGFydExpc3RlbmluZ01ldGhvZC0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICAgICAgc3RhcnRMaXN0ZW5pbmdNZXRob2QtPnBhcmFtZXRlcnMucHVzaF9iYWNrKGxpc3RlbmVyKTsKLSAgICBwcm94eUNsYXNzLT5lbGVtZW50cy5wdXNoX2JhY2soc3RhcnRMaXN0ZW5pbmdNZXRob2QpOwotCi0gICAgc3RhcnRMaXN0ZW5pbmdNZXRob2QtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChUSElTX1ZBTFVFLCAic3RvcExpc3RlbmluZyIpKTsKLSAgICBzdGFydExpc3RlbmluZ01ldGhvZC0+c3RhdGVtZW50cy0+QWRkKG5ldyBBc3NpZ25tZW50KF9wcmVzZW50ZXIsCi0gICAgICAgICAgICAgICAgbmV3IE5ld0V4cHJlc3Npb24ocHJlc2VudGVyVHlwZSwgMiwgcHJveHlDbGFzcy0+YnJva2VyLCBsaXN0ZW5lcikpKTsKLSAgICBzdGFydExpc3RlbmluZ01ldGhvZC0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKF9wcmVzZW50ZXIsCi0gICAgICAgICAgICAgICAgInN0YXJ0TGlzdGVuaW5nIiwgMSwgcHJveHlDbGFzcy0+ZW5kcG9pbnQpKTsKLQotICAgIE1ldGhvZCogc3RvcExpc3RlbmluZ01ldGhvZCA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIHN0b3BMaXN0ZW5pbmdNZXRob2QtPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICAgICAgc3RvcExpc3RlbmluZ01ldGhvZC0+cmV0dXJuVHlwZSA9IFZPSURfVFlQRTsKLSAgICAgICAgc3RvcExpc3RlbmluZ01ldGhvZC0+bmFtZSA9ICJzdG9wTGlzdGVuaW5nIjsKLSAgICAgICAgc3RvcExpc3RlbmluZ01ldGhvZC0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICBwcm94eUNsYXNzLT5lbGVtZW50cy5wdXNoX2JhY2soc3RvcExpc3RlbmluZ01ldGhvZCk7Ci0KLSAgICBJZlN0YXRlbWVudCogaWZzdCA9IG5ldyBJZlN0YXRlbWVudDsKLSAgICAgICAgaWZzdC0+ZXhwcmVzc2lvbiA9IG5ldyBDb21wYXJpc29uKF9wcmVzZW50ZXIsICIhPSIsIE5VTExfVkFMVUUpOwotICAgIHN0b3BMaXN0ZW5pbmdNZXRob2QtPnN0YXRlbWVudHMtPkFkZChpZnN0KTsKLQotICAgIGlmc3QtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChfcHJlc2VudGVyLCAic3RvcExpc3RlbmluZyIpKTsKLSAgICBpZnN0LT5zdGF0ZW1lbnRzLT5BZGQobmV3IEFzc2lnbm1lbnQoX3ByZXNlbnRlciwgTlVMTF9WQUxVRSkpOwotfQotCi1DbGFzcyoKLWdlbmVyYXRlX3JwY19pbnRlcmZhY2VfY2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlKQotewotICAgIC8vIHRoZSBwcm94eSBjbGFzcwotICAgIEludGVyZmFjZVR5cGUqIGludGVyZmFjZVR5cGUgPSBzdGF0aWNfY2FzdDxJbnRlcmZhY2VUeXBlKj4oCi0gICAgICAgIE5BTUVTLkZpbmQoaWZhY2UtPnBhY2thZ2UsIGlmYWNlLT5uYW1lLmRhdGEpKTsKLSAgICBScGNQcm94eUNsYXNzKiBwcm94eSA9IG5ldyBScGNQcm94eUNsYXNzKGlmYWNlLCBpbnRlcmZhY2VUeXBlKTsKLQotICAgIC8vIHRoZSBsaXN0ZW5lciBjbGFzcwotICAgIExpc3RlbmVyQ2xhc3MqIGxpc3RlbmVyID0gbmV3IExpc3RlbmVyQ2xhc3MoaWZhY2UpOwotCi0gICAgLy8gdGhlIHByZXNlbnRlciBjbGFzcwotICAgIEV2ZW50TGlzdGVuZXJDbGFzcyogcHJlc2VudGVyID0gbmV3IEV2ZW50TGlzdGVuZXJDbGFzcyhpZmFjZSwgbGlzdGVuZXItPnR5cGUpOwotCi0gICAgLy8gdGhlIHNlcnZpY2UgYmFzZSBjbGFzcwotICAgIEVuZHBvaW50QmFzZUNsYXNzKiBiYXNlID0gbmV3IEVuZHBvaW50QmFzZUNsYXNzKGlmYWNlKTsKLSAgICBwcm94eS0+ZWxlbWVudHMucHVzaF9iYWNrKGJhc2UpOwotCi0gICAgLy8gdGhlIHJlc3VsdCBkaXNwYXRjaGVyCi0gICAgUmVzdWx0RGlzcGF0Y2hlckNsYXNzKiByZXN1bHRzID0gbmV3IFJlc3VsdERpc3BhdGNoZXJDbGFzcygpOwotCi0gICAgLy8gYWxsIHRoZSBkZWNsYXJlZCBtZXRob2RzIG9mIHRoZSBwcm94eQotICAgIGludCBpbmRleCA9IDA7Ci0gICAgaW50ZXJmYWNlX2l0ZW1fdHlwZSogaXRlbSA9IGlmYWNlLT5pbnRlcmZhY2VfaXRlbXM7Ci0gICAgd2hpbGUgKGl0ZW0gIT0gTlVMTCkgewotICAgICAgICBpZiAoaXRlbS0+aXRlbV90eXBlID09IE1FVEhPRF9UWVBFKSB7Ci0gICAgICAgICAgICBpZiAoTkFNRVMuU2VhcmNoKCgobWV0aG9kX3R5cGUqKWl0ZW0pLT50eXBlLnR5cGUuZGF0YSkgPT0gRVZFTlRfRkFLRV9UWVBFKSB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXZlbnRfbWV0aG9kKChtZXRob2RfdHlwZSopaXRlbSwgcHJveHksIGJhc2UsIGxpc3RlbmVyLCBwcmVzZW50ZXIsIGluZGV4KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVfcmVndWxhcl9tZXRob2QoKG1ldGhvZF90eXBlKilpdGVtLCBwcm94eSwgYmFzZSwgcmVzdWx0cywgaW5kZXgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGl0ZW0gPSBpdGVtLT5uZXh0OwotICAgICAgICBpbmRleCsrOwotICAgIH0KLSAgICBwcmVzZW50ZXItPkRvbmVXaXRoTWV0aG9kcygpOwotICAgIGJhc2UtPkRvbmVXaXRoTWV0aG9kcygpOwotCi0gICAgLy8gb25seSBhZGQgdGhpcyBpZiB0aGVyZSBhcmUgbWV0aG9kcyB3aXRoIHJlc3VsdHMgLyBvdXQgcGFyYW1ldGVycwotICAgIGlmIChyZXN1bHRzLT5uZWVkZWQpIHsKLSAgICAgICAgcHJveHktPmVsZW1lbnRzLnB1c2hfYmFjayhyZXN1bHRzKTsKLSAgICB9Ci0gICAgaWYgKGxpc3RlbmVyLT5uZWVkZWQpIHsKLSAgICAgICAgcHJveHktPmVsZW1lbnRzLnB1c2hfYmFjayhsaXN0ZW5lcik7Ci0gICAgICAgIHByb3h5LT5lbGVtZW50cy5wdXNoX2JhY2socHJlc2VudGVyKTsKLSAgICAgICAgZ2VuZXJhdGVfbGlzdGVuZXJfbWV0aG9kcyhwcm94eSwgcHJlc2VudGVyLT50eXBlLCBsaXN0ZW5lci0+dHlwZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHByb3h5OwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9vcHRpb25zLmNwcCBiL3Rvb2xzL2FpZGwvb3B0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMmRhZWIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9vcHRpb25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0KLSNpbmNsdWRlICJvcHRpb25zLmgiCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1zdGF0aWMgaW50Ci11c2FnZSgpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAidXNhZ2U6IGFpZGwgT1BUSU9OUyBJTlBVVCBbT1VUUFVUXVxuIgotICAgICAgICAgICAgIiAgICAgICBhaWRsIC0tcHJlcHJvY2VzcyBPVVRQVVQgSU5QVVQuLi5cbiIKLSAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICJPUFRJT05TOlxuIgotICAgICAgICAgICAgIiAgIC1JPERJUj4gICAgc2VhcmNoIHBhdGggZm9yIGltcG9ydCBzdGF0ZW1lbnRzLlxuIgotICAgICAgICAgICAgIiAgIC1kPEZJTEU+ICAgZ2VuZXJhdGUgZGVwZW5kZW5jeSBmaWxlLlxuIgotICAgICAgICAgICAgIiAgIC1hICAgICAgICAgZ2VuZXJhdGUgZGVwZW5kZW5jeSBmaWxlIG5leHQgdG8gdGhlIG91dHB1dCBmaWxlIHdpdGggdGhlIG5hbWUgYmFzZWQgb24gdGhlIGlucHV0IGZpbGUuXG4iCi0gICAgICAgICAgICAiICAgLXA8RklMRT4gICBmaWxlIGNyZWF0ZWQgYnkgLS1wcmVwcm9jZXNzIHRvIGltcG9ydC5cbiIKLSAgICAgICAgICAgICIgICAtbzxGT0xERVI+IGJhc2Ugb3V0cHV0IGZvbGRlciBmb3IgZ2VuZXJhdGVkIGZpbGVzLlxuIgotICAgICAgICAgICAgIiAgIC1iICAgICAgICAgZmFpbCB3aGVuIHRyeWluZyB0byBjb21waWxlIGEgcGFyY2VsYWJsZS5cbiIKLSAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICJJTlBVVDpcbiIKLSAgICAgICAgICAgICIgICBBbiBhaWRsIGludGVyZmFjZSBmaWxlLlxuIgotICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgIk9VVFBVVDpcbiIKLSAgICAgICAgICAgICIgICBUaGUgZ2VuZXJhdGVkIGludGVyZmFjZSBmaWxlcy5cbiIKLSAgICAgICAgICAgICIgICBJZiBvbWl0dGVkIGFuZCB0aGUgLW8gb3B0aW9uIGlzIG5vdCB1c2VkLCB0aGUgaW5wdXQgZmlsZW5hbWUgaXMgdXNlZCwgd2l0aCB0aGUgLmFpZGwgZXh0ZW5zaW9uIGNoYW5nZWQgdG8gYSAuamF2YSBleHRlbnNpb24uXG4iCi0gICAgICAgICAgICAiICAgSWYgdGhlIC1vIG9wdGlvbiBpcyB1c2VkLCB0aGUgZ2VuZXJhdGVkIGZpbGVzIHdpbGwgYmUgcGxhY2VkIGluIHRoZSBiYXNlIG91dHB1dCBmb2xkZXIsIHVuZGVyIHRoZWlyIHBhY2thZ2UgZm9sZGVyXG4iCi0gICAgICAgICAgICk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLWludAotcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciogY29uc3QqIGFyZ3YsIE9wdGlvbnMgKm9wdGlvbnMpCi17Ci0gICAgaW50IGkgPSAxOwotCi0gICAgaWYgKGFyZ2MgPj0gMiAmJiAwID09IHN0cmNtcChhcmd2WzFdLCAiLS1wcmVwcm9jZXNzIikpIHsKLSAgICAgICAgaWYgKGFyZ2MgPCA0KSB7Ci0gICAgICAgICAgICByZXR1cm4gdXNhZ2UoKTsKLSAgICAgICAgfQotICAgICAgICBvcHRpb25zLT5vdXRwdXRGaWxlTmFtZSA9IGFyZ3ZbMl07Ci0gICAgICAgIGZvciAoaW50IGk9MzsgaTxhcmdjOyBpKyspIHsKLSAgICAgICAgICAgIG9wdGlvbnMtPmZpbGVzVG9QcmVwcm9jZXNzLnB1c2hfYmFjayhhcmd2W2ldKTsKLSAgICAgICAgfQotICAgICAgICBvcHRpb25zLT50YXNrID0gUFJFUFJPQ0VTU19BSURMOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBvcHRpb25zLT50YXNrID0gQ09NUElMRV9BSURMOwotICAgIG9wdGlvbnMtPmZhaWxPblBhcmNlbGFibGUgPSBmYWxzZTsKLSAgICBvcHRpb25zLT5hdXRvRGVwRmlsZSA9IGZhbHNlOwotCi0gICAgLy8gT1BUSU9OUwotICAgIHdoaWxlIChpIDwgYXJnYykgewotICAgICAgICBjb25zdCBjaGFyKiBzID0gYXJndltpXTsKLSAgICAgICAgaW50IGxlbiA9IHN0cmxlbihzKTsKLSAgICAgICAgaWYgKHNbMF0gPT0gJy0nKSB7Ci0gICAgICAgICAgICBpZiAobGVuID4gMSkgewotICAgICAgICAgICAgICAgIC8vIC1JPHN5c3RlbS1pbXBvcnQtcGF0aD4KLSAgICAgICAgICAgICAgICBpZiAoc1sxXSA9PSAnSScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMtPmltcG9ydFBhdGhzLnB1c2hfYmFjayhzKzIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItSSBvcHRpb24gKCVkKSByZXF1aXJlcyBhIHBhdGguXG4iLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2FnZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNbMV0gPT0gJ2QnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLT5kZXBGaWxlTmFtZSA9IHMrMjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLWQgb3B0aW9uICglZCkgcmVxdWlyZXMgYSBmaWxlLlxuIiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzWzFdID09ICdhJykgewotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLT5hdXRvRGVwRmlsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNbMV0gPT0gJ3AnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLT5wcmVwcm9jZXNzZWRGaWxlcy5wdXNoX2JhY2socysyKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLXAgb3B0aW9uICglZCkgcmVxdWlyZXMgYSBmaWxlLlxuIiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzWzFdID09ICdvJykgewotICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy0+b3V0cHV0QmFzZUZvbGRlciA9IHMrMjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLW8gb3B0aW9uICglZCkgcmVxdWlyZXMgYSBwYXRoLlxuIiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChsZW4gPT0gMiAmJiBzWzFdID09ICdiJykgewotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLT5mYWlsT25QYXJjZWxhYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHNbMV0gaXMgbm90IGtub3duCi0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93biBvcHRpb24gKCVkKTogJXNcbiIsIGksIHMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIGxlbiA8PSAxCi0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmtub3duIG9wdGlvbiAoJWQpOiAlc1xuIiwgaSwgcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVzYWdlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBzWzBdICE9ICctJwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaSsrOwotICAgIH0KLQotICAgIC8vIElOUFVUCi0gICAgaWYgKGkgPCBhcmdjKSB7Ci0gICAgICAgIG9wdGlvbnMtPmlucHV0RmlsZU5hbWUgPSBhcmd2W2ldOwotICAgICAgICBpKys7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJJTlBVVCByZXF1aXJlZFxuIik7Ci0gICAgICAgIHJldHVybiB1c2FnZSgpOwotICAgIH0KLQotICAgIC8vIE9VVFBVVAotICAgIGlmIChpIDwgYXJnYykgewotICAgICAgICBvcHRpb25zLT5vdXRwdXRGaWxlTmFtZSA9IGFyZ3ZbaV07Ci0gICAgICAgIGkrKzsKLSAgICB9IGVsc2UgaWYgKG9wdGlvbnMtPm91dHB1dEJhc2VGb2xkZXIubGVuZ3RoKCkgPT0gMCkgewotICAgICAgICAvLyBjb3B5IGlucHV0IGludG8gb3V0cHV0IGFuZCBjaGFuZ2UgdGhlIGV4dGVuc2lvbiBmcm9tIC5haWRsIHRvIC5qYXZhCi0gICAgICAgIG9wdGlvbnMtPm91dHB1dEZpbGVOYW1lID0gb3B0aW9ucy0+aW5wdXRGaWxlTmFtZTsKLSAgICAgICAgc3RyaW5nOjpzaXplX3R5cGUgcG9zID0gb3B0aW9ucy0+b3V0cHV0RmlsZU5hbWUuc2l6ZSgpLTU7Ci0gICAgICAgIGlmIChvcHRpb25zLT5vdXRwdXRGaWxlTmFtZS5jb21wYXJlKHBvcywgNSwgIi5haWRsIikgPT0gMCkgeyAgLy8gNSA9IHN0cmxlbigiLmFpZGwiKQotICAgICAgICAgICAgb3B0aW9ucy0+b3V0cHV0RmlsZU5hbWUucmVwbGFjZShwb3MsIDUsICIuamF2YSIpOyAvLyA1ID0gc3RybGVuKCIuYWlkbCIpCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIklOUFVUIGlzIG5vdCBhbiAuYWlkbCBmaWxlLlxuIik7Ci0gICAgICAgICAgICByZXR1cm4gdXNhZ2UoKTsKLSAgICAgICAgfQotICAgICB9Ci0KLSAgICAvLyBhbnl0aGluZyByZW1haW5pbmc/Ci0gICAgaWYgKGkgIT0gYXJnYykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVua25vd24gb3B0aW9uJXM6IiwgKGk9PWFyZ2MtMT8oY29uc3QgY2hhciopIiI6KGNvbnN0IGNoYXIqKSJzIikpOwotICAgICAgICBmb3IgKDsgaTxhcmdjLTE7IGkrKykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgJXMiLCBhcmd2W2ldKTsKLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0gICAgICAgIHJldHVybiB1c2FnZSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS90b29scy9haWRsL29wdGlvbnMuaCBiL3Rvb2xzL2FpZGwvb3B0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODdlMzdkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvb3B0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotI2lmbmRlZiBERVZJQ0VfVE9PTFNfQUlETF9ICi0jZGVmaW5lIERFVklDRV9UT09MU19BSURMX0gKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLWVudW0gewotICAgIENPTVBJTEVfQUlETCwKLSAgICBQUkVQUk9DRVNTX0FJREwKLX07Ci0KLS8vIFRoaXMgc3RydWN0IGlzIHRoZSBwYXJzZWQgdmVyc2lvbiBvZiB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMKLXN0cnVjdCBPcHRpb25zCi17Ci0gICAgaW50IHRhc2s7Ci0gICAgYm9vbCBmYWlsT25QYXJjZWxhYmxlOwotICAgIHZlY3RvcjxzdHJpbmc+IGltcG9ydFBhdGhzOwotICAgIHZlY3RvcjxzdHJpbmc+IHByZXByb2Nlc3NlZEZpbGVzOwotICAgIHN0cmluZyBpbnB1dEZpbGVOYW1lOwotICAgIHN0cmluZyBvdXRwdXRGaWxlTmFtZTsKLSAgICBzdHJpbmcgb3V0cHV0QmFzZUZvbGRlcjsKLSAgICBzdHJpbmcgZGVwRmlsZU5hbWU7Ci0gICAgYm9vbCBhdXRvRGVwRmlsZTsKLQotICAgIHZlY3RvcjxzdHJpbmc+IGZpbGVzVG9QcmVwcm9jZXNzOwotfTsKLQotLy8gdGFrZXMgdGhlIGlucHV0cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYW5kIGZpbGxzIGluIHRoZSBPcHRpb25zIHN0cnVjdAotLy8gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuZCBub256ZXJvIG9uIGZhaWx1cmUuCi0vLyBJdCBhbHNvIHByaW50cyB0aGUgdXNhZ2Ugc3RhdGVtZW50IG9uIGZhaWx1cmUuCi1pbnQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciogY29uc3QqIGFyZ3YsIE9wdGlvbnMgKm9wdGlvbnMpOwotCi0jZW5kaWYgLy8gREVWSUNFX1RPT0xTX0FJRExfSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9vcHRpb25zX3Rlc3QuY3BwIGIvdG9vbHMvYWlkbC9vcHRpb25zX3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDEwNmNlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvb3B0aW9uc190ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSAib3B0aW9ucy5oIgotCi1jb25zdCBib29sIFZFUkJPU0UgPSBmYWxzZTsKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotc3RydWN0IEFuc3dlciB7Ci0gICAgY29uc3QgY2hhciogYXJndls4XTsKLSAgICBpbnQgcmVzdWx0OwotICAgIGNvbnN0IGNoYXIqIHN5c3RlbVNlYXJjaFBhdGhbOF07Ci0gICAgY29uc3QgY2hhciogbG9jYWxTZWFyY2hQYXRoWzhdOwotICAgIGNvbnN0IGNoYXIqIGlucHV0RmlsZU5hbWU7Ci0gICAgbGFuZ3VhZ2VfdCBuYXRpdmVMYW5ndWFnZTsKLSAgICBjb25zdCBjaGFyKiBvdXRwdXRIOwotICAgIGNvbnN0IGNoYXIqIG91dHB1dENQUDsKLSAgICBjb25zdCBjaGFyKiBvdXRwdXRKYXZhOwotfTsKLQotYm9vbAotbWF0Y2hfYXJyYXlzKGNvbnN0IGNoYXIqIGNvbnN0KmV4cGVjdGVkLCBjb25zdCB2ZWN0b3I8c3RyaW5nPiAmZ290KQotewotICAgIGludCBjb3VudCA9IDA7Ci0gICAgd2hpbGUgKGV4cGVjdGVkW2NvdW50XSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotICAgIGlmIChnb3Quc2l6ZSgpICE9IGNvdW50KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaT0wOyBpPGNvdW50OyBpKyspIHsKLSAgICAgICAgaWYgKGdvdFtpXSAhPSBleHBlY3RlZFtpXSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkCi1wcmludF9hcnJheShjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IGNoYXIqIGNvbnN0KmV4cGVjdGVkKQotewotICAgIHdoaWxlICgqZXhwZWN0ZWQpIHsKLSAgICAgICAgY291dCA8PCBwcmVmaXggPDwgKmV4cGVjdGVkIDw8IGVuZGw7Ci0gICAgICAgIGV4cGVjdGVkKys7Ci0gICAgfQotfQotCi12b2lkCi1wcmludF9hcnJheShjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IHZlY3RvcjxzdHJpbmc+ICZnb3QpCi17Ci0gICAgc2l6ZV90IGNvdW50ID0gZ290LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8Y291bnQ7IGkrKykgewotICAgICAgICBjb3V0IDw8IHByZWZpeCA8PCBnb3RbaV0gPDwgZW5kbDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQKLXRlc3QoY29uc3QgQW5zd2VyJiBhbnN3ZXIpCi17Ci0gICAgaW50IGFyZ2MgPSAwOwotICAgIHdoaWxlIChhbnN3ZXIuYXJndlthcmdjXSkgewotICAgICAgICBhcmdjKys7Ci0gICAgfQotCi0gICAgaW50IGVyciA9IDA7Ci0KLSAgICBPcHRpb25zIG9wdGlvbnM7Ci0gICAgaW50IHJlc3VsdCA9IHBhcnNlX29wdGlvbnMoYXJnYywgYW5zd2VyLmFyZ3YsICZvcHRpb25zKTsKLQotICAgIC8vIHJlc3VsdAotICAgIGlmICgoKGJvb2wpcmVzdWx0KSAhPSAoKGJvb2wpYW5zd2VyLnJlc3VsdCkpIHsKLSAgICAgICAgY291dCA8PCAibWlzbWF0Y2g6IHJlc3VsdDogZ290ICIgPDwgcmVzdWx0IDw8ICIgZXhwZWN0ZWQgIiA8PAotICAgICAgICAgICAgYW5zd2VyLnJlc3VsdCA8PCBlbmRsOwotICAgICAgICBlcnIgPSAxOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgIT0gMCkgewotICAgICAgICAvLyBpZiBpdCBmYWlsZWQsIGV2ZXJ5dGhpbmcgaXMgaW52YWxpZAotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIC8vIHN5c3RlbVNlYXJjaFBhdGgKLSAgICBpZiAoIW1hdGNoX2FycmF5cyhhbnN3ZXIuc3lzdGVtU2VhcmNoUGF0aCwgb3B0aW9ucy5zeXN0ZW1TZWFyY2hQYXRoKSkgewotICAgICAgICBjb3V0IDw8ICJtaXNtYXRjaDogc3lzdGVtU2VhcmNoUGF0aDogZ290IiA8PCBlbmRsOwotICAgICAgICBwcmludF9hcnJheSgiICAgICAgICAiLCBvcHRpb25zLnN5c3RlbVNlYXJjaFBhdGgpOwotICAgICAgICBjb3V0IDw8ICIgICAgZXhwZWN0ZWQiIDw8IGVuZGw7Ci0gICAgICAgIHByaW50X2FycmF5KCIgICAgICAgICIsIGFuc3dlci5zeXN0ZW1TZWFyY2hQYXRoKTsKLSAgICAgICAgZXJyID0gMTsKLSAgICB9Ci0KLSAgICAvLyBsb2NhbFNlYXJjaFBhdGgKLSAgICBpZiAoIW1hdGNoX2FycmF5cyhhbnN3ZXIubG9jYWxTZWFyY2hQYXRoLCBvcHRpb25zLmxvY2FsU2VhcmNoUGF0aCkpIHsKLSAgICAgICAgY291dCA8PCAibWlzbWF0Y2g6IGxvY2FsU2VhcmNoUGF0aDogZ290IiA8PCBlbmRsOwotICAgICAgICBwcmludF9hcnJheSgiICAgICAgICAiLCBvcHRpb25zLmxvY2FsU2VhcmNoUGF0aCk7Ci0gICAgICAgIGNvdXQgPDwgIiAgICBleHBlY3RlZCIgPDwgZW5kbDsKLSAgICAgICAgcHJpbnRfYXJyYXkoIiAgICAgICAgIiwgYW5zd2VyLmxvY2FsU2VhcmNoUGF0aCk7Ci0gICAgICAgIGVyciA9IDE7Ci0gICAgfQotCi0gICAgLy8gaW5wdXRGaWxlTmFtZQotICAgIGlmIChhbnN3ZXIuaW5wdXRGaWxlTmFtZSAhPSBvcHRpb25zLmlucHV0RmlsZU5hbWUpIHsKLSAgICAgICAgY291dCA8PCAibWlzbWF0Y2g6IGlucHV0RmlsZU5hbWU6IGdvdCAiIDw8IG9wdGlvbnMuaW5wdXRGaWxlTmFtZQotICAgICAgICAgICAgPDwgIiBleHBlY3RlZCAiIDw8IGFuc3dlci5pbnB1dEZpbGVOYW1lIDw8IGVuZGw7Ci0gICAgICAgIGVyciA9IDE7Ci0gICAgfQotCi0gICAgLy8gbmF0aXZlTGFuZ3VhZ2UKLSAgICBpZiAoYW5zd2VyLm5hdGl2ZUxhbmd1YWdlICE9IG9wdGlvbnMubmF0aXZlTGFuZ3VhZ2UpIHsKLSAgICAgICAgY291dCA8PCAibWlzbWF0Y2g6IG5hdGl2ZUxhbmd1YWdlOiBnb3QgIiA8PCBvcHRpb25zLm5hdGl2ZUxhbmd1YWdlCi0gICAgICAgICAgICA8PCAiIGV4cGVjdGVkICIgPDwgYW5zd2VyLm5hdGl2ZUxhbmd1YWdlIDw8IGVuZGw7Ci0gICAgICAgIGVyciA9IDE7Ci0gICAgfQotCi0gICAgLy8gb3V0cHV0SAotICAgIGlmIChhbnN3ZXIub3V0cHV0SCAhPSBvcHRpb25zLm91dHB1dEgpIHsKLSAgICAgICAgY291dCA8PCAibWlzbWF0Y2g6IG91dHB1dEg6IGdvdCAiIDw8IG9wdGlvbnMub3V0cHV0SAotICAgICAgICAgICAgPDwgIiBleHBlY3RlZCAiIDw8IGFuc3dlci5vdXRwdXRIIDw8IGVuZGw7Ci0gICAgICAgIGVyciA9IDE7Ci0gICAgfQotCi0gICAgLy8gb3V0cHV0Q1BQCi0gICAgaWYgKGFuc3dlci5vdXRwdXRDUFAgIT0gb3B0aW9ucy5vdXRwdXRDUFApIHsKLSAgICAgICAgY291dCA8PCAibWlzbWF0Y2g6IG91dHB1dENQUDogZ290ICIgPDwgb3B0aW9ucy5vdXRwdXRDUFAKLSAgICAgICAgICAgIDw8ICIgZXhwZWN0ZWQgIiA8PCBhbnN3ZXIub3V0cHV0Q1BQIDw8IGVuZGw7Ci0gICAgICAgIGVyciA9IDE7Ci0gICAgfQotCi0gICAgLy8gb3V0cHV0SmF2YQotICAgIGlmIChhbnN3ZXIub3V0cHV0SmF2YSAhPSBvcHRpb25zLm91dHB1dEphdmEpIHsKLSAgICAgICAgY291dCA8PCAibWlzbWF0Y2g6IG91dHB1dEphdmE6IGdvdCAiIDw8IG9wdGlvbnMub3V0cHV0SmF2YQotICAgICAgICAgICAgPDwgIiBleHBlY3RlZCAiIDw8IGFuc3dlci5vdXRwdXRKYXZhIDw8IGVuZGw7Ci0gICAgICAgIGVyciA9IDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotY29uc3QgQW5zd2VyIGdfdGVzdHNbXSA9IHsKLQotICAgIHsKLSAgICAgICAgLyogYXJndiAqLyAgICAgICAgICAgICAgeyAidGVzdCIsICItaS9tb29mIiwgIi1JL2JsYWgiLCAiLUlibGVoIiwgIi1pbW9vIiwgImlucHV0RmlsZU5hbWUuYWlkbF9jcHAiLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIHJlc3VsdCAqLyAgICAgICAgICAgIDAsCi0gICAgICAgIC8qIHN5c3RlbVNlYXJjaFBhdGggKi8gIHsgIi9ibGFoIiwgImJsZWgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIGxvY2FsU2VhcmNoUGF0aCAqLyAgIHsgIi9tb29mIiwgIm1vbyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogaW5wdXRGaWxlTmFtZSAqLyAgICAgImlucHV0RmlsZU5hbWUuYWlkbF9jcHAiLAotICAgICAgICAvKiBuYXRpdmVMYW5ndWFnZSAqLyAgICBDUFAsCi0gICAgICAgIC8qIG91dHB1dEggKi8gICAgICAgICAgICIiLAotICAgICAgICAvKiBvdXRwdXRDUFAgKi8gICAgICAgICAiIiwKLSAgICAgICAgLyogb3V0cHV0SmF2YSAqLyAgICAgICAgIiIKLSAgICB9LAotCi0gICAgewotICAgICAgICAvKiBhcmd2ICovICAgICAgICAgICAgICB7ICJ0ZXN0IiwgImlucHV0RmlsZU5hbWUuYWlkbF9jcHAiLCAiLW9oIiwgIm91dHB1dEgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIHJlc3VsdCAqLyAgICAgICAgICAgIDAsCi0gICAgICAgIC8qIHN5c3RlbVNlYXJjaFBhdGggKi8gIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiBsb2NhbFNlYXJjaFBhdGggKi8gICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogaW5wdXRGaWxlTmFtZSAqLyAgICAgImlucHV0RmlsZU5hbWUuYWlkbF9jcHAiLAotICAgICAgICAvKiBuYXRpdmVMYW5ndWFnZSAqLyAgICBDUFAsCi0gICAgICAgIC8qIG91dHB1dEggKi8gICAgICAgICAgICJvdXRwdXRIIiwKLSAgICAgICAgLyogb3V0cHV0Q1BQICovICAgICAgICAgIiIsCi0gICAgICAgIC8qIG91dHB1dEphdmEgKi8gICAgICAgICIiCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAgLyogYXJndiAqLyAgICAgICAgICAgICAgeyAidGVzdCIsICJpbnB1dEZpbGVOYW1lLmFpZGxfY3BwIiwgIi1vY3BwIiwgIm91dHB1dENQUCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogcmVzdWx0ICovICAgICAgICAgICAgMCwKLSAgICAgICAgLyogc3lzdGVtU2VhcmNoUGF0aCAqLyAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIGxvY2FsU2VhcmNoUGF0aCAqLyAgIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiBpbnB1dEZpbGVOYW1lICovICAgICAiaW5wdXRGaWxlTmFtZS5haWRsX2NwcCIsCi0gICAgICAgIC8qIG5hdGl2ZUxhbmd1YWdlICovICAgIENQUCwKLSAgICAgICAgLyogb3V0cHV0SCAqLyAgICAgICAgICAgIiIsCi0gICAgICAgIC8qIG91dHB1dENQUCAqLyAgICAgICAgICJvdXRwdXRDUFAiLAotICAgICAgICAvKiBvdXRwdXRKYXZhICovICAgICAgICAiIgotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgIC8qIGFyZ3YgKi8gICAgICAgICAgICAgIHsgInRlc3QiLCAiaW5wdXRGaWxlTmFtZS5haWRsX2NwcCIsICItb2phdmEiLCAib3V0cHV0SmF2YSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogcmVzdWx0ICovICAgICAgICAgICAgMCwKLSAgICAgICAgLyogc3lzdGVtU2VhcmNoUGF0aCAqLyAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIGxvY2FsU2VhcmNoUGF0aCAqLyAgIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiBpbnB1dEZpbGVOYW1lICovICAgICAiaW5wdXRGaWxlTmFtZS5haWRsX2NwcCIsCi0gICAgICAgIC8qIG5hdGl2ZUxhbmd1YWdlICovICAgIENQUCwKLSAgICAgICAgLyogb3V0cHV0SCAqLyAgICAgICAgICAgIiIsCi0gICAgICAgIC8qIG91dHB1dENQUCAqLyAgICAgICAgICIiLAotICAgICAgICAvKiBvdXRwdXRKYXZhICovICAgICAgICAib3V0cHV0SmF2YSIKLSAgICB9LAotCi0gICAgewotICAgICAgICAvKiBhcmd2ICovICAgICAgICAgICAgICB7ICJ0ZXN0IiwgImlucHV0RmlsZU5hbWUuYWlkbF9jcHAiLCAiLW9oIiwgIm91dHB1dEgiLCAiLW9jcHAiLCAib3V0cHV0Q1BQIiwgIi1vamF2YSIsICJvdXRwdXRKYXZhIiB9LAotICAgICAgICAvKiByZXN1bHQgKi8gICAgICAgICAgICAwLAotICAgICAgICAvKiBzeXN0ZW1TZWFyY2hQYXRoICovICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogbG9jYWxTZWFyY2hQYXRoICovICAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIGlucHV0RmlsZU5hbWUgKi8gICAgICJpbnB1dEZpbGVOYW1lLmFpZGxfY3BwIiwKLSAgICAgICAgLyogbmF0aXZlTGFuZ3VhZ2UgKi8gICAgQ1BQLAotICAgICAgICAvKiBvdXRwdXRIICovICAgICAgICAgICAib3V0cHV0SCIsCi0gICAgICAgIC8qIG91dHB1dENQUCAqLyAgICAgICAgICJvdXRwdXRDUFAiLAotICAgICAgICAvKiBvdXRwdXRKYXZhICovICAgICAgICAib3V0cHV0SmF2YSIKLSAgICB9LAotCi0gICAgewotICAgICAgICAvKiBhcmd2ICovICAgICAgICAgICAgICB7ICJ0ZXN0IiwgImlucHV0RmlsZU5hbWUuYWlkbF9jcHAiLCAiLW9oIiwgIm91dHB1dEgiLCAiLW9oIiwgIm91dHB1dEgxIiwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiByZXN1bHQgKi8gICAgICAgICAgICAxLAotICAgICAgICAvKiBzeXN0ZW1TZWFyY2hQYXRoICovICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogbG9jYWxTZWFyY2hQYXRoICovICAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIGlucHV0RmlsZU5hbWUgKi8gICAgICIiLAotICAgICAgICAvKiBuYXRpdmVMYW5ndWFnZSAqLyAgICBDUFAsCi0gICAgICAgIC8qIG91dHB1dEggKi8gICAgICAgICAgICIiLAotICAgICAgICAvKiBvdXRwdXRDUFAgKi8gICAgICAgICAiIiwKLSAgICAgICAgLyogb3V0cHV0SmF2YSAqLyAgICAgICAgIiIKLSAgICB9LAotCi0gICAgewotICAgICAgICAvKiBhcmd2ICovICAgICAgICAgICAgICB7ICJ0ZXN0IiwgImlucHV0RmlsZU5hbWUuYWlkbF9jcHAiLCAiLW9jcHAiLCAib3V0cHV0Q1BQIiwgIi1vY3BwIiwgIm91dHB1dENQUDEiLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIHJlc3VsdCAqLyAgICAgICAgICAgIDEsCi0gICAgICAgIC8qIHN5c3RlbVNlYXJjaFBhdGggKi8gIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiBsb2NhbFNlYXJjaFBhdGggKi8gICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogaW5wdXRGaWxlTmFtZSAqLyAgICAgIiIsCi0gICAgICAgIC8qIG5hdGl2ZUxhbmd1YWdlICovICAgIENQUCwKLSAgICAgICAgLyogb3V0cHV0SCAqLyAgICAgICAgICAgIiIsCi0gICAgICAgIC8qIG91dHB1dENQUCAqLyAgICAgICAgICIiLAotICAgICAgICAvKiBvdXRwdXRKYXZhICovICAgICAgICAiIgotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgIC8qIGFyZ3YgKi8gICAgICAgICAgICAgIHsgInRlc3QiLCAiaW5wdXRGaWxlTmFtZS5haWRsX2NwcCIsICItb2phdmEiLCAib3V0cHV0SmF2YSIsICItb2phdmEiLCAib3V0cHV0SmF2YTEiLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIHJlc3VsdCAqLyAgICAgICAgICAgIDEsCi0gICAgICAgIC8qIHN5c3RlbVNlYXJjaFBhdGggKi8gIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiBsb2NhbFNlYXJjaFBhdGggKi8gICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogaW5wdXRGaWxlTmFtZSAqLyAgICAgIiIsCi0gICAgICAgIC8qIG5hdGl2ZUxhbmd1YWdlICovICAgIENQUCwKLSAgICAgICAgLyogb3V0cHV0SCAqLyAgICAgICAgICAgIiIsCi0gICAgICAgIC8qIG91dHB1dENQUCAqLyAgICAgICAgICIiLAotICAgICAgICAvKiBvdXRwdXRKYXZhICovICAgICAgICAiIgotICAgIH0sCi0KLX07Ci0KLWludAotbWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCi17Ci0gICAgY29uc3QgaW50IGNvdW50ID0gc2l6ZW9mKGdfdGVzdHMpL3NpemVvZihnX3Rlc3RzWzBdKTsKLSAgICBpbnQgbWF0Y2hlc1tjb3VudF07Ci0KLSAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGludCBpPTA7IGk8Y291bnQ7IGkrKykgewotICAgICAgICBpZiAoVkVSQk9TRSkgewotICAgICAgICAgICAgY291dCA8PCBlbmRsOwotICAgICAgICAgICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA8PCBlbmRsOwotICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3QqIHAgPSBnX3Rlc3RzW2ldLmFyZ3Y7Ci0gICAgICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAgICAgICBjb3V0IDw8ICIgIiA8PCAqcDsKLSAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb3V0IDw8IGVuZGw7Ci0gICAgICAgICAgICBjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7Ci0gICAgICAgIH0KLSAgICAgICAgbWF0Y2hlc1tpXSA9IHRlc3QoZ190ZXN0c1tpXSk7Ci0gICAgICAgIGlmIChWRVJCT1NFKSB7Ci0gICAgICAgICAgICBpZiAoMCA9PSBtYXRjaGVzW2ldKSB7Ci0gICAgICAgICAgICAgICAgY291dCA8PCAicGFzc2VkIiA8PCBlbmRsOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb3V0IDw8ICJmYWlsZWQiIDw8IGVuZGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQgfD0gbWF0Y2hlc1tpXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvdXQgPDwgZW5kbDsKLSAgICBjb3V0IDw8ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIDw8IGVuZGw7Ci0gICAgY291dCA8PCAib3B0aW9uc190ZXN0IHN1bW1hcnkiIDw8IGVuZGw7Ci0gICAgY291dCA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA8PCBlbmRsOwotCi0gICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgY291dCA8PCAicGFzc2VkIiA8PCBlbmRsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvdXQgPDwgImZhaWxlZCB0aGUgZm9sbG93aW5nIHRlc3RzOiIgPDwgZW5kbDsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGlmIChtYXRjaGVzW2ldKSB7Ci0gICAgICAgICAgICAgICAgY291dCA8PCAiICAgIjsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCogcCA9IGdfdGVzdHNbaV0uYXJndjsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAgICAgICAgICAgY291dCA8PCAiICIgPDwgKnA7Ci0gICAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY291dCA8PCBlbmRsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9zZWFyY2hfcGF0aC5jcHAgYi90b29scy9haWRsL3NlYXJjaF9wYXRoLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZiNmNiMi4uMDAwMDAwMAotLS0gYS90b29scy9haWRsL3NlYXJjaF9wYXRoLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlICJzZWFyY2hfcGF0aC5oIgotI2luY2x1ZGUgIm9wdGlvbnMuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmZGVmIEhBVkVfTVNfQ19SVU5USU1FCi0jaW5jbHVkZSA8aW8uaD4KLSNlbmRpZgotCi1zdGF0aWMgdmVjdG9yPHN0cmluZz4gZ19pbXBvcnRQYXRoczsKLQotdm9pZAotc2V0X2ltcG9ydF9wYXRocyhjb25zdCB2ZWN0b3I8c3RyaW5nPiYgaW1wb3J0UGF0aHMpCi17Ci0gICAgZ19pbXBvcnRQYXRocyA9IGltcG9ydFBhdGhzOwotfQotCi1jaGFyKgotZmluZF9pbXBvcnRfZmlsZShjb25zdCBjaGFyKiBnaXZlbikKLXsKLSAgICBzdHJpbmcgZXhwZWN0ZWQgPSBnaXZlbjsKLQotICAgIGludCBOID0gZXhwZWN0ZWQubGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBjaGFyIGMgPSBleHBlY3RlZFtpXTsKLSAgICAgICAgaWYgKGMgPT0gJy4nKSB7Ci0gICAgICAgICAgICBleHBlY3RlZFtpXSA9IE9TX1BBVEhfU0VQQVJBVE9SOwotICAgICAgICB9Ci0gICAgfQotICAgIGV4cGVjdGVkICs9ICIuYWlkbCI7Ci0KLSAgICB2ZWN0b3I8c3RyaW5nPiYgcGF0aHMgPSBnX2ltcG9ydFBhdGhzOwotICAgIGZvciAodmVjdG9yPHN0cmluZz46Oml0ZXJhdG9yIGl0PXBhdGhzLmJlZ2luKCk7IGl0IT1wYXRocy5lbmQoKTsgaXQrKykgewotICAgICAgICBzdHJpbmcgZiA9ICppdDsKLSAgICAgICAgaWYgKGYuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIGYgPSAiLiI7Ci0gICAgICAgICAgICBmICs9IE9TX1BBVEhfU0VQQVJBVE9SOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGZbZi5zaXplKCktMV0gIT0gT1NfUEFUSF9TRVBBUkFUT1IpIHsKLSAgICAgICAgICAgIGYgKz0gT1NfUEFUSF9TRVBBUkFUT1I7Ci0gICAgICAgIH0KLSAgICAgICAgZi5hcHBlbmQoZXhwZWN0ZWQpOwotCi0jaWZkZWYgSEFWRV9NU19DX1JVTlRJTUUKLSAgICAgICAgLyogY2hlY2sgdGhhdCB0aGUgZmlsZSBleGlzdHMgYW5kIGlzIG5vdCB3cml0ZS1vbmx5ICovCi0gICAgICAgIGlmICgwID09IF9hY2Nlc3MoZi5jX3N0cigpLCAwKSAmJiAgLyogbW9kZSAwPWV4aXN0ICovCi0gICAgICAgICAgICAwID09IF9hY2Nlc3MoZi5jX3N0cigpLCA0KSApIHsgLyogbW9kZSA0PXJlYWRhYmxlICovCi0jZWxzZQotICAgICAgICBpZiAoMCA9PSBhY2Nlc3MoZi5jX3N0cigpLCBSX09LKSkgewotI2VuZGlmICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBzdHJkdXAoZi5jX3N0cigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQotCmRpZmYgLS1naXQgYS90b29scy9haWRsL3NlYXJjaF9wYXRoLmggYi90b29scy9haWRsL3NlYXJjaF9wYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZjk0YjEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9zZWFyY2hfcGF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotI2lmbmRlZiBERVZJQ0VfVE9PTFNfQUlETF9TRUFSQ0hfUEFUSF9ICi0jZGVmaW5lIERFVklDRV9UT09MU19BSURMX1NFQVJDSF9QQVRIX0gKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZiBfX2NwbHVzcGx1cwotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxzdHJpbmc+Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotLy8gcmV0dXJucyBhIEZJTEUqIGFuZCB0aGUgY2hhciogZm9yIHRoZSBmaWxlIHRoYXQgaXQgZm91bmQKLS8vIGdpdmVuIGlzIHRoZSBjbGFzcyBuYW1lIHdlJ3JlIGxvb2tpbmcgZm9yCi1jaGFyKiBmaW5kX2ltcG9ydF9maWxlKGNvbnN0IGNoYXIqIGdpdmVuKTsKLQotI2lmIF9fY3BsdXNwbHVzCi19OyAvLyBleHRlcm4gIkMiCi12b2lkIHNldF9pbXBvcnRfcGF0aHMoY29uc3QgdmVjdG9yPHN0cmluZz4mIGltcG9ydFBhdGhzKTsKLSNlbmRpZgotCi0jZW5kaWYgLy8gREVWSUNFX1RPT0xTX0FJRExfU0VBUkNIX1BBVEhfSAotCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvLmdpdGlnbm9yZSBiL3Rvb2xzL2xheW91dGxpYi8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWU4MmQ3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYmluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL0FuZHJvaWQubWsgYi90b29scy9sYXlvdXRsaWIvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0OTdhNS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi1MT0NBTF9QQVRIIDo9ICQobXktZGlyKQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLSMKLSMgRGVmaW5lIHJ1bGVzIHRvIGJ1aWxkIHRlbXBfbGF5b3V0bGliLmphciwgd2hpY2ggY29udGFpbnMgYSBzdWJzZXQgb2YKLSMgdGhlIGNsYXNzZXMgaW4gZnJhbWV3b3JrLmphci4gIFRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wgaXMgdXNlZCB0bwotIyB0cmFuc2Zvcm0gdGhlIGZyYW1ld29yayBqYXIgaW50byB0aGUgdGVtcF9sYXlvdXRsaWIgamFyLgotIwotCi0jIFdlIG5lZWQgdG8gcHJvY2VzcyB0aGUgZnJhbWV3b3JrIGNsYXNzZXMuamFyIGZpbGUsIGJ1dCB3ZSBjYW4ndAotIyBkZXBlbmQgZGlyZWN0bHkgb24gaXQgKHByaXZhdGUgdmFycyB3b24ndCBiZSBpbmhlcml0ZWQgY29ycmVjdGx5KS4KLSMgU28sIHdlIGRlcGVuZCBvbiBmcmFtZXdvcmsncyBCVUlMVCBmaWxlLgotYnVpbHRfZnJhbWV3b3JrX2RlcCA6PSAkKGNhbGwgamF2YS1saWItZGVwcyxmcmFtZXdvcmstYmFzZSkKLWJ1aWx0X2ZyYW1ld29ya19jbGFzc2VzIDo9ICQoY2FsbCBqYXZhLWxpYi1maWxlcyxmcmFtZXdvcmstYmFzZSkKLQotYnVpbHRfY29yZV9kZXAgOj0gJChjYWxsIGphdmEtbGliLWRlcHMsY29yZSkKLWJ1aWx0X2NvcmVfY2xhc3NlcyA6PSAkKGNhbGwgamF2YS1saWItZmlsZXMsY29yZSkKLQotYnVpbHRfZXh0X2RlcCA6PSAkKGNhbGwgamF2YS1saWItZGVwcyxleHQpCi1idWlsdF9leHRfY2xhc3NlcyA6PSAkKGNhbGwgamF2YS1saWItZmlsZXMsZXh0KQotCi1idWlsdF9sYXlvdXRsaWJfY3JlYXRlX2phciA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLCBcCi0JCQlKQVZBX0xJQlJBUklFUyxsYXlvdXRsaWJfY3JlYXRlLEhPU1QpL2phdmFsaWIuamFyCi0KLSMgVGhpcyBpcyBtb3N0bHkgYSBjb3B5IG9mIGNvbmZpZy9ob3N0X2phdmFfbGlicmFyeS5tawotTE9DQUxfTU9EVUxFIDo9IHRlbXBfbGF5b3V0bGliCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gSkFWQV9MSUJSQVJJRVMKLUxPQ0FMX01PRFVMRV9TVUZGSVggOj0gJChDT01NT05fSkFWQV9QQUNLQUdFX1NVRkZJWCkKLUxPQ0FMX0lTX0hPU1RfTU9EVUxFIDo9IHRydWUKLUxPQ0FMX0JVSUxUX01PRFVMRV9TVEVNIDo9IGphdmFsaWIuamFyCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChidWlsdF9jb3JlX2RlcCkgXAotICAgICAgICAgICAgICAgICAgICAgICAkKGJ1aWx0X2ZyYW1ld29ya19kZXApIFwKLSAgICAgICAgICAgICAgICAgICAgICAgJChidWlsdF9leHRfZGVwKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICQoYnVpbHRfbGF5b3V0bGliX2NyZWF0ZV9qYXIpCi0JJChoaWRlKSBlY2hvICJob3N0IGxheW91dGxpYl9jcmVhdGU6ICRAIgotCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApCi0JJChoaWRlKSBybSAtZiAkQAotCSQoaGlkZSkgbHMgLWwgJChidWlsdF9mcmFtZXdvcmtfY2xhc3NlcykKLQkkKGhpZGUpIGphdmEgLWphciAkKGJ1aWx0X2xheW91dGxpYl9jcmVhdGVfamFyKSBcCi0JICAgICAgICAgICAgICRAIFwKLQkgICAgICAgICAgICAgJChidWlsdF9jb3JlX2NsYXNzZXMpIFwKLQkgICAgICAgICAgICAgJChidWlsdF9mcmFtZXdvcmtfY2xhc3NlcykgXAotCSAgICAgICAgICAgICAkKGJ1aWx0X2V4dF9jbGFzc2VzKQotCSQoaGlkZSkgbHMgLWwgJChidWlsdF9mcmFtZXdvcmtfY2xhc3NlcykKLQotCi0jCi0jIEluY2x1ZGUgdGhlIHN1YmRpciBtYWtlZmlsZXMuCi0jCi1pbmNsdWRlICQoY2FsbCBhbGwtbWFrZWZpbGVzLXVuZGVyLCQoTE9DQUxfUEFUSCkpCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvUkVBRE1FIGIvdG9vbHMvbGF5b3V0bGliL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZlYTliZC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1MYXlvdXRsaWIgaXMgYSBjdXN0b20gdmVyc2lvbiBvZiB0aGUgYW5kcm9pZCBWaWV3IGZyYW1ld29yayBkZXNpZ25lZCB0byBydW4gaW5zaWRlIEVjbGlwc2UuCi1UaGUgZ29hbCBvZiB0aGUgbGlicmFyeSBpcyB0byBwcm92aWRlIGxheW91dCByZW5kZXJpbmcgaW4gRWNsaXBzZSB0aGF0IGFyZSB2ZXJ5IHZlcnkgY2xvc2UgdG8gdGhlaXIgcmVuZGVyaW5nIG9uIGRldmljZXMuCi0KLU5vbmUgb2YgdGhlIGNvbS5hbmRyb2lkLiogb3IgYW5kcm9pZC4qIGNsYXNzZXMgaW4gbGF5b3V0bGliIHJ1biBvbiBkZXZpY2VzLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvLmNsYXNzcGF0aCBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU0Mjc0ZGEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGV4Y2x1ZGluZz0ib3JnL2t4bWwyL2lvLyIga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0idmFyIiBwYXRoPSJBTkRST0lEX1BMQVRfU1JDL3ByZWJ1aWx0cy9taXNjL2NvbW1vbi9sYXlvdXRsaWJfYXBpL2xheW91dGxpYl9hcGktcHJlYnVpbHQuamFyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InZhciIgcGF0aD0iQU5EUk9JRF9QTEFUX1NSQy9wcmVidWlsdHMvbWlzYy9jb21tb24va3htbDIva3htbDItMi4zLjAuamFyIiBzb3VyY2VwYXRoPSIvQU5EUk9JRF9QTEFUX1NSQy9kYWx2aWsvbGliY29yZS94bWwvc3JjL21haW4vamF2YSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJ2YXIiIHBhdGg9IkFORFJPSURfUExBVF9TUkMvb3V0L2hvc3QvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy90ZW1wX2xheW91dGxpYl9pbnRlcm1lZGlhdGVzL2phdmFsaWIuamFyIiBzb3VyY2VwYXRoPSIvQU5EUk9JRF9QTEFUX1NSQy9mcmFtZXdvcmtzL2Jhc2UiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0idmFyIiBwYXRoPSJBTkRST0lEX1BMQVRfU1JDL3ByZWJ1aWx0cy9taXNjL2NvbW1vbi9uaW5lcGF0Y2gvbmluZXBhdGNoLXByZWJ1aWx0LmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJ2YXIiIHBhdGg9IkFORFJPSURfUExBVF9TUkMvcHJlYnVpbHRzL21pc2MvY29tbW9uL3Rvb2xzLWNvbW1vbi90b29scy1jb21tb24tcHJlYnVpbHQuamFyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InZhciIgcGF0aD0iQU5EUk9JRF9QTEFUX1NSQy9wcmVidWlsdHMvbWlzYy9jb21tb24vaWN1NGovaWN1NGouamFyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvLnByb2plY3QgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzZlNzFiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5sYXlvdXRsaWJfYnJpZGdlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvLnNldHRpbmdzL1JFQURNRS50eHQgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlLy5zZXR0aW5ncy9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTIwYjIwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvLnNldHRpbmdzL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLUNvcHkgdGhpcyBpbiBlY2xpcHNlIHByb2plY3QgYXMgYSAuc2V0dGluZ3MgZm9sZGVyIGF0IHRoZSByb290LgotVGhpcyBlbnN1cmUgcHJvcGVyIGNvbXBpbGF0aW9uIGNvbXBsaWFuY2UgYW5kIHdhcm5pbmcvZXJyb3IgbGV2ZWxzLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzODFhMGUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5ub25udWxsPWNvbS5hbmRyb2lkLmFubm90YXRpb25zLk5vbk51bGwKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubm9ubnVsbGJ5ZGVmYXVsdD1jb20uYW5kcm9pZC5hbm5vdGF0aW9ucy5Ob25OdWxsQnlEZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm5vbm51bGxpc2RlZmF1bHQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubnVsbGFibGU9Y29tLmFuZHJvaWQuYW5ub3RhdGlvbnMuTnVsbGFibGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubnVsbGFuYWx5c2lzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS42Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVhZENvZGU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5leHBsaWNpdGx5Q2xvc2VkQXV0b0Nsb3NlYWJsZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNsdWRlTnVsbEluZm9Gcm9tQXNzZXJ0cz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSGFzaENvZGVNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb25Gb3JJbnRlcmZhY2VNZXRob2RJbXBsZW1lbnRhdGlvbj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1N5bmNocm9uaXplZE9uSW5oZXJpdGVkTWV0aG9kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFNwZWNJbnN1ZmZpY2llbnRJbmZvPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFNwZWNWaW9sYXRpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFNwZWNWaW9sYXRpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsbHlVbmNsb3NlZENsb3NlYWJsZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQW5ub3RhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3BlY2lmaWNhdGlvbk9mVHlwZUFyZ3VtZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZXBvcnRNZXRob2RDYW5CZVBvdGVudGlhbGx5U3RhdGljPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZXBvcnRNZXRob2RDYW5CZVN0YXRpYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NPcHRpb25hbEVycm9ycz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5hdm9pZGFibGVHZW5lcmljVHlwZVByb2JsZW1zPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNsb3NlZENsb3NlYWJsZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkV4ZW1wdEV4Y2VwdGlvbkFuZFRocm93YWJsZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uSW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRPYmplY3RBbGxvY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS42CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL0FuZHJvaWQubWsgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZDQ4ZmMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLUxPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLHNyYykKLUxPQ0FMX0pBVkFfUkVTT1VSQ0VfRElSUyA6PSByZXNvdXJjZXMKLQotCi1MT0NBTF9KQVZBX0xJQlJBUklFUyA6PSBcCi0Ja3htbDItMi4zLjAgXAotCWljdTRqIFwKLQlsYXlvdXRsaWJfYXBpLXByZWJ1aWx0IFwKLQl0b29scy1jb21tb24tcHJlYnVpbHQKLQotTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTIDo9IFwKLQl0ZW1wX2xheW91dGxpYiBcCi0JbmluZXBhdGNoLXByZWJ1aWx0Ci0KLUxPQ0FMX01PRFVMRSA6PSBsYXlvdXRsaWIKLQotaW5jbHVkZSAkKEJVSUxEX0hPU1RfSkFWQV9MSUJSQVJZKQotCi0jIEJ1aWxkIGFsbCBzdWItZGlyZWN0b3JpZXMKLWluY2x1ZGUgJChjYWxsIGFsbC1tYWtlZmlsZXMtdW5kZXIsJChMT0NBTF9QQVRIKSkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9hY3Rpb25fYmFyLnhtbCBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvYWN0aW9uX2Jhci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZGM1YWYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9hY3Rpb25fYmFyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxtZXJnZSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiPgotICAgIDxpbmNsdWRlIGxheW91dD0iQGFuZHJvaWQ6bGF5b3V0L2FjdGlvbl9iYXJfaG9tZSIgLz4KLSAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgotPC9tZXJnZT4KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9pY19zeXNiYXJfYmFjay5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvaWNfc3lzYmFyX2JhY2sucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGU2YmM4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9pY19zeXNiYXJfYmFjay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvaWNfc3lzYmFyX2hvbWUucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL2ljX3N5c2Jhcl9ob21lLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhlNGY0NS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvaWNfc3lzYmFyX2hvbWUucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL2ljX3N5c2Jhcl9yZWNlbnQucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL2ljX3N5c2Jhcl9yZWNlbnQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjlmMzAwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9pY19zeXNiYXJfcmVjZW50LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9zdGF0X3N5c19iYXR0ZXJ5X2NoYXJnZV9hbmltMTAwLnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9zdGF0X3N5c19iYXR0ZXJ5X2NoYXJnZV9hbmltMTAwLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI5Mzc4ZS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvc3RhdF9zeXNfYmF0dGVyeV9jaGFyZ2VfYW5pbTEwMC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvc3RhdF9zeXNfd2lmaV9zaWduYWxfNF9mdWxseS5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvc3RhdF9zeXNfd2lmaV9zaWduYWxfNF9mdWxseS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMWRhZWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL3N0YXRfc3lzX3dpZmlfc2lnbmFsXzRfZnVsbHkucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL3N0YXR1c19iYXJfYmFja2dyb3VuZC45LnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9zdGF0dXNfYmFyX2JhY2tncm91bmQuOS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YmUyOTguLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL3N0YXR1c19iYXJfYmFja2dyb3VuZC45LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwtaGRwaS9pY19zeXNiYXJfYmFjay5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLWhkcGkvaWNfc3lzYmFyX2JhY2sucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODJlYmZlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwtaGRwaS9pY19zeXNiYXJfYmFjay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLWhkcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLWhkcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3N2I0NzEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9sZHJ0bC1oZHBpL2ljX3N5c2Jhcl9yZWNlbnQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9sZHJ0bC1tZHBpL2ljX3N5c2Jhcl9iYWNrLnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwtbWRwaS9pY19zeXNiYXJfYmFjay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExYjgwNjIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9sZHJ0bC1tZHBpL2ljX3N5c2Jhcl9iYWNrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwtbWRwaS9pY19zeXNiYXJfcmVjZW50LnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwtbWRwaS9pY19zeXNiYXJfcmVjZW50LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNkYmVmZS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLW1kcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLXhoZHBpL2ljX3N5c2Jhcl9iYWNrLnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwteGhkcGkvaWNfc3lzYmFyX2JhY2sucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzNkODY0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwteGhkcGkvaWNfc3lzYmFyX2JhY2sucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9sZHJ0bC14aGRwaS9pY19zeXNiYXJfcmVjZW50LnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwteGhkcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NjVlMmEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9sZHJ0bC14aGRwaS9pY19zeXNiYXJfcmVjZW50LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9pY19zeXNiYXJfYmFjay5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvaWNfc3lzYmFyX2JhY2sucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDBiYzViLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9pY19zeXNiYXJfYmFjay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvaWNfc3lzYmFyX2hvbWUucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL2ljX3N5c2Jhcl9ob21lLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMzMTgzYi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvaWNfc3lzYmFyX2hvbWUucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL2ljX3N5c2Jhcl9yZWNlbnQucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL2ljX3N5c2Jhcl9yZWNlbnQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDdmNjExLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9pY19zeXNiYXJfcmVjZW50LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9zdGF0X3N5c19iYXR0ZXJ5X2NoYXJnZV9hbmltMTAwLnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9zdGF0X3N5c19iYXR0ZXJ5X2NoYXJnZV9hbmltMTAwLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc3M2E3MC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvc3RhdF9zeXNfYmF0dGVyeV9jaGFyZ2VfYW5pbTEwMC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvc3RhdF9zeXNfd2lmaV9zaWduYWxfNF9mdWxseS5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvc3RhdF9zeXNfd2lmaV9zaWduYWxfNF9mdWxseS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMWFjOTEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL3N0YXRfc3lzX3dpZmlfc2lnbmFsXzRfZnVsbHkucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL3N0YXR1c19iYXJfYmFja2dyb3VuZC45LnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9zdGF0dXNfYmFyX2JhY2tncm91bmQuOS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViN2MxYTQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL3N0YXR1c19iYXJfYmFja2dyb3VuZC45LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbmF2aWdhdGlvbl9iYXIueG1sIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9uYXZpZ2F0aW9uX2Jhci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5OWNhMDguLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9uYXZpZ2F0aW9uX2Jhci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPG1lcmdlIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCI+Ci0JPFRleHRWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0JCQlhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KLQk8SW1hZ2VWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiLz4KLQk8SW1hZ2VWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiLz4KLQk8SW1hZ2VWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiLz4KLQk8VGV4dFZpZXcKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0JCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLQkJCWFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIvPgotPC9tZXJnZT4KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvc3RhdHVzX2Jhci54bWwgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3N0YXR1c19iYXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWI0NzRkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvc3RhdHVzX2Jhci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPG1lcmdlIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCI+Ci0JPFRleHRWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0JCQlhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KLQk8SW1hZ2VWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0JCQlhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjFkcCIvPgotCTxJbWFnZVZpZXcKLQkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLQkJCWFuZHJvaWQ6bGF5b3V0X21hcmdpbkxlZnQ9IjNkcCIKLQkJCWFuZHJvaWQ6bGF5b3V0X21hcmdpblJpZ2h0PSI1ZHAiCi0JCQlhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjFkcCIvPgotPC9tZXJnZT4KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvdGl0bGVfYmFyLnhtbCBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvdGl0bGVfYmFyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZkNzhkOS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3RpdGxlX2Jhci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08bWVyZ2UgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KLQk8VGV4dFZpZXcKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0JCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgotPC9tZXJnZT4KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMveGhkcGkvaWNfc3lzYmFyX2JhY2sucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy94aGRwaS9pY19zeXNiYXJfYmFjay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNjBjZDYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy94aGRwaS9pY19zeXNiYXJfYmFjay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3hoZHBpL2ljX3N5c2Jhcl9ob21lLnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMveGhkcGkvaWNfc3lzYmFyX2hvbWUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWJjNWM5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMveGhkcGkvaWNfc3lzYmFyX2hvbWUucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy94aGRwaS9pY19zeXNiYXJfcmVjZW50LnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMveGhkcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MjFkOWMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy94aGRwaS9pY19zeXNiYXJfcmVjZW50LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMveGhkcGkvc3RhdF9zeXNfYmF0dGVyeV9jaGFyZ2VfYW5pbTEwMC5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3hoZHBpL3N0YXRfc3lzX2JhdHRlcnlfY2hhcmdlX2FuaW0xMDAucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2ZkNzE5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMveGhkcGkvc3RhdF9zeXNfYmF0dGVyeV9jaGFyZ2VfYW5pbTEwMC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3hoZHBpL3N0YXRfc3lzX3dpZmlfc2lnbmFsXzRfZnVsbHkucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy94aGRwaS9zdGF0X3N5c193aWZpX3NpZ25hbF80X2Z1bGx5LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1YzYxZC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3hoZHBpL3N0YXRfc3lzX3dpZmlfc2lnbmFsXzRfZnVsbHkucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0aW9uVGhyZWFkLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRpb25UaHJlYWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwZWM5Zi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRpb25UaHJlYWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmFuaW1hdGlvbjsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5JQW5pbWF0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlbmRlclNlc3Npb247Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdDsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0LlN0YXR1czsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUmVuZGVyU2Vzc2lvbkltcGw7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyX0RlbGVnYXRlOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcl9EZWxlZ2F0ZS5JSGFuZGxlckNhbGxiYWNrOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5Qcmlvcml0eVF1ZXVlOwotaW1wb3J0IGphdmEudXRpbC5RdWV1ZTsKLQotLyoqCi0gKiBBYnN0cmFjdCBhbmltYXRpb24gdGhyZWFkLgotICogPHAvPgotICogVGhpcyBkb2VzIG5vdCBhY3R1YWxseSBzdGFydCBhbiBhbmltYXRpb24sIGluc3RlYWQgaXQgZmFrZXMgYSBsb29wZXIgdGhhdCB3aWxsIHBsYXkgd2hhdGV2ZXIKLSAqIGFuaW1hdGlvbiBpcyBzZW5kaW5nIG1lc3NhZ2VzIHRvIGl0cyBvd24ge0BsaW5rIEhhbmRsZXJ9LgotICogPHAvPgotICogQ2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHtAbGluayAjcHJlQW5pbWF0aW9uKCl9IGFuZCB7QGxpbmsgI3Bvc3RBbmltYXRpb24oKX0uCi0gKiA8cC8+Ci0gKiBJZiB7QGxpbmsgI3ByZUFuaW1hdGlvbigpfSBkb2VzIG5vdCBzdGFydCBhbiBhbmltYXRpb24gc29tZWhvdyB0aGVuIHRoZSB0aHJlYWQgZG9lc24ndCBkbwotICogYW55dGhpbmcuCi0gKgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQW5pbWF0aW9uVGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE1lc3NhZ2VCdW5kbGUgaW1wbGVtZW50cyBDb21wYXJhYmxlPE1lc3NhZ2VCdW5kbGU+IHsKLSAgICAgICAgZmluYWwgSGFuZGxlciBtVGFyZ2V0OwotICAgICAgICBmaW5hbCBNZXNzYWdlIG1NZXNzYWdlOwotICAgICAgICBmaW5hbCBsb25nIG1VcHRpbWVNaWxsaXM7Ci0KLSAgICAgICAgTWVzc2FnZUJ1bmRsZShIYW5kbGVyIHRhcmdldCwgTWVzc2FnZSBtZXNzYWdlLCBsb25nIHVwdGltZU1pbGxpcykgewotICAgICAgICAgICAgbVRhcmdldCA9IHRhcmdldDsKLSAgICAgICAgICAgIG1NZXNzYWdlID0gbWVzc2FnZTsKLSAgICAgICAgICAgIG1VcHRpbWVNaWxsaXMgPSB1cHRpbWVNaWxsaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBjb21wYXJlVG8oTWVzc2FnZUJ1bmRsZSBidW5kbGUpIHsKLSAgICAgICAgICAgIGlmIChtVXB0aW1lTWlsbGlzIDwgYnVuZGxlLm1VcHRpbWVNaWxsaXMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgUmVuZGVyU2Vzc2lvbkltcGwgbVNlc3Npb247Ci0KLSAgICBwcml2YXRlIFF1ZXVlPE1lc3NhZ2VCdW5kbGU+IG1RdWV1ZSA9IG5ldyBQcmlvcml0eVF1ZXVlPE1lc3NhZ2VCdW5kbGU+KCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBJQW5pbWF0aW9uTGlzdGVuZXIgbUxpc3RlbmVyOwotCi0gICAgcHVibGljIEFuaW1hdGlvblRocmVhZChSZW5kZXJTZXNzaW9uSW1wbCBzY2VuZSwgU3RyaW5nIHRocmVhZE5hbWUsCi0gICAgICAgICAgICBJQW5pbWF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgc3VwZXIodGhyZWFkTmFtZSk7Ci0gICAgICAgIG1TZXNzaW9uID0gc2NlbmU7Ci0gICAgICAgIG1MaXN0ZW5lciA9IGxpc3RlbmVyOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBSZXN1bHQgcHJlQW5pbWF0aW9uKCk7Ci0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgcG9zdEFuaW1hdGlvbigpOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBCcmlkZ2UucHJlcGFyZVRocmVhZCgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgLyogRklYTUU6IFRoZSBBTklNQVRJT05fRlJBTUUgbWVzc2FnZSBubyBsb25nZXIgZXhpc3RzLiAgSW5zdGVhZCwgdGhlCi0gICAgICAgICAgICAgKiBhbmltYXRpb24gdGltaW5nIGxvb3AgaXMgY29tcGxldGVseSBiYXNlZCBvbiBhIENob3Jlb2dyYXBoZXIgb2JqZWN0cwotICAgICAgICAgICAgICogdGhhdCBzY2hlZHVsZXMgYW5pbWF0aW9uIGFuZCBkcmF3aW5nIGZyYW1lcy4gIFRoZSBhbmltYXRpb24gaGFuZGxlciBpcwotICAgICAgICAgICAgICogbm8gbG9uZ2VyIGV2ZW4gYSBoYW5kbGVyOyBpdCBpcyBqdXN0IGEgUnVubmFibGUgZW5xdWV1ZWQgb24gdGhlIENob3Jlb2dyYXBoZXIuCi0gICAgICAgICAgICBIYW5kbGVyX0RlbGVnYXRlLnNldENhbGxiYWNrKG5ldyBJSGFuZGxlckNhbGxiYWNrKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlQXRUaW1lKEhhbmRsZXIgaGFuZGxlciwgTWVzc2FnZSBtc2csIGxvbmcgdXB0aW1lTWlsbGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtc2cud2hhdCA9PSBWYWx1ZUFuaW1hdG9yLkFOSU1BVElPTl9TVEFSVCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy53aGF0ID09IFZhbHVlQW5pbWF0b3IuQU5JTUFUSU9OX0ZSQU1FKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUXVldWUuYWRkKG5ldyBNZXNzYWdlQnVuZGxlKGhhbmRsZXIsIG1zZywgdXB0aW1lTWlsbGlzKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGlnbm9yZS4KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgLy8gY2FsbCBvdXQgdG8gdGhlIHByZS1hbmltYXRpb24gd29yaywgd2hpY2ggc2hvdWxkIHN0YXJ0IGFuIGFuaW1hdGlvbiBvciBtb3JlLgotICAgICAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHByZUFuaW1hdGlvbigpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MoKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIG1MaXN0ZW5lci5kb25lKHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGxvb3AgdGhlIGFuaW1hdGlvbgotICAgICAgICAgICAgUmVuZGVyU2Vzc2lvbiBzZXNzaW9uID0gbVNlc3Npb24uZ2V0U2Vzc2lvbigpOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIC8vIGNoZWNrIGVhcmx5LgotICAgICAgICAgICAgICAgIGlmIChtTGlzdGVuZXIuaXNDYW5jZWxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgbmV4dCBtZXNzYWdlLgotICAgICAgICAgICAgICAgIE1lc3NhZ2VCdW5kbGUgYnVuZGxlID0gbVF1ZXVlLnBvbGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoYnVuZGxlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gc2xlZXAgZW5vdWdoIGZvciB0aGlzIGJ1bmRsZSB0byBiZSBvbiB0aW1lCi0gICAgICAgICAgICAgICAgbG9uZyBjdXJyZW50VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSA8IGJ1bmRsZS5tVXB0aW1lTWlsbGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbGVlcChidW5kbGUubVVwdGltZU1pbGxpcyAtIGN1cnJlbnRUaW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgbG9nL2RvIHNvbWV0aGluZy9zbGVlcCBhZ2Fpbj8KLSAgICAgICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBjaGVjayBhZnRlciBzbGVlcGluZy4KLSAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmVyLmlzQ2FuY2VsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyByZWFkeSB0byBkbyB0aGUgd29yaywgYWNxdWlyZSB0aGUgc2NlbmUuCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbVNlc3Npb24uYWNxdWlyZSgyNTApOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgbUxpc3RlbmVyLmRvbmUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgdGhlIGJ1bmRsZS4gSWYgdGhlIGFuaW1hdGlvbiBpcyBub3QgZmluaXNoZWQsIHRoaXMgd2lsbCBlbnF1ZXVlCi0gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgbWVzc2FnZSwgc28gbVF1ZXVlIHdpbGwgaGF2ZSBhbm90aGVyIG9uZS4KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBhZnRlciBhY3F1aXJpbmcgaW4gY2FzZSBpdCB0b29rIGEgd2hpbGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtTGlzdGVuZXIuaXNDYW5jZWxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5tVGFyZ2V0LmhhbmRsZU1lc3NhZ2UoYnVuZGxlLm1NZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TZXNzaW9uLnJlbmRlcihmYWxzZSAvKmZyZXNoUmVuZGVyKi8pLmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTGlzdGVuZXIub25OZXdGcmFtZShzZXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TZXNzaW9uLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IHdoaWxlIChtTGlzdGVuZXIuaXNDYW5jZWxlZCgpID09IGZhbHNlICYmIG1RdWV1ZS5zaXplKCkgPiAwKTsKLQotICAgICAgICAgICAgbUxpc3RlbmVyLmRvbmUoU3RhdHVzLlNVQ0NFU1MuY3JlYXRlUmVzdWx0KCkpOwotCi0gICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aHJvd2FibGUpIHsKLSAgICAgICAgICAgIC8vIGNhbid0IHVzZSBCcmlkZ2UuZ2V0TG9nKCkgYXMgdGhlIGV4Y2VwdGlvbiBtaWdodCBiZSB0aHJvd24gb3V0c2lkZQotICAgICAgICAgICAgLy8gb2YgYW4gYWNxdWlyZS9yZWxlYXNlIGJsb2NrLgotICAgICAgICAgICAgbUxpc3RlbmVyLmRvbmUoU3RhdHVzLkVSUk9SX1VOS05PV04uY3JlYXRlUmVzdWx0KCJFcnJvciBwbGF5aW5nIGFuaW1hdGlvbiIsIHRocm93YWJsZSkpOwotCi0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBwb3N0QW5pbWF0aW9uKCk7Ci0gICAgICAgICAgICBIYW5kbGVyX0RlbGVnYXRlLnNldENhbGxiYWNrKG51bGwpOwotICAgICAgICAgICAgQnJpZGdlLmNsZWFudXBUaHJlYWQoKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjQ0NGFhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmFuaW1hdGlvbjsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBQcm9wZXJ0eVZhbHVlc0hvbGRlciBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIEJlY2F1c2UgaXQncyBhIHN0YXRlbGVzcyBjbGFzcyB0byBzdGFydCB3aXRoLCB0aGVyZSdzIG5vIG5lZWQgdG8ga2VlcCBhIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9Ci0gKiBhcm91bmQgdG8gbWFwIGludCB0byBpbnN0YW5jZSBvZiB0aGUgZGVsZWdhdGUuCi0gKgotICogVGhlIG1haW4gZ29hbCBvZiB0aGlzIGNsYXNzJyBtZXRob2RzIGFyZSB0byBwcm92aWRlIGEgbmF0aXZlIHdheSB0byBhY2Nlc3Mgc2V0dGVycyBhbmQgZ2V0dGVycwotICogb24gc29tZSBvYmplY3QuIEluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIGRlZmF1bHQgdG8gdXNpbmcgSmF2YSByZWZsZWN0aW9uIGluc3RlYWQgc28gdGhlIG5hdGl2ZQotICogbWV0aG9kcyBkbyBub3RoaW5nLgotICoKLSAqLwotLypwYWNrYWdlKi8gY2xhc3MgUHJvcGVydHlWYWx1ZXNIb2xkZXJfRGVsZWdhdGUgewotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuR2V0SW50TWV0aG9kKENsYXNzPD8+IHRhcmdldENsYXNzLCBTdHJpbmcgbWV0aG9kTmFtZSkgewotICAgICAgICAvLyByZXR1cm4gMCB0byBmb3JjZSBQcm9wZXJ0eVZhbHVlc0hvbGRlciB0byB1c2UgSmF2YSByZWZsZWN0aW9uLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5HZXRGbG9hdE1ldGhvZChDbGFzczw/PiB0YXJnZXRDbGFzcywgU3RyaW5nIG1ldGhvZE5hbWUpIHsKLSAgICAgICAgLy8gcmV0dXJuIDAgdG8gZm9yY2UgUHJvcGVydHlWYWx1ZXNIb2xkZXIgdG8gdXNlIEphdmEgcmVmbGVjdGlvbi4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbkNhbGxJbnRNZXRob2QoT2JqZWN0IHRhcmdldCwgaW50IG1ldGhvZElELCBpbnQgYXJnKSB7Ci0gICAgICAgIC8vIGRvIG5vdGhpbmcKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuQ2FsbEZsb2F0TWV0aG9kKE9iamVjdCB0YXJnZXQsIGludCBtZXRob2RJRCwgZmxvYXQgYXJnKSB7Ci0gICAgICAgIC8vIGRvIG5vdGhpbmcKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2FwcC9GcmFnbWVudF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9hcHAvRnJhZ21lbnRfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFiZDNmMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2FwcC9GcmFnbWVudF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuYXBwOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklQcm9qZWN0Q2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci0KLS8qKgotICogRGVsZWdhdGUgdXNlZCB0byBwcm92aWRlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlbGVjdCBmZXcgbWV0aG9kcyBvZiB7QGxpbmsgRnJhZ21lbnR9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgRnJhZ21lbnQgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGUgbWV0aG9kcyBiZWluZyByZS1pbXBsZW1lbnRlZCBhcmUgdGhlIG9uZXMgcmVzcG9uc2libGUgZm9yIGluc3RhbnRpYXRpbmcgRnJhZ21lbnQgb2JqZWN0cy4KLSAqIEJlY2F1c2UgdGhlIGNsYXNzZXMgb2YgdGhlc2Ugb2JqZWN0cyBhcmUgZm91bmQgaW4gdGhlIHByb2plY3QsIHRoZXNlIG1ldGhvZHMgbmVlZCBhY2Nlc3MgdG8KLSAqIHtAbGluayBJUHJvamVjdENhbGxiYWNrfSBvYmplY3QuIFRoZXkgYXJlIGhvd2V2ZXIgc3RhdGljIG1ldGhvZHMsIHNvIHRoZSBjYWxsYmFjayBpcyBzZXQKLSAqIGJlZm9yZSB0aGUgaW5mbGF0aW9uIHRocm91Z2gge0BsaW5rICNzZXRQcm9qZWN0Q2FsbGJhY2soSVByb2plY3RDYWxsYmFjayl9LgotICovCi1wdWJsaWMgY2xhc3MgRnJhZ21lbnRfRGVsZWdhdGUgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgSVByb2plY3RDYWxsYmFjayBzUHJvamVjdENhbGxiYWNrOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgY3VycmVudCB7QGxpbmsgSVByb2plY3RDYWxsYmFja30gdG8gYmUgdXNlZCB0byBpbnN0YW50aWF0ZSBjbGFzc2VzIGNvbWluZwotICAgICAqIGZyb20gdGhlIHByb2plY3QgYmVpbmcgcmVuZGVyZWQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFByb2plY3RDYWxsYmFjayhJUHJvamVjdENhbGxiYWNrIHByb2plY3RDYWxsYmFjaykgewotICAgICAgICBzUHJvamVjdENhbGxiYWNrID0gcHJvamVjdENhbGxiYWNrOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIExpa2Uge0BsaW5rICNpbnN0YW50aWF0ZShDb250ZXh0LCBTdHJpbmcsIEJ1bmRsZSl9IGJ1dCB3aXRoIGEgbnVsbAotICAgICAqIGFyZ3VtZW50IEJ1bmRsZS4KLSAgICAgKi8KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgRnJhZ21lbnQgaW5zdGFudGlhdGUoQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgZm5hbWUpIHsKLSAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlKGNvbnRleHQsIGZuYW1lLCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYSBGcmFnbWVudCB3aXRoIHRoZSBnaXZlbiBjbGFzcyBuYW1lLiAgVGhpcyBpcwotICAgICAqIHRoZSBzYW1lIGFzIGNhbGxpbmcgaXRzIGVtcHR5IGNvbnN0cnVjdG9yLgotICAgICAqCi0gICAgICogQHBhcmFtIGNvbnRleHQgVGhlIGNhbGxpbmcgY29udGV4dCBiZWluZyB1c2VkIHRvIGluc3RhbnRpYXRlIHRoZSBmcmFnbWVudC4KLSAgICAgKiBUaGlzIGlzIGN1cnJlbnRseSBqdXN0IHVzZWQgdG8gZ2V0IGl0cyBDbGFzc0xvYWRlci4KLSAgICAgKiBAcGFyYW0gZm5hbWUgVGhlIGNsYXNzIG5hbWUgb2YgdGhlIGZyYWdtZW50IHRvIGluc3RhbnRpYXRlLgotICAgICAqIEBwYXJhbSBhcmdzIEJ1bmRsZSBvZiBhcmd1bWVudHMgdG8gc3VwcGx5IHRvIHRoZSBmcmFnbWVudCwgd2hpY2ggaXQKLSAgICAgKiBjYW4gcmV0cmlldmUgd2l0aCB7QGxpbmsgI2dldEFyZ3VtZW50cygpfS4gIE1heSBiZSBudWxsLgotICAgICAqIEByZXR1cm4gUmV0dXJucyBhIG5ldyBmcmFnbWVudCBpbnN0YW5jZS4KLSAgICAgKiBAdGhyb3dzIEluc3RhbnRpYXRpb25FeGNlcHRpb24gSWYgdGhlcmUgaXMgYSBmYWlsdXJlIGluIGluc3RhbnRpYXRpbmcKLSAgICAgKiB0aGUgZ2l2ZW4gZnJhZ21lbnQgY2xhc3MuICBUaGlzIGlzIGEgcnVudGltZSBleGNlcHRpb247IGl0IGlzIG5vdAotICAgICAqIG5vcm1hbGx5IGV4cGVjdGVkIHRvIGhhcHBlbi4KLSAgICAgKi8KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgRnJhZ21lbnQgaW5zdGFudGlhdGUoQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgZm5hbWUsIEJ1bmRsZSBhcmdzKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAoc1Byb2plY3RDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgRnJhZ21lbnQgZiA9IChGcmFnbWVudCkgc1Byb2plY3RDYWxsYmFjay5sb2FkVmlldyhmbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDbGFzc1swXSwgbmV3IE9iamVjdFswXSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXJncyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3Muc2V0Q2xhc3NMb2FkZXIoZi5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgICAgICAgICAgICAgICAgICBmLm1Bcmd1bWVudHMgPSBhcmdzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEZyYWdtZW50Lkluc3RhbnRpYXRpb25FeGNlcHRpb24oIlVuYWJsZSB0byBpbnN0YW50aWF0ZSBmcmFnbWVudCAiICsgZm5hbWUKLSAgICAgICAgICAgICAgICAgICAgKyAiOiBtYWtlIHN1cmUgY2xhc3MgbmFtZSBleGlzdHMsIGlzIHB1YmxpYywgYW5kIGhhcyBhbiIKLSAgICAgICAgICAgICAgICAgICAgKyAiIGVtcHR5IGNvbnN0cnVjdG9yIHRoYXQgaXMgcHVibGljIiwgZSk7Ci0gICAgICAgIH0gY2F0Y2ggKGphdmEubGFuZy5JbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBGcmFnbWVudC5JbnN0YW50aWF0aW9uRXhjZXB0aW9uKCJVbmFibGUgdG8gaW5zdGFudGlhdGUgZnJhZ21lbnQgIiArIGZuYW1lCi0gICAgICAgICAgICAgICAgICAgICsgIjogbWFrZSBzdXJlIGNsYXNzIG5hbWUgZXhpc3RzLCBpcyBwdWJsaWMsIGFuZCBoYXMgYW4iCi0gICAgICAgICAgICAgICAgICAgICsgIiBlbXB0eSBjb25zdHJ1Y3RvciB0aGF0IGlzIHB1YmxpYyIsIGUpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBGcmFnbWVudC5JbnN0YW50aWF0aW9uRXhjZXB0aW9uKCJVbmFibGUgdG8gaW5zdGFudGlhdGUgZnJhZ21lbnQgIiArIGZuYW1lCi0gICAgICAgICAgICAgICAgICAgICsgIjogbWFrZSBzdXJlIGNsYXNzIG5hbWUgZXhpc3RzLCBpcyBwdWJsaWMsIGFuZCBoYXMgYW4iCi0gICAgICAgICAgICAgICAgICAgICsgIiBlbXB0eSBjb25zdHJ1Y3RvciB0aGF0IGlzIHB1YmxpYyIsIGUpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEZyYWdtZW50Lkluc3RhbnRpYXRpb25FeGNlcHRpb24oIlVuYWJsZSB0byBpbnN0YW50aWF0ZSBmcmFnbWVudCAiICsgZm5hbWUKLSAgICAgICAgICAgICAgICAgICAgKyAiOiBtYWtlIHN1cmUgY2xhc3MgbmFtZSBleGlzdHMsIGlzIHB1YmxpYywgYW5kIGhhcyBhbiIKLSAgICAgICAgICAgICAgICAgICAgKyAiIGVtcHR5IGNvbnN0cnVjdG9yIHRoYXQgaXMgcHVibGljIiwgZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL0JyaWRnZUFzc2V0TWFuYWdlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9jb250ZW50L3Jlcy9CcmlkZ2VBc3NldE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk1MzkxOC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL0JyaWRnZUFzc2V0TWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnJlczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldE1hbmFnZXI7Ci0KLXB1YmxpYyBjbGFzcyBCcmlkZ2VBc3NldE1hbmFnZXIgZXh0ZW5kcyBBc3NldE1hbmFnZXIgewotCi0gICAgLyoqCi0gICAgICogVGhpcyBpbml0aWFsaXplcyB0aGUgc3RhdGljIGZpZWxkIHtAbGluayBBc3NldE1hbmFnZXIjbVN5c3RlbX0gd2hpY2ggaXMgdXNlZAotICAgICAqIGJ5IG1ldGhvZHMgd2hvIGdldCBhIGdsb2JhbCBhc3NldCBtYW5hZ2VyIHVzaW5nIHtAbGluayBBc3NldE1hbmFnZXIjZ2V0U3lzdGVtKCl9LgotICAgICAqIDxwLz4KLSAgICAgKiBUaGV5IHdpbGwgZW5kIHVwIHVzaW5nIG91ciBicmlkZ2UgYXNzZXQgbWFuYWdlci4KLSAgICAgKiA8cC8+Ci0gICAgICoge0BsaW5rIEJyaWRnZX0gY2FsbHMgdGhpcyBtZXRob2QgYWZ0ZXIgc2V0dGluZyB1cCBhIG5ldyBicmlkZ2UuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBBc3NldE1hbmFnZXIgaW5pdFN5c3RlbSgpIHsKLSAgICAgICAgaWYgKCEoQXNzZXRNYW5hZ2VyLnNTeXN0ZW0gaW5zdGFuY2VvZiBCcmlkZ2VBc3NldE1hbmFnZXIpKSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgQXNzZXRNYW5hZ2VyKCkgY3JlYXRlcyBhIHN5c3RlbSBBc3NldE1hbmFnZXIgYW5kIHdlIG92ZXJyaWRlIGl0Ci0gICAgICAgICAgICAvLyB3aXRoIG91ciBCcmlkZ2VBc3NldE1hbmFnZXIuCi0gICAgICAgICAgICBBc3NldE1hbmFnZXIuc1N5c3RlbSA9IG5ldyBCcmlkZ2VBc3NldE1hbmFnZXIoKTsKLSAgICAgICAgICAgIEFzc2V0TWFuYWdlci5zU3lzdGVtLm1ha2VTdHJpbmdCbG9ja3MoZmFsc2UpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBBc3NldE1hbmFnZXIuc1N5c3RlbTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbGVhcnMgdGhlIHN0YXRpYyB7QGxpbmsgQXNzZXRNYW5hZ2VyI3NTeXN0ZW19IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBsZWF2ZSBvYmplY3RzCi0gICAgICogYXJvdW5kIHRoYXQgd291bGQgcHJldmVudCB1cyBmcm9tIHVubG9hZGluZyB0aGUgbGlicmFyeS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2xlYXJTeXN0ZW0oKSB7Ci0gICAgICAgIEFzc2V0TWFuYWdlci5zU3lzdGVtID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEJyaWRnZUFzc2V0TWFuYWdlcigpIHsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL0JyaWRnZVJlc291cmNlcy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9jb250ZW50L3Jlcy9CcmlkZ2VSZXNvdXJjZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc5NDQ1Mi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL0JyaWRnZVJlc291cmNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuY29udGVudC5yZXM7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSVByb2plY3RDYWxsYmFjazsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXNvdXJjZVZhbHVlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC5CcmlkZ2VDb250ZXh0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC5CcmlkZ2VYbWxCbG9ja1BhcnNlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUmVzb3VyY2VIZWxwZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQubmluZXBhdGNoLk5pbmVQYXRjaDsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnV0aWwuUGFpcjsKLQotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7Ci1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotLyoqCi0gKgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQnJpZGdlUmVzb3VyY2VzIGV4dGVuZHMgUmVzb3VyY2VzIHsKLQotICAgIHByaXZhdGUgQnJpZGdlQ29udGV4dCBtQ29udGV4dDsKLSAgICBwcml2YXRlIElQcm9qZWN0Q2FsbGJhY2sgbVByb2plY3RDYWxsYmFjazsKLSAgICBwcml2YXRlIGJvb2xlYW5bXSBtUGxhdGZvcm1SZXNvdXJjZUZsYWcgPSBuZXcgYm9vbGVhblsxXTsKLQotICAgIC8qKgotICAgICAqIFNpbXBsZXIgd3JhcHBlciBhcm91bmQgRmlsZUlucHV0U3RyZWFtLiBUaGlzIGlzIHVzZWQgd2hlbiB0aGUgaW5wdXQgc3RyZWFtIHJlcHJlc2VudAotICAgICAqIG5vdCBhIG5vcm1hbCBiaXRtYXAgYnV0IGEgbmluZSBwYXRjaC4KLSAgICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBJbnB1dFN0cmVhbSBpcyBjcmVhdGVkIGluIGEgbWV0aG9kIGJ1dCB1c2VkIGluIGFub3RoZXIgdGhhdCBuZWVkcwotICAgICAqIHRvIGtub3cgd2hldGhlciB0aGlzIGlzIDktcGF0Y2ggb3Igbm90LCBzdWNoIGFzIEJpdG1hcEZhY3RvcnkuCi0gICAgICovCi0gICAgcHVibGljIGNsYXNzIE5pbmVQYXRjaElucHV0U3RyZWFtIGV4dGVuZHMgRmlsZUlucHV0U3RyZWFtIHsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1GYWtlTWFya1N1cHBvcnQgPSB0cnVlOwotICAgICAgICBwdWJsaWMgTmluZVBhdGNoSW5wdXRTdHJlYW0oRmlsZSBmaWxlKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIHN1cGVyKGZpbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKSB7Ci0gICAgICAgICAgICBpZiAobUZha2VNYXJrU3VwcG9ydCkgewotICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgQml0bWFwRmFjdG9yeSBkb2Vzbid0IHdyYXAgdGhpcyBpbiBhIEJ1ZmZlcmVkSW5wdXRTdHJlYW0uCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBzdXBlci5tYXJrU3VwcG9ydGVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBkaXNhYmxlRmFrZU1hcmtTdXBwb3J0KCkgewotICAgICAgICAgICAgLy8gZGlzYWJsZSBmYWtlIG1hcmsgc3VwcG9ydCBzbyB0aGF0IGluIGNhc2UgY29kZWMgYWN0dWFsbHkgdHJ5IHRvIHVzZSB0aGVtCi0gICAgICAgICAgICAvLyB3ZSBkb24ndCBsaWUgdG8gdGhlbS4KLSAgICAgICAgICAgIG1GYWtlTWFya1N1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIHN0YXRpYyBmaWVsZCB7QGxpbmsgUmVzb3VyY2VzI21TeXN0ZW19IHdoaWNoIGlzIHVzZWQKLSAgICAgKiBieSBtZXRob2RzIHdobyBnZXQgZ2xvYmFsIHJlc291cmNlcyB1c2luZyB7QGxpbmsgUmVzb3VyY2VzI2dldFN5c3RlbSgpfS4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhleSB3aWxsIGVuZCB1cCB1c2luZyBvdXIgYnJpZGdlIHJlc291cmNlcy4KLSAgICAgKiA8cC8+Ci0gICAgICoge0BsaW5rIEJyaWRnZX0gY2FsbHMgdGhpcyBtZXRob2QgYWZ0ZXIgc2V0dGluZyB1cCBhIG5ldyBicmlkZ2UuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBSZXNvdXJjZXMgaW5pdFN5c3RlbShCcmlkZ2VDb250ZXh0IGNvbnRleHQsCi0gICAgICAgICAgICBBc3NldE1hbmFnZXIgYXNzZXRzLAotICAgICAgICAgICAgRGlzcGxheU1ldHJpY3MgbWV0cmljcywKLSAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY29uZmlnLAotICAgICAgICAgICAgSVByb2plY3RDYWxsYmFjayBwcm9qZWN0Q2FsbGJhY2spIHsKLSAgICAgICAgcmV0dXJuIFJlc291cmNlcy5tU3lzdGVtID0gbmV3IEJyaWRnZVJlc291cmNlcyhjb250ZXh0LAotICAgICAgICAgICAgICAgIGFzc2V0cywKLSAgICAgICAgICAgICAgICBtZXRyaWNzLAotICAgICAgICAgICAgICAgIGNvbmZpZywKLSAgICAgICAgICAgICAgICBwcm9qZWN0Q2FsbGJhY2spOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERpc3Bvc2VzIHRoZSBzdGF0aWMge0BsaW5rIFJlc291cmNlcyNtU3lzdGVtfSB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbGVhdmUgb2JqZWN0cwotICAgICAqIGFyb3VuZCB0aGF0IHdvdWxkIHByZXZlbnQgdXMgZnJvbSB1bmxvYWRpbmcgdGhlIGxpYnJhcnkuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGRpc3Bvc2VTeXN0ZW0oKSB7Ci0gICAgICAgIGlmIChSZXNvdXJjZXMubVN5c3RlbSBpbnN0YW5jZW9mIEJyaWRnZVJlc291cmNlcykgewotICAgICAgICAgICAgKChCcmlkZ2VSZXNvdXJjZXMpKFJlc291cmNlcy5tU3lzdGVtKSkubUNvbnRleHQgPSBudWxsOwotICAgICAgICAgICAgKChCcmlkZ2VSZXNvdXJjZXMpKFJlc291cmNlcy5tU3lzdGVtKSkubVByb2plY3RDYWxsYmFjayA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgUmVzb3VyY2VzLm1TeXN0ZW0gPSBudWxsOwotICAgIH0KLQotICAgIHByaXZhdGUgQnJpZGdlUmVzb3VyY2VzKEJyaWRnZUNvbnRleHQgY29udGV4dCwgQXNzZXRNYW5hZ2VyIGFzc2V0cywgRGlzcGxheU1ldHJpY3MgbWV0cmljcywKLSAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY29uZmlnLCBJUHJvamVjdENhbGxiYWNrIHByb2plY3RDYWxsYmFjaykgewotICAgICAgICBzdXBlcihhc3NldHMsIG1ldHJpY3MsIGNvbmZpZyk7Ci0gICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgbVByb2plY3RDYWxsYmFjayA9IHByb2plY3RDYWxsYmFjazsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQnJpZGdlVHlwZWRBcnJheSBuZXdUeXBlQXJyYXkoaW50IG51bUVudHJpZXMsIGJvb2xlYW4gcGxhdGZvcm1GaWxlKSB7Ci0gICAgICAgIHJldHVybiBuZXcgQnJpZGdlVHlwZWRBcnJheSh0aGlzLCBtQ29udGV4dCwgbnVtRW50cmllcywgcGxhdGZvcm1GaWxlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiBnZXRSZXNvdXJjZVZhbHVlKGludCBpZCwgYm9vbGVhbltdIHBsYXRmb3JtUmVzRmxhZ19vdXQpIHsKLSAgICAgICAgLy8gZmlyc3QgZ2V0IHRoZSBTdHJpbmcgcmVsYXRlZCB0byB0aGlzIGlkIGluIHRoZSBmcmFtZXdvcmsKLSAgICAgICAgUGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4gcmVzb3VyY2VJbmZvID0gQnJpZGdlLnJlc29sdmVSZXNvdXJjZUlkKGlkKTsKLQotICAgICAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgIHBsYXRmb3JtUmVzRmxhZ19vdXRbMF0gPSB0cnVlOwotICAgICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSByZXNvdXJjZUluZm8uZ2V0U2Vjb25kKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBQYWlyLm9mKGF0dHJpYnV0ZU5hbWUsIG1Db250ZXh0LmdldFJlbmRlclJlc291cmNlcygpLmdldEZyYW1ld29ya1Jlc291cmNlKAotICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUluZm8uZ2V0Rmlyc3QoKSwgYXR0cmlidXRlTmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZGlkbid0IGZpbmQgYSBtYXRjaCBpbiB0aGUgZnJhbWV3b3JrPyBsb29rIGluIHRoZSBwcm9qZWN0LgotICAgICAgICBpZiAobVByb2plY3RDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXNvdXJjZUluZm8gPSBtUHJvamVjdENhbGxiYWNrLnJlc29sdmVSZXNvdXJjZUlkKGlkKTsKLQotICAgICAgICAgICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcGxhdGZvcm1SZXNGbGFnX291dFswXSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gcmVzb3VyY2VJbmZvLmdldFNlY29uZCgpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIFBhaXIub2YoYXR0cmlidXRlTmFtZSwgbUNvbnRleHQuZ2V0UmVuZGVyUmVzb3VyY2VzKCkuZ2V0UHJvamVjdFJlc291cmNlKAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VJbmZvLmdldEZpcnN0KCksIGF0dHJpYnV0ZU5hbWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEcmF3YWJsZSBnZXREcmF3YWJsZShpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiB2YWx1ZSA9IGdldFJlc291cmNlVmFsdWUoaWQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZyk7Ci0KLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZUhlbHBlci5nZXREcmF3YWJsZSh2YWx1ZS5nZXRTZWNvbmQoKSwgbUNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLQotICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkIHNpbmNlIHRoZSBtZXRob2QgYWJvdmUgYWx3YXlzIHRocm93cwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldENvbG9yKGludCBpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUGFpcjxTdHJpbmcsIFJlc291cmNlVmFsdWU+IHZhbHVlID0gZ2V0UmVzb3VyY2VWYWx1ZShpZCwgbVBsYXRmb3JtUmVzb3VyY2VGbGFnKTsKLQotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VIZWxwZXIuZ2V0Q29sb3IodmFsdWUuZ2V0U2Vjb25kKCkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX1JFU09VUkNFU19GT1JNQVQsIGUuZ2V0TWVzc2FnZSgpLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpZCB3YXMgbm90IGZvdW5kIG9yIG5vdCByZXNvbHZlZC4gVGhyb3cgYSBOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICAgICAgdGhyb3dFeGNlcHRpb24oaWQpOwotCi0gICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWQgc2luY2UgdGhlIG1ldGhvZCBhYm92ZSBhbHdheXMgdGhyb3dzCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb2xvclN0YXRlTGlzdCBnZXRDb2xvclN0YXRlTGlzdChpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiByZXNWYWx1ZSA9IGdldFJlc291cmNlVmFsdWUoaWQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZyk7Ci0KLSAgICAgICAgaWYgKHJlc1ZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIENvbG9yU3RhdGVMaXN0IHN0YXRlTGlzdCA9IFJlc291cmNlSGVscGVyLmdldENvbG9yU3RhdGVMaXN0KHJlc1ZhbHVlLmdldFNlY29uZCgpLAotICAgICAgICAgICAgICAgICAgICBtQ29udGV4dCk7Ci0gICAgICAgICAgICBpZiAoc3RhdGVMaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGVMaXN0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLQotICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkIHNpbmNlIHRoZSBtZXRob2QgYWJvdmUgYWx3YXlzIHRocm93cwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGdldFRleHQoaW50IGlkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBQYWlyPFN0cmluZywgUmVzb3VyY2VWYWx1ZT4gdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlID0gdmFsdWUuZ2V0U2Vjb25kKCk7Ci0KLSAgICAgICAgICAgIGFzc2VydCByZXNWYWx1ZSAhPSBudWxsOwotICAgICAgICAgICAgaWYgKHJlc1ZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdiA9IHJlc1ZhbHVlLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpZCB3YXMgbm90IGZvdW5kIG9yIG5vdCByZXNvbHZlZC4gVGhyb3cgYSBOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICAgICAgdGhyb3dFeGNlcHRpb24oaWQpOwotCi0gICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWQgc2luY2UgdGhlIG1ldGhvZCBhYm92ZSBhbHdheXMgdGhyb3dzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBYbWxSZXNvdXJjZVBhcnNlciBnZXRMYXlvdXQoaW50IGlkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBQYWlyPFN0cmluZywgUmVzb3VyY2VWYWx1ZT4gdiA9IGdldFJlc291cmNlVmFsdWUoaWQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZyk7Ci0KLSAgICAgICAgaWYgKHYgIT0gbnVsbCkgewotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSB2YWx1ZSA9IHYuZ2V0U2Vjb25kKCk7Ci0gICAgICAgICAgICBYbWxQdWxsUGFyc2VyIHBhcnNlciA9IG51bGw7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGFyc2VyIGNhbiBwcm92aWRlIHVzIHdpdGggYSBjdXN0b20gcGFyc2VyLgotICAgICAgICAgICAgICAgIGlmIChtUGxhdGZvcm1SZXNvdXJjZUZsYWdbMF0gPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyID0gbVByb2plY3RDYWxsYmFjay5nZXRQYXJzZXIodmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBvbmUgbWFudWFsbHkgaWYgbmVlZGVkLgotICAgICAgICAgICAgICAgIGlmIChwYXJzZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBGaWxlIHhtbCA9IG5ldyBGaWxlKHZhbHVlLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoeG1sLmlzRmlsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHB1bGwgcGFyc2VyIGFyb3VuZCB0aGUgbGF5b3V0IFhNTCBmaWxlLCBhbmQgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZSB0aGF0IHRvIG91ciBYbWxCbG9ja1BhcnNlcgotICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyID0gUGFyc2VyRmFjdG9yeS5jcmVhdGUoeG1sKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChwYXJzZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJyaWRnZVhtbEJsb2NrUGFyc2VyKHBhcnNlciwgbUNvbnRleHQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZ1swXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjb25maWd1cmUgcGFyc2VyIGZvciAiICsgdmFsdWUuZ2V0VmFsdWUoKSwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgLy8gd2UnbGwgcmV0dXJuIG51bGwgYmVsb3cuCi0gICAgICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB3ZSBjaGVjayBhYm92ZS4KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLQotICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkIHNpbmNlIHRoZSBtZXRob2QgYWJvdmUgYWx3YXlzIHRocm93cwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgWG1sUmVzb3VyY2VQYXJzZXIgZ2V0QW5pbWF0aW9uKGludCBpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUGFpcjxTdHJpbmcsIFJlc291cmNlVmFsdWU+IHYgPSBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIGlmICh2ICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSB2LmdldFNlY29uZCgpOwotICAgICAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIgPSBudWxsOwotCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIEZpbGUgeG1sID0gbmV3IEZpbGUodmFsdWUuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHhtbC5pc0ZpbGUoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHB1bGwgcGFyc2VyIGFyb3VuZCB0aGUgbGF5b3V0IFhNTCBmaWxlLCBhbmQgdGhlbgotICAgICAgICAgICAgICAgICAgICAvLyBnaXZlIHRoYXQgdG8gb3VyIFhtbEJsb2NrUGFyc2VyCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlciA9IFBhcnNlckZhY3RvcnkuY3JlYXRlKHhtbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcihwYXJzZXIsIG1Db250ZXh0LCBtUGxhdGZvcm1SZXNvdXJjZUZsYWdbMF0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY29uZmlndXJlIHBhcnNlciBmb3IgIiArIHZhbHVlLmdldFZhbHVlKCksIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIC8vIHdlJ2xsIHJldHVybiBudWxsIGJlbG93LgotICAgICAgICAgICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2Ugd2UgY2hlY2sgYWJvdmUuCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZCBzaW5jZSB0aGUgbWV0aG9kIGFib3ZlIGFsd2F5cyB0aHJvd3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFR5cGVkQXJyYXkgb2J0YWluQXR0cmlidXRlcyhBdHRyaWJ1dGVTZXQgc2V0LCBpbnRbXSBhdHRycykgewotICAgICAgICByZXR1cm4gbUNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhzZXQsIGF0dHJzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVHlwZWRBcnJheSBvYnRhaW5UeXBlZEFycmF5KGludCBpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0RGltZW5zaW9uKGludCBpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUGFpcjxTdHJpbmcsIFJlc291cmNlVmFsdWU+IHZhbHVlID0gZ2V0UmVzb3VyY2VWYWx1ZShpZCwgbVBsYXRmb3JtUmVzb3VyY2VGbGFnKTsKLQotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSByZXNWYWx1ZSA9IHZhbHVlLmdldFNlY29uZCgpOwotCi0gICAgICAgICAgICBhc3NlcnQgcmVzVmFsdWUgIT0gbnVsbDsKLSAgICAgICAgICAgIGlmIChyZXNWYWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHYgPSByZXNWYWx1ZS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHYuZXF1YWxzKEJyaWRnZUNvbnN0YW50cy5NQVRDSF9QQVJFTlQpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5lcXVhbHMoQnJpZGdlQ29uc3RhbnRzLkZJTExfUEFSRU5UKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQ7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodi5lcXVhbHMoQnJpZGdlQ29uc3RhbnRzLldSQVBfQ09OVEVOVCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKFJlc291cmNlSGVscGVyLnBhcnNlRmxvYXRBdHRyaWJ1dGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZ2V0Rmlyc3QoKSwgdiwgbVRtcFZhbHVlLCB0cnVlIC8qcmVxdWlyZVVuaXQqLykgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVG1wVmFsdWUudHlwZSA9PSBUeXBlZFZhbHVlLlRZUEVfRElNRU5TSU9OKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVRtcFZhbHVlLmdldERpbWVuc2lvbihnZXREaXNwbGF5TWV0cmljcygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZCBzaW5jZSB0aGUgbWV0aG9kIGFib3ZlIGFsd2F5cyB0aHJvd3MKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXREaW1lbnNpb25QaXhlbE9mZnNldChpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiB2YWx1ZSA9IGdldFJlc291cmNlVmFsdWUoaWQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZyk7Ci0KLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgcmVzVmFsdWUgPSB2YWx1ZS5nZXRTZWNvbmQoKTsKLQotICAgICAgICAgICAgYXNzZXJ0IHJlc1ZhbHVlICE9IG51bGw7Ci0gICAgICAgICAgICBpZiAocmVzVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFN0cmluZyB2ID0gcmVzVmFsdWUuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAodiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChSZXNvdXJjZUhlbHBlci5wYXJzZUZsb2F0QXR0cmlidXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldEZpcnN0KCksIHYsIG1UbXBWYWx1ZSwgdHJ1ZSAvKnJlcXVpcmVVbml0Ki8pICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRtcFZhbHVlLnR5cGUgPT0gVHlwZWRWYWx1ZS5UWVBFX0RJTUVOU0lPTikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVkVmFsdWUuY29tcGxleFRvRGltZW5zaW9uUGl4ZWxPZmZzZXQobVRtcFZhbHVlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERpc3BsYXlNZXRyaWNzKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLQotICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkIHNpbmNlIHRoZSBtZXRob2QgYWJvdmUgYWx3YXlzIHRocm93cwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldERpbWVuc2lvblBpeGVsU2l6ZShpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiB2YWx1ZSA9IGdldFJlc291cmNlVmFsdWUoaWQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZyk7Ci0KLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgcmVzVmFsdWUgPSB2YWx1ZS5nZXRTZWNvbmQoKTsKLQotICAgICAgICAgICAgYXNzZXJ0IHJlc1ZhbHVlICE9IG51bGw7Ci0gICAgICAgICAgICBpZiAocmVzVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFN0cmluZyB2ID0gcmVzVmFsdWUuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAodiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChSZXNvdXJjZUhlbHBlci5wYXJzZUZsb2F0QXR0cmlidXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldEZpcnN0KCksIHYsIG1UbXBWYWx1ZSwgdHJ1ZSAvKnJlcXVpcmVVbml0Ki8pICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRtcFZhbHVlLnR5cGUgPT0gVHlwZWRWYWx1ZS5UWVBFX0RJTUVOU0lPTikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVkVmFsdWUuY29tcGxleFRvRGltZW5zaW9uUGl4ZWxTaXplKG1UbXBWYWx1ZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREaXNwbGF5TWV0cmljcygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZCBzaW5jZSB0aGUgbWV0aG9kIGFib3ZlIGFsd2F5cyB0aHJvd3MKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRJbnRlZ2VyKGludCBpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUGFpcjxTdHJpbmcsIFJlc291cmNlVmFsdWU+IHZhbHVlID0gZ2V0UmVzb3VyY2VWYWx1ZShpZCwgbVBsYXRmb3JtUmVzb3VyY2VGbGFnKTsKLQotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSByZXNWYWx1ZSA9IHZhbHVlLmdldFNlY29uZCgpOwotCi0gICAgICAgICAgICBhc3NlcnQgcmVzVmFsdWUgIT0gbnVsbDsKLSAgICAgICAgICAgIGlmIChyZXNWYWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHYgPSByZXNWYWx1ZS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4ID0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2LnN0YXJ0c1dpdGgoIjB4IikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB2LnN1YnN0cmluZygyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl4ID0gMTY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLnBhcnNlSW50KHYsIHJhZGl4KTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBleGNlcHRpb24gYmVsb3cKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZCBzaW5jZSB0aGUgbWV0aG9kIGFib3ZlIGFsd2F5cyB0aHJvd3MKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbihpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiB2YWx1ZSA9IGdldFJlc291cmNlVmFsdWUoaWQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZyk7Ci0KLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgcmVzVmFsdWUgPSB2YWx1ZS5nZXRTZWNvbmQoKTsKLQotICAgICAgICAgICAgYXNzZXJ0IHJlc1ZhbHVlICE9IG51bGw7Ci0gICAgICAgICAgICBpZiAocmVzVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFN0cmluZyB2ID0gcmVzVmFsdWUuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAodiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuLnBhcnNlQm9vbGVhbih2KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpZCB3YXMgbm90IGZvdW5kIG9yIG5vdCByZXNvbHZlZC4gVGhyb3cgYSBOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICAgICAgdGhyb3dFeGNlcHRpb24oaWQpOwotCi0gICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWQgc2luY2UgdGhlIG1ldGhvZCBhYm92ZSBhbHdheXMgdGhyb3dzCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFJlc291cmNlRW50cnlOYW1lKGludCByZXNpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRSZXNvdXJjZU5hbWUoaW50IHJlc2lkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFJlc291cmNlVHlwZU5hbWUoaW50IHJlc2lkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZyhpbnQgaWQsIE9iamVjdC4uLiBmb3JtYXRBcmdzKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBTdHJpbmcgcyA9IGdldFN0cmluZyhpZCk7Ci0gICAgICAgIGlmIChzICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KHMsIGZvcm1hdEFyZ3MpOwotCi0gICAgICAgIH0KLQotICAgICAgICAvLyBpZCB3YXMgbm90IGZvdW5kIG9yIG5vdCByZXNvbHZlZC4gVGhyb3cgYSBOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICAgICAgdGhyb3dFeGNlcHRpb24oaWQpOwotCi0gICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWQgc2luY2UgdGhlIG1ldGhvZCBhYm92ZSBhbHdheXMgdGhyb3dzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKGludCBpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUGFpcjxTdHJpbmcsIFJlc291cmNlVmFsdWU+IHZhbHVlID0gZ2V0UmVzb3VyY2VWYWx1ZShpZCwgbVBsYXRmb3JtUmVzb3VyY2VGbGFnKTsKLQotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5nZXRTZWNvbmQoKS5nZXRWYWx1ZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5nZXRTZWNvbmQoKS5nZXRWYWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLQotICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkIHNpbmNlIHRoZSBtZXRob2QgYWJvdmUgYWx3YXlzIHRocm93cwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBnZXRWYWx1ZShpbnQgaWQsIFR5cGVkVmFsdWUgb3V0VmFsdWUsIGJvb2xlYW4gcmVzb2x2ZVJlZnMpCi0gICAgICAgICAgICB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBQYWlyPFN0cmluZywgUmVzb3VyY2VWYWx1ZT4gdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdiA9IHZhbHVlLmdldFNlY29uZCgpLmdldFZhbHVlKCk7Ci0KLSAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoUmVzb3VyY2VIZWxwZXIucGFyc2VGbG9hdEF0dHJpYnV0ZSh2YWx1ZS5nZXRGaXJzdCgpLCB2LCBvdXRWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qcmVxdWlyZVVuaXQqLykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGVsc2UgaXQncyBhIHN0cmluZwotICAgICAgICAgICAgICAgIG91dFZhbHVlLnR5cGUgPSBUeXBlZFZhbHVlLlRZUEVfU1RSSU5HOwotICAgICAgICAgICAgICAgIG91dFZhbHVlLnN0cmluZyA9IHY7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBnZXRWYWx1ZShTdHJpbmcgbmFtZSwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSwgYm9vbGVhbiByZXNvbHZlUmVmcykKLSAgICAgICAgICAgIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBYbWxSZXNvdXJjZVBhcnNlciBnZXRYbWwoaW50IGlkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBQYWlyPFN0cmluZywgUmVzb3VyY2VWYWx1ZT4gdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdiA9IHZhbHVlLmdldFNlY29uZCgpLmdldFZhbHVlKCk7Ci0KLSAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGlzIGlzIGEgZmlsZQotICAgICAgICAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKHYpOwotICAgICAgICAgICAgICAgIGlmIChmLmlzRmlsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBYbWxQdWxsUGFyc2VyIHBhcnNlciA9IFBhcnNlckZhY3RvcnkuY3JlYXRlKGYpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJyaWRnZVhtbEJsb2NrUGFyc2VyKHBhcnNlciwgbUNvbnRleHQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZ1swXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTm90Rm91bmRFeGNlcHRpb24gbmV3RSA9IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3RS5pbml0Q2F1c2UoZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXdFOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTm90Rm91bmRFeGNlcHRpb24gbmV3RSA9IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3RS5pbml0Q2F1c2UoZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXdFOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLQotICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkIHNpbmNlIHRoZSBtZXRob2QgYWJvdmUgYWx3YXlzIHRocm93cwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgWG1sUmVzb3VyY2VQYXJzZXIgbG9hZFhtbFJlc291cmNlUGFyc2VyKFN0cmluZyBmaWxlLCBpbnQgaWQsCi0gICAgICAgICAgICBpbnQgYXNzZXRDb29raWUsIFN0cmluZyB0eXBlKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICAvLyBldmVuIHRob3VnaCB3ZSBrbm93IHRoZSBYTUwgZmlsZSB0byBsb2FkIGRpcmVjdGx5LCB3ZSBzdGlsbCBuZWVkIHRvIHJlc29sdmUgdGhlCi0gICAgICAgIC8vIGlkIHNvIHRoYXQgd2UgY2FuIGtub3cgaWYgaXQncyBhIHBsYXRmb3JtIG9yIHByb2plY3QgcmVzb3VyY2UuCi0gICAgICAgIC8vIChtUGxhdGZvcm1SZXNvdWNlRmxhZyB3aWxsIGdldCB0aGUgcmVzdWx0IGFuZCB3aWxsIGJlIHVzZWQgbGF0ZXIpLgotICAgICAgICBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKGZpbGUpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIgPSBQYXJzZXJGYWN0b3J5LmNyZWF0ZShmKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcihwYXJzZXIsIG1Db250ZXh0LCBtUGxhdGZvcm1SZXNvdXJjZUZsYWdbMF0pOwotICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIE5vdEZvdW5kRXhjZXB0aW9uIG5ld0UgPSBuZXcgTm90Rm91bmRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIG5ld0UuaW5pdENhdXNlKGUpOwotICAgICAgICAgICAgdGhyb3cgbmV3RTsKLSAgICAgICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIE5vdEZvdW5kRXhjZXB0aW9uIG5ld0UgPSBuZXcgTm90Rm91bmRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIG5ld0UuaW5pdENhdXNlKGUpOwotICAgICAgICAgICAgdGhyb3cgbmV3RTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElucHV0U3RyZWFtIG9wZW5SYXdSZXNvdXJjZShpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiB2YWx1ZSA9IGdldFJlc291cmNlVmFsdWUoaWQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZyk7Ci0KLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFN0cmluZyBwYXRoID0gdmFsdWUuZ2V0U2Vjb25kKCkuZ2V0VmFsdWUoKTsKLQotICAgICAgICAgICAgaWYgKHBhdGggIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoaXMgaXMgYSBmaWxlCi0gICAgICAgICAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUocGF0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKGYuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBuaW5lLXBhdGNoIHJldHVybiBhIGN1c3RvbSBpbnB1dCBzdHJlYW0gc28gdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXIgbWV0aG9kcyAobWFpbmx5IGJpdG1hcCBmYWN0b3J5KSBjYW4gZGV0ZWN0IGl0J3MgYSA5LXBhdGNoCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgYWN0dWFsbHkgbG9hZCBpdCBhcyBhIDktcGF0Y2ggaW5zdGVhZCBvZiBhIG5vcm1hbCBiaXRtYXAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoTmluZVBhdGNoLkVYVEVOU0lPTl85UEFUQ0gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOaW5lUGF0Y2hJbnB1dFN0cmVhbShmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZUlucHV0U3RyZWFtKGYpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTm90Rm91bmRFeGNlcHRpb24gbmV3RSA9IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3RS5pbml0Q2F1c2UoZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXdFOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLQotICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkIHNpbmNlIHRoZSBtZXRob2QgYWJvdmUgYWx3YXlzIHRocm93cwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSW5wdXRTdHJlYW0gb3BlblJhd1Jlc291cmNlKGludCBpZCwgVHlwZWRWYWx1ZSB2YWx1ZSkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgZ2V0VmFsdWUoaWQsIHZhbHVlLCB0cnVlKTsKLQotICAgICAgICBTdHJpbmcgcGF0aCA9IHZhbHVlLnN0cmluZy50b1N0cmluZygpOwotCi0gICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKHBhdGgpOwotICAgICAgICBpZiAoZi5pc0ZpbGUoKSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIGEgbmluZS1wYXRjaCByZXR1cm4gYSBjdXN0b20gaW5wdXQgc3RyZWFtIHNvIHRoYXQKLSAgICAgICAgICAgICAgICAvLyBvdGhlciBtZXRob2RzIChtYWlubHkgYml0bWFwIGZhY3RvcnkpIGNhbiBkZXRlY3QgaXQncyBhIDktcGF0Y2gKLSAgICAgICAgICAgICAgICAvLyBhbmQgYWN0dWFsbHkgbG9hZCBpdCBhcyBhIDktcGF0Y2ggaW5zdGVhZCBvZiBhIG5vcm1hbCBiaXRtYXAKLSAgICAgICAgICAgICAgICBpZiAocGF0aC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKE5pbmVQYXRjaC5FWFRFTlNJT05fOVBBVENIKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5pbmVQYXRjaElucHV0U3RyZWFtKGYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVJbnB1dFN0cmVhbShmKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTm90Rm91bmRFeGNlcHRpb24gZXhjZXB0aW9uID0gbmV3IE5vdEZvdW5kRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uLmluaXRDYXVzZShlKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQXNzZXRGaWxlRGVzY3JpcHRvciBvcGVuUmF3UmVzb3VyY2VGZChpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1aWxkcyBhbmQgdGhyb3dzIGEge0BsaW5rIFJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbn0gYmFzZWQgb24gYSByZXNvdXJjZSBpZCBhbmQgYSByZXNvdXJjZSB0eXBlLgotICAgICAqIEBwYXJhbSBpZCB0aGUgaWQgb2YgdGhlIHJlc291cmNlCi0gICAgICogQHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCB0aHJvd0V4Y2VwdGlvbihpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIGZpcnN0IGdldCB0aGUgU3RyaW5nIHJlbGF0ZWQgdG8gdGhpcyBpZCBpbiB0aGUgZnJhbWV3b3JrCi0gICAgICAgIFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+IHJlc291cmNlSW5mbyA9IEJyaWRnZS5yZXNvbHZlUmVzb3VyY2VJZChpZCk7Ci0KLSAgICAgICAgLy8gaWYgdGhlIG5hbWUgaXMgdW5rbm93biBpbiB0aGUgZnJhbWV3b3JrLCBnZXQgaXQgZnJvbSB0aGUgY3VzdG9tIHZpZXcgbG9hZGVyLgotICAgICAgICBpZiAocmVzb3VyY2VJbmZvID09IG51bGwgJiYgbVByb2plY3RDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXNvdXJjZUluZm8gPSBtUHJvamVjdENhbGxiYWNrLnJlc29sdmVSZXNvdXJjZUlkKGlkKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBtZXNzYWdlID0gbnVsbDsKLSAgICAgICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtZXNzYWdlID0gU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kICUxJHMgcmVzb3VyY2UgbWF0Y2hpbmcgdmFsdWUgMHglMiRYIChyZXNvbHZlZCBuYW1lOiAlMyRzKSBpbiBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIiwKLSAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VJbmZvLmdldEZpcnN0KCksIGlkLCByZXNvdXJjZUluZm8uZ2V0U2Vjb25kKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgcmVzb2x2ZSByZXNvdXJjZSB2YWx1ZTogMHglMSRYLiIsIGlkKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihtZXNzYWdlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL0JyaWRnZVR5cGVkQXJyYXkuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvQnJpZGdlVHlwZWRBcnJheS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDZkMTM5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvQnJpZGdlVHlwZWRBcnJheS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuY29udGVudC5yZXM7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuQXR0clJlc291cmNlVmFsdWU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVuZGVyUmVzb3VyY2VzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXNvdXJjZVZhbHVlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5TdHlsZVJlc291cmNlVmFsdWU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5YbWxVdGlsczsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZUNvbnN0YW50czsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlQ29udGV4dDsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlWG1sQmxvY2tQYXJzZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlJlc291cmNlSGVscGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5SZXNvdXJjZVR5cGU7Ci0KLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXJfRGVsZWdhdGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiBUeXBlZEFycmF5IHRvIGhhbmRsZSBub24gY29tcGlsZWQgcmVzb3VyY2VzLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQnJpZGdlVHlwZWRBcnJheSBleHRlbmRzIFR5cGVkQXJyYXkgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBCcmlkZ2VSZXNvdXJjZXMgbUJyaWRnZVJlc291cmNlczsKLSAgICBwcml2YXRlIGZpbmFsIEJyaWRnZUNvbnRleHQgbUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1QbGF0Zm9ybUZpbGU7Ci0KLSAgICBwcml2YXRlIFJlc291cmNlVmFsdWVbXSBtUmVzb3VyY2VEYXRhOwotICAgIHByaXZhdGUgU3RyaW5nW10gbU5hbWVzOwotICAgIHByaXZhdGUgYm9vbGVhbltdIG1Jc0ZyYW1ld29yazsKLQotICAgIHB1YmxpYyBCcmlkZ2VUeXBlZEFycmF5KEJyaWRnZVJlc291cmNlcyByZXNvdXJjZXMsIEJyaWRnZUNvbnRleHQgY29udGV4dCwgaW50IGxlbiwKLSAgICAgICAgICAgIGJvb2xlYW4gcGxhdGZvcm1GaWxlKSB7Ci0gICAgICAgIHN1cGVyKG51bGwsIG51bGwsIG51bGwsIDApOwotICAgICAgICBtQnJpZGdlUmVzb3VyY2VzID0gcmVzb3VyY2VzOwotICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIG1QbGF0Zm9ybUZpbGUgPSBwbGF0Zm9ybUZpbGU7Ci0gICAgICAgIG1SZXNvdXJjZURhdGEgPSBuZXcgUmVzb3VyY2VWYWx1ZVtsZW5dOwotICAgICAgICBtTmFtZXMgPSBuZXcgU3RyaW5nW2xlbl07Ci0gICAgICAgIG1Jc0ZyYW1ld29yayA9IG5ldyBib29sZWFuW2xlbl07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQSBicmlkZ2Utc3BlY2lmaWMgbWV0aG9kIHRoYXQgc2V0cyBhIHZhbHVlIGluIHRoZSB0eXBlIGFycmF5Ci0gICAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgdmFsdWUgaW4gdGhlIFR5cGVkQXJyYXkKLSAgICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCi0gICAgICogQHBhcmFtIGlzRnJhbWV3b3JrIHdoZXRoZXIgdGhlIGF0dHJpYnV0ZSBpcyBpbiB0aGUgYW5kcm9pZCBuYW1lc3BhY2UuCi0gICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYnJpZGdlU2V0VmFsdWUoaW50IGluZGV4LCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBpc0ZyYW1ld29yaywgUmVzb3VyY2VWYWx1ZSB2YWx1ZSkgewotICAgICAgICBtUmVzb3VyY2VEYXRhW2luZGV4XSA9IHZhbHVlOwotICAgICAgICBtTmFtZXNbaW5kZXhdID0gbmFtZTsKLSAgICAgICAgbUlzRnJhbWV3b3JrW2luZGV4XSA9IGlzRnJhbWV3b3JrOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlYWxzIHRoZSBhcnJheSBhZnRlciBhbGwgY2FsbHMgdG8ge0BsaW5rICNicmlkZ2VTZXRWYWx1ZShpbnQsIFN0cmluZywgUmVzb3VyY2VWYWx1ZSl9IGhhdmUKLSAgICAgKiBiZWVuIGRvbmUuCi0gICAgICogPHAvPlRoaXMgYWxsb3dzIHRvIGNvbXB1dGUgdGhlIGxpc3Qgb2Ygbm9uIGRlZmF1bHQgdmFsdWVzLCBwZXJtaXR0aW5nCi0gICAgICoge0BsaW5rICNnZXRJbmRleENvdW50KCl9IHRvIHJldHVybiB0aGUgcHJvcGVyIHZhbHVlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNlYWxBcnJheSgpIHsKLSAgICAgICAgLy8gZmlsbHMgVHlwZWRBcnJheS5tSW5kaWNlcyB3aGljaCBpcyB1c2VkIHRvIGltcGxlbWVudCBnZXRJbmRleENvdW50L2dldEluZGV4QXQKLSAgICAgICAgLy8gZmlyc3QgY291bnQgdGhlIGFycmF5IHNpemUKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgZm9yIChSZXNvdXJjZVZhbHVlIGRhdGEgOiBtUmVzb3VyY2VEYXRhKSB7Ci0gICAgICAgICAgICBpZiAoZGF0YSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGFsbG9jYXRlIHRoZSB0YWJsZSB3aXRoIGFuIGV4dHJhIHRvIHN0b3JlIHRoZSBzaXplCi0gICAgICAgIG1JbmRpY2VzID0gbmV3IGludFtjb3VudCsxXTsKLSAgICAgICAgbUluZGljZXNbMF0gPSBjb3VudDsKLQotICAgICAgICAvLyBmaWxsIHRoZSBhcnJheSB3aXRoIHRoZSBpbmRpY2VzLgotICAgICAgICBpbnQgaW5kZXggPSAxOwotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBtUmVzb3VyY2VEYXRhLmxlbmd0aCA7IGkrKykgewotICAgICAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaV0gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1JbmRpY2VzW2luZGV4KytdID0gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHZhbHVlcyBpbiB0aGlzIGFycmF5LgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgbGVuZ3RoKCkgewotICAgICAgICByZXR1cm4gbVJlc291cmNlRGF0YS5sZW5ndGg7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBSZXNvdXJjZXMgb2JqZWN0IHRoaXMgYXJyYXkgd2FzIGxvYWRlZCBmcm9tLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXNvdXJjZXMgZ2V0UmVzb3VyY2VzKCkgewotICAgICAgICByZXR1cm4gbUJyaWRnZVJlc291cmNlczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgc3R5bGVkIHN0cmluZyB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQ2hhclNlcXVlbmNlIGhvbGRpbmcgc3RyaW5nIGRhdGEuICBNYXkgYmUgc3R5bGVkLiAgUmV0dXJucwotICAgICAqICAgICAgICAgbnVsbCBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDaGFyU2VxdWVuY2UgZ2V0VGV4dChpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVJlc291cmNlRGF0YVtpbmRleF0gIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBzdHlsZWQgc3RyaW5ncyEKLSAgICAgICAgICAgIHJldHVybiBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXRWYWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIHN0cmluZyB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU3RyaW5nIGhvbGRpbmcgc3RyaW5nIGRhdGEuICBBbnkgc3R5bGluZyBpbmZvcm1hdGlvbiBpcwotICAgICAqIHJlbW92ZWQuICBSZXR1cm5zIG51bGwgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZyhpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVJlc291cmNlRGF0YVtpbmRleF0gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1SZXNvdXJjZURhdGFbaW5kZXhdLmdldFZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgYm9vbGVhbiB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcGFyYW0gZGVmVmFsdWUgVmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGRlZmluZWQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEF0dHJpYnV0ZSBib29sZWFuIHZhbHVlLCBvciBkZWZWYWx1ZSBpZiBub3QgZGVmaW5lZC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuKGludCBpbmRleCwgYm9vbGVhbiBkZWZWYWx1ZSkgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1SZXNvdXJjZURhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVJlc291cmNlRGF0YVtpbmRleF0gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHMgPSBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXRWYWx1ZSgpOwotICAgICAgICBpZiAocyAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gWG1sVXRpbHMuY29udmVydFZhbHVlVG9Cb29sZWFuKHMsIGRlZlZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgaW50ZWdlciB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcGFyYW0gZGVmVmFsdWUgVmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGRlZmluZWQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEF0dHJpYnV0ZSBpbnQgdmFsdWUsIG9yIGRlZlZhbHVlIGlmIG5vdCBkZWZpbmVkLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0SW50KGludCBpbmRleCwgaW50IGRlZlZhbHVlKSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVJlc291cmNlRGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtUmVzb3VyY2VEYXRhW2luZGV4XSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcyA9IG1SZXNvdXJjZURhdGFbaW5kZXhdLmdldFZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKFJlbmRlclJlc291cmNlcy5SRUZFUkVOQ0VfTlVMTC5lcXVhbHMocykpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzID09IG51bGwgfHwgcy5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIFhtbFV0aWxzLmNvbnZlcnRWYWx1ZVRvSW50KHMsIGRlZlZhbHVlKTsKLSAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZpZWxkIGlzIG5vdCBudWxsIGFuZCBpcyBub3QgYW4gaW50ZWdlci4KLSAgICAgICAgLy8gQ2hlY2sgZm9yIHBvc3NpYmxlIGNvbnN0YW50cyBhbmQgdHJ5IHRvIGZpbmQgdGhlbS4KLSAgICAgICAgLy8gR2V0IHRoZSBtYXAgb2YgYXR0cmlidXRlLWNvbnN0YW50IC0+IEludGVnZXJWYWx1ZQotICAgICAgICBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBtYXAgPSBudWxsOwotICAgICAgICBpZiAobUlzRnJhbWV3b3JrW2luZGV4XSkgewotICAgICAgICAgICAgbWFwID0gQnJpZGdlLmdldEVudW1WYWx1ZXMobU5hbWVzW2luZGV4XSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBnZXQgdGhlIHN0eWxlYWJsZSBtYXRjaGluZyB0aGUgcmVzb2x2ZWQgbmFtZQotICAgICAgICAgICAgUmVuZGVyUmVzb3VyY2VzIHJlcyA9IG1Db250ZXh0LmdldFJlbmRlclJlc291cmNlcygpOwotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSBhdHRyID0gcmVzLmdldFByb2plY3RSZXNvdXJjZShSZXNvdXJjZVR5cGUuQVRUUiwgbU5hbWVzW2luZGV4XSk7Ci0gICAgICAgICAgICBpZiAoYXR0ciBpbnN0YW5jZW9mIEF0dHJSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgbWFwID0gKChBdHRyUmVzb3VyY2VWYWx1ZSkgYXR0cikuZ2V0QXR0cmlidXRlVmFsdWVzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIGFjY3VtdWxhdG9yIHRvIHN0b3JlIHRoZSB2YWx1ZSBvZiB0aGUgMSsgY29uc3RhbnRzLgotICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7Ci0KLSAgICAgICAgICAgIC8vIHNwbGl0IHRoZSB2YWx1ZSBpbiBjYXNlIHRoaXMgaXMgYSBtaXggb2Ygc2V2ZXJhbCBmbGFncy4KLSAgICAgICAgICAgIFN0cmluZ1tdIGtleXdvcmRzID0gcy5zcGxpdCgiXFx8Iik7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZyBrZXl3b3JkIDoga2V5d29yZHMpIHsKLSAgICAgICAgICAgICAgICBJbnRlZ2VyIGkgPSBtYXAuZ2V0KGtleXdvcmQudHJpbSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoaSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBpLmludFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLndhcm5pbmcoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfRk9STUFULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVzXCIgaW4gYXR0cmlidXRlIFwiJTIkc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZCwgbU5hbWVzW2luZGV4XSksIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIGZsb2F0IHZhbHVlIGZvciB0aGUgYXR0cmlidXRlIGF0IDx2YXI+aW5kZXg8L3Zhcj4uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgYXR0cmlidXRlIHRvIHJldHJpZXZlLgotICAgICAqCi0gICAgICogQHJldHVybiBBdHRyaWJ1dGUgZmxvYXQgdmFsdWUsIG9yIGRlZlZhbHVlIGlmIG5vdCBkZWZpbmVkLi4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0RmxvYXQoaW50IGluZGV4LCBmbG9hdCBkZWZWYWx1ZSkgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1SZXNvdXJjZURhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVJlc291cmNlRGF0YVtpbmRleF0gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHMgPSBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXRWYWx1ZSgpOwotCi0gICAgICAgIGlmIChzICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0LnBhcnNlRmxvYXQocyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS53YXJuaW5nKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJXNcIiBpbiBhdHRyaWJ1dGUgXCIlMiRzXCIgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBmbG9hdC4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMsIG1OYW1lc1tpbmRleF0pLCBudWxsIC8qZGF0YSovKTsKLQotICAgICAgICAgICAgICAgIC8vIHdlJ2xsIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSBiZWxvdy4KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIGNvbG9yIHZhbHVlIGZvciB0aGUgYXR0cmlidXRlIGF0IDx2YXI+aW5kZXg8L3Zhcj4uICBJZgotICAgICAqIHRoZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcyBhIGNvbG9yIHJlc291cmNlIGhvbGRpbmcgYSBjb21wbGV4Ci0gICAgICoge0BsaW5rIGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3R9LCB0aGVuIHRoZSBkZWZhdWx0IGNvbG9yIGZyb20KLSAgICAgKiB0aGUgc2V0IGlzIHJldHVybmVkLgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcGFyYW0gZGVmVmFsdWUgVmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGRlZmluZWQgb3IKLSAgICAgKiAgICAgICAgICAgICAgICAgbm90IGEgcmVzb3VyY2UuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEF0dHJpYnV0ZSBjb2xvciB2YWx1ZSwgb3IgZGVmVmFsdWUgaWYgbm90IGRlZmluZWQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRDb2xvcihpbnQgaW5kZXgsIGludCBkZWZWYWx1ZSkgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1SZXNvdXJjZURhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVJlc291cmNlRGF0YVtpbmRleF0gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29sb3JTdGF0ZUxpc3QgY29sb3JTdGF0ZUxpc3QgPSBSZXNvdXJjZUhlbHBlci5nZXRDb2xvclN0YXRlTGlzdCgKLSAgICAgICAgICAgICAgICBtUmVzb3VyY2VEYXRhW2luZGV4XSwgbUNvbnRleHQpOwotICAgICAgICBpZiAoY29sb3JTdGF0ZUxpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGNvbG9yU3RhdGVMaXN0LmdldERlZmF1bHRDb2xvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSBDb2xvclN0YXRlTGlzdCBmb3IgdGhlIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+LgotICAgICAqIFRoZSB2YWx1ZSBtYXkgYmUgZWl0aGVyIGEgc2luZ2xlIHNvbGlkIGNvbG9yIG9yIGEgcmVmZXJlbmNlIHRvCi0gICAgICogYSBjb2xvciBvciBjb21wbGV4IHtAbGluayBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0fSBkZXNjcmlwdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIENvbG9yU3RhdGVMaXN0IGZvciB0aGUgYXR0cmlidXRlLCBvciBudWxsIGlmIG5vdCBkZWZpbmVkLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb2xvclN0YXRlTGlzdCBnZXRDb2xvclN0YXRlTGlzdChpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVJlc291cmNlRGF0YVtpbmRleF0gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlID0gbVJlc291cmNlRGF0YVtpbmRleF07Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHJlc1ZhbHVlLmdldFZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFJlbmRlclJlc291cmNlcy5SRUZFUkVOQ0VfTlVMTC5lcXVhbHModmFsdWUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGxldCB0aGUgZnJhbWV3b3JrIGluZmxhdGUgdGhlIENvbG9yU3RhdGVMaXN0IGZyb20gdGhlIFhNTCBmaWxlLgotICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZSh2YWx1ZSk7Ci0gICAgICAgIGlmIChmLmlzRmlsZSgpKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIFhtbFB1bGxQYXJzZXIgcGFyc2VyID0gUGFyc2VyRmFjdG9yeS5jcmVhdGUoZik7Ci0KLSAgICAgICAgICAgICAgICBCcmlkZ2VYbWxCbG9ja1BhcnNlciBibG9ja1BhcnNlciA9IG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlciwgbUNvbnRleHQsIHJlc1ZhbHVlLmlzRnJhbWV3b3JrKCkpOwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2xvclN0YXRlTGlzdC5jcmVhdGVGcm9tWG1sKG1Db250ZXh0LmdldFJlc291cmNlcygpLCBibG9ja1BhcnNlcik7Ci0gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tQYXJzZXIuZW5zdXJlUG9wcGVkKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjb25maWd1cmUgcGFyc2VyIGZvciAiICsgdmFsdWUsIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGVycm9yIGFuZCBub3Qgd2FybmluZyBzaW5jZSB0aGUgZmlsZSBleGlzdGVuY2UgaXMgY2hlY2tlZCBiZWZvcmUKLSAgICAgICAgICAgICAgICAvLyBhdHRlbXB0aW5nIHRvIHBhcnNlIGl0LgotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX1JFU09VUkNFU19SRUFELAotICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBwYXJzZSBmaWxlICIgKyB2YWx1ZSwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbnQgY29sb3IgPSBSZXNvdXJjZUhlbHBlci5nZXRDb2xvcih2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3JTdGF0ZUxpc3QudmFsdWVPZihjb2xvcik7Ci0gICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfRk9STUFULCBlLmdldE1lc3NhZ2UoKSwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgaW50ZWdlciB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcGFyYW0gZGVmVmFsdWUgVmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGRlZmluZWQgb3IKLSAgICAgKiAgICAgICAgICAgICAgICAgbm90IGEgcmVzb3VyY2UuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEF0dHJpYnV0ZSBpbnRlZ2VyIHZhbHVlLCBvciBkZWZWYWx1ZSBpZiBub3QgZGVmaW5lZC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEludGVnZXIoaW50IGluZGV4LCBpbnQgZGVmVmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIGdldEludChpbmRleCwgZGVmVmFsdWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIGEgZGltZW5zaW9uYWwgdW5pdCBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPi4gIFVuaXQKLSAgICAgKiBjb252ZXJzaW9ucyBhcmUgYmFzZWQgb24gdGhlIGN1cnJlbnQge0BsaW5rIERpc3BsYXlNZXRyaWNzfQotICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2VzIHRoaXMge0BsaW5rIFR5cGVkQXJyYXl9IG9iamVjdAotICAgICAqIGNhbWUgZnJvbS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICogQHBhcmFtIGRlZlZhbHVlIFZhbHVlIHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkIG9yCi0gICAgICogICAgICAgICAgICAgICAgIG5vdCBhIHJlc291cmNlLgotICAgICAqCi0gICAgICogQHJldHVybiBBdHRyaWJ1dGUgZGltZW5zaW9uIHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIGFwcHJvcHJpYXRlCi0gICAgICogbWV0cmljLCBvciBkZWZWYWx1ZSBpZiBub3QgZGVmaW5lZC4KLSAgICAgKgotICAgICAqIEBzZWUgI2dldERpbWVuc2lvblBpeGVsT2Zmc2V0Ci0gICAgICogQHNlZSAjZ2V0RGltZW5zaW9uUGl4ZWxTaXplCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldERpbWVuc2lvbihpbnQgaW5kZXgsIGZsb2F0IGRlZlZhbHVlKSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVJlc291cmNlRGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtUmVzb3VyY2VEYXRhW2luZGV4XSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcyA9IG1SZXNvdXJjZURhdGFbaW5kZXhdLmdldFZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKHMgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9IGVsc2UgaWYgKHMuZXF1YWxzKEJyaWRnZUNvbnN0YW50cy5NQVRDSF9QQVJFTlQpIHx8Ci0gICAgICAgICAgICAgICAgcy5lcXVhbHMoQnJpZGdlQ29uc3RhbnRzLkZJTExfUEFSRU5UKSkgewotICAgICAgICAgICAgcmV0dXJuIExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQ7Ci0gICAgICAgIH0gZWxzZSBpZiAocy5lcXVhbHMoQnJpZGdlQ29uc3RhbnRzLldSQVBfQ09OVEVOVCkpIHsKLSAgICAgICAgICAgIHJldHVybiBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UOwotICAgICAgICB9IGVsc2UgaWYgKFJlbmRlclJlc291cmNlcy5SRUZFUkVOQ0VfTlVMTC5lcXVhbHMocykpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChSZXNvdXJjZUhlbHBlci5wYXJzZUZsb2F0QXR0cmlidXRlKG1OYW1lc1tpbmRleF0sIHMsIG1WYWx1ZSwgdHJ1ZSAvKnJlcXVpcmVVbml0Ki8pKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVZhbHVlLmdldERpbWVuc2lvbihtQnJpZGdlUmVzb3VyY2VzLmdldERpc3BsYXlNZXRyaWNzKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbG9va3MgbGlrZSB3ZSB3ZXJlIHVuYWJsZSB0byByZXNvbHZlIHRoZSBkaW1lbnNpb24gdmFsdWUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLndhcm5pbmcoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfRk9STUFULAotICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICJcIiUxJHNcIiBpbiBhdHRyaWJ1dGUgXCIlMiRzXCIgaXMgbm90IGEgdmFsaWQgZm9ybWF0LiIsCi0gICAgICAgICAgICAgICAgICAgIHMsIG1OYW1lc1tpbmRleF0pLCBudWxsIC8qZGF0YSovKTsKLQotICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgYSBkaW1lbnNpb25hbCB1bml0IGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+IGZvciB1c2UKLSAgICAgKiBhcyBhbiBvZmZzZXQgaW4gcmF3IHBpeGVscy4gIFRoaXMgaXMgdGhlIHNhbWUgYXMKLSAgICAgKiB7QGxpbmsgI2dldERpbWVuc2lvbn0sIGV4Y2VwdCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgY29udmVydGVkIHRvCi0gICAgICogaW50ZWdlciBwaXhlbHMgZm9yIHlvdS4gIEFuIG9mZnNldCBjb252ZXJzaW9uIGludm9sdmVzIHNpbXBseQotICAgICAqIHRydW5jYXRpbmcgdGhlIGJhc2UgdmFsdWUgdG8gYW4gaW50ZWdlci4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICogQHBhcmFtIGRlZlZhbHVlIFZhbHVlIHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkIG9yCi0gICAgICogICAgICAgICAgICAgICAgIG5vdCBhIHJlc291cmNlLgotICAgICAqCi0gICAgICogQHJldHVybiBBdHRyaWJ1dGUgZGltZW5zaW9uIHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIGFwcHJvcHJpYXRlCi0gICAgICogbWV0cmljIGFuZCB0cnVuY2F0ZWQgdG8gaW50ZWdlciBwaXhlbHMsIG9yIGRlZlZhbHVlIGlmIG5vdCBkZWZpbmVkLgotICAgICAqCi0gICAgICogQHNlZSAjZ2V0RGltZW5zaW9uCi0gICAgICogQHNlZSAjZ2V0RGltZW5zaW9uUGl4ZWxTaXplCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXREaW1lbnNpb25QaXhlbE9mZnNldChpbnQgaW5kZXgsIGludCBkZWZWYWx1ZSkgewotICAgICAgICByZXR1cm4gKGludCkgZ2V0RGltZW5zaW9uKGluZGV4LCBkZWZWYWx1ZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgYSBkaW1lbnNpb25hbCB1bml0IGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+IGZvciB1c2UKLSAgICAgKiBhcyBhIHNpemUgaW4gcmF3IHBpeGVscy4gIFRoaXMgaXMgdGhlIHNhbWUgYXMKLSAgICAgKiB7QGxpbmsgI2dldERpbWVuc2lvbn0sIGV4Y2VwdCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgY29udmVydGVkIHRvCi0gICAgICogaW50ZWdlciBwaXhlbHMgZm9yIHVzZSBhcyBhIHNpemUuICBBIHNpemUgY29udmVyc2lvbiBpbnZvbHZlcwotICAgICAqIHJvdW5kaW5nIHRoZSBiYXNlIHZhbHVlLCBhbmQgZW5zdXJpbmcgdGhhdCBhIG5vbi16ZXJvIGJhc2UgdmFsdWUKLSAgICAgKiBpcyBhdCBsZWFzdCBvbmUgcGl4ZWwgaW4gc2l6ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICogQHBhcmFtIGRlZlZhbHVlIFZhbHVlIHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkIG9yCi0gICAgICogICAgICAgICAgICAgICAgIG5vdCBhIHJlc291cmNlLgotICAgICAqCi0gICAgICogQHJldHVybiBBdHRyaWJ1dGUgZGltZW5zaW9uIHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIGFwcHJvcHJpYXRlCi0gICAgICogbWV0cmljIGFuZCB0cnVuY2F0ZWQgdG8gaW50ZWdlciBwaXhlbHMsIG9yIGRlZlZhbHVlIGlmIG5vdCBkZWZpbmVkLgotICAgICAqCi0gICAgICogQHNlZSAjZ2V0RGltZW5zaW9uCi0gICAgICogQHNlZSAjZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldERpbWVuc2lvblBpeGVsU2l6ZShpbnQgaW5kZXgsIGludCBkZWZWYWx1ZSkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIGdldERpbWVuc2lvbihpbmRleCk7Ci0gICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaW5kZXhdICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcyA9IG1SZXNvdXJjZURhdGFbaW5kZXhdLmdldFZhbHVlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGxvb2tzIGxpa2Ugd2Ugd2VyZSB1bmFibGUgdG8gcmVzb2x2ZSB0aGUgZGltZW5zaW9uIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS53YXJuaW5nKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIlMSRzXCIgaW4gYXR0cmlidXRlIFwiJTIkc1wiIGlzIG5vdCBhIHZhbGlkIGZvcm1hdC4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLCBtTmFtZXNbaW5kZXhdKSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTcGVjaWFsIHZlcnNpb24gb2Yge0BsaW5rICNnZXREaW1lbnNpb25QaXhlbFNpemV9IGZvciByZXRyaWV2aW5nCi0gICAgICoge0BsaW5rIGFuZHJvaWQudmlldy5WaWV3R3JvdXB9J3MgbGF5b3V0X3dpZHRoIGFuZCBsYXlvdXRfaGVpZ2h0Ci0gICAgICogYXR0cmlidXRlcy4gIFRoaXMgaXMgb25seSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOyBhcHBsaWNhdGlvbnMKLSAgICAgKiBzaG91bGQgdXNlIHtAbGluayAjZ2V0RGltZW5zaW9uUGl4ZWxTaXplfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiB0aGUgYXR0cmlidXRlIHRvIHJldHJpZXZlLgotICAgICAqIEBwYXJhbSBuYW1lIFRleHR1YWwgbmFtZSBvZiBhdHRyaWJ1dGUgZm9yIGVycm9yIHJlcG9ydGluZy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQXR0cmlidXRlIGRpbWVuc2lvbiB2YWx1ZSBtdWx0aXBsaWVkIGJ5IHRoZSBhcHByb3ByaWF0ZQotICAgICAqIG1ldHJpYyBhbmQgdHJ1bmNhdGVkIHRvIGludGVnZXIgcGl4ZWxzLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0TGF5b3V0RGltZW5zaW9uKGludCBpbmRleCwgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24KLSAgICAgICAgICAgIHJldHVybiBnZXREaW1lbnNpb24oaW5kZXgpOwotICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLQotICAgICAgICAgICAgaWYgKExheW91dEluZmxhdGVyX0RlbGVnYXRlLnNJc0luSW5jbHVkZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS53YXJuaW5nKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICAgICAgIllvdSBtdXN0IHN1cHBseSBhICIgKyBuYW1lICsgIiBhdHRyaWJ1dGUuIiwgbnVsbCk7Ci0KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRMYXlvdXREaW1lbnNpb24oaW50IGluZGV4LCBpbnQgZGVmVmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIGdldERpbWVuc2lvblBpeGVsU2l6ZShpbmRleCwgZGVmVmFsdWUpOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGdldERpbWVuc2lvbihpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaW5kZXhdID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcyA9IG1SZXNvdXJjZURhdGFbaW5kZXhdLmdldFZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKHMgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKLSAgICAgICAgfSBlbHNlIGlmIChzLmVxdWFscyhCcmlkZ2VDb25zdGFudHMuTUFUQ0hfUEFSRU5UKSB8fAotICAgICAgICAgICAgICAgIHMuZXF1YWxzKEJyaWRnZUNvbnN0YW50cy5GSUxMX1BBUkVOVCkpIHsKLSAgICAgICAgICAgIHJldHVybiBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UOwotICAgICAgICB9IGVsc2UgaWYgKHMuZXF1YWxzKEJyaWRnZUNvbnN0YW50cy5XUkFQX0NPTlRFTlQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVDsKLSAgICAgICAgfSBlbHNlIGlmIChSZW5kZXJSZXNvdXJjZXMuUkVGRVJFTkNFX05VTEwuZXF1YWxzKHMpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFJlc291cmNlSGVscGVyLnBhcnNlRmxvYXRBdHRyaWJ1dGUobU5hbWVzW2luZGV4XSwgcywgbVZhbHVlLCB0cnVlIC8qcmVxdWlyZVVuaXQqLykpIHsKLSAgICAgICAgICAgIGZsb2F0IGYgPSBtVmFsdWUuZ2V0RGltZW5zaW9uKG1CcmlkZ2VSZXNvdXJjZXMuZ2V0RGlzcGxheU1ldHJpY3MoKSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIGludCByZXMgPSAoaW50KShmKzAuNWYpOwotICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSByZXR1cm4gcmVzOwotICAgICAgICAgICAgaWYgKGYgPT0gMCkgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpZiAoZiA+IDApIHJldHVybiAxOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSBhIGZyYWN0aW9uYWwgdW5pdCBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICogQHBhcmFtIGJhc2UgVGhlIGJhc2UgdmFsdWUgb2YgdGhpcyBmcmFjdGlvbi4gIEluIG90aGVyIHdvcmRzLCBhCi0gICAgICogICAgICAgICAgICAgc3RhbmRhcmQgZnJhY3Rpb24gaXMgbXVsdGlwbGllZCBieSB0aGlzIHZhbHVlLgotICAgICAqIEBwYXJhbSBwYmFzZSBUaGUgcGFyZW50IGJhc2UgdmFsdWUgb2YgdGhpcyBmcmFjdGlvbi4gIEluIG90aGVyCi0gICAgICogICAgICAgICAgICAgd29yZHMsIGEgcGFyZW50IGZyYWN0aW9uIChubiVwKSBpcyBtdWx0aXBsaWVkIGJ5IHRoaXMKLSAgICAgKiAgICAgICAgICAgICB2YWx1ZS4KLSAgICAgKiBAcGFyYW0gZGVmVmFsdWUgVmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGRlZmluZWQgb3IKLSAgICAgKiAgICAgICAgICAgICAgICAgbm90IGEgcmVzb3VyY2UuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEF0dHJpYnV0ZSBmcmFjdGlvbmFsIHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIGFwcHJvcHJpYXRlCi0gICAgICogYmFzZSB2YWx1ZSwgb3IgZGVmVmFsdWUgaWYgbm90IGRlZmluZWQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldEZyYWN0aW9uKGludCBpbmRleCwgaW50IGJhc2UsIGludCBwYmFzZSwgZmxvYXQgZGVmVmFsdWUpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaW5kZXhdID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyB2YWx1ZSA9IG1SZXNvdXJjZURhdGFbaW5kZXhdLmdldFZhbHVlKCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoUmVzb3VyY2VIZWxwZXIucGFyc2VGbG9hdEF0dHJpYnV0ZShtTmFtZXNbaW5kZXhdLCB2YWx1ZSwgbVZhbHVlLAotICAgICAgICAgICAgICAgIGZhbHNlIC8qcmVxdWlyZVVuaXQqLykpIHsKLSAgICAgICAgICAgIHJldHVybiBtVmFsdWUuZ2V0RnJhY3Rpb24oYmFzZSwgcGJhc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbG9va3MgbGlrZSB3ZSB3ZXJlIHVuYWJsZSB0byByZXNvbHZlIHRoZSBmcmFjdGlvbiB2YWx1ZQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkud2FybmluZyhMYXlvdXRMb2cuVEFHX1JFU09VUkNFU19GT1JNQVQsCi0gICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIlwiJTEkc1wiIGluIGF0dHJpYnV0ZSBcIiUyJHNcIiBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgZnJhY3Rpb24uIiwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUsIG1OYW1lc1tpbmRleF0pLCBudWxsIC8qZGF0YSovKTsKLQotICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIHJlc291cmNlIGlkZW50aWZpZXIgZm9yIHRoZSBhdHRyaWJ1dGUgYXQKLSAgICAgKiA8dmFyPmluZGV4PC92YXI+LiAgTm90ZSB0aGF0IGF0dHJpYnV0ZSByZXNvdXJjZSBhcyByZXNvbHZlZCB3aGVuCi0gICAgICogdGhlIG92ZXJhbGwge0BsaW5rIFR5cGVkQXJyYXl9IG9iamVjdCBpcyByZXRyaWV2ZWQuICBBcyBhCi0gICAgICogcmVzdWx0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSByZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZQotICAgICAqIGZpbmFsIHJlc291cmNlIHZhbHVlIHRoYXQgd2FzIGZvdW5kLCA8ZW0+bm90PC9lbT4gbmVjZXNzYXJpbHkgdGhlCi0gICAgICogb3JpZ2luYWwgcmVzb3VyY2UgdGhhdCB3YXMgc3BlY2lmaWVkIGJ5IHRoZSBhdHRyaWJ1dGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgYXR0cmlidXRlIHRvIHJldHJpZXZlLgotICAgICAqIEBwYXJhbSBkZWZWYWx1ZSBWYWx1ZSB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZCBvcgotICAgICAqICAgICAgICAgICAgICAgICBub3QgYSByZXNvdXJjZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQXR0cmlidXRlIHJlc291cmNlIGlkZW50aWZpZXIsIG9yIGRlZlZhbHVlIGlmIG5vdCBkZWZpbmVkLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0UmVzb3VyY2VJZChpbnQgaW5kZXgsIGludCBkZWZWYWx1ZSkgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1SZXNvdXJjZURhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBnZXQgdGhlIFJlc291cmNlIGZvciB0aGlzIGluZGV4Ci0gICAgICAgIFJlc291cmNlVmFsdWUgcmVzVmFsdWUgPSBtUmVzb3VyY2VEYXRhW2luZGV4XTsKLQotICAgICAgICAvLyBubyBkYXRhLCByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIGlmIChyZXNWYWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIGEgc3R5bGUgcmVzb3VyY2UKLSAgICAgICAgaWYgKHJlc1ZhbHVlIGluc3RhbmNlb2YgU3R5bGVSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICAvLyBnZXQgdGhlIGlkIHRoYXQgd2lsbCByZXByZXNlbnQgdGhpcyBzdHlsZS4KLSAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXREeW5hbWljSWRCeVN0eWxlKChTdHlsZVJlc291cmNlVmFsdWUpcmVzVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFJlbmRlclJlc291cmNlcy5SRUZFUkVOQ0VfTlVMTC5lcXVhbHMocmVzVmFsdWUuZ2V0VmFsdWUoKSkpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIGEgcmVmZXJlbmNlIHRvIGEgcmVzb3VyY2UsIGFuZCBub3QgYSBkZWNsYXJhdGlvbiBvZiBhbiBpZCAoQCtpZCksCi0gICAgICAgIC8vIHRoZW4gdGhlIHhtbCBhdHRyaWJ1dGUgdmFsdWUgd2FzICJyZXNvbHZlZCIgd2hpY2ggbGVhZHMgdXMgdG8gYSBSZXNvdXJjZVZhbHVlIHdpdGggYQotICAgICAgICAvLyB2YWxpZCBnZXRUeXBlKCkgYW5kIGdldE5hbWUoKSByZXR1cm5pbmcgYSByZXNvdXJjZSBuYW1lLgotICAgICAgICAvLyAoYW5kIGdldFZhbHVlKCkgcmV0dXJuaW5nIG51bGwhKS4gV2UgbmVlZCB0byBoYW5kbGUgdGhpcyEKLSAgICAgICAgaWYgKHJlc1ZhbHVlLmdldFJlc291cmNlVHlwZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBmcmFtZXdvcmsgaWQKLSAgICAgICAgICAgIGlmIChtUGxhdGZvcm1GaWxlIHx8IHJlc1ZhbHVlLmlzRnJhbWV3b3JrKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBsb29rIGZvciBpZE5hbWUgaW4gdGhlIGFuZHJvaWQgUiBjbGFzc2VzCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1Db250ZXh0LmdldEZyYW1ld29ya1Jlc291cmNlVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNWYWx1ZS5nZXRSZXNvdXJjZVR5cGUoKSwgcmVzVmFsdWUuZ2V0TmFtZSgpLCBkZWZWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGxvb2sgZm9yIGlkTmFtZSBpbiB0aGUgcHJvamVjdCBSIGNsYXNzLgotICAgICAgICAgICAgcmV0dXJuIG1Db250ZXh0LmdldFByb2plY3RSZXNvdXJjZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICByZXNWYWx1ZS5nZXRSZXNvdXJjZVR5cGUoKSwgcmVzVmFsdWUuZ2V0TmFtZSgpLCBkZWZWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBlbHNlLCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSwgYW5kIHJlc29sdmUgaXQgc29tZWhvdy4KLSAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVzVmFsdWUuZ2V0VmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBqdXN0IGFuIGludGVnZXIsIHJldHVybiBpdC4KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGludCBpID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoSW50ZWdlci50b1N0cmluZyhpKS5lcXVhbHModmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgIH0KLQotICAgICAgICAvLyBIYW5kbGUgdGhlIEBpZC88bmFtZT4sIEAraWQvPG5hbWU+IGFuZCBAYW5kcm9pZDppZC88bmFtZT4KLSAgICAgICAgLy8gV2UgbmVlZCB0byByZXR1cm4gdGhlIGV4YWN0IHZhbHVlIHRoYXQgd2FzIGNvbXBpbGVkIChmcm9tIHRoZSB2YXJpb3VzIFIgY2xhc3NlcyksCi0gICAgICAgIC8vIGFzIHRoZXNlIHZhbHVlcyBjYW4gYmUgcmV1c2VkIGludGVybmFsbHkgd2l0aCBjYWxscyB0byBmaW5kVmlld0J5SWQoKS4KLSAgICAgICAgLy8gVGhlcmUncyBhIHRyaWNrIHdpdGggcGxhdGZvcm0gbGF5b3V0cyB0aGF0IG5vdCB1c2UgImFuZHJvaWQ6IiBidXQgdGhlaXIgSURzIGFyZSBpbgotICAgICAgICAvLyBmYWN0IGluIHRoZSBhbmRyb2lkLlIgYW5kIGNvbS5hbmRyb2lkLmludGVybmFsLlIgY2xhc3Nlcy4KLSAgICAgICAgLy8gVGhlIGZpZWxkIG1QbGF0Zm9ybUZpbGUgd2lsbCBpbmRpY2F0ZSB0aGF0IGFsbCBJRHMgYXJlIHRvIGJlIGxvb2tlZCB1cCBpbiB0aGUgYW5kcm9pZCBSCi0gICAgICAgIC8vIGNsYXNzZXMgZXhjbHVzaXZlbHkuCi0KLSAgICAgICAgLy8gaWYgdGhpcyBpcyBhIHJlZmVyZW5jZSB0byBhbiBpZCwgZmluZCBpdC4KLSAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoIkBpZC8iKSB8fCB2YWx1ZS5zdGFydHNXaXRoKCJAKyIpIHx8Ci0gICAgICAgICAgICAgICAgdmFsdWUuc3RhcnRzV2l0aCgiQGFuZHJvaWQ6aWQvIikpIHsKLQotICAgICAgICAgICAgaW50IHBvcyA9IHZhbHVlLmluZGV4T2YoJy8nKTsKLSAgICAgICAgICAgIFN0cmluZyBpZE5hbWUgPSB2YWx1ZS5zdWJzdHJpbmcocG9zICsgMSk7Ci0KLSAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBmcmFtZXdvcmsgaWQKLSAgICAgICAgICAgIGlmIChtUGxhdGZvcm1GaWxlIHx8IHZhbHVlLnN0YXJ0c1dpdGgoIkBhbmRyb2lkIikgfHwgdmFsdWUuc3RhcnRzV2l0aCgiQCthbmRyb2lkIikpIHsKLSAgICAgICAgICAgICAgICAvLyBsb29rIGZvciBpZE5hbWUgaW4gdGhlIGFuZHJvaWQgUiBjbGFzc2VzCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1Db250ZXh0LmdldEZyYW1ld29ya1Jlc291cmNlVmFsdWUoUmVzb3VyY2VUeXBlLklELCBpZE5hbWUsIGRlZlZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbG9vayBmb3IgaWROYW1lIGluIHRoZSBwcm9qZWN0IFIgY2xhc3MuCi0gICAgICAgICAgICByZXR1cm4gbUNvbnRleHQuZ2V0UHJvamVjdFJlc291cmNlVmFsdWUoUmVzb3VyY2VUeXBlLklELCBpZE5hbWUsIGRlZlZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBpZCB2YWxpZCByZWZlcmVuY2U/IHJlc29sdmUgaXQKLSAgICAgICAgSW50ZWdlciBpZFZhbHVlID0gbnVsbDsKLQotICAgICAgICBpZiAocmVzVmFsdWUuaXNGcmFtZXdvcmsoKSkgewotICAgICAgICAgICAgaWRWYWx1ZSA9IEJyaWRnZS5nZXRSZXNvdXJjZUlkKHJlc1ZhbHVlLmdldFJlc291cmNlVHlwZSgpLAotICAgICAgICAgICAgICAgICAgICByZXNWYWx1ZS5nZXROYW1lKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWRWYWx1ZSA9IG1Db250ZXh0LmdldFByb2plY3RDYWxsYmFjaygpLmdldFJlc291cmNlSWQoCi0gICAgICAgICAgICAgICAgICAgIHJlc1ZhbHVlLmdldFJlc291cmNlVHlwZSgpLCByZXNWYWx1ZS5nZXROYW1lKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlkVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGlkVmFsdWUuaW50VmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS53YXJuaW5nKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX1JFU09MVkUsCi0gICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byByZXNvbHZlIGlkIFwiJTEkc1wiIGZvciBhdHRyaWJ1dGUgXCIlMiRzXCIiLCB2YWx1ZSwgbU5hbWVzW2luZGV4XSksCi0gICAgICAgICAgICAgICAgICAgIHJlc1ZhbHVlKTsKLQotICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIERyYXdhYmxlIGZvciB0aGUgYXR0cmlidXRlIGF0IDx2YXI+aW5kZXg8L3Zhcj4uICBUaGlzCi0gICAgICogZ2V0cyB0aGUgcmVzb3VyY2UgSUQgb2YgdGhlIHNlbGVjdGVkIGF0dHJpYnV0ZSwgYW5kIHVzZXMKLSAgICAgKiB7QGxpbmsgUmVzb3VyY2VzI2dldERyYXdhYmxlIFJlc291cmNlcy5nZXREcmF3YWJsZX0gb2YgdGhlIG93bmluZwotICAgICAqIFJlc291cmNlcyBvYmplY3QgdG8gcmV0cmlldmUgaXRzIERyYXdhYmxlLgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gRHJhd2FibGUgZm9yIHRoZSBhdHRyaWJ1dGUsIG9yIG51bGwgaWYgbm90IGRlZmluZWQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIERyYXdhYmxlIGdldERyYXdhYmxlKGludCBpbmRleCkgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1SZXNvdXJjZURhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtUmVzb3VyY2VEYXRhW2luZGV4XSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSBtUmVzb3VyY2VEYXRhW2luZGV4XTsKLSAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUuZ2V0VmFsdWUoKTsKLSAgICAgICAgaWYgKHN0cmluZ1ZhbHVlID09IG51bGwgfHwgUmVuZGVyUmVzb3VyY2VzLlJFRkVSRU5DRV9OVUxMLmVxdWFscyhzdHJpbmdWYWx1ZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFJlc291cmNlSGVscGVyLmdldERyYXdhYmxlKHZhbHVlLCBtQ29udGV4dCk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgQ2hhclNlcXVlbmNlW10gZm9yIHRoZSBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPi4KLSAgICAgKiBUaGlzIGdldHMgdGhlIHJlc291cmNlIElEIG9mIHRoZSBzZWxlY3RlZCBhdHRyaWJ1dGUsIGFuZCB1c2VzCi0gICAgICoge0BsaW5rIFJlc291cmNlcyNnZXRUZXh0QXJyYXkgUmVzb3VyY2VzLmdldFRleHRBcnJheX0gb2YgdGhlIG93bmluZwotICAgICAqIFJlc291cmNlcyBvYmplY3QgdG8gcmV0cmlldmUgaXRzIFN0cmluZ1tdLgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQ2hhclNlcXVlbmNlW10gZm9yIHRoZSBhdHRyaWJ1dGUsIG9yIG51bGwgaWYgbm90IGRlZmluZWQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENoYXJTZXF1ZW5jZVtdIGdldFRleHRBcnJheShpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVJlc291cmNlRGF0YVtpbmRleF0gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgdmFsdWUgPSBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXRWYWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKFJlbmRlclJlc291cmNlcy5SRUZFUkVOQ0VfTlVMTC5lcXVhbHModmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgQ2hhclNlcXVlbmNlW10geyB2YWx1ZSB9OwotICAgICAgICB9Ci0KLSAgICAgICAgQnJpZGdlLmdldExvZygpLndhcm5pbmcoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfRk9STUFULAotICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlVua25vd24gdmFsdWUgZm9yIGdldFRleHRBcnJheSglZCkgPT4gJXMiLCAvL0RFQlVHCi0gICAgICAgICAgICAgICAgICAgIGluZGV4LCBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXROYW1lKCkpKSwgbnVsbCAvKmRhdGEqLyk7Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIHJhdyBUeXBlZFZhbHVlIGZvciB0aGUgYXR0cmlidXRlIGF0IDx2YXI+aW5kZXg8L3Zhcj4uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgYXR0cmlidXRlIHRvIHJldHJpZXZlLgotICAgICAqIEBwYXJhbSBvdXRWYWx1ZSBUeXBlZFZhbHVlIG9iamVjdCBpbiB3aGljaCB0byBwbGFjZSB0aGUgYXR0cmlidXRlJ3MKLSAgICAgKiAgICAgICAgICAgICAgICAgZGF0YS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSB3YXMgcmV0cmlldmVkLCBlbHNlIGZhbHNlLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGdldFZhbHVlKGludCBpbmRleCwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSkgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1SZXNvdXJjZURhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVJlc291cmNlRGF0YVtpbmRleF0gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHMgPSBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXRWYWx1ZSgpOwotCi0gICAgICAgIHJldHVybiBSZXNvdXJjZUhlbHBlci5wYXJzZUZsb2F0QXR0cmlidXRlKG1OYW1lc1tpbmRleF0sIHMsIG91dFZhbHVlLAotICAgICAgICAgICAgICAgIGZhbHNlIC8qcmVxdWlyZVVuaXQqLyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZXJlIGlzIGFuIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgYXR0cmlidXRlIGhhcyBhIHZhbHVlLCBmYWxzZSBvdGhlcndpc2UuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaGFzVmFsdWUoaW50IGluZGV4KSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVJlc291cmNlRGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtUmVzb3VyY2VEYXRhW2luZGV4XSAhPSBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSByYXcgVHlwZWRWYWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+Ci0gICAgICogYW5kIHJldHVybiBhIHRlbXBvcmFyeSBvYmplY3QgaG9sZGluZyBpdHMgZGF0YS4gIFRoaXMgb2JqZWN0IGlzIG9ubHkKLSAgICAgKiB2YWxpZCB1bnRpbCB0aGUgbmV4dCBjYWxsIG9uIHRvIHtAbGluayBUeXBlZEFycmF5fS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBUeXBlZFZhbHVlIG9iamVjdCBpZiB0aGUgYXR0cmlidXRlIGlzIGRlZmluZWQsCi0gICAgICogICAgICAgICBjb250YWluaW5nIGl0cyBkYXRhOyBvdGhlcndpc2UgcmV0dXJucyBudWxsLiAgKFlvdSB3aWxsIG5vdAotICAgICAqICAgICAgICAgcmVjZWl2ZSBhIFR5cGVkVmFsdWUgd2hvc2UgdHlwZSBpcyBUWVBFX05VTEwuKQotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBUeXBlZFZhbHVlIHBlZWtWYWx1ZShpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ2V0VmFsdWUoaW5kZXgsIG1WYWx1ZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBtVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWVzc2FnZSBhYm91dCB0aGUgcGFyc2VyIHN0YXRlIHN1aXRhYmxlIGZvciBwcmludGluZyBlcnJvciBtZXNzYWdlcy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFBvc2l0aW9uRGVzY3JpcHRpb24oKSB7Ci0gICAgICAgIHJldHVybiAiPGludGVybmFsIC0tIHN0dWIgaWYgbmVlZGVkPiI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2l2ZSBiYWNrIGEgcHJldmlvdXNseSByZXRyaWV2ZWQgVHlwZWRBcnJheSwgZm9yIGxhdGVyIHJlLXVzZS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZWN5Y2xlKCkgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIEFycmF5cy50b1N0cmluZyhtUmVzb3VyY2VEYXRhKTsKLSAgICB9Ci0gfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXNfVGhlbWVfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzX1RoZW1lX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZDYxNWMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXNfVGhlbWVfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuY29udGVudC5yZXM7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUmVuZGVyU2Vzc2lvbkltcGw7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuVGhlbWU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSB1c2VkIHRvIHByb3ZpZGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIGEgc2VsZWN0IGZldyBtZXRob2RzIG9mIHtAbGluayBSZXNvdXJjZXMkVGhlbWV9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgVGhlbWUgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXNvdXJjZXNfVGhlbWVfRGVsZWdhdGUgewotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFR5cGVkQXJyYXkgb2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgIFJlc291cmNlcyB0aGlzUmVzb3VyY2VzLCBUaGVtZSB0aGlzVGhlbWUsCi0gICAgICAgICAgICBpbnRbXSBhdHRycykgewotICAgICAgICByZXR1cm4gUmVuZGVyU2Vzc2lvbkltcGwuZ2V0Q3VycmVudENvbnRleHQoKS5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgVHlwZWRBcnJheSBvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAotICAgICAgICAgICAgUmVzb3VyY2VzIHRoaXNSZXNvdXJjZXMsIFRoZW1lIHRoaXNUaGVtZSwKLSAgICAgICAgICAgIGludCByZXNpZCwgaW50W10gYXR0cnMpCi0gICAgICAgICAgICB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gUmVuZGVyU2Vzc2lvbkltcGwuZ2V0Q3VycmVudENvbnRleHQoKS5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKHJlc2lkLCBhdHRycyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFR5cGVkQXJyYXkgb2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgIFJlc291cmNlcyB0aGlzUmVzb3VyY2VzLCBUaGVtZSB0aGlzVGhlbWUsCi0gICAgICAgICAgICBBdHRyaWJ1dGVTZXQgc2V0LCBpbnRbXSBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7Ci0gICAgICAgIHJldHVybiBSZW5kZXJTZXNzaW9uSW1wbC5nZXRDdXJyZW50Q29udGV4dCgpLm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgc2V0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gcmVzb2x2ZUF0dHJpYnV0ZSgKLSAgICAgICAgICAgIFJlc291cmNlcyB0aGlzUmVzb3VyY2VzLCBUaGVtZSB0aGlzVGhlbWUsCi0gICAgICAgICAgICBpbnQgcmVzaWQsIFR5cGVkVmFsdWUgb3V0VmFsdWUsCi0gICAgICAgICAgICBib29sZWFuIHJlc29sdmVSZWZzKSB7Ci0gICAgICAgIHJldHVybiBSZW5kZXJTZXNzaW9uSW1wbC5nZXRDdXJyZW50Q29udGV4dCgpLnJlc29sdmVUaGVtZUF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICByZXNpZCwgb3V0VmFsdWUsIHJlc29sdmVSZWZzKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXlfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvVHlwZWRBcnJheV9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTc4OTlhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvVHlwZWRBcnJheV9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnJlczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwotCi1wdWJsaWMgY2xhc3MgVHlwZWRBcnJheV9EZWxlZ2F0ZSB7Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0VmFsdWVBdChUeXBlZEFycmF5IHRoZVR5cGVkQXJyYXksIGludCBpbmRleCwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0F2b2lkWGZlcm1vZGVfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQXZvaWRYZmVybW9kZV9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTBhMmJkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQXZvaWRYZmVybW9kZV9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuQ29tcG9zaXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5Bdm9pZFhmZXJtb2RlCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgQXZvaWRYZmVybW9kZSBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBBdm9pZFhmZXJtb2RlIGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBYZmVybW9kZV9EZWxlZ2F0ZX0sIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYQotICoge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sIGFzIGFsbCB0aGUgUGF0aEVmZmVjdCBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkKLSAqIHtAbGluayBYZmVybW9kZV9EZWxlZ2F0ZX0uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQXZvaWRYZmVybW9kZV9EZWxlZ2F0ZSBleHRlbmRzIFhmZXJtb2RlX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29tcG9zaXRlIGdldENvbXBvc2l0ZShpbnQgYWxwaGEpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIkF2b2lkIFhmZXJtb2RlcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBMYXlvdXQgUHJldmlldyBtb2RlLiI7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZShpbnQgb3BDb2xvciwgaW50IHRvbGVyYW5jZSwgaW50IG5hdGl2ZU1vZGUpIHsKLSAgICAgICAgQXZvaWRYZmVybW9kZV9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBBdm9pZFhmZXJtb2RlX0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQmlkaVJlbmRlcmVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0JpZGlSZW5kZXJlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmQwYTBkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQmlkaVJlbmRlcmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGphdmEuYXd0LkZvbnQ7Ci1pbXBvcnQgamF2YS5hd3QuR3JhcGhpY3MyRDsKLWltcG9ydCBqYXZhLmF3dC5mb250LkZvbnRSZW5kZXJDb250ZXh0OwotaW1wb3J0IGphdmEuYXd0LmZvbnQuR2x5cGhWZWN0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVTY3JpcHQ7Ci1pbXBvcnQgY29tLmlibS5pY3UubGFuZy5VU2NyaXB0UnVuOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludF9EZWxlZ2F0ZS5Gb250SW5mbzsKLQotLyoqCi0gKiBSZW5kZXIgdGhlIHRleHQgYnkgYnJlYWtpbmcgaXQgaW50byB2YXJpb3VzIHNjcmlwdHMgYW5kIHVzaW5nIHRoZSByaWdodCBmb250IGZvciBlYWNoIHNjcmlwdC4KLSAqIENhbiBiZSB1c2VkIHRvIG1lYXN1cmUgdGhlIHRleHQgd2l0aG91dCBhY3R1YWxseSBkcmF3aW5nIGl0LgotICovCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGljIGNsYXNzIEJpZGlSZW5kZXJlciB7Ci0KLSAgICAvKiBwYWNrYWdlICovIHN0YXRpYyBjbGFzcyBTY3JpcHRSdW4gewotICAgICAgICBpbnQgc3RhcnQ7Ci0gICAgICAgIGludCBsaW1pdDsKLSAgICAgICAgYm9vbGVhbiBpc1J0bDsKLSAgICAgICAgaW50IHNjcmlwdENvZGU7Ci0gICAgICAgIEZvbnRJbmZvIGZvbnQ7Ci0KLSAgICAgICAgcHVibGljIFNjcmlwdFJ1bihpbnQgc3RhcnQsIGludCBsaW1pdCwgYm9vbGVhbiBpc1J0bCkgewotICAgICAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0OwotICAgICAgICAgICAgdGhpcy5saW1pdCA9IGxpbWl0OwotICAgICAgICAgICAgdGhpcy5pc1J0bCA9IGlzUnRsOwotICAgICAgICAgICAgdGhpcy5zY3JpcHRDb2RlID0gVVNjcmlwdC5JTlZBTElEX0NPREU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBwYWNrYWdlICovIEdyYXBoaWNzMkQgZ3JhcGhpY3M7Ci0gICAgLyogcGFja2FnZSAqLyBQYWludF9EZWxlZ2F0ZSBwYWludDsKLSAgICAvKiBwYWNrYWdlICovIGNoYXJbXSB0ZXh0OwotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIGdyYXBoaWNzIE1heSBiZSBudWxsLgotICAgICAqIEBwYXJhbSBwYWludCBUaGUgUGFpbnQgdG8gdXNlIHRvIGdldCB0aGUgZm9udHMuIFNob3VsZCBub3QgYmUgbnVsbC4KLSAgICAgKiBAcGFyYW0gdGV4dCBVbmlkaXJlY3Rpb25hbCB0ZXh0LiBTaG91bGQgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgLyogcGFja2FnZSAqLyBCaWRpUmVuZGVyZXIoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnQsIGNoYXJbXSB0ZXh0KSB7Ci0gICAgICAgIGFzc2VydCAocGFpbnQgIT0gbnVsbCk7Ci0gICAgICAgIHRoaXMuZ3JhcGhpY3MgPSBncmFwaGljczsKLSAgICAgICAgdGhpcy5wYWludCA9IHBhaW50OwotICAgICAgICB0aGlzLnRleHQgPSB0ZXh0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbmRlciB1bmlkaXJlY3Rpb25hbCB0ZXh0LgotICAgICAqCi0gICAgICogVGhpcyBtZXRob2QgY2FuIGFsc28gYmUgdXNlZCB0byBtZWFzdXJlIHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3aXRob3V0IGFjdHVhbGx5IGRyYXdpbmcgaXQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc3RhcnQgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlcgotICAgICAqIEBwYXJhbSBsaW1pdCBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgc2hvdWxkIG5vdCBiZSByZW5kZXJlZC4KLSAgICAgKiBAcGFyYW0gaXNSdGwgaXMgdGhlIHRleHQgcmlnaHQtdG8tbGVmdAotICAgICAqIEBwYXJhbSBhZHZhbmNlcyBJZiBub3QgbnVsbCwgdGhlbiBhZHZhbmNlcyBmb3IgZWFjaCBjaGFyYWN0ZXIgdG8gYmUgcmVuZGVyZWQgYXJlIHJldHVybmVkCi0gICAgICogICAgICAgICAgICBoZXJlLgotICAgICAqIEBwYXJhbSBhZHZhbmNlc0luZGV4IGluZGV4IGludG8gYWR2YW5jZXMgZnJvbSB3aGVyZSB0aGUgYWR2YW5jZXMgbmVlZCB0byBiZSBmaWxsZWQuCi0gICAgICogQHBhcmFtIGRyYXcgSWYgdHJ1ZSBhbmQge0BsaW5rIGdyYXBoaWNzfSBpcyBub3QgbnVsbCwgZHJhdyB0aGUgcmVuZGVyZWQgdGV4dCBvbiB0aGUgZ3JhcGhpY3MKLSAgICAgKiAgICAgICAgICAgIGF0IHRoZSBnaXZlbiBjby1vcmRpbmF0ZXMKLSAgICAgKiBAcGFyYW0geCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBsZWZ0IGVkZ2Ugb2Ygd2hlcmUgdGhlIHRleHQgc2hvdWxkIGJlIGRyYXduIG9uIHRoZSBnaXZlbgotICAgICAqICAgICAgICAgICAgZ3JhcGhpY3MuCi0gICAgICogQHBhcmFtIHkgVGhlIHktY29vcmRpbmF0ZSBhdCB3aGljaCB0byBkcmF3IHRoZSB0ZXh0IG9uIHRoZSBnaXZlbiBncmFwaGljcy4KLSAgICAgKiBAcmV0dXJuIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGRyYXduIHRleHQuIEluIG90aGVyIHdvcmRzLAotICAgICAqICAgICAgICAgICAgeCArIHRoZSB3aWR0aCBvZiB0aGUgdGV4dC4KLSAgICAgKi8KLSAgICAvKiBwYWNrYWdlICovIGZsb2F0IHJlbmRlclRleHQoaW50IHN0YXJ0LCBpbnQgbGltaXQsIGJvb2xlYW4gaXNSdGwsIGZsb2F0IGFkdmFuY2VzW10sCi0gICAgICAgICAgICBpbnQgYWR2YW5jZXNJbmRleCwgYm9vbGVhbiBkcmF3LCBmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIC8vIFdlIGJyZWFrIHRoZSB0ZXh0IGludG8gc2NyaXB0cyBhbmQgdGhlbiBzZWxlY3QgZm9udCBiYXNlZCBvbiBpdCBhbmQgdGhlbiByZW5kZXIgZWFjaCBvZgotICAgICAgICAvLyB0aGUgc2NyaXB0IHJ1bnMuCi0gICAgICAgIGZvciAoU2NyaXB0UnVuIHJ1biA6IGdldFNjcmlwdFJ1bnModGV4dCwgc3RhcnQsIGxpbWl0LCBpc1J0bCwgcGFpbnQuZ2V0Rm9udHMoKSkpIHsKLSAgICAgICAgICAgIGludCBmbGFnID0gRm9udC5MQVlPVVRfTk9fTElNSVRfQ09OVEVYVCB8IEZvbnQuTEFZT1VUX05PX1NUQVJUX0NPTlRFWFQ7Ci0gICAgICAgICAgICBmbGFnIHw9IGlzUnRsID8gRm9udC5MQVlPVVRfUklHSFRfVE9fTEVGVCA6IEZvbnQuTEFZT1VUX0xFRlRfVE9fUklHSFQ7Ci0gICAgICAgICAgICB4ID0gcmVuZGVyU2NyaXB0KHJ1bi5zdGFydCwgcnVuLmxpbWl0LCBydW4uZm9udCwgZmxhZywgYWR2YW5jZXMsIGFkdmFuY2VzSW5kZXgsIGRyYXcsCi0gICAgICAgICAgICAgICAgICAgIHgsIHkpOwotICAgICAgICAgICAgYWR2YW5jZXNJbmRleCArPSBydW4ubGltaXQgLSBydW4uc3RhcnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVuZGVyIGEgc2NyaXB0IHJ1bi4gVXNlIHRoZSBwcmVmZXJyZWQgZm9udCB0byByZW5kZXIgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVGhpcyBhbHNvCi0gICAgICogaW1wbGVtZW50cyBhIGZhbGxiYWNrIG1lY2hhbmlzbSB0byByZW5kZXIgY2hhcmFjdGVycyB0aGF0IGNhbm5vdCBiZSBkcmF3biB1c2luZyB0aGUKLSAgICAgKiBwcmVmZXJyZWQgZm9udC4KLSAgICAgKgotICAgICAqIEByZXR1cm4geCArIHdpZHRoIG9mIHRoZSB0ZXh0IGRyYXduLgotICAgICAqLwotICAgIHByaXZhdGUgZmxvYXQgcmVuZGVyU2NyaXB0KGludCBzdGFydCwgaW50IGxpbWl0LCBGb250SW5mbyBwcmVmZXJyZWRGb250LCBpbnQgZmxhZywKLSAgICAgICAgICAgIGZsb2F0IGFkdmFuY2VzW10sIGludCBhZHZhbmNlc0luZGV4LCBib29sZWFuIGRyYXcsIGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgTGlzdDxGb250SW5mbz4gZm9udHMgPSBwYWludC5nZXRGb250cygpOwotICAgICAgICBpZiAoZm9udHMgPT0gbnVsbCB8fCBwcmVmZXJyZWRGb250ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKHN0YXJ0IDwgbGltaXQpIHsKLSAgICAgICAgICAgIGJvb2xlYW4gZm91bmRGb250ID0gZmFsc2U7Ci0gICAgICAgICAgICBpbnQgY2FuRGlzcGxheVVwVG8gPSBwcmVmZXJyZWRGb250Lm1Gb250LmNhbkRpc3BsYXlVcFRvKHRleHQsIHN0YXJ0LCBsaW1pdCk7Ci0gICAgICAgICAgICBpZiAoY2FuRGlzcGxheVVwVG8gPT0gLTEpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKHN0YXJ0LCBsaW1pdCwgcHJlZmVycmVkRm9udCwgZmxhZywgYWR2YW5jZXMsIGFkdmFuY2VzSW5kZXgsIGRyYXcsCi0gICAgICAgICAgICAgICAgICAgICAgICB4LCB5KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRGlzcGxheVVwVG8gPiBzdGFydCkgeyAvLyBjYW4gZHJhdyBzb21ldGhpbmcKLSAgICAgICAgICAgICAgICB4ID0gcmVuZGVyKHN0YXJ0LCBjYW5EaXNwbGF5VXBUbywgcHJlZmVycmVkRm9udCwgZmxhZywgYWR2YW5jZXMsIGFkdmFuY2VzSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBkcmF3LCB4LCB5KTsKLSAgICAgICAgICAgICAgICBhZHZhbmNlc0luZGV4ICs9IGNhbkRpc3BsYXlVcFRvIC0gc3RhcnQ7Ci0gICAgICAgICAgICAgICAgc3RhcnQgPSBjYW5EaXNwbGF5VXBUbzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGNoYXJDb3VudCA9IENoYXJhY3Rlci5pc0hpZ2hTdXJyb2dhdGUodGV4dFtzdGFydF0pID8gMiA6IDE7Ci0gICAgICAgICAgICBmb3IgKEZvbnRJbmZvIGZvbnQgOiBmb250cykgewotICAgICAgICAgICAgICAgIGNhbkRpc3BsYXlVcFRvID0gZm9udC5tRm9udC5jYW5EaXNwbGF5VXBUbyh0ZXh0LCBzdGFydCwgc3RhcnQgKyBjaGFyQ291bnQpOwotICAgICAgICAgICAgICAgIGlmIChjYW5EaXNwbGF5VXBUbyA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICB4ID0gcmVuZGVyKHN0YXJ0LCBzdGFydCtjaGFyQ291bnQsIGZvbnQsIGZsYWcsIGFkdmFuY2VzLCBhZHZhbmNlc0luZGV4LCBkcmF3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHkpOwotICAgICAgICAgICAgICAgICAgICBzdGFydCArPSBjaGFyQ291bnQ7Ci0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VzSW5kZXggKz0gY2hhckNvdW50OwotICAgICAgICAgICAgICAgICAgICBmb3VuZEZvbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWZvdW5kRm9udCkgewotICAgICAgICAgICAgICAgIC8vIE5vIGZvbnQgY2FuIGRpc3BsYXkgdGhpcyBjaGFyLiBVc2UgdGhlIHByZWZlcnJlZCBmb250LiBUaGUgY2hhciB3aWxsIG1vc3QKLSAgICAgICAgICAgICAgICAvLyBwcm9iYWJseSBhcHBlYXIgYXMgYSBib3ggb3IgYSBibGFuayBzcGFjZS4gV2UgY291bGQsIHByb2JhYmx5LCB1c2Ugc29tZQotICAgICAgICAgICAgICAgIC8vIGhldXJpc3RpY3MgYW5kIGJyZWFrIHRoZSBjaGFyYWN0ZXIgaW50byB0aGUgYmFzZSBjaGFyYWN0ZXIgYW5kIGRpYWNyaXRpY3MgYW5kCi0gICAgICAgICAgICAgICAgLy8gdGhlbiBkcmF3IGl0LCBidXQgaXQncyBwcm9iYWJseSBub3Qgd29ydGggdGhlIGVmZm9ydC4KLSAgICAgICAgICAgICAgICB4ID0gcmVuZGVyKHN0YXJ0LCBzdGFydCArIGNoYXJDb3VudCwgcHJlZmVycmVkRm9udCwgZmxhZywgYWR2YW5jZXMsIGFkdmFuY2VzSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBkcmF3LCB4LCB5KTsKLSAgICAgICAgICAgICAgICBzdGFydCArPSBjaGFyQ291bnQ7Ci0gICAgICAgICAgICAgICAgYWR2YW5jZXNJbmRleCArPSBjaGFyQ291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVuZGVyIHRoZSB0ZXh0IHdpdGggdGhlIGdpdmVuIGZvbnQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmbG9hdCByZW5kZXIoaW50IHN0YXJ0LCBpbnQgbGltaXQsIEZvbnRJbmZvIGZvbnQsIGludCBmbGFnLCBmbG9hdCBhZHZhbmNlc1tdLAotICAgICAgICAgICAgaW50IGFkdmFuY2VzSW5kZXgsIGJvb2xlYW4gZHJhdywgZmxvYXQgeCwgZmxvYXQgeSkgewotCi0gICAgICAgIGZsb2F0IHRvdGFsQWR2YW5jZSA9IDA7Ci0gICAgICAgIC8vIFNpbmNlIHRoZSBtZXRyaWNzIGRvbid0IGhhdmUgYW50aS1hbGlhc2luZyBzZXQsIHdlIGNyZWF0ZSBhIG5ldyBGb250UmVuZGVyQ29udGV4dCB3aXRoCi0gICAgICAgIC8vIHRoZSBhbnRpLWFsaWFzaW5nIHNldC4KLSAgICAgICAgRm9udFJlbmRlckNvbnRleHQgZiA9IGZvbnQubU1ldHJpY3MuZ2V0Rm9udFJlbmRlckNvbnRleHQoKTsKLSAgICAgICAgRm9udFJlbmRlckNvbnRleHQgZnJjID0gbmV3IEZvbnRSZW5kZXJDb250ZXh0KGYuZ2V0VHJhbnNmb3JtKCksIHBhaW50LmlzQW50aUFsaWFzZWQoKSwKLSAgICAgICAgICAgICAgICBmLnVzZXNGcmFjdGlvbmFsTWV0cmljcygpKTsKLSAgICAgICAgR2x5cGhWZWN0b3IgZ3YgPSBmb250Lm1Gb250LmxheW91dEdseXBoVmVjdG9yKGZyYywgdGV4dCwgc3RhcnQsIGxpbWl0LCBmbGFnKTsKLSAgICAgICAgaW50IG5nID0gZ3YuZ2V0TnVtR2x5cGhzKCk7Ci0gICAgICAgIGludFtdIGNpID0gZ3YuZ2V0R2x5cGhDaGFySW5kaWNlcygwLCBuZywgbnVsbCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmc7IGkrKykgewotICAgICAgICAgICAgZmxvYXQgYWR2ID0gZ3YuZ2V0R2x5cGhNZXRyaWNzKGkpLmdldEFkdmFuY2VYKCk7Ci0gICAgICAgICAgICBpZiAoYWR2YW5jZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGludCBhZHZfaWR4ID0gYWR2YW5jZXNJbmRleCArIGNpW2ldOwotICAgICAgICAgICAgICAgIGFkdmFuY2VzW2Fkdl9pZHhdICs9IGFkdjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRvdGFsQWR2YW5jZSArPSBhZHY7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRyYXcgJiYgZ3JhcGhpY3MgIT0gbnVsbCkgewotICAgICAgICAgICAgZ3JhcGhpY3MuZHJhd0dseXBoVmVjdG9yKGd2LCB4LCB5KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4geCArIHRvdGFsQWR2YW5jZTsKLSAgICB9Ci0KLSAgICAvLyAtLS0gU3RhdGljIGhlbHBlciBtZXRob2RzIC0tLQotCi0gICAgLyogcGFja2FnZSAqLyAgc3RhdGljIExpc3Q8U2NyaXB0UnVuPiBnZXRTY3JpcHRSdW5zKGNoYXJbXSB0ZXh0LCBpbnQgc3RhcnQsIGludCBsaW1pdCwKLSAgICAgICAgICAgIGJvb2xlYW4gaXNSdGwsIExpc3Q8Rm9udEluZm8+IGZvbnRzKSB7Ci0gICAgICAgIExpbmtlZExpc3Q8U2NyaXB0UnVuPiBzY3JpcHRSdW5zID0gbmV3IExpbmtlZExpc3Q8U2NyaXB0UnVuPigpOwotCi0gICAgICAgIGludCBjb3VudCA9IGxpbWl0IC0gc3RhcnQ7Ci0gICAgICAgIFVTY3JpcHRSdW4gdVNjcmlwdFJ1biA9IG5ldyBVU2NyaXB0UnVuKHRleHQsIHN0YXJ0LCBjb3VudCk7Ci0gICAgICAgIHdoaWxlICh1U2NyaXB0UnVuLm5leHQoKSkgewotICAgICAgICAgICAgaW50IHNjcmlwdFN0YXJ0ID0gdVNjcmlwdFJ1bi5nZXRTY3JpcHRTdGFydCgpOwotICAgICAgICAgICAgaW50IHNjcmlwdExpbWl0ID0gdVNjcmlwdFJ1bi5nZXRTY3JpcHRMaW1pdCgpOwotICAgICAgICAgICAgU2NyaXB0UnVuIHJ1biA9IG5ldyBTY3JpcHRSdW4oc2NyaXB0U3RhcnQsIHNjcmlwdExpbWl0LCBpc1J0bCk7Ci0gICAgICAgICAgICBydW4uc2NyaXB0Q29kZSA9IHVTY3JpcHRSdW4uZ2V0U2NyaXB0Q29kZSgpOwotICAgICAgICAgICAgc2V0U2NyaXB0Rm9udCh0ZXh0LCBydW4sIGZvbnRzKTsKLSAgICAgICAgICAgIHNjcmlwdFJ1bnMuYWRkKHJ1bik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc2NyaXB0UnVuczsKLSAgICB9Ci0KLSAgICAvLyBUT0RPOiBSZXBsYWNlIHRoaXMgbWV0aG9kIHdpdGggb25lIHdoaWNoIHJldHVybnMgdGhlIGZvbnQgYmFzZWQgb24gdGhlIHNjcmlwdENvZGUuCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRTY3JpcHRGb250KGNoYXJbXSB0ZXh0LCBTY3JpcHRSdW4gcnVuLAotICAgICAgICAgICAgTGlzdDxGb250SW5mbz4gZm9udHMpIHsKLSAgICAgICAgZm9yIChGb250SW5mbyBmb250SW5mbyA6IGZvbnRzKSB7Ci0gICAgICAgICAgICBpZiAoZm9udEluZm8ubUZvbnQuY2FuRGlzcGxheVVwVG8odGV4dCwgcnVuLnN0YXJ0LCBydW4ubGltaXQpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcnVuLmZvbnQgPSBmb250SW5mbzsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcnVuLmZvbnQgPSBmb250cy5nZXQoMCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnlfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1YzNkMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnlfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5uaW5lcGF0Y2guTmluZVBhdGNoQ2h1bms7Ci1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLkRlbnNpdHk7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5CcmlkZ2VSZXNvdXJjZXMuTmluZVBhdGNoSW5wdXRTdHJlYW07Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5Lk9wdGlvbnM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBfRGVsZWdhdGUuQml0bWFwQ3JlYXRlRmxhZ3M7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuRW51bVNldDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgQml0bWFwRmFjdG9yeSBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIEJlY2F1c2UgaXQncyBhIHN0YXRlbGVzcyBjbGFzcyB0byBzdGFydCB3aXRoLCB0aGVyZSdzIG5vIG5lZWQgdG8ga2VlcCBhIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9Ci0gKiBhcm91bmQgdG8gbWFwIGludCB0byBpbnN0YW5jZSBvZiB0aGUgZGVsZWdhdGUuCi0gKgotICovCi0vKnBhY2thZ2UqLyBjbGFzcyBCaXRtYXBGYWN0b3J5X0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0tLSBOYXRpdmUgRGVsZWdhdGVzIC0tLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIEJpdG1hcCBuYXRpdmVEZWNvZGVTdHJlYW0oSW5wdXRTdHJlYW0gaXMsIGJ5dGVbXSBzdG9yYWdlLAotICAgICAgICAgICAgUmVjdCBwYWRkaW5nLCBPcHRpb25zIG9wdHMpIHsKLSAgICAgICAgQml0bWFwIGJtID0gbnVsbDsKLQotICAgICAgICBEZW5zaXR5IGRlbnNpdHkgPSBEZW5zaXR5Lk1FRElVTTsKLSAgICAgICAgU2V0PEJpdG1hcENyZWF0ZUZsYWdzPiBiaXRtYXBDcmVhdGVGbGFncyA9IEVudW1TZXQub2YoQml0bWFwQ3JlYXRlRmxhZ3MuTVVUQUJMRSk7Ci0gICAgICAgIGlmIChvcHRzICE9IG51bGwpIHsKLSAgICAgICAgICAgIGRlbnNpdHkgPSBEZW5zaXR5LmdldEVudW0ob3B0cy5pbkRlbnNpdHkpOwotICAgICAgICAgICAgaWYgKG9wdHMuaW5QcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgYml0bWFwQ3JlYXRlRmxhZ3MuYWRkKEJpdG1hcENyZWF0ZUZsYWdzLlBSRU1VTFRJUExJRUQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChpcyBpbnN0YW5jZW9mIE5pbmVQYXRjaElucHV0U3RyZWFtKSB7Ci0gICAgICAgICAgICAgICAgTmluZVBhdGNoSW5wdXRTdHJlYW0gbnBpcyA9IChOaW5lUGF0Y2hJbnB1dFN0cmVhbSkgaXM7Ci0gICAgICAgICAgICAgICAgbnBpcy5kaXNhYmxlRmFrZU1hcmtTdXBwb3J0KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBsb2FkIHRoZSBiaXRtYXAgYXMgYSBuaW5lIHBhdGNoCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQubmluZXBhdGNoLk5pbmVQYXRjaCBuaW5lUGF0Y2ggPSBjb20uYW5kcm9pZC5uaW5lcGF0Y2guTmluZVBhdGNoLmxvYWQoCi0gICAgICAgICAgICAgICAgICAgICAgICBucGlzLCB0cnVlIC8qaXM5UGF0Y2gqLywgZmFsc2UgLypjb252ZXJ0Ki8pOwotCi0gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBiaXRtYXAgYW5kIGNodW5rIG9iamVjdHMuCi0gICAgICAgICAgICAgICAgYm0gPSBCaXRtYXBfRGVsZWdhdGUuY3JlYXRlQml0bWFwKG5pbmVQYXRjaC5nZXRJbWFnZSgpLCBiaXRtYXBDcmVhdGVGbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbnNpdHkpOwotICAgICAgICAgICAgICAgIE5pbmVQYXRjaENodW5rIGNodW5rID0gbmluZVBhdGNoLmdldENodW5rKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBwdXQgdGhlIGNodW5rIGluIHRoZSBiaXRtYXAKLSAgICAgICAgICAgICAgICBibS5zZXROaW5lUGF0Y2hDaHVuayhOaW5lUGF0Y2hfRGVsZWdhdGUuc2VyaWFsaXplKGNodW5rKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyByZWFkIHRoZSBwYWRkaW5nCi0gICAgICAgICAgICAgICAgaW50W10gcGFkZGluZ2FycmF5ID0gY2h1bmsuZ2V0UGFkZGluZygpOwotICAgICAgICAgICAgICAgIHBhZGRpbmcubGVmdCA9IHBhZGRpbmdhcnJheVswXTsKLSAgICAgICAgICAgICAgICBwYWRkaW5nLnRvcCA9IHBhZGRpbmdhcnJheVsxXTsKLSAgICAgICAgICAgICAgICBwYWRkaW5nLnJpZ2h0ID0gcGFkZGluZ2FycmF5WzJdOwotICAgICAgICAgICAgICAgIHBhZGRpbmcuYm90dG9tID0gcGFkZGluZ2FycmF5WzNdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBsb2FkIHRoZSBiaXRtYXAgZGlyZWN0bHkuCi0gICAgICAgICAgICAgICAgYm0gPSBCaXRtYXBfRGVsZWdhdGUuY3JlYXRlQml0bWFwKGlzLCBiaXRtYXBDcmVhdGVGbGFncywgZGVuc2l0eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihudWxsLCJGYWlsZWQgdG8gbG9hZCBpbWFnZSIgLCBlLCBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBibTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgQml0bWFwIG5hdGl2ZURlY29kZUZpbGVEZXNjcmlwdG9yKEZpbGVEZXNjcmlwdG9yIGZkLAotICAgICAgICAgICAgUmVjdCBwYWRkaW5nLCBPcHRpb25zIG9wdHMpIHsKLSAgICAgICAgb3B0cy5pbkJpdG1hcCA9IG51bGw7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBCaXRtYXAgbmF0aXZlRGVjb2RlQXNzZXQoaW50IGFzc2V0LCBSZWN0IHBhZGRpbmcsIE9wdGlvbnMgb3B0cykgewotICAgICAgICBvcHRzLmluQml0bWFwID0gbnVsbDsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIEJpdG1hcCBuYXRpdmVEZWNvZGVCeXRlQXJyYXkoYnl0ZVtdIGRhdGEsIGludCBvZmZzZXQsCi0gICAgICAgICAgICBpbnQgbGVuZ3RoLCBPcHRpb25zIG9wdHMpIHsKLSAgICAgICAgb3B0cy5pbkJpdG1hcCA9IG51bGw7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZUlzU2Vla2FibGUoRmlsZURlc2NyaXB0b3IgZmQpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBTaGFkZXJfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwU2hhZGVyX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YTc1YjAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBTaGFkZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU2hhZGVyLlRpbGVNb2RlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBTaGFkZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBCaXRtYXBTaGFkZXIgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgQml0bWFwU2hhZGVyIGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBTaGFkZXJfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sCi0gKiBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkge0BsaW5rIFNoYWRlcl9EZWxlZ2F0ZX0uCi0gKgotICogQHNlZSBTaGFkZXJfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBCaXRtYXBTaGFkZXJfRGVsZWdhdGUgZXh0ZW5kcyBTaGFkZXJfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLSAgICBwcml2YXRlIGphdmEuYXd0LlBhaW50IG1KYXZhUGFpbnQ7Ci0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgamF2YS5hd3QuUGFpbnQgZ2V0SmF2YVBhaW50KCkgewotICAgICAgICByZXR1cm4gbUphdmFQYWludDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpIHsKLSAgICAgICAgLy8gbm8gbWVzc2FnZSBzaW5jZSBpc1N1cHBvcnRlZCByZXR1cm5zIHRydWU7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUoaW50IG5hdGl2ZV9iaXRtYXAsIGludCBzaGFkZXJUaWxlTW9kZVgsCi0gICAgICAgICAgICBpbnQgc2hhZGVyVGlsZU1vZGVZKSB7Ci0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXAgPSBCaXRtYXBfRGVsZWdhdGUuZ2V0RGVsZWdhdGUobmF0aXZlX2JpdG1hcCk7Ci0gICAgICAgIGlmIChiaXRtYXAgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBCaXRtYXBTaGFkZXJfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgQml0bWFwU2hhZGVyX0RlbGVnYXRlKAotICAgICAgICAgICAgICAgIGJpdG1hcC5nZXRJbWFnZSgpLAotICAgICAgICAgICAgICAgIFNoYWRlcl9EZWxlZ2F0ZS5nZXRUaWxlTW9kZShzaGFkZXJUaWxlTW9kZVgpLAotICAgICAgICAgICAgICAgIFNoYWRlcl9EZWxlZ2F0ZS5nZXRUaWxlTW9kZShzaGFkZXJUaWxlTW9kZVkpKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZVBvc3RDcmVhdGUoaW50IG5hdGl2ZV9zaGFkZXIsIGludCBuYXRpdmVfYml0bWFwLAotICAgICAgICAgICAgaW50IHNoYWRlclRpbGVNb2RlWCwgaW50IHNoYWRlclRpbGVNb2RlWSkgewotICAgICAgICAvLyBwYXNzLCBub3QgbmVlZGVkLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHJpdmF0ZSBCaXRtYXBTaGFkZXJfRGVsZWdhdGUoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSBpbWFnZSwKLSAgICAgICAgICAgIFRpbGVNb2RlIHRpbGVNb2RlWCwgVGlsZU1vZGUgdGlsZU1vZGVZKSB7Ci0gICAgICAgIG1KYXZhUGFpbnQgPSBuZXcgQml0bWFwU2hhZGVyUGFpbnQoaW1hZ2UsIHRpbGVNb2RlWCwgdGlsZU1vZGVZKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIEJpdG1hcFNoYWRlclBhaW50IGltcGxlbWVudHMgamF2YS5hd3QuUGFpbnQgewotICAgICAgICBwcml2YXRlIGZpbmFsIGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UgbUltYWdlOwotICAgICAgICBwcml2YXRlIGZpbmFsIFRpbGVNb2RlIG1UaWxlTW9kZVg7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgVGlsZU1vZGUgbVRpbGVNb2RlWTsKLQotICAgICAgICBCaXRtYXBTaGFkZXJQYWludChqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlIGltYWdlLAotICAgICAgICAgICAgICAgIFRpbGVNb2RlIHRpbGVNb2RlWCwgVGlsZU1vZGUgdGlsZU1vZGVZKSB7Ci0gICAgICAgICAgICBtSW1hZ2UgPSBpbWFnZTsKLSAgICAgICAgICAgIG1UaWxlTW9kZVggPSB0aWxlTW9kZVg7Ci0gICAgICAgICAgICBtVGlsZU1vZGVZID0gdGlsZU1vZGVZOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBqYXZhLmF3dC5QYWludENvbnRleHQgY3JlYXRlQ29udGV4dCgKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsICAgICAgY29sb3JNb2RlbCwKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5SZWN0YW5nbGUgICAgICAgICAgICAgZGV2aWNlQm91bmRzLAotICAgICAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQgICAgICB1c2VyQm91bmRzLAotICAgICAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtICB4Zm9ybSwKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5SZW5kZXJpbmdIaW50cyAgICAgICAgaGludHMpIHsKLQotICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gY2FudmFzTWF0cml4OwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBjYW52YXNNYXRyaXggPSB4Zm9ybS5jcmVhdGVJbnZlcnNlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmF3dC5nZW9tLk5vbmludmVydGlibGVUcmFuc2Zvcm1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19NQVRSSVhfSU5WRVJTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gaW52ZXJzZSBtYXRyaXggaW4gQml0bWFwU2hhZGVyIiwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgY2FudmFzTWF0cml4ID0gbmV3IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGxvY2FsTWF0cml4ID0gZ2V0TG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbG9jYWxNYXRyaXggPSBsb2NhbE1hdHJpeC5jcmVhdGVJbnZlcnNlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmF3dC5nZW9tLk5vbmludmVydGlibGVUcmFuc2Zvcm1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19NQVRSSVhfSU5WRVJTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gaW52ZXJzZSBtYXRyaXggaW4gQml0bWFwU2hhZGVyIiwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgbG9jYWxNYXRyaXggPSBuZXcgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBCaXRtYXBTaGFkZXJDb250ZXh0KGNhbnZhc01hdHJpeCwgbG9jYWxNYXRyaXgsIGNvbG9yTW9kZWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBCaXRtYXBTaGFkZXJDb250ZXh0IGltcGxlbWVudHMgamF2YS5hd3QuUGFpbnRDb250ZXh0IHsKLQotICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBtQ2FudmFzTWF0cml4OwotICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBtTG9jYWxNYXRyaXg7Ci0gICAgICAgICAgICBwcml2YXRlIGZpbmFsIGphdmEuYXd0LmltYWdlLkNvbG9yTW9kZWwgbUNvbG9yTW9kZWw7Ci0KLSAgICAgICAgICAgIHB1YmxpYyBCaXRtYXBTaGFkZXJDb250ZXh0KAotICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBjYW52YXNNYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGxvY2FsTWF0cml4LAotICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIGNvbG9yTW9kZWwpIHsKLSAgICAgICAgICAgICAgICBtQ2FudmFzTWF0cml4ID0gY2FudmFzTWF0cml4OwotICAgICAgICAgICAgICAgIG1Mb2NhbE1hdHJpeCA9IGxvY2FsTWF0cml4OwotICAgICAgICAgICAgICAgIG1Db2xvck1vZGVsID0gY29sb3JNb2RlbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIGdldENvbG9yTW9kZWwoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1Db2xvck1vZGVsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBqYXZhLmF3dC5pbWFnZS5SYXN0ZXIgZ2V0UmFzdGVyKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSBpbWFnZSA9IG5ldyBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlKHcsIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0IpOwotCi0gICAgICAgICAgICAgICAgaW50W10gZGF0YSA9IG5ldyBpbnRbdypoXTsKLQotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgZmxvYXRbXSBwdDEgPSBuZXcgZmxvYXRbMl07Ci0gICAgICAgICAgICAgICAgZmxvYXRbXSBwdDIgPSBuZXcgZmxvYXRbMl07Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaXkgPSAwIDsgaXkgPCBoIDsgaXkrKykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpeCA9IDAgOyBpeCA8IHcgOyBpeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdGhlIGNhbnZhcyB0cmFuc2Zvcm0KLSAgICAgICAgICAgICAgICAgICAgICAgIHB0MVswXSA9IHggKyBpeDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0MVsxXSA9IHkgKyBpeTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXNNYXRyaXgudHJhbnNmb3JtKHB0MSwgMCwgcHQyLCAwLCAxKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoZSBsb2NhbCBtYXRyaXguCi0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMF0gPSBwdDJbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMV0gPSBwdDJbMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTG9jYWxNYXRyaXgudHJhbnNmb3JtKHB0MSwgMCwgcHQyLCAwLCAxKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpbmRleCsrXSA9IGdldENvbG9yKHB0MlswXSwgcHQyWzFdKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGltYWdlLnNldFJHQigwIC8qc3RhcnRYKi8sIDAgLypzdGFydFkqLywgdywgaCwgZGF0YSwgMCAvKm9mZnNldCovLCB3IC8qc2NhbnNpemUqLyk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UuZ2V0UmFzdGVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyBhIGNvbG9yIGZvciBhbiBhcmJpdHJhcnkgcG9pbnQuCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIGludCBnZXRDb2xvcihmbG9hdCBmeCwgZmxvYXQgZnkpIHsKLSAgICAgICAgICAgIGludCB4ID0gZ2V0Q29vcmRpbmF0ZShNYXRoLnJvdW5kKGZ4KSwgbUltYWdlLmdldFdpZHRoKCksIG1UaWxlTW9kZVgpOwotICAgICAgICAgICAgaW50IHkgPSBnZXRDb29yZGluYXRlKE1hdGgucm91bmQoZnkpLCBtSW1hZ2UuZ2V0SGVpZ2h0KCksIG1UaWxlTW9kZVkpOwotCi0gICAgICAgICAgICByZXR1cm4gbUltYWdlLmdldFJHQih4LCB5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgaW50IGdldENvb3JkaW5hdGUoaW50IGksIGludCBzaXplLCBUaWxlTW9kZSBtb2RlKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDTEFNUDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUkVQRUFUOgotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNpemUgLSAxIC0gKC1pICUgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBNSVJST1I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBwb3NpdGl2ZSBzaWRlLCBqdXN0IG1ha2UgdGhlIHZhbHVlIHBvc2l0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IGkgLyBzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgJSBzaXplOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNvdW50ICUgMikgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzaXplIC0gMSAtIGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGkgPj0gc2l6ZSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobW9kZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIENMQU1QOgotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNpemUgLSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUkVQRUFUOgotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgJSBzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTUlSUk9SOgotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gaSAvIHNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpID0gaSAlIHNpemU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY291bnQgJSAyKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNpemUgLSAxIC0gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGdldFRyYW5zcGFyZW5jeSgpIHsKLSAgICAgICAgICAgIHJldHVybiBqYXZhLmF3dC5QYWludC5UUkFOU0xVQ0VOVDsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2QyYmExLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuRGVuc2l0eTsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcC5Db25maWc7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7Ci0KLWltcG9ydCBqYXZhLmF3dC5HcmFwaGljczJEOwotaW1wb3J0IGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2U7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5pby5CdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRW51bVNldDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgamF2YXguaW1hZ2Vpby5JbWFnZUlPOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBCaXRtYXAgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgQml0bWFwIGNsYXNzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQml0bWFwX0RlbGVnYXRlIHsKLQotICAgIHB1YmxpYyBlbnVtIEJpdG1hcENyZWF0ZUZsYWdzIHsKLSAgICAgICAgUFJFTVVMVElQTElFRCwgTVVUQUJMRQotICAgIH0KLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPEJpdG1hcF9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxCaXRtYXBfRGVsZWdhdGU+KEJpdG1hcF9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGhlbHBlciBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0gICAgcHJpdmF0ZSBmaW5hbCBDb25maWcgbUNvbmZpZzsKLSAgICBwcml2YXRlIEJ1ZmZlcmVkSW1hZ2UgbUltYWdlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzQWxwaGEgPSB0cnVlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzTWlwTWFwID0gZmFsc2U7ICAgICAgLy8gVE9ETzogY2hlY2sgdGhlIGRlZmF1bHQuCi0gICAgcHJpdmF0ZSBpbnQgbUdlbmVyYXRpb25JZCA9IDA7Ci0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG5hdGl2ZSBkZWxlZ2F0ZSBhc3NvY2lhdGVkIHRvIGEgZ2l2ZW4ge0BsaW5rIEJpdG1hcF9EZWxlZ2F0ZX0gb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQml0bWFwX0RlbGVnYXRlIGdldERlbGVnYXRlKEJpdG1hcCBiaXRtYXApIHsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmdldERlbGVnYXRlKGJpdG1hcC5tTmF0aXZlQml0bWFwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBuYXRpdmUgZGVsZWdhdGUgYXNzb2NpYXRlZCB0byBhIGdpdmVuIGFuIGludCByZWZlcmVuY2luZyBhIHtAbGluayBCaXRtYXB9IG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJpdG1hcF9EZWxlZ2F0ZSBnZXREZWxlZ2F0ZShpbnQgbmF0aXZlX2JpdG1hcCkgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX2JpdG1hcCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHtAbGluayBCaXRtYXB9IGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIGZpbGUgY29udGVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbnB1dCB0aGUgZmlsZSBmcm9tIHdoaWNoIHRvIHJlYWQgdGhlIGJpdG1hcCBjb250ZW50Ci0gICAgICogQHBhcmFtIGlzTXV0YWJsZSB3aGV0aGVyIHRoZSBiaXRtYXAgaXMgbXV0YWJsZQotICAgICAqIEBwYXJhbSBkZW5zaXR5IHRoZSBkZW5zaXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYml0bWFwCi0gICAgICoKLSAgICAgKiBAc2VlIEJpdG1hcCNpc011dGFibGUoKQotICAgICAqIEBzZWUgQml0bWFwI2dldERlbnNpdHkoKQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQml0bWFwIGNyZWF0ZUJpdG1hcChGaWxlIGlucHV0LCBib29sZWFuIGlzTXV0YWJsZSwgRGVuc2l0eSBkZW5zaXR5KQotICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcChpbnB1dCwgZ2V0UHJlbXVsdGlwbGllZEJpdG1hcENyZWF0ZUZsYWdzKGlzTXV0YWJsZSksIGRlbnNpdHkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSB7QGxpbmsgQml0bWFwfSBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiBmaWxlIGNvbnRlbnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5wdXQgdGhlIGZpbGUgZnJvbSB3aGljaCB0byByZWFkIHRoZSBiaXRtYXAgY29udGVudAotICAgICAqIEBwYXJhbSBkZW5zaXR5IHRoZSBkZW5zaXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYml0bWFwCi0gICAgICoKLSAgICAgKiBAc2VlIEJpdG1hcCNpc1ByZW11bHRpcGxpZWQoKQotICAgICAqIEBzZWUgQml0bWFwI2lzTXV0YWJsZSgpCi0gICAgICogQHNlZSBCaXRtYXAjZ2V0RGVuc2l0eSgpCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCaXRtYXAgY3JlYXRlQml0bWFwKEZpbGUgaW5wdXQsIFNldDxCaXRtYXBDcmVhdGVGbGFncz4gY3JlYXRlRmxhZ3MsCi0gICAgICAgICAgICBEZW5zaXR5IGRlbnNpdHkpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIGNyZWF0ZSBhIGRlbGVnYXRlIHdpdGggdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBCaXRtYXBfRGVsZWdhdGUoSW1hZ2VJTy5yZWFkKGlucHV0KSwgQ29uZmlnLkFSR0JfODg4OCk7Ci0KLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcChkZWxlZ2F0ZSwgY3JlYXRlRmxhZ3MsIGRlbnNpdHkuZ2V0RHBpVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHtAbGluayBCaXRtYXB9IGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHN0cmVhbSBjb250ZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIGlucHV0IHRoZSBzdHJlYW0gZnJvbSB3aGljaCB0byByZWFkIHRoZSBiaXRtYXAgY29udGVudAotICAgICAqIEBwYXJhbSBpc011dGFibGUgd2hldGhlciB0aGUgYml0bWFwIGlzIG11dGFibGUKLSAgICAgKiBAcGFyYW0gZGVuc2l0eSB0aGUgZGVuc2l0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGJpdG1hcAotICAgICAqCi0gICAgICogQHNlZSBCaXRtYXAjaXNNdXRhYmxlKCkKLSAgICAgKiBAc2VlIEJpdG1hcCNnZXREZW5zaXR5KCkKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJpdG1hcCBjcmVhdGVCaXRtYXAoSW5wdXRTdHJlYW0gaW5wdXQsIGJvb2xlYW4gaXNNdXRhYmxlLCBEZW5zaXR5IGRlbnNpdHkpCi0gICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICByZXR1cm4gY3JlYXRlQml0bWFwKGlucHV0LCBnZXRQcmVtdWx0aXBsaWVkQml0bWFwQ3JlYXRlRmxhZ3MoaXNNdXRhYmxlKSwgZGVuc2l0eSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHtAbGluayBCaXRtYXB9IGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHN0cmVhbSBjb250ZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIGlucHV0IHRoZSBzdHJlYW0gZnJvbSB3aGljaCB0byByZWFkIHRoZSBiaXRtYXAgY29udGVudAotICAgICAqIEBwYXJhbSBjcmVhdGVGbGFncwotICAgICAqIEBwYXJhbSBkZW5zaXR5IHRoZSBkZW5zaXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYml0bWFwCi0gICAgICoKLSAgICAgKiBAc2VlIEJpdG1hcCNpc1ByZW11bHRpcGxpZWQoKQotICAgICAqIEBzZWUgQml0bWFwI2lzTXV0YWJsZSgpCi0gICAgICogQHNlZSBCaXRtYXAjZ2V0RGVuc2l0eSgpCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCaXRtYXAgY3JlYXRlQml0bWFwKElucHV0U3RyZWFtIGlucHV0LCBTZXQ8Qml0bWFwQ3JlYXRlRmxhZ3M+IGNyZWF0ZUZsYWdzLAotICAgICAgICAgICAgRGVuc2l0eSBkZW5zaXR5KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAvLyBjcmVhdGUgYSBkZWxlZ2F0ZSB3aXRoIHRoZSBjb250ZW50IG9mIHRoZSBzdHJlYW0uCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBCaXRtYXBfRGVsZWdhdGUoSW1hZ2VJTy5yZWFkKGlucHV0KSwgQ29uZmlnLkFSR0JfODg4OCk7Ci0KLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcChkZWxlZ2F0ZSwgY3JlYXRlRmxhZ3MsIGRlbnNpdHkuZ2V0RHBpVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHtAbGluayBCaXRtYXB9IGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHtAbGluayBCdWZmZXJlZEltYWdlfQotICAgICAqCi0gICAgICogQHBhcmFtIGltYWdlIHRoZSBiaXRtYXAgY29udGVudAotICAgICAqIEBwYXJhbSBpc011dGFibGUgd2hldGhlciB0aGUgYml0bWFwIGlzIG11dGFibGUKLSAgICAgKiBAcGFyYW0gZGVuc2l0eSB0aGUgZGVuc2l0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGJpdG1hcAotICAgICAqCi0gICAgICogQHNlZSBCaXRtYXAjaXNNdXRhYmxlKCkKLSAgICAgKiBAc2VlIEJpdG1hcCNnZXREZW5zaXR5KCkKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJpdG1hcCBjcmVhdGVCaXRtYXAoQnVmZmVyZWRJbWFnZSBpbWFnZSwgYm9vbGVhbiBpc011dGFibGUsCi0gICAgICAgICAgICBEZW5zaXR5IGRlbnNpdHkpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVCaXRtYXAoaW1hZ2UsIGdldFByZW11bHRpcGxpZWRCaXRtYXBDcmVhdGVGbGFncyhpc011dGFibGUpLCBkZW5zaXR5KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEge0BsaW5rIEJpdG1hcH0gaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4ge0BsaW5rIEJ1ZmZlcmVkSW1hZ2V9Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaW1hZ2UgdGhlIGJpdG1hcCBjb250ZW50Ci0gICAgICogQHBhcmFtIGNyZWF0ZUZsYWdzCi0gICAgICogQHBhcmFtIGRlbnNpdHkgdGhlIGRlbnNpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBiaXRtYXAKLSAgICAgKgotICAgICAqIEBzZWUgQml0bWFwI2lzUHJlbXVsdGlwbGllZCgpCi0gICAgICogQHNlZSBCaXRtYXAjaXNNdXRhYmxlKCkKLSAgICAgKiBAc2VlIEJpdG1hcCNnZXREZW5zaXR5KCkKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJpdG1hcCBjcmVhdGVCaXRtYXAoQnVmZmVyZWRJbWFnZSBpbWFnZSwgU2V0PEJpdG1hcENyZWF0ZUZsYWdzPiBjcmVhdGVGbGFncywKLSAgICAgICAgICAgIERlbnNpdHkgZGVuc2l0eSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gY3JlYXRlIGEgZGVsZWdhdGUgd2l0aCB0aGUgZ2l2ZW4gaW1hZ2UuCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBCaXRtYXBfRGVsZWdhdGUoaW1hZ2UsIENvbmZpZy5BUkdCXzg4ODgpOwotCi0gICAgICAgIHJldHVybiBjcmVhdGVCaXRtYXAoZGVsZWdhdGUsIGNyZWF0ZUZsYWdzLCBkZW5zaXR5LmdldERwaVZhbHVlKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHtAbGluayBCdWZmZXJlZEltYWdlfSB1c2VkIGJ5IHRoZSBkZWxlZ2F0ZSBvZiB0aGUgZ2l2ZW4ge0BsaW5rIEJpdG1hcH0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCdWZmZXJlZEltYWdlIGdldEltYWdlKEJpdG1hcCBiaXRtYXApIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShiaXRtYXAubU5hdGl2ZUJpdG1hcCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tSW1hZ2U7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0QnVmZmVyZWRJbWFnZVR5cGUoaW50IG5hdGl2ZUJpdG1hcENvbmZpZykgewotICAgICAgICBzd2l0Y2ggKENvbmZpZy5uYXRpdmVUb0NvbmZpZyhuYXRpdmVCaXRtYXBDb25maWcpKSB7Ci0gICAgICAgICAgICBjYXNlIEFMUEhBXzg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQjsKLSAgICAgICAgICAgIGNhc2UgUkdCXzU2NToKLSAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCOwotICAgICAgICAgICAgY2FzZSBBUkdCXzQ0NDQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQjsKLSAgICAgICAgICAgIGNhc2UgQVJHQl84ODg4OgotICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0I7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHtAbGluayBCdWZmZXJlZEltYWdlfSB1c2VkIGJ5IHRoZSBkZWxlZ2F0ZSBvZiB0aGUgZ2l2ZW4ge0BsaW5rIEJpdG1hcH0uCi0gICAgICovCi0gICAgcHVibGljIEJ1ZmZlcmVkSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0gICAgICAgIHJldHVybiBtSW1hZ2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgQW5kcm9pZCBiaXRtYXAgY29uZmlnLiBOb3RlIHRoYXQgdGhpcyBub3QgdGhlIGNvbmZpZyBvZiB0aGUgdW5kZXJseWluZwotICAgICAqIEphdmEyRCBiaXRtYXAuCi0gICAgICovCi0gICAgcHVibGljIENvbmZpZyBnZXRDb25maWcoKSB7Ci0gICAgICAgIHJldHVybiBtQ29uZmlnOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGhhc0FscGhhIHJlbmRlcmluZyBoaW50Ci0gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBiaXRtYXAgYWxwaGEgc2hvdWxkIGJlIHVzZWQgYXQgcmVuZGVyIHRpbWUKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNBbHBoYSgpIHsKLSAgICAgICAgcmV0dXJuIG1IYXNBbHBoYSAmJiBtQ29uZmlnICE9IENvbmZpZy5SR0JfNTY1OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc01pcE1hcCgpIHsKLSAgICAgICAgLy8gVE9ETzogY2hlY2sgaWYgbW9yZSBjaGVja3MgYXJlIHJlcXVpcmVkIGFzIGluIGhhc0FscGhhLgotICAgICAgICByZXR1cm4gbUhhc01pcE1hcDsKLSAgICB9Ci0gICAgLyoqCi0gICAgICogVXBkYXRlIHRoZSBnZW5lcmF0aW9uSWQuCi0gICAgICoKLSAgICAgKiBAc2VlIEJpdG1hcCNnZXRHZW5lcmF0aW9uSWQoKQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNoYW5nZSgpIHsKLSAgICAgICAgbUdlbmVyYXRpb25JZCsrOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIEJpdG1hcCBuYXRpdmVDcmVhdGUoaW50W10gY29sb3JzLCBpbnQgb2Zmc2V0LCBpbnQgc3RyaWRlLCBpbnQgd2lkdGgsCi0gICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgbmF0aXZlQ29uZmlnLCBib29sZWFuIGlzTXV0YWJsZSkgewotICAgICAgICBpbnQgaW1hZ2VUeXBlID0gZ2V0QnVmZmVyZWRJbWFnZVR5cGUobmF0aXZlQ29uZmlnKTsKLQotICAgICAgICAvLyBjcmVhdGUgdGhlIGltYWdlCi0gICAgICAgIEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UgPSBuZXcgQnVmZmVyZWRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBpbWFnZVR5cGUpOwotCi0gICAgICAgIGlmIChjb2xvcnMgIT0gbnVsbCkgewotICAgICAgICAgICAgaW1hZ2Uuc2V0UkdCKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGNvbG9ycywgb2Zmc2V0LCBzdHJpZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY3JlYXRlIGEgZGVsZWdhdGUgd2l0aCB0aGUgY29udGVudCBvZiB0aGUgc3RyZWFtLgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBuZXcgQml0bWFwX0RlbGVnYXRlKGltYWdlLCBDb25maWcubmF0aXZlVG9Db25maWcobmF0aXZlQ29uZmlnKSk7Ci0KLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcChkZWxlZ2F0ZSwgZ2V0UHJlbXVsdGlwbGllZEJpdG1hcENyZWF0ZUZsYWdzKGlzTXV0YWJsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwLmdldERlZmF1bHREZW5zaXR5KCkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBCaXRtYXAgbmF0aXZlQ29weShpbnQgc3JjQml0bWFwLCBpbnQgbmF0aXZlQ29uZmlnLCBib29sZWFuIGlzTXV0YWJsZSkgewotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgc3JjQm1wRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShzcmNCaXRtYXApOwotICAgICAgICBpZiAoc3JjQm1wRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWZmZXJlZEltYWdlIHNyY0ltYWdlID0gc3JjQm1wRGVsZWdhdGUuZ2V0SW1hZ2UoKTsKLQotICAgICAgICBpbnQgd2lkdGggPSBzcmNJbWFnZS5nZXRXaWR0aCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gc3JjSW1hZ2UuZ2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgaW50IGltYWdlVHlwZSA9IGdldEJ1ZmZlcmVkSW1hZ2VUeXBlKG5hdGl2ZUNvbmZpZyk7Ci0KLSAgICAgICAgLy8gY3JlYXRlIHRoZSBpbWFnZQotICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gbmV3IEJ1ZmZlcmVkSW1hZ2Uod2lkdGgsIGhlaWdodCwgaW1hZ2VUeXBlKTsKLQotICAgICAgICAvLyBjb3B5IHRoZSBzb3VyY2UgaW1hZ2UgaW50byB0aGUgaW1hZ2UuCi0gICAgICAgIGludFtdIGFyZ2IgPSBuZXcgaW50W3dpZHRoICogaGVpZ2h0XTsKLSAgICAgICAgc3JjSW1hZ2UuZ2V0UkdCKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGFyZ2IsIDAsIHdpZHRoKTsKLSAgICAgICAgaW1hZ2Uuc2V0UkdCKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGFyZ2IsIDAsIHdpZHRoKTsKLQotICAgICAgICAvLyBjcmVhdGUgYSBkZWxlZ2F0ZSB3aXRoIHRoZSBjb250ZW50IG9mIHRoZSBzdHJlYW0uCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IG5ldyBCaXRtYXBfRGVsZWdhdGUoaW1hZ2UsIENvbmZpZy5uYXRpdmVUb0NvbmZpZyhuYXRpdmVDb25maWcpKTsKLQotICAgICAgICByZXR1cm4gY3JlYXRlQml0bWFwKGRlbGVnYXRlLCBnZXRQcmVtdWx0aXBsaWVkQml0bWFwQ3JlYXRlRmxhZ3MoaXNNdXRhYmxlKSwKLSAgICAgICAgICAgICAgICBCaXRtYXAuZ2V0RGVmYXVsdERlbnNpdHkoKSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlRGVzdHJ1Y3RvcihpbnQgbmF0aXZlQml0bWFwKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlQml0bWFwKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVSZWN5Y2xlKGludCBuYXRpdmVCaXRtYXApIHsKLSAgICAgICAgc01hbmFnZXIucmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihuYXRpdmVCaXRtYXApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVSZWNvbmZpZ3VyZShpbnQgbmF0aXZlQml0bWFwLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgICAgICBpbnQgY29uZmlnLCBpbnQgYWxsb2NTaXplKSB7Ci0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJCaXRtYXAucmVjb25maWd1cmUoKSBpcyBub3Qgc3VwcG9ydGVkIiwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlQ29tcHJlc3MoaW50IG5hdGl2ZUJpdG1hcCwgaW50IGZvcm1hdCwgaW50IHF1YWxpdHksCi0gICAgICAgICAgICBPdXRwdXRTdHJlYW0gc3RyZWFtLCBieXRlW10gdGVtcFN0b3JhZ2UpIHsKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIkJpdG1hcC5jb21wcmVzcygpIGlzIG5vdCBzdXBwb3J0ZWQiLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlRXJhc2UoaW50IG5hdGl2ZUJpdG1hcCwgaW50IGNvbG9yKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQml0bWFwKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UgPSBkZWxlZ2F0ZS5tSW1hZ2U7Ci0KLSAgICAgICAgR3JhcGhpY3MyRCBnID0gaW1hZ2UuY3JlYXRlR3JhcGhpY3MoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGcuc2V0Q29sb3IobmV3IGphdmEuYXd0LkNvbG9yKGNvbG9yLCB0cnVlKSk7Ci0KLSAgICAgICAgICAgIGcuZmlsbFJlY3QoMCwgMCwgaW1hZ2UuZ2V0V2lkdGgoKSwgaW1hZ2UuZ2V0SGVpZ2h0KCkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgZy5kaXNwb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZVJvd0J5dGVzKGludCBuYXRpdmVCaXRtYXApIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVCaXRtYXApOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubUltYWdlLmdldFdpZHRoKCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDb25maWcoaW50IG5hdGl2ZUJpdG1hcCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUJpdG1hcCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tQ29uZmlnLm5hdGl2ZUludDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVIYXNBbHBoYShpbnQgbmF0aXZlQml0bWFwKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQml0bWFwKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1IYXNBbHBoYTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVIYXNNaXBNYXAoaW50IG5hdGl2ZUJpdG1hcCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUJpdG1hcCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tSGFzTWlwTWFwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlR2V0UGl4ZWwoaW50IG5hdGl2ZUJpdG1hcCwgaW50IHgsIGludCB5LAotICAgICAgICAgICAgYm9vbGVhbiBpc1ByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVCaXRtYXApOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUT0RPOiBTdXBwb3J0IGlzUHJlbXVsdGlwbGllZC4KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1JbWFnZS5nZXRSR0IoeCwgeSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlR2V0UGl4ZWxzKGludCBuYXRpdmVCaXRtYXAsIGludFtdIHBpeGVscywgaW50IG9mZnNldCwKLSAgICAgICAgICAgIGludCBzdHJpZGUsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sZWFuIGlzUHJlbXVsdGlwbGllZCkgewotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVCaXRtYXApOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUuZ2V0SW1hZ2UoKS5nZXRSR0IoeCwgeSwgd2lkdGgsIGhlaWdodCwgcGl4ZWxzLCBvZmZzZXQsIHN0cmlkZSk7Ci0gICAgfQotCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVTZXRQaXhlbChpbnQgbmF0aXZlQml0bWFwLCBpbnQgeCwgaW50IHksIGludCBjb2xvciwKLSAgICAgICAgICAgIGJvb2xlYW4gaXNQcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUJpdG1hcCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5nZXRJbWFnZSgpLnNldFJHQih4LCB5LCBjb2xvcik7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlU2V0UGl4ZWxzKGludCBuYXRpdmVCaXRtYXAsIGludFtdIGNvbG9ycywgaW50IG9mZnNldCwKLSAgICAgICAgICAgIGludCBzdHJpZGUsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sZWFuIGlzUHJlbXVsdGlwbGllZCkgewotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVCaXRtYXApOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUuZ2V0SW1hZ2UoKS5zZXRSR0IoeCwgeSwgd2lkdGgsIGhlaWdodCwgY29sb3JzLCBvZmZzZXQsIHN0cmlkZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlQ29weVBpeGVsc1RvQnVmZmVyKGludCBuYXRpdmVCaXRtYXAsIEJ1ZmZlciBkc3QpIHsKLSAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IG5hdGl2ZSBkZWxlZ2F0ZQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIkJpdG1hcC5jb3B5UGl4ZWxzVG9CdWZmZXIgaXMgbm90IHN1cHBvcnRlZC4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVDb3B5UGl4ZWxzRnJvbUJ1ZmZlcihpbnQgbmIsIEJ1ZmZlciBzcmMpIHsKLSAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IG5hdGl2ZSBkZWxlZ2F0ZQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIkJpdG1hcC5jb3B5UGl4ZWxzRnJvbUJ1ZmZlciBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlR2VuZXJhdGlvbklkKGludCBuYXRpdmVCaXRtYXApIHsKLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQml0bWFwKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1HZW5lcmF0aW9uSWQ7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIEJpdG1hcCBuYXRpdmVDcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBwKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgb25seSBjYWxsZWQgYnkgQml0bWFwLkNSRUFUT1IgKFBhcmNlbGFibGUuQ3JlYXRvcjxCaXRtYXA+KSwgd2hpY2ggaXMgb25seQotICAgICAgICAvLyB1c2VkIGR1cmluZyBhaWRsIGNhbGwgc28gcmVhbGx5IHRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQuCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJBSURMIGlzIG5vdCBzdXBwb3JlZCwgYW5kIHRoZXJlZm9yZSBCaXRtYXBzIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gcGFyY2Vscy4iLAotICAgICAgICAgICAgICAgIG51bGwgLypkYXRhKi8pOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVXcml0ZVRvUGFyY2VsKGludCBuYXRpdmVCaXRtYXAsIGJvb2xlYW4gaXNNdXRhYmxlLAotICAgICAgICAgICAgaW50IGRlbnNpdHksIFBhcmNlbCBwKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBzZW5kaW5nIGEgYml0bWFwIHRocm91Z2ggYWlkbCwgc28gcmVhbGx5IHRoaXMgc2hvdWxkIG5vdAotICAgICAgICAvLyBiZSBjYWxsZWQuCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJBSURMIGlzIG5vdCBzdXBwb3JlZCwgYW5kIHRoZXJlZm9yZSBCaXRtYXBzIGNhbm5vdCBiZSB3cml0dGVuIHRvIHBhcmNlbHMuIiwKLSAgICAgICAgICAgICAgICBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBCaXRtYXAgbmF0aXZlRXh0cmFjdEFscGhhKGludCBuYXRpdmVCaXRtYXAsIGludCBuYXRpdmVQYWludCwKLSAgICAgICAgICAgIGludFtdIG9mZnNldFhZKSB7Ci0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXAgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVCaXRtYXApOwotICAgICAgICBpZiAoYml0bWFwID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBwYWludCB3aGljaCBjYW4gYmUgbnVsbCBpZiBuYXRpdmVQYWludCBpcyAwLgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBwYWludCA9IFBhaW50X0RlbGVnYXRlLmdldERlbGVnYXRlKG5hdGl2ZVBhaW50KTsKLQotICAgICAgICBpZiAocGFpbnQgIT0gbnVsbCAmJiBwYWludC5nZXRNYXNrRmlsdGVyKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX01BU0tGSUxURVIsCi0gICAgICAgICAgICAgICAgICAgICJNYXNrRmlsdGVyIG5vdCBzdXBwb3J0ZWQgaW4gQml0bWFwLmV4dHJhY3RBbHBoYSIsCi0gICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGFscGhhID0gcGFpbnQgIT0gbnVsbCA/IHBhaW50LmdldEFscGhhKCkgOiAweEZGOwotICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gY3JlYXRlQ29weShiaXRtYXAuZ2V0SW1hZ2UoKSwgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCLCBhbHBoYSk7Ci0KLSAgICAgICAgLy8gY3JlYXRlIHRoZSBkZWxlZ2F0ZS4gVGhlIGFjdHVhbCBCaXRtYXAgY29uZmlnIGlzIG9ubHkgYW4gYWxwaGEgY2hhbm5lbAotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBuZXcgQml0bWFwX0RlbGVnYXRlKGltYWdlLCBDb25maWcuQUxQSEFfOCk7Ci0KLSAgICAgICAgLy8gdGhlIGRlbnNpdHkgZG9lc24ndCBtYXR0ZXIsIGl0J3Mgc2V0IGJ5IHRoZSBKYXZhIG1ldGhvZC4KLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcChkZWxlZ2F0ZSwgRW51bVNldC5vZihCaXRtYXBDcmVhdGVGbGFncy5NVVRBQkxFKSwKLSAgICAgICAgICAgICAgICBEZW5zaXR5LkRFRkFVTFRfREVOU0lUWSAvKmRlbnNpdHkqLyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlUHJlcGFyZVRvRHJhdyhpbnQgbmF0aXZlQml0bWFwKSB7Ci0gICAgICAgIC8vIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlLgotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZVNldEhhc0FscGhhKGludCBuYXRpdmVCaXRtYXAsIGJvb2xlYW4gaGFzQWxwaGEpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVCaXRtYXApOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubUhhc0FscGhhID0gaGFzQWxwaGE7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlU2V0SGFzTWlwTWFwKGludCBuYXRpdmVCaXRtYXAsIGJvb2xlYW4gaGFzTWlwTWFwKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQml0bWFwKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1IYXNNaXBNYXAgPSBoYXNNaXBNYXA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlU2FtZUFzKGludCBuYjAsIGludCBuYjEpIHsKLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlMSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5iMCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZTEgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlMiA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5iMSk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZTIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVmZmVyZWRJbWFnZSBpbWFnZTEgPSBkZWxlZ2F0ZTEuZ2V0SW1hZ2UoKTsKLSAgICAgICAgQnVmZmVyZWRJbWFnZSBpbWFnZTIgPSBkZWxlZ2F0ZTIuZ2V0SW1hZ2UoKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlMS5tQ29uZmlnICE9IGRlbGVnYXRlMi5tQ29uZmlnIHx8Ci0gICAgICAgICAgICAgICAgaW1hZ2UxLmdldFdpZHRoKCkgIT0gaW1hZ2UyLmdldFdpZHRoKCkgfHwKLSAgICAgICAgICAgICAgICBpbWFnZTEuZ2V0SGVpZ2h0KCkgIT0gaW1hZ2UyLmdldEhlaWdodCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBnZXQgdGhlIGludGVybmFsIGRhdGEKLSAgICAgICAgaW50IHcgPSBpbWFnZTEuZ2V0V2lkdGgoKTsKLSAgICAgICAgaW50IGggPSBpbWFnZTIuZ2V0SGVpZ2h0KCk7Ci0gICAgICAgIGludFtdIGFyZ2IxID0gbmV3IGludFt3KmhdOwotICAgICAgICBpbnRbXSBhcmdiMiA9IG5ldyBpbnRbdypoXTsKLQotICAgICAgICBpbWFnZTEuZ2V0UkdCKDAsIDAsIHcsIGgsIGFyZ2IxLCAwLCB3KTsKLSAgICAgICAgaW1hZ2UyLmdldFJHQigwLCAwLCB3LCBoLCBhcmdiMiwgMCwgdyk7Ci0KLSAgICAgICAgLy8gY29tcGFyZXMKLSAgICAgICAgaWYgKGRlbGVnYXRlMS5tQ29uZmlnID09IENvbmZpZy5BTFBIQV84KSB7Ci0gICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBtYW51YWxseSBjb21wYXJlIHRoZSBhbHBoYSBjaGFubmVsIGFzIHRoZSByZXN0IGlzIGdhcmJhZ2UuCi0gICAgICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gdypoOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbGVuZ3RoIDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChhcmdiMVtpXSAmIDB4RkYwMDAwMDApICE9IChhcmdiMltpXSAmIDB4RkYwMDAwMDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBBcnJheXMuZXF1YWxzKGFyZ2IxLCBhcmdiMik7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIHByaXZhdGUgQml0bWFwX0RlbGVnYXRlKEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UsIENvbmZpZyBjb25maWcpIHsKLSAgICAgICAgbUltYWdlID0gaW1hZ2U7Ci0gICAgICAgIG1Db25maWcgPSBjb25maWc7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQml0bWFwIGNyZWF0ZUJpdG1hcChCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUsCi0gICAgICAgICAgICBTZXQ8Qml0bWFwQ3JlYXRlRmxhZ3M+IGNyZWF0ZUZsYWdzLCBpbnQgZGVuc2l0eSkgewotICAgICAgICAvLyBnZXQgaXRzIG5hdGl2ZV9pbnQKLSAgICAgICAgaW50IG5hdGl2ZUludCA9IHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKGRlbGVnYXRlKTsKLQotICAgICAgICBpbnQgd2lkdGggPSBkZWxlZ2F0ZS5tSW1hZ2UuZ2V0V2lkdGgoKTsKLSAgICAgICAgaW50IGhlaWdodCA9IGRlbGVnYXRlLm1JbWFnZS5nZXRIZWlnaHQoKTsKLSAgICAgICAgYm9vbGVhbiBpc011dGFibGUgPSBjcmVhdGVGbGFncy5jb250YWlucyhCaXRtYXBDcmVhdGVGbGFncy5NVVRBQkxFKTsKLSAgICAgICAgYm9vbGVhbiBpc1ByZW11bHRpcGxpZWQgPSBjcmVhdGVGbGFncy5jb250YWlucyhCaXRtYXBDcmVhdGVGbGFncy5QUkVNVUxUSVBMSUVEKTsKLQotICAgICAgICAvLyBhbmQgY3JlYXRlL3JldHVybiBhIG5ldyBCaXRtYXAgd2l0aCBpdAotICAgICAgICByZXR1cm4gbmV3IEJpdG1hcChuYXRpdmVJbnQsIG51bGwgLyogYnVmZmVyICovLCB3aWR0aCwgaGVpZ2h0LCBkZW5zaXR5LCBpc011dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJlbXVsdGlwbGllZCwgbnVsbCAvKm5pbmVQYXRjaENodW5rKi8sIG51bGwgLyogbGF5b3V0Qm91bmRzICovKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTZXQ8Qml0bWFwQ3JlYXRlRmxhZ3M+IGdldFByZW11bHRpcGxpZWRCaXRtYXBDcmVhdGVGbGFncyhib29sZWFuIGlzTXV0YWJsZSkgewotICAgICAgICBTZXQ8Qml0bWFwQ3JlYXRlRmxhZ3M+IGNyZWF0ZUZsYWdzID0gRW51bVNldC5vZihCaXRtYXBDcmVhdGVGbGFncy5QUkVNVUxUSVBMSUVEKTsKLSAgICAgICAgaWYgKGlzTXV0YWJsZSkgewotICAgICAgICAgICAgY3JlYXRlRmxhZ3MuYWRkKEJpdG1hcENyZWF0ZUZsYWdzLk1VVEFCTEUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjcmVhdGVGbGFnczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgY29weSBvZiBhIGdpdmVuIEJ1ZmZlcmVkSW1hZ2UuCi0gICAgICogPHAvPgotICAgICAqIGlmIGFscGhhIGlzIGRpZmZlcmVudCB0aGFuIDI1NSwgdGhlbiBpdCBpcyBhcHBsaWVkIHRvIHRoZSBhbHBoYSBjaGFubmVsIG9mIGVhY2ggcGl4ZWwuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW1hZ2UgdGhlIGltYWdlIHRvIGNvcHkKLSAgICAgKiBAcGFyYW0gaW1hZ2VUeXBlIHRoZSB0eXBlIG9mIHRoZSBuZXcgaW1hZ2UKLSAgICAgKiBAcGFyYW0gYWxwaGEgYW4gb3B0aW9uYWwgYWxwaGEgbW9kaWZpZXIKLSAgICAgKiBAcmV0dXJuIGEgbmV3IEJ1ZmZlcmVkSW1hZ2UKLSAgICAgKi8KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgQnVmZmVyZWRJbWFnZSBjcmVhdGVDb3B5KEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UsIGludCBpbWFnZVR5cGUsIGludCBhbHBoYSkgewotICAgICAgICBpbnQgdyA9IGltYWdlLmdldFdpZHRoKCk7Ci0gICAgICAgIGludCBoID0gaW1hZ2UuZ2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgQnVmZmVyZWRJbWFnZSByZXN1bHQgPSBuZXcgQnVmZmVyZWRJbWFnZSh3LCBoLCBpbWFnZVR5cGUpOwotCi0gICAgICAgIGludFtdIGFyZ2IgPSBuZXcgaW50W3cgKiBoXTsKLSAgICAgICAgaW1hZ2UuZ2V0UkdCKDAsIDAsIGltYWdlLmdldFdpZHRoKCksIGltYWdlLmdldEhlaWdodCgpLCBhcmdiLCAwLCBpbWFnZS5nZXRXaWR0aCgpKTsKLQotICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gYXJnYi5sZW5ndGg7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGludCBhID0gKGFyZ2JbaV0gPj4+IDI0ICogYWxwaGEpIC8gMjU1OwotICAgICAgICAgICAgICAgIGFyZ2JbaV0gPSAoYSA8PCAyNCkgfCAoYXJnYltpXSAmIDB4MDBGRkZGRkYpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0LnNldFJHQigwLCAwLCB3LCBoLCBhcmdiLCAwLCB3KTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CbHVyTWFza0ZpbHRlcl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CbHVyTWFza0ZpbHRlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmVjYmExLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQmx1ck1hc2tGaWx0ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuQmx1ck1hc2tGaWx0ZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBCbHVyTWFza0ZpbHRlciBoYXZlCi0gKiBiZWVuIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBCbHVyTWFza0ZpbHRlciBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgTWFza0ZpbHRlcl9EZWxlZ2F0ZX0sIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYQotICoge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sIGFzIGFsbCB0aGUgU2hhZGVyIGNsYXNzZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuYWdlcgotICogb3duZWQgYnkge0BsaW5rIE1hc2tGaWx0ZXJfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgTWFza0ZpbHRlcl9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIEJsdXJNYXNrRmlsdGVyX0RlbGVnYXRlIGV4dGVuZHMgTWFza0ZpbHRlcl9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIkJsdXIgTWFzayBGaWx0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiI7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNvbnN0cnVjdG9yKGZsb2F0IHJhZGl1cywgaW50IHN0eWxlKSB7Ci0gICAgICAgIEJsdXJNYXNrRmlsdGVyX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IEJsdXJNYXNrRmlsdGVyX0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhc19EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmI0N2JkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkdjU25hcHNob3Q7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAuQ29uZmlnOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci0KLWltcG9ydCBqYXZhLmF3dC5Db2xvcjsKLWltcG9ydCBqYXZhLmF3dC5Db21wb3NpdGU7Ci1pbXBvcnQgamF2YS5hd3QuR3JhcGhpY3MyRDsKLWltcG9ydCBqYXZhLmF3dC5SZWN0YW5nbGU7Ci1pbXBvcnQgamF2YS5hd3QuUmVuZGVyaW5nSGludHM7Ci1pbXBvcnQgamF2YS5hd3QuU2hhcGU7Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm07Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5BcmMyRDsKLWltcG9ydCBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlOwotCi0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhcwotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIENhbnZhcyBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBDYW52YXMgY2xhc3MuCi0gKgotICogQHNlZSBEZWxlZ2F0ZU1hbmFnZXIKLSAqCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBDYW52YXNfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBtYW5hZ2VyIC0tLS0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBEZWxlZ2F0ZU1hbmFnZXI8Q2FudmFzX0RlbGVnYXRlPiBzTWFuYWdlciA9Ci0gICAgICAgICAgICBuZXcgRGVsZWdhdGVNYW5hZ2VyPENhbnZhc19EZWxlZ2F0ZT4oQ2FudmFzX0RlbGVnYXRlLmNsYXNzKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgaGVscGVyIGRhdGEgLS0tLQotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgYm9vbGVhbltdIHNCb29sT3V0ID0gbmV3IGJvb2xlYW5bMV07Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotICAgIHByaXZhdGUgQml0bWFwX0RlbGVnYXRlIG1CaXRtYXA7Ci0gICAgcHJpdmF0ZSBHY1NuYXBzaG90IG1TbmFwc2hvdDsKLQotICAgIHByaXZhdGUgRHJhd0ZpbHRlcl9EZWxlZ2F0ZSBtRHJhd0ZpbHRlciA9IG51bGw7Ci0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBuYXRpdmUgZGVsZWdhdGUgYXNzb2NpYXRlZCB0byBhIGdpdmVuIHtAbGluayBDYW52YXN9IG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIENhbnZhc19EZWxlZ2F0ZSBnZXREZWxlZ2F0ZShDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShjYW52YXMubU5hdGl2ZUNhbnZhcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmF0aXZlIGRlbGVnYXRlIGFzc29jaWF0ZWQgdG8gYSBnaXZlbiBhbiBpbnQgcmVmZXJlbmNpbmcgYSB7QGxpbmsgQ2FudmFzfSBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBDYW52YXNfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5hdGl2ZV9jYW52YXMpIHsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9jYW52YXMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQge0BsaW5rIEdyYXBoaWNzMkR9IHVzZWQgdG8gZHJhdy4KLSAgICAgKi8KLSAgICBwdWJsaWMgR2NTbmFwc2hvdCBnZXRTbmFwc2hvdCgpIHsKLSAgICAgICAgcmV0dXJuIG1TbmFwc2hvdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgRHJhd0ZpbHRlcn0gZGVsZWdhdGUgb3IgbnVsbCBpZiBub25lIGhhdmUgYmVlbiBzZXQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBkZWxlZ2F0ZSBvciBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBEcmF3RmlsdGVyX0RlbGVnYXRlIGdldERyYXdGaWx0ZXIoKSB7Ci0gICAgICAgIHJldHVybiBtRHJhd0ZpbHRlcjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGlzT3BhcXVlKENhbnZhcyB0aGlzQ2FudmFzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc0NhbnZhcy5tTmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjYW52YXNEZWxlZ2F0ZS5tQml0bWFwLmdldENvbmZpZygpID09IENvbmZpZy5SR0JfNTY1OwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgZ2V0V2lkdGgoQ2FudmFzIHRoaXNDYW52YXMpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzQ2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUubUJpdG1hcC5nZXRJbWFnZSgpLmdldFdpZHRoKCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBnZXRIZWlnaHQoQ2FudmFzIHRoaXNDYW52YXMpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzQ2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUubUJpdG1hcC5nZXRJbWFnZSgpLmdldEhlaWdodCgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgdHJhbnNsYXRlKENhbnZhcyB0aGlzQ2FudmFzLCBmbG9hdCBkeCwgZmxvYXQgZHkpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzQ2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FudmFzRGVsZWdhdGUuZ2V0U25hcHNob3QoKS50cmFuc2xhdGUoZHgsIGR5KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCByb3RhdGUoQ2FudmFzIHRoaXNDYW52YXMsIGZsb2F0IGRlZ3JlZXMpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzQ2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FudmFzRGVsZWdhdGUuZ2V0U25hcHNob3QoKS5yb3RhdGUoTWF0aC50b1JhZGlhbnMoZGVncmVlcykpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2NhbGUoQ2FudmFzIHRoaXNDYW52YXMsIGZsb2F0IHN4LCBmbG9hdCBzeSkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNDYW52YXMubU5hdGl2ZUNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYW52YXNEZWxlZ2F0ZS5nZXRTbmFwc2hvdCgpLnNjYWxlKHN4LCBzeSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBza2V3KENhbnZhcyB0aGlzQ2FudmFzLCBmbG9hdCBreCwgZmxvYXQga3kpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzQ2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IHRvcCBncmFwaGljczJEIG9iamVjdC4KLSAgICAgICAgR2NTbmFwc2hvdCBnID0gY2FudmFzRGVsZWdhdGUuZ2V0U25hcHNob3QoKTsKLQotICAgICAgICAvLyBnZXQgaXRzIGN1cnJlbnQgbWF0cml4Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50VHggPSBnLmdldFRyYW5zZm9ybSgpOwotICAgICAgICAvLyBnZXQgdGhlIEFmZmluZVRyYW5zZm9ybSBmb3IgdGhlIGdpdmVuIHNrZXcuCi0gICAgICAgIGZsb2F0W10gbXR4ID0gTWF0cml4X0RlbGVnYXRlLmdldFNrZXcoa3gsIGt5KTsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeFR4ID0gTWF0cml4X0RlbGVnYXRlLmdldEFmZmluZVRyYW5zZm9ybShtdHgpOwotCi0gICAgICAgIC8vIGNvbWJpbmUgdGhlbSBzbyB0aGF0IHRoZSBnaXZlbiBtYXRyaXggaXMgYXBwbGllZCBhZnRlci4KLSAgICAgICAgY3VycmVudFR4LnByZUNvbmNhdGVuYXRlKG1hdHJpeFR4KTsKLQotICAgICAgICAvLyBnaXZlIGl0IHRvIHRoZSBncmFwaGljczJEIGFzIGEgbmV3IG1hdHJpeCByZXBsYWNpbmcgYWxsIHByZXZpb3VzIHRyYW5zZm9ybQotICAgICAgICBnLnNldFRyYW5zZm9ybShjdXJyZW50VHgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGNsaXBSZWN0KENhbnZhcyB0aGlzQ2FudmFzLCBSZWN0RiByZWN0KSB7Ci0gICAgICAgIHJldHVybiBjbGlwUmVjdCh0aGlzQ2FudmFzLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gY2xpcFJlY3QoQ2FudmFzIHRoaXNDYW52YXMsIFJlY3QgcmVjdCkgewotICAgICAgICByZXR1cm4gY2xpcFJlY3QodGhpc0NhbnZhcywgKGZsb2F0KSByZWN0LmxlZnQsIChmbG9hdCkgcmVjdC50b3AsCi0gICAgICAgICAgICAgICAgKGZsb2F0KSByZWN0LnJpZ2h0LCAoZmxvYXQpIHJlY3QuYm90dG9tKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBjbGlwUmVjdChDYW52YXMgdGhpc0NhbnZhcywgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwKLSAgICAgICAgICAgIGZsb2F0IGJvdHRvbSkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNDYW52YXMubU5hdGl2ZUNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUuY2xpcFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBSZWdpb24uT3AuSU5URVJTRUNULm5hdGl2ZUludCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gY2xpcFJlY3QoQ2FudmFzIHRoaXNDYW52YXMsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsCi0gICAgICAgICAgICBpbnQgYm90dG9tKSB7Ci0KLSAgICAgICAgcmV0dXJuIGNsaXBSZWN0KHRoaXNDYW52YXMsIChmbG9hdCkgbGVmdCwgKGZsb2F0KSB0b3AsIChmbG9hdCkgcmlnaHQsIChmbG9hdCkgYm90dG9tKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IHNhdmUoQ2FudmFzIHRoaXNDYW52YXMpIHsKLSAgICAgICAgcmV0dXJuIHNhdmUodGhpc0NhbnZhcywgQ2FudmFzLk1BVFJJWF9TQVZFX0ZMQUcgfCBDYW52YXMuQ0xJUF9TQVZFX0ZMQUcpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgc2F2ZShDYW52YXMgdGhpc0NhbnZhcywgaW50IHNhdmVGbGFncykgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNDYW52YXMubU5hdGl2ZUNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjYW52YXNEZWxlZ2F0ZS5zYXZlKHNhdmVGbGFncyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgcmVzdG9yZShDYW52YXMgdGhpc0NhbnZhcykgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNDYW52YXMubU5hdGl2ZUNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYW52YXNEZWxlZ2F0ZS5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBnZXRTYXZlQ291bnQoQ2FudmFzIHRoaXNDYW52YXMpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzQ2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUuZ2V0U25hcHNob3QoKS5zaXplKCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgcmVzdG9yZVRvQ291bnQoQ2FudmFzIHRoaXNDYW52YXMsIGludCBzYXZlQ291bnQpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzQ2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FudmFzRGVsZWdhdGUucmVzdG9yZVRvKHNhdmVDb3VudCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgZHJhd1BvaW50cyhDYW52YXMgdGhpc0NhbnZhcywgZmxvYXRbXSBwdHMsIGludCBvZmZzZXQsIGludCBjb3VudCwKLSAgICAgICAgICAgIFBhaW50IHBhaW50KSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQ2FudmFzLmRyYXdQb2ludCBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIGRyYXdQb2ludChDYW52YXMgdGhpc0NhbnZhcywgZmxvYXQgeCwgZmxvYXQgeSwgUGFpbnQgcGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJDYW52YXMuZHJhd1BvaW50IGlzIG5vdCBzdXBwb3J0ZWQuIiwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgZHJhd0xpbmVzKENhbnZhcyB0aGlzQ2FudmFzLAotICAgICAgICAgICAgZmluYWwgZmxvYXRbXSBwdHMsIGZpbmFsIGludCBvZmZzZXQsIGZpbmFsIGludCBjb3VudCwKLSAgICAgICAgICAgIFBhaW50IHBhaW50KSB7Ci0gICAgICAgIGRyYXcodGhpc0NhbnZhcy5tTmF0aXZlQ2FudmFzLCBwYWludC5tTmF0aXZlUGFpbnQsIGZhbHNlIC8qY29tcG9zaXRlT25seSovLAotICAgICAgICAgICAgICAgIGZhbHNlIC8qZm9yY2VTcmNNb2RlKi8sIG5ldyBHY1NuYXBzaG90LkRyYXdhYmxlKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZHJhdyhHcmFwaGljczJEIGdyYXBoaWNzLCBQYWludF9EZWxlZ2F0ZSBwYWludERlbGVnYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBjb3VudCA7IGkgKz0gNCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmRyYXdMaW5lKChpbnQpcHRzW2kgKyBvZmZzZXRdLCAoaW50KXB0c1tpICsgb2Zmc2V0ICsgMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXB0c1tpICsgb2Zmc2V0ICsgMl0sIChpbnQpcHRzW2kgKyBvZmZzZXQgKyAzXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBmcmVlQ2FjaGVzKCkgewotICAgICAgICAvLyBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBmcmVlVGV4dExheW91dENhY2hlcygpIHsKLSAgICAgICAgLy8gbm90aGluZyB0byBiZSBkb25lIGhlcmUgeWV0LgotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgaW5pdFJhc3RlcihpbnQgbmF0aXZlQml0bWFwT3JaZXJvKSB7Ci0gICAgICAgIGlmIChuYXRpdmVCaXRtYXBPclplcm8gPiAwKSB7Ci0gICAgICAgICAgICAvLyBnZXQgdGhlIEJpdG1hcCBmcm9tIHRoZSBpbnQKLSAgICAgICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXBEZWxlZ2F0ZSA9IEJpdG1hcF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShuYXRpdmVCaXRtYXBPclplcm8pOwotCi0gICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgQ2FudmFzX0RlbGVnYXRlIHdpdGggdGhlIGdpdmVuIGJpdG1hcCBhbmQgcmV0dXJuIGl0cyBuZXcgbmF0aXZlIGludC4KLSAgICAgICAgICAgIENhbnZhc19EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBDYW52YXNfRGVsZWdhdGUoYml0bWFwRGVsZWdhdGUpOwotCi0gICAgICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY3JlYXRlIGEgbmV3IENhbnZhc19EZWxlZ2F0ZSBhbmQgcmV0dXJuIGl0cyBuZXcgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IENhbnZhc19EZWxlZ2F0ZSgpOwotCi0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgY29weU5hdGl2ZUNhbnZhc1N0YXRlKGludCBzcmNDYW52YXMsIGludCBkc3RDYW52YXMpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgc3JjQ2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShzcmNDYW52YXMpOwotICAgICAgICBpZiAoc3JjQ2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgZHN0Q2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShkc3RDYW52YXMpOwotICAgICAgICBpZiAoZHN0Q2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFRPRE86IGFjdHVhbGx5IGNvcHkgdGhlIGNhbnZhcyBzdGF0ZS4KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9zYXZlTGF5ZXIoaW50IG5hdGl2ZUNhbnZhcywgUmVjdEYgYm91bmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFpbnQsIGludCBsYXllckZsYWdzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgcGFpbnREZWxlZ2F0ZSA9IFBhaW50X0RlbGVnYXRlLmdldERlbGVnYXRlKHBhaW50KTsKLSAgICAgICAgaWYgKHBhaW50RGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUuc2F2ZUxheWVyKGJvdW5kcywgcGFpbnREZWxlZ2F0ZSwgbGF5ZXJGbGFncyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfc2F2ZUxheWVyKGludCBuYXRpdmVDYW52YXMsIGZsb2F0IGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHQsIGZsb2F0IHIsIGZsb2F0IGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYWludCwgaW50IGxheWVyRmxhZ3MpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBQYWludF9EZWxlZ2F0ZSBwYWludERlbGVnYXRlID0gUGFpbnRfRGVsZWdhdGUuZ2V0RGVsZWdhdGUocGFpbnQpOwotICAgICAgICBpZiAocGFpbnREZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjYW52YXNEZWxlZ2F0ZS5zYXZlTGF5ZXIobmV3IFJlY3RGKGwsIHQsIHIsIGIpLAotICAgICAgICAgICAgICAgIHBhaW50RGVsZWdhdGUsIGxheWVyRmxhZ3MpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX3NhdmVMYXllckFscGhhKGludCBuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjdEYgYm91bmRzLCBpbnQgYWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxheWVyRmxhZ3MpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUuc2F2ZUxheWVyQWxwaGEoYm91bmRzLCBhbHBoYSwgbGF5ZXJGbGFncyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfc2F2ZUxheWVyQWxwaGEoaW50IG5hdGl2ZUNhbnZhcywgZmxvYXQgbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB0LCBmbG9hdCByLCBmbG9hdCBiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYSwgaW50IGxheWVyRmxhZ3MpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUuc2F2ZUxheWVyQWxwaGEobmV3IFJlY3RGKGwsIHQsIHIsIGIpLCBhbHBoYSwgbGF5ZXJGbGFncyk7Ci0gICAgfQotCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfY29uY2F0KGludCBuQ2FudmFzLCBpbnQgbk1hdHJpeCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5DYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIG1hdHJpeERlbGVnYXRlID0gTWF0cml4X0RlbGVnYXRlLmdldERlbGVnYXRlKG5NYXRyaXgpOwotICAgICAgICBpZiAobWF0cml4RGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IHRvcCBncmFwaGljczJEIG9iamVjdC4KLSAgICAgICAgR2NTbmFwc2hvdCBzbmFwc2hvdCA9IGNhbnZhc0RlbGVnYXRlLmdldFNuYXBzaG90KCk7Ci0KLSAgICAgICAgLy8gZ2V0IGl0cyBjdXJyZW50IG1hdHJpeAotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3VycmVudFR4ID0gc25hcHNob3QuZ2V0VHJhbnNmb3JtKCk7Ci0gICAgICAgIC8vIGdldCB0aGUgQWZmaW5lVHJhbnNmb3JtIG9mIHRoZSBnaXZlbiBtYXRyaXgKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeFR4ID0gbWF0cml4RGVsZWdhdGUuZ2V0QWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICAgICAgLy8gY29tYmluZSB0aGVtIHNvIHRoYXQgdGhlIGdpdmVuIG1hdHJpeCBpcyBhcHBsaWVkIGFmdGVyLgotICAgICAgICBjdXJyZW50VHguY29uY2F0ZW5hdGUobWF0cml4VHgpOwotCi0gICAgICAgIC8vIGdpdmUgaXQgdG8gdGhlIGdyYXBoaWNzMkQgYXMgYSBuZXcgbWF0cml4IHJlcGxhY2luZyBhbGwgcHJldmlvdXMgdHJhbnNmb3JtCi0gICAgICAgIHNuYXBzaG90LnNldFRyYW5zZm9ybShjdXJyZW50VHgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRNYXRyaXgoaW50IG5DYW52YXMsIGludCBuTWF0cml4KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobkNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgbWF0cml4RGVsZWdhdGUgPSBNYXRyaXhfRGVsZWdhdGUuZ2V0RGVsZWdhdGUobk1hdHJpeCk7Ci0gICAgICAgIGlmIChtYXRyaXhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBnZXQgdGhlIGN1cnJlbnQgdG9wIGdyYXBoaWNzMkQgb2JqZWN0LgotICAgICAgICBHY1NuYXBzaG90IHNuYXBzaG90ID0gY2FudmFzRGVsZWdhdGUuZ2V0U25hcHNob3QoKTsKLQotICAgICAgICAvLyBnZXQgdGhlIEFmZmluZVRyYW5zZm9ybSBvZiB0aGUgZ2l2ZW4gbWF0cml4Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXhUeCA9IG1hdHJpeERlbGVnYXRlLmdldEFmZmluZVRyYW5zZm9ybSgpOwotCi0gICAgICAgIC8vIGdpdmUgaXQgdG8gdGhlIGdyYXBoaWNzMkQgYXMgYSBuZXcgbWF0cml4IHJlcGxhY2luZyBhbGwgcHJldmlvdXMgdHJhbnNmb3JtCi0gICAgICAgIHNuYXBzaG90LnNldFRyYW5zZm9ybShtYXRyaXhUeCk7Ci0KLSAgICAgICAgaWYgKG1hdHJpeERlbGVnYXRlLmhhc1BlcnNwZWN0aXZlKCkpIHsKLSAgICAgICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19NQVRSSVhfQUZGSU5FLAotICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5DYW52YXMjc2V0TWF0cml4KGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4KSBvbmx5ICIgKwotICAgICAgICAgICAgICAgICAgICAic3VwcG9ydHMgYWZmaW5lIHRyYW5zZm9ybWF0aW9ucy4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9jbGlwUmVjdChpbnQgbkNhbnZhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVnaW9uT3ApIHsKLQotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5DYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNhbnZhc0RlbGVnYXRlLmNsaXBSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcmVnaW9uT3ApOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9jbGlwUGF0aChpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmF0aXZlUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlZ2lvbk9wKSB7Ci0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gUGF0aF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShuYXRpdmVQYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjYW52YXNEZWxlZ2F0ZS5tU25hcHNob3QuY2xpcChwYXRoRGVsZWdhdGUuZ2V0SmF2YVNoYXBlKCksIHJlZ2lvbk9wKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfY2xpcFJlZ2lvbihpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYXRpdmVSZWdpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlZ2lvbk9wKSB7Ci0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb24gPSBSZWdpb25fRGVsZWdhdGUuZ2V0RGVsZWdhdGUobmF0aXZlUmVnaW9uKTsKLSAgICAgICAgaWYgKHJlZ2lvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjYW52YXNEZWxlZ2F0ZS5tU25hcHNob3QuY2xpcChyZWdpb24uZ2V0SmF2YUFyZWEoKSwgcmVnaW9uT3ApOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZVNldERyYXdGaWx0ZXIoaW50IG5hdGl2ZUNhbnZhcywgaW50IG5hdGl2ZUZpbHRlcikgewotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FudmFzRGVsZWdhdGUubURyYXdGaWx0ZXIgPSBEcmF3RmlsdGVyX0RlbGVnYXRlLmdldERlbGVnYXRlKG5hdGl2ZUZpbHRlcik7Ci0KLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlLm1EcmF3RmlsdGVyICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICBjYW52YXNEZWxlZ2F0ZS5tRHJhd0ZpbHRlci5pc1N1cHBvcnRlZCgpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfRFJBV0ZJTFRFUiwKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzRGVsZWdhdGUubURyYXdGaWx0ZXIuZ2V0U3VwcG9ydE1lc3NhZ2UoKSwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfZ2V0Q2xpcEJvdW5kcyhpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3QgYm91bmRzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlY3RhbmdsZSByZWN0ID0gY2FudmFzRGVsZWdhdGUuZ2V0U25hcHNob3QoKS5nZXRDbGlwKCkuZ2V0Qm91bmRzKCk7Ci0gICAgICAgIGlmIChyZWN0ICE9IG51bGwgJiYgcmVjdC5pc0VtcHR5KCkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIGJvdW5kcy5sZWZ0ID0gcmVjdC54OwotICAgICAgICAgICAgYm91bmRzLnRvcCA9IHJlY3QueTsKLSAgICAgICAgICAgIGJvdW5kcy5yaWdodCA9IHJlY3QueCArIHJlY3Qud2lkdGg7Ci0gICAgICAgICAgICBib3VuZHMuYm90dG9tID0gcmVjdC55ICsgcmVjdC5oZWlnaHQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZ2V0Q1RNKGludCBjYW52YXMsIGludCBtYXRyaXgpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShjYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIG1hdHJpeERlbGVnYXRlID0gTWF0cml4X0RlbGVnYXRlLmdldERlbGVnYXRlKG1hdHJpeCk7Ci0gICAgICAgIGlmIChtYXRyaXhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gY2FudmFzRGVsZWdhdGUuZ2V0U25hcHNob3QoKS5nZXRUcmFuc2Zvcm0oKTsKLSAgICAgICAgbWF0cml4RGVsZWdhdGUuc2V0KE1hdHJpeF9EZWxlZ2F0ZS5tYWtlVmFsdWVzKHRyYW5zZm9ybSkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9xdWlja1JlamVjdChpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWN0RiByZWN0KSB7Ci0gICAgICAgIC8vIEZJWE1FIHByb3Blcmx5IGltcGxlbWVudCBxdWlja1JlamVjdAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3F1aWNrUmVqZWN0KGludCBuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoKSB7Ci0gICAgICAgIC8vIEZJWE1FIHByb3Blcmx5IGltcGxlbWVudCBxdWlja1JlamVjdAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3F1aWNrUmVqZWN0KGludCBuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSkgewotICAgICAgICAvLyBGSVhNRSBwcm9wZXJseSBpbXBsZW1lbnQgcXVpY2tSZWplY3QKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3UkdCKGludCBuYXRpdmVDYW52YXMsIGludCByLCBpbnQgZywgaW50IGIpIHsKLSAgICAgICAgbmF0aXZlX2RyYXdDb2xvcihuYXRpdmVDYW52YXMsIDB4RkYwMDAwMDAgfCByIDw8IDE2IHwgKGcmMHhGRikgPDwgOCB8IChiJjB4RkYpLAotICAgICAgICAgICAgICAgIFBvcnRlckR1ZmYuTW9kZS5TUkNfT1ZFUi5uYXRpdmVJbnQpOwotCi0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdBUkdCKGludCBuYXRpdmVDYW52YXMsIGludCBhLCBpbnQgciwgaW50IGcsIGludCBiKSB7Ci0gICAgICAgIG5hdGl2ZV9kcmF3Q29sb3IobmF0aXZlQ2FudmFzLCBhIDw8IDI0IHwgKHImMHhGRikgPDwgMTYgfCAoZyYweEZGKSA8PCA4IHwgKGImMHhGRiksCi0gICAgICAgICAgICAgICAgUG9ydGVyRHVmZi5Nb2RlLlNSQ19PVkVSLm5hdGl2ZUludCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdDb2xvcihpbnQgbmF0aXZlQ2FudmFzLCBpbnQgY29sb3IpIHsKLSAgICAgICAgbmF0aXZlX2RyYXdDb2xvcihuYXRpdmVDYW52YXMsIGNvbG9yLCBQb3J0ZXJEdWZmLk1vZGUuU1JDX09WRVIubmF0aXZlSW50KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd0NvbG9yKGludCBuYXRpdmVDYW52YXMsIGZpbmFsIGludCBjb2xvciwgZmluYWwgaW50IG1vZGUpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgaW50IHcgPSBjYW52YXNEZWxlZ2F0ZS5tQml0bWFwLmdldEltYWdlKCkuZ2V0V2lkdGgoKTsKLSAgICAgICAgZmluYWwgaW50IGggPSBjYW52YXNEZWxlZ2F0ZS5tQml0bWFwLmdldEltYWdlKCkuZ2V0SGVpZ2h0KCk7Ci0gICAgICAgIGRyYXcobmF0aXZlQ2FudmFzLCBuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KEdyYXBoaWNzMkQgZ3JhcGhpY3MsIFBhaW50X0RlbGVnYXRlIHBhaW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gcmVzZXQgaXRzIHRyYW5zZm9ybSBqdXN0IGluIGNhc2UKLSAgICAgICAgICAgICAgICBncmFwaGljcy5zZXRUcmFuc2Zvcm0obmV3IEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgY29sb3IKLSAgICAgICAgICAgICAgICBncmFwaGljcy5zZXRDb2xvcihuZXcgQ29sb3IoY29sb3IsIHRydWUgLyphbHBoYSovKSk7Ci0KLSAgICAgICAgICAgICAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gUG9ydGVyRHVmZlhmZXJtb2RlX0RlbGVnYXRlLmdldENvbXBvc2l0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRlckR1ZmZYZmVybW9kZV9EZWxlZ2F0ZS5nZXRQb3J0ZXJEdWZmTW9kZShtb2RlKSwgMHhGRik7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbXBvc2l0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLnNldENvbXBvc2l0ZShjb21wb3NpdGUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGdyYXBoaWNzLmZpbGxSZWN0KDAsIDAsIHcsIGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd1BhaW50KGludCBuYXRpdmVDYW52YXMsIGludCBwYWludCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIkNhbnZhcy5kcmF3UGFpbnQgaXMgbm90IHN1cHBvcnRlZC4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd0xpbmUoaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IHN0YXJ0WCwgZmluYWwgZmxvYXQgc3RhcnRZLCBmaW5hbCBmbG9hdCBzdG9wWCwgZmluYWwgZmxvYXQgc3RvcFksCi0gICAgICAgICAgICBpbnQgcGFpbnQpIHsKLQotICAgICAgICBkcmF3KG5hdGl2ZUNhbnZhcywgcGFpbnQsIGZhbHNlIC8qY29tcG9zaXRlT25seSovLCBmYWxzZSAvKmZvcmNlU3JjTW9kZSovLAotICAgICAgICAgICAgICAgIG5ldyBHY1NuYXBzaG90LkRyYXdhYmxlKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZHJhdyhHcmFwaGljczJEIGdyYXBoaWNzLCBQYWludF9EZWxlZ2F0ZSBwYWludERlbGVnYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5kcmF3TGluZSgoaW50KXN0YXJ0WCwgKGludClzdGFydFksIChpbnQpc3RvcFgsIChpbnQpc3RvcFkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3UmVjdChpbnQgbmF0aXZlQ2FudmFzLCBSZWN0RiByZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFpbnQpIHsKLSAgICAgICAgbmF0aXZlX2RyYXdSZWN0KG5hdGl2ZUNhbnZhcywgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20sIHBhaW50KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd1JlY3QoaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IGxlZnQsIGZpbmFsIGZsb2F0IHRvcCwgZmluYWwgZmxvYXQgcmlnaHQsIGZpbmFsIGZsb2F0IGJvdHRvbSwgaW50IHBhaW50KSB7Ci0KLSAgICAgICAgZHJhdyhuYXRpdmVDYW52YXMsIHBhaW50LCBmYWxzZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLywKLSAgICAgICAgICAgICAgICBuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnREZWxlZ2F0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0eWxlID0gcGFpbnREZWxlZ2F0ZS5nZXRTdHlsZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTC5uYXRpdmVJbnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTF9BTkRfU1RST0tFLm5hdGl2ZUludCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmZpbGxSZWN0KChpbnQpbGVmdCwgKGludCl0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShyaWdodC1sZWZ0KSwgKGludCkoYm90dG9tLXRvcCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUGFpbnQuU3R5bGUuU1RST0tFLm5hdGl2ZUludCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9PSBQYWludC5TdHlsZS5GSUxMX0FORF9TVFJPS0UubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZHJhd1JlY3QoKGludClsZWZ0LCAoaW50KXRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHJpZ2h0LWxlZnQpLCAoaW50KShib3R0b20tdG9wKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdPdmFsKGludCBuYXRpdmVDYW52YXMsIGZpbmFsIFJlY3RGIG92YWwsIGludCBwYWludCkgewotICAgICAgICBpZiAob3ZhbC5yaWdodCA+IG92YWwubGVmdCAmJiBvdmFsLmJvdHRvbSA+IG92YWwudG9wKSB7Ci0gICAgICAgICAgICBkcmF3KG5hdGl2ZUNhbnZhcywgcGFpbnQsIGZhbHNlIC8qY29tcG9zaXRlT25seSovLCBmYWxzZSAvKmZvcmNlU3JjTW9kZSovLAotICAgICAgICAgICAgICAgICAgICBuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZHJhdyhHcmFwaGljczJEIGdyYXBoaWNzLCBQYWludF9EZWxlZ2F0ZSBwYWludERlbGVnYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0eWxlID0gcGFpbnREZWxlZ2F0ZS5nZXRTdHlsZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBQYWludC5TdHlsZS5GSUxMLm5hdGl2ZUludCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTF9BTkRfU1RST0tFLm5hdGl2ZUludCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5maWxsT3ZhbCgoaW50KW92YWwubGVmdCwgKGludClvdmFsLnRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KW92YWwud2lkdGgoKSwgKGludClvdmFsLmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUGFpbnQuU3R5bGUuU1RST0tFLm5hdGl2ZUludCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTF9BTkRfU1RST0tFLm5hdGl2ZUludCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5kcmF3T3ZhbCgoaW50KW92YWwubGVmdCwgKGludClvdmFsLnRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KW92YWwud2lkdGgoKSwgKGludClvdmFsLmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3Q2lyY2xlKGludCBuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICBmbG9hdCBjeCwgZmxvYXQgY3ksIGZsb2F0IHJhZGl1cywgaW50IHBhaW50KSB7Ci0gICAgICAgIG5hdGl2ZV9kcmF3T3ZhbChuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICAgICAgbmV3IFJlY3RGKGN4IC0gcmFkaXVzLCBjeSAtIHJhZGl1cywgY3ggKyByYWRpdXMsIGN5ICsgcmFkaXVzKSwKLSAgICAgICAgICAgICAgICBwYWludCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdBcmMoaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgIGZpbmFsIFJlY3RGIG92YWwsIGZpbmFsIGZsb2F0IHN0YXJ0QW5nbGUsIGZpbmFsIGZsb2F0IHN3ZWVwLAotICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VDZW50ZXIsIGludCBwYWludCkgewotICAgICAgICBpZiAob3ZhbC5yaWdodCA+IG92YWwubGVmdCAmJiBvdmFsLmJvdHRvbSA+IG92YWwudG9wKSB7Ci0gICAgICAgICAgICBkcmF3KG5hdGl2ZUNhbnZhcywgcGFpbnQsIGZhbHNlIC8qY29tcG9zaXRlT25seSovLCBmYWxzZSAvKmZvcmNlU3JjTW9kZSovLAotICAgICAgICAgICAgICAgICAgICBuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZHJhdyhHcmFwaGljczJEIGdyYXBoaWNzLCBQYWludF9EZWxlZ2F0ZSBwYWludERlbGVnYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0eWxlID0gcGFpbnREZWxlZ2F0ZS5nZXRTdHlsZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJjMkQuRmxvYXQgYXJjID0gbmV3IEFyYzJELkZsb2F0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZhbC5sZWZ0LCBvdmFsLnRvcCwgb3ZhbC53aWR0aCgpLCBvdmFsLmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXJ0QW5nbGUsIC1zd2VlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNlbnRlciA/IEFyYzJELlBJRSA6IEFyYzJELk9QRU4pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBQYWludC5TdHlsZS5GSUxMLm5hdGl2ZUludCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTF9BTkRfU1RST0tFLm5hdGl2ZUludCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5maWxsKGFyYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlID09IFBhaW50LlN0eWxlLlNUUk9LRS5uYXRpdmVJbnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID09IFBhaW50LlN0eWxlLkZJTExfQU5EX1NUUk9LRS5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZHJhdyhhcmMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdSb3VuZFJlY3QoaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgIGZpbmFsIFJlY3RGIHJlY3QsIGZpbmFsIGZsb2F0IHJ4LCBmaW5hbCBmbG9hdCByeSwgaW50IHBhaW50KSB7Ci0KLSAgICAgICAgZHJhdyhuYXRpdmVDYW52YXMsIHBhaW50LCBmYWxzZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLywKLSAgICAgICAgICAgICAgICBuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnREZWxlZ2F0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0eWxlID0gcGFpbnREZWxlZ2F0ZS5nZXRTdHlsZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkcmF3Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTC5uYXRpdmVJbnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTF9BTkRfU1RST0tFLm5hdGl2ZUludCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmZpbGxSb3VuZFJlY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJlY3QubGVmdCwgKGludClyZWN0LnRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcmVjdC53aWR0aCgpLCAoaW50KXJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJ4LCAoaW50KXJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlID09IFBhaW50LlN0eWxlLlNUUk9LRS5uYXRpdmVJbnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTF9BTkRfU1RST0tFLm5hdGl2ZUludCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmRyYXdSb3VuZFJlY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJlY3QubGVmdCwgKGludClyZWN0LnRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpcmVjdC53aWR0aCgpLCAoaW50KXJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJ4LCAoaW50KXJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd1BhdGgoaW50IG5hdGl2ZUNhbnZhcywgaW50IHBhdGgsIGludCBwYWludCkgewotICAgICAgICBmaW5hbCBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IFBhdGhfRGVsZWdhdGUuZ2V0RGVsZWdhdGUocGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhdyhuYXRpdmVDYW52YXMsIHBhaW50LCBmYWxzZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLywKLSAgICAgICAgICAgICAgICBuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnREZWxlZ2F0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU2hhcGUgc2hhcGUgPSBwYXRoRGVsZWdhdGUuZ2V0SmF2YVNoYXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3R5bGUgPSBwYWludERlbGVnYXRlLmdldFN0eWxlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBQYWludC5TdHlsZS5GSUxMLm5hdGl2ZUludCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9PSBQYWludC5TdHlsZS5GSUxMX0FORF9TVFJPS0UubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZmlsbChzaGFwZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBQYWludC5TdHlsZS5TVFJPS0UubmF0aXZlSW50IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID09IFBhaW50LlN0eWxlLkZJTExfQU5EX1NUUk9LRS5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5kcmF3KHNoYXBlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd0JpdG1hcChDYW52YXMgdGhpc0NhbnZhcywgaW50IG5hdGl2ZUNhbnZhcywgaW50IGJpdG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hdGl2ZVBhaW50T3JaZXJvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYW52YXNEZW5zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5EZW5zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRtYXBEZW5zaXR5KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGJpdG1hcERlbGVnYXRlID0gQml0bWFwX0RlbGVnYXRlLmdldERlbGVnYXRlKGJpdG1hcCk7Ci0gICAgICAgIGlmIChiaXRtYXBEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gYml0bWFwRGVsZWdhdGUuZ2V0SW1hZ2UoKTsKLSAgICAgICAgZmxvYXQgcmlnaHQgPSBsZWZ0ICsgaW1hZ2UuZ2V0V2lkdGgoKTsKLSAgICAgICAgZmxvYXQgYm90dG9tID0gdG9wICsgaW1hZ2UuZ2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgZHJhd0JpdG1hcChuYXRpdmVDYW52YXMsIGJpdG1hcERlbGVnYXRlLCBuYXRpdmVQYWludE9yWmVybywKLSAgICAgICAgICAgICAgICAwLCAwLCBpbWFnZS5nZXRXaWR0aCgpLCBpbWFnZS5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAoaW50KWxlZnQsIChpbnQpdG9wLCAoaW50KXJpZ2h0LCAoaW50KWJvdHRvbSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdCaXRtYXAoQ2FudmFzIHRoaXNDYW52YXMsIGludCBuYXRpdmVDYW52YXMsIGludCBiaXRtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjdCBzcmMsIFJlY3RGIGRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmF0aXZlUGFpbnRPclplcm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbkRlbnNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdG1hcERlbnNpdHkpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgYml0bWFwRGVsZWdhdGUgPSBCaXRtYXBfRGVsZWdhdGUuZ2V0RGVsZWdhdGUoYml0bWFwKTsKLSAgICAgICAgaWYgKGJpdG1hcERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UgPSBiaXRtYXBEZWxlZ2F0ZS5nZXRJbWFnZSgpOwotCi0gICAgICAgIGlmIChzcmMgPT0gbnVsbCkgewotICAgICAgICAgICAgZHJhd0JpdG1hcChuYXRpdmVDYW52YXMsIGJpdG1hcERlbGVnYXRlLCBuYXRpdmVQYWludE9yWmVybywKLSAgICAgICAgICAgICAgICAgICAgMCwgMCwgaW1hZ2UuZ2V0V2lkdGgoKSwgaW1hZ2UuZ2V0SGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgIChpbnQpZHN0LmxlZnQsIChpbnQpZHN0LnRvcCwgKGludClkc3QucmlnaHQsIChpbnQpZHN0LmJvdHRvbSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkcmF3Qml0bWFwKG5hdGl2ZUNhbnZhcywgYml0bWFwRGVsZWdhdGUsIG5hdGl2ZVBhaW50T3JaZXJvLAotICAgICAgICAgICAgICAgICAgICBzcmMubGVmdCwgc3JjLnRvcCwgc3JjLndpZHRoKCksIHNyYy5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgKGludClkc3QubGVmdCwgKGludClkc3QudG9wLCAoaW50KWRzdC5yaWdodCwgKGludClkc3QuYm90dG9tKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3Qml0bWFwKGludCBuYXRpdmVDYW52YXMsIGludCBiaXRtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjdCBzcmMsIFJlY3QgZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYXRpdmVQYWludE9yWmVybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuRGVuc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0bWFwRGVuc2l0eSkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXBEZWxlZ2F0ZSA9IEJpdG1hcF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShiaXRtYXApOwotICAgICAgICBpZiAoYml0bWFwRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVmZmVyZWRJbWFnZSBpbWFnZSA9IGJpdG1hcERlbGVnYXRlLmdldEltYWdlKCk7Ci0KLSAgICAgICAgaWYgKHNyYyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBkcmF3Qml0bWFwKG5hdGl2ZUNhbnZhcywgYml0bWFwRGVsZWdhdGUsIG5hdGl2ZVBhaW50T3JaZXJvLAotICAgICAgICAgICAgICAgICAgICAwLCAwLCBpbWFnZS5nZXRXaWR0aCgpLCBpbWFnZS5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgZHN0LmxlZnQsIGRzdC50b3AsIGRzdC5yaWdodCwgZHN0LmJvdHRvbSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkcmF3Qml0bWFwKG5hdGl2ZUNhbnZhcywgYml0bWFwRGVsZWdhdGUsIG5hdGl2ZVBhaW50T3JaZXJvLAotICAgICAgICAgICAgICAgICAgICBzcmMubGVmdCwgc3JjLnRvcCwgc3JjLndpZHRoKCksIHNyYy5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgZHN0LmxlZnQsIGRzdC50b3AsIGRzdC5yaWdodCwgZHN0LmJvdHRvbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd0JpdG1hcChpbnQgbmF0aXZlQ2FudmFzLCBpbnRbXSBjb2xvcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LCBpbnQgc3RyaWRlLCBmaW5hbCBmbG9hdCB4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGhhc0FscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYXRpdmVQYWludE9yWmVybykgewotCi0gICAgICAgIC8vIGNyZWF0ZSBhIHRlbXAgQnVmZmVyZWRJbWFnZSBjb250YWluaW5nIHRoZSBjb250ZW50LgotICAgICAgICBmaW5hbCBCdWZmZXJlZEltYWdlIGltYWdlID0gbmV3IEJ1ZmZlcmVkSW1hZ2Uod2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICBoYXNBbHBoYSA/IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQiA6IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfUkdCKTsKLSAgICAgICAgaW1hZ2Uuc2V0UkdCKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGNvbG9ycywgb2Zmc2V0LCBzdHJpZGUpOwotCi0gICAgICAgIGRyYXcobmF0aXZlQ2FudmFzLCBuYXRpdmVQYWludE9yWmVybywgdHJ1ZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLywKLSAgICAgICAgICAgICAgICBuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWludCAhPSBudWxsICYmIHBhaW50LmlzRmlsdGVyQml0bWFwKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5zZXRSZW5kZXJpbmdIaW50KFJlbmRlcmluZ0hpbnRzLktFWV9JTlRFUlBPTEFUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyaW5nSGludHMuVkFMVUVfSU5URVJQT0xBVElPTl9CSUxJTkVBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmRyYXdJbWFnZShpbWFnZSwgKGludCkgeCwgKGludCkgeSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlRHJhd0JpdG1hcE1hdHJpeChpbnQgbkNhbnZhcywgaW50IG5CaXRtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbk1hdHJpeCwgaW50IG5QYWludCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5DYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LCB3aGljaCBjYW4gYmUgbnVsbAotICAgICAgICBQYWludF9EZWxlZ2F0ZSBwYWludERlbGVnYXRlID0gUGFpbnRfRGVsZWdhdGUuZ2V0RGVsZWdhdGUoblBhaW50KTsKLQotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXBEZWxlZ2F0ZSA9IEJpdG1hcF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShuQml0bWFwKTsKLSAgICAgICAgaWYgKGJpdG1hcERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UgPSBnZXRJbWFnZVRvRHJhdyhiaXRtYXBEZWxlZ2F0ZSwgcGFpbnREZWxlZ2F0ZSwgc0Jvb2xPdXQpOwotCi0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBtYXRyaXhEZWxlZ2F0ZSA9IE1hdHJpeF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShuTWF0cml4KTsKLSAgICAgICAgaWYgKG1hdHJpeERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIEFmZmluZVRyYW5zZm9ybSBtdHggPSBtYXRyaXhEZWxlZ2F0ZS5nZXRBZmZpbmVUcmFuc2Zvcm0oKTsKLQotICAgICAgICBjYW52YXNEZWxlZ2F0ZS5nZXRTbmFwc2hvdCgpLmRyYXcobmV3IEdjU25hcHNob3QuRHJhd2FibGUoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZHJhdyhHcmFwaGljczJEIGdyYXBoaWNzLCBQYWludF9EZWxlZ2F0ZSBwYWludCkgewotICAgICAgICAgICAgICAgICAgICBpZiAocGFpbnQgIT0gbnVsbCAmJiBwYWludC5pc0ZpbHRlckJpdG1hcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5zZXRSZW5kZXJpbmdIaW50KFJlbmRlcmluZ0hpbnRzLktFWV9JTlRFUlBPTEFUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJpbmdIaW50cy5WQUxVRV9JTlRFUlBPTEFUSU9OX0JJTElORUFSKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vRklYTUUgYWRkIHN1cHBvcnQgZm9yIGNhbnZhcywgc2NyZWVuIGFuZCBiaXRtYXAgZGVuc2l0aWVzLgotICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5kcmF3SW1hZ2UoaW1hZ2UsIG10eCwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LCBwYWludERlbGVnYXRlLCB0cnVlIC8qY29tcG9zaXRlT25seSovLCBmYWxzZSAvKmZvcmNlU3JjTW9kZSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVEcmF3Qml0bWFwTWVzaChpbnQgbkNhbnZhcywgaW50IG5CaXRtYXAsCi0gICAgICAgICAgICBpbnQgbWVzaFdpZHRoLCBpbnQgbWVzaEhlaWdodCwgZmxvYXRbXSB2ZXJ0cywgaW50IHZlcnRPZmZzZXQsIGludFtdIGNvbG9ycywKLSAgICAgICAgICAgIGludCBjb2xvck9mZnNldCwgaW50IG5QYWludCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIkNhbnZhcy5kcmF3Qml0bWFwTWVzaCBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZURyYXdWZXJ0aWNlcyhpbnQgbkNhbnZhcywgaW50IG1vZGUsIGludCBuLAotICAgICAgICAgICAgZmxvYXRbXSB2ZXJ0cywgaW50IHZlcnRPZmZzZXQsCi0gICAgICAgICAgICBmbG9hdFtdIHRleHMsIGludCB0ZXhPZmZzZXQsCi0gICAgICAgICAgICBpbnRbXSBjb2xvcnMsIGludCBjb2xvck9mZnNldCwKLSAgICAgICAgICAgIHNob3J0W10gaW5kaWNlcywgaW50IGluZGV4T2Zmc2V0LAotICAgICAgICAgICAgaW50IGluZGV4Q291bnQsIGludCBuUGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJDYW52YXMuZHJhd1ZlcnRpY2VzIGlzIG5vdCBzdXBwb3J0ZWQuIiwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdUZXh0KGludCBuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICBmaW5hbCBjaGFyW10gdGV4dCwgZmluYWwgaW50IGluZGV4LCBmaW5hbCBpbnQgY291bnQsCi0gICAgICAgICAgICBmaW5hbCBmbG9hdCBzdGFydFgsIGZpbmFsIGZsb2F0IHN0YXJ0WSwgZmluYWwgaW50IGZsYWdzLCBpbnQgcGFpbnQpIHsKLQotICAgICAgICBkcmF3KG5hdGl2ZUNhbnZhcywgcGFpbnQsIGZhbHNlIC8qY29tcG9zaXRlT25seSovLCBmYWxzZSAvKmZvcmNlU3JjTW9kZSovLAotICAgICAgICAgICAgICAgIG5ldyBHY1NuYXBzaG90LkRyYXdhYmxlKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KEdyYXBoaWNzMkQgZ3JhcGhpY3MsIFBhaW50X0RlbGVnYXRlIHBhaW50RGVsZWdhdGUpIHsKLSAgICAgICAgICAgICAgICAvLyBXQVJOSU5HOiB0aGUgbG9naWMgaW4gdGhpcyBtZXRob2QgaXMgc2ltaWxhciB0byBQYWludF9EZWxlZ2F0ZS5tZWFzdXJlVGV4dC4KLSAgICAgICAgICAgICAgICAvLyBBbnkgY2hhbmdlIHRvIHRoaXMgbWV0aG9kIHNob3VsZCBiZSByZWZsZWN0ZWQgaW4gUGFpbnQubWVhc3VyZVRleHQKLSAgICAgICAgICAgICAgICAvLyBQYWludC5UZXh0QWxpZ24gaW5kaWNhdGVzIGhvdyB0aGUgdGV4dCBpcyBwb3NpdGlvbmVkIHJlbGF0aXZlIHRvIFguCi0gICAgICAgICAgICAgICAgLy8gTEVGVCBpcyB0aGUgZGVmYXVsdCBhbmQgdGhlcmUncyBub3RoaW5nIHRvIGRvLgotICAgICAgICAgICAgICAgIGZsb2F0IHggPSBzdGFydFg7Ci0gICAgICAgICAgICAgICAgaW50IGxpbWl0ID0gaW5kZXggKyBjb3VudDsKLSAgICAgICAgICAgICAgICBib29sZWFuIGlzUnRsID0gZmxhZ3MgPT0gQ2FudmFzLkRJUkVDVElPTl9SVEw7Ci0gICAgICAgICAgICAgICAgaWYgKHBhaW50RGVsZWdhdGUuZ2V0VGV4dEFsaWduKCkgIT0gUGFpbnQuQWxpZ24uTEVGVC5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgbSA9IHBhaW50RGVsZWdhdGUubWVhc3VyZVRleHQodGV4dCwgaW5kZXgsIGNvdW50LCBpc1J0bCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYWludERlbGVnYXRlLmdldFRleHRBbGlnbigpID09IFBhaW50LkFsaWduLkNFTlRFUi5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggLT0gbSAvIDI7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFpbnREZWxlZ2F0ZS5nZXRUZXh0QWxpZ24oKSA9PSBQYWludC5BbGlnbi5SSUdIVC5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggLT0gbTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5ldyBCaWRpUmVuZGVyZXIoZ3JhcGhpY3MsIHBhaW50RGVsZWdhdGUsIHRleHQpLnJlbmRlclRleHQoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgbGltaXQsIGlzUnRsLCBudWxsLCAwLCB0cnVlLCB4LCBzdGFydFkpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd1RleHQoaW50IG5hdGl2ZUNhbnZhcywgU3RyaW5nIHRleHQsCi0gICAgICAgICAgICBpbnQgc3RhcnQsIGludCBlbmQsIGZsb2F0IHgsIGZsb2F0IHksIGZpbmFsIGludCBmbGFncywgaW50IHBhaW50KSB7Ci0gICAgICAgIGludCBjb3VudCA9IGVuZCAtIHN0YXJ0OwotICAgICAgICBjaGFyW10gYnVmZmVyID0gVGVtcG9yYXJ5QnVmZmVyLm9idGFpbihjb3VudCk7Ci0gICAgICAgIFRleHRVdGlscy5nZXRDaGFycyh0ZXh0LCBzdGFydCwgZW5kLCBidWZmZXIsIDApOwotCi0gICAgICAgIG5hdGl2ZV9kcmF3VGV4dChuYXRpdmVDYW52YXMsIGJ1ZmZlciwgMCwgY291bnQsIHgsIHksIGZsYWdzLCBwYWludCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdUZXh0UnVuKGludCBuYXRpdmVDYW52YXMsIFN0cmluZyB0ZXh0LAotICAgICAgICAgICAgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgY29udGV4dFN0YXJ0LCBpbnQgY29udGV4dEVuZCwKLSAgICAgICAgICAgIGZsb2F0IHgsIGZsb2F0IHksIGludCBmbGFncywgaW50IHBhaW50KSB7Ci0gICAgICAgIGludCBjb3VudCA9IGVuZCAtIHN0YXJ0OwotICAgICAgICBjaGFyW10gYnVmZmVyID0gVGVtcG9yYXJ5QnVmZmVyLm9idGFpbihjb3VudCk7Ci0gICAgICAgIFRleHRVdGlscy5nZXRDaGFycyh0ZXh0LCBzdGFydCwgZW5kLCBidWZmZXIsIDApOwotCi0gICAgICAgIG5hdGl2ZV9kcmF3VGV4dChuYXRpdmVDYW52YXMsIGJ1ZmZlciwgMCwgY291bnQsIHgsIHksIGZsYWdzLCBwYWludCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdUZXh0UnVuKGludCBuYXRpdmVDYW52YXMsIGNoYXJbXSB0ZXh0LAotICAgICAgICAgICAgaW50IHN0YXJ0LCBpbnQgY291bnQsIGludCBjb250ZXh0U3RhcnQsIGludCBjb250ZXh0Q291bnQsCi0gICAgICAgICAgICBmbG9hdCB4LCBmbG9hdCB5LCBpbnQgZmxhZ3MsIGludCBwYWludCkgewotICAgICAgICBuYXRpdmVfZHJhd1RleHQobmF0aXZlQ2FudmFzLCB0ZXh0LCBzdGFydCwgY291bnQsIHgsIHksIGZsYWdzLCBwYWludCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdQb3NUZXh0KGludCBuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJbXSB0ZXh0LCBpbnQgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgZmxvYXRbXSBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYWludCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIkNhbnZhcy5kcmF3UG9zVGV4dCBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3UG9zVGV4dChpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCwgZmxvYXRbXSBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYWludCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIkNhbnZhcy5kcmF3UG9zVGV4dCBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3VGV4dE9uUGF0aChpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gdGV4dCwgaW50IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBoT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2T2Zmc2V0LCBpbnQgYmlkaUZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJDYW52YXMuZHJhd1RleHRPblBhdGggaXMgbm90IHN1cHBvcnRlZC4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd1RleHRPblBhdGgoaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRleHQsIGludCBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBoT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIGludCBwYWludCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIkNhbnZhcy5kcmF3VGV4dE9uUGF0aCBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIGZpbmFsaXplcihpbnQgbmF0aXZlQ2FudmFzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludCBzbyB0aGF0IGl0IGNhbiBiZSBkaXNwb3NlZC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhbnZhc0RlbGVnYXRlLmRpc3Bvc2UoKTsKLQotICAgICAgICAvLyByZW1vdmUgaXQgZnJvbSB0aGUgbWFuYWdlci4KLSAgICAgICAgc01hbmFnZXIucmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihuYXRpdmVDYW52YXMpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICAvKioKLSAgICAgKiBFeGVjdXRlcyBhIHtAbGluayBHY1NuYXBzaG90LkRyYXdhYmxlfSB3aXRoIGEgZ2l2ZW4gY2FudmFzIGFuZCBwYWludC4KLSAgICAgKiA8cD5Ob3RlIHRoYXQgdGhlIGRyYXdhYmxlIG1heSBhY3R1YWxseSBiZSBleGVjdXRlZCBzZXZlcmFsIHRpbWVzIGlmIHRoZXJlIGFyZQotICAgICAqIGxheWVycyBpbnZvbHZlZCAoc2VlIHtAbGluayAjc2F2ZUxheWVyKFJlY3RGLCBpbnQsIGludCl9LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZHJhdyhpbnQgbkNhbnZhcywgaW50IG5QYWludCwgYm9vbGVhbiBjb21wb3NpdGVPbmx5LCBib29sZWFuIGZvcmNlU3JjTW9kZSwKLSAgICAgICAgICAgIEdjU25hcHNob3QuRHJhd2FibGUgZHJhd2FibGUpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgcGFpbnQgd2hpY2ggY2FuIGJlIG51bGwgaWYgblBhaW50IGlzIDA7Ci0gICAgICAgIFBhaW50X0RlbGVnYXRlIHBhaW50RGVsZWdhdGUgPSBQYWludF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShuUGFpbnQpOwotCi0gICAgICAgIGNhbnZhc0RlbGVnYXRlLmdldFNuYXBzaG90KCkuZHJhdyhkcmF3YWJsZSwgcGFpbnREZWxlZ2F0ZSwgY29tcG9zaXRlT25seSwgZm9yY2VTcmNNb2RlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFeGVjdXRlcyBhIHtAbGluayBHY1NuYXBzaG90LkRyYXdhYmxlfSB3aXRoIGEgZ2l2ZW4gY2FudmFzLiBObyBwYWludCBvYmplY3Qgd2lsbCBiZSBwcm92aWRlZAotICAgICAqIHRvIHtAbGluayBHY1NuYXBzaG90LkRyYXdhYmxlI2RyYXcoR3JhcGhpY3MyRCwgUGFpbnRfRGVsZWdhdGUpfS4KLSAgICAgKiA8cD5Ob3RlIHRoYXQgdGhlIGRyYXdhYmxlIG1heSBhY3R1YWxseSBiZSBleGVjdXRlZCBzZXZlcmFsIHRpbWVzIGlmIHRoZXJlIGFyZQotICAgICAqIGxheWVycyBpbnZvbHZlZCAoc2VlIHtAbGluayAjc2F2ZUxheWVyKFJlY3RGLCBpbnQsIGludCl9LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZHJhdyhpbnQgbkNhbnZhcywgR2NTbmFwc2hvdC5EcmF3YWJsZSBkcmF3YWJsZSkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5DYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FudmFzRGVsZWdhdGUubVNuYXBzaG90LmRyYXcoZHJhd2FibGUpOwotICAgIH0KLQotICAgIHByaXZhdGUgQ2FudmFzX0RlbGVnYXRlKEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXApIHsKLSAgICAgICAgbVNuYXBzaG90ID0gR2NTbmFwc2hvdC5jcmVhdGVEZWZhdWx0U25hcHNob3QobUJpdG1hcCA9IGJpdG1hcCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBDYW52YXNfRGVsZWdhdGUoKSB7Ci0gICAgICAgIG1TbmFwc2hvdCA9IEdjU25hcHNob3QuY3JlYXRlRGVmYXVsdFNuYXBzaG90KG51bGwgLyppbWFnZSovKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEaXNwb3NlcyBvZiB0aGUge0BsaW5rIEdyYXBoaWNzMkR9IHN0YWNrLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBkaXNwb3NlKCkgewotICAgICAgICBtU25hcHNob3QuZGlzcG9zZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IHNhdmUoaW50IHNhdmVGbGFncykgewotICAgICAgICAvLyBnZXQgdGhlIGN1cnJlbnQgc2F2ZSBjb3VudAotICAgICAgICBpbnQgY291bnQgPSBtU25hcHNob3Quc2l6ZSgpOwotCi0gICAgICAgIG1TbmFwc2hvdCA9IG1TbmFwc2hvdC5zYXZlKHNhdmVGbGFncyk7Ci0KLSAgICAgICAgLy8gcmV0dXJuIHRoZSBvbGQgc2F2ZSBjb3VudAotICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgc2F2ZUxheWVyQWxwaGEoUmVjdEYgcmVjdCwgaW50IGFscGhhLCBpbnQgc2F2ZUZsYWdzKSB7Ci0gICAgICAgIFBhaW50X0RlbGVnYXRlIHBhaW50ID0gbmV3IFBhaW50X0RlbGVnYXRlKCk7Ci0gICAgICAgIHBhaW50LnNldEFscGhhKGFscGhhKTsKLSAgICAgICAgcmV0dXJuIHNhdmVMYXllcihyZWN0LCBwYWludCwgc2F2ZUZsYWdzKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBzYXZlTGF5ZXIoUmVjdEYgcmVjdCwgUGFpbnRfRGVsZWdhdGUgcGFpbnQsIGludCBzYXZlRmxhZ3MpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IHNhdmUgY291bnQKLSAgICAgICAgaW50IGNvdW50ID0gbVNuYXBzaG90LnNpemUoKTsKLQotICAgICAgICBtU25hcHNob3QgPSBtU25hcHNob3Quc2F2ZUxheWVyKHJlY3QsIHBhaW50LCBzYXZlRmxhZ3MpOwotCi0gICAgICAgIC8vIHJldHVybiB0aGUgb2xkIHNhdmUgY291bnQKLSAgICAgICAgcmV0dXJuIGNvdW50OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlc3RvcmVzIHRoZSB7QGxpbmsgR2NTbmFwc2hvdH0gdG8gPHZhcj5zYXZlQ291bnQ8L3Zhcj4KLSAgICAgKiBAcGFyYW0gc2F2ZUNvdW50IHRoZSBzYXZlQ291bnQKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcmVzdG9yZVRvKGludCBzYXZlQ291bnQpIHsKLSAgICAgICAgbVNuYXBzaG90ID0gbVNuYXBzaG90LnJlc3RvcmVUbyhzYXZlQ291bnQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlc3RvcmVzIHRoZSB7QGxpbmsgR2NTbmFwc2hvdH0gdG8gPHZhcj5zYXZlQ291bnQ8L3Zhcj4KLSAgICAgKiBAcGFyYW0gc2F2ZUNvdW50IHRoZSBzYXZlQ291bnQKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcmVzdG9yZSgpIHsKLSAgICAgICAgbVNuYXBzaG90ID0gbVNuYXBzaG90LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gY2xpcFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBpbnQgcmVnaW9uT3ApIHsKLSAgICAgICAgcmV0dXJuIG1TbmFwc2hvdC5jbGlwUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHJlZ2lvbk9wKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0Qml0bWFwKEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXApIHsKLSAgICAgICAgbUJpdG1hcCA9IGJpdG1hcDsKLSAgICAgICAgYXNzZXJ0IG1TbmFwc2hvdC5zaXplKCkgPT0gMTsKLSAgICAgICAgbVNuYXBzaG90LnNldEJpdG1hcChtQml0bWFwKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRyYXdCaXRtYXAoCi0gICAgICAgICAgICBpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgQml0bWFwX0RlbGVnYXRlIGJpdG1hcCwKLSAgICAgICAgICAgIGludCBuYXRpdmVQYWludE9yWmVybywKLSAgICAgICAgICAgIGZpbmFsIGludCBzbGVmdCwgZmluYWwgaW50IHN0b3AsIGZpbmFsIGludCBzcmlnaHQsIGZpbmFsIGludCBzYm90dG9tLAotICAgICAgICAgICAgZmluYWwgaW50IGRsZWZ0LCBmaW5hbCBpbnQgZHRvcCwgZmluYWwgaW50IGRyaWdodCwgZmluYWwgaW50IGRib3R0b20pIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBwYWludCwgd2hpY2ggY291bGQgYmUgbnVsbCBpZiB0aGUgaW50IGlzIDAKLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgcGFpbnREZWxlZ2F0ZSA9IFBhaW50X0RlbGVnYXRlLmdldERlbGVnYXRlKG5hdGl2ZVBhaW50T3JaZXJvKTsKLQotICAgICAgICBmaW5hbCBCdWZmZXJlZEltYWdlIGltYWdlID0gZ2V0SW1hZ2VUb0RyYXcoYml0bWFwLCBwYWludERlbGVnYXRlLCBzQm9vbE91dCk7Ci0KLSAgICAgICAgZHJhdyhuYXRpdmVDYW52YXMsIG5hdGl2ZVBhaW50T3JaZXJvLCB0cnVlIC8qY29tcG9zaXRlT25seSovLCBzQm9vbE91dFswXSwKLSAgICAgICAgICAgICAgICBuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWludCAhPSBudWxsICYmIHBhaW50LmlzRmlsdGVyQml0bWFwKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5zZXRSZW5kZXJpbmdIaW50KFJlbmRlcmluZ0hpbnRzLktFWV9JTlRFUlBPTEFUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyaW5nSGludHMuVkFMVUVfSU5URVJQT0xBVElPTl9CSUxJTkVBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vRklYTUUgYWRkIHN1cHBvcnQgZm9yIGNhbnZhcywgc2NyZWVuIGFuZCBiaXRtYXAgZGVuc2l0aWVzLgotICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZHJhd0ltYWdlKGltYWdlLCBkbGVmdCwgZHRvcCwgZHJpZ2h0LCBkYm90dG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVmdCwgc3RvcCwgc3JpZ2h0LCBzYm90dG9tLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBCdWZmZXJlZEltYWdlIHJlYWR5IGZvciBkcmF3aW5nLCBiYXNlZCBvbiB0aGUgYml0bWFwIGFuZCBwYWludCBkZWxlZ2F0ZS4KLSAgICAgKiBUaGUgaW1hZ2UgcmV0dXJucywgdGhyb3VnaCBhIDEtc2l6ZSBib29sZWFuIGFycmF5LCB3aGV0aGVyIHRoZSBkcmF3aW5nIGNvZGUgc2hvdWxkCi0gICAgICogdXNlIGEgU1JDIGNvbXBvc2l0ZSBubyBtYXR0ZXIgd2hhdCB0aGUgcGFpbnQgc2F5cy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBiaXRtYXAgdGhlIGJpdG1hcAotICAgICAqIEBwYXJhbSBwYWludCB0aGUgcGFpbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZHJhdwotICAgICAqIEBwYXJhbSBmb3JjZVNyY01vZGUgd2hldGhlciB0aGUgY29tcG9zaXRlIHdpbGwgaGF2ZSB0byBiZSBTUkMKLSAgICAgKiBAcmV0dXJuIHRoZSBpbWFnZSB0byBkcmF3Ci0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgQnVmZmVyZWRJbWFnZSBnZXRJbWFnZVRvRHJhdyhCaXRtYXBfRGVsZWdhdGUgYml0bWFwLCBQYWludF9EZWxlZ2F0ZSBwYWludCwKLSAgICAgICAgICAgIGJvb2xlYW5bXSBmb3JjZVNyY01vZGUpIHsKLSAgICAgICAgQnVmZmVyZWRJbWFnZSBpbWFnZSA9IGJpdG1hcC5nZXRJbWFnZSgpOwotICAgICAgICBmb3JjZVNyY01vZGVbMF0gPSBmYWxzZTsKLQotICAgICAgICAvLyBpZiB0aGUgYml0bWFwIGNvbmZpZyBpcyBhbHBoYV84LCB0aGVuIHdlIGVyYXNlIGFsbCBjb2xvciB2YWx1ZSBmcm9tIGl0Ci0gICAgICAgIC8vIGJlZm9yZSBkcmF3aW5nIGl0LgotICAgICAgICBpZiAoYml0bWFwLmdldENvbmZpZygpID09IEJpdG1hcC5Db25maWcuQUxQSEFfOCkgewotICAgICAgICAgICAgZml4QWxwaGE4Qml0bWFwKGltYWdlKTsKLSAgICAgICAgfSBlbHNlIGlmIChiaXRtYXAuaGFzQWxwaGEoKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgLy8gaGFzQWxwaGEgaXMgbWVyZWx5IGEgcmVuZGVyaW5nIGhpbnQuIFRoZXJlIGNhbiBpbiBmYWN0IGJlIGFscGhhIHZhbHVlcwotICAgICAgICAgICAgLy8gaW4gdGhlIGJpdG1hcCBidXQgaXQgc2hvdWxkIGJlIGlnbm9yZWQgYXQgZHJhd2luZyB0aW1lLgotICAgICAgICAgICAgLy8gVGhlcmUgaXMgdHdvIHdheXMgdG8gZG8gdGhpczoKLSAgICAgICAgICAgIC8vIC0gb3ZlcnJpZGUgdGhlIGNvbXBvc2l0ZSB0byBiZSBTUkMuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgY29tcG9zaXRlCi0gICAgICAgICAgICAvLyAgIHdhcyBnb2luZyB0byBiZSBTUkMgb3IgU1JDX09WRVIgaW4gdGhlIGZpcnN0IHBsYWNlCi0gICAgICAgICAgICAvLyAtIENyZWF0ZSBhIGRpZmZlcmVudCBiaXRtYXAgdG8gZHJhdyBpbiB3aGljaCBhbGwgdGhlIGFscGhhIGNoYW5uZWwgdmFsdWVzIGlzIHNldAotICAgICAgICAgICAgLy8gICB0byAweEZGLgotICAgICAgICAgICAgaWYgKHBhaW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBYZmVybW9kZV9EZWxlZ2F0ZSB4ZmVybW9kZURlbGVnYXRlID0gcGFpbnQuZ2V0WGZlcm1vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoeGZlcm1vZGVEZWxlZ2F0ZSBpbnN0YW5jZW9mIFBvcnRlckR1ZmZYZmVybW9kZV9EZWxlZ2F0ZSkgewotICAgICAgICAgICAgICAgICAgICBQb3J0ZXJEdWZmLk1vZGUgbW9kZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKFBvcnRlckR1ZmZYZmVybW9kZV9EZWxlZ2F0ZSl4ZmVybW9kZURlbGVnYXRlKS5nZXRNb2RlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yY2VTcmNNb2RlWzBdID0gbW9kZSA9PSBQb3J0ZXJEdWZmLk1vZGUuU1JDX09WRVIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID09IFBvcnRlckR1ZmYuTW9kZS5TUkM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpZiB3ZSBjYW4ndCBmb3JjZSBTUkMgbW9kZSwgdGhlbiBjcmVhdGUgYSB0ZW1wIGJpdG1hcCBvZiBUWVBFX1JHQgotICAgICAgICAgICAgaWYgKGZvcmNlU3JjTW9kZVswXSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIGltYWdlID0gQml0bWFwX0RlbGVnYXRlLmNyZWF0ZUNvcHkoaW1hZ2UsIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfUkdCLCAweEZGKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBpbWFnZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGZpeEFscGhhOEJpdG1hcChmaW5hbCBCdWZmZXJlZEltYWdlIGltYWdlKSB7Ci0gICAgICAgIGludCB3ID0gaW1hZ2UuZ2V0V2lkdGgoKTsKLSAgICAgICAgaW50IGggPSBpbWFnZS5nZXRIZWlnaHQoKTsKLSAgICAgICAgaW50W10gYXJnYiA9IG5ldyBpbnRbdyAqIGhdOwotICAgICAgICBpbWFnZS5nZXRSR0IoMCwgMCwgaW1hZ2UuZ2V0V2lkdGgoKSwgaW1hZ2UuZ2V0SGVpZ2h0KCksIGFyZ2IsIDAsIGltYWdlLmdldFdpZHRoKCkpOwotCi0gICAgICAgIGZpbmFsIGludCBsZW5ndGggPSBhcmdiLmxlbmd0aDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGFyZ2JbaV0gJj0gMHhGRjAwMDAwMDsKLSAgICAgICAgfQotICAgICAgICBpbWFnZS5zZXRSR0IoMCwgMCwgdywgaCwgYXJnYiwgMCwgdyk7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yRmlsdGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yRmlsdGVyX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YTdhYjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5Db2xvckZpbHRlcgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIENvbG9yRmlsdGVyIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIENvbG9yRmlsdGVyIGNsYXNzLgotICoKLSAqIFRoaXMgYWxzbyBzZXJ2ZSBhcyBhIGJhc2UgY2xhc3MgZm9yIGFsbCBDb2xvckZpbHRlciBkZWxlZ2F0ZSBjbGFzc2VzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ29sb3JGaWx0ZXJfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBtYW5hZ2VyIC0tLS0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIERlbGVnYXRlTWFuYWdlcjxDb2xvckZpbHRlcl9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxDb2xvckZpbHRlcl9EZWxlZ2F0ZT4oQ29sb3JGaWx0ZXJfRGVsZWdhdGUuY2xhc3MpOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBoZWxwZXIgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHVibGljIHN0YXRpYyBDb2xvckZpbHRlcl9EZWxlZ2F0ZSBnZXREZWxlZ2F0ZShpbnQgbmF0aXZlU2hhZGVyKSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVTaGFkZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzU3VwcG9ydGVkKCk7Ci0gICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpOwotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBmaW5hbGl6ZXIoaW50IG5hdGl2ZV9pbnN0YW5jZSwgaW50IG5hdGl2ZUNvbG9yRmlsdGVyKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlX2luc3RhbmNlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Db2xvck1hdHJpeENvbG9yRmlsdGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4Q29sb3JGaWx0ZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRlMzQ0Yi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4Q29sb3JGaWx0ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JNYXRyaXhDb2xvckZpbHRlcgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIENvbG9yTWF0cml4Q29sb3JGaWx0ZXIgaGF2ZQotICogYmVlbiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgQ29sb3JNYXRyaXhDb2xvckZpbHRlciBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgQ29sb3JGaWx0ZXJfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEKLSAqIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LCBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIKLSAqIG93bmVkIGJ5IHtAbGluayBDb2xvckZpbHRlcl9EZWxlZ2F0ZX0uCi0gKgotICogQHNlZSBDb2xvckZpbHRlcl9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIENvbG9yTWF0cml4Q29sb3JGaWx0ZXJfRGVsZWdhdGUgZXh0ZW5kcyBDb2xvckZpbHRlcl9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIkNvbG9yTWF0cml4IENvbG9yIEZpbHRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ29sb3JNYXRyaXhGaWx0ZXIoZmxvYXRbXSBhcnJheSkgewotICAgICAgICBDb2xvck1hdHJpeENvbG9yRmlsdGVyX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IENvbG9yTWF0cml4Q29sb3JGaWx0ZXJfRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5Db2xvck1hdHJpeEZpbHRlcihpbnQgbmF0aXZlRmlsdGVyLCBmbG9hdFtdIGFycmF5KSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQ29tcG9zZVBhdGhFZmZlY3RfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQ29tcG9zZVBhdGhFZmZlY3RfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MwNGE4Ny4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NvbXBvc2VQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBqYXZhLmF3dC5TdHJva2U7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLkNvbXBvc2VQYXRoRWZmZWN0Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgQ29tcG9zZVBhdGhFZmZlY3QgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgQ29tcG9zZVBhdGhFZmZlY3QgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sCi0gKiBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgUGF0aEVmZmVjdF9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIENvbXBvc2VQYXRoRWZmZWN0X0RlbGVnYXRlIGV4dGVuZHMgUGF0aEVmZmVjdF9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cm9rZSBnZXRTdHJva2UoUGFpbnRfRGVsZWdhdGUgcGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIkNvbXBvc2UgUGF0aCBFZmZlY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIExheW91dCBQcmV2aWV3IG1vZGUuIjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ3JlYXRlKGludCBvdXRlcnBlLCBpbnQgaW5uZXJwZSkgewotICAgICAgICBDb21wb3NlUGF0aEVmZmVjdF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBDb21wb3NlUGF0aEVmZmVjdF9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NvbXBvc2VTaGFkZXJfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQ29tcG9zZVNoYWRlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmUxZDAwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQ29tcG9zZVNoYWRlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuUGFpbnQ7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLkNvbXBvc2VTaGFkZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBDb21wb3NlU2hhZGVyIGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIENvbXBvc2VTaGFkZXIgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIFNoYWRlcl9EZWxlZ2F0ZX0sIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYSB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfSwKLSAqIGFzIGFsbCB0aGUgU2hhZGVyIGNsYXNzZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuYWdlciBvd25lZCBieSB7QGxpbmsgU2hhZGVyX0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIFNoYWRlcl9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIENvbXBvc2VTaGFkZXJfRGVsZWdhdGUgZXh0ZW5kcyBTaGFkZXJfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBQYWludCBnZXRKYXZhUGFpbnQoKSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpIHsKLSAgICAgICAgcmV0dXJuICJDb21wb3NlIFNoYWRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTGF5b3V0IFByZXZpZXcgbW9kZS4iOwotICAgIH0KLQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZTEoaW50IG5hdGl2ZV9zaGFkZXJBLCBpbnQgbmF0aXZlX3NoYWRlckIsCi0gICAgICAgICAgICBpbnQgbmF0aXZlX21vZGUpIHsKLSAgICAgICAgLy8gRklYTUUgbm90IHN1cHBvcnRlZCB5ZXQuCi0gICAgICAgIENvbXBvc2VTaGFkZXJfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgQ29tcG9zZVNoYWRlcl9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ3JlYXRlMihpbnQgbmF0aXZlX3NoYWRlckEsIGludCBuYXRpdmVfc2hhZGVyQiwKLSAgICAgICAgICAgIGludCBwb3J0ZXJEdWZmTW9kZSkgewotICAgICAgICAvLyBGSVhNRSBub3Qgc3VwcG9ydGVkIHlldC4KLSAgICAgICAgQ29tcG9zZVNoYWRlcl9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBDb21wb3NlU2hhZGVyX0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVQb3N0Q3JlYXRlMShpbnQgbmF0aXZlX3NoYWRlciwgaW50IG5hdGl2ZV9za2lhU2hhZGVyQSwKLSAgICAgICAgICAgIGludCBuYXRpdmVfc2tpYVNoYWRlckIsIGludCBuYXRpdmVfbW9kZSkgewotICAgICAgICAvLyBwYXNzLCBub3QgbmVlZGVkLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZVBvc3RDcmVhdGUyKGludCBuYXRpdmVfc2hhZGVyLCBpbnQgbmF0aXZlX3NraWFTaGFkZXJBLAotICAgICAgICAgICAgaW50IG5hdGl2ZV9za2lhU2hhZGVyQiwgaW50IHBvcnRlckR1ZmZNb2RlKSB7Ci0gICAgICAgIC8vIHBhc3MsIG5vdCBuZWVkZWQuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQ29ybmVyUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Db3JuZXJQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZjgxNjguLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Db3JuZXJQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBqYXZhLmF3dC5TdHJva2U7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLkNvcm5lclBhdGhFZmZlY3QKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBDb3JuZXJQYXRoRWZmZWN0IGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIENvcm5lclBhdGhFZmZlY3QgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sCi0gKiBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgUGF0aEVmZmVjdF9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIENvcm5lclBhdGhFZmZlY3RfRGVsZWdhdGUgZXh0ZW5kcyBQYXRoRWZmZWN0X0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3Ryb2tlIGdldFN0cm9rZShQYWludF9EZWxlZ2F0ZSBwYWludCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiQ29ybmVyIFBhdGggRWZmZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBMYXlvdXQgUHJldmlldyBtb2RlLiI7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZShmbG9hdCByYWRpdXMpIHsKLSAgICAgICAgQ29ybmVyUGF0aEVmZmVjdF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBDb3JuZXJQYXRoRWZmZWN0X0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvRGFzaFBhdGhFZmZlY3RfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvRGFzaFBhdGhFZmZlY3RfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk3YzJlYy4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0Rhc2hQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBqYXZhLmF3dC5CYXNpY1N0cm9rZTsKLWltcG9ydCBqYXZhLmF3dC5TdHJva2U7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLkRhc2hQYXRoRWZmZWN0Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgRGFzaFBhdGhFZmZlY3QgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgRGFzaFBhdGhFZmZlY3QgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEKLSAqIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LCBhcyBhbGwgdGhlIFBhdGhFZmZlY3QgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyIG93bmVkIGJ5Ci0gKiB7QGxpbmsgUGF0aEVmZmVjdF9EZWxlZ2F0ZX0uCi0gKgotICogQHNlZSBQYXRoRWZmZWN0X0RlbGVnYXRlCi0gKgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRGFzaFBhdGhFZmZlY3RfRGVsZWdhdGUgZXh0ZW5kcyBQYXRoRWZmZWN0X0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbUludGVydmFsczsKLSAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1QaGFzZTsKLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJva2UgZ2V0U3Ryb2tlKFBhaW50X0RlbGVnYXRlIHBhaW50KSB7Ci0gICAgICAgIHJldHVybiBuZXcgQmFzaWNTdHJva2UoCi0gICAgICAgICAgICAgICAgcGFpbnQuZ2V0U3Ryb2tlV2lkdGgoKSwKLSAgICAgICAgICAgICAgICBwYWludC5nZXRKYXZhQ2FwKCksCi0gICAgICAgICAgICAgICAgcGFpbnQuZ2V0SmF2YUpvaW4oKSwKLSAgICAgICAgICAgICAgICBwYWludC5nZXRKYXZhU3Ryb2tlTWl0ZXIoKSwKLSAgICAgICAgICAgICAgICBtSW50ZXJ2YWxzLAotICAgICAgICAgICAgICAgIG1QaGFzZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIC8vIG5vIG1lc3NhZ2Ugc2luY2UgaXNTdXBwb3J0ZWQgcmV0dXJucyB0cnVlOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ3JlYXRlKGZsb2F0IGludGVydmFsc1tdLCBmbG9hdCBwaGFzZSkgewotICAgICAgICBEYXNoUGF0aEVmZmVjdF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBEYXNoUGF0aEVmZmVjdF9EZWxlZ2F0ZShpbnRlcnZhbHMsIHBoYXNlKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHJpdmF0ZSBEYXNoUGF0aEVmZmVjdF9EZWxlZ2F0ZShmbG9hdCBpbnRlcnZhbHNbXSwgZmxvYXQgcGhhc2UpIHsKLSAgICAgICAgbUludGVydmFscyA9IG5ldyBmbG9hdFtpbnRlcnZhbHMubGVuZ3RoXTsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShpbnRlcnZhbHMsIDAsIG1JbnRlcnZhbHMsIDAsIGludGVydmFscy5sZW5ndGgpOwotICAgICAgICBtUGhhc2UgPSBwaGFzZTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvRGlzY3JldGVQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0Rpc2NyZXRlUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzRhODEwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvRGlzY3JldGVQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBqYXZhLmF3dC5TdHJva2U7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLkRpc2NyZXRlUGF0aEVmZmVjdAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIERpc2NyZXRlUGF0aEVmZmVjdCBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBEaXNjcmV0ZVBhdGhFZmZlY3QgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sCi0gKiBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgUGF0aEVmZmVjdF9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIERpc2NyZXRlUGF0aEVmZmVjdF9EZWxlZ2F0ZSBleHRlbmRzIFBhdGhFZmZlY3RfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJva2UgZ2V0U3Ryb2tlKFBhaW50X0RlbGVnYXRlIHBhaW50KSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpIHsKLSAgICAgICAgcmV0dXJuICJEaXNjcmV0ZSBQYXRoIEVmZmVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTGF5b3V0IFByZXZpZXcgbW9kZS4iOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUoZmxvYXQgbGVuZ3RoLCBmbG9hdCBkZXZpYXRpb24pIHsKLSAgICAgICAgRGlzY3JldGVQYXRoRWZmZWN0X0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IERpc2NyZXRlUGF0aEVmZmVjdF9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0RyYXdGaWx0ZXJfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvRHJhd0ZpbHRlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzBjNDZiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvRHJhd0ZpbHRlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5EcmF3RmlsdGVyCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgRHJhd0ZpbHRlciBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBEcmF3RmlsdGVyIGNsYXNzLgotICoKLSAqIFRoaXMgYWxzbyBzZXJ2ZSBhcyBhIGJhc2UgY2xhc3MgZm9yIGFsbCBEcmF3RmlsdGVyIGRlbGVnYXRlIGNsYXNzZXMuCi0gKgotICogQHNlZSBEZWxlZ2F0ZU1hbmFnZXIKLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBEcmF3RmlsdGVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBEZWxlZ2F0ZU1hbmFnZXI8RHJhd0ZpbHRlcl9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxEcmF3RmlsdGVyX0RlbGVnYXRlPihEcmF3RmlsdGVyX0RlbGVnYXRlLmNsYXNzKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgaGVscGVyIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIHB1YmxpYyBzdGF0aWMgRHJhd0ZpbHRlcl9EZWxlZ2F0ZSBnZXREZWxlZ2F0ZShpbnQgbmF0aXZlRHJhd0ZpbHRlcikgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlRHJhd0ZpbHRlcik7Ci0gICAgfQotCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNTdXBwb3J0ZWQoKTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCk7Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZURlc3RydWN0b3IoaW50IG5hdGl2ZURyYXdGaWx0ZXIpIHsKLSAgICAgICAgc01hbmFnZXIucmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihuYXRpdmVEcmF3RmlsdGVyKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9FbWJvc3NNYXNrRmlsdGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0VtYm9zc01hc2tGaWx0ZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJjMWMxZC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0VtYm9zc01hc2tGaWx0ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuRW1ib3NzTWFza0ZpbHRlcgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIEVtYm9zc01hc2tGaWx0ZXIgaGF2ZQotICogYmVlbiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgRW1ib3NzTWFza0ZpbHRlciBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgTWFza0ZpbHRlcl9EZWxlZ2F0ZX0sIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYQotICoge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sIGFzIGFsbCB0aGUgU2hhZGVyIGNsYXNzZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuYWdlcgotICogb3duZWQgYnkge0BsaW5rIE1hc2tGaWx0ZXJfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgTWFza0ZpbHRlcl9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIEVtYm9zc01hc2tGaWx0ZXJfRGVsZWdhdGUgZXh0ZW5kcyBNYXNrRmlsdGVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiRW1ib3NzIE1hc2sgRmlsdGVycyBhcmUgbm90IHN1cHBvcnRlZC4iOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDb25zdHJ1Y3RvcihmbG9hdFtdIGRpcmVjdGlvbiwgZmxvYXQgYW1iaWVudCwKLSAgICAgICAgICAgIGZsb2F0IHNwZWN1bGFyLCBmbG9hdCBibHVyUmFkaXVzKSB7Ci0gICAgICAgIEVtYm9zc01hc2tGaWx0ZXJfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgRW1ib3NzTWFza0ZpbHRlcl9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0dyYWRpZW50X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0dyYWRpZW50X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NzVjMjIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9HcmFkaWVudF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlNoYWRlci5UaWxlTW9kZTsKLQotLyoqCi0gKiBCYXNlIGNsYXNzIGZvciB0cnVlIEdyYWRpZW50IHNoYWRlciBkZWxlZ2F0ZS4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEdyYWRpZW50X0RlbGVnYXRlIGV4dGVuZHMgU2hhZGVyX0RlbGVnYXRlIHsKLQotICAgIHByb3RlY3RlZCBmaW5hbCBpbnRbXSBtQ29sb3JzOwotICAgIHByb3RlY3RlZCBmaW5hbCBmbG9hdFtdIG1Qb3NpdGlvbnM7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgLy8gYWxsIGdyYWRpZW50IHNoYWRlcnMgYXJlIHN1cHBvcnRlZC4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpIHsKLSAgICAgICAgLy8gYWxsIGdyYWRpZW50IHNoYWRlcnMgYXJlIHN1cHBvcnRlZCwgbm8gbmVlZCBmb3IgYSBncmFkaWVudCBzdXBwb3J0Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgdGhlIGJhc2Ugc2hhZGVyIGFuZCBkbyBzb21lIGJhc2ljIHRlc3Qgb24gdGhlIHBhcmFtZXRlcnMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY29sb3JzIFRoZSBjb2xvcnMgdG8gYmUgZGlzdHJpYnV0ZWQgYWxvbmcgdGhlIGdyYWRpZW50IGxpbmUKLSAgICAgKiBAcGFyYW0gcG9zaXRpb25zIE1heSBiZSBudWxsLiBUaGUgcmVsYXRpdmUgcG9zaXRpb25zIFswLi4xXSBvZiBlYWNoCi0gICAgICogICAgICAgICAgICBjb3JyZXNwb25kaW5nIGNvbG9yIGluIHRoZSBjb2xvcnMgYXJyYXkuIElmIHRoaXMgaXMgbnVsbCwgdGhlCi0gICAgICogICAgICAgICAgICB0aGUgY29sb3JzIGFyZSBkaXN0cmlidXRlZCBldmVubHkgYWxvbmcgdGhlIGdyYWRpZW50IGxpbmUuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIEdyYWRpZW50X0RlbGVnYXRlKGludCBjb2xvcnNbXSwgZmxvYXQgcG9zaXRpb25zW10pIHsKLSAgICAgICAgaWYgKGNvbG9ycy5sZW5ndGggPCAyKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJuZWVkcyA+PSAyIG51bWJlciBvZiBjb2xvcnMiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocG9zaXRpb25zICE9IG51bGwgJiYgY29sb3JzLmxlbmd0aCAhPSBwb3NpdGlvbnMubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb2xvciBhbmQgcG9zaXRpb24gYXJyYXlzIG11c3QgYmUgb2YgZXF1YWwgbGVuZ3RoIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocG9zaXRpb25zID09IG51bGwpIHsKLSAgICAgICAgICAgIGZsb2F0IHNwYWNpbmcgPSAxLmYgLyAoY29sb3JzLmxlbmd0aCAtIDEpOwotICAgICAgICAgICAgcG9zaXRpb25zID0gbmV3IGZsb2F0W2NvbG9ycy5sZW5ndGhdOwotICAgICAgICAgICAgcG9zaXRpb25zWzBdID0gMC5mOwotICAgICAgICAgICAgcG9zaXRpb25zW2NvbG9ycy5sZW5ndGgtMV0gPSAxLmY7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGNvbG9ycy5sZW5ndGggLSAxIDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcG9zaXRpb25zW2ldID0gc3BhY2luZyAqIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtQ29sb3JzID0gY29sb3JzOwotICAgICAgICBtUG9zaXRpb25zID0gcG9zaXRpb25zOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJhc2UgY2xhc3MgZm9yIChKYXZhKSBHcmFkaWVudCBQYWludHMuIFRoaXMgaGFuZGxlcyBjb21wdXRpbmcgdGhlIGdyYWRpZW50IGNvbG9ycyBiYXNlZAotICAgICAqIG9uIHRoZSBjb2xvciBhbmQgcG9zaXRpb24gbGlzdHMsIGFzIHdlbGwgYXMgdGhlIHtAbGluayBUaWxlTW9kZX0KLSAgICAgKgotICAgICAqLwotICAgIHByb3RlY3RlZCBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgR3JhZGllbnRQYWludCBpbXBsZW1lbnRzIGphdmEuYXd0LlBhaW50IHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IEdSQURJRU5UX1NJWkUgPSAxMDA7Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBtQ29sb3JzOwotICAgICAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVBvc2l0aW9uczsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBUaWxlTW9kZSBtVGlsZU1vZGU7Ci0gICAgICAgIHByaXZhdGUgaW50W10gbUdyYWRpZW50OwotCi0gICAgICAgIHByb3RlY3RlZCBHcmFkaWVudFBhaW50KGludFtdIGNvbG9ycywgZmxvYXRbXSBwb3NpdGlvbnMsIFRpbGVNb2RlIHRpbGVNb2RlKSB7Ci0gICAgICAgICAgICBtQ29sb3JzID0gY29sb3JzOwotICAgICAgICAgICAgbVBvc2l0aW9ucyA9IHBvc2l0aW9uczsKLSAgICAgICAgICAgIG1UaWxlTW9kZSA9IHRpbGVNb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNwYXJlbmN5KCkgewotICAgICAgICAgICAgcmV0dXJuIGphdmEuYXd0LlBhaW50LlRSQU5TTFVDRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFByZS1jb21wdXRlcyB0aGUgY29sb3JzIGZvciB0aGUgZ3JhZGllbnQuIFRoaXMgbXVzdCBiZSBjYWxsZWQgb25jZSBiZWZvcmUgYW55IGNhbGwKLSAgICAgICAgICogdG8ge0BsaW5rICNnZXRHcmFkaWVudENvbG9yKGZsb2F0KX0KLSAgICAgICAgICovCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIHByZWNvbXB1dGVHcmFkaWVudENvbG9ycygpIHsKLSAgICAgICAgICAgIGlmIChtR3JhZGllbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIGFjdHVhbGx5IGNyZWF0ZSBhbiBhcnJheSB3aXRoIGFuIGV4dHJhIHNpemUsIHNvIHRoYXQgd2UgY2FuIHJlYWxseSBnbwotICAgICAgICAgICAgICAgIC8vIGZyb20gMCB0byBTSVpFICgxMDAlKSwgb3IgY3VycmVudFBvcyBpbiB0aGUgbG9vcCBiZWxvdyB3aWxsIG5ldmVyIGVxdWFsIDEuMAotICAgICAgICAgICAgICAgIG1HcmFkaWVudCA9IG5ldyBpbnRbR1JBRElFTlRfU0laRSsxXTsKLQotICAgICAgICAgICAgICAgIGludCBwcmV2UG9zID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgbmV4dFBvcyA9IDE7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSAgPSAwIDsgaSA8PSBHUkFESUVOVF9TSVpFIDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgY3VycmVudCBwb3NpdGlvbgotICAgICAgICAgICAgICAgICAgICBmbG9hdCBjdXJyZW50UG9zID0gKGZsb2F0KWkvR1JBRElFTlRfU0laRTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRQb3MgPiBtUG9zaXRpb25zW25leHRQb3NdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2UG9zID0gbmV4dFBvcysrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgcGVyY2VudCA9IChjdXJyZW50UG9zIC0gbVBvc2l0aW9uc1twcmV2UG9zXSkgLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtUG9zaXRpb25zW25leHRQb3NdIC0gbVBvc2l0aW9uc1twcmV2UG9zXSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbUdyYWRpZW50W2ldID0gY29tcHV0ZUNvbG9yKG1Db2xvcnNbcHJldlBvc10sIG1Db2xvcnNbbmV4dFBvc10sIHBlcmNlbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRoZSBjb2xvciBiYXNlZCBvbiB0aGUgcG9zaXRpb24gaW4gdGhlIGdyYWRpZW50LgotICAgICAgICAgKiA8dmFyPnBvczwvdmFyPiBjYW4gYmUgYW55dGhpbmcsIGV2ZW4gJmx0OyAwIG9yICZndDsgPiAxLCBhcyB0aGUgZ3JhZGllbnQKLSAgICAgICAgICogd2lsbCB1c2Uge0BsaW5rIFRpbGVNb2RlfSB2YWx1ZSB0byBjb252ZXJ0IGl0IGludG8gYSBbMCwxXSB2YWx1ZS4KLSAgICAgICAgICovCi0gICAgICAgIHByb3RlY3RlZCBpbnQgZ2V0R3JhZGllbnRDb2xvcihmbG9hdCBwb3MpIHsKLSAgICAgICAgICAgIGlmIChwb3MgPCAwLmYpIHsKLSAgICAgICAgICAgICAgICBpZiAobVRpbGVNb2RlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtVGlsZU1vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ0xBTVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gMC5mOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSRVBFQVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBpbnRlZ2VyIHBhcnQgdG8gc3RheSBpbiB0aGUgWzAsMV0gcmFuZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgYWxzbyBuZWVkIHRvIGludmVydCB0aGUgdmFsdWUgZnJvbSBbLTEsMF0gdG8gWzAsIDFdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gcG9zIC0gKGZsb2F0KU1hdGguZmxvb3IocG9zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTUlSUk9SOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIHBvc2l0aXZlIHNpZGUsIGp1c3QgbWFrZSB0aGUgdmFsdWUgcG9zaXRpdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBNYXRoLmFicyhwb3MpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBpbnRlZ2VyIGFuZCB0aGUgZGVjaW1hbCBwYXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGludFBhcnQgPSAoaW50KU1hdGguZmxvb3IocG9zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBwb3MgLSBpbnRQYXJ0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgLT4gMSA6IG5vcm1hbCBvcmRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgLT4gMjogbWlycm9yZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBldGMuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgaWYgdGhlIGludHBhcnQgaXMgb2RkIHdlIGludmVydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaW50UGFydCAlIDIpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gMS5mIC0gcG9zOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBvcyA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPiAxZikgewotICAgICAgICAgICAgICAgIGlmIChtVGlsZU1vZGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1UaWxlTW9kZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDTEFNUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAxLmY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJFUEVBVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGludGVnZXIgcGFydCB0byBzdGF5IGluIHRoZSBbMCwxXSByYW5nZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IHBvcyAtIChmbG9hdClNYXRoLmZsb29yKHBvcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1JUlJPUjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGludGVnZXIgYW5kIHRoZSBkZWNpbWFsIHBhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW50UGFydCA9IChpbnQpTWF0aC5mbG9vcihwb3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IHBvcyAtIGludFBhcnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCAtPiAxIDogbm9ybWFsIG9yZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSAtPiAyOiBtaXJyb3JlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV0Yy4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBtZWFucyBpZiB0aGUgaW50cGFydCBpcyBvZGQgd2UgaW52ZXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpbnRQYXJ0ICUgMikgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAxLmYgLSBwb3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcG9zID0gMS4wZjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBpbmRleCA9IChpbnQpKChwb3MgKiBHUkFESUVOVF9TSVpFKSArIC41KTsKLQotICAgICAgICAgICAgcmV0dXJuIG1HcmFkaWVudFtpbmRleF07Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgY29sb3IgYmV0d2VlbiBjMSwgYW5kIGMyLCBiYXNlZCBvbiB0aGUgcGVyY2VudCBvZiB0aGUgZGlzdGFuY2UKLSAgICAgICAgICogYmV0d2VlbiBjMSBhbmQgYzIuCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIGludCBjb21wdXRlQ29sb3IoaW50IGMxLCBpbnQgYzIsIGZsb2F0IHBlcmNlbnQpIHsKLSAgICAgICAgICAgIGludCBhID0gY29tcHV0ZUNoYW5uZWwoKGMxID4+IDI0KSAmIDB4RkYsIChjMiA+PiAyNCkgJiAweEZGLCBwZXJjZW50KTsKLSAgICAgICAgICAgIGludCByID0gY29tcHV0ZUNoYW5uZWwoKGMxID4+IDE2KSAmIDB4RkYsIChjMiA+PiAxNikgJiAweEZGLCBwZXJjZW50KTsKLSAgICAgICAgICAgIGludCBnID0gY29tcHV0ZUNoYW5uZWwoKGMxID4+ICA4KSAmIDB4RkYsIChjMiA+PiAgOCkgJiAweEZGLCBwZXJjZW50KTsKLSAgICAgICAgICAgIGludCBiID0gY29tcHV0ZUNoYW5uZWwoKGMxICAgICAgKSAmIDB4RkYsIChjMiAgICAgICkgJiAweEZGLCBwZXJjZW50KTsKLSAgICAgICAgICAgIHJldHVybiBhIDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGI7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgY2hhbm5lbCB2YWx1ZSBiZXR3ZWVuIDIgdmFsdWVzIGJhc2VkIG9uIHRoZSBwZXJjZW50IG9mIHRoZSBkaXN0YW5jZSBiZXR3ZWVuCi0gICAgICAgICAqIHRoZSAyIHZhbHVlcy4uCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIGludCBjb21wdXRlQ2hhbm5lbChpbnQgYzEsIGludCBjMiwgZmxvYXQgcGVyY2VudCkgewotICAgICAgICAgICAgcmV0dXJuIGMxICsgKGludCkoKHBlcmNlbnQgKiAoYzItYzEpKSArIC41KTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTGF5ZXJSYXN0ZXJpemVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0xheWVyUmFzdGVyaXplcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWUwNTc2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTGF5ZXJSYXN0ZXJpemVyX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLkxheWVyUmFzdGVyaXplcgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIExheWVyUmFzdGVyaXplciBoYXZlCi0gKiBiZWVuIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBMYXllclJhc3Rlcml6ZXIgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIFJhc3Rlcml6ZXJfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEKLSAqIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LCBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIKLSAqIG93bmVkIGJ5IHtAbGluayBSYXN0ZXJpemVyX0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIFJhc3Rlcml6ZXJfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXllclJhc3Rlcml6ZXJfRGVsZWdhdGUgZXh0ZW5kcyBSYXN0ZXJpemVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiTGF5ZXIgUmFzdGVyaXplcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ29uc3RydWN0b3IoKSB7Ci0gICAgICAgIExheWVyUmFzdGVyaXplcl9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBMYXllclJhc3Rlcml6ZXJfRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVBZGRMYXllcihpbnQgbmF0aXZlX2xheWVyLCBpbnQgbmF0aXZlX3BhaW50LCBmbG9hdCBkeCwgZmxvYXQgZHkpIHsKLQotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0xpZ2h0aW5nQ29sb3JGaWx0ZXJfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTGlnaHRpbmdDb2xvckZpbHRlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWU4ODNkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTGlnaHRpbmdDb2xvckZpbHRlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5MaWdodGluZ0NvbG9yRmlsdGVyCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgTGlnaHRpbmdDb2xvckZpbHRlciBoYXZlCi0gKiBiZWVuIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBMaWdodGluZ0NvbG9yRmlsdGVyIGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBDb2xvckZpbHRlcl9EZWxlZ2F0ZX0sIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYQotICoge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sIGFzIGFsbCB0aGUgU2hhZGVyIGNsYXNzZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuYWdlcgotICogb3duZWQgYnkge0BsaW5rIENvbG9yRmlsdGVyX0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIENvbG9yRmlsdGVyX0RlbGVnYXRlCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTGlnaHRpbmdDb2xvckZpbHRlcl9EZWxlZ2F0ZSBleHRlbmRzIENvbG9yRmlsdGVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiTGlnaHRpbmcgQ29sb3IgRmlsdGVycyBhcmUgbm90IHN1cHBvcnRlZC4iOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfQ3JlYXRlTGlnaHRpbmdGaWx0ZXIoaW50IG11bCwgaW50IGFkZCkgewotICAgICAgICBMaWdodGluZ0NvbG9yRmlsdGVyX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IExpZ2h0aW5nQ29sb3JGaWx0ZXJfRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5DcmVhdGVMaWdodGluZ0ZpbHRlcihpbnQgbmF0aXZlRmlsdGVyLCBpbnQgbXVsLCBpbnQgYWRkKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTGluZWFyR3JhZGllbnRfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTGluZWFyR3JhZGllbnRfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjExN2ZjYS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0xpbmVhckdyYWRpZW50X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlNoYWRlci5UaWxlTW9kZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuTGluZWFyR3JhZGllbnQKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBMaW5lYXJHcmFkaWVudCBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBMaW5lYXJHcmFkaWVudCBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgU2hhZGVyX0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LAotICogYXMgYWxsIHRoZSBTaGFkZXIgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyIG93bmVkIGJ5IHtAbGluayBTaGFkZXJfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgU2hhZGVyX0RlbGVnYXRlCi0gKgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgTGluZWFyR3JhZGllbnRfRGVsZWdhdGUgZXh0ZW5kcyBHcmFkaWVudF9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotICAgIHByaXZhdGUgamF2YS5hd3QuUGFpbnQgbUphdmFQYWludDsKLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBqYXZhLmF3dC5QYWludCBnZXRKYXZhUGFpbnQoKSB7Ci0gICAgICAgIHJldHVybiBtSmF2YVBhaW50OwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUxKExpbmVhckdyYWRpZW50IHRoaXNHcmFkaWVudCwKLSAgICAgICAgICAgIGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEsIGZsb2F0IHkxLAotICAgICAgICAgICAgaW50IGNvbG9yc1tdLCBmbG9hdCBwb3NpdGlvbnNbXSwgaW50IHRpbGVNb2RlKSB7Ci0gICAgICAgIExpbmVhckdyYWRpZW50X0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IExpbmVhckdyYWRpZW50X0RlbGVnYXRlKHgwLCB5MCwgeDEsIHkxLAotICAgICAgICAgICAgICAgIGNvbG9ycywgcG9zaXRpb25zLCBTaGFkZXJfRGVsZWdhdGUuZ2V0VGlsZU1vZGUodGlsZU1vZGUpKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZTIoTGluZWFyR3JhZGllbnQgdGhpc0dyYWRpZW50LAotICAgICAgICAgICAgZmxvYXQgeDAsIGZsb2F0IHkwLCBmbG9hdCB4MSwgZmxvYXQgeTEsCi0gICAgICAgICAgICBpbnQgY29sb3IwLCBpbnQgY29sb3IxLCBpbnQgdGlsZU1vZGUpIHsKLSAgICAgICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZTEodGhpc0dyYWRpZW50LAotICAgICAgICAgICAgICAgIHgwLCB5MCwgeDEsIHkxLCBuZXcgaW50W10geyBjb2xvcjAsIGNvbG9yMX0sIG51bGwgLypwb3NpdGlvbnMqLywKLSAgICAgICAgICAgICAgICB0aWxlTW9kZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVQb3N0Q3JlYXRlMShMaW5lYXJHcmFkaWVudCB0aGlzR3JhZGllbnQsCi0gICAgICAgICAgICBpbnQgbmF0aXZlX3NoYWRlciwgZmxvYXQgeDAsIGZsb2F0IHkwLCBmbG9hdCB4MSwgZmxvYXQgeTEsCi0gICAgICAgICAgICBpbnQgY29sb3JzW10sIGZsb2F0IHBvc2l0aW9uc1tdLCBpbnQgdGlsZU1vZGUpIHsKLSAgICAgICAgLy8gbm90aGluZyB0byBiZSBkb25lIGhlcmUuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlUG9zdENyZWF0ZTIoTGluZWFyR3JhZGllbnQgdGhpc0dyYWRpZW50LAotICAgICAgICAgICAgaW50IG5hdGl2ZV9zaGFkZXIsIGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEsIGZsb2F0IHkxLAotICAgICAgICAgICAgaW50IGNvbG9yMCwgaW50IGNvbG9yMSwgaW50IHRpbGVNb2RlKSB7Ci0gICAgICAgIC8vIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGEgc2hhZGVyIHRoYXQgZHJhd3MgYSBsaW5lYXIgZ3JhZGllbnQgYWxvbmcgYSBsaW5lLgotICAgICAqCi0gICAgICogQHBhcmFtIHgwIFRoZSB4LWNvb3JkaW5hdGUgZm9yIHRoZSBzdGFydCBvZiB0aGUgZ3JhZGllbnQgbGluZQotICAgICAqIEBwYXJhbSB5MCBUaGUgeS1jb29yZGluYXRlIGZvciB0aGUgc3RhcnQgb2YgdGhlIGdyYWRpZW50IGxpbmUKLSAgICAgKiBAcGFyYW0geDEgVGhlIHgtY29vcmRpbmF0ZSBmb3IgdGhlIGVuZCBvZiB0aGUgZ3JhZGllbnQgbGluZQotICAgICAqIEBwYXJhbSB5MSBUaGUgeS1jb29yZGluYXRlIGZvciB0aGUgZW5kIG9mIHRoZSBncmFkaWVudCBsaW5lCi0gICAgICogQHBhcmFtIGNvbG9ycyBUaGUgY29sb3JzIHRvIGJlIGRpc3RyaWJ1dGVkIGFsb25nIHRoZSBncmFkaWVudCBsaW5lCi0gICAgICogQHBhcmFtIHBvc2l0aW9ucyBNYXkgYmUgbnVsbC4gVGhlIHJlbGF0aXZlIHBvc2l0aW9ucyBbMC4uMV0gb2YgZWFjaAotICAgICAqICAgICAgICAgICAgY29ycmVzcG9uZGluZyBjb2xvciBpbiB0aGUgY29sb3JzIGFycmF5LiBJZiB0aGlzIGlzIG51bGwsIHRoZQotICAgICAqICAgICAgICAgICAgdGhlIGNvbG9ycyBhcmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFsb25nIHRoZSBncmFkaWVudCBsaW5lLgotICAgICAqIEBwYXJhbSB0aWxlIFRoZSBTaGFkZXIgdGlsaW5nIG1vZGUKLSAgICAgKi8KLSAgICBwcml2YXRlIExpbmVhckdyYWRpZW50X0RlbGVnYXRlKGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEsIGZsb2F0IHkxLAotICAgICAgICAgICAgaW50IGNvbG9yc1tdLCBmbG9hdCBwb3NpdGlvbnNbXSwgVGlsZU1vZGUgdGlsZSkgewotICAgICAgICBzdXBlcihjb2xvcnMsIHBvc2l0aW9ucyk7Ci0gICAgICAgIG1KYXZhUGFpbnQgPSBuZXcgTGluZWFyR3JhZGllbnRQYWludCh4MCwgeTAsIHgxLCB5MSwgbUNvbG9ycywgbVBvc2l0aW9ucywgdGlsZSk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBDdXN0b20gSmF2YSBQYWludCAtLS0tCi0gICAgLyoqCi0gICAgICogTGluZWFyIEdyYWRpZW50IChKYXZhKSBQYWludCBhYmxlIHRvIGhhbmRsZSBtb3JlIHRoYW4gMiBwb2ludHMsIGFzCi0gICAgICoge0BsaW5rIGphdmEuYXd0LkdyYWRpZW50UGFpbnR9IG9ubHkgc3VwcG9ydHMgMiBwb2ludHMgYW5kIGRvZXMgbm90IHN1cHBvcnQgQW5kcm9pZCdzIHRpbGUKLSAgICAgKiBtb2Rlcy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGNsYXNzIExpbmVhckdyYWRpZW50UGFpbnQgZXh0ZW5kcyBHcmFkaWVudFBhaW50IHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1YMDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBtWTA7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgZmxvYXQgbUR4OwotICAgICAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1EeTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBtRFNpemUyOwotCi0gICAgICAgIHB1YmxpYyBMaW5lYXJHcmFkaWVudFBhaW50KGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBpbnQgY29sb3JzW10sCi0gICAgICAgICAgICAgICAgZmxvYXQgcG9zaXRpb25zW10sIFRpbGVNb2RlIHRpbGUpIHsKLSAgICAgICAgICAgIHN1cGVyKGNvbG9ycywgcG9zaXRpb25zLCB0aWxlKTsKLSAgICAgICAgICAgIG1YMCA9IHgwOwotICAgICAgICAgICAgbVkwID0geTA7Ci0gICAgICAgICAgICBtRHggPSB4MSAtIHgwOwotICAgICAgICAgICAgbUR5ID0geTEgLSB5MDsKLSAgICAgICAgICAgIG1EU2l6ZTIgPSBtRHggKiBtRHggKyBtRHkgKiBtRHk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGphdmEuYXd0LlBhaW50Q29udGV4dCBjcmVhdGVDb250ZXh0KAotICAgICAgICAgICAgICAgIGphdmEuYXd0LmltYWdlLkNvbG9yTW9kZWwgICAgICBjb2xvck1vZGVsLAotICAgICAgICAgICAgICAgIGphdmEuYXd0LlJlY3RhbmdsZSAgICAgICAgICAgICBkZXZpY2VCb3VuZHMsCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5SZWN0YW5nbGUyRCAgICAgIHVzZXJCb3VuZHMsCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gIHhmb3JtLAotICAgICAgICAgICAgICAgIGphdmEuYXd0LlJlbmRlcmluZ0hpbnRzICAgICAgICBoaW50cykgewotICAgICAgICAgICAgcHJlY29tcHV0ZUdyYWRpZW50Q29sb3JzKCk7Ci0KLSAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGNhbnZhc01hdHJpeDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY2FudmFzTWF0cml4ID0geGZvcm0uY3JlYXRlSW52ZXJzZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5hd3QuZ2VvbS5Ob25pbnZlcnRpYmxlVHJhbnNmb3JtRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfTUFUUklYX0lOVkVSU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGludmVyc2UgbWF0cml4IGluIExpbmVhckdyYWRpZW50IiwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgY2FudmFzTWF0cml4ID0gbmV3IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGxvY2FsTWF0cml4ID0gZ2V0TG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbG9jYWxNYXRyaXggPSBsb2NhbE1hdHJpeC5jcmVhdGVJbnZlcnNlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmF3dC5nZW9tLk5vbmludmVydGlibGVUcmFuc2Zvcm1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19NQVRSSVhfSU5WRVJTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gaW52ZXJzZSBtYXRyaXggaW4gTGluZWFyR3JhZGllbnQiLCBlLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICBsb2NhbE1hdHJpeCA9IG5ldyBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbmV3IExpbmVhckdyYWRpZW50UGFpbnRDb250ZXh0KGNhbnZhc01hdHJpeCwgbG9jYWxNYXRyaXgsIGNvbG9yTW9kZWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBMaW5lYXJHcmFkaWVudFBhaW50Q29udGV4dCBpbXBsZW1lbnRzIGphdmEuYXd0LlBhaW50Q29udGV4dCB7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gbUNhbnZhc01hdHJpeDsKLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gbUxvY2FsTWF0cml4OwotICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIG1Db2xvck1vZGVsOwotCi0gICAgICAgICAgICBwcml2YXRlIExpbmVhckdyYWRpZW50UGFpbnRDb250ZXh0KAotICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBjYW52YXNNYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGxvY2FsTWF0cml4LAotICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIGNvbG9yTW9kZWwpIHsKLSAgICAgICAgICAgICAgICBtQ2FudmFzTWF0cml4ID0gY2FudmFzTWF0cml4OwotICAgICAgICAgICAgICAgIG1Mb2NhbE1hdHJpeCA9IGxvY2FsTWF0cml4OwotICAgICAgICAgICAgICAgIG1Db2xvck1vZGVsID0gY29sb3JNb2RlbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIGdldENvbG9yTW9kZWwoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1Db2xvck1vZGVsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBqYXZhLmF3dC5pbWFnZS5SYXN0ZXIgZ2V0UmFzdGVyKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSBpbWFnZSA9IG5ldyBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlKHcsIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0IpOwotCi0gICAgICAgICAgICAgICAgaW50W10gZGF0YSA9IG5ldyBpbnRbdypoXTsKLQotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgZmxvYXRbXSBwdDEgPSBuZXcgZmxvYXRbMl07Ci0gICAgICAgICAgICAgICAgZmxvYXRbXSBwdDIgPSBuZXcgZmxvYXRbMl07Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaXkgPSAwIDsgaXkgPCBoIDsgaXkrKykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpeCA9IDAgOyBpeCA8IHcgOyBpeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdGhlIGNhbnZhcyB0cmFuc2Zvcm0KLSAgICAgICAgICAgICAgICAgICAgICAgIHB0MVswXSA9IHggKyBpeDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0MVsxXSA9IHkgKyBpeTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXNNYXRyaXgudHJhbnNmb3JtKHB0MSwgMCwgcHQyLCAwLCAxKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoZSBsb2NhbCBtYXRyaXguCi0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMF0gPSBwdDJbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMV0gPSBwdDJbMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTG9jYWxNYXRyaXgudHJhbnNmb3JtKHB0MSwgMCwgcHQyLCAwLCAxKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpbmRleCsrXSA9IGdldENvbG9yKHB0MlswXSwgcHQyWzFdKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGltYWdlLnNldFJHQigwIC8qc3RhcnRYKi8sIDAgLypzdGFydFkqLywgdywgaCwgZGF0YSwgMCAvKm9mZnNldCovLCB3IC8qc2NhbnNpemUqLyk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UuZ2V0UmFzdGVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyBhIGNvbG9yIGZvciBhbiBhcmJpdHJhcnkgcG9pbnQuCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIGludCBnZXRDb2xvcihmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgICAgICBmbG9hdCBwb3M7Ci0gICAgICAgICAgICBpZiAobUR4ID09IDApIHsKLSAgICAgICAgICAgICAgICBwb3MgPSAoeSAtIG1ZMCkgLyBtRHk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1EeSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcG9zID0gKHggLSBtWDApIC8gbUR4OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBmaW5kIHRoZSB4IHBvc2l0aW9uIG9uIHRoZSBncmFkaWVudCB2ZWN0b3IuCi0gICAgICAgICAgICAgICAgZmxvYXQgX3ggPSAobUR4Km1EeSooeS1tWTApICsgbUR5Km1EeSptWDAgKyBtRHgqbUR4KngpIC8gbURTaXplMjsKLSAgICAgICAgICAgICAgICAvLyBmcm9tIGl0IGdldCB0aGUgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHZlY3RvcgotICAgICAgICAgICAgICAgIHBvcyA9IChfeCAtIG1YMCkgLyBtRHg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBnZXRHcmFkaWVudENvbG9yKHBvcyk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL01hc2tGaWx0ZXJfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTWFza0ZpbHRlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmYyN2U0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTWFza0ZpbHRlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5NYXNrRmlsdGVyCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgTWFza0ZpbHRlciBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBNYXNrRmlsdGVyIGNsYXNzLgotICoKLSAqIFRoaXMgYWxzbyBzZXJ2ZSBhcyBhIGJhc2UgY2xhc3MgZm9yIGFsbCBNYXNrRmlsdGVyIGRlbGVnYXRlIGNsYXNzZXMuCi0gKgotICogQHNlZSBEZWxlZ2F0ZU1hbmFnZXIKLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYXNrRmlsdGVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBEZWxlZ2F0ZU1hbmFnZXI8TWFza0ZpbHRlcl9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxNYXNrRmlsdGVyX0RlbGVnYXRlPihNYXNrRmlsdGVyX0RlbGVnYXRlLmNsYXNzKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgaGVscGVyIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIHB1YmxpYyBzdGF0aWMgTWFza0ZpbHRlcl9EZWxlZ2F0ZSBnZXREZWxlZ2F0ZShpbnQgbmF0aXZlU2hhZGVyKSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVTaGFkZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzU3VwcG9ydGVkKCk7Ci0gICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpOwotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVEZXN0cnVjdG9yKGludCBuYXRpdmVfZmlsdGVyKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlX2ZpbHRlcik7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTWF0cml4X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL01hdHJpeF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGYyYTIxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTWF0cml4X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeC5TY2FsZVRvRml0OwotCi1pbXBvcnQgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm07Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5Ob25pbnZlcnRpYmxlVHJhbnNmb3JtRXhjZXB0aW9uOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXgKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBNYXRyaXggaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgTWF0cml4IGNsYXNzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgTWF0cml4X0RlbGVnYXRlIHsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBNQVRSSVhfU0laRSA9IDk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIG1hbmFnZXIgLS0tLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIERlbGVnYXRlTWFuYWdlcjxNYXRyaXhfRGVsZWdhdGU+IHNNYW5hZ2VyID0KLSAgICAgICAgICAgIG5ldyBEZWxlZ2F0ZU1hbmFnZXI8TWF0cml4X0RlbGVnYXRlPihNYXRyaXhfRGVsZWdhdGUuY2xhc3MpOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLSAgICBwcml2YXRlIGZsb2F0IG1WYWx1ZXNbXSA9IG5ldyBmbG9hdFtNQVRSSVhfU0laRV07Ci0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIE1hdHJpeF9EZWxlZ2F0ZSBnZXREZWxlZ2F0ZShpbnQgbmF0aXZlX2luc3RhbmNlKSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfaW5zdGFuY2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYW4ge0BsaW5rIEFmZmluZVRyYW5zZm9ybX0gbWF0Y2hpbmcgdGhlIGdpdmVuIE1hdHJpeC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEFmZmluZVRyYW5zZm9ybSBnZXRBZmZpbmVUcmFuc2Zvcm0oTWF0cml4IG0pIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobS5uYXRpdmVfaW5zdGFuY2UpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUuZ2V0QWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc1BlcnNwZWN0aXZlKE1hdHJpeCBtKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG0ubmF0aXZlX2luc3RhbmNlKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5oYXNQZXJzcGVjdGl2ZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIGNvbnRlbnQgb2YgdGhlIG1hdHJpeCB3aXRoIHRoZSBjb250ZW50IG9mIGFub3RoZXIgbWF0cml4LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldChNYXRyaXhfRGVsZWdhdGUgbWF0cml4KSB7Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkobWF0cml4Lm1WYWx1ZXMsIDAsIG1WYWx1ZXMsIDAsIE1BVFJJWF9TSVpFKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjb250ZW50IG9mIHRoZSBtYXRyaXggd2l0aCB0aGUgY29udGVudCBvZiBhbm90aGVyIG1hdHJpeCByZXByZXNlbnRlZCBhcyBhbiBhcnJheQotICAgICAqIG9mIHZhbHVlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXQoZmxvYXRbXSB2YWx1ZXMpIHsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weSh2YWx1ZXMsIDAsIG1WYWx1ZXMsIDAsIE1BVFJJWF9TSVpFKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXNldHMgdGhlIG1hdHJpeCB0byBiZSB0aGUgaWRlbnRpdHkgbWF0cml4LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgewotICAgICAgICByZXNldChtVmFsdWVzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaXggaXMgaWRlbnRpdHkuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNJZGVudGl0eSgpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDAsIGsgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDM7IGorKywgaysrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1WYWx1ZXNba10gIT0gKChpPT1qKSA/IDEgOiAwKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmbG9hdFtdIG1ha2VWYWx1ZXMoQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCkgewotICAgICAgICBmbG9hdFtdIHZhbHVlcyA9IG5ldyBmbG9hdFtNQVRSSVhfU0laRV07Ci0gICAgICAgIHZhbHVlc1swXSA9IChmbG9hdCkgbWF0cml4LmdldFNjYWxlWCgpOwotICAgICAgICB2YWx1ZXNbMV0gPSAoZmxvYXQpIG1hdHJpeC5nZXRTaGVhclgoKTsKLSAgICAgICAgdmFsdWVzWzJdID0gKGZsb2F0KSBtYXRyaXguZ2V0VHJhbnNsYXRlWCgpOwotICAgICAgICB2YWx1ZXNbM10gPSAoZmxvYXQpIG1hdHJpeC5nZXRTaGVhclkoKTsKLSAgICAgICAgdmFsdWVzWzRdID0gKGZsb2F0KSBtYXRyaXguZ2V0U2NhbGVZKCk7Ci0gICAgICAgIHZhbHVlc1s1XSA9IChmbG9hdCkgbWF0cml4LmdldFRyYW5zbGF0ZVkoKTsKLSAgICAgICAgdmFsdWVzWzZdID0gMC5mOwotICAgICAgICB2YWx1ZXNbN10gPSAwLmY7Ci0gICAgICAgIHZhbHVlc1s4XSA9IDEuZjsKLQotICAgICAgICByZXR1cm4gdmFsdWVzOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgTWF0cml4X0RlbGVnYXRlIG1ha2UoQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCkgewotICAgICAgICByZXR1cm4gbmV3IE1hdHJpeF9EZWxlZ2F0ZShtYWtlVmFsdWVzKG1hdHJpeCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIG1hcFJlY3QoUmVjdEYgZHN0LCBSZWN0RiBzcmMpIHsKLSAgICAgICAgLy8gYXJyYXkgd2l0aCA0IGNvcm5lcnMKLSAgICAgICAgZmxvYXRbXSBjb3JuZXJzID0gbmV3IGZsb2F0W10gewotICAgICAgICAgICAgICAgIHNyYy5sZWZ0LCBzcmMudG9wLAotICAgICAgICAgICAgICAgIHNyYy5yaWdodCwgc3JjLnRvcCwKLSAgICAgICAgICAgICAgICBzcmMucmlnaHQsIHNyYy5ib3R0b20sCi0gICAgICAgICAgICAgICAgc3JjLmxlZnQsIHNyYy5ib3R0b20sCi0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gYXBwbHkgdGhlIHRyYW5zZm9ybSB0byB0aGVtLgotICAgICAgICBtYXBQb2ludHMoY29ybmVycyk7Ci0KLSAgICAgICAgLy8gbm93IHB1dCB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBXZSB0YWtlIHRoZSBtaW4vbWF4IG9mIFhzIGFuZCBtaW4vbWF4IG9mIFlzCi0gICAgICAgIGRzdC5sZWZ0ID0gTWF0aC5taW4oTWF0aC5taW4oY29ybmVyc1swXSwgY29ybmVyc1syXSksIE1hdGgubWluKGNvcm5lcnNbNF0sIGNvcm5lcnNbNl0pKTsKLSAgICAgICAgZHN0LnJpZ2h0ID0gTWF0aC5tYXgoTWF0aC5tYXgoY29ybmVyc1swXSwgY29ybmVyc1syXSksIE1hdGgubWF4KGNvcm5lcnNbNF0sIGNvcm5lcnNbNl0pKTsKLQotICAgICAgICBkc3QudG9wID0gTWF0aC5taW4oTWF0aC5taW4oY29ybmVyc1sxXSwgY29ybmVyc1szXSksIE1hdGgubWluKGNvcm5lcnNbNV0sIGNvcm5lcnNbN10pKTsKLSAgICAgICAgZHN0LmJvdHRvbSA9IE1hdGgubWF4KE1hdGgubWF4KGNvcm5lcnNbMV0sIGNvcm5lcnNbM10pLCBNYXRoLm1heChjb3JuZXJzWzVdLCBjb3JuZXJzWzddKSk7Ci0KLQotICAgICAgICByZXR1cm4gKGNvbXB1dGVUeXBlTWFzaygpICYga1JlY3RTdGF5c1JlY3RfTWFzaykgIT0gMDsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYW4ge0BsaW5rIEFmZmluZVRyYW5zZm9ybX0gbWF0Y2hpbmcgdGhlIG1hdHJpeC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQWZmaW5lVHJhbnNmb3JtIGdldEFmZmluZVRyYW5zZm9ybSgpIHsKLSAgICAgICAgcmV0dXJuIGdldEFmZmluZVRyYW5zZm9ybShtVmFsdWVzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNQZXJzcGVjdGl2ZSgpIHsKLSAgICAgICAgcmV0dXJuIChtVmFsdWVzWzZdICE9IDAgfHwgbVZhbHVlc1s3XSAhPSAwIHx8IG1WYWx1ZXNbOF0gIT0gMSk7Ci0gICAgfQotCi0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfY3JlYXRlKGludCBuYXRpdmVfc3JjX29yX3plcm8pIHsKLSAgICAgICAgLy8gY3JlYXRlIHRoZSBkZWxlZ2F0ZQotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgTWF0cml4X0RlbGVnYXRlKCk7Ci0KLSAgICAgICAgLy8gY29weSBmcm9tIHZhbHVlcyBpZiBuZWVkZWQuCi0gICAgICAgIGlmIChuYXRpdmVfc3JjX29yX3plcm8gPiAwKSB7Ci0gICAgICAgICAgICBNYXRyaXhfRGVsZWdhdGUgb2xkRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfc3JjX29yX3plcm8pOwotICAgICAgICAgICAgaWYgKG9sZERlbGVnYXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KAotICAgICAgICAgICAgICAgICAgICAgICAgb2xkRGVsZWdhdGUubVZhbHVlcywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RlbGVnYXRlLm1WYWx1ZXMsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBNQVRSSVhfU0laRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9pc0lkZW50aXR5KGludCBuYXRpdmVfb2JqZWN0KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkLmlzSWRlbnRpdHkoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcmVjdFN0YXlzUmVjdChpbnQgbmF0aXZlX29iamVjdCkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAoZC5jb21wdXRlVHlwZU1hc2soKSAmIGtSZWN0U3RheXNSZWN0X01hc2spICE9IDA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3Jlc2V0KGludCBuYXRpdmVfb2JqZWN0KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc2V0KGQubVZhbHVlcyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldChpbnQgbmF0aXZlX29iamVjdCwgaW50IG90aGVyKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBzcmMgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShvdGhlcik7Ci0gICAgICAgIGlmIChzcmMgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShzcmMubVZhbHVlcywgMCwgZC5tVmFsdWVzLCAwLCBNQVRSSVhfU0laRSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldFRyYW5zbGF0ZShpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHNldFRyYW5zbGF0ZShkLm1WYWx1ZXMsIGR4LCBkeSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldFNjYWxlKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBzeCwgZmxvYXQgc3ksCi0gICAgICAgICAgICBmbG9hdCBweCwgZmxvYXQgcHkpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5tVmFsdWVzID0gZ2V0U2NhbGUoc3gsIHN5LCBweCwgcHkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRTY2FsZShpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgc3gsIGZsb2F0IHN5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGQubVZhbHVlc1swXSA9IHN4OwotICAgICAgICBkLm1WYWx1ZXNbMV0gPSAwOwotICAgICAgICBkLm1WYWx1ZXNbMl0gPSAwOwotICAgICAgICBkLm1WYWx1ZXNbM10gPSAwOwotICAgICAgICBkLm1WYWx1ZXNbNF0gPSBzeTsKLSAgICAgICAgZC5tVmFsdWVzWzVdID0gMDsKLSAgICAgICAgZC5tVmFsdWVzWzZdID0gMDsKLSAgICAgICAgZC5tVmFsdWVzWzddID0gMDsKLSAgICAgICAgZC5tVmFsdWVzWzhdID0gMTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0Um90YXRlKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBkZWdyZWVzLCBmbG9hdCBweCwgZmxvYXQgcHkpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5tVmFsdWVzID0gZ2V0Um90YXRlKGRlZ3JlZXMsIHB4LCBweSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldFJvdGF0ZShpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgZGVncmVlcykgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzZXRSb3RhdGUoZC5tVmFsdWVzLCBkZWdyZWVzKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0U2luQ29zKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBzaW5WYWx1ZSwgZmxvYXQgY29zVmFsdWUsCi0gICAgICAgICAgICBmbG9hdCBweCwgZmxvYXQgcHkpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVE9ETzogZG8gaXQgaW4gb25lIHBhc3MKLQotICAgICAgICAvLyB0cmFuc2xhdGUgc28gdGhhdCB0aGUgcGl2b3QgaXMgaW4gMCwwCi0gICAgICAgIHNldFRyYW5zbGF0ZShkLm1WYWx1ZXMsIC1weCwgLXB5KTsKLQotICAgICAgICAvLyBzY2FsZQotICAgICAgICBkLnBvc3RUcmFuc2Zvcm0oZ2V0Um90YXRlKHNpblZhbHVlLCBjb3NWYWx1ZSkpOwotICAgICAgICAvLyB0cmFuc2xhdGUgYmFjayB0aGUgcGl2b3QKLSAgICAgICAgZC5wb3N0VHJhbnNmb3JtKGdldFRyYW5zbGF0ZShweCwgcHkpKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0U2luQ29zKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBzaW5WYWx1ZSwgZmxvYXQgY29zVmFsdWUpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc2V0Um90YXRlKGQubVZhbHVlcywgc2luVmFsdWUsIGNvc1ZhbHVlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0U2tldyhpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQga3gsIGZsb2F0IGt5LAotICAgICAgICAgICAgZmxvYXQgcHgsIGZsb2F0IHB5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGQubVZhbHVlcyA9IGdldFNrZXcoa3gsIGt5LCBweCwgcHkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRTa2V3KGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBreCwgZmxvYXQga3kpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5tVmFsdWVzWzBdID0gMTsKLSAgICAgICAgZC5tVmFsdWVzWzFdID0ga3g7Ci0gICAgICAgIGQubVZhbHVlc1syXSA9IC0wOwotICAgICAgICBkLm1WYWx1ZXNbM10gPSBreTsKLSAgICAgICAgZC5tVmFsdWVzWzRdID0gMTsKLSAgICAgICAgZC5tVmFsdWVzWzVdID0gMDsKLSAgICAgICAgZC5tVmFsdWVzWzZdID0gMDsKLSAgICAgICAgZC5tVmFsdWVzWzddID0gMDsKLSAgICAgICAgZC5tVmFsdWVzWzhdID0gMTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfc2V0Q29uY2F0KGludCBuYXRpdmVfb2JqZWN0LCBpbnQgYSwgaW50IGIpIHsKLSAgICAgICAgaWYgKGEgPT0gbmF0aXZlX29iamVjdCkgewotICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZV9wcmVDb25jYXQobmF0aXZlX29iamVjdCwgYik7Ci0gICAgICAgIH0gZWxzZSBpZiAoYiA9PSBuYXRpdmVfb2JqZWN0KSB7Ci0gICAgICAgICAgICByZXR1cm4gbmF0aXZlX3Bvc3RDb25jYXQobmF0aXZlX29iamVjdCwgYSk7Ci0gICAgICAgIH0KLQotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgYV9tdHggPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShhKTsKLSAgICAgICAgaWYgKGFfbXR4ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBiX210eCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKGIpOwotICAgICAgICBpZiAoYl9tdHggPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbXVsdGlwbHkoZC5tVmFsdWVzLCBhX210eC5tVmFsdWVzLCBiX210eC5tVmFsdWVzKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcHJlVHJhbnNsYXRlKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBkeCwgZmxvYXQgZHkpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5wcmVUcmFuc2Zvcm0oZ2V0VHJhbnNsYXRlKGR4LCBkeSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcHJlU2NhbGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IHN4LCBmbG9hdCBzeSwKLSAgICAgICAgICAgIGZsb2F0IHB4LCBmbG9hdCBweSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkLnByZVRyYW5zZm9ybShnZXRTY2FsZShzeCwgc3ksIHB4LCBweSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcHJlU2NhbGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IHN4LCBmbG9hdCBzeSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkLnByZVRyYW5zZm9ybShnZXRTY2FsZShzeCwgc3kpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3ByZVJvdGF0ZShpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgZGVncmVlcywKLSAgICAgICAgICAgIGZsb2F0IHB4LCBmbG9hdCBweSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkLnByZVRyYW5zZm9ybShnZXRSb3RhdGUoZGVncmVlcywgcHgsIHB5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9wcmVSb3RhdGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IGRlZ3JlZXMpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZG91YmxlIHJhZCA9IE1hdGgudG9SYWRpYW5zKGRlZ3JlZXMpOwotICAgICAgICBmbG9hdCBzaW4gPSAoZmxvYXQpTWF0aC5zaW4ocmFkKTsKLSAgICAgICAgZmxvYXQgY29zID0gKGZsb2F0KU1hdGguY29zKHJhZCk7Ci0KLSAgICAgICAgZC5wcmVUcmFuc2Zvcm0oZ2V0Um90YXRlKHNpbiwgY29zKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9wcmVTa2V3KGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBreCwgZmxvYXQga3ksCi0gICAgICAgICAgICBmbG9hdCBweCwgZmxvYXQgcHkpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5wcmVUcmFuc2Zvcm0oZ2V0U2tldyhreCwga3ksIHB4LCBweSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcHJlU2tldyhpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQga3gsIGZsb2F0IGt5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGQucHJlVHJhbnNmb3JtKGdldFNrZXcoa3gsIGt5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9wcmVDb25jYXQoaW50IG5hdGl2ZV9vYmplY3QsIGludCBvdGhlcl9tYXRyaXgpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIG90aGVyID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUob3RoZXJfbWF0cml4KTsKLSAgICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGQucHJlVHJhbnNmb3JtKG90aGVyLm1WYWx1ZXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcG9zdFRyYW5zbGF0ZShpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGQucG9zdFRyYW5zZm9ybShnZXRUcmFuc2xhdGUoZHgsIGR5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9wb3N0U2NhbGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IHN4LCBmbG9hdCBzeSwKLSAgICAgICAgICAgIGZsb2F0IHB4LCBmbG9hdCBweSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkLnBvc3RUcmFuc2Zvcm0oZ2V0U2NhbGUoc3gsIHN5LCBweCwgcHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3Bvc3RTY2FsZShpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgc3gsIGZsb2F0IHN5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGQucG9zdFRyYW5zZm9ybShnZXRTY2FsZShzeCwgc3kpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3Bvc3RSb3RhdGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IGRlZ3JlZXMsCi0gICAgICAgICAgICBmbG9hdCBweCwgZmxvYXQgcHkpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5wb3N0VHJhbnNmb3JtKGdldFJvdGF0ZShkZWdyZWVzLCBweCwgcHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3Bvc3RSb3RhdGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IGRlZ3JlZXMpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5wb3N0VHJhbnNmb3JtKGdldFJvdGF0ZShkZWdyZWVzKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9wb3N0U2tldyhpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQga3gsIGZsb2F0IGt5LAotICAgICAgICAgICAgZmxvYXQgcHgsIGZsb2F0IHB5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGQucG9zdFRyYW5zZm9ybShnZXRTa2V3KGt4LCBreSwgcHgsIHB5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9wb3N0U2tldyhpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQga3gsIGZsb2F0IGt5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGQucG9zdFRyYW5zZm9ybShnZXRTa2V3KGt4LCBreSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcG9zdENvbmNhdChpbnQgbmF0aXZlX29iamVjdCwgaW50IG90aGVyX21hdHJpeCkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgb3RoZXIgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShvdGhlcl9tYXRyaXgpOwotICAgICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5wb3N0VHJhbnNmb3JtKG90aGVyLm1WYWx1ZXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfc2V0UmVjdFRvUmVjdChpbnQgbmF0aXZlX29iamVjdCwgUmVjdEYgc3JjLAotICAgICAgICAgICAgUmVjdEYgZHN0LCBpbnQgc3RmKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzcmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXNldChkLm1WYWx1ZXMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGQubVZhbHVlc1swXSA9IGQubVZhbHVlc1sxXSA9IGQubVZhbHVlc1syXSA9IGQubVZhbHVlc1szXSA9IGQubVZhbHVlc1s0XSA9IGQubVZhbHVlc1s1XQotICAgICAgICAgICAgICAgPSBkLm1WYWx1ZXNbNl0gPSBkLm1WYWx1ZXNbN10gPSAwOwotICAgICAgICAgICAgZC5tVmFsdWVzWzhdID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZsb2F0ICAgIHR4LCBzeCA9IGRzdC53aWR0aCgpIC8gc3JjLndpZHRoKCk7Ci0gICAgICAgICAgICBmbG9hdCAgICB0eSwgc3kgPSBkc3QuaGVpZ2h0KCkgLyBzcmMuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBib29sZWFuICB4TGFyZ2VyID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChzdGYgIT0gU2NhbGVUb0ZpdC5GSUxMLm5hdGl2ZUludCkgewotICAgICAgICAgICAgICAgIGlmIChzeCA+IHN5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHhMYXJnZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzeCA9IHN5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0eCA9IGRzdC5sZWZ0IC0gc3JjLmxlZnQgKiBzeDsKLSAgICAgICAgICAgIHR5ID0gZHN0LnRvcCAtIHNyYy50b3AgKiBzeTsKLSAgICAgICAgICAgIGlmIChzdGYgPT0gU2NhbGVUb0ZpdC5DRU5URVIubmF0aXZlSW50IHx8IHN0ZiA9PSBTY2FsZVRvRml0LkVORC5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBkaWZmOwotCi0gICAgICAgICAgICAgICAgaWYgKHhMYXJnZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgZGlmZiA9IGRzdC53aWR0aCgpIC0gc3JjLndpZHRoKCkgKiBzeTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkaWZmID0gZHN0LmhlaWdodCgpIC0gc3JjLmhlaWdodCgpICogc3k7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHN0ZiA9PSBTY2FsZVRvRml0LkNFTlRFUi5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZGlmZiA9IGRpZmYgLyAyOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh4TGFyZ2VyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHR4ICs9IGRpZmY7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdHkgKz0gZGlmZjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGQubVZhbHVlc1swXSA9IHN4OwotICAgICAgICAgICAgZC5tVmFsdWVzWzRdID0gc3k7Ci0gICAgICAgICAgICBkLm1WYWx1ZXNbMl0gPSB0eDsKLSAgICAgICAgICAgIGQubVZhbHVlc1s1XSA9IHR5OwotICAgICAgICAgICAgZC5tVmFsdWVzWzFdICA9IGQubVZhbHVlc1szXSA9IGQubVZhbHVlc1s2XSA9IGQubVZhbHVlc1s3XSA9IDA7Ci0KLSAgICAgICAgfQotICAgICAgICAvLyBzaGFyZWQgY2xlYW51cAotICAgICAgICBkLm1WYWx1ZXNbOF0gPSAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfc2V0UG9seVRvUG9seShpbnQgbmF0aXZlX29iamVjdCwgZmxvYXRbXSBzcmMsIGludCBzcmNJbmRleCwKLSAgICAgICAgICAgIGZsb2F0W10gZHN0LCBpbnQgZHN0SW5kZXgsIGludCBwb2ludENvdW50KSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiTWF0cml4LnNldFBvbHlUb1BvbHkgaXMgbm90IHN1cHBvcnRlZC4iLAotICAgICAgICAgICAgICAgIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX2ludmVydChpbnQgbmF0aXZlX29iamVjdCwgaW50IGludmVyc2UpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGludl9tdHggPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShpbnZlcnNlKTsKLSAgICAgICAgaWYgKGludl9tdHggPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmVUcmFuc2Zvcm0gPSBkLmdldEFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGludmVyc2VUcmFuc2Zvcm0gPSBhZmZpbmVUcmFuc2Zvcm0uY3JlYXRlSW52ZXJzZSgpOwotICAgICAgICAgICAgaW52X210eC5tVmFsdWVzWzBdID0gKGZsb2F0KWludmVyc2VUcmFuc2Zvcm0uZ2V0U2NhbGVYKCk7Ci0gICAgICAgICAgICBpbnZfbXR4Lm1WYWx1ZXNbMV0gPSAoZmxvYXQpaW52ZXJzZVRyYW5zZm9ybS5nZXRTaGVhclgoKTsKLSAgICAgICAgICAgIGludl9tdHgubVZhbHVlc1syXSA9IChmbG9hdClpbnZlcnNlVHJhbnNmb3JtLmdldFRyYW5zbGF0ZVgoKTsKLSAgICAgICAgICAgIGludl9tdHgubVZhbHVlc1szXSA9IChmbG9hdClpbnZlcnNlVHJhbnNmb3JtLmdldFNjYWxlWCgpOwotICAgICAgICAgICAgaW52X210eC5tVmFsdWVzWzRdID0gKGZsb2F0KWludmVyc2VUcmFuc2Zvcm0uZ2V0U2hlYXJZKCk7Ci0gICAgICAgICAgICBpbnZfbXR4Lm1WYWx1ZXNbNV0gPSAoZmxvYXQpaW52ZXJzZVRyYW5zZm9ybS5nZXRUcmFuc2xhdGVZKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGNhdGNoIChOb25pbnZlcnRpYmxlVHJhbnNmb3JtRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9tYXBQb2ludHMoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0W10gZHN0LCBpbnQgZHN0SW5kZXgsCi0gICAgICAgICAgICBmbG9hdFtdIHNyYywgaW50IHNyY0luZGV4LCBpbnQgcHRDb3VudCwgYm9vbGVhbiBpc1B0cykgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNQdHMpIHsKLSAgICAgICAgICAgIGQubWFwUG9pbnRzKGRzdCwgZHN0SW5kZXgsIHNyYywgc3JjSW5kZXgsIHB0Q291bnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZC5tYXBWZWN0b3JzKGRzdCwgZHN0SW5kZXgsIHNyYywgc3JjSW5kZXgsIHB0Q291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX21hcFJlY3QoaW50IG5hdGl2ZV9vYmplY3QsIFJlY3RGIGRzdCwgUmVjdEYgc3JjKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkLm1hcFJlY3QoZHN0LCBzcmMpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBuYXRpdmVfbWFwUmFkaXVzKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCByYWRpdXMpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDAuZjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0W10gc3JjID0gbmV3IGZsb2F0W10geyByYWRpdXMsIDAuZiwgMC5mLCByYWRpdXMgfTsKLSAgICAgICAgZC5tYXBWZWN0b3JzKHNyYywgMCwgc3JjLCAwLCAyKTsKLQotICAgICAgICBmbG9hdCBsMSA9IGdldFBvaW50TGVuZ3RoKHNyYywgMCk7Ci0gICAgICAgIGZsb2F0IGwyID0gZ2V0UG9pbnRMZW5ndGgoc3JjLCAyKTsKLQotICAgICAgICByZXR1cm4gKGZsb2F0KSBNYXRoLnNxcnQobDEgKiBsMik7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2dldFZhbHVlcyhpbnQgbmF0aXZlX29iamVjdCwgZmxvYXRbXSB2YWx1ZXMpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShkLm1WYWx1ZXMsIDAsIGQubVZhbHVlcywgMCwgTUFUUklYX1NJWkUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRWYWx1ZXMoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0W10gdmFsdWVzKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkodmFsdWVzLCAwLCBkLm1WYWx1ZXMsIDAsIE1BVFJJWF9TSVpFKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfZXF1YWxzKGludCBuYXRpdmVfYSwgaW50IG5hdGl2ZV9iKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBhID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX2EpOwotICAgICAgICBpZiAoYSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgYiA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9iKTsKLSAgICAgICAgaWYgKGIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgTUFUUklYX1NJWkUgOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChhLm1WYWx1ZXNbaV0gIT0gYi5tVmFsdWVzW2ldKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgZmluYWxpemVyKGludCBuYXRpdmVfaW5zdGFuY2UpIHsKLSAgICAgICAgc01hbmFnZXIucmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihuYXRpdmVfaW5zdGFuY2UpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBoZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIGdldEFmZmluZVRyYW5zZm9ybShmbG9hdFtdIG1hdHJpeCkgewotICAgICAgICAvLyB0aGUgQWZmaW5lVHJhbnNmb3JtIGNvbnN0cnVjdG9yIHRha2VzIHRoZSB2YWx1ZSBpbiBhIGRpZmZlcmVudCBvcmRlcgotICAgICAgICAvLyBmb3IgYSBtYXRyaXggWyAwIDEgMiBdCi0gICAgICAgIC8vICAgICAgICAgICAgICBbIDMgNCA1IF0KLSAgICAgICAgLy8gdGhlIG9yZGVyIGlzIDAsIDMsIDEsIDQsIDIsIDUuLi4KLSAgICAgICAgcmV0dXJuIG5ldyBBZmZpbmVUcmFuc2Zvcm0oCi0gICAgICAgICAgICAgICAgbWF0cml4WzBdLCBtYXRyaXhbM10sIG1hdHJpeFsxXSwKLSAgICAgICAgICAgICAgICBtYXRyaXhbNF0sIG1hdHJpeFsyXSwgbWF0cml4WzVdKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXNldCBhIG1hdHJpeCB0byB0aGUgaWRlbnRpdHkKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHJlc2V0KGZsb2F0W10gbXR4KSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwLCBrID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKyssIGsrKykgewotICAgICAgICAgICAgICAgIG10eFtrXSA9ICgoaT09aikgPyAxIDogMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQga0lkZW50aXR5X01hc2sgICAgICA9IDA7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IGtUcmFuc2xhdGVfTWFzayAgICAgPSAweDAxOyAgLy8hPCBzZXQgaWYgdGhlIG1hdHJpeCBoYXMgdHJhbnNsYXRpb24KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQga1NjYWxlX01hc2sgICAgICAgICA9IDB4MDI7ICAvLyE8IHNldCBpZiB0aGUgbWF0cml4IGhhcyBYIG9yIFkgc2NhbGUKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQga0FmZmluZV9NYXNrICAgICAgICA9IDB4MDQ7ICAvLyE8IHNldCBpZiB0aGUgbWF0cml4IHNrZXdzIG9yIHJvdGF0ZXMKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQga1BlcnNwZWN0aXZlX01hc2sgICA9IDB4MDg7ICAvLyE8IHNldCBpZiB0aGUgbWF0cml4IGlzIGluIHBlcnNwZWN0aXZlCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IGtSZWN0U3RheXNSZWN0X01hc2sgPSAweDEwOwotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBrVW5rbm93bl9NYXNrICAgICAgID0gMHg4MDsKLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBrQWxsTWFza3MgICAgICAgICAgID0ga1RyYW5zbGF0ZV9NYXNrIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTY2FsZV9NYXNrIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtBZmZpbmVfTWFzayB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrUGVyc3BlY3RpdmVfTWFzayB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrUmVjdFN0YXlzUmVjdF9NYXNrOwotCi0gICAgLy8gdGhlc2UgZ3V5cyBhbGlnbiB3aXRoIHRoZSBtYXNrcywgc28gd2UgY2FuIGNvbXB1dGUgYSBtYXNrIGZyb20gYSB2YXJpYWJsZSAwLzEKLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQga1RyYW5zbGF0ZV9TaGlmdCA9IDA7Ci0gICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IGtTY2FsZV9TaGlmdCA9IDE7Ci0gICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IGtBZmZpbmVfU2hpZnQgPSAyOwotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBrUGVyc3BlY3RpdmVfU2hpZnQgPSAzOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBrUmVjdFN0YXlzUmVjdF9TaGlmdCA9IDQ7Ci0KLSAgICBwcml2YXRlIGludCBjb21wdXRlVHlwZU1hc2soKSB7Ci0gICAgICAgIGludCBtYXNrID0gMDsKLQotICAgICAgICBpZiAobVZhbHVlc1s2XSAhPSAwLiB8fCBtVmFsdWVzWzddICE9IDAuIHx8IG1WYWx1ZXNbOF0gIT0gMS4pIHsKLSAgICAgICAgICAgIG1hc2sgfD0ga1BlcnNwZWN0aXZlX01hc2s7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVZhbHVlc1syXSAhPSAwLiB8fCBtVmFsdWVzWzVdICE9IDAuKSB7Ci0gICAgICAgICAgICBtYXNrIHw9IGtUcmFuc2xhdGVfTWFzazsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IG0wMCA9IG1WYWx1ZXNbMF07Ci0gICAgICAgIGZsb2F0IG0wMSA9IG1WYWx1ZXNbMV07Ci0gICAgICAgIGZsb2F0IG0xMCA9IG1WYWx1ZXNbM107Ci0gICAgICAgIGZsb2F0IG0xMSA9IG1WYWx1ZXNbNF07Ci0KLSAgICAgICAgaWYgKG0wMSAhPSAwLiB8fCBtMTAgIT0gMC4pIHsKLSAgICAgICAgICAgIG1hc2sgfD0ga0FmZmluZV9NYXNrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG0wMCAhPSAxLiB8fCBtMTEgIT0gMS4pIHsKLSAgICAgICAgICAgIG1hc2sgfD0ga1NjYWxlX01hc2s7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKG1hc2sgJiBrUGVyc3BlY3RpdmVfTWFzaykgPT0gMCkgewotICAgICAgICAgICAgLy8gbWFwIG5vbi16ZXJvIHRvIDEKLSAgICAgICAgICAgIGludCBpbTAwID0gbTAwICE9IDAgPyAxIDogMDsKLSAgICAgICAgICAgIGludCBpbTAxID0gbTAxICE9IDAgPyAxIDogMDsKLSAgICAgICAgICAgIGludCBpbTEwID0gbTEwICE9IDAgPyAxIDogMDsKLSAgICAgICAgICAgIGludCBpbTExID0gbTExICE9IDAgPyAxIDogMDsKLQotICAgICAgICAgICAgLy8gcmVjb3JkIGlmIHRoZSAocClyaW1hcnkgYW5kIChzKWVjb25kYXJ5IGRpYWdvbmFscyBhcmUgYWxsIDAgb3IKLSAgICAgICAgICAgIC8vIGFsbCBub24temVybyAoYW5zd2VyIGlzIDAgb3IgMSkKLSAgICAgICAgICAgIGludCBkcDAgPSAoaW0wMCB8IGltMTEpIF4gMTsgIC8vIHRydWUgaWYgYm90aCBhcmUgMAotICAgICAgICAgICAgaW50IGRwMSA9IGltMDAgJiBpbTExOyAgICAgICAgLy8gdHJ1ZSBpZiBib3RoIGFyZSAxCi0gICAgICAgICAgICBpbnQgZHMwID0gKGltMDEgfCBpbTEwKSBeIDE7ICAvLyB0cnVlIGlmIGJvdGggYXJlIDAKLSAgICAgICAgICAgIGludCBkczEgPSBpbTAxICYgaW0xMDsgICAgICAgIC8vIHRydWUgaWYgYm90aCBhcmUgMQotCi0gICAgICAgICAgICAvLyByZXR1cm4gMSBpZiBwcmltYXJ5IGlzIDEgYW5kIHNlY29uZGFyeSBpcyAwIG9yCi0gICAgICAgICAgICAvLyBwcmltYXJ5IGlzIDAgYW5kIHNlY29uZGFyeSBpcyAxCi0gICAgICAgICAgICBtYXNrIHw9ICgoZHAwICYgZHMxKSB8IChkcDEgJiBkczApKSA8PCBrUmVjdFN0YXlzUmVjdF9TaGlmdDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtYXNrOwotICAgIH0KLQotICAgIHByaXZhdGUgTWF0cml4X0RlbGVnYXRlKCkgewotICAgICAgICByZXNldCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgTWF0cml4X0RlbGVnYXRlKGZsb2F0W10gdmFsdWVzKSB7Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkodmFsdWVzLCAwLCBtVmFsdWVzLCAwLCBNQVRSSVhfU0laRSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkcyB0aGUgZ2l2ZW4gdHJhbnNmb3JtYXRpb24gdG8gdGhlIGN1cnJlbnQgTWF0cml4Ci0gICAgICogPHAvPlRoaXMgaW4gZWZmZWN0IGRvZXMgdGhpcyA9IHRoaXMqbWF0cml4Ci0gICAgICogQHBhcmFtIG1hdHJpeAotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBwb3N0VHJhbnNmb3JtKGZsb2F0W10gbWF0cml4KSB7Ci0gICAgICAgIGZsb2F0W10gdG1wID0gbmV3IGZsb2F0WzldOwotICAgICAgICBtdWx0aXBseSh0bXAsIG1WYWx1ZXMsIG1hdHJpeCk7Ci0gICAgICAgIG1WYWx1ZXMgPSB0bXA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkcyB0aGUgZ2l2ZW4gdHJhbnNmb3JtYXRpb24gdG8gdGhlIGN1cnJlbnQgTWF0cml4Ci0gICAgICogPHAvPlRoaXMgaW4gZWZmZWN0IGRvZXMgdGhpcyA9IG1hdHJpeCp0aGlzCi0gICAgICogQHBhcmFtIG1hdHJpeAotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBwcmVUcmFuc2Zvcm0oZmxvYXRbXSBtYXRyaXgpIHsKLSAgICAgICAgZmxvYXRbXSB0bXAgPSBuZXcgZmxvYXRbOV07Ci0gICAgICAgIG11bHRpcGx5KHRtcCwgbWF0cml4LCBtVmFsdWVzKTsKLSAgICAgICAgbVZhbHVlcyA9IHRtcDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBcHBseSB0aGlzIG1hdHJpeCB0byB0aGUgYXJyYXkgb2YgMkQgcG9pbnRzIHNwZWNpZmllZCBieSBzcmMsIGFuZCB3cml0ZQotICAgICAgKiB0aGUgdHJhbnNmb3JtZWQgcG9pbnRzIGludG8gdGhlIGFycmF5IG9mIHBvaW50cyBzcGVjaWZpZWQgYnkgZHN0LiBUaGUKLSAgICAgICogdHdvIGFycmF5cyByZXByZXNlbnQgdGhlaXIgInBvaW50cyIgYXMgcGFpcnMgb2YgZmxvYXRzIFt4LCB5XS4KLSAgICAgICoKLSAgICAgICogQHBhcmFtIGRzdCAgIFRoZSBhcnJheSBvZiBkc3QgcG9pbnRzICh4LHkgcGFpcnMpCi0gICAgICAqIEBwYXJhbSBkc3RJbmRleCBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IFt4LHldIHBhaXIgb2YgZHN0IGZsb2F0cwotICAgICAgKiBAcGFyYW0gc3JjICAgVGhlIGFycmF5IG9mIHNyYyBwb2ludHMgKHgseSBwYWlycykKLSAgICAgICogQHBhcmFtIHNyY0luZGV4IFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgW3gseV0gcGFpciBvZiBzcmMgZmxvYXRzCi0gICAgICAqIEBwYXJhbSBwb2ludENvdW50IFRoZSBudW1iZXIgb2YgcG9pbnRzICh4LHkgcGFpcnMpIHRvIHRyYW5zZm9ybQotICAgICAgKi8KLQotICAgICBwcml2YXRlIHZvaWQgbWFwUG9pbnRzKGZsb2F0W10gZHN0LCBpbnQgZHN0SW5kZXgsIGZsb2F0W10gc3JjLCBpbnQgc3JjSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9pbnRDb3VudCkgewotICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gcG9pbnRDb3VudCAqIDI7Ci0KLSAgICAgICAgIGZsb2F0W10gdG1wRGVzdCA9IGRzdDsKLSAgICAgICAgIGJvb2xlYW4gaW5QbGFjZSA9IGRzdCA9PSBzcmM7Ci0gICAgICAgICBpZiAoaW5QbGFjZSkgewotICAgICAgICAgICAgIHRtcERlc3QgPSBuZXcgZmxvYXRbZHN0SW5kZXggKyBjb3VudF07Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGNvdW50IDsgaSArPSAyKSB7Ci0gICAgICAgICAgICAgLy8ganVzdCBpbiBjYXNlIHdlIGFyZSBkb2luZyBpbiBwbGFjZSwgd2UgYmV0dGVyIHB1dCB0aGlzIGluIHRlbXAgdmFycwotICAgICAgICAgICAgIGZsb2F0IHggPSBtVmFsdWVzWzBdICogc3JjW2kgKyBzcmNJbmRleF0gKwotICAgICAgICAgICAgICAgICAgICAgICBtVmFsdWVzWzFdICogc3JjW2kgKyBzcmNJbmRleCArIDFdICsKLSAgICAgICAgICAgICAgICAgICAgICAgbVZhbHVlc1syXTsKLSAgICAgICAgICAgICBmbG9hdCB5ID0gbVZhbHVlc1szXSAqIHNyY1tpICsgc3JjSW5kZXhdICsKLSAgICAgICAgICAgICAgICAgICAgICAgbVZhbHVlc1s0XSAqIHNyY1tpICsgc3JjSW5kZXggKyAxXSArCi0gICAgICAgICAgICAgICAgICAgICAgIG1WYWx1ZXNbNV07Ci0KLSAgICAgICAgICAgICB0bXBEZXN0W2kgKyBkc3RJbmRleF0gICAgID0geDsKLSAgICAgICAgICAgICB0bXBEZXN0W2kgKyBkc3RJbmRleCArIDFdID0geTsKLSAgICAgICAgIH0KLQotICAgICAgICAgaWYgKGluUGxhY2UpIHsKLSAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHRtcERlc3QsIGRzdEluZGV4LCBkc3QsIGRzdEluZGV4LCBjb3VudCk7Ci0gICAgICAgICB9Ci0gICAgIH0KLQotICAgICAvKioKLSAgICAgICogQXBwbHkgdGhpcyBtYXRyaXggdG8gdGhlIGFycmF5IG9mIDJEIHBvaW50cywgYW5kIHdyaXRlIHRoZSB0cmFuc2Zvcm1lZAotICAgICAgKiBwb2ludHMgYmFjayBpbnRvIHRoZSBhcnJheQotICAgICAgKgotICAgICAgKiBAcGFyYW0gcHRzIFRoZSBhcnJheSBbeDAsIHkwLCB4MSwgeTEsIC4uLl0gb2YgcG9pbnRzIHRvIHRyYW5zZm9ybS4KLSAgICAgICovCi0KLSAgICAgcHJpdmF0ZSB2b2lkIG1hcFBvaW50cyhmbG9hdFtdIHB0cykgewotICAgICAgICAgbWFwUG9pbnRzKHB0cywgMCwgcHRzLCAwLCBwdHMubGVuZ3RoID4+IDEpOwotICAgICB9Ci0KLSAgICAgcHJpdmF0ZSB2b2lkIG1hcFZlY3RvcnMoZmxvYXRbXSBkc3QsIGludCBkc3RJbmRleCwgZmxvYXRbXSBzcmMsIGludCBzcmNJbmRleCwgaW50IHB0Q291bnQpIHsKLSAgICAgICAgIGlmIChoYXNQZXJzcGVjdGl2ZSgpKSB7Ci0gICAgICAgICAgICAgLy8gdHJhbnNmb3JtIHRoZSAoMCwwKSBwb2ludAotICAgICAgICAgICAgIGZsb2F0W10gb3JpZ2luID0gbmV3IGZsb2F0W10geyAwLmYsIDAuZn07Ci0gICAgICAgICAgICAgbWFwUG9pbnRzKG9yaWdpbik7Ci0KLSAgICAgICAgICAgICAvLyB0cmFuc2xhdGUgdGhlIHZlY3RvciBkYXRhIGFzIHBvaW50cwotICAgICAgICAgICAgIG1hcFBvaW50cyhkc3QsIGRzdEluZGV4LCBzcmMsIHNyY0luZGV4LCBwdENvdW50KTsKLQotICAgICAgICAgICAgIC8vIHRoZW4gc3Vic3RyYWN0IHRoZSB0cmFuc2Zvcm1lZCBvcmlnaW4uCi0gICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gcHRDb3VudCAqIDI7Ci0gICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgY291bnQgOyBpICs9IDIpIHsKLSAgICAgICAgICAgICAgICAgZHN0W2RzdEluZGV4ICsgaV0gPSBkc3RbZHN0SW5kZXggKyBpXSAtIG9yaWdpblswXTsKLSAgICAgICAgICAgICAgICAgZHN0W2RzdEluZGV4ICsgaSArIDFdID0gZHN0W2RzdEluZGV4ICsgaSArIDFdIC0gb3JpZ2luWzFdOwotICAgICAgICAgICAgIH0KLSAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgLy8gbWFrZSBhIGNvcHkgb2YgdGhlIG1hdHJpeAotICAgICAgICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBjb3B5ID0gbmV3IE1hdHJpeF9EZWxlZ2F0ZShtVmFsdWVzKTsKLQotICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgdHJhbnNsYXRpb24KLSAgICAgICAgICAgICBzZXRUcmFuc2xhdGUoY29weS5tVmFsdWVzLCAwLCAwKTsKLQotICAgICAgICAgICAgIC8vIG1hcCB0aGUgY29udGVudCBhcyBwb2ludHMuCi0gICAgICAgICAgICAgY29weS5tYXBQb2ludHMoZHN0LCBkc3RJbmRleCwgc3JjLCBzcmNJbmRleCwgcHRDb3VudCk7Ci0gICAgICAgICB9Ci0gICAgIH0KLQotICAgICBwcml2YXRlIHN0YXRpYyBmbG9hdCBnZXRQb2ludExlbmd0aChmbG9hdFtdIHNyYywgaW50IGluZGV4KSB7Ci0gICAgICAgICByZXR1cm4gKGZsb2F0KSBNYXRoLnNxcnQoc3JjW2luZGV4XSAqIHNyY1tpbmRleF0gKyBzcmNbaW5kZXggKyAxXSAqIHNyY1tpbmRleCArIDFdKTsKLSAgICAgfQotCi0gICAgLyoqCi0gICAgICogbXVsdGlwbHkgdHdvIG1hdHJpY2VzIGFuZCBzdG9yZSB0aGVtIGluIGEgM3JkLgotICAgICAqIDxwLz5UaGlzIGluIGVmZmVjdCBkb2VzIGRlc3QgPSBhKmIKLSAgICAgKiBkZXN0IGNhbm5vdCBiZSB0aGUgc2FtZSBhcyBhIG9yIGIuCi0gICAgICovCi0gICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG11bHRpcGx5KGZsb2F0IGRlc3RbXSwgZmxvYXRbXSBhLCBmbG9hdFtdIGIpIHsKLSAgICAgICAgLy8gZmlyc3Qgcm93Ci0gICAgICAgIGRlc3RbMF0gPSBiWzBdICogYVswXSArIGJbMV0gKiBhWzNdICsgYlsyXSAqIGFbNl07Ci0gICAgICAgIGRlc3RbMV0gPSBiWzBdICogYVsxXSArIGJbMV0gKiBhWzRdICsgYlsyXSAqIGFbN107Ci0gICAgICAgIGRlc3RbMl0gPSBiWzBdICogYVsyXSArIGJbMV0gKiBhWzVdICsgYlsyXSAqIGFbOF07Ci0KLSAgICAgICAgLy8gMm5kIHJvdwotICAgICAgICBkZXN0WzNdID0gYlszXSAqIGFbMF0gKyBiWzRdICogYVszXSArIGJbNV0gKiBhWzZdOwotICAgICAgICBkZXN0WzRdID0gYlszXSAqIGFbMV0gKyBiWzRdICogYVs0XSArIGJbNV0gKiBhWzddOwotICAgICAgICBkZXN0WzVdID0gYlszXSAqIGFbMl0gKyBiWzRdICogYVs1XSArIGJbNV0gKiBhWzhdOwotCi0gICAgICAgIC8vIDNyZCByb3cKLSAgICAgICAgZGVzdFs2XSA9IGJbNl0gKiBhWzBdICsgYls3XSAqIGFbM10gKyBiWzhdICogYVs2XTsKLSAgICAgICAgZGVzdFs3XSA9IGJbNl0gKiBhWzFdICsgYls3XSAqIGFbNF0gKyBiWzhdICogYVs3XTsKLSAgICAgICAgZGVzdFs4XSA9IGJbNl0gKiBhWzJdICsgYls3XSAqIGFbNV0gKyBiWzhdICogYVs4XTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWF0cml4IHRoYXQgcmVwcmVzZW50cyBhIGdpdmVuIHRyYW5zbGF0ZQotICAgICAqIEBwYXJhbSBkeAotICAgICAqIEBwYXJhbSBkeQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXRbXSBnZXRUcmFuc2xhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIHJldHVybiBzZXRUcmFuc2xhdGUobmV3IGZsb2F0WzldLCBkeCwgZHkpOwotICAgIH0KLQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdFtdIHNldFRyYW5zbGF0ZShmbG9hdFtdIGRlc3QsIGZsb2F0IGR4LCBmbG9hdCBkeSkgewotICAgICAgICBkZXN0WzBdID0gMTsKLSAgICAgICAgZGVzdFsxXSA9IDA7Ci0gICAgICAgIGRlc3RbMl0gPSBkeDsKLSAgICAgICAgZGVzdFszXSA9IDA7Ci0gICAgICAgIGRlc3RbNF0gPSAxOwotICAgICAgICBkZXN0WzVdID0gZHk7Ci0gICAgICAgIGRlc3RbNl0gPSAwOwotICAgICAgICBkZXN0WzddID0gMDsKLSAgICAgICAgZGVzdFs4XSA9IDE7Ci0gICAgICAgIHJldHVybiBkZXN0OwotICAgIH0KLQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdFtdIGdldFNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkgewotICAgICAgICByZXR1cm4gbmV3IGZsb2F0W10geyBzeCwgMCwgMCwgMCwgc3ksIDAsIDAsIDAsIDEgfTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWF0cml4IHRoYXQgcmVwcmVzZW50cyB0aGUgZ2l2ZW4gc2NhbGUgaW5mby4KLSAgICAgKiBAcGFyYW0gc3gKLSAgICAgKiBAcGFyYW0gc3kKLSAgICAgKiBAcGFyYW0gcHgKLSAgICAgKiBAcGFyYW0gcHkKLSAgICAgKi8KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXRbXSBnZXRTY2FsZShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHB4LCBmbG9hdCBweSkgewotICAgICAgICBmbG9hdFtdIHRtcCA9IG5ldyBmbG9hdFs5XTsKLSAgICAgICAgZmxvYXRbXSB0bXAyID0gbmV3IGZsb2F0WzldOwotCi0gICAgICAgIC8vIFRPRE86IGRvIGl0IGluIG9uZSBwYXNzCi0KLSAgICAgICAgLy8gdHJhbnNsYXRlIHRtcCBzbyB0aGF0IHRoZSBwaXZvdCBpcyBpbiAwLDAKLSAgICAgICAgc2V0VHJhbnNsYXRlKHRtcCwgLXB4LCAtcHkpOwotCi0gICAgICAgIC8vIHNjYWxlIGludG8gdG1wMgotICAgICAgICBtdWx0aXBseSh0bXAyLCB0bXAsIGdldFNjYWxlKHN4LCBzeSkpOwotCi0gICAgICAgIC8vIHRyYW5zbGF0ZSBiYWNrIHRoZSBwaXZvdCBiYWNrIGludG8gdG1wCi0gICAgICAgIG11bHRpcGx5KHRtcCwgdG1wMiwgZ2V0VHJhbnNsYXRlKHB4LCBweSkpOwotCi0gICAgICAgIHJldHVybiB0bXA7Ci0gICAgfQotCi0KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXRbXSBnZXRSb3RhdGUoZmxvYXQgZGVncmVlcykgewotICAgICAgICBkb3VibGUgcmFkID0gTWF0aC50b1JhZGlhbnMoZGVncmVlcyk7Ci0gICAgICAgIGZsb2F0IHNpbiA9IChmbG9hdClNYXRoLnNpbihyYWQpOwotICAgICAgICBmbG9hdCBjb3MgPSAoZmxvYXQpTWF0aC5jb3MocmFkKTsKLQotICAgICAgICByZXR1cm4gZ2V0Um90YXRlKHNpbiwgY29zKTsKLSAgICB9Ci0KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXRbXSBnZXRSb3RhdGUoZmxvYXQgc2luLCBmbG9hdCBjb3MpIHsKLSAgICAgICAgcmV0dXJuIHNldFJvdGF0ZShuZXcgZmxvYXRbOV0sIHNpbiwgY29zKTsKLSAgICB9Ci0KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXRbXSBzZXRSb3RhdGUoZmxvYXRbXSBkZXN0LCBmbG9hdCBkZWdyZWVzKSB7Ci0gICAgICAgIGRvdWJsZSByYWQgPSBNYXRoLnRvUmFkaWFucyhkZWdyZWVzKTsKLSAgICAgICAgZmxvYXQgc2luID0gKGZsb2F0KU1hdGguc2luKHJhZCk7Ci0gICAgICAgIGZsb2F0IGNvcyA9IChmbG9hdClNYXRoLmNvcyhyYWQpOwotCi0gICAgICAgIHJldHVybiBzZXRSb3RhdGUoZGVzdCwgc2luLCBjb3MpOwotICAgIH0KLQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdFtdIHNldFJvdGF0ZShmbG9hdFtdIGRlc3QsIGZsb2F0IHNpbiwgZmxvYXQgY29zKSB7Ci0gICAgICAgIGRlc3RbMF0gPSBjb3M7Ci0gICAgICAgIGRlc3RbMV0gPSAtc2luOwotICAgICAgICBkZXN0WzJdID0gMDsKLSAgICAgICAgZGVzdFszXSA9IHNpbjsKLSAgICAgICAgZGVzdFs0XSA9IGNvczsKLSAgICAgICAgZGVzdFs1XSA9IDA7Ci0gICAgICAgIGRlc3RbNl0gPSAwOwotICAgICAgICBkZXN0WzddID0gMDsKLSAgICAgICAgZGVzdFs4XSA9IDE7Ci0gICAgICAgIHJldHVybiBkZXN0OwotICAgIH0KLQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdFtdIGdldFJvdGF0ZShmbG9hdCBkZWdyZWVzLCBmbG9hdCBweCwgZmxvYXQgcHkpIHsKLSAgICAgICAgZmxvYXRbXSB0bXAgPSBuZXcgZmxvYXRbOV07Ci0gICAgICAgIGZsb2F0W10gdG1wMiA9IG5ldyBmbG9hdFs5XTsKLQotICAgICAgICAvLyBUT0RPOiBkbyBpdCBpbiBvbmUgcGFzcwotCi0gICAgICAgIC8vIHRyYW5zbGF0ZSBzbyB0aGF0IHRoZSBwaXZvdCBpcyBpbiAwLDAKLSAgICAgICAgc2V0VHJhbnNsYXRlKHRtcCwgLXB4LCAtcHkpOwotCi0gICAgICAgIC8vIHJvdGF0ZSBpbnRvIHRtcDIKLSAgICAgICAgZG91YmxlIHJhZCA9IE1hdGgudG9SYWRpYW5zKGRlZ3JlZXMpOwotICAgICAgICBmbG9hdCBjb3MgPSAoZmxvYXQpTWF0aC5jb3MocmFkKTsKLSAgICAgICAgZmxvYXQgc2luID0gKGZsb2F0KU1hdGguc2luKHJhZCk7Ci0gICAgICAgIG11bHRpcGx5KHRtcDIsIHRtcCwgZ2V0Um90YXRlKHNpbiwgY29zKSk7Ci0KLSAgICAgICAgLy8gdHJhbnNsYXRlIGJhY2sgdGhlIHBpdm90IGJhY2sgaW50byB0bXAKLSAgICAgICAgbXVsdGlwbHkodG1wLCB0bXAyLCBnZXRUcmFuc2xhdGUocHgsIHB5KSk7Ci0KLSAgICAgICAgcmV0dXJuIHRtcDsKLSAgICB9Ci0KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXRbXSBnZXRTa2V3KGZsb2F0IGt4LCBmbG9hdCBreSkgewotICAgICAgICByZXR1cm4gbmV3IGZsb2F0W10geyAxLCBreCwgMCwga3ksIDEsIDAsIDAsIDAsIDEgfTsKLSAgICB9Ci0KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXRbXSBnZXRTa2V3KGZsb2F0IGt4LCBmbG9hdCBreSwgZmxvYXQgcHgsIGZsb2F0IHB5KSB7Ci0gICAgICAgIGZsb2F0W10gdG1wID0gbmV3IGZsb2F0WzldOwotICAgICAgICBmbG9hdFtdIHRtcDIgPSBuZXcgZmxvYXRbOV07Ci0KLSAgICAgICAgLy8gVE9ETzogZG8gaXQgaW4gb25lIHBhc3MKLQotICAgICAgICAvLyB0cmFuc2xhdGUgc28gdGhhdCB0aGUgcGl2b3QgaXMgaW4gMCwwCi0gICAgICAgIHNldFRyYW5zbGF0ZSh0bXAsIC1weCwgLXB5KTsKLQotICAgICAgICAvLyBza2V3IGludG8gdG1wMgotICAgICAgICBtdWx0aXBseSh0bXAyLCB0bXAsIG5ldyBmbG9hdFtdIHsgMSwga3gsIDAsIGt5LCAxLCAwLCAwLCAwLCAxIH0pOwotICAgICAgICAvLyB0cmFuc2xhdGUgYmFjayB0aGUgcGl2b3QgYmFjayBpbnRvIHRtcAotICAgICAgICBtdWx0aXBseSh0bXAsIHRtcDIsIGdldFRyYW5zbGF0ZShweCwgcHkpKTsKLQotICAgICAgICByZXR1cm4gdG1wOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTmluZVBhdGNoX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTEzNDYzMC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkdjU25hcHNob3Q7Ci1pbXBvcnQgY29tLmFuZHJvaWQubmluZXBhdGNoLk5pbmVQYXRjaENodW5rOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuTmluZVBhdGNoRHJhd2FibGU7Ci0KLWltcG9ydCBqYXZhLmF3dC5HcmFwaGljczJEOwotaW1wb3J0IGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2U7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PYmplY3RPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5sYW5nLnJlZi5Tb2Z0UmVmZXJlbmNlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLk5pbmVQYXRjaAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIE5pbmVQYXRjaCBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIEJlY2F1c2UgaXQncyBhIHN0YXRlbGVzcyBjbGFzcyB0byBzdGFydCB3aXRoLCB0aGVyZSdzIG5vIG5lZWQgdG8ga2VlcCBhIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9Ci0gKiBhcm91bmQgdG8gbWFwIGludCB0byBpbnN0YW5jZSBvZiB0aGUgZGVsZWdhdGUuCi0gKgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgTmluZVBhdGNoX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPE5pbmVQYXRjaF9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxOaW5lUGF0Y2hfRGVsZWdhdGU+KE5pbmVQYXRjaF9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGhlbHBlciBkYXRhIC0tLS0KLSAgICAvKioKLSAgICAgKiBDYWNoZSBtYXAgZm9yIHtAbGluayBOaW5lUGF0Y2hDaHVua30uCi0gICAgICogV2hlbiB0aGUgY2h1bmtzIGFyZSBjcmVhdGVkIHRoZXkgYXJlIHNlcmlhbGl6ZWQgaW50byBhIGJ5dGVbXSwgYW5kIGJvdGggYXJlIHB1dAotICAgICAqIGluIHRoZSBjYWNoZSwgdXNpbmcgYSB7QGxpbmsgU29mdFJlZmVyZW5jZX0gZm9yIHRoZSBjaHVuay4gVGhlIGRlZmF1bHQgSmF2YSBjbGFzc2VzCi0gICAgICogZm9yIHtAbGluayBOaW5lUGF0Y2h9IGFuZCB7QGxpbmsgTmluZVBhdGNoRHJhd2FibGV9IG9ubHkgcmVmZXJlbmNlIHRvIHRoZSBieXRlW10gZGF0YSwgYW5kCi0gICAgICogcHJvdmlkZSB0aGlzIGZvciBkcmF3aW5nLgotICAgICAqIFVzaW5nIHRoZSBjYWNoZSBtYXAgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGRlc2VyaWFsaXplIHRoZSBieXRlW10gYmFjayBpbnRvIGEKLSAgICAgKiB7QGxpbmsgTmluZVBhdGNoQ2h1bmt9IGV2ZXJ5IHRpbWUgYSByZW5kZXJpbmcgaXMgZG9uZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8Ynl0ZVtdLCBTb2Z0UmVmZXJlbmNlPE5pbmVQYXRjaENodW5rPj4gc0NodW5rQ2FjaGUgPQotICAgICAgICBuZXcgSGFzaE1hcDxieXRlW10sIFNvZnRSZWZlcmVuY2U8TmluZVBhdGNoQ2h1bms+PigpOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLSAgICBwcml2YXRlIGJ5dGVbXSBjaHVuazsKLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgLyoqCi0gICAgICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gY2h1bmsuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBzZXJpYWxpemVkIGRhdGEgZm9yIHRoZSBjaHVuay4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJ5dGVbXSBzZXJpYWxpemUoTmluZVBhdGNoQ2h1bmsgY2h1bmspIHsKLSAgICAgICAgLy8gc2VyaWFsaXplIHRoZSBjaHVuayB0byBnZXQgYSBieXRlW10KLSAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBvb3MgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgb29zID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbShiYW9zKTsKLSAgICAgICAgICAgIG9vcy53cml0ZU9iamVjdChjaHVuayk7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihudWxsLCAiRmFpbGVkIHRvIHNlcmlhbGl6ZSBOaW5lUGF0Y2hDaHVuay4iLCBlLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgaWYgKG9vcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgb29zLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgYXJyYXkgYW5kIGFkZCBpdCB0byB0aGUgY2FjaGUKLSAgICAgICAgYnl0ZVtdIGFycmF5ID0gYmFvcy50b0J5dGVBcnJheSgpOwotICAgICAgICBzQ2h1bmtDYWNoZS5wdXQoYXJyYXksIG5ldyBTb2Z0UmVmZXJlbmNlPE5pbmVQYXRjaENodW5rPihjaHVuaykpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHtAbGluayBOaW5lUGF0Y2hDaHVua30gb2JqZWN0IGZvciB0aGUgZ2l2ZW4gc2VyaWFsaXplZCByZXByZXNlbnRhdGlvbi4KLSAgICAgKgotICAgICAqIElmIHRoZSBjaHVuayBpcyBwcmVzZW50IGluIHRoZSBjYWNoZSB0aGVuIHRoZSBvYmplY3QgZnJvbSB0aGUgY2FjaGUgaXMgcmV0dXJuZWQsIG90aGVyd2lzZQotICAgICAqIHRoZSBhcnJheSBpcyBkZXNlcmlhbGl6ZWQgaW50byBhIHtAbGluayBOaW5lUGF0Y2hDaHVua30gb2JqZWN0LgotICAgICAqCi0gICAgICogQHBhcmFtIGFycmF5IHRoZSBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjaHVuay4KLSAgICAgKiBAcmV0dXJuIHRoZSBOaW5lUGF0Y2hDaHVuayBvciBudWxsIGlmIGRlc2VyaWFsaXphdGlvbiBmYWlsZWQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBOaW5lUGF0Y2hDaHVuayBnZXRDaHVuayhieXRlW10gYXJyYXkpIHsKLSAgICAgICAgU29mdFJlZmVyZW5jZTxOaW5lUGF0Y2hDaHVuaz4gY2h1bmtSZWYgPSBzQ2h1bmtDYWNoZS5nZXQoYXJyYXkpOwotICAgICAgICBOaW5lUGF0Y2hDaHVuayBjaHVuayA9IGNodW5rUmVmLmdldCgpOwotICAgICAgICBpZiAoY2h1bmsgPT0gbnVsbCkgewotICAgICAgICAgICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmFpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShhcnJheSk7Ci0gICAgICAgICAgICBPYmplY3RJbnB1dFN0cmVhbSBvaXMgPSBudWxsOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBvaXMgPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oYmFpcyk7Ci0gICAgICAgICAgICAgICAgY2h1bmsgPSAoTmluZVBhdGNoQ2h1bmspIG9pcy5yZWFkT2JqZWN0KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBwdXQgYmFjayB0aGUgY2h1bmsgaW4gdGhlIGNhY2hlCi0gICAgICAgICAgICAgICAgaWYgKGNodW5rICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc0NodW5rQ2FjaGUucHV0KGFycmF5LCBuZXcgU29mdFJlZmVyZW5jZTxOaW5lUGF0Y2hDaHVuaz4oY2h1bmspKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBkZXNlcmlhbGl6ZSBOaW5lUGF0Y2hDaHVuayBjb250ZW50LiIsIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBkZXNlcmlhbGl6ZSBOaW5lUGF0Y2hDaHVuayBjbGFzcy4iLCBlLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9pcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvaXMuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNodW5rOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gaXNOaW5lUGF0Y2hDaHVuayhieXRlW10gY2h1bmspIHsKLSAgICAgICAgTmluZVBhdGNoQ2h1bmsgY2h1bmtPYmplY3QgPSBnZXRDaHVuayhjaHVuayk7Ci0gICAgICAgIGlmIChjaHVua09iamVjdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IHZhbGlkYXRlTmluZVBhdGNoQ2h1bmsoaW50IGJpdG1hcCwgYnl0ZVtdIGNodW5rKSB7Ci0gICAgICAgIC8vIHRoZSBkZWZhdWx0IEpOSSBpbXBsZW1lbnRhdGlvbiBvbmx5IGNoZWNrcyB0aGF0IHRoZSBieXRlW10gaGFzIHRoZSBzYW1lCi0gICAgICAgIC8vIHNpemUgYXMgdGhlIEMgc3RydWN0IGl0IHJlcHJlc2VudC4gU2luY2Ugd2UgY2Fubm90IGRvIHRoZSBzYW1lIGNoZWNrIChzZXJpYWxpemF0aW9uCi0gICAgICAgIC8vIHdpbGwgcmV0dXJuIGRpZmZlcmVudCBzaXplIGRlcGVuZGluZyBvbiBjb250ZW50KSwgd2UgZG8gbm90aGluZy4KLSAgICAgICAgTmluZVBhdGNoX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IE5pbmVQYXRjaF9EZWxlZ2F0ZSgpOwotICAgICAgICBuZXdEZWxlZ2F0ZS5jaHVuayA9IGNodW5rOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZUZpbmFsaXplKGludCBjaHVuaykgewotICAgICAgICBzTWFuYWdlci5yZW1vdmVKYXZhUmVmZXJlbmNlRm9yKGNodW5rKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVEcmF3KGludCBjYW52YXNfaW5zdGFuY2UsIFJlY3RGIGxvYywgaW50IGJpdG1hcF9pbnN0YW5jZSwKLSAgICAgICAgICAgIGludCBjaHVuaywgaW50IHBhaW50X2luc3RhbmNlX29yX251bGwsIGludCBkZXN0RGVuc2l0eSwgaW50IHNyY0RlbnNpdHkpIHsKLSAgICAgICAgZHJhdyhjYW52YXNfaW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgKGludCkgbG9jLmxlZnQsIChpbnQpIGxvYy50b3AsIChpbnQpIGxvYy53aWR0aCgpLCAoaW50KSBsb2MuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgYml0bWFwX2luc3RhbmNlLCBjaHVuaywgcGFpbnRfaW5zdGFuY2Vfb3JfbnVsbCwKLSAgICAgICAgICAgICAgICBkZXN0RGVuc2l0eSwgc3JjRGVuc2l0eSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlRHJhdyhpbnQgY2FudmFzX2luc3RhbmNlLCBSZWN0IGxvYywgaW50IGJpdG1hcF9pbnN0YW5jZSwKLSAgICAgICAgICAgIGludCBjaHVuaywgaW50IHBhaW50X2luc3RhbmNlX29yX251bGwsIGludCBkZXN0RGVuc2l0eSwgaW50IHNyY0RlbnNpdHkpIHsKLSAgICAgICAgZHJhdyhjYW52YXNfaW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgbG9jLmxlZnQsIGxvYy50b3AsIGxvYy53aWR0aCgpLCBsb2MuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgYml0bWFwX2luc3RhbmNlLCBjaHVuaywgcGFpbnRfaW5zdGFuY2Vfb3JfbnVsbCwKLSAgICAgICAgICAgICAgICBkZXN0RGVuc2l0eSwgc3JjRGVuc2l0eSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVHZXRUcmFuc3BhcmVudFJlZ2lvbihpbnQgYml0bWFwLCBpbnQgY2h1bmssIFJlY3QgbG9jYXRpb24pIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZHJhdyhpbnQgY2FudmFzX2luc3RhbmNlLAotICAgICAgICAgICAgZmluYWwgaW50IGxlZnQsIGZpbmFsIGludCB0b3AsIGZpbmFsIGludCByaWdodCwgZmluYWwgaW50IGJvdHRvbSwKLSAgICAgICAgICAgIGludCBiaXRtYXBfaW5zdGFuY2UsIGludCBjaHVuaywgaW50IHBhaW50X2luc3RhbmNlX29yX251bGwsCi0gICAgICAgICAgICBmaW5hbCBpbnQgZGVzdERlbnNpdHksIGZpbmFsIGludCBzcmNEZW5zaXR5KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgZmluYWwgQml0bWFwX0RlbGVnYXRlIGJpdG1hcF9kZWxlZ2F0ZSA9IEJpdG1hcF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShiaXRtYXBfaW5zdGFuY2UpOwotICAgICAgICBpZiAoYml0bWFwX2RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGJ5dGVbXSBjID0gbnVsbDsKLSAgICAgICAgTmluZVBhdGNoX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoY2h1bmspOwotICAgICAgICBpZiAoZGVsZWdhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgYyA9IGRlbGVnYXRlLmNodW5rOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIG5vdCBhIDktcGF0Y2g/Ci0gICAgICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gYml0bWFwX2RlbGVnYXRlLmdldEltYWdlKCk7Ci0gICAgICAgICAgICBDYW52YXNfRGVsZWdhdGUubmF0aXZlX2RyYXdCaXRtYXAoY2FudmFzX2luc3RhbmNlLCBiaXRtYXBfaW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgIG5ldyBSZWN0KDAsIDAsIGltYWdlLmdldFdpZHRoKCksIGltYWdlLmdldEhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbmV3IFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSwKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRfaW5zdGFuY2Vfb3JfbnVsbCwgZGVzdERlbnNpdHksIHNyY0RlbnNpdHkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgTmluZVBhdGNoQ2h1bmsgY2h1bmtPYmplY3QgPSBnZXRDaHVuayhjKTsKLSAgICAgICAgYXNzZXJ0IGNodW5rT2JqZWN0ICE9IG51bGw7Ci0gICAgICAgIGlmIChjaHVua09iamVjdCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzX2RlbGVnYXRlID0gQ2FudmFzX0RlbGVnYXRlLmdldERlbGVnYXRlKGNhbnZhc19pbnN0YW5jZSk7Ci0gICAgICAgIGlmIChjYW52YXNfZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdGhpcyBvbmUgY2FuIGJlIG51bGwKLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgcGFpbnRfZGVsZWdhdGUgPSBQYWludF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShwYWludF9pbnN0YW5jZV9vcl9udWxsKTsKLQotICAgICAgICBjYW52YXNfZGVsZWdhdGUuZ2V0U25hcHNob3QoKS5kcmF3KG5ldyBHY1NuYXBzaG90LkRyYXdhYmxlKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2h1bmtPYmplY3QuZHJhdyhiaXRtYXBfZGVsZWdhdGUuZ2V0SW1hZ2UoKSwgZ3JhcGhpY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCwgZGVzdERlbnNpdHksIHNyY0RlbnNpdHkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIHBhaW50X2RlbGVnYXRlLCB0cnVlIC8qY29tcG9zaXRlT25seSovLCBmYWxzZSAvKmZvcmNlU3JjTW9kZSovKTsKLQotICAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BhaW50RmxhZ3NEcmF3RmlsdGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BhaW50RmxhZ3NEcmF3RmlsdGVyX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZDM0NmEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QYWludEZsYWdzRHJhd0ZpbHRlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5QYWludEZsYWdzRHJhd0ZpbHRlcgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFBhaW50RmxhZ3NEcmF3RmlsdGVyIGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFBhaW50RmxhZ3NEcmF3RmlsdGVyIGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBEcmF3RmlsdGVyX0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhCi0gKiB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfSwgYXMgYWxsIHRoZSBEcmF3RmlsdGVyIGNsYXNzZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuYWdlciBvd25lZCBieQotICoge0BsaW5rIERyYXdGaWx0ZXJfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgRHJhd0ZpbHRlcl9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIFBhaW50RmxhZ3NEcmF3RmlsdGVyX0RlbGVnYXRlIGV4dGVuZHMgRHJhd0ZpbHRlcl9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIlBhaW50IEZsYWdzIERyYXcgRmlsdGVycyBhcmUgbm90IHN1cHBvcnRlZC4iOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDb25zdHJ1Y3RvcihpbnQgY2xlYXJCaXRzLCBpbnQgc2V0Qml0cykgewotICAgICAgICBQYWludEZsYWdzRHJhd0ZpbHRlcl9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBQYWludEZsYWdzRHJhd0ZpbHRlcl9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BhaW50X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BhaW50X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxOTUzZWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QYWludF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQuRm9udE1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludC5Gb250TWV0cmljc0ludDsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotCi1pbXBvcnQgamF2YS5hd3QuQmFzaWNTdHJva2U7Ci1pbXBvcnQgamF2YS5hd3QuRm9udDsKLWltcG9ydCBqYXZhLmF3dC5TaGFwZTsKLWltcG9ydCBqYXZhLmF3dC5TdHJva2U7Ci1pbXBvcnQgamF2YS5hd3QuVG9vbGtpdDsKLWltcG9ydCBqYXZhLmF3dC5mb250LkZvbnRSZW5kZXJDb250ZXh0OwotaW1wb3J0IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlBhaW50Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgUGFpbnQgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgUGFpbnQgY2xhc3MuCi0gKgotICogQHNlZSBEZWxlZ2F0ZU1hbmFnZXIKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQYWludF9EZWxlZ2F0ZSB7Ci0KLSAgICAvKioKLSAgICAgKiBDbGFzcyBhc3NvY2lhdGluZyBhIHtAbGluayBGb250fSBhbmQgaXQncyB7QGxpbmsgamF2YS5hd3QuRm9udE1ldHJpY3N9LgotICAgICAqLwotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmaW5hbCBjbGFzcyBGb250SW5mbyB7Ci0gICAgICAgIEZvbnQgbUZvbnQ7Ci0gICAgICAgIGphdmEuYXd0LkZvbnRNZXRyaWNzIG1NZXRyaWNzOwotICAgIH0KLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPFBhaW50X0RlbGVnYXRlPiBzTWFuYWdlciA9Ci0gICAgICAgICAgICBuZXcgRGVsZWdhdGVNYW5hZ2VyPFBhaW50X0RlbGVnYXRlPihQYWludF9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGhlbHBlciBkYXRhIC0tLS0KLSAgICBwcml2YXRlIExpc3Q8Rm9udEluZm8+IG1Gb250czsKLSAgICBwcml2YXRlIGZpbmFsIEZvbnRSZW5kZXJDb250ZXh0IG1Gb250Q29udGV4dCA9IG5ldyBGb250UmVuZGVyQ29udGV4dCgKLSAgICAgICAgICAgIG5ldyBBZmZpbmVUcmFuc2Zvcm0oKSwgdHJ1ZSwgdHJ1ZSk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotICAgIHByaXZhdGUgaW50IG1GbGFnczsKLSAgICBwcml2YXRlIGludCBtQ29sb3I7Ci0gICAgcHJpdmF0ZSBpbnQgbVN0eWxlOwotICAgIHByaXZhdGUgaW50IG1DYXA7Ci0gICAgcHJpdmF0ZSBpbnQgbUpvaW47Ci0gICAgcHJpdmF0ZSBpbnQgbVRleHRBbGlnbjsKLSAgICBwcml2YXRlIFR5cGVmYWNlX0RlbGVnYXRlIG1UeXBlZmFjZTsKLSAgICBwcml2YXRlIGZsb2F0IG1TdHJva2VXaWR0aDsKLSAgICBwcml2YXRlIGZsb2F0IG1TdHJva2VNaXRlcjsKLSAgICBwcml2YXRlIGZsb2F0IG1UZXh0U2l6ZTsKLSAgICBwcml2YXRlIGZsb2F0IG1UZXh0U2NhbGVYOwotICAgIHByaXZhdGUgZmxvYXQgbVRleHRTa2V3WDsKLSAgICBwcml2YXRlIGludCBtSGludGluZ01vZGUgPSBQYWludC5ISU5USU5HX09OOwotCi0gICAgcHJpdmF0ZSBYZmVybW9kZV9EZWxlZ2F0ZSBtWGZlcm1vZGU7Ci0gICAgcHJpdmF0ZSBDb2xvckZpbHRlcl9EZWxlZ2F0ZSBtQ29sb3JGaWx0ZXI7Ci0gICAgcHJpdmF0ZSBTaGFkZXJfRGVsZWdhdGUgbVNoYWRlcjsKLSAgICBwcml2YXRlIFBhdGhFZmZlY3RfRGVsZWdhdGUgbVBhdGhFZmZlY3Q7Ci0gICAgcHJpdmF0ZSBNYXNrRmlsdGVyX0RlbGVnYXRlIG1NYXNrRmlsdGVyOwotICAgIHByaXZhdGUgUmFzdGVyaXplcl9EZWxlZ2F0ZSBtUmFzdGVyaXplcjsKLQotICAgIHByaXZhdGUgTG9jYWxlIG1Mb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOwotCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIFBhaW50X0RlbGVnYXRlIGdldERlbGVnYXRlKGludCBuYXRpdmVfcGFpbnQpIHsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9wYWludCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiB7QGxpbmsgRm9udH0gb2JqZWN0cy4gVGhlIGZpcnN0IGl0ZW0gaXMgdGhlIG1haW4gZm9udCwgdGhlIHJlc3QKLSAgICAgKiBhcmUgZmFsbCBiYWNrcyBmb3IgY2hhcmFjdGVycyBub3QgcHJlc2VudCBpbiB0aGUgbWFpbiBmb250LgotICAgICAqLwotICAgIHB1YmxpYyBMaXN0PEZvbnRJbmZvPiBnZXRGb250cygpIHsKLSAgICAgICAgcmV0dXJuIG1Gb250czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0FudGlBbGlhc2VkKCkgewotICAgICAgICByZXR1cm4gKG1GbGFncyAmIFBhaW50LkFOVElfQUxJQVNfRkxBRykgIT0gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0ZpbHRlckJpdG1hcCgpIHsKLSAgICAgICAgcmV0dXJuIChtRmxhZ3MgJiBQYWludC5GSUxURVJfQklUTUFQX0ZMQUcpICE9IDA7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRTdHlsZSgpIHsKLSAgICAgICAgcmV0dXJuIG1TdHlsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldENvbG9yKCkgewotICAgICAgICByZXR1cm4gbUNvbG9yOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0QWxwaGEoKSB7Ci0gICAgICAgIHJldHVybiBtQ29sb3IgPj4+IDI0OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEFscGhhKGludCBhbHBoYSkgewotICAgICAgICBtQ29sb3IgPSAoYWxwaGEgPDwgMjQpIHwgKG1Db2xvciAmIDB4MDBGRkZGRkYpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0VGV4dEFsaWduKCkgewotICAgICAgICByZXR1cm4gbVRleHRBbGlnbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmxvYXQgZ2V0U3Ryb2tlV2lkdGgoKSB7Ci0gICAgICAgIHJldHVybiBtU3Ryb2tlV2lkdGg7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogcmV0dXJucyB0aGUgdmFsdWUgb2Ygc3Ryb2tlIG1pdGVyIG5lZWRlZCBieSB0aGUgamF2YSBhcGkuCi0gICAgICovCi0gICAgcHVibGljIGZsb2F0IGdldEphdmFTdHJva2VNaXRlcigpIHsKLSAgICAgICAgZmxvYXQgbWl0ZXIgPSBtU3Ryb2tlTWl0ZXIgKiBtU3Ryb2tlV2lkdGg7Ci0gICAgICAgIGlmIChtaXRlciA8IDEuZikgewotICAgICAgICAgICAgbWl0ZXIgPSAxLmY7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1pdGVyOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0SmF2YUNhcCgpIHsKLSAgICAgICAgc3dpdGNoIChQYWludC5zQ2FwQXJyYXlbbUNhcF0pIHsKLSAgICAgICAgICAgIGNhc2UgQlVUVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFzaWNTdHJva2UuQ0FQX0JVVFQ7Ci0gICAgICAgICAgICBjYXNlIFJPVU5EOgotICAgICAgICAgICAgICAgIHJldHVybiBCYXNpY1N0cm9rZS5DQVBfUk9VTkQ7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY2FzZSBTUVVBUkU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJhc2ljU3Ryb2tlLkNBUF9TUVVBUkU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEphdmFKb2luKCkgewotICAgICAgICBzd2l0Y2ggKFBhaW50LnNKb2luQXJyYXlbbUpvaW5dKSB7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY2FzZSBNSVRFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFzaWNTdHJva2UuSk9JTl9NSVRFUjsKLSAgICAgICAgICAgIGNhc2UgUk9VTkQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJhc2ljU3Ryb2tlLkpPSU5fUk9VTkQ7Ci0gICAgICAgICAgICBjYXNlIEJFVkVMOgotICAgICAgICAgICAgICAgIHJldHVybiBCYXNpY1N0cm9rZS5KT0lOX0JFVkVMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFN0cm9rZSBnZXRKYXZhU3Ryb2tlKCkgewotICAgICAgICBpZiAobVBhdGhFZmZlY3QgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKG1QYXRoRWZmZWN0LmlzU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJva2Ugc3Ryb2tlID0gbVBhdGhFZmZlY3QuZ2V0U3Ryb2tlKHRoaXMpOwotICAgICAgICAgICAgICAgIGFzc2VydCBzdHJva2UgIT0gbnVsbDsKLSAgICAgICAgICAgICAgICBpZiAoc3Ryb2tlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cm9rZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19QQVRIRUZGRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgbVBhdGhFZmZlY3QuZ2V0U3VwcG9ydE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWYgbm8gY3VzdG9tIHN0cm9rZSBhcyBiZWVuIHNldCwgc2V0IHRoZSBkZWZhdWx0IG9uZS4KLSAgICAgICAgcmV0dXJuIG5ldyBCYXNpY1N0cm9rZSgKLSAgICAgICAgICAgICAgICAgICAgZ2V0U3Ryb2tlV2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0SmF2YUNhcCgpLAotICAgICAgICAgICAgICAgICAgICBnZXRKYXZhSm9pbigpLAotICAgICAgICAgICAgICAgICAgICBnZXRKYXZhU3Ryb2tlTWl0ZXIoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUge0BsaW5rIFhmZXJtb2RlfSBkZWxlZ2F0ZSBvciBudWxsIGlmIG5vbmUgaGF2ZSBiZWVuIHNldAotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgZGVsZWdhdGUgb3IgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgWGZlcm1vZGVfRGVsZWdhdGUgZ2V0WGZlcm1vZGUoKSB7Ci0gICAgICAgIHJldHVybiBtWGZlcm1vZGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUge0BsaW5rIENvbG9yRmlsdGVyfSBkZWxlZ2F0ZSBvciBudWxsIGlmIG5vbmUgaGF2ZSBiZWVuIHNldAotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgZGVsZWdhdGUgb3IgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQ29sb3JGaWx0ZXJfRGVsZWdhdGUgZ2V0Q29sb3JGaWx0ZXIoKSB7Ci0gICAgICAgIHJldHVybiBtQ29sb3JGaWx0ZXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUge0BsaW5rIFNoYWRlcn0gZGVsZWdhdGUgb3IgbnVsbCBpZiBub25lIGhhdmUgYmVlbiBzZXQKLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIGRlbGVnYXRlIG9yIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIFNoYWRlcl9EZWxlZ2F0ZSBnZXRTaGFkZXIoKSB7Ci0gICAgICAgIHJldHVybiBtU2hhZGVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHtAbGluayBNYXNrRmlsdGVyfSBkZWxlZ2F0ZSBvciBudWxsIGlmIG5vbmUgaGF2ZSBiZWVuIHNldAotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgZGVsZWdhdGUgb3IgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWFza0ZpbHRlcl9EZWxlZ2F0ZSBnZXRNYXNrRmlsdGVyKCkgewotICAgICAgICByZXR1cm4gbU1hc2tGaWx0ZXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUge0BsaW5rIFJhc3Rlcml6ZXJ9IGRlbGVnYXRlIG9yIG51bGwgaWYgbm9uZSBoYXZlIGJlZW4gc2V0Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBkZWxlZ2F0ZSBvciBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBSYXN0ZXJpemVyX0RlbGVnYXRlIGdldFJhc3Rlcml6ZXIoKSB7Ci0gICAgICAgIHJldHVybiBtUmFzdGVyaXplcjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgZ2V0RmxhZ3MoUGFpbnQgdGhpc1BhaW50KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1GbGFnczsKLSAgICB9Ci0KLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0RmxhZ3MoUGFpbnQgdGhpc1BhaW50LCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubUZsYWdzID0gZmxhZ3M7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0RmlsdGVyQml0bWFwKFBhaW50IHRoaXNQYWludCwgYm9vbGVhbiBmaWx0ZXIpIHsKLSAgICAgICAgc2V0RmxhZyh0aGlzUGFpbnQsIFBhaW50LkZJTFRFUl9CSVRNQVBfRkxBRywgZmlsdGVyKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IGdldEhpbnRpbmcoUGFpbnQgdGhpc1BhaW50KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBQYWludC5ISU5USU5HX09OOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1IaW50aW5nTW9kZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzZXRIaW50aW5nKFBhaW50IHRoaXNQYWludCwgaW50IG1vZGUpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubUhpbnRpbmdNb2RlID0gbW9kZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzZXRBbnRpQWxpYXMoUGFpbnQgdGhpc1BhaW50LCBib29sZWFuIGFhKSB7Ci0gICAgICAgIHNldEZsYWcodGhpc1BhaW50LCBQYWludC5BTlRJX0FMSUFTX0ZMQUcsIGFhKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzZXRTdWJwaXhlbFRleHQoUGFpbnQgdGhpc1BhaW50LCBib29sZWFuIHN1YnBpeGVsVGV4dCkgewotICAgICAgICBzZXRGbGFnKHRoaXNQYWludCwgUGFpbnQuU1VCUElYRUxfVEVYVF9GTEFHLCBzdWJwaXhlbFRleHQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNldFVuZGVybGluZVRleHQoUGFpbnQgdGhpc1BhaW50LCBib29sZWFuIHVuZGVybGluZVRleHQpIHsKLSAgICAgICAgc2V0RmxhZyh0aGlzUGFpbnQsIFBhaW50LlVOREVSTElORV9URVhUX0ZMQUcsIHVuZGVybGluZVRleHQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNldFN0cmlrZVRocnVUZXh0KFBhaW50IHRoaXNQYWludCwgYm9vbGVhbiBzdHJpa2VUaHJ1VGV4dCkgewotICAgICAgICBzZXRGbGFnKHRoaXNQYWludCwgUGFpbnQuU1RSSUtFX1RIUlVfVEVYVF9GTEFHLCBzdHJpa2VUaHJ1VGV4dCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0RmFrZUJvbGRUZXh0KFBhaW50IHRoaXNQYWludCwgYm9vbGVhbiBmYWtlQm9sZFRleHQpIHsKLSAgICAgICAgc2V0RmxhZyh0aGlzUGFpbnQsIFBhaW50LkZBS0VfQk9MRF9URVhUX0ZMQUcsIGZha2VCb2xkVGV4dCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0RGl0aGVyKFBhaW50IHRoaXNQYWludCwgYm9vbGVhbiBkaXRoZXIpIHsKLSAgICAgICAgc2V0RmxhZyh0aGlzUGFpbnQsIFBhaW50LkRJVEhFUl9GTEFHLCBkaXRoZXIpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNldExpbmVhclRleHQoUGFpbnQgdGhpc1BhaW50LCBib29sZWFuIGxpbmVhclRleHQpIHsKLSAgICAgICAgc2V0RmxhZyh0aGlzUGFpbnQsIFBhaW50LkxJTkVBUl9URVhUX0ZMQUcsIGxpbmVhclRleHQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgZ2V0Q29sb3IoUGFpbnQgdGhpc1BhaW50KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1Db2xvcjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzZXRDb2xvcihQYWludCB0aGlzUGFpbnQsIGludCBjb2xvcikgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tQ29sb3IgPSBjb2xvcjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IGdldEFscGhhKFBhaW50IHRoaXNQYWludCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5nZXRBbHBoYSgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNldEFscGhhKFBhaW50IHRoaXNQYWludCwgaW50IGEpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUuc2V0QWxwaGEoYSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IGdldFN0cm9rZVdpZHRoKFBhaW50IHRoaXNQYWludCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMS5mOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1TdHJva2VXaWR0aDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzZXRTdHJva2VXaWR0aChQYWludCB0aGlzUGFpbnQsIGZsb2F0IHdpZHRoKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1TdHJva2VXaWR0aCA9IHdpZHRoOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBnZXRTdHJva2VNaXRlcihQYWludCB0aGlzUGFpbnQpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDEuZjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tU3Ryb2tlTWl0ZXI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0U3Ryb2tlTWl0ZXIoUGFpbnQgdGhpc1BhaW50LCBmbG9hdCBtaXRlcikgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tU3Ryb2tlTWl0ZXIgPSBtaXRlcjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuU2V0U2hhZG93TGF5ZXIoUGFpbnQgdGhpc1BhaW50LCBmbG9hdCByYWRpdXMsIGZsb2F0IGR4LCBmbG9hdCBkeSwKLSAgICAgICAgICAgIGludCBjb2xvcikgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIlBhaW50LnNldFNoYWRvd0xheWVyIGlzIG5vdCBzdXBwb3J0ZWQuIiwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IGdldFRleHRTaXplKFBhaW50IHRoaXNQYWludCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMS5mOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1UZXh0U2l6ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzZXRUZXh0U2l6ZShQYWludCB0aGlzUGFpbnQsIGZsb2F0IHRleHRTaXplKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1UZXh0U2l6ZSA9IHRleHRTaXplOwotICAgICAgICBkZWxlZ2F0ZS51cGRhdGVGb250T2JqZWN0KCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IGdldFRleHRTY2FsZVgoUGFpbnQgdGhpc1BhaW50KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAxLmY7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubVRleHRTY2FsZVg7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0VGV4dFNjYWxlWChQYWludCB0aGlzUGFpbnQsIGZsb2F0IHNjYWxlWCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tVGV4dFNjYWxlWCA9IHNjYWxlWDsKLSAgICAgICAgZGVsZWdhdGUudXBkYXRlRm9udE9iamVjdCgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBnZXRUZXh0U2tld1goUGFpbnQgdGhpc1BhaW50KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAxLmY7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubVRleHRTa2V3WDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzZXRUZXh0U2tld1goUGFpbnQgdGhpc1BhaW50LCBmbG9hdCBza2V3WCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tVGV4dFNrZXdYID0gc2tld1g7Ci0gICAgICAgIGRlbGVnYXRlLnVwZGF0ZUZvbnRPYmplY3QoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXQgYXNjZW50KFBhaW50IHRoaXNQYWludCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZWxlZ2F0ZS5tRm9udHMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgamF2YS5hd3QuRm9udE1ldHJpY3MgamF2YU1ldHJpY3MgPSBkZWxlZ2F0ZS5tRm9udHMuZ2V0KDApLm1NZXRyaWNzOwotICAgICAgICAgICAgLy8gQW5kcm9pZCBleHBlY3RzIG5lZ2F0aXZlIGFzY2VudCBzbyB3ZSBpbnZlcnQgdGhlIHZhbHVlIGZyb20gSmF2YS4KLSAgICAgICAgICAgIHJldHVybiAtIGphdmFNZXRyaWNzLmdldEFzY2VudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IGRlc2NlbnQoUGFpbnQgdGhpc1BhaW50KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUKLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlbGVnYXRlLm1Gb250cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBqYXZhLmF3dC5Gb250TWV0cmljcyBqYXZhTWV0cmljcyA9IGRlbGVnYXRlLm1Gb250cy5nZXQoMCkubU1ldHJpY3M7Ci0gICAgICAgICAgICByZXR1cm4gamF2YU1ldHJpY3MuZ2V0RGVzY2VudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXQgZ2V0Rm9udE1ldHJpY3MoUGFpbnQgdGhpc1BhaW50LCBGb250TWV0cmljcyBtZXRyaWNzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUKLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmdldEZvbnRNZXRyaWNzKG1ldHJpY3MpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgZ2V0Rm9udE1ldHJpY3NJbnQoUGFpbnQgdGhpc1BhaW50LCBGb250TWV0cmljc0ludCBmbWkpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZQotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVsZWdhdGUubUZvbnRzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGphdmEuYXd0LkZvbnRNZXRyaWNzIGphdmFNZXRyaWNzID0gZGVsZWdhdGUubUZvbnRzLmdldCgwKS5tTWV0cmljczsKLSAgICAgICAgICAgIGlmIChmbWkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIEFuZHJvaWQgZXhwZWN0cyBuZWdhdGl2ZSBhc2NlbnQgc28gd2UgaW52ZXJ0IHRoZSB2YWx1ZSBmcm9tIEphdmEuCi0gICAgICAgICAgICAgICAgZm1pLnRvcCA9IC0gamF2YU1ldHJpY3MuZ2V0TWF4QXNjZW50KCk7Ci0gICAgICAgICAgICAgICAgZm1pLmFzY2VudCA9IC0gamF2YU1ldHJpY3MuZ2V0QXNjZW50KCk7Ci0gICAgICAgICAgICAgICAgZm1pLmRlc2NlbnQgPSBqYXZhTWV0cmljcy5nZXREZXNjZW50KCk7Ci0gICAgICAgICAgICAgICAgZm1pLmJvdHRvbSA9IGphdmFNZXRyaWNzLmdldE1heERlc2NlbnQoKTsKLSAgICAgICAgICAgICAgICBmbWkubGVhZGluZyA9IGphdmFNZXRyaWNzLmdldExlYWRpbmcoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGphdmFNZXRyaWNzLmdldEhlaWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IG5hdGl2ZV9tZWFzdXJlVGV4dChQYWludCB0aGlzUGFpbnQsIGNoYXJbXSB0ZXh0LCBpbnQgaW5kZXgsCi0gICAgICAgICAgICBpbnQgY291bnQsIGludCBiaWRpRmxhZ3MpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZQotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubWVhc3VyZVRleHQodGV4dCwgaW5kZXgsIGNvdW50LCBpc1J0bChiaWRpRmxhZ3MpKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXQgbmF0aXZlX21lYXN1cmVUZXh0KFBhaW50IHRoaXNQYWludCwgU3RyaW5nIHRleHQsIGludCBzdGFydCwgaW50IGVuZCwKLSAgICAgICAgaW50IGJpZGlGbGFncykgewotICAgICAgICByZXR1cm4gbmF0aXZlX21lYXN1cmVUZXh0KHRoaXNQYWludCwgdGV4dC50b0NoYXJBcnJheSgpLCBzdGFydCwgZW5kIC0gc3RhcnQsIGJpZGlGbGFncyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IG5hdGl2ZV9tZWFzdXJlVGV4dChQYWludCB0aGlzUGFpbnQsIFN0cmluZyB0ZXh0LCBpbnQgYmlkaUZsYWdzKSB7Ci0gICAgICAgIHJldHVybiBuYXRpdmVfbWVhc3VyZVRleHQodGhpc1BhaW50LCB0ZXh0LnRvQ2hhckFycmF5KCksIDAsIHRleHQubGVuZ3RoKCksIGJpZGlGbGFncyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfYnJlYWtUZXh0KFBhaW50IHRoaXNQYWludCwgY2hhcltdIHRleHQsIGludCBpbmRleCwgaW50IGNvdW50LAotICAgICAgICAgICAgZmxvYXQgbWF4V2lkdGgsIGludCBiaWRpRmxhZ3MsIGZsb2F0W10gbWVhc3VyZWRXaWR0aCkgewotCi0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUKLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGluYyA9IGNvdW50ID4gMCA/IDEgOiAtMTsKLQotICAgICAgICBpbnQgbWVhc3VyZUluZGV4ID0gMDsKLSAgICAgICAgZmxvYXQgbWVhc3VyZUFjYyA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSBpbmRleDsgaSAhPSBpbmRleCArIGNvdW50OyBpICs9IGluYywgbWVhc3VyZUluZGV4KyspIHsKLSAgICAgICAgICAgIGludCBzdGFydCwgZW5kOwotICAgICAgICAgICAgaWYgKGkgPCBpbmRleCkgewotICAgICAgICAgICAgICAgIHN0YXJ0ID0gaTsKLSAgICAgICAgICAgICAgICBlbmQgPSBpbmRleDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RhcnQgPSBpbmRleDsKLSAgICAgICAgICAgICAgICBlbmQgPSBpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBtZWFzdXJlIGZyb20gc3RhcnQgdG8gZW5kCi0gICAgICAgICAgICBmbG9hdCByZXMgPSBkZWxlZ2F0ZS5tZWFzdXJlVGV4dCh0ZXh0LCBzdGFydCwgZW5kIC0gc3RhcnQgKyAxLCBpc1J0bChiaWRpRmxhZ3MpKTsKLQotICAgICAgICAgICAgaWYgKG1lYXN1cmVkV2lkdGggIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1lYXN1cmVkV2lkdGhbbWVhc3VyZUluZGV4XSA9IHJlczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVhc3VyZUFjYyArPSByZXM7Ci0gICAgICAgICAgICBpZiAocmVzID4gbWF4V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAvLyB3ZSBzaG91bGQgbm90IHJldHVybiB0aGlzIGNoYXIgaW5kZXgsIGJ1dCBzaW5jZSBpdCdzIDAtYmFzZWQKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2UgbmVlZCB0byByZXR1cm4gYSBjb3VudCwgd2Ugc2ltcGx5IHJldHVybiBtZWFzdXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1lYXN1cmVJbmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1lYXN1cmVJbmRleDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9icmVha1RleHQoUGFpbnQgdGhpc1BhaW50LCBTdHJpbmcgdGV4dCwgYm9vbGVhbiBtZWFzdXJlRm9yd2FyZHMsCi0gICAgICAgICAgICBmbG9hdCBtYXhXaWR0aCwgaW50IGJpZGlGbGFncywgZmxvYXRbXSBtZWFzdXJlZFdpZHRoKSB7Ci0gICAgICAgIHJldHVybiBuYXRpdmVfYnJlYWtUZXh0KHRoaXNQYWludCwgdGV4dC50b0NoYXJBcnJheSgpLCAwLCB0ZXh0Lmxlbmd0aCgpLCBtYXhXaWR0aCwKLSAgICAgICAgICAgICAgICBiaWRpRmxhZ3MsIG1lYXN1cmVkV2lkdGgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX2luaXQoKSB7Ci0gICAgICAgIFBhaW50X0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IFBhaW50X0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfaW5pdFdpdGhQYWludChpbnQgcGFpbnQpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgUGFpbnRfRGVsZWdhdGUoZGVsZWdhdGUpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9yZXNldChpbnQgbmF0aXZlX29iamVjdCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5yZXNldCgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXQoaW50IG5hdGl2ZV9kc3QsIGludCBuYXRpdmVfc3JjKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGVfZHN0ID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX2RzdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZV9kc3QgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZV9zcmMgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfc3JjKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlX3NyYyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZV9kc3Quc2V0KGRlbGVnYXRlX3NyYyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfZ2V0U3R5bGUoaW50IG5hdGl2ZV9vYmplY3QpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubVN0eWxlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRTdHlsZShpbnQgbmF0aXZlX29iamVjdCwgaW50IHN0eWxlKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1TdHlsZSA9IHN0eWxlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX2dldFN0cm9rZUNhcChpbnQgbmF0aXZlX29iamVjdCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tQ2FwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRTdHJva2VDYXAoaW50IG5hdGl2ZV9vYmplY3QsIGludCBjYXApIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubUNhcCA9IGNhcDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9nZXRTdHJva2VKb2luKGludCBuYXRpdmVfb2JqZWN0KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1Kb2luOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRTdHJva2VKb2luKGludCBuYXRpdmVfb2JqZWN0LCBpbnQgam9pbikgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tSm9pbiA9IGpvaW47Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX2dldEZpbGxQYXRoKGludCBuYXRpdmVfb2JqZWN0LCBpbnQgc3JjLCBpbnQgZHN0KSB7Ci0gICAgICAgIFBhaW50X0RlbGVnYXRlIHBhaW50ID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChwYWludCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBQYXRoX0RlbGVnYXRlIHNyY1BhdGggPSBQYXRoX0RlbGVnYXRlLmdldERlbGVnYXRlKHNyYyk7Ci0gICAgICAgIGlmIChzcmNQYXRoID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBkc3RQYXRoID0gUGF0aF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShkc3QpOwotICAgICAgICBpZiAoZHN0UGF0aCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cm9rZSBzdHJva2UgPSBwYWludC5nZXRKYXZhU3Ryb2tlKCk7Ci0gICAgICAgIFNoYXBlIHN0cm9rZVNoYXBlID0gc3Ryb2tlLmNyZWF0ZVN0cm9rZWRTaGFwZShzcmNQYXRoLmdldEphdmFTaGFwZSgpKTsKLQotICAgICAgICBkc3RQYXRoLnNldEphdmFTaGFwZShzdHJva2VTaGFwZSk7Ci0KLSAgICAgICAgLy8gRklYTUUgZmlndXJlIG91dCB0aGUgcmV0dXJuIHZhbHVlPwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9zZXRTaGFkZXIoaW50IG5hdGl2ZV9vYmplY3QsIGludCBzaGFkZXIpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHNoYWRlcjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1TaGFkZXIgPSBTaGFkZXJfRGVsZWdhdGUuZ2V0RGVsZWdhdGUoc2hhZGVyKTsKLQotICAgICAgICByZXR1cm4gc2hhZGVyOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX3NldENvbG9yRmlsdGVyKGludCBuYXRpdmVfb2JqZWN0LCBpbnQgZmlsdGVyKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tQ29sb3JGaWx0ZXIgPSBDb2xvckZpbHRlcl9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShmaWx0ZXIpOzsKLQotICAgICAgICAvLyBzaW5jZSBub25lIG9mIHRob3NlIGFyZSBzdXBwb3J0ZWQsIGRpc3BsYXkgYSBmaWRlbGl0eSB3YXJuaW5nIHJpZ2h0IGF3YXkKLSAgICAgICAgaWYgKGRlbGVnYXRlLm1Db2xvckZpbHRlciAhPSBudWxsICYmIGRlbGVnYXRlLm1Db2xvckZpbHRlci5pc1N1cHBvcnRlZCgpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfQ09MT1JGSUxURVIsCi0gICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlLm1Db2xvckZpbHRlci5nZXRTdXBwb3J0TWVzc2FnZSgpLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmaWx0ZXI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfc2V0WGZlcm1vZGUoaW50IG5hdGl2ZV9vYmplY3QsIGludCB4ZmVybW9kZSkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4geGZlcm1vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tWGZlcm1vZGUgPSBYZmVybW9kZV9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZSh4ZmVybW9kZSk7Ci0KLSAgICAgICAgcmV0dXJuIHhmZXJtb2RlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX3NldFBhdGhFZmZlY3QoaW50IG5hdGl2ZV9vYmplY3QsIGludCBlZmZlY3QpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGVmZmVjdDsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1QYXRoRWZmZWN0ID0gUGF0aEVmZmVjdF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShlZmZlY3QpOwotCi0gICAgICAgIHJldHVybiBlZmZlY3Q7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfc2V0TWFza0ZpbHRlcihpbnQgbmF0aXZlX29iamVjdCwgaW50IG1hc2tmaWx0ZXIpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1hc2tmaWx0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tTWFza0ZpbHRlciA9IE1hc2tGaWx0ZXJfRGVsZWdhdGUuZ2V0RGVsZWdhdGUobWFza2ZpbHRlcik7Ci0KLSAgICAgICAgLy8gc2luY2Ugbm9uZSBvZiB0aG9zZSBhcmUgc3VwcG9ydGVkLCBkaXNwbGF5IGEgZmlkZWxpdHkgd2FybmluZyByaWdodCBhd2F5Ci0gICAgICAgIGlmIChkZWxlZ2F0ZS5tTWFza0ZpbHRlciAhPSBudWxsICYmIGRlbGVnYXRlLm1NYXNrRmlsdGVyLmlzU3VwcG9ydGVkKCkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19NQVNLRklMVEVSLAotICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5tTWFza0ZpbHRlci5nZXRTdXBwb3J0TWVzc2FnZSgpLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtYXNrZmlsdGVyOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX3NldFR5cGVmYWNlKGludCBuYXRpdmVfb2JqZWN0LCBpbnQgdHlwZWZhY2UpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tVHlwZWZhY2UgPSBUeXBlZmFjZV9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZSh0eXBlZmFjZSk7Ci0gICAgICAgIGRlbGVnYXRlLnVwZGF0ZUZvbnRPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHR5cGVmYWNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX3NldFJhc3Rlcml6ZXIoaW50IG5hdGl2ZV9vYmplY3QsIGludCByYXN0ZXJpemVyKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiByYXN0ZXJpemVyOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubVJhc3Rlcml6ZXIgPSBSYXN0ZXJpemVyX0RlbGVnYXRlLmdldERlbGVnYXRlKHJhc3Rlcml6ZXIpOwotCi0gICAgICAgIC8vIHNpbmNlIG5vbmUgb2YgdGhvc2UgYXJlIHN1cHBvcnRlZCwgZGlzcGxheSBhIGZpZGVsaXR5IHdhcm5pbmcgcmlnaHQgYXdheQotICAgICAgICBpZiAoZGVsZWdhdGUubVJhc3Rlcml6ZXIgIT0gbnVsbCAmJiBkZWxlZ2F0ZS5tUmFzdGVyaXplci5pc1N1cHBvcnRlZCgpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfUkFTVEVSSVpFUiwKLSAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGUubVJhc3Rlcml6ZXIuZ2V0U3VwcG9ydE1lc3NhZ2UoKSwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmFzdGVyaXplcjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9nZXRUZXh0QWxpZ24oaW50IG5hdGl2ZV9vYmplY3QpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubVRleHRBbGlnbjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0VGV4dEFsaWduKGludCBuYXRpdmVfb2JqZWN0LCBpbnQgYWxpZ24pIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubVRleHRBbGlnbiA9IGFsaWduOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRUZXh0TG9jYWxlKGludCBuYXRpdmVfb2JqZWN0LCBTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLnNldFRleHRMb2NhbGUobG9jYWxlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9nZXRUZXh0V2lkdGhzKGludCBuYXRpdmVfb2JqZWN0LCBjaGFyW10gdGV4dCwgaW50IGluZGV4LAotICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgYmlkaUZsYWdzLCBmbG9hdFtdIHdpZHRocykgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZWxlZ2F0ZS5tRm9udHMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBtdWx0aS1jaGFyIGNoYXJhY3RlcnMgKHNlZSBtZWFzdXJlVGV4dCkKLSAgICAgICAgICAgIGZsb2F0IHRvdGFsQWR2YW5jZSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBjaGFyIGMgPSB0ZXh0W2kgKyBpbmRleF07Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZvciAoRm9udEluZm8gaW5mbyA6IGRlbGVnYXRlLm1Gb250cykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5tRm9udC5jYW5EaXNwbGF5KGMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhZHYgPSBpbmZvLm1NZXRyaWNzLmNoYXJXaWR0aChjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQWR2YW5jZSArPSBhZHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHNbaV0gPSBhZHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGZvdW5kID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG5vIGFkdmFuY2UgZm9yIHRoaXMgY2hhci4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRocyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHNbaV0gPSAwLmY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiAoaW50KSB0b3RhbEFkdmFuY2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9nZXRUZXh0V2lkdGhzKGludCBuYXRpdmVfb2JqZWN0LCBTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LAotICAgICAgICAgICAgaW50IGVuZCwgaW50IGJpZGlGbGFncywgZmxvYXRbXSB3aWR0aHMpIHsKLSAgICAgICAgcmV0dXJuIG5hdGl2ZV9nZXRUZXh0V2lkdGhzKG5hdGl2ZV9vYmplY3QsIHRleHQudG9DaGFyQXJyYXkoKSwgc3RhcnQsIGVuZCAtIHN0YXJ0LAotICAgICAgICAgICAgICAgIGJpZGlGbGFncywgd2lkdGhzKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKiBwYWNrYWdlICovc3RhdGljIGludCBuYXRpdmVfZ2V0VGV4dEdseXBocyhpbnQgbmF0aXZlX29iamVjdCwgU3RyaW5nIHRleHQsIGludCBzdGFydCwKLSAgICAgICAgICAgIGludCBlbmQsIGludCBjb250ZXh0U3RhcnQsIGludCBjb250ZXh0RW5kLCBpbnQgZmxhZ3MsIGNoYXJbXSBnbHlwaHMpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IG5hdGl2ZV9nZXRUZXh0UnVuQWR2YW5jZXMoaW50IG5hdGl2ZV9vYmplY3QsCi0gICAgICAgICAgICBjaGFyW10gdGV4dCwgaW50IGluZGV4LCBpbnQgY291bnQsIGludCBjb250ZXh0SW5kZXgsIGludCBjb250ZXh0Q291bnQsCi0gICAgICAgICAgICBpbnQgZmxhZ3MsIGZsb2F0W10gYWR2YW5jZXMsIGludCBhZHZhbmNlc0luZGV4KSB7Ci0KLSAgICAgICAgaWYgKGFkdmFuY2VzICE9IG51bGwpCi0gICAgICAgICAgICBmb3IgKGludCBpID0gYWR2YW5jZXNJbmRleDsgaTwgYWR2YW5jZXNJbmRleCtjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIGFkdmFuY2VzW2ldPTA7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwgfHwgZGVsZWdhdGUubUZvbnRzID09IG51bGwgfHwgZGVsZWdhdGUubUZvbnRzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gMC5mOwotICAgICAgICB9Ci0gICAgICAgIGJvb2xlYW4gaXNSdGwgPSBpc1J0bChmbGFncyk7Ci0KLSAgICAgICAgaW50IGxpbWl0ID0gaW5kZXggKyBjb3VudDsKLSAgICAgICAgcmV0dXJuIG5ldyBCaWRpUmVuZGVyZXIobnVsbCwgZGVsZWdhdGUsIHRleHQpLnJlbmRlclRleHQoCi0gICAgICAgICAgICAgICAgaW5kZXgsIGxpbWl0LCBpc1J0bCwgYWR2YW5jZXMsIGFkdmFuY2VzSW5kZXgsIGZhbHNlLCAwLCAwKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXQgbmF0aXZlX2dldFRleHRSdW5BZHZhbmNlcyhpbnQgbmF0aXZlX29iamVjdCwKLSAgICAgICAgICAgIFN0cmluZyB0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBjb250ZXh0U3RhcnQsIGludCBjb250ZXh0RW5kLAotICAgICAgICAgICAgaW50IGZsYWdzLCBmbG9hdFtdIGFkdmFuY2VzLCBpbnQgYWR2YW5jZXNJbmRleCkgewotICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBjb250ZXh0U3RhcnQgYW5kIGNvbnRleHRFbmQKLSAgICAgICAgaW50IGNvdW50ID0gZW5kIC0gc3RhcnQ7Ci0gICAgICAgIGNoYXJbXSBidWZmZXIgPSBUZW1wb3JhcnlCdWZmZXIub2J0YWluKGNvdW50KTsKLSAgICAgICAgVGV4dFV0aWxzLmdldENoYXJzKHRleHQsIHN0YXJ0LCBlbmQsIGJ1ZmZlciwgMCk7Ci0KLSAgICAgICAgcmV0dXJuIG5hdGl2ZV9nZXRUZXh0UnVuQWR2YW5jZXMobmF0aXZlX29iamVjdCwgYnVmZmVyLCAwLCBjb3VudCwgY29udGV4dFN0YXJ0LAotICAgICAgICAgICAgICAgIGNvbnRleHRFbmQgLSBjb250ZXh0U3RhcnQsIGZsYWdzLCBhZHZhbmNlcywgYWR2YW5jZXNJbmRleCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfZ2V0VGV4dFJ1bkN1cnNvcihQYWludCB0aGlzUGFpbnQsIGludCBuYXRpdmVfb2JqZWN0LCBjaGFyW10gdGV4dCwKLSAgICAgICAgICAgIGludCBjb250ZXh0U3RhcnQsIGludCBjb250ZXh0TGVuZ3RoLCBpbnQgZmxhZ3MsIGludCBvZmZzZXQsIGludCBjdXJzb3JPcHQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJQYWludC5nZXRUZXh0UnVuQ3Vyc29yIGlzIG5vdCBzdXBwb3J0ZWQuIiwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX2dldFRleHRSdW5DdXJzb3IoUGFpbnQgdGhpc1BhaW50LCBpbnQgbmF0aXZlX29iamVjdCwgU3RyaW5nIHRleHQsCi0gICAgICAgICAgICBpbnQgY29udGV4dFN0YXJ0LCBpbnQgY29udGV4dEVuZCwgaW50IGZsYWdzLCBpbnQgb2Zmc2V0LCBpbnQgY3Vyc29yT3B0KSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiUGFpbnQuZ2V0VGV4dFJ1bkN1cnNvciBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZ2V0VGV4dFBhdGgoaW50IG5hdGl2ZV9vYmplY3QsIGludCBiaWRpRmxhZ3MsCi0gICAgICAgICAgICAgICAgY2hhcltdIHRleHQsIGludCBpbmRleCwgaW50IGNvdW50LCBmbG9hdCB4LCBmbG9hdCB5LCBpbnQgcGF0aCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIlBhaW50LmdldFRleHRQYXRoIGlzIG5vdCBzdXBwb3J0ZWQuIiwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2dldFRleHRQYXRoKGludCBuYXRpdmVfb2JqZWN0LCBpbnQgYmlkaUZsYWdzLAotICAgICAgICAgICAgU3RyaW5nIHRleHQsIGludCBzdGFydCwgaW50IGVuZCwgZmxvYXQgeCwgZmxvYXQgeSwgaW50IHBhdGgpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJQYWludC5nZXRUZXh0UGF0aCBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZUdldFN0cmluZ0JvdW5kcyhpbnQgbmF0aXZlUGFpbnQsIFN0cmluZyB0ZXh0LCBpbnQgc3RhcnQsCi0gICAgICAgICAgICBpbnQgZW5kLCBpbnQgYmlkaUZsYWdzLCBSZWN0IGJvdW5kcykgewotICAgICAgICBuYXRpdmVHZXRDaGFyQXJyYXlCb3VuZHMobmF0aXZlUGFpbnQsIHRleHQudG9DaGFyQXJyYXkoKSwgc3RhcnQsIGVuZCAtIHN0YXJ0LCBiaWRpRmxhZ3MsCi0gICAgICAgICAgICAgICAgYm91bmRzKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVHZXRDaGFyQXJyYXlCb3VuZHMoaW50IG5hdGl2ZVBhaW50LCBjaGFyW10gdGV4dCwgaW50IGluZGV4LAotICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgYmlkaUZsYWdzLCBSZWN0IGJvdW5kcykgewotCi0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsIHx8IGRlbGVnYXRlLm1Gb250cyA9PSBudWxsIHx8IGRlbGVnYXRlLm1Gb250cy5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGludCB3ID0gKGludCkgZGVsZWdhdGUubWVhc3VyZVRleHQodGV4dCwgaW5kZXgsIGNvdW50LCBpc1J0bChiaWRpRmxhZ3MpKTsKLSAgICAgICAgaW50IGg9IGRlbGVnYXRlLmdldEZvbnRzKCkuZ2V0KDApLm1NZXRyaWNzLmdldEhlaWdodCgpOwotICAgICAgICBib3VuZHMuc2V0KDAsIDAsIHcsIGgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIGZpbmFsaXplcihpbnQgbmF0aXZlUGFpbnQpIHsKLSAgICAgICAgc01hbmFnZXIucmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihuYXRpdmVQYWludCk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIC8qcGFja2FnZSovIFBhaW50X0RlbGVnYXRlKCkgewotICAgICAgICByZXNldCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgUGFpbnRfRGVsZWdhdGUoUGFpbnRfRGVsZWdhdGUgcGFpbnQpIHsKLSAgICAgICAgc2V0KHBhaW50KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0KFBhaW50X0RlbGVnYXRlIHBhaW50KSB7Ci0gICAgICAgIG1GbGFncyA9IHBhaW50Lm1GbGFnczsKLSAgICAgICAgbUNvbG9yID0gcGFpbnQubUNvbG9yOwotICAgICAgICBtU3R5bGUgPSBwYWludC5tU3R5bGU7Ci0gICAgICAgIG1DYXAgPSBwYWludC5tQ2FwOwotICAgICAgICBtSm9pbiA9IHBhaW50Lm1Kb2luOwotICAgICAgICBtVGV4dEFsaWduID0gcGFpbnQubVRleHRBbGlnbjsKLSAgICAgICAgbVR5cGVmYWNlID0gcGFpbnQubVR5cGVmYWNlOwotICAgICAgICBtU3Ryb2tlV2lkdGggPSBwYWludC5tU3Ryb2tlV2lkdGg7Ci0gICAgICAgIG1TdHJva2VNaXRlciA9IHBhaW50Lm1TdHJva2VNaXRlcjsKLSAgICAgICAgbVRleHRTaXplID0gcGFpbnQubVRleHRTaXplOwotICAgICAgICBtVGV4dFNjYWxlWCA9IHBhaW50Lm1UZXh0U2NhbGVYOwotICAgICAgICBtVGV4dFNrZXdYID0gcGFpbnQubVRleHRTa2V3WDsKLSAgICAgICAgbVhmZXJtb2RlID0gcGFpbnQubVhmZXJtb2RlOwotICAgICAgICBtQ29sb3JGaWx0ZXIgPSBwYWludC5tQ29sb3JGaWx0ZXI7Ci0gICAgICAgIG1TaGFkZXIgPSBwYWludC5tU2hhZGVyOwotICAgICAgICBtUGF0aEVmZmVjdCA9IHBhaW50Lm1QYXRoRWZmZWN0OwotICAgICAgICBtTWFza0ZpbHRlciA9IHBhaW50Lm1NYXNrRmlsdGVyOwotICAgICAgICBtUmFzdGVyaXplciA9IHBhaW50Lm1SYXN0ZXJpemVyOwotICAgICAgICBtSGludGluZ01vZGUgPSBwYWludC5tSGludGluZ01vZGU7Ci0gICAgICAgIHVwZGF0ZUZvbnRPYmplY3QoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVzZXQoKSB7Ci0gICAgICAgIG1GbGFncyA9IFBhaW50LkRFRkFVTFRfUEFJTlRfRkxBR1M7Ci0gICAgICAgIG1Db2xvciA9IDB4RkYwMDAwMDA7Ci0gICAgICAgIG1TdHlsZSA9IFBhaW50LlN0eWxlLkZJTEwubmF0aXZlSW50OwotICAgICAgICBtQ2FwID0gUGFpbnQuQ2FwLkJVVFQubmF0aXZlSW50OwotICAgICAgICBtSm9pbiA9IFBhaW50LkpvaW4uTUlURVIubmF0aXZlSW50OwotICAgICAgICBtVGV4dEFsaWduID0gMDsKLSAgICAgICAgbVR5cGVmYWNlID0gVHlwZWZhY2VfRGVsZWdhdGUuZ2V0RGVsZWdhdGUoVHlwZWZhY2Uuc0RlZmF1bHRzWzBdLm5hdGl2ZV9pbnN0YW5jZSk7Ci0gICAgICAgIG1TdHJva2VXaWR0aCA9IDEuZjsKLSAgICAgICAgbVN0cm9rZU1pdGVyID0gNC5mOwotICAgICAgICBtVGV4dFNpemUgPSAyMC5mOwotICAgICAgICBtVGV4dFNjYWxlWCA9IDEuZjsKLSAgICAgICAgbVRleHRTa2V3WCA9IDAuZjsKLSAgICAgICAgbVhmZXJtb2RlID0gbnVsbDsKLSAgICAgICAgbUNvbG9yRmlsdGVyID0gbnVsbDsKLSAgICAgICAgbVNoYWRlciA9IG51bGw7Ci0gICAgICAgIG1QYXRoRWZmZWN0ID0gbnVsbDsKLSAgICAgICAgbU1hc2tGaWx0ZXIgPSBudWxsOwotICAgICAgICBtUmFzdGVyaXplciA9IG51bGw7Ci0gICAgICAgIHVwZGF0ZUZvbnRPYmplY3QoKTsKLSAgICAgICAgbUhpbnRpbmdNb2RlID0gUGFpbnQuSElOVElOR19PTjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVcGRhdGUgdGhlIHtAbGluayBGb250fSBvYmplY3QgZnJvbSB0aGUgdHlwZWZhY2UsIHRleHQgc2l6ZSBhbmQgc2NhbGluZwotICAgICAqLwotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUZvbnRPYmplY3QoKSB7Ci0gICAgICAgIGlmIChtVHlwZWZhY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gR2V0IHRoZSBmb250cyBmcm9tIHRoZSBUeXBlRmFjZSBvYmplY3QuCi0gICAgICAgICAgICBMaXN0PEZvbnQ+IGZvbnRzID0gbVR5cGVmYWNlLmdldEZvbnRzKCk7Ci0KLSAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgZm9udCBvYmplY3RzIGFzIHdlbGwgYXMgRm9udE1ldHJpY3MsIGJhc2VkIG9uIHRoZSBjdXJyZW50IHRleHQgc2l6ZQotICAgICAgICAgICAgLy8gYW5kIHNrZXcgaW5mby4KLSAgICAgICAgICAgIEFycmF5TGlzdDxGb250SW5mbz4gaW5mb0xpc3QgPSBuZXcgQXJyYXlMaXN0PEZvbnRJbmZvPihmb250cy5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChGb250IGZvbnQgOiBmb250cykgewotICAgICAgICAgICAgICAgIEZvbnRJbmZvIGluZm8gPSBuZXcgRm9udEluZm8oKTsKLSAgICAgICAgICAgICAgICBpbmZvLm1Gb250ID0gZm9udC5kZXJpdmVGb250KG1UZXh0U2l6ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1UZXh0U2NhbGVYICE9IDEuMCB8fCBtVGV4dFNrZXdYICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBza2V3Ci0gICAgICAgICAgICAgICAgICAgIGluZm8ubUZvbnQgPSBpbmZvLm1Gb250LmRlcml2ZUZvbnQobmV3IEFmZmluZVRyYW5zZm9ybSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGV4dFNjYWxlWCwgbVRleHRTa2V3WCwgMCwgMSwgMCwgMCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBUaGUgbWV0cmljcyBoZXJlIGRvbid0IGhhdmUgYW50aS1hbGlhc2luZyBzZXQuCi0gICAgICAgICAgICAgICAgaW5mby5tTWV0cmljcyA9IFRvb2xraXQuZ2V0RGVmYXVsdFRvb2xraXQoKS5nZXRGb250TWV0cmljcyhpbmZvLm1Gb250KTsKLQotICAgICAgICAgICAgICAgIGluZm9MaXN0LmFkZChpbmZvKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUZvbnRzID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChpbmZvTGlzdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKnBhY2thZ2UqLyBmbG9hdCBtZWFzdXJlVGV4dChjaGFyW10gdGV4dCwgaW50IGluZGV4LCBpbnQgY291bnQsIGJvb2xlYW4gaXNSdGwpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBCaWRpUmVuZGVyZXIobnVsbCwgdGhpcywgdGV4dCkucmVuZGVyVGV4dCgKLSAgICAgICAgICAgICAgICBpbmRleCwgaW5kZXggKyBjb3VudCwgaXNSdGwsIG51bGwsIDAsIGZhbHNlLCAwLCAwKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZsb2F0IGdldEZvbnRNZXRyaWNzKEZvbnRNZXRyaWNzIG1ldHJpY3MpIHsKLSAgICAgICAgaWYgKG1Gb250cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBqYXZhLmF3dC5Gb250TWV0cmljcyBqYXZhTWV0cmljcyA9IG1Gb250cy5nZXQoMCkubU1ldHJpY3M7Ci0gICAgICAgICAgICBpZiAobWV0cmljcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gQW5kcm9pZCBleHBlY3RzIG5lZ2F0aXZlIGFzY2VudCBzbyB3ZSBpbnZlcnQgdGhlIHZhbHVlIGZyb20gSmF2YS4KLSAgICAgICAgICAgICAgICBtZXRyaWNzLnRvcCA9IC0gamF2YU1ldHJpY3MuZ2V0TWF4QXNjZW50KCk7Ci0gICAgICAgICAgICAgICAgbWV0cmljcy5hc2NlbnQgPSAtIGphdmFNZXRyaWNzLmdldEFzY2VudCgpOwotICAgICAgICAgICAgICAgIG1ldHJpY3MuZGVzY2VudCA9IGphdmFNZXRyaWNzLmdldERlc2NlbnQoKTsKLSAgICAgICAgICAgICAgICBtZXRyaWNzLmJvdHRvbSA9IGphdmFNZXRyaWNzLmdldE1heERlc2NlbnQoKTsKLSAgICAgICAgICAgICAgICBtZXRyaWNzLmxlYWRpbmcgPSBqYXZhTWV0cmljcy5nZXRMZWFkaW5nKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBqYXZhTWV0cmljcy5nZXRIZWlnaHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXRUZXh0TG9jYWxlKFN0cmluZyBsb2NhbGUpIHsKLSAgICAgICAgbUxvY2FsZSA9IG5ldyBMb2NhbGUobG9jYWxlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNldEZsYWcoUGFpbnQgdGhpc1BhaW50LCBpbnQgZmxhZ01hc2ssIGJvb2xlYW4gZmxhZ1ZhbHVlKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmbGFnVmFsdWUpIHsKLSAgICAgICAgICAgIGRlbGVnYXRlLm1GbGFncyB8PSBmbGFnTWFzazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlbGVnYXRlLm1GbGFncyAmPSB+ZmxhZ01hc2s7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUnRsKGludCBmbGFnKSB7Ci0gICAgICAgIHN3aXRjaChmbGFnKSB7Ci0gICAgICAgIGNhc2UgUGFpbnQuQklESV9SVEw6Ci0gICAgICAgIGNhc2UgUGFpbnQuQklESV9GT1JDRV9SVEw6Ci0gICAgICAgIGNhc2UgUGFpbnQuQklESV9ERUZBVUxUX1JUTDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QYXRoRGFzaFBhdGhFZmZlY3RfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aERhc2hQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NDhmMGUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QYXRoRGFzaFBhdGhFZmZlY3RfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGphdmEuYXd0LlN0cm9rZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aERhc2hQYXRoRWZmZWN0Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgUGF0aERhc2hQYXRoRWZmZWN0IGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFBhdGhEYXNoUGF0aEVmZmVjdCBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgUGF0aEVmZmVjdF9EZWxlZ2F0ZX0sIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYSB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfSwKLSAqIGFzIGFsbCB0aGUgU2hhZGVyIGNsYXNzZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuYWdlciBvd25lZCBieSB7QGxpbmsgUGF0aEVmZmVjdF9EZWxlZ2F0ZX0uCi0gKgotICogQHNlZSBQYXRoRWZmZWN0X0RlbGVnYXRlCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUGF0aERhc2hQYXRoRWZmZWN0X0RlbGVnYXRlIGV4dGVuZHMgUGF0aEVmZmVjdF9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cm9rZSBnZXRTdHJva2UoUGFpbnRfRGVsZWdhdGUgcGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIlBhdGggRGFzaCBQYXRoIEVmZmVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTGF5b3V0IFByZXZpZXcgbW9kZS4iOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUoaW50IG5hdGl2ZV9wYXRoLCBmbG9hdCBhZHZhbmNlLCBmbG9hdCBwaGFzZSwKLSAgICAgICAgICAgIGludCBuYXRpdmVfc3R5bGUpIHsKLSAgICAgICAgUGF0aERhc2hQYXRoRWZmZWN0X0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IFBhdGhEYXNoUGF0aEVmZmVjdF9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BhdGhFZmZlY3RfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDJiNmRlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuU3Ryb2tlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5QYXRoRWZmZWN0Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgUGF0aEVmZmVjdCBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBQYXRoRWZmZWN0IGNsYXNzLgotICoKLSAqIFRoaXMgYWxzbyBzZXJ2ZSBhcyBhIGJhc2UgY2xhc3MgZm9yIGFsbCBQYXRoRWZmZWN0IGRlbGVnYXRlIGNsYXNzZXMuCi0gKgotICogQHNlZSBEZWxlZ2F0ZU1hbmFnZXIKLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQYXRoRWZmZWN0X0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBEZWxlZ2F0ZU1hbmFnZXI8UGF0aEVmZmVjdF9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxQYXRoRWZmZWN0X0RlbGVnYXRlPihQYXRoRWZmZWN0X0RlbGVnYXRlLmNsYXNzKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgaGVscGVyIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIHB1YmxpYyBzdGF0aWMgUGF0aEVmZmVjdF9EZWxlZ2F0ZSBnZXREZWxlZ2F0ZShpbnQgbmF0aXZlU2hhZGVyKSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVTaGFkZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJva2UgZ2V0U3Ryb2tlKFBhaW50X0RlbGVnYXRlIHBhaW50KTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1N1cHBvcnRlZCgpOwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKTsKLQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVEZXN0cnVjdG9yKGludCBuYXRpdmVfcGF0aGVmZmVjdCkgewotICAgICAgICBzTWFuYWdlci5yZW1vdmVKYXZhUmVmZXJlbmNlRm9yKG5hdGl2ZV9wYXRoZWZmZWN0KTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BhdGhfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDgwYmU5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYXRoLkRpcmVjdGlvbjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhdGguRmlsbFR5cGU7Ci0KLWltcG9ydCBqYXZhLmF3dC5TaGFwZTsKLWltcG9ydCBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybTsKLWltcG9ydCBqYXZhLmF3dC5nZW9tLkFyYzJEOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uQXJlYTsKLWltcG9ydCBqYXZhLmF3dC5nZW9tLkVsbGlwc2UyRDsKLWltcG9ydCBqYXZhLmF3dC5nZW9tLkdlbmVyYWxQYXRoOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uUGF0aEl0ZXJhdG9yOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uUG9pbnQyRDsKLWltcG9ydCBqYXZhLmF3dC5nZW9tLlJlY3RhbmdsZTJEOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uUm91bmRSZWN0YW5nbGUyRDsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFBhdGggaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgUGF0aCBjbGFzcy4KLSAqCi0gKiBAc2VlIERlbGVnYXRlTWFuYWdlcgotICoKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFBhdGhfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBtYW5hZ2VyIC0tLS0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBEZWxlZ2F0ZU1hbmFnZXI8UGF0aF9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxQYXRoX0RlbGVnYXRlPihQYXRoX0RlbGVnYXRlLmNsYXNzKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0gICAgcHJpdmF0ZSBGaWxsVHlwZSBtRmlsbFR5cGUgPSBGaWxsVHlwZS5XSU5ESU5HOwotICAgIHByaXZhdGUgR2VuZXJhbFBhdGggbVBhdGggPSBuZXcgR2VuZXJhbFBhdGgoKTsKLQotICAgIHByaXZhdGUgZmxvYXQgbUxhc3RYID0gMDsKLSAgICBwcml2YXRlIGZsb2F0IG1MYXN0WSA9IDA7Ci0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIFBhdGhfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5QYXRoKSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgfQotCi0gICAgcHVibGljIFNoYXBlIGdldEphdmFTaGFwZSgpIHsKLSAgICAgICAgcmV0dXJuIG1QYXRoOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEphdmFTaGFwZShTaGFwZSBzaGFwZSkgewotICAgICAgICBtUGF0aC5yZXNldCgpOwotICAgICAgICBtUGF0aC5hcHBlbmQoc2hhcGUsIGZhbHNlIC8qY29ubmVjdCovKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXNldCgpIHsKLSAgICAgICAgbVBhdGgucmVzZXQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQYXRoSXRlcmF0b3IoUGF0aEl0ZXJhdG9yIGl0ZXJhdG9yKSB7Ci0gICAgICAgIG1QYXRoLnJlc2V0KCk7Ci0gICAgICAgIG1QYXRoLmFwcGVuZChpdGVyYXRvciwgZmFsc2UgLypjb25uZWN0Ki8pOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBpbml0MSgpIHsKLSAgICAgICAgLy8gY3JlYXRlIHRoZSBkZWxlZ2F0ZQotICAgICAgICBQYXRoX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IFBhdGhfRGVsZWdhdGUoKTsKLQotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgaW5pdDIoaW50IG5QYXRoKSB7Ci0gICAgICAgIC8vIGNyZWF0ZSB0aGUgZGVsZWdhdGUKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBQYXRoX0RlbGVnYXRlKCk7Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSB0byBjb3B5LCB3aGljaCBjb3VsZCBiZSBudWxsIGlmIG5QYXRoIGlzIDAKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgbmV3RGVsZWdhdGUuc2V0KHBhdGhEZWxlZ2F0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9yZXNldChpbnQgblBhdGgpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLm1QYXRoLnJlc2V0KCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3Jld2luZChpbnQgblBhdGgpIHsKLSAgICAgICAgLy8gY2FsbCBvdXQgdG8gcmVzZXQgc2luY2UgdGhlcmUncyBub3RoaW5nIHRvIG9wdGltaXplIGluCi0gICAgICAgIC8vIHRlcm1zIG9mIGRhdGEgc3RydWN0cy4KLSAgICAgICAgbmF0aXZlX3Jlc2V0KG5QYXRoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0KGludCBuYXRpdmVfZHN0LCBpbnQgbmF0aXZlX3NyYykgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEc3REZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9kc3QpOwotICAgICAgICBpZiAocGF0aERzdERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aFNyY0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX3NyYyk7Ci0gICAgICAgIGlmIChwYXRoU3JjRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERzdERlbGVnYXRlLnNldChwYXRoU3JjRGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX2dldEZpbGxUeXBlKGludCBuUGF0aCkgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBwYXRoRGVsZWdhdGUubUZpbGxUeXBlLm5hdGl2ZUludDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0RmlsbFR5cGUoaW50IG5QYXRoLCBpbnQgZnQpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLm1GaWxsVHlwZSA9IFBhdGguc0ZpbGxUeXBlQXJyYXlbZnRdOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9pc0VtcHR5KGludCBuUGF0aCkgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBwYXRoRGVsZWdhdGUuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9pc1JlY3QoaW50IG5QYXRoLCBSZWN0RiByZWN0KSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNyZWF0ZSBhbiBBcmVhIHRoYXQgY2FuIHRlc3QgaWYgdGhlIHBhdGggaXMgYSByZWN0Ci0gICAgICAgIEFyZWEgYXJlYSA9IG5ldyBBcmVhKHBhdGhEZWxlZ2F0ZS5tUGF0aCk7Ci0gICAgICAgIGlmIChhcmVhLmlzUmVjdGFuZ3VsYXIoKSkgewotICAgICAgICAgICAgaWYgKHJlY3QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHBhdGhEZWxlZ2F0ZS5maWxsQm91bmRzKHJlY3QpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfY29tcHV0ZUJvdW5kcyhpbnQgblBhdGgsIFJlY3RGIGJvdW5kcykgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoRGVsZWdhdGUuZmlsbEJvdW5kcyhib3VuZHMpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9pbmNSZXNlcnZlKGludCBuUGF0aCwgaW50IGV4dHJhUHRDb3VudCkgewotICAgICAgICAvLyBzaW5jZSB3ZSB1c2UgYSBqYXZhMkQgcGF0aCwgdGhlcmUncyBubyB3YXkgdG8gcHJlLWFsbG9jYXRlIG5ldyBwb2ludHMsCi0gICAgICAgIC8vIHNvIHdlIGRvIG5vdGhpbmcuCi0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX21vdmVUbyhpbnQgblBhdGgsIGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLm1vdmVUbyh4LCB5KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfck1vdmVUbyhpbnQgblBhdGgsIGZsb2F0IGR4LCBmbG9hdCBkeSkgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoRGVsZWdhdGUuck1vdmVUbyhkeCwgZHkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9saW5lVG8oaW50IG5QYXRoLCBmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5saW5lVG8oeCwgeSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3JMaW5lVG8oaW50IG5QYXRoLCBmbG9hdCBkeCwgZmxvYXQgZHkpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLnJMaW5lVG8oZHgsIGR5KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfcXVhZFRvKGludCBuUGF0aCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLnF1YWRUbyh4MSwgeTEsIHgyLCB5Mik7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3JRdWFkVG8oaW50IG5QYXRoLCBmbG9hdCBkeDEsIGZsb2F0IGR5MSwgZmxvYXQgZHgyLCBmbG9hdCBkeTIpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLnJRdWFkVG8oZHgxLCBkeTEsIGR4MiwgZHkyKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfY3ViaWNUbyhpbnQgblBhdGgsIGZsb2F0IHgxLCBmbG9hdCB5MSwKLSAgICAgICAgICAgIGZsb2F0IHgyLCBmbG9hdCB5MiwgZmxvYXQgeDMsIGZsb2F0IHkzKSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5jdWJpY1RvKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9yQ3ViaWNUbyhpbnQgblBhdGgsIGZsb2F0IHgxLCBmbG9hdCB5MSwKLSAgICAgICAgICAgIGZsb2F0IHgyLCBmbG9hdCB5MiwgZmxvYXQgeDMsIGZsb2F0IHkzKSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5yQ3ViaWNUbyh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfYXJjVG8oaW50IG5QYXRoLCBSZWN0RiBvdmFsLAotICAgICAgICAgICAgICAgICAgICBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBzd2VlcEFuZ2xlLCBib29sZWFuIGZvcmNlTW92ZVRvKSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5hcmNUbyhvdmFsLCBzdGFydEFuZ2xlLCBzd2VlcEFuZ2xlLCBmb3JjZU1vdmVUbyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2Nsb3NlKGludCBuUGF0aCkgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoRGVsZWdhdGUuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfYWRkUmVjdChpbnQgblBhdGgsIFJlY3RGIHJlY3QsIGludCBkaXIpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLmFkZFJlY3QocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20sIGRpcik7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2FkZFJlY3QoaW50IG5QYXRoLAotICAgICAgICAgICAgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBpbnQgZGlyKSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5hZGRSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgZGlyKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfYWRkT3ZhbChpbnQgblBhdGgsIFJlY3RGIG92YWwsIGludCBkaXIpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLm1QYXRoLmFwcGVuZChuZXcgRWxsaXBzZTJELkZsb2F0KAotICAgICAgICAgICAgICAgIG92YWwubGVmdCwgb3ZhbC50b3AsIG92YWwud2lkdGgoKSwgb3ZhbC5oZWlnaHQoKSksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfYWRkQ2lyY2xlKGludCBuUGF0aCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLCBpbnQgZGlyKSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGJlY2F1c2UgeC95IGlzIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZSwgbmVlZCB0byBvZmZzZXQgdGhpcyBieSB0aGUgcmFkaXVzCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5tUGF0aC5hcHBlbmQobmV3IEVsbGlwc2UyRC5GbG9hdCgKLSAgICAgICAgICAgICAgICB4IC0gcmFkaXVzLCB5IC0gcmFkaXVzLCByYWRpdXMgKiAyLCByYWRpdXMgKiAyKSwgZmFsc2UpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9hZGRBcmMoaW50IG5QYXRoLCBSZWN0RiBvdmFsLAotICAgICAgICAgICAgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgc3dlZXBBbmdsZSkgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBiZWNhdXNlIHgveSBpcyB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGUsIG5lZWQgdG8gb2Zmc2V0IHRoaXMgYnkgdGhlIHJhZGl1cwotICAgICAgICBwYXRoRGVsZWdhdGUubVBhdGguYXBwZW5kKG5ldyBBcmMyRC5GbG9hdCgKLSAgICAgICAgICAgICAgICBvdmFsLmxlZnQsIG92YWwudG9wLCBvdmFsLndpZHRoKCksIG92YWwuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgLXN0YXJ0QW5nbGUsIC1zd2VlcEFuZ2xlLCBBcmMyRC5PUEVOKSwgZmFsc2UpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9hZGRSb3VuZFJlY3QoCi0gICAgICAgICAgICBpbnQgblBhdGgsIFJlY3RGIHJlY3QsIGZsb2F0IHJ4LCBmbG9hdCByeSwgaW50IGRpcikgewotCi0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5tUGF0aC5hcHBlbmQobmV3IFJvdW5kUmVjdGFuZ2xlMkQuRmxvYXQoCi0gICAgICAgICAgICAgICAgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCByeCAqIDIsIHJ5ICogMiksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfYWRkUm91bmRSZWN0KGludCBuUGF0aCwgUmVjdEYgcmVjdCwgZmxvYXRbXSByYWRpaSwgaW50IGRpcikgewotICAgICAgICAvLyBKYXZhMkQgZG9lc24ndCBzdXBwb3J0IGRpZmZlcmVudCByb3VuZGVkIGNvcm5lcnMgaW4gZWFjaCBjb3JuZXIsIHNvIGp1c3QgdXNlIHRoZQotICAgICAgICAvLyBmaXJzdCB2YWx1ZS4KLSAgICAgICAgbmF0aXZlX2FkZFJvdW5kUmVjdChuUGF0aCwgcmVjdCwgcmFkaWlbMF0sIHJhZGlpWzFdLCBkaXIpOwotCi0gICAgICAgIC8vIHRoZXJlIGNhbiBiZSBhIGNhc2Ugd2hlcmUgdGhpcyBBUEkgaXMgdXNlZCBidXQgd2l0aCBzaW1pbGFyIHZhbHVlcyBmb3IgYWxsIGNvcm5lcnMsIHNvCi0gICAgICAgIC8vIGluIHRoYXQgY2FzZSB3ZSBkb24ndCB3YXJuLgotICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgaWYgMiBjb3JuZXJzIGFyZSBkaWZmZXJlbnQgc28ganVzdCBjb21wYXJlIHRvIHRoZSBuZXh0IG9uZS4KLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgMyA7IGkrKykgewotICAgICAgICAgICAgaWYgKHJhZGlpW2kgKiAyXSAhPSByYWRpaVsoaSArIDEpICogMl0gfHwgcmFkaWlbaSAqIDIgKyAxXSAhPSByYWRpaVsoaSArIDEpICogMiArIDFdKSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICAgICAgICAgIkRpZmZlcmVudCBjb3JuZXIgc2l6ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gUGF0aC5hZGRSb3VuZFJlY3QuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2FkZFBhdGgoaW50IG5QYXRoLCBpbnQgc3JjLCBmbG9hdCBkeCwgZmxvYXQgZHkpIHsKLSAgICAgICAgYWRkUGF0aChuUGF0aCwgc3JjLCBBZmZpbmVUcmFuc2Zvcm0uZ2V0VHJhbnNsYXRlSW5zdGFuY2UoZHgsIGR5KSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2FkZFBhdGgoaW50IG5QYXRoLCBpbnQgc3JjKSB7Ci0gICAgICAgIGFkZFBhdGgoblBhdGgsIHNyYywgbnVsbCAvKnRyYW5zZm9ybSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfYWRkUGF0aChpbnQgblBhdGgsIGludCBzcmMsIGludCBtYXRyaXgpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIG1hdHJpeERlbGVnYXRlID0gTWF0cml4X0RlbGVnYXRlLmdldERlbGVnYXRlKG1hdHJpeCk7Ci0gICAgICAgIGlmIChtYXRyaXhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhZGRQYXRoKG5QYXRoLCBzcmMsIG1hdHJpeERlbGVnYXRlLmdldEFmZmluZVRyYW5zZm9ybSgpKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfb2Zmc2V0KGludCBuUGF0aCwgZmxvYXQgZHgsIGZsb2F0IGR5LCBpbnQgZHN0X3BhdGgpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY291bGQgYmUgbnVsbCBpZiB0aGUgaW50IGlzIDA7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgZHN0RGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShkc3RfcGF0aCk7Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLm9mZnNldChkeCwgZHksIGRzdERlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfb2Zmc2V0KGludCBuUGF0aCwgZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIG5hdGl2ZV9vZmZzZXQoblBhdGgsIGR4LCBkeSwgMCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldExhc3RQb2ludChpbnQgblBhdGgsIGZsb2F0IGR4LCBmbG9hdCBkeSkgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoRGVsZWdhdGUubUxhc3RYID0gZHg7Ci0gICAgICAgIHBhdGhEZWxlZ2F0ZS5tTGFzdFkgPSBkeTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfdHJhbnNmb3JtKGludCBuUGF0aCwgaW50IG1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkc3RfcGF0aCkgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgbWF0cml4RGVsZWdhdGUgPSBNYXRyaXhfRGVsZWdhdGUuZ2V0RGVsZWdhdGUobWF0cml4KTsKLSAgICAgICAgaWYgKG1hdHJpeERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoaXMgY2FuIGJlIG51bGwgaWYgZHN0X3BhdGggaXMgMAotICAgICAgICBQYXRoX0RlbGVnYXRlIGRzdERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoZHN0X3BhdGgpOwotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS50cmFuc2Zvcm0obWF0cml4RGVsZWdhdGUsIGRzdERlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfdHJhbnNmb3JtKGludCBuUGF0aCwgaW50IG1hdHJpeCkgewotICAgICAgICBuYXRpdmVfdHJhbnNmb3JtKG5QYXRoLCBtYXRyaXgsIDApOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9vcChpbnQgblBhdGgxLCBpbnQgblBhdGgyLCBpbnQgb3AsIGludCByZXN1bHQpIHsKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsICJQYXRoLm9wKCkgbm90IHN1cHBvcnRlZCIsIG51bGwpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgZmluYWxpemVyKGludCBuUGF0aCkgewotICAgICAgICBzTWFuYWdlci5yZW1vdmVKYXZhUmVmZXJlbmNlRm9yKG5QYXRoKTsKLSAgICB9Ci0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBoZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwcml2YXRlIHZvaWQgc2V0KFBhdGhfRGVsZWdhdGUgZGVsZWdhdGUpIHsKLSAgICAgICAgbVBhdGgucmVzZXQoKTsKLSAgICAgICAgc2V0RmlsbFR5cGUoZGVsZWdhdGUubUZpbGxUeXBlKTsKLSAgICAgICAgbVBhdGguYXBwZW5kKGRlbGVnYXRlLm1QYXRoLCBmYWxzZSAvKmNvbm5lY3QqLyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldEZpbGxUeXBlKEZpbGxUeXBlIGZpbGxUeXBlKSB7Ci0gICAgICAgIG1GaWxsVHlwZSA9IGZpbGxUeXBlOwotICAgICAgICBtUGF0aC5zZXRXaW5kaW5nUnVsZShnZXRXaW5kaW5nUnVsZShmaWxsVHlwZSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIEphdmEyRCB3aW5kaW5nIHJ1bGVzIG1hdGNoaW5nIGEgZ2l2ZW4gQW5kcm9pZCB7QGxpbmsgRmlsbFR5cGV9LgotICAgICAqIEBwYXJhbSB0eXBlIHRoZSBhbmRyb2lkIGZpbGwgdHlwZQotICAgICAqIEByZXR1cm4gdGhlIG1hdGNoaW5nIGphdmEyZCB3aW5kaW5nIHJ1bGUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldFdpbmRpbmdSdWxlKEZpbGxUeXBlIHR5cGUpIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFdJTkRJTkc6Ci0gICAgICAgICAgICBjYXNlIElOVkVSU0VfV0lORElORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhbFBhdGguV0lORF9OT05fWkVSTzsKLSAgICAgICAgICAgIGNhc2UgRVZFTl9PREQ6Ci0gICAgICAgICAgICBjYXNlIElOVkVSU0VfRVZFTl9PREQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyYWxQYXRoLldJTkRfRVZFTl9PREQ7Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnQgZmFsc2U7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBEaXJlY3Rpb24gZ2V0RGlyZWN0aW9uKGludCBkaXJlY3Rpb24pIHsKLSAgICAgICAgZm9yIChEaXJlY3Rpb24gZCA6IERpcmVjdGlvbi52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBkLm5hdGl2ZUludCkgewotICAgICAgICAgICAgICAgIHJldHVybiBkOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0IGZhbHNlOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFBhdGgoaW50IGRlc3RQYXRoLCBpbnQgc3JjUGF0aCwgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSkgewotICAgICAgICBQYXRoX0RlbGVnYXRlIGRlc3RQYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShkZXN0UGF0aCk7Ci0gICAgICAgIGlmIChkZXN0UGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFBhdGhfRGVsZWdhdGUgc3JjUGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoc3JjUGF0aCk7Ci0gICAgICAgIGlmIChzcmNQYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRyYW5zZm9ybSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBkZXN0UGF0aERlbGVnYXRlLm1QYXRoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgc3JjUGF0aERlbGVnYXRlLm1QYXRoLmdldFBhdGhJdGVyYXRvcih0cmFuc2Zvcm0pLCBmYWxzZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZXN0UGF0aERlbGVnYXRlLm1QYXRoLmFwcGVuZChzcmNQYXRoRGVsZWdhdGUubVBhdGgsIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwYXRoIGlzIGVtcHR5LgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aCBpcyBlbXB0eS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNFbXB0eSgpIHsKLSAgICAgICAgcmV0dXJuIG1QYXRoLmdldEN1cnJlbnRQb2ludCgpID09IG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmlsbHMgdGhlIGdpdmVuIHtAbGluayBSZWN0Rn0gd2l0aCB0aGUgcGF0aCBib3VuZHMuCi0gICAgICogQHBhcmFtIGJvdW5kcyB0aGUgUmVjdEYgdG8gYmUgZmlsbGVkLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBmaWxsQm91bmRzKFJlY3RGIGJvdW5kcykgewotICAgICAgICBSZWN0YW5nbGUyRCByZWN0ID0gbVBhdGguZ2V0Qm91bmRzMkQoKTsKLSAgICAgICAgYm91bmRzLmxlZnQgPSAoZmxvYXQpcmVjdC5nZXRNaW5YKCk7Ci0gICAgICAgIGJvdW5kcy5yaWdodCA9IChmbG9hdClyZWN0LmdldE1heFgoKTsKLSAgICAgICAgYm91bmRzLnRvcCA9IChmbG9hdClyZWN0LmdldE1pblkoKTsKLSAgICAgICAgYm91bmRzLmJvdHRvbSA9IChmbG9hdClyZWN0LmdldE1heFkoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBjb250b3VyIHRvIHRoZSBwb2ludCAoeCx5KS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHN0YXJ0IG9mIGEgbmV3IGNvbnRvdXIKLSAgICAgKiBAcGFyYW0geSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBzdGFydCBvZiBhIG5ldyBjb250b3VyCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIG1vdmVUbyhmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIG1QYXRoLm1vdmVUbyhtTGFzdFggPSB4LCBtTGFzdFkgPSB5KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBjb250b3VyIHJlbGF0aXZlIHRvIHRoZSBsYXN0IHBvaW50IG9uIHRoZQotICAgICAqIHByZXZpb3VzIGNvbnRvdXIuIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIGNvbnRvdXIsIHRoaXMgaXMgdHJlYXRlZCB0aGUKLSAgICAgKiBzYW1lIGFzIG1vdmVUbygpLgotICAgICAqCi0gICAgICogQHBhcmFtIGR4IFRoZSBhbW91bnQgdG8gYWRkIHRvIHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUKLSAgICAgKiAgICAgICAgICAgcHJldmlvdXMgY29udG91ciwgdG8gc3BlY2lmeSB0aGUgc3RhcnQgb2YgYSBuZXcgY29udG91cgotICAgICAqIEBwYXJhbSBkeSBUaGUgYW1vdW50IHRvIGFkZCB0byB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlCi0gICAgICogICAgICAgICAgIHByZXZpb3VzIGNvbnRvdXIsIHRvIHNwZWNpZnkgdGhlIHN0YXJ0IG9mIGEgbmV3IGNvbnRvdXIKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgck1vdmVUbyhmbG9hdCBkeCwgZmxvYXQgZHkpIHsKLSAgICAgICAgZHggKz0gbUxhc3RYOwotICAgICAgICBkeSArPSBtTGFzdFk7Ci0gICAgICAgIG1QYXRoLm1vdmVUbyhtTGFzdFggPSBkeCwgbUxhc3RZID0gZHkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZCBhIGxpbmUgZnJvbSB0aGUgbGFzdCBwb2ludCB0byB0aGUgc3BlY2lmaWVkIHBvaW50ICh4LHkpLgotICAgICAqIElmIG5vIG1vdmVUbygpIGNhbGwgaGFzIGJlZW4gbWFkZSBmb3IgdGhpcyBjb250b3VyLCB0aGUgZmlyc3QgcG9pbnQgaXMKLSAgICAgKiBhdXRvbWF0aWNhbGx5IHNldCB0byAoMCwwKS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiBhIGxpbmUKLSAgICAgKiBAcGFyYW0geSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgYSBsaW5lCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGxpbmVUbyhmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIG1QYXRoLmxpbmVUbyhtTGFzdFggPSB4LCBtTGFzdFkgPSB5KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIGxpbmVUbywgYnV0IHRoZSBjb29yZGluYXRlcyBhcmUgY29uc2lkZXJlZCByZWxhdGl2ZSB0byB0aGUgbGFzdAotICAgICAqIHBvaW50IG9uIHRoaXMgY29udG91ci4gSWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgcG9pbnQsIHRoZW4gYSBtb3ZlVG8oMCwwKQotICAgICAqIGlzIGluc2VydGVkIGF1dG9tYXRpY2FsbHkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZHggVGhlIGFtb3VudCB0byBhZGQgdG8gdGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgcHJldmlvdXMgcG9pbnQgb24KLSAgICAgKiAgICAgICAgICAgdGhpcyBjb250b3VyLCB0byBzcGVjaWZ5IGEgbGluZQotICAgICAqIEBwYXJhbSBkeSBUaGUgYW1vdW50IHRvIGFkZCB0byB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSBwcmV2aW91cyBwb2ludCBvbgotICAgICAqICAgICAgICAgICB0aGlzIGNvbnRvdXIsIHRvIHNwZWNpZnkgYSBsaW5lCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJMaW5lVG8oZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIGlmIChpc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1QYXRoLm1vdmVUbyhtTGFzdFggPSAwLCBtTGFzdFkgPSAwKTsKLSAgICAgICAgfQotICAgICAgICBkeCArPSBtTGFzdFg7Ci0gICAgICAgIGR5ICs9IG1MYXN0WTsKLSAgICAgICAgbVBhdGgubGluZVRvKG1MYXN0WCA9IGR4LCBtTGFzdFkgPSBkeSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkIGEgcXVhZHJhdGljIGJlemllciBmcm9tIHRoZSBsYXN0IHBvaW50LCBhcHByb2FjaGluZyBjb250cm9sIHBvaW50Ci0gICAgICogKHgxLHkxKSwgYW5kIGVuZGluZyBhdCAoeDIseTIpLiBJZiBubyBtb3ZlVG8oKSBjYWxsIGhhcyBiZWVuIG1hZGUgZm9yCi0gICAgICogdGhpcyBjb250b3VyLCB0aGUgZmlyc3QgcG9pbnQgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gKDAsMCkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0geDEgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY29udHJvbCBwb2ludCBvbiBhIHF1YWRyYXRpYyBjdXJ2ZQotICAgICAqIEBwYXJhbSB5MSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjb250cm9sIHBvaW50IG9uIGEgcXVhZHJhdGljIGN1cnZlCi0gICAgICogQHBhcmFtIHgyIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBwb2ludCBvbiBhIHF1YWRyYXRpYyBjdXJ2ZQotICAgICAqIEBwYXJhbSB5MiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgcG9pbnQgb24gYSBxdWFkcmF0aWMgY3VydmUKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcXVhZFRvKGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyKSB7Ci0gICAgICAgIG1QYXRoLnF1YWRUbyh4MSwgeTEsIG1MYXN0WCA9IHgyLCBtTGFzdFkgPSB5Mik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2FtZSBhcyBxdWFkVG8sIGJ1dCB0aGUgY29vcmRpbmF0ZXMgYXJlIGNvbnNpZGVyZWQgcmVsYXRpdmUgdG8gdGhlIGxhc3QKLSAgICAgKiBwb2ludCBvbiB0aGlzIGNvbnRvdXIuIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBvaW50LCB0aGVuIGEgbW92ZVRvKDAsMCkKLSAgICAgKiBpcyBpbnNlcnRlZCBhdXRvbWF0aWNhbGx5LgotICAgICAqCi0gICAgICogQHBhcmFtIGR4MSBUaGUgYW1vdW50IHRvIGFkZCB0byB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSBsYXN0IHBvaW50IG9uCi0gICAgICogICAgICAgICAgICB0aGlzIGNvbnRvdXIsIGZvciB0aGUgY29udHJvbCBwb2ludCBvZiBhIHF1YWRyYXRpYyBjdXJ2ZQotICAgICAqIEBwYXJhbSBkeTEgVGhlIGFtb3VudCB0byBhZGQgdG8gdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgbGFzdCBwb2ludCBvbgotICAgICAqICAgICAgICAgICAgdGhpcyBjb250b3VyLCBmb3IgdGhlIGNvbnRyb2wgcG9pbnQgb2YgYSBxdWFkcmF0aWMgY3VydmUKLSAgICAgKiBAcGFyYW0gZHgyIFRoZSBhbW91bnQgdG8gYWRkIHRvIHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGxhc3QgcG9pbnQgb24KLSAgICAgKiAgICAgICAgICAgIHRoaXMgY29udG91ciwgZm9yIHRoZSBlbmQgcG9pbnQgb2YgYSBxdWFkcmF0aWMgY3VydmUKLSAgICAgKiBAcGFyYW0gZHkyIFRoZSBhbW91bnQgdG8gYWRkIHRvIHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGxhc3QgcG9pbnQgb24KLSAgICAgKiAgICAgICAgICAgIHRoaXMgY29udG91ciwgZm9yIHRoZSBlbmQgcG9pbnQgb2YgYSBxdWFkcmF0aWMgY3VydmUKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgclF1YWRUbyhmbG9hdCBkeDEsIGZsb2F0IGR5MSwgZmxvYXQgZHgyLCBmbG9hdCBkeTIpIHsKLSAgICAgICAgaWYgKGlzRW1wdHkoKSkgewotICAgICAgICAgICAgbVBhdGgubW92ZVRvKG1MYXN0WCA9IDAsIG1MYXN0WSA9IDApOwotICAgICAgICB9Ci0gICAgICAgIGR4MSArPSBtTGFzdFg7Ci0gICAgICAgIGR5MSArPSBtTGFzdFk7Ci0gICAgICAgIGR4MiArPSBtTGFzdFg7Ci0gICAgICAgIGR5MiArPSBtTGFzdFk7Ci0gICAgICAgIG1QYXRoLnF1YWRUbyhkeDEsIGR5MSwgbUxhc3RYID0gZHgyLCBtTGFzdFkgPSBkeTIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZCBhIGN1YmljIGJlemllciBmcm9tIHRoZSBsYXN0IHBvaW50LCBhcHByb2FjaGluZyBjb250cm9sIHBvaW50cwotICAgICAqICh4MSx5MSkgYW5kICh4Mix5MiksIGFuZCBlbmRpbmcgYXQgKHgzLHkzKS4gSWYgbm8gbW92ZVRvKCkgY2FsbCBoYXMgYmVlbgotICAgICAqIG1hZGUgZm9yIHRoaXMgY29udG91ciwgdGhlIGZpcnN0IHBvaW50IGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvICgwLDApLgotICAgICAqCi0gICAgICogQHBhcmFtIHgxIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIDFzdCBjb250cm9sIHBvaW50IG9uIGEgY3ViaWMgY3VydmUKLSAgICAgKiBAcGFyYW0geTEgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgMXN0IGNvbnRyb2wgcG9pbnQgb24gYSBjdWJpYyBjdXJ2ZQotICAgICAqIEBwYXJhbSB4MiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSAybmQgY29udHJvbCBwb2ludCBvbiBhIGN1YmljIGN1cnZlCi0gICAgICogQHBhcmFtIHkyIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIDJuZCBjb250cm9sIHBvaW50IG9uIGEgY3ViaWMgY3VydmUKLSAgICAgKiBAcGFyYW0geDMgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIHBvaW50IG9uIGEgY3ViaWMgY3VydmUKLSAgICAgKiBAcGFyYW0geTMgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIHBvaW50IG9uIGEgY3ViaWMgY3VydmUKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgY3ViaWNUbyhmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHgzLCBmbG9hdCB5MykgewotICAgICAgICBtUGF0aC5jdXJ2ZVRvKHgxLCB5MSwgeDIsIHkyLCBtTGFzdFggPSB4MywgbUxhc3RZID0geTMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNhbWUgYXMgY3ViaWNUbywgYnV0IHRoZSBjb29yZGluYXRlcyBhcmUgY29uc2lkZXJlZCByZWxhdGl2ZSB0byB0aGUKLSAgICAgKiBjdXJyZW50IHBvaW50IG9uIHRoaXMgY29udG91ci4gSWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgcG9pbnQsIHRoZW4gYQotICAgICAqIG1vdmVUbygwLDApIGlzIGluc2VydGVkIGF1dG9tYXRpY2FsbHkuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJDdWJpY1RvKGZsb2F0IGR4MSwgZmxvYXQgZHkxLCBmbG9hdCBkeDIsIGZsb2F0IGR5MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkeDMsIGZsb2F0IGR5MykgewotICAgICAgICBpZiAoaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtUGF0aC5tb3ZlVG8obUxhc3RYID0gMCwgbUxhc3RZID0gMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZHgxICs9IG1MYXN0WDsKLSAgICAgICAgZHkxICs9IG1MYXN0WTsKLSAgICAgICAgZHgyICs9IG1MYXN0WDsKLSAgICAgICAgZHkyICs9IG1MYXN0WTsKLSAgICAgICAgZHgzICs9IG1MYXN0WDsKLSAgICAgICAgZHkzICs9IG1MYXN0WTsKLSAgICAgICAgbVBhdGguY3VydmVUbyhkeDEsIGR5MSwgZHgyLCBkeTIsIG1MYXN0WCA9IGR4MywgbUxhc3RZID0gZHkzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBcHBlbmQgdGhlIHNwZWNpZmllZCBhcmMgdG8gdGhlIHBhdGggYXMgYSBuZXcgY29udG91ci4gSWYgdGhlIHN0YXJ0IG9mCi0gICAgICogdGhlIHBhdGggaXMgZGlmZmVyZW50IGZyb20gdGhlIHBhdGgncyBjdXJyZW50IGxhc3QgcG9pbnQsIHRoZW4gYW4KLSAgICAgKiBhdXRvbWF0aWMgbGluZVRvKCkgaXMgYWRkZWQgdG8gY29ubmVjdCB0aGUgY3VycmVudCBjb250b3VyIHRvIHRoZQotICAgICAqIHN0YXJ0IG9mIHRoZSBhcmMuIEhvd2V2ZXIsIGlmIHRoZSBwYXRoIGlzIGVtcHR5LCB0aGVuIHdlIGNhbGwgbW92ZVRvKCkKLSAgICAgKiB3aXRoIHRoZSBmaXJzdCBwb2ludCBvZiB0aGUgYXJjLiBUaGUgc3dlZXAgYW5nbGUgaXMgdHJlYWQgbW9kIDM2MC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvdmFsICAgICAgICBUaGUgYm91bmRzIG9mIG92YWwgZGVmaW5pbmcgc2hhcGUgYW5kIHNpemUgb2YgdGhlIGFyYwotICAgICAqIEBwYXJhbSBzdGFydEFuZ2xlICBTdGFydGluZyBhbmdsZSAoaW4gZGVncmVlcykgd2hlcmUgdGhlIGFyYyBiZWdpbnMKLSAgICAgKiBAcGFyYW0gc3dlZXBBbmdsZSAgU3dlZXAgYW5nbGUgKGluIGRlZ3JlZXMpIG1lYXN1cmVkIGNsb2Nrd2lzZSwgdHJlYXRlZAotICAgICAqICAgICAgICAgICAgICAgICAgICBtb2QgMzYwLgotICAgICAqIEBwYXJhbSBmb3JjZU1vdmVUbyBJZiB0cnVlLCBhbHdheXMgYmVnaW4gYSBuZXcgY29udG91ciB3aXRoIHRoZSBhcmMKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgYXJjVG8oUmVjdEYgb3ZhbCwgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgc3dlZXBBbmdsZSwgYm9vbGVhbiBmb3JjZU1vdmVUbykgewotICAgICAgICBBcmMyRCBhcmMgPSBuZXcgQXJjMkQuRmxvYXQob3ZhbC5sZWZ0LCBvdmFsLnRvcCwgb3ZhbC53aWR0aCgpLCBvdmFsLmhlaWdodCgpLCAtc3RhcnRBbmdsZSwKLSAgICAgICAgICAgICAgICAtc3dlZXBBbmdsZSwgQXJjMkQuT1BFTik7Ci0gICAgICAgIG1QYXRoLmFwcGVuZChhcmMsIHRydWUgLypjb25uZWN0Ki8pOwotCi0gICAgICAgIHJlc2V0TGFzdFBvaW50RnJvbVBhdGgoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbG9zZSB0aGUgY3VycmVudCBjb250b3VyLiBJZiB0aGUgY3VycmVudCBwb2ludCBpcyBub3QgZXF1YWwgdG8gdGhlCi0gICAgICogZmlyc3QgcG9pbnQgb2YgdGhlIGNvbnRvdXIsIGEgbGluZSBzZWdtZW50IGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGNsb3NlKCkgewotICAgICAgICBtUGF0aC5jbG9zZVBhdGgoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVzZXRMYXN0UG9pbnRGcm9tUGF0aCgpIHsKLSAgICAgICAgUG9pbnQyRCBsYXN0ID0gbVBhdGguZ2V0Q3VycmVudFBvaW50KCk7Ci0gICAgICAgIG1MYXN0WCA9IChmbG9hdCkgbGFzdC5nZXRYKCk7Ci0gICAgICAgIG1MYXN0WSA9IChmbG9hdCkgbGFzdC5nZXRZKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkIGEgY2xvc2VkIHJlY3RhbmdsZSBjb250b3VyIHRvIHRoZSBwYXRoCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbGVmdCAgIFRoZSBsZWZ0IHNpZGUgb2YgYSByZWN0YW5nbGUgdG8gYWRkIHRvIHRoZSBwYXRoCi0gICAgICogQHBhcmFtIHRvcCAgICBUaGUgdG9wIG9mIGEgcmVjdGFuZ2xlIHRvIGFkZCB0byB0aGUgcGF0aAotICAgICAqIEBwYXJhbSByaWdodCAgVGhlIHJpZ2h0IHNpZGUgb2YgYSByZWN0YW5nbGUgdG8gYWRkIHRvIHRoZSBwYXRoCi0gICAgICogQHBhcmFtIGJvdHRvbSBUaGUgYm90dG9tIG9mIGEgcmVjdGFuZ2xlIHRvIGFkZCB0byB0aGUgcGF0aAotICAgICAqIEBwYXJhbSBkaXIgICAgVGhlIGRpcmVjdGlvbiB0byB3aW5kIHRoZSByZWN0YW5nbGUncyBjb250b3VyCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGFkZFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpcikgewotICAgICAgICBtb3ZlVG8obGVmdCwgdG9wKTsKLQotICAgICAgICBEaXJlY3Rpb24gZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGRpcik7Ci0KLSAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIGNhc2UgQ1c6Ci0gICAgICAgICAgICAgICAgbGluZVRvKHJpZ2h0LCB0b3ApOwotICAgICAgICAgICAgICAgIGxpbmVUbyhyaWdodCwgYm90dG9tKTsKLSAgICAgICAgICAgICAgICBsaW5lVG8obGVmdCwgYm90dG9tKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ0NXOgotICAgICAgICAgICAgICAgIGxpbmVUbyhsZWZ0LCBib3R0b20pOwotICAgICAgICAgICAgICAgIGxpbmVUbyhyaWdodCwgYm90dG9tKTsKLSAgICAgICAgICAgICAgICBsaW5lVG8ocmlnaHQsIHRvcCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjbG9zZSgpOwotCi0gICAgICAgIHJlc2V0TGFzdFBvaW50RnJvbVBhdGgoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPZmZzZXQgdGhlIHBhdGggYnkgKGR4LGR5KSwgcmV0dXJuaW5nIHRydWUgb24gc3VjY2VzcwotICAgICAqCi0gICAgICogQHBhcmFtIGR4ICBUaGUgYW1vdW50IGluIHRoZSBYIGRpcmVjdGlvbiB0byBvZmZzZXQgdGhlIGVudGlyZSBwYXRoCi0gICAgICogQHBhcmFtIGR5ICBUaGUgYW1vdW50IGluIHRoZSBZIGRpcmVjdGlvbiB0byBvZmZzZXQgdGhlIGVudGlyZSBwYXRoCi0gICAgICogQHBhcmFtIGRzdCBUaGUgdHJhbnNsYXRlZCBwYXRoIGlzIHdyaXR0ZW4gaGVyZS4gSWYgdGhpcyBpcyBudWxsLCB0aGVuCi0gICAgICogICAgICAgICAgICB0aGUgb3JpZ2luYWwgcGF0aCBpcyBtb2RpZmllZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5LCBQYXRoX0RlbGVnYXRlIGRzdCkgewotICAgICAgICBHZW5lcmFsUGF0aCBuZXdQYXRoID0gbmV3IEdlbmVyYWxQYXRoKCk7Ci0KLSAgICAgICAgUGF0aEl0ZXJhdG9yIGl0ZXJhdG9yID0gbVBhdGguZ2V0UGF0aEl0ZXJhdG9yKG5ldyBBZmZpbmVUcmFuc2Zvcm0oMCwgMCwgZHgsIDAsIDAsIGR5KSk7Ci0KLSAgICAgICAgbmV3UGF0aC5hcHBlbmQoaXRlcmF0b3IsIGZhbHNlIC8qY29ubmVjdCovKTsKLQotICAgICAgICBpZiAoZHN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGRzdC5tUGF0aCA9IG5ld1BhdGg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtUGF0aCA9IG5ld1BhdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUcmFuc2Zvcm0gdGhlIHBvaW50cyBpbiB0aGlzIHBhdGggYnkgbWF0cml4LCBhbmQgd3JpdGUgdGhlIGFuc3dlcgotICAgICAqIGludG8gZHN0LiBJZiBkc3QgaXMgbnVsbCwgdGhlbiB0aGUgdGhlIG9yaWdpbmFsIHBhdGggaXMgbW9kaWZpZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbWF0cml4IFRoZSBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIHBhdGgKLSAgICAgKiBAcGFyYW0gZHN0ICAgIFRoZSB0cmFuc2Zvcm1lZCBwYXRoIGlzIHdyaXR0ZW4gaGVyZS4gSWYgZHN0IGlzIG51bGwsCi0gICAgICogICAgICAgICAgICAgICB0aGVuIHRoZSB0aGUgb3JpZ2luYWwgcGF0aCBpcyBtb2RpZmllZAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHRyYW5zZm9ybShNYXRyaXhfRGVsZWdhdGUgbWF0cml4LCBQYXRoX0RlbGVnYXRlIGRzdCkgewotICAgICAgICBpZiAobWF0cml4Lmhhc1BlcnNwZWN0aXZlKCkpIHsKLSAgICAgICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19NQVRSSVhfQUZGSU5FLAotICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5QYXRoI3RyYW5zZm9ybSgpIG9ubHkgIiArCi0gICAgICAgICAgICAgICAgICAgICJzdXBwb3J0cyBhZmZpbmUgdHJhbnNmb3JtYXRpb25zLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgICAgICB9Ci0KLSAgICAgICAgR2VuZXJhbFBhdGggbmV3UGF0aCA9IG5ldyBHZW5lcmFsUGF0aCgpOwotCi0gICAgICAgIFBhdGhJdGVyYXRvciBpdGVyYXRvciA9IG1QYXRoLmdldFBhdGhJdGVyYXRvcihtYXRyaXguZ2V0QWZmaW5lVHJhbnNmb3JtKCkpOwotCi0gICAgICAgIG5ld1BhdGguYXBwZW5kKGl0ZXJhdG9yLCBmYWxzZSAvKmNvbm5lY3QqLyk7Ci0KLSAgICAgICAgaWYgKGRzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBkc3QubVBhdGggPSBuZXdQYXRoOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVBhdGggPSBuZXdQYXRoOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QaXhlbFhvclhmZXJtb2RlX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BpeGVsWG9yWGZlcm1vZGVfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiMDQ0Yi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BpeGVsWG9yWGZlcm1vZGVfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGphdmEuYXd0LkNvbXBvc2l0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuUGl4ZWxYb3JYZmVybW9kZQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFBpeGVsWG9yWGZlcm1vZGUgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgUGl4ZWxYb3JYZmVybW9kZSBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgWGZlcm1vZGVfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEKLSAqIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LCBhcyBhbGwgdGhlIFBhdGhFZmZlY3QgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyIG93bmVkIGJ5Ci0gKiB7QGxpbmsgWGZlcm1vZGVfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgWGZlcm1vZGVfRGVsZWdhdGUKLSAqLwotcHVibGljIGNsYXNzIFBpeGVsWG9yWGZlcm1vZGVfRGVsZWdhdGUgZXh0ZW5kcyBYZmVybW9kZV9EZWxlZ2F0ZSB7Ci0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb21wb3NpdGUgZ2V0Q29tcG9zaXRlKGludCBhbHBoYSkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiUGl4ZWwgWE9SIFhmZXJtb2RlcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBMYXlvdXQgUHJldmlldyBtb2RlLiI7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZShpbnQgb3BDb2xvcikgewotICAgICAgICBQaXhlbFhvclhmZXJtb2RlX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IFBpeGVsWG9yWGZlcm1vZGVfRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmQ29sb3JGaWx0ZXJfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZkNvbG9yRmlsdGVyX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NWRiYWEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmQ29sb3JGaWx0ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZkNvbG9yRmlsdGVyCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgUG9ydGVyRHVmZkNvbG9yRmlsdGVyIGhhdmUKLSAqIGJlZW4gcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFBvcnRlckR1ZmZDb2xvckZpbHRlciBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgQ29sb3JGaWx0ZXJfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEKLSAqIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LCBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIKLSAqIG93bmVkIGJ5IHtAbGluayBDb2xvckZpbHRlcl9EZWxlZ2F0ZX0uCi0gKgotICogQHNlZSBDb2xvckZpbHRlcl9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIFBvcnRlckR1ZmZDb2xvckZpbHRlcl9EZWxlZ2F0ZSBleHRlbmRzIENvbG9yRmlsdGVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiUG9ydGVyRHVmZiBDb2xvciBGaWx0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiI7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9DcmVhdGVQb3J0ZXJEdWZmRmlsdGVyKGludCBzcmNDb2xvciwgaW50IHBvcnRlckR1ZmZNb2RlKSB7Ci0gICAgICAgIFBvcnRlckR1ZmZDb2xvckZpbHRlcl9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBQb3J0ZXJEdWZmQ29sb3JGaWx0ZXJfRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5DcmVhdGVQb3J0ZXJEdWZmRmlsdGVyKGludCBuYXRpdmVGaWx0ZXIsIGludCBzcmNDb2xvciwKLSAgICAgICAgICAgIGludCBwb3J0ZXJEdWZmTW9kZSkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmZYZmVybW9kZV9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmWGZlcm1vZGVfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMwMWMxYS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmZYZmVybW9kZV9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuQWxwaGFDb21wb3NpdGU7Ci1pbXBvcnQgamF2YS5hd3QuQ29tcG9zaXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmWGZlcm1vZGUKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBQb3J0ZXJEdWZmWGZlcm1vZGUgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgUG9ydGVyRHVmZlhmZXJtb2RlIGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBYZmVybW9kZV9EZWxlZ2F0ZX0sIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYQotICoge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sIGFzIGFsbCB0aGUgUGF0aEVmZmVjdCBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkKLSAqIHtAbGluayBYZmVybW9kZV9EZWxlZ2F0ZX0uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUG9ydGVyRHVmZlhmZXJtb2RlX0RlbGVnYXRlIGV4dGVuZHMgWGZlcm1vZGVfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIHByaXZhdGUgZmluYWwgaW50IG1Nb2RlOwotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHVibGljIFBvcnRlckR1ZmYuTW9kZSBnZXRNb2RlKCkgewotICAgICAgICByZXR1cm4gZ2V0UG9ydGVyRHVmZk1vZGUobU1vZGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb21wb3NpdGUgZ2V0Q29tcG9zaXRlKGludCBhbHBoYSkgewotICAgICAgICByZXR1cm4gZ2V0Q29tcG9zaXRlKGdldFBvcnRlckR1ZmZNb2RlKG1Nb2RlKSwgYWxwaGEpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICAvLyBubyBtZXNzYWdlIHNpbmNlIGlzU3VwcG9ydGVkIHJldHVybnMgdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBQb3J0ZXJEdWZmLk1vZGUgZ2V0UG9ydGVyRHVmZk1vZGUoaW50IG1vZGUpIHsKLSAgICAgICAgZm9yIChQb3J0ZXJEdWZmLk1vZGUgbSA6IFBvcnRlckR1ZmYuTW9kZS52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKG0ubmF0aXZlSW50ID09IG1vZGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJVbmtub3duIFBvcnRlckR1ZmYuTW9kZTogJWQiLCBtb2RlKSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgcmV0dXJuIFBvcnRlckR1ZmYuTW9kZS5TUkNfT1ZFUjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIENvbXBvc2l0ZSBnZXRDb21wb3NpdGUoUG9ydGVyRHVmZi5Nb2RlIG1vZGUsIGludCBhbHBoYSkgewotICAgICAgICBmbG9hdCBmYWxwaGEgPSBhbHBoYSAhPSAweEZGID8gKGZsb2F0KWFscGhhIC8gMjU1LmYgOiAxLmY7Ci0gICAgICAgIHN3aXRjaCAobW9kZSkgewotICAgICAgICAgICAgY2FzZSBDTEVBUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoQWxwaGFDb21wb3NpdGUuQ0xFQVIsIGZhbHBoYSk7Ci0gICAgICAgICAgICBjYXNlIERBUktFTjoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRFNUOgotICAgICAgICAgICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5EU1QsIGZhbHBoYSk7Ci0gICAgICAgICAgICBjYXNlIERTVF9BVE9QOgotICAgICAgICAgICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5EU1RfQVRPUCwgZmFscGhhKTsKLSAgICAgICAgICAgIGNhc2UgRFNUX0lOOgotICAgICAgICAgICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5EU1RfSU4sIGZhbHBoYSk7Ci0gICAgICAgICAgICBjYXNlIERTVF9PVVQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFscGhhQ29tcG9zaXRlLmdldEluc3RhbmNlKEFscGhhQ29tcG9zaXRlLkRTVF9PVVQsIGZhbHBoYSk7Ci0gICAgICAgICAgICBjYXNlIERTVF9PVkVSOgotICAgICAgICAgICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5EU1RfT1ZFUiwgZmFscGhhKTsKLSAgICAgICAgICAgIGNhc2UgTElHSFRFTjoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTVVMVElQTFk6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNDUkVFTjoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU1JDOgotICAgICAgICAgICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5TUkMsIGZhbHBoYSk7Ci0gICAgICAgICAgICBjYXNlIFNSQ19BVE9QOgotICAgICAgICAgICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5TUkNfQVRPUCwgZmFscGhhKTsKLSAgICAgICAgICAgIGNhc2UgU1JDX0lOOgotICAgICAgICAgICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5TUkNfSU4sIGZhbHBoYSk7Ci0gICAgICAgICAgICBjYXNlIFNSQ19PVVQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFscGhhQ29tcG9zaXRlLmdldEluc3RhbmNlKEFscGhhQ29tcG9zaXRlLlNSQ19PVVQsIGZhbHBoYSk7Ci0gICAgICAgICAgICBjYXNlIFNSQ19PVkVSOgotICAgICAgICAgICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5TUkNfT1ZFUiwgZmFscGhhKTsKLSAgICAgICAgICAgIGNhc2UgWE9SOgotICAgICAgICAgICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5YT1IsIGZhbHBoYSk7Ci0gICAgICAgIH0KLQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfQlJPS0VOLAotICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlVuc3VwcG9ydGVkIFBvcnRlckR1ZmYgTW9kZTogJXMiLCBtb2RlLm5hbWUoKSksCi0gICAgICAgICAgICAgICAgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0KLSAgICAgICAgcmV0dXJuIEFscGhhQ29tcG9zaXRlLmdldEluc3RhbmNlKEFscGhhQ29tcG9zaXRlLlNSQ19PVkVSLCBmYWxwaGEpOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGVYZmVybW9kZShpbnQgbW9kZSkgewotICAgICAgICBQb3J0ZXJEdWZmWGZlcm1vZGVfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgUG9ydGVyRHVmZlhmZXJtb2RlX0RlbGVnYXRlKG1vZGUpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwcml2YXRlIFBvcnRlckR1ZmZYZmVybW9kZV9EZWxlZ2F0ZShpbnQgbW9kZSkgewotICAgICAgICBtTW9kZSA9IG1vZGU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9SYWRpYWxHcmFkaWVudF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9SYWRpYWxHcmFkaWVudF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmU0NWZhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUmFkaWFsR3JhZGllbnRfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU2hhZGVyLlRpbGVNb2RlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5SYWRpYWxHcmFkaWVudAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFJhZGlhbEdyYWRpZW50IGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFJhZGlhbEdyYWRpZW50IGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBTaGFkZXJfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sCi0gKiBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkge0BsaW5rIFNoYWRlcl9EZWxlZ2F0ZX0uCi0gKgotICogQHNlZSBTaGFkZXJfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBSYWRpYWxHcmFkaWVudF9EZWxlZ2F0ZSBleHRlbmRzIEdyYWRpZW50X0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0gICAgcHJpdmF0ZSBqYXZhLmF3dC5QYWludCBtSmF2YVBhaW50OwotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGphdmEuYXd0LlBhaW50IGdldEphdmFQYWludCgpIHsKLSAgICAgICAgcmV0dXJuIG1KYXZhUGFpbnQ7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZTEoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLAotICAgICAgICAgICAgaW50IGNvbG9yc1tdLCBmbG9hdCBwb3NpdGlvbnNbXSwgaW50IHRpbGVNb2RlKSB7Ci0gICAgICAgIFJhZGlhbEdyYWRpZW50X0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IFJhZGlhbEdyYWRpZW50X0RlbGVnYXRlKHgsIHksIHJhZGl1cywKLSAgICAgICAgICAgICAgICBjb2xvcnMsIHBvc2l0aW9ucywgU2hhZGVyX0RlbGVnYXRlLmdldFRpbGVNb2RlKHRpbGVNb2RlKSk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUyKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywKLSAgICAgICAgICAgIGludCBjb2xvcjAsIGludCBjb2xvcjEsIGludCB0aWxlTW9kZSkgewotICAgICAgICByZXR1cm4gbmF0aXZlQ3JlYXRlMSh4LCB5LCByYWRpdXMsIG5ldyBpbnRbXSB7IGNvbG9yMCwgY29sb3IxIH0sIG51bGwgLypwb3NpdGlvbnMqLywKLSAgICAgICAgICAgICAgICB0aWxlTW9kZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVQb3N0Q3JlYXRlMShpbnQgbmF0aXZlX3NoYWRlciwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLAotICAgICAgICAgICAgaW50IGNvbG9yc1tdLCBmbG9hdCBwb3NpdGlvbnNbXSwgaW50IHRpbGVNb2RlKSB7Ci0gICAgICAgIC8vIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZVBvc3RDcmVhdGUyKGludCBuYXRpdmVfc2hhZGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCByYWRpdXMsCi0gICAgICAgICAgICBpbnQgY29sb3IwLCBpbnQgY29sb3IxLCBpbnQgdGlsZU1vZGUpIHsKLSAgICAgICAgLy8gbm90aGluZyB0byBiZSBkb25lIGhlcmUuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBzaGFkZXIgdGhhdCBkcmF3cyBhIHJhZGlhbCBncmFkaWVudCBnaXZlbiB0aGUgY2VudGVyIGFuZCByYWRpdXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0geCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIHJhZGl1cwotICAgICAqIEBwYXJhbSB5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgcmFkaXVzCi0gICAgICogQHBhcmFtIHJhZGl1cyBNdXN0IGJlIHBvc2l0aXZlLiBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUgZm9yIHRoaXMKLSAgICAgKiAgICAgICAgICAgIGdyYWRpZW50Ci0gICAgICogQHBhcmFtIGNvbG9ycyBUaGUgY29sb3JzIHRvIGJlIGRpc3RyaWJ1dGVkIGJldHdlZW4gdGhlIGNlbnRlciBhbmQgZWRnZSBvZgotICAgICAqICAgICAgICAgICAgdGhlIGNpcmNsZQotICAgICAqIEBwYXJhbSBwb3NpdGlvbnMgTWF5IGJlIE5VTEwuIFRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiBlYWNoIGNvcnJlc3BvbmRpbmcKLSAgICAgKiAgICAgICAgICAgIGNvbG9yIGluIHRoZSBjb2xvcnMgYXJyYXkuIElmIHRoaXMgaXMgTlVMTCwgdGhlIHRoZSBjb2xvcnMgYXJlCi0gICAgICogICAgICAgICAgICBkaXN0cmlidXRlZCBldmVubHkgYmV0d2VlbiB0aGUgY2VudGVyIGFuZCBlZGdlIG9mIHRoZSBjaXJjbGUuCi0gICAgICogQHBhcmFtIHRpbGUgVGhlIFNoYWRlciB0aWxpbmcgbW9kZQotICAgICAqLwotICAgIHByaXZhdGUgUmFkaWFsR3JhZGllbnRfRGVsZWdhdGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLCBpbnQgY29sb3JzW10sIGZsb2F0IHBvc2l0aW9uc1tdLAotICAgICAgICAgICAgVGlsZU1vZGUgdGlsZSkgewotICAgICAgICBzdXBlcihjb2xvcnMsIHBvc2l0aW9ucyk7Ci0gICAgICAgIG1KYXZhUGFpbnQgPSBuZXcgUmFkaWFsR3JhZGllbnRQYWludCh4LCB5LCByYWRpdXMsIG1Db2xvcnMsIG1Qb3NpdGlvbnMsIHRpbGUpOwotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgUmFkaWFsR3JhZGllbnRQYWludCBleHRlbmRzIEdyYWRpZW50UGFpbnQgewotCi0gICAgICAgIHByaXZhdGUgZmluYWwgZmxvYXQgbVg7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgZmxvYXQgbVk7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgZmxvYXQgbVJhZGl1czsKLQotICAgICAgICBwdWJsaWMgUmFkaWFsR3JhZGllbnRQYWludChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCByYWRpdXMsCi0gICAgICAgICAgICAgICAgaW50W10gY29sb3JzLCBmbG9hdFtdIHBvc2l0aW9ucywgVGlsZU1vZGUgbW9kZSkgewotICAgICAgICAgICAgc3VwZXIoY29sb3JzLCBwb3NpdGlvbnMsIG1vZGUpOwotICAgICAgICAgICAgbVggPSB4OwotICAgICAgICAgICAgbVkgPSB5OwotICAgICAgICAgICAgbVJhZGl1cyA9IHJhZGl1czsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgamF2YS5hd3QuUGFpbnRDb250ZXh0IGNyZWF0ZUNvbnRleHQoCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQ29sb3JNb2RlbCAgICAgY29sb3JNb2RlbCwKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5SZWN0YW5nbGUgICAgICAgICAgICBkZXZpY2VCb3VuZHMsCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5SZWN0YW5nbGUyRCAgICAgdXNlckJvdW5kcywKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSB4Zm9ybSwKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5SZW5kZXJpbmdIaW50cyAgICAgICBoaW50cykgewotICAgICAgICAgICAgcHJlY29tcHV0ZUdyYWRpZW50Q29sb3JzKCk7Ci0KLSAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGNhbnZhc01hdHJpeDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY2FudmFzTWF0cml4ID0geGZvcm0uY3JlYXRlSW52ZXJzZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5hd3QuZ2VvbS5Ob25pbnZlcnRpYmxlVHJhbnNmb3JtRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfTUFUUklYX0lOVkVSU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGludmVyc2UgbWF0cml4IGluIFJhZGlhbEdyYWRpZW50IiwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgY2FudmFzTWF0cml4ID0gbmV3IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGxvY2FsTWF0cml4ID0gZ2V0TG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbG9jYWxNYXRyaXggPSBsb2NhbE1hdHJpeC5jcmVhdGVJbnZlcnNlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmF3dC5nZW9tLk5vbmludmVydGlibGVUcmFuc2Zvcm1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19NQVRSSVhfSU5WRVJTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gaW52ZXJzZSBtYXRyaXggaW4gUmFkaWFsR3JhZGllbnQiLCBlLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICBsb2NhbE1hdHJpeCA9IG5ldyBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGlhbEdyYWRpZW50UGFpbnRDb250ZXh0KGNhbnZhc01hdHJpeCwgbG9jYWxNYXRyaXgsIGNvbG9yTW9kZWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBSYWRpYWxHcmFkaWVudFBhaW50Q29udGV4dCBpbXBsZW1lbnRzIGphdmEuYXd0LlBhaW50Q29udGV4dCB7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gbUNhbnZhc01hdHJpeDsKLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gbUxvY2FsTWF0cml4OwotICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIG1Db2xvck1vZGVsOwotCi0gICAgICAgICAgICBwdWJsaWMgUmFkaWFsR3JhZGllbnRQYWludENvbnRleHQoCi0gICAgICAgICAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGNhbnZhc01hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gbG9jYWxNYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgIGphdmEuYXd0LmltYWdlLkNvbG9yTW9kZWwgY29sb3JNb2RlbCkgewotICAgICAgICAgICAgICAgIG1DYW52YXNNYXRyaXggPSBjYW52YXNNYXRyaXg7Ci0gICAgICAgICAgICAgICAgbUxvY2FsTWF0cml4ID0gbG9jYWxNYXRyaXg7Ci0gICAgICAgICAgICAgICAgbUNvbG9yTW9kZWwgPSBjb2xvck1vZGVsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIGphdmEuYXd0LmltYWdlLkNvbG9yTW9kZWwgZ2V0Q29sb3JNb2RlbCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbUNvbG9yTW9kZWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIGphdmEuYXd0LmltYWdlLlJhc3RlciBnZXRSYXN0ZXIoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpIHsKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlIGltYWdlID0gbmV3IGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UodywgaCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQik7Ci0KLSAgICAgICAgICAgICAgICBpbnRbXSBkYXRhID0gbmV3IGludFt3KmhdOwotCi0gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBkaXN0YW5jZSBmcm9tIGVhY2ggcG9pbnQgdG8gdGhlIGNlbnRlciwgYW5kIGZpZ3VyZSBvdXQgdGhlIGRpc3RhbmNlIGZyb20KLSAgICAgICAgICAgICAgICAvLyBpdC4KLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICAgICAgICAgIGZsb2F0W10gcHQxID0gbmV3IGZsb2F0WzJdOwotICAgICAgICAgICAgICAgIGZsb2F0W10gcHQyID0gbmV3IGZsb2F0WzJdOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGl5ID0gMCA7IGl5IDwgaCA7IGl5KyspIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaXggPSAwIDsgaXggPCB3IDsgaXgrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoZSBjYW52YXMgdHJhbnNmb3JtCi0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMF0gPSB4ICsgaXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMV0gPSB5ICsgaXk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQ2FudmFzTWF0cml4LnRyYW5zZm9ybShwdDEsIDAsIHB0MiwgMCwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSB0aGUgbG9jYWwgbWF0cml4Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMF0gPSBwdDJbMF0gLSBtWDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0MVsxXSA9IHB0MlsxXSAtIG1ZOwotICAgICAgICAgICAgICAgICAgICAgICAgbUxvY2FsTWF0cml4LnRyYW5zZm9ybShwdDEsIDAsIHB0MiwgMCwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IF94ID0gcHQyWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgX3kgPSBwdDJbMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IChmbG9hdCkgTWF0aC5zcXJ0KF94ICogX3ggKyBfeSAqIF95KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpbmRleCsrXSA9IGdldEdyYWRpZW50Q29sb3IoZGlzdGFuY2UgLyBtUmFkaXVzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGltYWdlLnNldFJHQigwIC8qc3RhcnRYKi8sIDAgLypzdGFydFkqLywgdywgaCwgZGF0YSwgMCAvKm9mZnNldCovLCB3IC8qc2NhbnNpemUqLyk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UuZ2V0UmFzdGVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9SYXN0ZXJpemVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1Jhc3Rlcml6ZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgxMmI2Yi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1Jhc3Rlcml6ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuUmFzdGVyaXplcgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFJhc3Rlcml6ZXIgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgUmFzdGVyaXplciBjbGFzcy4KLSAqCi0gKiBUaGlzIGFsc28gc2VydmUgYXMgYSBiYXNlIGNsYXNzIGZvciBhbGwgUmFzdGVyaXplciBkZWxlZ2F0ZSBjbGFzc2VzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmFzdGVyaXplcl9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIG1hbmFnZXIgLS0tLQotICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPFJhc3Rlcml6ZXJfRGVsZWdhdGU+IHNNYW5hZ2VyID0KLSAgICAgICAgICAgIG5ldyBEZWxlZ2F0ZU1hbmFnZXI8UmFzdGVyaXplcl9EZWxlZ2F0ZT4oUmFzdGVyaXplcl9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGhlbHBlciBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIFJhc3Rlcml6ZXJfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5hdGl2ZVNoYWRlcikgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlU2hhZGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1N1cHBvcnRlZCgpOwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKTsKLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgZmluYWxpemVyKGludCBuYXRpdmVfaW5zdGFuY2UpIHsKLSAgICAgICAgc01hbmFnZXIucmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihuYXRpdmVfaW5zdGFuY2UpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9SZWdpb25fRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IzMWI4Zi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7Ci0KLWltcG9ydCBqYXZhLmF3dC5SZWN0YW5nbGU7Ci1pbXBvcnQgamF2YS5hd3QuU2hhcGU7Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm07Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5BcmVhOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQ7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlJlZ2lvbgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFJlZ2lvbiBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBSZWdpb24gY2xhc3MuCi0gKgotICogVGhpcyBhbHNvIHNlcnZlIGFzIGEgYmFzZSBjbGFzcyBmb3IgYWxsIFJlZ2lvbiBkZWxlZ2F0ZSBjbGFzc2VzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUmVnaW9uX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBEZWxlZ2F0ZU1hbmFnZXI8UmVnaW9uX0RlbGVnYXRlPiBzTWFuYWdlciA9Ci0gICAgICAgICAgICBuZXcgRGVsZWdhdGVNYW5hZ2VyPFJlZ2lvbl9EZWxlZ2F0ZT4oUmVnaW9uX0RlbGVnYXRlLmNsYXNzKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgaGVscGVyIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLSAgICBwcml2YXRlIEFyZWEgbUFyZWEgPSBuZXcgQXJlYSgpOwotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHVibGljIHN0YXRpYyBSZWdpb25fRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5hdGl2ZVNoYWRlcikgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlU2hhZGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQXJlYSBnZXRKYXZhQXJlYSgpIHsKLSAgICAgICAgcmV0dXJuIG1BcmVhOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbWJpbmVzIHR3byB7QGxpbmsgU2hhcGV9IGludG8gYW5vdGhlciBvbmUgKGFjdHVhbGx5IGFuIHtAbGluayBBcmVhfSksIGFjY29yZGluZwotICAgICAqIHRvIHRoZSBnaXZlbiB7QGxpbmsgUmVnaW9uLk9wfS4KLSAgICAgKgotICAgICAqIElmIHRoZSBPcCBpcyBub3Qgb25lIHRoYXQgY29tYmluZXMgdHdvIHNoYXBlcywgdGhlbiB0aGlzIHJldHVybiBudWxsCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2hhcGUxIHRoZSBmaXJ0IHNoYXBlIHRvIGNvbWJpbmUgd2hpY2ggY2FuIGJlIG51bGwgaWYgdGhlcmUncyBubyBvcmlnaW5hbCBjbGlwLgotICAgICAqIEBwYXJhbSBzaGFwZTIgdGhlIDJuZCBzaGFwZSB0byBjb21iaW5lCi0gICAgICogQHBhcmFtIHJlZ2lvbk9wIHRoZSBvcGVyYW5kZSBmb3IgdGhlIGNvbWJpbmUKLSAgICAgKiBAcmV0dXJuIGEgbmV3IGFyZWEgb3IgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEFyZWEgY29tYmluZVNoYXBlcyhTaGFwZSBzaGFwZTEsIFNoYXBlIHNoYXBlMiwgaW50IHJlZ2lvbk9wKSB7Ci0gICAgICAgIGlmIChyZWdpb25PcCA9PSBSZWdpb24uT3AuRElGRkVSRU5DRS5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgIC8vIGlmIHNoYXBlMSBpcyBudWxsIChlbXB0eSksIHRoZW4gdGhlIHJlc3VsdCBpcyBudWxsLgotICAgICAgICAgICAgaWYgKHNoYXBlMSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHJlc3VsdCBpcyBhbHdheXMgYSBuZXcgYXJlYS4KLSAgICAgICAgICAgIEFyZWEgcmVzdWx0ID0gbmV3IEFyZWEoc2hhcGUxKTsKLSAgICAgICAgICAgIHJlc3VsdC5zdWJ0cmFjdChzaGFwZTIgaW5zdGFuY2VvZiBBcmVhID8gKEFyZWEpIHNoYXBlMiA6IG5ldyBBcmVhKHNoYXBlMikpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICB9IGVsc2UgaWYgKHJlZ2lvbk9wID09IFJlZ2lvbi5PcC5JTlRFUlNFQ1QubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAvLyBpZiBzaGFwZTEgaXMgbnVsbCwgdGhlbiB0aGUgcmVzdWx0IGlzIHNpbXBseSBzaGFwZTIuCi0gICAgICAgICAgICBpZiAoc2hhcGUxID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFyZWEoc2hhcGUyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gcmVzdWx0IGlzIGFsd2F5cyBhIG5ldyBhcmVhLgotICAgICAgICAgICAgQXJlYSByZXN1bHQgPSBuZXcgQXJlYShzaGFwZTEpOwotICAgICAgICAgICAgcmVzdWx0LmludGVyc2VjdChzaGFwZTIgaW5zdGFuY2VvZiBBcmVhID8gKEFyZWEpIHNoYXBlMiA6IG5ldyBBcmVhKHNoYXBlMikpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICB9IGVsc2UgaWYgKHJlZ2lvbk9wID09IFJlZ2lvbi5PcC5VTklPTi5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgIC8vIGlmIHNoYXBlMSBpcyBudWxsLCB0aGVuIHRoZSByZXN1bHQgaXMgc2ltcGx5IHNoYXBlMi4KLSAgICAgICAgICAgIGlmIChzaGFwZTEgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJlYShzaGFwZTIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyByZXN1bHQgaXMgYWx3YXlzIGEgbmV3IGFyZWEuCi0gICAgICAgICAgICBBcmVhIHJlc3VsdCA9IG5ldyBBcmVhKHNoYXBlMSk7Ci0gICAgICAgICAgICByZXN1bHQuYWRkKHNoYXBlMiBpbnN0YW5jZW9mIEFyZWEgPyAoQXJlYSkgc2hhcGUyIDogbmV3IEFyZWEoc2hhcGUyKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIH0gZWxzZSBpZiAocmVnaW9uT3AgPT0gUmVnaW9uLk9wLlhPUi5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgIC8vIGlmIHNoYXBlMSBpcyBudWxsLCB0aGVuIHRoZSByZXN1bHQgaXMgc2ltcGx5IHNoYXBlMgotICAgICAgICAgICAgaWYgKHNoYXBlMSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcmVhKHNoYXBlMik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHJlc3VsdCBpcyBhbHdheXMgYSBuZXcgYXJlYS4KLSAgICAgICAgICAgIEFyZWEgcmVzdWx0ID0gbmV3IEFyZWEoc2hhcGUxKTsKLSAgICAgICAgICAgIHJlc3VsdC5leGNsdXNpdmVPcihzaGFwZTIgaW5zdGFuY2VvZiBBcmVhID8gKEFyZWEpIHNoYXBlMiA6IG5ldyBBcmVhKHNoYXBlMikpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICB9IGVsc2UgaWYgKHJlZ2lvbk9wID09IFJlZ2lvbi5PcC5SRVZFUlNFX0RJRkZFUkVOQ0UubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAvLyByZXN1bHQgaXMgYWx3YXlzIGEgbmV3IGFyZWEuCi0gICAgICAgICAgICBBcmVhIHJlc3VsdCA9IG5ldyBBcmVhKHNoYXBlMik7Ci0KLSAgICAgICAgICAgIGlmIChzaGFwZTEgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlc3VsdC5zdWJ0cmFjdChzaGFwZTEgaW5zdGFuY2VvZiBBcmVhID8gKEFyZWEpIHNoYXBlMSA6IG5ldyBBcmVhKHNoYXBlMSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBpc0VtcHR5KFJlZ2lvbiB0aGlzUmVnaW9uKSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb25EZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNSZWdpb24ubU5hdGl2ZVJlZ2lvbik7Ci0gICAgICAgIGlmIChyZWdpb25EZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZWdpb25EZWxlZ2F0ZS5tQXJlYS5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gaXNSZWN0KFJlZ2lvbiB0aGlzUmVnaW9uKSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb25EZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNSZWdpb24ubU5hdGl2ZVJlZ2lvbik7Ci0gICAgICAgIGlmIChyZWdpb25EZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZWdpb25EZWxlZ2F0ZS5tQXJlYS5pc1JlY3Rhbmd1bGFyKCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gaXNDb21wbGV4KFJlZ2lvbiB0aGlzUmVnaW9uKSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb25EZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNSZWdpb24ubU5hdGl2ZVJlZ2lvbik7Ci0gICAgICAgIGlmIChyZWdpb25EZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZWdpb25EZWxlZ2F0ZS5tQXJlYS5pc1Npbmd1bGFyKCkgPT0gZmFsc2U7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gY29udGFpbnMoUmVnaW9uIHRoaXNSZWdpb24sIGludCB4LCBpbnQgeSkgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUmVnaW9uLm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAocmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlZ2lvbkRlbGVnYXRlLm1BcmVhLmNvbnRhaW5zKHgsIHkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIHF1aWNrQ29udGFpbnMoUmVnaW9uIHRoaXNSZWdpb24sCi0gICAgICAgICAgICBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb25EZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNSZWdpb24ubU5hdGl2ZVJlZ2lvbik7Ci0gICAgICAgIGlmIChyZWdpb25EZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVnaW9uRGVsZWdhdGUubUFyZWEuaXNSZWN0YW5ndWxhcigpICYmCi0gICAgICAgICAgICAgICAgcmVnaW9uRGVsZWdhdGUubUFyZWEuY29udGFpbnMobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gcXVpY2tSZWplY3QoUmVnaW9uIHRoaXNSZWdpb24sCi0gICAgICAgICAgICBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb25EZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNSZWdpb24ubU5hdGl2ZVJlZ2lvbik7Ci0gICAgICAgIGlmIChyZWdpb25EZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVnaW9uRGVsZWdhdGUubUFyZWEuaXNFbXB0eSgpIHx8Ci0gICAgICAgICAgICAgICAgcmVnaW9uRGVsZWdhdGUubUFyZWEuaW50ZXJzZWN0cyhsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSA9PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBxdWlja1JlamVjdChSZWdpb24gdGhpc1JlZ2lvbiwgUmVnaW9uIHJnbikgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUmVnaW9uLm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAocmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHRhcmdldFJlZ2lvbkRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUocmduLm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAodGFyZ2V0UmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlZ2lvbkRlbGVnYXRlLm1BcmVhLmlzRW1wdHkoKSB8fAotICAgICAgICAgICAgICAgIHJlZ2lvbkRlbGVnYXRlLm1BcmVhLmdldEJvdW5kcygpLmludGVyc2VjdHMoCi0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWdpb25EZWxlZ2F0ZS5tQXJlYS5nZXRCb3VuZHMoKSkgPT0gZmFsc2U7Ci0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoUmVnaW9uIHRoaXNSZWdpb24sIGludCBkeCwgaW50IGR5LCBSZWdpb24gZHN0KSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb25EZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNSZWdpb24ubU5hdGl2ZVJlZ2lvbik7Ci0gICAgICAgIGlmIChyZWdpb25EZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdpb25fRGVsZWdhdGUgdGFyZ2V0UmVnaW9uRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShkc3QubU5hdGl2ZVJlZ2lvbik7Ci0gICAgICAgIGlmICh0YXJnZXRSZWdpb25EZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVnaW9uRGVsZWdhdGUubUFyZWEuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB0YXJnZXRSZWdpb25EZWxlZ2F0ZS5tQXJlYSA9IG5ldyBBcmVhKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0YXJnZXRSZWdpb25EZWxlZ2F0ZS5tQXJlYSA9IG5ldyBBcmVhKHJlZ2lvbkRlbGVnYXRlLm1BcmVhKTsKLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtdHggPSBuZXcgQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICBtdHgudHJhbnNsYXRlKGR4LCBkeSk7Ci0gICAgICAgICAgICB0YXJnZXRSZWdpb25EZWxlZ2F0ZS5tQXJlYS50cmFuc2Zvcm0obXR4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNjYWxlKFJlZ2lvbiB0aGlzUmVnaW9uLCBmbG9hdCBzY2FsZSwgUmVnaW9uIGRzdCkgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUmVnaW9uLm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAocmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHRhcmdldFJlZ2lvbkRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoZHN0Lm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAodGFyZ2V0UmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlZ2lvbkRlbGVnYXRlLm1BcmVhLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgdGFyZ2V0UmVnaW9uRGVsZWdhdGUubUFyZWEgPSBuZXcgQXJlYSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGFyZ2V0UmVnaW9uRGVsZWdhdGUubUFyZWEgPSBuZXcgQXJlYShyZWdpb25EZWxlZ2F0ZS5tQXJlYSk7Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbXR4ID0gbmV3IEFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgbXR4LnNjYWxlKHNjYWxlLCBzY2FsZSk7Ci0gICAgICAgICAgICB0YXJnZXRSZWdpb25EZWxlZ2F0ZS5tQXJlYS50cmFuc2Zvcm0obXR4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ29uc3RydWN0b3IoKSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBSZWdpb25fRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVEZXN0cnVjdG9yKGludCBuYXRpdmVfcmVnaW9uKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlX3JlZ2lvbik7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlU2V0UmVnaW9uKGludCBuYXRpdmVfZHN0LCBpbnQgbmF0aXZlX3NyYykgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgZHN0UmVnaW9uID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX2RzdCk7Ci0gICAgICAgIGlmIChkc3RSZWdpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdpb25fRGVsZWdhdGUgc3JjUmVnaW9uID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX3NyYyk7Ci0gICAgICAgIGlmIChzcmNSZWdpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBkc3RSZWdpb24ubUFyZWEucmVzZXQoKTsKLSAgICAgICAgZHN0UmVnaW9uLm1BcmVhLmFkZChzcmNSZWdpb24ubUFyZWEpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZVNldFJlY3QoaW50IG5hdGl2ZV9kc3QsCi0gICAgICAgICAgICBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSBkc3RSZWdpb24gPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfZHN0KTsKLSAgICAgICAgaWYgKGRzdFJlZ2lvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGRzdFJlZ2lvbi5tQXJlYSA9IG5ldyBBcmVhKG5ldyBSZWN0YW5nbGUyRC5GbG9hdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7Ci0gICAgICAgIHJldHVybiBkc3RSZWdpb24ubUFyZWEuZ2V0Qm91bmRzKCkuaXNFbXB0eSgpID09IGZhbHNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZVNldFBhdGgoaW50IG5hdGl2ZV9kc3QsIGludCBuYXRpdmVfcGF0aCwgaW50IG5hdGl2ZV9jbGlwKSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSBkc3RSZWdpb24gPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfZHN0KTsKLSAgICAgICAgaWYgKGRzdFJlZ2lvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aCA9IFBhdGhfRGVsZWdhdGUuZ2V0RGVsZWdhdGUobmF0aXZlX3BhdGgpOwotICAgICAgICBpZiAocGF0aCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGRzdFJlZ2lvbi5tQXJlYSA9IG5ldyBBcmVhKHBhdGguZ2V0SmF2YVNoYXBlKCkpOwotCi0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSBjbGlwID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX2NsaXApOwotICAgICAgICBpZiAoY2xpcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBkc3RSZWdpb24ubUFyZWEuc3VidHJhY3QoY2xpcC5nZXRKYXZhQXJlYSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkc3RSZWdpb24ubUFyZWEuZ2V0Qm91bmRzKCkuaXNFbXB0eSgpID09IGZhbHNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZUdldEJvdW5kcyhpbnQgbmF0aXZlX3JlZ2lvbiwgUmVjdCByZWN0KSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb24gPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfcmVnaW9uKTsKLSAgICAgICAgaWYgKHJlZ2lvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlY3RhbmdsZSBib3VuZHMgPSByZWdpb24ubUFyZWEuZ2V0Qm91bmRzKCk7Ci0gICAgICAgIGlmIChib3VuZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZWN0LmxlZnQgPSByZWN0LnRvcCA9IHJlY3QucmlnaHQgPSByZWN0LmJvdHRvbSA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZWN0LmxlZnQgPSBib3VuZHMueDsKLSAgICAgICAgcmVjdC50b3AgPSBib3VuZHMueTsKLSAgICAgICAgcmVjdC5yaWdodCA9IGJvdW5kcy54ICsgYm91bmRzLndpZHRoOwotICAgICAgICByZWN0LmJvdHRvbSA9IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlR2V0Qm91bmRhcnlQYXRoKGludCBuYXRpdmVfcmVnaW9uLCBpbnQgbmF0aXZlX3BhdGgpIHsKLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHJlZ2lvbiA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9yZWdpb24pOwotICAgICAgICBpZiAocmVnaW9uID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aCA9IFBhdGhfRGVsZWdhdGUuZ2V0RGVsZWdhdGUobmF0aXZlX3BhdGgpOwotICAgICAgICBpZiAocGF0aCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVnaW9uLm1BcmVhLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcGF0aC5yZXNldCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aC5zZXRQYXRoSXRlcmF0b3IocmVnaW9uLm1BcmVhLmdldFBhdGhJdGVyYXRvcihuZXcgQWZmaW5lVHJhbnNmb3JtKCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlT3AoaW50IG5hdGl2ZV9kc3QsCi0gICAgICAgICAgICBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tLCBpbnQgb3ApIHsKLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHJlZ2lvbiA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9kc3QpOwotICAgICAgICBpZiAocmVnaW9uID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlZ2lvbi5tQXJlYSA9IGNvbWJpbmVTaGFwZXMocmVnaW9uLm1BcmVhLAotICAgICAgICAgICAgICAgIG5ldyBSZWN0YW5nbGUyRC5GbG9hdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSwgb3ApOwotCi0gICAgICAgIGFzc2VydCByZWdpb24ubUFyZWEgIT0gbnVsbDsKLSAgICAgICAgaWYgKHJlZ2lvbi5tQXJlYSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZWdpb24ubUFyZWEgPSBuZXcgQXJlYSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlZ2lvbi5tQXJlYS5nZXRCb3VuZHMoKS5pc0VtcHR5KCkgPT0gZmFsc2U7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlT3AoaW50IG5hdGl2ZV9kc3QsIFJlY3QgcmVjdCwgaW50IG5hdGl2ZV9yZWdpb24sIGludCBvcCkgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX2RzdCk7Ci0gICAgICAgIGlmIChyZWdpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVnaW9uLm1BcmVhID0gY29tYmluZVNoYXBlcyhyZWdpb24ubUFyZWEsCi0gICAgICAgICAgICAgICAgbmV3IFJlY3RhbmdsZTJELkZsb2F0KHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSksIG9wKTsKLQotICAgICAgICBhc3NlcnQgcmVnaW9uLm1BcmVhICE9IG51bGw7Ci0gICAgICAgIGlmIChyZWdpb24ubUFyZWEgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVnaW9uLm1BcmVhID0gbmV3IEFyZWEoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZWdpb24ubUFyZWEuZ2V0Qm91bmRzKCkuaXNFbXB0eSgpID09IGZhbHNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZU9wKGludCBuYXRpdmVfZHN0LAotICAgICAgICAgICAgaW50IG5hdGl2ZV9yZWdpb24xLCBpbnQgbmF0aXZlX3JlZ2lvbjIsIGludCBvcCkgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgZHN0UmVnaW9uID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX2RzdCk7Ci0gICAgICAgIGlmIChkc3RSZWdpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uMSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9yZWdpb24xKTsKLSAgICAgICAgaWYgKHJlZ2lvbjEgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHJlZ2lvbjIgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfcmVnaW9uMik7Ci0gICAgICAgIGlmIChyZWdpb24yID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGRzdFJlZ2lvbi5tQXJlYSA9IGNvbWJpbmVTaGFwZXMocmVnaW9uMS5tQXJlYSwgcmVnaW9uMi5tQXJlYSwgb3ApOwotCi0gICAgICAgIGFzc2VydCBkc3RSZWdpb24ubUFyZWEgIT0gbnVsbDsKLSAgICAgICAgaWYgKGRzdFJlZ2lvbi5tQXJlYSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBkc3RSZWdpb24ubUFyZWEgPSBuZXcgQXJlYSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRzdFJlZ2lvbi5tQXJlYS5nZXRCb3VuZHMoKS5pc0VtcHR5KCkgPT0gZmFsc2U7Ci0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHApIHsKLSAgICAgICAgLy8gVGhpcyBpcyBvbmx5IGNhbGxlZCBieSBSZWdpb24uQ1JFQVRPUiAoUGFyY2VsYWJsZS5DcmVhdG9yPFJlZ2lvbj4pLCB3aGljaCBpcyBvbmx5Ci0gICAgICAgIC8vIHVzZWQgZHVyaW5nIGFpZGwgY2FsbCBzbyByZWFsbHkgdGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZC4KLSAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIkFJREwgaXMgbm90IHN1cHBvcmVkLCBhbmQgdGhlcmVmb3JlIFJlZ2lvbnMgY2Fubm90IGJlIGNyZWF0ZWQgZnJvbSBwYXJjZWxzLiIsCi0gICAgICAgICAgICAgICAgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZVdyaXRlVG9QYXJjZWwoaW50IG5hdGl2ZV9yZWdpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJjZWwgcCkgewotICAgICAgICAvLyBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gc2VuZGluZyBhIHJlZ2lvbiB0aHJvdWdoIGFpZGwsIHNvIHJlYWxseSB0aGlzIHNob3VsZCBub3QKLSAgICAgICAgLy8gYmUgY2FsbGVkLgotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQUlETCBpcyBub3Qgc3VwcG9yZWQsIGFuZCB0aGVyZWZvcmUgUmVnaW9ucyBjYW5ub3QgYmUgd3JpdHRlbiB0byBwYXJjZWxzLiIsCi0gICAgICAgICAgICAgICAgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVFcXVhbHMoaW50IG5hdGl2ZV9yMSwgaW50IG5hdGl2ZV9yMikgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uMSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9yMSk7Ci0gICAgICAgIGlmIChyZWdpb24xID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb24yID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX3IyKTsKLSAgICAgICAgaWYgKHJlZ2lvbjIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlZ2lvbjEubUFyZWEuZXF1YWxzKHJlZ2lvbjIubUFyZWEpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgbmF0aXZlVG9TdHJpbmcoaW50IG5hdGl2ZV9yZWdpb24pIHsKLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHJlZ2lvbiA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9yZWdpb24pOwotICAgICAgICBpZiAocmVnaW9uID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAibm90IGZvdW5kIjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZWdpb24ubUFyZWEudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1NoYWRlcl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9TaGFkZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY4YzAzODQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9TaGFkZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlNoYWRlci5UaWxlTW9kZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuU2hhZGVyCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgU2hhZGVyIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFNoYWRlciBjbGFzcy4KLSAqCi0gKiBUaGlzIGFsc28gc2VydmUgYXMgYSBiYXNlIGNsYXNzIGZvciBhbGwgU2hhZGVyIGRlbGVnYXRlIGNsYXNzZXMuCi0gKgotICogQHNlZSBEZWxlZ2F0ZU1hbmFnZXIKLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTaGFkZXJfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBtYW5hZ2VyIC0tLS0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIERlbGVnYXRlTWFuYWdlcjxTaGFkZXJfRGVsZWdhdGU+IHNNYW5hZ2VyID0KLSAgICAgICAgICAgIG5ldyBEZWxlZ2F0ZU1hbmFnZXI8U2hhZGVyX0RlbGVnYXRlPihTaGFkZXJfRGVsZWdhdGUuY2xhc3MpOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBoZWxwZXIgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotICAgIHByaXZhdGUgTWF0cml4X0RlbGVnYXRlIG1Mb2NhbE1hdHJpeCA9IG51bGw7Ci0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIFNoYWRlcl9EZWxlZ2F0ZSBnZXREZWxlZ2F0ZShpbnQgbmF0aXZlU2hhZGVyKSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVTaGFkZXIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHtAbGluayBUaWxlTW9kZX0gbWF0Y2hpbmcgdGhlIGdpdmVuIGludC4KLSAgICAgKiBAcGFyYW0gdGlsZU1vZGUgdGhlIHRpbGUgbW9kZSBpbnQgdmFsdWUKLSAgICAgKiBAcmV0dXJuIHRoZSBUaWxlTW9kZSBlbnVtLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgVGlsZU1vZGUgZ2V0VGlsZU1vZGUoaW50IHRpbGVNb2RlKSB7Ci0gICAgICAgIGZvciAoVGlsZU1vZGUgdG0gOiBUaWxlTW9kZS52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHRtLm5hdGl2ZUludCA9PSB0aWxlTW9kZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0bTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgcmV0dXJuIFRpbGVNb2RlLkNMQU1QOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmF3dC5QYWludCBnZXRKYXZhUGFpbnQoKTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1N1cHBvcnRlZCgpOwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKTsKLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlRGVzdHJ1Y3RvcihpbnQgbmF0aXZlX3NoYWRlciwgaW50IG5hdGl2ZV9za2lhU2hhZGVyKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlX3NoYWRlcik7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlU2V0TG9jYWxNYXRyaXgoaW50IG5hdGl2ZV9zaGFkZXIsIGludCBuYXRpdmVfc2tpYVNoYWRlciwKLSAgICAgICAgICAgIGludCBtYXRyaXhfaW5zdGFuY2UpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBTaGFkZXJfRGVsZWdhdGUgc2hhZGVyRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfc2hhZGVyKTsKLSAgICAgICAgaWYgKHNoYWRlckRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHNoYWRlckRlbGVnYXRlLm1Mb2NhbE1hdHJpeCA9IE1hdHJpeF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShtYXRyaXhfaW5zdGFuY2UpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwcm90ZWN0ZWQgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gZ2V0TG9jYWxNYXRyaXgoKSB7Ci0gICAgICAgIGlmIChtTG9jYWxNYXRyaXggIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1Mb2NhbE1hdHJpeC5nZXRBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuZXcgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvU3VtUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9TdW1QYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMGRmMGMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9TdW1QYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBqYXZhLmF3dC5TdHJva2U7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlN1bVBhdGhFZmZlY3QKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBTdW1QYXRoRWZmZWN0IGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFN1bVBhdGhFZmZlY3QgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sCi0gKiBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgUGF0aEVmZmVjdF9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIFN1bVBhdGhFZmZlY3RfRGVsZWdhdGUgZXh0ZW5kcyBQYXRoRWZmZWN0X0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3Ryb2tlIGdldFN0cm9rZShQYWludF9EZWxlZ2F0ZSBwYWludCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiU3VtIFBhdGggRWZmZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBMYXlvdXQgUHJldmlldyBtb2RlLiI7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZShpbnQgZmlyc3QsIGludCBzZWNvbmQpIHsKLSAgICAgICAgU3VtUGF0aEVmZmVjdF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBTdW1QYXRoRWZmZWN0X0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvU3dlZXBHcmFkaWVudF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Td2VlcEdyYWRpZW50X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYWUxMmUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Td2VlcEdyYWRpZW50X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlN3ZWVwR3JhZGllbnQKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBTd2VlcEdyYWRpZW50IGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFN3ZWVwR3JhZGllbnQgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIFNoYWRlcl9EZWxlZ2F0ZX0sIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYSB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfSwKLSAqIGFzIGFsbCB0aGUgU2hhZGVyIGNsYXNzZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuYWdlciBvd25lZCBieSB7QGxpbmsgU2hhZGVyX0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIFNoYWRlcl9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIFN3ZWVwR3JhZGllbnRfRGVsZWdhdGUgZXh0ZW5kcyBHcmFkaWVudF9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotICAgIHByaXZhdGUgamF2YS5hd3QuUGFpbnQgbUphdmFQYWludDsKLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBqYXZhLmF3dC5QYWludCBnZXRKYXZhUGFpbnQoKSB7Ci0gICAgICAgIHJldHVybiBtSmF2YVBhaW50OwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUxKGZsb2F0IHgsIGZsb2F0IHksIGludCBjb2xvcnNbXSwgZmxvYXQgcG9zaXRpb25zW10pIHsKLSAgICAgICAgU3dlZXBHcmFkaWVudF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBTd2VlcEdyYWRpZW50X0RlbGVnYXRlKHgsIHksIGNvbG9ycywgcG9zaXRpb25zKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZTIoZmxvYXQgeCwgZmxvYXQgeSwgaW50IGNvbG9yMCwgaW50IGNvbG9yMSkgewotICAgICAgICByZXR1cm4gbmF0aXZlQ3JlYXRlMSh4LCB5LCBuZXcgaW50W10geyBjb2xvcjAsIGNvbG9yMSB9LCBudWxsIC8qcG9zaXRpb25zKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlUG9zdENyZWF0ZTEoaW50IG5hdGl2ZV9zaGFkZXIsIGZsb2F0IGN4LCBmbG9hdCBjeSwKLSAgICAgICAgICAgIGludFtdIGNvbG9ycywgZmxvYXRbXSBwb3NpdGlvbnMpIHsKLSAgICAgICAgLy8gbm90aGluZyB0byBiZSBkb25lIGhlcmUuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlUG9zdENyZWF0ZTIoaW50IG5hdGl2ZV9zaGFkZXIsIGZsb2F0IGN4LCBmbG9hdCBjeSwKLSAgICAgICAgICAgIGludCBjb2xvcjAsIGludCBjb2xvcjEpIHsKLSAgICAgICAgLy8gbm90aGluZyB0byBiZSBkb25lIGhlcmUuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICAvKioKLSAgICAgKiBBIHN1YmNsYXNzIG9mIFNoYWRlciB0aGF0IGRyYXdzIGEgc3dlZXAgZ3JhZGllbnQgYXJvdW5kIGEgY2VudGVyIHBvaW50LgotICAgICAqCi0gICAgICogQHBhcmFtIGN4ICAgICAgIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlcgotICAgICAqIEBwYXJhbSBjeSAgICAgICBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIKLSAgICAgKiBAcGFyYW0gY29sb3JzICAgVGhlIGNvbG9ycyB0byBiZSBkaXN0cmlidXRlZCBiZXR3ZWVuIGFyb3VuZCB0aGUgY2VudGVyLgotICAgICAqICAgICAgICAgICAgICAgICBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDIgY29sb3JzIGluIHRoZSBhcnJheS4KLSAgICAgKiBAcGFyYW0gcG9zaXRpb25zIE1heSBiZSBOVUxMLiBUaGUgcmVsYXRpdmUgcG9zaXRpb24gb2YKLSAgICAgKiAgICAgICAgICAgICAgICAgZWFjaCBjb3JyZXNwb25kaW5nIGNvbG9yIGluIHRoZSBjb2xvcnMgYXJyYXksIGJlZ2lubmluZwotICAgICAqICAgICAgICAgICAgICAgICB3aXRoIDAgYW5kIGVuZGluZyB3aXRoIDEuMC4gSWYgdGhlIHZhbHVlcyBhcmUgbm90Ci0gICAgICogICAgICAgICAgICAgICAgIG1vbm90b25pYywgdGhlIGRyYXdpbmcgbWF5IHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLgotICAgICAqICAgICAgICAgICAgICAgICBJZiBwb3NpdGlvbnMgaXMgTlVMTCwgdGhlbiB0aGUgY29sb3JzIGFyZSBhdXRvbWF0aWNhbGx5Ci0gICAgICogICAgICAgICAgICAgICAgIHNwYWNlZCBldmVubHkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBTd2VlcEdyYWRpZW50X0RlbGVnYXRlKGZsb2F0IGN4LCBmbG9hdCBjeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sb3JzW10sIGZsb2F0IHBvc2l0aW9uc1tdKSB7Ci0gICAgICAgIHN1cGVyKGNvbG9ycywgcG9zaXRpb25zKTsKLSAgICAgICAgbUphdmFQYWludCA9IG5ldyBTd2VlcEdyYWRpZW50UGFpbnQoY3gsIGN5LCBtQ29sb3JzLCBtUG9zaXRpb25zKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIFN3ZWVwR3JhZGllbnRQYWludCBleHRlbmRzIEdyYWRpZW50UGFpbnQgewotCi0gICAgICAgIHByaXZhdGUgZmluYWwgZmxvYXQgbUN4OwotICAgICAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1DeTsKLQotICAgICAgICBwdWJsaWMgU3dlZXBHcmFkaWVudFBhaW50KGZsb2F0IGN4LCBmbG9hdCBjeSwgaW50W10gY29sb3JzLAotICAgICAgICAgICAgICAgIGZsb2F0W10gcG9zaXRpb25zKSB7Ci0gICAgICAgICAgICBzdXBlcihjb2xvcnMsIHBvc2l0aW9ucywgbnVsbCAvKnRpbGVNb2RlKi8pOwotICAgICAgICAgICAgbUN4ID0gY3g7Ci0gICAgICAgICAgICBtQ3kgPSBjeTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgamF2YS5hd3QuUGFpbnRDb250ZXh0IGNyZWF0ZUNvbnRleHQoCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQ29sb3JNb2RlbCAgICAgY29sb3JNb2RlbCwKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5SZWN0YW5nbGUgICAgICAgICAgICBkZXZpY2VCb3VuZHMsCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5SZWN0YW5nbGUyRCAgICAgdXNlckJvdW5kcywKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSB4Zm9ybSwKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5SZW5kZXJpbmdIaW50cyAgICAgICBoaW50cykgewotICAgICAgICAgICAgcHJlY29tcHV0ZUdyYWRpZW50Q29sb3JzKCk7Ci0KLSAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGNhbnZhc01hdHJpeDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY2FudmFzTWF0cml4ID0geGZvcm0uY3JlYXRlSW52ZXJzZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5hd3QuZ2VvbS5Ob25pbnZlcnRpYmxlVHJhbnNmb3JtRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfTUFUUklYX0lOVkVSU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGludmVyc2UgbWF0cml4IGluIFN3ZWVwR3JhZGllbnQiLCBlLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICBjYW52YXNNYXRyaXggPSBuZXcgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gbG9jYWxNYXRyaXggPSBnZXRMb2NhbE1hdHJpeCgpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBsb2NhbE1hdHJpeCA9IGxvY2FsTWF0cml4LmNyZWF0ZUludmVyc2UoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGphdmEuYXd0Lmdlb20uTm9uaW52ZXJ0aWJsZVRyYW5zZm9ybUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX01BVFJJWF9JTlZFUlNFLAotICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBpbnZlcnNlIG1hdHJpeCBpbiBTd2VlcEdyYWRpZW50IiwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgbG9jYWxNYXRyaXggPSBuZXcgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBTd2VlcEdyYWRpZW50UGFpbnRDb250ZXh0KGNhbnZhc01hdHJpeCwgbG9jYWxNYXRyaXgsIGNvbG9yTW9kZWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBTd2VlcEdyYWRpZW50UGFpbnRDb250ZXh0IGltcGxlbWVudHMgamF2YS5hd3QuUGFpbnRDb250ZXh0IHsKLQotICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBtQ2FudmFzTWF0cml4OwotICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBtTG9jYWxNYXRyaXg7Ci0gICAgICAgICAgICBwcml2YXRlIGZpbmFsIGphdmEuYXd0LmltYWdlLkNvbG9yTW9kZWwgbUNvbG9yTW9kZWw7Ci0KLSAgICAgICAgICAgIHB1YmxpYyBTd2VlcEdyYWRpZW50UGFpbnRDb250ZXh0KAotICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBjYW52YXNNYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGxvY2FsTWF0cml4LAotICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIGNvbG9yTW9kZWwpIHsKLSAgICAgICAgICAgICAgICBtQ2FudmFzTWF0cml4ID0gY2FudmFzTWF0cml4OwotICAgICAgICAgICAgICAgIG1Mb2NhbE1hdHJpeCA9IGxvY2FsTWF0cml4OwotICAgICAgICAgICAgICAgIG1Db2xvck1vZGVsID0gY29sb3JNb2RlbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIGdldENvbG9yTW9kZWwoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1Db2xvck1vZGVsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBqYXZhLmF3dC5pbWFnZS5SYXN0ZXIgZ2V0UmFzdGVyKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSBpbWFnZSA9IG5ldyBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlKHcsIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0IpOwotCi0gICAgICAgICAgICAgICAgaW50W10gZGF0YSA9IG5ldyBpbnRbdypoXTsKLQotICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgYW5nbGUgZnJvbSBlYWNoIHBvaW50IHRvIHRoZSBjZW50ZXIsIGFuZCBmaWd1cmUgb3V0IHRoZSBkaXN0YW5jZSBmcm9tCi0gICAgICAgICAgICAgICAgLy8gaXQuCi0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICBmbG9hdFtdIHB0MSA9IG5ldyBmbG9hdFsyXTsKLSAgICAgICAgICAgICAgICBmbG9hdFtdIHB0MiA9IG5ldyBmbG9hdFsyXTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpeSA9IDAgOyBpeSA8IGggOyBpeSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGl4ID0gMCA7IGl4IDwgdyA7IGl4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSB0aGUgY2FudmFzIHRyYW5zZm9ybQotICAgICAgICAgICAgICAgICAgICAgICAgcHQxWzBdID0geCArIGl4OwotICAgICAgICAgICAgICAgICAgICAgICAgcHQxWzFdID0geSArIGl5OwotICAgICAgICAgICAgICAgICAgICAgICAgbUNhbnZhc01hdHJpeC50cmFuc2Zvcm0ocHQxLCAwLCBwdDIsIDAsIDEpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdGhlIGxvY2FsIG1hdHJpeAotICAgICAgICAgICAgICAgICAgICAgICAgcHQxWzBdID0gcHQyWzBdIC0gbUN4OwotICAgICAgICAgICAgICAgICAgICAgICAgcHQxWzFdID0gcHQyWzFdIC0gbUN5OwotICAgICAgICAgICAgICAgICAgICAgICAgbUxvY2FsTWF0cml4LnRyYW5zZm9ybShwdDEsIDAsIHB0MiwgMCwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGR4ID0gcHQyWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZHkgPSBwdDJbMV07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFuZ2xlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR4ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IChmbG9hdCkgKGR5IDwgMCA/IDMgKiBNYXRoLlBJIC8gMiA6IE1hdGguUEkgLyAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZHkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gKGZsb2F0KSAoZHggPCAwID8gTWF0aC5QSSA6IDApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IChmbG9hdCkgTWF0aC5hdGFuKGR5IC8gZHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR5IDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgKz0gTWF0aC5QSSAqIDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSArPSBNYXRoLlBJOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCB0byAwLTEuIHZhbHVlIGFuZCBnZXQgY29sb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaW5kZXgrK10gPSBnZXRHcmFkaWVudENvbG9yKChmbG9hdCkgKGFuZ2xlIC8gKDIgKiBNYXRoLlBJKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaW1hZ2Uuc2V0UkdCKDAgLypzdGFydFgqLywgMCAvKnN0YXJ0WSovLCB3LCBoLCBkYXRhLCAwIC8qb2Zmc2V0Ki8sIHcgLypzY2Fuc2l6ZSovKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZS5nZXRSYXN0ZXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZV9BY2Nlc3Nvci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZV9BY2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGFkMmFjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VfQWNjZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLS8qKgotICogQ2xhc3MgYWxsb3dpbmcgYWNjZXNzIHRvIHBhY2thZ2UtcHJvdGVjdGVkIG1ldGhvZHMvZmllbGRzLgotICovCi1wdWJsaWMgY2xhc3MgVHlwZWZhY2VfQWNjZXNzb3IgewotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0RGVmYXVsdHMoKSB7Ci0gICAgICAgIFR5cGVmYWNlLnNEZWZhdWx0cyA9IG51bGw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZV9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZV9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzAxY2M4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5Gb250TG9hZGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRNYW5hZ2VyOwotCi1pbXBvcnQgamF2YS5hd3QuRm9udDsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuVHlwZWZhY2UKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBUeXBlZmFjZSBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBUeXBlZmFjZSBjbGFzcy4KLSAqCi0gKiBAc2VlIERlbGVnYXRlTWFuYWdlcgotICoKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFR5cGVmYWNlX0RlbGVnYXRlIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTWVNURU1fRk9OVFMgPSAiL3N5c3RlbS9mb250cy8iOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBtYW5hZ2VyIC0tLS0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBEZWxlZ2F0ZU1hbmFnZXI8VHlwZWZhY2VfRGVsZWdhdGU+IHNNYW5hZ2VyID0KLSAgICAgICAgICAgIG5ldyBEZWxlZ2F0ZU1hbmFnZXI8VHlwZWZhY2VfRGVsZWdhdGU+KFR5cGVmYWNlX0RlbGVnYXRlLmNsYXNzKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgaGVscGVyIGRhdGEgLS0tLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0ZBTUlMWSA9ICJzYW5zLXNlcmlmIjsKLQotICAgIHByaXZhdGUgc3RhdGljIEZvbnRMb2FkZXIgc0ZvbnRMb2FkZXI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdDxUeXBlZmFjZV9EZWxlZ2F0ZT4gc1Bvc3RJbml0RGVsZWdhdGUgPQotICAgICAgICAgICAgbmV3IEFycmF5TGlzdDxUeXBlZmFjZV9EZWxlZ2F0ZT4oKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtRmFtaWx5OwotICAgIHByaXZhdGUgaW50IG1TdHlsZTsKLSAgICBwcml2YXRlIExpc3Q8Rm9udD4gbUZvbnRzOwotCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIGluaXQoRm9udExvYWRlciBmb250TG9hZGVyKSB7Ci0gICAgICAgIHNGb250TG9hZGVyID0gZm9udExvYWRlcjsKLQotICAgICAgICBmb3IgKFR5cGVmYWNlX0RlbGVnYXRlIGRlbGVnYXRlIDogc1Bvc3RJbml0RGVsZWdhdGUpIHsKLSAgICAgICAgICAgIGRlbGVnYXRlLmluaXQoKTsKLSAgICAgICAgfQotICAgICAgICBzUG9zdEluaXREZWxlZ2F0ZS5jbGVhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgVHlwZWZhY2VfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5hdGl2ZVR5cGVmYWNlKSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVUeXBlZmFjZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBMaXN0PEZvbnQ+IGdldEZvbnRzKFR5cGVmYWNlIHR5cGVmYWNlKSB7Ci0gICAgICAgIHJldHVybiBnZXRGb250cyh0eXBlZmFjZS5uYXRpdmVfaW5zdGFuY2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxGb250PiBnZXRGb250cyhpbnQgbmF0aXZlX2ludCkgewotICAgICAgICBUeXBlZmFjZV9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9pbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUuZ2V0Rm9udHMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdDxGb250PiBnZXRGb250cygpIHsKLSAgICAgICAgcmV0dXJuIG1Gb250czsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBzeW5jaHJvbml6ZWQgaW50IG5hdGl2ZUNyZWF0ZShTdHJpbmcgZmFtaWx5TmFtZSwgaW50IHN0eWxlKSB7Ci0gICAgICAgIGlmIChmYW1pbHlOYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgIGZhbWlseU5hbWUgPSBERUZBVUxUX0ZBTUlMWTsKLSAgICAgICAgfQotCi0gICAgICAgIFR5cGVmYWNlX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IFR5cGVmYWNlX0RlbGVnYXRlKGZhbWlseU5hbWUsIHN0eWxlKTsKLSAgICAgICAgaWYgKHNGb250TG9hZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG5ld0RlbGVnYXRlLmluaXQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGZvbnQgbG9hZGVyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQsIGFkZCB0aGUgZGVsZWdhdGUgdG8gYSBsaXN0IG9mIGRlbGVnYXRlcwotICAgICAgICAgICAgLy8gdG8gaW5pdCB3aGVuIHRoZSBmb250IGxvYWRlciBpcyBpbml0aWFsaXplZC4KLSAgICAgICAgICAgIC8vIFRoZXJlIHdvbid0IGJlIGFueSByZW5kZXJpbmcgYmVmb3JlIHRoaXMgaGFwcGVucyBhbnl3YXkuCi0gICAgICAgICAgICBzUG9zdEluaXREZWxlZ2F0ZS5hZGQobmV3RGVsZWdhdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgc3luY2hyb25pemVkIGludCBuYXRpdmVDcmVhdGVGcm9tVHlwZWZhY2UoaW50IG5hdGl2ZV9pbnN0YW5jZSwgaW50IHN0eWxlKSB7Ci0gICAgICAgIFR5cGVmYWNlX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX2luc3RhbmNlKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgVHlwZWZhY2VfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgVHlwZWZhY2VfRGVsZWdhdGUoZGVsZWdhdGUubUZhbWlseSwgc3R5bGUpOwotICAgICAgICBpZiAoc0ZvbnRMb2FkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbmV3RGVsZWdhdGUuaW5pdCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gZm9udCBsb2FkZXIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldCwgYWRkIHRoZSBkZWxlZ2F0ZSB0byBhIGxpc3Qgb2YgZGVsZWdhdGVzCi0gICAgICAgICAgICAvLyB0byBpbml0IHdoZW4gdGhlIGZvbnQgbG9hZGVyIGlzIGluaXRpYWxpemVkLgotICAgICAgICAgICAgLy8gVGhlcmUgd29uJ3QgYmUgYW55IHJlbmRlcmluZyBiZWZvcmUgdGhpcyBoYXBwZW5zIGFueXdheS4KLSAgICAgICAgICAgIHNQb3N0SW5pdERlbGVnYXRlLmFkZChuZXdEZWxlZ2F0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBzeW5jaHJvbml6ZWQgaW50IG5hdGl2ZUNyZWF0ZUZyb21Bc3NldChBc3NldE1hbmFnZXIgbWdyLCBTdHJpbmcgcGF0aCkgewotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIlR5cGVmYWNlLmNyZWF0ZUZyb21Bc3NldCgpIGlzIG5vdCBzdXBwb3J0ZWQuIiwgbnVsbCAvKnRocm93YWJsZSovLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHN5bmNocm9uaXplZCBpbnQgbmF0aXZlQ3JlYXRlRnJvbUZpbGUoU3RyaW5nIHBhdGgpIHsKLSAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChTWVNURU1fRk9OVFMpICkgewotICAgICAgICAgICAgU3RyaW5nIHJlbGF0aXZlUGF0aCA9IHBhdGguc3Vic3RyaW5nKFNZU1RFTV9GT05UUy5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShzRm9udExvYWRlci5nZXRPc0ZvbnRzTG9jYXRpb24oKSwgcmVsYXRpdmVQYXRoKTsKLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBGb250IGZvbnQgPSBGb250LmNyZWF0ZUZvbnQoRm9udC5UUlVFVFlQRV9GT05ULCBmKTsKLSAgICAgICAgICAgICAgICBpZiAoZm9udCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFR5cGVmYWNlX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IFR5cGVmYWNlX0RlbGVnYXRlKGZvbnQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlVuYWJsZSB0byBsb2FkIGZvbnQgJTEkcyIsIHJlbGF0aXZlUGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKnRocm93YWJsZSovLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAgICAgIlR5cGVmYWNlLmNyZWF0ZUZyb21GaWxlKCkgY2FuIG9ubHkgd29yayB3aXRoIHBsYXRmb3JtIGZvbnRzIGxvY2F0ZWQgaW4gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICBTWVNURU1fRk9OVFMsCi0gICAgICAgICAgICAgICAgICAgIG51bGwgLyp0aHJvd2FibGUqLywgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8vIHJldHVybiBhIGNvcHkgb2YgdGhlIGJhc2UgZm9udAotICAgICAgICByZXR1cm4gbmF0aXZlQ3JlYXRlKG51bGwsIDApOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZVVucmVmKGludCBuYXRpdmVfaW5zdGFuY2UpIHsKLSAgICAgICAgc01hbmFnZXIucmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihuYXRpdmVfaW5zdGFuY2UpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlR2V0U3R5bGUoaW50IG5hdGl2ZV9pbnN0YW5jZSkgewotICAgICAgICBUeXBlZmFjZV9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9pbnN0YW5jZSk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tU3R5bGU7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIHByaXZhdGUgVHlwZWZhY2VfRGVsZWdhdGUoU3RyaW5nIGZhbWlseSwgaW50IHN0eWxlKSB7Ci0gICAgICAgIG1GYW1pbHkgPSBmYW1pbHk7Ci0gICAgICAgIG1TdHlsZSA9IHN0eWxlOwotICAgIH0KLQotICAgIHByaXZhdGUgVHlwZWZhY2VfRGVsZWdhdGUoRm9udCBmb250KSB7Ci0gICAgICAgIG1GYW1pbHkgPSBmb250LmdldEZhbWlseSgpOwotICAgICAgICBtU3R5bGUgPSBUeXBlZmFjZS5OT1JNQUw7Ci0KLSAgICAgICAgbUZvbnRzID0gc0ZvbnRMb2FkZXIuZ2V0RmFsbGJhY2tGb250cyhtU3R5bGUpOwotCi0gICAgICAgIC8vIGluc2VydCB0aGUgZm9udCBnbHlwaCBmaXJzdC4KLSAgICAgICAgbUZvbnRzLmFkZCgwLCBmb250KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLSAgICAgICAgbUZvbnRzID0gc0ZvbnRMb2FkZXIuZ2V0Rm9udChtRmFtaWx5LCBtU3R5bGUpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvWGZlcm1vZGVfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvWGZlcm1vZGVfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYyZDY5Yy4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1hmZXJtb2RlX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBqYXZhLmF3dC5Db21wb3NpdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlhmZXJtb2RlCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgWGZlcm1vZGUgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgWGZlcm1vZGUgY2xhc3MuCi0gKgotICogVGhpcyBhbHNvIHNlcnZlIGFzIGEgYmFzZSBjbGFzcyBmb3IgYWxsIFhmZXJtb2RlIGRlbGVnYXRlIGNsYXNzZXMuCi0gKgotICogQHNlZSBEZWxlZ2F0ZU1hbmFnZXIKLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYZmVybW9kZV9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIG1hbmFnZXIgLS0tLQotICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPFhmZXJtb2RlX0RlbGVnYXRlPiBzTWFuYWdlciA9Ci0gICAgICAgICAgICBuZXcgRGVsZWdhdGVNYW5hZ2VyPFhmZXJtb2RlX0RlbGVnYXRlPihYZmVybW9kZV9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGhlbHBlciBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIFhmZXJtb2RlX0RlbGVnYXRlIGdldERlbGVnYXRlKGludCBuYXRpdmVfaW5zdGFuY2UpIHsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9pbnN0YW5jZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGFic3RyYWN0IENvbXBvc2l0ZSBnZXRDb21wb3NpdGUoaW50IGFscGhhKTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1N1cHBvcnRlZCgpOwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKTsKLQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBmaW5hbGl6ZXIoaW50IG5hdGl2ZV9pbnN0YW5jZSkgewotICAgICAgICBzTWFuYWdlci5yZW1vdmVKYXZhUmVmZXJlbmNlRm9yKG5hdGl2ZV9pbnN0YW5jZSk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9vcy9CdWlsZF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9vcy9CdWlsZF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjgyYTVlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvQnVpbGRfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQub3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLm9zLkJ1aWxkCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgQnVpbGQgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIGl0J3MgYSBzdGF0ZWxlc3MgY2xhc3MgdG8gc3RhcnQgd2l0aCwgdGhlcmUncyBubyBuZWVkIHRvIGtlZXAgYSB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfQotICogYXJvdW5kIHRvIG1hcCBpbnQgdG8gaW5zdGFuY2Ugb2YgdGhlIGRlbGVnYXRlLgotICoKLSAqLwotcHVibGljIGNsYXNzIEJ1aWxkX0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBwcm9wZXJ0eSkgewotICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BlcnRpZXMgPSBCcmlkZ2UuZ2V0UGxhdGZvcm1Qcm9wZXJ0aWVzKCk7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnRpZXMuZ2V0KHByb3BlcnR5KTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBCdWlsZC5VTktOT1dOOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9vcy9IYW5kbGVyVGhyZWFkX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL0hhbmRsZXJUaHJlYWRfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZiZTk3YzAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9vcy9IYW5kbGVyVGhyZWFkX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm9zOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlJlbmRlckFjdGlvbjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogRGVsZWdhdGUgb3ZlcnJpZGluZyBzZWxlY3RlZCBtZXRob2RzIG9mIGFuZHJvaWQub3MuSGFuZGxlclRocmVhZAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgc2VsZWN0ZWQgbWV0aG9kcyBvZiBIYW5kbGVyIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICoKLSAqLwotcHVibGljIGNsYXNzIEhhbmRsZXJUaHJlYWRfRGVsZWdhdGUgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwPEJyaWRnZUNvbnRleHQsIExpc3Q8SGFuZGxlclRocmVhZD4+IHNUaHJlYWRzID0KLSAgICAgICAgICAgIG5ldyBIYXNoTWFwPEJyaWRnZUNvbnRleHQsIExpc3Q8SGFuZGxlclRocmVhZD4+KCk7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2xlYW5VcChCcmlkZ2VDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgTGlzdDxIYW5kbGVyVGhyZWFkPiBsaXN0ID0gc1RocmVhZHMuZ2V0KGNvbnRleHQpOwotICAgICAgICBpZiAobGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmb3IgKEhhbmRsZXJUaHJlYWQgdGhyZWFkIDogbGlzdCkgewotICAgICAgICAgICAgICAgIHRocmVhZC5xdWl0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpc3QuY2xlYXIoKTsKLSAgICAgICAgICAgIHNUaHJlYWRzLnJlbW92ZShjb250ZXh0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tIERlbGVnYXRlIG1ldGhvZHMKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHJ1bihIYW5kbGVyVGhyZWFkIHRoZVRocmVhZCkgewotICAgICAgICAvLyByZWNvcmQgdGhlIHRocmVhZCBzbyB0aGF0IGl0IGNhbiBiZSBxdWl0KCkgb24gY2xlYW4gdXAuCi0gICAgICAgIEJyaWRnZUNvbnRleHQgY29udGV4dCA9IFJlbmRlckFjdGlvbi5nZXRDdXJyZW50Q29udGV4dCgpOwotICAgICAgICBMaXN0PEhhbmRsZXJUaHJlYWQ+IGxpc3QgPSBzVGhyZWFkcy5nZXQoY29udGV4dCk7Ci0gICAgICAgIGlmIChsaXN0ID09IG51bGwpIHsKLSAgICAgICAgICAgIGxpc3QgPSBuZXcgQXJyYXlMaXN0PEhhbmRsZXJUaHJlYWQ+KCk7Ci0gICAgICAgICAgICBzVGhyZWFkcy5wdXQoY29udGV4dCwgbGlzdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBsaXN0LmFkZCh0aGVUaHJlYWQpOwotCi0gICAgICAgIC8vIC0tLS0gU1RBUlQgREVGQVVMVCBJTVBMRU1FTlRBVElPTi4KLQotICAgICAgICB0aGVUaHJlYWQubVRpZCA9IFByb2Nlc3MubXlUaWQoKTsKLSAgICAgICAgTG9vcGVyLnByZXBhcmUoKTsKLSAgICAgICAgc3luY2hyb25pemVkICh0aGVUaHJlYWQpIHsKLSAgICAgICAgICAgIHRoZVRocmVhZC5tTG9vcGVyID0gTG9vcGVyLm15TG9vcGVyKCk7Ci0gICAgICAgICAgICB0aGVUaHJlYWQubm90aWZ5QWxsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgUHJvY2Vzcy5zZXRUaHJlYWRQcmlvcml0eSh0aGVUaHJlYWQubVByaW9yaXR5KTsKLSAgICAgICAgdGhlVGhyZWFkLm9uTG9vcGVyUHJlcGFyZWQoKTsKLSAgICAgICAgTG9vcGVyLmxvb3AoKTsKLSAgICAgICAgdGhlVGhyZWFkLm1UaWQgPSAtMTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL0hhbmRsZXJfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvSGFuZGxlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTUyYzhhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvSGFuZGxlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5vczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotCi0vKioKLSAqIERlbGVnYXRlIG92ZXJyaWRpbmcgc2VsZWN0ZWQgbWV0aG9kcyBvZiBhbmRyb2lkLm9zLkhhbmRsZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHNlbGVjdGVkIG1ldGhvZHMgb2YgSGFuZGxlciBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBIYW5kbGVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0tLS0tIERlbGVnYXRlIG1ldGhvZHMKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIHNlbmRNZXNzYWdlQXRUaW1lKEhhbmRsZXIgaGFuZGxlciwgTWVzc2FnZSBtc2csIGxvbmcgdXB0aW1lTWlsbGlzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgY2FsbGJhY2sKLSAgICAgICAgSUhhbmRsZXJDYWxsYmFjayBjYWxsYmFjayA9IHNDYWxsYmFja3MuZ2V0KCk7Ci0gICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjYWxsYmFjay5zZW5kTWVzc2FnZUF0VGltZShoYW5kbGVyLCBtc2csIHVwdGltZU1pbGxpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0gRGVsZWdhdGUgaW1wbGVtZW50YXRpb24KLQotICAgIHB1YmxpYyBpbnRlcmZhY2UgSUhhbmRsZXJDYWxsYmFjayB7Ci0gICAgICAgIHZvaWQgc2VuZE1lc3NhZ2VBdFRpbWUoSGFuZGxlciBoYW5kbGVyLCBNZXNzYWdlIG1zZywgbG9uZyB1cHRpbWVNaWxsaXMpOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFRocmVhZExvY2FsPElIYW5kbGVyQ2FsbGJhY2s+IHNDYWxsYmFja3MgPQotICAgICAgICBuZXcgVGhyZWFkTG9jYWw8SUhhbmRsZXJDYWxsYmFjaz4oKTsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDYWxsYmFjayhJSGFuZGxlckNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIHNDYWxsYmFja3Muc2V0KGNhbGxiYWNrKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvTG9vcGVyX0FjY2Vzc29yLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL0xvb3Blcl9BY2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWYzZTQ3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvTG9vcGVyX0FjY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2UgYW5kcm9pZC5vczsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotCi0vKioKLSAqIENsYXNzIGFsbG93aW5nIGFjY2VzcyB0byBwYWNrYWdlLXByb3RlY3RlZCBtZXRob2RzL2ZpZWxkcy4KLSAqLwotcHVibGljIGNsYXNzIExvb3Blcl9BY2Nlc3NvciB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2xlYW51cFRocmVhZCgpIHsKLSAgICAgICAgLy8gY2xlYW4gdXAgdGhlIGxvb3BlcgotICAgICAgICBMb29wZXIuc1RocmVhZExvY2FsLnJlbW92ZSgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgRmllbGQgc01haW5Mb29wZXIgPSBMb29wZXIuY2xhc3MuZ2V0RGVjbGFyZWRGaWVsZCgic01haW5Mb29wZXIiKTsKLSAgICAgICAgICAgIHNNYWluTG9vcGVyLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0gICAgICAgICAgICBzTWFpbkxvb3Blci5zZXQobnVsbCwgbnVsbCk7Ci0gICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGNhdGNoUmVmbGVjdGlvbkV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgY2F0Y2hSZWZsZWN0aW9uRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2ggKE5vU3VjaEZpZWxkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGNhdGNoUmVmbGVjdGlvbkV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGNhdGNoUmVmbGVjdGlvbkV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNhdGNoUmVmbGVjdGlvbkV4Y2VwdGlvbigpIHsKLSAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL1NlcnZpY2VNYW5hZ2VyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL1NlcnZpY2VNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNjhlZTIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9vcy9TZXJ2aWNlTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5vczsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBTZXJ2aWNlTWFuYWdlciB7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGEgc2VydmljZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgotICAgICAqCi0gICAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gZ2V0Ci0gICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgc2VydmljZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhlIHNlcnZpY2UgZG9lc24ndCBleGlzdAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgSUJpbmRlciBnZXRTZXJ2aWNlKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBsYWNlIGEgbmV3IEBhIHNlcnZpY2UgY2FsbGVkIEBhIG5hbWUgaW50byB0aGUgc2VydmljZQotICAgICAqIG1hbmFnZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgbmV3IHNlcnZpY2UKLSAgICAgKiBAcGFyYW0gc2VydmljZSB0aGUgc2VydmljZSBvYmplY3QKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkU2VydmljZShTdHJpbmcgbmFtZSwgSUJpbmRlciBzZXJ2aWNlKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSBhbiBleGlzdGluZyBzZXJ2aWNlIGNhbGxlZCBAYSBuYW1lIGZyb20gdGhlCi0gICAgICogc2VydmljZSBtYW5hZ2VyLiAgTm9uLWJsb2NraW5nLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgSUJpbmRlciBjaGVja1NlcnZpY2UoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIGEgbGlzdCBvZiBhbGwgY3VycmVudGx5IHJ1bm5pbmcgc2VydmljZXMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBsaXN0U2VydmljZXMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gYWN0dWFsIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzb21ldGltZXMsIHNvIGl0J3Mgb2sKLSAgICAgICAgLy8gdG8gcmV0dXJuIG51bGwgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHByb2Nlc3MgaXMgZmlyc3QgYmVpbmcgYnJvdWdodAotICAgICAqIHVwIGFuZCBib3VuZCBieSB0aGUgYWN0aXZpdHkgbWFuYWdlci4gVGhlcmUgaXMgb25seSBvbmUgdGhyZWFkIGluIHRoZSBwcm9jZXNzCi0gICAgICogYXQgdGhhdCB0aW1lLCBzbyBubyBsb2NraW5nIGlzIGRvbmUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2FjaGUgdGhlIGNhY2hlIG9mIHNlcnZpY2UgcmVmZXJlbmNlcwotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGluaXRTZXJ2aWNlQ2FjaGUoTWFwPFN0cmluZywgSUJpbmRlcj4gY2FjaGUpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvU3lzdGVtQ2xvY2tfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvU3lzdGVtQ2xvY2tfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1OTRmNy4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL1N5c3RlbUNsb2NrX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5vczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jawotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFN5c3RlbUNsb2NrIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogQmVjYXVzZSBpdCdzIGEgc3RhdGVsZXNzIGNsYXNzIHRvIHN0YXJ0IHdpdGgsIHRoZXJlJ3Mgbm8gbmVlZCB0byBrZWVwIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0KLSAqIGFyb3VuZCB0byBtYXAgaW50IHRvIGluc3RhbmNlIG9mIHRoZSBkZWxlZ2F0ZS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTeXN0ZW1DbG9ja19EZWxlZ2F0ZSB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBzQm9vdFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBsb25nIHNCb290VGltZU5hbm8gPSBTeXN0ZW0ubmFub1RpbWUoKTsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIHNldEN1cnJlbnRUaW1lTWlsbGlzKGxvbmcgbWlsbGlzKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgbWlsbGlzZWNvbmRzIHNpbmNlIGJvb3QsIG5vdCBjb3VudGluZyB0aW1lIHNwZW50IGluIGRlZXAgc2xlZXAuCi0gICAgICogPGI+Tm90ZTo8L2I+IFRoaXMgdmFsdWUgbWF5IGdldCByZXNldCBvY2Nhc2lvbmFsbHkgKGJlZm9yZSBpdCB3b3VsZAotICAgICAqIG90aGVyd2lzZSB3cmFwIGFyb3VuZCkuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIG1pbGxpc2Vjb25kcyBvZiBub24tc2xlZXAgdXB0aW1lIHNpbmNlIGJvb3QuCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGxvbmcgdXB0aW1lTWlsbGlzKCkgewotICAgICAgICByZXR1cm4gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzQm9vdFRpbWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBtaWxsaXNlY29uZHMgc2luY2UgYm9vdCwgaW5jbHVkaW5nIHRpbWUgc3BlbnQgaW4gc2xlZXAuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGVsYXBzZWQgbWlsbGlzZWNvbmRzIHNpbmNlIGJvb3QuCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGxvbmcgZWxhcHNlZFJlYWx0aW1lKCkgewotICAgICAgICByZXR1cm4gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzQm9vdFRpbWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBuYW5vc2Vjb25kcyBzaW5jZSBib290LCBpbmNsdWRpbmcgdGltZSBzcGVudCBpbiBzbGVlcC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gZWxhcHNlZCBuYW5vc2Vjb25kcyBzaW5jZSBib290LgotICAgICAqLwotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBsb25nIGVsYXBzZWRSZWFsdGltZU5hbm9zKCkgewotICAgICAgICByZXR1cm4gU3lzdGVtLm5hbm9UaW1lKCkgLSBzQm9vdFRpbWVOYW5vOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgbWlsbGlzZWNvbmRzIHJ1bm5pbmcgaW4gdGhlIGN1cnJlbnQgdGhyZWFkLgotICAgICAqCi0gICAgICogQHJldHVybiBlbGFwc2VkIG1pbGxpc2Vjb25kcyBpbiB0aGUgdGhyZWFkCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGxvbmcgY3VycmVudFRocmVhZFRpbWVNaWxsaXMoKSB7Ci0gICAgICAgIHJldHVybiBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIG1pY3Jvc2Vjb25kcyBydW5uaW5nIGluIHRoZSBjdXJyZW50IHRocmVhZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gZWxhcHNlZCBtaWNyb3NlY29uZHMgaW4gdGhlIHRocmVhZAotICAgICAqCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgbG9uZyBjdXJyZW50VGhyZWFkVGltZU1pY3JvKCkgewotICAgICAgICByZXR1cm4gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKiAxMDAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgY3VycmVudCB3YWxsIHRpbWUgaW4gIG1pY3Jvc2Vjb25kcy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gZWxhcHNlZCBtaWNyb3NlY29uZHMgaW4gd2FsbCB0aW1lCi0gICAgICoKLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBsb25nIGN1cnJlbnRUaW1lTWljcm8oKSB7Ci0gICAgICAgIHJldHVybiBlbGFwc2VkUmVhbHRpbWUoKSAqIDEwMDA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC90ZXh0L0FuZHJvaWRCaWRpX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3RleHQvQW5kcm9pZEJpZGlfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTczZmEwZS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3RleHQvQW5kcm9pZEJpZGlfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudGV4dDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuQmlkaTsKLQotCi0vKioKLSAqIERlbGVnYXRlIHVzZWQgdG8gcHJvdmlkZSBuZXcgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiB7QGxpbmsgQW5kcm9pZEJpZGl9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgQW5kcm9pZEJpZGkgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBBbmRyb2lkQmlkaV9EZWxlZ2F0ZSB7Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IHJ1bkJpZGkoaW50IGRpciwgY2hhcltdIGNoYXJzLCBieXRlW10gY2hhckluZm8sIGludCBjb3VudCwKLSAgICAgICAgICAgIGJvb2xlYW4gaGF2ZUluZm8pIHsKLQotICAgICAgICBzd2l0Y2ggKGRpcikgewotICAgICAgICBjYXNlIDA6IC8vIExheW91dC5ESVJfUkVRVUVTVF9MVFIKLSAgICAgICAgY2FzZSAxOiAvLyBMYXlvdXQuRElSX1JFUVVFU1RfUlRMCi0gICAgICAgICAgICBicmVhazsgIC8vIE5vIGNoYW5nZS4KLSAgICAgICAgY2FzZSAtMToKLSAgICAgICAgICAgIGRpciA9IEJpZGkuTEVWRUxfREVGQVVMVF9MVFI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAtMjoKLSAgICAgICAgICAgIGRpciA9IEJpZGkuTEVWRUxfREVGQVVMVF9SVEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIEludmFsaWQgY29kZS4gTG9nIGVycm9yLCBhc3N1bWUgTEVWRUxfREVGQVVMVF9MVFIgYW5kIGNvbnRpbnVlLgotICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLCAiSW52YWxpZCBkaXJlY3Rpb24gZmxhZyIsIG51bGwpOwotICAgICAgICAgICAgZGlyID0gQmlkaS5MRVZFTF9ERUZBVUxUX0xUUjsKLSAgICAgICAgfQotICAgICAgICBCaWRpIGJpZGkgPSBuZXcgQmlkaShjaGFycywgMCwgbnVsbCwgMCwgY291bnQsIGRpcik7Ci0gICAgICAgIGlmIChjaGFySW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBjaGFySW5mb1tpXSA9IGJpZGkuZ2V0TGV2ZWxBdChpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYmlkaS5nZXRQYXJhTGV2ZWwoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3RleHQvZm9ybWF0L0RhdGVGb3JtYXRfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdGV4dC9mb3JtYXQvRGF0ZUZvcm1hdF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2QxYTY5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdGV4dC9mb3JtYXQvRGF0ZUZvcm1hdF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC50ZXh0LmZvcm1hdDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotCi0KLS8qKgotICogRGVsZWdhdGUgdXNlZCB0byBwcm92aWRlIG5ldyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIHtAbGluayBEYXRlRm9ybWF0fQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIERhdGVGb3JtYXQgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBEYXRlRm9ybWF0X0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGlzMjRIb3VyRm9ybWF0KENvbnRleHQgY29udGV4dCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC90ZXh0L2Zvcm1hdC9UaW1lX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3RleHQvZm9ybWF0L1RpbWVfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVjZDY4Ny4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3RleHQvZm9ybWF0L1RpbWVfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudGV4dC5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLlVua25vd25Gb3JtYXRDb252ZXJzaW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgdXNlZCB0byBwcm92aWRlIG5ldyBpbXBsZW1lbnRhdGlvbiBmb3IgbmF0aXZlIG1ldGhvZHMgb2Yge0BsaW5rIFRpbWV9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCBzb21lIG5hdGl2ZSBtZXRob2RzIG9mIFRpbWUgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGNhbGxzIHRvCi0gKiBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFRpbWVfRGVsZWdhdGUgewotCi0gICAgLy8gUmVnZXggdG8gbWF0Y2ggb2RkIG51bWJlciBvZiAnJScuCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKCIoPzwhJSkoJSUpKiUoPyElKSIpOwotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyBmb3JtYXQxKFRpbWUgdGhpc1RpbWUsIFN0cmluZyBmb3JtYXQpIHsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBmb3JtYXQgYnkgYWRkaW5nIGNoYW5naW5nICclJyB0byAiJTEkdCIuIFRoaXMgaXMgcmVxdWlyZWQgdG8gdGVsbCB0aGUKLSAgICAgICAgICAgIC8vIGZvcm1hdHRlciB3aGljaCBhcmd1bWVudCB0byB1c2UgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4gJyUlJyBpcyBsZWZ0IGFzIGlzLiBJbiB0aGUKLSAgICAgICAgICAgIC8vIHJlcGxhY2VtZW50IHN0cmluZywgJDAgcmVmZXJzIHRvIG1hdGNoZWQgcGF0dGVybi4gXFwxIG1lYW5zICcxJywgd3JpdHRlbiB0aGlzIHdheSB0bwotICAgICAgICAgICAgLy8gc2VwYXJhdGUgaXQgZnJvbSAwLiBcXCQgbWVhbnMgJyQnLCB3cml0dGVuIHRoaXMgd2F5IHRvIHN1cHByZXNzIHRoZSBzcGVjaWFsIG1lYW5pbmcKLSAgICAgICAgICAgIC8vIG9mICQuCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgcC5tYXRjaGVyKGZvcm1hdCkucmVwbGFjZUFsbCgiJDBcXDFcXCR0IiksCi0gICAgICAgICAgICAgICAgICAgIHRpbWVUb0NhbGVuZGFyKHRoaXNUaW1lLCBDYWxlbmRhci5nZXRJbnN0YW5jZSgpKSk7Ci0gICAgICAgIH0gY2F0Y2ggKFVua25vd25Gb3JtYXRDb252ZXJzaW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19TVFJGVElNRSwgIlVucmVjb2duaXplZCBmb3JtYXQiLCBlLCBmb3JtYXQpOwotICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIENhbGVuZGFyIHRpbWVUb0NhbGVuZGFyKFRpbWUgdGltZSwgQ2FsZW5kYXIgY2FsZW5kYXIpIHsKLSAgICAgICAgY2FsZW5kYXIuc2V0KHRpbWUueWVhciwgdGltZS5tb250aCwgdGltZS5tb250aERheSwgdGltZS5ob3VyLCB0aW1lLm1pbnV0ZSwgdGltZS5zZWNvbmQpOwotICAgICAgICByZXR1cm4gY2FsZW5kYXI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3V0aWwvQnJpZGdlWG1sUHVsbEF0dHJpYnV0ZXMuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdXRpbC9CcmlkZ2VYbWxQdWxsQXR0cmlidXRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWM1YjAyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdXRpbC9CcmlkZ2VYbWxQdWxsQXR0cmlidXRlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudXRpbDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZW5kZXJSZXNvdXJjZXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlVmFsdWU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5YbWxVdGlsczsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZUNvbnN0YW50czsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlQ29udGV4dDsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLQotLyoqCi0gKiBBIGNvcnJlY3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBBdHRyaWJ1dGVTZXR9IGludGVyZmFjZSBvbiB0b3Agb2YgYSBYbWxQdWxsUGFyc2VyCi0gKi8KLXB1YmxpYyBjbGFzcyBCcmlkZ2VYbWxQdWxsQXR0cmlidXRlcyBleHRlbmRzIFhtbFB1bGxBdHRyaWJ1dGVzIHsKLQotICAgIHByaXZhdGUgZmluYWwgQnJpZGdlQ29udGV4dCBtQ29udGV4dDsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVBsYXRmb3JtRmlsZTsKLQotICAgIHB1YmxpYyBCcmlkZ2VYbWxQdWxsQXR0cmlidXRlcyhYbWxQdWxsUGFyc2VyIHBhcnNlciwgQnJpZGdlQ29udGV4dCBjb250ZXh0LAotICAgICAgICAgICAgYm9vbGVhbiBwbGF0Zm9ybUZpbGUpIHsKLSAgICAgICAgc3VwZXIocGFyc2VyKTsKLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtUGxhdGZvcm1GaWxlID0gcGxhdGZvcm1GaWxlOwotICAgIH0KLQotICAgIC8qCi0gICAgICogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgYW5kcm9pZC51dGlsLlhtbFB1bGxBdHRyaWJ1dGVzI2dldEF0dHJpYnV0ZU5hbWVSZXNvdXJjZShpbnQpCi0gICAgICoKLSAgICAgKiBUaGlzIG1ldGhvZHMgbXVzdCByZXR1cm4gY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLjxuYW1lPiBtYXRjaGluZwotICAgICAqIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuCi0gICAgICogSXQgcmV0dXJucyAwIGlmIGl0IGRvZXNuJ3QgZmluZCBhbnl0aGluZy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZU5hbWVSZXNvdXJjZShpbnQgaW5kZXgpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBhdHRyaWJ1dGUgbmFtZS4KLSAgICAgICAgU3RyaW5nIG5hbWUgPSBnZXRBdHRyaWJ1dGVOYW1lKGluZGV4KTsKLQotICAgICAgICAvLyBnZXQgdGhlIGF0dHJpYnV0ZSBuYW1lc3BhY2UKLSAgICAgICAgU3RyaW5nIG5zID0gbVBhcnNlci5nZXRBdHRyaWJ1dGVOYW1lc3BhY2UoaW5kZXgpOwotCi0gICAgICAgIGlmIChCcmlkZ2VDb25zdGFudHMuTlNfUkVTT1VSQ0VTLmVxdWFscyhucykpIHsKLSAgICAgICAgICAgIEludGVnZXIgdiA9IEJyaWRnZS5nZXRSZXNvdXJjZUlkKFJlc291cmNlVHlwZS5BVFRSLCBuYW1lKTsKLSAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdi5pbnRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoaXMgaXMgbm90IGFuIGF0dHJpYnV0ZSBpbiB0aGUgYW5kcm9pZCBuYW1lc3BhY2UsIHdlIHF1ZXJ5IHRoZSBjdXN0b212aWV3bG9hZGVyLCBpZgotICAgICAgICAvLyB0aGUgbmFtZXNwYWNlcyBtYXRjaC4KLSAgICAgICAgaWYgKG1Db250ZXh0LmdldFByb2plY3RDYWxsYmFjaygpLmdldE5hbWVzcGFjZSgpLmVxdWFscyhucykpIHsKLSAgICAgICAgICAgIEludGVnZXIgdiA9IG1Db250ZXh0LmdldFByb2plY3RDYWxsYmFjaygpLmdldFJlc291cmNlSWQoUmVzb3VyY2VUeXBlLkFUVFIsIG5hbWUpOwotICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiB2LmludFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZUxpc3RWYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLAotICAgICAgICAgICAgU3RyaW5nW10gb3B0aW9ucywgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShuYW1lc3BhY2UsIGF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHIgPSBnZXRSZXNvdXJjZVZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gWG1sVXRpbHMuY29udmVydFZhbHVlVG9MaXN0KHZhbHVlLCBvcHRpb25zLCBkZWZhdWx0VmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdHRyaWJ1dGVCb29sZWFuVmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwKLSAgICAgICAgICAgIGJvb2xlYW4gZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgciA9IGdldFJlc291cmNlVmFsdWUodmFsdWUpOwotCi0gICAgICAgICAgICBpZiAociAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSByLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBYbWxVdGlscy5jb252ZXJ0VmFsdWVUb0Jvb2xlYW4odmFsdWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlUmVzb3VyY2VWYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlKTsKLQotICAgICAgICByZXR1cm4gcmVzb2x2ZVJlc291cmNlVmFsdWUodmFsdWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVJbnRWYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLAotICAgICAgICAgICAgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShuYW1lc3BhY2UsIGF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHIgPSBnZXRSZXNvdXJjZVZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gWG1sVXRpbHMuY29udmVydFZhbHVlVG9JbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlVW5zaWduZWRJbnRWYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLAotICAgICAgICAgICAgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShuYW1lc3BhY2UsIGF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHIgPSBnZXRSZXNvdXJjZVZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gWG1sVXRpbHMuY29udmVydFZhbHVlVG9VbnNpZ25lZEludCh2YWx1ZSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldEF0dHJpYnV0ZUZsb2F0VmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwKLSAgICAgICAgICAgIGZsb2F0IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgcyA9IGdldEF0dHJpYnV0ZVZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlKTsKLSAgICAgICAgaWYgKHMgIT0gbnVsbCkgewotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSByID0gZ2V0UmVzb3VyY2VWYWx1ZShzKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHMgPSByLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBGbG9hdC5wYXJzZUZsb2F0KHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZUxpc3RWYWx1ZShpbnQgaW5kZXgsCi0gICAgICAgICAgICBTdHJpbmdbXSBvcHRpb25zLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBYbWxVdGlscy5jb252ZXJ0VmFsdWVUb0xpc3QoCi0gICAgICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZShpbmRleCksIG9wdGlvbnMsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0QXR0cmlidXRlQm9vbGVhblZhbHVlKGludCBpbmRleCwgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gZ2V0QXR0cmlidXRlVmFsdWUoaW5kZXgpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSByID0gZ2V0UmVzb3VyY2VWYWx1ZSh2YWx1ZSk7Ci0KLSAgICAgICAgICAgIGlmIChyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHIuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIFhtbFV0aWxzLmNvbnZlcnRWYWx1ZVRvQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVSZXNvdXJjZVZhbHVlKGludCBpbmRleCwgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShpbmRleCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc29sdmVSZXNvdXJjZVZhbHVlKHZhbHVlLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlSW50VmFsdWUoaW50IGluZGV4LCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKGluZGV4KTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgciA9IGdldFJlc291cmNlVmFsdWUodmFsdWUpOwotCi0gICAgICAgICAgICBpZiAociAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSByLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBYbWxVdGlscy5jb252ZXJ0VmFsdWVUb0ludCh2YWx1ZSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVVbnNpZ25lZEludFZhbHVlKGludCBpbmRleCwgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShpbmRleCk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHIgPSBnZXRSZXNvdXJjZVZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gWG1sVXRpbHMuY29udmVydFZhbHVlVG9VbnNpZ25lZEludCh2YWx1ZSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldEF0dHJpYnV0ZUZsb2F0VmFsdWUoaW50IGluZGV4LCBmbG9hdCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgU3RyaW5nIHMgPSBnZXRBdHRyaWJ1dGVWYWx1ZShpbmRleCk7Ci0gICAgICAgIGlmIChzICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgciA9IGdldFJlc291cmNlVmFsdWUocyk7Ci0KLSAgICAgICAgICAgIGlmIChyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzID0gci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gRmxvYXQucGFyc2VGbG9hdChzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgLy8gLS0gcHJpdmF0ZSBoZWxwZXIgbWV0aG9kcwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHJlc29sdmVkIHtAbGluayBSZXNvdXJjZVZhbHVlfSBmcm9tIGEgZ2l2ZW4gdmFsdWUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBSZXNvdXJjZVZhbHVlIGdldFJlc291cmNlVmFsdWUoU3RyaW5nIHZhbHVlKSB7Ci0gICAgICAgIC8vIG5vdyBsb29rIGZvciB0aGlzIHBhcnRpY3VsYXIgdmFsdWUKLSAgICAgICAgUmVuZGVyUmVzb3VyY2VzIHJlc291cmNlcyA9IG1Db250ZXh0LmdldFJlbmRlclJlc291cmNlcygpOwotICAgICAgICByZXR1cm4gcmVzb3VyY2VzLnJlc29sdmVSZXNWYWx1ZShyZXNvdXJjZXMuZmluZFJlc1ZhbHVlKHZhbHVlLCBtUGxhdGZvcm1GaWxlKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVzb2x2ZXMgYW5kIHJldHVybiBhIHZhbHVlIHRvIGl0cyBhc3NvY2lhdGVkIGludGVnZXIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgcmVzb2x2ZVJlc291cmNlVmFsdWUoU3RyaW5nIHZhbHVlLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIFJlc291cmNlVmFsdWUgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgaWYgKHJlc291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIEludGVnZXIgaWQgPSBudWxsOwotICAgICAgICAgICAgaWYgKG1QbGF0Zm9ybUZpbGUgfHwgcmVzb3VyY2UuaXNGcmFtZXdvcmsoKSkgewotICAgICAgICAgICAgICAgIGlkID0gQnJpZGdlLmdldFJlc291cmNlSWQocmVzb3VyY2UuZ2V0UmVzb3VyY2VUeXBlKCksIHJlc291cmNlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlkID0gbUNvbnRleHQuZ2V0UHJvamVjdENhbGxiYWNrKCkuZ2V0UmVzb3VyY2VJZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmdldFJlc291cmNlVHlwZSgpLCByZXNvdXJjZS5nZXROYW1lKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC91dGlsL0Zsb2F0TWF0aF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC91dGlsL0Zsb2F0TWF0aF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjRjNjBiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdXRpbC9GbG9hdE1hdGhfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnV0aWw7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQudXRpbC5GbG9hdE1hdGgKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBGbG9hdE1hdGggaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIGl0J3MgYSBzdGF0ZWxlc3MgY2xhc3MgdG8gc3RhcnQgd2l0aCwgdGhlcmUncyBubyBuZWVkIHRvIGtlZXAgYSB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfQotICogYXJvdW5kIHRvIG1hcCBpbnQgdG8gaW5zdGFuY2Ugb2YgdGhlIGRlbGVnYXRlLgotICoKLSAqLwotLypwYWNrYWdlKi8gZmluYWwgY2xhc3MgRmxvYXRNYXRoX0RlbGVnYXRlIHsKLQotICAgIC8qKiBQcmV2ZW50cyBpbnN0YW50aWF0aW9uLiAqLwotICAgIHByaXZhdGUgRmxvYXRNYXRoX0RlbGVnYXRlKCkge30KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGZsb2F0IGNvbnZlcnNpb24gb2YgdGhlIG1vc3QgcG9zaXRpdmUgKGkuZS4gY2xvc2VzdCB0bwotICAgICAqIHBvc2l0aXZlIGluZmluaXR5KSBpbnRlZ2VyIHZhbHVlIHdoaWNoIGlzIGxlc3MgdGhhbiB0aGUgYXJndW1lbnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUgdG8gYmUgY29udmVydGVkCi0gICAgICogQHJldHVybiB0aGUgZmxvb3Igb2YgdmFsdWUKLSAgICAgKi8KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXQgZmxvb3IoZmxvYXQgdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIChmbG9hdClNYXRoLmZsb29yKHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBmbG9hdCBjb252ZXJzaW9uIG9mIHRoZSBtb3N0IG5lZ2F0aXZlIChpLmUuIGNsb3Nlc3QgdG8KLSAgICAgKiBuZWdhdGl2ZSBpbmZpbml0eSkgaW50ZWdlciB2YWx1ZSB3aGljaCBpcyBncmVhdGVyIHRoYW4gdGhlIGFyZ3VtZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlIHRvIGJlIGNvbnZlcnRlZAotICAgICAqIEByZXR1cm4gdGhlIGNlaWxpbmcgb2YgdmFsdWUKLSAgICAgKi8KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXQgY2VpbChmbG9hdCB2YWx1ZSkgewotICAgICAgICByZXR1cm4gKGZsb2F0KU1hdGguY2VpbCh2YWx1ZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY2xvc2VzdCBmbG9hdCBhcHByb3hpbWF0aW9uIG9mIHRoZSBzaW5lIG9mIHRoZSBhcmd1bWVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhbmdsZSB0byBjb21wdXRlIHRoZSBjb3NpbmUgb2YsIGluIHJhZGlhbnMKLSAgICAgKiBAcmV0dXJuIHRoZSBzaW5lIG9mIGFuZ2xlCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljICBmbG9hdCBzaW4oZmxvYXQgYW5nbGUpIHsKLSAgICAgICAgcmV0dXJuIChmbG9hdClNYXRoLnNpbihhbmdsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY2xvc2VzdCBmbG9hdCBhcHByb3hpbWF0aW9uIG9mIHRoZSBjb3NpbmUgb2YgdGhlIGFyZ3VtZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIGFuZ2xlIHRvIGNvbXB1dGUgdGhlIGNvc2luZSBvZiwgaW4gcmFkaWFucwotICAgICAqIEByZXR1cm4gdGhlIGNvc2luZSBvZiBhbmdsZQotICAgICAqLwotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBjb3MoZmxvYXQgYW5nbGUpIHsKLSAgICAgICAgcmV0dXJuIChmbG9hdClNYXRoLmNvcyhhbmdsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY2xvc2VzdCBmbG9hdCBhcHByb3hpbWF0aW9uIG9mIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUKLSAgICAgKiBhcmd1bWVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZSB0byBjb21wdXRlIHNxcnQgb2YKLSAgICAgKiBAcmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiB2YWx1ZQotICAgICAqLwotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBzcXJ0KGZsb2F0IHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAoZmxvYXQpTWF0aC5zcXJ0KHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGZsb2F0IGFwcHJveGltYXRpb24gb2YgdGhlIHJhaXNpbmcgImUiIHRvIHRoZSBwb3dlcgotICAgICAqIG9mIHRoZSBhcmd1bWVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZSB0byBjb21wdXRlIHRoZSBleHBvbmVudGlhbCBvZgotICAgICAqIEByZXR1cm4gdGhlIGV4cG9uZW50aWFsIG9mIHZhbHVlCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IGV4cChmbG9hdCB2YWx1ZSkgewotICAgICAgICByZXR1cm4gKGZsb2F0KU1hdGguZXhwKHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGZsb2F0IGFwcHJveGltYXRpb24gb2YgdGhlIHJlc3VsdCBvZiByYWlzaW5nIHtAY29kZQotICAgICAqIHh9IHRvIHRoZSBwb3dlciBvZiB7QGNvZGUgeX0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0geCB0aGUgYmFzZSBvZiB0aGUgb3BlcmF0aW9uLgotICAgICAqIEBwYXJhbSB5IHRoZSBleHBvbmVudCBvZiB0aGUgb3BlcmF0aW9uLgotICAgICAqIEByZXR1cm4ge0Bjb2RlIHh9IHRvIHRoZSBwb3dlciBvZiB7QGNvZGUgeX0uCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IHBvdyhmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIHJldHVybiAoZmxvYXQpTWF0aC5wb3coeCwgeSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB7QGNvZGUgc3FydCh9PGk+e0Bjb2RlIHh9PC9pPjxzdXA+e0Bjb2RlIDJ9PC9zdXA+e0Bjb2RlICt9IDxpPgotICAgICAqIHtAY29kZSB5fTwvaT48c3VwPntAY29kZSAyfTwvc3VwPntAY29kZSApfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB4IGEgZmxvYXQgbnVtYmVyCi0gICAgICogQHBhcmFtIHkgYSBmbG9hdCBudW1iZXIKLSAgICAgKiBAcmV0dXJuIHRoZSBoeXBvdGVudXNlCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IGh5cG90KGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgcmV0dXJuIChmbG9hdClNYXRoLnNxcnQoeCp4ICsgeSp5KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3V0aWwvTG9nX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3V0aWwvTG9nX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDMyYWIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC91dGlsL0xvZ19EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC51dGlsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1jbGFzcyBMb2dfRGVsZWdhdGUgewotICAgIC8vIHRvIHJlcGxpY2F0ZSBwcmVmaXggdmlzaWJsZSB3aGVuIHVzaW5nICdhZGIgbG9nY2F0JwotICAgIHByaXZhdGUgc3RhdGljIGNoYXIgcHJpb3JpdHlDaGFyKGludCBwcmlvcml0eSkgewotICAgICAgICBzd2l0Y2ggKHByaW9yaXR5KSB7Ci0gICAgICAgICAgICBjYXNlIExvZy5WRVJCT1NFOgotICAgICAgICAgICAgICAgIHJldHVybiAnVic7Ci0gICAgICAgICAgICBjYXNlIExvZy5ERUJVRzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0QnOwotICAgICAgICAgICAgY2FzZSBMb2cuSU5GTzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0knOwotICAgICAgICAgICAgY2FzZSBMb2cuV0FSTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1cnOwotICAgICAgICAgICAgY2FzZSBMb2cuRVJST1I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdFJzsKLSAgICAgICAgICAgIGNhc2UgTG9nLkFTU0VSVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0EnOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJz8nOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgc3RhdGljIGludCBwcmludGxuX25hdGl2ZShpbnQgYnVmSUQsIGludCBwcmlvcml0eSwgU3RyaW5nIHRhZywgU3RyaW5nIG1zZ3MpIHsKLSAgICAgICAgU3RyaW5nIHByZWZpeCA9IHByaW9yaXR5Q2hhcihwcmlvcml0eSkgKyAiLyIgKyB0YWcgKyAiOiAiOwotICAgICAgICBmb3IgKFN0cmluZyBtc2c6IG1zZ3Muc3BsaXQoIlxuIikpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwcmVmaXggKyBtc2cpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC91dGlsL0xydUNhY2hlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3V0aWwvTHJ1Q2FjaGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIwODYwNi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3V0aWwvTHJ1Q2FjaGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEJFR0lOIExBWU9VVExJQiBDSEFOR0UKLSAqIFRoaXMgaXMgYSBjdXN0b20gdmVyc2lvbiB0aGF0IGRvZXNuJ3QgdXNlIHRoZSBub24gc3RhbmRhcmQgTGlua2VkSGFzaE1hcCNlbGRlc3QuCi0gKiBFTkQgTEFZT1VUTElCIENIQU5HRQotICoKLSAqIEEgY2FjaGUgdGhhdCBob2xkcyBzdHJvbmcgcmVmZXJlbmNlcyB0byBhIGxpbWl0ZWQgbnVtYmVyIG9mIHZhbHVlcy4gRWFjaCB0aW1lCi0gKiBhIHZhbHVlIGlzIGFjY2Vzc2VkLCBpdCBpcyBtb3ZlZCB0byB0aGUgaGVhZCBvZiBhIHF1ZXVlLiBXaGVuIGEgdmFsdWUgaXMKLSAqIGFkZGVkIHRvIGEgZnVsbCBjYWNoZSwgdGhlIHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhhdCBxdWV1ZSBpcyBldmljdGVkIGFuZCBtYXkKLSAqIGJlY29tZSBlbGlnaWJsZSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLgotICoKLSAqIDxwPklmIHlvdXIgY2FjaGVkIHZhbHVlcyBob2xkIHJlc291cmNlcyB0aGF0IG5lZWQgdG8gYmUgZXhwbGljaXRseSByZWxlYXNlZCwKLSAqIG92ZXJyaWRlIHtAbGluayAjZW50cnlSZW1vdmVkfS4KLSAqCi0gKiA8cD5JZiBhIGNhY2hlIG1pc3Mgc2hvdWxkIGJlIGNvbXB1dGVkIG9uIGRlbWFuZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcga2V5cywKLSAqIG92ZXJyaWRlIHtAbGluayAjY3JlYXRlfS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBjYWxsaW5nIGNvZGUsIGFsbG93aW5nIGl0IHRvCi0gKiBhc3N1bWUgYSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSByZXR1cm5lZCwgZXZlbiB3aGVuIHRoZXJlJ3MgYSBjYWNoZSBtaXNzLgotICoKLSAqIDxwPkJ5IGRlZmF1bHQsIHRoZSBjYWNoZSBzaXplIGlzIG1lYXN1cmVkIGluIHRoZSBudW1iZXIgb2YgZW50cmllcy4gT3ZlcnJpZGUKLSAqIHtAbGluayAjc2l6ZU9mfSB0byBzaXplIHRoZSBjYWNoZSBpbiBkaWZmZXJlbnQgdW5pdHMuIEZvciBleGFtcGxlLCB0aGlzIGNhY2hlCi0gKiBpcyBsaW1pdGVkIHRvIDRNaUIgb2YgYml0bWFwczoKLSAqIDxwcmU+ICAge0Bjb2RlCi0gKiAgIGludCBjYWNoZVNpemUgPSA0ICogMTAyNCAqIDEwMjQ7IC8vIDRNaUIKLSAqICAgTHJ1Q2FjaGU8U3RyaW5nLCBCaXRtYXA+IGJpdG1hcENhY2hlID0gbmV3IExydUNhY2hlPFN0cmluZywgQml0bWFwPihjYWNoZVNpemUpIHsKLSAqICAgICAgIHByb3RlY3RlZCBpbnQgc2l6ZU9mKFN0cmluZyBrZXksIEJpdG1hcCB2YWx1ZSkgewotICogICAgICAgICAgIHJldHVybiB2YWx1ZS5nZXRCeXRlQ291bnQoKTsKLSAqICAgICAgIH0KLSAqICAgfX08L3ByZT4KLSAqCi0gKiA8cD5UaGlzIGNsYXNzIGlzIHRocmVhZC1zYWZlLiBQZXJmb3JtIG11bHRpcGxlIGNhY2hlIG9wZXJhdGlvbnMgYXRvbWljYWxseSBieQotICogc3luY2hyb25pemluZyBvbiB0aGUgY2FjaGU6IDxwcmU+ICAge0Bjb2RlCi0gKiAgIHN5bmNocm9uaXplZCAoY2FjaGUpIHsKLSAqICAgICBpZiAoY2FjaGUuZ2V0KGtleSkgPT0gbnVsbCkgewotICogICAgICAgICBjYWNoZS5wdXQoa2V5LCB2YWx1ZSk7Ci0gKiAgICAgfQotICogICB9fTwvcHJlPgotICoKLSAqIDxwPlRoaXMgY2xhc3MgZG9lcyBub3QgYWxsb3cgbnVsbCB0byBiZSB1c2VkIGFzIGEga2V5IG9yIHZhbHVlLiBBIHJldHVybgotICogdmFsdWUgb2YgbnVsbCBmcm9tIHtAbGluayAjZ2V0fSwge0BsaW5rICNwdXR9IG9yIHtAbGluayAjcmVtb3ZlfSBpcwotICogdW5hbWJpZ3VvdXM6IHRoZSBrZXkgd2FzIG5vdCBpbiB0aGUgY2FjaGUuCi0gKgotICogPHA+VGhpcyBjbGFzcyBhcHBlYXJlZCBpbiBBbmRyb2lkIDMuMSAoSG9uZXljb21iIE1SMSk7IGl0J3MgYXZhaWxhYmxlIGFzIHBhcnQKLSAqIG9mIDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc2RrL2NvbXBhdGliaWxpdHktbGlicmFyeS5odG1sIj5BbmRyb2lkJ3MKLSAqIFN1cHBvcnQgUGFja2FnZTwvYT4gZm9yIGVhcmxpZXIgcmVsZWFzZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBMcnVDYWNoZTxLLCBWPiB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMaW5rZWRIYXNoTWFwPEssIFY+IG1hcDsKLQotICAgIC8qKiBTaXplIG9mIHRoaXMgY2FjaGUgaW4gdW5pdHMuIE5vdCBuZWNlc3NhcmlseSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLiAqLwotICAgIHByaXZhdGUgaW50IHNpemU7Ci0gICAgcHJpdmF0ZSBpbnQgbWF4U2l6ZTsKLQotICAgIHByaXZhdGUgaW50IHB1dENvdW50OwotICAgIHByaXZhdGUgaW50IGNyZWF0ZUNvdW50OwotICAgIHByaXZhdGUgaW50IGV2aWN0aW9uQ291bnQ7Ci0gICAgcHJpdmF0ZSBpbnQgaGl0Q291bnQ7Ci0gICAgcHJpdmF0ZSBpbnQgbWlzc0NvdW50OwotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIG1heFNpemUgZm9yIGNhY2hlcyB0aGF0IGRvIG5vdCBvdmVycmlkZSB7QGxpbmsgI3NpemVPZn0sIHRoaXMgaXMKLSAgICAgKiAgICAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNhY2hlLiBGb3IgYWxsIG90aGVyIGNhY2hlcywKLSAgICAgKiAgICAgdGhpcyBpcyB0aGUgbWF4aW11bSBzdW0gb2YgdGhlIHNpemVzIG9mIHRoZSBlbnRyaWVzIGluIHRoaXMgY2FjaGUuCi0gICAgICovCi0gICAgcHVibGljIExydUNhY2hlKGludCBtYXhTaXplKSB7Ci0gICAgICAgIGlmIChtYXhTaXplIDw9IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm1heFNpemUgPD0gMCIpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7Ci0gICAgICAgIHRoaXMubWFwID0gbmV3IExpbmtlZEhhc2hNYXA8SywgVj4oMCwgMC43NWYsIHRydWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHNpemUgb2YgdGhlIGNhY2hlLgotICAgICAqIEBwYXJhbSBtYXhTaXplIFRoZSBuZXcgbWF4aW11bSBzaXplLgotICAgICAqCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZXNpemUoaW50IG1heFNpemUpIHsKLSAgICAgICAgaWYgKG1heFNpemUgPD0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWF4U2l6ZSA8PSAwIik7Ci0gICAgICAgIH0KLQotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgdHJpbVRvU2l6ZShtYXhTaXplKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3Ige0Bjb2RlIGtleX0gaWYgaXQgZXhpc3RzIGluIHRoZSBjYWNoZSBvciBjYW4gYmUKLSAgICAgKiBjcmVhdGVkIGJ5IHtAY29kZSAjY3JlYXRlfS4gSWYgYSB2YWx1ZSB3YXMgcmV0dXJuZWQsIGl0IGlzIG1vdmVkIHRvIHRoZQotICAgICAqIGhlYWQgb2YgdGhlIHF1ZXVlLiBUaGlzIHJldHVybnMgbnVsbCBpZiBhIHZhbHVlIGlzIG5vdCBjYWNoZWQgYW5kIGNhbm5vdAotICAgICAqIGJlIGNyZWF0ZWQuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIFYgZ2V0KEsga2V5KSB7Ci0gICAgICAgIGlmIChrZXkgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJrZXkgPT0gbnVsbCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgViBtYXBWYWx1ZTsKLSAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICBtYXBWYWx1ZSA9IG1hcC5nZXQoa2V5KTsKLSAgICAgICAgICAgIGlmIChtYXBWYWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaGl0Q291bnQrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFwVmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtaXNzQ291bnQrKzsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEF0dGVtcHQgdG8gY3JlYXRlIGEgdmFsdWUuIFRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUsIGFuZCB0aGUgbWFwCi0gICAgICAgICAqIG1heSBiZSBkaWZmZXJlbnQgd2hlbiBjcmVhdGUoKSByZXR1cm5zLiBJZiBhIGNvbmZsaWN0aW5nIHZhbHVlIHdhcwotICAgICAgICAgKiBhZGRlZCB0byB0aGUgbWFwIHdoaWxlIGNyZWF0ZSgpIHdhcyB3b3JraW5nLCB3ZSBsZWF2ZSB0aGF0IHZhbHVlIGluCi0gICAgICAgICAqIHRoZSBtYXAgYW5kIHJlbGVhc2UgdGhlIGNyZWF0ZWQgdmFsdWUuCi0gICAgICAgICAqLwotCi0gICAgICAgIFYgY3JlYXRlZFZhbHVlID0gY3JlYXRlKGtleSk7Ci0gICAgICAgIGlmIChjcmVhdGVkVmFsdWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIGNyZWF0ZUNvdW50Kys7Ci0gICAgICAgICAgICBtYXBWYWx1ZSA9IG1hcC5wdXQoa2V5LCBjcmVhdGVkVmFsdWUpOwotCi0gICAgICAgICAgICBpZiAobWFwVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBhIGNvbmZsaWN0IHNvIHVuZG8gdGhhdCBsYXN0IHB1dAotICAgICAgICAgICAgICAgIG1hcC5wdXQoa2V5LCBtYXBWYWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNpemUgKz0gc2FmZVNpemVPZihrZXksIGNyZWF0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFwVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgZW50cnlSZW1vdmVkKGZhbHNlLCBrZXksIGNyZWF0ZWRWYWx1ZSwgbWFwVmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdHJpbVRvU2l6ZShtYXhTaXplKTsKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVkVmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWNoZXMge0Bjb2RlIHZhbHVlfSBmb3Ige0Bjb2RlIGtleX0uIFRoZSB2YWx1ZSBpcyBtb3ZlZCB0byB0aGUgaGVhZCBvZgotICAgICAqIHRoZSBxdWV1ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIHByZXZpb3VzIHZhbHVlIG1hcHBlZCBieSB7QGNvZGUga2V5fS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgViBwdXQoSyBrZXksIFYgdmFsdWUpIHsKLSAgICAgICAgaWYgKGtleSA9PSBudWxsIHx8IHZhbHVlID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigia2V5ID09IG51bGwgfHwgdmFsdWUgPT0gbnVsbCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgViBwcmV2aW91czsKLSAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICBwdXRDb3VudCsrOwotICAgICAgICAgICAgc2l6ZSArPSBzYWZlU2l6ZU9mKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgcHJldmlvdXMgPSBtYXAucHV0KGtleSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzaXplIC09IHNhZmVTaXplT2Yoa2V5LCBwcmV2aW91cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocHJldmlvdXMgIT0gbnVsbCkgewotICAgICAgICAgICAgZW50cnlSZW1vdmVkKGZhbHNlLCBrZXksIHByZXZpb3VzLCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0cmltVG9TaXplKG1heFNpemUpOwotICAgICAgICByZXR1cm4gcHJldmlvdXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIG1heFNpemUgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgY2FjaGUgYmVmb3JlIHJldHVybmluZy4gTWF5IGJlIC0xCi0gICAgICogICAgIHRvIGV2aWN0IGV2ZW4gMC1zaXplZCBlbGVtZW50cy4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgdHJpbVRvU2l6ZShpbnQgbWF4U2l6ZSkgewotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgSyBrZXk7Ci0gICAgICAgICAgICBWIHZhbHVlOwotICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPCAwIHx8IChtYXAuaXNFbXB0eSgpICYmIHNpemUgIT0gMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihnZXRDbGFzcygpLmdldE5hbWUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi5zaXplT2YoKSBpcyByZXBvcnRpbmcgaW5jb25zaXN0ZW50IHJlc3VsdHMhIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHNpemUgPD0gbWF4U2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBCRUdJTiBMQVlPVVRMSUIgQ0hBTkdFCi0gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGxpbmtlZCBsaXN0LgotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGVmZmljaWVudCwgdGhlIGdvYWwgaGVyZSBpcyB0byBtaW5pbWl6ZSB0aGUgY2hhbmdlcwotICAgICAgICAgICAgICAgIC8vIGNvbXBhcmVkIHRvIHRoZSBwbGF0Zm9ybSB2ZXJzaW9uLgotICAgICAgICAgICAgICAgIE1hcC5FbnRyeTxLLCBWPiB0b0V2aWN0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxLLCBWPiBlbnRyeSA6IG1hcC5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvRXZpY3QgPSBlbnRyeTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gRU5EIExBWU9VVExJQiBDSEFOR0UKLQotICAgICAgICAgICAgICAgIGlmICh0b0V2aWN0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAga2V5ID0gdG9FdmljdC5nZXRLZXkoKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvRXZpY3QuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBtYXAucmVtb3ZlKGtleSk7Ci0gICAgICAgICAgICAgICAgc2l6ZSAtPSBzYWZlU2l6ZU9mKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGV2aWN0aW9uQ291bnQrKzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZW50cnlSZW1vdmVkKHRydWUsIGtleSwgdmFsdWUsIG51bGwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyB0aGUgZW50cnkgZm9yIHtAY29kZSBrZXl9IGlmIGl0IGV4aXN0cy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIHByZXZpb3VzIHZhbHVlIG1hcHBlZCBieSB7QGNvZGUga2V5fS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgViByZW1vdmUoSyBrZXkpIHsKLSAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImtleSA9PSBudWxsIik7Ci0gICAgICAgIH0KLQotICAgICAgICBWIHByZXZpb3VzOwotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIHByZXZpb3VzID0gbWFwLnJlbW92ZShrZXkpOwotICAgICAgICAgICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzaXplIC09IHNhZmVTaXplT2Yoa2V5LCBwcmV2aW91cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocHJldmlvdXMgIT0gbnVsbCkgewotICAgICAgICAgICAgZW50cnlSZW1vdmVkKGZhbHNlLCBrZXksIHByZXZpb3VzLCBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBwcmV2aW91czsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsZWQgZm9yIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gZXZpY3RlZCBvciByZW1vdmVkLiBUaGlzIG1ldGhvZCBpcwotICAgICAqIGludm9rZWQgd2hlbiBhIHZhbHVlIGlzIGV2aWN0ZWQgdG8gbWFrZSBzcGFjZSwgcmVtb3ZlZCBieSBhIGNhbGwgdG8KLSAgICAgKiB7QGxpbmsgI3JlbW92ZX0sIG9yIHJlcGxhY2VkIGJ5IGEgY2FsbCB0byB7QGxpbmsgI3B1dH0uIFRoZSBkZWZhdWx0Ci0gICAgICogaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgotICAgICAqCi0gICAgICogPHA+VGhlIG1ldGhvZCBpcyBjYWxsZWQgd2l0aG91dCBzeW5jaHJvbml6YXRpb246IG90aGVyIHRocmVhZHMgbWF5Ci0gICAgICogYWNjZXNzIHRoZSBjYWNoZSB3aGlsZSB0aGlzIG1ldGhvZCBpcyBleGVjdXRpbmcuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZXZpY3RlZCB0cnVlIGlmIHRoZSBlbnRyeSBpcyBiZWluZyByZW1vdmVkIHRvIG1ha2Ugc3BhY2UsIGZhbHNlCi0gICAgICogICAgIGlmIHRoZSByZW1vdmFsIHdhcyBjYXVzZWQgYnkgYSB7QGxpbmsgI3B1dH0gb3Ige0BsaW5rICNyZW1vdmV9LgotICAgICAqIEBwYXJhbSBuZXdWYWx1ZSB0aGUgbmV3IHZhbHVlIGZvciB7QGNvZGUga2V5fSwgaWYgaXQgZXhpc3RzLiBJZiBub24tbnVsbCwKLSAgICAgKiAgICAgdGhpcyByZW1vdmFsIHdhcyBjYXVzZWQgYnkgYSB7QGxpbmsgI3B1dH0uIE90aGVyd2lzZSBpdCB3YXMgY2F1c2VkIGJ5Ci0gICAgICogICAgIGFuIGV2aWN0aW9uIG9yIGEge0BsaW5rICNyZW1vdmV9LgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGVudHJ5UmVtb3ZlZChib29sZWFuIGV2aWN0ZWQsIEsga2V5LCBWIG9sZFZhbHVlLCBWIG5ld1ZhbHVlKSB7fQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIGFmdGVyIGEgY2FjaGUgbWlzcyB0byBjb21wdXRlIGEgdmFsdWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGtleS4KLSAgICAgKiBSZXR1cm5zIHRoZSBjb21wdXRlZCB2YWx1ZSBvciBudWxsIGlmIG5vIHZhbHVlIGNhbiBiZSBjb21wdXRlZC4gVGhlCi0gICAgICogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0gICAgICoKLSAgICAgKiA8cD5UaGUgbWV0aG9kIGlzIGNhbGxlZCB3aXRob3V0IHN5bmNocm9uaXphdGlvbjogb3RoZXIgdGhyZWFkcyBtYXkKLSAgICAgKiBhY2Nlc3MgdGhlIGNhY2hlIHdoaWxlIHRoaXMgbWV0aG9kIGlzIGV4ZWN1dGluZy4KLSAgICAgKgotICAgICAqIDxwPklmIGEgdmFsdWUgZm9yIHtAY29kZSBrZXl9IGV4aXN0cyBpbiB0aGUgY2FjaGUgd2hlbiB0aGlzIG1ldGhvZAotICAgICAqIHJldHVybnMsIHRoZSBjcmVhdGVkIHZhbHVlIHdpbGwgYmUgcmVsZWFzZWQgd2l0aCB7QGxpbmsgI2VudHJ5UmVtb3ZlZH0KLSAgICAgKiBhbmQgZGlzY2FyZGVkLiBUaGlzIGNhbiBvY2N1ciB3aGVuIG11bHRpcGxlIHRocmVhZHMgcmVxdWVzdCB0aGUgc2FtZSBrZXkKLSAgICAgKiBhdCB0aGUgc2FtZSB0aW1lIChjYXVzaW5nIG11bHRpcGxlIHZhbHVlcyB0byBiZSBjcmVhdGVkKSwgb3Igd2hlbiBvbmUKLSAgICAgKiB0aHJlYWQgY2FsbHMge0BsaW5rICNwdXR9IHdoaWxlIGFub3RoZXIgaXMgY3JlYXRpbmcgYSB2YWx1ZSBmb3IgdGhlIHNhbWUKLSAgICAgKiBrZXkuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIFYgY3JlYXRlKEsga2V5KSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IHNhZmVTaXplT2YoSyBrZXksIFYgdmFsdWUpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IHNpemVPZihrZXksIHZhbHVlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5lZ2F0aXZlIHNpemU6ICIgKyBrZXkgKyAiPSIgKyB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBlbnRyeSBmb3Ige0Bjb2RlIGtleX0gYW5kIHtAY29kZSB2YWx1ZX0gaW4KLSAgICAgKiB1c2VyLWRlZmluZWQgdW5pdHMuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDEgc28gdGhhdCBzaXplCi0gICAgICogaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGFuZCBtYXggc2l6ZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcy4KLSAgICAgKgotICAgICAqIDxwPkFuIGVudHJ5J3Mgc2l6ZSBtdXN0IG5vdCBjaGFuZ2Ugd2hpbGUgaXQgaXMgaW4gdGhlIGNhY2hlLgotICAgICAqLwotICAgIHByb3RlY3RlZCBpbnQgc2l6ZU9mKEsga2V5LCBWIHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENsZWFyIHRoZSBjYWNoZSwgY2FsbGluZyB7QGxpbmsgI2VudHJ5UmVtb3ZlZH0gb24gZWFjaCByZW1vdmVkIGVudHJ5LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCB2b2lkIGV2aWN0QWxsKCkgewotICAgICAgICB0cmltVG9TaXplKC0xKTsgLy8gLTEgd2lsbCBldmljdCAwLXNpemVkIGVsZW1lbnRzCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogRm9yIGNhY2hlcyB0aGF0IGRvIG5vdCBvdmVycmlkZSB7QGxpbmsgI3NpemVPZn0sIHRoaXMgcmV0dXJucyB0aGUgbnVtYmVyCi0gICAgICogb2YgZW50cmllcyBpbiB0aGUgY2FjaGUuIEZvciBhbGwgb3RoZXIgY2FjaGVzLCB0aGlzIHJldHVybnMgdGhlIHN1bSBvZgotICAgICAqIHRoZSBzaXplcyBvZiB0aGUgZW50cmllcyBpbiB0aGlzIGNhY2hlLgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgZmluYWwgaW50IHNpemUoKSB7Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciBjYWNoZXMgdGhhdCBkbyBub3Qgb3ZlcnJpZGUge0BsaW5rICNzaXplT2Z9LCB0aGlzIHJldHVybnMgdGhlIG1heGltdW0KLSAgICAgKiBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2FjaGUuIEZvciBhbGwgb3RoZXIgY2FjaGVzLCB0aGlzIHJldHVybnMgdGhlCi0gICAgICogbWF4aW11bSBzdW0gb2YgdGhlIHNpemVzIG9mIHRoZSBlbnRyaWVzIGluIHRoaXMgY2FjaGUuCi0gICAgICovCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBmaW5hbCBpbnQgbWF4U2l6ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1heFNpemU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVzIHtAbGluayAjZ2V0fSByZXR1cm5lZCBhIHZhbHVlIHRoYXQgd2FzCi0gICAgICogYWxyZWFkeSBwcmVzZW50IGluIHRoZSBjYWNoZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIGZpbmFsIGludCBoaXRDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIGhpdENvdW50OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lcyB7QGxpbmsgI2dldH0gcmV0dXJuZWQgbnVsbCBvciByZXF1aXJlZCBhIG5ldwotICAgICAqIHZhbHVlIHRvIGJlIGNyZWF0ZWQuCi0gICAgICovCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBmaW5hbCBpbnQgbWlzc0NvdW50KCkgewotICAgICAgICByZXR1cm4gbWlzc0NvdW50OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lcyB7QGxpbmsgI2NyZWF0ZShPYmplY3QpfSByZXR1cm5lZCBhIHZhbHVlLgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgZmluYWwgaW50IGNyZWF0ZUNvdW50KCkgewotICAgICAgICByZXR1cm4gY3JlYXRlQ291bnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVzIHtAbGluayAjcHV0fSB3YXMgY2FsbGVkLgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgZmluYWwgaW50IHB1dENvdW50KCkgewotICAgICAgICByZXR1cm4gcHV0Q291bnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbHVlcyB0aGF0IGhhdmUgYmVlbiBldmljdGVkLgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgZmluYWwgaW50IGV2aWN0aW9uQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBldmljdGlvbkNvdW50OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBjYWNoZSwgb3JkZXJlZCBmcm9tIGxlYXN0Ci0gICAgICogcmVjZW50bHkgYWNjZXNzZWQgdG8gbW9zdCByZWNlbnRseSBhY2Nlc3NlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIGZpbmFsIE1hcDxLLCBWPiBzbmFwc2hvdCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBMaW5rZWRIYXNoTWFwPEssIFY+KG1hcCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlIHB1YmxpYyBzeW5jaHJvbml6ZWQgZmluYWwgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICBpbnQgYWNjZXNzZXMgPSBoaXRDb3VudCArIG1pc3NDb3VudDsKLSAgICAgICAgaW50IGhpdFBlcmNlbnQgPSBhY2Nlc3NlcyAhPSAwID8gKDEwMCAqIGhpdENvdW50IC8gYWNjZXNzZXMpIDogMDsKLSAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIkxydUNhY2hlW21heFNpemU9JWQsaGl0cz0lZCxtaXNzZXM9JWQsaGl0UmF0ZT0lZCUlXSIsCi0gICAgICAgICAgICAgICAgbWF4U2l6ZSwgaGl0Q291bnQsIG1pc3NDb3VudCwgaGl0UGVyY2VudCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0F0dGFjaEluZm9fQWNjZXNzb3IuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9BdHRhY2hJbmZvX0FjY2Vzc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MDFmNzIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0F0dGFjaEluZm9fQWNjZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC5CcmlkZ2VXaW5kb3c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZVdpbmRvd1Nlc3Npb247Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuQXR0YWNoSW5mbzsKLQotLyoqCi0gKiBDbGFzcyBhbGxvd2luZyBhY2Nlc3MgdG8gcGFja2FnZS1wcm90ZWN0ZWQgbWV0aG9kcy9maWVsZHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBdHRhY2hJbmZvX0FjY2Vzc29yIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRBdHRhY2hJbmZvKFZpZXcgdmlldykgewotICAgICAgICBDb250ZXh0IGNvbnRleHQgPSB2aWV3LmdldENvbnRleHQoKTsKLSAgICAgICAgV2luZG93TWFuYWdlciB3bSA9IChXaW5kb3dNYW5hZ2VyKWNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJTkRPV19TRVJWSUNFKTsKLSAgICAgICAgRGlzcGxheSBkaXNwbGF5ID0gd20uZ2V0RGVmYXVsdERpc3BsYXkoKTsKLSAgICAgICAgVmlld1Jvb3RJbXBsIHJvb3QgPSBuZXcgVmlld1Jvb3RJbXBsKGNvbnRleHQsIGRpc3BsYXkpOwotICAgICAgICBBdHRhY2hJbmZvIGluZm8gPSBuZXcgQXR0YWNoSW5mbyhuZXcgQnJpZGdlV2luZG93U2Vzc2lvbigpLCBuZXcgQnJpZGdlV2luZG93KCksCi0gICAgICAgICAgICAgICAgZGlzcGxheSwgcm9vdCwgbmV3IEhhbmRsZXIoKSwgbnVsbCk7Ci0gICAgICAgIGluZm8ubUhhc1dpbmRvd0ZvY3VzID0gdHJ1ZTsKLSAgICAgICAgaW5mby5tV2luZG93VmlzaWJpbGl0eSA9IFZpZXcuVklTSUJMRTsKLSAgICAgICAgaW5mby5tSW5Ub3VjaE1vZGUgPSBmYWxzZTsgLy8gdGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBkaXNwbGF5IHNlbGVjdGlvbnMuCi0gICAgICAgIGluZm8ubUhhcmR3YXJlQWNjZWxlcmF0ZWQgPSBmYWxzZTsKLSAgICAgICAgdmlldy5kaXNwYXRjaEF0dGFjaGVkVG9XaW5kb3coaW5mbywgMCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGRpc3BhdGNoT25QcmVEcmF3KFZpZXcgdmlldykgewotICAgICAgICB2aWV3Lm1BdHRhY2hJbmZvLm1UcmVlT2JzZXJ2ZXIuZGlzcGF0Y2hPblByZURyYXcoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvQnJpZGdlSW5mbGF0ZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9CcmlkZ2VJbmZsYXRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDFmMWNlNi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvQnJpZGdlSW5mbGF0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSVByb2plY3RDYWxsYmFjazsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5NZXJnZUNvb2tpZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzb3VyY2VSZWZlcmVuY2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlVmFsdWU7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZVhtbEJsb2NrUGFyc2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5QYXJzZXJGYWN0b3J5OwotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5SZXNvdXJjZVR5cGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQudXRpbC5QYWlyOwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkluZmxhdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLS8qKgotICogQ3VzdG9tIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBMYXlvdXRJbmZsYXRlcn0gdG8gaGFuZGxlIGN1c3RvbSB2aWV3cy4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEJyaWRnZUluZmxhdGVyIGV4dGVuZHMgTGF5b3V0SW5mbGF0ZXIgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdENhbGxiYWNrIG1Qcm9qZWN0Q2FsbGJhY2s7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc0luTWVyZ2UgPSBmYWxzZTsKLSAgICBwcml2YXRlIFJlc291cmNlUmVmZXJlbmNlIG1SZXNvdXJjZVJlZmVyZW5jZTsKLQotICAgIC8qKgotICAgICAqIExpc3Qgb2YgY2xhc3MgcHJlZml4ZXMgd2hpY2ggYXJlIHRyaWVkIGZpcnN0IGJ5IGRlZmF1bHQuCi0gICAgICogPHAvPgotICAgICAqIFRoaXMgc2hvdWxkIG1hdGNoIHRoZSBsaXN0IGluIGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeS5pbXBsLlBob25lTGF5b3V0SW5mbGF0ZXIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gc0NsYXNzUHJlZml4TGlzdCA9IHsKLSAgICAgICAgImFuZHJvaWQud2lkZ2V0LiIsCi0gICAgICAgICJhbmRyb2lkLndlYmtpdC4iCi0gICAgfTsKLQotICAgIHByb3RlY3RlZCBCcmlkZ2VJbmZsYXRlcihMYXlvdXRJbmZsYXRlciBvcmlnaW5hbCwgQ29udGV4dCBuZXdDb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKG9yaWdpbmFsLCBuZXdDb250ZXh0KTsKLSAgICAgICAgbVByb2plY3RDYWxsYmFjayA9IG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5zdGFudGlhdGUgYSBuZXcgQnJpZGdlSW5mbGF0ZXIgd2l0aCBhbiB7QGxpbmsgSVByb2plY3RDYWxsYmFja30gb2JqZWN0LgotICAgICAqCi0gICAgICogQHBhcmFtIGNvbnRleHQgVGhlIEFuZHJvaWQgYXBwbGljYXRpb24gY29udGV4dC4KLSAgICAgKiBAcGFyYW0gcHJvamVjdENhbGxiYWNrIHRoZSB7QGxpbmsgSVByb2plY3RDYWxsYmFja30gb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBCcmlkZ2VJbmZsYXRlcihDb250ZXh0IGNvbnRleHQsIElQcm9qZWN0Q2FsbGJhY2sgcHJvamVjdENhbGxiYWNrKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICBtUHJvamVjdENhbGxiYWNrID0gcHJvamVjdENhbGxiYWNrOwotICAgICAgICBtQ29uc3RydWN0b3JBcmdzWzBdID0gY29udGV4dDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVmlldyBvbkNyZWF0ZVZpZXcoU3RyaW5nIG5hbWUsIEF0dHJpYnV0ZVNldCBhdHRycykgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBWaWV3IHZpZXcgPSBudWxsOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBGaXJzdCB0cnkgdG8gZmluZCBhIGNsYXNzIHVzaW5nIHRoZSBkZWZhdWx0IEFuZHJvaWQgcHJlZml4ZXMKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIHByZWZpeCA6IHNDbGFzc1ByZWZpeExpc3QpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICB2aWV3ID0gY3JlYXRlVmlldyhuYW1lLCBwcmVmaXgsIGF0dHJzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlLiBXZSdsbCB0cnkgYWdhaW4gdXNpbmcgdGhlIGJhc2UgY2xhc3MgYmVsb3cuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBOZXh0IHRyeSB1c2luZyB0aGUgcGFyZW50IGxvYWRlci4gVGhpcyB3aWxsIG1vc3QgbGlrZWx5IG9ubHkgd29yayBmb3IKLSAgICAgICAgICAgIC8vIGZ1bGx5LXF1YWxpZmllZCBjbGFzcyBuYW1lcy4KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZpZXcgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB2aWV3ID0gc3VwZXIub25DcmVhdGVWaWV3KG5hbWUsIGF0dHJzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBJZ25vcmUuIFdlJ2xsIHRyeSBhZ2FpbiB1c2luZyB0aGUgY3VzdG9tIHZpZXcgbG9hZGVyIGJlbG93LgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGaW5hbGx5IHRyeSBhZ2FpbiB1c2luZyB0aGUgY3VzdG9tIHZpZXcgbG9hZGVyCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlmICh2aWV3ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldyA9IGxvYWRDdXN0b21WaWV3KG5hbWUsIGF0dHJzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2xhc3Mgd2FzIG5vdCBmb3VuZCwgd2UgdGhyb3cgdGhlIGV4Y2VwdGlvbiBkaXJlY3RseSwgYmVjYXVzZSB0aGlzCi0gICAgICAgICAgICAgICAgLy8gbWV0aG9kIGlzIGFscmVhZHkgZXhwZWN0ZWQgdG8gdGhyb3cgaXQuCi0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIFdyYXAgdGhlIHJlYWwgZXhjZXB0aW9uIGluIGEgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgc28gdGhhdCB0aGUgY2FsbGluZyBtZXRob2QKLSAgICAgICAgICAgIC8vIGNhbiBkZWFsIHdpdGggaXQuCi0gICAgICAgICAgICBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCJvbkNyZWF0ZVZpZXciLCBlKTsKLSAgICAgICAgICAgIHRocm93IGV4Y2VwdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHNldHVwVmlld0luQ29udGV4dCh2aWV3LCBhdHRycyk7Ci0KLSAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZXcgY3JlYXRlVmlld0Zyb21UYWcoVmlldyBwYXJlbnQsIFN0cmluZyBuYW1lLCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgVmlldyB2aWV3ID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZpZXcgPSBzdXBlci5jcmVhdGVWaWV3RnJvbVRhZyhwYXJlbnQsIG5hbWUsIGF0dHJzKTsKLSAgICAgICAgfSBjYXRjaCAoSW5mbGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyB0cnkgdG8gbG9hZCB0aGUgY2xhc3MgZnJvbSB1c2luZyB0aGUgY3VzdG9tIHZpZXcgbG9hZGVyCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHZpZXcgPSBsb2FkQ3VzdG9tVmlldyhuYW1lLCBhdHRycyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTIpIHsKLSAgICAgICAgICAgICAgICAvLyBXcmFwIHRoZSByZWFsIGV4Y2VwdGlvbiBpbiBhbiBJbmZsYXRlRXhjZXB0aW9uIHNvIHRoYXQgdGhlIGNhbGxpbmcKLSAgICAgICAgICAgICAgICAvLyBtZXRob2QgY2FuIGRlYWwgd2l0aCBpdC4KLSAgICAgICAgICAgICAgICBJbmZsYXRlRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG5ldyBJbmZsYXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGUyLmdldENsYXNzKCkuZXF1YWxzKENsYXNzTm90Rm91bmRFeGNlcHRpb24uY2xhc3MpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi5pbml0Q2F1c2UoZTIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi5pbml0Q2F1c2UoZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRocm93IGV4Y2VwdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHNldHVwVmlld0luQ29udGV4dCh2aWV3LCBhdHRycyk7Ci0KLSAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZXcgaW5mbGF0ZShpbnQgcmVzb3VyY2UsIFZpZXdHcm91cCByb290KSB7Ci0gICAgICAgIENvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICAgICAgaWYgKGNvbnRleHQgaW5zdGFuY2VvZiBCcmlkZ2VDb250ZXh0KSB7Ci0gICAgICAgICAgICBCcmlkZ2VDb250ZXh0IGJyaWRnZUNvbnRleHQgPSAoQnJpZGdlQ29udGV4dCljb250ZXh0OwotCi0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHZhbHVlID0gbnVsbDsKLQotICAgICAgICAgICAgUGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4gbGF5b3V0SW5mbyA9IEJyaWRnZS5yZXNvbHZlUmVzb3VyY2VJZChyZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAobGF5b3V0SW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBicmlkZ2VDb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpLmdldEZyYW1ld29ya1Jlc291cmNlKAotICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUeXBlLkxBWU9VVCwgbGF5b3V0SW5mby5nZXRTZWNvbmQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGxheW91dEluZm8gPSBtUHJvamVjdENhbGxiYWNrLnJlc29sdmVSZXNvdXJjZUlkKHJlc291cmNlKTsKLQotICAgICAgICAgICAgICAgIGlmIChsYXlvdXRJbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBicmlkZ2VDb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpLmdldFByb2plY3RSZXNvdXJjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVR5cGUuTEFZT1VULCBsYXlvdXRJbmZvLmdldFNlY29uZCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUodmFsdWUuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGYuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFhtbFB1bGxQYXJzZXIgcGFyc2VyID0gUGFyc2VyRmFjdG9yeS5jcmVhdGUoZik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEJyaWRnZVhtbEJsb2NrUGFyc2VyIGJyaWRnZVBhcnNlciA9IG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLCBicmlkZ2VDb250ZXh0LCBmYWxzZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZsYXRlKGJyaWRnZVBhcnNlciwgcm9vdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBwYXJzZSBmaWxlICIgKyBmLmdldEFic29sdXRlUGF0aCgpLCBlLCBudWxsIC8qZGF0YSovKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBWaWV3IGxvYWRDdXN0b21WaWV3KFN0cmluZyBuYW1lLCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLAotICAgICAgICAgICAgRXhjZXB0aW9uewotICAgICAgICBpZiAobVByb2plY3RDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBmaXJzdCBnZXQgdGhlIGNsYXNzbmFtZSBpbiBjYXNlIGl0J3Mgbm90IHRoZSBub2RlIG5hbWUKLSAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscygidmlldyIpKSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJzLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJjbGFzcyIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtQ29uc3RydWN0b3JBcmdzWzFdID0gYXR0cnM7Ci0KLSAgICAgICAgICAgIE9iamVjdCBjdXN0b21WaWV3ID0gbVByb2plY3RDYWxsYmFjay5sb2FkVmlldyhuYW1lLCBtQ29uc3RydWN0b3JTaWduYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgIG1Db25zdHJ1Y3RvckFyZ3MpOwotCi0gICAgICAgICAgICBpZiAoY3VzdG9tVmlldyBpbnN0YW5jZW9mIFZpZXcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKFZpZXcpY3VzdG9tVmlldzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXR1cFZpZXdJbkNvbnRleHQoVmlldyB2aWV3LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgaWYgKGdldENvbnRleHQoKSBpbnN0YW5jZW9mIEJyaWRnZUNvbnRleHQpIHsKLSAgICAgICAgICAgIEJyaWRnZUNvbnRleHQgYmMgPSAoQnJpZGdlQ29udGV4dCkgZ2V0Q29udGV4dCgpOwotICAgICAgICAgICAgaWYgKGF0dHJzIGluc3RhbmNlb2YgQnJpZGdlWG1sQmxvY2tQYXJzZXIpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2VYbWxCbG9ja1BhcnNlciBwYXJzZXIgPSAoQnJpZGdlWG1sQmxvY2tQYXJzZXIpIGF0dHJzOwotCi0gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSB2aWV3IGtleQotICAgICAgICAgICAgICAgIE9iamVjdCB2aWV3S2V5ID0gcGFyc2VyLmdldFZpZXdDb29raWUoKTsKLQotICAgICAgICAgICAgICAgIGlmICh2aWV3S2V5ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGN1cnJlbnREZXB0aCA9IHBhcnNlci5nZXREZXB0aCgpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHRlc3Qgd2hldGhlciB3ZSBhcmUgaW4gYW4gaW5jbHVkZWQgZmlsZSBvciBpbiBhIGFkYXB0ZXIgYmluZGluZyB2aWV3LgotICAgICAgICAgICAgICAgICAgICBCcmlkZ2VYbWxCbG9ja1BhcnNlciBwcmV2aW91c1BhcnNlciA9IGJjLmdldFByZXZpb3VzUGFyc2VyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1BhcnNlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb29rcyBsaWtlIHdlIGluc2lkZSBhbiBlbWJlZGRlZCBsYXlvdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGFwcGx5IHRoZSBjb29raWUgb2YgdGhlIGNhbGxpbmcgbm9kZSAoPGluY2x1ZGU+KSBpZiB3ZSBhcmUgYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0b3AgbGV2ZWwgb2YgdGhlIGVtYmVkZGVkIGxheW91dC4gSWYgdGhlcmUgaXMgYSBtZXJnZSB0YWcsIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgaXQgYW5kIGxvb2sgZm9yIHRoZSAybmQgbGV2ZWwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0ZXN0RGVwdGggPSBtSXNJbk1lcmdlID8gMiA6IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudERlcHRoID09IHRlc3REZXB0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdLZXkgPSBwcmV2aW91c1BhcnNlci5nZXRWaWV3Q29va2llKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGluIGEgbWVyZ2UsIHdyYXAgdGhlIGNvb2tpZSBpbiBhIE1lcmdlQ29va2llLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3S2V5ICE9IG51bGwgJiYgbUlzSW5NZXJnZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3S2V5ID0gbmV3IE1lcmdlQ29va2llKHZpZXdLZXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtUmVzb3VyY2VSZWZlcmVuY2UgIT0gbnVsbCAmJiBjdXJyZW50RGVwdGggPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBpZiB0aGVyZSdzIGEgcmVzb3VyY2UgcmVmZXJlbmNlLCB0aGlzIG1lYW5zIHdlIGFyZSBpbiBhbiBhZGFwdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBiaW5kaW5nIGNhc2UuIFNldCB0aGUgcmVzb3VyY2UgcmVmIGFzIHRoZSB2aWV3IGNvb2tpZSBvbmx5IGZvciB0aGUgdG9wCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXZlbCB2aWV3LgotICAgICAgICAgICAgICAgICAgICAgICAgdmlld0tleSA9IG1SZXNvdXJjZVJlZmVyZW5jZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh2aWV3S2V5ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgYmMuYWRkVmlld0tleSh2aWV3LCB2aWV3S2V5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJc0luTWVyZ2UoYm9vbGVhbiBpc0luTWVyZ2UpIHsKLSAgICAgICAgbUlzSW5NZXJnZSA9IGlzSW5NZXJnZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZVJlZmVyZW5jZShSZXNvdXJjZVJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAgICAgbVJlc291cmNlUmVmZXJlbmNlID0gcmVmZXJlbmNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMYXlvdXRJbmZsYXRlciBjbG9uZUluQ29udGV4dChDb250ZXh0IG5ld0NvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBCcmlkZ2VJbmZsYXRlcih0aGlzLCBuZXdDb250ZXh0KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvQ2hvcmVvZ3JhcGhlcl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0Nob3Jlb2dyYXBoZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc1ZWU1MC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvQ2hvcmVvZ3JhcGhlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSB1c2VkIHRvIHByb3ZpZGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIGEgc2VsZWN0IGZldyBtZXRob2RzIG9mIHtAbGluayBDaG9yZW9ncmFwaGVyfQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIENob3Jlb2dyYXBoZXIgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDaG9yZW9ncmFwaGVyX0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIHB1YmxpYyBzdGF0aWMgZmxvYXQgZ2V0UmVmcmVzaFJhdGUoKSB7Ci0gICAgICAgIHJldHVybiA2MC5mOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9EaXNwbGF5X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvRGlzcGxheV9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2RjODIxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9EaXNwbGF5X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLQotLyoqCi0gKiBEZWxlZ2F0ZSB1c2VkIHRvIHByb3ZpZGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIGEgc2VsZWN0IGZldyBtZXRob2RzIG9mIHtAbGluayBEaXNwbGF5fQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIERpc3BsYXkgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBEaXNwbGF5X0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZURpc3BsYXlJbmZvTG9ja2VkKERpc3BsYXkgdGhlRGlzcGxheSkgewotICAgICAgICAvLyBkbyBub3RoaW5nCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXJJbXBsLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMmNiYzEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0lXaW5kb3dNYW5hZ2VySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5JSW5wdXRDb250ZXh0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcuSUlucHV0TWV0aG9kQ2xpZW50OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db21wYXRpYmlsaXR5SW5mbzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklSZW1vdGVDYWxsYmFjazsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklBcHBsaWNhdGlvblRva2VuOwotaW1wb3J0IGFuZHJvaWQudmlldy5JSW5wdXRGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklPbktleWd1YXJkRXhpdFJlc3VsdDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSVJvdGF0aW9uV2F0Y2hlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSVdpbmRvd01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dTZXNzaW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQmFzaWMgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIElXaW5kb3dNYW5hZ2VyfSBzbyB0aGF0IHtAbGluayBEaXNwbGF5fSAoYW5kCi0gKiB7QGxpbmsgRGlzcGxheV9EZWxlZ2F0ZX0pIGNhbiByZXR1cm4gYSB2YWxpZCBpbnN0YW5jZS4KLSAqLwotcHVibGljIGNsYXNzIElXaW5kb3dNYW5hZ2VySW1wbCBpbXBsZW1lbnRzIElXaW5kb3dNYW5hZ2VyIHsKLQotICAgIHByaXZhdGUgZmluYWwgQ29uZmlndXJhdGlvbiBtQ29uZmlnOwotICAgIHByaXZhdGUgZmluYWwgRGlzcGxheU1ldHJpY3MgbU1ldHJpY3M7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVJvdGF0aW9uOwotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtSGFzTmF2aWdhdGlvbkJhcjsKLQotICAgIHB1YmxpYyBJV2luZG93TWFuYWdlckltcGwoQ29uZmlndXJhdGlvbiBjb25maWcsIERpc3BsYXlNZXRyaWNzIG1ldHJpY3MsIGludCByb3RhdGlvbiwKLSAgICAgICAgICAgIGJvb2xlYW4gaGFzTmF2aWdhdGlvbkJhcikgewotICAgICAgICBtQ29uZmlnID0gY29uZmlnOwotICAgICAgICBtTWV0cmljcyA9IG1ldHJpY3M7Ci0gICAgICAgIG1Sb3RhdGlvbiA9IHJvdGF0aW9uOwotICAgICAgICBtSGFzTmF2aWdhdGlvbkJhciA9IGhhc05hdmlnYXRpb25CYXI7Ci0gICAgfQotCi0gICAgLy8gY3VzdG9tIEFQSS4KLQotICAgIHB1YmxpYyBEaXNwbGF5TWV0cmljcyBnZXRNZXRyaWNzKCkgewotICAgICAgICByZXR1cm4gbU1ldHJpY3M7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBpbXBsZW1lbnRhdGlvbiBvZiBJV2luZG93TWFuYWdlciB0aGF0IHdlIGNhcmUgYWJvdXQgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRSb3RhdGlvbigpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbVJvdGF0aW9uOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGhhc05hdmlnYXRpb25CYXIoKSB7Ci0gICAgICAgIHJldHVybiBtSGFzTmF2aWdhdGlvbkJhcjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIHVudXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBJV2luZG93TWFuYWdlciAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhZGRBcHBUb2tlbihpbnQgYXJnMCwgSUFwcGxpY2F0aW9uVG9rZW4gYXJnMSwgaW50IGFyZzIsIGludCBhcmczLCBpbnQgYXJnNCwKLSAgICAgICAgICAgIGJvb2xlYW4gYXJnNSwgYm9vbGVhbiBhcmc2LCBpbnQgYXJnNywgaW50IGFyZzgpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkV2luZG93VG9rZW4oSUJpbmRlciBhcmcwLCBpbnQgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNsZWFyRm9yY2VkRGlzcGxheVNpemUoaW50IGRpc3BsYXlJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbGVhckZvcmNlZERpc3BsYXlEZW5zaXR5KGludCBkaXNwbGF5SWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0T3ZlcnNjYW4oaW50IGRpc3BsYXlJZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xvc2VTeXN0ZW1EaWFsb2dzKFN0cmluZyBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3RhcnRGcmVlemluZ1NjcmVlbihpbnQgZXhpdEFuaW0sIGludCBlbnRlckFuaW0pIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHN0b3BGcmVlemluZ1NjcmVlbigpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRpc2FibGVLZXlndWFyZChJQmluZGVyIGFyZzAsIFN0cmluZyBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZXhlY3V0ZUFwcFRyYW5zaXRpb24oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZXhpdEtleWd1YXJkU2VjdXJlbHkoSU9uS2V5Z3VhcmRFeGl0UmVzdWx0IGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBmcmVlemVSb3RhdGlvbihpbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXRBbmltYXRpb25TY2FsZShpbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0W10gZ2V0QW5pbWF0aW9uU2NhbGVzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBcHBPcmllbnRhdGlvbihJQXBwbGljYXRpb25Ub2tlbiBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFBlbmRpbmdBcHBUcmFuc2l0aW9uKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaW5LZXlndWFyZFJlc3RyaWN0ZWRJbnB1dE1vZGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaW5wdXRNZXRob2RDbGllbnRIYXNGb2N1cyhJSW5wdXRNZXRob2RDbGllbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzS2V5Z3VhcmRMb2NrZWQoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNLZXlndWFyZFNlY3VyZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ZpZXdTZXJ2ZXJSdW5uaW5nKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJV2luZG93U2Vzc2lvbiBvcGVuU2Vzc2lvbihJSW5wdXRNZXRob2RDbGllbnQgYXJnMCwgSUlucHV0Q29udGV4dCBhcmcxKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb3ZlcnJpZGVQZW5kaW5nQXBwVHJhbnNpdGlvbihTdHJpbmcgYXJnMCwgaW50IGFyZzEsIGludCBhcmcyLAotICAgICAgICAgICAgSVJlbW90ZUNhbGxiYWNrIHN0YXJ0ZWRDYWxsYmFjaykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG92ZXJyaWRlUGVuZGluZ0FwcFRyYW5zaXRpb25TY2FsZVVwKGludCBzdGFydFgsIGludCBzdGFydFksIGludCBzdGFydFdpZHRoLAotICAgICAgICAgICAgaW50IHN0YXJ0SGVpZ2h0KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG92ZXJyaWRlUGVuZGluZ0FwcFRyYW5zaXRpb25UaHVtYihCaXRtYXAgc3JjVGh1bWIsIGludCBzdGFydFgsIGludCBzdGFydFksCi0gICAgICAgICAgICBJUmVtb3RlQ2FsbGJhY2sgc3RhcnRlZENhbGxiYWNrLCBib29sZWFuIHNjYWxlVXApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcGF1c2VLZXlEaXNwYXRjaGluZyhJQmluZGVyIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBwcmVwYXJlQXBwVHJhbnNpdGlvbihpbnQgYXJnMCwgYm9vbGVhbiBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVlbmFibGVLZXlndWFyZChJQmluZGVyIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVBcHBUb2tlbihJQmluZGVyIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVXaW5kb3dUb2tlbihJQmluZGVyIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZXN1bWVLZXlEaXNwYXRjaGluZyhJQmluZGVyIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQml0bWFwIHNjcmVlbnNob3RBcHBsaWNhdGlvbnMoSUJpbmRlciBhcmcwLCBpbnQgZGlzcGxheUlkLCBpbnQgYXJnMSwKLSAgICAgICAgICAgIGludCBhcmcyLCBib29sZWFuIGFyZzMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFuaW1hdGlvblNjYWxlKGludCBhcmcwLCBmbG9hdCBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0QW5pbWF0aW9uU2NhbGVzKGZsb2F0W10gYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFwcEdyb3VwSWQoSUJpbmRlciBhcmcwLCBpbnQgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFwcE9yaWVudGF0aW9uKElBcHBsaWNhdGlvblRva2VuIGFyZzAsIGludCBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFwcFN0YXJ0aW5nV2luZG93KElCaW5kZXIgYXJnMCwgU3RyaW5nIGFyZzEsIGludCBhcmcyLCBDb21wYXRpYmlsaXR5SW5mbyBhcmczLAotICAgICAgICAgICAgQ2hhclNlcXVlbmNlIGFyZzQsIGludCBhcmc1LCBpbnQgYXJnNiwgaW50IGFyZzcsIGludCBhcmc4LCBJQmluZGVyIGFyZzksIGJvb2xlYW4gYXJnMTApCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFwcFZpc2liaWxpdHkoSUJpbmRlciBhcmcwLCBib29sZWFuIGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRBcHBXaWxsQmVIaWRkZW4oSUJpbmRlciBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEV2ZW50RGlzcGF0Y2hpbmcoYm9vbGVhbiBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEZvY3VzZWRBcHAoSUJpbmRlciBhcmcwLCBib29sZWFuIGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0SW5pdGlhbERpc3BsYXlTaXplKGludCBkaXNwbGF5SWQsIFBvaW50IHNpemUpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGdldEJhc2VEaXNwbGF5U2l6ZShpbnQgZGlzcGxheUlkLCBQb2ludCBzaXplKSB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRGb3JjZWREaXNwbGF5U2l6ZShpbnQgZGlzcGxheUlkLCBpbnQgYXJnMCwgaW50IGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRJbml0aWFsRGlzcGxheURlbnNpdHkoaW50IGRpc3BsYXlJZCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRCYXNlRGlzcGxheURlbnNpdHkoaW50IGRpc3BsYXlJZCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0Rm9yY2VkRGlzcGxheURlbnNpdHkoaW50IGRpc3BsYXlJZCwgaW50IGRlbnNpdHkpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0SW5Ub3VjaE1vZGUoYm9vbGVhbiBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldE5ld0NvbmZpZ3VyYXRpb24oQ29uZmlndXJhdGlvbiBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVJvdGF0aW9uKGJvb2xlYW4gYXJnMCwgYm9vbGVhbiBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFN0cmljdE1vZGVWaXN1YWxJbmRpY2F0b3JQcmVmZXJlbmNlKFN0cmluZyBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNob3dTdHJpY3RNb2RlVmlvbGF0aW9uKGJvb2xlYW4gYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdGFydEFwcEZyZWV6aW5nU2NyZWVuKElCaW5kZXIgYXJnMCwgaW50IGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnRWaWV3U2VydmVyKGludCBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3RhdHVzQmFyVmlzaWJpbGl0eUNoYW5nZWQoaW50IGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3RvcEFwcEZyZWV6aW5nU2NyZWVuKElCaW5kZXIgYXJnMCwgYm9vbGVhbiBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHN0b3BWaWV3U2VydmVyKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHRoYXdSb3RhdGlvbigpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbmZpZ3VyYXRpb24gdXBkYXRlT3JpZW50YXRpb25Gcm9tQXBwVG9rZW5zKENvbmZpZ3VyYXRpb24gYXJnMCwgSUJpbmRlciBhcmcxKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCB3YXRjaFJvdGF0aW9uKElSb3RhdGlvbldhdGNoZXIgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUm90YXRpb25XYXRjaGVyKElSb3RhdGlvbldhdGNoZXIgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gd2FpdEZvcldpbmRvd0RyYXduKElCaW5kZXIgdG9rZW4sIElSZW1vdGVDYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgYXNCaW5kZXIoKSB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRQcmVmZXJyZWRPcHRpb25zUGFuZWxHcmF2aXR5KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBHcmF2aXR5LkNFTlRFUl9IT1JJWk9OVEFMIHwgR3Jhdml0eS5CT1RUT007Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzbWlzc0tleWd1YXJkKCkgewotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGxvY2tOb3coQnVuZGxlIG9wdGlvbnMpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU2FmZU1vZGVFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgZ2V0Rm9jdXNlZFdpbmRvd1Rva2VuKCkgewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldElucHV0RmlsdGVyKElJbnB1dEZpbHRlciBmaWx0ZXIpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0V2luZG93RnJhbWUoSUJpbmRlciB0b2tlbiwgUmVjdCBvdXRGcmFtZSkgewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0TWFnbmlmaWNhdGlvbkNhbGxiYWNrcyhJTWFnbmlmaWNhdGlvbkNhbGxiYWNrcyBjYWxsYmFja3MpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldE1hZ25pZmljYXRpb25TcGVjKE1hZ25pZmljYXRpb25TcGVjIHNwZWMpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNYWduaWZpY2F0aW9uU3BlYyBnZXRDb21wYXRpYmxlTWFnbmlmaWNhdGlvblNwZWNGb3JXaW5kb3coSUJpbmRlciB3aW5kb3dUb2tlbikgewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzUm90YXRpb25Gcm96ZW4oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VG91Y2hFeHBsb3JhdGlvbkVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiM2ExYi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5YbWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi0vKioKLSAqIERlbGVnYXRlIHVzZWQgdG8gcHJvdmlkZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgYSBzZWxlY3QgZmV3IG1ldGhvZHMgb2Yge0BsaW5rIExheW91dEluZmxhdGVyfQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIExheW91dEluZmxhdGVyIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTGF5b3V0SW5mbGF0ZXJfRGVsZWdhdGUgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19NRVJHRSA9ICJtZXJnZSI7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc0lzSW5JbmNsdWRlID0gZmFsc2U7Ci0KLSAgICAvKioKLSAgICAgKiBSZWN1cnNpdmUgbWV0aG9kIHVzZWQgdG8gZGVzY2VuZCBkb3duIHRoZSB4bWwgaGllcmFyY2h5IGFuZCBpbnN0YW50aWF0ZQotICAgICAqIHZpZXdzLCBpbnN0YW50aWF0ZSB0aGVpciBjaGlsZHJlbiwgYW5kIHRoZW4gY2FsbCBvbkZpbmlzaEluZmxhdGUoKS4KLSAgICAgKgotICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24ganVzdCByZWNvcmRzIHRoZSBtZXJnZSBzdGF0dXMgYmVmb3JlIGNhbGxpbmcgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgckluZmxhdGUoTGF5b3V0SW5mbGF0ZXIgdGhpc0luZmxhdGVyLAotICAgICAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIsIFZpZXcgcGFyZW50LCBmaW5hbCBBdHRyaWJ1dGVTZXQgYXR0cnMsCi0gICAgICAgICAgICBib29sZWFuIGZpbmlzaEluZmxhdGUpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLSAgICAgICAgaWYgKGZpbmlzaEluZmxhdGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBtZXJnZSBySW5mbGF0ZSEKLSAgICAgICAgICAgIGlmICh0aGlzSW5mbGF0ZXIgaW5zdGFuY2VvZiBCcmlkZ2VJbmZsYXRlcikgewotICAgICAgICAgICAgICAgICgoQnJpZGdlSW5mbGF0ZXIpIHRoaXNJbmZsYXRlcikuc2V0SXNJbk1lcmdlKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gLS0tLSBTVEFSVCBERUZBVUxUIElNUExFTUVOVEFUSU9OLgotCi0gICAgICAgIHRoaXNJbmZsYXRlci5ySW5mbGF0ZV9PcmlnaW5hbChwYXJzZXIsIHBhcmVudCwgYXR0cnMsIGZpbmlzaEluZmxhdGUpOwotCi0gICAgICAgIC8vIC0tLS0gRU5EIERFRkFVTFQgSU1QTEVNRU5UQVRJT04uCi0KLSAgICAgICAgaWYgKGZpbmlzaEluZmxhdGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBtZXJnZSBySW5mbGF0ZSEKLSAgICAgICAgICAgIGlmICh0aGlzSW5mbGF0ZXIgaW5zdGFuY2VvZiBCcmlkZ2VJbmZsYXRlcikgewotICAgICAgICAgICAgICAgICgoQnJpZGdlSW5mbGF0ZXIpIHRoaXNJbmZsYXRlcikuc2V0SXNJbk1lcmdlKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwYXJzZUluY2x1ZGUoCi0gICAgICAgICAgICBMYXlvdXRJbmZsYXRlciB0aGlzSW5mbGF0ZXIsCi0gICAgICAgICAgICBYbWxQdWxsUGFyc2VyIHBhcnNlciwgVmlldyBwYXJlbnQsIEF0dHJpYnV0ZVNldCBhdHRycykKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLSAgICAgICAgaW50IHR5cGU7Ci0KLSAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFZpZXdHcm91cCkgewotICAgICAgICAgICAgZmluYWwgaW50IGxheW91dCA9IGF0dHJzLmdldEF0dHJpYnV0ZVJlc291cmNlVmFsdWUobnVsbCwgImxheW91dCIsIDApOwotICAgICAgICAgICAgaWYgKGxheW91dCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHZhbHVlID0gYXR0cnMuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImxheW91dCIpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbmZsYXRlRXhjZXB0aW9uKCJZb3UgbXVzdCBzcGVjaWZpeSBhIGxheW91dCBpbiB0aGUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGluY2x1ZGUgdGFnOiA8aW5jbHVkZSBsYXlvdXQ9XCJAbGF5b3V0L2xheW91dElEXCIgLz4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW5mbGF0ZUV4Y2VwdGlvbigiWW91IG11c3Qgc3BlY2lmaXkgYSB2YWxpZCBsYXlvdXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgInJlZmVyZW5jZS4gVGhlIGxheW91dCBJRCAiICsgdmFsdWUgKyAiIGlzIG5vdCB2YWxpZC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZpbmFsIFhtbFJlc291cmNlUGFyc2VyIGNoaWxkUGFyc2VyID0KLSAgICAgICAgICAgICAgICAgICAgdGhpc0luZmxhdGVyLmdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKS5nZXRMYXlvdXQobGF5b3V0KTsKLQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIEF0dHJpYnV0ZVNldCBjaGlsZEF0dHJzID0gWG1sLmFzQXR0cmlidXRlU2V0KGNoaWxkUGFyc2VyKTsKLQotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHR5cGUgPSBjaGlsZFBhcnNlci5uZXh0KCkpICE9IFhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAhPSBYbWxQdWxsUGFyc2VyLkVORF9ET0NVTUVOVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1wdHkuCi0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSBYbWxQdWxsUGFyc2VyLlNUQVJUX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEluZmxhdGVFeGNlcHRpb24oY2hpbGRQYXJzZXIuZ2V0UG9zaXRpb25EZXNjcmlwdGlvbigpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogTm8gc3RhcnQgdGFnIGZvdW5kISIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNoaWxkTmFtZSA9IGNoaWxkUGFyc2VyLmdldE5hbWUoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoVEFHX01FUkdFLmVxdWFscyhjaGlsZE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmZsYXRlIGFsbCBjaGlsZHJlbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNJbmZsYXRlci5ySW5mbGF0ZShjaGlsZFBhcnNlciwgcGFyZW50LCBjaGlsZEF0dHJzLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IHZpZXcgPSB0aGlzSW5mbGF0ZXIuY3JlYXRlVmlld0Zyb21UYWcocGFyZW50LCBjaGlsZE5hbWUsIGNoaWxkQXR0cnMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVmlld0dyb3VwIGdyb3VwID0gKFZpZXdHcm91cCkgcGFyZW50OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cnkgdG8gbG9hZCB0aGUgbGF5b3V0IHBhcmFtcyBzZXQgaW4gdGhlIDxpbmNsdWRlIC8+IHRhZy4gSWYKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXkgZG9uJ3QgZXhpc3QsIHdlIHdpbGwgcmVseSBvbiB0aGUgbGF5b3V0IHBhcmFtcyBzZXQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlZCBYTUwgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIER1cmluZyBhIGxheW91dHBhcmFtcyBnZW5lcmF0aW9uLCBhIHJ1bnRpbWUgZXhjZXB0aW9uIGlzIHRocm93bgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZWl0aGVyIGxheW91dF93aWR0aCBvciBsYXlvdXRfaGVpZ2h0IGlzIG1pc3NpbmcuIFdlIGNhdGNoCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGV4Y2VwdGlvbiBhbmQgc2V0IGxvY2FsUGFyYW1zIGFjY29yZGluZ2x5OiB0cnVlIG1lYW5zIHdlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWNjZXNzZnVsbHkgbG9hZGVkIGxheW91dCBwYXJhbXMgZnJvbSB0aGUgPGluY2x1ZGUgLz4gdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmFsc2UgbWVhbnMgd2UgbmVlZCB0byByZWx5IG9uIHRoZSBpbmNsdWRlZCBsYXlvdXQgcGFyYW1zLgotICAgICAgICAgICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcyBwYXJhbXMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtLS0tIFNUQVJUIENIQU5HRVMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzSXNJbkluY2x1ZGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tLS0gRU5EIENIQU5HRVMKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IGdyb3VwLmdlbmVyYXRlTGF5b3V0UGFyYW1zKGF0dHJzKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0tLSBTVEFSVCBDSEFOR0VTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc0lzSW5JbmNsdWRlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0tLSBFTkQgQ0hBTkdFUwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gZ3JvdXAuZ2VuZXJhdGVMYXlvdXRQYXJhbXMoY2hpbGRBdHRycyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tLS0gU1RBUlQgQ0hBTkdFUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNJc0luSW5jbHVkZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tLS0gRU5EIENIQU5HRVMKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnNldExheW91dFBhcmFtcyhwYXJhbXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5mbGF0ZSBhbGwgY2hpbGRyZW4uCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzSW5mbGF0ZXIuckluZmxhdGUoY2hpbGRQYXJzZXIsIHZpZXcsIGNoaWxkQXR0cnMsIHRydWUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG92ZXJyaWRlIHRoZSBpbmNsdWRlZCBsYXlvdXQncyBhbmRyb2lkOmlkIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmUgc2V0IG9uIHRoZSA8aW5jbHVkZSAvPiB0YWcgaXRzZWxmLgotICAgICAgICAgICAgICAgICAgICAgICAgVHlwZWRBcnJheSBhID0gdGhpc0luZmxhdGVyLm1Db250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlldywgMCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQgPSBhLmdldFJlc291cmNlSWQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlld19pZCwgVmlldy5OT19JRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGlsZSB3ZSdyZSBhdCBpdCwgbGV0J3MgdHJ5IHRvIG92ZXJyaWRlIGFuZHJvaWQ6dmlzaWJpbGl0eS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB2aXNpYmlsaXR5ID0gYS5nZXRJbnQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlld192aXNpYmlsaXR5LCAtMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhLnJlY3ljbGUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkICE9IFZpZXcuTk9fSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnNldElkKGlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2aXNpYmlsaXR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYWRkVmlldyh2aWV3KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkUGFyc2VyLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhyb3cgbmV3IEluZmxhdGVFeGNlcHRpb24oIjxpbmNsdWRlIC8+IGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgVmlld0dyb3VwIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBpbnQgY3VycmVudERlcHRoID0gcGFyc2VyLmdldERlcHRoKCk7Ci0gICAgICAgIHdoaWxlICgoKHR5cGUgPSBwYXJzZXIubmV4dCgpKSAhPSBYbWxQdWxsUGFyc2VyLkVORF9UQUcgfHwKLSAgICAgICAgICAgICAgICBwYXJzZXIuZ2V0RGVwdGgoKSA+IGN1cnJlbnREZXB0aCkgJiYgdHlwZSAhPSBYbWxQdWxsUGFyc2VyLkVORF9ET0NVTUVOVCkgewotICAgICAgICAgICAgLy8gRW1wdHkKLSAgICAgICAgfQotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvU3VyZmFjZVZpZXcuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9TdXJmYWNlVmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWE0YjNiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9TdXJmYWNlVmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuTW9ja1ZpZXc7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLQotLyoqCi0gKiBNb2NrIHZlcnNpb24gb2YgdGhlIFN1cmZhY2VWaWV3LgotICogT25seSBub24gb3ZlcnJpZGUgcHVibGljIG1ldGhvZHMgZnJvbSB0aGUgcmVhbCBTdXJmYWNlVmlldyBoYXZlIGJlZW4gYWRkZWQgaW4gdGhlcmUuCi0gKiBNZXRob2RzIHRoYXQgdGFrZSBhbiB1bmtub3duIGNsYXNzIGFzIHBhcmFtZXRlciBvciBhcyByZXR1cm4gb2JqZWN0LCBoYXZlIGJlZW4gcmVtb3ZlZCBmb3Igbm93LgotICoKLSAqIFRPRE86IGdlbmVyYXRlIGF1dG9tYXRpY2FsbHkuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU3VyZmFjZVZpZXcgZXh0ZW5kcyBNb2NrVmlldyB7Ci0KLSAgICBwdWJsaWMgU3VyZmFjZVZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN1cmZhY2VWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMgLCAwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3VyZmFjZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdXJmYWNlSG9sZGVyIGdldEhvbGRlcigpIHsKLSAgICAgICAgcmV0dXJuIG1TdXJmYWNlSG9sZGVyOwotICAgIH0KLQotICAgIHByaXZhdGUgU3VyZmFjZUhvbGRlciBtU3VyZmFjZUhvbGRlciA9IG5ldyBTdXJmYWNlSG9sZGVyKCkgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NyZWF0aW5nKCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGFkZENhbGxiYWNrKENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ2FsbGJhY2soQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRGaXhlZFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0U2l6ZUZyb21MYXlvdXQoKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0Rm9ybWF0KGludCBmb3JtYXQpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRUeXBlKGludCB0eXBlKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0S2VlcFNjcmVlbk9uKGJvb2xlYW4gc2NyZWVuT24pIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQ2FudmFzIGxvY2tDYW52YXMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQ2FudmFzIGxvY2tDYW52YXMoUmVjdCBkaXJ0eSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdW5sb2NrQ2FudmFzQW5kUG9zdChDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFN1cmZhY2UgZ2V0U3VyZmFjZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBSZWN0IGdldFN1cmZhY2VGcmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L1ZpZXdDb25maWd1cmF0aW9uX0FjY2Vzc29yLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvVmlld0NvbmZpZ3VyYXRpb25fQWNjZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM1MzNlMC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvVmlld0NvbmZpZ3VyYXRpb25fQWNjZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotLyoqCi0gKiBDbGFzcyBhbGxvd2luZyBhY2Nlc3MgdG8gcGFja2FnZS1wcm90ZWN0ZWQgbWV0aG9kcy9maWVsZHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBWaWV3Q29uZmlndXJhdGlvbl9BY2Nlc3NvciB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2xlYXJDb25maWd1cmF0aW9ucygpIHsKLSAgICAgICAgLy8gY2xlYXIgdGhlIHN0b3JlZCBWaWV3Q29uZmlndXJhdGlvbiBzaW5jZSB0aGUgbWFwIGlzIHBlciBkZW5zaXR5IGFuZCBub3QgcGVyIGNvbnRleHQuCi0gICAgICAgIFZpZXdDb25maWd1cmF0aW9uLnNDb25maWd1cmF0aW9ucy5jbGVhcigpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L1ZpZXdSb290SW1wbF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L1ZpZXdSb290SW1wbF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGI4NGVmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9WaWV3Um9vdEltcGxfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSB1c2VkIHRvIHByb3ZpZGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIGEgc2VsZWN0IGZldyBtZXRob2RzIG9mIHtAbGluayBWaWV3Um9vdEltcGx9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgVmlld1Jvb3RJbXBsIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVmlld1Jvb3RJbXBsX0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGlzSW5Ub3VjaE1vZGUoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gdGhpcyBhbGxvd3MgZGlzcGxheWluZyBzZWxlY3Rpb24uCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L1ZpZXdfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9WaWV3X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMTVmN2MuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L1ZpZXdfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSB1c2VkIHRvIHByb3ZpZGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIGEgc2VsZWN0IGZldyBtZXRob2RzIG9mIHtAbGluayBWaWV3fQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIFZpZXcgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBWaWV3X0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGlzSW5FZGl0TW9kZShWaWV3IHRoaXNWaWV3KSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyR2xvYmFsX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlckdsb2JhbF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjA2ZTU1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyR2xvYmFsX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgdXNlZCB0byBwcm92aWRlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlbGVjdCBmZXcgbWV0aG9kcyBvZgotICoge0BsaW5rIFdpbmRvd01hbmFnZXJHbG9iYWx9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgV2luZG93TWFuYWdlckdsb2JhbCBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqLwotcHVibGljIGNsYXNzIFdpbmRvd01hbmFnZXJHbG9iYWxfRGVsZWdhdGUgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgSVdpbmRvd01hbmFnZXIgc1NlcnZpY2U7Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICBwdWJsaWMgc3RhdGljIElXaW5kb3dNYW5hZ2VyIGdldFdpbmRvd01hbmFnZXJTZXJ2aWNlKCkgewotICAgICAgICByZXR1cm4gc1NlcnZpY2U7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBzdHVmZiAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0V2luZG93TWFuYWdlclNlcnZpY2UoSVdpbmRvd01hbmFnZXIgc2VydmljZSkgewotICAgICAgICBzU2VydmljZSA9IHNlcnZpY2U7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZDc4MzYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eTsKLQotaW1wb3J0IGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2VJbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5TZXJ2aWNlSW5mbzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSVdpbmRvdzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBTeXN0ZW0gbGV2ZWwgc2VydmljZSB0aGF0IHNlcnZlcyBhcyBhbiBldmVudCBkaXNwYXRjaCBmb3Ige0BsaW5rIEFjY2Vzc2liaWxpdHlFdmVudH1zLgotICogU3VjaCBldmVudHMgYXJlIGdlbmVyYXRlZCB3aGVuIHNvbWV0aGluZyBub3RhYmxlIGhhcHBlbnMgaW4gdGhlIHVzZXIgaW50ZXJmYWNlLAotICogZm9yIGV4YW1wbGUgYW4ge0BsaW5rIGFuZHJvaWQuYXBwLkFjdGl2aXR5fSBzdGFydHMsIHRoZSBmb2N1cyBvciBzZWxlY3Rpb24gb2YgYQotICoge0BsaW5rIGFuZHJvaWQudmlldy5WaWV3fSBjaGFuZ2VzIGV0Yy4gUGFydGllcyBpbnRlcmVzdGVkIGluIGhhbmRsaW5nIGFjY2Vzc2liaWxpdHkKLSAqIGV2ZW50cyBpbXBsZW1lbnQgYW5kIHJlZ2lzdGVyIGFuIGFjY2Vzc2liaWxpdHkgc2VydmljZSB3aGljaCBleHRlbmRzCi0gKiB7QGxpbmsgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5BY2Nlc3NpYmlsaXR5U2VydmljZX0uCi0gKgotICogQHNlZSBBY2Nlc3NpYmlsaXR5RXZlbnQKLSAqIEBzZWUgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5BY2Nlc3NpYmlsaXR5U2VydmljZQotICogQHNlZSBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCNnZXRTeXN0ZW1TZXJ2aWNlCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBBY2Nlc3NpYmlsaXR5TWFuYWdlciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgQWNjZXNzaWJpbGl0eU1hbmFnZXIgc0luc3RhbmNlID0gbmV3IEFjY2Vzc2liaWxpdHlNYW5hZ2VyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBMaXN0ZW5lciBmb3IgdGhlIGFjY2Vzc2liaWxpdHkgc3RhdGUuCi0gICAgICovCi0gICAgcHVibGljIGludGVyZmFjZSBBY2Nlc3NpYmlsaXR5U3RhdGVDaGFuZ2VMaXN0ZW5lciB7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCBiYWNrIG9uIGNoYW5nZSBpbiB0aGUgYWNjZXNzaWJpbGl0eSBzdGF0ZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGVuYWJsZWQgV2hldGhlciBhY2Nlc3NpYmlsaXR5IGlzIGVuYWJsZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBvbkFjY2Vzc2liaWxpdHlTdGF0ZUNoYW5nZWQoYm9vbGVhbiBlbmFibGVkKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYW4gQWNjZXNzaWJpbGl0eU1hbmFnZXIgaW5zdGFuY2UgKGNyZWF0ZSBvbmUgaWYgbmVjZXNzYXJ5KS4KLSAgICAgKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBBY2Nlc3NpYmlsaXR5TWFuYWdlciBnZXRJbnN0YW5jZShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIHNJbnN0YW5jZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYW4gaW5zdGFuY2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY29udGV4dCBBIHtAbGluayBDb250ZXh0fS4KLSAgICAgKi8KLSAgICBwcml2YXRlIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKCkgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgaWYgdGhlIHtAbGluayBBY2Nlc3NpYmlsaXR5TWFuYWdlcn0gaXMgZW5hYmxlZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIHtAbGluayBBY2Nlc3NpYmlsaXR5TWFuYWdlcn0gaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlbmRzIGFuIHtAbGluayBBY2Nlc3NpYmlsaXR5RXZlbnR9LiBJZiB0aGlzIHtAbGluayBBY2Nlc3NpYmlsaXR5TWFuYWdlcn0gaXMgbm90Ci0gICAgICogZW5hYmxlZCB0aGUgY2FsbCBpcyBhIE5PT1AuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIHtAbGluayBBY2Nlc3NpYmlsaXR5RXZlbnR9LgotICAgICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgYSBjbGllbnQgdHJpZXMgdG8gc2VuZCBhbiB7QGxpbmsgQWNjZXNzaWJpbGl0eUV2ZW50fQotICAgICAqICAgICAgICAgd2hpbGUgYWNjZXNzaWJpbGl0eSBpcyBub3QgZW5hYmxlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZW5kQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlcXVlc3RzIGludGVycnVwdGlvbiBvZiB0aGUgYWNjZXNzaWJpbGl0eSBmZWVkYmFjayBmcm9tIGFsbCBhY2Nlc3NpYmlsaXR5IHNlcnZpY2VzLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGludGVycnVwdCgpIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgU2VydmljZUluZm99cyBvZiB0aGUgaW5zdGFsbGVkIGFjY2Vzc2liaWxpdHkgc2VydmljZXMuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEFuIHVubW9kaWZpYWJsZSBsaXN0IHdpdGgge0BsaW5rIFNlcnZpY2VJbmZvfXMuCi0gICAgICovCi0gICAgcHVibGljIExpc3Q8U2VydmljZUluZm8+IGdldEFjY2Vzc2liaWxpdHlTZXJ2aWNlTGlzdCgpIHsKLSAgICAgICAgLy8gbm9ybWFsIGltcGxlbWVudGF0aW9uIGRvZXMgdGhpcyBpbiBzb21lIGNhc2UsIHNvIGxldCdzIGRvIHRoZSBzYW1lCi0gICAgICAgIC8vICh1bm1vZGlmaWFibGVMaXN0IHdyYXBwZWQgYXJvdW5kIG51bGwpLgotICAgICAgICBMaXN0PFNlcnZpY2VJbmZvPiBzZXJ2aWNlcyA9IG51bGw7Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KHNlcnZpY2VzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdDxBY2Nlc3NpYmlsaXR5U2VydmljZUluZm8+IGdldEluc3RhbGxlZEFjY2Vzc2liaWxpdHlTZXJ2aWNlTGlzdCgpIHsKLSAgICAgICAgLy8gbm9ybWFsIGltcGxlbWVudGF0aW9uIGRvZXMgdGhpcyBpbiBzb21lIGNhc2UsIHNvIGxldCdzIGRvIHRoZSBzYW1lCi0gICAgICAgIC8vICh1bm1vZGlmaWFibGVMaXN0IHdyYXBwZWQgYXJvdW5kIG51bGwpLgotICAgICAgICBMaXN0PEFjY2Vzc2liaWxpdHlTZXJ2aWNlSW5mbz4gc2VydmljZXMgPSBudWxsOwotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChzZXJ2aWNlcyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gYWRkQWNjZXNzaWJpbGl0eVN0YXRlQ2hhbmdlTGlzdGVuZXIoCi0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5U3RhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBY2Nlc3NpYmlsaXR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlTdGF0ZUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgYWRkQWNjZXNzaWJpbGl0eUludGVyYWN0aW9uQ29ubmVjdGlvbihJV2luZG93IHdpbmRvd1Rva2VuLAotICAgICAgICAgICAgSUFjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNvbm5lY3Rpb24gY29ubmVjdGlvbikgewotICAgICAgICByZXR1cm4gVmlldy5OT19JRDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVBY2Nlc3NpYmlsaXR5SW50ZXJhY3Rpb25Db25uZWN0aW9uKElXaW5kb3cgd2luZG93VG9rZW4pIHsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZE1hbmFnZXJfQWNjZXNzb3IuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZE1hbmFnZXJfQWNjZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM0ZjljOC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RNYW5hZ2VyX0FjY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2Q7Ci0KLS8qKgotICogQ2xhc3MgYWxsb3dpbmcgYWNjZXNzIHRvIHBhY2thZ2UtcHJvdGVjdGVkIG1ldGhvZHMvZmllbGRzLgotICovCi1wdWJsaWMgY2xhc3MgSW5wdXRNZXRob2RNYW5hZ2VyX0FjY2Vzc29yIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNldEluc3RhbmNlKCkgewotICAgICAgICBJbnB1dE1ldGhvZE1hbmFnZXIuc0luc3RhbmNlID0gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RNYW5hZ2VyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RNYW5hZ2VyX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOTg4NDcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kTWFuYWdlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUlJbnB1dE1ldGhvZE1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci0KLQotLyoqCi0gKiBEZWxlZ2F0ZSB1c2VkIHRvIHByb3ZpZGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIGEgc2VsZWN0IGZldyBtZXRob2RzIG9mIHtAbGluayBJbnB1dE1ldGhvZE1hbmFnZXJ9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgSW5wdXRNZXRob2RNYW5hZ2VyIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgSW5wdXRNZXRob2RNYW5hZ2VyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gT3ZlcnJpZGRlbiBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBJbnB1dE1ldGhvZE1hbmFnZXIgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoSW5wdXRNZXRob2RNYW5hZ2VyLmNsYXNzKSB7Ci0gICAgICAgICAgICBJbnB1dE1ldGhvZE1hbmFnZXIgaW1tID0gSW5wdXRNZXRob2RNYW5hZ2VyLnBlZWtJbnN0YW5jZSgpOwotICAgICAgICAgICAgaWYgKGltbSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaW1tID0gbmV3IElucHV0TWV0aG9kTWFuYWdlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCcmlkZ2VJSW5wdXRNZXRob2RNYW5hZ2VyKCksIExvb3Blci5nZXRNYWluTG9vcGVyKCkpOwotICAgICAgICAgICAgICAgIElucHV0TWV0aG9kTWFuYWdlci5zSW5zdGFuY2UgPSBpbW07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gaW1tOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC93ZWJraXQvV2ViVmlldy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC93ZWJraXQvV2ViVmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDJmMjA0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvd2Via2l0L1dlYlZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLndlYmtpdDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuTW9ja1ZpZXc7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpY3R1cmU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci0KLS8qKgotICogTW9jayB2ZXJzaW9uIG9mIHRoZSBXZWJWaWV3LgotICogT25seSBub24gb3ZlcnJpZGUgcHVibGljIG1ldGhvZHMgZnJvbSB0aGUgcmVhbCBXZWJWaWV3IGhhdmUgYmVlbiBhZGRlZCBpbiB0aGVyZS4KLSAqIE1ldGhvZHMgdGhhdCB0YWtlIGFuIHVua25vd24gY2xhc3MgYXMgcGFyYW1ldGVyIG9yIGFzIHJldHVybiBvYmplY3QsIGhhdmUgYmVlbiByZW1vdmVkIGZvciBub3cuCi0gKiAKLSAqIFRPRE86IGdlbmVyYXRlIGF1dG9tYXRpY2FsbHkuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgV2ViVmlldyBleHRlbmRzIE1vY2tWaWV3IHsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIG5ldyBXZWJWaWV3IHdpdGggYSBDb250ZXh0IG9iamVjdC4KLSAgICAgKiBAcGFyYW0gY29udGV4dCBBIENvbnRleHQgb2JqZWN0IHVzZWQgdG8gYWNjZXNzIGFwcGxpY2F0aW9uIGFzc2V0cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgV2ViVmlldyhDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgV2ViVmlldyB3aXRoIGxheW91dCBwYXJhbWV0ZXJzLgotICAgICAqIEBwYXJhbSBjb250ZXh0IEEgQ29udGV4dCBvYmplY3QgdXNlZCB0byBhY2Nlc3MgYXBwbGljYXRpb24gYXNzZXRzLgotICAgICAqIEBwYXJhbSBhdHRycyBBbiBBdHRyaWJ1dGVTZXQgcGFzc2VkIHRvIG91ciBwYXJlbnQuCi0gICAgICovCi0gICAgcHVibGljIFdlYlZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLndlYlZpZXdTdHlsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0IGEgbmV3IFdlYlZpZXcgd2l0aCBsYXlvdXQgcGFyYW1ldGVycyBhbmQgYSBkZWZhdWx0IHN0eWxlLgotICAgICAqIEBwYXJhbSBjb250ZXh0IEEgQ29udGV4dCBvYmplY3QgdXNlZCB0byBhY2Nlc3MgYXBwbGljYXRpb24gYXNzZXRzLgotICAgICAqIEBwYXJhbSBhdHRycyBBbiBBdHRyaWJ1dGVTZXQgcGFzc2VkIHRvIG91ciBwYXJlbnQuCi0gICAgICogQHBhcmFtIGRlZlN0eWxlIFRoZSBkZWZhdWx0IHN0eWxlIHJlc291cmNlIElELgotICAgICAqLwotICAgIHB1YmxpYyBXZWJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gU1RBUlQgRkFLRSBQVUJMSUMgTUVUSE9EUwotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldEhvcml6b250YWxTY3JvbGxiYXJPdmVybGF5KGJvb2xlYW4gb3ZlcmxheSkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFZlcnRpY2FsU2Nyb2xsYmFyT3ZlcmxheShib29sZWFuIG92ZXJsYXkpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBvdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhcigpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIG92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcigpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmVQYXNzd29yZChTdHJpbmcgaG9zdCwgU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRIdHRwQXV0aFVzZXJuYW1lUGFzc3dvcmQoU3RyaW5nIGhvc3QsIFN0cmluZyByZWFsbSwKLSAgICAgICAgICAgIFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1tdIGdldEh0dHBBdXRoVXNlcm5hbWVQYXNzd29yZChTdHJpbmcgaG9zdCwgU3RyaW5nIHJlYWxtKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGVuYWJsZVBsYXRmb3JtTm90aWZpY2F0aW9ucygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVBsYXRmb3JtTm90aWZpY2F0aW9ucygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkVXJsKFN0cmluZyB1cmwpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkRGF0YShTdHJpbmcgZGF0YSwgU3RyaW5nIG1pbWVUeXBlLCBTdHJpbmcgZW5jb2RpbmcpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkRGF0YVdpdGhCYXNlVVJMKFN0cmluZyBiYXNlVXJsLCBTdHJpbmcgZGF0YSwKLSAgICAgICAgICAgIFN0cmluZyBtaW1lVHlwZSwgU3RyaW5nIGVuY29kaW5nLCBTdHJpbmcgZmFpbFVybCkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN0b3BMb2FkaW5nKCkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbG9hZCgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBjYW5Hb0JhY2soKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBnb0JhY2soKSB7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gY2FuR29Gb3J3YXJkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZ29Gb3J3YXJkKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGNhbkdvQmFja09yRm9yd2FyZChpbnQgc3RlcHMpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGdvQmFja09yRm9yd2FyZChpbnQgc3RlcHMpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwYWdlVXAoYm9vbGVhbiB0b3ApIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBwYWdlRG93bihib29sZWFuIGJvdHRvbSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2xlYXJWaWV3KCkgewotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgUGljdHVyZSBjYXB0dXJlUGljdHVyZSgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGZsb2F0IGdldFNjYWxlKCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2NhbGUoaW50IHNjYWxlSW5QZXJjZW50KSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW52b2tlWm9vbVBpY2tlcigpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXF1ZXN0Rm9jdXNOb2RlSHJlZihNZXNzYWdlIGhyZWZNc2cpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXF1ZXN0SW1hZ2VSZWYoTWVzc2FnZSBtc2cpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVybCgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIEJpdG1hcCBnZXRGYXZpY29uKCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFByb2dyZXNzKCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGludCBnZXRDb250ZW50SGVpZ2h0KCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBwYXVzZVRpbWVycygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXN1bWVUaW1lcnMoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2xlYXJDYWNoZSgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbGVhckZvcm1EYXRhKCkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNsZWFySGlzdG9yeSgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbGVhclNzbFByZWZlcmVuY2VzKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZpbmRBZGRyZXNzKFN0cmluZyBhZGRyKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRvY3VtZW50SGFzSW1hZ2VzKE1lc3NhZ2UgcmVzcG9uc2UpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRXZWJWaWV3Q2xpZW50KFdlYlZpZXdDbGllbnQgY2xpZW50KSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RG93bmxvYWRMaXN0ZW5lcihEb3dubG9hZExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0V2ViQ2hyb21lQ2xpZW50KFdlYkNocm9tZUNsaWVudCBjbGllbnQpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRKYXZhc2NyaXB0SW50ZXJmYWNlKE9iamVjdCBvYmosIFN0cmluZyBpbnRlcmZhY2VOYW1lKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFZpZXcgZ2V0Wm9vbUNvbnRyb2xzKCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB6b29tSW4oKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB6b29tT3V0KCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L1BvbGljeU1hbmFnZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9Qb2xpY3lNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMDBkYzUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L1BvbGljeU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlJlbmRlckFjdGlvbjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQudmlldy5CcmlkZ2VJbmZsYXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuRmFsbGJhY2tFdmVudEhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5OwotCi0vKioKLSAqIEN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiBQb2xpY3lNYW5hZ2VyIHRoYXQgZG9lcyBub3RoaW5nIHRvIHJ1biBpbiBMYXlvdXRMaWIuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUG9saWN5TWFuYWdlciB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIFdpbmRvdyBtYWtlTmV3V2luZG93KENvbnRleHQgY29udGV4dCkgewotICAgICAgICAvLyB0aGlzIHdpbGwgbGlrZWx5IGNyYXNoIHNvbWV3aGVyZSBiZXlvbmQgc28gd2UgbG9nIGl0LgotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQ2FsbCB0byBQb2xpY3lNYW5hZ2VyLm1ha2VOZXdXaW5kb3cgaXMgbm90IHN1cHBvcnRlZCIsIG51bGwpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIExheW91dEluZmxhdGVyIG1ha2VOZXdMYXlvdXRJbmZsYXRlcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBCcmlkZ2VJbmZsYXRlcihjb250ZXh0LCBSZW5kZXJBY3Rpb24uZ2V0Q3VycmVudENvbnRleHQoKS5nZXRQcm9qZWN0Q2FsbGJhY2soKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBXaW5kb3dNYW5hZ2VyUG9saWN5IG1ha2VOZXdXaW5kb3dNYW5hZ2VyKCkgewotICAgICAgICAvLyB0aGlzIHdpbGwgbGlrZWx5IGNyYXNoIHNvbWV3aGVyZSBiZXlvbmQgc28gd2UgbG9nIGl0LgotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQ2FsbCB0byBQb2xpY3lNYW5hZ2VyLm1ha2VOZXdXaW5kb3dNYW5hZ2VyIGlzIG5vdCBzdXBwb3J0ZWQiLCBudWxsKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBGYWxsYmFja0V2ZW50SGFuZGxlciBtYWtlTmV3RmFsbGJhY2tFdmVudEhhbmRsZXIoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBuZXcgRmFsbGJhY2tFdmVudEhhbmRsZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldFZpZXcoVmlldyB2KSB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgcHJlRGlzcGF0Y2hLZXlFdmVudChLZXlFdmVudCBldmVudCkgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoS2V5RXZlbnQoS2V5RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGV4dHNlcnZpY2UvSVRleHRTZXJ2aWNlc01hbmFnZXJfU3R1Yl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGV4dHNlcnZpY2UvSVRleHRTZXJ2aWNlc01hbmFnZXJfU3R1Yl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDE3MjkyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3RleHRzZXJ2aWNlL0lUZXh0U2VydmljZXNNYW5hZ2VyX1N0dWJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZXh0c2VydmljZTsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLnZpZXcudGV4dHNlcnZpY2UuU3BlbGxDaGVja2VySW5mbzsKLWltcG9ydCBhbmRyb2lkLnZpZXcudGV4dHNlcnZpY2UuU3BlbGxDaGVja2VyU3VidHlwZTsKLQotCi0vKioKLSAqIERlbGVnYXRlIHVzZWQgdG8gcHJvdmlkZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgYSBzZWxlY3QgZmV3IG1ldGhvZHMgb2YKLSAqIHtAbGluayBJVGV4dFNlcnZpY2VzTWFuYWdlciRTdHVifQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIFN0dWIgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBJVGV4dFNlcnZpY2VzTWFuYWdlcl9TdHViX0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIHB1YmxpYyBzdGF0aWMgSVRleHRTZXJ2aWNlc01hbmFnZXIgYXNJbnRlcmZhY2UoSUJpbmRlciBvYmopIHsKLSAgICAgICAgLy8gaWdub3JlIHRoZSBvYmogYW5kIHJldHVybiBhIGZha2UgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uCi0gICAgICAgIHJldHVybiBuZXcgRmFrZVRleHRTZXJ2aWNlc01hbmFnZXIoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBGYWtlVGV4dFNlcnZpY2VzTWFuYWdlciBpbXBsZW1lbnRzIElUZXh0U2VydmljZXNNYW5hZ2VyIHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZmluaXNoU3BlbGxDaGVja2VyU2VydmljZShJU3BlbGxDaGVja2VyU2Vzc2lvbkxpc3RlbmVyIGFyZzApCi0gICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3BlbGxDaGVja2VySW5mbyBnZXRDdXJyZW50U3BlbGxDaGVja2VyKFN0cmluZyBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTcGVsbENoZWNrZXJTdWJ0eXBlIGdldEN1cnJlbnRTcGVsbENoZWNrZXJTdWJ0eXBlKFN0cmluZyBhcmcwLCBib29sZWFuIGFyZzEpCi0gICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3BlbGxDaGVja2VySW5mb1tdIGdldEVuYWJsZWRTcGVsbENoZWNrZXJzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBnZXRTcGVsbENoZWNrZXJTZXJ2aWNlKFN0cmluZyBhcmcwLCBTdHJpbmcgYXJnMSwKLSAgICAgICAgICAgICAgICBJVGV4dFNlcnZpY2VzU2Vzc2lvbkxpc3RlbmVyIGFyZzIsIElTcGVsbENoZWNrZXJTZXNzaW9uTGlzdGVuZXIgYXJnMywgQnVuZGxlIGFyZzQpCi0gICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1NwZWxsQ2hlY2tlckVuYWJsZWQoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50U3BlbGxDaGVja2VyKFN0cmluZyBhcmcwLCBTdHJpbmcgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50U3BlbGxDaGVja2VyU3VidHlwZShTdHJpbmcgYXJnMCwgaW50IGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0U3BlbGxDaGVja2VyRW5hYmxlZChib29sZWFuIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIElCaW5kZXIgYXNCaW5kZXIoKSB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgfQotIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvWG1sVXRpbHNfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvWG1sVXRpbHNfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY5OThiOC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL1htbFV0aWxzX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0KLS8qKgotICogRGVsZWdhdGUgdXNlZCB0byBwcm92aWRlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlbGVjdCBmZXcgbWV0aG9kcyBvZiB7QGxpbmsgWG1sVXRpbHN9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgWG1sVXRpbHMgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBYbWxVdGlsc19EZWxlZ2F0ZSB7Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmluYWwgaW50IGNvbnZlcnRWYWx1ZVRvSW50KENoYXJTZXF1ZW5jZSBjaGFyU2VxLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIGlmIChudWxsID09IGNoYXJTZXEpCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotCi0gICAgICAgIFN0cmluZyBubSA9IGNoYXJTZXEudG9TdHJpbmcoKTsKLQotICAgICAgICAvLyBUaGlzIGNvZGUgaXMgY29waWVkIGZyb20gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLiBUaGUgaXNzdWUgaXMgdGhhdAotICAgICAgICAvLyBUaGUgRGFsdmlrIGxpYnJhcmllcyBhcmUgYWJsZSB0byBoYW5kbGUgSW50ZWdlci5wYXJzZSgiWFhYWFhYWFgiLCAxNikgd2hlcmUgWFhYWFhYWAotICAgICAgICAvLyBpcyA+IDgwMDAwMDAwIGJ1dCB0aGUgSmF2YSBWTSBjYW5ub3QuCi0KLSAgICAgICAgaW50IHNpZ24gPSAxOwotICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICBpbnQgbGVuID0gbm0ubGVuZ3RoKCk7Ci0gICAgICAgIGludCBiYXNlID0gMTA7Ci0KLSAgICAgICAgaWYgKCctJyA9PSBubS5jaGFyQXQoMCkpIHsKLSAgICAgICAgICAgIHNpZ24gPSAtMTsKLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoJzAnID09IG5tLmNoYXJBdChpbmRleCkpIHsKLSAgICAgICAgICAgIC8vICBRdWljayBjaGVjayBmb3IgYSB6ZXJvIGJ5IGl0c2VsZgotICAgICAgICAgICAgaWYgKGluZGV4ID09IChsZW4gLSAxKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgY2hhciBjID0gbm0uY2hhckF0KGluZGV4ICsgMSk7Ci0KLSAgICAgICAgICAgIGlmICgneCcgPT0gYyB8fCAnWCcgPT0gYykgewotICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IDE2OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICAgICAgIGJhc2UgPSA4OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCcjJyA9PSBubS5jaGFyQXQoaW5kZXgpKSB7Ci0gICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICAgYmFzZSA9IDE2OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICgoaW50KUxvbmcucGFyc2VMb25nKG5tLnN1YnN0cmluZyhpbmRleCksIGJhc2UpKSAqIHNpZ247Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2UuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvQnJpZGdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNGJlNzEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlOwotCi1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLkVSUk9SX1VOS05PV047Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLlNVQ0NFU1M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuQ2FwYWJpbGl0eTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuRHJhd2FibGVQYXJhbXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVuZGVyU2Vzc2lvbjsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5TZXNzaW9uUGFyYW1zOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5Gb250TG9hZGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5SZW5kZXJEcmF3YWJsZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUmVuZGVyU2Vzc2lvbkltcGw7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS51dGlsLkR5bmFtaWNJZE1hcDsKLWltcG9ydCBjb20uYW5kcm9pZC5uaW5lcGF0Y2guTmluZVBhdGNoQ2h1bms7Ci1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLlJlc291cmNlVHlwZTsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLk1ldGhvZEFkYXB0ZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5PdmVycmlkZU1ldGhvZDsKLWltcG9ydCBjb20uYW5kcm9pZC51dGlsLlBhaXI7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5VTG9jYWxlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5CcmlkZ2VBc3NldE1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5UeXBlZmFjZV9BY2Nlc3NvcjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlR5cGVmYWNlX0RlbGVnYXRlOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyX0FjY2Vzc29yOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdQYXJlbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZi5Tb2Z0UmVmZXJlbmNlOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrOwotCi0vKioKLSAqIE1haW4gZW50cnkgcG9pbnQgb2YgdGhlIExheW91dExpYiBCcmlkZ2UuCi0gKiA8cC8+VG8gdXNlIHRoaXMgYnJpZGdlLCBzaW1wbHkgaW5zdGFudGlhdGUgYW4gb2JqZWN0IG9mIHR5cGUge0BsaW5rIEJyaWRnZX0gYW5kIGNhbGwKLSAqIHtAbGluayAjY3JlYXRlU2NlbmUoU2NlbmVQYXJhbXMpfQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQnJpZGdlIGV4dGVuZHMgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkJyaWRnZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNVX0xPQ0FMRV9ESVJFQ1RJT05fUlRMID0gInJpZ2h0LXRvLWxlZnQiOwotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNNZXRob2ROb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24gewotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAgICAgICBwdWJsaWMgU3RhdGljTWV0aG9kTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oU3RyaW5nIG1zZykgewotICAgICAgICAgICAgc3VwZXIobXNnKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIExvY2sgdG8gZW5zdXJlIG9ubHkgb25lIHJlbmRlcmluZy9pbmZsYXRpbmcgaGFwcGVucyBhdCBhIHRpbWUuCi0gICAgICogVGhpcyBpcyBkdWUgdG8gc29tZSBzaW5nbGV0b24gaW4gdGhlIEFuZHJvaWQgZnJhbWV3b3JrLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFJlZW50cmFudExvY2sgc0xvY2sgPSBuZXcgUmVlbnRyYW50TG9jaygpOwotCi0gICAgLyoqCi0gICAgICogTWFwcyBmcm9tIGlkIHRvIHJlc291cmNlIHR5cGUvbmFtZS4gVGhpcyBpcyBmb3IgY29tLmFuZHJvaWQuaW50ZXJuYWwuUgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hcDxJbnRlZ2VyLCBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPj4gc1JNYXAgPQotICAgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPj4oKTsKLQotICAgIC8qKgotICAgICAqIFNhbWUgYXMgc1JNYXAgZXhjZXB0IGZvciBpbnRbXSBpbnN0ZWFkIG9mIGludCByZXNvdXJjZXMuIFRoaXMgaXMgZm9yIGFuZHJvaWQuUiBvbmx5LgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hcDxJbnRBcnJheSwgU3RyaW5nPiBzUkFycmF5TWFwID0gbmV3IEhhc2hNYXA8SW50QXJyYXksIFN0cmluZz4oKTsKLSAgICAvKioKLSAgICAgKiBSZXZlcnNlIG1hcCBjb21wYXJlZCB0byBzUk1hcCwgcmVzb3VyY2UgdHlwZSAtPiAocmVzb3VyY2UgbmFtZSAtPiBpZCkuCi0gICAgICogVGhpcyBpcyBmb3IgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8UmVzb3VyY2VUeXBlLCBNYXA8U3RyaW5nLCBJbnRlZ2VyPj4gc1JldlJNYXAgPQotICAgICAgICBuZXcgRW51bU1hcDxSZXNvdXJjZVR5cGUsIE1hcDxTdHJpbmcsSW50ZWdlcj4+KFJlc291cmNlVHlwZS5jbGFzcyk7Ci0KLSAgICAvLyBmcmFtZXdvcmsgcmVzb3VyY2VzIGFyZSBkZWZpbmVkIGFzIDB4MDFYWCMjIyMgd2hlcmUgWFggaXMgdGhlIHJlc291cmNlIHR5cGUgKGxheW91dCwKLSAgICAvLyBkcmF3YWJsZSwgZXRjLi4uKS4gVXNpbmcgRkYgYXMgdGhlIHR5cGUgYWxsb3dzIGZvciAyNTUgcmVzb3VyY2UgdHlwZXMgYmVmb3JlIHdlIGdldCBhCi0gICAgLy8gY29sbGlzaW9uIHdoaWNoIHNob3VsZCBiZSBmaW5lLgotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBEWU5BTUlDX0lEX1NFRURfU1RBUlQgPSAweDAxZmYwMDAwOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIER5bmFtaWNJZE1hcCBzRHluYW1pY0lkcyA9IG5ldyBEeW5hbWljSWRNYXAoRFlOQU1JQ19JRF9TRUVEX1NUQVJUKTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hcDxPYmplY3QsIE1hcDxTdHJpbmcsIFNvZnRSZWZlcmVuY2U8Qml0bWFwPj4+IHNQcm9qZWN0Qml0bWFwQ2FjaGUgPQotICAgICAgICBuZXcgSGFzaE1hcDxPYmplY3QsIE1hcDxTdHJpbmcsIFNvZnRSZWZlcmVuY2U8Qml0bWFwPj4+KCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTWFwPE9iamVjdCwgTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxOaW5lUGF0Y2hDaHVuaz4+PiBzUHJvamVjdDlQYXRjaENhY2hlID0KLSAgICAgICAgbmV3IEhhc2hNYXA8T2JqZWN0LCBNYXA8U3RyaW5nLCBTb2Z0UmVmZXJlbmNlPE5pbmVQYXRjaENodW5rPj4+KCk7Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8U3RyaW5nLCBTb2Z0UmVmZXJlbmNlPEJpdG1hcD4+IHNGcmFtZXdvcmtCaXRtYXBDYWNoZSA9Ci0gICAgICAgIG5ldyBIYXNoTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxCaXRtYXA+PigpOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hcDxTdHJpbmcsIFNvZnRSZWZlcmVuY2U8TmluZVBhdGNoQ2h1bms+PiBzRnJhbWV3b3JrOVBhdGNoQ2FjaGUgPQotICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsIFNvZnRSZWZlcmVuY2U8TmluZVBhdGNoQ2h1bms+PigpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgTWFwPFN0cmluZywgSW50ZWdlcj4+IHNFbnVtVmFsdWVNYXA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBzUGxhdGZvcm1Qcm9wZXJ0aWVzOwotCi0gICAgLyoqCi0gICAgICogaW50W10gd3JhcHBlciB0byB1c2UgYXMga2V5cyBpbiBtYXBzLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGNsYXNzIEludEFycmF5IHsKLSAgICAgICAgcHJpdmF0ZSBpbnRbXSBtQXJyYXk7Ci0KLSAgICAgICAgcHJpdmF0ZSBJbnRBcnJheSgpIHsKLSAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgSW50QXJyYXkoaW50W10gYSkgewotICAgICAgICAgICAgbUFycmF5ID0gYTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBzZXQoaW50W10gYSkgewotICAgICAgICAgICAgbUFycmF5ID0gYTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICAgICAgcmV0dXJuIEFycmF5cy5oYXNoQ29kZShtQXJyYXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgICBpZiAodGhpcyA9PSBvYmopIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoZ2V0Q2xhc3MoKSAhPSBvYmouZ2V0Q2xhc3MoKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBJbnRBcnJheSBvdGhlciA9IChJbnRBcnJheSkgb2JqOwotICAgICAgICAgICAgaWYgKCFBcnJheXMuZXF1YWxzKG1BcnJheSwgb3RoZXIubUFycmF5KSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogSW5zdGFuY2Ugb2YgSW50QXJyYXlXcmFwcGVyIHRvIGJlIHJldXNlZCBpbiB7QGxpbmsgI3Jlc29sdmVSZXNvdXJjZUlkKGludFtdKX0uICovCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgSW50QXJyYXkgc0ludEFycmF5V3JhcHBlciA9IG5ldyBJbnRBcnJheSgpOwotCi0gICAgLyoqCi0gICAgICogQSBkZWZhdWx0IGxvZyB0aGFuIHByaW50cyB0byBzdGRvdXQvc3RkZXJyLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIExheW91dExvZyBzRGVmYXVsdExvZyA9IG5ldyBMYXlvdXRMb2coKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlcnJvcihTdHJpbmcgdGFnLCBTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IGRhdGEpIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlcnJvcihTdHJpbmcgdGFnLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIHRocm93YWJsZSwgT2JqZWN0IGRhdGEpIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB3YXJuaW5nKFN0cmluZyB0YWcsIFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZGF0YSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIEN1cnJlbnQgbG9nLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIExheW91dExvZyBzQ3VycmVudExvZyA9IHNEZWZhdWx0TG9nOwotCi0gICAgcHJpdmF0ZSBFbnVtU2V0PENhcGFiaWxpdHk+IG1DYXBhYmlsaXRpZXM7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEFwaUxldmVsKCkgewotICAgICAgICByZXR1cm4gY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkJyaWRnZS5BUElfQ1VSUkVOVDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRW51bVNldDxDYXBhYmlsaXR5PiBnZXRDYXBhYmlsaXRpZXMoKSB7Ci0gICAgICAgIHJldHVybiBtQ2FwYWJpbGl0aWVzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGluaXQoTWFwPFN0cmluZyxTdHJpbmc+IHBsYXRmb3JtUHJvcGVydGllcywKLSAgICAgICAgICAgIEZpbGUgZm9udExvY2F0aW9uLAotICAgICAgICAgICAgTWFwPFN0cmluZywgTWFwPFN0cmluZywgSW50ZWdlcj4+IGVudW1WYWx1ZU1hcCwKLSAgICAgICAgICAgIExheW91dExvZyBsb2cpIHsKLSAgICAgICAgc1BsYXRmb3JtUHJvcGVydGllcyA9IHBsYXRmb3JtUHJvcGVydGllczsKLSAgICAgICAgc0VudW1WYWx1ZU1hcCA9IGVudW1WYWx1ZU1hcDsKLQotICAgICAgICAvLyBkb24ndCB1c2UgRW51bVNldC5hbGxPZigpLCBiZWNhdXNlIHRoZSBicmlkZ2UgZG9lc24ndCBjb21lIHdpdGggaXRzIHNwZWNpZmljIHZlcnNpb24KLSAgICAgICAgLy8gb2YgbGF5b3V0bGliX2FwaS4gSXQgaXMgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCB3aGljaCBjb3VsZCBoYXZlIGEgbW9yZSByZWNlbnQgdmVyc2lvbgotICAgICAgICAvLyB3aXRoIG5ld2VyLCB1bnN1cHBvcnRlZCBjYXBhYmlsaXRpZXMuCi0gICAgICAgIG1DYXBhYmlsaXRpZXMgPSBFbnVtU2V0Lm9mKAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuVU5CT1VORF9SRU5ERVJJTkcsCi0gICAgICAgICAgICAgICAgQ2FwYWJpbGl0eS5DVVNUT01fQkFDS0dST1VORF9DT0xPUiwKLSAgICAgICAgICAgICAgICBDYXBhYmlsaXR5LlJFTkRFUiwKLSAgICAgICAgICAgICAgICBDYXBhYmlsaXR5LkxBWU9VVF9PTkxZLAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuRU1CRURERURfTEFZT1VULAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuVklFV19NQU5JUFVMQVRJT04sCi0gICAgICAgICAgICAgICAgQ2FwYWJpbGl0eS5QTEFZX0FOSU1BVElPTiwKLSAgICAgICAgICAgICAgICBDYXBhYmlsaXR5LkFOSU1BVEVEX1ZJRVdfTUFOSVBVTEFUSU9OLAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuQURBUFRFUl9CSU5ESU5HLAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuRVhURU5ERURfVklFV0lORk8sCi0gICAgICAgICAgICAgICAgQ2FwYWJpbGl0eS5GSVhFRF9TQ0FMQUJMRV9OSU5FX1BBVENILAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuUlRMKTsKLQotCi0gICAgICAgIEJyaWRnZUFzc2V0TWFuYWdlci5pbml0U3lzdGVtKCk7Ci0KLSAgICAgICAgLy8gV2hlbiBERUJVR19MQVlPVVQgaXMgc2V0IGFuZCBpcyBub3QgMCBvciBmYWxzZSwgc2V0dXAgYSBkZWZhdWx0IGxpc3RlbmVyCi0gICAgICAgIC8vIG9uIHN0YXRpYyAobmF0aXZlKSBtZXRob2RzIHdoaWNoIHByaW50cyB0aGUgc2lnbmF0dXJlIG9uIHRoZSBjb25zb2xlIGFuZAotICAgICAgICAvLyB0aHJvd3MgYW4gZXhjZXB0aW9uLgotICAgICAgICAvLyBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRlc3RpbmcgdGhlIHJlbmRlcmluZyBpbiBBRFQgdG8gaWRlbnRpZnkgc3RhdGljIG5hdGl2ZQotICAgICAgICAvLyBtZXRob2RzIHRoYXQgYXJlIGlnbm9yZWQgLS0gbGF5b3V0bGliX2NyZWF0ZSBtYWtlcyB0aGVtIHJldHVybnMgMC9mYWxzZS9udWxsCi0gICAgICAgIC8vIHdoaWNoIGlzIGdlbmVyYWxseSBPSyB5ZXQgbWlnaHQgYmUgYSBwcm9ibGVtLCBzbyB0aGlzIGlzIGhvdyB5b3UnZCBmaW5kIG91dC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gQ3VycmVudGx5IGxheW91dGxpYl9jcmVhdGUgb25seSBvdmVycmlkZXMgc3RhdGljIG5hdGl2ZSBtZXRob2QuCi0gICAgICAgIC8vIFN0YXRpYyBub24tbmF0aXZlcyBhcmUgbm90IG92ZXJyaWRkZW4gYW5kIHRodXMgZG8gbm90IGdldCBoZXJlLgotICAgICAgICBmaW5hbCBTdHJpbmcgZGVidWcgPSBTeXN0ZW0uZ2V0ZW52KCJERUJVR19MQVlPVVQiKTsKLSAgICAgICAgaWYgKGRlYnVnICE9IG51bGwgJiYgIWRlYnVnLmVxdWFscygiMCIpICYmICFkZWJ1Zy5lcXVhbHMoImZhbHNlIikpIHsKLQotICAgICAgICAgICAgT3ZlcnJpZGVNZXRob2Quc2V0RGVmYXVsdExpc3RlbmVyKG5ldyBNZXRob2RBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSW52b2tlVihTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNEZWZhdWx0TG9nLmVycm9yKG51bGwsICJNaXNzaW5nIFN0dWI6ICIgKyBzaWduYXR1cmUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc05hdGl2ZSA/ICIgKG5hdGl2ZSkiIDogIiIpLCBudWxsIC8qZGF0YSovKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWcuZXF1YWxzSWdub3JlQ2FzZSgidGhyb3ciKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3dpbmcgdGhpcyBleGNlcHRpb24gZG9lc24ndCBzZWVtIHRoYXQgdXNlZnVsLiBJdCBicmVha3MKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsYXlvdXQgZWRpdG9yIHlldCBkb2Vzbid0IGRpc3BsYXkgYW55dGhpbmcgbWVhbmluZ2Z1bCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZXIuIEhhdmluZyB0aGUgZXJyb3IgaW4gdGhlIGNvbnNvbGUgaXMganVzdCBhcyB1c2VmdWwuIFdlJ2xsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBpdCBvbmx5IGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyAidGhyb3ciIG9yICJUSFJPVyIuCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3RhdGljTWV0aG9kTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oc2lnbmF0dXJlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbG9hZCB0aGUgZm9udHMuCi0gICAgICAgIEZvbnRMb2FkZXIgZm9udExvYWRlciA9IEZvbnRMb2FkZXIuY3JlYXRlKGZvbnRMb2NhdGlvbi5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0gICAgICAgIGlmIChmb250TG9hZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIFR5cGVmYWNlX0RlbGVnYXRlLmluaXQoZm9udExvYWRlcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2cuZXJyb3IoTGF5b3V0TG9nLlRBR19CUk9LRU4sCi0gICAgICAgICAgICAgICAgICAgICJGYWlsZWQgY3JlYXRlIEZvbnRMb2FkZXIgaW4gbGF5b3V0IGxpYi4iLCBudWxsKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG5vdyBwYXJzZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SIChhbmQgb25seSB0aGlzIG9uZSBhcyBhbmRyb2lkLlIgaXMgYSBzdWJzZXQgb2YKLSAgICAgICAgLy8gdGhlIGludGVybmFsIHZlcnNpb24pLCBhbmQgcHV0IHRoZSBjb250ZW50IGluIHRoZSBtYXBzLgotICAgICAgICB0cnkgewotICAgICAgICAgICAgQ2xhc3M8Pz4gciA9IGNvbS5hbmRyb2lkLmludGVybmFsLlIuY2xhc3M7Ci0KLSAgICAgICAgICAgIGZvciAoQ2xhc3M8Pz4gaW5uZXIgOiByLmdldERlY2xhcmVkQ2xhc3NlcygpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHJlc1R5cGVOYW1lID0gaW5uZXIuZ2V0U2ltcGxlTmFtZSgpOwotICAgICAgICAgICAgICAgIFJlc291cmNlVHlwZSByZXNUeXBlID0gUmVzb3VyY2VUeXBlLmdldEVudW0ocmVzVHlwZU5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChyZXNUeXBlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gZnVsbE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKLSAgICAgICAgICAgICAgICAgICAgc1JldlJNYXAucHV0KHJlc1R5cGUsIGZ1bGxNYXApOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoRmllbGQgZiA6IGlubmVyLmdldERlY2xhcmVkRmllbGRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgcHJvY2VzcyBzdGF0aWMgZmluYWwgZmllbGRzLiBTaW5jZSB0aGUgZmluYWwgYXR0cmlidXRlIG1heSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWVuIGFsdGVyZWQgYnkgbGF5b3V0bGliX2NyZWF0ZSwgd2Ugb25seSBjaGVjayBzdGF0aWMKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RpZmllcnMgPSBmLmdldE1vZGlmaWVycygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1vZGlmaWVyLmlzU3RhdGljKG1vZGlmaWVycykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzczw/PiB0eXBlID0gZi5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpICYmIHR5cGUuZ2V0Q29tcG9uZW50VHlwZSgpID09IGludC5jbGFzcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGFuIGludFtdIHdlIHB1dCBpdCBpbiBzUkFycmF5TWFwIHVzaW5nIGFuIEludEFycmF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyYXBwZXIgdGhhdCBwcm9wZXJseSBpbXBsZW1lbnRzIGVxdWFscyBhbmQgaGFzaGNvZGUgZm9yIHRoZSBhcnJheQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvYmplY3RzLCBhcyByZXF1aXJlZCBieSB0aGUgbWFwIGNvbnRyYWN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzUkFycmF5TWFwLnB1dChuZXcgSW50QXJyYXkoKGludFtdKSBmLmdldChudWxsKSksIGYuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gaW50LmNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgdmFsdWUgPSAoSW50ZWdlcikgZi5nZXQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNSTWFwLnB1dCh2YWx1ZSwgUGFpci5vZihyZXNUeXBlLCBmLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsTWFwLnB1dChmLmdldE5hbWUoKSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aHJvd2FibGUpIHsKLSAgICAgICAgICAgIGlmIChsb2cgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGxvZy5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gbG9hZCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SIGZyb20gdGhlIGxheW91dCBsaWJyYXJ5IGphciIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZGlzcG9zZSgpIHsKLSAgICAgICAgQnJpZGdlQXNzZXRNYW5hZ2VyLmNsZWFyU3lzdGVtKCk7Ci0KLSAgICAgICAgLy8gZGlzcG9zZSBvZiB0aGUgZGVmYXVsdCB0eXBlZmFjZS4KLSAgICAgICAgVHlwZWZhY2VfQWNjZXNzb3IucmVzZXREZWZhdWx0cygpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0YXJ0cyBhIGxheW91dCBzZXNzaW9uIGJ5IGluZmxhdGluZyBhbmQgcmVuZGVyaW5nIGl0LiBUaGUgbWV0aG9kIHJldHVybnMgYQotICAgICAqIHtAbGluayBSZW5kZXJTZXNzaW9ufSBvbiB3aGljaCBmdXJ0aGVyIGFjdGlvbnMgY2FuIGJlIHRha2VuLgotICAgICAqCi0gICAgICogQHBhcmFtIHBhcmFtcyB0aGUge0BsaW5rIFNlc3Npb25QYXJhbXN9IG9iamVjdCB3aXRoIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIGNyZWF0ZQotICAgICAqICAgICAgICAgICB0aGUgc2NlbmUuCi0gICAgICogQHJldHVybiBhIG5ldyB7QGxpbmsgUmVuZGVyU2Vzc2lvbn0gb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHJlc3VsdCBvZiB0aGUgbGF5b3V0LgotICAgICAqIEBzaW5jZSA1Ci0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlbmRlclNlc3Npb24gY3JlYXRlU2Vzc2lvbihTZXNzaW9uUGFyYW1zIHBhcmFtcykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgUmVzdWx0IGxhc3RSZXN1bHQgPSBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICAgICAgUmVuZGVyU2Vzc2lvbkltcGwgc2NlbmUgPSBuZXcgUmVuZGVyU2Vzc2lvbkltcGwocGFyYW1zKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcHJlcGFyZVRocmVhZCgpOwotICAgICAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBzY2VuZS5pbml0KHBhcmFtcy5nZXRUaW1lb3V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChsYXN0UmVzdWx0LmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBzY2VuZS5pbmZsYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0UmVzdWx0LmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0UmVzdWx0ID0gc2NlbmUucmVuZGVyKHRydWUgLypmcmVzaFJlbmRlciovKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgc2NlbmUucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIGNsZWFudXBUaHJlYWQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBCcmlkZ2VSZW5kZXJTZXNzaW9uKHNjZW5lLCBsYXN0UmVzdWx0KTsKLSAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgICAgICAgIC8vIGdldCB0aGUgcmVhbCBjYXVzZSBvZiB0aGUgZXhjZXB0aW9uLgotICAgICAgICAgICAgVGhyb3dhYmxlIHQyID0gdDsKLSAgICAgICAgICAgIHdoaWxlICh0Mi5nZXRDYXVzZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0MiA9IHQuZ2V0Q2F1c2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXcgQnJpZGdlUmVuZGVyU2Vzc2lvbihudWxsLAotICAgICAgICAgICAgICAgICAgICBFUlJPUl9VTktOT1dOLmNyZWF0ZVJlc3VsdCh0Mi5nZXRNZXNzYWdlKCksIHQpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXN1bHQgcmVuZGVyRHJhd2FibGUoRHJhd2FibGVQYXJhbXMgcGFyYW1zKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBSZXN1bHQgbGFzdFJlc3VsdCA9IFNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgICAgICAgICBSZW5kZXJEcmF3YWJsZSBhY3Rpb24gPSBuZXcgUmVuZGVyRHJhd2FibGUocGFyYW1zKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcHJlcGFyZVRocmVhZCgpOwotICAgICAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBhY3Rpb24uaW5pdChwYXJhbXMuZ2V0VGltZW91dCgpKTsKLSAgICAgICAgICAgICAgICBpZiAobGFzdFJlc3VsdC5pc1N1Y2Nlc3MoKSkgewotICAgICAgICAgICAgICAgICAgICBsYXN0UmVzdWx0ID0gYWN0aW9uLnJlbmRlcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgYWN0aW9uLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBjbGVhbnVwVGhyZWFkKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBsYXN0UmVzdWx0OwotICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgICAgICAgLy8gZ2V0IHRoZSByZWFsIGNhdXNlIG9mIHRoZSBleGNlcHRpb24uCi0gICAgICAgICAgICBUaHJvd2FibGUgdDIgPSB0OwotICAgICAgICAgICAgd2hpbGUgKHQyLmdldENhdXNlKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHQyID0gdC5nZXRDYXVzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1VOS05PV04uY3JlYXRlUmVzdWx0KHQyLmdldE1lc3NhZ2UoKSwgdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbGVhckNhY2hlcyhPYmplY3QgcHJvamVjdEtleSkgewotICAgICAgICBpZiAocHJvamVjdEtleSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzUHJvamVjdEJpdG1hcENhY2hlLnJlbW92ZShwcm9qZWN0S2V5KTsKLSAgICAgICAgICAgIHNQcm9qZWN0OVBhdGNoQ2FjaGUucmVtb3ZlKHByb2plY3RLZXkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3VsdCBnZXRWaWV3UGFyZW50KE9iamVjdCB2aWV3T2JqZWN0KSB7Ci0gICAgICAgIGlmICh2aWV3T2JqZWN0IGluc3RhbmNlb2YgVmlldykgewotICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5TVUNDRVNTLmNyZWF0ZVJlc3VsdCgoKFZpZXcpdmlld09iamVjdCkuZ2V0UGFyZW50KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidmlld09iamVjdCBpcyBub3QgYSBWaWV3Iik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3VsdCBnZXRWaWV3SW5kZXgoT2JqZWN0IHZpZXdPYmplY3QpIHsKLSAgICAgICAgaWYgKHZpZXdPYmplY3QgaW5zdGFuY2VvZiBWaWV3KSB7Ci0gICAgICAgICAgICBWaWV3IHZpZXcgPSAoVmlldykgdmlld09iamVjdDsKLSAgICAgICAgICAgIFZpZXdQYXJlbnQgcGFyZW50VmlldyA9IHZpZXcuZ2V0UGFyZW50KCk7Ci0KLSAgICAgICAgICAgIGlmIChwYXJlbnRWaWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7Ci0gICAgICAgICAgICAgICAgU3RhdHVzLlNVQ0NFU1MuY3JlYXRlUmVzdWx0KCgoVmlld0dyb3VwKSBwYXJlbnRWaWV3KS5pbmRleE9mQ2hpbGQodmlldykpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gU3RhdHVzLlNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ2aWV3T2JqZWN0IGlzIG5vdCBhIFZpZXciKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1J0bChTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIHJldHVybiBpc0xvY2FsZVJ0bChsb2NhbGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0xvY2FsZVJ0bChTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIGlmIChsb2NhbGUgPT0gbnVsbCkgewotICAgICAgICAgICAgbG9jYWxlID0gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgVUxvY2FsZSB1TG9jYWxlID0gbmV3IFVMb2NhbGUobG9jYWxlKTsKLSAgICAgICAgcmV0dXJuIHVMb2NhbGUuZ2V0Q2hhcmFjdGVyT3JpZW50YXRpb24oKS5lcXVhbHMoSUNVX0xPQ0FMRV9ESVJFQ1RJT05fUlRMKSA/Ci0gICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxvY2sgZm9yIHRoZSBicmlkZ2UKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFJlZW50cmFudExvY2sgZ2V0TG9jaygpIHsKLSAgICAgICAgcmV0dXJuIHNMb2NrOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByZXBhcmVzIHRoZSBjdXJyZW50IHRocmVhZCBmb3IgcmVuZGVyaW5nLgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IHdoaWxlIHRoaXMgY2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWUsIHRoZSBmaXJzdCBjYWxsIHRvIHtAbGluayAjY2xlYW51cFRocmVhZCgpfQotICAgICAqIHdpbGwgZG8gdGhlIGNsZWFuLXVwLCBhbmQgbWFrZSB0aGUgdGhyZWFkIHVuYWJsZSB0byBkbyBmdXJ0aGVyIHNjZW5lIGFjdGlvbnMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHByZXBhcmVUaHJlYWQoKSB7Ci0gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBMb29wZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZm9yIHRoaXMgdGhyZWFkLgotICAgICAgICAvLyB0aGlzIGlzIHJlcXVpcmVkIGZvciBWaWV3IHRoYXQgY3JlYXRlcyBIYW5kbGVyIG9iamVjdHMuCi0gICAgICAgIGlmIChMb29wZXIubXlMb29wZXIoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBMb29wZXIucHJlcGFyZU1haW5Mb29wZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENsZWFucyB1cCB0aHJlYWQtc3BlY2lmaWMgZGF0YS4gQWZ0ZXIgdGhpcywgdGhlIHRocmVhZCBjYW5ub3QgYmUgdXNlZCBmb3Igc2NlbmUgYWN0aW9ucy4KLSAgICAgKiA8cD4KLSAgICAgKiBOb3RlIHRoYXQgaXQgZG9lc24ndCBtYXR0ZXIgaG93IG1hbnkgdGltZXMge0BsaW5rICNwcmVwYXJlVGhyZWFkKCl9IHdhcyBjYWxsZWQsIGEgc2luZ2xlCi0gICAgICogY2FsbCB0byB0aGlzIHdpbGwgcHJldmVudCB0aGUgdGhyZWFkIGZyb20gZG9pbmcgZnVydGhlciBzY2VuZSBhY3Rpb25zCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGNsZWFudXBUaHJlYWQoKSB7Ci0gICAgICAgIC8vIGNsZWFuIHVwIHRoZSBsb29wZXIKLSAgICAgICAgTG9vcGVyX0FjY2Vzc29yLmNsZWFudXBUaHJlYWQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIExheW91dExvZyBnZXRMb2coKSB7Ci0gICAgICAgIHJldHVybiBzQ3VycmVudExvZzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0TG9nKExheW91dExvZyBsb2cpIHsKLSAgICAgICAgLy8gY2hlY2sgb25seSB0aGUgdGhyZWFkIGN1cnJlbnRseSBvd25pbmcgdGhlIGxvY2sgY2FuIGRvIHRoaXMuCi0gICAgICAgIGlmIChzTG9jay5pc0hlbGRCeUN1cnJlbnRUaHJlYWQoKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigic2NlbmUgbXVzdCBiZSBhY3F1aXJlZCBmaXJzdC4gc2VlICNhY3F1aXJlKGxvbmcpIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9nICE9IG51bGwpIHsKLSAgICAgICAgICAgIHNDdXJyZW50TG9nID0gbG9nOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc0N1cnJlbnRMb2cgPSBzRGVmYXVsdExvZzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgZGV0YWlscyBvZiBhIGZyYW1ld29yayByZXNvdXJjZSBmcm9tIGl0cyBpbnRlZ2VyIHZhbHVlLgotICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgaW50ZWdlciB2YWx1ZQotICAgICAqIEByZXR1cm4gYSBQYWlyIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlIHR5cGUgYW5kIG5hbWUsIG9yIG51bGwgaWYgdGhlIGlkCi0gICAgICogICAgIGRvZXMgbm90IG1hdGNoIGFueSByZXNvdXJjZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+IHJlc29sdmVSZXNvdXJjZUlkKGludCB2YWx1ZSkgewotICAgICAgICBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPiBwYWlyID0gc1JNYXAuZ2V0KHZhbHVlKTsKLSAgICAgICAgaWYgKHBhaXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcGFpciA9IHNEeW5hbWljSWRzLnJlc29sdmVJZCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocGFpciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oU3RyaW5nLmZvcm1hdCgiTWlzc2luZyBpZDogJTEkMDhYICglMSRkKSIsIHZhbHVlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBhaXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIGZyYW1ld29yayByZXNvdXJjZSB3aG9zZSB2YWx1ZSBpcyBhbiBpbnQgYXJyYXkuCi0gICAgICogQHBhcmFtIGFycmF5Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZVJlc291cmNlSWQoaW50W10gYXJyYXkpIHsKLSAgICAgICAgc0ludEFycmF5V3JhcHBlci5zZXQoYXJyYXkpOwotICAgICAgICByZXR1cm4gc1JBcnJheU1hcC5nZXQoc0ludEFycmF5V3JhcHBlcik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgaW50ZWdlciBpZCBvZiBhIGZyYW1ld29yayByZXNvdXJjZSwgZnJvbSBhIGdpdmVuIHJlc291cmNlIHR5cGUgYW5kIHJlc291cmNlIG5hbWUuCi0gICAgICogQHBhcmFtIHR5cGUgdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlCi0gICAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJlc291cmNlLgotICAgICAqIEByZXR1cm4gYW4ge0BsaW5rIEludGVnZXJ9IGNvbnRhaW5pbmcgdGhlIHJlc291cmNlIGlkLCBvciBudWxsIGlmIG5vIHJlc291cmNlIHdlcmUgZm91bmQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBJbnRlZ2VyIGdldFJlc291cmNlSWQoUmVzb3VyY2VUeXBlIHR5cGUsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IG1hcCA9IHNSZXZSTWFwLmdldCh0eXBlKTsKLSAgICAgICAgSW50ZWdlciB2YWx1ZSA9IG51bGw7Ci0gICAgICAgIGlmIChtYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgdmFsdWUgPSBtYXAuZ2V0KG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKLSAgICAgICAgICAgIHZhbHVlID0gc0R5bmFtaWNJZHMuZ2V0SWQodHlwZSwgbmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBwb3NzaWJsZSBlbnVtcyBmb3IgYSBnaXZlbiBhdHRyaWJ1dGUgbmFtZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsIEludGVnZXI+IGdldEVudW1WYWx1ZXMoU3RyaW5nIGF0dHJpYnV0ZU5hbWUpIHsKLSAgICAgICAgaWYgKHNFbnVtVmFsdWVNYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHNFbnVtVmFsdWVNYXAuZ2V0KGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgcGxhdGZvcm0gYnVpbGQgcHJvcGVydGllcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0UGxhdGZvcm1Qcm9wZXJ0aWVzKCkgewotICAgICAgICByZXR1cm4gc1BsYXRmb3JtUHJvcGVydGllczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaXRtYXAgZm9yIGEgc3BlY2lmaWMgcGF0aCwgZnJvbSBhIHNwZWNpZmljIHByb2plY3QgY2FjaGUsIG9yIGZyb20gdGhlCi0gICAgICogZnJhbWV3b3JrIGNhY2hlLgotICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgcGF0aCBvZiB0aGUgYml0bWFwCi0gICAgICogQHBhcmFtIHByb2plY3RLZXkgdGhlIGtleSBvZiB0aGUgcHJvamVjdCwgb3IgbnVsbCB0byBxdWVyeSB0aGUgZnJhbWV3b3JrIGNhY2hlLgotICAgICAqIEByZXR1cm4gdGhlIGNhY2hlZCBCaXRtYXAgb3IgbnVsbCBpZiBub3QgZm91bmQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCaXRtYXAgZ2V0Q2FjaGVkQml0bWFwKFN0cmluZyB2YWx1ZSwgT2JqZWN0IHByb2plY3RLZXkpIHsKLSAgICAgICAgaWYgKHByb2plY3RLZXkgIT0gbnVsbCkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxCaXRtYXA+PiBtYXAgPSBzUHJvamVjdEJpdG1hcENhY2hlLmdldChwcm9qZWN0S2V5KTsKLSAgICAgICAgICAgIGlmIChtYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFNvZnRSZWZlcmVuY2U8Qml0bWFwPiByZWYgPSBtYXAuZ2V0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVmICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZi5nZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTb2Z0UmVmZXJlbmNlPEJpdG1hcD4gcmVmID0gc0ZyYW1ld29ya0JpdG1hcENhY2hlLmdldCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocmVmICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVmLmdldCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBhIGJpdG1hcCBpbiBhIHByb2plY3QgY2FjaGUgb3IgaW4gdGhlIGZyYW1ld29yayBjYWNoZS4KLSAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHBhdGggb2YgdGhlIGJpdG1hcAotICAgICAqIEBwYXJhbSBibXAgdGhlIEJpdG1hcCBvYmplY3QKLSAgICAgKiBAcGFyYW0gcHJvamVjdEtleSB0aGUga2V5IG9mIHRoZSBwcm9qZWN0LCBvciBudWxsIHRvIHB1dCB0aGUgYml0bWFwIGluIHRoZSBmcmFtZXdvcmsgY2FjaGUuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldENhY2hlZEJpdG1hcChTdHJpbmcgdmFsdWUsIEJpdG1hcCBibXAsIE9iamVjdCBwcm9qZWN0S2V5KSB7Ci0gICAgICAgIGlmIChwcm9qZWN0S2V5ICE9IG51bGwpIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIFNvZnRSZWZlcmVuY2U8Qml0bWFwPj4gbWFwID0gc1Byb2plY3RCaXRtYXBDYWNoZS5nZXQocHJvamVjdEtleSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXAgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxCaXRtYXA+PigpOwotICAgICAgICAgICAgICAgIHNQcm9qZWN0Qml0bWFwQ2FjaGUucHV0KHByb2plY3RLZXksIG1hcCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1hcC5wdXQodmFsdWUsIG5ldyBTb2Z0UmVmZXJlbmNlPEJpdG1hcD4oYm1wKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzRnJhbWV3b3JrQml0bWFwQ2FjaGUucHV0KHZhbHVlLCBuZXcgU29mdFJlZmVyZW5jZTxCaXRtYXA+KGJtcCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgOSBwYXRjaCBjaHVuayBmb3IgYSBzcGVjaWZpYyBwYXRoLCBmcm9tIGEgc3BlY2lmaWMgcHJvamVjdCBjYWNoZSwgb3IgZnJvbSB0aGUKLSAgICAgKiBmcmFtZXdvcmsgY2FjaGUuCi0gICAgICogQHBhcmFtIHZhbHVlIHRoZSBwYXRoIG9mIHRoZSA5IHBhdGNoCi0gICAgICogQHBhcmFtIHByb2plY3RLZXkgdGhlIGtleSBvZiB0aGUgcHJvamVjdCwgb3IgbnVsbCB0byBxdWVyeSB0aGUgZnJhbWV3b3JrIGNhY2hlLgotICAgICAqIEByZXR1cm4gdGhlIGNhY2hlZCA5IHBhdGNoIG9yIG51bGwgaWYgbm90IGZvdW5kLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTmluZVBhdGNoQ2h1bmsgZ2V0Q2FjaGVkOVBhdGNoKFN0cmluZyB2YWx1ZSwgT2JqZWN0IHByb2plY3RLZXkpIHsKLSAgICAgICAgaWYgKHByb2plY3RLZXkgIT0gbnVsbCkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxOaW5lUGF0Y2hDaHVuaz4+IG1hcCA9IHNQcm9qZWN0OVBhdGNoQ2FjaGUuZ2V0KHByb2plY3RLZXkpOwotCi0gICAgICAgICAgICBpZiAobWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTb2Z0UmVmZXJlbmNlPE5pbmVQYXRjaENodW5rPiByZWYgPSBtYXAuZ2V0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVmICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZi5nZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTb2Z0UmVmZXJlbmNlPE5pbmVQYXRjaENodW5rPiByZWYgPSBzRnJhbWV3b3JrOVBhdGNoQ2FjaGUuZ2V0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChyZWYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiByZWYuZ2V0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGEgOSBwYXRjaCBjaHVuayBpbiBhIHByb2plY3QgY2FjaGUgb3IgaW4gdGhlIGZyYW1ld29yayBjYWNoZS4KLSAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHBhdGggb2YgdGhlIDkgcGF0Y2gKLSAgICAgKiBAcGFyYW0gbmluZVBhdGNoIHRoZSA5IHBhdGNoIG9iamVjdAotICAgICAqIEBwYXJhbSBwcm9qZWN0S2V5IHRoZSBrZXkgb2YgdGhlIHByb2plY3QsIG9yIG51bGwgdG8gcHV0IHRoZSBiaXRtYXAgaW4gdGhlIGZyYW1ld29yayBjYWNoZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q2FjaGVkOVBhdGNoKFN0cmluZyB2YWx1ZSwgTmluZVBhdGNoQ2h1bmsgbmluZVBhdGNoLCBPYmplY3QgcHJvamVjdEtleSkgewotICAgICAgICBpZiAocHJvamVjdEtleSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBTb2Z0UmVmZXJlbmNlPE5pbmVQYXRjaENodW5rPj4gbWFwID0gc1Byb2plY3Q5UGF0Y2hDYWNoZS5nZXQocHJvamVjdEtleSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXAgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxOaW5lUGF0Y2hDaHVuaz4+KCk7Ci0gICAgICAgICAgICAgICAgc1Byb2plY3Q5UGF0Y2hDYWNoZS5wdXQocHJvamVjdEtleSwgbWFwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWFwLnB1dCh2YWx1ZSwgbmV3IFNvZnRSZWZlcmVuY2U8TmluZVBhdGNoQ2h1bms+KG5pbmVQYXRjaCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc0ZyYW1ld29yazlQYXRjaENhY2hlLnB1dCh2YWx1ZSwgbmV3IFNvZnRSZWZlcmVuY2U8TmluZVBhdGNoQ2h1bms+KG5pbmVQYXRjaCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2VDb25zdGFudHMuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvQnJpZGdlQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViOWU3ZjEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2VDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2U7Ci0KLS8qKgotICogQ29uc3RhbnQgZGVmaW5pdGlvbiBjbGFzcy48YnI+Ci0gKiA8YnI+Ci0gKiBNb3N0IGNvbnN0YW50cyBoYXZlIGEgcHJlZml4IGRlZmluaW5nIHRoZSBjb250ZW50LgotICogPHVsPgotICogPGxpPjxjb2RlPldTXzwvY29kZT4gV29ya3NwYWNlIHBhdGggY29uc3RhbnQuIFRob3NlIGFyZSBhYnNvbHV0ZSBwYXRocywKLSAqIGZyb20gdGhlIHByb2plY3Qgcm9vdC48L2xpPgotICogPGxpPjxjb2RlPk9TXzwvY29kZT4gT1MgcGF0aCBjb25zdGFudC4gVGhlc2UgcGF0aHMgYXJlIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLjwvbGk+Ci0gKiA8bGk+PGNvZGU+Rk5fPC9jb2RlPiBGaWxlIG5hbWUgY29uc3RhbnQuPC9saT4KLSAqIDxsaT48Y29kZT5GRF88L2NvZGU+IEZvbGRlciBuYW1lIGNvbnN0YW50LjwvbGk+Ci0gKiA8bGk+PGNvZGU+RVhUXzwvY29kZT4gRmlsZSBleHRlbnNpb24gY29uc3RhbnQuIFRoaXMgZG9lcyBOT1QgaW5jbHVkZSBhIGRvdC48L2xpPgotICogPGxpPjxjb2RlPkRPVF88L2NvZGU+IEZpbGUgZXh0ZW5zaW9uIGNvbnN0YW50LiBUaGlzIHN0YXJ0IHdpdGggYSBkb3QuPC9saT4KLSAqIDxsaT48Y29kZT5SRV88L2NvZGU+IFJlZ2V4cCBjb25zdGFudC48L2xpPgotICogPGxpPjxjb2RlPk5TXzwvY29kZT4gTmFtZXNwYWNlIGNvbnN0YW50LjwvbGk+Ci0gKiA8bGk+PGNvZGU+Q0xBU1NfPC9jb2RlPiBGdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZS48L2xpPgotICogPC91bD4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBCcmlkZ2VDb25zdGFudHMgewotCi0gICAgLyoqIE5hbWVzcGFjZSBmb3IgdGhlIHJlc291cmNlIFhNTCAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1JFU09VUkNFUyA9ICJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiOwotCi0gICAgLyoqIEFwcCBhdXRvIG5hbWVzcGFjZSAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX0FQUF9SRVNfQVVUTyA9ICJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzLWF1dG8iOwotCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUiA9ICJjb20uYW5kcm9pZC5pbnRlcm5hbC5SIjsKLQotCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTUFUQ0hfUEFSRU5UID0gIm1hdGNoX3BhcmVudCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRklMTF9QQVJFTlQgPSAiZmlsbF9wYXJlbnQiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdSQVBfQ09OVEVOVCA9ICJ3cmFwX2NvbnRlbnQiOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2VSZW5kZXJTZXNzaW9uLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL0JyaWRnZVJlbmRlclNlc3Npb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlmNGIzYS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL0JyaWRnZVJlbmRlclNlc3Npb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklBbmltYXRpb25MaXN0ZW5lcjsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSUxheW91dFB1bGxQYXJzZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlbmRlclBhcmFtczsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVuZGVyU2Vzc2lvbjsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5WaWV3SW5mbzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUmVuZGVyU2Vzc2lvbkltcGw7Ci0KLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotCi1pbXBvcnQgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBSZW5kZXJTZXNzaW9ufS4KLSAqCi0gKiBUaGlzIGlzIGEgcHJldHR5IGJhc2ljIGNsYXNzIHRoYXQgZG9lcyBhbG1vc3Qgbm90aGluZy4gQWxsIG9mIHRoZSB3b3JrIGlzIGRvbmUgaW4KLSAqIHtAbGluayBSZW5kZXJTZXNzaW9uSW1wbH0uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQnJpZGdlUmVuZGVyU2Vzc2lvbiBleHRlbmRzIFJlbmRlclNlc3Npb24gewotCi0gICAgcHJpdmF0ZSBmaW5hbCBSZW5kZXJTZXNzaW9uSW1wbCBtU2Vzc2lvbjsKLSAgICBwcml2YXRlIFJlc3VsdCBtTGFzdFJlc3VsdDsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXN1bHQgZ2V0UmVzdWx0KCkgewotICAgICAgICByZXR1cm4gbUxhc3RSZXN1bHQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1ZmZlcmVkSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0gICAgICAgIHJldHVybiBtU2Vzc2lvbi5nZXRJbWFnZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzQWxwaGFDaGFubmVsSW1hZ2UoKSB7Ci0gICAgICAgIHJldHVybiBtU2Vzc2lvbi5pc0FscGhhQ2hhbm5lbEltYWdlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8Vmlld0luZm8+IGdldFJvb3RWaWV3cygpIHsKLSAgICAgICAgcmV0dXJuIG1TZXNzaW9uLmdldFZpZXdJbmZvcygpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldERlZmF1bHRQcm9wZXJ0aWVzKE9iamVjdCB2aWV3T2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBtU2Vzc2lvbi5nZXREZWZhdWx0UHJvcGVydGllcyh2aWV3T2JqZWN0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzdWx0IGdldFByb3BlcnR5KE9iamVjdCBvYmplY3RWaWV3LCBTdHJpbmcgcHJvcGVydHlOYW1lKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIHN1cGVyLmdldFByb3BlcnR5KG9iamVjdFZpZXcsIHByb3BlcnR5TmFtZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3VsdCBzZXRQcm9wZXJ0eShPYmplY3Qgb2JqZWN0VmlldywgU3RyaW5nIHByb3BlcnR5TmFtZSwgU3RyaW5nIHByb3BlcnR5VmFsdWUpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gc3VwZXIuc2V0UHJvcGVydHkob2JqZWN0VmlldywgcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzdWx0IHJlbmRlcihsb25nIHRpbWVvdXQpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEJyaWRnZS5wcmVwYXJlVGhyZWFkKCk7Ci0gICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLmFjcXVpcmUodGltZW91dCk7Ci0gICAgICAgICAgICBpZiAobUxhc3RSZXN1bHQuaXNTdWNjZXNzKCkpIHsKLSAgICAgICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLnJlbmRlcihmYWxzZSAvKmZyZXNoUmVuZGVyKi8pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgbVNlc3Npb24ucmVsZWFzZSgpOwotICAgICAgICAgICAgQnJpZGdlLmNsZWFudXBUaHJlYWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtTGFzdFJlc3VsdDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzdWx0IGFuaW1hdGUoT2JqZWN0IHRhcmdldE9iamVjdCwgU3RyaW5nIGFuaW1hdGlvbk5hbWUsCi0gICAgICAgICAgICBib29sZWFuIGlzRnJhbWV3b3JrQW5pbWF0aW9uLCBJQW5pbWF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEJyaWRnZS5wcmVwYXJlVGhyZWFkKCk7Ci0gICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLmFjcXVpcmUoUmVuZGVyUGFyYW1zLkRFRkFVTFRfVElNRU9VVCk7Ci0gICAgICAgICAgICBpZiAobUxhc3RSZXN1bHQuaXNTdWNjZXNzKCkpIHsKLSAgICAgICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLmFuaW1hdGUodGFyZ2V0T2JqZWN0LCBhbmltYXRpb25OYW1lLCBpc0ZyYW1ld29ya0FuaW1hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIG1TZXNzaW9uLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIEJyaWRnZS5jbGVhbnVwVGhyZWFkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbUxhc3RSZXN1bHQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3VsdCBpbnNlcnRDaGlsZChPYmplY3QgcGFyZW50VmlldywgSUxheW91dFB1bGxQYXJzZXIgY2hpbGRYbWwsIGludCBpbmRleCwKLSAgICAgICAgICAgIElBbmltYXRpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICBpZiAocGFyZW50VmlldyBpbnN0YW5jZW9mIFZpZXdHcm91cCA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicGFyZW50VmlldyBpcyBub3QgYSBWaWV3R3JvdXAiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBCcmlkZ2UucHJlcGFyZVRocmVhZCgpOwotICAgICAgICAgICAgbUxhc3RSZXN1bHQgPSBtU2Vzc2lvbi5hY3F1aXJlKFJlbmRlclBhcmFtcy5ERUZBVUxUX1RJTUVPVVQpOwotICAgICAgICAgICAgaWYgKG1MYXN0UmVzdWx0LmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgbUxhc3RSZXN1bHQgPSBtU2Vzc2lvbi5pbnNlcnRDaGlsZCgoVmlld0dyb3VwKSBwYXJlbnRWaWV3LCBjaGlsZFhtbCwgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBtU2Vzc2lvbi5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBCcmlkZ2UuY2xlYW51cFRocmVhZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1MYXN0UmVzdWx0OwotICAgIH0KLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3VsdCBtb3ZlQ2hpbGQoT2JqZWN0IHBhcmVudFZpZXcsIE9iamVjdCBjaGlsZFZpZXcsIGludCBpbmRleCwKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbGF5b3V0UGFyYW1zLCBJQW5pbWF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgaWYgKHBhcmVudFZpZXcgaW5zdGFuY2VvZiBWaWV3R3JvdXAgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInBhcmVudFZpZXcgaXMgbm90IGEgVmlld0dyb3VwIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoaWxkVmlldyBpbnN0YW5jZW9mIFZpZXcgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNoaWxkVmlldyBpcyBub3QgYSBWaWV3Iik7Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgQnJpZGdlLnByZXBhcmVUaHJlYWQoKTsKLSAgICAgICAgICAgIG1MYXN0UmVzdWx0ID0gbVNlc3Npb24uYWNxdWlyZShSZW5kZXJQYXJhbXMuREVGQVVMVF9USU1FT1VUKTsKLSAgICAgICAgICAgIGlmIChtTGFzdFJlc3VsdC5pc1N1Y2Nlc3MoKSkgewotICAgICAgICAgICAgICAgIG1MYXN0UmVzdWx0ID0gbVNlc3Npb24ubW92ZUNoaWxkKChWaWV3R3JvdXApIHBhcmVudFZpZXcsIChWaWV3KSBjaGlsZFZpZXcsIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLCBsaXN0ZW5lcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBtU2Vzc2lvbi5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBCcmlkZ2UuY2xlYW51cFRocmVhZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1MYXN0UmVzdWx0OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXN1bHQgcmVtb3ZlQ2hpbGQoT2JqZWN0IGNoaWxkVmlldywgSUFuaW1hdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIGlmIChjaGlsZFZpZXcgaW5zdGFuY2VvZiBWaWV3ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjaGlsZFZpZXcgaXMgbm90IGEgVmlldyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEJyaWRnZS5wcmVwYXJlVGhyZWFkKCk7Ci0gICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLmFjcXVpcmUoUmVuZGVyUGFyYW1zLkRFRkFVTFRfVElNRU9VVCk7Ci0gICAgICAgICAgICBpZiAobUxhc3RSZXN1bHQuaXNTdWNjZXNzKCkpIHsKLSAgICAgICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLnJlbW92ZUNoaWxkKChWaWV3KSBjaGlsZFZpZXcsIGxpc3RlbmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIG1TZXNzaW9uLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIEJyaWRnZS5jbGVhbnVwVGhyZWFkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbUxhc3RSZXN1bHQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB9Ci0KLSAgICAvKnBhY2thZ2UqLyBCcmlkZ2VSZW5kZXJTZXNzaW9uKFJlbmRlclNlc3Npb25JbXBsIHNjZW5lLCBSZXN1bHQgbGFzdFJlc3VsdCkgewotICAgICAgICBtU2Vzc2lvbiA9IHNjZW5lOwotICAgICAgICBpZiAoc2NlbmUgIT0gbnVsbCkgewotICAgICAgICAgICAgbVNlc3Npb24uc2V0U2NlbmUodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgbUxhc3RSZXN1bHQgPSBsYXN0UmVzdWx0OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvTW9ja1ZpZXcuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvTW9ja1ZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q1MGIyYS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL01vY2tWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLQotLyoqCi0gKiBCYXNlIGNsYXNzIGZvciBtb2NrZWQgdmlld3MuCi0gKgotICogVE9ETzogaW1wbGVtZW50IG9uRHJhdyBhbmQgZHJhdyBhIHJlY3RhbmdsZSBpbiBhIHJhbmRvbSBjb2xvciB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotICogKG9yIGJldHRlciB0aGUgaWQgb2YgdGhlIHZpZXcpLgotICovCi1wdWJsaWMgY2xhc3MgTW9ja1ZpZXcgZXh0ZW5kcyBUZXh0VmlldyB7Ci0KLSAgICBwdWJsaWMgTW9ja1ZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotCi0gICAgICAgIHNldFRleHQodGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7Ci0gICAgICAgIHNldFRleHRDb2xvcigweEZGMDAwMDAwKTsKLSAgICAgICAgc2V0R3Jhdml0eShHcmF2aXR5LkNFTlRFUik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKLSAgICAgICAgY2FudmFzLmRyYXdBUkdCKDB4RkYsIDB4N0YsIDB4N0YsIDB4N0YpOwotCi0gICAgICAgIHN1cGVyLm9uRHJhdyhjYW52YXMpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VDb250ZW50UHJvdmlkZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VDb250ZW50UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3NDBiMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlQ29udGVudFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlck9wZXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyUmVzdWx0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5PcGVyYXRpb25BcHBsaWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0RmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklDYW5jZWxsYXRpb25TaWduYWw7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLS8qKgotICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgSUNvbnRlbnRQcm92aWRlcn0uCi0gKgotICogVE9ETzogbmV2ZXIgcmV0dXJuIG51bGwgd2hlbiB0aGUgbWV0aG9kIGlzIG5vdCBzdXBwb3NlZCB0by4gUmV0dXJuIGZha2UgZGF0YSBpbnN0ZWFkLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQnJpZGdlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSUNvbnRlbnRQcm92aWRlciB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRlbnRQcm92aWRlclJlc3VsdFtdIGFwcGx5QmF0Y2goU3RyaW5nIGNhbGxpbmdQYWNrYWdlLAotICAgICAgICAgICAgQXJyYXlMaXN0PENvbnRlbnRQcm92aWRlck9wZXJhdGlvbj4gYXJnMCkKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIE9wZXJhdGlvbkFwcGxpY2F0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGJ1bGtJbnNlcnQoU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBVcmkgYXJnMCwgQ29udGVudFZhbHVlc1tdIGFyZzEpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVuZGxlIGNhbGwoU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBTdHJpbmcgYXJnMCwgU3RyaW5nIGFyZzEsIEJ1bmRsZSBhcmcyKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBkZWxldGUoU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBVcmkgYXJnMCwgU3RyaW5nIGFyZzEsIFN0cmluZ1tdIGFyZzIpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoVXJpIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBVcmkgaW5zZXJ0KFN0cmluZyBjYWxsaW5nUGFja2FnZSwgVXJpIGFyZzAsIENvbnRlbnRWYWx1ZXMgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFzc2V0RmlsZURlc2NyaXB0b3Igb3BlbkFzc2V0RmlsZSgKLSAgICAgICAgICAgIFN0cmluZyBjYWxsaW5nUGFja2FnZSwgVXJpIGFyZzAsIFN0cmluZyBhcmcxLCBJQ2FuY2VsbGF0aW9uU2lnbmFsIHNpZ25hbCkKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFBhcmNlbEZpbGVEZXNjcmlwdG9yIG9wZW5GaWxlKAotICAgICAgICAgICAgU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBVcmkgYXJnMCwgU3RyaW5nIGFyZzEsIElDYW5jZWxsYXRpb25TaWduYWwgc2lnbmFsKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ3Vyc29yIHF1ZXJ5KFN0cmluZyBjYWxsaW5nUGFja2FnZSwgVXJpIGFyZzAsIFN0cmluZ1tdIGFyZzEsIFN0cmluZyBhcmcyLCBTdHJpbmdbXSBhcmczLAotICAgICAgICAgICAgU3RyaW5nIGFyZzQsIElDYW5jZWxsYXRpb25TaWduYWwgYXJnNSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCB1cGRhdGUoU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBVcmkgYXJnMCwgQ29udGVudFZhbHVlcyBhcmcxLCBTdHJpbmcgYXJnMiwKLSAgICAgICAgICAgIFN0cmluZ1tdIGFyZzMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJQmluZGVyIGFzQmluZGVyKCkgewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRTdHJlYW1UeXBlcyhVcmkgYXJnMCwgU3RyaW5nIGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBBc3NldEZpbGVEZXNjcmlwdG9yIG9wZW5UeXBlZEFzc2V0RmlsZShTdHJpbmcgY2FsbGluZ1BhY2thZ2UsIFVyaSBhcmcwLCBTdHJpbmcgYXJnMSwKLSAgICAgICAgICAgIEJ1bmRsZSBhcmcyLCBJQ2FuY2VsbGF0aW9uU2lnbmFsIHNpZ25hbCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSUNhbmNlbGxhdGlvblNpZ25hbCBjcmVhdGVDYW5jZWxsYXRpb25TaWduYWwoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVXJpIGNhbm9uaWNhbGl6ZShTdHJpbmcgY2FsbGluZ1BrZywgVXJpIHVyaSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBVcmkgdW5jYW5vbmljYWxpemUoU3RyaW5nIGNhbGxpbmdQa2csIFVyaSB1cmkpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlQ29udGVudFJlc29sdmVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlQ29udGVudFJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMjU5ZDcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZUNvbnRlbnRSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LklDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5Db250ZW50T2JzZXJ2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotCi0vKioKLSAqIEEgbW9jayBjb250ZW50IHJlc29sdmVyIGZvciB0aGUgTGF5b3V0TGliIEJyaWRnZS4KLSAqIDxwLz4KLSAqIEl0IHdvbid0IHNlcnZlIGFueSBhY3R1YWwgZGF0YSBidXQgaXQncyBnb29kIGVub3VnaCBmb3IgYWxsCi0gKiB0aGUgd2lkZ2V0cyB3aGljaCBleHBlY3QgdG8gaGF2ZSBhIGNvbnRlbnQgcmVzb2x2ZXIgYXZhaWxhYmxlIHZpYQotICoge0BsaW5rIEJyaWRnZUNvbnRleHQjZ2V0Q29udGVudFJlc29sdmVyKCl9LgotICovCi1wdWJsaWMgY2xhc3MgQnJpZGdlQ29udGVudFJlc29sdmVyIGV4dGVuZHMgQ29udGVudFJlc29sdmVyIHsKLQotICAgIHByaXZhdGUgQnJpZGdlQ29udGVudFByb3ZpZGVyIG1Qcm92aWRlciA9IG51bGw7Ci0KLSAgICBwdWJsaWMgQnJpZGdlQ29udGVudFJlc29sdmVyKENvbnRleHQgY29udGV4dCkgewotICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSUNvbnRlbnRQcm92aWRlciBhY3F1aXJlUHJvdmlkZXIoQ29udGV4dCBjLCBTdHJpbmcgbmFtZSkgewotICAgICAgICBpZiAobVByb3ZpZGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIG1Qcm92aWRlciA9IG5ldyBCcmlkZ2VDb250ZW50UHJvdmlkZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtUHJvdmlkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElDb250ZW50UHJvdmlkZXIgYWNxdWlyZUV4aXN0aW5nUHJvdmlkZXIoQ29udGV4dCBjLCBTdHJpbmcgbmFtZSkgewotICAgICAgICBpZiAobVByb3ZpZGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIG1Qcm92aWRlciA9IG5ldyBCcmlkZ2VDb250ZW50UHJvdmlkZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtUHJvdmlkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gcmVsZWFzZVByb3ZpZGVyKElDb250ZW50UHJvdmlkZXIgaWNwKSB7Ci0gICAgICAgIC8vIGlnbm9yZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIElDb250ZW50UHJvdmlkZXIgYWNxdWlyZVVuc3RhYmxlUHJvdmlkZXIoQ29udGV4dCBjLCBTdHJpbmcgbmFtZSkgewotICAgICAgICByZXR1cm4gYWNxdWlyZVByb3ZpZGVyKGMsIG5hbWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHJlbGVhc2VVbnN0YWJsZVByb3ZpZGVyKElDb250ZW50UHJvdmlkZXIgaWNwKSB7Ci0gICAgICAgIHJldHVybiByZWxlYXNlUHJvdmlkZXIoaWNwKTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1bnN0YWJsZVByb3ZpZGVyRGllZChJQ29udGVudFByb3ZpZGVyIGljcCkgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0dWIgZm9yIHRoZSBsYXlvdXRsaWIgYnJpZGdlIGNvbnRlbnQgcmVzb2x2ZXIuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoVXJpIHVyaSwgYm9vbGVhbiBub3RpZnlGb3JEZXNjZW5kZW50cywKLSAgICAgICAgICAgIENvbnRlbnRPYnNlcnZlciBvYnNlcnZlcikgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3R1YiBmb3IgdGhlIGxheW91dGxpYiBicmlkZ2UgY29udGVudCByZXNvbHZlci4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKENvbnRlbnRPYnNlcnZlciBvYnNlcnZlcikgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3R1YiBmb3IgdGhlIGxheW91dGxpYiBicmlkZ2UgY29udGVudCByZXNvbHZlci4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2UoVXJpIHVyaSwgQ29udGVudE9ic2VydmVyIG9ic2VydmVyLCBib29sZWFuIHN5bmNUb05ldHdvcmspIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0dWIgZm9yIHRoZSBsYXlvdXRsaWIgYnJpZGdlIGNvbnRlbnQgcmVzb2x2ZXIuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3RhcnRTeW5jKFVyaSB1cmksIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0dWIgZm9yIHRoZSBsYXlvdXRsaWIgYnJpZGdlIGNvbnRlbnQgcmVzb2x2ZXIuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2FuY2VsU3luYyhVcmkgdXJpKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlQ29udGV4dC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkyOTRhYi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQ7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSUxheW91dFB1bGxQYXJzZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklQcm9qZWN0Q2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVuZGVyUmVzb3VyY2VzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXNvdXJjZVJlZmVyZW5jZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzb3VyY2VWYWx1ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuU3R5bGVSZXNvdXJjZVZhbHVlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJJbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5QYXJzZXJGYWN0b3J5OwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5TdGFjazsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnV0aWwuUGFpcjsKLQotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7Ci1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50U2VuZGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldE1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5CcmlkZ2VSZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5CcmlkZ2VUeXBlZEFycmF5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5UaGVtZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5EYXRhYmFzZUVycm9ySGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZTsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZS5DdXJzb3JGYWN0b3J5OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkJyaWRnZUluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwotaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5QWRqdXN0bWVudHM7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcudGV4dHNlcnZpY2UuVGV4dFNlcnZpY2VzTWFuYWdlcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLklkZW50aXR5SGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiBDb250ZXh0L0FjdGl2aXR5IHRvIGhhbmRsZSBub24gY29tcGlsZWQgcmVzb3VyY2VzLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQnJpZGdlQ29udGV4dCBleHRlbmRzIENvbnRleHQgewotCi0gICAgcHJpdmF0ZSBSZXNvdXJjZXMgbVN5c3RlbVJlc291cmNlczsKLSAgICBwcml2YXRlIGZpbmFsIEhhc2hNYXA8VmlldywgT2JqZWN0PiBtVmlld0tleU1hcCA9IG5ldyBIYXNoTWFwPFZpZXcsIE9iamVjdD4oKTsKLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtUHJvamVjdEtleTsKLSAgICBwcml2YXRlIGZpbmFsIERpc3BsYXlNZXRyaWNzIG1NZXRyaWNzOwotICAgIHByaXZhdGUgZmluYWwgUmVuZGVyUmVzb3VyY2VzIG1SZW5kZXJSZXNvdXJjZXM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDb25maWd1cmF0aW9uIG1Db25maWc7Ci0gICAgcHJpdmF0ZSBmaW5hbCBBcHBsaWNhdGlvbkluZm8gbUFwcGxpY2F0aW9uSW5mbzsKLSAgICBwcml2YXRlIGZpbmFsIElQcm9qZWN0Q2FsbGJhY2sgbVByb2plY3RDYWxsYmFjazsKLSAgICBwcml2YXRlIGZpbmFsIFdpbmRvd01hbmFnZXIgbVdpbmRvd01hbmFnZXI7Ci0KLSAgICBwcml2YXRlIFJlc291cmNlcy5UaGVtZSBtVGhlbWU7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1hcDxPYmplY3QsIE1hcDxTdHJpbmcsIFN0cmluZz4+IG1EZWZhdWx0UHJvcE1hcHMgPQotICAgICAgICBuZXcgSWRlbnRpdHlIYXNoTWFwPE9iamVjdCwgTWFwPFN0cmluZyxTdHJpbmc+PigpOwotCi0gICAgLy8gbWFwcyBmb3IgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGlkIHJlcHJlc2VudGluZyBzdHlsZSBvYmplY3RzIChTdHlsZVJlc291cmNlVmFsdWUpCi0gICAgcHJpdmF0ZSBNYXA8SW50ZWdlciwgU3R5bGVSZXNvdXJjZVZhbHVlPiBtRHluYW1pY0lkVG9TdHlsZU1hcDsKLSAgICBwcml2YXRlIE1hcDxTdHlsZVJlc291cmNlVmFsdWUsIEludGVnZXI+IG1TdHlsZVRvRHluYW1pY0lkTWFwOwotICAgIHByaXZhdGUgaW50IG1EeW5hbWljSWRHZW5lcmF0b3IgPSAweDAxMDMwMDAwOyAvLyBCYXNlIGlkIGZvciBmcmFtZXdvcmsgUi5zdHlsZQotCi0gICAgLy8gY2FjaGUgZm9yIFR5cGVkQXJyYXkgZ2VuZXJhdGVkIGZyb20gSVN0eWxlUmVzb3VyY2VWYWx1ZSBvYmplY3QKLSAgICBwcml2YXRlIE1hcDxpbnRbXSwgTWFwPEludGVnZXIsIFR5cGVkQXJyYXk+PiBtVHlwZWRBcnJheUNhY2hlOwotICAgIHByaXZhdGUgQnJpZGdlSW5mbGF0ZXIgbUJyaWRnZUluZmxhdGVyOwotCi0gICAgcHJpdmF0ZSBCcmlkZ2VDb250ZW50UmVzb2x2ZXIgbUNvbnRlbnRSZXNvbHZlcjsKLQotICAgIHByaXZhdGUgZmluYWwgU3RhY2s8QnJpZGdlWG1sQmxvY2tQYXJzZXI+IG1QYXJzZXJTdGFjayA9IG5ldyBTdGFjazxCcmlkZ2VYbWxCbG9ja1BhcnNlcj4oKTsKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBwcm9qZWN0S2V5IEFuIE9iamVjdCBpZGVudGlmeWluZyB0aGUgcHJvamVjdC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgY2FjaGUgbWVjaGFuaXNtLgotICAgICAqIEBwYXJhbSBtZXRyaWNzIHRoZSB7QGxpbmsgRGlzcGxheU1ldHJpY3N9LgotICAgICAqIEBwYXJhbSByZW5kZXJSZXNvdXJjZXMgdGhlIGNvbmZpZ3VyZWQgcmVzb3VyY2VzIChib3RoIGZyYW1ld29yayBhbmQgcHJvamVjdHMpIGZvciB0aGlzCi0gICAgICogcmVuZGVyLgotICAgICAqIEBwYXJhbSBwcm9qZWN0Q2FsbGJhY2sKLSAgICAgKiBAcGFyYW0gY29uZmlnIHRoZSBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhpcyByZW5kZXIuCi0gICAgICogQHBhcmFtIHRhcmdldFNka1ZlcnNpb24gdGhlIHRhcmdldFNka1ZlcnNpb24gb2YgdGhlIGFwcGxpY2F0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBCcmlkZ2VDb250ZXh0KE9iamVjdCBwcm9qZWN0S2V5LCBEaXNwbGF5TWV0cmljcyBtZXRyaWNzLAotICAgICAgICAgICAgUmVuZGVyUmVzb3VyY2VzIHJlbmRlclJlc291cmNlcywKLSAgICAgICAgICAgIElQcm9qZWN0Q2FsbGJhY2sgcHJvamVjdENhbGxiYWNrLAotICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBjb25maWcsCi0gICAgICAgICAgICBpbnQgdGFyZ2V0U2RrVmVyc2lvbiwKLSAgICAgICAgICAgIGJvb2xlYW4gaGFzUnRsU3VwcG9ydCkgewotICAgICAgICBtUHJvamVjdEtleSA9IHByb2plY3RLZXk7Ci0gICAgICAgIG1NZXRyaWNzID0gbWV0cmljczsKLSAgICAgICAgbVByb2plY3RDYWxsYmFjayA9IHByb2plY3RDYWxsYmFjazsKLQotICAgICAgICBtUmVuZGVyUmVzb3VyY2VzID0gcmVuZGVyUmVzb3VyY2VzOwotICAgICAgICBtQ29uZmlnID0gY29uZmlnOwotCi0gICAgICAgIG1BcHBsaWNhdGlvbkluZm8gPSBuZXcgQXBwbGljYXRpb25JbmZvKCk7Ci0gICAgICAgIG1BcHBsaWNhdGlvbkluZm8udGFyZ2V0U2RrVmVyc2lvbiA9IHRhcmdldFNka1ZlcnNpb247Ci0gICAgICAgIGlmIChoYXNSdGxTdXBwb3J0KSB7Ci0gICAgICAgICAgICBtQXBwbGljYXRpb25JbmZvLmZsYWdzID0gbUFwcGxpY2F0aW9uSW5mby5mbGFncyB8IEFwcGxpY2F0aW9uSW5mby5GTEFHX1NVUFBPUlRTX1JUTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1XaW5kb3dNYW5hZ2VyID0gbmV3IFdpbmRvd01hbmFnZXJJbXBsKG1NZXRyaWNzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWFsaXplcyB0aGUge0BsaW5rIFJlc291cmNlc30gc2luZ2xldG9uIHRvIGJlIGxpbmtlZCB0byB0aGlzIHtAbGluayBDb250ZXh0fSwgaXRzCi0gICAgICoge0BsaW5rIERpc3BsYXlNZXRyaWNzfSwge0BsaW5rIENvbmZpZ3VyYXRpb259LCBhbmQge0BsaW5rIElQcm9qZWN0Q2FsbGJhY2t9LgotICAgICAqCi0gICAgICogQHNlZSAjZGlzcG9zZVJlc291cmNlcygpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgaW5pdFJlc291cmNlcygpIHsKLSAgICAgICAgQXNzZXRNYW5hZ2VyIGFzc2V0TWFuYWdlciA9IEFzc2V0TWFuYWdlci5nZXRTeXN0ZW0oKTsKLQotICAgICAgICBtU3lzdGVtUmVzb3VyY2VzID0gQnJpZGdlUmVzb3VyY2VzLmluaXRTeXN0ZW0oCi0gICAgICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgICAgICBhc3NldE1hbmFnZXIsCi0gICAgICAgICAgICAgICAgbU1ldHJpY3MsCi0gICAgICAgICAgICAgICAgbUNvbmZpZywKLSAgICAgICAgICAgICAgICBtUHJvamVjdENhbGxiYWNrKTsKLSAgICAgICAgbVRoZW1lID0gbVN5c3RlbVJlc291cmNlcy5uZXdUaGVtZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERpc3Bvc2VzIHRoZSB7QGxpbmsgUmVzb3VyY2VzfSBzaW5nbGV0b24uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGlzcG9zZVJlc291cmNlcygpIHsKLSAgICAgICAgQnJpZGdlUmVzb3VyY2VzLmRpc3Bvc2VTeXN0ZW0oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRCcmlkZ2VJbmZsYXRlcihCcmlkZ2VJbmZsYXRlciBpbmZsYXRlcikgewotICAgICAgICBtQnJpZGdlSW5mbGF0ZXIgPSBpbmZsYXRlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRWaWV3S2V5KFZpZXcgdmlldywgT2JqZWN0IHZpZXdLZXkpIHsKLSAgICAgICAgbVZpZXdLZXlNYXAucHV0KHZpZXcsIHZpZXdLZXkpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0Vmlld0tleShWaWV3IHZpZXcpIHsKLSAgICAgICAgcmV0dXJuIG1WaWV3S2V5TWFwLmdldCh2aWV3KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IGdldFByb2plY3RLZXkoKSB7Ci0gICAgICAgIHJldHVybiBtUHJvamVjdEtleTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGlzcGxheU1ldHJpY3MgZ2V0TWV0cmljcygpIHsKLSAgICAgICAgcmV0dXJuIG1NZXRyaWNzOwotICAgIH0KLQotICAgIHB1YmxpYyBJUHJvamVjdENhbGxiYWNrIGdldFByb2plY3RDYWxsYmFjaygpIHsKLSAgICAgICAgcmV0dXJuIG1Qcm9qZWN0Q2FsbGJhY2s7Ci0gICAgfQotCi0gICAgcHVibGljIFJlbmRlclJlc291cmNlcyBnZXRSZW5kZXJSZXNvdXJjZXMoKSB7Ci0gICAgICAgIHJldHVybiBtUmVuZGVyUmVzb3VyY2VzOwotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldERlZmF1bHRQcm9wTWFwKE9iamVjdCBrZXkpIHsKLSAgICAgICAgcmV0dXJuIG1EZWZhdWx0UHJvcE1hcHMuZ2V0KGtleSk7Ci0gICAgfQotCi0gICAgcHVibGljIENvbmZpZ3VyYXRpb24gZ2V0Q29uZmlndXJhdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIG1Db25maWc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkcyBhIHBhcnNlciB0byB0aGUgc3RhY2suCi0gICAgICogQHBhcmFtIHBhcnNlciB0aGUgcGFyc2VyIHRvIGFkZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBwdXNoUGFyc2VyKEJyaWRnZVhtbEJsb2NrUGFyc2VyIHBhcnNlcikgewotICAgICAgICBpZiAoUGFyc2VyRmFjdG9yeS5MT0dfUEFSU0VSKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBVU0ggIiArIHBhcnNlci5nZXRQYXJzZXIoKS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBtUGFyc2VyU3RhY2sucHVzaChwYXJzZXIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgdGhlIHBhcnNlciBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjawotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHBvcFBhcnNlcigpIHsKLSAgICAgICAgQnJpZGdlWG1sQmxvY2tQYXJzZXIgcGFyc2VyID0gbVBhcnNlclN0YWNrLnBvcCgpOwotICAgICAgICBpZiAoUGFyc2VyRmFjdG9yeS5MT0dfUEFSU0VSKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBPUEQgIiArIHBhcnNlci5nZXRQYXJzZXIoKS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGFyc2VyIGF0IHRoZSB0b3AgdGhlIG9mIHRoZSBzdGFjay4KLSAgICAgKiBAcmV0dXJuIGEgcGFyc2VyIG9yIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIEJyaWRnZVhtbEJsb2NrUGFyc2VyIGdldEN1cnJlbnRQYXJzZXIoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyc2VyU3RhY2sucGVlaygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIHBhcnNlci4KLSAgICAgKiBAcmV0dXJuIGEgcGFyc2VyIG9yIG51bGwgaWYgdGhlcmUgaXNuJ3QgYW55IHByZXZpb3VzIHBhcnNlcgotICAgICAqLwotICAgIHB1YmxpYyBCcmlkZ2VYbWxCbG9ja1BhcnNlciBnZXRQcmV2aW91c1BhcnNlcigpIHsKLSAgICAgICAgaWYgKG1QYXJzZXJTdGFjay5zaXplKCkgPCAyKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbVBhcnNlclN0YWNrLmdldChtUGFyc2VyU3RhY2suc2l6ZSgpIC0gMik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcmVzb2x2ZVRoZW1lQXR0cmlidXRlKGludCByZXNpZCwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSwgYm9vbGVhbiByZXNvbHZlUmVmcykgewotICAgICAgICBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPiByZXNvdXJjZUluZm8gPSBCcmlkZ2UucmVzb2x2ZVJlc291cmNlSWQocmVzaWQpOwotICAgICAgICBib29sZWFuIGlzRnJhbWV3b3JrUmVzID0gdHJ1ZTsKLSAgICAgICAgaWYgKHJlc291cmNlSW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXNvdXJjZUluZm8gPSBtUHJvamVjdENhbGxiYWNrLnJlc29sdmVSZXNvdXJjZUlkKHJlc2lkKTsKLSAgICAgICAgICAgIGlzRnJhbWV3b3JrUmVzID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVzb3VyY2VJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSBtUmVuZGVyUmVzb3VyY2VzLmZpbmRJdGVtSW5UaGVtZShyZXNvdXJjZUluZm8uZ2V0U2Vjb25kKCksCi0gICAgICAgICAgICAgICAgaXNGcmFtZXdvcmtSZXMpOwotICAgICAgICBpZiAocmVzb2x2ZVJlZnMpIHsKLSAgICAgICAgICAgIHZhbHVlID0gbVJlbmRlclJlc291cmNlcy5yZXNvbHZlUmVzVmFsdWUodmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHN0eWxlIHJlc291cmNlCi0gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0eWxlUmVzb3VyY2VWYWx1ZSkgewotICAgICAgICAgICAgLy8gZ2V0IHRoZSBpZCB0aGF0IHdpbGwgcmVwcmVzZW50IHRoaXMgc3R5bGUuCi0gICAgICAgICAgICBvdXRWYWx1ZS5yZXNvdXJjZUlkID0gZ2V0RHluYW1pY0lkQnlTdHlsZSgoU3R5bGVSZXNvdXJjZVZhbHVlKXZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLQotICAgICAgICBpbnQgYTsKLSAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGZyYW1ld29yayB2YWx1ZS4KLSAgICAgICAgaWYgKHZhbHVlLmlzRnJhbWV3b3JrKCkpIHsKLSAgICAgICAgICAgIC8vIGxvb2sgZm9yIGlkTmFtZSBpbiB0aGUgYW5kcm9pZCBSIGNsYXNzZXMuCi0gICAgICAgICAgICAvLyB1c2UgMCBhIGRlZmF1bHQgcmVzIHZhbHVlIGFzIGl0J3Mgbm90IGEgdmFsaWQgaWQgdmFsdWUuCi0gICAgICAgICAgICBhID0gZ2V0RnJhbWV3b3JrUmVzb3VyY2VWYWx1ZSh2YWx1ZS5nZXRSZXNvdXJjZVR5cGUoKSwgdmFsdWUuZ2V0TmFtZSgpLCAwIC8qZGVmVmFsdWUqLyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBsb29rIGZvciBpZE5hbWUgaW4gdGhlIHByb2plY3QgUiBjbGFzcy4KLSAgICAgICAgICAgIC8vIHVzZSAwIGEgZGVmYXVsdCByZXMgdmFsdWUgYXMgaXQncyBub3QgYSB2YWxpZCBpZCB2YWx1ZS4KLSAgICAgICAgICAgIGEgPSBnZXRQcm9qZWN0UmVzb3VyY2VWYWx1ZSh2YWx1ZS5nZXRSZXNvdXJjZVR5cGUoKSwgdmFsdWUuZ2V0TmFtZSgpLCAwIC8qZGVmVmFsdWUqLyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYSAhPSAwKSB7Ci0gICAgICAgICAgICBvdXRWYWx1ZS5yZXNvdXJjZUlkID0gYTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotCi0gICAgcHVibGljIFJlc291cmNlUmVmZXJlbmNlIHJlc29sdmVJZChpbnQgaWQpIHsKLSAgICAgICAgLy8gZmlyc3QgZ2V0IHRoZSBTdHJpbmcgcmVsYXRlZCB0byB0aGlzIGlkIGluIHRoZSBmcmFtZXdvcmsKLSAgICAgICAgUGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4gcmVzb3VyY2VJbmZvID0gQnJpZGdlLnJlc29sdmVSZXNvdXJjZUlkKGlkKTsKLQotICAgICAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUmVzb3VyY2VSZWZlcmVuY2UocmVzb3VyY2VJbmZvLmdldFNlY29uZCgpLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGRpZG4ndCBmaW5kIGEgbWF0Y2ggaW4gdGhlIGZyYW1ld29yaz8gbG9vayBpbiB0aGUgcHJvamVjdC4KLSAgICAgICAgaWYgKG1Qcm9qZWN0Q2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVzb3VyY2VJbmZvID0gbVByb2plY3RDYWxsYmFjay5yZXNvbHZlUmVzb3VyY2VJZChpZCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVzb3VyY2VSZWZlcmVuY2UocmVzb3VyY2VJbmZvLmdldFNlY29uZCgpLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUGFpcjxWaWV3LCBCb29sZWFuPiBpbmZsYXRlVmlldyhSZXNvdXJjZVJlZmVyZW5jZSByZXNvdXJjZSwgVmlld0dyb3VwIHBhcmVudCwKLSAgICAgICAgICAgIGJvb2xlYW4gYXR0YWNoVG9Sb290LCBib29sZWFuIHNraXBDYWxsYmFja1BhcnNlcikgewotICAgICAgICBib29sZWFuIGlzUGxhdGZvcm1MYXlvdXQgPSByZXNvdXJjZS5pc0ZyYW1ld29yaygpOwotCi0gICAgICAgIGlmIChpc1BsYXRmb3JtTGF5b3V0ID09IGZhbHNlICYmIHNraXBDYWxsYmFja1BhcnNlciA9PSBmYWxzZSkgewotICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIHByb2plY3QgY2FsbGJhY2sgY2FuIHByb3ZpZGUgdXMgd2l0aCBhIGN1c3RvbSBwYXJzZXIuCi0gICAgICAgICAgICBJTGF5b3V0UHVsbFBhcnNlciBwYXJzZXIgPSBnZXRQYXJzZXIocmVzb3VyY2UpOwotCi0gICAgICAgICAgICBpZiAocGFyc2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2VYbWxCbG9ja1BhcnNlciBibG9ja1BhcnNlciA9IG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcihwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCByZXNvdXJjZS5pc0ZyYW1ld29yaygpKTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBwdXNoUGFyc2VyKGJsb2NrUGFyc2VyKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhaXIub2YoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUJyaWRnZUluZmxhdGVyLmluZmxhdGUoYmxvY2tQYXJzZXIsIHBhcmVudCwgYXR0YWNoVG9Sb290KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICBwb3BQYXJzZXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlOwotICAgICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICByZXNWYWx1ZSA9IChSZXNvdXJjZVZhbHVlKSByZXNvdXJjZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc1BsYXRmb3JtTGF5b3V0KSB7Ci0gICAgICAgICAgICAgICAgcmVzVmFsdWUgPSBtUmVuZGVyUmVzb3VyY2VzLmdldEZyYW1ld29ya1Jlc291cmNlKFJlc291cmNlVHlwZS5MQVlPVVQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5nZXROYW1lKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXNWYWx1ZSA9IG1SZW5kZXJSZXNvdXJjZXMuZ2V0UHJvamVjdFJlc291cmNlKFJlc291cmNlVHlwZS5MQVlPVVQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5nZXROYW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc1ZhbHVlICE9IG51bGwpIHsKLQotICAgICAgICAgICAgRmlsZSB4bWwgPSBuZXcgRmlsZShyZXNWYWx1ZS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGlmICh4bWwuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHB1bGwgcGFyc2VyIGFyb3VuZCB0aGUgbGF5b3V0IFhNTCBmaWxlLCBhbmQgdGhlbgotICAgICAgICAgICAgICAgIC8vIGdpdmUgdGhhdCB0byBvdXIgWG1sQmxvY2tQYXJzZXIKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBYbWxQdWxsUGFyc2VyIHBhcnNlciA9IFBhcnNlckZhY3RvcnkuY3JlYXRlKHhtbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSByZXNvdXJjZSByZWYgdG8gaGF2ZSBjb3JyZWN0IHZpZXcgY29va2llcwotICAgICAgICAgICAgICAgICAgICBtQnJpZGdlSW5mbGF0ZXIuc2V0UmVzb3VyY2VSZWZlcmVuY2UocmVzb3VyY2UpOwotCi0gICAgICAgICAgICAgICAgICAgIEJyaWRnZVhtbEJsb2NrUGFyc2VyIGJsb2NrUGFyc2VyID0gbmV3IEJyaWRnZVhtbEJsb2NrUGFyc2VyKHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCByZXNvdXJjZS5pc0ZyYW1ld29yaygpKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hQYXJzZXIoYmxvY2tQYXJzZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhaXIub2YoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1CcmlkZ2VJbmZsYXRlci5pbmZsYXRlKGJsb2NrUGFyc2VyLCBwYXJlbnQsIGF0dGFjaFRvUm9vdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvcFBhcnNlcigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBwYXJzZXIgZm9yICIgKyB4bWwsIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgICAgICAvLyB3ZSdsbCByZXR1cm4gbnVsbCBiZWxvdy4KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2Ugd2UgY2hlY2sgYWJvdmUuCi0gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgbUJyaWRnZUluZmxhdGVyLnNldFJlc291cmNlUmVmZXJlbmNlKG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiRmlsZSAlcyBpcyBtaXNzaW5nISIsIHhtbCksIG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJMYXlvdXQgJXMlcyBkb2VzIG5vdCBleGlzdC4iLCBpc1BsYXRmb3JtTGF5b3V0ID8gImFuZHJvaWQ6IiA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmdldE5hbWUoKSksIG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFBhaXIub2YobnVsbCwgZmFsc2UpOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgcHJpdmF0ZSBJTGF5b3V0UHVsbFBhcnNlciBnZXRQYXJzZXIoUmVzb3VyY2VSZWZlcmVuY2UgcmVzb3VyY2UpIHsKLSAgICAgICAgSUxheW91dFB1bGxQYXJzZXIgcGFyc2VyOwotICAgICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICBwYXJzZXIgPSBtUHJvamVjdENhbGxiYWNrLmdldFBhcnNlcigoUmVzb3VyY2VWYWx1ZSkgcmVzb3VyY2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFyc2VyID0gbVByb2plY3RDYWxsYmFjay5nZXRQYXJzZXIocmVzb3VyY2UuZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGFyc2VyOwotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLSBDb250ZXh0IG1ldGhvZHMKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXNvdXJjZXMgZ2V0UmVzb3VyY2VzKCkgewotICAgICAgICByZXR1cm4gbVN5c3RlbVJlc291cmNlczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVGhlbWUgZ2V0VGhlbWUoKSB7Ci0gICAgICAgIHJldHVybiBtVGhlbWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENsYXNzTG9hZGVyIGdldENsYXNzTG9hZGVyKCkgewotICAgICAgICByZXR1cm4gdGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBnZXRTeXN0ZW1TZXJ2aWNlKFN0cmluZyBzZXJ2aWNlKSB7Ci0gICAgICAgIGlmIChMQVlPVVRfSU5GTEFURVJfU0VSVklDRS5lcXVhbHMoc2VydmljZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBtQnJpZGdlSW5mbGF0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVEVYVF9TRVJWSUNFU19NQU5BR0VSX1NFUlZJQ0UuZXF1YWxzKHNlcnZpY2UpKSB7Ci0gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIHZhbGlkIHNlcnZpY2UgdG8gYXZvaWQgTlBFCi0gICAgICAgICAgICByZXR1cm4gVGV4dFNlcnZpY2VzTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFdJTkRPV19TRVJWSUNFLmVxdWFscyhzZXJ2aWNlKSkgewotICAgICAgICAgICAgcmV0dXJuIG1XaW5kb3dNYW5hZ2VyOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbmVlZGVkIGJ5IFNlYXJjaFZpZXcKLSAgICAgICAgaWYgKElOUFVUX01FVEhPRF9TRVJWSUNFLmVxdWFscyhzZXJ2aWNlKSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoUE9XRVJfU0VSVklDRS5lcXVhbHMoc2VydmljZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUG93ZXJNYW5hZ2VyKHRoaXMsIG5ldyBCcmlkZ2VQb3dlck1hbmFnZXIoKSwgbmV3IEhhbmRsZXIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlVuc3VwcG9ydGVkIFNlcnZpY2U6ICIgKyBzZXJ2aWNlKTsKLSAgICB9Ci0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCBUeXBlZEFycmF5IG9idGFpblN0eWxlZEF0dHJpYnV0ZXMoaW50W10gYXR0cnMpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVN0eWxlQmFzZWRUeXBlZEFycmF5KG1SZW5kZXJSZXNvdXJjZXMuZ2V0Q3VycmVudFRoZW1lKCksIGF0dHJzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgVHlwZWRBcnJheSBvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGludCByZXNpZCwgaW50W10gYXR0cnMpCi0gICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBTdHlsZVJlc291cmNlVmFsdWUgYmFzZWQgb24gdGhlIHJlc0lkOwotICAgICAgICBTdHlsZVJlc291cmNlVmFsdWUgc3R5bGUgPSBnZXRTdHlsZUJ5RHluYW1pY0lkKHJlc2lkKTsKLQotICAgICAgICBpZiAoc3R5bGUgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1UeXBlZEFycmF5Q2FjaGUgPT0gbnVsbCkgewotICAgICAgICAgICAgbVR5cGVkQXJyYXlDYWNoZSA9IG5ldyBIYXNoTWFwPGludFtdLCBNYXA8SW50ZWdlcixUeXBlZEFycmF5Pj4oKTsKLQotICAgICAgICAgICAgTWFwPEludGVnZXIsIFR5cGVkQXJyYXk+IG1hcCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIFR5cGVkQXJyYXk+KCk7Ci0gICAgICAgICAgICBtVHlwZWRBcnJheUNhY2hlLnB1dChhdHRycywgbWFwKTsKLQotICAgICAgICAgICAgQnJpZGdlVHlwZWRBcnJheSB0YSA9IGNyZWF0ZVN0eWxlQmFzZWRUeXBlZEFycmF5KHN0eWxlLCBhdHRycyk7Ci0gICAgICAgICAgICBtYXAucHV0KHJlc2lkLCB0YSk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0YTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgMm5kIG1hcAotICAgICAgICBNYXA8SW50ZWdlciwgVHlwZWRBcnJheT4gbWFwID0gbVR5cGVkQXJyYXlDYWNoZS5nZXQoYXR0cnMpOwotICAgICAgICBpZiAobWFwID09IG51bGwpIHsKLSAgICAgICAgICAgIG1hcCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIFR5cGVkQXJyYXk+KCk7Ci0gICAgICAgICAgICBtVHlwZWRBcnJheUNhY2hlLnB1dChhdHRycywgbWFwKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgYXJyYXkgZnJvbSB0aGUgMm5kIG1hcAotICAgICAgICBUeXBlZEFycmF5IHRhID0gbWFwLmdldChyZXNpZCk7Ci0KLSAgICAgICAgaWYgKHRhID09IG51bGwpIHsKLSAgICAgICAgICAgIHRhID0gY3JlYXRlU3R5bGVCYXNlZFR5cGVkQXJyYXkoc3R5bGUsIGF0dHJzKTsKLSAgICAgICAgICAgIG1hcC5wdXQocmVzaWQsIHRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0YTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgVHlwZWRBcnJheSBvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKEF0dHJpYnV0ZVNldCBzZXQsIGludFtdIGF0dHJzKSB7Ci0gICAgICAgIHJldHVybiBvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKHNldCwgYXR0cnMsIDAsIDApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBUeXBlZEFycmF5IG9idGFpblN0eWxlZEF0dHJpYnV0ZXMoQXR0cmlidXRlU2V0IHNldCwgaW50W10gYXR0cnMsCi0gICAgICAgICAgICBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKLQotICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGRlZmF1bHRQcm9wTWFwID0gbnVsbDsKLSAgICAgICAgYm9vbGVhbiBpc1BsYXRmb3JtRmlsZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gSGludDogZm9yIFhtbFB1bGxQYXJzZXIsIGF0dGFjaCBzb3VyY2UgLy9ERVZJQ0VfU1JDL2RhbHZpay9saWJjb3JlL3htbC9zcmMvamF2YQotICAgICAgICBpZiAoc2V0IGluc3RhbmNlb2YgQnJpZGdlWG1sQmxvY2tQYXJzZXIpIHsKLSAgICAgICAgICAgIEJyaWRnZVhtbEJsb2NrUGFyc2VyIHBhcnNlciA9IG51bGw7Ci0gICAgICAgICAgICBwYXJzZXIgPSAoQnJpZGdlWG1sQmxvY2tQYXJzZXIpc2V0OwotCi0gICAgICAgICAgICBpc1BsYXRmb3JtRmlsZSA9IHBhcnNlci5pc1BsYXRmb3JtRmlsZSgpOwotCi0gICAgICAgICAgICBPYmplY3Qga2V5ID0gcGFyc2VyLmdldFZpZXdDb29raWUoKTsKLSAgICAgICAgICAgIGlmIChrZXkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGRlZmF1bHRQcm9wTWFwID0gbURlZmF1bHRQcm9wTWFwcy5nZXQoa2V5KTsKLSAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFByb3BNYXAgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UHJvcE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotICAgICAgICAgICAgICAgICAgICBtRGVmYXVsdFByb3BNYXBzLnB1dChrZXksIGRlZmF1bHRQcm9wTWFwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIGlmIChzZXQgaW5zdGFuY2VvZiBCcmlkZ2VMYXlvdXRQYXJhbXNNYXBBdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICAvLyB0aGlzIGlzIG9ubHkgZm9yIHRlbXAgbGF5b3V0IHBhcmFtcyBnZW5lcmF0ZWQgZHluYW1pY2FsbHksIHNvIHRoaXMgaXMgbmV2ZXIKLSAgICAgICAgICAgIC8vIHBsYXRmb3JtIGNvbnRlbnQuCi0gICAgICAgICAgICBpc1BsYXRmb3JtRmlsZSA9IGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKHNldCAhPSBudWxsKSB7IC8vIG51bGwgcGFyc2VyIGlzIG9rCi0gICAgICAgICAgICAvLyByZWFsbHkgdGhpcyBzaG91bGQgbm90IGJlIGhhcHBlbmluZyBzaW5jZSBpdHMgaW5zdGFudGlhdGVkIGluIEJyaWRnZQotICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLAotICAgICAgICAgICAgICAgICAgICAiUGFyc2VyIGlzIG5vdCBhIEJyaWRnZVhtbEJsb2NrUGFyc2VyISIsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBMaXN0PFBhaXI8U3RyaW5nLCBCb29sZWFuPj4gYXR0cmlidXRlTGlzdCA9IHNlYXJjaEF0dHJzKGF0dHJzKTsKLQotICAgICAgICBCcmlkZ2VUeXBlZEFycmF5IHRhID0gKChCcmlkZ2VSZXNvdXJjZXMpIG1TeXN0ZW1SZXNvdXJjZXMpLm5ld1R5cGVBcnJheShhdHRycy5sZW5ndGgsCi0gICAgICAgICAgICAgICAgaXNQbGF0Zm9ybUZpbGUpOwotCi0gICAgICAgIC8vIGxvb2sgZm9yIGEgY3VzdG9tIHN0eWxlLgotICAgICAgICBTdHJpbmcgY3VzdG9tU3R5bGUgPSBudWxsOwotICAgICAgICBpZiAoc2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGN1c3RvbVN0eWxlID0gc2V0LmdldEF0dHJpYnV0ZVZhbHVlKG51bGwgLyogbmFtZXNwYWNlKi8sICJzdHlsZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3R5bGVSZXNvdXJjZVZhbHVlIGN1c3RvbVN0eWxlVmFsdWVzID0gbnVsbDsKLSAgICAgICAgaWYgKGN1c3RvbVN0eWxlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgaXRlbSA9IG1SZW5kZXJSZXNvdXJjZXMuZmluZFJlc1ZhbHVlKGN1c3RvbVN0eWxlLAotICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKmZvcmNlRnJhbWV3b3JrT25seSovKTsKLQotICAgICAgICAgICAgLy8gcmVzb2x2ZSBpdCBpbiBjYXNlIGl0IGxpbmtzIHRvIHNvbWV0aGluZyBlbHNlCi0gICAgICAgICAgICBpdGVtID0gbVJlbmRlclJlc291cmNlcy5yZXNvbHZlUmVzVmFsdWUoaXRlbSk7Ci0KLSAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgU3R5bGVSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgY3VzdG9tU3R5bGVWYWx1ZXMgPSAoU3R5bGVSZXNvdXJjZVZhbHVlKWl0ZW07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZXNvbHZlIHRoZSBkZWZTdHlsZUF0dHIgdmFsdWUgaW50byBhIElTdHlsZVJlc291cmNlVmFsdWUKLSAgICAgICAgU3R5bGVSZXNvdXJjZVZhbHVlIGRlZlN0eWxlVmFsdWVzID0gbnVsbDsKLQotICAgICAgICBpZiAoZGVmU3R5bGVBdHRyICE9IDApIHsKLSAgICAgICAgICAgIC8vIGdldCB0aGUgbmFtZSBmcm9tIHRoZSBpbnQuCi0gICAgICAgICAgICBQYWlyPFN0cmluZywgQm9vbGVhbj4gZGVmU3R5bGVBdHRyaWJ1dGUgPSBzZWFyY2hBdHRyKGRlZlN0eWxlQXR0cik7Ci0KLSAgICAgICAgICAgIGlmIChkZWZhdWx0UHJvcE1hcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGRlZlN0eWxlTmFtZSA9IGRlZlN0eWxlQXR0cmlidXRlLmdldEZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlZlN0eWxlQXR0cmlidXRlLmdldFNlY29uZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZlN0eWxlTmFtZSA9ICJhbmRyb2lkOiIgKyBkZWZTdHlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHRQcm9wTWFwLnB1dCgic3R5bGUiLCBkZWZTdHlsZU5hbWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBsb29rIGZvciB0aGUgc3R5bGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUsIGFuZCBpdHMgcGFyZW50OgotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSBpdGVtID0gbVJlbmRlclJlc291cmNlcy5maW5kSXRlbUluVGhlbWUoZGVmU3R5bGVBdHRyaWJ1dGUuZ2V0Rmlyc3QoKSwKLSAgICAgICAgICAgICAgICAgICAgZGVmU3R5bGVBdHRyaWJ1dGUuZ2V0U2Vjb25kKCkpOwotCi0gICAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gaXRlbSBpcyBhIHJlZmVyZW5jZSB0byBhIHN0eWxlIGVudHJ5LiBTZWFyY2ggZm9yIGl0LgotICAgICAgICAgICAgICAgIGl0ZW0gPSBtUmVuZGVyUmVzb3VyY2VzLmZpbmRSZXNWYWx1ZShpdGVtLmdldFZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKmZvcmNlRnJhbWV3b3JrT25seSovKTsKLQotICAgICAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgU3R5bGVSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZlN0eWxlVmFsdWVzID0gKFN0eWxlUmVzb3VyY2VWYWx1ZSlpdGVtOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX1JFU09MVkVfVEhFTUVfQVRUUiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gZmluZCBzdHlsZSAnJXMnIGluIGN1cnJlbnQgdGhlbWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZTdHlsZUF0dHJpYnV0ZS5nZXRGaXJzdCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGRlZlN0eWxlUmVzICE9IDApIHsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNGcmFtZXdvcmtSZXMgPSB0cnVlOwotICAgICAgICAgICAgUGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4gdmFsdWUgPSBCcmlkZ2UucmVzb2x2ZVJlc291cmNlSWQoZGVmU3R5bGVSZXMpOwotICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG1Qcm9qZWN0Q2FsbGJhY2sucmVzb2x2ZVJlc291cmNlSWQoZGVmU3R5bGVSZXMpOwotICAgICAgICAgICAgICAgIGlzRnJhbWV3b3JrUmVzID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmdldEZpcnN0KCkgPT0gUmVzb3VyY2VUeXBlLlNUWUxFKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgZm9yIHRoZSBzdHlsZSBpbiB0aGUgY3VycmVudCB0aGVtZSwgYW5kIGl0cyBwYXJlbnQ6Ci0gICAgICAgICAgICAgICAgICAgIFJlc291cmNlVmFsdWUgaXRlbSA9IG1SZW5kZXJSZXNvdXJjZXMuZmluZEl0ZW1JblRoZW1lKHZhbHVlLmdldFNlY29uZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnJhbWV3b3JrUmVzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBTdHlsZVJlc291cmNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFByb3BNYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UHJvcE1hcC5wdXQoInN0eWxlIiwgaXRlbS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZlN0eWxlVmFsdWVzID0gKFN0eWxlUmVzb3VyY2VWYWx1ZSlpdGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0eWxlIHdpdGggaWQgMHgleCAocmVzb2x2ZWQgdG8gJyVzJykgZG9lcyBub3QgZXhpc3QuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZTdHlsZVJlcywgdmFsdWUuZ2V0U2Vjb25kKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVzb3VjZSBpZCAweCV4IGlzIG5vdCBvZiB0eXBlIFNUWUxFIChpbnN0ZWFkICVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZTdHlsZVJlcywgdmFsdWUuZ2V0Rmlyc3QoKS50b1N0cmluZygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBmaW5kIHN0eWxlIHdpdGggaWQgMHgleCBpbiBjdXJyZW50IHRoZW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmU3R5bGVSZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgYXBwTmFtZXNwYWNlID0gbVByb2plY3RDYWxsYmFjay5nZXROYW1lc3BhY2UoKTsKLQotICAgICAgICBpZiAoYXR0cmlidXRlTGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDAgOyBpbmRleCA8IGF0dHJpYnV0ZUxpc3Quc2l6ZSgpIDsgaW5kZXgrKykgewotICAgICAgICAgICAgICAgIFBhaXI8U3RyaW5nLCBCb29sZWFuPiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVMaXN0LmdldChpbmRleCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3RyaW5nIGF0dHJOYW1lID0gYXR0cmlidXRlLmdldEZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBmcmFtZXdvcmtBdHRyID0gYXR0cmlidXRlLmdldFNlY29uZCgpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKHNldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2V0LmdldEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29ya0F0dHIgPyBCcmlkZ2VDb25zdGFudHMuTlNfUkVTT1VSQ0VTIDogYXBwTmFtZXNwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWUpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYW4gYXBwIGF0dHJpYnV0ZSwgYW5kIHRoZSBmaXJzdCBnZXQgZmFpbHMsIHRyeSB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBuZXcgcmVzLWF1dG8gbmFtZXNwYWNlIGFzIHdlbGwKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1ld29ya0F0dHIgPT0gZmFsc2UgJiYgdmFsdWUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZXQuZ2V0QXR0cmlidXRlVmFsdWUoQnJpZGdlQ29uc3RhbnRzLk5TX0FQUF9SRVNfQVVUTywgYXR0ck5hbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUncyBubyBkaXJlY3QgdmFsdWUgZm9yIHRoaXMgYXR0cmlidXRlIGluIHRoZSBYTUwsIHdlIGxvb2sgZm9yIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgaW4gdGhlIHdpZGdldCBkZWZTdHlsZSwgYW5kIHRoZW4gaW4gdGhlIHRoZW1lLgotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlc291cmNlVmFsdWUgcmVzVmFsdWUgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgZm9yIHRoZSB2YWx1ZSBpbiB0aGUgY3VzdG9tIHN0eWxlIGZpcnN0IChhbmQgaXRzIHBhcmVudCBpZiBuZWVkZWQpCi0gICAgICAgICAgICAgICAgICAgIGlmIChjdXN0b21TdHlsZVZhbHVlcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNWYWx1ZSA9IG1SZW5kZXJSZXNvdXJjZXMuZmluZEl0ZW1JblN0eWxlKGN1c3RvbVN0eWxlVmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSwgZnJhbWV3b3JrQXR0cik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGxvb2sgZm9yIHRoZSB2YWx1ZSBpbiB0aGUgZGVmYXVsdCBTdHlsZSAoYW5kIGl0cyBwYXJlbnQgaWYgbmVlZGVkKQotICAgICAgICAgICAgICAgICAgICBpZiAocmVzVmFsdWUgPT0gbnVsbCAmJiBkZWZTdHlsZVZhbHVlcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNWYWx1ZSA9IG1SZW5kZXJSZXNvdXJjZXMuZmluZEl0ZW1JblN0eWxlKGRlZlN0eWxlVmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSwgZnJhbWV3b3JrQXR0cik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgaXRlbSBpcyBub3QgcHJlc2VudCBpbiB0aGUgZGVmU3R5bGUsIHdlIGxvb2sgaW4gdGhlIG1haW4gdGhlbWUgKGFuZAotICAgICAgICAgICAgICAgICAgICAvLyBpdHMgcGFyZW50IHRoZW1lcykKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc1ZhbHVlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc1ZhbHVlID0gbVJlbmRlclJlc291cmNlcy5maW5kSXRlbUluVGhlbWUoYXR0ck5hbWUsIGZyYW1ld29ya0F0dHIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgZm91bmQgYSB2YWx1ZSwgd2UgbWFrZSBzdXJlIHRoaXMgZG9lc24ndCByZWZlcmVuY2UgYW5vdGhlciB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gU28gd2UgcmVzb2x2ZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc1ZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHB1dCB0aGUgZmlyc3QgZGVmYXVsdCB2YWx1ZSwgYmVmb3JlIHRoZSByZXNvbHV0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRQcm9wTWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UHJvcE1hcC5wdXQoYXR0ck5hbWUsIHJlc1ZhbHVlLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNWYWx1ZSA9IG1SZW5kZXJSZXNvdXJjZXMucmVzb2x2ZVJlc1ZhbHVlKHJlc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHRhLmJyaWRnZVNldFZhbHVlKGluZGV4LCBhdHRyTmFtZSwgZnJhbWV3b3JrQXR0ciwgcmVzVmFsdWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlIFhNTCwgYnV0IHdlIG5lZWQgdG8gcmVzb2x2ZSBpdCBpbiBjYXNlIGl0J3MKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNpbmcgYW5vdGhlciByZXNvdXJjZSBvciBhIHRoZW1lIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICB0YS5icmlkZ2VTZXRWYWx1ZShpbmRleCwgYXR0ck5hbWUsIGZyYW1ld29ya0F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlclJlc291cmNlcy5yZXNvbHZlVmFsdWUobnVsbCwgYXR0ck5hbWUsIHZhbHVlLCBpc1BsYXRmb3JtRmlsZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRhLnNlYWxBcnJheSgpOwotCi0gICAgICAgIHJldHVybiB0YTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTG9vcGVyIGdldE1haW5Mb29wZXIoKSB7Ci0gICAgICAgIHJldHVybiBMb29wZXIubXlMb29wZXIoKTsKLSAgICB9Ci0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0gcHJpdmF0ZSBuZXcgbWV0aG9kcwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIHtAbGluayBCcmlkZ2VUeXBlZEFycmF5fSBieSBmaWxsaW5nIHRoZSB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgaW50W10gd2l0aCB0aGUKLSAgICAgKiB2YWx1ZXMgZm91bmQgaW4gdGhlIGdpdmVuIHN0eWxlLgotICAgICAqIEBzZWUgI29idGFpblN0eWxlZEF0dHJpYnV0ZXMoaW50LCBpbnRbXSkKLSAgICAgKi8KLSAgICBwcml2YXRlIEJyaWRnZVR5cGVkQXJyYXkgY3JlYXRlU3R5bGVCYXNlZFR5cGVkQXJyYXkoU3R5bGVSZXNvdXJjZVZhbHVlIHN0eWxlLCBpbnRbXSBhdHRycykKLSAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb24gewotCi0gICAgICAgIExpc3Q8UGFpcjxTdHJpbmcsIEJvb2xlYW4+PiBhdHRyaWJ1dGVzID0gc2VhcmNoQXR0cnMoYXR0cnMpOwotCi0gICAgICAgIEJyaWRnZVR5cGVkQXJyYXkgdGEgPSAoKEJyaWRnZVJlc291cmNlcykgbVN5c3RlbVJlc291cmNlcykubmV3VHlwZUFycmF5KGF0dHJzLmxlbmd0aCwKLSAgICAgICAgICAgICAgICBmYWxzZSk7Ci0KLSAgICAgICAgLy8gZm9yIGVhY2ggYXR0cmlidXRlLCBnZXQgaXRzIG5hbWUgc28gdGhhdCB3ZSBjYW4gc2VhcmNoIGl0IGluIHRoZSBzdHlsZQotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBhdHRycy5sZW5ndGggOyBpKyspIHsKLSAgICAgICAgICAgIFBhaXI8U3RyaW5nLCBCb29sZWFuPiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmdldChpKTsKLQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gbG9vayBmb3IgdGhlIHZhbHVlIGluIHRoZSBnaXZlbiBzdHlsZQotICAgICAgICAgICAgICAgIFJlc291cmNlVmFsdWUgcmVzVmFsdWUgPSBtUmVuZGVyUmVzb3VyY2VzLmZpbmRJdGVtSW5TdHlsZShzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5nZXRGaXJzdCgpLCBhdHRyaWJ1dGUuZ2V0U2Vjb25kKCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlc1ZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSBpdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHJlZmVyZW5jZXMgbGVmdC4KLSAgICAgICAgICAgICAgICAgICAgdGEuYnJpZGdlU2V0VmFsdWUoaSwgYXR0cmlidXRlLmdldEZpcnN0KCksIGF0dHJpYnV0ZS5nZXRTZWNvbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyUmVzb3VyY2VzLnJlc29sdmVSZXNWYWx1ZShyZXNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRhLnNlYWxBcnJheSgpOwotCi0gICAgICAgIHJldHVybiB0YTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFRoZSBpbnB1dCBpbnRbXSBhdHRycyBpcyBhIGxpc3Qgb2YgYXR0cmlidXRlcy4gVGhlIHJldHVybnMgYSBsaXN0IG9mIGluZm9ybWF0aW9uIGFib3V0Ci0gICAgICogZWFjaCBhdHRyaWJ1dGVzLiBUaGUgaW5mb3JtYXRpb24gaXMgKG5hbWUsIGlzRnJhbWV3b3JrKQotICAgICAqIDxwLz4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhdHRycyBBbiBhdHRyaWJ1dGUgYXJyYXkgcmVmZXJlbmNlIGdpdmVuIHRvIG9idGFpblN0eWxlZEF0dHJpYnV0ZXMuCi0gICAgICogQHJldHVybiBMaXN0IG9mIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbi4KLSAgICAgKi8KLSAgICBwcml2YXRlIExpc3Q8UGFpcjxTdHJpbmcsIEJvb2xlYW4+PiBzZWFyY2hBdHRycyhpbnRbXSBhdHRycykgewotICAgICAgICBMaXN0PFBhaXI8U3RyaW5nLCBCb29sZWFuPj4gcmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8UGFpcjxTdHJpbmcsIEJvb2xlYW4+PihhdHRycy5sZW5ndGgpOwotCi0gICAgICAgIC8vIGZvciBlYWNoIGF0dHJpYnV0ZSwgZ2V0IGl0cyBuYW1lIHNvIHRoYXQgd2UgY2FuIHNlYXJjaCBpdCBpbiB0aGUgc3R5bGUKLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgYXR0cnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgICAgICAgICBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPiByZXNvbHZlZFJlc291cmNlID0gQnJpZGdlLnJlc29sdmVSZXNvdXJjZUlkKGF0dHJzW2ldKTsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNGcmFtZXdvcmsgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChyZXNvbHZlZFJlc291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpc0ZyYW1ld29yayA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc29sdmVkUmVzb3VyY2UgPSBtUHJvamVjdENhbGxiYWNrLnJlc29sdmVSZXNvdXJjZUlkKGF0dHJzW2ldKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlc29sdmVkUmVzb3VyY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlc3VsdHMuYWRkKFBhaXIub2YocmVzb2x2ZWRSZXNvdXJjZS5nZXRTZWNvbmQoKSwgaXNGcmFtZXdvcmspKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hZGQobnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZWFyY2hlcyBmb3IgdGhlIGF0dHJpYnV0ZSByZWZlcmVuY2VkIGJ5IGl0cyBpbnRlcm5hbCBpZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhdHRyIEFuIGF0dHJpYnV0ZSByZWZlcmVuY2UgZ2l2ZW4gdG8gb2J0YWluU3R5bGVkQXR0cmlidXRlcyBzdWNoIGFzIGRlZlN0eWxlLgotICAgICAqIEByZXR1cm4gQSAobmFtZSwgaXNGcmFtZXdvcmspIHBhaXIgZGVzY3JpYmluZyB0aGUgYXR0cmlidXRlIGlmIGZvdW5kLiBSZXR1cm5zIG51bGwKLSAgICAgKiAgICAgICAgIGlmIG5vdGhpbmcgaXMgZm91bmQuCi0gICAgICovCi0gICAgcHVibGljIFBhaXI8U3RyaW5nLCBCb29sZWFuPiBzZWFyY2hBdHRyKGludCBhdHRyKSB7Ci0gICAgICAgIFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+IGluZm8gPSBCcmlkZ2UucmVzb2x2ZVJlc291cmNlSWQoYXR0cik7Ci0gICAgICAgIGlmIChpbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBQYWlyLm9mKGluZm8uZ2V0U2Vjb25kKCksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmZvID0gbVByb2plY3RDYWxsYmFjay5yZXNvbHZlUmVzb3VyY2VJZChhdHRyKTsKLSAgICAgICAgaWYgKGluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIFBhaXIub2YoaW5mby5nZXRTZWNvbmQoKSwgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldER5bmFtaWNJZEJ5U3R5bGUoU3R5bGVSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlKSB7Ci0gICAgICAgIGlmIChtRHluYW1pY0lkVG9TdHlsZU1hcCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgdGhlIG1hcHMuCi0gICAgICAgICAgICBtRHluYW1pY0lkVG9TdHlsZU1hcCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIFN0eWxlUmVzb3VyY2VWYWx1ZT4oKTsKLSAgICAgICAgICAgIG1TdHlsZVRvRHluYW1pY0lkTWFwID0gbmV3IEhhc2hNYXA8U3R5bGVSZXNvdXJjZVZhbHVlLCBJbnRlZ2VyPigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbG9vayBmb3IgYW4gZXhpc3RpbmcgaWQKLSAgICAgICAgSW50ZWdlciBpZCA9IG1TdHlsZVRvRHluYW1pY0lkTWFwLmdldChyZXNWYWx1ZSk7Ci0KLSAgICAgICAgaWYgKGlkID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEgbmV3IGlkCi0gICAgICAgICAgICBpZCA9IEludGVnZXIudmFsdWVPZigrK21EeW5hbWljSWRHZW5lcmF0b3IpOwotCi0gICAgICAgICAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBtYXBzLgotICAgICAgICAgICAgbUR5bmFtaWNJZFRvU3R5bGVNYXAucHV0KGlkLCByZXNWYWx1ZSk7Ci0gICAgICAgICAgICBtU3R5bGVUb0R5bmFtaWNJZE1hcC5wdXQocmVzVmFsdWUsIGlkKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBpZDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0eWxlUmVzb3VyY2VWYWx1ZSBnZXRTdHlsZUJ5RHluYW1pY0lkKGludCBpKSB7Ci0gICAgICAgIGlmIChtRHluYW1pY0lkVG9TdHlsZU1hcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUR5bmFtaWNJZFRvU3R5bGVNYXAuZ2V0KGkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRGcmFtZXdvcmtSZXNvdXJjZVZhbHVlKFJlc291cmNlVHlwZSByZXNUeXBlLCBTdHJpbmcgcmVzTmFtZSwgaW50IGRlZlZhbHVlKSB7Ci0gICAgICAgIEludGVnZXIgdmFsdWUgPSBCcmlkZ2UuZ2V0UmVzb3VyY2VJZChyZXNUeXBlLCByZXNOYW1lKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pbnRWYWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0UHJvamVjdFJlc291cmNlVmFsdWUoUmVzb3VyY2VUeXBlIHJlc1R5cGUsIFN0cmluZyByZXNOYW1lLCBpbnQgZGVmVmFsdWUpIHsKLSAgICAgICAgaWYgKG1Qcm9qZWN0Q2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgSW50ZWdlciB2YWx1ZSA9IG1Qcm9qZWN0Q2FsbGJhY2suZ2V0UmVzb3VyY2VJZChyZXNUeXBlLCByZXNOYW1lKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmludFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgfQotCi0gICAgLy8tLS0tLS0tLS0tLS0gTk9UIE9WRVJSSURFTiAtLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gYmluZFNlcnZpY2UoSW50ZW50IGFyZzAsIFNlcnZpY2VDb25uZWN0aW9uIGFyZzEsIGludCBhcmcyKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgY2hlY2tDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihTdHJpbmcgYXJnMCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgY2hlY2tDYWxsaW5nT3JTZWxmVXJpUGVybWlzc2lvbihVcmkgYXJnMCwgaW50IGFyZzEpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oU3RyaW5nIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGNoZWNrQ2FsbGluZ1VyaVBlcm1pc3Npb24oVXJpIGFyZzAsIGludCBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBjaGVja1Blcm1pc3Npb24oU3RyaW5nIGFyZzAsIGludCBhcmcxLCBpbnQgYXJnMikgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgY2hlY2tVcmlQZXJtaXNzaW9uKFVyaSBhcmcwLCBpbnQgYXJnMSwgaW50IGFyZzIsIGludCBhcmczKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBjaGVja1VyaVBlcm1pc3Npb24oVXJpIGFyZzAsIFN0cmluZyBhcmcxLCBTdHJpbmcgYXJnMiwgaW50IGFyZzMsCi0gICAgICAgICAgICBpbnQgYXJnNCwgaW50IGFyZzUpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbGVhcldhbGxwYXBlcigpIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQgY3JlYXRlUGFja2FnZUNvbnRleHQoU3RyaW5nIGFyZzAsIGludCBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQgY3JlYXRlUGFja2FnZUNvbnRleHRBc1VzZXIoU3RyaW5nIGFyZzAsIGludCBhcmcxLCBVc2VySGFuZGxlIHVzZXIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29udGV4dCBjcmVhdGVDb25maWd1cmF0aW9uQ29udGV4dChDb25maWd1cmF0aW9uIG92ZXJyaWRlQ29uZmlndXJhdGlvbikgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZURpc3BsYXlDb250ZXh0KERpc3BsYXkgZGlzcGxheSkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBkYXRhYmFzZUxpc3QoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZGVsZXRlRGF0YWJhc2UoU3RyaW5nIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZGVsZXRlRmlsZShTdHJpbmcgYXJnMCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBlbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oU3RyaW5nIGFyZzAsIFN0cmluZyBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGVuZm9yY2VDYWxsaW5nT3JTZWxmVXJpUGVybWlzc2lvbihVcmkgYXJnMCwgaW50IGFyZzEsCi0gICAgICAgICAgICBTdHJpbmcgYXJnMikgewotICAgICAgICAvLyBwYXNzCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oU3RyaW5nIGFyZzAsIFN0cmluZyBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGVuZm9yY2VDYWxsaW5nVXJpUGVybWlzc2lvbihVcmkgYXJnMCwgaW50IGFyZzEsIFN0cmluZyBhcmcyKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGVuZm9yY2VQZXJtaXNzaW9uKFN0cmluZyBhcmcwLCBpbnQgYXJnMSwgaW50IGFyZzIsIFN0cmluZyBhcmczKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGVuZm9yY2VVcmlQZXJtaXNzaW9uKFVyaSBhcmcwLCBpbnQgYXJnMSwgaW50IGFyZzIsIGludCBhcmczLAotICAgICAgICAgICAgU3RyaW5nIGFyZzQpIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZW5mb3JjZVVyaVBlcm1pc3Npb24oVXJpIGFyZzAsIFN0cmluZyBhcmcxLCBTdHJpbmcgYXJnMiwKLSAgICAgICAgICAgIGludCBhcmczLCBpbnQgYXJnNCwgaW50IGFyZzUsIFN0cmluZyBhcmc2KSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBmaWxlTGlzdCgpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQXNzZXRNYW5hZ2VyIGdldEFzc2V0cygpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXRDYWNoZURpcigpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXRFeHRlcm5hbENhY2hlRGlyKCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb250ZW50UmVzb2x2ZXIgZ2V0Q29udGVudFJlc29sdmVyKCkgewotICAgICAgICBpZiAobUNvbnRlbnRSZXNvbHZlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtQ29udGVudFJlc29sdmVyID0gbmV3IEJyaWRnZUNvbnRlbnRSZXNvbHZlcih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbUNvbnRlbnRSZXNvbHZlcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXREYXRhYmFzZVBhdGgoU3RyaW5nIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXREaXIoU3RyaW5nIGFyZzAsIGludCBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGUgZ2V0RmlsZVN0cmVhbVBhdGgoU3RyaW5nIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXRGaWxlc0RpcigpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXRFeHRlcm5hbEZpbGVzRGlyKFN0cmluZyB0eXBlKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQYWNrYWdlQ29kZVBhdGgoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFBhY2thZ2VNYW5hZ2VyIGdldFBhY2thZ2VNYW5hZ2VyKCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRCYXNlUGFja2FnZU5hbWUoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRPcFBhY2thZ2VOYW1lKCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBBcHBsaWNhdGlvbkluZm8gZ2V0QXBwbGljYXRpb25JbmZvKCkgewotICAgICAgICByZXR1cm4gbUFwcGxpY2F0aW9uSW5mbzsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFBhY2thZ2VSZXNvdXJjZVBhdGgoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGUgZ2V0U2hhcmVkUHJlZnNGaWxlKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNoYXJlZFByZWZlcmVuY2VzIGdldFNoYXJlZFByZWZlcmVuY2VzKFN0cmluZyBhcmcwLCBpbnQgYXJnMSkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEcmF3YWJsZSBnZXRXYWxscGFwZXIoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRXYWxscGFwZXJEZXNpcmVkTWluaW11bVdpZHRoKCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRXYWxscGFwZXJEZXNpcmVkTWluaW11bUhlaWdodCgpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGdyYW50VXJpUGVybWlzc2lvbihTdHJpbmcgYXJnMCwgVXJpIGFyZzEsIGludCBhcmcyKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWxlSW5wdXRTdHJlYW0gb3BlbkZpbGVJbnB1dChTdHJpbmcgYXJnMCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGVPdXRwdXRTdHJlYW0gb3BlbkZpbGVPdXRwdXQoU3RyaW5nIGFyZzAsIGludCBhcmcxKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU1FMaXRlRGF0YWJhc2Ugb3Blbk9yQ3JlYXRlRGF0YWJhc2UoU3RyaW5nIGFyZzAsIGludCBhcmcxLCBDdXJzb3JGYWN0b3J5IGFyZzIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU1FMaXRlRGF0YWJhc2Ugb3Blbk9yQ3JlYXRlRGF0YWJhc2UoU3RyaW5nIGFyZzAsIGludCBhcmcxLAotICAgICAgICAgICAgQ3Vyc29yRmFjdG9yeSBhcmcyLCBEYXRhYmFzZUVycm9ySGFuZGxlciBhcmczKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIERyYXdhYmxlIHBlZWtXYWxscGFwZXIoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEludGVudCByZWdpc3RlclJlY2VpdmVyKEJyb2FkY2FzdFJlY2VpdmVyIGFyZzAsIEludGVudEZpbHRlciBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEludGVudCByZWdpc3RlclJlY2VpdmVyKEJyb2FkY2FzdFJlY2VpdmVyIGFyZzAsIEludGVudEZpbHRlciBhcmcxLAotICAgICAgICAgICAgU3RyaW5nIGFyZzIsIEhhbmRsZXIgYXJnMykgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbnRlbnQgcmVnaXN0ZXJSZWNlaXZlckFzVXNlcihCcm9hZGNhc3RSZWNlaXZlciBhcmcwLCBVc2VySGFuZGxlIGFyZzBwNSwKLSAgICAgICAgICAgIEludGVudEZpbHRlciBhcmcxLCBTdHJpbmcgYXJnMiwgSGFuZGxlciBhcmczKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlU3RpY2t5QnJvYWRjYXN0KEludGVudCBhcmcwKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJldm9rZVVyaVBlcm1pc3Npb24oVXJpIGFyZzAsIGludCBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRCcm9hZGNhc3QoSW50ZW50IGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZEJyb2FkY2FzdChJbnRlbnQgYXJnMCwgU3RyaW5nIGFyZzEpIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZEJyb2FkY2FzdChJbnRlbnQgaW50ZW50LCBTdHJpbmcgcmVjZWl2ZXJQZXJtaXNzaW9uLCBpbnQgYXBwT3ApIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRPcmRlcmVkQnJvYWRjYXN0KEludGVudCBhcmcwLCBTdHJpbmcgYXJnMSkgewotICAgICAgICAvLyBwYXNzCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZW5kT3JkZXJlZEJyb2FkY2FzdChJbnRlbnQgYXJnMCwgU3RyaW5nIGFyZzEsCi0gICAgICAgICAgICBCcm9hZGNhc3RSZWNlaXZlciBhcmcyLCBIYW5kbGVyIGFyZzMsIGludCBhcmc0LCBTdHJpbmcgYXJnNSwKLSAgICAgICAgICAgIEJ1bmRsZSBhcmc2KSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRPcmRlcmVkQnJvYWRjYXN0KEludGVudCBpbnRlbnQsIFN0cmluZyByZWNlaXZlclBlcm1pc3Npb24sIGludCBhcHBPcCwKLSAgICAgICAgICAgIEJyb2FkY2FzdFJlY2VpdmVyIHJlc3VsdFJlY2VpdmVyLCBIYW5kbGVyIHNjaGVkdWxlciwgaW50IGluaXRpYWxDb2RlLAotICAgICAgICAgICAgU3RyaW5nIGluaXRpYWxEYXRhLCBCdW5kbGUgaW5pdGlhbEV4dHJhcykgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZEJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LCBVc2VySGFuZGxlIHVzZXIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRCcm9hZGNhc3RBc1VzZXIoSW50ZW50IGludGVudCwgVXNlckhhbmRsZSB1c2VyLAotICAgICAgICAgICAgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbikgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZE9yZGVyZWRCcm9hZGNhc3RBc1VzZXIoSW50ZW50IGludGVudCwgVXNlckhhbmRsZSB1c2VyLAotICAgICAgICAgICAgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbiwgQnJvYWRjYXN0UmVjZWl2ZXIgcmVzdWx0UmVjZWl2ZXIsIEhhbmRsZXIgc2NoZWR1bGVyLAotICAgICAgICAgICAgaW50IGluaXRpYWxDb2RlLCBTdHJpbmcgaW5pdGlhbERhdGEsIEJ1bmRsZSBpbml0aWFsRXh0cmFzKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZW5kU3RpY2t5QnJvYWRjYXN0KEludGVudCBhcmcwKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRTdGlja3lPcmRlcmVkQnJvYWRjYXN0KEludGVudCBpbnRlbnQsCi0gICAgICAgICAgICBCcm9hZGNhc3RSZWNlaXZlciByZXN1bHRSZWNlaXZlciwgSGFuZGxlciBzY2hlZHVsZXIsIGludCBpbml0aWFsQ29kZSwgU3RyaW5nIGluaXRpYWxEYXRhLAotICAgICAgICAgICBCdW5kbGUgaW5pdGlhbEV4dHJhcykgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LCBVc2VySGFuZGxlIHVzZXIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRTdGlja3lPcmRlcmVkQnJvYWRjYXN0QXNVc2VyKEludGVudCBpbnRlbnQsCi0gICAgICAgICAgICBVc2VySGFuZGxlIHVzZXIsIEJyb2FkY2FzdFJlY2VpdmVyIHJlc3VsdFJlY2VpdmVyLAotICAgICAgICAgICAgSGFuZGxlciBzY2hlZHVsZXIsIGludCBpbml0aWFsQ29kZSwgU3RyaW5nIGluaXRpYWxEYXRhLAotICAgICAgICAgICAgQnVuZGxlIGluaXRpYWxFeHRyYXMpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVN0aWNreUJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LCBVc2VySGFuZGxlIHVzZXIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFRoZW1lKGludCBhcmcwKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFdhbGxwYXBlcihCaXRtYXAgYXJnMCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0V2FsbHBhcGVyKElucHV0U3RyZWFtIGFyZzApIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHkoSW50ZW50IGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHkoSW50ZW50IGFyZzAsIEJ1bmRsZSBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdGFydEludGVudFNlbmRlcihJbnRlbnRTZW5kZXIgaW50ZW50LAotICAgICAgICAgICAgSW50ZW50IGZpbGxJbkludGVudCwgaW50IGZsYWdzTWFzaywgaW50IGZsYWdzVmFsdWVzLCBpbnQgZXh0cmFGbGFncykKLSAgICAgICAgICAgIHRocm93cyBJbnRlbnRTZW5kZXIuU2VuZEludGVudEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdGFydEludGVudFNlbmRlcihJbnRlbnRTZW5kZXIgaW50ZW50LAotICAgICAgICAgICAgSW50ZW50IGZpbGxJbkludGVudCwgaW50IGZsYWdzTWFzaywgaW50IGZsYWdzVmFsdWVzLCBpbnQgZXh0cmFGbGFncywKLSAgICAgICAgICAgIEJ1bmRsZSBvcHRpb25zKSB0aHJvd3MgSW50ZW50U2VuZGVyLlNlbmRJbnRlbnRFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnRJbnN0cnVtZW50YXRpb24oQ29tcG9uZW50TmFtZSBhcmcwLCBTdHJpbmcgYXJnMSwKLSAgICAgICAgICAgIEJ1bmRsZSBhcmcyKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb21wb25lbnROYW1lIHN0YXJ0U2VydmljZShJbnRlbnQgYXJnMCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHN0b3BTZXJ2aWNlKEludGVudCBhcmcwKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb21wb25lbnROYW1lIHN0YXJ0U2VydmljZUFzVXNlcihJbnRlbnQgYXJnMCwgVXNlckhhbmRsZSBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc3RvcFNlcnZpY2VBc1VzZXIoSW50ZW50IGFyZzAsIFVzZXJIYW5kbGUgYXJnMSkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1bmJpbmRTZXJ2aWNlKFNlcnZpY2VDb25uZWN0aW9uIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdW5yZWdpc3RlclJlY2VpdmVyKEJyb2FkY2FzdFJlY2VpdmVyIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQgZ2V0QXBwbGljYXRpb25Db250ZXh0KCkgewotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXRpZXMoSW50ZW50W10gYXJnMCkgewotICAgICAgICAvLyBwYXNzCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXRpZXMoSW50ZW50W10gYXJnMCwgQnVuZGxlIGFyZzEpIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNSZXN0cmljdGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGUgZ2V0T2JiRGlyKCkgewotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwgIk9CQiBub3Qgc3VwcG9ydGVkIiwgbnVsbCk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEaXNwbGF5QWRqdXN0bWVudHMgZ2V0RGlzcGxheUFkanVzdG1lbnRzKGludCBkaXNwbGF5SWQpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gMDsgLy8gbm90IHVzZWQKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZVtdIGdldEV4dGVybmFsRmlsZXNEaXJzKFN0cmluZyB0eXBlKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG5ldyBGaWxlWzBdOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWxlW10gZ2V0T2JiRGlycygpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbmV3IEZpbGVbMF07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGVbXSBnZXRFeHRlcm5hbENhY2hlRGlycygpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbmV3IEZpbGVbMF07Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZUlJbnB1dE1ldGhvZE1hbmFnZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VJSW5wdXRNZXRob2RNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZjVlZDUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZUlJbnB1dE1ldGhvZE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQ7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3LklJbnB1dENvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5JSW5wdXRNZXRob2RDbGllbnQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5JSW5wdXRNZXRob2RNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcuSW5wdXRCaW5kUmVzdWx0OwotCi1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuUmVzdWx0UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlN1Z2dlc3Rpb25TcGFuOwotaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5FZGl0b3JJbmZvOwotaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZEluZm87Ci1pbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEJhc2ljIGltcGxlbWVudGF0aW9uIG9mIElJbnB1dE1ldGhvZE1hbmFnZXIgdGhhdCBkb2VzIG5vdGhpbmcuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQnJpZGdlSUlucHV0TWV0aG9kTWFuYWdlciBpbXBsZW1lbnRzIElJbnB1dE1ldGhvZE1hbmFnZXIgewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkQ2xpZW50KElJbnB1dE1ldGhvZENsaWVudCBhcmcwLCBJSW5wdXRDb250ZXh0IGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMykKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBmaW5pc2hJbnB1dChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbnB1dE1ldGhvZFN1YnR5cGUgZ2V0Q3VycmVudElucHV0TWV0aG9kU3VidHlwZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PElucHV0TWV0aG9kSW5mbz4gZ2V0RW5hYmxlZElucHV0TWV0aG9kTGlzdCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4gZ2V0RW5hYmxlZElucHV0TWV0aG9kU3VidHlwZUxpc3QoU3RyaW5nIGFyZzAsCi0gICAgICAgICAgICBib29sZWFuIGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PElucHV0TWV0aG9kSW5mbz4gZ2V0SW5wdXRNZXRob2RMaXN0KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElucHV0TWV0aG9kU3VidHlwZSBnZXRMYXN0SW5wdXRNZXRob2RTdWJ0eXBlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3QgZ2V0U2hvcnRjdXRJbnB1dE1ldGhvZHNBbmRTdWJ0eXBlcygpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGhpZGVNeVNvZnRJbnB1dChJQmluZGVyIGFyZzAsIGludCBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaGlkZVNvZnRJbnB1dChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCwgaW50IGFyZzEsIFJlc3VsdFJlY2VpdmVyIGFyZzIpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gbm90aWZ5U3VnZ2VzdGlvblBpY2tlZChTdWdnZXN0aW9uU3BhbiBhcmcwLCBTdHJpbmcgYXJnMSwgaW50IGFyZzIpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJTdWdnZXN0aW9uU3BhbnNGb3JOb3RpZmljYXRpb24oU3VnZ2VzdGlvblNwYW5bXSBhcmcwKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNsaWVudChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFkZGl0aW9uYWxJbnB1dE1ldGhvZFN1YnR5cGVzKFN0cmluZyBhcmcwLCBJbnB1dE1ldGhvZFN1YnR5cGVbXSBhcmcxKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRDdXJyZW50SW5wdXRNZXRob2RTdWJ0eXBlKElucHV0TWV0aG9kU3VidHlwZSBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0SW1lV2luZG93U3RhdHVzKElCaW5kZXIgYXJnMCwgaW50IGFyZzEsIGludCBhcmcyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0SW5wdXRNZXRob2QoSUJpbmRlciBhcmcwLCBTdHJpbmcgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldElucHV0TWV0aG9kQW5kU3VidHlwZShJQmluZGVyIGFyZzAsIFN0cmluZyBhcmcxLCBJbnB1dE1ldGhvZFN1YnR5cGUgYXJnMikKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRJbnB1dE1ldGhvZEVuYWJsZWQoU3RyaW5nIGFyZzAsIGJvb2xlYW4gYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNob3dJbnB1dE1ldGhvZEFuZFN1YnR5cGVFbmFibGVyRnJvbUNsaWVudChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCwgU3RyaW5nIGFyZzEpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2hvd0lucHV0TWV0aG9kUGlja2VyRnJvbUNsaWVudChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNob3dNeVNvZnRJbnB1dChJQmluZGVyIGFyZzAsIGludCBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc2hvd1NvZnRJbnB1dChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCwgaW50IGFyZzEsIFJlc3VsdFJlY2VpdmVyIGFyZzIpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElucHV0QmluZFJlc3VsdCBzdGFydElucHV0KElJbnB1dE1ldGhvZENsaWVudCBjbGllbnQsIElJbnB1dENvbnRleHQgaW5wdXRDb250ZXh0LAotICAgICAgICAgICAgRWRpdG9ySW5mbyBhdHRyaWJ1dGUsIGludCBjb250cm9sRmxhZ3MpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHN3aXRjaFRvTGFzdElucHV0TWV0aG9kKElCaW5kZXIgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBzd2l0Y2hUb05leHRJbnB1dE1ldGhvZChJQmluZGVyIGFyZzAsIGJvb2xlYW4gYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBzaG91bGRPZmZlclN3aXRjaGluZ1RvTmV4dElucHV0TWV0aG9kKElCaW5kZXIgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVN0YXR1c0ljb24oSUJpbmRlciBhcmcwLCBTdHJpbmcgYXJnMSwgaW50IGFyZzIpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSW5wdXRCaW5kUmVzdWx0IHdpbmRvd0dhaW5lZEZvY3VzKElJbnB1dE1ldGhvZENsaWVudCBjbGllbnQsIElCaW5kZXIgd2luZG93VG9rZW4sCi0gICAgICAgICAgICBpbnQgY29udHJvbEZsYWdzLCBpbnQgc29mdElucHV0TW9kZSwgaW50IHdpbmRvd0ZsYWdzLCBFZGl0b3JJbmZvIGF0dHJpYnV0ZSwKLSAgICAgICAgICAgIElJbnB1dENvbnRleHQgaW5wdXRDb250ZXh0KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSUJpbmRlciBhc0JpbmRlcigpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlTGF5b3V0UGFyYW1zTWFwQXR0cmlidXRlcy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZUxheW91dFBhcmFtc01hcEF0dHJpYnV0ZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU5MTJlNy4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlTGF5b3V0UGFyYW1zTWFwQXR0cmlidXRlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlQ29uc3RhbnRzOwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBBdHRyaWJ1dGVTZXR9IGludGVyZmFjZSBvbiB0b3Agb2YgYSBtYXAgb2YgYXR0cmlidXRlIGluIHRoZSBmb3JtCi0gKiBvZiAobmFtZSwgdmFsdWUpLgotICoKLSAqIFRoaXMgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIG9ubHkgZnJvbSB7QGxpbmsgQnJpZGdlQ29udGV4dCNvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKEF0dHJpYnV0ZVNldCwgaW50W10sIGludCwgaW50KX0KLSAqIGluIHRoZSBjYXNlIG9mIExheW91dFBhcmFtcyBhbmQgdGhlcmVmb3JlIGlzbid0IGEgZnVsbCBpbXBsZW1lbnRhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEJyaWRnZUxheW91dFBhcmFtc01hcEF0dHJpYnV0ZXMgaW1wbGVtZW50cyBBdHRyaWJ1dGVTZXQgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IG1BdHRyaWJ1dGVzOwotCi0gICAgcHVibGljIEJyaWRnZUxheW91dFBhcmFtc01hcEF0dHJpYnV0ZXMoTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVzKSB7Ci0gICAgICAgIG1BdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldEF0dHJpYnV0ZVZhbHVlKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIGlmIChCcmlkZ2VDb25zdGFudHMuTlNfUkVTT1VSQ0VTLmVxdWFscyhuYW1lc3BhY2UpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUF0dHJpYnV0ZXMuZ2V0KG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLy8gLS0tLSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIG5vdCBjYWxsZWQgZnJvbQotICAgIC8vIEJyaWRnZUNvbnRleHQjb2J0YWluU3R5bGVkQXR0cmlidXRlcyhBdHRyaWJ1dGVTZXQsIGludFtdLCBpbnQsIGludCkKLSAgICAvLyBTaG91bGQgdGhleSBldmVyIGJlIGNhbGxlZCwgd2UnbGwganVzdCBpbXBsZW1lbnQgdGhlbSBvbiBhIG5lZWQgYmFzaXMuCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZUNvdW50KCkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldEF0dHJpYnV0ZU5hbWUoaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWUoaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9zaXRpb25EZXNjcmlwdGlvbigpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVOYW1lUmVzb3VyY2UoaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlTGlzdFZhbHVlKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBhdHRyaWJ1dGUsCi0gICAgICAgICAgICBTdHJpbmdbXSBvcHRpb25zLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGdldEF0dHJpYnV0ZUJvb2xlYW5WYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLAotICAgICAgICAgICAgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVSZXNvdXJjZVZhbHVlKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBhdHRyaWJ1dGUsCi0gICAgICAgICAgICBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlSW50VmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwKLSAgICAgICAgICAgIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVVbnNpZ25lZEludFZhbHVlKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBhdHRyaWJ1dGUsCi0gICAgICAgICAgICBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXRBdHRyaWJ1dGVGbG9hdFZhbHVlKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBhdHRyaWJ1dGUsCi0gICAgICAgICAgICBmbG9hdCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVMaXN0VmFsdWUoaW50IGluZGV4LAotICAgICAgICAgICAgU3RyaW5nW10gb3B0aW9ucywgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdHRyaWJ1dGVCb29sZWFuVmFsdWUoaW50IGluZGV4LCBib29sZWFuIGRlZmF1bHRWYWx1ZSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZVJlc291cmNlVmFsdWUoaW50IGluZGV4LCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlSW50VmFsdWUoaW50IGluZGV4LCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlVW5zaWduZWRJbnRWYWx1ZShpbnQgaW5kZXgsIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldEF0dHJpYnV0ZUZsb2F0VmFsdWUoaW50IGluZGV4LCBmbG9hdCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRJZEF0dHJpYnV0ZSgpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRDbGFzc0F0dHJpYnV0ZSgpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRJZEF0dHJpYnV0ZVJlc291cmNlVmFsdWUoaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFN0eWxlQXR0cmlidXRlKCkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlUG93ZXJNYW5hZ2VyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlUG93ZXJNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MTMzN2MuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVBvd2VyTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZDsKLQotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklQb3dlck1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5Xb3JrU291cmNlOwotCi0vKioKLSAqIEZha2UgaW1wbGVtZW50YXRpb24gb2YgSVBvd2VyTWFuYWdlci4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBCcmlkZ2VQb3dlck1hbmFnZXIgaW1wbGVtZW50cyBJUG93ZXJNYW5hZ2VyIHsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU2NyZWVuT24oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgYXNCaW5kZXIoKSB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWNxdWlyZVdha2VMb2NrKElCaW5kZXIgYXJnMCwgaW50IGFyZzEsIFN0cmluZyBhcmcyLCBTdHJpbmcgYXJnMl81LCBXb3JrU291cmNlIGFyZzMpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGFjcXVpcmVXYWtlTG9ja1dpdGhVaWQoSUJpbmRlciBhcmcwLCBpbnQgYXJnMSwgU3RyaW5nIGFyZzIsIFN0cmluZyBhcmcyXzUsIGludCBhcmczKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjcmFzaChTdHJpbmcgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBnb1RvU2xlZXAobG9uZyBhcmcwLCBpbnQgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBuYXAobG9uZyBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlYm9vdChib29sZWFuIGNvbmZpcm0sIFN0cmluZyByZWFzb24sIGJvb2xlYW4gd2FpdCkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2h1dGRvd24oYm9vbGVhbiBjb25maXJtLCBib29sZWFuIHdhaXQpIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VXYWtlTG9jayhJQmluZGVyIGFyZzAsIGludCBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVdha2VMb2NrVWlkcyhJQmluZGVyIGFyZzAsIGludFtdIGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0QXR0ZW50aW9uTGlnaHQoYm9vbGVhbiBhcmcwLCBpbnQgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRUZW1wb3JhcnlTY3JlZW5BdXRvQnJpZ2h0bmVzc0FkanVzdG1lbnRTZXR0aW5nT3ZlcnJpZGUoZmxvYXQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRUZW1wb3JhcnlTY3JlZW5CcmlnaHRuZXNzU2V0dGluZ092ZXJyaWRlKGludCBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldE1heGltdW1TY3JlZW5PZmZUaW1lb3V0RnJvbURldmljZUFkbWluKGludCBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFN0YXlPblNldHRpbmcoaW50IGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdXBkYXRlV2FrZUxvY2tXb3JrU291cmNlKElCaW5kZXIgYXJnMCwgV29ya1NvdXJjZSBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzV2FrZUxvY2tMZXZlbFN1cHBvcnRlZChpbnQgbGV2ZWwpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVzZXJBY3Rpdml0eShsb25nIHRpbWUsIGludCBldmVudCwgaW50IGZsYWdzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdha2VVcChsb25nIHRpbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVdpbmRvdy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVdpbmRvdy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjU3NmQyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VXaW5kb3cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQ7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudmlldy5EcmFnRXZlbnQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3c7Ci0KLS8qKgotICogSW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIElXaW5kb3d9IHRvIHBhc3MgdG8gdGhlIEF0dGFjaEluZm8uCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBCcmlkZ2VXaW5kb3cgaW1wbGVtZW50cyBJV2luZG93IHsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoQXBwVmlzaWJpbGl0eShib29sZWFuIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzcGF0Y2hHZXROZXdTdXJmYWNlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBleGVjdXRlQ29tbWFuZChTdHJpbmcgYXJnMCwgU3RyaW5nIGFyZzEsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIGFyZzIpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlc2l6ZWQoUmVjdCBhcmcxLCBSZWN0IGFyZzFwNSwgUmVjdCBhcmcyLCBSZWN0IGFyZzMsCi0gICAgICAgICAgICBib29sZWFuIGFyZzQsIENvbmZpZ3VyYXRpb24gYXJnNSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBtb3ZlZChpbnQgYXJnMCwgaW50IGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzcGF0Y2hTY3JlZW5TdGF0ZShib29sZWFuIG9uKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sZWFuIGFyZzAsIGJvb2xlYW4gYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaFdhbGxwYXBlck9mZnNldHMoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeFN0ZXAsIGZsb2F0IHlTdGVwLAotICAgICAgICAgICAgYm9vbGVhbiBzeW5jKSB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaFdhbGxwYXBlckNvbW1hbmQoU3RyaW5nIGFjdGlvbiwgaW50IHgsIGludCB5LAotICAgICAgICAgICAgaW50IHosIEJ1bmRsZSBleHRyYXMsIGJvb2xlYW4gc3luYykgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xvc2VTeXN0ZW1EaWFsb2dzKFN0cmluZyByZWFzb24pIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoRHJhZ0V2ZW50KERyYWdFdmVudCBldmVudCkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzcGF0Y2hTeXN0ZW1VaVZpc2liaWxpdHlDaGFuZ2VkKGludCBzZXEsIGludCBnbG9iYWxVaSwKLSAgICAgICAgICAgIGludCBsb2NhbFZhbHVlLCBpbnQgbG9jYWxDaGFuZ2VzKSB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBkb25lQW5pbWF0aW5nKCkgewotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJQmluZGVyIGFzQmluZGVyKCkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VXaW5kb3dTZXNzaW9uLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlV2luZG93U2Vzc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWU2ODc4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VXaW5kb3dTZXNzaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNsaXBEYXRhOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWdpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudmlldy5JV2luZG93OwotaW1wb3J0IGFuZHJvaWQudmlldy5JV2luZG93SWQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dTZXNzaW9uOwotaW1wb3J0IGFuZHJvaWQudmlldy5JbnB1dENoYW5uZWw7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtczsKLQotLyoqCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgSVdpbmRvd1Nlc3Npb259IHNvIHRoYXQgbVNlc3Npb24gaXMgbm90IG51bGwgaW4KLSAqIHRoZSB7QGxpbmsgU3VyZmFjZVZpZXd9LgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQnJpZGdlV2luZG93U2Vzc2lvbiBpbXBsZW1lbnRzIElXaW5kb3dTZXNzaW9uIHsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgYWRkKElXaW5kb3cgYXJnMCwgaW50IHNlcSwgTGF5b3V0UGFyYW1zIGFyZzEsIGludCBhcmcyLCBSZWN0IGFyZzMsCi0gICAgICAgICAgICBJbnB1dENoYW5uZWwgb3V0SW5wdXRjaGFubmVsKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBhZGRUb0Rpc3BsYXkoSVdpbmRvdyBhcmcwLCBpbnQgc2VxLCBMYXlvdXRQYXJhbXMgYXJnMSwgaW50IGFyZzIsIGludCBkaXNwbGF5SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjdCBhcmczLCBJbnB1dENoYW5uZWwgb3V0SW5wdXRjaGFubmVsKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBhZGRXaXRob3V0SW5wdXRDaGFubmVsKElXaW5kb3cgYXJnMCwgaW50IHNlcSwgTGF5b3V0UGFyYW1zIGFyZzEsIGludCBhcmcyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWN0IGFyZzMpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGFkZFRvRGlzcGxheVdpdGhvdXRJbnB1dENoYW5uZWwoSVdpbmRvdyBhcmcwLCBpbnQgc2VxLCBMYXlvdXRQYXJhbXMgYXJnMSwgaW50IGFyZzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXNwbGF5SWQsIFJlY3QgYXJnMykKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGZpbmlzaERyYXdpbmcoSVdpbmRvdyBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGdldEluVG91Y2hNb2RlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHBlcmZvcm1IYXB0aWNGZWVkYmFjayhJV2luZG93IHdpbmRvdywgaW50IGVmZmVjdElkLCBib29sZWFuIGFsd2F5cykgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCByZWxheW91dChJV2luZG93IGFyZzAsIGludCBzZXEsIExheW91dFBhcmFtcyBhcmcxLCBpbnQgYXJnMiwgaW50IGFyZzMsIGludCBhcmc0LAotICAgICAgICAgICAgaW50IGFyZzRfNSwgUmVjdCBhcmc1WiwgUmVjdCBhcmc1LCBSZWN0IGFyZzYsIFJlY3QgYXJnNywgQ29uZmlndXJhdGlvbiBhcmc3YiwKLSAgICAgICAgICAgIFN1cmZhY2UgYXJnOCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcGVyZm9ybURlZmVycmVkRGVzdHJveShJV2luZG93IHdpbmRvdykgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gb3V0T2ZNZW1vcnkoSVdpbmRvdyB3aW5kb3cpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0RGlzcGxheUZyYW1lKElXaW5kb3cgd2luZG93LCBSZWN0IG91dERpc3BsYXlGcmFtZSkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKElXaW5kb3cgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRJblRvdWNoTW9kZShib29sZWFuIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VHJhbnNwYXJlbnRSZWdpb24oSVdpbmRvdyBhcmcwLCBSZWdpb24gYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRJbnNldHMoSVdpbmRvdyB3aW5kb3csIGludCB0b3VjaGFibGUsIFJlY3QgY29udGVudEluc2V0cywKLSAgICAgICAgICAgIFJlY3QgdmlzaWJsZUluc2V0cywgUmVnaW9uIHRvdWNoYWJsZVJlZ2lvbikgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgcHJlcGFyZURyYWcoSVdpbmRvdyB3aW5kb3csIGludCBmbGFncywKLSAgICAgICAgICAgIGludCB0aHVtYm5haWxXaWR0aCwgaW50IHRodW1ibmFpbEhlaWdodCwgU3VyZmFjZSBvdXRTdXJmYWNlKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRHJhZyhJV2luZG93IHdpbmRvdywgSUJpbmRlciBkcmFnVG9rZW4sCi0gICAgICAgICAgICBmbG9hdCB0b3VjaFgsIGZsb2F0IHRvdWNoWSwgZmxvYXQgdGh1bWJDZW50ZXJYLCBmbG9hdCB0aHVtYkNlbnRlclksCi0gICAgICAgICAgICBDbGlwRGF0YSBkYXRhKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVwb3J0RHJvcFJlc3VsdChJV2luZG93IHdpbmRvdywgYm9vbGVhbiBjb25zdW1lZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRyYWdSZWNpcGllbnRFbnRlcmVkKElXaW5kb3cgd2luZG93KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZHJhZ1JlY2lwaWVudEV4aXRlZChJV2luZG93IHdpbmRvdykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFdhbGxwYXBlclBvc2l0aW9uKElCaW5kZXIgd2luZG93LCBmbG9hdCB4LCBmbG9hdCB5LAotICAgICAgICBmbG9hdCB4U3RlcCwgZmxvYXQgeVN0ZXApIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdhbGxwYXBlck9mZnNldHNDb21wbGV0ZShJQmluZGVyIHdpbmRvdykgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1bmRsZSBzZW5kV2FsbHBhcGVyQ29tbWFuZChJQmluZGVyIHdpbmRvdywgU3RyaW5nIGFjdGlvbiwgaW50IHgsIGludCB5LAotICAgICAgICAgICAgaW50IHosIEJ1bmRsZSBleHRyYXMsIGJvb2xlYW4gc3luYykgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdhbGxwYXBlckNvbW1hbmRDb21wbGV0ZShJQmluZGVyIHdpbmRvdywgQnVuZGxlIHJlc3VsdCkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VW5pdmVyc2VUcmFuc2Zvcm0oSUJpbmRlciB3aW5kb3csIGZsb2F0IGFscGhhLCBmbG9hdCBvZmZ4LCBmbG9hdCBvZmZ5LAotICAgICAgICAgICAgZmxvYXQgZHNkeCwgZmxvYXQgZHRkeCwgZmxvYXQgZHNkeSwgZmxvYXQgZHRkeSkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgYXNCaW5kZXIoKSB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25SZWN0YW5nbGVPblNjcmVlblJlcXVlc3RlZChJQmluZGVyIHdpbmRvdywgUmVjdCByZWN0YW5nbGUsIGJvb2xlYW4gaW1tZWRpYXRlKSB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSVdpbmRvd0lkIGdldFdpbmRvd0lkKElCaW5kZXIgd2luZG93KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlWG1sQmxvY2tQYXJzZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VYbWxCbG9ja1BhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzg3MTJlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VYbWxCbG9ja1BhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZDsKLQotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklMYXlvdXRQdWxsUGFyc2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5QYXJzZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5CcmlkZ2VYbWxQdWxsQXR0cmlidXRlczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotLyoqCi0gKiB7QGxpbmsgQnJpZGdlWG1sQmxvY2tQYXJzZXJ9IHJlaW1wbGVtZW50cyBtb3N0IG9mIGFuZHJvaWQueG1sLlhtbEJsb2NrLlBhcnNlci4KLSAqIEl0IGRlbGVnYXRlcyB0byBib3RoIGFuIGluc3RhbmNlIG9mIHtAbGluayBYbWxQdWxsUGFyc2VyfSBhbmQgYW4gaW5zdGFuY2Ugb2YKLSAqIFhtbFB1bGxBdHRyaWJ1dGVzIChmb3IgdGhlIHtAbGluayBBdHRyaWJ1dGVTZXR9IHBhcnQpLgotICovCi1wdWJsaWMgY2xhc3MgQnJpZGdlWG1sQmxvY2tQYXJzZXIgaW1wbGVtZW50cyBYbWxSZXNvdXJjZVBhcnNlciB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFhtbFB1bGxQYXJzZXIgbVBhcnNlcjsKLSAgICBwcml2YXRlIGZpbmFsIEJyaWRnZVhtbFB1bGxBdHRyaWJ1dGVzIG1BdHRyaWI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBCcmlkZ2VDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtUGxhdGZvcm1GaWxlOwotCi0gICAgcHJpdmF0ZSBib29sZWFuIG1TdGFydGVkID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBpbnQgbUV2ZW50VHlwZSA9IFNUQVJUX0RPQ1VNRU5UOwotCi0gICAgcHJpdmF0ZSBib29sZWFuIG1Qb3BwZWQgPSB0cnVlOyAvLyBkZWZhdWx0IHRvIHRydWUgaW4gY2FzZSBpdCdzIG5vdCBwdXNoZWQuCi0KLSAgICAvKioKLSAgICAgKiBCdWlsZHMgYSB7QGxpbmsgQnJpZGdlWG1sQmxvY2tQYXJzZXJ9LgotICAgICAqIEBwYXJhbSBwYXJzZXIgVGhlIFhtbFB1bGxQYXJzZXIgdG8gZ2V0IHRoZSBjb250ZW50IGZyb20uCi0gICAgICogQHBhcmFtIGNvbnRleHQgdGhlIENvbnRleHQuCi0gICAgICogQHBhcmFtIHBsYXRmb3JtRmlsZSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGhlIGZpbGUgaXMgYSBwbGF0Zm9ybSBmaWxlIG9yIG5vdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQnJpZGdlWG1sQmxvY2tQYXJzZXIoWG1sUHVsbFBhcnNlciBwYXJzZXIsIEJyaWRnZUNvbnRleHQgY29udGV4dCwgYm9vbGVhbiBwbGF0Zm9ybUZpbGUpIHsKLSAgICAgICAgaWYgKFBhcnNlckZhY3RvcnkuTE9HX1BBUlNFUikgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDUlRFICIgKyBwYXJzZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtUGFyc2VyID0gcGFyc2VyOwotICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIG1QbGF0Zm9ybUZpbGUgPSBwbGF0Zm9ybUZpbGU7Ci0gICAgICAgIG1BdHRyaWIgPSBuZXcgQnJpZGdlWG1sUHVsbEF0dHJpYnV0ZXMocGFyc2VyLCBjb250ZXh0LCBtUGxhdGZvcm1GaWxlKTsKLQotICAgICAgICBpZiAobUNvbnRleHQgIT0gbnVsbCkgewotICAgICAgICAgICAgbUNvbnRleHQucHVzaFBhcnNlcih0aGlzKTsKLSAgICAgICAgICAgIG1Qb3BwZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBYbWxQdWxsUGFyc2VyIGdldFBhcnNlcigpIHsKLSAgICAgICAgcmV0dXJuIG1QYXJzZXI7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNQbGF0Zm9ybUZpbGUoKSB7Ci0gICAgICAgIHJldHVybiBtUGxhdGZvcm1GaWxlOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0Vmlld0Nvb2tpZSgpIHsKLSAgICAgICAgaWYgKG1QYXJzZXIgaW5zdGFuY2VvZiBJTGF5b3V0UHVsbFBhcnNlcikgewotICAgICAgICAgICAgcmV0dXJuICgoSUxheW91dFB1bGxQYXJzZXIpbVBhcnNlcikuZ2V0Vmlld0Nvb2tpZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZW5zdXJlUG9wcGVkKCkgewotICAgICAgICBpZiAobUNvbnRleHQgIT0gbnVsbCAmJiBtUG9wcGVkID09IGZhbHNlKSB7Ci0gICAgICAgICAgICBtQ29udGV4dC5wb3BQYXJzZXIoKTsKLSAgICAgICAgICAgIG1Qb3BwZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLSBYbWxSZXNvdXJjZVBhcnNlciBpbXBsZW1lbnRhdGlvbgotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0RmVhdHVyZShTdHJpbmcgbmFtZSwgYm9vbGVhbiBzdGF0ZSkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKEZFQVRVUkVfUFJPQ0VTU19OQU1FU1BBQ0VTLmVxdWFscyhuYW1lKSAmJiBzdGF0ZSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChGRUFUVVJFX1JFUE9SVF9OQU1FU1BBQ0VfQVRUUklCVVRFUy5lcXVhbHMobmFtZSkgJiYgc3RhdGUpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgZmVhdHVyZTogIiArIG5hbWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGdldEZlYXR1cmUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgaWYgKEZFQVRVUkVfUFJPQ0VTU19OQU1FU1BBQ0VTLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKEZFQVRVUkVfUkVQT1JUX05BTUVTUEFDRV9BVFRSSUJVVEVTLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oInNldFByb3BlcnR5KCkgbm90IHN1cHBvcnRlZCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHkoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0SW5wdXQoUmVhZGVyIGluKSB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7Ci0gICAgICAgIG1QYXJzZXIuc2V0SW5wdXQoaW4pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldElucHV0KElucHV0U3RyZWFtIGlucHV0U3RyZWFtLCBTdHJpbmcgaW5wdXRFbmNvZGluZykKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgbVBhcnNlci5zZXRJbnB1dChpbnB1dFN0cmVhbSwgaW5wdXRFbmNvZGluZyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGVmaW5lRW50aXR5UmVwbGFjZW1lbnRUZXh0KFN0cmluZyBlbnRpdHlOYW1lLAotICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VtZW50VGV4dCkgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiZGVmaW5lRW50aXR5UmVwbGFjZW1lbnRUZXh0KCkgbm90IHN1cHBvcnRlZCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlUHJlZml4KGludCBwb3MpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oImdldE5hbWVzcGFjZVByZWZpeCgpIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldElucHV0RW5jb2RpbmcoKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKFN0cmluZyBwcmVmaXgpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImdldE5hbWVzcGFjZSgpIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldE5hbWVzcGFjZUNvdW50KGludCBkZXB0aCkgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbigiZ2V0TmFtZXNwYWNlQ291bnQoKSBub3Qgc3VwcG9ydGVkIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkgewotICAgICAgICByZXR1cm4gIkJpbmFyeSBYTUwgZmlsZSBsaW5lICMiICsgZ2V0TGluZU51bWJlcigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVXJpKGludCBwb3MpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oImdldE5hbWVzcGFjZVVyaSgpIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldENvbHVtbk51bWJlcigpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0RGVwdGgoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyc2VyLmdldERlcHRoKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotICAgICAgICByZXR1cm4gbVBhcnNlci5nZXRUZXh0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkgewotICAgICAgICByZXR1cm4gbVBhcnNlci5nZXRMaW5lTnVtYmVyKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRFdmVudFR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBtRXZlbnRUeXBlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzV2hpdGVzcGFjZSgpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gT3JpZ2luYWwgY29tbWVudDogd2hpdGVzcGFjZSB3YXMgc3RyaXBwZWQgYnkgYWFwdC4KLSAgICAgICAgcmV0dXJuIG1QYXJzZXIuaXNXaGl0ZXNwYWNlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQcmVmaXgoKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJnZXRQcmVmaXggbm90IHN1cHBvcnRlZCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBjaGFyW10gZ2V0VGV4dENoYXJhY3RlcnMoaW50W10gaG9sZGVyRm9yU3RhcnRBbmRMZW5ndGgpIHsKLSAgICAgICAgU3RyaW5nIHR4dCA9IGdldFRleHQoKTsKLSAgICAgICAgY2hhcltdIGNoYXJzID0gbnVsbDsKLSAgICAgICAgaWYgKHR4dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBob2xkZXJGb3JTdGFydEFuZExlbmd0aFswXSA9IDA7Ci0gICAgICAgICAgICBob2xkZXJGb3JTdGFydEFuZExlbmd0aFsxXSA9IHR4dC5sZW5ndGgoKTsKLSAgICAgICAgICAgIGNoYXJzID0gbmV3IGNoYXJbdHh0Lmxlbmd0aCgpXTsKLSAgICAgICAgICAgIHR4dC5nZXRDaGFycygwLCB0eHQubGVuZ3RoKCksIGNoYXJzLCAwKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY2hhcnM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyc2VyLmdldE5hbWVzcGFjZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG1QYXJzZXIuZ2V0TmFtZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlTmFtZXNwYWNlKGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gbVBhcnNlci5nZXRBdHRyaWJ1dGVOYW1lc3BhY2UoaW5kZXgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlTmFtZShpbnQgaW5kZXgpIHsKLSAgICAgICAgcmV0dXJuIG1QYXJzZXIuZ2V0QXR0cmlidXRlTmFtZShpbmRleCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVQcmVmaXgoaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJnZXRBdHRyaWJ1dGVQcmVmaXggbm90IHN1cHBvcnRlZCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzRW1wdHlFbGVtZW50VGFnKCkgewotICAgICAgICAvLyBYWFggTmVlZCB0byBkZXRlY3QgdGhpcy4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyc2VyLmdldEF0dHJpYnV0ZUNvdW50KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVWYWx1ZShpbnQgaW5kZXgpIHsKLSAgICAgICAgcmV0dXJuIG1QYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUoaW5kZXgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVHlwZShpbnQgaW5kZXgpIHsKLSAgICAgICAgcmV0dXJuICJDREFUQSI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNBdHRyaWJ1dGVEZWZhdWx0KGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBuZXh0VG9rZW4oKSB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbmV4dCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIG1QYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobmFtZXNwYWNlLCBuYW1lKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IG5leHQoKSB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICBpZiAoIW1TdGFydGVkKSB7Ci0gICAgICAgICAgICBtU3RhcnRlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGlmIChQYXJzZXJGYWN0b3J5LkxPR19QQVJTRVIpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNUUlQgIiArIG1QYXJzZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBTVEFSVF9ET0NVTUVOVDsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBldiA9IG1QYXJzZXIubmV4dCgpOwotCi0gICAgICAgIGlmIChQYXJzZXJGYWN0b3J5LkxPR19QQVJTRVIpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTkVYVCAiICsgbVBhcnNlci50b1N0cmluZygpICsgIiAiICsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlVG9TdHJpbmcobUV2ZW50VHlwZSkgKyAiIC0+ICIgKyBldmVudFR5cGVUb1N0cmluZyhldikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV2ID09IEVORF9UQUcgJiYgbVBhcnNlci5nZXREZXB0aCgpID09IDEpIHsKLSAgICAgICAgICAgIC8vIGRvbmUgd2l0aCBwYXJzZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGNvbnRleHQgc3RhY2suCi0gICAgICAgICAgICBlbnN1cmVQb3BwZWQoKTsKLQotICAgICAgICAgICAgaWYgKFBhcnNlckZhY3RvcnkuTE9HX1BBUlNFUikgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtRXZlbnRUeXBlID0gZXY7Ci0gICAgICAgIHJldHVybiBldjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBldmVudFR5cGVUb1N0cmluZyhpbnQgZXZlbnRUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFNUQVJUX0RPQ1VNRU5UOgotICAgICAgICAgICAgICAgIHJldHVybiAiU1RBUlRfRE9DIjsKLSAgICAgICAgICAgIGNhc2UgRU5EX0RPQ1VNRU5UOgotICAgICAgICAgICAgICAgIHJldHVybiAiRU5EX0RPQyI7Ci0gICAgICAgICAgICBjYXNlIFNUQVJUX1RBRzoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlNUQVJUX1RBRyI7Ci0gICAgICAgICAgICBjYXNlIEVORF9UQUc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFTkRfVEFHIjsKLSAgICAgICAgICAgIGNhc2UgVEVYVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlRFWFQiOwotICAgICAgICAgICAgY2FzZSBDRFNFQ1Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJDRFNFQ1QiOwotICAgICAgICAgICAgY2FzZSBFTlRJVFlfUkVGOgotICAgICAgICAgICAgICAgIHJldHVybiAiRU5USVRZX1JFRiI7Ci0gICAgICAgICAgICBjYXNlIElHTk9SQUJMRV9XSElURVNQQUNFOgotICAgICAgICAgICAgICAgIHJldHVybiAiSUdOT1JBQkxFX1dISVRFU1BBQ0UiOwotICAgICAgICAgICAgY2FzZSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OOgotICAgICAgICAgICAgICAgIHJldHVybiAiUFJPQ0VTU0lOR19JTlNUUlVDVElPTiI7Ci0gICAgICAgICAgICBjYXNlIENPTU1FTlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJDT01NRU5UIjsKLSAgICAgICAgICAgIGNhc2UgRE9DREVDTDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkRPQ0RFQ0wiOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICI/Pz8/IjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZXF1aXJlKGludCB0eXBlLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbmFtZSkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHR5cGUgIT0gZ2V0RXZlbnRUeXBlKCkKLSAgICAgICAgICAgICAgICB8fCAobmFtZXNwYWNlICE9IG51bGwgJiYgIW5hbWVzcGFjZS5lcXVhbHMoZ2V0TmFtZXNwYWNlKCkpKQotICAgICAgICAgICAgICAgIHx8IChuYW1lICE9IG51bGwgJiYgIW5hbWUuZXF1YWxzKGdldE5hbWUoKSkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oImV4cGVjdGVkICIgKyBUWVBFU1t0eXBlXQotICAgICAgICAgICAgICAgICAgICArIGdldFBvc2l0aW9uRGVzY3JpcHRpb24oKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBuZXh0VGV4dCgpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChnZXRFdmVudFR5cGUoKSAhPSBTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uKGdldFBvc2l0aW9uRGVzY3JpcHRpb24oKQotICAgICAgICAgICAgICAgICAgICArICI6IHBhcnNlciBtdXN0IGJlIG9uIFNUQVJUX1RBRyB0byByZWFkIG5leHQgdGV4dCIsIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgIG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIGludCBldmVudFR5cGUgPSBuZXh0KCk7Ci0gICAgICAgIGlmIChldmVudFR5cGUgPT0gVEVYVCkgewotICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGdldFRleHQoKTsKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9IG5leHQoKTsKLSAgICAgICAgICAgIGlmIChldmVudFR5cGUgIT0gRU5EX1RBRykgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UG9zaXRpb25EZXNjcmlwdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIjogZXZlbnQgVEVYVCBpdCBtdXN0IGJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IEVORF9UQUciLAotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywgbnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBFTkRfVEFHKSB7Ci0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbihnZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgKyAiOiBwYXJzZXIgbXVzdCBiZSBvbiBTVEFSVF9UQUcgb3IgVEVYVCB0byByZWFkIHRleHQiLAotICAgICAgICAgICAgICAgICAgICB0aGlzLCBudWxsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgbmV4dFRhZygpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGludCBldmVudFR5cGUgPSBuZXh0KCk7Ci0gICAgICAgIGlmIChldmVudFR5cGUgPT0gVEVYVCAmJiBpc1doaXRlc3BhY2UoKSkgeyAvLyBza2lwIHdoaXRlc3BhY2UKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9IG5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnRUeXBlICE9IFNUQVJUX1RBRyAmJiBldmVudFR5cGUgIT0gRU5EX1RBRykgewotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oZ2V0UG9zaXRpb25EZXNjcmlwdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICsgIjogZXhwZWN0ZWQgc3RhcnQgb3IgZW5kIHRhZyIsIHRoaXMsIG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBldmVudFR5cGU7Ci0gICAgfQotCi0gICAgLy8gQXR0cmlidXRlU2V0IGltcGxlbWVudGF0aW9uCi0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0QXR0cmlidXRlQm9vbGVhblZhbHVlKGludCBpbmRleCwgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlQm9vbGVhblZhbHVlKGluZGV4LCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGdldEF0dHJpYnV0ZUJvb2xlYW5WYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLAotICAgICAgICAgICAgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlQm9vbGVhblZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXRBdHRyaWJ1dGVGbG9hdFZhbHVlKGludCBpbmRleCwgZmxvYXQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldEF0dHJpYnV0ZUZsb2F0VmFsdWUoaW5kZXgsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldEF0dHJpYnV0ZUZsb2F0VmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwgZmxvYXQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldEF0dHJpYnV0ZUZsb2F0VmFsdWUobmFtZXNwYWNlLCBhdHRyaWJ1dGUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVJbnRWYWx1ZShpbnQgaW5kZXgsIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlSW50VmFsdWUoaW5kZXgsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVJbnRWYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldEF0dHJpYnV0ZUludFZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlTGlzdFZhbHVlKGludCBpbmRleCwgU3RyaW5nW10gb3B0aW9ucywgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICByZXR1cm4gbUF0dHJpYi5nZXRBdHRyaWJ1dGVMaXN0VmFsdWUoaW5kZXgsIG9wdGlvbnMsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVMaXN0VmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwKLSAgICAgICAgICAgIFN0cmluZ1tdIG9wdGlvbnMsIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlTGlzdFZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlLCBvcHRpb25zLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlTmFtZVJlc291cmNlKGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gbUF0dHJpYi5nZXRBdHRyaWJ1dGVOYW1lUmVzb3VyY2UoaW5kZXgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlUmVzb3VyY2VWYWx1ZShpbnQgaW5kZXgsIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlUmVzb3VyY2VWYWx1ZShpbmRleCwgZGVmYXVsdFZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZVJlc291cmNlVmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICByZXR1cm4gbUF0dHJpYi5nZXRBdHRyaWJ1dGVSZXNvdXJjZVZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlVW5zaWduZWRJbnRWYWx1ZShpbnQgaW5kZXgsIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlVW5zaWduZWRJbnRWYWx1ZShpbmRleCwgZGVmYXVsdFZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZVVuc2lnbmVkSW50VmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICByZXR1cm4gbUF0dHJpYi5nZXRBdHRyaWJ1dGVVbnNpZ25lZEludFZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NBdHRyaWJ1dGUoKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldENsYXNzQXR0cmlidXRlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRJZEF0dHJpYnV0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0SWRBdHRyaWJ1dGUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldElkQXR0cmlidXRlUmVzb3VyY2VWYWx1ZShpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldElkQXR0cmlidXRlUmVzb3VyY2VWYWx1ZShkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0U3R5bGVBdHRyaWJ1dGUoKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldFN0eWxlQXR0cmlidXRlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlckltcGwuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNWFlOGQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQudmlldzsKLQotaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheUFkanVzdG1lbnRzOwotaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5SW5mbzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFdpbmRvd01hbmFnZXJJbXBsIGltcGxlbWVudHMgV2luZG93TWFuYWdlciB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIERpc3BsYXlNZXRyaWNzIG1NZXRyaWNzOwotICAgIHByaXZhdGUgZmluYWwgRGlzcGxheSBtRGlzcGxheTsKLQotICAgIHB1YmxpYyBXaW5kb3dNYW5hZ2VySW1wbChEaXNwbGF5TWV0cmljcyBtZXRyaWNzKSB7Ci0gICAgICAgIG1NZXRyaWNzID0gbWV0cmljczsKLQotICAgICAgICBEaXNwbGF5SW5mbyBpbmZvID0gbmV3IERpc3BsYXlJbmZvKCk7Ci0gICAgICAgIGluZm8ubG9naWNhbEhlaWdodCA9IG1NZXRyaWNzLmhlaWdodFBpeGVsczsKLSAgICAgICAgaW5mby5sb2dpY2FsV2lkdGggPSBtTWV0cmljcy53aWR0aFBpeGVsczsKLSAgICAgICAgbURpc3BsYXkgPSBuZXcgRGlzcGxheShudWxsLCBEaXNwbGF5LkRFRkFVTFRfRElTUExBWSwgaW5mbywKLSAgICAgICAgICAgICAgICBEaXNwbGF5QWRqdXN0bWVudHMuREVGQVVMVF9ESVNQTEFZX0FESlVTVE1FTlRTKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRGlzcGxheSBnZXREZWZhdWx0RGlzcGxheSgpIHsKLSAgICAgICAgcmV0dXJuIG1EaXNwbGF5OwotICAgIH0KLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkVmlldyhWaWV3IGFyZzAsIGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zIGFyZzEpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVZpZXcoVmlldyBhcmcwKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1cGRhdGVWaWV3TGF5b3V0KFZpZXcgYXJnMCwgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXMgYXJnMSkgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVWaWV3SW1tZWRpYXRlKFZpZXcgYXJnMCkgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL0N1c3RvbUJhci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL0N1c3RvbUJhci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2QwOGViNC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvQ3VzdG9tQmFyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5iYXJzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlbmRlclJlc291cmNlczsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzb3VyY2VWYWx1ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuU3R5bGVSZXNvdXJjZVZhbHVlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC5CcmlkZ2VDb250ZXh0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC5CcmlkZ2VYbWxCbG9ja1BhcnNlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUmVzb3VyY2VIZWxwZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLkRlbnNpdHk7Ci1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLkxheW91dERpcmVjdGlvbjsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkJpdG1hcERyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLS8qKgotICogQmFzZSAiYmFyIiBjbGFzcyBmb3IgdGhlIHdpbmRvdyBkZWNvciBhcm91bmQgdGhlIHRoZSBlZGl0ZWQgbGF5b3V0LgotICogVGhpcyBpcyBiYXNpY2FsbHkgYW4gaG9yaXpvbnRhbCBsYXlvdXQgdGhhdCBsb2FkcyBhIGdpdmVuIGxheW91dCBvbiBjcmVhdGlvbiAoaXQgaXMgcmVhZAotICogdGhyb3VnaCB7QGxpbmsgQ2xhc3MjZ2V0UmVzb3VyY2VBc1N0cmVhbShTdHJpbmcpfSkuCi0gKgotICogVGhlIGdpdmVuIGxheW91dCBzaG91bGQgYmUgYSBtZXJnZSBsYXlvdXQgc28gdGhhdCBhbGwgdGhlIGNoaWxkcmVuIGJlbG9uZyB0byB0aGlzIGNsYXNzIGRpcmVjdGx5LgotICoKLSAqIEl0IGFsc28gcHJvdmlkZXMgYSBmZXcgdXRpbGl0eSBtZXRob2RzIHRvIGNvbmZpZ3VyZSB0aGUgY29udGVudCBvZiB0aGUgbGF5b3V0LgotICovCi1hYnN0cmFjdCBjbGFzcyBDdXN0b21CYXIgZXh0ZW5kcyBMaW5lYXJMYXlvdXQgewotCi0gICAgcHJvdGVjdGVkIGFic3RyYWN0IFRleHRWaWV3IGdldFN0eWxlYWJsZVRleHRWaWV3KCk7Ci0KLSAgICBwcm90ZWN0ZWQgQ3VzdG9tQmFyKENvbnRleHQgY29udGV4dCwgRGVuc2l0eSBkZW5zaXR5LCBpbnQgb3JpZW50YXRpb24sIFN0cmluZyBsYXlvdXRQYXRoLAotICAgICAgICAgICAgU3RyaW5nIG5hbWUpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0gICAgICAgIHNldE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKTsKLSAgICAgICAgaWYgKG9yaWVudGF0aW9uID09IExpbmVhckxheW91dC5IT1JJWk9OVEFMKSB7Ci0gICAgICAgICAgICBzZXRHcmF2aXR5KEdyYXZpdHkuQ0VOVEVSX1ZFUlRJQ0FMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldEdyYXZpdHkoR3Jhdml0eS5DRU5URVJfSE9SSVpPTlRBTCk7Ci0gICAgICAgIH0KLQotICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IChMYXlvdXRJbmZsYXRlcikgZ2V0Q29udGV4dCgpLmdldFN5c3RlbVNlcnZpY2UoCi0gICAgICAgICAgICAgICAgQ29udGV4dC5MQVlPVVRfSU5GTEFURVJfU0VSVklDRSk7Ci0KLSAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIgPSBQYXJzZXJGYWN0b3J5LmNyZWF0ZShnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0obGF5b3V0UGF0aCksCi0gICAgICAgICAgICAgICAgbmFtZSk7Ci0KLSAgICAgICAgQnJpZGdlWG1sQmxvY2tQYXJzZXIgYnJpZGdlUGFyc2VyID0gbmV3IEJyaWRnZVhtbEJsb2NrUGFyc2VyKAotICAgICAgICAgICAgICAgIHBhcnNlciwgKEJyaWRnZUNvbnRleHQpIGNvbnRleHQsIGZhbHNlIC8qcGxhdGZvcm1GaWxlKi8pOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbmZsYXRlci5pbmZsYXRlKGJyaWRnZVBhcnNlciwgdGhpcywgdHJ1ZSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBicmlkZ2VQYXJzZXIuZW5zdXJlUG9wcGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIElucHV0U3RyZWFtIGdldEljb24oU3RyaW5nIGljb25OYW1lLCBEZW5zaXR5W10gZGVuc2l0eUluT3V0LCBMYXlvdXREaXJlY3Rpb24gZGlyZWN0aW9uLCAKLSAgICAgICAgICAgIFN0cmluZ1tdIHBhdGhPdXQsIGJvb2xlYW4gdHJ5T3RoZXJEZW5zaXRpZXMpIHsKLSAgICAgICAgLy8gY3VycmVudCBkZW5zaXR5Ci0gICAgICAgIERlbnNpdHkgZGVuc2l0eSA9IGRlbnNpdHlJbk91dFswXTsKLQotICAgICAgICAvLyBiaXRtYXAgdXJsIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MKLSAgICAgICAgaWYgKGRpcmVjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBwYXRoT3V0WzBdID0gIi9iYXJzLyIgKyBkaXJlY3Rpb24uZ2V0UmVzb3VyY2VWYWx1ZSgpICsgIi0iICsgZGVuc2l0eS5nZXRSZXNvdXJjZVZhbHVlKCkKLSAgICAgICAgICAgICAgICAgICAgKyAiLyIgKyBpY29uTmFtZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhdGhPdXRbMF0gPSAiL2JhcnMvIiArIGRlbnNpdHkuZ2V0UmVzb3VyY2VWYWx1ZSgpICsgIi8iICsgaWNvbk5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBJbnB1dFN0cmVhbSBzdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0ocGF0aE91dFswXSk7Ci0gICAgICAgIGlmIChzdHJlYW0gPT0gbnVsbCAmJiB0cnlPdGhlckRlbnNpdGllcykgewotICAgICAgICAgICAgZm9yIChEZW5zaXR5IGQgOiBEZW5zaXR5LnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGQgIT0gZGVuc2l0eSkgewotICAgICAgICAgICAgICAgICAgICBkZW5zaXR5SW5PdXRbMF0gPSBkOwotICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBnZXRJY29uKGljb25OYW1lLCBkZW5zaXR5SW5PdXQsIGRpcmVjdGlvbiwgcGF0aE91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKnRyeU90aGVyRGVuc2l0aWVzKi8pOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBjb3VsZG4ndCBmaW5kIHJlc291cmNlIHdpdGggZGlyZWN0aW9uIHF1YWxpZmllci4gdHJ5IHdpdGhvdXQuCi0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SWNvbihpY29uTmFtZSwgZGVuc2l0eUluT3V0LCBudWxsLCBwYXRoT3V0LCB0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdHJlYW07Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgbG9hZEljb24oaW50IGluZGV4LCBTdHJpbmcgaWNvbk5hbWUsIERlbnNpdHkgZGVuc2l0eSkgewotICAgICAgICBsb2FkSWNvbihpbmRleCwgaWNvbk5hbWUsIGRlbnNpdHksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBsb2FkSWNvbihpbnQgaW5kZXgsIFN0cmluZyBpY29uTmFtZSwgRGVuc2l0eSBkZW5zaXR5LCBib29sZWFuIGlzUnRsKSB7Ci0gICAgICAgIFZpZXcgY2hpbGQgPSBnZXRDaGlsZEF0KGluZGV4KTsKLSAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSW1hZ2VWaWV3KSB7Ci0gICAgICAgICAgICBJbWFnZVZpZXcgaW1hZ2VWaWV3ID0gKEltYWdlVmlldykgY2hpbGQ7Ci0KLSAgICAgICAgICAgIFN0cmluZ1tdIHBhdGhPdXQgPSBuZXcgU3RyaW5nWzFdOwotICAgICAgICAgICAgRGVuc2l0eVtdIGRlbnNpdHlJbk91dCA9IG5ldyBEZW5zaXR5W10geyBkZW5zaXR5IH07Ci0gICAgICAgICAgICBMYXlvdXREaXJlY3Rpb24gZGlyID0gaXNSdGwgPyBMYXlvdXREaXJlY3Rpb24uUlRMIDogTGF5b3V0RGlyZWN0aW9uLkxUUjsKLSAgICAgICAgICAgIElucHV0U3RyZWFtIHN0cmVhbSA9IGdldEljb24oaWNvbk5hbWUsIGRlbnNpdHlJbk91dCwgZGlyLCBwYXRoT3V0LAotICAgICAgICAgICAgICAgICAgICB0cnVlIC8qdHJ5T3RoZXJEZW5zaXRpZXMqLyk7Ci0gICAgICAgICAgICBkZW5zaXR5ID0gZGVuc2l0eUluT3V0WzBdOwotCi0gICAgICAgICAgICBpZiAoc3RyZWFtICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBsb29rIGZvciBhIGNhY2hlZCBiaXRtYXAKLSAgICAgICAgICAgICAgICBCaXRtYXAgYml0bWFwID0gQnJpZGdlLmdldENhY2hlZEJpdG1hcChwYXRoT3V0WzBdLCB0cnVlIC8qaXNGcmFtZXdvcmsqLyk7Ci0gICAgICAgICAgICAgICAgaWYgKGJpdG1hcCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgPSBCaXRtYXBfRGVsZWdhdGUuY3JlYXRlQml0bWFwKHN0cmVhbSwgZmFsc2UgLyppc011dGFibGUqLywgZGVuc2l0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2Uuc2V0Q2FjaGVkQml0bWFwKHBhdGhPdXRbMF0sIGJpdG1hcCwgdHJ1ZSAvKmlzRnJhbWV3b3JrKi8pOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYml0bWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgQml0bWFwRHJhd2FibGUgZHJhd2FibGUgPSBuZXcgQml0bWFwRHJhd2FibGUoZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCk7Ci0gICAgICAgICAgICAgICAgICAgIGltYWdlVmlldy5zZXRJbWFnZURyYXdhYmxlKGRyYXdhYmxlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBsb2FkSWNvbihpbnQgaW5kZXgsIFN0cmluZyBpY29uUmVmZXJlbmNlKSB7Ci0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGljb25SZWZlcmVuY2UpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgbG9hZEljb24oaW5kZXgsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGxvYWRJY29uQnlJZChpbnQgaWQsIFN0cmluZyBpY29uUmVmZXJlbmNlKSB7Ci0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGljb25SZWZlcmVuY2UpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgbG9hZEljb25CeUlkKGlkLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIHByb3RlY3RlZCBEcmF3YWJsZSBsb2FkSWNvbihpbnQgaW5kZXgsIFJlc291cmNlVHlwZSB0eXBlLCBTdHJpbmcgbmFtZSkgewotICAgICAgICBCcmlkZ2VDb250ZXh0IGJyaWRnZUNvbnRleHQgPSAoQnJpZGdlQ29udGV4dCkgbUNvbnRleHQ7Ci0gICAgICAgIFJlbmRlclJlc291cmNlcyByZXMgPSBicmlkZ2VDb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpOwotCi0gICAgICAgIC8vIGZpbmQgdGhlIHJlc291cmNlCi0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSByZXMuZ2V0RnJhbWV3b3JrUmVzb3VyY2UodHlwZSwgbmFtZSk7Ci0KLSAgICAgICAgLy8gcmVzb2x2ZSBpdCBpZiBuZWVkZWQKLSAgICAgICAgdmFsdWUgPSByZXMucmVzb2x2ZVJlc1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGxvYWRJY29uKGluZGV4LCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBEcmF3YWJsZSBsb2FkSWNvbihpbnQgaW5kZXgsIFJlc291cmNlVmFsdWUgdmFsdWUpIHsKLSAgICAgICAgVmlldyBjaGlsZCA9IGdldENoaWxkQXQoaW5kZXgpOwotICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJbWFnZVZpZXcpIHsKLSAgICAgICAgICAgIEltYWdlVmlldyBpbWFnZVZpZXcgPSAoSW1hZ2VWaWV3KSBjaGlsZDsKLQotICAgICAgICAgICAgcmV0dXJuIGxvYWRJY29uKGltYWdlVmlldywgdmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBEcmF3YWJsZSBsb2FkSWNvbkJ5SWQoaW50IGlkLCBSZXNvdXJjZVZhbHVlIHZhbHVlKSB7Ci0gICAgICAgIFZpZXcgY2hpbGQgPSBmaW5kVmlld0J5SWQoaWQpOwotICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJbWFnZVZpZXcpIHsKLSAgICAgICAgICAgIEltYWdlVmlldyBpbWFnZVZpZXcgPSAoSW1hZ2VWaWV3KSBjaGlsZDsKLQotICAgICAgICAgICAgcmV0dXJuIGxvYWRJY29uKGltYWdlVmlldywgdmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIERyYXdhYmxlIGxvYWRJY29uKEltYWdlVmlldyBpbWFnZVZpZXcsIFJlc291cmNlVmFsdWUgdmFsdWUpIHsKLSAgICAgICAgRHJhd2FibGUgZHJhd2FibGUgPSBSZXNvdXJjZUhlbHBlci5nZXREcmF3YWJsZSh2YWx1ZSwgKEJyaWRnZUNvbnRleHQpIG1Db250ZXh0KTsKLSAgICAgICAgaWYgKGRyYXdhYmxlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGltYWdlVmlldy5zZXRJbWFnZURyYXdhYmxlKGRyYXdhYmxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkcmF3YWJsZTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgVGV4dFZpZXcgc2V0VGV4dChpbnQgaW5kZXgsIFN0cmluZyBzdHJpbmdSZWZlcmVuY2UpIHsKLSAgICAgICAgVmlldyBjaGlsZCA9IGdldENoaWxkQXQoaW5kZXgpOwotICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBUZXh0VmlldykgewotICAgICAgICAgICAgVGV4dFZpZXcgdGV4dFZpZXcgPSAoVGV4dFZpZXcpIGNoaWxkOwotICAgICAgICAgICAgc2V0VGV4dCh0ZXh0Vmlldywgc3RyaW5nUmVmZXJlbmNlKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0VmlldzsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBUZXh0VmlldyBzZXRUZXh0QnlJZChpbnQgaWQsIFN0cmluZyBzdHJpbmdSZWZlcmVuY2UpIHsKLSAgICAgICAgVmlldyBjaGlsZCA9IGZpbmRWaWV3QnlJZChpZCk7Ci0gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRleHRWaWV3KSB7Ci0gICAgICAgICAgICBUZXh0VmlldyB0ZXh0VmlldyA9IChUZXh0VmlldykgY2hpbGQ7Ci0gICAgICAgICAgICBzZXRUZXh0KHRleHRWaWV3LCBzdHJpbmdSZWZlcmVuY2UpOwotICAgICAgICAgICAgcmV0dXJuIHRleHRWaWV3OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldFRleHQoVGV4dFZpZXcgdGV4dFZpZXcsIFN0cmluZyBzdHJpbmdSZWZlcmVuY2UpIHsKLSAgICAgICAgUmVzb3VyY2VWYWx1ZSB2YWx1ZSA9IGdldFJlc291cmNlVmFsdWUoc3RyaW5nUmVmZXJlbmNlKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRleHRWaWV3LnNldFRleHQodmFsdWUuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0ZXh0Vmlldy5zZXRUZXh0KHN0cmluZ1JlZmVyZW5jZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRTdHlsZShTdHJpbmcgdGhlbWVFbnRyeU5hbWUpIHsKLQotICAgICAgICBCcmlkZ2VDb250ZXh0IGJyaWRnZUNvbnRleHQgPSAoQnJpZGdlQ29udGV4dCkgbUNvbnRleHQ7Ci0gICAgICAgIFJlbmRlclJlc291cmNlcyByZXMgPSBicmlkZ2VDb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpOwotCi0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSByZXMuZmluZEl0ZW1JblRoZW1lKHRoZW1lRW50cnlOYW1lLCB0cnVlIC8qaXNGcmFtZXdvcmtBdHRyKi8pOwotICAgICAgICB2YWx1ZSA9IHJlcy5yZXNvbHZlUmVzVmFsdWUodmFsdWUpOwotCi0gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0eWxlUmVzb3VyY2VWYWx1ZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3R5bGVSZXNvdXJjZVZhbHVlIHN0eWxlID0gKFN0eWxlUmVzb3VyY2VWYWx1ZSkgdmFsdWU7Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBiYWNrZ3JvdW5kCi0gICAgICAgIFJlc291cmNlVmFsdWUgYmFja2dyb3VuZFZhbHVlID0gcmVzLmZpbmRJdGVtSW5TdHlsZShzdHlsZSwgImJhY2tncm91bmQiLAotICAgICAgICAgICAgICAgIHRydWUgLyppc0ZyYW1ld29ya0F0dHIqLyk7Ci0gICAgICAgIGJhY2tncm91bmRWYWx1ZSA9IHJlcy5yZXNvbHZlUmVzVmFsdWUoYmFja2dyb3VuZFZhbHVlKTsKLSAgICAgICAgaWYgKGJhY2tncm91bmRWYWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBEcmF3YWJsZSBkID0gUmVzb3VyY2VIZWxwZXIuZ2V0RHJhd2FibGUoYmFja2dyb3VuZFZhbHVlLCBicmlkZ2VDb250ZXh0KTsKLSAgICAgICAgICAgIGlmIChkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzZXRCYWNrZ3JvdW5kKGQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgVGV4dFZpZXcgdGV4dFZpZXcgPSBnZXRTdHlsZWFibGVUZXh0VmlldygpOwotICAgICAgICBpZiAodGV4dFZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gZ2V0IHRoZSB0ZXh0IHN0eWxlCi0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHRleHRTdHlsZVZhbHVlID0gcmVzLmZpbmRJdGVtSW5TdHlsZShzdHlsZSwgInRpdGxlVGV4dFN0eWxlIiwKLSAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKmlzRnJhbWV3b3JrQXR0ciovKTsKLSAgICAgICAgICAgIHRleHRTdHlsZVZhbHVlID0gcmVzLnJlc29sdmVSZXNWYWx1ZSh0ZXh0U3R5bGVWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAodGV4dFN0eWxlVmFsdWUgaW5zdGFuY2VvZiBTdHlsZVJlc291cmNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBTdHlsZVJlc291cmNlVmFsdWUgdGV4dFN0eWxlID0gKFN0eWxlUmVzb3VyY2VWYWx1ZSkgdGV4dFN0eWxlVmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHRleHRTaXplID0gcmVzLmZpbmRJdGVtSW5TdHlsZSh0ZXh0U3R5bGUsICJ0ZXh0U2l6ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qaXNGcmFtZXdvcmtBdHRyKi8pOwotICAgICAgICAgICAgICAgIHRleHRTaXplID0gcmVzLnJlc29sdmVSZXNWYWx1ZSh0ZXh0U2l6ZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dFNpemUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBUeXBlZFZhbHVlIG91dCA9IG5ldyBUeXBlZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChSZXNvdXJjZUhlbHBlci5wYXJzZUZsb2F0QXR0cmlidXRlKCJ0ZXh0U2l6ZSIsIHRleHRTaXplLmdldFZhbHVlKCksIG91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qcmVxdWlyZVVuaXQqLykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHRWaWV3LnNldFRleHRTaXplKFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX1BYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQuZ2V0RGltZW5zaW9uKGJyaWRnZUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGlzcGxheU1ldHJpY3MoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHRleHRDb2xvciA9IHJlcy5maW5kSXRlbUluU3R5bGUodGV4dFN0eWxlLCAidGV4dENvbG9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyppc0ZyYW1ld29ya0F0dHIqLyk7Ci0gICAgICAgICAgICAgICAgdGV4dENvbG9yID0gcmVzLnJlc29sdmVSZXNWYWx1ZSh0ZXh0Q29sb3IpOwotICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBDb2xvclN0YXRlTGlzdCBzdGF0ZUxpc3QgPSBSZXNvdXJjZUhlbHBlci5nZXRDb2xvclN0YXRlTGlzdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29sb3IsIGJyaWRnZUNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVMaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHRWaWV3LnNldFRleHRDb2xvcihzdGF0ZUxpc3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBSZXNvdXJjZVZhbHVlIGdldFJlc291cmNlVmFsdWUoU3RyaW5nIHJlZmVyZW5jZSkgewotICAgICAgICBCcmlkZ2VDb250ZXh0IGJyaWRnZUNvbnRleHQgPSAoQnJpZGdlQ29udGV4dCkgbUNvbnRleHQ7Ci0gICAgICAgIFJlbmRlclJlc291cmNlcyByZXMgPSBicmlkZ2VDb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpOwotCi0gICAgICAgIC8vIGZpbmQgdGhlIHJlc291cmNlCi0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSByZXMuZmluZFJlc1ZhbHVlKHJlZmVyZW5jZSwgZmFsc2UgLyppc0ZyYW1ld29yayovKTsKLQotICAgICAgICAvLyByZXNvbHZlIGl0IGlmIG5lZWRlZAotICAgICAgICByZXR1cm4gcmVzLnJlc29sdmVSZXNWYWx1ZSh2YWx1ZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL0Zha2VBY3Rpb25CYXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9GYWtlQWN0aW9uQmFyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjY0OWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL0Zha2VBY3Rpb25CYXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYmFyczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5EZW5zaXR5OwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLQotcHVibGljIGNsYXNzIEZha2VBY3Rpb25CYXIgZXh0ZW5kcyBDdXN0b21CYXIgewotCi0gICAgcHJpdmF0ZSBUZXh0VmlldyBtVGV4dFZpZXc7Ci0KLSAgICBwdWJsaWMgRmFrZUFjdGlvbkJhcihDb250ZXh0IGNvbnRleHQsIERlbnNpdHkgZGVuc2l0eSwgU3RyaW5nIGxhYmVsLCBTdHJpbmcgaWNvbikKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgZGVuc2l0eSwgTGluZWFyTGF5b3V0LkhPUklaT05UQUwsICIvYmFycy9hY3Rpb25fYmFyLnhtbCIsICJhY3Rpb25fYmFyLnhtbCIpOwotCi0gICAgICAgIC8vIENhbm5vdCBhY2Nlc3MgdGhlIGluc2lkZSBpdGVtcyB0aHJvdWdoIGlkIGJlY2F1c2Ugbm8gUi5pZCB2YWx1ZXMgaGF2ZSBiZWVuCi0gICAgICAgIC8vIGNyZWF0ZWQgZm9yIHRoZW0uCi0gICAgICAgIC8vIFdlIGRvIGtub3cgdGhlIG9yZGVyIHRob3VnaC4KLSAgICAgICAgbG9hZEljb25CeUlkKGFuZHJvaWQuUi5pZC5ob21lLCBpY29uKTsKLSAgICAgICAgbVRleHRWaWV3ID0gc2V0VGV4dCgxLCBsYWJlbCk7Ci0KLSAgICAgICAgc2V0U3R5bGUoImFjdGlvbkJhclN0eWxlIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFRleHRWaWV3IGdldFN0eWxlYWJsZVRleHRWaWV3KCkgewotICAgICAgICByZXR1cm4gbVRleHRWaWV3OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9OYXZpZ2F0aW9uQmFyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvTmF2aWdhdGlvbkJhci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGU2NzZlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9OYXZpZ2F0aW9uQmFyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmJhcnM7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuRGVuc2l0eTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLQotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci0KLXB1YmxpYyBjbGFzcyBOYXZpZ2F0aW9uQmFyIGV4dGVuZHMgQ3VzdG9tQmFyIHsKLQotICAgIHB1YmxpYyBOYXZpZ2F0aW9uQmFyKENvbnRleHQgY29udGV4dCwgRGVuc2l0eSBkZW5zaXR5LCBpbnQgb3JpZW50YXRpb24sIGJvb2xlYW4gaXNSdGwsCi0gICAgICAgICAgICBib29sZWFuIHJ0bEVuYWJsZWQpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgZGVuc2l0eSwgb3JpZW50YXRpb24sICIvYmFycy9uYXZpZ2F0aW9uX2Jhci54bWwiLCAibmF2aWdhdGlvbl9iYXIueG1sIik7Ci0KLSAgICAgICAgc2V0QmFja2dyb3VuZENvbG9yKDB4RkYwMDAwMDApOwotCi0gICAgICAgIC8vIENhbm5vdCBhY2Nlc3MgdGhlIGluc2lkZSBpdGVtcyB0aHJvdWdoIGlkIGJlY2F1c2Ugbm8gUi5pZCB2YWx1ZXMgaGF2ZSBiZWVuCi0gICAgICAgIC8vIGNyZWF0ZWQgZm9yIHRoZW0uCi0gICAgICAgIC8vIFdlIGRvIGtub3cgdGhlIG9yZGVyIHRob3VnaC4KLSAgICAgICAgLy8gMCBpcyBhIHNwYWNlci4KLSAgICAgICAgaW50IGJhY2sgPSAxOwotICAgICAgICBpbnQgcmVjZW50ID0gMzsKLSAgICAgICAgaWYgKG9yaWVudGF0aW9uID09IExpbmVhckxheW91dC5WRVJUSUNBTCB8fCAoaXNSdGwgJiYgIXJ0bEVuYWJsZWQpKSB7Ci0gICAgICAgICAgICAvLyBJZiBSVEwgaXMgZW5hYmxlZCwgdGhlbiBsYXlvdXRsaWIgbWlycm9ycyB0aGUgbGF5b3V0IGZvciB1cy4KLSAgICAgICAgICAgIGJhY2sgPSAzOwotICAgICAgICAgICAgcmVjZW50ID0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGxvYWRJY29uKGJhY2ssICAgImljX3N5c2Jhcl9iYWNrLnBuZyIsICAgZGVuc2l0eSwgaXNSdGwpOwotICAgICAgICBsb2FkSWNvbigyLCAgICAgICJpY19zeXNiYXJfaG9tZS5wbmciLCAgIGRlbnNpdHksIGlzUnRsKTsKLSAgICAgICAgbG9hZEljb24ocmVjZW50LCAiaWNfc3lzYmFyX3JlY2VudC5wbmciLCBkZW5zaXR5LCBpc1J0bCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFRleHRWaWV3IGdldFN0eWxlYWJsZVRleHRWaWV3KCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvU3RhdHVzQmFyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvU3RhdHVzQmFyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2OTJkOTYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL1N0YXR1c0Jhci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5iYXJzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLkRlbnNpdHk7Ci1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLlJlc291cmNlVHlwZTsKLQotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuTGV2ZWxMaXN0RHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotCi1wdWJsaWMgY2xhc3MgU3RhdHVzQmFyIGV4dGVuZHMgQ3VzdG9tQmFyIHsKLQotICAgIHB1YmxpYyBTdGF0dXNCYXIoQ29udGV4dCBjb250ZXh0LCBEZW5zaXR5IGRlbnNpdHksIGludCBkaXJlY3Rpb24sIGJvb2xlYW4gUnRsRW5hYmxlZCkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gRklYTUU6IGlmIGRpcmVjdGlvbiBpcyBSVEwgYnV0IGl0J3Mgbm90IGVuYWJsZWQgaW4gYXBwbGljYXRpb24gbWFuaWZlc3QsIG1pcnJvciB0aGlzIGJhci4KLQotICAgICAgICBzdXBlcihjb250ZXh0LCBkZW5zaXR5LCBMaW5lYXJMYXlvdXQuSE9SSVpPTlRBTCwgIi9iYXJzL3N0YXR1c19iYXIueG1sIiwgInN0YXR1c19iYXIueG1sIik7Ci0KLSAgICAgICAgLy8gRklYTUU6IHVzZSBGSUxMX0g/Ci0gICAgICAgIHNldEdyYXZpdHkoR3Jhdml0eS5TVEFSVCB8IEdyYXZpdHkuVE9QIHwgR3Jhdml0eS5SSUdIVCk7Ci0gICAgICAgIHNldEJhY2tncm91bmRDb2xvcigweEZGMDAwMDAwKTsKLQotICAgICAgICAvLyBDYW5ub3QgYWNjZXNzIHRoZSBpbnNpZGUgaXRlbXMgdGhyb3VnaCBpZCBiZWNhdXNlIG5vIFIuaWQgdmFsdWVzIGhhdmUgYmVlbgotICAgICAgICAvLyBjcmVhdGVkIGZvciB0aGVtLgotICAgICAgICAvLyBXZSBkbyBrbm93IHRoZSBvcmRlciB0aG91Z2guCi0gICAgICAgIC8vIDAgaXMgdGhlIHNwYWNlcgotICAgICAgICBsb2FkSWNvbigxLCAic3RhdF9zeXNfd2lmaV9zaWduYWxfNF9mdWxseS5wbmciLCBkZW5zaXR5KTsKLSAgICAgICAgbG9hZEljb24oMiwgInN0YXRfc3lzX2JhdHRlcnlfY2hhcmdlX2FuaW0xMDAucG5nIiwgZGVuc2l0eSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFRleHRWaWV3IGdldFN0eWxlYWJsZVRleHRWaWV3KCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvVGl0bGVCYXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9UaXRsZUJhci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjc4NTlmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9UaXRsZUJhci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5iYXJzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLkRlbnNpdHk7Ci0KLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotCi1wdWJsaWMgY2xhc3MgVGl0bGVCYXIgZXh0ZW5kcyBDdXN0b21CYXIgewotCi0gICAgcHJpdmF0ZSBUZXh0VmlldyBtVGV4dFZpZXc7Ci0KLSAgICBwdWJsaWMgVGl0bGVCYXIoQ29udGV4dCBjb250ZXh0LCBEZW5zaXR5IGRlbnNpdHksIFN0cmluZyBsYWJlbCkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgZGVuc2l0eSwgTGluZWFyTGF5b3V0LkhPUklaT05UQUwsICIvYmFycy90aXRsZV9iYXIueG1sIiwgInRpdGxlX2Jhci54bWwiKTsKLQotICAgICAgICAvLyBDYW5ub3QgYWNjZXNzIHRoZSBpbnNpZGUgaXRlbXMgdGhyb3VnaCBpZCBiZWNhdXNlIG5vIFIuaWQgdmFsdWVzIGhhdmUgYmVlbgotICAgICAgICAvLyBjcmVhdGVkIGZvciB0aGVtLgotICAgICAgICAvLyBXZSBkbyBrbm93IHRoZSBvcmRlciB0aG91Z2guCi0gICAgICAgIG1UZXh0VmlldyA9IHNldFRleHQoMCwgbGFiZWwpOwotCi0gICAgICAgIHNldFN0eWxlKCJ3aW5kb3dUaXRsZUJhY2tncm91bmRTdHlsZSIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBUZXh0VmlldyBnZXRTdHlsZWFibGVUZXh0VmlldygpIHsKLSAgICAgICAgcmV0dXJuIG1UZXh0VmlldzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvRGVsZWdhdGVNYW5hZ2VyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvRGVsZWdhdGVNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMTIxN2QuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL0RlbGVnYXRlTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UudXRpbC5EZWJ1ZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLnV0aWwuU3BhcnNlV2Vha0FycmF5OwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogTWFuYWdlcyBuYXRpdmUgZGVsZWdhdGVzLgotICoKLSAqIFRoaXMgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGxheW91YmxpYl9jcmVhdGU6IGNlcnRhaW4gQW5kcm9pZCBqYXZhIGNsYXNzZXMgYXJlIG1lcmUKLSAqIHdyYXBwZXJzIGFyb3VuZCBhIGhlYXZpbHkgbmF0aXZlIGJhc2VkIGltcGxlbWVudGF0aW9uLCBhbmQgd2UgbmVlZCBhIHdheSB0byBydW4gdGhlc2UgY2xhc3NlcwotICogaW4gb3VyIEVjbGlwc2UgcmVuZGVyaW5nIGZyYW1ld29yayB3aXRob3V0IGJyaW5naW5nIGFsbCB0aGUgbmF0aXZlIGNvZGUgZnJvbSB0aGUgQW5kcm9pZAotICogcGxhdGZvcm0uCi0gKgotICogVGh1cyB3ZSBpbnN0cnVjdCBsYXlvdXRsaWJfY3JlYXRlIHRvIG1vZGlmeSB0aGUgYnl0ZWNvZGUgb2YgdGhlc2UgY2xhc3NlcyB0byByZXBsYWNlIHRoZWlyCi0gKiBuYXRpdmUgbWV0aG9kcyBieSAiZGVsZWdhdGUgY2FsbHMiLgotICoKLSAqIEZvciBleGFtcGxlLCBhIG5hdGl2ZSBtZXRob2QgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXguaW5pdCguLi4pIHdpbGwgYWN0dWFsbHkgYmVjb21lCi0gKiBhIGNhbGwgdG8gYW5kcm9pZC5ncmFwaGljcy5NYXRyaXhfRGVsZWdhdGUuaW5pdCguLi4pLgotICoKLSAqIFRoZSBBbmRyb2lkIGphdmEgY2xhc3NlcyB0aGF0IHVzZSBuYXRpdmUgY29kZSB1c2VzIGFuIGludCAoSmF2YSBzaWRlKSB0byByZWZlcmVuY2UgbmF0aXZlCi0gKiBvYmplY3RzLiBUaGlzIGludCBpcyBnZW5lcmFsbHkgZGlyZWN0bHkgdGhlIHBvaW50ZXIgdG8gdGhlIEMgc3RydWN0dXJlIGNvdW50ZXJwYXJ0LgotICogVHlwaWNhbGx5IGEgY3JlYXRpb24gbWV0aG9kIHdpbGwgcmV0dXJuIHN1Y2ggYW4gaW50LCBhbmQgdGhlbiB0aGlzIGludCB3aWxsIGJlIHBhc3NlZCBsYXRlcgotICogdG8gYSBKYXZhIG1ldGhvZCB0byBpZGVudGlmeSB0aGUgQyBvYmplY3QgdG8gbWFuaXB1bGF0ZS4KLSAqCi0gKiBTaW5jZSB3ZSBjYW5ub3QgdXNlIHRoZSBKYXZhIG9iamVjdCByZWZlcmVuY2UgYXMgdGhlIGludCBkaXJlY3RseSwgRGVsZWdhdGVNYW5hZ2VyIG1hbmFnZXMgdGhlCi0gKiBpbnQgLT4gRGVsZWdhdGUgY2xhc3MgbGluay4KLSAqCi0gKiBOYXRpdmUgbWV0aG9kcyB1c3VhbGx5IGFsd2F5cyBoYXZlIHRoZSBpbnQgYXMgcGFyYW1ldGVycy4gVGhlIGZpcnN0IHRoaW5nIHRoZSBkZWxlZ2F0ZSBtZXRob2QKLSAqIHdpbGwgZG8gaXMgY2FsbCB7QGxpbmsgI2dldERlbGVnYXRlKGludCl9IHRvIGdldCB0aGUgSmF2YSBvYmplY3QgbWF0Y2hpbmcgdGhlIGludC4KLSAqCi0gKiBUeXBpY2FsIG5hdGl2ZSBpbml0IG1ldGhvZHMgYXJlIHJldHVybmluZyBhIG5ldyBpbnQgYmFjayB0byB0aGUgSmF2YSBjbGFzcywgc28KLSAqIHtAbGluayAjYWRkTmV3RGVsZWdhdGUoT2JqZWN0KX0gZG9lcyB0aGUgc2FtZS4KLSAqCi0gKiBUaGUgSk5JIHJlZmVyZW5jZXMgYXJlIGNvdW50ZWQsIHNvIHdlIGRvIHRoZSBzYW1lIHRocm91Z2ggYSB7QGxpbmsgV2Vha1JlZmVyZW5jZX0uIEJlY2F1c2UKLSAqIHRoZSBKYXZhIG9iamVjdCBuZWVkcyB0byBjb3VudCBhcyBhIHJlZmVyZW5jZSAoZXZlbiB0aG91Z2ggaXQgb25seSBob2xkcyBhbiBpbnQpLCB3ZSB1c2UgdGhlCi0gKiBmb2xsb3dpbmcgbWVjaGFuaXNtOgotICoKLSAqIC0ge0BsaW5rICNhZGROZXdEZWxlZ2F0ZShPYmplY3QpfSBhbmQge0BsaW5rICNyZW1vdmVKYXZhUmVmZXJlbmNlRm9yKGludCl9IGFkZHMgYW5kIHJlbW92ZXMKLSAqICAgdGhlIGRlbGVnYXRlIHRvL2Zyb20gYSBsaXN0LiBUaGlzIGxpc3QgaG9sZCB0aGUgcmVmZXJlbmNlIGFuZCBwcmV2ZW50cyB0aGUgR0MgZnJvbSByZWNsYWltaW5nCi0gKiAgIHRoZSBkZWxlZ2F0ZS4KLSAqCi0gKiAtIHtAbGluayAjYWRkTmV3RGVsZWdhdGUoT2JqZWN0KX0gYWxzbyBhZGRzIHRoZSBkZWxlZ2F0ZSB0byBhIHtAbGluayBTcGFyc2VBcnJheX0gdGhhdCBob2xkcyBhCi0gKiAgIHtAbGluayBXZWFrUmVmZXJlbmNlfSB0byB0aGUgZGVsZWdhdGUuIFRoaXMgYWxsb3dzIHRoZSBkZWxlZ2F0ZSB0byBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkKLSAqICAgd2hlbiBub3RoaW5nIHJlZmVyZW5jZXMgaXQuIFRoaXMgbWVhbnMgdGhhdCBhbnkgY2xhc3MgdGhhdCBob2xkcyBhIGRlbGVnYXRlIChleGNlcHQgZm9yIHRoZQotICogICBKYXZhIG1haW4gY2xhc3MpIG11c3Qgbm90IHVzZSB0aGUgaW50IGJ1dCB0aGUgRGVsZWdhdGUgY2xhc3MgaW5zdGVhZC4gVGhlIGludGVnZXJzIG11c3QKLSAqICAgb25seSBiZSB1c2VkIGluIHRoZSBBUEkgYmV0d2VlbiB0aGUgbWFpbiBKYXZhIGNsYXNzIGFuZCB0aGUgRGVsZWdhdGUuCi0gKgotICogQHBhcmFtIDxUPiB0aGUgZGVsZWdhdGUgY2xhc3MgdG8gbWFuYWdlCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBEZWxlZ2F0ZU1hbmFnZXI8VD4gewotICAgIHByaXZhdGUgZmluYWwgQ2xhc3M8VD4gbUNsYXNzOwotICAgIHByaXZhdGUgZmluYWwgU3BhcnNlV2Vha0FycmF5PFQ+IG1EZWxlZ2F0ZXMgPSBuZXcgU3BhcnNlV2Vha0FycmF5PFQ+KCk7Ci0gICAgLyoqIGxpc3QgdXNlZCB0byBzdG9yZSBkZWxlZ2F0ZXMgd2hlbiB0aGVpciBtYWluIG9iamVjdCBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgotICAgICAqIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIFdlYWtSZWZlcmVuY2UgaW4gdGhlIFNwYXJzZVdlYWtBcnJheSBkb2Vzbid0IGdldCBHQydlZAotICAgICAqIEBzZWUgI2FkZE5ld0RlbGVnYXRlKE9iamVjdCkKLSAgICAgKiBAc2VlICNyZW1vdmVKYXZhUmVmZXJlbmNlRm9yKGludCkKLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8VD4gbUphdmFSZWZlcmVuY2VzID0gbmV3IEFycmF5TGlzdDxUPigpOwotICAgIHByaXZhdGUgaW50IG1EZWxlZ2F0ZUNvdW50ZXIgPSAwOwotCi0gICAgcHVibGljIERlbGVnYXRlTWFuYWdlcihDbGFzczxUPiB0aGVDbGFzcykgewotICAgICAgICBtQ2xhc3MgPSB0aGVDbGFzczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBnaXZlbiBuYXRpdmUgaW50LgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSBpbnQgaXMgemVybywgdGhlbiB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBudWxsLgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSBpbnQgaXMgbm9uIHplcm8gYW5kIHRoZSBkZWxlZ2F0ZSBpcyBub3QgZm91bmQsIHRoaXMgd2lsbCB0aHJvdyBhbiBhc3NlcnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmF0aXZlX29iamVjdCB0aGUgbmF0aXZlIGludC4KLSAgICAgKiBAcmV0dXJuIHRoZSBkZWxlZ2F0ZSBvciBudWxsIGlmIG5vdCBmb3VuZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgVCBnZXREZWxlZ2F0ZShpbnQgbmF0aXZlX29iamVjdCkgewotICAgICAgICBpZiAobmF0aXZlX29iamVjdCA+IDApIHsKLSAgICAgICAgICAgIFQgZGVsZWdhdGUgPSAgbURlbGVnYXRlcy5nZXQobmF0aXZlX29iamVjdCk7Ci0KLSAgICAgICAgICAgIGlmIChEZWJ1Zy5ERUJVRykgewotICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5rbm93biAiICsgbUNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIgd2l0aCBpbnQgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX29iamVjdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhc3NlcnQgZGVsZWdhdGUgIT0gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBZGRzIGEgZGVsZWdhdGUgdG8gdGhlIG1hbmFnZXIgYW5kIHJldHVybnMgdGhlIG5hdGl2ZSBpbnQgdXNlZCB0byBpZGVudGlmeSBpdC4KLSAgICAgKiBAcGFyYW0gbmV3RGVsZWdhdGUgdGhlIGRlbGVnYXRlIHRvIGFkZAotICAgICAqIEByZXR1cm4gYSB1bmlxdWUgbmF0aXZlIGludCB0byBpZGVudGlmeSB0aGUgZGVsZWdhdGUKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGFkZE5ld0RlbGVnYXRlKFQgbmV3RGVsZWdhdGUpIHsKLSAgICAgICAgaW50IG5hdGl2ZV9vYmplY3QgPSArK21EZWxlZ2F0ZUNvdW50ZXI7Ci0gICAgICAgIG1EZWxlZ2F0ZXMucHV0KG5hdGl2ZV9vYmplY3QsIG5ld0RlbGVnYXRlKTsKLSAgICAgICAgYXNzZXJ0ICFtSmF2YVJlZmVyZW5jZXMuY29udGFpbnMobmV3RGVsZWdhdGUpOwotICAgICAgICBtSmF2YVJlZmVyZW5jZXMuYWRkKG5ld0RlbGVnYXRlKTsKLQotICAgICAgICBpZiAoRGVidWcuREVCVUcpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTmV3ICIgKyBtQ2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIiB3aXRoIGludCAiICsgbmF0aXZlX29iamVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmF0aXZlX29iamVjdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmVzIHRoZSBtYWluIHJlZmVyZW5jZSBvbiB0aGUgZ2l2ZW4gZGVsZWdhdGUuCi0gICAgICogQHBhcmFtIG5hdGl2ZV9vYmplY3QgdGhlIG5hdGl2ZSBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgZGVsZWdhdGUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihpbnQgbmF0aXZlX29iamVjdCkgewotICAgICAgICBUIGRlbGVnYXRlID0gZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0KLSAgICAgICAgaWYgKERlYnVnLkRFQlVHKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW92aW5nIG1haW4gSmF2YSByZWYgb24gIiArIG1DbGFzcy5nZXRTaW1wbGVOYW1lKCkgKwotICAgICAgICAgICAgICAgICAgICAiIHdpdGggaW50ICIgKyBuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1KYXZhUmVmZXJlbmNlcy5yZW1vdmUoZGVsZWdhdGUpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9Gb250TG9hZGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvRm9udExvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDhiNjUxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9Gb250TG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsOwotCi1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuVHlwZWZhY2U7Ci0KLWltcG9ydCBqYXZhLmF3dC5Gb250OwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7Ci0KLS8qKgotICogUHJvdmlkZXMge0BsaW5rIEZvbnR9IG9iamVjdCB0byB0aGUgbGF5b3V0IGxpYi4KLSAqIDxwLz4KLSAqIFRoZSBmb250cyBhcmUgbG9hZGVkIGZyb20gdGhlIFNESyBkaXJlY3RvcnkuIEZhbWlseS9zdHlsZSBtYXBwaW5nIGlzIGRvbmUgYnkgcGFyc2luZyB0aGUKLSAqIGZvbnRzLnhtbCBmaWxlIGxvY2F0ZWQgYWxvbmdzaWRlIHRoZSB0dGYgZmlsZXMuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBGb250TG9hZGVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9OVFNfU1lTVEVNID0gInN5c3RlbV9mb250cy54bWwiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT05UU19WRU5ET1IgPSAidmVuZG9yX2ZvbnRzLnhtbCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTlRTX0ZBTExCQUNLID0gImZhbGxiYWNrX2ZvbnRzLnhtbCI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERV9GQU1JTFlTRVQgPSAiZmFtaWx5c2V0IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERV9GQU1JTFkgPSAiZmFtaWx5IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERV9OQU1FID0gIm5hbWUiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFX0ZJTEUgPSAiZmlsZSI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX1ZBUklBTlQgPSAidmFyaWFudCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9WQUxVRV9FTEVHQU5UID0gImVsZWdhbnQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT05UX1NVRkZJWF9OT05FID0gIi50dGYiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT05UX1NVRkZJWF9SRUdVTEFSID0gIi1SZWd1bGFyLnR0ZiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTlRfU1VGRklYX0JPTEQgPSAiLUJvbGQudHRmIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9OVF9TVUZGSVhfSVRBTElDID0gIi1JdGFsaWMudHRmIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9OVF9TVUZGSVhfQk9MRElUQUxJQyA9ICItQm9sZEl0YWxpYy50dGYiOwotCi0gICAgLy8gVGhpcyBtdXN0IG1hdGNoIHRoZSB2YWx1ZXMgb2YgVHlwZWZhY2Ugc3R5bGVzIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGZvciBpbmRpY2VzIGluIHRoaXMKLSAgICAvLyBhcnJheS4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBBV1RfU1RZTEVTID0gbmV3IGludFtdIHsKLSAgICAgICAgRm9udC5QTEFJTiwKLSAgICAgICAgRm9udC5CT0xELAotICAgICAgICBGb250LklUQUxJQywKLSAgICAgICAgRm9udC5CT0xEIHwgRm9udC5JVEFMSUMKLSAgICB9OwotICAgIHByaXZhdGUgc3RhdGljIGludFtdIERFUklWRV9CT0xEX0lUQUxJQyA9IG5ldyBpbnRbXSB7Ci0gICAgICAgIFR5cGVmYWNlLklUQUxJQywgVHlwZWZhY2UuQk9MRCwgVHlwZWZhY2UuTk9STUFMCi0gICAgfTsKLSAgICBwcml2YXRlIHN0YXRpYyBpbnRbXSBERVJJVkVfSVRBTElDID0gbmV3IGludFtdIHsgVHlwZWZhY2UuTk9STUFMIH07Ci0gICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gREVSSVZFX0JPTEQgPSBuZXcgaW50W10geyBUeXBlZmFjZS5OT1JNQUwgfTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8Rm9udEluZm8+IG1NYWluRm9udHMgPSBuZXcgQXJyYXlMaXN0PEZvbnRJbmZvPigpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8Rm9udEluZm8+IG1GYWxsYmFja0ZvbnRzID0gbmV3IEFycmF5TGlzdDxGb250SW5mbz4oKTsKLQotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Pc0ZvbnRzTG9jYXRpb247Ci0KLSAgICBwdWJsaWMgc3RhdGljIEZvbnRMb2FkZXIgY3JlYXRlKFN0cmluZyBmb250T3NMb2NhdGlvbikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgU0FYUGFyc2VyRmFjdG9yeSBwYXJzZXJGYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICAgICAgICAgIHBhcnNlckZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0KLSAgICAgICAgICAgIC8vIHBhcnNlIHRoZSBzeXN0ZW0gZm9udHMKLSAgICAgICAgICAgIEZvbnRIYW5kbGVyIGhhbmRsZXIgPSBwYXJzZUZvbnRGaWxlKHBhcnNlckZhY3RvcnksIGZvbnRPc0xvY2F0aW9uLCBGT05UU19TWVNURU0pOwotICAgICAgICAgICAgTGlzdDxGb250SW5mbz4gc3lzdGVtRm9udHMgPSBoYW5kbGVyLmdldEZvbnRMaXN0KCk7Ci0KLQotICAgICAgICAgICAgLy8gcGFyc2UgdGhlIGZhbGxiYWNrIGZvbnRzCi0gICAgICAgICAgICBoYW5kbGVyID0gcGFyc2VGb250RmlsZShwYXJzZXJGYWN0b3J5LCBmb250T3NMb2NhdGlvbiwgRk9OVFNfRkFMTEJBQ0spOwotICAgICAgICAgICAgTGlzdDxGb250SW5mbz4gZmFsbGJhY2tGb250cyA9IGhhbmRsZXIuZ2V0Rm9udExpc3QoKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBGb250TG9hZGVyKGZvbnRPc0xvY2F0aW9uLCBzeXN0ZW1Gb250cywgZmFsbGJhY2tGb250cyk7Ci0gICAgICAgIH0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gcmV0dXJuIG51bGwgYmVsb3cKLSAgICAgICAgfSBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIHJldHVybiBudWxsIGJlbG93Ci0gICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyByZXR1cm4gbnVsbCBiZWxvdwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyByZXR1cm4gbnVsbCBiZWxvdwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgRm9udEhhbmRsZXIgcGFyc2VGb250RmlsZShTQVhQYXJzZXJGYWN0b3J5IHBhcnNlckZhY3RvcnksCi0gICAgICAgICAgICBTdHJpbmcgZm9udE9zTG9jYXRpb24sIFN0cmluZyBmb250RmlsZU5hbWUpCi0gICAgICAgICAgICB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLQotICAgICAgICBTQVhQYXJzZXIgcGFyc2VyID0gcGFyc2VyRmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLSAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUoZm9udE9zTG9jYXRpb24sIGZvbnRGaWxlTmFtZSk7Ci0KLSAgICAgICAgRm9udEhhbmRsZXIgZGVmaW5pdGlvblBhcnNlciA9IG5ldyBGb250SGFuZGxlcigKLSAgICAgICAgICAgICAgICBmb250T3NMb2NhdGlvbiArIEZpbGUuc2VwYXJhdG9yKTsKLSAgICAgICAgcGFyc2VyLnBhcnNlKG5ldyBGaWxlSW5wdXRTdHJlYW0oZiksIGRlZmluaXRpb25QYXJzZXIpOwotICAgICAgICByZXR1cm4gZGVmaW5pdGlvblBhcnNlcjsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEZvbnRMb2FkZXIoU3RyaW5nIGZvbnRPc0xvY2F0aW9uLAotICAgICAgICAgICAgTGlzdDxGb250SW5mbz4gZm9udExpc3QsIExpc3Q8Rm9udEluZm8+IGZhbGxCYWNrTGlzdCkgewotICAgICAgICBtT3NGb250c0xvY2F0aW9uID0gZm9udE9zTG9jYXRpb247Ci0gICAgICAgIG1NYWluRm9udHMuYWRkQWxsKGZvbnRMaXN0KTsKLSAgICAgICAgbUZhbGxiYWNrRm9udHMuYWRkQWxsKGZhbGxCYWNrTGlzdCk7Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE9zRm9udHNMb2NhdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIG1Pc0ZvbnRzTG9jYXRpb247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHtAbGluayBGb250fSBvYmplY3QgZ2l2ZW4gYSBmYW1pbHkgbmFtZSBhbmQgYSBzdHlsZSB2YWx1ZSAoY29uc3RhbnQgaW4KLSAgICAgKiB7QGxpbmsgVHlwZWZhY2V9KS4KLSAgICAgKiBAcGFyYW0gZmFtaWx5IHRoZSBmYW1pbHkgbmFtZQotICAgICAqIEBwYXJhbSBzdHlsZSBhIDEtaXRlbSBhcnJheSBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgc3R5bGUuIEJhc2VkIG9uIHRoZSBmb250IGJlaW5nIHJlYWQKLSAgICAgKiAgICAgICAgICAgICAgdGhlIGFjdHVhbCBzdHlsZSBtYXkgYmUgZGlmZmVyZW50LiBUaGUgYXJyYXkgY29udGFpbnMgdGhlIGFjdHVhbCBzdHlsZSBhZnRlcgotICAgICAqICAgICAgICAgICAgICB0aGUgbWV0aG9kIHJldHVybnMuCi0gICAgICogQHJldHVybiB0aGUgZm9udCBvYmplY3Qgb3IgbnVsbCBpZiBubyBtYXRjaCBjb3VsZCBiZSBmb3VuZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIExpc3Q8Rm9udD4gZ2V0Rm9udChTdHJpbmcgZmFtaWx5LCBpbnQgc3R5bGUpIHsKLSAgICAgICAgTGlzdDxGb250PiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PEZvbnQ+KCk7Ci0KLSAgICAgICAgaWYgKGZhbWlseSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLQotICAgICAgICAvLyBnZXQgdGhlIGZvbnQgb2JqZWN0cyBmcm9tIHRoZSBtYWluIGxpc3QgYmFzZWQgb24gZmFtaWx5LgotICAgICAgICBmb3IgKEZvbnRJbmZvIGluZm8gOiBtTWFpbkZvbnRzKSB7Ci0gICAgICAgICAgICBpZiAoaW5mby5mYW1pbGllcy5jb250YWlucyhmYW1pbHkpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChpbmZvLmZvbnRbc3R5bGVdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGFkZCBhbGwgdGhlIGZhbGxiYWNrIGZvbnRzIGZvciB0aGUgZ2l2ZW4gc3R5bGUKLSAgICAgICAgZm9yIChGb250SW5mbyBpbmZvIDogbUZhbGxiYWNrRm9udHMpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hZGQoaW5mby5mb250W3N0eWxlXSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBMaXN0PEZvbnQ+IGdldEZhbGxiYWNrRm9udHMoaW50IHN0eWxlKSB7Ci0gICAgICAgIExpc3Q8Rm9udD4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxGb250PigpOwotICAgICAgICAvLyBhZGQgYWxsIHRoZSBmYWxsYmFjayBmb250cwotICAgICAgICBmb3IgKEZvbnRJbmZvIGluZm8gOiBtRmFsbGJhY2tGb250cykgewotICAgICAgICAgICAgcmVzdWx0LmFkZChpbmZvLmZvbnRbc3R5bGVdKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgY2xhc3MgRm9udEluZm8gewotICAgICAgICBmaW5hbCBGb250W10gZm9udCA9IG5ldyBGb250WzRdOyAvLyBNYXRjaGVzIHRoZSA0IHR5cGUtZmFjZSBzdHlsZXMuCi0gICAgICAgIGZpbmFsIFNldDxTdHJpbmc+IGZhbWlsaWVzOwotCi0gICAgICAgIEZvbnRJbmZvKCkgewotICAgICAgICAgICAgZmFtaWxpZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBjbGFzcyBGb250SGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU9zRm9udHNMb2NhdGlvbjsKLQotICAgICAgICBwcml2YXRlIEZvbnRJbmZvIG1Gb250SW5mbyA9IG51bGw7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nQnVpbGRlciBtQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgIHByaXZhdGUgTGlzdDxGb250SW5mbz4gbUZvbnRMaXN0ID0gbmV3IEFycmF5TGlzdDxGb250SW5mbz4oKTsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ29tcGFjdEZvbnQgPSB0cnVlOwotCi0gICAgICAgIHByaXZhdGUgRm9udEhhbmRsZXIoU3RyaW5nIG9zRm9udHNMb2NhdGlvbikgewotICAgICAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgICAgIG1Pc0ZvbnRzTG9jYXRpb24gPSBvc0ZvbnRzTG9jYXRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgTGlzdDxGb250SW5mbz4gZ2V0Rm9udExpc3QoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUZvbnRMaXN0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjc3RhcnRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMpCi0gICAgICAgICAqLwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBuYW1lLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBpZiAoTk9ERV9GQU1JTFlTRVQuZXF1YWxzKGxvY2FsTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBtRm9udExpc3QgPSBuZXcgQXJyYXlMaXN0PEZvbnRJbmZvPigpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChOT0RFX0ZBTUlMWS5lcXVhbHMobG9jYWxOYW1lKSkgewotICAgICAgICAgICAgICAgIGlmIChtRm9udExpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtRm9udEluZm8gPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoTk9ERV9OQU1FLmVxdWFscyhsb2NhbE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Gb250TGlzdCAhPSBudWxsICYmIG1Gb250SW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Gb250SW5mbyA9IG5ldyBGb250SW5mbygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoTk9ERV9GSUxFLmVxdWFscyhsb2NhbE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Gb250TGlzdCAhPSBudWxsICYmIG1Gb250SW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Gb250SW5mbyA9IG5ldyBGb250SW5mbygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoQVRUUklCVVRFX1ZBTFVFX0VMRUdBTlQuZXF1YWxzKGF0dHJpYnV0ZXMuZ2V0VmFsdWUoQVRUUklCVVRFX1ZBUklBTlQpKSkgewotICAgICAgICAgICAgICAgICAgICBpc0NvbXBhY3RGb250ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaXNDb21wYWN0Rm9udCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtQnVpbGRlci5zZXRMZW5ndGgoMCk7Ci0KLSAgICAgICAgICAgIHN1cGVyLnN0YXJ0RWxlbWVudCh1cmksIGxvY2FsTmFtZSwgbmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICAgICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNjaGFyYWN0ZXJzKGNoYXJbXSwgaW50LCBpbnQpCi0gICAgICAgICAqLwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgY2hhcmFjdGVycyhjaGFyW10gY2gsIGludCBzdGFydCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBpZiAoaXNDb21wYWN0Rm9udCkgewotICAgICAgICAgICAgICBtQnVpbGRlci5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjZW5kRWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgICAgICAgKi8KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIG5hbWUpIHRocm93cyBTQVhFeGNlcHRpb24gewotICAgICAgICAgICAgaWYgKE5PREVfRkFNSUxZLmVxdWFscyhsb2NhbE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Gb250SW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIGhhcyBhIG5vcm1hbCBmb250IGZpbGUsIGFkZCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAgICBpZiAobUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuTk9STUFMXSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRm9udExpc3QuYWRkKG1Gb250SW5mbyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBtaXNzaW5nIGZvbnQgc3R5bGVzLCBvcmRlciBpcyBpbXBvcnRhbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuQk9MRF9JVEFMSUNdID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlRGVyaXZlZEZvbnQoVHlwZWZhY2UuQk9MRF9JVEFMSUMsIERFUklWRV9CT0xEX0lUQUxJQyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuSVRBTElDXSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZURlcml2ZWRGb250KFR5cGVmYWNlLklUQUxJQywgREVSSVZFX0lUQUxJQyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuQk9MRF0gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVEZXJpdmVkRm9udChUeXBlZmFjZS5CT0xELCBERVJJVkVfQk9MRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtRm9udEluZm8gPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoTk9ERV9OQU1FLmVxdWFscyhsb2NhbE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gaGFuZGxlIGEgbmV3IG5hbWUgZm9yIGFuIGV4aXN0aW5nIEZvbnQgSW5mbwotICAgICAgICAgICAgICAgIGlmIChtRm9udEluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZmFtaWx5ID0gdHJpbVhtbFdoaXRlc3BhY2VzKG1CdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBtRm9udEluZm8uZmFtaWxpZXMuYWRkKGZhbWlseSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChOT0RFX0ZJTEUuZXF1YWxzKGxvY2FsTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBoYW5kbGUgYSBuZXcgZmlsZSBmb3IgYW4gZXhpc3RpbmcgRm9udCBJbmZvCi0gICAgICAgICAgICAgICAgaWYgKGlzQ29tcGFjdEZvbnQgJiYgbUZvbnRJbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gdHJpbVhtbFdoaXRlc3BhY2VzKG1CdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBGb250IGZvbnQgPSBnZXRGb250KGZpbGVOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKEZPTlRfU1VGRklYX1JFR1VMQVIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuTk9STUFMXSA9IGZvbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKEZPTlRfU1VGRklYX0JPTEQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuQk9MRF0gPSBmb250OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlTmFtZS5lbmRzV2l0aChGT05UX1NVRkZJWF9JVEFMSUMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuSVRBTElDXSA9IGZvbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKEZPTlRfU1VGRklYX0JPTERJVEFMSUMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuQk9MRF9JVEFMSUNdID0gZm9udDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZU5hbWUuZW5kc1dpdGgoRk9OVF9TVUZGSVhfTk9ORSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRm9udEluZm8uZm9udFtUeXBlZmFjZS5OT1JNQUxdID0gZm9udDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgRm9udCBnZXRGb250KFN0cmluZyBmaWxlTmFtZSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShtT3NGb250c0xvY2F0aW9uLCBmaWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpbGUuZXhpc3RzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZvbnQuY3JlYXRlRm9udChGb250LlRSVUVUWVBFX0ZPTlQsIGZpbGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgY29tcHV0ZURlcml2ZWRGb250KCBpbnQgdG9Db21wdXRlLCBpbnRbXSBiYXNlZE9uTGlzdCkgewotICAgICAgICAgICAgZm9yIChpbnQgYmFzZWRPbiA6IGJhc2VkT25MaXN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Gb250SW5mby5mb250W2Jhc2VkT25dICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbUZvbnRJbmZvLmZvbnRbdG9Db21wdXRlXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRm9udEluZm8uZm9udFtiYXNlZE9uXS5kZXJpdmVGb250KEFXVF9TVFlMRVNbdG9Db21wdXRlXSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHdlIHJlYWxseSBzaG91bGRuJ3Qgc3RvcCB0aGVyZS4gVGhpcyBtZWFucyB3ZSBkb24ndCBoYXZlIGEgTk9STUFMIGZvbnQuLi4KLSAgICAgICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIHRyaW1YbWxXaGl0ZXNwYWNlcyhTdHJpbmcgdmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGxvb2sgZm9yIGNhcnJpYWdlIHJldHVybiBhbmQgcmVwbGFjZSBhbGwgd2hpdGVzcGFjZSBhcm91bmQgaXQgYnkganVzdCAxIHNwYWNlLgotICAgICAgICAgICAgaW50IGluZGV4OwotCi0gICAgICAgICAgICB3aGlsZSAoKGluZGV4ID0gdmFsdWUuaW5kZXhPZignXG4nKSkgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBsb29rIGZvciB3aGl0ZXNwYWNlIG9uIGVhY2ggc2lkZQotICAgICAgICAgICAgICAgIGludCBsZWZ0ID0gaW5kZXggLSAxOwotICAgICAgICAgICAgICAgIHdoaWxlIChsZWZ0ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKENoYXJhY3Rlci5pc1doaXRlc3BhY2UodmFsdWUuY2hhckF0KGxlZnQpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC0tOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbnQgcmlnaHQgPSBpbmRleCArIDE7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gdmFsdWUubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHJpZ2h0IDwgY291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKENoYXJhY3Rlci5pc1doaXRlc3BhY2UodmFsdWUuY2hhckF0KHJpZ2h0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0Kys7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgYmV0d2VlbiBsZWZ0IGFuZCByaWdodCAobm9uIGluY2x1c2l2ZSkgYW5kIHJlcGxhY2UgYnkgYSBzaW5nbGUgc3BhY2UuCi0gICAgICAgICAgICAgICAgU3RyaW5nIGxlZnRTdHJpbmcgPSBudWxsOwotICAgICAgICAgICAgICAgIGlmIChsZWZ0ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbGVmdFN0cmluZyA9IHZhbHVlLnN1YnN0cmluZygwLCBsZWZ0ICsgMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFN0cmluZyByaWdodFN0cmluZyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0IDwgY291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmlnaHRTdHJpbmcgPSB2YWx1ZS5zdWJzdHJpbmcocmlnaHQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChsZWZ0U3RyaW5nICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZWZ0U3RyaW5nOwotICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRTdHJpbmcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gIiAiICsgcmlnaHRTdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJpZ2h0U3RyaW5nICE9IG51bGwgPyByaWdodFN0cmluZyA6ICIiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbm93IHdlIHVuLWVzY2FwZSB0aGUgc3RyaW5nCi0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7Ci0gICAgICAgICAgICBjaGFyW10gYnVmZmVyID0gdmFsdWUudG9DaGFyQXJyYXkoKTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbGVuZ3RoIDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJbaSsxXSA9PSAnbicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgdGhlIGNoYXIgd2l0aCBcbgotICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2krMV0gPSAnXG4nOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0IHRoZSByZXN0IG9mIHRoZSBidWZmZXIgc2luY2Ugd2UgZ28gZnJvbSAyIHRvIDEgY2hhcgotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZmZlciwgaSsxLCBidWZmZXIsIGksIGxlbmd0aCAtIGkgLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLS07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhidWZmZXIsIDAsIGxlbmd0aCk7Ci0gICAgICAgIH0KLQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9HY1NuYXBzaG90LmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvR2NTbmFwc2hvdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWQ2YjFhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9HY1NuYXBzaG90LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwX0RlbGVnYXRlOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0RjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlZ2lvbjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlZ2lvbl9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlNoYWRlcl9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlhmZXJtb2RlX0RlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuQWxwaGFDb21wb3NpdGU7Ci1pbXBvcnQgamF2YS5hd3QuQ29sb3I7Ci1pbXBvcnQgamF2YS5hd3QuQ29tcG9zaXRlOwotaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7Ci1pbXBvcnQgamF2YS5hd3QuUmVuZGVyaW5nSGludHM7Ci1pbXBvcnQgamF2YS5hd3QuU2hhcGU7Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm07Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5BcmVhOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQ7Ci1pbXBvcnQgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi0vKioKLSAqIENsYXNzIHJlcHJlc2VudGluZyBhIGdyYXBoaWNzIGNvbnRleHQgc25hcHNob3QsIGFzIHdlbGwgYXMgYSBjb250ZXh0IHN0YWNrIGFzIGEgbGlua2VkIGxpc3QuCi0gKiA8cD4KLSAqIFRoaXMgaXMgYmFzZWQgb24gdG9wIG9mIHtAbGluayBHcmFwaGljczJEfSBidXQgY2FuIG9wZXJhdGUgaW5kZXBlbmRlbnRseSBpZiBub25lIGFyZSBhdmFpbGFibGUKLSAqIHlldCB3aGVuIHNldHRpbmcgdHJhbnNmb3JtcyBhbmQgY2xpcCBpbmZvcm1hdGlvbi4KLSAqIDxwPgotICogVGhpcyBhbGxvd3MgZm9yIGRyYXdpbmcgdGhyb3VnaCB7QGxpbmsgI2RyYXcoRHJhd2FibGUsIFBhaW50X0RlbGVnYXRlKX0gYW5kCi0gKiB7QGxpbmsgI2RyYXcoRHJhd2FibGUsIFBhaW50X0RlbGVnYXRlKX0KLSAqCi0gKiBIYW5kbGluZyBvZiBsYXllcnMgKGNyZWF0ZWQgd2l0aCB7QGxpbmsgQ2FudmFzI3NhdmVMYXllcihSZWN0RiwgUGFpbnQsIGludCl9KSBpcyBoYW5kbGVkIHRocm91Z2gKLSAqIGEgbGlzdCBvZiBHcmFwaGljczJEIGZvciBlYWNoIGxheWVycy4gVGhlIGNsYXNzIGFjdHVhbGx5IG1haW50YWlucyBhIGxpc3Qgb2Yge0BsaW5rIExheWVyfQotICogZm9yIGVhY2ggbGF5ZXIuIERvaW5nIGEgc2F2ZSgpIHdpbGwgZHVwbGljYXRlIHRoaXMgbGlzdCBzbyB0aGF0IGVhY2ggZ3JhcGhpY3MyRCBvYmplY3QKLSAqICh7QGxpbmsgTGF5ZXIjZ2V0R3JhcGhpY3MoKX0pIGlzIGNvbmZpZ3VyZWQgb25seSBmb3IgdGhlIG5ldyBzbmFwc2hvdC4KLSAqLwotcHVibGljIGNsYXNzIEdjU25hcHNob3QgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBHY1NuYXBzaG90IG1QcmV2aW91czsKLSAgICBwcml2YXRlIGZpbmFsIGludCBtRmxhZ3M7Ci0KLSAgICAvKiogbGlzdCBvZiBsYXllcnMuIFRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0IGlzIGFsd2F5cyB0aGUgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8TGF5ZXI+IG1MYXllcnMgPSBuZXcgQXJyYXlMaXN0PExheWVyPigpOwotCi0gICAgLyoqIHRlbXAgdHJhbnNmb3JtIGluIGNhc2UgdHJhbnNmb3JtYXRpb24gYXJlIHNldCBiZWZvcmUgYSBHcmFwaGljczJEIGV4aXN0cyAqLwotICAgIHByaXZhdGUgQWZmaW5lVHJhbnNmb3JtIG1UcmFuc2Zvcm0gPSBudWxsOwotICAgIC8qKiB0ZW1wIGNsaXAgaW4gY2FzZSBjbGlwcGluZyBpcyBzZXQgYmVmb3JlIGEgR3JhcGhpY3MyRCBleGlzdHMgKi8KLSAgICBwcml2YXRlIEFyZWEgbUNsaXAgPSBudWxsOwotCi0gICAgLy8gbG9jYWwgbGF5ZXIgZGF0YQotICAgIC8qKiBhIGxvY2FsIGxheWVyIGNyZWF0ZWQgd2l0aCB7QGxpbmsgQ2FudmFzI3NhdmVMYXllcihSZWN0RiwgUGFpbnQsIGludCl9LgotICAgICAqIElmIHRoaXMgaXMgbnVsbCwgdGhpcyBkb2VzIG5vdCBtZWFuIHRoZXJlJ3Mgbm8gbGF5ZXIsIGp1c3QgdGhhdCB0aGUgc25hcHNob3QgaXMgbm90IHRoZQotICAgICAqIG9uZSB0aGF0IGNyZWF0ZWQgdGhlIGxheWVyLgotICAgICAqIEBzZWUgI2dldExheWVyU25hcHNob3QoKQotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgTGF5ZXIgbUxvY2FsTGF5ZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBQYWludF9EZWxlZ2F0ZSBtTG9jYWxMYXllclBhaW50OwotICAgIHByaXZhdGUgZmluYWwgUmVjdCBtTGF5ZXJCb3VuZHM7Ci0KLSAgICBwdWJsaWMgaW50ZXJmYWNlIERyYXdhYmxlIHsKLSAgICAgICAgdm9pZCBkcmF3KEdyYXBoaWNzMkQgZ3JhcGhpY3MsIFBhaW50X0RlbGVnYXRlIHBhaW50KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbGFzcyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGEgbGF5ZXIuCi0gICAgICoKLSAgICAgKiBUaGlzIGNvbnRhaW5zIGdyYXBoaWNzLCBiaXRtYXAgYW5kIGxheWVyIGluZm9ybWF0aW9uLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIExheWVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBHcmFwaGljczJEIG1HcmFwaGljczsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBCaXRtYXBfRGVsZWdhdGUgbUJpdG1hcDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBCdWZmZXJlZEltYWdlIG1JbWFnZTsKLSAgICAgICAgLyoqIHRoZSBmbGFncyB0aGF0IHdlcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGxheWVyLiBUaGlzIGlzIG5ldmVyIGNoYW5nZWQsIGFuZCBwYXNzZWQKLSAgICAgICAgICogYXMgaXMgd2hlbiB7QGxpbmsgI21ha2VDb3B5KCl9IGlzIGNhbGxlZCAqLwotICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtRmxhZ3M7Ci0gICAgICAgIC8qKiB0aGUgb3JpZ2luYWwgY29udGVudCBvZiB0aGUgbGF5ZXIgd2hlbiB0aGUgbmV4dCBvYmplY3Qgd2FzIGNyZWF0ZWQuIFRoaXMgaXMgbm90Ci0gICAgICAgICAqIHBhc3NlZCBpbiB7QGxpbmsgI21ha2VDb3B5KCl9IGFuZCBpbnN0ZWFkIGlzIHJlY3JlYXRlZCB3aGVuIGEgbmV3IGxheWVyIGlzIGFkZGVkCi0gICAgICAgICAqIChkZXBlbmRpbmcgb24gaXRzIGZsYWdzKSAqLwotICAgICAgICBwcml2YXRlIEJ1ZmZlcmVkSW1hZ2UgbU9yaWdpbmFsQ29weTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIGxheWVyIHdpdGggYSBncmFwaGljcyBhbmQgYSBiaXRtYXAuIFRoaXMgaXMgb25seSB1c2VkIHRvIGNyZWF0ZQotICAgICAgICAgKiB0aGUgYmFzZSBsYXllci4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGdyYXBoaWNzIHRoZSBncmFwaGljcwotICAgICAgICAgKiBAcGFyYW0gYml0bWFwIHRoZSBiaXRtYXAKLSAgICAgICAgICovCi0gICAgICAgIExheWVyKEdyYXBoaWNzMkQgZ3JhcGhpY3MsIEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXApIHsKLSAgICAgICAgICAgIG1HcmFwaGljcyA9IGdyYXBoaWNzOwotICAgICAgICAgICAgbUJpdG1hcCA9IGJpdG1hcDsKLSAgICAgICAgICAgIG1JbWFnZSA9IG1CaXRtYXAuZ2V0SW1hZ2UoKTsKLSAgICAgICAgICAgIG1GbGFncyA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIGxheWVyIHdpdGggYSBncmFwaGljcyBhbmQgYW4gaW1hZ2UuIElmIHRoZSBpbWFnZSBiZWxvbmdzIHRvIGEKLSAgICAgICAgICoge0BsaW5rIEJpdG1hcF9EZWxlZ2F0ZX0gKGNhc2Ugb2YgdGhlIGJhc2UgbGF5ZXIpLCB0aGVuCi0gICAgICAgICAqIHtAbGluayBMYXllciNMYXllcihHcmFwaGljczJELCBCaXRtYXBfRGVsZWdhdGUpfSBzaG91bGQgYmUgdXNlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGdyYXBoaWNzIHRoZSBncmFwaGljcyB0aGUgbmV3IGdyYXBoaWNzIGZvciB0aGlzIGxheWVyCi0gICAgICAgICAqIEBwYXJhbSBpbWFnZSB0aGUgaW1hZ2UgdGhlIGltYWdlIGZyb20gd2hpY2ggdGhlIGdyYXBoaWNzIGNhbWUKLSAgICAgICAgICogQHBhcmFtIGZsYWdzIHRoZSBmbGFncyB0aGF0IHdlcmUgdXNlZCB0byBzYXZlIHRoaXMgbGF5ZXIKLSAgICAgICAgICovCi0gICAgICAgIExheWVyKEdyYXBoaWNzMkQgZ3JhcGhpY3MsIEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UsIGludCBmbGFncykgewotICAgICAgICAgICAgbUdyYXBoaWNzID0gZ3JhcGhpY3M7Ci0gICAgICAgICAgICBtQml0bWFwID0gbnVsbDsKLSAgICAgICAgICAgIG1JbWFnZSA9IGltYWdlOwotICAgICAgICAgICAgbUZsYWdzID0gZmxhZ3M7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiogVGhlIEdyYXBoaWNzMkQsIGd1YXJhbnRlZWQgdG8gYmUgbm9uIG51bGwgKi8KLSAgICAgICAgR3JhcGhpY3MyRCBnZXRHcmFwaGljcygpIHsKLSAgICAgICAgICAgIHJldHVybiBtR3JhcGhpY3M7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiogVGhlIEJ1ZmZlcmVkSW1hZ2UsIGd1YXJhbnRlZWQgdG8gYmUgbm9uIG51bGwgKi8KLSAgICAgICAgQnVmZmVyZWRJbWFnZSBnZXRJbWFnZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtSW1hZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiogUmV0dXJucyB0aGUgbGF5ZXIgc2F2ZSBmbGFncy4gVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBhZGRpdGlvbmFsIGxheWVycy4KLSAgICAgICAgICogRm9yIHRoZSBiYXNlIGxheWVyIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIDA7Ci0gICAgICAgICAqIEZvciBhIGdpdmVuIGxheWVyLCBhbGwgZnVydGhlciBjb3BpZXMgb2YgdGhpcyB7QGxpbmsgTGF5ZXJ9IG9iamVjdCBpbiBuZXcgc25hcHNob3RzCi0gICAgICAgICAqIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgc2FtZSB2YWx1ZS4KLSAgICAgICAgICovCi0gICAgICAgIGludCBnZXRGbGFncygpIHsKLSAgICAgICAgICAgIHJldHVybiBtRmxhZ3M7Ci0gICAgICAgIH0KLQotICAgICAgICBMYXllciBtYWtlQ29weSgpIHsKLSAgICAgICAgICAgIGlmIChtQml0bWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExheWVyKChHcmFwaGljczJEKSBtR3JhcGhpY3MuY3JlYXRlKCksIG1CaXRtYXApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbmV3IExheWVyKChHcmFwaGljczJEKSBtR3JhcGhpY3MuY3JlYXRlKCksIG1JbWFnZSwgbUZsYWdzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKiBzZXRzIGFuIG9wdGlvbmFsIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGNvbnRlbnQgdG8gYmUgdXNlZCBkdXJpbmcgcmVzdG9yZSAqLwotICAgICAgICB2b2lkIHNldE9yaWdpbmFsQ29weShCdWZmZXJlZEltYWdlIGltYWdlKSB7Ci0gICAgICAgICAgICBtT3JpZ2luYWxDb3B5ID0gaW1hZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWZmZXJlZEltYWdlIGdldE9yaWdpbmFsQ29weSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtT3JpZ2luYWxDb3B5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjaGFuZ2UoKSB7Ci0gICAgICAgICAgICBpZiAobUJpdG1hcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUJpdG1hcC5jaGFuZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSBjbGlwIGZvciB0aGUgZ3JhcGhpY3MyRCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXllci4KLSAgICAgICAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBvdmVyIHRoZSBub3JtYWwgR3JhcGhpY3MyRCBzZXRDbGlwIG1ldGhvZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGNsaXBTaGFwZSB0aGUgc2hhcGUgdG8gdXNlIGEgdGhlIGNsaXAgc2hhcGUuCi0gICAgICAgICAqLwotICAgICAgICB2b2lkIHNldENsaXAoU2hhcGUgY2xpcFNoYXBlKSB7Ci0gICAgICAgICAgICAvLyBiZWNhdXNlIHNldENsaXAgaXMgb25seSBndWFyYW50ZWVkIHRvIHdvcmsgd2l0aCByZWN0YW5nbGUgc2hhcGUsCi0gICAgICAgICAgICAvLyBmaXJzdCByZXNldCB0aGUgY2xpcCB0byBtYXggYW5kIHRoZW4gaW50ZXJzZWN0IHRoZSBjdXJyZW50IChlbXB0eSkKLSAgICAgICAgICAgIC8vIGNsaXAgd2l0aCB0aGUgc2hhcC4KLSAgICAgICAgICAgIG1HcmFwaGljcy5zZXRDbGlwKG51bGwpOwotICAgICAgICAgICAgbUdyYXBoaWNzLmNsaXAoY2xpcFNoYXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDbGlwcyB0aGUgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gc2hhcGUuIFRoaXMgcGVyZm9ybXMgYW4gaW50ZXJzZWN0IGJldHdlZW4gdGhlIGN1cnJlbnQKLSAgICAgICAgICogY2xpcCBzaGFwZSBhbmQgdGhlIGdpdmVuIHNoYXBlLgotICAgICAgICAgKiBAcGFyYW0gc2hhcGUgdGhlIG5ldyBjbGlwIHNoYXBlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgY2xpcChTaGFwZSBzaGFwZSkgewotICAgICAgICAgICAgbUdyYXBoaWNzLmNsaXAoc2hhcGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyB0aGUgcm9vdCBzbmFwc2hvdCBhc3NvY2lhdGluZyBpdCB3aXRoIGEgZ2l2ZW4gYml0bWFwLgotICAgICAqIDxwPgotICAgICAqIElmIDx2YXI+Yml0bWFwPC92YXI+IGlzIG51bGwsIHRoZW4ge0BsaW5rIEdjU25hcHNob3Qjc2V0Qml0bWFwKEJpdG1hcF9EZWxlZ2F0ZSl9IG11c3QgYmUKLSAgICAgKiBjYWxsZWQgYmVmb3JlIHRoZSBzbmFwc2hvdCBjYW4gYmUgdXNlZCB0byBkcmF3LiBUcmFuc2Zvcm0gYW5kIGNsaXAgb3BlcmF0aW9ucyBhcmUgcGVybWl0dGVkCi0gICAgICogYmVmb3JlLgotICAgICAqCi0gICAgICogQHBhcmFtIGltYWdlIHRoZSBpbWFnZSB0byBhc3NvY2lhdGUgdG8gdGhlIHNuYXBzaG90IG9yIG51bGwuCi0gICAgICogQHJldHVybiB0aGUgcm9vdCBzbmFwc2hvdAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgR2NTbmFwc2hvdCBjcmVhdGVEZWZhdWx0U25hcHNob3QoQml0bWFwX0RlbGVnYXRlIGJpdG1hcCkgewotICAgICAgICBHY1NuYXBzaG90IHNuYXBzaG90ID0gbmV3IEdjU25hcHNob3QoKTsKLSAgICAgICAgaWYgKGJpdG1hcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzbmFwc2hvdC5zZXRCaXRtYXAoYml0bWFwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzbmFwc2hvdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYXZlcyB0aGUgY3VycmVudCBzdGF0ZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZsYWdzIGFuZCByZXR1cm5zIHRoZSBuZXcgY3VycmVudCBzbmFwc2hvdC4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB7QGxpbmsgQ2FudmFzI3NhdmUoaW50KX0KLSAgICAgKgotICAgICAqIEBwYXJhbSBmbGFncyB0aGUgc2F2ZSBmbGFncy4KLSAgICAgKiBAcmV0dXJuIHRoZSBuZXcgc25hcHNob3QKLSAgICAgKgotICAgICAqIEBzZWUgQ2FudmFzI3NhdmUoaW50KQotICAgICAqLwotICAgIHB1YmxpYyBHY1NuYXBzaG90IHNhdmUoaW50IGZsYWdzKSB7Ci0gICAgICAgIHJldHVybiBuZXcgR2NTbmFwc2hvdCh0aGlzLCBudWxsIC8qbGF5ZXJib3VuZHMqLywgbnVsbCAvKnBhaW50Ki8sIGZsYWdzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYXZlcyB0aGUgY3VycmVudCBzdGF0ZSBhbmQgY3JlYXRlcyBhIG5ldyBsYXllciwgYW5kIHJldHVybnMgdGhlIG5ldyBjdXJyZW50IHNuYXBzaG90LgotICAgICAqIDxwLz4KLSAgICAgKiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHtAbGluayBDYW52YXMjc2F2ZUxheWVyKFJlY3RGLCBQYWludCwgaW50KX0KLSAgICAgKgotICAgICAqIEBwYXJhbSBsYXllckJvdW5kcyB0aGUgbGF5ZXIgYm91bmRzCi0gICAgICogQHBhcmFtIHBhaW50IHRoZSBQYWludCBpbmZvcm1hdGlvbiB1c2VkIHRvIGJsaXQgdGhlIGxheWVyIGJhY2sgaW50byB0aGUgbGF5ZXJzIHVuZGVybmVhdGgKLSAgICAgKiAgICAgICAgICB1cG9uIHJlc3RvcmUKLSAgICAgKiBAcGFyYW0gZmxhZ3MgdGhlIHNhdmUgZmxhZ3MuCi0gICAgICogQHJldHVybiB0aGUgbmV3IHNuYXBzaG90Ci0gICAgICoKLSAgICAgKiBAc2VlIENhbnZhcyNzYXZlTGF5ZXIoUmVjdEYsIFBhaW50LCBpbnQpCi0gICAgICovCi0gICAgcHVibGljIEdjU25hcHNob3Qgc2F2ZUxheWVyKFJlY3RGIGxheWVyQm91bmRzLCBQYWludF9EZWxlZ2F0ZSBwYWludCwgaW50IGZsYWdzKSB7Ci0gICAgICAgIHJldHVybiBuZXcgR2NTbmFwc2hvdCh0aGlzLCBsYXllckJvdW5kcywgcGFpbnQsIGZsYWdzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIHRoZSByb290IHNuYXBzaG90LgotICAgICAqIHtAbGluayAjc2V0R3JhcGhpY3MyRChHcmFwaGljczJEKX0gd2lsbCBoYXZlIHRvIGJlIGNhbGxlZCBvbiBpdCB3aGVuIHBvc3NpYmxlLgotICAgICAqLwotICAgIHByaXZhdGUgR2NTbmFwc2hvdCgpIHsKLSAgICAgICAgbVByZXZpb3VzID0gbnVsbDsKLSAgICAgICAgbUZsYWdzID0gMDsKLSAgICAgICAgbUxvY2FsTGF5ZXIgPSBudWxsOwotICAgICAgICBtTG9jYWxMYXllclBhaW50ID0gbnVsbDsKLSAgICAgICAgbUxheWVyQm91bmRzID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBHY1NuYXBzaG90fSBvbiB0b3Agb2YgYW5vdGhlciBvbmUsIHdpdGggYSBsYXllciBkYXRhIHRvIGJlIHJlc3RvcmVkCi0gICAgICogaW50byB0aGUgbWFpbiBncmFwaGljcyB3aGVuIHtAbGluayAjcmVzdG9yZSgpfSBpcyBjYWxsZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJldmlvdXMgdGhlIHByZXZpb3VzIHNuYXBzaG90IGhlYWQuCi0gICAgICogQHBhcmFtIGxheWVyQm91bmRzIHRoZSByZWdpb24gb2YgdGhlIGxheWVyLiBPcHRpb25hbCwgaWYgbnVsbCwgdGhpcyBpcyBhIG5vcm1hbCBzYXZlKCkKLSAgICAgKiBAcGFyYW0gcGFpbnQgdGhlIFBhaW50IGluZm9ybWF0aW9uIHVzZWQgdG8gYmxpdCB0aGUgbGF5ZXIgYmFjayBpbnRvIHRoZSBsYXllcnMgdW5kZXJuZWF0aAotICAgICAqICAgICAgICAgIHVwb24gcmVzdG9yZQotICAgICAqIEBwYXJhbSBmbGFncyB0aGUgZmxhZ3MgcmVnYXJkaW5nIHdoYXQgc2hvdWxkIGJlIHNhdmVkLgotICAgICAqLwotICAgIHByaXZhdGUgR2NTbmFwc2hvdChHY1NuYXBzaG90IHByZXZpb3VzLCBSZWN0RiBsYXllckJvdW5kcywgUGFpbnRfRGVsZWdhdGUgcGFpbnQsIGludCBmbGFncykgewotICAgICAgICBhc3NlcnQgcHJldmlvdXMgIT0gbnVsbDsKLSAgICAgICAgbVByZXZpb3VzID0gcHJldmlvdXM7Ci0gICAgICAgIG1GbGFncyA9IGZsYWdzOwotCi0gICAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGxheWVycyBiZWZvcmUgYWRkaW5nIHRoZSBuZXcgb25lLgotICAgICAgICAvLyBUaGlzIGtlZXBzIHRoZSBzYW1lIEJ1ZmZlcmVkSW1hZ2UgcmVmZXJlbmNlIGJ1dCBjcmVhdGVzIG5ldyBHcmFwaGljczJEIGZvciB0aGlzCi0gICAgICAgIC8vIHNuYXBzaG90LgotICAgICAgICAvLyBJdCBkb2VzIG5vdCBjb3B5IHdoYXRldmVyIG9yaWdpbmFsIGNvcHkgdGhlIGxheWVycyBoYXZlLCBhcyB0aGV5IHdpbGwgYmUgZG9uZQotICAgICAgICAvLyBvbmx5IGlmIHRoZSBuZXcgbGF5ZXIgZG9lc24ndCBjbGlwIGRyYXdpbmcgdG8gaXRzZWxmLgotICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbVByZXZpb3VzLm1MYXllcnMpIHsKLSAgICAgICAgICAgIG1MYXllcnMuYWRkKGxheWVyLm1ha2VDb3B5KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxheWVyQm91bmRzICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIGdldCB0aGUgY3VycmVudCB0cmFuc2Zvcm0KLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBtTGF5ZXJzLmdldCgwKS5nZXRHcmFwaGljcygpLmdldFRyYW5zZm9ybSgpOwotCi0gICAgICAgICAgICAvLyB0cmFuc2Zvcm0gdGhlIGxheWVyQm91bmRzIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtIGFuZCBzdG9yZXMgaXQgaW50byBhIGludCByZWN0Ci0gICAgICAgICAgICBSZWN0RiByZWN0MiA9IG5ldyBSZWN0RigpOwotICAgICAgICAgICAgbWFwUmVjdChtYXRyaXgsIHJlY3QyLCBsYXllckJvdW5kcyk7Ci0gICAgICAgICAgICBtTGF5ZXJCb3VuZHMgPSBuZXcgUmVjdCgpOwotICAgICAgICAgICAgcmVjdDIucm91bmQobUxheWVyQm91bmRzKTsKLQotICAgICAgICAgICAgLy8gZ2V0IHRoZSBiYXNlIGxheWVyIChhbHdheXMgYXQgaW5kZXggMCkKLSAgICAgICAgICAgIExheWVyIGJhc2VMYXllciA9IG1MYXllcnMuZ2V0KDApOwotCi0gICAgICAgICAgICAvLyBjcmVhdGUgdGhlIGltYWdlIGZvciB0aGUgbGF5ZXIKLSAgICAgICAgICAgIEJ1ZmZlcmVkSW1hZ2UgbGF5ZXJJbWFnZSA9IG5ldyBCdWZmZXJlZEltYWdlKAotICAgICAgICAgICAgICAgICAgICBiYXNlTGF5ZXIuZ2V0SW1hZ2UoKS5nZXRXaWR0aCgpLAotICAgICAgICAgICAgICAgICAgICBiYXNlTGF5ZXIuZ2V0SW1hZ2UoKS5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgKG1GbGFncyAmIENhbnZhcy5IQVNfQUxQSEFfTEFZRVJfU0FWRV9GTEFHKSAhPSAwID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0IgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQik7Ci0KLSAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGdyYXBoaWNzIGZvciBpdCBzbyB0aGF0IGRyYXdpbmcgY2FuIGJlIGRvbmUuCi0gICAgICAgICAgICBHcmFwaGljczJEIGxheWVyR3JhcGhpY3MgPSBsYXllckltYWdlLmNyZWF0ZUdyYXBoaWNzKCk7Ci0KLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBsYXllciBpbmhlcml0cyB0aGUgY3VycmVudCBjb250ZXh0IGZvciB0cmFuc2Zvcm0gYW5kIGNsaXAsCi0gICAgICAgICAgICAvLyBzZXQgdGhlbSB0byBvbmUgZnJvbSB0aGUgYmFzZSBsYXllci4KLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50TXR4ID0gYmFzZUxheWVyLmdldEdyYXBoaWNzKCkuZ2V0VHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICBsYXllckdyYXBoaWNzLnNldFRyYW5zZm9ybShjdXJyZW50TXR4KTsKLQotICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGxheWVyIGZvciB0aGlzIG5ldyBsYXllciBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IGF0IHRoZSBlbmQuCi0gICAgICAgICAgICBtTGF5ZXJzLmFkZChtTG9jYWxMYXllciA9IG5ldyBMYXllcihsYXllckdyYXBoaWNzLCBsYXllckltYWdlLCBmbGFncykpOwotCi0gICAgICAgICAgICAvLyBzZXQgdGhlIGNsaXAgb24gaXQuCi0gICAgICAgICAgICBTaGFwZSBjdXJyZW50Q2xpcCA9IGJhc2VMYXllci5nZXRHcmFwaGljcygpLmdldENsaXAoKTsKLSAgICAgICAgICAgIG1Mb2NhbExheWVyLnNldENsaXAoY3VycmVudENsaXApOwotCi0gICAgICAgICAgICAvLyBpZiB0aGUgZHJhd2luZyBpcyBub3QgY2xpcHBlZCB0byB0aGUgbG9jYWwgbGF5ZXIgb25seSwgd2Ugc2F2ZSB0aGUgY3VycmVudCBjb250ZW50Ci0gICAgICAgICAgICAvLyBvZiBhbGwgb3RoZXIgbGF5ZXJzLiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBwYXJ0IHRoYXQgd2lsbCBhY3R1YWxseQotICAgICAgICAgICAgLy8gYmUgZHJhd24sIHNvIHdlIGNyZWF0ZSBhcyBzbWFsbCBiaXRtYXBzIGFzIHdlIGNhbi4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gZXJhc2UgdGhlIGRyYXdpbmcgdGhhdCBnb2VzIGluIHRoZSBsYXllcnMgYmVsb3cgdGhhdCB3aWxsCi0gICAgICAgICAgICAvLyBiZSBjb21pbmcgZnJvbSB0aGUgbGF5ZXIgaXRzZWxmLgotICAgICAgICAgICAgaWYgKChtRmxhZ3MgJiBDYW52YXMuQ0xJUF9UT19MQVlFUl9TQVZFX0ZMQUcpID09IDApIHsKLSAgICAgICAgICAgICAgICBpbnQgdyA9IG1MYXllckJvdW5kcy53aWR0aCgpOwotICAgICAgICAgICAgICAgIGludCBoID0gbUxheWVyQm91bmRzLmhlaWdodCgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG1MYXllcnMuc2l6ZSgpIC0gMSA7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMYXllciBsYXllciA9IG1MYXllcnMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gbmV3IEJ1ZmZlcmVkSW1hZ2UodywgaCwgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCKTsKLSAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3MyRCBncmFwaGljcyA9IGltYWdlLmNyZWF0ZUdyYXBoaWNzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmRyYXdJbWFnZShsYXllci5nZXRJbWFnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHcsIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxheWVyQm91bmRzLmxlZnQsIG1MYXllckJvdW5kcy50b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGF5ZXJCb3VuZHMucmlnaHQsIG1MYXllckJvdW5kcy5ib3R0b20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0T3JpZ2luYWxDb3B5KGltYWdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtTG9jYWxMYXllciA9IG51bGw7Ci0gICAgICAgICAgICBtTGF5ZXJCb3VuZHMgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgbUxvY2FsTGF5ZXJQYWludCAgPSBwYWludDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgbGF5ZXIuZ2V0R3JhcGhpY3MoKS5kaXNwb3NlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVByZXZpb3VzICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1QcmV2aW91cy5kaXNwb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXN0b3JlcyB0aGUgdG9wIHtAbGluayBHY1NuYXBzaG90fSwgYW5kIHJldHVybnMgdGhlIG5leHQgb25lLgotICAgICAqLwotICAgIHB1YmxpYyBHY1NuYXBzaG90IHJlc3RvcmUoKSB7Ci0gICAgICAgIHJldHVybiBkb1Jlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXN0b3JlcyB0aGUge0BsaW5rIEdjU25hcHNob3R9IHRvIDx2YXI+c2F2ZUNvdW50PC92YXI+LgotICAgICAqIEBwYXJhbSBzYXZlQ291bnQgdGhlIHNhdmVDb3VudCBvciAtMSB0byBvbmx5IHJlc3RvcmUgMS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIG5ldyBoZWFkIG9mIHRoZSBHYyBzbmFwc2hvdCBzdGFjay4KLSAgICAgKi8KLSAgICBwdWJsaWMgR2NTbmFwc2hvdCByZXN0b3JlVG8oaW50IHNhdmVDb3VudCkgewotICAgICAgICByZXR1cm4gZG9SZXN0b3JlVG8oc2l6ZSgpLCBzYXZlQ291bnQpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgc2l6ZSgpIHsKLSAgICAgICAgaWYgKG1QcmV2aW91cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVByZXZpb3VzLnNpemUoKSArIDE7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMaW5rIHRoZSBzbmFwc2hvdCB0byBhIEJpdG1hcF9EZWxlZ2F0ZS4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhpcyBpcyBvbmx5IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgc25hcHNob3Qgd2FzIGNyZWF0ZWQgd2l0aCBhIG51bGwgaW1hZ2Ugd2hlbiBjYWxsaW5nCi0gICAgICoge0BsaW5rICNjcmVhdGVEZWZhdWx0U25hcHNob3QoQml0bWFwX0RlbGVnYXRlKX0sIGFuZCBpcyB0aGVyZWZvcmUgbm90IHlldCBsaW5rZWQgdG8KLSAgICAgKiBhIHByZXZpb3VzIHNuYXBzaG90LgotICAgICAqIDxwLz4KLSAgICAgKiBJZiBhbnkgdHJhbnNmb3JtIG9yIGNsaXAgaW5mb3JtYXRpb24gd2FzIHNldCBiZWZvcmUsIHRoZXkgYXJlIHB1dCBpbnRvIHRoZSBHcmFwaGljcyBvYmplY3QuCi0gICAgICogQHBhcmFtIGJpdG1hcCB0aGUgYml0bWFwIHRvIGxpbmsgdG8uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Qml0bWFwKEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXApIHsKLSAgICAgICAgLy8gY3JlYXRlIGEgbmV3IExheWVyIGZvciB0aGUgYml0bWFwLiBUaGlzIHdpbGwgYmUgdGhlIGJhc2UgbGF5ZXIuCi0gICAgICAgIEdyYXBoaWNzMkQgZ3JhcGhpY3MyRCA9IGJpdG1hcC5nZXRJbWFnZSgpLmNyZWF0ZUdyYXBoaWNzKCk7Ci0gICAgICAgIExheWVyIGJhc2VMYXllciA9IG5ldyBMYXllcihncmFwaGljczJELCBiaXRtYXApOwotCi0gICAgICAgIC8vIFNldCB0aGUgY3VycmVudCB0cmFuc2Zvcm0gYW5kIGNsaXAgd2hpY2ggY2FuIGVpdGhlciBjb21lIGZyb20gbVRyYW5zZm9ybS9tQ2xpcCBpZiB0aGV5Ci0gICAgICAgIC8vIHdlcmUgc2V0IHdoZW4gdGhlcmUgd2FzIG5vIGJpdG1hcC9sYXllcnMgb3IgZnJvbSB0aGUgY3VycmVudCBiYXNlIGxheWVycyBpZiB0aGVyZSBpcwotICAgICAgICAvLyBvbmUgYWxyZWFkeS4KLQotICAgICAgICBncmFwaGljczJELnNldFRyYW5zZm9ybShnZXRUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIC8vIHJlc2V0IG1UcmFuc2Zvcm0gaW4gY2FzZSB0aGVyZSB3YXMgb25lLgotICAgICAgICBtVHJhbnNmb3JtID0gbnVsbDsKLQotICAgICAgICBiYXNlTGF5ZXIuc2V0Q2xpcChnZXRDbGlwKCkpOwotICAgICAgICAvLyByZXNldCBtQ2xpcCBpbiBjYXNlIHRoZXJlIHdhcyBvbmUuCi0gICAgICAgIG1DbGlwID0gbnVsbDsKLQotICAgICAgICAvLyByZXBsYWNlIHdoYXRldmVyIGN1cnJlbnQgbGF5ZXJzIHdlIGhhdmUgd2l0aCB0aGlzLgotICAgICAgICBtTGF5ZXJzLmNsZWFyKCk7Ci0gICAgICAgIG1MYXllcnMuYWRkKGJhc2VMYXllcik7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0cmFuc2xhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIGlmIChtTGF5ZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGZvciAoTGF5ZXIgbGF5ZXIgOiBtTGF5ZXJzKSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXIuZ2V0R3JhcGhpY3MoKS50cmFuc2xhdGUoZHgsIGR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtVHJhbnNmb3JtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtID0gbmV3IEFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVRyYW5zZm9ybS50cmFuc2xhdGUoZHgsIGR5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJvdGF0ZShkb3VibGUgcmFkaWFucykgewotICAgICAgICBpZiAobUxheWVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgICAgIGxheWVyLmdldEdyYXBoaWNzKCkucm90YXRlKHJhZGlhbnMpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1UcmFuc2Zvcm0gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm0gPSBuZXcgQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtVHJhbnNmb3JtLnJvdGF0ZShyYWRpYW5zKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkgewotICAgICAgICBpZiAobUxheWVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgICAgIGxheWVyLmdldEdyYXBoaWNzKCkuc2NhbGUoc3gsIHN5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtVHJhbnNmb3JtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtID0gbmV3IEFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVRyYW5zZm9ybS5zY2FsZShzeCwgc3kpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIEFmZmluZVRyYW5zZm9ybSBnZXRUcmFuc2Zvcm0oKSB7Ci0gICAgICAgIGlmIChtTGF5ZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIGFsbCBncmFwaGljczJEIGluIHRoZSBsaXN0IGhhdmUgdGhlIHNhbWUgdHJhbnNmb3JtCi0gICAgICAgICAgICByZXR1cm4gbUxheWVycy5nZXQoMCkuZ2V0R3JhcGhpY3MoKS5nZXRUcmFuc2Zvcm0oKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtVHJhbnNmb3JtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtID0gbmV3IEFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1UcmFuc2Zvcm07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSkgewotICAgICAgICBpZiAobUxheWVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgICAgIGxheWVyLmdldEdyYXBoaWNzKCkuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobVRyYW5zZm9ybSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVRyYW5zZm9ybSA9IG5ldyBBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1UcmFuc2Zvcm0uc2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBjbGlwKFNoYXBlIHNoYXBlLCBpbnQgcmVnaW9uT3ApIHsKLSAgICAgICAgLy8gU2ltcGxlIGNhc2Ugb2YgaW50ZXJzZWN0IHdpdGggZXhpc3RpbmcgbGF5ZXJzLgotICAgICAgICAvLyBCZWNhdXNlIEdyYXBoaWNzMkQjc2V0Q2xpcCB3b3JrcyBhIGJpdCBwZWN1bGlhcmx5LCB3ZSBvcHRpbWl6ZQotICAgICAgICAvLyB0aGUgY2FzZSBvZiBjbGlwcGluZyBieSBpbnRlcnNlY3Rpb24sIGFzIGl0J3Mgc3VwcG9ydGVkIG5hdGl2ZWx5LgotICAgICAgICBpZiAocmVnaW9uT3AgPT0gUmVnaW9uLk9wLklOVEVSU0VDVC5uYXRpdmVJbnQgJiYgbUxheWVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgICAgIGxheWVyLmNsaXAoc2hhcGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTaGFwZSBjdXJyZW50Q2xpcCA9IGdldENsaXAoKTsKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50Q2xpcCAhPSBudWxsICYmIGN1cnJlbnRDbGlwLmdldEJvdW5kcygpLmlzRW1wdHkoKSA9PSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEFyZWEgYXJlYSA9IG51bGw7Ci0KLSAgICAgICAgaWYgKHJlZ2lvbk9wID09IFJlZ2lvbi5PcC5SRVBMQUNFLm5hdGl2ZUludCkgewotICAgICAgICAgICAgYXJlYSA9IG5ldyBBcmVhKHNoYXBlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFyZWEgPSBSZWdpb25fRGVsZWdhdGUuY29tYmluZVNoYXBlcyhnZXRDbGlwKCksIHNoYXBlLCByZWdpb25PcCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnQgYXJlYSAhPSBudWxsOwotCi0gICAgICAgIGlmIChtTGF5ZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGlmIChhcmVhICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgICAgICAgICBsYXllci5zZXRDbGlwKGFyZWEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU2hhcGUgY3VycmVudENsaXAgPSBnZXRDbGlwKCk7Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudENsaXAgIT0gbnVsbCAmJiBjdXJyZW50Q2xpcC5nZXRCb3VuZHMoKS5pc0VtcHR5KCkgPT0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXJlYSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNsaXAgPSBhcmVhOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtQ2xpcCA9IG5ldyBBcmVhKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBtQ2xpcC5nZXRCb3VuZHMoKS5pc0VtcHR5KCkgPT0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBjbGlwUmVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGludCByZWdpb25PcCkgewotICAgICAgICByZXR1cm4gY2xpcChuZXcgUmVjdGFuZ2xlMkQuRmxvYXQobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCksIHJlZ2lvbk9wKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNsaXAsIG9yIG51bGwgaWYgbm9uZSBoYXZlIGJlZW4gc2V0dXAuCi0gICAgICovCi0gICAgcHVibGljIFNoYXBlIGdldENsaXAoKSB7Ci0gICAgICAgIGlmIChtTGF5ZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIHRoZXkgYWxsIGhhdmUgdGhlIHNhbWUgY2xpcAotICAgICAgICAgICAgcmV0dXJuIG1MYXllcnMuZ2V0KDApLmdldEdyYXBoaWNzKCkuZ2V0Q2xpcCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG1DbGlwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBHY1NuYXBzaG90IGRvUmVzdG9yZVRvKGludCBzaXplLCBpbnQgc2F2ZUNvdW50KSB7Ci0gICAgICAgIGlmIChzaXplIDw9IHNhdmVDb3VudCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZXN0b3JlIHRoZSBjdXJyZW50IG9uZSBmaXJzdC4KLSAgICAgICAgR2NTbmFwc2hvdCBwcmV2aW91cyA9IGRvUmVzdG9yZSgpOwotCi0gICAgICAgIGlmIChzaXplID09IHNhdmVDb3VudCArIDEpIHsgLy8gdGhpcyB3YXMgdGhlIG9ubHkgb25lIHRoYXQgbmVlZGVkIHJlc3RvcmUuCi0gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gcHJldmlvdXMuZG9SZXN0b3JlVG8oc2l6ZSAtIDEsIHNhdmVDb3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFeGVjdXRlcyB0aGUgRHJhd2FibGUncyBkcmF3IG1ldGhvZCwgd2l0aCBhIG51bGwgcGFpbnQgZGVsZWdhdGUuCi0gICAgICogPHAvPgotICAgICAqIE5vdGUgdGhhdCB0aGUgbWV0aG9kIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBhY3RpdmUgbGF5ZXIuCi0gICAgICogQHBhcmFtIGRyYXdhYmxlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZHJhdyhEcmF3YWJsZSBkcmF3YWJsZSkgewotICAgICAgICBkcmF3KGRyYXdhYmxlLCBudWxsLCBmYWxzZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXhlY3V0ZXMgdGhlIERyYXdhYmxlJ3MgZHJhdyBtZXRob2QuCi0gICAgICogPHAvPgotICAgICAqIE5vdGUgdGhhdCB0aGUgbWV0aG9kIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBhY3RpdmUgbGF5ZXIuCi0gICAgICogQHBhcmFtIGRyYXdhYmxlCi0gICAgICogQHBhcmFtIHBhaW50Ci0gICAgICogQHBhcmFtIGNvbXBvc2l0ZU9ubHkgd2hldGhlciB0aGUgcGFpbnQgaXMgdXNlZCBmb3IgY29tcG9zaXRlIG9ubHkuIFRoaXMgaXMgdHlwaWNhbGx5Ci0gICAgICogICAgICAgICAgdGhlIGNhc2UgZm9yIGJpdG1hcHMuCi0gICAgICogQHBhcmFtIGZvcmNlU3JjTW9kZSBpZiB0cnVlLCB0aGlzIG92ZXJyaWRlcyB0aGUgY29tcG9zaXRlIHRvIGJlIFNSQwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRyYXcoRHJhd2FibGUgZHJhd2FibGUsIFBhaW50X0RlbGVnYXRlIHBhaW50LCBib29sZWFuIGNvbXBvc2l0ZU9ubHksCi0gICAgICAgICAgICBib29sZWFuIGZvcmNlU3JjTW9kZSkgewotICAgICAgICAvLyB0aGUgY3VycmVudCBzbmFwc2hvdCBtYXkgbm90IGhhdmUgYSBtTG9jYWxMYXllciAoaWUgaXQgd2FzIGNyZWF0ZWQgb24gc2F2ZSgpIGluc3RlYWQKLSAgICAgICAgLy8gb2Ygc2F2ZUxheWVyKCksIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGVyZSdzIG5vIGxheWVyLgotICAgICAgICAvLyBtTGF5ZXJzIGhvd2V2ZXIgc2F2ZXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIChmbGFncykuCi0gICAgICAgIGlmIChtTGF5ZXJzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAvLyBubyBsYXllciwgb25seSBiYXNlIGxheWVyLiBlYXN5IGNhc2UuCi0gICAgICAgICAgICBkcmF3SW5MYXllcihtTGF5ZXJzLmdldCgwKSwgZHJhd2FibGUsIHBhaW50LCBjb21wb3NpdGVPbmx5LCBmb3JjZVNyY01vZGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gZHJhdyBpbiBhbGwgdGhlIGxheWVycyB1bnRpbCB0aGUgbGF5ZXIgc2F2ZSBmbGFncyB0ZWxscyB1cyB0byBzdG9wIChpZSBkcmF3aW5nCi0gICAgICAgICAgICAvLyBpbiB0aGF0IGxheWVyIGlzIGxpbWl0ZWQgdG8gdGhlIGxheWVyIGl0c2VsZi4KLSAgICAgICAgICAgIGludCBmbGFnczsKLSAgICAgICAgICAgIGludCBpID0gbUxheWVycy5zaXplKCkgLSAxOwotCi0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgTGF5ZXIgbGF5ZXIgPSBtTGF5ZXJzLmdldChpKTsKLQotICAgICAgICAgICAgICAgIGRyYXdJbkxheWVyKGxheWVyLCBkcmF3YWJsZSwgcGFpbnQsIGNvbXBvc2l0ZU9ubHksIGZvcmNlU3JjTW9kZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0aGVuIGdvIHRvIHByZXZpb3VzIGxheWVyLCBvbmx5IGlmIHRoZXJlIGFyZSBhbnkgbGVmdCwgYW5kIGl0cyBmbGFncwotICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgcmVzdHJpY3QgZHJhd2luZyB0byB0aGUgbGF5ZXIgaXRzZWxmLgotICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgICAgICBmbGFncyA9IGxheWVyLmdldEZsYWdzKCk7Ci0gICAgICAgICAgICB9IHdoaWxlIChpID49IDAgJiYgKGZsYWdzICYgQ2FudmFzLkNMSVBfVE9fTEFZRVJfU0FWRV9GTEFHKSA9PSAwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkcmF3SW5MYXllcihMYXllciBsYXllciwgRHJhd2FibGUgZHJhd2FibGUsIFBhaW50X0RlbGVnYXRlIHBhaW50LAotICAgICAgICAgICAgYm9vbGVhbiBjb21wb3NpdGVPbmx5LCBib29sZWFuIGZvcmNlU3JjTW9kZSkgewotICAgICAgICBHcmFwaGljczJEIG9yaWdpbmFsR3JhcGhpY3MgPSBsYXllci5nZXRHcmFwaGljcygpOwotICAgICAgICAvLyBnZXQgYSBHcmFwaGljczJEIG9iamVjdCBjb25maWd1cmVkIHdpdGggdGhlIGRyYXdpbmcgcGFyYW1ldGVycy4KLSAgICAgICAgR3JhcGhpY3MyRCBjb25maWd1cmVkR3JhcGhpY3MyRCA9Ci0gICAgICAgICAgICBwYWludCAhPSBudWxsID8KLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ3VzdG9tR3JhcGhpY3Mob3JpZ2luYWxHcmFwaGljcywgcGFpbnQsIGNvbXBvc2l0ZU9ubHksIGZvcmNlU3JjTW9kZSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgKEdyYXBoaWNzMkQpIG9yaWdpbmFsR3JhcGhpY3MuY3JlYXRlKCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGRyYXdhYmxlLmRyYXcoY29uZmlndXJlZEdyYXBoaWNzMkQsIHBhaW50KTsKLSAgICAgICAgICAgIGxheWVyLmNoYW5nZSgpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgLy8gZGlzcG9zZSBHcmFwaGljczJEIG9iamVjdAotICAgICAgICAgICAgY29uZmlndXJlZEdyYXBoaWNzMkQuZGlzcG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBHY1NuYXBzaG90IGRvUmVzdG9yZSgpIHsKLSAgICAgICAgaWYgKG1QcmV2aW91cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAobUxvY2FsTGF5ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdG8gYmxpdCB0aGUgbGF5ZXJzIGluIHdoaWNoIHdlIGhhdmUgZHJhdywgaW4gdGhlIGxheWVyIGJlbmVhdGgKLSAgICAgICAgICAgICAgICAvLyB0aGVtLCBzdGFydGluZyB3aXRoIHRoZSB0b3Agb25lICh3aGljaCBpcyB0aGUgY3VycmVudCBsb2NhbCBsYXllcikuCi0gICAgICAgICAgICAgICAgaW50IGkgPSBtTGF5ZXJzLnNpemUoKSAtIDE7Ci0gICAgICAgICAgICAgICAgaW50IGZsYWdzOwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5ZXIgZHN0TGF5ZXIgPSBtTGF5ZXJzLmdldChpIC0gMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdG9yZUxheWVyKGRzdExheWVyKTsKLQotICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGRzdExheWVyLmdldEZsYWdzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlIChpID4gMCAmJiAoZmxhZ3MgJiBDYW52YXMuQ0xJUF9UT19MQVlFUl9TQVZFX0ZMQUcpID09IDApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpZiB0aGlzIHNuYXBzaG90IGRvZXMgbm90IHNhdmUgZXZlcnl0aGluZywgdGhlbiBzZXQgdGhlIHByZXZpb3VzIHNuYXBzaG90Ci0gICAgICAgICAgICAvLyB0byB0aGlzIHNuYXBzaG90IGNvbnRlbnQKLQotICAgICAgICAgICAgLy8gZGlkbid0IHNhdmUgdGhlIG1hdHJpeD8gc2V0IHRoZSBjdXJyZW50IG1hdHJpeCBvbiB0aGUgcHJldmlvdXMgc25hcHNob3QKLSAgICAgICAgICAgIGlmICgobUZsYWdzICYgQ2FudmFzLk1BVFJJWF9TQVZFX0ZMQUcpID09IDApIHsKLSAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbXR4ID0gZ2V0VHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChMYXllciBsYXllciA6IG1QcmV2aW91cy5tTGF5ZXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyLmdldEdyYXBoaWNzKCkuc2V0VHJhbnNmb3JtKG10eCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBkaWRuJ3Qgc2F2ZSB0aGUgY2xpcD8gc2V0IHRoZSBjdXJyZW50IGNsaXAgb24gdGhlIHByZXZpb3VzIHNuYXBzaG90Ci0gICAgICAgICAgICBpZiAoKG1GbGFncyAmIENhbnZhcy5DTElQX1NBVkVfRkxBRykgPT0gMCkgewotICAgICAgICAgICAgICAgIFNoYXBlIGNsaXAgPSBnZXRDbGlwKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChMYXllciBsYXllciA6IG1QcmV2aW91cy5tTGF5ZXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyLnNldENsaXAoY2xpcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChMYXllciBsYXllciA6IG1MYXllcnMpIHsKLSAgICAgICAgICAgIGxheWVyLmdldEdyYXBoaWNzKCkuZGlzcG9zZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1QcmV2aW91czsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVzdG9yZUxheWVyKExheWVyIGRzdExheWVyKSB7Ci0KLSAgICAgICAgR3JhcGhpY3MyRCBiYXNlR2Z4ID0gZHN0TGF5ZXIuZ2V0SW1hZ2UoKS5jcmVhdGVHcmFwaGljcygpOwotCi0gICAgICAgIC8vIGlmIHRoZSBsYXllciBjb250YWlucyBhbiBvcmlnaW5hbCBjb3B5IHRoaXMgbWVhbnMgdGhlIGZsYWdzCi0gICAgICAgIC8vIGRpZG4ndCByZXN0cmljdCBkcmF3aW5nIHRvIHRoZSBsb2NhbCBsYXllciBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlCi0gICAgICAgIC8vIGxheWVyIGJvdW5kcyBpbiB0aGUgbGF5ZXIgYmVuZWF0aCBkaWRuJ3QgcmVjZWl2ZSBhbnkgZHJhd2luZy4KLSAgICAgICAgLy8gc28gd2UgdXNlIHRoZSBvcmlnaW5hbENvcHkgdG8gZXJhc2UgdGhlIG5ldyBkcmF3aW5ncyBpbiB0aGVyZS4KLSAgICAgICAgQnVmZmVyZWRJbWFnZSBvcmlnaW5hbENvcHkgPSBkc3RMYXllci5nZXRPcmlnaW5hbENvcHkoKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsQ29weSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBHcmFwaGljczJEIGcgPSAoR3JhcGhpY3MyRCkgYmFzZUdmeC5jcmVhdGUoKTsKLSAgICAgICAgICAgIGcuc2V0Q29tcG9zaXRlKEFscGhhQ29tcG9zaXRlLlNyYyk7Ci0KLSAgICAgICAgICAgIGcuZHJhd0ltYWdlKG9yaWdpbmFsQ29weSwKLSAgICAgICAgICAgICAgICAgICAgbUxheWVyQm91bmRzLmxlZnQsIG1MYXllckJvdW5kcy50b3AsIG1MYXllckJvdW5kcy5yaWdodCwgbUxheWVyQm91bmRzLmJvdHRvbSwKLSAgICAgICAgICAgICAgICAgICAgMCwgMCwgbUxheWVyQm91bmRzLndpZHRoKCksIG1MYXllckJvdW5kcy5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgbnVsbCk7Ci0gICAgICAgICAgICBnLmRpc3Bvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG5vdyBkcmF3IHB1dCB0aGUgY29udGVudCBvZiB0aGUgbG9jYWwgbGF5ZXIgb250byB0aGUgbGF5ZXIsCi0gICAgICAgIC8vIHVzaW5nIHRoZSBwYWludCBpbmZvcm1hdGlvbgotICAgICAgICBHcmFwaGljczJEIGcgPSBjcmVhdGVDdXN0b21HcmFwaGljcyhiYXNlR2Z4LCBtTG9jYWxMYXllclBhaW50LAotICAgICAgICAgICAgICAgIHRydWUgLyphbHBoYU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLyk7Ci0KLSAgICAgICAgZy5kcmF3SW1hZ2UobUxvY2FsTGF5ZXIuZ2V0SW1hZ2UoKSwKLSAgICAgICAgICAgICAgICBtTGF5ZXJCb3VuZHMubGVmdCwgbUxheWVyQm91bmRzLnRvcCwgbUxheWVyQm91bmRzLnJpZ2h0LCBtTGF5ZXJCb3VuZHMuYm90dG9tLAotICAgICAgICAgICAgICAgIG1MYXllckJvdW5kcy5sZWZ0LCBtTGF5ZXJCb3VuZHMudG9wLCBtTGF5ZXJCb3VuZHMucmlnaHQsIG1MYXllckJvdW5kcy5ib3R0b20sCi0gICAgICAgICAgICAgICAgbnVsbCk7Ci0gICAgICAgIGcuZGlzcG9zZSgpOwotCi0gICAgICAgIGJhc2VHZnguZGlzcG9zZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIEdyYXBoaWNzMkR9IGJhc2VkIG9uIHRoZSB7QGxpbmsgUGFpbnR9IHBhcmFtZXRlcnMuCi0gICAgICogPHAvPlRoZSBvYmplY3QgbXVzdCBiZSBkaXNwb3NlZCAoe0BsaW5rIEdyYXBoaWNzMkQjZGlzcG9zZSgpfSkgYWZ0ZXIgYmVpbmcgdXNlZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIEdyYXBoaWNzMkQgY3JlYXRlQ3VzdG9tR3JhcGhpY3MoR3JhcGhpY3MyRCBvcmlnaW5hbCwgUGFpbnRfRGVsZWdhdGUgcGFpbnQsCi0gICAgICAgICAgICBib29sZWFuIGNvbXBvc2l0ZU9ubHksIGJvb2xlYW4gZm9yY2VTcmNNb2RlKSB7Ci0gICAgICAgIC8vIG1ha2UgbmV3IG9uZSBncmFwaGljcwotICAgICAgICBHcmFwaGljczJEIGcgPSAoR3JhcGhpY3MyRCkgb3JpZ2luYWwuY3JlYXRlKCk7Ci0KLSAgICAgICAgLy8gY29uZmlndXJlIGl0Ci0KLSAgICAgICAgaWYgKHBhaW50LmlzQW50aUFsaWFzZWQoKSkgewotICAgICAgICAgICAgZy5zZXRSZW5kZXJpbmdIaW50KAotICAgICAgICAgICAgICAgICAgICBSZW5kZXJpbmdIaW50cy5LRVlfQU5USUFMSUFTSU5HLCBSZW5kZXJpbmdIaW50cy5WQUxVRV9BTlRJQUxJQVNfT04pOwotICAgICAgICAgICAgZy5zZXRSZW5kZXJpbmdIaW50KAotICAgICAgICAgICAgICAgICAgICBSZW5kZXJpbmdIaW50cy5LRVlfVEVYVF9BTlRJQUxJQVNJTkcsIFJlbmRlcmluZ0hpbnRzLlZBTFVFX1RFWFRfQU5USUFMSUFTX09OKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gY3VzdG9tU2hhZGVyID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBzaGFkZXIgZmlyc3QsIGFzIGl0J2xsIHJlcGxhY2UgdGhlIGNvbG9yIGlmIGl0IGNhbiBiZSB1c2VkIGl0LgotICAgICAgICBpZiAoY29tcG9zaXRlT25seSA9PSBmYWxzZSkgewotICAgICAgICAgICAgU2hhZGVyX0RlbGVnYXRlIHNoYWRlckRlbGVnYXRlID0gcGFpbnQuZ2V0U2hhZGVyKCk7Ci0gICAgICAgICAgICBpZiAoc2hhZGVyRGVsZWdhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChzaGFkZXJEZWxlZ2F0ZS5pc1N1cHBvcnRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGphdmEuYXd0LlBhaW50IHNoYWRlclBhaW50ID0gc2hhZGVyRGVsZWdhdGUuZ2V0SmF2YVBhaW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBzaGFkZXJQYWludCAhPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZGVyUGFpbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZy5zZXRQYWludChzaGFkZXJQYWludCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21TaGFkZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1NIQURFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJEZWxlZ2F0ZS5nZXRTdXBwb3J0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyp0aHJvd2FibGUqLywgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpZiBubyBzaGFkZXIsIHVzZSB0aGUgcGFpbnQgY29sb3IKLSAgICAgICAgICAgIGlmIChjdXN0b21TaGFkZXIgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICBnLnNldENvbG9yKG5ldyBDb2xvcihwYWludC5nZXRDb2xvcigpLCB0cnVlIC8qaGFzQWxwaGEqLykpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBzZXQgdGhlIHN0cm9rZQotICAgICAgICAgICAgZy5zZXRTdHJva2UocGFpbnQuZ2V0SmF2YVN0cm9rZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoZSBhbHBoYSBmb3IgdGhlIGNvbXBvc2l0ZS4gQWx3YXlzIG9wYXF1ZSBpZiB0aGUgbm9ybWFsIHBhaW50IGNvbG9yIGlzIHVzZWQgc2luY2UKLSAgICAgICAgLy8gaXQgY29udGFpbnMgdGhlIGFscGhhCi0gICAgICAgIGludCBhbHBoYSA9IChjb21wb3NpdGVPbmx5IHx8IGN1c3RvbVNoYWRlcikgPyBwYWludC5nZXRBbHBoYSgpIDogMHhGRjsKLQotICAgICAgICBpZiAoZm9yY2VTcmNNb2RlKSB7Ci0gICAgICAgICAgICBnLnNldENvbXBvc2l0ZShBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZSgKLSAgICAgICAgICAgICAgICAgICAgQWxwaGFDb21wb3NpdGUuU1JDLCAoZmxvYXQpIGFscGhhIC8gMjU1LmYpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJvb2xlYW4gY3VzdG9tWGZlcm1vZGUgPSBmYWxzZTsKLSAgICAgICAgICAgIFhmZXJtb2RlX0RlbGVnYXRlIHhmZXJtb2RlRGVsZWdhdGUgPSBwYWludC5nZXRYZmVybW9kZSgpOwotICAgICAgICAgICAgaWYgKHhmZXJtb2RlRGVsZWdhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmICh4ZmVybW9kZURlbGVnYXRlLmlzU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IHhmZXJtb2RlRGVsZWdhdGUuZ2V0Q29tcG9zaXRlKGFscGhhKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGNvbXBvc2l0ZSAhPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9zaXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcuc2V0Q29tcG9zaXRlKGNvbXBvc2l0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21YZmVybW9kZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfWEZFUk1PREUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGZlcm1vZGVEZWxlZ2F0ZS5nZXRTdXBwb3J0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyp0aHJvd2FibGUqLywgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgbm8gY3VzdG9tIHhmZXJtb2RlLCBidXQgd2UgaGF2ZSBhbHBoYSAoZHVlIHRvIGEgc2hhZGVyIGFuZCBhIG5vbgotICAgICAgICAgICAgLy8gb3BhcXVlIGFscGhhIGNoYW5uZWwgaW4gdGhlIHBhaW50IGNvbG9yKSwgdGhlbiB3ZSBjcmVhdGUgYW4gQWxwaGFDb21wb3NpdGUgYW55d2F5Ci0gICAgICAgICAgICAvLyB0aGF0IHdpbGwgaGFuZGxlIHRoZSBhbHBoYS4KLSAgICAgICAgICAgIGlmIChjdXN0b21YZmVybW9kZSA9PSBmYWxzZSAmJiBhbHBoYSAhPSAweEZGKSB7Ci0gICAgICAgICAgICAgICAgZy5zZXRDb21wb3NpdGUoQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICBBbHBoYUNvbXBvc2l0ZS5TUkNfT1ZFUiwgKGZsb2F0KSBhbHBoYSAvIDI1NS5mKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZzsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbWFwUmVjdChBZmZpbmVUcmFuc2Zvcm0gbWF0cml4LCBSZWN0RiBkc3QsIFJlY3RGIHNyYykgewotICAgICAgICAvLyBhcnJheSB3aXRoIDQgY29ybmVycwotICAgICAgICBmbG9hdFtdIGNvcm5lcnMgPSBuZXcgZmxvYXRbXSB7Ci0gICAgICAgICAgICAgICAgc3JjLmxlZnQsIHNyYy50b3AsCi0gICAgICAgICAgICAgICAgc3JjLnJpZ2h0LCBzcmMudG9wLAotICAgICAgICAgICAgICAgIHNyYy5yaWdodCwgc3JjLmJvdHRvbSwKLSAgICAgICAgICAgICAgICBzcmMubGVmdCwgc3JjLmJvdHRvbSwKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBhcHBseSB0aGUgdHJhbnNmb3JtIHRvIHRoZW0uCi0gICAgICAgIG1hdHJpeC50cmFuc2Zvcm0oY29ybmVycywgMCwgY29ybmVycywgMCwgNCk7Ci0KLSAgICAgICAgLy8gbm93IHB1dCB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBXZSB0YWtlIHRoZSBtaW4vbWF4IG9mIFhzIGFuZCBtaW4vbWF4IG9mIFlzCi0gICAgICAgIGRzdC5sZWZ0ID0gTWF0aC5taW4oTWF0aC5taW4oY29ybmVyc1swXSwgY29ybmVyc1syXSksIE1hdGgubWluKGNvcm5lcnNbNF0sIGNvcm5lcnNbNl0pKTsKLSAgICAgICAgZHN0LnJpZ2h0ID0gTWF0aC5tYXgoTWF0aC5tYXgoY29ybmVyc1swXSwgY29ybmVyc1syXSksIE1hdGgubWF4KGNvcm5lcnNbNF0sIGNvcm5lcnNbNl0pKTsKLQotICAgICAgICBkc3QudG9wID0gTWF0aC5taW4oTWF0aC5taW4oY29ybmVyc1sxXSwgY29ybmVyc1szXSksIE1hdGgubWluKGNvcm5lcnNbNV0sIGNvcm5lcnNbN10pKTsKLSAgICAgICAgZHN0LmJvdHRvbSA9IE1hdGgubWF4KE1hdGgubWF4KGNvcm5lcnNbMV0sIGNvcm5lcnNbM10pLCBNYXRoLm1heChjb3JuZXJzWzVdLCBjb3JuZXJzWzddKSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUGFyc2VyRmFjdG9yeS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1BhcnNlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAzODQ5Zi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUGFyc2VyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbDsKLQotCi1pbXBvcnQgb3JnLmt4bWwyLmlvLktYbWxQYXJzZXI7Ci1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotLyoqCi0gKiBBIGZhY3RvcnkgZm9yIHtAbGluayBYbWxQdWxsUGFyc2VyfS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXJzZXJGYWN0b3J5IHsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBFTkNPRElORyA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLQotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBMT0dfUEFSU0VSID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgc3RhdGljIFhtbFB1bGxQYXJzZXIgY3JlYXRlKEZpbGUgZikKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBJbnB1dFN0cmVhbSBzdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGYpOwotICAgICAgICByZXR1cm4gY3JlYXRlKHN0cmVhbSwgZi5nZXROYW1lKCksIGYubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgWG1sUHVsbFBhcnNlciBjcmVhdGUoSW5wdXRTdHJlYW0gc3RyZWFtLCBTdHJpbmcgbmFtZSkKLSAgICAgICAgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gY3JlYXRlKHN0cmVhbSwgbmFtZSwgLTEpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFhtbFB1bGxQYXJzZXIgY3JlYXRlKElucHV0U3RyZWFtIHN0cmVhbSwgU3RyaW5nIG5hbWUsIGxvbmcgc2l6ZSkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgS1htbFBhcnNlciBwYXJzZXIgPSBpbnN0YW50aWF0ZVBhcnNlcihuYW1lKTsKLQotICAgICAgICBzdHJlYW0gPSByZWFkQW5kQ2xvc2Uoc3RyZWFtLCBuYW1lLCBzaXplKTsKLQotICAgICAgICBwYXJzZXIuc2V0SW5wdXQoc3RyZWFtLCBFTkNPRElORyk7Ci0gICAgICAgIHJldHVybiBwYXJzZXI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgS1htbFBhcnNlciBpbnN0YW50aWF0ZVBhcnNlcihTdHJpbmcgbmFtZSkgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewotICAgICAgICBLWG1sUGFyc2VyIHBhcnNlcjsKLSAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgcGFyc2VyID0gbmV3IEN1c3RvbVBhcnNlcihuYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlciA9IG5ldyBLWG1sUGFyc2VyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyc2VyLnNldEZlYXR1cmUoWG1sUHVsbFBhcnNlci5GRUFUVVJFX1BST0NFU1NfTkFNRVNQQUNFUywgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiBwYXJzZXI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gcmVhZEFuZENsb3NlKElucHV0U3RyZWFtIHN0cmVhbSwgU3RyaW5nIG5hbWUsIGxvbmcgc2l6ZSkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgLy8ganVzdCBhIHNhbml0eSBjaGVjay4gSXQncyBkb3VidGZ1bCB3ZSdsbCBoYXZlIHN1Y2ggYmlnIGZpbGVzIQotICAgICAgICBpZiAoc2l6ZSA+IEludGVnZXIuTUFYX1ZBTFVFKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbigiRmlsZSAiICsgbmFtZSArICIgaXMgdG9vIGJpZyB0byBiZSBwYXJzZWQiKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgaW50U2l6ZSA9IChpbnQpIHNpemU7Ci0KLSAgICAgICAgLy8gY3JlYXRlIGEgYnVmZmVyZWQgcmVhZGVyIHRvIGZhY2lsaXRhdGUgcmVhZGluZy4KLSAgICAgICAgQnVmZmVyZWRJbnB1dFN0cmVhbSBidWZmZXJlZFN0cmVhbSA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbnQgYXZhaWw7Ci0gICAgICAgICAgICBpZiAoaW50U2l6ZSAhPSAtMSkgewotICAgICAgICAgICAgICAgIGF2YWlsID0gaW50U2l6ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBzaXplIHRvIHJlYWQuCi0gICAgICAgICAgICAgICAgYXZhaWwgPSBidWZmZXJlZFN0cmVhbS5hdmFpbGFibGUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSBpbml0aWFsIGJ1ZmZlciBhbmQgcmVhZCBpdC4KLSAgICAgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVthdmFpbF07Ci0gICAgICAgICAgICBpbnQgcmVhZCA9IHN0cmVhbS5yZWFkKGJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGVhc3kgY2FzZS4KLSAgICAgICAgICAgIGlmIChyZWFkID09IGludFNpemUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIG1vcmUgdG8gcmVhZCAocmVhZCgpIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlYWQgYWxsIHRoYXQKLSAgICAgICAgICAgIC8vIGF2YWlsYWJsZSgpIHJldHVybmVkISkKLSAgICAgICAgICAgIHdoaWxlICgoYXZhaWwgPSBidWZmZXJlZFN0cmVhbS5hdmFpbGFibGUoKSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWQgKyBhdmFpbCA+IGJ1ZmZlci5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBhbGxvY2F0ZSB3aGF0IGlzIG5lZWRlZC4gV2UncmUgbW9zdGx5IHJlYWRpbmcgc21hbGwgZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gc28gaXQgc2hvdWxkbid0IGJlIHRvbyBwcm9ibGVtYXRpYy4KLSAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIG1vcmVCdWZmZXIgPSBuZXcgYnl0ZVtyZWFkICsgYXZhaWxdOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZmZlciwgMCwgbW9yZUJ1ZmZlciwgMCwgcmVhZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG1vcmVCdWZmZXI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmVhZCArPSBzdHJlYW0ucmVhZChidWZmZXIsIHJlYWQsIGF2YWlsKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gcmV0dXJuIGEgbmV3IHN0cmVhbSBlbmNhcHN1bGF0aW5nIHRoaXMgYnVmZmVyLgotICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShidWZmZXIpOwotCi0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uKCJGYWlsZWQgdG8gcmVhZCAiICsgbmFtZSwgbnVsbCwgZSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJ1ZmZlcmVkU3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDdXN0b21QYXJzZXIgZXh0ZW5kcyBLWG1sUGFyc2VyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU5hbWU7Ci0KLSAgICAgICAgQ3VzdG9tUGFyc2VyKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICBzdXBlcigpOwotICAgICAgICAgICAgbU5hbWUgPSBuYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU5hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUGxheUFuaW1hdGlvblRocmVhZC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1BsYXlBbmltYXRpb25UaHJlYWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3MDE4MC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUGxheUFuaW1hdGlvblRocmVhZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklBbmltYXRpb25MaXN0ZW5lcjsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzOwotCi1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0aW9uVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yOwotCi1wdWJsaWMgY2xhc3MgUGxheUFuaW1hdGlvblRocmVhZCBleHRlbmRzIEFuaW1hdGlvblRocmVhZCB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEFuaW1hdG9yIG1BbmltYXRvcjsKLQotICAgIHB1YmxpYyBQbGF5QW5pbWF0aW9uVGhyZWFkKEFuaW1hdG9yIGFuaW1hdG9yLCBSZW5kZXJTZXNzaW9uSW1wbCBzY2VuZSwgU3RyaW5nIGFuaW1OYW1lLAotICAgICAgICAgICAgSUFuaW1hdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIHN1cGVyKHNjZW5lLCBhbmltTmFtZSwgbGlzdGVuZXIpOwotICAgICAgICBtQW5pbWF0b3IgPSBhbmltYXRvcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzdWx0IHByZUFuaW1hdGlvbigpIHsKLSAgICAgICAgLy8gc3RhcnQgdGhlIGFuaW1hdGlvbi4gVGhpcyB3aWxsIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBoYW5kbGVyIHJpZ2h0IGF3YXksIHNvCi0gICAgICAgIC8vIHRoZSBxdWV1ZSBpcyBmaWxsZWQgd2hlbiB0aGlzIG1ldGhvZCByZXR1cm5zLgotICAgICAgICBtQW5pbWF0b3Iuc3RhcnQoKTsKLQotICAgICAgICByZXR1cm4gU3RhdHVzLlNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcG9zdEFuaW1hdGlvbigpIHsKLSAgICAgICAgLy8gbm90aGluZyB0byBiZSBkb25lLgotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9SZW5kZXJBY3Rpb24uamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9SZW5kZXJBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBmNTMzMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUmVuZGVyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsOwotCi1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLkVSUk9SX0xPQ0tfSU5URVJSVVBURUQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLkVSUk9SX1RJTUVPVVQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLlNVQ0NFU1M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSGFyZHdhcmVDb25maWc7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVuZGVyUGFyYW1zOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZW5kZXJSZXNvdXJjZXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlbmRlclJlc291cmNlcy5GcmFtZXdvcmtSZXNvdXJjZUlkUHJvdmlkZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdDsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlQ29udGV4dDsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuRGVuc2l0eTsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5TY3JlZW5PcmllbnRhdGlvbjsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuU2NyZWVuU2l6ZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWRfRGVsZWdhdGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbl9BY2Nlc3NvcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZE1hbmFnZXJfQWNjZXNzb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrOwotCi0vKioKLSAqIEJhc2UgY2xhc3MgZm9yIHJlbmRlcmluZyBhY3Rpb24uCi0gKgotICogSXQgcHJvdmlkZXMgbGlmZS1jeWNsZSBtZXRob2RzIHRvIGluaXQgYW5kIHN0b3AgdGhlIHJlbmRlcmluZy4KLSAqIFRoZSBtb3N0IGltcG9ydGFudCBtZXRob2RzIGFyZToKLSAqIHtAbGluayAjaW5pdChsb25nKX0gYW5kIHtAbGluayAjYWNxdWlyZShsb25nKX0gdG8gc3RhcnQgYSByZW5kZXJpbmcgYW5kIHtAbGluayAjcmVsZWFzZSgpfQotICogYWZ0ZXIgdGhlIHJlbmRlcmluZy4KLSAqCi0gKgotICogQHBhcmFtIDxUPiB0aGUge0BsaW5rIFJlbmRlclBhcmFtc30gaW1wbGVtZW50YXRpb24KLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZW5kZXJBY3Rpb248VCBleHRlbmRzIFJlbmRlclBhcmFtcz4gZXh0ZW5kcyBGcmFtZXdvcmtSZXNvdXJjZUlkUHJvdmlkZXIgewotCi0gICAgLyoqCi0gICAgICogVGhlIGN1cnJlbnQgY29udGV4dCBiZWluZyByZW5kZXJlZC4gVGhpcyBpcyBzZXQgdGhyb3VnaCB7QGxpbmsgI2FjcXVpcmUobG9uZyl9IGFuZAotICAgICAqIHtAbGluayAjaW5pdChsb25nKX0sIGFuZCB1bnNldCBpbiB7QGxpbmsgI3JlbGVhc2UoKX0uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgQnJpZGdlQ29udGV4dCBzQ3VycmVudENvbnRleHQgPSBudWxsOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBUIG1QYXJhbXM7Ci0KLSAgICBwcml2YXRlIEJyaWRnZUNvbnRleHQgbUNvbnRleHQ7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgcmVuZGVyQWN0aW9uLgotICAgICAqIDxwPgotICAgICAqIFRoaXMgPGI+bXVzdDwvYj4gYmUgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIHtAbGluayBSZW5kZXJBY3Rpb24jaW5pdCgpfSwgd2hpY2ggYWN0IGFzIGEKLSAgICAgKiBjYWxsIHRvIHtAbGluayBSZW5kZXJBY3Rpb24jYWNxdWlyZShsb25nKX0KLSAgICAgKgotICAgICAqIEBwYXJhbSBwYXJhbXMgdGhlIFJlbmRlclBhcmFtcy4gVGhpcyBtdXN0IGJlIGEgY29weSB0aGF0IHRoZSBhY3Rpb24gY2FuIGtlZXAKLSAgICAgKgotICAgICAqLwotICAgIHByb3RlY3RlZCBSZW5kZXJBY3Rpb24oVCBwYXJhbXMpIHsKLSAgICAgICAgbVBhcmFtcyA9IHBhcmFtczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWFsaXplcyBhbmQgYWNxdWlyZXMgdGhlIHNjZW5lLCBjcmVhdGluZyB2YXJpb3VzIEFuZHJvaWQgb2JqZWN0cyBzdWNoIGFzIGNvbnRleHQsCi0gICAgICogaW5mbGF0ZXIsIGFuZCBwYXJzZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdGltZW91dCB0aGUgdGltZSB0byB3YWl0IGlmIGFub3RoZXIgcmVuZGVyaW5nIGlzIGhhcHBlbmluZy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgc2NlbmUgd2FzIHByZXBhcmVkCi0gICAgICoKLSAgICAgKiBAc2VlICNhY3F1aXJlKGxvbmcpCi0gICAgICogQHNlZSAjcmVsZWFzZSgpCi0gICAgICovCi0gICAgcHVibGljIFJlc3VsdCBpbml0KGxvbmcgdGltZW91dCkgewotICAgICAgICAvLyBhY3F1aXJlIHRoZSBsb2NrLiBpZiB0aGUgcmVzdWx0IGlzIG51bGwsIGxvY2sgd2FzIGp1c3QgYWNxdWlyZWQsIG90aGVyd2lzZSwgcmV0dXJuCi0gICAgICAgIC8vIHRoZSByZXN1bHQuCi0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBhY3F1aXJlTG9jayh0aW1lb3V0KTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgSGFyZHdhcmVDb25maWcgaGFyZHdhcmVDb25maWcgPSBtUGFyYW1zLmdldEhhcmR3YXJlQ29uZmlnKCk7Ci0KLSAgICAgICAgLy8gc2V0dXAgdGhlIGRpc3BsYXkgTWV0cmljcy4KLSAgICAgICAgRGlzcGxheU1ldHJpY3MgbWV0cmljcyA9IG5ldyBEaXNwbGF5TWV0cmljcygpOwotICAgICAgICBtZXRyaWNzLmRlbnNpdHlEcGkgPSBtZXRyaWNzLm5vbmNvbXBhdERlbnNpdHlEcGkgPQotICAgICAgICAgICAgICAgIGhhcmR3YXJlQ29uZmlnLmdldERlbnNpdHkoKS5nZXREcGlWYWx1ZSgpOwotCi0gICAgICAgIG1ldHJpY3MuZGVuc2l0eSA9IG1ldHJpY3Mubm9uY29tcGF0RGVuc2l0eSA9Ci0gICAgICAgICAgICAgICAgbWV0cmljcy5kZW5zaXR5RHBpIC8gKGZsb2F0KSBEaXNwbGF5TWV0cmljcy5ERU5TSVRZX0RFRkFVTFQ7Ci0KLSAgICAgICAgbWV0cmljcy5zY2FsZWREZW5zaXR5ID0gbWV0cmljcy5ub25jb21wYXRTY2FsZWREZW5zaXR5ID0gbWV0cmljcy5kZW5zaXR5OwotCi0gICAgICAgIG1ldHJpY3Mud2lkdGhQaXhlbHMgPSBtZXRyaWNzLm5vbmNvbXBhdFdpZHRoUGl4ZWxzID0gaGFyZHdhcmVDb25maWcuZ2V0U2NyZWVuV2lkdGgoKTsKLSAgICAgICAgbWV0cmljcy5oZWlnaHRQaXhlbHMgPSBtZXRyaWNzLm5vbmNvbXBhdEhlaWdodFBpeGVscyA9IGhhcmR3YXJlQ29uZmlnLmdldFNjcmVlbkhlaWdodCgpOwotICAgICAgICBtZXRyaWNzLnhkcGkgPSBtZXRyaWNzLm5vbmNvbXBhdFhkcGkgPSBoYXJkd2FyZUNvbmZpZy5nZXRYZHBpKCk7Ci0gICAgICAgIG1ldHJpY3MueWRwaSA9IG1ldHJpY3Mubm9uY29tcGF0WWRwaSA9IGhhcmR3YXJlQ29uZmlnLmdldFlkcGkoKTsKLQotICAgICAgICBSZW5kZXJSZXNvdXJjZXMgcmVzb3VyY2VzID0gbVBhcmFtcy5nZXRSZXNvdXJjZXMoKTsKLQotICAgICAgICAvLyBidWlsZCB0aGUgY29udGV4dAotICAgICAgICBtQ29udGV4dCA9IG5ldyBCcmlkZ2VDb250ZXh0KG1QYXJhbXMuZ2V0UHJvamVjdEtleSgpLCBtZXRyaWNzLCByZXNvdXJjZXMsCi0gICAgICAgICAgICAgICAgbVBhcmFtcy5nZXRQcm9qZWN0Q2FsbGJhY2soKSwgZ2V0Q29uZmlndXJhdGlvbigpLCBtUGFyYW1zLmdldFRhcmdldFNka1ZlcnNpb24oKSwKLSAgICAgICAgICAgICAgICBtUGFyYW1zLmlzUnRsU3VwcG9ydGVkKCkpOwotCi0gICAgICAgIHNldFVwKCk7Ci0KLSAgICAgICAgcmV0dXJuIFNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBQcmVwYXJlcyB0aGUgc2NlbmUgZm9yIGFjdGlvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGNhbGwgaXMgYmxvY2tpbmcgaWYgYW5vdGhlciByZW5kZXJpbmcvaW5mbGF0aW5nIGlzIGN1cnJlbnRseSBoYXBwZW5pbmcsIGFuZCB3aWxsIHJldHVybgotICAgICAqIHdoZXRoZXIgdGhlIHByZXBhcmF0aW9uIHdvcmtlZC4KLSAgICAgKgotICAgICAqIFRoZSBwcmVwYXJhdGlvbiBjYW4gZmFpbCBpZiBhbm90aGVyIHJlbmRlcmluZyB0b29rIHRvbyBsb25nIGFuZCB0aGUgdGltZW91dCB3YXMgZWxhcHNlZC4KLSAgICAgKgotICAgICAqIE1vcmUgdGhhbiBvbmUgY2FsbCB0byB0aGlzIGZyb20gdGhlIHNhbWUgdGhyZWFkIHdpbGwgaGF2ZSBubyBlZmZlY3QgYW5kIHdpbGwgcmV0dXJuCi0gICAgICoge0BsaW5rIFJlc3VsdCNTVUNDRVNTfS4KLSAgICAgKgotICAgICAqIEFmdGVyIHNjZW5lIGFjdGlvbnMgaGF2ZSB0YWtlbiBwbGFjZSwgb25seSBvbmUgY2FsbCB0byB7QGxpbmsgI3JlbGVhc2UoKX0gbXVzdCBiZQotICAgICAqIGRvbmUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdGltZW91dCB0aGUgdGltZSB0byB3YWl0IGlmIGFub3RoZXIgcmVuZGVyaW5nIGlzIGhhcHBlbmluZy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgc2NlbmUgd2FzIHByZXBhcmVkCi0gICAgICoKLSAgICAgKiBAc2VlICNyZWxlYXNlKCkKLSAgICAgKgotICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHtAbGluayAjaW5pdChsb25nKX0gd2FzIG5ldmVyIGNhbGxlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgUmVzdWx0IGFjcXVpcmUobG9uZyB0aW1lb3V0KSB7Ci0gICAgICAgIGlmIChtQ29udGV4dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJBZnRlciBzY2VuZSBjcmVhdGlvbiwgI2luaXQoKSBtdXN0IGJlIGNhbGxlZCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYWNxdWlyZSB0aGUgbG9jay4gaWYgdGhlIHJlc3VsdCBpcyBudWxsLCBsb2NrIHdhcyBqdXN0IGFjcXVpcmVkLCBvdGhlcndpc2UsIHJldHVybgotICAgICAgICAvLyB0aGUgcmVzdWx0LgotICAgICAgICBSZXN1bHQgcmVzdWx0ID0gYWNxdWlyZUxvY2sodGltZW91dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHNldFVwKCk7Ci0KLSAgICAgICAgcmV0dXJuIFNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWNxdWlyZSB0aGUgbG9jayBzbyB0aGF0IHRoZSBzY2VuZSBjYW4gYmUgYWN0ZWQgdXBvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIHJldHVybnMgbnVsbCBpZiB0aGUgbG9jayB3YXMganVzdCBhY3F1aXJlZCwgb3RoZXJ3aXNlIGl0IHJldHVybnMKLSAgICAgKiB7QGxpbmsgUmVzdWx0I1NVQ0NFU1N9IGlmIHRoZSBsb2NrIGFscmVhZHkgYmVsb25nZWQgdG8gdGhhdCB0aHJlYWQsIG9yIGFub3RoZXIKLSAgICAgKiBpbnN0YW5jZSAoc2VlIHtAbGluayBSZXN1bHQjZ2V0U3RhdHVzKCl9KSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB0aW1lb3V0IHRoZSB0aW1lIHRvIHdhaXQgaWYgYW5vdGhlciByZW5kZXJpbmcgaXMgaGFwcGVuaW5nLgotICAgICAqIEByZXR1cm4gbnVsbCBpZiB0aGUgbG9jayB3YXMganVzdCBhY3F1aXJlIG9yIGFub3RoZXIgcmVzdWx0IGRlcGVuZGluZyBvbiB0aGUgc3RhdGUuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIFJlc3VsdCBhY3F1aXJlTG9jayhsb25nIHRpbWVvdXQpIHsKLSAgICAgICAgUmVlbnRyYW50TG9jayBsb2NrID0gQnJpZGdlLmdldExvY2soKTsKLSAgICAgICAgaWYgKGxvY2suaXNIZWxkQnlDdXJyZW50VGhyZWFkKCkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBhY3F1aXJlZCA9IGxvY2sudHJ5TG9jayh0aW1lb3V0LCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFjcXVpcmVkID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9USU1FT1VULmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTE9DS19JTlRFUlJVUFRFRC5jcmVhdGVSZXN1bHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMgdGhyZWFkIGhvbGRzIHRoZSBsb2NrIGFscmVhZHkuIENoZWNrcyB0aGF0IHRoaXMgd2Fzbid0IGZvciBhIGRpZmZlcmVudCBjb250ZXh0LgotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBjYWxsZWQgYnkgaW5pdCwgbUNvbnRleHQgd2lsbCBiZSBudWxsIGFuZCBzbyBzaG91bGQgc0N1cnJlbnRDb250ZXh0Ci0gICAgICAgICAgICAvLyBhbnl3YXkKLSAgICAgICAgICAgIGlmIChtQ29udGV4dCAhPSBzQ3VycmVudENvbnRleHQpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJBY3F1aXJpbmcgZGlmZmVyZW50IHNjZW5lcyBmcm9tIHNhbWUgdGhyZWFkIHdpdGhvdXQgcmVsZWFzZXMiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xlYW5zIHVwIHRoZSBzY2VuZSBhZnRlciBhbiBhY3Rpb24uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICAgICAgUmVlbnRyYW50TG9jayBsb2NrID0gQnJpZGdlLmdldExvY2soKTsKLQotICAgICAgICAvLyB3aXRoIHRoZSB1c2Ugb2YgZmluYWxseSBibG9ja3MsIGl0IGlzIHBvc3NpYmxlIHRvIGZpbmQgb3Vyc2VsZiBjYWxsaW5nIHRoaXMKLSAgICAgICAgLy8gd2l0aG91dCBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBwcmVwYXJlU2NlbmUuIFRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgdW5sb2NrKCkgd2lsbAotICAgICAgICAvLyBub3QgdGhyb3cgSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbi4KLSAgICAgICAgaWYgKGxvY2suaXNIZWxkQnlDdXJyZW50VGhyZWFkKCkpIHsKLSAgICAgICAgICAgIHRlYXJEb3duKCk7Ci0gICAgICAgICAgICBsb2NrLnVubG9jaygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB1cCB0aGUgc2Vzc2lvbiBmb3IgcmVuZGVyaW5nLgotICAgICAqIDxwLz4KLSAgICAgKiBUaGUgY291bnRlcnBhcnQgaXMge0BsaW5rICN0ZWFyRG93bigpfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0VXAoKSB7Ci0gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgUmVzb3VyY2VzIG9iamVjdCByZWZlcmVuY2VzIHRoZSBjb250ZXh0IChhbmQgb3RoZXIgb2JqZWN0cykgZm9yIHRoaXMKLSAgICAgICAgLy8gc2NlbmUKLSAgICAgICAgbUNvbnRleHQuaW5pdFJlc291cmNlcygpOwotICAgICAgICBzQ3VycmVudENvbnRleHQgPSBtQ29udGV4dDsKLQotICAgICAgICAvLyBjcmVhdGUgYW4gSW5wdXRNZXRob2RNYW5hZ2VyCi0gICAgICAgIElucHV0TWV0aG9kTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotCi0gICAgICAgIExheW91dExvZyBjdXJyZW50TG9nID0gbVBhcmFtcy5nZXRMb2coKTsKLSAgICAgICAgQnJpZGdlLnNldExvZyhjdXJyZW50TG9nKTsKLSAgICAgICAgbUNvbnRleHQuZ2V0UmVuZGVyUmVzb3VyY2VzKCkuc2V0RnJhbWV3b3JrUmVzb3VyY2VJZFByb3ZpZGVyKHRoaXMpOwotICAgICAgICBtQ29udGV4dC5nZXRSZW5kZXJSZXNvdXJjZXMoKS5zZXRMb2dnZXIoY3VycmVudExvZyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVhciBkb3duIHRoZSBzZXNzaW9uIGFmdGVyIHJlbmRlcmluZy4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhlIGNvdW50ZXJwYXJ0IGlzIHtAbGluayAjc2V0VXAoKX0uCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHRlYXJEb3duKCkgewotICAgICAgICAvLyBUaGUgY29udGV4dCBtYXkgYmUgbnVsbCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBpbml0KCkuCi0gICAgICAgIGlmIChtQ29udGV4dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcmVtb3ZlIHN0YXRpYyByZWZlcmVuY2VzLCBvdGhlcndpc2Ugd2UgY291bGQgbm90IHVubG9hZCB0aGUgbGliCi0gICAgICAgICAgICBtQ29udGV4dC5kaXNwb3NlUmVzb3VyY2VzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc0N1cnJlbnRDb250ZXh0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIHF1aXQgSGFuZGxlclRocmVhZCBjcmVhdGVkIGR1cmluZyB0aGlzIHNlc3Npb24uCi0gICAgICAgICAgICBIYW5kbGVyVGhyZWFkX0RlbGVnYXRlLmNsZWFuVXAoc0N1cnJlbnRDb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNsZWFyIHRoZSBzdG9yZWQgVmlld0NvbmZpZ3VyYXRpb24gc2luY2UgdGhlIG1hcCBpcyBwZXIgZGVuc2l0eSBhbmQgbm90IHBlciBjb250ZXh0LgotICAgICAgICBWaWV3Q29uZmlndXJhdGlvbl9BY2Nlc3Nvci5jbGVhckNvbmZpZ3VyYXRpb25zKCk7Ci0KLSAgICAgICAgLy8gcmVtb3ZlIHRoZSBJbnB1dE1ldGhvZE1hbmFnZXIKLSAgICAgICAgSW5wdXRNZXRob2RNYW5hZ2VyX0FjY2Vzc29yLnJlc2V0SW5zdGFuY2UoKTsKLQotICAgICAgICBzQ3VycmVudENvbnRleHQgPSBudWxsOwotCi0gICAgICAgIEJyaWRnZS5zZXRMb2cobnVsbCk7Ci0gICAgICAgIGlmIChtQ29udGV4dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQ29udGV4dC5nZXRSZW5kZXJSZXNvdXJjZXMoKS5zZXRGcmFtZXdvcmtSZXNvdXJjZUlkUHJvdmlkZXIobnVsbCk7Ci0gICAgICAgICAgICBtQ29udGV4dC5nZXRSZW5kZXJSZXNvdXJjZXMoKS5zZXRMb2dnZXIobnVsbCk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQnJpZGdlQ29udGV4dCBnZXRDdXJyZW50Q29udGV4dCgpIHsKLSAgICAgICAgcmV0dXJuIHNDdXJyZW50Q29udGV4dDsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgVCBnZXRQYXJhbXMoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyYW1zOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBCcmlkZ2VDb250ZXh0IGdldENvbnRleHQoKSB7Ci0gICAgICAgIHJldHVybiBtQ29udGV4dDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsb2cgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uLgotICAgICAqIEByZXR1cm4gdGhlIGxvZyBvciBudWxsIGlmIHRoZXJlIGFyZSBub25lLgotICAgICAqLwotICAgIHB1YmxpYyBMYXlvdXRMb2cgZ2V0TG9nKCkgewotICAgICAgICBpZiAobVBhcmFtcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVBhcmFtcy5nZXRMb2coKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyB0aGF0IHRoZSBsb2NrIGlzIG93bmVkIGJ5IHRoZSBjdXJyZW50IHRocmVhZCBhbmQgdGhhdCB0aGUgY3VycmVudCBjb250ZXh0IGlzIHRoZSBvbmUKLSAgICAgKiBmcm9tIHRoaXMgc2NlbmUuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZSwgb3IgaWYge0BsaW5rICNhY3F1aXJlKGxvbmcpfSB3YXMgbm90IGNhbGxlZC4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBjaGVja0xvY2soKSB7Ci0gICAgICAgIFJlZW50cmFudExvY2sgbG9jayA9IEJyaWRnZS5nZXRMb2NrKCk7Ci0gICAgICAgIGlmIChsb2NrLmlzSGVsZEJ5Q3VycmVudFRocmVhZCgpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJzY2VuZSBtdXN0IGJlIGFjcXVpcmVkIGZpcnN0LiBzZWUgI2FjcXVpcmUobG9uZykiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc0N1cnJlbnRDb250ZXh0ICE9IG1Db250ZXh0KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUaHJlYWQgYWNxdWlyZWQgYSBzY2VuZSBidXQgaXMgcmVuZGVyaW5nIGEgZGlmZmVyZW50IG9uZSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBDb25maWd1cmF0aW9uIGdldENvbmZpZ3VyYXRpb24oKSB7Ci0gICAgICAgIENvbmZpZ3VyYXRpb24gY29uZmlnID0gbmV3IENvbmZpZ3VyYXRpb24oKTsKLQotICAgICAgICBIYXJkd2FyZUNvbmZpZyBoYXJkd2FyZUNvbmZpZyA9IG1QYXJhbXMuZ2V0SGFyZHdhcmVDb25maWcoKTsKLQotICAgICAgICBTY3JlZW5TaXplIHNjcmVlblNpemUgPSBoYXJkd2FyZUNvbmZpZy5nZXRTY3JlZW5TaXplKCk7Ci0gICAgICAgIGlmIChzY3JlZW5TaXplICE9IG51bGwpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc2NyZWVuU2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgU01BTEw6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zY3JlZW5MYXlvdXQgfD0gQ29uZmlndXJhdGlvbi5TQ1JFRU5MQVlPVVRfU0laRV9TTUFMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBOT1JNQUw6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zY3JlZW5MYXlvdXQgfD0gQ29uZmlndXJhdGlvbi5TQ1JFRU5MQVlPVVRfU0laRV9OT1JNQUw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgTEFSR0U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zY3JlZW5MYXlvdXQgfD0gQ29uZmlndXJhdGlvbi5TQ1JFRU5MQVlPVVRfU0laRV9MQVJHRTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBYTEFSR0U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zY3JlZW5MYXlvdXQgfD0gQ29uZmlndXJhdGlvbi5TQ1JFRU5MQVlPVVRfU0laRV9YTEFSR0U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgRGVuc2l0eSBkZW5zaXR5ID0gaGFyZHdhcmVDb25maWcuZ2V0RGVuc2l0eSgpOwotICAgICAgICBpZiAoZGVuc2l0eSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBkZW5zaXR5ID0gRGVuc2l0eS5NRURJVU07Ci0gICAgICAgIH0KLQotICAgICAgICBjb25maWcuc2NyZWVuV2lkdGhEcCA9IGhhcmR3YXJlQ29uZmlnLmdldFNjcmVlbldpZHRoKCkgLyBkZW5zaXR5LmdldERwaVZhbHVlKCk7Ci0gICAgICAgIGNvbmZpZy5zY3JlZW5IZWlnaHREcCA9IGhhcmR3YXJlQ29uZmlnLmdldFNjcmVlbkhlaWdodCgpIC8gZGVuc2l0eS5nZXREcGlWYWx1ZSgpOwotICAgICAgICBpZiAoY29uZmlnLnNjcmVlbkhlaWdodERwIDwgY29uZmlnLnNjcmVlbldpZHRoRHApIHsKLSAgICAgICAgICAgIGNvbmZpZy5zbWFsbGVzdFNjcmVlbldpZHRoRHAgPSBjb25maWcuc2NyZWVuSGVpZ2h0RHA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25maWcuc21hbGxlc3RTY3JlZW5XaWR0aERwID0gY29uZmlnLnNjcmVlbldpZHRoRHA7Ci0gICAgICAgIH0KLSAgICAgICAgY29uZmlnLmRlbnNpdHlEcGkgPSBkZW5zaXR5LmdldERwaVZhbHVlKCk7Ci0KLSAgICAgICAgLy8gbmV2ZXIgcnVuIGluIGNvbXBhdCBtb2RlOgotICAgICAgICBjb25maWcuY29tcGF0U2NyZWVuV2lkdGhEcCA9IGNvbmZpZy5zY3JlZW5XaWR0aERwOwotICAgICAgICBjb25maWcuY29tcGF0U2NyZWVuSGVpZ2h0RHAgPSBjb25maWcuc2NyZWVuSGVpZ2h0RHA7Ci0KLSAgICAgICAgU2NyZWVuT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBoYXJkd2FyZUNvbmZpZy5nZXRPcmllbnRhdGlvbigpOwotICAgICAgICBpZiAob3JpZW50YXRpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgc3dpdGNoIChvcmllbnRhdGlvbikgewotICAgICAgICAgICAgY2FzZSBQT1JUUkFJVDoKLSAgICAgICAgICAgICAgICBjb25maWcub3JpZW50YXRpb24gPSBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX1BPUlRSQUlUOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMQU5EU0NBUEU6Ci0gICAgICAgICAgICAgICAgY29uZmlnLm9yaWVudGF0aW9uID0gQ29uZmlndXJhdGlvbi5PUklFTlRBVElPTl9MQU5EU0NBUEU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNRVUFSRToKLSAgICAgICAgICAgICAgICBjb25maWcub3JpZW50YXRpb24gPSBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX1NRVUFSRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbmZpZy5vcmllbnRhdGlvbiA9IENvbmZpZ3VyYXRpb24uT1JJRU5UQVRJT05fVU5ERUZJTkVEOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVE9ETzogZmlsbCBpbiBtb3JlIGNvbmZpZyBpbmZvLgotCi0gICAgICAgIHJldHVybiBjb25maWc7Ci0gICAgfQotCi0KLSAgICAvLyAtLS0gRnJhbWV3b3JrUmVzb3VyY2VJZFByb3ZpZGVyIG1ldGhvZHMKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbnRlZ2VyIGdldElkKFJlc291cmNlVHlwZSByZXNUeXBlLCBTdHJpbmcgcmVzTmFtZSkgewotICAgICAgICByZXR1cm4gQnJpZGdlLmdldFJlc291cmNlSWQocmVzVHlwZSwgcmVzTmFtZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1JlbmRlckRyYXdhYmxlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUmVuZGVyRHJhd2FibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY3NzEzMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUmVuZGVyRHJhd2FibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGw7Ci0KLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdC5TdGF0dXMuRVJST1JfVU5LTk9XTjsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5EcmF3YWJsZVBhcmFtczsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSGFyZHdhcmVDb25maWc7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlVmFsdWU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdDsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0LlN0YXR1czsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlQ29udGV4dDsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBfRGVsZWdhdGU7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuQXR0YWNoSW5mb19BY2Nlc3NvcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5NZWFzdXJlU3BlYzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKLQotaW1wb3J0IGphdmEuYXd0LkFscGhhQ29tcG9zaXRlOwotaW1wb3J0IGphdmEuYXd0LkNvbG9yOwotaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7Ci1pbXBvcnQgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi0vKioKLSAqIEFjdGlvbiB0byByZW5kZXIgYSBnaXZlbiBEcmF3YWJsZSBwcm92aWRlZCB0aHJvdWdoIHtAbGluayBEcmF3YWJsZVBhcmFtcyNnZXREcmF3YWJsZSgpfS4KLSAqCi0gKiBUaGUgY2xhc3Mgb25seSBwcm92aWRlcyBhIHNpbXBsZSB7QGxpbmsgI3JlbmRlcigpfSBtZXRob2QsIGJ1dCB0aGUgZnVsbCBsaWZlLWN5Y2xlIG9mIHRoZQotICogYWN0aW9uIG11c3QgYmUgcmVzcGVjdGVkLgotICoKLSAqIEBzZWUgUmVuZGVyQWN0aW9uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUmVuZGVyRHJhd2FibGUgZXh0ZW5kcyBSZW5kZXJBY3Rpb248RHJhd2FibGVQYXJhbXM+IHsKLQotICAgIHB1YmxpYyBSZW5kZXJEcmF3YWJsZShEcmF3YWJsZVBhcmFtcyBwYXJhbXMpIHsKLSAgICAgICAgc3VwZXIobmV3IERyYXdhYmxlUGFyYW1zKHBhcmFtcykpOwotICAgIH0KLQotICAgIHB1YmxpYyBSZXN1bHQgcmVuZGVyKCkgewotICAgICAgICBjaGVja0xvY2soKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIGdldCB0aGUgZHJhd2FibGUgcmVzb3VyY2UgdmFsdWUKLSAgICAgICAgICAgIERyYXdhYmxlUGFyYW1zIHBhcmFtcyA9IGdldFBhcmFtcygpOwotICAgICAgICAgICAgSGFyZHdhcmVDb25maWcgaGFyZHdhcmVDb25maWcgPSBwYXJhbXMuZ2V0SGFyZHdhcmVDb25maWcoKTsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgZHJhd2FibGVSZXNvdXJjZSA9IHBhcmFtcy5nZXREcmF3YWJsZSgpOwotCi0gICAgICAgICAgICAvLyByZXNvbHZlIGl0Ci0gICAgICAgICAgICBCcmlkZ2VDb250ZXh0IGNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgICAgICAgICBkcmF3YWJsZVJlc291cmNlID0gY29udGV4dC5nZXRSZW5kZXJSZXNvdXJjZXMoKS5yZXNvbHZlUmVzVmFsdWUoZHJhd2FibGVSZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIGlmIChkcmF3YWJsZVJlc291cmNlID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVSZXNvdXJjZS5nZXRSZXNvdXJjZVR5cGUoKSAhPSBSZXNvdXJjZVR5cGUuRFJBV0FCTEUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzLkVSUk9SX05PVF9BX0RSQVdBQkxFLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBjcmVhdGUgYSBzaW1wbGUgRnJhbWVMYXlvdXQKLSAgICAgICAgICAgIEZyYW1lTGF5b3V0IGNvbnRlbnQgPSBuZXcgRnJhbWVMYXlvdXQoY29udGV4dCk7Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgYWN0dWFsIERyYXdhYmxlIG9iamVjdCB0byBkcmF3Ci0gICAgICAgICAgICBEcmF3YWJsZSBkID0gUmVzb3VyY2VIZWxwZXIuZ2V0RHJhd2FibGUoZHJhd2FibGVSZXNvdXJjZSwgY29udGV4dCk7Ci0gICAgICAgICAgICBjb250ZW50LnNldEJhY2tncm91bmQoZCk7Ci0KLSAgICAgICAgICAgIC8vIHNldCB0aGUgQXR0YWNoSW5mbyBvbiB0aGUgcm9vdCB2aWV3LgotICAgICAgICAgICAgQXR0YWNoSW5mb19BY2Nlc3Nvci5zZXRBdHRhY2hJbmZvKGNvbnRlbnQpOwotCi0KLSAgICAgICAgICAgIC8vIG1lYXN1cmUKLSAgICAgICAgICAgIGludCB3ID0gaGFyZHdhcmVDb25maWcuZ2V0U2NyZWVuV2lkdGgoKTsKLSAgICAgICAgICAgIGludCBoID0gaGFyZHdhcmVDb25maWcuZ2V0U2NyZWVuSGVpZ2h0KCk7Ci0gICAgICAgICAgICBpbnQgd19zcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKHcsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOwotICAgICAgICAgICAgaW50IGhfc3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhoLCBNZWFzdXJlU3BlYy5FWEFDVExZKTsKLSAgICAgICAgICAgIGNvbnRlbnQubWVhc3VyZSh3X3NwZWMsIGhfc3BlYyk7Ci0KLSAgICAgICAgICAgIC8vIG5vdyBkbyB0aGUgbGF5b3V0LgotICAgICAgICAgICAgY29udGVudC5sYXlvdXQoMCwgMCwgdywgaCk7Ci0KLSAgICAgICAgICAgIC8vIHByZURyYXcgc2V0dXAKLSAgICAgICAgICAgIEF0dGFjaEluZm9fQWNjZXNzb3IuZGlzcGF0Y2hPblByZURyYXcoY29udGVudCk7Ci0KLSAgICAgICAgICAgIC8vIGRyYXcgaW50byBhIG5ldyBpbWFnZQotICAgICAgICAgICAgQnVmZmVyZWRJbWFnZSBpbWFnZSA9IGdldEltYWdlKHcsIGgpOwotCi0gICAgICAgICAgICAvLyBjcmVhdGUgYW4gQW5kcm9pZCBiaXRtYXAgYXJvdW5kIHRoZSBCdWZmZXJlZEltYWdlCi0gICAgICAgICAgICBCaXRtYXAgYml0bWFwID0gQml0bWFwX0RlbGVnYXRlLmNyZWF0ZUJpdG1hcChpbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKmlzTXV0YWJsZSovLCBoYXJkd2FyZUNvbmZpZy5nZXREZW5zaXR5KCkpOwotCi0gICAgICAgICAgICAvLyBjcmVhdGUgYSBDYW52YXMgYXJvdW5kIHRoZSBBbmRyb2lkIGJpdG1hcAotICAgICAgICAgICAgQ2FudmFzIGNhbnZhcyA9IG5ldyBDYW52YXMoYml0bWFwKTsKLSAgICAgICAgICAgIGNhbnZhcy5zZXREZW5zaXR5KGhhcmR3YXJlQ29uZmlnLmdldERlbnNpdHkoKS5nZXREcGlWYWx1ZSgpKTsKLQotICAgICAgICAgICAgLy8gYW5kIGRyYXcKLSAgICAgICAgICAgIGNvbnRlbnQuZHJhdyhjYW52YXMpOwotCi0gICAgICAgICAgICByZXR1cm4gU3RhdHVzLlNVQ0NFU1MuY3JlYXRlUmVzdWx0KGltYWdlKTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1VOS05PV04uY3JlYXRlUmVzdWx0KGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCBCdWZmZXJlZEltYWdlIGdldEltYWdlKGludCB3LCBpbnQgaCkgewotICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gbmV3IEJ1ZmZlcmVkSW1hZ2UodywgaCwgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCKTsKLSAgICAgICAgR3JhcGhpY3MyRCBnYyA9IGltYWdlLmNyZWF0ZUdyYXBoaWNzKCk7Ci0gICAgICAgIGdjLnNldENvbXBvc2l0ZShBbHBoYUNvbXBvc2l0ZS5TcmMpOwotCi0gICAgICAgIGdjLnNldENvbG9yKG5ldyBDb2xvcigweDAwMDAwMDAwLCB0cnVlKSk7Ci0gICAgICAgIGdjLmZpbGxSZWN0KDAsIDAsIHcsIGgpOwotCi0gICAgICAgIC8vIGRvbmUKLSAgICAgICAgZ2MuZGlzcG9zZSgpOwotCi0gICAgICAgIHJldHVybiBpbWFnZTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9SZW5kZXJTZXNzaW9uSW1wbC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1JlbmRlclNlc3Npb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzcxZTMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1JlbmRlclNlc3Npb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbDsKLQotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0LlN0YXR1cy5FUlJPUl9BTklNX05PVF9GT1VORDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdC5TdGF0dXMuRVJST1JfSU5GTEFUSU9OOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0LlN0YXR1cy5FUlJPUl9OT1RfSU5GTEFURUQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLkVSUk9SX1VOS05PV047Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLkVSUk9SX1ZJRVdHUk9VUF9OT19DSElMRFJFTjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdC5TdGF0dXMuU1VDQ0VTUzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5BZGFwdGVyQmluZGluZzsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSGFyZHdhcmVDb25maWc7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklBbmltYXRpb25MaXN0ZW5lcjsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSUxheW91dFB1bGxQYXJzZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklQcm9qZWN0Q2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlbmRlclBhcmFtczsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVuZGVyUmVzb3VyY2VzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZW5kZXJTZXNzaW9uOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXNvdXJjZVJlZmVyZW5jZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzb3VyY2VWYWx1ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5TZXNzaW9uUGFyYW1zOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5TZXNzaW9uUGFyYW1zLlJlbmRlcmluZ01vZGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlZpZXdJbmZvOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHM7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUxheW91dFBhcmFtc01hcEF0dHJpYnV0ZXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZVhtbEJsb2NrUGFyc2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYmFycy5GYWtlQWN0aW9uQmFyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYmFycy5OYXZpZ2F0aW9uQmFyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYmFycy5TdGF0dXNCYXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5iYXJzLlRpdGxlQmFyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5iaW5kaW5nLkZha2VBZGFwdGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5iaW5kaW5nLkZha2VFeHBhbmRhYmxlQWRhcHRlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5TY3JlZW5PcmllbnRhdGlvbjsKLWltcG9ydCBjb20uYW5kcm9pZC51dGlsLlBhaXI7Ci0KLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0aW9uVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yOwotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9ySW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uTGF5b3V0VHJhbnNpdGlvbjsKLWltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5MYXlvdXRUcmFuc2l0aW9uLlRyYW5zaXRpb25MaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLmFwcC5GcmFnbWVudF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuQXR0YWNoSW5mb19BY2Nlc3NvcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuQnJpZGdlSW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudmlldy5JV2luZG93TWFuYWdlckltcGw7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuTWVhc3VyZVNwZWM7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLkxheW91dFBhcmFtczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLk1hcmdpbkxheW91dFBhcmFtczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlckdsb2JhbF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5BYnNMaXN0VmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5BYnNTcGlubmVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkV4cGFuZGFibGVMaXN0VmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuUXVpY2tDb250YWN0QmFkZ2U7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGFiSG9zdDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UYWJIb3N0LlRhYlNwZWM7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGFiV2lkZ2V0OwotCi1pbXBvcnQgamF2YS5hd3QuQWxwaGFDb21wb3NpdGU7Ci1pbXBvcnQgamF2YS5hd3QuQ29sb3I7Ci1pbXBvcnQgamF2YS5hd3QuR3JhcGhpY3MyRDsKLWltcG9ydCBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBDbGFzcyBpbXBsZW1lbnRpbmcgdGhlIHJlbmRlciBzZXNzaW9uLgotICoKLSAqIEEgc2Vzc2lvbiBpcyBhIHN0YXRlZnVsIHJlcHJlc2VudGF0aW9uIG9mIGEgbGF5b3V0IGZpbGUuIEl0IGlzIGluaXRpYWxpemVkIHdpdGggZGF0YSBjb21pbmcKLSAqIHRocm91Z2ggdGhlIHtAbGluayBCcmlkZ2V9IEFQSSB0byBpbmZsYXRlIHRoZSBsYXlvdXQuIEZ1cnRoZXIgYWN0aW9ucyBhbmQgcmVuZGVyaW5nIGNhbiB0aGVuCi0gKiBiZSBkb25lIG9uIHRoZSBsYXlvdXQuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUmVuZGVyU2Vzc2lvbkltcGwgZXh0ZW5kcyBSZW5kZXJBY3Rpb248U2Vzc2lvblBhcmFtcz4gewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfVElUTEVfQkFSX0hFSUdIVCA9IDI1OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NUQVRVU19CQVJfSEVJR0hUID0gMjU7Ci0KLSAgICAvLyBzY2VuZSBzdGF0ZQotICAgIHByaXZhdGUgUmVuZGVyU2Vzc2lvbiBtU2NlbmU7Ci0gICAgcHJpdmF0ZSBCcmlkZ2VYbWxCbG9ja1BhcnNlciBtQmxvY2tQYXJzZXI7Ci0gICAgcHJpdmF0ZSBCcmlkZ2VJbmZsYXRlciBtSW5mbGF0ZXI7Ci0gICAgcHJpdmF0ZSBSZXNvdXJjZVZhbHVlIG1XaW5kb3dCYWNrZ3JvdW5kOwotICAgIHByaXZhdGUgVmlld0dyb3VwIG1WaWV3Um9vdDsKLSAgICBwcml2YXRlIEZyYW1lTGF5b3V0IG1Db250ZW50Um9vdDsKLSAgICBwcml2YXRlIENhbnZhcyBtQ2FudmFzOwotICAgIHByaXZhdGUgaW50IG1NZWFzdXJlZFNjcmVlbldpZHRoID0gLTE7Ci0gICAgcHJpdmF0ZSBpbnQgbU1lYXN1cmVkU2NyZWVuSGVpZ2h0ID0gLTE7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc0FscGhhQ2hhbm5lbEltYWdlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtV2luZG93SXNGbG9hdGluZzsKLQotICAgIHByaXZhdGUgaW50IG1TdGF0dXNCYXJTaXplOwotICAgIHByaXZhdGUgaW50IG1OYXZpZ2F0aW9uQmFyU2l6ZTsKLSAgICBwcml2YXRlIGludCBtTmF2aWdhdGlvbkJhck9yaWVudGF0aW9uID0gTGluZWFyTGF5b3V0LkhPUklaT05UQUw7Ci0gICAgcHJpdmF0ZSBpbnQgbVRpdGxlQmFyU2l6ZTsKLSAgICBwcml2YXRlIGludCBtQWN0aW9uQmFyU2l6ZTsKLQotCi0gICAgLy8gaW5mb3JtYXRpb24gYmVpbmcgcmV0dXJuZWQgdGhyb3VnaCB0aGUgQVBJCi0gICAgcHJpdmF0ZSBCdWZmZXJlZEltYWdlIG1JbWFnZTsKLSAgICBwcml2YXRlIExpc3Q8Vmlld0luZm8+IG1WaWV3SW5mb0xpc3Q7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gICAgICAgIHB1YmxpYyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgewotICAgICAgICAgICAgc3VwZXIobWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbGF5b3V0IHNjZW5lIHdpdGggYWxsIHRoZSBpbmZvcm1hdGlvbiBjb21pbmcgZnJvbSB0aGUgbGF5b3V0IGJyaWRnZSBBUEkuCi0gICAgICogPHA+Ci0gICAgICogVGhpcyA8Yj5tdXN0PC9iPiBiZSBmb2xsb3dlZCBieSBhIGNhbGwgdG8ge0BsaW5rIFJlbmRlclNlc3Npb25JbXBsI2luaXQoKX0sIHdoaWNoIGFjdCBhcyBhCi0gICAgICogY2FsbCB0byB7QGxpbmsgUmVuZGVyU2Vzc2lvbkltcGwjYWNxdWlyZShsb25nKX0KLSAgICAgKgotICAgICAqIEBzZWUgTGF5b3V0QnJpZGdlI2NyZWF0ZVNjZW5lKGNvbS5hbmRyb2lkLmxheW91dGxpYi5hcGkuU2NlbmVQYXJhbXMpCi0gICAgICovCi0gICAgcHVibGljIFJlbmRlclNlc3Npb25JbXBsKFNlc3Npb25QYXJhbXMgcGFyYW1zKSB7Ci0gICAgICAgIHN1cGVyKG5ldyBTZXNzaW9uUGFyYW1zKHBhcmFtcykpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluaXRpYWxpemVzIGFuZCBhY3F1aXJlcyB0aGUgc2NlbmUsIGNyZWF0aW5nIHZhcmlvdXMgQW5kcm9pZCBvYmplY3RzIHN1Y2ggYXMgY29udGV4dCwKLSAgICAgKiBpbmZsYXRlciwgYW5kIHBhcnNlci4KLSAgICAgKgotICAgICAqIEBwYXJhbSB0aW1lb3V0IHRoZSB0aW1lIHRvIHdhaXQgaWYgYW5vdGhlciByZW5kZXJpbmcgaXMgaGFwcGVuaW5nLgotICAgICAqCi0gICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBzY2VuZSB3YXMgcHJlcGFyZWQKLSAgICAgKgotICAgICAqIEBzZWUgI2FjcXVpcmUobG9uZykKLSAgICAgKiBAc2VlICNyZWxlYXNlKCkKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzdWx0IGluaXQobG9uZyB0aW1lb3V0KSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBzdXBlci5pbml0KHRpbWVvdXQpOwotICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgU2Vzc2lvblBhcmFtcyBwYXJhbXMgPSBnZXRQYXJhbXMoKTsKLSAgICAgICAgQnJpZGdlQ29udGV4dCBjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotCi0gICAgICAgIFJlbmRlclJlc291cmNlcyByZXNvdXJjZXMgPSBnZXRQYXJhbXMoKS5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgRGlzcGxheU1ldHJpY3MgbWV0cmljcyA9IGdldENvbnRleHQoKS5nZXRNZXRyaWNzKCk7Ci0KLSAgICAgICAgLy8gdXNlIGRlZmF1bHQgb2YgdHJ1ZSBpbiBjYXNlIGl0J3Mgbm90IGZvdW5kIHRvIHVzZSBhbHBoYSBieSBkZWZhdWx0Ci0gICAgICAgIG1Jc0FscGhhQ2hhbm5lbEltYWdlICA9IGdldEJvb2xlYW5UaGVtZVZhbHVlKHJlc291cmNlcywKLSAgICAgICAgICAgICAgICAid2luZG93SXNGbG9hdGluZyIsIHRydWUgLypkZWZhdWx0VmFsdWUqLyk7Ci0KLSAgICAgICAgbVdpbmRvd0lzRmxvYXRpbmcgPSBnZXRCb29sZWFuVGhlbWVWYWx1ZShyZXNvdXJjZXMsICJ3aW5kb3dJc0Zsb2F0aW5nIiwKLSAgICAgICAgICAgICAgICB0cnVlIC8qZGVmYXVsdFZhbHVlKi8pOwotCi0gICAgICAgIGZpbmRCYWNrZ3JvdW5kKHJlc291cmNlcyk7Ci0gICAgICAgIGZpbmRTdGF0dXNCYXIocmVzb3VyY2VzLCBtZXRyaWNzKTsKLSAgICAgICAgZmluZEFjdGlvbkJhcihyZXNvdXJjZXMsIG1ldHJpY3MpOwotICAgICAgICBmaW5kTmF2aWdhdGlvbkJhcihyZXNvdXJjZXMsIG1ldHJpY3MpOwotCi0gICAgICAgIC8vIEZJWE1FOiBmaW5kIHRob3NlIG91dCwgYW5kIHBvc3NpYmx5IGFkZCB0aGVtIHRvIHRoZSByZW5kZXIgcGFyYW1zCi0gICAgICAgIGJvb2xlYW4gaGFzTmF2aWdhdGlvbkJhciA9IHRydWU7Ci0gICAgICAgIElXaW5kb3dNYW5hZ2VyIGl3bSA9IG5ldyBJV2luZG93TWFuYWdlckltcGwoZ2V0Q29udGV4dCgpLmdldENvbmZpZ3VyYXRpb24oKSwKLSAgICAgICAgICAgICAgICBtZXRyaWNzLCBTdXJmYWNlLlJPVEFUSU9OXzAsCi0gICAgICAgICAgICAgICAgaGFzTmF2aWdhdGlvbkJhcik7Ci0gICAgICAgIFdpbmRvd01hbmFnZXJHbG9iYWxfRGVsZWdhdGUuc2V0V2luZG93TWFuYWdlclNlcnZpY2UoaXdtKTsKLQotICAgICAgICAvLyBidWlsZCB0aGUgaW5mbGF0ZXIgYW5kIHBhcnNlci4KLSAgICAgICAgbUluZmxhdGVyID0gbmV3IEJyaWRnZUluZmxhdGVyKGNvbnRleHQsIHBhcmFtcy5nZXRQcm9qZWN0Q2FsbGJhY2soKSk7Ci0gICAgICAgIGNvbnRleHQuc2V0QnJpZGdlSW5mbGF0ZXIobUluZmxhdGVyKTsKLQotICAgICAgICBtQmxvY2tQYXJzZXIgPSBuZXcgQnJpZGdlWG1sQmxvY2tQYXJzZXIoCi0gICAgICAgICAgICAgICAgcGFyYW1zLmdldExheW91dERlc2NyaXB0aW9uKCksIGNvbnRleHQsIGZhbHNlIC8qIHBsYXRmb3JtUmVzb3VyY2VGbGFnICovKTsKLQotICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbmZsYXRlcyB0aGUgbGF5b3V0LgotICAgICAqIDxwPgotICAgICAqIHtAbGluayAjYWNxdWlyZShsb25nKX0gbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSB0aGlzLgotICAgICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIGN1cnJlbnQgY29udGV4dCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb25lIG93bmVkIGJ5Ci0gICAgICogICAgICB0aGUgc2NlbmUsIG9yIGlmIHtAbGluayAjaW5pdChsb25nKX0gd2FzIG5vdCBjYWxsZWQuCi0gICAgICovCi0gICAgcHVibGljIFJlc3VsdCBpbmZsYXRlKCkgewotICAgICAgICBjaGVja0xvY2soKTsKLQotICAgICAgICB0cnkgewotCi0gICAgICAgICAgICBTZXNzaW9uUGFyYW1zIHBhcmFtcyA9IGdldFBhcmFtcygpOwotICAgICAgICAgICAgSGFyZHdhcmVDb25maWcgaGFyZHdhcmVDb25maWcgPSBwYXJhbXMuZ2V0SGFyZHdhcmVDb25maWcoKTsKLSAgICAgICAgICAgIEJyaWRnZUNvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNSdGwgPSBCcmlkZ2UuaXNMb2NhbGVSdGwocGFyYW1zLmdldExvY2FsZSgpKTsKLSAgICAgICAgICAgIGludCBkaXJlY3Rpb24gPSBpc1J0bCA/IFZpZXcuTEFZT1VUX0RJUkVDVElPTl9SVEwgOiBWaWV3LkxBWU9VVF9ESVJFQ1RJT05fTFRSOwotCi0gICAgICAgICAgICAvLyB0aGUgdmlldyBncm91cCB0aGF0IHJlY2VpdmVzIHRoZSB3aW5kb3cgYmFja2dyb3VuZC4KLSAgICAgICAgICAgIFZpZXdHcm91cCBiYWNrZ3JvdW5kVmlldyA9IG51bGw7Ci0KLSAgICAgICAgICAgIGlmIChtV2luZG93SXNGbG9hdGluZyB8fCBwYXJhbXMuaXNGb3JjZU5vRGVjb3IoKSkgewotICAgICAgICAgICAgICAgIGJhY2tncm91bmRWaWV3ID0gbVZpZXdSb290ID0gbUNvbnRlbnRSb290ID0gbmV3IEZyYW1lTGF5b3V0KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIG1WaWV3Um9vdC5zZXRMYXlvdXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc1NvZnR3YXJlQnV0dG9ucygpICYmIG1OYXZpZ2F0aW9uQmFyT3JpZW50YXRpb24gPT0gTGluZWFyTGF5b3V0LlZFUlRJQ0FMKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIG5hdmlnYXRpb24gYmFyIGlzIG9uIHRoZSByaWdodC4KLSAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKwotICAgICAgICAgICAgICAgICAgICAgICB8IFN0YXR1cyBiYXIgKGFsd2F5cykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgfCAoTGF5b3V0IHdpdGggYmFja2dyb3VuZCBkcmF3YWJsZSkgICAgICAgICAgICAgICB8ICAgfAotICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgfCBUaXRsZS9BY3Rpb24gYmFyIChvcHRpb25hbCkgICAgICAgICAgICAgICAgIHwgfCAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgfAotICAgICAgICAgICAgICAgICAgICAgICB8IHwgQ29udGVudCwgdmVydGljYWwgZXh0ZW5kaW5nICAgICAgICAgICAgICAgICB8IHwgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgfAotICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0rCi0KLSAgICAgICAgICAgICAgICAgICAgICAgU28gd2UgY3JlYXRlIGEgaG9yaXpvbnRhbCBsYXlvdXQsIHdpdGggdGhlIG5hdiBiYXIgb24gdGhlIHJpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGxlZnQgcGFydCBpcyB0aGUgbm9ybWFsIGxheW91dCBiZWxvdyB3aXRob3V0IHRoZSBuYXYgYmFyIGF0Ci0gICAgICAgICAgICAgICAgICAgICAgIHRoZSBib3R0b20KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIExpbmVhckxheW91dCB0b3BMYXlvdXQgPSBuZXcgTGluZWFyTGF5b3V0KGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICB0b3BMYXlvdXQuc2V0TGF5b3V0RGlyZWN0aW9uKGRpcmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIG1WaWV3Um9vdCA9IHRvcExheW91dDsKLSAgICAgICAgICAgICAgICAgICAgdG9wTGF5b3V0LnNldE9yaWVudGF0aW9uKExpbmVhckxheW91dC5IT1JJWk9OVEFMKTsKLQotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGlvbkJhciBuYXZpZ2F0aW9uQmFyID0gbmV3IE5hdmlnYXRpb25CYXIoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVDb25maWcuZ2V0RGVuc2l0eSgpLCBMaW5lYXJMYXlvdXQuVkVSVElDQUwsIGlzUnRsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaXNSdGxTdXBwb3J0ZWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uQmFyLnNldExheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU5hdmlnYXRpb25CYXJTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvcExheW91dC5hZGRWaWV3KG5hdmlnYXRpb25CYXIpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiB3ZSdyZSBjcmVhdGluZyB0aGUgZm9sbG93aW5nIGxheW91dAotICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgfCBTdGF0dXMgYmFyIChhbHdheXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgfCAoTGF5b3V0IHdpdGggYmFja2dyb3VuZCBkcmF3YWJsZSkgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Ci0gICAgICAgICAgICAgICAgICAgfCB8IFRpdGxlL0FjdGlvbiBiYXIgKG9wdGlvbmFsKSAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Ci0gICAgICAgICAgICAgICAgICAgfCB8IENvbnRlbnQsIHZlcnRpY2FsIGV4dGVuZGluZyAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Ci0gICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgfCBOYXZpZ2F0aW9uIGJhciBmb3Igc29mdCBidXR0b25zLCBtYXliZSBzZWUgYWJvdmV8Ci0gICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLSAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgIExpbmVhckxheW91dCB0b3BMYXlvdXQgPSBuZXcgTGluZWFyTGF5b3V0KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIHRvcExheW91dC5zZXRPcmllbnRhdGlvbihMaW5lYXJMYXlvdXQuVkVSVElDQUwpOwotICAgICAgICAgICAgICAgIHRvcExheW91dC5zZXRMYXlvdXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKLSAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYSB2aWV3IHJvb3QgdGhpcyBpcyBpdAotICAgICAgICAgICAgICAgIGlmIChtVmlld1Jvb3QgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtVmlld1Jvb3QgPSB0b3BMYXlvdXQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyBsYXlvdXRQYXJhbXMgPSBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULCBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UKTsKLSAgICAgICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLndlaWdodCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHRvcExheW91dC5zZXRMYXlvdXRQYXJhbXMobGF5b3V0UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBjYXNlIG9mIHNvZnQgYnV0dG9ucyArIHZlcnRpY2FsIGJhci4KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0b3AgbGF5b3V0IGlzIHRoZSBmaXJzdCBsYXlvdXQgaW4gdGhlIGhvcml6b250YWwgbGF5b3V0LiBzZWUgYWJvdmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc1J0bCAmJiBwYXJhbXMuaXNSdGxTdXBwb3J0ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUlRMIGlzIGVuYWJsZWQsIGxheW91dGxpYiB3aWxsIG1pcnJvciB0aGUgbGF5b3V0cy4gU28sIGFkZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvcExheW91dCB0byB0aGUgcmlnaHQgb2YgTmF2aWdhdGlvbiBCYXIgYW5kIGxheW91dGxpYiB3aWxsIGRyYXcgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBsZWZ0LgotICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXdSb290LmFkZFZpZXcodG9wTGF5b3V0KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgdG9wIGxheW91dCB0byB0aGUgbGVmdCBvZiB0aGUgTmF2aWdhdGlvbiBCYXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBtVmlld1Jvb3QuYWRkVmlldyh0b3BMYXlvdXQsIDApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1TdGF0dXNCYXJTaXplID4gMCkgewotICAgICAgICAgICAgICAgICAgICAvLyBzeXN0ZW0gYmFyCi0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNCYXIgc3lzdGVtQmFyID0gbmV3IFN0YXR1c0Jhcihjb250ZXh0LCBoYXJkd2FyZUNvbmZpZy5nZXREZW5zaXR5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiwgcGFyYW1zLmlzUnRsU3VwcG9ydGVkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtQmFyLnNldExheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwgbVN0YXR1c0JhclNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvcExheW91dC5hZGRWaWV3KHN5c3RlbUJhcik7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgewotCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQgYmFja2dyb3VuZExheW91dCA9IG5ldyBMaW5lYXJMYXlvdXQoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgYmFja2dyb3VuZFZpZXcgPSBiYWNrZ3JvdW5kTGF5b3V0OwotICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXlvdXQuc2V0T3JpZW50YXRpb24oTGluZWFyTGF5b3V0LlZFUlRJQ0FMKTsKLSAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zIGxheW91dFBhcmFtcyA9IG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCk7Ci0gICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLndlaWdodCA9IDE7Ci0gICAgICAgICAgICAgICAgYmFja2dyb3VuZExheW91dC5zZXRMYXlvdXRQYXJhbXMobGF5b3V0UGFyYW1zKTsKLSAgICAgICAgICAgICAgICB0b3BMYXlvdXQuYWRkVmlldyhiYWNrZ3JvdW5kTGF5b3V0KTsKLQotCi0gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRoZW1lIHNheXMgbm8gdGl0bGUvYWN0aW9uIGJhciwgdGhlbiB0aGUgc2l6ZSB3aWxsIGJlIDAKLSAgICAgICAgICAgICAgICBpZiAobUFjdGlvbkJhclNpemUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGYWtlQWN0aW9uQmFyIGFjdGlvbkJhciA9IG5ldyBGYWtlQWN0aW9uQmFyKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlQ29uZmlnLmdldERlbnNpdHkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmdldEFwcExhYmVsKCksIHBhcmFtcy5nZXRBcHBJY29uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uQmFyLnNldExheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwgbUFjdGlvbkJhclNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXlvdXQuYWRkVmlldyhhY3Rpb25CYXIpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtVGl0bGVCYXJTaXplID4gMCkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGVCYXIgdGl0bGVCYXIgPSBuZXcgVGl0bGVCYXIoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVDb25maWcuZ2V0RGVuc2l0eSgpLCBwYXJhbXMuZ2V0QXBwTGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUJhci5zZXRMYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsIG1UaXRsZUJhclNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXlvdXQuYWRkVmlldyh0aXRsZUJhcik7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgewotCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBjb250ZW50IGZyYW1lCi0gICAgICAgICAgICAgICAgbUNvbnRlbnRSb290ID0gbmV3IEZyYW1lTGF5b3V0KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIGxheW91dFBhcmFtcyA9IG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCk7Ci0gICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLndlaWdodCA9IDE7Ci0gICAgICAgICAgICAgICAgbUNvbnRlbnRSb290LnNldExheW91dFBhcmFtcyhsYXlvdXRQYXJhbXMpOwotICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXlvdXQuYWRkVmlldyhtQ29udGVudFJvb3QpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1OYXZpZ2F0aW9uQmFyT3JpZW50YXRpb24gPT0gTGluZWFyTGF5b3V0LkhPUklaT05UQUwgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIG1OYXZpZ2F0aW9uQmFyU2l6ZSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gc3lzdGVtIGJhcgotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGlvbkJhciBuYXZpZ2F0aW9uQmFyID0gbmV3IE5hdmlnYXRpb25CYXIoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVDb25maWcuZ2V0RGVuc2l0eSgpLCBMaW5lYXJMYXlvdXQuSE9SSVpPTlRBTCwgaXNSdGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pc1J0bFN1cHBvcnRlZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25CYXIuc2V0TGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCBtTmF2aWdhdGlvbkJhclNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvcExheW91dC5hZGRWaWV3KG5hdmlnYXRpb25CYXIpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgIC8vIFNldHMgdGhlIHByb2plY3QgY2FsbGJhY2sgKGN1c3RvbSB2aWV3IGxvYWRlcikgdG8gdGhlIGZyYWdtZW50IGRlbGVnYXRlIHNvIHRoYXQKLSAgICAgICAgICAgIC8vIGl0IGNhbiBpbnN0YW50aWF0ZSB0aGUgY3VzdG9tIEZyYWdtZW50LgotICAgICAgICAgICAgRnJhZ21lbnRfRGVsZWdhdGUuc2V0UHJvamVjdENhbGxiYWNrKHBhcmFtcy5nZXRQcm9qZWN0Q2FsbGJhY2soKSk7Ci0KLSAgICAgICAgICAgIFZpZXcgdmlldyA9IG1JbmZsYXRlci5pbmZsYXRlKG1CbG9ja1BhcnNlciwgbUNvbnRlbnRSb290KTsKLQotICAgICAgICAgICAgLy8gZG9uZSB3aXRoIHRoZSBwYXJzZXIsIHBvcCBpdC4KLSAgICAgICAgICAgIGNvbnRleHQucG9wUGFyc2VyKCk7Ci0KLSAgICAgICAgICAgIEZyYWdtZW50X0RlbGVnYXRlLnNldFByb2plY3RDYWxsYmFjayhudWxsKTsKLQotICAgICAgICAgICAgLy8gc2V0IHRoZSBBdHRhY2hJbmZvIG9uIHRoZSByb290IHZpZXcuCi0gICAgICAgICAgICBBdHRhY2hJbmZvX0FjY2Vzc29yLnNldEF0dGFjaEluZm8obVZpZXdSb290KTsKLQotICAgICAgICAgICAgLy8gcG9zdC1pbmZsYXRlIHByb2Nlc3MuIEZvciBub3cgdGhpcyBzdXBwb3J0cyBUYWJIb3N0L1RhYldpZGdldAotICAgICAgICAgICAgcG9zdEluZmxhdGVQcm9jZXNzKHZpZXcsIHBhcmFtcy5nZXRQcm9qZWN0Q2FsbGJhY2soKSk7Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgYmFja2dyb3VuZCBkcmF3YWJsZQotICAgICAgICAgICAgaWYgKG1XaW5kb3dCYWNrZ3JvdW5kICE9IG51bGwgJiYgYmFja2dyb3VuZFZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIERyYXdhYmxlIGQgPSBSZXNvdXJjZUhlbHBlci5nZXREcmF3YWJsZShtV2luZG93QmFja2dyb3VuZCwgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgYmFja2dyb3VuZFZpZXcuc2V0QmFja2dyb3VuZChkKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIFNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgICAgIH0gY2F0Y2ggKFBvc3RJbmZsYXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTkZMQVRJT04uY3JlYXRlUmVzdWx0KGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKLSAgICAgICAgICAgIC8vIGdldCB0aGUgcmVhbCBjYXVzZSBvZiB0aGUgZXhjZXB0aW9uLgotICAgICAgICAgICAgVGhyb3dhYmxlIHQgPSBlOwotICAgICAgICAgICAgd2hpbGUgKHQuZ2V0Q2F1c2UoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdCA9IHQuZ2V0Q2F1c2UoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lORkxBVElPTi5jcmVhdGVSZXN1bHQodC5nZXRNZXNzYWdlKCksIHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVuZGVycyB0aGUgc2NlbmUuCi0gICAgICogPHA+Ci0gICAgICoge0BsaW5rICNhY3F1aXJlKGxvbmcpfSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZnJlc2hSZW5kZXIgd2hldGhlciB0aGUgcmVuZGVyIGlzIGEgbmV3IG9uZSBhbmQgc2hvdWxkIGVyYXNlIHRoZSBleGlzdGluZyBiaXRtYXAgKGluCi0gICAgICogICAgICB0aGUgY2FzZSB3aGVyZSBiaXRtYXBzIGFyZSByZXVzZWQpLiBUaGlzIGlzIHR5cGljYWxseSBuZWVkZWQgd2hlbiBub3QgcGxheWluZwotICAgICAqICAgICAgYW5pbWF0aW9ucy4pCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZSwgb3IgaWYge0BsaW5rICNhY3F1aXJlKGxvbmcpfSB3YXMgbm90IGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBzZWUgUmVuZGVyUGFyYW1zI2dldFJlbmRlcmluZ01vZGUoKQotICAgICAqIEBzZWUgUmVuZGVyU2Vzc2lvbiNyZW5kZXIobG9uZykKLSAgICAgKi8KLSAgICBwdWJsaWMgUmVzdWx0IHJlbmRlcihib29sZWFuIGZyZXNoUmVuZGVyKSB7Ci0gICAgICAgIGNoZWNrTG9jaygpOwotCi0gICAgICAgIFNlc3Npb25QYXJhbXMgcGFyYW1zID0gZ2V0UGFyYW1zKCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChtVmlld1Jvb3QgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9OT1RfSU5GTEFURUQuY3JlYXRlUmVzdWx0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHBhcmFtcy5nZXRSZW5kZXJpbmdNb2RlKCk7Ci0gICAgICAgICAgICBIYXJkd2FyZUNvbmZpZyBoYXJkd2FyZUNvbmZpZyA9IHBhcmFtcy5nZXRIYXJkd2FyZUNvbmZpZygpOwotCi0gICAgICAgICAgICAvLyBvbmx5IGRvIHRoZSBzY3JlZW4gbWVhc3VyZSB3aGVuIG5lZWRlZC4KLSAgICAgICAgICAgIGJvb2xlYW4gbmV3UmVuZGVyU2l6ZSA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKG1NZWFzdXJlZFNjcmVlbldpZHRoID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgbmV3UmVuZGVyU2l6ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbU1lYXN1cmVkU2NyZWVuV2lkdGggPSBoYXJkd2FyZUNvbmZpZy5nZXRTY3JlZW5XaWR0aCgpOwotICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCA9IGhhcmR3YXJlQ29uZmlnLmdldFNjcmVlbkhlaWdodCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZS5OT1JNQUwpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoTWVhc3VyZVNwZWNNb2RlID0gcmVuZGVyaW5nTW9kZS5pc0hvcml6RXhwYW5kKCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lYXN1cmVTcGVjLlVOU1BFQ0lGSUVEIC8vIHRoaXMgbGV0cyB1cyBrbm93IHRoZSBhY3R1YWwgbmVlZGVkIHNpemUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1lYXN1cmVTcGVjLkVYQUNUTFk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHRNZWFzdXJlU3BlY01vZGUgPSByZW5kZXJpbmdNb2RlLmlzVmVydEV4cGFuZCgpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRCAvLyB0aGlzIGxldHMgdXMga25vdyB0aGUgYWN0dWFsIG5lZWRlZCBzaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNZWFzdXJlU3BlYy5FWEFDVExZOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZWQgdG8gY29tcGFyZSB0aGUgbWVhc3VyZWQgc2l6ZSBvZiB0aGUgY29udGVudCB0byB0aGUgc2NyZWVuIHNpemUgYnV0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgZG9lcyBub3Qgd29yayBhbnltb3JlIGR1ZSB0byB0aGUgMiBmb2xsb3dpbmcgaXNzdWVzOgotICAgICAgICAgICAgICAgICAgICAvLyAtIElmIHRoZSBjb250ZW50IGlzIGluIGEgZGVjb3IgKHN5c3RlbSBiYXIsIHRpdGxlL2FjdGlvbiBiYXIpLCB0aGUgcm9vdCB2aWV3Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgd2lsbCBub3QgcmVzaXplIGV2ZW4gd2l0aCB0aGUgVU5TUEVDSUZJRUQgYmVjYXVzZSBvZiB0aGUgZW1iZWRkZWQgbGF5b3V0LgotICAgICAgICAgICAgICAgICAgICAvLyAtIElmIHRoZXJlIGlzIG5vIGRlY29yLCBidXQgYSBkaWFsb2cgZnJhbWUsIHRoZW4gdGhlIGRpYWxvZyBwYWRkaW5nIHByZXZlbnRzCi0gICAgICAgICAgICAgICAgICAgIC8vICAgY29tcGFyaW5nIHRoZSBzaXplIG9mIHRoZSBjb250ZW50IHRvIHRoZSBzY3JlZW4gZnJhbWUgKGFzIGl0IHdvdWxkIG5vdAotICAgICAgICAgICAgICAgICAgICAvLyAgIHRha2UgaW50byBhY2NvdW50IHRoZSBkaWFsb2cgcGFkZGluZykuCi0KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHNvbHV0aW9uIGlzIHRvIGZpcnN0IGdldCB0aGUgY29udGVudCBzaXplIGluIGEgbm9ybWFsIHJlbmRlcmluZywgaW5zaWRlCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBkZWNvciBvciB0aGUgZGlhbG9nIHBhZGRpbmcuCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZW4gbWVhc3VyZSBvbmx5IHRoZSBjb250ZW50IHdpdGggVU5TUEVDSUZJRUQgdG8gc2VlIHRoZSBzaXplIGRpZmZlcmVuY2UKLSAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGFwcGx5IHRoaXMgdG8gdGhlIHNjcmVlbiBzaXplLgotCi0gICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IG1lYXN1cmUgdGhlIGZ1bGwgbGF5b3V0LCB3aXRoIEVYQUNUTFkgdG8gZ2V0IHRoZSBzaXplIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50IGFzIGl0IGlzIGluc2lkZSB0aGUgZGVjb3IvZGlhbG9nCi0gICAgICAgICAgICAgICAgICAgIFBhaXI8SW50ZWdlciwgSW50ZWdlcj4gZXhhY3RNZWFzdXJlID0gbWVhc3VyZVZpZXcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXdSb290LCBtQ29udGVudFJvb3QuZ2V0Q2hpbGRBdCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVhc3VyZWRTY3JlZW5XaWR0aCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVhc3VyZWRTY3JlZW5IZWlnaHQsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vdyBtZWFzdXJlIHRoZSBjb250ZW50IG9ubHkgdXNpbmcgVU5TUEVDSUZJRUQgKHdoZXJlIGFwcGxpY2FibGUsIGJhc2VkIG9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZW5kZXJpbmcgbW9kZSkuIFRoaXMgd2lsbCBnaXZlIHVzIHRoZSBzaXplIHRoZSBjb250ZW50IG5lZWRzLgotICAgICAgICAgICAgICAgICAgICBQYWlyPEludGVnZXIsIEludGVnZXI+IHJlc3VsdCA9IG1lYXN1cmVWaWV3KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZW50Um9vdCwgbUNvbnRlbnRSb290LmdldENoaWxkQXQoMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1lYXN1cmVkU2NyZWVuV2lkdGgsIHdpZHRoTWVhc3VyZVNwZWNNb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCwgaGVpZ2h0TWVhc3VyZVNwZWNNb2RlKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBub3cgbG9vayBhdCB0aGUgZGlmZmVyZW5jZSBhbmQgYWRkIHdoYXQgaXMgbmVlZGVkLgotICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyaW5nTW9kZS5pc0hvcml6RXhwYW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZWFzdXJlZFdpZHRoID0gZXhhY3RNZWFzdXJlLmdldEZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmVlZGVkV2lkdGggPSByZXN1bHQuZ2V0Rmlyc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkZWRXaWR0aCA+IG1lYXN1cmVkV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVhc3VyZWRTY3JlZW5XaWR0aCArPSBuZWVkZWRXaWR0aCAtIG1lYXN1cmVkV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyaW5nTW9kZS5pc1ZlcnRFeHBhbmQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lYXN1cmVkSGVpZ2h0ID0gZXhhY3RNZWFzdXJlLmdldFNlY29uZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5lZWRlZEhlaWdodCA9IHJlc3VsdC5nZXRTZWNvbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkZWRIZWlnaHQgPiBtZWFzdXJlZEhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCArPSBuZWVkZWRIZWlnaHQgLSBtZWFzdXJlZEhlaWdodDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbWVhc3VyZSBhZ2FpbiB3aXRoIHRoZSBzaXplIHdlIG5lZWQKLSAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBhbHdheXMgYmUgZG9uZSBiZWZvcmUgdGhlIGNhbGwgdG8gbGF5b3V0Ci0gICAgICAgICAgICBtZWFzdXJlVmlldyhtVmlld1Jvb3QsIG51bGwgLyptZWFzdXJlZFZpZXcqLywKLSAgICAgICAgICAgICAgICAgICAgbU1lYXN1cmVkU2NyZWVuV2lkdGgsIE1lYXN1cmVTcGVjLkVYQUNUTFksCi0gICAgICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7Ci0KLSAgICAgICAgICAgIC8vIG5vdyBkbyB0aGUgbGF5b3V0LgotICAgICAgICAgICAgbVZpZXdSb290LmxheW91dCgwLCAwLCBtTWVhc3VyZWRTY3JlZW5XaWR0aCwgbU1lYXN1cmVkU2NyZWVuSGVpZ2h0KTsKLQotICAgICAgICAgICAgaWYgKHBhcmFtcy5pc0xheW91dE9ubHkoKSkgewotICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGUgY2FudmFzIGFuZCBpbWFnZSB0byByZXNldCB0aGVtIG9uIHRoZSBuZXh0IGZ1bGwgcmVuZGVyaW5nCi0gICAgICAgICAgICAgICAgbUltYWdlID0gbnVsbDsKLSAgICAgICAgICAgICAgICBtQ2FudmFzID0gbnVsbDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQXR0YWNoSW5mb19BY2Nlc3Nvci5kaXNwYXRjaE9uUHJlRHJhdyhtVmlld1Jvb3QpOwotCi0gICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgdmlld3MKLSAgICAgICAgICAgICAgICAvLyBjcmVhdGUgdGhlIEJ1ZmZlcmVkSW1hZ2UgaW50byB3aGljaCB0aGUgbGF5b3V0IHdpbGwgYmUgcmVuZGVyZWQuCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBuZXdJbWFnZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmIChuZXdSZW5kZXJTaXplIHx8IG1DYW52YXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmdldEltYWdlRmFjdG9yeSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZSA9IHBhcmFtcy5nZXRJbWFnZUZhY3RvcnkoKS5nZXRJbWFnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1lYXN1cmVkU2NyZWVuV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtSW1hZ2UgPSBuZXcgQnVmZmVyZWRJbWFnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1lYXN1cmVkU2NyZWVuV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ltYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuaXNCZ0NvbG9yT3ZlcnJpZGRlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBvdmVycmlkZSB0aGUgY29udGVudCwgaXQncyB0aGUgc2FtZSBhcyBpZiBpdCB3YXMgYSBuZXcgaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdJbWFnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljczJEIGdjID0gbUltYWdlLmNyZWF0ZUdyYXBoaWNzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnYy5zZXRDb2xvcihuZXcgQ29sb3IocGFyYW1zLmdldE92ZXJyaWRlQmdDb2xvcigpLCB0cnVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnYy5zZXRDb21wb3NpdGUoQWxwaGFDb21wb3NpdGUuU3JjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdjLmZpbGxSZWN0KDAsIDAsIG1NZWFzdXJlZFNjcmVlbldpZHRoLCBtTWVhc3VyZWRTY3JlZW5IZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ2MuZGlzcG9zZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIEFuZHJvaWQgYml0bWFwIGFyb3VuZCB0aGUgQnVmZmVyZWRJbWFnZQotICAgICAgICAgICAgICAgICAgICBCaXRtYXAgYml0bWFwID0gQml0bWFwX0RlbGVnYXRlLmNyZWF0ZUJpdG1hcChtSW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKmlzTXV0YWJsZSovLCBoYXJkd2FyZUNvbmZpZy5nZXREZW5zaXR5KCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIENhbnZhcyBhcm91bmQgdGhlIEFuZHJvaWQgYml0bWFwCi0gICAgICAgICAgICAgICAgICAgIG1DYW52YXMgPSBuZXcgQ2FudmFzKGJpdG1hcCk7Ci0gICAgICAgICAgICAgICAgICAgIG1DYW52YXMuc2V0RGVuc2l0eShoYXJkd2FyZUNvbmZpZy5nZXREZW5zaXR5KCkuZ2V0RHBpVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGZyZXNoUmVuZGVyICYmIG5ld0ltYWdlID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzMkQgZ2MgPSBtSW1hZ2UuY3JlYXRlR3JhcGhpY3MoKTsKLSAgICAgICAgICAgICAgICAgICAgZ2Muc2V0Q29tcG9zaXRlKEFscGhhQ29tcG9zaXRlLlNyYyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZ2Muc2V0Q29sb3IobmV3IENvbG9yKDB4MDAwMDAwMDAsIHRydWUpKTsKLSAgICAgICAgICAgICAgICAgICAgZ2MuZmlsbFJlY3QoMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVhc3VyZWRTY3JlZW5XaWR0aCwgbU1lYXN1cmVkU2NyZWVuSGVpZ2h0KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBkb25lCi0gICAgICAgICAgICAgICAgICAgIGdjLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtVmlld1Jvb3QuZHJhdyhtQ2FudmFzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVZpZXdJbmZvTGlzdCA9IHN0YXJ0VmlzaXRpbmdWaWV3cyhtVmlld1Jvb3QsIDAsIHBhcmFtcy5nZXRFeHRlbmRlZFZpZXdJbmZvTW9kZSgpKTsKLQotICAgICAgICAgICAgLy8gc3VjY2VzcyEKLSAgICAgICAgICAgIHJldHVybiBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewotICAgICAgICAgICAgLy8gZ2V0IHRoZSByZWFsIGNhdXNlIG9mIHRoZSBleGNlcHRpb24uCi0gICAgICAgICAgICBUaHJvd2FibGUgdCA9IGU7Ci0gICAgICAgICAgICB3aGlsZSAodC5nZXRDYXVzZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0ID0gdC5nZXRDYXVzZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gRVJST1JfVU5LTk9XTi5jcmVhdGVSZXN1bHQodC5nZXRNZXNzYWdlKCksIHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXhlY3V0ZXMge0BsaW5rIFZpZXcjbWVhc3VyZShpbnQsIGludCl9IG9uIGEgZ2l2ZW4gdmlldyB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzICh1c2VkCi0gICAgICogdG8gY3JlYXRlIG1lYXN1cmUgc3BlY3Mgd2l0aCB7QGxpbmsgTWVhc3VyZVNwZWMjbWFrZU1lYXN1cmVTcGVjKGludCwgaW50KX0uCi0gICAgICoKLSAgICAgKiBpZiA8dmFyPm1lYXN1cmVkVmlldzwvdmFyPiBpcyBub24gbnVsbCwgdGhlIG1ldGhvZCByZXR1cm5zIGEge0BsaW5rIFBhaXJ9IG9mICh3aWR0aCwgaGVpZ2h0KQotICAgICAqIGZvciB0aGUgdmlldyAodXNpbmcge0BsaW5rIFZpZXcjZ2V0TWVhc3VyZWRXaWR0aCgpfSBhbmQge0BsaW5rIFZpZXcjZ2V0TWVhc3VyZWRIZWlnaHQoKX0pLgotICAgICAqCi0gICAgICogQHBhcmFtIHZpZXdUb01lYXN1cmUgdGhlIHZpZXcgb24gd2hpY2ggdG8gZXhlY3V0ZSBtZWFzdXJlKCkuCi0gICAgICogQHBhcmFtIG1lYXN1cmVkVmlldyBpZiBub24gbnVsbCwgdGhlIHZpZXcgdG8gcXVlcnkgZm9yIGl0cyBtZWFzdXJlZCB3aWR0aC9oZWlnaHQuCi0gICAgICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCB0byB1c2UgaW4gdGhlIE1lYXN1cmVTcGVjLgotICAgICAqIEBwYXJhbSB3aWR0aE1vZGUgdGhlIE1lYXN1cmVTcGVjIG1vZGUgdG8gdXNlIGZvciB0aGUgd2lkdGguCi0gICAgICogQHBhcmFtIGhlaWdodCB0aGUgaGVpZ2h0IHRvIHVzZSBpbiB0aGUgTWVhc3VyZVNwZWMuCi0gICAgICogQHBhcmFtIGhlaWdodE1vZGUgdGhlIE1lYXN1cmVTcGVjIG1vZGUgdG8gdXNlIGZvciB0aGUgaGVpZ2h0LgotICAgICAqIEByZXR1cm4gdGhlIG1lYXN1cmVkIHdpZHRoL2hlaWdodCBpZiBtZWFzdXJlZFZpZXcgaXMgbm9uLW51bGwsIG51bGwgb3RoZXJ3aXNlLgotICAgICAqLwotICAgIHByaXZhdGUgUGFpcjxJbnRlZ2VyLCBJbnRlZ2VyPiBtZWFzdXJlVmlldyhWaWV3R3JvdXAgdmlld1RvTWVhc3VyZSwgVmlldyBtZWFzdXJlZFZpZXcsCi0gICAgICAgICAgICBpbnQgd2lkdGgsIGludCB3aWR0aE1vZGUsIGludCBoZWlnaHQsIGludCBoZWlnaHRNb2RlKSB7Ci0gICAgICAgIGludCB3X3NwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMod2lkdGgsIHdpZHRoTW9kZSk7Ci0gICAgICAgIGludCBoX3NwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoaGVpZ2h0LCBoZWlnaHRNb2RlKTsKLSAgICAgICAgdmlld1RvTWVhc3VyZS5tZWFzdXJlKHdfc3BlYywgaF9zcGVjKTsKLQotICAgICAgICBpZiAobWVhc3VyZWRWaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBQYWlyLm9mKG1lYXN1cmVkVmlldy5nZXRNZWFzdXJlZFdpZHRoKCksIG1lYXN1cmVkVmlldy5nZXRNZWFzdXJlZEhlaWdodCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFuaW1hdGUgYW4gb2JqZWN0Ci0gICAgICogPHA+Ci0gICAgICoge0BsaW5rICNhY3F1aXJlKGxvbmcpfSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZSwgb3IgaWYge0BsaW5rICNhY3F1aXJlKGxvbmcpfSB3YXMgbm90IGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBzZWUgUmVuZGVyU2Vzc2lvbiNhbmltYXRlKE9iamVjdCwgU3RyaW5nLCBib29sZWFuLCBJQW5pbWF0aW9uTGlzdGVuZXIpCi0gICAgICovCi0gICAgcHVibGljIFJlc3VsdCBhbmltYXRlKE9iamVjdCB0YXJnZXRPYmplY3QsIFN0cmluZyBhbmltYXRpb25OYW1lLAotICAgICAgICAgICAgYm9vbGVhbiBpc0ZyYW1ld29ya0FuaW1hdGlvbiwgSUFuaW1hdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIGNoZWNrTG9jaygpOwotCi0gICAgICAgIEJyaWRnZUNvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKLQotICAgICAgICAvLyBmaW5kIHRoZSBhbmltYXRpb24gZmlsZS4KLSAgICAgICAgUmVzb3VyY2VWYWx1ZSBhbmltYXRpb25SZXNvdXJjZSA9IG51bGw7Ci0gICAgICAgIGludCBhbmltYXRpb25JZCA9IDA7Ci0gICAgICAgIGlmIChpc0ZyYW1ld29ya0FuaW1hdGlvbikgewotICAgICAgICAgICAgYW5pbWF0aW9uUmVzb3VyY2UgPSBjb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpLmdldEZyYW1ld29ya1Jlc291cmNlKAotICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVR5cGUuQU5JTUFUT1IsIGFuaW1hdGlvbk5hbWUpOwotICAgICAgICAgICAgaWYgKGFuaW1hdGlvblJlc291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBhbmltYXRpb25JZCA9IEJyaWRnZS5nZXRSZXNvdXJjZUlkKFJlc291cmNlVHlwZS5BTklNQVRPUiwgYW5pbWF0aW9uTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhbmltYXRpb25SZXNvdXJjZSA9IGNvbnRleHQuZ2V0UmVuZGVyUmVzb3VyY2VzKCkuZ2V0UHJvamVjdFJlc291cmNlKAotICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVR5cGUuQU5JTUFUT1IsIGFuaW1hdGlvbk5hbWUpOwotICAgICAgICAgICAgaWYgKGFuaW1hdGlvblJlc291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBhbmltYXRpb25JZCA9IGNvbnRleHQuZ2V0UHJvamVjdENhbGxiYWNrKCkuZ2V0UmVzb3VyY2VJZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVHlwZS5BTklNQVRPUiwgYW5pbWF0aW9uTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYW5pbWF0aW9uUmVzb3VyY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBBbmltYXRvciBhbmltID0gQW5pbWF0b3JJbmZsYXRlci5sb2FkQW5pbWF0b3IoY29udGV4dCwgYW5pbWF0aW9uSWQpOwotICAgICAgICAgICAgICAgIGlmIChhbmltICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgYW5pbS5zZXRUYXJnZXQodGFyZ2V0T2JqZWN0KTsKLQotICAgICAgICAgICAgICAgICAgICBuZXcgUGxheUFuaW1hdGlvblRocmVhZChhbmltLCB0aGlzLCBhbmltYXRpb25OYW1lLCBsaXN0ZW5lcikuc3RhcnQoKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgcmVhbCBjYXVzZSBvZiB0aGUgZXhjZXB0aW9uLgotICAgICAgICAgICAgICAgIFRocm93YWJsZSB0ID0gZTsKLSAgICAgICAgICAgICAgICB3aGlsZSAodC5nZXRDYXVzZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdCA9IHQuZ2V0Q2F1c2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfVU5LTk9XTi5jcmVhdGVSZXN1bHQodC5nZXRNZXNzYWdlKCksIHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEVSUk9SX0FOSU1fTk9UX0ZPVU5ELmNyZWF0ZVJlc3VsdCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluc2VydCBhIG5ldyBjaGlsZCBpbnRvIGFuIGV4aXN0aW5nIHBhcmVudC4KLSAgICAgKiA8cD4KLSAgICAgKiB7QGxpbmsgI2FjcXVpcmUobG9uZyl9IG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBiZWZvcmUgdGhpcy4KLSAgICAgKgotICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgZGlmZmVyZW50IHRoYW4gdGhlIG9uZSBvd25lZCBieQotICAgICAqICAgICAgdGhlIHNjZW5lLCBvciBpZiB7QGxpbmsgI2FjcXVpcmUobG9uZyl9IHdhcyBub3QgY2FsbGVkLgotICAgICAqCi0gICAgICogQHNlZSBSZW5kZXJTZXNzaW9uI2luc2VydENoaWxkKE9iamVjdCwgSUxheW91dFB1bGxQYXJzZXIsIGludCwgSUFuaW1hdGlvbkxpc3RlbmVyKQotICAgICAqLwotICAgIHB1YmxpYyBSZXN1bHQgaW5zZXJ0Q2hpbGQoZmluYWwgVmlld0dyb3VwIHBhcmVudFZpZXcsIElMYXlvdXRQdWxsUGFyc2VyIGNoaWxkWG1sLAotICAgICAgICAgICAgZmluYWwgaW50IGluZGV4LCBJQW5pbWF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgY2hlY2tMb2NrKCk7Ci0KLSAgICAgICAgQnJpZGdlQ29udGV4dCBjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotCi0gICAgICAgIC8vIGNyZWF0ZSBhIGJsb2NrIHBhcnNlciBmb3IgdGhlIFhNTAotICAgICAgICBCcmlkZ2VYbWxCbG9ja1BhcnNlciBibG9ja1BhcnNlciA9IG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcigKLSAgICAgICAgICAgICAgICBjaGlsZFhtbCwgY29udGV4dCwgZmFsc2UgLyogcGxhdGZvcm1SZXNvdXJjZUZsYWcgKi8pOwotCi0gICAgICAgIC8vIGluZmxhdGUgdGhlIGNoaWxkIHdpdGhvdXQgYWRkaW5nIGl0IHRvIHRoZSByb290IHNpbmNlIHdlIHdhbnQgdG8gY29udHJvbCB3aGVyZSBpdCdsbAotICAgICAgICAvLyBnZXQgYWRkZWQuIFdlIGRvIHBhc3MgdGhlIHBhcmVudFZpZXcgaG93ZXZlciB0byBlbnN1cmUgdGhhdCB0aGUgbGF5b3V0UGFyYW1zIHdpbGwKLSAgICAgICAgLy8gYmUgY3JlYXRlZCBjb3JyZWN0bHkuCi0gICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBtSW5mbGF0ZXIuaW5mbGF0ZShibG9ja1BhcnNlciwgcGFyZW50VmlldywgZmFsc2UgLyphdHRhY2hUb1Jvb3QqLyk7Ci0gICAgICAgIGJsb2NrUGFyc2VyLmVuc3VyZVBvcHBlZCgpOwotCi0gICAgICAgIGludmFsaWRhdGVSZW5kZXJpbmdTaXplKCk7Ci0KLSAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG5ldyBBbmltYXRpb25UaHJlYWQodGhpcywgImluc2VydENoaWxkIiwgbGlzdGVuZXIpIHsKLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyBSZXN1bHQgcHJlQW5pbWF0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBwYXJlbnRWaWV3LnNldExheW91dFRyYW5zaXRpb24obmV3IExheW91dFRyYW5zaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRWaWV3KHBhcmVudFZpZXcsIGNoaWxkLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcG9zdEFuaW1hdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50Vmlldy5zZXRMYXlvdXRUcmFuc2l0aW9uKG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0uc3RhcnQoKTsKLQotICAgICAgICAgICAgLy8gYWx3YXlzIHJldHVybiBzdWNjZXNzIHNpbmNlIHRoZSByZWFsIHN0YXR1cyB3aWxsIGNvbWUgdGhyb3VnaCB0aGUgbGlzdGVuZXIuCi0gICAgICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQoY2hpbGQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYWRkIGl0IHRvIHRoZSBwYXJlbnRWaWV3IGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uCi0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBhZGRWaWV3KHBhcmVudFZpZXcsIGNoaWxkLCBpbmRleCk7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSByZW5kZXIoZmFsc2UgLypmcmVzaFJlbmRlciovKTsKLSAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MoKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmdldENvcHlXaXRoRGF0YShjaGlsZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZHMgYSBnaXZlbiB2aWV3IHRvIGEgZ2l2ZW4gcGFyZW50IGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcGFyZW50IHRoZSBwYXJlbnQgdG8gcmVjZWl2ZSB0aGUgdmlldwotICAgICAqIEBwYXJhbSB2aWV3IHRoZSB2aWV3IHRvIGFkZCB0byB0aGUgcGFyZW50Ci0gICAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCB3aGVyZSB0byBkbyB0aGUgYWRkLgotICAgICAqCi0gICAgICogQHJldHVybiBhIFJlc3VsdCB3aXRoIHtAbGluayBTdGF0dXMjU1VDQ0VTU30gb3IKLSAgICAgKiAgICAge0BsaW5rIFN0YXR1cyNFUlJPUl9WSUVXR1JPVVBfTk9fQ0hJTERSRU59IGlmIHRoZSBnaXZlbiBwYXJlbnQgZG9lc24ndCBzdXBwb3J0Ci0gICAgICogICAgIGFkZGluZyB2aWV3cy4KLSAgICAgKi8KLSAgICBwcml2YXRlIFJlc3VsdCBhZGRWaWV3KFZpZXdHcm91cCBwYXJlbnQsIFZpZXcgdmlldywgaW50IGluZGV4KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBwYXJlbnQuYWRkVmlldyh2aWV3LCBpbmRleCk7Ci0gICAgICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQoKTsKLSAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gbG9va3MgbGlrZSB0aGlzIGlzIGEgdmlldyBjbGFzcyB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBjaGlsZHJlbiBtYW5pcHVsYXRpb24hCi0gICAgICAgICAgICByZXR1cm4gRVJST1JfVklFV0dST1VQX05PX0NISUxEUkVOLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTW92ZXMgYSB2aWV3IHRvIGEgbmV3IHBhcmVudCBhdCBhIGdpdmVuIGxvY2F0aW9uCi0gICAgICogPHA+Ci0gICAgICoge0BsaW5rICNhY3F1aXJlKGxvbmcpfSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZSwgb3IgaWYge0BsaW5rICNhY3F1aXJlKGxvbmcpfSB3YXMgbm90IGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBzZWUgUmVuZGVyU2Vzc2lvbiNtb3ZlQ2hpbGQoT2JqZWN0LCBPYmplY3QsIGludCwgTWFwLCBJQW5pbWF0aW9uTGlzdGVuZXIpCi0gICAgICovCi0gICAgcHVibGljIFJlc3VsdCBtb3ZlQ2hpbGQoZmluYWwgVmlld0dyb3VwIG5ld1BhcmVudFZpZXcsIGZpbmFsIFZpZXcgY2hpbGRWaWV3LCBmaW5hbCBpbnQgaW5kZXgsCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGxheW91dFBhcmFtc01hcCwgZmluYWwgSUFuaW1hdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIGNoZWNrTG9jaygpOwotCi0gICAgICAgIGludmFsaWRhdGVSZW5kZXJpbmdTaXplKCk7Ci0KLSAgICAgICAgTGF5b3V0UGFyYW1zIGxheW91dFBhcmFtcyA9IG51bGw7Ci0gICAgICAgIGlmIChsYXlvdXRQYXJhbXNNYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gbmVlZCB0byBjcmVhdGUgYSBuZXcgTGF5b3V0UGFyYW1zIG9iamVjdCBmb3IgdGhlIG5ldyBwYXJlbnQuCi0gICAgICAgICAgICBsYXlvdXRQYXJhbXMgPSBuZXdQYXJlbnRWaWV3LmdlbmVyYXRlTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICBuZXcgQnJpZGdlTGF5b3V0UGFyYW1zTWFwQXR0cmlidXRlcyhsYXlvdXRQYXJhbXNNYXApKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgY3VycmVudCBwYXJlbnQgb2YgdGhlIHZpZXcgdGhhdCBuZWVkcyB0byBiZSBtb3ZlZC4KLSAgICAgICAgZmluYWwgVmlld0dyb3VwIHByZXZpb3VzUGFyZW50ID0gKFZpZXdHcm91cCkgY2hpbGRWaWV3LmdldFBhcmVudCgpOwotCi0gICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgcGFyYW1zID0gbGF5b3V0UGFyYW1zOwotCi0gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBhbmltYXRpbmcgdmlld3MgYWNyb3NzIGxheW91dHMsIHNvIGluIGNhc2UgdGhlIG5ldyBhbmQgb2xkCi0gICAgICAgICAgICAvLyBwYXJlbnQgdmlld3MgYXJlIGRpZmZlcmVudCB3ZSBmYWtlIHRoZSBhbmltYXRpb24gdGhyb3VnaCBhIG5vIGFuaW1hdGlvbiB0aHJlYWQuCi0gICAgICAgICAgICBpZiAocHJldmlvdXNQYXJlbnQgIT0gbmV3UGFyZW50VmlldykgewotICAgICAgICAgICAgICAgIG5ldyBUaHJlYWQoIm5vdCBhbmltYXRlZCBtb3ZlQ2hpbGQiKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgcmVzdWx0ID0gbW92ZVZpZXcocHJldmlvdXNQYXJlbnQsIG5ld1BhcmVudFZpZXcsIGNoaWxkVmlldywgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuZG9uZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFkeSB0byBkbyB0aGUgd29yaywgYWNxdWlyZSB0aGUgc2NlbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhY3F1aXJlKDI1MCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuZG9uZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZW5kZXIoZmFsc2UgLypmcmVzaFJlbmRlciovKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLm9uTmV3RnJhbWUoUmVuZGVyU2Vzc2lvbkltcGwudGhpcy5nZXRTZXNzaW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5kb25lKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LnN0YXJ0KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5ldyBBbmltYXRpb25UaHJlYWQodGhpcywgIm1vdmVDaGlsZCIsIGxpc3RlbmVyKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyBSZXN1bHQgcHJlQW5pbWF0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHVwIHRoZSB0cmFuc2l0aW9uIGZvciB0aGUgcGFyZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VHJhbnNpdGlvbiB0cmFuc2l0aW9uID0gbmV3IExheW91dFRyYW5zaXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUGFyZW50LnNldExheW91dFRyYW5zaXRpb24odHJhbnNpdGlvbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHR3ZWFrIHRoZSBhbmltYXRpb24gZHVyYXRpb25zIGFuZCBzdGFydCBkZWxheXMgKHRvIG1hdGNoIHRoZSBkdXJhdGlvbiBvZgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIHBsYXlpbmcganVzdCBiZWZvcmUpLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogQ2Fubm90IHVzZXIgQW5pbWF0aW9uLnNldER1cmF0aW9uKCkgZGlyZWN0bHkuIEhhdmUgdG8gc2V0IGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbiB0aGUgTGF5b3V0VHJhbnNpdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uc2V0RHVyYXRpb24oTGF5b3V0VHJhbnNpdGlvbi5ESVNBUFBFQVJJTkcsIDEwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDSEFOR0VfRElTQVBQRUFSSU5HIHBsYXlzIGFmdGVyIERJU0FQUEVBUklORwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi5zZXRTdGFydERlbGF5KExheW91dFRyYW5zaXRpb24uQ0hBTkdFX0RJU0FQUEVBUklORywgMTAwKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi5zZXREdXJhdGlvbihMYXlvdXRUcmFuc2l0aW9uLkNIQU5HRV9ESVNBUFBFQVJJTkcsIDEwMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uc2V0RHVyYXRpb24oTGF5b3V0VHJhbnNpdGlvbi5DSEFOR0VfQVBQRUFSSU5HLCAxMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0hBTkdFX0FQUEVBUklORyBwbGF5cyBhZnRlciBDSEFOR0VfQVBQRUFSSU5HCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLnNldFN0YXJ0RGVsYXkoTGF5b3V0VHJhbnNpdGlvbi5BUFBFQVJJTkcsIDEwMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uc2V0RHVyYXRpb24oTGF5b3V0VHJhbnNpdGlvbi5BUFBFQVJJTkcsIDEwMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb3ZlVmlldyhwcmV2aW91c1BhcmVudCwgbmV3UGFyZW50VmlldywgY2hpbGRWaWV3LCBpbmRleCwgcGFyYW1zKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBwb3N0QW5pbWF0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQYXJlbnQuc2V0TGF5b3V0VHJhbnNpdGlvbihudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcmVudFZpZXcuc2V0TGF5b3V0VHJhbnNpdGlvbihudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0uc3RhcnQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gYWx3YXlzIHJldHVybiBzdWNjZXNzIHNpbmNlIHRoZSByZWFsIHN0YXR1cyB3aWxsIGNvbWUgdGhyb3VnaCB0aGUgbGlzdGVuZXIuCi0gICAgICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQobGF5b3V0UGFyYW1zKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBtb3ZlVmlldyhwcmV2aW91c1BhcmVudCwgbmV3UGFyZW50VmlldywgY2hpbGRWaWV3LCBpbmRleCwgbGF5b3V0UGFyYW1zKTsKLSAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MoKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9IHJlbmRlcihmYWxzZSAvKmZyZXNoUmVuZGVyKi8pOwotICAgICAgICBpZiAobGF5b3V0UGFyYW1zICE9IG51bGwgJiYgcmVzdWx0LmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZ2V0Q29weVdpdGhEYXRhKGxheW91dFBhcmFtcyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE1vdmVzIGEgVmlldyBmcm9tIGl0cyBjdXJyZW50IHBhcmVudCB0byBhIG5ldyBnaXZlbiBwYXJlbnQgYXQgYSBuZXcgZ2l2ZW4gbG9jYXRpb24sIHdpdGgKLSAgICAgKiBhbiBvcHRpb25hbCBuZXcge0BsaW5rIExheW91dFBhcmFtc30gaW5zdGFuY2UKLSAgICAgKgotICAgICAqIEBwYXJhbSBwcmV2aW91c1BhcmVudCB0aGUgcHJldmlvdXMgcGFyZW50LCBzdGlsbCBvd25pbmcgdGhlIGNoaWxkIGF0IHRoZSB0aW1lIG9mIHRoZSBjYWxsLgotICAgICAqIEBwYXJhbSBuZXdQYXJlbnQgdGhlIG5ldyBwYXJlbnQKLSAgICAgKiBAcGFyYW0gbW92ZWRWaWV3IHRoZSB2aWV3IHRvIG1vdmUKLSAgICAgKiBAcGFyYW0gaW5kZXggdGhlIG5ldyBsb2NhdGlvbiBpbiB0aGUgbmV3IHBhcmVudAotICAgICAqIEBwYXJhbSBwYXJhbXMgYW4gb3B0aW9uIChjYW4gYmUgbnVsbCkge0BsaW5rIExheW91dFBhcmFtc30gaW5zdGFuY2UuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGEgUmVzdWx0IHdpdGgge0BsaW5rIFN0YXR1cyNTVUNDRVNTfSBvcgotICAgICAqICAgICB7QGxpbmsgU3RhdHVzI0VSUk9SX1ZJRVdHUk9VUF9OT19DSElMRFJFTn0gaWYgdGhlIGdpdmVuIHBhcmVudCBkb2Vzbid0IHN1cHBvcnQKLSAgICAgKiAgICAgYWRkaW5nIHZpZXdzLgotICAgICAqLwotICAgIHByaXZhdGUgUmVzdWx0IG1vdmVWaWV3KFZpZXdHcm91cCBwcmV2aW91c1BhcmVudCwgZmluYWwgVmlld0dyb3VwIG5ld1BhcmVudCwKLSAgICAgICAgICAgIGZpbmFsIFZpZXcgbW92ZWRWaWV3LCBmaW5hbCBpbnQgaW5kZXgsIGZpbmFsIExheW91dFBhcmFtcyBwYXJhbXMpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgdHJhbnNpdGlvbiBvbiB0aGUgcHJldmlvdXNQYXJlbnQuCi0gICAgICAgICAgICBMYXlvdXRUcmFuc2l0aW9uIHByZXZpb3VzVHJhbnNpdGlvbiA9IHByZXZpb3VzUGFyZW50LmdldExheW91dFRyYW5zaXRpb24oKTsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c1RyYW5zaXRpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB0aGVyZSBpcyBhbiBhbmltYXRpb24uIFRoaXMgbWVhbnMgd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgY2hpbGQncwotICAgICAgICAgICAgICAgIC8vIHBhcmVudCByZWZlcmVuY2UgdG8gYmUgbnVsbCdlZCBvdXQgc28gdGhhdCB3ZSBjYW4gYWRkIGl0IHRvIHRoZSBuZXcgcGFyZW50LgotICAgICAgICAgICAgICAgIC8vIEl0IGlzIHRlY2huaWNhbGx5IHJlbW92ZWQgcmlnaHQgYmVmb3JlIHRoZSBESVNBUFBFQVJJTkcgYW5pbWF0aW9uIGlzIGRvbmUgKGlmCi0gICAgICAgICAgICAgICAgLy8gdGhlIGFuaW1hdGlvbiBvZiB0aGlzIHR5cGUgaXMgbm90IG51bGwsIG90aGVyd2lzZSBpdCdzIGFmdGVyIHdoaWNoIGlzIGltcG9zc2libGUKLSAgICAgICAgICAgICAgICAvLyB0byBoYW5kbGUpLgotICAgICAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlcmUgaXMgbm8gbW92ZSBhbmltYXRpb24sIGlmIHRoZSBuZXcgcGFyZW50IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQKLSAgICAgICAgICAgICAgICAvLyBwYXJlbnQsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgQ0hBTkdFX0RJU0FQUEVBUklORyBhbmltYXRpb24gaXMgZG9uZSBiZWZvcmUKLSAgICAgICAgICAgICAgICAvLyBhZGRpbmcgdGhlIGNoaWxkIG9yIHRoZSBjaGlsZCB3aWxsIGFwcGVhciBpbiBpdHMgbmV3IGxvY2F0aW9uIGJlZm9yZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBvdGhlciBjaGlsZHJlbiBoYXZlIG1hZGUgcm9vbSBmb3IgaXQuCi0KLSAgICAgICAgICAgICAgICAvLyBhZGQgYSBsaXN0ZW5lciB0byB0aGUgdHJhbnNpdGlvbiB0byBiZSBub3RpZmllZCBvZiB0aGUgYWN0dWFsIHJlbW92YWwuCi0gICAgICAgICAgICAgICAgcHJldmlvdXNUcmFuc2l0aW9uLmFkZFRyYW5zaXRpb25MaXN0ZW5lcihuZXcgVHJhbnNpdGlvbkxpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgICAgICBwcml2YXRlIGludCBtQ2hhbmdlRGlzYXBwZWFyaW5nQ291bnQgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBzdGFydFRyYW5zaXRpb24oTGF5b3V0VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCBWaWV3R3JvdXAgY29udGFpbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgdmlldywgaW50IHRyYW5zaXRpb25UeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNpdGlvblR5cGUgPT0gTGF5b3V0VHJhbnNpdGlvbi5DSEFOR0VfRElTQVBQRUFSSU5HKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNoYW5nZURpc2FwcGVhcmluZ0NvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZW5kVHJhbnNpdGlvbihMYXlvdXRUcmFuc2l0aW9uIHRyYW5zaXRpb24sIFZpZXdHcm91cCBjb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyB2aWV3LCBpbnQgdHJhbnNpdGlvblR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uVHlwZSA9PSBMYXlvdXRUcmFuc2l0aW9uLkNIQU5HRV9ESVNBUFBFQVJJTkcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2hhbmdlRGlzYXBwZWFyaW5nQ291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25UeXBlID09IExheW91dFRyYW5zaXRpb24uQ0hBTkdFX0RJU0FQUEVBUklORyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2hhbmdlRGlzYXBwZWFyaW5nQ291bnQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgcGFyZW50VmlldyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJlbnQuYWRkVmlldyhtb3ZlZFZpZXcsIGluZGV4LCBwYXJhbXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcmVudC5hZGRWaWV3KG1vdmVkVmlldywgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSB2aWV3IGZyb20gdGhlIGN1cnJlbnQgcGFyZW50LgotICAgICAgICAgICAgICAgIHByZXZpb3VzUGFyZW50LnJlbW92ZVZpZXcobW92ZWRWaWV3KTsKLQotICAgICAgICAgICAgICAgIC8vIGFuZCByZXR1cm4gc2luY2UgYWRkaW5nIHRoZSB2aWV3IHRvIHRoZSBuZXcgcGFyZW50IGlzIGRvbmUgaW4gdGhlIGxpc3RlbmVyLgotICAgICAgICAgICAgICAgIHJldHVybiBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBzdGFuZGFyZCBjb2RlIHdpdGggbm8gYW5pbWF0aW9uLiBwcmV0dHkgc2ltcGxlLgotICAgICAgICAgICAgICAgIHByZXZpb3VzUGFyZW50LnJlbW92ZVZpZXcobW92ZWRWaWV3KTsKLQotICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgcGFyZW50VmlldyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbgotICAgICAgICAgICAgICAgIGlmIChwYXJhbXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBuZXdQYXJlbnQuYWRkVmlldyhtb3ZlZFZpZXcsIGluZGV4LCBwYXJhbXMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1BhcmVudC5hZGRWaWV3KG1vdmVkVmlldywgaW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyBsb29rcyBsaWtlIHRoaXMgaXMgYSB2aWV3IGNsYXNzIHRoYXQgZG9lc24ndCBzdXBwb3J0IGNoaWxkcmVuIG1hbmlwdWxhdGlvbiEKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9WSUVXR1JPVVBfTk9fQ0hJTERSRU4uY3JlYXRlUmVzdWx0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSBpdHMgY3VycmVudCBwYXJlbnQuCi0gICAgICogPHA+Ci0gICAgICoge0BsaW5rICNhY3F1aXJlKGxvbmcpfSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZSwgb3IgaWYge0BsaW5rICNhY3F1aXJlKGxvbmcpfSB3YXMgbm90IGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBzZWUgUmVuZGVyU2Vzc2lvbiNyZW1vdmVDaGlsZChPYmplY3QsIElBbmltYXRpb25MaXN0ZW5lcikKLSAgICAgKi8KLSAgICBwdWJsaWMgUmVzdWx0IHJlbW92ZUNoaWxkKGZpbmFsIFZpZXcgY2hpbGRWaWV3LCBJQW5pbWF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgY2hlY2tMb2NrKCk7Ci0KLSAgICAgICAgaW52YWxpZGF0ZVJlbmRlcmluZ1NpemUoKTsKLQotICAgICAgICBmaW5hbCBWaWV3R3JvdXAgcGFyZW50ID0gKFZpZXdHcm91cCkgY2hpbGRWaWV3LmdldFBhcmVudCgpOwotCi0gICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBuZXcgQW5pbWF0aW9uVGhyZWFkKHRoaXMsICJtb3ZlQ2hpbGQiLCBsaXN0ZW5lcikgewotCi0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIFJlc3VsdCBwcmVBbmltYXRpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudC5zZXRMYXlvdXRUcmFuc2l0aW9uKG5ldyBMYXlvdXRUcmFuc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlVmlldyhwYXJlbnQsIGNoaWxkVmlldyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcG9zdEFuaW1hdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50LnNldExheW91dFRyYW5zaXRpb24obnVsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfS5zdGFydCgpOwotCi0gICAgICAgICAgICAvLyBhbHdheXMgcmV0dXJuIHN1Y2Nlc3Mgc2luY2UgdGhlIHJlYWwgc3RhdHVzIHdpbGwgY29tZSB0aHJvdWdoIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgICAgIHJldHVybiBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHJlbW92ZVZpZXcocGFyZW50LCBjaGlsZFZpZXcpOwotICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlbmRlcihmYWxzZSAvKmZyZXNoUmVuZGVyKi8pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgYSBnaXZlbiB2aWV3IGZyb20gaXRzIGN1cnJlbnQgcGFyZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIHZpZXcgdGhlIHZpZXcgdG8gcmVtb3ZlIGZyb20gaXRzIHBhcmVudAotICAgICAqCi0gICAgICogQHJldHVybiBhIFJlc3VsdCB3aXRoIHtAbGluayBTdGF0dXMjU1VDQ0VTU30gb3IKLSAgICAgKiAgICAge0BsaW5rIFN0YXR1cyNFUlJPUl9WSUVXR1JPVVBfTk9fQ0hJTERSRU59IGlmIHRoZSBnaXZlbiBwYXJlbnQgZG9lc24ndCBzdXBwb3J0Ci0gICAgICogICAgIGFkZGluZyB2aWV3cy4KLSAgICAgKi8KLSAgICBwcml2YXRlIFJlc3VsdCByZW1vdmVWaWV3KFZpZXdHcm91cCBwYXJlbnQsIFZpZXcgdmlldykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcGFyZW50LnJlbW92ZVZpZXcodmlldyk7Ci0gICAgICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQoKTsKLSAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gbG9va3MgbGlrZSB0aGlzIGlzIGEgdmlldyBjbGFzcyB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBjaGlsZHJlbiBtYW5pcHVsYXRpb24hCi0gICAgICAgICAgICByZXR1cm4gRVJST1JfVklFV0dST1VQX05PX0NISUxEUkVOLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIHZvaWQgZmluZEJhY2tncm91bmQoUmVuZGVyUmVzb3VyY2VzIHJlc291cmNlcykgewotICAgICAgICBpZiAoZ2V0UGFyYW1zKCkuaXNCZ0NvbG9yT3ZlcnJpZGRlbigpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICBtV2luZG93QmFja2dyb3VuZCA9IHJlc291cmNlcy5maW5kSXRlbUluVGhlbWUoIndpbmRvd0JhY2tncm91bmQiLAotICAgICAgICAgICAgICAgICAgICB0cnVlIC8qaXNGcmFtZXdvcmtBdHRyKi8pOwotICAgICAgICAgICAgaWYgKG1XaW5kb3dCYWNrZ3JvdW5kICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtV2luZG93QmFja2dyb3VuZCA9IHJlc291cmNlcy5yZXNvbHZlUmVzVmFsdWUobVdpbmRvd0JhY2tncm91bmQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGhhc1NvZnR3YXJlQnV0dG9ucygpIHsKLSAgICAgICAgcmV0dXJuIGdldFBhcmFtcygpLmdldEhhcmR3YXJlQ29uZmlnKCkuaGFzU29mdHdhcmVCdXR0b25zKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGZpbmRTdGF0dXNCYXIoUmVuZGVyUmVzb3VyY2VzIHJlc291cmNlcywgRGlzcGxheU1ldHJpY3MgbWV0cmljcykgewotICAgICAgICBib29sZWFuIHdpbmRvd0Z1bGxzY3JlZW4gPSBnZXRCb29sZWFuVGhlbWVWYWx1ZShyZXNvdXJjZXMsCi0gICAgICAgICAgICAgICAgIndpbmRvd0Z1bGxzY3JlZW4iLCBmYWxzZSAvKmRlZmF1bHRWYWx1ZSovKTsKLQotICAgICAgICBpZiAod2luZG93RnVsbHNjcmVlbiA9PSBmYWxzZSAmJiBtV2luZG93SXNGbG9hdGluZyA9PSBmYWxzZSkgewotICAgICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZQotICAgICAgICAgICAgbVN0YXR1c0JhclNpemUgPSBERUZBVUxUX1NUQVRVU19CQVJfSEVJR0hUOwotCi0gICAgICAgICAgICAvLyBnZXQgdGhlIHJlYWwgdmFsdWUKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSByZXNvdXJjZXMuZ2V0RnJhbWV3b3JrUmVzb3VyY2UoUmVzb3VyY2VUeXBlLkRJTUVOLAotICAgICAgICAgICAgICAgICAgICAic3RhdHVzX2Jhcl9oZWlnaHQiKTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBUeXBlZFZhbHVlIHR5cGVkVmFsdWUgPSBSZXNvdXJjZUhlbHBlci5nZXRWYWx1ZSgic3RhdHVzX2Jhcl9oZWlnaHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZ2V0VmFsdWUoKSwgdHJ1ZSAvKnJlcXVpcmVVbml0Ki8pOwotICAgICAgICAgICAgICAgIGlmICh0eXBlZFZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgcGl4ZWwgdmFsdWUgYmFzZWQgb24gdGhlIGRpc3BsYXkgbWV0cmljcwotICAgICAgICAgICAgICAgICAgICBtU3RhdHVzQmFyU2l6ZSA9IChpbnQpdHlwZWRWYWx1ZS5nZXREaW1lbnNpb24obWV0cmljcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGZpbmRBY3Rpb25CYXIoUmVuZGVyUmVzb3VyY2VzIHJlc291cmNlcywgRGlzcGxheU1ldHJpY3MgbWV0cmljcykgewotICAgICAgICBpZiAobVdpbmRvd0lzRmxvYXRpbmcpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gd2luZG93QWN0aW9uQmFyID0gZ2V0Qm9vbGVhblRoZW1lVmFsdWUocmVzb3VyY2VzLAotICAgICAgICAgICAgICAgICJ3aW5kb3dBY3Rpb25CYXIiLCB0cnVlIC8qZGVmYXVsdFZhbHVlKi8pOwotCi0gICAgICAgIC8vIGlmIHRoZXJlJ3MgYSB2YWx1ZSBhbmQgaXQncyBmYWxzZSAoZGVmYXVsdCBpcyB0cnVlKQotICAgICAgICBpZiAod2luZG93QWN0aW9uQmFyKSB7Ci0KLSAgICAgICAgICAgIC8vIGRlZmF1bHQgc2l6ZSBvZiB0aGUgd2luZG93IHRpdGxlIGJhcgotICAgICAgICAgICAgbUFjdGlvbkJhclNpemUgPSBERUZBVUxUX1RJVExFX0JBUl9IRUlHSFQ7Ci0KLSAgICAgICAgICAgIC8vIGdldCB2YWx1ZSBmcm9tIHRoZSB0aGVtZS4KLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSByZXNvdXJjZXMuZmluZEl0ZW1JblRoZW1lKCJhY3Rpb25CYXJTaXplIiwKLSAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKmlzRnJhbWV3b3JrQXR0ciovKTsKLQotICAgICAgICAgICAgLy8gcmVzb2x2ZSBpdAotICAgICAgICAgICAgdmFsdWUgPSByZXNvdXJjZXMucmVzb2x2ZVJlc1ZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG51bWVyaWNhbCB2YWx1ZSwgaWYgYXZhaWxhYmxlCi0gICAgICAgICAgICAgICAgVHlwZWRWYWx1ZSB0eXBlZFZhbHVlID0gUmVzb3VyY2VIZWxwZXIuZ2V0VmFsdWUoImFjdGlvbkJhclNpemUiLCB2YWx1ZS5nZXRWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKnJlcXVpcmVVbml0Ki8pOwotICAgICAgICAgICAgICAgIGlmICh0eXBlZFZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgcGl4ZWwgdmFsdWUgYmFzZWQgb24gdGhlIGRpc3BsYXkgbWV0cmljcwotICAgICAgICAgICAgICAgICAgICBtQWN0aW9uQmFyU2l6ZSA9IChpbnQpdHlwZWRWYWx1ZS5nZXREaW1lbnNpb24obWV0cmljcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gYWN0aW9uIGJhciBvdmVycmlkZXMgdGl0bGUgYmFyIHNvIG9ubHkgbG9vayBmb3IgdGhpcyBvbmUgaWYgYWN0aW9uIGJhciBpcyBoaWRkZW4KLSAgICAgICAgICAgIGJvb2xlYW4gd2luZG93Tm9UaXRsZSA9IGdldEJvb2xlYW5UaGVtZVZhbHVlKHJlc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgIndpbmRvd05vVGl0bGUiLCBmYWxzZSAvKmRlZmF1bHRWYWx1ZSovKTsKLQotICAgICAgICAgICAgaWYgKHdpbmRvd05vVGl0bGUgPT0gZmFsc2UpIHsKLQotICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgc2l6ZSBvZiB0aGUgd2luZG93IHRpdGxlIGJhcgotICAgICAgICAgICAgICAgIG1UaXRsZUJhclNpemUgPSBERUZBVUxUX1RJVExFX0JBUl9IRUlHSFQ7Ci0KLSAgICAgICAgICAgICAgICAvLyBnZXQgdmFsdWUgZnJvbSB0aGUgdGhlbWUuCi0gICAgICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSB2YWx1ZSA9IHJlc291cmNlcy5maW5kSXRlbUluVGhlbWUoIndpbmRvd1RpdGxlU2l6ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qaXNGcmFtZXdvcmtBdHRyKi8pOwotCi0gICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSBpdAotICAgICAgICAgICAgICAgIHZhbHVlID0gcmVzb3VyY2VzLnJlc29sdmVSZXNWYWx1ZSh2YWx1ZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG51bWVyaWNhbCB2YWx1ZSwgaWYgYXZhaWxhYmxlCi0gICAgICAgICAgICAgICAgICAgIFR5cGVkVmFsdWUgdHlwZWRWYWx1ZSA9IFJlc291cmNlSGVscGVyLmdldFZhbHVlKCJ3aW5kb3dUaXRsZVNpemUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldFZhbHVlKCksIHRydWUgLypyZXF1aXJlVW5pdCovKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVkVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgcGl4ZWwgdmFsdWUgYmFzZWQgb24gdGhlIGRpc3BsYXkgbWV0cmljcwotICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlQmFyU2l6ZSA9IChpbnQpdHlwZWRWYWx1ZS5nZXREaW1lbnNpb24obWV0cmljcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBmaW5kTmF2aWdhdGlvbkJhcihSZW5kZXJSZXNvdXJjZXMgcmVzb3VyY2VzLCBEaXNwbGF5TWV0cmljcyBtZXRyaWNzKSB7Ci0gICAgICAgIGlmIChoYXNTb2Z0d2FyZUJ1dHRvbnMoKSAmJiBtV2luZG93SXNGbG9hdGluZyA9PSBmYWxzZSkgewotCi0gICAgICAgICAgICAvLyBkZWZhdWx0IHZhbHVlCi0gICAgICAgICAgICBtTmF2aWdhdGlvbkJhclNpemUgPSA0ODsgLy8gPz8KLQotICAgICAgICAgICAgSGFyZHdhcmVDb25maWcgaGFyZHdhcmVDb25maWcgPSBnZXRQYXJhbXMoKS5nZXRIYXJkd2FyZUNvbmZpZygpOwotCi0gICAgICAgICAgICBib29sZWFuIGJhck9uQm90dG9tID0gdHJ1ZTsKLQotICAgICAgICAgICAgaWYgKGhhcmR3YXJlQ29uZmlnLmdldE9yaWVudGF0aW9uKCkgPT0gU2NyZWVuT3JpZW50YXRpb24uTEFORFNDQVBFKSB7Ci0gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgZHAgb2YgdGhlIHNjcmVlbi4KLSAgICAgICAgICAgICAgICBpbnQgc2hvcnRTaXplID0gaGFyZHdhcmVDb25maWcuZ2V0U2NyZWVuSGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGluIGRwCi0gICAgICAgICAgICAgICAgaW50IHNob3J0U2l6ZURwID0gc2hvcnRTaXplICogRGlzcGxheU1ldHJpY3MuREVOU0lUWV9ERUZBVUxUIC8gaGFyZHdhcmVDb25maWcuZ2V0RGVuc2l0eSgpLmdldERwaVZhbHVlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2hvcnRTaXplRHAgPCA2MDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gMC01OTlkcDogInBob25lIiBVSSB3aXRoIGJhciBvbiB0aGUgc2lkZQotICAgICAgICAgICAgICAgICAgICBiYXJPbkJvdHRvbSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIDYwMCtkcDogInRhYmxldCIgVUkgd2l0aCBiYXIgb24gdGhlIGJvdHRvbQotICAgICAgICAgICAgICAgICAgICBiYXJPbkJvdHRvbSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoYmFyT25Cb3R0b20pIHsKLSAgICAgICAgICAgICAgICBtTmF2aWdhdGlvbkJhck9yaWVudGF0aW9uID0gTGluZWFyTGF5b3V0LkhPUklaT05UQUw7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1OYXZpZ2F0aW9uQmFyT3JpZW50YXRpb24gPSBMaW5lYXJMYXlvdXQuVkVSVElDQUw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgcmVhbCB2YWx1ZQotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSB2YWx1ZSA9IHJlc291cmNlcy5nZXRGcmFtZXdvcmtSZXNvdXJjZShSZXNvdXJjZVR5cGUuRElNRU4sCi0gICAgICAgICAgICAgICAgICAgIGJhck9uQm90dG9tID8gIm5hdmlnYXRpb25fYmFyX2hlaWdodCIgOiAibmF2aWdhdGlvbl9iYXJfd2lkdGgiKTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBUeXBlZFZhbHVlIHR5cGVkVmFsdWUgPSBSZXNvdXJjZUhlbHBlci5nZXRWYWx1ZSgibmF2aWdhdGlvbl9iYXJfaGVpZ2h0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldFZhbHVlKCksIHRydWUgLypyZXF1aXJlVW5pdCovKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZWRWYWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgdGhlIHBpeGVsIHZhbHVlIGJhc2VkIG9uIHRoZSBkaXNwbGF5IG1ldHJpY3MKLSAgICAgICAgICAgICAgICAgICAgbU5hdmlnYXRpb25CYXJTaXplID0gKGludCl0eXBlZFZhbHVlLmdldERpbWVuc2lvbihtZXRyaWNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMb29rcyBmb3IgYSBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUuIFRoZSBhdHRyaWJ1dGUgaXMgaW4gdGhlIGFuZHJvaWQKLSAgICAgKiBuYW1lc3BhY2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVzb3VyY2VzIHRoZSByZW5kZXIgcmVzb3VyY2VzCi0gICAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQotICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdGhlIGRlZmF1bHQgdmFsdWUuCi0gICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBvciB0aGUgZGVmYXVsdCBvbmUgaWYgbm90IGZvdW5kLgotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBnZXRCb29sZWFuVGhlbWVWYWx1ZShSZW5kZXJSZXNvdXJjZXMgcmVzb3VyY2VzLAotICAgICAgICAgICAgU3RyaW5nIG5hbWUsIGJvb2xlYW4gZGVmYXVsdFZhbHVlKSB7Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSB0aXRsZSBiYXIgZmxhZyBmcm9tIHRoZSBjdXJyZW50IHRoZW1lLgotICAgICAgICBSZXNvdXJjZVZhbHVlIHZhbHVlID0gcmVzb3VyY2VzLmZpbmRJdGVtSW5UaGVtZShuYW1lLCB0cnVlIC8qaXNGcmFtZXdvcmtBdHRyKi8pOwotCi0gICAgICAgIC8vIGJlY2F1c2UgaXQgbWF5IHJlZmVyZW5jZSBzb21ldGhpbmcgZWxzZSwgd2UgcmVzb2x2ZSBpdC4KLSAgICAgICAgdmFsdWUgPSByZXNvdXJjZXMucmVzb2x2ZVJlc1ZhbHVlKHZhbHVlKTsKLQotICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIHZhbHVlLCByZXR1cm4gdGhlIGRlZmF1bHQuCi0gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmdldFZhbHVlKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBYbWxVdGlscy5jb252ZXJ0VmFsdWVUb0Jvb2xlYW4odmFsdWUuZ2V0VmFsdWUoKSwgZGVmYXVsdFZhbHVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQb3N0IHByb2Nlc3Mgb24gYSB2aWV3IGhpZXJhY2h5IHRoYXQgd2FzIGp1c3QgaW5mbGF0ZWQuCi0gICAgICogPHAvPkF0IHRoZSBtb21lbnQgdGhpcyBvbmx5IHN1cHBvcnQgVGFiSG9zdDogSWYge0BsaW5rIFRhYkhvc3R9IGlzIGRldGVjdGVkLCBsb29rIGZvciB0aGUKLSAgICAgKiB7QGxpbmsgVGFiV2lkZ2V0fSwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHtAbGluayBGcmFtZUxheW91dH0gYW5kIG1ha2UgbmV3IHRhYnMgYXV0b21hdGljYWxseQotICAgICAqIGJhc2VkIG9uIHRoZSBjb250ZW50IG9mIHRoZSB7QGxpbmsgRnJhbWVMYXlvdXR9LgotICAgICAqIEBwYXJhbSB2aWV3IHRoZSByb290IHZpZXcgdG8gcHJvY2Vzcy4KLSAgICAgKiBAcGFyYW0gcHJvamVjdENhbGxiYWNrIGNhbGxiYWNrIHRvIHRoZSBwcm9qZWN0LgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBwb3N0SW5mbGF0ZVByb2Nlc3MoVmlldyB2aWV3LCBJUHJvamVjdENhbGxiYWNrIHByb2plY3RDYWxsYmFjaykKLSAgICAgICAgICAgIHRocm93cyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgVGFiSG9zdCkgewotICAgICAgICAgICAgc2V0dXBUYWJIb3N0KChUYWJIb3N0KXZpZXcsIHByb2plY3RDYWxsYmFjayk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmlldyBpbnN0YW5jZW9mIFF1aWNrQ29udGFjdEJhZGdlKSB7Ci0gICAgICAgICAgICBRdWlja0NvbnRhY3RCYWRnZSBiYWRnZSA9IChRdWlja0NvbnRhY3RCYWRnZSkgdmlldzsKLSAgICAgICAgICAgIGJhZGdlLnNldEltYWdlVG9EZWZhdWx0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmlldyBpbnN0YW5jZW9mIEFkYXB0ZXJWaWV3PD8+KSB7Ci0gICAgICAgICAgICAvLyBnZXQgdGhlIHZpZXcgSUQuCi0gICAgICAgICAgICBpbnQgaWQgPSB2aWV3LmdldElkKCk7Ci0KLSAgICAgICAgICAgIEJyaWRnZUNvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKLQotICAgICAgICAgICAgLy8gZ2V0IGEgUmVzb3VyY2VSZWZlcmVuY2UgZnJvbSB0aGUgaW50ZWdlciBJRC4KLSAgICAgICAgICAgIFJlc291cmNlUmVmZXJlbmNlIGxpc3RSZWYgPSBjb250ZXh0LnJlc29sdmVJZChpZCk7Ci0KLSAgICAgICAgICAgIGlmIChsaXN0UmVmICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTZXNzaW9uUGFyYW1zIHBhcmFtcyA9IGdldFBhcmFtcygpOwotICAgICAgICAgICAgICAgIEFkYXB0ZXJCaW5kaW5nIGJpbmRpbmcgPSBwYXJhbXMuZ2V0QWRhcHRlckJpbmRpbmdzKCkuZ2V0KGxpc3RSZWYpOwotCi0gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vIGFkYXB0ZXIgYmluZGluZywgdHJ5aW5nIHRvIGdldCBpdCBmcm9tIHRoZSBjYWxsIGJhY2suCi0gICAgICAgICAgICAgICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBiaW5kaW5nID0gcGFyYW1zLmdldFByb2plY3RDYWxsYmFjaygpLmdldEFkYXB0ZXJCaW5kaW5nKGxpc3RSZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5nZXRWaWV3S2V5KHZpZXcpLCB2aWV3KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYmluZGluZyAhPSBudWxsKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2VvZiBBYnNMaXN0VmlldykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiaW5kaW5nLmdldEZvb3RlckNvdW50KCkgPiAwIHx8IGJpbmRpbmcuZ2V0SGVhZGVyQ291bnQoKSA+IDApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgaW5zdGFuY2VvZiBMaXN0VmlldykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RWaWV3IGxpc3QgPSAoTGlzdFZpZXcpIHZpZXc7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHNraXBDYWxsYmFja1BhcnNlciA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gYmluZGluZy5nZXRIZWFkZXJDb3VudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGNvdW50IDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhaXI8VmlldywgQm9vbGVhbj4gcGFpciA9IGNvbnRleHQuaW5mbGF0ZVZpZXcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5nZXRIZWFkZXJBdChpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LCBmYWxzZSAvKmF0dGFjaFRvUm9vdCovLCBza2lwQ2FsbGJhY2tQYXJzZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5nZXRGaXJzdCgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkSGVhZGVyVmlldyhwYWlyLmdldEZpcnN0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcENhbGxiYWNrUGFyc2VyIHw9IHBhaXIuZ2V0U2Vjb25kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBiaW5kaW5nLmdldEZvb3RlckNvdW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgY291bnQgOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFpcjxWaWV3LCBCb29sZWFuPiBwYWlyID0gY29udGV4dC5pbmZsYXRlVmlldygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmdldEZvb3RlckF0KGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QsIGZhbHNlIC8qYXR0YWNoVG9Sb290Ki8sIHNraXBDYWxsYmFja1BhcnNlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLmdldEZpcnN0KCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGRGb290ZXJWaWV3KHBhaXIuZ2V0Rmlyc3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ2FsbGJhY2tQYXJzZXIgfD0gcGFpci5nZXRTZWNvbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgRXhwYW5kYWJsZUxpc3RWaWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFeHBhbmRhYmxlTGlzdFZpZXcpIHZpZXcpLnNldEFkYXB0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmFrZUV4cGFuZGFibGVBZGFwdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0UmVmLCBiaW5kaW5nLCBwYXJhbXMuZ2V0UHJvamVjdENhbGxiYWNrKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBYnNMaXN0Vmlldykgdmlldykuc2V0QWRhcHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGYWtlQWRhcHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFJlZiwgYmluZGluZywgcGFyYW1zLmdldFByb2plY3RDYWxsYmFjaygpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmlldyBpbnN0YW5jZW9mIEFic1NwaW5uZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICgoQWJzU3Bpbm5lcikgdmlldykuc2V0QWRhcHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZha2VBZGFwdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RSZWYsIGJpbmRpbmcsIHBhcmFtcy5nZXRQcm9qZWN0Q2FsbGJhY2soKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHZpZXcgaW5zdGFuY2VvZiBWaWV3R3JvdXApIHsKLSAgICAgICAgICAgIFZpZXdHcm91cCBncm91cCA9IChWaWV3R3JvdXApdmlldzsKLSAgICAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IGdyb3VwLmdldENoaWxkQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGMgPSAwIDsgYyA8IGNvdW50IDsgYysrKSB7Ci0gICAgICAgICAgICAgICAgVmlldyBjaGlsZCA9IGdyb3VwLmdldENoaWxkQXQoYyk7Ci0gICAgICAgICAgICAgICAgcG9zdEluZmxhdGVQcm9jZXNzKGNoaWxkLCBwcm9qZWN0Q2FsbGJhY2spOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB1cCBhIHtAbGluayBUYWJIb3N0fSBvYmplY3QuCi0gICAgICogQHBhcmFtIHRhYkhvc3QgdGhlIFRhYkhvc3QgdG8gc2V0dXAuCi0gICAgICogQHBhcmFtIHByb2plY3RDYWxsYmFjayBUaGUgcHJvamVjdCBjYWxsYmFjayBvYmplY3QgdG8gYWNjZXNzIHRoZSBwcm9qZWN0IFIgY2xhc3MuCi0gICAgICogQHRocm93cyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXR1cFRhYkhvc3QoVGFiSG9zdCB0YWJIb3N0LCBJUHJvamVjdENhbGxiYWNrIHByb2plY3RDYWxsYmFjaykKLSAgICAgICAgICAgIHRocm93cyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIGxvb2sgZm9yIHRoZSBUYWJXaWRnZXQsIGFuZCB0aGUgRnJhbWVMYXlvdXQuIFRoZXkgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMgbmFtZXMKLSAgICAgICAgVmlldyB2ID0gdGFiSG9zdC5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnRhYnMpOwotCi0gICAgICAgIGlmICh2ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgIlRhYkhvc3QgcmVxdWlyZXMgYSBUYWJXaWRnZXQgd2l0aCBpZCBcImFuZHJvaWQ6aWQvdGFic1wiLlxuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHYgaW5zdGFuY2VvZiBUYWJXaWRnZXQpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUG9zdEluZmxhdGVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIlRhYkhvc3QgcmVxdWlyZXMgYSBUYWJXaWRnZXQgd2l0aCBpZCBcImFuZHJvaWQ6aWQvdGFic1wiLlxuIiArCi0gICAgICAgICAgICAgICAgICAgICJWaWV3IGZvdW5kIHdpdGggaWQgJ3RhYnMnIGlzICclcyciLCB2LmdldENsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2ID0gdGFiSG9zdC5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnRhYmNvbnRlbnQpOwotCi0gICAgICAgIGlmICh2ID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIFRPRE86IHNlZSBpZiB3ZSBjYW4gZmFrZSB0YWJzIGV2ZW4gd2l0aG91dCB0aGUgRnJhbWVMYXlvdXQgKHNhbWUgYmVsb3cgd2hlbiB0aGUgZnJhbWVsYXlvdXQgaXMgZW1wdHkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgUG9zdEluZmxhdGVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICJUYWJIb3N0IHJlcXVpcmVzIGEgRnJhbWVMYXlvdXQgd2l0aCBpZCBcImFuZHJvaWQ6aWQvdGFiY29udGVudFwiLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh2IGluc3RhbmNlb2YgRnJhbWVMYXlvdXQpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUG9zdEluZmxhdGVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIlRhYkhvc3QgcmVxdWlyZXMgYSBGcmFtZUxheW91dCB3aXRoIGlkIFwiYW5kcm9pZDppZC90YWJjb250ZW50XCIuXG4iICsKLSAgICAgICAgICAgICAgICAgICAgIlZpZXcgZm91bmQgd2l0aCBpZCAndGFiY29udGVudCcgaXMgJyVzJyIsIHYuZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEZyYW1lTGF5b3V0IGNvbnRlbnQgPSAoRnJhbWVMYXlvdXQpdjsKLQotICAgICAgICAvLyBub3cgcHJvY2VzcyB0aGUgY29udGVudCBvZiB0aGUgZnJhbWVsYXlvdXQgYW5kIGR5bmFtaWNhbGx5IGNyZWF0ZSB0YWJzIGZvciBpdC4KLSAgICAgICAgZmluYWwgaW50IGNvdW50ID0gY29udGVudC5nZXRDaGlsZENvdW50KCk7Ci0KLSAgICAgICAgLy8gdGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYWRkVGFiKCkgc28gdGhhdCB0aGUgVGFiSG9zdCBzZWFyY2hlcyBpdHMgVGFiV2lkZ2V0Ci0gICAgICAgIC8vIGFuZCBGcmFtZUxheW91dC4KLSAgICAgICAgdGFiSG9zdC5zZXR1cCgpOwotCi0gICAgICAgIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBDcmVhdGUgYSBkdW1teSBjaGlsZCB0byBnZXQgYSBzaW5nbGUgdGFiCi0gICAgICAgICAgICBUYWJTcGVjIHNwZWMgPSB0YWJIb3N0Lm5ld1RhYlNwZWMoInRhZyIpLnNldEluZGljYXRvcigiVGFiIExhYmVsIiwKLSAgICAgICAgICAgICAgICAgICAgdGFiSG9zdC5nZXRSZXNvdXJjZXMoKS5nZXREcmF3YWJsZShhbmRyb2lkLlIuZHJhd2FibGUuaWNfbWVudV9pbmZvX2RldGFpbHMpKQotICAgICAgICAgICAgICAgICAgICAuc2V0Q29udGVudChuZXcgVGFiSG9zdC5UYWJDb250ZW50RmFjdG9yeSgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFZpZXcgY3JlYXRlVGFiQ29udGVudChTdHJpbmcgdGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaW5lYXJMYXlvdXQoZ2V0Q29udGV4dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB0YWJIb3N0LmFkZFRhYihzcGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGZvciBlYWNoIGNoaWxkIG9mIHRoZSBmcmFtZWxheW91dCwgYWRkIGEgbmV3IFRhYlNwZWMKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGNvdW50IDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgVmlldyBjaGlsZCA9IGNvbnRlbnQuZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdGFiU3BlYyA9IFN0cmluZy5mb3JtYXQoInRhYl9zcGVjJWQiLCBpKzEpOwotICAgICAgICAgICAgICAgIGludCBpZCA9IGNoaWxkLmdldElkKCk7Ci0gICAgICAgICAgICAgICAgUGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4gcmVzb3VyY2UgPSBwcm9qZWN0Q2FsbGJhY2sucmVzb2x2ZVJlc291cmNlSWQoaWQpOwotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXNvdXJjZS5nZXRTZWNvbmQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBuYW1lID0gU3RyaW5nLmZvcm1hdCgiVGFiICVkIiwgaSsxKTsgLy8gZGVmYXVsdCBuYW1lIGlmIGlkIGlzIHVucmVzb2x2ZWQuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRhYkhvc3QuYWRkVGFiKHRhYkhvc3QubmV3VGFiU3BlYyh0YWJTcGVjKS5zZXRJbmRpY2F0b3IobmFtZSkuc2V0Q29udGVudChpZCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBMaXN0PFZpZXdJbmZvPiBzdGFydFZpc2l0aW5nVmlld3MoVmlldyB2aWV3LCBpbnQgb2Zmc2V0LCBib29sZWFuIHNldEV4dGVuZGVkSW5mbykgewotICAgICAgICBpZiAodmlldyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGFkanVzdCB0aGUgb2Zmc2V0IHRvIHRoaXMgdmlldy4KLSAgICAgICAgb2Zmc2V0ICs9IHZpZXcuZ2V0VG9wKCk7Ci0KLSAgICAgICAgaWYgKHZpZXcgPT0gbUNvbnRlbnRSb290KSB7Ci0gICAgICAgICAgICByZXR1cm4gdmlzaXRBbGxDaGlsZHJlbihtQ29udGVudFJvb3QsIG9mZnNldCwgc2V0RXh0ZW5kZWRJbmZvKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG90aGVyd2lzZSwgbG9vayBmb3IgbUNvbnRlbnRSb290IGluIHRoZSBjaGlsZHJlbgotICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIFZpZXdHcm91cCkgewotICAgICAgICAgICAgVmlld0dyb3VwIGdyb3VwID0gKChWaWV3R3JvdXApIHZpZXcpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwLmdldENoaWxkQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgTGlzdDxWaWV3SW5mbz4gbGlzdCA9IHN0YXJ0VmlzaXRpbmdWaWV3cyhncm91cC5nZXRDaGlsZEF0KGkpLCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRFeHRlbmRlZEluZm8pOwotICAgICAgICAgICAgICAgIGlmIChsaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVmlzaXRzIGEgVmlldyBhbmQgaXRzIGNoaWxkcmVuIGFuZCBnZW5lcmF0ZSBhIHtAbGluayBWaWV3SW5mb30gY29udGFpbmluZyB0aGUKLSAgICAgKiBib3VuZHMgb2YgYWxsIHRoZSB2aWV3cy4KLSAgICAgKiBAcGFyYW0gdmlldyB0aGUgcm9vdCBWaWV3Ci0gICAgICogQHBhcmFtIG9mZnNldCBhbiBvZmZzZXQgZm9yIHRoZSB2aWV3IGJvdW5kcy4KLSAgICAgKiBAcGFyYW0gc2V0RXh0ZW5kZWRJbmZvIHdoZXRoZXIgdG8gc2V0IHRoZSBleHRlbmRlZCB2aWV3IGluZm8gaW4gdGhlIHtAbGluayBWaWV3SW5mb30gb2JqZWN0LgotICAgICAqLwotICAgIHByaXZhdGUgVmlld0luZm8gdmlzaXQoVmlldyB2aWV3LCBpbnQgb2Zmc2V0LCBib29sZWFuIHNldEV4dGVuZGVkSW5mbykgewotICAgICAgICBpZiAodmlldyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFZpZXdJbmZvIHJlc3VsdCA9IG5ldyBWaWV3SW5mbyh2aWV3LmdldENsYXNzKCkuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgIGdldENvbnRleHQoKS5nZXRWaWV3S2V5KHZpZXcpLAotICAgICAgICAgICAgICAgIHZpZXcuZ2V0TGVmdCgpLCB2aWV3LmdldFRvcCgpICsgb2Zmc2V0LCB2aWV3LmdldFJpZ2h0KCksIHZpZXcuZ2V0Qm90dG9tKCkgKyBvZmZzZXQsCi0gICAgICAgICAgICAgICAgdmlldywgdmlldy5nZXRMYXlvdXRQYXJhbXMoKSk7Ci0KLSAgICAgICAgaWYgKHNldEV4dGVuZGVkSW5mbykgewotICAgICAgICAgICAgTWFyZ2luTGF5b3V0UGFyYW1zIG1hcmdpblBhcmFtcyA9IG51bGw7Ci0gICAgICAgICAgICBMYXlvdXRQYXJhbXMgcGFyYW1zID0gdmlldy5nZXRMYXlvdXRQYXJhbXMoKTsKLSAgICAgICAgICAgIGlmIChwYXJhbXMgaW5zdGFuY2VvZiBNYXJnaW5MYXlvdXRQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBtYXJnaW5QYXJhbXMgPSAoTWFyZ2luTGF5b3V0UGFyYW1zKSBwYXJhbXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQuc2V0RXh0ZW5kZWRJbmZvKHZpZXcuZ2V0QmFzZWxpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luUGFyYW1zICE9IG51bGwgPyBtYXJnaW5QYXJhbXMubGVmdE1hcmdpbiA6IDAsCi0gICAgICAgICAgICAgICAgICAgIG1hcmdpblBhcmFtcyAhPSBudWxsID8gbWFyZ2luUGFyYW1zLnRvcE1hcmdpbiA6IDAsCi0gICAgICAgICAgICAgICAgICAgIG1hcmdpblBhcmFtcyAhPSBudWxsID8gbWFyZ2luUGFyYW1zLnJpZ2h0TWFyZ2luIDogMCwKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luUGFyYW1zICE9IG51bGwgPyBtYXJnaW5QYXJhbXMuYm90dG9tTWFyZ2luIDogMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIFZpZXdHcm91cCkgewotICAgICAgICAgICAgVmlld0dyb3VwIGdyb3VwID0gKChWaWV3R3JvdXApIHZpZXcpOwotICAgICAgICAgICAgcmVzdWx0LnNldENoaWxkcmVuKHZpc2l0QWxsQ2hpbGRyZW4oZ3JvdXAsIDAgLypvZmZzZXQqLywgc2V0RXh0ZW5kZWRJbmZvKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFZpc2l0cyBhbGwgdGhlIGNoaWxkcmVuIG9mIGEgZ2l2ZW4gVmlld0dyb3VwIGdlbmVyYXRlIGEgbGlzdCBvZiB7QGxpbmsgVmlld0luZm99Ci0gICAgICogY29udGFpbmluZyB0aGUgYm91bmRzIG9mIGFsbCB0aGUgdmlld3MuCi0gICAgICogQHBhcmFtIHZpZXcgdGhlIHJvb3QgVmlldwotICAgICAqIEBwYXJhbSBvZmZzZXQgYW4gb2Zmc2V0IGZvciB0aGUgdmlldyBib3VuZHMuCi0gICAgICogQHBhcmFtIHNldEV4dGVuZGVkSW5mbyB3aGV0aGVyIHRvIHNldCB0aGUgZXh0ZW5kZWQgdmlldyBpbmZvIGluIHRoZSB7QGxpbmsgVmlld0luZm99IG9iamVjdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIExpc3Q8Vmlld0luZm8+IHZpc2l0QWxsQ2hpbGRyZW4oVmlld0dyb3VwIHZpZXdHcm91cCwgaW50IG9mZnNldCwKLSAgICAgICAgICAgIGJvb2xlYW4gc2V0RXh0ZW5kZWRJbmZvKSB7Ci0gICAgICAgIGlmICh2aWV3R3JvdXAgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBMaXN0PFZpZXdJbmZvPiBjaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8Vmlld0luZm8+KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmlld0dyb3VwLmdldENoaWxkQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjaGlsZHJlbi5hZGQodmlzaXQodmlld0dyb3VwLmdldENoaWxkQXQoaSksIG9mZnNldCwgc2V0RXh0ZW5kZWRJbmZvKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuOwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVSZW5kZXJpbmdTaXplKCkgewotICAgICAgICBtTWVhc3VyZWRTY3JlZW5XaWR0aCA9IG1NZWFzdXJlZFNjcmVlbkhlaWdodCA9IC0xOwotICAgIH0KLQotICAgIHB1YmxpYyBCdWZmZXJlZEltYWdlIGdldEltYWdlKCkgewotICAgICAgICByZXR1cm4gbUltYWdlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzQWxwaGFDaGFubmVsSW1hZ2UoKSB7Ci0gICAgICAgIHJldHVybiBtSXNBbHBoYUNoYW5uZWxJbWFnZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdDxWaWV3SW5mbz4gZ2V0Vmlld0luZm9zKCkgewotICAgICAgICByZXR1cm4gbVZpZXdJbmZvTGlzdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBnZXREZWZhdWx0UHJvcGVydGllcyhPYmplY3Qgdmlld09iamVjdCkgewotICAgICAgICByZXR1cm4gZ2V0Q29udGV4dCgpLmdldERlZmF1bHRQcm9wTWFwKHZpZXdPYmplY3QpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNjZW5lKFJlbmRlclNlc3Npb24gc2Vzc2lvbikgewotICAgICAgICBtU2NlbmUgPSBzZXNzaW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBSZW5kZXJTZXNzaW9uIGdldFNlc3Npb24oKSB7Ci0gICAgICAgIHJldHVybiBtU2NlbmU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1Jlc291cmNlSGVscGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUmVzb3VyY2VIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRjYjY5My4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUmVzb3VyY2VIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGw7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuRGVuc2l0eUJhc2VkUmVzb3VyY2VWYWx1ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZW5kZXJSZXNvdXJjZXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlVmFsdWU7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZVhtbEJsb2NrUGFyc2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLm5pbmVwYXRjaC5OaW5lUGF0Y2g7Ci1pbXBvcnQgY29tLmFuZHJvaWQubmluZXBhdGNoLk5pbmVQYXRjaENodW5rOwotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5EZW5zaXR5OwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk5pbmVQYXRjaF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5CaXRtYXBEcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkNvbG9yRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLk5pbmVQYXRjaERyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLS8qKgotICogSGVscGVyIGNsYXNzIHRvIHByb3ZpZGUgdmFyaW91cyBjb252ZXJzaW9uIG1ldGhvZCB1c2VkIGluIGhhbmRsaW5nIGFuZHJvaWQgcmVzb3VyY2VzLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUmVzb3VyY2VIZWxwZXIgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgUGF0dGVybiBzRmxvYXRQYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKCIoLT9bMC05XSsoPzpcXC5bMC05XSspPykoLiopIik7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgZmxvYXRbXSBzRmxvYXRPdXQgPSBuZXcgZmxvYXRbMV07Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBUeXBlZFZhbHVlIG1WYWx1ZSA9IG5ldyBUeXBlZFZhbHVlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjb2xvciB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gc3RyaW5nIHZhbHVlCi0gICAgICogQHBhcmFtIHZhbHVlIHRoZSBjb2xvciB2YWx1ZQotICAgICAqIEByZXR1cm4gdGhlIGNvbG9yIGFzIGFuIGludAotICAgICAqIEB0aHJvdyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWYgdGhlIGNvbnZlcnNpb24gZmFpbGVkLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldENvbG9yKFN0cmluZyB2YWx1ZSkgewotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoIiMiKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJDb2xvciB2YWx1ZSAnJXMnIG11c3Qgc3RhcnQgd2l0aCAjIiwgdmFsdWUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7Ci0KLSAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBpdCdzIG5vdCBsb25nZXIgdGhhbiAzMmJpdAotICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpID4gOCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICJDb2xvciB2YWx1ZSAnJXMnIGlzIHRvbyBsb25nLiBGb3JtYXQgaXMgZWl0aGVyIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiI0FBUlJHR0JCLCAjUlJHR0JCLCAjUkdCLCBvciAjQVJHQiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMykgeyAvLyBSR0IgZm9ybWF0Ci0gICAgICAgICAgICAgICAgY2hhcltdIGNvbG9yID0gbmV3IGNoYXJbOF07Ci0gICAgICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXSA9ICdGJzsKLSAgICAgICAgICAgICAgICBjb2xvclsyXSA9IGNvbG9yWzNdID0gdmFsdWUuY2hhckF0KDApOwotICAgICAgICAgICAgICAgIGNvbG9yWzRdID0gY29sb3JbNV0gPSB2YWx1ZS5jaGFyQXQoMSk7Ci0gICAgICAgICAgICAgICAgY29sb3JbNl0gPSBjb2xvcls3XSA9IHZhbHVlLmNoYXJBdCgyKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBTdHJpbmcoY29sb3IpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSA0KSB7IC8vIEFSR0IgZm9ybWF0Ci0gICAgICAgICAgICAgICAgY2hhcltdIGNvbG9yID0gbmV3IGNoYXJbOF07Ci0gICAgICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXSA9IHZhbHVlLmNoYXJBdCgwKTsKLSAgICAgICAgICAgICAgICBjb2xvclsyXSA9IGNvbG9yWzNdID0gdmFsdWUuY2hhckF0KDEpOwotICAgICAgICAgICAgICAgIGNvbG9yWzRdID0gY29sb3JbNV0gPSB2YWx1ZS5jaGFyQXQoMik7Ci0gICAgICAgICAgICAgICAgY29sb3JbNl0gPSBjb2xvcls3XSA9IHZhbHVlLmNoYXJBdCgzKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBTdHJpbmcoY29sb3IpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSA2KSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAiRkYiICsgdmFsdWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBSUkdHQkIgb3IgQUFSUkdHQkIgdmFsdWUKLQotICAgICAgICAgICAgLy8gSW50ZWdlci5wYXJzZUludCB3aWxsIGZhaWwgdG8gcGFyc2Ugc3RyaW5ncyBsaWtlICJmZjE5MTkxOSIsIHNvIHdlIHVzZQotICAgICAgICAgICAgLy8gYSBMb25nLCBidXQgY2FzdCB0aGUgcmVzdWx0IGJhY2sgaW50byBhbiBpbnQsIHNpbmNlIHdlIGtub3cgdGhhdCB3ZSdyZSBvbmx5Ci0gICAgICAgICAgICAvLyBkZWFsaW5nIHdpdGggMzIgYml0IHZhbHVlcy4KLSAgICAgICAgICAgIHJldHVybiAoaW50KUxvbmcucGFyc2VMb25nKHZhbHVlLCAxNik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBDb2xvclN0YXRlTGlzdCBnZXRDb2xvclN0YXRlTGlzdChSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlLCBCcmlkZ2VDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVzVmFsdWUuZ2V0VmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgUmVuZGVyUmVzb3VyY2VzLlJFRkVSRU5DRV9OVUxMLmVxdWFscyh2YWx1ZSkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIC8vIGZpcnN0IGNoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhIGZpbGUgKHhtbCBtb3N0IGxpa2VseSkKLSAgICAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChmLmlzRmlsZSgpKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHRoZSBmcmFtZXdvcmsgaW5mbGF0ZSB0aGUgQ29sb3JTdGF0ZUxpc3QgZnJvbSB0aGUgWE1MIGZpbGUsIGJ5Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByb3ZpZGluZyBhbiBYbWxQdWxsUGFyc2VyCi0gICAgICAgICAgICAgICAgICAgIFhtbFB1bGxQYXJzZXIgcGFyc2VyID0gUGFyc2VyRmFjdG9yeS5jcmVhdGUoZik7Ci0KLSAgICAgICAgICAgICAgICAgICAgQnJpZGdlWG1sQmxvY2tQYXJzZXIgYmxvY2tQYXJzZXIgPSBuZXcgQnJpZGdlWG1sQmxvY2tQYXJzZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLCBjb250ZXh0LCByZXNWYWx1ZS5pc0ZyYW1ld29yaygpKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2xvclN0YXRlTGlzdC5jcmVhdGVGcm9tWG1sKGNvbnRleHQuZ2V0UmVzb3VyY2VzKCksIGJsb2NrUGFyc2VyKTsKLSAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrUGFyc2VyLmVuc3VyZVBvcHBlZCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBwYXJzZXIgZm9yICIgKyB2YWx1ZSwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdlJ2xsIHJldHVybiBudWxsIGJlbG93LgotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gZXJyb3IgYW5kIG5vdCB3YXJuaW5nIHNpbmNlIHRoZSBmaWxlIGV4aXN0ZW5jZSBpcwotICAgICAgICAgICAgICAgICAgICAvLyBjaGVja2VkIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBhcnNlIGl0LgotICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIGZpbGUgIiArIHZhbHVlLCBlLCBudWxsIC8qZGF0YSovKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHRyeSB0byBsb2FkIHRoZSBjb2xvciBzdGF0ZSBsaXN0IGZyb20gYW4gaW50Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNvbG9yID0gUmVzb3VyY2VIZWxwZXIuZ2V0Q29sb3IodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3JTdGF0ZUxpc3QudmFsdWVPZihjb2xvcik7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNvbnZlcnQgIiArIHZhbHVlICsgIiBpbnRvIGEgQ29sb3JTdGF0ZUxpc3QiLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgZHJhd2FibGUgZnJvbSB0aGUgZ2l2ZW4gdmFsdWUuCi0gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0aGF0IGNvbnRhaW5zIGEgcGF0aCB0byBhIDkgcGF0Y2gsIGEgYml0bWFwIG9yIGEgeG1sIGJhc2VkIGRyYXdhYmxlLAotICAgICAqIG9yIGFuIGhleGFkZWNpbWFsIGNvbG9yCi0gICAgICogQHBhcmFtIGNvbnRleHQgdGhlIGN1cnJlbnQgY29udGV4dAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgRHJhd2FibGUgZ2V0RHJhd2FibGUoUmVzb3VyY2VWYWx1ZSB2YWx1ZSwgQnJpZGdlQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLmdldFZhbHVlKCk7Ci0gICAgICAgIGlmIChSZW5kZXJSZXNvdXJjZXMuUkVGRVJFTkNFX05VTEwuZXF1YWxzKHN0cmluZ1ZhbHVlKSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgbG93ZXJDYXNlVmFsdWUgPSBzdHJpbmdWYWx1ZS50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgIERlbnNpdHkgZGVuc2l0eSA9IERlbnNpdHkuTUVESVVNOwotICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEZW5zaXR5QmFzZWRSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICBkZW5zaXR5ID0KLSAgICAgICAgICAgICAgICAoKERlbnNpdHlCYXNlZFJlc291cmNlVmFsdWUpdmFsdWUpLmdldFJlc291cmNlRGVuc2l0eSgpOwotICAgICAgICB9Ci0KLQotICAgICAgICBpZiAobG93ZXJDYXNlVmFsdWUuZW5kc1dpdGgoTmluZVBhdGNoLkVYVEVOU0lPTl85UEFUQ0gpKSB7Ci0gICAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShzdHJpbmdWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZmlsZS5pc0ZpbGUoKSkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXROaW5lUGF0Y2hEcmF3YWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpLCBkZW5zaXR5LCB2YWx1ZS5pc0ZyYW1ld29yaygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZhaWxlZCB0byByZWFkIHRoZSBmaWxlLCB3ZSdsbCByZXR1cm4gbnVsbCBiZWxvdy4KLSAgICAgICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX1JFQUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCBsb3QgbG9hZCAiICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBlbHNlIGlmIChsb3dlckNhc2VWYWx1ZS5lbmRzV2l0aCgiLnhtbCIpKSB7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgYSBibG9jayBwYXJzZXIgZm9yIHRoZSBmaWxlCi0gICAgICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShzdHJpbmdWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZi5pc0ZpbGUoKSkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGxldCB0aGUgZnJhbWV3b3JrIGluZmxhdGUgdGhlIERyYXdhYmxlIGZyb20gdGhlIFhNTCBmaWxlLgotICAgICAgICAgICAgICAgICAgICBYbWxQdWxsUGFyc2VyIHBhcnNlciA9IFBhcnNlckZhY3RvcnkuY3JlYXRlKGYpOwotCi0gICAgICAgICAgICAgICAgICAgIEJyaWRnZVhtbEJsb2NrUGFyc2VyIGJsb2NrUGFyc2VyID0gbmV3IEJyaWRnZVhtbEJsb2NrUGFyc2VyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlciwgY29udGV4dCwgdmFsdWUuaXNGcmFtZXdvcmsoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRHJhd2FibGUuY3JlYXRlRnJvbVhtbChjb250ZXh0LmdldFJlc291cmNlcygpLCBibG9ja1BhcnNlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBibG9ja1BhcnNlci5lbnN1cmVQb3BwZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gZXJyb3IgYW5kIG5vdCB3YXJuaW5nIHNpbmNlIHRoZSBmaWxlIGV4aXN0ZW5jZSBpcyBjaGVja2VkIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAvLyBhdHRlbXB0aW5nIHRvIHBhcnNlIGl0LgotICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IobnVsbCwgIkZhaWxlZCB0byBwYXJzZSBmaWxlICIgKyBzdHJpbmdWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIkZpbGUgJXMgZG9lcyBub3QgZXhpc3QgKG9yIGlzIG5vdCBhIGZpbGUpIiwgc3RyaW5nVmFsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRmlsZSBibXBGaWxlID0gbmV3IEZpbGUoc3RyaW5nVmFsdWUpOwotICAgICAgICAgICAgaWYgKGJtcEZpbGUuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBCaXRtYXAgYml0bWFwID0gQnJpZGdlLmdldENhY2hlZEJpdG1hcChzdHJpbmdWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5pc0ZyYW1ld29yaygpID8gbnVsbCA6IGNvbnRleHQuZ2V0UHJvamVjdEtleSgpKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoYml0bWFwID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCA9IEJpdG1hcF9EZWxlZ2F0ZS5jcmVhdGVCaXRtYXAoYm1wRmlsZSwgZmFsc2UgLyppc011dGFibGUqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVuc2l0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2Uuc2V0Q2FjaGVkQml0bWFwKHN0cmluZ1ZhbHVlLCBiaXRtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmlzRnJhbWV3b3JrKCkgPyBudWxsIDogY29udGV4dC5nZXRQcm9qZWN0S2V5KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCaXRtYXBEcmF3YWJsZShjb250ZXh0LmdldFJlc291cmNlcygpLCBiaXRtYXApOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gd2UnbGwgcmV0dXJuIG51bGwgYmVsb3cKLSAgICAgICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX1JFQUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCBsb3QgbG9hZCAiICsgYm1wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBhdHRlbXB0IHRvIGdldCBhIGNvbG9yIGZyb20gdGhlIHZhbHVlCi0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNvbG9yID0gZ2V0Q29sb3Ioc3RyaW5nVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yRHJhd2FibGUoY29sb3IpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdlJ2xsIHJldHVybiBudWxsIGJlbG93LgotICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfRk9STUFULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY29udmVydCAiICsgc3RyaW5nVmFsdWUgKyAiIGludG8gYSBkcmF3YWJsZSIsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgRHJhd2FibGUgZ2V0TmluZVBhdGNoRHJhd2FibGUoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIERlbnNpdHkgZGVuc2l0eSwKLSAgICAgICAgICAgIGJvb2xlYW4gaXNGcmFtZXdvcmssIFN0cmluZyBjYWNoZUtleSwgQnJpZGdlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAvLyBzZWUgaWYgd2Ugc3RpbGwgaGF2ZSBib3RoIHRoZSBjaHVuayBhbmQgdGhlIGJpdG1hcCBpbiB0aGUgY2FjaGVzCi0gICAgICAgIE5pbmVQYXRjaENodW5rIGNodW5rID0gQnJpZGdlLmdldENhY2hlZDlQYXRjaChjYWNoZUtleSwKLSAgICAgICAgICAgICAgICBpc0ZyYW1ld29yayA/IG51bGwgOiBjb250ZXh0LmdldFByb2plY3RLZXkoKSk7Ci0gICAgICAgIEJpdG1hcCBiaXRtYXAgPSBCcmlkZ2UuZ2V0Q2FjaGVkQml0bWFwKGNhY2hlS2V5LAotICAgICAgICAgICAgICAgIGlzRnJhbWV3b3JrID8gbnVsbCA6IGNvbnRleHQuZ2V0UHJvamVjdEtleSgpKTsKLQotICAgICAgICAvLyBpZiBlaXRoZXIgY2h1bmsgb3IgYml0bWFwIGlzIG51bGwsIHRoZW4gd2UgcmVsb2FkIHRoZSA5LXBhdGNoIGZpbGUuCi0gICAgICAgIGlmIChjaHVuayA9PSBudWxsIHx8IGJpdG1hcCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIE5pbmVQYXRjaCBuaW5lUGF0Y2ggPSBOaW5lUGF0Y2gubG9hZChpbnB1dFN0cmVhbSwgdHJ1ZSAvKmlzOVBhdGNoKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBjb252ZXJ0ICovKTsKLSAgICAgICAgICAgICAgICBpZiAobmluZVBhdGNoICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gbmluZVBhdGNoLmdldENodW5rKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEJyaWRnZS5zZXRDYWNoZWQ5UGF0Y2goY2FjaGVLZXksIGNodW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZyYW1ld29yayA/IG51bGwgOiBjb250ZXh0LmdldFByb2plY3RLZXkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoYml0bWFwID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCA9IEJpdG1hcF9EZWxlZ2F0ZS5jcmVhdGVCaXRtYXAobmluZVBhdGNoLmdldEltYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qaXNNdXRhYmxlKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbnNpdHkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2Uuc2V0Q2FjaGVkQml0bWFwKGNhY2hlS2V5LCBiaXRtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnJhbWV3b3JrID8gbnVsbCA6IGNvbnRleHQuZ2V0UHJvamVjdEtleSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVVJMIGlzIHdyb25nLCB3ZSdsbCByZXR1cm4gbnVsbCBiZWxvdwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNodW5rICE9IG51bGwgJiYgYml0bWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgIGludFtdIHBhZGRpbmcgPSBjaHVuay5nZXRQYWRkaW5nKCk7Ci0gICAgICAgICAgICBSZWN0IHBhZGRpbmdSZWN0ID0gbmV3IFJlY3QocGFkZGluZ1swXSwgcGFkZGluZ1sxXSwgcGFkZGluZ1syXSwgcGFkZGluZ1szXSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgTmluZVBhdGNoRHJhd2FibGUoY29udGV4dC5nZXRSZXNvdXJjZXMoKSwgYml0bWFwLAotICAgICAgICAgICAgICAgICAgICBOaW5lUGF0Y2hfRGVsZWdhdGUuc2VyaWFsaXplKGNodW5rKSwKLSAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1JlY3QsIG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLSBUeXBlZFZhbHVlIHN0dWZmCi0gICAgLy8gVGhpcyBpcyB0YWtlbiBmcm9tIC8vZGV2aWNlL2xpYnMvdXRpbHMvUmVzb3VyY2VUeXBlcy5jcHAKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFVuaXRFbnRyeSB7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBpbnQgdHlwZTsKLSAgICAgICAgaW50IHVuaXQ7Ci0gICAgICAgIGZsb2F0IHNjYWxlOwotCi0gICAgICAgIFVuaXRFbnRyeShTdHJpbmcgbmFtZSwgaW50IHR5cGUsIGludCB1bml0LCBmbG9hdCBzY2FsZSkgewotICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgICAgICAgICB0aGlzLnVuaXQgPSB1bml0OwotICAgICAgICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgVW5pdEVudHJ5W10gc1VuaXROYW1lcyA9IG5ldyBVbml0RW50cnlbXSB7Ci0gICAgICAgIG5ldyBVbml0RW50cnkoInB4IiwgVHlwZWRWYWx1ZS5UWVBFX0RJTUVOU0lPTiwgVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfUFgsIDEuMGYpLAotICAgICAgICBuZXcgVW5pdEVudHJ5KCJkaXAiLCBUeXBlZFZhbHVlLlRZUEVfRElNRU5TSU9OLCBUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9ESVAsIDEuMGYpLAotICAgICAgICBuZXcgVW5pdEVudHJ5KCJkcCIsIFR5cGVkVmFsdWUuVFlQRV9ESU1FTlNJT04sIFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX0RJUCwgMS4wZiksCi0gICAgICAgIG5ldyBVbml0RW50cnkoInNwIiwgVHlwZWRWYWx1ZS5UWVBFX0RJTUVOU0lPTiwgVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfU1AsIDEuMGYpLAotICAgICAgICBuZXcgVW5pdEVudHJ5KCJwdCIsIFR5cGVkVmFsdWUuVFlQRV9ESU1FTlNJT04sIFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX1BULCAxLjBmKSwKLSAgICAgICAgbmV3IFVuaXRFbnRyeSgiaW4iLCBUeXBlZFZhbHVlLlRZUEVfRElNRU5TSU9OLCBUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9JTiwgMS4wZiksCi0gICAgICAgIG5ldyBVbml0RW50cnkoIm1tIiwgVHlwZWRWYWx1ZS5UWVBFX0RJTUVOU0lPTiwgVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfTU0sIDEuMGYpLAotICAgICAgICBuZXcgVW5pdEVudHJ5KCIlIiwgVHlwZWRWYWx1ZS5UWVBFX0ZSQUNUSU9OLCBUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9GUkFDVElPTiwgMS4wZi8xMDApLAotICAgICAgICBuZXcgVW5pdEVudHJ5KCIlcCIsIFR5cGVkVmFsdWUuVFlQRV9GUkFDVElPTiwgVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRlJBQ1RJT05fUEFSRU5ULCAxLjBmLzEwMCksCi0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHJhdyB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBhdHRyaWJ1dGUgZmxvYXQtdHlwZSB2YWx1ZSBzdHJpbmcuCi0gICAgICogVGhpcyBvYmplY3QgaXMgb25seSB2YWxpZCB1bnRpbCB0aGUgbmV4dCBjYWxsIG9uIHRvIHtAbGluayBSZXNvdXJjZUhlbHBlcn0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBUeXBlZFZhbHVlIGdldFZhbHVlKFN0cmluZyBhdHRyaWJ1dGUsIFN0cmluZyB2YWx1ZSwgYm9vbGVhbiByZXF1aXJlVW5pdCkgewotICAgICAgICBpZiAocGFyc2VGbG9hdEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlLCBtVmFsdWUsIHJlcXVpcmVVbml0KSkgewotICAgICAgICAgICAgcmV0dXJuIG1WYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBhcnNlIGEgZmxvYXQgYXR0cmlidXRlIGFuZCByZXR1cm4gdGhlIHBhcnNlZCB2YWx1ZSBpbnRvIGEgZ2l2ZW4gVHlwZWRWYWx1ZS4KLSAgICAgKiBAcGFyYW0gYXR0cmlidXRlIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuIENhbiBiZSBudWxsIGlmIDx2YXI+cmVxdWlyZVVuaXQ8L3Zhcj4gaXMgZmFsc2UuCi0gICAgICogQHBhcmFtIHZhbHVlIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZQotICAgICAqIEBwYXJhbSBvdXRWYWx1ZSB0aGUgVHlwZWRWYWx1ZSB0byByZWNlaXZlIHRoZSBwYXJzZWQgdmFsdWUKLSAgICAgKiBAcGFyYW0gcmVxdWlyZVVuaXQgd2hldGhlciB0aGUgdmFsdWUgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhIHVuaXQuCi0gICAgICogQHJldHVybiB0cnVlIGlmIHN1Y2Nlc3MuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIHBhcnNlRmxvYXRBdHRyaWJ1dGUoU3RyaW5nIGF0dHJpYnV0ZSwgU3RyaW5nIHZhbHVlLAotICAgICAgICAgICAgVHlwZWRWYWx1ZSBvdXRWYWx1ZSwgYm9vbGVhbiByZXF1aXJlVW5pdCkgewotICAgICAgICBhc3NlcnQgcmVxdWlyZVVuaXQgPT0gZmFsc2UgfHwgYXR0cmlidXRlICE9IG51bGw7Ci0KLSAgICAgICAgLy8gcmVtb3ZlIHRoZSBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyCi0gICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpOwotICAgICAgICBpbnQgbGVuID0gdmFsdWUubGVuZ3RoKCk7Ci0KLSAgICAgICAgaWYgKGxlbiA8PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayB0aGF0IHRoZXJlJ3Mgbm8gbm9uIGFzY2lpIGNoYXJhY3RlcnMuCi0gICAgICAgIGNoYXJbXSBidWYgPSB2YWx1ZS50b0NoYXJBcnJheSgpOwotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBsZW4gOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChidWZbaV0gPiAyNTUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyCi0gICAgICAgIGlmIChidWZbMF0gPCAnMCcgJiYgYnVmWzBdID4gJzknICYmIGJ1ZlswXSAhPSAnLicgJiYgYnVmWzBdICE9ICctJykgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbm93IGxvb2sgZm9yIHRoZSBzdHJpbmcgdGhhdCBpcyBhZnRlciB0aGUgZmxvYXQuLi4KLSAgICAgICAgTWF0Y2hlciBtID0gc0Zsb2F0UGF0dGVybi5tYXRjaGVyKHZhbHVlKTsKLSAgICAgICAgaWYgKG0ubWF0Y2hlcygpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgZl9zdHIgPSBtLmdyb3VwKDEpOwotICAgICAgICAgICAgU3RyaW5nIGVuZCA9IG0uZ3JvdXAoMik7Ci0KLSAgICAgICAgICAgIGZsb2F0IGY7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGYgPSBGbG9hdC5wYXJzZUZsb2F0KGZfc3RyKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGRuJ3QgaGFwcGVuIHdpdGggdGhlIHJlZ2V4cCBhYm92ZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChlbmQubGVuZ3RoKCkgPiAwICYmIGVuZC5jaGFyQXQoMCkgIT0gJyAnKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWlnaHQgYmUgYSB1bml0Li4uCi0gICAgICAgICAgICAgICAgaWYgKHBhcnNlVW5pdChlbmQsIG91dFZhbHVlLCBzRmxvYXRPdXQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXB1dGVUeXBlZFZhbHVlKG91dFZhbHVlLCBmLCBzRmxvYXRPdXRbMF0pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBtYWtlIHN1cmUgaXQncyBvbmx5IHNwYWNlcyBhdCB0aGUgZW5kLgotICAgICAgICAgICAgZW5kID0gZW5kLnRyaW0oKTsKLQotICAgICAgICAgICAgaWYgKGVuZC5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG91dFZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVVbml0ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRWYWx1ZS50eXBlID0gVHlwZWRWYWx1ZS5UWVBFX0ZMT0FUOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0VmFsdWUuZGF0YSA9IEZsb2F0LmZsb2F0VG9JbnRCaXRzKGYpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gdW5pdCB3aGVuIHJlcXVpcmVkPyBVc2UgZHAgYW5kIG91dCBhbiBlcnJvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5VW5pdChzVW5pdE5hbWVzWzFdLCBvdXRWYWx1ZSwgc0Zsb2F0T3V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVUeXBlZFZhbHVlKG91dFZhbHVlLCBmLCBzRmxvYXRPdXRbMF0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfUkVTT0xWRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGltZW5zaW9uIFwiJTEkc1wiIGluIGF0dHJpYnV0ZSBcIiUyJHNcIiBpcyBtaXNzaW5nIHVuaXQhIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgYXR0cmlidXRlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY29tcHV0ZVR5cGVkVmFsdWUoVHlwZWRWYWx1ZSBvdXRWYWx1ZSwgZmxvYXQgdmFsdWUsIGZsb2F0IHNjYWxlKSB7Ci0gICAgICAgIHZhbHVlICo9IHNjYWxlOwotICAgICAgICBib29sZWFuIG5lZyA9IHZhbHVlIDwgMDsKLSAgICAgICAgaWYgKG5lZykgewotICAgICAgICAgICAgdmFsdWUgPSAtdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgbG9uZyBiaXRzID0gKGxvbmcpKHZhbHVlKigxPDwyMykrLjVmKTsKLSAgICAgICAgaW50IHJhZGl4OwotICAgICAgICBpbnQgc2hpZnQ7Ci0gICAgICAgIGlmICgoYml0cyYweDdmZmZmZikgPT0gMCkgewotICAgICAgICAgICAgLy8gQWx3YXlzIHVzZSAyM3AwIGlmIHRoZXJlIGlzIG5vIGZyYWN0aW9uLCBqdXN0IHRvIG1ha2UKLSAgICAgICAgICAgIC8vIHRoaW5ncyBlYXNpZXIgdG8gcmVhZC4KLSAgICAgICAgICAgIHJhZGl4ID0gVHlwZWRWYWx1ZS5DT01QTEVYX1JBRElYXzIzcDA7Ci0gICAgICAgICAgICBzaGlmdCA9IDIzOwotICAgICAgICB9IGVsc2UgaWYgKChiaXRzJjB4ZmZmZmZmZmZmZjgwMDAwMEwpID09IDApIHsKLSAgICAgICAgICAgIC8vIE1hZ25pdHVkZSBpcyB6ZXJvIC0tIGNhbiBmaXQgaW4gMCBiaXRzIG9mIHByZWNpc2lvbi4KLSAgICAgICAgICAgIHJhZGl4ID0gVHlwZWRWYWx1ZS5DT01QTEVYX1JBRElYXzBwMjM7Ci0gICAgICAgICAgICBzaGlmdCA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoKGJpdHMmMHhmZmZmZmZmZjgwMDAwMDAwTCkgPT0gMCkgewotICAgICAgICAgICAgLy8gTWFnbml0dWRlIGNhbiBmaXQgaW4gOCBiaXRzIG9mIHByZWNpc2lvbi4KLSAgICAgICAgICAgIHJhZGl4ID0gVHlwZWRWYWx1ZS5DT01QTEVYX1JBRElYXzhwMTU7Ci0gICAgICAgICAgICBzaGlmdCA9IDg7Ci0gICAgICAgIH0gZWxzZSBpZiAoKGJpdHMmMHhmZmZmZmY4MDAwMDAwMDAwTCkgPT0gMCkgewotICAgICAgICAgICAgLy8gTWFnbml0dWRlIGNhbiBmaXQgaW4gMTYgYml0cyBvZiBwcmVjaXNpb24uCi0gICAgICAgICAgICByYWRpeCA9IFR5cGVkVmFsdWUuQ09NUExFWF9SQURJWF8xNnA3OwotICAgICAgICAgICAgc2hpZnQgPSAxNjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE1hZ25pdHVkZSBuZWVkcyBlbnRpcmUgcmFuZ2UsIHNvIG5vIGZyYWN0aW9uYWwgcGFydC4KLSAgICAgICAgICAgIHJhZGl4ID0gVHlwZWRWYWx1ZS5DT01QTEVYX1JBRElYXzIzcDA7Ci0gICAgICAgICAgICBzaGlmdCA9IDIzOwotICAgICAgICB9Ci0gICAgICAgIGludCBtYW50aXNzYSA9IChpbnQpKAotICAgICAgICAgICAgKGJpdHM+PnNoaWZ0KSAmIFR5cGVkVmFsdWUuQ09NUExFWF9NQU5USVNTQV9NQVNLKTsKLSAgICAgICAgaWYgKG5lZykgewotICAgICAgICAgICAgbWFudGlzc2EgPSAoLW1hbnRpc3NhKSAmIFR5cGVkVmFsdWUuQ09NUExFWF9NQU5USVNTQV9NQVNLOwotICAgICAgICB9Ci0gICAgICAgIG91dFZhbHVlLmRhdGEgfD0KLSAgICAgICAgICAgIChyYWRpeDw8VHlwZWRWYWx1ZS5DT01QTEVYX1JBRElYX1NISUZUKQotICAgICAgICAgICAgfCAobWFudGlzc2E8PFR5cGVkVmFsdWUuQ09NUExFWF9NQU5USVNTQV9TSElGVCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwYXJzZVVuaXQoU3RyaW5nIHN0ciwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSwgZmxvYXRbXSBvdXRTY2FsZSkgewotICAgICAgICBzdHIgPSBzdHIudHJpbSgpOwotCi0gICAgICAgIGZvciAoVW5pdEVudHJ5IHVuaXQgOiBzVW5pdE5hbWVzKSB7Ci0gICAgICAgICAgICBpZiAodW5pdC5uYW1lLmVxdWFscyhzdHIpKSB7Ci0gICAgICAgICAgICAgICAgYXBwbHlVbml0KHVuaXQsIG91dFZhbHVlLCBvdXRTY2FsZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhcHBseVVuaXQoVW5pdEVudHJ5IHVuaXQsIFR5cGVkVmFsdWUgb3V0VmFsdWUsIGZsb2F0W10gb3V0U2NhbGUpIHsKLSAgICAgICAgb3V0VmFsdWUudHlwZSA9IHVuaXQudHlwZTsKLSAgICAgICAgb3V0VmFsdWUuZGF0YSA9IHVuaXQudW5pdCA8PCBUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9TSElGVDsKLSAgICAgICAgb3V0U2NhbGVbMF0gPSB1bml0LnNjYWxlOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1N0YWNrLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvU3RhY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJkMDAxNS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvU3RhY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLS8qKgotICogQ3VzdG9tIFN0YWNrIGltcGxlbWVudGF0aW9uIG9uIHRvcCBvZiBhbiB7QGxpbmsgQXJyYXlMaXN0fSBpbnN0ZWFkIG9mCi0gKiB1c2luZyB7QGxpbmsgamF2YS51dGlsLlN0YWNrfSB3aGljaCBpcyBvbiB0b3Agb2YgYSB2ZWN0b3IuCi0gKgotICogQHBhcmFtIDxUPgotICovCi1wdWJsaWMgY2xhc3MgU3RhY2s8VD4gZXh0ZW5kcyBBcnJheUxpc3Q8VD4gewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgICBwdWJsaWMgU3RhY2soKSB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0YWNrKGludCBzaXplKSB7Ci0gICAgICAgIHN1cGVyKHNpemUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFB1c2hlcyB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBzdGFjawotICAgICAqIEBwYXJhbSBvYmplY3QgdGhlIG9iamVjdCB0byBwdXNoCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcHVzaChUIG9iamVjdCkgewotICAgICAgICBhZGQob2JqZWN0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmUgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayBhbmQgcmV0dXJucyBpdC4KLSAgICAgKiBAcmV0dXJuIHRoZSByZW1vdmVkIG9iamVjdCBvciBudWxsIGlmIHRoZSBzdGFjayB3YXMgZW1wdHkuCi0gICAgICovCi0gICAgcHVibGljIFQgcG9wKCkgewotICAgICAgICBpZiAoc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgcmV0dXJuIHJlbW92ZShzaXplKCkgLSAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KLSAgICAgKiBAcmV0dXJuIHRoZSBvYmplY3QgYXQgdGhlIHRvcCBvciBudWxsIGlmIHRoZSBzdGFjayBpcyBlbXB0eS4KLSAgICAgKi8KLSAgICBwdWJsaWMgVCBwZWVrKCkgewotICAgICAgICBpZiAoc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgcmV0dXJuIGdldChzaXplKCkgLSAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9iaW5kaW5nL0FkYXB0ZXJIZWxwZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9iaW5kaW5nL0FkYXB0ZXJIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5OThhZi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9BZGFwdGVySGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLmJpbmRpbmc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuRGF0YUJpbmRpbmdJdGVtOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5JUHJvamVjdENhbGxiYWNrOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlUmVmZXJlbmNlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5JUHJvamVjdENhbGxiYWNrLlZpZXdBdHRyaWJ1dGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlJlbmRlckFjdGlvbjsKLWltcG9ydCBjb20uYW5kcm9pZC51dGlsLlBhaXI7Ci0KLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkNoZWNrYWJsZTsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci0KLS8qKgotICogQSBIZWxwZXIgY2xhc3MgdG8gZG8gZmFrZSBkYXRhIGJpbmRpbmcgaW4ge0BsaW5rIEFkYXB0ZXJWaWV3fSBvYmplY3RzLgotICovCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGljIGNsYXNzIEFkYXB0ZXJIZWxwZXIgewotCi0gICAgc3RhdGljIFBhaXI8VmlldywgQm9vbGVhbj4gZ2V0VmlldyhBZGFwdGVySXRlbSBpdGVtLCBBZGFwdGVySXRlbSBwYXJlbnRJdGVtLCBWaWV3R3JvdXAgcGFyZW50LAotICAgICAgICAgICAgSVByb2plY3RDYWxsYmFjayBjYWxsYmFjaywgUmVzb3VyY2VSZWZlcmVuY2UgYWRhcHRlclJlZiwgYm9vbGVhbiBza2lwQ2FsbGJhY2tQYXJzZXIpIHsKLSAgICAgICAgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCByZWN5Y2xpbmcgaGVyZSBiZWNhdXNlIHdlIG5ldmVyIHNjcm9sbC4KLSAgICAgICAgRGF0YUJpbmRpbmdJdGVtIGRhdGFCaW5kaW5nSXRlbSA9IGl0ZW0uZ2V0RGF0YUJpbmRpbmdJdGVtKCk7Ci0KLSAgICAgICAgQnJpZGdlQ29udGV4dCBjb250ZXh0ID0gUmVuZGVyQWN0aW9uLmdldEN1cnJlbnRDb250ZXh0KCk7Ci0KLSAgICAgICAgUGFpcjxWaWV3LCBCb29sZWFuPiBwYWlyID0gY29udGV4dC5pbmZsYXRlVmlldyhkYXRhQmluZGluZ0l0ZW0uZ2V0Vmlld1JlZmVyZW5jZSgpLAotICAgICAgICAgICAgICAgIHBhcmVudCwgZmFsc2UgLyphdHRhY2hUb1Jvb3QqLywgc2tpcENhbGxiYWNrUGFyc2VyKTsKLQotICAgICAgICBWaWV3IHZpZXcgPSBwYWlyLmdldEZpcnN0KCk7Ci0gICAgICAgIHNraXBDYWxsYmFja1BhcnNlciB8PSBwYWlyLmdldFNlY29uZCgpOwotCi0gICAgICAgIGlmICh2aWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZpbGxWaWV3KGNvbnRleHQsIHZpZXcsIGl0ZW0sIHBhcmVudEl0ZW0sIGNhbGxiYWNrLCBhZGFwdGVyUmVmKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBhIHRleHQgdmlldyB0byBkaXNwbGF5IGFuIGVycm9yLgotICAgICAgICAgICAgVGV4dFZpZXcgdHYgPSBuZXcgVGV4dFZpZXcoY29udGV4dCk7Ci0gICAgICAgICAgICB0di5zZXRUZXh0KCJVbmFibGUgdG8gZmluZCBsYXlvdXQ6ICIgKyBkYXRhQmluZGluZ0l0ZW0uZ2V0Vmlld1JlZmVyZW5jZSgpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB2aWV3ID0gdHY7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gUGFpci5vZih2aWV3LCBza2lwQ2FsbGJhY2tQYXJzZXIpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZmlsbFZpZXcoQnJpZGdlQ29udGV4dCBjb250ZXh0LCBWaWV3IHZpZXcsIEFkYXB0ZXJJdGVtIGl0ZW0sCi0gICAgICAgICAgICBBZGFwdGVySXRlbSBwYXJlbnRJdGVtLCBJUHJvamVjdENhbGxiYWNrIGNhbGxiYWNrLCBSZXNvdXJjZVJlZmVyZW5jZSBhZGFwdGVyUmVmKSB7Ci0gICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7Ci0gICAgICAgICAgICBWaWV3R3JvdXAgZ3JvdXAgPSAoVmlld0dyb3VwKSB2aWV3OwotICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gZ3JvdXAuZ2V0Q2hpbGRDb3VudCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgY291bnQgOyBpKyspIHsKLSAgICAgICAgICAgICAgICBmaWxsVmlldyhjb250ZXh0LCBncm91cC5nZXRDaGlsZEF0KGkpLCBpdGVtLCBwYXJlbnRJdGVtLCBjYWxsYmFjaywgYWRhcHRlclJlZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgaWQgPSB2aWV3LmdldElkKCk7Ci0gICAgICAgICAgICBpZiAoaWQgIT0gMCkgewotICAgICAgICAgICAgICAgIFJlc291cmNlUmVmZXJlbmNlIHJlc29sdmVkUmVmID0gY29udGV4dC5yZXNvbHZlSWQoaWQpOwotICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZFJlZiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBmdWxsUG9zaXRpb24gPSBpdGVtLmdldEZ1bGxQb3NpdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBpbnQgcG9zaXRpb25QZXJUeXBlID0gaXRlbS5nZXRQb3NpdGlvblBlclR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGZ1bGxQYXJlbnRQb3NpdGlvbiA9IHBhcmVudEl0ZW0gIT0gbnVsbCA/IHBhcmVudEl0ZW0uZ2V0RnVsbFBvc2l0aW9uKCkgOiAwOwotICAgICAgICAgICAgICAgICAgICBpbnQgcGFyZW50UG9zaXRpb25QZXJUeXBlID0gcGFyZW50SXRlbSAhPSBudWxsID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJdGVtLmdldFBvc2l0aW9uUGVyVHlwZSgpIDogMDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIFRleHRWaWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBUZXh0VmlldyB0diA9IChUZXh0VmlldykgdmlldzsKLSAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGNhbGxiYWNrLmdldEFkYXB0ZXJJdGVtVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXJSZWYsIGNvbnRleHQuZ2V0Vmlld0tleSh2aWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5nZXREYXRhQmluZGluZ0l0ZW0oKS5nZXRWaWV3UmVmZXJlbmNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxQb3NpdGlvbiwgcG9zaXRpb25QZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGFyZW50UG9zaXRpb24sIHBhcmVudFBvc2l0aW9uUGVyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRSZWYsIFZpZXdBdHRyaWJ1dGUuVEVYVCwgdHYuZ2V0VGV4dCgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZ2V0Q2xhc3MoKSAhPSBWaWV3QXR0cmlidXRlLlRFWFQuZ2V0QXR0cmlidXRlQ2xhc3MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19CUk9LRU4sIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldyb25nIEFkYXB0ZXIgSXRlbSB2YWx1ZSBjbGFzcyBmb3IgVEVYVC4gRXhwZWN0ZWQgU3RyaW5nLCBnb3QgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldENsYXNzKCkuZ2V0TmFtZSgpKSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHYuc2V0VGV4dCgoU3RyaW5nKSB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2VvZiBDaGVja2FibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrYWJsZSBjYiA9IChDaGVja2FibGUpIHZpZXc7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGNhbGxiYWNrLmdldEFkYXB0ZXJJdGVtVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXJSZWYsIGNvbnRleHQuZ2V0Vmlld0tleSh2aWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5nZXREYXRhQmluZGluZ0l0ZW0oKS5nZXRWaWV3UmVmZXJlbmNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxQb3NpdGlvbiwgcG9zaXRpb25QZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGFyZW50UG9zaXRpb24sIHBhcmVudFBvc2l0aW9uUGVyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRSZWYsIFZpZXdBdHRyaWJ1dGUuSVNfQ0hFQ0tFRCwgY2IuaXNDaGVja2VkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZ2V0Q2xhc3MoKSAhPSBWaWV3QXR0cmlidXRlLklTX0NIRUNLRUQuZ2V0QXR0cmlidXRlQ2xhc3MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19CUk9LRU4sIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldyb25nIEFkYXB0ZXIgSXRlbSB2YWx1ZSBjbGFzcyBmb3IgVEVYVC4gRXhwZWN0ZWQgQm9vbGVhbiwgZ290ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5nZXRDbGFzcygpLmdldE5hbWUoKSksIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiLnNldENoZWNrZWQoKEJvb2xlYW4pIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIEltYWdlVmlldykgewotICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VWaWV3IGl2ID0gKEltYWdlVmlldykgdmlldzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gY2FsbGJhY2suZ2V0QWRhcHRlckl0ZW1WYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlclJlZiwgY29udGV4dC5nZXRWaWV3S2V5KHZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmdldERhdGFCaW5kaW5nSXRlbSgpLmdldFZpZXdSZWZlcmVuY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFBvc2l0aW9uLCBwb3NpdGlvblBlclR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxQYXJlbnRQb3NpdGlvbiwgcGFyZW50UG9zaXRpb25QZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFJlZiwgVmlld0F0dHJpYnV0ZS5TUkMsIGl2LmdldERyYXdhYmxlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZ2V0Q2xhc3MoKSAhPSBWaWV3QXR0cmlidXRlLlNSQy5nZXRBdHRyaWJ1dGVDbGFzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV3JvbmcgQWRhcHRlciBJdGVtIHZhbHVlIGNsYXNzIGZvciBURVhULiBFeHBlY3RlZCBCb29sZWFuLCBnb3QgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldENsYXNzKCkuZ2V0TmFtZSgpKSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9BZGFwdGVySXRlbS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL2JpbmRpbmcvQWRhcHRlckl0ZW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyOGRiYS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9BZGFwdGVySXRlbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLmJpbmRpbmc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5EYXRhQmluZGluZ0l0ZW07Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgaXRlbXMgcHJvdmlkZWQgYnkgdGhlIGFkYXB0ZXIuIFRoZXkgYXJlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZC4KLSAqLwotZmluYWwgY2xhc3MgQWRhcHRlckl0ZW0gewotICAgIHByaXZhdGUgZmluYWwgRGF0YUJpbmRpbmdJdGVtIG1JdGVtOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1UeXBlOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1GdWxsUG9zaXRpb247Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVBvc2l0aW9uUGVyVHlwZTsKLSAgICBwcml2YXRlIExpc3Q8QWRhcHRlckl0ZW0+IG1DaGlsZHJlbjsKLQotICAgIHByb3RlY3RlZCBBZGFwdGVySXRlbShEYXRhQmluZGluZ0l0ZW0gaXRlbSwgaW50IHR5cGUsIGludCBmdWxsUG9zaXRpb24sCi0gICAgICAgICAgICBpbnQgcG9zaXRpb25QZXJUeXBlKSB7Ci0gICAgICAgIG1JdGVtID0gaXRlbTsKLSAgICAgICAgbVR5cGUgPSB0eXBlOwotICAgICAgICBtRnVsbFBvc2l0aW9uID0gZnVsbFBvc2l0aW9uOwotICAgICAgICBtUG9zaXRpb25QZXJUeXBlID0gcG9zaXRpb25QZXJUeXBlOwotICAgIH0KLQotICAgIHZvaWQgYWRkQ2hpbGQoQWRhcHRlckl0ZW0gY2hpbGQpIHsKLSAgICAgICAgaWYgKG1DaGlsZHJlbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtQ2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0PEFkYXB0ZXJJdGVtPigpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUNoaWxkcmVuLmFkZChjaGlsZCk7Ci0gICAgfQotCi0gICAgTGlzdDxBZGFwdGVySXRlbT4gZ2V0Q2hpbGRyZW4oKSB7Ci0gICAgICAgIGlmIChtQ2hpbGRyZW4gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1DaGlsZHJlbjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLSAgICB9Ci0KLSAgICBpbnQgZ2V0VHlwZSgpIHsKLSAgICAgICAgcmV0dXJuIG1UeXBlOwotICAgIH0KLQotICAgIGludCBnZXRGdWxsUG9zaXRpb24oKSB7Ci0gICAgICAgIHJldHVybiBtRnVsbFBvc2l0aW9uOwotICAgIH0KLQotICAgIGludCBnZXRQb3NpdGlvblBlclR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBtUG9zaXRpb25QZXJUeXBlOwotICAgIH0KLQotICAgIERhdGFCaW5kaW5nSXRlbSBnZXREYXRhQmluZGluZ0l0ZW0oKSB7Ci0gICAgICAgIHJldHVybiBtSXRlbTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9GYWtlQWRhcHRlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL2JpbmRpbmcvRmFrZUFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWExM2Y1YS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9GYWtlQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5iaW5kaW5nOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkFkYXB0ZXJCaW5kaW5nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5EYXRhQmluZGluZ0l0ZW07Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklQcm9qZWN0Q2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlUmVmZXJlbmNlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnV0aWwuUGFpcjsKLQotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdEFkYXB0ZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuU3Bpbm5lckFkYXB0ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEZha2UgYWRhcHRlciB0byBkbyBmYWtlIGRhdGEgYmluZGluZyBpbiB7QGxpbmsgQWRhcHRlclZpZXd9IG9iamVjdHMgZm9yIHtAbGluayBMaXN0QWRhcHRlcn0KLSAqIGFuZCB7QGxpbmsgU3Bpbm5lckFkYXB0ZXJ9LgotICoKLSAqLwotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBjbGFzcyBGYWtlQWRhcHRlciBleHRlbmRzIEJhc2VBZGFwdGVyIHsKLQotICAgIC8vIGRvbid0IHVzZSBhIHNldCBiZWNhdXNlIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQuCi0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFJlc291cmNlUmVmZXJlbmNlPiBtVHlwZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlUmVmZXJlbmNlPigpOwotICAgIHByaXZhdGUgZmluYWwgSVByb2plY3RDYWxsYmFjayBtQ2FsbGJhY2s7Ci0gICAgcHJpdmF0ZSBmaW5hbCBSZXNvdXJjZVJlZmVyZW5jZSBtQWRhcHRlclJlZjsKLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8QWRhcHRlckl0ZW0+IG1JdGVtcyA9IG5ldyBBcnJheUxpc3Q8QWRhcHRlckl0ZW0+KCk7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Ta2lwQ2FsbGJhY2tQYXJzZXIgPSBmYWxzZTsKLQotICAgIHB1YmxpYyBGYWtlQWRhcHRlcihSZXNvdXJjZVJlZmVyZW5jZSBhZGFwdGVyUmVmLCBBZGFwdGVyQmluZGluZyBiaW5kaW5nLAotICAgICAgICAgICAgSVByb2plY3RDYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICBtQWRhcHRlclJlZiA9IGFkYXB0ZXJSZWY7Ci0gICAgICAgIG1DYWxsYmFjayA9IGNhbGxiYWNrOwotCi0gICAgICAgIGZpbmFsIGludCByZXBlYXRDb3VudCA9IGJpbmRpbmcuZ2V0UmVwZWF0Q291bnQoKTsKLSAgICAgICAgZmluYWwgaW50IGl0ZW1Db3VudCA9IGJpbmRpbmcuZ2V0SXRlbUNvdW50KCk7Ci0KLSAgICAgICAgLy8gTmVlZCBhbiBhcnJheSB0byBjb3VudCBmb3IgZWFjaCB0eXBlLgotICAgICAgICAvLyBUaGlzIGlzIGxpa2VseSB0b28gYmlnLCBidXQgaXMgdGhlIG1heCBpdCBjYW4gYmUuCi0gICAgICAgIGludFtdIHR5cGVDb3VudCA9IG5ldyBpbnRbaXRlbUNvdW50XTsKLQotICAgICAgICAvLyBXZSBwdXQgc2V2ZXJhbCByZXBlYXRpbmcgc2V0cy4KLSAgICAgICAgZm9yIChpbnQgciA9IDAgOyByIDwgcmVwZWF0Q291bnQgOyByKyspIHsKLSAgICAgICAgICAgIC8vIGxvb3Agb24gdGhlIHR5cGUgb2YgbGlzdCBpdGVtcywgYW5kIGFkZCBob3dldmVyIG1hbnkgZm9yIGVhY2ggdHlwZS4KLSAgICAgICAgICAgIGZvciAoRGF0YUJpbmRpbmdJdGVtIGRhdGFCaW5kaW5nSXRlbSA6IGJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICBSZXNvdXJjZVJlZmVyZW5jZSB2aWV3UmVmID0gZGF0YUJpbmRpbmdJdGVtLmdldFZpZXdSZWZlcmVuY2UoKTsKLSAgICAgICAgICAgICAgICBpbnQgdHlwZUluZGV4ID0gbVR5cGVzLmluZGV4T2Yodmlld1JlZik7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVJbmRleCA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICB0eXBlSW5kZXggPSBtVHlwZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBtVHlwZXMuYWRkKHZpZXdSZWYpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IGRhdGFCaW5kaW5nSXRlbS5nZXRDb3VudCgpOwotCi0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gdHlwZUNvdW50W3R5cGVJbmRleF07Ci0gICAgICAgICAgICAgICAgdHlwZUNvdW50W3R5cGVJbmRleF0gKz0gY291bnQ7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMCA7IGsgPCBjb3VudCA7IGsrKykgewotICAgICAgICAgICAgICAgICAgICBtSXRlbXMuYWRkKG5ldyBBZGFwdGVySXRlbShkYXRhQmluZGluZ0l0ZW0sIHR5cGVJbmRleCwgbUl0ZW1zLnNpemUoKSwgaW5kZXgrKykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZChpbnQgcG9zaXRpb24pIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIG1JdGVtcy5zaXplKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBnZXRJdGVtKGludCBwb3NpdGlvbikgewotICAgICAgICByZXR1cm4gbUl0ZW1zLmdldChwb3NpdGlvbik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGxvbmcgZ2V0SXRlbUlkKGludCBwb3NpdGlvbikgewotICAgICAgICByZXR1cm4gcG9zaXRpb247Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRJdGVtVmlld1R5cGUoaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiBtSXRlbXMuZ2V0KHBvc2l0aW9uKS5nZXRUeXBlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZXcgZ2V0VmlldyhpbnQgcG9zaXRpb24sIFZpZXcgY29udmVydFZpZXcsIFZpZXdHcm91cCBwYXJlbnQpIHsKLSAgICAgICAgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCByZWN5Y2xpbmcgaGVyZSBiZWNhdXNlIHdlIG5ldmVyIHNjcm9sbC4KLSAgICAgICAgQWRhcHRlckl0ZW0gaXRlbSA9IG1JdGVtcy5nZXQocG9zaXRpb24pOwotICAgICAgICBQYWlyPFZpZXcsIEJvb2xlYW4+IHBhaXIgPSBBZGFwdGVySGVscGVyLmdldFZpZXcoaXRlbSwgbnVsbCAvKnBhcmVudEdyb3VwKi8sIHBhcmVudCwKLSAgICAgICAgICAgICAgICBtQ2FsbGJhY2ssIG1BZGFwdGVyUmVmLCBtU2tpcENhbGxiYWNrUGFyc2VyKTsKLSAgICAgICAgbVNraXBDYWxsYmFja1BhcnNlciA9IHBhaXIuZ2V0U2Vjb25kKCk7Ci0gICAgICAgIHJldHVybiBwYWlyLmdldEZpcnN0KCk7Ci0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFZpZXdUeXBlQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtVHlwZXMuc2l6ZSgpOwotICAgIH0KLQotICAgIC8vIC0tLS0gU3Bpbm5lckFkYXB0ZXIKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBWaWV3IGdldERyb3BEb3duVmlldyhpbnQgcG9zaXRpb24sIFZpZXcgY29udmVydFZpZXcsIFZpZXdHcm91cCBwYXJlbnQpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9GYWtlRXhwYW5kYWJsZUFkYXB0ZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9iaW5kaW5nL0Zha2VFeHBhbmRhYmxlQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTM5NTc5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9iaW5kaW5nL0Zha2VFeHBhbmRhYmxlQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5iaW5kaW5nOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkFkYXB0ZXJCaW5kaW5nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5EYXRhQmluZGluZ0l0ZW07Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklQcm9qZWN0Q2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlUmVmZXJlbmNlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnV0aWwuUGFpcjsKLQotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuRGF0YVNldE9ic2VydmVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuRXhwYW5kYWJsZUxpc3RBZGFwdGVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkhldGVyb2dlbmVvdXNFeHBhbmRhYmxlTGlzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi1wdWJsaWMgY2xhc3MgRmFrZUV4cGFuZGFibGVBZGFwdGVyIGltcGxlbWVudHMgRXhwYW5kYWJsZUxpc3RBZGFwdGVyLCBIZXRlcm9nZW5lb3VzRXhwYW5kYWJsZUxpc3QgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdENhbGxiYWNrIG1DYWxsYmFjazsKLSAgICBwcml2YXRlIGZpbmFsIFJlc291cmNlUmVmZXJlbmNlIG1BZGFwdGVyUmVmOwotICAgIHByaXZhdGUgYm9vbGVhbiBtU2tpcENhbGxiYWNrUGFyc2VyID0gZmFsc2U7Ci0KLSAgICBwcm90ZWN0ZWQgZmluYWwgTGlzdDxBZGFwdGVySXRlbT4gbUl0ZW1zID0gbmV3IEFycmF5TGlzdDxBZGFwdGVySXRlbT4oKTsKLQotICAgIC8vIGRvbid0IHVzZSBhIHNldCBiZWNhdXNlIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQuCi0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFJlc291cmNlUmVmZXJlbmNlPiBtR3JvdXBUeXBlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2VSZWZlcmVuY2U+KCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFJlc291cmNlUmVmZXJlbmNlPiBtQ2hpbGRyZW5UeXBlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2VSZWZlcmVuY2U+KCk7Ci0KLSAgICBwdWJsaWMgRmFrZUV4cGFuZGFibGVBZGFwdGVyKFJlc291cmNlUmVmZXJlbmNlIGFkYXB0ZXJSZWYsIEFkYXB0ZXJCaW5kaW5nIGJpbmRpbmcsCi0gICAgICAgICAgICBJUHJvamVjdENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIG1BZGFwdGVyUmVmID0gYWRhcHRlclJlZjsKLSAgICAgICAgbUNhbGxiYWNrID0gY2FsbGJhY2s7Ci0KLSAgICAgICAgY3JlYXRlSXRlbXMoYmluZGluZywgYmluZGluZy5nZXRJdGVtQ291bnQoKSwgYmluZGluZy5nZXRSZXBlYXRDb3VudCgpLCBtR3JvdXBUeXBlcywgMSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUl0ZW1zKEl0ZXJhYmxlPERhdGFCaW5kaW5nSXRlbT4gaXRlcmFibGUsIGZpbmFsIGludCBpdGVtQ291bnQsCi0gICAgICAgICAgICBmaW5hbCBpbnQgcmVwZWF0Q291bnQsIExpc3Q8UmVzb3VyY2VSZWZlcmVuY2U+IHR5cGVzLCBpbnQgZGVwdGgpIHsKLSAgICAgICAgLy8gTmVlZCBhbiBhcnJheSB0byBjb3VudCBmb3IgZWFjaCB0eXBlLgotICAgICAgICAvLyBUaGlzIGlzIGxpa2VseSB0b28gYmlnLCBidXQgaXMgdGhlIG1heCBpdCBjYW4gYmUuCi0gICAgICAgIGludFtdIHR5cGVDb3VudCA9IG5ldyBpbnRbaXRlbUNvdW50XTsKLQotICAgICAgICAvLyB3ZSBwdXQgc2V2ZXJhbCByZXBlYXRpbmcgc2V0cy4KLSAgICAgICAgZm9yIChpbnQgciA9IDAgOyByIDwgcmVwZWF0Q291bnQgOyByKyspIHsKLSAgICAgICAgICAgIC8vIGxvb3Agb24gdGhlIHR5cGUgb2YgbGlzdCBpdGVtcywgYW5kIGFkZCBob3dldmVyIG1hbnkgZm9yIGVhY2ggdHlwZS4KLSAgICAgICAgICAgIGZvciAoRGF0YUJpbmRpbmdJdGVtIGRhdGFCaW5kaW5nSXRlbSA6IGl0ZXJhYmxlKSB7Ci0gICAgICAgICAgICAgICAgUmVzb3VyY2VSZWZlcmVuY2Ugdmlld1JlZiA9IGRhdGFCaW5kaW5nSXRlbS5nZXRWaWV3UmVmZXJlbmNlKCk7Ci0gICAgICAgICAgICAgICAgaW50IHR5cGVJbmRleCA9IHR5cGVzLmluZGV4T2Yodmlld1JlZik7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVJbmRleCA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICB0eXBlSW5kZXggPSB0eXBlcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVzLmFkZCh2aWV3UmVmKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBMaXN0PERhdGFCaW5kaW5nSXRlbT4gY2hpbGRyZW4gPSBkYXRhQmluZGluZ0l0ZW0uZ2V0Q2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSBkYXRhQmluZGluZ0l0ZW0uZ2V0Q291bnQoKTsKLQotICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBjaGlsZHJlbiwgd2UgdXNlIHRoZSBjb3VudCBhcyBhIHJlcGVhdCBjb3VudCBmb3IgdGhlIGNoaWxkcmVuLgotICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSB0eXBlQ291bnRbdHlwZUluZGV4XTsKLSAgICAgICAgICAgICAgICB0eXBlQ291bnRbdHlwZUluZGV4XSArPSBjb3VudDsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwIDsgayA8IGNvdW50IDsgaysrKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJJdGVtIGl0ZW0gPSBuZXcgQWRhcHRlckl0ZW0oZGF0YUJpbmRpbmdJdGVtLCB0eXBlSW5kZXgsIG1JdGVtcy5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAgIG1JdGVtcy5hZGQoaXRlbSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUl0ZW1zKGRhdGFCaW5kaW5nSXRlbSwgZGVwdGggKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVJdGVtcyhEYXRhQmluZGluZ0l0ZW0gaXRlbSwgaW50IGRlcHRoKSB7Ci0gICAgICAgIGlmIChkZXB0aCA9PSAyKSB7Ci0gICAgICAgICAgICBjcmVhdGVJdGVtcyhpdGVtLCBpdGVtLmdldENoaWxkcmVuKCkuc2l6ZSgpLCBpdGVtLmdldENvdW50KCksIG1DaGlsZHJlblR5cGVzLCBkZXB0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIEFkYXB0ZXJJdGVtIGdldENoaWxkSXRlbShpbnQgZ3JvdXBQb3NpdGlvbiwgaW50IGNoaWxkUG9zaXRpb24pIHsKLSAgICAgICAgQWRhcHRlckl0ZW0gaXRlbSA9IG1JdGVtcy5nZXQoZ3JvdXBQb3NpdGlvbik7Ci0KLSAgICAgICAgTGlzdDxBZGFwdGVySXRlbT4gY2hpbGRyZW4gPSBpdGVtLmdldENoaWxkcmVuKCk7Ci0gICAgICAgIHJldHVybiBjaGlsZHJlbi5nZXQoY2hpbGRQb3NpdGlvbik7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBFeHBhbmRhYmxlTGlzdEFkYXB0ZXIKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0R3JvdXBDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIG1JdGVtcy5zaXplKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRDaGlsZHJlbkNvdW50KGludCBncm91cFBvc2l0aW9uKSB7Ci0gICAgICAgIEFkYXB0ZXJJdGVtIGl0ZW0gPSBtSXRlbXMuZ2V0KGdyb3VwUG9zaXRpb24pOwotICAgICAgICByZXR1cm4gaXRlbS5nZXRDaGlsZHJlbigpLnNpemUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGdldEdyb3VwKGludCBncm91cFBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiBtSXRlbXMuZ2V0KGdyb3VwUG9zaXRpb24pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgZ2V0Q2hpbGQoaW50IGdyb3VwUG9zaXRpb24sIGludCBjaGlsZFBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiBnZXRDaGlsZEl0ZW0oZ3JvdXBQb3NpdGlvbiwgY2hpbGRQb3NpdGlvbik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZXcgZ2V0R3JvdXBWaWV3KGludCBncm91cFBvc2l0aW9uLCBib29sZWFuIGlzRXhwYW5kZWQsIFZpZXcgY29udmVydFZpZXcsCi0gICAgICAgICAgICBWaWV3R3JvdXAgcGFyZW50KSB7Ci0gICAgICAgIC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVjeWNsaW5nIGhlcmUgYmVjYXVzZSB3ZSBuZXZlciBzY3JvbGwuCi0gICAgICAgIEFkYXB0ZXJJdGVtIGl0ZW0gPSBtSXRlbXMuZ2V0KGdyb3VwUG9zaXRpb24pOwotICAgICAgICBQYWlyPFZpZXcsIEJvb2xlYW4+IHBhaXIgPSBBZGFwdGVySGVscGVyLmdldFZpZXcoaXRlbSwgbnVsbCAvKnBhcmVudEl0ZW0qLywgcGFyZW50LAotICAgICAgICAgICAgICAgIG1DYWxsYmFjaywgbUFkYXB0ZXJSZWYsIG1Ta2lwQ2FsbGJhY2tQYXJzZXIpOwotICAgICAgICBtU2tpcENhbGxiYWNrUGFyc2VyID0gcGFpci5nZXRTZWNvbmQoKTsKLSAgICAgICAgcmV0dXJuIHBhaXIuZ2V0Rmlyc3QoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVmlldyBnZXRDaGlsZFZpZXcoaW50IGdyb3VwUG9zaXRpb24sIGludCBjaGlsZFBvc2l0aW9uLCBib29sZWFuIGlzTGFzdENoaWxkLAotICAgICAgICAgICAgVmlldyBjb252ZXJ0VmlldywgVmlld0dyb3VwIHBhcmVudCkgewotICAgICAgICAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IHJlY3ljbGluZyBoZXJlIGJlY2F1c2Ugd2UgbmV2ZXIgc2Nyb2xsLgotICAgICAgICBBZGFwdGVySXRlbSBwYXJlbnRJdGVtID0gbUl0ZW1zLmdldChncm91cFBvc2l0aW9uKTsKLSAgICAgICAgQWRhcHRlckl0ZW0gaXRlbSA9IGdldENoaWxkSXRlbShncm91cFBvc2l0aW9uLCBjaGlsZFBvc2l0aW9uKTsKLSAgICAgICAgUGFpcjxWaWV3LCBCb29sZWFuPiBwYWlyID0gQWRhcHRlckhlbHBlci5nZXRWaWV3KGl0ZW0sIHBhcmVudEl0ZW0sIHBhcmVudCwgbUNhbGxiYWNrLAotICAgICAgICAgICAgICAgIG1BZGFwdGVyUmVmLCBtU2tpcENhbGxiYWNrUGFyc2VyKTsKLSAgICAgICAgbVNraXBDYWxsYmFja1BhcnNlciA9IHBhaXIuZ2V0U2Vjb25kKCk7Ci0gICAgICAgIHJldHVybiBwYWlyLmdldEZpcnN0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGxvbmcgZ2V0R3JvdXBJZChpbnQgZ3JvdXBQb3NpdGlvbikgewotICAgICAgICByZXR1cm4gZ3JvdXBQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXRDaGlsZElkKGludCBncm91cFBvc2l0aW9uLCBpbnQgY2hpbGRQb3NpdGlvbikgewotICAgICAgICByZXR1cm4gY2hpbGRQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXRDb21iaW5lZEdyb3VwSWQobG9uZyBncm91cElkKSB7Ci0gICAgICAgIHJldHVybiBncm91cElkIDw8IDE2IHwgMHgwMDAwRkZGRjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXRDb21iaW5lZENoaWxkSWQobG9uZyBncm91cElkLCBsb25nIGNoaWxkSWQpIHsKLSAgICAgICAgcmV0dXJuIGdyb3VwSWQgPDwgMTYgfCBjaGlsZElkOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzQ2hpbGRTZWxlY3RhYmxlKGludCBncm91cFBvc2l0aW9uLCBpbnQgY2hpbGRQb3NpdGlvbikgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkdyb3VwQ29sbGFwc2VkKGludCBncm91cFBvc2l0aW9uKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkdyb3VwRXhwYW5kZWQoaW50IGdyb3VwUG9zaXRpb24pIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YVNldE9ic2VydmVyKERhdGFTZXRPYnNlcnZlciBvYnNlcnZlcikgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdW5yZWdpc3RlckRhdGFTZXRPYnNlcnZlcihEYXRhU2V0T2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGhhc1N0YWJsZUlkcygpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gYXJlQWxsSXRlbXNFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkgewotICAgICAgICByZXR1cm4gbUl0ZW1zLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIEhldGVyb2dlbmVvdXNFeHBhbmRhYmxlTGlzdAotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRDaGlsZFR5cGUoaW50IGdyb3VwUG9zaXRpb24sIGludCBjaGlsZFBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiBnZXRDaGlsZEl0ZW0oZ3JvdXBQb3NpdGlvbiwgY2hpbGRQb3NpdGlvbikuZ2V0VHlwZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0Q2hpbGRUeXBlQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtQ2hpbGRyZW5UeXBlcy5zaXplKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRHcm91cFR5cGUoaW50IGdyb3VwUG9zaXRpb24pIHsKLSAgICAgICAgcmV0dXJuIG1JdGVtcy5nZXQoZ3JvdXBQb3NpdGlvbikuZ2V0VHlwZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0R3JvdXBUeXBlQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtR3JvdXBUeXBlcy5zaXplKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS91dGlsL0RlYnVnLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL3V0aWwvRGVidWcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJlYWI4NS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL3V0aWwvRGVidWcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UudXRpbDsKLQotcHVibGljIGNsYXNzIERlYnVnIHsKLQotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL3V0aWwvRHluYW1pY0lkTWFwLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL3V0aWwvRHluYW1pY0lkTWFwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZmFlOTUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS91dGlsL0R5bmFtaWNJZE1hcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS51dGlsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLlJlc291cmNlVHlwZTsKLWltcG9ydCBjb20uYW5kcm9pZC51dGlsLlBhaXI7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1wdWJsaWMgY2xhc3MgRHluYW1pY0lkTWFwIHsKLQotICAgIHByaXZhdGUgZmluYWwgTWFwPFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+LCBJbnRlZ2VyPiBtRHluYW1pY0lkcyA9IG5ldyBIYXNoTWFwPFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+LCBJbnRlZ2VyPigpOwotICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8UGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4+IG1SZXZEeW5hbWljSWRzID0gbmV3IFNwYXJzZUFycmF5PFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+PigpOwotICAgIHByaXZhdGUgaW50IG1EeW5hbWljU2VlZDsKLQotICAgIHB1YmxpYyBEeW5hbWljSWRNYXAoaW50IHNlZWQpIHsKLSAgICAgICAgbUR5bmFtaWNTZWVkID0gc2VlZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXNldChpbnQgc2VlZCkgewotICAgICAgICBtRHluYW1pY0lkcy5jbGVhcigpOwotICAgICAgICBtUmV2RHluYW1pY0lkcy5jbGVhcigpOwotICAgICAgICBtRHluYW1pY1NlZWQgPSBzZWVkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBkeW5hbWljIGludGVnZXIgZm9yIHRoZSBnaXZlbiByZXNvdXJjZSB0eXBlL25hbWUsIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXNuJ3QKLSAgICAgKiBhbHJlYWR5IGV4aXN0LgotICAgICAqCi0gICAgICogQHBhcmFtIHR5cGUgdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlCi0gICAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybiBhbiBpbnRlZ2VyLgotICAgICAqLwotICAgIHB1YmxpYyBJbnRlZ2VyIGdldElkKFJlc291cmNlVHlwZSB0eXBlLCBTdHJpbmcgbmFtZSkgewotICAgICAgICByZXR1cm4gZ2V0SWQoUGFpci5vZih0eXBlLCBuYW1lKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIGR5bmFtaWMgaW50ZWdlciBmb3IgdGhlIGdpdmVuIHJlc291cmNlIHR5cGUvbmFtZSwgY3JlYXRpbmcgaXQgaWYgaXQgZG9lc24ndAotICAgICAqIGFscmVhZHkgZXhpc3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVzb3VyY2UgdGhlIHR5cGUvbmFtZSBvZiB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuIGFuIGludGVnZXIuCi0gICAgICovCi0gICAgcHVibGljIEludGVnZXIgZ2V0SWQoUGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4gcmVzb3VyY2UpIHsKLSAgICAgICAgSW50ZWdlciB2YWx1ZSA9IG1EeW5hbWljSWRzLmdldChyZXNvdXJjZSk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IEludGVnZXIudmFsdWVPZigrK21EeW5hbWljU2VlZCk7Ci0gICAgICAgICAgICBtRHluYW1pY0lkcy5wdXQocmVzb3VyY2UsIHZhbHVlKTsKLSAgICAgICAgICAgIG1SZXZEeW5hbWljSWRzLnB1dCh2YWx1ZSwgcmVzb3VyY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHB1YmxpYyBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPiByZXNvbHZlSWQoaW50IGlkKSB7Ci0gICAgICAgIHJldHVybiBtUmV2RHluYW1pY0lkcy5nZXQoaWQpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvdXRpbC9TcGFyc2VXZWFrQXJyYXkuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvdXRpbC9TcGFyc2VXZWFrQXJyYXkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQwYzljZS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL3V0aWwvU3BhcnNlV2Vha0FycmF5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS51dGlsOwotCi0KLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFycmF5VXRpbHM7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7Ci0KLS8qKgotICogVGhpcyBpcyBhIGN1c3RvbSB7QGxpbmsgU3BhcnNlQXJyYXl9IHRoYXQgdXNlcyB7QGxpbmsgV2Vha1JlZmVyZW5jZX0gYXJvdW5kIHRoZSBvYmplY3RzIGFkZGVkCi0gKiB0byBpdC4gV2hlbiB0aGUgYXJyYXkgaXMgY29tcGFjdGVkLCBub3Qgb25seSBkZWxldGVkIGluZGljZXMgYnV0IGFsc28gZW1wdHkgcmVmZXJlbmNlcwotICogYXJlIHJlbW92ZWQsIG1ha2luZyB0aGUgYXJyYXkgZWZmaWNpZW50IGF0IHJlbW92aW5nIHJlZmVyZW5jZXMgdGhhdCB3ZXJlIHJlY2xhaW1lZC4KLSAqCi0gKiBUaGUgY29kZSBpcyB0YWtlbiBmcm9tIHtAbGluayBTcGFyc2VBcnJheX0gZGlyZWN0bHkgYW5kIGFkYXB0ZWQgdG8gdXNlIHdlYWsgcmVmZXJlbmNlcy4KLSAqCi0gKiBCZWNhdXNlIG91ciB1c2FnZSBtZWFucyB0aGF0IHdlIG5ldmVyIGFjdHVhbGx5IGNhbGwge0BsaW5rICNyZW1vdmUoaW50KX0gb3Ige0BsaW5rICNkZWxldGUoaW50KX0sCi0gKiB3ZSBtdXN0IG1hbnVhbGx5IGNoZWNrIGlmIHRoZXJlIGFyZSByZWNsYWltZWQgcmVmZXJlbmNlcyB0byB0cmlnZ2VyIGFuIGludGVybmFsIGNvbXBhY3Qgc3RlcAotICogKHdoaWNoIGlzIG5vcm1hbGx5IG9ubHkgdHJpZ2dlcmVkIHdoZW4gYW4gaXRlbSBpcyBtYW51YWxseSByZW1vdmVkKS4KLSAqCi0gKiBTcGFyc2VBcnJheXMgbWFwIGludGVnZXJzIHRvIE9iamVjdHMuICBVbmxpa2UgYSBub3JtYWwgYXJyYXkgb2YgT2JqZWN0cywKLSAqIHRoZXJlIGNhbiBiZSBnYXBzIGluIHRoZSBpbmRpY2VzLiAgSXQgaXMgaW50ZW5kZWQgdG8gYmUgbW9yZSBlZmZpY2llbnQKLSAqIHRoYW4gdXNpbmcgYSBIYXNoTWFwIHRvIG1hcCBJbnRlZ2VycyB0byBPYmplY3RzLgotICovCi1AU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLXB1YmxpYyBjbGFzcyBTcGFyc2VXZWFrQXJyYXk8RT4gewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0IERFTEVURURfUkVGID0gbmV3IE9iamVjdCgpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFdlYWtSZWZlcmVuY2U8Pz4gREVMRVRFRCA9IG5ldyBXZWFrUmVmZXJlbmNlKERFTEVURURfUkVGKTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbUdhcmJhZ2UgPSBmYWxzZTsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgU3BhcnNlQXJyYXkgY29udGFpbmluZyBubyBtYXBwaW5ncy4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3BhcnNlV2Vha0FycmF5KCkgewotICAgICAgICB0aGlzKDEwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IFNwYXJzZUFycmF5IGNvbnRhaW5pbmcgbm8gbWFwcGluZ3MgdGhhdCB3aWxsIG5vdAotICAgICAqIHJlcXVpcmUgYW55IGFkZGl0aW9uYWwgbWVtb3J5IGFsbG9jYXRpb24gdG8gc3RvcmUgdGhlIHNwZWNpZmllZAotICAgICAqIG51bWJlciBvZiBtYXBwaW5ncy4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3BhcnNlV2Vha0FycmF5KGludCBpbml0aWFsQ2FwYWNpdHkpIHsKLSAgICAgICAgaW5pdGlhbENhcGFjaXR5ID0gQXJyYXlVdGlscy5pZGVhbEludEFycmF5U2l6ZShpbml0aWFsQ2FwYWNpdHkpOwotCi0gICAgICAgIG1LZXlzID0gbmV3IGludFtpbml0aWFsQ2FwYWNpdHldOwotICAgICAgICBtVmFsdWVzID0gbmV3IFdlYWtSZWZlcmVuY2VbaW5pdGlhbENhcGFjaXR5XTsKLSAgICAgICAgbVNpemUgPSAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIE9iamVjdCBtYXBwZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGtleSwgb3IgPGNvZGU+bnVsbDwvY29kZT4KLSAgICAgKiBpZiBubyBzdWNoIG1hcHBpbmcgaGFzIGJlZW4gbWFkZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgRSBnZXQoaW50IGtleSkgewotICAgICAgICByZXR1cm4gZ2V0KGtleSwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgT2JqZWN0IG1hcHBlZCBmcm9tIHRoZSBzcGVjaWZpZWQga2V5LCBvciB0aGUgc3BlY2lmaWVkIE9iamVjdAotICAgICAqIGlmIG5vIHN1Y2ggbWFwcGluZyBoYXMgYmVlbiBtYWRlLgotICAgICAqLwotICAgIHB1YmxpYyBFIGdldChpbnQga2V5LCBFIHZhbHVlSWZLZXlOb3RGb3VuZCkgewotICAgICAgICBpbnQgaSA9IGJpbmFyeVNlYXJjaChtS2V5cywgMCwgbVNpemUsIGtleSk7Ci0KLSAgICAgICAgaWYgKGkgPCAwIHx8IG1WYWx1ZXNbaV0gPT0gREVMRVRFRCB8fCBtVmFsdWVzW2ldLmdldCgpID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUlmS2V5Tm90Rm91bmQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gKEUpIG1WYWx1ZXNbaV0uZ2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmVzIHRoZSBtYXBwaW5nIGZyb20gdGhlIHNwZWNpZmllZCBrZXksIGlmIHRoZXJlIHdhcyBhbnkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGVsZXRlKGludCBrZXkpIHsKLSAgICAgICAgaW50IGkgPSBiaW5hcnlTZWFyY2gobUtleXMsIDAsIG1TaXplLCBrZXkpOwotCi0gICAgICAgIGlmIChpID49IDApIHsKLSAgICAgICAgICAgIGlmIChtVmFsdWVzW2ldICE9IERFTEVURUQpIHsKLSAgICAgICAgICAgICAgICBtVmFsdWVzW2ldID0gREVMRVRFRDsKLSAgICAgICAgICAgICAgICBtR2FyYmFnZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBbGlhcyBmb3Ige0BsaW5rICNkZWxldGUoaW50KX0uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKGludCBrZXkpIHsKLSAgICAgICAgZGVsZXRlKGtleSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyB0aGUgbWFwcGluZyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUF0KGludCBpbmRleCkgewotICAgICAgICBpZiAobVZhbHVlc1tpbmRleF0gIT0gREVMRVRFRCkgewotICAgICAgICAgICAgbVZhbHVlc1tpbmRleF0gPSBERUxFVEVEOwotICAgICAgICAgICAgbUdhcmJhZ2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGdjKCkgewotICAgICAgICBpbnQgbiA9IG1TaXplOwotICAgICAgICBpbnQgbyA9IDA7Ci0gICAgICAgIGludFtdIGtleXMgPSBtS2V5czsKLSAgICAgICAgV2Vha1JlZmVyZW5jZTw/PltdIHZhbHVlcyA9IG1WYWx1ZXM7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgICAgIFdlYWtSZWZlcmVuY2U8Pz4gdmFsID0gdmFsdWVzW2ldOwotCi0gICAgICAgICAgICAvLyBEb24ndCBrZWVwIGFueSBub24gREVMRVRFRCB2YWx1ZXMsIGJ1dCBvbmx5IHRoZSBvbmUgdGhhdCBzdGlsbCBoYXZlIGEgdmFsaWQKLSAgICAgICAgICAgIC8vIHJlZmVyZW5jZS4KLSAgICAgICAgICAgIGlmICh2YWwgIT0gREVMRVRFRCAmJiB2YWwuZ2V0KCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChpICE9IG8pIHsKLSAgICAgICAgICAgICAgICAgICAga2V5c1tvXSA9IGtleXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1tvXSA9IHZhbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtR2FyYmFnZSA9IGZhbHNlOwotICAgICAgICBtU2l6ZSA9IG87Ci0KLSAgICAgICAgaW50IG5ld1NpemUgPSBBcnJheVV0aWxzLmlkZWFsSW50QXJyYXlTaXplKG1TaXplKTsKLSAgICAgICAgaWYgKG5ld1NpemUgPCBtS2V5cy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGludFtdIG5rZXlzID0gbmV3IGludFtuZXdTaXplXTsKLSAgICAgICAgICAgIFdlYWtSZWZlcmVuY2U8Pz5bXSBudmFsdWVzID0gbmV3IFdlYWtSZWZlcmVuY2VbbmV3U2l6ZV07Ci0KLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobUtleXMsIDAsIG5rZXlzLCAwLCBuZXdTaXplKTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobVZhbHVlcywgMCwgbnZhbHVlcywgMCwgbmV3U2l6ZSk7Ci0KLSAgICAgICAgICAgIG1LZXlzID0gbmtleXM7Ci0gICAgICAgICAgICBtVmFsdWVzID0gbnZhbHVlczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZHMgYSBtYXBwaW5nIGZyb20gdGhlIHNwZWNpZmllZCBrZXkgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSwKLSAgICAgKiByZXBsYWNpbmcgdGhlIHByZXZpb3VzIG1hcHBpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIGtleSBpZiB0aGVyZQotICAgICAqIHdhcyBvbmUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcHV0KGludCBrZXksIEUgdmFsdWUpIHsKLSAgICAgICAgaW50IGkgPSBiaW5hcnlTZWFyY2gobUtleXMsIDAsIG1TaXplLCBrZXkpOwotCi0gICAgICAgIGlmIChpID49IDApIHsKLSAgICAgICAgICAgIG1WYWx1ZXNbaV0gPSBuZXcgV2Vha1JlZmVyZW5jZSh2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpID0gfmk7Ci0KLSAgICAgICAgICAgIGlmIChpIDwgbVNpemUgJiYgKG1WYWx1ZXNbaV0gPT0gREVMRVRFRCB8fCBtVmFsdWVzW2ldLmdldCgpID09IG51bGwpKSB7Ci0gICAgICAgICAgICAgICAgbUtleXNbaV0gPSBrZXk7Ci0gICAgICAgICAgICAgICAgbVZhbHVlc1tpXSA9IG5ldyBXZWFrUmVmZXJlbmNlKHZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtU2l6ZSA+PSBtS2V5cy5sZW5ndGggJiYgKG1HYXJiYWdlIHx8IGhhc1JlY2xhaW1lZFJlZnMoKSkpIHsKLSAgICAgICAgICAgICAgICBnYygpOwotCi0gICAgICAgICAgICAgICAgLy8gU2VhcmNoIGFnYWluIGJlY2F1c2UgaW5kaWNlcyBtYXkgaGF2ZSBjaGFuZ2VkLgotICAgICAgICAgICAgICAgIGkgPSB+YmluYXJ5U2VhcmNoKG1LZXlzLCAwLCBtU2l6ZSwga2V5KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1TaXplID49IG1LZXlzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIGludCBuID0gQXJyYXlVdGlscy5pZGVhbEludEFycmF5U2l6ZShtU2l6ZSArIDEpOwotCi0gICAgICAgICAgICAgICAgaW50W10gbmtleXMgPSBuZXcgaW50W25dOwotICAgICAgICAgICAgICAgIFdlYWtSZWZlcmVuY2U8Pz5bXSBudmFsdWVzID0gbmV3IFdlYWtSZWZlcmVuY2Vbbl07Ci0KLSAgICAgICAgICAgICAgICAvLyBMb2cuZSgiU3BhcnNlQXJyYXkiLCAiZ3JvdyAiICsgbUtleXMubGVuZ3RoICsgIiB0byAiICsgbik7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtS2V5cywgMCwgbmtleXMsIDAsIG1LZXlzLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtVmFsdWVzLCAwLCBudmFsdWVzLCAwLCBtVmFsdWVzLmxlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICBtS2V5cyA9IG5rZXlzOwotICAgICAgICAgICAgICAgIG1WYWx1ZXMgPSBudmFsdWVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVNpemUgLSBpICE9IDApIHsKLSAgICAgICAgICAgICAgICAvLyBMb2cuZSgiU3BhcnNlQXJyYXkiLCAibW92ZSAiICsgKG1TaXplIC0gaSkpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobUtleXMsIGksIG1LZXlzLCBpICsgMSwgbVNpemUgLSBpKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1WYWx1ZXMsIGksIG1WYWx1ZXMsIGkgKyAxLCBtU2l6ZSAtIGkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtS2V5c1tpXSA9IGtleTsKLSAgICAgICAgICAgIG1WYWx1ZXNbaV0gPSBuZXcgV2Vha1JlZmVyZW5jZSh2YWx1ZSk7Ci0gICAgICAgICAgICBtU2l6ZSsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGtleS12YWx1ZSBtYXBwaW5ncyB0aGF0IHRoaXMgU3BhcnNlQXJyYXkKLSAgICAgKiBjdXJyZW50bHkgc3RvcmVzLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgc2l6ZSgpIHsKLSAgICAgICAgaWYgKG1HYXJiYWdlKSB7Ci0gICAgICAgICAgICBnYygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1TaXplOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdpdmVuIGFuIGluZGV4IGluIHRoZSByYW5nZSA8Y29kZT4wLi4uc2l6ZSgpLTE8L2NvZGU+LCByZXR1cm5zCi0gICAgICogdGhlIGtleSBmcm9tIHRoZSA8Y29kZT5pbmRleDwvY29kZT50aCBrZXktdmFsdWUgbWFwcGluZyB0aGF0IHRoaXMKLSAgICAgKiBTcGFyc2VBcnJheSBzdG9yZXMuCi0gICAgICovCi0gICAgcHVibGljIGludCBrZXlBdChpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKG1HYXJiYWdlKSB7Ci0gICAgICAgICAgICBnYygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1LZXlzW2luZGV4XTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHaXZlbiBhbiBpbmRleCBpbiB0aGUgcmFuZ2UgPGNvZGU+MC4uLnNpemUoKS0xPC9jb2RlPiwgcmV0dXJucwotICAgICAqIHRoZSB2YWx1ZSBmcm9tIHRoZSA8Y29kZT5pbmRleDwvY29kZT50aCBrZXktdmFsdWUgbWFwcGluZyB0aGF0IHRoaXMKLSAgICAgKiBTcGFyc2VBcnJheSBzdG9yZXMuCi0gICAgICovCi0gICAgcHVibGljIEUgdmFsdWVBdChpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKG1HYXJiYWdlKSB7Ci0gICAgICAgICAgICBnYygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIChFKSBtVmFsdWVzW2luZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHaXZlbiBhbiBpbmRleCBpbiB0aGUgcmFuZ2UgPGNvZGU+MC4uLnNpemUoKS0xPC9jb2RlPiwgc2V0cyBhIG5ldwotICAgICAqIHZhbHVlIGZvciB0aGUgPGNvZGU+aW5kZXg8L2NvZGU+dGgga2V5LXZhbHVlIG1hcHBpbmcgdGhhdCB0aGlzCi0gICAgICogU3BhcnNlQXJyYXkgc3RvcmVzLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlQXQoaW50IGluZGV4LCBFIHZhbHVlKSB7Ci0gICAgICAgIGlmIChtR2FyYmFnZSkgewotICAgICAgICAgICAgZ2MoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WYWx1ZXNbaW5kZXhdID0gbmV3IFdlYWtSZWZlcmVuY2UodmFsdWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGluZGV4IGZvciB3aGljaCB7QGxpbmsgI2tleUF0fSB3b3VsZCByZXR1cm4gdGhlCi0gICAgICogc3BlY2lmaWVkIGtleSwgb3IgYSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhlIHNwZWNpZmllZAotICAgICAqIGtleSBpcyBub3QgbWFwcGVkLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgaW5kZXhPZktleShpbnQga2V5KSB7Ci0gICAgICAgIGlmIChtR2FyYmFnZSkgewotICAgICAgICAgICAgZ2MoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBiaW5hcnlTZWFyY2gobUtleXMsIDAsIG1TaXplLCBrZXkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gaW5kZXggZm9yIHdoaWNoIHtAbGluayAjdmFsdWVBdH0gd291bGQgcmV0dXJuIHRoZQotICAgICAqIHNwZWNpZmllZCBrZXksIG9yIGEgbmVnYXRpdmUgbnVtYmVyIGlmIG5vIGtleXMgbWFwIHRvIHRoZQotICAgICAqIHNwZWNpZmllZCB2YWx1ZS4KLSAgICAgKiBCZXdhcmUgdGhhdCB0aGlzIGlzIGEgbGluZWFyIHNlYXJjaCwgdW5saWtlIGxvb2t1cHMgYnkga2V5LAotICAgICAqIGFuZCB0aGF0IG11bHRpcGxlIGtleXMgY2FuIG1hcCB0byB0aGUgc2FtZSB2YWx1ZSBhbmQgdGhpcyB3aWxsCi0gICAgICogZmluZCBvbmx5IG9uZSBvZiB0aGVtLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgaW5kZXhPZlZhbHVlKEUgdmFsdWUpIHsKLSAgICAgICAgaWYgKG1HYXJiYWdlKSB7Ci0gICAgICAgICAgICBnYygpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtU2l6ZTsgaSsrKQotICAgICAgICAgICAgaWYgKG1WYWx1ZXNbaV0uZ2V0KCkgPT0gdmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBtYXBwaW5ncyBmcm9tIHRoaXMgU3BhcnNlQXJyYXkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXIoKSB7Ci0gICAgICAgIGludCBuID0gbVNpemU7Ci0gICAgICAgIFdlYWtSZWZlcmVuY2U8Pz5bXSB2YWx1ZXMgPSBtVmFsdWVzOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICB2YWx1ZXNbaV0gPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNpemUgPSAwOwotICAgICAgICBtR2FyYmFnZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFB1dHMgYSBrZXkvdmFsdWUgcGFpciBpbnRvIHRoZSBhcnJheSwgb3B0aW1pemluZyBmb3IgdGhlIGNhc2Ugd2hlcmUKLSAgICAgKiB0aGUga2V5IGlzIGdyZWF0ZXIgdGhhbiBhbGwgZXhpc3Rpbmcga2V5cyBpbiB0aGUgYXJyYXkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYXBwZW5kKGludCBrZXksIEUgdmFsdWUpIHsKLSAgICAgICAgaWYgKG1TaXplICE9IDAgJiYga2V5IDw9IG1LZXlzW21TaXplIC0gMV0pIHsKLSAgICAgICAgICAgIHB1dChrZXksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtU2l6ZSA+PSBtS2V5cy5sZW5ndGggJiYgKG1HYXJiYWdlIHx8IGhhc1JlY2xhaW1lZFJlZnMoKSkpIHsKLSAgICAgICAgICAgIGdjKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgcG9zID0gbVNpemU7Ci0gICAgICAgIGlmIChwb3MgPj0gbUtleXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBpbnQgbiA9IEFycmF5VXRpbHMuaWRlYWxJbnRBcnJheVNpemUocG9zICsgMSk7Ci0KLSAgICAgICAgICAgIGludFtdIG5rZXlzID0gbmV3IGludFtuXTsKLSAgICAgICAgICAgIFdlYWtSZWZlcmVuY2U8Pz5bXSBudmFsdWVzID0gbmV3IFdlYWtSZWZlcmVuY2Vbbl07Ci0KLSAgICAgICAgICAgIC8vIExvZy5lKCJTcGFyc2VBcnJheSIsICJncm93ICIgKyBtS2V5cy5sZW5ndGggKyAiIHRvICIgKyBuKTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobUtleXMsIDAsIG5rZXlzLCAwLCBtS2V5cy5sZW5ndGgpOwotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtVmFsdWVzLCAwLCBudmFsdWVzLCAwLCBtVmFsdWVzLmxlbmd0aCk7Ci0KLSAgICAgICAgICAgIG1LZXlzID0gbmtleXM7Ci0gICAgICAgICAgICBtVmFsdWVzID0gbnZhbHVlczsKLSAgICAgICAgfQotCi0gICAgICAgIG1LZXlzW3Bvc10gPSBrZXk7Ci0gICAgICAgIG1WYWx1ZXNbcG9zXSA9IG5ldyBXZWFrUmVmZXJlbmNlKHZhbHVlKTsKLSAgICAgICAgbVNpemUgPSBwb3MgKyAxOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBoYXNSZWNsYWltZWRSZWZzKCkgewotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBtU2l6ZSA7IGkrKykgewotICAgICAgICAgICAgaWYgKG1WYWx1ZXNbaV0uZ2V0KCkgPT0gbnVsbCkgeyAvLyBERUxFVEVELmdldCgpIG5ldmVyIHJldHVybnMgbnVsbC4KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgYmluYXJ5U2VhcmNoKGludFtdIGEsIGludCBzdGFydCwgaW50IGxlbiwgaW50IGtleSkgewotICAgICAgICBpbnQgaGlnaCA9IHN0YXJ0ICsgbGVuLCBsb3cgPSBzdGFydCAtIDEsIGd1ZXNzOwotCi0gICAgICAgIHdoaWxlIChoaWdoIC0gbG93ID4gMSkgewotICAgICAgICAgICAgZ3Vlc3MgPSAoaGlnaCArIGxvdykgLyAyOwotCi0gICAgICAgICAgICBpZiAoYVtndWVzc10gPCBrZXkpCi0gICAgICAgICAgICAgICAgbG93ID0gZ3Vlc3M7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaGlnaCA9IGd1ZXNzOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhpZ2ggPT0gc3RhcnQgKyBsZW4pCi0gICAgICAgICAgICByZXR1cm4gfihzdGFydCArIGxlbik7Ci0gICAgICAgIGVsc2UgaWYgKGFbaGlnaF0gPT0ga2V5KQotICAgICAgICAgICAgcmV0dXJuIGhpZ2g7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiB+aGlnaDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludFtdIG1LZXlzOwotICAgIHByaXZhdGUgV2Vha1JlZmVyZW5jZTw/PltdIG1WYWx1ZXM7Ci0gICAgcHJpdmF0ZSBpbnQgbVNpemU7Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9NYXBWaWV3LmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9NYXBWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMDEzYmIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvTWFwVmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5nb29nbGUuYW5kcm9pZC5tYXBzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5Nb2NrVmlldzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci0KLS8qKgotICogTW9jayB2ZXJzaW9uIG9mIHRoZSBNYXBWaWV3LgotICogT25seSBub24gb3ZlcnJpZGUgcHVibGljIG1ldGhvZHMgZnJvbSB0aGUgcmVhbCBNYXBWaWV3IGhhdmUgYmVlbiBhZGRlZCBpbiB0aGVyZS4KLSAqIE1ldGhvZHMgdGhhdCB0YWtlIGFuIHVua25vd24gY2xhc3MgYXMgcGFyYW1ldGVyIG9yIGFzIHJldHVybiBvYmplY3QsIGhhdmUgYmVlbiByZW1vdmVkIGZvciBub3cuCi0gKiAKLSAqIFRPRE86IGdlbmVyYXRlIGF1dG9tYXRpY2FsbHkuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTWFwVmlldyBleHRlbmRzIE1vY2tWaWV3IHsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIG5ldyBXZWJWaWV3IHdpdGggYSBDb250ZXh0IG9iamVjdC4KLSAgICAgKiBAcGFyYW0gY29udGV4dCBBIENvbnRleHQgb2JqZWN0IHVzZWQgdG8gYWNjZXNzIGFwcGxpY2F0aW9uIGFzc2V0cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWFwVmlldyhDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgV2ViVmlldyB3aXRoIGxheW91dCBwYXJhbWV0ZXJzLgotICAgICAqIEBwYXJhbSBjb250ZXh0IEEgQ29udGV4dCBvYmplY3QgdXNlZCB0byBhY2Nlc3MgYXBwbGljYXRpb24gYXNzZXRzLgotICAgICAqIEBwYXJhbSBhdHRycyBBbiBBdHRyaWJ1dGVTZXQgcGFzc2VkIHRvIG91ciBwYXJlbnQuCi0gICAgICovCi0gICAgcHVibGljIE1hcFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLm1hcFZpZXdTdHlsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0IGEgbmV3IFdlYlZpZXcgd2l0aCBsYXlvdXQgcGFyYW1ldGVycyBhbmQgYSBkZWZhdWx0IHN0eWxlLgotICAgICAqIEBwYXJhbSBjb250ZXh0IEEgQ29udGV4dCBvYmplY3QgdXNlZCB0byBhY2Nlc3MgYXBwbGljYXRpb24gYXNzZXRzLgotICAgICAqIEBwYXJhbSBhdHRycyBBbiBBdHRyaWJ1dGVTZXQgcGFzc2VkIHRvIG91ciBwYXJlbnQuCi0gICAgICogQHBhcmFtIGRlZlN0eWxlIFRoZSBkZWZhdWx0IHN0eWxlIHJlc291cmNlIElELgotICAgICAqLwotICAgIHB1YmxpYyBNYXBWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gU1RBUlQgRkFLRSBQVUJMSUMgTUVUSE9EUwotICAgIAotICAgIHB1YmxpYyB2b2lkIGRpc3BsYXlab29tQ29udHJvbHMoYm9vbGVhbiB0YWtlRm9jdXMpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBjYW5Db3ZlckNlbnRlcigpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHByZUxvYWQoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRab29tTGV2ZWwoKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNhdGVsbGl0ZShib29sZWFuIG9uKSB7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNTYXRlbGxpdGUoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUcmFmZmljKGJvb2xlYW4gb24pIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYWZmaWMoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTdHJlZXRWaWV3KGJvb2xlYW4gb24pIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N0cmVldFZpZXcoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldExhdGl0dWRlU3BhbigpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRMb25naXR1ZGVTcGFuKCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldE1heFpvb21MZXZlbCgpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25TYXZlSW5zdGFuY2VTdGF0ZShCdW5kbGUgc3RhdGUpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKEJ1bmRsZSBzdGF0ZSkgewotICAgIH0KLQotICAgIHB1YmxpYyBWaWV3IGdldFpvb21Db250cm9scygpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvbGliY29yZS9pY3UvRGF0ZUludGVydmFsRm9ybWF0X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9saWJjb3JlL2ljdS9EYXRlSW50ZXJ2YWxGb3JtYXRfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0YzIwNS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9saWJjb3JlL2ljdS9EYXRlSW50ZXJ2YWxGb3JtYXRfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGxpYmNvcmUuaWN1OwotCi1pbXBvcnQgamF2YS50ZXh0LkZpZWxkUG9zaXRpb247Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUludGVydmFsRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuRGF0ZUludGVydmFsOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVGltZVpvbmU7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5VTG9jYWxlOwotCi1wdWJsaWMgY2xhc3MgRGF0ZUludGVydmFsRm9ybWF0X0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPERhdGVJbnRlcnZhbEZvcm1hdF9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxEYXRlSW50ZXJ2YWxGb3JtYXRfRGVsZWdhdGU+KERhdGVJbnRlcnZhbEZvcm1hdF9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotICAgIHByaXZhdGUgRGF0ZUludGVydmFsRm9ybWF0IG1Gb3JtYXQ7Ci0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi9zdGF0aWMgU3RyaW5nIGZvcm1hdERhdGVJbnRlcnZhbChsb25nIGFkZHJlc3MsIGxvbmcgZnJvbURhdGUsIGxvbmcgdG9EYXRlKSB7Ci0gICAgICAgIERhdGVJbnRlcnZhbEZvcm1hdF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKChpbnQpYWRkcmVzcyk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19CUk9LRU4sCi0gICAgICAgICAgICAgICAgICAgICJVbmFibGUgZm9yIGZpbmQgbmF0aXZlIERhdGVJbnRlcnZhbEZvcm1hdCIsIG51bGwpOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgRGF0ZUludGVydmFsIGludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbChmcm9tRGF0ZSwgdG9EYXRlKTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBGaWVsZFBvc2l0aW9uIHBvcyA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOwotICAgICAgICBkZWxlZ2F0ZS5tRm9ybWF0LmZvcm1hdChpbnRlcnZhbCwgc2IsIHBvcyk7Ci0gICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBsb25nIGNyZWF0ZURhdGVJbnRlcnZhbEZvcm1hdChTdHJpbmcgc2tlbGV0b24sIFN0cmluZyBsb2NhbGVOYW1lLAotICAgICAgICAgICAgU3RyaW5nIHR6TmFtZSkgewotICAgICAgICBUaW1lWm9uZSBwcmV2RGVmYXVsdFR6ID0gVGltZVpvbmUuZ2V0RGVmYXVsdCgpOwotICAgICAgICBUaW1lWm9uZS5zZXREZWZhdWx0KFRpbWVab25lLmdldFRpbWVab25lKHR6TmFtZSkpOwotICAgICAgICBEYXRlSW50ZXJ2YWxGb3JtYXRfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgRGF0ZUludGVydmFsRm9ybWF0X0RlbGVnYXRlKCk7Ci0gICAgICAgIG5ld0RlbGVnYXRlLm1Gb3JtYXQgPQotICAgICAgICAgICAgICAgIERhdGVJbnRlcnZhbEZvcm1hdC5nZXRJbnN0YW5jZShza2VsZXRvbiwgbmV3IFVMb2NhbGUobG9jYWxlTmFtZSkpOwotICAgICAgICBUaW1lWm9uZS5zZXREZWZhdWx0KHByZXZEZWZhdWx0VHopOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIGRlc3Ryb3lEYXRlSW50ZXJ2YWxGb3JtYXQobG9uZyBhZGRyZXNzKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IoKGludClhZGRyZXNzKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2xpYmNvcmUvaWN1L0lDVV9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvbGliY29yZS9pY3UvSUNVX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNDEwM2IuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvbGliY29yZS9pY3UvSUNVX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgbGliY29yZS5pY3U7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EYXRlVGltZVBhdHRlcm5HZW5lcmF0b3I7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5VTG9jYWxlOwotCi1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGxpYmNvcmUuaWN1LklDVQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIElDVSBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqLwotcHVibGljIGNsYXNzIElDVV9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0gSmF2YSBkZWxlZ2F0ZXMKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgdG9Mb3dlckNhc2UoU3RyaW5nIHMsIFN0cmluZyBsb2NhbGVOYW1lKSB7Ci0gICAgICAgIHJldHVybiBzLnRvTG93ZXJDYXNlKCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyB0b1VwcGVyQ2FzZShTdHJpbmcgcywgU3RyaW5nIGxvY2FsZU5hbWUpIHsKLSAgICAgICAgcmV0dXJuIHMudG9VcHBlckNhc2UoKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0gTmF0aXZlIG1ldGhvZHMgYWNjZXNzaW5nIElDVSdzIGRhdGFiYXNlLgotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyBnZXRCZXN0RGF0ZVRpbWVQYXR0ZXJuTmF0aXZlKFN0cmluZyBza2VsZXRvbiwgU3RyaW5nIGxvY2FsZU5hbWUpIHsKLSAgICAgICAgcmV0dXJuIERhdGVUaW1lUGF0dGVybkdlbmVyYXRvci5nZXRJbnN0YW5jZShuZXcgVUxvY2FsZShsb2NhbGVOYW1lKSkKLSAgICAgICAgICAgICAgICAuZ2V0QmVzdFBhdHRlcm4oc2tlbGV0b24pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgZ2V0Q2xkclZlcnNpb24oKSB7Ci0gICAgICAgIHJldHVybiAiMjIuMS4xIjsgICAgICAvLyBUT0RPOiBjaGVjayB3aGF0IHRoZSByaWdodCB2YWx1ZSBzaG91bGQgYmUuCi0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyBnZXRJY3VWZXJzaW9uKCkgewotICAgICAgICByZXR1cm4gInVua25vd25fbGF5b3V0bGliIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGdldFVuaWNvZGVWZXJzaW9uKCkgewotICAgICAgICByZXR1cm4gIjUuMiI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZ1tdIGdldEF2YWlsYWJsZUJyZWFrSXRlcmF0b3JMb2NhbGVzTmF0aXZlKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nW10gZ2V0QXZhaWxhYmxlQ2FsZW5kYXJMb2NhbGVzTmF0aXZlKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nW10gZ2V0QXZhaWxhYmxlQ29sbGF0b3JMb2NhbGVzTmF0aXZlKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nW10gZ2V0QXZhaWxhYmxlRGF0ZUZvcm1hdExvY2FsZXNOYXRpdmUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmdbXSBnZXRBdmFpbGFibGVMb2NhbGVzTmF0aXZlKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nW10gZ2V0QXZhaWxhYmxlTnVtYmVyRm9ybWF0TG9jYWxlc05hdGl2ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZ1tdIGdldEF2YWlsYWJsZUN1cnJlbmN5Q29kZXMoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgZ2V0Q3VycmVuY3lDb2RlKFN0cmluZyBsb2NhbGUpIHsKLSAgICAgICAgcmV0dXJuICIiOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgZ2V0Q3VycmVuY3lEaXNwbGF5TmFtZShTdHJpbmcgbG9jYWxlLCBTdHJpbmcgY3VycmVuY3lDb2RlKSB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IGdldEN1cnJlbmN5RnJhY3Rpb25EaWdpdHMoU3RyaW5nIGN1cnJlbmN5Q29kZSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGdldEN1cnJlbmN5U3ltYm9sKFN0cmluZyBsb2NhbGUsIFN0cmluZyBjdXJyZW5jeUNvZGUpIHsKLSAgICAgICAgcmV0dXJuICIiOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgZ2V0RGlzcGxheUNvdW50cnlOYXRpdmUoU3RyaW5nIGNvdW50cnlDb2RlLCBTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGdldERpc3BsYXlMYW5ndWFnZU5hdGl2ZShTdHJpbmcgbGFuZ3VhZ2VDb2RlLCBTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGdldERpc3BsYXlWYXJpYW50TmF0aXZlKFN0cmluZyB2YXJpYW50Q29kZSwgU3RyaW5nIGxvY2FsZSkgewotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyBnZXRJU08zQ291bnRyeU5hdGl2ZShTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGdldElTTzNMYW5ndWFnZU5hdGl2ZShTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGFkZExpa2VseVN1YnRhZ3MoU3RyaW5nIGxvY2FsZSkgewotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyBnZXRTY3JpcHQoU3RyaW5nIGxvY2FsZSkgewotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZ1tdIGdldElTT0xhbmd1YWdlc05hdGl2ZSgpIHsKLSAgICAgICAgcmV0dXJuIExvY2FsZS5nZXRJU09MYW5ndWFnZXMoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nW10gZ2V0SVNPQ291bnRyaWVzTmF0aXZlKCkgewotICAgICAgICByZXR1cm4gTG9jYWxlLmdldElTT0NvdW50cmllcygpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGluaXRMb2NhbGVEYXRhTmF0aXZlKFN0cmluZyBsb2NhbGUsIExvY2FsZURhdGEgcmVzdWx0KSB7Ci0KLSAgICAgICAgLy8gVXNlZCBieSBDYWxlbmRhci4KLSAgICAgICAgcmVzdWx0LmZpcnN0RGF5T2ZXZWVrID0gSW50ZWdlci52YWx1ZU9mKDEpOwotICAgICAgICByZXN1bHQubWluaW1hbERheXNJbkZpcnN0V2VlayA9IEludGVnZXIudmFsdWVPZigxKTsKLQotICAgICAgICAvLyBVc2VkIGJ5IERhdGVGb3JtYXRTeW1ib2xzLgotICAgICAgICByZXN1bHQuYW1QbSA9IG5ldyBTdHJpbmdbXSB7ICJBTSIsICJQTSIgfTsKLSAgICAgICAgcmVzdWx0LmVyYXMgPSBuZXcgU3RyaW5nW10geyAiQkMiLCAiQUQiIH07Ci0KLSAgICAgICAgcmVzdWx0LmxvbmdNb250aE5hbWVzID0gbmV3IFN0cmluZ1tdIHsgIkphbnVhcnkiLCAiRmVicnVhcnkiLCAiTWFyY2giLCAiQXByaWwiLCAiTWF5IiwKLSAgICAgICAgICAgICAgICAiSnVuZSIsICJKdWx5IiwgIkF1Z3VzdCIsICJTZXB0ZW1iZXIiLCAiT2N0b2JlciIsICJOb3ZlbWJlciIsICJEZWNlbWJlciIgfTsKLSAgICAgICAgcmVzdWx0LnNob3J0TW9udGhOYW1lcyA9IG5ldyBTdHJpbmdbXSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwKLSAgICAgICAgICAgICAgICAiSnVuIiwgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIiB9OwotICAgICAgICByZXN1bHQubG9uZ1N0YW5kQWxvbmVNb250aE5hbWVzID0gcmVzdWx0LmxvbmdNb250aE5hbWVzOwotICAgICAgICByZXN1bHQuc2hvcnRTdGFuZEFsb25lTW9udGhOYW1lcyA9IHJlc3VsdC5zaG9ydE1vbnRoTmFtZXM7Ci0KLSAgICAgICAgLy8gVGhlIHBsYXRmb3JtIGNvZGUgZXhwZWN0cyB0aGlzIHRvIGJlZ2luIGF0IGluZGV4IDEsIHJhdGhlciB0aGFuIDAuIEl0IG1hcHMgaXQgZGlyZWN0bHkgdG8KLSAgICAgICAgLy8gdGhlIGNvbnN0YW50cyBmcm9tIGphdmEudXRpbC5DYWxlbmRhci48d2Vla2RheT4KLSAgICAgICAgcmVzdWx0LmxvbmdXZWVrZGF5TmFtZXMgPSBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICAgICIiLCAiU3VuZGF5IiwgIk1vbmRheSIgLCJUdWVzZGF5IiwgIldlZG5lc2RheSIsICJUaHVyc2RheSIsICJGcmlkYXkiLCAiU2F0dXJkYXkiIH07Ci0gICAgICAgIHJlc3VsdC5zaG9ydFdlZWtkYXlOYW1lcyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgICAgIiIsICJTdW4iLCAiTW9uIiAsIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiIH07Ci0gICAgICAgIHJlc3VsdC50aW55V2Vla2RheU5hbWVzID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAiIiwgIlMiLCAiTSIsICJUIiwgIlciLCAiVCIsICJGIiwgIlMiIH07Ci0KLSAgICAgICAgcmVzdWx0LmxvbmdTdGFuZEFsb25lV2Vla2RheU5hbWVzID0gcmVzdWx0LmxvbmdXZWVrZGF5TmFtZXM7Ci0gICAgICAgIHJlc3VsdC5zaG9ydFN0YW5kQWxvbmVXZWVrZGF5TmFtZXMgPSByZXN1bHQuc2hvcnRXZWVrZGF5TmFtZXM7Ci0gICAgICAgIHJlc3VsdC50aW55U3RhbmRBbG9uZVdlZWtkYXlOYW1lcyA9IHJlc3VsdC50aW55V2Vla2RheU5hbWVzOwotCi0gICAgICAgIHJlc3VsdC5mdWxsVGltZUZvcm1hdCA9ICIiOwotICAgICAgICByZXN1bHQubG9uZ1RpbWVGb3JtYXQgPSAiIjsKLSAgICAgICAgcmVzdWx0Lm1lZGl1bVRpbWVGb3JtYXQgPSAiIjsKLSAgICAgICAgcmVzdWx0LnNob3J0VGltZUZvcm1hdCA9ICIiOwotCi0gICAgICAgIHJlc3VsdC5mdWxsRGF0ZUZvcm1hdCA9ICIiOwotICAgICAgICByZXN1bHQubG9uZ0RhdGVGb3JtYXQgPSAiIjsKLSAgICAgICAgcmVzdWx0Lm1lZGl1bURhdGVGb3JtYXQgPSAiIjsKLSAgICAgICAgcmVzdWx0LnNob3J0RGF0ZUZvcm1hdCA9ICIiOwotCi0gICAgICAgIC8vIFVzZWQgYnkgRGVjaW1hbEZvcm1hdFN5bWJvbHMuCi0gICAgICAgIHJlc3VsdC56ZXJvRGlnaXQgPSAnMCc7Ci0gICAgICAgIHJlc3VsdC5kZWNpbWFsU2VwYXJhdG9yID0gJy4nOwotICAgICAgICByZXN1bHQuZ3JvdXBpbmdTZXBhcmF0b3IgPSAnLCc7Ci0gICAgICAgIHJlc3VsdC5wYXR0ZXJuU2VwYXJhdG9yID0gJyAnOwotICAgICAgICByZXN1bHQucGVyY2VudCA9ICclJzsKLSAgICAgICAgcmVzdWx0LnBlck1pbGwgPSAnXHUyMDMwJzsKLSAgICAgICAgcmVzdWx0Lm1vbmV0YXJ5U2VwYXJhdG9yID0gJyAnOwotICAgICAgICByZXN1bHQubWludXNTaWduID0gJy0nOwotICAgICAgICByZXN1bHQuZXhwb25lbnRTZXBhcmF0b3IgPSAiZSI7Ci0gICAgICAgIHJlc3VsdC5pbmZpbml0eSA9ICJcdTIyMUUiOwotICAgICAgICByZXN1bHQuTmFOID0gIk5hTiI7Ci0gICAgICAgIC8vIEFsc28gdXNlZCBieSBDdXJyZW5jeS4KLSAgICAgICAgcmVzdWx0LmN1cnJlbmN5U3ltYm9sID0gIiQiOwotICAgICAgICByZXN1bHQuaW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sID0gIlVTRCI7Ci0KLSAgICAgICAgLy8gVXNlZCBieSBEZWNpbWFsRm9ybWF0IGFuZCBOdW1iZXJGb3JtYXQuCi0gICAgICAgIHJlc3VsdC5udW1iZXJQYXR0ZXJuID0gIiVmIjsKLSAgICAgICAgcmVzdWx0LmludGVnZXJQYXR0ZXJuID0gIiVkIjsKLSAgICAgICAgcmVzdWx0LmN1cnJlbmN5UGF0dGVybiA9ICIlcyI7Ci0gICAgICAgIHJlc3VsdC5wZXJjZW50UGF0dGVybiA9ICIlZiI7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy8uY2xhc3NwYXRoIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjMyZTA5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InJlcyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBjb21iaW5lYWNjZXNzcnVsZXM9ImZhbHNlIiBraW5kPSJzcmMiIHBhdGg9Ii9sYXlvdXRsaWJfYnJpZGdlIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InZhciIgcGF0aD0iQU5EUk9JRF9QTEFUX1NSQy9wcmVidWlsdHMvbWlzYy9jb21tb24va3htbDIva3htbDItMi4zLjAuamFyIiBzb3VyY2VwYXRoPSIvQU5EUk9JRF9QTEFUX1NSQy9kYWx2aWsvbGliY29yZS94bWwvc3JjL21haW4vamF2YSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJ2YXIiIHBhdGg9IkFORFJPSURfUExBVF9TUkMvb3V0L2hvc3QvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy90ZW1wX2xheW91dGxpYl9pbnRlcm1lZGlhdGVzL2phdmFsaWIuamFyIiBzb3VyY2VwYXRoPSIvQU5EUk9JRF9QTEFUX1NSQy9mcmFtZXdvcmtzL2Jhc2UiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQuSlVOSVRfQ09OVEFJTkVSLzMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy8ucHJvamVjdCBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMjVlZWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPmxheW91dGxpYl9icmlkZ2UtdGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9BbmRyb2lkLm1rIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGNhZGU5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLUxPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLSMgT25seSBjb21waWxlIHNvdXJjZSBqYXZhIGZpbGVzIGluIHRoaXMgbGliLgotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlciwgc3JjKQotCi1MT0NBTF9KQVZBX1JFU09VUkNFX0RJUlMgOj0gcmVzCi0KLUxPQ0FMX01PRFVMRSA6PSBsYXlvdXRsaWItdGVzdHMKLUxPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCi0KLUxPQ0FMX0pBVkFfTElCUkFSSUVTIDo9IGxheW91dGxpYiBreG1sMi0yLjMuMCBqdW5pdAotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9KQVZBX0xJQlJBUlkpCi0KLSMgQnVpbGQgYWxsIHN1Yi1kaXJlY3RvcmllcwotaW5jbHVkZSAkKGNhbGwgYWxsLW1ha2VmaWxlcy11bmRlciwkKExPQ0FMX1BBVEgpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9yZXMvY29tL2FuZHJvaWQvbGF5b3V0bGliL3Rlc3RkYXRhL2xheW91dDEueG1sIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9yZXMvY29tL2FuZHJvaWQvbGF5b3V0bGliL3Rlc3RkYXRhL2xheW91dDEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGZjOTQ3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvcmVzL2NvbS9hbmRyb2lkL2xheW91dGxpYi90ZXN0ZGF0YS9sYXlvdXQxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci0KLTwhLS0KLSBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotCWFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotPgotCTxCdXR0b24KLQkJYW5kcm9pZDppZD0iQCtpZC9ib3V0b24iCi0JICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0JICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotCSAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0JICAgIGFuZHJvaWQ6dGV4dD0iTXkgQnV0dG9uIFRleHQiCi0JICAgID4KLQkgICAgPC9CdXR0b24+Ci0JPFZpZXcKLQkJYW5kcm9pZDppZD0iQCtpZC9zdXJmYWNlIgotCSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotCSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKLQkgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIyIgotCSAgICAvPgotCTxUZXh0VmlldwotCSAgICBhbmRyb2lkOmlkPSJAK2lkL3N0YXR1cyIKLQkgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMmRpcCIKLQkgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgotCSAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ibGFjayIKLQkgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLQkgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0JICAgIGFuZHJvaWQ6bGluZXM9IjEiCi0JICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsfGNlbnRlcl9ob3Jpem9udGFsIgotCSAgICBhbmRyb2lkOnRleHQ9Ik15IFRleHRWaWV3IFRleHQiCi0JICAgIC8+Ci08L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTWF0cml4X0RlbGVnYXRlVGVzdC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9zcmMvYW5kcm9pZC9ncmFwaGljcy9NYXRyaXhfRGVsZWdhdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNGVkYWMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9zcmMvYW5kcm9pZC9ncmFwaGljcy9NYXRyaXhfRGVsZWdhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNYXRyaXhfRGVsZWdhdGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIuc2V0VXAoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBzdXBlci50ZWFyRG93bigpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RJZGVudGl0eSgpIHsKLSAgICAgICAgTWF0cml4IG0xID0gbmV3IE1hdHJpeCgpOwotCi0gICAgICAgIGFzc2VydFRydWUobTEuaXNJZGVudGl0eSgpKTsKLQotICAgICAgICBtMS5zZXRWYWx1ZXMobmV3IGZsb2F0W10geyAxLDAsMCwgMCwxLDAsIDAsMCwxIH0pOwotICAgICAgICBhc3NlcnRUcnVlKG0xLmlzSWRlbnRpdHkoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdENvcHlDb25zdHJ1Y3RvcigpIHsKLSAgICAgICAgTWF0cml4IG0xID0gbmV3IE1hdHJpeCgpOwotICAgICAgICBNYXRyaXggbTIgPSBuZXcgTWF0cml4KG0xKTsKLQotICAgICAgICBmbG9hdFtdIHYxID0gbmV3IGZsb2F0WzldOwotICAgICAgICBmbG9hdFtdIHYyID0gbmV3IGZsb2F0WzldOwotICAgICAgICBtMS5nZXRWYWx1ZXModjEpOwotICAgICAgICBtMi5nZXRWYWx1ZXModjIpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDk7IGkrKykgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHYxW2ldLCB2MltpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL1Rlc3REZWxlZ2F0ZXMuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvVGVzdERlbGVnYXRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzIxOGRiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvVGVzdERlbGVnYXRlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2U7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5DcmVhdGVJbmZvOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogVGVzdHMgdGhhdCBuYXRpdmUgZGVsZWdhdGUgY2xhc3NlcyBpbXBsZW1lbnQgYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLgotICoKLSAqIFRoaXMgbG9va3MgYXQge0BsaW5rIENyZWF0ZUluZm8jREVMRUdBVEVfQ0xBU1NfTkFUSVZFU30gdG8gZ2V0IHRoZSBsaXN0IG9mIGNsYXNzZXMgdGhhdAotICogaGF2ZSB0aGVpciBuYXRpdmUgbWV0aG9kcyByZWltcGxlbWVudGVkIHRocm91Z2ggYSBkZWxlZ2F0ZS4KLSAqCi0gKiBTaW5jZSB0aGUgcmVpbXBsZW1lbnRlZCBtZXRob2RzIGFyZSBub3QgbmF0aXZlIGFueW1vcmUsIHdlIGxvb2sgZm9yIHRoZSBhbm5vdGF0aW9uCi0gKiB7QGxpbmsgTGF5b3V0bGliRGVsZWdhdGV9LCBhbmQgbG9vayBmb3IgYSBtYXRjaGluZyBtZXRob2QgaW4gdGhlIGRlbGVnYXRlIChuYW1lZCB0aGUgc2FtZQotICogYXMgdGhlIG1vZGlmaWVkIGNsYXNzIHdpdGggX0RlbGVnYXRlIGFkZGVkIGFzIGEgc3VmZml4KS4KLSAqIElmIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kIGlzIG5vdCBzdGF0aWMsIHRoZW4gd2UgbWFrZSBzdXJlIHRoZSBkZWxlZ2F0ZSBtZXRob2QgYWxzbwotICogaW5jbHVkZSB0aGUgb3JpZ2luYWwgY2xhc3MgYXMgZmlyc3QgcGFyYW1ldGVyICh0byBhY2Nlc3MgInRoaXMiKS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RGVsZWdhdGVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0gICAgcHVibGljIHZvaWQgdGVzdE5hdGl2ZURlbGVnYXRlcygpIHsKLQotICAgICAgICBmaW5hbCBTdHJpbmdbXSBjbGFzc2VzID0gQ3JlYXRlSW5mby5ERUxFR0FURV9DTEFTU19OQVRJVkVTOwotICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBjbGFzc2VzLmxlbmd0aDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgY291bnQgOyBpKyspIHsKLSAgICAgICAgICAgIGxvYWRBbmRDb21wYXJlQ2xhc3NlcyhjbGFzc2VzW2ldLCBjbGFzc2VzW2ldICsgIl9EZWxlZ2F0ZSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdE1ldGhvZERlbGVnYXRlcygpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nW10gbWV0aG9kcyA9IENyZWF0ZUluZm8uREVMRUdBVEVfTUVUSE9EUzsKLSAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbWV0aG9kcy5sZW5ndGg7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGNvdW50IDsgaSsrKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZHNbaV07Ci0KLSAgICAgICAgICAgIC8vIGV4dHJhY3QgdGhlIGNsYXNzIG5hbWUKLSAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBtZXRob2ROYW1lLnN1YnN0cmluZygwLCBtZXRob2ROYW1lLmluZGV4T2YoJyMnKSk7Ci0gICAgICAgICAgICBTdHJpbmcgdGFyZ2V0Q2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UoJyQnLCAnXycpICsgIl9EZWxlZ2F0ZSI7Ci0KLSAgICAgICAgICAgIGxvYWRBbmRDb21wYXJlQ2xhc3NlcyhjbGFzc05hbWUsIHRhcmdldENsYXNzTmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbG9hZEFuZENvbXBhcmVDbGFzc2VzKFN0cmluZyBvcmlnaW5hbENsYXNzTmFtZSwgU3RyaW5nIGRlbGVnYXRlQ2xhc3NOYW1lKSB7Ci0gICAgICAgIC8vIGxvYWQgdGhlIGNsYXNzZXMKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gVGVzdERlbGVnYXRlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOwotICAgICAgICAgICAgQ2xhc3M8Pz4gb3JpZ2luYWxDbGFzcyA9IGNsYXNzTG9hZGVyLmxvYWRDbGFzcyhvcmlnaW5hbENsYXNzTmFtZSk7Ci0gICAgICAgICAgICBDbGFzczw/PiBkZWxlZ2F0ZUNsYXNzID0gY2xhc3NMb2FkZXIubG9hZENsYXNzKGRlbGVnYXRlQ2xhc3NOYW1lKTsKLQotICAgICAgICAgICAgY29tcGFyZShvcmlnaW5hbENsYXNzLCBkZWxlZ2F0ZUNsYXNzKTsKLSAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgIGZhaWwoIkZhaWxlZCB0byBsb2FkIGNsYXNzOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gbG9hZCBjbGFzczogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjb21wYXJlKENsYXNzPD8+IG9yaWdpbmFsQ2xhc3MsIENsYXNzPD8+IGRlbGVnYXRlQ2xhc3MpIHRocm93cyBTZWN1cml0eUV4Y2VwdGlvbiB7Ci0gICAgICAgIExpc3Q8TWV0aG9kPiBjaGVja2VkRGVsZWdhdGVNZXRob2RzID0gbmV3IEFycmF5TGlzdDxNZXRob2Q+KCk7Ci0KLSAgICAgICAgLy8gbG9vcCBvbiB0aGUgbWV0aG9kcyBvZiB0aGUgb3JpZ2luYWwgY2xhc3MsIGFuZCBmb3IgdGhlIG9uZXMgdGhhdCBhcmUgYW5ub3RhdGVkCi0gICAgICAgIC8vIHdpdGggQExheW91dGxpYkRlbGVnYXRlLCBsb29rIGZvciBhIG1hdGNoaW5nIG1ldGhvZCBpbiB0aGUgZGVsZWdhdGUgY2xhc3MuCi0gICAgICAgIC8vIFRoZSBhbm5vdGF0aW9uIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgYnkgbGF5b3V0bGliX2NyZWF0ZSB3aGVuIGl0IHJlcGxhY2UgYSBtZXRob2QKLSAgICAgICAgLy8gYnkgYSBjYWxsIHRvIGEgZGVsZWdhdGUKLSAgICAgICAgTWV0aG9kW10gb3JpZ2luYWxNZXRob2RzID0gb3JpZ2luYWxDbGFzcy5nZXREZWNsYXJlZE1ldGhvZHMoKTsKLSAgICAgICAgZm9yIChNZXRob2Qgb3JpZ2luYWxNZXRob2QgOiBvcmlnaW5hbE1ldGhvZHMpIHsKLSAgICAgICAgICAgIC8vIGxvb2sgZm9yIG1ldGhvZHMgdGhhdCBhcmUgZGVsZWdhdGVkOiB0aGV5IGhhdmUgdGhlIExheW91dGxpYkRlbGVnYXRlIGFubm90YXRpb24KLSAgICAgICAgICAgIGlmIChvcmlnaW5hbE1ldGhvZC5nZXRBbm5vdGF0aW9uKExheW91dGxpYkRlbGVnYXRlLmNsYXNzKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgc2lnbmF0dXJlLgotICAgICAgICAgICAgQ2xhc3M8Pz5bXSBwYXJhbWV0ZXJzID0gb3JpZ2luYWxNZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQotICAgICAgICAgICAgLy8gaWYgdGhlIG1ldGhvZCBpcyBub3Qgc3RhdGljLCB0aGVuIHRoZSBjbGFzcyBpcyBhZGRlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyCi0gICAgICAgICAgICAvLyAoZm9yICJ0aGlzIikKLSAgICAgICAgICAgIGlmICgob3JpZ2luYWxNZXRob2QuZ2V0TW9kaWZpZXJzKCkgJiBNb2RpZmllci5TVEFUSUMpID09IDApIHsKLQotICAgICAgICAgICAgICAgIENsYXNzPD8+W10gbmV3UGFyYW1ldGVycyA9IG5ldyBDbGFzczw/PltwYXJhbWV0ZXJzLmxlbmd0aCArIDFdOwotICAgICAgICAgICAgICAgIG5ld1BhcmFtZXRlcnNbMF0gPSBvcmlnaW5hbENsYXNzOwotICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkocGFyYW1ldGVycywgMCwgbmV3UGFyYW1ldGVycywgMSwgcGFyYW1ldGVycy5sZW5ndGgpOwotICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBuZXdQYXJhbWV0ZXJzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpZiB0aGUgb3JpZ2luYWwgY2xhc3MgaXMgYW4gaW5uZXIgY2xhc3MgdGhhdCdzIG5vdCBzdGF0aWMsIHRoZW4KLSAgICAgICAgICAgIC8vIHdlIGFkZCB0aGlzIG9uIHRoZSBlbmNsb3NpbmcgY2xhc3MgYXQgdGhlIGJlZ2lubmluZwotICAgICAgICAgICAgaWYgKG9yaWdpbmFsQ2xhc3MuZ2V0RW5jbG9zaW5nQ2xhc3MoKSAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgIChvcmlnaW5hbENsYXNzLmdldE1vZGlmaWVycygpICYgTW9kaWZpZXIuU1RBVElDKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgQ2xhc3M8Pz5bXSBuZXdQYXJhbWV0ZXJzID0gbmV3IENsYXNzPD8+W3BhcmFtZXRlcnMubGVuZ3RoICsgMV07Ci0gICAgICAgICAgICAgICAgbmV3UGFyYW1ldGVyc1swXSA9IG9yaWdpbmFsQ2xhc3MuZ2V0RW5jbG9zaW5nQ2xhc3MoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmFtZXRlcnMsIDAsIG5ld1BhcmFtZXRlcnMsIDEsIHBhcmFtZXRlcnMubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gbmV3UGFyYW1ldGVyczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAvLyB0cnkgdG8gbG9hZCB0aGUgbWV0aG9kIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlciB0eXBlcy4KLSAgICAgICAgICAgICAgICBNZXRob2QgZGVsZWdhdGVNZXRob2QgPSBkZWxlZ2F0ZUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKG9yaWdpbmFsTWV0aG9kLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMpOwotCi0gICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgbWV0aG9kIGhhcyB0aGUgYW5ub3RhdGlvbgotICAgICAgICAgICAgICAgIGFzc2VydE5vdE51bGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVsZWdhdGUgbWV0aG9kICUxJHMgZm9yIGNsYXNzICUyJHMgZG9lcyBub3QgaGF2ZSB0aGUgQExheW91dGxpYkRlbGVnYXRlIGFubm90YXRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZU1ldGhvZC5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsQ2xhc3MuZ2V0TmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlTWV0aG9kLmdldEFubm90YXRpb24oTGF5b3V0bGliRGVsZWdhdGUuY2xhc3MpKTsKLQotICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIG1ldGhvZCBpcyBzdGF0aWMKLSAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlbGVnYXRlIG1ldGhvZCAlMSRzIGZvciBjbGFzcyAlMiRzIGlzIG5vdCBzdGF0aWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZU1ldGhvZC5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsQ2xhc3MuZ2V0TmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChkZWxlZ2F0ZU1ldGhvZC5nZXRNb2RpZmllcnMoKSAmIE1vZGlmaWVyLlNUQVRJQykgPT0gTW9kaWZpZXIuU1RBVElDKTsKLQotICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgbWV0aG9kIGFzIGNoZWNrZWQuCi0gICAgICAgICAgICAgICAgY2hlY2tlZERlbGVnYXRlTWV0aG9kcy5hZGQoZGVsZWdhdGVNZXRob2QpOwotICAgICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGdldE1ldGhvZE5hbWUob3JpZ2luYWxNZXRob2QsIHBhcmFtZXRlcnMpOwotICAgICAgICAgICAgICAgIGZhaWwoU3RyaW5nLmZvcm1hdCgiTWlzc2luZyAlMSRzLiUyJHMiLCBkZWxlZ2F0ZUNsYXNzLmdldE5hbWUoKSwgbmFtZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbG9vayBmb3IgZGVhZCAoZGVsZWdhdGUpIGNvZGUuCi0gICAgICAgIC8vIFRoaXMgbG9va3MgZm9yIGFsbCBtZXRob2RzIGluIHRoZSBkZWxlZ2F0ZSBjbGFzcywgYW5kIGlmIHRoZXkgaGF2ZSB0aGUKLSAgICAgICAgLy8gQExheW91dGxpYkRlbGVnYXRlIGFubm90YXRpb24sIG1ha2Ugc3VyZSB0aGV5IGhhdmUgYmVlbiBwcmV2aW91c2x5IGZvdW5kIGFzIGEKLSAgICAgICAgLy8gbWF0Y2ggZm9yIGEgbWV0aG9kIGluIHRoZSBvcmlnaW5hbCBjbGFzcy4KLSAgICAgICAgLy8gSWYgbm90LCB0aGlzIG1lYW5zIHRoZSBtZXRob2QgaXMgYSBkZWxlZ2F0ZSBmb3IgYSBtZXRob2QgdGhhdCBlaXRoZXIgZG9lc24ndCBleGlzdAotICAgICAgICAvLyBhbnltb3JlIG9yIGlzIG5vdCBkZWxlZ2F0ZWQgYW55bW9yZS4KLSAgICAgICAgTWV0aG9kW10gZGVsZWdhdGVNZXRob2RzID0gZGVsZWdhdGVDbGFzcy5nZXREZWNsYXJlZE1ldGhvZHMoKTsKLSAgICAgICAgZm9yIChNZXRob2QgZGVsZWdhdGVNZXRob2QgOiBkZWxlZ2F0ZU1ldGhvZHMpIHsKLSAgICAgICAgICAgIC8vIGxvb2sgZm9yIG1ldGhvZHMgdGhhdCBhcmUgZGVsZWdhdGVzOiB0aGV5IGhhdmUgdGhlIExheW91dGxpYkRlbGVnYXRlIGFubm90YXRpb24KLSAgICAgICAgICAgIGlmIChkZWxlZ2F0ZU1ldGhvZC5nZXRBbm5vdGF0aW9uKExheW91dGxpYkRlbGVnYXRlLmNsYXNzKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFzc2VydFRydWUoCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlbGVnYXRlIG1ldGhvZCAlMSRzLiUyJHMgaXMgbm90IHVzZWQgYW55bW9yZSBhbmQgbXVzdCBiZSByZW1vdmVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZUNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRNZXRob2ROYW1lKGRlbGVnYXRlTWV0aG9kKSksCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWREZWxlZ2F0ZU1ldGhvZHMuY29udGFpbnMoZGVsZWdhdGVNZXRob2QpKTsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWV0aG9kTmFtZShNZXRob2QgbWV0aG9kKSB7Ci0gICAgICAgIHJldHVybiBnZXRNZXRob2ROYW1lKG1ldGhvZCwgbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIGdldE1ldGhvZE5hbWUoTWV0aG9kIG1ldGhvZCwgQ2xhc3M8Pz5bXSBwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIC8vIGNvbXB1dGUgYSBmdWxsIGNsYXNzIG5hbWUgdGhhdCdzIGxvbmcgYnV0IG5vdCB0b28gbG9uZy4KLSAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKG1ldGhvZC5nZXROYW1lKCkgKyAiKCIpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhcmFtZXRlcnMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgIENsYXNzPD8+IHRoZUNsYXNzID0gcGFyYW1ldGVyc1tqXTsKLSAgICAgICAgICAgIHNiLmFwcGVuZCh0aGVDbGFzcy5nZXROYW1lKCkpOwotICAgICAgICAgICAgaW50IGRpbWVuc2lvbnMgPSAwOwotICAgICAgICAgICAgd2hpbGUgKHRoZUNsYXNzLmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIGRpbWVuc2lvbnMrKzsKLSAgICAgICAgICAgICAgICB0aGVDbGFzcyA9IHRoZUNsYXNzLmdldENvbXBvbmVudFR5cGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGltZW5zaW9uczsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJbXSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGogPCAocGFyYW1ldGVycy5sZW5ndGggLSAxKSkgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNiLmFwcGVuZCgiKSIpOwotCi0gICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VYbWxCbG9ja1BhcnNlclRlc3QuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VYbWxCbG9ja1BhcnNlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY1YTAwOC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlWG1sQmxvY2tQYXJzZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlBhcnNlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBCcmlkZ2VYbWxCbG9ja1BhcnNlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHN1cGVyLnRlYXJEb3duKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdFhtbEJsb2NrUGFyc2VyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIgPSBQYXJzZXJGYWN0b3J5LmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oIi9jb20vYW5kcm9pZC9sYXlvdXRsaWIvdGVzdGRhdGEvbGF5b3V0MS54bWwiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsYXlvdXQxLnhtbCIpOwotCi0gICAgICAgIHBhcnNlciA9IG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcihwYXJzZXIsIG51bGwsIGZhbHNlIC8qIHBsYXRmb3JtUmVzb3VyY2VGbGFnICovKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoWG1sUHVsbFBhcnNlci5TVEFSVF9ET0NVTUVOVCwgcGFyc2VyLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHLCBwYXJzZXIubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJMaW5lYXJMYXlvdXQiLCBwYXJzZXIuZ2V0TmFtZSgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoWG1sUHVsbFBhcnNlci5URVhULCBwYXJzZXIubmV4dCgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoWG1sUHVsbFBhcnNlci5TVEFSVF9UQUcsIHBhcnNlci5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkJ1dHRvbiIsIHBhcnNlci5nZXROYW1lKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoWG1sUHVsbFBhcnNlci5URVhULCBwYXJzZXIubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuRU5EX1RBRywgcGFyc2VyLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuVEVYVCwgcGFyc2VyLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHLCBwYXJzZXIubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJWaWV3IiwgcGFyc2VyLmdldE5hbWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhYbWxQdWxsUGFyc2VyLkVORF9UQUcsIHBhcnNlci5uZXh0KCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyhYbWxQdWxsUGFyc2VyLlRFWFQsIHBhcnNlci5uZXh0KCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyhYbWxQdWxsUGFyc2VyLlNUQVJUX1RBRywgcGFyc2VyLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiVGV4dFZpZXciLCBwYXJzZXIuZ2V0TmFtZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuRU5EX1RBRywgcGFyc2VyLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuVEVYVCwgcGFyc2VyLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuRU5EX1RBRywgcGFyc2VyLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhYbWxQdWxsUGFyc2VyLkVORF9ET0NVTUVOVCwgcGFyc2VyLm5leHQoKSk7Ci0gICAgfQotCi0gICAgLy8tLS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIFF1aWNrJ24nZGlydHkgZGVidWcgaGVscGVyIHRoYXQgZHVtcHMgYW4gWE1MIHN0cnVjdHVyZSB0byBzdGRvdXQuCi0gICAgICovCi0gICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCi0gICAgcHJpdmF0ZSB2b2lkIGR1bXAoTm9kZSBub2RlLCBTdHJpbmcgcHJlZml4KSB7Ci0gICAgICAgIE5vZGUgbjsKLQotICAgICAgICBTdHJpbmdbXSB0eXBlcyA9IHsKLSAgICAgICAgICAgICAgICAidW5rbm93biIsCi0gICAgICAgICAgICAgICAgIkVMRU1FTlRfTk9ERSIsCi0gICAgICAgICAgICAgICAgIkFUVFJJQlVURV9OT0RFIiwKLSAgICAgICAgICAgICAgICAiVEVYVF9OT0RFIiwKLSAgICAgICAgICAgICAgICAiQ0RBVEFfU0VDVElPTl9OT0RFIiwKLSAgICAgICAgICAgICAgICAiRU5USVRZX1JFRkVSRU5DRV9OT0RFIiwKLSAgICAgICAgICAgICAgICAiRU5USVRZX05PREUiLAotICAgICAgICAgICAgICAgICJQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUiLAotICAgICAgICAgICAgICAgICJDT01NRU5UX05PREUiLAotICAgICAgICAgICAgICAgICJET0NVTUVOVF9OT0RFIiwKLSAgICAgICAgICAgICAgICAiRE9DVU1FTlRfVFlQRV9OT0RFIiwKLSAgICAgICAgICAgICAgICAiRE9DVU1FTlRfRlJBR01FTlRfTk9ERSIsCi0gICAgICAgICAgICAgICAgIk5PVEFUSU9OX05PREUiCi0gICAgICAgIH07Ci0KLSAgICAgICAgU3RyaW5nIHMgPSBTdHJpbmcuZm9ybWF0KCIlczwlcz4gJXMgJXMiLAotICAgICAgICAgICAgICAgIHByZWZpeCwKLSAgICAgICAgICAgICAgICB0eXBlc1tub2RlLmdldE5vZGVUeXBlKCldLAotICAgICAgICAgICAgICAgIG5vZGUuZ2V0Tm9kZU5hbWUoKSwKLSAgICAgICAgICAgICAgICBub2RlLmdldE5vZGVWYWx1ZSgpID09IG51bGwgPyAiIiA6IG5vZGUuZ2V0Tm9kZVZhbHVlKCkudHJpbSgpKTsKLQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7Ci0KLSAgICAgICAgbiA9IG5vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICBpZiAobiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBkdW1wKG4sIHByZWZpeCArICItICIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbiA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKG4gIT0gbnVsbCkgewotICAgICAgICAgICAgZHVtcChuLCBwcmVmaXgpOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvLmNsYXNzcGF0aCBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q4YmIwZC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBleGNsdWRpbmc9Im1vY2tfZGF0YS8iIGtpbmQ9InNyYyIgcGF0aD0idGVzdHMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQuSlVOSVRfQ09OVEFJTkVSLzQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0idmFyIiBwYXRoPSJBTkRST0lEX1NSQy9wcmVidWlsdHMvdG9vbHMvY29tbW9uL2FzbS10b29scy9hc20tNC4wLmphciIgc291cmNlcGF0aD0iL0FORFJPSURfUExBVC9wcmVidWlsdHMvdG9vbHMvY29tbW9uL2FzbS10b29scy9zcmMtNC4wLnppcCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5wcm9qZWN0IGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwMGQxNy4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+bGF5b3V0bGliX2NyZWF0ZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5zZXR0aW5ncy9SRUFETUUudHh0IGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS8uc2V0dGluZ3MvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEyMGIyMC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5zZXR0aW5ncy9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1Db3B5IHRoaXMgaW4gZWNsaXBzZSBwcm9qZWN0IGFzIGEgLnNldHRpbmdzIGZvbGRlciBhdCB0aGUgcm9vdC4KLVRoaXMgZW5zdXJlIHByb3BlciBjb21waWxhdGlvbiBjb21wbGlhbmNlIGFuZCB3YXJuaW5nL2Vycm9yIGxldmVscy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzgxYTBlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubm9ubnVsbD1jb20uYW5kcm9pZC5hbm5vdGF0aW9ucy5Ob25OdWxsCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm5vbm51bGxieWRlZmF1bHQ9Y29tLmFuZHJvaWQuYW5ub3RhdGlvbnMuTm9uTnVsbEJ5RGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5ub25udWxsaXNkZWZhdWx0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm51bGxhYmxlPWNvbS5hbmRyb2lkLmFubm90YXRpb25zLk51bGxhYmxlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm51bGxhbmFseXNpcz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS42Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZXhwbGljaXRseUNsb3NlZEF1dG9DbG9zZWFibGU9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jbHVkZU51bGxJbmZvRnJvbUFzc2VydHM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0hhc2hDb2RlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uRm9ySW50ZXJmYWNlTWV0aG9kSW1wbGVtZW50YXRpb249ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxTcGVjSW5zdWZmaWNpZW50SW5mbz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxTcGVjVmlvbGF0aW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxTcGVjVmlvbGF0aW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbGx5VW5jbG9zZWRDbG9zZWFibGU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbEFubm90YXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFNwZWNpZmljYXRpb25PZlR5cGVBcmd1bWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVwb3J0TWV0aG9kQ2FuQmVQb3RlbnRpYWxseVN0YXRpYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVwb3J0TWV0aG9kQ2FuQmVTdGF0aWM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzT3B0aW9uYWxFcnJvcnM9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuYXZvaWRhYmxlR2VuZXJpY1R5cGVQcm9ibGVtcz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jbG9zZWRDbG9zZWFibGU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkT2JqZWN0QWxsb2NhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVySW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9BbmRyb2lkLm1rIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmQ0OGFiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi1MT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlcixzcmMpCi0KLUxPQ0FMX0pBUl9NQU5JRkVTVCA6PSBtYW5pZmVzdC50eHQKLUxPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyA6PSBcCi0JYXNtLTQuMAotCi1MT0NBTF9NT0RVTEUgOj0gbGF5b3V0bGliX2NyZWF0ZQotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9KQVZBX0xJQlJBUlkpCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUkVBRE1FLnR4dCBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYjE4NS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0KLS0gRGVzY3JpcHRpb24gLQotLS0tLS0tLS0tLS0tLS0tCi0KLUxheW91dGxpYl9jcmVhdGUgZ2VuZXJhdGVzIGEgSkFSIGxpYnJhcnkgdXNlZCBieSB0aGUgRWNsaXBzZSBncmFwaGljYWwgbGF5b3V0IGVkaXRvcgotdG8gcGVyZm9ybSBsYXlvdXQuCi0KLQotLSBVc2FnZSAtCi0tLS0tLS0tLS0KLQotIC4vbGF5b3V0bGliX2NyZWF0ZSBwYXRoL3RvL2FuZHJvaWQuamFyIGRlc3RpbmF0aW9uLmphcgotCi0KLS0gRGVzaWduIE92ZXJ2aWV3IC0KLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTGF5b3V0bGliX2NyZWF0ZSB1c2VzIHRoZSAiYW5kcm9pZC5qYXIiIGNvbnRhaW5pbmcgYWxsIHRoZSBKYXZhIGNvZGUgdXNlZCBieSBBbmRyb2lkCi1hcyBnZW5lcmF0ZWQgYnkgdGhlIEFuZHJvaWQgYnVpbGQsIHJpZ2h0IGJlZm9yZSB0aGUgY2xhc3NlcyBhcmUgY29udmVydGVkIHRvIGEgREVYIGZvcm1hdC4KLQotVGhlIEFuZHJvaWQgSkFSIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgaW4gRWNsaXBzZToKLS0gaXQgY29udGFpbnMgcmVmZXJlbmNlcyB0byBuYXRpdmUgY29kZSAod2hpY2ggd2Ugd2FudCB0byBhdm9pZCBpbiBFY2xpcHNlKSwKLS0gc29tZSBjbGFzc2VzIG5lZWQgdG8gYmUgb3ZlcnJpZGRlbiwgZm9yIGV4YW1wbGUgYWxsIHRoZSBkcmF3aW5nIGNvZGUgdGhhdCBpcwotICByZXBsYWNlZCBieSBKYXZhIDJEIGNhbGxzIGluIEVjbGlwc2UuCi0tIHNvbWUgb2YgdGhlIGNsYXNzZXMgdGhhdCBuZWVkIHRvIGJlIGNoYW5nZWQgYXJlIGZpbmFsIGFuZC9vciB3ZSBuZWVkIGFjY2VzcwotICB0byB0aGVpciBwcml2YXRlIGludGVybmFsIHN0YXRlLgotCi1Db25zZXF1ZW50bHkgdGhpcyB0b29sOgotLSBwYXJzZXMgdGhlIGlucHV0IEpBUiwKLS0gbW9kaWZpZXMgc29tZSBvZiB0aGUgY2xhc3NlcyBkaXJlY3RseSB1c2luZyBzb21lIGJ5dGVjb2RlIG1hbmlwdWxhdGlvbiwKLS0gZmlsdGVycyBzb21lIHBhY2thZ2VzIGFuZCByZW1vdmVzIHRob3NlIHdlIGRvbid0IHdhbnQgaW4gdGhlIG91dHB1dCBKQVIsCi0tIGluamVjdHMgc29tZSBuZXcgY2xhc3NlcywKLS0gZ2VuZXJhdGVzIGEgbW9kaWZpZWQgSkFSIGZpbGUgdGhhdCBpcyBzdWl0YWJsZSBmb3IgdGhlIEFuZHJvaWQgcGx1Z2luCi0gIGZvciBFY2xpcHNlIHRvIHBlcmZvcm0gcmVuZGVyaW5nLgotCi1UaGUgQVNNIGxpYnJhcnkgaXMgdXNlZCB0byBkbyB0aGUgYnl0ZWNvZGUgbW9kaWZpY2F0aW9uIHVzaW5nIGl0cyB2aXNpdG9yIHBhdHRlcm4gQVBJLgotCi1UaGUgbGF5b3V0bGliX2NyZWF0ZSBpcyAqTk9UKiBnZW5lcmljLiBUaGVyZSBpcyBubyBjb25maWd1cmF0aW9uIGZpbGUuIEluc3RlYWQgYWxsIHRoZQotY29uZmlndXJhdGlvbiBpcyBkb25lIGluIHRoZSBtYWluKCkgbWV0aG9kIGFuZCB0aGUgQ3JlYXRlSW5mbyBzdHJ1Y3R1cmUgaXMgZXhwZWN0ZWQgdG8KLWNoYW5nZSB3aXRoIHRoZSBBbmRyb2lkIHBsYXRmb3JtIGFzIG5ldyBjbGFzc2VzIGFyZSBhZGRlZCwgY2hhbmdlZCBvciByZW1vdmVkLgotCi1UaGUgcmVzdWx0aW5nIEpBUiBpcyB1c2VkIGJ5IGxheW91dGxpYl9icmlkZ2UgKGEuay5hLiAidGhlIGJyaWRnZSIpLCBhbHNvIHBhcnQgb2YgdGhlCi1wbGF0Zm9ybSwgdGhhdCBwcm92aWRlcyBhbGwgdGhlIG5lY2Vzc2FyeSBtaXNzaW5nIGltcGxlbWVudGF0aW9uIGZvciByZW5kZXJpbmcgZ3JhcGhpY3MKLWluIEVjbGlwc2UuCi0KLQotCi0tIEltcGxlbWVudGF0aW9uIE5vdGVzIC0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgdG9vbCB3b3JrcyBpbiB0d28gcGhhc2VzOgotLSBmaXJzdCBhbmFseXplIHRoZSBpbnB1dCBqYXIgKEFzbUFuYWx5emVyIGNsYXNzKQotLSB0aGVuIGdlbmVyYXRlIHRoZSBvdXRwdXQgamFyIChBc21HZW5lcmF0b3IgY2xhc3MpLAotCi0KLS0gQW5hbHl6ZXIKLS0tLS0tLS0tLS0KLQotVGhlIGdvYWwgb2YgdGhlIGFuYWx5emVyIGlzIHRvIGNyZWF0ZSBhIGdyYXBoIG9mIGFsbCB0aGUgY2xhc3NlcyBmcm9tIHRoZSBpbnB1dCBKQVIKLXdpdGggdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCB0aGVuIG9ubHkga2VlcCB0aGUgb25lcyB3ZSB3YW50LgotCi1UbyBkbyB0aGF0LCB0aGUgYW5hbHl6ZXIgaXMgY3JlYXRlZCB3aXRoIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgdG8ga2VlcCAtLSBldmVyeXRoaW5nCi10aGF0IGRlcml2ZXMgZnJvbSB0aGVzZSBpcyBrZXB0LiBDdXJyZW50bHkgdGhlIG9uZSBzdWNoIGNsYXNzIGlzIGFuZHJvaWQudmlldy5WaWV3Ogotc2luY2Ugd2Ugd2FudCB0byByZW5kZXIgbGF5b3V0cywgYW55dGhpbmcgdGhhdCBpcyBzb3J0IG9mIGEgdmlldyBuZWVkcyB0byBiZSBrZXB0LgotCi1UaGUgYW5hbHl6ZXIgaXMgYWxzbyBnaXZlbiBhIGxpc3Qgb2YgY2xhc3MgbmFtZXMgdG8ga2VlcCBpbiB0aGUgb3V0cHV0LgotVGhpcyBpcyBkb25lIHVzaW5nIHNoZWxsLWxpa2UgZ2xvYiBwYXR0ZXJucyB0aGF0IGZpbHRlciBvbiB0aGUgZnVsbHktcXVhbGlmaWVkCi1jbGFzcyBuYW1lcywgZm9yIGV4YW1wbGUgImFuZHJvaWQuKi5SKioiICgiKiIgZG9lcyBub3QgbWF0Y2hlcyBkb3RzIHdoaWxzdCAiKioiIGRvZXMsCi1hbmQgIi4iIGFuZCAiJCIgYXJlIGludGVycHJldGVkIGFzLWlzKS4KLUluIHByYWN0aWNlIHdlIGFsbW9zdCBidXQgbm90IHF1aXRlIHJlcXVlc3QgdGhlIGluY2x1c2lvbiBvZiBmdWxsIHBhY2thZ2VzLgotCi1UaGUgYW5hbHl6ZXIgaXMgYWxzbyBnaXZlbiBhIGxpc3Qgb2YgY2xhc3NlcyB0byBleGNsdWRlLiBBIGZha2UgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UKLWNsYXNzZXMgaXMgaW5qZWN0ZWQgYnkgdGhlIEdlbmVyYXRvci4KLQotV2l0aCB0aGlzIGluZm9ybWF0aW9uLCB0aGUgYW5hbHl6ZXIgcGFyc2VzIHRoZSBpbnB1dCB6aXAgdG8gZmluZCBhbGwgdGhlIGNsYXNzZXMuCi1BbGwgY2xhc3NlcyBkZXJpdmluZyBmcm9tIHRoZSByZXF1ZXN0ZWQgYmFzZXMgY2xhc3NlcyBhcmUga2VwdC4KLUFsbCBjbGFzc2VzIHdoaWNoIG5hbWUgbWF0Y2hlZCB0aGUgZ2xvYiBwYXR0ZXJuIGFyZSBrZXB0LgotVGhlIGFuYWx5c2lzIHRoZW4gZmluZHMgYWxsIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGNsYXNzZXMgdGhhdCBhcmUgdG8gYmUga2VwdAotdXNpbmcgYW4gQVNNIHZpc2l0b3Igb24gdGhlIGNsYXNzLCB0aGUgZmllbGQgdHlwZXMsIHRoZSBtZXRob2QgdHlwZXMgYW5kIGFubm90YXRpb25zIHR5cGVzLgotQ2xhc3NlcyB0aGF0IGJlbG9uZyB0byB0aGUgY3VycmVudCBKUkUgYXJlIGV4Y2x1ZGVkLgotCi1UaGUgb3V0cHV0IG9mIHRoZSBhbmFseXplciBpcyBhIHNldCBvZiBBU00gQ2xhc3NSZWFkZXIgaW5zdGFuY2VzIHdoaWNoIGFyZSB0aGVuCi1mZWQgdG8gdGhlIGdlbmVyYXRvci4KLQotCi0tIEdlbmVyYXRvcgotLS0tLS0tLS0tLS0KLQotVGhlIGdlbmVyYXRvciBpcyBjb25zdHJ1Y3RlZCBmcm9tIGEgQ3JlYXRlSW5mbyBzdHJ1Y3QgdGhhdCBhY3RzIGFzIGEgY29uZmlnIGZpbGUKLWFuZCBsaXN0czoKLS0gdGhlIGNsYXNzZXMgdG8gaW5qZWN0IGluIHRoZSBvdXRwdXQgSkFSIC0tIHRoZXNlIGNsYXNzZXMgYXJlIGRpcmVjdGx5IGltcGxlbWVudGVkCi0gIGluIGxheW91dGxpYl9jcmVhdGUgYW5kIHdpbGwgYmUgdXNlZCB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgcmVuZGVyZXIgaW4gRWNsaXBzZS4KLS0gc3BlY2lmaWMgbWV0aG9kcyB0byBvdmVycmlkZSAoc2VlIG1ldGhvZCBzdHVicyBkZXRhaWxzIGJlbG93KS4KLS0gc3BlY2lmaWMgbWV0aG9kcyBmb3Igd2hpY2ggdG8gZGVsZWdhdGUgY2FsbHMuCi0tIHNwZWNpZmljIG1ldGhvZHMgdG8gcmVtb3ZlIGJhc2VkIG9uIHRoZWlyIHJldHVybiB0eXBlLgotLSBzcGVjaWZpYyBjbGFzc2VzIHRvIHJlbmFtZS4KLS0gc3BlY2lmaWMgY2xhc3NlcyB0byByZWZhY3Rvci4KLQotRWFjaCBvZiB0aGVzZSBhcmUgc3BlY2lmaWMgc3RyYXRlZ2llcyB3ZSB1c2UgdG8gYmUgYWJsZSB0byBtb2RpZnkgdGhlIEFuZHJvaWQgY29kZQotdG8gZml0IHdpdGhpbiB0aGUgRWNsaXBzZSByZW5kZXJlci4gVGhlc2Ugc3RyYXRlZ2llcyBhcmUgZXhwbGFpbmVkIGJlb3cuCi0KLVRoZSBjb3JlIG1ldGhvZCBvZiB0aGUgZ2VuZXJhdG9yIGlzIHRyYW5zZm9ybSgpOiBpdCB0YWtlcyBhbiBpbnB1dCBBU00gQ2xhc3NSZWFkZXIKLWFuZCBtb2RpZmllcyBpdCB0byBwcm9kdWNlIGEgYnl0ZSBhcnJheSBzdWl0YWJsZSBmb3IgdGhlIGZpbmFsIEpBUiBmaWxlLgotCi1UaGUgZmlyc3Qgc3RlcCBvZiB0aGUgdHJhbnNmb3JtYXRpb24gaXMgdG8gaW1wbGVtZW50IHRoZSBtZXRob2QgZGVsZWdhdGVzLgotCi1UaGUgVHJhbnNmb3JtQ2xhc3NBZGFwdGVyIGlzIHRoZW4gdXNlZCB0byBwcm9jZXNzIHRoZSBwb3RlbnRpYWxseSByZW5hbWVkIGNsYXNzLgotQWxsIHByb3RlY3RlZCBvciBwcml2YXRlIGNsYXNzZXMgYXJlIG1hcmtldCBhcyBwdWJsaWMuCi1BbGwgY2xhc3NlcyBhcmUgbWFkZSBub24tZmluYWwuCi1JbnRlcmZhY2VzIGFyZSBsZWZ0IGFzLWlzLgotCi1JZiBhIG1ldGhvZCBoYXMgYSByZXR1cm4gdHlwZSB0aGF0IG11c3QgYmUgZXJhc2VkLCB0aGUgd2hvbGUgbWV0aG9kIGlzIHNraXBwZWQuCi1NZXRob2RzIGFyZSBhbHNvIGNoYW5nZWQgZnJvbSBwcm90ZWN0ZWQvcHJpdmF0ZSB0byBwdWJsaWMuCi1UaGUgY29kZSBvZiB0aGUgbWV0aG9kcyBpcyB0aGVuIGtlcHQgYXMtaXMsIGV4Y2VwdCBmb3IgbmF0aXZlIG1ldGhvZHMgd2hpY2ggYXJlCi1yZXBsYWNlZCBieSBhIHN0dWIuIE1ldGhvZHMgdGhhdCBhcmUgdG8gYmUgb3ZlcnJpZGRlbiBhcmUgYWxzbyByZXBsYWNlZCBieSBhIHN0dWIuCi0KLUZpbmFsbHkgZmllbGRzIGFyZSBhbHNvIHZpc2l0ZWQgYW5kIGNoYW5nZWQgZnJvbSBwcm90ZWN0ZWQvcHJpdmF0ZSB0byBwdWJsaWMuCi0KLVRoZSBuZXh0IHN0ZXAgb2YgdGhlIHRyYW5zZm9ybWF0aW9uIGlzIGNoYW5naW5nIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBpbiBjYXNlCi13ZSByZXF1ZXN0ZWQgdGhlIGNsYXNzIHRvIGJlIHJlbmFtZWQuIFRoaXMgdXNlcyB0aGUgUmVuYW1lQ2xhc3NBZGFwdGVyIHRvIGFsc28gcmVuYW1lCi1hbGwgaW5uZXIgY2xhc3NlcyBhbmQgcmVmZXJlbmNlcyBpbiBtZXRob2RzIGFuZCB0eXBlcy4gTm90ZSB0aGF0IG90aGVyIGNsYXNzZXMgYXJlCi1ub3QgdHJhbnNmb3JtZWQgYW5kIGtlZXAgcmVmZXJlbmNpbmcgdGhlIG9yaWdpbmFsIG5hbWUuCi0KLVRoZSBjbGFzcyBpcyB0aGVuIGZlZCB0byBSZWZhY3RvckNsYXNzQWRhcHRlciB3aGljaCBpcyBsaWtlIFJlbmFtZUNsYXNzQWRhcHRlciBidXQKLXVwZGF0ZXMgdGhlIHJlZmVyZW5jZXMgaW4gYWxsIGNsYXNzZXMuIFRoaXMgaXMgdXNlZCB0byB1cGRhdGUgdGhlIHJlZmVyZW5jZXMgb2YgY2xhc3NlcwotaW4gdGhlIGphdmEgcGFja2FnZSB0aGF0IHdlcmUgYWRkZWQgaW4gdGhlIERhbHZpayBWTSBidXQgYXJlIG5vdCBhIHBhcnQgb2YgdGhlIHN0YW5kYXJkCi1KVk0uIFRoZSBleGlzdGluZyBjbGFzc2VzIGFyZSBtb2RpZmllZCB0byB1cGRhdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlc2Ugbm9uLXN0YW5kYXJkCi1jbGFzc2VzLiBBbiBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgKGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5qYXZhLiopIGlzCi1pbmplY3RlZC4KLQotVGhlIENsYXNzQWRhcHRlcnMgYXJlIGNoYWluZWQgdG9nZXRoZXIgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBvdXRwdXQuIChMb29rIGF0IHNlY3Rpb24KLTIuMi43IFRyYW5zZm9ybWF0aW9uIGNoYWlucyBpbiB0aGUgYXNtIHVzZXIgZ3VpZGUsIGxpbmsgaW4gdGhlIFJlZmVyZW5jZXMuKSBUaGUgb3JkZXIgb2YKLWV4ZWN1dGlvbiBvZiB0aGVzZSBpczoKLUNsYXNzUmVhZGVyIC0+IFtEZWxlZ2F0ZUNsYXNzQWRhcHRlcl0gLT4gVHJhbnNmb3JtQ2xhc3NBZGFwdGVyIC0+IFtSZW5hbWVDbGFzc0FkYXB0ZXJdIC0+Ci1SZWZhY3RvckNsYXNzQWRhcHRlciAtPiBDbGFzc1dyaXRlcgotCi0tIE1ldGhvZCBzdHVicwotLS0tLS0tLS0tLS0tLS0KLQotQXMgaW5kaWNhdGVkIGFib3ZlLCBhbGwgbmF0aXZlIGFuZCBvdmVycmlkZGVuIG1ldGhvZHMgYXJlIHJlcGxhY2VkIGJ5IGEgc3R1Yi4KLVdlIGRvbid0IGhhdmUgdGhlIGNvZGUgdG8gcmVwbGFjZSB3aXRoIGluIGxheW91dGxpYl9jcmVhdGUuCi1JbnN0ZWFkIHRoZSBTdHViTWV0aG9kQWRhcHRlciByZXBsYWNlcyB0aGUgY29kZSBvZiB0aGUgbWV0aG9kIGJ5IGEgY2FsbCB0bwotT3ZlcnJpZGVNZXRob2QuaW52b2tlWCgpLiBXaGVuIHVzaW5nIHRoZSBmaW5hbCBKQVIsIHRoZSBicmlkZ2UgY2FuIHJlZ2lzdGVyCi1saXN0ZW5lcnMgZnJvbSB0aGVzZSBvdmVycmlkZGVuIG1ldGhvZCBjYWxscyBiYXNlZCBvbiB0aGUgbWV0aG9kIHNpZ25hdHVyZXMuCi0KLVRoZSBsaXN0ZW5lcnMgYXJlIGN1cnJlbnRseSBwcmV0dHkgYmFzaWM6IHdlIG9ubHkgcGFzcyB0aGUgc2lnbmF0dXJlIG9mIHRoZQotbWV0aG9kIGJlaW5nIGNhbGxlZCwgaXRzIGNhbGxlciBvYmplY3QgYW5kIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlCi1tZXRob2Qgd2FzIG5hdGl2ZS4gV2UgZG8gbm90IGN1cnJlbnRseSBwcm92aWRlIHRoZSBwYXJhbWV0ZXJzLiBUaGUgbGlzdGVuZXIKLWNhbiBob3dldmVyIHNwZWNpZnkgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgb3ZlcnJpZGRlbiBtZXRob2QuCi0KLVRoaXMgc3RyYXRlZ3kgaXMgbm93IG9ic29sZXRlIGFuZCByZXBsYWNlZCBieSB0aGUgbWV0aG9kIGRlbGVnYXRlcy4KLQotCi0tIFN0cmF0ZWdpZXMKLS0tLS0tLS0tLS0tLQotCi1XZSBjdXJyZW50bHkgaGF2ZSA2IHN0cmF0ZWdpZXMgdG8gZGVhbCB3aXRoIG92ZXJyaWRpbmcgdGhlIHJlbmRlcmluZyBjb2RlCi1hbmQgbWFrZSBpdCBydW4gaW4gRWNsaXBzZS4gTW9zdCBvZiB0aGVzZSBzdHJhdGVnaWVzIGFyZSBpbXBsZW1lbnRlZCBoYW5kLWluLWhhbmQKLWJ5IHRoZSBicmlkZ2UgKHdoaWNoIHJ1bnMgaW4gRWNsaXBzZSkgYW5kIHRoZSBnZW5lcmF0b3IuCi0KLQotMS0gQ2xhc3MgSW5qZWN0aW9uCi0KLVRoaXMgaXMgdGhlIGVhc2llc3Q6IHdlIGN1cnJlbnRseSBpbmplY3QgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgotLSBPdmVycmlkZU1ldGhvZCBhbmQgaXRzIGFzc29jaWF0ZWQgTWV0aG9kTGlzdGVuZXIgYW5kIE1ldGhvZEFkYXB0ZXIgYXJlIHVzZWQKLSAgdG8gaW50ZXJjZXB0IGNhbGxzIHRvIHNvbWUgc3BlY2lmaWMgbWV0aG9kcyB0aGF0IGFyZSBzdHViYmVkIG91dCBhbmQgY2hhbmdlCi0gIHRoZWlyIHJldHVybiB2YWx1ZS4KLS0gQ3JlYXRlSW5mbyBjbGFzcywgd2hpY2ggY29uZmlndXJlZCB0aGUgZ2VuZXJhdG9yLiBOb3QgdXNlZCB5ZXQsIGJ1dCBjb3VsZAotICBpbiB0aGVvcnkgaGVscCB1cyB0cmFjayB3aGF0IHRoZSBnZW5lcmF0b3IgY2hhbmdlZC4KLS0gQXV0b0Nsb3NlYWJsZSBhbmQgT2JqZWN0cyBhcmUgcGFydCBvZiBKYXZhIDcuIFRvIGVuYWJsZSB1cyB0byBzdGlsbCBydW4gb24gSmF2YSA2LCBuZXcKLSAgY2xhc3NlcyBhcmUgaW5qZWN0ZWQuIFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlc2UgY2xhc3NlcyBoYXMgYmVlbiB0YWtlbiBmcm9tCi0gIEFuZHJvaWQncyBsaWJjb3JlIChwbGF0Zm9ybS9saWJjb3JlL2x1bmkvc3JjL21haW4vamF2YS9qYXZhLy4uLikuCi0tIENoYXJzZXRzLCBJbnRlZ3JhbFRvU3RyaW5nIGFuZCBVbnNhZmVCeXRlU2VxdWVuY2UgYXJlIG5vdCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBKQVZBIFZNLgotICBUaGV5IGFyZSBhZGRlZCB0byB0aGUgRGFsdmlrIFZNIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBBbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIHZlcnkKLSAgY2xvc2UgdG8gdGhlIG9yaWdpbmFsICh3aGljaCBpcyBhdCBwbGF0Zm9ybS9saWJjb3JlL2x1bmkvc3JjL21haW4vamF2YS8uLi4pIGlzIGluamVjdGVkLgotICBTaW5jZSB0aGVzZSBjbGFzc2VlcyB3ZXJlIGluIHBhcnQgb2YgdGhlIGphdmEgcGFja2FnZSwgd2hlcmUgd2UgY2FuJ3QgaW5qZWN0IGNsYXNzZXMsCi0gIGFsbCByZWZlcmVuY2VzIHRvIHRoZXNlIGhhdmUgYmVlbiB1cGRhdGVkIChTZWUgc3RyYXRlZ3kgNC0gUmVmYWN0b3JpbmcgQ2xhc3NlcykuCi0KLQotMi0gT3ZlcnJpZGluZyBtZXRob2RzCi0KLUFzIGV4cGxhaW5lZCBlYXJsaWVyLCB0aGUgY3JlYXRvciBkb2Vzbid0IGhhdmUgYW55IHJlcGxhY2VtZW50IGNvZGUgZm9yCi1tZXRob2RzIHRvIG92ZXJyaWRlLiBJbnN0ZWFkIGl0IHJlbW92ZXMgdGhlIG9yaWdpbmFsIGNvZGUgYW5kIHJlcGxhY2VzIGl0Ci1ieSBhIGNhbGwgdG8gYSBzcGVjaWZpYyBPdmVyaWRkZU1ldGhvZC5pbnZva2VYKCkuIFRoZSBicmlkZ2UgdGhlbiByZWdpc3RlcnMKLWEgbGlzdGVuZXIgb24gdGhlIG1ldGhvZCBzaWduYXR1cmUgYW5kIGNhbiBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uLgotCi1UaGlzIHN0cmF0ZWd5IGlzIG5vdyBvYnNvbGV0ZSBhbmQgcmVwbGFjZWQgYnkgdGhlIG1ldGhvZCBkZWxlZ2F0ZXMuCi1TZWUgc3RyYXRlZ3kgNSBiZWxvdy4KLQotCi0zLSBSZW5hbWluZyBjbGFzc2VzCi0KLVRoaXMgc2ltcGx5IGNoYW5nZXMgdGhlIG5hbWUgb2YgYSBjbGFzcyBpbiBpdHMgZGVmaW5pdGlvbiwgYXMgd2VsbCBhcyBhbGwgaXRzCi1yZWZlcmVuY2VzIGluIGludGVybmFsIGlubmVyIGNsYXNzZXMgYW5kIG1ldGhvZHMuCi1DYWxscyBmcm9tIG90aGVyIGNsYXNzZXMgYXJlIG5vdCBtb2RpZmllZCAtLSB0aGV5IGtlZXAgcmVmZXJlbmNpbmcgdGhlIG9yaWdpbmFsCi1jbGFzcyBuYW1lLiBUaGlzIGFsbG93cyB0aGUgYnJpZGdlIHRvIGxpdGVyYWxseSByZXBsYWNlIGFuIGltcGxlbWVudGF0aW9uLgotCi1BbiBleGFtcGxlIHdpbGwgbWFrZSB0aGlzIGVhc2llcjogYW5kcm9pZC5ncmFwaGljcy5QYWludCBpcyB0aGUgbWFpbiBkcmF3aW5nCi1jbGFzcyB0aGF0IHdlIG5lZWQgdG8gcmVwbGFjZS4gVG8gZG8gc28sIHRoZSBnZW5lcmF0b3IgcmVuYW1lcyBQYWludCB0byBfb3JpZ2luYWxfUGFpbnQuCi1MYXRlciB0aGUgYnJpZGdlIHByb3ZpZGVzIGl0cyBvd24gcmVwbGFjZW1lbnQgdmVyc2lvbiBvZiBQYWludCB3aGljaCB3aWxsIGJlIHVzZWQKLWJ5IHRoZSByZXN0IG9mIHRoZSBBbmRyb2lkIHN0YWNrLiBUaGUgcmVwbGFjZW1lbnQgdmVyc2lvbiBvZiBQYWludCBjYW4gc3RpbGwgdXNlCi0oZWl0aGVyIGJ5IGluaGVyaXRhbmNlIG9yIGRlbGVnYXRpb24pIGFsbCB0aGUgb3JpZ2luYWwgbm9uLW5hdGl2ZSBjb2RlIG9mIF9vcmlnaW5hbF9QYWludAotaWYgaXQgc28gZGVzaXJlcy4KLQotU29tZSBvZiB0aGUgQW5kcm9pZCBjbGFzc2VzIGFyZSBiYXNpY2FsbHkgd3JhcHBlcnMgb3ZlciBuYXRpdmUgb2JqZWN0cyBhbmQgc2luY2UKLXdlIGRvbid0IGhhdmUgdGhlIG5hdGl2ZSBjb2RlIGluIEVjbGlwc2UsIHdlIG5lZWQgdG8gcHJvdmlkZSBhIGZ1bGwgYWx0ZXJuYXRlCi1pbXBsZW1lbnRhdGlvbi4gU3ViLWNsYXNzaW5nIGRvZXNuJ3Qgd29yayBhcyBzb21lIG5hdGl2ZSBtZXRob2RzIGFyZSBzdGF0aWMgYW5kCi13ZSBkb24ndCBjb250cm9sIG9iamVjdCBjcmVhdGlvbi4KLQotVGhpcyB3b24ndCByZW5hbWUvcmVwbGFjZSB0aGUgaW5uZXIgc3RhdGljIG1ldGhvZHMgb2YgYSBnaXZlbiBjbGFzcy4KLQotCi00LSBSZWZhY3RvcmluZyBjbGFzc2VzCi0KLVRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBSZW5hbWluZyBjbGFzc2VzIGV4Y2VwdCB0aGF0IGl0IGFsc28gdXBkYXRlcyB0aGUgcmVmZXJlbmNlIGluCi1hbGwgY2xhc3Nlcy4gVGhpcyBpcyBkb25lIGZvciBjbGFzc2VzIHdoaWNoIGFyZSBhZGRlZCB0byB0aGUgRGFsdmlrIFZNIGZvciBwZXJmb3JtYW5jZQotcmVhc29ucyBidXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBTdGFuZGFyZCBKYXZhIFZNLiBBbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlc2UgY2xhc3NlcwotaXMgYWxzbyBpbmplY3RlZC4KLQotCi01LSBNZXRob2QgZXJhc3VyZSBiYXNlZCBvbiByZXR1cm4gdHlwZQotCi1UaGlzIGlzIG1vc3RseSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIGJyaWRnZTogaW4gdGhlIFBhaW50IGNsYXNzCi1tZW50aW9uZWQgYWJvdmUsIHNvbWUgaW5uZXIgc3RhdGljIGNsYXNzZXMgYXJlIHVzZWQgdG8gcGFzcyBhcm91bmQKLWF0dHJpYnV0ZXMgKGUuZy4gRm9udE1ldHJpY3MsIG9yIHRoZSBTdHlsZSBlbnVtKSBhbmQgYWxsIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbgotaXMgbmF0aXZlLgotCi1JbiB0aGlzIGNhc2Ugd2UgaGF2ZSBhIHN0cmF0ZWd5IHRoYXQgdGVsbHMgdGhlIGdlbmVyYXRvciB0aGF0IGFueXRoaW5nIHJldHVybmluZywgZm9yCi1leGFtcGxlLCB0aGUgaW5uZXIgY2xhc3MgUGFpbnQkU3R5bGUgaW4gdGhlIFBhaW50IGNsYXNzIHNob3VsZCBiZSBkaXNjYXJkZWQgYW5kIHRoZQotYnJpZGdlIHdpbGwgcHJvdmlkZSBpdHMgb3duIGltcGxlbWVudGF0aW9uLgotCi0KLTYtIE1ldGhvZCBEZWxlZ2F0ZXMKLQotVGhpcyBzdHJhdGVneSBpcyB1c2VkIHRvIG92ZXJyaWRlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMuCi1HaXZlbiBhIG1ldGhvZCBTb21lQ2xhc3MuTWV0aG9kTmFtZSgpLCAxIG9yIDIgbWV0aG9kcyBhcmUgZ2VuZXJhdGVkOgotYS0gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBtZXRob2QgbmFtZWQgU29tZUNsYXNzLk1ldGhvZE5hbWVfT3JpZ2luYWwoKS4KLSAgIFRoZSBjb250ZW50IGlzIHRoZSBvcmlnaW5hbCBtZXRob2QgYXMtaXMgZnJvbSB0aGUgcmVhZGVyLgotICAgVGhpcyBzdGVwIGlzIG9taXR0ZWQgaWYgdGhlIG1ldGhvZCBpcyBuYXRpdmUsIHNpbmNlIGl0IGhhcyBubyBKYXZhIGltcGxlbWVudGF0aW9uLgotYi0gQSBicmFuZCBuZXcgaW1wbGVtZW50YXRpb24gb2YgU29tZUNsYXNzLk1ldGhvZE5hbWUoKSB3aGljaCBjYWxscyB0byBhCi0gICBub24tZXhpc3Rpbmcgc3RhdGljIG1ldGhvZCBuYW1lZCBTb21lQ2xhc3NfRGVsZWdhdGUuTWV0aG9kTmFtZSgpLgotICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgJ2RlbGVnYXRlJyBtZXRob2QgaXMgZG9uZSBpbiBsYXlvdXRsaWJfYnJpZ2RlLgotCi1UaGUgZGVsZWdhdGUgbWV0aG9kIGlzIGEgc3RhdGljIG1ldGhvZC4KLUlmIHRoZSBvcmlnaW5hbCBtZXRob2QgaXMgbm9uLXN0YXRpYywgdGhlIGRlbGVnYXRlIG1ldGhvZCByZWNlaXZlcyB0aGUgb3JpZ2luYWwgJ3RoaXMnCi1hcyBpdHMgZmlyc3QgYXJndW1lbnQuIElmIHRoZSBvcmlnaW5hbCBtZXRob2QgaXMgYW4gaW5uZXIgbm9uLXN0YXRpYyBtZXRob2QsIGl0IGFsc28KLXJlY2VpdmVzIHRoZSBpbm5lciAndGhpcycgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KLQotCi0KLS0gUmVmZXJlbmNlcyAtCi0tLS0tLS0tLS0tLS0tLQotCi0KLVRoZSBKVk0gU3BlY2lmaWNhdGlvbiAybmQgZWRpdGlvbjoKLSAgaHR0cDovL2phdmEuc3VuLmNvbS9kb2NzL2Jvb2tzL2p2bXMvc2Vjb25kX2VkaXRpb24vaHRtbC9WTVNwZWNUT0MuZG9jLmh0bWwKLQotVW5kZXJzdGFuZGluZyBieXRlY29kZToKLSAgaHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL2libS9saWJyYXJ5L2l0LWhhZ2dhcl9ieXRlY29kZS8KLQotQnl0ZWNvZGUgb3Bjb2RlIGxpc3Q6Ci0gIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmF2YV9ieXRlY29kZV9pbnN0cnVjdGlvbl9saXN0aW5ncwotCi1BU00gdXNlciBndWlkZToKLSAgaHR0cDovL2Rvd25sb2FkLmZvcmdlLm9iamVjdHdlYi5vcmcvYXNtL2FzbTQtZ3VpZGUucGRmCi0KLQotLS0KLWVuZApkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9tYW5pZmVzdC50eHQgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL21hbmlmZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM4ZTdmOS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL21hbmlmZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLU1haW4tQ2xhc3M6IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuTWFpbgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2Fubm90YXRpb25zL0xheW91dGxpYkRlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvYW5ub3RhdGlvbnMvTGF5b3V0bGliRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE0OGVhNi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvYW5ub3RhdGlvbnMvTGF5b3V0bGliRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9uczsKLQotaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7Ci0KLS8qKgotICogRGVub3RlcyBhIG1ldGhvZCB0aGF0IGhhcyBiZWVuIGNvbnZlcnRlZCB0byBhIGRlbGVnYXRlIGJ5IGxheW91dGxpYl9jcmVhdGUuCi0gKi8KLUBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCi1wdWJsaWMgQGludGVyZmFjZSBMYXlvdXRsaWJEZWxlZ2F0ZSB7Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvYW5ub3RhdGlvbnMvTnVsbGFibGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9hbm5vdGF0aW9ucy9OdWxsYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjg5YzkyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9hbm5vdGF0aW9ucy9OdWxsYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zOwotCi1pbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOwotaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKLQotLyoqCi0gKiBEZW5vdGVzIGEgcGFyYW1ldGVyIG9yIGZpZWxkIGNhbiBiZSBudWxsLgotICogPHAvPgotICogV2hlbiBkZWNvcmF0aW5nIGEgbWV0aG9kIGNhbGwgcGFyYW1ldGVyLCB0aGlzIGRlbm90ZXMgdGhlIHBhcmFtZXRlciBjYW4KLSAqIGxlZ2l0aW1hdGVseSBiZSBudWxsIGFuZCB0aGUgbWV0aG9kIHdpbGwgZ3JhY2VmdWxseSBkZWFsIHdpdGggaXQuIFR5cGljYWxseSB1c2VkCi0gKiBvbiBvcHRpb25hbCBwYXJhbWV0ZXJzLgotICogPHAvPgotICogV2hlbiBkZWNvcmF0aW5nIGEgbWV0aG9kLCB0aGlzIGRlbm90ZXMgdGhlIG1ldGhvZCBtaWdodCBsZWdpdGltYXRlbHkgcmV0dXJuIG51bGwuCi0gKiA8cC8+Ci0gKiBUaGlzIGlzIGEgbWFya2VyIGFubm90YXRpb24gYW5kIGl0IGhhcyBubyBzcGVjaWZpYyBhdHRyaWJ1dGVzLgotICovCi1AUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCi1wdWJsaWMgQGludGVyZmFjZSBOdWxsYWJsZSB7Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvYW5ub3RhdGlvbnMvVmlzaWJsZUZvclRlc3RpbmcuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9hbm5vdGF0aW9ucy9WaXNpYmxlRm9yVGVzdGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGUwMTZiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9hbm5vdGF0aW9ucy9WaXNpYmxlRm9yVGVzdGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zOwotCi1pbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOwotaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKLQotLyoqCi0gKiBEZW5vdGVzIHRoYXQgdGhlIGNsYXNzLCBtZXRob2Qgb3IgZmllbGQgaGFzIGl0cyB2aXNpYmlsaXR5IHJlbGF4ZWQgc28KLSAqIHRoYXQgdW5pdCB0ZXN0cyBjYW4gYWNjZXNzIGl0LgotICogPHAvPgotICogVGhlIDxjb2RlPnZpc2liaWxpdHk8L2NvZGU+IGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHNwZWNpZmljIHdoYXQgdGhlIG9yaWdpbmFsCi0gKiB2aXNpYmlsaXR5IHNob3VsZCBoYXZlIGJlZW4gaWYgaXQgaGFkIG5vdCBiZWVuIG1hZGUgcHVibGljIG9yIHBhY2thZ2UtcHJpdmF0ZSBmb3IgdGVzdGluZy4KLSAqIFRoZSBkZWZhdWx0IGlzIHRvIGNvbnNpZGVyIHRoZSBlbGVtZW50IHByaXZhdGUuCi0gKi8KLUBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKLXB1YmxpYyBAaW50ZXJmYWNlIFZpc2libGVGb3JUZXN0aW5nIHsKLSAgICAvKioKLSAgICAgKiBJbnRlbmRlZCB2aXNpYmlsaXR5IGlmIHRoZSBlbGVtZW50IGhhZCBub3QgYmVlbiBtYWRlIHB1YmxpYyBvciBwYWNrYWdlLXByaXZhdGUgZm9yCi0gICAgICogdGVzdGluZy4KLSAgICAgKi8KLSAgICBlbnVtIFZpc2liaWxpdHkgewotICAgICAgICAvKiogVGhlIGVsZW1lbnQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcHJvdGVjdGVkLiAqLwotICAgICAgICBQUk9URUNURUQsCi0gICAgICAgIC8qKiBUaGUgZWxlbWVudCBzaG91bGQgYmUgY29uc2lkZXJlZCBwYWNrYWdlLXByaXZhdGUuICovCi0gICAgICAgIFBBQ0tBR0UsCi0gICAgICAgIC8qKiBUaGUgZWxlbWVudCBzaG91bGQgYmUgY29uc2lkZXJlZCBwcml2YXRlLiAqLwotICAgICAgICBQUklWQVRFCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW50ZW5kZWQgdmlzaWJpbGl0eSBpZiB0aGUgZWxlbWVudCBoYWQgbm90IGJlZW4gbWFkZSBwdWJsaWMgb3IgcGFja2FnZS1wcml2YXRlIGZvciB0ZXN0aW5nLgotICAgICAqIElmIG5vdCBzcGVjaWZpZWQsIG9uZSBzaG91bGQgYXNzdW1lIHRoZSBlbGVtZW50IG9yaWdpbmFsbHkgaW50ZW5kZWQgdG8gYmUgcHJpdmF0ZS4KLSAgICAgKi8KLSAgICBWaXNpYmlsaXR5IHZpc2liaWxpdHkoKSBkZWZhdWx0IFZpc2liaWxpdHkuUFJJVkFURTsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQWJzdHJhY3RDbGFzc0FkYXB0ZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQWJzdHJhY3RDbGFzc0FkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJjYWEyNS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0Fic3RyYWN0Q2xhc3NBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkFubm90YXRpb25WaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5GaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTGFiZWw7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5PcGNvZGVzOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLlR5cGU7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uc2lnbmF0dXJlLlNpZ25hdHVyZVJlYWRlcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5zaWduYXR1cmUuU2lnbmF0dXJlVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5zaWduYXR1cmUuU2lnbmF0dXJlV3JpdGVyOwotCi0vKioKLSAqIFByb3ZpZGVzIHRoZSBjb21tb24gY29kZSBmb3IgUmVuYW1lQ2xhc3NBZGFwdGVyIGFuZCBSZWZhY3RvckNsYXNzQWRhcHRlci4gSXQKLSAqIGdvZXMgdGhyb3VnaCB0aGUgY29tcGxldGUgY2xhc3MgYW5kIGZpbmRzIHJlZmVyZW5jZXMgdG8gb3RoZXIgY2xhc3Nlcy4gSXQKLSAqIHRoZW4gY2FsbHMge0BsaW5rICNyZW5hbWVJbnRlcm5hbFR5cGUoU3RyaW5nKX0gdG8gY29udmVydCB0aGUgY2xhc3NOYW1lIHRvCi0gKiB0aGUgbmV3IHZhbHVlLCBpZiBuZWVkIGJlLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDbGFzc0FkYXB0ZXIgZXh0ZW5kcyBDbGFzc1Zpc2l0b3IgewotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmV3IEZRQ04gZm9yIHRoZSBjbGFzcywgaWYgdGhlIHJlZmVyZW5jZSB0byB0aGlzIGNsYXNzIG5lZWRzCi0gICAgICogdG8gYmUgdXBkYXRlZC4gRWxzZSwgaXQgcmV0dXJucyB0aGUgc2FtZSBzdHJpbmcuCi0gICAgICogQHBhcmFtIG5hbWUgT2xkIEZRQ04KLSAgICAgKiBAcmV0dXJuIE5ldyBGUUNOIGlmIGl0IG5lZWRzIHRvIGJlIHJlbmFtZWQsIGVsc2UgdGhlIG9sZCBGUUNOCi0gICAgICovCi0gICAgYWJzdHJhY3QgU3RyaW5nIHJlbmFtZUludGVybmFsVHlwZShTdHJpbmcgbmFtZSk7Ci0KLSAgICBwdWJsaWMgQWJzdHJhY3RDbGFzc0FkYXB0ZXIoQ2xhc3NWaXNpdG9yIGN2KSB7Ci0gICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCwgY3YpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbmFtZXMgYSB0eXBlIGRlc2NyaXB0b3IsIGUuZy4gIkxjb20ucGFja2FnZS5NeUNsYXNzOyIKLSAgICAgKiBJZiB0aGUgdHlwZSBkb2Vzbid0IG5lZWQgdG8gYmUgcmVuYW1lZCwgcmV0dXJucyB0aGUgaW5wdXQgc3RyaW5nIGFzLWlzLgotICAgICAqLwotICAgIFN0cmluZyByZW5hbWVUeXBlRGVzYyhTdHJpbmcgZGVzYykgewotICAgICAgICBpZiAoZGVzYyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZW5hbWVUeXBlKFR5cGUuZ2V0VHlwZShkZXNjKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVuYW1lcyBhbiBvYmplY3QgdHlwZSwgZS5nLiAiTGNvbS5wYWNrYWdlLk15Q2xhc3M7IiBvciBhbiBhcnJheSB0eXBlIHRoYXQgaGFzIGFuCi0gICAgICogb2JqZWN0IGVsZW1lbnQsIGUuZy4gIltMY29tLnBhY2thZ2UuTXlDbGFzczsiCi0gICAgICogSWYgdGhlIHR5cGUgZG9lc24ndCBuZWVkIHRvIGJlIHJlbmFtZWQsIHJldHVybnMgdGhlIGludGVybmFsIG5hbWUgb2YgdGhlIGlucHV0IHR5cGUuCi0gICAgICovCi0gICAgU3RyaW5nIHJlbmFtZVR5cGUoVHlwZSB0eXBlKSB7Ci0gICAgICAgIGlmICh0eXBlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGUuZ2V0U29ydCgpID09IFR5cGUuT0JKRUNUKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaW4gPSB0eXBlLmdldEludGVybmFsTmFtZSgpOwotICAgICAgICAgICAgcmV0dXJuICJMIiArIHJlbmFtZUludGVybmFsVHlwZShpbikgKyAiOyI7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZS5nZXRTb3J0KCkgPT0gVHlwZS5BUlJBWSkgewotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBuID0gdHlwZS5nZXREaW1lbnNpb25zKCk7IG4gPiAwOyBuLS0pIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJ1snKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNiLmFwcGVuZChyZW5hbWVUeXBlKHR5cGUuZ2V0RWxlbWVudFR5cGUoKSkpOwotICAgICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHR5cGUuZ2V0RGVzY3JpcHRvcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbmFtZXMgYW4gb2JqZWN0IHR5cGUsIGUuZy4gIkxjb20ucGFja2FnZS5NeUNsYXNzOyIgb3IgYW4gYXJyYXkgdHlwZSB0aGF0IGhhcyBhbgotICAgICAqIG9iamVjdCBlbGVtZW50LCBlLmcuICJbTGNvbS5wYWNrYWdlLk15Q2xhc3M7Ii4KLSAgICAgKiBUaGlzIGlzIGxpa2UgcmVuYW1lVHlwZSgpIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgYSBUeXBlIG9iamVjdC4KLSAgICAgKiBJZiB0aGUgdHlwZSBkb2Vzbid0IG5lZWQgdG8gYmUgcmVuYW1lZCwgcmV0dXJucyB0aGUgaW5wdXQgdHlwZSBvYmplY3QuCi0gICAgICovCi0gICAgVHlwZSByZW5hbWVUeXBlQXNUeXBlKFR5cGUgdHlwZSkgewotICAgICAgICBpZiAodHlwZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0eXBlLmdldFNvcnQoKSA9PSBUeXBlLk9CSkVDVCkgewotICAgICAgICAgICAgU3RyaW5nIGluID0gdHlwZS5nZXRJbnRlcm5hbE5hbWUoKTsKLSAgICAgICAgICAgIFN0cmluZyBuZXdJbiA9IHJlbmFtZUludGVybmFsVHlwZShpbik7Ci0gICAgICAgICAgICBpZiAobmV3SW4gIT0gaW4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVHlwZS5nZXRUeXBlKCJMIiArIG5ld0luICsgIjsiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh0eXBlLmdldFNvcnQoKSA9PSBUeXBlLkFSUkFZKSB7Ci0gICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgICAgIGZvciAoaW50IG4gPSB0eXBlLmdldERpbWVuc2lvbnMoKTsgbiA+IDA7IG4tLSkgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgnWycpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2IuYXBwZW5kKHJlbmFtZVR5cGUodHlwZS5nZXRFbGVtZW50VHlwZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gVHlwZS5nZXRUeXBlKHNiLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbmFtZXMgYSBtZXRob2QgZGVzY3JpcHRvciwgaS5lLiBhcHBsaWVzIHJlbmFtZVR5cGUgdG8gYWxsIGFyZ3VtZW50cyBhbmQgdG8gdGhlCi0gICAgICogcmV0dXJuIHZhbHVlLgotICAgICAqLwotICAgIFN0cmluZyByZW5hbWVNZXRob2REZXNjKFN0cmluZyBkZXNjKSB7Ci0gICAgICAgIGlmIChkZXNjID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgVHlwZVtdIGFyZ3MgPSBUeXBlLmdldEFyZ3VtZW50VHlwZXMoZGVzYyk7Ci0KLSAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCIoIik7Ci0gICAgICAgIGZvciAoVHlwZSBhcmcgOiBhcmdzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHJlbmFtZVR5cGUoYXJnKTsKLSAgICAgICAgICAgIHNiLmFwcGVuZChuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBzYi5hcHBlbmQoJyknKTsKLQotICAgICAgICBUeXBlIHJldCA9IFR5cGUuZ2V0UmV0dXJuVHlwZShkZXNjKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSByZW5hbWVUeXBlKHJldCk7Ci0gICAgICAgIHNiLmFwcGVuZChuYW1lKTsKLQotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFJlbmFtZXMgdGhlIENsYXNzU2lnbmF0dXJlIGhhbmRsZWQgYnkgQ2xhc3NWaXNpdG9yLnZpc2l0Ci0gICAgICogb3IgdGhlIE1ldGhvZFR5cGVTaWduYXR1cmUgaGFuZGxlZCBieSBDbGFzc1Zpc2l0b3IudmlzaXRNZXRob2QuCi0gICAgICovCi0gICAgU3RyaW5nIHJlbmFtZVR5cGVTaWduYXR1cmUoU3RyaW5nIHNpZykgewotICAgICAgICBpZiAoc2lnID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIFNpZ25hdHVyZVJlYWRlciByZWFkZXIgPSBuZXcgU2lnbmF0dXJlUmVhZGVyKHNpZyk7Ci0gICAgICAgIFNpZ25hdHVyZVdyaXRlciB3cml0ZXIgPSBuZXcgU2lnbmF0dXJlV3JpdGVyKCk7Ci0gICAgICAgIHJlYWRlci5hY2NlcHQobmV3IFJlbmFtZVNpZ25hdHVyZUFkYXB0ZXIod3JpdGVyKSk7Ci0gICAgICAgIHNpZyA9IHdyaXRlci50b1N0cmluZygpOwotICAgICAgICByZXR1cm4gc2lnOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogUmVuYW1lcyB0aGUgRmllbGRUeXBlU2lnbmF0dXJlIGhhbmRsZWQgYnkgQ2xhc3NWaXNpdG9yLnZpc2l0RmllbGQKLSAgICAgKiBvciBNZXRob2RWaXNpdG9yLnZpc2l0TG9jYWxWYXJpYWJsZS4KLSAgICAgKi8KLSAgICBTdHJpbmcgcmVuYW1lRmllbGRTaWduYXR1cmUoU3RyaW5nIHNpZykgewotICAgICAgICByZXR1cm4gcmVuYW1lVHlwZVNpZ25hdHVyZShzaWcpOwotICAgIH0KLQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gTWV0aG9kcyBmcm9tIHRoZSBDbGFzc0FkYXB0ZXIKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0KGludCB2ZXJzaW9uLCBpbnQgYWNjZXNzLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNpZ25hdHVyZSwKLSAgICAgICAgICAgIFN0cmluZyBzdXBlck5hbWUsIFN0cmluZ1tdIGludGVyZmFjZXMpIHsKLSAgICAgICAgbmFtZSA9IHJlbmFtZUludGVybmFsVHlwZShuYW1lKTsKLSAgICAgICAgc3VwZXJOYW1lID0gcmVuYW1lSW50ZXJuYWxUeXBlKHN1cGVyTmFtZSk7Ci0gICAgICAgIHNpZ25hdHVyZSA9IHJlbmFtZVR5cGVTaWduYXR1cmUoc2lnbmF0dXJlKTsKLSAgICAgICAgaWYgKGludGVyZmFjZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50ZXJmYWNlc1tpXSA9IHJlbmFtZUludGVybmFsVHlwZShpbnRlcmZhY2VzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHN1cGVyLnZpc2l0KHZlcnNpb24sIGFjY2VzcywgbmFtZSwgc2lnbmF0dXJlLCBzdXBlck5hbWUsIGludGVyZmFjZXMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0SW5uZXJDbGFzcyhTdHJpbmcgbmFtZSwgU3RyaW5nIG91dGVyTmFtZSwgU3RyaW5nIGlubmVyTmFtZSwgaW50IGFjY2VzcykgewotICAgICAgICBuYW1lID0gcmVuYW1lSW50ZXJuYWxUeXBlKG5hbWUpOwotICAgICAgICBvdXRlck5hbWUgPSByZW5hbWVJbnRlcm5hbFR5cGUob3V0ZXJOYW1lKTsKLSAgICAgICAgc3VwZXIudmlzaXRJbm5lckNsYXNzKG5hbWUsIG91dGVyTmFtZSwgaW5uZXJOYW1lLCBhY2Nlc3MpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0T3V0ZXJDbGFzcyhTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICBzdXBlci52aXNpdE91dGVyQ2xhc3MocmVuYW1lSW50ZXJuYWxUeXBlKG93bmVyKSwgbmFtZSwgcmVuYW1lVHlwZURlc2MoZGVzYykpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZXRob2RWaXNpdG9yIHZpc2l0TWV0aG9kKGludCBhY2Nlc3MsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIFN0cmluZ1tdIGV4Y2VwdGlvbnMpIHsKLSAgICAgICAgZGVzYyA9IHJlbmFtZU1ldGhvZERlc2MoZGVzYyk7Ci0gICAgICAgIHNpZ25hdHVyZSA9IHJlbmFtZVR5cGVTaWduYXR1cmUoc2lnbmF0dXJlKTsKLSAgICAgICAgTWV0aG9kVmlzaXRvciBtdyA9IHN1cGVyLnZpc2l0TWV0aG9kKGFjY2VzcywgbmFtZSwgZGVzYywgc2lnbmF0dXJlLCBleGNlcHRpb25zKTsKLSAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVNZXRob2RBZGFwdGVyKG13KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uKFN0cmluZyBkZXNjLCBib29sZWFuIHZpc2libGUpIHsKLSAgICAgICAgZGVzYyA9IHJlbmFtZVR5cGVEZXNjKGRlc2MpOwotICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRBbm5vdGF0aW9uKGRlc2MsIHZpc2libGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWVsZFZpc2l0b3IgdmlzaXRGaWVsZChpbnQgYWNjZXNzLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsCi0gICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlLCBPYmplY3QgdmFsdWUpIHsKLSAgICAgICAgZGVzYyA9IHJlbmFtZVR5cGVEZXNjKGRlc2MpOwotICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRGaWVsZChhY2Nlc3MsIG5hbWUsIGRlc2MsIHNpZ25hdHVyZSwgdmFsdWUpOwotICAgIH0KLQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvKioKLSAgICAgKiBBIG1ldGhvZCB2aXNpdG9yIHRoYXQgcmVuYW1lcyBhbGwgcmVmZXJlbmNlcyBmcm9tIGFuIG9sZCBjbGFzcyBuYW1lIHRvIGEgbmV3IGNsYXNzIG5hbWUuCi0gICAgICovCi0gICAgcHVibGljIGNsYXNzIFJlbmFtZU1ldGhvZEFkYXB0ZXIgZXh0ZW5kcyBNZXRob2RWaXNpdG9yIHsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIG1ldGhvZCB2aXNpdG9yIHRoYXQgcmVuYW1lcyBhbGwgcmVmZXJlbmNlcyBmcm9tIGEgZ2l2ZW4gb2xkIG5hbWUgdG8gYSBnaXZlbiBuZXcKLSAgICAgICAgICogbmFtZS4gVGhlIG1ldGhvZCB2aXNpdG9yIHdpbGwgYWxzbyByZW5hbWUgYWxsIGlubmVyIGNsYXNzZXMuCi0gICAgICAgICAqIFRoZSBuYW1lcyBtdXN0IGJlIGZ1bGwgcXVhbGlmaWVkIGludGVybmFsIEFTTSBuYW1lcyAoZS5nLiBjb20vYmxhaC9NeUNsYXNzJElubmVyQ2xhc3MpLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFJlbmFtZU1ldGhvZEFkYXB0ZXIoTWV0aG9kVmlzaXRvciBtdikgewotICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000LCBtdik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0QW5ub3RhdGlvbihTdHJpbmcgZGVzYywgYm9vbGVhbiB2aXNpYmxlKSB7Ci0gICAgICAgICAgICBkZXNjID0gcmVuYW1lVHlwZURlc2MoZGVzYyk7Ci0KLSAgICAgICAgICAgIHJldHVybiBzdXBlci52aXNpdEFubm90YXRpb24oZGVzYywgdmlzaWJsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0UGFyYW1ldGVyQW5ub3RhdGlvbihpbnQgcGFyYW1ldGVyLCBTdHJpbmcgZGVzYywgYm9vbGVhbiB2aXNpYmxlKSB7Ci0gICAgICAgICAgICBkZXNjID0gcmVuYW1lVHlwZURlc2MoZGVzYyk7Ci0KLSAgICAgICAgICAgIHJldHVybiBzdXBlci52aXNpdFBhcmFtZXRlckFubm90YXRpb24ocGFyYW1ldGVyLCBkZXNjLCB2aXNpYmxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVJbnNuKGludCBvcGNvZGUsIFN0cmluZyB0eXBlKSB7Ci0gICAgICAgICAgICAvLyBUaGUgdHlwZSBzb21ldGltZXMgdHVybnMgb3V0IHRvIGJlIGEgdHlwZSBkZXNjcmlwdG9yLiBXZSB0cnkgdG8gZGV0ZWN0IGl0IGFuZCBmaXguCi0gICAgICAgICAgICBpZiAodHlwZS5pbmRleE9mKCc7JykgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdHlwZSA9IHJlbmFtZVR5cGVEZXNjKHR5cGUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0eXBlID0gcmVuYW1lSW50ZXJuYWxUeXBlKHR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VwZXIudmlzaXRUeXBlSW5zbihvcGNvZGUsIHR5cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RmllbGRJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjKSB7Ci0gICAgICAgICAgICBvd25lciA9IHJlbmFtZUludGVybmFsVHlwZShvd25lcik7Ci0gICAgICAgICAgICBkZXNjID0gcmVuYW1lVHlwZURlc2MoZGVzYyk7Ci0KLSAgICAgICAgICAgIHN1cGVyLnZpc2l0RmllbGRJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgLy8gVGhlIG93bmVyIHNvbWV0aW1lcyB0dXJucyBvdXQgdG8gYmUgYSB0eXBlIGRlc2NyaXB0b3IuIFdlIHRyeSB0byBkZXRlY3QgaXQgYW5kIGZpeC4KLSAgICAgICAgICAgIGlmIChvd25lci5pbmRleE9mKCc7JykgPiAwKSB7Ci0gICAgICAgICAgICAgICAgb3duZXIgPSByZW5hbWVUeXBlRGVzYyhvd25lcik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG93bmVyID0gcmVuYW1lSW50ZXJuYWxUeXBlKG93bmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc2MgPSByZW5hbWVNZXRob2REZXNjKGRlc2MpOwotCi0gICAgICAgICAgICBzdXBlci52aXNpdE1ldGhvZEluc24ob3Bjb2RlLCBvd25lciwgbmFtZSwgZGVzYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXRMZGNJbnNuKE9iamVjdCBjc3QpIHsKLSAgICAgICAgICAgIC8vIElmIGNzdCBpcyBhIFR5cGUsIHRoaXMgbWVhbnMgdGhlIGNvZGUgaXMgdHJ5aW5nIHRvIHB1bGwgdGhlIC5jbGFzcyBjb25zdGFudAotICAgICAgICAgICAgLy8gZm9yIHRoaXMgY2xhc3MsIHNvIGl0IG5lZWRzIHRvIGJlIHJlbmFtZWQgdG9vLgotICAgICAgICAgICAgaWYgKGNzdCBpbnN0YW5jZW9mIFR5cGUpIHsKLSAgICAgICAgICAgICAgICBjc3QgPSByZW5hbWVUeXBlQXNUeXBlKChUeXBlKSBjc3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VwZXIudmlzaXRMZGNJbnNuKGNzdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXRNdWx0aUFOZXdBcnJheUluc24oU3RyaW5nIGRlc2MsIGludCBkaW1zKSB7Ci0gICAgICAgICAgICBkZXNjID0gcmVuYW1lVHlwZURlc2MoZGVzYyk7Ci0KLSAgICAgICAgICAgIHN1cGVyLnZpc2l0TXVsdGlBTmV3QXJyYXlJbnNuKGRlc2MsIGRpbXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0VHJ5Q2F0Y2hCbG9jayhMYWJlbCBzdGFydCwgTGFiZWwgZW5kLCBMYWJlbCBoYW5kbGVyLCBTdHJpbmcgdHlwZSkgewotICAgICAgICAgICAgdHlwZSA9IHJlbmFtZUludGVybmFsVHlwZSh0eXBlKTsKLQotICAgICAgICAgICAgc3VwZXIudmlzaXRUcnlDYXRjaEJsb2NrKHN0YXJ0LCBlbmQsIGhhbmRsZXIsIHR5cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TG9jYWxWYXJpYWJsZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsIFN0cmluZyBzaWduYXR1cmUsCi0gICAgICAgICAgICAgICAgTGFiZWwgc3RhcnQsIExhYmVsIGVuZCwgaW50IGluZGV4KSB7Ci0gICAgICAgICAgICBkZXNjID0gcmVuYW1lVHlwZURlc2MoZGVzYyk7Ci0gICAgICAgICAgICBzaWduYXR1cmUgPSByZW5hbWVGaWVsZFNpZ25hdHVyZShzaWduYXR1cmUpOwotCi0gICAgICAgICAgICBzdXBlci52aXNpdExvY2FsVmFyaWFibGUobmFtZSwgZGVzYywgc2lnbmF0dXJlLCBzdGFydCwgZW5kLCBpbmRleCk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcHVibGljIGNsYXNzIFJlbmFtZVNpZ25hdHVyZUFkYXB0ZXIgZXh0ZW5kcyBTaWduYXR1cmVWaXNpdG9yIHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFNpZ25hdHVyZVZpc2l0b3IgbVN2OwotCi0gICAgICAgIHB1YmxpYyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKFNpZ25hdHVyZVZpc2l0b3Igc3YpIHsKLSAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgICAgICBtU3YgPSBzdjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdENsYXNzVHlwZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgbmFtZSA9IHJlbmFtZUludGVybmFsVHlwZShuYW1lKTsKLSAgICAgICAgICAgIG1Tdi52aXNpdENsYXNzVHlwZShuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdElubmVyQ2xhc3NUeXBlKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICBuYW1lID0gcmVuYW1lSW50ZXJuYWxUeXBlKG5hbWUpOwotICAgICAgICAgICAgbVN2LnZpc2l0SW5uZXJDbGFzc1R5cGUobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFNpZ25hdHVyZVZpc2l0b3IgdmlzaXRBcnJheVR5cGUoKSB7Ci0gICAgICAgICAgICBTaWduYXR1cmVWaXNpdG9yIHN2ID0gbVN2LnZpc2l0QXJyYXlUeXBlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFJlbmFtZVNpZ25hdHVyZUFkYXB0ZXIoc3YpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0QmFzZVR5cGUoY2hhciBkZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgICBtU3YudmlzaXRCYXNlVHlwZShkZXNjcmlwdG9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdENsYXNzQm91bmQoKSB7Ci0gICAgICAgICAgICBTaWduYXR1cmVWaXNpdG9yIHN2ID0gbVN2LnZpc2l0Q2xhc3NCb3VuZCgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEVuZCgpIHsKLSAgICAgICAgICAgIG1Tdi52aXNpdEVuZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0RXhjZXB0aW9uVHlwZSgpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZVZpc2l0b3Igc3YgPSBtU3YudmlzaXRFeGNlcHRpb25UeXBlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFJlbmFtZVNpZ25hdHVyZUFkYXB0ZXIoc3YpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0Rm9ybWFsVHlwZVBhcmFtZXRlcihTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgbVN2LnZpc2l0Rm9ybWFsVHlwZVBhcmFtZXRlcihuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdEludGVyZmFjZSgpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZVZpc2l0b3Igc3YgPSBtU3YudmlzaXRJbnRlcmZhY2UoKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUmVuYW1lU2lnbmF0dXJlQWRhcHRlcihzdik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFNpZ25hdHVyZVZpc2l0b3IgdmlzaXRJbnRlcmZhY2VCb3VuZCgpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZVZpc2l0b3Igc3YgPSBtU3YudmlzaXRJbnRlcmZhY2VCb3VuZCgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFBhcmFtZXRlclR5cGUoKSB7Ci0gICAgICAgICAgICBTaWduYXR1cmVWaXNpdG9yIHN2ID0gbVN2LnZpc2l0UGFyYW1ldGVyVHlwZSgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFJldHVyblR5cGUoKSB7Ci0gICAgICAgICAgICBTaWduYXR1cmVWaXNpdG9yIHN2ID0gbVN2LnZpc2l0UmV0dXJuVHlwZSgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFN1cGVyY2xhc3MoKSB7Ci0gICAgICAgICAgICBTaWduYXR1cmVWaXNpdG9yIHN2ID0gbVN2LnZpc2l0U3VwZXJjbGFzcygpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVBcmd1bWVudCgpIHsKLSAgICAgICAgICAgIG1Tdi52aXNpdFR5cGVBcmd1bWVudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0VHlwZUFyZ3VtZW50KGNoYXIgd2lsZGNhcmQpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZVZpc2l0b3Igc3YgPSBtU3YudmlzaXRUeXBlQXJndW1lbnQod2lsZGNhcmQpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVWYXJpYWJsZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgbVN2LnZpc2l0VHlwZVZhcmlhYmxlKG5hbWUpOwotICAgICAgICB9Ci0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUFuYWx5emVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUFuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NzJhNDAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21BbmFseXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5Bbm5vdGF0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5BdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NSZWFkZXI7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkZpZWxkVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5MYWJlbDsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5NZXRob2RWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk9wY29kZXM7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uVHlwZTsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5zaWduYXR1cmUuU2lnbmF0dXJlUmVhZGVyOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLnNpZ25hdHVyZS5TaWduYXR1cmVWaXNpdG9yOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEVudHJ5OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRmlsZTsKLQotLyoqCi0gKiBBbmFseXplcyB0aGUgaW5wdXQgSkFSIHVzaW5nIHRoZSBBU00gamF2YSBieXRlY29kZSBtYW5pcHVsYXRpb24gbGlicmFyeQotICogdG8gbGlzdCB0aGUgZGVzaXJlZCBjbGFzc2VzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBc21BbmFseXplciB7Ci0KLSAgICAvLyBOb3RlOiBhIGJ1bmNoIG9mIHN0dWZmIGhhcyBwYWNrYWdlLWxldmVsIGFjY2VzcyBmb3IgdW5pdCB0ZXN0cy4gQ29uc2lkZXIgaXQgcHJpdmF0ZS4KLQotICAgIC8qKiBPdXRwdXQgbG9nZ2VyLiAqLwotICAgIHByaXZhdGUgZmluYWwgTG9nIG1Mb2c7Ci0gICAgLyoqIFRoZSBpbnB1dCBzb3VyY2UgSkFSIHRvIHBhcnNlLiAqLwotICAgIHByaXZhdGUgZmluYWwgTGlzdDxTdHJpbmc+IG1Pc1NvdXJjZUphcjsKLSAgICAvKiogVGhlIGdlbmVyYXRvciB0byBmaWxsIHdpdGggdGhlIGNsYXNzIGxpc3QgYW5kIGRlcGVuZGVuY3kgbGlzdC4gKi8KLSAgICBwcml2YXRlIGZpbmFsIEFzbUdlbmVyYXRvciBtR2VuOwotICAgIC8qKiBLZWVwIGFsbCBjbGFzc2VzIHRoYXQgZGVyaXZlIGZyb20gdGhlc2Ugb25lICh0aGVzZSBpbmNsdWRlZCkuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtRGVyaXZlRnJvbTsKLSAgICAvKiogR2xvYiBwYXR0ZXJucyBvZiBjbGFzc2VzIHRvIGtlZXAsIGUuZy4gImNvbS5mb28uKiIgKi8KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZ1tdIG1JbmNsdWRlR2xvYnM7Ci0gICAgLyoqIFRoZSBzZXQgb2YgY2xhc3NlcyB0byBleGNsdWRlLiovCi0gICAgcHJpdmF0ZSBmaW5hbCBTZXQ8U3RyaW5nPiBtRXhjbHVkZWRDbGFzc2VzOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBhbmFseXplci4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb2cgVGhlIGxvZyBvdXRwdXQuCi0gICAgICogQHBhcmFtIG9zSmFyUGF0aCBUaGUgaW5wdXQgc291cmNlIEpBUnMgdG8gcGFyc2UuCi0gICAgICogQHBhcmFtIGdlbiBUaGUgZ2VuZXJhdG9yIHRvIGZpbGwgd2l0aCB0aGUgY2xhc3MgbGlzdCBhbmQgZGVwZW5kZW5jeSBsaXN0LgotICAgICAqIEBwYXJhbSBkZXJpdmVGcm9tIEtlZXAgYWxsIGNsYXNzZXMgdGhhdCBkZXJpdmUgZnJvbSB0aGVzZSBvbmUgKHRoZXNlIGluY2x1ZGVkKS4KLSAgICAgKiBAcGFyYW0gaW5jbHVkZUdsb2JzIEdsb2IgcGF0dGVybnMgb2YgY2xhc3NlcyB0byBrZWVwLCBlLmcuICJjb20uZm9vLioiCi0gICAgICogICAgICAgICgiKiIgZG9lcyBub3QgbWF0Y2hlcyBkb3RzIHdoaWxzdCAiKioiIGRvZXMsICIuIiBhbmQgIiQiIGFyZSBpbnRlcnByZXRlZCBhcy1pcykKLSAgICAgKi8KLSAgICBwdWJsaWMgQXNtQW5hbHl6ZXIoTG9nIGxvZywgTGlzdDxTdHJpbmc+IG9zSmFyUGF0aCwgQXNtR2VuZXJhdG9yIGdlbiwKLSAgICAgICAgICAgIFN0cmluZ1tdIGRlcml2ZUZyb20sIFN0cmluZ1tdIGluY2x1ZGVHbG9icywgU2V0PFN0cmluZz4gZXhjbHVkZUNsYXNzZXMpIHsKLSAgICAgICAgbUxvZyA9IGxvZzsKLSAgICAgICAgbUdlbiA9IGdlbjsKLSAgICAgICAgbU9zU291cmNlSmFyID0gb3NKYXJQYXRoICE9IG51bGwgPyBvc0phclBhdGggOiBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLSAgICAgICAgbURlcml2ZUZyb20gPSBkZXJpdmVGcm9tICE9IG51bGwgPyBkZXJpdmVGcm9tIDogbmV3IFN0cmluZ1swXTsKLSAgICAgICAgbUluY2x1ZGVHbG9icyA9IGluY2x1ZGVHbG9icyAhPSBudWxsID8gaW5jbHVkZUdsb2JzIDogbmV3IFN0cmluZ1swXTsKLSAgICAgICAgbUV4Y2x1ZGVkQ2xhc3NlcyA9IGV4Y2x1ZGVDbGFzc2VzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0YXJ0cyB0aGUgYW5hbHlzaXMgdXNpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICAgKiBGaWxscyB0aGUgZ2VuZXJhdG9yIHdpdGggY2xhc3NlcyAmIGRlcGVuZGVuY2llcyBmb3VuZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhbmFseXplKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBMb2dBYm9ydEV4Y2VwdGlvbiB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzID0gcGFyc2VaaXAobU9zU291cmNlSmFyKTsKLSAgICAgICAgbUxvZy5pbmZvKCJGb3VuZCAlZCBjbGFzc2VzIGluIGlucHV0IEpBUiVzLiIsIHppcENsYXNzZXMuc2l6ZSgpLAotICAgICAgICAgICAgICAgIG1Pc1NvdXJjZUphci5zaXplKCkgPiAxID8gInMiIDogIiIpOwotCi0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBmb3VuZCA9IGZpbmRJbmNsdWRlcyh6aXBDbGFzc2VzKTsKLSAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGRlcHMgPSBmaW5kRGVwcyh6aXBDbGFzc2VzLCBmb3VuZCk7Ci0KLSAgICAgICAgaWYgKG1HZW4gIT0gbnVsbCkgewotICAgICAgICAgICAgbUdlbi5zZXRLZWVwKGZvdW5kKTsKLSAgICAgICAgICAgIG1HZW4uc2V0RGVwcyhkZXBzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBhcnNlcyBhIEpBUiBmaWxlIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgY2xhc3NlcyBmb3VuZHMgdXNpbmcgYSBtYXAKLSAgICAgKiBjbGFzcyBuYW1lID0+IEFTTSBDbGFzc1JlYWRlci4gQ2xhc3MgbmFtZXMgYXJlIGluIHRoZSBmb3JtICJhbmRyb2lkLnZpZXcuVmlldyIuCi0gICAgICovCi0gICAgTWFwPFN0cmluZyxDbGFzc1JlYWRlcj4gcGFyc2VaaXAoTGlzdDxTdHJpbmc+IGphclBhdGhMaXN0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGNsYXNzZXMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotCi0gICAgICAgIGZvciAoU3RyaW5nIGphclBhdGggOiBqYXJQYXRoTGlzdCkgewotICAgICAgICAgICAgWmlwRmlsZSB6aXAgPSBuZXcgWmlwRmlsZShqYXJQYXRoKTsKLSAgICAgICAgICAgIEVudW1lcmF0aW9uPD8gZXh0ZW5kcyBaaXBFbnRyeT4gZW50cmllcyA9IHppcC5lbnRyaWVzKCk7Ci0gICAgICAgICAgICBaaXBFbnRyeSBlbnRyeTsKLSAgICAgICAgICAgIHdoaWxlIChlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmdldE5hbWUoKS5lbmRzV2l0aCgiLmNsYXNzIikpIHsKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoemlwLmdldElucHV0U3RyZWFtKGVudHJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc1JlYWRlclRvQ2xhc3NOYW1lKGNyKTsKLSAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXQoY2xhc3NOYW1lLCBjcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNsYXNzZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXRpbGl0eSB0aGF0IHJldHVybnMgdGhlIGZ1bGx5IHF1YWxpZmllZCBiaW5hcnkgY2xhc3MgbmFtZSBmb3IgYSBDbGFzc1JlYWRlci4KLSAgICAgKiBFLmcuIGl0IHJldHVybnMgc29tZXRoaW5nIGxpa2UgYW5kcm9pZC52aWV3LlZpZXcuCi0gICAgICovCi0gICAgc3RhdGljIFN0cmluZyBjbGFzc1JlYWRlclRvQ2xhc3NOYW1lKENsYXNzUmVhZGVyIGNsYXNzUmVhZGVyKSB7Ci0gICAgICAgIGlmIChjbGFzc1JlYWRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBjbGFzc1JlYWRlci5nZXRDbGFzc05hbWUoKS5yZXBsYWNlKCcvJywgJy4nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFV0aWxpdHkgdGhhdCByZXR1cm5zIHRoZSBmdWxseSBxdWFsaWZpZWQgYmluYXJ5IGNsYXNzIG5hbWUgZnJvbSBhIHBhdGgtbGlrZSBGUUNOLgotICAgICAqIEUuZy4gaXQgcmV0dXJucyBhbmRyb2lkLnZpZXcuVmlldyBmcm9tIGFuZHJvaWQvdmlldy9WaWV3LgotICAgICAqLwotICAgIHN0YXRpYyBTdHJpbmcgaW50ZXJuYWxUb0JpbmFyeUNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7Ci0gICAgICAgIGlmIChjbGFzc05hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnJlcGxhY2UoJy8nLCAnLicpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJvY2VzcyB0aGUgImluY2x1ZGVzIiBhcnJheXMuCi0gICAgICogPHAvPgotICAgICAqIFRoaXMgdXBkYXRlcyB0aGUgaW5fb3V0X2ZvdW5kIG1hcC4KLSAgICAgKi8KLSAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZmluZEluY2x1ZGVzKE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzKQotICAgICAgICAgICAgdGhyb3dzIExvZ0Fib3J0RXhjZXB0aW9uIHsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBmb3VuZCA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7Ci0KLSAgICAgICAgbUxvZy5kZWJ1ZygiRmluZCBjbGFzc2VzIHRvIGluY2x1ZGUuIik7Ci0KLSAgICAgICAgZm9yIChTdHJpbmcgcyA6IG1JbmNsdWRlR2xvYnMpIHsKLSAgICAgICAgICAgIGZpbmRHbG9icyhzLCB6aXBDbGFzc2VzLCBmb3VuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChTdHJpbmcgcyA6IG1EZXJpdmVGcm9tKSB7Ci0gICAgICAgICAgICBmaW5kQ2xhc3Nlc0Rlcml2aW5nRnJvbShzLCB6aXBDbGFzc2VzLCBmb3VuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBVc2VzIEFTTSB0byBmaW5kIHRoZSBjbGFzcyByZWFkZXIgZm9yIHRoZSBnaXZlbiBGUUNOIGNsYXNzIG5hbWUuCi0gICAgICogSWYgZm91bmQsIGluc2VydCBpdCBpbiB0aGUgaW5fb3V0X2ZvdW5kIG1hcC4KLSAgICAgKiBSZXR1cm5zIHRoZSBjbGFzcyByZWFkZXIgb2JqZWN0LgotICAgICAqLwotICAgIENsYXNzUmVhZGVyIGZpbmRDbGFzcyhTdHJpbmcgY2xhc3NOYW1lLCBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gemlwQ2xhc3NlcywKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBpbk91dEZvdW5kKSB0aHJvd3MgTG9nQWJvcnRFeGNlcHRpb24gewotICAgICAgICBDbGFzc1JlYWRlciBjbGFzc1JlYWRlciA9IHppcENsYXNzZXMuZ2V0KGNsYXNzTmFtZSk7Ci0gICAgICAgIGlmIChjbGFzc1JlYWRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgTG9nQWJvcnRFeGNlcHRpb24oIkNsYXNzICVzIG5vdCBmb3VuZCBieSBBU00gaW4gJXMiLAotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUsIG1Pc1NvdXJjZUphcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbk91dEZvdW5kLnB1dChjbGFzc05hbWUsIGNsYXNzUmVhZGVyKTsKLSAgICAgICAgcmV0dXJuIGNsYXNzUmVhZGVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluc2VydCBpbiB0aGUgaW5PdXRGb3VuZCBtYXAgYWxsIGNsYXNzZXMgZm91bmQgaW4gemlwQ2xhc3NlcyB0aGF0IG1hdGNoIHRoZQotICAgICAqIGdpdmVuIGdsb2IgcGF0dGVybi4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhlIGdsb2IgcGF0dGVybiBpcyBub3QgYSByZWdleHAuIEl0IG9ubHkgYWNjZXB0cyB0aGUgIioiIGtleXdvcmQgdG8gbWVhbgotICAgICAqICJhbnl0aGluZyBidXQgYSBwZXJpb2QiLiBUaGUgIi4iIGFuZCAiJCIgY2hhcmFjdGVycyBtYXRjaCB0aGVtc2VsdmVzLgotICAgICAqIFRoZSAiKioiIGtleXdvcmQgbWVhbnMgZXZlcnl0aGluZyBpbmNsdWRpbmcgIi4iLgotICAgICAqIDxwLz4KLSAgICAgKiBFeGFtcGxlczoKLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPmNvbS5mb28uKiBtYXRjaGVzIGFsbCBjbGFzc2VzIGluIHRoZSBwYWNrYWdlIGNvbS5mb28gYnV0IE5PVCBzdWItcGFja2FnZXMuCi0gICAgICogPGxpPmNvbS5mb28qLiokRXZlbnQgbWF0Y2hlcyBhbGwgaW50ZXJuYWwgRXZlbnQgY2xhc3NlcyBpbiBhIGNvbS5mb28qLiogY2xhc3MuCi0gICAgICogPC91bD4KLSAgICAgKi8KLSAgICB2b2lkIGZpbmRHbG9icyhTdHJpbmcgZ2xvYlBhdHRlcm4sIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzLAotICAgICAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGluT3V0Rm91bmQpIHRocm93cyBMb2dBYm9ydEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHRyYW5zZm9ybXMgdGhlIGdsb2IgcGF0dGVybiBpbiBhIHJlZ2V4cDoKLSAgICAgICAgLy8gLSBlc2NhcGUgIi4iIHdpdGggIlwuIgotICAgICAgICAvLyAtIHJlcGxhY2UgIioiIGJ5ICJbXi5dKiIKLSAgICAgICAgLy8gLSBlc2NhcGUgIiQiIHdpdGggIlwkIgotICAgICAgICAvLyAtIGFkZCBlbmQtb2YtbGluZSBtYXRjaCAkCi0gICAgICAgIGdsb2JQYXR0ZXJuID0gZ2xvYlBhdHRlcm4ucmVwbGFjZUFsbCgiXFwkIiwgIlxcXFxcXCQiKTsKLSAgICAgICAgZ2xvYlBhdHRlcm4gPSBnbG9iUGF0dGVybi5yZXBsYWNlQWxsKCJcXC4iLCAiXFxcXC4iKTsKLSAgICAgICAgLy8gcHJldmVudCAqKiBmcm9tIGJlaW5nIGFsdGVyZWQgYnkgdGhlIG5leHQgcnVsZSwgdGhlbiBwcm9jZXNzIHRoZSAqIHJ1bGUgYW5kIGZpbmFsbHkKLSAgICAgICAgLy8gdGhlIHJlYWwgKiogcnVsZSAod2hpY2ggaXMgbm93IEApCi0gICAgICAgIGdsb2JQYXR0ZXJuID0gZ2xvYlBhdHRlcm4ucmVwbGFjZUFsbCgiXFwqXFwqIiwgIkAiKTsKLSAgICAgICAgZ2xvYlBhdHRlcm4gPSBnbG9iUGF0dGVybi5yZXBsYWNlQWxsKCJcXCoiLCAiW14uXSoiKTsKLSAgICAgICAgZ2xvYlBhdHRlcm4gPSBnbG9iUGF0dGVybi5yZXBsYWNlQWxsKCJAIiwgIi4qIik7Ci0gICAgICAgIGdsb2JQYXR0ZXJuICs9ICIkIjsKLQotICAgICAgICBQYXR0ZXJuIHJlZ2V4cCA9IFBhdHRlcm4uY29tcGlsZShnbG9iUGF0dGVybik7Ci0KLSAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIENsYXNzUmVhZGVyPiBlbnRyeSA6IHppcENsYXNzZXMuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgU3RyaW5nIGNsYXNzX25hbWUgPSBlbnRyeS5nZXRLZXkoKTsKLSAgICAgICAgICAgIGlmIChyZWdleHAubWF0Y2hlcihjbGFzc19uYW1lKS5tYXRjaGVzKCkpIHsKLSAgICAgICAgICAgICAgICBmaW5kQ2xhc3MoY2xhc3NfbmFtZSwgemlwQ2xhc3NlcywgaW5PdXRGb3VuZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgYWxsIHRoZSBjbGFzc2VzIGRlZmluZWQgaW4gdGhlIEphckNsYXNzTmFtZSBpbnN0YW5jZSBhbmQgdXNlcyBCQ0VMIHRvCi0gICAgICogZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGRlcml2ZWQgZnJvbSB0aGUgZ2l2ZW4gRlFDTiBzdXBlciBjbGFzcyBuYW1lLgotICAgICAqIEluc2VydHMgdGhlIHN1cGVyIGNsYXNzIGFuZCBhbGwgdGhlIGNsYXNzIG9iamVjdHMgZm91bmQgaW4gdGhlIG1hcC4KLSAgICAgKi8KLSAgICB2b2lkIGZpbmRDbGFzc2VzRGVyaXZpbmdGcm9tKFN0cmluZyBzdXBlcl9uYW1lLCBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gemlwQ2xhc3NlcywKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBpbk91dEZvdW5kKSB0aHJvd3MgTG9nQWJvcnRFeGNlcHRpb24gewotICAgICAgICBmaW5kQ2xhc3Moc3VwZXJfbmFtZSwgemlwQ2xhc3NlcywgaW5PdXRGb3VuZCk7Ci0KLSAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIENsYXNzUmVhZGVyPiBlbnRyeSA6IHppcENsYXNzZXMuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGVudHJ5LmdldEtleSgpOwotICAgICAgICAgICAgaWYgKHN1cGVyX25hbWUuZXF1YWxzKGNsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENsYXNzUmVhZGVyIGNsYXNzUmVhZGVyID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgIENsYXNzUmVhZGVyIHBhcmVudF9jciA9IGNsYXNzUmVhZGVyOwotICAgICAgICAgICAgd2hpbGUgKHBhcmVudF9jciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHBhcmVudF9uYW1lID0gaW50ZXJuYWxUb0JpbmFyeUNsYXNzTmFtZShwYXJlbnRfY3IuZ2V0U3VwZXJOYW1lKCkpOwotICAgICAgICAgICAgICAgIGlmIChwYXJlbnRfbmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG5vdCBmb3VuZAotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1cGVyX25hbWUuZXF1YWxzKHBhcmVudF9uYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBpbk91dEZvdW5kLnB1dChjbGFzc05hbWUsIGNsYXNzUmVhZGVyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBhcmVudF9jciA9IHppcENsYXNzZXMuZ2V0KHBhcmVudF9uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBEZXBlbmRlbmN5VmlzaXRvci4gVXNlZnVsIGZvciB1bml0IHRlc3RzLgotICAgICAqLwotICAgIERlcGVuZGVuY3lWaXNpdG9yIGdldFZpc2l0b3IoTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMsCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gaW5LZWVwLAotICAgICAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG91dEtlZXAsCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gaW5EZXBzLAotICAgICAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG91dERlcHMpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEZXBlbmRlbmN5VmlzaXRvcih6aXBDbGFzc2VzLCBpbktlZXAsIG91dEtlZXAsIGluRGVwcywgb3V0RGVwcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmluZHMgYWxsIGRlcGVuZGVuY2llcyBmb3IgYWxsIGNsYXNzZXMgaW4ga2VlcENsYXNzZXMgd2hpY2ggYXJlIGFsc28KLSAgICAgKiBsaXN0ZWQgaW4gemlwQ2xhc3Nlcy4gUmV0dXJucyBhIG1hcCBvZiBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3VuZC4KLSAgICAgKi8KLSAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZmluZERlcHMoTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMsCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gaW5PdXRLZWVwQ2xhc3NlcykgewotCi0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZGVwcyA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gbmV3X2RlcHMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG5ld19rZWVwID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB0ZW1wID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLQotICAgICAgICBEZXBlbmRlbmN5VmlzaXRvciB2aXNpdG9yID0gZ2V0VmlzaXRvcih6aXBDbGFzc2VzLAotICAgICAgICAgICAgICAgIGluT3V0S2VlcENsYXNzZXMsIG5ld19rZWVwLAotICAgICAgICAgICAgICAgIGRlcHMsIG5ld19kZXBzKTsKLQotICAgICAgICBmb3IgKENsYXNzUmVhZGVyIGNyIDogaW5PdXRLZWVwQ2xhc3Nlcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgY3IuYWNjZXB0KHZpc2l0b3IsIDAgLyogZmxhZ3MgKi8pOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKG5ld19kZXBzLnNpemUoKSA+IDAgfHwgbmV3X2tlZXAuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgZGVwcy5wdXRBbGwobmV3X2RlcHMpOwotICAgICAgICAgICAgaW5PdXRLZWVwQ2xhc3Nlcy5wdXRBbGwobmV3X2tlZXApOwotCi0gICAgICAgICAgICB0ZW1wLmNsZWFyKCk7Ci0gICAgICAgICAgICB0ZW1wLnB1dEFsbChuZXdfZGVwcyk7Ci0gICAgICAgICAgICB0ZW1wLnB1dEFsbChuZXdfa2VlcCk7Ci0gICAgICAgICAgICBuZXdfZGVwcy5jbGVhcigpOwotICAgICAgICAgICAgbmV3X2tlZXAuY2xlYXIoKTsKLSAgICAgICAgICAgIG1Mb2cuZGVidWcoIkZvdW5kICUxJGQgdG8ga2VlcCwgJTIkZCBkZXBlbmRlbmNpZXMuIiwKLSAgICAgICAgICAgICAgICAgICAgaW5PdXRLZWVwQ2xhc3Nlcy5zaXplKCksIGRlcHMuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChDbGFzc1JlYWRlciBjciA6IHRlbXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICBjci5hY2NlcHQodmlzaXRvciwgMCAvKiBmbGFncyAqLyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtTG9nLmluZm8oIkZvdW5kICUxJGQgY2xhc3NlcyB0byBrZWVwLCAlMiRkIGNsYXNzIGRlcGVuZGVuY2llcy4iLAotICAgICAgICAgICAgICAgIGluT3V0S2VlcENsYXNzZXMuc2l6ZSgpLCBkZXBzLnNpemUoKSk7Ci0KLSAgICAgICAgcmV0dXJuIGRlcHM7Ci0gICAgfQotCi0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIFZpc2l0b3IgdG8gY29sbGVjdCBhbGwgdGhlIHR5cGUgZGVwZW5kZW5jaWVzIGZyb20gYSBjbGFzcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgY2xhc3MgRGVwZW5kZW5jeVZpc2l0b3IgZXh0ZW5kcyBDbGFzc1Zpc2l0b3IgewotCi0gICAgICAgIC8qKiBBbGwgY2xhc3NlcyBmb3VuZCBpbiB0aGUgc291cmNlIEpBUi4gKi8KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gbVppcENsYXNzZXM7Ci0gICAgICAgIC8qKiBDbGFzc2VzIGZyb20gd2hpY2ggZGVwZW5kZW5jaWVzIGFyZSB0byBiZSBmb3VuZC4gKi8KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gbUluS2VlcDsKLSAgICAgICAgLyoqIERlcGVuZGVuY2llcyBhbHJlYWR5IGtub3duLiAqLwotICAgICAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBtSW5EZXBzOwotICAgICAgICAvKiogTmV3IGRlcGVuZGVuY2llcyBmb3VuZCBieSB0aGlzIHZpc2l0b3IuICovCi0gICAgICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG1PdXREZXBzOwotICAgICAgICAvKiogTmV3IGNsYXNzZXMgdG8ga2VlcCBhcy1pcyBmb3VuZCBieSB0aGlzIHZpc2l0b3IuICovCi0gICAgICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG1PdXRLZWVwOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IHZpc2l0b3IgdGhhdCB3aWxsIGZpbmQgYWxsIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSB2aXNpdGVkIGNsYXNzLgotICAgICAgICAgKiBUeXBlcyB3aGljaCBhcmUgYWxyZWFkeSBpbiB0aGUgemlwQ2xhc3Nlcywga2VlcENsYXNzZXMgb3IgaW5EZXBzIGFyZSBub3QgbWFya2VkLgotICAgICAgICAgKiBOZXcgZGVwZW5kZW5jaWVzIGFyZSBtYXJrZWQgaW4gb3V0RGVwcy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHppcENsYXNzZXMgQWxsIGNsYXNzZXMgZm91bmQgaW4gdGhlIHNvdXJjZSBKQVIuCi0gICAgICAgICAqIEBwYXJhbSBpbktlZXAgQ2xhc3NlcyBmcm9tIHdoaWNoIGRlcGVuZGVuY2llcyBhcmUgdG8gYmUgZm91bmQuCi0gICAgICAgICAqIEBwYXJhbSBpbkRlcHMgRGVwZW5kZW5jaWVzIGFscmVhZHkga25vd24uCi0gICAgICAgICAqIEBwYXJhbSBvdXREZXBzIE5ldyBkZXBlbmRlbmNpZXMgZm91bmQgYnkgdGhpcyB2aXNpdG9yLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIERlcGVuZGVuY3lWaXNpdG9yKE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzLAotICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBpbktlZXAsCi0gICAgICAgICAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG91dEtlZXAsCi0gICAgICAgICAgICAgICAgTWFwPFN0cmluZyxDbGFzc1JlYWRlcj4gaW5EZXBzLAotICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsQ2xhc3NSZWFkZXI+IG91dERlcHMpIHsKLSAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgICAgICBtWmlwQ2xhc3NlcyA9IHppcENsYXNzZXM7Ci0gICAgICAgICAgICBtSW5LZWVwID0gaW5LZWVwOwotICAgICAgICAgICAgbU91dEtlZXAgPSBvdXRLZWVwOwotICAgICAgICAgICAgbUluRGVwcyA9IGluRGVwczsKLSAgICAgICAgICAgIG1PdXREZXBzID0gb3V0RGVwczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25zaWRlcnMgdGhlIGdpdmVuIGNsYXNzIG5hbWUgYXMgYSBkZXBlbmRlbmN5LgotICAgICAgICAgKiBJZiBpdCBkb2VzLCBhZGQgdG8gdGhlIG1PdXREZXBzIG1hcC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIGNvbnNpZGVyTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNsYXNzTmFtZSA9IGludGVybmFsVG9CaW5hcnlDbGFzc05hbWUoY2xhc3NOYW1lKTsKLQotICAgICAgICAgICAgLy8gZXhjbHVkZSBjbGFzc2VzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZm91bmQgb3IgYXJlIG1hcmtlZCB0byBiZSBleGNsdWRlZAotICAgICAgICAgICAgaWYgKG1JbktlZXAuY29udGFpbnNLZXkoY2xhc3NOYW1lKSB8fAotICAgICAgICAgICAgICAgICAgICBtT3V0S2VlcC5jb250YWluc0tleShjbGFzc05hbWUpIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1JbkRlcHMuY29udGFpbnNLZXkoY2xhc3NOYW1lKSB8fAotICAgICAgICAgICAgICAgICAgICBtT3V0RGVwcy5jb250YWluc0tleShjbGFzc05hbWUpIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1FeGNsdWRlZENsYXNzZXMuY29udGFpbnMoZ2V0QmFzZU5hbWUoY2xhc3NOYW1lKSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGV4Y2x1ZGUgY2xhc3NlcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgSkFSIGZpbGUgYmVpbmcgZXhhbWluZWQKLSAgICAgICAgICAgIENsYXNzUmVhZGVyIGNyID0gbVppcENsYXNzZXMuZ2V0KGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICBpZiAoY3IgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAvLyBleGNsdWRlIGNsYXNzZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgZGVmYXVsdCBKUkUgKHRoZSBvbmUgZXhlY3V0aW5nIHRoaXMgcHJvZ3JhbSkKLSAgICAgICAgICAgICAgICBpZiAoZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpLmxvYWRDbGFzcyhjbGFzc05hbWUpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIGlnbm9yZQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBhY2NlcHQgdGhpcyBjbGFzczoKLSAgICAgICAgICAgIC8vIC0gYW5kcm9pZCBjbGFzc2VzIGFyZSBhZGRlZCB0byBkZXBlbmRlbmNpZXMKLSAgICAgICAgICAgIC8vIC0gbm9uLWFuZHJvaWQgY2xhc3NlcyBhcmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgY2xhc3NlcyB0byBrZWVwIGFzLWlzICh0aGV5IGRvbid0IG5lZWQKLSAgICAgICAgICAgIC8vICAgdG8gYmUgc3R1YmJlZCkuCi0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lLmluZGV4T2YoImFuZHJvaWQiKSA+PSAwKSB7ICAvLyBUT0RPIG1ha2UgY29uZmlndXJhYmxlCi0gICAgICAgICAgICAgICAgbU91dERlcHMucHV0KGNsYXNzTmFtZSwgY3IpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtT3V0S2VlcC5wdXQoY2xhc3NOYW1lLCBjcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIHRoaXMgYXJyYXkgb2YgbmFtZXMgdXNpbmcgY29uc2lkZXJOYW1lKCkuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBjb25zaWRlck5hbWVzKFN0cmluZ1tdIGNsYXNzTmFtZXMpIHsKLSAgICAgICAgICAgIGlmIChjbGFzc05hbWVzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBjbGFzc05hbWUgOiBjbGFzc05hbWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZShjbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25zaWRlcnMgdGhpcyBzaWduYXR1cmUgb3IgdHlwZSBzaWduYXR1cmUgYnkgaW52b2tpbmcgdGhlIHtAbGluayBTaWduYXR1cmVWaXNpdG9yfQotICAgICAgICAgKiBvbiBpdC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIGNvbnNpZGVyU2lnbmF0dXJlKFN0cmluZyBzaWduYXR1cmUpIHsKLSAgICAgICAgICAgIGlmIChzaWduYXR1cmUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFNpZ25hdHVyZVJlYWRlciBzciA9IG5ldyBTaWduYXR1cmVSZWFkZXIoc2lnbmF0dXJlKTsKLSAgICAgICAgICAgICAgICAvLyBTaWduYXR1cmVSZWFkZXIuYWNjZXB0IHdpbGwgY2FsbCBhY2Nlc3NUeXBlIHNvIHdlIGRvbid0IHJlYWxseSBoYXZlCi0gICAgICAgICAgICAgICAgLy8gdG8gZGlmZmVyZW50aWF0ZSB3aGVyZSB0aGUgc2lnbmF0dXJlIGNvbWVzIGZyb20uCi0gICAgICAgICAgICAgICAgc3IuYWNjZXB0KG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIHRoaXMge0BsaW5rIFR5cGV9LiBGb3IgYXJyYXlzLCB0aGUgZWxlbWVudCB0eXBlIGlzIGNvbnNpZGVyZWQuCi0gICAgICAgICAqIElmIHRoZSB0eXBlIGlzIGFuIG9iamVjdCwgaXQncyBpbnRlcm5hbCBuYW1lIGlzIGNvbnNpZGVyZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBjb25zaWRlclR5cGUoVHlwZSB0KSB7Ci0gICAgICAgICAgICBpZiAodCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHQuZ2V0U29ydCgpID09IFR5cGUuQVJSQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgdCA9IHQuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHQuZ2V0U29ydCgpID09IFR5cGUuT0JKRUNUKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZSh0LmdldEludGVybmFsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIGEgZGVzY3JpcHRvciBzdHJpbmcuIFRoZSBkZXNjcmlwdG9yIGlzIGNvbnZlcnRlZCB0byBhIHtAbGluayBUeXBlfQotICAgICAgICAgKiBhbmQgdGhlbiBjb25zaWRlclR5cGUoKSBpcyBpbnZva2VkLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgY29uc2lkZXJEZXNjKFN0cmluZyBkZXNjKSB7Ci0gICAgICAgICAgICBpZiAoZGVzYyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgVHlwZSB0ID0gVHlwZS5nZXRUeXBlKGRlc2MpOwotICAgICAgICAgICAgICAgICAgICBjb25zaWRlclR5cGUodCk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlLCBub3QgYSB2YWxpZCB0eXBlLgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIGdldEJhc2VOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICAgICAgICAgIGludCBwb3MgPSBjbGFzc05hbWUuaW5kZXhPZignJCcpOwotICAgICAgICAgICAgaWYgKHBvcyA+IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnN1YnN0cmluZygwLCBwb3MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAvLyAtLS0gQ2xhc3NWaXNpdG9yLCBGaWVsZFZpc2l0b3IKLSAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgLy8gVmlzaXRzIGEgY2xhc3MgaGVhZGVyCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChpbnQgdmVyc2lvbiwgaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsCi0gICAgICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nIHN1cGVyTmFtZSwgU3RyaW5nW10gaW50ZXJmYWNlcykgewotICAgICAgICAgICAgLy8gc2lnbmF0dXJlIGlzIHRoZSBzaWduYXR1cmUgb2YgdGhpcyBjbGFzcy4gTWF5IGJlIG51bGwgaWYgdGhlIGNsYXNzIGlzIG5vdCBhIGdlbmVyaWMKLSAgICAgICAgICAgIC8vIG9uZSwgYW5kIGRvZXMgbm90IGV4dGVuZCBvciBpbXBsZW1lbnQgZ2VuZXJpYyBjbGFzc2VzIG9yIGludGVyZmFjZXMuCi0KLSAgICAgICAgICAgIGlmIChzaWduYXR1cmUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnNpZGVyU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHN1cGVyTmFtZSBpcyB0aGUgaW50ZXJuYWwgb2YgbmFtZSBvZiB0aGUgc3VwZXIgY2xhc3MgKHNlZSBnZXRJbnRlcm5hbE5hbWUpLgotICAgICAgICAgICAgLy8gRm9yIGludGVyZmFjZXMsIHRoZSBzdXBlciBjbGFzcyBpcyBPYmplY3QuIE1heSBiZSBudWxsIGJ1dCBvbmx5IGZvciB0aGUgT2JqZWN0IGNsYXNzLgotICAgICAgICAgICAgY29uc2lkZXJOYW1lKHN1cGVyTmFtZSk7Ci0KLSAgICAgICAgICAgIC8vIGludGVyZmFjZXMgaXMgdGhlIGludGVybmFsIG5hbWVzIG9mIHRoZSBjbGFzcydzIGludGVyZmFjZXMgKHNlZSBnZXRJbnRlcm5hbE5hbWUpLgotICAgICAgICAgICAgLy8gTWF5IGJlIG51bGwuCi0gICAgICAgICAgICBjb25zaWRlck5hbWVzKGludGVyZmFjZXMpOwotICAgICAgICB9Ci0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0QW5ub3RhdGlvbihTdHJpbmcgZGVzYywgYm9vbGVhbiB2aXNpYmxlKSB7Ci0gICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSBjbGFzcyBkZXNjcmlwdG9yIG9mIHRoZSBhbm5vdGF0aW9uIGNsYXNzLgotICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBNeUFubm90YXRpb25WaXNpdG9yKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXRBdHRyaWJ1dGUoQXR0cmlidXRlIGF0dHIpIHsKLSAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFZpc2l0cyB0aGUgZW5kIG9mIGEgY2xhc3MKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RW5kKCkgewotICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBNeUZpZWxkVmlzaXRvciBleHRlbmRzIEZpZWxkVmlzaXRvciB7Ci0KLSAgICAgICAgICAgIHB1YmxpYyBNeUZpZWxkVmlzaXRvcigpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBBbm5vdGF0aW9uVmlzaXRvciB2aXNpdEFubm90YXRpb24oU3RyaW5nIGRlc2MsIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIGFubm90YXRpb24gY2xhc3MuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXlBbm5vdGF0aW9uVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0QXR0cmlidXRlKEF0dHJpYnV0ZSBhdHRyKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBWaXNpdHMgdGhlIGVuZCBvZiBhIGNsYXNzCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RW5kKCkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgRmllbGRWaXNpdG9yIHZpc2l0RmllbGQoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIE9iamVjdCB2YWx1ZSkgewotICAgICAgICAgICAgLy8gZGVzYyBpcyB0aGUgZmllbGQncyBkZXNjcmlwdG9yIChzZWUgVHlwZSkuCi0gICAgICAgICAgICBjb25zaWRlckRlc2MoZGVzYyk7Ci0KLSAgICAgICAgICAgIC8vIHNpZ25hdHVyZSBpcyB0aGUgZmllbGQncyBzaWduYXR1cmUuIE1heSBiZSBudWxsIGlmIHRoZSBmaWVsZCdzIHR5cGUgZG9lcyBub3QgdXNlCi0gICAgICAgICAgICAvLyBnZW5lcmljIHR5cGVzLgotICAgICAgICAgICAgY29uc2lkZXJTaWduYXR1cmUoc2lnbmF0dXJlKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBNeUZpZWxkVmlzaXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0SW5uZXJDbGFzcyhTdHJpbmcgbmFtZSwgU3RyaW5nIG91dGVyTmFtZSwgU3RyaW5nIGlubmVyTmFtZSwgaW50IGFjY2VzcykgewotICAgICAgICAgICAgLy8gbmFtZSBpcyB0aGUgaW50ZXJuYWwgbmFtZSBvZiBhbiBpbm5lciBjbGFzcyAoc2VlIGdldEludGVybmFsTmFtZSkuCi0gICAgICAgICAgICBjb25zaWRlck5hbWUobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIE1ldGhvZFZpc2l0b3IgdmlzaXRNZXRob2QoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIFN0cmluZ1tdIGV4Y2VwdGlvbnMpIHsKLSAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIG1ldGhvZCdzIGRlc2NyaXB0b3IgKHNlZSBUeXBlKS4KLSAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIC8vIHNpZ25hdHVyZSBpcyB0aGUgbWV0aG9kJ3Mgc2lnbmF0dXJlLiBNYXkgYmUgbnVsbCBpZiB0aGUgbWV0aG9kIHBhcmFtZXRlcnMsIHJldHVybgotICAgICAgICAgICAgLy8gdHlwZSBhbmQgZXhjZXB0aW9ucyBkbyBub3QgdXNlIGdlbmVyaWMgdHlwZXMuCi0gICAgICAgICAgICBjb25zaWRlclNpZ25hdHVyZShzaWduYXR1cmUpOwotCi0gICAgICAgICAgICByZXR1cm4gbmV3IE15TWV0aG9kVmlzaXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0T3V0ZXJDbGFzcyhTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0U291cmNlKFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZWJ1ZykgewotICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICB9Ci0KLQotICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgLy8gLS0tIE1ldGhvZFZpc2l0b3IKLSAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBNeU1ldGhvZFZpc2l0b3IgZXh0ZW5kcyBNZXRob2RWaXNpdG9yIHsKLQotICAgICAgICAgICAgcHVibGljIE15TWV0aG9kVmlzaXRvcigpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOwotICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0QW5ub3RhdGlvbkRlZmF1bHQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeUFubm90YXRpb25WaXNpdG9yKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRDb2RlKCkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gZmllbGQgaW5zdHJ1Y3Rpb24KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRGaWVsZEluc24oaW50IG9wY29kZSwgU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MpIHsKLSAgICAgICAgICAgICAgICAvLyBuYW1lIGlzIHRoZSBmaWVsZCdzIG5hbWUuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJOYW1lKG5hbWUpOwotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGZpZWxkJ3MgZGVzY3JpcHRvciAoc2VlIFR5cGUpLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEZyYW1lKGludCB0eXBlLCBpbnQgbG9jYWwsIE9iamVjdFtdIGxvY2FsMiwgaW50IHN0YWNrLCBPYmplY3RbXSBzdGFjazIpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRJaW5jSW5zbihpbnQgdmFyLCBpbnQgaW5jcmVtZW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhbiBJSU5DIGluc3RydWN0aW9uCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRJbnNuKGludCBvcGNvZGUpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzIC0tIGEgemVybyBvcGVyYW5kIGluc3RydWN0aW9uCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRJbnRJbnNuKGludCBvcGNvZGUsIGludCBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhIHNpbmdsZSBpbnQgb3BlcmFuZCBpbnN0cnVjdGlvbgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0SnVtcEluc24oaW50IG9wY29kZSwgTGFiZWwgbGFiZWwpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzIC0tIGEganVtcCBpbnN0cnVjdGlvbgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TGFiZWwoTGFiZWwgbGFiZWwpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzIC0tIGEgbGFiZWwgdGFyZ2V0Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGluc3RydWN0aW9uIHRvIGxvYWQgYSBjb25zdGFudCBmcm9tIHRoZSBzdGFjawotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdExkY0luc24oT2JqZWN0IGNzdCkgewotICAgICAgICAgICAgICAgIGlmIChjc3QgaW5zdGFuY2VvZiBUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyVHlwZSgoVHlwZSkgY3N0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRMaW5lTnVtYmVyKGludCBsaW5lLCBMYWJlbCBzdGFydCkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdExvY2FsVmFyaWFibGUoU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlLCBMYWJlbCBzdGFydCwgTGFiZWwgZW5kLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSB0eXBlIGRlc2NyaXB0b3Igb2YgdGhpcyBsb2NhbCB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICBjb25zaWRlckRlc2MoZGVzYyk7Ci0gICAgICAgICAgICAgICAgLy8gc2lnbmF0dXJlIGlzIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGlzIGxvY2FsIHZhcmlhYmxlLiBNYXkgYmUgbnVsbCBpZiB0aGUgbG9jYWwKLSAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSB0eXBlIGRvZXMgbm90IHVzZSBnZW5lcmljIHR5cGVzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRMb29rdXBTd2l0Y2hJbnNuKExhYmVsIGRmbHQsIGludFtdIGtleXMsIExhYmVsW10gbGFiZWxzKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhIGxvb2t1cCBzd2l0Y2ggaW5zdHJ1Y3Rpb24KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE1heHMoaW50IG1heFN0YWNrLCBpbnQgbWF4TG9jYWxzKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpbnN0cnVjdGlvbiB0aGF0IGludm9rZXMgYSBtZXRob2QKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRNZXRob2RJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBvd25lciBpcyB0aGUgaW50ZXJuYWwgbmFtZSBvZiB0aGUgbWV0aG9kJ3Mgb3duZXIgY2xhc3MKLSAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUob3duZXIpOwotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIG1ldGhvZCdzIGRlc2NyaXB0b3IgKHNlZSBUeXBlKS4KLSAgICAgICAgICAgICAgICBjb25zaWRlckRlc2MoZGVzYyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGluc3RydWN0aW9uIG11bHRpYW5ld2FycmF5LCB3aGF0ZXZlciB0aGF0IGlzCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TXVsdGlBTmV3QXJyYXlJbnNuKFN0cmluZyBkZXNjLCBpbnQgZGltcykgewotCi0gICAgICAgICAgICAgICAgLy8gZGVzYyBhbiBhcnJheSB0eXBlIGRlc2NyaXB0b3IuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBBbm5vdGF0aW9uVmlzaXRvciB2aXNpdFBhcmFtZXRlckFubm90YXRpb24oaW50IHBhcmFtZXRlciwgU3RyaW5nIGRlc2MsCi0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIGFubm90YXRpb24gY2xhc3MuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXlBbm5vdGF0aW9uVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0VGFibGVTd2l0Y2hJbnNuKGludCBtaW4sIGludCBtYXgsIExhYmVsIGRmbHQsIExhYmVsLi4uIGxhYmVscykgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gdGFibGUgc3dpdGNoIGluc3RydWN0aW9uCi0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFRyeUNhdGNoQmxvY2soTGFiZWwgc3RhcnQsIExhYmVsIGVuZCwgTGFiZWwgaGFuZGxlciwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgICAgICAgICAvLyB0eXBlIGlzIHRoZSBpbnRlcm5hbCBuYW1lIG9mIHRoZSB0eXBlIG9mIGV4Y2VwdGlvbnMgaGFuZGxlZCBieSB0aGUgaGFuZGxlciwKLSAgICAgICAgICAgICAgICAvLyBvciBudWxsIHRvIGNhdGNoIGFueSBleGNlcHRpb25zIChmb3IgImZpbmFsbHkiIGJsb2NrcykuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJOYW1lKHR5cGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0eXBlIGluc3RydWN0aW9uCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0VHlwZUluc24oaW50IG9wY29kZSwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgICAgICAgICAvLyB0eXBlIGlzIHRoZSBvcGVyYW5kIG9mIHRoZSBpbnN0cnVjdGlvbiB0byBiZSB2aXNpdGVkLiBUaGlzIG9wZXJhbmQgbXVzdCBiZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBpbnRlcm5hbCBuYW1lIG9mIGFuIG9iamVjdCBvciBhcnJheSBjbGFzcy4KLSAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUodHlwZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRWYXJJbnNuKGludCBvcGNvZGUsIGludCB2YXIpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzIC0tIGxvY2FsIHZhcmlhYmxlIGluc3RydWN0aW9uCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGNsYXNzIE15U2lnbmF0dXJlVmlzaXRvciBleHRlbmRzIFNpZ25hdHVyZVZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlTaWduYXR1cmVWaXNpdG9yKCkgewotICAgICAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gLS0tIFNpZ25hdHVyZVZpc2l0b3IKLSAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICBwcml2YXRlIFN0cmluZyBtQ3VycmVudFNpZ25hdHVyZUNsYXNzID0gbnVsbDsKLQotICAgICAgICAgICAgLy8gU3RhcnRzIHRoZSB2aXNpdCBvZiBhIHNpZ25hdHVyZSBjb3JyZXNwb25kaW5nIHRvIGEgY2xhc3Mgb3IgaW50ZXJmYWNlIHR5cGUKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRDbGFzc1R5cGUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgICAgICAgICBtQ3VycmVudFNpZ25hdHVyZUNsYXNzID0gbmFtZTsKLSAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUobmFtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFZpc2l0cyBhbiBpbm5lciBjbGFzcwotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdElubmVyQ2xhc3NUeXBlKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50U2lnbmF0dXJlQ2xhc3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNpZ25hdHVyZUNsYXNzICs9ICIkIiArIG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZShtQ3VycmVudFNpZ25hdHVyZUNsYXNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFNpZ25hdHVyZVZpc2l0b3IgdmlzaXRBcnJheVR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEJhc2VUeXBlKGNoYXIgZGVzY3JpcHRvcikgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gYSBwcmltaXRpdmUgdHlwZSwgaWdub3JlZAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0Q2xhc3NCb3VuZCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0RXhjZXB0aW9uVHlwZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0Rm9ybWFsVHlwZVBhcmFtZXRlcihTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdEludGVyZmFjZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0SW50ZXJmYWNlQm91bmQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFBhcmFtZXRlclR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFJldHVyblR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFN1cGVyY2xhc3MoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFR5cGVBcmd1bWVudChjaGFyIHdpbGRjYXJkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVWYXJpYWJsZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVBcmd1bWVudCgpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAvLyAtLS0gQW5ub3RhdGlvblZpc2l0b3IKLSAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBNeUFubm90YXRpb25WaXNpdG9yIGV4dGVuZHMgQW5ub3RhdGlvblZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlBbm5vdGF0aW9uVmlzaXRvcigpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBWaXNpdHMgYSBwcmltaXRpdmUgdmFsdWUgb2YgYW4gYW5ub3RhdGlvbgotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgdGhlIGFjdHVhbCB2YWx1ZSwgd2hvc2UgdHlwZSBtdXN0IGJlIEJ5dGUsIEJvb2xlYW4sIENoYXJhY3RlciwgU2hvcnQsCi0gICAgICAgICAgICAgICAgLy8gSW50ZWdlciwgTG9uZywgRmxvYXQsIERvdWJsZSwgU3RyaW5nIG9yIFR5cGUKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyVHlwZSgoVHlwZSkgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIG5lc3RlZCBhbm5vdGF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15QW5ub3RhdGlvblZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBcnJheShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXlBbm5vdGF0aW9uVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RW51bShTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsIFN0cmluZyB2YWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIGVudW1lcmF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtR2VuZXJhdG9yLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTAyNTYxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzUmVhZGVyOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5DbGFzc1dyaXRlcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLWltcG9ydCBqYXZhLnV0aWwuamFyLkphckVudHJ5OwotaW1wb3J0IGphdmEudXRpbC5qYXIuSmFyT3V0cHV0U3RyZWFtOwotCi0vKioKLSAqIENsYXNzIHRoYXQgZ2VuZXJhdGVzIGEgbmV3IEpBUiBmcm9tIGEgbGlzdCBvZiBjbGFzc2VzLCBzb21lIG9mIHdoaWNoIGFyZSB0byBiZSBrZXB0IGFzLWlzCi0gKiBhbmQgc29tZSBvZiB3aGljaCBhcmUgdG8gYmUgc3R1YmJlZCBwYXJ0aWFsbHkgb3IgdG90YWxseS4KLSAqLwotcHVibGljIGNsYXNzIEFzbUdlbmVyYXRvciB7Ci0KLSAgICAvKiogT3V0cHV0IGxvZ2dlci4gKi8KLSAgICBwcml2YXRlIGZpbmFsIExvZyBtTG9nOwotICAgIC8qKiBUaGUgcGF0aCBvZiB0aGUgZGVzdGluYXRpb24gSkFSIHRvIGNyZWF0ZS4gKi8KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtT3NEZXN0SmFyOwotICAgIC8qKiBMaXN0IG9mIGNsYXNzZXMgdG8gaW5qZWN0IGluIHRoZSBmaW5hbCBKQVIgZnJvbSBfdGhpc18gYXJjaGl2ZS4gKi8KLSAgICBwcml2YXRlIGZpbmFsIENsYXNzPD8+W10gbUluamVjdENsYXNzZXM7Ci0gICAgLyoqIFRoZSBzZXQgb2YgbWV0aG9kcyB0byBzdHViIG91dC4gKi8KLSAgICBwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IG1TdHViTWV0aG9kczsKLSAgICAvKiogQWxsIGNsYXNzZXMgdG8gb3V0cHV0IGFzLWlzLCBleGNlcHQgaWYgdGhleSBoYXZlIG5hdGl2ZSBtZXRob2RzLiAqLwotICAgIHByaXZhdGUgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG1LZWVwOwotICAgIC8qKiBBbGwgZGVwZW5kZW5jaWVzIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWx5IHN0dWJiZWQuICovCi0gICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gbURlcHM7Ci0gICAgLyoqIENvdW50ZXIgb2YgbnVtYmVyIG9mIGNsYXNzZXMgcmVuYW1lZCBkdXJpbmcgdHJhbnNmb3JtLiAqLwotICAgIHByaXZhdGUgaW50IG1SZW5hbWVDb3VudDsKLSAgICAvKiogRlFDTiBOYW1lcyBvZiB0aGUgY2xhc3NlcyB0byByZW5hbWU6IG1hcCBvbGQtRlFDTiA9PiBuZXctRlFDTiAqLwotICAgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbVJlbmFtZUNsYXNzZXM7Ci0gICAgLyoqIEZRQ04gTmFtZXMgb2YgIm9sZCIgY2xhc3NlcyB0aGF0IHdlcmUgTk9UIHJlbmFtZWQuIFRoaXMgc3RhcnRzIHdpdGggdGhlIGZ1bGwgbGlzdCBvZgotICAgICAqICBvbGQtRlFDTiB0byByZW5hbWUgYW5kIHRoZXkgZ2V0IGVyYXNlZCBhcyB0aGV5IGdldCByZW5hbWVkLiBBdCB0aGUgZW5kLCBjbGFzc2VzIHN0aWxsCi0gICAgICogIGxlZnQgaGVyZSBhcmUgbm90IGluIHRoZSBjb2RlIGJhc2UgYW55bW9yZSBhbmQgdGh1cyB3ZXJlIG5vdCByZW5hbWVkLiAqLwotICAgIHByaXZhdGUgSGFzaFNldDxTdHJpbmc+IG1DbGFzc2VzTm90UmVuYW1lZDsKLSAgICAvKiogQSBtYXAgeyBGUUNOID0+IHNldCB7IGxpc3Qgb2YgcmV0dXJuIHR5cGVzIHRvIGRlbGV0ZSBmcm9tIHRoZSBGUUNOIH0gfS4gKi8KLSAgICBwcml2YXRlIEhhc2hNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gbURlbGV0ZVJldHVybnM7Ci0gICAgLyoqIEEgbWFwIHsgRlFDTiA9PiBzZXQgeyBtZXRob2QgbmFtZXMgfSB9IG9mIG1ldGhvZHMgdG8gcmV3cml0ZSBhcyBkZWxlZ2F0ZXMuCi0gICAgICogIFRoZSBzcGVjaWFsIG5hbWUge0BsaW5rIERlbGVnYXRlQ2xhc3NBZGFwdGVyI0FMTF9OQVRJVkVTfSBjYW4gYmUgdXNlZCBhcyBpbiBpbnRlcm5hbCBzZXQuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IG1EZWxlZ2F0ZU1ldGhvZHM7Ci0gICAgLyoqIEZRQ04gTmFtZXMgb2YgY2xhc3NlcyB0byByZWZhY3Rvci4gQWxsIHJlZmVyZW5jZSB0byBvbGQtRlFDTiB3aWxsIGJlIHVwZGF0ZWQgdG8gbmV3LUZRQ04uCi0gICAgICogbWFwIG9sZC1GUUNOID0+IG5ldy1GUUNOICovCi0gICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtUmVmYWN0b3JDbGFzc2VzOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBnZW5lcmF0b3IgdGhhdCBjYW4gZ2VuZXJhdGUgdGhlIG91dHB1dCBKQVIgd2l0aCB0aGUgc3R1YmJlZCBjbGFzc2VzLgotICAgICAqCi0gICAgICogQHBhcmFtIGxvZyBPdXRwdXQgbG9nZ2VyLgotICAgICAqIEBwYXJhbSBvc0Rlc3RKYXIgVGhlIHBhdGggb2YgdGhlIGRlc3RpbmF0aW9uIEpBUiB0byBjcmVhdGUuCi0gICAgICogQHBhcmFtIGNyZWF0ZUluZm8gQ3JlYXRpb24gcGFyYW1ldGVycy4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQXNtR2VuZXJhdG9yKExvZyBsb2csIFN0cmluZyBvc0Rlc3RKYXIsIElDcmVhdGVJbmZvIGNyZWF0ZUluZm8pIHsKLSAgICAgICAgbUxvZyA9IGxvZzsKLSAgICAgICAgbU9zRGVzdEphciA9IG9zRGVzdEphcjsKLSAgICAgICAgbUluamVjdENsYXNzZXMgPSBjcmVhdGVJbmZvLmdldEluamVjdGVkQ2xhc3NlcygpOwotICAgICAgICBtU3R1Yk1ldGhvZHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KEFycmF5cy5hc0xpc3QoY3JlYXRlSW5mby5nZXRPdmVycmlkZGVuTWV0aG9kcygpKSk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIHRoZSBtYXAvc2V0IG9mIG1ldGhvZHMgdG8gY2hhbmdlIHRvIGRlbGVnYXRlcwotICAgICAgICBtRGVsZWdhdGVNZXRob2RzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4oKTsKLSAgICAgICAgZm9yIChTdHJpbmcgc2lnbmF0dXJlIDogY3JlYXRlSW5mby5nZXREZWxlZ2F0ZU1ldGhvZHMoKSkgewotICAgICAgICAgICAgaW50IHBvcyA9IHNpZ25hdHVyZS5pbmRleE9mKCcjJyk7Ci0gICAgICAgICAgICBpZiAocG9zIDw9IDAgfHwgcG9zID49IHNpZ25hdHVyZS5sZW5ndGgoKSAtIDEpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBiaW5hcnlUb0ludGVybmFsQ2xhc3NOYW1lKHNpZ25hdHVyZS5zdWJzdHJpbmcoMCwgcG9zKSk7Ci0gICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IHNpZ25hdHVyZS5zdWJzdHJpbmcocG9zICsgMSk7Ci0gICAgICAgICAgICBTZXQ8U3RyaW5nPiBtZXRob2RzID0gbURlbGVnYXRlTWV0aG9kcy5nZXQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIGlmIChtZXRob2RzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtZXRob2RzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotICAgICAgICAgICAgICAgIG1EZWxlZ2F0ZU1ldGhvZHMucHV0KGNsYXNzTmFtZSwgbWV0aG9kcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZXRob2RzLmFkZChtZXRob2ROYW1lKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKFN0cmluZyBjbGFzc05hbWUgOiBjcmVhdGVJbmZvLmdldERlbGVnYXRlQ2xhc3NOYXRpdmVzKCkpIHsKLSAgICAgICAgICAgIGNsYXNzTmFtZSA9IGJpbmFyeVRvSW50ZXJuYWxDbGFzc05hbWUoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIFNldDxTdHJpbmc+IG1ldGhvZHMgPSBtRGVsZWdhdGVNZXRob2RzLmdldChjbGFzc05hbWUpOwotICAgICAgICAgICAgaWYgKG1ldGhvZHMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1ldGhvZHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgICAgICAgICAgbURlbGVnYXRlTWV0aG9kcy5wdXQoY2xhc3NOYW1lLCBtZXRob2RzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1ldGhvZHMuYWRkKERlbGVnYXRlQ2xhc3NBZGFwdGVyLkFMTF9OQVRJVkVTKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENyZWF0ZSB0aGUgbWFwIG9mIGNsYXNzZXMgdG8gcmVuYW1lLgotICAgICAgICBtUmVuYW1lQ2xhc3NlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotICAgICAgICBtQ2xhc3Nlc05vdFJlbmFtZWQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgIFN0cmluZ1tdIHJlbmFtZUNsYXNzZXMgPSBjcmVhdGVJbmZvLmdldFJlbmFtZWRDbGFzc2VzKCk7Ci0gICAgICAgIGludCBuID0gcmVuYW1lQ2xhc3Nlcy5sZW5ndGg7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArPSAyKSB7Ci0gICAgICAgICAgICBhc3NlcnQgaSArIDEgPCBuOwotICAgICAgICAgICAgLy8gVGhlIEFTTSBjbGFzcyBuYW1lcyB1c2VzICIvIiBzZXBhcmF0b3JzLCB3aGVyZWFzIHJlZ3VsYXIgRlFDTiB1c2UgIi4iCi0gICAgICAgICAgICBTdHJpbmcgb2xkRnFjbiA9IGJpbmFyeVRvSW50ZXJuYWxDbGFzc05hbWUocmVuYW1lQ2xhc3Nlc1tpXSk7Ci0gICAgICAgICAgICBTdHJpbmcgbmV3RnFjbiA9IGJpbmFyeVRvSW50ZXJuYWxDbGFzc05hbWUocmVuYW1lQ2xhc3Nlc1tpICsgMV0pOwotICAgICAgICAgICAgbVJlbmFtZUNsYXNzZXMucHV0KG9sZEZxY24sIG5ld0ZxY24pOwotICAgICAgICAgICAgbUNsYXNzZXNOb3RSZW5hbWVkLmFkZChvbGRGcWNuKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENyZWF0ZSBhIG1hcCBvZiBjbGFzc2VzIHRvIGJlIHJlZmFjdG9yZWQuCi0gICAgICAgIG1SZWZhY3RvckNsYXNzZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLSAgICAgICAgU3RyaW5nW10gcmVmYWN0b3JDbGFzc2VzID0gY3JlYXRlSW5mby5nZXRKYXZhUGtnQ2xhc3NlcygpOwotICAgICAgICBuID0gcmVmYWN0b3JDbGFzc2VzLmxlbmd0aDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpICs9IDIpIHsKLSAgICAgICAgICAgIGFzc2VydCBpICsgMSA8IG47Ci0gICAgICAgICAgICBTdHJpbmcgb2xkRnFjbiA9IGJpbmFyeVRvSW50ZXJuYWxDbGFzc05hbWUocmVmYWN0b3JDbGFzc2VzW2ldKTsKLSAgICAgICAgICAgIFN0cmluZyBuZXdGcWNuID0gYmluYXJ5VG9JbnRlcm5hbENsYXNzTmFtZShyZWZhY3RvckNsYXNzZXNbaSArIDFdKTsKLSAgICAgICAgICAgIG1SZWZhY3RvckNsYXNzZXMucHV0KG9sZEZxY24sIG5ld0ZxY24pOzsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNyZWF0ZSB0aGUgbWFwIG9mIHJlbmFtZWQgY2xhc3MgLT4gcmV0dXJuIHR5cGUgb2YgbWV0aG9kIHRvIGRlbGV0ZS4KLSAgICAgICAgbURlbGV0ZVJldHVybnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PigpOwotICAgICAgICBTdHJpbmdbXSBkZWxldGVSZXR1cm5zID0gY3JlYXRlSW5mby5nZXREZWxldGVSZXR1cm5zKCk7Ci0gICAgICAgIFNldDxTdHJpbmc+IHJldHVyblR5cGVzID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIHJlbmFtZWRDbGFzcyA9IG51bGw7Ci0gICAgICAgIGZvciAoU3RyaW5nIGNsYXNzTmFtZSA6IGRlbGV0ZVJldHVybnMpIHsKLSAgICAgICAgICAgIC8vIGlmIHdlIHJlYWNoIHRoZSBlbmQgb2YgYSBzZWN0aW9uLCBhZGQgaXQgdG8gdGhlIG1haW4gbWFwCi0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVHlwZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtRGVsZXRlUmV0dXJucy5wdXQocmVuYW1lZENsYXNzLCByZXR1cm5UeXBlcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmVuYW1lZENsYXNzID0gbnVsbDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaWYgdGhlIHJlbmFtZWQgY2xhc3MgaXMgbnVsbCwgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgc2VjdGlvbgotICAgICAgICAgICAgaWYgKHJlbmFtZWRDbGFzcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmVuYW1lZENsYXNzID0gYmluYXJ5VG9JbnRlcm5hbENsYXNzTmFtZShjbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBqdXN0IGEgc3RhbmRhcmQgcmV0dXJuIHR5cGUsIHdlIGFkZCBpdCB0byB0aGUgbGlzdC4KLSAgICAgICAgICAgIGlmIChyZXR1cm5UeXBlcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVHlwZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm5UeXBlcy5hZGQoYmluYXJ5VG9JbnRlcm5hbENsYXNzTmFtZShjbGFzc05hbWUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IGhhdmUgbm90IGJlZW4gcmVuYW1lZCB5ZXQuCi0gICAgICogPHAvPgotICAgICAqIFRoZSBuYW1lcyBhcmUgImludGVybmFsIGNsYXNzIG5hbWVzIiByYXRoZXIgdGhhbiBGUUNOLCBpLmUuIHRoZXkgdXNlICIvIiBpbnN0ZWFkICIuIgotICAgICAqIGFzIHBhY2thZ2Ugc2VwYXJhdG9ycy4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2V0PFN0cmluZz4gZ2V0Q2xhc3Nlc05vdFJlbmFtZWQoKSB7Ci0gICAgICAgIHJldHVybiBtQ2xhc3Nlc05vdFJlbmFtZWQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXRpbGl0eSB0aGF0IHJldHVybnMgdGhlIGludGVybmFsIEFTTSBjbGFzcyBuYW1lIGZyb20gYSBmdWxseSBxdWFsaWZpZWQgYmluYXJ5IGNsYXNzCi0gICAgICogbmFtZS4gRS5nLiBpdCByZXR1cm5zIGFuZHJvaWQvdmlldy9WaWV3IGZyb20gYW5kcm9pZC52aWV3LlZpZXcuCi0gICAgICovCi0gICAgU3RyaW5nIGJpbmFyeVRvSW50ZXJuYWxDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewotICAgICAgICBpZiAoY2xhc3NOYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5yZXBsYWNlKCcuJywgJy8nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBTZXRzIHRoZSBtYXAgb2YgY2xhc3NlcyB0byBvdXRwdXQgYXMtaXMsIGV4Y2VwdCBpZiB0aGV5IGhhdmUgbmF0aXZlIG1ldGhvZHMgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRLZWVwKE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBrZWVwKSB7Ci0gICAgICAgIG1LZWVwID0ga2VlcDsKLSAgICB9Ci0KLSAgICAvKiogU2V0cyB0aGUgbWFwIG9mIGRlcGVuZGVuY2llcyB0aGF0IG11c3QgYmUgY29tcGxldGVseSBzdHViYmVkICovCi0gICAgcHVibGljIHZvaWQgc2V0RGVwcyhNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZGVwcykgewotICAgICAgICBtRGVwcyA9IGRlcHM7Ci0gICAgfQotCi0gICAgLyoqIEdldHMgdGhlIG1hcCBvZiBjbGFzc2VzIHRvIG91dHB1dCBhcy1pcywgZXhjZXB0IGlmIHRoZXkgaGF2ZSBuYXRpdmUgbWV0aG9kcyAqLwotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZ2V0S2VlcCgpIHsKLSAgICAgICAgcmV0dXJuIG1LZWVwOwotICAgIH0KLQotICAgIC8qKiBHZXRzIHRoZSBtYXAgb2YgZGVwZW5kZW5jaWVzIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWx5IHN0dWJiZWQgKi8KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGdldERlcHMoKSB7Ci0gICAgICAgIHJldHVybiBtRGVwczsKLSAgICB9Ci0KLSAgICAvKiogR2VuZXJhdGVzIHRoZSBmaW5hbCBKQVIgKi8KLSAgICBwdWJsaWMgdm9pZCBnZW5lcmF0ZSgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIGJ5dGVbXT4gYWxsID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBieXRlW10+KCk7Ci0KLSAgICAgICAgZm9yIChDbGFzczw/PiBjbGF6eiA6IG1JbmplY3RDbGFzc2VzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGNsYXNzVG9FbnRyeVBhdGgoY2xhenopOwotICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBDbGFzc0xvYWRlci5nZXRTeXN0ZW1SZXNvdXJjZUFzU3RyZWFtKG5hbWUpOwotICAgICAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoaXMpOwotICAgICAgICAgICAgYnl0ZVtdIGIgPSB0cmFuc2Zvcm0oY3IsIHRydWUgLyogc3R1Yk5hdGl2ZXNPbmx5ICovKTsKLSAgICAgICAgICAgIG5hbWUgPSBjbGFzc05hbWVUb0VudHJ5UGF0aCh0cmFuc2Zvcm1OYW1lKGNyLmdldENsYXNzTmFtZSgpKSk7Ci0gICAgICAgICAgICBhbGwucHV0KG5hbWUsIGIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIENsYXNzUmVhZGVyPiBlbnRyeSA6IG1EZXBzLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgICAgIENsYXNzUmVhZGVyIGNyID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgIGJ5dGVbXSBiID0gdHJhbnNmb3JtKGNyLCB0cnVlIC8qIHN0dWJOYXRpdmVzT25seSAqLyk7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGNsYXNzTmFtZVRvRW50cnlQYXRoKHRyYW5zZm9ybU5hbWUoY3IuZ2V0Q2xhc3NOYW1lKCkpKTsKLSAgICAgICAgICAgIGFsbC5wdXQobmFtZSwgYik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgQ2xhc3NSZWFkZXI+IGVudHJ5IDogbUtlZXAuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBlbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgYnl0ZVtdIGIgPSB0cmFuc2Zvcm0oY3IsIHRydWUgLyogc3R1Yk5hdGl2ZXNPbmx5ICovKTsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gY2xhc3NOYW1lVG9FbnRyeVBhdGgodHJhbnNmb3JtTmFtZShjci5nZXRDbGFzc05hbWUoKSkpOwotICAgICAgICAgICAgYWxsLnB1dChuYW1lLCBiKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Mb2cuaW5mbygiIyBkZXBzIGNsYXNzZXM6ICVkIiwgbURlcHMuc2l6ZSgpKTsKLSAgICAgICAgbUxvZy5pbmZvKCIjIGtlZXAgY2xhc3NlczogJWQiLCBtS2VlcC5zaXplKCkpOwotICAgICAgICBtTG9nLmluZm8oIiMgcmVuYW1lZCAgICAgOiAlZCIsIG1SZW5hbWVDb3VudCk7Ci0KLSAgICAgICAgY3JlYXRlSmFyKG5ldyBGaWxlT3V0cHV0U3RyZWFtKG1Pc0Rlc3RKYXIpLCBhbGwpOwotICAgICAgICBtTG9nLmluZm8oIkNyZWF0ZWQgSkFSIGZpbGUgJXMiLCBtT3NEZXN0SmFyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXcml0ZXMgdGhlIEpBUiBmaWxlLgotICAgICAqCi0gICAgICogQHBhcmFtIG91dFN0cmVhbSBUaGUgZmlsZSBvdXRwdXQgc3RyZWFtIHdlcmUgdG8gd3JpdGUgdGhlIEpBUi4KLSAgICAgKiBAcGFyYW0gYWxsIFRoZSBtYXAgb2YgYWxsIGNsYXNzZXMgdG8gb3V0cHV0LgotICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgYW4gSS9PIGVycm9yIGhhcyBvY2N1cnJlZAotICAgICAqLwotICAgIHZvaWQgY3JlYXRlSmFyKEZpbGVPdXRwdXRTdHJlYW0gb3V0U3RyZWFtLCBNYXA8U3RyaW5nLGJ5dGVbXT4gYWxsKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBKYXJPdXRwdXRTdHJlYW0gamFyID0gbmV3IEphck91dHB1dFN0cmVhbShvdXRTdHJlYW0pOwotICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgYnl0ZVtdPiBlbnRyeSA6IGFsbC5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGVudHJ5LmdldEtleSgpOwotICAgICAgICAgICAgSmFyRW50cnkgamFyX2VudHJ5ID0gbmV3IEphckVudHJ5KG5hbWUpOwotICAgICAgICAgICAgamFyLnB1dE5leHRFbnRyeShqYXJfZW50cnkpOwotICAgICAgICAgICAgamFyLndyaXRlKGVudHJ5LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgamFyLmNsb3NlRW50cnkoKTsKLSAgICAgICAgfQotICAgICAgICBqYXIuZmx1c2goKTsKLSAgICAgICAgamFyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXRpbGl0eSBtZXRob2QgdGhhdCBjb252ZXJ0cyBhIGZ1bGx5IHF1YWxpZmllZCBqYXZhIG5hbWUgaW50byBhIEpBUiBlbnRyeSBwYXRoCi0gICAgICogZS5nLiBmb3IgdGhlIGlucHV0ICJhbmRyb2lkLnZpZXcuVmlldyIgaXQgcmV0dXJucyAiYW5kcm9pZC92aWV3L1ZpZXcuY2xhc3MiCi0gICAgICovCi0gICAgU3RyaW5nIGNsYXNzTmFtZVRvRW50cnlQYXRoKFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5yZXBsYWNlQWxsKCJcXC4iLCAiLyIpLmNvbmNhdCgiLmNsYXNzIik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXRpbGl0eSBtZXRob2QgdG8gZ2V0IHRoZSBKQVIgZW50cnkgcGF0aCBmcm9tIGEgQ2xhc3MgbmFtZS4KLSAgICAgKiBlLmcuIGl0IHJldHVybnMgc29tZXRpbmcgbGlrZSAiY29tL2Zvby9PdXRlckNsYXNzJElubmVyQ2xhc3MxJElubmVyQ2xhc3MyLmNsYXNzIgotICAgICAqLwotICAgIHByaXZhdGUgU3RyaW5nIGNsYXNzVG9FbnRyeVBhdGgoQ2xhc3M8Pz4gY2xhenopIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAiIjsKLSAgICAgICAgQ2xhc3M8Pz4gcGFyZW50OwotICAgICAgICB3aGlsZSAoKHBhcmVudCA9IGNsYXp6LmdldEVuY2xvc2luZ0NsYXNzKCkpICE9IG51bGwpIHsKLSAgICAgICAgICAgIG5hbWUgPSAiJCIgKyBjbGF6ei5nZXRTaW1wbGVOYW1lKCkgKyBuYW1lOwotICAgICAgICAgICAgY2xhenogPSBwYXJlbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNsYXNzTmFtZVRvRW50cnlQYXRoKGNsYXp6LmdldENhbm9uaWNhbE5hbWUoKSArIG5hbWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRyYW5zZm9ybXMgYSBjbGFzcy4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhlcmUgYXJlIDMga2luZCBvZiB0cmFuc2Zvcm1hdGlvbnM6Ci0gICAgICoKLSAgICAgKiAxLSBGb3IgIm1vY2siIGRlcGVuZGVuY2llcyBjbGFzc2VzLCB3ZSB3YW50IHRvIHJlbW92ZSBhbGwgY29kZSBmcm9tIG1ldGhvZHMgYW5kIHJlcGxhY2UKLSAgICAgKiBieSBhIHN0dWIuIE5hdGl2ZSBtZXRob2RzIG11c3QgYmUgaW1wbGVtZW50ZWQgd2l0aCB0aGlzIHN0dWIgdG9vLiBBYnN0cmFjdCBtZXRob2RzIGFyZQotICAgICAqIGxlZnQgaW50YWN0LiBNb2RpZmllZCBjbGFzc2VzIG11c3QgYmUgb3ZlcnJpZGFibGUgKG5vbi1wcml2YXRlLCBub24tZmluYWwpLgotICAgICAqIE5hdGl2ZSBtZXRob2RzIG11c3QgYmUgbWFkZSBub24tZmluYWwsIG5vbi1wcml2YXRlLgotICAgICAqCi0gICAgICogMi0gRm9yICJrZWVwIiBjbGFzc2VzLCB3ZSB3YW50IHRvIHJld3JpdGUgYWxsIG5hdGl2ZSBtZXRob2RzIGFzIGluZGljYXRlZCBhYm92ZS4KLSAgICAgKiBJZiBhIGNsYXNzIGhhcyBuYXRpdmUgbWV0aG9kcywgaXQgbXVzdCBhbHNvIGJlIG1hZGUgbm9uLXByaXZhdGUsIG5vbi1maW5hbC4KLSAgICAgKgotICAgICAqIE5vdGUgdGhhdCB1bmZvcnR1bmF0ZWx5IHN0YXRpYyBtZXRob2RzIGNhbm5vdCBiZSBjaGFuZ2VkIHRvIG5vbi1zdGF0aWMgKHNpbmNlIHN0YXRpYyBhbmQKLSAgICAgKiBub24tc3RhdGljIGFyZSBpbnZva2VkIGRpZmZlcmVudGx5LikKLSAgICAgKi8KLSAgICBieXRlW10gdHJhbnNmb3JtKENsYXNzUmVhZGVyIGNyLCBib29sZWFuIHN0dWJOYXRpdmVzT25seSkgewotCi0gICAgICAgIGJvb2xlYW4gaGFzTmF0aXZlTWV0aG9kcyA9IGhhc05hdGl2ZU1ldGhvZHMoY3IpOwotCi0gICAgICAgIC8vIEdldCB0aGUgY2xhc3MgbmFtZSwgYXMgYW4gaW50ZXJuYWwgbmFtZSAoZS5nLiBjb20vYW5kcm9pZC9Tb21lQ2xhc3MkSW5uZXJDbGFzcykKLSAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGNyLmdldENsYXNzTmFtZSgpOwotCi0gICAgICAgIFN0cmluZyBuZXdOYW1lID0gdHJhbnNmb3JtTmFtZShjbGFzc05hbWUpOwotICAgICAgICAvLyB0cmFuc2Zvcm1OYW1lIHJldHVybnMgaXRzIGlucHV0IGFyZ3VtZW50IGlmIHRoZXJlJ3Mgbm8gbmVlZCB0byByZW5hbWUgdGhlIGNsYXNzCi0gICAgICAgIGlmIChuZXdOYW1lICE9IGNsYXNzTmFtZSkgewotICAgICAgICAgICAgbVJlbmFtZUNvdW50Kys7Ci0gICAgICAgICAgICAvLyBUaGlzIGNsYXNzIGlzIGJlaW5nIHJlbmFtZWQsIHNvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIGNsYXNzZXMgbm90IHJlbmFtZWQuCi0gICAgICAgICAgICBtQ2xhc3Nlc05vdFJlbmFtZWQucmVtb3ZlKGNsYXNzTmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtTG9nLmRlYnVnKCJUcmFuc2Zvcm0gJXMlcyVzJXMiLCBjbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgbmV3TmFtZSA9PSBjbGFzc05hbWUgPyAiIiA6ICIgKHJlbmFtZWQgdG8gIiArIG5ld05hbWUgKyAiKSIsCi0gICAgICAgICAgICAgICAgaGFzTmF0aXZlTWV0aG9kcyA/ICIgLS0gaGFzIG5hdGl2ZXMiIDogIiIsCi0gICAgICAgICAgICAgICAgc3R1Yk5hdGl2ZXNPbmx5ID8gIiAtLSBzdHViIG5hdGl2ZXMgb25seSIgOiAiIik7Ci0KLSAgICAgICAgLy8gUmV3cml0ZSB0aGUgbmV3IGNsYXNzIGZyb20gc2NyYXRjaCwgd2l0aG91dCByZXVzaW5nIHRoZSBjb25zdGFudCBwb29sIGZyb20gdGhlCi0gICAgICAgIC8vIG9yaWdpbmFsIGNsYXNzIHJlYWRlci4KLSAgICAgICAgQ2xhc3NXcml0ZXIgY3cgPSBuZXcgQ2xhc3NXcml0ZXIoQ2xhc3NXcml0ZXIuQ09NUFVURV9NQVhTKTsKLQotICAgICAgICBDbGFzc1Zpc2l0b3IgY3YgPSBuZXcgUmVmYWN0b3JDbGFzc0FkYXB0ZXIoY3csIG1SZWZhY3RvckNsYXNzZXMpOwotICAgICAgICBpZiAobmV3TmFtZSAhPSBjbGFzc05hbWUpIHsKLSAgICAgICAgICAgIGN2ID0gbmV3IFJlbmFtZUNsYXNzQWRhcHRlcihjdiwgY2xhc3NOYW1lLCBuZXdOYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGN2ID0gbmV3IFRyYW5zZm9ybUNsYXNzQWRhcHRlcihtTG9nLCBtU3R1Yk1ldGhvZHMsCi0gICAgICAgICAgICAgICAgbURlbGV0ZVJldHVybnMuZ2V0KGNsYXNzTmFtZSksCi0gICAgICAgICAgICAgICAgbmV3TmFtZSwgY3YsCi0gICAgICAgICAgICAgICAgc3R1Yk5hdGl2ZXNPbmx5LCBzdHViTmF0aXZlc09ubHkgfHwgaGFzTmF0aXZlTWV0aG9kcyk7Ci0KLSAgICAgICAgU2V0PFN0cmluZz4gZGVsZWdhdGVNZXRob2RzID0gbURlbGVnYXRlTWV0aG9kcy5nZXQoY2xhc3NOYW1lKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlTWV0aG9kcyAhPSBudWxsICYmICFkZWxlZ2F0ZU1ldGhvZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBJZiBkZWxlZ2F0ZU1ldGhvZHMgb25seSBjb250YWlucyBvbmUgZW50cnkgQUxMX05BVElWRVMgYW5kIHRoZSBjbGFzcyBpcwotICAgICAgICAgICAgLy8ga25vd24gdG8gaGF2ZSBubyBuYXRpdmUgbWV0aG9kcywganVzdCBza2lwIHRoaXMgc3RlcC4KLSAgICAgICAgICAgIGlmIChoYXNOYXRpdmVNZXRob2RzIHx8Ci0gICAgICAgICAgICAgICAgICAgICEoZGVsZWdhdGVNZXRob2RzLnNpemUoKSA9PSAxICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGVNZXRob2RzLmNvbnRhaW5zKERlbGVnYXRlQ2xhc3NBZGFwdGVyLkFMTF9OQVRJVkVTKSkpIHsKLSAgICAgICAgICAgICAgICBjdiA9IG5ldyBEZWxlZ2F0ZUNsYXNzQWRhcHRlcihtTG9nLCBjdiwgY2xhc3NOYW1lLCBkZWxlZ2F0ZU1ldGhvZHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY3IuYWNjZXB0KGN2LCAwIC8qIGZsYWdzICovKTsKLSAgICAgICAgcmV0dXJuIGN3LnRvQnl0ZUFycmF5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2hvdWxkIHRoaXMgY2xhc3MgYmUgcmVuYW1lZCwgdGhpcyByZXR1cm5zIHRoZSBuZXcgbmFtZS4gT3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlCi0gICAgICogb3JpZ2luYWwgbmFtZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGludGVybmFsIEFTTSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IG1heSBoYXZlIHRvIGJlIHJlbmFtZWQKLSAgICAgKiBAcmV0dXJuIEEgbmV3IHRyYW5zZm9ybWVkIG5hbWUgb3IgdGhlIG9yaWdpbmFsIGlucHV0IGFyZ3VtZW50LgotICAgICAqLwotICAgIFN0cmluZyB0cmFuc2Zvcm1OYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICAgICAgU3RyaW5nIG5ld05hbWUgPSBtUmVuYW1lQ2xhc3Nlcy5nZXQoY2xhc3NOYW1lKTsKLSAgICAgICAgaWYgKG5ld05hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG5ld05hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHBvcyA9IGNsYXNzTmFtZS5pbmRleE9mKCckJyk7Ci0gICAgICAgIGlmIChwb3MgPiAwKSB7Ci0gICAgICAgICAgICAvLyBJcyB0aGlzIGFuIGlubmVyIGNsYXNzIG9mIGEgcmVuYW1lZCBjbGFzcz8KLSAgICAgICAgICAgIFN0cmluZyBiYXNlID0gY2xhc3NOYW1lLnN1YnN0cmluZygwLCBwb3MpOwotICAgICAgICAgICAgbmV3TmFtZSA9IG1SZW5hbWVDbGFzc2VzLmdldChiYXNlKTsKLSAgICAgICAgICAgIGlmIChuZXdOYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3TmFtZSArIGNsYXNzTmFtZS5zdWJzdHJpbmcocG9zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjbGFzc05hbWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIGEgY2xhc3MgaGFzIGFueSBuYXRpdmUgbWV0aG9kcy4KLSAgICAgKi8KLSAgICBib29sZWFuIGhhc05hdGl2ZU1ldGhvZHMoQ2xhc3NSZWFkZXIgY3IpIHsKLSAgICAgICAgQ2xhc3NIYXNOYXRpdmVWaXNpdG9yIGN2ID0gbmV3IENsYXNzSGFzTmF0aXZlVmlzaXRvcigpOwotICAgICAgICBjci5hY2NlcHQoY3YsIDAgLyogZmxhZ3MgKi8pOwotICAgICAgICByZXR1cm4gY3YuaGFzTmF0aXZlTWV0aG9kcygpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9DbGFzc0hhc05hdGl2ZVZpc2l0b3IuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ2xhc3NIYXNOYXRpdmVWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOTU1ZmQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9DbGFzc0hhc05hdGl2ZVZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVzdGluZy5WaXNpYmlsaXR5OwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQW5ub3RhdGlvblZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQXR0cmlidXRlOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5GaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5PcGNvZGVzOwotCi0vKioKLSAqIEluZGljYXRlcyBpZiBhIGNsYXNzIGNvbnRhaW5zIGFueSBuYXRpdmUgbWV0aG9kcy4KLSAqLwotcHVibGljIGNsYXNzIENsYXNzSGFzTmF0aXZlVmlzaXRvciBleHRlbmRzIENsYXNzVmlzaXRvciB7Ci0gICAgcHVibGljIENsYXNzSGFzTmF0aXZlVmlzaXRvcigpIHsKLSAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbUhhc05hdGl2ZU1ldGhvZHMgPSBmYWxzZTsKLQotICAgIHB1YmxpYyBib29sZWFuIGhhc05hdGl2ZU1ldGhvZHMoKSB7Ci0gICAgICAgIHJldHVybiBtSGFzTmF0aXZlTWV0aG9kczsKLSAgICB9Ci0KLSAgICBAVmlzaWJsZUZvclRlc3RpbmcodmlzaWJpbGl0eT1WaXNpYmlsaXR5LlBSSVZBVEUpCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0SGFzTmF0aXZlTWV0aG9kcyhib29sZWFuIGhhc05hdGl2ZU1ldGhvZHMsIFN0cmluZyBtZXRob2ROYW1lKSB7Ci0gICAgICAgIG1IYXNOYXRpdmVNZXRob2RzID0gaGFzTmF0aXZlTWV0aG9kczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdChpbnQgdmVyc2lvbiwgaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBzaWduYXR1cmUsCi0gICAgICAgICAgICBTdHJpbmcgc3VwZXJOYW1lLCBTdHJpbmdbXSBpbnRlcmZhY2VzKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uKFN0cmluZyBkZXNjLCBib29sZWFuIHZpc2libGUpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZShBdHRyaWJ1dGUgYXR0cikgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRFbmQoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmllbGRWaXNpdG9yIHZpc2l0RmllbGQoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRJbm5lckNsYXNzKFN0cmluZyBuYW1lLCBTdHJpbmcgb3V0ZXJOYW1lLAotICAgICAgICAgICAgU3RyaW5nIGlubmVyTmFtZSwgaW50IGFjY2VzcykgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1ldGhvZFZpc2l0b3IgdmlzaXRNZXRob2QoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nW10gZXhjZXB0aW9ucykgewotICAgICAgICBpZiAoKGFjY2VzcyAmIE9wY29kZXMuQUNDX05BVElWRSkgIT0gMCkgewotICAgICAgICAgICAgc2V0SGFzTmF0aXZlTWV0aG9kcyh0cnVlLCBuYW1lKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdE91dGVyQ2xhc3MoU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0U291cmNlKFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZWJ1ZykgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0NyZWF0ZUluZm8uamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ3JlYXRlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjc3OWUzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ3JlYXRlSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmEuQXV0b0Nsb3NlYWJsZTsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuamF2YS5DaGFyc2V0czsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuamF2YS5JbnRlZ3JhbFRvU3RyaW5nOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5qYXZhLk9iamVjdHM7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmEuVW5zYWZlQnl0ZVNlcXVlbmNlOwotCi0vKioKLSAqIERlc2NyaWJlcyB0aGUgd29yayB0byBiZSBkb25lIGJ5IHtAbGluayBBc21HZW5lcmF0b3J9LgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQ3JlYXRlSW5mbyBpbXBsZW1lbnRzIElDcmVhdGVJbmZvIHsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY2xhc3MgZnJvbSBsYXlvdXRsaWJfY3JlYXRlIHRvIGluamVjdCBpbiBsYXlvdXRsaWIuCi0gICAgICogVGhlIGxpc3QgY2FuIGJlIGVtcHR5IGJ1dCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDbGFzczw/PltdIGdldEluamVjdGVkQ2xhc3NlcygpIHsKLSAgICAgICAgcmV0dXJuIElOSkVDVEVEX0NMQVNTRVM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBtZXRob2RzIHRvIHJld3JpdGUgYXMgZGVsZWdhdGVzLgotICAgICAqIFRoZSBsaXN0IGNhbiBiZSBlbXB0eSBidXQgbXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVNZXRob2RzKCkgewotICAgICAgICByZXR1cm4gREVMRUdBVEVfTUVUSE9EUzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNsYXNzZXMgb24gd2hpY2ggdG8gZGVsZWdhdGUgYWxsIG5hdGl2ZSBtZXRob2RzLgotICAgICAqIFRoZSBsaXN0IGNhbiBiZSBlbXB0eSBidXQgbXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVDbGFzc05hdGl2ZXMoKSB7Ci0gICAgICAgIHJldHVybiBERUxFR0FURV9DTEFTU19OQVRJVkVTOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgVGhlIGxpc3Qgb2YgbWV0aG9kcyB0byBzdHViIG91dC4gRWFjaCBlbnRyeSBtdXN0IGJlIGluIHRoZSBmb3JtCi0gICAgICogInBhY2thZ2UucGFja2FnZS5PdXRlckNsYXNzJElubmVyQ2xhc3MjTWV0aG9kTmFtZSIuCi0gICAgICogVGhlIGxpc3QgY2FuIGJlIGVtcHR5IGJ1dCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqIDxwLz4KLSAgICAgKiBUaGlzIHVzYWdlIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbWV0aG9kICdkZWxlZ2F0ZXMnIGluc3RlYWQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldE92ZXJyaWRkZW5NZXRob2RzKCkgewotICAgICAgICByZXR1cm4gT1ZFUlJJRERFTl9NRVRIT0RTOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY2xhc3NlcyB0byByZW5hbWUsIG11c3QgYmUgYW4gZXZlbiBsaXN0OiB0aGUgYmluYXJ5IEZRQ04KLSAgICAgKiBvZiBjbGFzcyB0byByZXBsYWNlIGZvbGxvd2VkIGJ5IHRoZSBuZXcgRlFDTi4KLSAgICAgKiBUaGUgbGlzdCBjYW4gYmUgZW1wdHkgYnV0IG11c3Qgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldFJlbmFtZWRDbGFzc2VzKCkgewotICAgICAgICByZXR1cm4gUkVOQU1FRF9DTEFTU0VTOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY2xhc3NlcyBmb3Igd2hpY2ggdGhlIG1ldGhvZHMgcmV0dXJuaW5nIHRoZW0gc2hvdWxkIGJlIGRlbGV0ZWQuCi0gICAgICogVGhlIGFycmF5IGNvbnRhaW5zIGEgbGlzdCBvZiBudWxsIHRlcm1pbmF0ZWQgc2VjdGlvbiBzdGFydGluZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotICAgICAqIHRvIHJlbmFtZSBpbiB3aGljaCB0aGUgbWV0aG9kcyBhcmUgZGVsZXRlZCwgZm9sbG93ZWQgYnkgYSBsaXN0IG9mIHJldHVybiB0eXBlcyBpZGVudGlmeWluZwotICAgICAqIHRoZSBtZXRob2RzIHRvIGRlbGV0ZS4KLSAgICAgKiBUaGUgbGlzdCBjYW4gYmUgZW1wdHkgYnV0IG11c3Qgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldERlbGV0ZVJldHVybnMoKSB7Ci0gICAgICAgIHJldHVybiBERUxFVEVfUkVUVVJOUzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNsYXNzZXMgdG8gcmVmYWN0b3IsIG11c3QgYmUgYW4gZXZlbiBsaXN0OiB0aGUgYmluYXJ5IEZRQ04gb2YgY2xhc3MgdG8KLSAgICAgKiByZXBsYWNlIGZvbGxvd2VkIGJ5IHRoZSBuZXcgRlFDTi4gQWxsIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBjbGFzcyBzaG91bGQgYmUgdXBkYXRlZCB0byB0aGUKLSAgICAgKiBuZXcgY2xhc3MuIFRoZSBsaXN0IGNhbiBiZSBlbXB0eSBidXQgbXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0SmF2YVBrZ0NsYXNzZXMoKSB7Ci0gICAgICByZXR1cm4gSkFWQV9QS0dfQ0xBU1NFUzsKLSAgICB9Ci0gICAgLy8tLS0tLQotCi0gICAgLyoqCi0gICAgICogVGhlIGxpc3Qgb2YgY2xhc3MgZnJvbSBsYXlvdXRsaWJfY3JlYXRlIHRvIGluamVjdCBpbiBsYXlvdXRsaWIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgQ2xhc3M8Pz5bXSBJTkpFQ1RFRF9DTEFTU0VTID0gbmV3IENsYXNzPD8+W10gewotICAgICAgICAgICAgT3ZlcnJpZGVNZXRob2QuY2xhc3MsCi0gICAgICAgICAgICBNZXRob2RMaXN0ZW5lci5jbGFzcywKLSAgICAgICAgICAgIE1ldGhvZEFkYXB0ZXIuY2xhc3MsCi0gICAgICAgICAgICBJQ3JlYXRlSW5mby5jbGFzcywKLSAgICAgICAgICAgIENyZWF0ZUluZm8uY2xhc3MsCi0gICAgICAgICAgICBMYXlvdXRsaWJEZWxlZ2F0ZS5jbGFzcywKLSAgICAgICAgICAgIC8qIEphdmEgcGFja2FnZSBjbGFzc2VzICovCi0gICAgICAgICAgICBBdXRvQ2xvc2VhYmxlLmNsYXNzLAotICAgICAgICAgICAgT2JqZWN0cy5jbGFzcywKLSAgICAgICAgICAgIEludGVncmFsVG9TdHJpbmcuY2xhc3MsCi0gICAgICAgICAgICBVbnNhZmVCeXRlU2VxdWVuY2UuY2xhc3MsCi0gICAgICAgICAgICBDaGFyc2V0cy5jbGFzcywKLSAgICAgICAgfTsKLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gcmV3cml0ZSBhcyBkZWxlZ2F0ZXMuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmdbXSBERUxFR0FURV9NRVRIT0RTID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgImFuZHJvaWQuYXBwLkZyYWdtZW50I2luc3RhbnRpYXRlIiwgLy8oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL0ZyYWdtZW50OyIsCi0gICAgICAgICJhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcyRUaGVtZSNvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzIiwKLSAgICAgICAgImFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzJFRoZW1lI3Jlc29sdmVBdHRyaWJ1dGUiLAotICAgICAgICAiYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5I2dldFZhbHVlQXQiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5I2ZpbmlzaERlY29kZSIsCi0gICAgICAgICJhbmRyb2lkLm9zLkhhbmRsZXIjc2VuZE1lc3NhZ2VBdFRpbWUiLAotICAgICAgICAiYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkI3J1biIsCi0gICAgICAgICJhbmRyb2lkLm9zLkJ1aWxkI2dldFN0cmluZyIsCi0gICAgICAgICJhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVGb3JtYXQjaXMyNEhvdXJGb3JtYXQiLAotICAgICAgICAiYW5kcm9pZC50ZXh0LmZvcm1hdC5UaW1lI2Zvcm1hdDEiLAotICAgICAgICAiYW5kcm9pZC52aWV3LkNob3Jlb2dyYXBoZXIjZ2V0UmVmcmVzaFJhdGUiLAotICAgICAgICAiYW5kcm9pZC52aWV3LkRpc3BsYXkjdXBkYXRlRGlzcGxheUluZm9Mb2NrZWQiLAotICAgICAgICAiYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyI3JJbmZsYXRlIiwKLSAgICAgICAgImFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlciNwYXJzZUluY2x1ZGUiLAotICAgICAgICAiYW5kcm9pZC52aWV3LlZpZXcjaXNJbkVkaXRNb2RlIiwKLSAgICAgICAgImFuZHJvaWQudmlldy5WaWV3Um9vdEltcGwjaXNJblRvdWNoTW9kZSIsCi0gICAgICAgICJhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlckdsb2JhbCNnZXRXaW5kb3dNYW5hZ2VyU2VydmljZSIsCi0gICAgICAgICJhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RNYW5hZ2VyI2dldEluc3RhbmNlIiwKLSAgICAgICAgImNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHMjY29udmVydFZhbHVlVG9JbnQiLAotICAgICAgICAiY29tLmFuZHJvaWQuaW50ZXJuYWwudGV4dHNlcnZpY2UuSVRleHRTZXJ2aWNlc01hbmFnZXIkU3R1YiNhc0ludGVyZmFjZSIsCi0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0IG9mIGNsYXNzZXMgb24gd2hpY2ggdG8gZGVsZWdhdGUgYWxsIG5hdGl2ZSBtZXRob2RzLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nW10gREVMRUdBVEVfQ0xBU1NfTkFUSVZFUyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICJhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlciIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLkF2b2lkWGZlcm1vZGUiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5IiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwU2hhZGVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuQmx1ck1hc2tGaWx0ZXIiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5DYW52YXMiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5Db2xvckZpbHRlciIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLkNvbG9yTWF0cml4Q29sb3JGaWx0ZXIiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5Db21wb3NlUGF0aEVmZmVjdCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLkNvbXBvc2VTaGFkZXIiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5Db3JuZXJQYXRoRWZmZWN0IiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuRGFzaFBhdGhFZmZlY3QiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5EaXNjcmV0ZVBhdGhFZmZlY3QiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5EcmF3RmlsdGVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuRW1ib3NzTWFza0ZpbHRlciIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLkxheWVyUmFzdGVyaXplciIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLkxpZ2h0aW5nQ29sb3JGaWx0ZXIiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5MaW5lYXJHcmFkaWVudCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLk1hc2tGaWx0ZXIiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5NYXRyaXgiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5OaW5lUGF0Y2giLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5QYWludCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLlBhaW50RmxhZ3NEcmF3RmlsdGVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuUGF0aCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLlBhdGhEYXNoUGF0aEVmZmVjdCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLlBhdGhFZmZlY3QiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5QaXhlbFhvclhmZXJtb2RlIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZkNvbG9yRmlsdGVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZlhmZXJtb2RlIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuUmFkaWFsR3JhZGllbnQiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5SYXN0ZXJpemVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuUmVnaW9uIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuU2hhZGVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuU3VtUGF0aEVmZmVjdCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLlN3ZWVwR3JhZGllbnQiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5UeXBlZmFjZSIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLlhmZXJtb2RlIiwKLSAgICAgICAgImFuZHJvaWQub3MuU3lzdGVtQ2xvY2siLAotICAgICAgICAiYW5kcm9pZC50ZXh0LkFuZHJvaWRCaWRpIiwKLSAgICAgICAgImFuZHJvaWQudXRpbC5GbG9hdE1hdGgiLAotICAgICAgICAiYW5kcm9pZC52aWV3LkRpc3BsYXkiLAotICAgICAgICAibGliY29yZS5pY3UuRGF0ZUludGVydmFsRm9ybWF0IiwKLSAgICAgICAgImxpYmNvcmUuaWN1LklDVSIsCi0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gc3R1YiBvdXQuIEVhY2ggZW50cnkgbXVzdCBiZSBpbiB0aGUgZm9ybQotICAgICAqICAicGFja2FnZS5wYWNrYWdlLk91dGVyQ2xhc3MkSW5uZXJDbGFzcyNNZXRob2ROYW1lIi4KLSAgICAgKiAgVGhpcyB1c2FnZSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1ldGhvZCAnZGVsZWdhdGVzJyBpbnN0ZWFkLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZ1tdIE9WRVJSSURERU5fTUVUSE9EUyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqICBUaGUgbGlzdCBvZiBjbGFzc2VzIHRvIHJlbmFtZSwgbXVzdCBiZSBhbiBldmVuIGxpc3Q6IHRoZSBiaW5hcnkgRlFDTgotICAgICAqICBvZiBjbGFzcyB0byByZXBsYWNlIGZvbGxvd2VkIGJ5IHRoZSBuZXcgRlFDTi4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmdbXSBSRU5BTUVEX0NMQVNTRVMgPQotICAgICAgICBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgImFuZHJvaWQub3MuU2VydmljZU1hbmFnZXIiLCAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQub3MuX09yaWdpbmFsX1NlcnZpY2VNYW5hZ2VyIiwKLSAgICAgICAgICAgICJhbmRyb2lkLnV0aWwuTHJ1Q2FjaGUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnV0aWwuX09yaWdpbmFsX0xydUNhY2hlIiwKLSAgICAgICAgICAgICJhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXciLCAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnZpZXcuX09yaWdpbmFsX1N1cmZhY2VWaWV3IiwKLSAgICAgICAgICAgICJhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlciIsICJhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5fT3JpZ2luYWxfQWNjZXNzaWJpbGl0eU1hbmFnZXIiLAotICAgICAgICAgICAgImFuZHJvaWQud2Via2l0LldlYlZpZXciLCAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQud2Via2l0Ll9PcmlnaW5hbF9XZWJWaWV3IiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUG9saWN5TWFuYWdlciIsICAgICAgICJjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuX09yaWdpbmFsX1BvbGljeU1hbmFnZXIiLAotICAgICAgICB9OwotCi0gICAgLyoqCi0gICAgICogVGhlIGxpc3Qgb2YgY2xhc3MgcmVmZXJlbmNlcyB0byB1cGRhdGUsIG11c3QgYmUgYW4gZXZlbiBsaXN0OiB0aGUgYmluYXJ5Ci0gICAgICogRlFDTiBvZiBjbGFzcyB0byByZXBsYWNlIGZvbGxvd2VkIGJ5IHRoZSBuZXcgRlFDTi4gVGhlIGNsYXNzZXMgdG8KLSAgICAgKiByZXBsYWNlIGFyZSB0byBiZSBleGNsdWRlZCBmcm9tIHRoZSBvdXRwdXQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nW10gSkFWQV9QS0dfQ0xBU1NFUyA9Ci0gICAgICAgIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAiamF2YS5sYW5nLkF1dG9DbG9zZWFibGUiLCAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmEuQXV0b0Nsb3NlYWJsZSIsCi0gICAgICAgICAgICAiamF2YS51dGlsLk9iamVjdHMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmEuT2JqZWN0cyIsCi0gICAgICAgICAgICAiamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0cyIsICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmEuQ2hhcnNldHMiLAotICAgICAgICAgICAgImphdmEubGFuZy5JbnRlZ3JhbFRvU3RyaW5nIiwgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5qYXZhLkludGVncmFsVG9TdHJpbmciLAotICAgICAgICAgICAgImphdmEubGFuZy5VbnNhZmVCeXRlU2VxdWVuY2UiLCAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5qYXZhLlVuc2FmZUJ5dGVTZXF1ZW5jZSIsCi0gICAgICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBMaXN0IG9mIGNsYXNzZXMgZm9yIHdoaWNoIHRoZSBtZXRob2RzIHJldHVybmluZyB0aGVtIHNob3VsZCBiZSBkZWxldGVkLgotICAgICAqIFRoZSBhcnJheSBjb250YWlucyBhIGxpc3Qgb2YgbnVsbCB0ZXJtaW5hdGVkIHNlY3Rpb24gc3RhcnRpbmcgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLSAgICAgKiB0byByZW5hbWUgaW4gd2hpY2ggdGhlIG1ldGhvZHMgYXJlIGRlbGV0ZWQsIGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiByZXR1cm4gdHlwZXMgaWRlbnRpZnlpbmcKLSAgICAgKiB0aGUgbWV0aG9kcyB0byBkZWxldGUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nW10gREVMRVRFX1JFVFVSTlMgPQotICAgICAgICBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgbnVsbCB9OyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXBhcmF0b3IsIGZvciBuZXh0IGNsYXNzL21ldGhvZHMgbGlzdC4KLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9EZWxlZ2F0ZUNsYXNzQWRhcHRlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9EZWxlZ2F0ZUNsYXNzQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjdiZTk3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVDbGFzc0FkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk1ldGhvZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uT3Bjb2RlczsKLQotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLS8qKgotICogQSB7QGxpbmsgRGVsZWdhdGVDbGFzc0FkYXB0ZXJ9IGNhbiB0cmFuc2Zvcm0gc29tZSBtZXRob2RzIGZyb20gYSBjbGFzcyBpbnRvCi0gKiBkZWxlZ2F0ZXMgdGhhdCBkZWZlciB0aGUgY2FsbCB0byBhbiBhc3NvY2lhdGVkIGRlbGVnYXRlIGNsYXNzLgotICogPHAvPgotICogVGhpcyBpcyB1c2VkIHRvIG92ZXJyaWRlIHNwZWNpZmljIG1ldGhvZHMgYW5kIG9yIGFsbCBuYXRpdmUgbWV0aG9kcyBpbiBjbGFzc2VzLgotICovCi1wdWJsaWMgY2xhc3MgRGVsZWdhdGVDbGFzc0FkYXB0ZXIgZXh0ZW5kcyBDbGFzc1Zpc2l0b3IgewotCi0gICAgLyoqIFN1ZmZpeCBhZGRlZCB0byBvcmlnaW5hbCBtZXRob2RzLiAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPUklHSU5BTF9TVUZGSVggPSAiX09yaWdpbmFsIjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ09OU1RSVUNUT1IgPSAiPGluaXQ+IjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ0xBU1NfSU5JVCA9ICI8Y2xpbml0PiI7Ci0KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBBTExfTkFUSVZFUyA9ICI8PGFsbF9uYXRpdmVzPj4iOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUNsYXNzTmFtZTsKLSAgICBwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IG1EZWxlZ2F0ZU1ldGhvZHM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMb2cgbUxvZzsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIERlbGVnYXRlQ2xhc3NBZGFwdGVyfSB0aGF0IGNhbiB0cmFuc2Zvcm0gc29tZSBtZXRob2RzCi0gICAgICogZnJvbSBhIGNsYXNzIGludG8gZGVsZWdhdGVzIHRoYXQgZGVmZXIgdGhlIGNhbGwgdG8gYW4gYXNzb2NpYXRlZCBkZWxlZ2F0ZSBjbGFzcy4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhpcyBpcyB1c2VkIHRvIG92ZXJyaWRlIHNwZWNpZmljIG1ldGhvZHMgYW5kIG9yIGFsbCBuYXRpdmUgbWV0aG9kcyBpbiBjbGFzc2VzLgotICAgICAqCi0gICAgICogQHBhcmFtIGxvZyBUaGUgbG9nZ2VyIG9iamVjdC4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKiBAcGFyYW0gY3YgdGhlIGNsYXNzIHZpc2l0b3IgdG8gd2hpY2ggdGhpcyBhZGFwdGVyIG11c3QgZGVsZWdhdGUgY2FsbHMuCi0gICAgICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgaW50ZXJuYWwgY2xhc3MgbmFtZSBvZiB0aGUgY2xhc3MgdG8gdmlzaXQsCi0gICAgICogICAgICAgICAgZS5nLiA8Y29kZT5jb20vYW5kcm9pZC9Tb21lQ2xhc3MkSW5uZXJDbGFzczwvY29kZT4uCi0gICAgICogQHBhcmFtIGRlbGVnYXRlTWV0aG9kcyBUaGUgc2V0IG9mIG1ldGhvZCBuYW1lcyB0byBtb2RpZnkgYW5kL29yIHRoZQotICAgICAqICAgICAgICAgIHNwZWNpYWwgY29uc3RhbnQge0BsaW5rICNBTExfTkFUSVZFU30gdG8gY29udmVydCBhbGwgbmF0aXZlIG1ldGhvZHMuCi0gICAgICovCi0gICAgcHVibGljIERlbGVnYXRlQ2xhc3NBZGFwdGVyKExvZyBsb2csCi0gICAgICAgICAgICBDbGFzc1Zpc2l0b3IgY3YsCi0gICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lLAotICAgICAgICAgICAgU2V0PFN0cmluZz4gZGVsZWdhdGVNZXRob2RzKSB7Ci0gICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCwgY3YpOwotICAgICAgICBtTG9nID0gbG9nOwotICAgICAgICBtQ2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgICAgICBtRGVsZWdhdGVNZXRob2RzID0gZGVsZWdhdGVNZXRob2RzOwotICAgIH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIE1ldGhvZHMgZnJvbSB0aGUgQ2xhc3NBZGFwdGVyCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWV0aG9kVmlzaXRvciB2aXNpdE1ldGhvZChpbnQgYWNjZXNzLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsCi0gICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlLCBTdHJpbmdbXSBleGNlcHRpb25zKSB7Ci0KLSAgICAgICAgYm9vbGVhbiBpc1N0YXRpYyA9IChhY2Nlc3MgJiBPcGNvZGVzLkFDQ19TVEFUSUMpICE9IDA7Ci0gICAgICAgIGJvb2xlYW4gaXNOYXRpdmUgPSAoYWNjZXNzICYgT3Bjb2Rlcy5BQ0NfTkFUSVZFKSAhPSAwOwotCi0gICAgICAgIGJvb2xlYW4gdXNlRGVsZWdhdGUgPSAoaXNOYXRpdmUgJiYgbURlbGVnYXRlTWV0aG9kcy5jb250YWlucyhBTExfTkFUSVZFUykpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGVsZWdhdGVNZXRob2RzLmNvbnRhaW5zKG5hbWUpOwotCi0gICAgICAgIGlmICghdXNlRGVsZWdhdGUpIHsKLSAgICAgICAgICAgIC8vIE5vdCBjcmVhdGluZyBhIGRlbGVnYXRlIGZvciB0aGlzIG1ldGhvZCwgcGFzcyBpdCBhcy1pcyBmcm9tIHRoZSByZWFkZXIKLSAgICAgICAgICAgIC8vIHRvIHRoZSB3cml0ZXIuCi0gICAgICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIGV4Y2VwdGlvbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVzZURlbGVnYXRlKSB7Ci0gICAgICAgICAgICBpZiAoQ09OU1RSVUNUT1IuZXF1YWxzKG5hbWUpIHx8IENMQVNTX0lOSVQuZXF1YWxzKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgZ2VuZXJhdGluZyBkZWxlZ2F0ZXMgZm9yIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAiRGVsZWdhdGUgZG9lc24ndCBzdXBwb3J0IG92ZXJyaWRpbmcgY29uc3RydWN0b3IgJTEkczolMiRzKCUzJHMpIiwgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICAgICAgICAgIG1DbGFzc05hbWUsIG5hbWUsIGRlc2MpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc05hdGl2ZSkgewotICAgICAgICAgICAgLy8gUmVtb3ZlIG5hdGl2ZSBmbGFnCi0gICAgICAgICAgICBhY2Nlc3MgPSBhY2Nlc3MgJiB+T3Bjb2Rlcy5BQ0NfTkFUSVZFOwotICAgICAgICAgICAgTWV0aG9kVmlzaXRvciBtd0RlbGVnYXRlID0gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIGV4Y2VwdGlvbnMpOwotCi0gICAgICAgICAgICBEZWxlZ2F0ZU1ldGhvZEFkYXB0ZXIyIGEgPSBuZXcgRGVsZWdhdGVNZXRob2RBZGFwdGVyMigKLSAgICAgICAgICAgICAgICAgICAgbUxvZywgbnVsbCAvKm13T3JpZ2luYWwqLywgbXdEZWxlZ2F0ZSwgbUNsYXNzTmFtZSwgbmFtZSwgZGVzYywgaXNTdGF0aWMpOwotCi0gICAgICAgICAgICAvLyBBIG5hdGl2ZSBoYXMgbm8gY29kZSB0byB2aXNpdCwgc28gd2UgbmVlZCB0byBnZW5lcmF0ZSBpdCBkaXJlY3RseS4KLSAgICAgICAgICAgIGEuZ2VuZXJhdGVEZWxlZ2F0ZUNvZGUoKTsKLQotICAgICAgICAgICAgcmV0dXJuIG13RGVsZWdhdGU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHaXZlbiBhIG5vbi1uYXRpdmUgU29tZUNsYXNzLk1ldGhvZE5hbWUoKSwgd2Ugd2FudCB0byBnZW5lcmF0ZSAyIG1ldGhvZHM6Ci0gICAgICAgIC8vIC0gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBtZXRob2QgbmFtZWQgU29tZUNsYXNzLk1ldGhvZE5hbWVfT3JpZ2luYWwoKS4KLSAgICAgICAgLy8gICBUaGUgY29udGVudCBpcyB0aGUgb3JpZ2luYWwgbWV0aG9kIGFzLWlzIGZyb20gdGhlIHJlYWRlci4KLSAgICAgICAgLy8gLSBBIGJyYW5kIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBTb21lQ2xhc3MuTWV0aG9kTmFtZSgpIHdoaWNoIGNhbGxzIHRvIGEKLSAgICAgICAgLy8gICBub24tZXhpc3RpbmcgbWV0aG9kIG5hbWVkIFNvbWVDbGFzc19EZWxlZ2F0ZS5NZXRob2ROYW1lKCkuCi0gICAgICAgIC8vICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgJ2RlbGVnYXRlJyBtZXRob2QgaXMgZG9uZSBpbiBsYXlvdXRsaWJfYnJpZ2RlLgotCi0gICAgICAgIGludCBhY2Nlc3NEZWxlZ2F0ZSA9IGFjY2VzczsKLSAgICAgICAgLy8gY2hhbmdlIGFjY2VzcyB0byBwdWJsaWMgZm9yIHRoZSBvcmlnaW5hbCBvbmUKLSAgICAgICAgaWYgKE1haW4uc09wdGlvbnMuZ2VuZXJhdGVQdWJsaWNBY2Nlc3MpIHsKLSAgICAgICAgICAgIGFjY2VzcyAmPSB+KE9wY29kZXMuQUNDX1BST1RFQ1RFRCB8IE9wY29kZXMuQUNDX1BSSVZBVEUpOwotICAgICAgICAgICAgYWNjZXNzIHw9IE9wY29kZXMuQUNDX1BVQkxJQzsKLSAgICAgICAgfQotCi0gICAgICAgIE1ldGhvZFZpc2l0b3IgbXdPcmlnaW5hbCA9IHN1cGVyLnZpc2l0TWV0aG9kKGFjY2VzcywgbmFtZSArIE9SSUdJTkFMX1NVRkZJWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYywgc2lnbmF0dXJlLCBleGNlcHRpb25zKTsKLSAgICAgICAgTWV0aG9kVmlzaXRvciBtd0RlbGVnYXRlID0gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzRGVsZWdhdGUsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MsIHNpZ25hdHVyZSwgZXhjZXB0aW9ucyk7Ci0KLSAgICAgICAgRGVsZWdhdGVNZXRob2RBZGFwdGVyMiBhID0gbmV3IERlbGVnYXRlTWV0aG9kQWRhcHRlcjIoCi0gICAgICAgICAgICAgICAgbUxvZywgbXdPcmlnaW5hbCwgbXdEZWxlZ2F0ZSwgbUNsYXNzTmFtZSwgbmFtZSwgZGVzYywgaXNTdGF0aWMpOwotICAgICAgICByZXR1cm4gYTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlbGVnYXRlTWV0aG9kQWRhcHRlcjIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVNZXRob2RBZGFwdGVyMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwYjIyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVNZXRob2RBZGFwdGVyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5Bbm5vdGF0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5BdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NSZWFkZXI7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkxhYmVsOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk1ldGhvZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uT3Bjb2RlczsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5UeXBlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotLyoqCi0gKiBUaGlzIG1ldGhvZCBhZGFwdGVyIGdlbmVyYXRlcyBkZWxlZ2F0ZSBtZXRob2RzLgotICogPHAvPgotICogR2l2ZW4gYSBtZXRob2Qge0Bjb2RlIFNvbWVDbGFzcy5NZXRob2ROYW1lKCl9LCB0aGlzIGdlbmVyYXRlcyAxIG9yIDIgbWV0aG9kczoKLSAqIDx1bD4KLSAqIDxsaT4gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBtZXRob2QgbmFtZWQge0Bjb2RlIFNvbWVDbGFzcy5NZXRob2ROYW1lX09yaWdpbmFsKCl9LgotICogICBUaGUgY29udGVudCBpcyB0aGUgb3JpZ2luYWwgbWV0aG9kIGFzLWlzIGZyb20gdGhlIHJlYWRlci4KLSAqICAgVGhpcyBzdGVwIGlzIG9taXR0ZWQgaWYgdGhlIG1ldGhvZCBpcyBuYXRpdmUsIHNpbmNlIGl0IGhhcyBubyBKYXZhIGltcGxlbWVudGF0aW9uLgotICogPGxpPiBBIGJyYW5kIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiB7QGNvZGUgU29tZUNsYXNzLk1ldGhvZE5hbWUoKX0gd2hpY2ggY2FsbHMgdG8gYQotICogICBub24tZXhpc3RpbmcgbWV0aG9kIG5hbWVkIHtAY29kZSBTb21lQ2xhc3NfRGVsZWdhdGUuTWV0aG9kTmFtZSgpfS4KLSAqICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgJ2RlbGVnYXRlJyBtZXRob2QgaXMgZG9uZSBpbiBsYXlvdXRsaWJfYnJpZ2RlLgotICogPC91bD4KLSAqIEEgbWV0aG9kIHZpc2l0b3IgaXMgZ2VuZXJhbGx5IGNvbnN0cnVjdGVkIHRvIGdlbmVyYXRlIGEgc2luZ2xlIG1ldGhvZDsgaG93ZXZlcgotICogaGVyZSB3ZSBtaWdodCB3YW50IHRvIGdlbmVyYXRlIG9uZSBvciB0d28gZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBUbyBhY2hpZXZlCi0gKiB0aGF0LCB0aGUgdmlzaXRvciBoZXJlIGdlbmVyYXRlcyB0aGUgJ29yaWdpbmFsJyBtZXRob2QgYW5kIGFjdHMgYXMgYSBuby1vcCBpZgotICogbm8gc3VjaCBtZXRob2QgZXhpc3RzIChlLmcuIHdoZW4gdGhlIG9yaWdpbmFsIGlzIGEgbmF0aXZlIG1ldGhvZCkuCi0gKiBUaGUgZGVsZWdhdGUgbWV0aG9kIGlzIGdlbmVyYXRlZCBhZnRlciB0aGUge0Bjb2RlIHZpc2l0RW5kfSBvZiB0aGUgb3JpZ2luYWwgbWV0aG9kCi0gKiBvciBieSBoYXZpbmcgdGhlIGNsYXNzIGFkYXB0ZXIgPGVtPmRpcmVjdGx5PC9lbT4gY2FsbCB7QGxpbmsgI2dlbmVyYXRlRGVsZWdhdGVDb2RlKCl9Ci0gKiBmb3IgbmF0aXZlIG1ldGhvZHMuCi0gKiA8cC8+Ci0gKiBXaGVuIGdlbmVyYXRpbmcgdGhlICdkZWxlZ2F0ZScsIHRoZSBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgYSBjYWxsIHRvIGEgY2xhc3MKLSAqIGNsYXNzIG5hbWVkIDxjb2RlPiZsdDtjbGFzc05hbWUmZ3Q7X0RlbGVnYXRlPC9jb2RlPiB3aXRoIHN0YXRpYyBtZXRob2RzIG1hdGNoaW5nCi0gKiB0aGUgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGhlcmUuIFRoZSBtZXRob2RzIGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUuCi0gKiBUaGUgYXJndW1lbnQgdHlwZSBsaXN0IGlzIHRoZSBzYW1lIGV4Y2VwdCB0aGUgInRoaXMiIHJlZmVyZW5jZSBpcyBwYXNzZWQgZmlyc3QKLSAqIGZvciBub24tc3RhdGljIG1ldGhvZHMuCi0gKiA8cC8+Ci0gKiBBIG5ldyBhbm5vdGF0aW9uIGlzIGFkZGVkIHRvIHRoZXNlICdkZWxlZ2F0ZScgbWV0aG9kcyBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgZmluZCB0aGVtCi0gKiBmb3IgYXV0b21hdGVkIHRlc3RpbmcuCi0gKiA8cC8+Ci0gKiBUaGlzIGNsYXNzIGlzbid0IGludGVuZGVkIHRvIGJlIGdlbmVyaWMgb3IgcmV1c2FibGUuCi0gKiBJdCBpcyBjYWxsZWQgYnkge0BsaW5rIERlbGVnYXRlQ2xhc3NBZGFwdGVyfSwgd2hpY2ggdGFrZXMgY2FyZSBvZiBwcm9wZXJseSBpbml0aWFsaXppbmcKLSAqIHRoZSB0d28gbWV0aG9kIHdyaXRlcnMgZm9yIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGRlbGVnYXRlIGNsYXNzLCBhcyBuZWVkZWQsIHdpdGggdGhlaXIKLSAqIGV4cGVjdGVkIG5hbWVzLgotICogPHAvPgotICogVGhlIGNsYXNzIGFkYXB0ZXIgYWxzbyB0YWtlcyBjYXJlIG9mIGNhbGxpbmcge0BsaW5rICNnZW5lcmF0ZURlbGVnYXRlQ29kZSgpfSBkaXJlY3RseSBmb3IKLSAqIGEgbmF0aXZlIGFuZCB1c2UgdGhlIHZpc2l0b3IgcGF0dGVybiBmb3Igbm9uLW5hdGl2ZXMuCi0gKiBOb3RlIHRoYXQgbmF0aXZlIG1ldGhvZHMgaGF2ZSwgYnkgZGVmaW5pdGlvbiwgbm8gY29kZSBzbyB0aGVyZSdzIG5vdGhpbmcgYSB2aXNpdG9yCi0gKiBjYW4gdmlzaXQuCi0gKiA8cC8+Ci0gKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgbm90IHJlLXVzYWJsZS4KLSAqIFRoZSBjbGFzcyBhZGFwdGVyIGNyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgZm9yIGVhY2ggbWV0aG9kLgotICovCi1jbGFzcyBEZWxlZ2F0ZU1ldGhvZEFkYXB0ZXIyIGV4dGVuZHMgTWV0aG9kVmlzaXRvciB7Ci0KLSAgICAvKiogU3VmZml4IGFkZGVkIHRvIGRlbGVnYXRlIGNsYXNzZXMuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVMRUdBVEVfU1VGRklYID0gIl9EZWxlZ2F0ZSI7Ci0KLSAgICAvKiogVGhlIHBhcmVudCBtZXRob2Qgd3JpdGVyIHRvIGNvcHkgb2YgdGhlIG9yaWdpbmFsIG1ldGhvZC4KLSAgICAgKiAgTnVsbCB3aGVuIGRlYWxpbmcgd2l0aCBhIG5hdGl2ZSBvcmlnaW5hbCBtZXRob2QuICovCi0gICAgcHJpdmF0ZSBNZXRob2RWaXNpdG9yIG1PcmdXcml0ZXI7Ci0gICAgLyoqIFRoZSBwYXJlbnQgbWV0aG9kIHdyaXRlciB0byBnZW5lcmF0ZSB0aGUgZGVsZWdhdGluZyBtZXRob2QuIE5ldmVyIG51bGwuICovCi0gICAgcHJpdmF0ZSBNZXRob2RWaXNpdG9yIG1EZWxXcml0ZXI7Ci0gICAgLyoqIFRoZSBvcmlnaW5hbCBtZXRob2QgZGVzY3JpcHRvciAocmV0dXJuIHR5cGUgKyBhcmd1bWVudCB0eXBlcy4pICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgbURlc2M7Ci0gICAgLyoqIFRydWUgaWYgdGhlIG9yaWdpbmFsIG1ldGhvZCBpcyBzdGF0aWMuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1Jc1N0YXRpYzsKLSAgICAvKiogVGhlIGludGVybmFsIGNsYXNzIG5hbWUgKGUuZy4gPGNvZGU+Y29tL2FuZHJvaWQvU29tZUNsYXNzJElubmVyQ2xhc3M8L2NvZGU+LikgKi8KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtQ2xhc3NOYW1lOwotICAgIC8qKiBUaGUgbWV0aG9kIG5hbWUuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU1ldGhvZE5hbWU7Ci0gICAgLyoqIExvZ2dlciBvYmplY3QuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBMb2cgbUxvZzsKLQotICAgIC8qKiBBcnJheSB1c2VkIHRvIGNhcHR1cmUgdGhlIGZpcnN0IGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIG1ldGhvZAotICAgICAqICBhbmQgZHVwbGljYXRlIGl0IGluIHRoZSBkZWxlZ2F0ZS4gKi8KLSAgICBwcml2YXRlIE9iamVjdFtdIG1EZWxlZ2F0ZUxpbmVOdW1iZXI7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBEZWxlZ2F0ZU1ldGhvZEFkYXB0ZXIyfSB0aGF0IHdpbGwgdHJhbnNmb3JtIHRoaXMgbWV0aG9kCi0gICAgICogaW50byBhIGRlbGVnYXRlIGNhbGwuCi0gICAgICogPHAvPgotICAgICAqIFNlZSB7QGxpbmsgRGVsZWdhdGVNZXRob2RBZGFwdGVyMn0gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb2cgVGhlIGxvZ2dlciBvYmplY3QuIE11c3Qgbm90IGJlIG51bGwuCi0gICAgICogQHBhcmFtIG12T3JpZ2luYWwgVGhlIHBhcmVudCBtZXRob2Qgd3JpdGVyIHRvIGNvcHkgb2YgdGhlIG9yaWdpbmFsIG1ldGhvZC4KLSAgICAgKiAgICAgICAgICBNdXN0IGJlIHtAY29kZSBudWxsfSB3aGVuIGRlYWxpbmcgd2l0aCBhIG5hdGl2ZSBvcmlnaW5hbCBtZXRob2QuCi0gICAgICogQHBhcmFtIG12RGVsZWdhdGUgVGhlIHBhcmVudCBtZXRob2Qgd3JpdGVyIHRvIGdlbmVyYXRlIHRoZSBkZWxlZ2F0aW5nIG1ldGhvZC4KLSAgICAgKiAgICAgICAgICBNdXN0IG5ldmVyIGJlIG51bGwuCi0gICAgICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgaW50ZXJuYWwgY2xhc3MgbmFtZSBvZiB0aGUgY2xhc3MgdG8gdmlzaXQsCi0gICAgICogICAgICAgICAgZS5nLiA8Y29kZT5jb20vYW5kcm9pZC9Tb21lQ2xhc3MkSW5uZXJDbGFzczwvY29kZT4uCi0gICAgICogQHBhcmFtIG1ldGhvZE5hbWUgVGhlIHNpbXBsZSBuYW1lIG9mIHRoZSBtZXRob2QuCi0gICAgICogQHBhcmFtIGRlc2MgQSBtZXRob2QgZGVzY3JpcHRvciAoYy5mLiB7QGxpbmsgVHlwZSNnZXRSZXR1cm5UeXBlKFN0cmluZyl9ICsKLSAgICAgKiAgICAgICAgICB7QGxpbmsgVHlwZSNnZXRBcmd1bWVudFR5cGVzKFN0cmluZyl9KQotICAgICAqIEBwYXJhbSBpc1N0YXRpYyBUcnVlIGlmIHRoZSBtZXRob2QgaXMgZGVjbGFyZWQgc3RhdGljLgotICAgICAqLwotICAgIHB1YmxpYyBEZWxlZ2F0ZU1ldGhvZEFkYXB0ZXIyKExvZyBsb2csCi0gICAgICAgICAgICBNZXRob2RWaXNpdG9yIG12T3JpZ2luYWwsCi0gICAgICAgICAgICBNZXRob2RWaXNpdG9yIG12RGVsZWdhdGUsCi0gICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lLAotICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUsCi0gICAgICAgICAgICBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgIGJvb2xlYW4gaXNTdGF0aWMpIHsKLSAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKLSAgICAgICAgbUxvZyA9IGxvZzsKLSAgICAgICAgbU9yZ1dyaXRlciA9IG12T3JpZ2luYWw7Ci0gICAgICAgIG1EZWxXcml0ZXIgPSBtdkRlbGVnYXRlOwotICAgICAgICBtQ2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgICAgICBtTWV0aG9kTmFtZSA9IG1ldGhvZE5hbWU7Ci0gICAgICAgIG1EZXNjID0gZGVzYzsKLSAgICAgICAgbUlzU3RhdGljID0gaXNTdGF0aWM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2VuZXJhdGVzIHRoZSBuZXcgY29kZSBmb3IgdGhlIG1ldGhvZC4KLSAgICAgKiA8cC8+Ci0gICAgICogRm9yIG5hdGl2ZSBtZXRob2RzLCB0aGlzIG11c3QgYmUgaW52b2tlZCBkaXJlY3RseSBieSB7QGxpbmsgRGVsZWdhdGVDbGFzc0FkYXB0ZXJ9Ci0gICAgICogKHNpbmNlIHRoZXkgaGF2ZSBubyBjb2RlIHRvIHZpc2l0KS4KLSAgICAgKiA8cC8+Ci0gICAgICogT3RoZXJ3aXNlIGZvciBub24tbmF0aXZlIG1ldGhvZHMgdGhlIHtAbGluayBEZWxlZ2F0ZUNsYXNzQWRhcHRlcn0gc2ltcGx5IG5lZWRzIHRvCi0gICAgICogcmV0dXJuIHRoaXMgaW5zdGFuY2Ugb2Yge0BsaW5rIERlbGVnYXRlTWV0aG9kQWRhcHRlcjJ9IGFuZCBsZXQgdGhlIG5vcm1hbCB2aXNpdG9yIHBhdHRlcm4KLSAgICAgKiBpbnZva2UgaXQgYXMgcGFydCBvZiB0aGUge0BsaW5rIENsYXNzUmVhZGVyI2FjY2VwdChDbGFzc1Zpc2l0b3IsIGludCl9IHdvcmtmbG93IGFuZCB0aGVuCi0gICAgICogdGhpcyBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGZyb20ge0BsaW5rIE1ldGhvZFZpc2l0b3IjdmlzaXRFbmQoKX0uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZ2VuZXJhdGVEZWxlZ2F0ZUNvZGUoKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZSBnb2FsIGlzIHRvIGdlbmVyYXRlIGEgY2FsbCB0byBhIHN0YXRpYyBkZWxlZ2F0ZSBtZXRob2QuCi0gICAgICAgICAqIElmIHRoaXMgbWV0aG9kIGlzIG5vbi1zdGF0aWMsIHRoZSBmaXJzdCBwYXJhbWV0ZXIgd2lsbCBiZSAndGhpcycuCi0gICAgICAgICAqIEFsbCB0aGUgcGFyYW1ldGVycyBtdXN0IGJlIHBhc3NlZCBhbmQgdGhlbiB0aGUgZXZlbnR1YWwgcmV0dXJuIHR5cGUgcmV0dXJuZWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEV4YW1wbGUsIGxldCdzIHNheSB3ZSBoYXZlIGEgbWV0aG9kIHN1Y2ggYXMKLSAgICAgICAgICogICBwdWJsaWMgdm9pZCBteU1ldGhvZChpbnQgYSwgT2JqZWN0IGIsIEFycmF5TGlzdDxTdHJpbmc+IGMpIHsgLi4uIH0KLSAgICAgICAgICoKLSAgICAgICAgICogV2UnbGwgd2FudCB0byBjcmVhdGUgYSBib2R5IHRoYXQgY2FsbHMgYSBkZWxlZ2F0ZSBtZXRob2QgbGlrZSB0aGlzOgotICAgICAgICAgKiAgIFRoZUNsYXNzX0RlbGVnYXRlLm15TWV0aG9kKHRoaXMsIGEsIGIsIGMpOwotICAgICAgICAgKgotICAgICAgICAgKiBJZiB0aGUgbWV0aG9kIGlzIG5vbi1zdGF0aWMgYW5kIHRoZSBjbGFzcyBuYW1lIGlzIGFuIGlubmVyIGNsYXNzIChlLmcuIGhhcyAkIGluIGl0cwotICAgICAgICAgKiBsYXN0IHNlZ21lbnQpLCB3ZSB3YW50IHRvIHB1c2ggdGhlICd0aGlzJyBvZiB0aGUgb3V0ZXIgY2xhc3MgZmlyc3Q6Ci0gICAgICAgICAqICAgT3V0ZXJDbGFzc19Jbm5lckNsYXNzX0RlbGVnYXRlLm15TWV0aG9kKAotICAgICAgICAgKiAgICAgT3V0ZXJDbGFzcy50aGlzLAotICAgICAgICAgKiAgICAgT3V0ZXJDbGFzcyRJbm5lckNsYXNzLnRoaXMsCi0gICAgICAgICAqICAgICBhLCBiLCBjKTsKLSAgICAgICAgICoKLSAgICAgICAgICogT25seSBvbmUgbGV2ZWwgb2YgaW5uZXIgY2xhc3MgaXMgc3VwcG9ydGVkIHJpZ2h0IG5vdywgZm9yIHNpbXBsaWNpdHkgYW5kIGJlY2F1c2UKLSAgICAgICAgICogd2UgZG9uJ3QgbmVlZCBtb3JlLgotICAgICAgICAgKgotICAgICAgICAgKiBUaGUgZ2VuZXJhdGVkIGNsYXNzIG5hbWUgaXMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZSB3aXRoICJfRGVsZWdhdGUiIGFwcGVuZGVkIHRvIGl0LgotICAgICAgICAgKiBPbmUgdGhpbmcgdG8gcmVhbGl6ZSBpcyB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQgZ2VuZXJpY3MgLS0gc2luY2UgZ2VuZXJpYyB0eXBlcwotICAgICAgICAgKiBhcmUgZXJhc2VkIGF0IGJ1aWxkIHRpbWUsIHRoZXkgaGF2ZSBubyBpbmZsdWVuY2Ugb24gdGhlIG1ldGhvZCBuYW1lIGJlaW5nIGNhbGxlZC4KLSAgICAgICAgICovCi0KLSAgICAgICAgLy8gQWRkIG91ciBhbm5vdGF0aW9uCi0gICAgICAgIEFubm90YXRpb25WaXNpdG9yIGF3ID0gbURlbFdyaXRlci52aXNpdEFubm90YXRpb24oCi0gICAgICAgICAgICAgICAgVHlwZS5nZXRPYmplY3RUeXBlKFR5cGUuZ2V0SW50ZXJuYWxOYW1lKExheW91dGxpYkRlbGVnYXRlLmNsYXNzKSkudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICB0cnVlKTsgLy8gdmlzaWJsZSBhdCBydW50aW1lCi0gICAgICAgIGlmIChhdyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhdy52aXNpdEVuZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURlbFdyaXRlci52aXNpdENvZGUoKTsKLQotICAgICAgICBpZiAobURlbGVnYXRlTGluZU51bWJlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBPYmplY3RbXSBwID0gbURlbGVnYXRlTGluZU51bWJlcjsKLSAgICAgICAgICAgIG1EZWxXcml0ZXIudmlzaXRMaW5lTnVtYmVyKChJbnRlZ2VyKSBwWzBdLCAoTGFiZWwpIHBbMV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgQXJyYXlMaXN0PFR5cGU+IHBhcmFtVHlwZXMgPSBuZXcgQXJyYXlMaXN0PFR5cGU+KCk7Ci0gICAgICAgIFN0cmluZyBkZWxlZ2F0ZUNsYXNzTmFtZSA9IG1DbGFzc05hbWUgKyBERUxFR0FURV9TVUZGSVg7Ci0gICAgICAgIGJvb2xlYW4gcHVzaGVkQXJnMCA9IGZhbHNlOwotICAgICAgICBpbnQgbWF4U3RhY2sgPSAwOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIGNsYXNzIG5hbWUgaGFzIGlubmVyIGFuIGNsYXNzLgotICAgICAgICAvLyBSaWdodCBub3cgd2Ugb25seSBzdXBwb3J0IG9uZSBsZXZlbCBvZiBpbm5lciBjbGFzc2VzLgotICAgICAgICBUeXBlIG91dGVyVHlwZSA9IG51bGw7Ci0gICAgICAgIGludCBzbGFzaCA9IG1DbGFzc05hbWUubGFzdEluZGV4T2YoJy8nKTsKLSAgICAgICAgaW50IGRvbCA9IG1DbGFzc05hbWUubGFzdEluZGV4T2YoJyQnKTsKLSAgICAgICAgaWYgKGRvbCAhPSAtMSAmJiBkb2wgPiBzbGFzaCAmJiBkb2wgPT0gbUNsYXNzTmFtZS5pbmRleE9mKCckJykpIHsKLSAgICAgICAgICAgIFN0cmluZyBvdXRlckNsYXNzID0gbUNsYXNzTmFtZS5zdWJzdHJpbmcoMCwgZG9sKTsKLSAgICAgICAgICAgIG91dGVyVHlwZSA9IFR5cGUuZ2V0T2JqZWN0VHlwZShvdXRlckNsYXNzKTsKLQotICAgICAgICAgICAgLy8gQ2hhbmdlIGEgZGVsZWdhdGUgY2xhc3MgbmFtZSB0byAiY29tL2Zvby9PdXRlcl9Jbm5lcl9EZWxlZ2F0ZSIKLSAgICAgICAgICAgIGRlbGVnYXRlQ2xhc3NOYW1lID0gZGVsZWdhdGVDbGFzc05hbWUucmVwbGFjZSgnJCcsICdfJyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGb3IgYW4gaW5zdGFuY2UgbWV0aG9kIChlLmcuIG5vbi1zdGF0aWMpLCBwdXNoIHRoZSAndGhpcycgcHJlY2VkZWQKLSAgICAgICAgLy8gYnkgdGhlICd0aGlzJyBvZiBhbnkgb3V0ZXIgY2xhc3MsIGlmIGFueS4KLSAgICAgICAgaWYgKCFtSXNTdGF0aWMpIHsKLQotICAgICAgICAgICAgaWYgKG91dGVyVHlwZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0LWxldmVsIGlubmVyIGNsYXNzIGhhcyBhIHBhY2thZ2UtcHJvdGVjdGVkIG1lbWJlciBjYWxsZWQgJ3RoaXMkMCcKLSAgICAgICAgICAgICAgICAvLyB0aGF0IHBvaW50cyB0byB0aGUgb3V0ZXIgY2xhc3MuCi0KLSAgICAgICAgICAgICAgICAvLyBQdXNoIHRoaXMuZ2V0RmllbGQoInRoaXMkMCIpIG9uIHRoZSBjYWxsIHN0YWNrLgotICAgICAgICAgICAgICAgIG1EZWxXcml0ZXIudmlzaXRWYXJJbnNuKE9wY29kZXMuQUxPQUQsIDApOyAvLyB2YXIgMCA9IHRoaXMKLSAgICAgICAgICAgICAgICBtRGVsV3JpdGVyLnZpc2l0RmllbGRJbnNuKE9wY29kZXMuR0VURklFTEQsCi0gICAgICAgICAgICAgICAgICAgICAgICBtQ2xhc3NOYW1lLCAgICAgICAgICAgICAgICAgLy8gY2xhc3Mgd2hlcmUgdGhlIGZpZWxkIGlzIGRlZmluZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzJDAiLCAgICAgICAgICAgICAgICAgICAvLyBmaWVsZCBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRlclR5cGUuZ2V0RGVzY3JpcHRvcigpKTsgLy8gdHlwZSBvZiB0aGUgZmllbGQKLSAgICAgICAgICAgICAgICBtYXhTdGFjaysrOwotICAgICAgICAgICAgICAgIHBhcmFtVHlwZXMuYWRkKG91dGVyVHlwZSk7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUHVzaCAidGhpcyIgZm9yIHRoZSBpbnN0YW5jZSBtZXRob2QsIHdoaWNoIGlzIGFsd2F5cyBBTE9BRCAwCi0gICAgICAgICAgICBtRGVsV3JpdGVyLnZpc2l0VmFySW5zbihPcGNvZGVzLkFMT0FELCAwKTsKLSAgICAgICAgICAgIG1heFN0YWNrKys7Ci0gICAgICAgICAgICBwdXNoZWRBcmcwID0gdHJ1ZTsKLSAgICAgICAgICAgIHBhcmFtVHlwZXMuYWRkKFR5cGUuZ2V0T2JqZWN0VHlwZShtQ2xhc3NOYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQdXNoIGFsbCBvdGhlciBhcmd1bWVudHMuIFN0YXJ0IGF0IGFyZyAxIGlmIHdlIGFscmVhZHkgcHVzaGVkICd0aGlzJyBhYm92ZS4KLSAgICAgICAgVHlwZVtdIGFyZ1R5cGVzID0gVHlwZS5nZXRBcmd1bWVudFR5cGVzKG1EZXNjKTsKLSAgICAgICAgaW50IG1heExvY2FscyA9IHB1c2hlZEFyZzAgPyAxIDogMDsKLSAgICAgICAgZm9yIChUeXBlIHQgOiBhcmdUeXBlcykgewotICAgICAgICAgICAgaW50IHNpemUgPSB0LmdldFNpemUoKTsKLSAgICAgICAgICAgIG1EZWxXcml0ZXIudmlzaXRWYXJJbnNuKHQuZ2V0T3Bjb2RlKE9wY29kZXMuSUxPQUQpLCBtYXhMb2NhbHMpOwotICAgICAgICAgICAgbWF4TG9jYWxzICs9IHNpemU7Ci0gICAgICAgICAgICBtYXhTdGFjayArPSBzaXplOwotICAgICAgICAgICAgcGFyYW1UeXBlcy5hZGQodCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGRlc2NyaXB0b3Igb2YgdGhlIGRlbGVnYXRlIGJhc2VkIG9uIHRoZSBwYXJhbWV0ZXJzCi0gICAgICAgIC8vIHdlIHB1c2hlZCBvbiB0aGUgY2FsbCBzdGFjay4gVGhlIHJldHVybiB0eXBlIHJlbWFpbnMgdW5jaGFuZ2VkLgotICAgICAgICBTdHJpbmcgZGVzYyA9IFR5cGUuZ2V0TWV0aG9kRGVzY3JpcHRvcigKLSAgICAgICAgICAgICAgICBUeXBlLmdldFJldHVyblR5cGUobURlc2MpLAotICAgICAgICAgICAgICAgIHBhcmFtVHlwZXMudG9BcnJheShuZXcgVHlwZVtwYXJhbVR5cGVzLnNpemUoKV0pKTsKLQotICAgICAgICAvLyBJbnZva2UgdGhlIHN0YXRpYyBkZWxlZ2F0ZQotICAgICAgICBtRGVsV3JpdGVyLnZpc2l0TWV0aG9kSW5zbihPcGNvZGVzLklOVk9LRVNUQVRJQywKLSAgICAgICAgICAgICAgICBkZWxlZ2F0ZUNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICBtTWV0aG9kTmFtZSwKLSAgICAgICAgICAgICAgICBkZXNjKTsKLQotICAgICAgICBUeXBlIHJldHVyblR5cGUgPSBUeXBlLmdldFJldHVyblR5cGUobURlc2MpOwotICAgICAgICBtRGVsV3JpdGVyLnZpc2l0SW5zbihyZXR1cm5UeXBlLmdldE9wY29kZShPcGNvZGVzLklSRVRVUk4pKTsKLQotICAgICAgICBtRGVsV3JpdGVyLnZpc2l0TWF4cyhtYXhTdGFjaywgbWF4TG9jYWxzKTsKLSAgICAgICAgbURlbFdyaXRlci52aXNpdEVuZCgpOwotCi0gICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgbm93LiBNYXliZSB3ZSBzaG91bGQgY29sbGVjdCB0aGVzZSBhbmQgc3RvcmUgdGhlbSBpbgotICAgICAgICAvLyBhIHRleHQgZmlsZSBmb3IgaGVscGluZyBjcmVhdGUgdGhlIGRlbGVnYXRlcy4gV2UgY291bGQgYWxzbyBjb21wYXJlCi0gICAgICAgIC8vIHRoZSB0ZXh0IGZpbGUgdG8gYSBnb2xkZW4gYW5kIGJyZWFrIHRoZSBidWlsZCBvbiB1bnN1cHBvcnRlZCBjaGFuZ2VzCi0gICAgICAgIC8vIG9yIHJlZ3Jlc3Npb25zLiBFdmVuIGJldHRlciB3ZSBjb3VsZCBmYW5jeS1wcmludCBzb21ldGhpbmcgdGhhdCBsb29rcwotICAgICAgICAvLyBsaWtlIHRoZSBleHBlY3RlZCBKYXZhIG1ldGhvZCBkZWNsYXJhdGlvbi4KLSAgICAgICAgbUxvZy5kZWJ1ZygiRGVsZWdhdGU6ICUxJHMgIyAlMiRzICUzJHMiLCBkZWxlZ2F0ZUNsYXNzTmFtZSwgbU1ldGhvZE5hbWUsIGRlc2MpOwotICAgIH0KLQotICAgIC8qIFBhc3MgZG93biB0byB2aXNpdG9yIHdyaXRlci4gSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgZWl0aGVyIGRvIG5vdGhpbmcuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRDb2RlKCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0Q29kZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiB2aXNpdE1heHMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHZpc2l0RW5kIGlmIHRoZXJlIHdhcyBhbnkgY29kZSB0byByZXdyaXRlLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TWF4cyhpbnQgbWF4U3RhY2ssIGludCBtYXhMb2NhbHMpIHsKLSAgICAgICAgaWYgKG1PcmdXcml0ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbU9yZ1dyaXRlci52aXNpdE1heHMobWF4U3RhY2ssIG1heExvY2Fscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogRW5kIG9mIHZpc2l0aW5nLiBHZW5lcmF0ZSB0aGUgZGVsZWdhdGluZyBjb2RlLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0RW5kKCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0RW5kKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZ2VuZXJhdGVEZWxlZ2F0ZUNvZGUoKTsKLSAgICB9Ci0KLSAgICAvKiBXcml0ZXMgYWxsIGFubm90YXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgbWV0aG9kLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBBbm5vdGF0aW9uVmlzaXRvciB2aXNpdEFubm90YXRpb24oU3RyaW5nIGRlc2MsIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU9yZ1dyaXRlci52aXNpdEFubm90YXRpb24oZGVzYywgdmlzaWJsZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFdyaXRlcyBhbGwgYW5ub3RhdGlvbiBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBvcmlnaW5hbCBtZXRob2QuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0QW5ub3RhdGlvbkRlZmF1bHQoKSB7Ci0gICAgICAgIGlmIChtT3JnV3JpdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtT3JnV3JpdGVyLnZpc2l0QW5ub3RhdGlvbkRlZmF1bHQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0UGFyYW1ldGVyQW5ub3RhdGlvbihpbnQgcGFyYW1ldGVyLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU9yZ1dyaXRlci52aXNpdFBhcmFtZXRlckFubm90YXRpb24ocGFyYW1ldGVyLCBkZXNjLCB2aXNpYmxlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogV3JpdGVzIGFsbCBhdHRyaWJ1dGVzIGZyb20gdGhlIG9yaWdpbmFsIG1ldGhvZC4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZShBdHRyaWJ1dGUgYXR0cikgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBPbmx5IHdyaXRlcyB0aGUgZmlyc3QgbGluZSBudW1iZXIgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgY29kZSBzbyB0aGF0IHNvdXJjZQotICAgICAqIHZpZXdlcnMgY2FuIGRpcmVjdCB0byB0aGUgY29ycmVjdCBtZXRob2QsIGV2ZW4gaWYgdGhlIGNvbnRlbnQgZG9lc24ndCBtYXRjaC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdExpbmVOdW1iZXIoaW50IGxpbmUsIExhYmVsIHN0YXJ0KSB7Ci0gICAgICAgIC8vIENhcHR1cmUgdGhlIGZpcnN0IGxpbmUgdmFsdWVzIGZvciB0aGUgbmV3IGRlbGVnYXRlIG1ldGhvZAotICAgICAgICBpZiAobURlbGVnYXRlTGluZU51bWJlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtRGVsZWdhdGVMaW5lTnVtYmVyID0gbmV3IE9iamVjdFtdIHsgbGluZSwgc3RhcnQgfTsKLSAgICAgICAgfQotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0TGluZU51bWJlcihsaW5lLCBzdGFydCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdEluc24oaW50IG9wY29kZSkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0SW5zbihvcGNvZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMYWJlbChMYWJlbCBsYWJlbCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0TGFiZWwobGFiZWwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRUcnlDYXRjaEJsb2NrKExhYmVsIHN0YXJ0LCBMYWJlbCBlbmQsIExhYmVsIGhhbmRsZXIsIFN0cmluZyB0eXBlKSB7Ci0gICAgICAgIGlmIChtT3JnV3JpdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1PcmdXcml0ZXIudmlzaXRUcnlDYXRjaEJsb2NrKHN0YXJ0LCBlbmQsIGhhbmRsZXIsIHR5cGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRNZXRob2RJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjKSB7Ci0gICAgICAgIGlmIChtT3JnV3JpdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1PcmdXcml0ZXIudmlzaXRNZXRob2RJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRGaWVsZEluc24oaW50IG9wY29kZSwgU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MpIHsKLSAgICAgICAgaWYgKG1PcmdXcml0ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbU9yZ1dyaXRlci52aXNpdEZpZWxkSW5zbihvcGNvZGUsIG93bmVyLCBuYW1lLCBkZXNjKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0RnJhbWUoaW50IHR5cGUsIGludCBuTG9jYWwsIE9iamVjdFtdIGxvY2FsLCBpbnQgblN0YWNrLCBPYmplY3RbXSBzdGFjaykgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0RnJhbWUodHlwZSwgbkxvY2FsLCBsb2NhbCwgblN0YWNrLCBzdGFjayk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdElpbmNJbnNuKGludCB2YXIsIGludCBpbmNyZW1lbnQpIHsKLSAgICAgICAgaWYgKG1PcmdXcml0ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbU9yZ1dyaXRlci52aXNpdElpbmNJbnNuKHZhciwgaW5jcmVtZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0SW50SW5zbihpbnQgb3Bjb2RlLCBpbnQgb3BlcmFuZCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0SW50SW5zbihvcGNvZGUsIG9wZXJhbmQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRKdW1wSW5zbihpbnQgb3Bjb2RlLCBMYWJlbCBsYWJlbCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0SnVtcEluc24ob3Bjb2RlLCBsYWJlbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdExkY0luc24oT2JqZWN0IGNzdCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0TGRjSW5zbihjc3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMb2NhbFZhcmlhYmxlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywgU3RyaW5nIHNpZ25hdHVyZSwKLSAgICAgICAgICAgIExhYmVsIHN0YXJ0LCBMYWJlbCBlbmQsIGludCBpbmRleCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0TG9jYWxWYXJpYWJsZShuYW1lLCBkZXNjLCBzaWduYXR1cmUsIHN0YXJ0LCBlbmQsIGluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TG9va3VwU3dpdGNoSW5zbihMYWJlbCBkZmx0LCBpbnRbXSBrZXlzLCBMYWJlbFtdIGxhYmVscykgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0TG9va3VwU3dpdGNoSW5zbihkZmx0LCBrZXlzLCBsYWJlbHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRNdWx0aUFOZXdBcnJheUluc24oU3RyaW5nIGRlc2MsIGludCBkaW1zKSB7Ci0gICAgICAgIGlmIChtT3JnV3JpdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1PcmdXcml0ZXIudmlzaXRNdWx0aUFOZXdBcnJheUluc24oZGVzYywgZGltcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdFRhYmxlU3dpdGNoSW5zbihpbnQgbWluLCBpbnQgbWF4LCBMYWJlbCBkZmx0LCBMYWJlbFtdIGxhYmVscykgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0VGFibGVTd2l0Y2hJbnNuKG1pbiwgbWF4LCBkZmx0LCBsYWJlbHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRUeXBlSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgdHlwZSkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0VHlwZUluc24ob3Bjb2RlLCB0eXBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0VmFySW5zbihpbnQgb3Bjb2RlLCBpbnQgdmFyKSB7Ci0gICAgICAgIGlmIChtT3JnV3JpdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1PcmdXcml0ZXIudmlzaXRWYXJJbnNuKG9wY29kZSwgdmFyKTsKLSAgICAgICAgfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9EZXBlbmRlbmN5RmluZGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlcGVuZGVuY3lGaW5kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4OGM3MC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlcGVuZGVuY3lGaW5kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVzdGluZy5WaXNpYmlsaXR5OwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQW5ub3RhdGlvblZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQXR0cmlidXRlOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzUmVhZGVyOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5GaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTGFiZWw7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5PcGNvZGVzOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLlR5cGU7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uc2lnbmF0dXJlLlNpZ25hdHVyZVJlYWRlcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5zaWduYXR1cmUuU2lnbmF0dXJlVmlzaXRvcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci0KLS8qKgotICogQW5hbHl6ZXMgdGhlIGlucHV0IEpBUiB1c2luZyB0aGUgQVNNIGphdmEgYnl0ZWNvZGUgbWFuaXB1bGF0aW9uIGxpYnJhcnkKLSAqIHRvIGxpc3QgdGhlIGNsYXNzZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gQSAiZGVwZW5kZW5jeSIgaXMgYSBjbGFzcwotICogdXNlZCBieSBhbm90aGVyIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgRGVwZW5kZW5jeUZpbmRlciB7Ci0KLSAgICAvLyBOb3RlOiBhIGJ1bmNoIG9mIHN0dWZmIGhhcyBwYWNrYWdlLWxldmVsIGFjY2VzcyBmb3IgdW5pdCB0ZXN0cy4gQ29uc2lkZXIgaXQgcHJpdmF0ZS4KLQotICAgIC8qKiBPdXRwdXQgbG9nZ2VyLiAqLwotICAgIHByaXZhdGUgZmluYWwgTG9nIG1Mb2c7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IGFuYWx5emVyLgotICAgICAqCi0gICAgICogQHBhcmFtIGxvZyBUaGUgbG9nIG91dHB1dC4KLSAgICAgKi8KLSAgICBwdWJsaWMgRGVwZW5kZW5jeUZpbmRlcihMb2cgbG9nKSB7Ci0gICAgICAgIG1Mb2cgPSBsb2c7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RhcnRzIHRoZSBhbmFseXNpcyB1c2luZyBwYXJhbWV0ZXJzIGZyb20gdGhlIGNvbnN0cnVjdG9yLgotICAgICAqCi0gICAgICogQHBhcmFtIG9zSmFyUGF0aCBUaGUgaW5wdXQgc291cmNlIEpBUnMgdG8gcGFyc2UuCi0gICAgICogQHJldHVybiBBIHBhaXI6IFswXTogbWFwIHsgY2xhc3MgRlFDTiA9PiBzZXQgb2YgRlFDTiBjbGFzcyBkZXBlbmRlbmNpZXMgfS4KLSAgICAgKiAgICAgICAgICAgICAgICAgWzFdOiBtYXAgeyBtaXNzaW5nIGNsYXNzIEZRQ04gPT4gc2V0IG9mIEZRQ04gY2xhc3MgdGhhdCB1c2VzIGl0LiB9Ci0gICAgICovCi0gICAgcHVibGljIExpc3Q8TWFwPFN0cmluZywgU2V0PFN0cmluZz4+PiBmaW5kRGVwcyhMaXN0PFN0cmluZz4gb3NKYXJQYXRoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzID0gcGFyc2VaaXAob3NKYXJQYXRoKTsKLSAgICAgICAgbUxvZy5pbmZvKCJGb3VuZCAlZCBjbGFzc2VzIGluIGlucHV0IEpBUiVzLiIsCi0gICAgICAgICAgICAgICAgemlwQ2xhc3Nlcy5zaXplKCksCi0gICAgICAgICAgICAgICAgb3NKYXJQYXRoLnNpemUoKSA+IDEgPyAicyIgOiAiIik7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IGRlcHMgPSBmaW5kQ2xhc3Nlc0RlcHMoemlwQ2xhc3Nlcyk7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IG1pc3NpbmcgPSBmaW5kTWlzc2luZ0NsYXNzZXMoZGVwcywgemlwQ2xhc3Nlcy5rZXlTZXQoKSk7Ci0KLSAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8TWFwPFN0cmluZyxTZXQ8U3RyaW5nPj4+KDIpOwotICAgICAgICByZXN1bHQuYWRkKGRlcHMpOwotICAgICAgICByZXN1bHQuYWRkKG1pc3NpbmcpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByaW50cyBkZXBlbmRlbmNpZXMgdG8gdGhlIGN1cnJlbnQgbG9nZ2VyLCBmb3VuZCBzdHVmZiBhbmQgbWlzc2luZyBzdHVmZi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBwcmludEFsbERlcHMoTGlzdDxNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4+IHJlc3VsdCkgewotICAgICAgICBhc3NlcnQgcmVzdWx0LnNpemUoKSA9PSAyOwotICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZGVwcyA9IHJlc3VsdC5nZXQoMCk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBtaXNzaW5nID0gcmVzdWx0LmdldCgxKTsKLQotICAgICAgICAvLyBQcmludCBhbGwgZGVwZW5kZW5jZXMgZm91bmQgaW4gdGhlIGZvcm1hdDoKLSAgICAgICAgLy8gK0ZvdW5kOiA8RlFDTiBmcm9tIHppcD4KLSAgICAgICAgLy8gICAgIHVzZXM6IEZRQ04KLQotICAgICAgICBtTG9nLmluZm8oIisrKysrKyAlZCBFbnRyaWVzIGZvdW5kIGluIHNvdXJjZSBKQVJzIiwgZGVwcy5zaXplKCkpOwotICAgICAgICBtTG9nLmluZm8oIiIpOwotCi0gICAgICAgIGZvciAoRW50cnk8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZW50cnkgOiBkZXBzLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgICAgIG1Mb2cuaW5mbyggICAgIitGb3VuZCAgOiAlcyIsIGVudHJ5LmdldEtleSgpKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIGRlcCA6IGVudHJ5LmdldFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICBtTG9nLmluZm8oIiAgICB1c2VzOiAlcyIsIGRlcCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1Mb2cuaW5mbygiIik7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8vIE5vdyBwcmludCBhbGwgbWlzc2luZyBkZXBlbmRlbmNlcyBpbiB0aGUgZm9ybWF0OgotICAgICAgICAvLyAtTWlzc2luZyA8RlFDTj46Ci0gICAgICAgIC8vICAgICB1c2VkIGJ5OiA8RlFDTj4KLQotICAgICAgICBtTG9nLmluZm8oIiIpOwotICAgICAgICBtTG9nLmluZm8oIi0tLS0tLSAlZCBFbnRyaWVzIG1pc3NpbmcgZnJvbSBzb3VyY2UgSkFScyIsIG1pc3Npbmcuc2l6ZSgpKTsKLSAgICAgICAgbUxvZy5pbmZvKCIiKTsKLQotICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgU2V0PFN0cmluZz4+IGVudHJ5IDogbWlzc2luZy5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICBtTG9nLmluZm8oICAgICItTWlzc2luZyAgOiAlcyIsIGVudHJ5LmdldEtleSgpKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIGRlcCA6IGVudHJ5LmdldFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICBtTG9nLmluZm8oIiAgIHVzZWQgYnk6ICVzIiwgZGVwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUxvZy5pbmZvKCIiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByaW50cyBvbmx5IGEgc3VtbWFyeSBvZiB0aGUgbWlzc2luZyBkZXBlbmRlbmNpZXMgdG8gdGhlIGN1cnJlbnQgbG9nZ2VyLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHByaW50TWlzc2luZ0RlcHMoTGlzdDxNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4+IHJlc3VsdCkgewotICAgICAgICBhc3NlcnQgcmVzdWx0LnNpemUoKSA9PSAyOwotICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IGRlcHMgPSByZXN1bHQuZ2V0KDApOwotICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gbWlzc2luZyA9IHJlc3VsdC5nZXQoMSk7Ci0KLSAgICAgICAgZm9yIChTdHJpbmcgZnFjbiA6IG1pc3Npbmcua2V5U2V0KCkpIHsKLSAgICAgICAgICAgIG1Mb2cuaW5mbygiJXMiLCBmcWNuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIFBhcnNlcyBhIEpBUiBmaWxlIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgY2xhc3NlcyBmb3VuZHMgdXNpbmcgYSBtYXAKLSAgICAgKiBjbGFzcyBuYW1lID0+IEFTTSBDbGFzc1JlYWRlci4gQ2xhc3MgbmFtZXMgYXJlIGluIHRoZSBmb3JtICJhbmRyb2lkLnZpZXcuVmlldyIuCi0gICAgICovCi0gICAgTWFwPFN0cmluZyxDbGFzc1JlYWRlcj4gcGFyc2VaaXAoTGlzdDxTdHJpbmc+IGphclBhdGhMaXN0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGNsYXNzZXMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotCi0gICAgICAgIGZvciAoU3RyaW5nIGphclBhdGggOiBqYXJQYXRoTGlzdCkgewotICAgICAgICAgICAgWmlwRmlsZSB6aXAgPSBuZXcgWmlwRmlsZShqYXJQYXRoKTsKLSAgICAgICAgICAgIEVudW1lcmF0aW9uPD8gZXh0ZW5kcyBaaXBFbnRyeT4gZW50cmllcyA9IHppcC5lbnRyaWVzKCk7Ci0gICAgICAgICAgICBaaXBFbnRyeSBlbnRyeTsKLSAgICAgICAgICAgIHdoaWxlIChlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmdldE5hbWUoKS5lbmRzV2l0aCgiLmNsYXNzIikpIHsKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoemlwLmdldElucHV0U3RyZWFtKGVudHJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc1JlYWRlclRvQ2xhc3NOYW1lKGNyKTsKLSAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXQoY2xhc3NOYW1lLCBjcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNsYXNzZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXRpbGl0eSB0aGF0IHJldHVybnMgdGhlIGZ1bGx5IHF1YWxpZmllZCBiaW5hcnkgY2xhc3MgbmFtZSBmb3IgYSBDbGFzc1JlYWRlci4KLSAgICAgKiBFLmcuIGl0IHJldHVybnMgc29tZXRoaW5nIGxpa2UgYW5kcm9pZC52aWV3LlZpZXcuCi0gICAgICovCi0gICAgc3RhdGljIFN0cmluZyBjbGFzc1JlYWRlclRvQ2xhc3NOYW1lKENsYXNzUmVhZGVyIGNsYXNzUmVhZGVyKSB7Ci0gICAgICAgIGlmIChjbGFzc1JlYWRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBjbGFzc1JlYWRlci5nZXRDbGFzc05hbWUoKS5yZXBsYWNlKCcvJywgJy4nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFV0aWxpdHkgdGhhdCByZXR1cm5zIHRoZSBmdWxseSBxdWFsaWZpZWQgYmluYXJ5IGNsYXNzIG5hbWUgZnJvbSBhIHBhdGgtbGlrZSBGUUNOLgotICAgICAqIEUuZy4gaXQgcmV0dXJucyBhbmRyb2lkLnZpZXcuVmlldyBmcm9tIGFuZHJvaWQvdmlldy9WaWV3LgotICAgICAqLwotICAgIHN0YXRpYyBTdHJpbmcgaW50ZXJuYWxUb0JpbmFyeUNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7Ci0gICAgICAgIGlmIChjbGFzc05hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnJlcGxhY2UoJy8nLCAnLicpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmluZHMgYWxsIGRlcGVuZGVuY2llcyBmb3IgYWxsIGNsYXNzZXMgaW4ga2VlcENsYXNzZXMgd2hpY2ggYXJlIGFsc28KLSAgICAgKiBsaXN0ZWQgaW4gemlwQ2xhc3Nlcy4gUmV0dXJucyBhIG1hcCBvZiBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3VuZC4KLSAgICAgKi8KLSAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZmluZENsYXNzZXNEZXBzKE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzKSB7Ci0KLSAgICAgICAgLy8gVGhlIGRlcGVuZGVuY2llcyB0aGF0IHdlJ2xsIGNvbGxlY3QuCi0gICAgICAgIC8vIEl0J3MgYSBtYXAgQ2xhc3MgbmFtZSA9PiB1c2VzIGNsYXNzIG5hbWVzLgotICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZGVwZW5kZW5jeU1hcCA9IG5ldyBUcmVlTWFwPFN0cmluZywgU2V0PFN0cmluZz4+KCk7Ci0KLSAgICAgICAgRGVwZW5kZW5jeVZpc2l0b3IgdmlzaXRvciA9IGdldFZpc2l0b3IoKTsKLQotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIENsYXNzUmVhZGVyPiBlbnRyeSA6IHppcENsYXNzZXMuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZW50cnkuZ2V0S2V5KCk7Ci0KLSAgICAgICAgICAgICAgICBUcmVlU2V0PFN0cmluZz4gc2V0ID0gbmV3IFRyZWVTZXQ8U3RyaW5nPigpOwotICAgICAgICAgICAgICAgIGRlcGVuZGVuY3lNYXAucHV0KG5hbWUsIHNldCk7Ci0gICAgICAgICAgICAgICAgdmlzaXRvci5zZXREZXBlbmRlbmN5U2V0KHNldCk7Ci0KLSAgICAgICAgICAgICAgICBDbGFzc1JlYWRlciBjciA9IGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgY3IuYWNjZXB0KHZpc2l0b3IsIDAgLyogZmxhZ3MgKi8pOwotCi0gICAgICAgICAgICAgICAgdmlzaXRvci5zZXREZXBlbmRlbmN5U2V0KG51bGwpOwotCi0gICAgICAgICAgICAgICAgbUxvZy5kZWJ1Z05vbG4oIlZpc2l0ZWQgJWQgY2xhc3Nlc1xyIiwgKytjb3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBtTG9nLmRlYnVnTm9sbigiXG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZXBlbmRlbmN5TWFwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXB1dGVzIHdoaWNoIGNsYXNzZXMgRlFDTiB3ZXJlIGZvdW5kIGFzIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBOT1QgbGlzdGVkCi0gICAgICogaW4gdGhlIG9yaWdpbmFsIEpBUiBjbGFzc2VzLgotICAgICAqCi0gICAgICogQHBhcmFtIGRlcHMgVGhlIG1hcCB7IEZRQ04gPT4gZGVwZW5kZW5jaWVzW10gfSByZXR1cm5lZCBieSB7QGxpbmsgI2ZpbmRDbGFzc2VzRGVwcyhNYXApfS4KLSAgICAgKiBAcGFyYW0gemlwQ2xhc3NlcyBUaGUgc2V0IG9mIGFsbCBjbGFzc2VzIEZRQ04gZm91bmQgaW4gdGhlIEpBUiBmaWxlcy4KLSAgICAgKiBAcmV0dXJuIEEgbWFwIHsgRlFDTiBub3QgZm91bmQgaW4gdGhlIHppcENsYXNzZXMgPT4gY2xhc3NlcyB1c2luZyBpdCB9Ci0gICAgICovCi0gICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZmluZE1pc3NpbmdDbGFzc2VzKAotICAgICAgICAgICAgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IGRlcHMsCi0gICAgICAgICAgICBTZXQ8U3RyaW5nPiB6aXBDbGFzc2VzKSB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBtaXNzaW5nID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4oKTsKLQotICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgU2V0PFN0cmluZz4+IGVudHJ5IDogZGVwcy5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGVudHJ5LmdldEtleSgpOwotCi0gICAgICAgICAgICBmb3IgKFN0cmluZyBkZXAgOiBlbnRyeS5nZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF6aXBDbGFzc2VzLmNvbnRhaW5zKGRlcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBkZXBlbmRlbmN5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHppcCBjbGFzc2VzLgotICAgICAgICAgICAgICAgICAgICBTZXQ8U3RyaW5nPiBzZXQgPSBtaXNzaW5nLmdldChkZXApOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcucHV0KGRlcCwgc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKG5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1pc3Npbmc7Ci0gICAgfQotCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvKioKLSAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgRGVwZW5kZW5jeVZpc2l0b3IuIFVzZWZ1bCBmb3IgdW5pdCB0ZXN0cy4KLSAgICAgKi8KLSAgICBAVmlzaWJsZUZvclRlc3RpbmcodmlzaWJpbGl0eT1WaXNpYmlsaXR5LlBSSVZBVEUpCi0gICAgRGVwZW5kZW5jeVZpc2l0b3IgZ2V0VmlzaXRvcigpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEZXBlbmRlbmN5VmlzaXRvcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFZpc2l0b3IgdG8gY29sbGVjdCBhbGwgdGhlIHR5cGUgZGVwZW5kZW5jaWVzIGZyb20gYSBjbGFzcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgY2xhc3MgRGVwZW5kZW5jeVZpc2l0b3IgZXh0ZW5kcyBDbGFzc1Zpc2l0b3IgewotCi0gICAgICAgIHByaXZhdGUgU2V0PFN0cmluZz4gbUN1cnJlbnREZXBTZXQ7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENyZWF0ZXMgYSBuZXcgdmlzaXRvciB0aGF0IHdpbGwgZmluZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIHZpc2l0ZWQgY2xhc3MuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgRGVwZW5kZW5jeVZpc2l0b3IoKSB7Ci0gICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldHMgdGhlIHtAbGluayBTZXR9IHdoZXJlIHRvIHJlY29yZCBkaXJlY3QgZGVwZW5kZW5jaWVzIGZvciB0aGlzIGNsYXNzLgotICAgICAgICAgKiBUaGlzIHdpbGwgY2hhbmdlIGJlZm9yZSBlYWNoIHtAbGluayBDbGFzc1JlYWRlciNhY2NlcHQoQ2xhc3NWaXNpdG9yLCBpbnQpfSBjYWxsLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc2V0RGVwZW5kZW5jeVNldChTZXQ8U3RyaW5nPiBzZXQpIHsKLSAgICAgICAgICAgIG1DdXJyZW50RGVwU2V0ID0gc2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnNpZGVycyB0aGUgZ2l2ZW4gY2xhc3MgbmFtZSBhcyBhIGRlcGVuZGVuY3kuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBjb25zaWRlck5hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjbGFzc05hbWUgPSBpbnRlcm5hbFRvQmluYXJ5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgLy8gZXhjbHVkZSBjbGFzc2VzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGRlZmF1bHQgSlJFICh0aGUgb25lIGV4ZWN1dGluZyB0aGlzIHByb2dyYW0pCi0gICAgICAgICAgICAgICAgaWYgKGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MoY2xhc3NOYW1lKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBpZ25vcmUKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIGl0IHRvIHRoZSBkZXBlbmRlbmN5IHNldCBmb3IgdGhlIGN1cnJlbnRseSB2aXNpdGVkIGNsYXNzLCBhcyBuZWVkZWQuCi0gICAgICAgICAgICBhc3NlcnQgbUN1cnJlbnREZXBTZXQgIT0gbnVsbDsKLSAgICAgICAgICAgIGlmIChtQ3VycmVudERlcFNldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUN1cnJlbnREZXBTZXQuYWRkKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIHRoaXMgYXJyYXkgb2YgbmFtZXMgdXNpbmcgY29uc2lkZXJOYW1lKCkuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBjb25zaWRlck5hbWVzKFN0cmluZ1tdIGNsYXNzTmFtZXMpIHsKLSAgICAgICAgICAgIGlmIChjbGFzc05hbWVzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBjbGFzc05hbWUgOiBjbGFzc05hbWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZShjbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25zaWRlcnMgdGhpcyBzaWduYXR1cmUgb3IgdHlwZSBzaWduYXR1cmUgYnkgaW52b2tpbmcgdGhlIHtAbGluayBTaWduYXR1cmVWaXNpdG9yfQotICAgICAgICAgKiBvbiBpdC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIGNvbnNpZGVyU2lnbmF0dXJlKFN0cmluZyBzaWduYXR1cmUpIHsKLSAgICAgICAgICAgIGlmIChzaWduYXR1cmUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFNpZ25hdHVyZVJlYWRlciBzciA9IG5ldyBTaWduYXR1cmVSZWFkZXIoc2lnbmF0dXJlKTsKLSAgICAgICAgICAgICAgICAvLyBTaWduYXR1cmVSZWFkZXIuYWNjZXB0IHdpbGwgY2FsbCBhY2Nlc3NUeXBlIHNvIHdlIGRvbid0IHJlYWxseSBoYXZlCi0gICAgICAgICAgICAgICAgLy8gdG8gZGlmZmVyZW50aWF0ZSB3aGVyZSB0aGUgc2lnbmF0dXJlIGNvbWVzIGZyb20uCi0gICAgICAgICAgICAgICAgc3IuYWNjZXB0KG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIHRoaXMge0BsaW5rIFR5cGV9LiBGb3IgYXJyYXlzLCB0aGUgZWxlbWVudCB0eXBlIGlzIGNvbnNpZGVyZWQuCi0gICAgICAgICAqIElmIHRoZSB0eXBlIGlzIGFuIG9iamVjdCwgaXQncyBpbnRlcm5hbCBuYW1lIGlzIGNvbnNpZGVyZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBjb25zaWRlclR5cGUoVHlwZSB0KSB7Ci0gICAgICAgICAgICBpZiAodCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHQuZ2V0U29ydCgpID09IFR5cGUuQVJSQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgdCA9IHQuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHQuZ2V0U29ydCgpID09IFR5cGUuT0JKRUNUKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZSh0LmdldEludGVybmFsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIGEgZGVzY3JpcHRvciBzdHJpbmcuIFRoZSBkZXNjcmlwdG9yIGlzIGNvbnZlcnRlZCB0byBhIHtAbGluayBUeXBlfQotICAgICAgICAgKiBhbmQgdGhlbiBjb25zaWRlclR5cGUoKSBpcyBpbnZva2VkLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGJvb2xlYW4gY29uc2lkZXJEZXNjKFN0cmluZyBkZXNjKSB7Ci0gICAgICAgICAgICBpZiAoZGVzYyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2MubGVuZ3RoKCkgPiAwICYmIGRlc2MuY2hhckF0KDApID09ICcoJykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCBkZXNjcmlwdG9yIHdpdGggYXJndW1lbnRzIGFuZCBhIHJldHVybiB0eXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSB0ID0gVHlwZS5nZXRSZXR1cm5UeXBlKGRlc2MpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc2lkZXJUeXBlKHQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFR5cGUgYXJnIDogVHlwZS5nZXRBcmd1bWVudFR5cGVzKGRlc2MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2lkZXJUeXBlKGFyZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgdCA9IFR5cGUuZ2V0VHlwZShkZXNjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyVHlwZSh0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIG5vdCBhIHZhbGlkIHR5cGUuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLQotICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgLy8gLS0tIENsYXNzVmlzaXRvciwgRmllbGRWaXNpdG9yCi0gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgIC8vIFZpc2l0cyBhIGNsYXNzIGhlYWRlcgotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXQoaW50IHZlcnNpb24sIGludCBhY2Nlc3MsIFN0cmluZyBuYW1lLAotICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIFN0cmluZyBzdXBlck5hbWUsIFN0cmluZ1tdIGludGVyZmFjZXMpIHsKLSAgICAgICAgICAgIC8vIHNpZ25hdHVyZSBpcyB0aGUgc2lnbmF0dXJlIG9mIHRoaXMgY2xhc3MuIE1heSBiZSBudWxsIGlmIHRoZSBjbGFzcyBpcyBub3QgYSBnZW5lcmljCi0gICAgICAgICAgICAvLyBvbmUsIGFuZCBkb2VzIG5vdCBleHRlbmQgb3IgaW1wbGVtZW50IGdlbmVyaWMgY2xhc3NlcyBvciBpbnRlcmZhY2VzLgotCi0gICAgICAgICAgICBpZiAoc2lnbmF0dXJlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjb25zaWRlclNpZ25hdHVyZShzaWduYXR1cmUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBzdXBlck5hbWUgaXMgdGhlIGludGVybmFsIG9mIG5hbWUgb2YgdGhlIHN1cGVyIGNsYXNzIChzZWUgZ2V0SW50ZXJuYWxOYW1lKS4KLSAgICAgICAgICAgIC8vIEZvciBpbnRlcmZhY2VzLCB0aGUgc3VwZXIgY2xhc3MgaXMgT2JqZWN0LiBNYXkgYmUgbnVsbCBidXQgb25seSBmb3IgdGhlIE9iamVjdCBjbGFzcy4KLSAgICAgICAgICAgIGNvbnNpZGVyTmFtZShzdXBlck5hbWUpOwotCi0gICAgICAgICAgICAvLyBpbnRlcmZhY2VzIGlzIHRoZSBpbnRlcm5hbCBuYW1lcyBvZiB0aGUgY2xhc3MncyBpbnRlcmZhY2VzIChzZWUgZ2V0SW50ZXJuYWxOYW1lKS4KLSAgICAgICAgICAgIC8vIE1heSBiZSBudWxsLgotICAgICAgICAgICAgY29uc2lkZXJOYW1lcyhpbnRlcmZhY2VzKTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBBbm5vdGF0aW9uVmlzaXRvciB2aXNpdEFubm90YXRpb24oU3RyaW5nIGRlc2MsIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICAgICAgLy8gZGVzYyBpcyB0aGUgY2xhc3MgZGVzY3JpcHRvciBvZiB0aGUgYW5ub3RhdGlvbiBjbGFzcy4KLSAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTXlBbm5vdGF0aW9uVmlzaXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0QXR0cmlidXRlKEF0dHJpYnV0ZSBhdHRyKSB7Ci0gICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgIH0KLQotICAgICAgICAvLyBWaXNpdHMgdGhlIGVuZCBvZiBhIGNsYXNzCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEVuZCgpIHsKLSAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgY2xhc3MgTXlGaWVsZFZpc2l0b3IgZXh0ZW5kcyBGaWVsZFZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlGaWVsZFZpc2l0b3IoKSB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uKFN0cmluZyBkZXNjLCBib29sZWFuIHZpc2libGUpIHsKLSAgICAgICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSBjbGFzcyBkZXNjcmlwdG9yIG9mIHRoZSBhbm5vdGF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15QW5ub3RhdGlvblZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZShBdHRyaWJ1dGUgYXR0cikgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVmlzaXRzIHRoZSBlbmQgb2YgYSBjbGFzcwotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEVuZCgpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEZpZWxkVmlzaXRvciB2aXNpdEZpZWxkKGludCBhY2Nlc3MsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlLCBPYmplY3QgdmFsdWUpIHsKLSAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGZpZWxkJ3MgZGVzY3JpcHRvciAoc2VlIFR5cGUpLgotICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotCi0gICAgICAgICAgICAvLyBzaWduYXR1cmUgaXMgdGhlIGZpZWxkJ3Mgc2lnbmF0dXJlLiBNYXkgYmUgbnVsbCBpZiB0aGUgZmllbGQncyB0eXBlIGRvZXMgbm90IHVzZQotICAgICAgICAgICAgLy8gZ2VuZXJpYyB0eXBlcy4KLSAgICAgICAgICAgIGNvbnNpZGVyU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgTXlGaWVsZFZpc2l0b3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdElubmVyQ2xhc3MoU3RyaW5nIG5hbWUsIFN0cmluZyBvdXRlck5hbWUsIFN0cmluZyBpbm5lck5hbWUsIGludCBhY2Nlc3MpIHsKLSAgICAgICAgICAgIC8vIG5hbWUgaXMgdGhlIGludGVybmFsIG5hbWUgb2YgYW4gaW5uZXIgY2xhc3MgKHNlZSBnZXRJbnRlcm5hbE5hbWUpLgotICAgICAgICAgICAgLy8gTm90ZTogb3V0ZXJOYW1lL2lubmVyTmFtZSBzZWVtcyB0byBiZSBudWxsIHdoZW4gd2UncmUgcmVhZGluZyB0aGUKLSAgICAgICAgICAgIC8vIF9PcmlnaW5hbF9DbGFzc05hbWUgY2xhc3NlcyBnZW5lcmF0ZWQgYnkgbGF5b3V0bGliX2NyZWF0ZS4KLSAgICAgICAgICAgIGlmIChvdXRlck5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZShuYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgTWV0aG9kVmlzaXRvciB2aXNpdE1ldGhvZChpbnQgYWNjZXNzLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsCi0gICAgICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nW10gZXhjZXB0aW9ucykgewotICAgICAgICAgICAgLy8gZGVzYyBpcyB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRvciAoc2VlIFR5cGUpLgotICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgLy8gc2lnbmF0dXJlIGlzIHRoZSBtZXRob2QncyBzaWduYXR1cmUuIE1heSBiZSBudWxsIGlmIHRoZSBtZXRob2QgcGFyYW1ldGVycywgcmV0dXJuCi0gICAgICAgICAgICAvLyB0eXBlIGFuZCBleGNlcHRpb25zIGRvIG5vdCB1c2UgZ2VuZXJpYyB0eXBlcy4KLSAgICAgICAgICAgIGNvbnNpZGVyU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgTXlNZXRob2RWaXNpdG9yKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXRPdXRlckNsYXNzKFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjKSB7Ci0gICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXRTb3VyY2UoU3RyaW5nIHNvdXJjZSwgU3RyaW5nIGRlYnVnKSB7Ci0gICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgIH0KLQotCi0gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAvLyAtLS0gTWV0aG9kVmlzaXRvcgotICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICAgICBwcml2YXRlIGNsYXNzIE15TWV0aG9kVmlzaXRvciBleHRlbmRzIE1ldGhvZFZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlNZXRob2RWaXNpdG9yKCkgewotICAgICAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uRGVmYXVsdCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15QW5ub3RhdGlvblZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdENvZGUoKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBmaWVsZCBpbnN0cnVjdGlvbgotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEZpZWxkSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgICAgIC8vIG5hbWUgaXMgdGhlIGZpZWxkJ3MgbmFtZS4KLSAgICAgICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSBmaWVsZCdzIGRlc2NyaXB0b3IgKHNlZSBUeXBlKS4KLSAgICAgICAgICAgICAgICBjb25zaWRlckRlc2MoZGVzYyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRGcmFtZShpbnQgdHlwZSwgaW50IGxvY2FsLCBPYmplY3RbXSBsb2NhbDIsIGludCBzdGFjaywgT2JqZWN0W10gc3RhY2syKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0SWluY0luc24oaW50IHZhciwgaW50IGluY3JlbWVudCkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gYW4gSUlOQyBpbnN0cnVjdGlvbgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0SW5zbihpbnQgb3Bjb2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhIHplcm8gb3BlcmFuZCBpbnN0cnVjdGlvbgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0SW50SW5zbihpbnQgb3Bjb2RlLCBpbnQgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gYSBzaW5nbGUgaW50IG9wZXJhbmQgaW5zdHJ1Y3Rpb24KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEp1bXBJbnNuKGludCBvcGNvZGUsIExhYmVsIGxhYmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhIGp1bXAgaW5zdHJ1Y3Rpb24KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdExhYmVsKExhYmVsIGxhYmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhIGxhYmVsIHRhcmdldAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpbnN0cnVjdGlvbiB0byBsb2FkIGEgY29uc3RhbnQgZnJvbSB0aGUgc3RhY2sKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRMZGNJbnNuKE9iamVjdCBjc3QpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3N0IGluc3RhbmNlb2YgVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjb25zaWRlclR5cGUoKFR5cGUpIGNzdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TGluZU51bWJlcihpbnQgbGluZSwgTGFiZWwgc3RhcnQpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRMb2NhbFZhcmlhYmxlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgTGFiZWwgc3RhcnQsIExhYmVsIGVuZCwgaW50IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgLy8gZGVzYyBpcyB0aGUgdHlwZSBkZXNjcmlwdG9yIG9mIHRoaXMgbG9jYWwgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgICAgIC8vIHNpZ25hdHVyZSBpcyB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhpcyBsb2NhbCB2YXJpYWJsZS4gTWF5IGJlIG51bGwgaWYgdGhlIGxvY2FsCi0gICAgICAgICAgICAgICAgLy8gdmFyaWFibGUgdHlwZSBkb2VzIG5vdCB1c2UgZ2VuZXJpYyB0eXBlcy4KLSAgICAgICAgICAgICAgICBjb25zaWRlclNpZ25hdHVyZShzaWduYXR1cmUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TG9va3VwU3dpdGNoSW5zbihMYWJlbCBkZmx0LCBpbnRbXSBrZXlzLCBMYWJlbFtdIGxhYmVscykgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gYSBsb29rdXAgc3dpdGNoIGluc3RydWN0aW9uCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRNYXhzKGludCBtYXhTdGFjaywgaW50IG1heExvY2FscykgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaW5zdHJ1Y3Rpb24gdGhhdCBpbnZva2VzIGEgbWV0aG9kCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotCi0gICAgICAgICAgICAgICAgLy8gb3duZXIgaXMgdGhlIGludGVybmFsIG5hbWUgb2YgdGhlIG1ldGhvZCdzIG93bmVyIGNsYXNzCi0gICAgICAgICAgICAgICAgaWYgKCFjb25zaWRlckRlc2Mob3duZXIpICYmIG93bmVyLmluZGV4T2YoJy8nKSAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUob3duZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSBtZXRob2QncyBkZXNjcmlwdG9yIChzZWUgVHlwZSkuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpbnN0cnVjdGlvbiBtdWx0aWFuZXdhcnJheSwgd2hhdGV2ZXIgdGhhdCBpcwotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE11bHRpQU5ld0FycmF5SW5zbihTdHJpbmcgZGVzYywgaW50IGRpbXMpIHsKLQotICAgICAgICAgICAgICAgIC8vIGRlc2MgYW4gYXJyYXkgdHlwZSBkZXNjcmlwdG9yLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRQYXJhbWV0ZXJBbm5vdGF0aW9uKGludCBwYXJhbWV0ZXIsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgICAgICAgICBib29sZWFuIHZpc2libGUpIHsKLSAgICAgICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSBjbGFzcyBkZXNjcmlwdG9yIG9mIHRoZSBhbm5vdGF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15QW5ub3RhdGlvblZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFRhYmxlU3dpdGNoSW5zbihpbnQgbWluLCBpbnQgbWF4LCBMYWJlbCBkZmx0LCBMYWJlbFtdIGxhYmVscykgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gdGFibGUgc3dpdGNoIGluc3RydWN0aW9uCi0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFRyeUNhdGNoQmxvY2soTGFiZWwgc3RhcnQsIExhYmVsIGVuZCwgTGFiZWwgaGFuZGxlciwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgICAgICAgICAvLyB0eXBlIGlzIHRoZSBpbnRlcm5hbCBuYW1lIG9mIHRoZSB0eXBlIG9mIGV4Y2VwdGlvbnMgaGFuZGxlZCBieSB0aGUgaGFuZGxlciwKLSAgICAgICAgICAgICAgICAvLyBvciBudWxsIHRvIGNhdGNoIGFueSBleGNlcHRpb25zIChmb3IgImZpbmFsbHkiIGJsb2NrcykuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJOYW1lKHR5cGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0eXBlIGluc3RydWN0aW9uCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0VHlwZUluc24oaW50IG9wY29kZSwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgICAgICAgICAvLyB0eXBlIGlzIHRoZSBvcGVyYW5kIG9mIHRoZSBpbnN0cnVjdGlvbiB0byBiZSB2aXNpdGVkLiBUaGlzIG9wZXJhbmQgbXVzdCBiZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBpbnRlcm5hbCBuYW1lIG9mIGFuIG9iamVjdCBvciBhcnJheSBjbGFzcy4KLSAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUodHlwZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRWYXJJbnNuKGludCBvcGNvZGUsIGludCB2YXIpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzIC0tIGxvY2FsIHZhcmlhYmxlIGluc3RydWN0aW9uCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGNsYXNzIE15U2lnbmF0dXJlVmlzaXRvciBleHRlbmRzIFNpZ25hdHVyZVZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlTaWduYXR1cmVWaXNpdG9yKCkgewotICAgICAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gLS0tIFNpZ25hdHVyZVZpc2l0b3IKLSAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICBwcml2YXRlIFN0cmluZyBtQ3VycmVudFNpZ25hdHVyZUNsYXNzID0gbnVsbDsKLQotICAgICAgICAgICAgLy8gU3RhcnRzIHRoZSB2aXNpdCBvZiBhIHNpZ25hdHVyZSBjb3JyZXNwb25kaW5nIHRvIGEgY2xhc3Mgb3IgaW50ZXJmYWNlIHR5cGUKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRDbGFzc1R5cGUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgICAgICAgICBtQ3VycmVudFNpZ25hdHVyZUNsYXNzID0gbmFtZTsKLSAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUobmFtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFZpc2l0cyBhbiBpbm5lciBjbGFzcwotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdElubmVyQ2xhc3NUeXBlKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50U2lnbmF0dXJlQ2xhc3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNpZ25hdHVyZUNsYXNzICs9ICIkIiArIG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZShtQ3VycmVudFNpZ25hdHVyZUNsYXNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFNpZ25hdHVyZVZpc2l0b3IgdmlzaXRBcnJheVR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEJhc2VUeXBlKGNoYXIgZGVzY3JpcHRvcikgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gYSBwcmltaXRpdmUgdHlwZSwgaWdub3JlZAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0Q2xhc3NCb3VuZCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0RXhjZXB0aW9uVHlwZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0Rm9ybWFsVHlwZVBhcmFtZXRlcihTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdEludGVyZmFjZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0SW50ZXJmYWNlQm91bmQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFBhcmFtZXRlclR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFJldHVyblR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFN1cGVyY2xhc3MoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFR5cGVBcmd1bWVudChjaGFyIHdpbGRjYXJkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVWYXJpYWJsZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVBcmd1bWVudCgpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAvLyAtLS0gQW5ub3RhdGlvblZpc2l0b3IKLSAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBNeUFubm90YXRpb25WaXNpdG9yIGV4dGVuZHMgQW5ub3RhdGlvblZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlBbm5vdGF0aW9uVmlzaXRvcigpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBWaXNpdHMgYSBwcmltaXRpdmUgdmFsdWUgb2YgYW4gYW5ub3RhdGlvbgotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgdGhlIGFjdHVhbCB2YWx1ZSwgd2hvc2UgdHlwZSBtdXN0IGJlIEJ5dGUsIEJvb2xlYW4sIENoYXJhY3RlciwgU2hvcnQsCi0gICAgICAgICAgICAgICAgLy8gSW50ZWdlciwgTG9uZywgRmxvYXQsIERvdWJsZSwgU3RyaW5nIG9yIFR5cGUKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyVHlwZSgoVHlwZSkgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIG5lc3RlZCBhbm5vdGF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15QW5ub3RhdGlvblZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBcnJheShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXlBbm5vdGF0aW9uVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RW51bShTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsIFN0cmluZyB2YWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIGVudW1lcmF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvSUNyZWF0ZUluZm8uamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvSUNyZWF0ZUluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4NzgxNC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0lDcmVhdGVJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi0vKioKLSAqIEludGVyZmFjZSBkZXNjcmliaW5nIHRoZSB3b3JrIHRvIGJlIGRvbmUgYnkge0BsaW5rIEFzbUdlbmVyYXRvcn0uCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUNyZWF0ZUluZm8gewotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBjbGFzcyBmcm9tIGxheW91dGxpYl9jcmVhdGUgdG8gaW5qZWN0IGluIGxheW91dGxpYi4KLSAgICAgKiBUaGUgbGlzdCBjYW4gYmUgZW1wdHkgYnV0IG11c3Qgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IENsYXNzPD8+W10gZ2V0SW5qZWN0ZWRDbGFzc2VzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gcmV3cml0ZSBhcyBkZWxlZ2F0ZXMuCi0gICAgICogVGhlIGxpc3QgY2FuIGJlIGVtcHR5IGJ1dCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmdbXSBnZXREZWxlZ2F0ZU1ldGhvZHMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY2xhc3NlcyBvbiB3aGljaCB0byBkZWxlZ2F0ZSBhbGwgbmF0aXZlIG1ldGhvZHMuCi0gICAgICogVGhlIGxpc3QgY2FuIGJlIGVtcHR5IGJ1dCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmdbXSBnZXREZWxlZ2F0ZUNsYXNzTmF0aXZlcygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBUaGUgbGlzdCBvZiBtZXRob2RzIHRvIHN0dWIgb3V0LiBFYWNoIGVudHJ5IG11c3QgYmUgaW4gdGhlIGZvcm0KLSAgICAgKiAicGFja2FnZS5wYWNrYWdlLk91dGVyQ2xhc3MkSW5uZXJDbGFzcyNNZXRob2ROYW1lIi4KLSAgICAgKiBUaGUgbGlzdCBjYW4gYmUgZW1wdHkgYnV0IG11c3Qgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFN0cmluZ1tdIGdldE92ZXJyaWRkZW5NZXRob2RzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNsYXNzZXMgdG8gcmVuYW1lLCBtdXN0IGJlIGFuIGV2ZW4gbGlzdDogdGhlIGJpbmFyeSBGUUNOCi0gICAgICogb2YgY2xhc3MgdG8gcmVwbGFjZSBmb2xsb3dlZCBieSB0aGUgbmV3IEZRQ04uCi0gICAgICogVGhlIGxpc3QgY2FuIGJlIGVtcHR5IGJ1dCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmdbXSBnZXRSZW5hbWVkQ2xhc3NlcygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBjbGFzc2VzIGZvciB3aGljaCB0aGUgbWV0aG9kcyByZXR1cm5pbmcgdGhlbSBzaG91bGQgYmUgZGVsZXRlZC4KLSAgICAgKiBUaGUgYXJyYXkgY29udGFpbnMgYSBsaXN0IG9mIG51bGwgdGVybWluYXRlZCBzZWN0aW9uIHN0YXJ0aW5nIHdpdGggdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0gICAgICogdG8gcmVuYW1lIGluIHdoaWNoIHRoZSBtZXRob2RzIGFyZSBkZWxldGVkLCBmb2xsb3dlZCBieSBhIGxpc3Qgb2YgcmV0dXJuIHR5cGVzIGlkZW50aWZ5aW5nCi0gICAgICogdGhlIG1ldGhvZHMgdG8gZGVsZXRlLgotICAgICAqIFRoZSBsaXN0IGNhbiBiZSBlbXB0eSBidXQgbXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nW10gZ2V0RGVsZXRlUmV0dXJucygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBjbGFzc2VzIHRvIHJlZmFjdG9yLCBtdXN0IGJlIGFuIGV2ZW4gbGlzdDogdGhlCi0gICAgICogYmluYXJ5IEZRQ04gb2YgY2xhc3MgdG8gcmVwbGFjZSBmb2xsb3dlZCBieSB0aGUgbmV3IEZRQ04uIEFsbCByZWZlcmVuY2VzCi0gICAgICogdG8gdGhlIG9sZCBjbGFzcyBzaG91bGQgYmUgdXBkYXRlZCB0byB0aGUgbmV3IGNsYXNzLgotICAgICAqIFRoZSBsaXN0IGNhbiBiZSBlbXB0eSBidXQgbXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nW10gZ2V0SmF2YVBrZ0NsYXNzZXMoKTsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTG9nLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0xvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2JhNTkxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotcHVibGljIGNsYXNzIExvZyB7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbVZlcmJvc2UgPSBmYWxzZTsKLQotICAgIHB1YmxpYyB2b2lkIHNldFZlcmJvc2UoYm9vbGVhbiB2ZXJib3NlKSB7Ci0gICAgICAgIG1WZXJib3NlID0gdmVyYm9zZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkZWJ1ZyhTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJncykgewotICAgICAgICBpZiAobVZlcmJvc2UpIHsKLSAgICAgICAgICAgIGluZm8oZm9ybWF0LCBhcmdzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBTaW1pbGFyIHRvIGRlYnVnKCkgYnV0IGRvZXNuJ3QgZG8gYSBcbiBhdXRvbWF0aWNhbGx5LiAqLwotICAgIHB1YmxpYyB2b2lkIGRlYnVnTm9sbihTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJncykgewotICAgICAgICBpZiAobVZlcmJvc2UpIHsKLSAgICAgICAgICAgIFN0cmluZyBzID0gU3RyaW5nLmZvcm1hdChmb3JtYXQsIGFyZ3MpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluZm8oU3RyaW5nIGZvcm1hdCwgT2JqZWN0Li4uIGFyZ3MpIHsKLSAgICAgICAgU3RyaW5nIHMgPSBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIG91dFByaW50bG4ocyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZXJyb3IoU3RyaW5nIGZvcm1hdCwgT2JqZWN0Li4uIGFyZ3MpIHsKLSAgICAgICAgU3RyaW5nIHMgPSBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIGVyclByaW50bG4ocyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZXhjZXB0aW9uKFRocm93YWJsZSB0LCBTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJncykgewotICAgICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLSAgICAgICAgdC5wcmludFN0YWNrVHJhY2UocHcpOwotICAgICAgICBwdy5mbHVzaCgpOwotICAgICAgICBlcnJvcihmb3JtYXQgKyAiXG4iICsgc3cudG9TdHJpbmcoKSwgYXJncyk7Ci0gICAgfQotCi0gICAgLyoqIGZvciB1bml0IHRlc3RpbmcgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBlcnJQcmludGxuKFN0cmluZyBtc2cpIHsKLSAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKG1zZyk7Ci0gICAgfQotCi0gICAgLyoqIGZvciB1bml0IHRlc3RpbmcgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBvdXRQcmludGxuKFN0cmluZyBtc2cpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1zZyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0xvZ0Fib3J0RXhjZXB0aW9uLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0xvZ0Fib3J0RXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNGI0YTcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Mb2dBYm9ydEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotcHVibGljIGNsYXNzIExvZ0Fib3J0RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLQotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Gb3JtYXQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBPYmplY3RbXSBtQXJnczsKLQotICAgIHB1YmxpYyBMb2dBYm9ydEV4Y2VwdGlvbihTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJncykgewotICAgICAgICBtRm9ybWF0ID0gZm9ybWF0OwotICAgICAgICBtQXJncyA9IGFyZ3M7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGVycm9yKExvZyBsb2cpIHsKLSAgICAgICAgbG9nLmVycm9yKG1Gb3JtYXQsIG1BcmdzKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL01haW4uamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWFpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTUwMWQyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWFpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi0KLS8qKgotICogRW50cnkgcG9pbnQgZm9yIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wuCi0gKiA8cC8+Ci0gKiBUaGUgdG9vbCBkb2VzIG5vdCBjdXJyZW50bHkgcmVseSBvbiBhbnkgZXh0ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlLgotICogSW5zdGVhZCB0aGUgY29uZmlndXJhdGlvbiBpcyBtb3N0bHkgZG9uZSB2aWEgdGhlIHtAbGluayBDcmVhdGVJbmZvfSBjbGFzcy4KLSAqIDxwLz4KLSAqIEZvciBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSB0b29sIGFuZCBpdHMgaW1wbGVtZW50YXRpb24sIHBsZWFzZSByZWZlciB0bwotICogdGhlICJSRUFETUUudHh0IiBmaWxlIGF0IHRoZSByb290IG9mIHRoaXMgcHJvamVjdC4KLSAqIDxwLz4KLSAqIEZvciBhIHF1aWNrIHRlc3QsIGludm9rZSB0aGlzIGFzIGZvbGxvd3M6Ci0gKiA8cHJlPgotICogJCBtYWtlIGxheW91dGxpYgotICogPC9wcmU+Ci0gKiB3aGljaCBkb2VzOgotICogPHByZT4KLSAqICQgbWFrZSBsYXlvdXRsaWJfY3JlYXRlICZsdDtidW5jaCBvZiBmcmFtZXdvcmsgamFycyZndDsKLSAqICQgamF2YSAtamFyIG91dC9ob3N0L2xpbnV4LXg4Ni9mcmFtZXdvcmsvbGF5b3V0bGliX2NyZWF0ZS5qYXIgXAotICogICAgICAgIG91dC9ob3N0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvdGVtcF9sYXlvdXRsaWJfaW50ZXJtZWRpYXRlcy9qYXZhbGliLmphciBcCi0gKiAgICAgICAgb3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2NvcmVfaW50ZXJtZWRpYXRlcy9jbGFzc2VzLmphciBcCi0gKiAgICAgICAgb3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2ZyYW1ld29ya19pbnRlcm1lZGlhdGVzL2NsYXNzZXMuamFyCi0gKiA8L3ByZT4KLSAqLwotcHVibGljIGNsYXNzIE1haW4gewotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBPcHRpb25zIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gZ2VuZXJhdGVQdWJsaWNBY2Nlc3MgPSB0cnVlOwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBsaXN0QWxsRGVwcyA9IGZhbHNlOwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBsaXN0T25seU1pc3NpbmdEZXBzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBPcHRpb25zIHNPcHRpb25zID0gbmV3IE9wdGlvbnMoKTsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQotICAgICAgICBMb2cgbG9nID0gbmV3IExvZygpOwotCi0gICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IG9zSmFyUGF0aCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgICAgICBTdHJpbmdbXSBvc0Rlc3RKYXIgPSB7IG51bGwgfTsKLQotICAgICAgICBpZiAoIXByb2Nlc3NBcmdzKGxvZywgYXJncywgb3NKYXJQYXRoLCBvc0Rlc3RKYXIpKSB7Ci0gICAgICAgICAgICBsb2cuZXJyb3IoIlVzYWdlOiBsYXlvdXRsaWJfY3JlYXRlIFstdl0gWy1wXSBvdXRwdXQuamFyIGlucHV0LmphciAuLi4iKTsKLSAgICAgICAgICAgIGxvZy5lcnJvcigiVXNhZ2U6IGxheW91dGxpYl9jcmVhdGUgWy12XSBbLS1saXN0LWRlcHN8LS1taXNzaW5nLWRlcHNdIGlucHV0LmphciAuLi4iKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNPcHRpb25zLmxpc3RBbGxEZXBzIHx8IHNPcHRpb25zLmxpc3RPbmx5TWlzc2luZ0RlcHMpIHsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KGxpc3REZXBzKG9zSmFyUGF0aCwgbG9nKSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KGNyZWF0ZUxheW91dExpYihvc0Rlc3RKYXJbMF0sIG9zSmFyUGF0aCwgbG9nKSk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGludCBjcmVhdGVMYXlvdXRMaWIoU3RyaW5nIG9zRGVzdEphciwgQXJyYXlMaXN0PFN0cmluZz4gb3NKYXJQYXRoLCBMb2cgbG9nKSB7Ci0gICAgICAgIGxvZy5pbmZvKCJPdXRwdXQ6ICUxJHMiLCBvc0Rlc3RKYXIpOwotICAgICAgICBmb3IgKFN0cmluZyBwYXRoIDogb3NKYXJQYXRoKSB7Ci0gICAgICAgICAgICBsb2cuaW5mbygiSW5wdXQgOiAgICAgICUxJHMiLCBwYXRoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBDcmVhdGVJbmZvIGluZm8gPSBuZXcgQ3JlYXRlSW5mbygpOwotICAgICAgICAgICAgU2V0PFN0cmluZz4gZXhjbHVkZUNsYXNzZXMgPSBnZXRFeGNsdWRlZENsYXNzZXMoaW5mbyk7Ci0gICAgICAgICAgICBBc21HZW5lcmF0b3IgYWdlbiA9IG5ldyBBc21HZW5lcmF0b3IobG9nLCBvc0Rlc3RKYXIsIGluZm8pOwotCi0gICAgICAgICAgICBBc21BbmFseXplciBhYSA9IG5ldyBBc21BbmFseXplcihsb2csIG9zSmFyUGF0aCwgYWdlbiwKLSAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlcml2ZWQgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQudmlldy5WaWV3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLmFwcC5GcmFnbWVudCIKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgY2xhc3NlcwotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuKiIsIC8vIGZvciBhbmRyb2lkLlIKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnV0aWwuKiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC4qIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnZpZXcuKiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC53aWRnZXQuKiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0LioiLAotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQudGV4dC4qKiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy4qIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLioiLAotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuY29udGVudC4qIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLmNvbnRlbnQucmVzLioiLAotICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5hcGFjaGUuaGFybW9ueS54bWwuKiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuaW50ZXJuYWwuUioqIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnBpbS4qIiwgLy8gZm9yIGRhdGVwaWNrZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLm9zLioiLCAgLy8gZm9yIGFuZHJvaWQub3MuSGFuZGxlcgotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyIiwgLy8gZm9yIERpZ2l0YWwgY2xvY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5pMThuLnBob25lbnVtYmVycy4qIiwgIC8vIGZvciBUZXh0VmlldyB3aXRoIGF1dG9saW5rIGF0dHJpYnV0ZQotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBleGNsdWRlQ2xhc3Nlcyk7Ci0gICAgICAgICAgICBhYS5hbmFseXplKCk7Ci0gICAgICAgICAgICBhZ2VuLmdlbmVyYXRlKCk7Ci0KLSAgICAgICAgICAgIC8vIFRocm93IGFuIGVycm9yIGlmIGFueSBjbGFzcyBmYWlsZWQgdG8gZ2V0IHJlbmFtZWQgYnkgdGhlIGdlbmVyYXRvcgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIElNUE9SVEFOVDogaWYgeW91J3JlIGJ1aWxkaW5nIHRoZSBwbGF0Zm9ybSBhbmQgeW91IGdldCB0aGlzIGVycm9yIG1lc3NhZ2UsCi0gICAgICAgICAgICAvLyBpdCBtZWFucyB0aGUgcmVuYW1lQ2xhc3Nlc1tdIGFycmF5IGluIEFzbUdlbmVyYXRvciBuZWVkcyB0byBiZSB1cGRhdGVkOiBzb21lCi0gICAgICAgICAgICAvLyBjbGFzcyBzaG91bGQgaGF2ZSBiZWVuIHJlbmFtZWQgYnV0IGl0IHdhcyBub3QgZm91bmQgaW4gdGhlIGlucHV0IEpBUiBmaWxlcy4KLSAgICAgICAgICAgIFNldDxTdHJpbmc+IG5vdFJlbmFtZWQgPSBhZ2VuLmdldENsYXNzZXNOb3RSZW5hbWVkKCk7Ci0gICAgICAgICAgICBpZiAobm90UmVuYW1lZC5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gKDgwLWNvbHVtbiBndWlkZSBiZWxvdyBmb3IgZXJyb3IgZm9ybWF0dGluZykKLSAgICAgICAgICAgICAgICAvLyAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQotICAgICAgICAgICAgICAgIGxvZy5lcnJvcigKLSAgICAgICAgICAgICAgICAgICJFUlJPUiB3aGVuIHJ1bm5pbmcgbGF5b3V0bGliX2NyZWF0ZTogdGhlIGZvbGxvd2luZyBjbGFzc2VzIGFyZSByZWZlcmVuY2VkXG4iICsKLSAgICAgICAgICAgICAgICAgICJieSB0b29scy9sYXlvdXRsaWIvY3JlYXRlIGJ1dCB3ZXJlIG5vdCBhY3R1YWxseSBmb3VuZCBpbiB0aGUgaW5wdXQgSkFSIGZpbGVzLlxuIiArCi0gICAgICAgICAgICAgICAgICAiVGhpcyBtYXkgYmUgZHVlIHRvIHNvbWUgcGxhdGZvcm0gY2xhc3NlcyBoYXZpbmcgYmVlbiByZW5hbWVkLiIpOwotICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIGZxY24gOiBub3RSZW5hbWVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiLSBDbGFzcyBub3QgZm91bmQ6ICVzIiwgZnFjbi5yZXBsYWNlKCcvJywgJy4nKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIHBhdGggOiBvc0phclBhdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIi0gSW5wdXQgSkFSIDogJTEkcyIsIHBhdGgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZy5leGNlcHRpb24oZSwgIkZhaWxlZCB0byBsb2FkIGphciIpOwotICAgICAgICB9IGNhdGNoIChMb2dBYm9ydEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBlLmVycm9yKGxvZyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTZXQ8U3RyaW5nPiBnZXRFeGNsdWRlZENsYXNzZXMoQ3JlYXRlSW5mbyBpbmZvKSB7Ci0gICAgICAgIFN0cmluZ1tdIHJlZmFjdG9yZWRDbGFzc2VzID0gaW5mby5nZXRKYXZhUGtnQ2xhc3NlcygpOwotICAgICAgICBTZXQ8U3RyaW5nPiBleGNsdWRlZENsYXNzZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KHJlZmFjdG9yZWRDbGFzc2VzLmxlbmd0aCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVmYWN0b3JlZENsYXNzZXMubGVuZ3RoOyBpKz0yKSB7Ci0gICAgICAgICAgICBleGNsdWRlZENsYXNzZXMuYWRkKHJlZmFjdG9yZWRDbGFzc2VzW2ldKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZXhjbHVkZWRDbGFzc2VzOwotCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGxpc3REZXBzKEFycmF5TGlzdDxTdHJpbmc+IG9zSmFyUGF0aCwgTG9nIGxvZykgewotICAgICAgICBEZXBlbmRlbmN5RmluZGVyIGRmID0gbmV3IERlcGVuZGVuY3lGaW5kZXIobG9nKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExpc3Q8TWFwPFN0cmluZywgU2V0PFN0cmluZz4+PiByZXN1bHQgPSBkZi5maW5kRGVwcyhvc0phclBhdGgpOwotICAgICAgICAgICAgaWYgKHNPcHRpb25zLmxpc3RBbGxEZXBzKSB7Ci0gICAgICAgICAgICAgICAgZGYucHJpbnRBbGxEZXBzKHJlc3VsdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNPcHRpb25zLmxpc3RPbmx5TWlzc2luZ0RlcHMpIHsKLSAgICAgICAgICAgICAgICBkZi5wcmludE1pc3NpbmdEZXBzKHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZy5leGNlcHRpb24oZSwgIkZhaWxlZCB0byBsb2FkIGphciIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIGFyZ3Mgd2hlcmUgcHJvcGVybHkgcGFyc2VkLgotICAgICAqIFJldHVybnMgZmFsc2UgaWYgcHJvZ3JhbSBzaG91bGQgZXhpdCB3aXRoIGNvbW1hbmQtbGluZSB1c2FnZS4KLSAgICAgKiA8cC8+Ci0gICAgICogTm90ZTogdGhlIFN0cmluZ1swXSBpcyBhbiBvdXRwdXQgcGFyYW1ldGVyIHdyYXBwZWQgaW4gYW4gYXJyYXksIHNpbmNlIHRoZXJlIGlzIG5vCi0gICAgICogIm91dCIgcGFyYW1ldGVyIHN1cHBvcnQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwcm9jZXNzQXJncyhMb2cgbG9nLCBTdHJpbmdbXSBhcmdzLAotICAgICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gb3NKYXJQYXRoLCBTdHJpbmdbXSBvc0Rlc3RKYXIpIHsKLSAgICAgICAgYm9vbGVhbiBuZWVkc19kZXN0ID0gdHJ1ZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcyA9IGFyZ3NbaV07Ci0gICAgICAgICAgICBpZiAocy5lcXVhbHMoIi12IikpIHsKLSAgICAgICAgICAgICAgICBsb2cuc2V0VmVyYm9zZSh0cnVlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocy5lcXVhbHMoIi1wIikpIHsKLSAgICAgICAgICAgICAgICBzT3B0aW9ucy5nZW5lcmF0ZVB1YmxpY0FjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzLmVxdWFscygiLS1saXN0LWRlcHMiKSkgewotICAgICAgICAgICAgICAgIHNPcHRpb25zLmxpc3RBbGxEZXBzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBuZWVkc19kZXN0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHMuZXF1YWxzKCItLW1pc3NpbmctZGVwcyIpKSB7Ci0gICAgICAgICAgICAgICAgc09wdGlvbnMubGlzdE9ubHlNaXNzaW5nRGVwcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbmVlZHNfZGVzdCA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIGlmICghcy5zdGFydHNXaXRoKCItIikpIHsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNfZGVzdCAmJiBvc0Rlc3RKYXJbMF0gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBvc0Rlc3RKYXJbMF0gPSBzOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9zSmFyUGF0aC5hZGQocyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIlVua25vdyBhcmd1bWVudDogJXMiLCBzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob3NKYXJQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbG9nLmVycm9yKCJNaXNzaW5nIHBhcmFtZXRlcjogcGF0aCB0byBpbnB1dCBqYXIiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobmVlZHNfZGVzdCAmJiBvc0Rlc3RKYXJbMF0gPT0gbnVsbCkgewotICAgICAgICAgICAgbG9nLmVycm9yKCJNaXNzaW5nIHBhcmFtZXRlcjogcGF0aCB0byBvdXRwdXQgamFyIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBzT3B0aW9ucy5nZW5lcmF0ZVB1YmxpY0FjY2VzcyA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWV0aG9kQWRhcHRlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9NZXRob2RBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMWU0Y2YuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9NZXRob2RBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi0KLS8qKgotICogQW4gYWRhcHRlciB0byBtYWtlIGl0IGVhc2llciB0byB1c2Uge0BsaW5rIE1ldGhvZExpc3RlbmVyfS4KLSAqIDxwLz4KLSAqIFRoZSBhZGFwdGVyIGNhbGxzIHRoZSB2b2lkIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gbGlzdGVuZXIKLSAqIGZvciBhbGwgdHlwZXMgKEksIEwsIEYsIEQgYW5kIEEpLCByZXR1cm5pbmcgMCBvciBudWxsIGFzIGFwcHJvcHJpYXRlLgotICovCi1wdWJsaWMgY2xhc3MgTWV0aG9kQWRhcHRlciBpbXBsZW1lbnRzIE1ldGhvZExpc3RlbmVyIHsKLSAgICAvKioKLSAgICAgKiBBIHN0dWIgbWV0aG9kIGlzIGJlaW5nIGludm9rZWQuCi0gICAgICogPHAvPgotICAgICAqIEtub3duIGxpbWl0YXRpb246IGNhbGxlciBhcmd1bWVudHMgYXJlIG5vdCBhdmFpbGFibGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2lnbmF0dXJlIFRoZSBzaWduYXR1cmUgb2YgdGhlIG1ldGhvZCBiZWluZyBpbnZva2VkLCBjb21wb3NlZCBvZiB0aGUKLSAgICAgKiAgICAgICAgICAgICAgICAgIGJpbmFyeSBjbGFzcyBuYW1lIGZvbGxvd2VkIGJ5IHRoZSBtZXRob2QgZGVzY3JpcHRvciAoYWthIGFyZ3VtZW50Ci0gICAgICogICAgICAgICAgICAgICAgICB0eXBlcykuIEV4YW1wbGU6ICJjb20vZm9vL015Q2xhc3MvSW5uZXJDbGFzcy9wcmludEludChJKVYiLgotICAgICAqIEBwYXJhbSBpc05hdGl2ZSBUcnVlIGlmIHRoZSBtZXRob2Qgd2FzIGEgbmF0aXZlIG1ldGhvZC4KLSAgICAgKiBAcGFyYW0gY2FsbGVyIFRoZSBjYWxsaW5nIG9iamVjdC4gTnVsbCBmb3Igc3RhdGljIG1ldGhvZHMsICJ0aGlzIiBmb3IgaW5zdGFuY2UgbWV0aG9kcy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkludm9rZVYoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcikgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNhbWUgYXMge0BsaW5rICNvbkludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpfSBidXQgcmV0dXJucyBhbiBpbnRlZ2VyIG9yIHNpbWlsYXIuCi0gICAgICogQHNlZSAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqIEByZXR1cm4gYW4gaW50ZWdlciwgb3IgYSBib29sZWFuLCBvciBhIHNob3J0IG9yIGEgYnl0ZS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IG9uSW52b2tlSShTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKSB7Ci0gICAgICAgIG9uSW52b2tlVihzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYSBsb25nLgotICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKLSAgICAgKiBAcmV0dXJuIGEgbG9uZy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBvbkludm9rZUwoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcikgewotICAgICAgICBvbkludm9rZVYoc2lnbmF0dXJlLCBpc05hdGl2ZSwgY2FsbGVyKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2FtZSBhcyB7QGxpbmsgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCl9IGJ1dCByZXR1cm5zIGEgZmxvYXQuCi0gICAgICogQHNlZSAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqIEByZXR1cm4gYSBmbG9hdC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgb25JbnZva2VGKFN0cmluZyBzaWduYXR1cmUsIGJvb2xlYW4gaXNOYXRpdmUsIE9iamVjdCBjYWxsZXIpIHsKLSAgICAgICAgb25JbnZva2VWKHNpZ25hdHVyZSwgaXNOYXRpdmUsIGNhbGxlcik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNhbWUgYXMge0BsaW5rICNvbkludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpfSBidXQgcmV0dXJucyBhIGRvdWJsZS4KLSAgICAgKiBAc2VlICNvbkludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpCi0gICAgICogQHJldHVybiBhIGRvdWJsZS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZG91YmxlIG9uSW52b2tlRChTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKSB7Ci0gICAgICAgIG9uSW52b2tlVihzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYW4gb2JqZWN0LgotICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKLSAgICAgKiBAcmV0dXJuIGFuIG9iamVjdC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IG9uSW52b2tlQShTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKSB7Ci0gICAgICAgIG9uSW52b2tlVihzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWV0aG9kTGlzdGVuZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWV0aG9kTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZjMmIyNC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL01ldGhvZExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi0KLS8qKgotICogSW50ZXJmYWNlIHRvIGFsbG93IGEgbWV0aG9kIGludm9jYXRpb24gdG8gYmUgbGlzdGVuZWQgdXBvbi4KLSAqIDxwLz4KLSAqIFRoaXMgaXMgdXNlZCBieSB7QGxpbmsgT3ZlcnJpZGVNZXRob2R9IHRvIHJlZ2lzdGVyIGEgbGlzdGVuZXIgZm9yIG1ldGhvZHMgdGhhdAotICogaGF2ZSBiZWVuIHN0dWJiZWQgYnkgdGhlIHtAbGluayBBc21HZW5lcmF0b3J9LiBBdCBydW50aW1lIHRoZSBzdHViIHdpbGwgY2FsbCBlaXRoZXIgYQotICogZGVmYXVsdCBnbG9iYWwgbGlzdGVuZXIgb3IgYSBzcGVjaWZpYyBsaXN0ZW5lciBiYXNlZCBvbiB0aGUgbWV0aG9kIHNpZ25hdHVyZS4KLSAqLwotcHVibGljIGludGVyZmFjZSBNZXRob2RMaXN0ZW5lciB7Ci0gICAgLyoqCi0gICAgICogQSBzdHViIG1ldGhvZCBpcyBiZWluZyBpbnZva2VkLgotICAgICAqIDxwLz4KLSAgICAgKiBLbm93biBsaW1pdGF0aW9uOiBjYWxsZXIgYXJndW1lbnRzIGFyZSBub3QgYXZhaWxhYmxlLgotICAgICAqICAKLSAgICAgKiBAcGFyYW0gc2lnbmF0dXJlIFRoZSBzaWduYXR1cmUgb2YgdGhlIG1ldGhvZCBiZWluZyBpbnZva2VkLCBjb21wb3NlZCBvZiB0aGUKLSAgICAgKiAgICAgICAgICAgICAgICAgIGJpbmFyeSBjbGFzcyBuYW1lIGZvbGxvd2VkIGJ5IHRoZSBtZXRob2QgZGVzY3JpcHRvciAoYWthIGFyZ3VtZW50Ci0gICAgICogICAgICAgICAgICAgICAgICB0eXBlcykuIEV4YW1wbGU6ICJjb20vZm9vL015Q2xhc3MvSW5uZXJDbGFzcy9wcmludEludChJKVYiLgotICAgICAqIEBwYXJhbSBpc05hdGl2ZSBUcnVlIGlmIHRoZSBtZXRob2Qgd2FzIGEgbmF0aXZlIG1ldGhvZC4KLSAgICAgKiBAcGFyYW0gY2FsbGVyIFRoZSBjYWxsaW5nIG9iamVjdC4gTnVsbCBmb3Igc3RhdGljIG1ldGhvZHMsICJ0aGlzIiBmb3IgaW5zdGFuY2UgbWV0aG9kcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbkludm9rZVYoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYW4gaW50ZWdlciBvciBzaW1pbGFyLgotICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKLSAgICAgKiBAcmV0dXJuIGFuIGludGVnZXIsIG9yIGEgYm9vbGVhbiwgb3IgYSBzaG9ydCBvciBhIGJ5dGUuCi0gICAgICovCi0gICAgcHVibGljIGludCBvbkludm9rZUkoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYSBsb25nLgotICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKLSAgICAgKiBAcmV0dXJuIGEgbG9uZy4KLSAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBvbkludm9rZUwoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYSBmbG9hdC4KLSAgICAgKiBAc2VlICNvbkludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpCi0gICAgICogQHJldHVybiBhIGZsb2F0LgotICAgICAqLwotICAgIHB1YmxpYyBmbG9hdCBvbkludm9rZUYoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYSBkb3VibGUuCi0gICAgICogQHNlZSAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqIEByZXR1cm4gYSBkb3VibGUuCi0gICAgICovCi0gICAgcHVibGljIGRvdWJsZSBvbkludm9rZUQoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYW4gb2JqZWN0LgotICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKLSAgICAgKiBAcmV0dXJuIGFuIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IG9uSW52b2tlQShTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKTsKLX0KLSAgICAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvT3ZlcnJpZGVNZXRob2QuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvT3ZlcnJpZGVNZXRob2QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZhZmY5OS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL092ZXJyaWRlTWV0aG9kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi0vKioKLSAqIEFsbG93cyBzdHViIG1ldGhvZHMgZnJvbSBMYXlvdXRMaWIgdG8gYmUgb3ZlcnJpZGVuIGF0IHJ1bnRpbWUuCi0gKiA8cC8+Ci0gKiBJbXBsZW1lbnRhdGlvbiBub3RlOiBhbGwgdHlwZXMgcmVxdWlyZWQgYnkgdGhpcyBjbGFzcyhpbm5lci9vdXRlciBjbGFzc2VzICYgaW50ZXJmYWNlcykKLSAqIG11c3QgYmUgcmVmZXJlbmNlZCBieSB0aGUgaW5qZWN0Q2xhc3MgYXJndW1lbnQgdG8ge0BsaW5rIEFzbUdlbmVyYXRvcn0gaW4gTWFpbi5qYXZhOwotICogT3RoZXJ3aXNlIHRoZXkgd29uJ3QgYmUgYWNjZXNzaWJsZSBpbiBsYXlvdXRsaWIuamFyIGF0IHJ1bnRpbWUuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBPdmVycmlkZU1ldGhvZCB7Ci0KLSAgICAvKiogTWFwIG9mIG1ldGhvZCBvdmVycmlkZGVuLiAqLwotICAgIHByaXZhdGUgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBNZXRob2RMaXN0ZW5lcj4gc01ldGhvZHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1ldGhvZExpc3RlbmVyPigpOwotICAgIC8qKiBEZWZhdWx0IGxpc3RlbmVyIGZvciBhbGwgbWV0aG9kIG5vdCBsaXN0ZWQgaW4gc01ldGhvZHMuIE5vdGhpbmcgaWYgbnVsbC4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBNZXRob2RMaXN0ZW5lciBzRGVmYXVsdExpc3RlbmVyID0gbnVsbDsKLSAgICAKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IGxpc3RlbmVyIGZvciBhbGwgbWV0aG9kcyBub3Qgc3BlY2lmaWNhbGx5IGhhbmRsZWQuCi0gICAgICogTnVsbCBtZWFucyB0byBkbyBub3RoaW5nLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXREZWZhdWx0TGlzdGVuZXIoTWV0aG9kTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgc0RlZmF1bHRMaXN0ZW5lciA9IGxpc3RlbmVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlZmluZXMgb3IgcmVzZXQgYSBsaXN0ZW5lciBmb3IgdGhlIGdpdmVuIG1ldGhvZCBzaWduYXR1cmUuCi0gICAgICogCi0gICAgICogQHBhcmFtIHNpZ25hdHVyZSBUaGUgc2lnbmF0dXJlIG9mIHRoZSBtZXRob2QgYmVpbmcgaW52b2tlZCwgY29tcG9zZWQgb2YgdGhlCi0gICAgICogICAgICAgICAgICAgICAgICBiaW5hcnkgY2xhc3MgbmFtZSBmb2xsb3dlZCBieSB0aGUgbWV0aG9kIGRlc2NyaXB0b3IgKGFrYSBhcmd1bWVudAotICAgICAqICAgICAgICAgICAgICAgICAgdHlwZXMpLiBFeGFtcGxlOiAiY29tL2Zvby9NeUNsYXNzL0lubmVyQ2xhc3MvcHJpbnRJbnQoSSlWIgotICAgICAqIEBwYXJhbSBsaXN0ZW5lciBUaGUgbmV3IGxpc3RlbmVyLiBSZW1vdmVzIGl0IGlmIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldE1ldGhvZExpc3RlbmVyKFN0cmluZyBzaWduYXR1cmUsIE1ldGhvZExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzTWV0aG9kcy5yZW1vdmUoc2lnbmF0dXJlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNNZXRob2RzLnB1dChzaWduYXR1cmUsIGxpc3RlbmVyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBJbnZva2VzIHRoZSBzcGVjaWZpYyBsaXN0ZW5lciBmb3IgdGhlIGdpdmVuIHNpZ25hdHVyZSBvciB0aGUgZGVmYXVsdCBvbmUgaWYgZGVmaW5lZC4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhpcyB2ZXJzaW9uIGludm9rZXMgdGhlIG1ldGhvZCBsaXN0ZW5lciBmb3IgdGhlIHZvaWQgcmV0dXJuIHR5cGUuIAotICAgICAqIDxwLz4KLSAgICAgKiBOb3RlOiB0aGlzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHRoZSBMYXlvdXRMaWIgQnJpZGdlLiBJdCBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQKLSAgICAgKiBieSB0aGUgc3R1YmJlZCBtZXRob2RzIGdlbmVyYXRlZCBieSB0aGUgTGF5b3V0TGliX2NyZWF0ZSB0b29sLgotICAgICAqIAotICAgICAqIEBwYXJhbSBzaWduYXR1cmUgVGhlIHNpZ25hdHVyZSBvZiB0aGUgbWV0aG9kIGJlaW5nIGludm9rZWQsIGNvbXBvc2VkIG9mIHRoZQotICAgICAqICAgICAgICAgICAgICAgICAgYmluYXJ5IGNsYXNzIG5hbWUgZm9sbG93ZWQgYnkgdGhlIG1ldGhvZCBkZXNjcmlwdG9yIChha2EgYXJndW1lbnQKLSAgICAgKiAgICAgICAgICAgICAgICAgIHR5cGVzKS4gRXhhbXBsZTogImNvbS9mb28vTXlDbGFzcy9Jbm5lckNsYXNzL3ByaW50SW50KEkpViIuCi0gICAgICogQHBhcmFtIGlzTmF0aXZlIFRydWUgaWYgdGhlIG1ldGhvZCB3YXMgYSBuYXRpdmUgbWV0aG9kLgotICAgICAqIEBwYXJhbSBjYWxsZXIgVGhlIGNhbGxpbmcgb2JqZWN0LiBOdWxsIGZvciBzdGF0aWMgbWV0aG9kcywgInRoaXMiIGZvciBpbnN0YW5jZSBtZXRob2RzLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbnZva2VWKFN0cmluZyBzaWduYXR1cmUsIGJvb2xlYW4gaXNOYXRpdmUsIE9iamVjdCBjYWxsZXIpIHsKLSAgICAgICAgTWV0aG9kTGlzdGVuZXIgaSA9IHNNZXRob2RzLmdldChzaWduYXR1cmUpOwotICAgICAgICBpZiAoaSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpLm9uSW52b2tlVihzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICB9IGVsc2UgaWYgKHNEZWZhdWx0TGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgc0RlZmF1bHRMaXN0ZW5lci5vbkludm9rZVYoc2lnbmF0dXJlLCBpc05hdGl2ZSwgY2FsbGVyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBJbnZva2VzIHRoZSBzcGVjaWZpYyBsaXN0ZW5lciBmb3IgdGhlIGludCByZXR1cm4gdHlwZS4KLSAgICAgKiBAc2VlICNpbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgaW50IGludm9rZUkoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcikgewotICAgICAgICBNZXRob2RMaXN0ZW5lciBpID0gc01ldGhvZHMuZ2V0KHNpZ25hdHVyZSk7Ci0gICAgICAgIGlmIChpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBpLm9uSW52b2tlSShzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICB9IGVsc2UgaWYgKHNEZWZhdWx0TGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHNEZWZhdWx0TGlzdGVuZXIub25JbnZva2VJKHNpZ25hdHVyZSwgaXNOYXRpdmUsIGNhbGxlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEludm9rZXMgdGhlIHNwZWNpZmljIGxpc3RlbmVyIGZvciB0aGUgbG9uZyByZXR1cm4gdHlwZS4KLSAgICAgKiBAc2VlICNpbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgbG9uZyBpbnZva2VMKFN0cmluZyBzaWduYXR1cmUsIGJvb2xlYW4gaXNOYXRpdmUsIE9iamVjdCBjYWxsZXIpIHsKLSAgICAgICAgTWV0aG9kTGlzdGVuZXIgaSA9IHNNZXRob2RzLmdldChzaWduYXR1cmUpOwotICAgICAgICBpZiAoaSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gaS5vbkludm9rZUwoc2lnbmF0dXJlLCBpc05hdGl2ZSwgY2FsbGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChzRGVmYXVsdExpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBzRGVmYXVsdExpc3RlbmVyLm9uSW52b2tlTChzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBJbnZva2VzIHRoZSBzcGVjaWZpYyBsaXN0ZW5lciBmb3IgdGhlIGZsb2F0IHJldHVybiB0eXBlLgotICAgICAqIEBzZWUgI2ludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmbG9hdCBpbnZva2VGKFN0cmluZyBzaWduYXR1cmUsIGJvb2xlYW4gaXNOYXRpdmUsIE9iamVjdCBjYWxsZXIpIHsKLSAgICAgICAgTWV0aG9kTGlzdGVuZXIgaSA9IHNNZXRob2RzLmdldChzaWduYXR1cmUpOwotICAgICAgICBpZiAoaSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gaS5vbkludm9rZUYoc2lnbmF0dXJlLCBpc05hdGl2ZSwgY2FsbGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChzRGVmYXVsdExpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBzRGVmYXVsdExpc3RlbmVyLm9uSW52b2tlRihzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBJbnZva2VzIHRoZSBzcGVjaWZpYyBsaXN0ZW5lciBmb3IgdGhlIGRvdWJsZSByZXR1cm4gdHlwZS4KLSAgICAgKiBAc2VlICNpbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZG91YmxlIGludm9rZUQoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcikgewotICAgICAgICBNZXRob2RMaXN0ZW5lciBpID0gc01ldGhvZHMuZ2V0KHNpZ25hdHVyZSk7Ci0gICAgICAgIGlmIChpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBpLm9uSW52b2tlRChzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICB9IGVsc2UgaWYgKHNEZWZhdWx0TGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHNEZWZhdWx0TGlzdGVuZXIub25JbnZva2VEKHNpZ25hdHVyZSwgaXNOYXRpdmUsIGNhbGxlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEludm9rZXMgdGhlIHNwZWNpZmljIGxpc3RlbmVyIGZvciB0aGUgb2JqZWN0IHJldHVybiB0eXBlLgotICAgICAqIEBzZWUgI2ludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBPYmplY3QgaW52b2tlQShTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKSB7Ci0gICAgICAgIE1ldGhvZExpc3RlbmVyIGkgPSBzTWV0aG9kcy5nZXQoc2lnbmF0dXJlKTsKLSAgICAgICAgaWYgKGkgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGkub25JbnZva2VBKHNpZ25hdHVyZSwgaXNOYXRpdmUsIGNhbGxlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoc0RlZmF1bHRMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gc0RlZmF1bHRMaXN0ZW5lci5vbkludm9rZUEoc2lnbmF0dXJlLCBpc05hdGl2ZSwgY2FsbGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1JlZmFjdG9yQ2xhc3NBZGFwdGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1JlZmFjdG9yQ2xhc3NBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMTYxZjUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9SZWZhY3RvckNsYXNzQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotCi1wdWJsaWMgY2xhc3MgUmVmYWN0b3JDbGFzc0FkYXB0ZXIgZXh0ZW5kcyBBYnN0cmFjdENsYXNzQWRhcHRlciB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1SZWZhY3RvckNsYXNzZXM7Ci0KLSAgICBSZWZhY3RvckNsYXNzQWRhcHRlcihDbGFzc1Zpc2l0b3IgY3YsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHJlZmFjdG9yQ2xhc3NlcykgewotICAgICAgICBzdXBlcihjdik7Ci0gICAgICAgIG1SZWZhY3RvckNsYXNzZXMgPSByZWZhY3RvckNsYXNzZXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFN0cmluZyByZW5hbWVJbnRlcm5hbFR5cGUoU3RyaW5nIG9sZENsYXNzTmFtZSkgewotICAgICAgICBpZiAob2xkQ2xhc3NOYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgIFN0cmluZyBuZXdOYW1lID0gbVJlZmFjdG9yQ2xhc3Nlcy5nZXQob2xkQ2xhc3NOYW1lKTsKLSAgICAgICAgICAgIGlmIChuZXdOYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3TmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBwb3MgPSBvbGRDbGFzc05hbWUuaW5kZXhPZignJCcpOwotICAgICAgICAgICAgaWYgKHBvcyA+IDApIHsKLSAgICAgICAgICAgICAgICBuZXdOYW1lID0gbVJlZmFjdG9yQ2xhc3Nlcy5nZXQob2xkQ2xhc3NOYW1lLnN1YnN0cmluZygwLCBwb3MpKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3TmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdOYW1lICsgb2xkQ2xhc3NOYW1lLnN1YnN0cmluZyhwb3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gb2xkQ2xhc3NOYW1lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUmVuYW1lQ2xhc3NBZGFwdGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1JlbmFtZUNsYXNzQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjEwNzRjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUmVuYW1lQ2xhc3NBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdmlzaXRvciByZW5hbWVzIGEgY2xhc3MgZnJvbSBhIGdpdmVuIG9sZCBuYW1lIHRvIGEgZ2l2ZW4gbmV3IG5hbWUuCi0gKiBUaGUgY2xhc3MgdmlzaXRvciB3aWxsIGFsc28gcmVuYW1lIGFsbCBpbm5lciBjbGFzc2VzIGFuZCByZWZlcmVuY2VzIGluIHRoZSBtZXRob2RzLgotICogPHAvPgotICoKLSAqIEZvciBpbm5lciBjbGFzc2VzLCB0aGlzIGhhbmRsZXMgb25seSB0aGUgY2FzZSB3aGVyZSB0aGUgb3V0ZXIgY2xhc3MgbmFtZSBjaGFuZ2VzLgotICogVGhlIGlubmVyIGNsYXNzIG5hbWUgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4KLSAqLwotcHVibGljIGNsYXNzIFJlbmFtZUNsYXNzQWRhcHRlciBleHRlbmRzIEFic3RyYWN0Q2xhc3NBZGFwdGVyIHsKLQotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU9sZE5hbWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU5ld05hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbU9sZEJhc2U7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbU5ld0Jhc2U7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgY2xhc3MgdmlzaXRvciB0aGF0IHJlbmFtZXMgYSBjbGFzcyBmcm9tIGEgZ2l2ZW4gb2xkIG5hbWUgdG8gYSBnaXZlbiBuZXcgbmFtZS4KLSAgICAgKiBUaGUgY2xhc3MgdmlzaXRvciB3aWxsIGFsc28gcmVuYW1lIGFsbCBpbm5lciBjbGFzc2VzIGFuZCByZWZlcmVuY2VzIGluIHRoZSBtZXRob2RzLgotICAgICAqIFRoZSBuYW1lcyBtdXN0IGJlIGZ1bGwgcXVhbGlmaWVkIGludGVybmFsIEFTTSBuYW1lcyAoZS5nLiBjb20vYmxhaC9NeUNsYXNzJElubmVyQ2xhc3MpLgotICAgICAqLwotICAgIHB1YmxpYyBSZW5hbWVDbGFzc0FkYXB0ZXIoQ2xhc3NWaXNpdG9yIGN2LCBTdHJpbmcgb2xkTmFtZSwgU3RyaW5nIG5ld05hbWUpIHsKLSAgICAgICAgc3VwZXIoY3YpOwotICAgICAgICBtT2xkQmFzZSA9IG1PbGROYW1lID0gb2xkTmFtZTsKLSAgICAgICAgbU5ld0Jhc2UgPSBtTmV3TmFtZSA9IG5ld05hbWU7Ci0KLSAgICAgICAgaW50IHBvcyA9IG1PbGROYW1lLmluZGV4T2YoJyQnKTsKLSAgICAgICAgaWYgKHBvcyA+IDApIHsKLSAgICAgICAgICAgIG1PbGRCYXNlID0gbU9sZE5hbWUuc3Vic3RyaW5nKDAsIHBvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcG9zID0gbU5ld05hbWUuaW5kZXhPZignJCcpOwotICAgICAgICBpZiAocG9zID4gMCkgewotICAgICAgICAgICAgbU5ld0Jhc2UgPSBtTmV3TmFtZS5zdWJzdHJpbmcoMCwgcG9zKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCAobU9sZEJhc2UgPT0gbnVsbCAmJiBtTmV3QmFzZSA9PSBudWxsKSB8fCAobU9sZEJhc2UgIT0gbnVsbCAmJiBtTmV3QmFzZSAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW5hbWVzIGFuIGludGVybmFsIHR5cGUgbmFtZSwgZS5nLiAiY29tLnBhY2thZ2UuTXlDbGFzcyIuCi0gICAgICogSWYgdGhlIHR5cGUgZG9lc24ndCBuZWVkIHRvIGJlIHJlbmFtZWQsIHJldHVybnMgdGhlIGlucHV0IHN0cmluZyBhcy1pcy4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhlIGludGVybmFsIHR5cGUgb2Ygc29tZSBvZiB0aGUgTWV0aG9kVmlzaXRvciB0dXJucyBvdXQgdG8gYmUgYSB0eXBlCi0gICAgICAgZGVzY3JpcHRvciBzb21ldGltZXMgc28gZGVzY3JpcHRvcnMgYXJlIHJlbmFtZWQgdG9vLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBTdHJpbmcgcmVuYW1lSW50ZXJuYWxUeXBlKFN0cmluZyB0eXBlKSB7Ci0gICAgICAgIGlmICh0eXBlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGUuZXF1YWxzKG1PbGROYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIG1OZXdOYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1PbGRCYXNlICE9IG1PbGROYW1lICYmIHR5cGUuZXF1YWxzKG1PbGRCYXNlKSkgewotICAgICAgICAgICAgcmV0dXJuIG1OZXdCYXNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHBvcyA9IHR5cGUuaW5kZXhPZignJCcpOwotICAgICAgICBpZiAocG9zID09IG1PbGRCYXNlLmxlbmd0aCgpICYmIHR5cGUuc3RhcnRzV2l0aChtT2xkQmFzZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBtTmV3QmFzZSArIHR5cGUuc3Vic3RyaW5nKHBvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHR5cGU7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1N0dWJNZXRob2RBZGFwdGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1N0dWJNZXRob2RBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZTc1MzUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9TdHViTWV0aG9kQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5Bbm5vdGF0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5BdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTGFiZWw7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5PcGNvZGVzOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLlR5cGU7Ci0KLS8qKgotICogVGhpcyBtZXRob2QgYWRhcHRlciByZXdyaXRlcyBhIG1ldGhvZCBieSBkaXNjYXJkaW5nIHRoZSBvcmlnaW5hbCBjb2RlIGFuZCBnZW5lcmF0aW5nCi0gKiBhIHN0dWIgZGVwZW5kaW5nIG9uIHRoZSByZXR1cm4gdHlwZS4gT3JpZ2luYWwgYW5ub3RhdGlvbnMgYXJlIHBhc3NlZCBhbG9uZyB1bmNoYW5nZWQuCi0gKi8KLWNsYXNzIFN0dWJNZXRob2RBZGFwdGVyIGV4dGVuZHMgTWV0aG9kVmlzaXRvciB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ09OU1RSVUNUT1IgPSAiPGluaXQ+IjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ0xBU1NfSU5JVCA9ICI8Y2xpbml0PiI7Ci0KLSAgICAvKiogVGhlIHBhcmVudCBtZXRob2Qgd3JpdGVyICovCi0gICAgcHJpdmF0ZSBNZXRob2RWaXNpdG9yIG1QYXJlbnRWaXNpdG9yOwotICAgIC8qKiBUaGUgbWV0aG9kIHJldHVybiB0eXBlLiBDYW4gYmUgbnVsbC4gKi8KLSAgICBwcml2YXRlIFR5cGUgbVJldHVyblR5cGU7Ci0gICAgLyoqIE1lc3NhZ2UgdG8gYmUgcHJpbnRlZCBieSBzdHViIG1ldGhvZHMuICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgbUludm9rZVNpZ25hdHVyZTsKLSAgICAvKiogRmxhZyB0byBvdXRwdXQgdGhlIGZpcnN0IGxpbmUgbnVtYmVyLiAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtT3V0cHV0Rmlyc3RMaW5lTnVtYmVyID0gdHJ1ZTsKLSAgICAvKiogRmxhZyB0aGF0IGlzIHRydWUgd2hlbiBpbXBsZW1lbnRpbmcgYSBjb25zdHJ1Y3RvciwgdG8gYWNjZXB0IGFsbCBvcmlnaW5hbAotICAgICAqICBjb2RlIGNhbGxpbmcgdGhlIG9yaWdpbmFsIHN1cGVyIGNvbnN0cnVjdG9yLiAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNJbml0TWV0aG9kID0gZmFsc2U7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbU1lc3NhZ2VHZW5lcmF0ZWQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1Jc1N0YXRpYzsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUlzTmF0aXZlOwotCi0gICAgcHVibGljIFN0dWJNZXRob2RBZGFwdGVyKE1ldGhvZFZpc2l0b3IgbXYsIFN0cmluZyBtZXRob2ROYW1lLCBUeXBlIHJldHVyblR5cGUsCi0gICAgICAgICAgICBTdHJpbmcgaW52b2tlU2lnbmF0dXJlLCBib29sZWFuIGlzU3RhdGljLCBib29sZWFuIGlzTmF0aXZlKSB7Ci0gICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgIG1QYXJlbnRWaXNpdG9yID0gbXY7Ci0gICAgICAgIG1SZXR1cm5UeXBlID0gcmV0dXJuVHlwZTsKLSAgICAgICAgbUludm9rZVNpZ25hdHVyZSA9IGludm9rZVNpZ25hdHVyZTsKLSAgICAgICAgbUlzU3RhdGljID0gaXNTdGF0aWM7Ci0gICAgICAgIG1Jc05hdGl2ZSA9IGlzTmF0aXZlOwotCi0gICAgICAgIGlmIChDT05TVFJVQ1RPUi5lcXVhbHMobWV0aG9kTmFtZSkgfHwgQ0xBU1NfSU5JVC5lcXVhbHMobWV0aG9kTmFtZSkpIHsKLSAgICAgICAgICAgIG1Jc0luaXRNZXRob2QgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGdlbmVyYXRlSW52b2tlKCkgewotICAgICAgICAvKiBHZW5lcmF0ZXMgdGhlIGNvZGU6Ci0gICAgICAgICAqICBPdmVycmlkZU1ldGhvZC5pbnZva2UoInNpZ25hdHVyZSIsIG1Jc05hdGl2ZSA/IHRydWUgOiBmYWxzZSwgbnVsbCBvciB0aGlzKTsKLSAgICAgICAgICovCi0gICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0TGRjSW5zbihtSW52b2tlU2lnbmF0dXJlKTsKLSAgICAgICAgLy8gcHVzaCB0cnVlIG9yIGZhbHNlCi0gICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihtSXNOYXRpdmUgPyBPcGNvZGVzLklDT05TVF8xIDogT3Bjb2Rlcy5JQ09OU1RfMCk7Ci0gICAgICAgIC8vIHB1c2ggbnVsbCBvciB0aGlzCi0gICAgICAgIGlmIChtSXNTdGF0aWMpIHsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLkFDT05TVF9OVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0VmFySW5zbihPcGNvZGVzLkFMT0FELCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzb3J0ID0gbVJldHVyblR5cGUgIT0gbnVsbCA/IG1SZXR1cm5UeXBlLmdldFNvcnQoKSA6IFR5cGUuVk9JRDsKLSAgICAgICAgc3dpdGNoKHNvcnQpIHsKLSAgICAgICAgY2FzZSBUeXBlLlZPSUQ6Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdE1ldGhvZEluc24oT3Bjb2Rlcy5JTlZPS0VTVEFUSUMsCi0gICAgICAgICAgICAgICAgICAgICJjb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL092ZXJyaWRlTWV0aG9kIiwKLSAgICAgICAgICAgICAgICAgICAgImludm9rZVYiLAotICAgICAgICAgICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO1pMamF2YS9sYW5nL09iamVjdDspViIpOwotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuUkVUVVJOKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGUuQk9PTEVBTjoKLSAgICAgICAgY2FzZSBUeXBlLkNIQVI6Ci0gICAgICAgIGNhc2UgVHlwZS5CWVRFOgotICAgICAgICBjYXNlIFR5cGUuU0hPUlQ6Ci0gICAgICAgIGNhc2UgVHlwZS5JTlQ6Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdE1ldGhvZEluc24oT3Bjb2Rlcy5JTlZPS0VTVEFUSUMsCi0gICAgICAgICAgICAgICAgICAgICJjb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL092ZXJyaWRlTWV0aG9kIiwKLSAgICAgICAgICAgICAgICAgICAgImludm9rZUkiLAotICAgICAgICAgICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO1pMamF2YS9sYW5nL09iamVjdDspSSIpOwotICAgICAgICAgICAgc3dpdGNoKHNvcnQpIHsKLSAgICAgICAgICAgIGNhc2UgVHlwZS5CT09MRUFOOgotICAgICAgICAgICAgICAgIExhYmVsIGwxID0gbmV3IExhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRKdW1wSW5zbihPcGNvZGVzLklGRVEsIGwxKTsKLSAgICAgICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEluc24oT3Bjb2Rlcy5JQ09OU1RfMSk7Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuSVJFVFVSTik7Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRMYWJlbChsMSk7Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuSUNPTlNUXzApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlLkNIQVI6Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuSTJDKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZS5CWVRFOgotICAgICAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLkkyQik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGUuU0hPUlQ6Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuSTJTKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLklSRVRVUk4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZS5MT05HOgotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNZXRob2RJbnNuKE9wY29kZXMuSU5WT0tFU1RBVElDLAotICAgICAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9PdmVycmlkZU1ldGhvZCIsCi0gICAgICAgICAgICAgICAgICAgICJpbnZva2VMIiwKLSAgICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztaTGphdmEvbGFuZy9PYmplY3Q7KUoiKTsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLkxSRVRVUk4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZS5GTE9BVDoKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0TWV0aG9kSW5zbihPcGNvZGVzLklOVk9LRVNUQVRJQywKLSAgICAgICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvT3ZlcnJpZGVNZXRob2QiLAotICAgICAgICAgICAgICAgICAgICAiaW52b2tlRiIsCi0gICAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WkxqYXZhL2xhbmcvT2JqZWN0OylGIik7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEluc24oT3Bjb2Rlcy5GUkVUVVJOKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGUuRE9VQkxFOgotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNZXRob2RJbnNuKE9wY29kZXMuSU5WT0tFU1RBVElDLAotICAgICAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9PdmVycmlkZU1ldGhvZCIsCi0gICAgICAgICAgICAgICAgICAgICJpbnZva2VEIiwKLSAgICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztaTGphdmEvbGFuZy9PYmplY3Q7KUQiKTsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLkRSRVRVUk4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZS5BUlJBWToKLSAgICAgICAgY2FzZSBUeXBlLk9CSkVDVDoKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0TWV0aG9kSW5zbihPcGNvZGVzLklOVk9LRVNUQVRJQywKLSAgICAgICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvT3ZlcnJpZGVNZXRob2QiLAotICAgICAgICAgICAgICAgICAgICAiaW52b2tlQSIsCi0gICAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WkxqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiKTsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0VHlwZUluc24oT3Bjb2Rlcy5DSEVDS0NBU1QsIG1SZXR1cm5UeXBlLmdldEludGVybmFsTmFtZSgpKTsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLkFSRVRVUk4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBnZW5lcmF0ZVBvcCgpIHsKLSAgICAgICAgLyogUG9wcyB0aGUgc3RhY2ssIGRlcGVuZGluZyBvbiB0aGUgcmV0dXJuIHR5cGUuCi0gICAgICAgICAqLwotICAgICAgICBzd2l0Y2gobVJldHVyblR5cGUgIT0gbnVsbCA/IG1SZXR1cm5UeXBlLmdldFNvcnQoKSA6IFR5cGUuVk9JRCkgewotICAgICAgICBjYXNlIFR5cGUuVk9JRDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGUuQk9PTEVBTjoKLSAgICAgICAgY2FzZSBUeXBlLkNIQVI6Ci0gICAgICAgIGNhc2UgVHlwZS5CWVRFOgotICAgICAgICBjYXNlIFR5cGUuU0hPUlQ6Ci0gICAgICAgIGNhc2UgVHlwZS5JTlQ6Ci0gICAgICAgIGNhc2UgVHlwZS5GTE9BVDoKLSAgICAgICAgY2FzZSBUeXBlLkFSUkFZOgotICAgICAgICBjYXNlIFR5cGUuT0JKRUNUOgotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuUE9QKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGUuTE9ORzoKLSAgICAgICAgY2FzZSBUeXBlLkRPVUJMRToKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLlBPUDIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBQYXNzIGRvd24gdG8gdmlzaXRvciB3cml0ZXIuIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIGVpdGhlciBkbyBub3RoaW5nLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0Q29kZSgpIHsKLSAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRDb2RlKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiB2aXNpdE1heHMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHZpc2l0RW5kIGlmIHRoZXJlIHdhcyBhbnkgY29kZSB0byByZXdyaXRlLgotICAgICAqIEZvciBub24tY29uc3RydWN0b3IsIGdlbmVyYXRlIHRoZSBtZXNzYWdpbmcgY29kZSBhbmQgdGhlIHJldHVybiBzdGF0ZW1lbnQKLSAgICAgKiBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIGJlZm9yZS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdE1heHMoaW50IG1heFN0YWNrLCBpbnQgbWF4TG9jYWxzKSB7Ci0gICAgICAgIGlmICghbUlzSW5pdE1ldGhvZCAmJiAhbU1lc3NhZ2VHZW5lcmF0ZWQpIHsKLSAgICAgICAgICAgIGdlbmVyYXRlSW52b2tlKCk7Ci0gICAgICAgICAgICBtTWVzc2FnZUdlbmVyYXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNYXhzKG1heFN0YWNrLCBtYXhMb2NhbHMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVuZCBvZiB2aXNpdGluZy4KLSAgICAgKiBGb3Igbm9uLWNvbnN0cnVjdG9yLCBnZW5lcmF0ZSB0aGUgbWVzc2FnaW5nIGNvZGUgYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50Ci0gICAgICogaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBiZWZvcmUuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRFbmQoKSB7Ci0gICAgICAgIGlmICghbUlzSW5pdE1ldGhvZCAmJiAhbU1lc3NhZ2VHZW5lcmF0ZWQpIHsKLSAgICAgICAgICAgIGdlbmVyYXRlSW52b2tlKCk7Ci0gICAgICAgICAgICBtTWVzc2FnZUdlbmVyYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdE1heHMoMSwgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRFbmQoKTsKLSAgICB9Ci0KLSAgICAvKiBXcml0ZXMgYWxsIGFubm90YXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgbWV0aG9kLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBBbm5vdGF0aW9uVmlzaXRvciB2aXNpdEFubm90YXRpb24oU3RyaW5nIGRlc2MsIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICByZXR1cm4gbVBhcmVudFZpc2l0b3IudmlzaXRBbm5vdGF0aW9uKGRlc2MsIHZpc2libGUpOwotICAgIH0KLQotICAgIC8qIFdyaXRlcyBhbGwgYW5ub3RhdGlvbiBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBvcmlnaW5hbCBtZXRob2QuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0QW5ub3RhdGlvbkRlZmF1bHQoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyZW50VmlzaXRvci52aXNpdEFubm90YXRpb25EZWZhdWx0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0UGFyYW1ldGVyQW5ub3RhdGlvbihpbnQgcGFyYW1ldGVyLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICByZXR1cm4gbVBhcmVudFZpc2l0b3IudmlzaXRQYXJhbWV0ZXJBbm5vdGF0aW9uKHBhcmFtZXRlciwgZGVzYywgdmlzaWJsZSk7Ci0gICAgfQotCi0gICAgLyogV3JpdGVzIGFsbCBhdHRyaWJ1dGVzIGZyb20gdGhlIG9yaWdpbmFsIG1ldGhvZC4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZShBdHRyaWJ1dGUgYXR0cikgewotICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEF0dHJpYnV0ZShhdHRyKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE9ubHkgd3JpdGVzIHRoZSBmaXJzdCBsaW5lIG51bWJlciBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCBjb2RlIHNvIHRoYXQgc291cmNlCi0gICAgICogdmlld2VycyBjYW4gZGlyZWN0IHRvIHRoZSBjb3JyZWN0IG1ldGhvZCwgZXZlbiBpZiB0aGUgY29udGVudCBkb2Vzbid0IG1hdGNoLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TGluZU51bWJlcihpbnQgbGluZSwgTGFiZWwgc3RhcnQpIHsKLSAgICAgICAgaWYgKG1Jc0luaXRNZXRob2QgfHwgbU91dHB1dEZpcnN0TGluZU51bWJlcikgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRMaW5lTnVtYmVyKGxpbmUsIHN0YXJ0KTsKLSAgICAgICAgICAgIG1PdXRwdXRGaXJzdExpbmVOdW1iZXIgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciBub24tY29uc3RydWN0b3IsIHJld3JpdGUgZXhpc3RpbmcgInJldHVybiIgaW5zdHJ1Y3Rpb25zIHRvIHdyaXRlIHRoZSBtZXNzYWdlLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0SW5zbihpbnQgb3Bjb2RlKSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewotICAgICAgICAgICAgY2FzZSBPcGNvZGVzLlJFVFVSTjoKLSAgICAgICAgICAgIGNhc2UgT3Bjb2Rlcy5BUkVUVVJOOgotICAgICAgICAgICAgY2FzZSBPcGNvZGVzLkRSRVRVUk46Ci0gICAgICAgICAgICBjYXNlIE9wY29kZXMuRlJFVFVSTjoKLSAgICAgICAgICAgIGNhc2UgT3Bjb2Rlcy5JUkVUVVJOOgotICAgICAgICAgICAgY2FzZSBPcGNvZGVzLkxSRVRVUk46Ci0gICAgICAgICAgICAgICAgLy8gUG9wIHRoZSBsYXN0IHdvcmQgZnJvbSB0aGUgc3RhY2sgc2luY2UgaW52b2tlIHdpbGwgZ2VuZXJhdGUgaXRzIG93biByZXR1cm4uCi0gICAgICAgICAgICAgICAgZ2VuZXJhdGVQb3AoKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZUludm9rZSgpOwotICAgICAgICAgICAgICAgIG1NZXNzYWdlR2VuZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAvLyRGQUxMLVRIUk9VR0gkCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihvcGNvZGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMYWJlbChMYWJlbCBsYWJlbCkgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRMYWJlbChsYWJlbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdFRyeUNhdGNoQmxvY2soTGFiZWwgc3RhcnQsIExhYmVsIGVuZCwgTGFiZWwgaGFuZGxlciwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgaWYgKG1Jc0luaXRNZXRob2QpIHsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0VHJ5Q2F0Y2hCbG9jayhzdGFydCwgZW5kLCBoYW5kbGVyLCB0eXBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNZXRob2RJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRGaWVsZEluc24oaW50IG9wY29kZSwgU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MpIHsKLSAgICAgICAgaWYgKG1Jc0luaXRNZXRob2QpIHsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0RmllbGRJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRGcmFtZShpbnQgdHlwZSwgaW50IG5Mb2NhbCwgT2JqZWN0W10gbG9jYWwsIGludCBuU3RhY2ssIE9iamVjdFtdIHN0YWNrKSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEZyYW1lKHR5cGUsIG5Mb2NhbCwgbG9jYWwsIG5TdGFjaywgc3RhY2spOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRJaW5jSW5zbihpbnQgdmFyLCBpbnQgaW5jcmVtZW50KSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdElpbmNJbnNuKHZhciwgaW5jcmVtZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0SW50SW5zbihpbnQgb3Bjb2RlLCBpbnQgb3BlcmFuZCkgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnRJbnNuKG9wY29kZSwgb3BlcmFuZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdEp1bXBJbnNuKGludCBvcGNvZGUsIExhYmVsIGxhYmVsKSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEp1bXBJbnNuKG9wY29kZSwgbGFiZWwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMZGNJbnNuKE9iamVjdCBjc3QpIHsKLSAgICAgICAgaWYgKG1Jc0luaXRNZXRob2QpIHsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0TGRjSW5zbihjc3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMb2NhbFZhcmlhYmxlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywgU3RyaW5nIHNpZ25hdHVyZSwKLSAgICAgICAgICAgIExhYmVsIHN0YXJ0LCBMYWJlbCBlbmQsIGludCBpbmRleCkgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRMb2NhbFZhcmlhYmxlKG5hbWUsIGRlc2MsIHNpZ25hdHVyZSwgc3RhcnQsIGVuZCwgaW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMb29rdXBTd2l0Y2hJbnNuKExhYmVsIGRmbHQsIGludFtdIGtleXMsIExhYmVsW10gbGFiZWxzKSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdExvb2t1cFN3aXRjaEluc24oZGZsdCwga2V5cywgbGFiZWxzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TXVsdGlBTmV3QXJyYXlJbnNuKFN0cmluZyBkZXNjLCBpbnQgZGltcykgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNdWx0aUFOZXdBcnJheUluc24oZGVzYywgZGltcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdFRhYmxlU3dpdGNoSW5zbihpbnQgbWluLCBpbnQgbWF4LCBMYWJlbCBkZmx0LCBMYWJlbFtdIGxhYmVscykgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRUYWJsZVN3aXRjaEluc24obWluLCBtYXgsIGRmbHQsIGxhYmVscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVJbnNuKGludCBvcGNvZGUsIFN0cmluZyB0eXBlKSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdFR5cGVJbnNuKG9wY29kZSwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdFZhckluc24oaW50IG9wY29kZSwgaW50IHZhcikgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRWYXJJbnNuKG9wY29kZSwgdmFyKTsKLSAgICAgICAgfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9UcmFuc2Zvcm1DbGFzc0FkYXB0ZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvVHJhbnNmb3JtQ2xhc3NBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NWExODMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9UcmFuc2Zvcm1DbGFzc0FkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkZpZWxkVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5NZXRob2RWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk9wY29kZXM7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uVHlwZTsKLQotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLS8qKgotICogQ2xhc3MgYWRhcHRlciB0aGF0IGNhbiBzdHViIHNvbWUgb3IgYWxsIG9mIHRoZSBtZXRob2RzIG9mIHRoZSBjbGFzcy4KLSAqLwotY2xhc3MgVHJhbnNmb3JtQ2xhc3NBZGFwdGVyIGV4dGVuZHMgQ2xhc3NWaXNpdG9yIHsKLQotICAgIC8qKiBUcnVlIGlmIGFsbCBtZXRob2RzIHNob3VsZCBiZSBzdHViYmVkLCBmYWxzZSBpZiBvbmx5IG5hdGl2ZSBvbmVzIG11c3QgYmUgc3R1YmJlZC4gKi8KLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVN0dWJBbGw7Ci0gICAgLyoqIFRydWUgaWYgdGhlIGNsYXNzIGlzIGFuIGludGVyZmFjZS4gKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbUlzSW50ZXJmYWNlOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1DbGFzc05hbWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMb2cgbUxvZzsKLSAgICBwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IG1TdHViTWV0aG9kczsKLSAgICBwcml2YXRlIFNldDxTdHJpbmc+IG1EZWxldGVSZXR1cm5zOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjbGFzcyBhZGFwdGVyIHRoYXQgd2lsbCBzdHViIHNvbWUgb3IgYWxsIG1ldGhvZHMuCi0gICAgICogQHBhcmFtIGxvZ2dlcgotICAgICAqIEBwYXJhbSBzdHViTWV0aG9kcyAgbGlzdCBvZiBtZXRob2Qgc2lnbmF0dXJlcyB0byBhbHdheXMgc3R1YiBvdXQKLSAgICAgKiBAcGFyYW0gZGVsZXRlUmV0dXJucyBsaXN0IG9mIHR5cGVzIHRoYXQgdHJpZ2dlciB0aGUgZGVsZXRpb24gb2YgbWV0aG9kcyByZXR1cm5pbmcgdGhlbS4KLSAgICAgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBiZWluZyBtb2RpZmllZAotICAgICAqIEBwYXJhbSBjdiBUaGUgcGFyZW50IGNsYXNzIHdyaXRlciB2aXNpdG9yCi0gICAgICogQHBhcmFtIHN0dWJOYXRpdmVzT25seSBUcnVlIGlmIG9ubHkgbmF0aXZlIG1ldGhvZHMgc2hvdWxkIGJlIHN0dWJiZWQuIEZhbHNlIGlmIGFsbAotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyBzaG91bGQgYmUgc3R1YmJlZC4KLSAgICAgKiBAcGFyYW0gaGFzTmF0aXZlIFRydWUgaWYgdGhlIG1ldGhvZCBoYXMgbmF0aXZlcywgaW4gd2hpY2ggY2FzZSBpdHMgYWNjZXNzIHNob3VsZCBiZQotICAgICAqICAgICAgICAgICAgICAgICAgY2hhbmdlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgVHJhbnNmb3JtQ2xhc3NBZGFwdGVyKExvZyBsb2dnZXIsIFNldDxTdHJpbmc+IHN0dWJNZXRob2RzLAotICAgICAgICAgICAgU2V0PFN0cmluZz4gZGVsZXRlUmV0dXJucywgU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3NWaXNpdG9yIGN2LAotICAgICAgICAgICAgYm9vbGVhbiBzdHViTmF0aXZlc09ubHksIGJvb2xlYW4gaGFzTmF0aXZlKSB7Ci0gICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCwgY3YpOwotICAgICAgICBtTG9nID0gbG9nZ2VyOwotICAgICAgICBtU3R1Yk1ldGhvZHMgPSBzdHViTWV0aG9kczsKLSAgICAgICAgbUNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgICAgICAgbVN0dWJBbGwgPSAhc3R1Yk5hdGl2ZXNPbmx5OwotICAgICAgICBtSXNJbnRlcmZhY2UgPSBmYWxzZTsKLSAgICAgICAgbURlbGV0ZVJldHVybnMgPSBkZWxldGVSZXR1cm5zOwotICAgIH0KLQotICAgIC8qIFZpc2l0cyB0aGUgY2xhc3MgaGVhZGVyLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0KGludCB2ZXJzaW9uLCBpbnQgYWNjZXNzLCBTdHJpbmcgbmFtZSwKLSAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIFN0cmluZyBzdXBlck5hbWUsIFN0cmluZ1tdIGludGVyZmFjZXMpIHsKLQotICAgICAgICAvLyBUaGlzIGNsYXNzIG1pZ2h0IGJlIGJlaW5nIHJlbmFtZWQuCi0gICAgICAgIG5hbWUgPSBtQ2xhc3NOYW1lOwotCi0gICAgICAgIC8vIHJlbW92ZSBwcm90ZWN0ZWQgb3IgcHJpdmF0ZSBhbmQgc2V0IGFzIHB1YmxpYwotICAgICAgICBpZiAoTWFpbi5zT3B0aW9ucy5nZW5lcmF0ZVB1YmxpY0FjY2VzcykgewotICAgICAgICAgICAgYWNjZXNzID0gYWNjZXNzICYgfihPcGNvZGVzLkFDQ19QUklWQVRFIHwgT3Bjb2Rlcy5BQ0NfUFJPVEVDVEVEKTsKLSAgICAgICAgICAgIGFjY2VzcyB8PSBPcGNvZGVzLkFDQ19QVUJMSUM7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gcmVtb3ZlIGZpbmFsCi0gICAgICAgIGFjY2VzcyA9IGFjY2VzcyAmIH5PcGNvZGVzLkFDQ19GSU5BTDsKLSAgICAgICAgLy8gbm90ZTogbGVhdmUgYWJzdHJhY3QgY2xhc3NlcyBhcyBzdWNoCi0gICAgICAgIC8vIGRvbid0IHRyeSB0byBpbXBsZW1lbnQgc3R1YiBmb3IgaW50ZXJmYWNlcwotCi0gICAgICAgIG1Jc0ludGVyZmFjZSA9ICgoYWNjZXNzICYgT3Bjb2Rlcy5BQ0NfSU5URVJGQUNFKSAhPSAwKTsKLSAgICAgICAgc3VwZXIudmlzaXQodmVyc2lvbiwgYWNjZXNzLCBuYW1lLCBzaWduYXR1cmUsIHN1cGVyTmFtZSwgaW50ZXJmYWNlcyk7Ci0gICAgfQotCi0gICAgLyogVmlzaXRzIHRoZSBoZWFkZXIgb2YgYW4gaW5uZXIgY2xhc3MuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRJbm5lckNsYXNzKFN0cmluZyBuYW1lLCBTdHJpbmcgb3V0ZXJOYW1lLCBTdHJpbmcgaW5uZXJOYW1lLCBpbnQgYWNjZXNzKSB7Ci0gICAgICAgIC8vIHJlbW92ZSBwcm90ZWN0ZWQgb3IgcHJpdmF0ZSBhbmQgc2V0IGFzIHB1YmxpYwotICAgICAgICBpZiAoTWFpbi5zT3B0aW9ucy5nZW5lcmF0ZVB1YmxpY0FjY2VzcykgewotICAgICAgICAgICAgYWNjZXNzID0gYWNjZXNzICYgfihPcGNvZGVzLkFDQ19QUklWQVRFIHwgT3Bjb2Rlcy5BQ0NfUFJPVEVDVEVEKTsKLSAgICAgICAgICAgIGFjY2VzcyB8PSBPcGNvZGVzLkFDQ19QVUJMSUM7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gcmVtb3ZlIGZpbmFsCi0gICAgICAgIGFjY2VzcyA9IGFjY2VzcyAmIH5PcGNvZGVzLkFDQ19GSU5BTDsKLSAgICAgICAgLy8gbm90ZTogbGVhdmUgYWJzdHJhY3QgY2xhc3NlcyBhcyBzdWNoCi0gICAgICAgIC8vIGRvbid0IHRyeSB0byBpbXBsZW1lbnQgc3R1YiBmb3IgaW50ZXJmYWNlcwotCi0gICAgICAgIHN1cGVyLnZpc2l0SW5uZXJDbGFzcyhuYW1lLCBvdXRlck5hbWUsIGlubmVyTmFtZSwgYWNjZXNzKTsKLSAgICB9Ci0KLSAgICAvKiBWaXNpdHMgYSBtZXRob2QuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1ldGhvZFZpc2l0b3IgdmlzaXRNZXRob2QoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nW10gZXhjZXB0aW9ucykgewotCi0gICAgICAgIGlmIChtRGVsZXRlUmV0dXJucyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBUeXBlIHQgPSBUeXBlLmdldFJldHVyblR5cGUoZGVzYyk7Ci0gICAgICAgICAgICBpZiAodC5nZXRTb3J0KCkgPT0gVHlwZS5PQkpFQ1QpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcmV0dXJuVHlwZSA9IHQuZ2V0SW50ZXJuYWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHVyblR5cGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobURlbGV0ZVJldHVybnMuY29udGFpbnMocmV0dXJuVHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIG1ldGhvZFNpZ25hdHVyZSA9IG1DbGFzc05hbWUucmVwbGFjZSgnLycsICcuJykgKyAiIyIgKyBuYW1lOwotCi0gICAgICAgIC8vIGNoYW5nZSBhY2Nlc3MgdG8gcHVibGljCi0gICAgICAgIGlmIChNYWluLnNPcHRpb25zLmdlbmVyYXRlUHVibGljQWNjZXNzKSB7Ci0gICAgICAgICAgICBhY2Nlc3MgJj0gfihPcGNvZGVzLkFDQ19QUk9URUNURUQgfCBPcGNvZGVzLkFDQ19QUklWQVRFKTsKLSAgICAgICAgICAgIGFjY2VzcyB8PSBPcGNvZGVzLkFDQ19QVUJMSUM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZW1vdmUgZmluYWwKLSAgICAgICAgYWNjZXNzID0gYWNjZXNzICYgfk9wY29kZXMuQUNDX0ZJTkFMOwotCi0gICAgICAgIC8vIHN0dWIgdGhpcyBtZXRob2QgaWYgdGhleSBhcmUgYWxsIHRvIGJlIHN0dWJiZWQgb3IgaWYgaXQgaXMgYSBuYXRpdmUgbWV0aG9kCi0gICAgICAgIC8vIGFuZCBkb24ndCB0cnkgdG8gc3R1YiBpbnRlcmZhY2VzIG5vciBhYnN0cmFjdCBub24tbmF0aXZlIG1ldGhvZHMuCi0gICAgICAgIGlmICghbUlzSW50ZXJmYWNlICYmCi0gICAgICAgICAgICAoKGFjY2VzcyAmIChPcGNvZGVzLkFDQ19BQlNUUkFDVCB8IE9wY29kZXMuQUNDX05BVElWRSkpICE9IE9wY29kZXMuQUNDX0FCU1RSQUNUKSAmJgotICAgICAgICAgICAgKG1TdHViQWxsIHx8Ci0gICAgICAgICAgICAgKGFjY2VzcyAmIE9wY29kZXMuQUNDX05BVElWRSkgIT0gMCkgfHwKLSAgICAgICAgICAgICBtU3R1Yk1ldGhvZHMuY29udGFpbnMobWV0aG9kU2lnbmF0dXJlKSkgewotCi0gICAgICAgICAgICBib29sZWFuIGlzU3RhdGljID0gKGFjY2VzcyAmIE9wY29kZXMuQUNDX1NUQVRJQykgIT0gMDsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNOYXRpdmUgPSAoYWNjZXNzICYgT3Bjb2Rlcy5BQ0NfTkFUSVZFKSAhPSAwOwotCi0gICAgICAgICAgICAvLyByZW1vdmUgYWJzdHJhY3QsIGZpbmFsIGFuZCBuYXRpdmUKLSAgICAgICAgICAgIGFjY2VzcyA9IGFjY2VzcyAmIH4oT3Bjb2Rlcy5BQ0NfQUJTVFJBQ1QgfCBPcGNvZGVzLkFDQ19GSU5BTCB8IE9wY29kZXMuQUNDX05BVElWRSk7Ci0KLSAgICAgICAgICAgIFN0cmluZyBpbnZva2VTaWduYXR1cmUgPSBtZXRob2RTaWduYXR1cmUgKyBkZXNjOwotICAgICAgICAgICAgbUxvZy5kZWJ1ZygiICBTdHViOiAlcyAoJXMpIiwgaW52b2tlU2lnbmF0dXJlLCBpc05hdGl2ZSA/ICJuYXRpdmUiIDogIiIpOwotCi0gICAgICAgICAgICBNZXRob2RWaXNpdG9yIG13ID0gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIGV4Y2VwdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHViTWV0aG9kQWRhcHRlcihtdywgbmFtZSwgcmV0dXJuVHlwZShkZXNjKSwgaW52b2tlU2lnbmF0dXJlLAotICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYywgaXNOYXRpdmUpOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtTG9nLmRlYnVnKCIgIEtlZXA6ICVzICVzIiwgbmFtZSwgZGVzYyk7Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIGV4Y2VwdGlvbnMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogVmlzaXRzIGEgZmllbGQuIE1ha2VzIGl0IHB1YmxpYy4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmllbGRWaXNpdG9yIHZpc2l0RmllbGQoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLCBTdHJpbmcgc2lnbmF0dXJlLAotICAgICAgICAgICAgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIC8vIGNoYW5nZSBhY2Nlc3MgdG8gcHVibGljCi0gICAgICAgIGlmIChNYWluLnNPcHRpb25zLmdlbmVyYXRlUHVibGljQWNjZXNzKSB7Ci0gICAgICAgICAgICBhY2Nlc3MgJj0gfihPcGNvZGVzLkFDQ19QUk9URUNURUQgfCBPcGNvZGVzLkFDQ19QUklWQVRFKTsKLSAgICAgICAgICAgIGFjY2VzcyB8PSBPcGNvZGVzLkFDQ19QVUJMSUM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0RmllbGQoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFeHRyYWN0cyB0aGUgcmV0dXJuIHtAbGluayBUeXBlfSBvZiB0aGlzIGRlc2NyaXB0b3IuCi0gICAgICovCi0gICAgVHlwZSByZXR1cm5UeXBlKFN0cmluZyBkZXNjKSB7Ci0gICAgICAgIGlmIChkZXNjICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFR5cGUuZ2V0UmV0dXJuVHlwZShkZXNjKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gaWdub3JlLCBub3QgYSB2YWxpZCB0eXBlLgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL0F1dG9DbG9zZWFibGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL0F1dG9DbG9zZWFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQyYzEyOC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvamF2YS9BdXRvQ2xvc2VhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuamF2YTsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBzYW1lIGludGVyZmFjZSBhcyB0aGUgamF2YS5sYW5nLkF1dG9DbG9zZWFibGUgd2hpY2ggd2FzIGFkZGVkIGluCi0gKiBKYXZhIDcuIFRoaXMgaGFjayBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4gdGhlIEFuZHJvaWQgY29kZSB3aGljaCB1c2VzIEphdmEgNwotICogZmVhdHVyZXMgKEFQSSAxOCBhbmQgYmV5b25kKSB0byBydW4gb24gSmF2YSA2LgotICogPHAvPgotICogRXh0cmFjdGVkIGZyb20gQVBJIGxldmVsIDE4LCBmaWxlOgotICogcGxhdGZvcm0vbGliY29yZS9sdW5pL3NyYy9tYWluL2phdmEvamF2YS9sYW5nL0F1dG9DbG9zZWFibGUuamF2YQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEF1dG9DbG9zZWFibGUgewotICAgIC8qKgotICAgICAqIENsb3NlcyB0aGUgb2JqZWN0IGFuZCByZWxlYXNlIGFueSBzeXN0ZW0gcmVzb3VyY2VzIGl0IGhvbGRzLgotICAgICAqLwotICAgIHZvaWQgY2xvc2UoKSB0aHJvd3MgRXhjZXB0aW9uOyB9CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvamF2YS9DaGFyc2V0cy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2phdmEvQ2hhcnNldHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczYjA2Yi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvamF2YS9DaGFyc2V0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5qYXZhOwotCi1pbXBvcnQgamF2YS5uaW8uQ2hhckJ1ZmZlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgc2FtZSBjbGFzcyBhcyB0aGUgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0cyB3aGljaCB3YXMgYWRkZWQgaW4KLSAqIERhbHZpayBWTS4gVGhpcyBoYWNrLCBwcm92aWRlcyBhIHJlcGxhY2VtZW50IGZvciB0aGF0IGNsYXNzIHdoaWNoIGNhbid0IGJlCi0gKiBsb2FkZWQgaW4gdGhlIHN0YW5kYXJkIEpWTSBzaW5jZSBpdCdzIGluIHRoZSBqYXZhIHBhY2thZ2UgYW5kIHN0YW5kYXJkIEpWTQotICogZG9lc24ndCBoYXZlIGl0LiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmF0aXZlIG1ldGhvZHMgaW4gdGhlIG9yaWdpbmFsCi0gKiBjbGFzcyBoYXMgYmVlbiBhZGRlZC4KLSAqIDxwLz4KLSAqIEV4dHJhY3RlZCBmcm9tIEFQSSBsZXZlbCAxOCwgZmlsZToKLSAqIHBsYXRmb3JtL2xpYmNvcmUvbHVuaS9zcmMvbWFpbi9qYXZhL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldHMKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIENoYXJzZXRzIHsKLSAgICAvKioKLSAgICAgKiBBIGNoZWFwIGFuZCB0eXBlLXNhZmUgY29uc3RhbnQgZm9yIHRoZSBJU08tODg1OS0xIENoYXJzZXQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBDaGFyc2V0IElTT184ODU5XzEgPSBDaGFyc2V0LmZvck5hbWUoIklTTy04ODU5LTEiKTsKLQotICAgIC8qKgotICAgICAqIEEgY2hlYXAgYW5kIHR5cGUtc2FmZSBjb25zdGFudCBmb3IgdGhlIFVTLUFTQ0lJIENoYXJzZXQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBDaGFyc2V0IFVTX0FTQ0lJID0gQ2hhcnNldC5mb3JOYW1lKCJVUy1BU0NJSSIpOwotCi0gICAgLyoqCi0gICAgICogQSBjaGVhcCBhbmQgdHlwZS1zYWZlIGNvbnN0YW50IGZvciB0aGUgVVRGLTggQ2hhcnNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENoYXJzZXQgVVRGXzggPSBDaGFyc2V0LmZvck5hbWUoIlVURi04Iik7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbmV3IGJ5dGUgYXJyYXkgY29udGFpbmluZyB0aGUgYnl0ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gY2hhcmFjdGVycywKLSAgICAgKiBlbmNvZGVkIGluIFVTLUFTQ0lJLiBVbnJlcHJlc2VudGFibGUgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgYnkgKGJ5dGUpICc/Jy4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJ5dGVbXSB0b0FzY2lpQnl0ZXMoY2hhcltdIGNoYXJzLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0gICAgICAgIENoYXJCdWZmZXIgY2IgPSBDaGFyQnVmZmVyLmFsbG9jYXRlKGxlbmd0aCk7Ci0gICAgICAgIGNiLnB1dChjaGFycywgb2Zmc2V0LCBsZW5ndGgpOwotICAgICAgICByZXR1cm4gVVNfQVNDSUkuZW5jb2RlKGNiKS5hcnJheSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBuZXcgYnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSBieXRlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBjaGFyYWN0ZXJzLAotICAgICAqIGVuY29kZWQgaW4gSVNPLTg4NTktMS4gVW5yZXByZXNlbnRhYmxlIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIGJ5IChieXRlKSAnPycuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBieXRlW10gdG9Jc29MYXRpbjFCeXRlcyhjaGFyW10gY2hhcnMsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKLSAgICAgICAgQ2hhckJ1ZmZlciBjYiA9IENoYXJCdWZmZXIuYWxsb2NhdGUobGVuZ3RoKTsKLSAgICAgICAgY2IucHV0KGNoYXJzLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBJU09fODg1OV8xLmVuY29kZShjYikuYXJyYXkoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbmV3IGJ5dGUgYXJyYXkgY29udGFpbmluZyB0aGUgYnl0ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gY2hhcmFjdGVycywKLSAgICAgKiBlbmNvZGVkIGluIFVURi04LiBBbGwgY2hhcmFjdGVycyBhcmUgcmVwcmVzZW50YWJsZSBpbiBVVEYtOC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJ5dGVbXSB0b1V0ZjhCeXRlcyhjaGFyW10gY2hhcnMsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKLSAgICAgICAgQ2hhckJ1ZmZlciBjYiA9IENoYXJCdWZmZXIuYWxsb2NhdGUobGVuZ3RoKTsKLSAgICAgICAgY2IucHV0KGNoYXJzLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBVVEZfOC5lbmNvZGUoY2IpLmFycmF5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIG5ldyBieXRlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGJ5dGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGNoYXJhY3RlcnMsCi0gICAgICogZW5jb2RlZCBpbiBVVEYtMTZCRS4gQWxsIGNoYXJhY3RlcnMgYXJlIHJlcHJlc2VudGFibGUgaW4gVVRGLTE2QkUuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBieXRlW10gdG9CaWdFbmRpYW5VdGYxNkJ5dGVzKGNoYXJbXSBjaGFycywgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewotICAgICAgICBieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbbGVuZ3RoICogMl07Ci0gICAgICAgIGludCBlbmQgPSBvZmZzZXQgKyBsZW5ndGg7Ci0gICAgICAgIGludCByZXN1bHRJbmRleCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSBvZmZzZXQ7IGkgPCBlbmQ7ICsraSkgewotICAgICAgICAgICAgY2hhciBjaCA9IGNoYXJzW2ldOwotICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdEluZGV4KytdID0gKGJ5dGUpIChjaCA+PiA4KTsKLSAgICAgICAgICAgIHJlc3VsdFtyZXN1bHRJbmRleCsrXSA9IChieXRlKSBjaDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlY29kZXMgdGhlIGdpdmVuIFVTLUFTQ0lJIGJ5dGVzIGludG8gdGhlIGdpdmVuIGNoYXJbXS4gRXF1aXZhbGVudCB0byBidXQgZmFzdGVyIHRoYW46Ci0gICAgICoKLSAgICAgKiBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgKiAgICAgY2hhciBjaCA9IChjaGFyKSAoZGF0YVtzdGFydCsrXSAmIDB4ZmYpOwotICAgICAqICAgICB2YWx1ZVtpXSA9IChjaCA8PSAweDdmKSA/IGNoIDogUkVQTEFDRU1FTlRfQ0hBUjsKLSAgICAgKiB9Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGFzY2lpQnl0ZXNUb0NoYXJzKGJ5dGVbXSBieXRlcywgaW50IG9mZnNldCwgaW50IGxlbmd0aCwgY2hhcltdIGNoYXJzKSB7Ci0gICAgICAgIGlmIChieXRlcyA9PSBudWxsIHx8IGNoYXJzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBjaGFyIFJFUExBQ0VNRU5UX0NIQVIgPSAoY2hhcikweGZmZDsKLSAgICAgICAgaW50IHN0YXJ0ID0gb2Zmc2V0OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBjaGFyIGNoID0gKGNoYXIpIChieXRlc1tzdGFydCsrXSAmIDB4ZmYpOwotICAgICAgICAgICAgY2hhcnNbaV0gPSAoY2ggPD0gMHg3ZikgPyBjaCA6IFJFUExBQ0VNRU5UX0NIQVI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZWNvZGVzIHRoZSBnaXZlbiBJU08tODg1OS0xIGJ5dGVzIGludG8gdGhlIGdpdmVuIGNoYXJbXS4gRXF1aXZhbGVudCB0byBidXQgZmFzdGVyIHRoYW46Ci0gICAgICoKLSAgICAgKiBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgKiAgICAgdmFsdWVbaV0gPSAoY2hhcikgKGRhdGFbc3RhcnQrK10gJiAweGZmKTsKLSAgICAgKiB9Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGlzb0xhdGluMUJ5dGVzVG9DaGFycyhieXRlW10gYnl0ZXMsIGludCBvZmZzZXQsIGludCBsZW5ndGgsIGNoYXJbXSBjaGFycykgewotICAgICAgICBpZiAoYnl0ZXMgPT0gbnVsbCB8fCBjaGFycyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHN0YXJ0ID0gb2Zmc2V0OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBjaGFyc1tpXSA9IChjaGFyKSAoYnl0ZXNbc3RhcnQrK10gJiAweGZmKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgQ2hhcnNldHMoKSB7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2phdmEvSW50ZWdyYWxUb1N0cmluZy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2phdmEvSW50ZWdyYWxUb1N0cmluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmRkMDBhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL0ludGVncmFsVG9TdHJpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuamF2YTsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBzYW1lIGNsYXNzIGFzIHRoZSBqYXZhLmxhbmcuSW50ZWdyYWxUb1N0cmluZyB3aGljaCB3YXMgYWRkZWQgaW4KLSAqIERhbHZpayBWTS4gVGhpcyBoYWNrLCBwcm92aWRlcyBhIHJlcGxhY2VtZW50IGZvciB0aGF0IGNsYXNzIHdoaWNoIGNhbid0IGJlCi0gKiBsb2FkZWQgaW4gdGhlIHN0YW5kYXJkIEpWTSBzaW5jZSBpdCdzIGluIHRoZSBqYXZhIHBhY2thZ2UgYW5kIHN0YW5kYXJkIEpWTQotICogZG9lc24ndCBoYXZlIGl0LiBTaW5jZSBpdCdzIG5vIGxvbmdlciBpbiBqYXZhLmxhbmcsIGFjY2VzcyB0byBwYWNrYWdlCi0gKiBwcml2YXRlIG1ldGhvZHMgYW5kIGNsYXNzZXMgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIGNsb3NlcyBtYXRjaGluZyBwdWJsaWMKLSAqIGltcGxlbWVudGF0aW9uLgotICogPHAvPgotICogRXh0cmFjdGVkIGZyb20gQVBJIGxldmVsIDE4LCBmaWxlOgotICogcGxhdGZvcm0vbGliY29yZS9sdW5pL3NyYy9tYWluL2phdmEvamF2YS9sYW5nL0ludGVncmFsVG9TdHJpbmcuamF2YQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgSW50ZWdyYWxUb1N0cmluZyB7Ci0gICAgLyoqCi0gICAgICogV2hlbiBhcHBlbmRpbmcgdG8gYW4gQWJzdHJhY3RTdHJpbmdCdWlsZGVyLCB0aGlzIHRocmVhZC1sb2NhbCBjaGFyW10gbGV0cyB1cyBhdm9pZAotICAgICAqIGFsbG9jYXRpb24gb2YgYSB0ZW1wb3JhcnkgYXJyYXkuIChXZSBjYW4ndCB3cml0ZSBzdHJhaWdodCBpbnRvIHRoZSBBYnN0cmFjdFN0cmluZ0J1aWxkZXIKLSAgICAgKiBiZWNhdXNlIGl0J3MgYWxtb3N0IGFzIGV4cGVuc2l2ZSB0byB3b3JrIG91dCB0aGUgZXhhY3QgbGVuZ3RoIG9mIHRoZSByZXN1bHQgYXMgaXQgaXMgdG8KLSAgICAgKiBkbyB0aGUgZm9ybWF0dGluZy4gV2UgY291bGQgdHJ5IGJlaW5nIGNvbnNlcnZhdGl2ZSBhbmQgImRlbGV0ZSItaW5nIHRoZSB1bnVzZWQgc3BhY2UKLSAgICAgKiBhZnRlcndhcmRzLCBidXQgdGhlbiB3ZSdkIG5lZWQgdG8gZHVwbGljYXRlIGNvbnZlcnRJbnQgYW5kIGNvbnZlcnRMb25nIHJhdGhlciB0aGFuIHNoYXJlCi0gICAgICogdGhlIGNvZGUuKQotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRocmVhZExvY2FsPGNoYXJbXT4gQlVGRkVSID0gbmV3IFRocmVhZExvY2FsPGNoYXJbXT4oKSB7Ci0gICAgICAgIEBPdmVycmlkZSBwcm90ZWN0ZWQgY2hhcltdIGluaXRpYWxWYWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgY2hhclsyMF07IC8vIE1heGltdW0gbGVuZ3RoIG9mIGEgYmFzZS0xMCBsb25nLgotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFRoZXNlIHRhYmxlcyBhcmUgdXNlZCB0byBzcGVjaWFsLWNhc2UgdG9TdHJpbmcgY29tcHV0YXRpb24gZm9yCi0gICAgICogc21hbGwgdmFsdWVzLiAgVGhpcyBzZXJ2ZXMgdGhyZWUgcHVycG9zZXM6IGl0IHJlZHVjZXMgbWVtb3J5IHVzYWdlOwotICAgICAqIGl0IGluY3JlYXNlcyBwZXJmb3JtYW5jZSBmb3Igc21hbGwgdmFsdWVzOyBhbmQgaXQgZGVjcmVhc2VzIHRoZQotICAgICAqIG51bWJlciBvZiBjb21wYXJpc29ucyByZXF1aXJlZCB0byBkbyB0aGUgbGVuZ3RoIGNvbXB1dGF0aW9uLgotICAgICAqIEVsZW1lbnRzIG9mIHRoaXMgdGFibGUgYXJlIGxhemlseSBpbml0aWFsaXplZCBvbiBmaXJzdCB1c2UuCi0gICAgICogTm8gbG9ja2luZyBpcyBuZWNlc3NhcnksIGkuZS4sIHdlIHVzZSB0aGUgbm9uLXZvbGF0aWxlLCByYWN5Ci0gICAgICogc2luZ2xlLWNoZWNrIGlkaW9tLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFNNQUxMX05PTk5FR0FUSVZFX1ZBTFVFUyA9IG5ldyBTdHJpbmdbMTAwXTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBTTUFMTF9ORUdBVElWRV9WQUxVRVMgPSBuZXcgU3RyaW5nWzEwMF07Ci0KLSAgICAvKiogVEVOU1tpXSBjb250YWlucyB0aGUgdGVucyBkaWdpdCBvZiB0aGUgbnVtYmVyIGksIDAgPD0gaSA8PSA5OS4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gVEVOUyA9IHsKLSAgICAgICAgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLAotICAgICAgICAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsCi0gICAgICAgICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywKLSAgICAgICAgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLAotICAgICAgICAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsCi0gICAgICAgICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywKLSAgICAgICAgJzYnLCAnNicsICc2JywgJzYnLCAnNicsICc2JywgJzYnLCAnNicsICc2JywgJzYnLAotICAgICAgICAnNycsICc3JywgJzcnLCAnNycsICc3JywgJzcnLCAnNycsICc3JywgJzcnLCAnNycsCi0gICAgICAgICc4JywgJzgnLCAnOCcsICc4JywgJzgnLCAnOCcsICc4JywgJzgnLCAnOCcsICc4JywKLSAgICAgICAgJzknLCAnOScsICc5JywgJzknLCAnOScsICc5JywgJzknLCAnOScsICc5JywgJzknCi0gICAgfTsKLQotICAgIC8qKiBPbmVzIFtpXSBjb250YWlucyB0aGUgdGVucyBkaWdpdCBvZiB0aGUgbnVtYmVyIGksIDAgPD0gaSA8PSA5OS4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gT05FUyA9IHsKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBUYWJsZSBmb3IgTU9EIC8gRElWIDEwIGNvbXB1dGF0aW9uIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEwLTIxCi0gICAgICogb2YgSGFuayBXYXJyZW4ncyAiSGFja2VyJ3MgRGVsaWdodCIgb25saW5lIGFkZGVuZHVtLgotICAgICAqIGh0dHA6Ly93d3cuaGFja2Vyc2RlbGlnaHQub3JnL2RpdmNNb3JlLnBkZgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBNT0RfMTBfVEFCTEUgPSB7Ci0gICAgICAgIDAsIDEsIDIsIDIsIDMsIDMsIDQsIDUsIDUsIDYsIDcsIDcsIDgsIDgsIDksIDAKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogVGhlIGRpZ2l0cyBmb3IgZXZlcnkgc3VwcG9ydGVkIHJhZGl4LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBESUdJVFMgPSB7Ci0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKLSAgICAgICAgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLAotICAgICAgICAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsCi0gICAgICAgICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicKLSAgICB9OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIFVQUEVSX0NBU0VfRElHSVRTID0gewotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCi0gICAgICAgICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnLCAnSScsICdKJywKLSAgICAgICAgJ0snLCAnTCcsICdNJywgJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLAotICAgICAgICAnVScsICdWJywgJ1cnLCAnWCcsICdZJywgJ1onCi0gICAgfTsKLQotICAgIHByaXZhdGUgSW50ZWdyYWxUb1N0cmluZygpIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFcXVpdmFsZW50IHRvIEludGVnZXIudG9TdHJpbmcoaSwgcmFkaXgpLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGludFRvU3RyaW5nKGludCBpLCBpbnQgcmFkaXgpIHsKLSAgICAgICAgaWYgKHJhZGl4IDwgQ2hhcmFjdGVyLk1JTl9SQURJWCB8fCByYWRpeCA+IENoYXJhY3Rlci5NQVhfUkFESVgpIHsKLSAgICAgICAgICAgIHJhZGl4ID0gMTA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJhZGl4ID09IDEwKSB7Ci0gICAgICAgICAgICByZXR1cm4gaW50VG9TdHJpbmcoaSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBJZiBpIGlzIHBvc2l0aXZlLCBuZWdhdGUgaXQuIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIHdoYXQgb25lIG1pZ2h0Ci0gICAgICAgICAqIGV4cGVjdC4gSXQgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIHJhbmdlIG9mIHRoZSBuZWdhdGl2ZSB2YWx1ZXMgaXMKLSAgICAgICAgICogc3RyaWN0bHkgbGFyZ2VyIHRoYW4gdGhhdCBvZiB0aGUgcG9zaXRpdmUgdmFsdWVzOiB0aGVyZSBpcyBubwotICAgICAgICAgKiBwb3NpdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIEludGVnZXIuTUlOX1ZBTFVFLgotICAgICAgICAgKi8KLSAgICAgICAgYm9vbGVhbiBuZWdhdGl2ZSA9IGZhbHNlOwotICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGkgPSAtaTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBidWZMZW4gPSByYWRpeCA8IDggPyAzMyA6IDEyOyAgLy8gTWF4IGNoYXJzIGluIHJlc3VsdCAoY29uc2VydmF0aXZlKQotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbYnVmTGVuXTsKLSAgICAgICAgaW50IGN1cnNvciA9IGJ1ZkxlbjsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpbnQgcSA9IGkgLyByYWRpeDsKLSAgICAgICAgICAgIGJ1ZlstLWN1cnNvcl0gPSBESUdJVFNbcmFkaXggKiBxIC0gaV07Ci0gICAgICAgICAgICBpID0gcTsKLSAgICAgICAgfSB3aGlsZSAoaSAhPSAwKTsKLQotICAgICAgICBpZiAobmVnYXRpdmUpIHsKLSAgICAgICAgICAgIGJ1ZlstLWN1cnNvcl0gPSAnLSc7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhidWYsIGN1cnNvciwgYnVmTGVuIC0gY3Vyc29yKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFcXVpdmFsZW50IHRvIEludGVnZXIudG9TdHJpbmcoaSkuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgaW50VG9TdHJpbmcoaW50IGkpIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRJbnQobnVsbCwgaSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXF1aXZhbGVudCB0byBzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhpKSkuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGFwcGVuZEludChTdHJpbmdCdWlsZGVyIHNiLCBpbnQgaSkgewotICAgICAgICBjb252ZXJ0SW50KHNiLCBpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaSBhbmQgbGVhdmVzIHNiIGFsb25lIGlmIHNiIGlzIG51bGwuCi0gICAgICogUmV0dXJucyBudWxsIGFuZCBhcHBlbmRzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaSB0byBzYiBpZiBzYiBpcyBub24tbnVsbC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29udmVydEludChTdHJpbmdCdWlsZGVyIHNiLCBpbnQgaSkgewotICAgICAgICBib29sZWFuIG5lZ2F0aXZlID0gZmFsc2U7Ci0gICAgICAgIFN0cmluZyBxdWlja1Jlc3VsdCA9IG51bGw7Ci0gICAgICAgIGlmIChpIDwgMCkgewotICAgICAgICAgICAgbmVnYXRpdmUgPSB0cnVlOwotICAgICAgICAgICAgaSA9IC1pOwotICAgICAgICAgICAgaWYgKGkgPCAxMDApIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgLW4gaXMgc3RpbGwgbmVnYXRpdmUsIG4gaXMgSW50ZWdlci5NSU5fVkFMVUUKLSAgICAgICAgICAgICAgICAgICAgcXVpY2tSZXN1bHQgPSAiLTIxNDc0ODM2NDgiOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHF1aWNrUmVzdWx0ID0gU01BTExfTkVHQVRJVkVfVkFMVUVTW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAocXVpY2tSZXN1bHQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgU01BTExfTkVHQVRJVkVfVkFMVUVTW2ldID0gcXVpY2tSZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpIDwgMTAgPyBzdHJpbmdPZignLScsIE9ORVNbaV0pIDogc3RyaW5nT2YoJy0nLCBURU5TW2ldLCBPTkVTW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpIDwgMTAwKSB7Ci0gICAgICAgICAgICAgICAgcXVpY2tSZXN1bHQgPSBTTUFMTF9OT05ORUdBVElWRV9WQUxVRVNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHF1aWNrUmVzdWx0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgU01BTExfTk9OTkVHQVRJVkVfVkFMVUVTW2ldID0gcXVpY2tSZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPCAxMCA/IHN0cmluZ09mKE9ORVNbaV0pIDogc3RyaW5nT2YoVEVOU1tpXSwgT05FU1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChxdWlja1Jlc3VsdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoc2IgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZChxdWlja1Jlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcXVpY2tSZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgYnVmTGVuID0gMTE7IC8vIE1heCBudW1iZXIgb2YgY2hhcnMgaW4gcmVzdWx0Ci0gICAgICAgIGNoYXJbXSBidWYgPSAoc2IgIT0gbnVsbCkgPyBCVUZGRVIuZ2V0KCkgOiBuZXcgY2hhcltidWZMZW5dOwotICAgICAgICBpbnQgY3Vyc29yID0gYnVmTGVuOwotCi0gICAgICAgIC8vIENhbGN1bGF0ZSBkaWdpdHMgdHdvLWF0LWEtdGltZSB0aWxsIHJlbWFpbmluZyBkaWdpdHMgZml0IGluIDE2IGJpdHMKLSAgICAgICAgd2hpbGUgKGkgPj0gKDEgPDwgMTYpKSB7Ci0gICAgICAgICAgICAvLyBDb21wdXRlIHEgPSBuLzEwMCBhbmQgciA9IG4gJSAxMDAgYXMgcGVyICJIYWNrZXIncyBEZWxpZ2h0IiAxMC04Ci0gICAgICAgICAgICBpbnQgcSA9IChpbnQpICgoMHg1MUVCODUxRkwgKiBpKSA+Pj4gMzcpOwotICAgICAgICAgICAgaW50IHIgPSBpIC0gMTAwKnE7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gT05FU1tyXTsKLSAgICAgICAgICAgIGJ1ZlstLWN1cnNvcl0gPSBURU5TW3JdOwotICAgICAgICAgICAgaSA9IHE7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDYWxjdWxhdGUgcmVtYWluaW5nIGRpZ2l0cyBvbmUtYXQtYS10aW1lIGZvciBwZXJmb3JtYW5jZQotICAgICAgICB3aGlsZSAoaSAhPSAwKSB7Ci0gICAgICAgICAgICAvLyBDb21wdXRlIHEgPSBuLzEwIGFuZCByID0gbiAlIDEwIGFzIHBlciAiSGFja2VyJ3MgRGVsaWdodCIgMTAtOAotICAgICAgICAgICAgaW50IHEgPSAoMHhDQ0NEICogaSkgPj4+IDE5OwotICAgICAgICAgICAgaW50IHIgPSBpIC0gMTAqcTsKLSAgICAgICAgICAgIGJ1ZlstLWN1cnNvcl0gPSBESUdJVFNbcl07Ci0gICAgICAgICAgICBpID0gcTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZWdhdGl2ZSkgewotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9ICctJzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzYiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGJ1ZiwgY3Vyc29yLCBidWZMZW4gLSBjdXJzb3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXF1aXZhbGVudCB0byBMb25nLnRvU3RyaW5nKHYsIHJhZGl4KS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBsb25nVG9TdHJpbmcobG9uZyB2LCBpbnQgcmFkaXgpIHsKLSAgICAgICAgaW50IGkgPSAoaW50KSB2OwotICAgICAgICBpZiAoaSA9PSB2KSB7Ci0gICAgICAgICAgICByZXR1cm4gaW50VG9TdHJpbmcoaSwgcmFkaXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJhZGl4IDwgQ2hhcmFjdGVyLk1JTl9SQURJWCB8fCByYWRpeCA+IENoYXJhY3Rlci5NQVhfUkFESVgpIHsKLSAgICAgICAgICAgIHJhZGl4ID0gMTA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJhZGl4ID09IDEwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbG9uZ1RvU3RyaW5nKHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogSWYgdiBpcyBwb3NpdGl2ZSwgbmVnYXRlIGl0LiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiB3aGF0IG9uZSBtaWdodAotICAgICAgICAgKiBleHBlY3QuIEl0IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSByYW5nZSBvZiB0aGUgbmVnYXRpdmUgdmFsdWVzIGlzCi0gICAgICAgICAqIHN0cmljdGx5IGxhcmdlciB0aGFuIHRoYXQgb2YgdGhlIHBvc2l0aXZlIHZhbHVlczogdGhlcmUgaXMgbm8KLSAgICAgICAgICogcG9zaXRpdmUgdmFsdWUgY29ycmVzcG9uZGluZyB0byBJbnRlZ2VyLk1JTl9WQUxVRS4KLSAgICAgICAgICovCi0gICAgICAgIGJvb2xlYW4gbmVnYXRpdmUgPSBmYWxzZTsKLSAgICAgICAgaWYgKHYgPCAwKSB7Ci0gICAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2ID0gLXY7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgYnVmTGVuID0gcmFkaXggPCA4ID8gNjUgOiAyMzsgIC8vIE1heCBjaGFycyBpbiByZXN1bHQgKGNvbnNlcnZhdGl2ZSkKLSAgICAgICAgY2hhcltdIGJ1ZiA9IG5ldyBjaGFyW2J1Zkxlbl07Ci0gICAgICAgIGludCBjdXJzb3IgPSBidWZMZW47Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgbG9uZyBxID0gdiAvIHJhZGl4OwotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9IERJR0lUU1soaW50KSAocmFkaXggKiBxIC0gdildOwotICAgICAgICAgICAgdiA9IHE7Ci0gICAgICAgIH0gd2hpbGUgKHYgIT0gMCk7Ci0KLSAgICAgICAgaWYgKG5lZ2F0aXZlKSB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gJy0nOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXF1aXZhbGVudCB0byBMb25nLnRvU3RyaW5nKGwpLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGxvbmdUb1N0cmluZyhsb25nIGwpIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRMb25nKG51bGwsIGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVxdWl2YWxlbnQgdG8gc2IuYXBwZW5kKExvbmcudG9TdHJpbmcobCkpLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhcHBlbmRMb25nKFN0cmluZ0J1aWxkZXIgc2IsIGxvbmcgbCkgewotICAgICAgICBjb252ZXJ0TG9uZyhzYiwgbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIG4gYW5kIGxlYXZlcyBzYiBhbG9uZSBpZiBzYiBpcyBudWxsLgotICAgICAqIFJldHVybnMgbnVsbCBhbmQgYXBwZW5kcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIG4gdG8gc2IgaWYgc2IgaXMgbm9uLW51bGwuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvbnZlcnRMb25nKFN0cmluZ0J1aWxkZXIgc2IsIGxvbmcgbikgewotICAgICAgICBpbnQgaSA9IChpbnQpIG47Ci0gICAgICAgIGlmIChpID09IG4pIHsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0SW50KHNiLCBpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gbmVnYXRpdmUgPSAobiA8IDApOwotICAgICAgICBpZiAobmVnYXRpdmUpIHsKLSAgICAgICAgICAgIG4gPSAtbjsKLSAgICAgICAgICAgIGlmIChuIDwgMCkgewotICAgICAgICAgICAgICAgIC8vIElmIC1uIGlzIHN0aWxsIG5lZ2F0aXZlLCBuIGlzIExvbmcuTUlOX1ZBTFVFCi0gICAgICAgICAgICAgICAgU3RyaW5nIHF1aWNrUmVzdWx0ID0gIi05MjIzMzcyMDM2ODU0Nzc1ODA4IjsKLSAgICAgICAgICAgICAgICBpZiAoc2IgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQocXVpY2tSZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHF1aWNrUmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGJ1ZkxlbiA9IDIwOyAvLyBNYXhpbXVtIG51bWJlciBvZiBjaGFycyBpbiByZXN1bHQKLSAgICAgICAgY2hhcltdIGJ1ZiA9IChzYiAhPSBudWxsKSA/IEJVRkZFUi5nZXQoKSA6IG5ldyBjaGFyW2J1Zkxlbl07Ci0KLSAgICAgICAgaW50IGxvdyA9IChpbnQpIChuICUgMTAwMDAwMDAwMCk7IC8vIEV4dHJhY3QgbG93LW9yZGVyIDkgZGlnaXRzCi0gICAgICAgIGludCBjdXJzb3IgPSBpbnRJbnRvQ2hhckFycmF5KGJ1ZiwgYnVmTGVuLCBsb3cpOwotCi0gICAgICAgIC8vIFplcm8tcGFkIExvdyBvcmRlciBwYXJ0IHRvIDkgZGlnaXRzCi0gICAgICAgIHdoaWxlIChjdXJzb3IgIT0gKGJ1ZkxlbiAtIDkpKSB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gJzAnOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlIHJlbWFpbmluZyBkaWdpdHMgYXJlIChuIC0gbG93KSAvIDEsMDAwLDAwMCwwMDAuICBUaGlzCi0gICAgICAgICAqICJleGFjdCBkaXZpc2lvbiIgaXMgZG9uZSBhcyBwZXIgdGhlIG9ubGluZSBhZGRlbmR1bSB0byBIYW5rIFdhcnJlbidzCi0gICAgICAgICAqICJIYWNrZXIncyBEZWxpZ2h0IiAxMC0yMCwgaHR0cDovL3d3dy5oYWNrZXJzZGVsaWdodC5vcmcvZGl2Y01vcmUucGRmCi0gICAgICAgICAqLwotICAgICAgICBuID0gKChuIC0gbG93KSA+Pj4gOSkgKiAweDhFNDdDRTQyM0EyRTlDNkRMOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIElmIHRoZSByZW1haW5pbmcgZGlnaXRzIGZpdCBpbiBhbiBpbnQsIGVtaXQgdGhlbSB1c2luZyBhCi0gICAgICAgICAqIHNpbmdsZSBjYWxsIHRvIGludEludG9DaGFyQXJyYXkuIE90aGVyd2lzZSwgc3RyaXAgb2ZmIHRoZQotICAgICAgICAgKiBsb3ctb3JkZXIgZGlnaXQsIHB1dCBpdCBpbiBidWYsIGFuZCB0aGVuIGNhbGwgaW50SW50b0NoYXJBcnJheQotICAgICAgICAgKiBvbiB0aGUgcmVtYWluaW5nIGRpZ2l0cyAod2hpY2ggbm93IGZpdCBpbiBhbiBpbnQpLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKChuICYgKC0xTCA8PCAzMikpID09IDApIHsKLSAgICAgICAgICAgIGN1cnNvciA9IGludEludG9DaGFyQXJyYXkoYnVmLCBjdXJzb3IsIChpbnQpIG4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFNldCBtaWREaWdpdCB0byBuICUgMTAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW50IGxvMzIgPSAoaW50KSBuOwotICAgICAgICAgICAgaW50IGhpMzIgPSAoaW50KSAobiA+Pj4gMzIpOwotCi0gICAgICAgICAgICAvLyBtaWREaWdpdCA9ICgodW5zaWduZWQpIGxvdzMyKSAlIDEwLCBwZXIgIkhhY2tlcidzIERlbGlnaHQiIDEwLTIxCi0gICAgICAgICAgICBpbnQgbWlkRGlnaXQgPSBNT0RfMTBfVEFCTEVbKDB4MTk5OTk5OTkgKiBsbzMyICsgKGxvMzIgPj4+IDEpICsgKGxvMzIgPj4+IDMpKSA+Pj4gMjhdOwotCi0gICAgICAgICAgICAvLyBBZGp1c3QgbWlkRGlnaXQgZm9yIGhpMzIuIChhc3NlcnQgaGkzMiA9PSAxIHx8IGhpMzIgPT0gMikKLSAgICAgICAgICAgIG1pZERpZ2l0IC09IGhpMzIgPDwgMjsgIC8vIDFMIDw8IDMyID09IC00IE1PRCAxMAotICAgICAgICAgICAgaWYgKG1pZERpZ2l0IDwgMCkgewotICAgICAgICAgICAgICAgIG1pZERpZ2l0ICs9IDEwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9IERJR0lUU1ttaWREaWdpdF07Ci0KLSAgICAgICAgICAgIC8vIEV4YWN0IGRpdmlzaW9uIGFzIHBlciBXYXJyZW4gMTAtMjAKLSAgICAgICAgICAgIGludCByZXN0ID0gKChpbnQpICgobiAtIG1pZERpZ2l0KSA+Pj4gMSkpICogMHhDQ0NDQ0NDRDsKLSAgICAgICAgICAgIGN1cnNvciA9IGludEludG9DaGFyQXJyYXkoYnVmLCBjdXJzb3IsIHJlc3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZ2F0aXZlKSB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gJy0nOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzYiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGJ1ZiwgY3Vyc29yLCBidWZMZW4gLSBjdXJzb3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5zZXJ0cyB0aGUgdW5zaWduZWQgZGVjaW1hbCBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IG4gaW50byB0aGUgc3BlY2lmaWVkCi0gICAgICogY2hhcmFjdGVyIGFycmF5IHN0YXJ0aW5nIGF0IHBvc2l0aW9uIGN1cnNvci4gIFJldHVybnMgdGhlIGluZGV4IGFmdGVyCi0gICAgICogdGhlIGxhc3QgY2hhcmFjdGVyIGluc2VydGVkIChpLmUuLCB0aGUgdmFsdWUgdG8gcGFzcyBpbiBhcyBjdXJzb3IgdGhlCi0gICAgICogbmV4dCB0aW1lIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCkuIE5vdGUgdGhhdCBuIGlzIGludGVycHJldGVkIGFzIGEgbGFyZ2UKLSAgICAgKiBwb3NpdGl2ZSBpbnRlZ2VyIChub3QgYSBuZWdhdGl2ZSBpbnRlZ2VyKSBpZiBpdHMgc2lnbiBiaXQgaXMgc2V0LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGludCBpbnRJbnRvQ2hhckFycmF5KGNoYXJbXSBidWYsIGludCBjdXJzb3IsIGludCBuKSB7Ci0gICAgICAgIC8vIENhbGN1bGF0ZSBkaWdpdHMgdHdvLWF0LWEtdGltZSB0aWxsIHJlbWFpbmluZyBkaWdpdHMgZml0IGluIDE2IGJpdHMKLSAgICAgICAgd2hpbGUgKChuICYgMHhmZmZmMDAwMCkgIT0gMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIENvbXB1dGUgcSA9IG4vMTAwIGFuZCByID0gbiAlIDEwMCBhcyBwZXIgIkhhY2tlcidzIERlbGlnaHQiIDEwLTguCi0gICAgICAgICAgICAgKiBUaGlzIGNvbXB1dGF0aW9uIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAgICAgKiBjb21wdXRhdGlvbiBpbiBpbnRUb1N0cmluZzogdGhlIHNoaWZ0cyBiZWZvcmUgYW5kIGFmdGVyCi0gICAgICAgICAgICAgKiBtdWx0aXBseSBjYW4ndCBiZSBjb21iaW5lZCwgYXMgdGhhdCB3b3VsZCB5aWVsZCB0aGUgd3JvbmcgcmVzdWx0Ci0gICAgICAgICAgICAgKiBpZiBuJ3Mgc2lnbiBiaXQgd2VyZSBzZXQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGludCBxID0gKGludCkgKCgweDUxRUI4NTFGTCAqIChuID4+PiAyKSkgPj4+IDM1KTsKLSAgICAgICAgICAgIGludCByID0gbiAtIDEwMCpxOwotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9IE9ORVNbcl07Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gVEVOU1tyXTsKLSAgICAgICAgICAgIG4gPSBxOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2FsY3VsYXRlIHJlbWFpbmluZyBkaWdpdHMgb25lLWF0LWEtdGltZSBmb3IgcGVyZm9ybWFuY2UKLSAgICAgICAgd2hpbGUgKG4gIT0gMCkgewotICAgICAgICAgICAgLy8gQ29tcHV0ZSBxID0gbiAvIDEwIGFuZCByID0gbiAlIDEwIGFzIHBlciAiSGFja2VyJ3MgRGVsaWdodCIgMTAtOAotICAgICAgICAgICAgaW50IHEgPSAoMHhDQ0NEICogbikgPj4+IDE5OwotICAgICAgICAgICAgaW50IHIgPSBuIC0gMTAqcTsKLSAgICAgICAgICAgIGJ1ZlstLWN1cnNvcl0gPSBESUdJVFNbcl07Ci0gICAgICAgICAgICBuID0gcTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGludFRvQmluYXJ5U3RyaW5nKGludCBpKSB7Ci0gICAgICAgIGludCBidWZMZW4gPSAzMjsgIC8vIE1heCBudW1iZXIgb2YgYmluYXJ5IGRpZ2l0cyBpbiBhbiBpbnQKLSAgICAgICAgY2hhcltdIGJ1ZiA9IG5ldyBjaGFyW2J1Zkxlbl07Ci0gICAgICAgIGludCBjdXJzb3IgPSBidWZMZW47Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9IERJR0lUU1tpICYgMV07Ci0gICAgICAgIH0gIHdoaWxlICgoaSA+Pj49IDEpICE9IDApOwotCi0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGJ1ZiwgY3Vyc29yLCBidWZMZW4gLSBjdXJzb3IpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGxvbmdUb0JpbmFyeVN0cmluZyhsb25nIHYpIHsKLSAgICAgICAgaW50IGkgPSAoaW50KSB2OwotICAgICAgICBpZiAodiA+PSAwICYmIGkgPT0gdikgewotICAgICAgICAgICAgcmV0dXJuIGludFRvQmluYXJ5U3RyaW5nKGkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGJ1ZkxlbiA9IDY0OyAgLy8gTWF4IG51bWJlciBvZiBiaW5hcnkgZGlnaXRzIGluIGEgbG9uZwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbYnVmTGVuXTsKLSAgICAgICAgaW50IGN1cnNvciA9IGJ1ZkxlbjsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gRElHSVRTWygoaW50KSB2KSAmIDFdOwotICAgICAgICB9ICB3aGlsZSAoKHYgPj4+PSAxKSAhPSAwKTsKLQotICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhidWYsIGN1cnNvciwgYnVmTGVuIC0gY3Vyc29yKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZ0J1aWxkZXIgYXBwZW5kQnl0ZUFzSGV4KFN0cmluZ0J1aWxkZXIgc2IsIGJ5dGUgYiwgYm9vbGVhbiB1cHBlckNhc2UpIHsKLSAgICAgICAgY2hhcltdIGRpZ2l0cyA9IHVwcGVyQ2FzZSA/IFVQUEVSX0NBU0VfRElHSVRTIDogRElHSVRTOwotICAgICAgICBzYi5hcHBlbmQoZGlnaXRzWyhiID4+IDQpICYgMHhmXSk7Ci0gICAgICAgIHNiLmFwcGVuZChkaWdpdHNbYiAmIDB4Zl0pOwotICAgICAgICByZXR1cm4gc2I7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnl0ZVRvSGV4U3RyaW5nKGJ5dGUgYiwgYm9vbGVhbiB1cHBlckNhc2UpIHsKLSAgICAgICAgY2hhcltdIGRpZ2l0cyA9IHVwcGVyQ2FzZSA/IFVQUEVSX0NBU0VfRElHSVRTIDogRElHSVRTOwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbMl07IC8vIFdlIGFsd2F5cyB3YW50IHR3byBkaWdpdHMuCi0gICAgICAgIGJ1ZlswXSA9IGRpZ2l0c1soYiA+PiA0KSAmIDB4Zl07Ci0gICAgICAgIGJ1ZlsxXSA9IGRpZ2l0c1tiICYgMHhmXTsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmLCAwLCAyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBieXRlc1RvSGV4U3RyaW5nKGJ5dGVbXSBieXRlcywgYm9vbGVhbiB1cHBlckNhc2UpIHsKLSAgICAgICAgY2hhcltdIGRpZ2l0cyA9IHVwcGVyQ2FzZSA/IFVQUEVSX0NBU0VfRElHSVRTIDogRElHSVRTOwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbYnl0ZXMubGVuZ3RoICogMl07Ci0gICAgICAgIGludCBjID0gMDsKLSAgICAgICAgZm9yIChieXRlIGIgOiBieXRlcykgewotICAgICAgICAgICAgYnVmW2MrK10gPSBkaWdpdHNbKGIgPj4gNCkgJiAweGZdOwotICAgICAgICAgICAgYnVmW2MrK10gPSBkaWdpdHNbYiAmIDB4Zl07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBpbnRUb0hleFN0cmluZyhpbnQgaSwgYm9vbGVhbiB1cHBlckNhc2UsIGludCBtaW5XaWR0aCkgewotICAgICAgICBpbnQgYnVmTGVuID0gODsgIC8vIE1heCBudW1iZXIgb2YgaGV4IGRpZ2l0cyBpbiBhbiBpbnQKLSAgICAgICAgY2hhcltdIGJ1ZiA9IG5ldyBjaGFyW2J1Zkxlbl07Ci0gICAgICAgIGludCBjdXJzb3IgPSBidWZMZW47Ci0KLSAgICAgICAgY2hhcltdIGRpZ2l0cyA9IHVwcGVyQ2FzZSA/IFVQUEVSX0NBU0VfRElHSVRTIDogRElHSVRTOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gZGlnaXRzW2kgJiAweGZdOwotICAgICAgICB9IHdoaWxlICgoaSA+Pj49IDQpICE9IDAgfHwgKGJ1ZkxlbiAtIGN1cnNvciA8IG1pbldpZHRoKSk7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgbG9uZ1RvSGV4U3RyaW5nKGxvbmcgdikgewotICAgICAgICBpbnQgaSA9IChpbnQpIHY7Ci0gICAgICAgIGlmICh2ID49IDAgJiYgaSA9PSB2KSB7Ci0gICAgICAgICAgICByZXR1cm4gaW50VG9IZXhTdHJpbmcoaSwgZmFsc2UsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGJ1ZkxlbiA9IDE2OyAgLy8gTWF4IG51bWJlciBvZiBoZXggZGlnaXRzIGluIGEgbG9uZwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbYnVmTGVuXTsKLSAgICAgICAgaW50IGN1cnNvciA9IGJ1ZkxlbjsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gRElHSVRTWygoaW50KSB2KSAmIDB4Rl07Ci0gICAgICAgIH0gd2hpbGUgKCh2ID4+Pj0gNCkgIT0gMCk7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgaW50VG9PY3RhbFN0cmluZyhpbnQgaSkgewotICAgICAgICBpbnQgYnVmTGVuID0gMTE7ICAvLyBNYXggbnVtYmVyIG9mIG9jdGFsIGRpZ2l0cyBpbiBhbiBpbnQKLSAgICAgICAgY2hhcltdIGJ1ZiA9IG5ldyBjaGFyW2J1Zkxlbl07Ci0gICAgICAgIGludCBjdXJzb3IgPSBidWZMZW47Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9IERJR0lUU1tpICYgN107Ci0gICAgICAgIH0gd2hpbGUgKChpID4+Pj0gMykgIT0gMCk7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgbG9uZ1RvT2N0YWxTdHJpbmcobG9uZyB2KSB7Ci0gICAgICAgIGludCBpID0gKGludCkgdjsKLSAgICAgICAgaWYgKHYgPj0gMCAmJiBpID09IHYpIHsKLSAgICAgICAgICAgIHJldHVybiBpbnRUb09jdGFsU3RyaW5nKGkpOwotICAgICAgICB9Ci0gICAgICAgIGludCBidWZMZW4gPSAyMjsgIC8vIE1heCBudW1iZXIgb2Ygb2N0YWwgZGlnaXRzIGluIGEgbG9uZwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbYnVmTGVuXTsKLSAgICAgICAgaW50IGN1cnNvciA9IGJ1ZkxlbjsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gRElHSVRTWygoaW50KSB2KSAmIDddOwotICAgICAgICB9IHdoaWxlICgodiA+Pj49IDMpICE9IDApOwotCi0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGJ1ZiwgY3Vyc29yLCBidWZMZW4gLSBjdXJzb3IpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzdHJpbmdPZihjaGFyLi4uIGFyZ3MpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYXJncywgMCwgYXJncy5sZW5ndGgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL09iamVjdHMuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL09iamVjdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxZWY3Mi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvamF2YS9PYmplY3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotCi0vKioKLSAqIERlZmluZXMgdGhlIHNhbWUgY2xhc3MgYXMgdGhlIGphdmEudXRpbC5PYmplY3RzIHdoaWNoIGlzIGFkZGVkIGluIEphdmEgNy4KLSAqIFRoaXMgaGFjayBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4gdGhlIEFuZHJvaWQgY29kZSB3aGljaCB1c2VzIEphdmEgNyBmZWF0dXJlcwotICogKEFQSSAxOCBhbmQgYmV5b25kKSB0byBydW4gb24gSmF2YSA2LgotICogPHAvPgotICogRXh0cmFjdGVkIGZyb20gQVBJIGxldmVsIDE5LCBmaWxlOgotICogcGxhdGZvcm0vbGliY29yZS9sdW5pL3NyYy9tYWluL2phdmEvamF2YS91dGlsL09iamVjdHMuamF2YQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgT2JqZWN0cyB7Ci0gIHByaXZhdGUgT2JqZWN0cygpIHt9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgMCBpZiB7QGNvZGUgYSA9PSBifSwgb3Ige0Bjb2RlIGMuY29tcGFyZShhLCBiKX0gb3RoZXJ3aXNlLgotICAgKiBUaGF0IGlzLCB0aGlzIG1ha2VzIHtAY29kZSBjfSBudWxsLXNhZmUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIDxUPiBpbnQgY29tcGFyZShUIGEsIFQgYiwgQ29tcGFyYXRvcjw/IHN1cGVyIFQ+IGMpIHsKLSAgICBpZiAoYSA9PSBiKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGMuY29tcGFyZShhLCBiKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgYm90aCBhcmd1bWVudHMgYXJlIG51bGwsCi0gICAqIHRoZSByZXN1bHQgb2Yge0BsaW5rIEFycmF5cyNlcXVhbHN9IGlmIGJvdGggYXJndW1lbnRzIGFyZSBwcmltaXRpdmUgYXJyYXlzLAotICAgKiB0aGUgcmVzdWx0IG9mIHtAbGluayBBcnJheXMjZGVlcEVxdWFsc30gaWYgYm90aCBhcmd1bWVudHMgYXJlIGFycmF5cyBvZiByZWZlcmVuY2UgdHlwZXMsCi0gICAqIGFuZCB0aGUgcmVzdWx0IG9mIHtAbGluayAjZXF1YWxzfSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVlcEVxdWFscyhPYmplY3QgYSwgT2JqZWN0IGIpIHsKLSAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgewotICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBPYmplY3RbXSAmJiBiIGluc3RhbmNlb2YgT2JqZWN0W10pIHsKLSAgICAgIHJldHVybiBBcnJheXMuZGVlcEVxdWFscygoT2JqZWN0W10pIGEsIChPYmplY3RbXSkgYik7Ci0gICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgYm9vbGVhbltdICYmIGIgaW5zdGFuY2VvZiBib29sZWFuW10pIHsKLSAgICAgIHJldHVybiBBcnJheXMuZXF1YWxzKChib29sZWFuW10pIGEsIChib29sZWFuW10pIGIpOwotICAgIH0gZWxzZSBpZiAoYSBpbnN0YW5jZW9mIGJ5dGVbXSAmJiBiIGluc3RhbmNlb2YgYnl0ZVtdKSB7Ci0gICAgICByZXR1cm4gQXJyYXlzLmVxdWFscygoYnl0ZVtdKSBhLCAoYnl0ZVtdKSBiKTsKLSAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBjaGFyW10gJiYgYiBpbnN0YW5jZW9mIGNoYXJbXSkgewotICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoKGNoYXJbXSkgYSwgKGNoYXJbXSkgYik7Ci0gICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgZG91YmxlW10gJiYgYiBpbnN0YW5jZW9mIGRvdWJsZVtdKSB7Ci0gICAgICByZXR1cm4gQXJyYXlzLmVxdWFscygoZG91YmxlW10pIGEsIChkb3VibGVbXSkgYik7Ci0gICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgZmxvYXRbXSAmJiBiIGluc3RhbmNlb2YgZmxvYXRbXSkgewotICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoKGZsb2F0W10pIGEsIChmbG9hdFtdKSBiKTsKLSAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBpbnRbXSAmJiBiIGluc3RhbmNlb2YgaW50W10pIHsKLSAgICAgIHJldHVybiBBcnJheXMuZXF1YWxzKChpbnRbXSkgYSwgKGludFtdKSBiKTsKLSAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBsb25nW10gJiYgYiBpbnN0YW5jZW9mIGxvbmdbXSkgewotICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoKGxvbmdbXSkgYSwgKGxvbmdbXSkgYik7Ci0gICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2Ygc2hvcnRbXSAmJiBiIGluc3RhbmNlb2Ygc2hvcnRbXSkgewotICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoKHNob3J0W10pIGEsIChzaG9ydFtdKSBiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGEuZXF1YWxzKGIpOwotICB9Ci0KLSAgLyoqCi0gICAqIE51bGwtc2FmZSBlcXVpdmFsZW50IG9mIHtAY29kZSBhLmVxdWFscyhiKX0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBhLCBPYmplY3QgYikgewotICAgIHJldHVybiAoYSA9PSBudWxsKSA/IChiID09IG51bGwpIDogYS5lcXVhbHMoYik7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3Ige0BsaW5rIEFycmF5cyNoYXNoQ29kZX0sIGFkZGluZyB2YXJhcmdzLgotICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUgYSBoYXNoIGNvZGUgZm9yIGFuIG9iamVjdCdzIGZpZWxkcyBhcyBmb2xsb3dzOgotICAgKiB7QGNvZGUgT2JqZWN0cy5oYXNoKGEsIGIsIGMpfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGhhc2goT2JqZWN0Li4uIHZhbHVlcykgewotICAgIHJldHVybiBBcnJheXMuaGFzaENvZGUodmFsdWVzKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIDAgZm9yIG51bGwgb3Ige0Bjb2RlIG8uaGFzaENvZGUoKX0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBoYXNoQ29kZShPYmplY3QgbykgewotICAgIHJldHVybiAobyA9PSBudWxsKSA/IDAgOiBvLmhhc2hDb2RlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB7QGNvZGUgb30gaWYgbm9uLW51bGwsIG9yIHRocm93cyB7QGNvZGUgTnVsbFBvaW50ZXJFeGNlcHRpb259LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyA8VD4gVCByZXF1aXJlTm9uTnVsbChUIG8pIHsKLSAgICBpZiAobyA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgcmV0dXJuIG87Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB7QGNvZGUgb30gaWYgbm9uLW51bGwsIG9yIHRocm93cyB7QGNvZGUgTnVsbFBvaW50ZXJFeGNlcHRpb259Ci0gICAqIHdpdGggdGhlIGdpdmVuIGRldGFpbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyA8VD4gVCByZXF1aXJlTm9uTnVsbChUIG8sIFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgaWYgKG8gPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKG1lc3NhZ2UpOwotICAgIH0KLSAgICByZXR1cm4gbzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zICJudWxsIiBmb3IgbnVsbCBvciB7QGNvZGUgby50b1N0cmluZygpfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKE9iamVjdCBvKSB7Ci0gICAgcmV0dXJuIChvID09IG51bGwpID8gIm51bGwiIDogby50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMge0Bjb2RlIG51bGxTdHJpbmd9IGZvciBudWxsIG9yIHtAY29kZSBvLnRvU3RyaW5nKCl9LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoT2JqZWN0IG8sIFN0cmluZyBudWxsU3RyaW5nKSB7Ci0gICAgcmV0dXJuIChvID09IG51bGwpID8gbnVsbFN0cmluZyA6IG8udG9TdHJpbmcoKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL1Vuc2FmZUJ5dGVTZXF1ZW5jZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2phdmEvVW5zYWZlQnl0ZVNlcXVlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMDkwODAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2phdmEvVW5zYWZlQnl0ZVNlcXVlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuamF2YTsKLQotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBzYW1lIGNsYXNzIGFzIHRoZSBqYXZhLmxhbmcuVW5zYWZlQnl0ZVNlcXVlbmNlIHdoaWNoIHdhcyBhZGRlZCBpbgotICogRGFsdmlrIFZNLiBUaGlzIGhhY2ssIHByb3ZpZGVzIGEgcmVwbGFjZW1lbnQgZm9yIHRoYXQgY2xhc3Mgd2hpY2ggY2FuJ3QgYmUKLSAqIGxvYWRlZCBpbiB0aGUgc3RhbmRhcmQgSlZNIHNpbmNlIGl0J3MgaW4gdGhlIGphdmEgcGFja2FnZSBhbmQgc3RhbmRhcmQgSlZNCi0gKiBkb2Vzbid0IGhhdmUgaXQuCi0gKiA8cC8+Ci0gKiBFeHRyYWN0ZWQgZnJvbSBBUEkgbGV2ZWwgMTgsIGZpbGU6Ci0gKiBwbGF0Zm9ybS9saWJjb3JlL2x1bmkvc3JjL21haW4vamF2YS9qYXZhL2xhbmcvVW5zYWZlQnl0ZVNlcXVlbmNlLmphdmEKLSAqLwotcHVibGljIGNsYXNzIFVuc2FmZUJ5dGVTZXF1ZW5jZSB7Ci0gICAgcHJpdmF0ZSBieXRlW10gYnl0ZXM7Ci0gICAgcHJpdmF0ZSBpbnQgY291bnQ7Ci0KLSAgICBwdWJsaWMgVW5zYWZlQnl0ZVNlcXVlbmNlKGludCBpbml0aWFsQ2FwYWNpdHkpIHsKLSAgICAgICAgdGhpcy5ieXRlcyA9IG5ldyBieXRlW2luaXRpYWxDYXBhY2l0eV07Ci0gICAgfQotCi0gICAgcHVibGljIGludCBzaXplKCkgewotICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIHdyaXRlIHBvaW50ZXIgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZSwKLSAgICAgKiBidXQgd2l0aG91dCByZXNpemluZyBvciByZWFsbG9jYXRpbmcgdGhlIGJ1ZmZlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZXdpbmQoKSB7Ci0gICAgICAgIGNvdW50ID0gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB3cml0ZShieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0gICAgICAgIGlmIChjb3VudCArIGxlbmd0aCA+PSBieXRlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGJ5dGVbXSBuZXdCeXRlcyA9IG5ldyBieXRlWyhjb3VudCArIGxlbmd0aCkgKiAyXTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnl0ZXMsIDAsIG5ld0J5dGVzLCAwLCBjb3VudCk7Ci0gICAgICAgICAgICBieXRlcyA9IG5ld0J5dGVzOwotICAgICAgICB9Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnVmZmVyLCBvZmZzZXQsIGJ5dGVzLCBjb3VudCwgbGVuZ3RoKTsKLSAgICAgICAgY291bnQgKz0gbGVuZ3RoOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdyaXRlKGludCBiKSB7Ci0gICAgICAgIGlmIChjb3VudCA9PSBieXRlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGJ5dGVbXSBuZXdCeXRlcyA9IG5ldyBieXRlW2NvdW50ICogMl07Ci0gICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ5dGVzLCAwLCBuZXdCeXRlcywgMCwgY291bnQpOwotICAgICAgICAgICAgYnl0ZXMgPSBuZXdCeXRlczsKLSAgICAgICAgfQotICAgICAgICBieXRlc1tjb3VudCsrXSA9IChieXRlKSBiOwotICAgIH0KLQotICAgIHB1YmxpYyBieXRlW10gdG9CeXRlQXJyYXkoKSB7Ci0gICAgICAgIGlmIChjb3VudCA9PSBieXRlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBieXRlczsKLSAgICAgICAgfQotICAgICAgICBieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbY291bnRdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ5dGVzLCAwLCByZXN1bHQsIDAsIGNvdW50KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKENoYXJzZXQgY3MpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnl0ZXMsIDAsIGNvdW50LCBjcyk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUFuYWx5emVyVGVzdC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUFuYWx5emVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDVmYzlkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21BbmFseXplclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRBcnJheUVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuQXNtQW5hbHl6ZXIuRGVwZW5kZW5jeVZpc2l0b3I7Ci0KLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5DbGFzc1JlYWRlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotCi0vKioKLSAqIFVuaXQgdGVzdHMgZm9yIHNvbWUgbWV0aG9kcyBvZiB7QGxpbmsgQXNtQW5hbHl6ZXJ9LgotICovCi1wdWJsaWMgY2xhc3MgQXNtQW5hbHl6ZXJUZXN0IHsKLQotICAgIHByaXZhdGUgTW9ja0xvZyBtTG9nOwotICAgIHByaXZhdGUgQXJyYXlMaXN0PFN0cmluZz4gbU9zSmFyUGF0aDsKLSAgICBwcml2YXRlIEFzbUFuYWx5emVyIG1BYTsKLQotICAgIEBCZWZvcmUKLSAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBtTG9nID0gbmV3IE1vY2tMb2coKTsKLSAgICAgICAgVVJMIHVybCA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlKCJkYXRhL21vY2tfYW5kcm9pZC5qYXIiKTsKLQotICAgICAgICBtT3NKYXJQYXRoID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIG1Pc0phclBhdGguYWRkKHVybC5nZXRGaWxlKCkpOwotCi0gICAgICAgIFNldDxTdHJpbmc+IGV4Y2x1ZGVDbGFzc2VzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigxKTsKLSAgICAgICAgZXhjbHVkZUNsYXNzZXMuYWRkKCJqYXZhLmxhbmcuSmF2YUNsYXNzIik7Ci0gICAgICAgIG1BYSA9IG5ldyBBc21BbmFseXplcihtTG9nLCBtT3NKYXJQYXRoLCBudWxsIC8qIGdlbiAqLywKLSAgICAgICAgICAgICAgICBudWxsIC8qIGRlcml2ZUZyb20gKi8sIG51bGwgLyogaW5jbHVkZUdsb2JzICovLCBleGNsdWRlQ2xhc3Nlcyk7Ci0gICAgfQotCi0gICAgQEFmdGVyCi0gICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RQYXJzZVppcCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBtYXAgPSBtQWEucGFyc2VaaXAobU9zSmFyUGF0aCk7Ci0KLSAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAiamF2YS5sYW5nLkphdmFDbGFzcyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC5kdW1teS5Jbm5lclRlc3QiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQuZHVtbXkuSW5uZXJUZXN0JERlcml2aW5nQ2xhc3MiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQuZHVtbXkuSW5uZXJUZXN0JE15R2VuZXJpY3MxIiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLmR1bW15LklubmVyVGVzdCRNeUludEVudW0iLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQuZHVtbXkuSW5uZXJUZXN0JE15U3RhdGljSW5uZXJDbGFzcyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC5kdW1teS5Jbm5lclRlc3QkTm90U3RhdGljSW5uZXIxIiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLmR1bW15LklubmVyVGVzdCROb3RTdGF0aWNJbm5lcjIiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3IiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwIiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwJExheW91dFBhcmFtcyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cCRNYXJnaW5MYXlvdXRQYXJhbXMiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dCIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0JExheW91dFBhcmFtcyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC53aWRnZXQuVGFibGVMYXlvdXQiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQud2lkZ2V0LlRhYmxlTGF5b3V0JExheW91dFBhcmFtcyIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBtYXAua2V5U2V0KCkudG9BcnJheSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kQ2xhc3MoKSB0aHJvd3MgSU9FeGNlcHRpb24sIExvZ0Fib3J0RXhjZXB0aW9uIHsKLSAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMgPSBtQWEucGFyc2VaaXAobU9zSmFyUGF0aCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZm91bmQgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotCi0gICAgICAgIENsYXNzUmVhZGVyIGNyID0gbUFhLmZpbmRDbGFzcygibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwJExheW91dFBhcmFtcyIsCi0gICAgICAgICAgICAgICAgemlwQ2xhc3NlcywgZm91bmQpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoY3IpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1vY2tfYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXMiLCBjci5nZXRDbGFzc05hbWUoKSk7Ci0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7ICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAkTGF5b3V0UGFyYW1zIiB9LAotICAgICAgICAgICAgICAgIGZvdW5kLmtleVNldCgpLnRvQXJyYXkoKSk7Ci0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBDbGFzc1JlYWRlcltdIHsgY3IgfSwgZm91bmQudmFsdWVzKCkudG9BcnJheSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kR2xvYnMoKSB0aHJvd3MgSU9FeGNlcHRpb24sIExvZ0Fib3J0RXhjZXB0aW9uIHsKLSAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMgPSBtQWEucGFyc2VaaXAobU9zSmFyUGF0aCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZm91bmQgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotCi0gICAgICAgIC8vIHRoaXMgbWF0Y2hlcyBjbGFzc2VzLCBhIHBhY2thZ2UgbWF0Y2ggcmV0dXJucyBub3RoaW5nCi0gICAgICAgIGZvdW5kLmNsZWFyKCk7Ci0gICAgICAgIG1BYS5maW5kR2xvYnMoIm1vY2tfYW5kcm9pZC52aWV3IiwgemlwQ2xhc3NlcywgZm91bmQpOwotCi0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7IH0sCi0gICAgICAgICAgICBmb3VuZC5rZXlTZXQoKS50b0FycmF5KCkpOwotCi0gICAgICAgIC8vIGEgY29tcGxleCBnbG9iIHNlYXJjaC4gKiBpcyBhIHNlYXJjaCBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBuYW1lcywgbm90IGRvdHMKLSAgICAgICAgbUFhLmZpbmRHbG9icygibW9ja19hbmRyb2lkLiouKkdyb3VwJCpMYXlvdXQqIiwgemlwQ2xhc3NlcywgZm91bmQpOwotCi0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cCRMYXlvdXRQYXJhbXMiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAkTWFyZ2luTGF5b3V0UGFyYW1zIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGZvdW5kLmtleVNldCgpLnRvQXJyYXkoKSk7Ci0KLSAgICAgICAgLy8gYSBjb21wbGV4IGdsb2Igc2VhcmNoLiAqKiBpcyBhIHNlYXJjaCBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBuYW1lcyBpbmNsdWRpbmcgZG90cwotICAgICAgICBtQWEuZmluZEdsb2JzKCJtb2NrX2FuZHJvaWQuKipHcm91cCoiLCB6aXBDbGFzc2VzLCBmb3VuZCk7Ci0KLSAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwIiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwJExheW91dFBhcmFtcyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cCRNYXJnaW5MYXlvdXRQYXJhbXMiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZm91bmQua2V5U2V0KCkudG9BcnJheSgpKTsKLQotICAgICAgICAvLyBtYXRjaGVzIGEgc2luZ2xlIGNsYXNzCi0gICAgICAgIGZvdW5kLmNsZWFyKCk7Ci0gICAgICAgIG1BYS5maW5kR2xvYnMoIm1vY2tfYW5kcm9pZC52aWV3LlZpZXciLCB6aXBDbGFzc2VzLCBmb3VuZCk7Ci0KLSAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlldyIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBmb3VuZC5rZXlTZXQoKS50b0FycmF5KCkpOwotCi0gICAgICAgIC8vIG1hdGNoZXMgZXZlcnl0aW5nIGluc2lkZSB0aGUgZ2l2ZW4gcGFja2FnZSBidXQgbm90IHN1Yi1wYWNrYWdlcwotICAgICAgICBmb3VuZC5jbGVhcigpOwotICAgICAgICBtQWEuZmluZEdsb2JzKCJtb2NrX2FuZHJvaWQudmlldy4qIiwgemlwQ2xhc3NlcywgZm91bmQpOwotCi0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXciLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAkTGF5b3V0UGFyYW1zIiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwJE1hcmdpbkxheW91dFBhcmFtcyIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBmb3VuZC5rZXlTZXQoKS50b0FycmF5KCkpOwotCi0gICAgICAgIGZvciAoU3RyaW5nIGtleSA6IGZvdW5kLmtleVNldCgpKSB7Ci0gICAgICAgICAgICBDbGFzc1JlYWRlciB2YWx1ZSA9IGZvdW5kLmdldChrZXkpOwotICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiTm8gdmFsdWUgZm9yICIgKyBrZXksIHZhbHVlKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhrZXksIEFzbUFuYWx5emVyLmNsYXNzUmVhZGVyVG9DbGFzc05hbWUodmFsdWUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEZpbmRDbGFzc2VzRGVyaXZpbmdGcm9tKCkgdGhyb3dzIExvZ0Fib3J0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzID0gbUFhLnBhcnNlWmlwKG1Pc0phclBhdGgpOwotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGZvdW5kID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLQotICAgICAgICBtQWEuZmluZENsYXNzZXNEZXJpdmluZ0Zyb20oIm1vY2tfYW5kcm9pZC52aWV3LlZpZXciLCB6aXBDbGFzc2VzLCBmb3VuZCk7Ci0KLSAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlldyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cCIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0IiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLndpZGdldC5UYWJsZUxheW91dCIsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZm91bmQua2V5U2V0KCkudG9BcnJheSgpKTsKLQotICAgICAgICBmb3IgKFN0cmluZyBrZXkgOiBmb3VuZC5rZXlTZXQoKSkgewotICAgICAgICAgICAgQ2xhc3NSZWFkZXIgdmFsdWUgPSBmb3VuZC5nZXQoa2V5KTsKLSAgICAgICAgICAgIGFzc2VydE5vdE51bGwoIk5vIHZhbHVlIGZvciAiICsga2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoa2V5LCBBc21BbmFseXplci5jbGFzc1JlYWRlclRvQ2xhc3NOYW1lKHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3REZXBlbmRlbmN5VmlzaXRvcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgTG9nQWJvcnRFeGNlcHRpb24gewotICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gemlwQ2xhc3NlcyA9IG1BYS5wYXJzZVppcChtT3NKYXJQYXRoKTsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBrZWVwID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBuZXdfa2VlcCA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gaW5fZGVwcyA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gb3V0X2RlcHMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotCi0gICAgICAgIENsYXNzUmVhZGVyIGNyID0gbUFhLmZpbmRDbGFzcygibW9ja19hbmRyb2lkLndpZGdldC5UYWJsZUxheW91dCIsIHppcENsYXNzZXMsIGtlZXApOwotICAgICAgICBEZXBlbmRlbmN5VmlzaXRvciB2aXNpdG9yID0gbUFhLmdldFZpc2l0b3IoemlwQ2xhc3Nlcywga2VlcCwgbmV3X2tlZXAsIGluX2RlcHMsIG91dF9kZXBzKTsKLQotICAgICAgICAvLyBnZXQgZmlyc3QgbGV2ZWwgZGVwZW5kZW5jaWVzCi0gICAgICAgIGNyLmFjY2VwdCh2aXNpdG9yLCAwIC8qIGZsYWdzICovKTsKLQotICAgICAgICBhc3NlcnRBcnJheUVxdWFscyhuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQud2lkZ2V0LlRhYmxlTGF5b3V0JExheW91dFBhcmFtcyIsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgb3V0X2RlcHMua2V5U2V0KCkudG9BcnJheSgpKTsKLQotICAgICAgICBpbl9kZXBzLnB1dEFsbChvdXRfZGVwcyk7Ci0gICAgICAgIG91dF9kZXBzLmNsZWFyKCk7Ci0KLSAgICAgICAgLy8gZ2V0IHNlY29uZCBsZXZlbCBkZXBlbmRlbmNpZXMKLSAgICAgICAgZm9yIChDbGFzc1JlYWRlciBjcjIgOiBpbl9kZXBzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBjcjIuYWNjZXB0KHZpc2l0b3IsIDAgLyogZmxhZ3MgKi8pOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlldyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cCRMYXlvdXRQYXJhbXMiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAkTWFyZ2luTGF5b3V0UGFyYW1zIiwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBvdXRfZGVwcy5rZXlTZXQoKS50b0FycmF5KCkpOwotCi0gICAgICAgIGluX2RlcHMucHV0QWxsKG91dF9kZXBzKTsKLSAgICAgICAgb3V0X2RlcHMuY2xlYXIoKTsKLQotICAgICAgICAvLyBnZXQgdGhpcmQgbGV2ZWwgZGVwZW5kZW5jaWVzICh0aGVyZSBhcmUgbm9uZSkKLSAgICAgICAgZm9yIChDbGFzc1JlYWRlciBjcjIgOiBpbl9kZXBzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBjcjIuYWNjZXB0KHZpc2l0b3IsIDAgLyogZmxhZ3MgKi8pOwotICAgICAgICB9Ci0gICAgICAgIGtlZXAucHV0QWxsKG5ld19rZWVwKTsKLQotICAgICAgICBhc3NlcnRBcnJheUVxdWFscyhuZXcgU3RyaW5nW10geyB9LCBvdXRfZGVwcy5rZXlTZXQoKS50b0FycmF5KCkpOwotICAgICAgICBhc3NlcnRBcnJheUVxdWFscyhuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQud2lkZ2V0LlRhYmxlTGF5b3V0IiwKLSAgICAgICAgfSwga2VlcC5rZXlTZXQoKS50b0FycmF5KCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21HZW5lcmF0b3JUZXN0LmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtR2VuZXJhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTI3MTczLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21HZW5lcmF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRBcnJheUVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotCi1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NSZWFkZXI7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkZpZWxkVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5NZXRob2RWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk9wY29kZXM7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uVHlwZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci0KLS8qKgotICogVW5pdCB0ZXN0cyBmb3Igc29tZSBtZXRob2RzIG9mIHtAbGluayBBc21HZW5lcmF0b3J9LgotICovCi1wdWJsaWMgY2xhc3MgQXNtR2VuZXJhdG9yVGVzdCB7Ci0KLSAgICBwcml2YXRlIE1vY2tMb2cgbUxvZzsKLSAgICBwcml2YXRlIEFycmF5TGlzdDxTdHJpbmc+IG1Pc0phclBhdGg7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbU9zRGVzdEphcjsKLSAgICBwcml2YXRlIEZpbGUgbVRlbXBGaWxlOwotCi0gICAgLy8gQVNNIGludGVybmFsIG5hbWUgZm9yIHRoZSB0aGUgY2xhc3MgaW4gamF2YSBwYWNrYWdlIHRoYXQgc2hvdWxkIGJlIHJlZmFjdG9yZWQuCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpBVkFfQ0xBU1NfTkFNRSA9ICJqYXZhL2xhbmcvSmF2YUNsYXNzIjsKLQotICAgIEBCZWZvcmUKLSAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBtTG9nID0gbmV3IE1vY2tMb2coKTsKLSAgICAgICAgVVJMIHVybCA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlKCJkYXRhL21vY2tfYW5kcm9pZC5qYXIiKTsKLQotICAgICAgICBtT3NKYXJQYXRoID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIG1Pc0phclBhdGguYWRkKHVybC5nZXRGaWxlKCkpOwotCi0gICAgICAgIG1UZW1wRmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoIm1vY2siLCAiLmphciIpOwotICAgICAgICBtT3NEZXN0SmFyID0gbVRlbXBGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgICBtVGVtcEZpbGUuZGVsZXRlT25FeGl0KCk7Ci0gICAgfQotCi0gICAgQEFmdGVyCi0gICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKG1UZW1wRmlsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtVGVtcEZpbGUuZGVsZXRlKCk7Ci0gICAgICAgICAgICBtVGVtcEZpbGUgPSBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NSZW5hbWluZygpIHRocm93cyBJT0V4Y2VwdGlvbiwgTG9nQWJvcnRFeGNlcHRpb24gewotCi0gICAgICAgIElDcmVhdGVJbmZvIGNpID0gbmV3IElDcmVhdGVJbmZvKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQ2xhc3M8Pz5bXSBnZXRJbmplY3RlZENsYXNzZXMoKSB7Ci0gICAgICAgICAgICAgICAgLy8gY2xhc3NlcyB0byBpbmplY3QgaW4gdGhlIGZpbmFsIEpBUgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2xhc3M8Pz5bMF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldERlbGVnYXRlTWV0aG9kcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVDbGFzc05hdGl2ZXMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldE92ZXJyaWRkZW5NZXRob2RzKCkgewotICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMgdG8gZm9yY2Ugb3ZlcnJpZGUKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UmVuYW1lZENsYXNzZXMoKSB7Ci0gICAgICAgICAgICAgICAgLy8gY2xhc3NlcyB0byByZW5hbWUgKHNvIHRoYXQgd2UgY2FuIHJlcGxhY2UgdGhlbSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3IiwgIm1vY2tfYW5kcm9pZC52aWV3Ll9PcmlnaW5hbF9WaWV3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJub3QuYW4uYWN0dWFsLkNsYXNzTmFtZSIsICJhbm90ZXIuZmFrZS5OZXdDbGFzc05hbWUiLAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldEphdmFQa2dDbGFzc2VzKCkgewotICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZXRlUmV0dXJucygpIHsKLSAgICAgICAgICAgICAgICAgLy8gbWV0aG9kcyBkZWxldGVkIGZyb20gdGhlaXIgcmV0dXJuIHR5cGUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQXNtR2VuZXJhdG9yIGFnZW4gPSBuZXcgQXNtR2VuZXJhdG9yKG1Mb2csIG1Pc0Rlc3RKYXIsIGNpKTsKLQotICAgICAgICBBc21BbmFseXplciBhYSA9IG5ldyBBc21BbmFseXplcihtTG9nLCBtT3NKYXJQYXRoLCBhZ2VuLAotICAgICAgICAgICAgICAgIG51bGwsICAgICAgICAgICAgICAgICAvLyBkZXJpdmVkIGZyb20KLSAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAgICAgICAgLy8gaW5jbHVkZSBjbGFzc2VzCi0gICAgICAgICAgICAgICAgICAgICIqKiIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIG5ldyBIYXNoU2V0PFN0cmluZz4oMCkgLyogZXhjbHVkZWQgY2xhc3NlcyAqLyk7Ci0gICAgICAgIGFhLmFuYWx5emUoKTsKLSAgICAgICAgYWdlbi5nZW5lcmF0ZSgpOwotCi0gICAgICAgIFNldDxTdHJpbmc+IG5vdFJlbmFtZWQgPSBhZ2VuLmdldENsYXNzZXNOb3RSZW5hbWVkKCk7Ci0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7ICJub3QvYW4vYWN0dWFsL0NsYXNzTmFtZSIgfSwgbm90UmVuYW1lZC50b0FycmF5KCkpOwotCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NSZWZhY3RvcmluZygpIHRocm93cyBJT0V4Y2VwdGlvbiwgTG9nQWJvcnRFeGNlcHRpb24gewotICAgICAgICBJQ3JlYXRlSW5mbyBjaSA9IG5ldyBJQ3JlYXRlSW5mbygpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIENsYXNzPD8+W10gZ2V0SW5qZWN0ZWRDbGFzc2VzKCkgewotICAgICAgICAgICAgICAgIC8vIGNsYXNzZXMgdG8gaW5qZWN0IGluIHRoZSBmaW5hbCBKQVIKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsYXNzPD8+W10gewotICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5kYXRhY2xhc3MuSmF2YUNsYXNzLmNsYXNzCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVNZXRob2RzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXREZWxlZ2F0ZUNsYXNzTmF0aXZlcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0T3ZlcnJpZGRlbk1ldGhvZHMoKSB7Ci0gICAgICAgICAgICAgICAgLy8gbWV0aG9kcyB0byBmb3JjZSBvdmVycmlkZQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRSZW5hbWVkQ2xhc3NlcygpIHsKLSAgICAgICAgICAgICAgICAvLyBjbGFzc2VzIHRvIHJlbmFtZSAoc28gdGhhdCB3ZSBjYW4gcmVwbGFjZSB0aGVtKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRKYXZhUGtnQ2xhc3NlcygpIHsKLSAgICAgICAgICAgICAvLyBjbGFzc2VzIHRvIHJlZmFjdG9yIChzbyB0aGF0IHdlIGNhbiByZXBsYWNlIHRoZW0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAiamF2YS5sYW5nLkphdmFDbGFzcyIsICJjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLmRhdGFjbGFzcy5KYXZhQ2xhc3MiLAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldERlbGV0ZVJldHVybnMoKSB7Ci0gICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMgZGVsZXRlZCBmcm9tIHRoZWlyIHJldHVybiB0eXBlLgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIEFzbUdlbmVyYXRvciBhZ2VuID0gbmV3IEFzbUdlbmVyYXRvcihtTG9nLCBtT3NEZXN0SmFyLCBjaSk7Ci0KLSAgICAgICAgQXNtQW5hbHl6ZXIgYWEgPSBuZXcgQXNtQW5hbHl6ZXIobUxvZywgbU9zSmFyUGF0aCwgYWdlbiwKLSAgICAgICAgICAgICAgICBudWxsLCAgICAgICAgICAgICAgICAgLy8gZGVyaXZlZCBmcm9tCi0gICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgICAgICAgIC8vIGluY2x1ZGUgY2xhc3NlcwotICAgICAgICAgICAgICAgICAgICAiKioiCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBuZXcgSGFzaFNldDxTdHJpbmc+KDEpKTsKLSAgICAgICAgYWEuYW5hbHl6ZSgpOwotICAgICAgICBhZ2VuLmdlbmVyYXRlKCk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBvdXRwdXQgPSBwYXJzZVppcChtT3NEZXN0SmFyKTsKLSAgICAgICAgYm9vbGVhbiBpbmplY3RlZENsYXNzRm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChDbGFzc1JlYWRlciBjcjogb3V0cHV0LnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBUZXN0Q2xhc3NWaXNpdG9yIGN2ID0gbmV3IFRlc3RDbGFzc1Zpc2l0b3IoKTsKLSAgICAgICAgICAgIGNyLmFjY2VwdChjdiwgMCk7Ci0gICAgICAgICAgICBpbmplY3RlZENsYXNzRm91bmQgfD0gY3YubUluamVjdGVkQ2xhc3NGb3VuZDsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRUcnVlKGluamVjdGVkQ2xhc3NGb3VuZCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBNYXA8U3RyaW5nLENsYXNzUmVhZGVyPiBwYXJzZVppcChTdHJpbmcgamFyUGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBjbGFzc2VzID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLQotICAgICAgICAgICAgWmlwRmlsZSB6aXAgPSBuZXcgWmlwRmlsZShqYXJQYXRoKTsKLSAgICAgICAgICAgIEVudW1lcmF0aW9uPD8gZXh0ZW5kcyBaaXBFbnRyeT4gZW50cmllcyA9IHppcC5lbnRyaWVzKCk7Ci0gICAgICAgICAgICBaaXBFbnRyeSBlbnRyeTsKLSAgICAgICAgICAgIHdoaWxlIChlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmdldE5hbWUoKS5lbmRzV2l0aCgiLmNsYXNzIikpIHsKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoemlwLmdldElucHV0U3RyZWFtKGVudHJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc1JlYWRlclRvQ2xhc3NOYW1lKGNyKTsKLSAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXQoY2xhc3NOYW1lLCBjcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjbGFzc2VzOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIGNsYXNzUmVhZGVyVG9DbGFzc05hbWUoQ2xhc3NSZWFkZXIgY2xhc3NSZWFkZXIpIHsKLSAgICAgICAgaWYgKGNsYXNzUmVhZGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGNsYXNzUmVhZGVyLmdldENsYXNzTmFtZSgpLnJlcGxhY2UoJy8nLCAnLicpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBUZXN0Q2xhc3NWaXNpdG9yIGV4dGVuZHMgQ2xhc3NWaXNpdG9yIHsKLQotICAgICAgICBib29sZWFuIG1JbmplY3RlZENsYXNzRm91bmQgPSBmYWxzZTsKLQotICAgICAgICBUZXN0Q2xhc3NWaXNpdG9yKCkgewotICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChpbnQgdmVyc2lvbiwgaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBzaWduYXR1cmUsCi0gICAgICAgICAgICAgICAgU3RyaW5nIHN1cGVyTmFtZSwgU3RyaW5nW10gaW50ZXJmYWNlcykgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSghZ2V0QmFzZShuYW1lKS5lcXVhbHMoSkFWQV9DTEFTU19OQU1FKSk7Ci0gICAgICAgICAgICBpZiAobmFtZS5lcXVhbHMoImNvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL0phdmFDbGFzcyIpKSB7Ci0gICAgICAgICAgICAgICAgbUluamVjdGVkQ2xhc3NGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdXBlci52aXNpdCh2ZXJzaW9uLCBhY2Nlc3MsIG5hbWUsIHNpZ25hdHVyZSwgc3VwZXJOYW1lLCBpbnRlcmZhY2VzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgRmllbGRWaXNpdG9yIHZpc2l0RmllbGQoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIE9iamVjdCB2YWx1ZSkgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0VHlwZShUeXBlLmdldFR5cGUoZGVzYykpKTsKLSAgICAgICAgICAgIHJldHVybiBzdXBlci52aXNpdEZpZWxkKGFjY2VzcywgbmFtZSwgZGVzYywgc2lnbmF0dXJlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygiaGlkaW5nIikKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBNZXRob2RWaXNpdG9yIHZpc2l0TWV0aG9kKGludCBhY2Nlc3MsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlLCBTdHJpbmdbXSBleGNlcHRpb25zKSB7Ci0gICAgICAgICAgICBNZXRob2RWaXNpdG9yIG12ID0gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIGV4Y2VwdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBNZXRob2RWaXNpdG9yKE9wY29kZXMuQVNNNCwgbXYpIHsKLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RmllbGRJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKCFnZXRCYXNlKG93bmVyKS5lcXVhbHMoSkFWQV9DTEFTU19OQU1FKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydFRydWUodGVzdFR5cGUoVHlwZS5nZXRUeXBlKGRlc2MpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVyLnZpc2l0RmllbGRJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TGRjSW5zbihPYmplY3QgY3N0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjc3QgaW5zdGFuY2VvZiBUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHRlc3RUeXBlKChUeXBlKWNzdCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVyLnZpc2l0TGRjSW5zbihjc3QpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0VHlwZUluc24oaW50IG9wY29kZSwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZSghZ2V0QmFzZSh0eXBlKS5lcXVhbHMoSkFWQV9DTEFTU19OQU1FKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVyLnZpc2l0VHlwZUluc24ob3Bjb2RlLCB0eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZEluc24oaW50IG9wY29kZSwgU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXNjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydFRydWUoIWdldEJhc2Uob3duZXIpLmVxdWFscyhKQVZBX0NMQVNTX05BTUUpKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0VHlwZShUeXBlLmdldFR5cGUoZGVzYykpKTsKLSAgICAgICAgICAgICAgICAgICAgc3VwZXIudmlzaXRNZXRob2RJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0VHlwZShUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgIGludCBzb3J0ID0gdHlwZS5nZXRTb3J0KCk7Ci0gICAgICAgICAgICBpZiAoc29ydCA9PSBUeXBlLk9CSkVDVCkgewotICAgICAgICAgICAgICAgIGFzc2VydFRydWUoIWdldEJhc2UodHlwZS5nZXRJbnRlcm5hbE5hbWUoKSkuZXF1YWxzKEpBVkFfQ0xBU1NfTkFNRSkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzb3J0ID09IFR5cGUuQVJSQVkpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKCFnZXRCYXNlKHR5cGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRJbnRlcm5hbE5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5lcXVhbHMoSkFWQV9DTEFTU19OQU1FKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNvcnQgPT0gVHlwZS5NRVRIT0QpIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIHIgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZvciAoVHlwZSB0IDogdHlwZS5nZXRBcmd1bWVudFR5cGVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgciAmPSB0ZXN0VHlwZSh0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHIgJiB0ZXN0VHlwZSh0eXBlLmdldFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIGdldEJhc2UoU3RyaW5nIGNsYXNzTmFtZSkgewotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgcG9zID0gY2xhc3NOYW1lLmluZGV4T2YoJyQnKTsKLSAgICAgICAgICAgIGlmIChwb3MgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5zdWJzdHJpbmcoMCwgcG9zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ2xhc3NIYXNOYXRpdmVWaXNpdG9yVGVzdC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0NsYXNzSGFzTmF0aXZlVmlzaXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEzNWM0MC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ2xhc3NIYXNOYXRpdmVWaXNpdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC4qOwotCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NSZWFkZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLQotLyoqCi0gKiBUZXN0cyB7QGxpbmsgQ2xhc3NIYXNOYXRpdmVWaXNpdG9yfS4KLSAqLwotcHVibGljIGNsYXNzIENsYXNzSGFzTmF0aXZlVmlzaXRvclRlc3QgewotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0SGFzTmF0aXZlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgTW9ja0NsYXNzSGFzTmF0aXZlVmlzaXRvciBjdiA9IG5ldyBNb2NrQ2xhc3NIYXNOYXRpdmVWaXNpdG9yKCk7Ci0gICAgICAgIFN0cmluZyBjbGFzc05hbWUgPQotICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkgKyAiJCIgKyBDbGFzc1dpdGhOYXRpdmUuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpOwotICAgICAgICBDbGFzc1JlYWRlciBjciA9IG5ldyBDbGFzc1JlYWRlcihjbGFzc05hbWUpOwotCi0gICAgICAgIGNyLmFjY2VwdChjdiwgMCAvKiBmbGFncyAqLyk7Ci0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7ICJuYXRpdmVfbWV0aG9kIiB9LCBjdi5nZXRNZXRob2RzRm91bmQoKSk7Ci0gICAgICAgIGFzc2VydFRydWUoY3YuaGFzTmF0aXZlTWV0aG9kcygpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNOb05hdGl2ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIE1vY2tDbGFzc0hhc05hdGl2ZVZpc2l0b3IgY3YgPSBuZXcgTW9ja0NsYXNzSGFzTmF0aXZlVmlzaXRvcigpOwotICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0KLSAgICAgICAgICAgIHRoaXMuZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkgKyAiJCIgKyBDbGFzc1dpdGhvdXROYXRpdmUuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpOwotICAgICAgICBDbGFzc1JlYWRlciBjciA9IG5ldyBDbGFzc1JlYWRlcihjbGFzc05hbWUpOwotCi0gICAgICAgIGNyLmFjY2VwdChjdiwgMCAvKiBmbGFncyAqLyk7Ci0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbMF0sIGN2LmdldE1ldGhvZHNGb3VuZCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UoY3YuaGFzTmF0aXZlTWV0aG9kcygpKTsKLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIE92ZXJyaWRlcyB7QGxpbmsgQ2xhc3NIYXNOYXRpdmVWaXNpdG9yfSB0byBjb2xsZWMgdGhlIG5hbWUgb2YgdGhlIG5hdGl2ZSBtZXRob2RzIGZvdW5kLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE1vY2tDbGFzc0hhc05hdGl2ZVZpc2l0b3IgZXh0ZW5kcyBDbGFzc0hhc05hdGl2ZVZpc2l0b3IgewotICAgICAgICBwcml2YXRlIEFycmF5TGlzdDxTdHJpbmc+IG1NZXRob2RzRm91bmQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQotICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0TWV0aG9kc0ZvdW5kKCkgewotICAgICAgICAgICAgcmV0dXJuIG1NZXRob2RzRm91bmQudG9BcnJheShuZXcgU3RyaW5nW21NZXRob2RzRm91bmQuc2l6ZSgpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SGFzTmF0aXZlTWV0aG9kcyhib29sZWFuIGhhc05hdGl2ZU1ldGhvZHMsIFN0cmluZyBtZXRob2ROYW1lKSB7Ci0gICAgICAgICAgICBpZiAoaGFzTmF0aXZlTWV0aG9kcykgewotICAgICAgICAgICAgICAgIG1NZXRob2RzRm91bmQuYWRkKG1ldGhvZE5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VwZXIuc2V0SGFzTmF0aXZlTWV0aG9kcyhoYXNOYXRpdmVNZXRob2RzLCBtZXRob2ROYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIER1bW15IHRlc3QgY2xhc3Mgd2l0aCBhIG5hdGl2ZSBtZXRob2QuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBDbGFzc1dpdGhOYXRpdmUgewotICAgICAgICBwdWJsaWMgQ2xhc3NXaXRoTmF0aXZlKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgY2FsbFRoZU5hdGl2ZU1ldGhvZCgpIHsKLSAgICAgICAgICAgIG5hdGl2ZV9tZXRob2QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlX21ldGhvZCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIER1bW15IHRlc3QgY2xhc3Mgd2l0aCBubyBuYXRpdmUgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2xhc3NXaXRob3V0TmF0aXZlIHsKLSAgICAgICAgcHVibGljIENsYXNzV2l0aG91dE5hdGl2ZSgpIHsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNvbWVNZXRob2QoKSB7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0LmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMTIwY2UuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlbGVnYXRlQ2xhc3NBZGFwdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFNhbWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5kYXRhY2xhc3MuQ2xhc3NXaXRoTmF0aXZlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuZGF0YWNsYXNzLk91dGVyQ2xhc3M7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5kYXRhY2xhc3MuT3V0ZXJDbGFzcy5Jbm5lckNsYXNzOwotCi1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5DbGFzc1JlYWRlcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5DbGFzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NXcml0ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotcHVibGljIGNsYXNzIERlbGVnYXRlQ2xhc3NBZGFwdGVyVGVzdCB7Ci0KLSAgICBwcml2YXRlIE1vY2tMb2cgbUxvZzsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQVRJVkVfQ0xBU1NfTkFNRSA9IENsYXNzV2l0aE5hdGl2ZS5jbGFzcy5nZXRDYW5vbmljYWxOYW1lKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE9VVEVSX0NMQVNTX05BTUUgPSBPdXRlckNsYXNzLmNsYXNzLmdldENhbm9uaWNhbE5hbWUoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ORVJfQ0xBU1NfTkFNRSA9IE91dGVyQ2xhc3MuY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpICsgIiQiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubmVyQ2xhc3MuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpOwotCi0gICAgQEJlZm9yZQotICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG1Mb2cgPSBuZXcgTW9ja0xvZygpOwotICAgICAgICBtTG9nLnNldFZlcmJvc2UodHJ1ZSk7IC8vIGNhcHR1cmUgZGVidWcgZXJyb3IgdG9vCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgdGhhdCBhIGNsYXNzIG5vdCBiZWluZyBtb2RpZmllZCBzdGlsbCB3b3Jrcy4KLSAgICAgKi8KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3ROb09wKCkgdGhyb3dzIFRocm93YWJsZSB7Ci0gICAgICAgIC8vIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgdGhhdCB3aWxsIGJlIG1vZGlmaWVkCi0gICAgICAgIC8vIChsb2FkIHRoZSBjbGFzcyBpbiBhIGRpc3RpbmN0IGNsYXNzIGxvYWRlciBzbyB0aGF0IHdlIGNhbiB0cmFzaCBpdHMgZGVmaW5pdGlvbiBsYXRlcikKLSAgICAgICAgQ2xhc3NMb2FkZXIgY2wxID0gbmV3IENsYXNzTG9hZGVyKHRoaXMuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKSB7IH07Ci0gICAgICAgIENsYXNzPENsYXNzV2l0aE5hdGl2ZT4gY2xhenoxID0gKENsYXNzPENsYXNzV2l0aE5hdGl2ZT4pIGNsMS5sb2FkQ2xhc3MoTkFUSVZFX0NMQVNTX05BTUUpOwotICAgICAgICBDbGFzc1dpdGhOYXRpdmUgaW5zdGFuY2UxID0gY2xhenoxLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UxLmFkZCgyMCwgMjIpKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGluc3RhbmNlMS5jYWxsTmF0aXZlSW5zdGFuY2UoMTAsIDMuMTQxNSwgbmV3IE9iamVjdFswXSApOwotICAgICAgICAgICAgZmFpbCgiVGVzdCBzaG91bGQgaGF2ZSBmYWlsZWQgdG8gaW52b2tlIGNhbGxUaGVOYXRpdmVNZXRob2QgWzFdIik7Ci0gICAgICAgIH0gY2F0Y2ggKFVuc2F0aXNmaWVkTGlua0Vycm9yIGUpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gZmFpbCBzaW5jZSB0aGUgbmF0aXZlIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuCi0gICAgICAgIH0KLQotICAgICAgICAvLyBOb3cgcHJvY2VzcyBpdCBidXQgdGVsbCB0aGUgZGVsZWdhdGUgdG8gbm90IG1vZGlmeSBhbnkgbWV0aG9kCi0gICAgICAgIENsYXNzV3JpdGVyIGN3ID0gbmV3IENsYXNzV3JpdGVyKDAgLypmbGFncyovKTsKLQotICAgICAgICBIYXNoU2V0PFN0cmluZz4gZGVsZWdhdGVNZXRob2RzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotICAgICAgICBTdHJpbmcgaW50ZXJuYWxDbGFzc05hbWUgPSBOQVRJVkVfQ0xBU1NfTkFNRS5yZXBsYWNlKCcuJywgJy8nKTsKLSAgICAgICAgRGVsZWdhdGVDbGFzc0FkYXB0ZXIgY3YgPSBuZXcgRGVsZWdhdGVDbGFzc0FkYXB0ZXIoCi0gICAgICAgICAgICAgICAgbUxvZywgY3csIGludGVybmFsQ2xhc3NOYW1lLCBkZWxlZ2F0ZU1ldGhvZHMpOwotCi0gICAgICAgIENsYXNzUmVhZGVyIGNyID0gbmV3IENsYXNzUmVhZGVyKE5BVElWRV9DTEFTU19OQU1FKTsKLSAgICAgICAgY3IuYWNjZXB0KGN2LCAwIC8qIGZsYWdzICovKTsKLQotICAgICAgICAvLyBMb2FkIHRoZSBnZW5lcmF0ZWQgY2xhc3MgaW4gYSBkaWZmZXJlbnQgY2xhc3MgbG9hZGVyIGFuZCB0cnkgaXQgYWdhaW4KLQotICAgICAgICBDbGFzc0xvYWRlcjIgY2wyID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsMiA9IG5ldyBDbGFzc0xvYWRlcjIoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWVkSW5zdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gY2xhenoyID0gbG9hZENsYXNzKE5BVElWRV9DTEFTU19OQU1FKTsKLSAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGkyID0gY2xhenoyLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydE5vdE51bGwoaTIpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDIsIGNhbGxBZGQoaTIsIDIwLCAyMikpOwotCi0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsQ2FsbE5hdGl2ZUluc3RhbmNlKGkyLCAxMCwgMy4xNDE1LCBuZXcgT2JqZWN0WzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoIlRlc3Qgc2hvdWxkIGhhdmUgZmFpbGVkIHRvIGludm9rZSBjYWxsVGhlTmF0aXZlTWV0aG9kIFsyXSIpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gZmFpbCBzaW5jZSB0aGUgbmF0aXZlIG1ldGhvZCBoYXMgTk9UIGJlZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRkZW4gaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhVbnNhdGlzZmllZExpbmtFcnJvci5jbGFzcywgZS5nZXRDYXVzZSgpLmdldENsYXNzKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbmF0aXZlIG1ldGhvZCBkb2VzIE5PVCBoYXZlIHRoZSBuZXcgYW5ub3RhdGlvbgotICAgICAgICAgICAgICAgICAgICBNZXRob2RbXSBtID0gY2xhenoyLmdldERlY2xhcmVkTWV0aG9kcygpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hdGl2ZV9pbnN0YW5jZSIsIG1bMl0uZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShNb2RpZmllci5pc05hdGl2ZShtWzJdLmdldE1vZGlmaWVycygpKSk7Ci0gICAgICAgICAgICAgICAgICAgIEFubm90YXRpb25bXSBhID0gbVsyXS5nZXRBbm5vdGF0aW9ucygpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgYS5sZW5ndGgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBjbDIuYWRkKE5BVElWRV9DTEFTU19OQU1FLCBjdyk7Ci0gICAgICAgICAgICBjbDIudGVzdE1vZGlmaWVkSW5zdGFuY2UoKTsKLSAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgICAgICAgIHRocm93IGR1bXBHZW5lcmF0ZWRDbGFzcyh0LCBjbDIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoge0BsaW5rIERlbGVnYXRlTWV0aG9kQWRhcHRlcjJ9IGRvZXMgbm90IHN1cHBvcnQgb3ZlcnJpZGluZyBjb25zdHJ1Y3RvcnMgeWV0LAotICAgICAqIHNvIHRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiB7QGxpbmsgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb259LgotICAgICAqCi0gICAgICogQWx0aG91Z2ggbm90IHRlc3RlZCBoZXJlLCB0aGUgbWVzc2FnZSBvZiB0aGUgZXhjZXB0aW9uIHNob3VsZCBjb250YWluIHRoZQotICAgICAqIGNvbnN0cnVjdG9yIHNpZ25hdHVyZS4KLSAgICAgKi8KLSAgICBAVGVzdChleHBlY3RlZD1VbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbi5jbGFzcykKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RydWN0b3JzTm90U3VwcG9ydGVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgQ2xhc3NXcml0ZXIgY3cgPSBuZXcgQ2xhc3NXcml0ZXIoMCAvKmZsYWdzKi8pOwotCi0gICAgICAgIFN0cmluZyBpbnRlcm5hbENsYXNzTmFtZSA9IE5BVElWRV9DTEFTU19OQU1FLnJlcGxhY2UoJy4nLCAnLycpOwotCi0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkZWxlZ2F0ZU1ldGhvZHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgIGRlbGVnYXRlTWV0aG9kcy5hZGQoIjxpbml0PiIpOwotICAgICAgICBEZWxlZ2F0ZUNsYXNzQWRhcHRlciBjdiA9IG5ldyBEZWxlZ2F0ZUNsYXNzQWRhcHRlcigKLSAgICAgICAgICAgICAgICBtTG9nLCBjdywgaW50ZXJuYWxDbGFzc05hbWUsIGRlbGVnYXRlTWV0aG9kcyk7Ci0KLSAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoTkFUSVZFX0NMQVNTX05BTUUpOwotICAgICAgICBjci5hY2NlcHQoY3YsIDAgLyogZmxhZ3MgKi8pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdERlbGVnYXRlTmF0aXZlKCkgdGhyb3dzIFRocm93YWJsZSB7Ci0gICAgICAgIENsYXNzV3JpdGVyIGN3ID0gbmV3IENsYXNzV3JpdGVyKDAgLypmbGFncyovKTsKLSAgICAgICAgU3RyaW5nIGludGVybmFsQ2xhc3NOYW1lID0gTkFUSVZFX0NMQVNTX05BTUUucmVwbGFjZSgnLicsICcvJyk7Ci0KLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IGRlbGVnYXRlTWV0aG9kcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLSAgICAgICAgZGVsZWdhdGVNZXRob2RzLmFkZChEZWxlZ2F0ZUNsYXNzQWRhcHRlci5BTExfTkFUSVZFUyk7Ci0gICAgICAgIERlbGVnYXRlQ2xhc3NBZGFwdGVyIGN2ID0gbmV3IERlbGVnYXRlQ2xhc3NBZGFwdGVyKAotICAgICAgICAgICAgICAgIG1Mb2csIGN3LCBpbnRlcm5hbENsYXNzTmFtZSwgZGVsZWdhdGVNZXRob2RzKTsKLQotICAgICAgICBDbGFzc1JlYWRlciBjciA9IG5ldyBDbGFzc1JlYWRlcihOQVRJVkVfQ0xBU1NfTkFNRSk7Ci0gICAgICAgIGNyLmFjY2VwdChjdiwgMCAvKiBmbGFncyAqLyk7Ci0KLSAgICAgICAgLy8gTG9hZCB0aGUgZ2VuZXJhdGVkIGNsYXNzIGluIGEgZGlmZmVyZW50IGNsYXNzIGxvYWRlciBhbmQgdHJ5IGl0Ci0gICAgICAgIENsYXNzTG9hZGVyMiBjbDIgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2wyID0gbmV3IENsYXNzTG9hZGVyMigpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZpZWRJbnN0YW5jZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICBDbGFzczw/PiBjbGF6ejIgPSBsb2FkQ2xhc3MoTkFUSVZFX0NMQVNTX05BTUUpOwotICAgICAgICAgICAgICAgICAgICBPYmplY3QgaTIgPSBjbGF6ejIubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbChpMik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHJlZmxlY3Rpb24gdG8gYWNjZXNzIGlubmVyIG1ldGhvZHMKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQyLCBjYWxsQWRkKGkyLCAyMCwgMjIpKTsKLQotICAgICAgICAgICAgICAgICAgICAgT2JqZWN0W10gb2JqUmVzdWx0ID0gbmV3IE9iamVjdFtdIHsgbnVsbCB9OwotICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IGNhbGxDYWxsTmF0aXZlSW5zdGFuY2UoaTIsIDEwLCAzLjE0MTUsIG9ialJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoKGludCkoMTAgKyAzLjE0MTUpLCByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0U2FtZShpMiwgb2JqUmVzdWx0WzBdKTsKLQotICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbmF0aXZlIG1ldGhvZCBub3cgaGFzIHRoZSBuZXcgYW5ub3RhdGlvbiBhbmQgaXMgbm90IG5hdGl2ZQotICAgICAgICAgICAgICAgICAgICAgTWV0aG9kW10gbSA9IGNsYXp6Mi5nZXREZWNsYXJlZE1ldGhvZHMoKTsKLSAgICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygibmF0aXZlX2luc3RhbmNlIiwgbVsyXS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RmFsc2UoTW9kaWZpZXIuaXNOYXRpdmUobVsyXS5nZXRNb2RpZmllcnMoKSkpOwotICAgICAgICAgICAgICAgICAgICAgQW5ub3RhdGlvbltdIGEgPSBtWzJdLmdldEFubm90YXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkxheW91dGxpYkRlbGVnYXRlIiwgYVswXS5hbm5vdGF0aW9uVHlwZSgpLmdldFNpbXBsZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGNsMi5hZGQoTkFUSVZFX0NMQVNTX05BTUUsIGN3KTsKLSAgICAgICAgICAgIGNsMi50ZXN0TW9kaWZpZWRJbnN0YW5jZSgpOwotICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgICAgICAgdGhyb3cgZHVtcEdlbmVyYXRlZENsYXNzKHQsIGNsMik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3REZWxlZ2F0ZUlubmVyKCkgdGhyb3dzIFRocm93YWJsZSB7Ci0gICAgICAgIC8vIFdlJ2xsIGRlbGVnYXRlIHRoZSAiZ2V0IiBtZXRob2Qgb2YgYm90aCB0aGUgaW5uZXIgYW5kIG91dGVyIGNsYXNzLgotICAgICAgICBIYXNoU2V0PFN0cmluZz4gZGVsZWdhdGVNZXRob2RzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotICAgICAgICBkZWxlZ2F0ZU1ldGhvZHMuYWRkKCJnZXQiKTsKLSAgICAgICAgZGVsZWdhdGVNZXRob2RzLmFkZCgicHJpdmF0ZU1ldGhvZCIpOwotCi0gICAgICAgIC8vIEdlbmVyYXRlIHRoZSBkZWxlZ2F0ZSBmb3IgdGhlIG91dGVyIGNsYXNzLgotICAgICAgICBDbGFzc1dyaXRlciBjd091dGVyID0gbmV3IENsYXNzV3JpdGVyKDAgLypmbGFncyovKTsKLSAgICAgICAgU3RyaW5nIG91dGVyQ2xhc3NOYW1lID0gT1VURVJfQ0xBU1NfTkFNRS5yZXBsYWNlKCcuJywgJy8nKTsKLSAgICAgICAgRGVsZWdhdGVDbGFzc0FkYXB0ZXIgY3ZPdXRlciA9IG5ldyBEZWxlZ2F0ZUNsYXNzQWRhcHRlcigKLSAgICAgICAgICAgICAgICBtTG9nLCBjd091dGVyLCBvdXRlckNsYXNzTmFtZSwgZGVsZWdhdGVNZXRob2RzKTsKLSAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoT1VURVJfQ0xBU1NfTkFNRSk7Ci0gICAgICAgIGNyLmFjY2VwdChjdk91dGVyLCAwIC8qIGZsYWdzICovKTsKLQotICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVsZWdhdGUgZm9yIHRoZSBpbm5lciBjbGFzcy4KLSAgICAgICAgQ2xhc3NXcml0ZXIgY3dJbm5lciA9IG5ldyBDbGFzc1dyaXRlcigwIC8qZmxhZ3MqLyk7Ci0gICAgICAgIFN0cmluZyBpbm5lckNsYXNzTmFtZSA9IElOTkVSX0NMQVNTX05BTUUucmVwbGFjZSgnLicsICcvJyk7Ci0gICAgICAgIERlbGVnYXRlQ2xhc3NBZGFwdGVyIGN2SW5uZXIgPSBuZXcgRGVsZWdhdGVDbGFzc0FkYXB0ZXIoCi0gICAgICAgICAgICAgICAgbUxvZywgY3dJbm5lciwgaW5uZXJDbGFzc05hbWUsIGRlbGVnYXRlTWV0aG9kcyk7Ci0gICAgICAgIGNyID0gbmV3IENsYXNzUmVhZGVyKElOTkVSX0NMQVNTX05BTUUpOwotICAgICAgICBjci5hY2NlcHQoY3ZJbm5lciwgMCAvKiBmbGFncyAqLyk7Ci0KLSAgICAgICAgLy8gTG9hZCB0aGUgZ2VuZXJhdGVkIGNsYXNzZXMgaW4gYSBkaWZmZXJlbnQgY2xhc3MgbG9hZGVyIGFuZCB0cnkgdGhlbQotICAgICAgICBDbGFzc0xvYWRlcjIgY2wyID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsMiA9IG5ldyBDbGFzc0xvYWRlcjIoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWVkSW5zdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGUgb3V0ZXIgY2xhc3MKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gb3V0ZXJDbGF6ejIgPSBsb2FkQ2xhc3MoT1VURVJfQ0xBU1NfTkFNRSk7Ci0gICAgICAgICAgICAgICAgICAgIE9iamVjdCBvMiA9IG91dGVyQ2xhenoyLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydE5vdE51bGwobzIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCBPdXRlci5nZXQgcmV0dXJucyAxKzEwKzIwLAotICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhlIGRlbGVnYXRlIG1ha2VzIGl0IHJldHVybiA0KzEwKzIwCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyg0KzEwKzIwLCBjYWxsR2V0KG8yLCAxMCwgMjApKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDErMTArMjAsIGNhbGxHZXRfT3JpZ2luYWwobzIsIDEwLCAyMCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCBPdXRlciBoYXMgYSBwcml2YXRlIG1ldGhvZCB0aGF0IGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIGRlbGVnYXRlZC4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gY2FsbCBib3RoIHRoZSBkZWxlZ2F0ZQotICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIG9yaWdpbmFsICh3aGljaCBpcyBub3cgcHVibGljKS4KLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJvdXRlclByaXZhdGVNZXRob2QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE1ldGhvZChvMiwgInByaXZhdGVNZXRob2RfT3JpZ2luYWwiLCBmYWxzZSAvKm1ha2VQdWJsaWMqLykpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCBtZXRob2QgaXMgcHJpdmF0ZSwgc28gYnkgZGVmYXVsdCB3ZSBjYW4ndCBhY2Nlc3MgaXQKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBnb3RJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE1ldGhvZChvMiwgInByaXZhdGVNZXRob2QiLCBmYWxzZSAvKm1ha2VQdWJsaWMqLyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKGdvdElsbGVnYWxBY2Nlc3NFeGNlcHRpb24pOwotICAgICAgICAgICAgICAgICAgICAvLyBUcnkgYWdhaW4sIGJ1dCBub3cgbWFraW5nIGl0IGFjY2Vzc2libGUKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJvdXRlclByaXZhdGVfRGVsZWdhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxNZXRob2QobzIsICJwcml2YXRlTWV0aG9kIiwgdHJ1ZSAvKm1ha2VQdWJsaWMqLykpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBpbm5lciBjbGFzcy4gU2luY2UgaXQncyBub3QgYSBzdGF0aWMgaW5uZXIgY2xhc3MsIHdlIG5lZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gdXNlIHRoZSBoaWRkZW4gY29uc3RydWN0b3IgdGhhdCB0YWtlcyB0aGUgb3V0ZXIgY2xhc3MgYXMgZmlyc3QgcGFyYW1ldGVyLgotICAgICAgICAgICAgICAgICAgICBDbGFzczw/PiBpbm5lckNsYXp6MiA9IGxvYWRDbGFzcyhJTk5FUl9DTEFTU19OQU1FKTsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3I8Pz4gaW5uZXJDb25zID0gaW5uZXJDbGF6ejIuZ2V0Q29uc3RydWN0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzPD8+W10geyBvdXRlckNsYXp6MiB9KTsKLSAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGkyID0gaW5uZXJDb25zLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbXSB7IG8yIH0pOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnROb3ROdWxsKGkyKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgSW5uZXIuZ2V0IHJldHVybnMgMysxMCsyMCwKLSAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHRoZSBkZWxlZ2F0ZSBtYWtlcyBpdCByZXR1cm4gNisxMCsyMAotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNisxMCsyMCwgY2FsbEdldChpMiwgMTAsIDIwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzKzEwKzIwLCBjYWxsR2V0X09yaWdpbmFsKGkyLCAxMCwgMjApKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgY2wyLmFkZChPVVRFUl9DTEFTU19OQU1FLCBjd091dGVyLnRvQnl0ZUFycmF5KCkpOwotICAgICAgICAgICAgY2wyLmFkZChJTk5FUl9DTEFTU19OQU1FLCBjd0lubmVyLnRvQnl0ZUFycmF5KCkpOwotICAgICAgICAgICAgY2wyLnRlc3RNb2RpZmllZEluc3RhbmNlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICAgICAgICB0aHJvdyBkdW1wR2VuZXJhdGVkQ2xhc3ModCwgY2wyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vLS0tLS0tLQotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyBsb2FkZXIgdGhhbiBjYW4gZGVmaW5lIGFuZCBpbnN0YW50aWF0ZSBvdXIgbW9kaWZpZWQgY2xhc3Nlcy4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhlIHRyaWNrIGhlcmUgaXMgdGhhdCB0aGlzIGNsYXNzIGxvYWRlciB3aWxsIHRlc3Qgb3VyIDxlbT5tb2RpZmllZDwvZW0+IHZlcnNpb24KLSAgICAgKiBvZiB0aGUgY2xhc3NlcywgdGhlIG9uZSB3aXRoIHRoZSBkZWxlZ2F0ZSBjYWxscy4KLSAgICAgKiA8cC8+Ci0gICAgICogVHJ5aW5nIHRvIGRvIHNvIGluIHRoZSBvcmlnaW5hbCBjbGFzcyBsb2FkZXIgZ2VuZXJhdGVzIGFsbCBzb3J0IG9mIGxpbmsgaXNzdWVzIGJlY2F1c2UKLSAgICAgKiB0aGVyZSBhcmUgMiBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgb2YgdGhlIHNhbWUgY2xhc3MgbmFtZS4gVGhpcyBjbGFzcyBsb2FkZXIgd2lsbAotICAgICAqIGRlZmluZSBhbmQgbG9hZCB0aGUgY2xhc3Mgd2hlbiByZXF1ZXN0ZWQgYnkgbmFtZSBhbmQgcHJvdmlkZSBoZWxwZXJzIHRvIGFjY2VzcyB0aGUKLSAgICAgKiBpbnN0YW5jZSBtZXRob2RzIHZpYSByZWZsZWN0aW9uLgotICAgICAqLwotICAgIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgQ2xhc3NMb2FkZXIyIGV4dGVuZHMgQ2xhc3NMb2FkZXIgewotCi0gICAgICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgYnl0ZVtdPiBtQ2xhc3NEZWZzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBieXRlW10+KCk7Ci0KLSAgICAgICAgcHVibGljIENsYXNzTG9hZGVyMigpIHsKLSAgICAgICAgICAgIHN1cGVyKG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIENsYXNzTG9hZGVyMiBhZGQoU3RyaW5nIGNsYXNzTmFtZSwgYnl0ZVtdIGRlZmluaXRpb24pIHsKLSAgICAgICAgICAgIG1DbGFzc0RlZnMucHV0KGNsYXNzTmFtZSwgZGVmaW5pdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBDbGFzc0xvYWRlcjIgYWRkKFN0cmluZyBjbGFzc05hbWUsIENsYXNzV3JpdGVyIHJld3JpdHRlbkNsYXNzKSB7Ci0gICAgICAgICAgICBtQ2xhc3NEZWZzLnB1dChjbGFzc05hbWUsIHJld3JpdHRlbkNsYXNzLnRvQnl0ZUFycmF5KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFNldDxFbnRyeTxTdHJpbmcsIGJ5dGVbXT4+IGdldEJ5dGVDb2RlKCkgewotICAgICAgICAgICAgcmV0dXJuIG1DbGFzc0RlZnMuZW50cnlTZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIENsYXNzPD8+IGZpbmRDbGFzcyhTdHJpbmcgbmFtZSkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuZmluZENsYXNzKG5hbWUpOwotICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0KLSAgICAgICAgICAgICAgICBieXRlW10gZGVmID0gbUNsYXNzRGVmcy5nZXQobmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlZiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIExvYWQgdGhlIG1vZGlmaWVkIENsYXNzV2l0aE5hdGl2ZSBmcm9tIGl0cyBieXRlcyByZXByZXNlbnRhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZUNsYXNzKG5hbWUsIGRlZiwgMCwgZGVmLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBldmVyeXRoaW5nIGVsc2UgZnJvbSB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiBpbnRvIHRoZSBuZXcgY2xhc3MgbG9hZGVyLgotICAgICAgICAgICAgICAgICAgICBDbGFzc1JlYWRlciBjciA9IG5ldyBDbGFzc1JlYWRlcihuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3NXcml0ZXIgY3cgPSBuZXcgQ2xhc3NXcml0ZXIoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGNyLmFjY2VwdChjdywgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IGN3LnRvQnl0ZUFycmF5KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVDbGFzcyhuYW1lLCBieXRlcywgMCwgYnl0ZXMubGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihpb2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBY2Nlc3NlcyB7QGxpbmsgT3V0ZXJDbGFzcyNnZXR9IG9yIHtAbGluayBJbm5lckNsYXNzI2dldH12aWEgcmVmbGVjdGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgY2FsbEdldChPYmplY3QgaW5zdGFuY2UsIGludCBhLCBsb25nIGIpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgTWV0aG9kIG0gPSBpbnN0YW5jZS5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0IiwKLSAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzPD8+W10geyBpbnQuY2xhc3MsIGxvbmcuY2xhc3MgfSApOwotCi0gICAgICAgICAgICBPYmplY3QgcmVzdWx0ID0gbS5pbnZva2UoaW5zdGFuY2UsIG5ldyBPYmplY3RbXSB7IGEsIGIgfSk7Ci0gICAgICAgICAgICByZXR1cm4gKChJbnRlZ2VyKSByZXN1bHQpLmludFZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQWNjZXNzZXMgdGhlICJfT3JpZ2luYWwiIG1ldGhvZHMgZm9yIHtAbGluayBPdXRlckNsYXNzI2dldH0KLSAgICAgICAgICogb3Ige0BsaW5rIElubmVyQ2xhc3MjZ2V0fXZpYSByZWZsZWN0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBjYWxsR2V0X09yaWdpbmFsKE9iamVjdCBpbnN0YW5jZSwgaW50IGEsIGxvbmcgYikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBNZXRob2QgbSA9IGluc3RhbmNlLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJnZXRfT3JpZ2luYWwiLAotICAgICAgICAgICAgICAgICAgICBuZXcgQ2xhc3M8Pz5bXSB7IGludC5jbGFzcywgbG9uZy5jbGFzcyB9ICk7Ci0KLSAgICAgICAgICAgIE9iamVjdCByZXN1bHQgPSBtLmludm9rZShpbnN0YW5jZSwgbmV3IE9iamVjdFtdIHsgYSwgYiB9KTsKLSAgICAgICAgICAgIHJldHVybiAoKEludGVnZXIpIHJlc3VsdCkuaW50VmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBY2Nlc3NlcyB0aGUgYW55IGRlY2xhcmVkIG1ldGhvZCB0aGF0IHRha2VzIG5vIHBhcmFtZXRlciB2aWEgcmVmbGVjdGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICAgICAgICBwdWJsaWMgPFQ+IFQgY2FsbE1ldGhvZChPYmplY3QgaW5zdGFuY2UsIFN0cmluZyBtZXRob2ROYW1lLCBib29sZWFuIG1ha2VQdWJsaWMpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgTWV0aG9kIG0gPSBpbnN0YW5jZS5nZXRDbGFzcygpLmdldERlY2xhcmVkTWV0aG9kKG1ldGhvZE5hbWUsIChDbGFzczw/PltdKW51bGwpOwotCi0gICAgICAgICAgICBib29sZWFuIHdhc0FjY2Vzc2libGUgPSBtLmlzQWNjZXNzaWJsZSgpOwotICAgICAgICAgICAgaWYgKG1ha2VQdWJsaWMgJiYgIXdhc0FjY2Vzc2libGUpIHsKLSAgICAgICAgICAgICAgICBtLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE9iamVjdCByZXN1bHQgPSBtLmludm9rZShpbnN0YW5jZSwgKE9iamVjdFtdKW51bGwpOwotCi0gICAgICAgICAgICBpZiAobWFrZVB1YmxpYyAmJiAhd2FzQWNjZXNzaWJsZSkgewotICAgICAgICAgICAgICAgIG0uc2V0QWNjZXNzaWJsZShmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiAoVCkgcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFjY2Vzc2VzIHtAbGluayBDbGFzc1dpdGhOYXRpdmUjYWRkKGludCwgaW50KX0gdmlhIHJlZmxlY3Rpb24uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGNhbGxBZGQoT2JqZWN0IGluc3RhbmNlLCBpbnQgYSwgaW50IGIpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgTWV0aG9kIG0gPSBpbnN0YW5jZS5nZXRDbGFzcygpLmdldE1ldGhvZCgiYWRkIiwKLSAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzPD8+W10geyBpbnQuY2xhc3MsIGludC5jbGFzcyB9KTsKLQotICAgICAgICAgICAgT2JqZWN0IHJlc3VsdCA9IG0uaW52b2tlKGluc3RhbmNlLCBuZXcgT2JqZWN0W10geyBhLCBiIH0pOwotICAgICAgICAgICAgcmV0dXJuICgoSW50ZWdlcikgcmVzdWx0KS5pbnRWYWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFjY2Vzc2VzIHtAbGluayBDbGFzc1dpdGhOYXRpdmUjY2FsbE5hdGl2ZUluc3RhbmNlKGludCwgZG91YmxlLCBPYmplY3RbXSl9Ci0gICAgICAgICAqIHZpYSByZWZsZWN0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBjYWxsQ2FsbE5hdGl2ZUluc3RhbmNlKE9iamVjdCBpbnN0YW5jZSwgaW50IGEsIGRvdWJsZSBkLCBPYmplY3RbXSBvKQotICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgTWV0aG9kIG0gPSBpbnN0YW5jZS5nZXRDbGFzcygpLmdldE1ldGhvZCgiY2FsbE5hdGl2ZUluc3RhbmNlIiwKLSAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzPD8+W10geyBpbnQuY2xhc3MsIGRvdWJsZS5jbGFzcywgT2JqZWN0W10uY2xhc3MgfSk7Ci0KLSAgICAgICAgICAgIE9iamVjdCByZXN1bHQgPSBtLmludm9rZShpbnN0YW5jZSwgbmV3IE9iamVjdFtdIHsgYSwgZCwgbyB9KTsKLSAgICAgICAgICAgIHJldHVybiAoKEludGVnZXIpIHJlc3VsdCkuaW50VmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHRlc3RNb2RpZmllZEluc3RhbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgZGVidWdnaW5nLCBpdCdzIHVzZWZ1bCB0byBkdW1wIHRoZSBjb250ZW50IG9mIHRoZSBnZW5lcmF0ZWQgY2xhc3NlcwotICAgICAqIGFsb25nIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHdhcyBnZW5lcmF0ZWQuCi0gICAgICoKLSAgICAgKiBIb3dldmVyIHRvIG1ha2UgaXQgd29yayB5b3UgbmVlZCB0byBwdWxsIGluIHRoZSBvcmcub2JqZWN0d2ViLmFzbS51dGlsLlRyYWNlQ2xhc3NWaXNpdG9yCi0gICAgICogY2xhc3MgYW5kIGFzc29jaWF0ZWQgdXRpbGl0aWVzIHdoaWNoIGFyZSBmb3VuZCBpbiB0aGUgQVNNIHNvdXJjZSBqYXIuIFNpbmNlIHdlIGRvbid0Ci0gICAgICogd2FudCB0aGF0IGRlcGVuZGVuY3kgaW4gdGhlIHNvdXJjZSBjb2RlLCB3ZSBvbmx5IHB1dCBpdCBtYW51YWxseSBmb3IgZGV2ZWxvcG1lbnQgYW5kCi0gICAgICogYWNjZXNzIHRoZSBUcmFjZUNsYXNzVmlzaXRvciB2aWEgcmVmbGVjdGlvbiBpZiBwcmVzZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIHQgVGhlIGV4Y2VwdGlvbiB0aHJvd24gYnkge0BsaW5rIENsYXNzTG9hZGVyMiN0ZXN0TW9kaWZpZWRJbnN0YW5jZSgpfQotICAgICAqIEBwYXJhbSBjbDIgVGhlIHtAbGluayBDbGFzc0xvYWRlcjJ9IGluc3RhbmNlIHdpdGggdGhlIGdlbmVyYXRlZCBieXRlY29kZS4KLSAgICAgKiBAcmV0dXJuIEVpdGhlciBvcmlnaW5hbCB7QGNvZGUgdH0gb3IgYSBuZXcgd3JhcHBlciB7QGxpbmsgVGhyb3dhYmxlfQotICAgICAqLwotICAgIHByaXZhdGUgVGhyb3dhYmxlIGR1bXBHZW5lcmF0ZWRDbGFzcyhUaHJvd2FibGUgdCwgQ2xhc3NMb2FkZXIyIGNsMikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gRm9yIGRlYnVnZ2luZywgZHVtcCB0aGUgYnl0ZWNvZGUgb2YgdGhlIGNsYXNzIGluIGNhc2Ugb2YgdW5leHBlY3RlZCBlcnJvcgotICAgICAgICAgICAgLy8gaWYgd2UgY2FuIGZpbmQgdGhlIFRyYWNlQ2xhc3NWaXNpdG9yIGNsYXNzLgotICAgICAgICAgICAgQ2xhc3M8Pz4gdGN2Q2xhc3MgPSBDbGFzcy5mb3JOYW1lKCJvcmcub2JqZWN0d2ViLmFzbS51dGlsLlRyYWNlQ2xhc3NWaXNpdG9yIik7Ci0KLSAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICAgICAgc2IuYXBwZW5kKCdcbicpLmFwcGVuZCh0LmdldENsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpKTsKLSAgICAgICAgICAgIGlmICh0LmdldE1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCI6ICIpLmFwcGVuZCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIGJ5dGVbXT4gZW50cnkgOiBjbDIuZ2V0Qnl0ZUNvZGUoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBlbnRyeS5nZXRLZXkoKTsKLSAgICAgICAgICAgICAgICBieXRlW10gYnl0ZXMgPSBlbnRyeS5nZXRWYWx1ZSgpOwotCi0gICAgICAgICAgICAgICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgICAgICAgICAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLSAgICAgICAgICAgICAgICAvLyBuZXh0IDIgbGluZXMgZG86IFRyYWNlQ2xhc3NWaXNpdG9yIHRjdiA9IG5ldyBUcmFjZUNsYXNzVmlzaXRvcihwdyk7Ci0gICAgICAgICAgICAgICAgQ29uc3RydWN0b3I8Pz4gY29ucyA9IHRjdkNsYXNzLmdldENvbnN0cnVjdG9yKG5ldyBDbGFzczw/PltdIHsgcHcuZ2V0Q2xhc3MoKSB9KTsKLSAgICAgICAgICAgICAgICBPYmplY3QgdGN2ID0gY29ucy5uZXdJbnN0YW5jZShuZXcgT2JqZWN0W10geyBwdyB9KTsKLSAgICAgICAgICAgICAgICBDbGFzc1JlYWRlciBjcjIgPSBuZXcgQ2xhc3NSZWFkZXIoYnl0ZXMpOwotICAgICAgICAgICAgICAgIGNyMi5hY2NlcHQoKENsYXNzVmlzaXRvcikgdGN2LCAwIC8qIGZsYWdzICovKTsKLQotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiXG5CeXRlY29kZSBkdW1wOiA8IikuYXBwZW5kKGNsYXNzTmFtZSkuYXBwZW5kKCI+OlxuIikKLSAgICAgICAgICAgICAgICAgIC5hcHBlbmQoc3cudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFJlLXRocm93IGV4Y2VwdGlvbiB3aXRoIG5ldyBtZXNzYWdlCi0gICAgICAgICAgICBSdW50aW1lRXhjZXB0aW9uIGV4ID0gbmV3IFJ1bnRpbWVFeGNlcHRpb24oc2IudG9TdHJpbmcoKSwgdCk7Ci0gICAgICAgICAgICByZXR1cm4gZXg7Ci0gICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBpZ25vcmUpIHsKLSAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgcHJvYmxlbSwganVzdCB0aHJvdyB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uIGFzLWlzLgotICAgICAgICAgICAgcmV0dXJuIHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Mb2dUZXN0LmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTG9nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTVmNjUzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Mb2dUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuKjsKLQotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1wdWJsaWMgY2xhc3MgTG9nVGVzdCB7Ci0KLSAgICBwcml2YXRlIE1vY2tMb2cgbUxvZzsKLQotICAgIEBCZWZvcmUKLSAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBtTG9nID0gbmV3IE1vY2tMb2coKTsKLSAgICB9Ci0KLSAgICBAQWZ0ZXIKLSAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0RGVidWcoKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygiIiwgbUxvZy5nZXRPdXQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiIiwgbUxvZy5nZXRFcnIoKSk7Ci0KLSAgICAgICAgbUxvZy5zZXRWZXJib3NlKGZhbHNlKTsKLSAgICAgICAgbUxvZy5kZWJ1ZygiVGVzdCAlZCIsIDQyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIiLCBtTG9nLmdldE91dCgpKTsKLQotICAgICAgICBtTG9nLnNldFZlcmJvc2UodHJ1ZSk7Ci0gICAgICAgIG1Mb2cuZGVidWcoIlRlc3QgJWQiLCA0Mik7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJUZXN0IDQyXG4iLCBtTG9nLmdldE91dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIiLCBtTG9nLmdldEVycigpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RJbmZvKCkgewotICAgICAgICBhc3NlcnRFcXVhbHMoIiIsIG1Mb2cuZ2V0T3V0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIiIsIG1Mb2cuZ2V0RXJyKCkpOwotCi0gICAgICAgIG1Mb2cuaW5mbygiVGVzdCAlZCIsIDQzKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoIlRlc3QgNDNcbiIsIG1Mb2cuZ2V0T3V0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIiIsIG1Mb2cuZ2V0RXJyKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEVycm9yKCkgewotICAgICAgICBhc3NlcnRFcXVhbHMoIiIsIG1Mb2cuZ2V0T3V0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIiIsIG1Mb2cuZ2V0RXJyKCkpOwotCi0gICAgICAgIG1Mb2cuZXJyb3IoIlRlc3QgJWQiLCA0NCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIiLCBtTG9nLmdldE91dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJUZXN0IDQ0XG4iLCBtTG9nLmdldEVycigpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RFeGNlcHRpb24oKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygiIiwgbUxvZy5nZXRPdXQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiIiwgbUxvZy5nZXRFcnIoKSk7Ci0KLSAgICAgICAgRXhjZXB0aW9uIGUgPSBuZXcgRXhjZXB0aW9uKCJNeSBFeGNlcHRpb24iKTsKLSAgICAgICAgbUxvZy5leGNlcHRpb24oZSwgIlRlc3QgJWQiLCA0NCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIiLCBtTG9nLmdldE91dCgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtTG9nLmdldEVycigpLnN0YXJ0c1dpdGgoIlRlc3QgNDRcbmphdmEubGFuZy5FeGNlcHRpb246IE15IEV4Y2VwdGlvbiIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTW9ja0xvZy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL01vY2tMb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU3NTBhMy4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTW9ja0xvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotCi1wdWJsaWMgY2xhc3MgTW9ja0xvZyBleHRlbmRzIExvZyB7Ci0gICAgU3RyaW5nQnVpbGRlciBtT3V0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBTdHJpbmdCdWlsZGVyIG1FcnIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCi0gICAgcHVibGljIFN0cmluZyBnZXRPdXQoKSB7Ci0gICAgICAgIHJldHVybiBtT3V0LnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRFcnIoKSB7Ci0gICAgICAgIHJldHVybiBtRXJyLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb3V0UHJpbnRsbihTdHJpbmcgbXNnKSB7Ci0gICAgICAgIG1PdXQuYXBwZW5kKG1zZyk7Ci0gICAgICAgIG1PdXQuYXBwZW5kKCdcbicpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGVyclByaW50bG4oU3RyaW5nIG1zZykgewotICAgICAgICBtRXJyLmFwcGVuZChtc2cpOwotICAgICAgICBtRXJyLmFwcGVuZCgnXG4nKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUmVuYW1lQ2xhc3NBZGFwdGVyVGVzdC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1JlbmFtZUNsYXNzQWRhcHRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIxMWU3My4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUmVuYW1lQ2xhc3NBZGFwdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0Lio7Ci0KLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotLyoqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUmVuYW1lQ2xhc3NBZGFwdGVyVGVzdCB7Ci0KLSAgICBwcml2YXRlIFJlbmFtZUNsYXNzQWRhcHRlciBtT3V0ZXI7Ci0gICAgcHJpdmF0ZSBSZW5hbWVDbGFzc0FkYXB0ZXIgbUlubmVyOwotCi0gICAgQEJlZm9yZQotICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG1PdXRlciA9IG5ldyBSZW5hbWVDbGFzc0FkYXB0ZXIobnVsbCwgLy8gY3YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5wYWNrLk9sZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuYmxhaC5OZXciKTsKLQotICAgICAgICBtSW5uZXIgPSBuZXcgUmVuYW1lQ2xhc3NBZGFwdGVyKG51bGwsIC8vIGN2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20ucGFjay5PbGQkSW5uZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmJsYWguTmV3JElubmVyIik7Ci0gICAgfQotCi0gICAgQEFmdGVyCi0gICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW5hbWVzIGEgdHlwZSwgZS5nLiAiTGNvbS5wYWNrYWdlLk15OyIKLSAgICAgKiBJZiB0aGUgdHlwZSBkb2Vzbid0IG5lZWQgdG8gYmUgcmVuYW1lZCwgcmV0dXJucyB0aGUgaW5wdXQgc3RyaW5nIGFzLWlzLgotICAgICAqLwotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdFJlbmFtZVR5cGVEZXNjKCkgewotCi0gICAgICAgIC8vIHByaW1pdGl2ZSB0eXBlcyBhcmUgbGVmdCB1bnRvdWNoZWQKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJJIiwgbU91dGVyLnJlbmFtZVR5cGVEZXNjKCJJIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkQiLCBtT3V0ZXIucmVuYW1lVHlwZURlc2MoIkQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiViIsIG1PdXRlci5yZW5hbWVUeXBlRGVzYygiViIpKTsKLQotICAgICAgICAvLyBvYmplY3QgdHlwZXMgdGhhdCBuZWVkIG5vIHJlbmFtaW5nIGFyZSBsZWZ0IHVudG91Y2hlZAotICAgICAgICBhc3NlcnRFcXVhbHMoIkxjb20ucGFja2FnZS5NeUNsYXNzOyIsIG1PdXRlci5yZW5hbWVUeXBlRGVzYygiTGNvbS5wYWNrYWdlLk15Q2xhc3M7IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkxjb20ucGFja2FnZS5NeUNsYXNzOyIsIG1Jbm5lci5yZW5hbWVUeXBlRGVzYygiTGNvbS5wYWNrYWdlLk15Q2xhc3M7IikpOwotCi0gICAgICAgIC8vIG9iamVjdCB0eXBlcyB0aGF0IG1hdGNoIHRoZSByZXF1aXJlbWVudHMKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJMb3JnLmJsYWguTmV3OyIsIG1PdXRlci5yZW5hbWVUeXBlRGVzYygiTGNvbS5wYWNrLk9sZDsiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiTG9yZy5ibGFoLk5ldyRJbm5lcjsiLCBtSW5uZXIucmVuYW1lVHlwZURlc2MoIkxjb20ucGFjay5PbGQkSW5uZXI7IikpOwotICAgICAgICAvLyBpbm5lciBjbGFzc2VzIG1hdGNoIHRoZSBiYXNlIHR5cGUgd2hpY2ggaXMgYmVpbmcgcmVuYW1lZAotICAgICAgICBhc3NlcnRFcXVhbHMoIkxvcmcuYmxhaC5OZXckT3RoZXI7IiwgbU91dGVyLnJlbmFtZVR5cGVEZXNjKCJMY29tLnBhY2suT2xkJE90aGVyOyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJMb3JnLmJsYWguTmV3JE90aGVyOyIsIG1Jbm5lci5yZW5hbWVUeXBlRGVzYygiTGNvbS5wYWNrLk9sZCRPdGhlcjsiKSk7Ci0KLSAgICAgICAgLy8gYXJyYXlzCi0gICAgICAgIGFzc2VydEVxdWFscygiW0xvcmcuYmxhaC5OZXc7IiwgIG1PdXRlci5yZW5hbWVUeXBlRGVzYygiW0xjb20ucGFjay5PbGQ7IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIltbTG9yZy5ibGFoLk5ldzsiLCBtT3V0ZXIucmVuYW1lVHlwZURlc2MoIltbTGNvbS5wYWNrLk9sZDsiKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJbTG9yZy5ibGFoLk5ldzsiLCAgbUlubmVyLnJlbmFtZVR5cGVEZXNjKCJbTGNvbS5wYWNrLk9sZDsiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiW1tMb3JnLmJsYWguTmV3OyIsIG1Jbm5lci5yZW5hbWVUeXBlRGVzYygiW1tMY29tLnBhY2suT2xkOyIpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW5hbWVzIGFuIG9iamVjdCB0eXBlLCBlLmcuICJMY29tLnBhY2thZ2UuTXlDbGFzczsiIG9yIGFuIGFycmF5IHR5cGUgdGhhdCBoYXMgYW4KLSAgICAgKiBvYmplY3QgZWxlbWVudCwgZS5nLiAiW0xjb20ucGFja2FnZS5NeUNsYXNzOyIKLSAgICAgKiBJZiB0aGUgdHlwZSBkb2Vzbid0IG5lZWQgdG8gYmUgcmVuYW1lZCwgcmV0dXJucyB0aGUgaW50ZXJuYWwgbmFtZSBvZiB0aGUgaW5wdXQgdHlwZS4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVUeXBlKCkgewotICAgICAgICAvLyBTa2lwLiBUaGlzIGlzIGFjdHVhbGx5IHRlc3RlZCBieSB0ZXN0UmVuYW1lVHlwZURlc2MgYWJvdmUuCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVuYW1lcyBhbiBpbnRlcm5hbCB0eXBlIG5hbWUsIGUuZy4gImNvbS5wYWNrYWdlLk15Q2xhc3MiLgotICAgICAqIElmIHRoZSB0eXBlIGRvZXNuJ3QgbmVlZCB0byBiZSByZW5hbWVkLCByZXR1cm5zIHRoZSBpbnB1dCBzdHJpbmcgYXMtaXMuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lSW50ZXJuYWxUeXBlKCkgewotICAgICAgICAvLyBhbiBhY3R1YWwgRlFDTgotICAgICAgICBhc3NlcnRFcXVhbHMoIm9yZy5ibGFoLk5ldyIsIG1PdXRlci5yZW5hbWVJbnRlcm5hbFR5cGUoImNvbS5wYWNrLk9sZCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJvcmcuYmxhaC5OZXckSW5uZXIiLCBtT3V0ZXIucmVuYW1lSW50ZXJuYWxUeXBlKCJjb20ucGFjay5PbGQkSW5uZXIiKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJvcmcuYmxhaC5OZXckT3RoZXIiLCBtSW5uZXIucmVuYW1lSW50ZXJuYWxUeXBlKCJjb20ucGFjay5PbGQkT3RoZXIiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygib3JnLmJsYWguTmV3JE90aGVyIiwgbUlubmVyLnJlbmFtZUludGVybmFsVHlwZSgiY29tLnBhY2suT2xkJE90aGVyIikpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbmFtZXMgYSBtZXRob2QgZGVzY3JpcHRvciwgaS5lLiBhcHBsaWVzIHJlbmFtZVR5cGUgdG8gYWxsIGFyZ3VtZW50cyBhbmQgdG8gdGhlCi0gICAgICogcmV0dXJuIHZhbHVlLgotICAgICAqLwotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdFJlbmFtZU1ldGhvZERlc2MoKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygiKElETG9yZy5ibGFoLk5ldztbTG9yZy5ibGFoLk5ldyRJbm5lcjspTG9yZy5ibGFoLk5ldyRPdGhlcjsiLAotICAgICAgICAgICAgICAgbU91dGVyLnJlbmFtZU1ldGhvZERlc2MoIihJRExjb20ucGFjay5PbGQ7W0xjb20ucGFjay5PbGQkSW5uZXI7KUxjb20ucGFjay5PbGQkT3RoZXI7IikpOwotICAgIH0KLQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvQ2xhc3NXaXRoTmF0aXZlLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL0NsYXNzV2l0aE5hdGl2ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzE0ODUzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvQ2xhc3NXaXRoTmF0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLmRhdGFjbGFzczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0OwotCi0vKioKLSAqIER1bW15IHRlc3QgY2xhc3Mgd2l0aCBhIG5hdGl2ZSBtZXRob2QuCi0gKiBUaGUgbmF0aXZlIG1ldGhvZCBpcyBub3QgZGVmaW5lZCBhbmQgYW55IGF0dGVtcHQgdG8gaW52b2tlIGl0IHdpbGwKLSAqIHRocm93IGFuIHtAbGluayBVbnNhdGlzZmllZExpbmtFcnJvcn0uCi0gKgotICogVXNlZCBieSB7QGxpbmsgRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0fS4KLSAqLwotcHVibGljIGNsYXNzIENsYXNzV2l0aE5hdGl2ZSB7Ci0gICAgcHVibGljIENsYXNzV2l0aE5hdGl2ZSgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGFkZChpbnQgYSwgaW50IGIpIHsKLSAgICAgICAgcmV0dXJuIGEgKyBiOwotICAgIH0KLQotICAgIC8vIE5vdGU6IGl0J3MgZ29vZCB0byBoYXZlIGEgbG9uZyBvciBkb3VibGUgZm9yIHRlc3RpbmcgcGFyYW1ldGVycyBzaW5jZSB0aGV5IHRha2UKLSAgICAvLyAyIHNsb3RzIGluIHRoZSBzdGFjay9sb2NhbHMgbWFwcy4KLQotICAgIHB1YmxpYyBpbnQgY2FsbE5hdGl2ZUluc3RhbmNlKGludCBhLCBkb3VibGUgZCwgT2JqZWN0W10gbykgewotICAgICAgICByZXR1cm4gbmF0aXZlX2luc3RhbmNlKGEsIGQsIG8pOwotICAgIH0KLQotICAgIHByaXZhdGUgbmF0aXZlIGludCBuYXRpdmVfaW5zdGFuY2UoaW50IGEsIGRvdWJsZSBkLCBPYmplY3RbXSBvKTsKLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL2RhdGFjbGFzcy9DbGFzc1dpdGhOYXRpdmVfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvQ2xhc3NXaXRoTmF0aXZlX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZDRkYzYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL2RhdGFjbGFzcy9DbGFzc1dpdGhOYXRpdmVfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuZGF0YWNsYXNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5EZWxlZ2F0ZUNsYXNzQWRhcHRlclRlc3Q7Ci0KLS8qKgotICogVGhlIGRlbGVnYXRlIHRoYXQgcmVjZWl2ZXMgdGhlIGNhbGwgdG8ge0BsaW5rIENsYXNzV2l0aE5hdGl2ZV9EZWxlZ2F0ZX0ncyBvdmVycmlkZGVuIG1ldGhvZHMuCi0gKgotICogVXNlZCBieSB7QGxpbmsgRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0fS4KLSAqLwotcHVibGljIGNsYXNzIENsYXNzV2l0aE5hdGl2ZV9EZWxlZ2F0ZSB7Ci0gICAgcHVibGljIHN0YXRpYyBpbnQgbmF0aXZlX2luc3RhbmNlKENsYXNzV2l0aE5hdGl2ZSBpbnN0YW5jZSwgaW50IGEsIGRvdWJsZSBkLCBPYmplY3RbXSBvKSB7Ci0gICAgICAgIGlmIChvICE9IG51bGwgJiYgby5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICBvWzBdID0gaW5zdGFuY2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIChpbnQpKGEgKyBkKTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvSmF2YUNsYXNzLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL0phdmFDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjVhOTE4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvSmF2YUNsYXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuZGF0YWNsYXNzOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSmF2YUNsYXNzIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHRlc3QgPSAidGVzdCI7Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL091dGVyQ2xhc3MuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDgzZTc2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5kYXRhY2xhc3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLkRlbGVnYXRlQ2xhc3NBZGFwdGVyVGVzdDsKLQotLyoqCi0gKiBUZXN0IGNsYXNzIHdpdGggYW4gaW5uZXIgY2xhc3MuCi0gKgotICogVXNlZCBieSB7QGxpbmsgRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0fS4KLSAqLwotcHVibGljIGNsYXNzIE91dGVyQ2xhc3MgewotICAgIHByaXZhdGUgaW50IG1PdXRlclZhbHVlID0gMTsKLSAgICBwdWJsaWMgT3V0ZXJDbGFzcygpIHsKLSAgICB9Ci0KLSAgICAvLyBPdXRlci5nZXQgcmV0dXJucyAxICsgYSArIGIKLSAgICAvLyBOb3RlOiBpdCdzIGdvb2QgdG8gaGF2ZSBhIGxvbmcgb3IgZG91YmxlIGZvciB0ZXN0aW5nIHBhcmFtZXRlcnMgc2luY2UgdGhleSB0YWtlCi0gICAgLy8gMiBzbG90cyBpbiB0aGUgc3RhY2svbG9jYWxzIG1hcHMuCi0gICAgcHVibGljIGludCBnZXQoaW50IGEsIGxvbmcgYikgewotICAgICAgICByZXR1cm4gbU91dGVyVmFsdWUgKyBhICsgKGludCkgYjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgY2xhc3MgSW5uZXJDbGFzcyB7Ci0gICAgICAgIHB1YmxpYyBJbm5lckNsYXNzKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW5uZXIuZ2V0IHJldHVybnMgMiArIDEgKyBhICsgYgotICAgICAgICBwdWJsaWMgaW50IGdldChpbnQgYSwgbG9uZyBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gMiArIG1PdXRlclZhbHVlICsgYSArIChpbnQpIGI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgICBwcml2YXRlIFN0cmluZyBwcml2YXRlTWV0aG9kKCkgewotICAgICAgICByZXR1cm4gIm91dGVyUHJpdmF0ZU1ldGhvZCI7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL091dGVyQ2xhc3NfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzc19EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzRiZThlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzc19EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5kYXRhY2xhc3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLkRlbGVnYXRlQ2xhc3NBZGFwdGVyVGVzdDsKLQotLyoqCi0gKiBVc2VkIGJ5IHtAbGluayBEZWxlZ2F0ZUNsYXNzQWRhcHRlclRlc3R9LgotICovCi1wdWJsaWMgY2xhc3MgT3V0ZXJDbGFzc19EZWxlZ2F0ZSB7Ci0gICAgLy8gVGhlIGRlbGVnYXRlIG92ZXJyaWRlIG9mIE91dGVyLmdldCByZXR1cm5zIDQgKyBhICsgYgotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldChPdXRlckNsYXNzIGluc3RhbmNlLCBpbnQgYSwgbG9uZyBiKSB7Ci0gICAgICAgIHJldHVybiA0ICsgYSArIChpbnQpIGI7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcHJpdmF0ZU1ldGhvZChPdXRlckNsYXNzIGluc3RhbmNlKSB7Ci0gICAgICAgIHJldHVybiAib3V0ZXJQcml2YXRlX0RlbGVnYXRlIjsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzc19Jbm5lckNsYXNzX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL091dGVyQ2xhc3NfSW5uZXJDbGFzc19EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDcyMjIwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzc19Jbm5lckNsYXNzX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLmRhdGFjbGFzczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0OwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuZGF0YWNsYXNzLk91dGVyQ2xhc3MuSW5uZXJDbGFzczsKLQotLyoqCi0gKiBVc2VkIGJ5IHtAbGluayBEZWxlZ2F0ZUNsYXNzQWRhcHRlclRlc3R9LgotICovCi1wdWJsaWMgY2xhc3MgT3V0ZXJDbGFzc19Jbm5lckNsYXNzX0RlbGVnYXRlIHsKLSAgICAvLyBUaGUgZGVsZWdhdGUgb3ZlcnJpZGUgb2YgSW5uZXIuZ2V0IHJldHVybiA2ICsgYSArIGIKLSAgICBwdWJsaWMgc3RhdGljIGludCBnZXQoT3V0ZXJDbGFzcyBvdXRlciwgSW5uZXJDbGFzcyBpbm5lciwgaW50IGEsIGxvbmcgYikgewotICAgICAgICByZXR1cm4gNiArIGEgKyAoaW50KSBiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvZGF0YS9tb2NrX2FuZHJvaWQuamFyIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9kYXRhL21vY2tfYW5kcm9pZC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZDhlZmIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9kYXRhL21vY2tfYW5kcm9pZC5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9qYXZhL2xhbmcvSmF2YUNsYXNzLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9qYXZhL2xhbmcvSmF2YUNsYXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NjEyZTkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvamF2YS9sYW5nL0phdmFDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBqYXZhLmxhbmc7Ci0KLXB1YmxpYyBjbGFzcyBKYXZhQ2xhc3MgewotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdGVzdCA9ICJ0ZXN0IjsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC9kdW1teS9Jbm5lclRlc3QuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC9kdW1teS9Jbm5lclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNhMWQwNS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9tb2NrX2FuZHJvaWQvZHVtbXkvSW5uZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG1vY2tfYW5kcm9pZC5kdW1teTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgY2xhc3MgSW5uZXJUZXN0IHsKLQotICAgIHByaXZhdGUgaW50IG1Tb21lRmllbGQ7Ci0gICAgcHJpdmF0ZSBNeVN0YXRpY0lubmVyQ2xhc3MgbUlubmVySW5zdGFuY2U7Ci0gICAgcHJpdmF0ZSBNeUludEVudW0gbVRoZUludEVudW07Ci0gICAgcHJpdmF0ZSBNeUdlbmVyaWNzMTxpbnRbXVtdLCBJbm5lclRlc3QsIE15SW50RW51bSwgZmxvYXRbXT4gbUdlbmVyaWMxOwotCi0gICAgcHVibGljIGNsYXNzIE5vdFN0YXRpY0lubmVyMiBleHRlbmRzIE5vdFN0YXRpY0lubmVyMSB7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgY2xhc3MgTm90U3RhdGljSW5uZXIxIHsKLQotICAgICAgICBwdWJsaWMgdm9pZCBzb21lVGhpbmcoKSB7Ci0gICAgICAgICAgICBtU29tZUZpZWxkID0gMjsKLSAgICAgICAgICAgIG1Jbm5lckluc3RhbmNlID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlTdGF0aWNJbm5lckNsYXNzIHsKLQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEZXJpdmluZ0NsYXNzIGV4dGVuZHMgSW5uZXJUZXN0IHsKLSAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vIGVudW1zIGFyZSBhIGtpbmQgb2YgaW5uZXIgc3RhdGljIGNsYXNzCi0gICAgcHVibGljIGVudW0gTXlJbnRFbnVtIHsKLSAgICAgICAgVkFMVUUwKDApLAotICAgICAgICBWQUxVRTEoMSksCi0gICAgICAgIFZBTFVFMigyKTsKLQotICAgICAgICBNeUludEVudW0oaW50IG15SW50KSB7Ci0gICAgICAgICAgICB0aGlzLm15SW50ID0gbXlJbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgaW50IG15SW50OwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIE15R2VuZXJpY3MxPFQsIFUsIFYsIFc+IHsKLSAgICAgICAgcHVibGljIE15R2VuZXJpY3MxKCkgewotICAgICAgICAgICAgaW50IGEgPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyA8WD4gdm9pZCBnZW5lcmljTWV0aG9kMShYIGEsIFhbXSBiKSB7Ci0gICAgfQotCi0gICAgcHVibGljIDxYLCBZPiB2b2lkIGdlbmVyaWNNZXRob2QyKFggYSwgTGlzdDxZPiBiKSB7Ci0gICAgfQotCi0gICAgcHVibGljIDxYLCBZIGV4dGVuZHMgSW5uZXJUZXN0PiB2b2lkIGdlbmVyaWNNZXRob2QzKFggYSwgTGlzdDxZPiBiKSB7Ci0gICAgfQotCi0gICAgcHVibGljIDxUIGV4dGVuZHMgSW5uZXJUZXN0PiB2b2lkIGdlbmVyaWNNZXRob2Q0KFRbXSBhLCBDb2xsZWN0aW9uPFQ+IGIsIENvbGxlY3Rpb248Pz4gYykgewotICAgICAgICBJdGVyYXRvcjxUPiBpID0gYi5pdGVyYXRvcigpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNvbWVNZXRob2QoSW5uZXJUZXN0IHNlbGYpIHsKLSAgICAgICAgbVNvbWVGaWVsZCA9IHNlbGYubVNvbWVGaWVsZDsKLSAgICAgICAgTXlTdGF0aWNJbm5lckNsYXNzIG0gPSBuZXcgTXlTdGF0aWNJbm5lckNsYXNzKCk7Ci0gICAgICAgIG1Jbm5lckluc3RhbmNlID0gbTsKLSAgICAgICAgbVRoZUludEVudW0gPSBudWxsOwotICAgICAgICBtR2VuZXJpYzEgPSBuZXcgTXlHZW5lcmljczEoKTsKLSAgICAgICAgZ2VuZXJpY01ldGhvZDQobmV3IERlcml2aW5nQ2xhc3NbMF0sIG5ldyBBcnJheUxpc3Q8RGVyaXZpbmdDbGFzcz4oKSwgbmV3IEFycmF5TGlzdDxJbm5lclRlc3Q+KCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC92aWV3L1ZpZXcuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC92aWV3L1ZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRlYzhhOS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9tb2NrX2FuZHJvaWQvdmlldy9WaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG1vY2tfYW5kcm9pZC52aWV3OwotCi1pbXBvcnQgamF2YS5sYW5nLkphdmFDbGFzczsKLQotcHVibGljIGNsYXNzIFZpZXcgewotCi0gICAgICAgIFN0cmluZyB4ID0gSmF2YUNsYXNzLnRlc3Q7Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC92aWV3L1ZpZXdHcm91cC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvbW9ja19hbmRyb2lkL3ZpZXcvVmlld0dyb3VwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NjQ3MGYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvbW9ja19hbmRyb2lkL3ZpZXcvVmlld0dyb3VwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG1vY2tfYW5kcm9pZC52aWV3OwotCi1wdWJsaWMgY2xhc3MgVmlld0dyb3VwIGV4dGVuZHMgVmlldyB7Ci0KLSAgICBwdWJsaWMgY2xhc3MgTWFyZ2luTGF5b3V0UGFyYW1zIGV4dGVuZHMgTGF5b3V0UGFyYW1zIHsKLQotICAgIH0KLQotICAgIHB1YmxpYyBjbGFzcyBMYXlvdXRQYXJhbXMgewotCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9tb2NrX2FuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvbW9ja19hbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg3MGE2My4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9tb2NrX2FuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBtb2NrX2FuZHJvaWQud2lkZ2V0OwotCi1pbXBvcnQgbW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotCi1wdWJsaWMgY2xhc3MgTGluZWFyTGF5b3V0IGV4dGVuZHMgVmlld0dyb3VwIHsKLQotICAgIHB1YmxpYyBjbGFzcyBMYXlvdXRQYXJhbXMgZXh0ZW5kcyBtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zIHsKLQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvbW9ja19hbmRyb2lkL3dpZGdldC9UYWJsZUxheW91dC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvbW9ja19hbmRyb2lkL3dpZGdldC9UYWJsZUxheW91dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDU1ZTdkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC93aWRnZXQvVGFibGVMYXlvdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDEuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgbW9ja19hbmRyb2lkLndpZGdldDsKLQotaW1wb3J0IG1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLQotcHVibGljIGNsYXNzIFRhYmxlTGF5b3V0IGV4dGVuZHMgVmlld0dyb3VwIHsKLQotICAgIHB1YmxpYyBjbGFzcyBMYXlvdXRQYXJhbXMgZXh0ZW5kcyBNYXJnaW5MYXlvdXRQYXJhbXMgewotCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9vYmJ0b29sL0FuZHJvaWQubWsgYi90b29scy9vYmJ0b29sL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZjU2ZDYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvb2JidG9vbC9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIE9wYXF1ZSBCaW5hcnkgQmxvYiAoT0JCKSBUb29sCi0jCi0KLSMgVGhpcyB0b29sIGlzIHByZWJ1aWx0IGlmIHdlJ3JlIGRvaW5nIGFuIGFwcC1vbmx5IGJ1aWxkLgotaWZlcSAoJChUQVJHRVRfQlVJTERfQVBQUyksKQotCi1MT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVMgOj0gXAotCU1haW4uY3BwCi0KLUxPQ0FMX0NGTEFHUyA6PSAtV2FsbCAtV2Vycm9yCi0KLSNMT0NBTF9DX0lOQ0xVREVTICs9Ci0KLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gXAotCWxpYmFuZHJvaWRmdyBcCi0JbGlidXRpbHMgXAotCWxpYmN1dGlscyBcCi0JbGlibG9nCi0KLWlmZXEgKCQoSE9TVF9PUyksbGludXgpCi1MT0NBTF9MRExJQlMgKz0gLWxkbCAtbHB0aHJlYWQKLWVuZGlmCi0KLUxPQ0FMX01PRFVMRSA6PSBvYmJ0b29sCi0KLWluY2x1ZGUgJChCVUlMRF9IT1NUX0VYRUNVVEFCTEUpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IHBia2RmMmdlbgotTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKLUxPQ0FMX0NGTEFHUyA6PSAtV2FsbCAtV2Vycm9yCi1MT0NBTF9TUkNfRklMRVMgOj0gcGJrZGYyZ2VuLmNwcAotTE9DQUxfTERMSUJTICs9IC1sZGwKLUxPQ0FMX0NfSU5DTFVERVMgOj0gZXh0ZXJuYWwvb3BlbnNzbC9pbmNsdWRlICQoTE9DQUxfQ19JTkNMVURFUykKLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY3J5cHRvX3N0YXRpYwotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9FWEVDVVRBQkxFKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1lbmRpZiAjIFRBUkdFVF9CVUlMRF9BUFBTCmRpZmYgLS1naXQgYS90b29scy9vYmJ0b29sL01haW4uY3BwIGIvdG9vbHMvb2JidG9vbC9NYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIxNTJlOC4uMDAwMDAwMAotLS0gYS90b29scy9vYmJ0b29sL01haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L09iYkZpbGUuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLSNpbmNsdWRlIDxnZXRvcHQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGdQcm9nTmFtZSA9ICJvYmJ0b29sIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBnUHJvZ1ZlcnNpb24gPSAiMS4wIjsKLQotc3RhdGljIGludCB3YW50VXNhZ2UgPSAwOwotc3RhdGljIGludCB3YW50VmVyc2lvbiA9IDA7Ci0KLSNkZWZpbmUgU0FMVF9MRU4gOAotCi0jZGVmaW5lIEFERF9PUFRTICJuOnY6b3M6Igotc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9uZ29wdHNbXSA9IHsKLSAgICB7ImhlbHAiLCAgICAgICBub19hcmd1bWVudCwgJndhbnRVc2FnZSwgICAxfSwKLSAgICB7InZlcnNpb24iLCAgICBub19hcmd1bWVudCwgJndhbnRWZXJzaW9uLCAxfSwKLQotICAgIC8qIEFyZ3MgZm9yICJhZGQiICovCi0gICAgeyJuYW1lIiwgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICduJ30sCi0gICAgeyJ2ZXJzaW9uIiwgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICd2J30sCi0gICAgeyJvdmVybGF5IiwgICAgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEwsICdvJ30sCi0gICAgeyJzYWx0IiwgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdzJ30sCi0KLSAgICB7TlVMTCwgMCwgTlVMTCwgJ1wwJ30KLX07Ci0KLWNsYXNzIFBhY2thZ2VJbmZvIHsKLXB1YmxpYzoKLSAgICBQYWNrYWdlSW5mbygpCi0gICAgICAgICAgICA6IHBhY2thZ2VOYW1lKE5VTEwpCi0gICAgICAgICAgICAsIHBhY2thZ2VWZXJzaW9uKC0xKQotICAgICAgICAgICAgLCBvdmVybGF5KGZhbHNlKQotICAgICAgICAgICAgLCBzYWx0ZWQoZmFsc2UpCi0gICAgewotICAgICAgICBtZW1zZXQoJnNhbHQsIDAsIHNpemVvZihzYWx0KSk7Ci0gICAgfQotCi0gICAgY2hhciogcGFja2FnZU5hbWU7Ci0gICAgaW50IHBhY2thZ2VWZXJzaW9uOwotICAgIGJvb2wgb3ZlcmxheTsKLSAgICBib29sIHNhbHRlZDsKLSAgICB1bnNpZ25lZCBjaGFyIHNhbHRbU0FMVF9MRU5dOwotfTsKLQotLyoKLSAqIFByaW50IHVzYWdlIGluZm8uCi0gKi8KLXZvaWQgdXNhZ2Uodm9pZCkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIk9wYXF1ZSBCaW5hcnkgQmxvYiAoT0JCKSBUb29sXG5cbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6XG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyBhW2RkXSBbIE9QVElPTlMgXSBGSUxFTkFNRVxuIgotICAgICAgICAiICAgQWRkcyBhbiBPQkIgc2lnbmF0dXJlIHRvIHRoZSBmaWxlLlxuXG4iLCBnUHJvZ05hbWUpOwotICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAiICAgT3B0aW9uczpcbiIKLSAgICAgICAgIiAgICAgLW4gPHBhY2thZ2UgbmFtZT4gICAgICBzZXRzIHRoZSBPQkIgcGFja2FnZSBuYW1lIChyZXF1aXJlZClcbiIKLSAgICAgICAgIiAgICAgLXYgPE9CQiB2ZXJzaW9uPiAgICAgICBzZXRzIHRoZSBPQkIgdmVyc2lvbiAocmVxdWlyZWQpXG4iCi0gICAgICAgICIgICAgIC1vICAgICAgICAgICAgICAgICAgICAgc2V0cyB0aGUgT0JCIG92ZXJsYXkgZmxhZ1xuIgotICAgICAgICAiICAgICAtcyA8OCBieXRlIGhleCBzYWx0PiAgIHNldHMgdGhlIGNyeXB0byBrZXkgc2FsdCAoaWYgZW5jcnlwdGVkKVxuIgotICAgICAgICAiXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyByW2Vtb3ZlXSBGSUxFTkFNRVxuIgotICAgICAgICAiICAgUmVtb3ZlcyB0aGUgT0JCIHNpZ25hdHVyZSBmcm9tIHRoZSBmaWxlLlxuXG4iLCBnUHJvZ05hbWUpOwotICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAiICVzIGlbbmZvXSBGSUxFTkFNRVxuIgotICAgICAgICAiICAgUHJpbnRzIHRoZSBPQkIgc2lnbmF0dXJlIGluZm9ybWF0aW9uIG9mIGEgZmlsZS5cblxuIiwgZ1Byb2dOYW1lKTsKLX0KLQotdm9pZCBkb0FkZChjb25zdCBjaGFyKiBmaWxlbmFtZSwgc3RydWN0IFBhY2thZ2VJbmZvKiBpbmZvKSB7Ci0gICAgT2JiRmlsZSAqb2JiID0gbmV3IE9iYkZpbGUoKTsKLSAgICBpZiAob2JiLT5yZWFkRnJvbShmaWxlbmFtZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJXM6IE9CQiBzaWduYXR1cmUgYWxyZWFkeSBwcmVzZW50XG4iLCBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBvYmItPnNldFBhY2thZ2VOYW1lKFN0cmluZzgoaW5mby0+cGFja2FnZU5hbWUpKTsKLSAgICBvYmItPnNldFZlcnNpb24oaW5mby0+cGFja2FnZVZlcnNpb24pOwotICAgIG9iYi0+c2V0T3ZlcmxheShpbmZvLT5vdmVybGF5KTsKLSAgICBpZiAoaW5mby0+c2FsdGVkKSB7Ci0gICAgICAgIG9iYi0+c2V0U2FsdChpbmZvLT5zYWx0LCBTQUxUX0xFTik7Ci0gICAgfQotCi0gICAgaWYgKCFvYmItPndyaXRlVG8oZmlsZW5hbWUpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICVzOiBjb3VsZG4ndCB3cml0ZSBPQkIgc2lnbmF0dXJlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZwcmludGYoc3RkZXJyLCAiT0JCIHNpZ25hdHVyZSBzdWNjZXNzZnVsbHkgd3JpdHRlblxuIik7Ci19Ci0KLXZvaWQgZG9SZW1vdmUoY29uc3QgY2hhciogZmlsZW5hbWUpIHsKLSAgICBPYmJGaWxlICpvYmIgPSBuZXcgT2JiRmlsZSgpOwotICAgIGlmICghb2JiLT5yZWFkRnJvbShmaWxlbmFtZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJXM6IG5vIE9CQiBzaWduYXR1cmUgcHJlc2VudFxuIiwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFvYmItPnJlbW92ZUZyb20oZmlsZW5hbWUpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICVzOiBjb3VsZG4ndCByZW1vdmUgT0JCIHNpZ25hdHVyZVxuIiwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZnByaW50ZihzdGRlcnIsICJPQkIgc2lnbmF0dXJlIHN1Y2Nlc3NmdWxseSByZW1vdmVkXG4iKTsKLX0KLQotdm9pZCBkb0luZm8oY29uc3QgY2hhciogZmlsZW5hbWUpIHsKLSAgICBPYmJGaWxlICpvYmIgPSBuZXcgT2JiRmlsZSgpOwotICAgIGlmICghb2JiLT5yZWFkRnJvbShmaWxlbmFtZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJXM6IGNvdWxkbid0IHJlYWQgT0JCIHNpZ25hdHVyZVxuIiwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJpbnRmKCJPQkIgaW5mbyBmb3IgJyVzJzpcbiIsIGZpbGVuYW1lKTsKLSAgICBwcmludGYoIlBhY2thZ2UgbmFtZTogJXNcbiIsIG9iYi0+Z2V0UGFja2FnZU5hbWUoKS5zdHJpbmcoKSk7Ci0gICAgcHJpbnRmKCIgICAgIFZlcnNpb246ICVkXG4iLCBvYmItPmdldFZlcnNpb24oKSk7Ci0gICAgcHJpbnRmKCIgICAgICAgRmxhZ3M6IDB4JTA4eFxuIiwgb2JiLT5nZXRGbGFncygpKTsKLSAgICBwcmludGYoIiAgICAgT3ZlcmxheTogJXNcbiIsIG9iYi0+aXNPdmVybGF5KCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICBwcmludGYoIiAgICAgICAgU2FsdDogIik7Ci0KLSAgICBzaXplX3Qgc2FsdExlbjsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzYWx0ID0gb2JiLT5nZXRTYWx0KCZzYWx0TGVuKTsKLSAgICBpZiAoc2FsdCAhPSBOVUxMKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0FMVF9MRU47IGkrKykgewotICAgICAgICAgICAgcHJpbnRmKCIlMDJ4Iiwgc2FsdFtpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50ZigiPGVtcHR5PlxuIik7Ci0gICAgfQotfQotCi1ib29sIGZyb21IZXgoY2hhciBoLCB1bnNpZ25lZCBjaGFyICpiKSB7Ci0gICAgaWYgKGggPj0gJzAnICYmIGggPD0gJzknKSB7Ci0gICAgICAgICpiID0gaCAtICcwJzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChoID49ICdhJyAmJiBoIDw9ICdmJykgewotICAgICAgICAqYiA9IGggLSAnYScgKyAxMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChoID49ICdBJyAmJiBoIDw9ICdGJykgewotICAgICAgICAqYiA9IGggLSAnQScgKyAxMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBoZXhUb0J5dGUoY2hhciBoMSwgY2hhciBoMiwgdW5zaWduZWQgY2hhciogYikgewotICAgIHVuc2lnbmVkIGNoYXIgZmlyc3QsIHNlY29uZDsKLSAgICBpZiAoIWZyb21IZXgoaDEsICZmaXJzdCkpIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWZyb21IZXgoaDIsICZzZWNvbmQpKSByZXR1cm4gZmFsc2U7Ci0gICAgKmIgPSAoZmlyc3QgPDwgNCkgfCBzZWNvbmQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBQYXJzZSBhcmdzLgotICovCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciogY29uc3QgYXJndltdKQotewotICAgIGludCBvcHQ7Ci0gICAgaW50IG9wdGlvbl9pbmRleCA9IDA7Ci0gICAgc3RydWN0IFBhY2thZ2VJbmZvIHBhY2thZ2VfaW5mbzsKLQotICAgIGludCByZXN1bHQgPSAxOyAgICAvLyBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIGFuIGVycm9yLgotCi0gICAgaWYgKGFyZ2MgPCAyKSB7Ci0gICAgICAgIHdhbnRVc2FnZSA9IDE7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICB3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIEFERF9PUFRTLCBsb25nb3B0cywgJm9wdGlvbl9pbmRleCkpICE9IC0xKSB7Ci0gICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIGlmIChsb25nb3B0c1tvcHRpb25faW5kZXhdLmZsYWcpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiclcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIsIGxvbmdvcHRzW29wdGlvbl9pbmRleF0ubmFtZSk7Ci0gICAgICAgICAgICB3YW50VXNhZ2UgPSAxOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgIHBhY2thZ2VfaW5mby5wYWNrYWdlTmFtZSA9IG9wdGFyZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd2JzogewotICAgICAgICAgICAgY2hhciogZW5kOwotICAgICAgICAgICAgcGFja2FnZV9pbmZvLnBhY2thZ2VWZXJzaW9uID0gc3RydG9sKG9wdGFyZywgJmVuZCwgMTApOwotICAgICAgICAgICAgaWYgKCpvcHRhcmcgPT0gJ1wwJyB8fCAqZW5kICE9ICdcMCcpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBpbnZhbGlkIHZlcnNpb247IHNob3VsZCBiZSBpbnRlZ2VyIVxuXG4iKTsKLSAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSAxOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgJ28nOgotICAgICAgICAgICAgcGFja2FnZV9pbmZvLm92ZXJsYXkgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgaWYgKHN0cmxlbihvcHRhcmcpICE9IFNBTFRfTEVOICogMikgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHNhbHQgbXVzdCBiZSA4IGJ5dGVzIGluIGhleCAoZS5nLiwgQUJDRDY1MDMxMzM3RDAwRClcblxuIik7Ci0gICAgICAgICAgICAgICAgd2FudFVzYWdlID0gMTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhY2thZ2VfaW5mby5zYWx0ZWQgPSB0cnVlOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGI7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMCwgaiA9IDA7IGkgPCBTQUxUX0xFTjsgaSsrLCBqKz0yKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoZXhUb0J5dGUob3B0YXJnW2pdLCBvcHRhcmdbaisxXSwgJmIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHNhbHQgbXVzdCBiZSBpbiBoZXggKGUuZy4sIEFCQ0Q2NTAzMTMzN0QwMEQpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gMTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYWNrYWdlX2luZm8uc2FsdFtpXSA9IGI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnPyc6Ci0gICAgICAgICAgICB3YW50VXNhZ2UgPSAxOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHdhbnRWZXJzaW9uKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgJXNcbiIsIGdQcm9nTmFtZSwgZ1Byb2dWZXJzaW9uKTsKLSAgICB9Ci0KLSAgICBpZiAod2FudFVzYWdlKSB7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSNkZWZpbmUgQ0hFQ0tfT1AobmFtZSkgXAotICAgIGlmIChzdHJuY21wKG9wLCBuYW1lLCBvcHNpemUpKSB7IFwKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogdW5rbm93biBmdW5jdGlvbiAnJXMnIVxuXG4iLCBvcCk7IFwKLSAgICAgICAgd2FudFVzYWdlID0gMTsgXAotICAgICAgICBnb3RvIGJhaWw7IFwKLSAgICB9Ci0KLSAgICBpZiAob3B0aW5kIDwgYXJnYykgewotICAgICAgICBjb25zdCBjaGFyKiBvcCA9IGFyZ3Zbb3B0aW5kKytdOwotICAgICAgICBjb25zdCBpbnQgb3BzaXplID0gc3RybGVuKG9wKTsKLQotICAgICAgICBpZiAob3B0aW5kID49IGFyZ2MpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGZpbGVuYW1lIHJlcXVpcmVkIVxuXG4iKTsKLSAgICAgICAgICAgIHdhbnRVc2FnZSA9IDE7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IGFyZ3Zbb3B0aW5kKytdOwotCi0gICAgICAgIHN3aXRjaCAob3BbMF0pIHsKLSAgICAgICAgY2FzZSAnYSc6Ci0gICAgICAgICAgICBDSEVDS19PUCgiYWRkIik7Ci0gICAgICAgICAgICBpZiAocGFja2FnZV9pbmZvLnBhY2thZ2VOYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBhcmd1bWVudHMgcmVxdWlyZWQgJ3BhY2thZ2VOYW1lJyBhbmQgJ3ZlcnNpb24nXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkb0FkZChmaWxlbmFtZSwgJnBhY2thZ2VfaW5mbyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncic6Ci0gICAgICAgICAgICBDSEVDS19PUCgicmVtb3ZlIik7Ci0gICAgICAgICAgICBkb1JlbW92ZShmaWxlbmFtZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICBDSEVDS19PUCgiaW5mbyIpOwotICAgICAgICAgICAgZG9JbmZvKGZpbGVuYW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogdW5rbm93biBjb21tYW5kICclcychXG5cbiIsIG9wKTsKLSAgICAgICAgICAgIHdhbnRVc2FnZSA9IDE7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLWJhaWw6Ci0gICAgaWYgKHdhbnRVc2FnZSkgewotICAgICAgICB1c2FnZSgpOwotICAgICAgICByZXN1bHQgPSAyOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19CmRpZmYgLS1naXQgYS90b29scy9vYmJ0b29sL21rb2JiLnNoIGIvdG9vbHMvb2JidG9vbC9ta29iYi5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzI1MjUwZC4uMDAwMDAwMAotLS0gYS90b29scy9vYmJ0b29sL21rb2JiLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMjgxICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jCi0jIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jIAotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIyAKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLQotIyBta29iYi5zaCAtIENyZWF0ZXMgT0JCIGZpbGVzIG9uIExpbnV4IG1hY2hpbmVzCi0KLSMgRGlyZWN0b3J5IHdoZXJlIHdlIHNob3VsZCB0ZW1wb3JhcmlseSBtb3VudCB0aGUgT0JCIGxvb3BiYWNrIHRvIGNvcHkgZmlsZXMKLU1PVU5URElSPS90bXAKLQotIyBQcmVzZXRzLiBDaGFuZ2luZyB0aGVzZSB3aWxsIHByb2JhYmx5IGJyZWFrIHlvdXIgT0JCIG9uIHRoZSBkZXZpY2UKLUNSWVBUTz10d29maXNoCi1GUz12ZmF0Ci1NS0ZTPW1rZnMudmZhdAotTE9TRVRVUD1sb3NldHVwCi1CTE9DS19TSVpFPTUxMgotU0xPUD01MTIgIyBBbW91bnQgb2YgZmlsZXN5c3RlbSBzbG9wIGluICR7QkxPQ0tfU0laRX0gYmxvY2tzCi0KLWZpbmRfYmluYXJpZXMoKSB7Ci0gICAgTUtGU0JJTj1gd2hpY2ggJHtNS0ZTfWAKLSAgICBMT1NFVFVQQklOPWB3aGljaCAke0xPU0VUVVB9YAotICAgIE1PVU5UQklOPWB3aGljaCBtb3VudGAKLSAgICBVTU9VTlRCSU49YHdoaWNoIHVtb3VudGAKLSAgICBEREJJTj1gd2hpY2ggZGRgCi0gICAgUlNZTkNCSU49YHdoaWNoIHJzeW5jYAotICAgIFBCS0RGMkdFTj1gd2hpY2ggcGJrZGYyZ2VuYAotfQotCi1jaGVja19wcmVyZXFzKCkgewotICAgIGlmIFsgImB1bmFtZSAtc2B4IiAhPSAiTGludXh4IiBdOyB0aGVuIFwKLSAgICAgICAgZWNobyAiRVJST1I6IFRoaXMgc2NyaXB0IG9ubHkgd29ya3Mgb24gTGludXghIgotICAgICAgICBleGl0IDEKLSAgICBmaQotCi0gICAgaWYgISBlZ3JlcCAtcSAiXmNyeXB0b2xvb3AgIiAvcHJvYy9tb2R1bGVzOyB0aGVuIFwKLSAgICAgICAgZWNobyAiRVJST1I6IENvdWxkIG5vdCBmaW5kIGNyeXB0b2xvb3AgaW4gdGhlIGtlcm5lbC4iCi0gICAgICAgIGVjaG8gIlBlcmhhcHMgeW91IG5lZWQgdG86IG1vZHByb2JlIGNyeXB0b2xvb3AiCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi0KLSAgICBpZiAhIGVncmVwIC1xICJuYW1lXHMqOlxzKiR7Q1JZUFRPfSQiIC9wcm9jL2NyeXB0bzsgdGhlbiBcCi0gICAgICAgIGVjaG8gIkVSUk9SOiBDb3VsZCBub3QgZmluZCBjcnlwdG8gXGAke0NSWVBUT30nIGluIHRoZSBrZXJuZWwuIgotICAgICAgICBlY2hvICJQZXJoYXBzIHlvdSBuZWVkIHRvOiBtb2Rwcm9iZSAke0NSWVBUT30iCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi0KLSAgICBpZiAhIGVncmVwIC1xICJeXHMqJHtGU30kIiAvcHJvYy9maWxlc3lzdGVtczsgdGhlbiBcCi0gICAgICAgIGVjaG8gIkVSUk9SOiBDb3VsZCBub3QgZmluZCBmaWxlc3lzdGVtIFxgJHtGU30nIGluIHRoZSBrZXJuZWwuIgotICAgICAgICBlY2hvICJQZXJoYXBzIHlvdSBuZWVkIHRvOiBtb2Rwcm9iZSAke0ZTfSIKLSAgICAgICAgZXhpdCAxCi0gICAgZmkKLQotICAgIGlmIFsgIiR7TUtGU0JJTn14IiA9ICJ4IiBdOyB0aGVuIFwKLSAgICAgICAgZWNobyAiRVJST1I6IENvdWxkIG5vdCBmaW5kICR7TUtGU30gaW4geW91ciBwYXRoISIKLSAgICAgICAgZXhpdCAxCi0gICAgZWxpZiBbICEgLXggIiR7TUtGU0JJTn0iIF07IHRoZW4gXAotICAgICAgICBlY2hvICJFUlJPUjogJHtNS0ZTQklOfSBpcyBub3QgZXhlY3V0YWJsZSEiCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi0KLSAgICBpZiBbICIke0xPU0VUVVBCSU59eCIgPSAieCIgXTsgdGhlbiBcCi0gICAgICAgIGVjaG8gIkVSUk9SOiBDb3VsZCBub3QgZmluZCAke0xPU0VUVVB9IGluIHlvdXIgcGF0aCEiCi0gICAgICAgIGV4aXQgMQotICAgIGVsaWYgWyAhIC14ICIke0xPU0VUVVBCSU59IiBdOyB0aGVuIFwKLSAgICAgICAgZWNobyAiRVJST1I6ICR7TE9TRVRVUEJJTn0gaXMgbm90IGV4ZWN1dGFibGUhIgotICAgICAgICBleGl0IDEKLSAgICBmaQotCi0gICAgaWYgWyAiJHtQQktERjJHRU59eCIgPSAieCIgXTsgdGhlbiBcCi0gICAgICAgIGVjaG8gIkVSUk9SOiBDb3VsZCBub3QgZmluZCBwYmtkZjJnZW4gaW4geW91ciBwYXRoISIKLSAgICAgICAgZXhpdCAxCi0gICAgZmkKLX0KLQotY2xlYW51cCgpIHsKLSAgICBpZiBbICIke2xvb3BkZXZ9eCIgIT0gIngiIF07IHRoZW4gXAotICAgICAgICAke0xPU0VUVVBCSU59IC1kICR7bG9vcGRldn0KLSAgICBmaQotfQotCi1oaWRkZW5fcHJvbXB0KCkgewotICAgIHVuc2V0IG91dHB1dAotICAgIHByb21wdD0iJDEiCi0gICAgb3V0dmFyPSIkMiIKLSAgICB3aGlsZSByZWFkIC1zIC1uIDEgLXAgIiRwcm9tcHQiIGM7IGRvIFwKLSAgICAgICAgaWYgWyAieCRjIiA9ICJ4IiBdOyB0aGVuIFwKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZpCi0gICAgICAgIHByb21wdD0nKicKLSAgICAgICAgb3V0cHV0PSIke291dHB1dH0ke2N9IgotICAgIGRvbmUKLSAgICBlY2hvCi0gICAgZXZhbCAkb3V0dmFyPSIkb3V0cHV0IgotICAgIHVuc2V0IG91dHB1dAotfQotCi1yZWFkX2tleSgpIHsKLSAgICBoaWRkZW5fcHJvbXB0ICIgICAgICAgIEVuY3J5cHRpb24ga2V5OiAiIGtleQotCi0gICAgaWYgWyAiJHtrZXl9eCIgPSAieCIgXTsgdGhlbiBcCi0gICAgICAgIGVjaG8gIkVSUk9SOiBBbiBlbXB0eSBrZXkgaXMgbm90IGFsbG93ZWQhIgotICAgICAgICBleGl0IDEKLSAgICBmaQotCi0gICAgaGlkZGVuX3Byb21wdCAiRW5jcnlwdGlvbiBrZXkgKGFnYWluKTogIiBrZXkyCi0KLSAgICBpZiBbICIke2tleX14IiAhPSAiJHtrZXkyfXgiIF07IHRoZW4gXAotICAgICAgICBlY2hvICJFUlJPUjogRW5jcnlwdGlvbiBrZXlzIGRvIG5vdCBtYXRjaCEiCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi19Ci0KLW9uZXhpdCgpIHsKLSAgICBpZiBbICJ4JHt0ZW1wX21vdW50fSIgIT0gIngiIF07IHRoZW4gXAotICAgICAgICAke1VNT1VOVEJJTn0gJHt0ZW1wX21vdW50fQotICAgICAgICBybWRpciAke3RlbXBfbW91bnR9Ci0gICAgZmkKLSAgICBpZiBbICJ4JHtsb29wX2Rldn0iICE9ICJ4IiBdOyB0aGVuIFwKLSAgICAgICAgaWYgWyAke3VzZV9jcnlwdG99IC1lcSAxIF07IHRoZW4gXAotICAgICAgICAgICAgZG1zZXR1cCByZW1vdmUgLWYgJHtsb29wX2Rldn0KLSAgICAgICAgICAgICR7TE9TRVRVUEJJTn0gLWQgJHtvbGRfbG9vcF9kZXZ9Ci0gICAgICAgIGVsc2UgXAotICAgICAgICAgICAgJHtMT1NFVFVQQklOfSAtZCAke2xvb3BfZGV2fQotICAgICAgICBmaQotICAgIGZpCi0gICAgaWYgWyAieCR7dGVtcGZpbGV9IiAhPSAieCIgLWEgLWYgIiR7dGVtcGZpbGV9IiBdOyB0aGVuIFwKLSAgICAgICAgcm0gLWYgJHt0ZW1wZmlsZX0KLSAgICBmaQotICAgIGlmIFsgIngke2tleWZpbGV9IiAhPSAieCIgLWEgLWYgIiR7a2V5ZmlsZX0iIF07IHRoZW4gXAotICAgICAgICBybSAtZiAke2tleWZpbGV9Ci0gICAgZmkKLSAgICBlY2hvICJGYXRhbCBlcnJvci4iCi0gICAgZXhpdCAxCi19Ci0KLXVzYWdlKCkgewotICAgIGVjaG8gIm1rb2JiLnNoIC0tIENyZWF0ZSBPQkIgZmlsZXMgZm9yIHVzZSBvbiBBbmRyb2lkIgotICAgIGVjaG8gIiIKLSAgICBlY2hvICIgLWQgPGRpcmVjdG9yeT4gVXNlIDxkaXJlY3Rvcnk+IGFzIGlucHV0IGZvciBPQkIgZmlsZXMiCi0gICAgZWNobyAiIC1rIDxrZXk+ICAgICAgIFVzZSA8a2V5PiB0byBlbmNyeXB0IE9CQiBmaWxlIgotICAgIGVjaG8gIiAtSyAgICAgICAgICAgICBQcm9tcHQgZm9yIGtleSB0byBlbmNyeXB0IE9CQiBmaWxlIgotICAgIGVjaG8gIiAtbyA8ZmlsZW5hbWU+ICBXcml0ZSBPQkIgZmlsZSBvdXQgdG8gPGZpbGVuYW1lPiIKLSAgICBlY2hvICIgLXYgICAgICAgICAgICAgVmVyYm9zZSBtb2RlIgotICAgIGVjaG8gIiAtaCAgICAgICAgICAgICBIZWxwOyB0aGlzIHVzYWdlIHNjcmVlbiIKLX0KLQotZmluZF9iaW5hcmllcwotY2hlY2tfcHJlcmVxcwotCi11c2VfY3J5cHRvPTAKLQotYXJncz1gZ2V0b3B0IC1vIGQ6aGs6S286diAtLSAiJEAiYAotZXZhbCBzZXQgLS0gIiRhcmdzIgotCi13aGlsZSB0cnVlOyBkbyBcCi0gICAgY2FzZSAiJDEiIGluCi0gICAgICAgIC1kKSBkaXJlY3Rvcnk9JDI7IHNoaWZ0IDI7OwotICAgICAgICAtaCkgdXNhZ2U7IGV4aXQgMTs7Ci0gICAgICAgIC1rKSBrZXk9JDI7IHVzZV9jcnlwdG89MTsgc2hpZnQgMjs7Ci0gICAgICAgIC1LKSBwcm9tcHRfa2V5PTE7IHVzZV9jcnlwdG89MTsgc2hpZnQ7OwotICAgICAgICAtdikgdmVyYm9zZT0xOyBzaGlmdDs7Ci0gICAgICAgIC1vKSBmaWxlbmFtZT0kMjsgc2hpZnQgMjs7Ci0gICAgICAgIC0tKSBzaGlmdDsgYnJlYWs7OwotICAgICAgICAqKSBlY2hvICJFUlJPUjogSW52YWxpZCBhcmd1bWVudCBpbiBvcHRpb24gcGFyc2luZyEgQ2Fubm90IHJlY292ZXIuIEV2ZXIuIjsgZXhpdCAxOzsKLSAgICBlc2FjCi1kb25lCi0KLWlmIFsgIiR7ZGlyZWN0b3J5fXgiID0gIngiIC1vICEgLWQgIiR7ZGlyZWN0b3J5fSIgXTsgdGhlbiBcCi0gICAgZWNobyAiRVJST1I6IE11c3Qgc3BlY2lmeSB2YWxpZCBpbnB1dCBkaXJlY3RvcnkiCi0gICAgZWNobyAiIgotICAgIHVzYWdlCi0gICAgZXhpdCAxOwotZmkKLQotaWYgWyAiJHtmaWxlbmFtZX14IiA9ICJ4IiBdOyB0aGVuIFwKLSAgICBlY2hvICJFUlJPUjogTXVzdCBzcGVjaWZ5IGZpbGVuYW1lIgotICAgIGVjaG8gIiIKLSAgICB1c2FnZQotICAgIGV4aXQgMTsKLWZpCi0KLWlmIFsgJHt1c2VfY3J5cHRvfSAtZXEgMSAtYSAiJHtrZXl9eCIgPSAieCIgLWEgMCR7cHJvbXB0X2tleX0gLWVxIDAgXTsgdGhlbiBcCi0gICAgZWNobyAiRVJST1I6IENyeXB0byBkZXNpcmVkLCBidXQgbm8ga2V5IHN1cHBsaWVkIG9yIHJlcXVlc3RlZCB0byBwcm9tcHQgZm9yLiIKLSAgICBleGl0IDEKLWZpCi0KLWlmIFsgMCR7cHJvbXB0X2tleX0gLWVxIDEgXTsgdGhlbiBcCi0gICAgcmVhZF9rZXkKLWZpCi0KLW91dGRpcj1gZGlybmFtZSAke2ZpbGVuYW1lfWAKLWlmIFsgISAtZCAiJHtvdXRkaXJ9IiBdOyB0aGVuIFwKLSAgICBlY2hvICJFUlJPUjogT3V0cHV0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDogJHtvdXRkaXJ9IgotICAgIGV4aXQgMQotZmkKLQotIyBNYWtlIHN1cmUgd2UgY2xlYW4gdXAgYW55IHN0dWZmIHdlIGNyZWF0ZSBmcm9tIGhlcmUgb24gZHVyaW5nIGVycm9yIGNvbmRpdGlvbnMKLXRyYXAgb25leGl0IEVSUgotCi10ZW1wZmlsZT0kKHRlbXBmaWxlIC1kICR7b3V0ZGlyfSkgfHwgKCBlY2hvICJFUlJPUjogY291bGRuJ3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIGluICR7b3V0ZGlyfSI7IGV4aXQgMSApCi0KLWJsb2NrX2NvdW50PWBkdSAtcyAtLWFwcGFyZW50LXNpemUgLS1ibG9jay1zaXplPTUxMiAke2RpcmVjdG9yeX0gfCBhd2sgJ3sgcHJpbnQgJDE7IH0nYAotaWYgWyAkPyAtbmUgMCBdOyB0aGVuIFwKLSAgICBlY2hvICJFUlJPUjogQ291bGRuJ3QgcmVhZCBzaXplIG9mIGlucHV0IGRpcmVjdG9yeSAke2RpcmVjdG9yeX0iCi0gICAgZXhpdCAxCi1maQotCi1lY2hvICJDcmVhdGluZyB0ZW1wb3JhcnkgZmlsZS4uLiIKLSR7RERCSU59IGlmPS9kZXYvemVybyBvZj0ke3RlbXBmaWxlfSBicz0ke0JMT0NLX1NJWkV9IGNvdW50PSQoKCR7YmxvY2tfY291bnR9ICsgJHtTTE9QfSkpID4gL2Rldi9udWxsIDI+JjEKLWlmIFsgJD8gLW5lIDAgXTsgdGhlbiBcCi0gICAgZWNobyAiRVJST1I6IGNyZWF0aW5nIHRlbXBvcmFyeSBmaWxlOiAkPyIKLWZpCi0KLWxvb3BfZGV2PSQoJHtMT1NFVFVQQklOfSAtZikgfHwgKCBlY2hvICJFUlJPUjogbG9zZXR1cCB3b3VsZG4ndCB0ZWxsIHVzIHRoZSBuZXh0IHVudXNlZCBkZXZpY2UiOyBleGl0IDEgKQotCi0ke0xPU0VUVVBCSU59ICR7bG9vcF9kZXZ9ICR7dGVtcGZpbGV9IHx8ICggZWNobyAiRVJST1I6IGNvdWxkbid0IGNyZWF0ZSBsb29wYmFjayBkZXZpY2UiOyBleGl0IDEgKQotCi1pZiBbICR7dXNlX2NyeXB0b30gLWVxIDEgXTsgdGhlbiBcCi0gICAgZXZhbCBgJHtQQktERjJHRU59ICR7a2V5fWAKLSAgICB1bmlxdWVfZG1fbmFtZT1gYmFzZW5hbWUgJHt0ZW1wZmlsZX1gCi0gICAgZWNobyAiMCBgYmxvY2tkZXYgLS1nZXRzaXplICR7bG9vcF9kZXZ9YCBjcnlwdCAke0NSWVBUT30gJHtrZXl9IDAgJHtsb29wX2Rldn0gMCIgfCBkbXNldHVwIGNyZWF0ZSAke3VuaXF1ZV9kbV9uYW1lfQotICAgIG9sZF9sb29wX2Rldj0ke2xvb3BfZGV2fQotICAgIGxvb3BfZGV2PS9kZXYvbWFwcGVyLyR7dW5pcXVlX2RtX25hbWV9Ci1maQotCi0jCi0jIENyZWF0ZSB0aGUgZmlsZXN5c3RlbQotIwotZWNobyAiIgotJHtNS0ZTQklOfSAtSSAke2xvb3BfZGV2fQotZWNobyAiIgotCi0jCi0jIE1ha2UgdGhlIHRlbXBvcmFyeSBtb3VudCBwb2ludCBhbmQgbW91bnQgaXQKLSMKLXRlbXBfbW91bnQ9IiR7TU9VTlRESVJ9LyR7UkFORE9NfSIKLW1rZGlyICR7dGVtcF9tb3VudH0KLSR7TU9VTlRCSU59IC10ICR7RlN9IC1vIGxvb3AgJHtsb29wX2Rldn0gJHt0ZW1wX21vdW50fQotCi0jCi0jIHJzeW5jIHRoZSBmaWxlcyEKLSMKLWVjaG8gIkNvcHlpbmcgZmlsZXM6IgotJHtSU1lOQ0JJTn0gLWF2IC0tbm8tb3duZXIgLS1uby1ncm91cCAke2RpcmVjdG9yeX0vICR7dGVtcF9tb3VudH0vCi1lY2hvICIiCi0KLWVjaG8gIlN1Y2Nlc3NmdWxseSBjcmVhdGVkIFxgJHtmaWxlbmFtZX0nIgotCi1pZiBbICR7dXNlX2NyeXB0b30gLWVxIDEgXTsgdGhlbiBcCi0gICAgZWNobyAic2FsdCBmb3IgdXNlIHdpdGggb2JidG9vbCBpczoiCi0gICAgZWNobyAiJHtzYWx0fSIKLWZpCi0KLSMKLSMgVW5kbyBhbGwgdGhlIHRlbXBvcmFyaWVzCi0jCi11bW91bnQgJHt0ZW1wX21vdW50fQotcm1kaXIgJHt0ZW1wX21vdW50fQotaWYgWyAke3VzZV9jcnlwdG99IC1lcSAxIF07IHRoZW4gXAotICAgIGRtc2V0dXAgcmVtb3ZlIC1mICR7bG9vcF9kZXZ9Ci0gICAgJHtMT1NFVFVQQklOfSAtZCAke29sZF9sb29wX2Rldn0KLWVsc2UgXAotICAgICR7TE9TRVRVUEJJTn0gLWQgJHtsb29wX2Rldn0KLWZpCi1tdiAke3RlbXBmaWxlfSAke2ZpbGVuYW1lfQotCi10cmFwIC0gRVJSCi0KLWV4aXQgMApkaWZmIC0tZ2l0IGEvdG9vbHMvb2JidG9vbC9wYmtkZjJnZW4uY3BwIGIvdG9vbHMvb2JidG9vbC9wYmtkZjJnZW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGQ2N2MwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL29iYnRvb2wvcGJrZGYyZ2VuLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0vKioKLSAqIFNpbXBsZSBwcm9ncmFtIHRvIGdlbmVyYXRlIGEga2V5IGJhc2VkIG9uIFBCS0RGMiB3aXRoIHByZXNldCBpbnB1dHMuCi0gKgotICogV2lsbCBwcmludCBvdXQgdGhlIHNhbHQgYW5kIGtleSBpbiBoZXguCi0gKi8KLQotI2RlZmluZSBTQUxUX0xFTiA4Ci0jZGVmaW5lIFJPVU5EUyAxMDI0Ci0jZGVmaW5lIEtFWV9CSVRTIDEyOAotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQotewotICAgIGlmIChhcmdjICE9IDIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgPHBhc3N3b3JkPlxuIiwgYXJndlswXSk7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgaW50IGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOwotICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiAvZGV2L3VyYW5kb206ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciBzYWx0W1NBTFRfTEVOXTsKLQotICAgIGlmIChyZWFkKGZkLCAmc2FsdCwgU0FMVF9MRU4pICE9IFNBTFRfTEVOKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IHJlYWQgc2FsdCBmcm9tIC9kZXYvdXJhbmRvbTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgdW5zaWduZWQgY2hhciByYXdLZXlbS0VZX0JJVFNdOwotCi0gICAgaWYgKFBLQ1M1X1BCS0RGMl9ITUFDX1NIQTEoYXJndlsxXSwgc3RybGVuKGFyZ3ZbMV0pLCBzYWx0LCBTQUxUX0xFTiwKLSAgICAgICAgICAgIFJPVU5EUywgS0VZX0JJVFMsIHJhd0tleSkgIT0gMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBnZW5lcmF0ZSBQQktERjIgb3V0cHV0OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBwcmludGYoInNhbHQ9Iik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTQUxUX0xFTjsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiJTAyeCIsIHNhbHRbaV0pOwotICAgIH0KLSAgICBwcmludGYoIlxuIik7Ci0KLSAgICBwcmludGYoImtleT0iKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IChLRVlfQklUUyAvIDgpOyBpKyspIHsKLSAgICAgICAgcHJpbnRmKCIlMDJ4IiwgcmF3S2V5W2ldKTsKLSAgICB9Ci0gICAgcHJpbnRmKCJcbiIpOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvb3JpZW50YXRpb25wbG90L1JFQURNRS50eHQgYi90b29scy9vcmllbnRhdGlvbnBsb3QvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUzZjY1ZS4uMDAwMDAwMAotLS0gYS90b29scy9vcmllbnRhdGlvbnBsb3QvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgc2ltcGxlIHB5dGhvbiBzY3JpcHQgZm9yIHZpc3VhbGl6aW5nCi10aGUgYmVoYXZpb3Igb2YgdGhlIFdpbmRvd09yaWVudGF0aW9uTGlzdGVuZXIuCi0KLQotUFJFUkVRVUlTSVRFUwotLS0tLS0tLS0tLS0tLQotCi0xLiBQeXRob24gMi42Ci0yLiBudW1weQotMy4gbWF0cGxvdGxpYgotCi0KLVVTQUdFCi0tLS0tLQotCi1UaGUgdG9vbCB3b3JrcyBieSBzY2FwaW5nIHRoZSBkZWJ1ZyBsb2cgb3V0cHV0IGZyb20gV2luZG93T3JpZW50YXRpb25MaXN0ZW5lcgotZm9yIGludGVyZXN0aW5nIGRhdGEgYW5kIHRoZW4gcGxvdHRpbmcgaXQuCi0KLTEuIFBsdWcgaW4gdGhlIGRldmljZS4gIEVuc3VyZSB0aGF0IGl0IGlzIHRoZSBvbmx5IGRldmljZSBwbHVnZ2VkIGluCi0gICBzaW5jZSB0aGlzIHNjcmlwdCBpcyBvZiB2ZXJ5IGxpdHRsZSBicmFpbiBhbmQgd2lsbCBnZXQgY29uZnVzZWQgb3RoZXJ3aXNlLgotCi0yLiBFbmFibGUgdGhlIFdpbmRvdyBPcmllbnRhdGlvbiBMaXN0ZW5lciBkZWJ1Z2dpbmcgZGF0YSBsb2cuCi0gICBhZGIgc2hlbGwgc2V0cHJvcCBkZWJ1Zy5vcmllbnRhdGlvbi5sb2cgdHJ1ZQotICAgYWRiIHNoZWxsIHN0b3AKLSAgIGFkYiBzaGVsbCBzdGFydAotCi0zLiBSdW4gIm9yaWVudGF0aW9ucGxvdC5weSIuCi0KLQotV0hBVCBJVCBBTEwgTUVBTlMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSB0b29sIGRpc3BsYXlzIHNldmVyYWwgdGltZSBzZXJpZXMgZ3JhcGhzIHRoYXQgcGxvdCB0aGUgb3V0cHV0IG9mIHRoZQotV2luZG93T3JpZW50YXRpb25MaXN0ZW5lci4gIEhlcmUgeW91IGNhbiBzZWUgdGhlIHJhdyBhY2NlbGVyb21ldGVyIGRhdGEsCi1maWx0ZXJlZCBhY2NlbGVyb21ldGVyIGRhdGEsIG1lYXN1cmVkIHRpbHQgYW5kIG9yaWVudGF0aW9uIGFuZ2xlLCBjb25maWRlbmNlCi1pbnRlcnZhbHMgZm9yIHRoZSBwcm9wb3NlZCBvcmllbnRhdGlvbiBhbmQgYWNjZWxlcm9tZXRlciBsYXRlbmN5LgotCi1UaGluZ3MgdG8gbG9vayBmb3I6Ci0KLTEuIEVuc3VyZSB0aGUgZmlsdGVyaW5nIGlzIG5vdCB0b28gYWdncmVzc2l2ZS4gIElmIHRoZSBmaWx0ZXIgY3V0LW9mZiBmcmVxdWVuY3kgaXMKLSAgIGxlc3MgdGhhbiBhYm91dCAxSHosIHRoZW4gdGhlIGZpbHRlcmVkIGFjY2Vsb3JvbWV0ZXIgZGF0YSBiZWNvbWVzIHRvbyBzbW9vdGgKLSAgIGFuZCB0aGUgbGF0ZW5jeSBmb3Igb3JpZW50YXRpb24gZGV0ZWN0aW9uIGdvZXMgdXAuICBPbmUgd2F5IHRvIG9ic2VydmUgdGhpcwotICAgaXMgYnkgaG9sZGluZyB0aGUgZGV2aWNlIHZlcnRpY2FsbHkgaW4gb25lIG9yaWVudGF0aW9uIHRoZW4gc2hhcnBseSB0dXJuaW5nCi0gICBpdCA5MCBkZWdyZWVzIHRvIGEgZGlmZmVyZW50IG9yaWVudGF0aW9uLiAgQ29tcGFyZWQgdGhlIHJhcGlkIGNoYW5nZXMgaW4gdGhlCi0gICByYXcgYWNjZWxlcm9tZXRlciBkYXRhIHdpdGggdGhlIHNtb290aGVkIG91dCBmaWx0ZXJlZCBkYXRhLiAgSWYgdGhlIGZpbHRlcmluZwotICAgaXMgdG9vIGFnZ3Jlc3NpdmUsIHRoZSBmaWx0ZXIgcmVzcG9uc2UgbWF5IGxhZyBieSBodW5kcmVkcyBvZiBtaWxsaXNlY29uZHMuCi0KLTIuIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGFuIGFwcHJvcHJpYXRlIGdhcCBiZXR3ZWVuIGFkamFjZW50IG9yaWVudGF0aW9uIGFuZ2xlcwotICAgZm9yIGh5c3RlcmVzaXMuICBUcnkgaG9sZGluZyB0aGUgZGV2aWNlIGluIG9uZSBvcmllbnRhdGlvbiBhbmQgc2xvd2x5IHR1cm5pbmcKLSAgIGl0IDkwIGRlZ3JlZXMuICBOb3RlIHRoYXQgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIHdpbGwgYWxsIGRyb3AgdG8gMCBhdCBzb21lCi0gICBwb2ludCBpbiBiZXR3ZWVuIHRoZSB0d28gb3JpZW50YXRpb25zOyB0aGF0IGlzIHRoZSBnYXAuICBUaGUgZ2FwIHNob3VsZCBiZQotICAgb2JzZXJ2ZWQgYmV0d2VlbiBhbGwgYWRqYWNlbnQgcGFpcnMgb2Ygb3JpZW50YXRpb25zIHdoZW4gdHVybmluZyB0aGUgZGV2aWNlCi0gICBpbiBlaXRoZXIgZGlyZWN0aW9uLgotCi0gICBOZXh0IHRyeSBob2xkaW5nIHRoZSBkZXZpY2UgaW4gb25lIG9yaWVudGF0aW9uIGFuZCByYXBpZGx5IHR1cm5pbmcgaXQgZW5kCi0gICBvdmVyIGVuZCB0byBhIG1pZHBvaW50IGFib3V0IDQ1IGRlZ3JlZXMgYmV0d2VlbiB0d28gb3Bwb3Npbmcgb3JpZW50YXRpb25zLgotICAgVGhlcmUgc2hvdWxkIGJlIG5vIGdhcCBvYnNlcnZlZCBpbml0aWFsbHkuICBUaGUgYWxnb3JpdGhtIHNob3VsZCBwaWNrIG9uZQotICAgb2YgdGhlIG9yaWVudGF0aW9ucyBhbmQgc2V0dGxlIGludG8gaXQgKHNpbmNlIGl0IGlzIG9idmlvdXNseSBxdWl0ZQotICAgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIG9yaWVudGF0aW9uIG9mIHRoZSBkZXZpY2UpLiAgSG93ZXZlciwgb25jZSBpdAotICAgc2V0dGxlcywgdGhlIGNvbmZpZGVuY2UgdmFsdWVzIHNob3VsZCBzdGFydCB0cmVuZGluZyB0byAwIGFnYWluIGJlY2F1c2UKLSAgIHRoZSBtZWFzdXJlZCBvcmllbnRhdGlvbiBhbmdsZSBpcyBub3cgd2l0aGluIHRoZSBnYXAgYmV0d2VlbiB0aGUgbmV3Ci0gICBvcmllbnRhdGlvbiBhbmQgdGhlIGFkamFjZW50IG9yaWVudGF0aW9uLgotCi0gICBJbiBvdGhlciB3b3JkcywgdGhlIGh5c3RlcmVzaXMgZ2FwIGFwcGxpZXMgb25seSB3aGVuIHRoZSBtZWFzdXJlZCBvcmllbnRhdGlvbgotICAgYW5nbGUgKHNheSwgNDUgZGVncmVlcykgaXMgYmV0d2VlbiB0aGUgY3VycmVudCBvcmllbnRhdGlvbidzIGlkZWFsIGFuZ2xlCi0gICAoc2F5LCAwIGRlZ3JlZXMpIGFuZCBhbiBhZGphY2VudCBvcmllbnRhdGlvbidzIGlkZWFsIGFuZ2xlIChzYXksIDkwIGRlZ3JlZXMpLgotCi0zLiBBY2NlbGVyb21ldGVyIGppdHRlci4gIFRoZSBhY2NlbGVyb21ldGVyIGxhdGVuY3kgZ3JhcGggZGlzcGxheXMgdGhlIGludGVydmFsCi0gICBiZXR3ZWVuIHNlbnNvciBldmVudHMgYXMgcmVwb3J0ZWQgYnkgdGhlIFNlbnNvckV2ZW50LnRpbWVzdGFtcCBmaWVsZC4gIEl0Ci0gICBzaG91bGQgYmUgYSBmYWlybHkgY29uc3RhbnQgNjBtcy4gIElmIHRoZSBsYXRlbmN5IGp1bXBzIGFyb3VuZCB3aWxkbHkgb3IKLSAgIGdyZWF0bHkgZXhjZWVkcyA2MG1zIHRoZW4gdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIGFjY2VsZXJvbWV0ZXIgb3IgdGhlCi0gICBzZW5zb3IgbWFuYWdlci4KLQotNC4gVGhlIG9yaWVudGF0aW9uIGFuZ2xlIGlzIG5vdCBtZWFzdXJlZCB3aGVuIHRoZSB0aWx0IGlzIHRvbyBjbG9zZSB0byA5MCBvciAtOTAKLSAgIGRlZ3JlZXMgKHJlZmVyIHRvIE1BWF9USUxUIGNvbnN0YW50KS4gIENvbnNlcXVlbnRseSwgeW91IHNob3VsZCBleHBlY3QgdGhlcmUKLSAgIHRvIGJlIG5vIGRhdGEuICBMaWtld2lzZSwgYWxsIGRlcGVuZGVudCBjYWxjdWxhdGlvbnMgYXJlIHN1cHByZXNzZWQgaW4gdGhpcyBjYXNlCi0gICBzbyB0aGVyZSB3aWxsIGJlIG5vIG9yaWVudGF0aW9uIHByb3Bvc2FsIGVpdGhlci4KLQotNS4gRWFjaCBvcmllbnRhdGlvbiBoYXMgaXRzIG93biBib3VuZCBvbiBhbGxvd2FibGUgdGlsdCBhbmdsZXMuICBJdCdzIGEgZ29vZCBpZGVhIHRvCi0gICB2ZXJpZnkgdGhhdCB0aGVzZSBsaW1pdHMgYXJlIGJlaW5nIGVuZm9yY2VkIGJ5IGdyYWR1YWxseSB2YXJ5aW5nIHRoZSB0aWx0IG9mCi0gICB0aGUgZGV2aWNlIHVudGlsIGl0IGlzIGluc2lkZS9vdXRzaWRlIHRoZSBsaW1pdCBmb3IgZWFjaCBvcmllbnRhdGlvbi4KLQotNi4gT3JpZW50YXRpb24gY2hhbmdlcyBzaG91bGQgYmUgc2lnbmlmaWNhbnRseSBoYXJkZXIgd2hlbiB0aGUgZGV2aWNlIGlzIGhlbGQKLSAgIG92ZXJoZWFkLiAgUGVvcGxlIHJlYWRpbmcgb24gdGFibGV0cyBpbiBiZWQgb2Z0ZW4gaGF2ZSB0aGVpciBoZWFkIHR1cm5lZAotICAgYSBsaXR0bGUgdG8gdGhlIHNpZGUsIG9yIHRoZXkgaG9sZCB0aGUgZGV2aWNlIGxvb3NlbHkgc28gaXRzIG9yaWVudGF0aW9uCi0gICBjYW4gYmUgYSBiaXQgdW51c3VhbC4gIFRoZSB0aWx0IGlzIGEgZ29vZCBpbmRpY2F0b3Igb2Ygd2hldGhlciB0aGUgZGV2aWNlIGlzCi0gICBvdmVyaGVhZC4KZGlmZiAtLWdpdCBhL3Rvb2xzL29yaWVudGF0aW9ucGxvdC9vcmllbnRhdGlvbnBsb3QucHkgYi90b29scy9vcmllbnRhdGlvbnBsb3Qvb3JpZW50YXRpb25wbG90LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2ZmMzOTIyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL29yaWVudGF0aW9ucGxvdC9vcmllbnRhdGlvbnBsb3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NTcgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMi42Ci0jCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotCi0jCi0jIFBsb3RzIGRlYnVnIGxvZyBvdXRwdXQgZnJvbSBXaW5kb3dPcmllbnRhdGlvbkxpc3RlbmVyLgotIyBTZWUgUkVBRE1FLnR4dCBmb3IgZGV0YWlscy4KLSMKLQotaW1wb3J0IG51bXB5IGFzIG5wCi1pbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGxvdAotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCByZQotaW1wb3J0IGZjbnRsCi1pbXBvcnQgb3MKLWltcG9ydCBlcnJubwotaW1wb3J0IGJpc2VjdAotZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQotCi0jIFBhcmFtZXRlcnMuCi10aW1lc3BhbiA9IDE1ICMgc2Vjb25kcyB0b3RhbCBzcGFuIHNob3duCi1zY3JvbGxqdW1wID0gNSAjIHNlY29uZHMganVtcCB3aGVuIHNjcm9sbGluZwotdGltZXRpY2tzID0gMSAjIHNlY29uZHMgYmV0d2VlbiBlYWNoIHRpbWUgdGljawotCi0jIE5vbi1ibG9ja2luZyBzdHJlYW0gd3JhcHBlci4KLWNsYXNzIE5vbkJsb2NraW5nU3RyZWFtOgotICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtKToKLSAgICBmY250bC5mY250bChzdHJlYW0sIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCi0gICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KLSAgICBzZWxmLmJ1ZmZlciA9ICcnCi0gICAgc2VsZi5wb3MgPSAwCi0KLSAgZGVmIHJlYWRsaW5lKHNlbGYpOgotICAgIHdoaWxlIFRydWU6Ci0gICAgICBpbmRleCA9IHNlbGYuYnVmZmVyLmZpbmQoJ1xuJywgc2VsZi5wb3MpCi0gICAgICBpZiBpbmRleCAhPSAtMToKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5idWZmZXJbc2VsZi5wb3M6aW5kZXhdCi0gICAgICAgIHNlbGYucG9zID0gaW5kZXggKyAxCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlcltzZWxmLnBvczpdCi0gICAgICBzZWxmLnBvcyA9IDAKLSAgICAgIHRyeToKLSAgICAgICAgY2h1bmsgPSBvcy5yZWFkKHNlbGYuc3RyZWFtLmZpbGVubygpLCA0MDk2KQotICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUFHQUlOOgotICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJhaXNlIGUKLSAgICAgIGlmIGxlbihjaHVuaykgPT0gMDoKLSAgICAgICAgaWYgbGVuKHNlbGYuYnVmZmVyKSA9PSAwOgotICAgICAgICAgIHJhaXNlKEVPRkVycm9yKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHJlc3VsdCA9IHNlbGYuYnVmZmVyCi0gICAgICAgICAgc2VsZi5idWZmZXIgPSAnJwotICAgICAgICAgIHNlbGYucG9zID0gMAotICAgICAgICAgIHJldHVybiByZXN1bHQKLSAgICAgIHNlbGYuYnVmZmVyICs9IGNodW5rCi0KLSMgUGxvdHRlcgotY2xhc3MgUGxvdHRlcjoKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGFkYm91dCk6Ci0gICAgc2VsZi5hZGJvdXQgPSBhZGJvdXQKLQotICAgIHNlbGYuZmlnID0gcGxvdC5maWd1cmUoMSkKLSAgICBzZWxmLmZpZy5zdXB0aXRsZSgnV2luZG93IE9yaWVudGF0aW9uIExpc3RlbmVyJywgZm9udHNpemU9MTIpCi0gICAgc2VsZi5maWcuc2V0X2RwaSg5NikKLSAgICBzZWxmLmZpZy5zZXRfc2l6ZV9pbmNoZXMoMTYsIDEyLCBmb3J3YXJkPVRydWUpCi0KLSAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25feCA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5yYXdfYWNjZWxlcmF0aW9uX3kgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl96ID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25fbWFnbml0dWRlID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25fYXhlcyA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2F4ZXMoCi0gICAgICAgIDEsICdSYXcgQWNjZWxlcmF0aW9uJywgJ20vc14yJywgWy0yMCwgMjBdLAotICAgICAgICB5dGlja3M9cmFuZ2UoLTE1LCAxNiwgNSkpCi0gICAgc2VsZi5yYXdfYWNjZWxlcmF0aW9uX2xpbmVfeCA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl9heGVzLCAneCcsICdyZWQnKQotICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl9saW5lX3kgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25fYXhlcywgJ3knLCAnZ3JlZW4nKQotICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl9saW5lX3ogPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25fYXhlcywgJ3onLCAnYmx1ZScpCi0gICAgc2VsZi5yYXdfYWNjZWxlcmF0aW9uX2xpbmVfbWFnbml0dWRlID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5yYXdfYWNjZWxlcmF0aW9uX2F4ZXMsICdtYWduaXR1ZGUnLCAnb3JhbmdlJywgbGluZXdpZHRoPTIpCi0gICAgc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGVnZW5kKHNlbGYucmF3X2FjY2VsZXJhdGlvbl9heGVzKQotCi0gICAgc2hhcmVkX2F4aXMgPSBzZWxmLnJhd19hY2NlbGVyYXRpb25fYXhlcwotCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25feCA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25feSA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25feiA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fbWFnbml0dWRlID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9heGVzID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfYXhlcygKLSAgICAgICAgMiwgJ0ZpbHRlcmVkIEFjY2VsZXJhdGlvbicsICdtL3NeMicsIFstMjAsIDIwXSwKLSAgICAgICAgc2hhcmV4PXNoYXJlZF9heGlzLAotICAgICAgICB5dGlja3M9cmFuZ2UoLTE1LCAxNiwgNSkpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fbGluZV94ID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fYXhlcywgJ3gnLCAncmVkJykKLSAgICBzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9saW5lX3kgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9heGVzLCAneScsICdncmVlbicpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fbGluZV96ID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fYXhlcywgJ3onLCAnYmx1ZScpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fbGluZV9tYWduaXR1ZGUgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9heGVzLCAnbWFnbml0dWRlJywgJ29yYW5nZScsIGxpbmV3aWR0aD0yKQotICAgIHNlbGYuX2FkZF90aW1lc2VyaWVzX2xlZ2VuZChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9heGVzKQotCi0gICAgc2VsZi50aWx0X2FuZ2xlID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnRpbHRfYW5nbGVfYXhlcyA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2F4ZXMoCi0gICAgICAgIDMsICdUaWx0IEFuZ2xlJywgJ2RlZ3JlZXMnLCBbLTEwNSwgMTA1XSwKLSAgICAgICAgc2hhcmV4PXNoYXJlZF9heGlzLAotICAgICAgICB5dGlja3M9cmFuZ2UoLTkwLCA5MSwgMzApKQotICAgIHNlbGYudGlsdF9hbmdsZV9saW5lID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi50aWx0X2FuZ2xlX2F4ZXMsICd0aWx0JywgJ2JsYWNrJykKLSAgICBzZWxmLl9hZGRfdGltZXNlcmllc19sZWdlbmQoc2VsZi50aWx0X2FuZ2xlX2F4ZXMpCi0KLSAgICBzZWxmLm9yaWVudGF0aW9uX2FuZ2xlID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLm9yaWVudGF0aW9uX2FuZ2xlX2F4ZXMgPSBzZWxmLl9hZGRfdGltZXNlcmllc19heGVzKAotICAgICAgICA0LCAnT3JpZW50YXRpb24gQW5nbGUnLCAnZGVncmVlcycsIFstMjUsIDM3NV0sCi0gICAgICAgIHNoYXJleD1zaGFyZWRfYXhpcywKLSAgICAgICAgeXRpY2tzPXJhbmdlKDAsIDM2MSwgNDUpKQotICAgIHNlbGYub3JpZW50YXRpb25fYW5nbGVfbGluZSA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYub3JpZW50YXRpb25fYW5nbGVfYXhlcywgJ29yaWVudGF0aW9uJywgJ2JsYWNrJykKLSAgICBzZWxmLl9hZGRfdGltZXNlcmllc19sZWdlbmQoc2VsZi5vcmllbnRhdGlvbl9hbmdsZV9heGVzKQotCi0gICAgc2VsZi5jdXJyZW50X3JvdGF0aW9uID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnByb3Bvc2VkX3JvdGF0aW9uID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnByZWRpY3RlZF9yb3RhdGlvbiA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5vcmllbnRhdGlvbl9heGVzID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfYXhlcygKLSAgICAgICAgNSwgJ0N1cnJlbnQgLyBQcm9wb3NlZCBPcmllbnRhdGlvbicsICdyb3RhdGlvbicsIFstMSwgNF0sCi0gICAgICAgIHNoYXJleD1zaGFyZWRfYXhpcywKLSAgICAgICAgeXRpY2tzPXJhbmdlKDAsIDQpKQotICAgIHNlbGYuY3VycmVudF9yb3RhdGlvbl9saW5lID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5vcmllbnRhdGlvbl9heGVzLCAnY3VycmVudCcsICdibGFjaycsIGxpbmV3aWR0aD0yKQotICAgIHNlbGYucHJlZGljdGVkX3JvdGF0aW9uX2xpbmUgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLm9yaWVudGF0aW9uX2F4ZXMsICdwcmVkaWN0ZWQnLCAncHVycGxlJywgbGluZXdpZHRoPTMpCi0gICAgc2VsZi5wcm9wb3NlZF9yb3RhdGlvbl9saW5lID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5vcmllbnRhdGlvbl9heGVzLCAncHJvcG9zZWQnLCAnZ3JlZW4nLCBsaW5ld2lkdGg9MykKLSAgICBzZWxmLl9hZGRfdGltZXNlcmllc19sZWdlbmQoc2VsZi5vcmllbnRhdGlvbl9heGVzKQotCi0gICAgc2VsZi50aW1lX3VudGlsX3NldHRsZWQgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYudGltZV91bnRpbF9mbGF0X2RlbGF5X2V4cGlyZWQgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYudGltZV91bnRpbF9zd2luZ19kZWxheV9leHBpcmVkID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnRpbWVfdW50aWxfYWNjZWxlcmF0aW9uX2RlbGF5X2V4cGlyZWQgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYuc3RhYmlsaXR5X2F4ZXMgPSBzZWxmLl9hZGRfdGltZXNlcmllc19heGVzKAotICAgICAgICA2LCAnUHJvcG9zYWwgU3RhYmlsaXR5JywgJ21zJywgWy0xMCwgNjAwXSwKLSAgICAgICAgc2hhcmV4PXNoYXJlZF9heGlzLAotICAgICAgICB5dGlja3M9cmFuZ2UoMCwgNjAwLCAxMDApKQotICAgIHNlbGYudGltZV91bnRpbF9zZXR0bGVkX2xpbmUgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLnN0YWJpbGl0eV9heGVzLCAndGltZSB1bnRpbCBzZXR0bGVkJywgJ2JsYWNrJywgbGluZXdpZHRoPTIpCi0gICAgc2VsZi50aW1lX3VudGlsX2ZsYXRfZGVsYXlfZXhwaXJlZF9saW5lID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5zdGFiaWxpdHlfYXhlcywgJ3RpbWUgdW50aWwgZmxhdCBkZWxheSBleHBpcmVkJywgJ2dyZWVuJykKLSAgICBzZWxmLnRpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZF9saW5lID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5zdGFiaWxpdHlfYXhlcywgJ3RpbWUgdW50aWwgc3dpbmcgZGVsYXkgZXhwaXJlZCcsICdibHVlJykKLSAgICBzZWxmLnRpbWVfdW50aWxfYWNjZWxlcmF0aW9uX2RlbGF5X2V4cGlyZWRfbGluZSA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYuc3RhYmlsaXR5X2F4ZXMsICd0aW1lIHVudGlsIGFjY2VsZXJhdGlvbiBkZWxheSBleHBpcmVkJywgJ3JlZCcpCi0gICAgc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGVnZW5kKHNlbGYuc3RhYmlsaXR5X2F4ZXMpCi0KLSAgICBzZWxmLnNhbXBsZV9sYXRlbmN5ID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnNhbXBsZV9sYXRlbmN5X2F4ZXMgPSBzZWxmLl9hZGRfdGltZXNlcmllc19heGVzKAotICAgICAgICA3LCAnQWNjZWxlcm9tZXRlciBTYW1wbGluZyBMYXRlbmN5JywgJ21zJywgWy0xMCwgNTAwXSwKLSAgICAgICAgc2hhcmV4PXNoYXJlZF9heGlzLAotICAgICAgICB5dGlja3M9cmFuZ2UoMCwgNTAwLCAxMDApKQotICAgIHNlbGYuc2FtcGxlX2xhdGVuY3lfbGluZSA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYuc2FtcGxlX2xhdGVuY3lfYXhlcywgJ2xhdGVuY3knLCAnYmxhY2snKQotICAgIHNlbGYuX2FkZF90aW1lc2VyaWVzX2xlZ2VuZChzZWxmLnNhbXBsZV9sYXRlbmN5X2F4ZXMpCi0KLSAgICBzZWxmLmZpZy5jYW52YXMubXBsX2Nvbm5lY3QoJ2J1dHRvbl9wcmVzc19ldmVudCcsIHNlbGYuX29uX2NsaWNrKQotICAgIHNlbGYucGF1c2VkID0gRmFsc2UKLQotICAgIHNlbGYudGltZXIgPSBzZWxmLmZpZy5jYW52YXMubmV3X3RpbWVyKGludGVydmFsPTEwMCkKLSAgICBzZWxmLnRpbWVyLmFkZF9jYWxsYmFjayhsYW1iZGE6IHNlbGYudXBkYXRlKCkpCi0gICAgc2VsZi50aW1lci5zdGFydCgpCi0KLSAgICBzZWxmLnRpbWViYXNlID0gTm9uZQotICAgIHNlbGYuX3Jlc2V0X3BhcnNlX3N0YXRlKCkKLQotICAjIEhhbmRsZSBhIGNsaWNrIGV2ZW50IHRvIHBhdXNlIG9yIHJlc3RhcnQgdGhlIHRpbWVyLgotICBkZWYgX29uX2NsaWNrKHNlbGYsIGV2KToKLSAgICBpZiBub3Qgc2VsZi5wYXVzZWQ6Ci0gICAgICBzZWxmLnBhdXNlZCA9IFRydWUKLSAgICAgIHNlbGYudGltZXIuc3RvcCgpCi0gICAgZWxzZToKLSAgICAgIHNlbGYucGF1c2VkID0gRmFsc2UKLSAgICAgIHNlbGYudGltZXIuc3RhcnQoKQotCi0gICMgSW5pdGlhbGl6ZSBhIHRpbWUgc2VyaWVzLgotICBkZWYgX21ha2VfdGltZXNlcmllcyhzZWxmKToKLSAgICByZXR1cm4gW1tdLCBbXV0KLQotICAjIEFkZCBhIHN1YnBsb3QgdG8gdGhlIGZpZ3VyZSBmb3IgYSB0aW1lIHNlcmllcy4KLSAgZGVmIF9hZGRfdGltZXNlcmllc19heGVzKHNlbGYsIGluZGV4LCB0aXRsZSwgeWxhYmVsLCB5bGltLCB5dGlja3MsIHNoYXJleD1Ob25lKToKLSAgICBudW1fZ3JhcGhzID0gNwotICAgIGhlaWdodCA9IDAuOSAvIG51bV9ncmFwaHMKLSAgICB0b3AgPSAwLjk1IC0gaGVpZ2h0ICogaW5kZXgKLSAgICBheGVzID0gc2VsZi5maWcuYWRkX2F4ZXMoWzAuMSwgdG9wLCAwLjgsIGhlaWdodF0sCi0gICAgICAgIHhzY2FsZT0nbGluZWFyJywKLSAgICAgICAgeGxpbT1bMCwgdGltZXNwYW5dLAotICAgICAgICB5bGFiZWw9eWxhYmVsLAotICAgICAgICB5c2NhbGU9J2xpbmVhcicsCi0gICAgICAgIHlsaW09eWxpbSwKLSAgICAgICAgc2hhcmV4PXNoYXJleCkKLSAgICBheGVzLnRleHQoMC4wMiwgMC4wMiwgdGl0bGUsIHRyYW5zZm9ybT1heGVzLnRyYW5zQXhlcywgZm9udHNpemU9MTAsIGZvbnR3ZWlnaHQ9J2JvbGQnKQotICAgIGF4ZXMuc2V0X3hsYWJlbCgndGltZSAocyknLCBmb250c2l6ZT0xMCwgZm9udHdlaWdodD0nYm9sZCcpCi0gICAgYXhlcy5zZXRfeWxhYmVsKHlsYWJlbCwgZm9udHNpemU9MTAsIGZvbnR3ZWlnaHQ9J2JvbGQnKQotICAgIGF4ZXMuc2V0X3h0aWNrcyhyYW5nZSgwLCB0aW1lc3BhbiArIDEsIHRpbWV0aWNrcykpCi0gICAgYXhlcy5zZXRfeXRpY2tzKHl0aWNrcykKLSAgICBheGVzLmdyaWQoVHJ1ZSkKLQotICAgIGZvciBsYWJlbCBpbiBheGVzLmdldF94dGlja2xhYmVscygpOgotICAgICAgbGFiZWwuc2V0X2ZvbnRzaXplKDkpCi0gICAgZm9yIGxhYmVsIGluIGF4ZXMuZ2V0X3l0aWNrbGFiZWxzKCk6Ci0gICAgICBsYWJlbC5zZXRfZm9udHNpemUoOSkKLQotICAgIHJldHVybiBheGVzCi0KLSAgIyBBZGQgYSBsaW5lIHRvIHRoZSBheGVzIGZvciBhIHRpbWUgc2VyaWVzLgotICBkZWYgX2FkZF90aW1lc2VyaWVzX2xpbmUoc2VsZiwgYXhlcywgbGFiZWwsIGNvbG9yLCBsaW5ld2lkdGg9MSk6Ci0gICAgcmV0dXJuIGF4ZXMucGxvdChbXSwgbGFiZWw9bGFiZWwsIGNvbG9yPWNvbG9yLCBsaW5ld2lkdGg9bGluZXdpZHRoKVswXQotCi0gICMgQWRkIGEgbGVnZW5kIHRvIGEgdGltZSBzZXJpZXMuCi0gIGRlZiBfYWRkX3RpbWVzZXJpZXNfbGVnZW5kKHNlbGYsIGF4ZXMpOgotICAgIGF4ZXMubGVnZW5kKAotICAgICAgICBsb2M9J3VwcGVyIGxlZnQnLAotICAgICAgICBiYm94X3RvX2FuY2hvcj0oMS4wMSwgMSksCi0gICAgICAgIGJvcmRlcnBhZD0wLjEsCi0gICAgICAgIGJvcmRlcmF4ZXNwYWQ9MC4xLAotICAgICAgICBwcm9wPXsnc2l6ZSc6IDEwfSkKLQotICAjIFJlc2V0cyB0aGUgcGFyc2Ugc3RhdGUuCi0gIGRlZiBfcmVzZXRfcGFyc2Vfc3RhdGUoc2VsZik6Ci0gICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX3ggPSBOb25lCi0gICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX3kgPSBOb25lCi0gICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX3ogPSBOb25lCi0gICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX21hZ25pdHVkZSA9IE5vbmUKLSAgICBzZWxmLnBhcnNlX2ZpbHRlcmVkX2FjY2VsZXJhdGlvbl94ID0gTm9uZQotICAgIHNlbGYucGFyc2VfZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3kgPSBOb25lCi0gICAgc2VsZi5wYXJzZV9maWx0ZXJlZF9hY2NlbGVyYXRpb25feiA9IE5vbmUKLSAgICBzZWxmLnBhcnNlX2ZpbHRlcmVkX2FjY2VsZXJhdGlvbl9tYWduaXR1ZGUgPSBOb25lCi0gICAgc2VsZi5wYXJzZV90aWx0X2FuZ2xlID0gTm9uZQotICAgIHNlbGYucGFyc2Vfb3JpZW50YXRpb25fYW5nbGUgPSBOb25lCi0gICAgc2VsZi5wYXJzZV9jdXJyZW50X3JvdGF0aW9uID0gTm9uZQotICAgIHNlbGYucGFyc2VfcHJvcG9zZWRfcm90YXRpb24gPSBOb25lCi0gICAgc2VsZi5wYXJzZV9wcmVkaWN0ZWRfcm90YXRpb24gPSBOb25lCi0gICAgc2VsZi5wYXJzZV90aW1lX3VudGlsX3NldHRsZWQgPSBOb25lCi0gICAgc2VsZi5wYXJzZV90aW1lX3VudGlsX2ZsYXRfZGVsYXlfZXhwaXJlZCA9IE5vbmUKLSAgICBzZWxmLnBhcnNlX3RpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZCA9IE5vbmUKLSAgICBzZWxmLnBhcnNlX3RpbWVfdW50aWxfYWNjZWxlcmF0aW9uX2RlbGF5X2V4cGlyZWQgPSBOb25lCi0gICAgc2VsZi5wYXJzZV9zYW1wbGVfbGF0ZW5jeSA9IE5vbmUKLQotICAjIFVwZGF0ZSBzYW1wbGVzLgotICBkZWYgdXBkYXRlKHNlbGYpOgotICAgIHRpbWVpbmRleCA9IDAKLSAgICB3aGlsZSBUcnVlOgotICAgICAgdHJ5OgotICAgICAgICBsaW5lID0gc2VsZi5hZGJvdXQucmVhZGxpbmUoKQotICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICBwbG90LmNsb3NlKCkKLSAgICAgICAgcmV0dXJuCi0gICAgICBpZiBsaW5lIGlzIE5vbmU6Ci0gICAgICAgIGJyZWFrCi0gICAgICBwcmludCBsaW5lCi0KLSAgICAgIHRyeToKLSAgICAgICAgdGltZXN0YW1wID0gc2VsZi5fcGFyc2VfdGltZXN0YW1wKGxpbmUpCi0gICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgY29udGludWUKLSAgICAgIGlmIHNlbGYudGltZWJhc2UgaXMgTm9uZToKLSAgICAgICAgc2VsZi50aW1lYmFzZSA9IHRpbWVzdGFtcAotICAgICAgZGVsdGEgPSB0aW1lc3RhbXAgLSBzZWxmLnRpbWViYXNlCi0gICAgICB0aW1laW5kZXggPSBkZWx0YS5zZWNvbmRzICsgZGVsdGEubWljcm9zZWNvbmRzICogMC4wMDAwMDEKLQotICAgICAgaWYgbGluZS5maW5kKCdSYXcgYWNjZWxlcmF0aW9uIHZlY3RvcjonKSAhPSAtMToKLSAgICAgICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX3ggPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAneD0nKQotICAgICAgICBzZWxmLnBhcnNlX3Jhd19hY2NlbGVyYXRpb25feSA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICd5PScpCi0gICAgICAgIHNlbGYucGFyc2VfcmF3X2FjY2VsZXJhdGlvbl96ID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3o9JykKLSAgICAgICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX21hZ25pdHVkZSA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICdtYWduaXR1ZGU9JykKLQotICAgICAgaWYgbGluZS5maW5kKCdGaWx0ZXJlZCBhY2NlbGVyYXRpb24gdmVjdG9yOicpICE9IC0xOgotICAgICAgICBzZWxmLnBhcnNlX2ZpbHRlcmVkX2FjY2VsZXJhdGlvbl94ID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3g9JykKLSAgICAgICAgc2VsZi5wYXJzZV9maWx0ZXJlZF9hY2NlbGVyYXRpb25feSA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICd5PScpCi0gICAgICAgIHNlbGYucGFyc2VfZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3ogPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAnej0nKQotICAgICAgICBzZWxmLnBhcnNlX2ZpbHRlcmVkX2FjY2VsZXJhdGlvbl9tYWduaXR1ZGUgPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAnbWFnbml0dWRlPScpCi0KLSAgICAgIGlmIGxpbmUuZmluZCgndGlsdEFuZ2xlPScpICE9IC0xOgotICAgICAgICBzZWxmLnBhcnNlX3RpbHRfYW5nbGUgPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAndGlsdEFuZ2xlPScpCi0KLSAgICAgIGlmIGxpbmUuZmluZCgnb3JpZW50YXRpb25BbmdsZT0nKSAhPSAtMToKLSAgICAgICAgc2VsZi5wYXJzZV9vcmllbnRhdGlvbl9hbmdsZSA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICdvcmllbnRhdGlvbkFuZ2xlPScpCi0KLSAgICAgIGlmIGxpbmUuZmluZCgnUmVzdWx0OicpICE9IC0xOgotICAgICAgICBzZWxmLnBhcnNlX2N1cnJlbnRfcm90YXRpb24gPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAnY3VycmVudFJvdGF0aW9uPScpCi0gICAgICAgIHNlbGYucGFyc2VfcHJvcG9zZWRfcm90YXRpb24gPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAncHJvcG9zZWRSb3RhdGlvbj0nKQotICAgICAgICBzZWxmLnBhcnNlX3ByZWRpY3RlZF9yb3RhdGlvbiA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICdwcmVkaWN0ZWRSb3RhdGlvbj0nKQotICAgICAgICBzZWxmLnBhcnNlX3NhbXBsZV9sYXRlbmN5ID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3RpbWVEZWx0YU1TPScpCi0gICAgICAgIHNlbGYucGFyc2VfdGltZV91bnRpbF9zZXR0bGVkID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3RpbWVVbnRpbFNldHRsZWRNUz0nKQotICAgICAgICBzZWxmLnBhcnNlX3RpbWVfdW50aWxfZmxhdF9kZWxheV9leHBpcmVkID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3RpbWVVbnRpbEZsYXREZWxheUV4cGlyZWRNUz0nKQotICAgICAgICBzZWxmLnBhcnNlX3RpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZCA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICd0aW1lVW50aWxTd2luZ0RlbGF5RXhwaXJlZE1TPScpCi0gICAgICAgIHNlbGYucGFyc2VfdGltZV91bnRpbF9hY2NlbGVyYXRpb25fZGVsYXlfZXhwaXJlZCA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICd0aW1lVW50aWxBY2NlbGVyYXRpb25EZWxheUV4cGlyZWRNUz0nKQotCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnJhd19hY2NlbGVyYXRpb25feCwgdGltZWluZGV4LCBzZWxmLnBhcnNlX3Jhd19hY2NlbGVyYXRpb25feCkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYucmF3X2FjY2VsZXJhdGlvbl95LCB0aW1laW5kZXgsIHNlbGYucGFyc2VfcmF3X2FjY2VsZXJhdGlvbl95KQotICAgICAgICBzZWxmLl9hcHBlbmQoc2VsZi5yYXdfYWNjZWxlcmF0aW9uX3osIHRpbWVpbmRleCwgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX3opCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnJhd19hY2NlbGVyYXRpb25fbWFnbml0dWRlLCB0aW1laW5kZXgsIHNlbGYucGFyc2VfcmF3X2FjY2VsZXJhdGlvbl9tYWduaXR1ZGUpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl94LCB0aW1laW5kZXgsIHNlbGYucGFyc2VfZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3gpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl95LCB0aW1laW5kZXgsIHNlbGYucGFyc2VfZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3kpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl96LCB0aW1laW5kZXgsIHNlbGYucGFyc2VfZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3opCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9tYWduaXR1ZGUsIHRpbWVpbmRleCwgc2VsZi5wYXJzZV9maWx0ZXJlZF9hY2NlbGVyYXRpb25fbWFnbml0dWRlKQotICAgICAgICBzZWxmLl9hcHBlbmQoc2VsZi50aWx0X2FuZ2xlLCB0aW1laW5kZXgsIHNlbGYucGFyc2VfdGlsdF9hbmdsZSkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYub3JpZW50YXRpb25fYW5nbGUsIHRpbWVpbmRleCwgc2VsZi5wYXJzZV9vcmllbnRhdGlvbl9hbmdsZSkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYuY3VycmVudF9yb3RhdGlvbiwgdGltZWluZGV4LCBzZWxmLnBhcnNlX2N1cnJlbnRfcm90YXRpb24pCi0gICAgICAgIGlmIHNlbGYucGFyc2VfcHJvcG9zZWRfcm90YXRpb24gPj0gMDoKLSAgICAgICAgICBzZWxmLl9hcHBlbmQoc2VsZi5wcm9wb3NlZF9yb3RhdGlvbiwgdGltZWluZGV4LCBzZWxmLnBhcnNlX3Byb3Bvc2VkX3JvdGF0aW9uKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnByb3Bvc2VkX3JvdGF0aW9uLCB0aW1laW5kZXgsIE5vbmUpCi0gICAgICAgIGlmIHNlbGYucGFyc2VfcHJlZGljdGVkX3JvdGF0aW9uID49IDA6Ci0gICAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYucHJlZGljdGVkX3JvdGF0aW9uLCB0aW1laW5kZXgsIHNlbGYucGFyc2VfcHJlZGljdGVkX3JvdGF0aW9uKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnByZWRpY3RlZF9yb3RhdGlvbiwgdGltZWluZGV4LCBOb25lKQotICAgICAgICBzZWxmLl9hcHBlbmQoc2VsZi50aW1lX3VudGlsX3NldHRsZWQsIHRpbWVpbmRleCwgc2VsZi5wYXJzZV90aW1lX3VudGlsX3NldHRsZWQpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnRpbWVfdW50aWxfZmxhdF9kZWxheV9leHBpcmVkLCB0aW1laW5kZXgsIHNlbGYucGFyc2VfdGltZV91bnRpbF9mbGF0X2RlbGF5X2V4cGlyZWQpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnRpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZCwgdGltZWluZGV4LCBzZWxmLnBhcnNlX3RpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZCkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYudGltZV91bnRpbF9hY2NlbGVyYXRpb25fZGVsYXlfZXhwaXJlZCwgdGltZWluZGV4LCBzZWxmLnBhcnNlX3RpbWVfdW50aWxfYWNjZWxlcmF0aW9uX2RlbGF5X2V4cGlyZWQpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnNhbXBsZV9sYXRlbmN5LCB0aW1laW5kZXgsIHNlbGYucGFyc2Vfc2FtcGxlX2xhdGVuY3kpCi0gICAgICAgIHNlbGYuX3Jlc2V0X3BhcnNlX3N0YXRlKCkKLQotICAgICMgU2Nyb2xsIHRoZSBwbG90cy4KLSAgICBpZiB0aW1laW5kZXggPiB0aW1lc3BhbjoKLSAgICAgIGJvdHRvbSA9IGludCh0aW1laW5kZXgpIC0gdGltZXNwYW4gKyBzY3JvbGxqdW1wCi0gICAgICBzZWxmLnRpbWViYXNlICs9IHRpbWVkZWx0YShzZWNvbmRzPWJvdHRvbSkKLSAgICAgIHNlbGYuX3Njcm9sbChzZWxmLnJhd19hY2NlbGVyYXRpb25feCwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYucmF3X2FjY2VsZXJhdGlvbl95LCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5yYXdfYWNjZWxlcmF0aW9uX3osIGJvdHRvbSkKLSAgICAgIHNlbGYuX3Njcm9sbChzZWxmLnJhd19hY2NlbGVyYXRpb25fbWFnbml0dWRlLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25feCwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3ksIGJvdHRvbSkKLSAgICAgIHNlbGYuX3Njcm9sbChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl96LCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fbWFnbml0dWRlLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi50aWx0X2FuZ2xlLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5vcmllbnRhdGlvbl9hbmdsZSwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYuY3VycmVudF9yb3RhdGlvbiwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYucHJvcG9zZWRfcm90YXRpb24sIGJvdHRvbSkKLSAgICAgIHNlbGYuX3Njcm9sbChzZWxmLnByZWRpY3RlZF9yb3RhdGlvbiwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYudGltZV91bnRpbF9zZXR0bGVkLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi50aW1lX3VudGlsX2ZsYXRfZGVsYXlfZXhwaXJlZCwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYudGltZV91bnRpbF9zd2luZ19kZWxheV9leHBpcmVkLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi50aW1lX3VudGlsX2FjY2VsZXJhdGlvbl9kZWxheV9leHBpcmVkLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5zYW1wbGVfbGF0ZW5jeSwgYm90dG9tKQotCi0gICAgIyBSZWRyYXcgdGhlIHBsb3RzLgotICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl9saW5lX3guc2V0X2RhdGEoc2VsZi5yYXdfYWNjZWxlcmF0aW9uX3gpCi0gICAgc2VsZi5yYXdfYWNjZWxlcmF0aW9uX2xpbmVfeS5zZXRfZGF0YShzZWxmLnJhd19hY2NlbGVyYXRpb25feSkKLSAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25fbGluZV96LnNldF9kYXRhKHNlbGYucmF3X2FjY2VsZXJhdGlvbl96KQotICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl9saW5lX21hZ25pdHVkZS5zZXRfZGF0YShzZWxmLnJhd19hY2NlbGVyYXRpb25fbWFnbml0dWRlKQotICAgIHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX2xpbmVfeC5zZXRfZGF0YShzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl94KQotICAgIHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX2xpbmVfeS5zZXRfZGF0YShzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl95KQotICAgIHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX2xpbmVfei5zZXRfZGF0YShzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl96KQotICAgIHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX2xpbmVfbWFnbml0dWRlLnNldF9kYXRhKHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX21hZ25pdHVkZSkKLSAgICBzZWxmLnRpbHRfYW5nbGVfbGluZS5zZXRfZGF0YShzZWxmLnRpbHRfYW5nbGUpCi0gICAgc2VsZi5vcmllbnRhdGlvbl9hbmdsZV9saW5lLnNldF9kYXRhKHNlbGYub3JpZW50YXRpb25fYW5nbGUpCi0gICAgc2VsZi5jdXJyZW50X3JvdGF0aW9uX2xpbmUuc2V0X2RhdGEoc2VsZi5jdXJyZW50X3JvdGF0aW9uKQotICAgIHNlbGYucHJvcG9zZWRfcm90YXRpb25fbGluZS5zZXRfZGF0YShzZWxmLnByb3Bvc2VkX3JvdGF0aW9uKQotICAgIHNlbGYucHJlZGljdGVkX3JvdGF0aW9uX2xpbmUuc2V0X2RhdGEoc2VsZi5wcmVkaWN0ZWRfcm90YXRpb24pCi0gICAgc2VsZi50aW1lX3VudGlsX3NldHRsZWRfbGluZS5zZXRfZGF0YShzZWxmLnRpbWVfdW50aWxfc2V0dGxlZCkKLSAgICBzZWxmLnRpbWVfdW50aWxfZmxhdF9kZWxheV9leHBpcmVkX2xpbmUuc2V0X2RhdGEoc2VsZi50aW1lX3VudGlsX2ZsYXRfZGVsYXlfZXhwaXJlZCkKLSAgICBzZWxmLnRpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZF9saW5lLnNldF9kYXRhKHNlbGYudGltZV91bnRpbF9zd2luZ19kZWxheV9leHBpcmVkKQotICAgIHNlbGYudGltZV91bnRpbF9hY2NlbGVyYXRpb25fZGVsYXlfZXhwaXJlZF9saW5lLnNldF9kYXRhKHNlbGYudGltZV91bnRpbF9hY2NlbGVyYXRpb25fZGVsYXlfZXhwaXJlZCkKLSAgICBzZWxmLnNhbXBsZV9sYXRlbmN5X2xpbmUuc2V0X2RhdGEoc2VsZi5zYW1wbGVfbGF0ZW5jeSkKLQotICAgIHNlbGYuZmlnLmNhbnZhcy5kcmF3X2lkbGUoKQotCi0gICMgU2Nyb2xsIGEgdGltZSBzZXJpZXMuCi0gIGRlZiBfc2Nyb2xsKHNlbGYsIHRpbWVzZXJpZXMsIGJvdHRvbSk6Ci0gICAgYm90dG9tX2luZGV4ID0gYmlzZWN0LmJpc2VjdF9sZWZ0KHRpbWVzZXJpZXNbMF0sIGJvdHRvbSkKLSAgICBkZWwgdGltZXNlcmllc1swXVs6Ym90dG9tX2luZGV4XQotICAgIGRlbCB0aW1lc2VyaWVzWzFdWzpib3R0b21faW5kZXhdCi0gICAgZm9yIGksIHRpbWVpbmRleCBpbiBlbnVtZXJhdGUodGltZXNlcmllc1swXSk6Ci0gICAgICB0aW1lc2VyaWVzWzBdW2ldID0gdGltZWluZGV4IC0gYm90dG9tCi0KLSAgIyBFeHRyYWN0IGEgd29yZCBmb2xsb3dpbmcgdGhlIHNwZWNpZmllZCBwcmVmaXguCi0gIGRlZiBfZ2V0X2ZvbGxvd2luZ193b3JkKHNlbGYsIGxpbmUsIHByZWZpeCk6Ci0gICAgcHJlZml4X2luZGV4ID0gbGluZS5maW5kKHByZWZpeCkKLSAgICBpZiBwcmVmaXhfaW5kZXggPT0gLTE6Ci0gICAgICByZXR1cm4gTm9uZQotICAgIHN0YXJ0X2luZGV4ID0gcHJlZml4X2luZGV4ICsgbGVuKHByZWZpeCkKLSAgICBkZWxpbV9pbmRleCA9IGxpbmUuZmluZCgnLCcsIHN0YXJ0X2luZGV4KQotICAgIGlmIGRlbGltX2luZGV4ID09IC0xOgotICAgICAgcmV0dXJuIGxpbmVbc3RhcnRfaW5kZXg6XQotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gbGluZVtzdGFydF9pbmRleDpkZWxpbV9pbmRleF0KLQotICAjIEV4dHJhY3QgYSBudW1iZXIgZm9sbG93aW5nIHRoZSBzcGVjaWZpZWQgcHJlZml4LgotICBkZWYgX2dldF9mb2xsb3dpbmdfbnVtYmVyKHNlbGYsIGxpbmUsIHByZWZpeCk6Ci0gICAgd29yZCA9IHNlbGYuX2dldF9mb2xsb3dpbmdfd29yZChsaW5lLCBwcmVmaXgpCi0gICAgaWYgd29yZCBpcyBOb25lOgotICAgICAgcmV0dXJuIE5vbmUKLSAgICByZXR1cm4gZmxvYXQod29yZCkKLQotICAjIEV4dHJhY3QgYW4gYXJyYXkgb2YgbnVtYmVycyBmb2xsb3dpbmcgdGhlIHNwZWNpZmllZCBwcmVmaXguCi0gIGRlZiBfZ2V0X2ZvbGxvd2luZ19hcnJheV9vZl9udW1iZXJzKHNlbGYsIGxpbmUsIHByZWZpeCk6Ci0gICAgcHJlZml4X2luZGV4ID0gbGluZS5maW5kKHByZWZpeCArICdbJykKLSAgICBpZiBwcmVmaXhfaW5kZXggPT0gLTE6Ci0gICAgICByZXR1cm4gTm9uZQotICAgIHN0YXJ0X2luZGV4ID0gcHJlZml4X2luZGV4ICsgbGVuKHByZWZpeCkgKyAxCi0gICAgZGVsaW1faW5kZXggPSBsaW5lLmZpbmQoJ10nLCBzdGFydF9pbmRleCkKLSAgICBpZiBkZWxpbV9pbmRleCA9PSAtMToKLSAgICAgIHJldHVybiBOb25lCi0KLSAgICByZXN1bHQgPSBbXQotICAgIHdoaWxlIHN0YXJ0X2luZGV4IDwgZGVsaW1faW5kZXg6Ci0gICAgICBjb21tYV9pbmRleCA9IGxpbmUuZmluZCgnLCAnLCBzdGFydF9pbmRleCwgZGVsaW1faW5kZXgpCi0gICAgICBpZiBjb21tYV9pbmRleCA9PSAtMToKLSAgICAgICAgcmVzdWx0LmFwcGVuZChmbG9hdChsaW5lW3N0YXJ0X2luZGV4OmRlbGltX2luZGV4XSkpCi0gICAgICAgIGJyZWFrOwotICAgICAgcmVzdWx0LmFwcGVuZChmbG9hdChsaW5lW3N0YXJ0X2luZGV4OmNvbW1hX2luZGV4XSkpCi0gICAgICBzdGFydF9pbmRleCA9IGNvbW1hX2luZGV4ICsgMgotICAgIHJldHVybiByZXN1bHQKLQotICAjIEFkZCBhIHZhbHVlIHRvIGEgdGltZSBzZXJpZXMuCi0gIGRlZiBfYXBwZW5kKHNlbGYsIHRpbWVzZXJpZXMsIHRpbWVpbmRleCwgbnVtYmVyKToKLSAgICB0aW1lc2VyaWVzWzBdLmFwcGVuZCh0aW1laW5kZXgpCi0gICAgdGltZXNlcmllc1sxXS5hcHBlbmQobnVtYmVyKQotCi0gICMgUGFyc2UgdGhlIGxvZ2NhdCB0aW1lc3RhbXAuCi0gICMgVGltZXN0YW1wIGhhcyB0aGUgZm9ybSAnMDEtMjEgMjA6NDI6NDIuOTMwJwotICBkZWYgX3BhcnNlX3RpbWVzdGFtcChzZWxmLCBsaW5lKToKLSAgICByZXR1cm4gZGF0ZXRpbWUuc3RycHRpbWUobGluZVswOjE4XSwgJyVtLSVkICVIOiVNOiVTLiVmJykKLQotIyBOb3RpY2UKLXByaW50ICJXaW5kb3cgT3JpZW50YXRpb24gTGlzdGVuZXIgcGxvdHRpbmcgdG9vbCIKLXByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgotcHJpbnQgIlBsZWFzZSB0dXJuIG9uIHRoZSBXaW5kb3cgT3JpZW50YXRpb24gTGlzdGVuZXIgbG9nZ2luZyBpbiBEZXZlbG9wbWVudCBTZXR0aW5ncy4iCi0KLSMgU3RhcnQgYWRiLgotcHJpbnQgIlN0YXJ0aW5nIGFkYiBsb2djYXQuXG4iCi0KLWFkYiA9IHN1YnByb2Nlc3MuUG9wZW4oWydhZGInLCAnbG9nY2F0JywgJy1zJywgJy12JywgJ3RpbWUnLCAnV2luZG93T3JpZW50YXRpb25MaXN0ZW5lcjpWJ10sCi0gICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLWFkYm91dCA9IE5vbkJsb2NraW5nU3RyZWFtKGFkYi5zdGRvdXQpCi0KLSMgUHJlcGFyZSBwbG90dGVyLgotcGxvdHRlciA9IFBsb3R0ZXIoYWRib3V0KQotcGxvdHRlci51cGRhdGUoKQotCi0jIE1haW4gbG9vcC4KLXBsb3Quc2hvdygpCmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkLzIwMDgwNTIyLmNvbXBpbGVkIGIvdG9vbHMvcHJlbG9hZC8yMDA4MDUyMi5jb21waWxlZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJhZjQyMi4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkLzIwMDgwNTIyLmNvbXBpbGVkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZC8yMDA5MDgxMS5jb21waWxlZCBiL3Rvb2xzL3ByZWxvYWQvMjAwOTA4MTEuY29tcGlsZWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYmVjYTAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcHJlbG9hZC8yMDA5MDgxMS5jb21waWxlZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvMjAxMDAyMjMuY29tcGlsZWQgYi90b29scy9wcmVsb2FkLzIwMTAwMjIzLmNvbXBpbGVkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDU2Mzg4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvMjAxMDAyMjMuY29tcGlsZWQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL0FuZHJvaWQubWsgYi90b29scy9wcmVsb2FkL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMjU4NzAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcHJlbG9hZC9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVMgOj0gXAotCUNvbXBpbGUuamF2YSAgXAotCUxvYWRlZENsYXNzLmphdmEgXAotCU1lbW9yeVVzYWdlLmphdmEgXAotCU9wZXJhdGlvbi5qYXZhIFwKLQlQb2xpY3kuamF2YSBcCi0JUHJpbnRDc3YuamF2YSBcCi0JUHJpbnRIdG1sRGlmZi5qYXZhIFwKLQlQcmludFBzVHJlZS5qYXZhIFwKLQlQcm9jLmphdmEgXAotCVJlY29yZC5qYXZhIFwKLQlSb290LmphdmEgXAotCVdyaXRlUHJlbG9hZGVkQ2xhc3NGaWxlLmphdmEKLQotTE9DQUxfTU9EVUxFOj0gcHJlbG9hZAotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9KQVZBX0xJQlJBUlkpCi0KLWluY2x1ZGUgJChjYWxsIGFsbC1zdWJkaXItbWFrZWZpbGVzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZC9Db21waWxlLmphdmEgYi90b29scy9wcmVsb2FkL0NvbXBpbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcyNThlZi4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL0NvbXBpbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBQYXJzZXMgYW5kIGFuYWx5emVzIGEgbG9nLCBwdWxsaW5nIG91ciBQUkVMT0FEIGluZm9ybWF0aW9uLiBJZiB5b3UgaGF2ZQotICogYW4gZW11bGF0b3Igb3IgZGV2aWNlIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQsIHRoaXMgY2xhc3Mgd2lsbCB1c2UgaXQKLSAqIHRvIG1lYXN1cmUgYW5kIHJlY29yZCB0aGUgbWVtb3J5IHVzYWdlIG9mIGVhY2ggY2xhc3MuCi0gKiAKLSAqIFRPRE86IFNob3VsZCBhbmFseXplIGxpbmVzIGFuZCBzZWxlY3Qgc3Vic3RyaW5nIGR5bmFtaWNhbGx5IChpbnN0ZWFkIG9mIGhhcmRjb2RlZCAxOSkKLSAqLwotcHVibGljIGNsYXNzIENvbXBpbGUgewotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDIpIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IENvbXBpbGUgW2xvZyBmaWxlXSBbb3V0cHV0IGZpbGVdIik7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJvb3Qgcm9vdCA9IG5ldyBSb290KCk7Ci0KLSAgICAgICAgTGlzdDxSZWNvcmQ+IHJlY29yZHMgPSBuZXcgQXJyYXlMaXN0PFJlY29yZD4oKTsKLQotICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCi0gICAgICAgICAgICAgICAgbmV3IEZpbGVJbnB1dFN0cmVhbShhcmdzWzBdKSkpOwotCi0gICAgICAgIFN0cmluZyBsaW5lOwotICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgICAgIHdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKLSAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoIkkvUFJFTE9BRCIpKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNsaXBwZWQgPSBsaW5lLnN1YnN0cmluZygxOSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZHMuYWRkKG5ldyBSZWNvcmQoY2xpcHBlZCwgbGluZU51bWJlcikpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhjZXB0aW9uIHdoaWxlIHJlY29yZGluZyBsaW5lICIgKyBsaW5lTnVtYmVyICsgIjogIiArIGxpbmUsIGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoUmVjb3JkIHJlY29yZCA6IHJlY29yZHMpIHsKLSAgICAgICAgICAgIHJvb3QuaW5kZXhQcm9jZXNzKHJlY29yZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKFJlY29yZCByZWNvcmQgOiByZWNvcmRzKSB7Ci0gICAgICAgICAgICByb290LmluZGV4Q2xhc3NPcGVyYXRpb24ocmVjb3JkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGluLmNsb3NlKCk7Ci0KLSAgICAgICAgcm9vdC50b0ZpbGUoYXJnc1sxXSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZC9Mb2FkZWRDbGFzcy5qYXZhIGIvdG9vbHMvcHJlbG9hZC9Mb2FkZWRDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmU1ZGZjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvTG9hZGVkQ2xhc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIEEgbG9hZGVkIGNsYXNzLgotICovCi1jbGFzcyBMb2FkZWRDbGFzcyBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSwgQ29tcGFyYWJsZTxMb2FkZWRDbGFzcz4gewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMDsKLQotICAgIC8qKiBDbGFzcyBuYW1lLiAqLwotICAgIGZpbmFsIFN0cmluZyBuYW1lOwotCi0gICAgLyoqIExvYWQgb3BlcmF0aW9ucy4gKi8KLSAgICBmaW5hbCBMaXN0PE9wZXJhdGlvbj4gbG9hZHMgPSBuZXcgQXJyYXlMaXN0PE9wZXJhdGlvbj4oKTsKLQotICAgIC8qKiBTdGF0aWMgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucy4gKi8KLSAgICBmaW5hbCBMaXN0PE9wZXJhdGlvbj4gaW5pdGlhbGl6YXRpb25zID0gbmV3IEFycmF5TGlzdDxPcGVyYXRpb24+KCk7Ci0KLSAgICAvKiogTWVtb3J5IHVzYWdlIGdhdGhlcmVkIGJ5IGxvYWRpbmcgb25seSB0aGlzIGNsYXNzIGluIGl0cyBvd24gVk0uICovCi0gICAgTWVtb3J5VXNhZ2UgbWVtb3J5VXNhZ2UgPSBNZW1vcnlVc2FnZS5OT1RfQVZBSUxBQkxFOwotCi0gICAgLyoqCi0gICAgICogV2hldGhlciBvciBub3QgdGhpcyBjbGFzcyB3YXMgbG9hZGVkIGluIHRoZSBzeXN0ZW0gY2xhc3MgbG9hZGVyLgotICAgICAqLwotICAgIGZpbmFsIGJvb2xlYW4gc3lzdGVtQ2xhc3M7Ci0KLSAgICAvKiogV2hldGhlciBvciBub3QgdGhpcyBjbGFzcyB3aWxsIGJlIHByZWxvYWRlZC4gKi8KLSAgICBib29sZWFuIHByZWxvYWRlZDsKLQotICAgIC8qKiBDb25zdHJ1Y3RzIGEgbmV3IGNsYXNzLiAqLwotICAgIExvYWRlZENsYXNzKFN0cmluZyBuYW1lLCBib29sZWFuIHN5c3RlbUNsYXNzKSB7Ci0gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuc3lzdGVtQ2xhc3MgPSBzeXN0ZW1DbGFzczsKLSAgICB9Ci0KLSAgICB2b2lkIG1lYXN1cmVNZW1vcnlVc2FnZSgpIHsKLSAgICAgICAgdGhpcy5tZW1vcnlVc2FnZSA9IE1lbW9yeVVzYWdlLmZvckNsYXNzKG5hbWUpOwotICAgIH0KLQotICAgIGludCBtbHQgPSAtMTsKLQotICAgIC8qKiBNZWRpYW4gdGltZSB0byBsb2FkIHRoaXMgY2xhc3MuICovCi0gICAgaW50IG1lZGlhbkxvYWRUaW1lTWljcm9zKCkgewotICAgICAgICBpZiAobWx0ICE9IC0xKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1sdCA9IGNhbGN1bGF0ZU1lZGlhbihsb2Fkcyk7Ci0gICAgfQotCi0gICAgaW50IG1pdCA9IC0xOwotCi0gICAgLyoqIE1lZGlhbiB0aW1lIHRvIGluaXRpYWxpemUgdGhpcyBjbGFzcy4gKi8KLSAgICBpbnQgbWVkaWFuSW5pdFRpbWVNaWNyb3MoKSB7Ci0gICAgICAgIGlmIChtaXQgIT0gLTEpIHsKLSAgICAgICAgICAgIHJldHVybiBtaXQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbWl0ID0gY2FsY3VsYXRlTWVkaWFuKGluaXRpYWxpemF0aW9ucyk7Ci0gICAgfQotCi0gICAgaW50IG1lZGlhblRpbWVNaWNyb3MoKSB7Ci0gICAgICAgIHJldHVybiBtZWRpYW5Jbml0VGltZU1pY3JvcygpICsgbWVkaWFuTG9hZFRpbWVNaWNyb3MoKTsKLSAgICB9Ci0KLSAgICAvKiogQ2FsY3VsYXRlcyB0aGUgbWVkaWFuIGR1cmF0aW9uIGZvciBhIGxpc3Qgb2Ygb3BlcmF0aW9ucy4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgY2FsY3VsYXRlTWVkaWFuKExpc3Q8T3BlcmF0aW9uPiBvcGVyYXRpb25zKSB7Ci0gICAgICAgIGludCBzaXplID0gb3BlcmF0aW9ucy5zaXplKCk7Ci0gICAgICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50W10gdGltZXMgPSBuZXcgaW50W3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgdGltZXNbaV0gPSBvcGVyYXRpb25zLmdldChpKS5leGNsdXNpdmVUaW1lTWljcm9zKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBcnJheXMuc29ydCh0aW1lcyk7Ci0gICAgICAgIGludCBtaWRkbGUgPSBzaXplIC8gMjsKLSAgICAgICAgaWYgKHNpemUgJSAyID09IDEpIHsKLSAgICAgICAgICAgIC8vIE9kZAotICAgICAgICAgICAgcmV0dXJuIHRpbWVzW21pZGRsZV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBFdmVuIC0tIGF2ZXJhZ2UgdGhlIHR3by4KLSAgICAgICAgICAgIHJldHVybiAodGltZXNbbWlkZGxlIC0gMV0gKyB0aW1lc1ttaWRkbGVdKSAvIDI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyBuYW1lcyBvZiBwcm9jZXNzZXMgdGhhdCBsb2FkZWQgdGhpcyBjbGFzcy4gKi8KLSAgICBTZXQ8U3RyaW5nPiBwcm9jZXNzTmFtZXMoKSB7Ci0gICAgICAgIFNldDxTdHJpbmc+IG5hbWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotICAgICAgICBhZGRQcm9jZXNzTmFtZXMobG9hZHMsIG5hbWVzKTsKLSAgICAgICAgYWRkUHJvY2Vzc05hbWVzKGluaXRpYWxpemF0aW9ucywgbmFtZXMpOwotICAgICAgICByZXR1cm4gbmFtZXM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFkZFByb2Nlc3NOYW1lcyhMaXN0PE9wZXJhdGlvbj4gb3BzLCBTZXQ8U3RyaW5nPiBuYW1lcykgewotICAgICAgICBmb3IgKE9wZXJhdGlvbiBvcGVyYXRpb24gOiBvcHMpIHsKLSAgICAgICAgICAgIGlmIChvcGVyYXRpb24ucHJvY2Vzcy5mcm9tWnlnb3RlKCkpIHsKLSAgICAgICAgICAgICAgICBuYW1lcy5hZGQob3BlcmF0aW9uLnByb2Nlc3MubmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhMb2FkZWRDbGFzcyBvKSB7Ci0gICAgICAgIHJldHVybiBuYW1lLmNvbXBhcmVUbyhvLm5hbWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvTWVtb3J5VXNhZ2UuamF2YSBiL3Rvb2xzL3ByZWxvYWQvTWVtb3J5VXNhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhmOTVmNC4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL01lbW9yeVVzYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotLyoqCi0gKiBNZW1vcnkgdXNhZ2UgaW5mb3JtYXRpb24uCi0gKi8KLWNsYXNzIE1lbW9yeVVzYWdlIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDA7Ci0KLSAgICBzdGF0aWMgZmluYWwgTWVtb3J5VXNhZ2UgTk9UX0FWQUlMQUJMRSA9IG5ldyBNZW1vcnlVc2FnZSgpOwotICAgIAotICAgIHN0YXRpYyBpbnQgZXJyb3JDb3VudCA9IDA7Ci0KLSAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGluIDFrQiBpbmNyZW1lbnRzIChub3QgNGtCIGxpa2UgeW91J2QgZXhwZWN0KS4KLSAgICBmaW5hbCBpbnQgbmF0aXZlU2hhcmVkUGFnZXM7Ci0gICAgZmluYWwgaW50IGphdmFTaGFyZWRQYWdlczsKLSAgICBmaW5hbCBpbnQgb3RoZXJTaGFyZWRQYWdlczsKLSAgICBmaW5hbCBpbnQgbmF0aXZlUHJpdmF0ZVBhZ2VzOwotICAgIGZpbmFsIGludCBqYXZhUHJpdmF0ZVBhZ2VzOwotICAgIGZpbmFsIGludCBvdGhlclByaXZhdGVQYWdlczsKLQotICAgIGZpbmFsIGludCBhbGxvY0NvdW50OwotICAgIGZpbmFsIGludCBhbGxvY1NpemU7Ci0gICAgZmluYWwgaW50IGZyZWVkQ291bnQ7Ci0gICAgZmluYWwgaW50IGZyZWVkU2l6ZTsKLSAgICBmaW5hbCBsb25nIG5hdGl2ZUhlYXBTaXplOwotCi0gICAgcHVibGljIE1lbW9yeVVzYWdlKFN0cmluZyBsaW5lKSB7Ci0gICAgICAgIFN0cmluZ1tdIHBhcnNlZCA9IGxpbmUuc3BsaXQoIiwiKTsKLQotICAgICAgICBuYXRpdmVTaGFyZWRQYWdlcyA9IEludGVnZXIucGFyc2VJbnQocGFyc2VkWzFdKTsKLSAgICAgICAgamF2YVNoYXJlZFBhZ2VzID0gSW50ZWdlci5wYXJzZUludChwYXJzZWRbMl0pOwotICAgICAgICBvdGhlclNoYXJlZFBhZ2VzID0gSW50ZWdlci5wYXJzZUludChwYXJzZWRbM10pOwotICAgICAgICBuYXRpdmVQcml2YXRlUGFnZXMgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnNlZFs0XSk7Ci0gICAgICAgIGphdmFQcml2YXRlUGFnZXMgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnNlZFs1XSk7Ci0gICAgICAgIG90aGVyUHJpdmF0ZVBhZ2VzID0gSW50ZWdlci5wYXJzZUludChwYXJzZWRbNl0pOwotICAgICAgICBhbGxvY0NvdW50ID0gSW50ZWdlci5wYXJzZUludChwYXJzZWRbN10pOwotICAgICAgICBhbGxvY1NpemUgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnNlZFs4XSk7Ci0gICAgICAgIGZyZWVkQ291bnQgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnNlZFs5XSk7Ci0gICAgICAgIGZyZWVkU2l6ZSA9IEludGVnZXIucGFyc2VJbnQocGFyc2VkWzEwXSk7Ci0gICAgICAgIG5hdGl2ZUhlYXBTaXplID0gTG9uZy5wYXJzZUxvbmcocGFyc2VkWzExXSk7Ci0gICAgfQotCi0gICAgTWVtb3J5VXNhZ2UoKSB7Ci0gICAgICAgIG5hdGl2ZVNoYXJlZFBhZ2VzID0gLTE7Ci0gICAgICAgIGphdmFTaGFyZWRQYWdlcyA9IC0xOwotICAgICAgICBvdGhlclNoYXJlZFBhZ2VzID0gLTE7Ci0gICAgICAgIG5hdGl2ZVByaXZhdGVQYWdlcyA9IC0xOwotICAgICAgICBqYXZhUHJpdmF0ZVBhZ2VzID0gLTE7Ci0gICAgICAgIG90aGVyUHJpdmF0ZVBhZ2VzID0gLTE7Ci0KLSAgICAgICAgYWxsb2NDb3VudCA9IC0xOwotICAgICAgICBhbGxvY1NpemUgPSAtMTsKLSAgICAgICAgZnJlZWRDb3VudCA9IC0xOwotICAgICAgICBmcmVlZFNpemUgPSAtMTsKLSAgICAgICAgbmF0aXZlSGVhcFNpemUgPSAtMTsKLSAgICB9Ci0KLSAgICBNZW1vcnlVc2FnZShpbnQgbmF0aXZlU2hhcmVkUGFnZXMsCi0gICAgICAgICAgICBpbnQgamF2YVNoYXJlZFBhZ2VzLAotICAgICAgICAgICAgaW50IG90aGVyU2hhcmVkUGFnZXMsCi0gICAgICAgICAgICBpbnQgbmF0aXZlUHJpdmF0ZVBhZ2VzLAotICAgICAgICAgICAgaW50IGphdmFQcml2YXRlUGFnZXMsCi0gICAgICAgICAgICBpbnQgb3RoZXJQcml2YXRlUGFnZXMsCi0gICAgICAgICAgICBpbnQgYWxsb2NDb3VudCwKLSAgICAgICAgICAgIGludCBhbGxvY1NpemUsCi0gICAgICAgICAgICBpbnQgZnJlZWRDb3VudCwKLSAgICAgICAgICAgIGludCBmcmVlZFNpemUsCi0gICAgICAgICAgICBsb25nIG5hdGl2ZUhlYXBTaXplKSB7Ci0gICAgICAgIHRoaXMubmF0aXZlU2hhcmVkUGFnZXMgPSBuYXRpdmVTaGFyZWRQYWdlczsKLSAgICAgICAgdGhpcy5qYXZhU2hhcmVkUGFnZXMgPSBqYXZhU2hhcmVkUGFnZXM7Ci0gICAgICAgIHRoaXMub3RoZXJTaGFyZWRQYWdlcyA9IG90aGVyU2hhcmVkUGFnZXM7Ci0gICAgICAgIHRoaXMubmF0aXZlUHJpdmF0ZVBhZ2VzID0gbmF0aXZlUHJpdmF0ZVBhZ2VzOwotICAgICAgICB0aGlzLmphdmFQcml2YXRlUGFnZXMgPSBqYXZhUHJpdmF0ZVBhZ2VzOwotICAgICAgICB0aGlzLm90aGVyUHJpdmF0ZVBhZ2VzID0gb3RoZXJQcml2YXRlUGFnZXM7Ci0gICAgICAgIHRoaXMuYWxsb2NDb3VudCA9IGFsbG9jQ291bnQ7Ci0gICAgICAgIHRoaXMuYWxsb2NTaXplID0gYWxsb2NTaXplOwotICAgICAgICB0aGlzLmZyZWVkQ291bnQgPSBmcmVlZENvdW50OwotICAgICAgICB0aGlzLmZyZWVkU2l6ZSA9IGZyZWVkU2l6ZTsKLSAgICAgICAgdGhpcy5uYXRpdmVIZWFwU2l6ZSA9IG5hdGl2ZUhlYXBTaXplOwotICAgIH0KLQotICAgIE1lbW9yeVVzYWdlIHN1YnRyYWN0KE1lbW9yeVVzYWdlIGJhc2VsaW5lKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVtb3J5VXNhZ2UoCi0gICAgICAgICAgICAgICAgbmF0aXZlU2hhcmVkUGFnZXMgLSBiYXNlbGluZS5uYXRpdmVTaGFyZWRQYWdlcywKLSAgICAgICAgICAgICAgICBqYXZhU2hhcmVkUGFnZXMgLSBiYXNlbGluZS5qYXZhU2hhcmVkUGFnZXMsCi0gICAgICAgICAgICAgICAgb3RoZXJTaGFyZWRQYWdlcyAtIGJhc2VsaW5lLm90aGVyU2hhcmVkUGFnZXMsCi0gICAgICAgICAgICAgICAgbmF0aXZlUHJpdmF0ZVBhZ2VzIC0gYmFzZWxpbmUubmF0aXZlUHJpdmF0ZVBhZ2VzLAotICAgICAgICAgICAgICAgIGphdmFQcml2YXRlUGFnZXMgLSBiYXNlbGluZS5qYXZhUHJpdmF0ZVBhZ2VzLAotICAgICAgICAgICAgICAgIG90aGVyUHJpdmF0ZVBhZ2VzIC0gYmFzZWxpbmUub3RoZXJQcml2YXRlUGFnZXMsCi0gICAgICAgICAgICAgICAgYWxsb2NDb3VudCAtIGJhc2VsaW5lLmFsbG9jQ291bnQsCi0gICAgICAgICAgICAgICAgYWxsb2NTaXplIC0gYmFzZWxpbmUuYWxsb2NTaXplLAotICAgICAgICAgICAgICAgIGZyZWVkQ291bnQgLSBiYXNlbGluZS5mcmVlZENvdW50LAotICAgICAgICAgICAgICAgIGZyZWVkU2l6ZSAtIGJhc2VsaW5lLmZyZWVkU2l6ZSwKLSAgICAgICAgICAgICAgICBuYXRpdmVIZWFwU2l6ZSAtIGJhc2VsaW5lLm5hdGl2ZUhlYXBTaXplKTsKLSAgICB9Ci0KLSAgICBpbnQgamF2YUhlYXBTaXplKCkgewotICAgICAgICByZXR1cm4gYWxsb2NTaXplIC0gZnJlZWRTaXplOwotICAgIH0KLQotICAgIGludCB0b3RhbEhlYXAoKSB7Ci0gICAgICAgIHJldHVybiBqYXZhSGVhcFNpemUoKSArIChpbnQpIG5hdGl2ZUhlYXBTaXplOwotICAgIH0KLQotICAgIGludCBqYXZhUGFnZXNJbksoKSB7Ci0gICAgICAgIHJldHVybiBqYXZhU2hhcmVkUGFnZXMgKyBqYXZhUHJpdmF0ZVBhZ2VzOwotICAgIH0KLQotICAgIGludCBuYXRpdmVQYWdlc0luSygpIHsKLSAgICAgICAgcmV0dXJuIG5hdGl2ZVNoYXJlZFBhZ2VzICsgbmF0aXZlUHJpdmF0ZVBhZ2VzOwotICAgIH0KLSAgICBpbnQgb3RoZXJQYWdlc0luSygpIHsKLSAgICAgICAgcmV0dXJuIG90aGVyU2hhcmVkUGFnZXMgKyBvdGhlclByaXZhdGVQYWdlczsKLSAgICB9Ci0KLSAgICBpbnQgdG90YWxQYWdlcygpIHsKLSAgICAgICAgcmV0dXJuIGphdmFTaGFyZWRQYWdlcyArIGphdmFQcml2YXRlUGFnZXMgKyBuYXRpdmVTaGFyZWRQYWdlcyArCi0gICAgICAgICAgICAgICAgbmF0aXZlUHJpdmF0ZVBhZ2VzICsgb3RoZXJTaGFyZWRQYWdlcyArIG90aGVyUHJpdmF0ZVBhZ2VzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdhcyB0aGlzIGluZm9ybWF0aW9uIGF2YWlsYWJsZT8KLSAgICAgKi8KLSAgICBib29sZWFuIGlzQXZhaWxhYmxlKCkgewotICAgICAgICByZXR1cm4gbmF0aXZlU2hhcmVkUGFnZXMgIT0gLTE7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTWVhc3VyZXMgYmFzZWxpbmUgbWVtb3J5IHVzYWdlLgotICAgICAqLwotICAgIHN0YXRpYyBNZW1vcnlVc2FnZSBiYXNlbGluZSgpIHsKLSAgICAgICAgcmV0dXJuIGZvckNsYXNzKG51bGwpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDTEFTU19QQVRIID0gIi1YYm9vdGNsYXNzcGF0aCIKLSAgICAgICAgICAgICsgIjovc3lzdGVtL2ZyYW1ld29yay9jb3JlLmphciIKLSAgICAgICAgICAgICsgIjovc3lzdGVtL2ZyYW1ld29yay9leHQuamFyIgotICAgICAgICAgICAgKyAiOi9zeXN0ZW0vZnJhbWV3b3JrL2ZyYW1ld29yay5qYXIiCi0gICAgICAgICAgICArICI6L3N5c3RlbS9mcmFtZXdvcmsvZnJhbWV3b3JrLXRlc3RzLmphciIKLSAgICAgICAgICAgICsgIjovc3lzdGVtL2ZyYW1ld29yay9zZXJ2aWNlcy5qYXIiCi0gICAgICAgICAgICArICI6L3N5c3RlbS9mcmFtZXdvcmsvbG9hZGNsYXNzLmphciI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBHRVRfRElSVFlfUEFHRVMgPSB7Ci0gICAgICAgICJhZGIiLCAic2hlbGwiLCAiZGFsdmlrdm0iLCBDTEFTU19QQVRILCAiTG9hZENsYXNzIiB9OwotCi0gICAgLyoqCi0gICAgICogTWVhc3VyZXMgbWVtb3J5IHVzYWdlIGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi0gICAgICovCi0gICAgc3RhdGljIE1lbW9yeVVzYWdlIGZvckNsYXNzKFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICAgICAgTWVhc3VyZVdpdGhUaW1lb3V0IG1lYXN1cmVyID0gbmV3IE1lYXN1cmVXaXRoVGltZW91dChjbGFzc05hbWUpOwotCi0gICAgICAgIG5ldyBUaHJlYWQobWVhc3VyZXIpLnN0YXJ0KCk7Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChtZWFzdXJlcikgewotICAgICAgICAgICAgaWYgKG1lYXN1cmVyLm1lbW9yeVVzYWdlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBXYWl0IHVwIHRvIDEwcy4KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBtZWFzdXJlci53YWl0KDMwMDAwKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSW50ZXJydXB0ZWQgd2FpdGluZyBmb3IgbWVhc3VyZW1lbnQuIik7Ci0gICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfQVZBSUxBQkxFOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIElmIGl0J3Mgc3RpbGwgbnVsbC4KLSAgICAgICAgICAgICAgICBpZiAobWVhc3VyZXIubWVtb3J5VXNhZ2UgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlRpbWVkIG91dCB3aGlsZSBtZWFzdXJpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY2xhc3NOYW1lICsgIi4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9BVkFJTEFCTEU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCBtZW1vcnkgdXNhZ2UgZm9yICIgKyBjbGFzc05hbWUgKyAiLiIpOwotICAgICAgICAgICAgcmV0dXJuIG1lYXN1cmVyLm1lbW9yeVVzYWdlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNsYXNzIE1lYXN1cmVXaXRoVGltZW91dCBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lOwotICAgICAgICBNZW1vcnlVc2FnZSBtZW1vcnlVc2FnZSA9IG51bGw7Ci0KLSAgICAgICAgTWVhc3VyZVdpdGhUaW1lb3V0KFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgTWVtb3J5VXNhZ2UgbWVhc3VyZWQgPSBtZWFzdXJlKCk7Ci0KLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgICAgIG1lbW9yeVVzYWdlID0gbWVhc3VyZWQ7Ci0gICAgICAgICAgICAgICAgbm90aWZ5QWxsKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIE1lbW9yeVVzYWdlIG1lYXN1cmUoKSB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBjb21tYW5kcyA9IEdFVF9ESVJUWV9QQUdFUzsKLSAgICAgICAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBjb21tYW5kTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigKLSAgICAgICAgICAgICAgICAgICAgICAgIEdFVF9ESVJUWV9QQUdFUy5sZW5ndGggKyAxKTsKLSAgICAgICAgICAgICAgICBjb21tYW5kTGlzdC5hZGRBbGwoQXJyYXlzLmFzTGlzdChjb21tYW5kcykpOwotICAgICAgICAgICAgICAgIGNvbW1hbmRMaXN0LmFkZChjbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIGNvbW1hbmRzID0gY29tbWFuZExpc3QudG9BcnJheShuZXcgU3RyaW5nW2NvbW1hbmRMaXN0LnNpemUoKV0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGZpbmFsIFByb2Nlc3MgcHJvY2VzcyA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoY29tbWFuZHMpOwotCi0gICAgICAgICAgICAgICAgZmluYWwgSW5wdXRTdHJlYW0gZXJyID0gcHJvY2Vzcy5nZXRFcnJvclN0cmVhbSgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2VuZCBlcnJvciBvdXRwdXQgdG8gc3RkZXJyLgotICAgICAgICAgICAgICAgIFRocmVhZCBlcnJUaHJlYWQgPSBuZXcgVGhyZWFkKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29weShlcnIsIFN5c3RlbS5lcnIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICBlcnJUaHJlYWQuc2V0RGFlbW9uKHRydWUpOwotICAgICAgICAgICAgICAgIGVyclRocmVhZC5zdGFydCgpOwotCi0gICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW5wdXRTdHJlYW1SZWFkZXIocHJvY2Vzcy5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbi5yZWFkTGluZSgpOwotICAgICAgICAgICAgICAgIGlmIChsaW5lID09IG51bGwgfHwgIWxpbmUuc3RhcnRzV2l0aCgiREVDQUZCQUQsIikpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgYmFkIHJlc3BvbnNlIGZvciAiICsgY2xhc3NOYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiOiAiICsgbGluZSArICI7IGNvbW1hbmQgd2FzICIgKyBBcnJheXMudG9TdHJpbmcoY29tbWFuZHMpKTsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JDb3VudCArPSAxOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0FWQUlMQUJMRTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbi5jbG9zZSgpOwotICAgICAgICAgICAgICAgIGVyci5jbG9zZSgpOwotICAgICAgICAgICAgICAgIHByb2Nlc3MuZGVzdHJveSgpOyAgICAgICAgICAgICAgICAKLQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWVtb3J5VXNhZ2UobGluZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBnZXR0aW5nIHN0YXRzIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIGNsYXNzTmFtZSArICIuIik7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9BVkFJTEFCTEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcGllcyBmcm9tIG9uZSBzdHJlYW0gdG8gYW5vdGhlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHkoSW5wdXRTdHJlYW0gaW4sIE91dHB1dFN0cmVhbSBvdXQpIHsKLSAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOwotICAgICAgICBpbnQgcmVhZDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHdoaWxlICgocmVhZCA9IGluLnJlYWQoYnVmZmVyKSkgPiAtMSkgewotICAgICAgICAgICAgICAgIG91dC53cml0ZShidWZmZXIsIDAsIHJlYWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIE1lYXN1cmVzIG1lbW9yeSB1c2FnZSBpbmZvcm1hdGlvbiBhbmQgc3RvcmVzIGl0IGluIHRoZSBtb2RlbC4gKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24sCi0gICAgICAgICAgICBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUm9vdCByb290ID0gUm9vdC5mcm9tRmlsZShhcmdzWzBdKTsKLSAgICAgICAgcm9vdC5iYXNlbGluZSA9IGJhc2VsaW5lKCk7Ci0gICAgICAgIGZvciAoTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MgOiByb290LmxvYWRlZENsYXNzZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChsb2FkZWRDbGFzcy5zeXN0ZW1DbGFzcykgewotICAgICAgICAgICAgICAgIGxvYWRlZENsYXNzLm1lYXN1cmVNZW1vcnlVc2FnZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJvb3QudG9GaWxlKGFyZ3NbMF0pOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvT3BlcmF0aW9uLmphdmEgYi90b29scy9wcmVsb2FkL09wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjE5MzhlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotCi0vKioKLSAqIEFuIG9wZXJhdGlvbiB3aXRoIGEgZHVyYXRpb24uIENvdWxkIHJlcHJlc2VudCBhIGNsYXNzIGxvYWQgb3IgaW5pdGlhbGl6YXRpb24uCi0gKi8KLWNsYXNzIE9wZXJhdGlvbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAwOwotICAgIAotICAgIC8qKgotICAgICAqIFR5cGUgb2Ygb3BlcmF0aW9uLgotICAgICAqLwotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIExPQUQsIElOSVQKLSAgICB9Ci0KLSAgICAvKiogUHJvY2VzcyB0aGlzIG9wZXJhdGlvbiBvY2N1cnJlZCBpbi4gKi8KLSAgICBmaW5hbCBQcm9jIHByb2Nlc3M7Ci0KLSAgICAvKiogU3RhcnQgdGltZSBmb3IgdGhpcyBvcGVyYXRpb24uICovCi0gICAgZmluYWwgbG9uZyBzdGFydFRpbWVOYW5vczsKLQotICAgIC8qKiBJbmRleCBvZiB0aGlzIG9wZXJhdGlvbiByZWxhdGl2ZSB0byBpdHMgcHJvY2Vzcy4gKi8KLSAgICBmaW5hbCBpbnQgaW5kZXg7Ci0KLSAgICAvKiogVHlwZSBvZiBvcGVyYXRpb24uICovCi0gICAgZmluYWwgVHlwZSB0eXBlOwotCi0gICAgLyoqIEVuZCB0aW1lIGZvciB0aGlzIG9wZXJhdGlvbi4gKi8KLSAgICBsb25nIGVuZFRpbWVOYW5vcyA9IC0xOwotCi0gICAgLyoqIFRoZSBjbGFzcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGxvYWRlZCBvciBpbml0aWFsaXplZC4gKi8KLSAgICBmaW5hbCBMb2FkZWRDbGFzcyBsb2FkZWRDbGFzczsKLQotICAgIC8qKiBPdGhlciBvcGVyYXRpb25zIHRoYXQgb2NjdXJyZWQgZHVyaW5nIHRoaXMgb25lLiAqLwotICAgIGZpbmFsIExpc3Q8T3BlcmF0aW9uPiBzdWJvcHMgPSBuZXcgQXJyYXlMaXN0PE9wZXJhdGlvbj4oKTsKLQotICAgIC8qKiBDb25zdHJ1Y3RzIGEgbmV3IG9wZXJhdGlvbi4gKi8KLSAgICBPcGVyYXRpb24oUHJvYyBwcm9jZXNzLCBMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcywgbG9uZyBzdGFydFRpbWVOYW5vcywKLSAgICAgICAgICAgIGludCBpbmRleCwgVHlwZSB0eXBlKSB7Ci0gICAgICAgIHRoaXMucHJvY2VzcyA9IHByb2Nlc3M7Ci0gICAgICAgIHRoaXMubG9hZGVkQ2xhc3MgPSBsb2FkZWRDbGFzczsKLSAgICAgICAgdGhpcy5zdGFydFRpbWVOYW5vcyA9IHN0YXJ0VGltZU5hbm9zOwotICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBob3cgbG9uZyB0aGlzIGNsYXNzIGluaXRpYWxpemF0aW9uIGFuZCBhbGwgdGhlIG5lc3RlZCBjbGFzcwotICAgICAqIGluaXRpYWxpemF0aW9ucyB0b29rLgotICAgICAqLwotICAgIHByaXZhdGUgbG9uZyBpbmNsdXNpdmVUaW1lTmFub3MoKSB7Ci0gICAgICAgIGlmIChlbmRUaW1lTmFub3MgPT0gLTEpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkVuZCB0aW1lIGhhc24ndCBiZWVuIHNldCB5ZXQ6ICIKLSAgICAgICAgICAgICAgICAgICAgKyBsb2FkZWRDbGFzcy5uYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlbmRUaW1lTmFub3MgLSBzdGFydFRpbWVOYW5vczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGhvdyBsb25nIHRoaXMgY2xhc3MgaW5pdGlhbGl6YXRpb24gdG9vay4KLSAgICAgKi8KLSAgICBpbnQgZXhjbHVzaXZlVGltZU1pY3JvcygpIHsKLSAgICAgICAgbG9uZyBleGNsdXNpdmUgPSBpbmNsdXNpdmVUaW1lTmFub3MoKTsKLQotICAgICAgICBmb3IgKE9wZXJhdGlvbiBjaGlsZCA6IHN1Ym9wcykgewotICAgICAgICAgICAgZXhjbHVzaXZlIC09IGNoaWxkLmluY2x1c2l2ZVRpbWVOYW5vcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV4Y2x1c2l2ZSA8IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihsb2FkZWRDbGFzcy5uYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuYW5vc1RvTWljcm9zKGV4Y2x1c2l2ZSk7Ci0gICAgfQotCi0gICAgLyoqIEdldHMgdGhlIG1lZGlhbiB0aW1lIHRoYXQgdGhpcyBvcGVyYXRpb24gdG9vayBhY3Jvc3MgYWxsIHByb2Nlc3Nlcy4gKi8KLSAgICBpbnQgbWVkaWFuRXhjbHVzaXZlVGltZU1pY3JvcygpIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIExPQUQ6IHJldHVybiBsb2FkZWRDbGFzcy5tZWRpYW5Mb2FkVGltZU1pY3JvcygpOwotICAgICAgICAgICAgY2FzZSBJTklUOiByZXR1cm4gbG9hZGVkQ2xhc3MubWVkaWFuSW5pdFRpbWVNaWNyb3MoKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gbWljcm9zZWNvbmRzLgotICAgICAqCi0gICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIG92ZXJmbG93IG9jY3VycwotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGludCBuYW5vc1RvTWljcm9zKGxvbmcgbmFub3MpIHsKLSAgICAgICAgbG9uZyBtaWNyb3MgPSBuYW5vcyAvIDEwMDA7Ci0gICAgICAgIGludCBtaWNyb3NJbnQgPSAoaW50KSBtaWNyb3M7Ci0gICAgICAgIGlmIChtaWNyb3NJbnQgIT0gbWljcm9zKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW50ZWdlciBvdmVyZmxvdzogIiArIG5hbm9zKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbWljcm9zSW50OwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBQcmltYXJpbHkgZm9yIGRlYnVnZ2VyIHN1cHBvcnQKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgc2IuYXBwZW5kKHR5cGUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHNiLmFwcGVuZCgnICcpOwotICAgICAgICBzYi5hcHBlbmQobG9hZGVkQ2xhc3MudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChzdWJvcHMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgc2IuYXBwZW5kKCIgKCIpOwotICAgICAgICAgICAgc2IuYXBwZW5kKHN1Ym9wcy5zaXplKCkpOwotICAgICAgICAgICAgc2IuYXBwZW5kKCIgc3ViIG9wcykiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvUG9saWN5LmphdmEgYi90b29scy9wcmVsb2FkL1BvbGljeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjQ2ODIwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvUG9saWN5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBQb2xpY3kgdGhhdCBnb3Zlcm5zIHdoaWNoIGNsYXNzZXMgYXJlIHByZWxvYWRlZC4KLSAqLwotcHVibGljIGNsYXNzIFBvbGljeSB7Ci0KLSAgICAvKioKLSAgICAgKiBObyBjb25zdHJ1Y3RvciAtIHVzZSBzdGF0aWMgbWV0aG9kcyBvbmx5Ci0gICAgICovCi0gICAgcHJpdmF0ZSBQb2xpY3koKSB7fQotCi0gICAgLyoqCi0gICAgICogVGhpcyBsb2NhdGlvbiAoaW4gdGhlIGJ1aWxkIHN5c3RlbSkgb2YgdGhlIHByZWxvYWRlZC1jbGFzc2VzIGZpbGUuCi0gICAgICovCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVMT0FERURfQ0xBU1NfRklMRQotICAgICAgICAgICAgPSAiZnJhbWV3b3Jrcy9iYXNlL3ByZWxvYWRlZC1jbGFzc2VzIjsKLQotICAgIC8qKgotICAgICAqIExvbmcgcnVubmluZyBzZXJ2aWNlcy4gVGhlc2UgYXJlIHJlc3RyaWN0ZWQgaW4gdGhlaXIgY29udHJpYnV0aW9uIHRvIHRoZSAKLSAgICAgKiBwcmVsb2FkZXIgYmVjYXVzZSB0aGVpciBsYXVuY2ggdGltZSBpcyBsZXNzIGNyaXRpY2FsLgotICAgICAqLwotICAgIC8vIFRPRE86IEdlbmVyYXRlIHRoaXMgYXV0b21hdGljYWxseSBmcm9tIHBhY2thZ2UgbWFuYWdlci4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTZXQ8U3RyaW5nPiBTRVJWSUNFUyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgInN5c3RlbV9zZXJ2ZXIiLAotICAgICAgICAiY29tLmdvb2dsZS5wcm9jZXNzLmNvbnRlbnQiLAotICAgICAgICAiYW5kcm9pZC5wcm9jZXNzLm1lZGlhIiwKLSAgICAgICAgImNvbS5hbmRyb2lkLmJsdWV0b290aCIsCi0gICAgICAgICJjb20uYW5kcm9pZC5jYWxlbmRhciIsCi0gICAgICAgICJjb20uYW5kcm9pZC5pbnB1dG1ldGhvZC5sYXRpbiIsCi0gICAgICAgICJjb20uYW5kcm9pZC5waG9uZSIsCi0gICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzLkZyaWVuZFNlcnZpY2UiLCAvLyBwcmUgZnJveW8KLSAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLm1hcHM6RnJpZW5kU2VydmljZSIsIC8vIGZyb3lvCi0gICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzLkxvY2F0aW9uRnJpZW5kU2VydmljZSIsCi0gICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuZGVza2Nsb2NrIiwKLSAgICAgICAgImNvbS5nb29nbGUucHJvY2Vzcy5nYXBwcyIsCi0gICAgICAgICJhbmRyb2lkLnR0cyIKLSAgICApKTsKLQotICAgIC8qKgotICAgICAqIENsYXNzZXMgd2hpY2ggd2Ugc2hvdWxkbid0IGxvYWQgZnJvbSB0aGUgWnlnb3RlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNldDxTdHJpbmc+IEVYQ0xVREVEX0NMQVNTRVMKLSAgICAgICAgICAgID0gbmV3IEhhc2hTZXQ8U3RyaW5nPihBcnJheXMuYXNMaXN0KAotICAgICAgICAvLyBCaW5kZXJzCi0gICAgICAgICJhbmRyb2lkLmFwcC5BbGFybU1hbmFnZXIiLAotICAgICAgICAiYW5kcm9pZC5hcHAuU2VhcmNoTWFuYWdlciIsCi0gICAgICAgICJhbmRyb2lkLm9zLkZpbGVPYnNlcnZlciIsCi0gICAgICAgICJjb20uYW5kcm9pZC5zZXJ2ZXIuUGFja2FnZU1hbmFnZXJTZXJ2aWNlJEFwcERpck9ic2VydmVyIiwKLQotICAgICAgICAvLyBUaHJlYWRzCi0gICAgICAgICJhbmRyb2lkLm9zLkFzeW5jVGFzayIsCi0gICAgICAgICJhbmRyb2lkLnBpbS5Db250YWN0c0FzeW5jSGVscGVyIiwKLSAgICAgICAgImFuZHJvaWQud2Via2l0LldlYlZpZXdDbGFzc2ljJDEiLAotICAgICAgICAiamF2YS5sYW5nLlByb2Nlc3NNYW5hZ2VyIgotICAgICkpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwcm9jZXNzIG5hbWUgaXMgYSAibG9uZyBydW5uaW5nIiBwcm9jZXNzIG9yCi0gICAgICogc2VydmljZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTZXJ2aWNlKFN0cmluZyBwcm9jZXNzTmFtZSkgewotICAgICAgICByZXR1cm4gU0VSVklDRVMuY29udGFpbnMocHJvY2Vzc05hbWUpOwotICAgIH0KLQotICAgIC8qKiBSZXBvcnRzIGlmIHRoZSBnaXZlbiBjbGFzcyBzaG91bGQgYmUgcHJlbG9hZGVkLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ByZWxvYWRhYmxlKExvYWRlZENsYXNzIGNsYXp6KSB7Ci0gICAgICAgIHJldHVybiBjbGF6ei5zeXN0ZW1DbGFzcyAmJiAhRVhDTFVERURfQ0xBU1NFUy5jb250YWlucyhjbGF6ei5uYW1lKQotICAgICAgICAgICAgICAgICYmICFjbGF6ei5uYW1lLmVuZHNXaXRoKCIkTm9QcmVsb2FkSG9sZGVyIik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZC9QcmludENzdi5qYXZhIGIvdG9vbHMvcHJlbG9hZC9QcmludENzdi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODIwODMwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvUHJpbnRDc3YuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotLyoqCi0gKiBQcmludHMgcmF3IGluZm9ybWF0aW9uIGluIENTViBmb3JtYXQuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcmludENzdiB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDEpIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IFByaW50Q3N2IFtjb21waWxlZCBsb2cgZmlsZV0iKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgUm9vdCByb290ID0gUm9vdC5mcm9tRmlsZShhcmdzWzBdKTsKLQotICAgICAgICBwcmludEhlYWRlcnMoU3lzdGVtLm91dCk7Ci0KLSAgICAgICAgTWVtb3J5VXNhZ2UgYmFzZWxpbmUgPSBNZW1vcnlVc2FnZS5iYXNlbGluZSgpOwotCi0gICAgICAgIGZvciAoTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MgOiByb290LmxvYWRlZENsYXNzZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICghbG9hZGVkQ2xhc3Muc3lzdGVtQ2xhc3MpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpbnRSb3coU3lzdGVtLm91dCwgYmFzZWxpbmUsIGxvYWRlZENsYXNzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHByaW50SGVhZGVycyhQcmludFN0cmVhbSBvdXQpIHsKLSAgICAgICAgb3V0LnByaW50bG4oIk5hbWUiCi0gICAgICAgICAgICAgICAgKyAiLFByZWxvYWRlZCIKLSAgICAgICAgICAgICAgICArICIsTWVkaWFuIExvYWQgVGltZSAodXMpIgotICAgICAgICAgICAgICAgICsgIixNZWRpYW4gSW5pdCBUaW1lICh1cykiCi0gICAgICAgICAgICAgICAgKyAiLFByb2Nlc3MgTmFtZXMiCi0gICAgICAgICAgICAgICAgKyAiLExvYWQgQ291bnQiCi0gICAgICAgICAgICAgICAgKyAiLEluaXQgQ291bnQiCi0gICAgICAgICAgICAgICAgKyAiLE1hbmFnZWQgSGVhcCAoQikiCi0gICAgICAgICAgICAgICAgKyAiLE5hdGl2ZSBIZWFwIChCKSIKLSAgICAgICAgICAgICAgICArICIsTWFuYWdlZCBQYWdlcyAoa0IpIgotICAgICAgICAgICAgICAgICsgIixOYXRpdmUgUGFnZXMgKGtCKSIKLSAgICAgICAgICAgICAgICArICIsT3RoZXIgUGFnZXMgKGtCKSIpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHByaW50Um93KFByaW50U3RyZWFtIG91dCwgTWVtb3J5VXNhZ2UgYmFzZWxpbmUsCi0gICAgICAgICAgICBMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcykgewotICAgICAgICBvdXQucHJpbnQobG9hZGVkQ2xhc3MubmFtZSk7Ci0gICAgICAgIG91dC5wcmludCgnLCcpOwotICAgICAgICBvdXQucHJpbnQobG9hZGVkQ2xhc3MucHJlbG9hZGVkKTsKLSAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgIG91dC5wcmludChsb2FkZWRDbGFzcy5tZWRpYW5Mb2FkVGltZU1pY3JvcygpKTsKLSAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgIG91dC5wcmludChsb2FkZWRDbGFzcy5tZWRpYW5Jbml0VGltZU1pY3JvcygpKTsKLSAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgIG91dC5wcmludCgnIicpOwotCi0gICAgICAgIFNldDxTdHJpbmc+IHByb2NOYW1lcyA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKLSAgICAgICAgZm9yIChPcGVyYXRpb24gb3AgOiBsb2FkZWRDbGFzcy5sb2FkcykKLSAgICAgICAgICAgIHByb2NOYW1lcy5hZGQob3AucHJvY2Vzcy5uYW1lKTsKLSAgICAgICAgZm9yIChPcGVyYXRpb24gb3AgOiBsb2FkZWRDbGFzcy5pbml0aWFsaXphdGlvbnMpCi0gICAgICAgICAgICBwcm9jTmFtZXMuYWRkKG9wLnByb2Nlc3MubmFtZSk7Ci0KLSAgICAgICAgaWYgKHByb2NOYW1lcy5zaXplKCkgPD0gMykgewotICAgICAgICAgICAgZm9yIChTdHJpbmcgbmFtZSA6IHByb2NOYW1lcykgewotICAgICAgICAgICAgICAgIG91dC5wcmludChuYW1lICsgIlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJdGVyYXRvcjxTdHJpbmc+IGkgPSBwcm9jTmFtZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIG91dC5wcmludChpLm5leHQoKSArICJcbiIpOwotICAgICAgICAgICAgb3V0LnByaW50KGkubmV4dCgpICsgIlxuIik7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIi4uLmFuZCAiICsgKHByb2NOYW1lcy5zaXplKCkgLSAyKQotICAgICAgICAgICAgICAgICAgICArICIgb3RoZXJzLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0LnByaW50KCciJyk7Ci0gICAgICAgIG91dC5wcmludCgnLCcpOwotICAgICAgICBvdXQucHJpbnQobG9hZGVkQ2xhc3MubG9hZHMuc2l6ZSgpKTsKLSAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgIG91dC5wcmludChsb2FkZWRDbGFzcy5pbml0aWFsaXphdGlvbnMuc2l6ZSgpKTsKLQotICAgICAgICBpZiAobG9hZGVkQ2xhc3MubWVtb3J5VXNhZ2UuaXNBdmFpbGFibGUoKSkgewotICAgICAgICAgICAgTWVtb3J5VXNhZ2Ugc3VidHJhY3RlZAotICAgICAgICAgICAgICAgICAgICA9IGxvYWRlZENsYXNzLm1lbW9yeVVzYWdlLnN1YnRyYWN0KGJhc2VsaW5lKTsKLQotICAgICAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoc3VidHJhY3RlZC5qYXZhSGVhcFNpemUoKSk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoJywnKTsKLSAgICAgICAgICAgIG91dC5wcmludChzdWJ0cmFjdGVkLm5hdGl2ZUhlYXBTaXplKTsKLSAgICAgICAgICAgIG91dC5wcmludCgnLCcpOwotICAgICAgICAgICAgb3V0LnByaW50KHN1YnRyYWN0ZWQuamF2YVBhZ2VzSW5LKCkpOwotICAgICAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoc3VidHJhY3RlZC5uYXRpdmVQYWdlc0luSygpKTsKLSAgICAgICAgICAgIG91dC5wcmludCgnLCcpOwotICAgICAgICAgICAgb3V0LnByaW50KHN1YnRyYWN0ZWQub3RoZXJQYWdlc0luSygpKTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb3V0LnByaW50KCIsbi9hLG4vYSxuL2Esbi9hLG4vYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0LnByaW50bG4oKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL1ByaW50SHRtbERpZmYuamF2YSBiL3Rvb2xzL3ByZWxvYWQvUHJpbnRIdG1sRGlmZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTAxYzg1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvUHJpbnRIdG1sRGlmZi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi0vKioKLSAqIFByaW50cyBIVE1MIGNvbnRhaW5pbmcgcmVtb3ZlZCBhbmQgYWRkZWQgZmlsZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcmludEh0bWxEaWZmIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPTERfUFJFTE9BREVEX0NMQVNTRVMKLSAgICAgICAgICAgID0gIm9sZC1wcmVsb2FkZWQtY2xhc3NlcyI7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24sCi0gICAgICAgICAgICBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUm9vdCByb290ID0gUm9vdC5mcm9tRmlsZShhcmdzWzBdKTsKLQotICAgICAgICBCdWZmZXJlZFJlYWRlciBvbGRDbGFzc2VzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKAotICAgICAgICAgICAgbmV3IEZpbGVSZWFkZXIoT0xEX1BSRUxPQURFRF9DTEFTU0VTKSk7Ci0KLSAgICAgICAgLy8gQ2xhc3NlcyBsb2FkZWQgaW1wbGljaXRseSBieSB0aGUgenlnb3RlLgotICAgICAgICBTZXQ8TG9hZGVkQ2xhc3M+IHp5Z290ZSA9IG5ldyBIYXNoU2V0PExvYWRlZENsYXNzPigpOwotICAgICAgICBmb3IgKFByb2MgcHJvYyA6IHJvb3QucHJvY2Vzc2VzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAocHJvYy5uYW1lLmVxdWFscygienlnb3RlIikpIHsKLSAgICAgICAgICAgICAgICBmb3IgKE9wZXJhdGlvbiBvcCA6IHByb2Mub3BlcmF0aW9ucykgewotICAgICAgICAgICAgICAgICAgICB6eWdvdGUuYWRkKG9wLmxvYWRlZENsYXNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTZXQ8TG9hZGVkQ2xhc3M+IHJlbW92ZWQgPSBuZXcgVHJlZVNldDxMb2FkZWRDbGFzcz4oKTsKLSAgICAgICAgU2V0PExvYWRlZENsYXNzPiBhZGRlZCA9IG5ldyBUcmVlU2V0PExvYWRlZENsYXNzPigpOwotCi0gICAgICAgIGZvciAoTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MgOiByb290LmxvYWRlZENsYXNzZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChsb2FkZWRDbGFzcy5wcmVsb2FkZWQgJiYgIXp5Z290ZS5jb250YWlucyhsb2FkZWRDbGFzcykpIHsKLSAgICAgICAgICAgICAgICBhZGRlZC5hZGQobG9hZGVkQ2xhc3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGxpbmU7Ci0gICAgICAgIHdoaWxlICgobGluZSA9IG9sZENsYXNzZXMucmVhZExpbmUoKSkgIT0gbnVsbCkgewotICAgICAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpOwotICAgICAgICAgICAgTG9hZGVkQ2xhc3MgY2xhenogPSByb290LmxvYWRlZENsYXNzZXMuZ2V0KGxpbmUpOwotICAgICAgICAgICAgaWYgKGNsYXp6ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBhZGRlZC5yZW1vdmUoY2xhenopOwotICAgICAgICAgICAgICAgIGlmICghY2xhenoucHJlbG9hZGVkKSByZW1vdmVkLmFkZChjbGF6eik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBQcmludFN0cmVhbSBvdXQgPSBTeXN0ZW0ub3V0OwotCi0gICAgICAgIG91dC5wcmludGxuKCI8aHRtbD48Ym9keT4iKTsKLSAgICAgICAgb3V0LnByaW50bG4oIjxzdHlsZT4iKTsKLSAgICAgICAgb3V0LnByaW50bG4oImEsIHRoLCB0ZCwgaDIgeyBmb250LWZhbWlseTogYXJpYWwgfSIpOwotICAgICAgICBvdXQucHJpbnRsbigidGgsIHRkIHsgZm9udC1zaXplOiBzbWFsbCB9Iik7Ci0gICAgICAgIG91dC5wcmludGxuKCI8L3N0eWxlPiIpOwotICAgICAgICBvdXQucHJpbnRsbigiPHNjcmlwdCBzcmM9XCJzb3J0dGFibGUuanNcIj48L3NjcmlwdD4iKTsKLSAgICAgICAgb3V0LnByaW50bG4oIjxwPjxhIGhyZWY9XCIjcmVtb3ZlZFwiPlJlbW92ZWQ8L2E+Iik7Ci0gICAgICAgIG91dC5wcmludGxuKCI8YSBuYW1lPVwiYWRkZWRcIi8+PGgyPkFkZGVkPC9oMj4iKTsKLSAgICAgICAgcHJpbnRUYWJsZShvdXQsIHJvb3QuYmFzZWxpbmUsIGFkZGVkKTsKLSAgICAgICAgb3V0LnByaW50bG4oIjxhIG5hbWU9XCJyZW1vdmVkXCIvPjxoMj5SZW1vdmVkPC9oMj4iKTsKLSAgICAgICAgcHJpbnRUYWJsZShvdXQsIHJvb3QuYmFzZWxpbmUsIHJlbW92ZWQpOwotICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBwcmludFRhYmxlKFByaW50U3RyZWFtIG91dCwgTWVtb3J5VXNhZ2UgYmFzZWxpbmUsCi0gICAgICAgICAgICBJdGVyYWJsZTxMb2FkZWRDbGFzcz4gY2xhc3NlcykgewotICAgICAgICBvdXQucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiIKLSAgICAgICAgICAgICAgICArICIgY2xhc3M9XCJzb3J0YWJsZVwiPiIpOwotCi0gICAgICAgIG91dC5wcmludGxuKCI8dGhlYWQ+PHRyPiIpOwotICAgICAgICBvdXQucHJpbnRsbigiPHRoPk5hbWU8L3RoPiIpOwotICAgICAgICBvdXQucHJpbnRsbigiPHRoPkxvYWQgVGltZSAodXMpPC90aD4iKTsKLSAgICAgICAgb3V0LnByaW50bG4oIjx0aD5Mb2FkZWQgQnk8L3RoPiIpOwotICAgICAgICBvdXQucHJpbnRsbigiPHRoPkhlYXAgKEIpPC90aD4iKTsKLSAgICAgICAgb3V0LnByaW50bG4oIjx0aD5QYWdlczwvdGg+Iik7Ci0gICAgICAgIG91dC5wcmludGxuKCI8L3RyPjwvdGhlYWQ+Iik7Ci0KLSAgICAgICAgZm9yIChMb2FkZWRDbGFzcyBjbGF6eiA6IGNsYXNzZXMpIHsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8dHI+Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPHRkPiIgKyBjbGF6ei5uYW1lICsgIjwvdGQ+Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPHRkPiIgKyBjbGF6ei5tZWRpYW5UaW1lTWljcm9zKCkgKyAiPC90ZD4iKTsKLQotICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0ZD4iKTsKLSAgICAgICAgICAgIFNldDxTdHJpbmc+IHByb2NOYW1lcyA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKLSAgICAgICAgICAgIGZvciAoT3BlcmF0aW9uIG9wIDogY2xhenoubG9hZHMpIHByb2NOYW1lcy5hZGQob3AucHJvY2Vzcy5uYW1lKTsKLSAgICAgICAgICAgIGZvciAoT3BlcmF0aW9uIG9wIDogY2xhenouaW5pdGlhbGl6YXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgcHJvY05hbWVzLmFkZChvcC5wcm9jZXNzLm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHByb2NOYW1lcy5zaXplKCkgPD0gMykgewotICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIG5hbWUgOiBwcm9jTmFtZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KG5hbWUgKyAiPGJyLz4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaSA9IHByb2NOYW1lcy5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgIG91dC5wcmludChpLm5leHQoKSArICI8YnIvPiIpOwotICAgICAgICAgICAgICAgIG91dC5wcmludChpLm5leHQoKSArICI8YnIvPiIpOwotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLi4uYW5kICIgKyAocHJvY05hbWVzLnNpemUoKSAtIDIpCi0gICAgICAgICAgICAgICAgICAgICAgICArICIgb3RoZXJzLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdGQ+Iik7Ci0KLSAgICAgICAgICAgIGlmIChjbGF6ei5tZW1vcnlVc2FnZS5pc0F2YWlsYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgTWVtb3J5VXNhZ2Ugc3VidHJhY3RlZAotICAgICAgICAgICAgICAgICAgICAgICAgPSBjbGF6ei5tZW1vcnlVc2FnZS5zdWJ0cmFjdChiYXNlbGluZSk7Ci0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRkPiIgKyAoc3VidHJhY3RlZC5qYXZhSGVhcFNpemUoKQotICAgICAgICAgICAgICAgICAgICAgICAgKyBzdWJ0cmFjdGVkLm5hdGl2ZUhlYXBTaXplKSArICI8L3RkPiIpOwotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGQ+IiArIHN1YnRyYWN0ZWQudG90YWxQYWdlcygpICsgIjwvdGQ+Iik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGQ+bi9hPC90ZD4iKTsgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdHI+Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQucHJpbnRsbigiPC90YWJsZT4iKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL1ByaW50UHNUcmVlLmphdmEgYi90b29scy9wcmVsb2FkL1ByaW50UHNUcmVlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNzAxZmEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcHJlbG9hZC9QcmludFBzVHJlZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotCi0vKioKLSAqIFByaW50cyByYXcgaW5mb3JtYXRpb24gaW4gQ1NWIGZvcm1hdC4KLSAqLwotcHVibGljIGNsYXNzIFByaW50UHNUcmVlIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gMSkgewotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogUHJpbnRDc3YgW2NvbXBpbGVkIGxvZyBmaWxlXSIpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShhcmdzWzBdKTsKLSAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gb2luID0gbmV3IE9iamVjdElucHV0U3RyZWFtKAotICAgICAgICAgICAgICAgIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGZpbikpOwotCi0gICAgICAgIFJvb3Qgcm9vdCA9IChSb290KSBvaW4ucmVhZE9iamVjdCgpOwotCi0gICAgICAgIGZvciAoUHJvYyBwcm9jIDogcm9vdC5wcm9jZXNzZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChwcm9jLnBhcmVudCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcHJvYy5wcmludCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL1Byb2MuamF2YSBiL3Rvb2xzL3ByZWxvYWQvUHJvYy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTA1MDIxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvUHJvYy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotCi0vKioKLSAqIEEgRGFsdmlrIHByb2Nlc3MuCi0gKi8KLWNsYXNzIFByb2MgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMDsKLQotICAgIC8qKiBQYXJlbnQgcHJvY2Vzcy4gKi8KLSAgICBmaW5hbCBQcm9jIHBhcmVudDsKLQotICAgIC8qKiBQcm9jZXNzIElELiAqLwotICAgIGZpbmFsIGludCBpZDsKLQotICAgIC8qKgotICAgICAqIE5hbWUgb2YgdGhpcyBwcm9jZXNzLiBXZSBtYXkgbm90IGhhdmUgdGhlIGNvcnJlY3QgbmFtZSBhdCBmaXJzdCwgaS5lLgotICAgICAqIHNvbWUgY2xhc3NlcyBjb3VsZCBoYXZlIGJlZW4gbG9hZGVkIGJlZm9yZSB0aGUgcHJvY2VzcyBuYW1lIHdhcyBzZXQuCi0gICAgICovCi0gICAgU3RyaW5nIG5hbWU7Ci0KLSAgICAvKiogQ2hpbGQgcHJvY2Vzc2VzLiAqLwotICAgIGZpbmFsIExpc3Q8UHJvYz4gY2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0PFByb2M+KCk7Ci0KLSAgICAvKiogTWFwcyB0aHJlYWQgSUQgdG8gb3BlcmF0aW9uIHN0YWNrLiAqLwotICAgIHRyYW5zaWVudCBmaW5hbCBNYXA8SW50ZWdlciwgTGlua2VkTGlzdDxPcGVyYXRpb24+PiBzdGFja3MKLSAgICAgICAgICAgID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgTGlua2VkTGlzdDxPcGVyYXRpb24+PigpOwotCi0gICAgLyoqIE51bWJlciBvZiBvcGVyYXRpb25zLiAqLwotICAgIGludCBvcGVyYXRpb25Db3VudDsKLQotICAgIC8qKiBTZXF1ZW50aWFsIGxpc3Qgb2Ygb3BlcmF0aW9ucyB0aGF0IGhhcHBlbmVkIGluIHRoaXMgcHJvY2Vzcy4gKi8KLSAgICBmaW5hbCBMaXN0PE9wZXJhdGlvbj4gb3BlcmF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8T3BlcmF0aW9uPigpOwotCi0gICAgLyoqIExpc3Qgb2YgcGFzdCBwcm9jZXNzIG5hbWVzLiAqLwotICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBuYW1lSGlzdG9yeSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCi0gICAgLyoqIENvbnN0cnVjdHMgYSBuZXcgcHJvY2Vzcy4gKi8KLSAgICBQcm9jKFByb2MgcGFyZW50LCBpbnQgaWQpIHsKLSAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICB9Ci0KLSAgICAvKiogU2V0cyBuYW1lIG9mIHRoaXMgcHJvY2Vzcy4gKi8KLSAgICB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgaWYgKCFuYW1lLmVxdWFscyh0aGlzLm5hbWUpKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5uYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBuYW1lSGlzdG9yeS5hZGQodGhpcy5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBwcm9jZXNzIGNvbWVzIGZyb20gdGhlIHp5Z290ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBmcm9tWnlnb3RlKCkgewotICAgICAgICByZXR1cm4gcGFyZW50ICE9IG51bGwgJiYgcGFyZW50Lm5hbWUuZXF1YWxzKCJ6eWdvdGUiKQotICAgICAgICAgICAgICAgICYmICFuYW1lLmVxdWFscygiY29tLmFuZHJvaWQuZGV2ZWxvcG1lbnQiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdGFydHMgYW4gb3BlcmF0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIHRocmVhZElkIHRocmVhZCB0aGUgb3BlcmF0aW9uIHN0YXJ0ZWQgaW4KLSAgICAgKiBAcGFyYW0gbG9hZGVkQ2xhc3MgY2xhc3Mgb3BlcmF0aW9uIGhhcHBlbmVkIHRvCi0gICAgICogQHBhcmFtIHRpbWUgdGhlIG9wZXJhdGlvbiBzdGFydGVkCi0gICAgICovCi0gICAgdm9pZCBzdGFydE9wZXJhdGlvbihpbnQgdGhyZWFkSWQsIExvYWRlZENsYXNzIGxvYWRlZENsYXNzLCBsb25nIHRpbWUsCi0gICAgICAgICAgICBPcGVyYXRpb24uVHlwZSB0eXBlKSB7Ci0gICAgICAgIE9wZXJhdGlvbiBvID0gbmV3IE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICB0aGlzLCBsb2FkZWRDbGFzcywgdGltZSwgb3BlcmF0aW9uQ291bnQrKywgdHlwZSk7Ci0gICAgICAgIG9wZXJhdGlvbnMuYWRkKG8pOwotCi0gICAgICAgIExpbmtlZExpc3Q8T3BlcmF0aW9uPiBzdGFjayA9IHN0YWNrcy5nZXQodGhyZWFkSWQpOwotICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCkgewotICAgICAgICAgICAgc3RhY2sgPSBuZXcgTGlua2VkTGlzdDxPcGVyYXRpb24+KCk7Ci0gICAgICAgICAgICBzdGFja3MucHV0KHRocmVhZElkLCBzdGFjayk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgc3RhY2suZ2V0TGFzdCgpLnN1Ym9wcy5hZGQobyk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGFjay5hZGQobyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRW5kcyBhbiBvcGVyYXRpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdGhyZWFkSWQgdGhyZWFkIHRoZSBvcGVyYXRpb24gZW5kZWQgaW4KLSAgICAgKiBAcGFyYW0gbG9hZGVkQ2xhc3MgY2xhc3Mgb3BlcmF0aW9uIGhhcHBlbmVkIHRvCi0gICAgICogQHBhcmFtIHRpbWUgdGhlIG9wZXJhdGlvbiBlbmRlZAotICAgICAqLwotICAgIE9wZXJhdGlvbiBlbmRPcGVyYXRpb24oaW50IHRocmVhZElkLCBTdHJpbmcgY2xhc3NOYW1lLAotICAgICAgICAgICAgTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MsIGxvbmcgdGltZSkgewotICAgICAgICBMaW5rZWRMaXN0PE9wZXJhdGlvbj4gc3RhY2sgPSBzdGFja3MuZ2V0KHRocmVhZElkKTsKLQotICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCB8fCBzdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRpZE5vdFN0YXJ0KGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIE9wZXJhdGlvbiBvID0gc3RhY2suZ2V0TGFzdCgpOwotICAgICAgICBpZiAobG9hZGVkQ2xhc3MgIT0gby5sb2FkZWRDbGFzcykgewotICAgICAgICAgICAgZGlkTm90U3RhcnQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotCi0gICAgICAgIG8uZW5kVGltZU5hbm9zID0gdGltZTsKLSAgICAgICAgcmV0dXJuIG87Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJpbnRzIGFuIGVycm9yIGluZGljYXRpbmcgdGhhdCB3ZSBzYXcgdGhlIGVuZCBvZiBhbiBvcGVyYXRpb24gYnV0IG5vdAotICAgICAqIHRoZSBzdGFydC4gQSBidWcgaW4gdGhlIGxvZ2dpbmcgZnJhbWV3b3JrIHdoaWNoIHJlc3VsdHMgaW4gZHJvcHBlZCBsb2dzCi0gICAgICogY2F1c2VzIHRoaXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkaWROb3RTdGFydChTdHJpbmcgbmFtZSkgewotICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldhcm5pbmc6IEFuIG9wZXJhdGlvbiBlbmRlZCBvbiAiICsgbmFtZQotICAgICAgICAgICAgKyAiIGJ1dCBpdCBuZXZlciBzdGFydGVkISIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByaW50cyB0aGlzIHByb2Nlc3MgdHJlZSB0byBzdGRvdXQuCi0gICAgICovCi0gICAgdm9pZCBwcmludCgpIHsKLSAgICAgICAgcHJpbnQoIiIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByaW50cyBhIGNoaWxkIHByb2MgdG8gc3RhbmRhcmQgb3V0LgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBwcmludChTdHJpbmcgcHJlZml4KSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwcmVmaXggKyAiaWQ9IiArIGlkICsgIiwgbmFtZT0iICsgbmFtZSk7Ci0gICAgICAgIGZvciAoUHJvYyBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAgICAgICBjaGlsZC5wcmludChwcmVmaXggKyAiICAgICIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubmFtZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL1JlY29yZC5qYXZhIGIvdG9vbHMvcHJlbG9hZC9SZWNvcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBhMmFmNC4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL1JlY29yZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIE9uZSBsaW5lIGZyb20gdGhlIGxvYWRlZC1jbGFzc2VzIGZpbGUuCi0gKi8KLWNsYXNzIFJlY29yZCB7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZGVsaW1pdGVyIGNoYXJhY3RlciB3ZSB1c2UsIHtAY29kZSA6fSwgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlcgotICAgICAqIG5hbWVzLiBJbiB0aGF0IGNhc2UsIG1hbnVhbGx5IHJlcGxhY2UgdGhlIGRlbGltaXRlciB3aXRoIHNvbWV0aGluZyBlbHNlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFJFUExBQ0VfQ0xBU1NFUyA9IHsKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzOkZyaWVuZFNlcnZpY2UiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLm1hcHNcXHUwMDNBRnJpZW5kU2VydmljZSIsCi0gICAgICAgICAgICAiY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMubWFwczpkcml2ZWFib3V0IiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzXFx1MDAzQWRyaXZlYWJvdXQiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLm1hcHM6R29vZ2xlTG9jYXRpb25TZXJ2aWNlIiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzXFx1MDAzQUdvb2dsZUxvY2F0aW9uU2VydmljZSIsCi0gICAgICAgICAgICAiY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMubWFwczpMb2NhdGlvbkZyaWVuZFNlcnZpY2UiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLm1hcHNcXHUwMDNBTG9jYXRpb25GcmllbmRTZXJ2aWNlIiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzOk1hcHNCYWNrZ3JvdW5kU2VydmljZSIsCi0gICAgICAgICAgICAiY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMubWFwc1xcdTAwM0FNYXBzQmFja2dyb3VuZFNlcnZpY2UiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLm1hcHM6TmV0d29ya0xvY2F0aW9uU2VydmljZSIsCi0gICAgICAgICAgICAiY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMubWFwc1xcdTAwM0FOZXR3b3JrTG9jYXRpb25TZXJ2aWNlIiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5jaHJvbWU6c2FuZGJveGVkX3Byb2Nlc3MiLAotICAgICAgICAgICAgImNvbS5hbmRyb2lkLmNocm9tZVxcdTAwM0FzYW5kYm94ZWRfcHJvY2VzcyIsCi0gICAgICAgICAgICAiY29tLmFuZHJvaWQuZmFrZW9lbWZlYXR1cmVzOmJhY2tncm91bmQiLAotICAgICAgICAgICAgImNvbS5hbmRyb2lkLmZha2VvZW1mZWF0dXJlc1xcdTAwM0FiYWNrZ3JvdW5kIiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5mYWtlb2VtZmVhdHVyZXM6Y29yZSIsCi0gICAgICAgICAgICAiY29tLmFuZHJvaWQuZmFrZW9lbWZlYXR1cmVzXFx1MDAzQWNvcmUiLAotICAgICAgICAgICAgImNvbS5hbmRyb2lkLmxhdW5jaGVyOndhbGxwYXBlcl9jaG9vc2VyIiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5sYXVuY2hlclxcdTAwM0F3YWxscGFwZXJfY2hvb3NlciIsCi0gICAgICAgICAgICAiY29tLmFuZHJvaWQubmZjOmhhbmRvdmVyIiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5uZmNcXHUwMDNBaGFuZG92ZXIiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5tdXNpYzptYWluIiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQubXVzaWNcXHUwMDNBbWFpbiIsCi0gICAgICAgICAgICAiY29tLmdvb2dsZS5hbmRyb2lkLm11c2ljOnVpIiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQubXVzaWNcXHUwMDNBdWkiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5zZXR1cHdhcmxvY2s6YnJva2VyIiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuc2V0dXB3YXJsb2NrXFx1MDAzQWJyb2tlciIsCi0gICAgICAgICAgICAibW9iaS5tZ2Vlay5UdW5ueUJyb3dzZXI6RG9scGhpbk5vdGlmaWNhdGlvbiIsCi0gICAgICAgICAgICAibW9iaS5tZ2Vlay5UdW5ueUJyb3dzZXJcXHUwMDNBRG9scGhpbk5vdGlmaWNhdGlvbiIsCi0gICAgICAgICAgICAiY29tLnFvLmFuZHJvaWQuc3Aub2VtOlF1aWNrd29yZCIsCi0gICAgICAgICAgICAiY29tLnFvLmFuZHJvaWQuc3Aub2VtXFx1MDAzQVF1aWNrd29yZCIsCi0gICAgICAgICAgICAiYW5kcm9pZDp1aSIsCi0gICAgICAgICAgICAiYW5kcm9pZFxcdTAwM0F1aSIsCi0gICAgICAgICAgICAic3lzdGVtOnVpIiwKLSAgICAgICAgICAgICJzeXN0ZW1cXHUwMDNBdWkiLAotICAgIH07Ci0KLSAgICBlbnVtIFR5cGUgewotICAgICAgICAvKiogU3RhcnQgb2YgaW5pdGlhbGl6YXRpb24uICovCi0gICAgICAgIFNUQVJUX0xPQUQsCi0KLSAgICAgICAgLyoqIEVuZCBvZiBpbml0aWFsaXphdGlvbi4gKi8KLSAgICAgICAgRU5EX0xPQUQsCi0KLSAgICAgICAgLyoqIFN0YXJ0IG9mIGluaXRpYWxpemF0aW9uLiAqLwotICAgICAgICBTVEFSVF9JTklULAotCi0gICAgICAgIC8qKiBFbmQgb2YgaW5pdGlhbGl6YXRpb24uICovCi0gICAgICAgIEVORF9JTklUCi0gICAgfQotCi0gICAgLyoqIFBhcmVudCBwcm9jZXNzIElELiAqLwotICAgIGZpbmFsIGludCBwcGlkOwotCi0gICAgLyoqIFByb2Nlc3MgSUQuICovCi0gICAgZmluYWwgaW50IHBpZDsKLQotICAgIC8qKiBUaHJlYWQgSUQuICovCi0gICAgZmluYWwgaW50IHRpZDsKLQotICAgIC8qKiBQcm9jZXNzIG5hbWUuICovCi0gICAgZmluYWwgU3RyaW5nIHByb2Nlc3NOYW1lOwotCi0gICAgLyoqIENsYXNzIGxvYWRlciBwb2ludGVyLiAqLwotICAgIGZpbmFsIGludCBjbGFzc0xvYWRlcjsKLQotICAgIC8qKiBUeXBlIG9mIHJlY29yZC4gKi8KLSAgICBmaW5hbCBUeXBlIHR5cGU7Ci0KLSAgICAvKiogTmFtZSBvZiBsb2FkZWQgY2xhc3MuICovCi0gICAgZmluYWwgU3RyaW5nIGNsYXNzTmFtZTsKLQotICAgIC8qKiBSZWNvcmQgdGltZSAobnMpLiAqLwotICAgIGZpbmFsIGxvbmcgdGltZTsKLQotICAgIC8qKiBTb3VyY2UgZmlsZSBsaW5lIyAqLwotICAgIGludCBzb3VyY2VMaW5lTnVtYmVyOwotCi0gICAgLyoqCi0gICAgICogUGFyc2VzIGEgbGluZSBmcm9tIHRoZSBsb2FkZWQtY2xhc3NlcyBmaWxlLgotICAgICAqLwotICAgIFJlY29yZChTdHJpbmcgbGluZSwgaW50IGxpbmVOdW0pIHsKLSAgICAgICAgY2hhciB0eXBlQ2hhciA9IGxpbmUuY2hhckF0KDApOwotICAgICAgICBzd2l0Y2ggKHR5cGVDaGFyKSB7Ci0gICAgICAgICAgICBjYXNlICc+JzogdHlwZSA9IFR5cGUuU1RBUlRfTE9BRDsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICc8JzogdHlwZSA9IFR5cGUuRU5EX0xPQUQ7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnKyc6IHR5cGUgPSBUeXBlLlNUQVJUX0lOSVQ7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnLSc6IHR5cGUgPSBUeXBlLkVORF9JTklUOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiQmFkIGxpbmU6ICIgKyBsaW5lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNvdXJjZUxpbmVOdW1iZXIgPSBsaW5lTnVtOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUkVQTEFDRV9DTEFTU0VTLmxlbmd0aDsgaSs9IDIpIHsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoUkVQTEFDRV9DTEFTU0VTW2ldLCBSRVBMQUNFX0NMQVNTRVNbaSsxXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMSk7Ci0gICAgICAgIFN0cmluZ1tdIHBhcnRzID0gbGluZS5zcGxpdCgiOiIpOwotCi0gICAgICAgIHBwaWQgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnRzWzBdKTsKLSAgICAgICAgcGlkID0gSW50ZWdlci5wYXJzZUludChwYXJ0c1sxXSk7Ci0gICAgICAgIHRpZCA9IEludGVnZXIucGFyc2VJbnQocGFydHNbMl0pOwotCi0gICAgICAgIHByb2Nlc3NOYW1lID0gZGVjb2RlKHBhcnRzWzNdKS5pbnRlcm4oKTsKLQotICAgICAgICBjbGFzc0xvYWRlciA9IEludGVnZXIucGFyc2VJbnQocGFydHNbNF0pOwotICAgICAgICBjbGFzc05hbWUgPSB2bVR5cGVUb0xhbmd1YWdlKGRlY29kZShwYXJ0c1s1XSkpLmludGVybigpOwotCi0gICAgICAgIHRpbWUgPSBMb25nLnBhcnNlTG9uZyhwYXJ0c1s2XSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGVjb2RlIGFueSBlc2NhcGluZyB0aGF0IG1heSBoYXZlIGJlZW4gd3JpdHRlbiB0byB0aGUgbG9nIGxpbmUuCi0gICAgICoKLSAgICAgKiBTdXBwb3J0cyB1bmljb2RlLXN0eWxlIGVzY2FwaW5nOiAgXFx1WFhYWCA9IGNoYXJhY3RlciBpbiBoZXgKLSAgICAgKgotICAgICAqIEBwYXJhbSByYXdGaWVsZCB0aGUgZmllbGQgYXMgaXQgd2FzIHdyaXR0ZW4gaW50byB0aGUgbG9nCi0gICAgICogQHJlc3VsdCB0aGUgc2FtZSBmaWVsZCB3aXRoIGFueSBlc2NhcGVkIGNoYXJhY3RlcnMgcmVwbGFjZWQKLSAgICAgKi8KLSAgICBTdHJpbmcgZGVjb2RlKFN0cmluZyByYXdGaWVsZCkgewotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcmF3RmllbGQ7Ci0gICAgICAgIGludCBvZmZzZXQgPSByZXN1bHQuaW5kZXhPZigiXFx1Iik7Ci0gICAgICAgIHdoaWxlIChvZmZzZXQgPj0gMCkgewotICAgICAgICAgICAgU3RyaW5nIGJlZm9yZSA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIFN0cmluZyBlc2NhcGVkID0gcmVzdWx0LnN1YnN0cmluZyhvZmZzZXQrMiwgb2Zmc2V0KzYpOwotICAgICAgICAgICAgU3RyaW5nIGFmdGVyID0gcmVzdWx0LnN1YnN0cmluZyhvZmZzZXQrNik7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZy5mb3JtYXQoIiVzJWMlcyIsIGJlZm9yZSwgSW50ZWdlci5wYXJzZUludChlc2NhcGVkLCAxNiksIGFmdGVyKTsKLQotICAgICAgICAgICAgLy8gZmluZCBhbm90aGVyIGJ1dCBkb24ndCByZWN1cnNlCi0gICAgICAgICAgICBvZmZzZXQgPSByZXN1bHQuaW5kZXhPZigiXFx1Iiwgb2Zmc2V0ICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZXJ0cyBhIFZNLXN0eWxlIG5hbWUgdG8gYSBsYW5ndWFnZS1zdHlsZSBuYW1lLgotICAgICAqLwotICAgIFN0cmluZyB2bVR5cGVUb0xhbmd1YWdlKFN0cmluZyB0eXBlTmFtZSkgewotICAgICAgICAvLyBpZiB0aGUgdHlwZW5hbWUgaXMgKG51bGwpLCBqdXN0IHJldHVybiBpdCBhcy1pcy4gIFRoaXMgaXMgcHJvYmFibHkgaW4gZGV4b3B0IGFuZAotICAgICAgICAvLyB3aWxsIGJlIGRpc2NhcmRlZCBhbnl3YXkuICBOT1RFOiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBjYXNlIGluIGRhbHZpay92bS9vby9DbGFzcy5jCi0gICAgICAgIC8vIHdoZXJlIGR2bUxpbmtDbGFzcygpIHJldHVybnMgZmFsc2UgYW5kIHdlIGNsZWFuIHVwIGFuZCBleGl0LgotICAgICAgICBpZiAoIihudWxsKSIuZXF1YWxzKHR5cGVOYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIHR5cGVOYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0eXBlTmFtZS5zdGFydHNXaXRoKCJMIikgfHwgIXR5cGVOYW1lLmVuZHNXaXRoKCI7IikgKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkJhZCBuYW1lOiAiICsgdHlwZU5hbWUgKyAiIGluIGxpbmUgIiArIHNvdXJjZUxpbmVOdW1iZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZS5zdWJzdHJpbmcoMSwgdHlwZU5hbWUubGVuZ3RoKCkgLSAxKTsKLSAgICAgICAgcmV0dXJuIHR5cGVOYW1lLnJlcGxhY2UoIi8iLCAiLiIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvUm9vdC5qYXZhIGIvdG9vbHMvcHJlbG9hZC9Sb290LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYzI5YmYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcHJlbG9hZC9Sb290LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotCi0vKioKLSAqIFJvb3Qgb2Ygb3VyIGRhdGEgbW9kZWwuCi0gKi8KLXB1YmxpYyBjbGFzcyBSb290IGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDA7Ci0KLSAgICAvKiogcGlkIC0+IFByb2MgKi8KLSAgICBmaW5hbCBNYXA8SW50ZWdlciwgUHJvYz4gcHJvY2Vzc2VzID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgUHJvYz4oKTsKLQotICAgIC8qKiBDbGFzcyBuYW1lIC0+IExvYWRlZENsYXNzICovCi0gICAgZmluYWwgTWFwPFN0cmluZywgTG9hZGVkQ2xhc3M+IGxvYWRlZENsYXNzZXMKLSAgICAgICAgICAgID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMb2FkZWRDbGFzcz4oKTsKLQotICAgIE1lbW9yeVVzYWdlIGJhc2VsaW5lID0gTWVtb3J5VXNhZ2UuYmFzZWxpbmUoKTsKLQotICAgIC8qKgotICAgICAqIFJlY29yZHMgY2xhc3MgbG9hZHMgYW5kIGluaXRpYWxpemF0aW9ucy4KLSAgICAgKi8KLSAgICB2b2lkIGluZGV4Q2xhc3NPcGVyYXRpb24oUmVjb3JkIHJlY29yZCkgewotICAgICAgICBQcm9jIHByb2Nlc3MgPSBwcm9jZXNzZXMuZ2V0KHJlY29yZC5waWQpOwotCi0gICAgICAgIC8vIElnbm9yZSBkZXhvcHQgb3V0cHV0LiBJdCBsb2FkcyBhcHBsaWNhdGlvbnMgY2xhc3NlcyB0aHJvdWdoIHRoZQotICAgICAgICAvLyBzeXN0ZW0gY2xhc3MgbG9hZGVyIGFuZCBtZXNzZXMgdXMgdXAuCi0gICAgICAgIGlmIChyZWNvcmQucHJvY2Vzc05hbWUuZXF1YWxzKCJkZXhvcHQiKSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUgPSByZWNvcmQuY2xhc3NOYW1lOwotICAgICAgICBMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcyA9IGxvYWRlZENsYXNzZXMuZ2V0KG5hbWUpOwotICAgICAgICBPcGVyYXRpb24gbyA9IG51bGw7Ci0KLSAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewotICAgICAgICAgICAgY2FzZSBTVEFSVF9MT0FEOgotICAgICAgICAgICAgY2FzZSBTVEFSVF9JTklUOgotICAgICAgICAgICAgICAgIGlmIChsb2FkZWRDbGFzcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRlZENsYXNzID0gbmV3IExvYWRlZENsYXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHJlY29yZC5jbGFzc0xvYWRlciA9PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRlZENsYXNzLnN5c3RlbUNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IG1lYXN1cmUgbWVtb3J5IGZvciBjbGFzc2VzIGluIHRoZSBib290Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGFzc3BhdGguCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRDbGFzcy5tZWFzdXJlTWVtb3J5VXNhZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBsb2FkZWRDbGFzc2VzLnB1dChuYW1lLCBsb2FkZWRDbGFzcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEVORF9MT0FEOgotICAgICAgICAgICAgY2FzZSBFTkRfSU5JVDoKLSAgICAgICAgICAgICAgICBvID0gcHJvY2Vzcy5lbmRPcGVyYXRpb24ocmVjb3JkLnRpZCwgcmVjb3JkLmNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZENsYXNzLCByZWNvcmQudGltZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG8gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewotICAgICAgICAgICAgY2FzZSBTVEFSVF9MT0FEOgotICAgICAgICAgICAgICAgIHByb2Nlc3Muc3RhcnRPcGVyYXRpb24ocmVjb3JkLnRpZCwgbG9hZGVkQ2xhc3MsIHJlY29yZC50aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlR5cGUuTE9BRCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU1RBUlRfSU5JVDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzLnN0YXJ0T3BlcmF0aW9uKHJlY29yZC50aWQsIGxvYWRlZENsYXNzLCByZWNvcmQudGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5UeXBlLklOSVQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEVORF9MT0FEOgotICAgICAgICAgICAgICAgIGxvYWRlZENsYXNzLmxvYWRzLmFkZChvKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBFTkRfSU5JVDoKLSAgICAgICAgICAgICAgICBsb2FkZWRDbGFzcy5pbml0aWFsaXphdGlvbnMuYWRkKG8pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5kZXhlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBnaXZlbiByZWNvcmQuCi0gICAgICovCi0gICAgdm9pZCBpbmRleFByb2Nlc3MoUmVjb3JkIHJlY29yZCkgewotICAgICAgICBQcm9jIHByb2MgPSBwcm9jZXNzZXMuZ2V0KHJlY29yZC5waWQpOwotCi0gICAgICAgIGlmIChwcm9jID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwcm9jZXNzIG9iamVjdC4KLSAgICAgICAgICAgIFByb2MgcGFyZW50ID0gcHJvY2Vzc2VzLmdldChyZWNvcmQucHBpZCk7Ci0gICAgICAgICAgICBwcm9jID0gbmV3IFByb2MocGFyZW50LCByZWNvcmQucGlkKTsKLSAgICAgICAgICAgIHByb2Nlc3Nlcy5wdXQocHJvYy5pZCwgcHJvYyk7Ci0gICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4uYWRkKHByb2MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJvYy5zZXROYW1lKHJlY29yZC5wcm9jZXNzTmFtZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV3JpdGVzIHRoaXMgZ3JhcGggdG8gYSBmaWxlLgotICAgICAqLwotICAgIHZvaWQgdG9GaWxlKFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlTmFtZSk7Ci0gICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBvb3V0ID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbSgKLSAgICAgICAgICAgICAgICBuZXcgQnVmZmVyZWRPdXRwdXRTdHJlYW0ob3V0KSk7Ci0KLSAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcml0aW5nIG9iamVjdCBtb2RlbC4uLiIpOwotCi0gICAgICAgIG9vdXQud3JpdGVPYmplY3QodGhpcyk7Ci0KLSAgICAgICAgb291dC5jbG9zZSgpOwotCi0gICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRG9uZSEiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWFkcyBSb290IGZyb20gYSBmaWxlLgotICAgICAqLwotICAgIHN0YXRpYyBSb290IGZyb21GaWxlKFN0cmluZyBmaWxlTmFtZSkKLSAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGVOYW1lKTsKLSAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gb2luID0gbmV3IE9iamVjdElucHV0U3RyZWFtKAotICAgICAgICAgICAgICAgIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGZpbikpOwotCi0gICAgICAgIFJvb3Qgcm9vdCA9IChSb290KSBvaW4ucmVhZE9iamVjdCgpOwotCi0gICAgICAgIG9pbi5jbG9zZSgpOwotCi0gICAgICAgIHJldHVybiByb290OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvV3JpdGVQcmVsb2FkZWRDbGFzc0ZpbGUuamF2YSBiL3Rvb2xzL3ByZWxvYWQvV3JpdGVQcmVsb2FkZWRDbGFzc0ZpbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA2N2JjMi4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL1dyaXRlUHJlbG9hZGVkQ2xhc3NGaWxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotCi0vKioKLSAqIFdyaXRlcyAvZnJhbWV3b3Jrcy9iYXNlL3ByZWxvYWRlZC1jbGFzc2VzLiBBbHNvIHVwZGF0ZXMKLSAqIHtAbGluayBMb2FkZWRDbGFzcyNwcmVsb2FkZWR9IGZpZWxkcyBhbmQgd3JpdGVzIG92ZXIgY29tcGlsZWQgbG9nIGZpbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBXcml0ZVByZWxvYWRlZENsYXNzRmlsZSB7Ci0KLSAgICAvKioKLSAgICAgKiBQcmVsb2FkIGFueSBjbGFzcyB0aGF0IHRha2UgbG9uZ2VyIHRvIGxvYWQgdGhhbiBNSU5fTE9BRF9USU1FX01JQ1JPUyB1cy4KLSAgICAgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IE1JTl9MT0FEX1RJTUVfTUlDUk9TID0gMTI1MDsKLQotICAgIC8qKgotICAgICAqIFByZWxvYWQgYW55IGNsYXNzIHRoYXQgd2FzIGxvYWRlZCBieSBhdCBsZWFzdCBNSU5fUFJPQ0VTU0VTIHByb2Nlc3Nlcy4KLSAgICAgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IE1JTl9QUk9DRVNTRVMgPSAxMDsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiwKLSAgICAgICAgICAgIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gMSkgewotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogV3JpdGVQcmVsb2FkZWRDbGFzc0ZpbGUgW2NvbXBpbGVkIGxvZ10iKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgcm9vdEZpbGUgPSBhcmdzWzBdOwotICAgICAgICBSb290IHJvb3QgPSBSb290LmZyb21GaWxlKHJvb3RGaWxlKTsKLQotICAgICAgICAvLyBObyBjbGFzc2VzIGFyZSBwcmVsb2FkZWQgdG8gc3RhcnQuCi0gICAgICAgIGZvciAoTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MgOiByb290LmxvYWRlZENsYXNzZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGxvYWRlZENsYXNzLnByZWxvYWRlZCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT3BlbiBwcmVsb2FkZWQtY2xhc3NlcyBmaWxlIGZvciBvdXRwdXQuCi0gICAgICAgIFdyaXRlciBvdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcigKLSAgICAgICAgICAgICAgICBuZXcgRmlsZU91dHB1dFN0cmVhbShQb2xpY3kuUFJFTE9BREVEX0NMQVNTX0ZJTEUpLAotICAgICAgICAgICAgICAgIENoYXJzZXQuZm9yTmFtZSgiVVMtQVNDSUkiKSkpOwotCi0gICAgICAgIG91dC53cml0ZSgiIyBDbGFzc2VzIHdoaWNoIGFyZSBwcmVsb2FkZWQgYnkiCi0gICAgICAgICAgICAgICAgKyAiIGNvbS5hbmRyb2lkLmludGVybmFsLm9zLlp5Z290ZUluaXQuXG4iKTsKLSAgICAgICAgb3V0LndyaXRlKCIjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGZyYW1ld29ya3MvYmFzZS90b29scy9wcmVsb2FkLyIKLSAgICAgICAgICAgICsgV3JpdGVQcmVsb2FkZWRDbGFzc0ZpbGUuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi5qYXZhLlxuIik7Ci0gICAgICAgIG91dC53cml0ZSgiIyBNSU5fTE9BRF9USU1FX01JQ1JPUz0iICsgTUlOX0xPQURfVElNRV9NSUNST1MgKyAiXG4iKTsKLSAgICAgICAgb3V0LndyaXRlKCIjIE1JTl9QUk9DRVNTRVM9IiArIE1JTl9QUk9DRVNTRVMgKyAiXG4iKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGUgc2V0IG9mIGNsYXNzZXMgdG8gcHJlbG9hZC4gV2UgcHJlbG9hZCBhIGNsYXNzIGlmOgotICAgICAgICAgKgotICAgICAgICAgKiAgYSkgaXQncyBsb2FkZWQgaW4gdGhlIGJvb3RjbGFzc3BhdGggKGkuZS4sIGlzIGEgc3lzdGVtIGNsYXNzKQotICAgICAgICAgKiAgYikgaXQgdGFrZXMgPiBNSU5fTE9BRF9USU1FX01JQ1JPUyB1cyB0byBsb2FkLCBhbmQKLSAgICAgICAgICogIGMpIGl0J3MgbG9hZGVkIGJ5IG1vcmUgdGhhbiBvbmUgcHJvY2Vzcywgb3IgaXQncyBsb2FkZWQgYnkgYW4KLSAgICAgICAgICogICAgIGFwcGxpY2F0aW9uIChpLmUuLCBub3QgYSBsb25nIHJ1bm5pbmcgc2VydmljZSkKLSAgICAgICAgICovCi0gICAgICAgIFNldDxMb2FkZWRDbGFzcz4gdG9QcmVsb2FkID0gbmV3IFRyZWVTZXQ8TG9hZGVkQ2xhc3M+KCk7Ci0KLSAgICAgICAgLy8gUHJlbG9hZCBjbGFzc2VzIHRoYXQgd2VyZSBsb2FkZWQgYnkgYXQgbGVhc3QgMiBwcm9jZXNzZXMuIEhvcGVmdWxseSwKLSAgICAgICAgLy8gdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlc2UgY2xhc3NlcyB3aWxsIGJlIHNoYXJlZC4KLSAgICAgICAgZm9yIChMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcyA6IHJvb3QubG9hZGVkQ2xhc3Nlcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgU2V0PFN0cmluZz4gbmFtZXMgPSBsb2FkZWRDbGFzcy5wcm9jZXNzTmFtZXMoKTsKLSAgICAgICAgICAgIGlmICghUG9saWN5LmlzUHJlbG9hZGFibGUobG9hZGVkQ2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuYW1lcy5zaXplKCkgPj0gTUlOX1BST0NFU1NFUyB8fAotICAgICAgICAgICAgICAgICAgICAobG9hZGVkQ2xhc3MubWVkaWFuVGltZU1pY3JvcygpID4gTUlOX0xPQURfVElNRV9NSUNST1MgJiYgbmFtZXMuc2l6ZSgpID4gMSkpIHsKLSAgICAgICAgICAgICAgICB0b1ByZWxvYWQuYWRkKGxvYWRlZENsYXNzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludCBpbml0aWFsU2l6ZSA9IHRvUHJlbG9hZC5zaXplKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbml0aWFsU2l6ZQotICAgICAgICAgICAgICAgICsgIiBjbGFzc3NlcyB3ZXJlIGxvYWRlZCBieSBtb3JlIHRoYW4gb25lIGFwcC4iKTsKLQotICAgICAgICAvLyBQcmVsb2FkIGVsaWdhYmxlIGNsYXNzZXMgZnJvbSBhcHBsaWNhdGlvbnMgKG5vdCBsb25nLXJ1bm5pbmcKLSAgICAgICAgLy8gc2VydmljZXMpLgotICAgICAgICBmb3IgKFByb2MgcHJvYyA6IHJvb3QucHJvY2Vzc2VzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAocHJvYy5mcm9tWnlnb3RlKCkgJiYgIVBvbGljeS5pc1NlcnZpY2UocHJvYy5uYW1lKSkgewotICAgICAgICAgICAgICAgIGZvciAoT3BlcmF0aW9uIG9wZXJhdGlvbiA6IHByb2Mub3BlcmF0aW9ucykgewotICAgICAgICAgICAgICAgICAgICBMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcyA9IG9wZXJhdGlvbi5sb2FkZWRDbGFzczsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFByZWxvYWQobG9hZGVkQ2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b1ByZWxvYWQuYWRkKGxvYWRlZENsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkZWQgIiArICh0b1ByZWxvYWQuc2l6ZSgpIC0gaW5pdGlhbFNpemUpCi0gICAgICAgICAgICAgICAgKyAiIG1vcmUgdG8gc3BlZWQgdXAgYXBwbGljYXRpb25zLiIpOwotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0b1ByZWxvYWQuc2l6ZSgpCi0gICAgICAgICAgICAgICAgKyAiIHRvdGFsIGNsYXNzZXMgd2lsbCBiZSBwcmVsb2FkZWQuIik7Ci0KLSAgICAgICAgLy8gTWFrZSBjbGFzc2VzIHRoYXQgd2VyZSBpbXBsaWNpdGx5IGxvYWRlZCBieSB0aGUgenlnb3RlIGV4cGxpY2l0LgotICAgICAgICAvLyBUaGlzIGFkZHMgbWluaW1hbCBvdmVyaGVhZCBidXQgYXZvaWQgY29uZnVzaW9uIGFib3V0IGNsYXNzZXMgbm90Ci0gICAgICAgIC8vIGFwcGVhcmluZyBpbiB0aGUgbGlzdC4KLSAgICAgICAgYWRkQWxsQ2xhc3Nlc0Zyb20oInp5Z290ZSIsIHJvb3QsIHRvUHJlbG9hZCk7Ci0KLSAgICAgICAgZm9yIChMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcyA6IHRvUHJlbG9hZCkgewotICAgICAgICAgICAgb3V0LndyaXRlKGxvYWRlZENsYXNzLm5hbWUgKyAiXG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dC5jbG9zZSgpOwotCi0gICAgICAgIC8vIFVwZGF0ZSBkYXRhIHRvIHJlZmxlY3QgTG9hZGVkQ2xhc3MucHJlbG9hZGVkIGNoYW5nZXMuCi0gICAgICAgIGZvciAoTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MgOiB0b1ByZWxvYWQpIHsKLSAgICAgICAgICAgIGxvYWRlZENsYXNzLnByZWxvYWRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcm9vdC50b0ZpbGUocm9vdEZpbGUpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYWRkQWxsQ2xhc3Nlc0Zyb20oU3RyaW5nIHByb2Nlc3NOYW1lLCBSb290IHJvb3QsCi0gICAgICAgICAgICBTZXQ8TG9hZGVkQ2xhc3M+IHRvUHJlbG9hZCkgewotICAgICAgICBmb3IgKFByb2MgcHJvYyA6IHJvb3QucHJvY2Vzc2VzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAocHJvYy5uYW1lLmVxdWFscyhwcm9jZXNzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKE9wZXJhdGlvbiBvcGVyYXRpb24gOiBwcm9jLm9wZXJhdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBwcmVsb2FkYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gUG9saWN5LmlzUHJlbG9hZGFibGUob3BlcmF0aW9uLmxvYWRlZENsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWxvYWRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b1ByZWxvYWQuYWRkKG9wZXJhdGlvbi5sb2FkZWRDbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNsYXNzIHNob3VsZCBiZSBwcmVsb2FkZWQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBzaG91bGRQcmVsb2FkKExvYWRlZENsYXNzIGNsYXp6KSB7Ci0gICAgICAgIHJldHVybiBQb2xpY3kuaXNQcmVsb2FkYWJsZShjbGF6eikKLSAgICAgICAgICAgICAgICAmJiBjbGF6ei5tZWRpYW5UaW1lTWljcm9zKCkgPiBNSU5fTE9BRF9USU1FX01JQ1JPUzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL2xvYWRjbGFzcy9BbmRyb2lkLm1rIGIvdG9vbHMvcHJlbG9hZC9sb2FkY2xhc3MvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU4MjhiZS4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL2xvYWRjbGFzcy9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1MT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtc3ViZGlyLWphdmEtZmlsZXMpCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSB0ZXN0cwotCi1MT0NBTF9NT0RVTEUgOj0gbG9hZGNsYXNzCi0KLWluY2x1ZGUgJChCVUlMRF9KQVZBX0xJQlJBUlkpCmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL2xvYWRjbGFzcy9Mb2FkQ2xhc3MuamF2YSBiL3Rvb2xzL3ByZWxvYWQvbG9hZGNsYXNzL0xvYWRDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzFiNmE4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvbG9hZGNsYXNzL0xvYWRDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQub3MuRGVidWc7Ci0KLS8qKgotICogTG9hZHMgYSBjbGFzcywgcnVucyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IsIGFuZCBwcmludHMgc2hvd21hcCBvdXRwdXQuCi0gKgotICogPHA+VXNhZ2U6IGRhbHZpa3ZtIExvYWRDbGFzcyBbY2xhc3MgbmFtZV0KLSAqLwotY2xhc3MgTG9hZENsYXNzIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCJhbmRyb2lkX3J1bnRpbWUiKTsKLQotICAgICAgICBpZiAocmVnaXN0ZXJOYXRpdmVzKCkgPCAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXJyb3IgcmVnaXN0ZXJpbmcgbmF0aXZlcy4iKTsgICAgCi0gICAgICAgIH0KLQotICAgICAgICBEZWJ1Zy5zdGFydEFsbG9jQ291bnRpbmcoKTsKLQotICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgICAgICBDbGFzcy5mb3JOYW1lKGFyZ3NbMF0pOwotICAgICAgICAgICAgICAgIGxvbmcgZWxhcHNlZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQ7Ci0gICAgICAgICAgICAgICAgTG9nLmkoIkxvYWRDbGFzcyIsICJMb2FkZWQgIiArIGFyZ3NbMF0gKyAiIGluICIgKyBlbGFwc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICArICJtcy4iKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KCJMb2FkQ2xhc3MiLCBlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTeXN0ZW0uZ2MoKTsKLQotICAgICAgICBpbnQgYWxsb2NDb3VudCA9IERlYnVnLmdldEdsb2JhbEFsbG9jQ291bnQoKTsKLSAgICAgICAgaW50IGFsbG9jU2l6ZSA9IERlYnVnLmdldEdsb2JhbEFsbG9jU2l6ZSgpOwotICAgICAgICBpbnQgZnJlZWRDb3VudCA9IERlYnVnLmdldEdsb2JhbEZyZWVkQ291bnQoKTsKLSAgICAgICAgaW50IGZyZWVkU2l6ZSA9IERlYnVnLmdldEdsb2JhbEZyZWVkU2l6ZSgpOwotICAgICAgICBsb25nIG5hdGl2ZUhlYXBTaXplID0gRGVidWcuZ2V0TmF0aXZlSGVhcFNpemUoKTsKLQotICAgICAgICBEZWJ1Zy5zdG9wQWxsb2NDb3VudGluZygpOwotCi0gICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzcG9uc2UgPSBuZXcgU3RyaW5nQnVpbGRlcigiREVDQUZCQUQiKTsKLQotICAgICAgICBpbnRbXSBwYWdlcyA9IG5ldyBpbnRbNl07Ci0gICAgICAgIERlYnVnLk1lbW9yeUluZm8gbWVtb3J5SW5mbyA9IG5ldyBEZWJ1Zy5NZW1vcnlJbmZvKCk7Ci0gICAgICAgIERlYnVnLmdldE1lbW9yeUluZm8obWVtb3J5SW5mbyk7Ci0gICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnLCcpLmFwcGVuZChtZW1vcnlJbmZvLm5hdGl2ZVNoYXJlZERpcnR5KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKG1lbW9yeUluZm8uZGFsdmlrU2hhcmVkRGlydHkpOwotICAgICAgICByZXNwb25zZS5hcHBlbmQoJywnKS5hcHBlbmQobWVtb3J5SW5mby5vdGhlclNoYXJlZERpcnR5KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKG1lbW9yeUluZm8ubmF0aXZlUHJpdmF0ZURpcnR5KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKG1lbW9yeUluZm8uZGFsdmlrUHJpdmF0ZURpcnR5KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKG1lbW9yeUluZm8ub3RoZXJQcml2YXRlRGlydHkpOwotCi0gICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnLCcpLmFwcGVuZChhbGxvY0NvdW50KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKGFsbG9jU2l6ZSk7Ci0gICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnLCcpLmFwcGVuZChmcmVlZENvdW50KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKGZyZWVkU2l6ZSk7Ci0gICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnLCcpLmFwcGVuZChuYXRpdmVIZWFwU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVzcG9uc2UudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVnaXN0ZXJzIG5hdGl2ZSBmdW5jdGlvbnMuIFNlZSBBbmRyb2lkUnVudGltZS5jcHAuCi0gICAgICovCi0gICAgc3RhdGljIG5hdGl2ZSBpbnQgcmVnaXN0ZXJOYXRpdmVzKCk7Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL3ByZWxvYWQuaW1sIGIvdG9vbHMvcHJlbG9hZC9wcmVsb2FkLmltbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ4N2M1NS4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL3ByZWxvYWQuaW1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtb2R1bGUgcmVsYXRpdmVQYXRocz0idHJ1ZSIgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgotICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0iZmFsc2UiPgotICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vL3RtcC9wcmVsb2FkIiAvPgotICAgIDxvdXRwdXQtdGVzdCB1cmw9ImZpbGU6Ly8vdG1wL3ByZWxvYWQiIC8+Ci0gICAgPGV4Y2x1ZGUtb3V0cHV0IC8+Ci0gICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KLSAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIiBpc1Rlc3RTb3VyY2U9ImZhbHNlIiAvPgotICAgIDwvY29udGVudD4KLSAgICA8b3JkZXJFbnRyeSB0eXBlPSJpbmhlcml0ZWRKZGsiIC8+Ci0gICAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiBmb3JUZXN0cz0iZmFsc2UiIC8+Ci0gIDwvY29tcG9uZW50PgotPC9tb2R1bGU+Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvcHJlbG9hZC5pcHIgYi90b29scy9wcmVsb2FkL3ByZWxvYWQuaXByCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzk2MjFjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvcHJlbG9hZC5pcHIKKysrIC9kZXYvbnVsbApAQCAtMSw0OTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHJlbGF0aXZlUGF0aHM9ImZhbHNlIiB2ZXJzaW9uPSI0Ij4KLSAgPGNvbXBvbmVudCBuYW1lPSJBbnRDb25maWd1cmF0aW9uIj4KLSAgICA8ZGVmYXVsdEFudCBidW5kbGVkQW50PSJ0cnVlIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJCdWlsZEphclByb2plY3RTZXR0aW5ncyI+Ci0gICAgPG9wdGlvbiBuYW1lPSJCVUlMRF9KQVJTX09OX01BS0UiIHZhbHVlPSJmYWxzZSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iQ2hhbmdlQnJvd3NlclNldHRpbmdzIj4KLSAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fU1BMSVRURVJfUFJPUE9SVElPTiIgdmFsdWU9IjAuMyIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik1FU1NBR0VTX1NQTElUVEVSX1BST1BPUlRJT04iIHZhbHVlPSIwLjgiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJVU0VfREFURV9CRUZPUkVfRklMVEVSIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJVU0VfREFURV9BRlRFUl9GSUxURVIiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRV9DSEFOR0VfQkVGT1JFX0ZJTFRFUiIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVVNFX0NIQU5HRV9BRlRFUl9GSUxURVIiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRBVEVfQkVGT1JFIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iREFURV9BRlRFUiIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkNIQU5HRV9CRUZPUkUiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDSEFOR0VfQUZURVIiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJVU0VfVVNFUl9GSUxURVIiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRVIiIHZhbHVlPSIiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkNvZGVTdHlsZVByb2plY3RQcm9maWxlTWFuZ2VyIj4KLSAgICA8b3B0aW9uIG5hbWU9IlBST0pFQ1RfUFJPRklMRSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRV9QUk9KRUNUX0xFVkVMX1NFVFRJTkdTIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkNvZGVTdHlsZVNldHRpbmdzTWFuYWdlciI+Ci0gICAgPG9wdGlvbiBuYW1lPSJQRVJfUFJPSkVDVF9TRVRUSU5HUyI+Ci0gICAgICA8dmFsdWU+Ci0gICAgICAgIDxBRERJVElPTkFMX0lOREVOVF9PUFRJT05TIGZpbGVUeXBlPSJqYXZhIj4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IklOREVOVF9TSVpFIiB2YWx1ZT0iNCIgLz4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IkNPTlRJTlVBVElPTl9JTkRFTlRfU0laRSIgdmFsdWU9IjgiIC8+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJUQUJfU0laRSIgdmFsdWU9IjQiIC8+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJVU0VfVEFCX0NIQVJBQ1RFUiIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iU01BUlRfVEFCUyIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iTEFCRUxfSU5ERU5UX1NJWkUiIHZhbHVlPSIwIiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iTEFCRUxfSU5ERU5UX0FCU09MVVRFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICAgIDwvQURESVRJT05BTF9JTkRFTlRfT1BUSU9OUz4KLSAgICAgICAgPEFERElUSU9OQUxfSU5ERU5UX09QVElPTlMgZmlsZVR5cGU9InhtbCI+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJJTkRFTlRfU0laRSIgdmFsdWU9IjQiIC8+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJDT05USU5VQVRJT05fSU5ERU5UX1NJWkUiIHZhbHVlPSI4IiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iVEFCX1NJWkUiIHZhbHVlPSI0IiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iVVNFX1RBQl9DSEFSQUNURVIiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IlNNQVJUX1RBQlMiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IkxBQkVMX0lOREVOVF9TSVpFIiB2YWx1ZT0iMCIgLz4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IkxBQkVMX0lOREVOVF9BQlNPTFVURSIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICA8L0FERElUSU9OQUxfSU5ERU5UX09QVElPTlM+Ci0gICAgICA8L3ZhbHVlPgotICAgIDwvb3B0aW9uPgotICAgIDxvcHRpb24gbmFtZT0iVVNFX1BFUl9QUk9KRUNUX1NFVFRJTkdTIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkNvbXBpbGVyQ29uZmlndXJhdGlvbiI+Ci0gICAgPG9wdGlvbiBuYW1lPSJERUZBVUxUX0NPTVBJTEVSIiB2YWx1ZT0iSmF2YWMiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJERVBMT1lfQUZURVJfTUFLRSIgdmFsdWU9IjAiIC8+Ci0gICAgPHJlc291cmNlRXh0ZW5zaW9ucz4KLSAgICAgIDxlbnRyeSBuYW1lPSIuK1wuKHByb3BlcnRpZXN8eG1sfGh0bWx8ZHRkfHRsZCkiIC8+Ci0gICAgICA8ZW50cnkgbmFtZT0iLitcLihnaWZ8cG5nfGpwZWd8anBnKSIgLz4KLSAgICA8L3Jlc291cmNlRXh0ZW5zaW9ucz4KLSAgICA8d2lsZGNhcmRSZXNvdXJjZVBhdHRlcm5zPgotICAgICAgPGVudHJ5IG5hbWU9Ij8qLnByb3BlcnRpZXMiIC8+Ci0gICAgICA8ZW50cnkgbmFtZT0iPyoueG1sIiAvPgotICAgICAgPGVudHJ5IG5hbWU9Ij8qLmdpZiIgLz4KLSAgICAgIDxlbnRyeSBuYW1lPSI/Ki5wbmciIC8+Ci0gICAgICA8ZW50cnkgbmFtZT0iPyouanBlZyIgLz4KLSAgICAgIDxlbnRyeSBuYW1lPSI/Ki5qcGciIC8+Ci0gICAgICA8ZW50cnkgbmFtZT0iPyouaHRtbCIgLz4KLSAgICAgIDxlbnRyeSBuYW1lPSI/Ki5kdGQiIC8+Ci0gICAgICA8ZW50cnkgbmFtZT0iPyoudGxkIiAvPgotICAgIDwvd2lsZGNhcmRSZXNvdXJjZVBhdHRlcm5zPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJDdnMyQ29uZmlndXJhdGlvbiI+Ci0gICAgPG9wdGlvbiBuYW1lPSJQUlVORV9FTVBUWV9ESVJFQ1RPUklFUyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJNRVJHSU5HX01PREUiIHZhbHVlPSIwIiAvPgotICAgIDxvcHRpb24gbmFtZT0iTUVSR0VfV0lUSF9CUkFOQ0gxX05BTUUiIHZhbHVlPSJIRUFEIiAvPgotICAgIDxvcHRpb24gbmFtZT0iTUVSR0VfV0lUSF9CUkFOQ0gyX05BTUUiIHZhbHVlPSJIRUFEIiAvPgotICAgIDxvcHRpb24gbmFtZT0iUkVTRVRfU1RJQ0tZIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDUkVBVEVfTkVXX0RJUkVDVE9SSUVTIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfVEVYVF9GSUxFX1NVQlNUSVRVVElPTiIgdmFsdWU9Imt2IiAvPgotICAgIDxvcHRpb24gbmFtZT0iUFJPQ0VTU19VTktOT1dOX0ZJTEVTIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJQUk9DRVNTX0RFTEVURURfRklMRVMiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlBST0NFU1NfSUdOT1JFRF9GSUxFUyIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iUkVTRVJWRURfRURJVCIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iQ0hFQ0tPVVRfREFURV9PUl9SRVZJU0lPTl9TRVRUSU5HUyI+Ci0gICAgICA8dmFsdWU+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iQlJBTkNIIiB2YWx1ZT0iIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9IkRBVEUiIHZhbHVlPSIiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iVVNFX0JSQU5DSCIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9IlVTRV9EQVRFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8L3ZhbHVlPgotICAgIDwvb3B0aW9uPgotICAgIDxvcHRpb24gbmFtZT0iVVBEQVRFX0RBVEVfT1JfUkVWSVNJT05fU0VUVElOR1MiPgotICAgICAgPHZhbHVlPgotICAgICAgICA8b3B0aW9uIG5hbWU9IkJSQU5DSCIgdmFsdWU9IiIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJEQVRFIiB2YWx1ZT0iIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9IlVTRV9CUkFOQ0giIHZhbHVlPSJmYWxzZSIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJVU0VfREFURSIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPC92YWx1ZT4KLSAgICA8L29wdGlvbj4KLSAgICA8b3B0aW9uIG5hbWU9IlNIT1dfQ0hBTkdFU19SRVZJU0lPTl9TRVRUSU5HUyI+Ci0gICAgICA8dmFsdWU+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iQlJBTkNIIiB2YWx1ZT0iIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9IkRBVEUiIHZhbHVlPSIiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iVVNFX0JSQU5DSCIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9IlVTRV9EQVRFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8L3ZhbHVlPgotICAgIDwvb3B0aW9uPgotICAgIDxvcHRpb24gbmFtZT0iU0hPV19PVVRQVVQiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkFERF9XQVRDSF9JTkRFWCIgdmFsdWU9IjAiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJSRU1PVkVfV0FUQ0hfSU5ERVgiIHZhbHVlPSIwIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVVBEQVRFX0tFWVdPUkRfU1VCU1RJVFVUSU9OIiAvPgotICAgIDxvcHRpb24gbmFtZT0iTUFLRV9ORVdfRklMRVNfUkVBRE9OTFkiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlNIT1dfQ09SUlVQVEVEX1BST0pFQ1RfRklMRVMiIHZhbHVlPSIwIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVEFHX0FGVEVSX1BST0pFQ1RfQ09NTUlUIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJPVkVSUklERV9FWElTVElOR19UQUdfRk9SX1BST0pFQ1QiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVEFHX0FGVEVSX1BST0pFQ1RfQ09NTUlUX05BTUUiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDTEVBTl9DT1BZIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkRlcGVuZGVuY2llc0FuYWx5emVNYW5hZ2VyIj4KLSAgICA8b3B0aW9uIG5hbWU9Im15Rm9yd2FyZERpcmVjdGlvbiIgdmFsdWU9ImZhbHNlIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJEZXBlbmRlbmN5VmFsaWRhdGlvbk1hbmFnZXIiPgotICAgIDxvcHRpb24gbmFtZT0iU0tJUF9JTVBPUlRfU1RBVEVNRU5UUyIgdmFsdWU9ImZhbHNlIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJFY2xpcHNlQ29tcGlsZXJTZXR0aW5ncyI+Ci0gICAgPG9wdGlvbiBuYW1lPSJERUJVR0dJTkdfSU5GTyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9OT19XQVJOSU5HUyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJERVBSRUNBVElPTiIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik1BWElNVU1fSEVBUF9TSVpFIiB2YWx1ZT0iMTI4IiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJFY2xpcHNlRW1iZWRkZWRDb21waWxlclNldHRpbmdzIj4KLSAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iTUFYSU1VTV9IRUFQX1NJWkUiIHZhbHVlPSIxMjgiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkVuY29kaW5nIiB1c2VVVEZHdWVzc2luZz0idHJ1ZSIgbmF0aXZlMkFzY2lpRm9yUHJvcGVydGllc0ZpbGVzPSJmYWxzZSIgLz4KLSAgPGNvbXBvbmVudCBuYW1lPSJFbnRyeVBvaW50c01hbmFnZXIiPgotICAgIDxlbnRyeV9wb2ludHMgdmVyc2lvbj0iMi4wIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJFeHBvcnRUb0hUTUxTZXR0aW5ncyI+Ci0gICAgPG9wdGlvbiBuYW1lPSJQUklOVF9MSU5FX05VTUJFUlMiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fSU5fQlJPV1NFUiIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iT1VUUFVUX0RJUkVDVE9SWSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iSWRQcm92aWRlciIgSURFdGFsa0lEPSJEMTcxRjk5QjkxNzhDMTY3NTU5M0RDOUE3NkE1Q0M3RSIgLz4KLSAgPGNvbXBvbmVudCBuYW1lPSJJbnNwZWN0aW9uUHJvamVjdFByb2ZpbGVNYW5hZ2VyIj4KLSAgICA8b3B0aW9uIG5hbWU9IlBST0pFQ1RfUFJPRklMRSIgdmFsdWU9IlByb2plY3QgRGVmYXVsdCIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRV9QUk9KRUNUX1BST0ZJTEUiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDx2ZXJzaW9uIHZhbHVlPSIxLjAiIC8+Ci0gICAgPHByb2ZpbGVzPgotICAgICAgPHByb2ZpbGUgdmVyc2lvbj0iMS4wIiBpc19sb2NrZWQ9ImZhbHNlIj4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJteU5hbWUiIHZhbHVlPSJQcm9qZWN0IERlZmF1bHQiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0ibXlMb2NhbCIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJKYXZhRG9jIiBlbmFibGVkPSJmYWxzZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0iZmFsc2UiPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iVE9QX0xFVkVMX0NMQVNTX09QVElPTlMiPgotICAgICAgICAgICAgPHZhbHVlPgotICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9IkFDQ0VTU19KQVZBRE9DX1JFUVVJUkVEX0ZPUiIgdmFsdWU9Im5vbmUiIC8+Ci0gICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0iUkVRVUlSRURfVEFHUyIgdmFsdWU9IiIgLz4KLSAgICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgICAgPC9vcHRpb24+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJJTk5FUl9DTEFTU19PUFRJT05TIj4KLSAgICAgICAgICAgIDx2YWx1ZT4KLSAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJBQ0NFU1NfSkFWQURPQ19SRVFVSVJFRF9GT1IiIHZhbHVlPSJub25lIiAvPgotICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9IlJFUVVJUkVEX1RBR1MiIHZhbHVlPSIiIC8+Ci0gICAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICAgIDwvb3B0aW9uPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iTUVUSE9EX09QVElPTlMiPgotICAgICAgICAgICAgPHZhbHVlPgotICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9IkFDQ0VTU19KQVZBRE9DX1JFUVVJUkVEX0ZPUiIgdmFsdWU9Im5vbmUiIC8+Ci0gICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0iUkVRVUlSRURfVEFHUyIgdmFsdWU9IkByZXR1cm5AcGFyYW1AdGhyb3dzIG9yIEBleGNlcHRpb24iIC8+Ci0gICAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICAgIDwvb3B0aW9uPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iRklFTERfT1BUSU9OUyI+Ci0gICAgICAgICAgICA8dmFsdWU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0iQUNDRVNTX0pBVkFET0NfUkVRVUlSRURfRk9SIiB2YWx1ZT0ibm9uZSIgLz4KLSAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJSRVFVSVJFRF9UQUdTIiB2YWx1ZT0iIiAvPgotICAgICAgICAgICAgPC92YWx1ZT4KLSAgICAgICAgICA8L29wdGlvbj4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IklHTk9SRV9ERVBSRUNBVEVEIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJJR05PUkVfSkFWQURPQ19QRVJJT0QiIHZhbHVlPSJ0cnVlIiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlBZGRpdGlvbmFsSmF2YWRvY1RhZ3MiIHZhbHVlPSIiIC8+Ci0gICAgICAgIDwvaW5zcGVjdGlvbl90b29sPgotICAgICAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJKYXZhTGFuZ0ltcG9ydCIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KLSAgICAgICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iT25EZW1hbmRJbXBvcnQiIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiIC8+Ci0gICAgICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlJlZHVuZGFudEltcG9ydCIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KLSAgICAgICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iU2FtZVBhY2thZ2VJbXBvcnQiIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiIC8+Ci0gICAgICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlVudXNlZEltcG9ydCIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KLSAgICAgIDwvcHJvZmlsZT4KLSAgICA8L3Byb2ZpbGVzPgotICAgIDxsaXN0IHNpemU9IjQiPgotICAgICAgPGl0ZW0gaW5kZXg9IjAiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIiBpdGVtdmFsdWU9IldBUk5JTkciIC8+Ci0gICAgICA8aXRlbSBpbmRleD0iMSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmciIGl0ZW12YWx1ZT0iU0VSVkVSIFBST0JMRU0iIC8+Ci0gICAgICA8aXRlbSBpbmRleD0iMiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmciIGl0ZW12YWx1ZT0iSU5GTyIgLz4KLSAgICAgIDxpdGVtIGluZGV4PSIzIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZyIgaXRlbXZhbHVlPSJFUlJPUiIgLz4KLSAgICA8L2xpc3Q+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkphdmFjU2V0dGluZ3MiPgotICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJNQVhJTVVNX0hFQVBfU0laRSIgdmFsdWU9IjEyOCIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iSmF2YWRvY0dlbmVyYXRpb25NYW5hZ2VyIj4KLSAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9ESVJFQ1RPUlkiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0NPUEUiIHZhbHVlPSJwcm90ZWN0ZWQiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fSElFUkFSQ0hZIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9OQVZJR0FUT1IiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0lOREVYIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9TRVBBUkFURV9JTkRFWCIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1VTRSIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19BVVRIT1IiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfVkVSU0lPTiIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19ERVBSRUNBVEVEIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ERVBSRUNBVEVEX0xJU1QiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iT1RIRVJfT1BUSU9OUyIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkhFQVBfU0laRSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkxPQ0FMRSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fSU5fQlJPV1NFUiIgdmFsdWU9InRydWUiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9Ikppa2VzU2V0dGluZ3MiPgotICAgIDxvcHRpb24gbmFtZT0iSklLRVNfUEFUSCIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJJU19FTUFDU19FUlJPUlNfTU9ERSIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJMb2dDb25zb2xlUHJlZmVyZW5jZXMiPgotICAgIDxvcHRpb24gbmFtZT0iRklMVEVSX0VSUk9SUyIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iRklMVEVSX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJGSUxURVJfSU5GTyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDVVNUT01fRklMVEVSIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJQYWxldHRlMiI+Ci0gICAgPGdyb3VwIG5hbWU9IlN3aW5nIj4KLSAgICAgIDxpdGVtIGNsYXNzPSJjb20uaW50ZWxsaWoudWlEZXNpZ25lci5IU3BhY2VyIiB0b29sdGlwLXRleHQ9Ikhvcml6b250YWwgU3BhY2VyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvaHNwYWNlci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMSIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iY29tLmludGVsbGlqLnVpRGVzaWduZXIuVlNwYWNlciIgdG9vbHRpcC10ZXh0PSJWZXJ0aWNhbCBTcGFjZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy92c3BhY2VyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjEiIGFuY2hvcj0iMCIgZmlsbD0iMiIgLz4KLSAgICAgIDwvaXRlbT4KLSAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUGFuZWwiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9wYW5lbC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNjcm9sbFBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjciIGhzaXplLXBvbGljeT0iNyIgYW5jaG9yPSIwIiBmaWxsPSIzIiAvPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpCdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9idXR0b24ucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+Ci0gICAgICAgIDxpbml0aWFsLXZhbHVlcz4KLSAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkJ1dHRvbiIgLz4KLSAgICAgICAgPC9pbml0aWFsLXZhbHVlcz4KLSAgICAgIDwvaXRlbT4KLSAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUmFkaW9CdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9yYWRpb0J1dHRvbi5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KLSAgICAgICAgPGluaXRpYWwtdmFsdWVzPgotICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iUmFkaW9CdXR0b24iIC8+Ci0gICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNoZWNrQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY2hlY2tCb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjgiIGZpbGw9IjAiIC8+Ci0gICAgICAgIDxpbml0aWFsLXZhbHVlcz4KLSAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkNoZWNrQm94IiAvPgotICAgICAgICA8L2luaXRpYWwtdmFsdWVzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpMYWJlbCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xhYmVsLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjAiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KLSAgICAgICAgPGluaXRpYWwtdmFsdWVzPgotICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iTGFiZWwiIC8+Ci0gICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRleHRGaWVsZCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KLSAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpQYXNzd29yZEZpZWxkIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcGFzc3dvcmRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KLSAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpGb3JtYXR0ZWRUZXh0RmllbGQiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9mb3JtYXR0ZWRUZXh0RmllbGQucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iOCIgZmlsbD0iMSI+Ci0gICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iLTEiIC8+Ci0gICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KLSAgICAgIDwvaXRlbT4KLSAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGV4dEFyZWEiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90ZXh0QXJlYS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KLSAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUZXh0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgotICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgotICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkVkaXRvclBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9lZGl0b3JQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgotICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgotICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNvbWJvQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY29tYm9Cb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjIiIGFuY2hvcj0iOCIgZmlsbD0iMSIgLz4KLSAgICAgIDwvaXRlbT4KLSAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGFibGUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90YWJsZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+Ci0gICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+Ci0gICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KLSAgICAgIDwvaXRlbT4KLSAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KTGlzdCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xpc3QucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIyIiBhbmNob3I9IjAiIGZpbGw9IjMiPgotICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgotICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRyZWUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90cmVlLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KLSAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUYWJiZWRQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGFiYmVkUGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIzIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMyI+Ci0gICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiAvPgotICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNwbGl0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NwbGl0UGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiPgotICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTcGlubmVyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc3Bpbm5lci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIiAvPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTbGlkZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zbGlkZXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NlcGFyYXRvci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlByb2dyZXNzQmFyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcHJvZ3Jlc3NiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRvb2xCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90b29sYmFyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMSI+Ci0gICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSItMSIgaGVpZ2h0PSIyMCIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUb29sQmFyJFNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Rvb2xiYXJTZXBhcmF0b3IucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMCIgYW5jaG9yPSIwIiBmaWxsPSIxIiAvPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTY3JvbGxCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIwIiBhbmNob3I9IjAiIGZpbGw9IjIiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgPC9ncm91cD4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iUGVyZm9yY2VDaGFuZ2VCcm93c2VyU2V0dGluZ3MiPgotICAgIDxvcHRpb24gbmFtZT0iVVNFX0NMSUVOVF9GSUxURVIiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iQ0xJRU5UIiB2YWx1ZT0iIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0RGV0YWlscyI+Ci0gICAgPG9wdGlvbiBuYW1lPSJwcm9qZWN0TmFtZSIgdmFsdWU9InByZWxvYWQiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RGaWxlVmVyc2lvbiIgY29udmVydGVkPSJ0cnVlIiAvPgotICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RLZXkiPgotICAgIDxvcHRpb24gbmFtZT0ic3RhdGUiIHZhbHVlPSJwcm9qZWN0Oi8vL1ZvbHVtZXMvQW5kcm9pZC9kb251dC9mcmFtZXdvcmtzL2Jhc2UvdG9vbHMvcHJlbG9hZC9wcmVsb2FkLmlwciIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdE1vZHVsZU1hbmFnZXIiPgotICAgIDxtb2R1bGVzPgotICAgICAgPG1vZHVsZSBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9wcmVsb2FkLmltbCIgZmlsZXBhdGg9IiRQUk9KRUNUX0RJUiQvcHJlbG9hZC5pbWwiIC8+Ci0gICAgPC9tb2R1bGVzPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0Um9vdE1hbmFnZXIiIHZlcnNpb249IjIiIGxhbmd1YWdlTGV2ZWw9IkpES18xXzUiIGFzc2VydC1rZXl3b3JkPSJ0cnVlIiBqZGstMTU9InRydWUiIHByb2plY3QtamRrLW5hbWU9IjEuNSIgcHJvamVjdC1qZGstdHlwZT0iSmF2YVNESyI+Ci0gICAgPG91dHB1dCB1cmw9ImZpbGU6Ly8vdG1wL3ByZWxvYWQiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlJtaWNTZXR0aW5ncyI+Ci0gICAgPG9wdGlvbiBuYW1lPSJJU19FQU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX0lJT1BfU1RVQlMiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlN0YXJ0ZWFtQ29uZmlndXJhdGlvbiI+Ci0gICAgPG9wdGlvbiBuYW1lPSJTRVJWRVIiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJQT1JUIiB2YWx1ZT0iNDkyMDEiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJVU0VSIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iUEFTU1dPUkQiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJQUk9KRUNUIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVklFVyIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkFMVEVSTkFUSVZFX1dPUktJTkdfUEFUSCIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkxPQ0tfT05fQ0hFQ0tPVVQiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVOTE9DS19PTl9DSEVDS0lOIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlN0cnV0cyBBc3Npc3RhbnQiPgotICAgIDxvcHRpb24gbmFtZT0ic2hvd0lucHV0cyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJyZXNvdXJjZXMiPgotICAgICAgPHZhbHVlPgotICAgICAgICA8b3B0aW9uIG5hbWU9InN0cnV0c1BhdGgiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0ic3RydXRzSGVscCIgLz4KLSAgICAgIDwvdmFsdWU+Ci0gICAgPC9vcHRpb24+Ci0gICAgPG9wdGlvbiBuYW1lPSJzZWxlY3RlZFRhZ2xpYnMiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJzZWxlY3RlZFRhZ2xpYnMiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJteVN0cnV0c1ZhbGlkYXRpb25FbmFibGVkIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Im15VGlsZXNWYWxpZGF0aW9uRW5hYmxlZCIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJteVZhbGlkYXRvclZhbGlkYXRpb25FbmFibGVkIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Im15UmVwb3J0RXJyb3JzQXNXYXJuaW5ncyIgdmFsdWU9InRydWUiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlN2bkJyYW5jaENvbmZpZ3VyYXRpb25NYW5hZ2VyIj4KLSAgICA8b3B0aW9uIG5hbWU9Im15U3VwcG9ydHNVc2VySW5mb0ZpbHRlciIgdmFsdWU9InRydWUiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlN2bkNoYW5nZXNCcm93c2VyU2V0dGluZ3MiPgotICAgIDxvcHRpb24gbmFtZT0iVVNFX0FVVEhPUl9GSUVMRCIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJBVVRIT1IiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJMT0NBVElPTiIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRV9QUk9KRUNUX1NFVFRJTkdTIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRV9BTFRFUk5BVEVfTE9DQVRJT04iIHZhbHVlPSJmYWxzZSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iVkNTLkZpbGVWaWV3Q29uZmlndXJhdGlvbiI+Ci0gICAgPG9wdGlvbiBuYW1lPSJTRUxFQ1RFRF9TVEFUVVNFUyIgdmFsdWU9IkRFRkFVTFQiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJTRUxFQ1RFRF9DT0xVTU5TIiB2YWx1ZT0iREVGQVVMVCIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlNIT1dfRklMVEVSUyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDVVNUT01JWkVfVklFVyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJTSE9XX0ZJTEVfSElTVE9SWV9BU19UUkVFIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iVmNzRGlyZWN0b3J5TWFwcGluZ3MiPgotICAgIDxtYXBwaW5nIGRpcmVjdG9yeT0iIiB2Y3M9IlBlcmZvcmNlIiAvPgotICAgIDxtYXBwaW5nIGRpcmVjdG9yeT0iL1ZvbHVtZXMvQW5kcm9pZC9kb251dC9mcmFtZXdvcmtzL2Jhc2UiIHZjcz0iR2l0IiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJWc3NDb25maWd1cmF0aW9uIj4KLSAgICA8b3B0aW9uIG5hbWU9IkNMSUVOVF9QQVRIIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iU1JDU0FGRUlOSV9QQVRIIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVVNFUl9OQU1FIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iUFdEIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVlNTX0lTX0lOSVRJQUxJWkVEIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPENoZWNrb3V0T3B0aW9ucz4KLSAgICAgIDxvcHRpb24gbmFtZT0iQ09NTUVOVCIgdmFsdWU9IiIgLz4KLSAgICAgIDxvcHRpb24gbmFtZT0iRE9fTk9UX0dFVF9MQVRFU1RfVkVSU0lPTiIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJSRVBMQUNFX1dSSVRBQkxFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9IlJFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDwvQ2hlY2tvdXRPcHRpb25zPgotICAgIDxDaGVja2luT3B0aW9ucz4KLSAgICAgIDxvcHRpb24gbmFtZT0iQ09NTUVOVCIgdmFsdWU9IiIgLz4KLSAgICAgIDxvcHRpb24gbmFtZT0iS0VFUF9DSEVDS0VEX09VVCIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJSRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8L0NoZWNraW5PcHRpb25zPgotICAgIDxBZGRPcHRpb25zPgotICAgICAgPG9wdGlvbiBuYW1lPSJTVE9SRV9PTkxZX0xBVEVTVF9WRVJTSU9OIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9IkNIRUNLX09VVF9JTU1FRElBVEVMWSIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJGSUxFX1RZUEUiIHZhbHVlPSIwIiAvPgotICAgIDwvQWRkT3B0aW9ucz4KLSAgICA8VW5kb2NoZWNrb3V0T3B0aW9ucz4KLSAgICAgIDxvcHRpb24gbmFtZT0iTUFLRV9XUklUQUJMRSIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJSRVBMQUNFX0xPQ0FMX0NPUFkiIHZhbHVlPSIwIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJSRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8L1VuZG9jaGVja291dE9wdGlvbnM+Ci0gICAgPEdldE9wdGlvbnM+Ci0gICAgICA8b3B0aW9uIG5hbWU9IlJFUExBQ0VfV1JJVEFCTEUiIHZhbHVlPSIwIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJNQUtFX1dSSVRBQkxFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9IkFOU1dFUl9ORUdBVElWRUxZIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9IkFOU1dFUl9QT1NJVElWRUxZIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9IlJFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJWRVJTSU9OIiAvPgotICAgIDwvR2V0T3B0aW9ucz4KLSAgICA8VnNzQ29uZmlndXJhYmxlRXhjbHVkZWRGaWxlc1RhZyAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJhbnRXb3Jrc3BhY2VDb25maWd1cmF0aW9uIj4KLSAgICA8b3B0aW9uIG5hbWU9IklTX0FVVE9TQ1JPTExfVE9fU09VUkNFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJGSUxURVJfVEFSR0VUUyIgdmFsdWU9ImZhbHNlIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJjb20uaW50ZWxsaWouaWRlLnV0aWwuc2NvcGVDaG9vc2VyLlNjb3BlQ2hvb3NlckNvbmZpZ3VyYWJsZSIgcHJvcG9ydGlvbnM9IiIgdmVyc2lvbj0iMSI+Ci0gICAgPG9wdGlvbiBuYW1lPSJteUxhc3RFZGl0ZWRDb25maWd1cmFibGUiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9ImNvbS5pbnRlbGxpai5qc2YuVXNlckRlZmluZWRGYWNlc0NvbmZpZ3MiPgotICAgIDxvcHRpb24gbmFtZT0iVVNFUl9ERUZJTkVEX0NPTkZJR1MiPgotICAgICAgPHZhbHVlPgotICAgICAgICA8bGlzdCBzaXplPSIwIiAvPgotICAgICAgPC92YWx1ZT4KLSAgICA8L29wdGlvbj4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMudWkuY29uZmlndXJhdGlvbi5wcm9qZWN0Um9vdC5Qcm9qZWN0Um9vdE1hc3RlckRldGFpbHNDb25maWd1cmFibGUiIHByb3BvcnRpb25zPSIiIHZlcnNpb249IjEiPgotICAgIDxvcHRpb24gbmFtZT0ibXlQbGFpbk1vZGUiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Im15TGFzdEVkaXRlZENvbmZpZ3VyYWJsZSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iY29tLmludGVsbGlqLnByb2ZpbGUudWkuRXJyb3JPcHRpb25zQ29uZmlndXJhYmxlIiBwcm9wb3J0aW9ucz0iIiB2ZXJzaW9uPSIxIj4KLSAgICA8b3B0aW9uIG5hbWU9Im15TGFzdEVkaXRlZENvbmZpZ3VyYWJsZSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0idWlkZXNpZ25lci1jb25maWd1cmF0aW9uIj4KLSAgICA8b3B0aW9uIG5hbWU9IklOU1RSVU1FTlRfQ0xBU1NFUyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDT1BZX0ZPUk1TX1JVTlRJTUVfVE9fT1VUUFVUIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfTEFZT1VUX01BTkFHRVIiIHZhbHVlPSJHcmlkTGF5b3V0TWFuYWdlciIgLz4KLSAgPC9jb21wb25lbnQ+Ci08L3Byb2plY3Q+Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvc29ydHRhYmxlLmpzIGIvdG9vbHMvcHJlbG9hZC9zb3J0dGFibGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YmNjYjIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcHJlbG9hZC9zb3J0dGFibGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBAQAotLyoKLSAgU29ydFRhYmxlCi0gIHZlcnNpb24gMgotICA3dGggQXByaWwgMjAwNwotICBTdHVhcnQgTGFuZ3JpZGdlLCBodHRwOi8vd3d3LmtyeW9nZW5peC5vcmcvY29kZS9icm93c2VyL3NvcnR0YWJsZS8KLSAgCi0gIEluc3RydWN0aW9uczoKLSAgRG93bmxvYWQgdGhpcyBmaWxlCi0gIEFkZCA8c2NyaXB0IHNyYz0ic29ydHRhYmxlLmpzIj48L3NjcmlwdD4gdG8geW91ciBIVE1MCi0gIEFkZCBjbGFzcz0ic29ydGFibGUiIHRvIGFueSB0YWJsZSB5b3UnZCBsaWtlIHRvIG1ha2Ugc29ydGFibGUKLSAgQ2xpY2sgb24gdGhlIGhlYWRlcnMgdG8gc29ydAotICAKLSAgVGhhbmtzIHRvIG1hbnksIG1hbnkgcGVvcGxlIGZvciBjb250cmlidXRpb25zIGFuZCBzdWdnZXN0aW9ucy4KLSAgTGljZW5jZWQgYXMgWDExOiBodHRwOi8vd3d3LmtyeW9nZW5peC5vcmcvY29kZS9icm93c2VyL2xpY2VuY2UuaHRtbAotICBUaGlzIGJhc2ljYWxseSBtZWFuczogZG8gd2hhdCB5b3Ugd2FudCB3aXRoIGl0LgotKi8KLQotIAotdmFyIHN0SXNJRSA9IC8qQGNjX29uIUAqL2ZhbHNlOwotCi1zb3J0dGFibGUgPSB7Ci0gIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgIC8vIHF1aXQgaWYgdGhpcyBmdW5jdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZAotICAgIGlmIChhcmd1bWVudHMuY2FsbGVlLmRvbmUpIHJldHVybjsKLSAgICAvLyBmbGFnIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgZG8gdGhlIHNhbWUgdGhpbmcgdHdpY2UKLSAgICBhcmd1bWVudHMuY2FsbGVlLmRvbmUgPSB0cnVlOwotICAgIC8vIGtpbGwgdGhlIHRpbWVyCi0gICAgaWYgKF90aW1lcikgY2xlYXJJbnRlcnZhbChfdGltZXIpOwotICAgIAotICAgIGlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpIHJldHVybjsKLSAgICAKLSAgICBzb3J0dGFibGUuREFURV9SRSA9IC9eKFxkXGQ/KVtcL1wuLV0oXGRcZD8pW1wvXC4tXSgoXGRcZCk/XGRcZCkkLzsKLSAgICAKLSAgICBmb3JFYWNoKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0YWJsZScpLCBmdW5jdGlvbih0YWJsZSkgewotICAgICAgaWYgKHRhYmxlLmNsYXNzTmFtZS5zZWFyY2goL1xic29ydGFibGVcYi8pICE9IC0xKSB7Ci0gICAgICAgIHNvcnR0YWJsZS5tYWtlU29ydGFibGUodGFibGUpOwotICAgICAgfQotICAgIH0pOwotICAgIAotICB9LAotICAKLSAgbWFrZVNvcnRhYmxlOiBmdW5jdGlvbih0YWJsZSkgewotICAgIGlmICh0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGhlYWQnKS5sZW5ndGggPT0gMCkgewotICAgICAgLy8gdGFibGUgZG9lc24ndCBoYXZlIGEgdEhlYWQuIFNpbmNlIGl0IHNob3VsZCBoYXZlLCBjcmVhdGUgb25lIGFuZAotICAgICAgLy8gcHV0IHRoZSBmaXJzdCB0YWJsZSByb3cgaW4gaXQuCi0gICAgICB0aGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aGVhZCcpOwotICAgICAgdGhlLmFwcGVuZENoaWxkKHRhYmxlLnJvd3NbMF0pOwotICAgICAgdGFibGUuaW5zZXJ0QmVmb3JlKHRoZSx0YWJsZS5maXJzdENoaWxkKTsKLSAgICB9Ci0gICAgLy8gU2FmYXJpIGRvZXNuJ3Qgc3VwcG9ydCB0YWJsZS50SGVhZCwgc2lnaAotICAgIGlmICh0YWJsZS50SGVhZCA9PSBudWxsKSB0YWJsZS50SGVhZCA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0aGVhZCcpWzBdOwotICAgIAotICAgIGlmICh0YWJsZS50SGVhZC5yb3dzLmxlbmd0aCAhPSAxKSByZXR1cm47IC8vIGNhbid0IGNvcGUgd2l0aCB0d28gaGVhZGVyIHJvd3MKLSAgICAKLSAgICAvLyBTb3J0dGFibGUgdjEgcHV0IHJvd3Mgd2l0aCBhIGNsYXNzIG9mICJzb3J0Ym90dG9tIiBhdCB0aGUgYm90dG9tIChhcwotICAgIC8vICJ0b3RhbCIgcm93cywgZm9yIGV4YW1wbGUpLiBUaGlzIGlzIEImUiwgc2luY2Ugd2hhdCB5b3UncmUgc3VwcG9zZWQKLSAgICAvLyB0byBkbyBpcyBwdXQgdGhlbSBpbiBhIHRmb290LiBTbywgaWYgdGhlcmUgYXJlIHNvcnRib3R0b20gcm93cywKLSAgICAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIG1vdmUgdGhlbSB0byB0Zm9vdCAoY3JlYXRpbmcgaXQgaWYgbmVlZGVkKS4KLSAgICBzb3J0Ym90dG9tcm93cyA9IFtdOwotICAgIGZvciAodmFyIGk9MDsgaTx0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAodGFibGUucm93c1tpXS5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnRib3R0b21cYi8pICE9IC0xKSB7Ci0gICAgICAgIHNvcnRib3R0b21yb3dzW3NvcnRib3R0b21yb3dzLmxlbmd0aF0gPSB0YWJsZS5yb3dzW2ldOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoc29ydGJvdHRvbXJvd3MpIHsKLSAgICAgIGlmICh0YWJsZS50Rm9vdCA9PSBudWxsKSB7Ci0gICAgICAgIC8vIHRhYmxlIGRvZXNuJ3QgaGF2ZSBhIHRmb290LiBDcmVhdGUgb25lLgotICAgICAgICB0Zm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0Zm9vdCcpOwotICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0Zm8pOwotICAgICAgfQotICAgICAgZm9yICh2YXIgaT0wOyBpPHNvcnRib3R0b21yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHRmby5hcHBlbmRDaGlsZChzb3J0Ym90dG9tcm93c1tpXSk7Ci0gICAgICB9Ci0gICAgICBkZWxldGUgc29ydGJvdHRvbXJvd3M7Ci0gICAgfQotICAgIAotICAgIC8vIHdvcmsgdGhyb3VnaCBlYWNoIGNvbHVtbiBhbmQgY2FsY3VsYXRlIGl0cyB0eXBlCi0gICAgaGVhZHJvdyA9IHRhYmxlLnRIZWFkLnJvd3NbMF0uY2VsbHM7Ci0gICAgZm9yICh2YXIgaT0wOyBpPGhlYWRyb3cubGVuZ3RoOyBpKyspIHsKLSAgICAgIC8vIG1hbnVhbGx5IG92ZXJyaWRlIHRoZSB0eXBlIHdpdGggYSBzb3J0dGFibGVfdHlwZSBhdHRyaWJ1dGUKLSAgICAgIGlmICghaGVhZHJvd1tpXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlX25vc29ydFxiLykpIHsgLy8gc2tpcCB0aGlzIGNvbAotICAgICAgICBtdGNoID0gaGVhZHJvd1tpXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlXyhbYS16MC05XSspXGIvKTsKLSAgICAgICAgaWYgKG10Y2gpIHsgb3ZlcnJpZGUgPSBtdGNoWzFdOyB9Ci0JICAgICAgaWYgKG10Y2ggJiYgdHlwZW9mIHNvcnR0YWJsZVsic29ydF8iK292ZXJyaWRlXSA9PSAnZnVuY3Rpb24nKSB7Ci0JICAgICAgICBoZWFkcm93W2ldLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24gPSBzb3J0dGFibGVbInNvcnRfIitvdmVycmlkZV07Ci0JICAgICAgfSBlbHNlIHsKLQkgICAgICAgIGhlYWRyb3dbaV0uc29ydHRhYmxlX3NvcnRmdW5jdGlvbiA9IHNvcnR0YWJsZS5ndWVzc1R5cGUodGFibGUsaSk7Ci0JICAgICAgfQotCSAgICAgIC8vIG1ha2UgaXQgY2xpY2thYmxlIHRvIHNvcnQKLQkgICAgICBoZWFkcm93W2ldLnNvcnR0YWJsZV9jb2x1bW5pbmRleCA9IGk7Ci0JICAgICAgaGVhZHJvd1tpXS5zb3J0dGFibGVfdGJvZHkgPSB0YWJsZS50Qm9kaWVzWzBdOwotCSAgICAgIGRlYW5fYWRkRXZlbnQoaGVhZHJvd1tpXSwiY2xpY2siLCBmdW5jdGlvbihlKSB7Ci0KLSAgICAgICAgICBpZiAodGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRcYi8pICE9IC0xKSB7Ci0gICAgICAgICAgICAvLyBpZiB3ZSdyZSBhbHJlYWR5IHNvcnRlZCBieSB0aGlzIGNvbHVtbiwganVzdCAKLSAgICAgICAgICAgIC8vIHJldmVyc2UgdGhlIHRhYmxlLCB3aGljaCBpcyBxdWlja2VyCi0gICAgICAgICAgICBzb3J0dGFibGUucmV2ZXJzZSh0aGlzLnNvcnR0YWJsZV90Ym9keSk7Ci0gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3J0dGFibGVfc29ydGVkX3JldmVyc2UnKTsKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvcnR0YWJsZV9zb3J0ZndkaW5kJykpOwotICAgICAgICAgICAgc29ydHJldmluZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKLSAgICAgICAgICAgIHNvcnRyZXZpbmQuaWQgPSAic29ydHRhYmxlX3NvcnRyZXZpbmQiOwotICAgICAgICAgICAgc29ydHJldmluZC5pbm5lckhUTUwgPSBzdElzSUUgPyAnJm5ic3A8Zm9udCBmYWNlPSJ3ZWJkaW5ncyI+NTwvZm9udD4nIDogJyZuYnNwOyYjeDI1QjQ7JzsKLSAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoc29ydHJldmluZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZS5zZWFyY2goL1xic29ydHRhYmxlX3NvcnRlZF9yZXZlcnNlXGIvKSAhPSAtMSkgewotICAgICAgICAgICAgLy8gaWYgd2UncmUgYWxyZWFkeSBzb3J0ZWQgYnkgdGhpcyBjb2x1bW4gaW4gcmV2ZXJzZSwganVzdCAKLSAgICAgICAgICAgIC8vIHJlLXJldmVyc2UgdGhlIHRhYmxlLCB3aGljaCBpcyBxdWlja2VyCi0gICAgICAgICAgICBzb3J0dGFibGUucmV2ZXJzZSh0aGlzLnNvcnR0YWJsZV90Ym9keSk7Ci0gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvcnR0YWJsZV9zb3J0ZWQnKTsKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvcnR0YWJsZV9zb3J0cmV2aW5kJykpOwotICAgICAgICAgICAgc29ydGZ3ZGluZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKLSAgICAgICAgICAgIHNvcnRmd2RpbmQuaWQgPSAic29ydHRhYmxlX3NvcnRmd2RpbmQiOwotICAgICAgICAgICAgc29ydGZ3ZGluZC5pbm5lckhUTUwgPSBzdElzSUUgPyAnJm5ic3A8Zm9udCBmYWNlPSJ3ZWJkaW5ncyI+NjwvZm9udD4nIDogJyZuYnNwOyYjeDI1QkU7JzsKLSAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoc29ydGZ3ZGluZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIC8vIHJlbW92ZSBzb3J0dGFibGVfc29ydGVkIGNsYXNzZXMKLSAgICAgICAgICB0aGVhZHJvdyA9IHRoaXMucGFyZW50Tm9kZTsKLSAgICAgICAgICBmb3JFYWNoKHRoZWFkcm93LmNoaWxkTm9kZXMsIGZ1bmN0aW9uKGNlbGwpIHsKLSAgICAgICAgICAgIGlmIChjZWxsLm5vZGVUeXBlID09IDEpIHsgLy8gYW4gZWxlbWVudAotICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IGNlbGwuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZScsJycpOwotICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IGNlbGwuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWQnLCcnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9KTsKLSAgICAgICAgICBzb3J0ZndkaW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvcnR0YWJsZV9zb3J0ZndkaW5kJyk7Ci0gICAgICAgICAgaWYgKHNvcnRmd2RpbmQpIHsgc29ydGZ3ZGluZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNvcnRmd2RpbmQpOyB9Ci0gICAgICAgICAgc29ydHJldmluZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3J0dGFibGVfc29ydHJldmluZCcpOwotICAgICAgICAgIGlmIChzb3J0cmV2aW5kKSB7IHNvcnRyZXZpbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzb3J0cmV2aW5kKTsgfQotICAgICAgICAgIAotICAgICAgICAgIHRoaXMuY2xhc3NOYW1lICs9ICcgc29ydHRhYmxlX3NvcnRlZCc7Ci0gICAgICAgICAgc29ydGZ3ZGluZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKLSAgICAgICAgICBzb3J0ZndkaW5kLmlkID0gInNvcnR0YWJsZV9zb3J0ZndkaW5kIjsKLSAgICAgICAgICBzb3J0ZndkaW5kLmlubmVySFRNTCA9IHN0SXNJRSA/ICcmbmJzcDxmb250IGZhY2U9IndlYmRpbmdzIj42PC9mb250PicgOiAnJm5ic3A7JiN4MjVCRTsnOwotICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoc29ydGZ3ZGluZCk7Ci0KLQkgICAgICAgIC8vIGJ1aWxkIGFuIGFycmF5IHRvIHNvcnQuIFRoaXMgaXMgYSBTY2h3YXJ0emlhbiB0cmFuc2Zvcm0gdGhpbmcsCi0JICAgICAgICAvLyBpLmUuLCB3ZSAiZGVjb3JhdGUiIGVhY2ggcm93IHdpdGggdGhlIGFjdHVhbCBzb3J0IGtleSwKLQkgICAgICAgIC8vIHNvcnQgYmFzZWQgb24gdGhlIHNvcnQga2V5cywgYW5kIHRoZW4gcHV0IHRoZSByb3dzIGJhY2sgaW4gb3JkZXIKLQkgICAgICAgIC8vIHdoaWNoIGlzIGEgbG90IGZhc3RlciBiZWNhdXNlIHlvdSBvbmx5IGRvIGdldElubmVyVGV4dCBvbmNlIHBlciByb3cKLQkgICAgICAgIHJvd19hcnJheSA9IFtdOwotCSAgICAgICAgY29sID0gdGhpcy5zb3J0dGFibGVfY29sdW1uaW5kZXg7Ci0JICAgICAgICByb3dzID0gdGhpcy5zb3J0dGFibGVfdGJvZHkucm93czsKLQkgICAgICAgIGZvciAodmFyIGo9MDsgajxyb3dzLmxlbmd0aDsgaisrKSB7Ci0JICAgICAgICAgIHJvd19hcnJheVtyb3dfYXJyYXkubGVuZ3RoXSA9IFtzb3J0dGFibGUuZ2V0SW5uZXJUZXh0KHJvd3Nbal0uY2VsbHNbY29sXSksIHJvd3Nbal1dOwotCSAgICAgICAgfQotCSAgICAgICAgLyogSWYgeW91IHdhbnQgYSBzdGFibGUgc29ydCwgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSAqLwotCSAgICAgICAgLy9zb3J0dGFibGUuc2hha2VyX3NvcnQocm93X2FycmF5LCB0aGlzLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24pOwotCSAgICAgICAgLyogYW5kIGNvbW1lbnQgb3V0IHRoaXMgb25lICovCi0JICAgICAgICByb3dfYXJyYXkuc29ydCh0aGlzLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24pOwotCSAgICAgICAgCi0JICAgICAgICB0YiA9IHRoaXMuc29ydHRhYmxlX3Rib2R5OwotCSAgICAgICAgZm9yICh2YXIgaj0wOyBqPHJvd19hcnJheS5sZW5ndGg7IGorKykgewotCSAgICAgICAgICB0Yi5hcHBlbmRDaGlsZChyb3dfYXJyYXlbal1bMV0pOwotCSAgICAgICAgfQotCSAgICAgICAgCi0JICAgICAgICBkZWxldGUgcm93X2FycmF5OwotCSAgICAgIH0pOwotCSAgICB9Ci0gICAgfQotICB9LAotICAKLSAgZ3Vlc3NUeXBlOiBmdW5jdGlvbih0YWJsZSwgY29sdW1uKSB7Ci0gICAgLy8gZ3Vlc3MgdGhlIHR5cGUgb2YgYSBjb2x1bW4gYmFzZWQgb24gaXRzIGZpcnN0IG5vbi1ibGFuayByb3cKLSAgICBzb3J0Zm4gPSBzb3J0dGFibGUuc29ydF9hbHBoYTsKLSAgICBmb3IgKHZhciBpPTA7IGk8dGFibGUudEJvZGllc1swXS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB0ZXh0ID0gc29ydHRhYmxlLmdldElubmVyVGV4dCh0YWJsZS50Qm9kaWVzWzBdLnJvd3NbaV0uY2VsbHNbY29sdW1uXSk7Ci0gICAgICBpZiAodGV4dCAhPSAnJykgewotICAgICAgICBpZiAodGV4dC5tYXRjaCgvXi0/W6MkpF0/W1xkLC5dKyU/JC8pKSB7Ci0gICAgICAgICAgcmV0dXJuIHNvcnR0YWJsZS5zb3J0X251bWVyaWM7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gY2hlY2sgZm9yIGEgZGF0ZTogZGQvbW0veXl5eSBvciBkZC9tbS95eSAKLSAgICAgICAgLy8gY2FuIGhhdmUgLyBvciAuIG9yIC0gYXMgc2VwYXJhdG9yCi0gICAgICAgIC8vIGNhbiBiZSBtbS9kZCBhcyB3ZWxsCi0gICAgICAgIHBvc3NkYXRlID0gdGV4dC5tYXRjaChzb3J0dGFibGUuREFURV9SRSkKLSAgICAgICAgaWYgKHBvc3NkYXRlKSB7Ci0gICAgICAgICAgLy8gbG9va3MgbGlrZSBhIGRhdGUKLSAgICAgICAgICBmaXJzdCA9IHBhcnNlSW50KHBvc3NkYXRlWzFdKTsKLSAgICAgICAgICBzZWNvbmQgPSBwYXJzZUludChwb3NzZGF0ZVsyXSk7Ci0gICAgICAgICAgaWYgKGZpcnN0ID4gMTIpIHsKLSAgICAgICAgICAgIC8vIGRlZmluaXRlbHkgZGQvbW0KLSAgICAgICAgICAgIHJldHVybiBzb3J0dGFibGUuc29ydF9kZG1tOwotICAgICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kID4gMTIpIHsKLSAgICAgICAgICAgIHJldHVybiBzb3J0dGFibGUuc29ydF9tbWRkOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBsb29rcyBsaWtlIGEgZGF0ZSwgYnV0IHdlIGNhbid0IHRlbGwgd2hpY2gsIHNvIGFzc3VtZQotICAgICAgICAgICAgLy8gdGhhdCBpdCdzIGRkL21tIChFbmdsaXNoIGltcGVyaWFsaXNtISkgYW5kIGtlZXAgbG9va2luZwotICAgICAgICAgICAgc29ydGZuID0gc29ydHRhYmxlLnNvcnRfZGRtbTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNvcnRmbjsKLSAgfSwKLSAgCi0gIGdldElubmVyVGV4dDogZnVuY3Rpb24obm9kZSkgewotICAgIC8vIGdldHMgdGhlIHRleHQgd2Ugd2FudCB0byB1c2UgZm9yIHNvcnRpbmcgZm9yIGEgY2VsbC4KLSAgICAvLyBzdHJpcHMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAgICAvLyB0aGlzIGlzICpub3QqIGEgZ2VuZXJpYyBnZXRJbm5lclRleHQgZnVuY3Rpb247IGl0J3Mgc3BlY2lhbCB0byBzb3J0dGFibGUuCi0gICAgLy8gZm9yIGV4YW1wbGUsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGNlbGwgdGV4dCB3aXRoIGEgY3VzdG9ta2V5IGF0dHJpYnV0ZS4KLSAgICAvLyBpdCBhbHNvIGdldHMgLnZhbHVlIGZvciA8aW5wdXQ+IGZpZWxkcy4KLSAgICAKLSAgICBoYXNJbnB1dHMgPSAodHlwZW9mIG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPT0gJ2Z1bmN0aW9uJykgJiYKLSAgICAgICAgICAgICAgICAgbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKS5sZW5ndGg7Ci0gICAgCi0gICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKCJzb3J0dGFibGVfY3VzdG9ta2V5IikgIT0gbnVsbCkgewotICAgICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKCJzb3J0dGFibGVfY3VzdG9ta2V5Iik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGVvZiBub2RlLnRleHRDb250ZW50ICE9ICd1bmRlZmluZWQnICYmICFoYXNJbnB1dHMpIHsKLSAgICAgIHJldHVybiBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGVvZiBub2RlLmlubmVyVGV4dCAhPSAndW5kZWZpbmVkJyAmJiAhaGFzSW5wdXRzKSB7Ci0gICAgICByZXR1cm4gbm9kZS5pbm5lclRleHQucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZW9mIG5vZGUudGV4dCAhPSAndW5kZWZpbmVkJyAmJiAhaGFzSW5wdXRzKSB7Ci0gICAgICByZXR1cm4gbm9kZS50ZXh0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICdpbnB1dCcpIHsKLSAgICAgICAgICAgIHJldHVybiBub2RlLnZhbHVlLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgcmV0dXJuIG5vZGUubm9kZVZhbHVlLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgY2FzZSAxMToKLSAgICAgICAgICB2YXIgaW5uZXJUZXh0ID0gJyc7Ci0gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlubmVyVGV4dCArPSBzb3J0dGFibGUuZ2V0SW5uZXJUZXh0KG5vZGUuY2hpbGROb2Rlc1tpXSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBpbm5lclRleHQucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gJyc7Ci0gICAgICB9Ci0gICAgfQotICB9LAotICAKLSAgcmV2ZXJzZTogZnVuY3Rpb24odGJvZHkpIHsKLSAgICAvLyByZXZlcnNlIHRoZSByb3dzIGluIGEgdGJvZHkKLSAgICBuZXdyb3dzID0gW107Ci0gICAgZm9yICh2YXIgaT0wOyBpPHRib2R5LnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIG5ld3Jvd3NbbmV3cm93cy5sZW5ndGhdID0gdGJvZHkucm93c1tpXTsKLSAgICB9Ci0gICAgZm9yICh2YXIgaT1uZXdyb3dzLmxlbmd0aC0xOyBpPj0wOyBpLS0pIHsKLSAgICAgICB0Ym9keS5hcHBlbmRDaGlsZChuZXdyb3dzW2ldKTsKLSAgICB9Ci0gICAgZGVsZXRlIG5ld3Jvd3M7Ci0gIH0sCi0gIAotICAvKiBzb3J0IGZ1bmN0aW9ucwotICAgICBlYWNoIHNvcnQgZnVuY3Rpb24gdGFrZXMgdHdvIHBhcmFtZXRlcnMsIGEgYW5kIGIKLSAgICAgeW91IGFyZSBjb21wYXJpbmcgYVswXSBhbmQgYlswXSAqLwotICBzb3J0X251bWVyaWM6IGZ1bmN0aW9uKGEsYikgewotICAgIGFhID0gcGFyc2VGbG9hdChhWzBdLnJlcGxhY2UoL1teMC05Li1dL2csJycpKTsKLSAgICBpZiAoaXNOYU4oYWEpKSBhYSA9IDA7Ci0gICAgYmIgPSBwYXJzZUZsb2F0KGJbMF0ucmVwbGFjZSgvW14wLTkuLV0vZywnJykpOyAKLSAgICBpZiAoaXNOYU4oYmIpKSBiYiA9IDA7Ci0gICAgcmV0dXJuIGFhLWJiOwotICB9LAotICBzb3J0X2FscGhhOiBmdW5jdGlvbihhLGIpIHsKLSAgICBpZiAoYVswXT09YlswXSkgcmV0dXJuIDA7Ci0gICAgaWYgKGFbMF08YlswXSkgcmV0dXJuIC0xOwotICAgIHJldHVybiAxOwotICB9LAotICBzb3J0X2RkbW06IGZ1bmN0aW9uKGEsYikgewotICAgIG10Y2ggPSBhWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKLSAgICB5ID0gbXRjaFszXTsgbSA9IG10Y2hbMl07IGQgPSBtdGNoWzFdOwotICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207Ci0gICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKLSAgICBkdDEgPSB5K20rZDsKLSAgICBtdGNoID0gYlswXS5tYXRjaChzb3J0dGFibGUuREFURV9SRSk7Ci0gICAgeSA9IG10Y2hbM107IG0gPSBtdGNoWzJdOyBkID0gbXRjaFsxXTsKLSAgICBpZiAobS5sZW5ndGggPT0gMSkgbSA9ICcwJyttOwotICAgIGlmIChkLmxlbmd0aCA9PSAxKSBkID0gJzAnK2Q7Ci0gICAgZHQyID0geSttK2Q7Ci0gICAgaWYgKGR0MT09ZHQyKSByZXR1cm4gMDsKLSAgICBpZiAoZHQxPGR0MikgcmV0dXJuIC0xOwotICAgIHJldHVybiAxOwotICB9LAotICBzb3J0X21tZGQ6IGZ1bmN0aW9uKGEsYikgewotICAgIG10Y2ggPSBhWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKLSAgICB5ID0gbXRjaFszXTsgZCA9IG10Y2hbMl07IG0gPSBtdGNoWzFdOwotICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207Ci0gICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKLSAgICBkdDEgPSB5K20rZDsKLSAgICBtdGNoID0gYlswXS5tYXRjaChzb3J0dGFibGUuREFURV9SRSk7Ci0gICAgeSA9IG10Y2hbM107IGQgPSBtdGNoWzJdOyBtID0gbXRjaFsxXTsKLSAgICBpZiAobS5sZW5ndGggPT0gMSkgbSA9ICcwJyttOwotICAgIGlmIChkLmxlbmd0aCA9PSAxKSBkID0gJzAnK2Q7Ci0gICAgZHQyID0geSttK2Q7Ci0gICAgaWYgKGR0MT09ZHQyKSByZXR1cm4gMDsKLSAgICBpZiAoZHQxPGR0MikgcmV0dXJuIC0xOwotICAgIHJldHVybiAxOwotICB9LAotICAKLSAgc2hha2VyX3NvcnQ6IGZ1bmN0aW9uKGxpc3QsIGNvbXBfZnVuYykgewotICAgIC8vIEEgc3RhYmxlIHNvcnQgZnVuY3Rpb24gdG8gYWxsb3cgbXVsdGktbGV2ZWwgc29ydGluZyBvZiBkYXRhCi0gICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvY2t0YWlsX3NvcnQKLSAgICAvLyB0aGFua3MgdG8gSm9zZXBoIE5haG1pYXMKLSAgICB2YXIgYiA9IDA7Ci0gICAgdmFyIHQgPSBsaXN0Lmxlbmd0aCAtIDE7Ci0gICAgdmFyIHN3YXAgPSB0cnVlOwotCi0gICAgd2hpbGUoc3dhcCkgewotICAgICAgICBzd2FwID0gZmFsc2U7Ci0gICAgICAgIGZvcih2YXIgaSA9IGI7IGkgPCB0OyArK2kpIHsKLSAgICAgICAgICAgIGlmICggY29tcF9mdW5jKGxpc3RbaV0sIGxpc3RbaSsxXSkgPiAwICkgewotICAgICAgICAgICAgICAgIHZhciBxID0gbGlzdFtpXTsgbGlzdFtpXSA9IGxpc3RbaSsxXTsgbGlzdFtpKzFdID0gcTsKLSAgICAgICAgICAgICAgICBzd2FwID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAvLyBmb3IKLSAgICAgICAgdC0tOwotCi0gICAgICAgIGlmICghc3dhcCkgYnJlYWs7Ci0KLSAgICAgICAgZm9yKHZhciBpID0gdDsgaSA+IGI7IC0taSkgewotICAgICAgICAgICAgaWYgKCBjb21wX2Z1bmMobGlzdFtpXSwgbGlzdFtpLTFdKSA8IDAgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHEgPSBsaXN0W2ldOyBsaXN0W2ldID0gbGlzdFtpLTFdOyBsaXN0W2ktMV0gPSBxOwotICAgICAgICAgICAgICAgIHN3YXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IC8vIGZvcgotICAgICAgICBiKys7Ci0KLSAgICB9IC8vIHdoaWxlKHN3YXApCi0gIH0gIAotfQotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgIFN1cHBvcnRpbmcgZnVuY3Rpb25zOiBidW5kbGVkIGhlcmUgdG8gYXZvaWQgZGVwZW5kaW5nIG9uIGEgbGlicmFyeQotICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8vIERlYW4gRWR3YXJkcy9NYXR0aGlhcyBNaWxsZXIvSm9obiBSZXNpZwotCi0vKiBmb3IgTW96aWxsYS9PcGVyYTkgKi8KLWlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7Ci0gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIHNvcnR0YWJsZS5pbml0LCBmYWxzZSk7Ci19Ci0KLS8qIGZvciBJbnRlcm5ldCBFeHBsb3JlciAqLwotLypAY2Nfb24gQCovCi0vKkBpZiAoQF93aW4zMikKLSAgICBkb2N1bWVudC53cml0ZSgiPHNjcmlwdCBpZD1fX2llX29ubG9hZCBkZWZlciBzcmM9amF2YXNjcmlwdDp2b2lkKDApPjxcL3NjcmlwdD4iKTsKLSAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9faWVfb25sb2FkIik7Ci0gICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09ICJjb21wbGV0ZSIpIHsKLSAgICAgICAgICAgIHNvcnR0YWJsZS5pbml0KCk7IC8vIGNhbGwgdGhlIG9ubG9hZCBoYW5kbGVyCi0gICAgICAgIH0KLSAgICB9OwotLypAZW5kIEAqLwotCi0vKiBmb3IgU2FmYXJpICovCi1pZiAoL1dlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHsgLy8gc25pZmYKLSAgICB2YXIgX3RpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICgvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGRvY3VtZW50LnJlYWR5U3RhdGUpKSB7Ci0gICAgICAgICAgICBzb3J0dGFibGUuaW5pdCgpOyAvLyBjYWxsIHRoZSBvbmxvYWQgaGFuZGxlcgotICAgICAgICB9Ci0gICAgfSwgMTApOwotfQotCi0vKiBmb3Igb3RoZXIgYnJvd3NlcnMgKi8KLXdpbmRvdy5vbmxvYWQgPSBzb3J0dGFibGUuaW5pdDsKLQotLy8gd3JpdHRlbiBieSBEZWFuIEVkd2FyZHMsIDIwMDUKLS8vIHdpdGggaW5wdXQgZnJvbSBUaW5vIFppamRlbCwgTWF0dGhpYXMgTWlsbGVyLCBEaWVnbyBQZXJpbmkKLQotLy8gaHR0cDovL2RlYW4uZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA1LzEwL2FkZC1ldmVudC8KLQotZnVuY3Rpb24gZGVhbl9hZGRFdmVudChlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7Ci0JaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewotCQllbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpOwotCX0gZWxzZSB7Ci0JCS8vIGFzc2lnbiBlYWNoIGV2ZW50IGhhbmRsZXIgYSB1bmlxdWUgSUQKLQkJaWYgKCFoYW5kbGVyLiQkZ3VpZCkgaGFuZGxlci4kJGd1aWQgPSBkZWFuX2FkZEV2ZW50Lmd1aWQrKzsKLQkJLy8gY3JlYXRlIGEgaGFzaCB0YWJsZSBvZiBldmVudCB0eXBlcyBmb3IgdGhlIGVsZW1lbnQKLQkJaWYgKCFlbGVtZW50LmV2ZW50cykgZWxlbWVudC5ldmVudHMgPSB7fTsKLQkJLy8gY3JlYXRlIGEgaGFzaCB0YWJsZSBvZiBldmVudCBoYW5kbGVycyBmb3IgZWFjaCBlbGVtZW50L2V2ZW50IHBhaXIKLQkJdmFyIGhhbmRsZXJzID0gZWxlbWVudC5ldmVudHNbdHlwZV07Ci0JCWlmICghaGFuZGxlcnMpIHsKLQkJCWhhbmRsZXJzID0gZWxlbWVudC5ldmVudHNbdHlwZV0gPSB7fTsKLQkJCS8vIHN0b3JlIHRoZSBleGlzdGluZyBldmVudCBoYW5kbGVyIChpZiB0aGVyZSBpcyBvbmUpCi0JCQlpZiAoZWxlbWVudFsib24iICsgdHlwZV0pIHsKLQkJCQloYW5kbGVyc1swXSA9IGVsZW1lbnRbIm9uIiArIHR5cGVdOwotCQkJfQotCQl9Ci0JCS8vIHN0b3JlIHRoZSBldmVudCBoYW5kbGVyIGluIHRoZSBoYXNoIHRhYmxlCi0JCWhhbmRsZXJzW2hhbmRsZXIuJCRndWlkXSA9IGhhbmRsZXI7Ci0JCS8vIGFzc2lnbiBhIGdsb2JhbCBldmVudCBoYW5kbGVyIHRvIGRvIGFsbCB0aGUgd29yawotCQllbGVtZW50WyJvbiIgKyB0eXBlXSA9IGhhbmRsZUV2ZW50OwotCX0KLX07Ci0vLyBhIGNvdW50ZXIgdXNlZCB0byBjcmVhdGUgdW5pcXVlIElEcwotZGVhbl9hZGRFdmVudC5ndWlkID0gMTsKLQotZnVuY3Rpb24gcmVtb3ZlRXZlbnQoZWxlbWVudCwgdHlwZSwgaGFuZGxlcikgewotCWlmIChlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHsKLQkJZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTsKLQl9IGVsc2UgewotCQkvLyBkZWxldGUgdGhlIGV2ZW50IGhhbmRsZXIgZnJvbSB0aGUgaGFzaCB0YWJsZQotCQlpZiAoZWxlbWVudC5ldmVudHMgJiYgZWxlbWVudC5ldmVudHNbdHlwZV0pIHsKLQkJCWRlbGV0ZSBlbGVtZW50LmV2ZW50c1t0eXBlXVtoYW5kbGVyLiQkZ3VpZF07Ci0JCX0KLQl9Ci19OwotCi1mdW5jdGlvbiBoYW5kbGVFdmVudChldmVudCkgewotCXZhciByZXR1cm5WYWx1ZSA9IHRydWU7Ci0JLy8gZ3JhYiB0aGUgZXZlbnQgb2JqZWN0IChJRSB1c2VzIGEgZ2xvYmFsIGV2ZW50IG9iamVjdCkKLQlldmVudCA9IGV2ZW50IHx8IGZpeEV2ZW50KCgodGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcykucGFyZW50V2luZG93IHx8IHdpbmRvdykuZXZlbnQpOwotCS8vIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgaGFzaCB0YWJsZSBvZiBldmVudCBoYW5kbGVycwotCXZhciBoYW5kbGVycyA9IHRoaXMuZXZlbnRzW2V2ZW50LnR5cGVdOwotCS8vIGV4ZWN1dGUgZWFjaCBldmVudCBoYW5kbGVyCi0JZm9yICh2YXIgaSBpbiBoYW5kbGVycykgewotCQl0aGlzLiQkaGFuZGxlRXZlbnQgPSBoYW5kbGVyc1tpXTsKLQkJaWYgKHRoaXMuJCRoYW5kbGVFdmVudChldmVudCkgPT09IGZhbHNlKSB7Ci0JCQlyZXR1cm5WYWx1ZSA9IGZhbHNlOwotCQl9Ci0JfQotCXJldHVybiByZXR1cm5WYWx1ZTsKLX07Ci0KLWZ1bmN0aW9uIGZpeEV2ZW50KGV2ZW50KSB7Ci0JLy8gYWRkIFczQyBzdGFuZGFyZCBldmVudCBtZXRob2RzCi0JZXZlbnQucHJldmVudERlZmF1bHQgPSBmaXhFdmVudC5wcmV2ZW50RGVmYXVsdDsKLQlldmVudC5zdG9wUHJvcGFnYXRpb24gPSBmaXhFdmVudC5zdG9wUHJvcGFnYXRpb247Ci0JcmV0dXJuIGV2ZW50OwotfTsKLWZpeEV2ZW50LnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7Ci0JdGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOwotfTsKLWZpeEV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgewotICB0aGlzLmNhbmNlbEJ1YmJsZSA9IHRydWU7Ci19Ci0KLS8vIERlYW4ncyBmb3JFYWNoOiBodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvYmFzZS9mb3JFYWNoLmpzCi0vKgotCWZvckVhY2gsIHZlcnNpb24gMS4wCi0JQ29weXJpZ2h0IDIwMDYsIERlYW4gRWR3YXJkcwotCUxpY2Vuc2U6IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCi0qLwotCi0vLyBhcnJheS1saWtlIGVudW1lcmF0aW9uCi1pZiAoIUFycmF5LmZvckVhY2gpIHsgLy8gbW96aWxsYSBhbHJlYWR5IHN1cHBvcnRzIHRoaXMKLQlBcnJheS5mb3JFYWNoID0gZnVuY3Rpb24oYXJyYXksIGJsb2NrLCBjb250ZXh0KSB7Ci0JCWZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKLQkJCWJsb2NrLmNhbGwoY29udGV4dCwgYXJyYXlbaV0sIGksIGFycmF5KTsKLQkJfQotCX07Ci19Ci0KLS8vIGdlbmVyaWMgZW51bWVyYXRpb24KLUZ1bmN0aW9uLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24ob2JqZWN0LCBibG9jaywgY29udGV4dCkgewotCWZvciAodmFyIGtleSBpbiBvYmplY3QpIHsKLQkJaWYgKHR5cGVvZiB0aGlzLnByb3RvdHlwZVtrZXldID09ICJ1bmRlZmluZWQiKSB7Ci0JCQlibG9jay5jYWxsKGNvbnRleHQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7Ci0JCX0KLQl9Ci19OwotCi0vLyBjaGFyYWN0ZXIgZW51bWVyYXRpb24KLVN0cmluZy5mb3JFYWNoID0gZnVuY3Rpb24oc3RyaW5nLCBibG9jaywgY29udGV4dCkgewotCUFycmF5LmZvckVhY2goc3RyaW5nLnNwbGl0KCIiKSwgZnVuY3Rpb24oY2hyLCBpbmRleCkgewotCQlibG9jay5jYWxsKGNvbnRleHQsIGNociwgaW5kZXgsIHN0cmluZyk7Ci0JfSk7Ci19OwotCi0vLyBnbG9iYWxseSByZXNvbHZlIGZvckVhY2ggZW51bWVyYXRpb24KLXZhciBmb3JFYWNoID0gZnVuY3Rpb24ob2JqZWN0LCBibG9jaywgY29udGV4dCkgewotCWlmIChvYmplY3QpIHsKLQkJdmFyIHJlc29sdmUgPSBPYmplY3Q7IC8vIGRlZmF1bHQKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7Ci0JCQkvLyBmdW5jdGlvbnMgaGF2ZSBhICJsZW5ndGgiIHByb3BlcnR5Ci0JCQlyZXNvbHZlID0gRnVuY3Rpb247Ci0JCX0gZWxzZSBpZiAob2JqZWN0LmZvckVhY2ggaW5zdGFuY2VvZiBGdW5jdGlvbikgewotCQkJLy8gdGhlIG9iamVjdCBpbXBsZW1lbnRzIGEgY3VzdG9tIGZvckVhY2ggbWV0aG9kIHNvIHVzZSB0aGF0Ci0JCQlvYmplY3QuZm9yRWFjaChibG9jaywgY29udGV4dCk7Ci0JCQlyZXR1cm47Ci0JCX0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PSAic3RyaW5nIikgewotCQkJLy8gdGhlIG9iamVjdCBpcyBhIHN0cmluZwotCQkJcmVzb2x2ZSA9IFN0cmluZzsKLQkJfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PSAibnVtYmVyIikgewotCQkJLy8gdGhlIG9iamVjdCBpcyBhcnJheS1saWtlCi0JCQlyZXNvbHZlID0gQXJyYXk7Ci0JCX0KLQkJcmVzb2x2ZS5mb3JFYWNoKG9iamVjdCwgYmxvY2ssIGNvbnRleHQpOwotCX0KLX07Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ZhbGlkYXRla2V5bWFwcy9BbmRyb2lkLm1rIGIvdG9vbHMvdmFsaWRhdGVrZXltYXBzL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZjcyMWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdmFsaWRhdGVrZXltYXBzL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgS2V5bWFwIHZhbGlkYXRpb24gdG9vbC4KLSMKLQotIyBUaGlzIHRvb2wgaXMgcHJlYnVpbHQgaWYgd2UncmUgZG9pbmcgYW4gYXBwLW9ubHkgYnVpbGQuCi1pZmVxICgkKFRBUkdFVF9CVUlMRF9BUFBTKSwpCi0KLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX1NSQ19GSUxFUyA6PSBcCi0JTWFpbi5jcHAKLQotTE9DQUxfQ0ZMQUdTIDo9IC1XYWxsIC1XZXJyb3IKLQotTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCi0JbGliaW5wdXQgXAotCWxpYnV0aWxzIFwKLQlsaWJjdXRpbHMgXAotCWxpYmxvZwotCi1pZmVxICgkKEhPU1RfT1MpLGxpbnV4KQotTE9DQUxfTERMSUJTICs9IC1sZGwgLWxwdGhyZWFkCi1lbmRpZgotCi1MT0NBTF9NT0RVTEUgOj0gdmFsaWRhdGVrZXltYXBzCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9FWEVDVVRBQkxFKQotCi1lbmRpZiAjIFRBUkdFVF9CVUlMRF9BUFBTCmRpZmYgLS1naXQgYS90b29scy92YWxpZGF0ZWtleW1hcHMvTWFpbi5jcHAgYi90b29scy92YWxpZGF0ZWtleW1hcHMvTWFpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNDVjNTUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdmFsaWRhdGVrZXltYXBzL01haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8aW5wdXQvS2V5Q2hhcmFjdGVyTWFwLmg+Ci0jaW5jbHVkZSA8aW5wdXQvS2V5TGF5b3V0TWFwLmg+Ci0jaW5jbHVkZSA8aW5wdXQvVmlydHVhbEtleU1hcC5oPgotI2luY2x1ZGUgPHV0aWxzL1Byb3BlcnR5TWFwLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBnUHJvZ05hbWUgPSAidmFsaWRhdGVrZXltYXBzIjsKLQotZW51bSBGaWxlVHlwZSB7Ci0gICAgRklMRVRZUEVfVU5LTk9XTiwKLSAgICBGSUxFVFlQRV9LRVlMQVlPVVQsCi0gICAgRklMRVRZUEVfS0VZQ0hBUkFDVEVSTUFQLAotICAgIEZJTEVUWVBFX1ZJUlRVQUxLRVlERUZJTklUSU9OLAotICAgIEZJTEVUWVBFX0lOUFVUREVWSUNFQ09ORklHVVJBVElPTiwKLX07Ci0KLQotc3RhdGljIHZvaWQgdXNhZ2UoKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJLZXltYXAgVmFsaWRhdGlvbiBUb29sXG5cbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6XG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyBbKi5rbF0gWyoua2NtXSBbKi5pZGNdIFt2aXJ0dWFsa2V5cy4qXSBbLi4uXVxuIgotICAgICAgICAiICAgVmFsaWRhdGVzIHRoZSBzcGVjaWZpZWQga2V5IGxheW91dHMsIGtleSBjaGFyYWN0ZXIgbWFwcywgXG4iCi0gICAgICAgICIgICBpbnB1dCBkZXZpY2UgY29uZmlndXJhdGlvbnMsIG9yIHZpcnR1YWwga2V5IGRlZmluaXRpb25zLlxuXG4iLAotICAgICAgICBnUHJvZ05hbWUpOwotfQotCi1zdGF0aWMgRmlsZVR5cGUgZ2V0RmlsZVR5cGUoY29uc3QgY2hhciogZmlsZW5hbWUpIHsKLSAgICBjb25zdCBjaGFyICpleHRlbnNpb24gPSBzdHJyY2hyKGZpbGVuYW1lLCAnLicpOwotICAgIGlmIChleHRlbnNpb24pIHsKLSAgICAgICAgaWYgKHN0cmNtcChleHRlbnNpb24sICIua2wiKSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gRklMRVRZUEVfS0VZTEFZT1VUOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdHJjbXAoZXh0ZW5zaW9uLCAiLmtjbSIpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBGSUxFVFlQRV9LRVlDSEFSQUNURVJNQVA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmNtcChleHRlbnNpb24sICIuaWRjIikgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIEZJTEVUWVBFX0lOUFVUREVWSUNFQ09ORklHVVJBVElPTjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzdHJzdHIoZmlsZW5hbWUsICJ2aXJ0dWFsa2V5cy4iKSkgewotICAgICAgICByZXR1cm4gRklMRVRZUEVfVklSVFVBTEtFWURFRklOSVRJT047Ci0gICAgfQotCi0gICAgcmV0dXJuIEZJTEVUWVBFX1VOS05PV047Ci19Ci0KLXN0YXRpYyBib29sIHZhbGlkYXRlRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSkgewotICAgIGZwcmludGYoc3Rkb3V0LCAiVmFsaWRhdGluZyBmaWxlICclcycuLi5cbiIsIGZpbGVuYW1lKTsKLQotICAgIEZpbGVUeXBlIGZpbGVUeXBlID0gZ2V0RmlsZVR5cGUoZmlsZW5hbWUpOwotICAgIHN3aXRjaCAoZmlsZVR5cGUpIHsKLSAgICBjYXNlIEZJTEVUWVBFX1VOS05PV046Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3VwcG9ydGVkIGZpbGUgdHlwZXM6ICoua2wsICoua2NtLCB2aXJ0dWFsa2V5cy4qXG5cbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjYXNlIEZJTEVUWVBFX0tFWUxBWU9VVDogewotICAgICAgICBzcDxLZXlMYXlvdXRNYXA+IG1hcDsKLSAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gS2V5TGF5b3V0TWFwOjpsb2FkKFN0cmluZzgoZmlsZW5hbWUpLCAmbWFwKTsKLSAgICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCBwYXJzaW5nIGtleSBsYXlvdXQgZmlsZS5cblxuIiwgc3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZJTEVUWVBFX0tFWUNIQVJBQ1RFUk1BUDogewotICAgICAgICBzcDxLZXlDaGFyYWN0ZXJNYXA+IG1hcDsKLSAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gS2V5Q2hhcmFjdGVyTWFwOjpsb2FkKFN0cmluZzgoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgIEtleUNoYXJhY3Rlck1hcDo6Rk9STUFUX0FOWSwgJm1hcCk7Ci0gICAgICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQgcGFyc2luZyBrZXkgY2hhcmFjdGVyIG1hcCBmaWxlLlxuXG4iLCBzdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgRklMRVRZUEVfSU5QVVRERVZJQ0VDT05GSUdVUkFUSU9OOiB7Ci0gICAgICAgIFByb3BlcnR5TWFwKiBtYXA7Ci0gICAgICAgIHN0YXR1c190IHN0YXR1cyA9IFByb3BlcnR5TWFwOjpsb2FkKFN0cmluZzgoZmlsZW5hbWUpLCAmbWFwKTsKLSAgICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCBwYXJzaW5nIGlucHV0IGRldmljZSBjb25maWd1cmF0aW9uIGZpbGUuXG5cbiIsIHN0YXR1cyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIG1hcDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGSUxFVFlQRV9WSVJUVUFMS0VZREVGSU5JVElPTjogewotICAgICAgICBWaXJ0dWFsS2V5TWFwKiBtYXA7Ci0gICAgICAgIHN0YXR1c190IHN0YXR1cyA9IFZpcnR1YWxLZXlNYXA6OmxvYWQoU3RyaW5nOChmaWxlbmFtZSksICZtYXApOwotICAgICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkIHBhcnNpbmcgdmlydHVhbCBrZXkgZGVmaW5pdGlvbiBmaWxlLlxuXG4iLCBzdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBtYXA7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICBmcHV0cygiTm8gZXJyb3JzLlxuXG4iLCBzdGRvdXQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpIHsKLSAgICBpZiAoYXJnYyA8IDIpIHsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaW50IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZUZpbGUoYXJndltpXSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGZwdXRzKCJGYWlsZWQhXG4iLCBzdGRlcnIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZwdXRzKCJTdWNjZXNzLlxuIiwgc3Rkb3V0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ZlbG9jaXR5cGxvdC92ZWxvY2l0eXBsb3QucHkgYi90b29scy92ZWxvY2l0eXBsb3QvdmVsb2NpdHlwbG90LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0MjFiZWQ0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ZlbG9jaXR5cGxvdC92ZWxvY2l0eXBsb3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMi42Ci0jCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotCi0jCi0jIFBsb3RzIGRlYnVnIGxvZyBvdXRwdXQgZnJvbSBWZWxvY2l0eVRyYWNrZXIuCi0jIEVuYWJsZSBERUJVR19WRUxPQ0lUWSB0byBwcmludCB0aGUgb3V0cHV0LgotIwotIyBUaGlzIGNvZGUgc3VwcG9ydHMgc2lkZS1ieS1zaWRlIGNvbXBhcmlzb24gb2YgdHdvIGFsZ29yaXRobXMuCi0jIFRoZSBvbGQgYWxnb3JpdGhtIHNob3VsZCBiZSBtb2RpZmllZCB0byBlbWl0IGRlYnVnIGxvZyBtZXNzYWdlcyBjb250YWluaW5nCi0jIHRoZSB3b3JkICJPTEQiLgotIwotCi1pbXBvcnQgbnVtcHkgYXMgbnAKLWltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbG90Ci1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHJlCi1pbXBvcnQgZmNudGwKLWltcG9ydCBvcwotaW1wb3J0IGVycm5vCi1pbXBvcnQgYmlzZWN0Ci1mcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhCi0KLSMgUGFyYW1ldGVycy4KLXRpbWVzcGFuID0gMTUgIyBzZWNvbmRzIHRvdGFsIHNwYW4gc2hvd24KLXNjcm9sbGp1bXAgPSA1ICMgc2Vjb25kcyBqdW1wIHdoZW4gc2Nyb2xsaW5nCi10aW1ldGlja3MgPSAxICMgc2Vjb25kcyBiZXR3ZWVuIGVhY2ggdGltZSB0aWNrCi0KLSMgTm9uLWJsb2NraW5nIHN0cmVhbSB3cmFwcGVyLgotY2xhc3MgTm9uQmxvY2tpbmdTdHJlYW06Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgotICAgIGZjbnRsLmZjbnRsKHN0cmVhbSwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKLSAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQotICAgIHNlbGYuYnVmZmVyID0gJycKLSAgICBzZWxmLnBvcyA9IDAKLQotICBkZWYgcmVhZGxpbmUoc2VsZik6Ci0gICAgd2hpbGUgVHJ1ZToKLSAgICAgIGluZGV4ID0gc2VsZi5idWZmZXIuZmluZCgnXG4nLCBzZWxmLnBvcykKLSAgICAgIGlmIGluZGV4ICE9IC0xOgotICAgICAgICByZXN1bHQgPSBzZWxmLmJ1ZmZlcltzZWxmLnBvczppbmRleF0KLSAgICAgICAgc2VsZi5wb3MgPSBpbmRleCArIDEKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyW3NlbGYucG9zOl0KLSAgICAgIHNlbGYucG9zID0gMAotICAgICAgdHJ5OgotICAgICAgICBjaHVuayA9IG9zLnJlYWQoc2VsZi5zdHJlYW0uZmlsZW5vKCksIDQwOTYpCi0gICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUdBSU46Ci0gICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmFpc2UgZQotICAgICAgaWYgbGVuKGNodW5rKSA9PSAwOgotICAgICAgICBpZiBsZW4oc2VsZi5idWZmZXIpID09IDA6Ci0gICAgICAgICAgcmFpc2UoRU9GRXJyb3IpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcmVzdWx0ID0gc2VsZi5idWZmZXIKLSAgICAgICAgICBzZWxmLmJ1ZmZlciA9ICcnCi0gICAgICAgICAgc2VsZi5wb3MgPSAwCi0gICAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgICAgc2VsZi5idWZmZXIgKz0gY2h1bmsKLQotIyBQbG90dGVyCi1jbGFzcyBQbG90dGVyOgotICBkZWYgX19pbml0X18oc2VsZiwgYWRib3V0KToKLSAgICBzZWxmLmFkYm91dCA9IGFkYm91dAotCi0gICAgc2VsZi5maWcgPSBwbG90LmZpZ3VyZSgxKQotICAgIHNlbGYuZmlnLnN1cHRpdGxlKCdWZWxvY2l0eSBUcmFja2VyJywgZm9udHNpemU9MTIpCi0gICAgc2VsZi5maWcuc2V0X2RwaSg5NikKLSAgICBzZWxmLmZpZy5zZXRfc2l6ZV9pbmNoZXMoMTYsIDEyLCBmb3J3YXJkPVRydWUpCi0KLSAgICBzZWxmLnZlbG9jaXR5X3ggPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYudmVsb2NpdHlfeSA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi52ZWxvY2l0eV9tYWduaXR1ZGUgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYudmVsb2NpdHlfYXhlcyA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2F4ZXMoCi0gICAgICAgIDEsICdWZWxvY2l0eScsICdweC9zJywgWy01MDAwLCA1MDAwXSwKLSAgICAgICAgeXRpY2tzPXJhbmdlKC01MDAwLCA1MDAwLCAxMDAwKSkKLSAgICBzZWxmLnZlbG9jaXR5X2xpbmVfeCA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYudmVsb2NpdHlfYXhlcywgJ3Z4JywgJ3JlZCcpCi0gICAgc2VsZi52ZWxvY2l0eV9saW5lX3kgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLnZlbG9jaXR5X2F4ZXMsICd2eScsICdncmVlbicpCi0gICAgc2VsZi52ZWxvY2l0eV9saW5lX21hZ25pdHVkZSA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYudmVsb2NpdHlfYXhlcywgJ21hZ25pdHVkZScsICdibHVlJykKLSAgICBzZWxmLl9hZGRfdGltZXNlcmllc19sZWdlbmQoc2VsZi52ZWxvY2l0eV9heGVzKQotCi0gICAgc2hhcmVkX2F4aXMgPSBzZWxmLnZlbG9jaXR5X2F4ZXMKLQotICAgIHNlbGYub2xkX3ZlbG9jaXR5X3ggPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYub2xkX3ZlbG9jaXR5X3kgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYub2xkX3ZlbG9jaXR5X21hZ25pdHVkZSA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5vbGRfdmVsb2NpdHlfYXhlcyA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2F4ZXMoCi0gICAgICAgIDIsICdPbGQgQWxnb3JpdGhtIFZlbG9jaXR5JywgJ3B4L3MnLCBbLTUwMDAsIDUwMDBdLAotICAgICAgICBzaGFyZXg9c2hhcmVkX2F4aXMsCi0gICAgICAgIHl0aWNrcz1yYW5nZSgtNTAwMCwgNTAwMCwgMTAwMCkpCi0gICAgc2VsZi5vbGRfdmVsb2NpdHlfbGluZV94ID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5vbGRfdmVsb2NpdHlfYXhlcywgJ3Z4JywgJ3JlZCcpCi0gICAgc2VsZi5vbGRfdmVsb2NpdHlfbGluZV95ID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5vbGRfdmVsb2NpdHlfYXhlcywgJ3Z5JywgJ2dyZWVuJykKLSAgICBzZWxmLm9sZF92ZWxvY2l0eV9saW5lX21hZ25pdHVkZSA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYub2xkX3ZlbG9jaXR5X2F4ZXMsICdtYWduaXR1ZGUnLCAnYmx1ZScpCi0gICAgc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGVnZW5kKHNlbGYub2xkX3ZlbG9jaXR5X2F4ZXMpCi0KLSAgICBzZWxmLnRpbWVyID0gc2VsZi5maWcuY2FudmFzLm5ld190aW1lcihpbnRlcnZhbD0xMDApCi0gICAgc2VsZi50aW1lci5hZGRfY2FsbGJhY2sobGFtYmRhOiBzZWxmLnVwZGF0ZSgpKQotICAgIHNlbGYudGltZXIuc3RhcnQoKQotCi0gICAgc2VsZi50aW1lYmFzZSA9IE5vbmUKLSAgICBzZWxmLl9yZXNldF9wYXJzZV9zdGF0ZSgpCi0KLSAgIyBJbml0aWFsaXplIGEgdGltZSBzZXJpZXMuCi0gIGRlZiBfbWFrZV90aW1lc2VyaWVzKHNlbGYpOgotICAgIHJldHVybiBbW10sIFtdXQotCi0gICMgQWRkIGEgc3VicGxvdCB0byB0aGUgZmlndXJlIGZvciBhIHRpbWUgc2VyaWVzLgotICBkZWYgX2FkZF90aW1lc2VyaWVzX2F4ZXMoc2VsZiwgaW5kZXgsIHRpdGxlLCB5bGFiZWwsIHlsaW0sIHl0aWNrcywgc2hhcmV4PU5vbmUpOgotICAgIG51bV9ncmFwaHMgPSAyCi0gICAgaGVpZ2h0ID0gMC45IC8gbnVtX2dyYXBocwotICAgIHRvcCA9IDAuOTUgLSBoZWlnaHQgKiBpbmRleAotICAgIGF4ZXMgPSBzZWxmLmZpZy5hZGRfYXhlcyhbMC4xLCB0b3AsIDAuOCwgaGVpZ2h0XSwKLSAgICAgICAgeHNjYWxlPSdsaW5lYXInLAotICAgICAgICB4bGltPVswLCB0aW1lc3Bhbl0sCi0gICAgICAgIHlsYWJlbD15bGFiZWwsCi0gICAgICAgIHlzY2FsZT0nbGluZWFyJywKLSAgICAgICAgeWxpbT15bGltLAotICAgICAgICBzaGFyZXg9c2hhcmV4KQotICAgIGF4ZXMudGV4dCgwLjAyLCAwLjAyLCB0aXRsZSwgdHJhbnNmb3JtPWF4ZXMudHJhbnNBeGVzLCBmb250c2l6ZT0xMCwgZm9udHdlaWdodD0nYm9sZCcpCi0gICAgYXhlcy5zZXRfeGxhYmVsKCd0aW1lIChzKScsIGZvbnRzaXplPTEwLCBmb250d2VpZ2h0PSdib2xkJykKLSAgICBheGVzLnNldF95bGFiZWwoeWxhYmVsLCBmb250c2l6ZT0xMCwgZm9udHdlaWdodD0nYm9sZCcpCi0gICAgYXhlcy5zZXRfeHRpY2tzKHJhbmdlKDAsIHRpbWVzcGFuICsgMSwgdGltZXRpY2tzKSkKLSAgICBheGVzLnNldF95dGlja3MoeXRpY2tzKQotICAgIGF4ZXMuZ3JpZChUcnVlKQotCi0gICAgZm9yIGxhYmVsIGluIGF4ZXMuZ2V0X3h0aWNrbGFiZWxzKCk6Ci0gICAgICBsYWJlbC5zZXRfZm9udHNpemUoOSkKLSAgICBmb3IgbGFiZWwgaW4gYXhlcy5nZXRfeXRpY2tsYWJlbHMoKToKLSAgICAgIGxhYmVsLnNldF9mb250c2l6ZSg5KQotCi0gICAgcmV0dXJuIGF4ZXMKLQotICAjIEFkZCBhIGxpbmUgdG8gdGhlIGF4ZXMgZm9yIGEgdGltZSBzZXJpZXMuCi0gIGRlZiBfYWRkX3RpbWVzZXJpZXNfbGluZShzZWxmLCBheGVzLCBsYWJlbCwgY29sb3IsIGxpbmV3aWR0aD0xKToKLSAgICByZXR1cm4gYXhlcy5wbG90KFtdLCBsYWJlbD1sYWJlbCwgY29sb3I9Y29sb3IsIGxpbmV3aWR0aD1saW5ld2lkdGgpWzBdCi0KLSAgIyBBZGQgYSBsZWdlbmQgdG8gYSB0aW1lIHNlcmllcy4KLSAgZGVmIF9hZGRfdGltZXNlcmllc19sZWdlbmQoc2VsZiwgYXhlcyk6Ci0gICAgYXhlcy5sZWdlbmQoCi0gICAgICAgIGxvYz0ndXBwZXIgbGVmdCcsCi0gICAgICAgIGJib3hfdG9fYW5jaG9yPSgxLjAxLCAxKSwKLSAgICAgICAgYm9yZGVycGFkPTAuMSwKLSAgICAgICAgYm9yZGVyYXhlc3BhZD0wLjEsCi0gICAgICAgIHByb3A9eydzaXplJzogMTB9KQotCi0gICMgUmVzZXRzIHRoZSBwYXJzZSBzdGF0ZS4KLSAgZGVmIF9yZXNldF9wYXJzZV9zdGF0ZShzZWxmKToKLSAgICBzZWxmLnBhcnNlX3ZlbG9jaXR5X3ggPSBOb25lCi0gICAgc2VsZi5wYXJzZV92ZWxvY2l0eV95ID0gTm9uZQotICAgIHNlbGYucGFyc2VfdmVsb2NpdHlfbWFnbml0dWRlID0gTm9uZQotICAgIHNlbGYucGFyc2Vfb2xkX3ZlbG9jaXR5X3ggPSBOb25lCi0gICAgc2VsZi5wYXJzZV9vbGRfdmVsb2NpdHlfeSA9IE5vbmUKLSAgICBzZWxmLnBhcnNlX29sZF92ZWxvY2l0eV9tYWduaXR1ZGUgPSBOb25lCi0KLSAgIyBVcGRhdGUgc2FtcGxlcy4KLSAgZGVmIHVwZGF0ZShzZWxmKToKLSAgICB0aW1laW5kZXggPSAwCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgIHRyeToKLSAgICAgICAgbGluZSA9IHNlbGYuYWRib3V0LnJlYWRsaW5lKCkKLSAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKLSAgICAgICAgcGxvdC5jbG9zZSgpCi0gICAgICAgIHJldHVybgotICAgICAgaWYgbGluZSBpcyBOb25lOgotICAgICAgICBicmVhawotICAgICAgcHJpbnQgbGluZQotCi0gICAgICB0cnk6Ci0gICAgICAgIHRpbWVzdGFtcCA9IHNlbGYuX3BhcnNlX3RpbWVzdGFtcChsaW5lKQotICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICBpZiBzZWxmLnRpbWViYXNlIGlzIE5vbmU6Ci0gICAgICAgIHNlbGYudGltZWJhc2UgPSB0aW1lc3RhbXAKLSAgICAgIGRlbHRhID0gdGltZXN0YW1wIC0gc2VsZi50aW1lYmFzZQotICAgICAgdGltZWluZGV4ID0gZGVsdGEuc2Vjb25kcyArIGRlbHRhLm1pY3Jvc2Vjb25kcyAqIDAuMDAwMDAxCi0KLSAgICAgIGlmIGxpbmUuZmluZCgnOiBwb3NpdGlvbicpICE9IC0xOgotICAgICAgICBzZWxmLnBhcnNlX3ZlbG9jaXR5X3ggPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAndng9JykKLSAgICAgICAgc2VsZi5wYXJzZV92ZWxvY2l0eV95ID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3Z5PScpCi0gICAgICAgIHNlbGYucGFyc2VfdmVsb2NpdHlfbWFnbml0dWRlID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3NwZWVkPScpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnZlbG9jaXR5X3gsIHRpbWVpbmRleCwgc2VsZi5wYXJzZV92ZWxvY2l0eV94KQotICAgICAgICBzZWxmLl9hcHBlbmQoc2VsZi52ZWxvY2l0eV95LCB0aW1laW5kZXgsIHNlbGYucGFyc2VfdmVsb2NpdHlfeSkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYudmVsb2NpdHlfbWFnbml0dWRlLCB0aW1laW5kZXgsIHNlbGYucGFyc2VfdmVsb2NpdHlfbWFnbml0dWRlKQotCi0gICAgICBpZiBsaW5lLmZpbmQoJzogT0xEJykgIT0gLTE6Ci0gICAgICAgIHNlbGYucGFyc2Vfb2xkX3ZlbG9jaXR5X3ggPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAndng9JykKLSAgICAgICAgc2VsZi5wYXJzZV9vbGRfdmVsb2NpdHlfeSA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICd2eT0nKQotICAgICAgICBzZWxmLnBhcnNlX29sZF92ZWxvY2l0eV9tYWduaXR1ZGUgPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAnc3BlZWQ9JykKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYub2xkX3ZlbG9jaXR5X3gsIHRpbWVpbmRleCwgc2VsZi5wYXJzZV9vbGRfdmVsb2NpdHlfeCkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYub2xkX3ZlbG9jaXR5X3ksIHRpbWVpbmRleCwgc2VsZi5wYXJzZV9vbGRfdmVsb2NpdHlfeSkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYub2xkX3ZlbG9jaXR5X21hZ25pdHVkZSwgdGltZWluZGV4LCBzZWxmLnBhcnNlX29sZF92ZWxvY2l0eV9tYWduaXR1ZGUpCi0KLSAgICAjIFNjcm9sbCB0aGUgcGxvdHMuCi0gICAgaWYgdGltZWluZGV4ID4gdGltZXNwYW46Ci0gICAgICBib3R0b20gPSBpbnQodGltZWluZGV4KSAtIHRpbWVzcGFuICsgc2Nyb2xsanVtcAotICAgICAgc2VsZi50aW1lYmFzZSArPSB0aW1lZGVsdGEoc2Vjb25kcz1ib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi52ZWxvY2l0eV94LCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi52ZWxvY2l0eV95LCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi52ZWxvY2l0eV9tYWduaXR1ZGUsIGJvdHRvbSkKLSAgICAgIHNlbGYuX3Njcm9sbChzZWxmLm9sZF92ZWxvY2l0eV94LCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5vbGRfdmVsb2NpdHlfeSwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYub2xkX3ZlbG9jaXR5X21hZ25pdHVkZSwgYm90dG9tKQotCi0gICAgIyBSZWRyYXcgdGhlIHBsb3RzLgotICAgIHNlbGYudmVsb2NpdHlfbGluZV94LnNldF9kYXRhKHNlbGYudmVsb2NpdHlfeCkKLSAgICBzZWxmLnZlbG9jaXR5X2xpbmVfeS5zZXRfZGF0YShzZWxmLnZlbG9jaXR5X3kpCi0gICAgc2VsZi52ZWxvY2l0eV9saW5lX21hZ25pdHVkZS5zZXRfZGF0YShzZWxmLnZlbG9jaXR5X21hZ25pdHVkZSkKLSAgICBzZWxmLm9sZF92ZWxvY2l0eV9saW5lX3guc2V0X2RhdGEoc2VsZi5vbGRfdmVsb2NpdHlfeCkKLSAgICBzZWxmLm9sZF92ZWxvY2l0eV9saW5lX3kuc2V0X2RhdGEoc2VsZi5vbGRfdmVsb2NpdHlfeSkKLSAgICBzZWxmLm9sZF92ZWxvY2l0eV9saW5lX21hZ25pdHVkZS5zZXRfZGF0YShzZWxmLm9sZF92ZWxvY2l0eV9tYWduaXR1ZGUpCi0KLSAgICBzZWxmLmZpZy5jYW52YXMuZHJhd19pZGxlKCkKLQotICAjIFNjcm9sbCBhIHRpbWUgc2VyaWVzLgotICBkZWYgX3Njcm9sbChzZWxmLCB0aW1lc2VyaWVzLCBib3R0b20pOgotICAgIGJvdHRvbV9pbmRleCA9IGJpc2VjdC5iaXNlY3RfbGVmdCh0aW1lc2VyaWVzWzBdLCBib3R0b20pCi0gICAgZGVsIHRpbWVzZXJpZXNbMF1bOmJvdHRvbV9pbmRleF0KLSAgICBkZWwgdGltZXNlcmllc1sxXVs6Ym90dG9tX2luZGV4XQotICAgIGZvciBpLCB0aW1laW5kZXggaW4gZW51bWVyYXRlKHRpbWVzZXJpZXNbMF0pOgotICAgICAgdGltZXNlcmllc1swXVtpXSA9IHRpbWVpbmRleCAtIGJvdHRvbQotCi0gICMgRXh0cmFjdCBhIHdvcmQgZm9sbG93aW5nIHRoZSBzcGVjaWZpZWQgcHJlZml4LgotICBkZWYgX2dldF9mb2xsb3dpbmdfd29yZChzZWxmLCBsaW5lLCBwcmVmaXgpOgotICAgIHByZWZpeF9pbmRleCA9IGxpbmUuZmluZChwcmVmaXgpCi0gICAgaWYgcHJlZml4X2luZGV4ID09IC0xOgotICAgICAgcmV0dXJuIE5vbmUKLSAgICBzdGFydF9pbmRleCA9IHByZWZpeF9pbmRleCArIGxlbihwcmVmaXgpCi0gICAgZGVsaW1faW5kZXggPSBsaW5lLmZpbmQoJywnLCBzdGFydF9pbmRleCkKLSAgICBpZiBkZWxpbV9pbmRleCA9PSAtMToKLSAgICAgIHJldHVybiBsaW5lW3N0YXJ0X2luZGV4Ol0KLSAgICBlbHNlOgotICAgICAgcmV0dXJuIGxpbmVbc3RhcnRfaW5kZXg6ZGVsaW1faW5kZXhdCi0KLSAgIyBFeHRyYWN0IGEgbnVtYmVyIGZvbGxvd2luZyB0aGUgc3BlY2lmaWVkIHByZWZpeC4KLSAgZGVmIF9nZXRfZm9sbG93aW5nX251bWJlcihzZWxmLCBsaW5lLCBwcmVmaXgpOgotICAgIHdvcmQgPSBzZWxmLl9nZXRfZm9sbG93aW5nX3dvcmQobGluZSwgcHJlZml4KQotICAgIGlmIHdvcmQgaXMgTm9uZToKLSAgICAgIHJldHVybiBOb25lCi0gICAgcmV0dXJuIGZsb2F0KHdvcmQpCi0KLSAgIyBBZGQgYSB2YWx1ZSB0byBhIHRpbWUgc2VyaWVzLgotICBkZWYgX2FwcGVuZChzZWxmLCB0aW1lc2VyaWVzLCB0aW1laW5kZXgsIG51bWJlcik6Ci0gICAgdGltZXNlcmllc1swXS5hcHBlbmQodGltZWluZGV4KQotICAgIHRpbWVzZXJpZXNbMV0uYXBwZW5kKG51bWJlcikKLQotICAjIFBhcnNlIHRoZSBsb2djYXQgdGltZXN0YW1wLgotICAjIFRpbWVzdGFtcCBoYXMgdGhlIGZvcm0gJzAxLTIxIDIwOjQyOjQyLjkzMCcKLSAgZGVmIF9wYXJzZV90aW1lc3RhbXAoc2VsZiwgbGluZSk6Ci0gICAgcmV0dXJuIGRhdGV0aW1lLnN0cnB0aW1lKGxpbmVbMDoxOF0sICclbS0lZCAlSDolTTolUy4lZicpCi0KLSMgTm90aWNlCi1wcmludCAiVmVsb2NpdHkgVHJhY2tlciBwbG90dGluZyB0b29sIgotcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi1wcmludCAiUGxlYXNlIGVuYWJsZSBkZWJ1ZyBsb2dnaW5nIGFuZCByZWNvbXBpbGUgdGhlIGNvZGUuIgotCi0jIFN0YXJ0IGFkYi4KLXByaW50ICJTdGFydGluZyBhZGIgbG9nY2F0LlxuIgotCi1hZGIgPSBzdWJwcm9jZXNzLlBvcGVuKFsnYWRiJywgJ2xvZ2NhdCcsICctcycsICctdicsICd0aW1lJywgJ0lucHV0OionLCAnVmVsb2NpdHlUcmFja2VyOionXSwKLSAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotYWRib3V0ID0gTm9uQmxvY2tpbmdTdHJlYW0oYWRiLnN0ZG91dCkKLQotIyBQcmVwYXJlIHBsb3R0ZXIuCi1wbG90dGVyID0gUGxvdHRlcihhZGJvdXQpCi1wbG90dGVyLnVwZGF0ZSgpCi0KLSMgTWFpbiBsb29wLgotcGxvdC5zaG93KCkKZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL0JhdGNoZWRTY2FuUmVzdWx0LmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9CYXRjaGVkU2NhblJlc3VsdC5qYXZhCmluZGV4IGViNGUwMjc2Li43NTk4YjkyIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9CYXRjaGVkU2NhblJlc3VsdC5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL0JhdGNoZWRTY2FuUmVzdWx0LmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvSVdpZmlNYW5hZ2VyLmFpZGwgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9JV2lmaU1hbmFnZXIuYWlkbAppbmRleCAxNDliZGE2Li40YTZiMWZmIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9JV2lmaU1hbmFnZXIuYWlkbAorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9JV2lmaU1hbmFnZXIuYWlkbApAQCAtMTExLDggKzExMSw2IEBACiAKICAgICBTdHJpbmcgZ2V0Q29uZmlnRmlsZSgpOwogCi0gICAgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZSgpOwotCiAgICAgdm9pZCBlbmFibGVUZGxzKFN0cmluZyByZW1vdGVJUEFkZHJlc3MsIGJvb2xlYW4gZW5hYmxlKTsKIAogICAgIHZvaWQgZW5hYmxlVGRsc1dpdGhNYWNBZGRyZXNzKFN0cmluZyByZW1vdGVNYWNBZGRyZXNzLCBib29sZWFuIGVuYWJsZSk7CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9OZXR3b3JrVXBkYXRlUmVzdWx0LmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9OZXR3b3JrVXBkYXRlUmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNGJiZTEuLjAwMDAwMDAKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvTmV0d29ya1VwZGF0ZVJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5uZXQud2lmaTsKLQotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uLklOVkFMSURfTkVUV09SS19JRDsKLQotY2xhc3MgTmV0d29ya1VwZGF0ZVJlc3VsdCB7Ci0gICAgaW50IG5ldElkOwotICAgIGJvb2xlYW4gaXBDaGFuZ2VkOwotICAgIGJvb2xlYW4gcHJveHlDaGFuZ2VkOwotICAgIGJvb2xlYW4gaXNOZXdOZXR3b3JrID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgTmV0d29ya1VwZGF0ZVJlc3VsdChpbnQgaWQpIHsKLSAgICAgICAgbmV0SWQgPSBpZDsKLSAgICAgICAgaXBDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIHByb3h5Q2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyBOZXR3b3JrVXBkYXRlUmVzdWx0KGJvb2xlYW4gaXAsIGJvb2xlYW4gcHJveHkpIHsKLSAgICAgICAgbmV0SWQgPSBJTlZBTElEX05FVFdPUktfSUQ7Ci0gICAgICAgIGlwQ2hhbmdlZCA9IGlwOwotICAgICAgICBwcm94eUNoYW5nZWQgPSBwcm94eTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrSWQoaW50IGlkKSB7Ci0gICAgICAgIG5ldElkID0gaWQ7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXROZXR3b3JrSWQoKSB7Ci0gICAgICAgIHJldHVybiBuZXRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJcENoYW5nZWQoYm9vbGVhbiBpcCkgewotICAgICAgICBpcENoYW5nZWQgPSBpcDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNJcENoYW5nZWQoKSB7Ci0gICAgICAgIHJldHVybiBpcENoYW5nZWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UHJveHlDaGFuZ2VkKGJvb2xlYW4gcHJveHkpIHsKLSAgICAgICAgcHJveHlDaGFuZ2VkID0gcHJveHk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzUHJveHlDaGFuZ2VkKCkgewotICAgICAgICByZXR1cm4gcHJveHlDaGFuZ2VkOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTmV3TmV0d29yaygpIHsKLSAgICAgICAgcmV0dXJuIGlzTmV3TmV0d29yazsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJc05ld05ldHdvcmsoYm9vbGVhbiBpc05ldykgewotICAgICAgICBpc05ld05ldHdvcmsgPSBpc05ldzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9TdGF0ZUNoYW5nZVJlc3VsdC5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvU3RhdGVDaGFuZ2VSZXN1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMzNGI5MS4uMDAwMDAwMAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9TdGF0ZUNoYW5nZVJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSBwYWNrYWdlIGFuZHJvaWQubmV0LndpZmk7Ci0KLS8qKgotICogU3RvcmVzIHN1cHBsaWNhbnQgc3RhdGUgY2hhbmdlIGluZm9ybWF0aW9uIHBhc3NlZCBmcm9tIFdpZmlNb25pdG9yIHRvCi0gKiBhIHN0YXRlIG1hY2hpbmUuIFdpZmlTdGF0ZU1hY2hpbmUsIFN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIgYW5kIFdwc1N0YXRlTWFjaGluZQotICogYXJlIGV4YW1wbGUgc3RhdGUgbWFjaGluZXMgdGhhdCBoYW5kbGUgaXQuCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgU3RhdGVDaGFuZ2VSZXN1bHQgewotICAgIFN0YXRlQ2hhbmdlUmVzdWx0KGludCBuZXR3b3JrSWQsIFdpZmlTc2lkIHdpZmlTc2lkLCBTdHJpbmcgQlNTSUQsCi0gICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgc3RhdGUpIHsKLSAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlOwotICAgICAgICB0aGlzLndpZmlTc2lkPSB3aWZpU3NpZDsKLSAgICAgICAgdGhpcy5CU1NJRCA9IEJTU0lEOwotICAgICAgICB0aGlzLm5ldHdvcmtJZCA9IG5ldHdvcmtJZDsKLSAgICB9Ci0KLSAgICBpbnQgbmV0d29ya0lkOwotICAgIFdpZmlTc2lkIHdpZmlTc2lkOwotICAgIFN0cmluZyBCU1NJRDsKLSAgICBTdXBwbGljYW50U3RhdGUgc3RhdGU7Ci19CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9TdXBwbGljYW50U3RhdGUuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1N1cHBsaWNhbnRTdGF0ZS5qYXZhCmluZGV4IDRhMjAzN2QuLjM2OWQzYTggMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1N1cHBsaWNhbnRTdGF0ZS5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1N1cHBsaWNhbnRTdGF0ZS5qYXZhCkBAIC0xOTQsNyArMTk0LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyBib29sZWFuIGlzQ29ubmVjdGluZyhTdXBwbGljYW50U3RhdGUgc3RhdGUpIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNDb25uZWN0aW5nKFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSkgewogICAgICAgICBzd2l0Y2goc3RhdGUpIHsKICAgICAgICAgICAgIGNhc2UgQVVUSEVOVElDQVRJTkc6CiAgICAgICAgICAgICBjYXNlIEFTU09DSUFUSU5HOgpAQCAtMjE2LDcgKzIxNyw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbGVhbiBpc0RyaXZlckFjdGl2ZShTdXBwbGljYW50U3RhdGUgc3RhdGUpIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEcml2ZXJBY3RpdmUoU3VwcGxpY2FudFN0YXRlIHN0YXRlKSB7CiAgICAgICAgIHN3aXRjaChzdGF0ZSkgewogICAgICAgICAgICAgY2FzZSBESVNDT05ORUNURUQ6CiAgICAgICAgICAgICBjYXNlIERPUk1BTlQ6CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9TdXBwbGljYW50U3RhdGVUcmFja2VyLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9TdXBwbGljYW50U3RhdGVUcmFja2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NmViMTcuLjAwMDAwMDAKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvU3VwcGxpY2FudFN0YXRlVHJhY2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQubmV0LndpZmk7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGVNYWNoaW5lOwotCi1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5TdGF0ZUNoYW5nZVJlc3VsdDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotCi0vKioKLSAqIFRyYWNrcyB0aGUgc3RhdGUgY2hhbmdlcyBpbiBzdXBwbGljYW50IGFuZCBwcm92aWRlcyBmdW5jdGlvbmFsaXR5Ci0gKiB0aGF0IGlzIGJhc2VkIG9uIHRoZXNlIHN0YXRlIGNoYW5nZXM6Ci0gKiAtIGRldGVjdCBhIGZhaWxlZCBXUEEgaGFuZHNoYWtlIHRoYXQgbG9vcHMgaW5kZWZpbml0ZWx5Ci0gKiAtIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgaGFuZGxpbmcKLSAqLwotY2xhc3MgU3VwcGxpY2FudFN0YXRlVHJhY2tlciBleHRlbmRzIFN0YXRlTWFjaGluZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7Ci0KLSAgICBwcml2YXRlIFdpZmlTdGF0ZU1hY2hpbmUgbVdpZmlTdGF0ZU1hY2hpbmU7Ci0gICAgcHJpdmF0ZSBXaWZpQ29uZmlnU3RvcmUgbVdpZmlDb25maWdTdG9yZTsKLSAgICBwcml2YXRlIGludCBtQXV0aGVudGljYXRpb25GYWlsdXJlc0NvdW50ID0gMDsKLSAgICBwcml2YXRlIGludCBtQXNzb2NpYXRpb25SZWplY3RDb3VudCA9IDA7Ci0gICAgLyogSW5kaWNhdGVzIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgaW4gc3VwcGxpY2FudCBicm9hZGNhc3QuCi0gICAgICogVE9ETzogZW5oYW5jZSBhdXRoIGZhaWx1cmUgcmVwb3J0aW5nIHRvIGluY2x1ZGUgbm90aWZpY2F0aW9uCi0gICAgICogZm9yIGFsbCB0eXBlIG9mIGZhaWx1cmVzOiBFQVAsIFdQUyAmIFdQQSBuZXR3b3JrcyAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtQXV0aEZhaWx1cmVJblN1cHBsaWNhbnRCcm9hZGNhc3QgPSBmYWxzZTsKLQotICAgIC8qIE1heGltdW0gcmV0cmllcyBvbiBhIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgbm90aWZpY2F0aW9uICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9SRVRSSUVTX09OX0FVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUgPSAyOwotCi0gICAgLyogTWF4aW11bSByZXRyaWVzIG9uIGFzc29jIHJlamVjdGlvbiBldmVudHMgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1JFVFJJRVNfT05fQVNTT0NJQVRJT05fUkVKRUNUID0gMTY7Ci0KLSAgICAvKiBUcmFja3MgaWYgbmV0d29ya3MgaGF2ZSBiZWVuIGRpc2FibGVkIGR1cmluZyBhIGNvbm5lY3Rpb24gKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gZmFsc2U7Ci0KLSAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7Ci0KLSAgICBwcml2YXRlIFN0YXRlIG1VbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgVW5pbml0aWFsaXplZFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBTdGF0ZSBtRGVmYXVsdFN0YXRlID0gbmV3IERlZmF1bHRTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbUluYWN0aXZlU3RhdGUgPSBuZXcgSW5hY3RpdmVTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbURpc2Nvbm5lY3RTdGF0ZSA9IG5ldyBEaXNjb25uZWN0ZWRTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbVNjYW5TdGF0ZSA9IG5ldyBTY2FuU3RhdGUoKTsKLSAgICBwcml2YXRlIFN0YXRlIG1IYW5kc2hha2VTdGF0ZSA9IG5ldyBIYW5kc2hha2VTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbUNvbXBsZXRlZFN0YXRlID0gbmV3IENvbXBsZXRlZFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBTdGF0ZSBtRG9ybWFudFN0YXRlID0gbmV3IERvcm1hbnRTdGF0ZSgpOwotCi0gICAgcHVibGljIFN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIoQ29udGV4dCBjLCBXaWZpU3RhdGVNYWNoaW5lIHdzbSwgV2lmaUNvbmZpZ1N0b3JlIHdjcywgSGFuZGxlciB0KSB7Ci0gICAgICAgIHN1cGVyKFRBRywgdC5nZXRMb29wZXIoKSk7Ci0KLSAgICAgICAgbUNvbnRleHQgPSBjOwotICAgICAgICBtV2lmaVN0YXRlTWFjaGluZSA9IHdzbTsKLSAgICAgICAgbVdpZmlDb25maWdTdG9yZSA9IHdjczsKLSAgICAgICAgYWRkU3RhdGUobURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtVW5pbml0aWFsaXplZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1JbmFjdGl2ZVN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1EaXNjb25uZWN0U3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobVNjYW5TdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtSGFuZHNoYWtlU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobUNvbXBsZXRlZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1Eb3JtYW50U3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotCi0gICAgICAgIHNldEluaXRpYWxTdGF0ZShtVW5pbml0aWFsaXplZFN0YXRlKTsKLSAgICAgICAgc2V0TG9nUmVjU2l6ZSg1MCk7Ci0gICAgICAgIHNldExvZ09ubHlUcmFuc2l0aW9ucyh0cnVlKTsKLSAgICAgICAgLy9zdGFydCB0aGUgc3RhdGUgbWFjaGluZQotICAgICAgICBzdGFydCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBoYW5kbGVOZXR3b3JrQ29ubmVjdGlvbkZhaWx1cmUoaW50IG5ldElkLCBpbnQgZGlzYWJsZVJlYXNvbikgewotICAgICAgICAvKiBJZiBvdGhlciBuZXR3b3JrcyBkaXNhYmxlZCBkdXJpbmcgY29ubmVjdGlvbiwgZW5hYmxlIHRoZW0gKi8KLSAgICAgICAgaWYgKG1OZXR3b3Jrc0Rpc2FibGVkRHVyaW5nQ29ubmVjdCkgewotICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5lbmFibGVBbGxOZXR3b3JrcygpOwotICAgICAgICAgICAgbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLyogRGlzYWJsZSBmYWlsZWQgbmV0d29yayAqLwotICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmRpc2FibGVOZXR3b3JrKG5ldElkLCBkaXNhYmxlUmVhc29uKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdHJhbnNpdGlvbk9uU3VwcGxpY2FudFN0YXRlQ2hhbmdlKFN0YXRlQ2hhbmdlUmVzdWx0IHN0YXRlQ2hhbmdlUmVzdWx0KSB7Ci0gICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdXBTdGF0ZSA9IChTdXBwbGljYW50U3RhdGUpIHN0YXRlQ2hhbmdlUmVzdWx0LnN0YXRlOwotCi0gICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIlN1cHBsaWNhbnQgc3RhdGU6ICIgKyBzdXBTdGF0ZS50b1N0cmluZygpICsgIlxuIik7Ci0KLSAgICAgICAgc3dpdGNoIChzdXBTdGF0ZSkgewotICAgICAgICAgICBjYXNlIERJU0NPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElOVEVSRkFDRV9ESVNBQkxFRDoKLSAgICAgICAgICAgICAgICAvL3dlIHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgZGlzY29ubmVjdGlvbiBhbHJlYWR5LCBkbyBub3RoaW5nCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNDQU5OSU5HOgotICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtU2NhblN0YXRlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQVVUSEVOVElDQVRJTkc6Ci0gICAgICAgICAgICBjYXNlIEFTU09DSUFUSU5HOgotICAgICAgICAgICAgY2FzZSBBU1NPQ0lBVEVEOgotICAgICAgICAgICAgY2FzZSBGT1VSX1dBWV9IQU5EU0hBS0U6Ci0gICAgICAgICAgICBjYXNlIEdST1VQX0hBTkRTSEFLRToKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUhhbmRzaGFrZVN0YXRlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ09NUExFVEVEOgotICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtQ29tcGxldGVkU3RhdGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBET1JNQU5UOgotICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRG9ybWFudFN0YXRlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSU5BQ1RJVkU6Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5JTklUSUFMSVpFRDoKLSAgICAgICAgICAgIGNhc2UgSU5WQUxJRDoKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVVuaW5pdGlhbGl6ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVua25vd24gc3VwcGxpY2FudCBzdGF0ZSAiICsgc3VwU3RhdGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRTdXBwbGljYW50U3RhdGVDaGFuZ2VkQnJvYWRjYXN0KFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSwgYm9vbGVhbiBmYWlsZWRBdXRoKSB7Ci0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UCi0gICAgICAgICAgICAgICAgfCBJbnRlbnQuRkxBR19SRUNFSVZFUl9SRVBMQUNFX1BFTkRJTkcpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTkVXX1NUQVRFLCAoUGFyY2VsYWJsZSkgc3RhdGUpOwotICAgICAgICBpZiAoZmFpbGVkQXV0aCkgewotICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKAotICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVYVFJBX1NVUFBMSUNBTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuRVJST1JfQVVUSEVOVElDQVRJTkcpOwotICAgICAgICB9Ci0gICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICogSFNNIHN0YXRlcwotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gICAgY2xhc3MgRGVmYXVsdFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7Ci0gICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpICsgIlxuIik7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCsrOwotICAgICAgICAgICAgICAgICAgICBtQXV0aEZhaWx1cmVJblN1cHBsaWNhbnRCcm9hZGNhc3QgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBTdGF0ZUNoYW5nZVJlc3VsdCBzdGF0ZUNoYW5nZVJlc3VsdCA9IChTdGF0ZUNoYW5nZVJlc3VsdCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IHN0YXRlQ2hhbmdlUmVzdWx0LnN0YXRlOwotICAgICAgICAgICAgICAgICAgICBzZW5kU3VwcGxpY2FudFN0YXRlQ2hhbmdlZEJyb2FkY2FzdChzdGF0ZSwgbUF1dGhGYWlsdXJlSW5TdXBwbGljYW50QnJvYWRjYXN0KTsKLSAgICAgICAgICAgICAgICAgICAgbUF1dGhGYWlsdXJlSW5TdXBwbGljYW50QnJvYWRjYXN0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25PblN1cHBsaWNhbnRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZVJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfUkVTRVRfU1VQUExJQ0FOVF9TVEFURToKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1VbmluaXRpYWxpemVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNPTk5FQ1RfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbUFzc29jaWF0aW9uUmVqZWN0Q291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkFTU09DSUFUSU9OX1JFSkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbUFzc29jaWF0aW9uUmVqZWN0Q291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiSWdub3JpbmcgIiArIG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBzdXBwbGljYW50IHN0YXRlIGFzIHNlZW4KLSAgICAgKiBieSB0aGUgZnJhbWV3b3JrIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQuIFdlIGFyZQotICAgICAqIGluIHRoaXMgc3RhdGUgcmlnaHQgYWZ0ZXIgZXN0YWJsaXNoaW5nIGEgY29udHJvbAotICAgICAqIGNoYW5uZWwgY29ubmVjdGlvbiBiZWZvcmUgYW55IHN1cHBsaWNhbnQgZXZlbnRzCi0gICAgICogb3IgYWZ0ZXIgd2UgaGF2ZSBsb3N0IHRoZSBjb250cm9sIGNoYW5uZWwKLSAgICAgKiBjb25uZWN0aW9uIHRvIHRoZSBzdXBwbGljYW50Ci0gICAgICovCi0gICAgY2xhc3MgVW5pbml0aWFsaXplZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7Ci0gICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgSW5hY3RpdmVTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsIGdldE5hbWUoKSArICJcbiIpOwotICAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIERpc2Nvbm5lY3RlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7Ci0gICAgICAgICAgICAgLyogSWYgYSBkaXNjb25uZWN0IGV2ZW50IGhhcHBlbnMgYWZ0ZXIgYXV0aGVudGljYXRpb24gZmFpbHVyZQotICAgICAgICAgICAgICAqIGV4Y2VlZHMgbWF4aW11bSByZXRyaWVzLCBkaXNhYmxlIHRoZSBuZXR3b3JrCi0gICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZ2V0Q3VycmVudE1lc3NhZ2UoKTsKLSAgICAgICAgICAgICBTdGF0ZUNoYW5nZVJlc3VsdCBzdGF0ZUNoYW5nZVJlc3VsdCA9IChTdGF0ZUNoYW5nZVJlc3VsdCkgbWVzc2FnZS5vYmo7Ci0KLSAgICAgICAgICAgICBpZiAobUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCA+PSBNQVhfUkVUUklFU19PTl9BVVRIRU5USUNBVElPTl9GQUlMVVJFKSB7Ci0gICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIkZhaWxlZCB0byBhdXRoZW50aWNhdGUsIGRpc2FibGluZyBuZXR3b3JrICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlUmVzdWx0Lm5ldHdvcmtJZCk7Ci0gICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtDb25uZWN0aW9uRmFpbHVyZShzdGF0ZUNoYW5nZVJlc3VsdC5uZXR3b3JrSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uRElTQUJMRURfQVVUSF9GQUlMVVJFKTsKLSAgICAgICAgICAgICAgICAgbUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCA9IDA7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGVsc2UgaWYgKG1Bc3NvY2lhdGlvblJlamVjdENvdW50ID49IE1BWF9SRVRSSUVTX09OX0FTU09DSUFUSU9OX1JFSkVDVCkgewotICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJBc3NvY2lhdGlvbiBnZXR0aW5nIHJlamVjdGVkLCBkaXNhYmxpbmcgbmV0d29yayAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZVJlc3VsdC5uZXR3b3JrSWQpOwotICAgICAgICAgICAgICAgICBoYW5kbGVOZXR3b3JrQ29ubmVjdGlvbkZhaWx1cmUoc3RhdGVDaGFuZ2VSZXN1bHQubmV0d29ya0lkLAotICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkRJU0FCTEVEX0FTU09DSUFUSU9OX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgIG1Bc3NvY2lhdGlvblJlamVjdENvdW50ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBTY2FuU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCBnZXROYW1lKCkgKyAiXG4iKTsKLSAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBIYW5kc2hha2VTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBtYXggbnVtYmVyIG9mIHRoZSBXUEEgc3VwcGxpY2FudCBsb29wIGl0ZXJhdGlvbnMgYmVmb3JlIHdlCi0gICAgICAgICAqIGRlY2lkZSB0aGF0IHRoZSBsb29wIHNob3VsZCBiZSB0ZXJtaW5hdGVkOgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9TVVBQTElDQU5UX0xPT1BfSVRFUkFUSU9OUyA9IDQ7Ci0gICAgICAgIHByaXZhdGUgaW50IG1Mb29wRGV0ZWN0SW5kZXg7Ci0gICAgICAgIHByaXZhdGUgaW50IG1Mb29wRGV0ZWN0Q291bnQ7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsIGdldE5hbWUoKSArICJcbiIpOwotICAgICAgICAgICAgIG1Mb29wRGV0ZWN0SW5kZXggPSAwOwotICAgICAgICAgICAgIG1Mb29wRGV0ZWN0Q291bnQgPSAwOwotICAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsIGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSArICJcbiIpOwotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBTdGF0ZUNoYW5nZVJlc3VsdCBzdGF0ZUNoYW5nZVJlc3VsdCA9IChTdGF0ZUNoYW5nZVJlc3VsdCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IHN0YXRlQ2hhbmdlUmVzdWx0LnN0YXRlOwotICAgICAgICAgICAgICAgICAgICBpZiAoU3VwcGxpY2FudFN0YXRlLmlzSGFuZHNoYWtlU3RhdGUoc3RhdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUxvb3BEZXRlY3RJbmRleCA+IHN0YXRlLm9yZGluYWwoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Mb29wRGV0ZWN0Q291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtTG9vcERldGVjdENvdW50ID4gTUFYX1NVUFBMSUNBTlRfTE9PUF9JVEVSQVRJT05TKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiU3VwcGxpY2FudCBsb29wIGRldGVjdGVkLCBkaXNhYmxpbmcgbmV0d29yayAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlUmVzdWx0Lm5ldHdvcmtJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Nvbm5lY3Rpb25GYWlsdXJlKHN0YXRlQ2hhbmdlUmVzdWx0Lm5ldHdvcmtJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkRJU0FCTEVEX0FVVEhfRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTG9vcERldGVjdEluZGV4ID0gc3RhdGUub3JkaW5hbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFN1cHBsaWNhbnRTdGF0ZUNoYW5nZWRCcm9hZGNhc3Qoc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdXRoRmFpbHVyZUluU3VwcGxpY2FudEJyb2FkY2FzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgdGhlIERlZmF1bHRTdGF0ZSBoYW5kbGUgdGhlIHRyYW5zaXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIENvbXBsZXRlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7Ci0gICAgICAgICAgICAgLyogUmVzZXQgYXV0aGVudGljYXRpb24gZmFpbHVyZSBjb3VudCAqLwotICAgICAgICAgICAgIG1BdXRoZW50aWNhdGlvbkZhaWx1cmVzQ291bnQgPSAwOwotICAgICAgICAgICAgIG1Bc3NvY2lhdGlvblJlamVjdENvdW50ID0gMDsKLSAgICAgICAgICAgICBpZiAobU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0KSB7Ci0gICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZW5hYmxlQWxsTmV0d29ya3MoKTsKLSAgICAgICAgICAgICAgICAgbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpICsgIlxuIik7Ci0gICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgU3RhdGVDaGFuZ2VSZXN1bHQgc3RhdGVDaGFuZ2VSZXN1bHQgPSAoU3RhdGVDaGFuZ2VSZXN1bHQpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgc3RhdGUgPSBzdGF0ZUNoYW5nZVJlc3VsdC5zdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZFN1cHBsaWNhbnRTdGF0ZUNoYW5nZWRCcm9hZGNhc3Qoc3RhdGUsIG1BdXRoRmFpbHVyZUluU3VwcGxpY2FudEJyb2FkY2FzdCk7Ci0gICAgICAgICAgICAgICAgICAgIC8qIElnbm9yZSBhbnkgY29ubmVjdGluZyBzdGF0ZSBpbiBjb21wbGV0ZWQgc3RhdGUuIEdyb3VwIHJlLWtleWluZwotICAgICAgICAgICAgICAgICAgICAgKiBldmVudHMgYW5kIG90aGVyIGF1dGggZXZlbnRzIHRoYXQgZG8gbm90IGFmZmVjdCBjb25uZWN0aXZpdHkgYXJlCi0gICAgICAgICAgICAgICAgICAgICAqIGlnbm9yZWQKLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChTdXBwbGljYW50U3RhdGUuaXNDb25uZWN0aW5nKHN0YXRlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbk9uU3VwcGxpY2FudFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlUmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9SRVNFVF9TVVBQTElDQU5UX1NUQVRFOgotICAgICAgICAgICAgICAgICAgICBzZW5kU3VwcGxpY2FudFN0YXRlQ2hhbmdlZEJyb2FkY2FzdChTdXBwbGljYW50U3RhdGUuRElTQ09OTkVDVEVELCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVW5pbml0aWFsaXplZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvL1RPRE86IHJlbW92ZSBhZnRlciBnZXR0aW5nIHJpZCBvZiB0aGUgc3RhdGUgaW4gc3VwcGxpY2FudAotICAgIGNsYXNzIERvcm1hbnRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCBnZXROYW1lKCkgKyAiXG4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIHN1cGVyLmR1bXAoZmQsIHB3LCBhcmdzKTsKLSAgICAgICAgcHcucHJpbnRsbigibUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCAiICsgbUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1BdXRoRmFpbHVyZUluU3VwcGxpY2FudEJyb2FkY2FzdCAiICsgbUF1dGhGYWlsdXJlSW5TdXBwbGljYW50QnJvYWRjYXN0KTsKLSAgICAgICAgcHcucHJpbnRsbigibU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ICIgKyBtTmV0d29ya3NEaXNhYmxlZER1cmluZ0Nvbm5lY3QpOwotICAgICAgICBwdy5wcmludGxuKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUFwQ29uZmlnU3RvcmUuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlBcENvbmZpZ1N0b3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MzFjYTMuLjAwMDAwMDAKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUFwQ29uZmlnU3RvcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm5ldC53aWZpOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbi5LZXlNZ210OwotaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Bc3luY0NoYW5uZWw7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGVNYWNoaW5lOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5EYXRhSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5EYXRhT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi0vKioKLSAqIFByb3ZpZGVzIEFQSSB0byB0aGUgV2lmaVN0YXRlTWFjaGluZSBmb3IgZG9pbmcgcmVhZC93cml0ZSBhY2Nlc3MKLSAqIHRvIHNvZnQgYWNjZXNzIHBvaW50IGNvbmZpZ3VyYXRpb24KLSAqLwotY2xhc3MgV2lmaUFwQ29uZmlnU3RvcmUgZXh0ZW5kcyBTdGF0ZU1hY2hpbmUgewotCi0gICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2lmaUFwQ29uZmlnU3RvcmUiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFQX0NPTkZJR19GSUxFID0gRW52aXJvbm1lbnQuZ2V0RGF0YURpcmVjdG9yeSgpICsKLSAgICAgICAgIi9taXNjL3dpZmkvc29mdGFwLmNvbmYiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFQX0NPTkZJR19GSUxFX1ZFUlNJT04gPSAxOwotCi0gICAgcHJpdmF0ZSBTdGF0ZSBtRGVmYXVsdFN0YXRlID0gbmV3IERlZmF1bHRTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbUluYWN0aXZlU3RhdGUgPSBuZXcgSW5hY3RpdmVTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbUFjdGl2ZVN0YXRlID0gbmV3IEFjdGl2ZVN0YXRlKCk7Ci0KLSAgICBwcml2YXRlIFdpZmlDb25maWd1cmF0aW9uIG1XaWZpQXBDb25maWcgPSBudWxsOwotICAgIHByaXZhdGUgQXN5bmNDaGFubmVsIG1SZXBseUNoYW5uZWwgPSBuZXcgQXN5bmNDaGFubmVsKCk7Ci0KLSAgICBXaWZpQXBDb25maWdTdG9yZShDb250ZXh0IGNvbnRleHQsIEhhbmRsZXIgdGFyZ2V0KSB7Ci0gICAgICAgIHN1cGVyKFRBRywgdGFyZ2V0LmdldExvb3BlcigpKTsKLQotICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIGFkZFN0YXRlKG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobUluYWN0aXZlU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobUFjdGl2ZVN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLQotICAgICAgICBzZXRJbml0aWFsU3RhdGUobUluYWN0aXZlU3RhdGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgV2lmaUFwQ29uZmlnU3RvcmUgbWFrZVdpZmlBcENvbmZpZ1N0b3JlKENvbnRleHQgY29udGV4dCwgSGFuZGxlciB0YXJnZXQpIHsKLSAgICAgICAgV2lmaUFwQ29uZmlnU3RvcmUgcyA9IG5ldyBXaWZpQXBDb25maWdTdG9yZShjb250ZXh0LCB0YXJnZXQpOwotICAgICAgICBzLnN0YXJ0KCk7Ci0gICAgICAgIHJldHVybiBzOwotICAgIH0KLQotICAgIGNsYXNzIERlZmF1bHRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfU0VUX0FQX0NPTkZJRzoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX1NFVF9BUF9DT05GSUdfQ09NUExFVEVEOgotICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJVbmV4cGVjdGVkIG1lc3NhZ2U6ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9SRVFVRVNUX0FQX0NPTkZJRzoKLSAgICAgICAgICAgICAgICAgICAgbVJlcGx5Q2hhbm5lbC5yZXBseVRvTWVzc2FnZShtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX1JFU1BPTlNFX0FQX0NPTkZJRywgbVdpZmlBcENvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byBoYW5kbGUgIiArIG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgSW5hY3RpdmVTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfU0VUX0FQX0NPTkZJRzoKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlBcENvbmZpZyA9IChXaWZpQ29uZmlndXJhdGlvbikgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtQWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIEFjdGl2ZVN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVBcENvbmZpZ3VyYXRpb24obVdpZmlBcENvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKFdpZmlTdGF0ZU1hY2hpbmUuQ01EX1NFVF9BUF9DT05GSUdfQ09NUExFVEVEKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KS5zdGFydCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIC8vVE9ETzogaGF2ZSBmZWVkYmFjayB0byB0aGUgdXNlciB3aGVuIHdlIGRvIHRoaXMKLSAgICAgICAgICAgICAgICAvL3RvIGluZGljYXRlIHRoZSB3cml0ZSBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX1NFVF9BUF9DT05GSUc6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9TRVRfQVBfQ09ORklHX0NPTVBMRVRFRDoKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGxvYWRBcENvbmZpZ3VyYXRpb24oKSB7Ci0gICAgICAgIERhdGFJbnB1dFN0cmVhbSBpbiA9IG51bGw7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgV2lmaUNvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgICAgIGluID0gbmV3IERhdGFJbnB1dFN0cmVhbShuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQX0NPTkZJR19GSUxFKSkpOwotCi0gICAgICAgICAgICBpbnQgdmVyc2lvbiA9IGluLnJlYWRJbnQoKTsKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uICE9IDEpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJCYWQgdmVyc2lvbiBvbiBob3RzcG90IGNvbmZpZ3VyYXRpb24gZmlsZSwgc2V0IGRlZmF1bHRzIik7Ci0gICAgICAgICAgICAgICAgc2V0RGVmYXVsdEFwQ29uZmlndXJhdGlvbigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbmZpZy5TU0lEID0gaW4ucmVhZFVURigpOwotICAgICAgICAgICAgaW50IGF1dGhUeXBlID0gaW4ucmVhZEludCgpOwotICAgICAgICAgICAgY29uZmlnLmFsbG93ZWRLZXlNYW5hZ2VtZW50LnNldChhdXRoVHlwZSk7Ci0gICAgICAgICAgICBpZiAoYXV0aFR5cGUgIT0gS2V5TWdtdC5OT05FKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLnByZVNoYXJlZEtleSA9IGluLnJlYWRVVEYoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1XaWZpQXBDb25maWcgPSBjb25maWc7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlnbm9yZSkgewotICAgICAgICAgICAgc2V0RGVmYXVsdEFwQ29uZmlndXJhdGlvbigpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgaWYgKGluICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBpbi5jbG9zZSgpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBNZXNzZW5nZXIgZ2V0TWVzc2VuZ2VyKCkgewotICAgICAgICByZXR1cm4gbmV3IE1lc3NlbmdlcihnZXRIYW5kbGVyKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB3cml0ZUFwQ29uZmlndXJhdGlvbihmaW5hbCBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgb3V0ID0gbmV3IERhdGFPdXRwdXRTdHJlYW0obmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGVPdXRwdXRTdHJlYW0oQVBfQ09ORklHX0ZJTEUpKSk7Ci0KLSAgICAgICAgICAgIG91dC53cml0ZUludChBUF9DT05GSUdfRklMRV9WRVJTSU9OKTsKLSAgICAgICAgICAgIG91dC53cml0ZVVURihjb25maWcuU1NJRCk7Ci0gICAgICAgICAgICBpbnQgYXV0aFR5cGUgPSBjb25maWcuZ2V0QXV0aFR5cGUoKTsKLSAgICAgICAgICAgIG91dC53cml0ZUludChhdXRoVHlwZSk7Ci0gICAgICAgICAgICBpZihhdXRoVHlwZSAhPSBLZXlNZ210Lk5PTkUpIHsKLSAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoY29uZmlnLnByZVNoYXJlZEtleSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy5lKFRBRywgIkVycm9yIHdyaXRpbmcgaG90c3BvdCBjb25maWd1cmF0aW9uIiArIGUpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgaWYgKG91dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkge30KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIEdlbmVyYXRlIGEgZGVmYXVsdCBXUEEyIGJhc2VkIGNvbmZpZ3VyYXRpb24gd2l0aCBhIHJhbmRvbSBwYXNzd29yZC4KLSAgICAgICBXZSBhcmUgY2hhbmdpbmcgdGhlIFdpZmkgQXAgY29uZmlndXJhdGlvbiBzdG9yYWdlIGZyb20gc2VjdXJlIHNldHRpbmdzIHRvIGEKLSAgICAgICBmbGF0IGZpbGUgYWNjZXNzaWJsZSBvbmx5IGJ5IHRoZSBzeXN0ZW0uIEEgV1BBMiBiYXNlZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KLSAgICAgICB3aWxsIGtlZXAgdGhlIGRldmljZSBzZWN1cmUgYWZ0ZXIgdGhlIHVwZGF0ZSAqLwotICAgIHByaXZhdGUgdm9pZCBzZXREZWZhdWx0QXBDb25maWd1cmF0aW9uKCkgewotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgV2lmaUNvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgY29uZmlnLlNTSUQgPSBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcud2lmaV90ZXRoZXJfY29uZmlndXJlX3NzaWRfZGVmYXVsdCk7Ci0gICAgICAgIGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudC5zZXQoS2V5TWdtdC5XUEEyX1BTSyk7Ci0gICAgICAgIFN0cmluZyByYW5kb21VVUlEID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKTsKLSAgICAgICAgLy9maXJzdCAxMiBjaGFycyBmcm9tIHh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eAotICAgICAgICBjb25maWcucHJlU2hhcmVkS2V5ID0gcmFuZG9tVVVJRC5zdWJzdHJpbmcoMCwgOCkgKyByYW5kb21VVUlELnN1YnN0cmluZyg5LDEzKTsKLSAgICAgICAgc2VuZE1lc3NhZ2UoV2lmaVN0YXRlTWFjaGluZS5DTURfU0VUX0FQX0NPTkZJRywgY29uZmlnKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpQ29uZmlnU3RvcmUuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlDb25maWdTdG9yZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmFlMjE1Li4wMDAwMDAwCi0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlDb25maWdTdG9yZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm5ldC53aWZpOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLm5ldC5MaW5rQWRkcmVzczsKLWltcG9ydCBhbmRyb2lkLm5ldC5MaW5rUHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrVXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZTsKLWltcG9ydCBhbmRyb2lkLm5ldC5Qcm94eVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuUm91dGVJbmZvOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUNvbmZpZ3VyYXRpb24uSXBBc3NpZ25tZW50OwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUNvbmZpZ3VyYXRpb24uS2V5TWdtdDsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uLlByb3h5U2V0dGluZ3M7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbi5TdGF0dXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5OZXR3b3JrVXBkYXRlUmVzdWx0OwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uLklOVkFMSURfTkVUV09SS19JRDsKLWltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwotaW1wb3J0IGFuZHJvaWQub3MuRmlsZU9ic2VydmVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKLWltcG9ydCBhbmRyb2lkLnNlY3VyaXR5LktleVN0b3JlOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvY2FsTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZE91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRGF0YU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkVPRkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKLWltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LlB1YmxpY0tleTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5CaXRTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgdGhlIEFQSSB0byBtYW5hZ2UgY29uZmlndXJlZAotICogd2lmaSBuZXR3b3Jrcy4gVGhlIEFQSSBpcyBub3QgdGhyZWFkIHNhZmUgaXMgYmVpbmcKLSAqIHVzZWQgb25seSBmcm9tIFdpZmlTdGF0ZU1hY2hpbmUuCi0gKgotICogSXQgZGVhbHMgd2l0aCB0aGUgZm9sbG93aW5nCi0gKiAtIEFkZC91cGRhdGUvcmVtb3ZlIGEgV2lmaUNvbmZpZ3VyYXRpb24KLSAqICAgVGhlIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdHdvIHR5cGVzIG9mIGluZm9ybWF0aW9uLgotICogICAgID0gSVAgYW5kIHByb3h5IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBoYW5kbGVkIGJ5IFdpZmlDb25maWdTdG9yZSBhbmQKLSAqICAgICAgIGlzIHNhdmVkIHRvIGRpc2sgb24gYW55IGNoYW5nZS4KLSAqCi0gKiAgICAgICBUaGUgZm9ybWF0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhcyBmb2xsb3dzOgotICogICAgICAgPHZlcnNpb24+Ci0gKiAgICAgICA8bmV0QV9rZXkxPjxuZXRBX3ZhbHVlMT48bmV0QV9rZXkyPjxuZXRBX3ZhbHVlMj4uLi48RU9TPgotICogICAgICAgPG5ldEJfa2V5MT48bmV0Ql92YWx1ZTE+PG5ldEJfa2V5Mj48bmV0Ql92YWx1ZTI+Li4uPEVPUz4KLSAqICAgICAgIC4uCi0gKgotICogICAgICAgKGtleSwgdmFsdWUpIHBhaXJzIGZvciBhIGdpdmVuIG5ldHdvcmsgYXJlIGdyb3VwZWQgdG9nZXRoZXIgYW5kIGNhbgotICogICAgICAgYmUgaW4gYW55IG9yZGVyLiBBIEVPUyBhdCB0aGUgZW5kIG9mIGEgc2V0IG9mIChrZXksIHZhbHVlKSBwYWlycwotICogICAgICAgaW5kaWNhdGVzIHRoYXQgdGhlIG5leHQgc2V0IG9mIChrZXksIHZhbHVlKSBwYWlycyBhcmUgZm9yIGEgbmV3Ci0gKiAgICAgICBuZXR3b3JrLiBBIG5ldHdvcmsgaXMgaWRlbnRpZmllZCBieSBhIHVuaXF1ZSBJRF9LRVkuIElmIHRoZXJlIGlzIG5vCi0gKiAgICAgICBJRF9LRVkgaW4gdGhlIChrZXksIHZhbHVlKSBwYWlycywgdGhlIGRhdGEgaXMgZGlzY2FyZGVkLgotICoKLSAqICAgICAgIEFuIGludmFsaWQgdmVyc2lvbiBvbiByZWFkIHdvdWxkIHJlc3VsdCBpbiBkaXNjYXJkaW5nIHRoZSBjb250ZW50cyBvZgotICogICAgICAgdGhlIGZpbGUuIE9uIHRoZSBuZXh0IHdyaXRlLCB0aGUgbGF0ZXN0IHZlcnNpb24gaXMgd3JpdHRlbiB0byBmaWxlLgotICoKLSAqICAgICAgIEFueSBmYWlsdXJlcyBkdXJpbmcgcmVhZCBvciB3cml0ZSB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFyZSBpZ25vcmVkCi0gKiAgICAgICB3aXRob3V0IHJlcG9ydGluZyB0byB0aGUgdXNlciBzaW5jZSB0aGUgbGlrZWxpaG9vZCBvZiB0aGVzZSBlcnJvcnMgYXJlCi0gKiAgICAgICBsb3cgYW5kIHRoZSBpbXBhY3Qgb24gY29ubmVjdGl2aXR5IGlzIGxvdy4KLSAqCi0gKiAgICAgPSBTU0lEICYgc2VjdXJpdHkgZGV0YWlscyB0aGF0IGlzIHB1c2hlZCB0byB0aGUgc3VwcGxpY2FudC4KLSAqICAgICAgIHN1cHBsaWNhbnQgc2F2ZXMgdGhlc2UgZGV0YWlscyB0byB0aGUgZGlzayBvbiBjYWxsaW5nCi0gKiAgICAgICBzYXZlQ29uZmlnQ29tbWFuZCgpLgotICoKLSAqICAgICAgIFdlIGhhdmUgdHdvIGtpbmRzIG9mIEFQSXMgZXhwb3NlZDoKLSAqICAgICAgICA+IHB1YmxpYyBBUEkgY2FsbHMgdGhhdCBwcm92aWRlIGZpbmUgZ3JhaW5lZCBjb250cm9sCi0gKiAgICAgICAgICAtIGVuYWJsZU5ldHdvcmssIGRpc2FibGVOZXR3b3JrLCBhZGRPclVwZGF0ZU5ldHdvcmsoKSwKLSAqICAgICAgICAgIHJlbW92ZU5ldHdvcmsoKS4gRm9yIHRoZXNlIGNhbGxzLCB0aGUgY29uZmlnIGlzIG5vdCBwZXJzaXN0ZWQKLSAqICAgICAgICAgIHRvIHRoZSBkaXNrLiAoVE9ETzogZGVwcmVjYXRlIHRoZXNlIGNhbGxzIGluIFdpZmlNYW5hZ2VyKQotICogICAgICAgID4gVGhlIG5ldyBBUEkgY2FsbHMgLSBzZWxlY3ROZXR3b3JrKCksIHNhdmVOZXR3b3JrKCkgJiBmb3JnZXROZXR3b3JrKCkuCi0gKiAgICAgICAgICBUaGVzZSBjYWxscyBwZXJzaXN0IHRoZSBzdXBwbGljYW50IGNvbmZpZyB0byBkaXNrLgotICoKLSAqIC0gTWFpbnRhaW4gYSBsaXN0IG9mIGNvbmZpZ3VyZWQgbmV0d29ya3MgZm9yIHF1aWNrIGFjY2VzcwotICoKLSAqLwotY2xhc3MgV2lmaUNvbmZpZ1N0b3JlIHsKLQotICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldpZmlDb25maWdTdG9yZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBEQkcgPSB0cnVlOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gVkRCRyA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNVUFBMSUNBTlRfQ09ORklHX0ZJTEUgPSAiL2RhdGEvbWlzYy93aWZpL3dwYV9zdXBwbGljYW50LmNvbmYiOwotCi0gICAgLyogY29uZmlndXJlZCBuZXR3b3JrcyB3aXRoIG5ldHdvcmsgaWQgYXMgdGhlIGtleSAqLwotICAgIHByaXZhdGUgSGFzaE1hcDxJbnRlZ2VyLCBXaWZpQ29uZmlndXJhdGlvbj4gbUNvbmZpZ3VyZWROZXR3b3JrcyA9Ci0gICAgICAgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBXaWZpQ29uZmlndXJhdGlvbj4oKTsKLQotICAgIC8qIEEgbmV0d29yayBpZCBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIG5ldHdvcmsgY29uZmlndXJlZCBpbiB0aGUKLSAgICAgKiBzdXBwbGljYW50LiBOZXR3b3JrIGlkcyBhcmUgZ2VuZXJhdGVkIHdoZW4gdGhlIHN1cHBsaWNhbnQgcmVhZHMKLSAgICAgKiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGF0IHN0YXJ0IGFuZCBjYW4gdGh1cyBjaGFuZ2UgZm9yIG5ldHdvcmtzLgotICAgICAqIFdlIHN0b3JlIHRoZSBJUCBjb25maWd1cmF0aW9uIGZvciBuZXR3b3JrcyBhbG9uZyB3aXRoIGEgdW5pcXVlIGlkCi0gICAgICogdGhhdCBpcyBnZW5lcmF0ZWQgZnJvbSBTU0lEIGFuZCBzZWN1cml0eSB0eXBlIG9mIHRoZSBuZXR3b3JrLiBBIG1hcHBpbmcKLSAgICAgKiBmcm9tIHRoZSBnZW5lcmF0ZWQgdW5pcXVlIGlkIHRvIG5ldHdvcmsgaWQgb2YgdGhlIG5ldHdvcmsgaXMgbmVlZGVkIHRvCi0gICAgICogbWFwIHN1cHBsaWNhbnQgY29uZmlnIHRvIElQIGNvbmZpZ3VyYXRpb24uICovCi0gICAgcHJpdmF0ZSBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+IG1OZXR3b3JrSWRzID0KLSAgICAgICAgICAgIG5ldyBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+KCk7Ci0KLSAgICAvKiBUcmFja3MgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgb2YgY29uZmlndXJlZCBuZXR3b3JrcyAqLwotICAgIHByaXZhdGUgaW50IG1MYXN0UHJpb3JpdHkgPSAtMTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBpcENvbmZpZ0ZpbGUgPSBFbnZpcm9ubWVudC5nZXREYXRhRGlyZWN0b3J5KCkgKwotICAgICAgICAgICAgIi9taXNjL3dpZmkvaXBjb25maWcudHh0IjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJUENPTkZJR19GSUxFX1ZFUlNJT04gPSAyOwotCi0gICAgLyogSVAgYW5kIHByb3h5IGNvbmZpZ3VyYXRpb24ga2V5cyAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9LRVkgPSAiaWQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJUF9BU1NJR05NRU5UX0tFWSA9ICJpcEFzc2lnbm1lbnQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5LX0FERFJFU1NfS0VZID0gImxpbmtBZGRyZXNzIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0FURVdBWV9LRVkgPSAiZ2F0ZXdheSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEROU19LRVkgPSAiZG5zIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPWFlfU0VUVElOR1NfS0VZID0gInByb3h5U2V0dGluZ3MiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9YWV9IT1NUX0tFWSA9ICJwcm94eUhvc3QiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9YWV9QT1JUX0tFWSA9ICJwcm94eVBvcnQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9YWV9QQUNfRklMRSA9ICJwcm94eVBhYyI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYQ0xVU0lPTl9MSVNUX0tFWSA9ICJleGNsdXNpb25MaXN0IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU9TID0gImVvcyI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIExvY2FsTG9nIG1Mb2NhbExvZzsKLSAgICBwcml2YXRlIGZpbmFsIFdwYUNvbmZpZ0ZpbGVPYnNlcnZlciBtRmlsZU9ic2VydmVyOwotCi0gICAgcHJpdmF0ZSBXaWZpTmF0aXZlIG1XaWZpTmF0aXZlOwotICAgIHByaXZhdGUgZmluYWwgS2V5U3RvcmUgbUtleVN0b3JlID0gS2V5U3RvcmUuZ2V0SW5zdGFuY2UoKTsKLQotICAgIFdpZmlDb25maWdTdG9yZShDb250ZXh0IGMsIFdpZmlOYXRpdmUgd24pIHsKLSAgICAgICAgbUNvbnRleHQgPSBjOwotICAgICAgICBtV2lmaU5hdGl2ZSA9IHduOwotCi0gICAgICAgIGlmIChWREJHKSB7Ci0gICAgICAgICAgICBtTG9jYWxMb2cgPSBtV2lmaU5hdGl2ZS5nZXRMb2NhbExvZygpOwotICAgICAgICAgICAgbUZpbGVPYnNlcnZlciA9IG5ldyBXcGFDb25maWdGaWxlT2JzZXJ2ZXIoKTsKLSAgICAgICAgICAgIG1GaWxlT2JzZXJ2ZXIuc3RhcnRXYXRjaGluZygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUxvY2FsTG9nID0gbnVsbDsKLSAgICAgICAgICAgIG1GaWxlT2JzZXJ2ZXIgPSBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgV3BhQ29uZmlnRmlsZU9ic2VydmVyIGV4dGVuZHMgRmlsZU9ic2VydmVyIHsKLQotICAgICAgICBwdWJsaWMgV3BhQ29uZmlnRmlsZU9ic2VydmVyKCkgewotICAgICAgICAgICAgc3VwZXIoU1VQUExJQ0FOVF9DT05GSUdfRklMRSwgQ0xPU0VfV1JJVEUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRXZlbnQoaW50IGV2ZW50LCBTdHJpbmcgcGF0aCkgewotICAgICAgICAgICAgaWYgKGV2ZW50ID09IENMT1NFX1dSSVRFKSB7Ci0gICAgICAgICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoU1VQUExJQ0FOVF9DT05GSUdfRklMRSk7Ci0gICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJ3cGFfc3VwcGxpY2FudC5jb25mIGNoYW5nZWQ7IG5ldyBzaXplID0gIiArIGZpbGUubGVuZ3RoKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBGZXRjaCB0aGUgbGlzdCBvZiBjb25maWd1cmVkIG5ldHdvcmtzCi0gICAgICogYW5kIGVuYWJsZSBhbGwgc3RvcmVkIG5ldHdvcmtzIGluIHN1cHBsaWNhbnQuCi0gICAgICovCi0gICAgdm9pZCBsb2FkQW5kRW5hYmxlQWxsTmV0d29ya3MoKSB7Ci0gICAgICAgIGlmIChEQkcpIGxvZygiTG9hZGluZyBjb25maWcgYW5kIGVuYWJsaW5nIGFsbCBuZXR3b3JrcyIpOwotICAgICAgICBsb2FkQ29uZmlndXJlZE5ldHdvcmtzKCk7Ci0gICAgICAgIGVuYWJsZUFsbE5ldHdvcmtzKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmV0Y2ggdGhlIGxpc3Qgb2YgY3VycmVudGx5IGNvbmZpZ3VyZWQgbmV0d29ya3MKLSAgICAgKiBAcmV0dXJuIExpc3Qgb2YgbmV0d29ya3MKLSAgICAgKi8KLSAgICBMaXN0PFdpZmlDb25maWd1cmF0aW9uPiBnZXRDb25maWd1cmVkTmV0d29ya3MoKSB7Ci0gICAgICAgIExpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+IG5ldHdvcmtzID0gbmV3IEFycmF5TGlzdDxXaWZpQ29uZmlndXJhdGlvbj4oKTsKLSAgICAgICAgZm9yKFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA6IG1Db25maWd1cmVkTmV0d29ya3MudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtzLmFkZChuZXcgV2lmaUNvbmZpZ3VyYXRpb24oY29uZmlnKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldHdvcmtzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIGVuYWJsZSBhbGwgbmV0d29ya3MgYW5kIHNhdmUgY29uZmlnLiBUaGlzIHdpbGwgYmUgYSBuby1vcCBpZiB0aGUgbGlzdAotICAgICAqIG9mIGNvbmZpZ3VyZWQgbmV0d29ya3MgaW5kaWNhdGVzIGFsbCBuZXR3b3JrcyBhcyBiZWluZyBlbmFibGVkCi0gICAgICovCi0gICAgdm9pZCBlbmFibGVBbGxOZXR3b3JrcygpIHsKLSAgICAgICAgYm9vbGVhbiBuZXR3b3JrRW5hYmxlZFN0YXRlQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBmb3IoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnIDogbUNvbmZpZ3VyZWROZXR3b3Jrcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLnN0YXR1cyA9PSBTdGF0dXMuRElTQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBpZihtV2lmaU5hdGl2ZS5lbmFibGVOZXR3b3JrKGNvbmZpZy5uZXR3b3JrSWQsIGZhbHNlKSkgewotICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRW5hYmxlZFN0YXRlQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zdGF0dXMgPSBTdGF0dXMuRU5BQkxFRDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsb2dlKCJFbmFibGUgbmV0d29yayBmYWlsZWQgb24gIiArIGNvbmZpZy5uZXR3b3JrSWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZXR3b3JrRW5hYmxlZFN0YXRlQ2hhbmdlZCkgewotICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2F2ZUNvbmZpZygpOwotICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogU2VsZWN0cyB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgZm9yIGNvbm5lY3Rpb24uIFRoaXMgaW52b2x2ZXMKLSAgICAgKiB1cGRhdGluZyB0aGUgcHJpb3JpdHkgb2YgYWxsIHRoZSBuZXR3b3JrcyBhbmQgZW5hYmxpbmcgdGhlIGdpdmVuCi0gICAgICogbmV0d29yayB3aGlsZSBkaXNhYmxpbmcgb3RoZXJzLgotICAgICAqCi0gICAgICogU2VsZWN0aW5nIGEgbmV0d29yayB3aWxsIGxlYXZlIHRoZSBvdGhlciBuZXR3b3JrcyBkaXNhYmxlZCBhbmQKLSAgICAgKiBhIGNhbGwgdG8gZW5hYmxlQWxsTmV0d29ya3MoKSBuZWVkcyB0byBiZSBpc3N1ZWQgdXBvbiBhIGNvbm5lY3Rpb24KLSAgICAgKiBvciBhIGZhaWx1cmUgZXZlbnQgZnJvbSBzdXBwbGljYW50Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayB0byBzZWxlY3QgZm9yIGNvbm5lY3Rpb24KLSAgICAgKiBAcmV0dXJuIGZhbHNlIGlmIHRoZSBuZXR3b3JrIGlkIGlzIGludmFsaWQKLSAgICAgKi8KLSAgICBib29sZWFuIHNlbGVjdE5ldHdvcmsoaW50IG5ldElkKSB7Ci0gICAgICAgIGlmIChWREJHKSBsb2NhbExvZygic2VsZWN0TmV0d29yayIsIG5ldElkKTsKLSAgICAgICAgaWYgKG5ldElkID09IElOVkFMSURfTkVUV09SS19JRCkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFJlc2V0IHRoZSBwcmlvcml0eSBvZiBlYWNoIG5ldHdvcmsgYXQgc3RhcnQgb3IgaWYgaXQgZ29lcyB0b28gaGlnaC4KLSAgICAgICAgaWYgKG1MYXN0UHJpb3JpdHkgPT0gLTEgfHwgbUxhc3RQcmlvcml0eSA+IDEwMDAwMDApIHsKLSAgICAgICAgICAgIGZvcihXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgOiBtQ29uZmlndXJlZE5ldHdvcmtzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5uZXR3b3JrSWQgIT0gSU5WQUxJRF9ORVRXT1JLX0lEKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wcmlvcml0eSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGFkZE9yVXBkYXRlTmV0d29ya05hdGl2ZShjb25maWcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1MYXN0UHJpb3JpdHkgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2V0IHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5IGFuZCBzYXZlIHRoZSBjb25maWd1cmF0aW9uLgotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgV2lmaUNvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgY29uZmlnLm5ldHdvcmtJZCA9IG5ldElkOwotICAgICAgICBjb25maWcucHJpb3JpdHkgPSArK21MYXN0UHJpb3JpdHk7Ci0KLSAgICAgICAgYWRkT3JVcGRhdGVOZXR3b3JrTmF0aXZlKGNvbmZpZyk7Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNhdmVDb25maWcoKTsKLQotICAgICAgICAvKiBFbmFibGUgdGhlIGdpdmVuIG5ldHdvcmsgd2hpbGUgZGlzYWJsaW5nIGFsbCBvdGhlciBuZXR3b3JrcyAqLwotICAgICAgICBlbmFibGVOZXR3b3JrV2l0aG91dEJyb2FkY2FzdChuZXRJZCwgdHJ1ZSk7Ci0KLSAgICAgICAvKiBBdm9pZCBzYXZpbmcgdGhlIGNvbmZpZyAmIHNlbmRpbmcgYSBicm9hZGNhc3QgdG8gcHJldmVudCBzZXR0aW5ncwotICAgICAgICAqIGZyb20gZGlzcGxheWluZyBhIGRpc2FibGVkIGxpc3Qgb2YgbmV0d29ya3MgKi8KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkL3VwZGF0ZSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gYW5kIHNhdmUgY29uZmlnCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY29uZmlnIFdpZmlDb25maWd1cmF0aW9uIHRvIGJlIHNhdmVkCi0gICAgICogQHJldHVybiBuZXR3b3JrIHVwZGF0ZSByZXN1bHQKLSAgICAgKi8KLSAgICBOZXR3b3JrVXBkYXRlUmVzdWx0IHNhdmVOZXR3b3JrKFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgICAgICBpZiAoVkRCRykgbG9jYWxMb2coInNhdmVOZXR3b3JrIiwgY29uZmlnLm5ldHdvcmtJZCk7Ci0gICAgICAgIC8vIEEgbmV3IG5ldHdvcmsgY2Fubm90IGhhdmUgbnVsbCBTU0lECi0gICAgICAgIGlmIChjb25maWcgPT0gbnVsbCB8fCAoY29uZmlnLm5ldHdvcmtJZCA9PSBJTlZBTElEX05FVFdPUktfSUQgJiYKLSAgICAgICAgICAgICAgICBjb25maWcuU1NJRCA9PSBudWxsKSkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrVXBkYXRlUmVzdWx0KElOVkFMSURfTkVUV09SS19JRCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIG5ld05ldHdvcmsgPSAoY29uZmlnLm5ldHdvcmtJZCA9PSBJTlZBTElEX05FVFdPUktfSUQpOwotICAgICAgICBOZXR3b3JrVXBkYXRlUmVzdWx0IHJlc3VsdCA9IGFkZE9yVXBkYXRlTmV0d29ya05hdGl2ZShjb25maWcpOwotICAgICAgICBpbnQgbmV0SWQgPSByZXN1bHQuZ2V0TmV0d29ya0lkKCk7Ci0gICAgICAgIC8qIGVuYWJsZSBhIG5ldyBuZXR3b3JrICovCi0gICAgICAgIGlmIChuZXdOZXR3b3JrICYmIG5ldElkICE9IElOVkFMSURfTkVUV09SS19JRCkgewotICAgICAgICAgICAgbVdpZmlOYXRpdmUuZW5hYmxlTmV0d29yayhuZXRJZCwgZmFsc2UpOwotICAgICAgICAgICAgbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQobmV0SWQpLnN0YXR1cyA9IFN0YXR1cy5FTkFCTEVEOwotICAgICAgICB9Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNhdmVDb25maWcoKTsKLSAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoY29uZmlnLCByZXN1bHQuaXNOZXdOZXR3b3JrKCkgPwotICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkNIQU5HRV9SRUFTT05fQURERUQgOiBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NPTkZJR19DSEFOR0UpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlU3RhdHVzKGludCBuZXRJZCwgRGV0YWlsZWRTdGF0ZSBzdGF0ZSkgewotICAgICAgICBpZiAobmV0SWQgIT0gSU5WQUxJRF9ORVRXT1JLX0lEKSB7Ci0gICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7Ci0gICAgICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHJldHVybjsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN0YXR1cyA9IFN0YXR1cy5DVVJSRU5UOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIERJU0NPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgLy9JZiBuZXR3b3JrIGlzIGFscmVhZHkgZGlzYWJsZWQsIGtlZXAgdGhlIHN0YXR1cwotICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnN0YXR1cyA9PSBTdGF0dXMuQ1VSUkVOVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN0YXR1cyA9IFN0YXR1cy5FTkFCTEVEOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vZG8gbm90aGluZywgcmV0YWluIHRoZSBleGlzdGluZyBzdGF0ZQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvcmdldCB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgYW5kIHNhdmUgY29uZmlnCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayB0byBmb3JnZXQKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBpdCBzdWNjZWVkcywge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBib29sZWFuIGZvcmdldE5ldHdvcmsoaW50IG5ldElkKSB7Ci0gICAgICAgIGlmIChWREJHKSBsb2NhbExvZygiZm9yZ2V0TmV0d29yayIsIG5ldElkKTsKLSAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnJlbW92ZU5ldHdvcmsobmV0SWQpKSB7Ci0gICAgICAgICAgICBtV2lmaU5hdGl2ZS5zYXZlQ29uZmlnKCk7Ci0gICAgICAgICAgICByZW1vdmVDb25maWdBbmRTZW5kQnJvYWRjYXN0SWZOZWVkZWQobmV0SWQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gcmVtb3ZlIG5ldHdvcmsgIiArIG5ldElkKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZC91cGRhdGUgYSBuZXR3b3JrLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gc2F2ZUNvbmZpZyBvcGVyYXRpb24uCi0gICAgICogVGhpcyBmdW5jdGlvbiBpcyByZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBwdWJsaWMKLSAgICAgKiBBUEkuIFRoZSBtb3JlIHBvd2VyZnVsIHNhdmVOZXR3b3JrKCkgaXMgdXNlZCBieSB0aGUKLSAgICAgKiBzdGF0ZSBtYWNoaW5lCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY29uZmlnIHdpZmkgY29uZmlndXJhdGlvbiB0byBhZGQvdXBkYXRlCi0gICAgICogQHJldHVybiBuZXR3b3JrIElkCi0gICAgICovCi0gICAgaW50IGFkZE9yVXBkYXRlTmV0d29yayhXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJhZGRPclVwZGF0ZU5ldHdvcmsiLCBjb25maWcubmV0d29ya0lkKTsKLSAgICAgICAgTmV0d29ya1VwZGF0ZVJlc3VsdCByZXN1bHQgPSBhZGRPclVwZGF0ZU5ldHdvcmtOYXRpdmUoY29uZmlnKTsKLSAgICAgICAgaWYgKHJlc3VsdC5nZXROZXR3b3JrSWQoKSAhPSBXaWZpQ29uZmlndXJhdGlvbi5JTlZBTElEX05FVFdPUktfSUQpIHsKLSAgICAgICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KHJlc3VsdC5nZXROZXR3b3JrSWQoKSksCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pc05ld05ldHdvcmsgPyBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0FEREVEIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NPTkZJR19DSEFOR0UpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQuZ2V0TmV0d29ya0lkKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlIGEgbmV0d29yay4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHNhdmVDb25maWcgb3BlcmF0aW9uLgotICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcHVibGljCi0gICAgICogQVBJLiBUaGUgbW9yZSBwb3dlcmZ1bCBmb3JnZXROZXR3b3JrKCkgaXMgdXNlZCBieSB0aGUKLSAgICAgKiBzdGF0ZSBtYWNoaW5lIGZvciBuZXR3b3JrIHJlbW92YWwKLSAgICAgKgotICAgICAqIEBwYXJhbSBuZXRJZCBuZXR3b3JrIHRvIGJlIHJlbW92ZWQKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBpdCBzdWNjZWVkcywge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBib29sZWFuIHJlbW92ZU5ldHdvcmsoaW50IG5ldElkKSB7Ci0gICAgICAgIGlmIChWREJHKSBsb2NhbExvZygicmVtb3ZlTmV0d29yayIsIG5ldElkKTsKLSAgICAgICAgYm9vbGVhbiByZXQgPSBtV2lmaU5hdGl2ZS5yZW1vdmVOZXR3b3JrKG5ldElkKTsKLSAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgcmVtb3ZlQ29uZmlnQW5kU2VuZEJyb2FkY2FzdElmTmVlZGVkKG5ldElkKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZW1vdmVDb25maWdBbmRTZW5kQnJvYWRjYXN0SWZOZWVkZWQoaW50IG5ldElkKSB7Ci0gICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKLSAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBSZW1vdmUgYW55IGFzc29jaWF0ZWQga2V5cwotICAgICAgICAgICAgaWYgKGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjb25maWcuZW50ZXJwcmlzZUNvbmZpZy5yZW1vdmVLZXlzKG1LZXlTdG9yZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtQ29uZmlndXJlZE5ldHdvcmtzLnJlbW92ZShuZXRJZCk7Ci0gICAgICAgICAgICBtTmV0d29ya0lkcy5yZW1vdmUoY29uZmlnS2V5KGNvbmZpZykpOwotCi0gICAgICAgICAgICB3cml0ZUlwQW5kUHJveHlDb25maWd1cmF0aW9ucygpOwotICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoY29uZmlnLCBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX1JFTU9WRUQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRW5hYmxlIGEgbmV0d29yay4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHNhdmVDb25maWcgb3BlcmF0aW9uLgotICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcHVibGljCi0gICAgICogQVBJLiBUaGUgbW9yZSBwb3dlcmZ1bCBzZWxlY3ROZXR3b3JrKCkvc2F2ZU5ldHdvcmsoKSBpcyB1c2VkIGJ5IHRoZQotICAgICAqIHN0YXRlIG1hY2hpbmUgZm9yIGNvbm5lY3RpbmcgdG8gYSBuZXR3b3JrCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayB0byBiZSBlbmFibGVkCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgaXQgc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICovCi0gICAgYm9vbGVhbiBlbmFibGVOZXR3b3JrKGludCBuZXRJZCwgYm9vbGVhbiBkaXNhYmxlT3RoZXJzKSB7Ci0gICAgICAgIGJvb2xlYW4gcmV0ID0gZW5hYmxlTmV0d29ya1dpdGhvdXRCcm9hZGNhc3QobmV0SWQsIGRpc2FibGVPdGhlcnMpOwotICAgICAgICBpZiAoZGlzYWJsZU90aGVycykgewotICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJlbmFibGVOZXR3b3JrKGRpc2FibGVPdGhlcnM9dHJ1ZSkgIiwgbmV0SWQpOwotICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChWREJHKSBsb2NhbExvZygiZW5hYmxlTmV0d29yayhkaXNhYmxlT3RoZXJzPWZhbHNlKSAiLCBuZXRJZCk7Ci0gICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBlbmFibGVkTmV0d29yayA9IG51bGw7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQobUNvbmZpZ3VyZWROZXR3b3JrcykgewotICAgICAgICAgICAgICAgIGVuYWJsZWROZXR3b3JrID0gbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQobmV0SWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gY2hlY2sganVzdCBpbiBjYXNlIHRoZSBuZXR3b3JrIHdhcyByZW1vdmVkIGJ5IHNvbWVvbmUgZWxzZS4KLSAgICAgICAgICAgIGlmIChlbmFibGVkTmV0d29yayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoZW5hYmxlZE5ldHdvcmssCi0gICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NPTkZJR19DSEFOR0UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBlbmFibGVOZXR3b3JrV2l0aG91dEJyb2FkY2FzdChpbnQgbmV0SWQsIGJvb2xlYW4gZGlzYWJsZU90aGVycykgewotICAgICAgICBib29sZWFuIHJldCA9IG1XaWZpTmF0aXZlLmVuYWJsZU5ldHdvcmsobmV0SWQsIGRpc2FibGVPdGhlcnMpOwotCi0gICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKLSAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSBjb25maWcuc3RhdHVzID0gU3RhdHVzLkVOQUJMRUQ7Ci0KLSAgICAgICAgaWYgKGRpc2FibGVPdGhlcnMpIHsKLSAgICAgICAgICAgIG1hcmtBbGxOZXR3b3Jrc0Rpc2FibGVkRXhjZXB0KG5ldElkKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIHZvaWQgZGlzYWJsZUFsbE5ldHdvcmtzKCkgewotICAgICAgICBpZiAoVkRCRykgbG9jYWxMb2coImRpc2FibGVBbGxOZXR3b3JrcyIpOwotICAgICAgICBib29sZWFuIG5ldHdvcmtEaXNhYmxlZCA9IGZhbHNlOwotICAgICAgICBmb3IoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnIDogbUNvbmZpZ3VyZWROZXR3b3Jrcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLnN0YXR1cyAhPSBTdGF0dXMuRElTQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBpZihtV2lmaU5hdGl2ZS5kaXNhYmxlTmV0d29yayhjb25maWcubmV0d29ya0lkKSkgewotICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRGlzYWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjb25maWcuc3RhdHVzID0gU3RhdHVzLkRJU0FCTEVEOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIkRpc2FibGUgbmV0d29yayBmYWlsZWQgb24gIiArIGNvbmZpZy5uZXR3b3JrSWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZXR3b3JrRGlzYWJsZWQpIHsKLSAgICAgICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyoqCi0gICAgICogRGlzYWJsZSBhIG5ldHdvcmsuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBzYXZlQ29uZmlnIG9wZXJhdGlvbi4KLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayB0byBiZSBkaXNhYmxlZAotICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGl0IHN1Y2NlZWRzLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQotICAgICAqLwotICAgIGJvb2xlYW4gZGlzYWJsZU5ldHdvcmsoaW50IG5ldElkKSB7Ci0gICAgICAgIHJldHVybiBkaXNhYmxlTmV0d29yayhuZXRJZCwgV2lmaUNvbmZpZ3VyYXRpb24uRElTQUJMRURfVU5LTk9XTl9SRUFTT04pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERpc2FibGUgYSBuZXR3b3JrLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gc2F2ZUNvbmZpZyBvcGVyYXRpb24uCi0gICAgICogQHBhcmFtIG5ldElkIG5ldHdvcmsgdG8gYmUgZGlzYWJsZWQKLSAgICAgKiBAcGFyYW0gcmVhc29uIHJlYXNvbiBjb2RlIG5ldHdvcmsgd2FzIGRpc2FibGVkCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgaXQgc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICovCi0gICAgYm9vbGVhbiBkaXNhYmxlTmV0d29yayhpbnQgbmV0SWQsIGludCByZWFzb24pIHsKLSAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJkaXNhYmxlTmV0d29yayIsIG5ldElkKTsKLSAgICAgICAgYm9vbGVhbiByZXQgPSBtV2lmaU5hdGl2ZS5kaXNhYmxlTmV0d29yayhuZXRJZCk7Ci0gICAgICAgIFdpZmlDb25maWd1cmF0aW9uIG5ldHdvcmsgPSBudWxsOwotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7Ci0gICAgICAgIC8qIE9ubHkgY2hhbmdlIHRoZSByZWFzb24gaWYgdGhlIG5ldHdvcmsgd2FzIG5vdCBwcmV2aW91c2x5IGRpc2FibGVkICovCi0gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCAmJiBjb25maWcuc3RhdHVzICE9IFN0YXR1cy5ESVNBQkxFRCkgewotICAgICAgICAgICAgY29uZmlnLnN0YXR1cyA9IFN0YXR1cy5ESVNBQkxFRDsKLSAgICAgICAgICAgIGNvbmZpZy5kaXNhYmxlUmVhc29uID0gcmVhc29uOwotICAgICAgICAgICAgbmV0d29yayA9IGNvbmZpZzsKLSAgICAgICAgfQotICAgICAgICBpZiAobmV0d29yayAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzZW5kQ29uZmlndXJlZE5ldHdvcmtzQ2hhbmdlZEJyb2FkY2FzdChuZXR3b3JrLAotICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NPTkZJR19DSEFOR0UpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2F2ZSB0aGUgY29uZmlndXJlZCBuZXR3b3JrcyBpbiBzdXBwbGljYW50IHRvIGRpc2sKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBpdCBzdWNjZWVkcywge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBib29sZWFuIHNhdmVDb25maWcoKSB7Ci0gICAgICAgIHJldHVybiBtV2lmaU5hdGl2ZS5zYXZlQ29uZmlnKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RhcnQgV1BTIHBpbiBtZXRob2QgY29uZmlndXJhdGlvbiB3aXRoIHBpbiBvYnRhaW5lZAotICAgICAqIGZyb20gdGhlIGFjY2VzcyBwb2ludAotICAgICAqIEBwYXJhbSBjb25maWcgV1BTIGNvbmZpZ3VyYXRpb24KLSAgICAgKiBAcmV0dXJuIFdwcyByZXN1bHQgY29udGFpbmluZyBzdGF0dXMgYW5kIHBpbgotICAgICAqLwotICAgIFdwc1Jlc3VsdCBzdGFydFdwc1dpdGhQaW5Gcm9tQWNjZXNzUG9pbnQoV3BzSW5mbyBjb25maWcpIHsKLSAgICAgICAgV3BzUmVzdWx0IHJlc3VsdCA9IG5ldyBXcHNSZXN1bHQoKTsKLSAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnN0YXJ0V3BzUmVnaXN0cmFyKGNvbmZpZy5CU1NJRCwgY29uZmlnLnBpbikpIHsKLSAgICAgICAgICAgIC8qIFdQUyBsZWF2ZXMgYWxsIG5ldHdvcmtzIGRpc2FibGVkICovCi0gICAgICAgICAgICBtYXJrQWxsTmV0d29ya3NEaXNhYmxlZCgpOwotICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFdwc1Jlc3VsdC5TdGF0dXMuU1VDQ0VTUzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzdGFydCBXUFMgcGluIG1ldGhvZCBjb25maWd1cmF0aW9uIik7Ci0gICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gV3BzUmVzdWx0LlN0YXR1cy5GQUlMVVJFOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RhcnQgV1BTIHBpbiBtZXRob2QgY29uZmlndXJhdGlvbiB3aXRoIHBpbiBvYnRhaW5lZAotICAgICAqIGZyb20gdGhlIGRldmljZQotICAgICAqIEByZXR1cm4gV3BzUmVzdWx0IGluZGljYXRpbmcgc3RhdHVzIGFuZCBwaW4KLSAgICAgKi8KLSAgICBXcHNSZXN1bHQgc3RhcnRXcHNXaXRoUGluRnJvbURldmljZShXcHNJbmZvIGNvbmZpZykgewotICAgICAgICBXcHNSZXN1bHQgcmVzdWx0ID0gbmV3IFdwc1Jlc3VsdCgpOwotICAgICAgICByZXN1bHQucGluID0gbVdpZmlOYXRpdmUuc3RhcnRXcHNQaW5EaXNwbGF5KGNvbmZpZy5CU1NJRCk7Ci0gICAgICAgIC8qIFdQUyBsZWF2ZXMgYWxsIG5ldHdvcmtzIGRpc2FibGVkICovCi0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkocmVzdWx0LnBpbikpIHsKLSAgICAgICAgICAgIG1hcmtBbGxOZXR3b3Jrc0Rpc2FibGVkKCk7Ci0gICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gV3BzUmVzdWx0LlN0YXR1cy5TVUNDRVNTOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHN0YXJ0IFdQUyBwaW4gbWV0aG9kIGNvbmZpZ3VyYXRpb24iKTsKLSAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBXcHNSZXN1bHQuU3RhdHVzLkZBSUxVUkU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdGFydCBXUFMgcHVzaCBidXR0b24gY29uZmlndXJhdGlvbgotICAgICAqIEBwYXJhbSBjb25maWcgV1BTIGNvbmZpZ3VyYXRpb24KLSAgICAgKiBAcmV0dXJuIFdwc1Jlc3VsdCBpbmRpY2F0aW5nIHN0YXR1cyBhbmQgcGluCi0gICAgICovCi0gICAgV3BzUmVzdWx0IHN0YXJ0V3BzUGJjKFdwc0luZm8gY29uZmlnKSB7Ci0gICAgICAgIFdwc1Jlc3VsdCByZXN1bHQgPSBuZXcgV3BzUmVzdWx0KCk7Ci0gICAgICAgIGlmIChtV2lmaU5hdGl2ZS5zdGFydFdwc1BiYyhjb25maWcuQlNTSUQpKSB7Ci0gICAgICAgICAgICAvKiBXUFMgbGVhdmVzIGFsbCBuZXR3b3JrcyBkaXNhYmxlZCAqLwotICAgICAgICAgICAgbWFya0FsbE5ldHdvcmtzRGlzYWJsZWQoKTsKLSAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBXcHNSZXN1bHQuU3RhdHVzLlNVQ0NFU1M7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc3RhcnQgV1BTIHB1c2ggYnV0dG9uIGNvbmZpZ3VyYXRpb24iKTsKLSAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBXcHNSZXN1bHQuU3RhdHVzLkZBSUxVUkU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGZXRjaCB0aGUgbGluayBwcm9wZXJ0aWVzIGZvciBhIGdpdmVuIG5ldHdvcmsgaWQKLSAgICAgKiBAcmV0dXJuIExpbmtQcm9wZXJ0aWVzIGZvciB0aGUgZ2l2ZW4gbmV0d29yayBpZAotICAgICAqLwotICAgIExpbmtQcm9wZXJ0aWVzIGdldExpbmtQcm9wZXJ0aWVzKGludCBuZXRJZCkgewotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7Ci0gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkgcmV0dXJuIG5ldyBMaW5rUHJvcGVydGllcyhjb25maWcubGlua1Byb3BlcnRpZXMpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBzZXQgSVAgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBuZXR3b3JrIGlkCi0gICAgICovCi0gICAgdm9pZCBzZXRMaW5rUHJvcGVydGllcyhpbnQgbmV0SWQsIExpbmtQcm9wZXJ0aWVzIGxpbmtQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKLSAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBhZGQgb2xkIHByb3h5IGRldGFpbHMgLSBUT0RPIC0gaXMgdGhpcyBzdGlsbCBuZWVkZWQ/Ci0gICAgICAgICAgICBpZihjb25maWcubGlua1Byb3BlcnRpZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLnNldEh0dHBQcm94eShjb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uZmlnLmxpbmtQcm9wZXJ0aWVzID0gbGlua1Byb3BlcnRpZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBjbGVhciBJUCBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIG5ldHdvcmsgaWQKLSAgICAgKiBAcGFyYW0gbmV0d29yayBpZAotICAgICAqLwotICAgIHZvaWQgY2xlYXJMaW5rUHJvcGVydGllcyhpbnQgbmV0SWQpIHsKLSAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnID0gbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQobmV0SWQpOwotICAgICAgICBpZiAoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLmxpbmtQcm9wZXJ0aWVzICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIENsZWFyIGV2ZXJ5dGhpbmcgZXhjZXB0IHByb3h5Ci0gICAgICAgICAgICBQcm94eVByb3BlcnRpZXMgcHJveHkgPSBjb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCk7Ci0gICAgICAgICAgICBjb25maWcubGlua1Byb3BlcnRpZXMuY2xlYXIoKTsKLSAgICAgICAgICAgIGNvbmZpZy5saW5rUHJvcGVydGllcy5zZXRIdHRwUHJveHkocHJveHkpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBGZXRjaCB0aGUgcHJveHkgcHJvcGVydGllcyBmb3IgYSBnaXZlbiBuZXR3b3JrIGlkCi0gICAgICogQHBhcmFtIG5ldHdvcmsgaWQKLSAgICAgKiBAcmV0dXJuIFByb3h5UHJvcGVydGllcyBmb3IgdGhlIG5ldHdvcmsgaWQKLSAgICAgKi8KLSAgICBQcm94eVByb3BlcnRpZXMgZ2V0UHJveHlQcm9wZXJ0aWVzKGludCBuZXRJZCkgewotICAgICAgICBMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IGdldExpbmtQcm9wZXJ0aWVzKG5ldElkKTsKLSAgICAgICAgaWYgKGxpbmtQcm9wZXJ0aWVzICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUHJveHlQcm9wZXJ0aWVzKGxpbmtQcm9wZXJ0aWVzLmdldEh0dHBQcm94eSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gaWYgdGhlIHNwZWNpZmllZCBuZXR3b3JrIGlzIHVzaW5nIHN0YXRpYyBJUAotICAgICAqIEBwYXJhbSBuZXR3b3JrIGlkCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdXNpbmcgc3RhdGljIGlwIGZvciBuZXRJZAotICAgICAqLwotICAgIGJvb2xlYW4gaXNVc2luZ1N0YXRpY0lwKGludCBuZXRJZCkgewotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7Ci0gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCAmJiBjb25maWcuaXBBc3NpZ25tZW50ID09IElwQXNzaWdubWVudC5TVEFUSUMpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gYSBzaW5nbGUgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIG1hZGUuCi0gICAgICogQHBhcmFtIG5ldHdvcmsgVGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiB0aGF0IGNoYW5nZWQuCi0gICAgICogQHBhcmFtIHJlYXNvbiBUaGUgcmVhc29uIGZvciB0aGUgY2hhbmdlLCBzaG91bGQgYmUgb25lIG9mIFdpZmlNYW5hZ2VyLkNIQU5HRV9SRUFTT05fQURERUQsCi0gICAgICogV2lmaU1hbmFnZXIuQ0hBTkdFX1JFQVNPTl9SRU1PVkVELCBvciBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NIQU5HRS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoV2lmaUNvbmZpZ3VyYXRpb24gbmV0d29yaywKLSAgICAgICAgICAgIGludCByZWFzb24pIHsKLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuQ09ORklHVVJFRF9ORVRXT1JLU19DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTVVMVElQTEVfTkVUV09SS1NfQ0hBTkdFRCwgZmFsc2UpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfV0lGSV9DT05GSUdVUkFUSU9OLCBuZXR3b3JrKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX0NIQU5HRV9SRUFTT04sIHJlYXNvbik7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIG11bHRpcGxlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFyZSBtYWRlLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZW5kQ29uZmlndXJlZE5ldHdvcmtzQ2hhbmdlZEJyb2FkY2FzdCgpIHsKLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuQ09ORklHVVJFRF9ORVRXT1JLU19DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTVVMVElQTEVfTkVUV09SS1NfQ0hBTkdFRCwgdHJ1ZSk7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgdm9pZCBsb2FkQ29uZmlndXJlZE5ldHdvcmtzKCkgewotICAgICAgICBTdHJpbmcgbGlzdFN0ciA9IG1XaWZpTmF0aXZlLmxpc3ROZXR3b3JrcygpOwotICAgICAgICBtTGFzdFByaW9yaXR5ID0gMDsKLQotICAgICAgICBtQ29uZmlndXJlZE5ldHdvcmtzLmNsZWFyKCk7Ci0gICAgICAgIG1OZXR3b3JrSWRzLmNsZWFyKCk7Ci0KLSAgICAgICAgaWYgKGxpc3RTdHIgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBTdHJpbmdbXSBsaW5lcyA9IGxpc3RTdHIuc3BsaXQoIlxuIik7Ci0gICAgICAgIC8vIFNraXAgdGhlIGZpcnN0IGxpbmUsIHdoaWNoIGlzIGEgaGVhZGVyCi0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IGxpbmVzW2ldLnNwbGl0KCJcdCIpOwotICAgICAgICAgICAgLy8gbmV0d29yay1pZCB8IHNzaWQgfCBic3NpZCB8IGZsYWdzCi0gICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgV2lmaUNvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLm5ldHdvcmtJZCA9IEludGVnZXIucGFyc2VJbnQocmVzdWx0WzBdKTsKLSAgICAgICAgICAgIH0gY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gcmVhZCBuZXR3b3JrLWlkICciICsgcmVzdWx0WzBdICsgIiciKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMykgewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbM10uaW5kZXhPZigiW0NVUlJFTlRdIikgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zdGF0dXMgPSBXaWZpQ29uZmlndXJhdGlvbi5TdGF0dXMuQ1VSUkVOVDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRbM10uaW5kZXhPZigiW0RJU0FCTEVEXSIpICE9IC0xKQotICAgICAgICAgICAgICAgICAgICBjb25maWcuc3RhdHVzID0gV2lmaUNvbmZpZ3VyYXRpb24uU3RhdHVzLkRJU0FCTEVEOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN0YXR1cyA9IFdpZmlDb25maWd1cmF0aW9uLlN0YXR1cy5FTkFCTEVEOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25maWcuc3RhdHVzID0gV2lmaUNvbmZpZ3VyYXRpb24uU3RhdHVzLkVOQUJMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWFkTmV0d29ya1ZhcmlhYmxlcyhjb25maWcpOwotICAgICAgICAgICAgaWYgKGNvbmZpZy5wcmlvcml0eSA+IG1MYXN0UHJpb3JpdHkpIHsKLSAgICAgICAgICAgICAgICBtTGFzdFByaW9yaXR5ID0gY29uZmlnLnByaW9yaXR5OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uZmlnLmlwQXNzaWdubWVudCA9IElwQXNzaWdubWVudC5ESENQOwotICAgICAgICAgICAgY29uZmlnLnByb3h5U2V0dGluZ3MgPSBQcm94eVNldHRpbmdzLk5PTkU7Ci0KLSAgICAgICAgICAgIGlmIChtTmV0d29ya0lkcy5jb250YWluc0tleShjb25maWdLZXkoY29uZmlnKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGF0IFNTSUQgaXMgYWxyZWFkeSBrbm93biwganVzdCBpZ25vcmUgdGhpcyBkdXBsaWNhdGUgZW50cnkKLSAgICAgICAgICAgICAgICBpZiAoVkRCRykgbG9jYWxMb2coImRpc2NhcmRlZCBkdXBsaWNhdGUgbmV0d29yayIsIGNvbmZpZy5uZXR3b3JrSWQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtQ29uZmlndXJlZE5ldHdvcmtzLnB1dChjb25maWcubmV0d29ya0lkLCBjb25maWcpOwotICAgICAgICAgICAgICAgIG1OZXR3b3JrSWRzLnB1dChjb25maWdLZXkoY29uZmlnKSwgY29uZmlnLm5ldHdvcmtJZCk7Ci0gICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJsb2FkZWQgY29uZmlndXJlZCBuZXR3b3JrIiwgY29uZmlnLm5ldHdvcmtJZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZWFkSXBBbmRQcm94eUNvbmZpZ3VyYXRpb25zKCk7Ci0gICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0KLSAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJsb2FkQ29uZmlndXJlZE5ldHdvcmtzIGxvYWRlZCAiICsgbU5ldHdvcmtJZHMuc2l6ZSgpICsgIiBuZXR3b3JrcyIpOwotCi0gICAgICAgIGlmIChtTmV0d29ya0lkcy5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgLy8gbm8gbmV0d29ya3M/IExldHMgbG9nIGlmIHRoZSB3cGFfc3VwcGxpY2FudC5jb25mIGZpbGUgY29udGVudHMKLSAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihTVVBQTElDQU5UX0NPTkZJR19GSUxFKSk7Ci0gICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCItLS0gQmVnaW4gd3BhX3N1cHBsaWNhbnQuY29uZiBDb250ZW50cyAtLS0iKTsKLSAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7IGxpbmUgIT0gbnVsbDsgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChWREJHKSBsb2NhbExvZyhsaW5lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCItLS0gRW5kIHdwYV9zdXBwbGljYW50LmNvbmYgQ29udGVudHMgLS0tIik7Ci0gICAgICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGlmIChWREJHKSBsb2NhbExvZygiQ291bGQgbm90IG9wZW4gIiArIFNVUFBMSUNBTlRfQ09ORklHX0ZJTEUgKyAiLCAiICsgZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJDb3VsZCBub3QgcmVhZCAiICsgU1VQUExJQ0FOVF9DT05GSUdfRklMRSArICIsICIgKyBlKTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBpZ25vcmUgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZG4ndCBjbG9zZQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIE1hcmsgYWxsIG5ldHdvcmtzIGV4Y2VwdCBzcGVjaWZpZWQgbmV0SWQgYXMgZGlzYWJsZWQgKi8KLSAgICBwcml2YXRlIHZvaWQgbWFya0FsbE5ldHdvcmtzRGlzYWJsZWRFeGNlcHQoaW50IG5ldElkKSB7Ci0gICAgICAgIGZvcihXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgOiBtQ29uZmlndXJlZE5ldHdvcmtzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZihjb25maWcgIT0gbnVsbCAmJiBjb25maWcubmV0d29ya0lkICE9IG5ldElkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5zdGF0dXMgIT0gU3RhdHVzLkRJU0FCTEVEKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zdGF0dXMgPSBTdGF0dXMuRElTQUJMRUQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kaXNhYmxlUmVhc29uID0gV2lmaUNvbmZpZ3VyYXRpb24uRElTQUJMRURfVU5LTk9XTl9SRUFTT047Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG1hcmtBbGxOZXR3b3Jrc0Rpc2FibGVkKCkgewotICAgICAgICBtYXJrQWxsTmV0d29ya3NEaXNhYmxlZEV4Y2VwdChJTlZBTElEX05FVFdPUktfSUQpOwotICAgIH0KLQotICAgIGJvb2xlYW4gbmVlZHNVbmxvY2tlZEtleVN0b3JlKCkgewotCi0gICAgICAgIC8vIEFueSBuZXR3b3JrIHVzaW5nIGNlcnRpZmljYXRlcyB0byBhdXRoZW50aWNhdGUgYWNjZXNzIHJlcXVpcmVzCi0gICAgICAgIC8vIHVubG9ja2VkIGtleSBzdG9yZTsgdW5sZXNzIHRoZSBjZXJ0aWZpY2F0ZXMgY2FuIGJlIHN0b3JlZCB3aXRoCi0gICAgICAgIC8vIGhhcmR3YXJlIGVuY3J5cHRpb24KLQotICAgICAgICBmb3IoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnIDogbUNvbmZpZ3VyZWROZXR3b3Jrcy52YWx1ZXMoKSkgewotCi0gICAgICAgICAgICBpZiAoY29uZmlnLmFsbG93ZWRLZXlNYW5hZ2VtZW50LmdldChLZXlNZ210LldQQV9FQVApCi0gICAgICAgICAgICAgICAgICAgICYmIGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudC5nZXQoS2V5TWdtdC5JRUVFODAyMVgpKSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmVudGVycHJpc2VDb25maWcubmVlZHNTb2Z0d2FyZUJhY2tlZEtleVN0b3JlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB3cml0ZUlwQW5kUHJveHlDb25maWd1cmF0aW9ucygpIHsKLQotICAgICAgICAvKiBNYWtlIGEgY29weSAqLwotICAgICAgICBMaXN0PFdpZmlDb25maWd1cmF0aW9uPiBuZXR3b3JrcyA9IG5ldyBBcnJheUxpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+KCk7Ci0gICAgICAgIGZvcihXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgOiBtQ29uZmlndXJlZE5ldHdvcmtzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3Jrcy5hZGQobmV3IFdpZmlDb25maWd1cmF0aW9uKGNvbmZpZykpOwotICAgICAgICB9Ci0KLSAgICAgICAgRGVsYXllZERpc2tXcml0ZS53cml0ZShuZXR3b3Jrcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGVsYXllZERpc2tXcml0ZSB7Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgSGFuZGxlclRocmVhZCBzRGlza1dyaXRlSGFuZGxlclRocmVhZDsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgSGFuZGxlciBzRGlza1dyaXRlSGFuZGxlcjsKLSAgICAgICAgLyogVHJhY2tzIG11bHRpcGxlIHdyaXRlcyBvbiB0aGUgc2FtZSB0aHJlYWQgKi8KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHNXcml0ZVNlcXVlbmNlID0gMDsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJEZWxheWVkRGlza1dyaXRlIjsKLQotICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZSAoZmluYWwgTGlzdDxXaWZpQ29uZmlndXJhdGlvbj4gbmV0d29ya3MpIHsKLQotICAgICAgICAgICAgLyogRG8gYSBkZWxheWVkIHdyaXRlIHRvIGRpc2sgb24gYSBzZXBlcmF0ZSBoYW5kbGVyIHRocmVhZCAqLwotICAgICAgICAgICAgc3luY2hyb25pemVkIChEZWxheWVkRGlza1dyaXRlLmNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCsrc1dyaXRlU2VxdWVuY2UgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBzRGlza1dyaXRlSGFuZGxlclRocmVhZCA9IG5ldyBIYW5kbGVyVGhyZWFkKCJXaWZpQ29uZmlnVGhyZWFkIik7Ci0gICAgICAgICAgICAgICAgICAgIHNEaXNrV3JpdGVIYW5kbGVyVGhyZWFkLnN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHNEaXNrV3JpdGVIYW5kbGVyID0gbmV3IEhhbmRsZXIoc0Rpc2tXcml0ZUhhbmRsZXJUaHJlYWQuZ2V0TG9vcGVyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc0Rpc2tXcml0ZUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbldyaXRlQ2FsbGVkKG5ldHdvcmtzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBvbldyaXRlQ2FsbGVkKExpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+IG5ldHdvcmtzKSB7Ci0KLSAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0ID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgb3V0ID0gbmV3IERhdGFPdXRwdXRTdHJlYW0obmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlT3V0cHV0U3RyZWFtKGlwQ29uZmlnRmlsZSkpKTsKLQotICAgICAgICAgICAgICAgIG91dC53cml0ZUludChJUENPTkZJR19GSUxFX1ZFUlNJT04pOwotCi0gICAgICAgICAgICAgICAgZm9yKFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA6IG5ldHdvcmtzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gd3JpdGVUb0ZpbGUgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgTGlua1Byb3BlcnRpZXMgbGlua1Byb3BlcnRpZXMgPSBjb25maWcubGlua1Byb3BlcnRpZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbmZpZy5pcEFzc2lnbm1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNUQVRJQzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKElQX0FTU0lHTk1FTlRfS0VZKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKGNvbmZpZy5pcEFzc2lnbm1lbnQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoTGlua0FkZHJlc3MgbGlua0FkZHIgOiBsaW5rUHJvcGVydGllcy5nZXRMaW5rQWRkcmVzc2VzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihMSU5LX0FERFJFU1NfS0VZKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihsaW5rQWRkci5nZXRBZGRyZXNzKCkuZ2V0SG9zdEFkZHJlc3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQobGlua0FkZHIuZ2V0TmV0d29ya1ByZWZpeExlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJvdXRlSW5mbyByb3V0ZSA6IGxpbmtQcm9wZXJ0aWVzLmdldFJvdXRlcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoR0FURVdBWV9LRVkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua0FkZHJlc3MgZGVzdCA9IHJvdXRlLmdldERlc3RpbmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihkZXN0LmdldEFkZHJlc3MoKS5nZXRIb3N0QWRkcmVzcygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoZGVzdC5nZXROZXR3b3JrUHJlZml4TGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm91dGUuZ2V0R2F0ZXdheSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKHJvdXRlLmdldEdhdGV3YXkoKS5nZXRIb3N0QWRkcmVzcygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoSW5ldEFkZHJlc3MgaW5ldEFkZHIgOiBsaW5rUHJvcGVydGllcy5nZXREbnNlcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoRE5TX0tFWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoaW5ldEFkZHIuZ2V0SG9zdEFkZHJlc3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVUb0ZpbGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIERIQ1A6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihJUF9BU1NJR05NRU5UX0tFWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihjb25maWcuaXBBc3NpZ25tZW50LnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVRvRmlsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVU5BU1NJR05FRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWdub3JlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIklnbm9yZSBpbnZhbGlkIGlwIGFzc2lnbm1lbnQgd2hpbGUgd3JpdGluZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb25maWcucHJveHlTZXR0aW5ncykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1RBVElDOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm94eVByb3BlcnRpZXMgcHJveHlQcm9wZXJ0aWVzID0gbGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBleGNsdXNpb25MaXN0ID0gcHJveHlQcm9wZXJ0aWVzLmdldEV4Y2x1c2lvbkxpc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKFBST1hZX1NFVFRJTkdTX0tFWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihjb25maWcucHJveHlTZXR0aW5ncy50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKFBST1hZX0hPU1RfS0VZKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKHByb3h5UHJvcGVydGllcy5nZXRIb3N0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoUFJPWFlfUE9SVF9LRVkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQocHJveHlQcm9wZXJ0aWVzLmdldFBvcnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihFWENMVVNJT05fTElTVF9LRVkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoZXhjbHVzaW9uTGlzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVG9GaWxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQQUM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3h5UHJvcGVydGllcyBwcm94eVBhY1Byb3BlcnRpZXMgPSBsaW5rUHJvcGVydGllcy5nZXRIdHRwUHJveHkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKFBST1hZX1NFVFRJTkdTX0tFWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihjb25maWcucHJveHlTZXR0aW5ncy50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKFBST1hZX1BBQ19GSUxFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKHByb3h5UGFjUHJvcGVydGllcy5nZXRQYWNGaWxlVXJsKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVRvRmlsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTk9ORToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKFBST1hZX1NFVFRJTkdTX0tFWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihjb25maWcucHJveHlTZXR0aW5ncy50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVUb0ZpbGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFVOQVNTSUdORUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElnbm9yZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJZ250aGlzb3JlIGludmFsaWQgcHJveHkgc2V0dGluZ3Mgd2hpbGUgd3JpdGluZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZVRvRmlsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihJRF9LRVkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUludChjb25maWdLZXkoY29uZmlnKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWx1cmUgaW4gd3JpdGluZyAiICsgY29uZmlnLmxpbmtQcm9wZXJ0aWVzICsgZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKEVPUyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiRXJyb3Igd3JpdGluZyBkYXRhIGZpbGUiKTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgaWYgKG91dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy9RdWl0IGlmIG5vIG1vcmUgd3JpdGVzIHNlbnQKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKERlbGF5ZWREaXNrV3JpdGUuY2xhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKC0tc1dyaXRlU2VxdWVuY2UgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc0Rpc2tXcml0ZUhhbmRsZXIuZ2V0TG9vcGVyKCkucXVpdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc0Rpc2tXcml0ZUhhbmRsZXIgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgc0Rpc2tXcml0ZUhhbmRsZXJUaHJlYWQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBsb2dlKFN0cmluZyBzKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsIHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlYWRJcEFuZFByb3h5Q29uZmlndXJhdGlvbnMoKSB7Ci0KLSAgICAgICAgRGF0YUlucHV0U3RyZWFtIGluID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGluID0gbmV3IERhdGFJbnB1dFN0cmVhbShuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKAotICAgICAgICAgICAgICAgICAgICBpcENvbmZpZ0ZpbGUpKSk7Ci0KLSAgICAgICAgICAgIGludCB2ZXJzaW9uID0gaW4ucmVhZEludCgpOwotICAgICAgICAgICAgaWYgKHZlcnNpb24gIT0gMiAmJiB2ZXJzaW9uICE9IDEpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJCYWQgdmVyc2lvbiBvbiBJUCBjb25maWd1cmF0aW9uIGZpbGUsIGlnbm9yZSByZWFkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgIGludCBpZCA9IC0xOwotICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgaXMgREhDUCB3aXRoIG5vIHByb3h5Ci0gICAgICAgICAgICAgICAgSXBBc3NpZ25tZW50IGlwQXNzaWdubWVudCA9IElwQXNzaWdubWVudC5ESENQOwotICAgICAgICAgICAgICAgIFByb3h5U2V0dGluZ3MgcHJveHlTZXR0aW5ncyA9IFByb3h5U2V0dGluZ3MuTk9ORTsKLSAgICAgICAgICAgICAgICBMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IG5ldyBMaW5rUHJvcGVydGllcygpOwotICAgICAgICAgICAgICAgIFN0cmluZyBwcm94eUhvc3QgPSBudWxsOwotICAgICAgICAgICAgICAgIFN0cmluZyBwYWNGaWxlVXJsID0gbnVsbDsKLSAgICAgICAgICAgICAgICBpbnQgcHJveHlQb3J0ID0gLTE7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGV4Y2x1c2lvbkxpc3QgPSBudWxsOwotICAgICAgICAgICAgICAgIFN0cmluZyBrZXk7Ci0KLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IGluLnJlYWRVVEYoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkuZXF1YWxzKElEX0tFWSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGluLnJlYWRJbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LmVxdWFscyhJUF9BU1NJR05NRU5UX0tFWSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFzc2lnbm1lbnQgPSBJcEFzc2lnbm1lbnQudmFsdWVPZihpbi5yZWFkVVRGKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKExJTktfQUREUkVTU19LRVkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua0FkZHJlc3MgbGlua0FkZHIgPSBuZXcgTGlua0FkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrVXRpbHMubnVtZXJpY1RvSW5ldEFkZHJlc3MoaW4ucmVhZFVURigpKSwgaW4ucmVhZEludCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rUHJvcGVydGllcy5hZGRMaW5rQWRkcmVzcyhsaW5rQWRkcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoR0FURVdBWV9LRVkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua0FkZHJlc3MgZGVzdCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5ldEFkZHJlc3MgZ2F0ZXdheSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHN1cHBvcnRlZCBkZWZhdWx0IGdhdGV3YXlzIC0gbGVhdmUgdGhlIGRlc3QvcHJlZml4IGVtcHR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkgPSBOZXR3b3JrVXRpbHMubnVtZXJpY1RvSW5ldEFkZHJlc3MoaW4ucmVhZFVURigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW4ucmVhZEludCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSBuZXcgTGlua0FkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlscy5udW1lcmljVG9JbmV0QWRkcmVzcyhpbi5yZWFkVVRGKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi5yZWFkSW50KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbi5yZWFkSW50KCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheSA9IE5ldHdvcmtVdGlscy5udW1lcmljVG9JbmV0QWRkcmVzcyhpbi5yZWFkVVRGKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLmFkZFJvdXRlKG5ldyBSb3V0ZUluZm8oZGVzdCwgZ2F0ZXdheSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKEROU19LRVkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMuYWRkRG5zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya1V0aWxzLm51bWVyaWNUb0luZXRBZGRyZXNzKGluLnJlYWRVVEYoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKFBST1hZX1NFVFRJTkdTX0tFWSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eVNldHRpbmdzID0gUHJveHlTZXR0aW5ncy52YWx1ZU9mKGluLnJlYWRVVEYoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoUFJPWFlfSE9TVF9LRVkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlIb3N0ID0gaW4ucmVhZFVURigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKFBST1hZX1BPUlRfS0VZKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5UG9ydCA9IGluLnJlYWRJbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LmVxdWFscyhQUk9YWV9QQUNfRklMRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNGaWxlVXJsID0gaW4ucmVhZFVURigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKEVYQ0xVU0lPTl9MSVNUX0tFWSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdXNpb25MaXN0ID0gaW4ucmVhZFVURigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKEVPUykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWdub3JlIHVua25vd24ga2V5ICIgKyBrZXkgKyAid2hpbGUgcmVhZGluZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWdub3JlIGludmFsaWQgYWRkcmVzcyB3aGlsZSByZWFkaW5nIiArIGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaWQgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnID0gbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbU5ldHdvcmtJZHMuZ2V0KGlkKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJjb25maWd1cmF0aW9uIGZvdW5kIGZvciBtaXNzaW5nIG5ldHdvcmssIGlnbm9yZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5saW5rUHJvcGVydGllcyA9IGxpbmtQcm9wZXJ0aWVzOwotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpcEFzc2lnbm1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNUQVRJQzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIERIQ1A6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5pcEFzc2lnbm1lbnQgPSBpcEFzc2lnbm1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVU5BU1NJR05FRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiQlVHOiBGb3VuZCBVTkFTU0lHTkVEIElQIG9uIGZpbGUsIHVzZSBESENQIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5pcEFzc2lnbm1lbnQgPSBJcEFzc2lnbm1lbnQuREhDUDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWdub3JlIGludmFsaWQgaXAgYXNzaWdubWVudCB3aGlsZSByZWFkaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3h5U2V0dGluZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNUQVRJQzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnByb3h5U2V0dGluZ3MgPSBwcm94eVNldHRpbmdzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm94eVByb3BlcnRpZXMgcHJveHlQcm9wZXJ0aWVzID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm94eVByb3BlcnRpZXMocHJveHlIb3N0LCBwcm94eVBvcnQsIGV4Y2x1c2lvbkxpc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rUHJvcGVydGllcy5zZXRIdHRwUHJveHkocHJveHlQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQQUM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wcm94eVNldHRpbmdzID0gcHJveHlTZXR0aW5nczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJveHlQcm9wZXJ0aWVzIHByb3h5UGFjUHJvcGVydGllcyA9IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm94eVByb3BlcnRpZXMocGFjRmlsZVVybCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLnNldEh0dHBQcm94eShwcm94eVBhY1Byb3BlcnRpZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5PTkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wcm94eVNldHRpbmdzID0gcHJveHlTZXR0aW5nczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBVTkFTU0lHTkVEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJCVUc6IEZvdW5kIFVOQVNTSUdORUQgcHJveHkgb24gZmlsZSwgdXNlIE5PTkUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnByb3h5U2V0dGluZ3MgPSBQcm94eVNldHRpbmdzLk5PTkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIklnbm9yZSBpbnZhbGlkIHByb3h5IHNldHRpbmdzIHdoaWxlIHJlYWRpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIk1pc3NpbmcgaWQgd2hpbGUgcGFyc2luZyBjb25maWd1cmF0aW9uIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChFT0ZFeGNlcHRpb24gaWdub3JlKSB7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZ2UoIkVycm9yIHBhcnNpbmcgY29uZmlndXJhdGlvbiIgKyBlKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGlmIChpbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaW4uY2xvc2UoKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgTmV0d29ya1VwZGF0ZVJlc3VsdCBhZGRPclVwZGF0ZU5ldHdvcmtOYXRpdmUoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIElmIHRoZSBzdXBwbGllZCBuZXR3b3JrSWQgaXMgSU5WQUxJRF9ORVRXT1JLX0lELCB3ZSBjcmVhdGUgYSBuZXcgZW1wdHkKLSAgICAgICAgICogbmV0d29yayBjb25maWd1cmF0aW9uLiBPdGhlcndpc2UsIHRoZSBuZXR3b3JrSWQgc2hvdWxkCi0gICAgICAgICAqIHJlZmVyIHRvIGFuIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAqLwotCi0gICAgICAgIGlmIChWREJHKSBsb2NhbExvZygiYWRkT3JVcGRhdGVOZXR3b3JrTmF0aXZlICIgKyBjb25maWcuZ2V0UHJpbnRhYmxlU3NpZCgpKTsKLQotICAgICAgICBpbnQgbmV0SWQgPSBjb25maWcubmV0d29ya0lkOwotICAgICAgICBib29sZWFuIG5ld05ldHdvcmsgPSBmYWxzZTsKLSAgICAgICAgLy8gbmV0d29ya0lkIG9mIElOVkFMSURfTkVUV09SS19JRCBtZWFucyB3ZSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBuZXR3b3JrCi0gICAgICAgIGlmIChuZXRJZCA9PSBJTlZBTElEX05FVFdPUktfSUQpIHsKLSAgICAgICAgICAgIEludGVnZXIgc2F2ZWROZXRJZCA9IG1OZXR3b3JrSWRzLmdldChjb25maWdLZXkoY29uZmlnKSk7Ci0gICAgICAgICAgICBpZiAoc2F2ZWROZXRJZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbmV0SWQgPSBzYXZlZE5ldElkOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBuZXdOZXR3b3JrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBuZXRJZCA9IG1XaWZpTmF0aXZlLmFkZE5ldHdvcmsoKTsKLSAgICAgICAgICAgICAgICBpZiAobmV0SWQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBhZGQgYSBuZXR3b3JrISIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5ldHdvcmtVcGRhdGVSZXN1bHQoSU5WQUxJRF9ORVRXT1JLX0lEKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIHVwZGF0ZUZhaWxlZCA9IHRydWU7Ci0KLSAgICAgICAgc2V0VmFyaWFibGVzOiB7Ci0KLSAgICAgICAgICAgIGlmIChjb25maWcuU1NJRCAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgICFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLnNzaWRWYXJOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLlNTSUQpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCBTU0lEOiAiK2NvbmZpZy5TU0lEKTsKLSAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb25maWcuQlNTSUQgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAhbVdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5ic3NpZFZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuQlNTSUQpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCBCU1NJRDogIitjb25maWcuQlNTSUQpOwotICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nIGFsbG93ZWRLZXlNYW5hZ2VtZW50U3RyaW5nID0KLSAgICAgICAgICAgICAgICBtYWtlU3RyaW5nKGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudCwgV2lmaUNvbmZpZ3VyYXRpb24uS2V5TWdtdC5zdHJpbmdzKTsKLSAgICAgICAgICAgIGlmIChjb25maWcuYWxsb3dlZEtleU1hbmFnZW1lbnQuY2FyZGluYWxpdHkoKSAhPSAwICYmCi0gICAgICAgICAgICAgICAgICAgICFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLktleU1nbXQudmFyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRLZXlNYW5hZ2VtZW50U3RyaW5nKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoImZhaWxlZCB0byBzZXQga2V5X21nbXQ6ICIrCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkS2V5TWFuYWdlbWVudFN0cmluZyk7Ci0gICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgYWxsb3dlZFByb3RvY29sc1N0cmluZyA9Ci0gICAgICAgICAgICAgICAgbWFrZVN0cmluZyhjb25maWcuYWxsb3dlZFByb3RvY29scywgV2lmaUNvbmZpZ3VyYXRpb24uUHJvdG9jb2wuc3RyaW5ncyk7Ci0gICAgICAgICAgICBpZiAoY29uZmlnLmFsbG93ZWRQcm90b2NvbHMuY2FyZGluYWxpdHkoKSAhPSAwICYmCi0gICAgICAgICAgICAgICAgICAgICFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLlByb3RvY29sLnZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUHJvdG9jb2xzU3RyaW5nKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoImZhaWxlZCB0byBzZXQgcHJvdG86ICIrCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUHJvdG9jb2xzU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN0cmluZyBhbGxvd2VkQXV0aEFsZ29yaXRobXNTdHJpbmcgPQotICAgICAgICAgICAgICAgIG1ha2VTdHJpbmcoY29uZmlnLmFsbG93ZWRBdXRoQWxnb3JpdGhtcywgV2lmaUNvbmZpZ3VyYXRpb24uQXV0aEFsZ29yaXRobS5zdHJpbmdzKTsKLSAgICAgICAgICAgIGlmIChjb25maWcuYWxsb3dlZEF1dGhBbGdvcml0aG1zLmNhcmRpbmFsaXR5KCkgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAhbVdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5BdXRoQWxnb3JpdGhtLnZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkQXV0aEFsZ29yaXRobXNTdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCBhdXRoX2FsZzogIisKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRBdXRoQWxnb3JpdGhtc1N0cmluZyk7Ci0gICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgYWxsb3dlZFBhaXJ3aXNlQ2lwaGVyc1N0cmluZyA9Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VTdHJpbmcoY29uZmlnLmFsbG93ZWRQYWlyd2lzZUNpcGhlcnMsCi0gICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLlBhaXJ3aXNlQ2lwaGVyLnN0cmluZ3MpOwotICAgICAgICAgICAgaWYgKGNvbmZpZy5hbGxvd2VkUGFpcndpc2VDaXBoZXJzLmNhcmRpbmFsaXR5KCkgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAhbVdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5QYWlyd2lzZUNpcGhlci52YXJOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFBhaXJ3aXNlQ2lwaGVyc1N0cmluZykpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJmYWlsZWQgdG8gc2V0IHBhaXJ3aXNlOiAiKwotICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFBhaXJ3aXNlQ2lwaGVyc1N0cmluZyk7Ci0gICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgYWxsb3dlZEdyb3VwQ2lwaGVyc1N0cmluZyA9Ci0gICAgICAgICAgICAgICAgbWFrZVN0cmluZyhjb25maWcuYWxsb3dlZEdyb3VwQ2lwaGVycywgV2lmaUNvbmZpZ3VyYXRpb24uR3JvdXBDaXBoZXIuc3RyaW5ncyk7Ci0gICAgICAgICAgICBpZiAoY29uZmlnLmFsbG93ZWRHcm91cENpcGhlcnMuY2FyZGluYWxpdHkoKSAhPSAwICYmCi0gICAgICAgICAgICAgICAgICAgICFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkdyb3VwQ2lwaGVyLnZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JvdXBDaXBoZXJzU3RyaW5nKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoImZhaWxlZCB0byBzZXQgZ3JvdXA6ICIrCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JvdXBDaXBoZXJzU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFByZXZlbnQgY2xpZW50IHNjcmV3LXVwIGJ5IHBhc3NpbmcgaW4gYSBXaWZpQ29uZmlndXJhdGlvbiB3ZSBnYXZlIGl0Ci0gICAgICAgICAgICAvLyBieSBwcmV2ZW50aW5nICIqIiBhcyBhIGtleS4KLSAgICAgICAgICAgIGlmIChjb25maWcucHJlU2hhcmVkS2V5ICE9IG51bGwgJiYgIWNvbmZpZy5wcmVTaGFyZWRLZXkuZXF1YWxzKCIqIikgJiYKLSAgICAgICAgICAgICAgICAgICAgIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkLAotICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24ucHNrVmFyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wcmVTaGFyZWRLZXkpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCBwc2siKTsKLSAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gaGFzU2V0S2V5ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY29uZmlnLndlcEtleXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnLndlcEtleXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBjbGllbnQgc2NyZXctdXAgYnkgcGFzc2luZyBpbiBhIFdpZmlDb25maWd1cmF0aW9uIHdlIGdhdmUgaXQKLSAgICAgICAgICAgICAgICAgICAgLy8gYnkgcHJldmVudGluZyAiKiIgYXMgYSBrZXkuCi0gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcud2VwS2V5c1tpXSAhPSBudWxsICYmICFjb25maWcud2VwS2V5c1tpXS5lcXVhbHMoIioiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLndlcEtleVZhck5hbWVzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLndlcEtleXNbaV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCB3ZXBfa2V5IiArIGkgKyAiOiAiICsgY29uZmlnLndlcEtleXNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc1NldEtleSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChoYXNTZXRLZXkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi53ZXBUeEtleUlkeFZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b1N0cmluZyhjb25maWcud2VwVHhLZXlJbmRleCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoImZhaWxlZCB0byBzZXQgd2VwX3R4X2tleWlkeDogIiArIGNvbmZpZy53ZXBUeEtleUluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLnByaW9yaXR5VmFyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9TdHJpbmcoY29uZmlnLnByaW9yaXR5KSkpIHsKLSAgICAgICAgICAgICAgICBsb2dlKGNvbmZpZy5TU0lEICsgIjogZmFpbGVkIHRvIHNldCBwcmlvcml0eTogIgotICAgICAgICAgICAgICAgICAgICAgICAgK2NvbmZpZy5wcmlvcml0eSk7Ci0gICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29uZmlnLmhpZGRlblNTSUQgJiYgIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkLAotICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uaGlkZGVuU1NJRFZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvU3RyaW5nKGNvbmZpZy5oaWRkZW5TU0lEID8gMSA6IDApKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoY29uZmlnLlNTSUQgKyAiOiBmYWlsZWQgdG8gc2V0IGhpZGRlblNTSUQ6ICIrCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuaGlkZGVuU1NJRCk7Ci0gICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29uZmlnLmVudGVycHJpc2VDb25maWcgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICBjb25maWcuZW50ZXJwcmlzZUNvbmZpZy5nZXRFYXBNZXRob2QoKSAhPSBXaWZpRW50ZXJwcmlzZUNvbmZpZy5FYXAuTk9ORSkgewotCi0gICAgICAgICAgICAgICAgV2lmaUVudGVycHJpc2VDb25maWcgZW50ZXJwcmlzZUNvbmZpZyA9IGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnOwotCi0gICAgICAgICAgICAgICAgaWYgKGVudGVycHJpc2VDb25maWcubmVlZHNLZXlTdG9yZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICAgKiBLZXlndWFyZCBzZXR0aW5ncyBtYXkgZXZlbnR1YWxseSBiZSBjb250cm9sbGVkIGJ5IGRldmljZSBwb2xpY3kuCi0gICAgICAgICAgICAgICAgICAgICAqIFdlIGNoZWNrIGhlcmUgaWYga2V5c3RvcmUgaXMgdW5sb2NrZWQgYmVmb3JlIGluc3RhbGxpbmcKLSAgICAgICAgICAgICAgICAgICAgICogY3JlZGVudGlhbHMuCi0gICAgICAgICAgICAgICAgICAgICAqIFRPRE86IERvIHdlIG5lZWQgYSBkaWFsb2cgaGVyZSA/Ci0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBpZiAobUtleVN0b3JlLnN0YXRlKCkgIT0gS2V5U3RvcmUuU3RhdGUuVU5MT0NLRUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoY29uZmlnLlNTSUQgKyAiOiBrZXkgc3RvcmUgaXMgbG9ja2VkIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uZmlnIHBhc3NlZCBtYXkgaW5jbHVkZSBvbmx5IGZpZWxkcyBiZWluZyB1cGRhdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICogSW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIGtleSBpZCwgZmV0Y2ggdW5pbml0aWFsaXplZAotICAgICAgICAgICAgICAgICAgICAgICAgICogZmllbGRzIGZyb20gdGhlIGN1cnJlbnRseSB0cmFja2VkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY3VycmVudENvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBrZXlJZCA9IGNvbmZpZy5nZXRLZXlJZEZvckNyZWRlbnRpYWxzKGN1cnJlbnRDb25maWcpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVudGVycHJpc2VDb25maWcuaW5zdGFsbEtleXMobUtleVN0b3JlLCBrZXlJZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKGNvbmZpZy5TU0lEICsgIjogZmFpbGVkIHRvIGluc3RhbGwga2V5cyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoY29uZmlnLlNTSUQgKyAiIGludmFsaWQgY29uZmlnIGZvciBrZXkgaW5zdGFsbGF0aW9uIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBlbnRlcnByaXNlRmllbGRzID0gZW50ZXJwcmlzZUNvbmZpZy5nZXRGaWVsZHMoKTsKLSAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBrZXkgOiBlbnRlcnByaXNlRmllbGRzLmtleVNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBlbnRlcnByaXNlRmllbGRzLmdldChrZXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGVycHJpc2VDb25maWcucmVtb3ZlS2V5cyhtS2V5U3RvcmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoY29uZmlnLlNTSUQgKyAiOiBmYWlsZWQgdG8gc2V0ICIgKyBrZXkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogIiArIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXBkYXRlRmFpbGVkID0gZmFsc2U7Ci0gICAgICAgIH0gLy9lbmQgb2Ygc2V0VmFyaWFibGVzCi0KLSAgICAgICAgaWYgKHVwZGF0ZUZhaWxlZCkgewotICAgICAgICAgICAgaWYgKG5ld05ldHdvcmspIHsKLSAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZW1vdmVOZXR3b3JrKG5ldElkKTsKLSAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IGEgbmV0d29yayB2YXJpYWJsZSwgcmVtb3ZlZCBuZXR3b3JrOiAiICsgbmV0SWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrVXBkYXRlUmVzdWx0KElOVkFMSURfTkVUV09SS19JRCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBBbiB1cGRhdGUgb2YgdGhlIG5ldHdvcmsgdmFyaWFibGVzIHJlcXVpcmVzIHJlYWRpbmcgdGhlbQotICAgICAgICAgKiBiYWNrIGZyb20gdGhlIHN1cHBsaWNhbnQgdG8gdXBkYXRlIG1Db25maWd1cmVkTmV0d29ya3MuCi0gICAgICAgICAqIFRoaXMgaXMgYmVjYXVzZSBzb21lIG9mIHRoZSB2YXJpYWJsZXMgKFNTSUQsIHdlcCBrZXlzICYKLSAgICAgICAgICogcGFzc3BocmFzZXMpIHJlZmxlY3QgZGlmZmVyZW50IHZhbHVlcyB3aGVuIHJlYWQgYmFjayB0aGFuCi0gICAgICAgICAqIHdoZW4gd3JpdHRlbi4gRm9yIGV4YW1wbGUsIHdlcCBrZXkgaXMgc3RvcmVkIGFzICogaXJyZXNwZWN0aXZlCi0gICAgICAgICAqIG9mIHRoZSB2YWx1ZSBzZW50IHRvIHRoZSBzdXBwbGljYW50Ci0gICAgICAgICAqLwotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjdXJyZW50Q29uZmlnID0gbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQobmV0SWQpOwotICAgICAgICBpZiAoY3VycmVudENvbmZpZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBjdXJyZW50Q29uZmlnID0gbmV3IFdpZmlDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgICAgICBjdXJyZW50Q29uZmlnLmlwQXNzaWdubWVudCA9IElwQXNzaWdubWVudC5ESENQOwotICAgICAgICAgICAgY3VycmVudENvbmZpZy5wcm94eVNldHRpbmdzID0gUHJveHlTZXR0aW5ncy5OT05FOwotICAgICAgICAgICAgY3VycmVudENvbmZpZy5uZXR3b3JrSWQgPSBuZXRJZDsKLSAgICAgICAgfQotCi0gICAgICAgIHJlYWROZXR3b3JrVmFyaWFibGVzKGN1cnJlbnRDb25maWcpOwotCi0gICAgICAgIG1Db25maWd1cmVkTmV0d29ya3MucHV0KG5ldElkLCBjdXJyZW50Q29uZmlnKTsKLSAgICAgICAgbU5ldHdvcmtJZHMucHV0KGNvbmZpZ0tleShjdXJyZW50Q29uZmlnKSwgbmV0SWQpOwotCi0gICAgICAgIE5ldHdvcmtVcGRhdGVSZXN1bHQgcmVzdWx0ID0gd3JpdGVJcEFuZFByb3h5Q29uZmlndXJhdGlvbnNPbkNoYW5nZShjdXJyZW50Q29uZmlnLCBjb25maWcpOwotICAgICAgICByZXN1bHQuc2V0SXNOZXdOZXR3b3JrKG5ld05ldHdvcmspOwotICAgICAgICByZXN1bHQuc2V0TmV0d29ya0lkKG5ldElkKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiBDb21wYXJlIGN1cnJlbnQgYW5kIG5ldyBjb25maWd1cmF0aW9uIGFuZCB3cml0ZSB0byBmaWxlIG9uIGNoYW5nZSAqLwotICAgIHByaXZhdGUgTmV0d29ya1VwZGF0ZVJlc3VsdCB3cml0ZUlwQW5kUHJveHlDb25maWd1cmF0aW9uc09uQ2hhbmdlKAotICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY3VycmVudENvbmZpZywKLSAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIG5ld0NvbmZpZykgewotICAgICAgICBib29sZWFuIGlwQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBib29sZWFuIHByb3h5Q2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IG51bGw7Ci0KLSAgICAgICAgc3dpdGNoIChuZXdDb25maWcuaXBBc3NpZ25tZW50KSB7Ci0gICAgICAgICAgICBjYXNlIFNUQVRJQzoKLSAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPExpbmtBZGRyZXNzPiBjdXJyZW50TGlua0FkZHJlc3NlcyA9IGN1cnJlbnRDb25maWcubGlua1Byb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRMaW5rQWRkcmVzc2VzKCk7Ci0gICAgICAgICAgICAgICAgQ29sbGVjdGlvbjxMaW5rQWRkcmVzcz4gbmV3TGlua0FkZHJlc3NlcyA9IG5ld0NvbmZpZy5saW5rUHJvcGVydGllcwotICAgICAgICAgICAgICAgICAgICAgICAgLmdldExpbmtBZGRyZXNzZXMoKTsKLSAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPEluZXRBZGRyZXNzPiBjdXJyZW50RG5zZXMgPSBjdXJyZW50Q29uZmlnLmxpbmtQcm9wZXJ0aWVzLmdldERuc2VzKCk7Ci0gICAgICAgICAgICAgICAgQ29sbGVjdGlvbjxJbmV0QWRkcmVzcz4gbmV3RG5zZXMgPSBuZXdDb25maWcubGlua1Byb3BlcnRpZXMuZ2V0RG5zZXMoKTsKLSAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPFJvdXRlSW5mbz4gY3VycmVudFJvdXRlcyA9IGN1cnJlbnRDb25maWcubGlua1Byb3BlcnRpZXMuZ2V0Um91dGVzKCk7Ci0gICAgICAgICAgICAgICAgQ29sbGVjdGlvbjxSb3V0ZUluZm8+IG5ld1JvdXRlcyA9IG5ld0NvbmZpZy5saW5rUHJvcGVydGllcy5nZXRSb3V0ZXMoKTsKLQotICAgICAgICAgICAgICAgIGJvb2xlYW4gbGlua0FkZHJlc3Nlc0RpZmZlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudExpbmtBZGRyZXNzZXMuc2l6ZSgpICE9IG5ld0xpbmtBZGRyZXNzZXMuc2l6ZSgpKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIWN1cnJlbnRMaW5rQWRkcmVzc2VzLmNvbnRhaW5zQWxsKG5ld0xpbmtBZGRyZXNzZXMpOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gZG5zZXNEaWZmZXIgPSAoY3VycmVudERuc2VzLnNpemUoKSAhPSBuZXdEbnNlcy5zaXplKCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAhY3VycmVudERuc2VzLmNvbnRhaW5zQWxsKG5ld0Ruc2VzKTsKLSAgICAgICAgICAgICAgICBib29sZWFuIHJvdXRlc0RpZmZlciA9IChjdXJyZW50Um91dGVzLnNpemUoKSAhPSBuZXdSb3V0ZXMuc2l6ZSgpKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIWN1cnJlbnRSb3V0ZXMuY29udGFpbnNBbGwobmV3Um91dGVzKTsKLQotICAgICAgICAgICAgICAgIGlmICgoY3VycmVudENvbmZpZy5pcEFzc2lnbm1lbnQgIT0gbmV3Q29uZmlnLmlwQXNzaWdubWVudCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtBZGRyZXNzZXNEaWZmZXIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRuc2VzRGlmZmVyIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXNEaWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaXBDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERIQ1A6Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb25maWcuaXBBc3NpZ25tZW50ICE9IG5ld0NvbmZpZy5pcEFzc2lnbm1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaXBDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOQVNTSUdORUQ6Ci0gICAgICAgICAgICAgICAgLyogSWdub3JlICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGxvZ2UoIklnbm9yZSBpbnZhbGlkIGlwIGFzc2lnbm1lbnQgZHVyaW5nIHdyaXRlIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG5ld0NvbmZpZy5wcm94eVNldHRpbmdzKSB7Ci0gICAgICAgICAgICBjYXNlIFNUQVRJQzoKLSAgICAgICAgICAgIGNhc2UgUEFDOgotICAgICAgICAgICAgICAgIFByb3h5UHJvcGVydGllcyBuZXdIdHRwUHJveHkgPSBuZXdDb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCk7Ci0gICAgICAgICAgICAgICAgUHJveHlQcm9wZXJ0aWVzIGN1cnJlbnRIdHRwUHJveHkgPSBjdXJyZW50Q29uZmlnLmxpbmtQcm9wZXJ0aWVzLmdldEh0dHBQcm94eSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKG5ld0h0dHBQcm94eSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3h5Q2hhbmdlZCA9ICFuZXdIdHRwUHJveHkuZXF1YWxzKGN1cnJlbnRIdHRwUHJveHkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3h5Q2hhbmdlZCA9IChjdXJyZW50SHR0cFByb3h5ICE9IG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTk9ORToKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbmZpZy5wcm94eVNldHRpbmdzICE9IG5ld0NvbmZpZy5wcm94eVNldHRpbmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3h5Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTkFTU0lHTkVEOgotICAgICAgICAgICAgICAgIC8qIElnbm9yZSAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBsb2dlKCJJZ25vcmUgaW52YWxpZCBwcm94eSBjb25maWd1cmF0aW9uIGR1cmluZyB3cml0ZSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpcENoYW5nZWQpIHsKLSAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzID0gY29weUlwU2V0dGluZ3NGcm9tQ29uZmlnKGN1cnJlbnRDb25maWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY3VycmVudENvbmZpZy5pcEFzc2lnbm1lbnQgPSBuZXdDb25maWcuaXBBc3NpZ25tZW50OwotICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMgPSBjb3B5SXBTZXR0aW5nc0Zyb21Db25maWcobmV3Q29uZmlnKTsKLSAgICAgICAgICAgIGxvZygiSVAgY29uZmlnIGNoYW5nZWQgU1NJRCA9ICIgKyBjdXJyZW50Q29uZmlnLlNTSUQgKyAiIGxpbmtQcm9wZXJ0aWVzOiAiICsKLSAgICAgICAgICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIGlmICghcHJveHlDaGFuZ2VkKSB7Ci0gICAgICAgICAgICBsaW5rUHJvcGVydGllcy5zZXRIdHRwUHJveHkoY3VycmVudENvbmZpZy5saW5rUHJvcGVydGllcy5nZXRIdHRwUHJveHkoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjdXJyZW50Q29uZmlnLnByb3h5U2V0dGluZ3MgPSBuZXdDb25maWcucHJveHlTZXR0aW5nczsKLSAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLnNldEh0dHBQcm94eShuZXdDb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCkpOwotICAgICAgICAgICAgbG9nKCJwcm94eSBjaGFuZ2VkIFNTSUQgPSAiICsgY3VycmVudENvbmZpZy5TU0lEKTsKLSAgICAgICAgICAgIGlmIChsaW5rUHJvcGVydGllcy5nZXRIdHRwUHJveHkoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbG9nKCIgcHJveHlQcm9wZXJ0aWVzOiAiICsgbGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXBDaGFuZ2VkIHx8IHByb3h5Q2hhbmdlZCkgewotICAgICAgICAgICAgY3VycmVudENvbmZpZy5saW5rUHJvcGVydGllcyA9IGxpbmtQcm9wZXJ0aWVzOwotICAgICAgICAgICAgd3JpdGVJcEFuZFByb3h5Q29uZmlndXJhdGlvbnMoKTsKLSAgICAgICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KGN1cnJlbnRDb25maWcsCi0gICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkNIQU5HRV9SRUFTT05fQ09ORklHX0NIQU5HRSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrVXBkYXRlUmVzdWx0KGlwQ2hhbmdlZCwgcHJveHlDaGFuZ2VkKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIExpbmtQcm9wZXJ0aWVzIGNvcHlJcFNldHRpbmdzRnJvbUNvbmZpZyhXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgTGlua1Byb3BlcnRpZXMgbGlua1Byb3BlcnRpZXMgPSBuZXcgTGlua1Byb3BlcnRpZXMoKTsKLSAgICAgICAgbGlua1Byb3BlcnRpZXMuc2V0SW50ZXJmYWNlTmFtZShjb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SW50ZXJmYWNlTmFtZSgpKTsKLSAgICAgICAgZm9yIChMaW5rQWRkcmVzcyBsaW5rQWRkciA6IGNvbmZpZy5saW5rUHJvcGVydGllcy5nZXRMaW5rQWRkcmVzc2VzKCkpIHsKLSAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLmFkZExpbmtBZGRyZXNzKGxpbmtBZGRyKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKFJvdXRlSW5mbyByb3V0ZSA6IGNvbmZpZy5saW5rUHJvcGVydGllcy5nZXRSb3V0ZXMoKSkgewotICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMuYWRkUm91dGUocm91dGUpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoSW5ldEFkZHJlc3MgZG5zIDogY29uZmlnLmxpbmtQcm9wZXJ0aWVzLmdldERuc2VzKCkpIHsKLSAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLmFkZERucyhkbnMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsaW5rUHJvcGVydGllczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWFkIHRoZSB2YXJpYWJsZXMgZnJvbSB0aGUgc3VwcGxpY2FudCBkYWVtb24gdGhhdCBhcmUgbmVlZGVkIHRvCi0gICAgICogZmlsbCBpbiB0aGUgV2lmaUNvbmZpZ3VyYXRpb24gb2JqZWN0LgotICAgICAqCi0gICAgICogQHBhcmFtIGNvbmZpZyB0aGUge0BsaW5rIFdpZmlDb25maWd1cmF0aW9ufSBvYmplY3QgdG8gYmUgZmlsbGVkIGluLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCByZWFkTmV0d29ya1ZhcmlhYmxlcyhXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLQotICAgICAgICBpbnQgbmV0SWQgPSBjb25maWcubmV0d29ya0lkOwotICAgICAgICBpZiAobmV0SWQgPCAwKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRPRE86IG1heWJlIHNob3VsZCBoYXZlIGEgbmF0aXZlIG1ldGhvZCB0aGF0IHRha2VzIGFuIGFycmF5IG9mCi0gICAgICAgICAqIHZhcmlhYmxlIG5hbWVzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHZhbHVlcy4gQnV0IHdlJ2Qgc3RpbGwKLSAgICAgICAgICogYmUgZG9pbmcgYSByb3VuZCB0cmlwIHRvIHRoZSBzdXBwbGljYW50IGRhZW1vbiBmb3IgZWFjaCB2YXJpYWJsZS4KLSAgICAgICAgICovCi0gICAgICAgIFN0cmluZyB2YWx1ZTsKLQotICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgV2lmaUNvbmZpZ3VyYXRpb24uc3NpZFZhck5hbWUpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmNoYXJBdCgwKSAhPSAnIicpIHsKLSAgICAgICAgICAgICAgICBjb25maWcuU1NJRCA9ICJcIiIgKyBXaWZpU3NpZC5jcmVhdGVGcm9tSGV4KHZhbHVlKS50b1N0cmluZygpICsgIlwiIjsKLSAgICAgICAgICAgICAgICAvL1RPRE86IGNvbnZlcnQgYSBoZXggc3RyaW5nIHRoYXQgaXMgbm90IFVURi04IGRlY29kYWJsZSB0byBhIFAtZm9ybWF0dGVkCi0gICAgICAgICAgICAgICAgLy9zdXBwbGljYW50IHN0cmluZwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25maWcuU1NJRCA9IHZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uZmlnLlNTSUQgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFdpZmlDb25maWd1cmF0aW9uLmJzc2lkVmFyTmFtZSk7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICBjb25maWcuQlNTSUQgPSB2YWx1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbmZpZy5CU1NJRCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgV2lmaUNvbmZpZ3VyYXRpb24ucHJpb3JpdHlWYXJOYW1lKTsKLSAgICAgICAgY29uZmlnLnByaW9yaXR5ID0gLTE7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNvbmZpZy5wcmlvcml0eSA9IEludGVnZXIucGFyc2VJbnQodmFsdWUpOwotICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGlnbm9yZSkgewotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFdpZmlDb25maWd1cmF0aW9uLmhpZGRlblNTSURWYXJOYW1lKTsKLSAgICAgICAgY29uZmlnLmhpZGRlblNTSUQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLmhpZGRlblNTSUQgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKSAhPSAwOwotICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGlnbm9yZSkgewotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFdpZmlDb25maWd1cmF0aW9uLndlcFR4S2V5SWR4VmFyTmFtZSk7Ci0gICAgICAgIGNvbmZpZy53ZXBUeEtleUluZGV4ID0gLTE7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNvbmZpZy53ZXBUeEtleUluZGV4ID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWdub3JlKSB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsCi0gICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLndlcEtleVZhck5hbWVzW2ldKTsKLSAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLndlcEtleXNbaV0gPSB2YWx1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLndlcEtleXNbaV0gPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFdpZmlDb25maWd1cmF0aW9uLnBza1Zhck5hbWUpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgewotICAgICAgICAgICAgY29uZmlnLnByZVNoYXJlZEtleSA9IHZhbHVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uZmlnLnByZVNoYXJlZEtleSA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShjb25maWcubmV0d29ya0lkLAotICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLlByb3RvY29sLnZhck5hbWUpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgewotICAgICAgICAgICAgU3RyaW5nIHZhbHNbXSA9IHZhbHVlLnNwbGl0KCIgIik7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZyB2YWwgOiB2YWxzKSB7Ci0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgbG9va3VwU3RyaW5nKHZhbCwgV2lmaUNvbmZpZ3VyYXRpb24uUHJvdG9jb2wuc3RyaW5ncyk7Ci0gICAgICAgICAgICAgICAgaWYgKDAgPD0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFsbG93ZWRQcm90b2NvbHMuc2V0KGluZGV4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShjb25maWcubmV0d29ya0lkLAotICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLktleU1nbXQudmFyTmFtZSk7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsc1tdID0gdmFsdWUuc3BsaXQoIiAiKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIHZhbCA6IHZhbHMpIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPQotICAgICAgICAgICAgICAgICAgICBsb29rdXBTdHJpbmcodmFsLCBXaWZpQ29uZmlndXJhdGlvbi5LZXlNZ210LnN0cmluZ3MpOwotICAgICAgICAgICAgICAgIGlmICgwIDw9IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudC5zZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhbHVlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKGNvbmZpZy5uZXR3b3JrSWQsCi0gICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uQXV0aEFsZ29yaXRobS52YXJOYW1lKTsKLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKLSAgICAgICAgICAgIFN0cmluZyB2YWxzW10gPSB2YWx1ZS5zcGxpdCgiICIpOwotICAgICAgICAgICAgZm9yIChTdHJpbmcgdmFsIDogdmFscykgewotICAgICAgICAgICAgICAgIGludCBpbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgIGxvb2t1cFN0cmluZyh2YWwsIFdpZmlDb25maWd1cmF0aW9uLkF1dGhBbGdvcml0aG0uc3RyaW5ncyk7Ci0gICAgICAgICAgICAgICAgaWYgKDAgPD0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFsbG93ZWRBdXRoQWxnb3JpdGhtcy5zZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhbHVlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKGNvbmZpZy5uZXR3b3JrSWQsCi0gICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uUGFpcndpc2VDaXBoZXIudmFyTmFtZSk7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsc1tdID0gdmFsdWUuc3BsaXQoIiAiKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIHZhbCA6IHZhbHMpIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPQotICAgICAgICAgICAgICAgICAgICBsb29rdXBTdHJpbmcodmFsLCBXaWZpQ29uZmlndXJhdGlvbi5QYWlyd2lzZUNpcGhlci5zdHJpbmdzKTsKLSAgICAgICAgICAgICAgICBpZiAoMCA8PSBpbmRleCkgewotICAgICAgICAgICAgICAgICAgICBjb25maWcuYWxsb3dlZFBhaXJ3aXNlQ2lwaGVycy5zZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhbHVlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKGNvbmZpZy5uZXR3b3JrSWQsCi0gICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uR3JvdXBDaXBoZXIudmFyTmFtZSk7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsc1tdID0gdmFsdWUuc3BsaXQoIiAiKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIHZhbCA6IHZhbHMpIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPQotICAgICAgICAgICAgICAgICAgICBsb29rdXBTdHJpbmcodmFsLCBXaWZpQ29uZmlndXJhdGlvbi5Hcm91cENpcGhlci5zdHJpbmdzKTsKLSAgICAgICAgICAgICAgICBpZiAoMCA8PSBpbmRleCkgewotICAgICAgICAgICAgICAgICAgICBjb25maWcuYWxsb3dlZEdyb3VwQ2lwaGVycy5zZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb25maWcuZW50ZXJwcmlzZUNvbmZpZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBjb25maWcuZW50ZXJwcmlzZUNvbmZpZyA9IG5ldyBXaWZpRW50ZXJwcmlzZUNvbmZpZygpOwotICAgICAgICB9Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGVudGVycHJpc2VGaWVsZHMgPSBjb25maWcuZW50ZXJwcmlzZUNvbmZpZy5nZXRGaWVsZHMoKTsKLSAgICAgICAgZm9yIChTdHJpbmcga2V5IDogV2lmaUVudGVycHJpc2VDb25maWcuZ2V0U3VwcGxpY2FudEtleXMoKSkgewotICAgICAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIGtleSk7Ci0gICAgICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgewotICAgICAgICAgICAgICAgIGVudGVycHJpc2VGaWVsZHMucHV0KGtleSwgcmVtb3ZlRG91YmxlUXVvdGVzKHZhbHVlKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVudGVycHJpc2VGaWVsZHMucHV0KGtleSwgV2lmaUVudGVycHJpc2VDb25maWcuRU1QVFlfVkFMVUUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnLm1pZ3JhdGVPbGRFYXBUbHNOYXRpdmUobVdpZmlOYXRpdmUsIG5ldElkKSkgewotICAgICAgICAgICAgc2F2ZUNvbmZpZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uZmlnLmVudGVycHJpc2VDb25maWcubWlncmF0ZUNlcnRzKG1LZXlTdG9yZSk7Ci0gICAgICAgIGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnLmluaXRpYWxpemVTb2Z0d2FyZUtleXN0b3JlRmxhZyhtS2V5U3RvcmUpOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIHJlbW92ZURvdWJsZVF1b3RlcyhTdHJpbmcgc3RyaW5nKSB7Ci0gICAgICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgIGlmICgobGVuZ3RoID4gMSkgJiYgKHN0cmluZy5jaGFyQXQoMCkgPT0gJyInKQotICAgICAgICAgICAgICAgICYmIChzdHJpbmcuY2hhckF0KGxlbmd0aCAtIDEpID09ICciJykpIHsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDEsIGxlbmd0aCAtIDEpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgY29udmVydFRvUXVvdGVkU3RyaW5nKFN0cmluZyBzdHJpbmcpIHsKLSAgICAgICAgcmV0dXJuICJcIiIgKyBzdHJpbmcgKyAiXCIiOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIG1ha2VTdHJpbmcoQml0U2V0IHNldCwgU3RyaW5nW10gc3RyaW5ncykgewotICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBpbnQgbmV4dFNldEJpdCA9IC0xOwotCi0gICAgICAgIC8qIE1ha2Ugc3VyZSBhbGwgc2V0IGJpdHMgYXJlIGluIFswLCBzdHJpbmdzLmxlbmd0aCkgdG8gYXZvaWQKLSAgICAgICAgICogZ29pbmcgb3V0IG9mIGJvdW5kcyBvbiBzdHJpbmdzLiAgKFNob3VsZG4ndCBoYXBwZW4sIGJ1dC4uLikgKi8KLSAgICAgICAgc2V0ID0gc2V0LmdldCgwLCBzdHJpbmdzLmxlbmd0aCk7Ci0KLSAgICAgICAgd2hpbGUgKChuZXh0U2V0Qml0ID0gc2V0Lm5leHRTZXRCaXQobmV4dFNldEJpdCArIDEpKSAhPSAtMSkgewotICAgICAgICAgICAgYnVmLmFwcGVuZChzdHJpbmdzW25leHRTZXRCaXRdLnJlcGxhY2UoJ18nLCAnLScpKS5hcHBlbmQoJyAnKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzcGFjZQotICAgICAgICBpZiAoc2V0LmNhcmRpbmFsaXR5KCkgPiAwKSB7Ci0gICAgICAgICAgICBidWYuc2V0TGVuZ3RoKGJ1Zi5sZW5ndGgoKSAtIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGxvb2t1cFN0cmluZyhTdHJpbmcgc3RyaW5nLCBTdHJpbmdbXSBzdHJpbmdzKSB7Ci0gICAgICAgIGludCBzaXplID0gc3RyaW5ncy5sZW5ndGg7Ci0KLSAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoJy0nLCAnXycpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgaWYgKHN0cmluZy5lcXVhbHMoc3RyaW5nc1tpXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0KLSAgICAgICAgLy8gaWYgd2UgZXZlciBnZXQgaGVyZSwgd2Ugc2hvdWxkIHByb2JhYmx5IGFkZCB0aGUKLSAgICAgICAgLy8gdmFsdWUgdG8gV2lmaUNvbmZpZ3VyYXRpb24gdG8gcmVmbGVjdCB0aGF0IGl0J3MKLSAgICAgICAgLy8gc3VwcG9ydGVkIGJ5IHRoZSBXUEEgc3VwcGxpY2FudAotICAgICAgICBsb2dlKCJGYWlsZWQgdG8gbG9vay11cCBhIHN0cmluZzogIiArIHN0cmluZyk7Ci0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qIFJldHVybnMgYSB1bmlxdWUgZm9yIGEgZ2l2ZW4gY29uZmlndXJhdGlvbiAqLwotICAgIHByaXZhdGUgc3RhdGljIGludCBjb25maWdLZXkoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgICAgIFN0cmluZyBrZXk7Ci0KLSAgICAgICAgaWYgKGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudC5nZXQoS2V5TWdtdC5XUEFfUFNLKSkgewotICAgICAgICAgICAga2V5ID0gY29uZmlnLlNTSUQgKyBLZXlNZ210LnN0cmluZ3NbS2V5TWdtdC5XUEFfUFNLXTsKLSAgICAgICAgfSBlbHNlIGlmIChjb25maWcuYWxsb3dlZEtleU1hbmFnZW1lbnQuZ2V0KEtleU1nbXQuV1BBX0VBUCkgfHwKLSAgICAgICAgICAgICAgICBjb25maWcuYWxsb3dlZEtleU1hbmFnZW1lbnQuZ2V0KEtleU1nbXQuSUVFRTgwMjFYKSkgewotICAgICAgICAgICAga2V5ID0gY29uZmlnLlNTSUQgKyBLZXlNZ210LnN0cmluZ3NbS2V5TWdtdC5XUEFfRUFQXTsKLSAgICAgICAgfSBlbHNlIGlmIChjb25maWcud2VwS2V5c1swXSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBrZXkgPSBjb25maWcuU1NJRCArICJXRVAiOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAga2V5ID0gY29uZmlnLlNTSUQgKyBLZXlNZ210LnN0cmluZ3NbS2V5TWdtdC5OT05FXTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBrZXkuaGFzaENvZGUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIHB3LnByaW50bG4oIldpZmlDb25maWdTdG9yZSIpOwotICAgICAgICBwdy5wcmludGxuKCJtTGFzdFByaW9yaXR5ICIgKyBtTGFzdFByaW9yaXR5KTsKLSAgICAgICAgcHcucHJpbnRsbigiQ29uZmlndXJlZCBuZXR3b3JrcyIpOwotICAgICAgICBmb3IgKFdpZmlDb25maWd1cmF0aW9uIGNvbmYgOiBnZXRDb25maWd1cmVkTmV0d29ya3MoKSkgewotICAgICAgICAgICAgcHcucHJpbnRsbihjb25mKTsKLSAgICAgICAgfQotICAgICAgICBwdy5wcmludGxuKCk7Ci0KLSAgICAgICAgaWYgKG1Mb2NhbExvZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBwdy5wcmludGxuKCJXaWZpQ29uZmlnU3RvcmUgLSBMb2cgQmVnaW4gLS0tLSIpOwotICAgICAgICAgICAgbUxvY2FsTG9nLmR1bXAoZmQsIHB3LCBhcmdzKTsKLSAgICAgICAgICAgIHB3LnByaW50bG4oIldpZmlDb25maWdTdG9yZSAtIExvZyBFbmQgLS0tLSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb25maWdGaWxlKCkgewotICAgICAgICByZXR1cm4gaXBDb25maWdGaWxlOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2dlKFN0cmluZyBzKSB7Ci0gICAgICAgIExvZy5lKFRBRywgcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGxvZyhTdHJpbmcgcykgewotICAgICAgICBMb2cuZChUQUcsIHMpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2NhbExvZyhTdHJpbmcgcykgewotICAgICAgICBpZiAobUxvY2FsTG9nICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1Mb2NhbExvZy5sb2cocyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbG9jYWxMb2coU3RyaW5nIHMsIGludCBuZXRJZCkgewotICAgICAgICBpZiAobUxvY2FsTG9nID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZzsKLSAgICAgICAgc3luY2hyb25pemVkKG1Db25maWd1cmVkTmV0d29ya3MpIHsKLSAgICAgICAgICAgIGNvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkgewotICAgICAgICAgICAgbUxvY2FsTG9nLmxvZyhzICsgIiAiICsgY29uZmlnLmdldFByaW50YWJsZVNzaWQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtTG9jYWxMb2cubG9nKHMgKyAiICIgKyBuZXRJZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlDb25maWd1cmF0aW9uLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpQ29uZmlndXJhdGlvbi5qYXZhCmluZGV4IDg3YWZhODguLjY1NjI0NjIgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlDb25maWd1cmF0aW9uLmphdmEKKysrIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUNvbmZpZ3VyYXRpb24uamF2YQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAgICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgY29uZmlnIGlzIGludmFsaWQgZm9yIGtleSBpZCBnZW5lcmF0aW9uCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBTdHJpbmcgZ2V0S2V5SWRGb3JDcmVkZW50aWFscyhXaWZpQ29uZmlndXJhdGlvbiBjdXJyZW50KSB7CisgICAgcHVibGljIFN0cmluZyBnZXRLZXlJZEZvckNyZWRlbnRpYWxzKFdpZmlDb25maWd1cmF0aW9uIGN1cnJlbnQpIHsKICAgICAgICAgU3RyaW5nIGtleU1nbXQgPSBudWxsOwogCiAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpRW50ZXJwcmlzZUNvbmZpZy5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUVudGVycHJpc2VDb25maWcuamF2YQppbmRleCBjN2ViZWNiLi42OWJlMmNmMiAxMDA2NDQKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUVudGVycHJpc2VDb25maWcuamF2YQorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpRW50ZXJwcmlzZUNvbmZpZy5qYXZhCkBAIC0xNywxOSArMTcsMTMgQEAKIAogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CiBpbXBvcnQgYW5kcm9pZC5zZWN1cml0eS5DcmVkZW50aWFsczsKLWltcG9ydCBhbmRyb2lkLnNlY3VyaXR5LktleUNoYWluOwotaW1wb3J0IGFuZHJvaWQuc2VjdXJpdHkuS2V5U3RvcmU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIAogaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LktleUZhY3Rvcnk7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CiBpbXBvcnQgamF2YS5zZWN1cml0eS5Qcml2YXRlS2V5OwotaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZTsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVFbmNvZGluZ0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlRmFjdG9yeTsKQEAgLTM5LDY3ICszMyw3MSBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKLS8qKiAKKy8qKgogICogRW50ZXJwcmlzZSBjb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIFdpLUZpLiBTdG9yZXMgZGV0YWlscyBhYm91dCB0aGUgRUFQIG1ldGhvZAogICogYW5kIGFueSBhc3NvY2lhdGVkIGNyZWRlbnRpYWxzLgogICovCiBwdWJsaWMgY2xhc3MgV2lmaUVudGVycHJpc2VDb25maWcgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldpZmlFbnRlcnByaXNlQ29uZmlnIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERCRyA9IGZhbHNlOwotICAgIC8qKgotICAgICAqIEluIG9sZCBjb25maWd1cmF0aW9ucywgdGhlICJwcml2YXRlX2tleSIgZmllbGQgd2FzIHVzZWQuIEhvd2V2ZXIsIG5ld2VyCi0gICAgICogY29uZmlndXJhdGlvbnMgdXNlIHRoZSBrZXlfaWQgZmllbGQgd2l0aCB0aGUgZW5naW5lX2lkIHNldCB0byAia2V5c3RvcmUiLgotICAgICAqIElmIHRoaXMgZmllbGQgaXMgZm91bmQgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBtaWdyYXRpb24gY29kZSBpcwotICAgICAqIHRyaWdnZXJlZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0xEX1BSSVZBVEVfS0VZX05BTUUgPSAicHJpdmF0ZV9rZXkiOwogCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU1QVFlfVkFMVUUgICAgICAgICA9ICJOVUxMIjsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFQVBfS0VZICAgICAgICAgICAgID0gImVhcCI7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEhBU0UyX0tFWSAgICAgICAgICA9ICJwaGFzZTIiOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElERU5USVRZX0tFWSAgICAgICAgPSAiaWRlbnRpdHkiOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFOT05fSURFTlRJVFlfS0VZICAgPSAiYW5vbnltb3VzX2lkZW50aXR5IjsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVNTV09SRF9LRVkgICAgICAgID0gInBhc3N3b3JkIjsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJKRUNUX01BVENIX0tFWSAgID0gInN1YmplY3RfbWF0Y2giOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QUF9LRVlfQ0FDSElORyAgICAgPSAicHJvYWN0aXZlX2tleV9jYWNoaW5nIjsKICAgICAvKioKICAgICAgKiBTdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBrZXlzdG9yZSBPcGVuU1NMIEVOR0lORSdzIElELgorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVOR0lORV9JRF9LRVlTVE9SRSA9ICJrZXlzdG9yZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5HSU5FX0lEX0tFWVNUT1JFID0gImtleXN0b3JlIjsKIAogICAgIC8qKgogICAgICAqIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIGtleXN0b3JlIFVSSSB1c2VkIGZvciB3cGFfc3VwcGxpY2FudC4KKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlTVE9SRV9VUkkgPSAia2V5c3RvcmU6Ly8iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWVNUT1JFX1VSSSA9ICJrZXlzdG9yZTovLyI7CiAKICAgICAvKioKICAgICAgKiBTdHJpbmcgdG8gc2V0IHRoZSBlbmdpbmUgdmFsdWUgdG8gd2hlbiBpdCBzaG91bGQgYmUgZW5hYmxlZC4KKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTkdJTkVfRU5BQkxFID0gIjEiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVOR0lORV9FTkFCTEUgPSAiMSI7CiAKICAgICAvKioKICAgICAgKiBTdHJpbmcgdG8gc2V0IHRoZSBlbmdpbmUgdmFsdWUgdG8gd2hlbiBpdCBzaG91bGQgYmUgZGlzYWJsZWQuCisgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5HSU5FX0RJU0FCTEUgPSAiMCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5HSU5FX0RJU0FCTEUgPSAiMCI7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FfQ0VSVF9QUkVGSVggPSBLRVlTVE9SRV9VUkkgKyBDcmVkZW50aWFscy5DQV9DRVJUSUZJQ0FURTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xJRU5UX0NFUlRfUFJFRklYID0gS0VZU1RPUkVfVVJJICsgQ3JlZGVudGlhbHMuVVNFUl9DRVJUSUZJQ0FURTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFQVBfS0VZICAgICAgICAgICAgID0gImVhcCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBIQVNFMl9LRVkgICAgICAgICAgPSAicGhhc2UyIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJVFlfS0VZICAgICAgICA9ICJpZGVudGl0eSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFOT05fSURFTlRJVFlfS0VZICAgPSAiYW5vbnltb3VzX2lkZW50aXR5IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFTU1dPUkRfS0VZICAgICAgICA9ICJwYXNzd29yZCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENMSUVOVF9DRVJUX0tFWSAgICAgPSAiY2xpZW50X2NlcnQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDQV9DRVJUX0tFWSAgICAgICAgID0gImNhX2NlcnQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJKRUNUX01BVENIX0tFWSAgID0gInN1YmplY3RfbWF0Y2giOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTkdJTkVfS0VZICAgICAgICAgID0gImVuZ2luZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVOR0lORV9JRF9LRVkgICAgICAgPSAiZW5naW5lX2lkIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJJVkFURV9LRVlfSURfS0VZICA9ICJrZXlfaWQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPUFBfS0VZX0NBQ0hJTkcgICAgID0gInByb2FjdGl2ZV9rZXlfY2FjaGluZyI7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FfQ0VSVF9QUkVGSVggPSBLRVlTVE9SRV9VUkkgKyBDcmVkZW50aWFscy5DQV9DRVJUSUZJQ0FURTsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTElFTlRfQ0VSVF9QUkVGSVggPSBLRVlTVE9SRV9VUkkgKyBDcmVkZW50aWFscy5VU0VSX0NFUlRJRklDQVRFOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENMSUVOVF9DRVJUX0tFWSAgICAgPSAiY2xpZW50X2NlcnQiOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBX0NFUlRfS0VZICAgICAgICAgPSAiY2FfY2VydCI7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5HSU5FX0tFWSAgICAgICAgICA9ICJlbmdpbmUiOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVOR0lORV9JRF9LRVkgICAgICAgPSAiZW5naW5lX2lkIjsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklWQVRFX0tFWV9JRF9LRVkgID0gImtleV9pZCI7CiAKICAgICBwcml2YXRlIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1GaWVsZHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICAgICBwcml2YXRlIFg1MDlDZXJ0aWZpY2F0ZSBtQ2FDZXJ0OwogICAgIHByaXZhdGUgUHJpdmF0ZUtleSBtQ2xpZW50UHJpdmF0ZUtleTsKICAgICBwcml2YXRlIFg1MDlDZXJ0aWZpY2F0ZSBtQ2xpZW50Q2VydGlmaWNhdGU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1OZWVkc1NvZnR3YXJlS2V5c3RvcmUgPSBmYWxzZTsKLQotICAgIC8qKiBUaGlzIHJlcHJlc2VudHMgYW4gZW1wdHkgdmFsdWUgb2YgYW4gZW50ZXJwcmlzZSBmaWVsZC4KLSAgICAgKiBOVUxMIGlzIHVzZWQgYXQgd3BhX3N1cHBsaWNhbnQgdG8gaW5kaWNhdGUgYW4gZW1wdHkgdmFsdWUKLSAgICAgKi8KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEVNUFRZX1ZBTFVFID0gIk5VTEwiOwogCiAgICAgcHVibGljIFdpZmlFbnRlcnByaXNlQ29uZmlnKCkgewogICAgICAgICAvLyBEbyBub3Qgc2V0IGRlZmF1bHRzIHNvIHRoYXQgdGhlIGVudGVycHJpc2UgZmllbGRzIHRoYXQgYXJlIG5vdCBjaGFuZ2VkCkBAIC0yNDYsMjQgKzI0NCwyMCBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVEMgICAgICAgICA9IDQ7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGSVggPSAiYXV0aD0iOwogICAgICAgICAvKiogQGhpZGUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzdHJpbmdzID0ge0VNUFRZX1ZBTFVFLCAiUEFQIiwgIk1TQ0hBUCIsICJNU0NIQVBWMiIsICJHVEMiIH07CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gc3RyaW5ncyA9IHtFTVBUWV9WQUxVRSwgIlBBUCIsICJNU0NIQVAiLAorICAgICAgICAgICAgICAgICJNU0NIQVBWMiIsICJHVEMiIH07CiAKICAgICAgICAgLyoqIFByZXZlbnQgaW5pdGlhbGl6YXRpb24gKi8KICAgICAgICAgcHJpdmF0ZSBQaGFzZTIoKSB7fQogICAgIH0KIAotICAgIC8qKiBJbnRlcm5hbCB1c2Ugb25seSAqLwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGdldEZpZWxkcygpIHsKKyAgICAvKiogSW50ZXJuYWwgdXNlIG9ubHkKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBnZXRGaWVsZHMoKSB7CiAgICAgICAgIHJldHVybiBtRmllbGRzOwogICAgIH0KIAotICAgIC8qKiBJbnRlcm5hbCB1c2Ugb25seSAqLwotICAgIHN0YXRpYyBTdHJpbmdbXSBnZXRTdXBwbGljYW50S2V5cygpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7IEVBUF9LRVksIFBIQVNFMl9LRVksIElERU5USVRZX0tFWSwgQU5PTl9JREVOVElUWV9LRVksIFBBU1NXT1JEX0tFWSwKLSAgICAgICAgICAgICAgICBDTElFTlRfQ0VSVF9LRVksIENBX0NFUlRfS0VZLCBTVUJKRUNUX01BVENIX0tFWSwgRU5HSU5FX0tFWSwgRU5HSU5FX0lEX0tFWSwKLSAgICAgICAgICAgICAgICBQUklWQVRFX0tFWV9JRF9LRVkgfTsKLSAgICB9Ci0KICAgICAvKioKICAgICAgKiBTZXQgdGhlIEVBUCBhdXRoZW50aWNhdGlvbiBtZXRob2QuCiAgICAgICogQHBhcmFtICBlYXBNZXRob2QgaXMgb25lIHtAbGluayBFYXAjUEVBUH0sIHtAbGluayBFYXAjVExTfSwge0BsaW5rIEVhcCNUVExTfSBvcgpAQCAtNDMxLDcgKzQyNSw2IEBACiAKICAgICAvKioKICAgICAgKiBHZXQgQ0EgY2VydGlmaWNhdGUKLSAgICAgKgogICAgICAqIEByZXR1cm4gWC41MDkgQ0EgY2VydGlmaWNhdGUKICAgICAgKi8KICAgICBwdWJsaWMgWDUwOUNlcnRpZmljYXRlIGdldENhQ2VydGlmaWNhdGUoKSB7CkBAIC00MzksNyArNDMyLDEzIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogU2V0IENsaWVudCBjZXJ0aWZpY2F0ZSBhbGlhcy4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlc2V0Q2FDZXJ0aWZpY2F0ZSgpIHsKKyAgICAgICAgbUNhQ2VydCA9IG51bGw7CisgICAgfQorCisgICAgLyoqIFNldCBDbGllbnQgY2VydGlmaWNhdGUgYWxpYXMuCiAgICAgICoKICAgICAgKiA8cD4gU2VlIHRoZSB7QGxpbmsgYW5kcm9pZC5zZWN1cml0eS5LZXlDaGFpbn0gZm9yIGRldGFpbHMgb24gaW5zdGFsbGluZyBvciBjaG9vc2luZwogICAgICAqIGEgY2VydGlmaWNhdGUKQEAgLTUwNywxMTYgKzUwNiwxOSBAQAogICAgICAgICByZXR1cm4gbUNsaWVudENlcnRpZmljYXRlOwogICAgIH0KIAotICAgIGJvb2xlYW4gbmVlZHNLZXlTdG9yZSgpIHsKLSAgICAgICAgLy8gSGFzIG5vIGtleXMgdG8gYmUgaW5zdGFsbGVkCi0gICAgICAgIGlmIChtQ2xpZW50Q2VydGlmaWNhdGUgPT0gbnVsbCAmJiBtQ2FDZXJ0ID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZXNldENsaWVudEtleUVudHJ5KCkgeworICAgICAgICBtQ2xpZW50UHJpdmF0ZUtleSA9IG51bGw7CisgICAgICAgIG1DbGllbnRDZXJ0aWZpY2F0ZSA9IG51bGw7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2xlYW4gaXNIYXJkd2FyZUJhY2tlZEtleShQcml2YXRlS2V5IGtleSkgewotICAgICAgICByZXR1cm4gS2V5Q2hhaW4uaXNCb3VuZEtleUFsZ29yaXRobShrZXkuZ2V0QWxnb3JpdGhtKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sZWFuIGhhc0hhcmR3YXJlQmFja2VkS2V5KENlcnRpZmljYXRlIGNlcnRpZmljYXRlKSB7Ci0gICAgICAgIHJldHVybiBLZXlDaGFpbi5pc0JvdW5kS2V5QWxnb3JpdGhtKGNlcnRpZmljYXRlLmdldFB1YmxpY0tleSgpLmdldEFsZ29yaXRobSgpKTsKLSAgICB9Ci0KLSAgICBib29sZWFuIG5lZWRzU29mdHdhcmVCYWNrZWRLZXlTdG9yZSgpIHsKLSAgICAgICAgcmV0dXJuIG1OZWVkc1NvZnR3YXJlS2V5c3RvcmU7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBpbnN0YWxsS2V5cyhhbmRyb2lkLnNlY3VyaXR5LktleVN0b3JlIGtleVN0b3JlLCBTdHJpbmcgbmFtZSkgewotICAgICAgICBib29sZWFuIHJldCA9IHRydWU7Ci0gICAgICAgIFN0cmluZyBwcml2S2V5TmFtZSA9IENyZWRlbnRpYWxzLlVTRVJfUFJJVkFURV9LRVkgKyBuYW1lOwotICAgICAgICBTdHJpbmcgdXNlckNlcnROYW1lID0gQ3JlZGVudGlhbHMuVVNFUl9DRVJUSUZJQ0FURSArIG5hbWU7Ci0gICAgICAgIFN0cmluZyBjYUNlcnROYW1lID0gQ3JlZGVudGlhbHMuQ0FfQ0VSVElGSUNBVEUgKyBuYW1lOwotICAgICAgICBpZiAobUNsaWVudENlcnRpZmljYXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGJ5dGVbXSBwcml2S2V5RGF0YSA9IG1DbGllbnRQcml2YXRlS2V5LmdldEVuY29kZWQoKTsKLSAgICAgICAgICAgIGlmIChpc0hhcmR3YXJlQmFja2VkS2V5KG1DbGllbnRQcml2YXRlS2V5KSkgewotICAgICAgICAgICAgICAgIC8vIEhhcmR3YXJlIGJhY2tlZCBrZXkgc3RvcmUgaXMgc2VjdXJlIGVub3VnaCB0byBzdG9yZSBrZXlzIHVuLWVuY3J5cHRlZCwgdGhpcwotICAgICAgICAgICAgICAgIC8vIHJlbW92ZXMgdGhlIG5lZWQgZm9yIHVzZXIgdG8gcHVuY2ggYSBQSU4gdG8gZ2V0IGFjY2VzcyB0byB0aGVzZSBrZXlzCi0gICAgICAgICAgICAgICAgaWYgKERCRykgU2xvZy5kKFRBRywgImltcG9ydGluZyBrZXlzICIgKyBuYW1lICsgIiBpbiBoYXJkd2FyZSBiYWNrZWQgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RvcmUiKTsKLSAgICAgICAgICAgICAgICByZXQgPSBrZXlTdG9yZS5pbXBvcnRLZXkocHJpdktleU5hbWUsIHByaXZLZXlEYXRhLCBQcm9jZXNzLldJRklfVUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlTdG9yZS5GTEFHX05PTkUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBiYWNrZWQga2V5IHN0b3JlIGlzIE5PVCBzZWN1cmUgZW5vdWdoIHRvIHN0b3JlIGtleXMgdW4tZW5jcnlwdGVkLgotICAgICAgICAgICAgICAgIC8vIFNhdmUga2V5cyBlbmNyeXB0ZWQgc28gdGhleSBhcmUgcHJvdGVjdGVkIHdpdGggdXNlcidzIFBJTi4gVXNlciB3aWxsCi0gICAgICAgICAgICAgICAgLy8gaGF2ZSB0byB1bmxvY2sgcGhvbmUgYmVmb3JlIGJlaW5nIGFibGUgdG8gdXNlIHRoZXNlIGtleXMgYW5kIGNvbm5lY3QgdG8KLSAgICAgICAgICAgICAgICAvLyBuZXR3b3Jrcy4KLSAgICAgICAgICAgICAgICBpZiAoREJHKSBTbG9nLmQoVEFHLCAiaW1wb3J0aW5nIGtleXMgIiArIG5hbWUgKyAiIGluIHNvZnR3YXJlIGJhY2tlZCBzdG9yZSIpOwotICAgICAgICAgICAgICAgIHJldCA9IGtleVN0b3JlLmltcG9ydEtleShwcml2S2V5TmFtZSwgcHJpdktleURhdGEsIFByb2Nlc3MuV0lGSV9VSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICBLZXlTdG9yZS5GTEFHX0VOQ1JZUFRFRCk7Ci0gICAgICAgICAgICAgICAgbU5lZWRzU29mdHdhcmVLZXlzdG9yZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmV0ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0ID0gcHV0Q2VydEluS2V5U3RvcmUoa2V5U3RvcmUsIHVzZXJDZXJ0TmFtZSwgbUNsaWVudENlcnRpZmljYXRlKTsKLSAgICAgICAgICAgIGlmIChyZXQgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAvLyBSZW1vdmUgcHJpdmF0ZSBrZXkgaW5zdGFsbGVkCi0gICAgICAgICAgICAgICAga2V5U3RvcmUuZGVsS2V5KHByaXZLZXlOYW1lLCBQcm9jZXNzLldJRklfVUlEKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1DYUNlcnQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0ID0gcHV0Q2VydEluS2V5U3RvcmUoa2V5U3RvcmUsIGNhQ2VydE5hbWUsIG1DYUNlcnQpOwotICAgICAgICAgICAgaWYgKHJldCA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIGlmIChtQ2xpZW50Q2VydGlmaWNhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgY2xpZW50IGtleStjZXJ0Ci0gICAgICAgICAgICAgICAgICAgIGtleVN0b3JlLmRlbEtleShwcml2S2V5TmFtZSwgUHJvY2Vzcy5XSUZJX1VJRCk7Ci0gICAgICAgICAgICAgICAgICAgIGtleVN0b3JlLmRlbGV0ZSh1c2VyQ2VydE5hbWUsIFByb2Nlc3MuV0lGSV9VSUQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2V0IGFsaWFzIG5hbWVzCi0gICAgICAgIGlmIChtQ2xpZW50Q2VydGlmaWNhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgc2V0Q2xpZW50Q2VydGlmaWNhdGVBbGlhcyhuYW1lKTsKLSAgICAgICAgICAgIG1DbGllbnRQcml2YXRlS2V5ID0gbnVsbDsKLSAgICAgICAgICAgIG1DbGllbnRDZXJ0aWZpY2F0ZSA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUNhQ2VydCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzZXRDYUNlcnRpZmljYXRlQWxpYXMobmFtZSk7Ci0gICAgICAgICAgICBtQ2FDZXJ0ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIHB1dENlcnRJbktleVN0b3JlKGFuZHJvaWQuc2VjdXJpdHkuS2V5U3RvcmUga2V5U3RvcmUsIFN0cmluZyBuYW1lLAotICAgICAgICAgICAgQ2VydGlmaWNhdGUgY2VydCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgYnl0ZVtdIGNlcnREYXRhID0gQ3JlZGVudGlhbHMuY29udmVydFRvUGVtKGNlcnQpOwotICAgICAgICAgICAgaWYgKERCRykgU2xvZy5kKFRBRywgInB1dHRpbmcgY2VydGlmaWNhdGUgIiArIG5hbWUgKyAiIGluIGtleXN0b3JlIik7Ci0gICAgICAgICAgICByZXR1cm4ga2V5U3RvcmUucHV0KG5hbWUsIGNlcnREYXRhLCBQcm9jZXNzLldJRklfVUlELCBLZXlTdG9yZS5GTEFHX05PTkUpOwotCi0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUxKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gY2F0Y2ggKENlcnRpZmljYXRlRXhjZXB0aW9uIGUyKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHJlbW92ZUtleXMoS2V5U3RvcmUga2V5U3RvcmUpIHsKLSAgICAgICAgU3RyaW5nIGNsaWVudCA9IGdldEZpZWxkVmFsdWUoQ0xJRU5UX0NFUlRfS0VZLCBDTElFTlRfQ0VSVF9QUkVGSVgpOwotICAgICAgICAvLyBhIHZhbGlkIGNsaWVudCBjZXJ0aWZpY2F0ZSBpcyBjb25maWd1cmVkCi0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkoY2xpZW50KSkgewotICAgICAgICAgICAgaWYgKERCRykgU2xvZy5kKFRBRywgInJlbW92aW5nIGNsaWVudCBwcml2YXRlIGtleSBhbmQgdXNlciBjZXJ0Iik7Ci0gICAgICAgICAgICBrZXlTdG9yZS5kZWxLZXkoQ3JlZGVudGlhbHMuVVNFUl9QUklWQVRFX0tFWSArIGNsaWVudCwgUHJvY2Vzcy5XSUZJX1VJRCk7Ci0gICAgICAgICAgICBrZXlTdG9yZS5kZWxldGUoQ3JlZGVudGlhbHMuVVNFUl9DRVJUSUZJQ0FURSArIGNsaWVudCwgUHJvY2Vzcy5XSUZJX1VJRCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgY2EgPSBnZXRGaWVsZFZhbHVlKENBX0NFUlRfS0VZLCBDQV9DRVJUX1BSRUZJWCk7Ci0gICAgICAgIC8vIGEgdmFsaWQgY2EgY2VydGlmaWNhdGUgaXMgY29uZmlndXJlZAotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGNhKSkgewotICAgICAgICAgICAgaWYgKERCRykgU2xvZy5kKFRBRywgInJlbW92aW5nIENBIGNlcnQiKTsKLSAgICAgICAgICAgIGtleVN0b3JlLmRlbGV0ZShDcmVkZW50aWFscy5DQV9DRVJUSUZJQ0FURSArIGNhLCBQcm9jZXNzLldJRklfVUlEKTsKLSAgICAgICAgfQorICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIFByaXZhdGVLZXkgZ2V0Q2xpZW50UHJpdmF0ZUtleSgpIHsKKyAgICAgICAgcmV0dXJuIG1DbGllbnRQcml2YXRlS2V5OwogICAgIH0KIAogICAgIC8qKgpAQCAtNjUxLDEyOSArNTUzLDYgQEAKICAgICAgICAgcmV0dXJuIGVhcCArICJfIiArIHBoYXNlMjsKICAgICB9CiAKLSAgICAvKiogTWlncmF0ZXMgdGhlIG9sZCBzdHlsZSBUTFMgY29uZmlnIHRvIHRoZSBuZXcgY29uZmlnIHN0eWxlLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQKLSAgICAgKiB3aGVuIHJlc3RvcmluZyBhbiBvbGQgd3BhX3N1cHBsaWNhbnQuY29uZiBvciB1cGdyYWRpbmcgZnJvbSBhIHByZXZpb3VzCi0gICAgICogcGxhdGZvcm0gdmVyc2lvbi4KLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvbmZpZyB3YXMgdXBkYXRlZAotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgYm9vbGVhbiBtaWdyYXRlT2xkRWFwVGxzTmF0aXZlKFdpZmlOYXRpdmUgd2lmaU5hdGl2ZSwgaW50IG5ldElkKSB7Ci0gICAgICAgIFN0cmluZyBvbGRQcml2YXRlS2V5ID0gd2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIE9MRF9QUklWQVRFX0tFWV9OQU1FKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogSWYgdGhlIG9sZCBjb25maWd1cmF0aW9uIHZhbHVlIGlzIG5vdCBwcmVzZW50LCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcKLSAgICAgICAgICogdG8gZG8uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkob2xkUHJpdmF0ZUtleSkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEFsc28gaWdub3JlIGl0IGlmIGl0J3MgZW1wdHkgcXVvdGVzLgotICAgICAgICAgICAgb2xkUHJpdmF0ZUtleSA9IHJlbW92ZURvdWJsZVF1b3RlcyhvbGRQcml2YXRlS2V5KTsKLSAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShvbGRQcml2YXRlS2V5KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1GaWVsZHMucHV0KEVOR0lORV9LRVksIEVOR0lORV9FTkFCTEUpOwotICAgICAgICBtRmllbGRzLnB1dChFTkdJTkVfSURfS0VZLCBjb252ZXJ0VG9RdW90ZWRTdHJpbmcoRU5HSU5FX0lEX0tFWVNUT1JFKSk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgKiBUaGUgb2xkIGtleSBzdGFydGVkIHdpdGggdGhlIGtleXN0b3JlOi8vIFVSSSBwcmVmaXgsIGJ1dCB3ZSBkb24ndAotICAgICAgICAqIG5lZWQgdGhhdCBhbnltb3JlLiBUcmltIGl0IG9mZiBpZiBpdCBleGlzdHMuCi0gICAgICAgICovCi0gICAgICAgIGZpbmFsIFN0cmluZyBrZXlOYW1lOwotICAgICAgICBpZiAob2xkUHJpdmF0ZUtleS5zdGFydHNXaXRoKEtFWVNUT1JFX1VSSSkpIHsKLSAgICAgICAgICAgIGtleU5hbWUgPSBuZXcgU3RyaW5nKG9sZFByaXZhdGVLZXkuc3Vic3RyaW5nKEtFWVNUT1JFX1VSSS5sZW5ndGgoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAga2V5TmFtZSA9IG9sZFByaXZhdGVLZXk7Ci0gICAgICAgIH0KLSAgICAgICAgbUZpZWxkcy5wdXQoUFJJVkFURV9LRVlfSURfS0VZLCBjb252ZXJ0VG9RdW90ZWRTdHJpbmcoa2V5TmFtZSkpOwotCi0gICAgICAgIHdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKG5ldElkLCBFTkdJTkVfS0VZLCBtRmllbGRzLmdldChFTkdJTkVfS0VZKSk7Ci0gICAgICAgIHdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKG5ldElkLCBFTkdJTkVfSURfS0VZLCBtRmllbGRzLmdldChFTkdJTkVfSURfS0VZKSk7Ci0gICAgICAgIHdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKG5ldElkLCBQUklWQVRFX0tFWV9JRF9LRVksIG1GaWVsZHMuZ2V0KFBSSVZBVEVfS0VZX0lEX0tFWSkpOwotICAgICAgICAvLyBSZW1vdmUgb2xkIHByaXZhdGVfa2V5IHN0cmluZyBzbyB3ZSBkb24ndCBydW4gdGhpcyBhZ2Fpbi4KLSAgICAgICAgd2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIE9MRF9QUklWQVRFX0tFWV9OQU1FLCBFTVBUWV9WQUxVRSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKiBNaWdyYXRlIGNlcnRzIGZyb20gZ2xvYmFsIHBvb2wgdG8gd2lmaSBVSUQgaWYgbm90IGFscmVhZHkgZG9uZSAqLwotICAgIHZvaWQgbWlncmF0ZUNlcnRzKGFuZHJvaWQuc2VjdXJpdHkuS2V5U3RvcmUga2V5U3RvcmUpIHsKLSAgICAgICAgU3RyaW5nIGNsaWVudCA9IGdldEZpZWxkVmFsdWUoQ0xJRU5UX0NFUlRfS0VZLCBDTElFTlRfQ0VSVF9QUkVGSVgpOwotICAgICAgICAvLyBhIHZhbGlkIGNsaWVudCBjZXJ0aWZpY2F0ZSBpcyBjb25maWd1cmVkCi0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkoY2xpZW50KSkgewotICAgICAgICAgICAgaWYgKCFrZXlTdG9yZS5jb250YWlucyhDcmVkZW50aWFscy5VU0VSX1BSSVZBVEVfS0VZICsgY2xpZW50LCBQcm9jZXNzLldJRklfVUlEKSkgewotICAgICAgICAgICAgICAgIGtleVN0b3JlLmR1cGxpY2F0ZShDcmVkZW50aWFscy5VU0VSX1BSSVZBVEVfS0VZICsgY2xpZW50LCAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENyZWRlbnRpYWxzLlVTRVJfUFJJVkFURV9LRVkgKyBjbGllbnQsIFByb2Nlc3MuV0lGSV9VSUQpOwotICAgICAgICAgICAgICAgIGtleVN0b3JlLmR1cGxpY2F0ZShDcmVkZW50aWFscy5VU0VSX0NFUlRJRklDQVRFICsgY2xpZW50LCAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENyZWRlbnRpYWxzLlVTRVJfQ0VSVElGSUNBVEUgKyBjbGllbnQsIFByb2Nlc3MuV0lGSV9VSUQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGNhID0gZ2V0RmllbGRWYWx1ZShDQV9DRVJUX0tFWSwgQ0FfQ0VSVF9QUkVGSVgpOwotICAgICAgICAvLyBhIHZhbGlkIGNhIGNlcnRpZmljYXRlIGlzIGNvbmZpZ3VyZWQKLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShjYSkpIHsKLSAgICAgICAgICAgIGlmICgha2V5U3RvcmUuY29udGFpbnMoQ3JlZGVudGlhbHMuQ0FfQ0VSVElGSUNBVEUgKyBjYSwgUHJvY2Vzcy5XSUZJX1VJRCkpIHsKLSAgICAgICAgICAgICAgICBrZXlTdG9yZS5kdXBsaWNhdGUoQ3JlZGVudGlhbHMuQ0FfQ0VSVElGSUNBVEUgKyBjYSwgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICBDcmVkZW50aWFscy5DQV9DRVJUSUZJQ0FURSArIGNhLCBQcm9jZXNzLldJRklfVUlEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgaW5pdGlhbGl6ZVNvZnR3YXJlS2V5c3RvcmVGbGFnKGFuZHJvaWQuc2VjdXJpdHkuS2V5U3RvcmUga2V5U3RvcmUpIHsKLSAgICAgICAgU3RyaW5nIGNsaWVudCA9IGdldEZpZWxkVmFsdWUoQ0xJRU5UX0NFUlRfS0VZLCBDTElFTlRfQ0VSVF9QUkVGSVgpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGNsaWVudCkpIHsKLSAgICAgICAgICAgIC8vIGEgdmFsaWQgY2xpZW50IGNlcnRpZmljYXRlIGlzIGNvbmZpZ3VyZWQKLQotICAgICAgICAgICAgLy8gQlVHQlVHOiBrZXlTdG9yZS5nZXQoKSBuZXZlciByZXR1cm5zIGNlcnRCeXRlczsgYmVjYXVzZSBpdCBpcyBub3QKLSAgICAgICAgICAgIC8vIHRha2luZyBXSUZJX1VJRCBhcyBhIHBhcmFtZXRlci4gSXQgYWx3YXlzIGxvb2tzIGZvciBjZXJ0aWZpY2F0ZQotICAgICAgICAgICAgLy8gd2l0aCBTWVNURU1fVUlELCBhbmQgbmV2ZXIgZmluZHMgYW55IFdpZmkgY2VydGlmaWNhdGVzLiBBc3N1bWluZyB0aGF0Ci0gICAgICAgICAgICAvLyBhbGwgY2VydGlmaWNhdGVzIG5lZWQgc29mdHdhcmUga2V5c3RvcmUgdW50aWwgd2UgZ2V0IHRoZSBnZXQoKSBBUEkKLSAgICAgICAgICAgIC8vIGZpeGVkLgotCi0gICAgICAgICAgICBtTmVlZHNTb2Z0d2FyZUtleXN0b3JlID0gdHJ1ZTsKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgIHRyeSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAoREJHKSBTbG9nLmQoVEFHLCAiTG9hZGluZyBjbGllbnQgY2VydGlmaWNhdGUgIiArIENyZWRlbnRpYWxzCi0gICAgICAgICAgICAgICAgICAgICAgICAuVVNFUl9DRVJUSUZJQ0FURSArIGNsaWVudCk7Ci0KLSAgICAgICAgICAgICAgICBDZXJ0aWZpY2F0ZUZhY3RvcnkgZmFjdG9yeSA9IENlcnRpZmljYXRlRmFjdG9yeS5nZXRJbnN0YW5jZSgiWC41MDkiKTsKLSAgICAgICAgICAgICAgICBpZiAoZmFjdG9yeSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJFcnJvciBnZXR0aW5nIGNlcnRpZmljYXRlIGZhY3RvcnkiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJ5dGVbXSBjZXJ0Qnl0ZXMgPSBrZXlTdG9yZS5nZXQoQ3JlZGVudGlhbHMuVVNFUl9DRVJUSUZJQ0FURSArIGNsaWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNlcnRCeXRlcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIENlcnRpZmljYXRlIGNlcnQgPSAoWDUwOUNlcnRpZmljYXRlKSBmYWN0b3J5LmdlbmVyYXRlQ2VydGlmaWNhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGNlcnRCeXRlcykpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjZXJ0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1OZWVkc1NvZnR3YXJlS2V5c3RvcmUgPSBoYXNIYXJkd2FyZUJhY2tlZEtleShjZXJ0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgU2xvZy5kKFRBRywgIkxvYWRlZCBjbGllbnQgY2VydGlmaWNhdGUgIiArIENyZWRlbnRpYWxzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5VU0VSX0NFUlRJRklDQVRFICsgY2xpZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIFNsb2cuZChUQUcsICJJdCAiICsgKG1OZWVkc1NvZnR3YXJlS2V5c3RvcmUgPyAibmVlZHMiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvZXMgbm90IG5lZWQiICkgKyAiIHNvZnR3YXJlIGtleSBzdG9yZSIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy5kKFRBRywgImNvdWxkIG5vdCBnZW5lcmF0ZSBjZXJ0aWZpY2F0ZSIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkNvdWxkIG5vdCBsb2FkIGNsaWVudCBjZXJ0aWZpY2F0ZSAiICsgQ3JlZGVudGlhbHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuVVNFUl9DRVJUSUZJQ0FURSArIGNsaWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIG1OZWVkc1NvZnR3YXJlS2V5c3RvcmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfSBjYXRjaChDZXJ0aWZpY2F0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkNvdWxkIG5vdCByZWFkIGNlcnRpZmljYXRlcyIpOwotICAgICAgICAgICAgICAgIG1DYUNlcnQgPSBudWxsOwotICAgICAgICAgICAgICAgIG1DbGllbnRDZXJ0aWZpY2F0ZSA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqLwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHJpdmF0ZSBTdHJpbmcgcmVtb3ZlRG91YmxlUXVvdGVzKFN0cmluZyBzdHJpbmcpIHsKICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHN0cmluZykpIHJldHVybiAiIjsKICAgICAgICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKQEAgLTgwNiw4ICs1ODUsOSBAQAogICAgICAqIEBwYXJhbSBrZXkgaW50byB0aGUgaGFzaAogICAgICAqIEBwYXJhbSBwcmVmaXggaXMgdGhlIHByZWZpeCB0aGF0IHRoZSB2YWx1ZSBtYXkgaGF2ZQogICAgICAqIEByZXR1cm4gdmFsdWUKKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHByaXZhdGUgU3RyaW5nIGdldEZpZWxkVmFsdWUoU3RyaW5nIGtleSwgU3RyaW5nIHByZWZpeCkgeworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RmllbGRWYWx1ZShTdHJpbmcga2V5LCBTdHJpbmcgcHJlZml4KSB7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IG1GaWVsZHMuZ2V0KGtleSk7CiAgICAgICAgIC8vIFVuaW5pdGlhbGl6ZWQgb3Iga25vd24gdG8gYmUgZW1wdHkgYWZ0ZXIgcmVhZGluZyBmcm9tIHN1cHBsaWNhbnQKICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSB8fCBFTVBUWV9WQUxVRS5lcXVhbHModmFsdWUpKSByZXR1cm4gIiI7CkBAIC04MjQsOCArNjA0LDkgQEAKICAgICAgKiBAcGFyYW0ga2V5IGludG8gdGhlIGhhc2gKICAgICAgKiBAcGFyYW0gdmFsdWUgdG8gYmUgc2V0CiAgICAgICogQHBhcmFtIHByZWZpeCBhbiBvcHRpb25hbCB2YWx1ZSB0byBiZSBwcmVmaXhlZCB0byBhY3R1YWwgdmFsdWUKKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXRGaWVsZFZhbHVlKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSwgU3RyaW5nIHByZWZpeCkgeworICAgIHB1YmxpYyB2b2lkIHNldEZpZWxkVmFsdWUoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgcHJlZml4KSB7CiAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKICAgICAgICAgICAgIG1GaWVsZHMucHV0KGtleSwgRU1QVFlfVkFMVUUpOwogICAgICAgICB9IGVsc2UgewpAQCAtODMzLDYgKzYxNCwyMSBAQAogICAgICAgICB9CiAgICAgfQogCisKKyAgICAvKiogU2V0IGEgdmFsdWUgd2l0aCBhbiBvcHRpb25hbCBwcmVmaXggYXQga2V5CisgICAgICogQHBhcmFtIGtleSBpbnRvIHRoZSBoYXNoCisgICAgICogQHBhcmFtIHZhbHVlIHRvIGJlIHNldAorICAgICAqIEBwYXJhbSBwcmVmaXggYW4gb3B0aW9uYWwgdmFsdWUgdG8gYmUgcHJlZml4ZWQgdG8gYWN0dWFsIHZhbHVlCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRGaWVsZFZhbHVlKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkgeworICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7CisgICAgICAgICAgIG1GaWVsZHMucHV0KGtleSwgRU1QVFlfVkFMVUUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUZpZWxkcy5wdXQoa2V5LCBjb252ZXJ0VG9RdW90ZWRTdHJpbmcodmFsdWUpKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlJbmZvLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpSW5mby5qYXZhCmluZGV4IDVkMTMwYzYuLjZhMTMwNjcgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlJbmZvLmphdmEKKysrIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUluZm8uamF2YQpAQCAtNjIsNyArNjIsNiBAQAogICAgIHByaXZhdGUgU3RyaW5nIG1CU1NJRDsKICAgICBwcml2YXRlIFdpZmlTc2lkIG1XaWZpU3NpZDsKICAgICBwcml2YXRlIGludCBtTmV0d29ya0lkOwotICAgIHByaXZhdGUgYm9vbGVhbiBtSGlkZGVuU1NJRDsKICAgICAvKiogUmVjZWl2ZWQgU2lnbmFsIFN0cmVuZ3RoIEluZGljYXRvciAqLwogICAgIHByaXZhdGUgaW50IG1Sc3NpOwogCkBAIC03OSwxNCArNzgsMTQgQEAKICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gbU1ldGVyZWRIaW50OwogCi0gICAgV2lmaUluZm8oKSB7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIFdpZmlJbmZvKCkgewogICAgICAgICBtV2lmaVNzaWQgPSBudWxsOwogICAgICAgICBtQlNTSUQgPSBudWxsOwogICAgICAgICBtTmV0d29ya0lkID0gLTE7CiAgICAgICAgIG1TdXBwbGljYW50U3RhdGUgPSBTdXBwbGljYW50U3RhdGUuVU5JTklUSUFMSVpFRDsKICAgICAgICAgbVJzc2kgPSAtOTk5OTsKICAgICAgICAgbUxpbmtTcGVlZCA9IC0xOwotICAgICAgICBtSGlkZGVuU1NJRCA9IGZhbHNlOwogICAgIH0KIAogICAgIC8qKgpAQCAtOTksNyArOTgsNiBAQAogICAgICAgICAgICAgbUJTU0lEID0gc291cmNlLm1CU1NJRDsKICAgICAgICAgICAgIG1XaWZpU3NpZCA9IHNvdXJjZS5tV2lmaVNzaWQ7CiAgICAgICAgICAgICBtTmV0d29ya0lkID0gc291cmNlLm1OZXR3b3JrSWQ7Ci0gICAgICAgICAgICBtSGlkZGVuU1NJRCA9IHNvdXJjZS5tSGlkZGVuU1NJRDsKICAgICAgICAgICAgIG1Sc3NpID0gc291cmNlLm1Sc3NpOwogICAgICAgICAgICAgbUxpbmtTcGVlZCA9IHNvdXJjZS5tTGlua1NwZWVkOwogICAgICAgICAgICAgbUlwQWRkcmVzcyA9IHNvdXJjZS5tSXBBZGRyZXNzOwpAQCAtMTA4LDEwICsxMDYsOSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBzZXRTU0lEKFdpZmlTc2lkIHdpZmlTc2lkKSB7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHZvaWQgc2V0U1NJRChXaWZpU3NpZCB3aWZpU3NpZCkgewogICAgICAgICBtV2lmaVNzaWQgPSB3aWZpU3NpZDsKLSAgICAgICAgLy8gbmV0d29yayBpcyBjb25zaWRlcmVkIG5vdCBoaWRkZW4gYnkgZGVmYXVsdAotICAgICAgICBtSGlkZGVuU1NJRCA9IGZhbHNlOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTM4LDcgKzEzNSw4IEBACiAgICAgICAgIHJldHVybiBtV2lmaVNzaWQ7CiAgICAgfQogCi0gICAgdm9pZCBzZXRCU1NJRChTdHJpbmcgQlNTSUQpIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRCU1NJRChTdHJpbmcgQlNTSUQpIHsKICAgICAgICAgbUJTU0lEID0gQlNTSUQ7CiAgICAgfQogCkBAIC0xNjEsNyArMTU5LDggQEAKICAgICAgICAgcmV0dXJuIG1Sc3NpOwogICAgIH0KIAotICAgIHZvaWQgc2V0UnNzaShpbnQgcnNzaSkgeworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIHNldFJzc2koaW50IHJzc2kpIHsKICAgICAgICAgbVJzc2kgPSByc3NpOwogICAgIH0KIApAQCAtMTc0LDE1ICsxNzMsMTcgQEAKICAgICAgICAgcmV0dXJuIG1MaW5rU3BlZWQ7CiAgICAgfQogCi0gICAgdm9pZCBzZXRMaW5rU3BlZWQoaW50IGxpbmtTcGVlZCkgeworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIHNldExpbmtTcGVlZChpbnQgbGlua1NwZWVkKSB7CiAgICAgICAgIHRoaXMubUxpbmtTcGVlZCA9IGxpbmtTcGVlZDsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBSZWNvcmQgdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBXTEFOIGludGVyZmFjZQogICAgICAqIEBwYXJhbSBtYWNBZGRyZXNzIHRoZSBNQUMgYWRkcmVzcyBpbiB7QGNvZGUgWFg6WFg6WFg6WFg6WFg6WFh9IGZvcm0KKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHZvaWQgc2V0TWFjQWRkcmVzcyhTdHJpbmcgbWFjQWRkcmVzcykgeworICAgIHB1YmxpYyB2b2lkIHNldE1hY0FkZHJlc3MoU3RyaW5nIG1hY0FkZHJlc3MpIHsKICAgICAgICAgdGhpcy5tTWFjQWRkcmVzcyA9IG1hY0FkZHJlc3M7CiAgICAgfQogCkBAIC0yMDAsNyArMjAxLDggQEAKICAgICAgICAgcmV0dXJuIG1NZXRlcmVkSGludDsKICAgICB9CiAKLSAgICB2b2lkIHNldE5ldHdvcmtJZChpbnQgaWQpIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrSWQoaW50IGlkKSB7CiAgICAgICAgIG1OZXR3b3JrSWQgPSBpZDsKICAgICB9CiAKQEAgLTIyMywxMSArMjI1LDEzIEBACiAgICAgICAgIHJldHVybiBtU3VwcGxpY2FudFN0YXRlOwogICAgIH0KIAotICAgIHZvaWQgc2V0U3VwcGxpY2FudFN0YXRlKFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSkgeworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIHNldFN1cHBsaWNhbnRTdGF0ZShTdXBwbGljYW50U3RhdGUgc3RhdGUpIHsKICAgICAgICAgbVN1cHBsaWNhbnRTdGF0ZSA9IHN0YXRlOwogICAgIH0KIAotICAgIHZvaWQgc2V0SW5ldEFkZHJlc3MoSW5ldEFkZHJlc3MgYWRkcmVzcykgeworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIHNldEluZXRBZGRyZXNzKEluZXRBZGRyZXNzIGFkZHJlc3MpIHsKICAgICAgICAgbUlwQWRkcmVzcyA9IGFkZHJlc3M7CiAgICAgfQogCkBAIC0yNDQsMTIgKzI0OCw3IEBACiAgICAgICogU1NJRC1zcGVjaWZpYyBwcm9iZSByZXF1ZXN0IG11c3QgYmUgdXNlZCBmb3Igc2NhbnMuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0SGlkZGVuU1NJRCgpIHsKLSAgICAgICAgcmV0dXJuIG1IaWRkZW5TU0lEOwotICAgIH0KLQotICAgIC8qKiB7QGhpZGV9ICovCi0gICAgcHVibGljIHZvaWQgc2V0SGlkZGVuU1NJRChib29sZWFuIGhpZGRlblNTSUQpIHsKLSAgICAgICAgbUhpZGRlblNTSUQgPSBoaWRkZW5TU0lEOworICAgICAgICByZXR1cm4gbVdpZmlTc2lkLmlzSGlkZGVuKCk7CiAgICAgfQogCiAgICAvKioKZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlNYW5hZ2VyLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpTWFuYWdlci5qYXZhCmluZGV4IDNiNDdlNjMuLmFhYmUwMDcgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlNYW5hZ2VyLmphdmEKKysrIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaU1hbmFnZXIuamF2YQpAQCAtMzUsNyArMzUsNiBAQAogaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFzeW5jQ2hhbm5lbDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByb3RvY29sOwogCkBAIC01MjMsNiArNTIyLDkgQEAKICAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBX0FDVElWSVRZX0lOT1VUICAgICAgICA9IDB4MDM7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9QT09SX05FVFdPUktfQVZPSURBTkNFX0VOQUJMRUQgPSBmYWxzZTsKKwogICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIGFjdGl2ZSBsb2NrcyB3ZSBhbGxvdy4KICAgICAgKiBUaGlzIGxpbWl0IHdhcyBhZGRlZCB0byBwcmV2ZW50IGFwcHMgZnJvbSBjcmVhdGluZyBhIHJpZGljdWxvdXMgbnVtYmVyCiAgICAgICogb2YgbG9ja3MgYW5kIGNyYXNoaW5nIHRoZSBzeXN0ZW0gYnkgb3ZlcmZsb3dpbmcgdGhlIGdsb2JhbCByZWYgdGFibGUuCkBAIC0yMTYzLDEzICsyMTY1LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKiBAaGlkZSAqLwotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgbVNlcnZpY2UuY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGUoKTsKLSAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHt9Ci0gICAgfQotCiAgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoc1RocmVhZFJlZkxvY2spIHsKZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlNb25pdG9yLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODE3Nzc3Li4wMDAwMDAwCi0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlNb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5uZXQud2lmaTsKLQotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBDb25maWc7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycERldmljZTsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5XaWZpUDJwR3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycFNlcnZpY2U7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycFNlcnZpY2UuUDJwU3RhdHVzOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBQcm92RGlzY0V2ZW50OwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLm5zZC5XaWZpUDJwU2VydmljZVJlc3BvbnNlOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuU3RhdGVDaGFuZ2VSZXN1bHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJvdG9jb2w7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZU1hY2hpbmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLQotLyoqCi0gKiBMaXN0ZW5zIGZvciBldmVudHMgZnJvbSB0aGUgd3BhX3N1cHBsaWNhbnQgc2VydmVyLCBhbmQgcGFzc2VzIHRoZW0gb24KLSAqIHRvIHRoZSB7QGxpbmsgU3RhdGVNYWNoaW5lfSBmb3IgaGFuZGxpbmcuIFJ1bnMgaW4gaXRzIG93biB0aHJlYWQuCi0gKgotICogQGhpZGUKLSAqLwotcHVibGljIGNsYXNzIFdpZmlNb25pdG9yIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXaWZpTW9uaXRvciI7Ci0KLSAgICAvKiogRXZlbnRzIHdlIHJlY2VpdmUgZnJvbSB0aGUgc3VwcGxpY2FudCBkYWVtb24gKi8KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT05ORUNURUQgICAgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBESVNDT05ORUNURUQgPSAyOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9DSEFOR0UgPSAzOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTQ0FOX1JFU1VMVFMgPSA0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU5LX1NQRUVEICAgPSA1OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVJNSU5BVElORyAgPSA2OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEUklWRVJfU1RBVEUgPSA3OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFQVBfRkFJTFVSRSAgPSA4OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBU1NPQ19SRUpFQ1QgPSA5OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTktOT1dOICAgICAgPSAxMDsKLQotICAgIC8qKiBBbGwgZXZlbnRzIGNvbWluZyBmcm9tIHRoZSBzdXBwbGljYW50IHN0YXJ0IHdpdGggdGhpcyBwcmVmaXggKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVZFTlRfUFJFRklYX1NUUiA9ICJDVFJMLUVWRU5ULSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1BSRUZJWF9MRU5fU1RSID0gRVZFTlRfUFJFRklYX1NUUi5sZW5ndGgoKTsKLQotICAgIC8qKiBBbGwgV1BBIGV2ZW50cyBjb21pbmcgZnJvbSB0aGUgc3VwcGxpY2FudCBzdGFydCB3aXRoIHRoaXMgcHJlZml4ICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdQQV9FVkVOVF9QUkVGSVhfU1RSID0gIldQQToiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQVNTV09SRF9NQVlfQkVfSU5DT1JSRUNUX1NUUiA9Ci0gICAgICAgInByZS1zaGFyZWQga2V5IG1heSBiZSBpbmNvcnJlY3QiOwotCi0gICAgLyogV1BTIGV2ZW50cyAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUFNfU1VDQ0VTU19TVFIgPSAiV1BTLVNVQ0NFU1MiOwotCi0gICAgLyogRm9ybWF0OiBXUFMtRkFJTCBtc2c9JWQgW2NvbmZpZ19lcnJvcj0lZF0gW3JlYXNvbj0lZCAoJXMpXSAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUFNfRkFJTF9TVFIgICAgPSAiV1BTLUZBSUwiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUFNfRkFJTF9QQVRURVJOID0KLSAgICAgICAgICAgICJXUFMtRkFJTCBtc2c9XFxkKyg/OiBjb25maWdfZXJyb3I9KFxcZCspKT8oPzogcmVhc29uPShcXGQrKSk/IjsKLQotICAgIC8qIGNvbmZpZyBlcnJvciBjb2RlIHZhbHVlcyBmb3IgY29uZmlnX2Vycm9yPSVkICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTkZJR19NVUxUSVBMRV9QQkNfREVURUNURUQgPSAxMjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09ORklHX0FVVEhfRkFJTFVSRSA9IDE4OwotCi0gICAgLyogcmVhc29uIGNvZGUgdmFsdWVzIGZvciByZWFzb249JWQgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1RLSVBfT05MWV9QUk9ISUJJVEVEID0gMTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1dFUF9QUk9ISUJJVEVEID0gMjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUFNfT1ZFUkxBUF9TVFIgPSAiV1BTLU9WRVJMQVAtREVURUNURUQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUFNfVElNRU9VVF9TVFIgPSAiV1BTLVRJTUVPVVQiOwotCi0gICAgLyoqCi0gICAgICogTmFtZXMgb2YgZXZlbnRzIGZyb20gd3BhX3N1cHBsaWNhbnQgKG1pbnVzIHRoZSBwcmVmaXgpLiBJbiB0aGUKLSAgICAgKiBmb3JtYXQgZGVzY3JpcHRpb25zLCAqICZxdW90Ozxjb2RlPng8L2NvZGU+JnF1b3Q7Ci0gICAgICogZGVzaWduYXRlcyBhIGR5bmFtaWMgdmFsdWUgdGhhdCBuZWVkcyB0byBiZSBwYXJzZWQgb3V0IGZyb20gdGhlIGV2ZW50Ci0gICAgICogc3RyaW5nCi0gICAgICovCi0gICAgLyoqCi0gICAgICogPHByZT4KLSAgICAgKiBDVFJMLUVWRU5ULUNPTk5FQ1RFRCAtIENvbm5lY3Rpb24gdG8geHg6eHg6eHg6eHg6eHg6eHggY29tcGxldGVkCi0gICAgICogPC9wcmU+Ci0gICAgICogPGNvZGU+eHg6eHg6eHg6eHg6eHg6eHg8L2NvZGU+IGlzIHRoZSBCU1NJRCBvZiB0aGUgYXNzb2NpYXRlZCBhY2Nlc3MgcG9pbnQKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OTkVDVEVEX1NUUiA9ICAgICJDT05ORUNURUQiOwotICAgIC8qKgotICAgICAqIDxwcmU+Ci0gICAgICogQ1RSTC1FVkVOVC1ESVNDT05ORUNURUQgLSBEaXNjb25uZWN0IGV2ZW50IC0gcmVtb3ZlIGtleXMKLSAgICAgKiA8L3ByZT4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTQ09OTkVDVEVEX1NUUiA9ICJESVNDT05ORUNURUQiOwotICAgIC8qKgotICAgICAqIDxwcmU+Ci0gICAgICogQ1RSTC1FVkVOVC1TVEFURS1DSEFOR0UgeAotICAgICAqIDwvcHJlPgotICAgICAqIDxjb2RlPng8L2NvZGU+IGlzIHRoZSBudW1lcmljYWwgdmFsdWUgb2YgdGhlIG5ldyBzdGF0ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBVEVfQ0hBTkdFX1NUUiA9ICAiU1RBVEUtQ0hBTkdFIjsKLSAgICAvKioKLSAgICAgKiA8cHJlPgotICAgICAqIENUUkwtRVZFTlQtU0NBTi1SRVNVTFRTIHJlYWR5Ci0gICAgICogPC9wcmU+Ci0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDQU5fUkVTVUxUU19TVFIgPSAgIlNDQU4tUkVTVUxUUyI7Ci0KLSAgICAvKioKLSAgICAgKiA8cHJlPgotICAgICAqIENUUkwtRVZFTlQtTElOSy1TUEVFRCB4IE1iL3MKLSAgICAgKiA8L3ByZT4KLSAgICAgKiB7QGNvZGUgeH0gaXMgdGhlIGxpbmsgc3BlZWQgaW4gTWIvc2VjLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5LX1NQRUVEX1NUUiA9ICJMSU5LLVNQRUVEIjsKLSAgICAvKioKLSAgICAgKiA8cHJlPgotICAgICAqIENUUkwtRVZFTlQtVEVSTUlOQVRJTkcgLSBzaWduYWwgeAotICAgICAqIDwvcHJlPgotICAgICAqIDxjb2RlPng8L2NvZGU+IGlzIHRoZSBzaWduYWwgdGhhdCBjYXVzZWQgdGVybWluYXRpb24uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFUk1JTkFUSU5HX1NUUiA9ICAiVEVSTUlOQVRJTkciOwotICAgIC8qKgotICAgICAqIDxwcmU+Ci0gICAgICogQ1RSTC1FVkVOVC1EUklWRVItU1RBVEUgc3RhdGUKLSAgICAgKiA8L3ByZT4KLSAgICAgKiA8Y29kZT5zdGF0ZTwvY29kZT4gY2FuIGJlIEhBTkdFRAotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEUklWRVJfU1RBVEVfU1RSID0gIkRSSVZFUi1TVEFURSI7Ci0gICAgLyoqCi0gICAgICogPHByZT4KLSAgICAgKiBDVFJMLUVWRU5ULUVBUC1GQUlMVVJFIEVBUCBhdXRoZW50aWNhdGlvbiBmYWlsZWQKLSAgICAgKiA8L3ByZT4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUFQX0ZBSUxVUkVfU1RSID0gIkVBUC1GQUlMVVJFIjsKLQotICAgIC8qKgotICAgICAqIFRoaXMgaW5kaWNhdGVzIGFuIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgb24gRUFQIEZBSUxVUkUgZXZlbnQKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUFQX0FVVEhfRkFJTFVSRV9TVFIgPSAiRUFQIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCI7Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGluZGljYXRlcyBhbiBhc3NvYyByZWplY3QgZXZlbnQKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVNTT0NfUkVKRUNUX1NUUiA9ICJBU1NPQy1SRUpFQ1QiOwotCi0gICAgLyoqCi0gICAgICogUmVnZXggcGF0dGVybiBmb3IgZXh0cmFjdGluZyBhbiBFdGhlcm5ldC1zdHlsZSBNQUMgYWRkcmVzcyBmcm9tIGEgc3RyaW5nLgotICAgICAqIE1hdGNoZXMgYSBzdHJpbmdzIGxpa2UgdGhlIGZvbGxvd2luZzo8cHJlPgotICAgICAqIENUUkwtRVZFTlQtQ09OTkVDVEVEIC0gQ29ubmVjdGlvbiB0byAwMDoxZTo1ODplYzpkNTo2ZCBjb21wbGV0ZWQgKHJlYXV0aCkgW2lkPTEgaWRfc3RyPV08L3ByZT4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBQYXR0ZXJuIG1Db25uZWN0ZWRFdmVudFBhdHRlcm4gPQotICAgICAgICBQYXR0ZXJuLmNvbXBpbGUoIigoPzpbMC05YS1mXXsyfTopezV9WzAtOWEtZl17Mn0pIC4qIFxcW2lkPShbMC05XSspICIpOwotCi0gICAgLyoqIFAyUCBldmVudHMgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0VWRU5UX1BSRUZJWF9TVFIgPSAiUDJQIjsKLQotICAgIC8qIFAyUC1ERVZJQ0UtRk9VTkQgZmE6N2I6N2E6NDI6MDI6MTMgcDJwX2Rldl9hZGRyPWZhOjdiOjdhOjQyOjAyOjEzIHByaV9kZXZfdHlwZT0xLTAwNTBGMjA0LTEKLSAgICAgICBuYW1lPSdwMnAtVEVTVDEnIGNvbmZpZ19tZXRob2RzPTB4MTg4IGRldl9jYXBhYj0weDI3IGdyb3VwX2NhcGFiPTB4MCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfREVWSUNFX0ZPVU5EX1NUUiA9ICJQMlAtREVWSUNFLUZPVU5EIjsKLQotICAgIC8qIFAyUC1ERVZJQ0UtTE9TVCBwMnBfZGV2X2FkZHI9NDI6ZmM6ODk6ZTE6ZTI6MjcgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0RFVklDRV9MT1NUX1NUUiA9ICJQMlAtREVWSUNFLUxPU1QiOwotCi0gICAgLyogUDJQLUZJTkQtU1RPUFBFRCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfRklORF9TVE9QUEVEX1NUUiA9ICJQMlAtRklORC1TVE9QUEVEIjsKLQotICAgIC8qIFAyUC1HTy1ORUctUkVRVUVTVCA0MjpmYzo4OTphODo5NjowOSBkZXZfcGFzc3dkX2lkPTQgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0dPX05FR19SRVFVRVNUX1NUUiA9ICJQMlAtR08tTkVHLVJFUVVFU1QiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9HT19ORUdfU1VDQ0VTU19TVFIgPSAiUDJQLUdPLU5FRy1TVUNDRVNTIjsKLQotICAgIC8qIFAyUC1HTy1ORUctRkFJTFVSRSBzdGF0dXM9eCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfR09fTkVHX0ZBSUxVUkVfU1RSID0gIlAyUC1HTy1ORUctRkFJTFVSRSI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0dST1VQX0ZPUk1BVElPTl9TVUNDRVNTX1NUUiA9Ci0gICAgICAgICAgICAiUDJQLUdST1VQLUZPUk1BVElPTi1TVUNDRVNTIjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfR1JPVVBfRk9STUFUSU9OX0ZBSUxVUkVfU1RSID0KLSAgICAgICAgICAgICJQMlAtR1JPVVAtRk9STUFUSU9OLUZBSUxVUkUiOwotCi0gICAgLyogUDJQLUdST1VQLVNUQVJURUQgcDJwLXdsYW4wLTAgW2NsaWVudHxHT10gc3NpZD0iRElSRUNULVc4IiBmcmVxPTI0MzcKLSAgICAgICBbcHNrPTIxODJiMmU1MGU1M2YyNjBkMDRmM2M3YjI1ZWYzM2M5NjVhMzI5MWI5YjM2YjQ1NWE4MmQ3N2ZkODJjYTE1YmN8cGFzc3BocmFzZT0iZktHNGpNZTMiXQotICAgICAgIGdvX2Rldl9hZGRyPWZhOjdiOjdhOjQyOjAyOjEzIFtQRVJTSVNURU5UXSAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfR1JPVVBfU1RBUlRFRF9TVFIgPSAiUDJQLUdST1VQLVNUQVJURUQiOwotCi0gICAgLyogUDJQLUdST1VQLVJFTU9WRUQgcDJwLXdsYW4wLTAgW2NsaWVudHxHT10gcmVhc29uPVJFUVVFU1RFRCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfR1JPVVBfUkVNT1ZFRF9TVFIgPSAiUDJQLUdST1VQLVJFTU9WRUQiOwotCi0gICAgLyogUDJQLUlOVklUQVRJT04tUkVDRUlWRUQgc2E9ZmE6N2I6N2E6NDI6MDI6MTMgZ29fZGV2X2FkZHI9Zjg6N2I6N2E6NDI6MDI6MTMKLSAgICAgICAgYnNzaWQ9ZmE6N2I6N2E6NDI6ODI6MTMgdW5rbm93bi1uZXR3b3JrICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9JTlZJVEFUSU9OX1JFQ0VJVkVEX1NUUiA9ICJQMlAtSU5WSVRBVElPTi1SRUNFSVZFRCI7Ci0KLSAgICAvKiBQMlAtSU5WSVRBVElPTi1SRVNVTFQgc3RhdHVzPTEgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0lOVklUQVRJT05fUkVTVUxUX1NUUiA9ICJQMlAtSU5WSVRBVElPTi1SRVNVTFQiOwotCi0gICAgLyogUDJQLVBST1YtRElTQy1QQkMtUkVRIDQyOmZjOjg5OmUxOmUyOjI3IHAycF9kZXZfYWRkcj00MjpmYzo4OTplMTplMjoyNwotICAgICAgIHByaV9kZXZfdHlwZT0xLTAwNTBGMjA0LTEgbmFtZT0ncDJwLVRFU1QyJyBjb25maWdfbWV0aG9kcz0weDE4OCBkZXZfY2FwYWI9MHgyNwotICAgICAgIGdyb3VwX2NhcGFiPTB4MCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfUFJPVl9ESVNDX1BCQ19SRVFfU1RSID0gIlAyUC1QUk9WLURJU0MtUEJDLVJFUSI7Ci0KLSAgICAvKiBQMlAtUFJPVi1ESVNDLVBCQy1SRVNQIDAyOjEyOjQ3OmYyOjVhOjM2ICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9QUk9WX0RJU0NfUEJDX1JTUF9TVFIgPSAiUDJQLVBST1YtRElTQy1QQkMtUkVTUCI7Ci0KLSAgICAvKiBQMlAtUFJPVi1ESVNDLUVOVEVSLVBJTiA0MjpmYzo4OTplMTplMjoyNyBwMnBfZGV2X2FkZHI9NDI6ZmM6ODk6ZTE6ZTI6MjcKLSAgICAgICBwcmlfZGV2X3R5cGU9MS0wMDUwRjIwNC0xIG5hbWU9J3AycC1URVNUMicgY29uZmlnX21ldGhvZHM9MHgxODggZGV2X2NhcGFiPTB4MjcKLSAgICAgICBncm91cF9jYXBhYj0weDAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX1BST1ZfRElTQ19FTlRFUl9QSU5fU1RSID0gIlAyUC1QUk9WLURJU0MtRU5URVItUElOIjsKLSAgICAvKiBQMlAtUFJPVi1ESVNDLVNIT1ctUElOIDQyOmZjOjg5OmUxOmUyOjI3IDQ0NDkwNjA3IHAycF9kZXZfYWRkcj00MjpmYzo4OTplMTplMjoyNwotICAgICAgIHByaV9kZXZfdHlwZT0xLTAwNTBGMjA0LTEgbmFtZT0ncDJwLVRFU1QyJyBjb25maWdfbWV0aG9kcz0weDE4OCBkZXZfY2FwYWI9MHgyNwotICAgICAgIGdyb3VwX2NhcGFiPTB4MCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfUFJPVl9ESVNDX1NIT1dfUElOX1NUUiA9ICJQMlAtUFJPVi1ESVNDLVNIT1ctUElOIjsKLSAgICAvKiBQMlAtUFJPVi1ESVNDLUZBSUxVUkUgcDJwX2Rldl9hZGRyPTQyOmZjOjg5OmUxOmUyOjI3ICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9QUk9WX0RJU0NfRkFJTFVSRV9TVFIgPSAiUDJQLVBST1YtRElTQy1GQUlMVVJFIjsKLQotICAgIC8qCi0gICAgICogUHJvdG9jb2wgZm9ybWF0IGlzIGFzIGZvbGxvd3MuPGJyPgotICAgICAqIFNlZSB0aGUgVGFibGUuNjIgaW4gdGhlIFdpRmkgRGlyZWN0IHNwZWNpZmljYXRpb24gZm9yIHRoZSBkZXRhaWwuCi0gICAgICogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgICAgKiB8ICAgICAgICAgICBMZW5ndGgoMmJ5dGUpICAgICB8IFR5cGUoMWJ5dGUpIHwgVHJhbnNJZCgxYnl0ZSl9fAotICAgICAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi0gICAgICogfCBzdGF0dXMoMWJ5dGUpICB8ICAgICAgICAgICAgdmVuZG9yIHNwZWNpZmljKHZhcmlhYmxlKSAgICAgIHwKLSAgICAgKgotICAgICAqIFAyUC1TRVJWLURJU0MtUkVTUCA0MjpmYzo4OTplMTplMjoyNyAxIDAzMDAwMDAxMDEKLSAgICAgKiBsZW5ndGg9Mywgc2VydmljZSB0eXBlPTAoQUxMIFNlcnZpY2UpLCB0cmFuc2FjdGlvbiBpZD0xLAotICAgICAqIHN0YXR1cz0xKHNlcnZpY2UgcHJvdG9jb2wgdHlwZSBub3QgYXZhaWxhYmxlKTxicj4KLSAgICAgKgotICAgICAqIFAyUC1TRVJWLURJU0MtUkVTUCA0MjpmYzo4OTplMTplMjoyNyAxIDAzMDAwMjAyMDEKLSAgICAgKiBsZW5ndGg9Mywgc2VydmljZSB0eXBlPTIoVVBuUCksIHRyYW5zYWN0aW9uIGlkPTIsCi0gICAgICogc3RhdHVzPTEoc2VydmljZSBwcm90b2NvbCB0eXBlIG5vdCBhdmFpbGFibGUpCi0gICAgICoKLSAgICAgKiBQMlAtU0VSVi1ESVNDLVJFU1AgNDI6ZmM6ODk6ZTE6ZTI6MjcgMSA5OTAwMDIwMzAwMTA3NTc1Njk2NDNhMzEzMTMyMwotICAgICAqIDI2NDY1MzQ2NTJkMzgzNTM3MzQyZDM1Mzk2MTYyMmQzOTMzMzIzMjJkMzMzMzMzMzQzNTM2MzczODM5MzAzNDM0M2EzCi0gICAgICogYTc1NzI2ZTNhNzM2MzY4NjU2ZDYxNzMyZDc1NzA2ZTcwMmQ2ZjcyNjczYTczNjU3Mjc2Njk2MzY1M2E0MzZmNmU3NDYKLSAgICAgKiA1NmU3NDQ0Njk3MjY1NjM3NDZmNzI3OTNhMzIyYzc1NzU2OTY0M2EzNjM4MzUzOTY0NjU2NDY1MmQzODM1MzczNDJkMwotICAgICAqIDUzOTYxNjIyZDM5MzMzMzMyMmQzMTMyMzMzNDM1MzYzNzM4MzkzMDMxMzIzYTNhNzU3MDZlNzAzYTcyNmY2Zjc0NjQ2Ci0gICAgICogNTc2Njk2MzY1Ci0gICAgICogbGVuZ3RoPTE1Myx0eXBlPTIoVVBuUCksdHJhbnNhY3Rpb24gaWQ9MyxzdGF0dXM9MAotICAgICAqCi0gICAgICogVVBuUCBQcm90b2NvbCBmb3JtYXQgaXMgYXMgZm9sbG93cy4KLSAgICAgKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgICAgKiB8ICBWZXJzaW9uICgxKSAgfCAgICAgICAgICBVU04gKFZhcmlhYmxlKSAgICAgICAgICAgIHwKLSAgICAgKgotICAgICAqIHZlcnNpb249MHgxMChVUG5QMS4wKSBkYXRhPXVzbjp1dWlkOjExMjJkZTRlLTg1NzQtNTlhYi05MzIyLTMzMzQ1Njc4Ci0gICAgICogOTA0NDo6dXJuOnNjaGVtYXMtdXBucC1vcmc6c2VydmljZTpDb250ZW50RGlyZWN0b3J5OjIsdXNuOnV1aWQ6Njg1OWQKLSAgICAgKiBlZGUtODU3NC01OWFiLTkzMzItMTIzNDU2Nzg5MDEyOjp1cG5wOnJvb3RkZXZpY2UKLSAgICAgKgotICAgICAqIFAyUC1TRVJWLURJU0MtUkVTUCA1ODoxNzowYzpiYzpkZDpjYSAyMSAxOTAwMDEwMjAwMDQ1ZjY5NzAKLSAgICAgKiA3MGMwMGMwMDBjMDEwOTRkNzk1MDcyNjk2ZTc0NjU3MmMwMjcKLSAgICAgKiBsZW5ndGg9MjUsIHR5cGU9MShCb25qb3VyKSx0cmFuc2FjdGlvbiBpZD0yLHN0YXR1cz0wCi0gICAgICoKLSAgICAgKiBCb25qb3VyIFByb3RvY29sIGZvcm1hdCBpcyBhcyBmb2xsb3dzLgotICAgICAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgICAgKiB8RE5TIE5hbWUoVmFyaWFibGUpfEROUyBUeXBlKDEpfFZlcnNpb24oMSl8UkRBVEEoVmFyaWFibGUpfAotICAgICAqCi0gICAgICogRE5TIE5hbWU9X2lwcC5fdGNwLmxvY2FsLixETlMgdHlwZT0xMihQVFIpLCBWZXJzaW9uPTEsCi0gICAgICogUkRBVEE9TXlQcmludGVyLl9pcHAuX3RjcC5sb2NhbC4KLSAgICAgKgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfU0VSVl9ESVNDX1JFU1BfU1RSID0gIlAyUC1TRVJWLURJU0MtUkVTUCI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSE9TVF9BUF9FVkVOVF9QUkVGSVhfU1RSID0gIkFQIjsKLSAgICAvKiBBUC1TVEEtQ09OTkVDVEVEIDQyOmZjOjg5OmE4Ojk2OjA5IGRldl9hZGRyPTAyOjkwOjRjOmEwOjkyOjU0ICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFQX1NUQV9DT05ORUNURURfU1RSID0gIkFQLVNUQS1DT05ORUNURUQiOwotICAgIC8qIEFQLVNUQS1ESVNDT05ORUNURUQgNDI6ZmM6ODk6YTg6OTY6MDkgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVBfU1RBX0RJU0NPTk5FQ1RFRF9TVFIgPSAiQVAtU1RBLURJU0NPTk5FQ1RFRCI7Ci0KLSAgICAvKiBTdXBwbGljYW50IGV2ZW50cyByZXBvcnRlZCB0byBhIHN0YXRlIG1hY2hpbmUgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQkFTRSA9IFByb3RvY29sLkJBU0VfV0lGSV9NT05JVE9SOwotCi0gICAgLyogQ29ubmVjdGlvbiB0byBzdXBwbGljYW50IGVzdGFibGlzaGVkICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQX0NPTk5FQ1RJT05fRVZFTlQgICAgICAgICAgICAgICAgID0gQkFTRSArIDE7Ci0gICAgLyogQ29ubmVjdGlvbiB0byBzdXBwbGljYW50IGxvc3QgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBfRElTQ09OTkVDVElPTl9FVkVOVCAgICAgICAgICAgICAgPSBCQVNFICsgMjsKLSAgIC8qIE5ldHdvcmsgY29ubmVjdGlvbiBjb21wbGV0ZWQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLX0NPTk5FQ1RJT05fRVZFTlQgICAgICAgICAgICAgPSBCQVNFICsgMzsKLSAgICAvKiBOZXR3b3JrIGRpc2Nvbm5lY3Rpb24gY29tcGxldGVkICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UICAgICAgICAgID0gQkFTRSArIDQ7Ci0gICAgLyogU2NhbiByZXN1bHRzIGFyZSBhdmFpbGFibGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ0FOX1JFU1VMVFNfRVZFTlQgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgNTsKLSAgICAvKiBTdXBwbGljYXRlIHN0YXRlIGNoYW5nZWQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVCAgICAgICAgPSBCQVNFICsgNjsKLSAgICAvKiBQYXNzd29yZCBmYWlsdXJlIGFuZCBFQVAgYXV0aGVudGljYXRpb24gZmFpbHVyZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkVfRVZFTlQgICAgICAgICA9IEJBU0UgKyA3OwotICAgIC8qIFdQUyBzdWNjZXNzIGRldGVjdGVkICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1BTX1NVQ0NFU1NfRVZFTlQgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDg7Ci0gICAgLyogV1BTIGZhaWx1cmUgZGV0ZWN0ZWQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXUFNfRkFJTF9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgOTsKLSAgICAgLyogV1BTIG92ZXJsYXAgZGV0ZWN0ZWQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXUFNfT1ZFUkxBUF9FVkVOVCAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTA7Ci0gICAgIC8qIFdQUyB0aW1lb3V0IGRldGVjdGVkICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1BTX1RJTUVPVVRfRVZFTlQgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDExOwotICAgIC8qIERyaXZlciB3YXMgaHVuZyAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUl9IVU5HX0VWRU5UICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAxMjsKLQotICAgIC8qIFAyUCBldmVudHMgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfREVWSUNFX0ZPVU5EX0VWRU5UICAgICAgICAgICAgICAgPSBCQVNFICsgMjE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0RFVklDRV9MT1NUX0VWRU5UICAgICAgICAgICAgICAgID0gQkFTRSArIDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9HT19ORUdPVElBVElPTl9SRVFVRVNUX0VWRU5UICAgICA9IEJBU0UgKyAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfR09fTkVHT1RJQVRJT05fU1VDQ0VTU19FVkVOVCAgICAgPSBCQVNFICsgMjU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0dPX05FR09USUFUSU9OX0ZBSUxVUkVfRVZFTlQgICAgID0gQkFTRSArIDI2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9HUk9VUF9GT1JNQVRJT05fU1VDQ0VTU19FVkVOVCAgICA9IEJBU0UgKyAyNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfR1JPVVBfRk9STUFUSU9OX0ZBSUxVUkVfRVZFTlQgICAgPSBCQVNFICsgMjg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0dST1VQX1NUQVJURURfRVZFTlQgICAgICAgICAgICAgID0gQkFTRSArIDI5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9HUk9VUF9SRU1PVkVEX0VWRU5UICAgICAgICAgICAgICA9IEJBU0UgKyAzMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfSU5WSVRBVElPTl9SRUNFSVZFRF9FVkVOVCAgICAgICAgPSBCQVNFICsgMzE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0lOVklUQVRJT05fUkVTVUxUX0VWRU5UICAgICAgICAgID0gQkFTRSArIDMyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9QUk9WX0RJU0NfUEJDX1JFUV9FVkVOVCAgICAgICAgICA9IEJBU0UgKyAzMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfUFJPVl9ESVNDX1BCQ19SU1BfRVZFTlQgICAgICAgICAgPSBCQVNFICsgMzQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX1BST1ZfRElTQ19FTlRFUl9QSU5fRVZFTlQgICAgICAgID0gQkFTRSArIDM1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9QUk9WX0RJU0NfU0hPV19QSU5fRVZFTlQgICAgICAgICA9IEJBU0UgKyAzNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfRklORF9TVE9QUEVEX0VWRU5UICAgICAgICAgICAgICAgPSBCQVNFICsgMzc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX1NFUlZfRElTQ19SRVNQX0VWRU5UICAgICAgICAgICAgID0gQkFTRSArIDM4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9QUk9WX0RJU0NfRkFJTFVSRV9FVkVOVCAgICAgICAgICA9IEJBU0UgKyAzOTsKLQotICAgIC8qIGhvc3RhcCBldmVudHMgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBUF9TVEFfRElTQ09OTkVDVEVEX0VWRU5UICAgICAgICAgICAgPSBCQVNFICsgNDE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVBfU1RBX0NPTk5FQ1RFRF9FVkVOVCAgICAgICAgICAgICAgID0gQkFTRSArIDQyOwotCi0gICAgLyogSW5kaWNhdGVzIGFzc29jIHJlamVjdCBldmVudCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFTU09DSUFUSU9OX1JFSkVDVElPTl9FVkVOVCAgICAgICAgICA9IEJBU0UgKyA0MzsKLSAgICAvKioKLSAgICAgKiBUaGlzIGluZGljYXRlcyB0aGUgc3VwcGxpY2FudCBjb25uZWN0aW9uIGZvciB0aGUgbW9uaXRvciBpcyBjbG9zZWQKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9OSVRPUl9TT0NLRVRfQ0xPU0VEX1NUUiA9ICJjb25uZWN0aW9uIGNsb3NlZCI7Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGluZGljYXRlcyBhIHJlYWQgZXJyb3Igb24gdGhlIG1vbml0b3Igc29ja2V0IGNvbmVuY3Rpb24KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1BBX1JFQ1ZfRVJST1JfU1RSID0gInJlY3YgZXJyb3IiOwotCi0gICAgLyoqCi0gICAgICogTWF4IGVycm9ycyBiZWZvcmUgd2UgY2xvc2Ugc3VwcGxpY2FudCBjb25uZWN0aW9uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9SRUNWX0VSUk9SUyAgICA9IDEwOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUludGVyZmFjZU5hbWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBXaWZpTmF0aXZlIG1XaWZpTmF0aXZlOwotICAgIHByaXZhdGUgZmluYWwgU3RhdGVNYWNoaW5lIG1XaWZpU3RhdGVNYWNoaW5lOwotICAgIHByaXZhdGUgYm9vbGVhbiBtTW9uaXRvcmluZzsKLQotICAgIHB1YmxpYyBXaWZpTW9uaXRvcihTdGF0ZU1hY2hpbmUgd2lmaVN0YXRlTWFjaGluZSwgV2lmaU5hdGl2ZSB3aWZpTmF0aXZlKSB7Ci0gICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkNyZWF0aW5nIFdpZmlNb25pdG9yIik7Ci0gICAgICAgIG1XaWZpTmF0aXZlID0gd2lmaU5hdGl2ZTsKLSAgICAgICAgbUludGVyZmFjZU5hbWUgPSB3aWZpTmF0aXZlLm1JbnRlcmZhY2VOYW1lOwotICAgICAgICBtV2lmaVN0YXRlTWFjaGluZSA9IHdpZmlTdGF0ZU1hY2hpbmU7Ci0gICAgICAgIG1Nb25pdG9yaW5nID0gZmFsc2U7Ci0KLSAgICAgICAgV2lmaU1vbml0b3JTaW5nbGV0b24uZ2V0TW9uaXRvcigpLnJlZ2lzdGVySW50ZXJmYWNlTW9uaXRvcihtSW50ZXJmYWNlTmFtZSwgdGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3RhcnRNb25pdG9yaW5nKCkgewotICAgICAgICBXaWZpTW9uaXRvclNpbmdsZXRvbi5nZXRNb25pdG9yKCkuc3RhcnRNb25pdG9yaW5nKG1JbnRlcmZhY2VOYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdG9wTW9uaXRvcmluZygpIHsKLSAgICAgICAgV2lmaU1vbml0b3JTaW5nbGV0b24uZ2V0TW9uaXRvcigpLnN0b3BNb25pdG9yaW5nKG1JbnRlcmZhY2VOYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdG9wU3VwcGxpY2FudCgpIHsKLSAgICAgICAgV2lmaU1vbml0b3JTaW5nbGV0b24uZ2V0TW9uaXRvcigpLnN0b3BTdXBwbGljYW50KCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQga2lsbFN1cHBsaWNhbnQoYm9vbGVhbiBwMnBTdXBwb3J0ZWQpIHsKLSAgICAgICAgV2lmaU1vbml0b3JTaW5nbGV0b24uZ2V0TW9uaXRvcigpLmtpbGxTdXBwbGljYW50KHAycFN1cHBvcnRlZCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgV2lmaU1vbml0b3JTaW5nbGV0b24gewotICAgICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3Qgc1NpbmdsZXRvbkxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIFdpZmlNb25pdG9yU2luZ2xldG9uIHNXaWZpTW9uaXRvclNpbmdsZXRvbiA9IG51bGw7Ci0gICAgICAgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsIFdpZmlNb25pdG9yPiBtSWZhY2VNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFdpZmlNb25pdG9yPigpOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUNvbm5lY3RlZCA9IGZhbHNlOwotICAgICAgICBwcml2YXRlIFdpZmlOYXRpdmUgbVdpZmlOYXRpdmU7Ci0KLSAgICAgICAgcHJpdmF0ZSBXaWZpTW9uaXRvclNpbmdsZXRvbigpIHsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBXaWZpTW9uaXRvclNpbmdsZXRvbiBnZXRNb25pdG9yKCkgewotICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiV2lmaU1vbml0b3JTaW5nbGV0b24gZ290dGVuIik7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHNTaW5nbGV0b25Mb2NrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNXaWZpTW9uaXRvclNpbmdsZXRvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIldpZmlNb25pdG9yU2luZ2xldG9uIGNyZWF0ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgc1dpZmlNb25pdG9yU2luZ2xldG9uID0gbmV3IFdpZmlNb25pdG9yU2luZ2xldG9uKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHNXaWZpTW9uaXRvclNpbmdsZXRvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdGFydE1vbml0b3JpbmcoU3RyaW5nIGlmYWNlKSB7Ci0gICAgICAgICAgICBXaWZpTW9uaXRvciBtID0gbUlmYWNlTWFwLmdldChpZmFjZSk7Ci0gICAgICAgICAgICBpZiAobSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAic3RhcnRNb25pdG9yIGNhbGxlZCB3aXRoIHVua25vd24gaWZhY2U9IiArIGlmYWNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExvZy5kKFRBRywgInN0YXJ0TW9uaXRvcmluZygiICsgaWZhY2UgKyAiKSB3aXRoIG1Db25uZWN0ZWQgPSAiICsgbUNvbm5lY3RlZCk7Ci0KLSAgICAgICAgICAgIGlmIChtQ29ubmVjdGVkKSB7Ci0gICAgICAgICAgICAgICAgbS5tTW9uaXRvcmluZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbS5tV2lmaVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShTVVBfQ09OTkVDVElPTl9FVkVOVCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgImNvbm5lY3RpbmcgdG8gc3VwcGxpY2FudCIpOwotICAgICAgICAgICAgICAgIGludCBjb25uZWN0VHJpZXMgPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5jb25uZWN0VG9TdXBwbGljYW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG0ubU1vbml0b3JpbmcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgbS5tV2lmaVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShTVVBfQ09OTkVDVElPTl9FVkVOVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgTW9uaXRvclRocmVhZChtV2lmaU5hdGl2ZSwgdGhpcykuc3RhcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RUcmllcysrIDwgNSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZ25vcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1JZmFjZU1hcC5yZW1vdmUoaWZhY2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgbS5tV2lmaVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShTVVBfRElTQ09OTkVDVElPTl9FVkVOVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJzdGFydE1vbml0b3JpbmcoIiArIGlmYWNlICsgIikgZmFpbGVkISIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc3RvcE1vbml0b3JpbmcoU3RyaW5nIGlmYWNlKSB7Ci0gICAgICAgICAgICBXaWZpTW9uaXRvciBtID0gbUlmYWNlTWFwLmdldChpZmFjZSk7Ci0gICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJzdG9wTW9uaXRvcmluZygiICsgaWZhY2UgKyAiKSA9ICIgKyBtLm1XaWZpU3RhdGVNYWNoaW5lKTsKLSAgICAgICAgICAgIG0ubU1vbml0b3JpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIG0ubVdpZmlTdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoU1VQX0RJU0NPTk5FQ1RJT05fRVZFTlQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlZ2lzdGVySW50ZXJmYWNlTW9uaXRvcihTdHJpbmcgaWZhY2UsIFdpZmlNb25pdG9yIG0pIHsKLSAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgInJlZ2lzdGVySW50ZXJmYWNlKCIgKyBpZmFjZSArICIrIiArIG0ubVdpZmlTdGF0ZU1hY2hpbmUgKyAiKSIpOwotICAgICAgICAgICAgbUlmYWNlTWFwLnB1dChpZmFjZSwgbSk7Ci0gICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlID0gbS5tV2lmaU5hdGl2ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCB1bnJlZ2lzdGVySW50ZXJmYWNlTW9uaXRvcihTdHJpbmcgaWZhY2UpIHsKLSAgICAgICAgICAgIC8vIFJFVklFVzogV2hlbiBzaG91bGQgd2UgY2FsbCB0aGlzPyBJZiB0aGlzIGlzbid0IGNhbGxlZCwgdGhlbiBXaWZpTW9uaXRvcgotICAgICAgICAgICAgLy8gb2JqZWN0cyB3aWxsIHJlbWFpbiBpbiB0aGUgbUlmYWNlTWFwOyBhbmQgd29uJ3QgZXZlciBnZXQgZGVsZXRlZAotCi0gICAgICAgICAgICBXaWZpTW9uaXRvciBtID0gbUlmYWNlTWFwLnJlbW92ZShpZmFjZSk7Ci0gICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJ1bnJlZ2lzdGVySW50ZXJmYWNlKCIgKyBpZmFjZSArICIrIiArIG0ubVdpZmlTdGF0ZU1hY2hpbmUgKyAiKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0b3BTdXBwbGljYW50KCkgewotICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RvcFN1cHBsaWNhbnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBraWxsU3VwcGxpY2FudChib29sZWFuIHAycFN1cHBvcnRlZCkgewotICAgICAgICAgICAgbVdpZmlOYXRpdmUua2lsbFN1cHBsaWNhbnQocDJwU3VwcG9ydGVkKTsKLSAgICAgICAgICAgIG1Db25uZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIEl0ZXJhdG9yPE1hcC5FbnRyeTxTdHJpbmcsIFdpZmlNb25pdG9yPj4gaXQgPSBtSWZhY2VNYXAuZW50cnlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIE1hcC5FbnRyeTxTdHJpbmcsIFdpZmlNb25pdG9yPiBlID0gaXQubmV4dCgpOwotICAgICAgICAgICAgICAgIFdpZmlNb25pdG9yIG0gPSBlLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgbS5tTW9uaXRvcmluZyA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgV2lmaU1vbml0b3IgZ2V0TW9uaXRvcihTdHJpbmcgaWZhY2UpIHsKLSAgICAgICAgICAgIHJldHVybiBtSWZhY2VNYXAuZ2V0KGlmYWNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE1vbml0b3JUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewotICAgICAgICBwcml2YXRlIGZpbmFsIFdpZmlOYXRpdmUgbVdpZmlOYXRpdmU7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgV2lmaU1vbml0b3JTaW5nbGV0b24gbVdpZmlNb25pdG9yU2luZ2xldG9uOwotICAgICAgICBwcml2YXRlIGludCBtUmVjdkVycm9ycyA9IDA7Ci0gICAgICAgIHByaXZhdGUgU3RhdGVNYWNoaW5lIG1TdGF0ZU1hY2hpbmUgPSBudWxsOwotCi0gICAgICAgIHB1YmxpYyBNb25pdG9yVGhyZWFkKFdpZmlOYXRpdmUgd2lmaU5hdGl2ZSwgV2lmaU1vbml0b3JTaW5nbGV0b24gd2lmaU1vbml0b3JTaW5nbGV0b24pIHsKLSAgICAgICAgICAgIHN1cGVyKCJXaWZpTW9uaXRvciIpOwotICAgICAgICAgICAgbVdpZmlOYXRpdmUgPSB3aWZpTmF0aXZlOwotICAgICAgICAgICAgbVdpZmlNb25pdG9yU2luZ2xldG9uID0gd2lmaU1vbml0b3JTaW5nbGV0b247Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBJbmZpbml0ZUxvb3BTdGF0ZW1lbnQKLSAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZXZlbnRTdHIgPSBtV2lmaU5hdGl2ZS53YWl0Rm9yRXZlbnQoKTsKLQotICAgICAgICAgICAgICAgIC8vIFNraXAgbG9nZ2luZyB0aGUgY29tbW9uIGJ1dCBtb3N0bHkgdW5pbnRlcmVzdGluZyBzY2FuLXJlc3VsdHMgZXZlbnQKLSAgICAgICAgICAgICAgICBpZiAoREJHICYmIGV2ZW50U3RyLmluZGV4T2YoU0NBTl9SRVNVTFRTX1NUUikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiRXZlbnQgWyIgKyBldmVudFN0ciArICJdIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3RyaW5nIGlmYWNlID0gInAycDAiOwotICAgICAgICAgICAgICAgIFdpZmlNb25pdG9yIG0gPSBudWxsOwotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgaWYgKGV2ZW50U3RyLnN0YXJ0c1dpdGgoIklGTkFNRT0iKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgc3BhY2UgPSBldmVudFN0ci5pbmRleE9mKCcgJyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzcGFjZSAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UgPSBldmVudFN0ci5zdWJzdHJpbmcoNyxzcGFjZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtID0gbVdpZmlNb25pdG9yU2luZ2xldG9uLmdldE1vbml0b3IoaWZhY2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gPT0gbnVsbCAmJiBpZmFjZS5zdGFydHNXaXRoKCJwMnAtIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwMnAgaW50ZXJmYWNlcyBhcmUgY3JlYXRlZCBkeW5hbWljYWxseSwgYnV0IHdlIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IG9uZSBQMnAgc3RhdGUgbWFjaGluZSBtb25pdG9yaW5nIGFsbCBvZiB0aGVtOyBsb29rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGl0IGV4cGxpY2l0bHksIGFuZCBzZW5kIG1lc3NhZ2VzIHRoZXJlIC4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG1XaWZpTW9uaXRvclNpbmdsZXRvbi5nZXRNb25pdG9yKCJwMnAwIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudFN0ciA9IGV2ZW50U3RyLnN1YnN0cmluZyhzcGFjZSArIDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZXZlbnRzIHdpdGhvdXQgcHJlZml4IGJlbG9uZyB0byBwMnAwIG1vbml0b3IKLSAgICAgICAgICAgICAgICAgICAgbSA9IG1XaWZpTW9uaXRvclNpbmdsZXRvbi5nZXRNb25pdG9yKCJwMnAwIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG0gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobS5tTW9uaXRvcmluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZSA9IG0ubVdpZmlTdGF0ZU1hY2hpbmU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJEcm9wcGluZyBldmVudCBiZWNhdXNlIG1vbml0b3IgKCIgKyBpZmFjZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIGlzIHN0b3BwZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1TdGF0ZU1hY2hpbmUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcGF0Y2hFdmVudChldmVudFN0cikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiU2VuZGluZyB0byBhbGwgbW9uaXRvcnMgYmVjYXVzZSB0aGVyZSdzIG5vIGludGVyZmFjZSBpZCIpOwotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGRvbmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3I8TWFwLkVudHJ5PFN0cmluZywgV2lmaU1vbml0b3I+PiBpdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlNb25pdG9yU2luZ2xldG9uLm1JZmFjZU1hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hcC5FbnRyeTxTdHJpbmcsIFdpZmlNb25pdG9yPiBlID0gaXQubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGUuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUgPSBtLm1XaWZpU3RhdGVNYWNoaW5lOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3BhdGNoRXZlbnQoZXZlbnRTdHIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWZ0ZXIgdGhpcyB0aHJlYWQgdGVybWluYXRlcywgd2UnbGwgbm8gbG9uZ2VyCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZSBjb25uZWN0ZWQgdG8gdGhlIHN1cHBsaWNhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkRpc2Nvbm5lY3RpbmcgZnJvbSB0aGUgc3VwcGxpY2FudCwgbm8gbW9yZSBldmVudHMiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTW9uaXRvclNpbmdsZXRvbi5tQ29ubmVjdGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIHN1cHBsaWNhbnQgZGlzY29ubmVjdGlvbiAqLwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChTdHJpbmcgZXZlbnRTdHIpIHsKLQotICAgICAgICAgICAgaWYgKCFldmVudFN0ci5zdGFydHNXaXRoKEVWRU5UX1BSRUZJWF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV2ZW50U3RyLnN0YXJ0c1dpdGgoV1BBX0VWRU5UX1BSRUZJWF9TVFIpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAwIDwgZXZlbnRTdHIuaW5kZXhPZihQQVNTV09SRF9NQVlfQkVfSU5DT1JSRUNUX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShBVVRIRU5USUNBVElPTl9GQUlMVVJFX0VWRU5UKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50U3RyLnN0YXJ0c1dpdGgoV1BTX1NVQ0NFU1NfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFdQU19TVUNDRVNTX0VWRU5UKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50U3RyLnN0YXJ0c1dpdGgoV1BTX0ZBSUxfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICBoYW5kbGVXcHNGYWlsRXZlbnQoZXZlbnRTdHIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRTdHIuc3RhcnRzV2l0aChXUFNfT1ZFUkxBUF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoV1BTX09WRVJMQVBfRVZFTlQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRTdHIuc3RhcnRzV2l0aChXUFNfVElNRU9VVF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoV1BTX1RJTUVPVVRfRVZFTlQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRTdHIuc3RhcnRzV2l0aChQMlBfRVZFTlRfUFJFRklYX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlUDJwRXZlbnRzKGV2ZW50U3RyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50U3RyLnN0YXJ0c1dpdGgoSE9TVF9BUF9FVkVOVF9QUkVGSVhfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICBoYW5kbGVIb3N0QXBFdmVudHMoZXZlbnRTdHIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLncoVEFHLCAiY291bGRuJ3QgaWRlbnRpZnkgZXZlbnQgdHlwZSAtICIgKyBldmVudFN0cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nIGV2ZW50TmFtZSA9IGV2ZW50U3RyLnN1YnN0cmluZyhFVkVOVF9QUkVGSVhfTEVOX1NUUik7Ci0gICAgICAgICAgICBpbnQgbmFtZUVuZCA9IGV2ZW50TmFtZS5pbmRleE9mKCcgJyk7Ci0gICAgICAgICAgICBpZiAobmFtZUVuZCAhPSAtMSkKLSAgICAgICAgICAgICAgICBldmVudE5hbWUgPSBldmVudE5hbWUuc3Vic3RyaW5nKDAsIG5hbWVFbmQpOwotICAgICAgICAgICAgaWYgKGV2ZW50TmFtZS5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmkoVEFHLCAiUmVjZWl2ZWQgd3BhX3N1cHBsaWNhbnQgZXZlbnQgd2l0aCBlbXB0eSBldmVudCBuYW1lIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIE1hcCBldmVudCBuYW1lIGludG8gZXZlbnQgZW51bQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpbnQgZXZlbnQ7Ci0gICAgICAgICAgICBpZiAoZXZlbnROYW1lLmVxdWFscyhDT05ORUNURURfU1RSKSkKLSAgICAgICAgICAgICAgICBldmVudCA9IENPTk5FQ1RFRDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZS5lcXVhbHMoRElTQ09OTkVDVEVEX1NUUikpCi0gICAgICAgICAgICAgICAgZXZlbnQgPSBESVNDT05ORUNURUQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudE5hbWUuZXF1YWxzKFNUQVRFX0NIQU5HRV9TVFIpKQotICAgICAgICAgICAgICAgIGV2ZW50ID0gU1RBVEVfQ0hBTkdFOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lLmVxdWFscyhTQ0FOX1JFU1VMVFNfU1RSKSkKLSAgICAgICAgICAgICAgICBldmVudCA9IFNDQU5fUkVTVUxUUzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZS5lcXVhbHMoTElOS19TUEVFRF9TVFIpKQotICAgICAgICAgICAgICAgIGV2ZW50ID0gTElOS19TUEVFRDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZS5lcXVhbHMoVEVSTUlOQVRJTkdfU1RSKSkKLSAgICAgICAgICAgICAgICBldmVudCA9IFRFUk1JTkFUSU5HOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lLmVxdWFscyhEUklWRVJfU1RBVEVfU1RSKSkKLSAgICAgICAgICAgICAgICBldmVudCA9IERSSVZFUl9TVEFURTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZS5lcXVhbHMoRUFQX0ZBSUxVUkVfU1RSKSkKLSAgICAgICAgICAgICAgICBldmVudCA9IEVBUF9GQUlMVVJFOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lLmVxdWFscyhBU1NPQ19SRUpFQ1RfU1RSKSkKLSAgICAgICAgICAgICAgICBldmVudCA9IEFTU09DX1JFSkVDVDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBldmVudCA9IFVOS05PV047Ci0KLSAgICAgICAgICAgIFN0cmluZyBldmVudERhdGEgPSBldmVudFN0cjsKLSAgICAgICAgICAgIGlmIChldmVudCA9PSBEUklWRVJfU1RBVEUgfHwgZXZlbnQgPT0gTElOS19TUEVFRCkKLSAgICAgICAgICAgICAgICBldmVudERhdGEgPSBldmVudERhdGEuc3BsaXQoIiAiKVsxXTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50ID09IFNUQVRFX0NIQU5HRSB8fCBldmVudCA9PSBFQVBfRkFJTFVSRSkgewotICAgICAgICAgICAgICAgIGludCBpbmQgPSBldmVudFN0ci5pbmRleE9mKCIgIik7Ci0gICAgICAgICAgICAgICAgaWYgKGluZCAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBldmVudERhdGEgPSBldmVudFN0ci5zdWJzdHJpbmcoaW5kICsgMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kID0gZXZlbnRTdHIuaW5kZXhPZigiIC0gIik7Ci0gICAgICAgICAgICAgICAgaWYgKGluZCAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBldmVudERhdGEgPSBldmVudFN0ci5zdWJzdHJpbmcoaW5kICsgMyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZXZlbnQgPT0gU1RBVEVfQ0hBTkdFKSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlU3VwcGxpY2FudFN0YXRlQ2hhbmdlKGV2ZW50RGF0YSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IERSSVZFUl9TVEFURSkgewotICAgICAgICAgICAgICAgIGhhbmRsZURyaXZlckV2ZW50KGV2ZW50RGF0YSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IFRFUk1JTkFUSU5HKSB7Ci0gICAgICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICogQ2xvc2UgdGhlIHN1cHBsaWNhbnQgY29ubmVjdGlvbiBpZiB3ZSBzZWUKLSAgICAgICAgICAgICAgICAgKiB0b28gbWFueSByZWN2IGVycm9ycwotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmIChldmVudERhdGEuc3RhcnRzV2l0aChXUEFfUkVDVl9FUlJPUl9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgrK21SZWN2RXJyb3JzID4gTUFYX1JFQ1ZfRVJST1JTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAidG9vIG1hbnkgcmVjdiBlcnJvcnMsIGNsb3NpbmcgY29ubmVjdGlvbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gbm90aWZ5IGFuZCBleGl0Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShTVVBfRElTQ09OTkVDVElPTl9FVkVOVCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IEVBUF9GQUlMVVJFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV2ZW50RGF0YS5zdGFydHNXaXRoKEVBUF9BVVRIX0ZBSUxVUkVfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKEFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkVfRVZFTlQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gQVNTT0NfUkVKRUNUKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShBU1NPQ0lBVElPTl9SRUpFQ1RJT05fRVZFTlQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVFdmVudChldmVudCwgZXZlbnREYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1SZWN2RXJyb3JzID0gMDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVEcml2ZXJFdmVudChTdHJpbmcgc3RhdGUpIHsKLSAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0YXRlLmVxdWFscygiSEFOR0VEIikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKERSSVZFUl9IVU5HX0VWRU5UKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBIYW5kbGUgYWxsIHN1cHBsaWNhbnQgZXZlbnRzIGV4Y2VwdCBTVEFURS1DSEFOR0UKLSAgICAgICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0eXBlCi0gICAgICAgICAqIEBwYXJhbSByZW1haW5kZXIgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBmb2xsb3dpbmcgdGhlCi0gICAgICAgICAqIGV2ZW50IG5hbWUgYW5kICZxdW90OyYjODE5NTsmIzgyMTI7JiM4MTk1OyZxdW90OwotICAgICAgICAgKi8KLSAgICAgICAgdm9pZCBoYW5kbGVFdmVudChpbnQgZXZlbnQsIFN0cmluZyByZW1haW5kZXIpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIERJU0NPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya1N0YXRlQ2hhbmdlKE5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGUuRElTQ09OTkVDVEVELCByZW1haW5kZXIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgQ09OTkVDVEVEOgotICAgICAgICAgICAgICAgICAgICBoYW5kbGVOZXR3b3JrU3RhdGVDaGFuZ2UoTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQsIHJlbWFpbmRlcik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTQ0FOX1JFU1VMVFM6Ci0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoU0NBTl9SRVNVTFRTX0VWRU5UKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFVOS05PV046Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVdwc0ZhaWxFdmVudChTdHJpbmcgZGF0YVN0cmluZykgewotICAgICAgICAgICAgZmluYWwgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKFdQU19GQUlMX1BBVFRFUk4pOwotICAgICAgICAgICAgTWF0Y2hlciBtYXRjaCA9IHAubWF0Y2hlcihkYXRhU3RyaW5nKTsKLSAgICAgICAgICAgIGlmIChtYXRjaC5maW5kKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgY2ZnRXJyID0gbWF0Y2guZ3JvdXAoMSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHJlYXNvbiA9IG1hdGNoLmdyb3VwKDIpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlYXNvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChJbnRlZ2VyLnBhcnNlSW50KHJlYXNvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUkVBU09OX1RLSVBfT05MWV9QUk9ISUJJVEVEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UobVN0YXRlTWFjaGluZS5vYnRhaW5NZXNzYWdlKFdQU19GQUlMX0VWRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuV1BTX1RLSVBfT05MWV9QUk9ISUJJVEVELCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSRUFTT05fV0VQX1BST0hJQklURUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShtU3RhdGVNYWNoaW5lLm9idGFpbk1lc3NhZ2UoV1BTX0ZBSUxfRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5XUFNfV0VQX1BST0hJQklURUQsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNmZ0VyciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChJbnRlZ2VyLnBhcnNlSW50KGNmZ0VycikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09ORklHX0FVVEhfRkFJTFVSRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKG1TdGF0ZU1hY2hpbmUub2J0YWluTWVzc2FnZShXUFNfRkFJTF9FVkVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLldQU19BVVRIX0ZBSUxVUkUsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENPTkZJR19NVUxUSVBMRV9QQkNfREVURUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShtU3RhdGVNYWNoaW5lLm9idGFpbk1lc3NhZ2UoV1BTX0ZBSUxfRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5XUFNfT1ZFUkxBUF9FUlJPUiwgMCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vRm9yIGFsbCBvdGhlciBlcnJvcnMsIHJldHVybiBhIGdlbmVyaWMgaW50ZXJuYWwgZXJyb3IKLSAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UobVN0YXRlTWFjaGluZS5vYnRhaW5NZXNzYWdlKFdQU19GQUlMX0VWRU5ULAotICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5FUlJPUiwgMCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogPGV2ZW50PiBzdGF0dXM9PGVycj4gYW5kIHRoZSBzcGVjaWFsIGNhc2Ugb2YgPGV2ZW50PiByZWFzb249RlJFUV9DT05GTElDVCAqLwotICAgICAgICBwcml2YXRlIFAycFN0YXR1cyBwMnBFcnJvcihTdHJpbmcgZGF0YVN0cmluZykgewotICAgICAgICAgICAgUDJwU3RhdHVzIGVyciA9IFAycFN0YXR1cy5VTktOT1dOOwotICAgICAgICAgICAgU3RyaW5nW10gdG9rZW5zID0gZGF0YVN0cmluZy5zcGxpdCgiICIpOwotICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPCAyKSByZXR1cm4gZXJyOwotICAgICAgICAgICAgU3RyaW5nW10gbmFtZVZhbHVlID0gdG9rZW5zWzFdLnNwbGl0KCI9Iik7Ci0gICAgICAgICAgICBpZiAobmFtZVZhbHVlLmxlbmd0aCAhPSAyKSByZXR1cm4gZXJyOwotCi0gICAgICAgICAgICAvKiBIYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiByZWFzb249RlJFUStDT05GTElDVCAqLwotICAgICAgICAgICAgaWYgKG5hbWVWYWx1ZVsxXS5lcXVhbHMoIkZSRVFfQ09ORkxJQ1QiKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBQMnBTdGF0dXMuTk9fQ09NTU9OX0NIQU5ORUw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGVyciA9IFAycFN0YXR1cy52YWx1ZU9mKEludGVnZXIucGFyc2VJbnQobmFtZVZhbHVlWzFdKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEhhbmRsZSBwMnAgZXZlbnRzCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHZvaWQgaGFuZGxlUDJwRXZlbnRzKFN0cmluZyBkYXRhU3RyaW5nKSB7Ci0gICAgICAgICAgICBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9ERVZJQ0VfRk9VTkRfU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0RFVklDRV9GT1VORF9FVkVOVCwgbmV3IFdpZmlQMnBEZXZpY2UoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0RFVklDRV9MT1NUX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9ERVZJQ0VfTE9TVF9FVkVOVCwgbmV3IFdpZmlQMnBEZXZpY2UoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0ZJTkRfU1RPUFBFRF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfRklORF9TVE9QUEVEX0VWRU5UKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9HT19ORUdfUkVRVUVTVF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfR09fTkVHT1RJQVRJT05fUkVRVUVTVF9FVkVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWZpUDJwQ29uZmlnKGRhdGFTdHJpbmcpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9HT19ORUdfU1VDQ0VTU19TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfR09fTkVHT1RJQVRJT05fU1VDQ0VTU19FVkVOVCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfR09fTkVHX0ZBSUxVUkVfU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0dPX05FR09USUFUSU9OX0ZBSUxVUkVfRVZFTlQsIHAycEVycm9yKGRhdGFTdHJpbmcpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9HUk9VUF9GT1JNQVRJT05fU1VDQ0VTU19TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfR1JPVVBfRk9STUFUSU9OX1NVQ0NFU1NfRVZFTlQpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0dST1VQX0ZPUk1BVElPTl9GQUlMVVJFX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9HUk9VUF9GT1JNQVRJT05fRkFJTFVSRV9FVkVOVCwgcDJwRXJyb3IoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0dST1VQX1NUQVJURURfU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0dST1VQX1NUQVJURURfRVZFTlQsIG5ldyBXaWZpUDJwR3JvdXAoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0dST1VQX1JFTU9WRURfU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0dST1VQX1JFTU9WRURfRVZFTlQsIG5ldyBXaWZpUDJwR3JvdXAoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0lOVklUQVRJT05fUkVDRUlWRURfU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0lOVklUQVRJT05fUkVDRUlWRURfRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lmaVAycEdyb3VwKGRhdGFTdHJpbmcpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9JTlZJVEFUSU9OX1JFU1VMVF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfSU5WSVRBVElPTl9SRVNVTFRfRVZFTlQsIHAycEVycm9yKGRhdGFTdHJpbmcpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9QUk9WX0RJU0NfUEJDX1JFUV9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfUFJPVl9ESVNDX1BCQ19SRVFfRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lmaVAycFByb3ZEaXNjRXZlbnQoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX1BST1ZfRElTQ19QQkNfUlNQX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9QUk9WX0RJU0NfUEJDX1JTUF9FVkVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWZpUDJwUHJvdkRpc2NFdmVudChkYXRhU3RyaW5nKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfUFJPVl9ESVNDX0VOVEVSX1BJTl9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfUFJPVl9ESVNDX0VOVEVSX1BJTl9FVkVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWZpUDJwUHJvdkRpc2NFdmVudChkYXRhU3RyaW5nKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfUFJPVl9ESVNDX1NIT1dfUElOX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9QUk9WX0RJU0NfU0hPV19QSU5fRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lmaVAycFByb3ZEaXNjRXZlbnQoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX1BST1ZfRElTQ19GQUlMVVJFX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9QUk9WX0RJU0NfRkFJTFVSRV9FVkVOVCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfU0VSVl9ESVNDX1JFU1BfU1RSKSkgewotICAgICAgICAgICAgICAgIExpc3Q8V2lmaVAycFNlcnZpY2VSZXNwb25zZT4gbGlzdCA9IFdpZmlQMnBTZXJ2aWNlUmVzcG9uc2UubmV3SW5zdGFuY2UoZGF0YVN0cmluZyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9TRVJWX0RJU0NfUkVTUF9FVkVOVCwgbGlzdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiTnVsbCBzZXJ2aWNlIHJlc3AgIiArIGRhdGFTdHJpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBIYW5kbGUgaG9zdGFwIGV2ZW50cwotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUhvc3RBcEV2ZW50cyhTdHJpbmcgZGF0YVN0cmluZykgewotICAgICAgICAgICAgU3RyaW5nW10gdG9rZW5zID0gZGF0YVN0cmluZy5zcGxpdCgiICIpOwotICAgICAgICAgICAgLyogQVAtU1RBLUNPTk5FQ1RFRCA0MjpmYzo4OTphODo5NjowOSBwMnBfZGV2X2FkZHI9MDI6OTA6NGM6YTA6OTI6NTQgKi8KLSAgICAgICAgICAgIGlmICh0b2tlbnNbMF0uZXF1YWxzKEFQX1NUQV9DT05ORUNURURfU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoQVBfU1RBX0NPTk5FQ1RFRF9FVkVOVCwgbmV3IFdpZmlQMnBEZXZpY2UoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgLyogQVAtU1RBLURJU0NPTk5FQ1RFRCA0MjpmYzo4OTphODo5NjowOSBwMnBfZGV2X2FkZHI9MDI6OTA6NGM6YTA6OTI6NTQgKi8KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW5zWzBdLmVxdWFscyhBUF9TVEFfRElTQ09OTkVDVEVEX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKEFQX1NUQV9ESVNDT05ORUNURURfRVZFTlQsIG5ldyBXaWZpUDJwRGV2aWNlKGRhdGFTdHJpbmcpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBIYW5kbGUgdGhlIHN1cHBsaWNhbnQgU1RBVEUtQ0hBTkdFIGV2ZW50Ci0gICAgICAgICAqIEBwYXJhbSBkYXRhU3RyaW5nIE5ldyBzdXBwbGljYW50IHN0YXRlIHN0cmluZyBpbiB0aGUgZm9ybWF0OgotICAgICAgICAgKiBpZD1uZXR3b3JrLWlkIHN0YXRlPW5ldy1zdGF0ZQotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVN1cHBsaWNhbnRTdGF0ZUNoYW5nZShTdHJpbmcgZGF0YVN0cmluZykgewotICAgICAgICAgICAgV2lmaVNzaWQgd2lmaVNzaWQgPSBudWxsOwotICAgICAgICAgICAgaW50IGluZGV4ID0gZGF0YVN0cmluZy5sYXN0SW5kZXhPZigiU1NJRD0iKTsKLSAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewotICAgICAgICAgICAgICAgIHdpZmlTc2lkID0gV2lmaVNzaWQuY3JlYXRlRnJvbUFzY2lpRW5jb2RlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgNSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nW10gZGF0YVRva2VucyA9IGRhdGFTdHJpbmcuc3BsaXQoIiAiKTsKLQotICAgICAgICAgICAgU3RyaW5nIEJTU0lEID0gbnVsbDsKLSAgICAgICAgICAgIGludCBuZXR3b3JrSWQgPSAtMTsKLSAgICAgICAgICAgIGludCBuZXdTdGF0ZSAgPSAtMTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIHRva2VuIDogZGF0YVRva2VucykgewotICAgICAgICAgICAgICAgIFN0cmluZ1tdIG5hbWVWYWx1ZSA9IHRva2VuLnNwbGl0KCI9Iik7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVWYWx1ZS5sZW5ndGggIT0gMikgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobmFtZVZhbHVlWzBdLmVxdWFscygiQlNTSUQiKSkgewotICAgICAgICAgICAgICAgICAgICBCU1NJRCA9IG5hbWVWYWx1ZVsxXTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaW50IHZhbHVlOwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gSW50ZWdlci5wYXJzZUludChuYW1lVmFsdWVbMV0pOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChuYW1lVmFsdWVbMF0uZXF1YWxzKCJpZCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ldHdvcmtJZCA9IHZhbHVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZVZhbHVlWzBdLmVxdWFscygic3RhdGUiKSkgewotICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG5ld1N0YXRlID09IC0xKSByZXR1cm47Ci0KLSAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBuZXdTdXBwbGljYW50U3RhdGUgPSBTdXBwbGljYW50U3RhdGUuSU5WQUxJRDsKLSAgICAgICAgICAgIGZvciAoU3VwcGxpY2FudFN0YXRlIHN0YXRlIDogU3VwcGxpY2FudFN0YXRlLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlLm9yZGluYWwoKSA9PSBuZXdTdGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBuZXdTdXBwbGljYW50U3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5ld1N1cHBsaWNhbnRTdGF0ZSA9PSBTdXBwbGljYW50U3RhdGUuSU5WQUxJRCkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkludmFsaWQgc3VwcGxpY2FudCBzdGF0ZTogIiArIG5ld1N0YXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5vdGlmeVN1cHBsaWNhbnRTdGF0ZUNoYW5nZShuZXR3b3JrSWQsIHdpZmlTc2lkLCBCU1NJRCwgbmV3U3VwcGxpY2FudFN0YXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVOZXR3b3JrU3RhdGVDaGFuZ2UoTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZSBuZXdTdGF0ZSwgU3RyaW5nIGRhdGEpIHsKLSAgICAgICAgICAgIFN0cmluZyBCU1NJRCA9IG51bGw7Ci0gICAgICAgICAgICBpbnQgbmV0d29ya0lkID0gLTE7Ci0gICAgICAgICAgICBpZiAobmV3U3RhdGUgPT0gTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICAgICAgICBNYXRjaGVyIG1hdGNoID0gbUNvbm5lY3RlZEV2ZW50UGF0dGVybi5tYXRjaGVyKGRhdGEpOwotICAgICAgICAgICAgICAgIGlmICghbWF0Y2guZmluZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkNvdWxkIG5vdCBmaW5kIEJTU0lEIGluIENPTk5FQ1RFRCBldmVudCBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBCU1NJRCA9IG1hdGNoLmdyb3VwKDEpOwotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya0lkID0gSW50ZWdlci5wYXJzZUludChtYXRjaC5ncm91cCgyKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrSWQgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2UobmV3U3RhdGUsIEJTU0lELCBuZXR3b3JrSWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNlbmQgdGhlIHN0YXRlIG1hY2hpbmUgYSBub3RpZmljYXRpb24gdGhhdCB0aGUgc3RhdGUgb2YgV2lmaSBjb25uZWN0aXZpdHkKLSAgICAgICAgICogaGFzIGNoYW5nZWQuCi0gICAgICAgICAqIEBwYXJhbSBuZXR3b3JrSWQgdGhlIGNvbmZpZ3VyZWQgbmV0d29yayBvbiB3aGljaCB0aGUgc3RhdGUgY2hhbmdlIG9jY3VycmVkCi0gICAgICAgICAqIEBwYXJhbSBuZXdTdGF0ZSB0aGUgbmV3IG5ldHdvcmsgc3RhdGUKLSAgICAgICAgICogQHBhcmFtIEJTU0lEIHdoZW4gdGhlIG5ldyBzdGF0ZSBpcyB7QGxpbmsgRGV0YWlsZWRTdGF0ZSNDT05ORUNURUQKLSAgICAgICAgICogTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZS5DT05ORUNURUR9LAotICAgICAgICAgKiB0aGlzIGlzIHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgYWNjZXNzIHBvaW50LiBPdGhlcndpc2UsIGl0Ci0gICAgICAgICAqIGlzIHtAY29kZSBudWxsfS4KLSAgICAgICAgICovCi0gICAgICAgIHZvaWQgbm90aWZ5TmV0d29ya1N0YXRlQ2hhbmdlKE5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGUgbmV3U3RhdGUsIFN0cmluZyBCU1NJRCwgaW50IG5ldElkKSB7Ci0gICAgICAgICAgICBpZiAobmV3U3RhdGUgPT0gTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICAgICAgICBNZXNzYWdlIG0gPSBtU3RhdGVNYWNoaW5lLm9idGFpbk1lc3NhZ2UoTkVUV09SS19DT05ORUNUSU9OX0VWRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQsIDAsIEJTU0lEKTsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKG0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBNZXNzYWdlIG0gPSBtU3RhdGVNYWNoaW5lLm9idGFpbk1lc3NhZ2UoTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQsIDAsIEJTU0lEKTsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKG0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNlbmQgdGhlIHN0YXRlIG1hY2hpbmUgYSBub3RpZmljYXRpb24gdGhhdCB0aGUgc3RhdGUgb2YgdGhlIHN1cHBsaWNhbnQKLSAgICAgICAgICogaGFzIGNoYW5nZWQuCi0gICAgICAgICAqIEBwYXJhbSBuZXR3b3JrSWQgdGhlIGNvbmZpZ3VyZWQgbmV0d29yayBvbiB3aGljaCB0aGUgc3RhdGUgY2hhbmdlIG9jY3VycmVkCi0gICAgICAgICAqIEBwYXJhbSB3aWZpU3NpZCBuZXR3b3JrIG5hbWUKLSAgICAgICAgICogQHBhcmFtIEJTU0lEIG5ldHdvcmsgYWRkcmVzcwotICAgICAgICAgKiBAcGFyYW0gbmV3U3RhdGUgdGhlIG5ldyB7QGNvZGUgU3VwcGxpY2FudFN0YXRlfQotICAgICAgICAgKi8KLSAgICAgICAgdm9pZCBub3RpZnlTdXBwbGljYW50U3RhdGVDaGFuZ2UoaW50IG5ldHdvcmtJZCwgV2lmaVNzaWQgd2lmaVNzaWQsIFN0cmluZyBCU1NJRCwKLSAgICAgICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UobVN0YXRlTWFjaGluZS5vYnRhaW5NZXNzYWdlKFNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5ULAotICAgICAgICAgICAgICAgICAgICBuZXcgU3RhdGVDaGFuZ2VSZXN1bHQobmV0d29ya0lkLCB3aWZpU3NpZCwgQlNTSUQsIG5ld1N0YXRlKSkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaU5hdGl2ZS5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaU5hdGl2ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmYyNzhhLi4wMDAwMDAwCi0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlOYXRpdmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm5ldC53aWZpOwotCi1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycENvbmZpZzsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5XaWZpUDJwR3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5uc2QuV2lmaVAycFNlcnZpY2VJbmZvOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2NhbExvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotCi0vKioKLSAqIE5hdGl2ZSBjYWxscyBmb3IgYnJpbmcgdXAvc2h1dCBkb3duIG9mIHRoZSBzdXBwbGljYW50IGRhZW1vbiBhbmQgZm9yCi0gKiBzZW5kaW5nIHJlcXVlc3RzIHRvIHRoZSBzdXBwbGljYW50IGRhZW1vbgotICoKLSAqIHdhaXRGb3JFdmVudCgpIGlzIGNhbGxlZCBvbiB0aGUgbW9uaXRvciB0aHJlYWQgZm9yIGV2ZW50cy4gQWxsIG90aGVyIG1ldGhvZHMKLSAqIG11c3QgYmUgc2VyaWFsaXplZCBmcm9tIHRoZSBmcmFtZXdvcmsuCi0gKgotICoge0BoaWRlfQotICovCi1wdWJsaWMgY2xhc3MgV2lmaU5hdGl2ZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERCRyA9IGZhbHNlOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1UQUc7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfR1JPVVBfT1dORVJfSU5URU5UICAgICA9IDY7Ci0KLSAgICBzdGF0aWMgZmluYWwgaW50IEJMVUVUT09USF9DT0VYSVNURU5DRV9NT0RFX0VOQUJMRUQgICAgID0gMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEJMVUVUT09USF9DT0VYSVNURU5DRV9NT0RFX0RJU0FCTEVEICAgID0gMTsKLSAgICBzdGF0aWMgZmluYWwgaW50IEJMVUVUT09USF9DT0VYSVNURU5DRV9NT0RFX1NFTlNFICAgICAgID0gMjsKLQotICAgIHN0YXRpYyBmaW5hbCBpbnQgU0NBTl9XSVRIT1VUX0NPTk5FQ1RJT05fU0VUVVAgICAgICAgICAgPSAxOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgU0NBTl9XSVRIX0NPTk5FQ1RJT05fU0VUVVAgICAgICAgICAgICAgPSAyOwotCi0gICAgLy8gSG9sZCB0aGlzIGxvY2sgYmVmb3JlIGNhbGxpbmcgc3VwcGxpY2FudCAtIGl0IGlzIHJlcXVpcmVkIHRvCi0gICAgLy8gbXV0dWFsbHkgZXhjbHVkZSBhY2Nlc3MgZnJvbSBXaWZpIGFuZCBQMnAgc3RhdGUgbWFjaGluZXMKLSAgICBzdGF0aWMgZmluYWwgT2JqZWN0IG1Mb2NrID0gbmV3IE9iamVjdCgpOwotCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBtSW50ZXJmYWNlTmFtZTsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIG1JbnRlcmZhY2VQcmVmaXg7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbVN1c3BlbmRPcHRFbmFibGVkID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBib29sZWFuIGxvYWREcml2ZXIoKTsKLQotICAgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gaXNEcml2ZXJMb2FkZWQoKTsKLQotICAgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gdW5sb2FkRHJpdmVyKCk7Ci0KLSAgICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBib29sZWFuIHN0YXJ0U3VwcGxpY2FudChib29sZWFuIHAycFN1cHBvcnRlZCk7Ci0KLSAgICAvKiBTZW5kcyBhIGtpbGwgc2lnbmFsIHRvIHN1cHBsaWNhbnQuIFRvIGJlIHVzZWQgd2hlbiB3ZSBoYXZlIGxvc3QgY29ubmVjdGlvbgotICAgICAgIG9yIHdoZW4gdGhlIHN1cHBsaWNhbnQgaXMgaHVuZyAqLwotICAgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4ga2lsbFN1cHBsaWNhbnQoYm9vbGVhbiBwMnBTdXBwb3J0ZWQpOwotCi0gICAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBjb25uZWN0VG9TdXBwbGljYW50TmF0aXZlKCk7Ci0KLSAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIGNsb3NlU3VwcGxpY2FudENvbm5lY3Rpb25OYXRpdmUoKTsKLQotICAgIC8qKgotICAgICAqIFdhaXQgZm9yIHRoZSBzdXBwbGljYW50IHRvIHNlbmQgYW4gZXZlbnQsIHJldHVybmluZyB0aGUgZXZlbnQgc3RyaW5nLgotICAgICAqIEByZXR1cm4gdGhlIGV2ZW50IHN0cmluZyBzZW50IGJ5IHRoZSBzdXBwbGljYW50LgotICAgICAqLwotICAgIHByaXZhdGUgbmF0aXZlIFN0cmluZyB3YWl0Rm9yRXZlbnROYXRpdmUoKTsKLQotICAgIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gZG9Cb29sZWFuQ29tbWFuZE5hdGl2ZShTdHJpbmcgY29tbWFuZCk7Ci0KLSAgICBwcml2YXRlIG5hdGl2ZSBpbnQgZG9JbnRDb21tYW5kTmF0aXZlKFN0cmluZyBjb21tYW5kKTsKLQotICAgIHByaXZhdGUgbmF0aXZlIFN0cmluZyBkb1N0cmluZ0NvbW1hbmROYXRpdmUoU3RyaW5nIGNvbW1hbmQpOwotCi0gICAgcHVibGljIFdpZmlOYXRpdmUoU3RyaW5nIGludGVyZmFjZU5hbWUpIHsKLSAgICAgICAgbUludGVyZmFjZU5hbWUgPSBpbnRlcmZhY2VOYW1lOwotICAgICAgICBtVEFHID0gIldpZmlOYXRpdmUtIiArIGludGVyZmFjZU5hbWU7Ci0gICAgICAgIGlmICghaW50ZXJmYWNlTmFtZS5lcXVhbHMoInAycDAiKSkgewotICAgICAgICAgICAgbUludGVyZmFjZVByZWZpeCA9ICJJRk5BTUU9IiArIGludGVyZmFjZU5hbWUgKyAiICI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBjb21tYW5kcyBmb3IgcDJwMCBpbnRlcmZhY2UgZG9uJ3QgbmVlZCBwcmVmaXgKLSAgICAgICAgICAgIG1JbnRlcmZhY2VQcmVmaXggPSAiIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvY2FsTG9nIG1Mb2NhbExvZyA9IG5ldyBMb2NhbExvZygxMDI0KTsKLQotICAgIC8vIGhvbGQgbUxvY2sgYmVmb3JlIGFjY2Vzc2luZyBtQ21kSWRMb2NrCi0gICAgcHJpdmF0ZSBpbnQgbUNtZElkOwotCi0gICAgcHVibGljIExvY2FsTG9nIGdldExvY2FsTG9nKCkgewotICAgICAgICByZXR1cm4gbUxvY2FsTG9nOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGdldE5ld0NtZElkTG9ja2VkKCkgewotICAgICAgICByZXR1cm4gbUNtZElkKys7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGxvY2FsTG9nKFN0cmluZyBzKSB7Ci0gICAgICAgIGlmIChtTG9jYWxMb2cgIT0gbnVsbCkKLSAgICAgICAgICAgIG1Mb2NhbExvZy5sb2cobUludGVyZmFjZU5hbWUgKyAiOiAiICsgcyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gY29ubmVjdFRvU3VwcGxpY2FudCgpIHsKLSAgICAgICAgLy8gTm8gc3luY2hyb25pemF0aW9uIG5lY2Vzc2FyeSAuLiBpdCBpcyBpbXBsZW1lbnRlZCBpbiBXaWZpTW9uaXRvcgotICAgICAgICBsb2NhbExvZyhtSW50ZXJmYWNlUHJlZml4ICsgImNvbm5lY3RUb1N1cHBsaWNhbnQiKTsKLSAgICAgICAgcmV0dXJuIGNvbm5lY3RUb1N1cHBsaWNhbnROYXRpdmUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbG9zZVN1cHBsaWNhbnRDb25uZWN0aW9uKCkgewotICAgICAgICBsb2NhbExvZyhtSW50ZXJmYWNlUHJlZml4ICsgImNsb3NlU3VwcGxpY2FudENvbm5lY3Rpb24iKTsKLSAgICAgICAgY2xvc2VTdXBwbGljYW50Q29ubmVjdGlvbk5hdGl2ZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgd2FpdEZvckV2ZW50KCkgewotICAgICAgICAvLyBObyBzeW5jaHJvbml6YXRpb24gbmVjZXNzYXJ5IC4uIGl0IGlzIGltcGxlbWVudGVkIGluIFdpZmlNb25pdG9yCi0gICAgICAgIHJldHVybiB3YWl0Rm9yRXZlbnROYXRpdmUoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gZG9Cb29sZWFuQ29tbWFuZChTdHJpbmcgY29tbWFuZCkgewotICAgICAgICBpZiAoREJHKSBMb2cuZChtVEFHLCAiZG9Cb29sZWFuOiAiICsgY29tbWFuZCk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIGludCBjbWRJZCA9IGdldE5ld0NtZElkTG9ja2VkKCk7Ci0gICAgICAgICAgICBsb2NhbExvZyhjbWRJZCArICItPiIgKyBtSW50ZXJmYWNlUHJlZml4ICsgY29tbWFuZCk7Ci0gICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IGRvQm9vbGVhbkNvbW1hbmROYXRpdmUobUludGVyZmFjZVByZWZpeCArIGNvbW1hbmQpOwotICAgICAgICAgICAgbG9jYWxMb2coY21kSWQgKyAiPC0iICsgcmVzdWx0KTsKLSAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKG1UQUcsICIgICByZXR1cm5lZCAiICsgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBkb0ludENvbW1hbmQoU3RyaW5nIGNvbW1hbmQpIHsKLSAgICAgICAgaWYgKERCRykgTG9nLmQobVRBRywgImRvSW50OiAiICsgY29tbWFuZCk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIGludCBjbWRJZCA9IGdldE5ld0NtZElkTG9ja2VkKCk7Ci0gICAgICAgICAgICBsb2NhbExvZyhjbWRJZCArICItPiIgKyBtSW50ZXJmYWNlUHJlZml4ICsgY29tbWFuZCk7Ci0gICAgICAgICAgICBpbnQgcmVzdWx0ID0gZG9JbnRDb21tYW5kTmF0aXZlKG1JbnRlcmZhY2VQcmVmaXggKyBjb21tYW5kKTsKLSAgICAgICAgICAgIGxvY2FsTG9nKGNtZElkICsgIjwtIiArIHJlc3VsdCk7Ci0gICAgICAgICAgICBpZiAoREJHKSBMb2cuZChtVEFHLCAiICAgcmV0dXJuZWQgIiArIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgZG9TdHJpbmdDb21tYW5kKFN0cmluZyBjb21tYW5kKSB7Ci0gICAgICAgIGlmIChEQkcpIExvZy5kKG1UQUcsICJkb1N0cmluZzogIiArIGNvbW1hbmQpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBpbnQgY21kSWQgPSBnZXROZXdDbWRJZExvY2tlZCgpOwotICAgICAgICAgICAgbG9jYWxMb2coY21kSWQgKyAiLT4iICsgbUludGVyZmFjZVByZWZpeCArIGNvbW1hbmQpOwotICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGRvU3RyaW5nQ29tbWFuZE5hdGl2ZShtSW50ZXJmYWNlUHJlZml4ICsgY29tbWFuZCk7Ci0gICAgICAgICAgICBsb2NhbExvZyhjbWRJZCArICI8LSIgKyByZXN1bHQpOwotICAgICAgICAgICAgaWYgKERCRykgTG9nLmQobVRBRywgIiAgIHJldHVybmVkICIgKyByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIGRvU3RyaW5nQ29tbWFuZFdpdGhvdXRMb2dnaW5nKFN0cmluZyBjb21tYW5kKSB7Ci0gICAgICAgIGlmIChEQkcpIExvZy5kKG1UQUcsICJkb1N0cmluZzogIiArIGNvbW1hbmQpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kTmF0aXZlKG1JbnRlcmZhY2VQcmVmaXggKyBjb21tYW5kKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHBpbmcoKSB7Ci0gICAgICAgIFN0cmluZyBwb25nID0gZG9TdHJpbmdDb21tYW5kKCJQSU5HIik7Ci0gICAgICAgIHJldHVybiAocG9uZyAhPSBudWxsICYmIHBvbmcuZXF1YWxzKCJQT05HIikpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNjYW4oaW50IHR5cGUpIHsKLSAgICAgICAgaWYgKHR5cGUgPT0gU0NBTl9XSVRIT1VUX0NPTk5FQ1RJT05fU0VUVVApIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTQ0FOIFRZUEU9T05MWSIpOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gU0NBTl9XSVRIX0NPTk5FQ1RJT05fU0VUVVApIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTQ0FOIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHNjYW4gdHlwZSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogRG9lcyBhIGdyYWNlZnVsIHNodXRkb3duIG9mIHN1cHBsaWNhbnQuIElzIGEgY29tbW9uIHN0b3AgZnVuY3Rpb24gZm9yIGJvdGggcDJwIGFuZCBzdGEuCi0gICAgICoKLSAgICAgKiBOb3RlIHRoYXQgdW5kZXJuZWF0aCB3ZSB1c2UgYSBoYXJzaC1zb3VuZGluZyAidGVybWluYXRlIiBzdXBwbGljYW50IGNvbW1hbmQKLSAgICAgKiBmb3IgYSBncmFjZWZ1bCBzdG9wIGFuZCBhIG1pbGQtc291bmRpbmcgInN0b3AiIGludGVyZmFjZQotICAgICAqIHRvIGtpbGwgdGhlIHByb2Nlc3MKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzdG9wU3VwcGxpY2FudCgpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlRFUk1JTkFURSIpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgbGlzdE5ldHdvcmtzKCkgewotICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKCJMSVNUX05FVFdPUktTIik7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBhZGROZXR3b3JrKCkgewotICAgICAgICByZXR1cm4gZG9JbnRDb21tYW5kKCJBRERfTkVUV09SSyIpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldE5ldHdvcmtWYXJpYWJsZShpbnQgbmV0SWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG5hbWUpIHx8IFRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VUX05FVFdPUksgIiArIG5ldElkICsgIiAiICsgbmFtZSArICIgIiArIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5ldHdvcmtWYXJpYWJsZShpbnQgbmV0SWQsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShuYW1lKSkgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgLy8gR0VUX05FVFdPUksgd2lsbCBsaWtlbHkgZmxvb2QgdGhlIGxvZ3MgLi4uCi0gICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmRXaXRob3V0TG9nZ2luZygiR0VUX05FVFdPUksgIiArIG5ldElkICsgIiAiICsgbmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcmVtb3ZlTmV0d29yayhpbnQgbmV0SWQpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlJFTU9WRV9ORVRXT1JLICIgKyBuZXRJZCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZW5hYmxlTmV0d29yayhpbnQgbmV0SWQsIGJvb2xlYW4gZGlzYWJsZU90aGVycykgewotICAgICAgICBpZiAoZGlzYWJsZU90aGVycykgewotICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFTEVDVF9ORVRXT1JLICIgKyBuZXRJZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRU5BQkxFX05FVFdPUksgIiArIG5ldElkKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGRpc2FibGVOZXR3b3JrKGludCBuZXRJZCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRElTQUJMRV9ORVRXT1JLICIgKyBuZXRJZCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcmVjb25uZWN0KCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUkVDT05ORUNUIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcmVhc3NvY2lhdGUoKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJSRUFTU09DSUFURSIpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGRpc2Nvbm5lY3QoKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJESVNDT05ORUNUIik7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBzdGF0dXMoKSB7Ci0gICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmQoIlNUQVRVUyIpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWFjQWRkcmVzcygpIHsKLSAgICAgICAgLy9NYWNhZGRyID0gWFguWFguWFguWFguWFguWFgKLSAgICAgICAgU3RyaW5nIHJldCA9IGRvU3RyaW5nQ29tbWFuZCgiRFJJVkVSIE1BQ0FERFIiKTsKLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShyZXQpKSB7Ci0gICAgICAgICAgICBTdHJpbmdbXSB0b2tlbnMgPSByZXQuc3BsaXQoIiA9ICIpOwotICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0gMikgcmV0dXJuIHRva2Vuc1sxXTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3JtYXQgb2YgcmVzdWx0czoKLSAgICAgKiA9PT09PT09PT09PT09PT09PQotICAgICAqIGlkPTEKLSAgICAgKiBic3NpZD02ODo3Zjo3NDpkNzoxYjo2ZQotICAgICAqIGZyZXE9MjQxMgotICAgICAqIGxldmVsPS00MwotICAgICAqIHRzZj0xMzQ0NjIxOTc1MTYwOTQ0Ci0gICAgICogYWdlPTI2MjMKLSAgICAgKiBmbGFncz1bV1BBMi1QU0stQ0NNUF1bV1BTXVtFU1NdCi0gICAgICogc3NpZD16dWJ5YgotICAgICAqID09PT0KLSAgICAgKgotICAgICAqIFJBTkdFPUFMTCBnZXRzIGFsbCBzY2FuIHJlc3VsdHMKLSAgICAgKiBSQU5HRT1JRC0gZ2V0cyByZXN1bHRzIGZyb20gSUQKLSAgICAgKiBNQVNLPTxOPiBzZWUgd3BhX3N1cHBsaWNhbnQvc3JjL2NvbW1vbi93cGFfY3RybC5oIGZvciBkZXRhaWxzCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBzY2FuUmVzdWx0cyhpbnQgc2lkKSB7Ci0gICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmRXaXRob3V0TG9nZ2luZygiQlNTIFJBTkdFPSIgKyBzaWQgKyAiLSBNQVNLPTB4MjE5ODciKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3JtYXQgb2YgY29tbWFuZAotICAgICAqIERSSVZFUiBXTFNfQkFUQ0hJTkcgU0VUIFNDQU5GUkVRPXggTVNDQU49ciBCRVNUTj15IENIQU5ORUw9PHosIHcsIHQ+IFJUVD1zCi0gICAgICogd2hlcmUgeCBpcyBhbiBhc2NpaSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gc2NhbnMKLSAgICAgKiAgICAgICByIGlzIGFuIGFzY2lpIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIgbnVtYmVyIG9mIHNjYW5zIHBlciBiYXRjaAotICAgICAqICAgICAgIHkgaXMgYW4gYXNjaWkgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciBudW1iZXIgb2YgdGhlIG1heCBBUCB0byByZW1lbWJlciBwZXIgc2NhbgotICAgICAqICAgICAgIHosIHcsIHQgcmVwcmVzZW50IGEgMS4ubiBzaXplIGxpc3Qgb2YgY2hhbm5lbCBudW1iZXJzIGFuZC9vciAnQScsICdCJyB2YWx1ZXMKLSAgICAgKiAgICAgICAgICAgaW5kaWNhdGluZyBlbnRpcmUgcmFuZ2VzIG9mIGNoYW5uZWxzCi0gICAgICogICAgICAgcyBpcyBhbiBhc2NpaSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIG51bWJlciBvZiBoaWdoZXN0LXN0cmVuZ3RoIEFQCi0gICAgICogICAgICAgICAgIGZvciB3aGljaCB3ZSdkIGxpa2UgYXBwcm94aW1hdGUgZGlzdGFuY2UgcmVwb3J0ZWQKLSAgICAgKgotICAgICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gYXNjaWkgaW50ZWdlciByZXByZXNlbnRpbmcgYSBndWVzcyBvZiB0aGUgbnVtYmVyIG9mIHNjYW5zCi0gICAgICogdGhlIGZpcm13YXJlIGNhbiByZW1lbWJlciBiZWZvcmUgaXQgcnVucyBvdXQgb2YgYnVmZmVyIHNwYWNlIG9yIC0xIG9uIGVycm9yCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBzZXRCYXRjaGVkU2NhblNldHRpbmdzKEJhdGNoZWRTY2FuU2V0dGluZ3Mgc2V0dGluZ3MpIHsKLSAgICAgICAgaWYgKHNldHRpbmdzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmQoIkRSSVZFUiBXTFNfQkFUQ0hJTkcgU1RPUCIpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBjbWQgPSAiRFJJVkVSIFdMU19CQVRDSElORyBTRVQgU0NBTkZSRVE9IiArIHNldHRpbmdzLnNjYW5JbnRlcnZhbFNlYzsKLSAgICAgICAgY21kICs9ICIgTVNDQU49IiArIHNldHRpbmdzLm1heFNjYW5zUGVyQmF0Y2g7Ci0gICAgICAgIGlmIChzZXR0aW5ncy5tYXhBcFBlclNjYW4gIT0gQmF0Y2hlZFNjYW5TZXR0aW5ncy5VTlNQRUNJRklFRCkgewotICAgICAgICAgICAgY21kICs9ICIgQkVTVE49IiArIHNldHRpbmdzLm1heEFwUGVyU2NhbjsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2V0dGluZ3MuY2hhbm5lbFNldCAhPSBudWxsICYmICFzZXR0aW5ncy5jaGFubmVsU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY21kICs9ICIgQ0hBTk5FTD08IjsKLSAgICAgICAgICAgIGludCBpID0gMDsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIGNoYW5uZWwgOiBzZXR0aW5ncy5jaGFubmVsU2V0KSB7Ci0gICAgICAgICAgICAgICAgY21kICs9IChpID4gMCA/ICIsIiA6ICIiKSArIGNoYW5uZWw7Ci0gICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY21kICs9ICI+IjsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2V0dGluZ3MubWF4QXBGb3JEaXN0YW5jZSAhPSBCYXRjaGVkU2NhblNldHRpbmdzLlVOU1BFQ0lGSUVEKSB7Ci0gICAgICAgICAgICBjbWQgKz0gIiBSVFQ9IiArIHNldHRpbmdzLm1heEFwRm9yRGlzdGFuY2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZChjbWQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QmF0Y2hlZFNjYW5SZXN1bHRzKCkgewotICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKCJEUklWRVIgV0xTX0JBVENISU5HIEdFVCIpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0RHJpdmVyKCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFNUQVJUIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc3RvcERyaXZlcigpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBTVE9QIik7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBTdGFydCBmaWx0ZXJpbmcgb3V0IE11bHRpY2FzdCBWNCBwYWNrZXRzCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICoKLSAgICAgKiBNdWx0aWNhc3QgZmlsdGVyaW5nIHJ1bGVzIHdvcmsgYXMgZm9sbG93czoKLSAgICAgKgotICAgICAqIFRoZSBkcml2ZXIgY2FuIGZpbHRlciBtdWx0aWNhc3QgKHY0IGFuZC9vciB2NikgYW5kIGJyb2FkY2FzdCBwYWNrZXRzIHdoZW4gaW4KLSAgICAgKiBhIHBvd2VyIG9wdGltaXplZCBtb2RlICh0eXBpY2FsbHkgd2hlbiBzY3JlZW4gZ29lcyBvZmYpLgotICAgICAqCi0gICAgICogSW4gb3JkZXIgdG8gcHJldmVudCB0aGUgZHJpdmVyIGZyb20gZmlsdGVyaW5nIHRoZSBtdWx0aWNhc3QvYnJvYWRjYXN0IHBhY2tldHMsIHdlIGhhdmUgdG8KLSAgICAgKiBhZGQgYSBEUklWRVIgUlhGSUxURVItQUREIHJ1bGUgZm9sbG93ZWQgYnkgRFJJVkVSIFJYRklMVEVSLVNUQVJUIHRvIG1ha2UgdGhlIHJ1bGUgZWZmZWN0aXZlCi0gICAgICoKLSAgICAgKiBEUklWRVIgUlhGSUxURVItQUREIE51bQotICAgICAqICAgd2hlcmUgTnVtID0gMCAtIFVuaWNhc3QsIDEgLSBCcm9hZGNhc3QsIDIgLSBNdXRpbDQgb3IgMyAtIE11bHRpNgotICAgICAqCi0gICAgICogYW5kIERSSVZFUiBSWEZJTFRFUi1TVEFSVAotICAgICAqIEluIG9yZGVyIHRvIHN0b3AgdGhlIHVzYWdlIG9mIHRoZXNlIHJ1bGVzLCB3ZSBkbwotICAgICAqCi0gICAgICogRFJJVkVSIFJYRklMVEVSLVNUT1AKLSAgICAgKiBEUklWRVIgUlhGSUxURVItUkVNT1ZFIE51bQotICAgICAqICAgd2hlcmUgTnVtIGlzIGFzIGRlc2NyaWJlZCBmb3IgUlhGSUxURVItQURECi0gICAgICoKLSAgICAgKiBUaGUgIFNFVFNVU1BFTkRPUFQgZHJpdmVyIGNvbW1hbmQgb3ZlcnJpZGVzIHRoZSBmaWx0ZXJpbmcgcnVsZXMKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzdGFydEZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cygpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1TVE9QIikKLSAgICAgICAgICAgICYmIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1SRU1PVkUgMiIpCi0gICAgICAgICAgICAmJiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItU1RBUlQiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdG9wIGZpbHRlcmluZyBvdXQgTXVsdGljYXN0IFY0IHBhY2tldHMuCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc3RvcEZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cygpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1TVE9QIikKLSAgICAgICAgICAgICYmIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1BREQgMiIpCi0gICAgICAgICAgICAmJiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItU1RBUlQiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdGFydCBmaWx0ZXJpbmcgb3V0IE11bHRpY2FzdCBWNiBwYWNrZXRzCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnRGaWx0ZXJpbmdNdWx0aWNhc3RWNlBhY2tldHMoKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItU1RPUCIpCi0gICAgICAgICAgICAmJiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItUkVNT1ZFIDMiKQotICAgICAgICAgICAgJiYgZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLVNUQVJUIik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RvcCBmaWx0ZXJpbmcgb3V0IE11bHRpY2FzdCBWNiBwYWNrZXRzLgotICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHN0b3BGaWx0ZXJpbmdNdWx0aWNhc3RWNlBhY2tldHMoKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItU1RPUCIpCi0gICAgICAgICAgICAmJiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItQUREIDMiKQotICAgICAgICAgICAgJiYgZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLVNUQVJUIik7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRCYW5kKCkgewotICAgICAgIFN0cmluZyByZXQgPSBkb1N0cmluZ0NvbW1hbmQoIkRSSVZFUiBHRVRCQU5EIik7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkocmV0KSkgewotICAgICAgICAgICAgLy9yZXBseSBpcyAiQkFORCBYIiB3aGVyZSBYIGlzIHRoZSBiYW5kCi0gICAgICAgICAgICBTdHJpbmdbXSB0b2tlbnMgPSByZXQuc3BsaXQoIiAiKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0gMikgcmV0dXJuIEludGVnZXIucGFyc2VJbnQodG9rZW5zWzFdKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRCYW5kKGludCBiYW5kKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgU0VUQkFORCAiICsgYmFuZCk7Ci0gICAgfQotCi0gICAvKioKLSAgICAgKiBTZXRzIHRoZSBibHVldG9vdGggY29leGlzdGVuY2UgbW9kZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBtb2RlIE9uZSBvZiB7QGxpbmsgI0JMVUVUT09USF9DT0VYSVNURU5DRV9NT0RFX0RJU0FCTEVEfSwKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjQkxVRVRPT1RIX0NPRVhJU1RFTkNFX01PREVfRU5BQkxFRH0sIG9yCi0gICAgICogICAgICAgICAgICB7QGxpbmsgI0JMVUVUT09USF9DT0VYSVNURU5DRV9NT0RFX1NFTlNFfS4KLSAgICAgKiBAcmV0dXJuIFdoZXRoZXIgdGhlIG1vZGUgd2FzIHN1Y2Nlc3NmdWxseSBzZXQuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc2V0Qmx1ZXRvb3RoQ29leGlzdGVuY2VNb2RlKGludCBtb2RlKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgQlRDT0VYTU9ERSAiICsgbW9kZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRW5hYmxlIG9yIGRpc2FibGUgQmx1ZXRvb3RoIGNvZXhpc3RlbmNlIHNjYW4gbW9kZS4gV2hlbiB0aGlzIG1vZGUgaXMgb24sCi0gICAgICogc29tZSBvZiB0aGUgbG93LWxldmVsIHNjYW4gcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBkcml2ZXIgYXJlIGNoYW5nZWQgdG8KLSAgICAgKiByZWR1Y2UgaW50ZXJmZXJlbmNlIHdpdGggQTJEUCBzdHJlYW1pbmcuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaXNTZXQgd2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIG1vZGUKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgY29tbWFuZCBzdWNjZWVkZWQsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHNldEJsdWV0b290aENvZXhpc3RlbmNlU2Nhbk1vZGUoYm9vbGVhbiBzZXRDb2V4U2Nhbk1vZGUpIHsKLSAgICAgICAgaWYgKHNldENvZXhTY2FuTW9kZSkgewotICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBCVENPRVhTQ0FOLVNUQVJUIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIEJUQ09FWFNDQU4tU1RPUCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2F2ZUNvbmZpZygpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNBVkVfQ09ORklHIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gYWRkVG9CbGFja2xpc3QoU3RyaW5nIGJzc2lkKSB7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShic3NpZCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkJMQUNLTElTVCAiICsgYnNzaWQpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGNsZWFyQmxhY2tsaXN0KCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiQkxBQ0tMSVNUIGNsZWFyIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0U3VzcGVuZE9wdGltaXphdGlvbnMoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgIGlmIChtU3VzcGVuZE9wdEVuYWJsZWQgPT0gZW5hYmxlZCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIG1TdXNwZW5kT3B0RW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgICAgIGlmIChlbmFibGVkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFNFVFNVU1BFTkRNT0RFIDEiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgU0VUU1VTUEVORE1PREUgMCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0Q291bnRyeUNvZGUoU3RyaW5nIGNvdW50cnlDb2RlKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgQ09VTlRSWSAiICsgY291bnRyeUNvZGUudG9VcHBlckNhc2UoTG9jYWxlLlJPT1QpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBlbmFibGVCYWNrZ3JvdW5kU2Nhbihib29sZWFuIGVuYWJsZSkgewotICAgICAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICAgICAgICBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgcG5vIDEiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBwbm8gMCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U2NhbkludGVydmFsKGludCBzY2FuSW50ZXJ2YWwpIHsKLSAgICAgICAgZG9Cb29sZWFuQ29tbWFuZCgiU0NBTl9JTlRFUlZBTCAiICsgc2NhbkludGVydmFsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdGFydFRkbHMoU3RyaW5nIG1hY0FkZHIsIGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgICAgIGlmIChlbmFibGUpIHsKLSAgICAgICAgICAgIGRvQm9vbGVhbkNvbW1hbmQoIlRETFNfRElTQ09WRVIgIiArIG1hY0FkZHIpOwotICAgICAgICAgICAgZG9Cb29sZWFuQ29tbWFuZCgiVERMU19TRVRVUCAiICsgbWFjQWRkcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkb0Jvb2xlYW5Db21tYW5kKCJURExTX1RFQVJET1dOICIgKyBtYWNBZGRyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBFeGFtcGxlIG91dHB1dDoKLSAgICAgKiBSU1NJPS02NQotICAgICAqIExJTktTUEVFRD00OAotICAgICAqIE5PSVNFPTk5OTkKLSAgICAgKiBGUkVRVUVOQ1k9MAotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgc2lnbmFsUG9sbCgpIHsKLSAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZFdpdGhvdXRMb2dnaW5nKCJTSUdOQUxfUE9MTCIpOwotICAgIH0KLQotICAgIC8qKiBFeGFtcGxlIG91dG91dDoKLSAgICAgKiBUWEdPT0Q9Mzk2Ci0gICAgICogVFhCQUQ9MQotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgcGt0Y250UG9sbCgpIHsKLSAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZCgiUEtUQ05UX1BPTEwiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBic3NGbHVzaCgpIHsKLSAgICAgICAgZG9Cb29sZWFuQ29tbWFuZCgiQlNTX0ZMVVNIIDAiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzdGFydFdwc1BiYyhTdHJpbmcgYnNzaWQpIHsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGJzc2lkKSkgewotICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIldQU19QQkMiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJXUFNfUEJDICIgKyBic3NpZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzdGFydFdwc1BiYyhTdHJpbmcgaWZhY2UsIFN0cmluZyBic3NpZCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoYnNzaWQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmROYXRpdmUoIklGTkFNRT0iICsgaWZhY2UgKyAiIFdQU19QQkMiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmROYXRpdmUoIklGTkFNRT0iICsgaWZhY2UgKyAiIFdQU19QQkMgIiArIGJzc2lkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0V3BzUGluS2V5cGFkKFN0cmluZyBwaW4pIHsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHBpbikpIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIldQU19QSU4gYW55ICIgKyBwaW4pOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0V3BzUGluS2V5cGFkKFN0cmluZyBpZmFjZSwgU3RyaW5nIHBpbikgewotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkocGluKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZE5hdGl2ZSgiSUZOQU1FPSIgKyBpZmFjZSArICIgV1BTX1BJTiBhbnkgIiArIHBpbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIHB1YmxpYyBTdHJpbmcgc3RhcnRXcHNQaW5EaXNwbGF5KFN0cmluZyBic3NpZCkgewotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoYnNzaWQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKCJXUFNfUElOIGFueSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZCgiV1BTX1BJTiAiICsgYnNzaWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBzdGFydFdwc1BpbkRpc3BsYXkoU3RyaW5nIGlmYWNlLCBTdHJpbmcgYnNzaWQpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGJzc2lkKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmROYXRpdmUoIklGTkFNRT0iICsgaWZhY2UgKyAiIFdQU19QSU4gYW55Iik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmROYXRpdmUoIklGTkFNRT0iICsgaWZhY2UgKyAiIFdQU19QSU4gIiArIGJzc2lkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIENvbmZpZ3VyZXMgYW4gYWNjZXNzIHBvaW50IGNvbm5lY3Rpb24gKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzdGFydFdwc1JlZ2lzdHJhcihTdHJpbmcgYnNzaWQsIFN0cmluZyBwaW4pIHsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGJzc2lkKSB8fCBUZXh0VXRpbHMuaXNFbXB0eShwaW4pKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJXUFNfUkVHICIgKyBic3NpZCArICIgIiArIHBpbik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gY2FuY2VsV3BzKCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiV1BTX0NBTkNFTCIpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldFBlcnNpc3RlbnRSZWNvbm5lY3QoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgIGludCB2YWx1ZSA9IChlbmFibGVkID09IHRydWUpID8gMSA6IDA7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgcGVyc2lzdGVudF9yZWNvbm5lY3QgIiArIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXREZXZpY2VOYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgZGV2aWNlX25hbWUgIiArIG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldERldmljZVR5cGUoU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBkZXZpY2VfdHlwZSAiICsgdHlwZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0Q29uZmlnTWV0aG9kcyhTdHJpbmcgY2ZnKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgY29uZmlnX21ldGhvZHMgIiArIGNmZyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0TWFudWZhY3R1cmVyKFN0cmluZyB2YWx1ZSkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VUIG1hbnVmYWN0dXJlciAiICsgdmFsdWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldE1vZGVsTmFtZShTdHJpbmcgdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBtb2RlbF9uYW1lICIgKyB2YWx1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0TW9kZWxOdW1iZXIoU3RyaW5nIHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgbW9kZWxfbnVtYmVyICIgKyB2YWx1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0U2VyaWFsTnVtYmVyKFN0cmluZyB2YWx1ZSkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VUIHNlcmlhbF9udW1iZXIgIiArIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRQMnBTc2lkUG9zdGZpeChTdHJpbmcgcG9zdGZpeCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VUIHAycF9zc2lkX3Bvc3RmaXggIiArIHBvc3RmaXgpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldFAycEdyb3VwSWRsZShTdHJpbmcgaWZhY2UsIGludCB0aW1lKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kTmF0aXZlKCJJRk5BTUU9IiArIGlmYWNlICsgIiBTRVQgcDJwX2dyb3VwX2lkbGUgIiArIHRpbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UG93ZXJTYXZlKGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICAgICAgZG9Cb29sZWFuQ29tbWFuZCgiU0VUIHBzIDEiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBwcyAwIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRQMnBQb3dlclNhdmUoU3RyaW5nIGlmYWNlLCBib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZE5hdGl2ZSgiSUZOQU1FPSIgKyBpZmFjZSArICIgUDJQX1NFVCBwcyAxIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kTmF0aXZlKCJJRk5BTUU9IiArIGlmYWNlICsgIiBQMlBfU0VUIHBzIDAiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldFdmZEVuYWJsZShib29sZWFuIGVuYWJsZSkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VUIHdpZmlfZGlzcGxheSAiICsgKGVuYWJsZSA/ICIxIiA6ICIwIikpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldFdmZERldmljZUluZm8oU3RyaW5nIGhleCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiV0ZEX1NVQkVMRU1fU0VUIDAgIiArIGhleCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogInN0YSIgcHJpb3JpdGl6ZXMgU1RBIGNvbm5lY3Rpb24gb3ZlciBQMlAgYW5kICJwMnAiIHByaW9yaXRpemVzCi0gICAgICogUDJQIGNvbm5lY3Rpb24gb3ZlciBTVEEKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRDb25jdXJyZW5jeVByaW9yaXR5KFN0cmluZyBzKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfU0VUIGNvbmNfcHJlZiAiICsgcyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwRmluZCgpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9GSU5EIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwRmluZChpbnQgdGltZW91dCkgewotICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gcDJwRmluZCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfRklORCAiICsgdGltZW91dCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwU3RvcEZpbmQoKSB7Ci0gICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9TVE9QX0ZJTkQiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBMaXN0ZW4oKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfTElTVEVOIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwTGlzdGVuKGludCB0aW1lb3V0KSB7Ci0gICAgICAgIGlmICh0aW1lb3V0IDw9IDApIHsKLSAgICAgICAgICAgIHJldHVybiBwMnBMaXN0ZW4oKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0xJU1RFTiAiICsgdGltZW91dCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwRXh0TGlzdGVuKGJvb2xlYW4gZW5hYmxlLCBpbnQgcGVyaW9kLCBpbnQgaW50ZXJ2YWwpIHsKLSAgICAgICAgaWYgKGVuYWJsZSAmJiBpbnRlcnZhbCA8IHBlcmlvZCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfRVhUX0xJU1RFTiIKLSAgICAgICAgICAgICAgICAgICAgKyAoZW5hYmxlID8gKCIgIiArIHBlcmlvZCArICIgIiArIGludGVydmFsKSA6ICIiKSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwU2V0Q2hhbm5lbChpbnQgbGMsIGludCBvYykgewotICAgICAgICBpZiAoREJHKSBMb2cuZChtVEFHLCAicDJwU2V0Q2hhbm5lbDogbGM9IitsYysiLCBvYz0iK29jKTsKLQotICAgICAgICBpZiAobGMgPj0xICYmIGxjIDw9IDExKSB7Ci0gICAgICAgICAgICBpZiAoIWRvQm9vbGVhbkNvbW1hbmQoIlAyUF9TRVQgbGlzdGVuX2NoYW5uZWwgIiArIGxjKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChsYyAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob2MgPj0gMSAmJiBvYyA8PSAxNjUgKSB7Ci0gICAgICAgICAgICBpbnQgZnJlcSA9IChvYyA8PSAxNCA/IDI0MDcgOiA1MDAwKSArIG9jICogNTsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfU0VUIGRpc2FsbG93X2ZyZXEgMTAwMC0iCi0gICAgICAgICAgICAgICAgICAgICsgKGZyZXEgLSA1KSArICIsIiArIChmcmVxICsgNSkgKyAiLTYwMDAiKTsKLSAgICAgICAgfSBlbHNlIGlmIChvYyA9PSAwKSB7Ci0gICAgICAgICAgICAvKiBvYz09MCBkaXNhYmxlcyAiUDJQX1NFVCBkaXNhbGxvd19mcmVxIiAoZW5hYmxlcyBhbGwgZnJlcXMpICovCi0gICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX1NFVCBkaXNhbGxvd19mcmVxIFwiXCIiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBGbHVzaCgpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9GTFVTSCIpOwotICAgIH0KLQotICAgIC8qIHAycF9jb25uZWN0IDxwZWVyIGRldmljZSBhZGRyZXNzPiA8cGJjfHBpbnxQSU4jPiBbbGFiZWx8ZGlzcGxheXxrZXlwYWRdCi0gICAgICAgIFtwZXJzaXN0ZW50XSBbam9pbnxhdXRoXSBbZ29faW50ZW50PTwwLi4xNT5dIFtmcmVxPTxpbiBNSHo+XSAqLwotICAgIHB1YmxpYyBTdHJpbmcgcDJwQ29ubmVjdChXaWZpUDJwQ29uZmlnIGNvbmZpZywgYm9vbGVhbiBqb2luRXhpc3RpbmdHcm91cCkgewotICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHJldHVybiBudWxsOwotICAgICAgICBMaXN0PFN0cmluZz4gYXJncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgICAgICBXcHNJbmZvIHdwcyA9IGNvbmZpZy53cHM7Ci0gICAgICAgIGFyZ3MuYWRkKGNvbmZpZy5kZXZpY2VBZGRyZXNzKTsKLQotICAgICAgICBzd2l0Y2ggKHdwcy5zZXR1cCkgewotICAgICAgICAgICAgY2FzZSBXcHNJbmZvLlBCQzoKLSAgICAgICAgICAgICAgICBhcmdzLmFkZCgicGJjIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdwc0luZm8uRElTUExBWToKLSAgICAgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkod3BzLnBpbikpIHsKLSAgICAgICAgICAgICAgICAgICAgYXJncy5hZGQoInBpbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3MuYWRkKHdwcy5waW4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdzLmFkZCgiZGlzcGxheSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXcHNJbmZvLktFWVBBRDoKLSAgICAgICAgICAgICAgICBhcmdzLmFkZCh3cHMucGluKTsKLSAgICAgICAgICAgICAgICBhcmdzLmFkZCgia2V5cGFkIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdwc0luZm8uTEFCRUw6Ci0gICAgICAgICAgICAgICAgYXJncy5hZGQod3BzLnBpbik7Ci0gICAgICAgICAgICAgICAgYXJncy5hZGQoImxhYmVsIik7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbmZpZy5uZXRJZCA9PSBXaWZpUDJwR3JvdXAuUEVSU0lTVEVOVF9ORVRfSUQpIHsKLSAgICAgICAgICAgIGFyZ3MuYWRkKCJwZXJzaXN0ZW50Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoam9pbkV4aXN0aW5nR3JvdXApIHsKLSAgICAgICAgICAgIGFyZ3MuYWRkKCJqb2luIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvL1RPRE86IFRoaXMgY2FuIGJlIGFkYXB0ZWQgYmFzZWQgb24gZGV2aWNlIHBsdWdnZWQgaW4gc3RhdGUgYW5kCi0gICAgICAgICAgICAvL2RldmljZSBiYXR0ZXJ5IHN0YXRlCi0gICAgICAgICAgICBpbnQgZ3JvdXBPd25lckludGVudCA9IGNvbmZpZy5ncm91cE93bmVySW50ZW50OwotICAgICAgICAgICAgaWYgKGdyb3VwT3duZXJJbnRlbnQgPCAwIHx8IGdyb3VwT3duZXJJbnRlbnQgPiAxNSkgewotICAgICAgICAgICAgICAgIGdyb3VwT3duZXJJbnRlbnQgPSBERUZBVUxUX0dST1VQX09XTkVSX0lOVEVOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFyZ3MuYWRkKCJnb19pbnRlbnQ9IiArIGdyb3VwT3duZXJJbnRlbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGNvbW1hbmQgPSAiUDJQX0NPTk5FQ1QgIjsKLSAgICAgICAgZm9yIChTdHJpbmcgcyA6IGFyZ3MpIGNvbW1hbmQgKz0gcyArICIgIjsKLQotICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKGNvbW1hbmQpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHAycENhbmNlbENvbm5lY3QoKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfQ0FOQ0VMIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwUHJvdmlzaW9uRGlzY292ZXJ5KFdpZmlQMnBDb25maWcgY29uZmlnKSB7Ci0gICAgICAgIGlmIChjb25maWcgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlnLndwcy5zZXR1cCkgewotICAgICAgICAgICAgY2FzZSBXcHNJbmZvLlBCQzoKLSAgICAgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX1BST1ZfRElTQyAiICsgY29uZmlnLmRldmljZUFkZHJlc3MgKyAiIHBiYyIpOwotICAgICAgICAgICAgY2FzZSBXcHNJbmZvLkRJU1BMQVk6Ci0gICAgICAgICAgICAgICAgLy9XZSBhcmUgZG9pbmcgZGlzcGxheSwgc28gcHJvdmlzaW9uIGRpc2NvdmVyeSBpcyBrZXlwYWQKLSAgICAgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX1BST1ZfRElTQyAiICsgY29uZmlnLmRldmljZUFkZHJlc3MgKyAiIGtleXBhZCIpOwotICAgICAgICAgICAgY2FzZSBXcHNJbmZvLktFWVBBRDoKLSAgICAgICAgICAgICAgICAvL1dlIGFyZSBkb2luZyBrZXlwYWQsIHNvIHByb3Zpc2lvbiBkaXNjb3ZlcnkgaXMgZGlzcGxheQotICAgICAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfUFJPVl9ESVNDICIgKyBjb25maWcuZGV2aWNlQWRkcmVzcyArICIgZGlzcGxheSIpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwR3JvdXBBZGQoYm9vbGVhbiBwZXJzaXN0ZW50KSB7Ci0gICAgICAgIGlmIChwZXJzaXN0ZW50KSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0dST1VQX0FERCBwZXJzaXN0ZW50Iik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9HUk9VUF9BREQiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBHcm91cEFkZChpbnQgbmV0SWQpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9HUk9VUF9BREQgcGVyc2lzdGVudD0iICsgbmV0SWQpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHAycEdyb3VwUmVtb3ZlKFN0cmluZyBpZmFjZSkgewotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoaWZhY2UpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kTmF0aXZlKCJJRk5BTUU9IiArIGlmYWNlICsgIiBQMlBfR1JPVVBfUkVNT1ZFICIgKyBpZmFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBSZWplY3QoU3RyaW5nIGRldmljZUFkZHJlc3MpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9SRUpFQ1QgIiArIGRldmljZUFkZHJlc3MpOwotICAgIH0KLQotICAgIC8qIEludml0ZSBhIHBlZXIgdG8gYSBncm91cCAqLwotICAgIHB1YmxpYyBib29sZWFuIHAycEludml0ZShXaWZpUDJwR3JvdXAgZ3JvdXAsIFN0cmluZyBkZXZpY2VBZGRyZXNzKSB7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShkZXZpY2VBZGRyZXNzKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChncm91cCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0lOVklURSBwZWVyPSIgKyBkZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfSU5WSVRFIGdyb3VwPSIgKyBncm91cC5nZXRJbnRlcmZhY2UoKQotICAgICAgICAgICAgICAgICAgICArICIgcGVlcj0iICsgZGV2aWNlQWRkcmVzcyArICIgZ29fZGV2X2FkZHI9IiArIGdyb3VwLmdldE93bmVyKCkuZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBSZWludm9rZSBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiAqLwotICAgIHB1YmxpYyBib29sZWFuIHAycFJlaW52b2tlKGludCBuZXRJZCwgU3RyaW5nIGRldmljZUFkZHJlc3MpIHsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGRldmljZUFkZHJlc3MpIHx8IG5ldElkIDwgMCkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfSU5WSVRFIHBlcnNpc3RlbnQ9IiArIG5ldElkICsgIiBwZWVyPSIgKyBkZXZpY2VBZGRyZXNzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHAycEdldFNzaWQoU3RyaW5nIGRldmljZUFkZHJlc3MpIHsKLSAgICAgICAgcmV0dXJuIHAycEdldFBhcmFtKGRldmljZUFkZHJlc3MsICJvcGVyX3NzaWQiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHAycEdldERldmljZUFkZHJlc3MoKSB7Ci0gICAgICAgIFN0cmluZyBzdGF0dXMgPSBzdGF0dXMoKTsKLSAgICAgICAgaWYgKHN0YXR1cyA9PSBudWxsKSByZXR1cm4gIiI7Ci0KLSAgICAgICAgU3RyaW5nW10gdG9rZW5zID0gc3RhdHVzLnNwbGl0KCJcbiIpOwotICAgICAgICBmb3IgKFN0cmluZyB0b2tlbiA6IHRva2VucykgewotICAgICAgICAgICAgaWYgKHRva2VuLnN0YXJ0c1dpdGgoInAycF9kZXZpY2VfYWRkcmVzcz0iKSkgewotICAgICAgICAgICAgICAgIFN0cmluZ1tdIG5hbWVWYWx1ZSA9IHRva2VuLnNwbGl0KCI9Iik7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVWYWx1ZS5sZW5ndGggIT0gMikgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVWYWx1ZVsxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRHcm91cENhcGFiaWxpdHkoU3RyaW5nIGRldmljZUFkZHJlc3MpIHsKLSAgICAgICAgaW50IGdjID0gMDsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGRldmljZUFkZHJlc3MpKSByZXR1cm4gZ2M7Ci0gICAgICAgIFN0cmluZyBwZWVySW5mbyA9IHAycFBlZXIoZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShwZWVySW5mbykpIHJldHVybiBnYzsKLQotICAgICAgICBTdHJpbmdbXSB0b2tlbnMgPSBwZWVySW5mby5zcGxpdCgiXG4iKTsKLSAgICAgICAgZm9yIChTdHJpbmcgdG9rZW4gOiB0b2tlbnMpIHsKLSAgICAgICAgICAgIGlmICh0b2tlbi5zdGFydHNXaXRoKCJncm91cF9jYXBhYj0iKSkgewotICAgICAgICAgICAgICAgIFN0cmluZ1tdIG5hbWVWYWx1ZSA9IHRva2VuLnNwbGl0KCI9Iik7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVWYWx1ZS5sZW5ndGggIT0gMikgYnJlYWs7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVnZXIuZGVjb2RlKG5hbWVWYWx1ZVsxXSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBnYzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHAycFBlZXIoU3RyaW5nIGRldmljZUFkZHJlc3MpIHsKLSAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZCgiUDJQX1BFRVIgIiArIGRldmljZUFkZHJlc3MpOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIHAycEdldFBhcmFtKFN0cmluZyBkZXZpY2VBZGRyZXNzLCBTdHJpbmcga2V5KSB7Ci0gICAgICAgIGlmIChkZXZpY2VBZGRyZXNzID09IG51bGwpIHJldHVybiBudWxsOwotCi0gICAgICAgIFN0cmluZyBwZWVySW5mbyA9IHAycFBlZXIoZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgIGlmIChwZWVySW5mbyA9PSBudWxsKSByZXR1cm4gbnVsbDsKLSAgICAgICAgU3RyaW5nW10gdG9rZW5zPSBwZWVySW5mby5zcGxpdCgiXG4iKTsKLQotICAgICAgICBrZXkgKz0gIj0iOwotICAgICAgICBmb3IgKFN0cmluZyB0b2tlbiA6IHRva2VucykgewotICAgICAgICAgICAgaWYgKHRva2VuLnN0YXJ0c1dpdGgoa2V5KSkgewotICAgICAgICAgICAgICAgIFN0cmluZ1tdIG5hbWVWYWx1ZSA9IHRva2VuLnNwbGl0KCI9Iik7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVWYWx1ZS5sZW5ndGggIT0gMikgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVWYWx1ZVsxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBTZXJ2aWNlQWRkKFdpZmlQMnBTZXJ2aWNlSW5mbyBzZXJ2SW5mbykgewotICAgICAgICAvKgotICAgICAgICAgKiBQMlBfU0VSVklDRV9BREQgYm9uam91ciA8cXVlcnkgaGV4ZHVtcD4gPFJEQVRBIGhleGR1bXA+Ci0gICAgICAgICAqIFAyUF9TRVJWSUNFX0FERCB1cG5wIDx2ZXJzaW9uIGhleD4gPHNlcnZpY2U+Ci0gICAgICAgICAqCi0gICAgICAgICAqIGUuZykKLSAgICAgICAgICogW0JvbmpvdXJdCi0gICAgICAgICAqICMgSVAgUHJpbnRpbmcgb3ZlciBUQ1AgKFBUUikgKFJEQVRBPU15UHJpbnRlci5faXBwLl90Y3AubG9jYWwuKQotICAgICAgICAgKiBQMlBfU0VSVklDRV9BREQgYm9uam91ciAwNDVmNjk3MDcwYzAwYzAwMGMwMSAwOTRkNzk1MDcyNjk2ZTc0NjU3MmMwMjcKLSAgICAgICAgICogIyBJUCBQcmludGluZyBvdmVyIFRDUCAoVFhUKSAoUkRBVEE9dHh0dmVycz0xLHBkbD1hcHBsaWNhdGlvbi9wb3N0c2NyaXB0KQotICAgICAgICAgKiBQMlBfU0VSVklDRV9BREQgYm9uam91ciAwOTZkNzk3MDcyNjk2ZTc0NjU3MjA0NWY2OTcwNzBjMDBjMDAxMDAxCi0gICAgICAgICAqICAwOTc0Nzg3NDc2NjU3MjczM2QzMTFhNzA2NDZjM2Q2MTcwNzA2YzY5NjM2MTc0Njk2ZjZlMmY3MDZmNzM3NDczNjM3Mjc5NzA3NAotICAgICAgICAgKgotICAgICAgICAgKiBbVVBuUF0KLSAgICAgICAgICogUDJQX1NFUlZJQ0VfQUREIHVwbnAgMTAgdXVpZDo2ODU5ZGVkZS04NTc0LTU5YWItOTMzMi0xMjM0NTY3ODkwMTIKLSAgICAgICAgICogUDJQX1NFUlZJQ0VfQUREIHVwbnAgMTAgdXVpZDo2ODU5ZGVkZS04NTc0LTU5YWItOTMzMi0xMjM0NTY3ODkwMTI6OnVwbnA6cm9vdGRldmljZQotICAgICAgICAgKiBQMlBfU0VSVklDRV9BREQgdXBucCAxMCB1dWlkOjY4NTlkZWRlLTg1NzQtNTlhYi05MzMyLTEyMzQ1Njc4OTAxMjo6dXJuOnNjaGVtYXMtdXBucAotICAgICAgICAgKiAtb3JnOmRldmljZTpJbnRlcm5ldEdhdGV3YXlEZXZpY2U6MQotICAgICAgICAgKiBQMlBfU0VSVklDRV9BREQgdXBucCAxMCB1dWlkOjY4NTlkZWRlLTg1NzQtNTlhYi05MzIyLTEyMzQ1Njc4OTAxMjo6dXJuOnNjaGVtYXMtdXBucAotICAgICAgICAgKiAtb3JnOnNlcnZpY2U6Q29udGVudERpcmVjdG9yeToyCi0gICAgICAgICAqLwotICAgICAgICBmb3IgKFN0cmluZyBzIDogc2VydkluZm8uZ2V0U3VwcGxpY2FudFF1ZXJ5TGlzdCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgY29tbWFuZCA9ICJQMlBfU0VSVklDRV9BREQiOwotICAgICAgICAgICAgY29tbWFuZCArPSAoIiAiICsgcyk7Ci0gICAgICAgICAgICBpZiAoIWRvQm9vbGVhbkNvbW1hbmQoY29tbWFuZCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwU2VydmljZURlbChXaWZpUDJwU2VydmljZUluZm8gc2VydkluZm8pIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogUDJQX1NFUlZJQ0VfREVMIGJvbmpvdXIgPHF1ZXJ5IGhleGR1bXA+Ci0gICAgICAgICAqIFAyUF9TRVJWSUNFX0RFTCB1cG5wIDx2ZXJzaW9uIGhleD4gPHNlcnZpY2U+Ci0gICAgICAgICAqLwotICAgICAgICBmb3IgKFN0cmluZyBzIDogc2VydkluZm8uZ2V0U3VwcGxpY2FudFF1ZXJ5TGlzdCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgY29tbWFuZCA9ICJQMlBfU0VSVklDRV9ERUwgIjsKLQotICAgICAgICAgICAgU3RyaW5nW10gZGF0YSA9IHMuc3BsaXQoIiAiKTsKLSAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA8IDIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoInVwbnAiLmVxdWFscyhkYXRhWzBdKSkgewotICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gczsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoImJvbmpvdXIiLmVxdWFscyhkYXRhWzBdKSkgewotICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gZGF0YVswXTsKLSAgICAgICAgICAgICAgICBjb21tYW5kICs9ICgiICIgKyBkYXRhWzFdKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFkb0Jvb2xlYW5Db21tYW5kKGNvbW1hbmQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHAycFNlcnZpY2VGbHVzaCgpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9TRVJWSUNFX0ZMVVNIIik7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBwMnBTZXJ2RGlzY1JlcShTdHJpbmcgYWRkciwgU3RyaW5nIHF1ZXJ5KSB7Ci0gICAgICAgIFN0cmluZyBjb21tYW5kID0gIlAyUF9TRVJWX0RJU0NfUkVRIjsKLSAgICAgICAgY29tbWFuZCArPSAoIiAiICsgYWRkcik7Ci0gICAgICAgIGNvbW1hbmQgKz0gKCIgIiArIHF1ZXJ5KTsKLQotICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKGNvbW1hbmQpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHAycFNlcnZEaXNjQ2FuY2VsUmVxKFN0cmluZyBpZCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX1NFUlZfRElTQ19DQU5DRUxfUkVRICIgKyBpZCk7Ci0gICAgfQotCi0gICAgLyogU2V0IHRoZSBjdXJyZW50IG1vZGUgb2YgbWlyYWNhc3Qgb3BlcmF0aW9uLgotICAgICAqICAwID0gZGlzYWJsZWQKLSAgICAgKiAgMSA9IG9wZXJhdGluZyBhcyBzb3VyY2UKLSAgICAgKiAgMiA9IG9wZXJhdGluZyBhcyBzaW5rCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TWlyYWNhc3RNb2RlKGludCBtb2RlKSB7Ci0gICAgICAgIC8vIE5vdGU6IG9wdGlvbmFsIGZlYXR1cmUgb24gdGhlIGRyaXZlci4gSXQgaXMgb2sgZm9yIHRoaXMgdG8gZmFpbC4KLSAgICAgICAgZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIE1JUkFDQVNUICIgKyBtb2RlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU3NpZC5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaVNzaWQuamF2YQppbmRleCBhMzVhMzRiLi5mOGJhOTVkIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU3NpZC5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlTc2lkLmphdmEKQEAgLTE2LDkgKzE2LDggQEAKIAogcGFja2FnZSBhbmRyb2lkLm5ldC53aWZpOwogCi1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogCiBpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKQEAgLTQyLDcgKzQxLDcgQEAKIHB1YmxpYyBjbGFzcyBXaWZpU3NpZCBpbXBsZW1lbnRzIFBhcmNlbGFibGUgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2lmaVNzaWQiOwogCi0gICAgcHVibGljIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvY3RldHMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKDMyKTsKKyAgICBwdWJsaWMgZmluYWwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG9jdGV0cyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oMzIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFWF9SQURJWCA9IDE2OwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTkUgPSAiPHVua25vd24gc3NpZD4iOwpAQCAtNTgsNyArNTcsNiBAQAogCiAgICAgcHVibGljIHN0YXRpYyBXaWZpU3NpZCBjcmVhdGVGcm9tSGV4KFN0cmluZyBoZXhTdHIpIHsKICAgICAgICAgV2lmaVNzaWQgYSA9IG5ldyBXaWZpU3NpZCgpOwotICAgICAgICBpbnQgbGVuZ3RoID0gMDsKICAgICAgICAgaWYgKGhleFN0ciA9PSBudWxsKSByZXR1cm4gYTsKIAogICAgICAgICBpZiAoaGV4U3RyLnN0YXJ0c1dpdGgoIjB4IikgfHwgaGV4U3RyLnN0YXJ0c1dpdGgoIjBYIikpIHsKQEAgLTE5MSw4ICsxODksMTMgQEAKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0hpZGRlbigpIHsKKyAgICAgICAgcmV0dXJuIGlzQXJyYXlBbGxaZXJvZXMob2N0ZXRzLnRvQnl0ZUFycmF5KCkpOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyBieXRlW10gZ2V0T2N0ZXRzKCkgewotICAgICAgICByZXR1cm4gIG9jdGV0cy50b0J5dGVBcnJheSgpOworICAgICAgICByZXR1cm4gb2N0ZXRzLnRvQnl0ZUFycmF5KCk7CiAgICAgfQogCiAgICAgLyoqIEBoaWRlICovCmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU3RhdGVNYWNoaW5lLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU3RhdGVNYWNoaW5lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZDNlZmUuLjAwMDAwMDAKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaVN0YXRlTWFjaGluZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm5ldC53aWZpOwotCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9ESVNBQkxFRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX1NUQVRFX0RJU0FCTElORzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX1NUQVRFX0VOQUJMRUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9FTkFCTElORzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX1NUQVRFX1VOS05PV047Ci0KLS8qKgotICogVE9ETzoKLSAqIERlcHJlY2F0ZSBXSUZJX1NUQVRFX1VOS05PV04KLSAqLwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyLldJRklfQVBfU1RBVEVfRElTQUJMRUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9BUF9TVEFURV9ESVNBQkxJTkc7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9BUF9TVEFURV9FTkFCTEVEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyLldJRklfQVBfU1RBVEVfRU5BQkxJTkc7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9BUF9TVEFURV9GQUlMRUQ7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BbGFybU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKLWltcG9ydCBhbmRyb2lkLmFwcC5iYWNrdXAuSUJhY2t1cE1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoQWRhcHRlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubmV0LkRoY3BSZXN1bHRzOwotaW1wb3J0IGFuZHJvaWQubmV0LkRoY3BTdGF0ZU1hY2hpbmU7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuSW50ZXJmYWNlQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLm5ldC5MaW5rQWRkcmVzczsKLWltcG9ydCBhbmRyb2lkLm5ldC5MaW5rUHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSW5mbzsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtVdGlsczsKLWltcG9ydCBhbmRyb2lkLm5ldC5Sb3V0ZUluZm87Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XcHNSZXN1bHQuU3RhdHVzOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBTZXJ2aWNlOwotaW1wb3J0IGFuZHJvaWQub3MuQmF0dGVyeVN0YXRzOwotaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklOZXR3b3JrTWFuYWdlbWVudFNlcnZpY2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2VuZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuUG93ZXJNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLldvcmtTb3VyY2U7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5McnVDYWNoZTsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuSUJhdHRlcnlTdGF0czsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFzeW5jQ2hhbm5lbDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByb3RvY29sOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZU1hY2hpbmU7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIubmV0LkJhc2VOZXR3b3JrT2JzZXJ2ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldDZBZGRyZXNzOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljQm9vbGVhbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLS8qKgotICogVHJhY2sgdGhlIHN0YXRlIG9mIFdpZmkgY29ubmVjdGl2aXR5LiBBbGwgZXZlbnQgaGFuZGxpbmcgaXMgZG9uZSBoZXJlLAotICogYW5kIGFsbCBjaGFuZ2VzIGluIGNvbm5lY3Rpdml0eSBzdGF0ZSBhcmUgaW5pdGlhdGVkIGhlcmUuCi0gKgotICogV2ktRmkgbm93IHN1cHBvcnRzIHRocmVlIG1vZGVzIG9mIG9wZXJhdGlvbjogQ2xpZW50LCBTb2Z0QXAgYW5kIHAycAotICogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHdlIHN1cHBvcnQgY29uY3VycmVudCB3aWZpIHAycCBhbmQgd2lmaSBvcGVyYXRpb24uCi0gKiBUaGUgV2lmaVN0YXRlTWFjaGluZSBoYW5kbGVzIFNvZnRBcCBhbmQgQ2xpZW50IG9wZXJhdGlvbnMgd2hpbGUgV2lmaVAycFNlcnZpY2UKLSAqIGhhbmRsZXMgcDJwIG9wZXJhdGlvbi4KLSAqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgV2lmaVN0YXRlTWFjaGluZSBleHRlbmRzIFN0YXRlTWFjaGluZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVUV09SS1RZUEUgPSAiV0lGSSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBEQkcgPSBmYWxzZTsKLQotICAgIHByaXZhdGUgV2lmaU1vbml0b3IgbVdpZmlNb25pdG9yOwotICAgIHByaXZhdGUgV2lmaU5hdGl2ZSBtV2lmaU5hdGl2ZTsKLSAgICBwcml2YXRlIFdpZmlDb25maWdTdG9yZSBtV2lmaUNvbmZpZ1N0b3JlOwotICAgIHByaXZhdGUgSU5ldHdvcmtNYW5hZ2VtZW50U2VydmljZSBtTndTZXJ2aWNlOwotICAgIHByaXZhdGUgQ29ubmVjdGl2aXR5TWFuYWdlciBtQ207Ci0KLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVAycFN1cHBvcnRlZDsKLSAgICBwcml2YXRlIGZpbmFsIEF0b21pY0Jvb2xlYW4gbVAycENvbm5lY3RlZCA9IG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbVRlbXBvcmFyaWx5RGlzY29ubmVjdFdpZmkgPSBmYWxzZTsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtUHJpbWFyeURldmljZVR5cGU7Ci0KLSAgICAvKiBTY2FuIHJlc3VsdHMgaGFuZGxpbmcgKi8KLSAgICBwcml2YXRlIExpc3Q8U2NhblJlc3VsdD4gbVNjYW5SZXN1bHRzID0gbmV3IEFycmF5TGlzdDxTY2FuUmVzdWx0PigpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhdHRlcm4gc2NhblJlc3VsdFBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoIlx0KyIpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTQ0FOX1JFU1VMVF9DQUNIRV9TSVpFID0gODA7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMcnVDYWNoZTxTdHJpbmcsIFNjYW5SZXN1bHQ+IG1TY2FuUmVzdWx0Q2FjaGU7Ci0KLSAgICAvKiBCYXRjaCBzY2FuIHJlc3VsdHMgKi8KLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8QmF0Y2hlZFNjYW5SZXN1bHQ+IG1CYXRjaGVkU2NhblJlc3VsdHMgPQotICAgICAgICAgICAgbmV3IEFycmF5TGlzdDxCYXRjaGVkU2NhblJlc3VsdD4oKTsKLSAgICBwcml2YXRlIGludCBtQmF0Y2hlZFNjYW5Pd25lclVpZCA9IFVOS05PV05fU0NBTl9TT1VSQ0U7Ci0gICAgcHJpdmF0ZSBpbnQgbUV4cGVjdGVkQmF0Y2hlZFNjYW5zID0gMDsKLSAgICBwcml2YXRlIGxvbmcgbUJhdGNoZWRTY2FuTWluUG9sbFRpbWUgPSAwOwotCi0gICAgLyogQ2hpcHNldCBzdXBwb3J0cyBiYWNrZ3JvdW5kIHNjYW4gKi8KLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUJhY2tncm91bmRTY2FuU3VwcG9ydGVkOwotCi0gICAgcHJpdmF0ZSBTdHJpbmcgbUludGVyZmFjZU5hbWU7Ci0gICAgLyogVGV0aGVyaW5nIGludGVyZmFjZSBjb3VsZCBiZSBzZXBhcmF0ZSBmcm9tIHdsYW4gaW50ZXJmYWNlICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgbVRldGhlckludGVyZmFjZU5hbWU7Ci0KLSAgICBwcml2YXRlIGludCBtTGFzdFNpZ25hbExldmVsID0gLTE7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbUxhc3RCc3NpZDsKLSAgICBwcml2YXRlIGludCBtTGFzdE5ldHdvcmtJZDsKLSAgICBwcml2YXRlIGJvb2xlYW4gbUVuYWJsZVJzc2lQb2xsaW5nID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1FbmFibGVCYWNrZ3JvdW5kU2NhbiA9IGZhbHNlOwotICAgIHByaXZhdGUgaW50IG1Sc3NpUG9sbFRva2VuID0gMDsKLSAgICBwcml2YXRlIGludCBtUmVjb25uZWN0Q291bnQgPSAwOwotICAgIC8qIDMgb3BlcmF0aW9uYWwgc3RhdGVzIGZvciBTVEEgb3BlcmF0aW9uOiBDT05ORUNUX01PREUsIFNDQU5fT05MWV9NT0RFLCBTQ0FOX09OTFlfV0lGSV9PRkZfTU9ERQotICAgICogSW4gQ09OTkVDVF9NT0RFLCB0aGUgU1RBIGNhbiBzY2FuIGFuZCBjb25uZWN0IHRvIGFuIGFjY2VzcyBwb2ludAotICAgICogSW4gU0NBTl9PTkxZX01PREUsIHRoZSBTVEEgY2FuIG9ubHkgc2NhbiBmb3IgYWNjZXNzIHBvaW50cwotICAgICogSW4gU0NBTl9PTkxZX1dJRklfT0ZGX01PREUsIHRoZSBTVEEgY2FuIG9ubHkgc2NhbiBmb3IgYWNjZXNzIHBvaW50cyB3aXRoIHdpZmkgdG9nZ2xlIGJlaW5nIG9mZgotICAgICovCi0gICAgcHJpdmF0ZSBpbnQgbU9wZXJhdGlvbmFsTW9kZSA9IENPTk5FQ1RfTU9ERTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbVNjYW5SZXN1bHRJc1BlbmRpbmcgPSBmYWxzZTsKLSAgICBwcml2YXRlIFdvcmtTb3VyY2UgbVNjYW5Xb3JrU291cmNlID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5LTk9XTl9TQ0FOX1NPVVJDRSA9IC0xOwotICAgIC8qIFRyYWNrcyBpZiBzdGF0ZSBtYWNoaW5lIGhhcyByZWNlaXZlZCBhbnkgc2NyZWVuIHN0YXRlIGNoYW5nZSBicm9hZGNhc3QgeWV0LgotICAgICAqIFdlIGNhbiBtaXNzIG9uZSBvZiB0aGVzZSBhdCBib290LgotICAgICAqLwotICAgIHByaXZhdGUgQXRvbWljQm9vbGVhbiBtU2NyZWVuQnJvYWRjYXN0UmVjZWl2ZWQgPSBuZXcgQXRvbWljQm9vbGVhbihmYWxzZSk7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbUJsdWV0b290aENvbm5lY3Rpb25BY3RpdmUgPSBmYWxzZTsKLQotICAgIHByaXZhdGUgUG93ZXJNYW5hZ2VyLldha2VMb2NrIG1TdXNwZW5kV2FrZUxvY2s7Ci0KLSAgICAvKioKLSAgICAgKiBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiBwb2xsaW5nIGZvciBSU1NJCi0gICAgICogYW5kIGxpbmtzcGVlZCBpbmZvcm1hdGlvbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQT0xMX1JTU0lfSU5URVJWQUxfTVNFQ1MgPSAzMDAwOwotCi0gICAgLyoqCi0gICAgICogRGVsYXkgYmV0d2VlbiBzdXBwbGljYW50IHJlc3RhcnRzIHVwb24gZmFpbHVyZSB0byBlc3RhYmxpc2ggY29ubmVjdGlvbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVVBQTElDQU5UX1JFU1RBUlRfSU5URVJWQUxfTVNFQ1MgPSA1MDAwOwotCi0gICAgLyoqCi0gICAgICogTnVtYmVyIG9mIHRpbWVzIHdlIGF0dGVtcHQgdG8gcmVzdGFydCBzdXBwbGljYW50Ci0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVUFBMSUNBTlRfUkVTVEFSVF9UUklFUyA9IDU7Ci0KLSAgICBwcml2YXRlIGludCBtU3VwcGxpY2FudFJlc3RhcnRDb3VudCA9IDA7Ci0gICAgLyogVHJhY2tzIHNlcXVlbmNlIG51bWJlciBvbiBzdG9wIGZhaWx1cmUgbWVzc2FnZSAqLwotICAgIHByaXZhdGUgaW50IG1TdXBwbGljYW50U3RvcEZhaWx1cmVUb2tlbiA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBUZXRoZXIgc3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiB0aW1lIG91dAotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVRIRVJfTk9USUZJQ0FUSU9OX1RJTUVfT1VUX01TRUNTID0gNTAwMDsKLQotICAgIC8qIFRyYWNrcyBzZXF1ZW5jZSBudW1iZXIgb24gYSB0ZXRoZXIgbm90aWZpY2F0aW9uIHRpbWUgb3V0ICovCi0gICAgcHJpdmF0ZSBpbnQgbVRldGhlclRva2VuID0gMDsKLQotICAgIC8qKgotICAgICAqIERyaXZlciBzdGFydCB0aW1lIG91dC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSX1NUQVJUX1RJTUVfT1VUX01TRUNTID0gMTAwMDA7Ci0KLSAgICAvKiBUcmFja3Mgc2VxdWVuY2UgbnVtYmVyIG9uIGEgZHJpdmVyIHRpbWUgb3V0ICovCi0gICAgcHJpdmF0ZSBpbnQgbURyaXZlclN0YXJ0VG9rZW4gPSAwOwotCi0gICAgLyoqCi0gICAgICogVGhlIGxpbmsgcHJvcGVydGllcyBvZiB0aGUgd2lmaSBpbnRlcmZhY2UuCi0gICAgICogRG8gbm90IG1vZGlmeSB0aGlzIGRpcmVjdGx5OyB1c2UgdXBkYXRlTGlua1Byb3BlcnRpZXMgaW5zdGVhZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIExpbmtQcm9wZXJ0aWVzIG1MaW5rUHJvcGVydGllczsKLQotICAgIC8qKgotICAgICAqIFN1YnNldCBvZiBsaW5rIHByb3BlcnRpZXMgY29taW5nIGZyb20gbmV0bGluay4KLSAgICAgKiBDdXJyZW50bHkgaW5jbHVkZXMgSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuIEluIHRoZSBmdXR1cmUgd2lsbCBhbHNvIGluY2x1ZGUgSVB2NiBETlMgc2VydmVycwotICAgICAqIGFuZCBkb21haW5zIG9idGFpbmVkIGZyb20gcm91dGVyIGFkdmVydGlzZW1lbnRzIChSRkMgNjEwNikuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBMaW5rUHJvcGVydGllcyBtTmV0bGlua0xpbmtQcm9wZXJ0aWVzOwotCi0gICAgLyogVHJhY2tzIHNlcXVlbmNlIG51bWJlciBvbiBhIHBlcmlvZGljIHNjYW4gbWVzc2FnZSAqLwotICAgIHByaXZhdGUgaW50IG1QZXJpb2RpY1NjYW5Ub2tlbiA9IDA7Ci0KLSAgICAvLyBXYWtlbG9jayBoZWxkIGR1cmluZyB3aWZpIHN0YXJ0L3N0b3AgYW5kIGRyaXZlciBsb2FkL3VubG9hZAotICAgIHByaXZhdGUgUG93ZXJNYW5hZ2VyLldha2VMb2NrIG1XYWtlTG9jazsKLQotICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKLQotICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1EaGNwUmVzdWx0c0xvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gICAgcHJpdmF0ZSBEaGNwUmVzdWx0cyBtRGhjcFJlc3VsdHM7Ci0gICAgcHJpdmF0ZSBXaWZpSW5mbyBtV2lmaUluZm87Ci0gICAgcHJpdmF0ZSBOZXR3b3JrSW5mbyBtTmV0d29ya0luZm87Ci0gICAgcHJpdmF0ZSBTdXBwbGljYW50U3RhdGVUcmFja2VyIG1TdXBwbGljYW50U3RhdGVUcmFja2VyOwotICAgIHByaXZhdGUgRGhjcFN0YXRlTWFjaGluZSBtRGhjcFN0YXRlTWFjaGluZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbURoY3BBY3RpdmUgPSBmYWxzZTsKLQotICAgIHByaXZhdGUgY2xhc3MgSW50ZXJmYWNlT2JzZXJ2ZXIgZXh0ZW5kcyBCYXNlTmV0d29ya09ic2VydmVyIHsKLSAgICAgICAgcHJpdmF0ZSBXaWZpU3RhdGVNYWNoaW5lIG1XaWZpU3RhdGVNYWNoaW5lOwotCi0gICAgICAgIEludGVyZmFjZU9ic2VydmVyKFdpZmlTdGF0ZU1hY2hpbmUgd2lmaVN0YXRlTWFjaGluZSkgewotICAgICAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lID0gd2lmaVN0YXRlTWFjaGluZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBtYXliZUxvZyhTdHJpbmcgb3BlcmF0aW9uLCBTdHJpbmcgaWZhY2UsIExpbmtBZGRyZXNzIGFkZHJlc3MpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIHsKLSAgICAgICAgICAgICAgICBsb2cob3BlcmF0aW9uICsgIjogIiArIGFkZHJlc3MgKyAiIG9uICIgKyBpZmFjZSArCi0gICAgICAgICAgICAgICAgICAgICIgZmxhZ3MgIiArIGFkZHJlc3MuZ2V0RmxhZ3MoKSArICIgc2NvcGUgIiArIGFkZHJlc3MuZ2V0U2NvcGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgYWRkcmVzc1VwZGF0ZWQoU3RyaW5nIGlmYWNlLCBMaW5rQWRkcmVzcyBhZGRyZXNzKSB7Ci0gICAgICAgICAgICBpZiAobVdpZmlTdGF0ZU1hY2hpbmUubUludGVyZmFjZU5hbWUuZXF1YWxzKGlmYWNlKSkgewotICAgICAgICAgICAgICAgIG1heWJlTG9nKCJhZGRyZXNzVXBkYXRlZCIsIGlmYWNlLCBhZGRyZXNzKTsKLSAgICAgICAgICAgICAgICBtV2lmaVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShDTURfSVBfQUREUkVTU19VUERBVEVELCBhZGRyZXNzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBhZGRyZXNzUmVtb3ZlZChTdHJpbmcgaWZhY2UsIExpbmtBZGRyZXNzIGFkZHJlc3MpIHsKLSAgICAgICAgICAgIGlmIChtV2lmaVN0YXRlTWFjaGluZS5tSW50ZXJmYWNlTmFtZS5lcXVhbHMoaWZhY2UpKSB7Ci0gICAgICAgICAgICAgICAgbWF5YmVMb2coImFkZHJlc3NSZW1vdmVkIiwgaWZhY2UsIGFkZHJlc3MpOwotICAgICAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKENNRF9JUF9BRERSRVNTX1JFTU9WRUQsIGFkZHJlc3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBJbnRlcmZhY2VPYnNlcnZlciBtSW50ZXJmYWNlT2JzZXJ2ZXI7Ci0KLSAgICBwcml2YXRlIEFsYXJtTWFuYWdlciBtQWxhcm1NYW5hZ2VyOwotICAgIHByaXZhdGUgUGVuZGluZ0ludGVudCBtU2NhbkludGVudDsKLSAgICBwcml2YXRlIFBlbmRpbmdJbnRlbnQgbURyaXZlclN0b3BJbnRlbnQ7Ci0gICAgcHJpdmF0ZSBQZW5kaW5nSW50ZW50IG1CYXRjaGVkU2NhbkludGVydmFsSW50ZW50OwotCi0gICAgLyogVHJhY2tzIGN1cnJlbnQgZnJlcXVlbmN5IG1vZGUgKi8KLSAgICBwcml2YXRlIEF0b21pY0ludGVnZXIgbUZyZXF1ZW5jeUJhbmQgPSBuZXcgQXRvbWljSW50ZWdlcihXaWZpTWFuYWdlci5XSUZJX0ZSRVFVRU5DWV9CQU5EX0FVVE8pOwotCi0gICAgLyogVHJhY2tzIGlmIHdlIGFyZSBmaWx0ZXJpbmcgTXVsdGljYXN0IHY0IHBhY2tldHMuIERlZmF1bHQgaXMgdG8gZmlsdGVyLiAqLwotICAgIHByaXZhdGUgQXRvbWljQm9vbGVhbiBtRmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzID0gbmV3IEF0b21pY0Jvb2xlYW4odHJ1ZSk7Ci0KLSAgICAvLyBDaGFubmVsIGZvciBzZW5kaW5nIHJlcGxpZXMuCi0gICAgcHJpdmF0ZSBBc3luY0NoYW5uZWwgbVJlcGx5Q2hhbm5lbCA9IG5ldyBBc3luY0NoYW5uZWwoKTsKLQotICAgIHByaXZhdGUgV2lmaVAycE1hbmFnZXIgbVdpZmlQMnBNYW5hZ2VyOwotICAgIC8vVXNlZCB0byBpbml0aWF0ZSBhIGNvbm5lY3Rpb24gd2l0aCBXaWZpUDJwU2VydmljZQotICAgIHByaXZhdGUgQXN5bmNDaGFubmVsIG1XaWZpUDJwQ2hhbm5lbDsKLSAgICBwcml2YXRlIEFzeW5jQ2hhbm5lbCBtV2lmaUFwQ29uZmlnQ2hhbm5lbDsKLQotICAgIC8qIFRoZSBiYXNlIGZvciB3aWZpIG1lc3NhZ2UgdHlwZXMgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IEJBU0UgPSBQcm90b2NvbC5CQVNFX1dJRkk7Ci0gICAgLyogU3RhcnQgdGhlIHN1cHBsaWNhbnQgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVEFSVF9TVVBQTElDQU5UICAgICAgICAgICAgICAgICA9IEJBU0UgKyAxMTsKLSAgICAvKiBTdG9wIHRoZSBzdXBwbGljYW50ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RPUF9TVVBQTElDQU5UICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTI7Ci0gICAgLyogU3RhcnQgdGhlIGRyaXZlciAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUQVJUX0RSSVZFUiAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDEzOwotICAgIC8qIFN0b3AgdGhlIGRyaXZlciAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUT1BfRFJJVkVSICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDE0OwotICAgIC8qIEluZGljYXRlcyBTdGF0aWMgSVAgc3VjY2VlZGVkICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RBVElDX0lQX1NVQ0NFU1MgICAgICAgICAgICAgICAgPSBCQVNFICsgMTU7Ci0gICAgLyogSW5kaWNhdGVzIFN0YXRpYyBJUCBmYWlsZWQgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVEFUSUNfSVBfRkFJTFVSRSAgICAgICAgICAgICAgICA9IEJBU0UgKyAxNjsKLSAgICAvKiBJbmRpY2F0ZXMgc3VwcGxpY2FudCBzdG9wIGZhaWxlZCAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUT1BfU1VQUExJQ0FOVF9GQUlMRUQgICAgICAgICAgID0gQkFTRSArIDE3OwotICAgIC8qIERlbGF5ZWQgc3RvcCB0byBhdm9pZCBzaHV0dGluZyBkb3duIGRyaXZlciB0b28gcXVpY2sqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0RFTEFZRURfU1RPUF9EUklWRVIgICAgICAgICAgICAgID0gQkFTRSArIDE4OwotICAgIC8qIEEgZGVsYXllZCBtZXNzYWdlIHNlbnQgdG8gc3RhcnQgZHJpdmVyIHdoZW4gaXQgZmFpbCB0byBjb21lIHVwICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfRFJJVkVSX1NUQVJUX1RJTUVEX09VVCAgICAgICAgICAgPSBCQVNFICsgMTk7Ci0gICAgLyogUmVhZHkgdG8gc3dpdGNoIHRvIG5ldHdvcmsgYXMgZGVmYXVsdCAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0NBUFRJVkVfQ0hFQ0tfQ09NUExFVEUgICAgICAgICAgID0gQkFTRSArIDIwOwotCi0gICAgLyogU3RhcnQgdGhlIHNvZnQgYWNjZXNzIHBvaW50ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RBUlRfQVAgICAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMjE7Ci0gICAgLyogSW5kaWNhdGVzIHNvZnQgYXAgc3RhcnQgc3VjY2VlZGVkICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RBUlRfQVBfU1VDQ0VTUyAgICAgICAgICAgICAgICAgPSBCQVNFICsgMjI7Ci0gICAgLyogSW5kaWNhdGVzIHNvZnQgYXAgc3RhcnQgZmFpbGVkICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RBUlRfQVBfRkFJTFVSRSAgICAgICAgICAgICAgICAgPSBCQVNFICsgMjM7Ci0gICAgLyogU3RvcCB0aGUgc29mdCBhY2Nlc3MgcG9pbnQgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVE9QX0FQICAgICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAyNDsKLSAgICAvKiBTZXQgdGhlIHNvZnQgYWNjZXNzIHBvaW50IGNvbmZpZ3VyYXRpb24gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TRVRfQVBfQ09ORklHICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAyNTsKLSAgICAvKiBTb2Z0IGFjY2VzcyBwb2ludCBjb25maWd1cmF0aW9uIHNldCBjb21wbGV0ZWQgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TRVRfQVBfQ09ORklHX0NPTVBMRVRFRCAgICAgICAgICA9IEJBU0UgKyAyNjsKLSAgICAvKiBSZXF1ZXN0IHRoZSBzb2Z0IGFjY2VzcyBwb2ludCBjb25maWd1cmF0aW9uICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfUkVRVUVTVF9BUF9DT05GSUcgICAgICAgICAgICAgICAgPSBCQVNFICsgMjc7Ci0gICAgLyogUmVzcG9uc2UgdG8gYWNjZXNzIHBvaW50IGNvbmZpZ3VyYXRpb24gcmVxdWVzdCAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1JFU1BPTlNFX0FQX0NPTkZJRyAgICAgICAgICAgICAgID0gQkFTRSArIDI4OwotICAgIC8qIEludm9rZWQgd2hlbiBnZXR0aW5nIGEgdGV0aGVyIHN0YXRlIGNoYW5nZSBub3RpZmljYXRpb24gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9URVRIRVJfU1RBVEVfQ0hBTkdFICAgICAgICAgICAgICA9IEJBU0UgKyAyOTsKLSAgICAvKiBBIGRlbGF5ZWQgbWVzc2FnZSBzZW50IHRvIGluZGljYXRlIHRldGhlciBzdGF0ZSBjaGFuZ2UgZmFpbGVkIHRvIGFycml2ZSAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1RFVEhFUl9OT1RJRklDQVRJT05fVElNRURfT1VUICAgID0gQkFTRSArIDMwOwotCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfQkxVRVRPT1RIX0FEQVBURVJfU1RBVEVfQ0hBTkdFICAgPSBCQVNFICsgMzE7Ci0KLSAgICAvKiBTdXBwbGljYW50IGNvbW1hbmRzICovCi0gICAgLyogSXMgc3VwcGxpY2FudCBhbGl2ZSA/ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfUElOR19TVVBQTElDQU5UICAgICAgICAgICAgICAgICAgPSBCQVNFICsgNTE7Ci0gICAgLyogQWRkL3VwZGF0ZSBhIG5ldHdvcmsgY29uZmlndXJhdGlvbiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0FERF9PUl9VUERBVEVfTkVUV09SSyAgICAgICAgICAgID0gQkFTRSArIDUyOwotICAgIC8qIERlbGV0ZSBhIG5ldHdvcmsgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9SRU1PVkVfTkVUV09SSyAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA1MzsKLSAgICAvKiBFbmFibGUgYSBuZXR3b3JrLiBUaGUgZGV2aWNlIHdpbGwgYXR0ZW1wdCBhIGNvbm5lY3Rpb24gdG8gdGhlIGdpdmVuIG5ldHdvcmsuICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfRU5BQkxFX05FVFdPUksgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgNTQ7Ci0gICAgLyogRW5hYmxlIGFsbCBuZXR3b3JrcyAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0VOQUJMRV9BTExfTkVUV09SS1MgICAgICAgICAgICAgID0gQkFTRSArIDU1OwotICAgIC8qIEJsYWNrbGlzdCBuZXR3b3JrLiBEZS1wcmlvcml0aXplcyB0aGUgZ2l2ZW4gQlNTSUQgZm9yIGNvbm5lY3Rpb24uICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfQkxBQ0tMSVNUX05FVFdPUksgICAgICAgICAgICAgICAgPSBCQVNFICsgNTY7Ci0gICAgLyogQ2xlYXIgdGhlIGJsYWNrbGlzdCBuZXR3b3JrIGxpc3QgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9DTEVBUl9CTEFDS0xJU1QgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA1NzsKLSAgICAvKiBTYXZlIGNvbmZpZ3VyYXRpb24gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TQVZFX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA1ODsKLSAgICAvKiBHZXQgY29uZmlndXJlZCBuZXR3b3JrcyovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfR0VUX0NPTkZJR1VSRURfTkVUV09SS1MgICAgICAgICAgPSBCQVNFICsgNTk7Ci0KLSAgICAvKiBTdXBwbGljYW50IGNvbW1hbmRzIGFmdGVyIGRyaXZlciBzdGFydCovCi0gICAgLyogSW5pdGlhdGUgYSBzY2FuICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RBUlRfU0NBTiAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgNzE7Ci0gICAgLyogU2V0IG9wZXJhdGlvbmFsIG1vZGUuIENPTk5FQ1QsIFNDQU4gT05MWSwgU0NBTl9PTkxZIHdpdGggV2ktRmkgb2ZmIG1vZGUgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERSAgICAgICAgICAgICA9IEJBU0UgKyA3MjsKLSAgICAvKiBEaXNjb25uZWN0IGZyb20gYSBuZXR3b3JrICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfRElTQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgNzM7Ci0gICAgLyogUmVjb25uZWN0IHRvIGEgbmV0d29yayAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1JFQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDc0OwotICAgIC8qIFJlYXNzb2NpYXRlIHRvIGEgbmV0d29yayAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1JFQVNTT0NJQVRFICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDc1OwotICAgIC8qIENvbnRyb2xzIHN1c3BlbmQgbW9kZSBvcHRpbWl6YXRpb25zCi0gICAgICoKLSAgICAgKiBXaGVuIGhpZ2ggcGVyZiBtb2RlIGlzIGVuYWJsZWQsIHN1c3BlbmQgbW9kZSBvcHRpbWl6YXRpb25zIGFyZSBkaXNhYmxlZAotICAgICAqCi0gICAgICogV2hlbiBoaWdoIHBlcmYgbW9kZSBpcyBkaXNhYmxlZCwgc3VzcGVuZCBtb2RlIG9wdGltaXphdGlvbnMgYXJlIGVuYWJsZWQKLSAgICAgKgotICAgICAqIFN1c3BlbmQgbW9kZSBvcHRpbWl6YXRpb25zIGluY2x1ZGU6Ci0gICAgICogLSBwYWNrZXQgZmlsdGVyaW5nCi0gICAgICogLSB0dXJuIG9mZiByb2FtaW5nCi0gICAgICogLSBEVElNIHdha2UgdXAgc2V0dGluZ3MKLSAgICAgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TRVRfSElHSF9QRVJGX01PREUgICAgICAgICAgICAgICA9IEJBU0UgKyA3NzsKLSAgICAvKiBTZXQgdGhlIGNvdW50cnkgY29kZSAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NFVF9DT1VOVFJZX0NPREUgICAgICAgICAgICAgICAgID0gQkFTRSArIDgwOwotICAgIC8qIEVuYWJsZXMgUlNTSSBwb2xsICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfRU5BQkxFX1JTU0lfUE9MTCAgICAgICAgICAgICAgICAgPSBCQVNFICsgODI7Ci0gICAgLyogUlNTSSBwb2xsICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfUlNTSV9QT0xMICAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgODM7Ci0gICAgLyogU2V0IHVwIHBhY2tldCBmaWx0ZXJpbmcgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HICAgICAgICAgICA9IEJBU0UgKyA4NDsKLSAgICAvKiBDbGVhciBwYWNrZXQgZmlsdGVyICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HICAgICAgICAgICAgPSBCQVNFICsgODU7Ci0gICAgLyogRW5hYmxlIHN1c3BlbmQgbW9kZSBvcHRpbWl6YXRpb25zIGluIHRoZSBkcml2ZXIgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TRVRfU1VTUEVORF9PUFRfRU5BQkxFRCAgICAgICAgICA9IEJBU0UgKyA4NjsKLSAgICAvKiBXaGVuIHRoZXJlIGFyZSBubyBzYXZlZCBuZXR3b3Jrcywgd2UgZG8gYSBwZXJpb2RpYyBzY2FuIHRvIG5vdGlmeSB1c2VyIG9mCi0gICAgICogYW4gb3BlbiBuZXR3b3JrICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfTk9fTkVUV09SS1NfUEVSSU9ESUNfU0NBTiAgICAgICAgPSBCQVNFICsgODg7Ci0KLSAgICAvKiBhcmcxIHZhbHVlcyB0byBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HIGFuZCBDTURfU1RBUlRfUEFDS0VUX0ZJTFRFUklORyAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTVVMVElDQVNUX1Y2ICA9IDE7Ci0gICAgc3RhdGljIGZpbmFsIGludCBNVUxUSUNBU1RfVjQgID0gMDsKLQotICAgLyogU2V0IHRoZSBmcmVxdWVuY3kgYmFuZCAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORCAgICAgICAgICAgICAgID0gQkFTRSArIDkwOwotICAgIC8qIEVuYWJsZSBiYWNrZ3JvdW5kIHNjYW4gZm9yIGNvbmZpZ3VyZWQgbmV0d29ya3MgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9FTkFCTEVfQkFDS0dST1VORF9TQ0FOICAgICAgICAgICA9IEJBU0UgKyA5MTsKLSAgICAvKiBFbmFibGUgVERMUyBvbiBhIHNwZWNpZmljIE1BQyBhZGRyZXNzICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfRU5BQkxFX1RETFMgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgOTI7Ci0KLSAgICAvKiBDb21tYW5kcyBmcm9tL3RvIHRoZSBTdXBwbGljYW50U3RhdGVUcmFja2VyICovCi0gICAgLyogUmVzZXQgdGhlIHN1cHBsaWNhbnQgc3RhdGUgdHJhY2tlciAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1JFU0VUX1NVUFBMSUNBTlRfU1RBVEUgICAgICAgICAgID0gQkFTRSArIDExMTsKLQotICAgIC8qIFAycCBjb21tYW5kcyAqLwotICAgIC8qIFdlIGFyZSBvayB3aXRoIG5vIHJlc3BvbnNlIGhlcmUgc2luY2Ugd2Ugd29udCBkbyBtdWNoIHdpdGggaXQgYW55d2F5ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0VOQUJMRV9QMlAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTMxOwotICAgIC8qIEluIG9yZGVyIHRvIHNodXQgZG93biBzdXBwbGljYW50IGNsZWFubHksIHdlIHdhaXQgdGlsbCBwMnAgaGFzCi0gICAgICogYmVlbiBkaXNhYmxlZCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENNRF9ESVNBQkxFX1AyUF9SRVEgICAgICAgICAgID0gQkFTRSArIDEzMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTURfRElTQUJMRV9QMlBfUlNQICAgICAgICAgICA9IEJBU0UgKyAxMzM7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTURfQk9PVF9DT01QTEVURUQgICAgICAgICAgICA9IEJBU0UgKyAxMzQ7Ci0KLSAgICAvKiBjaGFuZ2UgdGhlIGJhdGNoIHNjYW4gc2V0dGluZ3MuCi0gICAgICogYXJnMSA9IHJlc3BvbnNpYmxlIFVJRAotICAgICAqIGFyZzIgPSBjc3BoIChjaGFubmVsIHNjYW5zIHBlciBob3VyKQotICAgICAqIG9iaiA9IGJ1bmRsZSB3aXRoIHRoZSBuZXcgc2V0dGluZ3MgYW5kIHRoZSBvcHRpb25hbCB3b3Jrc291cmNlCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NFVF9CQVRDSEVEX1NDQU4gICAgICAgICAgPSBCQVNFICsgMTM1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENNRF9TVEFSVF9ORVhUX0JBVENIRURfU0NBTiAgID0gQkFTRSArIDEzNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTURfUE9MTF9CQVRDSEVEX1NDQU4gICAgICAgICA9IEJBU0UgKyAxMzc7Ci0KLSAgICAvKiBMaW5rIGNvbmZpZ3VyYXRpb24gKElQIGFkZHJlc3MsIEROUywgLi4uKSBjaGFuZ2VzICovCi0gICAgLyogQW4gbmV3IElQIGFkZHJlc3Mgd2FzIGFkZGVkIHRvIG91ciBpbnRlcmZhY2UsIG9yIGFuIGV4aXN0aW5nIElQIGFkZHJlc3Mgd2FzIHVwZGF0ZWQgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9JUF9BRERSRVNTX1VQREFURUQgICAgICAgICAgICAgICA9IEJBU0UgKyAxNDA7Ci0gICAgLyogQW4gSVAgYWRkcmVzcyB3YXMgcmVtb3ZlZCBmcm9tIG91ciBpbnRlcmZhY2UgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9JUF9BRERSRVNTX1JFTU9WRUQgICAgICAgICAgICAgICA9IEJBU0UgKyAxNDE7Ci0gICAgLyogUmVsb2FkIGFsbCBuZXR3b3JrcyBhbmQgcmVjb25uZWN0ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfUkVMT0FEX1RMU19BTkRfUkVDT05ORUNUICAgICAgICAgPSBCQVNFICsgMTQyOwotCi0gICAgLyogV2lmaSBzdGF0ZSBtYWNoaW5lIG1vZGVzIG9mIG9wZXJhdGlvbiAqLwotICAgIC8qIENPTk5FQ1RfTU9ERSAtIGNvbm5lY3QgdG8gYW55ICdrbm93bicgQVAgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RfTU9ERSAgICAgICAgICAgICAgICAgICA9IDE7Ci0gICAgLyogU0NBTl9PTkxZX01PREUgLSBkb24ndCBjb25uZWN0IHRvIGFueSBBUHM7IHNjYW4sIGJ1dCBvbmx5IHdoaWxlIGFwcHMgaG9sZCBsb2NrICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0NBTl9PTkxZX01PREUgICAgICAgICAgICAgICAgID0gMjsKLSAgICAvKiBTQ0FOX09OTFlfV0lUSF9XSUZJX09GRiAtIHNjYW4sIGJ1dCBkb24ndCBjb25uZWN0IHRvIGFueSBBUHMgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ0FOX09OTFlfV0lUSF9XSUZJX09GRl9NT0RFICAgPSAzOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVQ0NFU1MgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGQUlMVVJFID0gLTE7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgd2Ugd2lsbCByZXRyeSBhIGNvbm5lY3Rpb24gdG8gYW4gYWNjZXNzIHBvaW50Ci0gICAgICogZm9yIHdoaWNoIHdlIGhhdmUgZmFpbGVkIGluIGFjcXVpcmluZyBhbiBJUCBhZGRyZXNzIGZyb20gREhDUC4gQSB2YWx1ZSBvZgotICAgICAqIE4gbWVhbnMgdGhhdCB3ZSB3aWxsIG1ha2UgTisxIGNvbm5lY3Rpb24gYXR0ZW1wdHMgaW4gYWxsLgotICAgICAqIDxwPgotICAgICAqIFNlZSB7QGxpbmsgU2V0dGluZ3MuU2VjdXJlI1dJRklfTUFYX0RIQ1BfUkVUUllfQ09VTlR9LiBUaGlzIGlzIHRoZSBkZWZhdWx0Ci0gICAgICogdmFsdWUgaWYgYSBTZXR0aW5ncyB2YWx1ZSBpcyBub3QgcHJlc2VudC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9NQVhfREhDUF9SRVRSSUVTID0gOTsKLQotICAgIC8qIFRyYWNrcyBpZiBzdXNwZW5kIG9wdGltaXphdGlvbnMgbmVlZCB0byBiZSBkaXNhYmxlZCBieSBESENQLAotICAgICAqIHNjcmVlbiBvciBkdWUgdG8gaGlnaCBwZXJmIG1vZGUuCi0gICAgICogV2hlbiBhbnkgb2YgdGhlbSBuZWVkcyB0byBkaXNhYmxlIGl0LCB3ZSBrZWVwIHRoZSBzdXNwZW5kIG9wdGltaXphdGlvbnMKLSAgICAgKiBkaXNhYmxlZAotICAgICAqLwotICAgIHByaXZhdGUgaW50IG1TdXNwZW5kT3B0TmVlZHNEaXNhYmxlZCA9IDA7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1VTUEVORF9EVUVfVE9fREhDUCAgICAgICA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVU1BFTkRfRFVFX1RPX0hJR0hfUEVSRiAgPSAxPDwxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVVNQRU5EX0RVRV9UT19TQ1JFRU4gICAgID0gMTw8MjsKLQotICAgIC8qIFRyYWNrcyBpZiB1c2VyIGhhcyBlbmFibGVkIHN1c3BlbmQgb3B0aW1pemF0aW9ucyB0aHJvdWdoIHNldHRpbmdzICovCi0gICAgcHJpdmF0ZSBBdG9taWNCb29sZWFuIG1Vc2VyV2FudHNTdXNwZW5kT3B0ID0gbmV3IEF0b21pY0Jvb2xlYW4odHJ1ZSk7Ci0KLSAgICAvKioKLSAgICAgKiBEZWZhdWx0IGZyYW1ld29yayBzY2FuIGludGVydmFsIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBpcyB1c2VkIGluIHRoZSBzY2VuYXJpbyBpbiB3aGljaAotICAgICAqIHdpZmkgY2hpcHNldCBkb2VzIG5vdCBzdXBwb3J0IGJhY2tncm91bmQgc2Nhbm5pbmcgdG8gc2V0IHVwIGEKLSAgICAgKiBwZXJpb2RpYyB3YWtlIHVwIHNjYW4gc28gdGhhdCB0aGUgZGV2aWNlIGNhbiBjb25uZWN0IHRvIGEgbmV3IGFjY2VzcwotICAgICAqIHBvaW50IG9uIHRoZSBtb3ZlLiB7QGxpbmsgU2V0dGluZ3MuR2xvYmFsI1dJRklfRlJBTUVXT1JLX1NDQU5fSU5URVJWQUxfTVN9IGNhbgotICAgICAqIG92ZXJyaWRlIHRoaXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbURlZmF1bHRGcmFtZXdvcmtTY2FuSW50ZXJ2YWxNczsKLQotICAgIC8qKgotICAgICAqIFN1cHBsaWNhbnQgc2NhbiBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMuCi0gICAgICogQ29tZXMgZnJvbSB7QGxpbmsgU2V0dGluZ3MuR2xvYmFsI1dJRklfU1VQUExJQ0FOVF9TQ0FOX0lOVEVSVkFMX01TfSBvcgotICAgICAqIGZyb20gdGhlIGRlZmF1bHQgY29uZmlnIGlmIHRoZSBzZXR0aW5nIGlzIG5vdCBzZXQKLSAgICAgKi8KLSAgICBwcml2YXRlIGxvbmcgbVN1cHBsaWNhbnRTY2FuSW50ZXJ2YWxNczsKLQotICAgIC8qKgotICAgICAqIE1pbmltdW0gdGltZSBpbnRlcnZhbCBiZXR3ZWVuIGVuYWJsaW5nIGFsbCBuZXR3b3Jrcy4KLSAgICAgKiBBIGRldmljZSBjYW4gZW5kIHVwIHJlcGVhdGVkbHkgY29ubmVjdGluZyB0byBhIGJhZCBuZXR3b3JrIG9uIHNjcmVlbiBvbi9vZmYgdG9nZ2xlCi0gICAgICogZHVlIHRvIGVuYWJsaW5nIGV2ZXJ5IHRpbWUuIFdlIGFkZCBhIHRocmVzaG9sZCB0byBhdm9pZCB0aGlzLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5fSU5URVJWQUxfRU5BQkxFX0FMTF9ORVRXT1JLU19NUyA9IDEwICogNjAgKiAxMDAwOyAvKiAxMCBtaW51dGVzICovCi0gICAgcHJpdmF0ZSBsb25nIG1MYXN0RW5hYmxlQWxsTmV0d29ya3NUaW1lOwotCi0gICAgLyoqCi0gICAgICogU3RhcnRpbmcgYW5kIHNodXR0aW5nIGRvd24gZHJpdmVyIHRvbyBxdWljayBjYXVzZXMgcHJvYmxlbXMgbGVhZGluZyB0byBkcml2ZXIKLSAgICAgKiBiZWluZyBpbiBhIGJhZCBzdGF0ZS4gRGVsYXkgZHJpdmVyIHN0b3AuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbURyaXZlclN0b3BEZWxheU1zOwotICAgIHByaXZhdGUgaW50IG1EZWxheWVkU3RvcENvdW50ZXI7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1JbkRlbGF5ZWRTdG9wID0gZmFsc2U7Ci0KLSAgICAvLyBzb21ldGltZXMgdGVsZXBob255IGdpdmVzIHVzIHRoaXMgZGF0YSBiZWZvcmUgYm9vdCBpcyBjb21wbGV0ZSBhbmQgd2UgY2FuJ3Qgc3RvcmUgaXQKLSAgICAvLyB1bnRpbCBhZnRlciwgc28gdGhlIHdyaXRlIGlzIGRlZmVycmVkCi0gICAgcHJpdmF0ZSB2b2xhdGlsZSBTdHJpbmcgbVBlcnNpc3RlZENvdW50cnlDb2RlOwotCi0gICAgLy8gU3VwcGxpY2FudCBkb2Vzbid0IGxpa2Ugc2V0dGluZyB0aGUgc2FtZSBjb3VudHJ5IGNvZGUgbXVsdGlwbGUgdGltZXMgKGl0IG1heSBkcm9wCi0gICAgLy8gY3VycmVudGx5IGNvbm5lY3RlZCBuZXR3b3JrKSwgc28gd2Ugc2F2ZSB0aGUgY291bnRyeSBjb2RlIGhlcmUgdG8gYXZvaWQgcmVkdW5kZW5jeQotICAgIHByaXZhdGUgU3RyaW5nIG1MYXN0U2V0Q291bnRyeUNvZGU7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOX1JTU0kgPSAtMjAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfUlNTSSA9IDI1NjsKLQotICAgIC8qIERlZmF1bHQgcGFyZW50IHN0YXRlICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtRGVmYXVsdFN0YXRlID0gbmV3IERlZmF1bHRTdGF0ZSgpOwotICAgIC8qIFRlbXBvcmFyeSBpbml0aWFsIHN0YXRlICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtSW5pdGlhbFN0YXRlID0gbmV3IEluaXRpYWxTdGF0ZSgpOwotICAgIC8qIERyaXZlciBsb2FkZWQsIHdhaXRpbmcgZm9yIHN1cHBsaWNhbnQgdG8gc3RhcnQgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1TdXBwbGljYW50U3RhcnRpbmdTdGF0ZSA9IG5ldyBTdXBwbGljYW50U3RhcnRpbmdTdGF0ZSgpOwotICAgIC8qIERyaXZlciBsb2FkZWQgYW5kIHN1cHBsaWNhbnQgcmVhZHkgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1TdXBwbGljYW50U3RhcnRlZFN0YXRlID0gbmV3IFN1cHBsaWNhbnRTdGFydGVkU3RhdGUoKTsKLSAgICAvKiBXYWl0aW5nIGZvciBzdXBwbGljYW50IHRvIHN0b3AgYW5kIG1vbml0b3IgdG8gZXhpdCAqLwotICAgIHByaXZhdGUgU3RhdGUgbVN1cHBsaWNhbnRTdG9wcGluZ1N0YXRlID0gbmV3IFN1cHBsaWNhbnRTdG9wcGluZ1N0YXRlKCk7Ci0gICAgLyogRHJpdmVyIHN0YXJ0IGlzc3VlZCwgd2FpdGluZyBmb3IgY29tcGxldGVkIGV2ZW50ICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtRHJpdmVyU3RhcnRpbmdTdGF0ZSA9IG5ldyBEcml2ZXJTdGFydGluZ1N0YXRlKCk7Ci0gICAgLyogRHJpdmVyIHN0YXJ0ZWQgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1Ecml2ZXJTdGFydGVkU3RhdGUgPSBuZXcgRHJpdmVyU3RhcnRlZFN0YXRlKCk7Ci0gICAgLyogV2FpdCB1bnRpbCBwMnAgaXMgZGlzYWJsZWQKLSAgICAgKiBUaGlzIGlzIGEgc3BlY2lhbCBzdGF0ZSB3aGljaCBpcyBlbnRlcmVkIHJpZ2h0IGFmdGVyIHdlIGV4aXQgb3V0IG9mIERyaXZlclN0YXJ0ZWRTdGF0ZQotICAgICAqIGJlZm9yZSB0cmFuc2l0aW9uaW5nIHRvIGFub3RoZXIgc3RhdGUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtV2FpdEZvclAycERpc2FibGVTdGF0ZSA9IG5ldyBXYWl0Rm9yUDJwRGlzYWJsZVN0YXRlKCk7Ci0gICAgLyogRHJpdmVyIHN0b3BwaW5nICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtRHJpdmVyU3RvcHBpbmdTdGF0ZSA9IG5ldyBEcml2ZXJTdG9wcGluZ1N0YXRlKCk7Ci0gICAgLyogRHJpdmVyIHN0b3BwZWQgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1Ecml2ZXJTdG9wcGVkU3RhdGUgPSBuZXcgRHJpdmVyU3RvcHBlZFN0YXRlKCk7Ci0gICAgLyogU2NhbiBmb3IgbmV0d29ya3MsIG5vIGNvbm5lY3Rpb24gd2lsbCBiZSBlc3RhYmxpc2hlZCAqLwotICAgIHByaXZhdGUgU3RhdGUgbVNjYW5Nb2RlU3RhdGUgPSBuZXcgU2Nhbk1vZGVTdGF0ZSgpOwotICAgIC8qIENvbm5lY3RpbmcgdG8gYW4gYWNjZXNzIHBvaW50ICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtQ29ubmVjdE1vZGVTdGF0ZSA9IG5ldyBDb25uZWN0TW9kZVN0YXRlKCk7Ci0gICAgLyogQ29ubmVjdGVkIGF0IDgwMi4xMSAoTDIpIGxldmVsICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtTDJDb25uZWN0ZWRTdGF0ZSA9IG5ldyBMMkNvbm5lY3RlZFN0YXRlKCk7Ci0gICAgLyogZmV0Y2hpbmcgSVAgYWZ0ZXIgY29ubmVjdGlvbiB0byBhY2Nlc3MgcG9pbnQgKGFzc29jK2F1dGggY29tcGxldGUpICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtT2J0YWluaW5nSXBTdGF0ZSA9IG5ldyBPYnRhaW5pbmdJcFN0YXRlKCk7Ci0gICAgLyogV2FpdGluZyBmb3IgbGluayBxdWFsaXR5IHZlcmlmaWNhdGlvbiB0byBiZSBjb21wbGV0ZSAqLwotICAgIHByaXZhdGUgU3RhdGUgbVZlcmlmeWluZ0xpbmtTdGF0ZSA9IG5ldyBWZXJpZnlpbmdMaW5rU3RhdGUoKTsKLSAgICAvKiBXYWl0aW5nIGZvciBjYXB0aXZlIHBvcnRhbCBjaGVjayB0byBiZSBjb21wbGV0ZSAqLwotICAgIHByaXZhdGUgU3RhdGUgbUNhcHRpdmVQb3J0YWxDaGVja1N0YXRlID0gbmV3IENhcHRpdmVQb3J0YWxDaGVja1N0YXRlKCk7Ci0gICAgLyogQ29ubmVjdGVkIHdpdGggSVAgYWRkciAqLwotICAgIHByaXZhdGUgU3RhdGUgbUNvbm5lY3RlZFN0YXRlID0gbmV3IENvbm5lY3RlZFN0YXRlKCk7Ci0gICAgLyogZGlzY29ubmVjdCBpc3N1ZWQsIHdhaXRpbmcgZm9yIG5ldHdvcmsgZGlzY29ubmVjdCBjb25maXJtYXRpb24gKi8KLSAgICBwcml2YXRlIFN0YXRlIG1EaXNjb25uZWN0aW5nU3RhdGUgPSBuZXcgRGlzY29ubmVjdGluZ1N0YXRlKCk7Ci0gICAgLyogTmV0d29yayBpcyBub3QgY29ubmVjdGVkLCBzdXBwbGljYW50IGFzc29jK2F1dGggaXMgbm90IGNvbXBsZXRlICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtRGlzY29ubmVjdGVkU3RhdGUgPSBuZXcgRGlzY29ubmVjdGVkU3RhdGUoKTsKLSAgICAvKiBXYWl0aW5nIGZvciBXUFMgdG8gYmUgY29tcGxldGVkKi8KLSAgICBwcml2YXRlIFN0YXRlIG1XcHNSdW5uaW5nU3RhdGUgPSBuZXcgV3BzUnVubmluZ1N0YXRlKCk7Ci0KLSAgICAvKiBTb2Z0IGFwIGlzIHN0YXJ0aW5nIHVwICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtU29mdEFwU3RhcnRpbmdTdGF0ZSA9IG5ldyBTb2Z0QXBTdGFydGluZ1N0YXRlKCk7Ci0gICAgLyogU29mdCBhcCBpcyBydW5uaW5nICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtU29mdEFwU3RhcnRlZFN0YXRlID0gbmV3IFNvZnRBcFN0YXJ0ZWRTdGF0ZSgpOwotICAgIC8qIFNvZnQgYXAgaXMgcnVubmluZyBhbmQgd2UgYXJlIHdhaXRpbmcgZm9yIHRldGhlciBub3RpZmljYXRpb24gKi8KLSAgICBwcml2YXRlIFN0YXRlIG1UZXRoZXJpbmdTdGF0ZSA9IG5ldyBUZXRoZXJpbmdTdGF0ZSgpOwotICAgIC8qIFNvZnQgYXAgaXMgcnVubmluZyBhbmQgd2UgYXJlIHRldGhlcmVkIHRocm91Z2ggY29ubmVjdGl2aXR5IHNlcnZpY2UgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1UZXRoZXJlZFN0YXRlID0gbmV3IFRldGhlcmVkU3RhdGUoKTsKLSAgICAvKiBXYWl0aW5nIGZvciB1bnRldGhlciBjb25maXJtYXRpb24gYmVmb3JlIHN0b3BwaW5nIHNvZnQgQXAgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1VbnRldGhlcmluZ1N0YXRlID0gbmV3IFVudGV0aGVyaW5nU3RhdGUoKTsKLQotICAgIHByaXZhdGUgY2xhc3MgVGV0aGVyU3RhdGVDaGFuZ2UgewotICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBhdmFpbGFibGU7Ci0gICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IGFjdGl2ZTsKLSAgICAgICAgVGV0aGVyU3RhdGVDaGFuZ2UoQXJyYXlMaXN0PFN0cmluZz4gYXYsIEFycmF5TGlzdDxTdHJpbmc+IGFjKSB7Ci0gICAgICAgICAgICBhdmFpbGFibGUgPSBhdjsKLSAgICAgICAgICAgIGFjdGl2ZSA9IGFjOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBPbmUgb2YgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX1NUQVRFX0RJU0FCTEVEfSwKLSAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX1NUQVRFX0RJU0FCTElOR30sCi0gICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9TVEFURV9FTkFCTEVEfSwKLSAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX1NUQVRFX0VOQUJMSU5HfSwKLSAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX1NUQVRFX1VOS05PV059Ci0gICAgICoKLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIEF0b21pY0ludGVnZXIgbVdpZmlTdGF0ZSA9IG5ldyBBdG9taWNJbnRlZ2VyKFdJRklfU1RBVEVfRElTQUJMRUQpOwotCi0gICAgLyoqCi0gICAgICogT25lIG9mICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9BUF9TVEFURV9ESVNBQkxFRH0sCi0gICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9BUF9TVEFURV9ESVNBQkxJTkd9LAotICAgICAqICAgICAgICAge0BsaW5rIFdpZmlNYW5hZ2VyI1dJRklfQVBfU1RBVEVfRU5BQkxFRH0sCi0gICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9BUF9TVEFURV9FTkFCTElOR30sCi0gICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9BUF9TVEFURV9GQUlMRUR9Ci0gICAgICoKLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIEF0b21pY0ludGVnZXIgbVdpZmlBcFN0YXRlID0gbmV3IEF0b21pY0ludGVnZXIoV0lGSV9BUF9TVEFURV9ESVNBQkxFRCk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0NBTl9SRVFVRVNUID0gMDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1NUQVJUX1NDQU4gPQotICAgICAgICAiY29tLmFuZHJvaWQuc2VydmVyLldpZmlNYW5hZ2VyLmFjdGlvbi5TVEFSVF9TQ0FOIjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUxBWUVEX1NUT1BfQ09VTlRFUiA9ICJEZWxheWVkU3RvcENvdW50ZXIiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEUklWRVJfU1RPUF9SRVFVRVNUID0gMDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0RFTEFZRURfRFJJVkVSX1NUT1AgPQotICAgICAgICAiY29tLmFuZHJvaWQuc2VydmVyLldpZmlNYW5hZ2VyLmFjdGlvbi5ERUxBWUVEX0RSSVZFUl9TVE9QIjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fUkVGUkVTSF9CQVRDSEVEX1NDQU4gPQotICAgICAgICAgICAgImNvbS5hbmRyb2lkLnNlcnZlci5XaWZpTWFuYWdlci5hY3Rpb24uUkVGUkVTSF9CQVRDSEVEX1NDQU4iOwotICAgIC8qKgotICAgICAqIEtlZXAgdHJhY2sgb2Ygd2hldGhlciBXSUZJIGlzIHJ1bm5pbmcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc1J1bm5pbmcgPSBmYWxzZTsKLQotICAgIC8qKgotICAgICAqIEtlZXAgdHJhY2sgb2Ygd2hldGhlciB3ZSBsYXN0IHRvbGQgdGhlIGJhdHRlcnkgc3RhdHMgd2UgaGFkIHN0YXJ0ZWQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIG1SZXBvcnRlZFJ1bm5pbmcgPSBmYWxzZTsKLQotICAgIC8qKgotICAgICAqIE1vc3QgcmVjZW50bHkgc2V0IHNvdXJjZSBvZiBzdGFydGluZyBXSUZJLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgV29ya1NvdXJjZSBtUnVubmluZ1dpZmlVaWRzID0gbmV3IFdvcmtTb3VyY2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBsYXN0IHJlcG9ydGVkIFVJRHMgdGhhdCB3ZXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyBXSUZJLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgV29ya1NvdXJjZSBtTGFzdFJ1bm5pbmdXaWZpVWlkcyA9IG5ldyBXb3JrU291cmNlKCk7Ci0KLSAgICBwcml2YXRlIGZpbmFsIElCYXR0ZXJ5U3RhdHMgbUJhdHRlcnlTdGF0czsKLQotICAgIHByaXZhdGUgQmF0Y2hlZFNjYW5TZXR0aW5ncyBtQmF0Y2hlZFNjYW5TZXR0aW5ncyA9IG51bGw7Ci0KLSAgICAvKioKLSAgICAgKiBUcmFjayB0aGUgd29ya3NvdXJjZS9jb3N0IG9mIHRoZSBjdXJyZW50IHNldHRpbmdzIGFuZCB0cmFjayB3aGF0J3MgYmVlbiBub3RlZAotICAgICAqIHRvIHRoZSBiYXR0ZXJ5IHN0YXRzLCBzbyB3ZSBjYW4gbWFyayB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyB3aGVuIGNoYW5naW5nLgotICAgICAqLwotICAgIHByaXZhdGUgV29ya1NvdXJjZSBtQmF0Y2hlZFNjYW5Xb3JrU291cmNlID0gbnVsbDsKLSAgICBwcml2YXRlIGludCBtQmF0Y2hlZFNjYW5Dc3BoID0gMDsKLSAgICBwcml2YXRlIFdvcmtTb3VyY2UgbU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlID0gbnVsbDsKLSAgICBwcml2YXRlIGludCBtTm90ZWRCYXRjaGVkU2NhbkNzcGggPSAwOwotCi0KLSAgICBwdWJsaWMgV2lmaVN0YXRlTWFjaGluZShDb250ZXh0IGNvbnRleHQsIFN0cmluZyB3bGFuSW50ZXJmYWNlKSB7Ci0gICAgICAgIHN1cGVyKCJXaWZpU3RhdGVNYWNoaW5lIik7Ci0gICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgbUludGVyZmFjZU5hbWUgPSB3bGFuSW50ZXJmYWNlOwotCi0gICAgICAgIG1OZXR3b3JrSW5mbyA9IG5ldyBOZXR3b3JrSW5mbyhDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfV0lGSSwgMCwgTkVUV09SS1RZUEUsICIiKTsKLSAgICAgICAgbUJhdHRlcnlTdGF0cyA9IElCYXR0ZXJ5U3RhdHMuU3R1Yi5hc0ludGVyZmFjZShTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKAotICAgICAgICAgICAgICAgIEJhdHRlcnlTdGF0cy5TRVJWSUNFX05BTUUpKTsKLQotICAgICAgICBJQmluZGVyIGIgPSBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKENvbnRleHQuTkVUV09SS01BTkFHRU1FTlRfU0VSVklDRSk7Ci0gICAgICAgIG1Od1NlcnZpY2UgPSBJTmV0d29ya01hbmFnZW1lbnRTZXJ2aWNlLlN0dWIuYXNJbnRlcmZhY2UoYik7Ci0KLSAgICAgICAgbVAycFN1cHBvcnRlZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFzU3lzdGVtRmVhdHVyZSgKLSAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5GRUFUVVJFX1dJRklfRElSRUNUKTsKLQotICAgICAgICBtV2lmaU5hdGl2ZSA9IG5ldyBXaWZpTmF0aXZlKG1JbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgbVdpZmlDb25maWdTdG9yZSA9IG5ldyBXaWZpQ29uZmlnU3RvcmUoY29udGV4dCwgbVdpZmlOYXRpdmUpOwotICAgICAgICBtV2lmaU1vbml0b3IgPSBuZXcgV2lmaU1vbml0b3IodGhpcywgbVdpZmlOYXRpdmUpOwotICAgICAgICBtV2lmaUluZm8gPSBuZXcgV2lmaUluZm8oKTsKLSAgICAgICAgbVN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIgPSBuZXcgU3VwcGxpY2FudFN0YXRlVHJhY2tlcihjb250ZXh0LCB0aGlzLCBtV2lmaUNvbmZpZ1N0b3JlLAotICAgICAgICAgICAgICAgIGdldEhhbmRsZXIoKSk7Ci0gICAgICAgIG1MaW5rUHJvcGVydGllcyA9IG5ldyBMaW5rUHJvcGVydGllcygpOwotICAgICAgICBtTmV0bGlua0xpbmtQcm9wZXJ0aWVzID0gbmV3IExpbmtQcm9wZXJ0aWVzKCk7Ci0KLSAgICAgICAgbVdpZmlQMnBNYW5hZ2VyID0gKFdpZmlQMnBNYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lGSV9QMlBfU0VSVklDRSk7Ci0KLSAgICAgICAgbU5ldHdvcmtJbmZvLnNldElzQXZhaWxhYmxlKGZhbHNlKTsKLSAgICAgICAgbUxhc3RCc3NpZCA9IG51bGw7Ci0gICAgICAgIG1MYXN0TmV0d29ya0lkID0gV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEOwotICAgICAgICBtTGFzdFNpZ25hbExldmVsID0gLTE7Ci0KLSAgICAgICAgbUludGVyZmFjZU9ic2VydmVyID0gbmV3IEludGVyZmFjZU9ic2VydmVyKHRoaXMpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgbU53U2VydmljZS5yZWdpc3Rlck9ic2VydmVyKG1JbnRlcmZhY2VPYnNlcnZlcik7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBsb2dlKCJDb3VsZG4ndCByZWdpc3RlciBpbnRlcmZhY2Ugb2JzZXJ2ZXI6ICIgKyBlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUFsYXJtTWFuYWdlciA9IChBbGFybU1hbmFnZXIpbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFMQVJNX1NFUlZJQ0UpOwotICAgICAgICBJbnRlbnQgc2NhbkludGVudCA9IG5ldyBJbnRlbnQoQUNUSU9OX1NUQVJUX1NDQU4sIG51bGwpOwotICAgICAgICBtU2NhbkludGVudCA9IFBlbmRpbmdJbnRlbnQuZ2V0QnJvYWRjYXN0KG1Db250ZXh0LCBTQ0FOX1JFUVVFU1QsIHNjYW5JbnRlbnQsIDApOwotCi0gICAgICAgIEludGVudCBiYXRjaGVkSW50ZW50ID0gbmV3IEludGVudChBQ1RJT05fUkVGUkVTSF9CQVRDSEVEX1NDQU4sIG51bGwpOwotICAgICAgICBtQmF0Y2hlZFNjYW5JbnRlcnZhbEludGVudCA9IFBlbmRpbmdJbnRlbnQuZ2V0QnJvYWRjYXN0KG1Db250ZXh0LCAwLCBiYXRjaGVkSW50ZW50LCAwKTsKLQotICAgICAgICBtRGVmYXVsdEZyYW1ld29ya1NjYW5JbnRlcnZhbE1zID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKLSAgICAgICAgICAgICAgICBSLmludGVnZXIuY29uZmlnX3dpZmlfZnJhbWV3b3JrX3NjYW5faW50ZXJ2YWwpOwotCi0gICAgICAgIG1Ecml2ZXJTdG9wRGVsYXlNcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldEludGVnZXIoCi0gICAgICAgICAgICAgICAgUi5pbnRlZ2VyLmNvbmZpZ193aWZpX2RyaXZlcl9zdG9wX2RlbGF5KTsKLQotICAgICAgICBtQmFja2dyb3VuZFNjYW5TdXBwb3J0ZWQgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRCb29sZWFuKAotICAgICAgICAgICAgICAgIFIuYm9vbC5jb25maWdfd2lmaV9iYWNrZ3JvdW5kX3NjYW5fc3VwcG9ydCk7Ci0KLSAgICAgICAgbVByaW1hcnlEZXZpY2VUeXBlID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgIFIuc3RyaW5nLmNvbmZpZ193aWZpX3AycF9kZXZpY2VfdHlwZSk7Ci0KLSAgICAgICAgbVVzZXJXYW50c1N1c3BlbmRPcHQuc2V0KFNldHRpbmdzLkdsb2JhbC5nZXRJbnQobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1NVU1BFTkRfT1BUSU1JWkFUSU9OU19FTkFCTEVELCAxKSA9PSAxKTsKLQotICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKAotICAgICAgICAgICAgbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gYXZhaWxhYmxlID0gaW50ZW50LmdldFN0cmluZ0FycmF5TGlzdEV4dHJhKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpdml0eU1hbmFnZXIuRVhUUkFfQVZBSUxBQkxFX1RFVEhFUik7Ci0gICAgICAgICAgICAgICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IGFjdGl2ZSA9IGludGVudC5nZXRTdHJpbmdBcnJheUxpc3RFeHRyYSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aXZpdHlNYW5hZ2VyLkVYVFJBX0FDVElWRV9URVRIRVIpOwotICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfVEVUSEVSX1NUQVRFX0NIQU5HRSwgbmV3IFRldGhlclN0YXRlQ2hhbmdlKGF2YWlsYWJsZSwgYWN0aXZlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSxuZXcgSW50ZW50RmlsdGVyKENvbm5lY3Rpdml0eU1hbmFnZXIuQUNUSU9OX1RFVEhFUl9TVEFURV9DSEFOR0VEKSk7Ci0KLSAgICAgICAgbUNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcigKLSAgICAgICAgICAgICAgICBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBXb3JrU291cmNlIHdvcmtTb3VyY2UgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTY2FuKFVOS05PV05fU0NBTl9TT1VSQ0UsIHdvcmtTb3VyY2UpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBuZXcgSW50ZW50RmlsdGVyKEFDVElPTl9TVEFSVF9TQ0FOKSk7Ci0KLSAgICAgICAgSW50ZW50RmlsdGVyIGZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKTsKLSAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1NDUkVFTl9PTik7Ci0gICAgICAgIGZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9TQ1JFRU5fT0ZGKTsKLSAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihBQ1RJT05fUkVGUkVTSF9CQVRDSEVEX1NDQU4pOwotICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKAotICAgICAgICAgICAgICAgIG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhY3Rpb24gPSBpbnRlbnQuZ2V0QWN0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uZXF1YWxzKEludGVudC5BQ1RJT05fU0NSRUVOX09OKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNjcmVlblN0YXRlQ2hhbmdlZCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhJbnRlbnQuQUNUSU9OX1NDUkVFTl9PRkYpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2NyZWVuU3RhdGVDaGFuZ2VkKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhBQ1RJT05fUkVGUkVTSF9CQVRDSEVEX1NDQU4pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnROZXh0QmF0Y2hlZFNjYW5Bc3luYygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwgZmlsdGVyKTsKLQotICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKAotICAgICAgICAgICAgICAgIG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ZXIgPSBpbnRlbnQuZ2V0SW50RXh0cmEoREVMQVlFRF9TVE9QX0NPVU5URVIsIDApOwotICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfREVMQVlFRF9TVE9QX0RSSVZFUiwgY291bnRlciwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIG5ldyBJbnRlbnRGaWx0ZXIoQUNUSU9OX0RFTEFZRURfRFJJVkVSX1NUT1ApKTsKLQotICAgICAgICBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKS5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihTZXR0aW5ncy5HbG9iYWwuZ2V0VXJpRm9yKAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1NVU1BFTkRfT1BUSU1JWkFUSU9OU19FTkFCTEVEKSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgbmV3IENvbnRlbnRPYnNlcnZlcihnZXRIYW5kbGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlKGJvb2xlYW4gc2VsZkNoYW5nZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXJXYW50c1N1c3BlbmRPcHQuc2V0KFNldHRpbmdzLkdsb2JhbC5nZXRJbnQobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1NVU1BFTkRfT1BUSU1JWkFUSU9OU19FTkFCTEVELCAxKSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIoCi0gICAgICAgICAgICAgICAgbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX0JPT1RfQ09NUExFVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX0JPT1RfQ09NUExFVEVEKSk7Ci0KLSAgICAgICAgbVNjYW5SZXN1bHRDYWNoZSA9IG5ldyBMcnVDYWNoZTxTdHJpbmcsIFNjYW5SZXN1bHQ+KFNDQU5fUkVTVUxUX0NBQ0hFX1NJWkUpOwotCi0gICAgICAgIFBvd2VyTWFuYWdlciBwb3dlck1hbmFnZXIgPSAoUG93ZXJNYW5hZ2VyKW1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5QT1dFUl9TRVJWSUNFKTsKLSAgICAgICAgbVdha2VMb2NrID0gcG93ZXJNYW5hZ2VyLm5ld1dha2VMb2NrKFBvd2VyTWFuYWdlci5QQVJUSUFMX1dBS0VfTE9DSywgZ2V0TmFtZSgpKTsKLQotICAgICAgICBtU3VzcGVuZFdha2VMb2NrID0gcG93ZXJNYW5hZ2VyLm5ld1dha2VMb2NrKFBvd2VyTWFuYWdlci5QQVJUSUFMX1dBS0VfTE9DSywgIldpZmlTdXNwZW5kIik7Ci0gICAgICAgIG1TdXNwZW5kV2FrZUxvY2suc2V0UmVmZXJlbmNlQ291bnRlZChmYWxzZSk7Ci0KLSAgICAgICAgYWRkU3RhdGUobURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtSW5pdGlhbFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1TdXBwbGljYW50U3RhcnRpbmdTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtU3VwcGxpY2FudFN0YXJ0ZWRTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RhdGUobURyaXZlclN0YXJ0aW5nU3RhdGUsIG1TdXBwbGljYW50U3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtRHJpdmVyU3RhcnRlZFN0YXRlLCBtU3VwcGxpY2FudFN0YXJ0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1TY2FuTW9kZVN0YXRlLCBtRHJpdmVyU3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobUNvbm5lY3RNb2RlU3RhdGUsIG1Ecml2ZXJTdGFydGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobUwyQ29ubmVjdGVkU3RhdGUsIG1Db25uZWN0TW9kZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtT2J0YWluaW5nSXBTdGF0ZSwgbUwyQ29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1WZXJpZnlpbmdMaW5rU3RhdGUsIG1MMkNvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtQ2FwdGl2ZVBvcnRhbENoZWNrU3RhdGUsIG1MMkNvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtQ29ubmVjdGVkU3RhdGUsIG1MMkNvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1EaXNjb25uZWN0aW5nU3RhdGUsIG1Db25uZWN0TW9kZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1EaXNjb25uZWN0ZWRTdGF0ZSwgbUNvbm5lY3RNb2RlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobVdwc1J1bm5pbmdTdGF0ZSwgbUNvbm5lY3RNb2RlU3RhdGUpOwotICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1XYWl0Rm9yUDJwRGlzYWJsZVN0YXRlLCBtU3VwcGxpY2FudFN0YXJ0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RhdGUobURyaXZlclN0b3BwaW5nU3RhdGUsIG1TdXBwbGljYW50U3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtRHJpdmVyU3RvcHBlZFN0YXRlLCBtU3VwcGxpY2FudFN0YXJ0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtU3VwcGxpY2FudFN0b3BwaW5nU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobVNvZnRBcFN0YXJ0aW5nU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobVNvZnRBcFN0YXJ0ZWRTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RhdGUobVRldGhlcmluZ1N0YXRlLCBtU29mdEFwU3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtVGV0aGVyZWRTdGF0ZSwgbVNvZnRBcFN0YXJ0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RhdGUobVVudGV0aGVyaW5nU3RhdGUsIG1Tb2Z0QXBTdGFydGVkU3RhdGUpOwotCi0gICAgICAgIHNldEluaXRpYWxTdGF0ZShtSW5pdGlhbFN0YXRlKTsKLQotICAgICAgICBzZXRMb2dSZWNTaXplKDIwMDApOwotICAgICAgICBzZXRMb2dPbmx5VHJhbnNpdGlvbnMoZmFsc2UpOwotICAgICAgICBpZiAoREJHKSBzZXREYmcodHJ1ZSk7Ci0KLSAgICAgICAgLy9zdGFydCB0aGUgc3RhdGUgbWFjaGluZQotICAgICAgICBzdGFydCgpOwotCi0gICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLldJRklfU0NBTl9BVkFJTEFCTEUpOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1NDQU5fQVZBSUxBQkxFLCBXSUZJX1NUQVRFX0RJU0FCTEVEKTsKLSAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICB9Ci0KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICogTWV0aG9kcyBleHBvc2VkIGZvciBwdWJsaWMgdXNlCi0gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gICAgcHVibGljIE1lc3NlbmdlciBnZXRNZXNzZW5nZXIoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVzc2VuZ2VyKGdldEhhbmRsZXIoKSk7Ci0gICAgfQotICAgIC8qKgotICAgICAqIFRPRE86IGRvYwotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHN5bmNQaW5nU3VwcGxpY2FudChBc3luY0NoYW5uZWwgY2hhbm5lbCkgewotICAgICAgICBNZXNzYWdlIHJlc3VsdE1zZyA9IGNoYW5uZWwuc2VuZE1lc3NhZ2VTeW5jaHJvbm91c2x5KENNRF9QSU5HX1NVUFBMSUNBTlQpOwotICAgICAgICBib29sZWFuIHJlc3VsdCA9IChyZXN1bHRNc2cuYXJnMSAhPSBGQUlMVVJFKTsKLSAgICAgICAgcmVzdWx0TXNnLnJlY3ljbGUoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWF0ZSBhIHdpZmkgc2Nhbi4gIElmIHdvcmtTb3VyY2UgaXMgbm90IG51bGwsIGJsYW1lIGlzIGdpdmVuIHRvIGl0LAotICAgICAqIG90aGVyd2lzZSBibGFtZSBpcyBnaXZlbiB0byBjYWxsaW5nVWlkLgotICAgICAqCi0gICAgICogQHBhcmFtIGNhbGxpbmdVaWQgVGhlIHVpZCBpbml0aWF0aW5nIHRoZSB3aWZpIHNjYW4uICBCbGFtZSB3aWxsIGJlIGdpdmVuCi0gICAgICogICAgICAgICAgICAgICAgICAgaGVyZSB1bmxlc3Mgd29ya1NvdXJjZSBpcyBzcGVjaWZpZWQuCi0gICAgICogQHBhcmFtIHdvcmtTb3VyY2UgSWYgbm90IG51bGwsIGJsYW1lIGlzIGdpdmVuIHRvIHdvcmtTb3VyY2UuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRTY2FuKGludCBjYWxsaW5nVWlkLCBXb3JrU291cmNlIHdvcmtTb3VyY2UpIHsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX1NDQU4sIGNhbGxpbmdVaWQsIDAsIHdvcmtTb3VyY2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIHN0YXJ0IG9yIHN0b3AgYmF0Y2hlZCBzY2FubmluZyB1c2luZyB0aGUgZ2l2ZW4gc2V0dGluZ3MKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFUQ0hFRF9TRVRUSU5HID0gImJhdGNoZWRfc2V0dGluZ3MiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVRDSEVEX1dPUktTT1VSQ0UgPSAiYmF0Y2hlZF93b3Jrc291cmNlIjsKLSAgICBwdWJsaWMgdm9pZCBzZXRCYXRjaGVkU2NhblNldHRpbmdzKEJhdGNoZWRTY2FuU2V0dGluZ3Mgc2V0dGluZ3MsIGludCBjYWxsaW5nVWlkLCBpbnQgY3NwaCwKLSAgICAgICAgICAgIFdvcmtTb3VyY2Ugd29ya1NvdXJjZSkgewotICAgICAgICBCdW5kbGUgYnVuZGxlID0gbmV3IEJ1bmRsZSgpOwotICAgICAgICBidW5kbGUucHV0UGFyY2VsYWJsZShCQVRDSEVEX1NFVFRJTkcsIHNldHRpbmdzKTsKLSAgICAgICAgYnVuZGxlLnB1dFBhcmNlbGFibGUoQkFUQ0hFRF9XT1JLU09VUkNFLCB3b3JrU291cmNlKTsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NFVF9CQVRDSEVEX1NDQU4sIGNhbGxpbmdVaWQsIGNzcGgsIGJ1bmRsZSk7Ci0gICAgfQotCi0gICAgcHVibGljIExpc3Q8QmF0Y2hlZFNjYW5SZXN1bHQ+IHN5bmNHZXRCYXRjaGVkU2NhblJlc3VsdHNMaXN0KCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1CYXRjaGVkU2NhblJlc3VsdHMpIHsKLSAgICAgICAgICAgIExpc3Q8QmF0Y2hlZFNjYW5SZXN1bHQ+IGJhdGNoZWRTY2FuTGlzdCA9Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8QmF0Y2hlZFNjYW5SZXN1bHQ+KG1CYXRjaGVkU2NhblJlc3VsdHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvcihCYXRjaGVkU2NhblJlc3VsdCByZXN1bHQ6IG1CYXRjaGVkU2NhblJlc3VsdHMpIHsKLSAgICAgICAgICAgICAgICBiYXRjaGVkU2Nhbkxpc3QuYWRkKG5ldyBCYXRjaGVkU2NhblJlc3VsdChyZXN1bHQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBiYXRjaGVkU2Nhbkxpc3Q7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXF1ZXN0QmF0Y2hlZFNjYW5Qb2xsKCkgewotICAgICAgICBzZW5kTWVzc2FnZShDTURfUE9MTF9CQVRDSEVEX1NDQU4pOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzdGFydEJhdGNoZWRTY2FuKCkgewotICAgICAgICBpZiAobUJhdGNoZWRTY2FuU2V0dGluZ3MgPT0gbnVsbCkgcmV0dXJuOwotCi0gICAgICAgIGlmIChtRGhjcEFjdGl2ZSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nKCJub3Qgc3RhcnRpbmcgQmF0Y2hlZCBTY2FucyBkdWUgdG8gREhDUCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZmlyc3QgZ3JhYiBhbnkgZXhpc3RpbmcgZGF0YQotICAgICAgICByZXRyaWV2ZUJhdGNoZWRTY2FuRGF0YSgpOwotCi0gICAgICAgIG1BbGFybU1hbmFnZXIuY2FuY2VsKG1CYXRjaGVkU2NhbkludGVydmFsSW50ZW50KTsKLQotICAgICAgICBTdHJpbmcgc2NhbnNFeHBlY3RlZCA9IG1XaWZpTmF0aXZlLnNldEJhdGNoZWRTY2FuU2V0dGluZ3MobUJhdGNoZWRTY2FuU2V0dGluZ3MpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgbUV4cGVjdGVkQmF0Y2hlZFNjYW5zID0gSW50ZWdlci5wYXJzZUludChzY2Fuc0V4cGVjdGVkKTsKLSAgICAgICAgICAgIHNldE5leHRCYXRjaGVkQWxhcm0obUV4cGVjdGVkQmF0Y2hlZFNjYW5zKTsKLSAgICAgICAgICAgIGlmIChtRXhwZWN0ZWRCYXRjaGVkU2NhbnMgPiAwKSBub3RlQmF0Y2hlZFNjYW5TdGFydCgpOwotICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgc3RvcEJhdGNoZWRTY2FuKCk7Ci0gICAgICAgICAgICBsb2dlKCJFeGNlcHRpb24gcGFyc2luZyBXaWZpTmF0aXZlLnNldEJhdGNoZWRTY2FuU2V0dGluZ3MgcmVzcG9uc2UgIiArIGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gY2FsbGVkIGZyb20gQnJvYWRjYXN0TGlzdGVuZXIKLSAgICBwcml2YXRlIHZvaWQgc3RhcnROZXh0QmF0Y2hlZFNjYW5Bc3luYygpIHsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX05FWFRfQkFUQ0hFRF9TQ0FOKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc3RhcnROZXh0QmF0Y2hlZFNjYW4oKSB7Ci0gICAgICAgIC8vIGZpcnN0IGdyYWIgYW55IGV4aXN0aW5nIGRhdGEKLSAgICAgICAgcmV0cmlldmVCYXRjaGVkU2NhbkRhdGEoKTsKLQotICAgICAgICBzZXROZXh0QmF0Y2hlZEFsYXJtKG1FeHBlY3RlZEJhdGNoZWRTY2Fucyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUJhdGNoZWRTY2FuUG9sbFJlcXVlc3QoKSB7Ci0gICAgICAgIGlmIChEQkcpIHsKLSAgICAgICAgICAgIGxvZygiaGFuZGxlQmF0Y2hlZFNjYW5Qb2xsIFJlcXVlc3QgLSBtQmF0Y2hlZFNjYW5NaW5Qb2xsVGltZT0iICsKLSAgICAgICAgICAgICAgICAgICAgbUJhdGNoZWRTY2FuTWluUG9sbFRpbWUgKyAiICwgbUJhdGNoZWRTY2FuU2V0dGluZ3M9IiArCi0gICAgICAgICAgICAgICAgICAgIG1CYXRjaGVkU2NhblNldHRpbmdzKTsKLSAgICAgICAgfQotICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBhcHByb3ByaWF0ZSBQb2xsVGltZSB0aGF0J3MgYmVjYXVzZSB3ZSBlaXRoZXIgYXJlbid0Ci0gICAgICAgIC8vIGJhdGNoaW5nIG9yIHdlJ3ZlIGFscmVhZHkgc2V0IGEgdGltZSBmb3IgYSBwb2xsIHJlcXVlc3QKLSAgICAgICAgaWYgKG1CYXRjaGVkU2Nhbk1pblBvbGxUaW1lID09IDApIHJldHVybjsKLSAgICAgICAgaWYgKG1CYXRjaGVkU2NhblNldHRpbmdzID09IG51bGwpIHJldHVybjsKLQotICAgICAgICBsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCi0gICAgICAgIGlmIChub3cgPiBtQmF0Y2hlZFNjYW5NaW5Qb2xsVGltZSkgewotICAgICAgICAgICAgLy8gZG8gdGhlIHBvbGwgYW5kIHJlc2V0IG91ciB0aW1lcnMKLSAgICAgICAgICAgIHN0YXJ0TmV4dEJhdGNoZWRTY2FuKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtQWxhcm1NYW5hZ2VyLnNldEV4YWN0KEFsYXJtTWFuYWdlci5SVENfV0FLRVVQLCBtQmF0Y2hlZFNjYW5NaW5Qb2xsVGltZSwKLSAgICAgICAgICAgICAgICAgICAgbUJhdGNoZWRTY2FuSW50ZXJ2YWxJbnRlbnQpOwotICAgICAgICAgICAgbUJhdGNoZWRTY2FuTWluUG9sbFRpbWUgPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gcmV0dXJuIHRydWUgaWYgbmV3L2RpZmZlcmVudAotICAgIHByaXZhdGUgYm9vbGVhbiByZWNvcmRCYXRjaGVkU2NhblNldHRpbmdzKGludCByZXNwb25zaWJsZVVpZCwgaW50IGNzcGgsIEJ1bmRsZSBidW5kbGUpIHsKLSAgICAgICAgQmF0Y2hlZFNjYW5TZXR0aW5ncyBzZXR0aW5ncyA9IGJ1bmRsZS5nZXRQYXJjZWxhYmxlKEJBVENIRURfU0VUVElORyk7Ci0gICAgICAgIFdvcmtTb3VyY2UgcmVzcG9uc2libGVXb3JrU291cmNlID0gYnVuZGxlLmdldFBhcmNlbGFibGUoQkFUQ0hFRF9XT1JLU09VUkNFKTsKLQotICAgICAgICBpZiAoREJHKSB7Ci0gICAgICAgICAgICBsb2coInNldCBiYXRjaGVkIHNjYW4gdG8gIiArIHNldHRpbmdzICsgIiBmb3IgdWlkPSIgKyByZXNwb25zaWJsZVVpZCArCi0gICAgICAgICAgICAgICAgICAgICIsIHdvcmtzb3VyY2U9IiArIHJlc3BvbnNpYmxlV29ya1NvdXJjZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNldHRpbmdzICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChzZXR0aW5ncy5lcXVhbHMobUJhdGNoZWRTY2FuU2V0dGluZ3MpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobUJhdGNoZWRTY2FuU2V0dGluZ3MgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1CYXRjaGVkU2NhblNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgICAgIGlmIChyZXNwb25zaWJsZVdvcmtTb3VyY2UgPT0gbnVsbCkgcmVzcG9uc2libGVXb3JrU291cmNlID0gbmV3IFdvcmtTb3VyY2UocmVzcG9uc2libGVVaWQpOwotICAgICAgICBtQmF0Y2hlZFNjYW5Xb3JrU291cmNlID0gcmVzcG9uc2libGVXb3JrU291cmNlOwotICAgICAgICBtQmF0Y2hlZFNjYW5Dc3BoID0gY3NwaDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHN0b3BCYXRjaGVkU2NhbigpIHsKLSAgICAgICAgbUFsYXJtTWFuYWdlci5jYW5jZWwobUJhdGNoZWRTY2FuSW50ZXJ2YWxJbnRlbnQpOwotICAgICAgICByZXRyaWV2ZUJhdGNoZWRTY2FuRGF0YSgpOwotICAgICAgICBtV2lmaU5hdGl2ZS5zZXRCYXRjaGVkU2NhblNldHRpbmdzKG51bGwpOwotICAgICAgICBub3RlQmF0Y2hlZFNjYW5TdG9wKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldE5leHRCYXRjaGVkQWxhcm0oaW50IHNjYW5zRXhwZWN0ZWQpIHsKLQotICAgICAgICBpZiAobUJhdGNoZWRTY2FuU2V0dGluZ3MgPT0gbnVsbCB8fCBzY2Fuc0V4cGVjdGVkIDwgMSkgcmV0dXJuOwotCi0gICAgICAgIG1CYXRjaGVkU2Nhbk1pblBvbGxUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKwotICAgICAgICAgICAgICAgIG1CYXRjaGVkU2NhblNldHRpbmdzLnNjYW5JbnRlcnZhbFNlYyAqIDEwMDA7Ci0KLSAgICAgICAgaWYgKG1CYXRjaGVkU2NhblNldHRpbmdzLm1heFNjYW5zUGVyQmF0Y2ggPCBzY2Fuc0V4cGVjdGVkKSB7Ci0gICAgICAgICAgICBzY2Fuc0V4cGVjdGVkID0gbUJhdGNoZWRTY2FuU2V0dGluZ3MubWF4U2NhbnNQZXJCYXRjaDsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzZWNUb0Z1bGwgPSBtQmF0Y2hlZFNjYW5TZXR0aW5ncy5zY2FuSW50ZXJ2YWxTZWM7Ci0gICAgICAgIHNlY1RvRnVsbCAqPSBzY2Fuc0V4cGVjdGVkOwotCi0gICAgICAgIGludCBkZWJ1Z1BlcmlvZCA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0SW50KCJ3aWZpLmJhdGNoZWRTY2FuLnBvbGxQZXJpb2QiLCAwKTsKLSAgICAgICAgaWYgKGRlYnVnUGVyaW9kID4gMCkgc2VjVG9GdWxsID0gZGVidWdQZXJpb2Q7Ci0KLSAgICAgICAgLy8gc2V0IHRoZSBhbGFybSB0byBkbyB0aGUgbmV4dCBwb2xsLiAgV2Ugc2V0IGl0IGEgbGl0dGxlIHNob3J0IGFzIHdlJ2QgcmF0aGVyCi0gICAgICAgIC8vIHdha2UgdXAgd2Vhcmx5IHRoYW4gbWlzcyBhIHNjYW4gZHVlIHRvIGJ1ZmZlciBvdmVyZmxvdwotICAgICAgICBtQWxhcm1NYW5hZ2VyLnNldEV4YWN0KEFsYXJtTWFuYWdlci5SVENfV0FLRVVQLCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKQotICAgICAgICAgICAgICAgICsgKChzZWNUb0Z1bGwgLSAobUJhdGNoZWRTY2FuU2V0dGluZ3Muc2NhbkludGVydmFsU2VjIC8gMikpICogMTAwMCksCi0gICAgICAgICAgICAgICAgbUJhdGNoZWRTY2FuSW50ZXJ2YWxJbnRlbnQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0YXJ0IHJlYWRpbmcgbmV3IHNjYW4gZGF0YQotICAgICAqIERhdGEgY29tZXMgaW4gYXM6Ci0gICAgICogInNjYW5jb3VudD01XG4iCi0gICAgICogIm5leHRjb3VudD01XG4iCi0gICAgICogICAiYXBjb3VudD0zXG4iCi0gICAgICogICAidHJ1bmNcbiIgKG9wdGlvbmFsKQotICAgICAqICAgICAiYnNzaWQ9Li4uXG4iCi0gICAgICogICAgICJzc2lkPS4uLlxuIgotICAgICAqICAgICAiZnJlcT0uLi5cbiIgKGluIE1oeikKLSAgICAgKiAgICAgImxldmVsPS4uLlxuIgotICAgICAqICAgICAiZGlzdD0uLi5cbiIgKGluIGNtKQotICAgICAqICAgICAiZGlzdHNkPS4uLlxuIiAoc3RhbmRhcmQgZGV2aWF0aW9uLCBpbiBjbSkKLSAgICAgKiAgICAgIj09PT0iCi0gICAgICogICAgICJic3NpZD0uLi5cbiIKLSAgICAgKiAgICAgZXRjCi0gICAgICogICAgICI9PT09IgotICAgICAqICAgICAiYnNzaWQ9Li4uXG4iCi0gICAgICogICAgIGV0YwotICAgICAqICAgICAiJSUlJSIKLSAgICAgKiAgICJhcGNvdW50PTJcbiIKLSAgICAgKiAgICAgImJzc2lkPS4uLlxuIgotICAgICAqICAgICBldGMKLSAgICAgKiAgICAgIiUlJSUKLSAgICAgKiAgIGV0YwotICAgICAqICAgIi0tLS0iCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgYm9vbGVhbiBERUJVR19QQVJTRSA9IGZhbHNlOwotICAgIHByaXZhdGUgdm9pZCByZXRyaWV2ZUJhdGNoZWRTY2FuRGF0YSgpIHsKLSAgICAgICAgU3RyaW5nIHJhd0RhdGEgPSBtV2lmaU5hdGl2ZS5nZXRCYXRjaGVkU2NhblJlc3VsdHMoKTsKLSAgICAgICAgaWYgKERFQlVHX1BBUlNFKSBsb2coInJhd0RhdGEgPSAiICsgcmF3RGF0YSk7Ci0gICAgICAgIG1CYXRjaGVkU2Nhbk1pblBvbGxUaW1lID0gMDsKLSAgICAgICAgaWYgKHJhd0RhdGEgPT0gbnVsbCB8fCByYXdEYXRhLmVxdWFsc0lnbm9yZUNhc2UoIk9LIikpIHsKLSAgICAgICAgICAgIGxvZ2UoIlVuZXhwZWN0ZWQgQmF0Y2hlZFNjYW5SZXN1bHRzIDoiICsgcmF3RGF0YSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgc2NhbkNvdW50ID0gMDsKLSAgICAgICAgZmluYWwgU3RyaW5nIEVORF9PRl9CQVRDSEVTID0gIi0tLS0iOwotICAgICAgICBmaW5hbCBTdHJpbmcgU0NBTkNPVU5UID0gInNjYW5jb3VudD0iOwotICAgICAgICBmaW5hbCBTdHJpbmcgVFJVTkNBVEVEID0gInRydW5jIjsKLSAgICAgICAgZmluYWwgU3RyaW5nIEFHRSA9ICJhZ2U9IjsKLSAgICAgICAgZmluYWwgU3RyaW5nIERJU1QgPSAiZGlzdD0iOwotICAgICAgICBmaW5hbCBTdHJpbmcgRElTVFNEID0gImRpc3RTZD0iOwotCi0gICAgICAgIFN0cmluZyBzcGxpdERhdGFbXSA9IHJhd0RhdGEuc3BsaXQoIlxuIik7Ci0gICAgICAgIGludCBuID0gMDsKLSAgICAgICAgaWYgKHNwbGl0RGF0YVtuXS5zdGFydHNXaXRoKFNDQU5DT1VOVCkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc2NhbkNvdW50ID0gSW50ZWdlci5wYXJzZUludChzcGxpdERhdGFbbisrXS5zdWJzdHJpbmcoU0NBTkNPVU5ULmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGxvZ2UoInNjYW5jb3VudCBwYXJzZUludCBFeGNlcHRpb24gZnJvbSAiICsgc3BsaXREYXRhW25dKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGxvZygic2NhbmNvdW50IG5vdCBmb3VuZCIpOwotICAgICAgICBpZiAoc2NhbkNvdW50ID09IDApIHsKLSAgICAgICAgICAgIGxvZ2UoInNjYW5Db3VudD09MCAtIGFib3J0aW5nIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpTWFuYWdlci5CQVRDSEVEX1NDQU5fUkVTVUxUU19BVkFJTEFCTEVfQUNUSU9OKTsKLSAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChtQmF0Y2hlZFNjYW5SZXN1bHRzKSB7Ci0gICAgICAgICAgICBtQmF0Y2hlZFNjYW5SZXN1bHRzLmNsZWFyKCk7Ci0gICAgICAgICAgICBCYXRjaGVkU2NhblJlc3VsdCBiYXRjaGVkU2NhblJlc3VsdCA9IG5ldyBCYXRjaGVkU2NhblJlc3VsdCgpOwotCi0gICAgICAgICAgICBTdHJpbmcgYnNzaWQgPSBudWxsOwotICAgICAgICAgICAgV2lmaVNzaWQgd2lmaVNzaWQgPSBudWxsOwotICAgICAgICAgICAgaW50IGxldmVsID0gMDsKLSAgICAgICAgICAgIGludCBmcmVxID0gMDsKLSAgICAgICAgICAgIGludCBkaXN0LCBkaXN0U2Q7Ci0gICAgICAgICAgICBsb25nIHRzZiA9IDA7Ci0gICAgICAgICAgICBkaXN0ID0gZGlzdFNkID0gU2NhblJlc3VsdC5VTlNQRUNJRklFRDsKLSAgICAgICAgICAgIGZpbmFsIGxvbmcgbm93ID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgYnNzaWRTdHJMZW4gPSBCU1NJRF9TVFIubGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG4gPCBzcGxpdERhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19QQVJTRSkgbG9nZCgicGFyc2luZyAiICsgc3BsaXREYXRhW25dKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGl0RGF0YVtuXS5lcXVhbHMoRU5EX09GX0JBVENIRVMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobisxICE9IHNwbGl0RGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJkaWRuJ3QgY29uc3VtZSAiICsgKHNwbGl0RGF0YS5sZW5ndGgtbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1CYXRjaGVkU2NhblJlc3VsdHMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dkKCJyZXRyaWV2ZUJhdGNoZWRTY2FuUmVzdWx0cyBYIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChzcGxpdERhdGFbbl0uZXF1YWxzKEVORF9TVFIpKSB8fCBzcGxpdERhdGFbbl0uZXF1YWxzKERFTElNSVRFUl9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnNzaWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoZWRTY2FuUmVzdWx0LnNjYW5SZXN1bHRzLmFkZChuZXcgU2NhblJlc3VsdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZmlTc2lkLCBic3NpZCwgIiIsIGxldmVsLCBmcmVxLCB0c2YsIGRpc3QsIGRpc3RTZCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZmlTc2lkID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBic3NpZCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXEgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IGRpc3RTZCA9IFNjYW5SZXN1bHQuVU5TUEVDSUZJRUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXREYXRhW25dLmVxdWFscyhFTkRfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXRjaGVkU2NhblJlc3VsdC5zY2FuUmVzdWx0cy5zaXplKCkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQmF0Y2hlZFNjYW5SZXN1bHRzLmFkZChiYXRjaGVkU2NhblJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoZWRTY2FuUmVzdWx0ID0gbmV3IEJhdGNoZWRTY2FuUmVzdWx0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZCgiRm91bmQgZW1wdHkgYmF0Y2giKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BsaXREYXRhW25dLmVxdWFscyhUUlVOQ0FURUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiYXRjaGVkU2NhblJlc3VsdC50cnVuY2F0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwbGl0RGF0YVtuXS5zdGFydHNXaXRoKEJTU0lEX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJzc2lkID0gbmV3IFN0cmluZyhzcGxpdERhdGFbbl0uZ2V0Qnl0ZXMoKSwgYnNzaWRTdHJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0RGF0YVtuXS5sZW5ndGgoKSAtIGJzc2lkU3RyTGVuKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdERhdGFbbl0uc3RhcnRzV2l0aChGUkVRX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcSA9IEludGVnZXIucGFyc2VJbnQoc3BsaXREYXRhW25dLnN1YnN0cmluZyhGUkVRX1NUUi5sZW5ndGgoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJbnZhbGlkIGZyZXFlbmN5OiAiICsgc3BsaXREYXRhW25dKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVxID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdERhdGFbbl0uc3RhcnRzV2l0aChBR0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZiA9IG5vdyAtIExvbmcucGFyc2VMb25nKHNwbGl0RGF0YVtuXS5zdWJzdHJpbmcoQUdFLmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNmICo9IDEwMDA7IC8vIGNvbnZlcnQgbVMgLT4gdVMKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSW52YWxpZCB0aW1lc3RhbXA6ICIgKyBzcGxpdERhdGFbbl0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BsaXREYXRhW25dLnN0YXJ0c1dpdGgoU1NJRF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aWZpU3NpZCA9IFdpZmlTc2lkLmNyZWF0ZUZyb21Bc2NpaUVuY29kZWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0RGF0YVtuXS5zdWJzdHJpbmcoU1NJRF9TVFIubGVuZ3RoKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdERhdGFbbl0uc3RhcnRzV2l0aChMRVZFTF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gSW50ZWdlci5wYXJzZUludChzcGxpdERhdGFbbl0uc3Vic3RyaW5nKExFVkVMX1NUUi5sZW5ndGgoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbCA+IDApIGxldmVsIC09IDI1NjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSW52YWxpZCBsZXZlbDogIiArIHNwbGl0RGF0YVtuXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwbGl0RGF0YVtuXS5zdGFydHNXaXRoKERJU1QpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSBJbnRlZ2VyLnBhcnNlSW50KHNwbGl0RGF0YVtuXS5zdWJzdHJpbmcoRElTVC5sZW5ndGgoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJbnZhbGlkIGRpc3RhbmNlOiAiICsgc3BsaXREYXRhW25dKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gU2NhblJlc3VsdC5VTlNQRUNJRklFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdERhdGFbbl0uc3RhcnRzV2l0aChESVNUU0QpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RTZCA9IEludGVnZXIucGFyc2VJbnQoc3BsaXREYXRhW25dLnN1YnN0cmluZyhESVNUU0QubGVuZ3RoKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSW52YWxpZCBkaXN0YW5jZVNkOiAiICsgc3BsaXREYXRhW25dKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0U2QgPSBTY2FuUmVzdWx0LlVOU1BFQ0lGSUVEOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5hYmxlIHRvIHBhcnNlIGJhdGNoZWQgc2NhbiByZXN1bHQgbGluZTogIiArIHNwbGl0RGF0YVtuXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByYXdEYXRhID0gbVdpZmlOYXRpdmUuZ2V0QmF0Y2hlZFNjYW5SZXN1bHRzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHX1BBUlNFKSBsb2coInJlYWRpbmcgbW9yZSBkYXRhOlxuIiArIHJhd0RhdGEpOwotICAgICAgICAgICAgICAgIGlmIChyYXdEYXRhID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5leHBlY3RlZCBudWxsIEJhdGNoZWRTY2FuUmVzdWx0cyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNwbGl0RGF0YSA9IHJhd0RhdGEuc3BsaXQoIlxuIik7Ci0gICAgICAgICAgICAgICAgaWYgKHNwbGl0RGF0YS5sZW5ndGggPT0gMCB8fCBzcGxpdERhdGFbMF0uZXF1YWxzKCJvayIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoImJhdGNoIHNjYW4gcmVzdWx0cyBqdXN0IGVuZGVkISIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobUJhdGNoZWRTY2FuUmVzdWx0cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3b3JrU291cmNlIGlzIG5vdCBudWxsLCBibGFtZSBpcyBnaXZlbiB0byBpdCwgb3RoZXJ3aXNlIGJsYW1lIGlzIGdpdmVuIHRvIGNhbGxpbmdVaWQuCi0gICAgcHJpdmF0ZSB2b2lkIG5vdGVTY2FuU3RhcnQoaW50IGNhbGxpbmdVaWQsIFdvcmtTb3VyY2Ugd29ya1NvdXJjZSkgewotICAgICAgICBpZiAobVNjYW5Xb3JrU291cmNlID09IG51bGwgJiYgKGNhbGxpbmdVaWQgIT0gVU5LTk9XTl9TQ0FOX1NPVVJDRSB8fCB3b3JrU291cmNlICE9IG51bGwpKSB7Ci0gICAgICAgICAgICBtU2NhbldvcmtTb3VyY2UgPSB3b3JrU291cmNlICE9IG51bGwgPyB3b3JrU291cmNlIDogbmV3IFdvcmtTb3VyY2UoY2FsbGluZ1VpZCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlTY2FuU3RhcnRlZEZyb21Tb3VyY2UobVNjYW5Xb3JrU291cmNlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbm90ZVNjYW5FbmQoKSB7Ci0gICAgICAgIGlmIChtU2NhbldvcmtTb3VyY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpU2NhblN0b3BwZWRGcm9tU291cmNlKG1TY2FuV29ya1NvdXJjZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICBtU2NhbldvcmtTb3VyY2UgPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG5vdGVCYXRjaGVkU2NhblN0YXJ0KCkgewotICAgICAgICAvLyBub3RlIHRoZSBlbmQgb2YgYSBwcmV2aW91cyBzY2FuIHNldAotICAgICAgICBpZiAobU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICAobU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlLmVxdWFscyhtQmF0Y2hlZFNjYW5Xb3JrU291cmNlKSA9PSBmYWxzZSB8fAotICAgICAgICAgICAgICAgICBtTm90ZWRCYXRjaGVkU2NhbkNzcGggIT0gbUJhdGNoZWRTY2FuQ3NwaCkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbUJhdHRlcnlTdGF0cy5ub3RlV2lmaUJhdGNoZWRTY2FuU3RvcHBlZEZyb21Tb3VyY2UobU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIG1Ob3RlZEJhdGNoZWRTY2FuV29ya1NvdXJjZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgbU5vdGVkQmF0Y2hlZFNjYW5Dc3BoID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBub3RlIHRoZSBzdGFydCBvZiB0aGUgbmV3Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpQmF0Y2hlZFNjYW5TdGFydGVkRnJvbVNvdXJjZShtQmF0Y2hlZFNjYW5Xb3JrU291cmNlLAotICAgICAgICAgICAgICAgICAgICBtQmF0Y2hlZFNjYW5Dc3BoKTsKLSAgICAgICAgICAgIG1Ob3RlZEJhdGNoZWRTY2FuV29ya1NvdXJjZSA9IG1CYXRjaGVkU2NhbldvcmtTb3VyY2U7Ci0gICAgICAgICAgICBtTm90ZWRCYXRjaGVkU2NhbkNzcGggPSBtQmF0Y2hlZFNjYW5Dc3BoOwotICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbm90ZUJhdGNoZWRTY2FuU3RvcCgpIHsKLSAgICAgICAgaWYgKG1Ob3RlZEJhdGNoZWRTY2FuV29ya1NvdXJjZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlCYXRjaGVkU2NhblN0b3BwZWRGcm9tU291cmNlKG1Ob3RlZEJhdGNoZWRTY2FuV29ya1NvdXJjZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICBtTm90ZWRCYXRjaGVkU2NhbldvcmtTb3VyY2UgPSBudWxsOwotICAgICAgICAgICAgICAgIG1Ob3RlZEJhdGNoZWRTY2FuQ3NwaCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc3RhcnRTY2FuTmF0aXZlKGludCB0eXBlKSB7Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNjYW4odHlwZSk7Ci0gICAgICAgIG1TY2FuUmVzdWx0SXNQZW5kaW5nID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUT0RPOiBkb2MKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRTdXBwbGljYW50UnVubmluZyhib29sZWFuIGVuYWJsZSkgewotICAgICAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfU1VQUExJQ0FOVCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RPUF9TVVBQTElDQU5UKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRPRE86IGRvYwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEhvc3RBcFJ1bm5pbmcoV2lmaUNvbmZpZ3VyYXRpb24gd2lmaUNvbmZpZywgYm9vbGVhbiBlbmFibGUpIHsKLSAgICAgICAgaWYgKGVuYWJsZSkgewotICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX0FQLCB3aWZpQ29uZmlnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVE9QX0FQKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFdpZmlBcENvbmZpZ3VyYXRpb24oV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgICAgIG1XaWZpQXBDb25maWdDaGFubmVsLnNlbmRNZXNzYWdlKENNRF9TRVRfQVBfQ09ORklHLCBjb25maWcpOwotICAgIH0KLQotICAgIHB1YmxpYyBXaWZpQ29uZmlndXJhdGlvbiBzeW5jR2V0V2lmaUFwQ29uZmlndXJhdGlvbigpIHsKLSAgICAgICAgTWVzc2FnZSByZXN1bHRNc2cgPSBtV2lmaUFwQ29uZmlnQ2hhbm5lbC5zZW5kTWVzc2FnZVN5bmNocm9ub3VzbHkoQ01EX1JFUVVFU1RfQVBfQ09ORklHKTsKLSAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gcmV0ID0gKFdpZmlDb25maWd1cmF0aW9uKSByZXN1bHRNc2cub2JqOwotICAgICAgICByZXN1bHRNc2cucmVjeWNsZSgpOwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRPRE86IGRvYwotICAgICAqLwotICAgIHB1YmxpYyBpbnQgc3luY0dldFdpZmlTdGF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1XaWZpU3RhdGUuZ2V0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVE9ETzogZG9jCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBzeW5jR2V0V2lmaVN0YXRlQnlOYW1lKCkgewotICAgICAgICBzd2l0Y2ggKG1XaWZpU3RhdGUuZ2V0KCkpIHsKLSAgICAgICAgICAgIGNhc2UgV0lGSV9TVEFURV9ESVNBQkxJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJkaXNhYmxpbmciOwotICAgICAgICAgICAgY2FzZSBXSUZJX1NUQVRFX0RJU0FCTEVEOgotICAgICAgICAgICAgICAgIHJldHVybiAiZGlzYWJsZWQiOwotICAgICAgICAgICAgY2FzZSBXSUZJX1NUQVRFX0VOQUJMSU5HOgotICAgICAgICAgICAgICAgIHJldHVybiAiZW5hYmxpbmciOwotICAgICAgICAgICAgY2FzZSBXSUZJX1NUQVRFX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJlbmFibGVkIjsKLSAgICAgICAgICAgIGNhc2UgV0lGSV9TVEFURV9VTktOT1dOOgotICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biBzdGF0ZSI7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAiW2ludmFsaWQgc3RhdGVdIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRPRE86IGRvYwotICAgICAqLwotICAgIHB1YmxpYyBpbnQgc3luY0dldFdpZmlBcFN0YXRlKCkgewotICAgICAgICByZXR1cm4gbVdpZmlBcFN0YXRlLmdldCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRPRE86IGRvYwotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgc3luY0dldFdpZmlBcFN0YXRlQnlOYW1lKCkgewotICAgICAgICBzd2l0Y2ggKG1XaWZpQXBTdGF0ZS5nZXQoKSkgewotICAgICAgICAgICAgY2FzZSBXSUZJX0FQX1NUQVRFX0RJU0FCTElORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gImRpc2FibGluZyI7Ci0gICAgICAgICAgICBjYXNlIFdJRklfQVBfU1RBVEVfRElTQUJMRUQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJkaXNhYmxlZCI7Ci0gICAgICAgICAgICBjYXNlIFdJRklfQVBfU1RBVEVfRU5BQkxJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJlbmFibGluZyI7Ci0gICAgICAgICAgICBjYXNlIFdJRklfQVBfU1RBVEVfRU5BQkxFRDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImVuYWJsZWQiOwotICAgICAgICAgICAgY2FzZSBXSUZJX0FQX1NUQVRFX0ZBSUxFRDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImZhaWxlZCI7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAiW2ludmFsaWQgc3RhdGVdIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24sIGlmIGFueS4KLSAgICAgKiBAcmV0dXJuIGEge0BsaW5rIFdpZmlJbmZvfSBvYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBjb25uZWN0aW9uCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgV2lmaUluZm8gc3luY1JlcXVlc3RDb25uZWN0aW9uSW5mbygpIHsKLSAgICAgICAgcmV0dXJuIG1XaWZpSW5mbzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGhjcFJlc3VsdHMgc3luY0dldERoY3BSZXN1bHRzKCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1EaGNwUmVzdWx0c0xvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRGhjcFJlc3VsdHMobURoY3BSZXN1bHRzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRPRE86IGRvYwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldERyaXZlclN0YXJ0KGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgICAgIGlmIChlbmFibGUpIHsKLSAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFSVF9EUklWRVIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUT1BfRFJJVkVSKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCkgewotICAgICAgICBzZW5kTWVzc2FnZShDTURfQ0FQVElWRV9DSEVDS19DT01QTEVURSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVE9ETzogZG9jCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0T3BlcmF0aW9uYWxNb2RlKGludCBtb2RlKSB7Ci0gICAgICAgIGlmIChEQkcpIGxvZygic2V0dGluZyBvcGVyYXRpb25hbCBtb2RlIHRvICIgKyBTdHJpbmcudmFsdWVPZihtb2RlKSk7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERSwgbW9kZSwgMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVE9ETzogZG9jCi0gICAgICovCi0gICAgcHVibGljIExpc3Q8U2NhblJlc3VsdD4gc3luY0dldFNjYW5SZXN1bHRzTGlzdCgpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtU2NhblJlc3VsdENhY2hlKSB7Ci0gICAgICAgICAgICBMaXN0PFNjYW5SZXN1bHQ+IHNjYW5MaXN0ID0gbmV3IEFycmF5TGlzdDxTY2FuUmVzdWx0PigpOwotICAgICAgICAgICAgZm9yKFNjYW5SZXN1bHQgcmVzdWx0OiBtU2NhblJlc3VsdHMpIHsKLSAgICAgICAgICAgICAgICBzY2FuTGlzdC5hZGQobmV3IFNjYW5SZXN1bHQocmVzdWx0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2Nhbkxpc3Q7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEaXNjb25uZWN0IGZyb20gQWNjZXNzIFBvaW50Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGlzY29ubmVjdENvbW1hbmQoKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9ESVNDT05ORUNUKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWF0ZSBhIHJlY29ubmVjdGlvbiB0byBBUAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlY29ubmVjdENvbW1hbmQoKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9SRUNPTk5FQ1QpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluaXRpYXRlIGEgcmUtYXNzb2NpYXRpb24gdG8gQVAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWFzc29jaWF0ZUNvbW1hbmQoKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9SRUFTU09DSUFURSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVsb2FkIG5ldHdvcmtzIGFuZCB0aGVuIHJlY29ubmVjdDsgaGVscHMgbG9hZCBjb3JyZWN0IGRhdGEgZm9yIFRMUyBuZXR3b3JrcwotICAgICAqLwotCi0gICAgcHVibGljIHZvaWQgcmVsb2FkVGxzTmV0d29ya3NBbmRSZWNvbm5lY3QoKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9SRUxPQURfVExTX0FORF9SRUNPTk5FQ1QpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZCBhIG5ldHdvcmsgc3luY2hyb25vdXNseQotICAgICAqCi0gICAgICogQHJldHVybiBuZXR3b3JrIGlkIG9mIHRoZSBuZXcgbmV0d29yawotICAgICAqLwotICAgIHB1YmxpYyBpbnQgc3luY0FkZE9yVXBkYXRlTmV0d29yayhBc3luY0NoYW5uZWwgY2hhbm5lbCwgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgICAgIE1lc3NhZ2UgcmVzdWx0TXNnID0gY2hhbm5lbC5zZW5kTWVzc2FnZVN5bmNocm9ub3VzbHkoQ01EX0FERF9PUl9VUERBVEVfTkVUV09SSywgY29uZmlnKTsKLSAgICAgICAgaW50IHJlc3VsdCA9IHJlc3VsdE1zZy5hcmcxOwotICAgICAgICByZXN1bHRNc2cucmVjeWNsZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBMaXN0PFdpZmlDb25maWd1cmF0aW9uPiBzeW5jR2V0Q29uZmlndXJlZE5ldHdvcmtzKEFzeW5jQ2hhbm5lbCBjaGFubmVsKSB7Ci0gICAgICAgIE1lc3NhZ2UgcmVzdWx0TXNnID0gY2hhbm5lbC5zZW5kTWVzc2FnZVN5bmNocm9ub3VzbHkoQ01EX0dFVF9DT05GSUdVUkVEX05FVFdPUktTKTsKLSAgICAgICAgTGlzdDxXaWZpQ29uZmlndXJhdGlvbj4gcmVzdWx0ID0gKExpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+KSByZXN1bHRNc2cub2JqOwotICAgICAgICByZXN1bHRNc2cucmVjeWNsZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlbGV0ZSBhIG5ldHdvcmsKLSAgICAgKgotICAgICAqIEBwYXJhbSBuZXR3b3JrSWQgaWQgb2YgdGhlIG5ldHdvcmsgdG8gYmUgcmVtb3ZlZAotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHN5bmNSZW1vdmVOZXR3b3JrKEFzeW5jQ2hhbm5lbCBjaGFubmVsLCBpbnQgbmV0d29ya0lkKSB7Ci0gICAgICAgIE1lc3NhZ2UgcmVzdWx0TXNnID0gY2hhbm5lbC5zZW5kTWVzc2FnZVN5bmNocm9ub3VzbHkoQ01EX1JFTU9WRV9ORVRXT1JLLCBuZXR3b3JrSWQpOwotICAgICAgICBib29sZWFuIHJlc3VsdCA9IChyZXN1bHRNc2cuYXJnMSAhPSBGQUlMVVJFKTsKLSAgICAgICAgcmVzdWx0TXNnLnJlY3ljbGUoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFbmFibGUgYSBuZXR3b3JrCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayBpZCBvZiB0aGUgbmV0d29yawotICAgICAqIEBwYXJhbSBkaXNhYmxlT3RoZXJzIHRydWUsIGlmIGFsbCBvdGhlciBuZXR3b3JrcyBoYXZlIHRvIGJlIGRpc2FibGVkCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkcywge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzeW5jRW5hYmxlTmV0d29yayhBc3luY0NoYW5uZWwgY2hhbm5lbCwgaW50IG5ldElkLCBib29sZWFuIGRpc2FibGVPdGhlcnMpIHsKLSAgICAgICAgTWVzc2FnZSByZXN1bHRNc2cgPSBjaGFubmVsLnNlbmRNZXNzYWdlU3luY2hyb25vdXNseShDTURfRU5BQkxFX05FVFdPUkssIG5ldElkLAotICAgICAgICAgICAgICAgIGRpc2FibGVPdGhlcnMgPyAxIDogMCk7Ci0gICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gKHJlc3VsdE1zZy5hcmcxICE9IEZBSUxVUkUpOwotICAgICAgICByZXN1bHRNc2cucmVjeWNsZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERpc2FibGUgYSBuZXR3b3JrCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayBpZCBvZiB0aGUgbmV0d29yawotICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc3luY0Rpc2FibGVOZXR3b3JrKEFzeW5jQ2hhbm5lbCBjaGFubmVsLCBpbnQgbmV0SWQpIHsKLSAgICAgICAgTWVzc2FnZSByZXN1bHRNc2cgPSBjaGFubmVsLnNlbmRNZXNzYWdlU3luY2hyb25vdXNseShXaWZpTWFuYWdlci5ESVNBQkxFX05FVFdPUkssIG5ldElkKTsKLSAgICAgICAgYm9vbGVhbiByZXN1bHQgPSAocmVzdWx0TXNnLmFyZzEgIT0gV2lmaU1hbmFnZXIuRElTQUJMRV9ORVRXT1JLX0ZBSUxFRCk7Ci0gICAgICAgIHJlc3VsdE1zZy5yZWN5Y2xlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQmxhY2tsaXN0IGEgQlNTSUQuIFRoaXMgd2lsbCBhdm9pZCB0aGUgQVAgaWYgdGhlcmUgYXJlCi0gICAgICogYWx0ZXJuYXRlIEFQcyB0byBjb25uZWN0Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gYnNzaWQgQlNTSUQgb2YgdGhlIG5ldHdvcmsKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRUb0JsYWNrbGlzdChTdHJpbmcgYnNzaWQpIHsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX0JMQUNLTElTVF9ORVRXT1JLLCBic3NpZCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xlYXIgdGhlIGJsYWNrbGlzdCBsaXN0Ci0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhckJsYWNrbGlzdCgpIHsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX0NMRUFSX0JMQUNLTElTVCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZW5hYmxlUnNzaVBvbGxpbmcoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgc2VuZE1lc3NhZ2UoQ01EX0VOQUJMRV9SU1NJX1BPTEwsIGVuYWJsZWQgPyAxIDogMCwgMCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZW5hYmxlQmFja2dyb3VuZFNjYW5Db21tYW5kKGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgIHNlbmRNZXNzYWdlKENNRF9FTkFCTEVfQkFDS0dST1VORF9TQ0FOLCBlbmFibGVkID8gMSA6IDAsIDApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGVuYWJsZUFsbE5ldHdvcmtzKCkgewotICAgICAgICBzZW5kTWVzc2FnZShDTURfRU5BQkxFX0FMTF9ORVRXT1JLUyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RhcnQgZmlsdGVyaW5nIE11bHRpY2FzdCB2NCBwYWNrZXRzCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRGaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMoKSB7Ci0gICAgICAgIG1GaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMuc2V0KHRydWUpOwotICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfUEFDS0VUX0ZJTFRFUklORywgTVVMVElDQVNUX1Y0LCAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdG9wIGZpbHRlcmluZyBNdWx0aWNhc3QgdjQgcGFja2V0cwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN0b3BGaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMoKSB7Ci0gICAgICAgIG1GaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMuc2V0KGZhbHNlKTsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORywgTVVMVElDQVNUX1Y0LCAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdGFydCBmaWx0ZXJpbmcgTXVsdGljYXN0IHY0IHBhY2tldHMKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydEZpbHRlcmluZ011bHRpY2FzdFY2UGFja2V0cygpIHsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkcsIE1VTFRJQ0FTVF9WNiwgMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RvcCBmaWx0ZXJpbmcgTXVsdGljYXN0IHY0IHBhY2tldHMKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdG9wRmlsdGVyaW5nTXVsdGljYXN0VjZQYWNrZXRzKCkgewotICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HLCBNVUxUSUNBU1RfVjYsIDApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldCBoaWdoIHBlcmZvcm1hbmNlIG1vZGUgb2Ygb3BlcmF0aW9uLgotICAgICAqIEVuYWJsaW5nIHdvdWxkIHNldCBhY3RpdmUgcG93ZXIgbW9kZSBhbmQgZGlzYWJsZSBzdXNwZW5kIG9wdGltaXphdGlvbnM7Ci0gICAgICogZGlzYWJsaW5nIHdvdWxkIHNldCBhdXRvIHBvd2VyIG1vZGUgYW5kIGVuYWJsZSBzdXNwZW5kIG9wdGltaXphdGlvbnMKLSAgICAgKiBAcGFyYW0gZW5hYmxlIHRydWUgaWYgZW5hYmxlLCBmYWxzZSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRIaWdoUGVyZk1vZGVFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9TRVRfSElHSF9QRVJGX01PREUsIGVuYWJsZSA/IDEgOiAwLCAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIGNvdW50cnkgY29kZQotICAgICAqIEBwYXJhbSBjb3VudHJ5Q29kZSBmb2xsb3dpbmcgSVNPIDMxNjYgZm9ybWF0Ci0gICAgICogQHBhcmFtIHBlcnNpc3Qge0Bjb2RlIHRydWV9IGlmIHRoZSBzZXR0aW5nIHNob3VsZCBiZSByZW1lbWJlcmVkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldENvdW50cnlDb2RlKFN0cmluZyBjb3VudHJ5Q29kZSwgYm9vbGVhbiBwZXJzaXN0KSB7Ci0gICAgICAgIGlmIChwZXJzaXN0KSB7Ci0gICAgICAgICAgICBtUGVyc2lzdGVkQ291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZTsKLSAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5wdXRTdHJpbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX0NPVU5UUllfQ09ERSwKLSAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGUpOwotICAgICAgICB9Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9TRVRfQ09VTlRSWV9DT0RFLCBjb3VudHJ5Q29kZSk7Ci0gICAgICAgIG1XaWZpUDJwQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpUDJwU2VydmljZS5TRVRfQ09VTlRSWV9DT0RFLCBjb3VudHJ5Q29kZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBvcGVyYXRpb25hbCBmcmVxdWVuY3kgYmFuZAotICAgICAqIEBwYXJhbSBiYW5kCi0gICAgICogQHBhcmFtIHBlcnNpc3Qge0Bjb2RlIHRydWV9IGlmIHRoZSBzZXR0aW5nIHNob3VsZCBiZSByZW1lbWJlcmVkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEZyZXF1ZW5jeUJhbmQoaW50IGJhbmQsIGJvb2xlYW4gcGVyc2lzdCkgewotICAgICAgICBpZiAocGVyc2lzdCkgewotICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLnB1dEludChtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfRlJFUVVFTkNZX0JBTkQsCi0gICAgICAgICAgICAgICAgICAgIGJhbmQpOwotICAgICAgICB9Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9TRVRfRlJFUVVFTkNZX0JBTkQsIGJhbmQsIDApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVuYWJsZSBURExTIGZvciBhIHNwZWNpZmljIE1BQyBhZGRyZXNzCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZW5hYmxlVGRscyhTdHJpbmcgcmVtb3RlTWFjQWRkcmVzcywgYm9vbGVhbiBlbmFibGUpIHsKLSAgICAgICAgaW50IGVuYWJsZXIgPSBlbmFibGUgPyAxIDogMDsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX0VOQUJMRV9URExTLCBlbmFibGVyLCAwLCByZW1vdGVNYWNBZGRyZXNzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBvcGVyYXRpb25hbCBmcmVxdWVuY3kgYmFuZAotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0RnJlcXVlbmN5QmFuZCgpIHsKLSAgICAgICAgcmV0dXJuIG1GcmVxdWVuY3lCYW5kLmdldCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHdpZmkgY29uZmlndXJhdGlvbiBmaWxlCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRDb25maWdGaWxlKCkgewotICAgICAgICByZXR1cm4gbVdpZmlDb25maWdTdG9yZS5nZXRDb25maWdGaWxlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VuZCBhIG1lc3NhZ2UgaW5kaWNhdGluZyBibHVldG9vdGggYWRhcHRlciBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZW5kQmx1ZXRvb3RoQWRhcHRlclN0YXRlQ2hhbmdlKGludCBzdGF0ZSkgewotICAgICAgICBzZW5kTWVzc2FnZShDTURfQkxVRVRPT1RIX0FEQVBURVJfU1RBVEVfQ0hBTkdFLCBzdGF0ZSwgMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2F2ZSBjb25maWd1cmF0aW9uIG9uIHN1cHBsaWNhbnQKLSAgICAgKgotICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICoKLSAgICAgKiBUT0RPOiBkZXByZWNhdGUgdGhpcwotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHN5bmNTYXZlQ29uZmlnKEFzeW5jQ2hhbm5lbCBjaGFubmVsKSB7Ci0gICAgICAgIE1lc3NhZ2UgcmVzdWx0TXNnID0gY2hhbm5lbC5zZW5kTWVzc2FnZVN5bmNocm9ub3VzbHkoQ01EX1NBVkVfQ09ORklHKTsKLSAgICAgICAgYm9vbGVhbiByZXN1bHQgPSAocmVzdWx0TXNnLmFyZzEgIT0gRkFJTFVSRSk7Ci0gICAgICAgIHJlc3VsdE1zZy5yZWN5Y2xlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdXBkYXRlQmF0dGVyeVdvcmtTb3VyY2UoV29ya1NvdXJjZSBuZXdTb3VyY2UpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtUnVubmluZ1dpZmlVaWRzKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlmIChuZXdTb3VyY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtUnVubmluZ1dpZmlVaWRzLnNldChuZXdTb3VyY2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobUlzUnVubmluZykgewotICAgICAgICAgICAgICAgICAgICBpZiAobVJlcG9ydGVkUnVubmluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHdvcmsgc291cmNlIGhhcyBjaGFuZ2VkIHNpbmNlIGxhc3QgdGltZSwgbmVlZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gcmVtb3ZlIG9sZCB3b3JrIGZyb20gYmF0dGVyeSBzdGF0cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtTGFzdFJ1bm5pbmdXaWZpVWlkcy5kaWZmKG1SdW5uaW5nV2lmaVVpZHMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUJhdHRlcnlTdGF0cy5ub3RlV2lmaVJ1bm5pbmdDaGFuZ2VkKG1MYXN0UnVubmluZ1dpZmlVaWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJ1bm5pbmdXaWZpVWlkcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxhc3RSdW5uaW5nV2lmaVVpZHMuc2V0KG1SdW5uaW5nV2lmaVVpZHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IGJlaW5nIHN0YXJ0ZWQsIHJlcG9ydCBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlSdW5uaW5nKG1SdW5uaW5nV2lmaVVpZHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgbUxhc3RSdW5uaW5nV2lmaVVpZHMuc2V0KG1SdW5uaW5nV2lmaVVpZHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVJlcG9ydGVkUnVubmluZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAobVJlcG9ydGVkUnVubmluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGFzdCByZXBvcnRlZCB3ZSB3ZXJlIHJ1bm5pbmcsIHRpbWUgdG8gc3RvcC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlTdG9wcGVkKG1MYXN0UnVubmluZ1dpZmlVaWRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0UnVubmluZ1dpZmlVaWRzLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUmVwb3J0ZWRSdW5uaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbVdha2VMb2NrLnNldFdvcmtTb3VyY2UobmV3U291cmNlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBpZ25vcmUpIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIHN1cGVyLmR1bXAoZmQsIHB3LCBhcmdzKTsKLSAgICAgICAgbVN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIuZHVtcChmZCwgcHcsIGFyZ3MpOwotICAgICAgICBwdy5wcmludGxuKCJtTGlua1Byb3BlcnRpZXMgIiArIG1MaW5rUHJvcGVydGllcyk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1XaWZpSW5mbyAiICsgbVdpZmlJbmZvKTsKLSAgICAgICAgcHcucHJpbnRsbigibURoY3BSZXN1bHRzICIgKyBtRGhjcFJlc3VsdHMpOwotICAgICAgICBwdy5wcmludGxuKCJtTmV0d29ya0luZm8gIiArIG1OZXR3b3JrSW5mbyk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1MYXN0U2lnbmFsTGV2ZWwgIiArIG1MYXN0U2lnbmFsTGV2ZWwpOwotICAgICAgICBwdy5wcmludGxuKCJtTGFzdEJzc2lkICIgKyBtTGFzdEJzc2lkKTsKLSAgICAgICAgcHcucHJpbnRsbigibUxhc3ROZXR3b3JrSWQgIiArIG1MYXN0TmV0d29ya0lkKTsKLSAgICAgICAgcHcucHJpbnRsbigibVJlY29ubmVjdENvdW50ICIgKyBtUmVjb25uZWN0Q291bnQpOwotICAgICAgICBwdy5wcmludGxuKCJtT3BlcmF0aW9uYWxNb2RlICIgKyBtT3BlcmF0aW9uYWxNb2RlKTsKLSAgICAgICAgcHcucHJpbnRsbigibVVzZXJXYW50c1N1c3BlbmRPcHQgIiArIG1Vc2VyV2FudHNTdXNwZW5kT3B0KTsKLSAgICAgICAgcHcucHJpbnRsbigibVN1c3BlbmRPcHROZWVkc0Rpc2FibGVkICIgKyBtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQpOwotICAgICAgICBwdy5wcmludGxuKCJTdXBwbGljYW50IHN0YXR1cyAiICsgbVdpZmlOYXRpdmUuc3RhdHVzKCkpOwotICAgICAgICBwdy5wcmludGxuKCJtRW5hYmxlQmFja2dyb3VuZFNjYW4gIiArIG1FbmFibGVCYWNrZ3JvdW5kU2Nhbik7Ci0gICAgICAgIHB3LnByaW50bG4oKTsKLSAgICAgICAgbVdpZmlDb25maWdTdG9yZS5kdW1wKGZkLCBwdywgYXJncyk7Ci0gICAgfQotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIEludGVybmFsIHByaXZhdGUgZnVuY3Rpb25zCi0gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVNjcmVlblN0YXRlQ2hhbmdlZChib29sZWFuIHNjcmVlbk9uKSB7Ci0gICAgICAgIGlmIChEQkcpIGxvZygiaGFuZGxlU2NyZWVuU3RhdGVDaGFuZ2VkOiAiICsgc2NyZWVuT24pOwotICAgICAgICBlbmFibGVSc3NpUG9sbGluZyhzY3JlZW5Pbik7Ci0gICAgICAgIGlmIChtQmFja2dyb3VuZFNjYW5TdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgIGVuYWJsZUJhY2tncm91bmRTY2FuQ29tbWFuZChzY3JlZW5PbiA9PSBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NyZWVuT24pIGVuYWJsZUFsbE5ldHdvcmtzKCk7Ci0gICAgICAgIGlmIChtVXNlcldhbnRzU3VzcGVuZE9wdC5nZXQoKSkgewotICAgICAgICAgICAgaWYgKHNjcmVlbk9uKSB7Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NFVF9TVVNQRU5EX09QVF9FTkFCTEVELCAwLCAwKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy9BbGxvdyAycyBmb3Igc3VzcGVuZCBvcHRpbWl6YXRpb25zIHRvIGJlIHNldAotICAgICAgICAgICAgICAgIG1TdXNwZW5kV2FrZUxvY2suYWNxdWlyZSgyMDAwKTsKLSAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU0VUX1NVU1BFTkRfT1BUX0VOQUJMRUQsIDEsIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1TY3JlZW5Ccm9hZGNhc3RSZWNlaXZlZC5zZXQodHJ1ZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNoZWNrQW5kU2V0Q29ubmVjdGl2aXR5SW5zdGFuY2UoKSB7Ci0gICAgICAgIGlmIChtQ20gPT0gbnVsbCkgewotICAgICAgICAgICAgbUNtID0gKENvbm5lY3Rpdml0eU1hbmFnZXIpIG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DT05ORUNUSVZJVFlfU0VSVklDRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gc3RhcnRUZXRoZXJpbmcoQXJyYXlMaXN0PFN0cmluZz4gYXZhaWxhYmxlKSB7Ci0KLSAgICAgICAgYm9vbGVhbiB3aWZpQXZhaWxhYmxlID0gZmFsc2U7Ci0KLSAgICAgICAgY2hlY2tBbmRTZXRDb25uZWN0aXZpdHlJbnN0YW5jZSgpOwotCi0gICAgICAgIFN0cmluZ1tdIHdpZmlSZWdleHMgPSBtQ20uZ2V0VGV0aGVyYWJsZVdpZmlSZWdleHMoKTsKLQotICAgICAgICBmb3IgKFN0cmluZyBpbnRmIDogYXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZyByZWdleCA6IHdpZmlSZWdleHMpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW50Zi5tYXRjaGVzKHJlZ2V4KSkgewotCi0gICAgICAgICAgICAgICAgICAgIEludGVyZmFjZUNvbmZpZ3VyYXRpb24gaWZjZyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZmNnID0gbU53U2VydmljZS5nZXRJbnRlcmZhY2VDb25maWcoaW50Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWZjZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVAvbmV0bWFzazogMTkyLjE2OC40My4xLzI1NS4yNTUuMjU1LjAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmNnLnNldExpbmtBZGRyZXNzKG5ldyBMaW5rQWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlscy5udW1lcmljVG9JbmV0QWRkcmVzcygiMTkyLjE2OC40My4xIiksIDI0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZjZy5zZXRJbnRlcmZhY2VVcCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS5zZXRJbnRlcmZhY2VDb25maWcoaW50ZiwgaWZjZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJFcnJvciBjb25maWd1cmluZyBpbnRlcmZhY2UgIiArIGludGYgKyAiLCA6IiArIGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYobUNtLnRldGhlcihpbnRmKSAhPSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRFVEhFUl9FUlJPUl9OT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRXJyb3IgdGV0aGVyaW5nIG9uICIgKyBpbnRmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtVGV0aGVySW50ZXJmYWNlTmFtZSA9IGludGY7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBXZSBmb3VuZCBubyBpbnRlcmZhY2VzIHRvIHRldGhlcgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHN0b3BUZXRoZXJpbmcoKSB7Ci0KLSAgICAgICAgY2hlY2tBbmRTZXRDb25uZWN0aXZpdHlJbnN0YW5jZSgpOwotCi0gICAgICAgIC8qIENsZWFyIHRoZSBpbnRlcmZhY2UgY29uZmlnIHRvIGFsbG93IGRoY3AgY29ycmVjdGx5IGNvbmZpZ3VyZSBuZXcKLSAgICAgICAgICAgaXAgc2V0dGluZ3MgKi8KLSAgICAgICAgSW50ZXJmYWNlQ29uZmlndXJhdGlvbiBpZmNnID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmY2cgPSBtTndTZXJ2aWNlLmdldEludGVyZmFjZUNvbmZpZyhtVGV0aGVySW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgICAgICBpZiAoaWZjZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWZjZy5zZXRMaW5rQWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaW5rQWRkcmVzcyhOZXR3b3JrVXRpbHMubnVtZXJpY1RvSW5ldEFkZHJlc3MoIjAuMC4wLjAiKSwgMCkpOwotICAgICAgICAgICAgICAgIG1Od1NlcnZpY2Uuc2V0SW50ZXJmYWNlQ29uZmlnKG1UZXRoZXJJbnRlcmZhY2VOYW1lLCBpZmNnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZ2UoIkVycm9yIHJlc2V0dGluZyBpbnRlcmZhY2UgIiArIG1UZXRoZXJJbnRlcmZhY2VOYW1lICsgIiwgOiIgKyBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtQ20udW50ZXRoZXIobVRldGhlckludGVyZmFjZU5hbWUpICE9IENvbm5lY3Rpdml0eU1hbmFnZXIuVEVUSEVSX0VSUk9SX05PX0VSUk9SKSB7Ci0gICAgICAgICAgICBsb2dlKCJVbnRldGhlciBpbml0aWF0ZSBmYWlsZWQhIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNXaWZpVGV0aGVyZWQoQXJyYXlMaXN0PFN0cmluZz4gYWN0aXZlKSB7Ci0KLSAgICAgICAgY2hlY2tBbmRTZXRDb25uZWN0aXZpdHlJbnN0YW5jZSgpOwotCi0gICAgICAgIFN0cmluZ1tdIHdpZmlSZWdleHMgPSBtQ20uZ2V0VGV0aGVyYWJsZVdpZmlSZWdleHMoKTsKLSAgICAgICAgZm9yIChTdHJpbmcgaW50ZiA6IGFjdGl2ZSkgewotICAgICAgICAgICAgZm9yIChTdHJpbmcgcmVnZXggOiB3aWZpUmVnZXhzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGludGYubWF0Y2hlcyhyZWdleCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGZvdW5kIG5vIGludGVyZmFjZXMgdGhhdCBhcmUgdGV0aGVyZWQKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldCB0aGUgY291bnRyeSBjb2RlIGZyb20gdGhlIHN5c3RlbSBzZXR0aW5nIHZhbHVlLCBpZiBhbnkuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldENvdW50cnlDb2RlKCkgewotICAgICAgICBTdHJpbmcgY291bnRyeUNvZGUgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0U3RyaW5nKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX0NPVU5UUllfQ09ERSk7Ci0gICAgICAgIGlmIChjb3VudHJ5Q29kZSAhPSBudWxsICYmICFjb3VudHJ5Q29kZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHNldENvdW50cnlDb2RlKGNvdW50cnlDb2RlLCBmYWxzZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvL3VzZSBkcml2ZXIgZGVmYXVsdAotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBmcmVxdWVuY3kgYmFuZCBmcm9tIHRoZSBzeXN0ZW0gc2V0dGluZyB2YWx1ZSwgaWYgYW55LgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXRGcmVxdWVuY3lCYW5kKCkgewotICAgICAgICBpbnQgYmFuZCA9IFNldHRpbmdzLkdsb2JhbC5nZXRJbnQobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfRlJFUVVFTkNZX0JBTkQsIFdpZmlNYW5hZ2VyLldJRklfRlJFUVVFTkNZX0JBTkRfQVVUTyk7Ci0gICAgICAgIHNldEZyZXF1ZW5jeUJhbmQoYmFuZCwgZmFsc2UpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXRTdXNwZW5kT3B0aW1pemF0aW9uc05hdGl2ZShpbnQgcmVhc29uLCBib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgaWYgKERCRykgbG9nKCJzZXRTdXNwZW5kT3B0aW1pemF0aW9uc05hdGl2ZTogIiArIHJlYXNvbiArICIgIiArIGVuYWJsZWQpOwotICAgICAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICAgICAgbVN1c3BlbmRPcHROZWVkc0Rpc2FibGVkICY9IH5yZWFzb247Ci0gICAgICAgICAgICAvKiBOb25lIG9mIGRoY3AsIHNjcmVlbiBvciBoaWdocGVyZiBuZWVkIGl0IGRpc2FibGVkIGFuZCB1c2VyIHdhbnRzIGl0IGVuYWJsZWQgKi8KLSAgICAgICAgICAgIGlmIChtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQgPT0gMCAmJiBtVXNlcldhbnRzU3VzcGVuZE9wdC5nZXQoKSkgewotICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldFN1c3BlbmRPcHRpbWl6YXRpb25zKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVN1c3BlbmRPcHROZWVkc0Rpc2FibGVkIHw9IHJlYXNvbjsKLSAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldFN1c3BlbmRPcHRpbWl6YXRpb25zKGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXRTdXNwZW5kT3B0aW1pemF0aW9ucyhpbnQgcmVhc29uLCBib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgaWYgKERCRykgbG9nKCJzZXRTdXNwZW5kT3B0aW1pemF0aW9uczogIiArIHJlYXNvbiArICIgIiArIGVuYWJsZWQpOwotICAgICAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICAgICAgbVN1c3BlbmRPcHROZWVkc0Rpc2FibGVkICY9IH5yZWFzb247Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQgfD0gcmVhc29uOwotICAgICAgICB9Ci0gICAgICAgIGlmIChEQkcpIGxvZygibVN1c3BlbmRPcHROZWVkc0Rpc2FibGVkICIgKyBtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXRXaWZpU3RhdGUoaW50IHdpZmlTdGF0ZSkgewotICAgICAgICBmaW5hbCBpbnQgcHJldmlvdXNXaWZpU3RhdGUgPSBtV2lmaVN0YXRlLmdldCgpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAod2lmaVN0YXRlID09IFdJRklfU1RBVEVfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlPbigpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh3aWZpU3RhdGUgPT0gV0lGSV9TVEFURV9ESVNBQkxFRCkgewotICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlPZmYoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBub3RlIGJhdHRlcnkgc3RhdHMgaW4gd2lmaSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVdpZmlTdGF0ZS5zZXQod2lmaVN0YXRlKTsKLQotICAgICAgICBpZiAoREJHKSBsb2coInNldFdpZmlTdGF0ZTogIiArIHN5bmNHZXRXaWZpU3RhdGVCeU5hbWUoKSk7Ci0KLSAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfV0lGSV9TVEFURSwgd2lmaVN0YXRlKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1BSRVZJT1VTX1dJRklfU1RBVEUsIHByZXZpb3VzV2lmaVN0YXRlKTsKLSAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0V2lmaUFwU3RhdGUoaW50IHdpZmlBcFN0YXRlKSB7Ci0gICAgICAgIGZpbmFsIGludCBwcmV2aW91c1dpZmlBcFN0YXRlID0gbVdpZmlBcFN0YXRlLmdldCgpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAod2lmaUFwU3RhdGUgPT0gV0lGSV9BUF9TVEFURV9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgbUJhdHRlcnlTdGF0cy5ub3RlV2lmaU9uKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHdpZmlBcFN0YXRlID09IFdJRklfQVBfU1RBVEVfRElTQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpT2ZmKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gbm90ZSBiYXR0ZXJ5IHN0YXRzIGluIHdpZmkiKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSBzdGF0ZQotICAgICAgICBtV2lmaUFwU3RhdGUuc2V0KHdpZmlBcFN0YXRlKTsKLQotICAgICAgICBpZiAoREJHKSBsb2coInNldFdpZmlBcFN0YXRlOiAiICsgc3luY0dldFdpZmlBcFN0YXRlQnlOYW1lKCkpOwotCi0gICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLldJRklfQVBfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1dJRklfQVBfU1RBVEUsIHdpZmlBcFN0YXRlKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1BSRVZJT1VTX1dJRklfQVBfU1RBVEUsIHByZXZpb3VzV2lmaUFwU3RhdGUpOwotICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TVFIgPSAiaWQ9IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlNTSURfU1RSID0gImJzc2lkPSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZSRVFfU1RSID0gImZyZXE9IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVWRUxfU1RSID0gImxldmVsPSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRTRl9TVFIgPSAidHNmPSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdTX1NUUiA9ICJmbGFncz0iOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTU0lEX1NUUiA9ICJzc2lkPSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFTElNSVRFUl9TVFIgPSAiPT09PSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVORF9TVFIgPSAiIyMjIyI7Ci0KLSAgICAvKioKLSAgICAgKiBGb3JtYXQ6Ci0gICAgICoKLSAgICAgKiBpZD0xCi0gICAgICogYnNzaWQ9Njg6N2Y6NzY6ZDc6MWE6NmUKLSAgICAgKiBmcmVxPTI0MTIKLSAgICAgKiBsZXZlbD0tNDQKLSAgICAgKiB0c2Y9MTM0NDYyNjI0MzcwMDM0MgotICAgICAqIGZsYWdzPVtXUEEyLVBTSy1DQ01QXVtXUFNdW0VTU10KLSAgICAgKiBzc2lkPXpmZHkKLSAgICAgKiA9PT09Ci0gICAgICogaWQ9MgotICAgICAqIGJzc2lkPTY4OjVmOjc0OmQ3OjFhOjZmCi0gICAgICogZnJlcT01MTgwCi0gICAgICogbGV2ZWw9LTczCi0gICAgICogdHNmPTEzNDQ2MjYyNDM3MDAzNzMKLSAgICAgKiBmbGFncz1bV1BBMi1QU0stQ0NNUF1bV1BTXVtFU1NdCi0gICAgICogc3NpZD16dWJ5Ci0gICAgICogPT09PQotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXRTY2FuUmVzdWx0cygpIHsKLSAgICAgICAgU3RyaW5nIGJzc2lkID0gIiI7Ci0gICAgICAgIGludCBsZXZlbCA9IDA7Ci0gICAgICAgIGludCBmcmVxID0gMDsKLSAgICAgICAgbG9uZyB0c2YgPSAwOwotICAgICAgICBTdHJpbmcgZmxhZ3MgPSAiIjsKLSAgICAgICAgV2lmaVNzaWQgd2lmaVNzaWQgPSBudWxsOwotICAgICAgICBTdHJpbmcgc2NhblJlc3VsdHM7Ci0gICAgICAgIFN0cmluZyB0bXBSZXN1bHRzOwotICAgICAgICBTdHJpbmdCdWZmZXIgc2NhblJlc3VsdHNCdWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGludCBzaWQgPSAwOwotCi0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICB0bXBSZXN1bHRzID0gbVdpZmlOYXRpdmUuc2NhblJlc3VsdHMoc2lkKTsKLSAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eSh0bXBSZXN1bHRzKSkgYnJlYWs7Ci0gICAgICAgICAgICBzY2FuUmVzdWx0c0J1Zi5hcHBlbmQodG1wUmVzdWx0cyk7Ci0gICAgICAgICAgICBzY2FuUmVzdWx0c0J1Zi5hcHBlbmQoIlxuIik7Ci0gICAgICAgICAgICBTdHJpbmdbXSBsaW5lcyA9IHRtcFJlc3VsdHMuc3BsaXQoIlxuIik7Ci0gICAgICAgICAgICBzaWQgPSAtMTsKLSAgICAgICAgICAgIGZvciAoaW50IGk9bGluZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBpZiAobGluZXNbaV0uc3RhcnRzV2l0aChFTkRfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmVzW2ldLnN0YXJ0c1dpdGgoSURfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2lkID0gSW50ZWdlci5wYXJzZUludChsaW5lc1tpXS5zdWJzdHJpbmcoSURfU1RSLmxlbmd0aCgpKSkgKyAxOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzaWQgPT0gLTEpIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgc2NhblJlc3VsdHMgPSBzY2FuUmVzdWx0c0J1Zi50b1N0cmluZygpOwotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoc2NhblJlc3VsdHMpKSB7Ci0gICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG5vdGUgdGhhdCBhbGwgdGhlc2Ugc3BsaXRzIGFuZCBzdWJzdHJpbmdzIGtlZXAgcmVmZXJlbmNlcyB0byB0aGUgb3JpZ2luYWwKLSAgICAgICAgLy8gaHVnZSBzdHJpbmcgYnVmZmVyIHdoaWxlIHRoZSBhbW91bnQgd2UgcmVhbGx5IHdhbnQgaXMgZ2VuZXJhbGx5IHByZXR0eSBzbWFsbAotICAgICAgICAvLyBzbyBtYWtlIGNvcGllcyBpbnN0ZWFkIChvbmUgZXhhbXBsZSBiLzExMDg3OTU2IHdhc3RlZCA0MDBrIG9mIGhlYXAgaGVyZSkuCi0gICAgICAgIHN5bmNocm9uaXplZChtU2NhblJlc3VsdENhY2hlKSB7Ci0gICAgICAgICAgICBtU2NhblJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PFNjYW5SZXN1bHQ+KCk7Ci0gICAgICAgICAgICBTdHJpbmdbXSBsaW5lcyA9IHNjYW5SZXN1bHRzLnNwbGl0KCJcbiIpOwotICAgICAgICAgICAgZmluYWwgaW50IGJzc2lkU3RyTGVuID0gQlNTSURfU1RSLmxlbmd0aCgpOwotICAgICAgICAgICAgZmluYWwgaW50IGZsYWdMZW4gPSBGTEFHU19TVFIubGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIGZvciAoU3RyaW5nIGxpbmUgOiBsaW5lcykgewotICAgICAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoQlNTSURfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICBic3NpZCA9IG5ldyBTdHJpbmcobGluZS5nZXRCeXRlcygpLCBic3NpZFN0ckxlbiwgbGluZS5sZW5ndGgoKSAtIGJzc2lkU3RyTGVuKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChGUkVRX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZXEgPSBJbnRlZ2VyLnBhcnNlSW50KGxpbmUuc3Vic3RyaW5nKEZSRVFfU1RSLmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVxID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKExFVkVMX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gSW50ZWdlci5wYXJzZUludChsaW5lLnN1YnN0cmluZyhMRVZFTF9TVFIubGVuZ3RoKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNvbWUgaW1wbGVtZW50YXRpb25zIGF2b2lkIG5lZ2F0aXZlIHZhbHVlcyBieSBhZGRpbmcgMjU2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBzbyB3ZSBuZWVkIHRvIGFkanVzdCBmb3IgdGhhdCBoZXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZWwgPiAwKSBsZXZlbCAtPSAyNTY7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKFRTRl9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0c2YgPSBMb25nLnBhcnNlTG9uZyhsaW5lLnN1YnN0cmluZyhUU0ZfU1RSLmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0c2YgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoRkxBR1NfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICBmbGFncyA9IG5ldyBTdHJpbmcobGluZS5nZXRCeXRlcygpLCBmbGFnTGVuLCBsaW5lLmxlbmd0aCgpIC0gZmxhZ0xlbik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoU1NJRF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdpZmlTc2lkID0gV2lmaVNzaWQuY3JlYXRlRnJvbUFzY2lpRW5jb2RlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLnN1YnN0cmluZyhTU0lEX1NUUi5sZW5ndGgoKSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKERFTElNSVRFUl9TVFIpIHx8IGxpbmUuc3RhcnRzV2l0aChFTkRfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYnNzaWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNzaWQgPSAod2lmaVNzaWQgIT0gbnVsbCkgPyB3aWZpU3NpZC50b1N0cmluZygpIDogV2lmaVNzaWQuTk9ORTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBic3NpZCArIHNzaWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTY2FuUmVzdWx0IHNjYW5SZXN1bHQgPSBtU2NhblJlc3VsdENhY2hlLmdldChrZXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjYW5SZXN1bHQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5SZXN1bHQubGV2ZWwgPSBsZXZlbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuUmVzdWx0LndpZmlTc2lkID0gd2lmaVNzaWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2VlcCBleGlzdGluZyBBUEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuUmVzdWx0LlNTSUQgPSAod2lmaVNzaWQgIT0gbnVsbCkgPyB3aWZpU3NpZC50b1N0cmluZygpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlTc2lkLk5PTkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhblJlc3VsdC5jYXBhYmlsaXRpZXMgPSBmbGFnczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuUmVzdWx0LmZyZXF1ZW5jeSA9IGZyZXE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhblJlc3VsdC50aW1lc3RhbXAgPSB0c2Y7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5SZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2NhblJlc3VsdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWZpU3NpZCwgYnNzaWQsIGZsYWdzLCBsZXZlbCwgZnJlcSwgdHNmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2NhblJlc3VsdENhY2hlLnB1dChrZXksIHNjYW5SZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbVNjYW5SZXN1bHRzLmFkZChzY2FuUmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBic3NpZCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGxldmVsID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZnJlcSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHRzZiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGZsYWdzID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgIHdpZmlTc2lkID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEZldGNoIFJTU0kgYW5kIGxpbmtzcGVlZCBvbiBjdXJyZW50IGNvbm5lY3Rpb24KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgZmV0Y2hSc3NpQW5kTGlua1NwZWVkTmF0aXZlKCkgewotICAgICAgICBpbnQgbmV3UnNzaSA9IC0xOwotICAgICAgICBpbnQgbmV3TGlua1NwZWVkID0gLTE7Ci0KLSAgICAgICAgU3RyaW5nIHNpZ25hbFBvbGwgPSBtV2lmaU5hdGl2ZS5zaWduYWxQb2xsKCk7Ci0KLSAgICAgICAgaWYgKHNpZ25hbFBvbGwgIT0gbnVsbCkgewotICAgICAgICAgICAgU3RyaW5nW10gbGluZXMgPSBzaWduYWxQb2xsLnNwbGl0KCJcbiIpOwotICAgICAgICAgICAgZm9yIChTdHJpbmcgbGluZSA6IGxpbmVzKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nW10gcHJvcCA9IGxpbmUuc3BsaXQoIj0iKTsKLSAgICAgICAgICAgICAgICBpZiAocHJvcC5sZW5ndGggPCAyKSBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcFswXS5lcXVhbHMoIlJTU0kiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV3UnNzaSA9IEludGVnZXIucGFyc2VJbnQocHJvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcFswXS5lcXVhbHMoIkxJTktTUEVFRCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdMaW5rU3BlZWQgPSBJbnRlZ2VyLnBhcnNlSW50KHByb3BbMV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9JZ25vcmUsIGRlZmF1bHRzIG9uIHJzc2kgYW5kIGxpbmtzcGVlZCBhcmUgYXNzaWduZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmV3UnNzaSAhPSAtMSAmJiBNSU5fUlNTSSA8IG5ld1Jzc2kgJiYgbmV3UnNzaSA8IE1BWF9SU1NJKSB7IC8vIHNjcmVlbiBvdXQgaW52YWxpZCB2YWx1ZXMKLSAgICAgICAgICAgIC8qIHNvbWUgaW1wbGVtZW50YXRpb25zIGF2b2lkIG5lZ2F0aXZlIHZhbHVlcyBieSBhZGRpbmcgMjU2Ci0gICAgICAgICAgICAgKiBzbyB3ZSBuZWVkIHRvIGFkanVzdCBmb3IgdGhhdCBoZXJlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAobmV3UnNzaSA+IDApIG5ld1Jzc2kgLT0gMjU2OwotICAgICAgICAgICAgbVdpZmlJbmZvLnNldFJzc2kobmV3UnNzaSk7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogUmF0aGVyIHRoZW4gc2VuZGluZyB0aGUgcmF3IFJTU0kgb3V0IGV2ZXJ5IHRpbWUgaXQKLSAgICAgICAgICAgICAqIGNoYW5nZXMsIHdlIHByZWNhbGN1bGF0ZSB0aGUgc2lnbmFsIGxldmVsIHRoYXQgd291bGQKLSAgICAgICAgICAgICAqIGJlIGRpc3BsYXllZCBpbiB0aGUgc3RhdHVzIGJhciwgYW5kIG9ubHkgc2VuZCB0aGUKLSAgICAgICAgICAgICAqIGJyb2FkY2FzdCBpZiB0aGF0IG11Y2ggbW9yZSBjb2Fyc2UtZ3JhaW5lZCBudW1iZXIKLSAgICAgICAgICAgICAqIGNoYW5nZXMuIFRoaXMgY3V0cyBkb3duIGdyZWF0bHkgb24gdGhlIG51bWJlciBvZgotICAgICAgICAgICAgICogYnJvYWRjYXN0cywgYXQgdGhlIGNvc3Qgb2Ygbm90IGluZm9ybWluZyBvdGhlcnMKLSAgICAgICAgICAgICAqIGludGVyZXN0ZWQgaW4gUlNTSSBvZiBhbGwgdGhlIGNoYW5nZXMgaW4gc2lnbmFsCi0gICAgICAgICAgICAgKiBsZXZlbC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW50IG5ld1NpZ25hbExldmVsID0gV2lmaU1hbmFnZXIuY2FsY3VsYXRlU2lnbmFsTGV2ZWwobmV3UnNzaSwgV2lmaU1hbmFnZXIuUlNTSV9MRVZFTFMpOwotICAgICAgICAgICAgaWYgKG5ld1NpZ25hbExldmVsICE9IG1MYXN0U2lnbmFsTGV2ZWwpIHsKLSAgICAgICAgICAgICAgICBzZW5kUnNzaUNoYW5nZUJyb2FkY2FzdChuZXdSc3NpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1MYXN0U2lnbmFsTGV2ZWwgPSBuZXdTaWduYWxMZXZlbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1XaWZpSW5mby5zZXRSc3NpKE1JTl9SU1NJKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZXdMaW5rU3BlZWQgIT0gLTEpIHsKLSAgICAgICAgICAgIG1XaWZpSW5mby5zZXRMaW5rU3BlZWQobmV3TGlua1NwZWVkKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogRmV0Y2ggVFggcGFja2V0IGNvdW50ZXJzIG9uIGN1cnJlbnQgY29ubmVjdGlvbgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBmZXRjaFBrdGNudE5hdGl2ZShSc3NpUGFja2V0Q291bnRJbmZvIGluZm8pIHsKLSAgICAgICAgU3RyaW5nIHBrdGNudFBvbGwgPSBtV2lmaU5hdGl2ZS5wa3RjbnRQb2xsKCk7Ci0KLSAgICAgICAgaWYgKHBrdGNudFBvbGwgIT0gbnVsbCkgewotICAgICAgICAgICAgU3RyaW5nW10gbGluZXMgPSBwa3RjbnRQb2xsLnNwbGl0KCJcbiIpOwotICAgICAgICAgICAgZm9yIChTdHJpbmcgbGluZSA6IGxpbmVzKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nW10gcHJvcCA9IGxpbmUuc3BsaXQoIj0iKTsKLSAgICAgICAgICAgICAgICBpZiAocHJvcC5sZW5ndGggPCAyKSBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcFswXS5lcXVhbHMoIlRYR09PRCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnR4Z29vZCA9IEludGVnZXIucGFyc2VJbnQocHJvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcFswXS5lcXVhbHMoIlRYQkFEIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8udHhiYWQgPSBJbnRlZ2VyLnBhcnNlSW50KHByb3BbMV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9JZ25vcmUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVcGRhdGVzIG1MaW5rUHJvcGVydGllcyBieSBtZXJnaW5nIGluZm9ybWF0aW9uIGZyb20gdmFyaW91cyBzb3VyY2VzLgotICAgICAqCi0gICAgICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgaW5mb3JtYXRpb24gaW4gbUxpbmtQcm9wZXJ0aWVzIGNvbWVzIGZyb20gbXVsdGlwbGUgc291cmNlcyAoREhDUCwKLSAgICAgKiBuZXRsaW5rLCBzdGF0aWMgY29uZmlndXJhdGlvbiwgLi4uKS4gV2hlbiBvbmUgb2YgdGhlc2Ugc291cmNlcyBvZiBpbmZvcm1hdGlvbiBoYXMgdXBkYXRlZAotICAgICAqIGxpbmsgcHJvcGVydGllcywgd2UgY2FuJ3QganVzdCBhc3NpZ24gdGhlbSB0byBtTGlua1Byb3BlcnRpZXMgb3Igd2UnZCBsb3NlIHRyYWNrIG9mIHRoZQotICAgICAqIGluZm9ybWF0aW9uIHRoYXQgY2FtZSBmcm9tIG90aGVyIHNvdXJjZXMuIEluc3RlYWQsIHdoZW4gb25lIG9mIHRob3NlIHNvdXJjZXMgaGFzIG5ldwotICAgICAqIGluZm9ybWF0aW9uLCB3ZSB1cGRhdGUgdGhlIG9iamVjdCB0aGF0IHRyYWNrcyB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGF0IHNvdXJjZSBhbmQgdGhlbgotICAgICAqIGNhbGwgdGhpcyBtZXRob2QgdG8gYXBwbHkgdGhlIGNoYW5nZSB0byBtTGlua1Byb3BlcnRpZXMuCi0gICAgICoKLSAgICAgKiBUaGUgaW5mb3JtYXRpb24gaW4gbUxpbmtQcm9wZXJ0aWVzIGlzIGN1cnJlbnRseSBvYnRhaW5lZCBhcyBmb2xsb3dzOgotICAgICAqIC0gSW50ZXJmYWNlIG5hbWU6IHNldCBpbiB0aGUgY29uc3RydWN0b3IuCi0gICAgICogLSBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlczogbmV0bGluaywgdmlhIG1JbnRlcmZhY2VPYnNlcnZlci4KLSAgICAgKiAtIElQdjQgcm91dGVzLCBETlMgc2VydmVycywgYW5kIGRvbWFpbnM6IERIQ1AuCi0gICAgICogLSBIVFRQIHByb3h5OiB0aGUgd2lmaSBjb25maWcgc3RvcmUuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxpbmtQcm9wZXJ0aWVzKCkgewotICAgICAgICBMaW5rUHJvcGVydGllcyBuZXdMcCA9IG5ldyBMaW5rUHJvcGVydGllcygpOwotCi0gICAgICAgIC8vIEludGVyZmFjZSBuYW1lIGFuZCBwcm94eSBhcmUgbG9jYWxseSBjb25maWd1cmVkLgotICAgICAgICBuZXdMcC5zZXRJbnRlcmZhY2VOYW1lKG1JbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgbmV3THAuc2V0SHR0cFByb3h5KG1XaWZpQ29uZmlnU3RvcmUuZ2V0UHJveHlQcm9wZXJ0aWVzKG1MYXN0TmV0d29ya0lkKSk7Ci0KLSAgICAgICAgLy8gSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMgY29tZSBmcm9tIG5ldGxpbmsuCi0gICAgICAgIG5ld0xwLnNldExpbmtBZGRyZXNzZXMobU5ldGxpbmtMaW5rUHJvcGVydGllcy5nZXRMaW5rQWRkcmVzc2VzKCkpOwotCi0gICAgICAgIC8vIEZvciBub3csIHJvdXRpbmcgYW5kIEROUyBvbmx5IGNvbWUgZnJvbSBESENQIG9yIHN0YXRpYyBjb25maWd1cmF0aW9uLiBJbiB0aGUgZnV0dXJlLAotICAgICAgICAvLyB3ZSdsbCBuZWVkIHRvIG1lcmdlIElQdjYgRE5TIHNlcnZlcnMgYW5kIGRvbWFpbnMgY29taW5nIGZyb20gbmV0bGluay4KLSAgICAgICAgc3luY2hyb25pemVkIChtRGhjcFJlc3VsdHNMb2NrKSB7Ci0gICAgICAgICAgICAvLyBFdmVuIHdoZW4gd2UncmUgdXNpbmcgc3RhdGljIGNvbmZpZ3VyYXRpb24sIHdlIGRvbid0IG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlnCi0gICAgICAgICAgICAvLyBzdG9yZSwgYmVjYXVzZSBzdGF0aWMgSVAgY29uZmlndXJhdGlvbiBhbHNvIHBvcHVsYXRlcyBtRGhjcFJlc3VsdHMuCi0gICAgICAgICAgICBpZiAoKG1EaGNwUmVzdWx0cyAhPSBudWxsKSAmJiAobURoY3BSZXN1bHRzLmxpbmtQcm9wZXJ0aWVzICE9IG51bGwpKSB7Ci0gICAgICAgICAgICAgICAgTGlua1Byb3BlcnRpZXMgbHAgPSBtRGhjcFJlc3VsdHMubGlua1Byb3BlcnRpZXM7Ci0gICAgICAgICAgICAgICAgZm9yIChSb3V0ZUluZm8gcm91dGU6IGxwLmdldFJvdXRlcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0xwLmFkZFJvdXRlKHJvdXRlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChJbmV0QWRkcmVzcyBkbnM6IGxwLmdldERuc2VzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3THAuYWRkRG5zKGRucyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5ld0xwLnNldERvbWFpbnMobHAuZ2V0RG9tYWlucygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIGFueXRoaW5nIGhhcyBjaGFuZ2VkLCBhbmQgd2UncmUgYWxyZWFkeSBjb25uZWN0ZWQsIHNlbmQgb3V0IGEgbm90aWZpY2F0aW9uLgotICAgICAgICAvLyBJZiB3ZSdyZSBzdGlsbCBjb25uZWN0aW5nLCBhcHBzIHdpbGwgYmUgbm90aWZpZWQgd2hlbiB3ZSBjb25uZWN0LgotICAgICAgICBpZiAoIW5ld0xwLmVxdWFscyhtTGlua1Byb3BlcnRpZXMpKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSB7Ci0gICAgICAgICAgICAgICAgbG9nKCJMaW5rIGNvbmZpZ3VyYXRpb24gY2hhbmdlZCBmb3IgbmV0SWQ6ICIgKyBtTGFzdE5ldHdvcmtJZAotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIG9sZDogIiArIG1MaW5rUHJvcGVydGllcyArICJuZXc6ICIgKyBuZXdMcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtTGlua1Byb3BlcnRpZXMgPSBuZXdMcDsKLSAgICAgICAgICAgIGlmIChnZXROZXR3b3JrRGV0YWlsZWRTdGF0ZSgpID09IERldGFpbGVkU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgICAgICAgc2VuZExpbmtDb25maWd1cmF0aW9uQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xlYXJzIGFsbCBvdXIgbGluayBwcm9wZXJ0aWVzLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBjbGVhckxpbmtQcm9wZXJ0aWVzKCkgewotICAgICAgICAvLyBJZiB0aGUgbmV0d29yayB1c2VkIERIQ1AsIGNsZWFyIHRoZSBMaW5rUHJvcGVydGllcyB3ZSBzdG9yZWQgaW4gdGhlIGNvbmZpZyBzdG9yZS4KLSAgICAgICAgaWYgKCFtV2lmaUNvbmZpZ1N0b3JlLmlzVXNpbmdTdGF0aWNJcChtTGFzdE5ldHdvcmtJZCkpIHsKLSAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuY2xlYXJMaW5rUHJvcGVydGllcyhtTGFzdE5ldHdvcmtJZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGluayBwcm9wZXJ0aWVzIG9idGFpbmVkIGZyb20gREhDUCBhbmQgbmV0bGluay4KLSAgICAgICAgc3luY2hyb25pemVkKG1EaGNwUmVzdWx0c0xvY2spIHsKLSAgICAgICAgICAgIGlmIChtRGhjcFJlc3VsdHMgIT0gbnVsbCAmJiBtRGhjcFJlc3VsdHMubGlua1Byb3BlcnRpZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1EaGNwUmVzdWx0cy5saW5rUHJvcGVydGllcy5jbGVhcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1OZXRsaW5rTGlua1Byb3BlcnRpZXMuY2xlYXIoKTsKLQotICAgICAgICAvLyBOb3cgY2xlYXIgdGhlIG1lcmdlZCBsaW5rIHByb3BlcnRpZXMuCi0gICAgICAgIG1MaW5rUHJvcGVydGllcy5jbGVhcigpOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGdldE1heERoY3BSZXRyaWVzKCkgewotICAgICAgICByZXR1cm4gU2V0dGluZ3MuR2xvYmFsLmdldEludChtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfTUFYX0RIQ1BfUkVUUllfQ09VTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfTUFYX0RIQ1BfUkVUUklFUyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRTY2FuUmVzdWx0c0F2YWlsYWJsZUJyb2FkY2FzdCgpIHsKLSAgICAgICAgbm90ZVNjYW5FbmQoKTsKLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuU0NBTl9SRVNVTFRTX0FWQUlMQUJMRV9BQ1RJT04pOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKLSAgICAgICAgbUNvbnRleHQuc2VuZEJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2VuZFJzc2lDaGFuZ2VCcm9hZGNhc3QoZmluYWwgaW50IG5ld1Jzc2kpIHsKLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuUlNTSV9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTkVXX1JTU0ksIG5ld1Jzc2kpOwotICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZW5kTmV0d29ya1N0YXRlQ2hhbmdlQnJvYWRjYXN0KFN0cmluZyBic3NpZCkgewotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpTWFuYWdlci5ORVRXT1JLX1NUQVRFX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9ORVRXT1JLX0lORk8sIG5ldyBOZXR3b3JrSW5mbyhtTmV0d29ya0luZm8pKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX0xJTktfUFJPUEVSVElFUywgbmV3IExpbmtQcm9wZXJ0aWVzIChtTGlua1Byb3BlcnRpZXMpKTsKLSAgICAgICAgaWYgKGJzc2lkICE9IG51bGwpCi0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfQlNTSUQsIGJzc2lkKTsKLSAgICAgICAgaWYgKG1OZXR3b3JrSW5mby5nZXREZXRhaWxlZFN0YXRlKCkgPT0gRGV0YWlsZWRTdGF0ZS5WRVJJRllJTkdfUE9PUl9MSU5LIHx8Ci0gICAgICAgICAgICAgICAgbU5ldHdvcmtJbmZvLmdldERldGFpbGVkU3RhdGUoKSA9PSBEZXRhaWxlZFN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1dJRklfSU5GTywgbmV3IFdpZmlJbmZvKG1XaWZpSW5mbykpOwotICAgICAgICB9Ci0gICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRMaW5rQ29uZmlndXJhdGlvbkNoYW5nZWRCcm9hZGNhc3QoKSB7Ci0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLkxJTktfQ09ORklHVVJBVElPTl9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTElOS19QUk9QRVJUSUVTLCBuZXcgTGlua1Byb3BlcnRpZXMobUxpbmtQcm9wZXJ0aWVzKSk7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRTdXBwbGljYW50Q29ubmVjdGlvbkNoYW5nZWRCcm9hZGNhc3QoYm9vbGVhbiBjb25uZWN0ZWQpIHsKLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuU1VQUExJQ0FOVF9DT05ORUNUSU9OX0NIQU5HRV9BQ1RJT04pOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1NVUFBMSUNBTlRfQ09OTkVDVEVELCBjb25uZWN0ZWQpOwotICAgICAgICBtQ29udGV4dC5zZW5kQnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlY29yZCB0aGUgZGV0YWlsZWQgc3RhdGUgb2YgYSBuZXR3b3JrLgotICAgICAqIEBwYXJhbSBzdGF0ZSB0aGUgbmV3IHtAY29kZSBEZXRhaWxlZFN0YXRlfQotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXROZXR3b3JrRGV0YWlsZWRTdGF0ZShOZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlIHN0YXRlKSB7Ci0gICAgICAgIGlmIChEQkcpIHsKLSAgICAgICAgICAgIGxvZygic2V0RGV0YWlsZWQgc3RhdGUsIG9sZCA9IgotICAgICAgICAgICAgICAgICAgICArIG1OZXR3b3JrSW5mby5nZXREZXRhaWxlZFN0YXRlKCkgKyAiIGFuZCBuZXcgc3RhdGU9IiArIHN0YXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGF0ZSAhPSBtTmV0d29ya0luZm8uZ2V0RGV0YWlsZWRTdGF0ZSgpKSB7Ci0gICAgICAgICAgICBtTmV0d29ya0luZm8uc2V0RGV0YWlsZWRTdGF0ZShzdGF0ZSwgbnVsbCwgbVdpZmlJbmZvLmdldFNTSUQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIERldGFpbGVkU3RhdGUgZ2V0TmV0d29ya0RldGFpbGVkU3RhdGUoKSB7Ci0gICAgICAgIHJldHVybiBtTmV0d29ya0luZm8uZ2V0RGV0YWlsZWRTdGF0ZSgpOwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBTdXBwbGljYW50U3RhdGUgaGFuZGxlU3VwcGxpY2FudFN0YXRlQ2hhbmdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICBTdGF0ZUNoYW5nZVJlc3VsdCBzdGF0ZUNoYW5nZVJlc3VsdCA9IChTdGF0ZUNoYW5nZVJlc3VsdCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IHN0YXRlQ2hhbmdlUmVzdWx0LnN0YXRlOwotICAgICAgICAvLyBTdXBwbGljYW50IHN0YXRlIGNoYW5nZQotICAgICAgICAvLyBbMzEtMTNdIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCi0gICAgICAgIC8vIFs4IC0gMF0gU3VwcGxpY2FudCBzdGF0ZSAoYXMgZGVmaW5lZCBpbiBTdXBwbGljYW50U3RhdGUuamF2YSkKLSAgICAgICAgLy8gNTAwMjMgc3VwcGxpY2FudF9zdGF0ZV9jaGFuZ2VkIChjdXN0b218MXw1KQotICAgICAgICBtV2lmaUluZm8uc2V0U3VwcGxpY2FudFN0YXRlKHN0YXRlKTsKLSAgICAgICAgLy8gTmV0d29yayBpZCBpcyBvbmx5IHZhbGlkIHdoZW4gd2Ugc3RhcnQgY29ubmVjdGluZwotICAgICAgICBpZiAoU3VwcGxpY2FudFN0YXRlLmlzQ29ubmVjdGluZyhzdGF0ZSkpIHsKLSAgICAgICAgICAgIG1XaWZpSW5mby5zZXROZXR3b3JrSWQoc3RhdGVDaGFuZ2VSZXN1bHQubmV0d29ya0lkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1XaWZpSW5mby5zZXROZXR3b3JrSWQoV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1XaWZpSW5mby5zZXRCU1NJRChzdGF0ZUNoYW5nZVJlc3VsdC5CU1NJRCk7Ci0gICAgICAgIG1XaWZpSW5mby5zZXRTU0lEKHN0YXRlQ2hhbmdlUmVzdWx0LndpZmlTc2lkKTsKLQotICAgICAgICBtU3VwcGxpY2FudFN0YXRlVHJhY2tlci5zZW5kTWVzc2FnZShNZXNzYWdlLm9idGFpbihtZXNzYWdlKSk7Ci0KLSAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlc2V0cyB0aGUgV2ktRmkgQ29ubmVjdGlvbnMgYnkgY2xlYXJpbmcgYW55IHN0YXRlLCByZXNldHRpbmcgYW55IHNvY2tldHMKLSAgICAgKiB1c2luZyB0aGUgaW50ZXJmYWNlLCBzdG9wcGluZyBESENQICYgZGlzYWJsaW5nIGludGVyZmFjZQotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBoYW5kbGVOZXR3b3JrRGlzY29ubmVjdCgpIHsKLSAgICAgICAgaWYgKERCRykgbG9nKCJTdG9wcGluZyBESENQIGFuZCBjbGVhcmluZyBJUCIpOwotCi0gICAgICAgIHN0b3BEaGNwKCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1Od1NlcnZpY2UuY2xlYXJJbnRlcmZhY2VBZGRyZXNzZXMobUludGVyZmFjZU5hbWUpOwotICAgICAgICAgICAgbU53U2VydmljZS5kaXNhYmxlSXB2NihtSW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gY2xlYXIgYWRkcmVzc2VzIG9yIGRpc2FibGUgaXB2NiIgKyBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFJlc2V0IGRhdGEgc3RydWN0dXJlcyAqLwotICAgICAgICBtV2lmaUluZm8uc2V0SW5ldEFkZHJlc3MobnVsbCk7Ci0gICAgICAgIG1XaWZpSW5mby5zZXRCU1NJRChudWxsKTsKLSAgICAgICAgbVdpZmlJbmZvLnNldFNTSUQobnVsbCk7Ci0gICAgICAgIG1XaWZpSW5mby5zZXROZXR3b3JrSWQoV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEKTsKLSAgICAgICAgbVdpZmlJbmZvLnNldFJzc2koTUlOX1JTU0kpOwotICAgICAgICBtV2lmaUluZm8uc2V0TGlua1NwZWVkKC0xKTsKLSAgICAgICAgbVdpZmlJbmZvLnNldE1ldGVyZWRIaW50KGZhbHNlKTsKLQotICAgICAgICBzZXROZXR3b3JrRGV0YWlsZWRTdGF0ZShEZXRhaWxlZFN0YXRlLkRJU0NPTk5FQ1RFRCk7Ci0gICAgICAgIG1XaWZpQ29uZmlnU3RvcmUudXBkYXRlU3RhdHVzKG1MYXN0TmV0d29ya0lkLCBEZXRhaWxlZFN0YXRlLkRJU0NPTk5FQ1RFRCk7Ci0KLSAgICAgICAgLyogQ2xlYXIgbmV0d29yayBwcm9wZXJ0aWVzICovCi0gICAgICAgIGNsZWFyTGlua1Byb3BlcnRpZXMoKTsKLQotICAgICAgICAvKiBzZW5kIGV2ZW50IHRvIENNICYgbmV0d29yayBjaGFuZ2UgYnJvYWRjYXN0ICovCi0gICAgICAgIHNlbmROZXR3b3JrU3RhdGVDaGFuZ2VCcm9hZGNhc3QobUxhc3RCc3NpZCk7Ci0KLSAgICAgICAgbUxhc3RCc3NpZD0gbnVsbDsKLSAgICAgICAgbUxhc3ROZXR3b3JrSWQgPSBXaWZpQ29uZmlndXJhdGlvbi5JTlZBTElEX05FVFdPUktfSUQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVN1cHBsaWNhbnRDb25uZWN0aW9uTG9zcygpIHsKLSAgICAgICAgLyogU29ja2V0IGNvbm5lY3Rpb24gY2FuIGJlIGxvc3Qgd2hlbiB3ZSBkbyBhIGdyYWNlZnVsIHNodXRkb3duCi0gICAgICAgICogb3Igd2hlbiB0aGUgZHJpdmVyIGlzIGh1bmcuIEVuc3VyZSBzdXBwbGljYW50IGlzIHN0b3BwZWQgaGVyZS4KLSAgICAgICAgKi8KLSAgICAgICAgbVdpZmlNb25pdG9yLmtpbGxTdXBwbGljYW50KG1QMnBTdXBwb3J0ZWQpOwotICAgICAgICBzZW5kU3VwcGxpY2FudENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KGZhbHNlKTsKLSAgICAgICAgc2V0V2lmaVN0YXRlKFdJRklfU1RBVEVfRElTQUJMRUQpOwotICAgIH0KLQotICAgIHZvaWQgaGFuZGxlUHJlRGhjcFNldHVwKCkgewotICAgICAgICBtRGhjcEFjdGl2ZSA9IHRydWU7Ci0gICAgICAgIGlmICghbUJsdWV0b290aENvbm5lY3Rpb25BY3RpdmUpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGVyZSBhcmUgcHJvYmxlbXMgc2V0dGluZyB0aGUgV2ktRmkgZHJpdmVyJ3MgcG93ZXIKLSAgICAgICAgICAgICAqIG1vZGUgdG8gYWN0aXZlIHdoZW4gYmx1ZXRvb3RoIGNvZXhpc3RlbmNlIG1vZGUgaXMKLSAgICAgICAgICAgICAqIGVuYWJsZWQgb3Igc2Vuc2UuCi0gICAgICAgICAgICAgKiA8cD4KLSAgICAgICAgICAgICAqIFdlIHNldCBXaS1GaSB0byBhY3RpdmUgbW9kZSB3aGVuCi0gICAgICAgICAgICAgKiBvYnRhaW5pbmcgYW4gSVAgYWRkcmVzcyBiZWNhdXNlIHdlJ3ZlIGZvdW5kCi0gICAgICAgICAgICAgKiBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIHNvbWUgcm91dGVycyB3aXRoIGxvdyBwb3dlcgotICAgICAgICAgICAgICogbW9kZS4KLSAgICAgICAgICAgICAqIDxwPgotICAgICAgICAgICAgICogSW4gb3JkZXIgZm9yIHRoaXMgYWN0aXZlIHBvd2VyIG1vZGUgdG8gcHJvcGVybHkgYmUgc2V0LAotICAgICAgICAgICAgICogd2UgZGlzYWJsZSBjb2V4aXN0ZW5jZSBtb2RlIHVudGlsIHdlJ3JlIGRvbmUgd2l0aAotICAgICAgICAgICAgICogb2J0YWluaW5nIGFuIElQIGFkZHJlc3MuICBPbmUgZXhjZXB0aW9uIGlzIGlmIHdlCi0gICAgICAgICAgICAgKiBhcmUgY3VycmVudGx5IGNvbm5lY3RlZCB0byBhIGhlYWRzZXQsIHNpbmNlIGRpc2FibGluZwotICAgICAgICAgICAgICogY29leGlzdGVuY2Ugd291bGQgaW50ZXJydXB0IHRoYXQgY29ubmVjdGlvbi4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgLy8gRGlzYWJsZSB0aGUgY29leGlzdGVuY2UgbW9kZQotICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0Qmx1ZXRvb3RoQ29leGlzdGVuY2VNb2RlKAotICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5CTFVFVE9PVEhfQ09FWElTVEVOQ0VfTU9ERV9ESVNBQkxFRCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBEaXNhYmxlIHBvd2VyIHNhdmUgYW5kIHN1c3BlbmQgb3B0aW1pemF0aW9ucyBkdXJpbmcgREhDUCAqLwotICAgICAgICAvLyBOb3RlOiBUaGUgb3JkZXIgaGVyZSBpcyBpbXBvcnRhbnQgZm9yIG5vdy4gQnJjbSBkcml2ZXIgY2hhbmdlcwotICAgICAgICAvLyBwb3dlciBzZXR0aW5ncyB3aGVuIHdlIGNvbnRyb2wgc3VzcGVuZCBtb2RlIG9wdGltaXphdGlvbnMuCi0gICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIGNvbW1lbnQgd2hlbiB0aGUgZHJpdmVyIGlzIGZpeGVkLgotICAgICAgICBzZXRTdXNwZW5kT3B0aW1pemF0aW9uc05hdGl2ZShTVVNQRU5EX0RVRV9UT19ESENQLCBmYWxzZSk7Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNldFBvd2VyU2F2ZShmYWxzZSk7Ci0KLSAgICAgICAgc3RvcEJhdGNoZWRTY2FuKCk7Ci0KLSAgICAgICAgLyogUDJwIGRpc2NvdmVyeSBicmVha3MgZGhjcCwgc2h1dCBpdCBkb3duIGluIG9yZGVyIHRvIGdldCB0aHJvdWdoIHRoaXMgKi8KLSAgICAgICAgTWVzc2FnZSBtc2cgPSBuZXcgTWVzc2FnZSgpOwotICAgICAgICBtc2cud2hhdCA9IFdpZmlQMnBTZXJ2aWNlLkJMT0NLX0RJU0NPVkVSWTsKLSAgICAgICAgbXNnLmFyZzEgPSBXaWZpUDJwU2VydmljZS5FTkFCTEVEOwotICAgICAgICBtc2cuYXJnMiA9IERoY3BTdGF0ZU1hY2hpbmUuQ01EX1BSRV9ESENQX0FDVElPTl9DT01QTEVURTsKLSAgICAgICAgbXNnLm9iaiA9IG1EaGNwU3RhdGVNYWNoaW5lOwotICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UobXNnKTsKLSAgICB9Ci0KLQotICAgIHZvaWQgc3RhcnREaGNwKCkgewotICAgICAgICBpZiAobURoY3BTdGF0ZU1hY2hpbmUgPT0gbnVsbCkgewotICAgICAgICAgICAgbURoY3BTdGF0ZU1hY2hpbmUgPSBEaGNwU3RhdGVNYWNoaW5lLm1ha2VEaGNwU3RhdGVNYWNoaW5lKAotICAgICAgICAgICAgICAgICAgICBtQ29udGV4dCwgV2lmaVN0YXRlTWFjaGluZS50aGlzLCBtSW50ZXJmYWNlTmFtZSk7Ci0KLSAgICAgICAgfQotICAgICAgICBtRGhjcFN0YXRlTWFjaGluZS5yZWdpc3RlckZvclByZURoY3BOb3RpZmljYXRpb24oKTsKLSAgICAgICAgbURoY3BTdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoRGhjcFN0YXRlTWFjaGluZS5DTURfU1RBUlRfREhDUCk7Ci0gICAgfQotCi0gICAgdm9pZCBzdG9wRGhjcCgpIHsKLSAgICAgICAgaWYgKG1EaGNwU3RhdGVNYWNoaW5lICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8qIEluIGNhc2Ugd2Ugd2VyZSBpbiBtaWRkbGUgb2YgREhDUCBvcGVyYXRpb24gcmVzdG9yZSBiYWNrIHBvd2VybW9kZSAqLwotICAgICAgICAgICAgaGFuZGxlUG9zdERoY3BTZXR1cCgpOwotICAgICAgICAgICAgbURoY3BTdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoRGhjcFN0YXRlTWFjaGluZS5DTURfU1RPUF9ESENQKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgaGFuZGxlUG9zdERoY3BTZXR1cCgpIHsKLSAgICAgICAgLyogUmVzdG9yZSBwb3dlciBzYXZlIGFuZCBzdXNwZW5kIG9wdGltaXphdGlvbnMgKi8KLSAgICAgICAgc2V0U3VzcGVuZE9wdGltaXphdGlvbnNOYXRpdmUoU1VTUEVORF9EVUVfVE9fREhDUCwgdHJ1ZSk7Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNldFBvd2VyU2F2ZSh0cnVlKTsKLQotICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVAycFNlcnZpY2UuQkxPQ0tfRElTQ09WRVJZLCBXaWZpUDJwU2VydmljZS5ESVNBQkxFRCk7Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBjb2V4aXN0ZW5jZSBtb2RlIGJhY2sgdG8gaXRzIGRlZmF1bHQgdmFsdWUKLSAgICAgICAgbVdpZmlOYXRpdmUuc2V0Qmx1ZXRvb3RoQ29leGlzdGVuY2VNb2RlKAotICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLkJMVUVUT09USF9DT0VYSVNURU5DRV9NT0RFX1NFTlNFKTsKLQotICAgICAgICBtRGhjcEFjdGl2ZSA9IGZhbHNlOwotCi0gICAgICAgIHN0YXJ0QmF0Y2hlZFNjYW4oKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaGFuZGxlU3VjY2Vzc2Z1bElwQ29uZmlndXJhdGlvbihEaGNwUmVzdWx0cyBkaGNwUmVzdWx0cykgewotICAgICAgICBtTGFzdFNpZ25hbExldmVsID0gLTE7IC8vIGZvcmNlIHVwZGF0ZSBvZiBzaWduYWwgc3RyZW5ndGgKLSAgICAgICAgbVJlY29ubmVjdENvdW50ID0gMDsgLy9SZXNldCBJUCBmYWlsdXJlIHRyYWNraW5nCi0gICAgICAgIHN5bmNocm9uaXplZCAobURoY3BSZXN1bHRzTG9jaykgewotICAgICAgICAgICAgbURoY3BSZXN1bHRzID0gZGhjcFJlc3VsdHM7Ci0gICAgICAgIH0KLSAgICAgICAgTGlua1Byb3BlcnRpZXMgbGlua1Byb3BlcnRpZXMgPSBkaGNwUmVzdWx0cy5saW5rUHJvcGVydGllczsKLSAgICAgICAgbVdpZmlDb25maWdTdG9yZS5zZXRMaW5rUHJvcGVydGllcyhtTGFzdE5ldHdvcmtJZCwgbmV3IExpbmtQcm9wZXJ0aWVzKGxpbmtQcm9wZXJ0aWVzKSk7Ci0gICAgICAgIEluZXRBZGRyZXNzIGFkZHIgPSBudWxsOwotICAgICAgICBJdGVyYXRvcjxJbmV0QWRkcmVzcz4gYWRkcnMgPSBsaW5rUHJvcGVydGllcy5nZXRBZGRyZXNzZXMoKS5pdGVyYXRvcigpOwotICAgICAgICBpZiAoYWRkcnMuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBhZGRyID0gYWRkcnMubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIG1XaWZpSW5mby5zZXRJbmV0QWRkcmVzcyhhZGRyKTsKLSAgICAgICAgbVdpZmlJbmZvLnNldE1ldGVyZWRIaW50KGRoY3BSZXN1bHRzLmhhc01ldGVyZWRIaW50KCkpOwotICAgICAgICB1cGRhdGVMaW5rUHJvcGVydGllcygpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBoYW5kbGVGYWlsZWRJcENvbmZpZ3VyYXRpb24oKSB7Ci0gICAgICAgIGxvZ2UoIklQIGNvbmZpZ3VyYXRpb24gZmFpbGVkIik7Ci0KLSAgICAgICAgbVdpZmlJbmZvLnNldEluZXRBZGRyZXNzKG51bGwpOwotICAgICAgICBtV2lmaUluZm8uc2V0TWV0ZXJlZEhpbnQoZmFsc2UpOwotICAgICAgICAvKioKLSAgICAgICAgICogSWYgd2UndmUgZXhjZWVkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgZm9yIERIQ1AKLSAgICAgICAgICogdG8gYSBnaXZlbiBuZXR3b3JrLCBkaXNhYmxlIHRoZSBuZXR3b3JrCi0gICAgICAgICAqLwotICAgICAgICBpbnQgbWF4UmV0cmllcyA9IGdldE1heERoY3BSZXRyaWVzKCk7Ci0gICAgICAgIC8vIG1heFJldHJpZXMgPT0gMCBtZWFucyBrZWVwIHRyeWluZyBmb3JldmVyCi0gICAgICAgIGlmIChtYXhSZXRyaWVzID4gMCAmJiArK21SZWNvbm5lY3RDb3VudCA+IG1heFJldHJpZXMpIHsKLSAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCAiICsKLSAgICAgICAgICAgICAgICAgICAgbVJlY29ubmVjdENvdW50ICsgIiB0aW1lcywgRGlzYWJsaW5nICIgKyBtTGFzdE5ldHdvcmtJZCk7Ci0gICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmRpc2FibGVOZXR3b3JrKG1MYXN0TmV0d29ya0lkLAotICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5ESVNBQkxFRF9ESENQX0ZBSUxVUkUpOwotICAgICAgICAgICAgbVJlY29ubmVjdENvdW50ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIERIQ1AgdGltZXMgb3V0IGFmdGVyIGFib3V0IDMwIHNlY29uZHMsIHdlIGRvIGEKLSAgICAgICAgICogZGlzY29ubmVjdCBhbmQgYW4gaW1tZWRpYXRlIHJlY29ubmVjdCB0byB0cnkgYWdhaW4KLSAgICAgICAgICovCi0gICAgICAgIG1XaWZpTmF0aXZlLmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgbVdpZmlOYXRpdmUucmVjb25uZWN0KCk7Ci0gICAgfQotCi0gICAgLyogQ3VycmVudCBkZXNpZ24gaXMgdG8gbm90IHNldCB0aGUgY29uZmlnIG9uIGEgcnVubmluZyBob3N0YXBkIGJ1dCBpbnN0ZWFkCi0gICAgICogc3RvcCBhbmQgc3RhcnQgdGV0aGVyaW5nIHdoZW4gdXNlciBjaGFuZ2VzIGNvbmZpZyBvbiBhIHJ1bm5pbmcgYWNjZXNzIHBvaW50Ci0gICAgICoKLSAgICAgKiBUT0RPOiBBZGQgY29udHJvbCBjaGFubmVsIHNldHVwIHRocm91Z2ggaG9zdGFwZCB0aGF0IGFsbG93cyBjaGFuZ2luZyBjb25maWcKLSAgICAgKiBvbiBhIHJ1bm5pbmcgZGFlbW9uCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHN0YXJ0U29mdEFwV2l0aENvbmZpZyhmaW5hbCBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgLy8gc3RhcnQgaG9zdGFwZCBvbiBhIHNlcGVyYXRlIHRocmVhZAotICAgICAgICBuZXcgVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnN0YXJ0QWNjZXNzUG9pbnQoY29uZmlnLCBtSW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiRXhjZXB0aW9uIGluIHNvZnRhcCBzdGFydCAiICsgZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnN0b3BBY2Nlc3NQb2ludChtSW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnN0YXJ0QWNjZXNzUG9pbnQoY29uZmlnLCBtSW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRXhjZXB0aW9uIGluIHNvZnRhcCByZS1zdGFydCAiICsgZTEpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX0FQX0ZBSUxVUkUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiU29mdCBBUCBzdGFydCBzdWNjZXNzZnVsIik7Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX0FQX1NVQ0NFU1MpOwotICAgICAgICAgICAgfQotICAgICAgICB9KS5zdGFydCgpOwotICAgIH0KLQotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIEhTTSBzdGF0ZXMKLSAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICAgIGNsYXNzIERlZmF1bHRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFzeW5jQ2hhbm5lbC5DTURfQ0hBTk5FTF9IQUxGX0NPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSBBc3luY0NoYW5uZWwuU1RBVFVTX1NVQ0NFU1NGVUwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpUDJwQ2hhbm5lbC5zZW5kTWVzc2FnZShBc3luY0NoYW5uZWwuQ01EX0NIQU5ORUxfRlVMTF9DT05ORUNUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIldpZmlQMnBTZXJ2aWNlIGNvbm5lY3Rpb24gZmFpbHVyZSwgZXJyb3I9IiArIG1lc3NhZ2UuYXJnMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBBc3luY0NoYW5uZWwuQ01EX0NIQU5ORUxfRElTQ09OTkVDVEVEOgotICAgICAgICAgICAgICAgICAgICBsb2dlKCJXaWZpUDJwU2VydmljZSBjaGFubmVsIGxvc3QsIG1lc3NhZ2UuYXJnMSA9IiArIG1lc3NhZ2UuYXJnMSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vVE9ETzogUmUtZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc3RhdGUgbWFjaGluZSBhZnRlciBhIGRlbGF5Ci0gICAgICAgICAgICAgICAgICAgIC8vbVdpZmlQMnBDaGFubmVsLmNvbm5lY3QobUNvbnRleHQsIGdldEhhbmRsZXIoKSwgbVdpZmlQMnBNYW5hZ2VyLmdldE1lc3NlbmdlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfQkxVRVRPT1RIX0FEQVBURVJfU1RBVEVfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICBtQmx1ZXRvb3RoQ29ubmVjdGlvbkFjdGl2ZSA9IChtZXNzYWdlLmFyZzEgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbHVldG9vdGhBZGFwdGVyLlNUQVRFX0RJU0NPTk5FQ1RFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAvKiBTeW5jaHJvbm91cyBjYWxsIHJldHVybnMgKi8KLSAgICAgICAgICAgICAgICBjYXNlIENNRF9QSU5HX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfRU5BQkxFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfQUREX09SX1VQREFURV9ORVRXT1JLOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFTU9WRV9ORVRXT1JLOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NBVkVfQ09ORklHOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlLndoYXQsIEZBSUxVUkUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9HRVRfQ09ORklHVVJFRF9ORVRXT1JLUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgbWVzc2FnZS53aGF0LCAoTGlzdDxXaWZpQ29uZmlndXJhdGlvbj4pIG51bGwpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9FTkFCTEVfUlNTSV9QT0xMOgotICAgICAgICAgICAgICAgICAgICBtRW5hYmxlUnNzaVBvbGxpbmcgPSAobWVzc2FnZS5hcmcxID09IDEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9FTkFCTEVfQkFDS0dST1VORF9TQ0FOOgotICAgICAgICAgICAgICAgICAgICBtRW5hYmxlQmFja2dyb3VuZFNjYW4gPSAobWVzc2FnZS5hcmcxID09IDEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfSElHSF9QRVJGX01PREU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VzcGVuZE9wdGltaXphdGlvbnMoU1VTUEVORF9EVUVfVE9fSElHSF9QRVJGLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdXNwZW5kT3B0aW1pemF0aW9ucyhTVVNQRU5EX0RVRV9UT19ISUdIX1BFUkYsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0JPT1RfQ09NUExFVEVEOgotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY291bnRyeUNvZGUgPSBtUGVyc2lzdGVkQ291bnRyeUNvZGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShjb3VudHJ5Q29kZSkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5wdXRTdHJpbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX0NPVU5UUllfQ09ERSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgbWF5IGJlIHRoYXQgdGhlIHN0YXRlIHRyYW5zaXRpb24gdGhhdCBzaG91bGQgc2VuZCB0aGlzIGluZm8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBkcml2ZXIgaGFwcGVuZWQgYmV0d2VlbiBtUGVyc2lzdGVkQ291bnRyeUNvZGUgZ2V0dGluZyBzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBub3csIHNvIHNpbXBseSBwZXJzaXN0aW5nIGl0IGhlcmUgd291bGQgbWVhbiB3ZSBoYXZlIHNlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gdGhlIGRyaXZlci4gIFNlbmQgdGhlIGNtZCBzbyBpdCBtaWdodCBiZSBzZXQgbm93LgotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VBdEZyb250T2ZRdWV1ZShDTURfU0VUX0NPVU5UUllfQ09ERSwgY291bnRyeUNvZGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9CQVRDSEVEX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZEJhdGNoZWRTY2FuU2V0dGluZ3MobWVzc2FnZS5hcmcxLCBtZXNzYWdlLmFyZzIsIChCdW5kbGUpbWVzc2FnZS5vYmopOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9QT0xMX0JBVENIRURfU0NBTjoKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlQmF0Y2hlZFNjYW5Qb2xsUmVxdWVzdCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9ORVhUX0JBVENIRURfU0NBTjoKLSAgICAgICAgICAgICAgICAgICAgc3RhcnROZXh0QmF0Y2hlZFNjYW4oKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIERpc2NhcmQgKi8KLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TQ0FOOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9TVVBQTElDQU5UOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVF9GQUlMRUQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RFTEFZRURfU1RPUF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfRFJJVkVSX1NUQVJUX1RJTUVEX09VVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9DQVBUSVZFX0NIRUNLX0NPTVBMRVRFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQX1NVQ0NFU1M6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVBfRkFJTFVSRToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfVEVUSEVSX05PVElGSUNBVElPTl9USU1FRF9PVVQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfRElTQ09OTkVDVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUNPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVBU1NPQ0lBVEU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVMT0FEX1RMU19BTkRfUkVDT05ORUNUOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfRElTQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLk5FVFdPUktfQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLk5FVFdPUktfRElTQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNDQU5fUkVTVUxUU19FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkFTU09DSUFUSU9OX1JFSkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19PVkVSTEFQX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0JMQUNLTElTVF9ORVRXT1JLOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0NMRUFSX0JMQUNLTElTVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SU1NJX1BPTEw6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfRU5BQkxFX0FMTF9ORVRXT1JLUzoKLSAgICAgICAgICAgICAgICBjYXNlIERoY3BTdGF0ZU1hY2hpbmUuQ01EX1BSRV9ESENQX0FDVElPTjoKLSAgICAgICAgICAgICAgICBjYXNlIERoY3BTdGF0ZU1hY2hpbmUuQ01EX1BPU1RfREhDUF9BQ1RJT046Ci0gICAgICAgICAgICAgICAgLyogSGFuZGxlZCBieSBXaWZpQXBDb25maWdTdG9yZSAqLwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9BUF9DT05GSUc6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0FQX0NPTkZJR19DT01QTEVURUQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVRVUVTVF9BUF9DT05GSUc6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVTUE9OU0VfQVBfQ09ORklHOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lLlBPT1JfTElOS19ERVRFQ1RFRDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZS5HT09EX0xJTktfREVURUNURUQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfTk9fTkVUV09SS1NfUEVSSU9ESUNfU0NBTjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9ESVNBQkxFX1AyUF9SU1A6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRGhjcFN0YXRlTWFjaGluZS5DTURfT05fUVVJVDoKLSAgICAgICAgICAgICAgICAgICAgbURoY3BTdGF0ZU1hY2hpbmUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfU1VTUEVORF9PUFRfRU5BQkxFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU3VzcGVuZFdha2VMb2NrLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zKFNVU1BFTkRfRFVFX1RPX1NDUkVFTiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdXNwZW5kT3B0aW1pemF0aW9ucyhTVVNQRU5EX0RVRV9UT19TQ1JFRU4sIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkRSSVZFUl9IVU5HX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBzZXRTdXBwbGljYW50UnVubmluZyhmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldFN1cHBsaWNhbnRSdW5uaW5nKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNPTk5FQ1RfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuQ09OTkVDVF9ORVRXT1JLX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5GT1JHRVRfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuRk9SR0VUX05FVFdPUktfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuU0FWRV9ORVRXT1JLX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5TVEFSVF9XUFM6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLldQU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuQ0FOQ0VMX1dQUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuQ0FOQ0VMX1dQU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuRElTQUJMRV9ORVRXT1JLOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5ESVNBQkxFX05FVFdPUktfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlJTU0lfUEtUQ05UX0ZFVENIOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycFNlcnZpY2UuUDJQX0NPTk5FQ1RJT05fQ0hBTkdFRDoKLSAgICAgICAgICAgICAgICAgICAgTmV0d29ya0luZm8gaW5mbyA9IChOZXR3b3JrSW5mbykgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIG1QMnBDb25uZWN0ZWQuc2V0KGluZm8uaXNDb25uZWN0ZWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycFNlcnZpY2UuRElTQ09OTkVDVF9XSUZJX1JFUVVFU1Q6Ci0gICAgICAgICAgICAgICAgICAgIG1UZW1wb3JhcmlseURpc2Nvbm5lY3RXaWZpID0gKG1lc3NhZ2UuYXJnMSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycFNlcnZpY2UuRElTQ09OTkVDVF9XSUZJX1JFU1BPTlNFKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfSVBfQUREUkVTU19VUERBVEVEOgotICAgICAgICAgICAgICAgICAgICAvLyBhZGRMaW5rQWRkcmVzcyBpcyBhIG5vLW9wIGlmIGNhbGxlZCBtb3JlIHRoYW4gb25jZSB3aXRoIHRoZSBzYW1lIGFkZHJlc3MuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtTmV0bGlua0xpbmtQcm9wZXJ0aWVzLmFkZExpbmtBZGRyZXNzKChMaW5rQWRkcmVzcykgbWVzc2FnZS5vYmopKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVMaW5rUHJvcGVydGllcygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0lQX0FERFJFU1NfUkVNT1ZFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1OZXRsaW5rTGlua1Byb3BlcnRpZXMucmVtb3ZlTGlua0FkZHJlc3MoKExpbmtBZGRyZXNzKSBtZXNzYWdlLm9iaikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUxpbmtQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiRXJyb3IhIHVuaGFuZGxlZCBtZXNzYWdlIiArIG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgSW5pdGlhbFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBtV2lmaU5hdGl2ZS51bmxvYWREcml2ZXIoKTsKLQotICAgICAgICAgICAgaWYgKG1XaWZpUDJwQ2hhbm5lbCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVdpZmlQMnBDaGFubmVsID0gbmV3IEFzeW5jQ2hhbm5lbCgpOwotICAgICAgICAgICAgICAgIG1XaWZpUDJwQ2hhbm5lbC5jb25uZWN0KG1Db250ZXh0LCBnZXRIYW5kbGVyKCksIG1XaWZpUDJwTWFuYWdlci5nZXRNZXNzZW5nZXIoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtV2lmaUFwQ29uZmlnQ2hhbm5lbCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVdpZmlBcENvbmZpZ0NoYW5uZWwgPSBuZXcgQXN5bmNDaGFubmVsKCk7Ci0gICAgICAgICAgICAgICAgV2lmaUFwQ29uZmlnU3RvcmUgd2lmaUFwQ29uZmlnU3RvcmUgPSBXaWZpQXBDb25maWdTdG9yZS5tYWtlV2lmaUFwQ29uZmlnU3RvcmUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dCwgZ2V0SGFuZGxlcigpKTsKLSAgICAgICAgICAgICAgICB3aWZpQXBDb25maWdTdG9yZS5sb2FkQXBDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgbVdpZmlBcENvbmZpZ0NoYW5uZWwuY29ubmVjdFN5bmMobUNvbnRleHQsIGdldEhhbmRsZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZmlBcENvbmZpZ1N0b3JlLmdldE1lc3NlbmdlcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5sb2FkRHJpdmVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS53aWZpRmlybXdhcmVSZWxvYWQobUludGVyZmFjZU5hbWUsICJTVEEiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHJlbG9hZCBTVEEgZmlybXdhcmUgIiArIGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBydW50aW1lIGNyYXNoIGNhbiBsZWF2ZSB0aGUgaW50ZXJmYWNlIHVwIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgYWZmZWN0cyBjb25uZWN0aXZpdHkgd2hlbiBzdXBwbGljYW50IHN0YXJ0cyB1cC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgaW50ZXJmYWNlIGlzIGRvd24gYmVmb3JlIGEgc3VwcGxpY2FudCBzdGFydC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnNldEludGVyZmFjZURvd24obUludGVyZmFjZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBwcml2YWN5IGV4dGVuc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnNldEludGVyZmFjZUlwdjZQcml2YWN5RXh0ZW5zaW9ucyhtSW50ZXJmYWNlTmFtZSwgdHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElQdjYgaXMgZW5hYmxlZCBvbmx5IGFzIGxvbmcgYXMgYWNjZXNzIHBvaW50IGlzIGNvbm5lY3RlZCBzaW5jZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0gSVB2NiBhZGRyZXNzZXMgYW5kIHJvdXRlcyBzdGljayBhcm91bmQgYWZ0ZXIgZGlzY29ubmVjdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBrZXJuZWwgaXMgdW5hd2FyZSB3aGVuIGNvbm5lY3RlZCBhbmQgZmFpbHMgdG8gc3RhcnQgSVB2NiBuZWdvdGlhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBrZXJuZWwgY2FuIHN0YXJ0IGF1dG9jb25maWd1cmF0aW9uIHdoZW4gODAyLjF4IGlzIG5vdCBjb21wbGV0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2UuZGlzYWJsZUlwdjYobUludGVyZmFjZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5hYmxlIHRvIGNoYW5nZSBpbnRlcmZhY2Ugc2V0dGluZ3M6ICIgKyByZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmFibGUgdG8gY2hhbmdlIGludGVyZmFjZSBzZXR0aW5nczogIiArIGllKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAvKiBTdG9wIGEgcnVubmluZyBzdXBwbGljYW50IGFmdGVyIGEgcnVudGltZSByZXN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAqIEF2b2lkcyBpc3N1ZXMgd2l0aCBkcml2ZXJzIHRoYXQgZG8gbm90IGhhbmRsZSBpbnRlcmZhY2UgZG93bgotICAgICAgICAgICAgICAgICAgICAgICAgKiBvbiBhIHJ1bm5pbmcgc3VwcGxpY2FudCBwcm9wZXJseS4KLSAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU1vbml0b3Iua2lsbFN1cHBsaWNhbnQobVAycFN1cHBvcnRlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihtV2lmaU5hdGl2ZS5zdGFydFN1cHBsaWNhbnQobVAycFN1cHBvcnRlZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRXaWZpU3RhdGUoV0lGSV9TVEFURV9FTkFCTElORyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJTdXBwbGljYW50IHN0YXJ0IHN1Y2Nlc3NmdWwiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU1vbml0b3Iuc3RhcnRNb25pdG9yaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1TdXBwbGljYW50U3RhcnRpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzdGFydCBzdXBwbGljYW50ISIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGxvYWQgZHJpdmVyIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5sb2FkRHJpdmVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFdpZmlBcFN0YXRlKFdJRklfQVBfU1RBVEVfRU5BQkxJTkcpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Tb2Z0QXBTdGFydGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBsb2FkIGRyaXZlciBmb3Igc29mdGFwIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFN1cHBsaWNhbnRTdGFydGluZ1N0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVdwc0RldGFpbHMoKSB7Ci0gICAgICAgICAgICBTdHJpbmcgZGV0YWlsOwotICAgICAgICAgICAgZGV0YWlsID0gU3lzdGVtUHJvcGVydGllcy5nZXQoInJvLnByb2R1Y3QubmFtZSIsICIiKTsKLSAgICAgICAgICAgIGlmICghbVdpZmlOYXRpdmUuc2V0RGV2aWNlTmFtZShkZXRhaWwpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHNldCBkZXZpY2UgbmFtZSAiICsgIGRldGFpbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXRhaWwgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldCgicm8ucHJvZHVjdC5tYW51ZmFjdHVyZXIiLCAiIik7Ci0gICAgICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnNldE1hbnVmYWN0dXJlcihkZXRhaWwpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHNldCBtYW51ZmFjdHVyZXIgIiArIGRldGFpbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXRhaWwgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldCgicm8ucHJvZHVjdC5tb2RlbCIsICIiKTsKLSAgICAgICAgICAgIGlmICghbVdpZmlOYXRpdmUuc2V0TW9kZWxOYW1lKGRldGFpbCkpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IG1vZGVsIG5hbWUgIiArIGRldGFpbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXRhaWwgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldCgicm8ucHJvZHVjdC5tb2RlbCIsICIiKTsKLSAgICAgICAgICAgIGlmICghbVdpZmlOYXRpdmUuc2V0TW9kZWxOdW1iZXIoZGV0YWlsKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgbW9kZWwgbnVtYmVyICIgKyBkZXRhaWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGV0YWlsID0gU3lzdGVtUHJvcGVydGllcy5nZXQoInJvLnNlcmlhbG5vIiwgIiIpOwotICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXRTZXJpYWxOdW1iZXIoZGV0YWlsKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgc2VyaWFsIG51bWJlciAiICsgZGV0YWlsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghbVdpZmlOYXRpdmUuc2V0Q29uZmlnTWV0aG9kcygicGh5c2ljYWxfZGlzcGxheSB2aXJ0dWFsX3B1c2hfYnV0dG9uIikpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IFdQUyBjb25maWcgbWV0aG9kcyIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXREZXZpY2VUeXBlKG1QcmltYXJ5RGV2aWNlVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IHByaW1hcnkgZGV2aWNlIHR5cGUgIiArIG1QcmltYXJ5RGV2aWNlVHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJTdXBwbGljYW50IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0V2lmaVN0YXRlKFdJRklfU1RBVEVfRU5BQkxFRCk7Ci0gICAgICAgICAgICAgICAgICAgIG1TdXBwbGljYW50UmVzdGFydENvdW50ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIHN1cHBsaWNhbnQgc3RhdGUgdG8gaW5kaWNhdGUgdGhlIHN1cHBsaWNhbnQKLSAgICAgICAgICAgICAgICAgICAgICogc3RhdGUgaXMgbm90IGtub3duIGF0IHRoaXMgdGltZSAqLwotICAgICAgICAgICAgICAgICAgICBtU3VwcGxpY2FudFN0YXRlVHJhY2tlci5zZW5kTWVzc2FnZShDTURfUkVTRVRfU1VQUExJQ0FOVF9TVEFURSk7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgZGF0YSBzdHJ1Y3R1cmVzICovCi0gICAgICAgICAgICAgICAgICAgIG1MYXN0QnNzaWQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBtTGFzdE5ldHdvcmtJZCA9IFdpZmlDb25maWd1cmF0aW9uLklOVkFMSURfTkVUV09SS19JRDsKLSAgICAgICAgICAgICAgICAgICAgbUxhc3RTaWduYWxMZXZlbCA9IC0xOwotCi0gICAgICAgICAgICAgICAgICAgIG1XaWZpSW5mby5zZXRNYWNBZGRyZXNzKG1XaWZpTmF0aXZlLmdldE1hY0FkZHJlc3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUubG9hZEFuZEVuYWJsZUFsbE5ldHdvcmtzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVXcHNEZXRhaWxzKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2VuZFN1cHBsaWNhbnRDb25uZWN0aW9uQ2hhbmdlZEJyb2FkY2FzdCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdGFydGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoKyttU3VwcGxpY2FudFJlc3RhcnRDb3VudCA8PSBTVVBQTElDQU5UX1JFU1RBUlRfVFJJRVMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXR1cCBjb250cm9sIGNoYW5uZWwsIHJlc3RhcnQgc3VwcGxpY2FudCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlNb25pdG9yLmtpbGxTdXBwbGljYW50KG1QMnBTdXBwb3J0ZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Jbml0aWFsU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKENNRF9TVEFSVF9TVVBQTElDQU5ULCBTVVBQTElDQU5UX1JFU1RBUlRfSU5URVJWQUxfTVNFQ1MpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkICIgKyBtU3VwcGxpY2FudFJlc3RhcnRDb3VudCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdGltZXMgdG8gc3RhcnQgc3VwcGxpY2FudCwgdW5sb2FkIGRyaXZlciIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVN1cHBsaWNhbnRSZXN0YXJ0Q291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0V2lmaVN0YXRlKFdJRklfU1RBVEVfVU5LTk9XTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluaXRpYWxTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVA6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9BUDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX09QRVJBVElPTkFMX01PREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0NPVU5UUllfQ09ERToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfRlJFUVVFTkNZX0JBTkQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfUEFDS0VUX0ZJTFRFUklORzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1BBQ0tFVF9GSUxURVJJTkc6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBTdXBwbGljYW50U3RhcnRlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICAvKiBXaWZpIGlzIGF2YWlsYWJsZSBhcyBsb25nIGFzIHdlIGhhdmUgYSBjb25uZWN0aW9uIHRvIHN1cHBsaWNhbnQgKi8KLSAgICAgICAgICAgIG1OZXR3b3JrSW5mby5zZXRJc0F2YWlsYWJsZSh0cnVlKTsKLQotICAgICAgICAgICAgaW50IGRlZmF1bHRJbnRlcnZhbCA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldEludGVnZXIoCi0gICAgICAgICAgICAgICAgICAgIFIuaW50ZWdlci5jb25maWdfd2lmaV9zdXBwbGljYW50X3NjYW5faW50ZXJ2YWwpOwotCi0gICAgICAgICAgICBtU3VwcGxpY2FudFNjYW5JbnRlcnZhbE1zID0gU2V0dGluZ3MuR2xvYmFsLmdldExvbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1NVUFBMSUNBTlRfU0NBTl9JTlRFUlZBTF9NUywKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEludGVydmFsKTsKLQotICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0U2NhbkludGVydmFsKChpbnQpbVN1cHBsaWNhbnRTY2FuSW50ZXJ2YWxNcyAvIDEwMDApOwotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1NVUFBMSUNBTlQ6ICAgLyogU3VwcGxpY2FudCBzdG9wcGVkIGJ5IHVzZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1QMnBTdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtV2FpdEZvclAycERpc2FibGVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVN1cHBsaWNhbnRTdG9wcGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOiAgLyogU3VwcGxpY2FudCBjb25uZWN0aW9uIGxvc3QgKi8KLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiQ29ubmVjdGlvbiBsb3N0LCByZXN0YXJ0IHN1cHBsaWNhbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3VwcGxpY2FudENvbm5lY3Rpb25Mb3NzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1TdXBwbGljYW50U3RhdGVUcmFja2VyLnNlbmRNZXNzYWdlKENNRF9SRVNFVF9TVVBQTElDQU5UX1NUQVRFKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1QMnBTdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtV2FpdEZvclAycERpc2FibGVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluaXRpYWxTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKENNRF9TVEFSVF9TVVBQTElDQU5ULCBTVVBQTElDQU5UX1JFU1RBUlRfSU5URVJWQUxfTVNFQ1MpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNDQU5fUkVTVUxUU19FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgc2V0U2NhblJlc3VsdHMoKTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZFNjYW5SZXN1bHRzQXZhaWxhYmxlQnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1TY2FuUmVzdWx0SXNQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1BJTkdfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBvayA9IG1XaWZpTmF0aXZlLnBpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgbWVzc2FnZS53aGF0LCBvayA/IFNVQ0NFU1MgOiBGQUlMVVJFKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIENhbm5vdCBzdGFydCBzb2Z0IEFQIHdoaWxlIGluIGNsaWVudCBtb2RlICovCi0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVA6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzdGFydCBzb2Z0IEFQIHdpdGggYSBydW5uaW5nIHN1cHBsaWNhbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0V2lmaUFwU3RhdGUoV0lGSV9BUF9TVEFURV9GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKLSAgICAgICAgICAgICAgICAgICAgbU9wZXJhdGlvbmFsTW9kZSA9IG1lc3NhZ2UuYXJnMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKLSAgICAgICAgICAgIG1OZXR3b3JrSW5mby5zZXRJc0F2YWlsYWJsZShmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBTdXBwbGljYW50U3RvcHBpbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgLyogU2VuZCBhbnkgcmVzZXQgY29tbWFuZHMgdG8gc3VwcGxpY2FudCBiZWZvcmUgc2h1dHRpbmcgaXQgZG93biAqLwotICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Rpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgIGlmIChtRGhjcFN0YXRlTWFjaGluZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbURoY3BTdGF0ZU1hY2hpbmUuZG9RdWl0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChEQkcpIGxvZygic3RvcHBpbmcgc3VwcGxpY2FudCIpOwotICAgICAgICAgICAgbVdpZmlNb25pdG9yLnN0b3BTdXBwbGljYW50KCk7Ci0KLSAgICAgICAgICAgIC8qIFNlbmQgb3Vyc2VsdmVzIGEgZGVsYXllZCBtZXNzYWdlIHRvIGluZGljYXRlIGZhaWx1cmUgYWZ0ZXIgYSB3YWl0IHRpbWUgKi8KLSAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKENNRF9TVE9QX1NVUFBMSUNBTlRfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICArK21TdXBwbGljYW50U3RvcEZhaWx1cmVUb2tlbiwgMCksIFNVUFBMSUNBTlRfUkVTVEFSVF9JTlRFUlZBTF9NU0VDUyk7Ci0gICAgICAgICAgICBzZXRXaWZpU3RhdGUoV0lGSV9TVEFURV9ESVNBQkxJTkcpOwotICAgICAgICAgICAgbVN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIuc2VuZE1lc3NhZ2UoQ01EX1JFU0VUX1NVUFBMSUNBTlRfU1RBVEUpOwotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9DT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBsb2dlKCJTdXBwbGljYW50IGNvbm5lY3Rpb24gcmVjZWl2ZWQgd2hpbGUgc3RvcHBpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfRElTQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJTdXBwbGljYW50IGNvbm5lY3Rpb24gbG9zdCIpOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdXBwbGljYW50Q29ubmVjdGlvbkxvc3MoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Jbml0aWFsU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1NVUFBMSUNBTlRfRkFJTEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IG1TdXBwbGljYW50U3RvcEZhaWx1cmVUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiVGltZWQgb3V0IG9uIGEgc3VwcGxpY2FudCBzdG9wLCBraWxsIGFuZCBwcm9jZWVkIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdXBwbGljYW50Q29ubmVjdGlvbkxvc3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5pdGlhbFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TVVBQTElDQU5UOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORzoKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIERyaXZlclN0YXJ0aW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIHByaXZhdGUgaW50IG1UcmllczsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgbVRyaWVzID0gMTsKLSAgICAgICAgICAgIC8qIFNlbmQgb3Vyc2VsdmVzIGEgZGVsYXllZCBtZXNzYWdlIHRvIHN0YXJ0IGRyaXZlciBhIHNlY29uZCB0aW1lICovCi0gICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfRFJJVkVSX1NUQVJUX1RJTUVEX09VVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICsrbURyaXZlclN0YXJ0VG9rZW4sIDApLCBEUklWRVJfU1RBUlRfVElNRV9PVVRfTVNFQ1MpOwotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IGhhbmRsZVN1cHBsaWNhbnRTdGF0ZUNoYW5nZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgLyogSWYgc3VwbGljYW50IGlzIGV4aXRpbmcgb3V0IG9mIElOVEVSRkFDRV9ESVNBQkxFRCBzdGF0ZSBpbnRvCi0gICAgICAgICAgICAgICAgICAgICAqIGEgc3RhdGUgdGhhdCBpbmRpY2F0ZXMgZHJpdmVyIGhhcyBzdGFydGVkLCBpdCBpcyByZWFkeSB0bwotICAgICAgICAgICAgICAgICAgICAgKiByZWNlaXZlIGRyaXZlciBjb21tYW5kcwotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKFN1cHBsaWNhbnRTdGF0ZS5pc0RyaXZlckFjdGl2ZShzdGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRHJpdmVyU3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9EUklWRVJfU1RBUlRfVElNRURfT1VUOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IG1Ecml2ZXJTdGFydFRva2VuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobVRyaWVzID49IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc3RhcnQgZHJpdmVyIGFmdGVyICIgKyBtVHJpZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRHJpdmVyU3RvcHBlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRHJpdmVyIHN0YXJ0IGZhaWxlZCwgcmV0cnlpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2FrZUxvY2suYWNxdWlyZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnN0YXJ0RHJpdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdha2VMb2NrLnJlbGVhc2UoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbVRyaWVzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgb3Vyc2VsdmVzIGEgZGVsYXllZCBtZXNzYWdlIHRvIHN0YXJ0IGRyaXZlciBhZ2FpbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKENNRF9EUklWRVJfU1RBUlRfVElNRURfT1VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbURyaXZlclN0YXJ0VG9rZW4sIDApLCBEUklWRVJfU1RBUlRfVElNRV9PVVRfTVNFQ1MpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAvKiBRdWV1ZSBkcml2ZXIgY29tbWFuZHMgJiBjb25uZWN0aW9uIGV2ZW50cyAqLwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLk5FVFdPUktfQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLk5FVFdPUktfRElTQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkVfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5BU1NPQ0lBVElPTl9SRUpFQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5XUFNfT1ZFUkxBUF9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TQ0FOOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RJU0NPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVBU1NPQ0lBVEU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVDT05ORUNUOgotICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgRHJpdmVyU3RhcnRlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBtSXNSdW5uaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIG1JbkRlbGF5ZWRTdG9wID0gZmFsc2U7Ci0gICAgICAgICAgICBtRGVsYXllZFN0b3BDb3VudGVyKys7Ci0gICAgICAgICAgICB1cGRhdGVCYXR0ZXJ5V29ya1NvdXJjZShudWxsKTsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogRW5hYmxlIGJsdWV0b290aCBjb2V4aXN0ZW5jZSBzY2FuIG1vZGUgd2hlbiBibHVldG9vdGggY29ubmVjdGlvbiBpcyBhY3RpdmUuCi0gICAgICAgICAgICAgKiBXaGVuIHRoaXMgbW9kZSBpcyBvbiwgc29tZSBvZiB0aGUgbG93LWxldmVsIHNjYW4gcGFyYW1ldGVycyB1c2VkIGJ5IHRoZQotICAgICAgICAgICAgICogZHJpdmVyIGFyZSBjaGFuZ2VkIHRvIHJlZHVjZSBpbnRlcmZlcmVuY2Ugd2l0aCBibHVldG9vdGgKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0Qmx1ZXRvb3RoQ29leGlzdGVuY2VTY2FuTW9kZShtQmx1ZXRvb3RoQ29ubmVjdGlvbkFjdGl2ZSk7Ci0gICAgICAgICAgICAvKiBzZXQgY291bnRyeSBjb2RlICovCi0gICAgICAgICAgICBzZXRDb3VudHJ5Q29kZSgpOwotICAgICAgICAgICAgLyogc2V0IGZyZXF1ZW5jeSBiYW5kIG9mIG9wZXJhdGlvbiAqLwotICAgICAgICAgICAgc2V0RnJlcXVlbmN5QmFuZCgpOwotICAgICAgICAgICAgLyogaW5pdGlhbGl6ZSBuZXR3b3JrIHN0YXRlICovCi0gICAgICAgICAgICBzZXROZXR3b3JrRGV0YWlsZWRTdGF0ZShEZXRhaWxlZFN0YXRlLkRJU0NPTk5FQ1RFRCk7Ci0KLSAgICAgICAgICAgIC8qIFJlbW92ZSBhbnkgZmlsdGVyaW5nIG9uIE11bHRpY2FzdCB2NiBhdCBzdGFydCAqLwotICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RvcEZpbHRlcmluZ011bHRpY2FzdFY2UGFja2V0cygpOwotCi0gICAgICAgICAgICAvKiBSZXNldCBNdWx0aWNhc3QgdjQgZmlsdGVyaW5nIHN0YXRlICovCi0gICAgICAgICAgICBpZiAobUZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cy5nZXQoKSkgewotICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnN0YXJ0RmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnN0b3BGaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURoY3BBY3RpdmUgPSBmYWxzZTsKLQotICAgICAgICAgICAgc3RhcnRCYXRjaGVkU2NhbigpOwotCi0gICAgICAgICAgICBpZiAobU9wZXJhdGlvbmFsTW9kZSAhPSBDT05ORUNUX01PREUpIHsKLSAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5kaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5kaXNhYmxlQWxsTmV0d29ya3MoKTsKLSAgICAgICAgICAgICAgICBpZiAobU9wZXJhdGlvbmFsTW9kZSA9PSBTQ0FOX09OTFlfV0lUSF9XSUZJX09GRl9NT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFdpZmlTdGF0ZShXSUZJX1NUQVRFX0RJU0FCTEVEKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1TY2FuTW9kZVN0YXRlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogRHJpdmVyIHN0b3AgbWF5IGhhdmUgZGlzYWJsZWQgbmV0d29ya3MsIGVuYWJsZSByaWdodCBhZnRlciBzdGFydCAqLwotICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZW5hYmxlQWxsTmV0d29ya3MoKTsKLQotICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiQXR0ZW1wdGluZyB0byByZWNvbm5lY3QgdG8gd2lmaSBuZXR3b3JrIC4uIik7Ci0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucmVjb25uZWN0KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTdGF0dXMgcHVsbHMgaW4gdGhlIGN1cnJlbnQgc3VwcGxpY2FudCBzdGF0ZSBhbmQgbmV0d29yayBjb25uZWN0aW9uIHN0YXRlCi0gICAgICAgICAgICAgICAgLy8gZXZlbnRzIG92ZXIgdGhlIG1vbml0b3IgY29ubmVjdGlvbi4gVGhpcyBoZWxwcyBmcmFtZXdvcmsgc3luYyB1cCB3aXRoCi0gICAgICAgICAgICAgICAgLy8gY3VycmVudCBzdXBwbGljYW50IHN0YXRlCi0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhdHVzKCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIG1heSBoYXZlIG1pc3NlZCBzY3JlZW4gdXBkYXRlIGF0IGJvb3QKLSAgICAgICAgICAgIGlmIChtU2NyZWVuQnJvYWRjYXN0UmVjZWl2ZWQuZ2V0KCkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICBQb3dlck1hbmFnZXIgcG93ZXJNYW5hZ2VyID0gKFBvd2VyTWFuYWdlciltQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAotICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dC5QT1dFUl9TRVJWSUNFKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVTY3JlZW5TdGF0ZUNoYW5nZWQocG93ZXJNYW5hZ2VyLmlzU2NyZWVuT24oKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgcmlnaHQgc3VzcGVuZCBtb2RlIHNldHRpbmdzCi0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0U3VzcGVuZE9wdGltaXphdGlvbnMobVN1c3BlbmRPcHROZWVkc0Rpc2FibGVkID09IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1Vc2VyV2FudHNTdXNwZW5kT3B0LmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldFBvd2VyU2F2ZSh0cnVlKTsKLQotICAgICAgICAgICAgaWYgKG1QMnBTdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAobU9wZXJhdGlvbmFsTW9kZSA9PSBDT05ORUNUX01PREUpIHsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlQMnBDaGFubmVsLnNlbmRNZXNzYWdlKFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0VOQUJMRV9QMlApOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFAyUCBzdGF0ZW1hY2hpbmUgc3RhcnRzIGluIGRpc2FibGVkIHN0YXRlLCBhbmQgaXMgbm90IGVuYWJsZWQgdW50aWwKLSAgICAgICAgICAgICAgICAgICAgLy8gQ01EX0VOQUJMRV9QMlAgaXMgc2VudCBmcm9tIGhlcmU7IHNvLCBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgdG8KLSAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCBpdCBkaXNhYmxlZC4KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLldJRklfU0NBTl9BVkFJTEFCTEUpOwotICAgICAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfU0NBTl9BVkFJTEFCTEUsIFdJRklfU1RBVEVfRU5BQkxFRCk7Ci0gICAgICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIG5vdGVTY2FuU3RhcnQobWVzc2FnZS5hcmcxLCAoV29ya1NvdXJjZSkgbWVzc2FnZS5vYmopOwotICAgICAgICAgICAgICAgICAgICBzdGFydFNjYW5OYXRpdmUoV2lmaU5hdGl2ZS5TQ0FOX1dJVEhfQ09OTkVDVElPTl9TRVRVUCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9CQVRDSEVEX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRCYXRjaGVkU2NhblNldHRpbmdzKG1lc3NhZ2UuYXJnMSwgbWVzc2FnZS5hcmcyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCdW5kbGUpbWVzc2FnZS5vYmopKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydEJhdGNoZWRTY2FuKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0NPVU5UUllfQ09ERToKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvdW50cnkgPSAoU3RyaW5nKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJzZXQgY291bnRyeSBjb2RlICIgKyBjb3VudHJ5KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50cnkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeSA9IGNvdW50cnkudG9VcHBlckNhc2UoTG9jYWxlLlJPT1QpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1MYXN0U2V0Q291bnRyeUNvZGUgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjb3VudHJ5LmVxdWFscyhtTGFzdFNldENvdW50cnlDb2RlKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5zZXRDb3VudHJ5Q29kZShjb3VudHJ5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGFzdFNldENvdW50cnlDb2RlID0gY291bnRyeTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IGNvdW50cnkgY29kZSAiICsgY291bnRyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORDoKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhbmQgPSAgbWVzc2FnZS5hcmcxOwotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coInNldCBmcmVxdWVuY3kgYmFuZCAiICsgYmFuZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5zZXRCYW5kKGJhbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRnJlcXVlbmN5QmFuZC5zZXQoYmFuZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmbHVzaCBvbGQgZGF0YSAtIGxpa2Ugc2NhbiByZXN1bHRzCi0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5ic3NGbHVzaCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy9GZXRjaCB0aGUgbGF0ZXN0IHNjYW4gcmVzdWx0cyB3aGVuIGZyZXF1ZW5jeSBiYW5kIGlzIHNldAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTY2FuTmF0aXZlKFdpZmlOYXRpdmUuU0NBTl9XSVRIX0NPTk5FQ1RJT05fU0VUVVApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHNldCBmcmVxdWVuY3kgYmFuZCAiICsgYmFuZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfQkxVRVRPT1RIX0FEQVBURVJfU1RBVEVfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICBtQmx1ZXRvb3RoQ29ubmVjdGlvbkFjdGl2ZSA9IChtZXNzYWdlLmFyZzEgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbHVldG9vdGhBZGFwdGVyLlNUQVRFX0RJU0NPTk5FQ1RFRCk7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldEJsdWV0b290aENvZXhpc3RlbmNlU2Nhbk1vZGUobUJsdWV0b290aENvbm5lY3Rpb25BY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKLSAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUgPSBtZXNzYWdlLmFyZzE7Ci0KLSAgICAgICAgICAgICAgICAgICAgLyogQWxyZWFkeSBkb2luZyBhIGRlbGF5ZWQgc3RvcCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAobUluRGVsYXllZFN0b3ApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiQWxyZWFkeSBpbiBkZWxheWVkIHN0b3AiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgcmlnaHQgbm93LCBidXQgbGVhdmUgdGhlIGRyaXZlciBydW5uaW5nIGZvciBhIGJpdCAqLwotICAgICAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmRpc2FibGVBbGxOZXR3b3JrcygpOwotCi0gICAgICAgICAgICAgICAgICAgIG1JbkRlbGF5ZWRTdG9wID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbURlbGF5ZWRTdG9wQ291bnRlcisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIkRlbGF5ZWQgc3RvcCBtZXNzYWdlICIgKyBtRGVsYXllZFN0b3BDb3VudGVyKTsKLQotICAgICAgICAgICAgICAgICAgICAvKiBzZW5kIHJlZ3VsYXIgZGVsYXllZCBzaHV0IGRvd24gKi8KLSAgICAgICAgICAgICAgICAgICAgSW50ZW50IGRyaXZlclN0b3BJbnRlbnQgPSBuZXcgSW50ZW50KEFDVElPTl9ERUxBWUVEX0RSSVZFUl9TVE9QLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgZHJpdmVyU3RvcEludGVudC5wdXRFeHRyYShERUxBWUVEX1NUT1BfQ09VTlRFUiwgbURlbGF5ZWRTdG9wQ291bnRlcik7Ci0gICAgICAgICAgICAgICAgICAgIG1Ecml2ZXJTdG9wSW50ZW50ID0gUGVuZGluZ0ludGVudC5nZXRCcm9hZGNhc3QobUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJJVkVSX1NUT1BfUkVRVUVTVCwgZHJpdmVyU3RvcEludGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nSW50ZW50LkZMQUdfVVBEQVRFX0NVUlJFTlQpOwotCi0gICAgICAgICAgICAgICAgICAgIG1BbGFybU1hbmFnZXIuc2V0KEFsYXJtTWFuYWdlci5SVENfV0FLRVVQLCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbURyaXZlclN0b3BEZWxheU1zLCBtRHJpdmVyU3RvcEludGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1JbkRlbGF5ZWRTdG9wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtSW5EZWxheWVkU3RvcCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgbURlbGF5ZWRTdG9wQ291bnRlcisrOwotICAgICAgICAgICAgICAgICAgICAgICAgbUFsYXJtTWFuYWdlci5jYW5jZWwobURyaXZlclN0b3BJbnRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJEZWxheWVkIHN0b3AgaWdub3JlZCBkdWUgdG8gc3RhcnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtT3BlcmF0aW9uYWxNb2RlID09IENPTk5FQ1RfTU9ERSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZW5hYmxlQWxsTmV0d29ya3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9ERUxBWUVEX1NUT1BfRFJJVkVSOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coImRlbGF5ZWQgc3RvcCAiICsgbWVzc2FnZS5hcmcxICsgIiAiICsgbURlbGF5ZWRTdG9wQ291bnRlcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgIT0gbURlbGF5ZWRTdG9wQ291bnRlcikgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZXRDdXJyZW50U3RhdGUoKSAhPSBtRGlzY29ubmVjdGVkU3RhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbVdha2VMb2NrLmFjcXVpcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RvcERyaXZlcigpOwotICAgICAgICAgICAgICAgICAgICBtV2FrZUxvY2sucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobVAycFN1cHBvcnRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1XYWl0Rm9yUDJwRGlzYWJsZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRHJpdmVyU3RvcHBpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfUEFDS0VUX0ZJTFRFUklORzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSBNVUxUSUNBU1RfVjYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnN0YXJ0RmlsdGVyaW5nTXVsdGljYXN0VjZQYWNrZXRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5hcmcxID09IE1VTFRJQ0FTVF9WNCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnRGaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIklsbGVnYWwgYXJ1Z21lbnRzIHRvIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IE1VTFRJQ0FTVF9WNikgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RvcEZpbHRlcmluZ011bHRpY2FzdFY2UGFja2V0cygpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuYXJnMSA9PSBNVUxUSUNBU1RfVjQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnN0b3BGaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIklsbGVnYWwgYXJ1Z21lbnRzIHRvIENNRF9TVE9QX1BBQ0tFVF9GSUxURVJJTkciKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfU1VTUEVORF9PUFRfRU5BQkxFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdXNwZW5kT3B0aW1pemF0aW9uc05hdGl2ZShTVVNQRU5EX0RVRV9UT19TQ1JFRU4sIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVN1c3BlbmRXYWtlTG9jay5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdXNwZW5kT3B0aW1pemF0aW9uc05hdGl2ZShTVVNQRU5EX0RVRV9UT19TQ1JFRU4sIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfSElHSF9QRVJGX01PREU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VzcGVuZE9wdGltaXphdGlvbnNOYXRpdmUoU1VTUEVORF9EVUVfVE9fSElHSF9QRVJGLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdXNwZW5kT3B0aW1pemF0aW9uc05hdGl2ZShTVVNQRU5EX0RVRV9UT19ISUdIX1BFUkYsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0VOQUJMRV9URExTOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5vYmogIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlbW90ZUFkZHJlc3MgPSAoU3RyaW5nKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZW5hYmxlID0gKG1lc3NhZ2UuYXJnMSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnN0YXJ0VGRscyhyZW1vdGVBZGRyZXNzLCBlbmFibGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgewotICAgICAgICAgICAgbUlzUnVubmluZyA9IGZhbHNlOwotICAgICAgICAgICAgdXBkYXRlQmF0dGVyeVdvcmtTb3VyY2UobnVsbCk7Ci0gICAgICAgICAgICBtU2NhblJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PFNjYW5SZXN1bHQ+KCk7Ci0KLSAgICAgICAgICAgIHN0b3BCYXRjaGVkU2NhbigpOwotCi0gICAgICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpTWFuYWdlci5XSUZJX1NDQU5fQVZBSUxBQkxFKTsKLSAgICAgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1NDQU5fQVZBSUxBQkxFLCBXSUZJX1NUQVRFX0RJU0FCTEVEKTsKLSAgICAgICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgICAgICAgICBub3RlU2NhbkVuZCgpOyAvLyB3cmFwIHVwIGFueSBwZW5kaW5nIHJlcXVlc3QuCi0KLSAgICAgICAgICAgIG1MYXN0U2V0Q291bnRyeUNvZGUgPSBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgV2FpdEZvclAycERpc2FibGVTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgcHJpdmF0ZSBTdGF0ZSBtVHJhbnNpdGlvblRvU3RhdGU7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZ2V0Q3VycmVudE1lc3NhZ2UoKS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfRElTQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25Ub1N0YXRlID0gbUluaXRpYWxTdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfREVMQVlFRF9TVE9QX0RSSVZFUjoKLSAgICAgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25Ub1N0YXRlID0gbURyaXZlclN0b3BwaW5nU3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25Ub1N0YXRlID0gbVN1cHBsaWNhbnRTdG9wcGluZ1N0YXRlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBtVHJhbnNpdGlvblRvU3RhdGUgPSBtRHJpdmVyU3RvcHBpbmdTdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVN0YXRlTWFjaGluZS5DTURfRElTQUJMRV9QMlBfUkVRKTsKLSAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9ESVNBQkxFX1AyUF9SU1A6Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVHJhbnNpdGlvblRvU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAvKiBEZWZlciB3aWZpIHN0YXJ0L3NodXQgYW5kIGRyaXZlciBjb21tYW5kcyAqLwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVA6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9BUDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX09QRVJBVElPTkFMX01PREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0NPVU5UUllfQ09ERToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfRlJFUVVFTkNZX0JBTkQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfUEFDS0VUX0ZJTFRFUklORzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1BBQ0tFVF9GSUxURVJJTkc6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU0NBTjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9ESVNDT05ORUNUOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFQVNTT0NJQVRFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFQ09OTkVDVDoKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIERyaXZlclN0b3BwaW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgc3RhdGUgPSBoYW5kbGVTdXBwbGljYW50U3RhdGVDaGFuZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBTdXBwbGljYW50U3RhdGUuSU5URVJGQUNFX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURyaXZlclN0b3BwZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFF1ZXVlIGRyaXZlciBjb21tYW5kcyAqLwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TQ0FOOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RJU0NPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVBU1NPQ0lBVEU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVDT05ORUNUOgotICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgRHJpdmVyU3RvcHBlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIFN0YXRlQ2hhbmdlUmVzdWx0IHN0YXRlQ2hhbmdlUmVzdWx0ID0gKFN0YXRlQ2hhbmdlUmVzdWx0KSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgU3VwcGxpY2FudFN0YXRlIHN0YXRlID0gc3RhdGVDaGFuZ2VSZXN1bHQuc3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEEgV0VYVCBidWcgbWVhbnMgdGhhdCB3ZSBjYW4gYmUgYmFjayB0byBkcml2ZXIgc3RhcnRlZCBzdGF0ZQotICAgICAgICAgICAgICAgICAgICAvLyB1bmV4cGVjdGVkbHkKLSAgICAgICAgICAgICAgICAgICAgaWYgKFN1cHBsaWNhbnRTdGF0ZS5pc0RyaXZlckFjdGl2ZShzdGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRHJpdmVyU3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgICAgIG1XYWtlTG9jay5hY3F1aXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnN0YXJ0RHJpdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1XYWtlTG9jay5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRHJpdmVyU3RhcnRpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgU2Nhbk1vZGVTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUxhc3RPcGVyYXRpb25Nb2RlOwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBtTGFzdE9wZXJhdGlvbk1vZGUgPSBtT3BlcmF0aW9uYWxNb2RlOwotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSBDT05ORUNUX01PREUpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1MYXN0T3BlcmF0aW9uTW9kZSA9PSBTQ0FOX09OTFlfV0lUSF9XSUZJX09GRl9NT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0V2lmaVN0YXRlKFdJRklfU1RBVEVfRU5BQkxFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBhbmQgcmUtZW5hYmxlIG5ldHdvcmtzIHdoZW4gZ29pbmcgYmFjayB0byBlbmFibGVkIHN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIG5ldHdvcmtzIHRvIHNob3cgdXAgYWZ0ZXIgcmVzdG9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUubG9hZEFuZEVuYWJsZUFsbE5ldHdvcmtzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlQMnBDaGFubmVsLnNlbmRNZXNzYWdlKENNRF9FTkFCTEVfUDJQKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5lbmFibGVBbGxOZXR3b3JrcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZWNvbm5lY3QoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbU9wZXJhdGlvbmFsTW9kZSA9IENPTk5FQ1RfTU9ERTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIHNjYW4uIEFsbCB0aGUgY29ubmVjdGlvbiByZWxhdGVkIGNvbW1hbmRzIGFyZQotICAgICAgICAgICAgICAgIC8vIGhhbmRsZWQgb25seSBpbiBDb25uZWN0TW9kZVN0YXRlCi0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU0NBTjoKLSAgICAgICAgICAgICAgICAgICAgbm90ZVNjYW5TdGFydChtZXNzYWdlLmFyZzEsIChXb3JrU291cmNlKSBtZXNzYWdlLm9iaik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0U2Nhbk5hdGl2ZShXaWZpTmF0aXZlLlNDQU5fV0lUSE9VVF9DT05ORUNUSU9OX1NFVFVQKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBDb25uZWN0TW9kZVN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWc7Ci0gICAgICAgICAgICBib29sZWFuIG9rOwotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVNTT0NJQVRJT05fUkVKRUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBtU3VwcGxpY2FudFN0YXRlVHJhY2tlci5zZW5kTWVzc2FnZShXaWZpTW9uaXRvci5BU1NPQ0lBVElPTl9SRUpFQ1RJT05fRVZFTlQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkVfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIG1TdXBwbGljYW50U3RhdGVUcmFja2VyLnNlbmRNZXNzYWdlKFdpZmlNb25pdG9yLkFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkVfRVZFTlQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgc3RhdGUgPSBoYW5kbGVTdXBwbGljYW50U3RhdGVDaGFuZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEEgZHJpdmVyL2Zpcm13YXJlIGhhbmcgY2FuIG5vdyBwdXQgdGhlIGludGVyZmFjZSBpbiBhIGRvd24gc3RhdGUuCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRldGVjdCB0aGUgaW50ZXJmYWNlIGdvaW5nIGRvd24gYW5kIHJlY292ZXIgZnJvbSBpdAotICAgICAgICAgICAgICAgICAgICBpZiAoIVN1cHBsaWNhbnRTdGF0ZS5pc0RyaXZlckFjdGl2ZShzdGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtTmV0d29ya0luZm8uZ2V0U3RhdGUoKSAhPSBOZXR3b3JrSW5mby5TdGF0ZS5ESVNDT05ORUNURUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVOZXR3b3JrRGlzY29ubmVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJEZXRlY3RlZCBhbiBpbnRlcmZhY2UgZG93biwgcmVzdGFydCBkcml2ZXIiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRHJpdmVyU3RvcHBlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFSVF9EUklWRVIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBTdXBwbGljYW50IGNhbiBmYWlsIHRvIHJlcG9ydCBhIE5FVFdPUktfRElTQ09OTkVDVElPTl9FVkVOVAotICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGF1dGhlbnRpY2F0aW9uIHRpbWVzIG91dCBhZnRlciBhIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgLy8gd2UgY2FuIGZpZ3VyZSB0aGlzIGZyb20gdGhlIHN1cHBsaWNhbnQgc3RhdGUuIElmIHN1cHBsaWNhbnQKLSAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgaXMgRElTQ09OTkVDVEVELCBidXQgdGhlIG1OZXR3b3JrSW5mbyBzYXlzIHdlIGFyZSBub3QKLSAgICAgICAgICAgICAgICAgICAgLy8gZGlzY29ubmVjdGVkLCB3ZSBuZWVkIHRvIGhhbmRsZSBhIGRpc2Nvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09IFN1cHBsaWNhbnRTdGF0ZS5ESVNDT05ORUNURUQgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTmV0d29ya0luZm8uZ2V0U3RhdGUoKSAhPSBOZXR3b3JrSW5mby5TdGF0ZS5ESVNDT05ORUNURUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiTWlzc2VkIENUUkwtRVZFTlQtRElTQ09OTkVDVEVELCBkaXNjb25uZWN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVOZXR3b3JrRGlzY29ubmVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwU2VydmljZS5ESVNDT05ORUNUX1dJRklfUkVRVUVTVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5kaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVGVtcG9yYXJpbHlEaXNjb25uZWN0V2lmaSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZWNvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wb3JhcmlseURpc2Nvbm5lY3RXaWZpID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfQUREX09SX1VQREFURV9ORVRXT1JLOgotICAgICAgICAgICAgICAgICAgICBjb25maWcgPSAoV2lmaUNvbmZpZ3VyYXRpb24pIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBDTURfQUREX09SX1VQREFURV9ORVRXT1JLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuYWRkT3JVcGRhdGVOZXR3b3JrKGNvbmZpZykpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRU1PVkVfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgb2sgPSBtV2lmaUNvbmZpZ1N0b3JlLnJlbW92ZU5ldHdvcmsobWVzc2FnZS5hcmcxKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgbWVzc2FnZS53aGF0LCBvayA/IFNVQ0NFU1MgOiBGQUlMVVJFKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfRU5BQkxFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgICAgIG9rID0gbVdpZmlDb25maWdTdG9yZS5lbmFibGVOZXR3b3JrKG1lc3NhZ2UuYXJnMSwgbWVzc2FnZS5hcmcyID09IDEpOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlLndoYXQsIG9rID8gU1VDQ0VTUyA6IEZBSUxVUkUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9FTkFCTEVfQUxMX05FVFdPUktTOgotICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWUgPSAgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWUgLSBtTGFzdEVuYWJsZUFsbE5ldHdvcmtzVGltZSA+IE1JTl9JTlRFUlZBTF9FTkFCTEVfQUxMX05FVFdPUktTX01TKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmVuYWJsZUFsbE5ldHdvcmtzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTGFzdEVuYWJsZUFsbE5ldHdvcmtzVGltZSA9IHRpbWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5ESVNBQkxFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaUNvbmZpZ1N0b3JlLmRpc2FibGVOZXR3b3JrKG1lc3NhZ2UuYXJnMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5ESVNBQkxFRF9VTktOT1dOX1JFQVNPTikgPT0gdHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuRElTQUJMRV9ORVRXT1JLX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5ESVNBQkxFX05FVFdPUktfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfQkxBQ0tMSVNUX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmFkZFRvQmxhY2tsaXN0KChTdHJpbmcpbWVzc2FnZS5vYmopOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9DTEVBUl9CTEFDS0xJU1Q6Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmNsZWFyQmxhY2tsaXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NBVkVfQ09ORklHOgotICAgICAgICAgICAgICAgICAgICBvayA9IG1XaWZpQ29uZmlnU3RvcmUuc2F2ZUNvbmZpZygpOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBDTURfU0FWRV9DT05GSUcsIG9rID8gU1VDQ0VTUyA6IEZBSUxVUkUpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEluZm9ybSB0aGUgYmFja3VwIG1hbmFnZXIgYWJvdXQgYSBkYXRhIGNoYW5nZQotICAgICAgICAgICAgICAgICAgICBJQmFja3VwTWFuYWdlciBpYm0gPSBJQmFja3VwTWFuYWdlci5TdHViLmFzSW50ZXJmYWNlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoQ29udGV4dC5CQUNLVVBfU0VSVklDRSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaWJtICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWJtLmRhdGFDaGFuZ2VkKCJjb20uYW5kcm9pZC5wcm92aWRlcnMuc2V0dGluZ3MiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IGFnYWluIGxhdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfR0VUX0NPTkZJR1VSRURfTkVUV09SS1M6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2Uud2hhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmdldENvbmZpZ3VyZWROZXR3b3JrcygpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIERvIGEgcmVkdW5kYW50IGRpc2Nvbm5lY3Qgd2l0aG91dCB0cmFuc2l0aW9uICovCi0gICAgICAgICAgICAgICAgY2FzZSBDTURfRElTQ09OTkVDVDoKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZGlzY29ubmVjdCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUNPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnJlY29ubmVjdCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUFTU09DSUFURToKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucmVhc3NvY2lhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVMT0FEX1RMU19BTkRfUkVDT05ORUNUOgotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlDb25maWdTdG9yZS5uZWVkc1VubG9ja2VkS2V5U3RvcmUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZCgiUmVjb25uZWN0aW5nIHRvIGdpdmUgYSBjaGFuY2UgdG8gdW4tY29ubmVjdGVkIFRMUyBuZXR3b3JrcyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZGlzY29ubmVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucmVjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRoZSBjb25uZWN0IG1lc3NhZ2UgY2FuIGNvbnRhaW4gYSBuZXR3b3JrIGlkIHBhc3NlZCBhcyBhcmcxIG9uIG1lc3NhZ2Ugb3IKLSAgICAgICAgICAgICAgICAgICAgICogb3IgYSBjb25maWcgcGFzc2VkIGFzIG9iaiBvbiBtZXNzYWdlLgotICAgICAgICAgICAgICAgICAgICAgKiBGb3IgYSBuZXcgbmV0d29yaywgYSBjb25maWcgaXMgcGFzc2VkIHRvIGNyZWF0ZSBhbmQgY29ubmVjdC4KLSAgICAgICAgICAgICAgICAgICAgICogRm9yIGFuIGV4aXN0aW5nIG5ldHdvcmssIGEgbmV0d29yayBpZCBpcyBwYXNzZWQKLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGludCBuZXRJZCA9IG1lc3NhZ2UuYXJnMTsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gKFdpZmlDb25maWd1cmF0aW9uKSBtZXNzYWdlLm9iajsKLQotICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHRoZSBuZXR3b3JrIGNvbmZpZyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVcGRhdGVSZXN1bHQgcmVzdWx0ID0gbVdpZmlDb25maWdTdG9yZS5zYXZlTmV0d29yayhjb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQgPSByZXN1bHQuZ2V0TmV0d29ya0lkKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlDb25maWdTdG9yZS5zZWxlY3ROZXR3b3JrKG5ldElkKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnJlY29ubmVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc3RhdGUgdHJhY2tlciBoYW5kbGVzIGVuYWJsaW5nIG5ldHdvcmtzIHVwb24gY29tcGxldGlvbi9mYWlsdXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBtU3VwcGxpY2FudFN0YXRlVHJhY2tlci5zZW5kTWVzc2FnZShXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUkspOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuQ09OTkVDVF9ORVRXT1JLX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHBlY3QgYSBkaXNjb25uZWN0aW9uIGZyb20gdGhlIG9sZCBjb25uZWN0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gY29ubmVjdCBjb25maWc6ICIgKyBjb25maWcgKyAiIG5ldElkOiAiICsgbmV0SWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuQ09OTkVDVF9ORVRXT1JLX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuRVJST1IpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5TQVZFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IChXaWZpQ29uZmlndXJhdGlvbikgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVcGRhdGVSZXN1bHQgcmVzdWx0ID0gbVdpZmlDb25maWdTdG9yZS5zYXZlTmV0d29yayhjb25maWcpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmdldE5ldHdvcmtJZCgpICE9IFdpZmlDb25maWd1cmF0aW9uLklOVkFMSURfTkVUV09SS19JRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuU0FWRV9ORVRXT1JLX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2F2ZSBuZXR3b3JrIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5TQVZFX05FVFdPUktfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5GT1JHRVRfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpQ29uZmlnU3RvcmUuZm9yZ2V0TmV0d29yayhtZXNzYWdlLmFyZzEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5GT1JHRVRfTkVUV09SS19TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGZvcmdldCBuZXR3b3JrIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5GT1JHRVRfTkVUV09SS19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNUQVJUX1dQUzoKLSAgICAgICAgICAgICAgICAgICAgV3BzSW5mbyB3cHNJbmZvID0gKFdwc0luZm8pIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBXcHNSZXN1bHQgd3BzUmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHdwc0luZm8uc2V0dXApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgV3BzSW5mby5QQkM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3BzUmVzdWx0ID0gbVdpZmlDb25maWdTdG9yZS5zdGFydFdwc1BiYyh3cHNJbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgV3BzSW5mby5LRVlQQUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3BzUmVzdWx0ID0gbVdpZmlDb25maWdTdG9yZS5zdGFydFdwc1dpdGhQaW5Gcm9tQWNjZXNzUG9pbnQod3BzSW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFdwc0luZm8uRElTUExBWToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cHNSZXN1bHQgPSBtV2lmaUNvbmZpZ1N0b3JlLnN0YXJ0V3BzV2l0aFBpbkZyb21EZXZpY2Uod3BzSW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdwc1Jlc3VsdCA9IG5ldyBXcHNSZXN1bHQoU3RhdHVzLkZBSUxVUkUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkludmFsaWQgc2V0dXAgZm9yIFdQUyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3cHNSZXN1bHQuc3RhdHVzID09IFN0YXR1cy5TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5TVEFSVF9XUFNfU1VDQ0VFREVELCB3cHNSZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1XcHNSdW5uaW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHN0YXJ0IFdQUyB3aXRoIGNvbmZpZyAiICsgd3BzSW5mby50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLldQU19GQUlMRUQsIFdpZmlNYW5hZ2VyLkVSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLk5FVFdPUktfQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJOZXR3b3JrIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgbUxhc3ROZXR3b3JrSWQgPSBtZXNzYWdlLmFyZzE7Ci0gICAgICAgICAgICAgICAgICAgIG1MYXN0QnNzaWQgPSAoU3RyaW5nKSBtZXNzYWdlLm9iajsKLQotICAgICAgICAgICAgICAgICAgICBtV2lmaUluZm8uc2V0QlNTSUQobUxhc3RCc3NpZCk7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpSW5mby5zZXROZXR3b3JrSWQobUxhc3ROZXR3b3JrSWQpOwotICAgICAgICAgICAgICAgICAgICAvKiBzZW5kIGV2ZW50IHRvIENNICYgbmV0d29yayBjaGFuZ2UgYnJvYWRjYXN0ICovCi0gICAgICAgICAgICAgICAgICAgIHNldE5ldHdvcmtEZXRhaWxlZFN0YXRlKERldGFpbGVkU3RhdGUuT0JUQUlOSU5HX0lQQUREUik7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmROZXR3b3JrU3RhdGVDaGFuZ2VCcm9hZGNhc3QobUxhc3RCc3NpZCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtT2J0YWluaW5nSXBTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIk5ldHdvcmsgY29ubmVjdGlvbiBsb3N0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIEwyQ29ubmVjdGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIG1Sc3NpUG9sbFRva2VuKys7Ci0gICAgICAgICAgICBpZiAobUVuYWJsZVJzc2lQb2xsaW5nKSB7Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1JTU0lfUE9MTCwgbVJzc2lQb2xsVG9rZW4sIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7Ci0gICAgICAgICAgICBoYW5kbGVOZXR3b3JrRGlzY29ubmVjdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgY2FzZSBEaGNwU3RhdGVNYWNoaW5lLkNNRF9QUkVfREhDUF9BQ1RJT046Ci0gICAgICAgICAgICAgICAgICBoYW5kbGVQcmVEaGNwU2V0dXAoKTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIERoY3BTdGF0ZU1hY2hpbmUuQ01EX1BPU1RfREhDUF9BQ1RJT046Ci0gICAgICAgICAgICAgICAgICBoYW5kbGVQb3N0RGhjcFNldHVwKCk7Ci0gICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IERoY3BTdGF0ZU1hY2hpbmUuREhDUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJESENQIHN1Y2Nlc3NmdWwiKTsKLSAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdWNjZXNzZnVsSXBDb25maWd1cmF0aW9uKChEaGNwUmVzdWx0cykgbWVzc2FnZS5vYmopOwotICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVmVyaWZ5aW5nTGlua1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5hcmcxID09IERoY3BTdGF0ZU1hY2hpbmUuREhDUF9GQUlMVVJFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJESENQIGZhaWxlZCIpOwotICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUZhaWxlZElwQ29uZmlndXJhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RJU0NPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0aW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBTZXJ2aWNlLkRJU0NPTk5FQ1RfV0lGSV9SRVFVRVNUOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wb3JhcmlseURpc2Nvbm5lY3RXaWZpID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSAhPSBDT05ORUNUX01PREUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9ESVNDT05ORUNUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TQ0FOOgotICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3QgYXR0ZW1wdCB0byBjb25uZWN0IHdoZW4gd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkICovCi0gICAgICAgICAgICAgICAgICAgIG5vdGVTY2FuU3RhcnQobWVzc2FnZS5hcmcxLCAoV29ya1NvdXJjZSkgbWVzc2FnZS5vYmopOwotICAgICAgICAgICAgICAgICAgICBzdGFydFNjYW5OYXRpdmUoV2lmaU5hdGl2ZS5TQ0FOX1dJVEhPVVRfQ09OTkVDVElPTl9TRVRVUCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAvKiBJZ25vcmUgY29ubmVjdGlvbiB0byBzYW1lIG5ldHdvcmsgKi8KLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNPTk5FQ1RfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgaW50IG5ldElkID0gbWVzc2FnZS5hcmcxOwotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlJbmZvLmdldE5ldHdvcmtJZCgpID09IG5ldElkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5TQVZFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IChXaWZpQ29uZmlndXJhdGlvbikgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVcGRhdGVSZXN1bHQgcmVzdWx0ID0gbVdpZmlDb25maWdTdG9yZS5zYXZlTmV0d29yayhjb25maWcpOwotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlJbmZvLmdldE5ldHdvcmtJZCgpID09IHJlc3VsdC5nZXROZXR3b3JrSWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNJcENoYW5nZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiUmVjb25maWd1cmluZyBJUCBvbiBjb25uZWN0aW9uIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1PYnRhaW5pbmdJcFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzUHJveHlDaGFuZ2VkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIlJlY29uZmlndXJpbmcgcHJveHkgb24gY29ubmVjdGlvbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUxpbmtQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmdldE5ldHdvcmtJZCgpICE9IFdpZmlDb25maWd1cmF0aW9uLklOVkFMSURfTkVUV09SS19JRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuU0FWRV9ORVRXT1JLX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2F2ZSBuZXR3b3JrIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5TQVZFX05FVFdPUktfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIElnbm9yZSAqLwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19DT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SU1NJX1BPTEw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gbVJzc2lQb2xsVG9rZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBJbmZvIGFuZCBjb250aW51ZSBwb2xsaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaFJzc2lBbmRMaW5rU3BlZWROYXRpdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKENNRF9SU1NJX1BPTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Sc3NpUG9sbFRva2VuLCAwKSwgUE9MTF9SU1NJX0lOVEVSVkFMX01TRUNTKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBvbGxpbmcgaGFzIGNvbXBsZXRlZAotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0VOQUJMRV9SU1NJX1BPTEw6Ci0gICAgICAgICAgICAgICAgICAgIG1FbmFibGVSc3NpUG9sbGluZyA9IChtZXNzYWdlLmFyZzEgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIG1Sc3NpUG9sbFRva2VuKys7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtRW5hYmxlUnNzaVBvbGxpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IHBvbGwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoUnNzaUFuZExpbmtTcGVlZE5hdGl2ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX1JTU0lfUE9MTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJzc2lQb2xsVG9rZW4sIDApLCBQT0xMX1JTU0lfSU5URVJWQUxfTVNFQ1MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0g6Ci0gICAgICAgICAgICAgICAgICAgIFJzc2lQYWNrZXRDb3VudEluZm8gaW5mbyA9IG5ldyBSc3NpUGFja2V0Q291bnRJbmZvKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZldGNoUnNzaUFuZExpbmtTcGVlZE5hdGl2ZSgpOwotICAgICAgICAgICAgICAgICAgICBpbmZvLnJzc2kgPSBtV2lmaUluZm8uZ2V0UnNzaSgpOwotICAgICAgICAgICAgICAgICAgICBmZXRjaFBrdGNudE5hdGl2ZShpbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0hfU1VDQ0VFREVELCBpbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIE9idGFpbmluZ0lwU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmICghbVdpZmlDb25maWdTdG9yZS5pc1VzaW5nU3RhdGljSXAobUxhc3ROZXR3b3JrSWQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzogSWYgd2UncmUgc3dpdGNoaW5nIGJldHdlZW4gc3RhdGljIElQIGNvbmZpZ3VyYXRpb24gYW5kIERIQ1AsIHJlbW92ZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBzdGF0aWMgY29uZmlndXJhdGlvbiBmaXJzdC4KLSAgICAgICAgICAgICAgICBzdGFydERoY3AoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gc3RvcCBhbnkgcnVubmluZyBkaGNwIGJlZm9yZSBhc3NpZ25pbmcgc3RhdGljIElQCi0gICAgICAgICAgICAgICAgc3RvcERoY3AoKTsKLSAgICAgICAgICAgICAgICBEaGNwUmVzdWx0cyBkaGNwUmVzdWx0cyA9IG5ldyBEaGNwUmVzdWx0cygKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZ2V0TGlua1Byb3BlcnRpZXMobUxhc3ROZXR3b3JrSWQpKTsKLSAgICAgICAgICAgICAgICBJbnRlcmZhY2VDb25maWd1cmF0aW9uIGlmY2cgPSBuZXcgSW50ZXJmYWNlQ29uZmlndXJhdGlvbigpOwotICAgICAgICAgICAgICAgIEl0ZXJhdG9yPExpbmtBZGRyZXNzPiBhZGRycyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaGNwUmVzdWx0cy5saW5rUHJvcGVydGllcy5nZXRMaW5rQWRkcmVzc2VzKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWFkZHJzLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgICAgICBsb2dlKCJTdGF0aWMgSVAgbGFja3MgYWRkcmVzcyIpOwotICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBVElDX0lQX0ZBSUxVUkUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmY2cuc2V0TGlua0FkZHJlc3MoYWRkcnMubmV4dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWZjZy5zZXRJbnRlcmZhY2VVcCgpOwotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS5zZXRJbnRlcmZhY2VDb25maWcobUludGVyZmFjZU5hbWUsIGlmY2cpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJTdGF0aWMgSVAgY29uZmlndXJhdGlvbiBzdWNjZWVkZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFUSUNfSVBfU1VDQ0VTUywgZGhjcFJlc3VsdHMpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlN0YXRpYyBJUCBjb25maWd1cmF0aW9uIGZhaWxlZDogIiArIHJlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFUSUNfSVBfRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJTdGF0aWMgSVAgY29uZmlndXJhdGlvbiBmYWlsZWQ6ICIgKyBlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFUSUNfSVBfRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgaWYgKERCRykgbG9nKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSArICJcbiIpOwotICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgIGNhc2UgQ01EX1NUQVRJQ19JUF9TVUNDRVNTOgotICAgICAgICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc2Z1bElwQ29uZmlndXJhdGlvbigoRGhjcFJlc3VsdHMpIG1lc3NhZ2Uub2JqKTsKLSAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVmVyaWZ5aW5nTGlua1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIENNRF9TVEFUSUNfSVBfRkFJTFVSRToKLSAgICAgICAgICAgICAgICAgIGhhbmRsZUZhaWxlZElwQ29uZmlndXJhdGlvbigpOwotICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0aW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5TQVZFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIC8qIERlZmVyIGFueSBwb3dlciBtb2RlIGNoYW5nZXMgc2luY2Ugd2UgbXVzdCBrZWVwIGFjdGl2ZSBwb3dlciBtb2RlIGF0IERIQ1AgKi8KLSAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0hJR0hfUEVSRl9NT0RFOgotICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAvKiBEZWZlciBzY2FuIHJlcXVlc3Qgc2luY2Ugd2Ugc2hvdWxkIG5vdCBzd2l0Y2ggdG8gb3RoZXIgY2hhbm5lbHMgYXQgREhDUCAqLwotICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TQ0FOOgotICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFZlcmlmeWluZ0xpbmtTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgbG9nKGdldE5hbWUoKSArICIgZW50ZXIiKTsKLSAgICAgICAgICAgIHNldE5ldHdvcmtEZXRhaWxlZFN0YXRlKERldGFpbGVkU3RhdGUuVkVSSUZZSU5HX1BPT1JfTElOSyk7Ci0gICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLnVwZGF0ZVN0YXR1cyhtTGFzdE5ldHdvcmtJZCwgRGV0YWlsZWRTdGF0ZS5WRVJJRllJTkdfUE9PUl9MSU5LKTsKLSAgICAgICAgICAgIHNlbmROZXR3b3JrU3RhdGVDaGFuZ2VCcm9hZGNhc3QobUxhc3RCc3NpZCk7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZS5QT09SX0xJTktfREVURUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vc3RheSBoZXJlCi0gICAgICAgICAgICAgICAgICAgIGxvZyhnZXROYW1lKCkgKyAiIFBPT1JfTElOS19ERVRFQ1RFRDogbm8gdHJhbnNpdGlvbiIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZS5HT09EX0xJTktfREVURUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgIGxvZyhnZXROYW1lKCkgKyAiIEdPT0RfTElOS19ERVRFQ1RFRDogdHJhbnNpdGlvbiB0byBjYXB0aXZlIHBvcnRhbCBjaGVjayIpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUNhcHRpdmVQb3J0YWxDaGVja1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKGdldE5hbWUoKSArICIgd2hhdD0iICsgbWVzc2FnZS53aGF0ICsgIiBOT1RfSEFORExFRCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIENhcHRpdmVQb3J0YWxDaGVja1N0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBsb2coZ2V0TmFtZSgpICsgIiBlbnRlciIpOwotICAgICAgICAgICAgc2V0TmV0d29ya0RldGFpbGVkU3RhdGUoRGV0YWlsZWRTdGF0ZS5DQVBUSVZFX1BPUlRBTF9DSEVDSyk7Ci0gICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLnVwZGF0ZVN0YXR1cyhtTGFzdE5ldHdvcmtJZCwgRGV0YWlsZWRTdGF0ZS5DQVBUSVZFX1BPUlRBTF9DSEVDSyk7Ci0gICAgICAgICAgICBzZW5kTmV0d29ya1N0YXRlQ2hhbmdlQnJvYWRjYXN0KG1MYXN0QnNzaWQpOwotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfQ0FQVElWRV9DSEVDS19DT01QTEVURToKLSAgICAgICAgICAgICAgICAgICAgbG9nKGdldE5hbWUoKSArICIgQ01EX0NBUFRJVkVfQ0hFQ0tfQ09NUExFVEUiKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2UuZW5hYmxlSXB2NihtSW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGVuYWJsZSBJUHY2OiAiICsgcmUpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGVuYWJsZSBJUHY2OiAiICsgZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2V0TmV0d29ya0RldGFpbGVkU3RhdGUoRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQpOwotICAgICAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLnVwZGF0ZVN0YXR1cyhtTGFzdE5ldHdvcmtJZCwgRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQpOwotICAgICAgICAgICAgICAgICAgICBzZW5kTmV0d29ya1N0YXRlQ2hhbmdlQnJvYWRjYXN0KG1MYXN0QnNzaWQpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUNvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBDb25uZWN0ZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgIGNhc2UgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lLlBPT1JfTElOS19ERVRFQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJXYXRjaGRvZyByZXBvcnRzIHBvb3IgbGluayIpOwotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS5kaXNhYmxlSXB2NihtSW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGRpc2FibGUgSVB2NjogIiArIHJlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBkaXNhYmxlIElQdjY6ICIgKyBlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvKiBSZXBvcnQgYSBkaXNjb25uZWN0ICovCi0gICAgICAgICAgICAgICAgICAgIHNldE5ldHdvcmtEZXRhaWxlZFN0YXRlKERldGFpbGVkU3RhdGUuRElTQ09OTkVDVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS51cGRhdGVTdGF0dXMobUxhc3ROZXR3b3JrSWQsIERldGFpbGVkU3RhdGUuRElTQ09OTkVDVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZE5ldHdvcmtTdGF0ZUNoYW5nZUJyb2FkY2FzdChtTGFzdEJzc2lkKTsKLQotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVZlcmlmeWluZ0xpbmtTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgewotICAgICAgICAgICAgLyogUmVxdWVzdCBhIENTIHdha2Vsb2NrIGR1cmluZyB0cmFuc2l0aW9uIHRvIG1vYmlsZSAqLwotICAgICAgICAgICAgY2hlY2tBbmRTZXRDb25uZWN0aXZpdHlJbnN0YW5jZSgpOwotICAgICAgICAgICAgbUNtLnJlcXVlc3ROZXR3b3JrVHJhbnNpdGlvbldha2Vsb2NrKGdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBEaXNjb25uZWN0aW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX09QRVJBVElPTkFMX01PREU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgIT0gQ09OTkVDVF9NT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgZ2V0IGEgU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQgYmVmb3JlIE5FVFdPUktfRElTQ09OTkVDVElPTl9FVkVOVAotICAgICAgICAgICAgICAgICAgICAgKiB3ZSBoYXZlIG1pc3NlZCB0aGUgbmV0d29yayBkaXNjb25uZWN0aW9uLCB0cmFuc2l0aW9uIHRvIG1EaXNjb25uZWN0ZWRTdGF0ZQotICAgICAgICAgICAgICAgICAgICAgKiBhbmQgaGFuZGxlIHRoZSByZXN0IG9mIHRoZSBldmVudHMgdGhlcmUKLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Rpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgRGlzY29ubmVjdGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBtQWxhcm1FbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIC8qIFRoaXMgaXMgc2V0IGZyb20gdGhlIG92ZXJsYXkgY29uZmlnIGZpbGUgb3IgZnJvbSBhIHNlY3VyZSBzZXR0aW5nLgotICAgICAgICAgKiBBIHZhbHVlIG9mIDAgZGlzYWJsZXMgc2Nhbm5pbmcgaW4gdGhlIGZyYW1ld29yay4KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgbG9uZyBtRnJhbWV3b3JrU2NhbkludGVydmFsTXM7Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHNldFNjYW5BbGFybShib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgICAgIGlmIChlbmFibGVkID09IG1BbGFybUVuYWJsZWQpIHJldHVybjsKLSAgICAgICAgICAgIGlmIChlbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1GcmFtZXdvcmtTY2FuSW50ZXJ2YWxNcyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbUFsYXJtTWFuYWdlci5zZXRSZXBlYXRpbmcoQWxhcm1NYW5hZ2VyLlJUQ19XQUtFVVAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyBtRnJhbWV3b3JrU2NhbkludGVydmFsTXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZyYW1ld29ya1NjYW5JbnRlcnZhbE1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TY2FuSW50ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbUFsYXJtRW5hYmxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtQWxhcm1NYW5hZ2VyLmNhbmNlbChtU2NhbkludGVudCk7Ci0gICAgICAgICAgICAgICAgbUFsYXJtRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgLy8gV2UgZG9udCBzY2FuIGZyZXF1ZW50bHkgaWYgdGhpcyBpcyBhIHRlbXBvcmFyeSBkaXNjb25uZWN0Ci0gICAgICAgICAgICAvLyBkdWUgdG8gcDJwCi0gICAgICAgICAgICBpZiAobVRlbXBvcmFyaWx5RGlzY29ubmVjdFdpZmkpIHsKLSAgICAgICAgICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVAycFNlcnZpY2UuRElTQ09OTkVDVF9XSUZJX1JFU1BPTlNFKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1GcmFtZXdvcmtTY2FuSW50ZXJ2YWxNcyA9IFNldHRpbmdzLkdsb2JhbC5nZXRMb25nKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9GUkFNRVdPUktfU0NBTl9JTlRFUlZBTF9NUywKLSAgICAgICAgICAgICAgICAgICAgbURlZmF1bHRGcmFtZXdvcmtTY2FuSW50ZXJ2YWxNcyk7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogV2UgaW5pdGlhdGUgYmFja2dyb3VuZCBzY2FubmluZyBpZiBpdCBpcyBlbmFibGVkLCBvdGhlcndpc2Ugd2UKLSAgICAgICAgICAgICAqIGluaXRpYXRlIGFuIGluZnJlcXVlbnQgc2NhbiB0aGF0IHdha2VzIHVwIHRoZSBkZXZpY2UgdG8gZW5zdXJlCi0gICAgICAgICAgICAgKiBhIHVzZXIgY29ubmVjdHMgdG8gYW4gYWNjZXNzIHBvaW50IG9uIHRoZSBtb3ZlCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChtRW5hYmxlQmFja2dyb3VuZFNjYW4pIHsKLSAgICAgICAgICAgICAgICAvKiBJZiBhIHJlZ3VsYXIgc2NhbiByZXN1bHQgaXMgcGVuZGluZywgZG8gbm90IGluaXRpYXRlIGJhY2tncm91bmQKLSAgICAgICAgICAgICAgICAgKiBzY2FuIHVudGlsIHRoZSBzY2FuIHJlc3VsdHMgYXJlIHJldHVybmVkLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlCi0gICAgICAgICAgICAgICAgICogaW5pdGlhdGluZyBhIGJhY2tncm91bmQgc2NhbiB3aWxsIGNhbmNlbCB0aGUgcmVndWxhciBzY2FuIGFuZAotICAgICAgICAgICAgICAgICAqIHNjYW4gcmVzdWx0cyB3aWxsIG5vdCBiZSByZXR1cm5lZCB1bnRpbCBiYWNrZ3JvdW5kIHNjYW5uaW5nIGlzCi0gICAgICAgICAgICAgICAgICogY2xlYXJlZAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmICghbVNjYW5SZXN1bHRJc1BlbmRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZW5hYmxlQmFja2dyb3VuZFNjYW4odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXRTY2FuQWxhcm0odHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogSWYgd2UgaGF2ZSBubyBuZXR3b3JrcyBzYXZlZCwgdGhlIHN1cHBsaWNhbnQgc3RvcHMgZG9pbmcgdGhlIHBlcmlvZGljIHNjYW4uCi0gICAgICAgICAgICAgKiBUaGUgc2NhbnMgYXJlIHVzZWZ1bCB0byBub3RpZnkgdGhlIHVzZXIgb2YgdGhlIHByZXNlbmNlIG9mIGFuIG9wZW4gbmV0d29yay4KLSAgICAgICAgICAgICAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgbm90IHdha2UgdXAgc2NhbnMuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICghbVAycENvbm5lY3RlZC5nZXQoKSAmJiBtV2lmaUNvbmZpZ1N0b3JlLmdldENvbmZpZ3VyZWROZXR3b3JrcygpLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX05PX05FVFdPUktTX1BFUklPRElDX1NDQU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyttUGVyaW9kaWNTY2FuVG9rZW4sIDApLCBtU3VwcGxpY2FudFNjYW5JbnRlcnZhbE1zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBib29sZWFuIHJldCA9IEhBTkRMRUQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX05PX05FVFdPUktTX1BFUklPRElDX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtUDJwQ29ubmVjdGVkLmdldCgpKSBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSBtUGVyaW9kaWNTY2FuVG9rZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmdldENvbmZpZ3VyZWROZXR3b3JrcygpLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfU0NBTiwgVU5LTk9XTl9TQ0FOX1NPVVJDRSwgMCwgKFdvcmtTb3VyY2UpIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX05PX05FVFdPUktTX1BFUklPRElDX1NDQU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK21QZXJpb2RpY1NjYW5Ub2tlbiwgMCksIG1TdXBwbGljYW50U2NhbkludGVydmFsTXMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuRk9SR0VUX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVNT1ZFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNldCB1cCBhIGRlbGF5ZWQgbWVzc2FnZSBoZXJlLiBBZnRlciB0aGUgZm9yZ2V0L3JlbW92ZSBpcyBoYW5kbGVkCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBoYW5kbGVkIGRlbGF5ZWQgbWVzc2FnZSB3aWxsIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgLy8gc2NhbiBhbmQgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX05PX05FVFdPUktTX1BFUklPRElDX1NDQU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbVBlcmlvZGljU2NhblRva2VuLCAwKSwgbVN1cHBsaWNhbnRTY2FuSW50ZXJ2YWxNcyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSAhPSBDT05ORUNUX01PREUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1PcGVyYXRpb25hbE1vZGUgPSBtZXNzYWdlLmFyZzE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZGlzYWJsZUFsbE5ldHdvcmtzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobU9wZXJhdGlvbmFsTW9kZSA9PSBTQ0FOX09OTFlfV0lUSF9XSUZJX09GRl9NT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlQMnBDaGFubmVsLnNlbmRNZXNzYWdlKENNRF9ESVNBQkxFX1AyUF9SRVEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFdpZmlTdGF0ZShXSUZJX1NUQVRFX0RJU0FCTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1TY2FuTW9kZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9FTkFCTEVfQkFDS0dST1VORF9TQ0FOOgotICAgICAgICAgICAgICAgICAgICBtRW5hYmxlQmFja2dyb3VuZFNjYW4gPSAobWVzc2FnZS5hcmcxID09IDEpOwotICAgICAgICAgICAgICAgICAgICBpZiAobUVuYWJsZUJhY2tncm91bmRTY2FuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5lbmFibGVCYWNrZ3JvdW5kU2Nhbih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjYW5BbGFybShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5lbmFibGVCYWNrZ3JvdW5kU2NhbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTY2FuQWxhcm0odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIElnbm9yZSBuZXR3b3JrIGRpc2Nvbm5lY3QgKi8KLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLk5FVFdPUktfRElTQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgU3RhdGVDaGFuZ2VSZXN1bHQgc3RhdGVDaGFuZ2VSZXN1bHQgPSAoU3RhdGVDaGFuZ2VSZXN1bHQpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBzZXROZXR3b3JrRGV0YWlsZWRTdGF0ZShXaWZpSW5mby5nZXREZXRhaWxlZFN0YXRlT2Yoc3RhdGVDaGFuZ2VSZXN1bHQuc3RhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdE1vZGVTdGF0ZSBkb2VzIHRoZSByZXN0IG9mIHRoZSBoYW5kbGluZyAqLwotICAgICAgICAgICAgICAgICAgICByZXQgPSBOT1RfSEFORExFRDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU0NBTjoKLSAgICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBiYWNrZ3JvdW5kIHNjYW4gdGVtcG9yYXJpbHkgZHVyaW5nIGEgcmVndWxhciBzY2FuICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChtRW5hYmxlQmFja2dyb3VuZFNjYW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmVuYWJsZUJhY2tncm91bmRTY2FuKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGVkIGluIHBhcmVudCBzdGF0ZSAqLwotICAgICAgICAgICAgICAgICAgICByZXQgPSBOT1RfSEFORExFRDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TQ0FOX1JFU1VMVFNfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIC8qIFJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjYW4gd2hlbiBhIHBlbmRpbmcgc2NhbiByZXN1bHQgaXMgcmVjZWl2ZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1FbmFibGVCYWNrZ3JvdW5kU2NhbiAmJiBtU2NhblJlc3VsdElzUGVuZGluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZW5hYmxlQmFja2dyb3VuZFNjYW4odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlZCBpbiBwYXJlbnQgc3RhdGUgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycFNlcnZpY2UuUDJQX0NPTk5FQ1RJT05fQ0hBTkdFRDoKLSAgICAgICAgICAgICAgICAgICAgTmV0d29ya0luZm8gaW5mbyA9IChOZXR3b3JrSW5mbykgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIG1QMnBDb25uZWN0ZWQuc2V0KGluZm8uaXNDb25uZWN0ZWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtUDJwQ29ubmVjdGVkLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdEludGVydmFsID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5pbnRlZ2VyLmNvbmZpZ193aWZpX3NjYW5faW50ZXJ2YWxfcDJwX2Nvbm5lY3RlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNjYW5JbnRlcnZhbE1zID0gU2V0dGluZ3MuR2xvYmFsLmdldExvbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1NDQU5fSU5URVJWQUxfV0hFTl9QMlBfQ09OTkVDVEVEX01TLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SW50ZXJ2YWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0U2NhbkludGVydmFsKChpbnQpIHNjYW5JbnRlcnZhbE1zLzEwMDApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1XaWZpQ29uZmlnU3RvcmUuZ2V0Q29uZmlndXJlZE5ldHdvcmtzKCkuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiVHVybiBvbiBzY2FubmluZyBhZnRlciBwMnAgZGlzY29ubmVjdGVkIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfTk9fTkVUV09SS1NfUEVSSU9ESUNfU0NBTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbVBlcmlvZGljU2NhblRva2VuLCAwKSwgbVN1cHBsaWNhbnRTY2FuSW50ZXJ2YWxNcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUNPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVBU1NPQ0lBVEU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtVGVtcG9yYXJpbHlEaXNjb25uZWN0V2lmaSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRHJvcCBhIHRoaXJkIHBhcnR5IHJlY29ubmVjdC9yZWFzc29jaWF0ZSBpZiBTVEEgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlbXBvcmFyaWx5IGRpc2Nvbm5lY3RlZCBmb3IgcDJwCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbm5lY3RNb2RlU3RhdGUgaGFuZGxlcyBpdAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7Ci0gICAgICAgICAgICAvKiBObyBuZWVkIGZvciBhIGJhY2tncm91bmQgc2NhbiB1cG9uIGV4aXQgZnJvbSBhIGRpc2Nvbm5lY3RlZCBzdGF0ZSAqLwotICAgICAgICAgICAgaWYgKG1FbmFibGVCYWNrZ3JvdW5kU2NhbikgewotICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmVuYWJsZUJhY2tncm91bmRTY2FuKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldFNjYW5BbGFybShmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBXcHNSdW5uaW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIC8vVHJhY2tzIHRoZSBzb3VyY2UgdG8gcHJvdmlkZSBhIHJlcGx5Ci0gICAgICAgIHByaXZhdGUgTWVzc2FnZSBtU291cmNlTWVzc2FnZTsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UgPSBNZXNzYWdlLm9idGFpbihnZXRDdXJyZW50TWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuV1BTX1NVQ0NFU1NfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBpbnRlcm1lZGlhdGUgc3VjY2Vzcywgd2FpdCBmb3IgZnVsbCBjb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19DT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtU291cmNlTWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0NPTVBMRVRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIG1Tb3VyY2VNZXNzYWdlLnJlY3ljbGUoKTsKLSAgICAgICAgICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19PVkVSTEFQX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtU291cmNlTWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5XUFNfT1ZFUkxBUF9FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgIG1Tb3VyY2VNZXNzYWdlLnJlY3ljbGUoKTsKLSAgICAgICAgICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5XUFNfRkFJTF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgLy9hcmcxIGhhcyB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZQotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtU291cmNlTWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwgbWVzc2FnZS5hcmcxKTsKLSAgICAgICAgICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UucmVjeWNsZSgpOwotICAgICAgICAgICAgICAgICAgICBtU291cmNlTWVzc2FnZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19USU1FT1VUX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtU291cmNlTWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5XUFNfVElNRURfT1VUKTsKLSAgICAgICAgICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UucmVjeWNsZSgpOwotICAgICAgICAgICAgICAgICAgICBtU291cmNlTWVzc2FnZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNUQVJUX1dQUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwgV2lmaU1hbmFnZXIuSU5fUFJPR1JFU1MpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNBTkNFTF9XUFM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5jYW5jZWxXcHMoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuQ0FOQ0VMX1dQU19TVUNDRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5DQU5DRUxfV1BTX0ZBSUxFRCwgV2lmaU1hbmFnZXIuRVJST1IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAvKiBEZWZlciBhbGwgY29tbWFuZHMgdGhhdCBjYW4gY2F1c2UgY29ubmVjdGlvbnMgdG8gYSBkaWZmZXJlbnQgbmV0d29yawotICAgICAgICAgICAgICAgICAqIG9yIHB1dCB0aGUgc3RhdGUgbWFjaGluZSBvdXQgb2YgY29ubmVjdCBtb2RlCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX09QRVJBVElPTkFMX01PREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfRU5BQkxFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVDT05ORUNUOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFQVNTT0NJQVRFOgotICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIk5ldHdvcmsgY29ubmVjdGlvbiBsb3N0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVNTT0NJQVRJT05fUkVKRUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIklnbm9yZSBBc3NvYyByZWplY3QgZXZlbnQgZHVyaW5nIFdQUyBDb25uZWN0aW9uIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgLy8gRGlzcmVnYXJkIGF1dGggZmFpbHVyZSBldmVudHMgZHVyaW5nIFdQUyBjb25uZWN0aW9uLiBUaGUKLSAgICAgICAgICAgICAgICAgICAgLy8gRUFQIHNlcXVlbmNlIGlzIHJldHJpZWQgc2V2ZXJhbCB0aW1lcywgYW5kIHRoZXJlIG1pZ2h0IGJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGZhaWx1cmVzIChlc3BlY2lhbGx5IGZvciB3cHMgcGluKS4gV2Ugd2lsbCBnZXQgYSBXUFNfWFhYCi0gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGF0IHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlIGFueXdheS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJJZ25vcmUgYXV0aCBmYWlsdXJlIGR1cmluZyBXUFMgY29ubmVjdGlvbiIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICAvL1Rocm93IGF3YXkgc3VwcGxpY2FudCBzdGF0ZSBjaGFuZ2VzIHdoZW4gV1BTIGlzIHJ1bm5pbmcuCi0gICAgICAgICAgICAgICAgICAgIC8vV2Ugd2lsbCBzdGFydCBnZXR0aW5nIHN1cHBsaWNhbnQgc3RhdGUgY2hhbmdlcyBvbmNlIHdlIGdldAotICAgICAgICAgICAgICAgICAgICAvL2EgV1BTIHN1Y2Nlc3Mgb3IgZmFpbHVyZQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgewotICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5lbmFibGVBbGxOZXR3b3JrcygpOwotICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5sb2FkQ29uZmlndXJlZE5ldHdvcmtzKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBTb2Z0QXBTdGFydGluZ1N0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBmaW5hbCBNZXNzYWdlIG1lc3NhZ2UgPSBnZXRDdXJyZW50TWVzc2FnZSgpOwotICAgICAgICAgICAgaWYgKG1lc3NhZ2Uud2hhdCA9PSBDTURfU1RBUlRfQVApIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSAoV2lmaUNvbmZpZ3VyYXRpb24pIG1lc3NhZ2Uub2JqOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpQXBDb25maWdDaGFubmVsLnNlbmRNZXNzYWdlKENNRF9SRVFVRVNUX0FQX0NPTkZJRyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlBcENvbmZpZ0NoYW5uZWwuc2VuZE1lc3NhZ2UoQ01EX1NFVF9BUF9DT05GSUcsIGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0U29mdEFwV2l0aENvbmZpZyhjb25maWcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIklsbGVnYWwgdHJhbnNpdGlvbiB0byBTb2Z0QXBTdGFydGluZ1N0YXRlOiAiICsgbWVzc2FnZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9TVVBQTElDQU5UOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfQVA6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkc6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9SRVNQT05TRV9BUF9DT05GSUc6Ci0gICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IChXaWZpQ29uZmlndXJhdGlvbikgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTb2Z0QXBXaXRoQ29uZmlnKGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJTb2Z0YXAgY29uZmlnIGlzIG51bGwhIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfQVBfRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVBfU1VDQ0VTUzoKLSAgICAgICAgICAgICAgICAgICAgc2V0V2lmaUFwU3RhdGUoV0lGSV9BUF9TVEFURV9FTkFCTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Tb2Z0QXBTdGFydGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUF9GQUlMVVJFOgotICAgICAgICAgICAgICAgICAgICBzZXRXaWZpQXBTdGF0ZShXSUZJX0FQX1NUQVRFX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5pdGlhbFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBTb2Z0QXBTdGFydGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlN0b3BwaW5nIFNvZnQgQVAiKTsKLSAgICAgICAgICAgICAgICAgICAgLyogV2UgaGF2ZSBub3QgdGV0aGVyZWQgYXQgdGhpcyBwb2ludCwgc28gd2UganVzdCBzaHV0ZG93biBzb2Z0IEFwICovCi0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnN0b3BBY2Nlc3NQb2ludChtSW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkV4Y2VwdGlvbiBpbiBzdG9wQWNjZXNzUG9pbnQoKSIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNldFdpZmlBcFN0YXRlKFdJRklfQVBfU1RBVEVfRElTQUJMRUQpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluaXRpYWxTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQOgotICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgYSBzdGFydCBvbiBhIHJ1bm5pbmcgYWNjZXNzIHBvaW50Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAvKiBGYWlsIGNsaWVudCBtb2RlIG9wZXJhdGlvbiB3aGVuIHNvZnQgQVAgaXMgZW5hYmxlZCAqLwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIkNhbm5vdCBzdGFydCBzdXBwbGljYW50IHdpdGggYSBydW5uaW5nIHNvZnQgQVAiKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0V2lmaVN0YXRlKFdJRklfU1RBVEVfVU5LTk9XTik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIFRldGhlclN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlID0gKFRldGhlclN0YXRlQ2hhbmdlKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0VGV0aGVyaW5nKHN0YXRlQ2hhbmdlLmF2YWlsYWJsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVGV0aGVyaW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgVGV0aGVyaW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIC8qIFNlbmQgb3Vyc2VsdmVzIGEgZGVsYXllZCBtZXNzYWdlIHRvIHNodXQgZG93biBpZiB0ZXRoZXJpbmcgZmFpbHMgdG8gbm90aWZ5ICovCi0gICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfVEVUSEVSX05PVElGSUNBVElPTl9USU1FRF9PVVQsCi0gICAgICAgICAgICAgICAgICAgICsrbVRldGhlclRva2VuLCAwKSwgVEVUSEVSX05PVElGSUNBVElPTl9USU1FX09VVF9NU0VDUyk7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIFRldGhlclN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlID0gKFRldGhlclN0YXRlQ2hhbmdlKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzV2lmaVRldGhlcmVkKHN0YXRlQ2hhbmdlLmFjdGl2ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVGV0aGVyZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfVEVUSEVSX05PVElGSUNBVElPTl9USU1FRF9PVVQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gbVRldGhlclRva2VuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gZ2V0IHRldGhlciB1cGRhdGUsIHNodXRkb3duIHNvZnQgYWNjZXNzIHBvaW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNvZnRBcFN0YXJ0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOZWVkcyB0byBiZSBmaXJzdCB0aGluZyBoYW5kbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZUF0RnJvbnRPZlF1ZXVlKENNRF9TVE9QX0FQKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TVVBQTElDQU5UOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORzoKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFRldGhlcmVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9URVRIRVJfU1RBVEVfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICBUZXRoZXJTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5nZSA9IChUZXRoZXJTdGF0ZUNoYW5nZSkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNXaWZpVGV0aGVyZWQoc3RhdGVDaGFuZ2UuYWN0aXZlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiVGV0aGVyaW5nIHJlcG9ydHMgd2lmaSBhcyB1bnRldGhlcmVkISwgc2h1dCBkb3duIHNvZnQgQXAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvc3RBcFJ1bm5pbmcobnVsbCwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9zdEFwUnVubmluZyhudWxsLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlVudGV0aGVyaW5nIGJlZm9yZSBzdG9wcGluZyBBUCIpOwotICAgICAgICAgICAgICAgICAgICBzZXRXaWZpQXBTdGF0ZShXSUZJX0FQX1NUQVRFX0RJU0FCTElORyk7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3BUZXRoZXJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1VbnRldGhlcmluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gTW9yZSB3b3JrIHRvIGRvIGFmdGVyIHVudGV0aGVyaW5nCi0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBVbnRldGhlcmluZ1N0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICAvKiBTZW5kIG91cnNlbHZlcyBhIGRlbGF5ZWQgbWVzc2FnZSB0byBzaHV0IGRvd24gaWYgdGV0aGVyaW5nIGZhaWxzIHRvIG5vdGlmeSAqLwotICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX1RFVEhFUl9OT1RJRklDQVRJT05fVElNRURfT1VULAotICAgICAgICAgICAgICAgICAgICArK21UZXRoZXJUb2tlbiwgMCksIFRFVEhFUl9OT1RJRklDQVRJT05fVElNRV9PVVRfTVNFQ1MpOwotCi0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIFRldGhlclN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlID0gKFRldGhlclN0YXRlQ2hhbmdlKSBtZXNzYWdlLm9iajsKLQotICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IHRpbGwgd2lmaSBpcyB1bnRldGhlcmVkICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc1dpZmlUZXRoZXJlZChzdGF0ZUNoYW5nZS5hY3RpdmUpKSBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNvZnRBcFN0YXJ0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9OT1RJRklDQVRJT05fVElNRURfT1VUOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IG1UZXRoZXJUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGdldCB0ZXRoZXIgdXBkYXRlLCBmb3JjZSBzdG9wIGFjY2VzcyBwb2ludCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Tb2Z0QXBTdGFydGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9TVVBQTElDQU5UOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfQVA6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkc6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy9TdGF0ZSBtYWNoaW5lIGluaXRpYXRlZCByZXF1ZXN0cyBjYW4gaGF2ZSByZXBseVRvIHNldCB0byBudWxsIGluZGljYXRpbmcKLSAgICAvL3RoZXJlIGFyZSBubyByZWNlcGllbnRzLCB3ZSBpZ25vcmUgdGhvc2UgcmVwbHkgYWN0aW9ucwotICAgIHByaXZhdGUgdm9pZCByZXBseVRvTWVzc2FnZShNZXNzYWdlIG1zZywgaW50IHdoYXQpIHsKLSAgICAgICAgaWYgKG1zZy5yZXBseVRvID09IG51bGwpIHJldHVybjsKLSAgICAgICAgTWVzc2FnZSBkc3RNc2cgPSBvYnRhaW5NZXNzYWdlV2l0aEFyZzIobXNnKTsKLSAgICAgICAgZHN0TXNnLndoYXQgPSB3aGF0OwotICAgICAgICBtUmVwbHlDaGFubmVsLnJlcGx5VG9NZXNzYWdlKG1zZywgZHN0TXNnKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVwbHlUb01lc3NhZ2UoTWVzc2FnZSBtc2csIGludCB3aGF0LCBpbnQgYXJnMSkgewotICAgICAgICBpZiAobXNnLnJlcGx5VG8gPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICBNZXNzYWdlIGRzdE1zZyA9IG9idGFpbk1lc3NhZ2VXaXRoQXJnMihtc2cpOwotICAgICAgICBkc3RNc2cud2hhdCA9IHdoYXQ7Ci0gICAgICAgIGRzdE1zZy5hcmcxID0gYXJnMTsKLSAgICAgICAgbVJlcGx5Q2hhbm5lbC5yZXBseVRvTWVzc2FnZShtc2csIGRzdE1zZyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlcGx5VG9NZXNzYWdlKE1lc3NhZ2UgbXNnLCBpbnQgd2hhdCwgT2JqZWN0IG9iaikgewotICAgICAgICBpZiAobXNnLnJlcGx5VG8gPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICBNZXNzYWdlIGRzdE1zZyA9IG9idGFpbk1lc3NhZ2VXaXRoQXJnMihtc2cpOwotICAgICAgICBkc3RNc2cud2hhdCA9IHdoYXQ7Ci0gICAgICAgIGRzdE1zZy5vYmogPSBvYmo7Ci0gICAgICAgIG1SZXBseUNoYW5uZWwucmVwbHlUb01lc3NhZ2UobXNnLCBkc3RNc2cpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIGFyZzIgb24gdGhlIHNvdXJjZSBtZXNzYWdlIGhhcyBhIHVuaXF1ZSBpZCB0aGF0IG5lZWRzIHRvIGJlIHJldGFpbmVkIGluIHJlcGxpZXMKLSAgICAgKiB0byBtYXRjaCB0aGUgcmVxdWVzdAotCi0gICAgICogc2VlIFdpZmlNYW5hZ2VyIGZvciBkZXRhaWxzCi0gICAgICovCi0gICAgcHJpdmF0ZSBNZXNzYWdlIG9idGFpbk1lc3NhZ2VXaXRoQXJnMihNZXNzYWdlIHNyY01zZykgewotICAgICAgICBNZXNzYWdlIG1zZyA9IE1lc3NhZ2Uub2J0YWluKCk7Ci0gICAgICAgIG1zZy5hcmcyID0gc3JjTXNnLmFyZzI7Ci0gICAgICAgIHJldHVybiBtc2c7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaVN0YXRlVHJhY2tlci5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaVN0YXRlVHJhY2tlci5qYXZhCmluZGV4IDYxNWM4OTMuLjdkZWQxNzEgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlTdGF0ZVRyYWNrZXIuamF2YQorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU3RhdGVUcmFja2VyLmphdmEKQEAgLTExNSwxNCArMTE1LDYgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQ2FwdGl2ZSBjaGVjayBpcyBjb21wbGV0ZSwgc3dpdGNoIHRvIG5ldHdvcmsKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZSgpIHsKLSAgICAgICAgbVdpZmlNYW5hZ2VyLmNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCk7Ci0gICAgfQotCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGVkKGJvb2xlYW4gaXNDYXB0aXZlUG9ydGFsKSB7CiAgICAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZApkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI3OGM4OS4uMDAwMDAwMAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5uZXQud2lmaTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubmV0LkxpbmtQcm9wZXJ0aWVzOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuUnNzaVBhY2tldENvdW50SW5mbzsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuU2VjdXJlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxydUNhY2hlOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFzeW5jQ2hhbm5lbDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByb3RvY29sOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZU1hY2hpbmU7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS50ZXh0LkRlY2ltYWxGb3JtYXQ7Ci0KLS8qKgotICogV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lIG1vbml0b3JzIHRoZSBjb25uZWN0aW9uIHRvIGEgV2lGaSBuZXR3b3JrLiBXaGVuIFdpRmkKLSAqIGNvbm5lY3RzIGF0IEwyIGxheWVyLCB0aGUgYmVhY29ucyBmcm9tIGFjY2VzcyBwb2ludCByZWFjaCB0aGUgZGV2aWNlIGFuZCBpdAotICogY2FuIG1haW50YWluIGEgY29ubmVjdGlvbiwgYnV0IHRoZSBhcHBsaWNhdGlvbiBjb25uZWN0aXZpdHkgY2FuIGJlIGZsYWt5IChkdWUKLSAqIHRvIGJpZ2dlciBwYWNrZXQgc2l6ZSBleGNoYW5nZSkuCi0gKiA8cD4KLSAqIFdlIG5vdyBtb25pdG9yIHRoZSBxdWFsaXR5IG9mIHRoZSBsYXN0IGhvcCBvbiBXaUZpIHVzaW5nIHBhY2tldCBsb3NzIHJhdGlvIGFzCi0gKiBhbiBpbmRpY2F0b3IgdG8gZGVjaWRlIGlmIHRoZSBsaW5rIGlzIGdvb2QgZW5vdWdoIHRvIHN3aXRjaCB0byBXaS1GaSBhcyB0aGUKLSAqIHVwbGluay4KLSAqIDxwPgotICogV2hlbiBXaUZpIGlzIGNvbm5lY3RlZCwgdGhlIFdpRmkgd2F0Y2hkb2cga2VlcHMgc2FtcGxpbmcgdGhlIFJTU0kgYW5kIHRoZQotICogaW5zdGFudCBwYWNrZXQgbG9zcywgYW5kIHJlY29yZCBpdCBhcyBwZXItQVAgbG9zcy10by1yc3NpIHN0YXRpc3RpY3MuIFdoZW4KLSAqIHRoZSBpbnN0YW50IHBhY2tldCBsb3NzIGlzIGhpZ2hlciB0aGFuIGEgdGhyZXNob2xkLCB0aGUgV2lGaSB3YXRjaGRvZyBzZW5kcyBhCi0gKiBwb29yIGxpbmsgbm90aWZpY2F0aW9uIHRvIGF2b2lkIFdpRmkgY29ubmVjdGlvbiB0ZW1wb3JhcmlseS4KLSAqIDxwPgotICogV2hpbGUgV2lGaSBpcyBiZWluZyBhdm9pZGVkLCB0aGUgV2lGaSB3YXRjaGRvZyBrZWVwIHdhdGNoaW5nIHRoZSBSU1NJIHRvCi0gKiBicmluZyB0aGUgV2lGaSBjb25uZWN0aW9uIGJhY2suIE9uY2UgdGhlIFJTU0kgaXMgaGlnaCBlbm91Z2ggdG8gYWNoaWV2ZSBhCi0gKiBsb3dlciBwYWNrZXQgbG9zcywgYSBnb29kIGxpbmsgZGV0ZWN0aW9uIGlzIHNlbnQgc3VjaCB0aGF0IHRoZSBXaUZpCi0gKiBjb25uZWN0aW9uIGJlY29tZSBhdmFpbGFibGUgYWdhaW4uCi0gKiA8cD4KLSAqIEJTU0lEIHJvYW1pbmcgaGFzIGJlZW4gdGFrZW4gaW50byBhY2NvdW50LiBXaGVuIHVzZXIgaXMgbW92aW5nIGFjcm9zcwotICogbXVsdGlwbGUgQVBzLCB0aGUgV2lGaSB3YXRjaGRvZyB3aWxsIGRldGVjdCB0aGF0IGFuZCBrZWVwIHdhdGNoaW5nIHRoZQotICogY3VycmVudGx5IGNvbm5lY3RlZCBBUC4KLSAqIDxwPgotICogUG93ZXIgaW1wYWN0IHNob3VsZCBiZSBtaW5pbWFsIHNpbmNlIG11Y2ggb2YgdGhlIG1lYXN1cmVtZW50IHJlbGllcyBvbgotICogcGFzc2l2ZSBzdGF0aXN0aWNzIGFscmVhZHkgYmVpbmcgdHJhY2tlZCBhdCB0aGUgZHJpdmVyIGFuZCB0aGUgcG9sbGluZyBpcwotICogZG9uZSB3aGVuIHNjcmVlbiBpcyB0dXJuZWQgb24gYW5kIHRoZSBSU1NJIGlzIGluIGEgY2VydGFpbiByYW5nZS4KLSAqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lIGV4dGVuZHMgU3RhdGVNYWNoaW5lIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQkFTRSA9IFByb3RvY29sLkJBU0VfV0lGSV9XQVRDSERPRzsKLQotICAgIC8qIEludGVybmFsIGV2ZW50cyAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9XQVRDSERPR19UT0dHTEVEICAgICAgICAgICAgICAgICA9IEJBU0UgKyAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9ORVRXT1JLX1NUQVRFX0NIQU5HRSAgICAgICAgICAgICA9IEJBU0UgKyAyOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9SU1NJX0NIQU5HRSAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAzOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVVBQTElDQU5UX1NUQVRFX0NIQU5HRSAgICAgICAgICA9IEJBU0UgKyA0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9XSUZJX1JBRElPX1NUQVRFX0NIQU5HRSAgICAgICAgICA9IEJBU0UgKyA1OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9XQVRDSERPR19TRVRUSU5HU19DSEFOR0UgICAgICAgICA9IEJBU0UgKyA2OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9CU1NJRF9DSEFOR0UgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA3OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TQ1JFRU5fT04gICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA4OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TQ1JFRU5fT0ZGICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA5OwotCi0gICAgLyogSW50ZXJuYWwgbWVzc2FnZXMgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1JTU0lfRkVUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTE7Ci0KLSAgICAvKiBOb3RpZmljYXRpb25zIGZyb20vdG8gV2lmaVN0YXRlTWFjaGluZSAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgUE9PUl9MSU5LX0RFVEVDVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAyMTsKLSAgICBzdGF0aWMgZmluYWwgaW50IEdPT0RfTElOS19ERVRFQ1RFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMjI7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9QT09SX05FVFdPUktfQVZPSURBTkNFX0VOQUJMRUQgPSBmYWxzZTsKLQotICAgIC8qCi0gICAgICogUlNTSSBsZXZlbHMgYXMgdXNlZCBieSBub3RpZmljYXRpb24gaWNvbgotICAgICAqIExldmVsIDQgIC01NSA8PSBSU1NJCi0gICAgICogTGV2ZWwgMyAgLTY2IDw9IFJTU0kgPCAtNTUKLSAgICAgKiBMZXZlbCAyICAtNzcgPD0gUlNTSSA8IC02NwotICAgICAqIExldmVsIDEgIC04OCA8PSBSU1NJIDwgLTc4Ci0gICAgICogTGV2ZWwgMCAgICAgICAgIFJTU0kgPCAtODgKLSAgICAgKi8KLQotICAgIC8qKgotICAgICAqIFdpRmkgbGluayBzdGF0aXN0aWNzIGlzIG1vbml0b3JlZCBhbmQgcmVjb3JkZWQgYWN0aXZlbHkgYmVsb3cgdGhpcyB0aHJlc2hvbGQuCi0gICAgICogPHA+Ci0gICAgICogTGFyZ2VyIHRocmVzaG9sZCBpcyBtb3JlIGFkYXB0aXZlIGJ1dCBpbmNyZWFzZXMgc2FtcGxpbmcgY29zdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTElOS19NT05JVE9SX0xFVkVMX1RIUkVTSE9MRCA9IFdpZmlNYW5hZ2VyLlJTU0lfTEVWRUxTIC0gMTsKLQotICAgIC8qKgotICAgICAqIFJlbWVtYmVyIHBhY2tldCBsb3NzIHN0YXRpc3RpY3Mgb2YgaG93IG1hbnkgQlNTSURzLgotICAgICAqIDxwPgotICAgICAqIExhcmdlciBzaXplIGlzIHVzdWFsbHkgYmV0dGVyIGJ1dCByZXF1aXJlcyBtb3JlIHNwYWNlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCU1NJRF9TVEFUX0NBQ0hFX1NJWkUgPSAyMDsKLQotICAgIC8qKgotICAgICAqIFJTU0kgcmFuZ2Ugb2YgYSBCU1NJRCBzdGF0aXN0aWNzLgotICAgICAqIFdpdGhpbiB0aGUgcmFuZ2UsIChSU1NJIC0+IHBhY2tldCBsb3NzICUpIG1hcHBpbmdzIGFyZSBzdG9yZWQuCi0gICAgICogPHA+Ci0gICAgICogTGFyZ2VyIHJhbmdlIGlzIHVzdWFsbHkgYmV0dGVyIGJ1dCByZXF1aXJlcyBtb3JlIHNwYWNlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCU1NJRF9TVEFUX1JBTkdFX0xPV19EQk0gID0gLTEwNTsKLQotICAgIC8qKgotICAgICAqIFNlZSB7QGxpbmsgI0JTU0lEX1NUQVRfUkFOR0VfTE9XX0RCTX0uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJTU0lEX1NUQVRfUkFOR0VfSElHSF9EQk0gPSAtNDU7Ci0KLSAgICAvKioKLSAgICAgKiBIb3cgbWFueSBjb25zZWN1dGl2ZSBlbXB0eSBkYXRhIHBvaW50IHRvIHRyaWdnZXIgYSBlbXB0eS1jYWNoZSBkZXRlY3Rpb24uCi0gICAgICogSW4gdGhpcyBjYXNlLCBhIHByZXNldC9kZWZhdWx0IGxvc3MgdmFsdWUgKGZ1bmN0aW9uIG9uIFJTU0kpIGlzIHVzZWQuCi0gICAgICogPHA+Ci0gICAgICogSW4gbm9ybWFsIHVzZXMsIHNvbWUgUlNTSSB2YWx1ZXMgbWF5IG5ldmVyIGJlIHNlZW4gZHVlIHRvIGNoYW5uZWwgcmFuZG9tbmVzcy4KLSAgICAgKiBIb3dldmVyLCB0aGUgc2l6ZSBvZiBzdWNoIGVtcHR5IFJTU0kgY2h1bmsgaW4gbm9ybWFsIHVzZSBpcyBnZW5lcmFsbHkgMX4yLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCU1NJRF9TVEFUX0VNUFRZX0NPVU5UID0gMzsKLQotICAgIC8qKgotICAgICAqIFNhbXBsZSBpbnRlcnZhbCBmb3IgcGFja2V0IGxvc3Mgc3RhdGlzdGljcywgaW4gbXNlYy4KLSAgICAgKiA8cD4KLSAgICAgKiBTbWFsbGVyIGludGVydmFsIGlzIG1vcmUgYWNjdXJhdGUgYnV0IGluY3JlYXNlcyBzYW1wbGluZyBjb3N0IChiYXR0ZXJ5IGNvbnN1bXB0aW9uKS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIExJTktfU0FNUExJTkdfSU5URVJWQUxfTVMgPSAxICogMTAwMDsKLQotICAgIC8qKgotICAgICAqIENvZWZmaWNpZW50cyAoYWxwaGEpIGZvciBtb3ZpbmcgYXZlcmFnZSBmb3IgcGFja2V0IGxvc3MgdHJhY2tpbmcuCi0gICAgICogTXVzdCBiZSB3aXRoaW4gKDAuMCwgMS4wKS4KLSAgICAgKiA8cD4KLSAgICAgKiBFcXVpdmFsZW50IG51bWJlciBvZiBzYW1wbGVzOiBOID0gMiAvIGFscGhhIC0gMSAuCi0gICAgICogV2Ugd2FudCB0aGUgaGlzdG9yaWMgbG9zcyB0byBiYXNlIG9uIG1vcmUgZGF0YSBwb2ludHMgdG8gYmUgc3RhdGlzdGljYWxseSByZWxpYWJsZS4KLSAgICAgKiBXZSB3YW50IHRoZSBjdXJyZW50IGluc3RhbnQgbG9zcyB0byBiYXNlIG9uIGxlc3MgZGF0YSBwb2ludHMgdG8gYmUgcmVzcG9uc2l2ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgRVhQX0NPRUZGSUNJRU5UX1JFQ09SRCAgPSAwLjE7Ci0KLSAgICAvKioKLSAgICAgKiBTZWUge0BsaW5rICNFWFBfQ09FRkZJQ0lFTlRfUkVDT1JEfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgRVhQX0NPRUZGSUNJRU5UX01PTklUT1IgPSAwLjU7Ci0KLSAgICAvKioKLSAgICAgKiBUaHJlc2hvbGRzIGZvciBzZW5kaW5nIGdvb2QvcG9vciBsaW5rIG5vdGlmaWNhdGlvbnMsIGluIHBhY2tldCBsb3NzICUuCi0gICAgICogR29vZCB0aHJlc2hvbGQgbXVzdCBiZSBzbWFsbGVyIHRoYW4gcG9vciB0aHJlc2hvbGQuCi0gICAgICogVXNlIHNtYWxsZXIgcG9vciB0aHJlc2hvbGQgdG8gYXZvaWQgV2lGaSBtb3JlIGFnZ3Jlc3NpdmVseS4KLSAgICAgKiBVc2Ugc21hbGxlciBnb29kIHRocmVzaG9sZCB0byBicmluZyBiYWNrIFdpRmkgbW9yZSBjb25zZXJ2YXRpdmVseS4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuIGFwcHJvYWNoaW5nIHRoZSBib3VuZGFyeSwgbG9zcyByYXRpbyBqdW1wcyBzaWduaWZpY2FudGx5IHdpdGhpbiBhIGZldyBkQnMuCi0gICAgICogNTAlIGxvc3MgdGhyZXNob2xkIGlzIGEgZ29vZCBiYWxhbmNlIGJldHdlZW4gYWNjdXJhY3kgYW5kIHJlcG9uc2l2ZW5lc3MuCi0gICAgICogPD0xMCUgZ29vZCB0aHJlc2hvbGQgaXMgYSBzYWZlIHZhbHVlIHRvIGF2b2lkIGp1bXBpbmcgYmFjayB0byBXaUZpIHRvbyBlYXNpbHkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIFBPT1JfTElOS19MT1NTX1RIUkVTSE9MRCA9IDAuNTsKLQotICAgIC8qKgotICAgICAqIFNlZSB7QGxpbmsgI1BPT1JfTElOS19MT1NTX1RIUkVTSE9MRH0uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEdPT0RfTElOS19MT1NTX1RIUkVTSE9MRCA9IDAuMTsKLQotICAgIC8qKgotICAgICAqIE51bWJlciBvZiBzYW1wbGVzIHRvIGNvbmZpcm0gYmVmb3JlIHNlbmRpbmcgYSBwb29yIGxpbmsgbm90aWZpY2F0aW9uLgotICAgICAqIFJlc3BvbnNlIHRpbWUgPSBjb25maXJtX2NvdW50ICogc2FtcGxlX2ludGVydmFsIC4KLSAgICAgKiA8cD4KLSAgICAgKiBBIHNtYWxsZXIgdGhyZXNob2xkIGltcHJvdmVzIHJlc3BvbnNlIHNwZWVkIGJ1dCBtYXkgc3VmZmVyIGZyb20gcmFuZG9tbmVzcy4KLSAgICAgKiBBY2NvcmRpbmcgdG8gZXhwZXJpbWVudHMsIDN+NSBhcmUgZ29vZCB2YWx1ZXMgdG8gYWNoaWV2ZSBhIGJhbGFuY2UuCi0gICAgICogVGhlc2UgcGFyYW1ldGVycyBzaG91bGQgYmUgdHVuZWQgYWxvbmcgd2l0aCB7QGxpbmsgI0xJTktfU0FNUExJTkdfSU5URVJWQUxfTVN9LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQT09SX0xJTktfU0FNUExFX0NPVU5UID0gMzsKLQotICAgIC8qKgotICAgICAqIE1pbmltdW0gdm9sdW1lIChjb252ZXJ0ZWQgZnJvbSBwa3Qvc2VjKSB0byBkZXRlY3QgYSBwb29yIGxpbmssIHRvIGF2b2lkIHJhbmRvbW5lc3MuCi0gICAgICogPHA+Ci0gICAgICogQWNjb3JkaW5nIHRvIGV4cGVyaW1lbnRzLCAxcGt0L3NlYyBpcyB0b28gc2Vuc2l0aXZlIGJ1dCAzcGt0L3NlYyBpcyBzbGlnaHRseSB1bnJlc3BvbnNpdmUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIFBPT1JfTElOS19NSU5fVk9MVU1FID0gMi4wICogTElOS19TQU1QTElOR19JTlRFUlZBTF9NUyAvIDEwMDAuMDsKLQotICAgIC8qKgotICAgICAqIFdoZW4gYSBwb29yIGxpbmsgaXMgZGV0ZWN0ZWQsIHdlIHNjYW4gb3ZlciB0aGlzIHJhbmdlIChiYXNlZCBvbiBjdXJyZW50Ci0gICAgICogcG9vciBsaW5rIFJTU0kpIGZvciBhIHRhcmdldCBSU1NJIHRoYXQgc2F0aXNmaWVzIGEgdGFyZ2V0IHBhY2tldCBsb3NzLgotICAgICAqIFJlZmVyIHRvIHtAbGluayAjR09PRF9MSU5LX1RBUkdFVH0uCi0gICAgICogPHA+Ci0gICAgICogV2Ugd2FudCByYW5nZV9taW4gbm90IHRvbyBzbWFsbCB0byBhdm9pZCBqdW1waW5nIGJhY2sgdG8gV2lGaSB0b28gZWFzaWx5LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBHT09EX0xJTktfUlNTSV9SQU5HRV9NSU4gPSAzOwotCi0gICAgLyoqCi0gICAgICogU2VlIHtAbGluayAjR09PRF9MSU5LX1JTU0lfUkFOR0VfTUlOfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgR09PRF9MSU5LX1JTU0lfUkFOR0VfTUFYID0gMjA7Ci0KLSAgICAvKioKLSAgICAgKiBBZGFwdGl2ZSBnb29kIGxpbmsgdGFyZ2V0IHRvIGF2b2lkIGZsYXBwaW5nLgotICAgICAqIFdoZW4gYSBwb29yIGxpbmsgaXMgZGV0ZWN0ZWQsIGEgZ29vZCBsaW5rIHRhcmdldCBpcyBjYWxjdWxhdGVkIGFzIGZvbGxvd3M6Ci0gICAgICogPHA+Ci0gICAgICogICAgICB0YXJnZXRSU1NJID0gbWluIHsgcnNzaSB8IGxvc3MocnNzaSkgPCBHT09EX0xJTktfTE9TU19USFJFU0hPTEQgfSArIHJzc2lfYWRqW2ldLAotICAgICAqICAgICAgICAgICAgICAgICAgIHdoZXJlIHJzc2kgaXMgd2l0aGluIHRoZSBhYm92ZSBHT09EX0xJTktfUlNTSV9SQU5HRS4KLSAgICAgKiAgICAgIHRhcmdldENvdW50ID0gc2FtcGxlX2NvdW50W2ldIC4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGlsZSBXaUZpIGlzIGJlaW5nIGF2b2lkZWQsIHdlIGtlZXAgbW9uaXRvcmluZyBpdHMgc2lnbmFsIHN0cmVuZ3RoLgotICAgICAqIEdvb2QgbGluayBub3RpZmljYXRpb24gaXMgc2VudCB3aGVuIHdlIHNlZSBjdXJyZW50IFJTU0kgPj0gdGFyZ2V0UlNTSQotICAgICAqIGZvciB0YXJnZXRDb3VudCBjb25zZWN1dGl2ZSB0aW1lcy4KLSAgICAgKiA8cD4KLSAgICAgKiBJbmRleCBpIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBhZnRlciBhIHBvb3IgbGluayBkZXRlY3Rpb24uCi0gICAgICogSW5kZXggaSBpcyBkZWNyZWFzZWQgdG8gYXQgbW9zdCBrIGlmIHRoZSBsYXN0IHBvb3IgbGluayB3YXMgYXQgbGVhc2UgcmVkdWNlX3RpbWVba10gYWdvLgotICAgICAqIDxwPgotICAgICAqIEludHVpdGl2ZWx5LCBsYXJnZXIgaW5kZXggaSBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCB0byBnZXQgYmFjayB0byBXaUZpLCBhdm9pZGluZyBmbGFwcGluZy4KLSAgICAgKiBJbiBleHBlcmltZW50cywgKCs5IGRCIC8gMzAgY291bnRzKSBtYWtlcyBpdCBxdWl0ZSBkaWZmaWN1bHQgdG8gYWNoaWV2ZS4KLSAgICAgKiBBdm9pZCB1c2luZyBpdCB1bmxlc3MgZmxhcHBpbmcgaXMgcmVhbGx5IGJhZCAoc2F5LCBsYXN0IHBvb3IgbGluayBpcyA8IDEgbWluIGFnbykuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgR29vZExpbmtUYXJnZXRbXSBHT09EX0xJTktfVEFSR0VUID0gewotICAgICAgICAvKiAgICAgICAgICAgICAgICAgIHJzc2lfYWRqLCAgICAgICBzYW1wbGVfY291bnQsICAgcmVkdWNlX3RpbWUgKi8KLSAgICAgICAgbmV3IEdvb2RMaW5rVGFyZ2V0KCAwLCAgICAgICAgICAgICAgMywgICAgICAgICAgICAgIDMwICogNjAwMDAgICApLAotICAgICAgICBuZXcgR29vZExpbmtUYXJnZXQoIDMsICAgICAgICAgICAgICA1LCAgICAgICAgICAgICAgNSAgKiA2MDAwMCAgICksCi0gICAgICAgIG5ldyBHb29kTGlua1RhcmdldCggNiwgICAgICAgICAgICAgIDEwLCAgICAgICAgICAgICAxICAqIDYwMDAwICAgKSwKLSAgICAgICAgbmV3IEdvb2RMaW5rVGFyZ2V0KCA5LCAgICAgICAgICAgICAgMzAsICAgICAgICAgICAgIDAgICogNjAwMDAgICApLAotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWF4IHRpbWUgdG8gYXZvaWQgYSBCU1NJRCwgdG8gcHJldmVudCBhdm9pZGluZyBmb3JldmVyLgotICAgICAqIElmIGN1cnJlbnQgUlNTSSBpcyBhdCBsZWFzdCBtaW5fcnNzaVtpXSwgdGhlIG1heCBhdm9pZGFuY2UgdGltZSBpcyBhdCBtb3N0IG1heF90aW1lW2ldCi0gICAgICogPHA+Ci0gICAgICogSXQgaXMgdW51c3VhbCB0byBleHBlcmllbmNlIGhpZ2ggcGFja2V0IGxvc3MgYXQgaGlnaCBSU1NJLiBTb21ldGhpbmcgdW51c3VhbCBtdXN0IGJlCi0gICAgICogaGFwcGVuaW5nIChlLmcuIHN0cm9uZyBpbnRlcmZlcmVuY2UpLiBGb3IgaGlnaGVyIHNpZ25hbCBzdHJlbmd0aHMsIHdlIHNldCB0aGUgYXZvaWRhbmNlCi0gICAgICogdGltZSB0byBiZSBsb3cgdG8gYWxsb3cgZm9yIHF1aWNrIHR1cm4gYXJvdW5kIGZyb20gdGVtcG9yYXJ5IGludGVyZmVyZW5jZS4KLSAgICAgKiA8cD4KLSAgICAgKiBTZWUge0BsaW5rIEJzc2lkU3RhdGlzdGljcyNwb29yTGlua0RldGVjdGVkfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXhBdm9pZFRpbWVbXSBNQVhfQVZPSURfVElNRSA9IHsKLSAgICAgICAgLyogICAgICAgICAgICAgICAgICBtYXhfdGltZSwgICAgICAgICAgIG1pbl9yc3NpICovCi0gICAgICAgIG5ldyBNYXhBdm9pZFRpbWUoICAgMzAgKiA2MDAwMCwgICAgICAgICAtMjAwICAgICAgKSwKLSAgICAgICAgbmV3IE1heEF2b2lkVGltZSggICA1ICAqIDYwMDAwLCAgICAgICAgIC03MCAgICAgICApLAotICAgICAgICBuZXcgTWF4QXZvaWRUaW1lKCAgIDAgICogNjAwMDAsICAgICAgICAgLTU1ICAgICAgICksCi0gICAgfTsKLQotICAgIC8qIEZyYW1ld29yayByZWxhdGVkICovCi0gICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgQ29udGVudFJlc29sdmVyIG1Db250ZW50UmVzb2x2ZXI7Ci0gICAgcHJpdmF0ZSBXaWZpTWFuYWdlciBtV2lmaU1hbmFnZXI7Ci0gICAgcHJpdmF0ZSBJbnRlbnRGaWx0ZXIgbUludGVudEZpbHRlcjsKLSAgICBwcml2YXRlIEJyb2FkY2FzdFJlY2VpdmVyIG1Ccm9hZGNhc3RSZWNlaXZlcjsKLSAgICBwcml2YXRlIEFzeW5jQ2hhbm5lbCBtV3NtQ2hhbm5lbCA9IG5ldyBBc3luY0NoYW5uZWwoKTsKLSAgICBwcml2YXRlIFdpZmlJbmZvIG1XaWZpSW5mbzsKLSAgICBwcml2YXRlIExpbmtQcm9wZXJ0aWVzIG1MaW5rUHJvcGVydGllczsKLQotICAgIC8qIFN5c3RlbSBzZXR0aW5nc3MgcmVsYXRlZCAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc1dpZmlPbmx5ID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Qb29yTmV0d29ya0RldGVjdGlvbkVuYWJsZWQ7Ci0KLSAgICAvKiBQb29yIGxpbmsgZGV0ZWN0aW9uIHJlbGF0ZWQgKi8KLSAgICBwcml2YXRlIExydUNhY2hlPFN0cmluZywgQnNzaWRTdGF0aXN0aWNzPiBtQnNzaWRDYWNoZSA9Ci0gICAgICAgICAgICBuZXcgTHJ1Q2FjaGU8U3RyaW5nLCBCc3NpZFN0YXRpc3RpY3M+KEJTU0lEX1NUQVRfQ0FDSEVfU0laRSk7Ci0gICAgcHJpdmF0ZSBpbnQgbVJzc2lGZXRjaFRva2VuID0gMDsKLSAgICBwcml2YXRlIGludCBtQ3VycmVudFNpZ25hbExldmVsOwotICAgIHByaXZhdGUgQnNzaWRTdGF0aXN0aWNzIG1DdXJyZW50QnNzaWQ7Ci0gICAgcHJpdmF0ZSBWb2x1bWVXZWlnaHRlZEVNQSBtQ3VycmVudExvc3M7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc1NjcmVlbk9uID0gdHJ1ZTsKLSAgICBwcml2YXRlIHN0YXRpYyBkb3VibGUgc1ByZXNldExvc3NbXTsKLQotICAgIC8qIFdpRmkgd2F0Y2hkb2cgc3RhdGUgbWFjaGluZSByZWxhdGVkICovCi0gICAgcHJpdmF0ZSBEZWZhdWx0U3RhdGUgbURlZmF1bHRTdGF0ZSA9IG5ldyBEZWZhdWx0U3RhdGUoKTsKLSAgICBwcml2YXRlIFdhdGNoZG9nRGlzYWJsZWRTdGF0ZSBtV2F0Y2hkb2dEaXNhYmxlZFN0YXRlID0gbmV3IFdhdGNoZG9nRGlzYWJsZWRTdGF0ZSgpOwotICAgIHByaXZhdGUgV2F0Y2hkb2dFbmFibGVkU3RhdGUgbVdhdGNoZG9nRW5hYmxlZFN0YXRlID0gbmV3IFdhdGNoZG9nRW5hYmxlZFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBOb3RDb25uZWN0ZWRTdGF0ZSBtTm90Q29ubmVjdGVkU3RhdGUgPSBuZXcgTm90Q29ubmVjdGVkU3RhdGUoKTsKLSAgICBwcml2YXRlIFZlcmlmeWluZ0xpbmtTdGF0ZSBtVmVyaWZ5aW5nTGlua1N0YXRlID0gbmV3IFZlcmlmeWluZ0xpbmtTdGF0ZSgpOwotICAgIHByaXZhdGUgQ29ubmVjdGVkU3RhdGUgbUNvbm5lY3RlZFN0YXRlID0gbmV3IENvbm5lY3RlZFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBPbmxpbmVXYXRjaFN0YXRlIG1PbmxpbmVXYXRjaFN0YXRlID0gbmV3IE9ubGluZVdhdGNoU3RhdGUoKTsKLSAgICBwcml2YXRlIExpbmtNb25pdG9yaW5nU3RhdGUgbUxpbmtNb25pdG9yaW5nU3RhdGUgPSBuZXcgTGlua01vbml0b3JpbmdTdGF0ZSgpOwotICAgIHByaXZhdGUgT25saW5lU3RhdGUgbU9ubGluZVN0YXRlID0gbmV3IE9ubGluZVN0YXRlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBTVEFURSBNQVAKLSAgICAgKiAgICAgICAgICBEZWZhdWx0Ci0gICAgICogICAgICAgICAvICAgICAgIFwKLSAgICAgKiBEaXNhYmxlZCAgICAgIEVuYWJsZWQKLSAgICAgKiAgICAgICAgICAgICAvICAgICBcICAgICBcCi0gICAgICogTm90Q29ubmVjdGVkICBWZXJpZnlpbmcgIENvbm5lY3RlZAotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIC8tLS0tLS0tLS1cCi0gICAgICogICAgICAgICAgICAgICAgICAgICAgIChhbGwgb3RoZXIgc3RhdGVzKQotICAgICAqLwotICAgIHByaXZhdGUgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lKENvbnRleHQgY29udGV4dCkgewotICAgICAgICBzdXBlcigiV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lIik7Ci0gICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgbUNvbnRlbnRSZXNvbHZlciA9IGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7Ci0gICAgICAgIG1XaWZpTWFuYWdlciA9IChXaWZpTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lGSV9TRVJWSUNFKTsKLSAgICAgICAgbVdzbUNoYW5uZWwuY29ubmVjdFN5bmMobUNvbnRleHQsIGdldEhhbmRsZXIoKSwKLSAgICAgICAgICAgICAgICBtV2lmaU1hbmFnZXIuZ2V0V2lmaVN0YXRlTWFjaGluZU1lc3NlbmdlcigpKTsKLQotICAgICAgICBzZXR1cE5ldHdvcmtSZWNlaXZlcigpOwotCi0gICAgICAgIC8vIHRoZSBjb250ZW50IG9ic2VydmVyIHRvIGxpc3RlbiBuZWVkcyBhIGhhbmRsZXIKLSAgICAgICAgcmVnaXN0ZXJGb3JTZXR0aW5nc0NoYW5nZXMoKTsKLSAgICAgICAgcmVnaXN0ZXJGb3JXYXRjaGRvZ1RvZ2dsZSgpOwotICAgICAgICBhZGRTdGF0ZShtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1XYXRjaGRvZ0Rpc2FibGVkU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobVdhdGNoZG9nRW5hYmxlZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtTm90Q29ubmVjdGVkU3RhdGUsIG1XYXRjaGRvZ0VuYWJsZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RhdGUobVZlcmlmeWluZ0xpbmtTdGF0ZSwgbVdhdGNoZG9nRW5hYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtQ29ubmVjdGVkU3RhdGUsIG1XYXRjaGRvZ0VuYWJsZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1PbmxpbmVXYXRjaFN0YXRlLCBtQ29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtTGlua01vbml0b3JpbmdTdGF0ZSwgbUNvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobU9ubGluZVN0YXRlLCBtQ29ubmVjdGVkU3RhdGUpOwotCi0gICAgICAgIGlmIChpc1dhdGNoZG9nRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBzZXRJbml0aWFsU3RhdGUobU5vdENvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldEluaXRpYWxTdGF0ZShtV2F0Y2hkb2dEaXNhYmxlZFN0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBzZXRMb2dSZWNTaXplKDI1KTsKLSAgICAgICAgc2V0TG9nT25seVRyYW5zaXRpb25zKHRydWUpOwotICAgICAgICB1cGRhdGVTZXR0aW5ncygpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lIG1ha2VXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIENvbnRlbnRSZXNvbHZlciBjb250ZW50UmVzb2x2ZXIgPSBjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOwotCi0gICAgICAgIENvbm5lY3Rpdml0eU1hbmFnZXIgY20gPSAoQ29ubmVjdGl2aXR5TWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAotICAgICAgICAgICAgICAgIENvbnRleHQuQ09OTkVDVElWSVRZX1NFUlZJQ0UpOwotICAgICAgICBzV2lmaU9ubHkgPSAoY20uaXNOZXR3b3JrU3VwcG9ydGVkKENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9NT0JJTEUpID09IGZhbHNlKTsKLQotICAgICAgICAvLyBXYXRjaGRvZyBpcyBhbHdheXMgZW5hYmxlZC4gUG9vciBuZXR3b3JrIGRldGVjdGlvbiBjYW4gYmUgc2VwZXJhdGVseSB0dXJuZWQgb24vb2ZmCi0gICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIHNldHRpbmcgJiBjbGVhbiB1cCBzdGF0ZSBtYWNoaW5lIHNpbmNlIHdlIGFsd2F5cyBoYXZlCi0gICAgICAgIC8vIHdhdGNoZG9nIGluIGFuIGVuYWJsZWQgc3RhdGUKLSAgICAgICAgcHV0U2V0dGluZ3NHbG9iYWxCb29sZWFuKGNvbnRlbnRSZXNvbHZlciwgU2V0dGluZ3MuR2xvYmFsLldJRklfV0FUQ0hET0dfT04sIHRydWUpOwotCi0gICAgICAgIFdpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZSB3d3NtID0gbmV3IFdpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZShjb250ZXh0KTsKLSAgICAgICAgd3dzbS5zdGFydCgpOwotICAgICAgICByZXR1cm4gd3dzbTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0dXBOZXR3b3JrUmVjZWl2ZXIoKSB7Ci0gICAgICAgIG1Ccm9hZGNhc3RSZWNlaXZlciA9IG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgICAgIFN0cmluZyBhY3Rpb24gPSBpbnRlbnQuZ2V0QWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5lcXVhbHMoV2lmaU1hbmFnZXIuUlNTSV9DSEFOR0VEX0FDVElPTikpIHsKLSAgICAgICAgICAgICAgICAgICAgb2J0YWluTWVzc2FnZShFVkVOVF9SU1NJX0NIQU5HRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQuZ2V0SW50RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTkVXX1JTU0ksIC0yMDApLCAwKS5zZW5kVG9UYXJnZXQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoV2lmaU1hbmFnZXIuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VEX0FDVElPTikpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoRVZFTlRfU1VQUExJQ0FOVF9TVEFURV9DSEFOR0UsIGludGVudCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKFdpZmlNYW5hZ2VyLk5FVFdPUktfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKEVWRU5UX05FVFdPUktfU1RBVEVfQ0hBTkdFLCBpbnRlbnQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhJbnRlbnQuQUNUSU9OX1NDUkVFTl9PTikpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoRVZFTlRfU0NSRUVOX09OKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoSW50ZW50LkFDVElPTl9TQ1JFRU5fT0ZGKSkgewotICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShFVkVOVF9TQ1JFRU5fT0ZGKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9DSEFOR0VEX0FDVElPTikpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoRVZFTlRfV0lGSV9SQURJT19TVEFURV9DSEFOR0UsaW50ZW50LmdldEludEV4dHJhKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVYVFJBX1dJRklfU1RBVEUsIFdpZmlNYW5hZ2VyLldJRklfU1RBVEVfVU5LTk9XTikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBtSW50ZW50RmlsdGVyID0gbmV3IEludGVudEZpbHRlcigpOwotICAgICAgICBtSW50ZW50RmlsdGVyLmFkZEFjdGlvbihXaWZpTWFuYWdlci5ORVRXT1JLX1NUQVRFX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgbUludGVudEZpbHRlci5hZGRBY3Rpb24oV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIG1JbnRlbnRGaWx0ZXIuYWRkQWN0aW9uKFdpZmlNYW5hZ2VyLlJTU0lfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBtSW50ZW50RmlsdGVyLmFkZEFjdGlvbihXaWZpTWFuYWdlci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgbUludGVudEZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9TQ1JFRU5fT04pOwotICAgICAgICBtSW50ZW50RmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1NDUkVFTl9PRkYpOwotICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKG1Ccm9hZGNhc3RSZWNlaXZlciwgbUludGVudEZpbHRlcik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT2JzZXJ2ZXMgdGhlIHdhdGNoZG9nIG9uL29mZiBzZXR0aW5nLCBhbmQgdGFrZXMgYWN0aW9uIHdoZW4gY2hhbmdlZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJGb3JXYXRjaGRvZ1RvZ2dsZSgpIHsKLSAgICAgICAgQ29udGVudE9ic2VydmVyIGNvbnRlbnRPYnNlcnZlciA9IG5ldyBDb250ZW50T2JzZXJ2ZXIodGhpcy5nZXRIYW5kbGVyKCkpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2UoYm9vbGVhbiBzZWxmQ2hhbmdlKSB7Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoRVZFTlRfV0FUQ0hET0dfVE9HR0xFRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCkucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLmdldFVyaUZvcihTZXR0aW5ncy5HbG9iYWwuV0lGSV9XQVRDSERPR19PTiksCi0gICAgICAgICAgICAgICAgZmFsc2UsIGNvbnRlbnRPYnNlcnZlcik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT2JzZXJ2ZXMgd2F0Y2hkb2dzIHNlY3VyZSBzZXR0aW5nIGNoYW5nZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyRm9yU2V0dGluZ3NDaGFuZ2VzKCkgewotICAgICAgICBDb250ZW50T2JzZXJ2ZXIgY29udGVudE9ic2VydmVyID0gbmV3IENvbnRlbnRPYnNlcnZlcih0aGlzLmdldEhhbmRsZXIoKSkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZShib29sZWFuIHNlbGZDaGFuZ2UpIHsKLSAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShFVkVOVF9XQVRDSERPR19TRVRUSU5HU19DSEFOR0UpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5nZXRVcmlGb3IoU2V0dGluZ3MuR2xvYmFsLldJRklfV0FUQ0hET0dfUE9PUl9ORVRXT1JLX1RFU1RfRU5BQkxFRCksCi0gICAgICAgICAgICAgICAgZmFsc2UsIGNvbnRlbnRPYnNlcnZlcik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZHVtcChGaWxlRGVzY3JpcHRvciBmZCwgUHJpbnRXcml0ZXIgcHcsIFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgc3VwZXIuZHVtcChmZCwgcHcsIGFyZ3MpOwotICAgICAgICBwdy5wcmludGxuKCJtV2lmaUluZm86IFsiICsgbVdpZmlJbmZvICsgIl0iKTsKLSAgICAgICAgcHcucHJpbnRsbigibUxpbmtQcm9wZXJ0aWVzOiBbIiArIG1MaW5rUHJvcGVydGllcyArICJdIik7Ci0gICAgICAgIHB3LnByaW50bG4oIm1DdXJyZW50U2lnbmFsTGV2ZWw6IFsiICsgbUN1cnJlbnRTaWduYWxMZXZlbCArICJdIik7Ci0gICAgICAgIHB3LnByaW50bG4oIm1Qb29yTmV0d29ya0RldGVjdGlvbkVuYWJsZWQ6IFsiICsgbVBvb3JOZXR3b3JrRGV0ZWN0aW9uRW5hYmxlZCArICJdIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzV2F0Y2hkb2dFbmFibGVkKCkgewotICAgICAgICBib29sZWFuIHJldCA9IGdldFNldHRpbmdzR2xvYmFsQm9vbGVhbigKLSAgICAgICAgICAgICAgICBtQ29udGVudFJlc29sdmVyLCBTZXR0aW5ncy5HbG9iYWwuV0lGSV9XQVRDSERPR19PTiwgdHJ1ZSk7Ci0gICAgICAgIGlmIChEQkcpIGxvZ2QoIldhdGNoZG9nIGVuYWJsZWQgIiArIHJldCk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVNldHRpbmdzKCkgewotICAgICAgICBpZiAoREJHKSBsb2dkKCJVcGRhdGluZyBzZWN1cmUgc2V0dGluZ3MiKTsKLQotICAgICAgICAvLyBkaXNhYmxlIHBvb3IgbmV0d29yayBhdm9pZGFuY2UKLSAgICAgICAgaWYgKHNXaWZpT25seSkgewotICAgICAgICAgICAgbG9nZCgiRGlzYWJsaW5nIHBvb3IgbmV0d29yayBhdm9pZGFuY2UgZm9yIHdpLWZpIG9ubHkgZGV2aWNlIik7Ci0gICAgICAgICAgICBtUG9vck5ldHdvcmtEZXRlY3Rpb25FbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtUG9vck5ldHdvcmtEZXRlY3Rpb25FbmFibGVkID0gZ2V0U2V0dGluZ3NHbG9iYWxCb29sZWFuKG1Db250ZW50UmVzb2x2ZXIsCi0gICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1dBVENIRE9HX1BPT1JfTkVUV09SS19URVNUX0VOQUJMRUQsCi0gICAgICAgICAgICAgICAgICAgIERFRkFVTFRfUE9PUl9ORVRXT1JLX0FWT0lEQU5DRV9FTkFCTEVEKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlZmF1bHQgc3RhdGUsIGd1YXJkIGZvciB1bmhhbmRsZWQgbWVzc2FnZXMuCi0gICAgICovCi0gICAgY2xhc3MgRGVmYXVsdFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1dBVENIRE9HX1NFVFRJTkdTX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlU2V0dGluZ3MoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiVXBkYXRpbmcgd2lmaS13YXRjaGRvZyBzZWN1cmUgc2V0dGluZ3MiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9SU1NJX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRTaWduYWxMZXZlbCA9IGNhbGN1bGF0ZVNpZ25hbExldmVsKG1zZy5hcmcxKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9XSUZJX1JBRElPX1NUQVRFX0NIQU5HRToKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX05FVFdPUktfU1RBVEVfQ0hBTkdFOgotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfU1VQUExJQ0FOVF9TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9CU1NJRF9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUlNTSV9GRVRDSDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlJTU0lfUEtUQ05UX0ZFVENIX1NVQ0NFRURFRDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlJTU0lfUEtUQ05UX0ZFVENIX0ZBSUxFRDoKLSAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfU0NSRUVOX09OOgotICAgICAgICAgICAgICAgICAgICBtSXNTY3JlZW5PbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfU0NSRUVOX09GRjoKLSAgICAgICAgICAgICAgICAgICAgbUlzU2NyZWVuT24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5oYW5kbGVkIG1lc3NhZ2UgIiArIG1zZyArICIgaW4gc3RhdGUgIiArIGdldEN1cnJlbnRTdGF0ZSgpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXaUZpIHdhdGNoZG9nIGlzIGRpc2FibGVkIGJ5IHRoZSBzZXR0aW5nLgotICAgICAqLwotICAgIGNsYXNzIFdhdGNoZG9nRGlzYWJsZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9XQVRDSERPR19UT0dHTEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAoaXNXYXRjaGRvZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtTm90Q29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX05FVFdPUktfU1RBVEVfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gKEludGVudCkgbXNnLm9iajsKLSAgICAgICAgICAgICAgICAgICAgTmV0d29ya0luZm8gbmV0d29ya0luZm8gPSAoTmV0d29ya0luZm8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50LmdldFBhcmNlbGFibGVFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9ORVRXT1JLX0lORk8pOwotCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya0luZm8uZ2V0RGV0YWlsZWRTdGF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZFUklGWUlOR19QT09SX0xJTks6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiV2F0Y2hkb2cgZGlzYWJsZWQsIHZlcmlmeSBsaW5rIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZExpbmtTdGF0dXNOb3RpZmljYXRpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2lGaSB3YXRjaGRvZyBpcyBlbmFibGVkIGJ5IHRoZSBzZXR0aW5nLgotICAgICAqLwotICAgIGNsYXNzIFdhdGNoZG9nRW5hYmxlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIEludGVudCBpbnRlbnQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9XQVRDSERPR19UT0dHTEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzV2F0Y2hkb2dFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVdhdGNoZG9nRGlzYWJsZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9ORVRXT1JLX1NUQVRFX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgaW50ZW50ID0gKEludGVudCkgbXNnLm9iajsKLSAgICAgICAgICAgICAgICAgICAgTmV0d29ya0luZm8gbmV0d29ya0luZm8gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOZXR3b3JrSW5mbykgaW50ZW50LmdldFBhcmNlbGFibGVFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9ORVRXT1JLX0lORk8pOwotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJOZXR3b3JrIHN0YXRlIGNoYW5nZSAiICsgbmV0d29ya0luZm8uZ2V0RGV0YWlsZWRTdGF0ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICBtV2lmaUluZm8gPSAoV2lmaUluZm8pIGludGVudC5nZXRQYXJjZWxhYmxlRXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfV0lGSV9JTkZPKTsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudEJzc2lkKG1XaWZpSW5mbyAhPSBudWxsID8gbVdpZmlJbmZvLmdldEJTU0lEKCkgOiBudWxsKTsKLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtJbmZvLmdldERldGFpbGVkU3RhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWRVJJRllJTkdfUE9PUl9MSU5LOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MaW5rUHJvcGVydGllcyA9IChMaW5rUHJvcGVydGllcykgaW50ZW50LmdldFBhcmNlbGFibGVFeHRyYSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVYVFJBX0xJTktfUFJPUEVSVElFUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1Qb29yTmV0d29ya0RldGVjdGlvbkVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpSW5mbyA9PSBudWxsIHx8IG1DdXJyZW50QnNzaWQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWdub3JlLCB3aWZpaW5mbyAiICsgbVdpZmlJbmZvICsiIGJzc2lkICIgKyBtQ3VycmVudEJzc2lkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRMaW5rU3RhdHVzTm90aWZpY2F0aW9uKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1WZXJpZnlpbmdMaW5rU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZExpbmtTdGF0dXNOb3RpZmljYXRpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDT05ORUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1PbmxpbmVXYXRjaFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ob3RDb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1NVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICBpbnRlbnQgPSAoSW50ZW50KSBtc2cub2JqOwotICAgICAgICAgICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgc3VwcGxpY2FudFN0YXRlID0gKFN1cHBsaWNhbnRTdGF0ZSkgaW50ZW50LmdldFBhcmNlbGFibGVFeHRyYSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5FWFRSQV9ORVdfU1RBVEUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcGxpY2FudFN0YXRlID09IFN1cHBsaWNhbnRTdGF0ZS5DT01QTEVURUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpSW5mbyA9IG1XaWZpTWFuYWdlci5nZXRDb25uZWN0aW9uSW5mbygpOwotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudEJzc2lkKG1XaWZpSW5mby5nZXRCU1NJRCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfV0lGSV9SQURJT19TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtc2cuYXJnMSA9PSBXaWZpTWFuYWdlci5XSUZJX1NUQVRFX0RJU0FCTElORykgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ob3RDb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2lGaSBpcyBkaXNjb25uZWN0ZWQuCi0gICAgICovCi0gICAgY2xhc3MgTm90Q29ubmVjdGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdpRmkgaXMgY29ubmVjdGVkLCBidXQgd2FpdGluZyBmb3IgZ29vZCBsaW5rIGRldGVjdGlvbiBtZXNzYWdlLgotICAgICAqLwotICAgIGNsYXNzIFZlcmlmeWluZ0xpbmtTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLQotICAgICAgICBwcml2YXRlIGludCBtU2FtcGxlQ291bnQ7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICAgICAgbVNhbXBsZUNvdW50ID0gMDsKLSAgICAgICAgICAgIG1DdXJyZW50QnNzaWQubmV3TGlua0RldGVjdGVkKCk7Ci0gICAgICAgICAgICBzZW5kTWVzc2FnZShvYnRhaW5NZXNzYWdlKENNRF9SU1NJX0ZFVENILCArK21Sc3NpRmV0Y2hUb2tlbiwgMCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9XQVRDSERPR19TRVRUSU5HU19DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVNldHRpbmdzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbVBvb3JOZXR3b3JrRGV0ZWN0aW9uRW5hYmxlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZExpbmtTdGF0dXNOb3RpZmljYXRpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX0JTU0lEX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1WZXJpZnlpbmdMaW5rU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JTU0lfRkVUQ0g6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtc2cuYXJnMSA9PSBtUnNzaUZldGNoVG9rZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Xc21DaGFubmVsLnNlbmRNZXNzYWdlKFdpZmlNYW5hZ2VyLlJTU0lfUEtUQ05UX0ZFVENIKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKENNRF9SU1NJX0ZFVENILCArK21Sc3NpRmV0Y2hUb2tlbiwgMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJTktfU0FNUExJTkdfSU5URVJWQUxfTVMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSF9TVUNDRUVERUQ6Ci0gICAgICAgICAgICAgICAgICAgIFJzc2lQYWNrZXRDb3VudEluZm8gaW5mbyA9IChSc3NpUGFja2V0Q291bnRJbmZvKSBtc2cub2JqOwotICAgICAgICAgICAgICAgICAgICBpbnQgcnNzaSA9IGluZm8ucnNzaTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiRmV0Y2ggUlNTSSBzdWNjZWVkLCByc3NpPSIgKyByc3NpKTsKLQotICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWUgPSBtQ3VycmVudEJzc2lkLm1Cc3NpZEF2b2lkVGltZU1heCAtIFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodGltZSA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXggYXZvaWRhbmNlIHRpbWUgaXMgbWV0Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJNYXggYXZvaWQgdGltZSBlbGFwc2VkIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTGlua1N0YXR1c05vdGlmaWNhdGlvbih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyc3NpID49IG1DdXJyZW50QnNzaWQubUdvb2RMaW5rVGFyZ2V0UnNzaSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK21TYW1wbGVDb3VudCA+PSBtQ3VycmVudEJzc2lkLm1Hb29kTGlua1RhcmdldENvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmsgaXMgZ29vZCBhZ2FpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJHb29kIGxpbmsgZGV0ZWN0ZWQsIHJzc2k9IiArIHJzc2kpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudEJzc2lkLm1Cc3NpZEF2b2lkVGltZU1heCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRMaW5rU3RhdHVzTm90aWZpY2F0aW9uKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZUNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJMaW5rIGlzIHN0aWxsIHBvb3IsIHRpbWUgbGVmdD0iICsgdGltZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlJTU0lfUEtUQ05UX0ZFVENIX0ZBSUxFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiUlNTSV9GRVRDSF9GQUlMRUQiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdpRmkgaXMgY29ubmVjdGVkIGFuZCBsaW5rIGlzIHZlcmlmaWVkLgotICAgICAqLwotICAgIGNsYXNzIENvbm5lY3RlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1dBVENIRE9HX1NFVFRJTkdTX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlU2V0dGluZ3MoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Qb29yTmV0d29ya0RldGVjdGlvbkVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtT25saW5lV2F0Y2hTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU9ubGluZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJTU0kgaXMgaGlnaCBlbm91Z2ggYW5kIGRvbid0IG5lZWQgbGluayBtb25pdG9yaW5nLgotICAgICAqLwotICAgIGNsYXNzIE9ubGluZVdhdGNoU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIGlmIChtUG9vck5ldHdvcmtEZXRlY3Rpb25FbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gdHJlYXQgZW50cnkgYXMgYW4gcnNzaSBjaGFuZ2UKLSAgICAgICAgICAgICAgICBoYW5kbGVSc3NpQ2hhbmdlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtT25saW5lU3RhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVJzc2lDaGFuZ2UoKSB7Ci0gICAgICAgICAgICBpZiAobUN1cnJlbnRTaWduYWxMZXZlbCA8PSBMSU5LX01PTklUT1JfTEVWRUxfVEhSRVNIT0xEICYmIG1DdXJyZW50QnNzaWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtTGlua01vbml0b3JpbmdTdGF0ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHN0YXkgaGVyZQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9SU1NJX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRTaWduYWxMZXZlbCA9IGNhbGN1bGF0ZVNpZ25hbExldmVsKG1zZy5hcmcxKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlUnNzaUNoYW5nZSgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEtlZXAgc2FtcGxpbmcgdGhlIGxpbmsgYW5kIG1vbml0b3IgYW55IHBvb3IgbGluayBzaXR1YXRpb24uCi0gICAgICovCi0gICAgY2xhc3MgTGlua01vbml0b3JpbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLQotICAgICAgICBwcml2YXRlIGludCBtU2FtcGxlQ291bnQ7Ci0KLSAgICAgICAgcHJpdmF0ZSBpbnQgbUxhc3RSc3NpOwotICAgICAgICBwcml2YXRlIGludCBtTGFzdFR4R29vZDsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUxhc3RUeEJhZDsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgICAgICBtU2FtcGxlQ291bnQgPSAwOwotICAgICAgICAgICAgbUN1cnJlbnRMb3NzID0gbmV3IFZvbHVtZVdlaWdodGVkRU1BKEVYUF9DT0VGRklDSUVOVF9NT05JVE9SKTsKLSAgICAgICAgICAgIHNlbmRNZXNzYWdlKG9idGFpbk1lc3NhZ2UoQ01EX1JTU0lfRkVUQ0gsICsrbVJzc2lGZXRjaFRva2VuLCAwKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1JTU0lfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNpZ25hbExldmVsID0gY2FsY3VsYXRlU2lnbmFsTGV2ZWwobXNnLmFyZzEpOwotICAgICAgICAgICAgICAgICAgICBpZiAobUN1cnJlbnRTaWduYWxMZXZlbCA8PSBMSU5LX01PTklUT1JfTEVWRUxfVEhSRVNIT0xEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF5IGhlcmU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIGZyZXF1ZW50IFJTU0kgbW9uaXRvcmluZyBhbnkgbW9yZQotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1PbmxpbmVXYXRjaFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfQlNTSURfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUxpbmtNb25pdG9yaW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JTU0lfRkVUQ0g6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbUlzU2NyZWVuT24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtT25saW5lU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5hcmcxID09IG1Sc3NpRmV0Y2hUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdzbUNoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0gpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX1JTU0lfRkVUQ0gsICsrbVJzc2lGZXRjaFRva2VuLCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElOS19TQU1QTElOR19JTlRFUlZBTF9NUyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlJTU0lfUEtUQ05UX0ZFVENIX1NVQ0NFRURFRDoKLSAgICAgICAgICAgICAgICAgICAgUnNzaVBhY2tldENvdW50SW5mbyBpbmZvID0gKFJzc2lQYWNrZXRDb3VudEluZm8pIG1zZy5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGludCByc3NpID0gaW5mby5yc3NpOwotICAgICAgICAgICAgICAgICAgICBpbnQgbXJzc2kgPSAobUxhc3RSc3NpICsgcnNzaSkgLyAyOwotICAgICAgICAgICAgICAgICAgICBpbnQgdHhiYWQgPSBpbmZvLnR4YmFkOwotICAgICAgICAgICAgICAgICAgICBpbnQgdHhnb29kID0gaW5mby50eGdvb2Q7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkZldGNoIFJTU0kgc3VjY2VlZCwgcnNzaT0iICsgcnNzaSArICIgbXJzc2k9IiArIG1yc3NpICsgIiB0eGJhZD0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0eGJhZCArICIgdHhnb29kPSIgKyB0eGdvb2QpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIGZpcnN0IGRhdGEgcG9pbnQgYXMgd2Ugd2FudCBpbmNyZW1lbnRhbCB2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vdyAtIG1DdXJyZW50QnNzaWQubUxhc3RUaW1lU2FtcGxlIDwgTElOS19TQU1QTElOR19JTlRFUlZBTF9NUyAqIDIpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHBhY2tldCBsb3NzIHN0YXRpc3RpY3MKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkYmFkID0gdHhiYWQgLSBtTGFzdFR4QmFkOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRnb29kID0gdHhnb29kIC0gbUxhc3RUeEdvb2Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHRvdGFsID0gZGJhZCArIGRnb29kOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHRvdGFsID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBwYWNrZXQgbG9zcyBpbiB0aGUgbGFzdCBzYW1wbGluZyBpbnRlcnZhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsb3NzID0gKChkb3VibGUpIGRiYWQpIC8gKChkb3VibGUpIGR0b3RhbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudExvc3MudXBkYXRlKGxvc3MsIGR0b3RhbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIy4jIyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dkKCJJbmNyZW1lbnRhbCBsb3NzPSIgKyBkYmFkICsgIi8iICsgZHRvdGFsICsgIiBDdXJyZW50IGxvc3M9IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZGYuZm9ybWF0KG1DdXJyZW50TG9zcy5tVmFsdWUgKiAxMDApICsgIiUgdm9sdW1lPSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGRmLmZvcm1hdChtQ3VycmVudExvc3MubVZvbHVtZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50QnNzaWQudXBkYXRlTG9zcyhtcnNzaSwgbG9zcywgZHRvdGFsKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBoaWdoIHBhY2tldCBsb3NzIGFuZCBzZW5kIHBvb3IgbGluayBub3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUN1cnJlbnRMb3NzLm1WYWx1ZSA+IFBPT1JfTElOS19MT1NTX1RIUkVTSE9MRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbUN1cnJlbnRMb3NzLm1Wb2x1bWUgPiBQT09SX0xJTktfTUlOX1ZPTFVNRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKyttU2FtcGxlQ291bnQgPj0gUE9PUl9MSU5LX1NBTVBMRV9DT1VOVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudEJzc2lkLnBvb3JMaW5rRGV0ZWN0ZWQocnNzaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTGlua1N0YXR1c05vdGlmaWNhdGlvbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyttUnNzaUZldGNoVG9rZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZUNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudEJzc2lkLm1MYXN0VGltZVNhbXBsZSA9IG5vdzsKLSAgICAgICAgICAgICAgICAgICAgbUxhc3RUeEJhZCA9IHR4YmFkOwotICAgICAgICAgICAgICAgICAgICBtTGFzdFR4R29vZCA9IHR4Z29vZDsKLSAgICAgICAgICAgICAgICAgICAgbUxhc3RSc3NpID0gcnNzaTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlJTU0lfUEtUQ05UX0ZFVENIX0ZBSUxFRDoKLSAgICAgICAgICAgICAgICAgICAgLy8gY2FuIGhhcHBlbiBpZiB3ZSBhcmUgd2FpdGluZyB0byBnZXQgYSBkaXNjb25uZWN0IG5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJSU1NJX0ZFVENIX0ZBSUxFRCIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGlsZCBzdGF0ZSBvZiBDb25uZWN0ZWRTdGF0ZSBpbmRpY2F0aW5nIHRoYXQgd2UgYXJlIG9ubGluZSBhbmQgdGhlcmUgaXMgbm90aGluZyB0byBkby4KLSAgICAgKi8KLSAgICBjbGFzcyBPbmxpbmVTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9TQ1JFRU5fT046Ci0gICAgICAgICAgICAgICAgICAgIG1Jc1NjcmVlbk9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Qb29yTmV0d29ya0RldGVjdGlvbkVuYWJsZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU9ubGluZVdhdGNoU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVDdXJyZW50QnNzaWQoU3RyaW5nIGJzc2lkKSB7Ci0gICAgICAgIGlmIChEQkcpIGxvZ2QoIlVwZGF0ZSBjdXJyZW50IEJTU0lEIHRvICIgKyAoYnNzaWQgIT0gbnVsbCA/IGJzc2lkIDogIm51bGwiKSk7Ci0KLSAgICAgICAgLy8gaWYgY3VycmVudGx5IG5vdCBjb25uZWN0ZWQsIHRoZW4gc2V0IGN1cnJlbnQgQlNTSUQgdG8gbnVsbAotICAgICAgICBpZiAoYnNzaWQgPT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKG1DdXJyZW50QnNzaWQgPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICAgICAgbUN1cnJlbnRCc3NpZCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJCU1NJRCBjaGFuZ2VkIik7Ci0gICAgICAgICAgICBzZW5kTWVzc2FnZShFVkVOVF9CU1NJRF9DSEFOR0UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWYgaXQgaXMgYWxyZWFkeSB0aGUgY3VycmVudCBCU1NJRCwgdGhlbiBkb25lCi0gICAgICAgIGlmIChtQ3VycmVudEJzc2lkICE9IG51bGwgJiYgYnNzaWQuZXF1YWxzKG1DdXJyZW50QnNzaWQubUJzc2lkKSkgcmV0dXJuOwotCi0gICAgICAgIC8vIHNlYXJjaCBmb3IgdGhlIG5ldyBCU1NJRCBpbiB0aGUgY2FjaGUsIGFkZCB0byBjYWNoZSBpZiBub3QgZm91bmQKLSAgICAgICAgbUN1cnJlbnRCc3NpZCA9IG1Cc3NpZENhY2hlLmdldChic3NpZCk7Ci0gICAgICAgIGlmIChtQ3VycmVudEJzc2lkID09IG51bGwpIHsKLSAgICAgICAgICAgIG1DdXJyZW50QnNzaWQgPSBuZXcgQnNzaWRTdGF0aXN0aWNzKGJzc2lkKTsKLSAgICAgICAgICAgIG1Cc3NpZENhY2hlLnB1dChic3NpZCwgbUN1cnJlbnRCc3NpZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBzZW5kIEJTU0lEIGNoYW5nZSBub3RpZmljYXRpb24KLSAgICAgICAgaWYgKERCRykgbG9nZCgiQlNTSUQgY2hhbmdlZCIpOwotICAgICAgICBzZW5kTWVzc2FnZShFVkVOVF9CU1NJRF9DSEFOR0UpOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGNhbGN1bGF0ZVNpZ25hbExldmVsKGludCByc3NpKSB7Ci0gICAgICAgIGludCBzaWduYWxMZXZlbCA9IFdpZmlNYW5hZ2VyLmNhbGN1bGF0ZVNpZ25hbExldmVsKHJzc2ksIFdpZmlNYW5hZ2VyLlJTU0lfTEVWRUxTKTsKLSAgICAgICAgaWYgKERCRykKLSAgICAgICAgICAgIGxvZ2QoIlJTU0kgY3VycmVudDogIiArIG1DdXJyZW50U2lnbmFsTGV2ZWwgKyAiIG5ldzogIiArIHJzc2kgKyAiLCAiICsgc2lnbmFsTGV2ZWwpOwotICAgICAgICByZXR1cm4gc2lnbmFsTGV2ZWw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRMaW5rU3RhdHVzTm90aWZpY2F0aW9uKGJvb2xlYW4gaXNHb29kKSB7Ci0gICAgICAgIGlmIChEQkcpIGxvZ2QoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKLSAgICAgICAgaWYgKGlzR29vZCkgewotICAgICAgICAgICAgbVdzbUNoYW5uZWwuc2VuZE1lc3NhZ2UoR09PRF9MSU5LX0RFVEVDVEVEKTsKLSAgICAgICAgICAgIGlmIChtQ3VycmVudEJzc2lkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQ3VycmVudEJzc2lkLm1MYXN0VGltZUdvb2QgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkdvb2QgbGluayBub3RpZmljYXRpb24gaXMgc2VudCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVdzbUNoYW5uZWwuc2VuZE1lc3NhZ2UoUE9PUl9MSU5LX0RFVEVDVEVEKTsKLSAgICAgICAgICAgIGlmIChtQ3VycmVudEJzc2lkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQ3VycmVudEJzc2lkLm1MYXN0VGltZVBvb3IgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvZ2QoIlBvb3IgbGluayBub3RpZmljYXRpb24gaXMgc2VudCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgYSBzaW5nbGUgc2VjdXJlIHNldHRpbmdzIHZhbHVlIGFzIGEKLSAgICAgKiBib29sZWFuLiBOb3RlIHRoYXQgaW50ZXJuYWxseSBzZXR0aW5nIHZhbHVlcyBhcmUgYWx3YXlzIHN0b3JlZCBhcwotICAgICAqIHN0cmluZ3M7IHRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhlIHN0cmluZyB0byBhIGJvb2xlYW4gZm9yIHlvdS4gVGhlCi0gICAgICogZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBzZXR0aW5nIGlzIG5vdCBkZWZpbmVkIG9yIG5vdCBhCi0gICAgICogdmFsaWQgYm9vbGVhbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjciBUaGUgQ29udGVudFJlc29sdmVyIHRvIGFjY2Vzcy4KLSAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgc2V0dGluZyB0byByZXRyaWV2ZS4KLSAgICAgKiBAcGFyYW0gZGVmIFZhbHVlIHRvIHJldHVybiBpZiB0aGUgc2V0dGluZyBpcyBub3QgZGVmaW5lZC4KLSAgICAgKiBAcmV0dXJuIFRoZSBzZXR0aW5nJ3MgY3VycmVudCB2YWx1ZSwgb3IgJ2RlZicgaWYgaXQgaXMgbm90IGRlZmluZWQgb3Igbm90Ci0gICAgICogICAgICAgICBhIHZhbGlkIGJvb2xlYW4uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBnZXRTZXR0aW5nc0dsb2JhbEJvb2xlYW4oQ29udGVudFJlc29sdmVyIGNyLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBkZWYpIHsKLSAgICAgICAgcmV0dXJuIFNldHRpbmdzLkdsb2JhbC5nZXRJbnQoY3IsIG5hbWUsIGRlZiA/IDEgOiAwKSA9PSAxOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB1cGRhdGluZyBhIHNpbmdsZSBzZXR0aW5ncyB2YWx1ZSBhcyBhbiBpbnRlZ2VyLgotICAgICAqIFRoaXMgd2lsbCBlaXRoZXIgY3JlYXRlIGEgbmV3IGVudHJ5IGluIHRoZSB0YWJsZSBpZiB0aGUgZ2l2ZW4gbmFtZSBkb2VzCi0gICAgICogbm90IGV4aXN0LCBvciBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBleGlzdGluZyByb3cgd2l0aCB0aGF0IG5hbWUuIE5vdGUKLSAgICAgKiB0aGF0IGludGVybmFsbHkgc2V0dGluZyB2YWx1ZXMgYXJlIGFsd2F5cyBzdG9yZWQgYXMgc3RyaW5ncywgc28gdGhpcwotICAgICAqIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBnaXZlbiB2YWx1ZSB0byBhIHN0cmluZyBiZWZvcmUgc3RvcmluZyBpdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjciBUaGUgQ29udGVudFJlc29sdmVyIHRvIGFjY2Vzcy4KLSAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgc2V0dGluZyB0byBtb2RpZnkuCi0gICAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBzZXR0aW5nLgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgd2FzIHNldCwgZmFsc2Ugb24gZGF0YWJhc2UgZXJyb3JzCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwdXRTZXR0aW5nc0dsb2JhbEJvb2xlYW4oQ29udGVudFJlc29sdmVyIGNyLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiB2YWx1ZSkgewotICAgICAgICByZXR1cm4gU2V0dGluZ3MuR2xvYmFsLnB1dEludChjciwgbmFtZSwgdmFsdWUgPyAxIDogMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQnVuZGxlIG9mIGdvb2QgbGluayBjb3VudCBwYXJhbWV0ZXJzCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgR29vZExpbmtUYXJnZXQgewotICAgICAgICBwdWJsaWMgZmluYWwgaW50IFJTU0lfQURKX0RCTTsKLSAgICAgICAgcHVibGljIGZpbmFsIGludCBTQU1QTEVfQ09VTlQ7Ci0gICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgUkVEVUNFX1RJTUVfTVM7Ci0gICAgICAgIHB1YmxpYyBHb29kTGlua1RhcmdldChpbnQgYWRqLCBpbnQgY291bnQsIGludCB0aW1lKSB7Ci0gICAgICAgICAgICBSU1NJX0FESl9EQk0gPSBhZGo7Ci0gICAgICAgICAgICBTQU1QTEVfQ09VTlQgPSBjb3VudDsKLSAgICAgICAgICAgIFJFRFVDRV9USU1FX01TID0gdGltZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1bmRsZSBvZiBtYXggYXZvaWRhbmNlIHRpbWUgcGFyYW1ldGVycwotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE1heEF2b2lkVGltZSB7Ci0gICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgVElNRV9NUzsKLSAgICAgICAgcHVibGljIGZpbmFsIGludCBNSU5fUlNTSV9EQk07Ci0gICAgICAgIHB1YmxpYyBNYXhBdm9pZFRpbWUoaW50IHRpbWUsIGludCByc3NpKSB7Ci0gICAgICAgICAgICBUSU1FX01TID0gdGltZTsKLSAgICAgICAgICAgIE1JTl9SU1NJX0RCTSA9IHJzc2k7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBWb2x1bWUtd2VpZ2h0ZWQgRXhwb25lbnRpYWwgTW92aW5nIEF2ZXJhZ2UgKFYtRU1BKQotICAgICAqICAgIC0gdm9sdW1lLXdlaWdodGVkOiAgZWFjaCB1cGRhdGUgaGFzIGl0cyBvd24gd2VpZ2h0IChudW1iZXIgb2YgcGFja2V0cykKLSAgICAgKiAgICAtIGV4cG9uZW50aWFsOiAgICAgIE8oMSkgdGltZSBhbmQgTygxKSBzcGFjZSBmb3IgYm90aCB1cGRhdGUgYW5kIHF1ZXJ5Ci0gICAgICogICAgLSBtb3ZpbmcgYXZlcmFnZTogICByZWZsZWN0IG1vc3QgcmVjZW50IHJlc3VsdHMgYW5kIGV4cGlyZSBvbGQgb25lcwotICAgICAqLwotICAgIHByaXZhdGUgY2xhc3MgVm9sdW1lV2VpZ2h0ZWRFTUEgewotICAgICAgICBwcml2YXRlIGRvdWJsZSBtVmFsdWU7Ci0gICAgICAgIHByaXZhdGUgZG91YmxlIG1Wb2x1bWU7Ci0gICAgICAgIHByaXZhdGUgZG91YmxlIG1Qcm9kdWN0OwotICAgICAgICBwcml2YXRlIGZpbmFsIGRvdWJsZSBtQWxwaGE7Ci0KLSAgICAgICAgcHVibGljIFZvbHVtZVdlaWdodGVkRU1BKGRvdWJsZSBjb2VmZmljaWVudCkgewotICAgICAgICAgICAgbVZhbHVlICAgPSAwLjA7Ci0gICAgICAgICAgICBtVm9sdW1lICA9IDAuMDsKLSAgICAgICAgICAgIG1Qcm9kdWN0ID0gMC4wOwotICAgICAgICAgICAgbUFscGhhICAgPSBjb2VmZmljaWVudDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZShkb3VibGUgbmV3VmFsdWUsIGludCBuZXdWb2x1bWUpIHsKLSAgICAgICAgICAgIGlmIChuZXdWb2x1bWUgPD0gMCkgcmV0dXJuOwotICAgICAgICAgICAgLy8gY29yZSB1cGRhdGUgZm9ybXVsYXMKLSAgICAgICAgICAgIGRvdWJsZSBuZXdQcm9kdWN0ID0gbmV3VmFsdWUgKiBuZXdWb2x1bWU7Ci0gICAgICAgICAgICBtUHJvZHVjdCA9IG1BbHBoYSAqIG5ld1Byb2R1Y3QgKyAoMSAtIG1BbHBoYSkgKiBtUHJvZHVjdDsKLSAgICAgICAgICAgIG1Wb2x1bWUgID0gbUFscGhhICogbmV3Vm9sdW1lICArICgxIC0gbUFscGhhKSAqIG1Wb2x1bWU7Ci0gICAgICAgICAgICBtVmFsdWUgICA9IG1Qcm9kdWN0IC8gbVZvbHVtZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlY29yZCAoUlNTSSAtPiBwYWtjZSBsb3NzICUpIG1hcHBpbmdzIG9mIG9uZSBCU1NJRAotICAgICAqLwotICAgIHByaXZhdGUgY2xhc3MgQnNzaWRTdGF0aXN0aWNzIHsKLQotICAgICAgICAvKiBNQUMgYWRkcmVzcyBvZiB0aGlzIEJTU0lEICovCi0gICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Cc3NpZDsKLQotICAgICAgICAvKiBSU1NJIC0+IHBhY2tldCBsb3NzICUgbWFwcGluZ3MgKi8KLSAgICAgICAgcHJpdmF0ZSBWb2x1bWVXZWlnaHRlZEVNQVtdIG1FbnRyaWVzOwotICAgICAgICBwcml2YXRlIGludCBtUnNzaUJhc2U7Ci0gICAgICAgIHByaXZhdGUgaW50IG1FbnRyaWVzU2l6ZTsKLQotICAgICAgICAvKiBUYXJnZXQgdG8gc2VuZCBnb29kIGxpbmsgbm90aWZpY2F0aW9uLCBzZXQgd2hlbiBwb29yIGxpbmsgaXMgZGV0ZWN0ZWQgKi8KLSAgICAgICAgcHJpdmF0ZSBpbnQgbUdvb2RMaW5rVGFyZ2V0UnNzaTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUdvb2RMaW5rVGFyZ2V0Q291bnQ7Ci0KLSAgICAgICAgLyogSW5kZXggb2YgR09PRF9MSU5LX1RBUkdFVCBhcnJheSAqLwotICAgICAgICBwcml2YXRlIGludCBtR29vZExpbmtUYXJnZXRJbmRleDsKLQotICAgICAgICAvKiBUaW1lc3RhbXBzIG9mIHNvbWUgbGFzdCBldmVudHMgKi8KLSAgICAgICAgcHJpdmF0ZSBsb25nIG1MYXN0VGltZVNhbXBsZTsKLSAgICAgICAgcHJpdmF0ZSBsb25nIG1MYXN0VGltZUdvb2Q7Ci0gICAgICAgIHByaXZhdGUgbG9uZyBtTGFzdFRpbWVQb29yOwotCi0gICAgICAgIC8qIE1heCB0aW1lIHRvIGF2b2lkIHRoaXMgQlNTSUQgKi8KLSAgICAgICAgcHJpdmF0ZSBsb25nIG1Cc3NpZEF2b2lkVGltZU1heDsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc3RydWN0b3IKLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGJzc2lkIGlzIHRoZSBhZGRyZXNzIG9mIHRoaXMgQlNTSUQKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCc3NpZFN0YXRpc3RpY3MoU3RyaW5nIGJzc2lkKSB7Ci0gICAgICAgICAgICB0aGlzLm1Cc3NpZCA9IGJzc2lkOwotICAgICAgICAgICAgbVJzc2lCYXNlID0gQlNTSURfU1RBVF9SQU5HRV9MT1dfREJNOwotICAgICAgICAgICAgbUVudHJpZXNTaXplID0gQlNTSURfU1RBVF9SQU5HRV9ISUdIX0RCTSAtIEJTU0lEX1NUQVRfUkFOR0VfTE9XX0RCTSArIDE7Ci0gICAgICAgICAgICBtRW50cmllcyA9IG5ldyBWb2x1bWVXZWlnaHRlZEVNQVttRW50cmllc1NpemVdOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtRW50cmllc1NpemU7IGkrKykKLSAgICAgICAgICAgICAgICBtRW50cmllc1tpXSA9IG5ldyBWb2x1bWVXZWlnaHRlZEVNQShFWFBfQ09FRkZJQ0lFTlRfUkVDT1JEKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBVcGRhdGUgdGhpcyBCU1NJRCBjYWNoZQotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gcnNzaSBpcyB0aGUgUlNTSQotICAgICAgICAgKiBAcGFyYW0gdmFsdWUgaXMgdGhlIG5ldyBpbnN0YW50IGxvc3MgdmFsdWUgYXQgdGhpcyBSU1NJCi0gICAgICAgICAqIEBwYXJhbSB2b2x1bWUgaXMgdGhlIHZvbHVtZSBmb3IgdGhpcyBzaW5nbGUgdXBkYXRlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVMb3NzKGludCByc3NpLCBkb3VibGUgdmFsdWUsIGludCB2b2x1bWUpIHsKLSAgICAgICAgICAgIGlmICh2b2x1bWUgPD0gMCkgcmV0dXJuOwotICAgICAgICAgICAgaW50IGluZGV4ID0gcnNzaSAtIG1Sc3NpQmFzZTsKLSAgICAgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbUVudHJpZXNTaXplKSByZXR1cm47Ci0gICAgICAgICAgICBtRW50cmllc1tpbmRleF0udXBkYXRlKHZhbHVlLCB2b2x1bWUpOwotICAgICAgICAgICAgaWYgKERCRykgewotICAgICAgICAgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIy4jIyIpOwotICAgICAgICAgICAgICAgIGxvZ2QoIkNhY2hlIHVwZGF0ZWQ6IGxvc3NbIiArIHJzc2kgKyAiXT0iICsgZGYuZm9ybWF0KG1FbnRyaWVzW2luZGV4XS5tVmFsdWUgKiAxMDApCi0gICAgICAgICAgICAgICAgICAgICAgICArICIlIHZvbHVtZT0iICsgZGYuZm9ybWF0KG1FbnRyaWVzW2luZGV4XS5tVm9sdW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogR2V0IHByZXNldCBsb3NzIGlmIHRoZSBjYWNoZSBoYXMgaW5zdWZmaWNpZW50IGRhdGEsIG9ic2VydmVkIGZyb20gZXhwZXJpbWVudHMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSByc3NpIGlzIHRoZSBpbnB1dCBSU1NJCi0gICAgICAgICAqIEByZXR1cm4gcHJlc2V0IGxvc3Mgb2YgdGhlIGdpdmVuIFJTU0kKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBkb3VibGUgcHJlc2V0TG9zcyhpbnQgcnNzaSkgewotICAgICAgICAgICAgaWYgKHJzc2kgPD0gLTkwKSByZXR1cm4gMS4wOwotICAgICAgICAgICAgaWYgKHJzc2kgPiAwKSByZXR1cm4gMC4wOwotCi0gICAgICAgICAgICBpZiAoc1ByZXNldExvc3MgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIHByZS1jYWxjdWxhdGUgYWxsIHByZXNldCBsb3NzZXMgb25seSBvbmNlLCB0aGVuIHJldXNlIHRoZW0KLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc2l6ZSA9IDkwOwotICAgICAgICAgICAgICAgIHNQcmVzZXRMb3NzID0gbmV3IGRvdWJsZVtzaXplXTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgc1ByZXNldExvc3NbaV0gPSAxLjAgLyBNYXRoLnBvdyg5MCAtIGksIDEuNSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc1ByZXNldExvc3NbLXJzc2ldOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEEgcG9vciBsaW5rIGlzIGRldGVjdGVkLCBjYWxjdWxhdGUgYSB0YXJnZXQgUlNTSSB0byBicmluZyBXaUZpIGJhY2suCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSByc3NpIGlzIHRoZSBjdXJyZW50IFJTU0kKLSAgICAgICAgICogQHJldHVybiB0cnVlIGlmZiB0aGUgY3VycmVudCBCU1NJRCBzaG91bGQgYmUgYXZvaWRlZAotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGJvb2xlYW4gcG9vckxpbmtEZXRlY3RlZChpbnQgcnNzaSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiUG9vciBsaW5rIGRldGVjdGVkLCByc3NpPSIgKyByc3NpKTsKLQotICAgICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgICAgIGxvbmcgbGFzdEdvb2QgPSBub3cgLSBtTGFzdFRpbWVHb29kOwotICAgICAgICAgICAgbG9uZyBsYXN0UG9vciA9IG5vdyAtIG1MYXN0VGltZVBvb3I7Ci0KLSAgICAgICAgICAgIC8vIHJlZHVjZSB0aGUgZGlmZmljdWx0eSBvZiBnb29kIGxpbmsgdGFyZ2V0IGlmIGxhc3QgYXZvaWRhbmNlIHdhcyBsb25nIHRpbWUgYWdvCi0gICAgICAgICAgICB3aGlsZSAobUdvb2RMaW5rVGFyZ2V0SW5kZXggPiAwCi0gICAgICAgICAgICAgICAgICAgICYmIGxhc3RQb29yID49IEdPT0RfTElOS19UQVJHRVRbbUdvb2RMaW5rVGFyZ2V0SW5kZXggLSAxXS5SRURVQ0VfVElNRV9NUykKLSAgICAgICAgICAgICAgICBtR29vZExpbmtUYXJnZXRJbmRleC0tOwotICAgICAgICAgICAgbUdvb2RMaW5rVGFyZ2V0Q291bnQgPSBHT09EX0xJTktfVEFSR0VUW21Hb29kTGlua1RhcmdldEluZGV4XS5TQU1QTEVfQ09VTlQ7Ci0KLSAgICAgICAgICAgIC8vIHNjYW4gZm9yIGEgdGFyZ2V0IFJTU0kgYXQgd2hpY2ggdGhlIGxpbmsgaXMgZ29vZAotICAgICAgICAgICAgaW50IGZyb20gPSByc3NpICsgR09PRF9MSU5LX1JTU0lfUkFOR0VfTUlOOwotICAgICAgICAgICAgaW50IHRvID0gcnNzaSArIEdPT0RfTElOS19SU1NJX1JBTkdFX01BWDsKLSAgICAgICAgICAgIG1Hb29kTGlua1RhcmdldFJzc2kgPSBmaW5kUnNzaVRhcmdldChmcm9tLCB0bywgR09PRF9MSU5LX0xPU1NfVEhSRVNIT0xEKTsKLSAgICAgICAgICAgIG1Hb29kTGlua1RhcmdldFJzc2kgKz0gR09PRF9MSU5LX1RBUkdFVFttR29vZExpbmtUYXJnZXRJbmRleF0uUlNTSV9BREpfREJNOwotICAgICAgICAgICAgaWYgKG1Hb29kTGlua1RhcmdldEluZGV4IDwgR09PRF9MSU5LX1RBUkdFVC5sZW5ndGggLSAxKSBtR29vZExpbmtUYXJnZXRJbmRleCsrOwotCi0gICAgICAgICAgICAvLyBjYWxjdWxhdGUgbWF4IGF2b2lkYW5jZSB0aW1lIHRvIHByZXZlbnQgYXZvaWRpbmcgZm9yZXZlcgotICAgICAgICAgICAgaW50IHAgPSAwLCBwbWF4ID0gTUFYX0FWT0lEX1RJTUUubGVuZ3RoIC0gMTsKLSAgICAgICAgICAgIHdoaWxlIChwIDwgcG1heCAmJiByc3NpID49IE1BWF9BVk9JRF9USU1FW3AgKyAxXS5NSU5fUlNTSV9EQk0pIHArKzsKLSAgICAgICAgICAgIGxvbmcgYXZvaWRNYXggPSBNQVhfQVZPSURfVElNRVtwXS5USU1FX01TOwotCi0gICAgICAgICAgICAvLyBkb24ndCBhdm9pZCBpZiBtYXggYXZvaWRhbmNlIHRpbWUgaXMgMCAoUlNTSSBpcyBzdXBlciBoaWdoKQotICAgICAgICAgICAgaWYgKGF2b2lkTWF4IDw9IDApIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgLy8gc2V0IG1heCBhdm9pZGFuY2UgdGltZSwgc2VuZCBwb29yIGxpbmsgbm90aWZpY2F0aW9uCi0gICAgICAgICAgICBtQnNzaWRBdm9pZFRpbWVNYXggPSBub3cgKyBhdm9pZE1heDsKLQotICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiZ29vZFJzc2k9IiArIG1Hb29kTGlua1RhcmdldFJzc2kgKyAiIGdvb2RDb3VudD0iICsgbUdvb2RMaW5rVGFyZ2V0Q291bnQKLSAgICAgICAgICAgICAgICAgICAgKyAiIGxhc3RHb29kPSIgKyBsYXN0R29vZCArICIgbGFzdFBvb3I9IiArIGxhc3RQb29yICsgIiBhdm9pZE1heD0iICsgYXZvaWRNYXgpOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBIG5ldyBCU1NJRCBpcyBjb25uZWN0ZWQsIHJlY2FsY3VsYXRlIHRhcmdldCBSU1NJIHRocmVzaG9sZAotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgbmV3TGlua0RldGVjdGVkKCkgewotICAgICAgICAgICAgLy8gaWYgdGhpcyBCU1NJRCBpcyBjdXJyZW50bHkgYmVpbmcgYXZvaWRlZCwgdGhlIHJldXNlIHRob3NlIHZhbHVlcwotICAgICAgICAgICAgaWYgKG1Cc3NpZEF2b2lkVGltZU1heCA+IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJQcmV2aW91cyBhdm9pZGFuY2Ugc3RpbGwgaW4gZWZmZWN0LCByc3NpPSIgKyBtR29vZExpbmtUYXJnZXRSc3NpCi0gICAgICAgICAgICAgICAgICAgICAgICArICIgY291bnQ9IiArIG1Hb29kTGlua1RhcmdldENvdW50KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBhIG5ldyBSU1NJIHRocmVzaG9sZCBmb3IgbmV3IGxpbmsgdmVyaWZ5aW5nCi0gICAgICAgICAgICBpbnQgZnJvbSA9IEJTU0lEX1NUQVRfUkFOR0VfTE9XX0RCTTsKLSAgICAgICAgICAgIGludCB0byA9IEJTU0lEX1NUQVRfUkFOR0VfSElHSF9EQk07Ci0gICAgICAgICAgICBtR29vZExpbmtUYXJnZXRSc3NpID0gZmluZFJzc2lUYXJnZXQoZnJvbSwgdG8sIEdPT0RfTElOS19MT1NTX1RIUkVTSE9MRCk7Ci0gICAgICAgICAgICBtR29vZExpbmtUYXJnZXRDb3VudCA9IDE7Ci0gICAgICAgICAgICBtQnNzaWRBdm9pZFRpbWVNYXggPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSArIE1BWF9BVk9JRF9USU1FWzBdLlRJTUVfTVM7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJOZXcgbGluayB2ZXJpZnlpbmcgdGFyZ2V0IHNldCwgcnNzaT0iICsgbUdvb2RMaW5rVGFyZ2V0UnNzaSArICIgY291bnQ9IgotICAgICAgICAgICAgICAgICAgICArIG1Hb29kTGlua1RhcmdldENvdW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IFJTU0kgd2l0aGluIHRoZSByYW5nZSB3aGVyZSBsb3NzW3Jzc2ldIDwgdGhyZXNob2xkCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBmcm9tIHN0YXJ0IHNjYW5uaW5nIGZyb20gdGhpcyBSU1NJCi0gICAgICAgICAqIEBwYXJhbSB0byBzdG9wIHNjYW5uaW5nIGF0IHRoaXMgUlNTSQotICAgICAgICAgKiBAcGFyYW0gdGhyZXNob2xkIHRhcmdldCB0aHJlc2hvbGQgZm9yIHNjYW5uaW5nCi0gICAgICAgICAqIEByZXR1cm4gdGFyZ2V0IFJTU0kKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgZmluZFJzc2lUYXJnZXQoaW50IGZyb20sIGludCB0bywgZG91YmxlIHRocmVzaG9sZCkgewotICAgICAgICAgICAgZnJvbSAtPSBtUnNzaUJhc2U7Ci0gICAgICAgICAgICB0byAtPSBtUnNzaUJhc2U7Ci0gICAgICAgICAgICBpbnQgZW1wdHlDb3VudCA9IDA7Ci0gICAgICAgICAgICBpbnQgZCA9IGZyb20gPCB0byA/IDEgOiAtMTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBmcm9tOyBpICE9IHRvOyBpICs9IGQpCi0gICAgICAgICAgICAgICAgLy8gZG9uJ3QgdXNlIGEgZGF0YSBwb2ludCBpZiBpdCB2b2x1bWUgaXMgdG9vIHNtYWxsIChzdGF0aXN0aWNhbGx5IHVucmVsaWFibGUpCi0gICAgICAgICAgICAgICAgaWYgKGkgPj0gMCAmJiBpIDwgbUVudHJpZXNTaXplICYmIG1FbnRyaWVzW2ldLm1Wb2x1bWUgPiAxLjApIHsKLSAgICAgICAgICAgICAgICAgICAgZW1wdHlDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtRW50cmllc1tpXS5tVmFsdWUgPCB0aHJlc2hvbGQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjYW4gdGFyZ2V0IGZvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcnNzaSA9IG1Sc3NpQmFzZSArIGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjLiMjIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZCgiU2NhbiB0YXJnZXQgZm91bmQ6IHJzc2k9IiArIHJzc2kgKyAiIHRocmVzaG9sZD0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGRmLmZvcm1hdCh0aHJlc2hvbGQgKiAxMDApICsgIiUgdmFsdWU9IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBkZi5mb3JtYXQobUVudHJpZXNbaV0ubVZhbHVlICogMTAwKSArICIlIHZvbHVtZT0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGRmLmZvcm1hdChtRW50cmllc1tpXS5tVm9sdW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnNzaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKytlbXB0eUNvdW50ID49IEJTU0lEX1NUQVRfRU1QVFlfQ09VTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY2FjaGUgaGFzIGluc3VmZmljaWVudCBkYXRhIGFyb3VuZCB0aGlzIFJTU0ksIHVzZSBwcmVzZXQgbG9zcyBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgIGludCByc3NpID0gbVJzc2lCYXNlICsgaTsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIGxvc3NQcmVzZXQgPSBwcmVzZXRMb3NzKHJzc2kpOwotICAgICAgICAgICAgICAgICAgICBpZiAobG9zc1ByZXNldCA8IHRocmVzaG9sZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIy4jIyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2QoIlNjYW4gdGFyZ2V0IGZvdW5kOiByc3NpPSIgKyByc3NpICsgIiB0aHJlc2hvbGQ9IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBkZi5mb3JtYXQodGhyZXNob2xkICogMTAwKSArICIlIHZhbHVlPSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZGYuZm9ybWF0KGxvc3NQcmVzZXQgKiAxMDApICsgIiUgdm9sdW1lPXByZXNldCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJzc2k7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBtUnNzaUJhc2UgKyB0bzsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dwc0luZm8uamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dwc0luZm8uamF2YQppbmRleCBiODBkZjIxLi4yYWQ0YWQwIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XcHNJbmZvLmphdmEKKysrIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV3BzSW5mby5qYXZhCkBAIC0xOSw4ICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogCi1pbXBvcnQgamF2YS51dGlsLkJpdFNldDsKLQogLyoqCiAgKiBBIGNsYXNzIHJlcHJlc2VudGluZyBXaS1GaSBQcm90ZWN0ZWQgU2V0dXAKICAqCmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycENvbmZpZy5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBDb25maWcuamF2YQppbmRleCA0ODJkOWNiLi5iMDE5ZmQ3IDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycENvbmZpZy5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwQ29uZmlnLmphdmEKQEAgLTYwLDcgKzYwLDggQEAKICAgICAgICAgd3BzLnNldHVwID0gV3BzSW5mby5QQkM7CiAgICAgfQogCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkgeworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGUoKSB7CiAgICAgICAgIGRldmljZUFkZHJlc3MgPSAiIjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwRGV2aWNlLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycERldmljZS5qYXZhCmluZGV4IDcxOTZjMWIuLmEwY2IwMzUgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwRGV2aWNlLmphdmEKKysrIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBEZXZpY2UuamF2YQpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICJjb25maWdfbWV0aG9kcz0oMHhbMC05YS1mQS1GXSspICIgKwogICAgICAgICAiZGV2X2NhcGFiPSgweFswLTlhLWZBLUZdKykgIiArCiAgICAgICAgICJncm91cF9jYXBhYj0oMHhbMC05YS1mQS1GXSspIiArCi0gICAgICAgICIoIHdmZF9kZXZfaW5mbz0weDAwMDAwNihbMC05YS1mQS1GXXsxMn0pKT8iCisgICAgICAgICIoIHdmZF9kZXZfaW5mbz0weChbMC05YS1mQS1GXXsxMn0pKT8iCiAgICAgKTsKIAogICAgIC8qKiAyIHRva2VuIGRldmljZSBhZGRyZXNzIHBhdHRlcm4KQEAgLTI3NCw3ICsyNzQsNyBAQAogICAgIH0KIAogICAgIC8qKiBVcGRhdGVzIGRldGFpbHMgb2J0YWluZWQgZnJvbSBzdXBwbGljYW50IEBoaWRlICovCi0gICAgdm9pZCB1cGRhdGVTdXBwbGljYW50RGV0YWlscyhXaWZpUDJwRGV2aWNlIGRldmljZSkgeworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVN1cHBsaWNhbnREZXRhaWxzKFdpZmlQMnBEZXZpY2UgZGV2aWNlKSB7CiAgICAgICAgIGlmIChkZXZpY2UgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZGV2aWNlIGlzIG51bGwiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBEZXZpY2VMaXN0LmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycERldmljZUxpc3QuamF2YQppbmRleCAwOTAwMzUxLi4zZDBiYjNkIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycERldmljZUxpc3QuamF2YQorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycERldmljZUxpc3QuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBEZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKQEAgLTkwLDcgKzg5LDcgQEAKICAgICB9CiAKICAgICAvKiogT25seSB1cGRhdGVzIGRldGFpbHMgZmV0Y2hlZCBmcm9tIHRoZSBzdXBwbGljYW50IEBoaWRlICovCi0gICAgdm9pZCB1cGRhdGVTdXBwbGljYW50RGV0YWlscyhXaWZpUDJwRGV2aWNlIGRldmljZSkgeworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVN1cHBsaWNhbnREZXRhaWxzKFdpZmlQMnBEZXZpY2UgZGV2aWNlKSB7CiAgICAgICAgIHZhbGlkYXRlRGV2aWNlKGRldmljZSk7CiAgICAgICAgIFdpZmlQMnBEZXZpY2UgZCA9IG1EZXZpY2VzLmdldChkZXZpY2UuZGV2aWNlQWRkcmVzcyk7CiAgICAgICAgIGlmIChkICE9IG51bGwpIHsKQEAgLTEwOCw3ICsxMDcsNyBAQAogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwotICAgIHZvaWQgdXBkYXRlR3JvdXBDYXBhYmlsaXR5KFN0cmluZyBkZXZpY2VBZGRyZXNzLCBpbnQgZ3JvdXBDYXBhYikgeworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUdyb3VwQ2FwYWJpbGl0eShTdHJpbmcgZGV2aWNlQWRkcmVzcywgaW50IGdyb3VwQ2FwYWIpIHsKICAgICAgICAgdmFsaWRhdGVEZXZpY2VBZGRyZXNzKGRldmljZUFkZHJlc3MpOwogICAgICAgICBXaWZpUDJwRGV2aWNlIGQgPSBtRGV2aWNlcy5nZXQoZGV2aWNlQWRkcmVzcyk7CiAgICAgICAgIGlmIChkICE9IG51bGwpIHsKQEAgLTExNyw3ICsxMTYsNyBAQAogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwotICAgIHZvaWQgdXBkYXRlU3RhdHVzKFN0cmluZyBkZXZpY2VBZGRyZXNzLCBpbnQgc3RhdHVzKSB7CisgICAgcHVibGljIHZvaWQgdXBkYXRlU3RhdHVzKFN0cmluZyBkZXZpY2VBZGRyZXNzLCBpbnQgc3RhdHVzKSB7CiAgICAgICAgIHZhbGlkYXRlRGV2aWNlQWRkcmVzcyhkZXZpY2VBZGRyZXNzKTsKICAgICAgICAgV2lmaVAycERldmljZSBkID0gbURldmljZXMuZ2V0KGRldmljZUFkZHJlc3MpOwogICAgICAgICBpZiAoZCAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycEdyb3VwTGlzdC5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBHcm91cExpc3QuamF2YQppbmRleCA5OGYwOTcyLi42NGJiMDBiIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycEdyb3VwTGlzdC5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwR3JvdXBMaXN0LmphdmEKQEAgLTQyLDExICs0MiwxMyBAQAogICAgICAgICBwdWJsaWMgdm9pZCBvbkRlbGV0ZUdyb3VwKGludCBuZXRJZCk7CiAgICAgfQogCi0gICAgV2lmaVAycEdyb3VwTGlzdCgpIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgV2lmaVAycEdyb3VwTGlzdCgpIHsKICAgICAgICAgdGhpcyhudWxsLCBudWxsKTsKICAgICB9CiAKLSAgICBXaWZpUDJwR3JvdXBMaXN0KFdpZmlQMnBHcm91cExpc3Qgc291cmNlLCBHcm91cERlbGV0ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIFdpZmlQMnBHcm91cExpc3QoV2lmaVAycEdyb3VwTGlzdCBzb3VyY2UsIEdyb3VwRGVsZXRlTGlzdGVuZXIgbGlzdGVuZXIpIHsKICAgICAgICAgbUxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICAgICAgIG1Hcm91cHMgPSBuZXcgTHJ1Q2FjaGU8SW50ZWdlciwgV2lmaVAycEdyb3VwPihDUkVERU5USUFMX01BWF9OVU0pIHsKICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtNzgsOCArODAsOSBAQAogICAgICAqIEFkZCB0aGUgc3BlY2lmaWVkIGdyb3VwIHRvIHRoaXMgZ3JvdXAgbGlzdC4KICAgICAgKgogICAgICAqIEBwYXJhbSBncm91cAorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgdm9pZCBhZGQoV2lmaVAycEdyb3VwIGdyb3VwKSB7CisgICAgcHVibGljIHZvaWQgYWRkKFdpZmlQMnBHcm91cCBncm91cCkgewogICAgICAgICBtR3JvdXBzLnB1dChncm91cC5nZXROZXR3b3JrSWQoKSwgZ3JvdXApOwogICAgIH0KIApAQCAtODcsOCArOTAsOSBAQAogICAgICAqIFJlbW92ZSB0aGUgZ3JvdXAgd2l0aCB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgaWQgZnJvbSB0aGlzIGdyb3VwIGxpc3QuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbmV0SWQKKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHZvaWQgcmVtb3ZlKGludCBuZXRJZCkgeworICAgIHB1YmxpYyB2b2lkIHJlbW92ZShpbnQgbmV0SWQpIHsKICAgICAgICAgbUdyb3Vwcy5yZW1vdmUobmV0SWQpOwogICAgIH0KIApAQCAtMTAzLDggKzEwNyw5IEBACiAKICAgICAvKioKICAgICAgKiBDbGVhciB0aGUgZ3JvdXAuCisgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBib29sZWFuIGNsZWFyKCkgeworICAgIHB1YmxpYyBib29sZWFuIGNsZWFyKCkgewogICAgICAgICBpZiAobUdyb3Vwcy5zaXplKCkgPT0gMCkgcmV0dXJuIGZhbHNlOwogICAgICAgICBpc0NsZWFyQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgbUdyb3Vwcy5ldmljdEFsbCgpOwpAQCAtMTIwLDggKzEyNSw5IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gZGV2aWNlQWRkcmVzcyBwMnAgZGV2aWNlIGFkZHJlc3MuCiAgICAgICogQHJldHVybiB0aGUgbmV0d29yayBpZC4gaWYgbm90IGZvdW5kLCByZXR1cm4gLTEuCisgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBpbnQgZ2V0TmV0d29ya0lkKFN0cmluZyBkZXZpY2VBZGRyZXNzKSB7CisgICAgcHVibGljIGludCBnZXROZXR3b3JrSWQoU3RyaW5nIGRldmljZUFkZHJlc3MpIHsKICAgICAgICAgaWYgKGRldmljZUFkZHJlc3MgPT0gbnVsbCkgcmV0dXJuIC0xOwogCiAgICAgICAgIGZpbmFsIENvbGxlY3Rpb248V2lmaVAycEdyb3VwPiBncm91cHMgPSBtR3JvdXBzLnNuYXBzaG90KCkudmFsdWVzKCk7CkBAIC0xNDIsOCArMTQ4LDkgQEAKICAgICAgKiBAcGFyYW0gZGV2aWNlQWRkcmVzcyBwMnAgZGV2aWNlIGFkZHJlc3MuCiAgICAgICogQHBhcmFtIHNzaWQgc3NpZC4KICAgICAgKiBAcmV0dXJuIHRoZSBuZXR3b3JrIGlkLiBpZiBub3QgZm91bmQsIHJldHVybiAtMS4KKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIGludCBnZXROZXR3b3JrSWQoU3RyaW5nIGRldmljZUFkZHJlc3MsIFN0cmluZyBzc2lkKSB7CisgICAgcHVibGljIGludCBnZXROZXR3b3JrSWQoU3RyaW5nIGRldmljZUFkZHJlc3MsIFN0cmluZyBzc2lkKSB7CiAgICAgICAgIGlmIChkZXZpY2VBZGRyZXNzID09IG51bGwgfHwgc3NpZCA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KQEAgLTE2Niw4ICsxNzMsOSBAQAogICAgICAqCiAgICAgICogQHBhcmFtIG5ldElkIG5ldHdvcmsgaWQuCiAgICAgICogQHJldHVybiB0aGUgYWRkcmVzcy4gaWYgbm90IGZvdW5kLCByZXR1cm4gbnVsbC4KKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIFN0cmluZyBnZXRPd25lckFkZHIoaW50IG5ldElkKSB7CisgICAgcHVibGljIFN0cmluZyBnZXRPd25lckFkZHIoaW50IG5ldElkKSB7CiAgICAgICAgIFdpZmlQMnBHcm91cCBncnAgPSBtR3JvdXBzLmdldChuZXRJZCk7CiAgICAgICAgIGlmIChncnAgIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIGdycC5nZXRPd25lcigpLmRldmljZUFkZHJlc3M7CkBAIC0xODIsOCArMTkwLDkgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBuZXRJZCBuZXR3b3JrIGlkLgogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgaWQgaXMgcHJlc2VudCBpbiB0aGlzIGdyb3VwIGxpc3QuCisgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBib29sZWFuIGNvbnRhaW5zKGludCBuZXRJZCkgeworICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zKGludCBuZXRJZCkgewogICAgICAgICBmaW5hbCBDb2xsZWN0aW9uPFdpZmlQMnBHcm91cD4gZ3JvdXBzID0gbUdyb3Vwcy5zbmFwc2hvdCgpLnZhbHVlcygpOwogICAgICAgICBmb3IgKFdpZmlQMnBHcm91cCBncnA6IGdyb3VwcykgewogICAgICAgICAgICAgaWYgKG5ldElkID09IGdycC5nZXROZXR3b3JrSWQoKSkgewpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIuamF2YQppbmRleCA0OTg4YjkyLi4zZWQyNDA2IDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIuamF2YQorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIuamF2YQpAQCAtMTksOCArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudDsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2RrQ29uc3RhbnQuU2RrQ29uc3RhbnRUeXBlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuSUNvbm5lY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XcHNJbmZvOwogaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLm5zZC5XaWZpUDJwRG5zU2RTZXJ2aWNlSW5mbzsKIGltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5uc2QuV2lmaVAycERuc1NkU2VydmljZVJlc3BvbnNlOwpAQCAtMjksMTYgKzI3LDEyIEBACiBpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAubnNkLldpZmlQMnBTZXJ2aWNlUmVzcG9uc2U7CiBpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAubnNkLldpZmlQMnBVcG5wU2VydmljZUluZm87CiBpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAubnNkLldpZmlQMnBVcG5wU2VydmljZVJlc3BvbnNlOwotaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2VuZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Xb3JrU291cmNlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBQcm92RGlzY0V2ZW50LmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycFByb3ZEaXNjRXZlbnQuamF2YQppbmRleCBiM2YzNGI0Li45ODY4M2NiIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycFByb3ZEaXNjRXZlbnQuamF2YQorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycFByb3ZEaXNjRXZlbnQuamF2YQpAQCAtMTYsMTAgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLm5ldC53aWZpLnAycDsKIAotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEEgY2xhc3MgcmVwcmVzZW50aW5nIGEgV2ktRmkgcDJwIHByb3Zpc2lvbmFsIGRpc2NvdmVyeSByZXF1ZXN0L3Jlc3BvbnNlCiAgKiBTZWUge0BsaW5rICNXaWZpUDJwUHJvdkRpc2NFdmVudH0gZm9yIHN1cHBvcnRlZCB0eXBlcwpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBTZXJ2aWNlLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycFNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIwNzIwOC4uMDAwMDAwMAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5uZXQud2lmaS5wMnA7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKLWltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQubmV0LklDb25uZWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuRGhjcFJlc3VsdHM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuRGhjcFN0YXRlTWFjaGluZTsKLWltcG9ydCBhbmRyb2lkLm5ldC5JbnRlcmZhY2VDb25maWd1cmF0aW9uOwotaW1wb3J0IGFuZHJvaWQubmV0LkxpbmtBZGRyZXNzOwotaW1wb3J0IGFuZHJvaWQubmV0LkxpbmtQcm9wZXJ0aWVzOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtVdGlsczsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaU1vbml0b3I7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTmF0aXZlOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaVN0YXRlTWFjaGluZTsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldwc0luZm87Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycEdyb3VwTGlzdC5Hcm91cERlbGV0ZUxpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLm5zZC5XaWZpUDJwU2VydmljZUluZm87Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAubnNkLldpZmlQMnBTZXJ2aWNlUmVxdWVzdDsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5uc2QuV2lmaVAycFNlcnZpY2VSZXNwb25zZTsKLWltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JTmV0d29ya01hbmFnZW1lbnRTZXJ2aWNlOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2VuZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwotaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5FZGl0VGV4dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LlRlbGVwaG9ueUludGVudHM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Bc3luY0NoYW5uZWw7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Qcm90b2NvbDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGVNYWNoaW5lOwotCi1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLQotCi0vKioKLSAqIFdpZmlQMnBTZXJ2aWNlIGluY2x1ZGVzIGEgc3RhdGUgbWFjaGluZSB0byBwZXJmb3JtIFdpLUZpIHAycCBvcGVyYXRpb25zLiBBcHBsaWNhdGlvbnMKLSAqIGNvbW11bmljYXRlIHdpdGggdGhpcyBzZXJ2aWNlIHRvIGlzc3VlIGRldmljZSBkaXNjb3ZlcnkgYW5kIGNvbm5lY3Rpdml0eSByZXF1ZXN0cwotICogdGhyb3VnaCB0aGUgV2lmaVAycE1hbmFnZXIgaW50ZXJmYWNlLiBUaGUgc3RhdGUgbWFjaGluZSBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgd2lmaQotICogZHJpdmVyIHRocm91Z2ggd3BhX3N1cHBsaWNhbnQgYW5kIGhhbmRsZXMgdGhlIGV2ZW50IHJlc3BvbnNlcyB0aHJvdWdoIFdpZmlNb25pdG9yLgotICoKLSAqIE5vdGUgdGhhdCB0aGUgdGVybSBXaWZpIHdoZW4gdXNlZCB3aXRob3V0IGEgcDJwIHN1ZmZpeCByZWZlcnMgdG8gdGhlIGNsaWVudCBtb2RlCi0gKiBvZiBXaWZpIG9wZXJhdGlvbgotICogQGhpZGUKLSAqLwotcHVibGljIGNsYXNzIFdpZmlQMnBTZXJ2aWNlIGV4dGVuZHMgSVdpZmlQMnBNYW5hZ2VyLlN0dWIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2lmaVAycFNlcnZpY2UiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5FVFdPUktUWVBFID0gIldJRklfUDJQIjsKLQotICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKLSAgICBwcml2YXRlIFN0cmluZyBtSW50ZXJmYWNlOwotICAgIHByaXZhdGUgTm90aWZpY2F0aW9uIG1Ob3RpZmljYXRpb247Ci0KLSAgICBJTmV0d29ya01hbmFnZW1lbnRTZXJ2aWNlIG1Od1NlcnZpY2U7Ci0gICAgcHJpdmF0ZSBEaGNwU3RhdGVNYWNoaW5lIG1EaGNwU3RhdGVNYWNoaW5lOwotCi0gICAgcHJpdmF0ZSBQMnBTdGF0ZU1hY2hpbmUgbVAycFN0YXRlTWFjaGluZTsKLSAgICBwcml2YXRlIEFzeW5jQ2hhbm5lbCBtUmVwbHlDaGFubmVsID0gbmV3IEFzeW5jQ2hhbm5lbCgpOwotICAgIHByaXZhdGUgQXN5bmNDaGFubmVsIG1XaWZpQ2hhbm5lbDsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJvb2xlYW4gSk9JTl9HUk9VUCA9IHRydWU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQm9vbGVhbiBGT1JNX0dST1VQID0gZmFsc2U7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCb29sZWFuIFJFTE9BRCA9IHRydWU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQm9vbGVhbiBOT19SRUxPQUQgPSBmYWxzZTsKLQotICAgIC8qIFR3byBtaW51dGVzIGNvbWVzIGZyb20gdGhlIHdwYV9zdXBwbGljYW50IHNldHRpbmcgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgR1JPVVBfQ1JFQVRJTkdfV0FJVF9USU1FX01TID0gMTIwICogMTAwMDsKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgbUdyb3VwQ3JlYXRpbmdUaW1lb3V0SW5kZXggPSAwOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERJU0FCTEVfUDJQX1dBSVRfVElNRV9NUyA9IDUgKiAxMDAwOwotICAgIHByaXZhdGUgc3RhdGljIGludCBtRGlzYWJsZVAycFRpbWVvdXRJbmRleCA9IDA7Ci0KLSAgICAvKiBTZXQgYSB0d28gbWludXRlIGRpc2NvdmVyIHRpbWVvdXQgdG8gYXZvaWQgU1RBIHNjYW5zIGZyb20gYmVpbmcgYmxvY2tlZCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBESVNDT1ZFUl9USU1FT1VUX1MgPSAxMjA7Ci0KLSAgICAvKiBJZGxlIHRpbWUgYWZ0ZXIgYSBwZWVyIGlzIGdvbmUgd2hlbiB0aGUgZ3JvdXAgaXMgdG9ybiBkb3duICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEdST1VQX0lETEVfVElNRV9TID0gMTA7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQkFTRSA9IFByb3RvY29sLkJBU0VfV0lGSV9QMlBfU0VSVklDRTsKLQotICAgIC8qIERlbGF5ZWQgbWVzc2FnZSB0byB0aW1lb3V0IGdyb3VwIGNyZWF0aW9uICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1JPVVBfQ1JFQVRJTkdfVElNRURfT1VUICAgICAgICA9ICAgQkFTRSArIDE7Ci0KLSAgICAvKiBVc2VyIGFjY2VwdGVkIGEgcGVlciByZXF1ZXN0ICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBFRVJfQ09OTkVDVElPTl9VU0VSX0FDQ0VQVCAgICA9ICAgQkFTRSArIDI7Ci0gICAgLyogVXNlciByZWplY3RlZCBhIHBlZXIgcmVxdWVzdCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQRUVSX0NPTk5FQ1RJT05fVVNFUl9SRUpFQ1QgICAgPSAgIEJBU0UgKyAzOwotICAgIC8qIFVzZXIgd2FudHMgdG8gZGlzY29ubmVjdCB3aWZpIGluIGZhdm91ciBvZiBwMnAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFJPUF9XSUZJX1VTRVJfQUNDRVBUICAgICAgICAgID0gICBCQVNFICsgNDsKLSAgICAvKiBVc2VyIHdhbnRzIHRvIGtlZXAgaGlzIHdpZmkgY29ubmVjdGlvbiBhbmQgZHJvcCBwMnAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFJPUF9XSUZJX1VTRVJfUkVKRUNUICAgICAgICAgID0gICBCQVNFICsgNTsKLSAgICAvKiBEZWxheWVkIG1lc3NhZ2UgdG8gdGltZW91dCBwMnAgZGlzYWJsZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERJU0FCTEVfUDJQX1RJTUVEX09VVCAgICAgICAgICAgPSAgIEJBU0UgKyA2OwotCi0KLSAgICAvKiBDb21tYW5kcyB0byB0aGUgV2lmaVN0YXRlTWFjaGluZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9DT05ORUNUSU9OX0NIQU5HRUQgICAgICAgICAgPSAgIEJBU0UgKyAxMTsKLQotICAgIC8qIFRoZXNlIGNvbW1hbmRzIGFyZSB1c2VkIHRvIHRlbXBvcmFyaWx5IGRpc2Nvbm5lY3Qgd2lmaSB3aGVuIHdlIGRldGVjdAotICAgICAqIGEgZnJlcXVlbmN5IGNvbmZsaWN0IHdoaWNoIHdvdWxkIG1ha2UgaXQgaW1wb3NzaWJsZSB0byBoYXZlIHdpdGggcDJwCi0gICAgICogYW5kIHdpZmkgYWN0aXZlIGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICoKLSAgICAgKiBJZiB0aGUgdXNlciBjaG9vc2VzIHRvIGRpc2FibGUgd2lmaSB0ZW1wb3JhcmlseSwgd2Uga2VlcCB3aWZpIGRpc2Nvbm5lY3RlZAotICAgICAqIHVudGlsIHRoZSBwMnAgY29ubmVjdGlvbiBpcyBkb25lIGFuZCB0ZXJtaW5hdGVkIGF0IHdoaWNoIHBvaW50IHdlIHdpbGwKLSAgICAgKiBicmluZyBiYWNrIHdpZmkgdXAKLSAgICAgKgotICAgICAqIERJU0NPTk5FQ1RfV0lGSV9SRVFVRVNUCi0gICAgICogICAgICBtc2cuYXJnMSA9IDEgZW5hYmxlcyB0ZW1wb3JhcnkgZGlzY29ubmVjdCBhbmQgMCBkaXNhYmxlcyBpdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESVNDT05ORUNUX1dJRklfUkVRVUVTVCAgICAgICAgID0gICBCQVNFICsgMTI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElTQ09OTkVDVF9XSUZJX1JFU1BPTlNFICAgICAgICA9ICAgQkFTRSArIDEzOwotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VUX01JUkFDQVNUX01PREUgICAgICAgICAgICAgICA9ICAgQkFTRSArIDE0OwotCi0gICAgLy8gRHVyaW5nIGRoY3AgKGFuZCBwZXJoYXBzIG90aGVyIHRpbWVzKSB3ZSBjYW4ndCBhZmZvcmQgdG8gZHJvcCBwYWNrZXRzCi0gICAgLy8gYnV0IERpc2NvdmVyeSB3aWxsIHN3aXRjaCBvdXIgY2hhbm5lbCBlbm91Z2ggd2Ugd2lsbC4KLSAgICAvLyAgIG1zZy5hcmcxID0gRU5BQkxFRCBmb3IgYmxvY2tpbmcsIERJU0FCTEVEIGZvciByZXN1bWVkLgotICAgIC8vICAgbXNnLmFyZzIgPSBtc2cgdG8gc2VuZCB3aGVuIGJsb2NrZWQKLSAgICAvLyAgIG1zZy5vYmogID0gU3RhdGVNYWNoaW5lIHRvIHNlbmQgdG8gd2hlbiBibG9ja2VkCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkxPQ0tfRElTQ09WRVJZICAgICAgICAgICAgICAgICA9ICAgQkFTRSArIDE1OwotCi0gICAgLy8gc2V0IGNvdW50cnkgY29kZQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFVF9DT1VOVFJZX0NPREUgICAgICAgICAgICAgICAgPSAgIEJBU0UgKyAxNjsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVOQUJMRUQgICAgICAgICAgICAgICAgICAgICAgICAgPSAxOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERJU0FCTEVEICAgICAgICAgICAgICAgICAgICAgICAgPSAwOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1QMnBTdXBwb3J0ZWQ7Ci0KLSAgICBwcml2YXRlIFdpZmlQMnBEZXZpY2UgbVRoaXNEZXZpY2UgPSBuZXcgV2lmaVAycERldmljZSgpOwotCi0gICAgLyogV2hlbiBhIGdyb3VwIGhhcyBiZWVuIGV4cGxpY2l0bHkgY3JlYXRlZCBieSBhbiBhcHAsIHdlIHBlcnNpc3QgdGhlIGdyb3VwCi0gICAgICogZXZlbiBhZnRlciBhbGwgY2xpZW50cyBoYXZlIGJlZW4gZGlzY29ubmVjdGVkIHVudGlsIGFuIGV4cGxpY2l0IHJlbW92ZQotICAgICAqIGlzIGludm9rZWQgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbUF1dG9ub21vdXNHcm91cDsKLQotICAgIC8qIEludml0YXRpb24gdG8gam9pbiBhbiBleGlzdGluZyBwMnAgZ3JvdXAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbUpvaW5FeGlzdGluZ0dyb3VwOwotCi0gICAgLyogVHJhY2sgd2hldGhlciB3ZSBhcmUgaW4gcDJwIGRpc2NvdmVyeS4gVGhpcyBpcyB1c2VkIHRvIGF2b2lkIHNlbmRpbmcgZHVwbGljYXRlCi0gICAgICogYnJvYWRjYXN0cwotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtRGlzY292ZXJ5U3RhcnRlZDsKLSAgICAvKiBUcmFjayB3aGV0aGVyIHNlcnZjaWNlL3BlZXIgZGlzY292ZXJ5IGlzIGJsb2NrZWQgaW4gZmF2b3Igb2Ygb3RoZXIgd2lmaSBhY3Rpb25zCi0gICAgICogKG5vdGFibHkgZGhjcCkKLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbURpc2NvdmVyeUJsb2NrZWQ7Ci0KLSAgICAvLyBTdXBwbGljYW50IGRvZXNuJ3QgbGlrZSBzZXR0aW5nIHRoZSBzYW1lIGNvdW50cnkgY29kZSBtdWx0aXBsZSB0aW1lcyAoaXQgbWF5IGRyb3AKLSAgICAvLyBjdXJyZW50IGNvbm5lY3RlZCBuZXR3b3JrKSwgc28gd2Ugc2F2ZSB0aGUgY291bnRyeSBjb2RlIGhlcmUgdG8gYXZvaWQgcmVkdW5kZW5jeQotICAgIHByaXZhdGUgU3RyaW5nIG1MYXN0U2V0Q291bnRyeUNvZGU7Ci0KLSAgICAvKgotICAgICAqIHJlbWVtYmVyIGlmIHdlIHdlcmUgaW4gYSBzY2FuIHdoZW4gaXQgaGFkIHRvIGJlIHN0b3BwZWQKLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbURpc2NvdmVyeVBvc3Rwb25lZCA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBOZXR3b3JrSW5mbyBtTmV0d29ya0luZm87Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbVRlbXBvYXJpbHlEaXNjb25uZWN0ZWRXaWZpID0gZmFsc2U7Ci0KLSAgICAvKiBUaGUgdHJhbnNhY3Rpb24gSWQgb2Ygc2VydmljZSBkaXNjb3ZlcnkgcmVxdWVzdCAqLwotICAgIHByaXZhdGUgYnl0ZSBtU2VydmljZVRyYW5zYWN0aW9uSWQgPSAwOwotCi0gICAgLyogU2VydmljZSBkaXNjb3ZlcnkgcmVxdWVzdCBJRCBvZiB3cGFfc3VwcGxpY2FudC4KLSAgICAgKiBudWxsIG1lYW5zIGl0J3Mgbm90IHNldCB5ZXQuICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgbVNlcnZpY2VEaXNjUmVxSWQ7Ci0KLSAgICAvKiBjbGllbnRzKGFwcGxpY2F0aW9uKSBpbmZvcm1hdGlvbiBsaXN0LiAqLwotICAgIHByaXZhdGUgSGFzaE1hcDxNZXNzZW5nZXIsIENsaWVudEluZm8+IG1DbGllbnRJbmZvTGlzdCA9IG5ldyBIYXNoTWFwPE1lc3NlbmdlciwgQ2xpZW50SW5mbz4oKTsKLQotICAgIC8qIElzIGNob3NlbiBhcyBhIHVuaXF1ZSByYW5nZSB0byBhdm9pZCBjb25mbGljdCB3aXRoCi0gICAgICAgdGhlIHJhbmdlIGRlZmluZWQgaW4gVGV0aGVyaW5nLmphdmEgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBESENQX1JBTkdFID0geyIxOTIuMTY4LjQ5LjIiLCAiMTkyLjE2OC40OS4yNTQifTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVkVSX0FERFJFU1MgPSAiMTkyLjE2OC40OS4xIjsKLQotICAgIC8qKgotICAgICAqIEVycm9yIGNvZGUgZGVmaW5pdGlvbi4KLSAgICAgKiBzZWUgdGhlIFRhYmxlLjggaW4gdGhlIFdpRmkgRGlyZWN0IHNwZWNpZmljYXRpb24gZm9yIHRoZSBkZXRhaWwuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBlbnVtIFAycFN0YXR1cyB7Ci0gICAgICAgIC8qIFN1Y2Nlc3MuICovCi0gICAgICAgIFNVQ0NFU1MsCi0KLSAgICAgICAgLyogVGhlIHRhcmdldCBkZXZpY2UgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlLiAqLwotICAgICAgICBJTkZPUk1BVElPTl9JU19DVVJSRU5UTFlfVU5BVkFJTEFCTEUsCi0KLSAgICAgICAgLyogUHJvdG9jb2wgZXJyb3IuICovCi0gICAgICAgIElOQ09NUEFUSUJMRV9QQVJBTUVURVJTLAotCi0gICAgICAgIC8qIFRoZSB0YXJnZXQgZGV2aWNlIHJlYWNoZWQgdGhlIGxpbWl0IG9mIHRoZSBudW1iZXIgb2YgdGhlIGNvbm5lY3RhYmxlIGRldmljZS4KLSAgICAgICAgICogRm9yIGV4YW1wbGUsIGRldmljZSBsaW1pdCBvciBncm91cCBsaW1pdCBpcyBzZXQuICovCi0gICAgICAgIExJTUlUX1JFQUNIRUQsCi0KLSAgICAgICAgLyogUHJvdG9jb2wgZXJyb3IuICovCi0gICAgICAgIElOVkFMSURfUEFSQU1FVEVSLAotCi0gICAgICAgIC8qIFVuYWJsZSB0byBhY2NvbW1vZGF0ZSByZXF1ZXN0LiAqLwotICAgICAgICBVTkFCTEVfVE9fQUNDT01NT0RBVEVfUkVRVUVTVCwKLQotICAgICAgICAvKiBQcmV2aW91cyBwcm90b2NvbCBlcnJvciwgb3IgZGlzcnVwdGl2ZSBiZWhhdmlvci4gKi8KLSAgICAgICAgUFJFVklPVVNfUFJPVE9DT0xfRVJST1IsCi0KLSAgICAgICAgLyogVGhlcmUgaXMgbm8gY29tbW9uIGNoYW5uZWxzIHRoZSBib3RoIGRldmljZXMgY2FuIHVzZS4gKi8KLSAgICAgICAgTk9fQ09NTU9OX0NIQU5ORUwsCi0KLSAgICAgICAgLyogVW5rbm93biBwMnAgZ3JvdXAuIEZvciBleGFtcGxlLCBEZXZpY2UgQSB0cmllcyB0byBpbnZva2UgdGhlIHByZXZpb3VzIHBlcnNpc3RlbnQgZ3JvdXAsCi0gICAgICAgICAqICBidXQgZGV2aWNlIEIgaGFzIHJlbW92ZWQgdGhlIHNwZWNpZmllZCBjcmVkZW50aWFsIGFscmVhZHkuICovCi0gICAgICAgIFVOS05PV05fUDJQX0dST1VQLAotCi0gICAgICAgIC8qIEJvdGggcDJwIGRldmljZXMgaW5kaWNhdGVkIGFuIGludGVudCBvZiAxNSBpbiBncm91cCBvd25lciBuZWdvdGlhdGlvbi4gKi8KLSAgICAgICAgQk9USF9HT19JTlRFTlRfMTUsCi0KLSAgICAgICAgLyogSW5jb21wYXRpYmxlIHByb3Zpc2lvbmluZyBtZXRob2QuICovCi0gICAgICAgIElOQ09NUEFUSUJMRV9QUk9WSVNJT05JTkdfTUVUSE9ELAotCi0gICAgICAgIC8qIFJlamVjdGVkIGJ5IHVzZXIgKi8KLSAgICAgICAgUkVKRUNURURfQllfVVNFUiwKLQotICAgICAgICAvKiBVbmtub3duIGVycm9yICovCi0gICAgICAgIFVOS05PV047Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyBQMnBTdGF0dXMgdmFsdWVPZihpbnQgZXJyb3IpIHsKLSAgICAgICAgICAgIHN3aXRjaChlcnJvcikgewotICAgICAgICAgICAgY2FzZSAwIDoKLSAgICAgICAgICAgICAgICByZXR1cm4gU1VDQ0VTUzsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICByZXR1cm4gSU5GT1JNQVRJT05fSVNfQ1VSUkVOVExZX1VOQVZBSUxBQkxFOwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIHJldHVybiBJTkNPTVBBVElCTEVfUEFSQU1FVEVSUzsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICByZXR1cm4gTElNSVRfUkVBQ0hFRDsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9QQVJBTUVURVI7Ci0gICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOQUJMRV9UT19BQ0NPTU1PREFURV9SRVFVRVNUOwotICAgICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICAgIHJldHVybiBQUkVWSU9VU19QUk9UT0NPTF9FUlJPUjsKLSAgICAgICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgICAgICByZXR1cm4gTk9fQ09NTU9OX0NIQU5ORUw7Ci0gICAgICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fUDJQX0dST1VQOwotICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICAgIHJldHVybiBCT1RIX0dPX0lOVEVOVF8xNTsKLSAgICAgICAgICAgIGNhc2UgMTA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIElOQ09NUEFUSUJMRV9QUk9WSVNJT05JTkdfTUVUSE9EOwotICAgICAgICAgICAgY2FzZSAxMToKLSAgICAgICAgICAgICAgICByZXR1cm4gUkVKRUNURURfQllfVVNFUjsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV047Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgV2lmaVAycFNlcnZpY2UoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKLQotICAgICAgICAvL1NUT1BTSElQOiBnZXQgdGhpcyBmcm9tIG5hdGl2ZSBzaWRlCi0gICAgICAgIG1JbnRlcmZhY2UgPSAicDJwMCI7Ci0gICAgICAgIG1OZXR3b3JrSW5mbyA9IG5ldyBOZXR3b3JrSW5mbyhDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfV0lGSV9QMlAsIDAsIE5FVFdPUktUWVBFLCAiIik7Ci0KLSAgICAgICAgbVAycFN1cHBvcnRlZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFzU3lzdGVtRmVhdHVyZSgKLSAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5GRUFUVVJFX1dJRklfRElSRUNUKTsKLQotICAgICAgICBtVGhpc0RldmljZS5wcmltYXJ5RGV2aWNlVHlwZSA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5jb25maWdfd2lmaV9wMnBfZGV2aWNlX3R5cGUpOwotCi0gICAgICAgIG1QMnBTdGF0ZU1hY2hpbmUgPSBuZXcgUDJwU3RhdGVNYWNoaW5lKFRBRywgbVAycFN1cHBvcnRlZCk7Ci0gICAgICAgIG1QMnBTdGF0ZU1hY2hpbmUuc3RhcnQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjb25uZWN0aXZpdHlTZXJ2aWNlUmVhZHkoKSB7Ci0gICAgICAgIElCaW5kZXIgYiA9IFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoQ29udGV4dC5ORVRXT1JLTUFOQUdFTUVOVF9TRVJWSUNFKTsKLSAgICAgICAgbU53U2VydmljZSA9IElOZXR3b3JrTWFuYWdlbWVudFNlcnZpY2UuU3R1Yi5hc0ludGVyZmFjZShiKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZW5mb3JjZUFjY2Vzc1Blcm1pc3Npb24oKSB7Ci0gICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uQUNDRVNTX1dJRklfU1RBVEUsCi0gICAgICAgICAgICAgICAgIldpZmlQMnBTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCkgewotICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLkNIQU5HRV9XSUZJX1NUQVRFLAotICAgICAgICAgICAgICAgICJXaWZpUDJwU2VydmljZSIpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBlbmZvcmNlQ29ubmVjdGl2aXR5SW50ZXJuYWxQZXJtaXNzaW9uKCkgewotICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oCi0gICAgICAgICAgICAgICAgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLkNPTk5FQ1RJVklUWV9JTlRFUk5BTCwKLSAgICAgICAgICAgICAgICAiV2lmaVAycFNlcnZpY2UiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYSByZWZlcmVuY2UgdG8gaGFuZGxlci4gVGhpcyBpcyB1c2VkIGJ5IGEgY2xpZW50IHRvIGVzdGFibGlzaAotICAgICAqIGFuIEFzeW5jQ2hhbm5lbCBjb21tdW5pY2F0aW9uIHdpdGggV2lmaVAycFNlcnZpY2UKLSAgICAgKi8KLSAgICBwdWJsaWMgTWVzc2VuZ2VyIGdldE1lc3NlbmdlcigpIHsKLSAgICAgICAgZW5mb3JjZUFjY2Vzc1Blcm1pc3Npb24oKTsKLSAgICAgICAgZW5mb3JjZUNoYW5nZVBlcm1pc3Npb24oKTsKLSAgICAgICAgcmV0dXJuIG5ldyBNZXNzZW5nZXIobVAycFN0YXRlTWFjaGluZS5nZXRIYW5kbGVyKCkpOwotICAgIH0KLQotICAgIC8qKiBUaGlzIGlzIHVzZWQgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiB0byBkcml2ZXJzIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlIGRlcGVuZGluZwotICAgICAqIG9uIHRoZSBjdXJyZW50IG1vZGUgb2Ygb3BlcmF0aW9uLgotICAgICAqIDAgLSBkaXNhYmxlZAotICAgICAqIDEgLSBzb3VyY2Ugb3BlcmF0aW9uCi0gICAgICogMiAtIHNpbmsgb3BlcmF0aW9uCi0gICAgICoKLSAgICAgKiBBcyBhbiBleGFtcGxlLCB0aGUgZHJpdmVyIGNvdWxkIHJlZHVjZSB0aGUgY2hhbm5lbCBkd2VsbCB0aW1lIGR1cmluZyBzY2FubmluZwotICAgICAqIHdoZW4gYWN0aW5nIGFzIGEgc291cmNlIG9yIHNpbmsgdG8gbWluaW1pemUgaW1wYWN0IG9uIG1pcmFjYXN0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE1pcmFjYXN0TW9kZShpbnQgbW9kZSkgewotICAgICAgICBlbmZvcmNlQ29ubmVjdGl2aXR5SW50ZXJuYWxQZXJtaXNzaW9uKCk7Ci0gICAgICAgIG1QMnBTdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoU0VUX01JUkFDQVNUX01PREUsIG1vZGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIGlmIChtQ29udGV4dC5jaGVja0NhbGxpbmdPclNlbGZQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5EVU1QKQotICAgICAgICAgICAgICAgICE9IFBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJT05fR1JBTlRFRCkgewotICAgICAgICAgICAgcHcucHJpbnRsbigiUGVybWlzc2lvbiBEZW5pYWw6IGNhbid0IGR1bXAgV2lmaVAycFNlcnZpY2UgZnJvbSBmcm9tIHBpZD0iCi0gICAgICAgICAgICAgICAgICAgICsgQmluZGVyLmdldENhbGxpbmdQaWQoKQotICAgICAgICAgICAgICAgICAgICArICIsIHVpZD0iICsgQmluZGVyLmdldENhbGxpbmdVaWQoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbVAycFN0YXRlTWFjaGluZS5kdW1wKGZkLCBwdywgYXJncyk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1BdXRvbm9tb3VzR3JvdXAgIiArIG1BdXRvbm9tb3VzR3JvdXApOwotICAgICAgICBwdy5wcmludGxuKCJtSm9pbkV4aXN0aW5nR3JvdXAgIiArIG1Kb2luRXhpc3RpbmdHcm91cCk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1EaXNjb3ZlcnlTdGFydGVkICIgKyBtRGlzY292ZXJ5U3RhcnRlZCk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1OZXR3b3JrSW5mbyAiICsgbU5ldHdvcmtJbmZvKTsKLSAgICAgICAgcHcucHJpbnRsbigibVRlbXBvYXJpbHlEaXNjb25uZWN0ZWRXaWZpICIgKyBtVGVtcG9hcmlseURpc2Nvbm5lY3RlZFdpZmkpOwotICAgICAgICBwdy5wcmludGxuKCJtU2VydmljZURpc2NSZXFJZCAiICsgbVNlcnZpY2VEaXNjUmVxSWQpOwotICAgICAgICBwdy5wcmludGxuKCk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBIYW5kbGVzIGludGVyYWN0aW9uIHdpdGggV2lmaVN0YXRlTWFjaGluZQotICAgICAqLwotICAgIHByaXZhdGUgY2xhc3MgUDJwU3RhdGVNYWNoaW5lIGV4dGVuZHMgU3RhdGVNYWNoaW5lIHsKLQotICAgICAgICBwcml2YXRlIERlZmF1bHRTdGF0ZSBtRGVmYXVsdFN0YXRlID0gbmV3IERlZmF1bHRTdGF0ZSgpOwotICAgICAgICBwcml2YXRlIFAycE5vdFN1cHBvcnRlZFN0YXRlIG1QMnBOb3RTdXBwb3J0ZWRTdGF0ZSA9IG5ldyBQMnBOb3RTdXBwb3J0ZWRTdGF0ZSgpOwotICAgICAgICBwcml2YXRlIFAycERpc2FibGluZ1N0YXRlIG1QMnBEaXNhYmxpbmdTdGF0ZSA9IG5ldyBQMnBEaXNhYmxpbmdTdGF0ZSgpOwotICAgICAgICBwcml2YXRlIFAycERpc2FibGVkU3RhdGUgbVAycERpc2FibGVkU3RhdGUgPSBuZXcgUDJwRGlzYWJsZWRTdGF0ZSgpOwotICAgICAgICBwcml2YXRlIFAycEVuYWJsaW5nU3RhdGUgbVAycEVuYWJsaW5nU3RhdGUgPSBuZXcgUDJwRW5hYmxpbmdTdGF0ZSgpOwotICAgICAgICBwcml2YXRlIFAycEVuYWJsZWRTdGF0ZSBtUDJwRW5hYmxlZFN0YXRlID0gbmV3IFAycEVuYWJsZWRTdGF0ZSgpOwotICAgICAgICAvLyBJbmFjdGl2ZSBpcyB3aGVuIHAycCBpcyBlbmFibGVkIHdpdGggbm8gY29ubmVjdGl2aXR5Ci0gICAgICAgIHByaXZhdGUgSW5hY3RpdmVTdGF0ZSBtSW5hY3RpdmVTdGF0ZSA9IG5ldyBJbmFjdGl2ZVN0YXRlKCk7Ci0gICAgICAgIHByaXZhdGUgR3JvdXBDcmVhdGluZ1N0YXRlIG1Hcm91cENyZWF0aW5nU3RhdGUgPSBuZXcgR3JvdXBDcmVhdGluZ1N0YXRlKCk7Ci0gICAgICAgIHByaXZhdGUgVXNlckF1dGhvcml6aW5nSW52aXRlUmVxdWVzdFN0YXRlIG1Vc2VyQXV0aG9yaXppbmdJbnZpdGVSZXF1ZXN0U3RhdGUKLSAgICAgICAgICAgICAgICA9IG5ldyBVc2VyQXV0aG9yaXppbmdJbnZpdGVSZXF1ZXN0U3RhdGUoKTsKLSAgICAgICAgcHJpdmF0ZSBVc2VyQXV0aG9yaXppbmdOZWdvdGlhdGlvblJlcXVlc3RTdGF0ZSBtVXNlckF1dGhvcml6aW5nTmVnb3RpYXRpb25SZXF1ZXN0U3RhdGUKLSAgICAgICAgICAgICAgICA9IG5ldyBVc2VyQXV0aG9yaXppbmdOZWdvdGlhdGlvblJlcXVlc3RTdGF0ZSgpOwotICAgICAgICBwcml2YXRlIFByb3Zpc2lvbkRpc2NvdmVyeVN0YXRlIG1Qcm92aXNpb25EaXNjb3ZlcnlTdGF0ZSA9IG5ldyBQcm92aXNpb25EaXNjb3ZlcnlTdGF0ZSgpOwotICAgICAgICBwcml2YXRlIEdyb3VwTmVnb3RpYXRpb25TdGF0ZSBtR3JvdXBOZWdvdGlhdGlvblN0YXRlID0gbmV3IEdyb3VwTmVnb3RpYXRpb25TdGF0ZSgpOwotICAgICAgICBwcml2YXRlIEZyZXF1ZW5jeUNvbmZsaWN0U3RhdGUgbUZyZXF1ZW5jeUNvbmZsaWN0U3RhdGUgPW5ldyBGcmVxdWVuY3lDb25mbGljdFN0YXRlKCk7Ci0KLSAgICAgICAgcHJpdmF0ZSBHcm91cENyZWF0ZWRTdGF0ZSBtR3JvdXBDcmVhdGVkU3RhdGUgPSBuZXcgR3JvdXBDcmVhdGVkU3RhdGUoKTsKLSAgICAgICAgcHJpdmF0ZSBVc2VyQXV0aG9yaXppbmdKb2luU3RhdGUgbVVzZXJBdXRob3JpemluZ0pvaW5TdGF0ZSA9IG5ldyBVc2VyQXV0aG9yaXppbmdKb2luU3RhdGUoKTsKLSAgICAgICAgcHJpdmF0ZSBPbmdvaW5nR3JvdXBSZW1vdmFsU3RhdGUgbU9uZ29pbmdHcm91cFJlbW92YWxTdGF0ZSA9IG5ldyBPbmdvaW5nR3JvdXBSZW1vdmFsU3RhdGUoKTsKLQotICAgICAgICBwcml2YXRlIFdpZmlOYXRpdmUgbVdpZmlOYXRpdmUgPSBuZXcgV2lmaU5hdGl2ZShtSW50ZXJmYWNlKTsKLSAgICAgICAgcHJpdmF0ZSBXaWZpTW9uaXRvciBtV2lmaU1vbml0b3IgPSBuZXcgV2lmaU1vbml0b3IodGhpcywgbVdpZmlOYXRpdmUpOwotCi0gICAgICAgIHByaXZhdGUgZmluYWwgV2lmaVAycERldmljZUxpc3QgbVBlZXJzID0gbmV3IFdpZmlQMnBEZXZpY2VMaXN0KCk7Ci0gICAgICAgIC8qIER1cmluZyBhIGNvbm5lY3Rpb24sIHN1cHBsaWNhbnQgY2FuIHRlbGwgdXMgdGhhdCBhIGRldmljZSB3YXMgbG9zdC4gRnJvbSBhIHN1cHBsaWNhbnQncwotICAgICAgICAgKiBwZXJzcGVjdGl2ZSwgdGhlIGRpc2NvdmVyeSBzdG9wcyBkdXJpbmcgY29ubmVjdGlvbiBhbmQgaXQgcHVyZ2VzIGRldmljZSBzaW5jZSBpdCBkb2VzCi0gICAgICAgICAqIG5vdCBnZXQgbGF0ZXN0IHVwZGF0ZXMgYWJvdXQgdGhlIGRldmljZSB3aXRob3V0IGJlaW5nIGluIGRpc2NvdmVyeSBzdGF0ZS4KLSAgICAgICAgICoKLSAgICAgICAgICogRnJvbSB0aGUgZnJhbWV3b3JrIHBlcnNwZWN0aXZlLCB0aGUgZGV2aWNlIGlzIHN0aWxsIHRoZXJlIHNpbmNlIHdlIGFyZSBjb25uZWN0aW5nIG9yCi0gICAgICAgICAqIGNvbm5lY3RlZCB0byBpdC4gc28gd2Uga2VlcCB0aGVzZSBkZXZpY2VzIGluIGEgc2VwYXJhdGUgbGlzdCwgc28gdGhhdCB0aGV5IGFyZSByZW1vdmVkCi0gICAgICAgICAqIHdoZW4gY29ubmVjdGlvbiBpcyBjYW5jZWxsZWQgb3IgbG9zdAotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBXaWZpUDJwRGV2aWNlTGlzdCBtUGVlcnNMb3N0RHVyaW5nQ29ubmVjdGlvbiA9IG5ldyBXaWZpUDJwRGV2aWNlTGlzdCgpOwotICAgICAgICBwcml2YXRlIGZpbmFsIFdpZmlQMnBHcm91cExpc3QgbUdyb3VwcyA9IG5ldyBXaWZpUDJwR3JvdXBMaXN0KG51bGwsCi0gICAgICAgICAgICAgICAgbmV3IEdyb3VwRGVsZXRlTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uRGVsZXRlR3JvdXAoaW50IG5ldElkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiY2FsbGVkIG9uRGVsZXRlR3JvdXAoKSBuZXRJZD0iICsgbmV0SWQpOwotICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnJlbW92ZU5ldHdvcmsobmV0SWQpOwotICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNhdmVDb25maWcoKTsKLSAgICAgICAgICAgICAgICBzZW5kUDJwUGVyc2lzdGVudEdyb3Vwc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgV2lmaVAycEluZm8gbVdpZmlQMnBJbmZvID0gbmV3IFdpZmlQMnBJbmZvKCk7Ci0gICAgICAgIHByaXZhdGUgV2lmaVAycEdyb3VwIG1Hcm91cDsKLQotICAgICAgICAvLyBTYXZlZCBXaWZpUDJwQ29uZmlnIGZvciBhbiBvbmdvaW5nIHBlZXIgY29ubmVjdGlvbi4gVGhpcyB3aWxsIG5ldmVyIGJlIG51bGwuCi0gICAgICAgIC8vIFRoZSBkZXZpY2VBZGRyZXNzIHdpbGwgYmUgYW4gZW1wdHkgc3RyaW5nIHdoZW4gdGhlIGRldmljZSBpcyBpbmFjdGl2ZQotICAgICAgICAvLyBvciBpZiBpdCBpcyBjb25uZWN0ZWQgd2l0aG91dCBhbnkgb25nb2luZyBqb2luIHJlcXVlc3QKLSAgICAgICAgcHJpdmF0ZSBXaWZpUDJwQ29uZmlnIG1TYXZlZFBlZXJDb25maWcgPSBuZXcgV2lmaVAycENvbmZpZygpOwotCi0gICAgICAgIC8vIFNhdmVkIFdpZmlQMnBHcm91cCBmcm9tIGludml0YXRpb24gcmVxdWVzdAotICAgICAgICBwcml2YXRlIFdpZmlQMnBHcm91cCBtU2F2ZWRQMnBHcm91cDsKLQotICAgICAgICBQMnBTdGF0ZU1hY2hpbmUoU3RyaW5nIG5hbWUsIGJvb2xlYW4gcDJwU3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICBzdXBlcihuYW1lKTsKLQotICAgICAgICAgICAgYWRkU3RhdGUobURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RhdGUobVAycE5vdFN1cHBvcnRlZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtUDJwRGlzYWJsaW5nU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1QMnBEaXNhYmxlZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtUDJwRW5hYmxpbmdTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RhdGUobVAycEVuYWJsZWRTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1JbmFjdGl2ZVN0YXRlLCBtUDJwRW5hYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobUdyb3VwQ3JlYXRpbmdTdGF0ZSwgbVAycEVuYWJsZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtVXNlckF1dGhvcml6aW5nSW52aXRlUmVxdWVzdFN0YXRlLCBtR3JvdXBDcmVhdGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Vc2VyQXV0aG9yaXppbmdOZWdvdGlhdGlvblJlcXVlc3RTdGF0ZSwgbUdyb3VwQ3JlYXRpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtUHJvdmlzaW9uRGlzY292ZXJ5U3RhdGUsIG1Hcm91cENyZWF0aW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobUdyb3VwTmVnb3RpYXRpb25TdGF0ZSwgbUdyb3VwQ3JlYXRpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtRnJlcXVlbmN5Q29uZmxpY3RTdGF0ZSwgbUdyb3VwQ3JlYXRpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Hcm91cENyZWF0ZWRTdGF0ZSwgbVAycEVuYWJsZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtVXNlckF1dGhvcml6aW5nSm9pblN0YXRlLCBtR3JvdXBDcmVhdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobU9uZ29pbmdHcm91cFJlbW92YWxTdGF0ZSwgbUdyb3VwQ3JlYXRlZFN0YXRlKTsKLQotICAgICAgICAgICAgaWYgKHAycFN1cHBvcnRlZCkgewotICAgICAgICAgICAgICAgIHNldEluaXRpYWxTdGF0ZShtUDJwRGlzYWJsZWRTdGF0ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNldEluaXRpYWxTdGF0ZShtUDJwTm90U3VwcG9ydGVkU3RhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0TG9nUmVjU2l6ZSg1MCk7Ci0gICAgICAgICAgICBzZXRMb2dPbmx5VHJhbnNpdGlvbnModHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgIGNsYXNzIERlZmF1bHRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFzeW5jQ2hhbm5lbC5DTURfQ0hBTk5FTF9IQUxGX0NPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSBBc3luY0NoYW5uZWwuU1RBVFVTX1NVQ0NFU1NGVUwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkZ1bGwgY29ubmVjdGlvbiB3aXRoIFdpZmlTdGF0ZU1hY2hpbmUgZXN0YWJsaXNoZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ2hhbm5lbCA9IChBc3luY0NoYW5uZWwpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRnVsbCBjb25uZWN0aW9uIGZhaWx1cmUsIGVycm9yID0gIiArIG1lc3NhZ2UuYXJnMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaUNoYW5uZWwgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBBc3luY0NoYW5uZWwuQ01EX0NIQU5ORUxfRElTQ09OTkVDVEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IEFzeW5jQ2hhbm5lbC5TVEFUVVNfU0VORF9VTlNVQ0NFU1NGVUwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlNlbmQgZmFpbGVkLCBjbGllbnQgY29ubmVjdGlvbiBsb3N0Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJDbGllbnQgY29ubmVjdGlvbiBsb3N0IHdpdGggcmVhc29uOiAiICsgbWVzc2FnZS5hcmcxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtV2lmaUNoYW5uZWwgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgQXN5bmNDaGFubmVsLkNNRF9DSEFOTkVMX0ZVTExfQ09OTkVDVElPTjoKLSAgICAgICAgICAgICAgICAgICAgQXN5bmNDaGFubmVsIGFjID0gbmV3IEFzeW5jQ2hhbm5lbCgpOwotICAgICAgICAgICAgICAgICAgICBhYy5jb25uZWN0KG1Db250ZXh0LCBnZXRIYW5kbGVyKCksIG1lc3NhZ2UucmVwbHlUbyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQkxPQ0tfRElTQ09WRVJZOgotICAgICAgICAgICAgICAgICAgICBtRGlzY292ZXJ5QmxvY2tlZCA9IChtZXNzYWdlLmFyZzEgPT0gRU5BQkxFRCA/IHRydWUgOiBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFsd2F5cyByZXNldCB0aGlzIC0gd2Ugd2VudCB0byBhIHN0YXRlIHRoYXQgZG9lc24ndCBzdXBwb3J0IGRpc2NvdmVyeSBzbwotICAgICAgICAgICAgICAgICAgICAvLyBpdCB3b3VsZCBoYXZlIHN0b3BwZWQgcmVnYXJkbGVzcwotICAgICAgICAgICAgICAgICAgICBtRGlzY292ZXJ5UG9zdHBvbmVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtRGlzY292ZXJ5QmxvY2tlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZU1hY2hpbmUgbSA9IChTdGF0ZU1hY2hpbmUpbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5zZW5kTWVzc2FnZShtZXNzYWdlLmFyZzIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJ1bmFibGUgdG8gc2VuZCBCTE9DS19ESVNDT1ZFUlkgcmVzcG9uc2U6ICIgKyBlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1BFRVJTOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9QRUVSU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RPUF9ESVNDT1ZFUlk6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUT1BfRElTQ09WRVJZX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9TRVJWSUNFUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfU0VSVklDRVNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1RfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNBTkNFTF9DT05ORUNUOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DQU5DRUxfQ09OTkVDVF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ1JFQVRFX0dST1VQOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DUkVBVEVfR1JPVVBfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0dST1VQX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5BRERfTE9DQUxfU0VSVklDRToKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQUREX0xPQ0FMX1NFUlZJQ0VfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9MT0NBTF9TRVJWSUNFOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRU1PVkVfTE9DQUxfU0VSVklDRV9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ0xFQVJfTE9DQUxfU0VSVklDRVM6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX0xPQ0FMX1NFUlZJQ0VTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5BRERfU0VSVklDRV9SRVFVRVNUOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5BRERfU0VSVklDRV9SRVFVRVNUX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRU1PVkVfU0VSVklDRV9SRVFVRVNUOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9TRVJWSUNFX1JFUVVFU1RfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX1NFUlZJQ0VfUkVRVUVTVFM6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQ0xFQVJfU0VSVklDRV9SRVFVRVNUU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU0VUX0RFVklDRV9OQU1FOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfREVWSUNFX05BTUVfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkRFTEVURV9QRVJTSVNURU5UX0dST1VQOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ERUxFVEVfUEVSU0lTVEVOVF9HUk9VUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TRVRfV0ZEX0lORk86Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9XRkRfSU5GT19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVRVUVTVF9QRUVSUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVTUE9OU0VfUEVFUlMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZmlQMnBEZXZpY2VMaXN0KG1QZWVycykpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFUVVFU1RfQ09OTkVDVElPTl9JTkZPOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRVNQT05TRV9DT05ORUNUSU9OX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZmlQMnBJbmZvKG1XaWZpUDJwSW5mbykpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFUVVFU1RfR1JPVVBfSU5GTzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVTUE9OU0VfR1JPVVBfSU5GTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtR3JvdXAgIT0gbnVsbCA/IG5ldyBXaWZpUDJwR3JvdXAobUdyb3VwKSA6IG51bGwpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFUVVFU1RfUEVSU0lTVEVOVF9HUk9VUF9JTkZPOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRVNQT05TRV9QRVJTSVNURU5UX0dST1VQX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZmlQMnBHcm91cExpc3QobUdyb3VwcywgbnVsbCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX1dQUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RBUlRfV1BTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlCi0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfSU5WSVRBVElPTl9SRVNVTFRfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TQ0FOX1JFU1VMVFNfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19DT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5BVVRIRU5USUNBVElPTl9GQUlMVVJFX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuV1BTX1NVQ0NFU1NfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5XUFNfRkFJTF9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19PVkVSTEFQX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuV1BTX1RJTUVPVVRfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfUkVNT1ZFRF9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9ERVZJQ0VfRk9VTkRfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfREVWSUNFX0xPU1RfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfRklORF9TVE9QUEVEX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1NFUlZfRElTQ19SRVNQX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgUEVFUl9DT05ORUNUSU9OX1VTRVJfQUNDRVBUOgotICAgICAgICAgICAgICAgIGNhc2UgUEVFUl9DT05ORUNUSU9OX1VTRVJfUkVKRUNUOgotICAgICAgICAgICAgICAgIGNhc2UgRElTQ09OTkVDVF9XSUZJX1JFU1BPTlNFOgotICAgICAgICAgICAgICAgIGNhc2UgRFJPUF9XSUZJX1VTRVJfQUNDRVBUOgotICAgICAgICAgICAgICAgIGNhc2UgRFJPUF9XSUZJX1VTRVJfUkVKRUNUOgotICAgICAgICAgICAgICAgIGNhc2UgR1JPVVBfQ1JFQVRJTkdfVElNRURfT1VUOgotICAgICAgICAgICAgICAgIGNhc2UgRElTQUJMRV9QMlBfVElNRURfT1VUOgotICAgICAgICAgICAgICAgIGNhc2UgRGhjcFN0YXRlTWFjaGluZS5DTURfUFJFX0RIQ1BfQUNUSU9OOgotICAgICAgICAgICAgICAgIGNhc2UgRGhjcFN0YXRlTWFjaGluZS5DTURfUE9TVF9ESENQX0FDVElPTjoKLSAgICAgICAgICAgICAgICBjYXNlIERoY3BTdGF0ZU1hY2hpbmUuQ01EX09OX1FVSVQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX0ZBSUxVUkVfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBTRVRfTUlSQUNBU1RfTU9ERToKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX0xJU1RFTjoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUT1BfTElTVEVOOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU0VUX0NIQU5ORUw6Ci0gICAgICAgICAgICAgICAgY2FzZSBTRVRfQ09VTlRSWV9DT0RFOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0VOQUJMRV9QMlA6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBpcyBsYXp5IGFuZCBoYXMgbm8gcmVzcG9uc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9ESVNBQkxFX1AyUF9SRVE6Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGVuZCB1cCBoYW5kbGluZyBpbiBkZWZhdWx0LCBwMnAgaXMgbm90IGVuYWJsZWQKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlDaGFubmVsLnNlbmRNZXNzYWdlKFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0RJU0FCTEVfUDJQX1JTUCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAvKiB1bmV4cGVjdGVkIGdyb3VwIGNyZWF0ZWQsIHJlbW92ZSAqLwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX1NUQVJURURfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIG1Hcm91cCA9IChXaWZpUDJwR3JvdXApIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmV4cGVjdGVkIGdyb3VwIGNyZWF0aW9uLCByZW1vdmUgIiArIG1Hcm91cCk7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycEdyb3VwUmVtb3ZlKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8vIEEgZ3JvdXAgZm9ybWF0aW9uIGZhaWx1cmUgaXMgYWx3YXlzIGZvbGxvd2VkIGJ5Ci0gICAgICAgICAgICAgICAgLy8gYSBncm91cCByZW1vdmVkIGV2ZW50LiBGbHVzaGluZyB0aGluZ3MgYXQgZ3JvdXAgZm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgLy8gZmFpbHVyZSBjYXVzZXMgc3VwcGxpY2FudCBpc3N1ZXMuIElnbm9yZSByaWdodCBub3cuCi0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfRk9STUFUSU9OX0ZBSUxVUkVfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIlVuaGFuZGxlZCBtZXNzYWdlICIgKyBtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBQMnBOb3RTdXBwb3J0ZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfUEVFUlM6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1BFRVJTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUT1BfRElTQ09WRVJZOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVE9QX0RJU0NPVkVSWV9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9TRVJWSUNFUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfU0VSVklDRVNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ09OTkVDVDoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ09OTkVDVF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DQU5DRUxfQ09OTkVDVDoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ0FOQ0VMX0NPTk5FQ1RfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DUkVBVEVfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNSRUFURV9HUk9VUF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRU1PVkVfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9HUk9VUF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5BRERfTE9DQUxfU0VSVklDRToKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQUREX0xPQ0FMX1NFUlZJQ0VfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0xPQ0FMX1NFUlZJQ0U6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9MT0NBTF9TRVJWSUNFX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX0xPQ0FMX1NFUlZJQ0VTOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DTEVBUl9MT0NBTF9TRVJWSUNFU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5BRERfU0VSVklDRV9SRVFVRVNUOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5BRERfU0VSVklDRV9SRVFVRVNUX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9TRVJWSUNFX1JFUVVFU1Q6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX1NFUlZJQ0VfUkVRVUVTVF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DTEVBUl9TRVJWSUNFX1JFUVVFU1RTOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX1NFUlZJQ0VfUkVRVUVTVFNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU0VUX0RFVklDRV9OQU1FOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfREVWSUNFX05BTUVfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuREVMRVRFX1BFUlNJU1RFTlRfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRFTEVURV9QRVJTSVNURU5UX0dST1VQLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU0VUX1dGRF9JTkZPOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfV0ZEX0lORk9fRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RBUlRfV1BTOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVEFSVF9XUFNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RBUlRfTElTVEVOOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVEFSVF9MSVNURU5fRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RPUF9MSVNURU46Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUT1BfTElTVEVOX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgUDJwRGlzYWJsaW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKERJU0FCTEVfUDJQX1RJTUVEX09VVCwKLSAgICAgICAgICAgICAgICAgICAgKyttRGlzYWJsZVAycFRpbWVvdXRJbmRleCwgMCksIERJU0FCTEVfUDJQX1dBSVRfVElNRV9NUyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0RJU0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoInAycCBzb2NrZXQgY29ubmVjdGlvbiBsb3N0Iik7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtUDJwRGlzYWJsZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfRU5BQkxFX1AyUDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0RJU0FCTEVfUDJQX1JFUToKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIERJU0FCTEVfUDJQX1RJTUVEX09VVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Hcm91cENyZWF0aW5nVGltZW91dEluZGV4ID09IG1lc3NhZ2UuYXJnMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiUDJwIGRpc2FibGUgdGltZWQgb3V0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVAycERpc2FibGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7Ci0gICAgICAgICAgICBtV2lmaUNoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVN0YXRlTWFjaGluZS5DTURfRElTQUJMRV9QMlBfUlNQKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFAycERpc2FibGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0VOQUJMRV9QMlA6Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnNldEludGVyZmFjZVVwKG1JbnRlcmZhY2UpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlVuYWJsZSB0byBjaGFuZ2UgaW50ZXJmYWNlIHNldHRpbmdzOiAiICsgcmUpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlVuYWJsZSB0byBjaGFuZ2UgaW50ZXJmYWNlIHNldHRpbmdzOiAiICsgaWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTW9uaXRvci5zdGFydE1vbml0b3JpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1QMnBFbmFibGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBQMnBFbmFibGluZ1N0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlAycCBzb2NrZXQgY29ubmVjdGlvbiBzdWNjZXNzZnVsIik7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0RJU0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIlAycCBzb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1QMnBEaXNhYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9FTkFCTEVfUDJQOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfRElTQUJMRV9QMlBfUkVROgotICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgUDJwRW5hYmxlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgICAgICBzZW5kUDJwU3RhdGVDaGFuZ2VkQnJvYWRjYXN0KHRydWUpOwotICAgICAgICAgICAgbU5ldHdvcmtJbmZvLnNldElzQXZhaWxhYmxlKHRydWUpOwotICAgICAgICAgICAgc2VuZFAycENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICBpbml0aWFsaXplUDJwU2V0dGluZ3MoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfRElTQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5leHBlY3RlZCBsb3NzIG9mIHAycCBzb2NrZXQgY29ubmVjdGlvbiIpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVAycERpc2FibGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0VOQUJMRV9QMlA6Ci0gICAgICAgICAgICAgICAgICAgIC8vTm90aGluZyB0byBkbwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0RJU0FCTEVfUDJQX1JFUToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1QZWVycy5jbGVhcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Hcm91cHMuY2xlYXIoKSkgc2VuZFAycFBlcnNpc3RlbnRHcm91cHNDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbVdpZmlNb25pdG9yLnN0b3BNb25pdG9yaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtUDJwRGlzYWJsaW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNFVF9ERVZJQ0VfTkFNRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFdpZmlQMnBEZXZpY2UgZCA9IChXaWZpUDJwRGV2aWNlKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGQgIT0gbnVsbCAmJiBzZXRBbmRQZXJzaXN0RGV2aWNlTmFtZShkLmRldmljZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJzZXQgZGV2aWNlIG5hbWUgIiArIGQuZGV2aWNlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfREVWSUNFX05BTUVfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9ERVZJQ0VfTkFNRV9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkVSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TRVRfV0ZEX0lORk86Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBXaWZpUDJwV2ZkSW5mbyBkID0gKFdpZmlQMnBXZmRJbmZvKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGQgIT0gbnVsbCAmJiBzZXRXZmRJbmZvKGQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfV0ZEX0lORk9fU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9XRkRfSU5GT19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkVSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBCTE9DS19ESVNDT1ZFUlk6Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYmxvY2tlZCA9IChtZXNzYWdlLmFyZzEgPT0gRU5BQkxFRCA/IHRydWUgOiBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtRGlzY292ZXJ5QmxvY2tlZCA9PSBibG9ja2VkKSBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgbURpc2NvdmVyeUJsb2NrZWQgPSBibG9ja2VkOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tlZCAmJiBtRGlzY292ZXJ5U3RhcnRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwU3RvcEZpbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EaXNjb3ZlcnlQb3N0cG9uZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2tlZCAmJiBtRGlzY292ZXJ5UG9zdHBvbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGlzY292ZXJ5UG9zdHBvbmVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBGaW5kKERJU0NPVkVSX1RJTUVPVVRfUyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGVNYWNoaW5lIG0gPSAoU3RhdGVNYWNoaW5lKW1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uc2VuZE1lc3NhZ2UobWVzc2FnZS5hcmcyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgidW5hYmxlIHRvIHNlbmQgQkxPQ0tfRElTQ09WRVJZIHJlc3BvbnNlOiAiICsgZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9QRUVSUzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1EaXNjb3ZlcnlCbG9ja2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9QRUVSU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90IHNlbmQgc2VydmljZSBkaXNjb3ZlcnkgcmVxdWVzdCB3aGlsZSBub3JtYWwgZmluZCBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIGNsZWFyU3VwcGxpY2FudFNlcnZpY2VSZXF1ZXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBGaW5kKERJU0NPVkVSX1RJTUVPVVRfUykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1BFRVJTX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kUDJwRGlzY292ZXJ5Q2hhbmdlZEJyb2FkY2FzdCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1BFRVJTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuRVJST1IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0ZJTkRfU1RPUFBFRF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgc2VuZFAycERpc2NvdmVyeUNoYW5nZWRCcm9hZGNhc3QoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUT1BfRElTQ09WRVJZOgotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwU3RvcEZpbmQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RPUF9ESVNDT1ZFUllfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUT1BfRElTQ09WRVJZX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuRVJST1IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfU0VSVklDRVM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtRGlzY292ZXJ5QmxvY2tlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfU0VSVklDRVNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBkaXNjb3ZlciBzZXJ2aWNlcyIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXVwZGF0ZVN1cHBsaWNhbnRTZXJ2aWNlUmVxdWVzdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9TRVJWSUNFU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLk5PX1NFUlZJQ0VfUkVRVUVTVFMpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycEZpbmQoRElTQ09WRVJfVElNRU9VVF9TKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfU0VSVklDRVNfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1NFUlZJQ0VTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuRVJST1IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0RFVklDRV9GT1VORF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgV2lmaVAycERldmljZSBkZXZpY2UgPSAoV2lmaVAycERldmljZSkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtVGhpc0RldmljZS5kZXZpY2VBZGRyZXNzLmVxdWFscyhkZXZpY2UuZGV2aWNlQWRkcmVzcykpIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBtUGVlcnMudXBkYXRlU3VwcGxpY2FudERldGFpbHMoZGV2aWNlKTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9ERVZJQ0VfTE9TVF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgZGV2aWNlID0gKFdpZmlQMnBEZXZpY2UpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICAvLyBHZXRzIGN1cnJlbnQgZGV0YWlscyBmb3IgdGhlIG9uZSByZW1vdmVkCi0gICAgICAgICAgICAgICAgICAgIGRldmljZSA9IG1QZWVycy5yZW1vdmUoZGV2aWNlLmRldmljZUFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGV2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkFERF9MT0NBTF9TRVJWSUNFOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgYWRkIHNlcnZpY2UiKTsKLSAgICAgICAgICAgICAgICAgICAgV2lmaVAycFNlcnZpY2VJbmZvIHNlcnZJbmZvID0gKFdpZmlQMnBTZXJ2aWNlSW5mbyltZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFkZExvY2FsU2VydmljZShtZXNzYWdlLnJlcGx5VG8sIHNlcnZJbmZvKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQUREX0xPQ0FMX1NFUlZJQ0VfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkFERF9MT0NBTF9TRVJWSUNFX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRU1PVkVfTE9DQUxfU0VSVklDRToKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIHJlbW92ZSBzZXJ2aWNlIik7Ci0gICAgICAgICAgICAgICAgICAgIHNlcnZJbmZvID0gKFdpZmlQMnBTZXJ2aWNlSW5mbyltZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWxTZXJ2aWNlKG1lc3NhZ2UucmVwbHlUbywgc2VydkluZm8pOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRU1PVkVfTE9DQUxfU0VSVklDRV9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX0xPQ0FMX1NFUlZJQ0VTOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgY2xlYXIgc2VydmljZSIpOwotICAgICAgICAgICAgICAgICAgICBjbGVhckxvY2FsU2VydmljZXMobWVzc2FnZS5yZXBseVRvKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ0xFQVJfTE9DQUxfU0VSVklDRVNfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5BRERfU0VSVklDRV9SRVFVRVNUOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgYWRkIHNlcnZpY2UgcmVxdWVzdCIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZFNlcnZpY2VSZXF1ZXN0KG1lc3NhZ2UucmVwbHlUbywgKFdpZmlQMnBTZXJ2aWNlUmVxdWVzdCltZXNzYWdlLm9iaikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkFERF9TRVJWSUNFX1JFUVVFU1RfRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkFERF9TRVJWSUNFX1JFUVVFU1RfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRU1PVkVfU0VSVklDRV9SRVFVRVNUOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgcmVtb3ZlIHNlcnZpY2UgcmVxdWVzdCIpOwotICAgICAgICAgICAgICAgICAgICByZW1vdmVTZXJ2aWNlUmVxdWVzdChtZXNzYWdlLnJlcGx5VG8sIChXaWZpUDJwU2VydmljZVJlcXVlc3QpbWVzc2FnZS5vYmopOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRU1PVkVfU0VSVklDRV9SRVFVRVNUX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ0xFQVJfU0VSVklDRV9SRVFVRVNUUzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGNsZWFyIHNlcnZpY2UgcmVxdWVzdCIpOwotICAgICAgICAgICAgICAgICAgICBjbGVhclNlcnZpY2VSZXF1ZXN0cyhtZXNzYWdlLnJlcGx5VG8pOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DTEVBUl9TRVJWSUNFX1JFUVVFU1RTX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1NFUlZfRElTQ19SRVNQX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgcmVjZWl2ZSBzZXJ2aWNlIHJlc3BvbnNlIik7Ci0gICAgICAgICAgICAgICAgICAgIExpc3Q8V2lmaVAycFNlcnZpY2VSZXNwb25zZT4gc2RSZXNwTGlzdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoTGlzdDxXaWZpUDJwU2VydmljZVJlc3BvbnNlPikgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoV2lmaVAycFNlcnZpY2VSZXNwb25zZSByZXNwIDogc2RSZXNwTGlzdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycERldmljZSBkZXYgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1QZWVycy5nZXQocmVzcC5nZXRTcmNEZXZpY2UoKS5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Auc2V0U3JjRGV2aWNlKGRldik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kU2VydmljZVJlc3BvbnNlKHJlc3ApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuREVMRVRFX1BFUlNJU1RFTlRfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGRlbGV0ZSBwZXJzaXN0ZW50IGdyb3VwIik7Ci0gICAgICAgICAgICAgICAgICAgbUdyb3Vwcy5yZW1vdmUobWVzc2FnZS5hcmcxKTsKLSAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ERUxFVEVfUEVSU0lTVEVOVF9HUk9VUF9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU0VUX01JUkFDQVNUX01PREU6Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldE1pcmFjYXN0TW9kZShtZXNzYWdlLmFyZzEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX0xJU1RFTjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIHN0YXJ0IGxpc3RlbiBtb2RlIik7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycEZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBFeHRMaXN0ZW4odHJ1ZSwgNTAwLCA1MDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVEFSVF9MSVNURU5fU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX0xJU1RFTl9GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RPUF9MSVNURU46Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBzdG9wIGxpc3RlbiBtb2RlIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBFeHRMaXN0ZW4oZmFsc2UsIDAsIDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVE9QX0xJU1RFTl9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RPUF9MSVNURU5fRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBGbHVzaCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNFVF9DSEFOTkVMOgotICAgICAgICAgICAgICAgICAgICBCdW5kbGUgcDJwQ2hhbm5lbHMgPSAoQnVuZGxlKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxjID0gcDJwQ2hhbm5lbHMuZ2V0SW50KCJsYyIsIDApOwotICAgICAgICAgICAgICAgICAgICBpbnQgb2MgPSBwMnBDaGFubmVscy5nZXRJbnQoIm9jIiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBzZXQgbGlzdGVuIGFuZCBvcGVyYXRpbmcgY2hhbm5lbCIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwU2V0Q2hhbm5lbChsYywgb2MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfQ0hBTk5FTF9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX0NIQU5ORUxfRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFNFVF9DT1VOVFJZX0NPREU6Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb3VudHJ5Q29kZSA9IChTdHJpbmcpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlLnRvVXBwZXJDYXNlKExvY2FsZS5ST09UKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1MYXN0U2V0Q291bnRyeUNvZGUgPT0gbnVsbCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlLmVxdWFscyhtTGFzdFNldENvdW50cnlDb2RlKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnNldENvdW50cnlDb2RlKGNvdW50cnlDb2RlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0U2V0Q291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7Ci0gICAgICAgICAgICBzZW5kUDJwU3RhdGVDaGFuZ2VkQnJvYWRjYXN0KGZhbHNlKTsKLSAgICAgICAgICAgIG1OZXR3b3JrSW5mby5zZXRJc0F2YWlsYWJsZShmYWxzZSk7Ci0KLSAgICAgICAgICAgIG1MYXN0U2V0Q291bnRyeUNvZGUgPSBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgSW5hY3RpdmVTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ09OTkVDVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIHNlbmRpbmcgY29ubmVjdCIpOwotICAgICAgICAgICAgICAgICAgICBXaWZpUDJwQ29uZmlnIGNvbmZpZyA9IChXaWZpUDJwQ29uZmlnKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29uZmlnSW52YWxpZChjb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJEcm9wcGluZyBjb25uZWN0IHJlcXVlc2V0ICIgKyBjb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ09OTkVDVF9GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtQXV0b25vbW91c0dyb3VwID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycFN0b3BGaW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWludm9rZVBlcnNpc3RlbnRHcm91cChjb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwTmVnb3RpYXRpb25TdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVByb3Zpc2lvbkRpc2NvdmVyeVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnID0gY29uZmlnOwotICAgICAgICAgICAgICAgICAgICBtUGVlcnMudXBkYXRlU3RhdHVzKG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcywgV2lmaVAycERldmljZS5JTlZJVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DT05ORUNUX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RPUF9ESVNDT1ZFUlk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBTdG9wRmluZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGRpc2NvdmVyeSBzdG9wcyBpbiBpbmFjdGl2ZSBzdGF0ZSwgZmx1c2ggdG8gY2xlYXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXRlIHBlZXIgZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwRmx1c2goKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlRGlzY1JlcUlkID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUT1BfRElTQ09WRVJZX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVE9QX0RJU0NPVkVSWV9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkVSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HT19ORUdPVElBVElPTl9SRVFVRVNUX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBjb25maWcgPSAoV2lmaVAycENvbmZpZykgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbmZpZ0ludmFsaWQoY29uZmlnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRHJvcHBpbmcgR08gbmVnIHJlcXVlc3QgIiArIGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnID0gY29uZmlnOwotICAgICAgICAgICAgICAgICAgICBtQXV0b25vbW91c0dyb3VwID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIG1Kb2luRXhpc3RpbmdHcm91cCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVVzZXJBdXRob3JpemluZ05lZ290aWF0aW9uUmVxdWVzdFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfSU5WSVRBVElPTl9SRUNFSVZFRF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgV2lmaVAycEdyb3VwIGdyb3VwID0gKFdpZmlQMnBHcm91cCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIFdpZmlQMnBEZXZpY2Ugb3duZXIgPSBncm91cC5nZXRPd25lcigpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChvd25lciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJZ25vcmVkIGludml0YXRpb24gZnJvbSBudWxsIG93bmVyIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IG5ldyBXaWZpUDJwQ29uZmlnKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kZXZpY2VBZGRyZXNzID0gZ3JvdXAuZ2V0T3duZXIoKS5kZXZpY2VBZGRyZXNzOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbmZpZ0ludmFsaWQoY29uZmlnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRHJvcHBpbmcgaW52aXRhdGlvbiByZXF1ZXN0ICIgKyBjb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZyA9IGNvbmZpZzsKLQotICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGlmIHdlIGhhdmUgdGhlIG93bmVyIGluIHBlZXIgbGlzdCBhbmQgdXNlIGFwcHJvcHJpYXRlCi0gICAgICAgICAgICAgICAgICAgIC8vd3BzIG1ldGhvZC4gRGVmYXVsdCBpcyB0byB1c2UgUEJDLgotICAgICAgICAgICAgICAgICAgICBpZiAoKG93bmVyID0gbVBlZXJzLmdldChvd25lci5kZXZpY2VBZGRyZXNzKSkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG93bmVyLndwc1BiY1N1cHBvcnRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy53cHMuc2V0dXAgPSBXcHNJbmZvLlBCQzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3duZXIud3BzS2V5cGFkU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLndwcy5zZXR1cCA9IFdwc0luZm8uS0VZUEFEOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvd25lci53cHNEaXNwbGF5U3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLndwcy5zZXR1cCA9IFdwc0luZm8uRElTUExBWTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1BdXRvbm9tb3VzR3JvdXAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgbUpvaW5FeGlzdGluZ0dyb3VwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Vc2VyQXV0aG9yaXppbmdJbnZpdGVSZXF1ZXN0U3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfUEJDX1JFUV9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfRU5URVJfUElOX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19TSE9XX1BJTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgLy9XZSBsZXQgdGhlIHN1cHBsaWNhbnQgaGFuZGxlIHRoZSBwcm92aXNpb24gZGlzY292ZXJ5IHJlc3BvbnNlCi0gICAgICAgICAgICAgICAgICAgIC8vYW5kIHdhaXQgaW5zdGVhZCBmb3IgdGhlIEdPX05FR09USUFUSU9OX1JFUVVFU1RfRVZFTlQuCi0gICAgICAgICAgICAgICAgICAgIC8vSGFuZGxpbmcgcHJvdmlzaW9uIGRpc2NvdmVyeSBhbmQgaXNzdWluZyBhIHAycF9jb25uZWN0IGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAvL2dyb3VwIG5lZ290aWF0aW9uIGNvbWVzIHRocm91Z2ggY2F1c2VzIGlzc3VlcwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNSRUFURV9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgbUF1dG9ub21vdXNHcm91cCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGludCBuZXRJZCA9IG1lc3NhZ2UuYXJnMTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiByZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5ldElkID09IFdpZmlQMnBHcm91cC5QRVJTSVNURU5UX05FVF9JRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGdvIHBlcnNpc3RlbnQgZ3JvdXAgaXMgcHJlc2VudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkID0gbUdyb3Vwcy5nZXROZXR3b3JrSWQobVRoaXNEZXZpY2UuZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV0SWQgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBtV2lmaU5hdGl2ZS5wMnBHcm91cEFkZChuZXRJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG1XaWZpTmF0aXZlLnAycEdyb3VwQWRkKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbVdpZmlOYXRpdmUucDJwR3JvdXBBZGQoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ1JFQVRFX0dST1VQX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwTmVnb3RpYXRpb25TdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DUkVBVEVfR1JPVVBfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1haW4gYXQgdGhpcyBzdGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9TVEFSVEVEX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBtR3JvdXAgPSAoV2lmaVAycEdyb3VwKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGdyb3VwIHN0YXJ0ZWQiKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBXZSBoaXQgdGhpcyBzY2VuYXJpbyB3aGVuIGEgcGVyc2lzdGVudCBncm91cCBpcyByZWludm9rZWQKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Hcm91cC5nZXROZXR3b3JrSWQoKSA9PSBXaWZpUDJwR3JvdXAuUEVSU0lTVEVOVF9ORVRfSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1BdXRvbm9tb3VzR3JvdXAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBOZWdvdGlhdGlvblN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlVuZXhwZWN0ZWQgZ3JvdXAgY3JlYXRpb24sIHJlbW92ZSAiICsgbUdyb3VwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycEdyb3VwUmVtb3ZlKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVEFSVF9MSVNURU46Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBzdGFydCBsaXN0ZW4gbW9kZSIpOwotICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBGbHVzaCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwRXh0TGlzdGVuKHRydWUsIDUwMCwgNTAwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RBUlRfTElTVEVOX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVEFSVF9MSVNURU5fRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUT1BfTElTVEVOOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgc3RvcCBsaXN0ZW4gbW9kZSIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwRXh0TGlzdGVuKGZhbHNlLCAwLCAwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RPUF9MSVNURU5fU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUT1BfTElTVEVOX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwRmx1c2goKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TRVRfQ0hBTk5FTDoKLSAgICAgICAgICAgICAgICAgICAgQnVuZGxlIHAycENoYW5uZWxzID0gKEJ1bmRsZSkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGludCBsYyA9IHAycENoYW5uZWxzLmdldEludCgibGMiLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IG9jID0gcDJwQ2hhbm5lbHMuZ2V0SW50KCJvYyIsIDApOwotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgc2V0IGxpc3RlbiBhbmQgb3BlcmF0aW5nIGNoYW5uZWwiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycFNldENoYW5uZWwobGMsIG9jKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX0NIQU5ORUxfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9DSEFOTkVMX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBHcm91cENyZWF0aW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKEdST1VQX0NSRUFUSU5HX1RJTUVEX09VVCwKLSAgICAgICAgICAgICAgICAgICAgKyttR3JvdXBDcmVhdGluZ1RpbWVvdXRJbmRleCwgMCksIEdST1VQX0NSRUFUSU5HX1dBSVRfVElNRV9NUyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBib29sZWFuIHJldCA9IEhBTkRMRUQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgY2FzZSBHUk9VUF9DUkVBVElOR19USU1FRF9PVVQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtR3JvdXBDcmVhdGluZ1RpbWVvdXRJbmRleCA9PSBtZXNzYWdlLmFyZzEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkdyb3VwIG5lZ290aWF0aW9uIHRpbWVkIG91dCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlR3JvdXBDcmVhdGlvbkZhaWx1cmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfREVWSUNFX0xPU1RfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIFdpZmlQMnBEZXZpY2UgZGV2aWNlID0gKFdpZmlQMnBEZXZpY2UpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcy5lcXVhbHMoZGV2aWNlLmRldmljZUFkZHJlc3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZCgibVNhdmVkUGVlckNvbmZpZyAiICsgbVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRldmljZSAiICsgZGV2aWNlLmRldmljZUFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gdGhlIHJlZ3VsYXIgZGV2aWNlIGxvc3QgaGFuZGxpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZwotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJBZGQgZGV2aWNlIHRvIGxvc3QgbGlzdCAiICsgZGV2aWNlKTsKLSAgICAgICAgICAgICAgICAgICAgbVBlZXJzTG9zdER1cmluZ0Nvbm5lY3Rpb24udXBkYXRlU3VwcGxpY2FudERldGFpbHMoZGV2aWNlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9QRUVSUzoKLSAgICAgICAgICAgICAgICAgICAgLyogRGlzY292ZXJ5IHdpbGwgYnJlYWsgbmVnb3RpYXRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfUEVFUlNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNBTkNFTF9DT05ORUNUOgotICAgICAgICAgICAgICAgICAgICAvL0RvIGEgc3VwcGxpY2FudCBwMnBfY2FuY2VsIHdoaWNoIG9ubHkgY2FuY2VscyBhbiBvbmdvaW5nCi0gICAgICAgICAgICAgICAgICAgIC8vZ3JvdXAgbmVnb3RpYXRpb24uIFRoaXMgd2lsbCBmYWlsIGZvciBhIHBlbmRpbmcgcHJvdmlzaW9uCi0gICAgICAgICAgICAgICAgICAgIC8vZGlzY292ZXJ5IG9yIGZvciBhIHBlbmRpbmcgdXNlciBhY3Rpb24sIGJ1dCBhdCB0aGUgZnJhbWV3b3JrCi0gICAgICAgICAgICAgICAgICAgIC8vbGV2ZWwsIHdlIGFsd2F5cyB0cmVhdCBjYW5jZWwgYXMgc3VjY2VlZGVkIGFuZCBlbnRlcgotICAgICAgICAgICAgICAgICAgICAvL2FuIGluYWN0aXZlIHN0YXRlCi0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycENhbmNlbENvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlR3JvdXBDcmVhdGlvbkZhaWx1cmUoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ0FOQ0VMX0NPTk5FQ1RfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgVXNlckF1dGhvcml6aW5nTmVnb3RpYXRpb25SZXF1ZXN0U3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIG5vdGlmeUludml0YXRpb25SZWNlaXZlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgYm9vbGVhbiByZXQgPSBIQU5ETEVEOwotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFBFRVJfQ09OTkVDVElPTl9VU0VSX0FDQ0VQVDoKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwU3RvcEZpbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgcDJwQ29ubmVjdFdpdGhQaW5EaXNwbGF5KG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICBtUGVlcnMudXBkYXRlU3RhdHVzKG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcywgV2lmaVAycERldmljZS5JTlZJVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwTmVnb3RpYXRpb25TdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBQRUVSX0NPTk5FQ1RJT05fVVNFUl9SRUpFQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlVzZXIgcmVqZWN0ZWQgbmVnb3RpYXRpb24gIiArIG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7Ci0gICAgICAgICAgICAvL1RPRE86IGRpc21pc3MgZGlhbG9nIGlmIG5vdCBhbHJlYWR5IGRvbmUKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFVzZXJBdXRob3JpemluZ0ludml0ZVJlcXVlc3RTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICAgICAgbm90aWZ5SW52aXRhdGlvblJlY2VpdmVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBib29sZWFuIHJldCA9IEhBTkRMRUQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgUEVFUl9DT05ORUNUSU9OX1VTRVJfQUNDRVBUOgotICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBTdG9wRmluZCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXJlaW52b2tlUGVyc2lzdGVudEdyb3VwKG1TYXZlZFBlZXJDb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBuZWdvdGlhdGlvbiB3aGVuIHBlcnNpc3RlbmNlIGZhaWxzCi0gICAgICAgICAgICAgICAgICAgICAgICBwMnBDb25uZWN0V2l0aFBpbkRpc3BsYXkobVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbVBlZXJzLnVwZGF0ZVN0YXR1cyhtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MsIFdpZmlQMnBEZXZpY2UuSU5WSVRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cE5lZ290aWF0aW9uU3RhdGUpOwotICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUEVFUl9DT05ORUNUSU9OX1VTRVJfUkVKRUNUOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJVc2VyIHJlamVjdGVkIGludml0YXRpb24gIiArIG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7Ci0gICAgICAgICAgICAvL1RPRE86IGRpc21pc3MgZGlhbG9nIGlmIG5vdCBhbHJlYWR5IGRvbmUKLSAgICAgICAgfQotICAgIH0KLQotCi0KLSAgICBjbGFzcyBQcm92aXNpb25EaXNjb3ZlcnlTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwUHJvdmlzaW9uRGlzY292ZXJ5KG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgV2lmaVAycFByb3ZEaXNjRXZlbnQgcHJvdkRpc2M7Ci0gICAgICAgICAgICBXaWZpUDJwRGV2aWNlIGRldmljZTsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX1BCQ19SU1BfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIHByb3ZEaXNjID0gKFdpZmlQMnBQcm92RGlzY0V2ZW50KSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgZGV2aWNlID0gcHJvdkRpc2MuZGV2aWNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWRldmljZS5kZXZpY2VBZGRyZXNzLmVxdWFscyhtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MpKSBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobVNhdmVkUGVlckNvbmZpZy53cHMuc2V0dXAgPT0gV3BzSW5mby5QQkMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkZvdW5kIGEgbWF0Y2ggIiArIG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgcDJwQ29ubmVjdFdpdGhQaW5EaXNwbGF5KG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cE5lZ290aWF0aW9uU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19FTlRFUl9QSU5fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIHByb3ZEaXNjID0gKFdpZmlQMnBQcm92RGlzY0V2ZW50KSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgZGV2aWNlID0gcHJvdkRpc2MuZGV2aWNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWRldmljZS5kZXZpY2VBZGRyZXNzLmVxdWFscyhtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MpKSBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobVNhdmVkUGVlckNvbmZpZy53cHMuc2V0dXAgPT0gV3BzSW5mby5LRVlQQUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkZvdW5kIGEgbWF0Y2ggIiArIG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogd2UgYWxyZWFkeSBoYXZlIHRoZSBwaW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkobVNhdmVkUGVlckNvbmZpZy53cHMucGluKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAycENvbm5lY3RXaXRoUGluRGlzcGxheShtU2F2ZWRQZWVyQ29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwTmVnb3RpYXRpb25TdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Kb2luRXhpc3RpbmdHcm91cCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVXNlckF1dGhvcml6aW5nTmVnb3RpYXRpb25SZXF1ZXN0U3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19TSE9XX1BJTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgcHJvdkRpc2MgPSAoV2lmaVAycFByb3ZEaXNjRXZlbnQpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSBwcm92RGlzYy5kZXZpY2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZGV2aWNlLmRldmljZUFkZHJlc3MuZXF1YWxzKG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcykpIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtU2F2ZWRQZWVyQ29uZmlnLndwcy5zZXR1cCA9PSBXcHNJbmZvLkRJU1BMQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkZvdW5kIGEgbWF0Y2ggIiArIG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy53cHMucGluID0gcHJvdkRpc2MucGluOwotICAgICAgICAgICAgICAgICAgICAgICAgcDJwQ29ubmVjdFdpdGhQaW5EaXNwbGF5KG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5SW52aXRhdGlvblNlbnQocHJvdkRpc2MucGluLCBkZXZpY2UuZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwTmVnb3RpYXRpb25TdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX0ZBSUxVUkVfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoInByb3Zpc2lvbiBkaXNjb3ZlcnkgZmFpbGVkIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUdyb3VwQ3JlYXRpb25GYWlsdXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgR3JvdXBOZWdvdGlhdGlvblN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGVzZSByaWdodCBub3csIHNpbmNlIHdlIGdldCBhIEdST1VQX1NUQVJURUQgbm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgLy8gYWZ0ZXJ3YXJkcwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dPX05FR09USUFUSU9OX1NVQ0NFU1NfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfRk9STUFUSU9OX1NVQ0NFU1NfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBnbyBzdWNjZXNzIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX1NUQVJURURfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIG1Hcm91cCA9IChXaWZpUDJwR3JvdXApIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgZ3JvdXAgc3RhcnRlZCIpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtR3JvdXAuZ2V0TmV0d29ya0lkKCkgPT0gV2lmaVAycEdyb3VwLlBFUlNJU1RFTlRfTkVUX0lEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgICAgICogdXBkYXRlIGNhY2hlIGluZm9ybWF0aW9uIGFuZCBzZXQgbmV0d29yayBpZCB0byBtR3JvdXAuCi0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBlcnNpc3RlbnROZXR3b3JrcyhOT19SRUxPQUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRldkFkZHIgPSBtR3JvdXAuZ2V0T3duZXIoKS5kZXZpY2VBZGRyZXNzOwotICAgICAgICAgICAgICAgICAgICAgICAgbUdyb3VwLnNldE5ldHdvcmtJZChtR3JvdXBzLmdldE5ldHdvcmtJZChkZXZBZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtR3JvdXAuZ2V0TmV0d29ya05hbWUoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Hcm91cC5pc0dyb3VwT3duZXIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0dGluZyBhbiBpZGxlIHRpbWUgb3V0IG9uIEdPIGNhdXNlcyBpc3N1ZXMgd2l0aCBjZXJ0YWluIHNjZW5hcmlvcwotICAgICAgICAgICAgICAgICAgICAgICAgICogb24gY2xpZW50cyB3aGVyZSBpdCBjYW4gYmUgb2ZmLWNoYW5uZWwgZm9yIGxvbmdlciBhbmQgd2l0aCB0aGUgcG93ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNhdmUgbW9kZXMgdXNlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBUT0RPOiBWZXJpZnkgbXVsdGktY2hhbm5lbCBzY2VuYXJpb3MgYW5kIHN1cHBsaWNhbnQgYmVoYXZpb3IgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBiZXR0ZXIgYmVmb3JlIGFkZGluZyBhIHRpbWUgb3V0IGluIGZ1dHVyZQotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvL1NldCBncm91cCBpZGxlIHRpbWVvdXQgb2YgMTAgc2VjLCB0byBhdm9pZCBHTyBiZWFjb25pbmcgaW5jYXNlIG9mIGFueQotICAgICAgICAgICAgICAgICAgICAgICAgLy9mYWlsdXJlIGR1cmluZyA0LXdheSBIYW5kc2hha2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1BdXRvbm9tb3VzR3JvdXApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRQMnBHcm91cElkbGUobUdyb3VwLmdldEludGVyZmFjZSgpLCBHUk9VUF9JRExFX1RJTUVfUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydERoY3BTZXJ2ZXIobUdyb3VwLmdldEludGVyZmFjZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldFAycEdyb3VwSWRsZShtR3JvdXAuZ2V0SW50ZXJmYWNlKCksIEdST1VQX0lETEVfVElNRV9TKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EaGNwU3RhdGVNYWNoaW5lID0gRGhjcFN0YXRlTWFjaGluZS5tYWtlRGhjcFN0YXRlTWFjaGluZShtQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUDJwU3RhdGVNYWNoaW5lLnRoaXMsIG1Hcm91cC5nZXRJbnRlcmZhY2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgdXNlIERIQ1Agc3RhdGUgbWFjaGluZSBQUkUgbWVzc2FnZSBsaWtlIFdpZmlTdGF0ZU1hY2hpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldFAycFBvd2VyU2F2ZShtR3JvdXAuZ2V0SW50ZXJmYWNlKCksIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EaGNwU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKERoY3BTdGF0ZU1hY2hpbmUuQ01EX1NUQVJUX0RIQ1ApOwotICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycERldmljZSBncm91cE93bmVyID0gbUdyb3VwLmdldE93bmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwRGV2aWNlIHBlZXIgPSBtUGVlcnMuZ2V0KGdyb3VwT3duZXIuZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGdyb3VwIG93bmVyIGRldGFpbHMgd2l0aCBwZWVyIGRldGFpbHMgZm91bmQgYXQgZGlzY292ZXJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBPd25lci51cGRhdGVTdXBwbGljYW50RGV0YWlscyhwZWVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGVlcnMudXBkYXRlU3RhdHVzKGdyb3VwT3duZXIuZGV2aWNlQWRkcmVzcywgV2lmaVAycERldmljZS5DT05ORUNURUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBzdXBwbGljYW50IGJ1ZyBjYW4gbGVhZCB0byByZXBvcnRpbmcgYW4gaW52YWxpZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdyb3VwIG93bmVyIGFkZHJlc3MgKGFsbCB6ZXJvZXMpIGF0IHRpbWVzLiBBdm9pZCBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3Jhc2gsIGJ1dCBjb250aW51ZSBncm91cCBjcmVhdGlvbiBzaW5jZSBpdCBpcyBub3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc3NlbnRpYWwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ndygiVW5rbm93biBncm91cCBvd25lciAiICsgZ3JvdXBPd25lcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cENyZWF0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dPX05FR09USUFUSU9OX0ZBSUxVUkVfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIFAycFN0YXR1cyBzdGF0dXMgPSAoUDJwU3RhdHVzKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBQMnBTdGF0dXMuTk9fQ09NTU9OX0NIQU5ORUwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRnJlcXVlbmN5Q29uZmxpY3RTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvKiBjb250aW51ZSB3aXRoIGdyb3VwIHJlbW92YWwgaGFuZGxpbmcgKi8KLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9SRU1PVkVEX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgZ28gZmFpbHVyZSIpOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVHcm91cENyZWF0aW9uRmFpbHVyZSgpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAvLyBBIGdyb3VwIGZvcm1hdGlvbiBmYWlsdXJlIGlzIGFsd2F5cyBmb2xsb3dlZCBieQotICAgICAgICAgICAgICAgIC8vIGEgZ3JvdXAgcmVtb3ZlZCBldmVudC4gRmx1c2hpbmcgdGhpbmdzIGF0IGdyb3VwIGZvcm1hdGlvbgotICAgICAgICAgICAgICAgIC8vIGZhaWx1cmUgY2F1c2VzIHN1cHBsaWNhbnQgaXNzdWVzLiBJZ25vcmUgcmlnaHQgbm93LgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX0ZPUk1BVElPTl9GQUlMVVJFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAoUDJwU3RhdHVzKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBQMnBTdGF0dXMuTk9fQ09NTU9OX0NIQU5ORUwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRnJlcXVlbmN5Q29uZmxpY3RTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9JTlZJVEFUSU9OX1JFU1VMVF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gKFAycFN0YXR1cyltZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBQMnBTdGF0dXMuU1VDQ0VTUykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW52b2NhdGlvbiB3YXMgc3VjY2VlZGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCBQMlBfR1JPVVBfU1RBUlRFRF9FVkVOVC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIkludml0YXRpb24gcmVzdWx0ICIgKyBzdGF0dXMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFAycFN0YXR1cy5VTktOT1dOX1AyUF9HUk9VUCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFyZ2V0IGRldmljZSBoYXMgYWxyZWFkeSByZW1vdmVkIHRoZSBjcmVkZW50aWFsLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU28sIHJlbW92ZSB0aGlzIGNyZWRlbnRpYWwgYWNjb3JkaW5nbHkuCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmV0SWQgPSBtU2F2ZWRQZWVyQ29uZmlnLm5ldElkOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldElkID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJSZW1vdmUgdW5rbm93biBjbGllbnQgZnJvbSB0aGUgbGlzdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsaWVudEZyb21MaXN0KG5ldElkLCBtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWludm9jYXRpb24gaGFzIGZhaWxlZCwgdHJ5IGdyb3VwIG5lZ290aWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLm5ldElkID0gV2lmaVAycEdyb3VwLlBFUlNJU1RFTlRfTkVUX0lEOwotICAgICAgICAgICAgICAgICAgICAgICAgcDJwQ29ubmVjdFdpdGhQaW5EaXNwbGF5KG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PSBQMnBTdGF0dXMuSU5GT1JNQVRJT05fSVNfQ1VSUkVOVExZX1VOQVZBSUxBQkxFKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERldmljZXMgc2V0dGluZyBwZXJzaXN0ZW50X3JlY29ubmVjdCB0byAwIGluIHdwYV9zdXBwbGljYW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHdheXMgZGVmZXIgdGhlIGludm9jYXRpb24gcmVxdWVzdCBhbmQgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAiaW5mb3JtYXRpb24gaXMgY3VycmVudGx5IHVuYWJsZSIgZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTbywgdHJ5IGFub3RoZXIgd2F5IHRvIGNvbm5lY3QgZm9yIGludGVyb3BlcmFiaWxpdHkuCi0gICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLm5ldElkID0gV2lmaVAycEdyb3VwLlBFUlNJU1RFTlRfTkVUX0lEOwotICAgICAgICAgICAgICAgICAgICAgICAgcDJwQ29ubmVjdFdpdGhQaW5EaXNwbGF5KG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PSBQMnBTdGF0dXMuTk9fQ09NTU9OX0NIQU5ORUwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRnJlcXVlbmN5Q29uZmxpY3RTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVHcm91cENyZWF0aW9uRmFpbHVyZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIEZyZXF1ZW5jeUNvbmZsaWN0U3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIHByaXZhdGUgQWxlcnREaWFsb2cgbUZyZXF1ZW5jeUNvbmZsaWN0RGlhbG9nOwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgICAgICBub3RpZnlGcmVxdWVuY3lDb25mbGljdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUZyZXF1ZW5jeUNvbmZsaWN0KCkgewotICAgICAgICAgICAgbG9nZCgiTm90aWZ5IGZyZXF1ZW5jeSBjb25mbGljdCIpOwotICAgICAgICAgICAgUmVzb3VyY2VzIHIgPSBSZXNvdXJjZXMuZ2V0U3lzdGVtKCk7Ci0KLSAgICAgICAgICAgIEFsZXJ0RGlhbG9nIGRpYWxvZyA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKG1Db250ZXh0KQotICAgICAgICAgICAgICAgIC5zZXRNZXNzYWdlKHIuZ2V0U3RyaW5nKFIuc3RyaW5nLndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RGV2aWNlTmFtZShtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MpKSkKLSAgICAgICAgICAgICAgICAuc2V0UG9zaXRpdmVCdXR0b24oci5nZXRTdHJpbmcoUi5zdHJpbmcuZGxnX29rKSwgbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZhY2UgZGlhbG9nLCBpbnQgd2hpY2gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShEUk9QX1dJRklfVVNFUl9BQ0NFUFQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIC5zZXROZWdhdGl2ZUJ1dHRvbihyLmdldFN0cmluZyhSLnN0cmluZy5kZWNsaW5lKSwgbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZhY2UgZGlhbG9nLCBpbnQgd2hpY2gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShEUk9QX1dJRklfVVNFUl9SRUpFQ1QpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIC5zZXRPbkNhbmNlbExpc3RlbmVyKG5ldyBEaWFsb2dJbnRlcmZhY2UuT25DYW5jZWxMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DYW5jZWwoRGlhbG9nSW50ZXJmYWNlIGFyZzApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShEUk9QX1dJRklfVVNFUl9SRUpFQ1QpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLQotICAgICAgICAgICAgZGlhbG9nLmdldFdpbmRvdygpLnNldFR5cGUoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9TWVNURU1fQUxFUlQpOwotICAgICAgICAgICAgZGlhbG9nLnNob3coKTsKLSAgICAgICAgICAgIG1GcmVxdWVuY3lDb25mbGljdERpYWxvZyA9IGRpYWxvZzsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR09fTkVHT1RJQVRJT05fU1VDQ0VTU19FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9GT1JNQVRJT05fU1VDQ0VTU19FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZShnZXROYW1lKCkgKyAiZ3JvdXAgc3VjZXNzIGR1cmluZyBmcmVxIGNvbmZsaWN0ISIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9TVEFSVEVEX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBsb2dlKGdldE5hbWUoKSArICJncm91cCBzdGFydGVkIGFmdGVyIGZyZXEgY29uZmxpY3QsIGhhbmRsZSBhbnl3YXkiKTsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwTmVnb3RpYXRpb25TdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dPX05FR09USUFUSU9OX0ZBSUxVUkVfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfUkVNT1ZFRF9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9GT1JNQVRJT05fRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIGZhaWx1cmVzIHNpbmNlIHdlIHJldHJ5IGFnYWluCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRFJPUF9XSUZJX1VTRVJfUkVKRUNUOgotICAgICAgICAgICAgICAgICAgICAvLyBVc2VyIHJlamVjdGVkIGRyb3BwaW5nIHdpZmkgaW4gZmF2b3VyIG9mIHAycAotICAgICAgICAgICAgICAgICAgICBoYW5kbGVHcm91cENyZWF0aW9uRmFpbHVyZSgpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIERST1BfV0lGSV9VU0VSX0FDQ0VQVDoKLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlciBhY2NlcHRlZCBkcm9wcGluZyB3aWZpIGluIGZhdm91ciBvZiBwMnAKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlDaGFubmVsLnNlbmRNZXNzYWdlKFdpZmlQMnBTZXJ2aWNlLkRJU0NPTk5FQ1RfV0lGSV9SRVFVRVNULCAxKTsKLSAgICAgICAgICAgICAgICAgICAgbVRlbXBvYXJpbHlEaXNjb25uZWN0ZWRXaWZpID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBESVNDT05ORUNUX1dJRklfUkVTUE9OU0U6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEdvdCBhIHJlc3BvbnNlIGZyb20gd2lmaXN0YXRlbWFjaGluZSwgcmV0cnkgcDJwCi0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIldpZmkgZGlzY29ubmVjdGVkLCByZXRyeSBwMnAiKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoV2lmaVAycE1hbmFnZXIuQ09OTkVDVCwgbVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKLSAgICAgICAgICAgIGlmIChtRnJlcXVlbmN5Q29uZmxpY3REaWFsb2cgIT0gbnVsbCkgbUZyZXF1ZW5jeUNvbmZsaWN0RGlhbG9nLmRpc21pc3MoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIEdyb3VwQ3JlYXRlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgICAgICAvLyBPbmNlIGNvbm5lY3RlZCwgcGVlciBjb25maWcgZGV0YWlscyBhcmUgaW52YWxpZAotICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy5pbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICBtTmV0d29ya0luZm8uc2V0RGV0YWlsZWRTdGF0ZShOZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlLkNPTk5FQ1RFRCwgbnVsbCwgbnVsbCk7Ci0KLSAgICAgICAgICAgIHVwZGF0ZVRoaXNEZXZpY2UoV2lmaVAycERldmljZS5DT05ORUNURUQpOwotCi0gICAgICAgICAgICAvL0RIQ1Agc2VydmVyIGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZCBpZiBJIGFtIGEgZ3JvdXAgb3duZXIKLSAgICAgICAgICAgIGlmIChtR3JvdXAuaXNHcm91cE93bmVyKCkpIHsKLSAgICAgICAgICAgICAgICBzZXRXaWZpUDJwSW5mb09uR3JvdXBGb3JtYXRpb24oTmV0d29ya1V0aWxzLm51bWVyaWNUb0luZXRBZGRyZXNzKFNFUlZFUl9BRERSRVNTKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgYSBuZWdvdGlhdGlvbiBncm91cCwgY29ubmVjdGlvbiBjaGFuZ2VkIGlzIHNlbnQKLSAgICAgICAgICAgIC8vIGFmdGVyIGEgY2xpZW50IGpvaW5zLiBGb3IgYXV0b25vbW91cywgc2VuZCBub3cKLSAgICAgICAgICAgIGlmIChtQXV0b25vbW91c0dyb3VwKSB7Ci0gICAgICAgICAgICAgICAgc2VuZFAycENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVBfU1RBX0NPTk5FQ1RFRF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgV2lmaVAycERldmljZSBkZXZpY2UgPSAoV2lmaVAycERldmljZSkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXZpY2VBZGRyZXNzID0gZGV2aWNlLmRldmljZUFkZHJlc3M7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIHRpbWVvdXQgdGhhdCB3YXMgc2V0IHdoZW4gZ3JvdXAgd2FzIHN0YXJ0ZWQuCi0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldFAycEdyb3VwSWRsZShtR3JvdXAuZ2V0SW50ZXJmYWNlKCksIDApOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGV2aWNlQWRkcmVzcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobVBlZXJzLmdldChkZXZpY2VBZGRyZXNzKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUdyb3VwLmFkZENsaWVudChtUGVlcnMuZ2V0KGRldmljZUFkZHJlc3MpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUdyb3VwLmFkZENsaWVudChkZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1QZWVycy51cGRhdGVTdGF0dXMoZGV2aWNlQWRkcmVzcywgV2lmaVAycERldmljZS5DT05ORUNURUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGFwIHN0YSBjb25uZWN0ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkNvbm5lY3Qgb24gbnVsbCBkZXZpY2UgYWRkcmVzcywgaWdub3JlIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2VuZFAycENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVBfU1RBX0RJU0NPTk5FQ1RFRF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgZGV2aWNlID0gKFdpZmlQMnBEZXZpY2UpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBkZXZpY2VBZGRyZXNzID0gZGV2aWNlLmRldmljZUFkZHJlc3M7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2VBZGRyZXNzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QZWVycy51cGRhdGVTdGF0dXMoZGV2aWNlQWRkcmVzcywgV2lmaVAycERldmljZS5BVkFJTEFCTEUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1Hcm91cC5yZW1vdmVDbGllbnQoZGV2aWNlQWRkcmVzcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJSZW1vdmVkIGNsaWVudCAiICsgZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtQXV0b25vbW91c0dyb3VwICYmIG1Hcm91cC5pc0NsaWVudExpc3RFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2QoIkNsaWVudCBsaXN0IGVtcHR5LCByZW1vdmUgbm9uLXBlcnNpc3RlbnQgcDJwIGdyb3VwIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycEdyb3VwUmVtb3ZlKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGVuZCB1cCBzZW5kaW5nIGNvbm5lY3Rpb24gY2hhbmdlZCBicm9hZGNhc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGlzIGhhcHBlbnMgYXQgZXhpdCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90aWZ5IHdoZW4gYSBjbGllbnQgZGlzY29ubmVjdHMgZnJvbSBncm91cAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUDJwQ29ubmVjdGlvbkNoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkZhaWxlZCB0byByZW1vdmUgY2xpZW50ICIgKyBkZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFdpZmlQMnBEZXZpY2UgYyA6IG1Hcm91cC5nZXRDbGllbnRMaXN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiY2xpZW50ICIgKyBjLmRldmljZUFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBhcCBzdGEgZGlzY29ubmVjdGVkIik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJEaXNjb25uZWN0IG9uIHVua25vd24gZGV2aWNlOiAiICsgZGV2aWNlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIERoY3BTdGF0ZU1hY2hpbmUuQ01EX1BPU1RfREhDUF9BQ1RJT046Ci0gICAgICAgICAgICAgICAgICAgIERoY3BSZXN1bHRzIGRoY3BSZXN1bHRzID0gKERoY3BSZXN1bHRzKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSBEaGNwU3RhdGVNYWNoaW5lLkRIQ1BfU1VDQ0VTUyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRoY3BSZXN1bHRzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkRoY3BSZXN1bHRzOiAiICsgZGhjcFJlc3VsdHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0V2lmaVAycEluZm9Pbkdyb3VwRm9ybWF0aW9uKGRoY3BSZXN1bHRzLnNlcnZlckFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFAycENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL1R1cm4gb24gcG93ZXIgc2F2ZSBvbiBjbGllbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldFAycFBvd2VyU2F2ZShtR3JvdXAuZ2V0SW50ZXJmYWNlKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiREhDUCBmYWlsZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycEdyb3VwUmVtb3ZlKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRU1PVkVfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiByZW1vdmUgZ3JvdXAiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycEdyb3VwUmVtb3ZlKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtT25nb2luZ0dyb3VwUmVtb3ZhbFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9HUk9VUF9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlR3JvdXBSZW1vdmVkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0dST1VQX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuRVJST1IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8qIFdlIGRvIG5vdCBsaXN0ZW4gdG8gTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UIGZvciBncm91cCByZW1vdmFsCi0gICAgICAgICAgICAgICAgICogaGFuZGxpbmcgc2luY2Ugc3VwcGxpY2FudCBhY3R1YWxseSB0cmllcyB0byByZWNvbm5lY3QgYWZ0ZXIgYSB0ZW1wb3JhcnkKLSAgICAgICAgICAgICAgICAgKiBkaXNjb25uZWN0IHVudGlsIGdyb3VwIGlkbGUgdGltZSBvdXQuIEV2ZW50dWFsbHksIGEgZ3JvdXAgcmVtb3ZhbCBldmVudAotICAgICAgICAgICAgICAgICAqIHdpbGwgY29tZSB3aGVuIGdyb3VwIGhhcyBiZWVuIHJlbW92ZWQuCi0gICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgKiBXaGVuIHRoZXJlIGFyZSBjb25uZWN0aXZpdHkgaXNzdWVzIGR1cmluZyB0ZW1wb3JhcnkgZGlzY29ubmVjdCwgdGhlIGFwcGxpY2F0aW9uCi0gICAgICAgICAgICAgICAgICogd2lsbCBhbHNvIGp1c3QgcmVtb3ZlIHRoZSBncm91cC4KLSAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAqIFRyZWF0aW5nIG5ldHdvcmsgZGlzY29ubmVjdGlvbiBhcyBncm91cCByZW1vdmFsIGNhdXNlcyByYWNlIGNvbmRpdGlvbnMgc2luY2UKLSAgICAgICAgICAgICAgICAgKiBzdXBwbGljYW50IHdvdWxkIHN0aWxsIG1haW50YWluIHRoZSBncm91cCBhdCB0aGF0IHN0YWdlLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX1JFTU9WRURfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBncm91cCByZW1vdmVkIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUdyb3VwUmVtb3ZlZCgpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9ERVZJQ0VfTE9TVF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgZGV2aWNlID0gKFdpZmlQMnBEZXZpY2UpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICAvL0RldmljZSBsb3NzIGZvciBhIGNvbm5lY3RlZCBkZXZpY2UgaW5kaWNhdGVzIGl0IGlzIG5vdCBpbiBkaXNjb3ZlcnkgYW55IG1vcmUKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Hcm91cC5jb250YWlucyhkZXZpY2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJBZGQgZGV2aWNlIHRvIGxvc3QgbGlzdCAiICsgZGV2aWNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QZWVyc0xvc3REdXJpbmdDb25uZWN0aW9uLnVwZGF0ZVN1cHBsaWNhbnREZXRhaWxzKGRldmljZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBEbyB0aGUgcmVndWxhciBkZXZpY2UgbG9zdCBoYW5kbGluZwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9ESVNBQkxFX1AyUF9SRVE6Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9HUk9VUCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGFueSBjbGllbnQgdG8gam9pbiB0aGUgR08gZHVyaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBXUFMgd2luZG93Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVEFSVF9XUFM6Ci0gICAgICAgICAgICAgICAgICAgIFdwc0luZm8gd3BzID0gKFdwc0luZm8pIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAod3BzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX1dQU19GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiByZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAod3BzLnNldHVwID09IFdwc0luZm8uUEJDKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBtV2lmaU5hdGl2ZS5zdGFydFdwc1BiYyhtR3JvdXAuZ2V0SW50ZXJmYWNlKCksIG51bGwpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdwcy5waW4gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwaW4gPSBtV2lmaU5hdGl2ZS5zdGFydFdwc1BpbkRpc3BsYXkobUdyb3VwLmdldEludGVyZmFjZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KHBpbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUludml0YXRpb25TZW50KHBpbiwgImFueSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBpZ25vcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBtV2lmaU5hdGl2ZS5zdGFydFdwc1BpbktleXBhZChtR3JvdXAuZ2V0SW50ZXJmYWNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cHMucGluKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCByZXQgPyBXaWZpUDJwTWFuYWdlci5TVEFSVF9XUFNfU1VDQ0VFREVEIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5TVEFSVF9XUFNfRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DT05ORUNUOgotICAgICAgICAgICAgICAgICAgICBXaWZpUDJwQ29uZmlnIGNvbmZpZyA9IChXaWZpUDJwQ29uZmlnKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29uZmlnSW52YWxpZChjb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJEcm9wcGluZyBjb25uZWN0IHJlcXVlc2V0ICIgKyBjb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ09OTkVDVF9GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbG9nZCgiSW52aXRpbmcgZGV2aWNlIDogIiArIGNvbmZpZy5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZyA9IGNvbmZpZzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycEludml0ZShtR3JvdXAsIGNvbmZpZy5kZXZpY2VBZGRyZXNzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVBlZXJzLnVwZGF0ZVN0YXR1cyhjb25maWcuZGV2aWNlQWRkcmVzcywgV2lmaVAycERldmljZS5JTlZJVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1RfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1RfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogZmlndXJlIG91dCB1cGRhdGluZyB0aGUgc3RhdHVzIHRvIGRlY2xpbmVkIHdoZW4gaW52aXRhdGlvbiBpcyByZWplY3RlZAotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9JTlZJVEFUSU9OX1JFU1VMVF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgUDJwU3RhdHVzIHN0YXR1cyA9IChQMnBTdGF0dXMpbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gUDJwU3RhdHVzLlNVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludm9jYXRpb24gd2FzIHN1Y2NlZWRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIkludml0YXRpb24gcmVzdWx0ICIgKyBzdGF0dXMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFAycFN0YXR1cy5VTktOT1dOX1AyUF9HUk9VUCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFyZ2V0IGRldmljZSBoYXMgYWxyZWFkeSByZW1vdmVkIHRoZSBjcmVkZW50aWFsLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU28sIHJlbW92ZSB0aGlzIGNyZWRlbnRpYWwgYWNjb3JkaW5nbHkuCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmV0SWQgPSBtR3JvdXAuZ2V0TmV0d29ya0lkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV0SWQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlJlbW92ZSB1bmtub3duIGNsaWVudCBmcm9tIHRoZSBsaXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW1vdmVDbGllbnRGcm9tTGlzdChuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcywgZmFsc2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBmb3VuZCB0aGUgY2xpZW50IG9uIHRoZSBsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkFscmVhZHkgcmVtb3ZlZCB0aGUgY2xpZW50LCBpZ25vcmUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSBpbnZpdGF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1QsIG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19QQkNfUkVRX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19FTlRFUl9QSU5fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX1NIT1dfUElOX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBXaWZpUDJwUHJvdkRpc2NFdmVudCBwcm92RGlzYyA9IChXaWZpUDJwUHJvdkRpc2NFdmVudCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcgPSBuZXcgV2lmaVAycENvbmZpZygpOwotICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MgPSBwcm92RGlzYy5kZXZpY2UuZGV2aWNlQWRkcmVzczsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uud2hhdCA9PSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX0VOVEVSX1BJTl9FVkVOVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy53cHMuc2V0dXAgPSBXcHNJbmZvLktFWVBBRDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLndoYXQgPT0gV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19TSE9XX1BJTl9FVkVOVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy53cHMuc2V0dXAgPSBXcHNJbmZvLkRJU1BMQVk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLndwcy5waW4gPSBwcm92RGlzYy5waW47Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLndwcy5zZXR1cCA9IFdwc0luZm8uUEJDOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVXNlckF1dGhvcml6aW5nSm9pblN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfU1RBUlRFRF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiRHVwbGljYXRlIGdyb3VwIGNyZWF0aW9uIGV2ZW50IG5vdGljZSwgaWdub3JlIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKLSAgICAgICAgICAgIHVwZGF0ZVRoaXNEZXZpY2UoV2lmaVAycERldmljZS5BVkFJTEFCTEUpOwotICAgICAgICAgICAgcmVzZXRXaWZpUDJwSW5mbygpOwotICAgICAgICAgICAgbU5ldHdvcmtJbmZvLnNldERldGFpbGVkU3RhdGUoTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZS5ESVNDT05ORUNURUQsIG51bGwsIG51bGwpOwotICAgICAgICAgICAgc2VuZFAycENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBVc2VyQXV0aG9yaXppbmdKb2luU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIG5vdGlmeUludml0YXRpb25SZWNlaXZlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfUEJDX1JFUV9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfRU5URVJfUElOX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19TSE9XX1BJTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgLy9JZ25vcmUgbW9yZSBjbGllbnQgcmVxdWVzdHMKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBQRUVSX0NPTk5FQ1RJT05fVVNFUl9BQ0NFUFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vU3RvcCBkaXNjb3ZlcnkgdG8gYXZvaWQgZmFpbHVyZSBkdWUgdG8gY2hhbm5lbCBzd2l0Y2gKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwU3RvcEZpbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TYXZlZFBlZXJDb25maWcud3BzLnNldHVwID09IFdwc0luZm8uUEJDKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdGFydFdwc1BiYyhtR3JvdXAuZ2V0SW50ZXJmYWNlKCksIG51bGwpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnRXcHNQaW5LZXlwYWQobUdyb3VwLmdldEludGVyZmFjZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLndwcy5waW4pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBDcmVhdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFBFRVJfQ09OTkVDVElPTl9VU0VSX1JFSkVDVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiVXNlciByZWplY3RlZCBpbmNvbWluZyByZXF1ZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBDcmVhdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgewotICAgICAgICAgICAgLy9UT0RPOiBkaXNtaXNzIGRpYWxvZyBpZiBub3QgYWxyZWFkeSBkb25lCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBPbmdvaW5nR3JvdXBSZW1vdmFsU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgLy8gR3JvdXAgcmVtb3ZhbCBvbmdvaW5nLiBNdWx0aXBsZSBjYWxscwotICAgICAgICAgICAgICAgIC8vIGVuZCB1cCByZW1vdmluZyBwZXJzaXN0ZWQgbmV0d29yay4gRG8gbm90aGluZy4KLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0dST1VQX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8vIFBhcmVudCBzdGF0ZSB3aWxsIHRyYW5zaXRpb24gb3V0IG9mIHRoaXMgc3RhdGUKLSAgICAgICAgICAgICAgICAvLyB3aGVuIHJlbW92YWwgaXMgY29tcGxldGUKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIHN1cGVyLmR1bXAoZmQsIHB3LCBhcmdzKTsKLSAgICAgICAgcHcucHJpbnRsbigibVdpZmlQMnBJbmZvICIgKyBtV2lmaVAycEluZm8pOwotICAgICAgICBwdy5wcmludGxuKCJtR3JvdXAgIiArIG1Hcm91cCk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1TYXZlZFBlZXJDb25maWcgIiArIG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICBwdy5wcmludGxuKCJtU2F2ZWRQMnBHcm91cCAiICsgbVNhdmVkUDJwR3JvdXApOwotICAgICAgICBwdy5wcmludGxuKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRQMnBTdGF0ZUNoYW5nZWRCcm9hZGNhc3QoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlQMnBNYW5hZ2VyLldJRklfUDJQX1NUQVRFX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7Ci0gICAgICAgIGlmIChlbmFibGVkKSB7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaVAycE1hbmFnZXIuRVhUUkFfV0lGSV9TVEFURSwKLSAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfU1RBVEVfRU5BQkxFRCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaVAycE1hbmFnZXIuRVhUUkFfV0lGSV9TVEFURSwKLSAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfU1RBVEVfRElTQUJMRUQpOwotICAgICAgICB9Ci0gICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRQMnBEaXNjb3ZlcnlDaGFuZ2VkQnJvYWRjYXN0KGJvb2xlYW4gc3RhcnRlZCkgewotICAgICAgICBpZiAobURpc2NvdmVyeVN0YXJ0ZWQgPT0gc3RhcnRlZCkgcmV0dXJuOwotICAgICAgICBtRGlzY292ZXJ5U3RhcnRlZCA9IHN0YXJ0ZWQ7Ci0KLSAgICAgICAgaWYgKERCRykgbG9nZCgiZGlzY292ZXJ5IGNoYW5nZSBicm9hZGNhc3QgIiArIHN0YXJ0ZWQpOwotCi0gICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlQMnBNYW5hZ2VyLldJRklfUDJQX0RJU0NPVkVSWV9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaVAycE1hbmFnZXIuRVhUUkFfRElTQ09WRVJZX1NUQVRFLCBzdGFydGVkID8KLSAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5XSUZJX1AyUF9ESVNDT1ZFUllfU1RBUlRFRCA6Ci0gICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfRElTQ09WRVJZX1NUT1BQRUQpOwotICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZW5kVGhpc0RldmljZUNoYW5nZWRCcm9hZGNhc3QoKSB7Ci0gICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlQMnBNYW5hZ2VyLldJRklfUDJQX1RISVNfREVWSUNFX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpUDJwTWFuYWdlci5FWFRSQV9XSUZJX1AyUF9ERVZJQ0UsIG5ldyBXaWZpUDJwRGV2aWNlKG1UaGlzRGV2aWNlKSk7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKSB7Ci0gICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlQMnBNYW5hZ2VyLldJRklfUDJQX1BFRVJTX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlQMnBNYW5hZ2VyLkVYVFJBX1AyUF9ERVZJQ0VfTElTVCwgbmV3IFdpZmlQMnBEZXZpY2VMaXN0KG1QZWVycykpOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKLSAgICAgICAgbUNvbnRleHQuc2VuZEJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2VuZFAycENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KCkgewotICAgICAgICBpZiAoREJHKSBsb2dkKCJzZW5kaW5nIHAycCBjb25uZWN0aW9uIGNoYW5nZWQgYnJvYWRjYXN0Iik7Ci0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlQMnBNYW5hZ2VyLldJRklfUDJQX0NPTk5FQ1RJT05fQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UCi0gICAgICAgICAgICAgICAgfCBJbnRlbnQuRkxBR19SRUNFSVZFUl9SRVBMQUNFX1BFTkRJTkcpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaVAycE1hbmFnZXIuRVhUUkFfV0lGSV9QMlBfSU5GTywgbmV3IFdpZmlQMnBJbmZvKG1XaWZpUDJwSW5mbykpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaVAycE1hbmFnZXIuRVhUUkFfTkVUV09SS19JTkZPLCBuZXcgTmV0d29ya0luZm8obU5ldHdvcmtJbmZvKSk7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpUDJwTWFuYWdlci5FWFRSQV9XSUZJX1AyUF9HUk9VUCwgbmV3IFdpZmlQMnBHcm91cChtR3JvdXApKTsKLSAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICAgICAgbVdpZmlDaGFubmVsLnNlbmRNZXNzYWdlKFdpZmlQMnBTZXJ2aWNlLlAyUF9DT05ORUNUSU9OX0NIQU5HRUQsCi0gICAgICAgICAgICAgICAgbmV3IE5ldHdvcmtJbmZvKG1OZXR3b3JrSW5mbykpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZW5kUDJwUGVyc2lzdGVudEdyb3Vwc0NoYW5nZWRCcm9hZGNhc3QoKSB7Ci0gICAgICAgIGlmIChEQkcpIGxvZ2QoInNlbmRpbmcgcDJwIHBlcnNpc3RlbnQgZ3JvdXBzIGNoYW5nZWQgYnJvYWRjYXN0Iik7Ci0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlQMnBNYW5hZ2VyLldJRklfUDJQX1BFUlNJU1RFTlRfR1JPVVBTX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHN0YXJ0RGhjcFNlcnZlcihTdHJpbmcgaW50ZikgewotICAgICAgICBJbnRlcmZhY2VDb25maWd1cmF0aW9uIGlmY2cgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWZjZyA9IG1Od1NlcnZpY2UuZ2V0SW50ZXJmYWNlQ29uZmlnKGludGYpOwotICAgICAgICAgICAgaWZjZy5zZXRMaW5rQWRkcmVzcyhuZXcgTGlua0FkZHJlc3MoTmV0d29ya1V0aWxzLm51bWVyaWNUb0luZXRBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgU0VSVkVSX0FERFJFU1MpLCAyNCkpOwotICAgICAgICAgICAgaWZjZy5zZXRJbnRlcmZhY2VVcCgpOwotICAgICAgICAgICAgbU53U2VydmljZS5zZXRJbnRlcmZhY2VDb25maWcoaW50ZiwgaWZjZyk7Ci0gICAgICAgICAgICAvKiBUaGlzIHN0YXJ0cyB0aGUgZG5zbWFzcSBzZXJ2ZXIgKi8KLSAgICAgICAgICAgIG1Od1NlcnZpY2Uuc3RhcnRUZXRoZXJpbmcoREhDUF9SQU5HRSk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBsb2dlKCJFcnJvciBjb25maWd1cmluZyBpbnRlcmZhY2UgIiArIGludGYgKyAiLCA6IiArIGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9nZCgiU3RhcnRlZCBEaGNwIHNlcnZlciBvbiAiICsgaW50Zik7Ci0gICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc3RvcERoY3BTZXJ2ZXIoU3RyaW5nIGludGYpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1Od1NlcnZpY2Uuc3RvcFRldGhlcmluZygpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgbG9nZSgiRXJyb3Igc3RvcHBpbmcgRGhjcCBzZXJ2ZXIiICsgZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBsb2dkKCJTdG9wcGVkIERoY3Agc2VydmVyIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG5vdGlmeVAycEVuYWJsZUZhaWx1cmUoKSB7Ci0gICAgICAgIFJlc291cmNlcyByID0gUmVzb3VyY2VzLmdldFN5c3RlbSgpOwotICAgICAgICBBbGVydERpYWxvZyBkaWFsb2cgPSBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcihtQ29udGV4dCkKLSAgICAgICAgICAgIC5zZXRUaXRsZShyLmdldFN0cmluZyhSLnN0cmluZy53aWZpX3AycF9kaWFsb2dfdGl0bGUpKQotICAgICAgICAgICAgLnNldE1lc3NhZ2Uoci5nZXRTdHJpbmcoUi5zdHJpbmcud2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UpKQotICAgICAgICAgICAgLnNldFBvc2l0aXZlQnV0dG9uKHIuZ2V0U3RyaW5nKFIuc3RyaW5nLm9rKSwgbnVsbCkKLSAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgZGlhbG9nLmdldFdpbmRvdygpLnNldFR5cGUoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9TWVNURU1fQUxFUlQpOwotICAgICAgICBkaWFsb2cuc2hvdygpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhZGRSb3dUb0RpYWxvZyhWaWV3R3JvdXAgZ3JvdXAsIGludCBzdHJpbmdJZCwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgICAgIFJlc291cmNlcyByID0gUmVzb3VyY2VzLmdldFN5c3RlbSgpOwotICAgICAgICBWaWV3IHJvdyA9IExheW91dEluZmxhdGVyLmZyb20obUNvbnRleHQpLmluZmxhdGUoUi5sYXlvdXQud2lmaV9wMnBfZGlhbG9nX3JvdywKLSAgICAgICAgICAgICAgICBncm91cCwgZmFsc2UpOwotICAgICAgICAoKFRleHRWaWV3KSByb3cuZmluZFZpZXdCeUlkKFIuaWQubmFtZSkpLnNldFRleHQoci5nZXRTdHJpbmcoc3RyaW5nSWQpKTsKLSAgICAgICAgKChUZXh0Vmlldykgcm93LmZpbmRWaWV3QnlJZChSLmlkLnZhbHVlKSkuc2V0VGV4dCh2YWx1ZSk7Ci0gICAgICAgIGdyb3VwLmFkZFZpZXcocm93KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbm90aWZ5SW52aXRhdGlvblNlbnQoU3RyaW5nIHBpbiwgU3RyaW5nIHBlZXJBZGRyZXNzKSB7Ci0gICAgICAgIFJlc291cmNlcyByID0gUmVzb3VyY2VzLmdldFN5c3RlbSgpOwotCi0gICAgICAgIGZpbmFsIFZpZXcgdGV4dEVudHJ5VmlldyA9IExheW91dEluZmxhdGVyLmZyb20obUNvbnRleHQpCi0gICAgICAgICAgICAgICAgLmluZmxhdGUoUi5sYXlvdXQud2lmaV9wMnBfZGlhbG9nLCBudWxsKTsKLQotICAgICAgICBWaWV3R3JvdXAgZ3JvdXAgPSAoVmlld0dyb3VwKSB0ZXh0RW50cnlWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmluZm8pOwotICAgICAgICBhZGRSb3dUb0RpYWxvZyhncm91cCwgUi5zdHJpbmcud2lmaV9wMnBfdG9fbWVzc2FnZSwgZ2V0RGV2aWNlTmFtZShwZWVyQWRkcmVzcykpOwotICAgICAgICBhZGRSb3dUb0RpYWxvZyhncm91cCwgUi5zdHJpbmcud2lmaV9wMnBfc2hvd19waW5fbWVzc2FnZSwgcGluKTsKLQotICAgICAgICBBbGVydERpYWxvZyBkaWFsb2cgPSBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcihtQ29udGV4dCkKLSAgICAgICAgICAgIC5zZXRUaXRsZShyLmdldFN0cmluZyhSLnN0cmluZy53aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUpKQotICAgICAgICAgICAgLnNldFZpZXcodGV4dEVudHJ5VmlldykKLSAgICAgICAgICAgIC5zZXRQb3NpdGl2ZUJ1dHRvbihyLmdldFN0cmluZyhSLnN0cmluZy5vayksIG51bGwpCi0gICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgIGRpYWxvZy5nZXRXaW5kb3coKS5zZXRUeXBlKFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfU1lTVEVNX0FMRVJUKTsKLSAgICAgICAgZGlhbG9nLnNob3coKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbm90aWZ5SW52aXRhdGlvblJlY2VpdmVkKCkgewotICAgICAgICBSZXNvdXJjZXMgciA9IFJlc291cmNlcy5nZXRTeXN0ZW0oKTsKLSAgICAgICAgZmluYWwgV3BzSW5mbyB3cHMgPSBtU2F2ZWRQZWVyQ29uZmlnLndwczsKLSAgICAgICAgZmluYWwgVmlldyB0ZXh0RW50cnlWaWV3ID0gTGF5b3V0SW5mbGF0ZXIuZnJvbShtQ29udGV4dCkKLSAgICAgICAgICAgICAgICAuaW5mbGF0ZShSLmxheW91dC53aWZpX3AycF9kaWFsb2csIG51bGwpOwotCi0gICAgICAgIFZpZXdHcm91cCBncm91cCA9IChWaWV3R3JvdXApIHRleHRFbnRyeVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaW5mbyk7Ci0gICAgICAgIGFkZFJvd1RvRGlhbG9nKGdyb3VwLCBSLnN0cmluZy53aWZpX3AycF9mcm9tX21lc3NhZ2UsIGdldERldmljZU5hbWUoCi0gICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzKSk7Ci0KLSAgICAgICAgZmluYWwgRWRpdFRleHQgcGluID0gKEVkaXRUZXh0KSB0ZXh0RW50cnlWaWV3LmZpbmRWaWV3QnlJZChSLmlkLndpZmlfcDJwX3dwc19waW4pOwotCi0gICAgICAgIEFsZXJ0RGlhbG9nIGRpYWxvZyA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKG1Db250ZXh0KQotICAgICAgICAgICAgLnNldFRpdGxlKHIuZ2V0U3RyaW5nKFIuc3RyaW5nLndpZmlfcDJwX2ludml0YXRpb25fdG9fY29ubmVjdF90aXRsZSkpCi0gICAgICAgICAgICAuc2V0Vmlldyh0ZXh0RW50cnlWaWV3KQotICAgICAgICAgICAgLnNldFBvc2l0aXZlQnV0dG9uKHIuZ2V0U3RyaW5nKFIuc3RyaW5nLmFjY2VwdCksIG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCB3aGljaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cHMuc2V0dXAgPT0gV3BzSW5mby5LRVlQQUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy53cHMucGluID0gcGluLmdldFRleHQoKS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgYWNjZXB0IGludml0YXRpb24gIiArIG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKFBFRVJfQ09OTkVDVElPTl9VU0VSX0FDQ0VQVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAuc2V0TmVnYXRpdmVCdXR0b24oci5nZXRTdHJpbmcoUi5zdHJpbmcuZGVjbGluZSksIG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IHdoaWNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGlnbm9yZSBjb25uZWN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoUEVFUl9DT05ORUNUSU9OX1VTRVJfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgIC5zZXRPbkNhbmNlbExpc3RlbmVyKG5ldyBEaWFsb2dJbnRlcmZhY2UuT25DYW5jZWxMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DYW5jZWwoRGlhbG9nSW50ZXJmYWNlIGFyZzApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgaWdub3JlIGNvbm5lY3QiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShQRUVSX0NPTk5FQ1RJT05fVVNFUl9SRUpFQ1QpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgLmNyZWF0ZSgpOwotCi0gICAgICAgIC8vbWFrZSB0aGUgZW50ZXIgcGluIGFyZWEgb3IgdGhlIGRpc3BsYXkgcGluIGFyZWEgdmlzaWJsZQotICAgICAgICBzd2l0Y2ggKHdwcy5zZXR1cCkgewotICAgICAgICAgICAgY2FzZSBXcHNJbmZvLktFWVBBRDoKLSAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJFbnRlciBwaW4gc2VjdGlvbiB2aXNpYmxlIik7Ci0gICAgICAgICAgICAgICAgdGV4dEVudHJ5Vmlldy5maW5kVmlld0J5SWQoUi5pZC5lbnRlcl9waW5fc2VjdGlvbikuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXcHNJbmZvLkRJU1BMQVk6Ci0gICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiU2hvd24gcGluIHNlY3Rpb24gdmlzaWJsZSIpOwotICAgICAgICAgICAgICAgIGFkZFJvd1RvRGlhbG9nKGdyb3VwLCBSLnN0cmluZy53aWZpX3AycF9zaG93X3Bpbl9tZXNzYWdlLCB3cHMucGluKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHIuZ2V0Q29uZmlndXJhdGlvbigpLnVpTW9kZSAmIENvbmZpZ3VyYXRpb24uVUlfTU9ERV9UWVBFX0FQUExJQU5DRSkgPT0KLSAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLlVJX01PREVfVFlQRV9BUFBMSUFOQ0UpIHsKLSAgICAgICAgICAgIC8vIEZvciBhcHBsaWFuY2UgZGV2aWNlcywgYWRkIGEga2V5IGxpc3RlbmVyIHdoaWNoIGFjY2VwdHMuCi0gICAgICAgICAgICBkaWFsb2cuc2V0T25LZXlMaXN0ZW5lcihuZXcgRGlhbG9nSW50ZXJmYWNlLk9uS2V5TGlzdGVuZXIoKSB7Ci0KLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbktleShEaWFsb2dJbnRlcmZhY2UgZGlhbG9nLCBpbnQga2V5Q29kZSwgS2V5RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogbWFrZSB0aGUgYWN0dWFsIGtleSBjb21lIGZyb20gYSBjb25maWcgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfVk9MVU1FX01VVEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKFBFRVJfQ09OTkVDVElPTl9VU0VSX0FDQ0VQVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2cuZGlzbWlzcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgLy8gVE9ETzogYWRkIHRpbWVvdXQgZm9yIHRoaXMgZGlhbG9nLgotICAgICAgICAgICAgLy8gVE9ETzogdXBkYXRlIFVJIGluIGFwcGxpYW5jZSBtb2RlIHRvIHRlbGwgdXNlciB3aGF0IHRvIGRvLgotICAgICAgICB9Ci0KLSAgICAgICAgZGlhbG9nLmdldFdpbmRvdygpLnNldFR5cGUoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9TWVNURU1fQUxFUlQpOwotICAgICAgICBkaWFsb2cuc2hvdygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN5bmNocm9uaXplIHRoZSBwZXJzaXN0ZW50IGdyb3VwIGxpc3QgYmV0d2VlbgotICAgICAqIHdwYV9zdXBwbGljYW50IGFuZCBtR3JvdXBzLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVQZXJzaXN0ZW50TmV0d29ya3MoYm9vbGVhbiByZWxvYWQpIHsKLSAgICAgICAgU3RyaW5nIGxpc3RTdHIgPSBtV2lmaU5hdGl2ZS5saXN0TmV0d29ya3MoKTsKLSAgICAgICAgaWYgKGxpc3RTdHIgPT0gbnVsbCkgcmV0dXJuOwotCi0gICAgICAgIGJvb2xlYW4gaXNTYXZlUmVxdWlyZWQgPSBmYWxzZTsKLSAgICAgICAgU3RyaW5nW10gbGluZXMgPSBsaXN0U3RyLnNwbGl0KCJcbiIpOwotICAgICAgICBpZiAobGluZXMgPT0gbnVsbCkgcmV0dXJuOwotCi0gICAgICAgIGlmIChyZWxvYWQpIG1Hcm91cHMuY2xlYXIoKTsKLQotICAgICAgICAvLyBTa2lwIHRoZSBmaXJzdCBsaW5lLCB3aGljaCBpcyBhIGhlYWRlcgotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBTdHJpbmdbXSByZXN1bHQgPSBsaW5lc1tpXS5zcGxpdCgiXHQiKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCB8fCByZXN1bHQubGVuZ3RoIDwgNCkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gbmV0d29yay1pZCB8IHNzaWQgfCBic3NpZCB8IGZsYWdzCi0gICAgICAgICAgICBpbnQgbmV0SWQgPSAtMTsKLSAgICAgICAgICAgIFN0cmluZyBzc2lkID0gcmVzdWx0WzFdOwotICAgICAgICAgICAgU3RyaW5nIGJzc2lkID0gcmVzdWx0WzJdOwotICAgICAgICAgICAgU3RyaW5nIGZsYWdzID0gcmVzdWx0WzNdOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBuZXRJZCA9IEludGVnZXIucGFyc2VJbnQocmVzdWx0WzBdKTsKLSAgICAgICAgICAgIH0gY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmxhZ3MuaW5kZXhPZigiW0NVUlJFTlRdIikgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbGFncy5pbmRleE9mKCJbUDJQLVBFUlNJU1RFTlRdIikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIFRoZSB1bnVzZWQgcHJvZmlsZSBpcyBzb21ldGltZXMgcmVtYWluZWQgd2hlbiB0aGUgcDJwIGdyb3VwIGZvcm1hdGlvbiBpcyBmYWlsZWQuCi0gICAgICAgICAgICAgICAgICogU28sIHdlIGNsZWFuIHVwIHRoZSBwMnAgZ3JvdXAgaGVyZS4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJjbGVhbiB1cCB0aGUgdW51c2VkIHBlcnNpc3RlbnQgZ3JvdXAuIG5ldElkPSIgKyBuZXRJZCk7Ci0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucmVtb3ZlTmV0d29yayhuZXRJZCk7Ci0gICAgICAgICAgICAgICAgaXNTYXZlUmVxdWlyZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUdyb3Vwcy5jb250YWlucyhuZXRJZCkpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgV2lmaVAycEdyb3VwIGdyb3VwID0gbmV3IFdpZmlQMnBHcm91cCgpOwotICAgICAgICAgICAgZ3JvdXAuc2V0TmV0d29ya0lkKG5ldElkKTsKLSAgICAgICAgICAgIGdyb3VwLnNldE5ldHdvcmtOYW1lKHNzaWQpOwotICAgICAgICAgICAgU3RyaW5nIG1vZGUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsICJtb2RlIik7Ci0gICAgICAgICAgICBpZiAobW9kZSAhPSBudWxsICYmIG1vZGUuZXF1YWxzKCIzIikpIHsKLSAgICAgICAgICAgICAgICBncm91cC5zZXRJc0dyb3VwT3duZXIodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYnNzaWQuZXF1YWxzSWdub3JlQ2FzZShtVGhpc0RldmljZS5kZXZpY2VBZGRyZXNzKSkgewotICAgICAgICAgICAgICAgIGdyb3VwLnNldE93bmVyKG1UaGlzRGV2aWNlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgV2lmaVAycERldmljZSBkZXZpY2UgPSBuZXcgV2lmaVAycERldmljZSgpOwotICAgICAgICAgICAgICAgIGRldmljZS5kZXZpY2VBZGRyZXNzID0gYnNzaWQ7Ci0gICAgICAgICAgICAgICAgZ3JvdXAuc2V0T3duZXIoZGV2aWNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Hcm91cHMuYWRkKGdyb3VwKTsKLSAgICAgICAgICAgIGlzU2F2ZVJlcXVpcmVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWxvYWQgfHwgaXNTYXZlUmVxdWlyZWQpIHsKLSAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNhdmVDb25maWcoKTsKLSAgICAgICAgICAgIHNlbmRQMnBQZXJzaXN0ZW50R3JvdXBzQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQSBjb25maWcgaXMgdmFsaWQgaWYgaXQgaGFzIGEgcGVlciBhZGRyZXNzIHRoYXQgaGFzIGFscmVhZHkgYmVlbgotICAgICAqIGRpc2NvdmVyZWQKLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgaXQgaXMgaW52YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzQ29uZmlnSW52YWxpZChXaWZpUDJwQ29uZmlnIGNvbmZpZykgewotICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoY29uZmlnLmRldmljZUFkZHJlc3MpKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG1QZWVycy5nZXQoY29uZmlnLmRldmljZUFkZHJlc3MpID09IG51bGwpIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyogVE9ETzogVGhlIHN1cHBsaWNhbnQgZG9lcyBub3QgcHJvdmlkZSBncm91cCBjYXBhYmlsaXR5IGNoYW5nZXMgYXMgYW4gZXZlbnQuCi0gICAgICogSGF2aW5nIGl0IHB1c2hlZCBhcyBhbiBldmVudCB3b3VsZCBhdm9pZCBwb2xsaW5nIGZvciB0aGlzIGluZm9ybWF0aW9uIHJpZ2h0Ci0gICAgICogYmVmb3JlIGEgY29ubmVjdGlvbgotICAgICAqLwotICAgIHByaXZhdGUgV2lmaVAycERldmljZSBmZXRjaEN1cnJlbnREZXZpY2VEZXRhaWxzKFdpZmlQMnBDb25maWcgY29uZmlnKSB7Ci0gICAgICAgIC8qIEZldGNoICYgdXBkYXRlIGdyb3VwIGNhcGFiaWxpdHkgZnJvbSBzdXBwbGljYW50IG9uIHRoZSBkZXZpY2UgKi8KLSAgICAgICAgaW50IGdjID0gbVdpZmlOYXRpdmUuZ2V0R3JvdXBDYXBhYmlsaXR5KGNvbmZpZy5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgbVBlZXJzLnVwZGF0ZUdyb3VwQ2FwYWJpbGl0eShjb25maWcuZGV2aWNlQWRkcmVzcywgZ2MpOwotICAgICAgICByZXR1cm4gbVBlZXJzLmdldChjb25maWcuZGV2aWNlQWRkcmVzcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RhcnQgYSBwMnAgZ3JvdXAgbmVnb3RpYXRpb24gYW5kIGRpc3BsYXkgcGluIGlmIG5lY2Vzc2FyeQotICAgICAqIEBwYXJhbSBjb25maWcgZm9yIHRoZSBwZWVyCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHAycENvbm5lY3RXaXRoUGluRGlzcGxheShXaWZpUDJwQ29uZmlnIGNvbmZpZykgewotICAgICAgICBXaWZpUDJwRGV2aWNlIGRldiA9IGZldGNoQ3VycmVudERldmljZURldGFpbHMoY29uZmlnKTsKLQotICAgICAgICBTdHJpbmcgcGluID0gbVdpZmlOYXRpdmUucDJwQ29ubmVjdChjb25maWcsIGRldi5pc0dyb3VwT3duZXIoKSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KHBpbik7Ci0gICAgICAgICAgICBub3RpZnlJbnZpdGF0aW9uU2VudChwaW4sIGNvbmZpZy5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGlnbm9yZSkgewotICAgICAgICAgICAgLy8gZG8gbm90aGluZyBpZiBwMnBDb25uZWN0IGRpZCBub3QgcmV0dXJuIGEgcGluCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWludm9rZSBhIHBlcnNpc3RlbnQgZ3JvdXAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY29uZmlnIGZvciB0aGUgcGVlcgotICAgICAqIEByZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIHJlaW52b2tlUGVyc2lzdGVudEdyb3VwKFdpZmlQMnBDb25maWcgY29uZmlnKSB7Ci0gICAgICAgIFdpZmlQMnBEZXZpY2UgZGV2ID0gZmV0Y2hDdXJyZW50RGV2aWNlRGV0YWlscyhjb25maWcpOwotCi0gICAgICAgIGJvb2xlYW4gam9pbiA9IGRldi5pc0dyb3VwT3duZXIoKTsKLSAgICAgICAgU3RyaW5nIHNzaWQgPSBtV2lmaU5hdGl2ZS5wMnBHZXRTc2lkKGRldi5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgaWYgKERCRykgbG9nZCgidGFyZ2V0IHNzaWQgaXMgIiArIHNzaWQgKyAiIGpvaW46IiArIGpvaW4pOwotCi0gICAgICAgIGlmIChqb2luICYmIGRldi5pc0dyb3VwTGltaXQoKSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZCgidGFyZ2V0IGRldmljZSByZWFjaGVzIGdyb3VwIGxpbWl0LiIpOwotCi0gICAgICAgICAgICAvLyBpZiB0aGUgdGFyZ2V0IGdyb3VwIGhhcyByZWFjaGVkIHRoZSBsaW1pdCwKLSAgICAgICAgICAgIC8vIHRyeSBncm91cCBmb3JtYXRpb24uCi0gICAgICAgICAgICBqb2luID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoam9pbikgewotICAgICAgICAgICAgaW50IG5ldElkID0gbUdyb3Vwcy5nZXROZXR3b3JrSWQoZGV2LmRldmljZUFkZHJlc3MsIHNzaWQpOwotICAgICAgICAgICAgaWYgKG5ldElkID49IDApIHsKLSAgICAgICAgICAgICAgICAvLyBTa2lwIFdQUyBhbmQgc3RhcnQgNHdheSBoYW5kc2hha2UgaW1tZWRpYXRlbHkuCi0gICAgICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5wMnBHcm91cEFkZChuZXRJZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICgham9pbiAmJiBkZXYuaXNEZXZpY2VMaW1pdCgpKSB7Ci0gICAgICAgICAgICBsb2dlKCJ0YXJnZXQgZGV2aWNlIHJlYWNoZXMgdGhlIGRldmljZSBsaW1pdC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgham9pbiAmJiBkZXYuaXNJbnZpdGF0aW9uQ2FwYWJsZSgpKSB7Ci0gICAgICAgICAgICBpbnQgbmV0SWQgPSBXaWZpUDJwR3JvdXAuUEVSU0lTVEVOVF9ORVRfSUQ7Ci0gICAgICAgICAgICBpZiAoY29uZmlnLm5ldElkID49IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmRldmljZUFkZHJlc3MuZXF1YWxzKG1Hcm91cHMuZ2V0T3duZXJBZGRyKGNvbmZpZy5uZXRJZCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ldElkID0gY29uZmlnLm5ldElkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbmV0SWQgPSBtR3JvdXBzLmdldE5ldHdvcmtJZChkZXYuZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobmV0SWQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgbmV0SWQgPSBnZXROZXR3b3JrSWRGcm9tQ2xpZW50TGlzdChkZXYuZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJuZXRJZCByZWxhdGVkIHdpdGggIiArIGRldi5kZXZpY2VBZGRyZXNzICsgIiA9ICIgKyBuZXRJZCk7Ci0gICAgICAgICAgICBpZiAobmV0SWQgPj0gMCkgewotICAgICAgICAgICAgICAgIC8vIEludm9rZSB0aGUgcGVyc2lzdGVudCBncm91cC4KLSAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwUmVpbnZva2UobmV0SWQsIGRldi5kZXZpY2VBZGRyZXNzKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIG5ldHdvcmsgaWQuIEl0J2xsIGJlIHVzZWQgd2hlbiBhbiBpbnZpdGF0aW9uIHJlc3VsdCBldmVudCBpcyByZWNlaXZlZC4KLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLm5ldElkID0gbmV0SWQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoInAycFJlaW52b2tlKCkgZmFpbGVkLCB1cGRhdGUgbmV0d29ya3MiKTsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlUGVyc2lzdGVudE5ldHdvcmtzKFJFTE9BRCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBuZXR3b3JrIGlkIG9mIHRoZSBncm91cCBvd25lciBwcm9maWxlIHdoaWNoIGhhcyB0aGUgcDJwIGNsaWVudCB3aXRoCi0gICAgICogdGhlIHNwZWNpZmllZCBkZXZpY2UgYWRkcmVzcyBpbiBpdCdzIGNsaWVudCBsaXN0LgotICAgICAqIElmIG1vcmUgdGhhbiBvbmUgcGVyc2lzdGVudCBncm91cCBvZiB0aGUgc2FtZSBhZGRyZXNzIGlzIHByZXNlbnQgaW4gaXRzIGNsaWVudAotICAgICAqIGxpc3RzLCByZXR1cm4gdGhlIGZpcnN0IG9uZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkZXZpY2VBZGRyZXNzIHAycCBkZXZpY2UgYWRkcmVzcy4KLSAgICAgKiBAcmV0dXJuIHRoZSBuZXR3b3JrIGlkLiBpZiBub3QgZm91bmQsIHJldHVybiAtMS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGludCBnZXROZXR3b3JrSWRGcm9tQ2xpZW50TGlzdChTdHJpbmcgZGV2aWNlQWRkcmVzcykgewotICAgICAgICBpZiAoZGV2aWNlQWRkcmVzcyA9PSBudWxsKSByZXR1cm4gLTE7Ci0KLSAgICAgICAgQ29sbGVjdGlvbjxXaWZpUDJwR3JvdXA+IGdyb3VwcyA9IG1Hcm91cHMuZ2V0R3JvdXBMaXN0KCk7Ci0gICAgICAgIGZvciAoV2lmaVAycEdyb3VwIGdyb3VwIDogZ3JvdXBzKSB7Ci0gICAgICAgICAgICBpbnQgbmV0SWQgPSBncm91cC5nZXROZXR3b3JrSWQoKTsKLSAgICAgICAgICAgIFN0cmluZ1tdIHAycENsaWVudExpc3QgPSBnZXRDbGllbnRMaXN0KG5ldElkKTsKLSAgICAgICAgICAgIGlmIChwMnBDbGllbnRMaXN0ID09IG51bGwpIGNvbnRpbnVlOwotICAgICAgICAgICAgZm9yIChTdHJpbmcgY2xpZW50IDogcDJwQ2xpZW50TGlzdCkgewotICAgICAgICAgICAgICAgIGlmIChkZXZpY2VBZGRyZXNzLmVxdWFsc0lnbm9yZUNhc2UoY2xpZW50KSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV0SWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gcDJwIGNsaWVudCBsaXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgaWQuCi0gICAgICogQHBhcmFtIG5ldElkIG5ldHdvcmsgaWQuCi0gICAgICogQHJldHVybiBwMnAgY2xpZW50IGxpc3QuIGlmIG5vdCBmb3VuZCwgcmV0dXJuIG51bGwuCi0gICAgICovCi0gICAgcHJpdmF0ZSBTdHJpbmdbXSBnZXRDbGllbnRMaXN0KGludCBuZXRJZCkgewotICAgICAgICBTdHJpbmcgcDJwQ2xpZW50cyA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgInAycF9jbGllbnRfbGlzdCIpOwotICAgICAgICBpZiAocDJwQ2xpZW50cyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcDJwQ2xpZW50cy5zcGxpdCgiICIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIHAycCBjbGllbnQgZnJvbSB0aGUgc3BlY2lmaWVkIHByb2ZpbGUuCi0gICAgICogQHBhcmFtIG5ldElkIG5ldHdvcmsgaWQgb2YgdGhlIHByb2ZpbGUuCi0gICAgICogQHBhcmFtIGFkZHIgcDJwIGNsaWVudCBhZGRyZXNzIHRvIGJlIHJlbW92ZWQuCi0gICAgICogQHBhcmFtIGlzUmVtb3ZhYmxlIGlmIHRydWUsIHJlbW92ZSB0aGUgc3BlY2lmaWVkIHByb2ZpbGUgaWYgaXRzIGNsaWVudCBsaXN0IGJlY29tZXMgZW1wdHkuCi0gICAgICogQHJldHVybiB3aGV0aGVyIHJlbW92aW5nIHRoZSBzcGVjaWZpZWQgcDJwIGNsaWVudCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gcmVtb3ZlQ2xpZW50RnJvbUxpc3QoaW50IG5ldElkLCBTdHJpbmcgYWRkciwgYm9vbGVhbiBpc1JlbW92YWJsZSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIG1vZGlmaWVkQ2xpZW50TGlzdCA9ICBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICBTdHJpbmdbXSBjdXJyZW50Q2xpZW50TGlzdCA9IGdldENsaWVudExpc3QobmV0SWQpOwotICAgICAgICBib29sZWFuIGlzQ2xpZW50UmVtb3ZlZCA9IGZhbHNlOwotICAgICAgICBpZiAoY3VycmVudENsaWVudExpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgZm9yIChTdHJpbmcgY2xpZW50IDogY3VycmVudENsaWVudExpc3QpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNsaWVudC5lcXVhbHNJZ25vcmVDYXNlKGFkZHIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkQ2xpZW50TGlzdC5hcHBlbmQoIiAiKTsKLSAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRDbGllbnRMaXN0LmFwcGVuZChjbGllbnQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzQ2xpZW50UmVtb3ZlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChtb2RpZmllZENsaWVudExpc3QubGVuZ3RoKCkgPT0gMCAmJiBpc1JlbW92YWJsZSkgewotICAgICAgICAgICAgLy8gdGhlIGNsaWVudCBsaXN0IGlzIGVtcHR5LiBzbyByZW1vdmUgaXQuCi0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJSZW1vdmUgdW5rbm93biBuZXR3b3JrIik7Ci0gICAgICAgICAgICBtR3JvdXBzLnJlbW92ZShuZXRJZCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNDbGllbnRSZW1vdmVkKSB7Ci0gICAgICAgICAgICAvLyBzcGVjaWZpZWQgcDJwIGNsaWVudCBpcyBub3QgZm91bmQuIGFscmVhZHkgcmVtb3ZlZC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChEQkcpIGxvZ2QoIk1vZGlmaWVkIGNsaWVudCBsaXN0OiAiICsgbW9kaWZpZWRDbGllbnRMaXN0KTsKLSAgICAgICAgaWYgKG1vZGlmaWVkQ2xpZW50TGlzdC5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgICAgICBtb2RpZmllZENsaWVudExpc3QuYXBwZW5kKCJcIlwiIik7Ci0gICAgICAgIH0KLSAgICAgICAgbVdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKG5ldElkLAotICAgICAgICAgICAgICAgICJwMnBfY2xpZW50X2xpc3QiLCBtb2RpZmllZENsaWVudExpc3QudG9TdHJpbmcoKSk7Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNhdmVDb25maWcoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldFdpZmlQMnBJbmZvT25Hcm91cEZvcm1hdGlvbihJbmV0QWRkcmVzcyBzZXJ2ZXJJbmV0QWRkcmVzcykgewotICAgICAgICBtV2lmaVAycEluZm8uZ3JvdXBGb3JtZWQgPSB0cnVlOwotICAgICAgICBtV2lmaVAycEluZm8uaXNHcm91cE93bmVyID0gbUdyb3VwLmlzR3JvdXBPd25lcigpOwotICAgICAgICBtV2lmaVAycEluZm8uZ3JvdXBPd25lckFkZHJlc3MgPSBzZXJ2ZXJJbmV0QWRkcmVzczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVzZXRXaWZpUDJwSW5mbygpIHsKLSAgICAgICAgbVdpZmlQMnBJbmZvLmdyb3VwRm9ybWVkID0gZmFsc2U7Ci0gICAgICAgIG1XaWZpUDJwSW5mby5pc0dyb3VwT3duZXIgPSBmYWxzZTsKLSAgICAgICAgbVdpZmlQMnBJbmZvLmdyb3VwT3duZXJBZGRyZXNzID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBnZXREZXZpY2VOYW1lKFN0cmluZyBkZXZpY2VBZGRyZXNzKSB7Ci0gICAgICAgIFdpZmlQMnBEZXZpY2UgZCA9IG1QZWVycy5nZXQoZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgIGlmIChkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZC5kZXZpY2VOYW1lOwotICAgICAgICB9Ci0gICAgICAgIC8vVHJlYXQgdGhlIGFkZHJlc3MgYXMgbmFtZSBpZiB0aGVyZSBpcyBubyBtYXRjaAotICAgICAgICByZXR1cm4gZGV2aWNlQWRkcmVzczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBnZXRQZXJzaXN0ZWREZXZpY2VOYW1lKCkgewotICAgICAgICBTdHJpbmcgZGV2aWNlTmFtZSA9IFNldHRpbmdzLkdsb2JhbC5nZXRTdHJpbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfUDJQX0RFVklDRV9OQU1FKTsKLSAgICAgICAgaWYgKGRldmljZU5hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgLyogV2UgdXNlIHRoZSA0IGRpZ2l0cyBvZiB0aGUgQU5EUk9JRF9JRCB0byBoYXZlIGEgZnJpZW5kbHkKLSAgICAgICAgICAgICAqIGRlZmF1bHQgdGhhdCBoYXMgbG93IGxpa2VsaWhvb2Qgb2YgY29sbGlzaW9uIHdpdGggYSBwZWVyICovCi0gICAgICAgICAgICBTdHJpbmcgaWQgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0U3RyaW5nKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQU5EUk9JRF9JRCk7Ci0gICAgICAgICAgICByZXR1cm4gIkFuZHJvaWRfIiArIGlkLnN1YnN0cmluZygwLDQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBkZXZpY2VOYW1lOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBzZXRBbmRQZXJzaXN0RGV2aWNlTmFtZShTdHJpbmcgZGV2TmFtZSkgewotICAgICAgICBpZiAoZGV2TmFtZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXREZXZpY2VOYW1lKGRldk5hbWUpKSB7Ci0gICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IGRldmljZSBuYW1lICIgKyBkZXZOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1UaGlzRGV2aWNlLmRldmljZU5hbWUgPSBkZXZOYW1lOwotICAgICAgICBtV2lmaU5hdGl2ZS5zZXRQMnBTc2lkUG9zdGZpeCgiLSIgKyBtVGhpc0RldmljZS5kZXZpY2VOYW1lKTsKLQotICAgICAgICBTZXR0aW5ncy5HbG9iYWwucHV0U3RyaW5nKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1AyUF9ERVZJQ0VfTkFNRSwgZGV2TmFtZSk7Ci0gICAgICAgIHNlbmRUaGlzRGV2aWNlQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gc2V0V2ZkSW5mbyhXaWZpUDJwV2ZkSW5mbyB3ZmRJbmZvKSB7Ci0gICAgICAgIGJvb2xlYW4gc3VjY2VzczsKLQotICAgICAgICBpZiAoIXdmZEluZm8uaXNXZmRFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBtV2lmaU5hdGl2ZS5zZXRXZmRFbmFibGUoZmFsc2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3VjY2VzcyA9Ci0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0V2ZkRW5hYmxlKHRydWUpCi0gICAgICAgICAgICAgICAgJiYgbVdpZmlOYXRpdmUuc2V0V2ZkRGV2aWNlSW5mbyh3ZmRJbmZvLmdldERldmljZUluZm9IZXgoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgd2ZkIHByb3BlcnRpZXMiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1UaGlzRGV2aWNlLndmZEluZm8gPSB3ZmRJbmZvOwotICAgICAgICBzZW5kVGhpc0RldmljZUNoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVQMnBTZXR0aW5ncygpIHsKLSAgICAgICAgbVdpZmlOYXRpdmUuc2V0UGVyc2lzdGVudFJlY29ubmVjdCh0cnVlKTsKLSAgICAgICAgbVRoaXNEZXZpY2UuZGV2aWNlTmFtZSA9IGdldFBlcnNpc3RlZERldmljZU5hbWUoKTsKLSAgICAgICAgbVdpZmlOYXRpdmUuc2V0RGV2aWNlTmFtZShtVGhpc0RldmljZS5kZXZpY2VOYW1lKTsKLSAgICAgICAgLy8gRElSRUNULVhZLURFVklDRU5BTUUgKFhZIGlzIHJhbmRvbWx5IGdlbmVyYXRlZCkKLSAgICAgICAgbVdpZmlOYXRpdmUuc2V0UDJwU3NpZFBvc3RmaXgoIi0iICsgbVRoaXNEZXZpY2UuZGV2aWNlTmFtZSk7Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNldERldmljZVR5cGUobVRoaXNEZXZpY2UucHJpbWFyeURldmljZVR5cGUpOwotICAgICAgICAvLyBTdXBwbGljYW50IGRlZmF1bHRzIHRvIHVzaW5nIHZpcnR1YWwgZGlzcGxheSB3aXRoIGRpc3BsYXkKLSAgICAgICAgLy8gd2hpY2ggcmVmZXJzIHRvIGEgcmVtb3RlIGRpc3BsYXkuIFVzZSBwaHlzaWNhbF9kaXNwbGF5Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNldENvbmZpZ01ldGhvZHMoInZpcnR1YWxfcHVzaF9idXR0b24gcGh5c2ljYWxfZGlzcGxheSBrZXlwYWQiKTsKLSAgICAgICAgLy8gU1RBIGhhcyBoaWdoZXIgcHJpb3JpdHkgb3ZlciBQMlAKLSAgICAgICAgbVdpZmlOYXRpdmUuc2V0Q29uY3VycmVuY3lQcmlvcml0eSgic3RhIik7Ci0KLSAgICAgICAgbVRoaXNEZXZpY2UuZGV2aWNlQWRkcmVzcyA9IG1XaWZpTmF0aXZlLnAycEdldERldmljZUFkZHJlc3MoKTsKLSAgICAgICAgdXBkYXRlVGhpc0RldmljZShXaWZpUDJwRGV2aWNlLkFWQUlMQUJMRSk7Ci0gICAgICAgIGlmIChEQkcpIGxvZ2QoIkRldmljZUFkZHJlc3M6ICIgKyBtVGhpc0RldmljZS5kZXZpY2VBZGRyZXNzKTsKLQotICAgICAgICBtQ2xpZW50SW5mb0xpc3QuY2xlYXIoKTsKLSAgICAgICAgbVdpZmlOYXRpdmUucDJwRmx1c2goKTsKLSAgICAgICAgbVdpZmlOYXRpdmUucDJwU2VydmljZUZsdXNoKCk7Ci0gICAgICAgIG1TZXJ2aWNlVHJhbnNhY3Rpb25JZCA9IDA7Ci0gICAgICAgIG1TZXJ2aWNlRGlzY1JlcUlkID0gbnVsbDsKLQotICAgICAgICBTdHJpbmcgY291bnRyeUNvZGUgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0U3RyaW5nKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX0NPVU5UUllfQ09ERSk7Ci0gICAgICAgIGlmIChjb3VudHJ5Q29kZSAhPSBudWxsICYmICFjb3VudHJ5Q29kZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1QMnBTdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoU0VUX0NPVU5UUllfQ09ERSwgY291bnRyeUNvZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlUGVyc2lzdGVudE5ldHdvcmtzKFJFTE9BRCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRoaXNEZXZpY2UoaW50IHN0YXR1cykgewotICAgICAgICBtVGhpc0RldmljZS5zdGF0dXMgPSBzdGF0dXM7Ci0gICAgICAgIHNlbmRUaGlzRGV2aWNlQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBoYW5kbGVHcm91cENyZWF0aW9uRmFpbHVyZSgpIHsKLSAgICAgICAgcmVzZXRXaWZpUDJwSW5mbygpOwotICAgICAgICBtTmV0d29ya0luZm8uc2V0RGV0YWlsZWRTdGF0ZShOZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlLkZBSUxFRCwgbnVsbCwgbnVsbCk7Ci0gICAgICAgIHNlbmRQMnBDb25uZWN0aW9uQ2hhbmdlZEJyb2FkY2FzdCgpOwotCi0gICAgICAgIC8vIFJlbW92ZSBvbmx5IHRoZSBwZWVyIHdlIGZhaWxlZCB0byBjb25uZWN0IHRvIHNvIHRoYXQgb3RoZXIgZGV2aWNlcyBkaXNjb3ZlcmVkCi0gICAgICAgIC8vIHRoYXQgaGF2ZSBub3QgdGltZWQgb3V0IHN0aWxsIHJlbWFpbiBpbiBsaXN0IGZvciBjb25uZWN0aW9uCi0gICAgICAgIGJvb2xlYW4gcGVlcnNDaGFuZ2VkID0gbVBlZXJzLnJlbW92ZShtUGVlcnNMb3N0RHVyaW5nQ29ubmVjdGlvbik7Ci0gICAgICAgIGlmIChtUGVlcnMucmVtb3ZlKG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcykgIT0gbnVsbCkgewotICAgICAgICAgICAgcGVlcnNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocGVlcnNDaGFuZ2VkKSB7Ci0gICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtUGVlcnNMb3N0RHVyaW5nQ29ubmVjdGlvbi5jbGVhcigpOwotICAgICAgICBtU2VydmljZURpc2NSZXFJZCA9IG51bGw7Ci0gICAgICAgIHNlbmRNZXNzYWdlKFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1BFRVJTKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaGFuZGxlR3JvdXBSZW1vdmVkKCkgewotICAgICAgICBpZiAobUdyb3VwLmlzR3JvdXBPd25lcigpKSB7Ci0gICAgICAgICAgICBzdG9wRGhjcFNlcnZlcihtR3JvdXAuZ2V0SW50ZXJmYWNlKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZCgic3RvcCBESENQIGNsaWVudCIpOwotICAgICAgICAgICAgbURoY3BTdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoRGhjcFN0YXRlTWFjaGluZS5DTURfU1RPUF9ESENQKTsKLSAgICAgICAgICAgIG1EaGNwU3RhdGVNYWNoaW5lLmRvUXVpdCgpOwotICAgICAgICAgICAgbURoY3BTdGF0ZU1hY2hpbmUgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1Od1NlcnZpY2UuY2xlYXJJbnRlcmZhY2VBZGRyZXNzZXMobUdyb3VwLmdldEludGVyZmFjZSgpKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBjbGVhciBhZGRyZXNzZXMgIiArIGUpOwotICAgICAgICB9Ci0gICAgICAgIE5ldHdvcmtVdGlscy5yZXNldENvbm5lY3Rpb25zKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSwgTmV0d29ya1V0aWxzLlJFU0VUX0FMTF9BRERSRVNTRVMpOwotCi0gICAgICAgIC8vIENsZWFyIGFueSB0aW1lb3V0IHRoYXQgd2FzIHNldC4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIGRldmljZXMKLSAgICAgICAgLy8gdGhhdCByZXVzZSB0aGUgbWFpbiBwMnAgaW50ZXJmYWNlIGZvciBhIGNyZWF0ZWQgZ3JvdXAuCi0gICAgICAgIG1XaWZpTmF0aXZlLnNldFAycEdyb3VwSWRsZShtR3JvdXAuZ2V0SW50ZXJmYWNlKCksIDApOwotCi0gICAgICAgIGJvb2xlYW4gcGVlcnNDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIC8vIFJlbW92ZSBvbmx5IHBlZXJzIHBhcnQgb2YgdGhlIGdyb3VwLCBzbyB0aGF0IG90aGVyIGRldmljZXMgZGlzY292ZXJlZAotICAgICAgICAvLyB0aGF0IGhhdmUgbm90IHRpbWVkIG91dCBzdGlsbCByZW1haW4gaW4gbGlzdCBmb3IgY29ubmVjdGlvbgotICAgICAgICBmb3IgKFdpZmlQMnBEZXZpY2UgZCA6IG1Hcm91cC5nZXRDbGllbnRMaXN0KCkpIHsKLSAgICAgICAgICAgIGlmIChtUGVlcnMucmVtb3ZlKGQpKSBwZWVyc0NoYW5nZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtUGVlcnMucmVtb3ZlKG1Hcm91cC5nZXRPd25lcigpKSkgcGVlcnNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1QZWVycy5yZW1vdmUobVBlZXJzTG9zdER1cmluZ0Nvbm5lY3Rpb24pKSBwZWVyc0NoYW5nZWQgPSB0cnVlOwotICAgICAgICBpZiAocGVlcnNDaGFuZ2VkKSB7Ci0gICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtR3JvdXAgPSBudWxsOwotICAgICAgICBtUGVlcnNMb3N0RHVyaW5nQ29ubmVjdGlvbi5jbGVhcigpOwotICAgICAgICBtU2VydmljZURpc2NSZXFJZCA9IG51bGw7Ci0KLSAgICAgICAgaWYgKG1UZW1wb2FyaWx5RGlzY29ubmVjdGVkV2lmaSkgewotICAgICAgICAgICAgbVdpZmlDaGFubmVsLnNlbmRNZXNzYWdlKFdpZmlQMnBTZXJ2aWNlLkRJU0NPTk5FQ1RfV0lGSV9SRVFVRVNULCAwKTsKLSAgICAgICAgICAgIG1UZW1wb2FyaWx5RGlzY29ubmVjdGVkV2lmaSA9IGZhbHNlOwotICAgICAgICB9Ci0gICB9Ci0KLSAgICAvL1N0YXRlIG1hY2hpbmUgaW5pdGlhdGVkIHJlcXVlc3RzIGNhbiBoYXZlIHJlcGx5VG8gc2V0IHRvIG51bGwgaW5kaWNhdGluZwotICAgIC8vdGhlcmUgYXJlIG5vIHJlY2lwaWVudHMsIHdlIGlnbm9yZSB0aG9zZSByZXBseSBhY3Rpb25zCi0gICAgcHJpdmF0ZSB2b2lkIHJlcGx5VG9NZXNzYWdlKE1lc3NhZ2UgbXNnLCBpbnQgd2hhdCkgewotICAgICAgICBpZiAobXNnLnJlcGx5VG8gPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICBNZXNzYWdlIGRzdE1zZyA9IG9idGFpbk1lc3NhZ2UobXNnKTsKLSAgICAgICAgZHN0TXNnLndoYXQgPSB3aGF0OwotICAgICAgICBtUmVwbHlDaGFubmVsLnJlcGx5VG9NZXNzYWdlKG1zZywgZHN0TXNnKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVwbHlUb01lc3NhZ2UoTWVzc2FnZSBtc2csIGludCB3aGF0LCBpbnQgYXJnMSkgewotICAgICAgICBpZiAobXNnLnJlcGx5VG8gPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICBNZXNzYWdlIGRzdE1zZyA9IG9idGFpbk1lc3NhZ2UobXNnKTsKLSAgICAgICAgZHN0TXNnLndoYXQgPSB3aGF0OwotICAgICAgICBkc3RNc2cuYXJnMSA9IGFyZzE7Ci0gICAgICAgIG1SZXBseUNoYW5uZWwucmVwbHlUb01lc3NhZ2UobXNnLCBkc3RNc2cpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZXBseVRvTWVzc2FnZShNZXNzYWdlIG1zZywgaW50IHdoYXQsIE9iamVjdCBvYmopIHsKLSAgICAgICAgaWYgKG1zZy5yZXBseVRvID09IG51bGwpIHJldHVybjsKLSAgICAgICAgTWVzc2FnZSBkc3RNc2cgPSBvYnRhaW5NZXNzYWdlKG1zZyk7Ci0gICAgICAgIGRzdE1zZy53aGF0ID0gd2hhdDsKLSAgICAgICAgZHN0TXNnLm9iaiA9IG9iajsKLSAgICAgICAgbVJlcGx5Q2hhbm5lbC5yZXBseVRvTWVzc2FnZShtc2csIGRzdE1zZyk7Ci0gICAgfQotCi0gICAgLyogYXJnMiBvbiB0aGUgc291cmNlIG1lc3NhZ2UgaGFzIGEgaGFzaCBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgcmV0YWluZWQgaW4gcmVwbGllcwotICAgICAqIHNlZSBXaWZpUDJwTWFuYWdlciBmb3IgZGV0YWlscyAqLwotICAgIHByaXZhdGUgTWVzc2FnZSBvYnRhaW5NZXNzYWdlKE1lc3NhZ2Ugc3JjTXNnKSB7Ci0gICAgICAgIE1lc3NhZ2UgbXNnID0gTWVzc2FnZS5vYnRhaW4oKTsKLSAgICAgICAgbXNnLmFyZzIgPSBzcmNNc2cuYXJnMjsKLSAgICAgICAgcmV0dXJuIG1zZzsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBsb2dkKFN0cmluZyBzKSB7Ci0gICAgICAgIFNsb2cuZChUQUcsIHMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGxvZ2UoU3RyaW5nIHMpIHsKLSAgICAgICAgU2xvZy5lKFRBRywgcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXBkYXRlIHNlcnZpY2UgZGlzY292ZXJ5IHJlcXVlc3QgdG8gd3BhX3N1cHBsaWNhbnQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIHVwZGF0ZVN1cHBsaWNhbnRTZXJ2aWNlUmVxdWVzdCgpIHsKLSAgICAgICAgY2xlYXJTdXBwbGljYW50U2VydmljZVJlcXVlc3QoKTsKLQotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGZvciAoQ2xpZW50SW5mbyBjOiBtQ2xpZW50SW5mb0xpc3QudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGludCBrZXk7Ci0gICAgICAgICAgICBXaWZpUDJwU2VydmljZVJlcXVlc3QgcmVxOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYy5tUmVxTGlzdC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIHJlcSA9IGMubVJlcUxpc3QudmFsdWVBdChpKTsKLSAgICAgICAgICAgICAgICBpZiAocmVxICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKHJlcS5nZXRTdXBwbGljYW50UXVlcnkoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNiLmxlbmd0aCgpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TZXJ2aWNlRGlzY1JlcUlkID0gbVdpZmlOYXRpdmUucDJwU2VydkRpc2NSZXEoIjAwOjAwOjAwOjAwOjAwOjAwIiwgc2IudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChtU2VydmljZURpc2NSZXFJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xlYXIgc2VydmljZSBkaXNjb3ZlcnkgcmVxdWVzdCBpbiB3cGFfc3VwcGxpY2FudAotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBjbGVhclN1cHBsaWNhbnRTZXJ2aWNlUmVxdWVzdCgpIHsKLSAgICAgICAgaWYgKG1TZXJ2aWNlRGlzY1JlcUlkID09IG51bGwpIHJldHVybjsKLQotICAgICAgICBtV2lmaU5hdGl2ZS5wMnBTZXJ2RGlzY0NhbmNlbFJlcShtU2VydmljZURpc2NSZXFJZCk7Ci0gICAgICAgIG1TZXJ2aWNlRGlzY1JlcUlkID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKiBUT0RPOiBXZSBjb3VsZCB0cmFjayBpbmRpdmlkdWFsIHNlcnZpY2UgYWRkcyBzZXBhcmF0ZWx5IGFuZCBhdm9pZAotICAgICAqIGhhdmluZyB0byBkbyB1cGRhdGUgYWxsIHNlcnZpY2UgcmVxdWVzdHMgb24gZXZlcnkgbmV3IHJlcXVlc3QKLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gYWRkU2VydmljZVJlcXVlc3QoTWVzc2VuZ2VyIG0sIFdpZmlQMnBTZXJ2aWNlUmVxdWVzdCByZXEpIHsKLSAgICAgICAgY2xlYXJDbGllbnREZWFkQ2hhbm5lbHMoKTsKLSAgICAgICAgQ2xpZW50SW5mbyBjbGllbnRJbmZvID0gZ2V0Q2xpZW50SW5mbyhtLCB0cnVlKTsKLSAgICAgICAgaWYgKGNsaWVudEluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgKyttU2VydmljZVRyYW5zYWN0aW9uSWQ7Ci0gICAgICAgIC8vVGhlIFdpLUZpIHAycCBzcGVjIHNheXMgdHJhbnNhY3Rpb24gaWQgc2hvdWxkIGJlIG5vbi16ZXJvCi0gICAgICAgIGlmIChtU2VydmljZVRyYW5zYWN0aW9uSWQgPT0gMCkgKyttU2VydmljZVRyYW5zYWN0aW9uSWQ7Ci0gICAgICAgIHJlcS5zZXRUcmFuc2FjdGlvbklkKG1TZXJ2aWNlVHJhbnNhY3Rpb25JZCk7Ci0gICAgICAgIGNsaWVudEluZm8ubVJlcUxpc3QucHV0KG1TZXJ2aWNlVHJhbnNhY3Rpb25JZCwgcmVxKTsKLQotICAgICAgICBpZiAobVNlcnZpY2VEaXNjUmVxSWQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdXBkYXRlU3VwcGxpY2FudFNlcnZpY2VSZXF1ZXN0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlbW92ZVNlcnZpY2VSZXF1ZXN0KE1lc3NlbmdlciBtLCBXaWZpUDJwU2VydmljZVJlcXVlc3QgcmVxKSB7Ci0gICAgICAgIENsaWVudEluZm8gY2xpZW50SW5mbyA9IGdldENsaWVudEluZm8obSwgZmFsc2UpOwotICAgICAgICBpZiAoY2xpZW50SW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvL0FwcGxpY2F0aW9uIGRvZXMgbm90IGhhdmUgdHJhbnNhY3Rpb24gaWQgaW5mb3JtYXRpb24KLSAgICAgICAgLy9nbyB0aHJvdWdoIHN0b3JlZCByZXF1ZXN0cyB0byByZW1vdmUKLSAgICAgICAgYm9vbGVhbiByZW1vdmVkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxjbGllbnRJbmZvLm1SZXFMaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAocmVxLmVxdWFscyhjbGllbnRJbmZvLm1SZXFMaXN0LnZhbHVlQXQoaSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY2xpZW50SW5mby5tUmVxTGlzdC5yZW1vdmVBdChpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcmVtb3ZlZCkgcmV0dXJuOwotCi0gICAgICAgIGlmIChjbGllbnRJbmZvLm1SZXFMaXN0LnNpemUoKSA9PSAwICYmIGNsaWVudEluZm8ubVNlcnZMaXN0LnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJyZW1vdmUgY2xpZW50IGluZm9ybWF0aW9uIGZyb20gZnJhbWV3b3JrIik7Ci0gICAgICAgICAgICBtQ2xpZW50SW5mb0xpc3QucmVtb3ZlKGNsaWVudEluZm8ubU1lc3Nlbmdlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVNlcnZpY2VEaXNjUmVxSWQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlU3VwcGxpY2FudFNlcnZpY2VSZXF1ZXN0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNsZWFyU2VydmljZVJlcXVlc3RzKE1lc3NlbmdlciBtKSB7Ci0KLSAgICAgICAgQ2xpZW50SW5mbyBjbGllbnRJbmZvID0gZ2V0Q2xpZW50SW5mbyhtLCBmYWxzZSk7Ci0gICAgICAgIGlmIChjbGllbnRJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjbGllbnRJbmZvLm1SZXFMaXN0LnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjbGllbnRJbmZvLm1SZXFMaXN0LmNsZWFyKCk7Ci0KLSAgICAgICAgaWYgKGNsaWVudEluZm8ubVNlcnZMaXN0LnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJyZW1vdmUgY2hhbm5lbCBpbmZvcm1hdGlvbiBmcm9tIGZyYW1ld29yayIpOwotICAgICAgICAgICAgbUNsaWVudEluZm9MaXN0LnJlbW92ZShjbGllbnRJbmZvLm1NZXNzZW5nZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1TZXJ2aWNlRGlzY1JlcUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0ZVN1cHBsaWNhbnRTZXJ2aWNlUmVxdWVzdCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBhZGRMb2NhbFNlcnZpY2UoTWVzc2VuZ2VyIG0sIFdpZmlQMnBTZXJ2aWNlSW5mbyBzZXJ2SW5mbykgewotICAgICAgICBjbGVhckNsaWVudERlYWRDaGFubmVscygpOwotICAgICAgICBDbGllbnRJbmZvIGNsaWVudEluZm8gPSBnZXRDbGllbnRJbmZvKG0sIHRydWUpOwotICAgICAgICBpZiAoY2xpZW50SW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNsaWVudEluZm8ubVNlcnZMaXN0LmFkZChzZXJ2SW5mbykpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbVdpZmlOYXRpdmUucDJwU2VydmljZUFkZChzZXJ2SW5mbykpIHsKLSAgICAgICAgICAgIGNsaWVudEluZm8ubVNlcnZMaXN0LnJlbW92ZShzZXJ2SW5mbyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVtb3ZlTG9jYWxTZXJ2aWNlKE1lc3NlbmdlciBtLCBXaWZpUDJwU2VydmljZUluZm8gc2VydkluZm8pIHsKLSAgICAgICAgQ2xpZW50SW5mbyBjbGllbnRJbmZvID0gZ2V0Q2xpZW50SW5mbyhtLCBmYWxzZSk7Ci0gICAgICAgIGlmIChjbGllbnRJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1XaWZpTmF0aXZlLnAycFNlcnZpY2VEZWwoc2VydkluZm8pOwotCi0gICAgICAgIGNsaWVudEluZm8ubVNlcnZMaXN0LnJlbW92ZShzZXJ2SW5mbyk7Ci0gICAgICAgIGlmIChjbGllbnRJbmZvLm1SZXFMaXN0LnNpemUoKSA9PSAwICYmIGNsaWVudEluZm8ubVNlcnZMaXN0LnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJyZW1vdmUgY2xpZW50IGluZm9ybWF0aW9uIGZyb20gZnJhbWV3b3JrIik7Ci0gICAgICAgICAgICBtQ2xpZW50SW5mb0xpc3QucmVtb3ZlKGNsaWVudEluZm8ubU1lc3Nlbmdlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2xlYXJMb2NhbFNlcnZpY2VzKE1lc3NlbmdlciBtKSB7Ci0gICAgICAgIENsaWVudEluZm8gY2xpZW50SW5mbyA9IGdldENsaWVudEluZm8obSwgZmFsc2UpOwotICAgICAgICBpZiAoY2xpZW50SW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKFdpZmlQMnBTZXJ2aWNlSW5mbyBzZXJ2SW5mbzogY2xpZW50SW5mby5tU2Vydkxpc3QpIHsKLSAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycFNlcnZpY2VEZWwoc2VydkluZm8pOwotICAgICAgICB9Ci0KLSAgICAgICAgY2xpZW50SW5mby5tU2Vydkxpc3QuY2xlYXIoKTsKLSAgICAgICAgaWYgKGNsaWVudEluZm8ubVJlcUxpc3Quc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoInJlbW92ZSBjbGllbnQgaW5mb3JtYXRpb24gZnJvbSBmcmFtZXdvcmsiKTsKLSAgICAgICAgICAgIG1DbGllbnRJbmZvTGlzdC5yZW1vdmUoY2xpZW50SW5mby5tTWVzc2VuZ2VyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjbGVhckNsaWVudEluZm8oTWVzc2VuZ2VyIG0pIHsKLSAgICAgICAgY2xlYXJMb2NhbFNlcnZpY2VzKG0pOwotICAgICAgICBjbGVhclNlcnZpY2VSZXF1ZXN0cyhtKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZW5kIHRoZSBzZXJ2aWNlIHJlc3BvbnNlIHRvIHRoZSBXaWZpUDJwTWFuYWdlci5DaGFubmVsLgotICAgICAqCi0gICAgICogQHBhcmFtIHJlc3AKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2VuZFNlcnZpY2VSZXNwb25zZShXaWZpUDJwU2VydmljZVJlc3BvbnNlIHJlc3ApIHsKLSAgICAgICAgZm9yIChDbGllbnRJbmZvIGMgOiBtQ2xpZW50SW5mb0xpc3QudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIFdpZmlQMnBTZXJ2aWNlUmVxdWVzdCByZXEgPSBjLm1SZXFMaXN0LmdldChyZXNwLmdldFRyYW5zYWN0aW9uSWQoKSk7Ci0gICAgICAgICAgICBpZiAocmVxICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBNZXNzYWdlIG1zZyA9IE1lc3NhZ2Uub2J0YWluKCk7Ci0gICAgICAgICAgICAgICAgbXNnLndoYXQgPSBXaWZpUDJwTWFuYWdlci5SRVNQT05TRV9TRVJWSUNFOwotICAgICAgICAgICAgICAgIG1zZy5hcmcxID0gMDsKLSAgICAgICAgICAgICAgICBtc2cuYXJnMiA9IDA7Ci0gICAgICAgICAgICAgICAgbXNnLm9iaiA9IHJlc3A7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgYy5tTWVzc2VuZ2VyLnNlbmQobXNnKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJkZXRlY3QgZGVhZCBjaGFubmVsIik7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFyQ2xpZW50SW5mbyhjLm1NZXNzZW5nZXIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2UgZG9udCBnZXQgbm90aWZpY2F0aW9ucyBvZiBjbGllbnRzIHRoYXQgaGF2ZSBnb25lIGF3YXkuCi0gICAgICogV2UgZGV0ZWN0IHRoaXMgYWN0aXZlbHkgd2hlbiBzZXJ2aWNlcyBhcmUgYWRkZWQgYW5kIHRocm93Ci0gICAgICogdGhlbSBhd2F5LgotICAgICAqCi0gICAgICogVE9ETzogVGhpcyBjYW4gYmUgZG9uZSBiZXR0ZXIgd2l0aCBmdWxsIGFzeW5jIGNoYW5uZWxzLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBjbGVhckNsaWVudERlYWRDaGFubmVscygpIHsKLSAgICAgICAgQXJyYXlMaXN0PE1lc3Nlbmdlcj4gZGVhZENsaWVudHMgPSBuZXcgQXJyYXlMaXN0PE1lc3Nlbmdlcj4oKTsKLQotICAgICAgICBmb3IgKENsaWVudEluZm8gYyA6IG1DbGllbnRJbmZvTGlzdC52YWx1ZXMoKSkgewotICAgICAgICAgICAgTWVzc2FnZSBtc2cgPSBNZXNzYWdlLm9idGFpbigpOwotICAgICAgICAgICAgbXNnLndoYXQgPSBXaWZpUDJwTWFuYWdlci5QSU5HOwotICAgICAgICAgICAgbXNnLmFyZzEgPSAwOwotICAgICAgICAgICAgbXNnLmFyZzIgPSAwOwotICAgICAgICAgICAgbXNnLm9iaiA9IG51bGw7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGMubU1lc3Nlbmdlci5zZW5kKG1zZyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoImRldGVjdCBkZWFkIGNoYW5uZWwiKTsKLSAgICAgICAgICAgICAgICBkZWFkQ2xpZW50cy5hZGQoYy5tTWVzc2VuZ2VyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoTWVzc2VuZ2VyIG0gOiBkZWFkQ2xpZW50cykgewotICAgICAgICAgICAgY2xlYXJDbGllbnRJbmZvKG0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBzcGVjaWZpZWQgQ2xpZW50SW5mby4KLSAgICAgKiBAcGFyYW0gbSBNZXNzZW5nZXIKLSAgICAgKiBAcGFyYW0gY3JlYXRlSWZOb3RFeGlzdCBpZiB0cnVlIGFuZCB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgaW5mbyBkb2VzIG5vdCBleGlzdCwKLSAgICAgKiBjcmVhdGUgbmV3IGNsaWVudCBpbmZvLgotICAgICAqIEByZXR1cm4gdGhlIHNwZWNpZmllZCBDbGllbnRJbmZvLgotICAgICAqLwotICAgIHByaXZhdGUgQ2xpZW50SW5mbyBnZXRDbGllbnRJbmZvKE1lc3NlbmdlciBtLCBib29sZWFuIGNyZWF0ZUlmTm90RXhpc3QpIHsKLSAgICAgICAgQ2xpZW50SW5mbyBjbGllbnRJbmZvID0gbUNsaWVudEluZm9MaXN0LmdldChtKTsKLQotICAgICAgICBpZiAoY2xpZW50SW5mbyA9PSBudWxsICYmIGNyZWF0ZUlmTm90RXhpc3QpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoImFkZCBhIG5ldyBjbGllbnQiKTsKLSAgICAgICAgICAgIGNsaWVudEluZm8gPSBuZXcgQ2xpZW50SW5mbyhtKTsKLSAgICAgICAgICAgIG1DbGllbnRJbmZvTGlzdC5wdXQobSwgY2xpZW50SW5mbyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2xpZW50SW5mbzsKLSAgICB9Ci0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgY2xpZW50IGFuZCB3ZSB0cmFjayB0aGUgc2VydmljZSBkaXNjb3ZlcnkgcmVxdWVzdHMKLSAgICAgKiBhbmQgdGhlIGxvY2FsIHNlcnZpY2VzIHJlZ2lzdGVyZWQgYnkgdGhlIGNsaWVudC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGNsYXNzIENsaWVudEluZm8gewotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIFdpZmlQMnBNYW5hZ2VyLkNoYW5uZWwgaGFuZGxlci4KLSAgICAgICAgICogVGhlIHJlc3BvbnNlIG9mIHRoaXMgcmVxdWVzdCBpcyBub3RpZmllZCB0byBXaWZpUDJwTWFuYWdlci5DaGFubmVsIGhhbmRsZXIKLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgTWVzc2VuZ2VyIG1NZXNzZW5nZXI7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogQSBzZXJ2aWNlIGRpc2NvdmVyeSByZXF1ZXN0IGxpc3QuCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIFNwYXJzZUFycmF5PFdpZmlQMnBTZXJ2aWNlUmVxdWVzdD4gbVJlcUxpc3Q7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogQSBsb2NhbCBzZXJ2aWNlIGluZm9ybWF0aW9uIGxpc3QuCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIExpc3Q8V2lmaVAycFNlcnZpY2VJbmZvPiBtU2Vydkxpc3Q7Ci0KLSAgICAgICAgcHJpdmF0ZSBDbGllbnRJbmZvKE1lc3NlbmdlciBtKSB7Ci0gICAgICAgICAgICBtTWVzc2VuZ2VyID0gbTsKLSAgICAgICAgICAgIG1SZXFMaXN0ID0gbmV3IFNwYXJzZUFycmF5KCk7Ci0gICAgICAgICAgICBtU2Vydkxpc3QgPSBuZXcgQXJyYXlMaXN0PFdpZmlQMnBTZXJ2aWNlSW5mbz4oKTsKLSAgICAgICAgfQotICAgIH0KLX0K